[
  {
    "path": ".gitignore",
    "content": "flask_session/*\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"keystone\"]\n\tpath = keystone\n\turl = https://github.com/ret2got/keystone\n"
  },
  {
    "path": "README.md",
    "content": "# disasm.pro\nFormerly known as disasm.ninja, It's a multi-architecture realtime assembler/disassembler with line-to-line correlation. A live version is currently up at https://disasm.pro/\n\n# What and Why\nIt is basically a nice frontend of my [keystone](https://github.com/ret2got/keystone) fork (for line-to-line assembling) and [capstone](https://github.com/aquynh/capstone). I don't normally do frontend development but I wanted something for quickly analyzing tiny snippets of code (mostly during CTFs) and shellcoding, which led to this. \n\nI know there are other online assemblers/disassemblers out there, but none of them fit my exact needs. \n\n# Support\nIt currently supports 5 architectures:\n\n- x86/64\n- ARMv8\n- MIPS\n- Sparc\n- PowerPC\n\nMost typical assembler directives are also supported. Macros are not fully supported. \n\n# Installation\n\nTo Install and run it locally: \n\n- Git clone with submodules\n\n```\ngit clone https://github.com/ret2got/disasm.pro.git --recursive\ncd disasm.pro\n```\n\n- Build and Install the keystone fork (It's a submodule)\n\n```\ncd keystone\nmkdir build; cd build\n../make-share.sh; sudo make install\n```\n\n- Install the Python3 bindings\n\n\n\n```\ncd bindings/python\nsudo make install3\n```\n\n- Install Python dependencies\n\n```\npip3 install -r requirements.txt\n```\n\nNow you can run it by executing the `ninja.py`\n\n```\npython3 ninja.py\n```\n\n# Bugs/Issues\n\nIf you stumble upon any bugs or somehow get it to segfault, please file an issue.\n"
  },
  {
    "path": "app/.gitignore",
    "content": "__pycache__/*\n"
  },
  {
    "path": "app/__init__.py",
    "content": "from flask import Flask, session\nfrom flask_socketio import SocketIO\nfrom flask_session import Session\n\nasm_ninja = Flask(__name__) #The main flask object\n\n#Config settings\nasm_ninja.config['SECRET_KEY'] = 'topsecrethacker'\nasm_ninja.config['SESSION_TYPE'] = 'filesystem'\n\nSession(asm_ninja)\nninja_socketio = SocketIO(asm_ninja) #The socketIO app\n\nfrom . import index, assemble, disassemble, settings\n#Init the keystones\n# assemble.init_keystone()\ndisassemble.init_capstone()\n"
  },
  {
    "path": "app/assemble.py",
    "content": "from flask import session\nfrom flask_socketio import emit\nfrom . import ninja_socketio\nfrom .settings import get_settings\nfrom .constants import keystone_modes\nfrom .disassemble import capstone_instances\nfrom keystone import *\n\nkeystone_instances = {}\n\n#Initialize all the keystone instances so we can access them directly based on values in the settings\n# def init_keystone():\n    # global keystone_instances\n    # keystone_instances = {}\n\n    # for ARCH in keystone_modes:\n        # current_arch = keystone_modes[ARCH]\n        \n        # if ARCH not in keystone_instances:\n            # keystone_instances[ARCH] = {}\n\n        # for MODE in current_arch['MODES']:\n            # current_mode = current_arch['MODES'][MODE]\n\n            # if MODE not in keystone_instances[ARCH]:\n                # keystone_instances[ARCH][MODE] = {}\n\n            # for ENDIAN in current_mode['ENDIAN']:\n                # current_endian = current_mode['ENDIAN'][ENDIAN]\n\n                # keystone_instances[ARCH][MODE][ENDIAN] = Ks(current_arch['VAL'], current_mode['VAL'] + current_endian['VAL'])\n                \n\n\"\"\"\nReceive a JSON Object with data to assemble\n\"\"\"\n\n@ninja_socketio.on('assemble')\ndef assemble(code):\n    try:\n        current_settings = get_settings()\n        \n        try:\n            starting_offset = int(current_settings['OFFSET'], 16)\n        except:\n            starting_offset = int(current_settings['OFFSET'])\n        current_offset = starting_offset \n\n        #We are gonna do an hack to support labels, since I want line by line assembly and also support labels\n        #And labels won't work if we assemble it line by line cuz labels will be on a different lien\n        #So, I'm gonna first assemble it all at once, and then assemble each line, catching any symbol exceptions for labels\n        #I'll then disassemble the originally assembled code code at that point to get the the instruction that uses the label and add it\n\n        current_arch = keystone_modes[current_settings['ARCH']]\n        current_mode = current_arch['MODES'][current_settings['MODE']]\n        current_endian = current_mode['ENDIAN'][current_settings['ENDIAN']]\n\n        current_keystone = Ks(current_arch['VAL'], current_mode['VAL']+current_endian['VAL'])\n        assembled_code = current_keystone.asm_new(code['code'],current_offset)[0] \n\n        emit('assembled', assembled_code)\n    except Exception as e:\n        print(e)\n        emit('error', str(e).split(\"(\")[0]) #Super hack to get the first part of a Keystone error message\n        return\n"
  },
  {
    "path": "app/constants.py",
    "content": "from keystone import *\nfrom capstone import *\n\nkeystone_modes = {\n        'ARCH_ARM' : {\n            'VAL' : KS_ARCH_ARM,\n            'MODES' : {\n                'MODE_ARM' : {\n                    'VAL' : KS_MODE_ARM,\n                    'DESCRIPTION' : '32 Bit',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': KS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            },\n                        'MODE_BIG_ENDIAN' : {\n                            'VAL': KS_MODE_BIG_ENDIAN,\n                            'DESCRIPTION' : 'Big Endian'\n                            }\n                        }\n                    },\n                'MODE_THUMB' : {\n                    'VAL' : KS_MODE_THUMB,\n                    'DESCRIPTION' : '32 Bit Thumb',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': KS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            },\n                        'MODE_BIG_ENDIAN' : {\n                            'VAL': KS_MODE_BIG_ENDIAN,\n                            'DESCRIPTION' : 'Big Endian'\n                            }\n                        }\n                    }\n                }\n            },\n\n        'ARCH_ARM64' : {\n            'VAL' : KS_ARCH_ARM64,\n            'MODES' : {\n                'MODE_ARM' : {\n                    'VAL' : KS_MODE_LITTLE_ENDIAN,\n                    'DESCRIPTION' : '64 Bit',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': KS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            }\n                        }\n                    }\n                }\n            },\n\n        'ARCH_MIPS': {\n            'VAL' : KS_ARCH_MIPS,\n            'MODES' : {\n                'MODE_MIPS32' : {\n                    'VAL' : KS_MODE_MIPS32,\n                    'DESCRIPTION' : '32 Bit',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': KS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            },\n                        'MODE_BIG_ENDIAN' : {\n                            'VAL': KS_MODE_BIG_ENDIAN,\n                            'DESCRIPTION' : 'Big Endian'\n                            }\n                        }\n                    },\n                'MODE_MIPS64' : {\n                    'VAL' : KS_MODE_MIPS64,\n                    'DESCRIPTION' : '64 Bit',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': KS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            },\n                        'MODE_BIG_ENDIAN' : {\n                            'VAL': KS_MODE_BIG_ENDIAN,\n                            'DESCRIPTION' : 'Big Endian'\n                            }\n                        }\n                    }\n                }\n            },\n\n        'ARCH_SPARC' : {\n                'VAL' : KS_ARCH_SPARC,\n                'MODES' : {\n                    'MODE_SPARC32' : {\n                        'VAL' : KS_MODE_SPARC32,\n                        'DESCRIPTION' : '32 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': KS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                },\n                            'MODE_BIG_ENDIAN' : {\n                                'VAL': KS_MODE_BIG_ENDIAN,\n                                'DESCRIPTION' : 'Big Endian'\n                                }\n                            }\n                        }\n                    }\n                },\n\n        'ARCH_PPC' : {\n                'VAL' : KS_ARCH_PPC,\n                'MODES' : {\n                    'MODE_PPC32' : {\n                        'VAL' : KS_MODE_PPC32,\n                        'DESCRIPTION' : '32 Bit',\n                        'ENDIAN' : {\n                            'MODE_BIG_ENDIAN' : {\n                                'VAL': KS_MODE_BIG_ENDIAN,\n                                'DESCRIPTION' : 'Big Endian'\n                                }\n                            }\n                        },\n                    'MODE_PPC64' : {\n                        'VAL' : KS_MODE_PPC64,\n                        'DESCRIPTION' : '64 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': KS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                },\n                            'MODE_BIG_ENDIAN' : {\n                                'VAL': KS_MODE_BIG_ENDIAN,\n                                'DESCRIPTION' : 'Big Endian'\n                                }\n                            }\n                        }\n                    }\n                },\n\n        'ARCH_X86' : {\n                'VAL' : KS_ARCH_X86,\n                'MODES' : {\n                    'MODE_64' : {\n                        'VAL' : KS_MODE_64,\n                        'DESCRIPTION' : '64 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': KS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                }\n                            }\n                        },\n                    'MODE_32' : {\n                        'VAL' : KS_MODE_32,\n                        'DESCRIPTION' : '32 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': KS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                }\n                            }\n                        },\n                    'MODE_16' : {\n                        'VAL' : KS_MODE_16,\n                        'DESCRIPTION' : '16 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': KS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                }\n                            }\n                        }\n                    }\n                }\n        }\n\ncapstone_modes = {\n        'ARCH_ARM' : {\n            'VAL' : CS_ARCH_ARM,\n            'MODES' : {\n                'MODE_ARM' : {\n                    'VAL' : CS_MODE_ARM,\n                    'DESCRIPTION' : '32 Bit',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': CS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            },\n                        'MODE_BIG_ENDIAN' : {\n                            'VAL': CS_MODE_BIG_ENDIAN,\n                            'DESCRIPTION' : 'Big Endian'\n                            }\n                        }\n                    },\n                'MODE_THUMB' : {\n                    'VAL' : CS_MODE_THUMB,\n                    'DESCRIPTION' : '32 Bit Thumb',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': CS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            },\n                        'MODE_BIG_ENDIAN' : {\n                            'VAL': CS_MODE_BIG_ENDIAN,\n                            'DESCRIPTION' : 'Big Endian'\n                            }\n                        }\n                    }\n                }\n            },\n\n        'ARCH_ARM64' : {\n            'VAL' : CS_ARCH_ARM64,\n            'MODES' : {\n                'MODE_ARM' : {\n                    'VAL' : CS_MODE_LITTLE_ENDIAN,\n                    'DESCRIPTION' : '64 Bit',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': CS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            }\n                        }\n                    }\n                }\n            },\n\n        'ARCH_MIPS': {\n            'VAL' : CS_ARCH_MIPS,\n            'MODES' : {\n                'MODE_MIPS32' : {\n                    'VAL' : CS_MODE_MIPS32,\n                    'DESCRIPTION' : '32 Bit',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': CS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            },\n                        'MODE_BIG_ENDIAN' : {\n                            'VAL': CS_MODE_BIG_ENDIAN,\n                            'DESCRIPTION' : 'Big Endian'\n                            }\n                        }\n                    },\n                'MODE_MIPS64' : {\n                    'VAL' : CS_MODE_MIPS64,\n                    'DESCRIPTION' : '64 Bit',\n                    'ENDIAN' : {\n                        'MODE_LITTLE_ENDIAN': {\n                            'VAL': CS_MODE_LITTLE_ENDIAN,\n                            'DESCRIPTION' : 'Little Endian'\n                            },\n                        'MODE_BIG_ENDIAN' : {\n                            'VAL': CS_MODE_BIG_ENDIAN,\n                            'DESCRIPTION' : 'Big Endian'\n                            }\n                        }\n                    }\n                }\n            },\n\n        'ARCH_SPARC' : {\n                'VAL' : CS_ARCH_SPARC,\n                'MODES' : {\n                    'MODE_SPARC32' : {\n                        'VAL' : CS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : '32 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': CS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                },\n                            'MODE_BIG_ENDIAN' : {\n                                'VAL': CS_MODE_BIG_ENDIAN,\n                                'DESCRIPTION' : 'Big Endian'\n                                }\n                            }\n                        }\n                    }\n                },\n\n        'ARCH_PPC' : {\n                'VAL' : CS_ARCH_PPC,\n                'MODES' : {\n                    'MODE_PPC32' : {\n                        'VAL' : CS_MODE_32,\n                        'DESCRIPTION' : '32 Bit',\n                        'ENDIAN' : {\n                            'MODE_BIG_ENDIAN' : {\n                                'VAL': CS_MODE_BIG_ENDIAN,\n                                'DESCRIPTION' : 'Big Endian'\n                                }\n                            }\n                        },\n                    'MODE_PPC64' : {\n                        'VAL' : CS_MODE_64,\n                        'DESCRIPTION' : '64 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': CS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                },\n                            'MODE_BIG_ENDIAN' : {\n                                'VAL': CS_MODE_BIG_ENDIAN,\n                                'DESCRIPTION' : 'Big Endian'\n                                }\n                            }\n                        }\n                    }\n                },\n\n        'ARCH_X86' : {\n                'VAL' : CS_ARCH_X86,\n                'MODES' : {\n                    'MODE_64' : {\n                        'VAL' : CS_MODE_64,\n                        'DESCRIPTION' : '64 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': CS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                }\n                            }\n                        },\n                    'MODE_32' : {\n                        'VAL' : CS_MODE_32,\n                        'DESCRIPTION' : '32 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': CS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                }\n                            }\n                        },\n                    'MODE_16' : {\n                        'VAL' : CS_MODE_16,\n                        'DESCRIPTION' : '16 Bit',\n                        'ENDIAN' : {\n                            'MODE_LITTLE_ENDIAN': {\n                                'VAL': CS_MODE_LITTLE_ENDIAN,\n                                'DESCRIPTION' : 'Little Endian'\n                                }\n                            }\n                        }\n                    }\n                }\n        }\n"
  },
  {
    "path": "app/disassemble.py",
    "content": "from . import ninja_socketio\nfrom .settings import get_settings\nfrom flask import session\nfrom .constants import capstone_modes\nfrom capstone import *\nfrom flask_socketio import emit\n\ncapstone_instances = {}\n\ndef init_capstone():\n    global capstone_instances\n    for ARCH in capstone_modes:\n        current_arch = capstone_modes[ARCH]\n        \n        if ARCH not in capstone_instances:\n            capstone_instances[ARCH] = {}\n\n        for MODE in current_arch['MODES']:\n            current_mode = current_arch['MODES'][MODE]\n\n            if MODE not in capstone_instances[ARCH]:\n                capstone_instances[ARCH][MODE] = {}\n\n            for ENDIAN in current_mode['ENDIAN']:\n                current_endian = current_mode['ENDIAN'][ENDIAN]\n\n                capstone_instances[ARCH][MODE][ENDIAN] = Cs(current_arch['VAL'], current_mode['VAL'] + current_endian['VAL'])\n\n@ninja_socketio.on('disassemble')\ndef disassemble(code):\n    try:\n        current_settings = get_settings() \n\n        current_capstone = capstone_instances[current_settings['ARCH']][current_settings['MODE']][current_settings['ENDIAN']]\n        try:\n            current_offset = int(current_settings['OFFSET'], 16)\n        except:\n            current_offset = int(current_settings['OFFSET'])\n\n        code_to_disassemble = bytes([X for Y in code['code'] for X in Y]) #Flatten the list\n\n        output_instructions = \"\"\n\n        for instr in current_capstone.disasm(code_to_disassemble, current_offset):\n            output_instructions += \"{} {}\\n\".format(instr.mnemonic, instr.op_str)\n\n        emit('disassembled', output_instructions)\n    except Exception as e:\n        print(e)\n        emit('error', str(e).split(\"(\")[0]) #Super hack to get the first part of a Keystone error message\n        return\n\n\n\n         \n"
  },
  {
    "path": "app/index/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>disasm.pro | Online Assembler and Disassembler</title>\n\t<link rel=\"stylesheet\" href=\"static/css/libs/w3.css\">\n\t<link rel=\"stylesheet\" href=\"static/css/dark.css\">\n    <link rel=\"stylesheet\" href=\"static/css/beanstalk.css\">\n\t<link rel=\"stylesheet\" href=\"static/css/index.css\">\n\n    <script src=\"static/js/libs/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\" async defer></script>\n    <script src=\"static/js/libs/easydropdown/easydropdown.js\"></script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.4/socket.io.js\"></script>\n</head>\n<body>\n\t<div>\n            <div class=\"headercontainer\">\n                <div class=\"\">\n                    <select id=\"ARCH\">\n                        <option value=\"ARCH_X86\">Arch: x86</option>\n                        <option value=\"ARCH_ARM\">Arch: ARM</option>\n                        <option value=\"ARCH_ARM64\">Arch: ARM64</option>\n                        <option value=\"ARCH_MIPS\">Arch: MIPS</option>\n                        <option value=\"ARCH_PPC\">Arch: PowerPC</option>\n                        <option value=\"ARCH_SPARC\">Arch: Sparc</option>\n                    </select>\n                </div>\n                <div class=\"custom-mode\" style=\"\">\n                    <select id=\"MODE\">\n                    </select>\n                </div>\n                <div class=\"\">\n                    <select id=\"ENDIAN\">\n                    </select>\n                </div>\n                <div class=\"\">\n                    <div style=\"width:220px;height:50px\">\n                        <label for=\"OFFSET\" style=\"color:white;font-size: 17px;font-family: 'Open Sans', arial, helvetica, sans-serif;text-shadow: 1px 1px 1px #1b7579;padding-right:3%\">Base: </label>\n                        <input id=\"OFFSET\" value=\"0x0\" style=\"width:70%;height: 90%;box-sizing: border-box;padding-right:10px;padding-left:10px\" class=\"edd-head edd-root simple-style-inputs w3-select\" />\n                    </div>\n                </div>\n                <div class=\"\">\n                    <select id=\"VIEW\" class=\"simple-style-inputs w3-select\">\n                        <option value=\"1\">Prettified</option>\n                        <option value=\"2\">Raw String</option>\n                    </select>\n                </div>\n        </div>\n\n\t\t<div>\n\t\t\t<div class=\"w3-row-padding\">\n                <div class=\"w3-col\" style=\"width:50%\">\n                    <div id=\"asm_editor\" class=\"editor w3-card\"></div>\n                </div>\n                <div class=\"w3-col\" style=\"width:50%;\">\n                    <div id=\"machine_editor\" class=\"editor w3-card\"></div>\n                </div>\n            </div>\n\n        </div>\n        <div class=\"bottomcontainer\">\n            <div id=\"filler\" style=\"min-width: 20%\">\n            </div>\n            <div id=\"msg-box\" class=\"w3-code errorbox\">\n                Initializing...\n            </div>\n        </div>\n\n\n        <!-- Footer -->\n    </div>\n    <script src=\"static/js/constants.js\"></script>\n    <script src=\"static/js/index.js\"></script>\n    <script src=\"static/js/assemble.js\"></script>\n    <script src=\"static/js/disassemble.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/index.py",
    "content": "from . import asm_ninja\nfrom flask import send_from_directory\n\n@asm_ninja.route(\"/\", methods=['GET'])\ndef index():\n    return send_from_directory('index', 'index.html')\n"
  },
  {
    "path": "app/settings.py",
    "content": "from flask import session\nfrom  .constants import keystone_modes\nfrom . import ninja_socketio\nfrom keystone import *\nimport copy\nfrom flask_socketio import emit\n\n\n#This is basically the management of user's assembler/disassemblers config options\n\n#New update from client\n@ninja_socketio.on('update_settings')\ndef update(options):\n    try:\n        session['settings'] = copy.copy(options)\n    except:\n        return False\n\ndef get_settings():\n    if 'settings' not in session:\n        emit('get_settings')\n        raise Exception(\"No settings initialized\")\n    return session['settings']\n\n"
  },
  {
    "path": "app/static/css/beanstalk.css",
    "content": "@import '//fonts.googleapis.com/css?family=Open+Sans:400,600';\n\n.edd-root,\n.edd-root *,\n.edd-root *::before,\n.edd-root *::after {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n.edd-root {\n    display: inline-block;\n    position: relative;\n    width: 180px;\n    user-select: none;\n    font-family: 'Open Sans', arial, helvetica, sans-serif;\n    font-size: 16px;\n    color: #333;\n}\n\n.edd-root-disabled {\n    color: #ccc;\n    cursor: not-allowed;\n}\n\n.edd-head {\n    position: relative;\n    overflow: hidden;\n    border: 1px solid #eee;\n    transition: box-shadow 200ms, border-color 150ms;\n    /* background: white; */\n    background-color: #171616;\n    color: white;\n    text-shadow: 2px 3px 4px #1b7579;\n}\n\n.edd-head,\n.edd-body {\n    border-radius: 4px;\n}\n\n.edd-root-focused .edd-head {\n    box-shadow: 0 0 5px rgba(105, 215, 255, 0.4);\n}\n\n.edd-root-invalid .edd-head {\n    box-shadow: 0 0 5px rgba(255, 105, 105, 0.671);\n}\n\n.edd-root:not(.edd-root-disabled):not(.edd-root-open) .edd-head:hover {\n    border-color: #ccc;\n}\n\n.edd-value {\n    width: calc(100% - 50px);\n    display: inline-block;\n    vertical-align: middle;\n    margin: 8px 0 8px 8px;\n    border-right: 1px solid #eee;\n}\n\n.edd-arrow {\n    position: absolute;\n    width: 18px;\n    height: 10px;\n    top: calc(50% - 5px);\n    right: calc(24px - 9px);\n    transition: transform 150ms;\n    pointer-events: none;\n}\n\n.edd-arrow::before {\n    content: '';\n    position: absolute;\n    width: 13px;\n    height: 13px;\n    border-right: 1px solid currentColor;\n    border-bottom: 1px solid currentColor;\n    top: -5px;\n    right: 0;\n    transform: rotate(45deg);\n    transform-origin: 50% 25%;\n}\n\n.edd-root-open .edd-arrow {\n    transform: rotate(180deg);\n}\n\n.edd-value,\n.edd-option,\n.edd-group-label {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.edd-root:not(.edd-root-disabled) .edd-value,\n.edd-option {\n    cursor: pointer;\n}\n\n.edd-select {\n    position: absolute;\n    opacity: 0;\n    width: 100%;\n    left: -100%;\n    top: 0;\n}\n\n.edd-root-native .edd-select {\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.edd-body {\n    opacity: 0;\n    position: absolute;\n    left: 0;\n    right: 0;\n    border: 1px solid #eee;\n    pointer-events: none;\n    overflow: hidden;\n    margin: 8px 0;\n    z-index: 999;\n    box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);\n    transform: scale(0.95);\n    background: white;\n}\n\n.edd-root-open .edd-body {\n    opacity: 1;\n    pointer-events: all;\n    transform: scale(1);\n    transition: opacity 200ms, transform 100ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n}\n\n.edd-root-open-above .edd-body {\n    bottom: 100%;\n}\n\n.edd-root-open-below .edd-body {\n    top: 100%;\n}\n\n.edd-items-list {\n    overflow: auto;\n    max-height: 0;\n    transition: max-height 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n    -webkit-overflow-scrolling: touch;\n}\n\n.edd-group-label {\n    font-size: 11px;\n    text-transform: uppercase;\n    font-weight: bold;\n    letter-spacing: 0.1em;\n    padding: 12px 8px 4px;\n    color: #999;\n}\n\n.edd-group-has-label {\n    border-bottom: 1px solid #eee;\n}\n\n.edd-option {\n    padding: 4px 8px;\n}\n\n.edd-group-has-label .edd-option {\n    padding-left: 20px;\n}\n\n.edd-option-selected {\n    font-weight: bold;\n}\n\n.edd-option-focused:not(.edd-option-disabled) {\n    color: #4ac5f1;\n}\n\n.edd-option-disabled,\n.edd-group-disabled .edd-option {\n    cursor: default;\n    color: #ccc;\n}\n\n.edd-gradient-top,\n.edd-gradient-bottom {\n    content: '';\n    position: absolute;\n    left: 2px;\n    right: 2px;\n    height: 32px;\n    background-image:\n        linear-gradient(\n            0deg,\n            rgba(255, 255, 255, 0) 0%,\n            rgba(255, 255, 255, 1) 40%,\n            rgba(255, 255, 255, 1) 60%,\n            rgba(255, 255, 255, 0) 100%\n        );\n    background-repeat: repeat-x;\n    background-size: 100% 200%;\n    pointer-events: none;\n    transition: opacity 100ms;\n    opacity: 0;\n}\n\n.edd-gradient-top {\n    background-position: bottom;\n    top: 0;\n}\n\n.edd-gradient-bottom {\n    background-position: top;\n    bottom: 0;\n}\n\n.edd-body-scrollable .edd-gradient-top,\n.edd-body-scrollable .edd-gradient-bottom {\n    opacity: 1;\n}\n\n.edd-body-scrollable.edd-body-at-top .edd-gradient-top,\n.edd-body-scrollable.edd-body-at-bottom .edd-gradient-bottom {\n    opacity: 0;\n}"
  },
  {
    "path": "app/static/css/dark.css",
    "content": "\n\nbody {\n\tfont-family: 'Helvetica';\n\tline-height: 1.75em;\n\tfont-size: 16px;\n\tbackground-color: #222;\n\tcolor: #aaa;\n}\n\n\n@media (min-width: 1921px) {\n\tbody {\n\t\tfont-size: 18px;\n\t}\n}\n"
  },
  {
    "path": "app/static/css/index.css",
    "content": "html {\n    color: #222;\n    font-size: 1em;\n    line-height: normal;\n}\n/*\n * Remove text-shadow in selection highlight:\n * https://twitter.com/miketaylr/status/12228805301\n *\n * These selection rule sets have to be separate.\n * Customize the background color to match your design.\n */\n\n::-moz-selection {\n    background: #b3d4fc;\n    text-shadow: none;\n}\n\n::selection {\n    background: #b3d4fc;\n    text-shadow: none;\n}\n\n/*\n * A better looking default horizontal rule\n */\n\nhr {\n    display: block;\n    height: 1px;\n    border: 0;\n    border-top: 1px solid #ccc;\n    margin: 1em 0;\n    padding: 0;\n}\n\n/*\n * Remove the gap between audio, canvas, iframes,\n * images, videos and the bottom of their containers:\n * https://github.com/h5bp/html5-boilerplate/issues/440\n */\n\naudio,\ncanvas,\niframe,\nimg,\nsvg,\nvideo {\n    vertical-align: middle;\n}\n\n/*\n * Remove default fieldset styles.\n */\n\nfieldset {\n    border: 0;\n    margin: 0;\n    padding: 0;\n}\n\n/*\n * Allow only vertical resizing of textareas.\n */\n\ntextarea {\n    resize: vertical;\n}\n\n/* ==========================================================================\n   Browser Upgrade Prompt\n   ========================================================================== */\n\n.browserupgrade {\n    margin: 0.2em 0;\n    background: #ccc;\n    color: #000;\n    padding: 0.2em 0;\n}\n\n/* ==========================================================================\n   Author's custom styles\n   ========================================================================== */\n\n\n.editor {\n    width: 100%;\n    height: 83vh;\n    border-radius: 5px;\n    border: 1px solid black;\n}\n.simple-style-inputs {\n    padding : 0;\n    border-radius: 3%;\n}\n\n.container-select-box{\n    margin-right:5%;\n    width: 15%;\n}\n\n\n.bottomcontainer {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 10px;\n    padding-right: 15px;\n    padding-left: 15px;\n}\n\n.headercontainer {\n    display: flex;\n    justify-content: space-around;\n    padding: 10px;\n}\n\n.errorbox {\n    background-color: rgb(20,20,20); \n    color: rgb(218,218,218);\n    box-shadow: rgba(0, 0, 0, 0.2) 0px 4px 10px 0px;\n    border-radius: 5px;\n    min-width: 25%;\n    max-width: 40%;\n    text-align: center;\n    border: 1px solid black;\n}\n\n\n\n.footerright {\n    font-size: 0.8em;\n    min-width: 20%;\n    text-align: right;\n}\n\n\n/* ==========================================================================\nHelper classes\n========================================================================== */\n\n    /*\n     * Hide visually and from screen readers\n     */\n\n    .hidden {\n        display: none !important;\n    }\n\n    /*\n     * Hide only visually, but have it available for screen readers:\n     * http://snook.ca/archives/html_and_css/hiding-content-for-accessibility\n     */\n\n    .visuallyhidden {\n        border: 0;\n        clip: rect(0 0 0 0);\n        height: 1px;\n        margin: -1px;\n        overflow: hidden;\n        padding: 0;\n        position: absolute;\n        width: 1px;\n    }\n\n    /*\n     * Extends the .visuallyhidden class to allow the element\n     * to be focusable when navigated to via the keyboard:\n     * https://www.drupal.org/node/897638\n     */\n\n    .visuallyhidden.focusable:active,\n    .visuallyhidden.focusable:focus {\n        clip: auto;\n        height: auto;\n        margin: 0;\n        overflow: visible;\n        position: static;\n        width: auto;\n    }\n\n    /*\n     * Hide visually and from screen readers, but maintain layout\n     */\n\n    .invisible {\n        visibility: hidden;\n    }\n\n    /*\n     * Clearfix: contain floats\n     *\n     * For modern browsers\n     * 1. The space content is one way to avoid an Opera bug when the\n     *    `contenteditable` attribute is included anywhere else in the document.\n     *    Otherwise it causes space to appear at the top and bottom of elements\n     *    that receive the `clearfix` class.\n     * 2. The use of `table` rather than `block` is only necessary if using\n     *    `:before` to contain the top-margins of child elements.\n     */\n\n    .clearfix:before,\n    .clearfix:after {\n        content: \" \"; /* 1 */\n        display: table; /* 2 */\n    }\n\n    .clearfix:after {\n        clear: both;\n    }\n\n    /* ==========================================================================\n    EXAMPLE Media Queries for Responsive Design.\n    These examples override the primary ('mobile first') styles.\n    Modify as content requires.\n    ========================================================================== */\n\n    @media only screen and (min-width: 35em) {\n        /* Style adjustments for viewports that meet the condition */\n    }\n\n    @media print,\n    (-webkit-min-device-pixel-ratio: 1.25),\n    (min-resolution: 1.25dppx),\n    (min-resolution: 120dpi) {\n        /* Style adjustments for high resolution devices */\n    }\n\n    /* ==========================================================================\n    Print styles.\n    Inlined to avoid the additional HTTP request:\n    http://www.phpied.com/delay-loading-your-print-css/\n    ========================================================================== */\n\n    @media print {\n        *,\n        *:before,\n        *:after,\n        *:first-letter,\n        *:first-line {\n            background: transparent !important;\n            color: #000 !important; /* Black prints faster:\n            http://www.sanbeiji.com/archives/953 */\n    box-shadow: none !important;\n    text-shadow: none !important;\n}\n\n\na[href]:after {\n    content: \" (\" attr(href) \")\";\n}\n\nabbr[title]:after {\n    content: \" (\" attr(title) \")\";\n}\n\n/*\n * Don't show links that are fragment identifiers,\n * or use the `javascript:` pseudo protocol\n */\n\n    a[href^=\"#\"]:after,\n    a[href^=\"javascript:\"]:after {\n        content: \"\";\n    }\n\n    pre,\n    blockquote {\n        border: 1px solid #999;\n        page-break-inside: avoid;\n    }\n\n    /*\n     * Printing Tables:\n     * http://css-discuss.incutio.com/wiki/Printing_Tables\n     */\n\n    thead {\n        display: table-header-group;\n    }\n\n    tr,\n    img {\n        page-break-inside: avoid;\n    }\n\n    img {\n        max-width: 100% !important;\n    }\n\n    p,\n    h2,\n    h3 {\n        orphans: 3;\n        widows: 3;\n    }\n\n    h2,\n    h3 {\n        page-break-after: avoid;\n    }\n}\n\n.custom-mode > .edd-root {\n    width: 230px;\n}\n"
  },
  {
    "path": "app/static/css/libs/w3.css",
    "content": "﻿/* W3.CSS 4.12 November 2018 by Jan Egil and Borge Refsnes */\r\nhtml{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}\r\n/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */\r\nhtml{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}\r\narticle,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}\r\naudio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}\r\naudio:not([controls]){display:none;height:0}[hidden],template{display:none}\r\na{background-color:transparent;-webkit-text-decoration-skip:objects}\r\na:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}\r\ndfn{font-style:italic}mark{background:#ff0;color:#000}\r\nsmall{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}\r\nsub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none}svg:not(:root){overflow:hidden}\r\ncode,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}\r\nbutton,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}\r\nbutton,input{overflow:visible}button,select{text-transform:none}\r\nbutton,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}\r\nbutton::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner{border-style:none;padding:0}\r\nbutton:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring{outline:1px dotted ButtonText}\r\nfieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}\r\nlegend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}\r\n[type=checkbox],[type=radio]{padding:0}\r\n[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}\r\n[type=search]{-webkit-appearance:textfield;outline-offset:-2px}\r\n[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}\r\n::-webkit-input-placeholder{color:inherit;opacity:0.54}\r\n::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}\r\n/* End extract */\r\nhtml,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden}\r\nh1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.w3-serif{font-family:serif}\r\nh1,h2,h3,h4,h5,h6{font-family:\"Segoe UI\",Arial,sans-serif;font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px}\r\nhr{border:0;border-top:1px solid #eee;margin:20px 0}\r\n.w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit}\r\n.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc}\r\n.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1}\r\n.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1}\r\n.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center}\r\n.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}\r\n.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px}\r\n.w3-btn,.w3-button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap}\r\n.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}\r\n.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}   \r\n.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none}\r\n.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none}\r\n.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%}\r\n.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none}\r\n.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block}\r\n.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s}\r\n.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%}\r\n.w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc}\r\n.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer}\r\n.w3-dropdown-hover:hover .w3-dropdown-content{display:block}\r\n.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000}\r\n.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000}\r\n.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1}\r\n.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px}\r\n.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}\r\n.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%}\r\n.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%}\r\n.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px}\r\n.w3-main,#main{transition:margin-left .4s}\r\n.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)}\r\n.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}\r\n.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto}\r\n.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0}\r\n.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left}\r\n.w3-bar .w3-button{white-space:normal}\r\n.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0}\r\n.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%}\r\n.w3-responsive{display:block;overflow-x:auto}\r\n.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before,\r\n.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:\"\";display:table;clear:both}\r\n.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%}\r\n.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%}\r\n.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%}\r\n.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%}\r\n@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%}\r\n.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%}\r\n.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}}\r\n@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%}\r\n.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%}\r\n.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}}\r\n.w3-rest{overflow:hidden}.w3-stretch{margin-left:-16px;margin-right:-16px}\r\n.w3-content,.w3-auto{margin-left:auto;margin-right:auto}.w3-content{max-width:980px}.w3-auto{max-width:1140px}\r\n.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell}\r\n.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom}\r\n.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important}\r\n@media (max-width:1205px){.w3-auto{max-width:95%}}\r\n@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px}\r\n.w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative}\t\r\n.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center}\r\n.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}}\r\n@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}}\r\n@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}}\r\n@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}}\r\n@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}.w3-auto{max-width:100%}}\r\n.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0}\r\n.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2}\r\n.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0}\r\n.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0}\r\n.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}\r\n.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)}\r\n.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)}\r\n.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}\r\n.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}\r\n.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none}\r\n.w3-display-position{position:absolute}\r\n.w3-circle{border-radius:50%}\r\n.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px}\r\n.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px}\r\n.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px}\r\n.w3-code,.w3-codespan{font-family:Consolas,\"courier new\";font-size:16px}\r\n.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word}\r\n.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}\r\n.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}\r\n.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)}\r\n.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}\r\n.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}\r\n.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}}\r\n.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}\r\n.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}\r\n.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}\r\n.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}}\r\n.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}}\r\n.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important}\r\n.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1}\r\n.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75}\r\n.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)}\r\n.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)}\r\n.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)}\r\n.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important}\r\n.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important}\r\n.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important}\r\n.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important}\r\n.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important}\r\n.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important}\r\n.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important}\r\n.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important}\r\n.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important}\r\n.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important}\r\n.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important}\r\n.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important}\r\n.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important}\r\n.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important}\r\n.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important}\r\n.w3-left{float:left!important}.w3-right{float:right!important}\r\n.w3-button:hover{color:#000!important;background-color:#ccc!important}\r\n.w3-transparent,.w3-hover-none:hover{background-color:transparent!important}\r\n.w3-hover-none:hover{box-shadow:none!important}\r\n/* Colors */\r\n.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important}\r\n.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important}\r\n.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important}\r\n.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important}\r\n.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important}\r\n.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}\r\n.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important}\r\n.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important}\r\n.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important}\r\n.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important}\r\n.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important}\r\n.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important}\r\n.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important}\r\n.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}\r\n.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important}\r\n.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important}\r\n.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}\r\n.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important}\r\n.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important}\r\n.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important}\r\n.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important}\r\n.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important}\r\n.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important}\r\n.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important}\r\n.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important}\r\n.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important}\r\n.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important}\r\n.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important}\r\n.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important}\r\n.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important}\r\n.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important}\r\n.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important}\r\n.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important}\r\n.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important}\r\n.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important}\r\n.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important}\r\n.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important}\r\n.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important}\r\n.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important}\r\n.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important}\r\n.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important}\r\n.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important}\r\n.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important}\r\n.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important}\r\n.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important}\r\n.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important}\r\n.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important}\r\n.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important}\r\n.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important}\r\n.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important}\r\n.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important}\r\n.w3-text-white,.w3-hover-text-white:hover{color:#fff!important}\r\n.w3-text-black,.w3-hover-text-black:hover{color:#000!important}\r\n.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important}\r\n.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important}\r\n.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important}\r\n.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important}\r\n.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important}\r\n.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important}\r\n.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important}\r\n.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important}\r\n.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important}\r\n.w3-border-blue-grey,.w3-hover-border-blue-grey:hover,.w3-border-blue-gray,.w3-hover-border-blue-gray:hover{border-color:#607d8b!important}\r\n.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important}\r\n.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important}\r\n.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important}\r\n.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important}\r\n.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important}\r\n.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important}\r\n.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important}\r\n.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important}\r\n.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important}\r\n.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important}\r\n.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important}\r\n.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important}\r\n.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important}\r\n.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important}\r\n.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important}\r\n.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important}\r\n.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important}\r\n.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important}\r\n.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important}\r\n.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important}\r\n.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important}"
  },
  {
    "path": "app/static/js/assemble.js",
    "content": "function send_asm_update(){\n    let asm_code = asm_editor.getValue();\n    socket.emit('assemble', {'code':asm_code})\n}\n\nfunction update_assembled_prettified(code){\n    output_code = \"\";\n\n    code.forEach(function(code_line){\n        hexed_line = Array.from(new Uint8Array(code_line)).map(function(inp){return (\"0\"+inp.toString(16)).substr(-2).toUpperCase()}).join(' ')\n        output_code += hexed_line + \"\\n\"\n    })\n\n    mutex_lock = true\n    machine_editor.setOption(\"wrap\", false); //Don't wrap\n    machine_editor.setValue(output_code, 1);\n    //move cursor simultaneously\n    let cur_line = asm_editor.selection.getCursor().row;\n    machine_editor.selection.moveTo(cur_line, 0);\n\n    mutex_lock = false;\n\n}\n\nfunction update_assembled_raw(code){\n    let output_code = \"\"\n\n    code.forEach(function(code_line){\n        hexed_line_raw = Array.from(new Uint8Array(code_line)).map(function(inp){return \"\\\\x\"+ (\"0\"+inp.toString(16)).substr(-2).toUpperCase()}).join('')\n        output_code += hexed_line_raw\n    })\n    mutex_lock = true\n    machine_editor.setOption(\"wrap\", true); //wrap lines for raw string\n    machine_editor.setValue(output_code, 1);\n    mutex_lock = false;\n\n}\n\nfunction update_assembled_code(code){\n    global_settings.machine_code_bytes = JSON.stringify(code);// Update the code bytes in local storage for when we change modes\n\n    if (global_settings['VIEW'] == '1')\n        update_assembled_prettified(code)\n    else update_assembled_raw(code);\n\n    set_success_message(\"Code Assembled\")\n\n}\n"
  },
  {
    "path": "app/static/js/constants.js",
    "content": "let KS_ARCH_ARM = 1\nlet KS_ARCH_ARM64 = 2\nlet KS_ARCH_MIPS = 3\nlet KS_ARCH_X86 = 4\nlet KS_ARCH_PPC = 5\nlet KS_ARCH_SPARC = 6\nlet KS_ARCH_SYSTEMZ = 7\nlet KS_ARCH_HEXAGON = 8\nlet KS_ARCH_EVM = 9\nlet KS_ARCH_MAX = 10\nlet KS_MODE_LITTLE_ENDIAN = 0\nlet KS_MODE_BIG_ENDIAN = 1073741824\nlet KS_MODE_ARM = 1\nlet KS_MODE_THUMB = 16\nlet KS_MODE_V8 = 64\nlet KS_MODE_MICRO = 16\nlet KS_MODE_MIPS3 = 32\nlet KS_MODE_MIPS32R6 = 64\nlet KS_MODE_MIPS32 = 4\nlet KS_MODE_MIPS64 = 8\nlet KS_MODE_16 = 2\nlet KS_MODE_32 = 4\nlet KS_MODE_64 = 8\nlet KS_MODE_PPC32 = 4\nlet KS_MODE_PPC64 = 8\nlet KS_MODE_QPX = 16\nlet KS_MODE_SPARC32 = 4\nlet KS_MODE_SPARC64 = 8\nlet KS_MODE_V9 = 16\n\nkeystone_modes = {\n    'ARCH_ARM' : {\n        'VAL' : KS_ARCH_ARM,\n        'MODES' : {\n            'MODE_ARM' : {\n                'VAL' : KS_MODE_ARM,\n                'DESCRIPTION' : 'Armv8 32 bit (Aarch32)',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    },\n                    'MODE_BIG_ENDIAN' : {\n                        'VAL': KS_MODE_BIG_ENDIAN,\n                        'DESCRIPTION' : 'Big Endian'\n                    }\n                }\n            },\n            'MODE_THUMB' : {\n                'VAL' : KS_MODE_THUMB,\n                'DESCRIPTION' : 'Armv8 16 bit (Thumb)',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    },\n                    'MODE_BIG_ENDIAN' : {\n                        'VAL': KS_MODE_BIG_ENDIAN,\n                        'DESCRIPTION' : 'Big Endian'\n                    }\n                }\n            }\n        }\n    },\n\n    'ARCH_ARM64' : {\n        'VAL' : KS_ARCH_ARM64,\n        'MODES' : {\n            'MODE_ARM' : {\n                'VAL' : KS_MODE_LITTLE_ENDIAN,\n                'DESCRIPTION' : 'Armv8 64 Bit (Aarch64)',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    }\n                }\n            }\n        }\n    },\n\n    'ARCH_MIPS': {\n        'VAL' : KS_ARCH_MIPS,\n        'MODES' : {\n            'MODE_MIPS32' : {\n                'VAL' : KS_MODE_MIPS32,\n                'DESCRIPTION' : '32 Bit',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    },\n                    'MODE_BIG_ENDIAN' : {\n                        'VAL': KS_MODE_BIG_ENDIAN,\n                        'DESCRIPTION' : 'Big Endian'\n                    }\n                }\n            },\n            'MODE_MIPS64' : {\n                'VAL' : KS_MODE_MIPS64,\n                'DESCRIPTION' : '64 Bit',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    },\n                    'MODE_BIG_ENDIAN' : {\n                        'VAL': KS_MODE_BIG_ENDIAN,\n                        'DESCRIPTION' : 'Big Endian'\n                    }\n                }\n            }\n        }\n    },\n\n    'ARCH_SPARC' : {\n        'VAL' : KS_ARCH_SPARC,\n        'MODES' : {\n            'MODE_SPARC32' : {\n                'VAL' : KS_MODE_SPARC32,\n                'DESCRIPTION' : '32 Bit',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    },\n                    'MODE_BIG_ENDIAN' : {\n                        'VAL': KS_MODE_BIG_ENDIAN,\n                        'DESCRIPTION' : 'Big Endian'\n                    }\n                }\n            }\n        }\n    },\n\n    'ARCH_PPC' : {\n        'VAL' : KS_ARCH_PPC,\n        'MODES' : {\n            'MODE_PPC32' : {\n                'VAL' : KS_MODE_PPC32,\n                'DESCRIPTION' : '32 Bit',\n                'ENDIAN' : {\n                    'MODE_BIG_ENDIAN' : {\n                        'VAL': KS_MODE_BIG_ENDIAN,\n                        'DESCRIPTION' : 'Big Endian'\n                    }\n                }\n            },\n            'MODE_PPC64' : {\n                'VAL' : KS_MODE_PPC64,\n                'DESCRIPTION' : '64 Bit',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    },\n                    'MODE_BIG_ENDIAN' : {\n                        'VAL': KS_MODE_BIG_ENDIAN,\n                        'DESCRIPTION' : 'Big Endian'\n                    }\n                }\n            }\n        }\n    },\n\n    'ARCH_X86' : {\n        'VAL' : KS_ARCH_X86,\n        'MODES' : {\n            'MODE_64' : {\n                'VAL' : KS_MODE_64,\n                'DESCRIPTION' : '64 Bit',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    }\n                }\n            },\n            'MODE_32' : {\n                'VAL' : KS_MODE_32,\n                'DESCRIPTION' : '32 Bit',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    }\n                }\n            },\n            'MODE_16' : {\n                'VAL' : KS_MODE_16,\n                'DESCRIPTION' : '16 Bit',\n                'ENDIAN' : {\n                    'MODE_LITTLE_ENDIAN': {\n                        'VAL': KS_MODE_LITTLE_ENDIAN,\n                        'DESCRIPTION' : 'Little Endian'\n                    }\n                }\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "app/static/js/disassemble.js",
    "content": "function send_machine_update(){\n    let machine_code_parsed;\n    //Remove all non hex things\n    let machine_code = machine_editor.getValue();\n    //because I throw exceptions when invalid hex, I need to catch em and return \n    try{\n        if(document.getElementById('VIEW').value === \"1\")\n            machine_code_parsed = parse_prettified(machine_code)\n        else machine_code_parsed = parse_raw(machine_code)\n    }catch (err){\n        return\n    }\n    global_settings.machine_code_bytes = JSON.stringify(machine_code_parsed);\n\n    socket.emit('disassemble', {'code':machine_code_parsed})\n\n}\n\nfunction update_disassembled_code(code){\n    mutex_lock = true;\n    asm_editor.setValue(code,1);\n    //Update simultaneously\n    let cur_line = machine_editor.selection.getCursor().row;\n    asm_editor.selection.moveTo(cur_line, 0);\n    mutex_lock = false;\n    set_success_message(\"Code Disassembled\")\n}\n\nfunction parse_raw(code){\n    //TODO fix this soon \n    let raw_parsed = JSON.parse('\"' + code.replace(/\\\\x/g, \"\\\\u00\") + '\"'); // A super shitty hack to parse raw strings\n    let machine_parsed = []\n    //conver to array of ints\n    for(chr of raw_parsed)machine_parsed.push(chr.charCodeAt(0))\n\n    let output_for_machine_bytes = []//Because of the structure of machine_code_bytes\n    output_for_machine_bytes.push(machine_parsed) \n    return output_for_machine_bytes\n}\n\nfunction parse_prettified(code){\n    let code_splitted = code.split(\"\\n\")\n    let machine_parsed = []\n    \n    code_splitted.forEach(function(code_line) {\n        let code_line_p1 = code_line.replace(/\\s/g, \"\");\n        if(code_line_p1.length&1 != 0)throw \"Invalid hex\"\n        //convert to int array from hex\n        let parsed_hex = []\n        for(let i = 0; i < code_line_p1.length; i+=2){\n           parsed_hex.push(parseInt(code_line_p1.substr(i, 2), 16))\n        }\n        machine_parsed.push(parsed_hex);\n    })\n\n    return machine_parsed\n}\n"
  },
  {
    "path": "app/static/js/index.js",
    "content": "//There is some ambiguity in the js I wrote, assembled code and machine code are the same thing while disassembled code and asm code are the same thing. That'll help you understand the variable names if you want to...\nconst settings_skeleton = {'ARCH' : '', 'MODE' : '', 'ENDIAN' : '', 'OFFSET' : ''}\n\nlet global_settings = localStorage;\n//The assembled code bytes are the stored code from the last set_settings\nlet socket, asm_editor, machine_editor;\n\nlet mutex_lock = false;\n    \ndocument.body.onload = ()=> {\n    socket = io.connect('http://' + document.domain + ':' + location.port); // SocketIO's socket\n\n    socket.on('assembled', update_assembled_code)\n\n    socket.on('disassembled', update_disassembled_code)\n\n    socket.on('get_settings', update_settings_to_server)\n\n    socket.on('error', set_error_message); \n\n    init_settings()\n\n    //Handler for when we receive assembled code\n\n    document.getElementById('ARCH').addEventListener('change', function(){\n        arch_update(document.getElementById('ARCH').value);\n        update_settings_to_server();\n    })\n    \n    document.getElementById('MODE').addEventListener('change', function(){\n        mode_update(document.getElementById('MODE').value);\n        update_settings_to_server();\n    })\n\n    document.getElementById('ENDIAN').addEventListener('change', function(){\n        endian_update(document.getElementById('ENDIAN').value);\n        update_settings_to_server();\n    })\n\n    document.getElementById('OFFSET').addEventListener('change', function(){\n        offset_update(document.getElementById('OFFSET').value);\n        update_settings_to_server();\n    })\n    \n    document.getElementById('VIEW').addEventListener('change', function(){\n        view_update(document.getElementById('VIEW').value);\n        update_assembled_code(JSON.parse(global_settings.machine_code_bytes));\n    })\n\n    asm_editor.session.on('change', function(delta) {\n        global_settings.asm_code = asm_editor.getValue()\n        if (mutex_lock) return; //A lock here is neede because setValue of ace editor fires onchange event\n        global_settings.last_focus = 0\n        send_asm_update();\n    });\n\n    machine_editor.session.on('change', function(delta) {\n        global_settings.machine_code = machine_editor.getValue()\n        if (mutex_lock) return;\n        global_settings.last_focus = 1\n        send_machine_update();\n    });\n\n    easydropdown.all({behavior: {\n        liveUpdates: true\n    }})\n\n\n}\n\nfunction init_settings(){\n\n    if(global_settings.ARCH === undefined){ //if only ARCH is null, aka new session, initialize everything\n        default_settings = {'ARCH' : 'ARCH_X86', 'MODE' : 'MODE_64', 'ENDIAN' : 'MODE_LITTLE_ENDIAN', 'OFFSET' : '0x0', 'VIEW': '1'}\n        //Set the value of settings being sent to server\n        for(key in default_settings){\n            global_settings[key] = default_settings[key]\n        }\n\n        global_settings.asm_code = \"mov rax, 0x0\\n\";\n        global_settings.machine_code = \"48 C7 C0 00 00 00 00\\n\"\n        global_settings.machine_code_bytes = \"[[0x48, 0xC7, 0xC0, 0x00, 0x00, 0x00, 0x00]]\" \n        global_settings.last_focus = 0 // 0 means on the asm editor and 1 means on the machine editor\n\n    }\n\n\n    asm_editor = ace.edit(\"asm_editor\");// The editor where we write asm \n    asm_editor.setTheme(\"ace/theme/twilight\");\n    asm_editor.session.setMode(\"ace/mode/assembly_x86\");\n    asm_editor.setShowPrintMargin(false)\n    asm_editor.session.setValue(global_settings.asm_code)\n    asm_editor.setFontSize(\"16px\")\n    asm_editor.setOptions({fontFamily: '\"Courier New\", Courier, monospace'})\n\n    machine_editor = ace.edit(\"machine_editor\");// Where the disassebmled code is displayed\n    machine_editor.setTheme(\"ace/theme/twilight\");\n    machine_editor.session.setMode(\"ace/mode/text\");\n    machine_editor.autoIndent = false;\n    machine_editor.setShowPrintMargin(false)\n    machine_editor.renderer.setShowGutter(false);\n    machine_editor.setFontSize(\"16px\")\n    machine_editor.setOptions({fontFamily: '\"Courier New\", Courier, monospace'})\n    machine_editor.setOption('indentedSoftWrap', false);\n    machine_editor.session.setValue(global_settings.machine_code)\n    \n    sync_settings_local()\n\n    update_settings_to_server()\n\n    document.getElementById('msg-box').innerText = \"Initialized\"; //Initialization message    \n}\n\nfunction update_settings_to_server(){\n    current_settings = settings_skeleton;\n\n    for (key in current_settings){\n        current_settings[key] = global_settings[key]\n    }\n\n    socket.emit('update_settings', current_settings)\n    //Only for when the assembler is available\n    if(global_settings.last_focus == 0)\n        send_asm_update()\n    else send_machine_update()\n}\n\nfunction clear_option_element(element){\n\n    while (document.getElementById(element).length != 0) document.getElementById(element).remove(0);\n}\n\nfunction offset_update(OFFSET){\n    global_settings['OFFSET'] = OFFSET;\n}\n\nfunction endian_update(ENDIAN){\n    if(ENDIAN == \"\"){ //F bug in the easydropdown library which launches two event handlers\n        document.getElementById('ENDIAN').value = global_settings['ENDIAN'];\n        return\n    }\n    global_settings['ENDIAN'] = ENDIAN;\n}\n\nfunction mode_update(MODE){\n    if(MODE == \"\"){ //F bug in the easydropdown library which launches two event handlers\n        document.getElementById('MODE').value = global_settings['MODE'];\n        return\n    }\n\n    global_settings['MODE'] = MODE;\n\n    let current_mode = keystone_modes[global_settings['ARCH']]['MODES'][MODE]\n\n    let current_mode_endians = Object.keys(current_mode['ENDIAN'])\n\n    clear_option_element('ENDIAN');\n\n    current_mode_endians.forEach(function(endianness){\n        let opt = document.createElement(\"option\");\n        opt.text = current_mode['ENDIAN'][endianness].DESCRIPTION\n        opt.value = endianness\n        document.getElementById('ENDIAN').add(opt);\n    })\n\n    if (!current_mode_endians.includes(global_settings['ENDIAN']))\n        endian_update(current_mode_endians[0])\n    else {\n        document.getElementById('ENDIAN').value = global_settings['ENDIAN']\n    }\n\n}\n\nfunction arch_update(ARCH){\n    global_settings['ARCH'] = ARCH;\n\n    current_arch = keystone_modes[ARCH]\n\n    current_arch_modes = Object.keys(current_arch['MODES'])\n    \n    let current_mode_elem = document.getElementById('MODE')\n\n    clear_option_element('MODE');\n\n    current_arch_modes.forEach(function(mode){\n        let opt = document.createElement(\"option\");\n        opt.text = current_arch['MODES'][mode].DESCRIPTION\n        opt.value = mode\n        current_mode_elem.add(opt);\n    })\n\n    if (!current_arch_modes.includes(global_settings['MODE']))\n        mode_update(current_arch_modes[0]);\n    else {\n        document.getElementById('MODE').value = global_settings['MODE']\n    }\n}\n\nfunction view_update(VIEW){\n    global_settings['VIEW'] = VIEW;\n}\n\nfunction sync_settings_local(){\n    //Just change the ARCH, it will start a chain of event handlers...\n    document.getElementById('ARCH').value = global_settings['ARCH']\n    arch_update(global_settings['ARCH']);\n\n    document.getElementById('MODE').value = global_settings['MODE']\n    mode_update(global_settings['MODE']);\n\n    document.getElementById('ENDIAN').value = global_settings['ENDIAN']\n    endian_update(global_settings['ENDIAN']);\n\n    document.getElementById('OFFSET').value = global_settings['OFFSET']\n    offset_update(global_settings['OFFSET']);\n\n    document.getElementById('VIEW').value = global_settings['VIEW']\n    view_update(global_settings['VIEW']);\n}\n\nfunction set_success_message(msg){\n    set_message(\"Success\", msg);\n}\n\nfunction set_error_message(msg){\n    set_message(\"Error\", msg);\n}\n\nfunction set_message(idnt, val){\n    let message = idnt + \": \" + val\n    document.getElementById('msg-box').innerText = message;    \n}\n"
  },
  {
    "path": "app/static/js/libs/ace/.github/PULL_REQUEST_TEMPLATE.md",
    "content": "*Issue #, if available:*\n\n*Description of changes:*\n\n\nBy submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.\n"
  },
  {
    "path": "app/static/js/libs/ace/CODE_OF_CONDUCT.md",
    "content": "## Code of Conduct\nThis project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). \nFor more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact \nopensource-codeofconduct@amazon.com with any additional questions or comments.\n"
  },
  {
    "path": "app/static/js/libs/ace/CONTRIBUTING.md",
    "content": "# Contributing Guidelines\n\nThank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional \ndocumentation, we greatly value feedback and contributions from our community.\n\nPlease read through this document before submitting any issues or pull requests to ensure we have all the necessary \ninformation to effectively respond to your bug report or contribution.\n\n\n## Reporting Bugs/Feature Requests\n\nWe welcome you to use the GitHub issue tracker to report bugs or suggest features.\n\nWhen filing an issue, please check [existing open](https://github.com/ajaxorg/ace-builds/issues), or [recently closed](https://github.com/ajaxorg/ace-builds/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20), issues to make sure somebody else hasn't already \nreported the issue. Please try to include as much information as you can. Details like these are incredibly useful:\n\n* A reproducible test case or series of steps\n* The version of our code being used\n* Any modifications you've made relevant to the bug\n* Anything unusual about your environment or deployment\n\n\n## Contributing via Pull Requests\nContributions via pull requests are much appreciated. Before sending us a pull request, please ensure that:\n\n1. You are working against the latest source on the *master* branch.\n2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already.\n3. You open an issue to discuss any significant work - we would hate for your time to be wasted.\n\nTo send us a pull request, please:\n\n1. Fork the repository.\n2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change.\n3. Ensure local tests pass.\n4. Commit to your fork using clear commit messages.\n5. Send us a pull request, answering any default questions in the pull request interface.\n6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation.\n\nGitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and \n[creating a pull request](https://help.github.com/articles/creating-a-pull-request/).\n\n\n## Finding contributions to work on\nLooking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels ((enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any ['help wanted'](https://github.com/ajaxorg/ace-builds/labels/help%20wanted) issues is a great place to start. \n\n\n## Code of Conduct\nThis project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). \nFor more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact \nopensource-codeofconduct@amazon.com with any additional questions or comments.\n\n\n## Security issue notifications\nIf you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue.\n\n\n## Licensing\n\nSee the [LICENSE](https://github.com/ajaxorg/ace-builds/blob/master/LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution.\n\nWe may ask you to sign a [Contributor License Agreement (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) for larger changes.\n"
  },
  {
    "path": "app/static/js/libs/ace/ChangeLog.txt",
    "content": "2019.02.21 Version 1.4.3\n* add sublime keybindings\n* add rtl option\n* implement ` and < textobjects in vim mode\n\n2018.11.21 Version 1.4.2\n* fix regression in vim mode\n* improve keyboard input handling on ipad and IE\n* add new syntax highlighters\n\n2018.08.07 Version 1.4.1\n* fix regression in autocomplete\n\n2018.08.06 Version 1.4.0\n\n* remove usage of innerHTML\n* improved handling of textinput for IME and mobile\n* add support for relative line numbers\n* improve autocompletion popup \n\n2018.03.26 Version 1.3.3\n* fix regession in static-highlight extension\n* use css animation for cursor blinking\n\n2018.03.21 Version 1.3.2\n* add experimental support for using ace-builds with webpack\n\n2018.02.11 Version 1.3.1\n\n* fixed regression with selectionChange event not firing some times\n* improved handling of non-ascii characters in vim normal mode\n\n2018.01.31 Version 1.3.0\n\n* added copy copyWithEmptySelection option \n* improved undoManager\n* improved settings_menu plugin\n* improved handling of files with very long lines\n* fixed bug with scrolling editor out of view in transformed elements\n\n2017.10.17 Version 1.2.9\n\n* added support for bidirectional text, with monospace font (Alex Shensis)\n* added support for emoji 😊\n\n* new language modes\n  - Red (Toomas Vooglaid)\n  - CSound (Nathan Whetsell)\n  - JSSM (John Haugeland)\n\n* New Themes\n  - Dracula (Austin Schwartz)\n\n2017.07.02 Version 1.2.8\n* Fixed small bugs in searchbox and autocompleter\n\n2017.06.18 Version 1.2.7\n\n* Added Support for arrow keys on external IPad keyboard (Emanuele Tamponi)\n* added match counter to searchbox extension\n\n- implemented higlighting of multiline strings in yaml mode (Maxim Trushin)\n- improved haml syntax highlighter (Andrés Álvarez)\n\n2016.12.03 Version 1.2.6\n\n* Fixed IME handling on new Chrome\n* Support for php 7 in the syntax checker\n\n2016.08.16 Version 1.2.5\n\n* Fixed regression in noconflict mode\n\n2016.07.27 Version 1.2.4\n\n* Maintenance release with several new modes and small bugfixes\n\n2016.01.17 Version 1.2.3\n\n* Bugfixes\n  - fix memory leak in setSession (Tyler Stalder)\n  - double click not working on linux/mac\n  \n* new language modes\n  - reStructuredText (Robin Jarry)\n  - NSIS (Jan T. Sott)\n\n\n2015.10.28 Version 1.2.1\n\n* new language modes\n  - Swift\n  - JSX\n\n2015.07.11 Version 1.2.0\n\n* New Features\n  - Indented soft wrap (danyaPostfactum)\n  - Rounded borders on selections\n\n* API Changes\n  - unified delta types `{start, end, action, lines}`  (Alden Daniels https://github.com/ajaxorg/ace/pull/1745)\n  - \"change\" event listeners on session and editor get delta objects directly\n\n* new language modes\n  - SQLServer (Morgan Yarbrough)\n  \n2015.04.03 Version 1.1.9\n\n  - Small Enhancements and Bugfixes\n\n2014.11.08 Version 1.1.8\n\n* API Changes\n  - `editor.commands.commandKeyBinding` now contains direct map from keys to commands instead of grouping them by hashid\n  \n* New Features\n  - Improved autoindent for html and php modes (Adam Jimenez)\n  - Find All from searchbox (Colton Voege)\n  \n* new language modes\n  - Elixir, Elm\n \n2014.09.21 Version 1.1.7\n\n* Bugfixes\n  - fix several bugs in autocompletion\n  - workaround for inaccurate getBoundingClientRect on chrome 37\n\n2014.08.17 Version 1.1.6\n\n* Bugfixes\n  - fix regression in double tap to highlight \n  - Improved Latex Mode (Daniel Felder)\n  \n* API Changes\n  - editor.destroy destroys editor.session too (call editor.setSession(null) to prevent that)\n\n* new language modes\n - Praat (José Joaquín Atria)\n - Eiffel (Victorien Elvinger)\n - G-code (Adam Joseph Cook)\n \n2014.07.09 Version 1.1.5\n\n* Bugfixes\n  - fix regression in autocomplete popup\n\n* new language modes\n - gitignore (Devon Carew)\n \n2014.07.01 Version 1.1.4\n\n* New Features\n  - Highlight matching tags (Adam Jimenez)\n  - Improved jump to matching command (Adam Jimenez)\n\n* new language modes\n - AppleScript (Yaogang Lian)\n - Vala\n\n2014.03.08 Version 1.1.3\n\n* New Features\n  - Allow syntax checkers to be loaded from CDN (Derk-Jan Hartman)\n  - Add ColdFusion behavior (Abram Adams)\n  - add showLineNumbers option\n  - Add html syntax checker (danyaPostfactum)\n \n* new language modes\n  - Gherkin (Patrick Nevels)\n  - Smarty\n\n2013.12.02 Version 1.1.2\n\n* New Features\n  - Accessibility Theme for Ace (Peter Xiao)\n  - use snipetManager for expanding emmet snippets\n  - update jshint to 2.1.4\n  - improve php syntax checker (jdalegonzalez)\n  - add option for autoresizing\n  - add option for autohiding vertical scrollbar\n  - improvements to highlighting of xml like languages (danyaPostfactum)\n  - add support for autocompletion and snippets (gjtorikyan danyaPostfactum and others)\n  - add option to merge similar changes in undo history\n  - add scrollPastEnd option\n  - use html5 dragndrop for text dragging (danyaPostfactum)\n  \n* API Changes\n  - fixed typo in HashHandler commmandManager\n\n* new language modes\n  - Nix (Zef Hemel)\n  - Protobuf (Zef Hemel)\n  - Soy\n  - Handlebars\n\n2013.06.04 Version 1.1.1\n\n  - Improved emacs keybindings (Robert Krahn)\n  - Added markClean, isClean methods to UndoManager (Joonsoo Jeon)\n  - Do not allow `Toggle comments` command to remove spaces from indentation\n  - Softer colors for indent guides in dark themes\n\n* new language modes\n  - Ada\n  - Assembly_x86\n  - Cobol\n  - D\n  - ejs\n  - MATLAB\n  - MySQL\n  - Twig\n  - Verilog\n\n2013.05.01, Version 1.1.0\n\n* API Changes\n  - Default position of the editor container is changed to relative. Add `.ace_editor {position: absolute}` css rule to restore old behavior\n  - Changed default line-height to `normal` to not conflict with bootstrap. Use `line-height: inherit` for old behavior.\n  - Changed marker types accepted by session.addMarker. It now accepts \"text\"|\"line\"|\"fullLine\"|\"screenLine\"\n  - Internal classnames used by editor were made more consistent\n  - Introduced `editor.setOption/getOption/setOptions/getOptions` methods\n  - Introduced positionToIndex, indexToPosition methods\n\n* New Features\n  - Improved emacs mode (chetstone)\n    with Incremental search and Occur modes (Robert Krahn)\n\n  - Improved ime handling\n  - Searchbox (Vlad Zinculescu)\n\n  - Added elastic tabstops lite extension (Garen Torikian)\n  - Added extension for whitespace manipulation\n  - Added extension for enabling spellchecking from contextmenu\n  - Added extension for displaying available keyboard shortcuts (Matthew Christopher Kastor-Inare III)\n  - Added extension for displaying options panel (Matthew Christopher Kastor-Inare III)\n  - Added modelist extension (Matthew Christopher Kastor-Inare III)\n\n  - Improved toggleCommentLines and added ToggleCommentBlock command\n  - `:;` pairing in CSS mode (danyaPostfactum)\n\n  - Added suppoert for Delete and SelectAll from context menu (danyaPostfactum)\n\n  - Make wrapping behavior optional\n  - Selective bracket insertion/skipping \n    \n  - Added commands for increase/decrease numbers, sort lines (Vlad Zinculescu)    \n  - Folding for Markdown, Lua, LaTeX    \n  - Selective bracket insertion/skipping for C-like languages\n\n* Many new languages\n  - Scheme (Mu Lei)\n  - Dot (edwardsp)\n  - FreeMarker (nguillaumin)\n  - Tiny Mushcode (h3rb)\n  - Velocity (Ryan Griffith)\n  - TOML (Garen Torikian) \n  - LSL (Nemurimasu Neiro, Builders Brewery)\n  - Curly (Libo Cannici)\n  - vbScript (Jan Jongboom) \n  - R (RStudio) \n  - ABAP\n  - Lucene (Graham Scott)\n  - Haml (Garen Torikian)\n  - Objective-C (Garen Torikian) \n  - Makefile (Garen Torikian) \n  - TypeScript (Garen Torikian) \n  - Lisp (Garen Torikian) \n  - Stylus (Garen Torikian) \n  - Dart (Garen Torikian)\n\n* Live syntax checks\n  - PHP (danyaPostfactum)\n  - Lua\n\n* New Themes\n  - Chaos \n  - Terminal \n   \n2012.09.17, Version 1.0.0\n\n* New Features\n  - Multiple cursors and selections (https://c9.io/site/blog/2012/08/be-an-armenian-warrior-with-block-selection-on-steroids/)\n  - Fold buttons displayed in the gutter\n  - Indent Guides\n  - Completely reworked vim mode (Sergi Mansilla)\n  - Improved emacs keybindings\n  - Autoclosing of html tags (danyaPostfactum)\n\n* 20 New language modes\n  - Coldfusion (Russ)\n  - Diff\n  - GLSL (Ed Mackey)\n  - Go (Davide Saurino)\n  - Haxe (Jason O'Neil)\n  - Jade (Garen Torikian)\n  - jsx (Syu Kato)\n  - LaTeX (James Allen)\n  - Less (John Roepke)\n  - Liquid (Bernie Telles)\n  - Lua (Lee Gao)\n  - LuaPage (Choonster)\n  - Markdown (Chris Spencer)\n  - PostgreSQL (John DeSoi)\n  - Powershell (John Kane)\n  - Sh (Richo Healey)\n  - SQL (Jonathan Camile)\n  - Tcl (Cristoph Hochreiner)\n  - XQuery (William Candillion)\n  - Yaml (Meg Sharkey)\n\n  * Live syntax checks\n  - for XQuery and JSON\n\n* New Themes\n  - Ambiance (Irakli Gozalishvili)\n  - Dreamweaver (Adam Jimenez)\n  - Github (bootstraponline)\n  - Tommorrow themes (https://github.com/chriskempson/tomorrow-theme)\n  - XCode\n\n* Many Small Enhancements and Bugfixes\n \n2011.08.02, Version 0.2.0\n\n* Split view (Julian Viereck)\n  - split editor area horizontally or vertivally to show two files at the same\n    time\n\n* Code Folding (Julian Viereck)\n  - Unstructured code folding\n  - Will be the basis for language aware folding\n\n* Mode behaviours (Chris Spencer)\n  - Adds mode specific hooks which allow transformations of entered text\n  - Autoclosing of braces, paranthesis and quotation marks in C style modes\n  - Autoclosing of angular brackets in XML style modes\n\n* New language modes\n  - Clojure (Carin Meier)\n  - C# (Rob Conery)\n  - Groovy (Ben Tilford)\n  - Scala (Ben Tilford)\n  - JSON\n  - OCaml (Sergi Mansilla)\n  - Perl (Panagiotis Astithas)\n  - SCSS/SASS (Andreas Madsen)\n  - SVG\n  - Textile (Kelley van Evert)\n  - SCAD (Jacob Hansson)\n  \n* Live syntax checks\n  - Lint for CSS using CSS Lint <http://csslint.net/>\n  - CoffeeScript\n\n* New Themes\n  - Crimson Editor (iebuggy)\n  - Merbivore (Michael Schwartz)\n  - Merbivore soft (Michael Schwartz)\n  - Solarized dark/light <http://ethanschoonover.com/solarized> (David Alan Hjelle)\n  - Vibrant Ink (Michael Schwartz)\n\n* Small Features/Enhancements\n  - Lots of render performance optimizations (Harutyun Amirjanyan)\n  - Improved Ruby highlighting (Chris Wanstrath, Trent Ogren)\n  - Improved PHP highlighting (Thomas Hruska)\n  - Improved CSS highlighting (Sean Kellogg)\n  - Clicks which cause the editor to be focused don't reset the selection\n  - Make padding text layer specific so that print margin and active line\n    highlight are not affected (Irakli Gozalishvili)\n  - Added setFontSize method\n  - Improved vi keybindings (Trent Ogren)\n  - When unfocused make cursor transparent instead of removing it (Harutyun Amirjanyan)\n  - Support for matching groups in tokenizer with arrays of tokens (Chris Spencer)\n\n* Bug fixes\n  - Add support for the new OSX scroll bars\n  - Properly highlight JavaScript regexp literals\n  - Proper handling of unicode characters in JavaScript identifiers\n  - Fix remove lines command on last line (Harutyun Amirjanyan)\n  - Fix scroll wheel sluggishness in Safari\n  - Make keyboard infrastructure route keys like []^$ the right way (Julian Viereck)\n\n2011.02.14, Version 0.1.6\n\n* Floating Anchors\n  - An Anchor is a floating pointer in the document. \n  - Whenever text is inserted or deleted before the cursor, the position of\n    the cursor is updated\n  - Usesd for the cursor and selection\n  - Basis for bookmarks, multiple cursors and snippets in the future\n* Extensive support for Cocoa style keybindings on the Mac <https://github.com/ajaxorg/ace/issues/closed#issue/116/comment/767803>\n* New commands:\n  - center selection in viewport\n  - remove to end/start of line\n  - split line\n  - transpose letters\n* Refator markers  \n  - Custom code can be used to render markers\n  - Markers can be in front or behind the text\n  - Markers are now stored in the session (was in the renderer)\n* Lots of IE8 fixes including copy, cut and selections\n* Unit tests can also be run in the browser\n  <https://github.com/ajaxorg/ace/blob/master/lib/ace/test/tests.html>\n* Soft wrap can adapt to the width of the editor (Mike Ratcliffe, Joe Cheng)\n* Add minimal node server server.js to run the Ace demo in Chrome\n* The top level editor.html demo has been renamed to index.html\n* Bug fixes\n  - Fixed gotoLine to consider wrapped lines when calculating where to scroll to (James Allen)\n  - Fixed isues when the editor was scrolled in the web page (Eric Allam)\n  - Highlighting of Python string literals\n  - Syntax rule for PHP comments\n\n2011.02.08, Version 0.1.5\n\n* Add Coffeescript Mode (Satoshi Murakami)\n* Fix word wrap bug (Julian Viereck)\n* Fix packaged version of the Eclipse mode\n* Loading of workers is more robust\n* Fix \"click selection\"\n* Allow tokizing empty lines (Daniel Krech)\n* Make PageUp/Down behavior more consistent with native OS (Joe Cheng)\n\n2011.02.04, Version 0.1.4\n\n* Add C/C++ mode contributed by Gastón Kleiman\n* Fix exception in key input\n\n2011.02.04, Version 0.1.3\n\n* Let the packaged version play nice with requireJS\n* Add Ruby mode contributed by Shlomo Zalman Heigh\n* Add Java mode contributed by Tom Tasche\n* Fix annotation bug\n* Changing a document added a new empty line at the end\n"
  },
  {
    "path": "app/static/js/libs/ace/LICENSE",
    "content": "Copyright (c) 2010, Ajax.org B.V.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n    * Neither the name of Ajax.org B.V. nor the\n      names of its contributors may be used to endorse or promote products\n      derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "app/static/js/libs/ace/README.md",
    "content": "Ace (Ajax.org Cloud9 Editor)\n============================\n[![CDNJS](https://img.shields.io/cdnjs/v/ace.svg)](https://cdnjs.com/libraries/ace)\n[![npm](https://img.shields.io/npm/v/ace-builds.svg)](https://www.npmjs.com/package/ace-builds)\n\nAce is a code editor written in JavaScript.\n\nThis repository has only generated files.\nIf you want to work on ace please go to https://github.com/ajaxorg/ace instead.\n\n\nhere you can find pre-built files for convenience of embedding.\nit contains 4 versions\n * [src](https://github.com/ajaxorg/ace-builds/tree/master/src)              concatenated but not minified\n * [src-min](https://github.com/ajaxorg/ace-builds/tree/master/src-min)      concatenated and minified with uglify.js\n * [src-noconflict](https://github.com/ajaxorg/ace-builds/tree/master/src-noconflict)      uses ace.require instead of require\n * [src-min-noconflict](https://github.com/ajaxorg/ace-builds/tree/master/src-min-noconflict)      concatenated, minified with uglify.js, and uses ace.require instead of require\n\n\nFor a simple way of embedding ace into webpage see [editor.html](https://github.com/ajaxorg/ace-builds/blob/master/editor.html) or list of other [simple examples](https://github.com/ajaxorg/ace-builds/tree/master/demo)\nTo see ace in action go to [kitchen-sink-demo](http://ajaxorg.github.com/ace-builds/kitchen-sink.html), [scrollable-page-demo](http://ajaxorg.github.com/ace-builds/demo/scrollable-page.html) or [minimal demo](http://ajaxorg.github.com/ace-builds/editor.html),\n\n\n"
  },
  {
    "path": "app/static/js/libs/ace/ace-modules.d.ts",
    "content": "declare module 'ace-builds/src-noconflict/ext-beautify';\ndeclare module 'ace-builds/src-noconflict/ext-elastic_tabstops_lite';\ndeclare module 'ace-builds/src-noconflict/ext-emmet';\ndeclare module 'ace-builds/src-noconflict/ext-error_marker';\ndeclare module 'ace-builds/src-noconflict/ext-keybinding_menu';\ndeclare module 'ace-builds/src-noconflict/ext-language_tools';\ndeclare module 'ace-builds/src-noconflict/ext-linking';\ndeclare module 'ace-builds/src-noconflict/ext-modelist';\ndeclare module 'ace-builds/src-noconflict/ext-options';\ndeclare module 'ace-builds/src-noconflict/ext-rtl';\ndeclare module 'ace-builds/src-noconflict/ext-searchbox';\ndeclare module 'ace-builds/src-noconflict/ext-settings_menu';\ndeclare module 'ace-builds/src-noconflict/ext-spellcheck';\ndeclare module 'ace-builds/src-noconflict/ext-split';\ndeclare module 'ace-builds/src-noconflict/ext-static_highlight';\ndeclare module 'ace-builds/src-noconflict/ext-statusbar';\ndeclare module 'ace-builds/src-noconflict/ext-textarea';\ndeclare module 'ace-builds/src-noconflict/ext-themelist';\ndeclare module 'ace-builds/src-noconflict/ext-whitespace';\ndeclare module 'ace-builds/src-noconflict/keybinding-emacs';\ndeclare module 'ace-builds/src-noconflict/keybinding-vim';\ndeclare module 'ace-builds/src-noconflict/mode-abap';\ndeclare module 'ace-builds/src-noconflict/mode-abc';\ndeclare module 'ace-builds/src-noconflict/mode-actionscript';\ndeclare module 'ace-builds/src-noconflict/mode-ada';\ndeclare module 'ace-builds/src-noconflict/mode-apache_conf';\ndeclare module 'ace-builds/src-noconflict/mode-apex';\ndeclare module 'ace-builds/src-noconflict/mode-applescript';\ndeclare module 'ace-builds/src-noconflict/mode-asciidoc';\ndeclare module 'ace-builds/src-noconflict/mode-asl';\ndeclare module 'ace-builds/src-noconflict/mode-assembly_x86';\ndeclare module 'ace-builds/src-noconflict/mode-autohotkey';\ndeclare module 'ace-builds/src-noconflict/mode-batchfile';\ndeclare module 'ace-builds/src-noconflict/mode-bro';\ndeclare module 'ace-builds/src-noconflict/mode-c9search';\ndeclare module 'ace-builds/src-noconflict/mode-cirru';\ndeclare module 'ace-builds/src-noconflict/mode-clojure';\ndeclare module 'ace-builds/src-noconflict/mode-cobol';\ndeclare module 'ace-builds/src-noconflict/mode-coffee';\ndeclare module 'ace-builds/src-noconflict/mode-coldfusion';\ndeclare module 'ace-builds/src-noconflict/mode-csharp';\ndeclare module 'ace-builds/src-noconflict/mode-csound_document';\ndeclare module 'ace-builds/src-noconflict/mode-csound_orchestra';\ndeclare module 'ace-builds/src-noconflict/mode-csound_score';\ndeclare module 'ace-builds/src-noconflict/mode-csp';\ndeclare module 'ace-builds/src-noconflict/mode-css';\ndeclare module 'ace-builds/src-noconflict/mode-curly';\ndeclare module 'ace-builds/src-noconflict/mode-c_cpp';\ndeclare module 'ace-builds/src-noconflict/mode-d';\ndeclare module 'ace-builds/src-noconflict/mode-dart';\ndeclare module 'ace-builds/src-noconflict/mode-diff';\ndeclare module 'ace-builds/src-noconflict/mode-django';\ndeclare module 'ace-builds/src-noconflict/mode-dockerfile';\ndeclare module 'ace-builds/src-noconflict/mode-dot';\ndeclare module 'ace-builds/src-noconflict/mode-drools';\ndeclare module 'ace-builds/src-noconflict/mode-edifact';\ndeclare module 'ace-builds/src-noconflict/mode-eiffel';\ndeclare module 'ace-builds/src-noconflict/mode-ejs';\ndeclare module 'ace-builds/src-noconflict/mode-elixir';\ndeclare module 'ace-builds/src-noconflict/mode-elm';\ndeclare module 'ace-builds/src-noconflict/mode-erlang';\ndeclare module 'ace-builds/src-noconflict/mode-forth';\ndeclare module 'ace-builds/src-noconflict/mode-fortran';\ndeclare module 'ace-builds/src-noconflict/mode-fsharp';\ndeclare module 'ace-builds/src-noconflict/mode-fsl';\ndeclare module 'ace-builds/src-noconflict/mode-ftl';\ndeclare module 'ace-builds/src-noconflict/mode-gcode';\ndeclare module 'ace-builds/src-noconflict/mode-gherkin';\ndeclare module 'ace-builds/src-noconflict/mode-gitignore';\ndeclare module 'ace-builds/src-noconflict/mode-glsl';\ndeclare module 'ace-builds/src-noconflict/mode-gobstones';\ndeclare module 'ace-builds/src-noconflict/mode-golang';\ndeclare module 'ace-builds/src-noconflict/mode-graphqlschema';\ndeclare module 'ace-builds/src-noconflict/mode-groovy';\ndeclare module 'ace-builds/src-noconflict/mode-haml';\ndeclare module 'ace-builds/src-noconflict/mode-handlebars';\ndeclare module 'ace-builds/src-noconflict/mode-haskell';\ndeclare module 'ace-builds/src-noconflict/mode-haskell_cabal';\ndeclare module 'ace-builds/src-noconflict/mode-haxe';\ndeclare module 'ace-builds/src-noconflict/mode-hjson';\ndeclare module 'ace-builds/src-noconflict/mode-html';\ndeclare module 'ace-builds/src-noconflict/mode-html_elixir';\ndeclare module 'ace-builds/src-noconflict/mode-html_ruby';\ndeclare module 'ace-builds/src-noconflict/mode-ini';\ndeclare module 'ace-builds/src-noconflict/mode-io';\ndeclare module 'ace-builds/src-noconflict/mode-jack';\ndeclare module 'ace-builds/src-noconflict/mode-jade';\ndeclare module 'ace-builds/src-noconflict/mode-java';\ndeclare module 'ace-builds/src-noconflict/mode-javascript';\ndeclare module 'ace-builds/src-noconflict/mode-json';\ndeclare module 'ace-builds/src-noconflict/mode-jsoniq';\ndeclare module 'ace-builds/src-noconflict/mode-jsp';\ndeclare module 'ace-builds/src-noconflict/mode-jssm';\ndeclare module 'ace-builds/src-noconflict/mode-jsx';\ndeclare module 'ace-builds/src-noconflict/mode-julia';\ndeclare module 'ace-builds/src-noconflict/mode-kotlin';\ndeclare module 'ace-builds/src-noconflict/mode-latex';\ndeclare module 'ace-builds/src-noconflict/mode-less';\ndeclare module 'ace-builds/src-noconflict/mode-liquid';\ndeclare module 'ace-builds/src-noconflict/mode-lisp';\ndeclare module 'ace-builds/src-noconflict/mode-livescript';\ndeclare module 'ace-builds/src-noconflict/mode-logiql';\ndeclare module 'ace-builds/src-noconflict/mode-logtalk';\ndeclare module 'ace-builds/src-noconflict/mode-lsl';\ndeclare module 'ace-builds/src-noconflict/mode-lua';\ndeclare module 'ace-builds/src-noconflict/mode-luapage';\ndeclare module 'ace-builds/src-noconflict/mode-lucene';\ndeclare module 'ace-builds/src-noconflict/mode-makefile';\ndeclare module 'ace-builds/src-noconflict/mode-markdown';\ndeclare module 'ace-builds/src-noconflict/mode-mask';\ndeclare module 'ace-builds/src-noconflict/mode-matlab';\ndeclare module 'ace-builds/src-noconflict/mode-maze';\ndeclare module 'ace-builds/src-noconflict/mode-mel';\ndeclare module 'ace-builds/src-noconflict/mode-mixal';\ndeclare module 'ace-builds/src-noconflict/mode-mushcode';\ndeclare module 'ace-builds/src-noconflict/mode-mysql';\ndeclare module 'ace-builds/src-noconflict/mode-nix';\ndeclare module 'ace-builds/src-noconflict/mode-nsis';\ndeclare module 'ace-builds/src-noconflict/mode-objectivec';\ndeclare module 'ace-builds/src-noconflict/mode-ocaml';\ndeclare module 'ace-builds/src-noconflict/mode-pascal';\ndeclare module 'ace-builds/src-noconflict/mode-perl';\ndeclare module 'ace-builds/src-noconflict/mode-perl6';\ndeclare module 'ace-builds/src-noconflict/mode-pgsql';\ndeclare module 'ace-builds/src-noconflict/mode-php';\ndeclare module 'ace-builds/src-noconflict/mode-php_laravel_blade';\ndeclare module 'ace-builds/src-noconflict/mode-pig';\ndeclare module 'ace-builds/src-noconflict/mode-plain_text';\ndeclare module 'ace-builds/src-noconflict/mode-powershell';\ndeclare module 'ace-builds/src-noconflict/mode-praat';\ndeclare module 'ace-builds/src-noconflict/mode-prolog';\ndeclare module 'ace-builds/src-noconflict/mode-properties';\ndeclare module 'ace-builds/src-noconflict/mode-protobuf';\ndeclare module 'ace-builds/src-noconflict/mode-puppet';\ndeclare module 'ace-builds/src-noconflict/mode-python';\ndeclare module 'ace-builds/src-noconflict/mode-r';\ndeclare module 'ace-builds/src-noconflict/mode-razor';\ndeclare module 'ace-builds/src-noconflict/mode-rdoc';\ndeclare module 'ace-builds/src-noconflict/mode-red';\ndeclare module 'ace-builds/src-noconflict/mode-redshift';\ndeclare module 'ace-builds/src-noconflict/mode-rhtml';\ndeclare module 'ace-builds/src-noconflict/mode-rst';\ndeclare module 'ace-builds/src-noconflict/mode-ruby';\ndeclare module 'ace-builds/src-noconflict/mode-rust';\ndeclare module 'ace-builds/src-noconflict/mode-sass';\ndeclare module 'ace-builds/src-noconflict/mode-scad';\ndeclare module 'ace-builds/src-noconflict/mode-scala';\ndeclare module 'ace-builds/src-noconflict/mode-scheme';\ndeclare module 'ace-builds/src-noconflict/mode-scss';\ndeclare module 'ace-builds/src-noconflict/mode-sh';\ndeclare module 'ace-builds/src-noconflict/mode-sjs';\ndeclare module 'ace-builds/src-noconflict/mode-slim';\ndeclare module 'ace-builds/src-noconflict/mode-smarty';\ndeclare module 'ace-builds/src-noconflict/mode-snippets';\ndeclare module 'ace-builds/src-noconflict/mode-soy_template';\ndeclare module 'ace-builds/src-noconflict/mode-space';\ndeclare module 'ace-builds/src-noconflict/mode-sparql';\ndeclare module 'ace-builds/src-noconflict/mode-sql';\ndeclare module 'ace-builds/src-noconflict/mode-sqlserver';\ndeclare module 'ace-builds/src-noconflict/mode-stylus';\ndeclare module 'ace-builds/src-noconflict/mode-svg';\ndeclare module 'ace-builds/src-noconflict/mode-swift';\ndeclare module 'ace-builds/src-noconflict/mode-tcl';\ndeclare module 'ace-builds/src-noconflict/mode-terraform';\ndeclare module 'ace-builds/src-noconflict/mode-tex';\ndeclare module 'ace-builds/src-noconflict/mode-text';\ndeclare module 'ace-builds/src-noconflict/mode-textile';\ndeclare module 'ace-builds/src-noconflict/mode-toml';\ndeclare module 'ace-builds/src-noconflict/mode-tsx';\ndeclare module 'ace-builds/src-noconflict/mode-turtle';\ndeclare module 'ace-builds/src-noconflict/mode-twig';\ndeclare module 'ace-builds/src-noconflict/mode-typescript';\ndeclare module 'ace-builds/src-noconflict/mode-vala';\ndeclare module 'ace-builds/src-noconflict/mode-vbscript';\ndeclare module 'ace-builds/src-noconflict/mode-velocity';\ndeclare module 'ace-builds/src-noconflict/mode-verilog';\ndeclare module 'ace-builds/src-noconflict/mode-vhdl';\ndeclare module 'ace-builds/src-noconflict/mode-visualforce';\ndeclare module 'ace-builds/src-noconflict/mode-wollok';\ndeclare module 'ace-builds/src-noconflict/mode-xml';\ndeclare module 'ace-builds/src-noconflict/mode-xquery';\ndeclare module 'ace-builds/src-noconflict/mode-yaml';\ndeclare module 'ace-builds/src-noconflict/theme-ambiance';\ndeclare module 'ace-builds/src-noconflict/theme-chaos';\ndeclare module 'ace-builds/src-noconflict/theme-chrome';\ndeclare module 'ace-builds/src-noconflict/theme-clouds';\ndeclare module 'ace-builds/src-noconflict/theme-clouds_midnight';\ndeclare module 'ace-builds/src-noconflict/theme-cobalt';\ndeclare module 'ace-builds/src-noconflict/theme-crimson_editor';\ndeclare module 'ace-builds/src-noconflict/theme-dawn';\ndeclare module 'ace-builds/src-noconflict/theme-dracula';\ndeclare module 'ace-builds/src-noconflict/theme-dreamweaver';\ndeclare module 'ace-builds/src-noconflict/theme-eclipse';\ndeclare module 'ace-builds/src-noconflict/theme-github';\ndeclare module 'ace-builds/src-noconflict/theme-gob';\ndeclare module 'ace-builds/src-noconflict/theme-gruvbox';\ndeclare module 'ace-builds/src-noconflict/theme-idle_fingers';\ndeclare module 'ace-builds/src-noconflict/theme-iplastic';\ndeclare module 'ace-builds/src-noconflict/theme-katzenmilch';\ndeclare module 'ace-builds/src-noconflict/theme-kr_theme';\ndeclare module 'ace-builds/src-noconflict/theme-kuroir';\ndeclare module 'ace-builds/src-noconflict/theme-merbivore';\ndeclare module 'ace-builds/src-noconflict/theme-merbivore_soft';\ndeclare module 'ace-builds/src-noconflict/theme-monokai';\ndeclare module 'ace-builds/src-noconflict/theme-mono_industrial';\ndeclare module 'ace-builds/src-noconflict/theme-pastel_on_dark';\ndeclare module 'ace-builds/src-noconflict/theme-solarized_dark';\ndeclare module 'ace-builds/src-noconflict/theme-solarized_light';\ndeclare module 'ace-builds/src-noconflict/theme-sqlserver';\ndeclare module 'ace-builds/src-noconflict/theme-terminal';\ndeclare module 'ace-builds/src-noconflict/theme-textmate';\ndeclare module 'ace-builds/src-noconflict/theme-tomorrow';\ndeclare module 'ace-builds/src-noconflict/theme-tomorrow_night';\ndeclare module 'ace-builds/src-noconflict/theme-tomorrow_night_blue';\ndeclare module 'ace-builds/src-noconflict/theme-tomorrow_night_bright';\ndeclare module 'ace-builds/src-noconflict/theme-tomorrow_night_eighties';\ndeclare module 'ace-builds/src-noconflict/theme-twilight';\ndeclare module 'ace-builds/src-noconflict/theme-vibrant_ink';\ndeclare module 'ace-builds/src-noconflict/theme-xcode';\ndeclare module 'ace-builds/src-noconflict/snippets/abap';\ndeclare module 'ace-builds/src-noconflict/snippets/abc';\ndeclare module 'ace-builds/src-noconflict/snippets/actionscript';\ndeclare module 'ace-builds/src-noconflict/snippets/ada';\ndeclare module 'ace-builds/src-noconflict/snippets/apache_conf';\ndeclare module 'ace-builds/src-noconflict/snippets/apex';\ndeclare module 'ace-builds/src-noconflict/snippets/applescript';\ndeclare module 'ace-builds/src-noconflict/snippets/asciidoc';\ndeclare module 'ace-builds/src-noconflict/snippets/asl';\ndeclare module 'ace-builds/src-noconflict/snippets/assembly_x86';\ndeclare module 'ace-builds/src-noconflict/snippets/autohotkey';\ndeclare module 'ace-builds/src-noconflict/snippets/batchfile';\ndeclare module 'ace-builds/src-noconflict/snippets/bro';\ndeclare module 'ace-builds/src-noconflict/snippets/c9search';\ndeclare module 'ace-builds/src-noconflict/snippets/cirru';\ndeclare module 'ace-builds/src-noconflict/snippets/clojure';\ndeclare module 'ace-builds/src-noconflict/snippets/cobol';\ndeclare module 'ace-builds/src-noconflict/snippets/coffee';\ndeclare module 'ace-builds/src-noconflict/snippets/coldfusion';\ndeclare module 'ace-builds/src-noconflict/snippets/csharp';\ndeclare module 'ace-builds/src-noconflict/snippets/csound_document';\ndeclare module 'ace-builds/src-noconflict/snippets/csound_orchestra';\ndeclare module 'ace-builds/src-noconflict/snippets/csound_score';\ndeclare module 'ace-builds/src-noconflict/snippets/csp';\ndeclare module 'ace-builds/src-noconflict/snippets/css';\ndeclare module 'ace-builds/src-noconflict/snippets/curly';\ndeclare module 'ace-builds/src-noconflict/snippets/c_cpp';\ndeclare module 'ace-builds/src-noconflict/snippets/d';\ndeclare module 'ace-builds/src-noconflict/snippets/dart';\ndeclare module 'ace-builds/src-noconflict/snippets/diff';\ndeclare module 'ace-builds/src-noconflict/snippets/django';\ndeclare module 'ace-builds/src-noconflict/snippets/dockerfile';\ndeclare module 'ace-builds/src-noconflict/snippets/dot';\ndeclare module 'ace-builds/src-noconflict/snippets/drools';\ndeclare module 'ace-builds/src-noconflict/snippets/edifact';\ndeclare module 'ace-builds/src-noconflict/snippets/eiffel';\ndeclare module 'ace-builds/src-noconflict/snippets/ejs';\ndeclare module 'ace-builds/src-noconflict/snippets/elixir';\ndeclare module 'ace-builds/src-noconflict/snippets/elm';\ndeclare module 'ace-builds/src-noconflict/snippets/erlang';\ndeclare module 'ace-builds/src-noconflict/snippets/forth';\ndeclare module 'ace-builds/src-noconflict/snippets/fortran';\ndeclare module 'ace-builds/src-noconflict/snippets/fsharp';\ndeclare module 'ace-builds/src-noconflict/snippets/fsl';\ndeclare module 'ace-builds/src-noconflict/snippets/ftl';\ndeclare module 'ace-builds/src-noconflict/snippets/gcode';\ndeclare module 'ace-builds/src-noconflict/snippets/gherkin';\ndeclare module 'ace-builds/src-noconflict/snippets/gitignore';\ndeclare module 'ace-builds/src-noconflict/snippets/glsl';\ndeclare module 'ace-builds/src-noconflict/snippets/gobstones';\ndeclare module 'ace-builds/src-noconflict/snippets/golang';\ndeclare module 'ace-builds/src-noconflict/snippets/graphqlschema';\ndeclare module 'ace-builds/src-noconflict/snippets/groovy';\ndeclare module 'ace-builds/src-noconflict/snippets/haml';\ndeclare module 'ace-builds/src-noconflict/snippets/handlebars';\ndeclare module 'ace-builds/src-noconflict/snippets/haskell';\ndeclare module 'ace-builds/src-noconflict/snippets/haskell_cabal';\ndeclare module 'ace-builds/src-noconflict/snippets/haxe';\ndeclare module 'ace-builds/src-noconflict/snippets/hjson';\ndeclare module 'ace-builds/src-noconflict/snippets/html';\ndeclare module 'ace-builds/src-noconflict/snippets/html_elixir';\ndeclare module 'ace-builds/src-noconflict/snippets/html_ruby';\ndeclare module 'ace-builds/src-noconflict/snippets/ini';\ndeclare module 'ace-builds/src-noconflict/snippets/io';\ndeclare module 'ace-builds/src-noconflict/snippets/jack';\ndeclare module 'ace-builds/src-noconflict/snippets/jade';\ndeclare module 'ace-builds/src-noconflict/snippets/java';\ndeclare module 'ace-builds/src-noconflict/snippets/javascript';\ndeclare module 'ace-builds/src-noconflict/snippets/json';\ndeclare module 'ace-builds/src-noconflict/snippets/jsoniq';\ndeclare module 'ace-builds/src-noconflict/snippets/jsp';\ndeclare module 'ace-builds/src-noconflict/snippets/jssm';\ndeclare module 'ace-builds/src-noconflict/snippets/jsx';\ndeclare module 'ace-builds/src-noconflict/snippets/julia';\ndeclare module 'ace-builds/src-noconflict/snippets/kotlin';\ndeclare module 'ace-builds/src-noconflict/snippets/latex';\ndeclare module 'ace-builds/src-noconflict/snippets/less';\ndeclare module 'ace-builds/src-noconflict/snippets/liquid';\ndeclare module 'ace-builds/src-noconflict/snippets/lisp';\ndeclare module 'ace-builds/src-noconflict/snippets/livescript';\ndeclare module 'ace-builds/src-noconflict/snippets/logiql';\ndeclare module 'ace-builds/src-noconflict/snippets/logtalk';\ndeclare module 'ace-builds/src-noconflict/snippets/lsl';\ndeclare module 'ace-builds/src-noconflict/snippets/lua';\ndeclare module 'ace-builds/src-noconflict/snippets/luapage';\ndeclare module 'ace-builds/src-noconflict/snippets/lucene';\ndeclare module 'ace-builds/src-noconflict/snippets/makefile';\ndeclare module 'ace-builds/src-noconflict/snippets/markdown';\ndeclare module 'ace-builds/src-noconflict/snippets/mask';\ndeclare module 'ace-builds/src-noconflict/snippets/matlab';\ndeclare module 'ace-builds/src-noconflict/snippets/maze';\ndeclare module 'ace-builds/src-noconflict/snippets/mel';\ndeclare module 'ace-builds/src-noconflict/snippets/mixal';\ndeclare module 'ace-builds/src-noconflict/snippets/mushcode';\ndeclare module 'ace-builds/src-noconflict/snippets/mysql';\ndeclare module 'ace-builds/src-noconflict/snippets/nix';\ndeclare module 'ace-builds/src-noconflict/snippets/nsis';\ndeclare module 'ace-builds/src-noconflict/snippets/objectivec';\ndeclare module 'ace-builds/src-noconflict/snippets/ocaml';\ndeclare module 'ace-builds/src-noconflict/snippets/pascal';\ndeclare module 'ace-builds/src-noconflict/snippets/perl';\ndeclare module 'ace-builds/src-noconflict/snippets/perl6';\ndeclare module 'ace-builds/src-noconflict/snippets/pgsql';\ndeclare module 'ace-builds/src-noconflict/snippets/php';\ndeclare module 'ace-builds/src-noconflict/snippets/php_laravel_blade';\ndeclare module 'ace-builds/src-noconflict/snippets/pig';\ndeclare module 'ace-builds/src-noconflict/snippets/plain_text';\ndeclare module 'ace-builds/src-noconflict/snippets/powershell';\ndeclare module 'ace-builds/src-noconflict/snippets/praat';\ndeclare module 'ace-builds/src-noconflict/snippets/prolog';\ndeclare module 'ace-builds/src-noconflict/snippets/properties';\ndeclare module 'ace-builds/src-noconflict/snippets/protobuf';\ndeclare module 'ace-builds/src-noconflict/snippets/puppet';\ndeclare module 'ace-builds/src-noconflict/snippets/python';\ndeclare module 'ace-builds/src-noconflict/snippets/r';\ndeclare module 'ace-builds/src-noconflict/snippets/razor';\ndeclare module 'ace-builds/src-noconflict/snippets/rdoc';\ndeclare module 'ace-builds/src-noconflict/snippets/red';\ndeclare module 'ace-builds/src-noconflict/snippets/redshift';\ndeclare module 'ace-builds/src-noconflict/snippets/rhtml';\ndeclare module 'ace-builds/src-noconflict/snippets/rst';\ndeclare module 'ace-builds/src-noconflict/snippets/ruby';\ndeclare module 'ace-builds/src-noconflict/snippets/rust';\ndeclare module 'ace-builds/src-noconflict/snippets/sass';\ndeclare module 'ace-builds/src-noconflict/snippets/scad';\ndeclare module 'ace-builds/src-noconflict/snippets/scala';\ndeclare module 'ace-builds/src-noconflict/snippets/scheme';\ndeclare module 'ace-builds/src-noconflict/snippets/scss';\ndeclare module 'ace-builds/src-noconflict/snippets/sh';\ndeclare module 'ace-builds/src-noconflict/snippets/sjs';\ndeclare module 'ace-builds/src-noconflict/snippets/slim';\ndeclare module 'ace-builds/src-noconflict/snippets/smarty';\ndeclare module 'ace-builds/src-noconflict/snippets/snippets';\ndeclare module 'ace-builds/src-noconflict/snippets/soy_template';\ndeclare module 'ace-builds/src-noconflict/snippets/space';\ndeclare module 'ace-builds/src-noconflict/snippets/sparql';\ndeclare module 'ace-builds/src-noconflict/snippets/sql';\ndeclare module 'ace-builds/src-noconflict/snippets/sqlserver';\ndeclare module 'ace-builds/src-noconflict/snippets/stylus';\ndeclare module 'ace-builds/src-noconflict/snippets/svg';\ndeclare module 'ace-builds/src-noconflict/snippets/swift';\ndeclare module 'ace-builds/src-noconflict/snippets/tcl';\ndeclare module 'ace-builds/src-noconflict/snippets/terraform';\ndeclare module 'ace-builds/src-noconflict/snippets/tex';\ndeclare module 'ace-builds/src-noconflict/snippets/text';\ndeclare module 'ace-builds/src-noconflict/snippets/textile';\ndeclare module 'ace-builds/src-noconflict/snippets/toml';\ndeclare module 'ace-builds/src-noconflict/snippets/tsx';\ndeclare module 'ace-builds/src-noconflict/snippets/turtle';\ndeclare module 'ace-builds/src-noconflict/snippets/twig';\ndeclare module 'ace-builds/src-noconflict/snippets/typescript';\ndeclare module 'ace-builds/src-noconflict/snippets/vala';\ndeclare module 'ace-builds/src-noconflict/snippets/vbscript';\ndeclare module 'ace-builds/src-noconflict/snippets/velocity';\ndeclare module 'ace-builds/src-noconflict/snippets/verilog';\ndeclare module 'ace-builds/src-noconflict/snippets/vhdl';\ndeclare module 'ace-builds/src-noconflict/snippets/visualforce';\ndeclare module 'ace-builds/src-noconflict/snippets/wollok';\ndeclare module 'ace-builds/src-noconflict/snippets/xml';\ndeclare module 'ace-builds/src-noconflict/snippets/xquery';\ndeclare module 'ace-builds/src-noconflict/snippets/yaml';\ndeclare module 'ace-builds/webpack-resolver';\n"
  },
  {
    "path": "app/static/js/libs/ace/ace.d.ts",
    "content": "/// <reference path=\"./ace-modules.d.ts\" />\nexport namespace Ace {\n  export type NewLineMode = 'auto' | 'unix' | 'windows';\n\n  export interface Anchor extends EventEmitter {\n    getPosition(): Point;\n    getDocument(): Document;\n    setPosition(row: number, column: number, noClip?: boolean): void;\n    detach(): void;\n    attach(doc: Document): void;\n  }\n\n  export interface Document extends EventEmitter {\n    setValue(text: string): void;\n    getValue(): string;\n    createAnchor(row: number, column: number): Anchor;\n    getNewLineCharacter(): string;\n    setNewLineMode(newLineMode: NewLineMode): void;\n    getNewLineMode(): NewLineMode;\n    isNewLine(text: string): boolean;\n    getLine(row: number): string;\n    getLines(firstRow: number, lastRow: number): string[];\n    getAllLines(): string[];\n    getTextRange(range: Range): string;\n    getLinesForRange(range: Range): string[];\n    insert(position: Point, text: string): Point;\n    insertInLine(position: Point, text: string): Point;\n    clippedPos(row: number, column: number): Point;\n    clonePos(pos: Point): Point;\n    pos(row: number, column: number): Point;\n    insertFullLines(row: number, lines: string[]): void;\n    insertMergedLines(position: Point, lines: string[]): Point;\n    remove(range: Range): Point;\n    removeInLine(row: number, startColumn: number, endColumn: number): Point;\n    removeFullLines(firstRow: number, lastRow: number): string[];\n    removeNewLine(row: number): void;\n    replace(range: Range, text: string): Point;\n    applyDeltas(deltas: Delta[]): void;\n    revertDeltas(deltas: Delta[]): void;\n    applyDelta(delta: Delta, doNotValidate?: boolean): void;\n    revertDelta(delta: Delta): void;\n    indexToPosition(index: number, startRow: number): Point;\n    positionToIndex(pos: Point, startRow?: number): number;\n  }\n\n  export interface FoldLine {\n    folds: Fold[];\n    range: Range;\n    start: Point;\n    end: Point;\n\n    shiftRow(shift: number): void;\n    addFold(fold: Fold): void;\n    containsRow(row: number): boolean;\n    walk(callback: Function, endRow?: number, endColumn?: number): void;\n    getNextFoldTo(row: number, column: number): null | { fold: Fold, kind: string };\n    addRemoveChars(row: number, column: number, len: number): void;\n    split(row: number, column: number): FoldLine;\n    merge(foldLineNext: FoldLine): void;\n    idxToPosition(idx: number): Point;\n  }\n\n  export interface Fold {\n    range: Range;\n    start: Point;\n    end: Point;\n    foldLine?: FoldLine;\n    sameRow: boolean;\n    subFolds: Fold[];\n\n    setFoldLine(foldLine: FoldLine): void;\n    clone(): Fold;\n    addSubFold(fold: Fold): Fold;\n    restoreRange(range: Range): void;\n  }\n\n  interface Folding {\n    getFoldAt(row: number, column: number, side: number): Fold;\n    getFoldsInRange(range: Range): Fold[];\n    getFoldsInRangeList(ranges: Range[]): Fold[];\n    getAllFolds(): Fold[];\n    getFoldStringAt(row: number,\n        column: number,\n        trim?: number,\n        foldLine?: FoldLine): string | null;\n    getFoldLine(docRow: number, startFoldLine?: FoldLine): FoldLine | null;\n    getNextFoldLine(docRow: number, startFoldLine?: FoldLine): FoldLine | null;\n    getFoldedRowCount(first: number, last: number): number;\n    addFold(placeholder: string | Fold, range?: Range): Fold;\n    addFolds(folds: Fold[]): void;\n    removeFold(fold: Fold): void;\n    removeFolds(folds: Fold[]): void;\n    expandFold(fold: Fold): void;\n    expandFolds(folds: Fold[]): void;\n    unfold(location: null | number | Point | Range,\n        expandInner?: boolean): Fold[] | undefined;\n    isRowFolded(docRow: number, startFoldRow?: FoldLine): boolean;\n    getFoldRowEnd(docRow: number, startFoldRow?: FoldLine): number;\n    getFoldRowStart(docRow: number, startFoldRow?: FoldLine): number;\n    getFoldDisplayLine(foldLine: FoldLine,\n        endRow: number | null,\n        endColumn: number | null,\n        startRow: number | null,\n        startColumn: number | null): string;\n    getDisplayLine(row: number,\n        endColumn: number | null,\n        startRow: number | null,\n        startColumn: number | null): string;\n    toggleFold(tryToUnfold?: boolean): void;\n    getCommentFoldRange(row: number,\n        column: number,\n        dir: number): Range | undefined;\n    foldAll(startRow?: number, endRow?: number, depth?: number): void;\n    setFoldStyle(style: string): void;\n    getParentFoldRangeData(row: number, ignoreCurrent?: boolean): {\n        range?: Range,\n        firstRange: Range\n    };\n    toggleFoldWidget(toggleParent?: boolean): void;\n    updateFoldWidgets(delta: Delta): void;\n  }\n\n  export interface Range {\n    start: Point;\n    end: Point;\n\n    isEqual(range: Range): boolean;\n    toString(): string;\n    contains(row: number, column: number): boolean;\n    compareRange(range: Range): number;\n    comparePoint(p: Point): number;\n    containsRange(range: Range): boolean;\n    intersects(range: Range): boolean;\n    isEnd(row: number, column: number): boolean;\n    isStart(row: number, column: number): boolean;\n    setStart(row: number, column: number): void;\n    setEnd(row: number, column: number): void;\n    inside(row: number, column: number): boolean;\n    insideStart(row: number, column: number): boolean;\n    insideEnd(row: number, column: number): boolean;\n    compare(row: number, column: number): number;\n    compareStart(row: number, column: number): number;\n    compareEnd(row: number, column: number): number;\n    compareInside(row: number, column: number): number;\n    clipRows(firstRow: number, lastRow: number): Range;\n    extend(row: number, column: number): Range;\n    isEmpty(): boolean;\n    isMultiLine(): boolean;\n    clone(): Range;\n    collapseRows(): Range;\n    toScreenRange(session: EditSession): Range;\n    moveBy(row: number, column: number): void;\n  }\n\n  export interface EditSessionOptions {\n    wrap: string | number;\n    wrapMethod: 'code' | 'text' | 'auto';\n    indentedSoftWrap: boolean;\n    firstLineNumber: number;\n    useWorker: boolean;\n    useSoftTabs: boolean;\n    tabSize: number;\n    navigateWithinSoftTabs: boolean;\n    foldStyle: 'markbegin' | 'markbeginend' | 'manual';\n    overwrite: boolean;\n    newLineMode: NewLineMode;\n    mode: string;\n  }\n\n  export interface VirtualRendererOptions {\n    animatedScroll: boolean;\n    showInvisibles: boolean;\n    showPrintMargin: boolean;\n    printMarginColumn: number;\n    printMargin: boolean | number;\n    showGutter: boolean;\n    fadeFoldWidgets: boolean;\n    showFoldWidgets: boolean;\n    showLineNumbers: boolean;\n    displayIndentGuides: boolean;\n    highlightGutterLine: boolean;\n    hScrollBarAlwaysVisible: boolean;\n    vScrollBarAlwaysVisible: boolean;\n    fontSize: number;\n    fontFamily: string;\n    maxLines: number;\n    minLines: number;\n    scrollPastEnd: boolean;\n    fixedWidthGutter: boolean;\n    theme: string;\n    hasCssTransforms: boolean;\n    maxPixelHeight: number;\n  }\n\n  export interface MouseHandlerOptions {\n    scrollSpeed: number;\n    dragDelay: number;\n    dragEnabled: boolean;\n    focusTimeout: number;\n    tooltipFollowsMouse: boolean;\n  }\n\n  export interface EditorOptions extends EditSessionOptions,\n                                         MouseHandlerOptions,\n                                         VirtualRendererOptions {\n    selectionStyle: string;\n    highlightActiveLine: boolean;\n    highlightSelectedWord: boolean;\n    readOnly: boolean;\n    copyWithEmptySelection: boolean;\n    cursorStyle: 'ace' | 'slim' | 'smooth' | 'wide';\n    mergeUndoDeltas: true | false | 'always';\n    behavioursEnabled: boolean;\n    wrapBehavioursEnabled: boolean;\n    autoScrollEditorIntoView: boolean;\n    keyboardHandler: string;\n    value: string;\n    session: EditSession;\n  }\n\n  export interface SearchOptions {\n    needle: string | RegExp;\n    preventScroll: boolean;\n    backwards: boolean;\n    start: Range;\n    skipCurrent: boolean;\n    range: Range;\n    preserveCase: boolean;\n    regExp: RegExp;\n    wholeWord: string;\n    caseSensitive: boolean;\n    wrap: boolean;\n  }\n\n  export interface EventEmitter {\n    once(name: string, callback: Function): void;\n    setDefaultHandler(name: string, callback: Function): void;\n    removeDefaultHandler(name: string, callback: Function): void;\n    on(name: string, callback: Function, capturing?: boolean): void;\n    addEventListener(name: string, callback: Function, capturing?: boolean): void;\n    off(name: string, callback: Function): void;\n    removeListener(name: string, callback: Function): void;\n    removeEventListener(name: string, callback: Function): void;\n  }\n\n  export interface Point {\n    row: number;\n    column: number;\n  }\n\n  export interface Delta {\n    action: 'insert' | 'remove';\n    start: Point;\n    end: Point;\n    lines: string[];\n  }\n\n  export interface Annotation {\n    row?: number;\n    column?: number;\n    text: string;\n    type: string;\n  }\n\n  export interface Command {\n    name?: string;\n    bindKey?: string | { mac?: string, win?: string };\n    readOnly?: boolean;\n    exec: (editor: Editor, args?: any) => void;\n  }\n\n  export type CommandLike = Command | ((editor: Editor) => void);\n\n  export interface KeyboardHandler {\n    handleKeyboard: Function;\n  }\n\n  export interface MarkerLike {\n    range: Range;\n    type: string;\n    renderer?: MarkerRenderer;\n    clazz: string;\n    inFront: boolean;\n    id: number;\n    update?: (html: string[],\n              // TODO maybe define Marker class\n              marker: any,\n              session: EditSession,\n              config: any) => void;\n  }\n\n  export type MarkerRenderer = (html: string[],\n                                range: Range,\n                                left: number,\n                                top: number,\n                                config: any) => void;\n\n  export interface Token {\n    type: string;\n    value: string;\n    index?: number;\n    start?: number;\n  }\n\n  export interface Completion {\n    value: string;\n    score: number;\n    meta?: string;\n    name?: string;\n    caption?: string;\n  }\n\n  export interface Tokenizer {\n    removeCapturingGroups(src: string): string;\n    createSplitterRegexp(src: string, flag?: string): RegExp;\n    getLineTokens(line: string, startState: string | string[]): Token[];\n  }\n\n  interface TokenIterator{\n    getCurrentToken(): Token;\n    getCurrentTokenColumn(): number;\n    getCurrentTokenRow(): number;\n    getCurrentTokenPosition(): Point;\n    getCurrentTokenRange(): Range;\n    stepBackward(): Token;\n    stepForward(): Token;\n  }\n  \n  export interface SyntaxMode {\n    getTokenizer(): Tokenizer;\n    toggleCommentLines(state: any,\n                       session: EditSession,\n                       startRow: number,\n                       endRow: number): void;\n    toggleBlockComment(state: any,\n                       session: EditSession,\n                       range: Range,\n                       cursor: Point): void;\n    getNextLineIndent(state: any, line: string, tab: string): string;\n    checkOutdent(state: any, line: string, input: string): boolean;\n    autoOutdent(state: any, doc: Document, row: number): void;\n    // TODO implement WorkerClient types\n    createWorker(session: EditSession): any;\n    createModeDelegates(mapping: {[key: string]: string}): void;\n    transformAction(state: string,\n                    action: string,\n                    editor: Editor,\n                    session: EditSession,\n                    text: string): any;\n    getKeywords(append?: boolean): Array<string | RegExp>;\n    getCompletions(state: string,\n                   session: EditSession,\n                   pos: Point,\n                   prefix: string): Completion[];\n  }\n\n  export interface Config {\n    get(key: string): any;\n    set(key: string, value: any): void;\n    all(): {[key: string]: any};\n    moduleUrl(name: string, component?: string): string;\n    setModuleUrl(name: string, subst: string): string;\n    loadModule(moduleName: string | [string, string],\n               onLoad: (module: any) => void): void;\n    init(packaged: any): any;\n    defineOptions(obj: any, path: string, options: {[key: string]: any}): Config;\n    resetOptions(obj: any): void;\n    setDefaultValue(path: string, name: string, value: any): void;\n    setDefaultValues(path: string, optionHash: {[key: string]: any}): void;\n  }\n\n  export interface OptionsProvider {\n    setOptions(optList: {[key: string]: any}): void;\n    getOptions(optionNames?: string[] | {[key: string]: any}): {[key: string]: any};\n    setOption(name: string, value: any): void;\n    getOption(name: string): any;\n  }\n\n  export interface UndoManager {\n    addSession(session: EditSession): void;\n    add(delta: Delta, allowMerge: boolean, session: EditSession): void;\n    addSelection(selection: string, rev?: number): void;\n    startNewGroup(): void;\n    markIgnored(from: number, to?: number): void;\n    getSelection(rev: number, after?: boolean): { value: string, rev: number };\n    getRevision(): number;\n    getDeltas(from: number, to?: number): Delta[];\n    undo(session: EditSession, dontSelect?: boolean): void;\n    redo(session: EditSession, dontSelect?: boolean): void;\n    reset(): void;\n    canUndo(): boolean;\n    canRedo(): boolean;\n    bookmark(rev?: number): void;\n    isAtBookmark(): boolean;\n  }\n\n  export interface EditSession extends EventEmitter, OptionsProvider, Folding {\n    selection: Selection;\n\n    on(name: 'changeFold',\n       callback: (obj: { data: Fold, action: string }) => void): void;\n    on(name: 'changeScrollLeft', callback: (scrollLeft: number) => void): void;\n    on(name: 'changeScrollTop', callback: (scrollTop: number) => void): void;\n    on(name: 'tokenizerUpdate',\n       callback: (obj: { data: { first: number, last: number } }) => void): void;\n\n\n    setOption<T extends keyof EditSessionOptions>(name: T, value: EditSessionOptions[T]): void;\n    getOption<T extends keyof EditSessionOptions>(name: T): EditSessionOptions[T];\n\n    setDocument(doc: Document): void;\n    getDocument(): Document;\n    resetCaches(): void;\n    setValue(text: string): void;\n    getValue(): string;\n    getSelection(): Selection;\n    getState(row: number): string;\n    getTokens(row: number): Token[];\n    getTokenAt(row: number, column: number): Token | null;\n    setUndoManager(undoManager: UndoManager): void;\n    markUndoGroup(): void;\n    getUndoManager(): UndoManager;\n    getTabString(): string;\n    setUseSoftTabs(val: boolean): void;\n    getUseSoftTabs(): boolean;\n    setTabSize(tabSize: number): void;\n    getTabSize(): number;\n    isTabStop(position: Point): boolean;\n    setNavigateWithinSoftTabs(navigateWithinSoftTabs: boolean): void;\n    getNavigateWithinSoftTabs(): boolean;\n    setOverwrite(overwrite: boolean): void;\n    getOverwrite(): boolean;\n    toggleOverwrite(): void;\n    addGutterDecoration(row: number, className: string): void;\n    removeGutterDecoration(row: number, className: string): void;\n    getBreakpoints(): string[];\n    setBreakpoints(rows: number[]): void;\n    clearBreakpoints(): void;\n    setBreakpoint(row: number, className: string): void;\n    clearBreakpoint(row: number): void;\n    addMarker(range: Range,\n              clazz: string,\n              type: MarkerRenderer,\n              inFront: boolean): number;\n    addDynamicMarker(marker: MarkerLike, inFront: boolean): MarkerLike;\n    removeMarker(markerId: number): void;\n    getMarkers(inFront?: boolean): MarkerLike[];\n    highlight(re: RegExp): void;\n    highlightLines(startRow: number,\n                   endRow: number,\n                   clazz: string,\n                   inFront?: boolean): Range;\n    setAnnotations(annotations: Annotation[]): void;\n    getAnnotations(): Annotation[];\n    clearAnnotations(): void;\n    getWordRange(row: number, column: number): Range;\n    getAWordRange(row: number, column: number): Range;\n    setNewLineMode(newLineMode: NewLineMode): void;\n    getNewLineMode(): NewLineMode;\n    setUseWorker(useWorker: boolean): void;\n    getUseWorker(): boolean;\n    setMode(mode: string | SyntaxMode, callback?: () => void): void;\n    getMode(): SyntaxMode;\n    setScrollTop(scrollTop: number): void;\n    getScrollTop(): number;\n    setScrollLeft(scrollLeft: number): void;\n    getScrollLeft(): number;\n    getScreenWidth(): number;\n    getLineWidgetMaxWidth(): number;\n    getLine(row: number): string;\n    getLines(firstRow: number, lastRow: number): string[];\n    getLength(): number;\n    getTextRange(range: Range): string;\n    insert(position: Point, text: string): void;\n    remove(range: Range): void;\n    removeFullLines(firstRow: number, lastRow: number): void;\n    undoChanges(deltas: Delta[], dontSelect?: boolean): void;\n    redoChanges(deltas: Delta[], dontSelect?: boolean): void;\n    setUndoSelect(enable: boolean): void;\n    replace(range: Range, text: string): void;\n    moveText(fromRange: Range, toPosition: Point, copy?: boolean): void;\n    indentRows(startRow: number, endRow: number, indentString: string): void;\n    outdentRows(range: Range): void;\n    moveLinesUp(firstRow: number, lastRow: number): void;\n    moveLinesDown(firstRow: number, lastRow: number): void;\n    duplicateLines(firstRow: number, lastRow: number): void;\n    setUseWrapMode(useWrapMode: boolean): void;\n    getUseWrapMode(): boolean;\n    setWrapLimitRange(min: number, max: number): void;\n    adjustWrapLimit(desiredLimit: number): boolean;\n    getWrapLimit(): number;\n    setWrapLimit(limit: number): void;\n    getWrapLimitRange(): { min: number, max: number };\n    getRowLineCount(row: number): number;\n    getRowWrapIndent(screenRow: number): number;\n    getScreenLastRowColumn(screenRow: number): number;\n    getDocumentLastRowColumn(docRow: number, docColumn: number): number;\n    getdocumentLastRowColumnPosition(docRow: number, docColumn: number): Point;\n    getRowSplitData(row: number): string | undefined;\n    getScreenTabSize(screenColumn: number): number;\n    screenToDocumentRow(screenRow: number, screenColumn: number): number;\n    screenToDocumentColumn(screenRow: number, screenColumn: number): number;\n    screenToDocumentPosition(screenRow: number,\n                             screenColumn: number,\n                             offsetX?: number): Point;\n    documentToScreenPosition(docRow: number, docColumn: number): Point;\n    documentToScreenPosition(position: Point): Point;\n    documentToScreenColumn(row: number, docColumn: number): number;\n    documentToScreenRow(docRow: number, docColumn: number): number;\n    getScreenLength(): number;\n    destroy(): void;\n  }\n\n  export interface KeyBinding {\n    setDefaultHandler(handler: KeyboardHandler): void;\n    setKeyboardHandler(handler: KeyboardHandler): void;\n    addKeyboardHandler(handler: KeyboardHandler, pos: number): void;\n    removeKeyboardHandler(handler: KeyboardHandler): boolean;\n    getKeyboardHandler(): KeyboardHandler;\n    getStatusText(): string;\n  }\n\n  export interface CommandManager extends EventEmitter {\n    on(name: 'exec', callback: (obj: {\n                                  editor: Editor,\n                                  command: Command,\n                                  args: any[]\n                               }) => void): void;\n    once(name: string, callback: Function): void;\n    setDefaultHandler(name: string, callback: Function): void;\n    removeDefaultHandler(name: string, callback: Function): void;\n    on(name: string, callback: Function, capturing?: boolean): void;\n    addEventListener(name: string, callback: Function, capturing?: boolean): void;\n    off(name: string, callback: Function): void;\n    removeListener(name: string, callback: Function): void;\n    removeEventListener(name: string, callback: Function): void;\n\n    exec(command: string, editor: Editor, args: any): boolean;\n    toggleRecording(editor: Editor): void;\n    replay(editor: Editor): void;\n    addCommand(command: Command): void;\n    removeCommand(command: Command, keepCommand?: boolean): void;\n    bindKey(key: string | { mac?: string, win?: string},\n            command: CommandLike,\n            position?: number): void;\n  }\n\n  export interface VirtualRenderer extends OptionsProvider, EventEmitter {\n    container: HTMLElement;\n\n    setOption<T extends keyof VirtualRendererOptions>(name: T, value: VirtualRendererOptions[T]): void;\n    getOption<T extends keyof VirtualRendererOptions>(name: T): VirtualRendererOptions[T];\n\n    setSession(session: EditSession): void;\n    updateLines(firstRow: number, lastRow: number, force?: boolean): void;\n    updateText(): void;\n    updateFull(force?: boolean): void;\n    updateFontSize(): void;\n    adjustWrapLimit(): boolean;\n    setAnimatedScroll(shouldAnimate: boolean): void;\n    getAnimatedScroll(): boolean;\n    setShowInvisibles(showInvisibles: boolean): void;\n    getShowInvisibles(): boolean;\n    setDisplayIndentGuides(display: boolean): void;\n    getDisplayIndentGuides(): boolean;\n    setShowPrintMargin(showPrintMargin: boolean): void;\n    getShowPrintMargin(): boolean;\n    setPrintMarginColumn(showPrintMargin: boolean): void;\n    getPrintMarginColumn(): boolean;\n    setShowGutter(show: boolean): void;\n    getShowGutter(): boolean;\n    setFadeFoldWidgets(show: boolean): void;\n    getFadeFoldWidgets(): boolean;\n    setHighlightGutterLine(shouldHighlight: boolean): void;\n    getHighlightGutterLine(): boolean;\n    getContainerElement(): HTMLElement;\n    getMouseEventTarget(): HTMLElement;\n    getTextAreaContainer(): HTMLElement;\n    getFirstVisibleRow(): number;\n    getFirstFullyVisibleRow(): number;\n    getLastFullyVisibleRow(): number;\n    getLastVisibleRow(): number;\n    setPadding(padding: number): void;\n    setScrollMargin(top: number,\n                    bottom: number,\n                    left: number,\n                    right: number): void;\n    setHScrollBarAlwaysVisible(alwaysVisible: boolean): void;\n    getHScrollBarAlwaysVisible(): boolean;\n    setVScrollBarAlwaysVisible(alwaysVisible: boolean): void;\n    getVScrollBarAlwaysVisible(): boolean;\n    freeze(): void;\n    unfreeze(): void;\n    updateFrontMarkers(): void;\n    updateBackMarkers(): void;\n    updateBreakpoints(): void;\n    setAnnotations(annotations: Annotation[]): void;\n    updateCursor(): void;\n    hideCursor(): void;\n    showCursor(): void;\n    scrollSelectionIntoView(anchor: Point,\n                            lead: Point,\n                            offset?: number): void;\n    scrollCursorIntoView(cursor: Point, offset?: number): void;\n    getScrollTop(): number;\n    getScrollLeft(): number;\n    getScrollTopRow(): number;\n    getScrollBottomRow(): number;\n    scrollToRow(row: number): void;\n    alignCursor(cursor: Point | number, alignment: number): number;\n    scrollToLine(line: number,\n                 center: boolean,\n                 animate: boolean,\n                 callback: () => void): void;\n    animateScrolling(fromValue: number, callback: () => void): void;\n    scrollToY(scrollTop: number): void;\n    scrollToX(scrollLeft: number): void;\n    scrollTo(x: number, y: number): void;\n    scrollBy(deltaX: number, deltaY: number): void;\n    isScrollableBy(deltaX: number, deltaY: number): boolean;\n    textToScreenCoordinates(row: number, column: number): { pageX: number, pageY: number};\n    visualizeFocus(): void;\n    visualizeBlur(): void;\n    showComposition(position: number): void;\n    setCompositionText(text: string): void;\n    hideComposition(): void;\n    setTheme(theme: string, callback?: () => void): void;\n    getTheme(): string;\n    setStyle(style: string, include?: boolean): void;\n    unsetStyle(style: string): void;\n    setCursorStyle(style: string): void;\n    setMouseCursor(cursorStyle: string): void;\n    attachToShadowRoot(): void;\n    destroy(): void;\n  }\n\n\n  export interface Selection extends EventEmitter {\n    moveCursorWordLeft(): void;\n    moveCursorWordRight(): void;\n    fromOrientedRange(range: Range): void;\n    setSelectionRange(match: any): void;\n    getAllRanges(): Range[];\n    addRange(range: Range): void;\n    isEmpty(): boolean;\n    isMultiLine(): boolean;\n    setCursor(row: number, column: number): void;\n    setAnchor(row: number, column: number): void;\n    getAnchor(): Point;\n    getCursor(): Point;\n    isBackwards(): boolean;\n    getRange(): Range;\n    clearSelection(): void;\n    selectAll(): void;\n    setRange(range: Range, reverse?: boolean): void;\n    selectTo(row: number, column: number): void;\n    selectToPosition(pos: any): void;\n    selectUp(): void;\n    selectDown(): void;\n    selectRight(): void;\n    selectLeft(): void;\n    selectLineStart(): void;\n    selectLineEnd(): void;\n    selectFileEnd(): void;\n    selectFileStart(): void;\n    selectWordRight(): void;\n    selectWordLeft(): void;\n    getWordRange(): void;\n    selectWord(): void;\n    selectAWord(): void;\n    selectLine(): void;\n    moveCursorUp(): void;\n    moveCursorDown(): void;\n    moveCursorLeft(): void;\n    moveCursorRight(): void;\n    moveCursorLineStart(): void;\n    moveCursorLineEnd(): void;\n    moveCursorFileEnd(): void;\n    moveCursorFileStart(): void;\n    moveCursorLongWordRight(): void;\n    moveCursorLongWordLeft(): void;\n    moveCursorBy(rows: number, chars: number): void;\n    moveCursorToPosition(position: any): void;\n    moveCursorTo(row: number, column: number, keepDesiredColumn?: boolean): void;\n    moveCursorToScreen(row: number, column: number, keepDesiredColumn: boolean): void;\n  }\n  var Selection: {\n    new(session: EditSession): Selection;\n  }\n\n  export interface Editor extends OptionsProvider, EventEmitter {\n    container: HTMLElement;\n    renderer: VirtualRenderer;\n    id: string;\n    commands: CommandManager;\n    keyBinding: KeyBinding;\n    session: EditSession;\n    selection: Selection;\n\n    on(name: 'blur', callback: (e: Event) => void): void;\n    on(name: 'change', callback: (delta: Delta) => void): void;\n    on(name: 'changeSelectionStyle', callback: (obj: { data: string }) => void): void;\n    on(name: 'changeSession',\n       callback: (obj: { session: EditSession, oldSession: EditSession }) => void): void;\n    on(name: 'copy', callback: (obj: { text: string }) => void): void;\n    on(name: 'focus', callback: (e: Event) => void): void;\n    on(name: 'paste', callback: (obj: { text: string }) => void): void;\n\n    setOption<T extends keyof EditorOptions>(name: T, value: EditorOptions[T]): void;\n    getOption<T extends keyof EditorOptions>(name: T): EditorOptions[T];\n\n    setKeyboardHandler(keyboardHandler: string, callback?: () => void): void;\n    getKeyboardHandler(): string;\n    setSession(session: EditSession): void;\n    getSession(): EditSession;\n    setValue(val: string, cursorPos?: number): string;\n    getValue(): string;\n    getSelection(): Selection;\n    resize(force?: boolean): void;\n    setTheme(theme: string, callback?: () => void): void;\n    getTheme(): string;\n    setStyle(style: string): void;\n    unsetStyle(style: string): void;\n    getFontSize(): string;\n    setFontSize(size: string): void;\n    focus(): void;\n    isFocused(): boolean;\n    flur(): void;\n    getSelectedText(): string;\n    getCopyText(): string;\n    execCommand(command: string | string[], args: any): boolean;\n    insert(text: string, pasted?: boolean): void;\n    setOverwrite(overwrite: boolean): void;\n    getOverwrite(): boolean;\n    toggleOverwrite(): void;\n    setScrollSpeed(speed: number): void;\n    getScrollSpeed(): number;\n    setDragDelay(dragDelay: number): void;\n    getDragDelay(): number;\n    setSelectionStyle(val: string): void;\n    getSelectionStyle(): string;\n    setHighlightActiveLine(shouldHighlight: boolean): void;\n    getHighlightActiveLine(): boolean;\n    setHighlightGutterLine(shouldHighlight: boolean): void;\n    getHighlightGutterLine(): boolean;\n    setHighlightSelectedWord(shouldHighlight: boolean): void;\n    getHighlightSelectedWord(): boolean;\n    setAnimatedScroll(shouldAnimate: boolean): void;\n    getAnimatedScroll(): boolean;\n    setShowInvisibles(showInvisibles: boolean): void;\n    getShowInvisibles(): boolean;\n    setDisplayIndentGuides(display: boolean): void;\n    getDisplayIndentGuides(): boolean;\n    setShowPrintMargin(showPrintMargin: boolean): void;\n    getShowPrintMargin(): boolean;\n    setPrintMarginColumn(showPrintMargin: number): void;\n    getPrintMarginColumn(): number;\n    setReadOnly(readOnly: boolean): void;\n    getReadOnly(): boolean;\n    setBehavioursEnabled(enabled: boolean): void;\n    getBehavioursEnabled(): boolean;\n    setWrapBehavioursEnabled(enabled: boolean): void;\n    getWrapBehavioursEnabled(): boolean;\n    setShowFoldWidgets(show: boolean): void;\n    getShowFoldWidgets(): boolean;\n    setFadeFoldWidgets(fade: boolean): void;\n    getFadeFoldWidgets(): boolean;\n    remove(dir?: 'left' | 'right'): void;\n    removeWordRight(): void;\n    removeWordLeft(): void;\n    removeLineToEnd(): void;\n    splitLine(): void;\n    transposeLetters(): void;\n    toLowerCase(): void;\n    toUpperCase(): void;\n    indent(): void;\n    blockIndent(): void;\n    blockOutdent(): void;\n    sortLines(): void;\n    toggleCommentLines(): void;\n    toggleBlockComment(): void;\n    modifyNumber(amount: number): void;\n    removeLines(): void;\n    duplicateSelection(): void;\n    moveLinesDown(): void;\n    moveLinesUp(): void;\n    moveText(range: Range, toPosition: Point, copy?: boolean): Range;\n    copyLinesUp(): void;\n    copyLinesDown(): void;\n    getFirstVisibleRow(): number;\n    getLastVisibleRow(): number;\n    isRowVisible(row: number): boolean;\n    isRowFullyVisible(row: number): boolean;\n    selectPageDown(): void;\n    selectPageUp(): void;\n    gotoPageDown(): void;\n    gotoPageUp(): void;\n    scrollPageDown(): void;\n    scrollPageUp(): void;\n    scrollToRow(row: number): void;\n    scrollToLine(line: number, center: boolean, animate: boolean, callback: () => void): void;\n    centerSelection(): void;\n    getCursorPosition(): Point;\n    getCursorPositionScreen(): Point;\n    getSelectionRange(): Range;\n    selectAll(): void;\n    clearSelection(): void;\n    moveCursorTo(row: number, column: number): void;\n    moveCursorToPosition(pos: Point): void;\n    jumpToMatching(select: boolean, expand: boolean): void;\n    gotoLine(lineNumber: number, column: number, animate: boolean): void;\n    navigateTo(row: number, column: number): void;\n    navigateUp(): void;\n    navigateDown(): void;\n    navigateLeft(): void;\n    navigateRight(): void;\n    navigateLineStart(): void;\n    navigateLineEnd(): void;\n    navigateFileEnd(): void;\n    navigateFileStart(): void;\n    navigateWordRight(): void;\n    navigateWordLeft(): void;\n    replace(replacement: string, options?: Partial<SearchOptions>): number;\n    replaceAll(replacement: string, options?: Partial<SearchOptions>): number;\n    getLastSearchOptions(): Partial<SearchOptions>;\n    find(needle: string, options?: Partial<SearchOptions>, animate?: boolean): void;\n    findNext(options?: Partial<SearchOptions>, animate?: boolean): void;\n    findPrevious(options?: Partial<SearchOptions>, animate?: boolean): void;\n    undo(): void;\n    redo(): void;\n    destroy(): void;\n    setAutoScrollEditorIntoView(enable: boolean): void;\n  }\n}\n\nexport const version: string;\nexport const config: Ace.Config;\nexport function require(name: string): any;\nexport function edit(el: Element | string, options?: Partial<Ace.EditorOptions>): Ace.Editor;\nexport function createEditSession(text: Ace.Document | string, mode: Ace.SyntaxMode): Ace.EditSession;\nexport const VirtualRenderer: {\n  new(container: HTMLElement, theme?: string): Ace.VirtualRenderer;\n};\nexport const EditSession: {\n  new(text: string | Document, mode?: Ace.SyntaxMode): Ace.EditSession;\n};\nexport const UndoManager: {\n  new(): Ace.UndoManager;\n};\nexport const Range: {\n  new(startRow: number, startColumn: number, endRow: number, endColumn: number): Ace.Range;\n  fromPoints(start: Ace.Point, end: Ace.Point): Ace.Range;\n  comparePoints(p1: Ace.Point, p2: Ace.Point): number;\n};\n"
  },
  {
    "path": "app/static/js/libs/ace/bower.json",
    "content": "{\n    \"name\": \"ace-builds\",\n    \"description\": \"Ace (Ajax.org Cloud9 Editor)\",\n    \"scripts\": {\n        \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n    },\n    \"ignore\": [\n        \"demo\"\n    ],\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/ajaxorg/ace-builds.git\"\n    },\n    \"author\": \"\",\n    \"license\": \"BSD\",\n    \"bugs\": {\n        \"url\": \"https://github.com/ajaxorg/ace-builds/issues\"\n    },\n    \"homepage\": \"https://github.com/ajaxorg/ace-builds\"\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/autocompletion.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>ACE Autocompletion demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n\n<!-- load ace -->\n<script src=\"../src-noconflict/ace.js\"></script>\n<!-- load ace language tools -->\n<script src=\"../src-noconflict/ext-language_tools.js\"></script>\n<script>\n    // trigger extension\n    ace.require(\"ace/ext/language_tools\");\n    var editor = ace.edit(\"editor\");\n    editor.session.setMode(\"ace/mode/html\");\n    editor.setTheme(\"ace/theme/tomorrow\");\n    // enable autocompletion and snippets\n    editor.setOptions({\n        enableBasicAutocompletion: true,\n        enableSnippets: true,\n        enableLiveAutocompletion: false\n    });\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/autoresize.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n\n\t.ace_editor {\n\t\tborder: 1px solid lightgray;\n\t\tmargin: auto;\n\t\theight: 200px;\n\t\twidth: 80%;\n\t}\n\t.scrollmargin {\n\t\theight: 80px;\n        text-align: center;\n\t}\n    </style>\n</head>\n<body>\n<pre id=\"editor1\">autoresizing editor</pre>\n<div class=\"scrollmargin\"></div>\n<pre id=\"editor2\">minHeight = 2 lines</pre>\n<div class=\"scrollmargin\"></div>\n<pre id=\"editor3\" style=\"width: 40%;\"></pre>\n<div class=\"scrollmargin\"></div>\n<pre id=\"editor\"></pre>\n\n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<script>\n    var editor1 = ace.edit(\"editor1\", {\n        theme: \"ace/theme/tomorrow_night_eighties\",\n        mode: \"ace/mode/html\",\n        maxLines: 30,\n        wrap: true,\n        autoScrollEditorIntoView: true\n    });\n\n    var editor2 = ace.edit(\"editor2\", {\n        theme: \"ace/theme/tomorrow_night_blue\",\n        mode: \"ace/mode/html\",\n        autoScrollEditorIntoView: true,\n        maxLines: 30,\n        minLines: 2\n    });\n\n    var editor = ace.edit(\"editor3\");\n    editor.setOptions({\n        autoScrollEditorIntoView: true,\n        maxLines: 8\n    });\n    editor.renderer.setScrollMargin(10, 10, 10, 10);\n    \n    var editor = ace.edit(\"editor\");\n    editor.setTheme(\"ace/theme/tomorrow\");\n    editor.session.setMode(\"ace/mode/html\");\n    editor.setAutoScrollEditorIntoView(true);\n    editor.setOption(\"maxLines\", 100);\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/bookmarklet/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\">\n  <title>Ace Bookmarklet Builder</title>\n</head>\n<body>\n\n<div id=\"wrapper\">\n\n<div class=\"content\" style=\"width: 950px\">\n    <div class=\"column1\" style=\"margin-top: 47px\">\n        <textarea id=\"textarea\" style=\"width:300px; height:300px\">\n/**\n * This is Ace injected using a bookmarklet.\n */\nfunction foo() {\n    var bar = true;\n}</textarea><br>\n        SourceUrl: <br>\n        <input id=\"srcURL\" style=\"width:300px\" value=\"https://ajaxorg.github.io/ace-builds/src-noconflict\"></input><br>\n        <br>\n        <a href=\"#\" onmouseover=\"buildBookmarklet()\" onmousedown=\"buildBookmarklet()\" class=\"bookmarkletLink\">Ace Bookmarklet Link</a>\n        <br>\n        <br>\n        <a href=\"https://github.com/ajaxorg/ace/\">\n            <div class=\"fork_on_github\"></div>\n        </a>\n    </div>\n    <div class=\"column2\">\n        <h1>Ace Bookmarklet Builder</h1>\n\n        <p id=\"first\">\n        </p>\n\n        <h2>How to use it:</h2>\n        <ul>\n            <li>Select the options as you want them to be by default.</li>\n            <li>Enter the \"SourceUrl\". This has to be the URL pointing to a folder containing ace.js (you can leave the default to load the scripts from GitHub).</li>\n            <li>Drag the <a href=\"#\" onmouseover=\"buildBookmarklet()\" onmousedown=\"buildBookmarklet()\" class=\"bookmarkletLink\">\"Ace Bookmarklet Link\"</a> link to your toolbar or store it somewhere else.</li>\n            <li>Click the bookmarklet.</li>\n            <li>Click three times on a textarea you want to replace - Ace will replace it.</li>\n            <li>To change settings, use <strong>Ctrl-,</strong> shortcut. (<strong>Cmd-,</strong> on mac).</li>\n        </ul>\n        <textarea cols=\"80\">Test bookmarklet here!</textarea>\n    </div>\n</div>\n</div>\n\n<script>\n\nfunction inject(options, callback) {\n    var load = function(path, callback) {\n        var head = document.getElementsByTagName('head')[0];\n        var s = document.createElement('script');\n\n        s.src = options.baseUrl + \"/\" + path;\n        head.appendChild(s);\n\n        s.onload = s.onreadystatechange = function(_, isAbort) {\n            if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n                s = s.onload = s.onreadystatechange = null;\n                if (!isAbort)\n                    callback();\n            }\n        };\n    };\n    var pending = [];\n    var transform = function(el) { pending.push(el) };\n    load(\"ace.js\", function() {\n        ace.config.loadModule(\"ace/ext/textarea\", function(m) {\n            transform = function(el) { \n                if (!el.ace)\n                    el.ace = m.transformTextarea(el, options.ace);\n            };\n            pending = pending.forEach(transform);\n            callback && setTimeout(callback);\n        });\n    });\n    if (options.target)\n        return transform(options.target);\n    window.addEventListener(\"click\", function(e) {\n        if (e.detail == 3 && e.target.localName == \"textarea\")\n            transform(e.target);\n    });\n}\n\n// Call the inject function to load the ace files.\nvar textAce;\ninject({\n    baseUrl: \"../../src-noconflict\",\n    target: document.querySelector(\"textarea\")\n}, function () {\n    // Transform the textarea on the page into an ace editor.\n    textAce = document.querySelector(\"textarea\").ace;\n    textAce.setDisplaySettings(true);\n    buildBookmarklet();\n});\n\n\nfunction buildBookmarklet() {\n    var injectSrc = inject.toString().split(\"\\n\").join(\"\");\n    injectSrc = injectSrc.replace(/\\s+/g, \" \");\n    Function(\"\", injectSrc); // check if injectSrc is still valid js\n    \n    var options = textAce.getOptions();\n    options.baseUrl = document.getElementById(\"srcURL\").value;\n\n    var els = document.querySelectorAll(\".bookmarkletLink\");\n    for (var i = 0; i < els.length; i++)\n        els[i].href = \"javascript:(\" + injectSrc + \")(\" + JSON.stringify(options) + \")\";\n}\n\n\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/bookmarklet/style.css",
    "content": "body {\n    margin:0;\n    padding:0;\n    background-color:#e6f5fc;\n    \n}\n\nH2, H3, H4 {\n    font-family:Trebuchet MS;\n    font-weight:bold;\n    margin:0;\n    padding:0;\n}\n\nH2 {\n    font-size:28px;\n    color:#263842;\n    padding-bottom:6px;\n}\n\nH3 {\n    font-family:Trebuchet MS;\n    font-weight:bold;\n    font-size:22px;\n    color:#253741;\n    margin-top:43px;\n    margin-bottom:8px;\n}\n\nH4 {\n    font-family:Trebuchet MS;\n    font-weight:bold;\n    font-size:21px;\n    color:#222222;\n    margin-bottom:4px;\n}\n\nP {\n    padding:13px 0;\n    margin:0;\n    line-height:22px;\n}\n\nUL{\n    line-height : 22px;\n}\n\nPRE{\n    background : #333;\n    color : white;\n    padding : 10px;\n}\n\n#header {\n    height : 227px;\n    position:relative;\n    overflow:hidden;\n    background: url(images/background.png) repeat-x 0 0;\n    border-bottom:1px solid #c9e8fa;   \n}\n\n#header .content .signature {\n    font-family:Trebuchet MS;\n    font-size:11px;\n    color:#ebe4d6;\n    position:absolute;\n    bottom:5px;\n    right:42px;\n    letter-spacing : 1px;\n}\n\n.content {\n    width:970px;\n    position:relative;\n    margin:0 auto;\n}\n\n#header .content {\n    height:184px;\n    margin-top:22px;\n}\n\n#header .content .logo {\n    width  : 282px;\n    height : 184px;\n    background:url(images/logo.png) no-repeat 0 0;\n    position:absolute;\n    top:0;\n    left:0;\n}\n\n#header .content .title {\n    width  : 605px;\n    height : 58px;\n    background:url(images/ace.png) no-repeat 0 0;\n    position:absolute;\n    top:98px;\n    left:329px;\n}\n\n#wrapper {\n    background:url(images/body_background.png) repeat-x 0 0;\n    min-height:250px;\n}\n\n#wrapper .content {\n    font-family:Arial;\n    font-size:14px;\n    color:#222222;\n    width:1000px;\n}\n\n#wrapper .content .column1 {\n    position:relative;\n    float:left;\n    width:315px;\n    margin-right:31px;\n}\n\n#wrapper .content .column2 {\n    position:relative;\n    float:left;\n    width:600px;\n    padding-top:47px;\n}\n\n.fork_on_github {\n    width:310px;\n    height:80px;\n    background:url(images/fork_on_github.png) no-repeat 0 0;\n    position:relative;\n    overflow:hidden;\n    cursor:pointer;\n}\n\n.fork_on_github:hover {\n    background-position:0 -80px;\n}\n\n.divider {\n    height:3px;\n    background-color:#bedaea;\n    margin-bottom:3px;\n}\n\n.menu {\n    padding:23px 0 0 24px;\n}\n\nUL.content-list {\n    padding:15px;\n    margin:0;\n}\n\nUL.menu-list {\n    padding:0;\n    margin:0 0 20px 0;\n    list-style-type:none;\n    line-height : 16px;\n}\n\nUL.menu-list LI {\n    color:#2557b4;\n    font-family:Trebuchet MS;\n    font-size:14px;\n    padding:7px 0;\n    border-bottom:1px dotted #d6e2e7;\n}\n\nUL.menu-list LI:last-child {\n    border-bottom:0;\n}\n\nA {\n    color:#2557b4;\n    text-decoration:none;\n}\n\nA:hover {\n    text-decoration:underline;\n}\n\nP#first{\n    background : rgba(255,255,255,0.5);\n    padding : 20px;\n    font-size : 16px;\n    line-height : 24px;\n    margin : 0 0 20px 0;\n}\n\n#footer {\n    height:40px;\n    position:relative;\n    overflow:hidden;\n    background:url(images/bottombar.png) repeat-x 0 0;\n    position:relative;\n    margin-top:40px;\n}\n\nUL.menu-footer {\n    padding:0;\n    margin:8px 11px 0 0;\n    list-style-type:none;\n    float:right;\n}\n\nUL.menu-footer LI {\n    color:white;\n    font-family:Arial;\n    font-size:12px;\n    display:inline-block;\n    margin:0 1px;\n}\n\nUL.menu-footer LI A {\n    color:#8dd0ff;\n    text-decoration:none;\n}\n\nUL.menu-footer LI A:hover {\n    text-decoration:underline;\n}\n\n\n\n\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/chromevox.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>ACE ChromeVox demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n\n    #editor {\n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n\n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<!-- load ace accessibility extension -->\n<script src=\"../src/ext-chromevox.js\"></script>\n<script>\n    // trigger extension\n    ace.require(\"ace/ext/chromevox\");\n    var editor = ace.edit(\"editor\");\n    editor.session.setMode(\"ace/mode/html\");\n    editor.setTheme(\"ace/theme/tomorrow\");\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/emmet.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>ACE Emmet demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n\n<!-- load emmet code and snippets compiled for browser -->\n<script src=\"https://cloud9ide.github.io/emmet-core/emmet.js\"></script>\n\n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<!-- load ace emmet extension -->\n<script src=\"../src/ext-emmet.js\"></script>\n<script>\n    var editor = ace.edit(\"editor\");\n    editor.session.setMode(\"ace/mode/html\");\n    // enable emmet on the current editor\n    editor.setOption(\"enableEmmet\", true);\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/iframe.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>ACE Editor Inside iframe</title>\n  <style type=\"text/css\" media=\"screen\">\n    body, html { \n        height: 100%;\n        margin:0; padding:0;\n    }    \n    #editor { \n        padding: 20px; margin: 20px\n        width: 80%; height: 80%;\n    }\n  </style>\n</head>\n<body>\n  <div style=\"height: 100%\"></div>\n  <div><textarea></textarea></div>\n  <iframe id=\"editor-iframe\" src='data:text/html,\n  <pre id=\"editor\" style=\"height:100%\"></pre>\n  <script src=\"https://ajaxorg.github.io/ace-builds/src/ace.js\"></script>\n  <script>\n      var editor = ace.edit(\"editor\");\n      editor.setTheme(\"ace/theme/twilight\");\n      editor.session.setMode(\"ace/mode/javascript\");\n  </script>\n  '></iframe>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/keyboard_shortcuts.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n    \n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<script>\n    var editor = ace.edit(\"editor\")\n    editor.setTheme(\"ace/theme/twilight\")\n    editor.session.setMode(\"ace/mode/html\")\n    \n    // add command to lazy-load keybinding_menu extension\n    editor.commands.addCommand({\n        name: \"showKeyboardShortcuts\",\n        bindKey: {win: \"Ctrl-Alt-h\", mac: \"Command-Alt-h\"},\n        exec: function(editor) {\n            ace.config.loadModule(\"ace/ext/keybinding_menu\", function(module) {\n                module.init(editor);\n                editor.showKeyboardShortcuts()\n            })\n        }\n    })\n    editor.execCommand(\"showKeyboardShortcuts\")\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/demo.js",
    "content": "define(\"ace/ext/rtl\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"ace/lib/dom\");\nvar lang = require(\"ace/lib/lang\");\n\nvar commands = [{\n    name: \"leftToRight\",\n    bindKey: { win: \"Ctrl-Alt-Shift-L\", mac: \"Command-Alt-Shift-L\" },\n    exec: function(editor) {\n        editor.session.$bidiHandler.setRtlDirection(editor, false);\n    },\n    readOnly: true\n}, {\n    name: \"rightToLeft\",\n    bindKey: { win: \"Ctrl-Alt-Shift-R\",  mac: \"Command-Alt-Shift-R\" },\n    exec: function(editor) {\n        editor.session.$bidiHandler.setRtlDirection(editor, true);\n    },\n    readOnly: true\n}];\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    rtlText: {\n        set: function(val) {\n            if (val) {\n                this.on(\"change\", onChange);\n                this.on(\"changeSelection\", onChangeSelection);\n                this.renderer.on(\"afterRender\", updateLineDirection);\n                this.commands.on(\"exec\", onCommandEmitted);\n                this.commands.addCommands(commands);\n            } else {\n                this.off(\"change\", onChange);\n                this.off(\"changeSelection\", onChangeSelection);\n                this.renderer.off(\"afterRender\", updateLineDirection);\n                this.commands.off(\"exec\", onCommandEmitted);\n                this.commands.removeCommands(commands);\n                clearTextLayer(this.renderer);\n            }\n            this.renderer.updateFull();\n        }\n    },\n    rtl: {\n        set: function(val) {\n            this.session.$bidiHandler.$isRtl = val;\n            if (val) {\n                this.setOption(\"rtlText\", false);\n                this.renderer.on(\"afterRender\", updateLineDirection);\n                this.session.$bidiHandler.seenBidi = true;\n            } else {\n                this.renderer.off(\"afterRender\", updateLineDirection);\n                clearTextLayer(this.renderer);\n            }\n            this.renderer.updateFull();\n        }\n    }\n});\nfunction onChangeSelection(e, editor) {\n    var lead = editor.getSelection().lead;\n    if (editor.session.$bidiHandler.isRtlLine(lead.row)) {\n        if (lead.column === 0) {\n            if (editor.session.$bidiHandler.isMoveLeftOperation && lead.row > 0) {\n                editor.getSelection().moveCursorTo(lead.row - 1, editor.session.getLine(lead.row - 1).length);\n            } else {\n                if (editor.getSelection().isEmpty())\n                    lead.column += 1;\n                else\n                    lead.setPosition(lead.row, lead.column + 1);\n            }\n        }\n    }\n}\n\nfunction onCommandEmitted(commadEvent) {\n    commadEvent.editor.session.$bidiHandler.isMoveLeftOperation = /gotoleft|selectleft|backspace|removewordleft/.test(commadEvent.command.name);\n}\nfunction onChange(delta, editor) {\n    var session = editor.session;\n    session.$bidiHandler.currentRow = null;\n    if (session.$bidiHandler.isRtlLine(delta.start.row) && delta.action === 'insert' && delta.lines.length > 1) {\n        for (var row = delta.start.row; row < delta.end.row; row++) {\n            if (session.getLine(row + 1).charAt(0) !== session.$bidiHandler.RLE)\n                session.doc.$lines[row + 1] = session.$bidiHandler.RLE + session.getLine(row + 1);\n        }\n    }\n}\n\nfunction updateLineDirection(e, renderer) {\n    var session = renderer.session;\n    var $bidiHandler = session.$bidiHandler;\n    var cells = renderer.$textLayer.$lines.cells;\n    var width = renderer.layerConfig.width - renderer.layerConfig.padding + \"px\";\n    cells.forEach(function(cell) {\n        var style = cell.element.style;\n        if ($bidiHandler && $bidiHandler.isRtlLine(cell.row)) {\n            style.direction = \"rtl\";\n            style.textAlign = \"right\";\n            style.width = width;\n        } else {\n            style.direction = \"\";\n            style.textAlign = \"\";\n            style.width = \"\";\n        }\n    });\n}\n\nfunction clearTextLayer(renderer) {\n    var lines = renderer.$textLayer.$lines;\n    lines.cells.forEach(clear);\n    lines.cellCache.forEach(clear);\n    function clear(cell) {\n        var style = cell.element.style;\n        style.direction = style.textAlign = style.width = \"\";\n    }\n}\n\n});\n\ndefine(\"kitchen-sink/inline_editor\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/lib/dom\",\"ace/commands/default_commands\"], function(require, exports, module) {\n\"use strict\";\n\nvar LineWidgets = require(\"ace/line_widgets\").LineWidgets;\nvar Editor = require(\"ace/editor\").Editor;\nvar Renderer = require(\"ace/virtual_renderer\").VirtualRenderer;\nvar dom = require(\"ace/lib/dom\");\n\n\nrequire(\"ace/commands/default_commands\").commands.push({\n    name: \"openInlineEditor\",\n    bindKey: \"F3\",\n    exec: function(editor) {\n        var split = window.env.split;\n        var s = editor.session;\n        var inlineEditor = new Editor(new Renderer());\n        var splitSession = split.$cloneSession(s);\n\n        var row = editor.getCursorPosition().row;\n        if (editor.session.lineWidgets && editor.session.lineWidgets[row]) {\n            editor.session.lineWidgets[row].destroy();\n            return;\n        }\n        \n        var rowCount = 10;\n        var w = {\n            row: row, \n            fixedWidth: true,\n            el: dom.createElement(\"div\"),\n            editor: inlineEditor\n        };\n        var el = w.el;\n        el.appendChild(inlineEditor.container);\n\n        if (!editor.session.widgetManager) {\n            editor.session.widgetManager = new LineWidgets(editor.session);\n            editor.session.widgetManager.attach(editor);\n        }\n        \n        var h = rowCount*editor.renderer.layerConfig.lineHeight;\n        inlineEditor.container.style.height = h + \"px\";\n\n        el.style.position = \"absolute\";\n        el.style.zIndex = \"4\";\n        el.style.borderTop = \"solid blue 2px\";\n        el.style.borderBottom = \"solid blue 2px\";\n        \n        inlineEditor.setSession(splitSession);\n        editor.session.widgetManager.addLineWidget(w);\n        \n        var kb = {\n            handleKeyboard:function(_,hashId, keyString) {\n                if (hashId === 0 && keyString === \"esc\") {\n                    w.destroy();\n                    return true;\n                }\n            }\n        };\n        \n        w.destroy = function() {\n            editor.keyBinding.removeKeyboardHandler(kb);\n            s.widgetManager.removeLineWidget(w);\n        };\n        \n        editor.keyBinding.addKeyboardHandler(kb);\n        inlineEditor.keyBinding.addKeyboardHandler(kb);\n        inlineEditor.setTheme(\"ace/theme/solarized_light\");\n    }\n});\n});\n\ndefine(\"ace/test/asyncjs/assert\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module) {\nvar oop = require(\"ace/lib/oop\");\nvar pSlice = Array.prototype.slice;\n\nvar assert = exports;\n\nassert.AssertionError = function AssertionError(options) {\n  this.name = 'AssertionError';\n  this.message = options.message;\n  this.actual = options.actual;\n  this.expected = options.expected;\n  this.operator = options.operator;\n  var stackStartFunction = options.stackStartFunction || fail;\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, stackStartFunction);\n  }\n};\noop.inherits(assert.AssertionError, Error);\n\ntoJSON = function(obj) {\n    if (typeof JSON !== \"undefined\")\n        return JSON.stringify(obj);\n    else\n        return obj.toString();\n}\n\nassert.AssertionError.prototype.toString = function() {\n  if (this.message) {\n    return [this.name + ':', this.message].join(' ');\n  } else {\n    return [this.name + ':',\n            toJSON(this.expected),\n            this.operator,\n            toJSON(this.actual)].join(' ');\n  }\n};\n\nassert.AssertionError.__proto__ = Error.prototype;\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n  throw new assert.AssertionError({\n    message: message,\n    actual: actual,\n    expected: expected,\n    operator: operator,\n    stackStartFunction: stackStartFunction\n  });\n}\nassert.fail = fail;\n\nassert.ok = function ok(value, message) {\n  if (!!!value) fail(value, true, message, '==', assert.ok);\n};\n\nassert.equal = function equal(actual, expected, message) {\n  if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (actual == expected) {\n    fail(actual, expected, message, '!=', assert.notEqual);\n  }\n};\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (!_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n  }\n};\n\nfunction _deepEqual(actual, expected) {\n  if (actual === expected) {\n    return true;\n\n  } else if (typeof Buffer !== \"undefined\" && Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {\n    if (actual.length != expected.length) return false;\n\n    for (var i = 0; i < actual.length; i++) {\n      if (actual[i] !== expected[i]) return false;\n    }\n\n    return true;\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n  } else if (typeof actual != 'object' && typeof expected != 'object') {\n    return actual == expected;\n  } else {\n    return objEquiv(actual, expected);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isArguments(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  if (a.prototype !== b.prototype) return false;\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return _deepEqual(a, b);\n  }\n  try {\n    var ka = Object.keys(a),\n        kb = Object.keys(b),\n        key, i;\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  if (ka.length != kb.length)\n    return false;\n  ka.sort();\n  kb.sort();\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!_deepEqual(a[key], b[key])) return false;\n  }\n  return true;\n}\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n  }\n};\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (actual !== expected) {\n    fail(actual, expected, message, '===', assert.strictEqual);\n  }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (actual === expected) {\n    fail(actual, expected, message, '!==', assert.notStrictEqual);\n  }\n};\n\nfunction expectedException(actual, expected) {\n  if (!actual || !expected) {\n    return false;\n  }\n\n  if (expected instanceof RegExp) {\n    return expected.test(actual);\n  } else if (actual instanceof expected) {\n    return true;\n  } else if (expected.call({}, actual) === true) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n  var actual;\n\n  if (typeof expected === 'string') {\n    message = expected;\n    expected = null;\n  }\n\n  try {\n    block();\n  } catch (e) {\n    actual = e;\n  }\n\n  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n            (message ? ' ' + message : '.');\n\n  if (shouldThrow && !actual) {\n    fail('Missing expected exception' + message);\n  }\n\n  if (!shouldThrow && expectedException(actual, expected)) {\n    fail('Got unwanted exception' + message);\n  }\n\n  if ((shouldThrow && actual && expected &&\n      !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n    throw actual;\n  }\n}\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\n});\n\ndefine(\"ace/test/asyncjs/async\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nvar STOP = exports.STOP = {}\n\nexports.Generator = function(source) {\n    if (typeof source == \"function\")\n        this.source = {\n            next: source\n        }\n    else\n        this.source = source\n}\n\n;(function() {\n    this.next = function(callback) {\n        this.source.next(callback)\n    }\n\n    this.map = function(mapper) {\n        if (!mapper)\n            return this\n            \n        mapper = makeAsync(1, mapper)\n        \n        var source = this.source\n        this.next = function(callback) {\n            source.next(function(err, value) {\n                if (err)\n                    callback(err)\n                else {\n                    mapper(value, function(err, value) {\n                        if (err)\n                            callback(err)\n                        else\n                            callback(null, value)\n                    })\n                }\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.filter = function(filter) {\n        if (!filter)\n            return this\n            \n        filter = makeAsync(1, filter)\n        \n        var source = this.source\n        this.next = function(callback) {\n            source.next(function handler(err, value) {\n                if (err)\n                    callback(err)\n                else {\n                    filter(value, function(err, takeIt) {\n                        if (err)\n                            callback(err)\n                        else if (takeIt)\n                            callback(null, value)\n                        else\n                            source.next(handler)\n                    })\n                }\n            })\n        }\n        return new this.constructor(this)\n    }\n\n    this.slice = function(begin, end) {\n        var count = -1\n        if (!end || end < 0)\n            var end = Infinity\n        \n        var source = this.source\n        this.next = function(callback) {\n            source.next(function handler(err, value) {\n                count++\n                if (err)\n                    callback(err)\n                else if (count >= begin && count < end)\n                    callback(null, value)\n                else if (count >= end)\n                    callback(STOP)\n                else\n                    source.next(handler)\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.reduce = function(reduce, initialValue) {\n        reduce = makeAsync(3, reduce)\n\n        var index = 0\n        var done = false\n        var previousValue = initialValue\n        \n        var source = this.source\n        this.next = function(callback) {\n            if (done)\n                return callback(STOP)\n\n            if (initialValue === undefined) {\n                source.next(function(err, currentValue) {\n                    if (err)\n                        return callback(err, previousValue)\n                    \n                    previousValue = currentValue\n                    reduceAll()\n                })\n            }\n            else\n                reduceAll()\n\n            function reduceAll() {\n                source.next(function handler(err, currentValue) {                    \n                    if (err) {\n                        done = true\n                        if (err == STOP)                            \n                            return callback(null, previousValue)\n                        else\n                            return(err)\n                    }\n                    reduce(previousValue, currentValue, index++, function(err, value) {\n                        previousValue = value\n                        source.next(handler)\n                    })\n                })\n            }            \n        }\n        return new this.constructor(this)\n    }\n    \n    this.forEach =\n    this.each = function(fn) {\n        fn = makeAsync(1, fn)\n            \n        var source = this.source\n        this.next = function(callback) {\n            source.next(function handler(err, value) {\n                if (err) \n                    callback(err)\n                else {\n                    fn(value, function(err) {\n                        callback(err, value)\n                    })\n                }\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.some = function(condition) {\n        condition = makeAsync(1, condition)\n        \n        var source = this.source\n        var done = false\n        this.next = function(callback) {\n            if (done)\n                return callback(STOP)\n            \n            source.next(function handler(err, value) {\n                if (err)\n                    return callback(err)\n                    \n                condition(value, function(err, result) {\n                    if (err) {\n                        done = true\n                        if (err == STOP)\n                            callback(null, false)\n                        else\n                            callback(err)\n                    }                        \n                    else if (result) {\n                        done = true\n                        callback(null, true)\n                    }\n                    else \n                        source.next(handler)\n                })\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.every = function(condition) {\n        condition = makeAsync(1, condition)\n        \n        var source = this.source\n        var done = false\n        this.next = function(callback) {\n            if (done)\n                return callback(STOP)\n            \n            source.next(function handler(err, value) {\n                if (err)\n                    return callback(err)\n                    \n                condition(value, function(err, result) {\n                    if (err) {\n                        done = true\n                        if (err == STOP)\n                            callback(null, true)\n                        else\n                            callback(err)\n                    }                        \n                    else if (!result) {\n                        done = true\n                        callback(null, false)\n                    }\n                    else \n                        source.next(handler)\n                })\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.call = function(context) {\n        var source = this.source\n        return this.map(function(fn, next) {\n            fn = makeAsync(0, fn, context)\n            fn.call(context, function(err, value) {\n                next(err, value)\n            })\n        })\n    }\n    \n    this.concat = function(generator) {\n        var generators = [this]\n        generators.push.apply(generators, arguments)\n        var index = 0\n        var source = generators[index++]\n        \n        return new this.constructor(function(callback) {            \n            source.next(function handler(err, value) {\n                if (err) {\n                    if (err == STOP) {\n                        source = generators[index++]\n                        if (!source)\n                            return callback(STOP)\n                        else\n                            return source.next(handler)\n                    }\n                    else\n                        return callback(err)\n                }\n                else\n                    return callback(null, value)\n            })\n        })\n    }\n    \n    this.zip = function(generator) {\n        var generators = [this]\n        generators.push.apply(generators, arguments)\n        \n        return new this.constructor(function(callback) {\n            exports.list(generators)\n                .map(function(gen, next) {                    \n                    gen.next(next)\n                })\n                .toArray(callback)\n        })\n    }\n    \n    this.expand = function(inserter, constructor) {\n       if (!inserter)\n            return this\n            \n        var inserter = makeAsync(1, inserter)\n        var constructor = constructor || this.constructor\n        var source = this.source;\n        var spliced = null;\n        \n        return new constructor(function next(callback) {\n            if (!spliced) {\n                source.next(function(err, value) {\n                    if (err)\n                        return callback(err)\n                        \n                    inserter(value, function(err, toInsert) {\n                        if (err)\n                            return callback(err)\n                            \n                        spliced = toInsert                        \n                        next(callback)\n                    })\n\n                })\n            } \n            else {\n                spliced.next(function(err, value) {\n                    if (err == STOP) {\n                        spliced = null\n                        return next(callback)\n                    }\n                    else if (err)\n                        return callback(err)\n                    \n                    callback(err, value)\n                })\n            }\n        })\n    }\n\n    this.sort = function(compare) {\n        var self = this\n        var arrGen\n        this.next = function(callback) {\n            if (arrGen)\n                return arrGen.next(callback)\n\n            self.toArray(function(err, arr) {\n                if (err)\n                    callback(err)\n                else {\n                    arrGen = exports.list(arr.sort(compare))\n                    arrGen.next(callback)\n                }\n            })            \n        }\n        return new this.constructor(this)\n    }\n\n    this.join = function(separator) {\n        return this.$arrayOp(Array.prototype.join, separator !== undefined ? [separator] : null)\n    }\n    \n    this.reverse = function() {\n        return this.$arrayOp(Array.prototype.reverse)\n    }\n    \n    this.$arrayOp = function(arrayMethod, args) {\n        var self = this\n        var i = 0\n        this.next = function(callback) {\n            if (i++ > 0)\n                return callback(STOP)\n                \n            self.toArray(function(err, arr) {\n                if (err)\n                    callback(err, \"\")\n                else {\n                    if (args)\n                        callback(null, arrayMethod.apply(arr, args))\n                    else\n                        callback(null, arrayMethod.call(arr))\n                }\n            })\n        }\n        return new this.constructor(this)\n        \n    }\n    \n    this.end = function(breakOnError, callback) {\n        if (!callback) {\n            callback = arguments[0]\n            breakOnError = true\n        }\n\n        var source = this.source\n        var last\n        var lastError\n        source.next(function handler(err, value) {\n            if (err) {\n                if (err == STOP)\n                    callback && callback(lastError, last)\n                else if (!breakOnError) {\n                    lastError = err\n                    source.next(handler)\n                }\n                else\n                    callback && callback(err, value)\n            }\n            else  {\n                last = value\n                source.next(handler)\n            }\n        })\n    }\n\n    this.toArray = function(breakOnError, callback) {\n        if (!callback) {\n            callback = arguments[0]\n            breakOnError = true\n        }\n        \n        var values = []\n        var errors = []\n        var source = this.source\n        \n        source.next(function handler(err, value) {\n            if (err) {\n                if (err == STOP) {\n                    if (breakOnError)\n                        return callback(null, values)\n                    else {\n                        errors.length = values.length\n                        return callback(errors, values)\n                    }\n                }\n                else {\n                    if (breakOnError)\n                        return callback(err)\n                    else\n                        errors[values.length] = err\n                }\n            }\n\n            values.push(value)\n            source.next(handler)\n        })\n    }\n\n}).call(exports.Generator.prototype)\n\nvar makeAsync = exports.makeAsync = function(args, fn, context) {\n    if (fn.length > args) \n        return fn\n    else {\n        return function() {\n            var value\n            var next = arguments[args]\n            try {\n                value = fn.apply(context || this, arguments)\n            } catch(e) {\n                return next(e)\n            }\n            next(null, value)\n        }\n    }\n}\n\nexports.list = function(arr, construct) {\n    var construct = construct || exports.Generator\n    var i = 0\n    var len = arr.length\n    \n    return new construct(function(callback) {\n        if (i < len)\n            callback(null, arr[i++])\n        else\n            callback(STOP)\n    })\n}\n\nexports.values = function(map, construct) {\n    var values = []\n    for (var key in map) \n        values.push(map[key])\n        \n    return exports.list(values, construct)\n}\n\nexports.keys = function(map, construct) {\n    var keys = []\n    for (var key in map) \n        keys.push(key)\n        \n    return exports.list(keys, construct)\n} \nexports.range = function(start, stop, step, construct) {\n    var construct = construct || exports.Generator\n    start = start || 0\n    step = step || 1\n    \n    if (stop === undefined || stop === null)\n        stop = step > 0 ? Infinity : -Infinity\n        \n    var value = start\n    \n    return new construct(function(callback) {\n        if (step > 0 && value >= stop || step < 0 && value <= stop)\n            callback(STOP)\n        else {\n            var current = value\n            value += step\n            callback(null, current)\n        }\n    })\n}\n\nexports.concat = function(first, varargs) {\n    if (arguments.length > 1)\n        return first.concat.apply(first, Array.prototype.slice.call(arguments, 1))\n    else\n        return first\n}\n\nexports.zip = function(first, varargs) {\n    if (arguments.length > 1)\n        return first.zip.apply(first, Array.prototype.slice.call(arguments, 1))\n    else\n        return first.map(function(item, next) {\n            next(null, [item])\n        })\n}\n\n\nexports.plugin = function(members, constructors) {\n    if (members) {\n        for (var key in members) {\n            exports.Generator.prototype[key] = members[key]\n        }\n    }\n\n    if (constructors) {\n        for (var key in constructors) {\n            exports[key] = constructors[key]\n        }\n    }    \n}\n\n})\n\ndefine(\"ace/test/mockrenderer\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar MockRenderer = exports.MockRenderer = function(visibleRowCount) {\n    if (typeof document == \"object\") {\n        this.container = document.createElement(\"div\");\n        this.scroller = document.createElement(\"div\");\n    }\n    this.visibleRowCount = visibleRowCount || 20;\n\n    this.layerConfig = {\n        firstVisibleRow : 0,\n        lastVisibleRow : this.visibleRowCount\n    };\n\n    this.isMockRenderer = true;\n\n    this.$gutter = {};\n};\n\n\nMockRenderer.prototype.getFirstVisibleRow = function() {\n    return this.layerConfig.firstVisibleRow;\n};\n\nMockRenderer.prototype.getLastVisibleRow = function() {\n    return this.layerConfig.lastVisibleRow;\n};\n\nMockRenderer.prototype.getFirstFullyVisibleRow = function() {\n    return this.layerConfig.firstVisibleRow;\n};\n\nMockRenderer.prototype.getLastFullyVisibleRow = function() {\n    return this.layerConfig.lastVisibleRow;\n};\n\nMockRenderer.prototype.getContainerElement = function() {\n    return this.container;\n};\n\nMockRenderer.prototype.getMouseEventTarget = function() {\n    return this.container;\n};\n\nMockRenderer.prototype.getTextAreaContainer = function() {\n    return this.container;\n};\n\nMockRenderer.prototype.addGutterDecoration = function() {\n};\n\nMockRenderer.prototype.removeGutterDecoration = function() {\n};\n\nMockRenderer.prototype.moveTextAreaToCursor = function() {\n};\n\nMockRenderer.prototype.setSession = function(session) {\n    this.session = session;\n};\n\nMockRenderer.prototype.getSession = function(session) {\n    return this.session;\n};\n\nMockRenderer.prototype.setTokenizer = function() {\n};\n\nMockRenderer.prototype.on = function() {\n};\n\nMockRenderer.prototype.updateCursor = function() {\n};\n\nMockRenderer.prototype.animateScrolling = function(fromValue, callback) {\n    callback && callback();\n};\n\nMockRenderer.prototype.scrollToX = function(scrollTop) {};\nMockRenderer.prototype.scrollToY = function(scrollLeft) {};\n\nMockRenderer.prototype.scrollToLine = function(line, center) {\n    var lineHeight = 16;\n    var row = 0;\n    for (var l = 1; l < line; l++) {\n        row += this.session.getRowLength(l-1);\n    }\n\n    if (center) {\n        row -= this.visibleRowCount / 2;\n    }\n    this.scrollToRow(row);\n};\n\nMockRenderer.prototype.scrollSelectionIntoView = function() {\n};\n\nMockRenderer.prototype.scrollCursorIntoView = function() {\n    var cursor = this.session.getSelection().getCursor();\n    if (cursor.row < this.layerConfig.firstVisibleRow) {\n        this.scrollToRow(cursor.row);\n    }\n    else if (cursor.row > this.layerConfig.lastVisibleRow) {\n        this.scrollToRow(cursor.row);\n    }\n};\n\nMockRenderer.prototype.scrollToRow = function(row) {\n    var row = Math.min(this.session.getLength() - this.visibleRowCount, Math.max(0,\n                                                                          row));\n    this.layerConfig.firstVisibleRow = row;\n    this.layerConfig.lastVisibleRow = row + this.visibleRowCount;\n};\n\nMockRenderer.prototype.getScrollTopRow = function() {\n  return this.layerConfig.firstVisibleRow;\n};\n\nMockRenderer.prototype.draw = function() {\n};\n\nMockRenderer.prototype.onChangeTabSize = function(startRow, endRow) {\n};\n\nMockRenderer.prototype.updateLines = function(startRow, endRow) {\n};\n\nMockRenderer.prototype.updateBackMarkers = function() {\n};\n\nMockRenderer.prototype.updateFrontMarkers = function() {\n};\n\nMockRenderer.prototype.updateBreakpoints = function() {\n};\n\nMockRenderer.prototype.onResize = function() {\n};\n\nMockRenderer.prototype.updateFull = function() {\n};\n\nMockRenderer.prototype.updateText = function() {\n};\n\nMockRenderer.prototype.showCursor = function() {\n};\n\nMockRenderer.prototype.visualizeFocus = function() {\n};\n\nMockRenderer.prototype.setAnnotations = function() {\n};\n\nMockRenderer.prototype.setStyle = function() {\n};\n\nMockRenderer.prototype.unsetStyle = function() {\n};\n\nMockRenderer.prototype.textToScreenCoordinates = function() {\n    return {\n        pageX: 0,\n        pageY: 0\n    };\n};\n\nMockRenderer.prototype.screenToTextCoordinates = function() {\n    return {\n        row: 0,\n        column: 0\n    };\n};\n\nMockRenderer.prototype.adjustWrapLimit = function () {\n\n};\n\n});\n\ndefine(\"kitchen-sink/dev_util\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/edit_session\",\"ace/undomanager\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/test/asyncjs/assert\",\"ace/test/asyncjs/async\",\"ace/undomanager\",\"ace/edit_session\",\"ace/test/mockrenderer\",\"ace/lib/event_emitter\"], function(require, exports, module) {\nvar dom = require(\"ace/lib/dom\");\nvar event = require(\"ace/lib/event\");\nvar Range = require(\"ace/range\").Range;\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\nfunction warn() {\n    var s = (new Error()).stack || \"\";\n    s = s.split(\"\\n\");\n    if (s[1] == \"Error\") s.shift(); // remove error description on chrome\n    s.shift(); // remove warn\n    s.shift(); // remove the getter\n    s = s.join(\"\\n\");\n    if (!/at Object.InjectedScript.|@debugger eval|snippets:\\/{3}|<anonymous>:\\d+:\\d+/.test(s)) {\n        console.error(\"trying to access to global variable\");\n    }\n}\nfunction def(o, key, get) {\n    try {\n        Object.defineProperty(o, key, {\n            configurable: true, \n            get: get,\n            set: function(val) {\n                delete o[key];\n                o[key] = val;\n            }\n        });\n    } catch(e) {\n        console.error(e);\n    }\n}\ndef(window, \"ace\", function(){ warn(); return window.env.editor });\ndef(window, \"editor\", function(){ warn(); return window.env.editor == logEditor ? editor : window.env.editor });\ndef(window, \"session\", function(){ return window.editor.session });\ndef(window, \"split\", function(){ warn(); return window.env.split });\n\n\ndef(window, \"devUtil\", function(){ warn(); return exports });\nexports.showTextArea = function(argument) {\n    dom.importCssString(\"\\\n      .ace_text-input {\\\n        position: absolute;\\\n        z-index: 10!important;\\\n        width: 6em!important;\\\n        height: 1em;\\\n        opacity: 1!important;\\\n        background: rgba(0, 92, 255, 0.11);\\\n        border: none;\\\n        font: inherit;\\\n        padding: 0 1px;\\\n        margin: 0 -1px;\\\n        text-indent: 0em;\\\n    }\\\n    \");\n};\n\nexports.addGlobals = function() {\n    window.oop = require(\"ace/lib/oop\");\n    window.dom = require(\"ace/lib/dom\");\n    window.Range = require(\"ace/range\").Range;\n    window.Editor = require(\"ace/editor\").Editor;\n    window.assert = require(\"ace/test/asyncjs/assert\");\n    window.asyncjs = require(\"ace/test/asyncjs/async\");\n    window.UndoManager = require(\"ace/undomanager\").UndoManager;\n    window.EditSession = require(\"ace/edit_session\").EditSession;\n    window.MockRenderer = require(\"ace/test/mockrenderer\").MockRenderer;\n    window.EventEmitter = require(\"ace/lib/event_emitter\").EventEmitter;\n    \n    window.getSelection = getSelection;\n    window.setSelection = setSelection;\n    window.testSelection = testSelection;\n    window.setValue = setValue;\n    window.testValue = testValue;\n};\n\nfunction getSelection(editor) {\n    var data = editor.multiSelect.toJSON();\n    if (!data.length) data = [data];\n    data = data.map(function(x) {\n        var a, c;\n        if (x.isBackwards) {\n            a = x.end;\n            c = x.start;\n        } else {\n            c = x.end;\n            a = x.start;\n        }\n        return Range.comparePoints(a, c) \n            ? [a.row, a.column, c.row, c.column]\n            : [a.row, a.column];\n    });\n    return data.length > 1 ? data : data[0];\n}\nfunction setSelection(editor, data) {\n    if (typeof data[0] == \"number\")\n        data = [data];\n    editor.selection.fromJSON(data.map(function(x) {\n        var start = {row: x[0], column: x[1]};\n        var end = x.length == 2 ? start : {row: x[2], column: x[3]};\n        var isBackwards = Range.comparePoints(start, end) > 0;\n        return isBackwards ? {\n            start: end,\n            end: start,\n            isBackwards: true\n        } : {\n            start: start,\n            end: end,\n            isBackwards: true\n        };\n    }));\n}\nfunction testSelection(editor, data) {\n    assert.equal(getSelection(editor) + \"\", data + \"\");\n}\nfunction setValue(editor, value) {\n    editor.setValue(value, 1);\n}\nfunction testValue(editor, value) {\n    assert.equal(editor.getValue(), value);\n}\n\n \nvar editor;\nvar logEditor;\nvar logSession\nexports.openLogView = function() {\n    exports.addGlobals();\n    var sp = window.env.split;\n    sp.setSplits(1);\n    sp.setSplits(2);\n    sp.setOrientation(sp.BESIDE);\n    editor = sp.$editors[0];\n    logEditor = sp.$editors[1];\n    \n    if (!logSession) {\n        logSession = new EditSession(localStorage.lastTestCase || \"\", \"ace/mode/javascript\");\n        logSession.setUndoManager(new UndoManager)\n    }\n    logEditor.setSession(logSession);\n    logEditor.session.foldAll();\n    logEditor.on(\"input\", save);\n}\nexports.record = function() {\n    exports.addGlobals();\n    exports.openLogView();\n    \n    logEditor.setValue(\"var Range = require(\\\"ace/range\\\").Range;\\n\"\n        + getSelection + \"\\n\"\n        + testSelection + \"\\n\"\n        + setSelection + \"\\n\"\n        + testValue + \"\\n\"\n        + setValue + \"\\n\"\n        + \"\\n//-------------------------------------\\n\", 1);\n    logEditor.session.foldAll();\n\n    addAction({\n        type: \"setValue\",\n        data: editor.getValue()\n    });\n    addAction({\n        type: \"setSelection\",\n        data: getSelection(editor)\n    });\n    editor.commands.on(\"afterExec\", onAfterExec);\n    editor.on(\"mouseup\", onMouseUp);\n    editor.selection.on(\"beforeEndOperation\", onBeforeEndOperation);\n    editor.session.on(\"change\", reportChange);\n    editor.selection.on(\"changeCursor\", reportCursorChange);\n    editor.selection.on(\"changeSelection\", reportSelectionChange);\n}\n\nexports.stop = function() {\n    save();\n    editor.commands.off(\"afterExec\", onAfterExec);\n    editor.off(\"mouseup\", onMouseUp);\n    editor.off(\"beforeEndOperation\", onBeforeEndOperation);\n    editor.session.off(\"change\", reportChange);\n    editor.selection.off(\"changeCursor\", reportCursorChange);\n    editor.selection.off(\"changeSelection\", reportSelectionChange);\n    logEditor.off(\"input\", save);\n}\nexports.closeLogView = function() {\n    exports.stop(); \n    var sp = window.env.split;\n    sp.setSplits(1);\n}\n\nexports.play = function() {\n    exports.openLogView();\n    exports.stop();\n    var code = logEditor ? logEditor.getValue() : localStorage.lastTestCase;\n    var fn = new Function(\"editor\", \"debugger;\\n\" + code);\n    fn(editor);\n}\nvar reportChange = reportEvent.bind(null, \"change\");\nvar reportCursorChange = reportEvent.bind(null, \"CursorChange\");\nvar reportSelectionChange = reportEvent.bind(null, \"SelectionChange\");\n\nfunction save() {\n    localStorage.lastTestCase = logEditor.getValue();\n}\n\nfunction reportEvent(name) {\n    addAction({\n        type: \"event\",\n        source: name\n    });\n} \nfunction onSelection() {\n    addAction({\n        type: \"event\",\n        data: \"change\",\n        source: \"operationEnd\"\n    });\n} \nfunction onBeforeEndOperation() {\n    addAction({\n        type: \"setSelection\",\n        data: getSelection(editor),\n        source: \"operationEnd\"\n    });\n} \nfunction onMouseUp() {\n    addAction({\n        type: \"setSelection\",\n        data: getSelection(editor),\n        source: \"mouseup\"\n    });\n}\nfunction onAfterExec(e) {\n    addAction({\n        type: \"exec\",\n        data: e\n    });\n    addAction({\n        type: \"value\",\n        data: editor.getValue()\n    });\n    addAction({\n        type: \"selection\",\n        data: getSelection(editor)\n    });\n}\n\nfunction addAction(a) {\n    var str = toString(a);\n    if (str) {\n        logEditor.insert(str + \"\\n\");\n        logEditor.renderer.scrollCursorIntoView();\n    }\n}\n\nvar lastValue = \"\";\nfunction toString(x) {\n    var str = \"\";\n    var data = x.data;\n    switch (x.type) {\n        case \"exec\": \n            str = 'editor.execCommand(\"' \n                + data.command.name\n                + (data.args ? '\", ' + JSON.stringify(data.args) : '\"')\n            + ')';\n            break;\n        case \"setSelection\":\n            str = 'setSelection(editor, ' + JSON.stringify(data)  + ')';\n            break;\n        case \"setValue\":\n            if (lastValue != data) {\n                lastValue = data;\n                str = 'editor.setValue(' + JSON.stringify(data) + ', -1)';\n            }\n            else {\n                return;\n            }\n            break;\n        case \"selection\":\n            str = 'testSelection(editor, ' + JSON.stringify(data) + ')';\n            break;\n        case \"value\":\n            if (lastValue != data) {\n                lastValue = data;\n                str = 'testValue(editor, ' + JSON.stringify(data) + ')';\n            }\n            else  {\n                return;\n            }\n            break;\n    }\n    return str + (x.source ? \" // \" + x.source : \"\");\n}\n\nexports.getUI = function(container) {\n    return [\"div\", {},\n        \" Test \", \n        [\"button\", {onclick: exports.openLogView}, \"O\"],\n        [\"button\", {onclick: exports.record}, \"Record\"],\n        [\"button\", {onclick: exports.stop}, \"Stop\"],\n        [\"button\", {onclick: exports.play}, \"Play\"],\n        [\"button\", {onclick: exports.closeLogView}, \"X\"],\n    ];\n};\n\n\nvar ignoreEvents = false;\nexports.textInputDebugger = {\n    position: 2000,\n    onchange: function(value) {\n        var sp = env.split;\n        if (sp.getSplits() == 2) {\n            sp.setSplits(1);\n        }\n        if (env.textarea) {\n            if (env.textarea.detach)\n                env.textarea.detach();\n            env.textarea.oldParent.appendChild(env.textarea);\n            env.textarea.className = env.textarea.oldClassName;\n            env.textarea = null;\n        }\n        if (value) {\n            this.showConsole();\n        }\n    },\n    showConsole: function() {\n        var sp = env.split;\n        sp.setSplits(2);\n        sp.setOrientation(sp.BELOW);\n        \n        var editor = sp.$editors[0];\n        var text = editor.textInput.getElement();\n        text.oldParent = text.parentNode;\n        text.oldClassName = text.className;\n        text.className = \"text-input-debug\";\n        document.body.appendChild(text);\n        env.textarea = text;\n        \n        var addToLog = function(e) {\n            if (ignoreEvents) return;\n            var data = {\n                _: e.type, \n                range: [text.selectionStart, text.selectionEnd], \n                value: text.value, \n                key: e.key && {\n                    code: e.code,\n                    key: e.key, \n                    keyCode: e.keyCode\n                },\n                modifier: event.getModifierString(e) || undefined\n            };\n            log.navigateFileEnd();\n            var str = JSON.stringify(data).replace(/\"(\\w+)\":/g, \" $1: \");\n            log.insert(str + \",\\n\");\n            log.renderer.scrollCursorIntoView();\n        };\n        var events = [\"select\", \"input\", \"keypress\", \"keydown\", \"keyup\", \n            \"compositionstart\", \"compositionupdate\", \"compositionend\", \"cut\", \"copy\", \"paste\"\n        ];\n        events.forEach(function(name) {\n            text.addEventListener(name, addToLog, true);\n        });\n        function onMousedown(ev) {\n            if (ev.domEvent.target == text)\n                ev.$pos = editor.getCursorPosition();\n        }\n        text.detach = function() {\n            delete text.value;\n            delete text.setSelectionRange;\n            \n            events.forEach(function(name) {\n                text.removeEventListener(name, addToLog, true);\n            });\n            editor.off(\"mousedown\", onMousedown);\n        };\n        editor.on(\"mousedown\", onMousedown);\n        \n        text.__defineSetter__(\"value\", function(v) {\n            this.__proto__.__lookupSetter__(\"value\").call(this, v); \n            console.log(v);\n        });\n        text.__defineGetter__(\"value\", function(v) {\n            var v = this.__proto__.__lookupGetter__(\"value\").call(this); \n            return v;\n        });\n        text.setSelectionRange = function(start, end) {\n            ignoreEvents = true;\n            this.__proto__.setSelectionRange.call(this, start, end)\n            ignoreEvents = false;\n        }\n        \n        var log = sp.$editors[1];\n        if (!this.session)\n            this.session = new EditSession(\"\");\n        log.setSession(this.session);\n        editor.focus();\n    },\n    getValue: function() {\n        return !!env.textarea;\n    }\n}\n\n});\n\ndefine(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\n\nvar Mode = function(name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function(a, b){\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    } else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n\n    this.extRe = new RegExp(re, \"gi\");\n};\n\nMode.prototype.supportsFile = function(filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP:        [\"abap\"],\n    ABC:         [\"abc\"],\n    ActionScript:[\"as\"],\n    ADA:         [\"ada|adb\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    AsciiDoc:    [\"asciidoc|adoc\"],\n    ASL:         [\"dsl|asl\"],\n    Assembly_x86:[\"asm|a\"],\n    AutoHotKey:  [\"ahk\"],\n    Apex:        [\"apex|cls|trigger|tgr\"],\n    BatchFile:   [\"bat|cmd\"],\n    Bro:         [\"bro\"],\n    C_Cpp:       [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search:    [\"c9search_results\"],\n    Cirru:       [\"cirru|cr\"],\n    Clojure:     [\"clj|cljs\"],\n    Cobol:       [\"CBL|COB\"],\n    coffee:      [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion:  [\"cfm\"],\n    CSharp:      [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS:         [\"css\"],\n    Curly:       [\"curly\"],\n    D:           [\"d|di\"],\n    Dart:        [\"dart\"],\n    Diff:        [\"diff|patch\"],\n    Dockerfile:  [\"^Dockerfile\"],\n    Dot:         [\"dot\"],\n    Drools:      [\"drl\"],\n    Edifact:     [\"edi\"],\n    Eiffel:      [\"e|ge\"],\n    EJS:         [\"ejs\"],\n    Elixir:      [\"ex|exs\"],\n    Elm:         [\"elm\"],\n    Erlang:      [\"erl|hrl\"],\n    Forth:       [\"frt|fs|ldr|fth|4th\"],\n    Fortran:     [\"f|f90\"],\n    FSharp:      [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL:         [\"fsl\"],\n    FTL:         [\"ftl\"],\n    Gcode:       [\"gcode\"],\n    Gherkin:     [\"feature\"],\n    Gitignore:   [\"^.gitignore\"],\n    Glsl:        [\"glsl|frag|vert\"],\n    Gobstones:   [\"gbs\"],\n    golang:      [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy:      [\"groovy\"],\n    HAML:        [\"haml\"],\n    Handlebars:  [\"hbs|handlebars|tpl|mustache\"],\n    Haskell:     [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe:        [\"hx\"],\n    Hjson:       [\"hjson\"],\n    HTML:        [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby:   [\"erb|rhtml|html.erb\"],\n    INI:         [\"ini|conf|cfg|prefs\"],\n    Io:          [\"io\"],\n    Jack:        [\"jack\"],\n    Jade:        [\"jade|pug\"],\n    Java:        [\"java\"],\n    JavaScript:  [\"js|jsm|jsx\"],\n    JSON:        [\"json\"],\n    JSONiq:      [\"jq\"],\n    JSP:         [\"jsp\"],\n    JSSM:        [\"jssm|jssm_state\"],\n    JSX:         [\"jsx\"],\n    Julia:       [\"jl\"],\n    Kotlin:      [\"kt|kts\"],\n    LaTeX:       [\"tex|latex|ltx|bib\"],\n    LESS:        [\"less\"],\n    Liquid:      [\"liquid\"],\n    Lisp:        [\"lisp\"],\n    LiveScript:  [\"ls\"],\n    LogiQL:      [\"logic|lql\"],\n    LSL:         [\"lsl\"],\n    Lua:         [\"lua\"],\n    LuaPage:     [\"lp\"],\n    Lucene:      [\"lucene\"],\n    Makefile:    [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown:    [\"md|markdown\"],\n    Mask:        [\"mask\"],\n    MATLAB:      [\"matlab\"],\n    Maze:        [\"mz\"],\n    MEL:         [\"mel\"],\n    MIXAL:       [\"mixal\"],\n    MUSHCode:    [\"mc|mush\"],\n    MySQL:       [\"mysql\"],\n    Nix:         [\"nix\"],\n    NSIS:        [\"nsi|nsh\"],\n    ObjectiveC:  [\"m|mm\"],\n    OCaml:       [\"ml|mli\"],\n    Pascal:      [\"pas|p\"],\n    Perl:        [\"pl|pm\"],\n    Perl6:       [\"p6|pl6|pm6\"],\n    pgSQL:       [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP:         [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Puppet:      [\"epp|pp\"],\n    Pig:         [\"pig\"],\n    Powershell:  [\"ps1\"],\n    Praat:       [\"praat|praatscript|psc|proc\"],\n    Prolog:      [\"plg|prolog\"],\n    Properties:  [\"properties\"],\n    Protobuf:    [\"proto\"],\n    Python:      [\"py\"],\n    R:           [\"r\"],\n    Razor:       [\"cshtml|asp\"],\n    RDoc:        [\"Rd\"],\n    Red:         [\"red|reds\"],\n    RHTML:       [\"Rhtml\"],\n    RST:         [\"rst\"],\n    Ruby:        [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust:        [\"rs\"],\n    SASS:        [\"sass\"],\n    SCAD:        [\"scad\"],\n    Scala:       [\"scala\"],\n    Scheme:      [\"scm|sm|rkt|oak|scheme\"],\n    SCSS:        [\"scss\"],\n    SH:          [\"sh|bash|^.bashrc\"],\n    SJS:         [\"sjs\"],\n    Slim:        [\"slim|skim\"],\n    Smarty:      [\"smarty|tpl\"],\n    snippets:    [\"snippets\"],\n    Soy_Template:[\"soy\"],\n    Space:       [\"space\"],\n    SQL:         [\"sql\"],\n    SQLServer:   [\"sqlserver\"],\n    Stylus:      [\"styl|stylus\"],\n    SVG:         [\"svg\"],\n    Swift:       [\"swift\"],\n    Tcl:         [\"tcl\"],\n    Terraform:   [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex:         [\"tex\"],\n    Text:        [\"txt\"],\n    Textile:     [\"textile\"],\n    Toml:        [\"toml\"],\n    TSX:         [\"tsx\"],\n    Twig:        [\"latte|twig|swig\"],\n    Typescript:  [\"ts|typescript|str\"],\n    Vala:        [\"vala\"],\n    VBScript:    [\"vbs|vb\"],\n    Velocity:    [\"vm\"],\n    Verilog:     [\"v|vh|sv|svh\"],\n    VHDL:        [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok:      [\"wlk|wpgm|wtest\"],\n    XML:         [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery:      [\"xq\"],\n    YAML:        [\"yaml|yml\"],\n    Django:      [\"html\"]\n};\n\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\n\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n\ndefine(\"kitchen-sink/file_drop\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/event\",\"ace/ext/modelist\",\"ace/editor\"], function(require, exports, module) {\n\nvar config = require(\"ace/config\");\nvar event = require(\"ace/lib/event\");\nvar modelist = require(\"ace/ext/modelist\");\n\nmodule.exports = function(editor) {\n    event.addListener(editor.container, \"dragover\", function(e) {\n        var types = e.dataTransfer.types;\n        if (types && Array.prototype.indexOf.call(types, 'Files') !== -1)\n            return event.preventDefault(e);\n    });\n\n    event.addListener(editor.container, \"drop\", function(e) {\n        var file;\n        try {\n            file = e.dataTransfer.files[0];\n            if (window.FileReader) {\n                var reader = new FileReader();\n                reader.onload = function() {\n                    var mode = modelist.getModeForPath(file.name);\n                    editor.session.doc.setValue(reader.result);\n                    editor.session.setMode(mode.mode);\n                    editor.session.modeName = mode.name;\n                };\n                reader.readAsText(file);\n            }\n            return event.preventDefault(e);\n        } catch(err) {\n            return event.stopEvent(e);\n        }\n    });\n};\n\nvar Editor = require(\"ace/editor\").Editor;\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    loadDroppedFile: {\n        set: function() { module.exports(this); },\n        value: true\n    }\n});\n\n});\n\ndefine(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\ndefine(\"ace/ext/whitespace\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nexports.$detectIndentation = function(lines, fallback) {\n    var stats = [];\n    var changes = [];\n    var tabIndents = 0;\n    var prevSpaces = 0;\n    var max = Math.min(lines.length, 1000);\n    for (var i = 0; i < max; i++) {\n        var line = lines[i];\n        if (!/^\\s*[^*+\\-\\s]/.test(line))\n            continue;\n\n        if (line[0] == \"\\t\") {\n            tabIndents++;\n            prevSpaces = -Number.MAX_VALUE;\n        } else {\n            var spaces = line.match(/^ */)[0].length;\n            if (spaces && line[spaces] != \"\\t\") {\n                var diff = spaces - prevSpaces;\n                if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff))\n                    changes[diff] = (changes[diff] || 0) + 1;\n    \n                stats[spaces] = (stats[spaces] || 0) + 1;\n            }\n            prevSpaces = spaces;\n        }\n        while (i < max && line[line.length - 1] == \"\\\\\")\n            line = lines[i++];\n    }\n    \n    function getScore(indent) {\n        var score = 0;\n        for (var i = indent; i < stats.length; i += indent)\n            score += stats[i] || 0;\n        return score;\n    }\n\n    var changesTotal = changes.reduce(function(a,b){return a+b;}, 0);\n\n    var first = {score: 0, length: 0};\n    var spaceIndents = 0;\n    for (var i = 1; i < 12; i++) {\n        var score = getScore(i);\n        if (i == 1) {\n            spaceIndents = score;\n            score = stats[1] ? 0.9 : 0.8;\n            if (!stats.length)\n                score = 0;\n        } else\n            score /= spaceIndents;\n\n        if (changes[i])\n            score += changes[i] / changesTotal;\n\n        if (score > first.score)\n            first = {score: score, length: i};\n    }\n\n    if (first.score && first.score > 1.4)\n        var tabLength = first.length;\n\n    if (tabIndents > spaceIndents + 1) {\n        if (tabLength == 1 || spaceIndents < tabIndents / 4 || first.score < 1.8)\n            tabLength = undefined;\n        return {ch: \"\\t\", length: tabLength};\n    }\n    if (spaceIndents > tabIndents + 1)\n        return {ch: \" \", length: tabLength};\n};\n\nexports.detectIndentation = function(session) {\n    var lines = session.getLines(0, 1000);\n    var indent = exports.$detectIndentation(lines) || {};\n\n    if (indent.ch)\n        session.setUseSoftTabs(indent.ch == \" \");\n\n    if (indent.length)\n        session.setTabSize(indent.length);\n    return indent;\n};\nexports.trimTrailingSpace = function(session, options) {\n    var doc = session.getDocument();\n    var lines = doc.getAllLines();\n    \n    var min = options && options.trimEmpty ? -1 : 0;\n    var cursors = [], ci = -1;\n    if (options && options.keepCursorPosition) {\n        if (session.selection.rangeCount) {\n            session.selection.rangeList.ranges.forEach(function(x, i, ranges) {\n               var next = ranges[i + 1];\n               if (next && next.cursor.row == x.cursor.row)\n                  return;\n              cursors.push(x.cursor);\n            });\n        } else {\n            cursors.push(session.selection.getCursor());\n        }\n        ci = 0;\n    }\n    var cursorRow = cursors[ci] && cursors[ci].row;\n\n    for (var i = 0, l=lines.length; i < l; i++) {\n        var line = lines[i];\n        var index = line.search(/\\s+$/);\n\n        if (i == cursorRow) {\n            if (index < cursors[ci].column && index > min)\n               index = cursors[ci].column;\n            ci++;\n            cursorRow = cursors[ci] ? cursors[ci].row : -1;\n        }\n\n        if (index > min)\n            doc.removeInLine(i, index, line.length);\n    }\n};\n\nexports.convertIndentation = function(session, ch, len) {\n    var oldCh = session.getTabString()[0];\n    var oldLen = session.getTabSize();\n    if (!len) len = oldLen;\n    if (!ch) ch = oldCh;\n\n    var tab = ch == \"\\t\" ? ch: lang.stringRepeat(ch, len);\n\n    var doc = session.doc;\n    var lines = doc.getAllLines();\n\n    var cache = {};\n    var spaceCache = {};\n    for (var i = 0, l=lines.length; i < l; i++) {\n        var line = lines[i];\n        var match = line.match(/^\\s*/)[0];\n        if (match) {\n            var w = session.$getStringScreenWidth(match)[0];\n            var tabCount = Math.floor(w/oldLen);\n            var reminder = w%oldLen;\n            var toInsert = cache[tabCount] || (cache[tabCount] = lang.stringRepeat(tab, tabCount));\n            toInsert += spaceCache[reminder] || (spaceCache[reminder] = lang.stringRepeat(\" \", reminder));\n\n            if (toInsert != match) {\n                doc.removeInLine(i, 0, match.length);\n                doc.insertInLine({row: i, column: 0}, toInsert);\n            }\n        }\n    }\n    session.setTabSize(len);\n    session.setUseSoftTabs(ch == \" \");\n};\n\nexports.$parseStringArg = function(text) {\n    var indent = {};\n    if (/t/.test(text))\n        indent.ch = \"\\t\";\n    else if (/s/.test(text))\n        indent.ch = \" \";\n    var m = text.match(/\\d+/);\n    if (m)\n        indent.length = parseInt(m[0], 10);\n    return indent;\n};\n\nexports.$parseArg = function(arg) {\n    if (!arg)\n        return {};\n    if (typeof arg == \"string\")\n        return exports.$parseStringArg(arg);\n    if (typeof arg.text == \"string\")\n        return exports.$parseStringArg(arg.text);\n    return arg;\n};\n\nexports.commands = [{\n    name: \"detectIndentation\",\n    exec: function(editor) {\n        exports.detectIndentation(editor.session);\n    }\n}, {\n    name: \"trimTrailingSpace\",\n    exec: function(editor, args) {\n        exports.trimTrailingSpace(editor.session, args);\n    }\n}, {\n    name: \"convertIndentation\",\n    exec: function(editor, arg) {\n        var indent = exports.$parseArg(arg);\n        exports.convertIndentation(editor.session, indent.ch, indent.length);\n    }\n}, {\n    name: \"setIndentation\",\n    exec: function(editor, arg) {\n        var indent = exports.$parseArg(arg);\n        indent.length && editor.session.setTabSize(indent.length);\n        indent.ch && editor.session.setUseSoftTabs(indent.ch == \" \");\n    }\n}];\n\n});\n\ndefine(\"kitchen-sink/doclist\",[\"require\",\"exports\",\"module\",\"ace/edit_session\",\"ace/undomanager\",\"ace/lib/net\",\"ace/ext/modelist\"], function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\nvar net = require(\"ace/lib/net\");\n\nvar modelist = require(\"ace/ext/modelist\");\nvar fileCache = {};\n\nfunction initDoc(file, path, doc) {\n    if (doc.prepare)\n        file = doc.prepare(file);\n\n    var session = new EditSession(file);\n    session.setUndoManager(new UndoManager());\n    doc.session = session;\n    doc.path = path;\n    session.name = doc.name;\n    if (doc.wrapped) {\n        session.setUseWrapMode(true);\n        session.setWrapLimitRange(80, 80);\n    }\n    var mode = modelist.getModeForPath(path);\n    session.modeName = mode.name;\n    session.setMode(mode.mode);\n    return session;\n}\n\n\nfunction makeHuge(txt) {\n    for (var i = 0; i < 5; i++)\n        txt += txt;\n    return txt;\n}\n\nvar docs = {\n    \"docs/javascript.js\": {order: 1, name: \"JavaScript\"},\n\n    \"docs/latex.tex\": {name: \"LaTeX\", wrapped: true},\n    \"docs/markdown.md\": {name: \"Markdown\", wrapped: true},\n    \"docs/mushcode.mc\": {name: \"MUSHCode\", wrapped: true},\n    \"docs/pgsql.pgsql\": {name: \"pgSQL\", wrapped: true},\n    \"docs/plaintext.txt\": {name: \"Plain Text\", prepare: makeHuge, wrapped: true},\n    \"docs/sql.sql\": {name: \"SQL\", wrapped: true},\n\n    \"docs/textile.textile\": {name: \"Textile\", wrapped: true},\n\n    \"docs/c9search.c9search_results\": \"C9 Search Results\",\n    \"docs/mel.mel\": \"MEL\",\n    \"docs/Nix.nix\": \"Nix\"\n};\n\nvar ownSource = {\n};\n\nvar hugeDocs = require.toUrl ? {\n    \"build/src/ace.js\": \"\",\n    \"build/src-min/ace.js\": \"\"\n} : {\n    \"src/ace.js\": \"\",\n    \"src-min/ace.js\": \"\"\n};\n\nmodelist.modes.forEach(function(m) {\n    var ext = m.extensions.split(\"|\")[0];\n    if (ext[0] === \"^\") {\n        path = ext.substr(1);\n    } else {\n        var path = m.name + \".\" + ext;\n    }\n    path = \"docs/\" + path;\n    if (!docs[path]) {\n        docs[path] = {name: m.caption};\n    } else if (typeof docs[path] == \"object\" && !docs[path].name) {\n        docs[path].name = m.caption;\n    }\n});\n\n\n\nif (window.require && window.require.s) try {\n    for (var path in window.require.s.contexts._.defined) {\n        if (path.indexOf(\"!\") != -1)\n            path = path.split(\"!\").pop();\n        else\n            path = path + \".js\";\n        ownSource[path] = \"\";\n    }\n} catch(e) {}\n\nfunction sort(list) {\n    return list.sort(function(a, b) {\n        var cmp = (b.order || 0) - (a.order || 0);\n        return cmp || a.name && a.name.localeCompare(b.name);\n    });\n}\n\nfunction prepareDocList(docs) {\n    var list = [];\n    for (var path in docs) {\n        var doc = docs[path];\n        if (typeof doc != \"object\")\n            doc = {name: doc || path};\n\n        doc.path = path;\n        doc.desc = doc.name.replace(/^(ace|docs|demo|build)\\//, \"\");\n        if (doc.desc.length > 18)\n            doc.desc = doc.desc.slice(0, 7) + \"..\" + doc.desc.slice(-9);\n\n        fileCache[doc.name.toLowerCase()] = doc;\n        list.push(doc);\n    }\n\n    return list;\n}\n\nfunction loadDoc(name, callback) {\n    var doc = fileCache[name.toLowerCase()];\n    if (!doc)\n        return callback(null);\n\n    if (doc.session)\n        return callback(doc.session);\n    var path = doc.path;\n    var parts = path.split(\"/\");\n    if (parts[0] == \"docs\")\n        path = \"demo/kitchen-sink/\" + path;\n    else if (parts[0] == \"ace\")\n        path = \"lib/\" + path;\n\n    net.get(path, function(x) {\n        initDoc(x, path, doc);\n        callback(doc.session);\n    });\n}\n\nfunction saveDoc(name, callback) {\n    var doc = fileCache[name.toLowerCase()] || name;\n    if (!doc || !doc.session)\n        return callback(\"Unknown document: \" + name);\n\n    var path = doc.path;\n    var parts = path.split(\"/\");\n    if (parts[0] == \"docs\")\n        path = \"demo/kitchen-sink/\" + path;\n    else if (parts[0] == \"ace\")\n        path = \"lib/\" + path;\n\n    upload(path, doc.session.getValue(), callback);\n}\n\nfunction upload(url, data, callback) {\n    var absUrl = net.qualifyURL(url);\n    if (/^file:/.test(absUrl))\n        absUrl = \"http://localhost:8888/\" + url;\n    url = absUrl;\n    if (!/^https?:/.test(url))\n        return callback(new Error(\"Unsupported url scheme\"));\n    var xhr = new XMLHttpRequest();\n    xhr.open(\"PUT\", url, true);\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(!/^2../.test(xhr.status));\n        }\n    };\n    xhr.send(data);\n}\n\nmodule.exports = {\n    fileCache: fileCache,\n    docs: sort(prepareDocList(docs)),\n    ownSource: prepareDocList(ownSource),\n    hugeDocs: prepareDocList(hugeDocs),\n    initDoc: initDoc,\n    loadDoc: loadDoc,\n    saveDoc: saveDoc\n};\nmodule.exports.all = {\n    \"Mode Examples\": module.exports.docs,\n    \"Huge documents\": module.exports.hugeDocs,\n    \"own source\": module.exports.ownSource\n};\n\n});\n\ndefine(\"kitchen-sink/layout\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/multi_select\",\"ace/theme/textmate\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"ace/lib/dom\");\nvar event = require(\"ace/lib/event\");\n\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\nvar Renderer = require(\"ace/virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"ace/editor\").Editor;\nvar MultiSelect = require(\"ace/multi_select\").MultiSelect;\n\ndom.importCssString(\"\\\nsplitter {\\\n    border: 1px solid #C6C6D2;\\\n    width: 0px;\\\n    cursor: ew-resize;\\\n    z-index:10}\\\nsplitter:hover {\\\n    margin-left: -2px;\\\n    width:3px;\\\n    border-color: #B5B4E0;\\\n}\\\n\", \"splitEditor\");\n\nexports.edit = function(el) {\n    if (typeof(el) == \"string\")\n        el = document.getElementById(el);\n\n    var editor = new Editor(new Renderer(el, require(\"ace/theme/textmate\")));\n\n    editor.resize();\n    event.addListener(window, \"resize\", function() {\n        editor.resize();\n    });\n    return editor;\n};\n\n\nvar SplitRoot = function(el, theme, position, getSize) {\n    el.style.position = position || \"relative\";\n    this.container = el;\n    this.getSize = getSize || this.getSize;\n    this.resize = this.$resize.bind(this);\n\n    event.addListener(el.ownerDocument.defaultView, \"resize\", this.resize);\n    this.editor = this.createEditor();\n};\n\n(function(){\n    this.createEditor = function() {\n        var el = document.createElement(\"div\");\n        el.className = this.$editorCSS;\n        el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n        this.$container.appendChild(el);\n        var session = new EditSession(\"\");\n        var editor = new Editor(new Renderer(el, this.$theme));\n\n        this.$editors.push(editor);\n        editor.setFontSize(this.$fontSize);\n        return editor;\n    };\n    this.$resize = function() {\n        var size = this.getSize(this.container);\n        this.rect = {\n            x: size.left,\n            y: size.top,\n            w: size.width,\n            h: size.height\n        };\n        this.item.resize(this.rect);\n    };\n    this.getSize = function(el) {\n        return el.getBoundingClientRect();\n    };\n    this.destroy = function() {\n        var win = this.container.ownerDocument.defaultView;\n        event.removeListener(win, \"resize\", this.resize);\n    };\n\n\n}).call(SplitRoot.prototype);\n\n\n\nvar Split = function(){\n\n};\n(function(){\n    this.execute = function(options) {\n        this.$u.execute(options);\n    };\n\n}).call(Split.prototype);\n\n\n\nexports.singleLineEditor = function(el) {\n    var renderer = new Renderer(el);\n    el.style.overflow = \"hidden\";\n\n    renderer.screenToTextCoordinates = function(x, y) {\n        var pos = this.pixelToScreenCoordinates(x, y);\n        return this.session.screenToDocumentPosition(\n            Math.min(this.session.getScreenLength() - 1, Math.max(pos.row, 0)),\n            Math.max(pos.column, 0)\n        );\n    };\n\n    renderer.$maxLines = 4;\n\n    renderer.setStyle(\"ace_one-line\");\n    var editor = new Editor(renderer);\n    editor.session.setUndoManager(new UndoManager());\n\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n    editor.$mouseHandler.$focusWaitTimout = 0;\n\n    return editor;\n};\n\n\n\n});\n\ndefine(\"kitchen-sink/util\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/multi_select\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"ace/lib/dom\");\nvar event = require(\"ace/lib/event\");\n\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\nvar Renderer = require(\"ace/virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"ace/editor\").Editor;\nvar MultiSelect = require(\"ace/multi_select\").MultiSelect;\n\nvar urlOptions = {}\ntry {\n    window.location.search.slice(1).split(/[&]/).forEach(function(e) {\n        var parts = e.split(\"=\");\n        urlOptions[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);\n    });\n} catch(e) {\n    console.error(e);\n}\nexports.createEditor = function(el) {\n    return new Editor(new Renderer(el));\n};\n\nexports.getOption = function(name) {\n    if (urlOptions[name])\n        return urlOptions[name];\n    return localStorage && localStorage.getItem(name);\n};\n\nexports.saveOption = function(name, value) {\n    if (value == false)\n        value = \"\";\n    localStorage && localStorage.setItem(name, value);\n};\n\nexports.createSplitEditor = function(el) {\n    if (typeof(el) == \"string\")\n        el = document.getElementById(el);\n\n    var e0 = document.createElement(\"div\");\n    var s = document.createElement(\"splitter\");\n    var e1 = document.createElement(\"div\");\n    el.appendChild(e0);\n    el.appendChild(e1);\n    el.appendChild(s);\n    e0.style.position = e1.style.position = s.style.position = \"absolute\";\n    el.style.position = \"relative\";\n    var split = {$container: el};\n\n    split.editor0 = split[0] = new Editor(new Renderer(e0));\n    split.editor1 = split[1] = new Editor(new Renderer(e1));\n    split.splitter = s;\n\n    s.ratio = 0.5;\n\n    split.resize = function resize(){\n        var height = el.parentNode.clientHeight - el.offsetTop;\n        var total = el.clientWidth;\n        var w1 = total * s.ratio;\n        var w2 = total * (1- s.ratio);\n        s.style.left = w1 - 1 + \"px\";\n        s.style.height = el.style.height = height + \"px\";\n\n        var st0 = split[0].container.style;\n        var st1 = split[1].container.style;\n        st0.width = w1 + \"px\";\n        st1.width = w2 + \"px\";\n        st0.left = 0 + \"px\";\n        st1.left = w1 + \"px\";\n\n        st0.top = st1.top = \"0px\";\n        st0.height = st1.height = height + \"px\";\n\n        split[0].resize();\n        split[1].resize();\n    };\n\n    split.onMouseDown = function(e) {\n        var rect = el.getBoundingClientRect();\n        var x = e.clientX;\n        var y = e.clientY;\n\n        var button = e.button;\n        if (button !== 0) {\n            return;\n        }\n\n        var onMouseMove = function(e) {\n            x = e.clientX;\n            y = e.clientY;\n        };\n        var onResizeEnd = function(e) {\n            clearInterval(timerId);\n        };\n\n        var onResizeInterval = function() {\n            s.ratio = (x - rect.left) / rect.width;\n            split.resize();\n        };\n\n        event.capture(s, onMouseMove, onResizeEnd);\n        var timerId = setInterval(onResizeInterval, 40);\n\n        return e.preventDefault();\n    };\n\n\n\n    event.addListener(s, \"mousedown\", split.onMouseDown);\n    event.addListener(window, \"resize\", split.resize);\n    split.resize();\n    return split;\n};\nexports.stripLeadingComments = function(str) {\n    if(str.slice(0,2)=='/*') {\n        var j = str.indexOf('*/')+2;\n        str = str.substr(j);\n    }\n    return str.trim() + \"\\n\";\n};\nfunction saveOptionFromElement(el, val) {\n    if (!el.onchange && !el.onclick)\n        return;\n\n    if (\"checked\" in el) {\n        localStorage && localStorage.setItem(el.id, el.checked ? 1 : 0);\n    }\n    else {\n        localStorage && localStorage.setItem(el.id, el.value);\n    }\n}\n\nexports.bindCheckbox = function(id, callback, noInit) {\n    if (typeof id == \"string\")\n        var el = document.getElementById(id);\n    else {\n        var el = id;\n        id = el.id;\n    }\n    var el = document.getElementById(id);\n    \n    if (urlOptions[id])\n        el.checked = urlOptions[id] == \"1\";\n    else if (localStorage && localStorage.getItem(id))\n        el.checked = localStorage.getItem(id) == \"1\";\n\n    var onCheck = function() {\n        callback(!!el.checked);\n        saveOptionFromElement(el);\n    };\n    el.onclick = onCheck;\n    noInit || onCheck();\n    return el;\n};\n\nexports.bindDropdown = function(id, callback, noInit) {\n    if (typeof id == \"string\")\n        var el = document.getElementById(id);\n    else {\n        var el = id;\n        id = el.id;\n    }\n    \n    if (urlOptions[id])\n        el.value = urlOptions[id];\n    else if (localStorage && localStorage.getItem(id))\n        el.value = localStorage.getItem(id);\n\n    var onChange = function() {\n        callback(el.value);\n        saveOptionFromElement(el);\n    };\n\n    el.onchange = onChange;\n    noInit || onChange();\n};\n\nexports.fillDropdown = function(el, values) {\n    if (typeof el == \"string\")\n        el = document.getElementById(el);\n\n    dropdown(values).forEach(function(e) {\n        el.appendChild(e);\n    });\n};\n\nfunction elt(tag, attributes, content) {\n    var el = dom.createElement(tag);\n    if (typeof content == \"string\") {\n        el.appendChild(document.createTextNode(content));\n    } else if (content) {\n        content.forEach(function(ch) {\n            el.appendChild(ch);\n        });\n    }\n\n    for (var i in attributes)\n        el.setAttribute(i, attributes[i]);\n    return el;\n}\n\nfunction optgroup(values) {\n    return values.map(function(item) {\n        if (typeof item == \"string\")\n            item = {name: item, caption: item};\n        return elt(\"option\", {value: item.value || item.name}, item.caption || item.desc);\n    });\n}\n\nfunction dropdown(values) {\n    if (Array.isArray(values))\n        return optgroup(values);\n\n    return Object.keys(values).map(function(i) {\n        return elt(\"optgroup\", {\"label\": i}, optgroup(values[i]));\n    });\n}\n\n\n});\n\ndefine(\"ace/ext/elastic_tabstops_lite\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar ElasticTabstopsLite = function(editor) {\n    this.$editor = editor;\n    var self = this;\n    var changedRows = [];\n    var recordChanges = false;\n    this.onAfterExec = function() {\n        recordChanges = false;\n        self.processRows(changedRows);\n        changedRows = [];\n    };\n    this.onExec = function() {\n        recordChanges = true;\n    };\n    this.onChange = function(delta) {\n        if (recordChanges) {\n            if (changedRows.indexOf(delta.start.row) == -1)\n                changedRows.push(delta.start.row);\n            if (delta.end.row != delta.start.row)\n                changedRows.push(delta.end.row);\n        }\n    };\n};\n\n(function() {\n    this.processRows = function(rows) {\n        this.$inChange = true;\n        var checkedRows = [];\n\n        for (var r = 0, rowCount = rows.length; r < rowCount; r++) {\n            var row = rows[r];\n\n            if (checkedRows.indexOf(row) > -1)\n                continue;\n\n            var cellWidthObj = this.$findCellWidthsForBlock(row);\n            var cellWidths = this.$setBlockCellWidthsToMax(cellWidthObj.cellWidths);\n            var rowIndex = cellWidthObj.firstRow;\n\n            for (var w = 0, l = cellWidths.length; w < l; w++) {\n                var widths = cellWidths[w];\n                checkedRows.push(rowIndex);\n                this.$adjustRow(rowIndex, widths);\n                rowIndex++;\n            }\n        }\n        this.$inChange = false;\n    };\n\n    this.$findCellWidthsForBlock = function(row) {\n        var cellWidths = [], widths;\n        var rowIter = row;\n        while (rowIter >= 0) {\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n\n            cellWidths.unshift(widths);\n            rowIter--;\n        }\n        var firstRow = rowIter + 1;\n        rowIter = row;\n        var numRows = this.$editor.session.getLength();\n\n        while (rowIter < numRows - 1) {\n            rowIter++;\n\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n\n            cellWidths.push(widths);\n        }\n\n        return { cellWidths: cellWidths, firstRow: firstRow };\n    };\n\n    this.$cellWidthsForRow = function(row) {\n        var selectionColumns = this.$selectionColumnsForRow(row);\n\n        var tabs = [-1].concat(this.$tabsForRow(row));\n        var widths = tabs.map(function(el) { return 0; } ).slice(1);\n        var line = this.$editor.session.getLine(row);\n\n        for (var i = 0, len = tabs.length - 1; i < len; i++) {\n            var leftEdge = tabs[i]+1;\n            var rightEdge = tabs[i+1];\n\n            var rightmostSelection = this.$rightmostSelectionInCell(selectionColumns, rightEdge);\n            var cell = line.substring(leftEdge, rightEdge);\n            widths[i] = Math.max(cell.replace(/\\s+$/g,'').length, rightmostSelection - leftEdge);\n        }\n\n        return widths;\n    };\n\n    this.$selectionColumnsForRow = function(row) {\n        var selections = [], cursor = this.$editor.getCursorPosition();\n        if (this.$editor.session.getSelection().isEmpty()) {\n            if (row == cursor.row)\n                selections.push(cursor.column);\n        }\n\n        return selections;\n    };\n\n    this.$setBlockCellWidthsToMax = function(cellWidths) {\n        var startingNewBlock = true, blockStartRow, blockEndRow, maxWidth;\n        var columnInfo = this.$izip_longest(cellWidths);\n\n        for (var c = 0, l = columnInfo.length; c < l; c++) {\n            var column = columnInfo[c];\n            if (!column.push) {\n                console.error(column);\n                continue;\n            }\n            column.push(NaN);\n\n            for (var r = 0, s = column.length; r < s; r++) {\n                var width = column[r];\n                if (startingNewBlock) {\n                    blockStartRow = r;\n                    maxWidth = 0;\n                    startingNewBlock = false;\n                }\n                if (isNaN(width)) {\n                    blockEndRow = r;\n\n                    for (var j = blockStartRow; j < blockEndRow; j++) {\n                        cellWidths[j][c] = maxWidth;\n                    }\n                    startingNewBlock = true;\n                }\n\n                maxWidth = Math.max(maxWidth, width);\n            }\n        }\n\n        return cellWidths;\n    };\n\n    this.$rightmostSelectionInCell = function(selectionColumns, cellRightEdge) {\n        var rightmost = 0;\n\n        if (selectionColumns.length) {\n            var lengths = [];\n            for (var s = 0, length = selectionColumns.length; s < length; s++) {\n                if (selectionColumns[s] <= cellRightEdge)\n                    lengths.push(s);\n                else\n                    lengths.push(0);\n            }\n            rightmost = Math.max.apply(Math, lengths);\n        }\n\n        return rightmost;\n    };\n\n    this.$tabsForRow = function(row) {\n        var rowTabs = [], line = this.$editor.session.getLine(row),\n            re = /\\t/g, match;\n\n        while ((match = re.exec(line)) != null) {\n            rowTabs.push(match.index);\n        }\n\n        return rowTabs;\n    };\n\n    this.$adjustRow = function(row, widths) {\n        var rowTabs = this.$tabsForRow(row);\n\n        if (rowTabs.length == 0)\n            return;\n\n        var bias = 0, location = -1;\n        var expandedSet = this.$izip(widths, rowTabs);\n\n        for (var i = 0, l = expandedSet.length; i < l; i++) {\n            var w = expandedSet[i][0], it = expandedSet[i][1];\n            location += 1 + w;\n            it += bias;\n            var difference = location - it;\n\n            if (difference == 0)\n                continue;\n\n            var partialLine = this.$editor.session.getLine(row).substr(0, it );\n            var strippedPartialLine = partialLine.replace(/\\s*$/g, \"\");\n            var ispaces = partialLine.length - strippedPartialLine.length;\n\n            if (difference > 0) {\n                this.$editor.session.getDocument().insertInLine({row: row, column: it + 1}, Array(difference + 1).join(\" \") + \"\\t\");\n                this.$editor.session.getDocument().removeInLine(row, it, it + 1);\n\n                bias += difference;\n            }\n\n            if (difference < 0 && ispaces >= -difference) {\n                this.$editor.session.getDocument().removeInLine(row, it + difference, it);\n                bias += difference;\n            }\n        }\n    };\n    this.$izip_longest = function(iterables) {\n        if (!iterables[0])\n            return [];\n        var longest = iterables[0].length;\n        var iterablesLength = iterables.length;\n\n        for (var i = 1; i < iterablesLength; i++) {\n            var iLength = iterables[i].length;\n            if (iLength > longest)\n                longest = iLength;\n        }\n\n        var expandedSet = [];\n\n        for (var l = 0; l < longest; l++) {\n            var set = [];\n            for (var i = 0; i < iterablesLength; i++) {\n                if (iterables[i][l] === \"\")\n                    set.push(NaN);\n                else\n                    set.push(iterables[i][l]);\n            }\n\n            expandedSet.push(set);\n        }\n\n\n        return expandedSet;\n    };\n    this.$izip = function(widths, tabs) {\n        var size = widths.length >= tabs.length ? tabs.length : widths.length;\n\n        var expandedSet = [];\n        for (var i = 0; i < size; i++) {\n            var set = [ widths[i], tabs[i] ];\n            expandedSet.push(set);\n        }\n        return expandedSet;\n    };\n\n}).call(ElasticTabstopsLite.prototype);\n\nexports.ElasticTabstopsLite = ElasticTabstopsLite;\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    useElasticTabstops: {\n        set: function(val) {\n            if (val) {\n                if (!this.elasticTabstops)\n                    this.elasticTabstops = new ElasticTabstopsLite(this);\n                this.commands.on(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.on(\"exec\", this.elasticTabstops.onExec);\n                this.on(\"change\", this.elasticTabstops.onChange);\n            } else if (this.elasticTabstops) {\n                this.commands.removeListener(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.removeListener(\"exec\", this.elasticTabstops.onExec);\n                this.removeListener(\"change\", this.elasticTabstops.onChange);\n            }\n        }\n    }\n});\n\n});\n\ndefine(\"ace/occur\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/edit_session\",\"ace/search_highlight\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nfunction Occur() {}\n\noop.inherits(Occur, Search);\n\n(function() {\n    this.enter = function(editor, options) {\n        if (!options.needle) return false;\n        var pos = editor.getCursorPosition();\n        this.displayOccurContent(editor, options);\n        var translatedPos = this.originalToOccurPosition(editor.session, pos);\n        editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n    this.exit = function(editor, options) {\n        var pos = options.translatePosition && editor.getCursorPosition();\n        var translatedPos = pos && this.occurToOriginalPosition(editor.session, pos);\n        this.displayOriginalContent(editor);\n        if (translatedPos)\n            editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n\n    this.highlight = function(sess, regexp) {\n        var hl = sess.$occurHighlight = sess.$occurHighlight || sess.addDynamicMarker(\n                new SearchHighlight(null, \"ace_occur-highlight\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n\n    this.displayOccurContent = function(editor, options) {\n        this.$originalSession = editor.session;\n        var found = this.matchingLines(editor.session, options);\n        var lines = found.map(function(foundLine) { return foundLine.content; });\n        var occurSession = new EditSession(lines.join('\\n'));\n        occurSession.$occur = this;\n        occurSession.$occurMatchingLines = found;\n        editor.setSession(occurSession);\n        this.$useEmacsStyleLineStart = this.$originalSession.$useEmacsStyleLineStart;\n        occurSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n        this.highlight(occurSession, options.re);\n        occurSession._emit('changeBackMarker');\n    };\n\n    this.displayOriginalContent = function(editor) {\n        editor.setSession(this.$originalSession);\n        this.$originalSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n    };\n    this.originalToOccurPosition = function(session, pos) {\n        var lines = session.$occurMatchingLines;\n        var nullPos = {row: 0, column: 0};\n        if (!lines) return nullPos;\n        for (var i = 0; i < lines.length; i++) {\n            if (lines[i].row === pos.row)\n                return {row: i, column: pos.column};\n        }\n        return nullPos;\n    };\n    this.occurToOriginalPosition = function(session, pos) {\n        var lines = session.$occurMatchingLines;\n        if (!lines || !lines[pos.row])\n            return pos;\n        return {row: lines[pos.row].row, column: pos.column};\n    };\n\n    this.matchingLines = function(session, options) {\n        options = oop.mixin({}, options);\n        if (!session || !options.needle) return [];\n        var search = new Search();\n        search.set(options);\n        return search.findAll(session).reduce(function(lines, range) {\n            var row = range.start.row;\n            var last = lines[lines.length-1];\n            return last && last.row === row ?\n                lines :\n                lines.concat({row: row, content: session.getLine(row)});\n        }, []);\n    };\n\n}).call(Occur.prototype);\n\nvar dom = require('./lib/dom');\ndom.importCssString(\".ace_occur-highlight {\\n\\\n    border-radius: 4px;\\n\\\n    background-color: rgba(87, 255, 8, 0.25);\\n\\\n    position: absolute;\\n\\\n    z-index: 4;\\n\\\n    box-sizing: border-box;\\n\\\n    box-shadow: 0 0 4px rgb(91, 255, 50);\\n\\\n}\\n\\\n.ace_dark .ace_occur-highlight {\\n\\\n    background-color: rgb(80, 140, 85);\\n\\\n    box-shadow: 0 0 4px rgb(60, 120, 70);\\n\\\n}\\n\", \"incremental-occur-highlighting\");\n\nexports.Occur = Occur;\n\n});\n\ndefine(\"ace/commands/occur_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/occur\",\"ace/keyboard/hash_handler\",\"ace/lib/oop\"], function(require, exports, module) {\n\nvar config = require(\"../config\"),\n    Occur = require(\"../occur\").Occur;\nvar occurStartCommand = {\n    name: \"occur\",\n    exec: function(editor, options) {\n        var alreadyInOccur = !!editor.session.$occur;\n        var occurSessionActive = new Occur().enter(editor, options);\n        if (occurSessionActive && !alreadyInOccur)\n            OccurKeyboardHandler.installIn(editor);\n    },\n    readOnly: true\n};\n\nvar occurCommands = [{\n    name: \"occurexit\",\n    bindKey: 'esc|Ctrl-G',\n    exec: function(editor) {\n        var occur = editor.session.$occur;\n        if (!occur) return;\n        occur.exit(editor, {});\n        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);\n    },\n    readOnly: true\n}, {\n    name: \"occuraccept\",\n    bindKey: 'enter',\n    exec: function(editor) {\n        var occur = editor.session.$occur;\n        if (!occur) return;\n        occur.exit(editor, {translatePosition: true});\n        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);\n    },\n    readOnly: true\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar oop = require(\"../lib/oop\");\n\n\nfunction OccurKeyboardHandler() {}\n\noop.inherits(OccurKeyboardHandler, HashHandler);\n\n(function() {\n\n    this.isOccurHandler = true;\n\n    this.attach = function(editor) {\n        HashHandler.call(this, occurCommands, editor.commands.platform);\n        this.$editor = editor;\n    };\n\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function(data, hashId, key, keyCode) {\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        return (cmd && cmd.command) ? cmd : undefined;\n    };\n\n}).call(OccurKeyboardHandler.prototype);\n\nOccurKeyboardHandler.installIn = function(editor) {\n    var handler = new this();\n    editor.keyBinding.addKeyboardHandler(handler);\n    editor.commands.addCommands(occurCommands);\n};\n\nOccurKeyboardHandler.uninstallFrom = function(editor) {\n    editor.commands.removeCommands(occurCommands);\n    var handler = editor.getKeyboardHandler();\n    if (handler.isOccurHandler)\n        editor.keyBinding.removeKeyboardHandler(handler);\n};\n\nexports.occurStartCommand = occurStartCommand;\n\n});\n\ndefine(\"ace/commands/incremental_search_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/commands/occur_commands\"], function(require, exports, module) {\n\nvar config = require(\"../config\");\nvar oop = require(\"../lib/oop\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar occurStartCommand = require(\"./occur_commands\").occurStartCommand;\nexports.iSearchStartCommands = [{\n    name: \"iSearch\",\n    bindKey: {win: \"Ctrl-F\", mac: \"Command-F\"},\n    exec: function(editor, options) {\n        config.loadModule([\"core\", \"ace/incremental_search\"], function(e) {\n            var iSearch = e.iSearch = e.iSearch || new e.IncrementalSearch();\n            iSearch.activate(editor, options.backwards);\n            if (options.jumpToFirstMatch) iSearch.next(options);\n        });\n    },\n    readOnly: true\n}, {\n    name: \"iSearchBackwards\",\n    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {backwards: true}); },\n    readOnly: true\n}, {\n    name: \"iSearchAndGo\",\n    bindKey: {win: \"Ctrl-K\", mac: \"Command-G\"},\n    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {jumpToFirstMatch: true, useCurrentOrPrevSearch: true}); },\n    readOnly: true\n}, {\n    name: \"iSearchBackwardsAndGo\",\n    bindKey: {win: \"Ctrl-Shift-K\", mac: \"Command-Shift-G\"},\n    exec: function(editor) { editor.execCommand('iSearch', {jumpToFirstMatch: true, backwards: true, useCurrentOrPrevSearch: true}); },\n    readOnly: true\n}];\nexports.iSearchCommands = [{\n    name: \"restartSearch\",\n    bindKey: {win: \"Ctrl-F\", mac: \"Command-F\"},\n    exec: function(iSearch) {\n        iSearch.cancelSearch(true);\n    }\n}, {\n    name: \"searchForward\",\n    bindKey: {win: \"Ctrl-S|Ctrl-K\", mac: \"Ctrl-S|Command-G\"},\n    exec: function(iSearch, options) {\n        options.useCurrentOrPrevSearch = true;\n        iSearch.next(options);\n    }\n}, {\n    name: \"searchBackward\",\n    bindKey: {win: \"Ctrl-R|Ctrl-Shift-K\", mac: \"Ctrl-R|Command-Shift-G\"},\n    exec: function(iSearch, options) {\n        options.useCurrentOrPrevSearch = true;\n        options.backwards = true;\n        iSearch.next(options);\n    }\n}, {\n    name: \"extendSearchTerm\",\n    exec: function(iSearch, string) {\n        iSearch.addString(string);\n    }\n}, {\n    name: \"extendSearchTermSpace\",\n    bindKey: \"space\",\n    exec: function(iSearch) { iSearch.addString(' '); }\n}, {\n    name: \"shrinkSearchTerm\",\n    bindKey: \"backspace\",\n    exec: function(iSearch) {\n        iSearch.removeChar();\n    }\n}, {\n    name: 'confirmSearch',\n    bindKey: 'return',\n    exec: function(iSearch) { iSearch.deactivate(); }\n}, {\n    name: 'cancelSearch',\n    bindKey: 'esc|Ctrl-G',\n    exec: function(iSearch) { iSearch.deactivate(true); }\n}, {\n    name: 'occurisearch',\n    bindKey: 'Ctrl-O',\n    exec: function(iSearch) {\n        var options = oop.mixin({}, iSearch.$options);\n        iSearch.deactivate();\n        occurStartCommand.exec(iSearch.$editor, options);\n    }\n}, {\n    name: \"yankNextWord\",\n    bindKey: \"Ctrl-w\",\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorWordRight(); }),\n            string = ed.session.getTextRange(range);\n        iSearch.addString(string);\n    }\n}, {\n    name: \"yankNextChar\",\n    bindKey: \"Ctrl-Alt-y\",\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorRight(); }),\n            string = ed.session.getTextRange(range);\n        iSearch.addString(string);\n    }\n}, {\n    name: 'recenterTopBottom',\n    bindKey: 'Ctrl-l',\n    exec: function(iSearch) { iSearch.$editor.execCommand('recenterTopBottom'); }\n}, {\n    name: 'selectAllMatches',\n    bindKey: 'Ctrl-space',\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            hl = ed.session.$isearchHighlight,\n            ranges = hl && hl.cache ? hl.cache\n                .reduce(function(ranges, ea) {\n                    return ranges.concat(ea ? ea : []); }, []) : [];\n        iSearch.deactivate(false);\n        ranges.forEach(ed.selection.addRange.bind(ed.selection));\n    }\n}, {\n    name: 'searchAsRegExp',\n    bindKey: 'Alt-r',\n    exec: function(iSearch) {\n        iSearch.convertNeedleToRegExp();\n    }\n}].map(function(cmd) {\n    cmd.readOnly = true;\n    cmd.isIncrementalSearchCommand = true;\n    cmd.scrollIntoView = \"animate-cursor\";\n    return cmd;\n});\n\nfunction IncrementalSearchKeyboardHandler(iSearch) {\n    this.$iSearch = iSearch;\n}\n\noop.inherits(IncrementalSearchKeyboardHandler, HashHandler);\n\n(function() {\n\n    this.attach = function(editor) {\n        var iSearch = this.$iSearch;\n        HashHandler.call(this, exports.iSearchCommands, editor.commands.platform);\n        this.$commandExecHandler = editor.commands.addEventListener('exec', function(e) {\n            if (!e.command.isIncrementalSearchCommand)\n                return iSearch.deactivate();\n            e.stopPropagation();\n            e.preventDefault();\n            var scrollTop = editor.session.getScrollTop();\n            var result = e.command.exec(iSearch, e.args || {});\n            editor.renderer.scrollCursorIntoView(null, 0.5);\n            editor.renderer.animateScrolling(scrollTop);\n            return result;\n        });\n    };\n\n    this.detach = function(editor) {\n        if (!this.$commandExecHandler) return;\n        editor.commands.removeEventListener('exec', this.$commandExecHandler);\n        delete this.$commandExecHandler;\n    };\n\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function(data, hashId, key, keyCode) {\n        if (((hashId === 1/*ctrl*/ || hashId === 8/*command*/) && key === 'v')\n         || (hashId === 1/*ctrl*/ && key === 'y')) return null;\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        if (cmd.command) { return cmd; }\n        if (hashId == -1) {\n            var extendCmd = this.commands.extendSearchTerm;\n            if (extendCmd) { return {command: extendCmd, args: key}; }\n        }\n        return false;\n    };\n\n}).call(IncrementalSearchKeyboardHandler.prototype);\n\n\nexports.IncrementalSearchKeyboardHandler = IncrementalSearchKeyboardHandler;\n\n});\n\ndefine(\"ace/incremental_search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/search_highlight\",\"ace/commands/incremental_search_commands\",\"ace/lib/dom\",\"ace/commands/command_manager\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar iSearchCommandModule = require(\"./commands/incremental_search_commands\");\nvar ISearchKbd = iSearchCommandModule.IncrementalSearchKeyboardHandler;\nfunction IncrementalSearch() {\n    this.$options = {wrap: false, skipCurrent: false};\n    this.$keyboardHandler = new ISearchKbd(this);\n}\n\noop.inherits(IncrementalSearch, Search);\n\nfunction isRegExp(obj) {\n    return obj instanceof RegExp;\n}\n\nfunction regExpToObject(re) {\n    var string = String(re),\n        start = string.indexOf('/'),\n        flagStart = string.lastIndexOf('/');\n    return {\n        expression: string.slice(start+1, flagStart),\n        flags: string.slice(flagStart+1)\n    };\n}\n\nfunction stringToRegExp(string, flags) {\n    try {\n        return new RegExp(string, flags);\n    } catch (e) { return string; }\n}\n\nfunction objectToRegExp(obj) {\n    return stringToRegExp(obj.expression, obj.flags);\n}\n\n(function() {\n\n    this.activate = function(ed, backwards) {\n        this.$editor = ed;\n        this.$startPos = this.$currentPos = ed.getCursorPosition();\n        this.$options.needle = '';\n        this.$options.backwards = backwards;\n        ed.keyBinding.addKeyboardHandler(this.$keyboardHandler);\n        this.$originalEditorOnPaste = ed.onPaste; ed.onPaste = this.onPaste.bind(this);\n        this.$mousedownHandler = ed.addEventListener('mousedown', this.onMouseDown.bind(this));\n        this.selectionFix(ed);\n        this.statusMessage(true);\n    };\n\n    this.deactivate = function(reset) {\n        this.cancelSearch(reset);\n        var ed = this.$editor;\n        ed.keyBinding.removeKeyboardHandler(this.$keyboardHandler);\n        if (this.$mousedownHandler) {\n            ed.removeEventListener('mousedown', this.$mousedownHandler);\n            delete this.$mousedownHandler;\n        }\n        ed.onPaste = this.$originalEditorOnPaste;\n        this.message('');\n    };\n\n    this.selectionFix = function(editor) {\n        if (editor.selection.isEmpty() && !editor.session.$emacsMark) {\n            editor.clearSelection();\n        }\n    };\n\n    this.highlight = function(regexp) {\n        var sess = this.$editor.session,\n            hl = sess.$isearchHighlight = sess.$isearchHighlight || sess.addDynamicMarker(\n                new SearchHighlight(null, \"ace_isearch-result\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n\n    this.cancelSearch = function(reset) {\n        var e = this.$editor;\n        this.$prevNeedle = this.$options.needle;\n        this.$options.needle = '';\n        if (reset) {\n            e.moveCursorToPosition(this.$startPos);\n            this.$currentPos = this.$startPos;\n        } else {\n            e.pushEmacsMark && e.pushEmacsMark(this.$startPos, false);\n        }\n        this.highlight(null);\n        return Range.fromPoints(this.$currentPos, this.$currentPos);\n    };\n\n    this.highlightAndFindWithNeedle = function(moveToNext, needleUpdateFunc) {\n        if (!this.$editor) return null;\n        var options = this.$options;\n        if (needleUpdateFunc) {\n            options.needle = needleUpdateFunc.call(this, options.needle || '') || '';\n        }\n        if (options.needle.length === 0) {\n            this.statusMessage(true);\n            return this.cancelSearch(true);\n        }\n        options.start = this.$currentPos;\n        var session = this.$editor.session,\n            found = this.find(session),\n            shouldSelect = this.$editor.emacsMark ?\n                !!this.$editor.emacsMark() : !this.$editor.selection.isEmpty();\n        if (found) {\n            if (options.backwards) found = Range.fromPoints(found.end, found.start);\n            this.$editor.selection.setRange(Range.fromPoints(shouldSelect ? this.$startPos : found.end, found.end));\n            if (moveToNext) this.$currentPos = found.end;\n            this.highlight(options.re);\n        }\n\n        this.statusMessage(found);\n\n        return found;\n    };\n\n    this.addString = function(s) {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            if (!isRegExp(needle))\n              return needle + s;\n            var reObj = regExpToObject(needle);\n            reObj.expression += s;\n            return objectToRegExp(reObj);\n        });\n    };\n\n    this.removeChar = function(c) {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            if (!isRegExp(needle))\n              return needle.substring(0, needle.length-1);\n            var reObj = regExpToObject(needle);\n            reObj.expression = reObj.expression.substring(0, reObj.expression.length-1);\n            return objectToRegExp(reObj);\n        });\n    };\n\n    this.next = function(options) {\n        options = options || {};\n        this.$options.backwards = !!options.backwards;\n        this.$currentPos = this.$editor.getCursorPosition();\n        return this.highlightAndFindWithNeedle(true, function(needle) {\n            return options.useCurrentOrPrevSearch && needle.length === 0 ?\n                this.$prevNeedle || '' : needle;\n        });\n    };\n\n    this.onMouseDown = function(evt) {\n        this.deactivate();\n        return true;\n    };\n\n    this.onPaste = function(text) {\n        this.addString(text);\n    };\n\n    this.convertNeedleToRegExp = function() {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            return isRegExp(needle) ? needle : stringToRegExp(needle, 'ig');\n        });\n    };\n\n    this.convertNeedleToString = function() {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            return isRegExp(needle) ? regExpToObject(needle).expression : needle;\n        });\n    };\n\n    this.statusMessage = function(found) {\n        var options = this.$options, msg = '';\n        msg += options.backwards ? 'reverse-' : '';\n        msg += 'isearch: ' + options.needle;\n        msg += found ? '' : ' (not found)';\n        this.message(msg);\n    };\n\n    this.message = function(msg) {\n        if (this.$editor.showCommandLine) {\n            this.$editor.showCommandLine(msg);\n            this.$editor.focus();\n        } else {\n            console.log(msg);\n        }\n    };\n\n}).call(IncrementalSearch.prototype);\n\n\nexports.IncrementalSearch = IncrementalSearch;\n\nvar dom = require('./lib/dom');\ndom.importCssString && dom.importCssString(\"\\\n.ace_marker-layer .ace_isearch-result {\\\n  position: absolute;\\\n  z-index: 6;\\\n  box-sizing: border-box;\\\n}\\\ndiv.ace_isearch-result {\\\n  border-radius: 4px;\\\n  background-color: rgba(255, 200, 0, 0.5);\\\n  box-shadow: 0 0 4px rgb(255, 200, 0);\\\n}\\\n.ace_dark div.ace_isearch-result {\\\n  background-color: rgb(100, 110, 160);\\\n  box-shadow: 0 0 4px rgb(80, 90, 140);\\\n}\", \"incremental-search-highlighting\");\nvar commands = require(\"./commands/command_manager\");\n(function() {\n    this.setupIncrementalSearch = function(editor, val) {\n        if (this.usesIncrementalSearch == val) return;\n        this.usesIncrementalSearch = val;\n        var iSearchCommands = iSearchCommandModule.iSearchStartCommands;\n        var method = val ? 'addCommands' : 'removeCommands';\n        this[method](iSearchCommands);\n    };\n}).call(commands.CommandManager.prototype);\nvar Editor = require(\"./editor\").Editor;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    useIncrementalSearch: {\n        set: function(val) {\n            this.keyBinding.$handlers.forEach(function(handler) {\n                if (handler.setupIncrementalSearch) {\n                    handler.setupIncrementalSearch(this, val);\n                }\n            });\n            this._emit('incrementalSearchSettingChanged', {isEnabled: val});\n        }\n    }\n});\n\n});\n\ndefine(\"kitchen-sink/token_tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/range\",\"ace/tooltip\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"ace/lib/dom\");\nvar oop = require(\"ace/lib/oop\");\nvar event = require(\"ace/lib/event\");\nvar Range = require(\"ace/range\").Range;\nvar Tooltip = require(\"ace/tooltip\").Tooltip;\n\nfunction TokenTooltip (editor) {\n    if (editor.tokenTooltip)\n        return;\n    Tooltip.call(this, editor.container);\n    editor.tokenTooltip = this;\n    this.editor = editor;\n\n    this.update = this.update.bind(this);\n    this.onMouseMove = this.onMouseMove.bind(this);\n    this.onMouseOut = this.onMouseOut.bind(this);\n    event.addListener(editor.renderer.scroller, \"mousemove\", this.onMouseMove);\n    event.addListener(editor.renderer.content, \"mouseout\", this.onMouseOut);\n}\n\noop.inherits(TokenTooltip, Tooltip);\n\n(function(){\n    this.token = {};\n    this.range = new Range();\n    \n    this.update = function() {\n        this.$timer = null;\n        \n        var r = this.editor.renderer;\n        if (this.lastT - (r.timeStamp || 0) > 1000) {\n            r.rect = null;\n            r.timeStamp = this.lastT;\n            this.maxHeight = window.innerHeight;\n            this.maxWidth = window.innerWidth;\n        }\n\n        var canvasPos = r.rect || (r.rect = r.scroller.getBoundingClientRect());\n        var offset = (this.x + r.scrollLeft - canvasPos.left - r.$padding) / r.characterWidth;\n        var row = Math.floor((this.y + r.scrollTop - canvasPos.top) / r.lineHeight);\n        var col = Math.round(offset);\n\n        var screenPos = {row: row, column: col, side: offset - col > 0 ? 1 : -1};\n        var session = this.editor.session;\n        var docPos = session.screenToDocumentPosition(screenPos.row, screenPos.column);\n        var token = session.getTokenAt(docPos.row, docPos.column);\n\n        if (!token && !session.getLine(docPos.row)) {\n            token = {\n                type: \"\",\n                value: \"\",\n                state: session.bgTokenizer.getState(0)\n            };\n        }\n        if (!token) {\n            session.removeMarker(this.marker);\n            this.hide();\n            return;\n        }\n\n        var tokenText = token.type;\n        if (token.state)\n            tokenText += \"|\" + token.state;\n        if (token.merge)\n            tokenText += \"\\n  merge\";\n        if (token.stateTransitions)\n            tokenText += \"\\n  \" + token.stateTransitions.join(\"\\n  \");\n\n        if (this.tokenText != tokenText) {\n            this.setText(tokenText);\n            this.width = this.getWidth();\n            this.height = this.getHeight();\n            this.tokenText = tokenText;\n        }\n\n        this.show(null, this.x, this.y);\n\n        this.token = token;\n        session.removeMarker(this.marker);\n        this.range = new Range(docPos.row, token.start, docPos.row, token.start + token.value.length);\n        this.marker = session.addMarker(this.range, \"ace_bracket\", \"text\");\n    };\n    \n    this.onMouseMove = function(e) {\n        this.x = e.clientX;\n        this.y = e.clientY;\n        if (this.isOpen) {\n            this.lastT = e.timeStamp;\n            this.setPosition(this.x, this.y);\n        }\n        if (!this.$timer)\n            this.$timer = setTimeout(this.update, 100);\n    };\n\n    this.onMouseOut = function(e) {\n        if (e && e.currentTarget.contains(e.relatedTarget))\n            return;\n        this.hide();\n        this.editor.session.removeMarker(this.marker);\n        this.$timer = clearTimeout(this.$timer);\n    };\n\n    this.setPosition = function(x, y) {\n        if (x + 10 + this.width > this.maxWidth)\n            x = window.innerWidth - this.width - 10;\n        if (y > window.innerHeight * 0.75 || y + 20 + this.height > this.maxHeight)\n            y = y - this.height - 30;\n\n        Tooltip.prototype.setPosition.call(this, x + 10, y + 20);\n    };\n\n    this.destroy = function() {\n        this.onMouseOut();\n        event.removeListener(this.editor.renderer.scroller, \"mousemove\", this.onMouseMove);\n        event.removeListener(this.editor.renderer.content, \"mouseout\", this.onMouseOut);\n        delete this.editor.tokenTooltip;\n    };\n\n}).call(TokenTooltip.prototype);\n\nexports.TokenTooltip = TokenTooltip;\n\n});\n\ndefine(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Editor = require(\"./editor\").Editor;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = require(\"./edit_session\").EditSession;\n\n\nvar Split = function(container, theme, splits) {\n    this.BELOW = 1;\n    this.BESIDE = 0;\n\n    this.$container = container;\n    this.$theme = theme;\n    this.$splits = 0;\n    this.$editorCSS = \"\";\n    this.$editors = [];\n    this.$orientation = this.BESIDE;\n\n    this.setSplits(splits || 1);\n    this.$cEditor = this.$editors[0];\n\n\n    this.on(\"focus\", function(editor) {\n        this.$cEditor = editor;\n    }.bind(this));\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$createEditor = function() {\n        var el = document.createElement(\"div\");\n        el.className = this.$editorCSS;\n        el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n        this.$container.appendChild(el);\n        var editor = new Editor(new Renderer(el, this.$theme));\n\n        editor.on(\"focus\", function() {\n            this._emit(\"focus\", editor);\n        }.bind(this));\n\n        this.$editors.push(editor);\n        editor.setFontSize(this.$fontSize);\n        return editor;\n    };\n\n    this.setSplits = function(splits) {\n        var editor;\n        if (splits < 1) {\n            throw \"The number of splits have to be > 0!\";\n        }\n\n        if (splits == this.$splits) {\n            return;\n        } else if (splits > this.$splits) {\n            while (this.$splits < this.$editors.length && this.$splits < splits) {\n                editor = this.$editors[this.$splits];\n                this.$container.appendChild(editor.container);\n                editor.setFontSize(this.$fontSize);\n                this.$splits ++;\n            }\n            while (this.$splits < splits) {\n                this.$createEditor();\n                this.$splits ++;\n            }\n        } else {\n            while (this.$splits > splits) {\n                editor = this.$editors[this.$splits - 1];\n                this.$container.removeChild(editor.container);\n                this.$splits --;\n            }\n        }\n        this.resize();\n    };\n    this.getSplits = function() {\n        return this.$splits;\n    };\n    this.getEditor = function(idx) {\n        return this.$editors[idx];\n    };\n    this.getCurrentEditor = function() {\n        return this.$cEditor;\n    };\n    this.focus = function() {\n        this.$cEditor.focus();\n    };\n    this.blur = function() {\n        this.$cEditor.blur();\n    };\n    this.setTheme = function(theme) {\n        this.$editors.forEach(function(editor) {\n            editor.setTheme(theme);\n        });\n    };\n    this.setKeyboardHandler = function(keybinding) {\n        this.$editors.forEach(function(editor) {\n            editor.setKeyboardHandler(keybinding);\n        });\n    };\n    this.forEach = function(callback, scope) {\n        this.$editors.forEach(callback, scope);\n    };\n\n\n    this.$fontSize = \"\";\n    this.setFontSize = function(size) {\n        this.$fontSize = size;\n        this.forEach(function(editor) {\n           editor.setFontSize(size);\n        });\n    };\n\n    this.$cloneSession = function(session) {\n        var s = new EditSession(session.getDocument(), session.getMode());\n\n        var undoManager = session.getUndoManager();\n        s.setUndoManager(undoManager);\n        s.setTabSize(session.getTabSize());\n        s.setUseSoftTabs(session.getUseSoftTabs());\n        s.setOverwrite(session.getOverwrite());\n        s.setBreakpoints(session.getBreakpoints());\n        s.setUseWrapMode(session.getUseWrapMode());\n        s.setUseWorker(session.getUseWorker());\n        s.setWrapLimitRange(session.$wrapLimitRange.min,\n                            session.$wrapLimitRange.max);\n        s.$foldData = session.$cloneFoldData();\n\n        return s;\n    };\n    this.setSession = function(session, idx) {\n        var editor;\n        if (idx == null) {\n            editor = this.$cEditor;\n        } else {\n            editor = this.$editors[idx];\n        }\n        var isUsed = this.$editors.some(function(editor) {\n           return editor.session === session;\n        });\n\n        if (isUsed) {\n            session = this.$cloneSession(session);\n        }\n        editor.setSession(session);\n        return session;\n    };\n    this.getOrientation = function() {\n        return this.$orientation;\n    };\n    this.setOrientation = function(orientation) {\n        if (this.$orientation == orientation) {\n            return;\n        }\n        this.$orientation = orientation;\n        this.resize();\n    };\n    this.resize = function() {\n        var width = this.$container.clientWidth;\n        var height = this.$container.clientHeight;\n        var editor;\n\n        if (this.$orientation == this.BESIDE) {\n            var editorWidth = width / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = editorWidth + \"px\";\n                editor.container.style.top = \"0px\";\n                editor.container.style.left = i * editorWidth + \"px\";\n                editor.container.style.height = height + \"px\";\n                editor.resize();\n            }\n        } else {\n            var editorHeight = height / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = width + \"px\";\n                editor.container.style.top = i * editorHeight + \"px\";\n                editor.container.style.left = \"0px\";\n                editor.container.style.height = editorHeight + \"px\";\n                editor.resize();\n            }\n        }\n    };\n\n}).call(Split.prototype);\n\nexports.Split = Split;\n});\n\ndefine(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = \"#ace_settingsmenu, #kbshortcutmenu {\\\nbackground-color: #F7F7F7;\\\ncolor: black;\\\nbox-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\\npadding: 1em 0.5em 2em 1em;\\\noverflow: auto;\\\nposition: absolute;\\\nmargin: 0;\\\nbottom: 0;\\\nright: 0;\\\ntop: 0;\\\nz-index: 9991;\\\ncursor: default;\\\n}\\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\\nbox-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\\nbackground-color: rgba(255, 255, 255, 0.6);\\\ncolor: black;\\\n}\\\n.ace_optionsMenuEntry:hover {\\\nbackground-color: rgba(100, 100, 100, 0.1);\\\ntransition: all 0.3s\\\n}\\\n.ace_closeButton {\\\nbackground: rgba(245, 146, 146, 0.5);\\\nborder: 1px solid #F48A8A;\\\nborder-radius: 50%;\\\npadding: 7px;\\\nposition: absolute;\\\nright: -8px;\\\ntop: -8px;\\\nz-index: 100000;\\\n}\\\n.ace_closeButton{\\\nbackground: rgba(245, 146, 146, 0.9);\\\n}\\\n.ace_optionsMenuKey {\\\ncolor: darkslateblue;\\\nfont-weight: bold;\\\n}\\\n.ace_optionsMenuCommand {\\\ncolor: darkcyan;\\\nfont-weight: normal;\\\n}\\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\\nvertical-align: middle;\\\n}\\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\\nbackground: #e7e7e7;\\\nbox-shadow: 1px 0px 2px 0px #adadad inset;\\\nborder-color: #adadad;\\\n}\\\n.ace_optionsMenuEntry button {\\\nbackground: white;\\\nborder: 1px solid lightgray;\\\nmargin: 0px;\\\n}\\\n.ace_optionsMenuEntry button:hover{\\\nbackground: #f0f0f0;\\\n}\";\ndom.importCssString(cssText);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {\n    top = top ? 'top: ' + top + ';' : '';\n    bottom = bottom ? 'bottom: ' + bottom + ';' : '';\n    right = right ? 'right: ' + right + ';' : '';\n    left = left ? 'left: ' + left + ';' : '';\n\n    var closer = document.createElement('div');\n    var contentContainer = document.createElement('div');\n\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            closer.click();\n        }\n    }\n\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        'background-color: rgba(0, 0, 0, 0.3);';\n    closer.addEventListener('click', function() {\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        editor.focus();\n        closer = null;\n    });\n    document.addEventListener('keydown', documentEscListener);\n\n    contentContainer.style.cssText = top + right + bottom + left;\n    contentContainer.addEventListener('click', function(e) {\n        e.stopPropagation();\n    });\n\n    var wrapper = dom.createElement(\"div\");\n    wrapper.style.position = \"relative\";\n    \n    var closeButton = dom.createElement(\"div\");\n    closeButton.className = \"ace_closeButton\";\n    closeButton.addEventListener('click', function() {\n        closer.click();\n    });\n    \n    wrapper.appendChild(closeButton);\n    contentContainer.appendChild(wrapper);\n    \n    contentContainer.appendChild(contentElement);\n    closer.appendChild(contentContainer);\n    document.body.appendChild(closer);\n    editor.blur();\n};\n\n});\n\ndefine(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar themeData = [\n    [\"Chrome\"         ],\n    [\"Clouds\"         ],\n    [\"Crimson Editor\" ],\n    [\"Dawn\"           ],\n    [\"Dreamweaver\"    ],\n    [\"Eclipse\"        ],\n    [\"GitHub\"         ],\n    [\"IPlastic\"       ],\n    [\"Solarized Light\"],\n    [\"TextMate\"       ],\n    [\"Tomorrow\"       ],\n    [\"XCode\"          ],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\"           ,\"sqlserver\"               , \"light\"],\n    [\"Ambiance\"             ,\"ambiance\"                ,  \"dark\"],\n    [\"Chaos\"                ,\"chaos\"                   ,  \"dark\"],\n    [\"Clouds Midnight\"      ,\"clouds_midnight\"         ,  \"dark\"],\n    [\"Dracula\"              ,\"\"                        ,  \"dark\"],\n    [\"Cobalt\"               ,\"cobalt\"                  ,  \"dark\"],\n    [\"Gruvbox\"              ,\"gruvbox\"                 ,  \"dark\"],\n    [\"Green on Black\"       ,\"gob\"                     ,  \"dark\"],\n    [\"idle Fingers\"         ,\"idle_fingers\"            ,  \"dark\"],\n    [\"krTheme\"              ,\"kr_theme\"                ,  \"dark\"],\n    [\"Merbivore\"            ,\"merbivore\"               ,  \"dark\"],\n    [\"Merbivore Soft\"       ,\"merbivore_soft\"          ,  \"dark\"],\n    [\"Mono Industrial\"      ,\"mono_industrial\"         ,  \"dark\"],\n    [\"Monokai\"              ,\"monokai\"                 ,  \"dark\"],\n    [\"Pastel on dark\"       ,\"pastel_on_dark\"          ,  \"dark\"],\n    [\"Solarized Dark\"       ,\"solarized_dark\"          ,  \"dark\"],\n    [\"Terminal\"             ,\"terminal\"                ,  \"dark\"],\n    [\"Tomorrow Night\"       ,\"tomorrow_night\"          ,  \"dark\"],\n    [\"Tomorrow Night Blue\"  ,\"tomorrow_night_blue\"     ,  \"dark\"],\n    [\"Tomorrow Night Bright\",\"tomorrow_night_bright\"   ,  \"dark\"],\n    [\"Tomorrow Night 80s\"   ,\"tomorrow_night_eighties\" ,  \"dark\"],\n    [\"Twilight\"             ,\"twilight\"                ,  \"dark\"],\n    [\"Vibrant Ink\"          ,\"vibrant_ink\"             ,  \"dark\"]\n];\n\n\nexports.themesByName = {};\nexports.themes = themeData.map(function(data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});\n\ndefine(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"], function(require, exports, module) {\n\"use strict\";\nvar overlayPage = require('./menu_tools/overlay_page').overlayPage;\n\n \nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar buildDom = dom.buildDom;\n\nvar modelist = require(\"./modelist\");\nvar themelist = require(\"./themelist\");\n\nvar themes = { Bright: [], Dark: [] };\nthemelist.themes.forEach(function(x) {\n    themes[x.isDark ? \"Dark\" : \"Bright\"].push({ caption: x.caption, value: x.theme });\n});\n\nvar modes = modelist.modes.map(function(x){ \n    return { caption: x.caption, value: x.mode }; \n});\n\n\nvar optionGroups = {\n    Main: {\n        Mode: {\n            path: \"mode\",\n            type: \"select\",\n            items: modes\n        },\n        Theme: {\n            path: \"theme\",\n            type: \"select\",\n            items: themes\n        },\n        \"Keybinding\": {\n            type: \"buttonBar\",\n            path: \"keyboardHandler\",\n            items: [\n                { caption : \"Ace\", value : null },\n                { caption : \"Vim\", value : \"ace/keyboard/vim\" },\n                { caption : \"Emacs\", value : \"ace/keyboard/emacs\" },\n                { caption : \"Sublime\", value : \"ace/keyboard/sublime\" }\n            ]\n        },\n        \"Font Size\": {\n            path: \"fontSize\",\n            type: \"number\",\n            defaultValue: 12,\n            defaults: [\n                {caption: \"12px\", value: 12},\n                {caption: \"24px\", value: 24}\n            ]\n        },\n        \"Soft Wrap\": {\n            type: \"buttonBar\",\n            path: \"wrap\",\n            items: [\n               { caption : \"Off\",  value : \"off\" },\n               { caption : \"View\", value : \"free\" },\n               { caption : \"margin\", value : \"printMargin\" },\n               { caption : \"40\",   value : \"40\" }\n            ]\n        },\n        \"Cursor Style\": {\n            path: \"cursorStyle\",\n            items: [\n               { caption : \"Ace\",    value : \"ace\" },\n               { caption : \"Slim\",   value : \"slim\" },\n               { caption : \"Smooth\", value : \"smooth\" },\n               { caption : \"Smooth And Slim\", value : \"smooth slim\" },\n               { caption : \"Wide\",   value : \"wide\" }\n            ]\n        },\n        \"Folding\": {\n            path: \"foldStyle\",\n            items: [\n                { caption : \"Manual\", value : \"manual\" },\n                { caption : \"Mark begin\", value : \"markbegin\" },\n                { caption : \"Mark begin and end\", value : \"markbeginend\" }\n            ]\n        },\n        \"Soft Tabs\": [{\n            path: \"useSoftTabs\"\n        }, {\n            path: \"tabSize\",\n            type: \"number\",\n            values: [2, 3, 4, 8, 16]\n        }],\n        \"Overscroll\": {\n            type: \"buttonBar\",\n            path: \"scrollPastEnd\",\n            items: [\n               { caption : \"None\",  value : 0 },\n               { caption : \"Half\",   value : 0.5 },\n               { caption : \"Full\",   value : 1 }\n            ]\n        }\n    },\n    More: {\n        \"Atomic soft tabs\": {\n            path: \"navigateWithinSoftTabs\"\n        },\n        \"Enable Behaviours\": {\n            path: \"behavioursEnabled\"\n        },\n        \"Full Line Selection\": {\n            type: \"checkbox\",\n            values: \"text|line\",\n            path: \"selectionStyle\"\n        },\n        \"Highlight Active Line\": {\n            path: \"highlightActiveLine\"\n        },\n        \"Show Invisibles\": {\n            path: \"showInvisibles\"\n        },\n        \"Show Indent Guides\": {\n            path: \"displayIndentGuides\"\n        },\n        \"Persistent Scrollbar\": [{\n            path: \"hScrollBarAlwaysVisible\"\n        }, {\n            path: \"vScrollBarAlwaysVisible\"\n        }],\n        \"Animate scrolling\": {\n            path: \"animatedScroll\"\n        },\n        \"Show Gutter\": {\n            path: \"showGutter\"\n        },\n        \"Show Line Numbers\": {\n            path: \"showLineNumbers\"\n        },\n        \"Relative Line Numbers\": {\n            path: \"relativeLineNumbers\"\n        },\n        \"Fixed Gutter Width\": {\n            path: \"fixedWidthGutter\"\n        },\n        \"Show Print Margin\": [{\n            path: \"showPrintMargin\"\n        }, {\n            type: \"number\",\n            path: \"printMarginColumn\"\n        }],\n        \"Indented Soft Wrap\": {\n            path: \"indentedSoftWrap\"\n        },\n        \"Highlight selected word\": {\n            path: \"highlightSelectedWord\"\n        },\n        \"Fade Fold Widgets\": {\n            path: \"fadeFoldWidgets\"\n        },\n        \"Use textarea for IME\": {\n            path: \"useTextareaForIME\"\n        },\n        \"Merge Undo Deltas\": {\n            path: \"mergeUndoDeltas\",\n            items: [\n               { caption : \"Always\",  value : \"always\" },\n               { caption : \"Never\",   value : \"false\" },\n               { caption : \"Timed\",   value : \"true\" }\n            ]\n        },\n        \"Elastic Tabstops\": {\n            path: \"useElasticTabstops\"\n        },\n        \"Incremental Search\": {\n            path: \"useIncrementalSearch\"\n        },\n        \"Read-only\": {\n            path: \"readOnly\"\n        },\n        \"Copy without selection\": {\n            path: \"copyWithEmptySelection\"\n        },\n        \"Live Autocompletion\": {\n            path: \"enableLiveAutocompletion\"\n        }\n    }\n};\n\n\nvar OptionPanel = function(editor, element) {\n    this.editor = editor;\n    this.container = element || document.createElement(\"div\");\n    this.groups = [];\n    this.options = {};\n};\n\n(function() {\n    \n    oop.implement(this, EventEmitter);\n    \n    this.add = function(config) {\n        if (config.Main)\n            oop.mixin(optionGroups.Main, config.Main);\n        if (config.More)\n            oop.mixin(optionGroups.More, config.More);\n    };\n    \n    this.render = function() {\n        this.container.innerHTML = \"\";\n        buildDom([\"table\", {id: \"controls\"}, \n            this.renderOptionGroup(optionGroups.Main),\n            [\"tr\", null, [\"td\", {colspan: 2},\n                [\"table\", {id: \"more-controls\"}, \n                    this.renderOptionGroup(optionGroups.More)\n                ]\n            ]]\n        ], this.container);\n    };\n    \n    this.renderOptionGroup = function(group) {\n        return Object.keys(group).map(function(key, i) {\n            var item = group[key];\n            if (!item.position)\n                item.position = i / 10000;\n            if (!item.label)\n                item.label = key;\n            return item;\n        }).sort(function(a, b) {\n            return a.position - b.position;\n        }).map(function(item) {\n            return this.renderOption(item.label, item);\n        }, this);\n    };\n    \n    this.renderOptionControl = function(key, option) {\n        var self = this;\n        if (Array.isArray(option)) {\n            return option.map(function(x) {\n                return self.renderOptionControl(key, x);\n            });\n        }\n        var control;\n        \n        var value = self.getOption(option);\n        \n        if (option.values && option.type != \"checkbox\") {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            option.items = option.values.map(function(v) {\n                return { value: v, name: v };\n            });\n        }\n        \n        if (option.type == \"buttonBar\") {\n            control = [\"div\", option.items.map(function(item) {\n                return [\"button\", { \n                    value: item.value, \n                    ace_selected_button: value == item.value, \n                    onclick: function() {\n                        self.setOption(option, item.value);\n                        var nodes = this.parentNode.querySelectorAll(\"[ace_selected_button]\");\n                        for (var i = 0; i < nodes.length; i++) {\n                            nodes[i].removeAttribute(\"ace_selected_button\");\n                        }\n                        this.setAttribute(\"ace_selected_button\", true);\n                    } \n                }, item.desc || item.caption || item.name];\n            })];\n        } else if (option.type == \"number\") {\n            control = [\"input\", {type: \"number\", value: value || option.defaultValue, style:\"width:3em\", oninput: function() {\n                self.setOption(option, parseInt(this.value));\n            }}];\n            if (option.defaults) {\n                control = [control, option.defaults.map(function(item) {\n                    return [\"button\", {onclick: function() {\n                        var input = this.parentNode.firstChild;\n                        input.value = item.value;\n                        input.oninput();\n                    }}, item.caption];\n                })];\n            }\n        } else if (option.items) {\n            var buildItems = function(items) {\n                return items.map(function(item) {\n                    return [\"option\", { value: item.value || item.name }, item.desc || item.caption || item.name];\n                });\n            };\n            \n            var items = Array.isArray(option.items) \n                ? buildItems(option.items)\n                : Object.keys(option.items).map(function(key) {\n                    return [\"optgroup\", {\"label\": key}, buildItems(option.items[key])];\n                });\n            control = [\"select\", { id: key, value: value, onchange: function() {\n                self.setOption(option, this.value);\n            } }, items];\n        } else {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            if (option.values) value = value == option.values[1];\n            control = [\"input\", { type: \"checkbox\", id: key, checked: value || null, onchange: function() {\n                var value = this.checked;\n                if (option.values) value = option.values[value ? 1 : 0];\n                self.setOption(option, value);\n            }}];\n            if (option.type == \"checkedNumber\") {\n                control = [control, []];\n            }\n        }\n        return control;\n    };\n    \n    this.renderOption = function(key, option) {\n        if (option.path && !option.onchange && !this.editor.$options[option.path])\n            return;\n        this.options[option.path] = option;\n        var safeKey = \"-\" + option.path;\n        var control = this.renderOptionControl(safeKey, option);\n        return [\"tr\", {class: \"ace_optionsMenuEntry\"}, [\"td\",\n            [\"label\", {for: safeKey}, key]\n        ], [\"td\", control]];\n    };\n    \n    this.setOption = function(option, value) {\n        if (typeof option == \"string\")\n            option = this.options[option];\n        if (value == \"false\") value = false;\n        if (value == \"true\") value = true;\n        if (value == \"null\") value = null;\n        if (value == \"undefined\") value = undefined;\n        if (typeof value == \"string\" && parseFloat(value).toString() == value)\n            value = parseFloat(value);\n        if (option.onchange)\n            option.onchange(value);\n        else if (option.path)\n            this.editor.setOption(option.path, value);\n        this._signal(\"setOption\", {name: option.path, value: value});\n    };\n    \n    this.getOption = function(option) {\n        if (option.getValue)\n            return option.getValue();\n        return this.editor.getOption(option.path);\n    };\n    \n}).call(OptionPanel.prototype);\n\nexports.OptionPanel = OptionPanel;\n\n});\n\ndefine(\"ace/ext/statusbar\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"ace/lib/dom\");\nvar lang = require(\"ace/lib/lang\");\n\nvar StatusBar = function(editor, parentNode) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_status-indicator\";\n    this.element.style.cssText = \"display: inline-block;\";\n    parentNode.appendChild(this.element);\n\n    var statusUpdate = lang.delayedCall(function(){\n        this.updateStatus(editor);\n    }.bind(this)).schedule.bind(null, 100);\n    \n    editor.on(\"changeStatus\", statusUpdate);\n    editor.on(\"changeSelection\", statusUpdate);\n    editor.on(\"keyboardActivity\", statusUpdate);\n};\n\n(function(){\n    this.updateStatus = function(editor) {\n        var status = [];\n        function add(str, separator) {\n            str && status.push(str, separator || \"|\");\n        }\n\n        add(editor.keyBinding.getStatusText(editor));\n        if (editor.commands.recording)\n            add(\"REC\");\n        \n        var sel = editor.selection;\n        var c = sel.lead;\n        \n        if (!sel.isEmpty()) {\n            var r = editor.getSelectionRange();\n            add(\"(\" + (r.end.row - r.start.row) + \":\"  +(r.end.column - r.start.column) + \")\", \" \");\n        }\n        add(c.row + \":\" + c.column, \" \");        \n        if (sel.rangeCount)\n            add(\"[\" + sel.rangeCount + \"]\", \" \");\n        status.pop();\n        this.element.textContent = status.join(\"\");\n    };\n}).call(StatusBar.prototype);\n\nexports.StatusBar = StatusBar;\n\n});\n\ndefine(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    \n    this.getTokenizer = function() {\n        function TabstopToken(str, _, stack) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str) && !stack.inFormatString)\n                return [{tabstopId: parseInt(str, 10)}];\n            return [{text: str}];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                {regex: /:/, onMatch: function(val, state, stack) {\n                    if (stack.length && stack[0].expectIf) {\n                        stack[0].expectIf = false;\n                        stack[0].elseBranch = stack[0];\n                        return [stack[0]];\n                    }\n                    return \":\";\n                }},\n                {regex: /\\\\./, onMatch: function(val, state, stack) {\n                    var ch = val[1];\n                    if (ch == \"}\" && stack.length) {\n                        val = ch;\n                    }else if (\"`$\\\\\".indexOf(ch) != -1) {\n                        val = ch;\n                    } else if (stack.inFormatString) {\n                        if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\n\";\n                        else if (\"ulULE\".indexOf(ch) != -1) {\n                            val = {changeCase: ch, local: ch > \"a\"};\n                        }\n                    }\n\n                    return [val];\n                }},\n                {regex: /}/, onMatch: function(val, state, stack) {\n                    return [stack.length ? stack.shift() : val];\n                }},\n                {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n                {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n                    var t = TabstopToken(str.substr(1), state, stack);\n                    stack.unshift(t[0]);\n                    return t;\n                }, next: \"snippetVar\"},\n                {regex: /\\n/, token: \"newline\", merge: false}\n            ],\n            snippetVar: [\n                {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n                    stack[0].choices = val.slice(1, -1).split(\",\");\n                }, next: \"start\"},\n                {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n                 onMatch: function(val, state, stack) {\n                    var ts = stack[0];\n                    ts.fmtString = val;\n\n                    val = this.splitRegex.exec(val);\n                    ts.guard = val[1];\n                    ts.fmt = val[2];\n                    ts.flag = val[3];\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n                    stack[0].code = val.splice(1, -1);\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n                    if (stack[0])\n                        stack[0].expectIf = true;\n                }, next: \"start\"},\n                {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n            ],\n            formatString: [\n                {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n                {regex: \"\", onMatch: function(val, state, stack) {\n                    stack.inFormatString = true;\n                }, next: \"start\"}\n            ]\n        });\n        SnippetManager.prototype.getTokenizer = function() {\n            return SnippetManager.$tokenizer;\n        };\n        return SnippetManager.$tokenizer;\n    };\n\n    this.tokenizeTmSnippet = function(str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n            return x.value || x;\n        });\n    };\n\n    this.$getDefaultValue = function(editor, name) {\n        if (/^[A-Z]\\d+$/.test(name)) {\n            var i = name.substr(1);\n            return (this.variables[name[0] + \"__\"] || {})[i];\n        }\n        if (/^\\d+$/.test(name)) {\n            return (this.variables.__ || {})[name];\n        }\n        name = name.replace(/^TM_/, \"\");\n\n        if (!editor)\n            return;\n        var s = editor.session;\n        switch(name) {\n            case \"CURRENT_WORD\":\n                var r = s.getWordRange();\n            case \"SELECTION\":\n            case \"SELECTED_TEXT\":\n                return s.getTextRange(r);\n            case \"CURRENT_LINE\":\n                return s.getLine(editor.getCursorPosition().row);\n            case \"PREV_LINE\": // not possible in textmate\n                return s.getLine(editor.getCursorPosition().row - 1);\n            case \"LINE_INDEX\":\n                return editor.getCursorPosition().column;\n            case \"LINE_NUMBER\":\n                return editor.getCursorPosition().row + 1;\n            case \"SOFT_TABS\":\n                return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n            case \"TAB_SIZE\":\n                return s.getTabSize();\n            case \"FILENAME\":\n            case \"FILEPATH\":\n                return \"\";\n            case \"FULLNAME\":\n                return \"Ace\";\n        }\n    };\n    this.variables = {};\n    this.getVariableValue = function(editor, varName) {\n        if (this.variables.hasOwnProperty(varName))\n            return this.variables[varName](editor, varName) || \"\";\n        return this.$getDefaultValue(editor, varName) || \"\";\n    };\n    this.tmStrFormat = function(str, ch, editor) {\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n        var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n        var _self = this;\n        var formatted = str.replace(re, function() {\n            _self.variables.__ = arguments;\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i  = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    } else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                } else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                } else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            return fmtParts.join(\"\");\n        });\n        this.variables.__ = null;\n        return formatted;\n    };\n\n    this.resolveVariables = function(snippet, editor) {\n        var result = [];\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n            } else if (typeof ch != \"object\") {\n                continue;\n            } else if (ch.skip) {\n                gotoNext(ch);\n            } else if (ch.processed < i) {\n                continue;\n            } else if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text);\n                if (value && ch.fmtString)\n                    value = this.tmStrFormat(value, ch);\n                ch.processed = i;\n                if (ch.expectIf == null) {\n                    if (value) {\n                        result.push(value);\n                        gotoNext(ch);\n                    }\n                } else {\n                    if (value) {\n                        ch.skip = ch.elseBranch;\n                    } else\n                        gotoNext(ch);\n                }\n            } else if (ch.tabstopId != null) {\n                result.push(ch);\n            } else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n\n    this.insertSnippetForSelection = function(editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        \n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function(x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function(p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function(t) {return typeof t === \"object\";});\n            if (isNested && !ts.value) {\n                ts.value = value;\n            } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function(ts) {ts.length = 0;});\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || {tabstopId: p.tabstopId};\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p)\n                    expanding[id] = null;\n                continue;\n            }\n            \n            var ts = tabstops[id];\n            var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n            arg.unshift(i + 1, Math.max(0, i1 - i));\n            arg.push(p);\n            expanding[id] = p;\n            tokens.splice.apply(tokens, arg);\n\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function(t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1){\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                } else\n                    column += t.length;\n                text += t;\n            } else {\n                if (!t.start)\n                    t.start = {row: row, column: column};\n                else\n                    t.end = {row: row, column: column};\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    \n    this.insertSnippet = function(editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        \n        editor.forEachSelection(function() {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, {keepOrder: true});\n        \n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n\n    this.$getScope = function(editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        \n        return scope;\n    };\n\n    this.getActiveScopes = function(editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n\n    this.expandWithTab = function(editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function() {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, {keepOrder: true});\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    \n    this.expandSnippetForSelection = function(editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row,\n            cursor.column - snippet.replaceBefore.length,\n            cursor.column + snippet.replaceAfter.length\n        );\n\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n\n    this.findMatchingSnippet = function(snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        \n        if (!snippets) \n            snippets = [];\n        \n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            } else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            \n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            \n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n\n        if (snippets && snippets.content)\n            addSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(addSnippet);\n        \n        this._signal(\"registerSnippets\", {scope: scope});\n    };\n    this.unregister = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope||scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope||scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function(str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                } catch (e) {}\n            } if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            } else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                } else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                } else {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function(name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function() {\n    this.attach = function(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function() {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n\n    this.onChange = function(delta) {\n        var changeRange = delta;\n        var isRemove = delta.action[0] == \"r\";\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n        var colDiff = end.column - start.column;\n\n        if (isRemove) {\n            lineDif = -lineDif;\n            colDiff = -colDiff;\n        }\n        if (!this.$inChange && isRemove) {\n            var ts = this.selectedTabstop;\n            var changedOutside = ts && !ts.some(function(r) {\n                return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n            });\n            if (changedOutside)\n                return this.detach();\n        }\n        var ranges = this.ranges;\n        for (var i = 0; i < ranges.length; i++) {\n            var r = ranges[i];\n            if (r.end.row < start.row)\n                continue;\n\n            if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n                this.removeRange(r);\n                i--;\n                continue;\n            }\n\n            if (r.start.row == startRow && r.start.column > start.column)\n                r.start.column += colDiff;\n            if (r.end.row == startRow && r.end.column >= start.column)\n                r.end.column += colDiff;\n            if (r.start.row >= startRow)\n                r.start.row += lineDif;\n            if (r.end.row >= startRow)\n                r.end.row += lineDif;\n\n            if (comparePoints(r.start, r.end) > 0)\n                this.removeRange(r);\n        }\n        if (!ranges.length)\n            this.detach();\n    };\n    this.updateLinkedFields = function() {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = ts.length; i--;) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function(e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function() {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = this.ranges.length; i--;) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function() {\n        this.detach();\n    };\n    this.tabNext = function(dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function(index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        \n        this.selectedTabstop = ts;\n        if (!this.editor.inVirtualSelectionMode) {        \n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(ts.firstNonLinked.clone());\n            for (var i = ts.length; i--;) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n            if (sel.ranges[0])\n                sel.addRange(sel.ranges[0].clone());\n        } else {\n            this.editor.selection.setRange(ts.firstNonLinked);\n        }\n        \n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.addTabstops = function(tabstops, start, end) {\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function(ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n                \n            for (var i = ts.length; i--;) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                } else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n        }, this);\n        \n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n\n    this.addTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            if  (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function(range) {\n        var i = range.tabstop.indexOf(range);\n        range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        this.ranges.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function(ed) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n                return;\n            }\n\n            ed.tabstopManager.tabNext(1);\n        },\n        \"Shift-Tab\": function(ed) {\n            ed.tabstopManager.tabNext(-1);\n        },\n        \"Esc\": function(ed) {\n            ed.tabstopManager.detach();\n        },\n        \"Return\": function(ed) {\n            return false;\n        }\n    });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n    this.pos.row = row;\n    this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n    this.$insertRight = $insertRight;\n    this.pos = pos; \n    this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n    -moz-box-sizing: border-box;\\\n    box-sizing: border-box;\\\n    background: rgba(194, 193, 208, 0.09);\\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\\n    position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.insertSnippet = function(content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function(options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\ndefine(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"resources\",\"resources\",\"tabStops\",\"resources\",\"utils\",\"actions\",\"ace/config\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\nvar HashHandler = require(\"ace/keyboard/hash_handler\").HashHandler;\nvar Editor = require(\"ace/editor\").Editor;\nvar snippetManager = require(\"ace/snippets\").snippetManager;\nvar Range = require(\"ace/range\").Range;\nvar emmet, emmetPath;\nfunction AceEmmetEditor() {}\n\nAceEmmetEditor.prototype = {\n    setupContext: function(editor) {\n        this.ace = editor;\n        this.indentation = editor.session.getTabString();\n        if (!emmet)\n            emmet = window.emmet;\n        var resources = emmet.resources || emmet.require(\"resources\");\n        resources.setVariable(\"indentation\", this.indentation);\n        this.$syntax = null;\n        this.$syntax = this.getSyntax();\n    },\n    getSelectionRange: function() {\n        var range = this.ace.getSelectionRange();\n        var doc = this.ace.session.doc;\n        return {\n            start: doc.positionToIndex(range.start),\n            end: doc.positionToIndex(range.end)\n        };\n    },\n    createSelection: function(start, end) {\n        var doc = this.ace.session.doc;\n        this.ace.selection.setRange({\n            start: doc.indexToPosition(start),\n            end: doc.indexToPosition(end)\n        });\n    },\n    getCurrentLineRange: function() {\n        var ace = this.ace;\n        var row = ace.getCursorPosition().row;\n        var lineLength = ace.session.getLine(row).length;\n        var index = ace.session.doc.positionToIndex({row: row, column: 0});\n        return {\n            start: index,\n            end: index + lineLength\n        };\n    },\n    getCaretPos: function(){\n        var pos = this.ace.getCursorPosition();\n        return this.ace.session.doc.positionToIndex(pos);\n    },\n    setCaretPos: function(index){\n        var pos = this.ace.session.doc.indexToPosition(index);\n        this.ace.selection.moveToPosition(pos);\n    },\n    getCurrentLine: function() {\n        var row = this.ace.getCursorPosition().row;\n        return this.ace.session.getLine(row);\n    },\n    replaceContent: function(value, start, end, noIndent) {\n        if (end == null)\n            end = start == null ? this.getContent().length : start;\n        if (start == null)\n            start = 0;        \n        \n        var editor = this.ace;\n        var doc = editor.session.doc;\n        var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end));\n        editor.session.remove(range);\n        \n        range.end = range.start;\n        \n        value = this.$updateTabstops(value);\n        snippetManager.insertSnippet(editor, value);\n    },\n    getContent: function(){\n        return this.ace.getValue();\n    },\n    getSyntax: function() {\n        if (this.$syntax)\n            return this.$syntax;\n        var syntax = this.ace.session.$modeId.split(\"/\").pop();\n        if (syntax == \"html\" || syntax == \"php\") {\n            var cursor = this.ace.getCursorPosition();\n            var state = this.ace.session.getState(cursor.row);\n            if (typeof state != \"string\")\n                state = state[0];\n            if (state) {\n                state = state.split(\"-\");\n                if (state.length > 1)\n                    syntax = state[0];\n                else if (syntax == \"php\")\n                    syntax = \"html\";\n            }\n        }\n        return syntax;\n    },\n    getProfileName: function() {\n        var resources = emmet.resources || emmet.require(\"resources\");\n        switch (this.getSyntax()) {\n          case \"css\": return \"css\";\n          case \"xml\":\n          case \"xsl\":\n            return \"xml\";\n          case \"html\":\n            var profile = resources.getVariable(\"profile\");\n            if (!profile)\n                profile = this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i) != -1 ? \"xhtml\": \"html\";\n            return profile;\n          default:\n            var mode = this.ace.session.$mode;\n            return mode.emmetConfig && mode.emmetConfig.profile || \"xhtml\";\n        }\n    },\n    prompt: function(title) {\n        return prompt(title);\n    },\n    getSelection: function() {\n        return this.ace.session.getTextRange();\n    },\n    getFilePath: function() {\n        return \"\";\n    },\n    $updateTabstops: function(value) {\n        var base = 1000;\n        var zeroBase = 0;\n        var lastZero = null;\n        var ts = emmet.tabStops || emmet.require('tabStops');\n        var resources = emmet.resources || emmet.require(\"resources\");\n        var settings = resources.getVocabulary(\"user\");\n        var tabstopOptions = {\n            tabstop: function(data) {\n                var group = parseInt(data.group, 10);\n                var isZero = group === 0;\n                if (isZero)\n                    group = ++zeroBase;\n                else\n                    group += base;\n\n                var placeholder = data.placeholder;\n                if (placeholder) {\n                    placeholder = ts.processText(placeholder, tabstopOptions);\n                }\n\n                var result = '${' + group + (placeholder ? ':' + placeholder : '') + '}';\n\n                if (isZero) {\n                    lastZero = [data.start, result];\n                }\n\n                return result;\n            },\n            escape: function(ch) {\n                if (ch == '$') return '\\\\$';\n                if (ch == '\\\\') return '\\\\\\\\';\n                return ch;\n            }\n        };\n\n        value = ts.processText(value, tabstopOptions);\n\n        if (settings.variables['insert_final_tabstop'] && !/\\$\\{0\\}$/.test(value)) {\n            value += '${0}';\n        } else if (lastZero) {\n            var common = emmet.utils ? emmet.utils.common : emmet.require('utils');\n            value = common.replaceSubstring(value, '${0}', lastZero[0], lastZero[1]);\n        }\n        \n        return value;\n    }\n};\n\n\nvar keymap = {\n    expand_abbreviation: {\"mac\": \"ctrl+alt+e\", \"win\": \"alt+e\"},\n    match_pair_outward: {\"mac\": \"ctrl+d\", \"win\": \"ctrl+,\"},\n    match_pair_inward: {\"mac\": \"ctrl+j\", \"win\": \"ctrl+shift+0\"},\n    matching_pair: {\"mac\": \"ctrl+alt+j\", \"win\": \"alt+j\"},\n    next_edit_point: \"alt+right\",\n    prev_edit_point: \"alt+left\",\n    toggle_comment: {\"mac\": \"command+/\", \"win\": \"ctrl+/\"},\n    split_join_tag: {\"mac\": \"shift+command+'\", \"win\": \"shift+ctrl+`\"},\n    remove_tag: {\"mac\": \"command+'\", \"win\": \"shift+ctrl+;\"},\n    evaluate_math_expression: {\"mac\": \"shift+command+y\", \"win\": \"shift+ctrl+y\"},\n    increment_number_by_1: \"ctrl+up\",\n    decrement_number_by_1: \"ctrl+down\",\n    increment_number_by_01: \"alt+up\",\n    decrement_number_by_01: \"alt+down\",\n    increment_number_by_10: {\"mac\": \"alt+command+up\", \"win\": \"shift+alt+up\"},\n    decrement_number_by_10: {\"mac\": \"alt+command+down\", \"win\": \"shift+alt+down\"},\n    select_next_item: {\"mac\": \"shift+command+.\", \"win\": \"shift+ctrl+.\"},\n    select_previous_item: {\"mac\": \"shift+command+,\", \"win\": \"shift+ctrl+,\"},\n    reflect_css_value: {\"mac\": \"shift+command+r\", \"win\": \"shift+ctrl+r\"},\n\n    encode_decode_data_url: {\"mac\": \"shift+ctrl+d\", \"win\": \"ctrl+'\"},\n    expand_abbreviation_with_tab: \"Tab\",\n    wrap_with_abbreviation: {\"mac\": \"shift+ctrl+a\", \"win\": \"shift+ctrl+a\"}\n};\n\nvar editorProxy = new AceEmmetEditor();\nexports.commands = new HashHandler();\nexports.runEmmetCommand = function runEmmetCommand(editor) {\n    try {\n        editorProxy.setupContext(editor);\n        var actions = emmet.actions || emmet.require(\"actions\");\n    \n        if (this.action == \"expand_abbreviation_with_tab\") {\n            if (!editor.selection.isEmpty())\n                return false;\n            var pos = editor.selection.lead;\n            var token = editor.session.getTokenAt(pos.row, pos.column);\n            if (token && /\\btag\\b/.test(token.type))\n                return false;\n        }\n        \n        if (this.action == \"wrap_with_abbreviation\") {\n            return setTimeout(function() {\n                actions.run(\"wrap_with_abbreviation\", editorProxy);\n            }, 0);\n        }\n        \n        var result = actions.run(this.action, editorProxy);\n    } catch(e) {\n        if (!emmet) {\n            exports.load(runEmmetCommand.bind(this, editor));\n            return true;\n        }\n        editor._signal(\"changeStatus\", typeof e == \"string\" ? e : e.message);\n        console.log(e);\n        result = false;\n    }\n    return result;\n};\n\nfor (var command in keymap) {\n    exports.commands.addCommand({\n        name: \"emmet:\" + command,\n        action: command,\n        bindKey: keymap[command],\n        exec: exports.runEmmetCommand,\n        multiSelectAction: \"forEach\"\n    });\n}\n\nexports.updateCommands = function(editor, enabled) {\n    if (enabled) {\n        editor.keyBinding.addKeyboardHandler(exports.commands);\n    } else {\n        editor.keyBinding.removeKeyboardHandler(exports.commands);\n    }\n};\n\nexports.isSupportedMode = function(mode) {\n    if (!mode) return false;\n    if (mode.emmetConfig) return true;\n    var id = mode.$id || mode;\n    return /css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(id);\n};\n\nexports.isAvailable = function(editor, command) {\n    if (/(evaluate_math_expression|expand_abbreviation)$/.test(command))\n        return true;\n    var mode = editor.session.$mode;\n    var isSupported = exports.isSupportedMode(mode);\n    if (isSupported && mode.$modes) {\n        try {\n            editorProxy.setupContext(editor);\n            if (/js|php/.test(editorProxy.getSyntax()))\n                isSupported = false;\n        } catch(e) {}\n    }\n    return isSupported;\n};\n\nvar onChangeMode = function(e, target) {\n    var editor = target;\n    if (!editor)\n        return;\n    var enabled = exports.isSupportedMode(editor.session.$mode);\n    if (e.enableEmmet === false)\n        enabled = false;\n    if (enabled)\n        exports.load();\n    exports.updateCommands(editor, enabled);\n};\n\nexports.load = function(cb) {\n    if (typeof emmetPath == \"string\") {\n        require(\"ace/config\").loadModule(emmetPath, function() {\n            emmetPath = null;\n            cb && cb();\n        });\n    }\n};\n\nexports.AceEmmetEditor = AceEmmetEditor;\nrequire(\"ace/config\").defineOptions(Editor.prototype, \"editor\", {\n    enableEmmet: {\n        set: function(val) {\n            this[val ? \"on\" : \"removeListener\"](\"changeMode\", onChangeMode);\n            onChangeMode({enableEmmet: !!val}, this);\n        },\n        value: true\n    }\n});\n\nexports.setCore = function(e) {\n    if (typeof e == \"string\")\n       emmetPath = e;\n    else\n       emmet = e;\n};\n});\n\ndefine(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\n\nvar $singleLineEditor = function(el) {\n    var renderer = new Renderer(el);\n\n    renderer.$maxLines = 4;\n\n    var editor = new Editor(renderer);\n\n    editor.setHighlightActiveLine(false);\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n\n    editor.$mouseHandler.$focusTimeout = 0;\n    editor.$highlightTagPending = true;\n\n    return editor;\n};\n\nvar AcePopup = function(parentNode) {\n    var el = dom.createElement(\"div\");\n    var popup = new $singleLineEditor(el);\n\n    if (parentNode)\n        parentNode.appendChild(el);\n    el.style.display = \"none\";\n    popup.renderer.content.style.cursor = \"default\";\n    popup.renderer.setStyle(\"ace_autocomplete\");\n\n    popup.setOption(\"displayIndentGuides\", false);\n    popup.setOption(\"dragDelay\", 150);\n\n    var noop = function(){};\n\n    popup.focus = noop;\n    popup.$isFocused = true;\n\n    popup.renderer.$cursorLayer.restartTimer = noop;\n    popup.renderer.$cursorLayer.element.style.opacity = 0;\n\n    popup.renderer.$maxLines = 8;\n    popup.renderer.$keepTextAreaAtCursor = false;\n\n    popup.setHighlightActiveLine(false);\n    popup.session.highlight(\"\");\n    popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n\n    popup.on(\"mousedown\", function(e) {\n        var pos = e.getDocumentPosition();\n        popup.selection.moveToPosition(pos);\n        selectionMarker.start.row = selectionMarker.end.row = pos.row;\n        e.stop();\n    });\n\n    var lastMouseEvent;\n    var hoverMarker = new Range(-1,0,-1,Infinity);\n    var selectionMarker = new Range(-1,0,-1,Infinity);\n    selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n    popup.setSelectOnHover = function(val) {\n        if (!val) {\n            hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n        } else if (hoverMarker.id) {\n            popup.session.removeMarker(hoverMarker.id);\n            hoverMarker.id = null;\n        }\n    };\n    popup.setSelectOnHover(false);\n    popup.on(\"mousemove\", function(e) {\n        if (!lastMouseEvent) {\n            lastMouseEvent = e;\n            return;\n        }\n        if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n            return;\n        }\n        lastMouseEvent = e;\n        lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n        var row = lastMouseEvent.getDocumentPosition().row;\n        if (hoverMarker.start.row != row) {\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row);\n        }\n    });\n    popup.renderer.on(\"beforeRender\", function() {\n        if (lastMouseEvent && hoverMarker.start.row != -1) {\n            lastMouseEvent.$pos = null;\n            var row = lastMouseEvent.getDocumentPosition().row;\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row, true);\n        }\n    });\n    popup.renderer.on(\"afterRender\", function() {\n        var row = popup.getRow();\n        var t = popup.renderer.$textLayer;\n        var selected = t.element.childNodes[row - t.config.firstRow];\n        if (selected !== t.selectedNode && t.selectedNode)\n            dom.removeCssClass(t.selectedNode, \"ace_selected\");\n        t.selectedNode = selected;\n        if (selected)\n            dom.addCssClass(selected, \"ace_selected\");\n    });\n    var hideHoverMarker = function() { setHoverMarker(-1); };\n    var setHoverMarker = function(row, suppressRedraw) {\n        if (row !== hoverMarker.start.row) {\n            hoverMarker.start.row = hoverMarker.end.row = row;\n            if (!suppressRedraw)\n                popup.session._emit(\"changeBackMarker\");\n            popup._emit(\"changeHoverMarker\");\n        }\n    };\n    popup.getHoveredRow = function() {\n        return hoverMarker.start.row;\n    };\n\n    event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n    popup.on(\"hide\", hideHoverMarker);\n    popup.on(\"changeSelection\", hideHoverMarker);\n\n    popup.session.doc.getLength = function() {\n        return popup.data.length;\n    };\n    popup.session.doc.getLine = function(i) {\n        var data = popup.data[i];\n        if (typeof data == \"string\")\n            return data;\n        return (data && data.value) || \"\";\n    };\n\n    var bgTokenizer = popup.session.bgTokenizer;\n    bgTokenizer.$tokenizeRow = function(row) {\n        var data = popup.data[row];\n        var tokens = [];\n        if (!data)\n            return tokens;\n        if (typeof data == \"string\")\n            data = {value: data};\n        var caption = data.caption || data.value || data.name;\n\n        function addToken(value, className) {\n            value && tokens.push({\n                type: (data.className || \"\") + (className || \"\"), \n                value: value\n            });\n        }\n        \n        var lower = caption.toLowerCase();\n        var filterText = (popup.filterText || \"\").toLowerCase();\n        var lastIndex = 0;\n        var lastI = 0;\n        for (var i = 0; i <= filterText.length; i++) {\n            if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n                var sub = filterText.slice(lastI, i);\n                lastI = i;\n                var index = lower.indexOf(sub, lastIndex);\n                if (index == -1) continue;\n                addToken(caption.slice(lastIndex, index), \"\");\n                lastIndex = index + sub.length;\n                addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n            }\n        }\n        addToken(caption.slice(lastIndex, caption.length), \"\");\n        \n        if (data.meta)\n            tokens.push({type: \"completion-meta\", value: data.meta});\n\n        return tokens;\n    };\n    bgTokenizer.$updateOnChange = noop;\n    bgTokenizer.start = noop;\n\n    popup.session.$computeWidth = function() {\n        return this.screenWidth = 0;\n    };\n    popup.isOpen = false;\n    popup.isTopdown = false;\n    popup.autoSelect = true;\n    popup.filterText = \"\";\n\n    popup.data = [];\n    popup.setData = function(list, filterText) {\n        popup.filterText = filterText || \"\";\n        popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n        popup.data = list || [];\n        popup.setRow(0);\n    };\n    popup.getData = function(row) {\n        return popup.data[row];\n    };\n\n    popup.getRow = function() {\n        return selectionMarker.start.row;\n    };\n    popup.setRow = function(line) {\n        line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n        if (selectionMarker.start.row != line) {\n            popup.selection.clearSelection();\n            selectionMarker.start.row = selectionMarker.end.row = line || 0;\n            popup.session._emit(\"changeBackMarker\");\n            popup.moveCursorTo(line || 0, 0);\n            if (popup.isOpen)\n                popup._signal(\"select\");\n        }\n    };\n\n    popup.on(\"changeSelection\", function() {\n        if (popup.isOpen)\n            popup.setRow(popup.selection.lead.row);\n        popup.renderer.scrollCursorIntoView();\n    });\n\n    popup.hide = function() {\n        this.container.style.display = \"none\";\n        this._signal(\"hide\");\n        popup.isOpen = false;\n    };\n    popup.show = function(pos, lineHeight, topdownOnly) {\n        var el = this.container;\n        var screenHeight = window.innerHeight;\n        var screenWidth = window.innerWidth;\n        var renderer = this.renderer;\n        var maxH = renderer.$maxLines * lineHeight * 1.4;\n        var top = pos.top + this.$borderSize;\n        var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n        if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n            renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n            el.style.top = \"\";\n            el.style.bottom = screenHeight - top + \"px\";\n            popup.isTopdown = false;\n        } else {\n            top += lineHeight;\n            renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n            el.style.top = top + \"px\";\n            el.style.bottom = \"\";\n            popup.isTopdown = true;\n        }\n\n        el.style.display = \"\";\n\n        var left = pos.left;\n        if (left + el.offsetWidth > screenWidth)\n            left = screenWidth - el.offsetWidth;\n\n        el.style.left = left + \"px\";\n\n        this._signal(\"show\");\n        lastMouseEvent = null;\n        popup.isOpen = true;\n    };\n\n    popup.getTextLeftOffset = function() {\n        return this.$borderSize + this.renderer.$padding + this.$imageSize;\n    };\n\n    popup.$imageSize = 0;\n    popup.$borderSize = 1;\n\n    return popup;\n};\n\ndom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n    background-color: #CAD6FA;\\\n    z-index: 1;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n    background-color: #3a674e;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n    border: 1px solid #abbffe;\\\n    margin-top: -1px;\\\n    background: rgba(233,233,253,0.4);\\\n    position: absolute;\\\n    z-index: 2;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\\n    border: 1px solid rgba(109, 150, 13, 0.8);\\\n    background: rgba(58, 103, 78, 0.62);\\\n}\\\n.ace_completion-meta {\\\n    opacity: 0.5;\\\n    margin: 0.9em;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n    color: #2d69c7;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n    color: #93ca12;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n    width: 300px;\\\n    z-index: 200000;\\\n    border: 1px lightgray solid;\\\n    position: fixed;\\\n    box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n    line-height: 1.4;\\\n    background: #fefefe;\\\n    color: #111;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete {\\\n    border: 1px #484747 solid;\\\n    box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\\n    line-height: 1.4;\\\n    background: #25282c;\\\n    color: #c1c1c1;\\\n}\", \"autocompletion.css\");\n\nexports.AcePopup = AcePopup;\n\n});\n\ndefine(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.parForEach = function(array, fn, callback) {\n    var completed = 0;\n    var arLength = array.length;\n    if (arLength === 0)\n        callback();\n    for (var i = 0; i < arLength; i++) {\n        fn(array[i], function(result, err) {\n            completed++;\n            if (completed === arLength)\n                callback(result, err);\n        });\n    }\n};\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;\n\nexports.retrievePrecedingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos-1; i >= 0; i--) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf.reverse().join(\"\");\n};\n\nexports.retrieveFollowingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos; i < text.length; i++) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf;\n};\n\nexports.getCompletionPrefix = function (editor) {\n    var pos = editor.getCursorPosition();\n    var line = editor.session.getLine(pos.row);\n    var prefix;\n    editor.completers.forEach(function(completer) {\n        if (completer.identifierRegexps) {\n            completer.identifierRegexps.forEach(function(identifierRegex) {\n                if (!prefix && identifierRegex)\n                    prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n            }.bind(this));\n        }\n    }.bind(this));\n    return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\ndefine(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\"], function(require, exports, module) {\n\"use strict\";\n\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\n\nvar Autocomplete = function() {\n    this.autoInsert = false;\n    this.autoSelect = true;\n    this.exactMatch = false;\n    this.gatherCompletionsId = 0;\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys(this.commands);\n\n    this.blurListener = this.blurListener.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.mousedownListener = this.mousedownListener.bind(this);\n    this.mousewheelListener = this.mousewheelListener.bind(this);\n\n    this.changeTimer = lang.delayedCall(function() {\n        this.updateCompletions(true);\n    }.bind(this));\n\n    this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n\n(function() {\n\n    this.$init = function() {\n        this.popup = new AcePopup(document.body || document.documentElement);\n        this.popup.on(\"click\", function(e) {\n            this.insertMatch();\n            e.stop();\n        }.bind(this));\n        this.popup.focus = this.editor.focus.bind(this.editor);\n        this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n        return this.popup;\n    };\n\n    this.getPopup = function() {\n        return this.popup || this.$init();\n    };\n\n    this.openPopup = function(editor, prefix, keepPopupPosition) {\n        if (!this.popup)\n            this.$init();\n\n        this.popup.autoSelect = this.autoSelect;\n\n        this.popup.setData(this.completions.filtered, this.completions.filterText);\n\n        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        \n        var renderer = editor.renderer;\n        this.popup.setRow(this.autoSelect ? 0 : -1);\n        if (!keepPopupPosition) {\n            this.popup.setTheme(editor.getTheme());\n            this.popup.setFontSize(editor.getFontSize());\n\n            var lineHeight = renderer.layerConfig.lineHeight;\n\n            var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n            pos.left -= this.popup.getTextLeftOffset();\n\n            var rect = editor.container.getBoundingClientRect();\n            pos.top += rect.top - renderer.layerConfig.offset;\n            pos.left += rect.left - editor.renderer.scrollLeft;\n            pos.left += renderer.gutterWidth;\n\n            this.popup.show(pos, lineHeight);\n        } else if (keepPopupPosition && !prefix) {\n            this.detach();\n        }\n    };\n\n    this.detach = function() {\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.off(\"changeSelection\", this.changeListener);\n        this.editor.off(\"blur\", this.blurListener);\n        this.editor.off(\"mousedown\", this.mousedownListener);\n        this.editor.off(\"mousewheel\", this.mousewheelListener);\n        this.changeTimer.cancel();\n        this.hideDocTooltip();\n\n        this.gatherCompletionsId += 1;\n        if (this.popup && this.popup.isOpen)\n            this.popup.hide();\n\n        if (this.base)\n            this.base.detach();\n        this.activated = false;\n        this.completions = this.base = null;\n    };\n\n    this.changeListener = function(e) {\n        var cursor = this.editor.selection.lead;\n        if (cursor.row != this.base.row || cursor.column < this.base.column) {\n            this.detach();\n        }\n        if (this.activated)\n            this.changeTimer.schedule();\n        else\n            this.detach();\n    };\n\n    this.blurListener = function(e) {\n        var el = document.activeElement;\n        var text = this.editor.textInput.getElement();\n        var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n        var container = this.popup && this.popup.container;\n        if (el != text && el.parentNode != container && !fromTooltip\n            && el != this.tooltipNode && e.relatedTarget != text\n        ) {\n            this.detach();\n        }\n    };\n\n    this.mousedownListener = function(e) {\n        this.detach();\n    };\n\n    this.mousewheelListener = function(e) {\n        this.detach();\n    };\n\n    this.goTo = function(where) {\n        var row = this.popup.getRow();\n        var max = this.popup.session.getLength() - 1;\n\n        switch(where) {\n            case \"up\": row = row <= 0 ? max : row - 1; break;\n            case \"down\": row = row >= max ? -1 : row + 1; break;\n            case \"start\": row = 0; break;\n            case \"end\": row = max; break;\n        }\n\n        this.popup.setRow(row);\n    };\n\n    this.insertMatch = function(data, options) {\n        if (!data)\n            data = this.popup.getData(this.popup.getRow());\n        if (!data)\n            return false;\n\n        if (data.completer && data.completer.insertMatch) {\n            data.completer.insertMatch(this.editor, data);\n        } else {\n            if (this.completions.filterText) {\n                var ranges = this.editor.selection.getAllRanges();\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= this.completions.filterText.length;\n                    this.editor.session.remove(range);\n                }\n            }\n            if (data.snippet)\n                snippetManager.insertSnippet(this.editor, data.snippet);\n            else\n                this.editor.execCommand(\"insertstring\", data.value || data);\n        }\n        this.detach();\n    };\n\n\n    this.commands = {\n        \"Up\": function(editor) { editor.completer.goTo(\"up\"); },\n        \"Down\": function(editor) { editor.completer.goTo(\"down\"); },\n        \"Ctrl-Up|Ctrl-Home\": function(editor) { editor.completer.goTo(\"start\"); },\n        \"Ctrl-Down|Ctrl-End\": function(editor) { editor.completer.goTo(\"end\"); },\n\n        \"Esc\": function(editor) { editor.completer.detach(); },\n        \"Return\": function(editor) { return editor.completer.insertMatch(); },\n        \"Shift-Return\": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); },\n        \"Tab\": function(editor) {\n            var result = editor.completer.insertMatch();\n            if (!result && !editor.tabstopManager)\n                editor.completer.goTo(\"down\");\n            else\n                return result;\n        },\n\n        \"PageUp\": function(editor) { editor.completer.popup.gotoPageUp(); },\n        \"PageDown\": function(editor) { editor.completer.popup.gotoPageDown(); }\n    };\n\n    this.gatherCompletions = function(editor, callback) {\n        var session = editor.getSession();\n        var pos = editor.getCursorPosition();\n\n        var prefix = util.getCompletionPrefix(editor);\n\n        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n        this.base.$insertRight = true;\n\n        var matches = [];\n        var total = editor.completers.length;\n        editor.completers.forEach(function(completer, i) {\n            completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n                if (!err && results)\n                    matches = matches.concat(results);\n                callback(null, {\n                    prefix: util.getCompletionPrefix(editor),\n                    matches: matches,\n                    finished: (--total === 0)\n                });\n            });\n        });\n        return true;\n    };\n\n    this.showPopup = function(editor) {\n        if (this.editor)\n            this.detach();\n\n        this.activated = true;\n\n        this.editor = editor;\n        if (editor.completer != this) {\n            if (editor.completer)\n                editor.completer.detach();\n            editor.completer = this;\n        }\n\n        editor.on(\"changeSelection\", this.changeListener);\n        editor.on(\"blur\", this.blurListener);\n        editor.on(\"mousedown\", this.mousedownListener);\n        editor.on(\"mousewheel\", this.mousewheelListener);\n\n        this.updateCompletions();\n    };\n\n    this.updateCompletions = function(keepPopupPosition) {\n        if (keepPopupPosition && this.base && this.completions) {\n            var pos = this.editor.getCursorPosition();\n            var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n            if (prefix == this.completions.filterText)\n                return;\n            this.completions.setFilter(prefix);\n            if (!this.completions.filtered.length)\n                return this.detach();\n            if (this.completions.filtered.length == 1\n            && this.completions.filtered[0].value == prefix\n            && !this.completions.filtered[0].snippet)\n                return this.detach();\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            return;\n        }\n        var _id = this.gatherCompletionsId;\n        this.gatherCompletions(this.editor, function(err, results) {\n            var detachIfFinished = function() {\n                if (!results.finished) return;\n                return this.detach();\n            }.bind(this);\n\n            var prefix = results.prefix;\n            var matches = results && results.matches;\n\n            if (!matches || !matches.length)\n                return detachIfFinished();\n            if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n                return;\n\n            this.completions = new FilteredList(matches);\n\n            if (this.exactMatch)\n                this.completions.exactMatch = true;\n\n            this.completions.setFilter(prefix);\n            var filtered = this.completions.filtered;\n            if (!filtered.length)\n                return detachIfFinished();\n            if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n                return detachIfFinished();\n            if (this.autoInsert && filtered.length == 1 && results.finished)\n                return this.insertMatch(filtered[0]);\n\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n        }.bind(this));\n    };\n\n    this.cancelContextMenu = function() {\n        this.editor.$mouseHandler.cancelContextMenu();\n    };\n\n    this.updateDocTooltip = function() {\n        var popup = this.popup;\n        var all = popup.data;\n        var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n        var doc = null;\n        if (!selected || !this.editor || !this.popup.isOpen)\n            return this.hideDocTooltip();\n        this.editor.completers.some(function(completer) {\n            if (completer.getDocTooltip)\n                doc = completer.getDocTooltip(selected);\n            return doc;\n        });\n        if (!doc)\n            doc = selected;\n\n        if (typeof doc == \"string\")\n            doc = {docText: doc};\n        if (!doc || !(doc.docHTML || doc.docText))\n            return this.hideDocTooltip();\n        this.showDocTooltip(doc);\n    };\n\n    this.showDocTooltip = function(item) {\n        if (!this.tooltipNode) {\n            this.tooltipNode = dom.createElement(\"div\");\n            this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n            this.tooltipNode.style.margin = 0;\n            this.tooltipNode.style.pointerEvents = \"auto\";\n            this.tooltipNode.tabIndex = -1;\n            this.tooltipNode.onblur = this.blurListener.bind(this);\n            this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n        }\n\n        var tooltipNode = this.tooltipNode;\n        if (item.docHTML) {\n            tooltipNode.innerHTML = item.docHTML;\n        } else if (item.docText) {\n            tooltipNode.textContent = item.docText;\n        }\n\n        if (!tooltipNode.parentNode)\n            document.body.appendChild(tooltipNode);\n        var popup = this.popup;\n        var rect = popup.container.getBoundingClientRect();\n        tooltipNode.style.top = popup.container.style.top;\n        tooltipNode.style.bottom = popup.container.style.bottom;\n\n        tooltipNode.style.display = \"block\";\n        if (window.innerWidth - rect.right < 320) {\n            if (rect.left < 320) {\n                if(popup.isTopdown) {\n                    tooltipNode.style.top = rect.bottom + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                } else {\n                    tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                }\n            } else {\n                tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n                tooltipNode.style.left = \"\";\n            }\n        } else {\n            tooltipNode.style.left = (rect.right + 1) + \"px\";\n            tooltipNode.style.right = \"\";\n        }\n    };\n\n    this.hideDocTooltip = function() {\n        this.tooltipTimer.cancel();\n        if (!this.tooltipNode) return;\n        var el = this.tooltipNode;\n        if (!this.editor.isFocused() && document.activeElement == el)\n            this.editor.focus();\n        this.tooltipNode = null;\n        if (el.parentNode)\n            el.parentNode.removeChild(el);\n    };\n    \n    this.onTooltipClick = function(e) {\n        var a = e.target;\n        while (a && a != this.tooltipNode) {\n            if (a.nodeName == \"A\" && a.href) {\n                a.rel = \"noreferrer\";\n                a.target = \"_blank\";\n                break;\n            }\n            a = a.parentNode;\n        }\n    };\n\n}).call(Autocomplete.prototype);\n\nAutocomplete.startCommand = {\n    name: \"startAutocomplete\",\n    exec: function(editor) {\n        if (!editor.completer)\n            editor.completer = new Autocomplete();\n        editor.completer.autoInsert = false;\n        editor.completer.autoSelect = true;\n        editor.completer.showPopup(editor);\n        editor.completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\n\nvar FilteredList = function(array, filterText) {\n    this.all = array;\n    this.filtered = array;\n    this.filterText = filterText || \"\";\n    this.exactMatch = false;\n};\n(function(){\n    this.setFilter = function(str) {\n        if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n            var matches = this.filtered;\n        else\n            var matches = this.all;\n\n        this.filterText = str;\n        matches = this.filterCompletions(matches, this.filterText);\n        matches = matches.sort(function(a, b) {\n            return b.exactMatch - a.exactMatch || b.$score - a.$score \n                || (a.caption || a.value) < (b.caption || b.value);\n        });\n        var prev = null;\n        matches = matches.filter(function(item){\n            var caption = item.snippet || item.caption || item.value;\n            if (caption === prev) return false;\n            prev = caption;\n            return true;\n        });\n\n        this.filtered = matches;\n    };\n    this.filterCompletions = function(items, needle) {\n        var results = [];\n        var upper = needle.toUpperCase();\n        var lower = needle.toLowerCase();\n        loop: for (var i = 0, item; item = items[i]; i++) {\n            var caption = item.caption || item.value || item.snippet;\n            if (!caption) continue;\n            var lastIndex = -1;\n            var matchMask = 0;\n            var penalty = 0;\n            var index, distance;\n\n            if (this.exactMatch) {\n                if (needle !== caption.substr(0, needle.length))\n                    continue loop;\n            } else {\n                var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n                if (fullMatchIndex > -1) {\n                    penalty = fullMatchIndex;\n                } else {\n                    for (var j = 0; j < needle.length; j++) {\n                        var i1 = caption.indexOf(lower[j], lastIndex + 1);\n                        var i2 = caption.indexOf(upper[j], lastIndex + 1);\n                        index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n                        if (index < 0)\n                            continue loop;\n                        distance = index - lastIndex - 1;\n                        if (distance > 0) {\n                            if (lastIndex === -1)\n                                penalty += 10;\n                            penalty += distance;\n                            matchMask = matchMask | (1 << j);\n                        }\n                        lastIndex = index;\n                    }\n                }\n            }\n            item.matchMask = matchMask;\n            item.exactMatch = penalty ? 0 : 1;\n            item.$score = (item.score || 0) - penalty;\n            results.push(item);\n        }\n        return results;\n    };\n}).call(FilteredList.prototype);\n\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\ndefine(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n    var Range = require(\"../range\").Range;\n    \n    var splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n\n    function getWordIndex(doc, pos) {\n        var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));\n        return textBefore.split(splitRegex).length - 1;\n    }\n    function wordDistance(doc, pos) {\n        var prefixPos = getWordIndex(doc, pos);\n        var words = doc.getValue().split(splitRegex);\n        var wordScores = Object.create(null);\n        \n        var currentWord = words[prefixPos];\n\n        words.forEach(function(word, idx) {\n            if (!word || word === currentWord) return;\n\n            var distance = Math.abs(prefixPos - idx);\n            var score = words.length - distance;\n            if (wordScores[word]) {\n                wordScores[word] = Math.max(score, wordScores[word]);\n            } else {\n                wordScores[word] = score;\n            }\n        });\n        return wordScores;\n    }\n\n    exports.getCompletions = function(editor, session, pos, prefix, callback) {\n        var wordScore = wordDistance(session, pos);\n        var wordList = Object.keys(wordScore);\n        callback(null, wordList.map(function(word) {\n            return {\n                caption: word,\n                value: word,\n                score: wordScore[word],\n                meta: \"local\"\n            };\n        }));\n    };\n});\n\ndefine(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\n\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        if (session.$mode.completer) {\n            return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n        }\n        var state = editor.session.getState(pos.row);\n        var completions = session.$mode.getCompletions(state, session, pos, prefix);\n        callback(null, completions);\n    }\n};\n\nvar snippetCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        var scopes = [];\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n            scopes.push('html-tag');\n        else\n            scopes = snippetManager.getActiveScopes(editor);\n\n        var snippetMap = snippetManager.snippetMap;\n        var completions = [];\n        scopes.forEach(function(scope) {\n            var snippets = snippetMap[scope] || [];\n            for (var i = snippets.length; i--;) {\n                var s = snippets[i];\n                var caption = s.name || s.tabTrigger;\n                if (!caption)\n                    continue;\n                completions.push({\n                    caption: caption,\n                    snippet: s.content,\n                    meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n                    type: \"snippet\"\n                });\n            }\n        }, this);\n        callback(null, completions);\n    },\n    getDocTooltip: function(item) {\n        if (item.type == \"snippet\" && !item.docHTML) {\n            item.docHTML = [\n                \"<b>\", lang.escapeHTML(item.caption), \"</b>\", \"<hr></hr>\",\n                lang.escapeHTML(item.snippet)\n            ].join(\"\");\n        }\n    }\n};\n\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function(val) {\n    completers.length = 0;\n    if (val) completers.push.apply(completers, val);\n};\nexports.addCompleter = function(completer) {\n    completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\n\nvar expandSnippet = {\n    name: \"expandSnippet\",\n    exec: function(editor) {\n        return snippetManager.expandWithTab(editor);\n    },\n    bindKey: \"Tab\"\n};\n\nvar onChangeMode = function(e, editor) {\n    loadSnippetsForMode(editor.session.$mode);\n};\n\nvar loadSnippetsForMode = function(mode) {\n    var id = mode.$id;\n    if (!snippetManager.files)\n        snippetManager.files = {};\n    loadSnippetFile(id);\n    if (mode.modes)\n        mode.modes.forEach(loadSnippetsForMode);\n};\n\nvar loadSnippetFile = function(id) {\n    if (!id || snippetManager.files[id])\n        return;\n    var snippetFilePath = id.replace(\"mode\", \"snippets\");\n    snippetManager.files[id] = {};\n    config.loadModule(snippetFilePath, function(m) {\n        if (m) {\n            snippetManager.files[id] = m;\n            if (!m.snippets && m.snippetText)\n                m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n            snippetManager.register(m.snippets || [], m.scope);\n            if (m.includeScopes) {\n                snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n                m.includeScopes.forEach(function(x) {\n                    loadSnippetFile(\"ace/mode/\" + x);\n                });\n            }\n        }\n    });\n};\n\nvar doLiveAutocomplete = function(e) {\n    var editor = e.editor;\n    var hasCompleter = editor.completer && editor.completer.activated;\n    if (e.command.name === \"backspace\") {\n        if (hasCompleter && !util.getCompletionPrefix(editor))\n            editor.completer.detach();\n    }\n    else if (e.command.name === \"insertstring\") {\n        var prefix = util.getCompletionPrefix(editor);\n        if (prefix && !hasCompleter) {\n            if (!editor.completer) {\n                editor.completer = new Autocomplete();\n            }\n            editor.completer.autoInsert = false;\n            editor.completer.showPopup(editor);\n        }\n    }\n};\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableBasicAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                this.commands.addCommand(Autocomplete.startCommand);\n            } else {\n                this.commands.removeCommand(Autocomplete.startCommand);\n            }\n        },\n        value: false\n    },\n    enableLiveAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                this.commands.on('afterExec', doLiveAutocomplete);\n            } else {\n                this.commands.removeListener('afterExec', doLiveAutocomplete);\n            }\n        },\n        value: false\n    },\n    enableSnippets: {\n        set: function(val) {\n            if (val) {\n                this.commands.addCommand(expandSnippet);\n                this.on(\"changeMode\", onChangeMode);\n                onChangeMode(null, this);\n            } else {\n                this.commands.removeCommand(expandSnippet);\n                this.off(\"changeMode\", onChangeMode);\n            }\n        },\n        value: false\n    }\n});\n});\n\ndefine(\"ace/ext/beautify\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nexports.singletonTags = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"html\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"];\nexports.blockTags = [\"article\", \"aside\", \"blockquote\", \"body\", \"div\", \"dl\", \"fieldset\", \"footer\", \"form\", \"head\", \"header\", \"html\", \"nav\", \"ol\", \"p\", \"script\", \"section\", \"style\", \"table\", \"tbody\", \"tfoot\", \"thead\", \"ul\"];\n\nexports.beautify = function(session) {\n    var iterator = new TokenIterator(session, 0, 0);\n    var token = iterator.getCurrentToken();\n    var tabString = session.getTabString();\n    var singletonTags = exports.singletonTags;\n    var blockTags = exports.blockTags;\n    var nextToken;\n    var breakBefore = false;\n    var spaceBefore = false;\n    var spaceAfter = false;\n    var code = \"\";\n    var value = \"\";\n    var tagName = \"\";\n    var depth = 0;\n    var lastDepth = 0;\n    var lastIndent = 0;\n    var indent = 0;\n    var unindent = 0;\n    var roundDepth = 0;\n    var curlyDepth = 0;\n    var row;\n    var curRow = 0;\n    var rowsToAdd = 0;\n    var rowTokens = [];\n    var abort = false;\n    var i;\n    var indentNextLine = false;\n    var inTag = false;\n    var inCSS = false;\n    var inBlock = false;\n    var levels = {0: 0};\n    var parents = [];\n\n    var trimNext = function() {\n        if (nextToken && nextToken.value && nextToken.type !== 'string.regexp')\n            nextToken.value = nextToken.value.trim();\n    };\n\n    var trimLine = function() {\n        code = code.replace(/ +$/, \"\");\n    };\n\n    var trimCode = function() {\n        code = code.trimRight();\n        breakBefore = false;\n    };\n\n    while (token !== null) {\n        curRow = iterator.getCurrentTokenRow();\n        rowTokens = iterator.$rowTokens;\n        nextToken = iterator.stepForward();\n\n        if (typeof token !== \"undefined\") {\n            value = token.value;\n            unindent = 0;\n            inCSS = (tagName === \"style\" || session.$modeId === \"ace/mode/css\");\n            if (is(token, \"tag-open\")) {\n                inTag = true;\n                if (nextToken)\n                    inBlock = (blockTags.indexOf(nextToken.value) !== -1);\n                if (value === \"</\") {\n                    if (inBlock && !breakBefore && rowsToAdd < 1)\n                        rowsToAdd++;\n\n                    if (inCSS)\n                        rowsToAdd = 1;\n\n                    unindent = 1;\n                    inBlock = false;\n                }\n            } else if (is(token, \"tag-close\")) {\n                inTag = false;\n            } else if (is(token, \"comment.start\")) {\n                inBlock = true;\n            } else if (is(token, \"comment.end\")) {\n                inBlock = false;\n            }\n            if (!inTag && !rowsToAdd && token.type === \"paren.rparen\" && token.value.substr(0, 1) === \"}\") {\n                rowsToAdd++;\n            }\n            if (curRow !== row) {\n                rowsToAdd = curRow;\n\n                if (row)\n                    rowsToAdd -= row;\n            }\n\n            if (rowsToAdd) {\n                trimCode();\n                for (; rowsToAdd > 0; rowsToAdd--)\n                    code += \"\\n\";\n\n                breakBefore = true;\n                if (!is(token, \"comment\") && !token.type.match(/^(comment|string)$/))\n                   value = value.trimLeft();\n            }\n\n            if (value) {\n                if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|foreach|while|switch)$/)) {\n                    parents[depth] = value;\n\n                    trimNext();\n                    spaceAfter = true;\n                    if (value.match(/^(else|elseif)$/)) {\n                        if (code.match(/\\}[\\s]*$/)) {\n                            trimCode();\n                            spaceBefore = true;\n                        }\n                    }\n                } else if (token.type === \"paren.lparen\") {\n                    trimNext();\n                    if (value.substr(-1) === \"{\") {\n                        spaceAfter = true;\n                        indentNextLine = false;\n\n                        if(!inTag)\n                            rowsToAdd = 1;\n                    }\n                    if (value.substr(0, 1) === \"{\") {\n                        spaceBefore = true;\n                        if (code.substr(-1) !== '[' && code.trimRight().substr(-1) === '[') {\n                            trimCode();\n                            spaceBefore = false;\n                        } else if (code.trimRight().substr(-1) === ')') {\n                            trimCode();\n                        } else {\n                            trimLine();\n                        }\n                    }\n                } else if (token.type === \"paren.rparen\") {\n                    unindent = 1;\n                    if (value.substr(0, 1) === \"}\") {\n                        if (parents[depth-1] === 'case')\n                            unindent++;\n\n                        if (code.trimRight().substr(-1) === '{') {\n                            trimCode();\n                        } else {\n                            spaceBefore = true;\n\n                            if (inCSS)\n                                rowsToAdd+=2;\n                        }\n                    }\n                    if (value.substr(0, 1) === \"]\") {\n                        if (code.substr(-1) !== '}' && code.trimRight().substr(-1) === '}') {\n                            spaceBefore = false;\n                            indent++;\n                            trimCode();\n                        }\n                    }\n                    if (value.substr(0, 1) === \")\") {\n                        if (code.substr(-1) !== '(' && code.trimRight().substr(-1) === '(') {\n                            spaceBefore = false;\n                            indent++;\n                            trimCode();\n                        }\n                    }\n\n                    trimLine();\n                } else if ((token.type === \"keyword.operator\" || token.type === \"keyword\") && value.match(/^(=|==|===|!=|!==|&&|\\|\\||and|or|xor|\\+=|.=|>|>=|<|<=|=>)$/)) {\n                    trimCode();\n                    trimNext();\n                    spaceBefore = true;\n                    spaceAfter = true;\n                } else if (token.type === \"punctuation.operator\" && value === ';') {\n                    trimCode();\n                    trimNext();\n                    spaceAfter = true;\n\n                    if (inCSS)\n                        rowsToAdd++;\n                } else if (token.type === \"punctuation.operator\" && value.match(/^(:|,)$/)) {\n                    trimCode();\n                    trimNext();\n                    if (value.match(/^(,)$/) && curlyDepth>0 && roundDepth===0) {\n                        rowsToAdd++;\n                    } else {\n                        spaceAfter = true;\n                        breakBefore = false;\n                    }\n                } else if (token.type === \"support.php_tag\" && value === \"?>\" && !breakBefore) {\n                    trimCode();\n                    spaceBefore = true;\n                } else if (is(token, \"attribute-name\") && code.substr(-1).match(/^\\s$/)) {\n                    spaceBefore = true;\n                } else if (is(token, \"attribute-equals\")) {\n                    trimLine();\n                    trimNext();\n                } else if (is(token, \"tag-close\")) {\n                    trimLine();\n                    if(value === \"/>\")\n                        spaceBefore = true;\n                }\n                if (breakBefore && !(token.type.match(/^(comment)$/) && !value.substr(0, 1).match(/^[/#]$/)) && !(token.type.match(/^(string)$/) && !value.substr(0, 1).match(/^['\"]$/))) {\n\n                    indent = lastIndent;\n\n                    if(depth > lastDepth) {\n                        indent++;\n\n                        for (i=depth; i > lastDepth; i--)\n                            levels[i] = indent;\n                    } else if(depth < lastDepth)\n                        indent = levels[depth];\n\n                    lastDepth = depth;\n                    lastIndent = indent;\n\n                    if(unindent)\n                        indent -= unindent;\n\n                    if (indentNextLine && !roundDepth) {\n                        indent++;\n                        indentNextLine = false;\n                    }\n\n                    for (i = 0; i < indent; i++)\n                        code += tabString;\n                }\n\n\n                if (token.type === \"keyword\" && value.match(/^(case|default)$/)) {\n                    parents[depth] = value;\n                    depth++;\n                }\n\n\n                if (token.type === \"keyword\" && value.match(/^(break)$/)) {\n                    if(parents[depth-1] && parents[depth-1].match(/^(case|default)$/)) {\n                        depth--;\n                    }\n                }\n                if (token.type === \"paren.lparen\") {\n                    roundDepth += (value.match(/\\(/g) || []).length;\n                    curlyDepth += (value.match(/\\{/g) || []).length;\n                    depth += value.length;\n                }\n\n                if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|while)$/)) {\n                    indentNextLine = true;\n                    roundDepth = 0;\n                } else if (!roundDepth && value.trim() && token.type !== \"comment\")\n                    indentNextLine = false;\n\n                if (token.type === \"paren.rparen\") {\n                    roundDepth -= (value.match(/\\)/g) || []).length;\n                    curlyDepth -= (value.match(/\\}/g) || []).length;\n\n                    for (i = 0; i < value.length; i++) {\n                        depth--;\n                        if(value.substr(i, 1)==='}' && parents[depth]==='case') {\n                            depth--;\n                        }\n                    }\n                }\n                if (spaceBefore && !breakBefore) {\n                    trimLine();\n                    if (code.substr(-1) !== \"\\n\")\n                        code += \" \";\n                }\n\n                code += value;\n\n                if (spaceAfter)\n                    code += \" \";\n\n                breakBefore = false;\n                spaceBefore = false;\n                spaceAfter = false;\n                if ((is(token, \"tag-close\") && (inBlock || blockTags.indexOf(tagName) !== -1)) || (is(token, \"doctype\") && value === \">\")) {\n                    if (inBlock && nextToken && nextToken.value === \"</\")\n                        rowsToAdd = -1;\n                    else\n                        rowsToAdd = 1;\n                }\n                if (is(token, \"tag-open\") && value === \"</\") {\n                    depth--;\n                } else if (is(token, \"tag-open\") && value === \"<\" && singletonTags.indexOf(nextToken.value) === -1) {\n                    depth++;\n                } else if (is(token, \"tag-name\")) {\n                    tagName = value;\n                } else if (is(token, \"tag-close\") && value === \"/>\" && singletonTags.indexOf(tagName) === -1){\n                    depth--;\n                }\n\n                row = curRow;\n            }\n        }\n\n        token = nextToken;\n    }\n\n    code = code.trim();\n    session.doc.setValue(code);\n};\n\nexports.commands = [{\n    name: \"beautify\",\n    exec: function(editor) {\n        exports.beautify(editor.session);\n    },\n    bindKey: \"Ctrl-Shift-B\"\n}];\n\n});\n\ndefine(\"kitchen-sink/demo\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/ext/rtl\",\"ace/multi_select\",\"kitchen-sink/inline_editor\",\"kitchen-sink/dev_util\",\"kitchen-sink/file_drop\",\"ace/config\",\"ace/lib/dom\",\"ace/lib/net\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event\",\"ace/theme/textmate\",\"ace/edit_session\",\"ace/undomanager\",\"ace/keyboard/hash_handler\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/ext/whitespace\",\"kitchen-sink/doclist\",\"kitchen-sink/layout\",\"kitchen-sink/util\",\"ace/ext/elastic_tabstops_lite\",\"ace/incremental_search\",\"kitchen-sink/token_tooltip\",\"ace/config\",\"ace/worker/worker_client\",\"ace/split\",\"ace/ext/options\",\"ace/ext/statusbar\",\"ace/ext/emmet\",\"ace/placeholder\",\"ace/snippets\",\"ace/ext/language_tools\",\"ace/ext/beautify\",\"ace/keyboard/keybinding\",\"ace/commands/command_manager\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"ace/lib/fixoldbrowsers\");\n\nrequire(\"ace/ext/rtl\");\n\nrequire(\"ace/multi_select\");\nrequire(\"./inline_editor\");\nvar devUtil = require(\"./dev_util\");\nrequire(\"./file_drop\");\n\nvar config = require(\"ace/config\");\nconfig.init();\nvar env = {};\n\nvar dom = require(\"ace/lib/dom\");\nvar net = require(\"ace/lib/net\");\nvar lang = require(\"ace/lib/lang\");\nvar useragent = require(\"ace/lib/useragent\");\n\nvar event = require(\"ace/lib/event\");\nvar theme = require(\"ace/theme/textmate\");\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\n\nvar HashHandler = require(\"ace/keyboard/hash_handler\").HashHandler;\n\nvar Renderer = require(\"ace/virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"ace/editor\").Editor;\n\nvar whitespace = require(\"ace/ext/whitespace\");\n\n\n\nvar doclist = require(\"./doclist\");\nvar layout = require(\"./layout\");\nvar util = require(\"./util\");\nvar saveOption = util.saveOption;\n\n\nvar ElasticTabstopsLite = require(\"ace/ext/elastic_tabstops_lite\").ElasticTabstopsLite;\n\nvar IncrementalSearch = require(\"ace/incremental_search\").IncrementalSearch;\n\n\nvar TokenTooltip = require(\"./token_tooltip\").TokenTooltip;\nrequire(\"ace/config\").defineOptions(Editor.prototype, \"editor\", {\n    showTokenInfo: {\n        set: function(val) {\n            if (val) {\n                this.tokenTooltip = this.tokenTooltip || new TokenTooltip(this);\n            }\n            else if (this.tokenTooltip) {\n                this.tokenTooltip.destroy();\n                delete this.tokenTooltip;\n            }\n        },\n        get: function() {\n            return !!this.tokenTooltip;\n        },\n        handlesSet: true\n    }\n});\n\n\nvar workerModule = require(\"ace/worker/worker_client\");\nif (location.href.indexOf(\"noworker\") !== -1) {\n    workerModule.WorkerClient = workerModule.UIWorkerClient;\n}\nvar container = document.getElementById(\"editor-container\");\nvar Split = require(\"ace/split\").Split;\nvar split = new Split(container, theme, 1);\nenv.editor = split.getEditor(0);\nsplit.on(\"focus\", function(editor) {\n    env.editor = editor;\n    updateUIEditorOptions();\n});\nenv.split = split;\nwindow.env = env;\n\n\nvar consoleEl = dom.createElement(\"div\");\ncontainer.parentNode.appendChild(consoleEl);\nconsoleEl.style.cssText = \"position:fixed; bottom:1px; right:0;\\\nborder:1px solid #baf; z-index:100\";\n\nvar cmdLine = new layout.singleLineEditor(consoleEl);\ncmdLine.editor = env.editor;\nenv.editor.cmdLine = cmdLine;\n\nenv.editor.showCommandLine = function(val) {\n    this.cmdLine.focus();\n    if (typeof val == \"string\")\n        this.cmdLine.setValue(val, 1);\n};\nenv.editor.commands.addCommands([{\n    name: \"gotoline\",\n    bindKey: {win: \"Ctrl-L\", mac: \"Command-L\"},\n    exec: function(editor, line) {\n        if (typeof line == \"object\") {\n            var arg = this.name + \" \" + editor.getCursorPosition().row;\n            editor.cmdLine.setValue(arg, 1);\n            editor.cmdLine.focus();\n            return;\n        }\n        line = parseInt(line, 10);\n        if (!isNaN(line))\n            editor.gotoLine(line);\n    },\n    readOnly: true\n}, {\n    name: \"snippet\",\n    bindKey: {win: \"Alt-C\", mac: \"Command-Alt-C\"},\n    exec: function(editor, needle) {\n        if (typeof needle == \"object\") {\n            editor.cmdLine.setValue(\"snippet \", 1);\n            editor.cmdLine.focus();\n            return;\n        }\n        var s = snippetManager.getSnippetByName(needle, editor);\n        if (s)\n            snippetManager.insertSnippet(editor, s.content);\n    },\n    readOnly: true\n}, {\n    name: \"focusCommandLine\",\n    bindKey: \"shift-esc|ctrl-`\",\n    exec: function(editor, needle) { editor.cmdLine.focus(); },\n    readOnly: true\n}, {\n    name: \"nextFile\",\n    bindKey: \"Ctrl-tab\",\n    exec: function(editor) { doclist.cycleOpen(editor, 1); },\n    readOnly: true\n}, {\n    name: \"previousFile\",\n    bindKey: \"Ctrl-shift-tab\",\n    exec: function(editor) { doclist.cycleOpen(editor, -1); },\n    readOnly: true\n}, {\n    name: \"execute\",\n    bindKey: \"ctrl+enter\",\n    exec: function(editor) {\n        try {\n            var r = window.eval(editor.getCopyText() || editor.getValue());\n        } catch(e) {\n            r = e;\n        }\n        editor.cmdLine.setValue(r + \"\");\n    },\n    readOnly: true\n}, {\n    name: \"showKeyboardShortcuts\",\n    bindKey: {win: \"Ctrl-Alt-h\", mac: \"Command-Alt-h\"},\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/keybinding_menu\", function(module) {\n            module.init(editor);\n            editor.showKeyboardShortcuts();\n        });\n    }\n}, {\n    name: \"increaseFontSize\",\n    bindKey: \"Ctrl-=|Ctrl-+\",\n    exec: function(editor) {\n        var size = parseInt(editor.getFontSize(), 10) || 12;\n        editor.setFontSize(size + 1);\n    }\n}, {\n    name: \"decreaseFontSize\",\n    bindKey: \"Ctrl+-|Ctrl-_\",\n    exec: function(editor) {\n        var size = parseInt(editor.getFontSize(), 10) || 12;\n        editor.setFontSize(Math.max(size - 1 || 1));\n    }\n}, {\n    name: \"resetFontSize\",\n    bindKey: \"Ctrl+0|Ctrl-Numpad0\",\n    exec: function(editor) {\n        editor.setFontSize(12);\n    }\n}]);\n\n\nenv.editor.commands.addCommands(whitespace.commands);\n\ncmdLine.commands.bindKeys({\n    \"Shift-Return|Ctrl-Return|Alt-Return\": function(cmdLine) { cmdLine.insert(\"\\n\"); },\n    \"Esc|Shift-Esc\": function(cmdLine){ cmdLine.editor.focus(); },\n    \"Return\": function(cmdLine){\n        var command = cmdLine.getValue().split(/\\s+/);\n        var editor = cmdLine.editor;\n        editor.commands.exec(command[0], editor, command[1]);\n        editor.focus();\n    }\n});\n\ncmdLine.commands.removeCommands([\"find\", \"gotoline\", \"findall\", \"replace\", \"replaceall\"]);\n\nvar commands = env.editor.commands;\ncommands.addCommand({\n    name: \"save\",\n    bindKey: {win: \"Ctrl-S\", mac: \"Command-S\"},\n    exec: function(arg) {\n        var session = env.editor.session;\n        var name = session.name.match(/[^\\/]+$/);\n        localStorage.setItem(\n            \"saved_file:\" + name,\n            session.getValue()\n        );\n        env.editor.cmdLine.setValue(\"saved \"+ name);\n    }\n});\n\ncommands.addCommand({\n    name: \"load\",\n    bindKey: {win: \"Ctrl-O\", mac: \"Command-O\"},\n    exec: function(arg) {\n        var session = env.editor.session;\n        var name = session.name.match(/[^\\/]+$/);\n        var value = localStorage.getItem(\"saved_file:\" + name);\n        if (typeof value == \"string\") {\n            session.setValue(value);\n            env.editor.cmdLine.setValue(\"loaded \"+ name);\n        } else {\n            env.editor.cmdLine.setValue(\"no previuos value saved for \"+ name);\n        }\n    }\n});\nvar consoleHeight = 20;\nfunction onResize() {\n    var left = env.split.$container.offsetLeft;\n    var width = document.documentElement.clientWidth - left;\n    container.style.width = width + \"px\";\n    container.style.height = document.documentElement.clientHeight - consoleHeight + \"px\";\n    env.split.resize();\n\n    consoleEl.style.width = width + \"px\";\n    cmdLine.resize();\n}\n\nwindow.onresize = onResize;\nonResize();\ndoclist.history = doclist.docs.map(function(doc) {\n    return doc.name;\n});\ndoclist.history.index = 0;\ndoclist.cycleOpen = function(editor, dir) {\n    var h = this.history;\n    h.index += dir;\n    if (h.index >= h.length)\n        h.index = 0;\n    else if (h.index <= 0)\n        h.index = h.length - 1;\n    var s = h[h.index];\n    doclist.pickDocument(s);\n};\ndoclist.addToHistory = function(name) {\n    var h = this.history;\n    var i = h.indexOf(name);\n    if (i != h.index) {\n        if (i != -1)\n            h.splice(i, 1);\n        h.index = h.push(name);\n    }\n};\ndoclist.pickDocument = function(name) {\n    doclist.loadDoc(name, function(session) {\n        if (!session)\n            return;\n        doclist.addToHistory(session.name);\n        session = env.split.setSession(session);\n        whitespace.detectIndentation(session);\n        optionsPanel.render();\n        env.editor.focus();\n    });\n};\n\n\n\nvar OptionPanel = require(\"ace/ext/options\").OptionPanel;\nvar optionsPanel = new OptionPanel(env.editor);\n\noptionsPanel.add({\n    Main: {\n        Document: {\n            type: \"select\",\n            path: \"doc\",\n            items: doclist.all,\n            position: -101,\n            onchange: doclist.pickDocument,\n            getValue: function() {\n                return env.editor.session.name || \"javascript\";\n            }\n        },\n        Split: {\n            type: \"buttonBar\",\n            path: \"split\",\n            values: [\"None\", \"Below\", \"Beside\"],\n            position: -100,\n            onchange: function(value) {\n                var sp = env.split;\n                if (value == \"Below\" || value == \"Beside\") {\n                    var newEditor = (sp.getSplits() == 1);\n                    sp.setOrientation(value == \"Below\" ? sp.BELOW : sp.BESIDE);\n                    sp.setSplits(2);\n\n                    if (newEditor) {\n                        var session = sp.getEditor(0).session;\n                        var newSession = sp.setSession(session, 1);\n                        newSession.name = session.name;\n                    }\n                } else {\n                    sp.setSplits(1);\n                }\n            },\n            getValue: function() {\n                var sp = env.split;\n                return sp.getSplits() == 1\n                    ? \"None\"\n                    : sp.getOrientation() == sp.BELOW\n                    ? \"Below\"\n                    : \"Beside\";\n            }\n        }\n    },\n    More: {\n        \"RTL\": {\n            path: \"rtl\",\n            position: 900\n        },\n        \"Line based RTL switching\": {\n            path: \"rtlText\",\n            position: 900\n        },\n        \"Show token info\": {\n            path: \"showTokenInfo\",\n            position: 2000\n        },\n        \"Text Input Debugger\": devUtil.textInputDebugger\n    }\n});\n\nvar optionsPanelContainer = document.getElementById(\"optionsPanel\");\noptionsPanel.render();\noptionsPanelContainer.insertBefore(optionsPanel.container, optionsPanelContainer.firstChild);\noptionsPanel.on(\"setOption\", function(e) {\n    util.saveOption(e.name, e.value);\n});\n\nfunction updateUIEditorOptions() {\n    optionsPanel.editor = env.editor;\n    optionsPanel.render();\n}\n\noptionsPanel.setOption(\"doc\", util.getOption(\"doc\") || \"JavaScript\");\nfor (var i in optionsPanel.options) {\n    var value = util.getOption(i);\n    if (value != undefined) {\n        if ((i == \"mode\" || i == \"theme\") && !/[/]/.test(value))\n            value = \"ace/\" + i + \"/\" + value;\n        optionsPanel.setOption(i, value);\n    }\n}\n\n\nfunction synchroniseScrolling() {\n    var s1 = env.split.$editors[0].session;\n    var s2 = env.split.$editors[1].session;\n    s1.on('changeScrollTop', function(pos) {s2.setScrollTop(pos)});\n    s2.on('changeScrollTop', function(pos) {s1.setScrollTop(pos)});\n    s1.on('changeScrollLeft', function(pos) {s2.setScrollLeft(pos)});\n    s2.on('changeScrollLeft', function(pos) {s1.setScrollLeft(pos)});\n}\n\nvar StatusBar = require(\"ace/ext/statusbar\").StatusBar;\nnew StatusBar(env.editor, cmdLine.container);\n\n\nvar Emmet = require(\"ace/ext/emmet\");\nnet.loadScript(\"https://cloud9ide.github.io/emmet-core/emmet.js\", function() {\n    Emmet.setCore(window.emmet);\n    env.editor.setOption(\"enableEmmet\", true);\n});\n\nrequire(\"ace/placeholder\").PlaceHolder;\n\nvar snippetManager = require(\"ace/snippets\").snippetManager;\n\nenv.editSnippets = function() {\n    var sp = env.split;\n    if (sp.getSplits() == 2) {\n        sp.setSplits(1);\n        return;\n    }\n    sp.setSplits(1);\n    sp.setSplits(2);\n    sp.setOrientation(sp.BESIDE);\n    var editor = sp.$editors[1];\n    var id = sp.$editors[0].session.$mode.$id || \"\";\n    var m = snippetManager.files[id];\n    if (!doclist[\"snippets/\" + id]) {\n        var text = m.snippetText;\n        var s = doclist.initDoc(text, \"\", {});\n        s.setMode(\"ace/mode/snippets\");\n        doclist[\"snippets/\" + id] = s;\n    }\n    editor.on(\"blur\", function() {\n        m.snippetText = editor.getValue();\n        snippetManager.unregister(m.snippets);\n        m.snippets = snippetManager.parseSnippetFile(m.snippetText, m.scope);\n        snippetManager.register(m.snippets);\n    });\n    sp.$editors[0].once(\"changeMode\", function() {\n        sp.setSplits(1);\n    });\n    editor.setSession(doclist[\"snippets/\" + id], 1);\n    editor.focus();\n};\n\noptionsPanelContainer.insertBefore(\n    dom.buildDom([\"div\", {style: \"text-align:right;margin-right: 60px\"},\n        [\"div\", {}, \n            [\"button\", {onclick: env.editSnippets}, \"Edit Snippets\"]],\n        [\"div\", {}, \n            [\"button\", {onclick: function() {\n                var info = navigator.platform + \"\\n\" + navigator.userAgent;\n                if (env.editor.getValue() == info)\n                    return env.editor.undo();\n                env.editor.setValue(info, -1);\n                env.editor.setOption(\"wrap\", 80);\n            }}, \"Show Browser Info\"]],\n        devUtil.getUI()\n    ]),\n    optionsPanelContainer.children[1]\n);\n\nrequire(\"ace/ext/language_tools\");\nenv.editor.setOptions({\n    enableBasicAutocompletion: true,\n    enableSnippets: true\n});\n\nvar beautify = require(\"ace/ext/beautify\");\nenv.editor.commands.addCommands(beautify.commands);\n\nvar KeyBinding = require(\"ace/keyboard/keybinding\").KeyBinding;\nvar CommandManager = require(\"ace/commands/command_manager\").CommandManager;\nvar commandManager = new CommandManager();\nvar kb = new KeyBinding({\n    commands: commandManager,\n    fake: true\n});\nevent.addCommandKeyListener(document.documentElement, kb.onCommandKey.bind(kb));\nevent.addListener(document.documentElement, \"keyup\", function(e) {\n    if (e.keyCode === 18) // do not trigger browser menu on windows\n        e.preventDefault();\n});\ncommandManager.addCommands([{\n    name: \"window-left\",\n    bindKey: {win: \"cmd-alt-left\", mac: \"ctrl-cmd-left\"},\n    exec: function() {\n        moveFocus();\n    }\n}, {\n    name: \"window-right\",\n    bindKey: {win: \"cmd-alt-right\", mac: \"ctrl-cmd-right\"},\n    exec: function() {\n        moveFocus();\n    }\n}, {\n    name: \"window-up\",\n    bindKey: {win: \"cmd-alt-up\", mac: \"ctrl-cmd-up\"},\n    exec: function() {\n        moveFocus();\n    }\n}, {\n    name: \"window-down\",\n    bindKey: {win: \"cmd-alt-down\", mac: \"ctrl-cmd-down\"},\n    exec: function() {\n        moveFocus();\n    }\n}]);\n\nfunction moveFocus() {\n    var el = document.activeElement;\n    if (el == env.editor.textInput.getElement())\n        env.editor.cmdLine.focus();    \n    else\n        env.editor.focus();\n}\n\n});                (function() {\n                    window.require([\"kitchen-sink/demo\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/.gitignore",
    "content": "# A sample .gitignore file.\n\n.buildlog\n.DS_Store\n.svn\n\n# Negated patterns:\n!foo.bar\n\n# Also ignore user settings...\n/.settings\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/Dockerfile",
    "content": "#\n# example Dockerfile for http://docs.docker.io/en/latest/examples/postgresql_service/\n#\n\nFROM ubuntu\nMAINTAINER SvenDowideit@docker.com\n\n# Add the PostgreSQL PGP key to verify their Debian packages.\n# It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc \nRUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8\n\n# Add PostgreSQL's repository. It contains the most recent stable release\n#     of PostgreSQL, ``9.3``.\nRUN echo \"deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main\" > /etc/apt/sources.list.d/pgdg.list\n\n# Update the Ubuntu and PostgreSQL repository indexes\nRUN apt-get update\n\n# Install ``python-software-properties``, ``software-properties-common`` and PostgreSQL 9.3\n#  There are some warnings (in red) that show up during the build. You can hide\n#  them by prefixing each apt-get statement with DEBIAN_FRONTEND=noninteractive\nRUN apt-get -y -q install python-software-properties software-properties-common\nRUN apt-get -y -q install postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3\n\n# Note: The official Debian and Ubuntu images automatically ``apt-get clean``\n# after each ``apt-get`` \n\n# Run the rest of the commands as the ``postgres`` user created by the ``postgres-9.3`` package when it was ``apt-get installed``\nUSER postgres\n\n# Create a PostgreSQL role named ``docker`` with ``docker`` as the password and\n# then create a database `docker` owned by the ``docker`` role.\n# Note: here we use ``&&\\`` to run commands one after the other - the ``\\``\n#       allows the RUN command to span multiple lines.\nRUN    /etc/init.d/postgresql start &&\\\n    psql --command \"CREATE USER docker WITH SUPERUSER PASSWORD 'docker';\" &&\\\n    createdb -O docker docker\n\n# Adjust PostgreSQL configuration so that remote connections to the\n# database are possible. \nRUN echo \"host all  all    0.0.0.0/0  md5\" >> /etc/postgresql/9.3/main/pg_hba.conf\n\n# And add ``listen_addresses`` to ``/etc/postgresql/9.3/main/postgresql.conf``\nRUN echo \"listen_addresses='*'\" >> /etc/postgresql/9.3/main/postgresql.conf\n\n# Expose the PostgreSQL port\nEXPOSE 5432\n\n# Add VOLUMEs to allow backup of config, logs and databases\nVOLUME\t[\"/etc/postgresql\", \"/var/log/postgresql\", \"/var/lib/postgresql\"]\n\n# Set the default command to run when starting the container\nCMD [\"/usr/lib/postgresql/9.3/bin/postgres\", \"-D\", \"/var/lib/postgresql/9.3/main\", \"-c\", \"config_file=/etc/postgresql/9.3/main/postgresql.conf\"]"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/Haxe.hx",
    "content": "class Haxe \n{\n    public static function main() \n    {\n        // Say Hello!\n        var greeting:String = \"Hello World\";\n        trace(greeting);\n        \n        var targets:Array<String> = [\"Flash\",\"Javascript\",\"PHP\",\"Neko\",\"C++\",\"iOS\",\"Android\",\"webOS\"];\n        trace(\"Haxe is a great language that can target:\");\n        for (target in targets)\n        {\n            trace (\" - \" + target);\n        }\n        trace(\"And many more!\");\n    }\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/Jack.jack",
    "content": "vars it, p\n\np = {label, value|\n  print(\"\\n\" + label)\n  print(inspect(value))\n}\n-- Create an array from 0 to 15\np(\"range\", i-collect(range(5)))\n\n-- Create an array from 0 to 15 and break up in chunks of 4\np(\"chunked range\", i-collect(i-chunk(4, range(16))))\n\n-- Check if all or none items in stream pass test.\np(\"all < 60 in range(60)\", i-all?({i|i<60}, range(60)))\np(\"any < 60 in range(60)\", i-any?({i|i>60}, range(60)))\np(\"all < 60 in range(70)\", i-all?({i|i<60}, range(70)))\np(\"any < 60 in range(70)\", i-any?({i|i>60}, range(70)))\n\n-- Zip three different collections together\np(\"zipped\", i-collect(i-zip(\n  range(10),\n  [1,2,3,4,5],\n  i-map({i|i*i}, range(10))\n)))\n\nvars names, person, i, doubles, lengths, cubeRange\nnames = [\"Thorin\", \"Dwalin\", \"Balin\", \"Bifur\", \"Bofur\", \"Bombur\", \"Oin\",\n         \"Gloin\", \"Ori\", \"Nori\", \"Dori\", \"Fili\", \"Kili\", \"Bilbo\", \"Gandalf\"]\n\nfor name in names {\n  if name != \"Bilbo\" && name != \"Gandalf\" {\n    print(name)\n  }\n}\n\nperson = {name: \"Tim\", age: 30}\nfor key, value in person {\n  print(key + \" = \" + value)\n}\n\ni = 0\nwhile i < 10 {\n  i = i + 1\n  print(i)\n}\n\nprint(\"range\")\nfor i in range(10) {\n  print(i + 1)\n}\nfor i in range(10) {\n  print(10 - i)\n}\n\n-- Dynamic object that gives the first 10 doubles\ndoubles = {\n  @len: {| 10 }\n  @get: {key|\n    if key is Integer { key * key }\n  }\n}\nprint(\"#doubles\", #doubles)\n\nprint(\"Doubles\")\nfor k, v in doubles {\n  print([k, v])\n}\n\n-- Dynamic object that has names list as keys and string lenth as values\nlengths = {\n  @keys: {| names }\n  @get: {key|\n    if key is String { #key }\n  }\n}\n\nprint (\"Lengths\")\nfor k, v in lengths {\n  print([k, v])\n}\n\n\ncubeRange = {n|\n  vars i, v\n  i = 0\n  {\n    @call: {|\n      v = i\n      i = i + 1\n      if v < n { v * v * v }\n    }\n  }\n}\n\nprint(\"Cubes\")\nfor k, v in cubeRange(5) {\n  print([k, v])\n}\nprint(\"String\")\nfor k, v in \"Hello World\" {\n  print([k, v])\n}\n\n\nprint([i for i in range(10)])\nprint([i for i in range(20) if i % 3])\n\n\n\n-- Example showing how to do parallel work using split..and\nbase = {bootstrap, target-dir|\n  split {\n    copy(\"res\", target-dir)\n  } and {\n    if newer(\"src/*.less\", target-dir + \"/style.css\") {\n      lessc(\"src/\" + bootstrap + \".less\", target-dir + \"/style.css\")\n    }\n  } and {\n    build(\"src/\" + bootstrap + \".js\", target-dir + \"/app.js\")\n  }\n}\n\n\nvars Dragon, pet\n\nDragon = {name|\n  vars asleep, stuff-in-belly, stuff-in-intestine,\n       feed, walk, put-to-bed, toss, rock,\n       hungry?, poopy?, passage-of-time\n\n  asleep = false\n  stuff-in-belly     = 10 -- He's full.\n  stuff-in-intestine =  0 -- He doesn't need to go.\n\n  print(name + ' is born.')\n\n  feed = {|\n    print('You feed ' + name + '.')\n    stuff-in-belly = 10\n    passage-of-time()\n  }\n\n  walk = {|\n    print('You walk ' + name + \".\")\n    stuff-in-intestine = 0\n    passage-of-time\n  }\n\n  put-to-bed = {|\n    print('You put ' + name + ' to bed.')\n    asleep = true\n    for i in range(3) {\n      if asleep {\n        passage-of-time()\n      }\n      if asleep {\n        print(name + ' snores, filling the room with smoke.')\n      }\n    }\n    if asleep {\n      asleep = false\n      print(name + ' wakes up slowly.')\n    }\n  }\n\n  toss = {|\n    print('You toss ' + name + ' up into the air.')\n    print('He giggles, which singes your eyebrows.')\n    passage-of-time()\n  }\n\n  rock = {|\n    print('You rock ' + name + ' gently.')\n    asleep = true\n    print('He briefly dozes off...')\n    passage-of-time()\n    if asleep {\n      asleep = false\n      print('...but wakes when you stop.')\n    }\n  }\n\n  hungry? = {|\n    stuff-in-belly <= 2\n  }\n\n  poopy? = {|\n    stuff-in-intestine >= 8\n  }\n\n  passage-of-time = {|\n    if stuff-in-belly > 0 {\n      -- Move food from belly to intestine\n      stuff-in-belly     = stuff-in-belly     - 1\n      stuff-in-intestine = stuff-in-intestine + 1\n    } else { -- Our dragon is starving!\n      if asleep {\n        asleep = false\n        print('He wakes up suddenly!')\n      }\n      print(name + ' is starving! In desperation, he ate YOU!')\n      abort \"died\"\n    }\n\n    if stuff-in-intestine >= 10 {\n      stuff-in-intestine = 0\n      print('Whoops! ' + name + ' had an accident...')\n    }\n\n    if hungry?() {\n      if asleep {\n        asleep = false\n        print('He wakes up suddenly!')\n      }\n      print(name + \"'s stomach grumbles...\")\n    }\n\n    if poopy?() {\n      if asleep {\n        asleep = false\n        print('He wakes up suddenly!')\n      }\n      print(name + ' does the potty dance...')\n    }\n  }\n\n  -- Export the public interface to this closure object.\n  {\n   feed: feed\n   walk: walk\n   put-to-bed: put-to-bed\n   toss: toss\n   rock: rock\n  }\n\n}\n\npet = Dragon('Norbert')\npet.feed()\npet.toss()\npet.walk()\npet.put-to-bed()\npet.rock()\npet.put-to-bed()\npet.put-to-bed()\npet.put-to-bed()\npet.put-to-bed()\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/Makefile",
    "content": ".PHONY:    apf ext worker mode theme package test\n\ndefault: apf worker\n\nupdate: worker\n\n# packages apf\n\n# This is the first line of a comment \\\nand this is still part of the comment \\\nas is this, since I keep ending each line \\\nwith a backslash character\n\napf:\n    cd node_modules/packager; node package.js projects/apf_cloud9.apr\n\tcd node_modules/packager; cat build/apf_release.js | sed 's/\\(\\/\\*FILEHEAD(\\).*//g' > ../../plugins-client/lib.apf/www/apf-packaged/apf_release.js\n\n# package debug version of apf\napfdebug:\n\tcd node_modules/packager/projects; cat apf_cloud9.apr | sed 's/<p:define name=\\\"__DEBUG\\\" value=\\\"0\\\" \\/>/<p:define name=\\\"__DEBUG\\\" value=\\\"1\\\" \\/>/g' > apf_cloud9_debug2.apr\n\tcd node_modules/packager/projects; cat apf_cloud9_debug2.apr | sed 's/apf_release/apf_debug/g' > apf_cloud9_debug.apr; rm apf_cloud9_debug2.apr\n\tcd node_modules/packager; node package.js projects/apf_cloud9_debug.apr\n\tcd node_modules/packager; cat build/apf_debug.js | sed 's/\\(\\/\\*FILEHEAD(\\).*\\/apf\\/\\(.*\\)/\\1\\2/g' > ../../plugins-client/lib.apf/www/apf-packaged/apf_debug.js\n\n# package_apf--temporary fix for non-workering infra\npack_apf:\n\tmkdir -p build/src\n\tmv plugins-client/lib.apf/www/apf-packaged/apf_release.js build/src/apf_release.js\n\tnode build/r.js -o name=./build/src/apf_release.js out=./plugins-client/lib.apf/www/apf-packaged/apf_release.js baseUrl=.\n\n# makes ace; at the moment, requires dryice@0.4.2\nace:\n\tcd node_modules/ace; make clean pre_build; ./Makefile.dryice.js minimal\n\n\n# packages core\ncore: ace\n\tmkdir -p build/src\n\tnode build/r.js -o build/core.build.js\n\n# generates packed template\nhelper: \n\tnode build/packed_helper.js\n\nhelper_clean:\n\tmkdir -p build/src\n\tnode build/packed_helper.js 1\n\n# packages ext\next: \n\tnode build/r.js -o build/app.build.js\n\n# calls dryice on worker & packages it\nworker: plugins-client/lib.ace/www/worker/worker-language.js\n\nplugins-client/lib.ace/www/worker/worker-language.js plugins-client/lib.ace/www/worker/worker-javascript.js : \\\n        $(wildcard node_modules/ace/*) $(wildcard node_modules/ace/*/*) $(wildcard node_modules/ace/*/*/mode/*) \\\n        $(wildcard plugins-client/ext.language/*) \\\n        $(wildcard plugins-client/ext.language/*/*) \\\n        $(wildcard plugins-client/ext.linereport/*) \\\n        $(wildcard plugins-client/ext.codecomplete/*) \\\n        $(wildcard plugins-client/ext.codecomplete/*/*) \\\n        $(wildcard plugins-client/ext.jslanguage/*) \\\n        $(wildcard plugins-client/ext.jslanguage/*/*) \\\n        $(wildcard plugins-client/ext.csslanguage/*) \\\n        $(wildcard plugins-client/ext.csslanguage/*/*) \\\n        $(wildcard plugins-client/ext.htmllanguage/*) \\\n        $(wildcard plugins-client/ext.htmllanguage/*/*) \\\n        $(wildcard plugins-client/ext.jsinfer/*) \\\n        $(wildcard plugins-client/ext.jsinfer/*/*) \\\n        $(wildcard node_modules/treehugger/lib/*) \\\n        $(wildcard node_modules/treehugger/lib/*/*) \\\n        $(wildcard node_modules/ace/lib/*) \\\n        $(wildcard node_modules/ace/*/*) \\\n        Makefile.dryice.js\n\tmkdir -p plugins-client/lib.ace/www/worker\n\trm -rf /tmp/c9_worker_build\n\tmkdir -p /tmp/c9_worker_build/ext\n\tln -s `pwd`/plugins-client/ext.language /tmp/c9_worker_build/ext/language\n\tln -s `pwd`/plugins-client/ext.codecomplete /tmp/c9_worker_build/ext/codecomplete\n\tln -s `pwd`/plugins-client/ext.jslanguage /tmp/c9_worker_build/ext/jslanguage\n\tln -s `pwd`/plugins-client/ext.csslanguage /tmp/c9_worker_build/ext/csslanguage\n\tln -s `pwd`/plugins-client/ext.htmllanguage /tmp/c9_worker_build/ext/htmllanguage\n\tln -s `pwd`/plugins-client/ext.linereport /tmp/c9_worker_build/ext/linereport\n\tln -s `pwd`/plugins-client/ext.linereport_php /tmp/c9_worker_build/ext/linereport_php\n\tnode Makefile.dryice.js worker\n\tcp node_modules/ace/build/src/worker* plugins-client/lib.ace/www/worker\n\ndefine \n\nifeq\n\noverride\n\n# copies built ace modes\nmode:\n\tmkdir -p plugins-client/lib.ace/www/mode\n\tcp `find node_modules/ace/build/src | grep -E \"mode-[a-zA-Z_0-9]+.js\"`  plugins-client/lib.ace/www/mode\n\n# copies built ace themes\ntheme:\n\tmkdir -p plugins-client/lib.ace/www/theme\n\tcp `find node_modules/ace/build/src | grep -E \"theme-[a-zA-Z_0-9]+.js\"` plugins-client/lib.ace/www/theme\n\ngzip_safe:\n\tfor i in `ls ./plugins-client/lib.packed/www/*.js`; do \\\n\t\tgzip -9 -v -c -q -f $$i > $$i.gz ; \\\n\tdone\n\ngzip:\n\tfor i in `ls ./plugins-client/lib.packed/www/*.js`; do \\\n\t\tgzip -9 -v -q -f $$i ; \\\n\tdone\n\nc9core: apf ace core worker mode theme\n    \npackage_clean: helper_clean c9core ext\n\npackage: helper c9core ext\n\ntest check:\n\ttest/run-tests.sh\t"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/Nix.nix",
    "content": "{\n  # Name of our deployment\n  network.description = \"HelloWorld\";\n  # Enable rolling back to previous versions of our infrastructure\n  network.enableRollback = true;\n\n  # It consists of a single server named 'helloserver'\n  helloserver =\n    # Every server gets passed a few arguments, including a reference\n    # to nixpkgs (pkgs)\n    { config, pkgs, ... }:\n    let\n      # We import our custom packages from ./default passing pkgs as argument\n      packages = import ./default.nix { pkgs = pkgs; };\n      # This is the nodejs version specified in default.nix\n      nodejs   = packages.nodejs;\n      # And this is the application we'd like to deploy\n      app      = packages.app;\n    in\n    {\n      # We'll be running our application on port 8080, because a regular\n      # user cannot bind to port 80\n      # Then, using some iptables magic we'll forward traffic designated to port 80 to 8080\n      networking.firewall.enable = true;\n      # We will open up port 22 (SSH) as well otherwise we're locking ourselves out\n      networking.firewall.allowedTCPPorts = [ 80 8080 22 ];\n      networking.firewall.allowPing = true;\n\n      # Port forwarding using iptables\n      networking.firewall.extraCommands = ''\n        iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080\n      '';\n\n      # To run our node.js program we're going to use a systemd service\n      # We can configure the service to automatically start on boot and to restart\n      # the process in case it crashes\n      systemd.services.helloserver = {\n        description = \"Hello world application\";\n        # Start the service after the network is available\n        after = [ \"network.target\" ];\n        # We're going to run it on port 8080 in production\n        environment = { PORT = \"8080\"; };\n        serviceConfig = {\n          # The actual command to run\n          ExecStart = \"${nodejs}/bin/node ${app}/server.js\";\n          # For security reasons we'll run this process as a special 'nodejs' user\n          User = \"nodejs\";\n          Restart = \"always\";\n        };\n      };\n\n      # And lastly we ensure the user we run our application as is created\n      users.extraUsers = {\n        nodejs = { };\n      };\n    };\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/abap.abap",
    "content": "***************************************\n** Program: EXAMPLE                  **\n** Author: Joe Byte, 07-Jul-2007     **\n***************************************\n \nREPORT BOOKINGS.\n \n* Read flight bookings from the database\nSELECT * FROM FLIGHTINFO\n  WHERE CLASS = 'Y'       \"Y = economy\n  OR    CLASS = 'C'.      \"C = business\n(...)\n\nREPORT TEST.\nWRITE 'Hello World'.\n\nUSERPROMPT = 'Please double-click on a line in the output list ' &\n             'to see the complete details of the transaction.'.\n\n\nDATA LAST_EOM    TYPE D.  \"last end-of-month date\n \n* Start from today's date\n  LAST_EOM = SY-DATUM.\n* Set characters 6 and 7 (0-relative) of the YYYYMMDD string to \"01\",\n* giving the first day of the current month\n  LAST_EOM+6(2) = '01'.\n* Subtract one day\n  LAST_EOM = LAST_EOM - 1.\n \n  WRITE: 'Last day of previous month was', LAST_EOM.\n  \nDATA : BEGIN OF I_VBRK OCCURS 0,\n         VBELN LIKE VBRK-VBELN,\n         ZUONR LIKE VBRK-ZUONR,\n       END OF I_VBRK.\n\nSORT i_vbrk BY vbeln ASCENDING.\nSORT i_vbrk BY vbeln DESCENDING.\n\nRETURN."
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/abc.abc",
    "content": "%abc-2.1\r\nH:This file contains some example English tunes\r\n% note that the comments (like this one) are to highlight usages\r\n%  and would not normally be included in such detail\r\nO:England             % the origin of all tunes is England\r\n\r\nX:1                   % tune no 1\r\nT:Dusty Miller, The   % title\r\nT:Binny's Jig         % an alternative title\r\nC:Trad.               % traditional\r\nR:DH                  % double hornpipe\r\nM:3/4                 % meter\r\nK:G                   % key\r\nB>cd BAG|FA Ac BA|B>cd BAG|DG GB AG:|\r\nBdd gfg|aA Ac BA|Bdd gfa|gG GB AG:|\r\nBG G/2G/2G BG|FA Ac BA|BG G/2G/2G BG|DG GB AG:|\r\nW:Hey, the dusty miller, and his dusty coat;\r\nW:He will win a shilling, or he spend a groat.\r\nW:Dusty was the coat, dusty was the colour;\r\nW:Dusty was the kiss, that I got frae the miller.\r\n\r\nX:2\r\nT:Old Sir Simon the King\r\nC:Trad.\r\nS:Offord MSS          % from Offord manuscript\r\nN:see also Playford   % reference note\r\nM:9/8\r\nR:SJ                  % slip jig\r\nN:originally in C     % transcription note\r\nK:G\r\nD|GFG GAG G2D|GFG GAG F2D|EFE EFE EFG|A2G F2E D2:|\r\nD|GAG GAB d2D|GAG GAB c2D|[1 EFE EFE EFG|[A2G] F2E D2:|\\ % no line-break in score\r\nM:12/8                % change of meter\r\n[2 E2E EFE E2E EFG|\\  % no line-break in score\r\nM:9/8                 % change of meter\r\nA2G F2E D2|]\r\n\r\nX:3\r\nT:William and Nancy\r\nT:New Mown Hay\r\nT:Legacy, The\r\nC:Trad.\r\nO:England; Gloucs; Bledington % place of origin\r\nB:Sussex Tune Book            % can be found in these books\r\nB:Mally's Cotswold Morris vol.1 2\r\nD:Morris On                   % can be heard on this record\r\nP:(AB)2(AC)2A                 % play the parts in this order\r\nM:6/8\r\nK:G                        \r\n[P:A] D|\"G\"G2G GBd|\"C\"e2e \"G\"dBG|\"D7\"A2d \"G\"BAG|\"C\"E2\"D7\"F \"G\"G2:|\r\n[P:B] d|\"G\"e2d B2d|\"C\"gfe \"G\"d2d| \"G\"e2d    B2d|\"C\"gfe    \"D7\"d2c|\r\n        \"G\"B2B Bcd|\"C\"e2e \"G\"dBG|\"D7\"A2d \"G\"BAG|\"C\"E2\"D7\"F \"G\"G2:|\r\n% changes of meter, using inline fields\r\n[T:Slows][M:4/4][L:1/4][P:C]\"G\"d2|\"C\"e2 \"G\"d2|B2 d2|\"Em\"gf \"A7\"e2|\"D7\"d2 \"G\"d2|\\\r\n       \"C\"e2 \"G\"d2|[M:3/8][L:1/8] \"G\"B2 d |[M:6/8] \"C\"gfe \"D7\"d2c|\r\n        \"G\"B2B Bcd|\"C\"e2e \"G\"dBG|\"D7\"A2d \"G\"BAG|\"C\"E2\"D7\"F \"G\"G2:|\r\n\r\nX:4\r\nT:South Downs Jig\r\nR:jig\r\nS:Robert Harbron\r\nM:6/8\r\nL:1/8\r\nK:G\r\n|: d | dcA G3 | EFG AFE | DEF GAB | cde d2d |\r\ndcA G3 | EFG AFE | DEF GAB | cAF G2 :|\r\nB | Bcd e2c | d2B c2A | Bcd e2c | [M:9/8]d2B c2B A3 |\r\n[M:6/8]DGF E3 | cBA FED | DEF GAB |1 cAF G2 :|2 cAF G3 |]\r\n\r\nX:5\r\nT:Atholl Brose\r\n% in this example, which reproduces Highland Bagpipe gracing,\r\n%  the large number of grace notes mean that it is more convenient to be specific about\r\n%  score line-breaks (using the $ symbol), rather than using code line breaks to indicate them\r\nI:linebreak $\r\nK:D\r\n{gcd}c<{e}A {gAGAG}A2 {gef}e>A {gAGAG}Ad|\r\n{gcd}c<{e}A {gAGAG}A>e {ag}a>f {gef}e>d|\r\n{gcd}c<{e}A {gAGAG}A2 {gef}e>A {gAGAG}Ad|\r\n{g}c/d/e {g}G>{d}B {gf}gG {dc}d>B:|$\r\n{g}c<e {gf}g>e {ag}a>e {gf}g>e|\r\n{g}c<e {gf}g>e {ag}a2 {GdG}a>d|\r\n{g}c<e {gf}g>e {ag}a>e {gf}g>f|\r\n{gef}e>d {gf}g>d {gBd}B<{e}G {dc}d>B|\r\n{g}c<e {gf}g>e {ag}a>e {gf}g>e|\r\n{g}c<e {gf}g>e {ag}a2 {GdG}ad|\r\n{g}c<{GdG}e {gf}ga {f}g>e {g}f>d|\r\n{g}e/f/g {Gdc}d>c {gBd}B<{e}G {dc}d2|]\r\n\r\nX:6\r\nT:Untitled Reel\r\nC:Trad.\r\nK:D\r\neg|a2ab ageg|agbg agef|g2g2 fgag|f2d2 d2:|\\\r\ned|cecA B2ed|cAcA E2ed|cecA B2ed|c2A2 A2:|\r\nK:G\r\nAB|cdec BcdB|ABAF GFE2|cdec BcdB|c2A2 A2:|\r\n\r\nX:7\r\nT:Kitchen Girl\r\nC:Trad.\r\nK:D\r\n[c4a4] [B4g4]|efed c2cd|e2f2 gaba|g2e2 e2fg|\r\na4 g4|efed cdef|g2d2 efed|c2A2 A4:|\r\nK:G\r\nABcA BAGB|ABAG EDEG|A2AB c2d2|e3f edcB|ABcA BAGB|\r\nABAG EGAB|cBAc BAG2|A4 A4:|\r\n\r\n%abc-2.1\r\n%%pagewidth      21cm\r\n%%pageheight     29.7cm\r\n%%topspace       0.5cm\r\n%%topmargin      1cm\r\n%%botmargin      0cm\r\n%%leftmargin     1cm\r\n%%rightmargin    1cm\r\n%%titlespace     0cm\r\n%%titlefont      Times-Bold 32\r\n%%subtitlefont   Times-Bold 24\r\n%%composerfont   Times 16\r\n%%vocalfont      Times-Roman 14\r\n%%staffsep       60pt\r\n%%sysstaffsep    20pt\r\n%%musicspace     1cm\r\n%%vocalspace     5pt\r\n%%measurenb      0\r\n%%barsperstaff   5\r\n%%scale          0.7\r\nX: 1\r\nT: Canzonetta a tre voci\r\nC: Claudio Monteverdi (1567-1643)\r\nM: C\r\nL: 1/4\r\nQ: \"Andante mosso\" 1/4 = 110\r\n%%score [1 2 3]\r\nV: 1 clef=treble name=\"Soprano\"sname=\"A\"\r\nV: 2 clef=treble name=\"Alto\"   sname=\"T\"\r\nV: 3 clef=bass middle=d name=\"Tenor\"  sname=\"B\"\r\n%%MIDI program 1 75 % recorder\r\n%%MIDI program 2 75\r\n%%MIDI program 3 75\r\nK: Eb\r\n% 1 - 4\r\n[V: 1] |:z4  |z4  |f2ec         |_ddcc        |\r\nw: Son que-sti~i cre-spi cri-ni~e\r\nw: Que-sti son gli~oc-chi che mi-\r\n[V: 2] |:c2BG|AAGc|(F/G/A/B/)c=A|B2AA         |\r\nw: Son que-sti~i cre-spi cri-ni~e que - - - - sto~il vi-so e\r\nw: Que-sti son~gli oc-chi che mi-ran - - - - do fi-so mi-\r\n[V: 3] |:z4  |f2ec|_ddcf        |(B/c/_d/e/)ff|\r\nw: Son que-sti~i cre-spi cri-ni~e que - - - - sto~il\r\nw: Que-sti son~gli oc-chi che mi-ran - - - - do\r\n% 5 - 9\r\n[V: 1] cAB2     |cAAA |c3B|G2!fermata!Gz ::e4|\r\nw: que-sto~il vi-so ond' io ri-man-go~uc-ci-so. Deh,\r\nw: ran-do fi-so, tut-to re-stai con-qui-so.\r\n[V: 2] AAG2     |AFFF |A3F|=E2!fermata!Ez::c4|\r\nw: que-sto~il vi-so ond' io ri-man-go~uc-ci-so. Deh,\r\nw: ran-do fi-so tut-to re-stai con-qui-so.\r\n[V: 3] (ag/f/e2)|A_ddd|A3B|c2!fermata!cz ::A4|\r\nw: vi - - - so ond' io ti-man-go~uc-ci-so. Deh,\r\nw: fi - - - so tut-to re-stai con-qui-so.\r\n% 10 - 15\r\n[V: 1] f_dec |B2c2|zAGF  |\\\r\nw: dim-me-lo ben mi-o, che que-sto\\\r\n=EFG2          |1F2z2:|2F8|] % more notes\r\nw: sol de-si-o_. % more lyrics\r\n[V: 2] ABGA  |G2AA|GF=EF |(GF3/2=E//D//E)|1F2z2:|2F8|]\r\nw: dim-me-lo ben mi-o, che que-sto sol de-si - - - - o_.\r\n[V: 3] _dBc>d|e2AF|=EFc_d|c4             |1F2z2:|2F8|]\r\nw: dim-me-lo ben mi-o, che que-sto sol de-si-o_."
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/actionscript.as",
    "content": "package code\n{\n    /*****************************************\n\t * based on textmate actionscript bundle\n\t ****************************************/\n\t \n\timport fl.events.SliderEvent;\n\t\n\tpublic class Foo extends MovieClip\n\t{\n\t\t//*************************\n\t\t// Properties:\n\t\t\n\t\tpublic var activeSwatch:MovieClip;\n\t\t\n\t\t// Color offsets\n\t\tpublic var c1:Number = 0;\t// R\n\t\t\n\t\t//*************************\n\t\t// Constructor:\n\t\t\n\t\tpublic function Foo()\n\t\t{\n\t\t\t// Respond to mouse events\n\t\t\tswatch1_btn.addEventListener(MouseEvent.CLICK,swatchHandler,false,0,false);\n\t\t\tpreviewBox_btn.addEventListener(MouseEvent.MOUSE_DOWN,dragPressHandler);\n\t\t\t\n\t\t\t// Respond to drag events\n\t\t\tred_slider.addEventListener(SliderEvent.THUMB_DRAG,sliderHandler);\n\t\t\t\n\t\t\t// Draw a frame later\n\t\t\taddEventListener(Event.ENTER_FRAME,draw);\n\t\t}\n        \n\t\tprotected function clickHandler(event:MouseEvent):void\n\t\t{\n\t\t\tcar.transform.colorTransform = new ColorTransform(0,0,0,1,c1,c2,c3);\n\t\t}\n\t\t\n\t\tprotected function changeRGBHandler(event:Event):void\n\t\t{\n\t\t\tc1 = Number(c1_txt.text);\n            \n\t\t\tif(!(c1>=0)){\n\t\t\t\tc1 = 0;\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\tupdateSliders();\n\t\t}\n\t}\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/ada.ada",
    "content": "with Ada.Text_IO; use Ada.Text_IO;\nprocedure Hello is\nbegin\n  Put_Line(\"Hello, world!\");\nend Hello;"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/apex.apex",
    "content": "public class testBlockDuplicatesLeadTrigger {\n\t\n\tstatic testMethod void testDuplicateTrigger(){  \n\t\n\t\tLead[] l1 =new Lead[]{\n\t\t\tnew Lead(  Email='homer@fox.tv', LastName='Simpson', Company='fox' )\n\t\t};\n\t\tinsert l1;\t\t// add a known lead\n\t\t\n\t\tLead[] l2 =new Lead[]{\n\t\t\tnew Lead(  Email='homer@fox.tv', LastName='Simpson', Company='fox' )\n\t\t};\n\t\t// try to add a matching lead\n\t\ttry {\tinsert l2;\t} catch ( System.DmlException e) { \n\t\t\tsystem.assert(e.getMessage().contains('first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, A lead with this email address already exists'),\n\t\t\t e.getMessage());\n\t\t}\n\t\t\n\t\t// test duplicates in the same batch\n\t\tLead[] l3 =new Lead[]{\n\t\t\tnew Lead(  Email='marge@fox.tv', LastName='Simpson', Company='fox' ),\n\t\t\tnew Lead(  Email='marge@fox.tv', LastName='Simpson', Company='fox' )\n\t\t};\t\t\n\t\ttry { insert l3;\t} catch ( System.DmlException e) { \n\t\t\tsystem.assert(e.getMessage().contains('first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, Another new lead has the same email'),\n\t\t\t\te.getMessage());\n\t\t\t\n\t\t}\n\t\t\n\t\t// test update also\n\t\tLead[] lup = new Lead[]{\n\t\t\tnew Lead(  Email='marge@fox.tv',  LastName='Simpson', Company='fox' )\n\t\t};\n\t\tinsert lup;\n\t\tLead marge = [ select id,Email from lead where Email = 'marge@fox.tv' limit 1];\n\t\tsystem.assert(marge!=null);\n\t\tmarge.Email = 'homer@fox.tv'; \n\t\t\n\t\ttry { update marge; } catch ( System.DmlException e) { \n\t\t\tsystem.assert(e.getMessage().contains('irst error: FIELD_CUSTOM_VALIDATION_EXCEPTION, A lead with this email address already exists'),\n\t\t\t\te.getMessage());\t\n\t\t}\n\t}\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/asciidoc.asciidoc",
    "content": "AsciiDoc User Guide\n===================\nStuart Rackham <srackham@gmail.com>\n:Author Initials: SJR\n:toc:\n:icons:\n:numbered:\n:website: http://www.methods.co.nz/asciidoc/\n\nAsciiDoc is a text document format for writing notes, documentation,\narticles, books, ebooks, slideshows, web pages, blogs and UNIX man\npages.  AsciiDoc files can be translated to many formats including\nHTML, PDF, EPUB, man page.  AsciiDoc is highly configurable: both the\nAsciiDoc source file syntax and the backend output markups (which can\nbe almost any type of SGML/XML markup) can be customized and extended\nby the user.\n\n.This document\n**********************************************************************\nThis is an overly large document, it probably needs to be refactored\ninto a Tutorial, Quick Reference and Formal Reference.\n\nIf you're new to AsciiDoc read this section and the <<X6,Getting\nStarted>> section and take a look at the example AsciiDoc (`*.txt`)\nsource files in the distribution `doc` directory.\n**********************************************************************\n\n\nIntroduction\n------------\nAsciiDoc is a plain text human readable/writable document format that\ncan be translated to DocBook or HTML using the asciidoc(1) command.\nYou can then either use asciidoc(1) generated HTML directly or run\nasciidoc(1) DocBook output through your favorite DocBook toolchain or\nuse the AsciiDoc a2x(1) toolchain wrapper to produce PDF, EPUB, DVI,\nLaTeX, PostScript, man page, HTML and text formats.\n\nThe AsciiDoc format is a useful presentation format in its own right:\nAsciiDoc markup is simple, intuitive and as such is easily proofed and\nedited.\n\nAsciiDoc is light weight: it consists of a single Python script and a\nbunch of configuration files. Apart from asciidoc(1) and a Python\ninterpreter, no other programs are required to convert AsciiDoc text\nfiles to DocBook or HTML. See <<X11,Example AsciiDoc Documents>>\nbelow.\n\nText markup conventions tend to be a matter of (often strong) personal\npreference: if the default syntax is not to your liking you can define\nyour own by editing the text based asciidoc(1) configuration files.\nYou can also create configuration files to translate AsciiDoc\ndocuments to almost any SGML/XML markup.\n\nasciidoc(1) comes with a set of configuration files to translate\nAsciiDoc articles, books and man pages to HTML or DocBook backend\nformats.\n\n.My AsciiDoc Itch\n**********************************************************************\nDocBook has emerged as the de facto standard Open Source documentation\nformat. But DocBook is a complex language, the markup is difficult to\nread and even more difficult to write directly -- I found I was\nspending more time typing markup tags, consulting reference manuals\nand fixing syntax errors, than I was writing the documentation.\n**********************************************************************\n\n\n[[X6]]\nGetting Started\n---------------\nInstalling AsciiDoc\n~~~~~~~~~~~~~~~~~~~\nSee the `README` and `INSTALL` files for install prerequisites and\nprocedures. Packagers take a look at <<X38,Packager Notes>>.\n\n[[X11]]\nExample AsciiDoc Documents\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe best way to quickly get a feel for AsciiDoc is to view the\nAsciiDoc web site and/or distributed examples:\n\n- Take a look at the linked examples on the AsciiDoc web site home\n  page {website}.  Press the 'Page Source' sidebar menu item to view\n  corresponding AsciiDoc source.\n- Read the `*.txt` source files in the distribution `./doc` directory\n  along with the corresponding HTML and DocBook XML files.\n\n\nAsciiDoc Document Types\n-----------------------\nThere are three types of AsciiDoc documents: article, book and\nmanpage. All document types share the same AsciiDoc format with some\nminor variations. If you are familiar with DocBook you will have\nnoticed that AsciiDoc document types correspond to the same-named\nDocBook document types.\n\nUse the asciidoc(1) `-d` (`--doctype`) option to specify the AsciiDoc\ndocument type -- the default document type is 'article'.\n\nBy convention the `.txt` file extension is used for AsciiDoc document\nsource files.\n\narticle\n~~~~~~~\nUsed for short documents, articles and general documentation.  See the\nAsciiDoc distribution `./doc/article.txt` example.\n\nAsciiDoc defines standard DocBook article frontmatter and backmatter\n<<X93,section markup templates>> (appendix, abstract, bibliography,\nglossary, index).\n\nbook\n~~~~\nBooks share the same format as articles, with the following\ndifferences:\n\n- The part titles in multi-part books are <<X17,top level titles>>\n  (same level as book title).\n- Some sections are book specific e.g. preface and colophon.\n\nBook documents will normally be used to produce DocBook output since\nDocBook processors can automatically generate footnotes, table of\ncontents, list of tables, list of figures, list of examples and\nindexes.\n\nAsciiDoc defines standard DocBook book frontmatter and backmatter\n<<X93,section markup templates>> (appendix, dedication, preface,\nbibliography, glossary, index, colophon).\n\n.Example book documents\nBook::\n  The `./doc/book.txt` file in the AsciiDoc distribution.\n\nMulti-part book::\n  The `./doc/book-multi.txt` file in the AsciiDoc distribution.\n\nmanpage\n~~~~~~~\nUsed to generate roff format UNIX manual pages.  AsciiDoc manpage\ndocuments observe special header title and section naming conventions\n-- see the <<X1,Manpage Documents>> section for details.\n\nAsciiDoc defines the 'synopsis' <<X93,section markup template>> to\ngenerate the DocBook `refsynopsisdiv` section.\n\nSee also the asciidoc(1) man page source (`./doc/asciidoc.1.txt`) from\nthe AsciiDoc distribution.\n\n\n[[X5]]\nAsciiDoc Backends\n-----------------\nThe asciidoc(1) command translates an AsciiDoc formatted file to the\nbackend format specified by the `-b` (`--backend`) command-line\noption. asciidoc(1) itself has little intrinsic knowledge of backend\nformats, all translation rules are contained in customizable cascading\nconfiguration files. Backend specific attributes are listed in the\n<<X88,Backend Attributes>> section.\n\ndocbook45::\n  Outputs DocBook XML 4.5 markup.\n\nhtml4::\n  This backend generates plain HTML 4.01 Transitional markup.\n\nxhtml11::\n  This backend generates XHTML 1.1 markup styled with CSS2. Output\n  files have an `.html` extension.\n\nhtml5::\n  This backend generates HTML 5 markup, apart from the inclusion of\n  <<X98,audio and video block macros>> it is functionally identical to\n  the 'xhtml11' backend.\n\nslidy::\n  Use this backend to generate self-contained\n  http://www.w3.org/Talks/Tools/Slidy2/[Slidy] HTML slideshows for\n  your web browser from AsciiDoc documents. The Slidy backend is\n  documented in the distribution `doc/slidy.txt` file and\n  {website}slidy.html[online].\n\nwordpress::\n  A minor variant of the 'html4' backend to support\n  http://srackham.wordpress.com/blogpost1/[blogpost].\n\nlatex::\n  Experimental LaTeX backend.\n\nBackend Aliases\n~~~~~~~~~~~~~~~\nBackend aliases are alternative names for AsciiDoc backends.  AsciiDoc\ncomes with two backend aliases: 'html' (aliased to 'xhtml11') and\n'docbook' (aliased to 'docbook45').\n\nYou can assign (or reassign) backend aliases by setting an AsciiDoc\nattribute named like `backend-alias-<alias>` to an AsciiDoc backend\nname. For example, the following backend alias attribute definitions\nappear in the `[attributes]` section of the global `asciidoc.conf`\nconfiguration file:\n\n  backend-alias-html=xhtml11\n  backend-alias-docbook=docbook45\n\n[[X100]]\nBackend Plugins\n~~~~~~~~~~~~~~~\nThe asciidoc(1) `--backend` option is also used to install and manage\nbackend <<X101,plugins>>.\n\n- A backend plugin is used just like the built-in backends.\n- Backend plugins <<X27,take precedence>> over built-in backends with\n  the same name.\n- You can use the `{asciidoc-confdir}` <<X60, intrinsic attribute>> to\n  refer to the built-in backend configuration file location from\n  backend plugin configuration files.\n- You can use the `{backend-confdir}` <<X60, intrinsic attribute>> to\n  refer to the backend plugin configuration file location.\n- By default backends plugins are installed in\n  `$HOME/.asciidoc/backends/<backend>` where `<backend>` is the\n  backend name.\n\n\nDocBook\n-------\nAsciiDoc generates 'article', 'book' and 'refentry'\nhttp://www.docbook.org/[DocBook] documents (corresponding to the\nAsciiDoc 'article', 'book' and 'manpage' document types).\n\nMost Linux distributions come with conversion tools (collectively\ncalled a toolchain) for <<X12,converting DocBook files>> to\npresentation formats such as Postscript, HTML, PDF, EPUB, DVI,\nPostScript, LaTeX, roff (the native man page format), HTMLHelp,\nJavaHelp and text.  There are also programs that allow you to view\nDocBook files directly, for example http://live.gnome.org/Yelp[Yelp]\n(the GNOME help viewer).\n\n[[X12]]\nConverting DocBook to other file formats\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nDocBook files are validated, parsed and translated various\npresentation file formats using a combination of applications\ncollectively called a DocBook 'tool chain'. The function of a tool\nchain is to read the DocBook markup (produced by AsciiDoc) and\ntransform it to a presentation format (for example HTML, PDF, HTML\nHelp, EPUB, DVI, PostScript, LaTeX).\n\nA wide range of user output format requirements coupled with a choice\nof available tools and stylesheets results in many valid tool chain\ncombinations.\n\n[[X43]]\na2x Toolchain Wrapper\n~~~~~~~~~~~~~~~~~~~~~\nOne of the biggest hurdles for new users is installing, configuring\nand using a DocBook XML toolchain. `a2x(1)` can help -- it's a\ntoolchain wrapper command that will generate XHTML (chunked and\nunchunked), PDF, EPUB, DVI, PS, LaTeX, man page, HTML Help and text\nfile outputs from an AsciiDoc text file.  `a2x(1)` does all the grunt\nwork associated with generating and sequencing the toolchain commands\nand managing intermediate and output files.  `a2x(1)` also optionally\ndeploys admonition and navigation icons and a CSS stylesheet. See the\n`a2x(1)` man page for more details. In addition to `asciidoc(1)` you\nalso need <<X40,xsltproc(1)>>, <<X13,DocBook XSL Stylesheets>> and\noptionally: <<X31,dblatex>> or <<X14,FOP>> (to generate PDF);\n`w3m(1)` or `lynx(1)` (to generate text).\n\nThe following examples generate `doc/source-highlight-filter.pdf` from\nthe AsciiDoc `doc/source-highlight-filter.txt` source file. The first\nexample uses `dblatex(1)` (the default PDF generator) the second\nexample forces FOP to be used:\n\n  $ a2x -f pdf doc/source-highlight-filter.txt\n  $ a2x -f pdf --fop doc/source-highlight-filter.txt\n\nSee the `a2x(1)` man page for details.\n\nTIP: Use the `--verbose` command-line option to view executed\ntoolchain commands.\n\nHTML generation\n~~~~~~~~~~~~~~~\nAsciiDoc produces nicely styled HTML directly without requiring a\nDocBook toolchain but there are also advantages in going the DocBook\nroute:\n\n- HTML from DocBook can optionally include automatically generated\n  indexes, tables of contents, footnotes, lists of figures and tables.\n- DocBook toolchains can also (optionally) generate separate (chunked)\n  linked HTML pages for each document section.\n- Toolchain processing performs link and document validity checks.\n- If the DocBook 'lang' attribute is set then things like table of\n  contents, figure and table captions and admonition captions will be\n  output in the specified language (setting the AsciiDoc 'lang'\n  attribute sets the DocBook 'lang' attribute).\n\nOn the other hand, HTML output directly from AsciiDoc is much faster,\nis easily customized and can be used in situations where there is no\nsuitable DocBook toolchain (for example, see the {website}[AsciiDoc\nwebsite]).\n\nPDF generation\n~~~~~~~~~~~~~~\nThere are two commonly used tools to generate PDFs from DocBook,\n<<X31,dblatex>> and <<X14,FOP>>.\n\n.dblatex or FOP?\n- 'dblatex' is easier to install, there's zero configuration\n  required and no Java VM to install -- it just works out of the box.\n- 'dblatex' source code highlighting and numbering is superb.\n- 'dblatex' is easier to use as it converts DocBook directly to PDF\n  whereas before using 'FOP' you have to convert DocBook to XML-FO\n  using <<X13,DocBook XSL Stylesheets>>.\n- 'FOP' is more feature complete (for example, callouts are processed\n  inside literal layouts) and arguably produces nicer looking output.\n\nHTML Help generation\n~~~~~~~~~~~~~~~~~~~~\n. Convert DocBook XML documents to HTML Help compiler source files\n  using <<X13,DocBook XSL Stylesheets>> and <<X40,xsltproc(1)>>.\n. Convert the HTML Help source (`.hhp` and `.html`) files to HTML Help\n  (`.chm`) files using the <<X67,Microsoft HTML Help Compiler>>.\n\nToolchain components summary\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc::\n    Converts AsciiDoc (`.txt`) files to DocBook XML (`.xml`) files.\n\n[[X13]]http://docbook.sourceforge.net/projects/xsl/[DocBook XSL Stylesheets]::\n  These are a set of XSL stylesheets containing rules for converting\n  DocBook XML documents to HTML, XSL-FO, manpage and HTML Help files.\n  The stylesheets are used in conjunction with an XML parser such as\n  <<X40,xsltproc(1)>>.\n\n[[X40]]http://www.xmlsoft.org[xsltproc]::\n  An XML parser for applying XSLT stylesheets (in our case the\n  <<X13,DocBook XSL Stylesheets>>) to XML documents.\n\n[[X31]]http://dblatex.sourceforge.net/[dblatex]::\n  Generates PDF, DVI, PostScript and LaTeX formats directly from\n  DocBook source via the intermediate LaTeX typesetting language --\n  uses <<X13,DocBook XSL Stylesheets>>, <<X40,xsltproc(1)>> and\n  `latex(1)`.\n\n[[X14]]http://xml.apache.org/fop/[FOP]::\n  The Apache Formatting Objects Processor converts XSL-FO (`.fo`)\n  files to PDF files.  The XSL-FO files are generated from DocBook\n  source files using <<X13,DocBook XSL Stylesheets>> and\n  <<X40,xsltproc(1)>>.\n\n[[X67]]Microsoft Help Compiler::\n  The Microsoft HTML Help Compiler (`hhc.exe`) is a command-line tool\n  that converts HTML Help source files to a single HTML Help (`.chm`)\n  file. It runs on MS Windows platforms and can be downloaded from\n  http://www.microsoft.com.\n\nAsciiDoc dblatex configuration files\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe AsciiDoc distribution `./dblatex` directory contains\n`asciidoc-dblatex.xsl` (customized XSL parameter settings) and\n`asciidoc-dblatex.sty` (customized LaTeX settings). These are examples\nof optional <<X31,dblatex>> output customization and are used by\n<<X43,a2x(1)>>.\n\nAsciiDoc DocBook XSL Stylesheets drivers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou will have noticed that the distributed HTML and HTML Help\ndocumentation files (for example `./doc/asciidoc.html`) are not the\nplain outputs produced using the default 'DocBook XSL Stylesheets'\nconfiguration.  This is because they have been processed using\ncustomized DocBook XSL Stylesheets along with (in the case of HTML\noutputs) the custom `./stylesheets/docbook-xsl.css` CSS stylesheet.\n\nYou'll find the customized DocBook XSL drivers along with additional\ndocumentation in the distribution `./docbook-xsl` directory. The\nexamples that follow are executed from the distribution documentation\n(`./doc`) directory. These drivers are also used by <<X43,a2x(1)>>.\n\n`common.xsl`::\n    Shared driver parameters.  This file is not used directly but is\n    included in all the following drivers.\n\n`chunked.xsl`::\n    Generate chunked XHTML (separate HTML pages for each document\n    section) in the `./doc/chunked` directory. For example:\n\n    $ python ../asciidoc.py -b docbook asciidoc.txt\n    $ xsltproc --nonet ../docbook-xsl/chunked.xsl asciidoc.xml\n\n`epub.xsl`::\n    Used by <<X43,a2x(1)>> to generate EPUB formatted documents.\n\n`fo.xsl`::\n    Generate XSL Formatting Object (`.fo`) files for subsequent PDF\n    file generation using FOP. For example:\n\n    $ python ../asciidoc.py -b docbook article.txt\n    $ xsltproc --nonet ../docbook-xsl/fo.xsl article.xml > article.fo\n    $ fop article.fo article.pdf\n\n`htmlhelp.xsl`::\n    Generate Microsoft HTML Help source files for the MS HTML Help\n    Compiler in the `./doc/htmlhelp` directory. This example is run on\n    MS Windows from a Cygwin shell prompt:\n\n    $ python ../asciidoc.py -b docbook asciidoc.txt\n    $ xsltproc --nonet ../docbook-xsl/htmlhelp.xsl asciidoc.xml\n    $ c:/Program\\ Files/HTML\\ Help\\ Workshop/hhc.exe htmlhelp.hhp\n\n`manpage.xsl`::\n    Generate a `roff(1)` format UNIX man page from a DocBook XML\n    'refentry' document. This example generates an `asciidoc.1` man\n    page file:\n\n    $ python ../asciidoc.py -d manpage -b docbook asciidoc.1.txt\n    $ xsltproc --nonet ../docbook-xsl/manpage.xsl asciidoc.1.xml\n\n`xhtml.xsl`::\n    Convert a DocBook XML file to a single XHTML file. For example:\n\n    $ python ../asciidoc.py -b docbook asciidoc.txt\n    $ xsltproc --nonet ../docbook-xsl/xhtml.xsl asciidoc.xml > asciidoc.html\n\nIf you want to see how the complete documentation set is processed\ntake a look at the A-A-P script `./doc/main.aap`.\n\n\nGenerating Plain Text Files\n---------------------------\nAsciiDoc does not have a text backend (for most purposes AsciiDoc\nsource text is fine), however you can convert AsciiDoc text files to\nformatted text using the AsciiDoc <<X43,a2x(1)>> toolchain wrapper\nutility.\n\n\n[[X35]]\nHTML5 and XHTML 1.1\n-------------------\nThe 'xhtml11' and 'html5' backends embed or link CSS and JavaScript\nfiles in their outputs, there is also a <<X99,themes>> plugin\nframework.\n\n- If the AsciiDoc 'linkcss' attribute is defined then CSS and\n  JavaScript files are linked to the output document, otherwise they\n  are embedded (the default behavior).\n- The default locations for CSS and JavaScript files can be changed by\n  setting the AsciiDoc 'stylesdir' and 'scriptsdir' attributes\n  respectively.\n- The default locations for embedded and linked files differ and are\n  calculated at different times -- embedded files are loaded when\n  asciidoc(1) generates the output document, linked files are loaded\n  by the browser when the user views the output document.\n- Embedded files are automatically inserted in the output files but\n  you need to manually copy linked CSS and Javascript files from\n  AsciiDoc <<X27,configuration directories>> to the correct location\n  relative to the output document.\n\n.Stylesheet file locations\n[cols=\"3*\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|'stylesdir' attribute\n|Linked location ('linkcss' attribute defined)\n|Embedded location ('linkcss' attribute undefined)\n\n|Undefined (default).\n|Same directory as the output document.\n|`stylesheets` subdirectory in the AsciiDoc configuration directory\n(the directory containing the backend conf file).\n\n|Absolute or relative directory name.\n|Absolute or relative to the output document.\n|Absolute or relative to the AsciiDoc configuration directory (the\ndirectory containing the backend conf file).\n\n|====================================================================\n\n.JavaScript file locations\n[cols=\"3*\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|'scriptsdir' attribute\n|Linked location ('linkcss' attribute defined)\n|Embedded location ('linkcss' attribute undefined)\n\n|Undefined (default).\n|Same directory as the output document.\n|`javascripts` subdirectory in the AsciiDoc configuration directory\n(the directory containing the backend conf file).\n\n|Absolute or relative directory name.\n|Absolute or relative to the output document.\n|Absolute or relative to the AsciiDoc configuration directory (the\ndirectory containing the backend conf file).\n\n|====================================================================\n\n[[X99]]\nThemes\n~~~~~~\nThe AsciiDoc 'theme' attribute is used to select an alternative CSS\nstylesheet and to optionally include additional JavaScript code.\n\n- Theme files reside in an AsciiDoc <<X27,configuration directory>>\n  named `themes/<theme>/` (where `<theme>` is the the theme name set\n  by the 'theme' attribute). asciidoc(1) sets the 'themedir' attribute\n  to the theme directory path name.\n- The 'theme' attribute can also be set using the asciidoc(1)\n  `--theme` option, the `--theme` option can also be used to manage\n  theme <<X101,plugins>>.\n- AsciiDoc ships with two themes: 'flask' and 'volnitsky'.\n- The `<theme>.css` file replaces the default `asciidoc.css` CSS file.\n- The `<theme>.js` file is included in addition to the default\n  `asciidoc.js` JavaScript file.\n- If the <<X66,data-uri>> attribute is defined then icons are loaded\n  from the theme `icons` sub-directory if it exists (i.e.  the\n  'iconsdir' attribute is set to theme `icons` sub-directory path).\n- Embedded theme files are automatically inserted in the output files\n  but you need to manually copy linked CSS and Javascript files to the\n  location of the output documents.\n- Linked CSS and JavaScript theme files are linked to the same linked\n  locations as <<X35,other CSS and JavaScript files>>.\n\nFor example, the command-line option `--theme foo` (or `--attribute\ntheme=foo`) will cause asciidoc(1) to search <<\"X27\",\"configuration\nfile locations 1, 2 and 3\">> for a sub-directory called `themes/foo`\ncontaining the stylesheet `foo.css` and optionally a JavaScript file\nname `foo.js`.\n\n\nDocument Structure\n------------------\nAn AsciiDoc document consists of a series of <<X8,block elements>>\nstarting with an optional document Header, followed by an optional\nPreamble, followed by zero or more document Sections.\n\nAlmost any combination of zero or more elements constitutes a valid\nAsciiDoc document: documents can range from a single sentence to a\nmulti-part book.\n\nBlock Elements\n~~~~~~~~~~~~~~\nBlock elements consist of one or more lines of text and may contain\nother block elements.\n\nThe AsciiDoc block structure can be informally summarized as follows\nfootnote:[This is a rough structural guide, not a rigorous syntax\ndefinition]:\n\n  Document      ::= (Header?,Preamble?,Section*)\n  Header        ::= (Title,(AuthorInfo,RevisionInfo?)?)\n  AuthorInfo    ::= (FirstName,(MiddleName?,LastName)?,EmailAddress?)\n  RevisionInfo  ::= (RevisionNumber?,RevisionDate,RevisionRemark?)\n  Preamble      ::= (SectionBody)\n  Section       ::= (Title,SectionBody?,(Section)*)\n  SectionBody   ::= ((BlockTitle?,Block)|BlockMacro)+\n  Block         ::= (Paragraph|DelimitedBlock|List|Table)\n  List          ::= (BulletedList|NumberedList|LabeledList|CalloutList)\n  BulletedList  ::= (ListItem)+\n  NumberedList  ::= (ListItem)+\n  CalloutList   ::= (ListItem)+\n  LabeledList   ::= (ListEntry)+\n  ListEntry     ::= (ListLabel,ListItem)\n  ListLabel     ::= (ListTerm+)\n  ListItem      ::= (ItemText,(List|ListParagraph|ListContinuation)*)\n\nWhere:\n\n- '?' implies zero or one occurrence, '+' implies one or more\n  occurrences, '*' implies zero or more occurrences.\n- All block elements are separated by line boundaries.\n- `BlockId`, `AttributeEntry` and `AttributeList` block elements (not\n  shown) can occur almost anywhere.\n- There are a number of document type and backend specific\n  restrictions imposed on the block syntax.\n- The following elements cannot contain blank lines: Header, Title,\n  Paragraph, ItemText.\n- A ListParagraph is a Paragraph with its 'listelement' option set.\n- A ListContinuation is a <<X15,list continuation element>>.\n\n[[X95]]\nHeader\n~~~~~~\nThe Header contains document meta-data, typically title plus optional\nauthorship and revision information:\n\n- The Header is optional, but if it is used it must start with a\n  document <<X17,title>>.\n- Optional Author and Revision information immediately follows the\n  header title.\n- The document header must be separated from the remainder of the\n  document by one or more blank lines and cannot contain blank lines.\n- The header can include comments.\n- The header can include <<X18,attribute entries>>, typically\n  'doctype', 'lang', 'encoding', 'icons', 'data-uri', 'toc',\n  'numbered'.\n- Header attributes are overridden by command-line attributes.\n- If the header contains non-UTF-8 characters then the 'encoding' must\n  precede the header (either in the document or on the command-line).\n\nHere's an example AsciiDoc document header:\n\n  Writing Documentation using AsciiDoc\n  ====================================\n  Joe Bloggs <jbloggs@mymail.com>\n  v2.0, February 2003:\n  Rewritten for version 2 release.\n\nThe author information line contains the author's name optionally\nfollowed by the author's email address. The author's name is formatted\nlike:\n\n  firstname[ [middlename ]lastname][ <email>]]\n\ni.e. a first name followed by optional middle and last names followed\nby an email address in that order.  Multi-word first, middle and last\nnames can be entered using the underscore as a word separator.  The\nemail address comes last and must be enclosed in angle <> brackets.\nHere a some examples of author information lines:\n\n  Joe Bloggs <jbloggs@mymail.com>\n  Joe Bloggs\n  Vincent Willem van_Gogh\n\nIf the author line does not match the above specification then the\nentire author line is treated as the first name.\n\nThe optional revision information line follows the author information\nline. The revision information can be one of two formats:\n\n. An optional document revision number followed by an optional\n  revision date followed by an optional revision remark:\n+\n--\n  * If the revision number is specified it must be followed by a\n    comma.\n  * The revision number must contain at least one numeric character.\n  * Any non-numeric characters preceding the first numeric character\n    will be dropped.\n  * If a revision remark is specified it must be preceded by a colon.\n    The revision remark extends from the colon up to the next blank\n    line, attribute entry or comment and is subject to normal text\n    substitutions.\n  * If a revision number or remark has been set but the revision date\n    has not been set then the revision date is set to the value of the\n    'docdate' attribute.\n\nExamples:\n\n  v2.0, February 2003\n  February 2003\n  v2.0,\n  v2.0, February 2003: Rewritten for version 2 release.\n  February 2003: Rewritten for version 2 release.\n  v2.0,: Rewritten for version 2 release.\n  :Rewritten for version 2 release.\n--\n\n. The revision information line can also be an RCS/CVS/SVN $Id$\n  marker:\n+\n--\n  * AsciiDoc extracts the 'revnumber', 'revdate', and 'author'\n    attributes from the $Id$ revision marker and displays them in the\n    document header.\n  * If an $Id$ revision marker is used the header author line can be\n    omitted.\n\nExample:\n\n  $Id: mydoc.txt,v 1.5 2009/05/17 17:58:44 jbloggs Exp $\n--\n\nYou can override or set header parameters by passing 'revnumber',\n'revremark', 'revdate', 'email', 'author', 'authorinitials',\n'firstname' and 'lastname' attributes using the asciidoc(1) `-a`\n(`--attribute`) command-line option. For example:\n\n  $ asciidoc -a revdate=2004/07/27 article.txt\n\nAttribute entries can also be added to the header for substitution in\nthe header template with <<X18,Attribute Entry>> elements.\n\nThe 'title' element in HTML outputs is set to the AsciiDoc document\ntitle, you can set it to a different value by including a 'title'\nattribute entry in the document header.\n\n[[X87]]\nAdditional document header information\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAsciiDoc has two mechanisms for optionally including additional\nmeta-data in the header of the output document:\n\n'docinfo' configuration file sections::\nIf a <<X7,configuration file>> section named 'docinfo' has been loaded\nthen it will be included in the document header. Typically the\n'docinfo' section name will be prefixed with a '+' character so that it\nis appended to (rather than replace) other 'docinfo' sections.\n\n'docinfo' files::\nTwo docinfo files are recognized: one named `docinfo` and a second\nnamed like the AsciiDoc source file with a `-docinfo` suffix.  For\nexample, if the source document is called `mydoc.txt` then the\ndocument information files would be `docinfo.xml` and\n`mydoc-docinfo.xml` (for DocBook outputs) and `docinfo.html` and\n`mydoc-docinfo.html` (for HTML outputs).  The <<X97,docinfo, docinfo1\nand docinfo2>> attributes control which docinfo files are included in\nthe output files.\n\nThe contents docinfo templates and files is dependent on the type of\noutput:\n\nHTML::\n  Valid 'head' child elements. Typically 'style' and 'script' elements\n  for CSS and JavaScript inclusion.\n\nDocBook::\n  Valid 'articleinfo' or 'bookinfo' child elements.  DocBook defines\n  numerous elements for document meta-data, for example: copyrights,\n  document history and authorship information.  See the DocBook\n  `./doc/article-docinfo.xml` example that comes with the AsciiDoc\n  distribution.  The rendering of meta-data elements (or not) is\n  DocBook processor dependent.\n\n\n[[X86]]\nPreamble\n~~~~~~~~\nThe Preamble is an optional untitled section body between the document\nHeader and the first Section title.\n\nSections\n~~~~~~~~\nIn addition to the document title (level 0), AsciiDoc supports four\nsection levels: 1 (top) to 4 (bottom).  Section levels are delimited\nby section <<X17,titles>>.  Sections are translated using\nconfiguration file <<X93,section markup templates>>. AsciiDoc\ngenerates the following <<X60,intrinsic attributes>> specifically for\nuse in section markup templates:\n\nlevel::\nThe `level` attribute is the section level number, it is normally just\nthe <<X17,title>> level number (1..4). However, if the `leveloffset`\nattribute is defined it will be added to the `level` attribute. The\n`leveloffset` attribute is useful for <<X90,combining documents>>.\n\nsectnum::\nThe `-n` (`--section-numbers`) command-line option generates the\n`sectnum` (section number) attribute.  The `sectnum` attribute is used\nfor section numbers in HTML outputs (DocBook section numbering are\nhandled automatically by the DocBook toolchain commands).\n\n[[X93]]\nSection markup templates\n^^^^^^^^^^^^^^^^^^^^^^^^\nSection markup templates specify output markup and are defined in\nAsciiDoc configuration files.  Section markup template names are\nderived as follows (in order of precedence):\n\n1. From the title's first positional attribute or 'template'\n   attribute. For example, the following three section titles are\n   functionally equivalent:\n+\n.....................................................................\n[[terms]]\n[glossary]\nList of Terms\n-------------\n\n[\"glossary\",id=\"terms\"]\nList of Terms\n-------------\n\n[template=\"glossary\",id=\"terms\"]\nList of Terms\n-------------\n.....................................................................\n\n2. When the title text matches a configuration file\n   <<X16,`[specialsections]`>> entry.\n3. If neither of the above the default `sect<level>` template is used\n   (where `<level>` is a number from 1 to 4).\n\nIn addition to the normal section template names ('sect1', 'sect2',\n'sect3', 'sect4') AsciiDoc has the following templates for\nfrontmatter, backmatter and other special sections: 'abstract',\n'preface', 'colophon', 'dedication', 'glossary', 'bibliography',\n'synopsis', 'appendix', 'index'.  These special section templates\ngenerate the corresponding Docbook elements; for HTML outputs they\ndefault to the 'sect1' section template.\n\nSection IDs\n^^^^^^^^^^^\nIf no explicit section ID is specified an ID will be synthesised from\nthe section title.  The primary purpose of this feature is to ensure\npersistence of table of contents links (permalinks): the missing\nsection IDs are generated dynamically by the JavaScript TOC generator\n*after* the page is loaded. If you link to a dynamically generated TOC\naddress the page will load but the browser will ignore the (as yet\nungenerated) section ID.\n\nThe IDs are generated by the following algorithm:\n\n- Replace all non-alphanumeric title characters with underscores.\n- Strip leading or trailing underscores.\n- Convert to lowercase.\n- Prepend the `idprefix` attribute (so there's no possibility of name\n  clashes with existing document IDs). Prepend an underscore if the\n  `idprefix` attribute is not defined.\n- A numbered suffix (`_2`, `_3` ...) is added if a same named\n  auto-generated section ID exists.\n- If the `ascii-ids` attribute is defined then non-ASCII characters\n  are replaced with ASCII equivalents. This attribute may be\n  deprecated in future releases and *should be avoided*, it's sole\n  purpose is to accommodate deficient downstream applications that\n  cannot process non-ASCII ID attributes.\n\nExample: the title 'Jim's House' would generate the ID `_jim_s_house`.\n\nSection ID synthesis can be disabled by undefining the `sectids`\nattribute.\n\n[[X16]]\nSpecial Section Titles\n^^^^^^^^^^^^^^^^^^^^^^\nAsciiDoc has a mechanism for mapping predefined section titles\nauto-magically to specific markup templates. For example a title\n'Appendix A: Code Reference' will automatically use the 'appendix'\n<<X93,section markup template>>. The mappings from title to template\nname are specified in `[specialsections]` sections in the Asciidoc\nlanguage configuration files (`lang-*.conf`).  Section entries are\nformatted like:\n\n  <title>=<template>\n\n`<title>` is a Python regular expression and `<template>` is the name\nof a configuration file markup template section. If the `<title>`\nmatches an AsciiDoc document section title then the backend output is\nmarked up using the `<template>` markup template (instead of the\ndefault `sect<level>` section template). The `{title}` attribute value\nis set to the value of the matched regular expression group named\n'title', if there is no 'title' group `{title}` defaults to the whole\nof the AsciiDoc section title. If `<template>` is blank then any\nexisting entry with the same `<title>` will be deleted.\n\n.Special section titles vs. explicit template names\n*********************************************************************\nAsciiDoc has two mechanisms for specifying non-default section markup\ntemplates: you can specify the template name explicitly (using the\n'template' attribute) or indirectly (using 'special section titles').\nSpecifying a <<X93,section template>> attribute explicitly is\npreferred.  Auto-magical 'special section titles' have the following\ndrawbacks:\n\n- They are non-obvious, you have to know the exact matching\n  title for each special section on a language by language basis.\n- Section titles are predefined and can only be customised with a\n  configuration change.\n- The implementation is complicated by multiple languages: every\n  special section title has to be defined for each language (in each\n  of the `lang-*.conf` files).\n\nSpecifying special section template names explicitly does add more\nnoise to the source document (the 'template' attribute declaration),\nbut the intention is obvious and the syntax is consistent with other\nAsciiDoc elements c.f.  bibliographic, Q&A and glossary lists.\n\nSpecial section titles have been deprecated but are retained for\nbackward compatibility.\n\n*********************************************************************\n\nInline Elements\n~~~~~~~~~~~~~~~\n<<X34,Inline document elements>> are used to format text and to\nperform various types of text substitution. Inline elements and inline\nelement syntax is defined in the asciidoc(1) configuration files.\n\nHere is a list of AsciiDoc inline elements in the (default) order in\nwhich they are processed:\n\nSpecial characters::\n        These character sequences escape special characters used by\n        the backend markup (typically `<`, `>`, and `&` characters).\n        See `[specialcharacters]` configuration file sections.\n\nQuotes::\n        Elements that markup words and phrases; usually for character\n        formatting. See `[quotes]` configuration file sections.\n\nSpecial Words::\n        Word or word phrase patterns singled out for markup without\n        the need for further annotation.  See `[specialwords]`\n        configuration file sections.\n\nReplacements::\n        Each replacement defines a word or word phrase pattern to\n        search for along with corresponding replacement text. See\n        `[replacements]` configuration file sections.\n\nAttribute references::\n        Document attribute names enclosed in braces are replaced by\n        the corresponding attribute value.\n\nInline Macros::\n        Inline macros are replaced by the contents of parametrized\n        configuration file sections.\n\n\nDocument Processing\n-------------------\nThe AsciiDoc source document is read and processed as follows:\n\n1. The document 'Header' is parsed, header parameter values are\n   substituted into the configuration file `[header]` template section\n   which is then written to the output file.\n2. Each document 'Section' is processed and its constituent elements\n   translated to the output file.\n3. The configuration file `[footer]` template section is substituted\n   and written to the output file.\n\nWhen a block element is encountered asciidoc(1) determines the type of\nblock by checking in the following order (first to last): (section)\nTitles, BlockMacros, Lists, DelimitedBlocks, Tables, AttributeEntrys,\nAttributeLists, BlockTitles, Paragraphs.\n\nThe default paragraph definition `[paradef-default]` is last element\nto be checked.\n\nKnowing the parsing order will help you devise unambiguous macro, list\nand block syntax rules.\n\nInline substitutions within block elements are performed in the\nfollowing default order:\n\n1. Special characters\n2. Quotes\n3. Special words\n4. Replacements\n5. Attributes\n6. Inline Macros\n7. Replacements2\n\nThe substitutions and substitution order performed on\nTitle, Paragraph and DelimitedBlock elements is determined by\nconfiguration file parameters.\n\n\nText Formatting\n---------------\n[[X51]]\nQuoted Text\n~~~~~~~~~~~\nWords and phrases can be formatted by enclosing inline text with\nquote characters:\n\n_Emphasized text_::\n        Word phrases \\'enclosed in single quote characters' (acute\n        accents) or \\_underline characters_ are emphasized.\n\n*Strong text*::\n        Word phrases \\*enclosed in asterisk characters* are rendered\n        in a strong font (usually bold).\n\n[[X81]]+Monospaced text+::\n        Word phrases \\+enclosed in plus characters+ are rendered in a\n        monospaced font. Word phrases \\`enclosed in backtick\n        characters` (grave accents) are also rendered in a monospaced\n        font but in this case the enclosed text is rendered literally\n        and is not subject to further expansion (see <<X80,inline\n        literal passthrough>>).\n\n`Single quoted text'::\n        Phrases enclosed with a \\`single grave accent to the left and\n        a single acute accent to the right' are rendered in single\n        quotation marks.\n\n``Double quoted text''::\n        Phrases enclosed with \\\\``two grave accents to the left and\n        two acute accents to the right'' are rendered in quotation\n        marks.\n\n#Unquoted text#::\n        Placing \\#hashes around text# does nothing, it is a mechanism\n        to allow inline attributes to be applied to otherwise\n        unformatted text.\n\nNew quote types can be defined by editing asciidoc(1) configuration\nfiles. See the <<X7,Configuration Files>> section for details.\n\n.Quoted text behavior\n- Quoting cannot be overlapped.\n- Different quoting types can be nested.\n- To suppress quoted text formatting place a backslash character\n  immediately in front of the leading quote character(s). In the case\n  of ambiguity between escaped and non-escaped text you will need to\n  escape both leading and trailing quotes, in the case of\n  multi-character quotes you may even need to escape individual\n  characters.\n\n[[X96]]\nQuoted text attributes\n^^^^^^^^^^^^^^^^^^^^^^\nQuoted text can be prefixed with an <<X21,attribute list>>.  The first\npositional attribute ('role' attribute) is translated by AsciiDoc to\nan HTML 'span' element 'class' attribute or a DocBook 'phrase' element\n'role' attribute.\n\nDocBook XSL Stylesheets translate DocBook 'phrase' elements with\n'role' attributes to corresponding HTML 'span' elements with the same\n'class' attributes; CSS can then be used\nhttp://www.sagehill.net/docbookxsl/UsingCSS.html[to style the\ngenerated HTML].  Thus CSS styling can be applied to both DocBook and\nAsciiDoc generated HTML outputs.  You can also specify multiple class\nnames separated by spaces.\n\nCSS rules for text color, text background color, text size and text\ndecorators are included in the distributed AsciiDoc CSS files and are\nused in conjunction with AsciiDoc 'xhtml11', 'html5' and 'docbook'\noutputs. The CSS class names are:\n\n- '<color>' (text foreground color).\n- '<color>-background' (text background color).\n- 'big' and 'small' (text size).\n- 'underline', 'overline' and 'line-through' (strike through) text\n  decorators.\n\nWhere '<color>' can be any of the\nhttp://en.wikipedia.org/wiki/Web_colors#HTML_color_names[sixteen HTML\ncolor names].  Examples:\n\n  [red]#Obvious# and [big red yellow-background]*very obvious*.\n\n  [underline]#Underline text#, [overline]#overline text# and\n  [blue line-through]*bold blue and line-through*.\n\nis rendered as:\n\n[red]#Obvious# and [big red yellow-background]*very obvious*.\n\n[underline]#Underline text#, [overline]#overline text# and\n[bold blue line-through]*bold blue and line-through*.\n\nNOTE: Color and text decorator attributes are rendered for XHTML and\nHTML 5 outputs using CSS stylesheets.  The mechanism to implement\ncolor and text decorator attributes is provided for DocBook toolchains\nvia the DocBook 'phrase' element 'role' attribute, but the actual\nrendering is toolchain specific and is not part of the AsciiDoc\ndistribution.\n\n[[X52]]\nConstrained and Unconstrained Quotes\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nThere are actually two types of quotes:\n\nConstrained quotes\n++++++++++++++++++\nQuoted must be bounded by white space or commonly adjoining\npunctuation characters. These are the most commonly used type of\nquote.\n\nUnconstrained quotes\n++++++++++++++++++++\nUnconstrained quotes have no boundary constraints and can be placed\nanywhere within inline text. For consistency and to make them easier\nto remember unconstrained quotes are double-ups of the `_`, `*`, `+`\nand `#` constrained quotes:\n\n  __unconstrained emphasized text__\n  **unconstrained strong text**\n  ++unconstrained monospaced text++\n  ##unconstrained unquoted text##\n\nThe following example emboldens the letter F:\n\n  **F**ile Open...\n\nSuperscripts and Subscripts\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nPut \\^carets on either^ side of the text to be superscripted, put\n\\~tildes on either side~ of text to be subscripted.  For example, the\nfollowing line:\n\n  e^&#960;i^+1 = 0. H~2~O and x^10^. Some ^super text^\n  and ~some sub text~\n\nIs rendered like:\n\ne^&#960;i^+1 = 0. H~2~O and x^10^. Some ^super text^\nand ~some sub text~\n\nSuperscripts and subscripts are implemented as <<X52,unconstrained\nquotes>> and they can be escaped with a leading backslash and prefixed\nwith with an attribute list.\n\nLine Breaks\n~~~~~~~~~~~\nA plus character preceded by at least one space character at the end\nof a non-blank line forces a line break. It generates a line break\n(`br`) tag for HTML outputs and a custom XML `asciidoc-br` processing\ninstruction for DocBook outputs. The `asciidoc-br` processing\ninstruction is handled by <<X43,a2x(1)>>.\n\nPage Breaks\n~~~~~~~~~~~\nA line of three or more less-than (`<<<`) characters will generate a\nhard page break in DocBook and printed HTML outputs.  It uses the CSS\n`page-break-after` property for HTML outputs and a custom XML\n`asciidoc-pagebreak` processing instruction for DocBook outputs. The\n`asciidoc-pagebreak` processing instruction is handled by\n<<X43,a2x(1)>>. Hard page breaks are sometimes handy but as a general\nrule you should let your page processor generate page breaks for you.\n\nRulers\n~~~~~~\nA line of three or more apostrophe characters will generate a ruler\nline.  It generates a ruler (`hr`) tag for HTML outputs and a custom\nXML `asciidoc-hr` processing instruction for DocBook outputs. The\n`asciidoc-hr` processing instruction is handled by <<X43,a2x(1)>>.\n\nTabs\n~~~~\nBy default tab characters input files will translated to 8 spaces. Tab\nexpansion is set with the 'tabsize' entry in the configuration file\n`[miscellaneous]` section and can be overridden in included files by\nsetting a 'tabsize' attribute in the `include` macro's attribute list.\nFor example:\n\n  include::addendum.txt[tabsize=2]\n\nThe tab size can also be set using the attribute command-line option,\nfor example `--attribute tabsize=4`\n\nReplacements\n~~~~~~~~~~~~\nThe following replacements are defined in the default AsciiDoc\nconfiguration:\n\n  (C) copyright, (TM) trademark, (R) registered trademark,\n  -- em dash, ... ellipsis, -> right arrow, <- left arrow, => right\n  double arrow, <= left double arrow.\n\nWhich are rendered as:\n\n(C) copyright, (TM) trademark, (R) registered trademark,\n-- em dash, ... ellipsis, -> right arrow, <- left arrow, => right\ndouble arrow, <= left double arrow.\n\nYou can also include arbitrary entity references in the AsciiDoc\nsource. Examples:\n\n  &#x278a; &#182;\n\nrenders:\n\n&#x278a; &#182;\n\nTo render a replacement literally escape it with a leading back-slash.\n\nThe <<X7,Configuration Files>> section explains how to configure your\nown replacements.\n\nSpecial Words\n~~~~~~~~~~~~~\nWords defined in `[specialwords]` configuration file sections are\nautomatically marked up without having to be explicitly notated.\n\nThe <<X7,Configuration Files>> section explains how to add and replace\nspecial words.\n\n\n[[X17]]\nTitles\n------\nDocument and section titles can be in either of two formats:\n\nTwo line titles\n~~~~~~~~~~~~~~~\nA two line title consists of a title line, starting hard against the\nleft margin, and an underline. Section underlines consist a repeated\ncharacter pairs spanning the width of the preceding title (give or\ntake up to two characters):\n\nThe default title underlines for each of the document levels are:\n\n\n  Level 0 (top level):     ======================\n  Level 1:                 ----------------------\n  Level 2:                 ~~~~~~~~~~~~~~~~~~~~~~\n  Level 3:                 ^^^^^^^^^^^^^^^^^^^^^^\n  Level 4 (bottom level):  ++++++++++++++++++++++\n\nExamples:\n\n  Level One Section Title\n  -----------------------\n\n  Level 2 Subsection Title\n  ~~~~~~~~~~~~~~~~~~~~~~~~\n\n[[X46]]\nOne line titles\n~~~~~~~~~~~~~~~\nOne line titles consist of a single line delimited on either side by\none or more equals characters (the number of equals characters\ncorresponds to the section level minus one).  Here are some examples:\n\n  = Document Title (level 0) =\n  == Section title (level 1) ==\n  === Section title (level 2) ===\n  ==== Section title (level 3) ====\n  ===== Section title (level 4) =====\n\n[NOTE]\n=====================================================================\n- One or more spaces must fall between the title and the delimiters.\n- The trailing title delimiter is optional.\n- The one-line title syntax can be changed by editing the\n  configuration file `[titles]` section `sect0`...`sect4` entries.\n=====================================================================\n\nFloating titles\n~~~~~~~~~~~~~~~\nSetting the title's first positional attribute or 'style' attribute to\n'float' generates a free-floating title. A free-floating title is\nrendered just like a normal section title but is not formally\nassociated with a text body and is not part of the regular section\nhierarchy so the normal ordering rules do not apply. Floating titles\ncan also be used in contexts where section titles are illegal: for\nexample sidebar and admonition blocks.  Example:\n\n  [float]\n  The second day\n  ~~~~~~~~~~~~~~\n\nFloating titles do not appear in a document's table of contents.\n\n\n[[X42]]\nBlock Titles\n------------\nA 'BlockTitle' element is a single line beginning with a period\nfollowed by the title text. A BlockTitle is applied to the immediately\nfollowing Paragraph, DelimitedBlock, List, Table or BlockMacro. For\nexample:\n\n........................\n.Notes\n- Note 1.\n- Note 2.\n........................\n\nis rendered as:\n\n.Notes\n- Note 1.\n- Note 2.\n\n\n[[X41]]\nBlockId Element\n---------------\nA 'BlockId' is a single line block element containing a unique\nidentifier enclosed in double square brackets. It is used to assign an\nidentifier to the ensuing block element. For example:\n\n  [[chapter-titles]]\n  Chapter titles can be ...\n\nThe preceding example identifies the ensuing paragraph so it can be\nreferenced from other locations, for example with\n`<<chapter-titles,chapter titles>>`.\n\n'BlockId' elements can be applied to Title, Paragraph, List,\nDelimitedBlock, Table and BlockMacro elements.  The BlockId element\nsets the `{id}` attribute for substitution in the subsequent block's\nmarkup template. If a second positional argument is supplied it sets\nthe `{reftext}` attribute which is used to set the DocBook `xreflabel`\nattribute.\n\nThe 'BlockId' element has the same syntax and serves the same function\nto the <<X30,anchor inline macro>>.\n\n[[X79]]\nAttributeList Element\n---------------------\nAn 'AttributeList' block element is an <<X21,attribute list>> on a\nline by itself:\n\n- 'AttributeList' attributes are only applied to the immediately\n  following block element -- the attributes are made available to the\n  block's markup template.\n- Multiple contiguous 'AttributeList' elements are additively combined\n  in the order they appear..\n- The first positional attribute in the list is often used to specify\n  the ensuing element's <<X23,style>>.\n\nAttribute value substitution\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nBy default, only substitutions that take place inside attribute list\nvalues are attribute references, this is because not all attributes\nare destined to be marked up and rendered as text (for example the\ntable 'cols' attribute). To perform normal inline text substitutions\n(special characters, quotes, macros, replacements) on an attribute\nvalue you need to enclose it in single quotes. In the following quote\nblock the second attribute value in the AttributeList is quoted to\nensure the 'http' macro is expanded to a hyperlink.\n\n---------------------------------------------------------------------\n[quote,'http://en.wikipedia.org/wiki/Samuel_Johnson[Samuel Johnson]']\n_____________________________________________________________________\nSir, a woman's preaching is like a dog's walking on his hind legs. It\nis not done well; but you are surprised to find it done at all.\n_____________________________________________________________________\n---------------------------------------------------------------------\n\nCommon attributes\n~~~~~~~~~~~~~~~~~\nMost block elements support the following attributes:\n\n[cols=\"1e,1,5a\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|Name |Backends |Description\n\n|id |html4, html5, xhtml11, docbook |\nUnique identifier typically serve as link targets.\nCan also be set by the 'BlockId' element.\n\n|role |html4, html5, xhtml11, docbook |\nRole contains a string used to classify or subclassify an element and\ncan be applied to AsciiDoc block elements.  The AsciiDoc 'role'\nattribute is translated to the 'role' attribute in DocBook outputs and\nis included in the 'class' attribute in HTML outputs, in this respect\nit behaves like the <<X96,quoted text role attribute>>.\n\nDocBook XSL Stylesheets translate DocBook 'role' attributes to HTML\n'class' attributes; CSS can then be used\nhttp://www.sagehill.net/docbookxsl/UsingCSS.html[to style the\ngenerated HTML].\n\n|reftext |docbook |\n'reftext' is used to set the DocBook 'xreflabel' attribute.\nThe 'reftext' attribute can an also be set by the 'BlockId' element.\n\n|====================================================================\n\n\nParagraphs\n----------\nParagraphs are blocks of text terminated by a blank line, the end of\nfile, or the start of a delimited block or a list.  There are three\nparagraph syntaxes: normal, indented (literal) and admonition which\nare rendered, by default, with the corresponding paragraph style.\n\nEach syntax has a default style, but you can explicitly apply any\nparagraph style to any paragraph syntax. You can also apply\n<<X104,delimited block>> styles to single paragraphs.\n\nThe built-in paragraph styles are: 'normal', 'literal', 'verse',\n'quote', 'listing', 'TIP', 'NOTE', 'IMPORTANT', 'WARNING', 'CAUTION',\n'abstract', 'partintro', 'comment', 'example', 'sidebar', 'source',\n'music', 'latex', 'graphviz'.\n\nnormal paragraph syntax\n~~~~~~~~~~~~~~~~~~~~~~~\nNormal paragraph syntax consists of one or more non-blank lines of\ntext. The first line must start hard against the left margin (no\nintervening white space). The default processing expectation is that\nof a normal paragraph of text.\n\n[[X85]]\nliteral paragraph syntax\n~~~~~~~~~~~~~~~~~~~~~~~~\nLiteral paragraphs are rendered verbatim in a monospaced font without\nany distinguishing background or border.  By default there is no text\nformatting or substitutions within Literal paragraphs apart from\nSpecial Characters and Callouts.\n\nThe 'literal' style is applied implicitly to indented paragraphs i.e.\nwhere the first line of the paragraph is indented by one or more space\nor tab characters.  For example:\n\n---------------------------------------------------------------------\n  Consul *necessitatibus* per id,\n  consetetur, eu pro everti postulant\n  homero verear ea mea, qui.\n---------------------------------------------------------------------\n\nRenders:\n\n  Consul *necessitatibus* per id,\n  consetetur, eu pro everti postulant\n  homero verear ea mea, qui.\n\nNOTE: Because <<X64,lists>> can be indented it's possible for your\nindented paragraph to be misinterpreted as a list -- in situations\nlike this apply the 'literal' style to a normal paragraph.\n\nInstead of using a paragraph indent you could apply the 'literal'\nstyle explicitly, for example:\n\n---------------------------------------------------------------------\n[literal]\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n---------------------------------------------------------------------\n\nRenders:\n\n[literal]\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n\n[[X94]]\nquote and verse paragraph styles\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe optional 'attribution' and 'citetitle' attributes (positional\nattributes 2 and 3) specify the author and source respectively.\n\nThe 'verse' style retains the line breaks, for example:\n\n---------------------------------------------------------------------\n[verse, William Blake, from Auguries of Innocence]\nTo see a world in a grain of sand,\nAnd a heaven in a wild flower,\nHold infinity in the palm of your hand,\nAnd eternity in an hour.\n---------------------------------------------------------------------\n\nWhich is rendered as:\n\n[verse, William Blake, from Auguries of Innocence]\nTo see a world in a grain of sand,\nAnd a heaven in a wild flower,\nHold infinity in the palm of your hand,\nAnd eternity in an hour.\n\nThe 'quote' style flows the text at left and right margins, for\nexample:\n\n---------------------------------------------------------------------\n[quote, Bertrand Russell, The World of Mathematics (1956)]\nA good notation has subtlety and suggestiveness which at times makes\nit almost seem like a live teacher.\n---------------------------------------------------------------------\n\nWhich is rendered as:\n\n[quote, Bertrand Russell, The World of Mathematics (1956)]\nA good notation has subtlety and suggestiveness which at times makes\nit almost seem like a live teacher.\n\n[[X28]]\nAdmonition Paragraphs\n~~~~~~~~~~~~~~~~~~~~~\n'TIP', 'NOTE', 'IMPORTANT', 'WARNING' and 'CAUTION' admonishment\nparagraph styles are generated by placing `NOTE:`, `TIP:`,\n`IMPORTANT:`, `WARNING:` or `CAUTION:` as the first word of the\nparagraph. For example:\n\n  NOTE: This is an example note.\n\nAlternatively, you can specify the paragraph admonition style\nexplicitly using an <<X79,AttributeList element>>. For example:\n\n  [NOTE]\n  This is an example note.\n\nRenders:\n\nNOTE: This is an example note.\n\nTIP: If your admonition requires more than a single paragraph use an\n<<X22,admonition block>> instead.\n\n[[X47]]\nAdmonition Icons and Captions\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nNOTE: Admonition customization with `icons`, `iconsdir`, `icon` and\n`caption` attributes does not apply when generating DocBook output. If\nyou are going the DocBook route then the <<X43,a2x(1)>> `--no-icons`\nand `--icons-dir` options can be used to set the appropriate XSL\nStylesheets parameters.\n\nBy default the asciidoc(1) HTML backends generate text captions\ninstead of admonition icon image links. To generate links to icon\nimages define the <<X45,`icons`>> attribute, for example using the `-a\nicons` command-line option.\n\nThe <<X44,`iconsdir`>> attribute sets the location of linked icon\nimages.\n\nYou can override the default icon image using the `icon` attribute to\nspecify the path of the linked image. For example:\n\n  [icon=\"./images/icons/wink.png\"]\n  NOTE: What lovely war.\n\nUse the `caption` attribute to customize the admonition captions (not\napplicable to `docbook` backend). The following example suppresses the\nicon image and customizes the caption of a 'NOTE' admonition\n(undefining the `icons` attribute with `icons=None` is only necessary\nif <<X45,admonition icons>> have been enabled):\n\n  [icons=None, caption=\"My Special Note\"]\n  NOTE: This is my special note.\n\nThis subsection also applies to <<X22,Admonition Blocks>>.\n\n\n[[X104]]\nDelimited Blocks\n----------------\nDelimited blocks are blocks of text enveloped by leading and trailing\ndelimiter lines (normally a series of four or more repeated\ncharacters). The behavior of Delimited Blocks is specified by entries\nin configuration file `[blockdef-*]` sections.\n\nPredefined Delimited Blocks\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc ships with a number of predefined DelimitedBlocks (see the\n`asciidoc.conf` configuration file in the asciidoc(1) program\ndirectory):\n\nPredefined delimited block underlines:\n\n  CommentBlock:     //////////////////////////\n  PassthroughBlock: ++++++++++++++++++++++++++\n  ListingBlock:     --------------------------\n  LiteralBlock:     ..........................\n  SidebarBlock:     **************************\n  QuoteBlock:       __________________________\n  ExampleBlock:     ==========================\n  OpenBlock:        --\n\n.Default DelimitedBlock substitutions\n[cols=\"2e,7*^\",frame=\"topbot\",options=\"header,autowidth\"]\n|=====================================================\n| |Attributes |Callouts |Macros | Quotes |Replacements\n|Special chars |Special words\n\n|PassthroughBlock |Yes |No  |Yes |No  |No  |No  |No\n|ListingBlock     |No  |Yes |No  |No  |No  |Yes |No\n|LiteralBlock     |No  |Yes |No  |No  |No  |Yes |No\n|SidebarBlock     |Yes |No  |Yes |Yes |Yes |Yes |Yes\n|QuoteBlock       |Yes |No  |Yes |Yes |Yes |Yes |Yes\n|ExampleBlock     |Yes |No  |Yes |Yes |Yes |Yes |Yes\n|OpenBlock        |Yes |No  |Yes |Yes |Yes |Yes |Yes\n|=====================================================\n\nListing Blocks\n~~~~~~~~~~~~~~\n'ListingBlocks' are rendered verbatim in a monospaced font, they\nretain line and whitespace formatting and are often distinguished by a\nbackground or border. There is no text formatting or substitutions\nwithin Listing blocks apart from Special Characters and Callouts.\nListing blocks are often used for computer output and file listings.\n\nHere's an example:\n\n[listing]\n......................................\n--------------------------------------\n#include <stdio.h>\n\nint main() {\n   printf(\"Hello World!\\n\");\n   exit(0);\n}\n--------------------------------------\n......................................\n\nWhich will be rendered like:\n\n--------------------------------------\n#include <stdio.h>\n\nint main() {\n    printf(\"Hello World!\\n\");\n    exit(0);\n}\n--------------------------------------\n\nBy convention <<X59,filter blocks>> use the listing block syntax and\nare implemented as distinct listing block styles.\n\n[[X65]]\nLiteral Blocks\n~~~~~~~~~~~~~~\n'LiteralBlocks' are rendered just like <<X85,literal paragraphs>>.\nExample:\n\n---------------------------------------------------------------------\n...................................\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n...................................\n---------------------------------------------------------------------\n\nRenders:\n...................................\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n...................................\n\nIf the 'listing' style is applied to a LiteralBlock it will be\nrendered as a ListingBlock (this is handy if you have a listing\ncontaining a ListingBlock).\n\nSidebar Blocks\n~~~~~~~~~~~~~~\nA sidebar is a short piece of text presented outside the narrative\nflow of the main text. The sidebar is normally presented inside a\nbordered box to set it apart from the main text.\n\nThe sidebar body is treated like a normal section body.\n\nHere's an example:\n\n---------------------------------------------------------------------\n.An Example Sidebar\n************************************************\nAny AsciiDoc SectionBody element (apart from\nSidebarBlocks) can be placed inside a sidebar.\n************************************************\n---------------------------------------------------------------------\n\nWhich will be rendered like:\n\n.An Example Sidebar\n************************************************\nAny AsciiDoc SectionBody element (apart from\nSidebarBlocks) can be placed inside a sidebar.\n************************************************\n\n[[X26]]\nComment Blocks\n~~~~~~~~~~~~~~\nThe contents of 'CommentBlocks' are not processed; they are useful for\nannotations and for excluding new or outdated content that you don't\nwant displayed. CommentBlocks are never written to output files.\nExample:\n\n---------------------------------------------------------------------\n//////////////////////////////////////////\nCommentBlock contents are not processed by\nasciidoc(1).\n//////////////////////////////////////////\n---------------------------------------------------------------------\n\nSee also <<X25,Comment Lines>>.\n\nNOTE: System macros are executed inside comment blocks.\n\n[[X76]]\nPassthrough Blocks\n~~~~~~~~~~~~~~~~~~\nBy default the block contents is subject only to 'attributes' and\n'macros' substitutions (use an explicit 'subs' attribute to apply\ndifferent substitutions).  PassthroughBlock content will often be\nbackend specific. Here's an example:\n\n---------------------------------------------------------------------\n[subs=\"quotes\"]\n++++++++++++++++++++++++++++++++++++++\n<table border=\"1\"><tr>\n  <td>*Cell 1*</td>\n  <td>*Cell 2*</td>\n</tr></table>\n++++++++++++++++++++++++++++++++++++++\n---------------------------------------------------------------------\n\nThe following styles can be applied to passthrough blocks:\n\npass::\n  No substitutions are performed. This is equivalent to `subs=\"none\"`.\n\nasciimath, latexmath::\n  By default no substitutions are performed, the contents are rendered\n  as <<X78,mathematical formulas>>.\n\nQuote Blocks\n~~~~~~~~~~~~\n'QuoteBlocks' are used for quoted passages of text. There are two\nstyles: 'quote' and 'verse'. The style behavior is identical to\n<<X94,quote and verse paragraphs>> except that blocks can contain\nmultiple paragraphs and, in the case of the 'quote' style, other\nsection elements.  The first positional attribute sets the style, if\nno attributes are specified the 'quote' style is used.  The optional\n'attribution' and 'citetitle' attributes (positional attributes 2 and\n3) specify the quote's author and source. For example:\n\n---------------------------------------------------------------------\n[quote, Sir Arthur Conan Doyle, The Adventures of Sherlock Holmes]\n____________________________________________________________________\nAs he spoke there was the sharp sound of horses' hoofs and\ngrating wheels against the curb, followed by a sharp pull at the\nbell. Holmes whistled.\n\n\"A pair, by the sound,\" said he. \"Yes,\" he continued, glancing\nout of the window. \"A nice little brougham and a pair of\nbeauties. A hundred and fifty guineas apiece. There's money in\nthis case, Watson, if there is nothing else.\"\n____________________________________________________________________\n---------------------------------------------------------------------\n\nWhich is rendered as:\n\n[quote, Sir Arthur Conan Doyle, The Adventures of Sherlock Holmes]\n____________________________________________________________________\nAs he spoke there was the sharp sound of horses' hoofs and\ngrating wheels against the curb, followed by a sharp pull at the\nbell. Holmes whistled.\n\n\"A pair, by the sound,\" said he. \"Yes,\" he continued, glancing\nout of the window. \"A nice little brougham and a pair of\nbeauties. A hundred and fifty guineas apiece. There's money in\nthis case, Watson, if there is nothing else.\"\n____________________________________________________________________\n\n[[X48]]\nExample Blocks\n~~~~~~~~~~~~~~\n'ExampleBlocks' encapsulate the DocBook Example element and are used\nfor, well, examples.  Example blocks can be titled by preceding them\nwith a 'BlockTitle'.  DocBook toolchains will normally automatically\nnumber examples and generate a 'List of Examples' backmatter section.\n\nExample blocks are delimited by lines of equals characters and can\ncontain any block elements apart from Titles, BlockTitles and\nSidebars) inside an example block. For example:\n\n---------------------------------------------------------------------\n.An example\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n=====================================================================\n---------------------------------------------------------------------\n\nRenders:\n\n.An example\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n=====================================================================\n\nA title prefix that can be inserted with the `caption` attribute\n(HTML backends). For example:\n\n---------------------------------------------------------------------\n[caption=\"Example 1: \"]\n.An example with a custom caption\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n=====================================================================\n---------------------------------------------------------------------\n\n[[X22]]\nAdmonition Blocks\n~~~~~~~~~~~~~~~~~\nThe 'ExampleBlock' definition includes a set of admonition\n<<X23,styles>> ('NOTE', 'TIP', 'IMPORTANT', 'WARNING', 'CAUTION') for\ngenerating admonition blocks (admonitions containing more than a\n<<X28,single paragraph>>).  Just precede the 'ExampleBlock' with an\nattribute list specifying the admonition style name. For example:\n\n---------------------------------------------------------------------\n[NOTE]\n.A NOTE admonition block\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n\n. Fusce euismod commodo velit.\n. Vivamus fringilla mi eu lacus.\n  .. Fusce euismod commodo velit.\n  .. Vivamus fringilla mi eu lacus.\n. Donec eget arcu bibendum\n  nunc consequat lobortis.\n=====================================================================\n---------------------------------------------------------------------\n\nRenders:\n\n[NOTE]\n.A NOTE admonition block\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n\n. Fusce euismod commodo velit.\n. Vivamus fringilla mi eu lacus.\n  .. Fusce euismod commodo velit.\n  .. Vivamus fringilla mi eu lacus.\n. Donec eget arcu bibendum\n  nunc consequat lobortis.\n=====================================================================\n\nSee also <<X47,Admonition Icons and Captions>>.\n\n[[X29]]\nOpen Blocks\n~~~~~~~~~~~\nOpen blocks are special:\n\n- The open block delimiter is line containing two hyphen characters\n  (instead of four or more repeated characters).\n\n- They can be used to group block elements for <<X15,List item\n  continuation>>.\n\n- Open blocks can be styled to behave like any other type of delimited\n  block.  The  following built-in styles can be applied to open\n  blocks: 'literal', 'verse', 'quote', 'listing', 'TIP', 'NOTE',\n  'IMPORTANT', 'WARNING', 'CAUTION', 'abstract', 'partintro',\n  'comment', 'example', 'sidebar', 'source', 'music', 'latex',\n  'graphviz'. For example, the following open block and listing block\n  are functionally identical:\n\n  [listing]\n  --\n  Lorum ipsum ...\n  --\n\n  ---------------\n  Lorum ipsum ...\n  ---------------\n\n- An unstyled open block groups section elements but otherwise does\n  nothing.\n\nOpen blocks are used to generate document abstracts and book part\nintroductions:\n\n- Apply the 'abstract' style to generate an abstract, for example:\n\n  [abstract]\n  --\n  In this paper we will ...\n  --\n\n. Apply the 'partintro' style to generate a book part introduction for\n  a multi-part book, for example:\n\n  [partintro]\n  .Optional part introduction title\n  --\n  Optional part introduction goes here.\n  --\n\n\n[[X64]]\nLists\n-----\n.List types\n- Bulleted lists. Also known as itemized or unordered lists.\n- Numbered lists. Also called ordered lists.\n- Labeled lists. Sometimes called variable or definition lists.\n- Callout lists (a list of callout annotations).\n\n.List behavior\n- List item indentation is optional and does not determine nesting,\n  indentation does however make the source more readable.\n- Another list or a literal paragraph immediately following a list\n  item will be implicitly included in the list item; use <<X15, list\n  item continuation>> to explicitly append other block elements to a\n  list item.\n- A comment block or a comment line block macro element will terminate\n  a list -- use inline comment lines to put comments inside lists.\n- The `listindex` <<X60,intrinsic attribute>> is the current list item\n  index (1..). If this attribute is used outside a list then it's value\n  is the number of items in the most recently closed list. Useful for\n  displaying the number of items in a list.\n\nBulleted Lists\n~~~~~~~~~~~~~~\nBulleted list items start with a single dash or one to five asterisks\nfollowed by some white space then some text. Bulleted list syntaxes\nare:\n\n...................\n- List item.\n* List item.\n** List item.\n*** List item.\n**** List item.\n***** List item.\n...................\n\nNumbered Lists\n~~~~~~~~~~~~~~\nList item numbers are explicit or implicit.\n\n.Explicit numbering\nList items begin with a number followed by some white space then the\nitem text. The numbers can be decimal (arabic), roman (upper or lower\ncase) or alpha (upper or lower case). Decimal and alpha numbers are\nterminated with a period, roman numbers are terminated with a closing\nparenthesis. The different terminators are necessary to ensure 'i',\n'v' and 'x' roman numbers are are distinguishable from 'x', 'v' and\n'x' alpha numbers. Examples:\n\n.....................................................................\n1.   Arabic (decimal) numbered list item.\na.   Lower case alpha (letter) numbered list item.\nF.   Upper case alpha (letter) numbered list item.\niii) Lower case roman numbered list item.\nIX)  Upper case roman numbered list item.\n.....................................................................\n\n.Implicit numbering\nList items begin one to five period characters, followed by some white\nspace then the item text. Examples:\n\n.....................................................................\n. Arabic (decimal) numbered list item.\n.. Lower case alpha (letter) numbered list item.\n... Lower case roman numbered list item.\n.... Upper case alpha (letter) numbered list item.\n..... Upper case roman numbered list item.\n.....................................................................\n\nYou can use the 'style' attribute (also the first positional\nattribute) to specify an alternative numbering style.  The numbered\nlist style can be one of the following values: 'arabic', 'loweralpha',\n'upperalpha', 'lowerroman', 'upperroman'.\n\nHere are some examples of bulleted and numbered lists:\n\n---------------------------------------------------------------------\n- Praesent eget purus quis magna eleifend eleifend.\n  1. Fusce euismod commodo velit.\n    a. Fusce euismod commodo velit.\n    b. Vivamus fringilla mi eu lacus.\n    c. Donec eget arcu bibendum nunc consequat lobortis.\n  2. Vivamus fringilla mi eu lacus.\n    i)  Fusce euismod commodo velit.\n    ii) Vivamus fringilla mi eu lacus.\n  3. Donec eget arcu bibendum nunc consequat lobortis.\n  4. Nam fermentum mattis ante.\n- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n  * Fusce euismod commodo velit.\n  ** Qui in magna commodo, est labitur dolorum an. Est ne magna primis\n     adolescens. Sit munere ponderum dignissim et. Minim luptatum et\n     vel.\n  ** Vivamus fringilla mi eu lacus.\n  * Donec eget arcu bibendum nunc consequat lobortis.\n- Nulla porttitor vulputate libero.\n  . Fusce euismod commodo velit.\n  . Vivamus fringilla mi eu lacus.\n[upperroman]\n    .. Fusce euismod commodo velit.\n    .. Vivamus fringilla mi eu lacus.\n  . Donec eget arcu bibendum nunc consequat lobortis.\n---------------------------------------------------------------------\n\nWhich render as:\n\n- Praesent eget purus quis magna eleifend eleifend.\n  1. Fusce euismod commodo velit.\n    a. Fusce euismod commodo velit.\n    b. Vivamus fringilla mi eu lacus.\n    c. Donec eget arcu bibendum nunc consequat lobortis.\n  2. Vivamus fringilla mi eu lacus.\n    i)  Fusce euismod commodo velit.\n    ii) Vivamus fringilla mi eu lacus.\n  3. Donec eget arcu bibendum nunc consequat lobortis.\n  4. Nam fermentum mattis ante.\n- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n  * Fusce euismod commodo velit.\n  ** Qui in magna commodo, est labitur dolorum an. Est ne magna primis\n     adolescens. Sit munere ponderum dignissim et. Minim luptatum et\n     vel.\n  ** Vivamus fringilla mi eu lacus.\n  * Donec eget arcu bibendum nunc consequat lobortis.\n- Nulla porttitor vulputate libero.\n  . Fusce euismod commodo velit.\n  . Vivamus fringilla mi eu lacus.\n[upperroman]\n    .. Fusce euismod commodo velit.\n    .. Vivamus fringilla mi eu lacus.\n  . Donec eget arcu bibendum nunc consequat lobortis.\n\nA predefined 'compact' option is available to bulleted and numbered\nlists -- this translates to the DocBook 'spacing=\"compact\"' lists\nattribute which may or may not be processed by the DocBook toolchain.\nExample:\n\n  [options=\"compact\"]\n  - Compact list item.\n  - Another compact list item.\n\nTIP: To apply the 'compact' option globally define a document-wide\n'compact-option' attribute, e.g. using the `-a compact-option`\ncommand-line option.\n\nYou can set the list start number using the 'start' attribute (works\nfor HTML outputs and DocBook outputs processed by DocBook XSL\nStylesheets). Example:\n\n  [start=7]\n  . List item 7.\n  . List item 8.\n\nLabeled Lists\n~~~~~~~~~~~~~\nLabeled list items consist of one or more text labels followed by the\ntext of the list item.\n\nAn item label begins a line with an alphanumeric character hard\nagainst the left margin and ends with two, three or four colons or two\nsemi-colons. A list item can have multiple labels, one per line.\n\nThe list item text consists of one or more lines of text starting\nafter the last label (either on the same line or a new line) and can\nbe followed by nested List or ListParagraph elements. Item text can be\noptionally indented.\n\nHere are some examples:\n\n---------------------------------------------------------------------\nIn::\nLorem::\n  Fusce euismod commodo velit.\n\n  Fusce euismod commodo velit.\n\nIpsum:: Vivamus fringilla mi eu lacus.\n  * Vivamus fringilla mi eu lacus.\n  * Donec eget arcu bibendum nunc consequat lobortis.\nDolor::\n  Donec eget arcu bibendum nunc consequat lobortis.\n  Suspendisse;;\n    A massa id sem aliquam auctor.\n  Morbi;;\n    Pretium nulla vel lorem.\n  In;;\n    Dictum mauris in urna.\n    Vivamus::: Fringilla mi eu lacus.\n    Donec:::   Eget arcu bibendum nunc consequat lobortis.\n---------------------------------------------------------------------\n\nWhich render as:\n\nIn::\nLorem::\n  Fusce euismod commodo velit.\n\n  Fusce euismod commodo velit.\n\nIpsum:: Vivamus fringilla mi eu lacus.\n  * Vivamus fringilla mi eu lacus.\n  * Donec eget arcu bibendum nunc consequat lobortis.\nDolor::\n  Donec eget arcu bibendum nunc consequat lobortis.\n  Suspendisse;;\n    A massa id sem aliquam auctor.\n  Morbi;;\n    Pretium nulla vel lorem.\n  In;;\n    Dictum mauris in urna.\n    Vivamus::: Fringilla mi eu lacus.\n    Donec:::   Eget arcu bibendum nunc consequat lobortis.\n\nHorizontal labeled list style\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nThe 'horizontal' labeled list style (also the first positional\nattribute) places the list text side-by-side with the label instead of\nunder the label. Here is an example:\n\n---------------------------------------------------------------------\n[horizontal]\n*Lorem*:: Fusce euismod commodo velit.  Qui in magna commodo, est\nlabitur dolorum an. Est ne magna primis adolescens.\n\n  Fusce euismod commodo velit.\n\n*Ipsum*:: Vivamus fringilla mi eu lacus.\n- Vivamus fringilla mi eu lacus.\n- Donec eget arcu bibendum nunc consequat lobortis.\n\n*Dolor*::\n  - Vivamus fringilla mi eu lacus.\n  - Donec eget arcu bibendum nunc consequat lobortis.\n\n---------------------------------------------------------------------\n\nWhich render as:\n\n[horizontal]\n*Lorem*:: Fusce euismod commodo velit.  Qui in magna commodo, est\nlabitur dolorum an. Est ne magna primis adolescens.\n\n  Fusce euismod commodo velit.\n\n*Ipsum*:: Vivamus fringilla mi eu lacus.\n- Vivamus fringilla mi eu lacus.\n- Donec eget arcu bibendum nunc consequat lobortis.\n\n*Dolor*::\n  - Vivamus fringilla mi eu lacus.\n  - Donec eget arcu bibendum nunc consequat lobortis.\n\n[NOTE]\n=====================================================================\n- Current PDF toolchains do not make a good job of determining\n  the relative column widths for horizontal labeled lists.\n- Nested horizontal labeled lists will generate DocBook validation\n  errors because the 'DocBook XML V4.2' DTD does not permit nested\n  informal tables (although <<X13,DocBook XSL Stylesheets>> and\n  <<X31,dblatex>> process them correctly).\n- The label width can be set as a percentage of the total width by\n  setting the 'width' attribute e.g. `width=\"10%\"`\n=====================================================================\n\nQuestion and Answer Lists\n~~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc comes pre-configured with a 'qanda' style labeled list for generating\nDocBook question and answer (Q&A) lists. Example:\n\n---------------------------------------------------------------------\n[qanda]\nQuestion one::\n        Answer one.\nQuestion two::\n        Answer two.\n---------------------------------------------------------------------\n\nRenders:\n\n[qanda]\nQuestion one::\n        Answer one.\nQuestion two::\n        Answer two.\n\nGlossary Lists\n~~~~~~~~~~~~~~\nAsciiDoc comes pre-configured with a 'glossary' style labeled list for\ngenerating DocBook glossary lists. Example:\n\n---------------------------------------------------------------------\n[glossary]\nA glossary term::\n    The corresponding definition.\nA second glossary term::\n    The corresponding definition.\n---------------------------------------------------------------------\n\nFor working examples see the `article.txt` and `book.txt` documents in\nthe AsciiDoc `./doc` distribution directory.\n\nNOTE: To generate valid DocBook output glossary lists must be located\nin a section that uses the 'glossary' <<X93,section markup template>>.\n\nBibliography Lists\n~~~~~~~~~~~~~~~~~~\nAsciiDoc comes with a predefined 'bibliography' bulleted list style\ngenerating DocBook bibliography entries. Example:\n\n---------------------------------------------------------------------\n[bibliography]\n.Optional list title\n- [[[taoup]]] Eric Steven Raymond. 'The Art of UNIX\n  Programming'. Addison-Wesley. ISBN 0-13-142901-9.\n- [[[walsh-muellner]]] Norman Walsh & Leonard Muellner.\n  'DocBook - The Definitive Guide'. O'Reilly & Associates.\n  1999. ISBN 1-56592-580-7.\n---------------------------------------------------------------------\n\nThe `[[[<reference>]]]` syntax is a bibliography entry anchor, it\ngenerates an anchor named `<reference>` and additionally displays\n`[<reference>]` at the anchor position. For example `[[[taoup]]]`\ngenerates an anchor named `taoup` that displays `[taoup]` at the\nanchor position. Cite the reference from elsewhere your document using\n`<<taoup>>`, this displays a hyperlink (`[taoup]`) to the\ncorresponding bibliography entry anchor.\n\nFor working examples see the `article.txt` and `book.txt` documents in\nthe AsciiDoc `./doc` distribution directory.\n\nNOTE: To generate valid DocBook output bibliography lists must be\nlocated in a <<X93,bibliography section>>.\n\n[[X15]]\nList Item Continuation\n~~~~~~~~~~~~~~~~~~~~~~\nAnother list or a literal paragraph immediately following a list item\nis implicitly appended to the list item; to append other block\nelements to a list item you need to explicitly join them to the list\nitem with a 'list continuation' (a separator line containing a single\nplus character). Multiple block elements can be appended to a list\nitem using list continuations (provided they are legal list item\nchildren in the backend markup).\n\nHere are some examples of list item continuations: list item one\ncontains multiple continuations; list item two is continued with an\n<<X29,OpenBlock>> containing multiple elements:\n\n---------------------------------------------------------------------\n1. List item one.\n+\nList item one continued with a second paragraph followed by an\nIndented block.\n+\n.................\n$ ls *.sh\n$ mv *.sh ~/tmp\n.................\n+\nList item continued with a third paragraph.\n\n2. List item two continued with an open block.\n+\n--\nThis paragraph is part of the preceding list item.\n\na. This list is nested and does not require explicit item continuation.\n+\nThis paragraph is part of the preceding list item.\n\nb. List item b.\n\nThis paragraph belongs to item two of the outer list.\n--\n---------------------------------------------------------------------\n\nRenders:\n\n1. List item one.\n+\nList item one continued with a second paragraph followed by an\nIndented block.\n+\n.................\n$ ls *.sh\n$ mv *.sh ~/tmp\n.................\n+\nList item continued with a third paragraph.\n\n2. List item two continued with an open block.\n+\n--\nThis paragraph is part of the preceding list item.\n\na. This list is nested and does not require explicit item continuation.\n+\nThis paragraph is part of the preceding list item.\n\nb. List item b.\n\nThis paragraph belongs to item two of the outer list.\n--\n\n\n[[X92]]\nFootnotes\n---------\nThe shipped AsciiDoc configuration includes three footnote inline\nmacros:\n\n`footnote:[<text>]`::\n  Generates a footnote with text `<text>`.\n\n`footnoteref:[<id>,<text>]`::\n  Generates a footnote with a reference ID `<id>` and text `<text>`.\n\n`footnoteref:[<id>]`::\n  Generates a reference to the footnote with ID `<id>`.\n\nThe footnote text can span multiple lines.\n\nThe 'xhtml11' and 'html5' backends render footnotes dynamically using\nJavaScript; 'html4' outputs do not use JavaScript and leave the\nfootnotes inline; 'docbook' footnotes are processed by the downstream\nDocBook toolchain.\n\nExample footnotes:\n\n  A footnote footnote:[An example footnote.];\n  a second footnote with a reference ID footnoteref:[note2,Second footnote.];\n  finally a reference to the second footnote footnoteref:[note2].\n\nRenders:\n\nA footnote footnote:[An example footnote.];\na second footnote with a reference ID footnoteref:[note2,Second footnote.];\nfinally a reference to the second footnote footnoteref:[note2].\n\n\nIndexes\n-------\nThe shipped AsciiDoc configuration includes the inline macros for\ngenerating DocBook index entries.\n\n`indexterm:[<primary>,<secondary>,<tertiary>]`::\n`(((<primary>,<secondary>,<tertiary>)))`::\n    This inline macro generates an index term (the `<secondary>` and\n    `<tertiary>` positional attributes are optional). Example:\n    `indexterm:[Tigers,Big cats]` (or, using the alternative syntax\n    `(((Tigers,Big cats)))`.  Index terms that have secondary and\n    tertiary entries also generate separate index terms for the\n    secondary and tertiary entries. The index terms appear in the\n    index, not the primary text flow.\n\n`indexterm2:[<primary>]`::\n`((<primary>))`::\n    This inline macro generates an index term that appears in both the\n    index and the primary text flow.  The `<primary>` should not be\n    padded to the left or right with white space characters.\n\nFor working examples see the `article.txt` and `book.txt` documents in\nthe AsciiDoc `./doc` distribution directory.\n\nNOTE: Index entries only really make sense if you are generating\nDocBook markup -- DocBook conversion programs automatically generate\nan index at the point an 'Index' section appears in source document.\n\n\n[[X105]]\nCallouts\n--------\nCallouts are a mechanism for annotating verbatim text (for example:\nsource code, computer output and user input). Callout markers are\nplaced inside the annotated text while the actual annotations are\npresented in a callout list after the annotated text. Here's an\nexample:\n\n---------------------------------------------------------------------\n .MS-DOS directory listing\n -----------------------------------------------------\n 10/17/97   9:04         <DIR>    bin\n 10/16/97  14:11         <DIR>    DOS            \\<1>\n 10/16/97  14:40         <DIR>    Program Files\n 10/16/97  14:46         <DIR>    TEMP\n 10/17/97   9:04         <DIR>    tmp\n 10/16/97  14:37         <DIR>    WINNT\n 10/16/97  14:25             119  AUTOEXEC.BAT   \\<2>\n  2/13/94   6:21          54,619  COMMAND.COM    \\<2>\n 10/16/97  14:25             115  CONFIG.SYS     \\<2>\n 11/16/97  17:17      61,865,984  pagefile.sys\n  2/13/94   6:21           9,349  WINA20.386     \\<3>\n -----------------------------------------------------\n\n \\<1> This directory holds MS-DOS.\n \\<2> System startup code for DOS.\n \\<3> Some sort of Windows 3.1 hack.\n---------------------------------------------------------------------\n\nWhich renders:\n\n.MS-DOS directory listing\n-----------------------------------------------------\n10/17/97   9:04         <DIR>    bin\n10/16/97  14:11         <DIR>    DOS            <1>\n10/16/97  14:40         <DIR>    Program Files\n10/16/97  14:46         <DIR>    TEMP\n10/17/97   9:04         <DIR>    tmp\n10/16/97  14:37         <DIR>    WINNT\n10/16/97  14:25             119  AUTOEXEC.BAT   <2>\n 2/13/94   6:21          54,619  COMMAND.COM    <2>\n10/16/97  14:25             115  CONFIG.SYS     <2>\n11/16/97  17:17      61,865,984  pagefile.sys\n 2/13/94   6:21           9,349  WINA20.386     <3>\n-----------------------------------------------------\n\n<1> This directory holds MS-DOS.\n<2> System startup code for DOS.\n<3> Some sort of Windows 3.1 hack.\n\n.Explanation\n- The callout marks are whole numbers enclosed in angle brackets --\n  they refer to the correspondingly numbered item in the following\n  callout list.\n- By default callout marks are confined to 'LiteralParagraphs',\n  'LiteralBlocks' and 'ListingBlocks' (although this is a\n  configuration file option and can be changed).\n- Callout list item numbering is fairly relaxed -- list items can\n  start with `<n>`, `n>` or `>` where `n` is the optional list item\n  number (in the latter case list items starting with a single `>`\n  character are implicitly numbered starting at one).\n- Callout lists should not be nested.\n- Callout lists start list items hard against the left margin.\n- If you want to present a number inside angle brackets you'll need to\n  escape it with a backslash to prevent it being interpreted as a\n  callout mark.\n\nNOTE: Define the AsciiDoc 'icons' attribute (for example using the `-a\nicons` command-line option) to display callout icons.\n\nImplementation Notes\n~~~~~~~~~~~~~~~~~~~~\nCallout marks are generated by the 'callout' inline macro while\ncallout lists are generated using the 'callout' list definition. The\n'callout' macro and 'callout' list are special in that they work\ntogether. The 'callout' inline macro is not enabled by the normal\n'macros' substitutions option, instead it has its own 'callouts'\nsubstitution option.\n\nThe following attributes are available during inline callout macro\nsubstitution:\n\n`{index}`::\n    The callout list item index inside the angle brackets.\n`{coid}`::\n    An identifier formatted like `CO<listnumber>-<index>` that\n    uniquely identifies the callout mark. For example `CO2-4`\n    identifies the fourth callout mark in the second set of callout\n    marks.\n\nThe `{coids}` attribute can be used during callout list item\nsubstitution -- it is a space delimited list of callout IDs that refer\nto the explanatory list item.\n\nIncluding callouts in included code\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou can annotate working code examples with callouts -- just remember\nto put the callouts inside source code comments. This example displays\nthe `test.py` source file (containing a single callout) using the\n'source' (code highlighter) filter:\n\n.AsciiDoc source\n---------------------------------------------------------------------\n [source,python]\n -------------------------------------------\n \\include::test.py[]\n -------------------------------------------\n\n \\<1> Print statement.\n---------------------------------------------------------------------\n\n.Included `test.py` source\n---------------------------------------------------------------------\nprint 'Hello World!'   # \\<1>\n---------------------------------------------------------------------\n\n\nMacros\n------\nMacros are a mechanism for substituting parametrized text into output\ndocuments.\n\nMacros have a 'name', a single 'target' argument and an 'attribute\nlist'.  The usual syntax is `<name>:<target>[<attrlist>]` (for\ninline macros) and `<name>::<target>[<attrlist>]` (for block\nmacros).  Here are some examples:\n\n  http://www.docbook.org/[DocBook.org]\n  include::chapt1.txt[tabsize=2]\n  mailto:srackham@gmail.com[]\n\n.Macro behavior\n- `<name>` is the macro name. It can only contain letters, digits or\n  dash characters and cannot start with a dash.\n- The optional `<target>` cannot contain white space characters.\n- `<attrlist>` is a <<X21,list of attributes>> enclosed in square\n  brackets.\n- `]` characters inside attribute lists must be escaped with a\n  backslash.\n- Expansion of macro references can normally be escaped by prefixing a\n  backslash character (see the AsciiDoc 'FAQ' for examples of\n  exceptions to this rule).\n- Attribute references in block macros are expanded.\n- The substitutions performed prior to Inline macro macro expansion\n  are determined by the inline context.\n- Macros are processed in the order they appear in the configuration\n  file(s).\n- Calls to inline macros can be nested inside different inline macros\n  (an inline macro call cannot contain a nested call to itself).\n- In addition to `<name>`, `<target>` and `<attrlist>` the\n  `<passtext>` and `<subslist>` named groups are available to\n  <<X77,passthrough macros>>. A macro is a passthrough macro if the\n  definition includes a `<passtext>` named group.\n\nInline Macros\n~~~~~~~~~~~~~\nInline Macros occur in an inline element context. Predefined Inline\nmacros include 'URLs', 'image' and 'link' macros.\n\nURLs\n^^^^\n'http', 'https', 'ftp', 'file', 'mailto' and 'callto' URLs are\nrendered using predefined inline macros.\n\n- If you don't need a custom link caption you can enter the 'http',\n  'https', 'ftp', 'file' URLs and email addresses without any special\n  macro syntax.\n- If the `<attrlist>` is empty the URL is displayed.\n\nHere are some examples:\n\n  http://www.docbook.org/[DocBook.org]\n  http://www.docbook.org/\n  mailto:joe.bloggs@foobar.com[email Joe Bloggs]\n  joe.bloggs@foobar.com\n\nWhich are rendered:\n\nhttp://www.docbook.org/[DocBook.org]\n\nhttp://www.docbook.org/\n\nmailto:joe.bloggs@foobar.com[email Joe Bloggs]\n\njoe.bloggs@foobar.com\n\nIf the `<target>` necessitates space characters use `%20`, for example\n`large%20image.png`.\n\nInternal Cross References\n^^^^^^^^^^^^^^^^^^^^^^^^^\nTwo AsciiDoc inline macros are provided for creating hypertext links\nwithin an AsciiDoc document. You can use either the standard macro\nsyntax or the (preferred) alternative.\n\n[[X30]]\nanchor\n++++++\nUsed to specify hypertext link targets:\n\n  [[<id>,<xreflabel>]]\n  anchor:<id>[<xreflabel>]\n\nThe `<id>` is a unique string that conforms to the output markup's\nanchor syntax. The optional `<xreflabel>` is the text to be displayed\nby captionless 'xref' macros that refer to this anchor. The optional\n`<xreflabel>` is only really useful when generating DocBook output.\nExample anchor:\n\n  [[X1]]\n\nYou may have noticed that the syntax of this inline element is the\nsame as that of the <<X41,BlockId block element>>, this is no\ncoincidence since they are functionally equivalent.\n\nxref\n++++\nCreates a hypertext link to a document anchor.\n\n  <<<id>,<caption>>>\n  xref:<id>[<caption>]\n\nThe `<id>` refers to an anchor ID. The optional `<caption>` is the\nlink's displayed text. Example:\n\n  <<X21,attribute lists>>\n\nIf `<caption>` is not specified then the displayed text is\nauto-generated:\n\n- The AsciiDoc 'xhtml11' and 'html5' backends display the `<id>`\n  enclosed in square brackets.\n- If DocBook is produced the DocBook toolchain is responsible for the\n  displayed text which will normally be the referenced figure, table\n  or section title number followed by the element's title text.\n\nHere is an example:\n\n---------------------------------------------------------------------\n[[tiger_image]]\n.Tyger tyger\nimage::tiger.png[]\n\nThis can be seen in <<tiger_image>>.\n---------------------------------------------------------------------\n\nLinking to Local Documents\n^^^^^^^^^^^^^^^^^^^^^^^^^^\nHypertext links to files on the local file system are specified using\nthe 'link' inline macro.\n\n  link:<target>[<caption>]\n\nThe 'link' macro generates relative URLs. The link macro `<target>` is\nthe target file name (relative to the file system location of the\nreferring document). The optional `<caption>` is the link's displayed\ntext. If `<caption>` is not specified then `<target>` is displayed.\nExample:\n\n  link:downloads/foo.zip[download foo.zip]\n\nYou can use the `<filename>#<id>` syntax to refer to an anchor within\na target document but this usually only makes sense when targeting\nHTML documents.\n\n[[X9]]\nImages\n^^^^^^\nInline images are inserted into the output document using the 'image'\nmacro. The inline syntax is:\n\n  image:<target>[<attributes>]\n\nThe contents of the image file `<target>` is displayed. To display the\nimage its file format must be supported by the target backend\napplication. HTML and DocBook applications normally support PNG or JPG\nfiles.\n\n`<target>` file name paths are relative to the location of the\nreferring document.\n\n[[X55]]\n.Image macro attributes\n- The optional 'alt' attribute is also the first positional attribute,\n  it specifies alternative text which is displayed if the output\n  application is unable to display the image file (see also\n  http://htmlhelp.com/feature/art3.htm[Use of ALT texts in IMGs]). For\n  example:\n\n  image:images/logo.png[Company Logo]\n\n- The optional 'title' attribute provides a title for the image. The\n  <<X49,block image macro>> renders the title alongside the image.\n  The inline image macro displays the title as a popup ``tooltip'' in\n  visual browsers (AsciiDoc HTML outputs only).\n\n- The optional `width` and `height` attributes scale the image size\n  and can be used in any combination. The units are pixels.  The\n  following example scales the previous example to a height of 32\n  pixels:\n\n  image:images/logo.png[\"Company Logo\",height=32]\n\n- The optional `link` attribute is used to link the image to an\n  external document. The following example links a screenshot\n  thumbnail to a full size version:\n\n  image:screen-thumbnail.png[height=32,link=\"screen.png\"]\n\n- The optional `scaledwidth` attribute is only used in DocBook block\n  images (specifically for PDF documents). The following example\n  scales the images to 75% of the available print width:\n\n  image::images/logo.png[scaledwidth=\"75%\",alt=\"Company Logo\"]\n\n- The image `scale` attribute sets the DocBook `imagedata` element\n  `scale` attribute.\n\n- The optional `align` attribute is used for horizontal image\n  alignment.  Allowed values are `center`, `left` and `right`. For\n  example:\n\n  image::images/tiger.png[\"Tiger image\",align=\"left\"]\n\n- The optional `float` attribute floats the image `left` or `right` on\n  the page (works with HTML outputs only, has no effect on DocBook\n  outputs). `float` and `align` attributes are mutually exclusive.\n  Use the `unfloat::[]` block macro to stop floating.\n\nComment Lines\n^^^^^^^^^^^^^\nSee <<X25,comment block macro>>.\n\nBlock Macros\n~~~~~~~~~~~~\nA Block macro reference must be contained in a single line separated\neither side by a blank line or a block delimiter.\n\nBlock macros behave just like Inline macros, with the following\ndifferences:\n\n- They occur in a block context.\n- The default syntax is `<name>::<target>[<attrlist>]` (two\n  colons, not one).\n- Markup template section names end in `-blockmacro` instead of\n  `-inlinemacro`.\n\nBlock Identifier\n^^^^^^^^^^^^^^^^\nThe Block Identifier macro sets the `id` attribute and has the same\nsyntax as the <<X30,anchor inline macro>> since it performs\nessentially the same function -- block templates use the `id`\nattribute as a block element ID. For example:\n\n  [[X30]]\n\nThis is equivalent to the `[id=\"X30\"]` <<X79,AttributeList element>>).\n\n[[X49]]\nImages\n^^^^^^\nThe 'image' block macro is used to display images in a block context.\nThe syntax is:\n\n  image::<target>[<attributes>]\n\nThe block `image` macro has the same <<X55,macro attributes>> as it's\n<<X9,inline image macro>> counterpart.\n\nBlock images can be titled by preceding the 'image' macro with a\n'BlockTitle'.  DocBook toolchains normally number titled block images\nand optionally list them in an automatically generated 'List of\nFigures' backmatter section.\n\nThis example:\n\n  .Main circuit board\n  image::images/layout.png[J14P main circuit board]\n\nis equivalent to:\n\n  image::images/layout.png[\"J14P main circuit board\",\n                            title=\"Main circuit board\"]\n\nA title prefix that can be inserted with the `caption` attribute\n(HTML backends). For example:\n\n  .Main circuit board\n  [caption=\"Figure 2: \"]\n  image::images/layout.png[J14P main circuit board]\n\n[[X66]]\n.Embedding images in XHTML documents\n*********************************************************************\nIf you define the `data-uri` attribute then images will be embedded in\nXHTML outputs using the\nhttp://en.wikipedia.org/wiki/Data:_URI_scheme[data URI scheme].  You\ncan use the 'data-uri' attribute with the 'xhtml11' and 'html5'\nbackends to produce single-file XHTML documents with embedded images\nand CSS, for example:\n\n  $ asciidoc -a data-uri mydocument.txt\n\n[NOTE]\n======\n- All current popular browsers support data URIs, although versions\n  of Internet Explorer prior to version 8 do not.\n- Some browsers limit the size of data URIs.\n======\n*********************************************************************\n\n[[X25]]\nComment Lines\n^^^^^^^^^^^^^\nSingle lines starting with two forward slashes hard up against the\nleft margin are treated as comments. Comment lines do not appear in\nthe output unless the 'showcomments' attribute is defined.  Comment\nlines have been implemented as both block and inline macros so a\ncomment line can appear as a stand-alone block or within block elements\nthat support inline macro expansion. Example comment line:\n\n  // This is a comment.\n\nIf the 'showcomments' attribute is defined comment lines are written\nto the output:\n\n- In DocBook the comment lines are enclosed by the 'remark' element\n  (which may or may not be rendered by your toolchain).\n- The 'showcomments' attribute does not expose <<X26,Comment Blocks>>.\n  Comment Blocks are never passed to the output.\n\nSystem Macros\n~~~~~~~~~~~~~\nSystem macros are block macros that perform a predefined task and are\nhardwired into the asciidoc(1) program.\n\n- You can escape system macros with a leading backslash character\n  (as you can with other macros).\n- The syntax and tasks performed by system macros is built into\n  asciidoc(1) so they don't appear in configuration files.  You can\n  however customize the syntax by adding entries to a configuration\n  file `[macros]` section.\n\n[[X63]]\nInclude Macros\n^^^^^^^^^^^^^^\nThe `include` and `include1`  system macros to include the contents of\na named file into the source document.\n\nThe `include` macro includes a file as if it were part of the parent\ndocument -- tabs are expanded and system macros processed. The\ncontents of `include1` files are not subject to tab expansion or\nsystem macro processing nor are attribute or lower priority\nsubstitutions performed. The `include1` macro's intended use is to\ninclude verbatim embedded CSS or scripts into configuration file\nheaders.  Example:\n\n------------------------------------\n\\include::chapter1.txt[tabsize=4]\n------------------------------------\n\n.Include macro behavior\n- If the included file name is specified with a relative path then the\n  path is relative to the location of the referring document.\n- Include macros can appear inside configuration files.\n- Files included from within 'DelimitedBlocks' are read to completion\n  to avoid false end-of-block underline termination.\n- Attribute references are expanded inside the include 'target'; if an\n  attribute is undefined then the included file is silently skipped.\n- The 'tabsize' macro attribute sets the number of space characters to\n  be used for tab expansion in the included file (not applicable to\n  `include1` macro).\n- The 'depth' macro attribute sets the maximum permitted number of\n  subsequent nested includes (not applicable to `include1` macro which\n  does not process nested includes). Setting 'depth' to '1' disables\n  nesting inside the included file. By default, nesting is limited to\n  a depth of ten.\n- If the he 'warnings' attribute is set to 'False' (or any other\n  Python literal that evaluates to boolean false) then no warning\n  message is printed if the included file does not exist. By default\n  'warnings' are enabled.\n- Internally the `include1` macro is translated to the `include1`\n  system attribute which means it must be evaluated in a region where\n  attribute substitution is enabled. To inhibit nested substitution in\n  included files it is preferable to use the `include` macro and set\n  the attribute `depth=1`.\n\nConditional Inclusion Macros\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nLines of text in the source document can be selectively included or\nexcluded from processing based on the existence (or not) of a document\nattribute.\n\nDocument text between the `ifdef` and `endif` macros is included if a\ndocument attribute is defined:\n\n  ifdef::<attribute>[]\n  :\n  endif::<attribute>[]\n\nDocument text between the `ifndef` and `endif` macros is not included\nif a document attribute is defined:\n\n  ifndef::<attribute>[]\n  :\n  endif::<attribute>[]\n\n`<attribute>` is an attribute name which is optional in the trailing\n`endif` macro.\n\nIf you only want to process a single line of text then the text can be\nput inside the square brackets and the `endif` macro omitted, for\nexample:\n\n  ifdef::revnumber[Version number 42]\n\nIs equivalent to:\n\n  ifdef::revnumber[]\n  Version number 42\n  endif::revnumber[]\n\n'ifdef' and 'ifndef' macros also accept multiple attribute names:\n\n- Multiple ',' separated attribute names evaluate to defined if one\n  or more of the attributes is defined, otherwise it's value is\n  undefined.\n- Multiple '+' separated attribute names evaluate to defined if all\n  of the attributes is defined, otherwise it's value is undefined.\n\nDocument text between the `ifeval` and `endif` macros is included if\nthe Python expression inside the square brackets is true. Example:\n\n  ifeval::[{rs458}==2]\n  :\n  endif::[]\n\n- Document attribute references are expanded before the expression is\n  evaluated.\n- If an attribute reference is undefined then the expression is\n  considered false.\n\nTake a look at the `*.conf` configuration files in the AsciiDoc\ndistribution for examples of conditional inclusion macro usage.\n\nExecutable system macros\n^^^^^^^^^^^^^^^^^^^^^^^^\nThe 'eval', 'sys' and 'sys2' block macros exhibit the same behavior as\ntheir same named <<X24, system attribute references>>. The difference\nis that system macros occur in a block macro context whereas system\nattributes are confined to inline contexts where attribute\nsubstitution is enabled.\n\nThe following example displays a long directory listing inside a\nliteral block:\n\n  ------------------\n  sys::[ls -l *.txt]\n  ------------------\n\nNOTE: There are no block macro versions of the 'eval3' and 'sys3'\nsystem attributes.\n\nTemplate System Macro\n^^^^^^^^^^^^^^^^^^^^^\nThe `template` block macro allows the inclusion of one configuration\nfile template section within another.  The following example includes\nthe `[admonitionblock]` section in the `[admonitionparagraph]`\nsection:\n\n  [admonitionparagraph]\n  template::[admonitionblock]\n\n.Template macro behavior\n- The `template::[]` macro is useful for factoring configuration file\n  markup.\n- `template::[]` macros cannot be nested.\n- `template::[]` macro expansion is applied after all configuration\n  files have been read.\n\n\n[[X77]]\nPassthrough macros\n~~~~~~~~~~~~~~~~~~\nPassthrough macros are analogous to <<X76,passthrough blocks>> and are\nused to pass text directly to the output. The substitution performed\non the text is determined by the macro definition but can be overridden\nby the `<subslist>`.  The usual syntax is\n`<name>:<subslist>[<passtext>]` (for inline macros) and\n`<name>::<subslist>[<passtext>]` (for block macros). Passthroughs, by\ndefinition, take precedence over all other text substitutions.\n\npass::\n  Inline and block. Passes text unmodified (apart from explicitly\n  specified substitutions). Examples:\n\n  pass:[<q>To be or not to be</q>]\n  pass:attributes,quotes[<u>the '{author}'</u>]\n\nasciimath, latexmath::\n  Inline and block. Passes text unmodified.  Used for\n  <<X78,mathematical formulas>>.\n\n\\+++::\n  Inline and block. The triple-plus passthrough is functionally\n  identical to the 'pass' macro but you don't have to escape `]`\n  characters and you can prefix with quoted attributes in the inline\n  version. Example:\n\n  Red [red]+++`sum_(i=1)\\^n i=(n(n+1))/2`$+++ AsciiMathML formula\n\n$$::\n  Inline and block. The double-dollar passthrough is functionally\n  identical to the triple-plus passthrough with one exception: special\n  characters are escaped. Example:\n\n  $$`[[a,b],[c,d]]((n),(k))`$$\n\n[[X80]]`::\n  Text quoted with single backtick characters constitutes an 'inline\n  literal' passthrough. The enclosed text is rendered in a monospaced\n  font and is only subject to special character substitution.  This\n  makes sense since monospace text is usually intended to be rendered\n  literally and often contains characters that would otherwise have to\n  be escaped. If you need monospaced text containing inline\n  substitutions use a <<X81,plus character instead of a backtick>>.\n\nMacro Definitions\n~~~~~~~~~~~~~~~~~\nEach entry in the configuration `[macros]` section is a macro\ndefinition which can take one of the following forms:\n\n`<pattern>=<name>[<subslist]`:: Inline macro definition.\n`<pattern>=#<name>[<subslist]`:: Block macro definition.\n`<pattern>=+<name>[<subslist]`:: System macro definition.\n`<pattern>`:: Delete the existing macro with this `<pattern>`.\n\n`<pattern>` is a Python regular expression and `<name>` is the name of\na markup template. If `<name>` is omitted then it is the value of the\nregular expression match group named 'name'.  The optional\n`[<subslist]` is a comma-separated list of substitution names enclosed\nin `[]` brackets, it sets the default substitutions for passthrough\ntext, if omitted then no passthrough substitutions are performed.\n\n.Pattern named groups\nThe following named groups can be used in macro `<pattern>` regular\nexpressions and are available as markup template attributes:\n\nname::\n  The macro name.\n\ntarget::\n  The macro target.\n\nattrlist::\n  The macro attribute list.\n\npasstext::\n  Contents of this group are passed unmodified to the output subject\n  only to 'subslist' substitutions.\n\nsubslist::\n  Processed as a comma-separated list of substitution names for\n  'passtext' substitution, overrides the the macro definition\n  'subslist'.\n\n.Here's what happens during macro substitution\n- Each contextually relevant macro 'pattern' from the `[macros]`\n  section is matched against the input source line.\n- If a match is found the text to be substituted is loaded from a\n  configuration markup template section named like\n  `<name>-inlinemacro` or `<name>-blockmacro` (depending on the macro\n  type).\n- Global and macro attribute list attributes are substituted in the\n  macro's markup template.\n- The substituted template replaces the macro reference in the output\n  document.\n\n\n[[X98]]\nHTML 5 audio and video block macros\n-----------------------------------\nThe 'html5' backend 'audio' and 'video' block macros generate the HTML\n5 'audio' and 'video' elements respectively.  They follow the usual\nAsciiDoc block macro syntax `<name>::<target>[<attrlist>]` where:\n\n[horizontal]\n`<name>`:: 'audio' or 'video'.\n`<target>`:: The URL or file name of the video or audio file.\n`<attrlist>`:: A list of named attributes (see below).\n\n.Audio macro attributes\n[options=\"header\",cols=\"1,5\",frame=\"topbot\"]\n|====================================================================\n|Name | Value\n|options\n|A comma separated list of one or more of the following items:\n'autoplay', 'loop' which correspond to the same-named HTML 5 'audio'\nelement boolean attributes.  By default the player 'controls' are\nenabled, include the 'nocontrols' option value to hide them.\n|====================================================================\n\n.Video macro attributes\n[options=\"header\",cols=\"1,5\",frame=\"topbot\"]\n|====================================================================\n|Name   | Value\n|height | The height of the player in pixels.\n|width  | The width of the player in pixels.\n|poster | The URL or file name of an image representing the video.\n|options\n|A comma separated list of one or more of the following items:\n'autoplay', 'loop' and 'nocontrols'. The 'autoplay' and 'loop' options\ncorrespond to the same-named HTML 5 'video' element boolean\nattributes.  By default the player 'controls' are enabled, include the\n'nocontrols' option value to hide them.\n|====================================================================\n\nExamples:\n\n---------------------------------------------------------------------\naudio::images/example.ogg[]\n\nvideo::gizmo.ogv[width=200,options=\"nocontrols,autoplay\"]\n\n.Example video\nvideo::gizmo.ogv[]\n\nvideo::http://www.808.dk/pics/video/gizmo.ogv[]\n---------------------------------------------------------------------\n\nIf your needs are more complex put raw HTML 5 in a markup block, for\nexample (from http://www.808.dk/?code-html-5-video):\n\n---------------------------------------------------------------------\n++++\n<video poster=\"pics/video/gizmo.jpg\" id=\"video\" style=\"cursor: pointer;\" >\n  <source src=\"pics/video/gizmo.mp4\" />\n  <source src=\"pics/video/gizmo.webm\" type=\"video/webm\" />\n  <source src=\"pics/video/gizmo.ogv\" type=\"video/ogg\" />\n  Video not playing? <a href=\"pics/video/gizmo.mp4\">Download file</a> instead.\n</video>\n\n<script type=\"text/javascript\">\n  var video = document.getElementById('video');\n  video.addEventListener('click',function(){\n    video.play();\n  },false);\n</script>\n++++\n---------------------------------------------------------------------\n\n\nTables\n------\nThe AsciiDoc table syntax looks and behaves like other delimited block\ntypes and supports standard <<X73,block configuration entries>>.\nFormatting is easy to read and, just as importantly, easy to enter.\n\n- Cells and columns can be formatted using built-in customizable styles.\n- Horizontal and vertical cell alignment can be set on columns and\n  cell.\n- Horizontal and vertical cell spanning is supported.\n\n.Use tables sparingly\n*********************************************************************\nWhen technical users first start creating documents, tables (complete\nwith column spanning and table nesting) are often considered very\nimportant. The reality is that tables are seldom used, even in\ntechnical documentation.\n\nTry this exercise: thumb through your library of technical books,\nyou'll be surprised just how seldom tables are actually used, even\nless seldom are tables containing block elements (such as paragraphs\nor lists) or spanned cells. This is no accident, like figures, tables\nare outside the normal document flow -- tables are for consulting not\nfor reading.\n\nTables are designed for, and should normally only be used for,\ndisplaying column oriented tabular data.\n*********************************************************************\n\nExample tables\n~~~~~~~~~~~~~~\n\n.Simple table\n[width=\"15%\"]\n|=======\n|1 |2 |A\n|3 |4 |B\n|5 |6 |C\n|=======\n\n.AsciiDoc source\n---------------------------------------------------------------------\n[width=\"15%\"]\n|=======\n|1 |2 |A\n|3 |4 |B\n|5 |6 |C\n|=======\n---------------------------------------------------------------------\n\n.Columns formatted with strong, monospaced and emphasis styles\n[width=\"50%\",cols=\">s,^m,e\",frame=\"topbot\",options=\"header,footer\"]\n|==========================\n|      2+|Columns 2 and 3\n|1       |Item 1  |Item 1\n|2       |Item 2  |Item 2\n|3       |Item 3  |Item 3\n|4       |Item 4  |Item 4\n|footer 1|footer 2|footer 3\n|==========================\n\n.AsciiDoc source\n---------------------------------------------------------------------\n.An example table\n[width=\"50%\",cols=\">s,^m,e\",frame=\"topbot\",options=\"header,footer\"]\n|==========================\n|      2+|Columns 2 and 3\n|1       |Item 1  |Item 1\n|2       |Item 2  |Item 2\n|3       |Item 3  |Item 3\n|4       |Item 4  |Item 4\n|footer 1|footer 2|footer 3\n|==========================\n---------------------------------------------------------------------\n\n.Horizontal and vertical source data\n[width=\"80%\",cols=\"3,^2,^2,10\",options=\"header\"]\n|=========================================================\n|Date |Duration |Avg HR |Notes\n\n|22-Aug-08 |10:24 | 157 |\nWorked out MSHR (max sustainable heart rate) by going hard\nfor this interval.\n\n|22-Aug-08 |23:03 | 152 |\nBack-to-back with previous interval.\n\n|24-Aug-08 |40:00 | 145 |\nModerately hard interspersed with 3x 3min intervals (2min\nhard + 1min really hard taking the HR up to 160).\n\n|=========================================================\n\nShort cells can be entered horizontally, longer cells vertically.  The\ndefault behavior is to strip leading and trailing blank lines within a\ncell. These characteristics aid readability and data entry.\n\n.AsciiDoc source\n---------------------------------------------------------------------\n.Windtrainer workouts\n[width=\"80%\",cols=\"3,^2,^2,10\",options=\"header\"]\n|=========================================================\n|Date |Duration |Avg HR |Notes\n\n|22-Aug-08 |10:24 | 157 |\nWorked out MSHR (max sustainable heart rate) by going hard\nfor this interval.\n\n|22-Aug-08 |23:03 | 152 |\nBack-to-back with previous interval.\n\n|24-Aug-08 |40:00 | 145 |\nModerately hard interspersed with 3x 3min intervals (2min\nhard + 1min really hard taking the HR up to 160).\n\n|=========================================================\n---------------------------------------------------------------------\n\n.A table with externally sourced CSV data\n[format=\"csv\",cols=\"^1,4*2\",options=\"header\"]\n|===================================================\nID,Customer Name,Contact Name,Customer Address,Phone\ninclude::customers.csv[]\n|===================================================\n\n.AsciiDoc source\n---------------------------------------------------------------------\n[format=\"csv\",cols=\"^1,4*2\",options=\"header\"]\n|===================================================\nID,Customer Name,Contact Name,Customer Address,Phone\n\\include::customers.csv[]\n|===================================================\n---------------------------------------------------------------------\n\n\n.Cell spans, alignments and styles\n[cols=\"e,m,^,>s\",width=\"25%\"]\n|============================\n|1 >s|2 |3 |4\n^|5 2.2+^.^|6 .3+<.>m|7\n^|8\n|9 2+>|10\n|============================\n\n.AsciiDoc source\n---------------------------------------------------------------------\n[cols=\"e,m,^,>s\",width=\"25%\"]\n|============================\n|1 >s|2 |3 |4\n^|5 2.2+^.^|6 .3+<.>m|7\n^|8\n|9 2+>|10\n|============================\n---------------------------------------------------------------------\n\n[[X68]]\nTable input data formats\n~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc table data can be 'psv', 'dsv' or 'csv' formatted.  The\ndefault table format is 'psv'.\n\nAsciiDoc 'psv' ('Prefix Separated Values') and 'dsv' ('Delimiter\nSeparated Values') formats are cell oriented -- the table is treated\nas a sequence of cells -- there are no explicit row separators.\n\n- 'psv' prefixes each cell with a separator whereas 'dsv' delimits\n  cells with a separator.\n- 'psv' and 'dsv' separators are Python regular expressions.\n- The default 'psv' separator contains <<X84, cell specifier>> related\n  named regular expression groups.\n- The default 'dsv' separator is `:|\\n` (a colon or a new line\n  character).\n- 'psv' and 'dsv' cell separators can be escaped by preceding them\n  with a backslash character.\n\nHere are four 'psv' cells (the second item spans two columns; the\nlast contains an escaped separator):\n\n  |One 2+|Two and three |A \\| separator character\n\n'csv'  is the quasi-standard row oriented 'Comma Separated Values\n(CSV)' format commonly used to import and export spreadsheet and\ndatabase data.\n\n[[X69]]\nTable attributes\n~~~~~~~~~~~~~~~~\nTables can be customized by the following attributes:\n\nformat::\n'psv' (default), 'dsv' or 'csv' (See <<X68, Table Data Formats>>).\n\nseparator::\nThe cell separator. A Python regular expression ('psv' and 'dsv'\nformats) or a single character ('csv' format).\n\nframe::\nDefines the table border and can take the following values: 'topbot'\n(top and bottom), 'all' (all sides), 'none' and 'sides' (left and\nright sides). The default value is 'all'.\n\ngrid::\nDefines which ruler lines are drawn between table rows and columns.\nThe 'grid' attribute value can be any of the following values: 'none',\n'cols', 'rows' and 'all'. The default value is 'all'.\n\nalign::\nUse the 'align' attribute to horizontally align the table on the\npage (works with HTML outputs only, has no effect on DocBook outputs).\nThe following values are valid: 'left', 'right', and 'center'.\n\nfloat::\nUse the 'float' attribute to float the table 'left' or 'right' on the\npage (works with HTML outputs only, has no effect on DocBook outputs).\nFloating only makes sense in conjunction with a table 'width'\nattribute value of less than 100% (otherwise the table will take up\nall the available space).  'float' and 'align' attributes are mutually\nexclusive.  Use the `unfloat::[]` block macro to stop floating.\n\nhalign::\nUse the 'halign' attribute to horizontally align all cells in a table.\nThe following values are valid: 'left', 'right', and 'center'\n(defaults to 'left'). Overridden by <<X70,Column specifiers>>  and\n<<X84,Cell specifiers>>.\n\nvalign::\nUse the 'valign' attribute to vertically align all cells in a table.\nThe following values are valid: 'top', 'bottom', and 'middle'\n(defaults to 'top'). Overridden by <<X70,Column specifiers>>  and\n<<X84,Cell specifiers>>.\n\noptions::\nThe 'options' attribute can contain comma separated values, for\nexample: 'header', 'footer'. By default header and footer rows are\nomitted.  See <<X74,attribute options>> for a complete list of\navailable table options.\n\ncols::\nThe 'cols' attribute is a comma separated list of <<X70,column\nspecifiers>>. For example `cols=\"2<p,2*,4p,>\"`.\n\n- If 'cols' is present it must specify all columns.\n- If the 'cols' attribute is not specified the number of columns is\n  calculated as the number of data items in the *first line* of the\n  table.\n- The degenerate form for the 'cols' attribute is an integer\n  specifying the number of columns e.g. `cols=4`.\n\nwidth::\nThe 'width' attribute is expressed as a percentage value\n('\"1%\"'...'\"99%\"'). The width specifies the table width relative to\nthe available width. HTML backends use this value to set the table\nwidth attribute. It's a bit more complicated with DocBook, see the\n<<X89,DocBook table widths>> sidebar.\n\nfilter::\nThe 'filter' attribute defines an external shell command that is\ninvoked for each cell. The built-in 'asciidoc' table style is\nimplemented using a filter.\n\n[[X89]]\n.DocBook table widths\n**********************************************************************\nThe AsciiDoc docbook backend generates CALS tables. CALS tables do not\nsupport a table width attribute -- table width can only be controlled\nby specifying absolute column widths.\n\nSpecifying absolute column widths is not media independent because\ndifferent presentation media have different physical dimensions. To\nget round this limitation both\nhttp://www.sagehill.net/docbookxsl/Tables.html#TableWidth[DocBook XSL\nStylesheets] and\nhttp://dblatex.sourceforge.net/doc/manual/ch03s05.html#sec-table-width[dblatex]\nhave implemented table width processing instructions for setting the\ntable width as a percentage of the available width. AsciiDoc emits\nthese processing instructions if the 'width' attribute is set along\nwith proportional column widths (the AsciiDoc docbook backend\n'pageunits' attribute defaults to '*').\n\nTo generate DocBook tables with absolute column widths set the\n'pageunits' attribute to a CALS absolute unit such as 'pt' and set the\n'pagewidth' attribute to match the width of the presentation media.\n**********************************************************************\n\n[[X70]]\nColumn Specifiers\n~~~~~~~~~~~~~~~~~\nColumn specifiers define how columns are rendered and appear in the\ntable <<X69,cols attribute>>.  A column specifier consists of an\noptional column multiplier followed by optional alignment, width and\nstyle values and is formatted like:\n\n  [<multiplier>*][<align>][<width>][<style>]\n\n- All components are optional. The multiplier must be first and the\n  style last. The order of `<align>` or `<width>` is not important.\n- Column `<width>` can be either an integer proportional value (1...)\n  or a percentage (1%...100%). The default value is 1. To ensure\n  portability across different backends, there is no provision for\n  absolute column widths (not to be confused with output column width\n  <<X72,markup attributes>> which are available in both percentage and\n  absolute units).\n- The '<align>' column alignment specifier is formatted like:\n\n  [<horizontal>][.<vertical>]\n+\nWhere `<horizontal>` and `<vertical>` are one of the following\ncharacters: `<`, `^` or `>` which represent 'left', 'center' and\n'right' horizontal alignment or 'top', 'middle' and 'bottom' vertical\nalignment respectively.\n\n- A `<multiplier>` can be used to specify repeated columns e.g.\n  `cols=\"4*<\"` specifies four left-justified columns. The default\n  multiplier value is 1.\n- The `<style>` name specifies a <<X71,table style>> to used to markup\n  column cells (you can use the full style names if you wish but the\n  first letter is normally sufficient).\n- Column specific styles are not applied to header rows.\n\n[[X84]]\nCell Specifiers\n~~~~~~~~~~~~~~~\nCell specifiers allow individual cells in 'psv' formatted tables to be\nspanned, multiplied, aligned and styled.  Cell specifiers prefix 'psv'\n`|` delimiters and are formatted like:\n\n  [<span>*|+][<align>][<style>]\n\n- '<span>' specifies horizontal and vertical cell spans ('+' operator) or\n  the number of times the cell is replicated ('*' operator). '<span>'\n  is formatted like:\n\n  [<colspan>][.<rowspan>]\n+\nWhere `<colspan>` and `<rowspan>` are integers specifying the number of\ncolumns and rows to span.\n\n- `<align>` specifies horizontal and vertical cell alignment an is the\n  same as in <<X70,column specifiers>>.\n- A `<style>` value is the first letter of <<X71,table style>> name.\n\nFor example, the following 'psv' formatted cell will span two columns\nand the text will be centered and emphasized:\n\n  `2+^e| Cell text`\n\n[[X71]]\nTable styles\n~~~~~~~~~~~~\nTable styles can be applied to the entire table (by setting the\n'style' attribute in the table's attribute list) or on a per column\nbasis (by specifying the style in the table's <<X69,cols attribute>>).\nTable data can be formatted using the following predefined styles:\n\ndefault::\nThe default style: AsciiDoc inline text formatting; blank lines are\ntreated as paragraph breaks.\n\nemphasis::\nLike default but all text is emphasised.\n\nmonospaced::\nLike default but all text is in a monospaced font.\n\nstrong::\nLike default but all text is bold.\n\nheader::\nApply the same style as the table header. Normally used to create a\nvertical header in the first column.\n\nasciidoc::\nWith this style table cells can contain any of the AsciiDoc elements\nthat are allowed inside document sections. This style runs asciidoc(1)\nas a filter to process cell contents. See also <<X83,Docbook table\nlimitations>>.\n\nliteral::\nNo text formatting; monospaced font; all line breaks are retained\n(the same as the AsciiDoc <<X65,LiteralBlock>> element).\n\nverse::\nAll line breaks are retained (just like the AsciiDoc <<X94,verse\nparagraph style>>).\n\n[[X72]]\nMarkup attributes\n~~~~~~~~~~~~~~~~~\nAsciiDoc makes a number of attributes available to table markup\ntemplates and tags. Column specific attributes are available when\nsubstituting the 'colspec' cell data tags.\n\npageunits::\nDocBook backend only. Specifies table column absolute width units.\nDefaults to '*'.\n\npagewidth::\nDocBook backend only. The nominal output page width in 'pageunit'\nunits. Used to calculate CALS tables absolute column and table\nwidths. Defaults to '425'.\n\ntableabswidth::\nInteger value calculated from 'width' and 'pagewidth' attributes.\nIn 'pageunit' units.\n\ntablepcwidth::\nTable width expressed as a percentage of the available width. Integer\nvalue (0..100).\n\ncolabswidth::\nInteger value calculated from 'cols' column width, 'width' and\n'pagewidth' attributes.  In 'pageunit' units.\n\ncolpcwidth::\nColumn width expressed as a percentage of the table width. Integer\nvalue (0..100).\n\ncolcount::\nTotal number of table columns.\n\nrowcount::\nTotal number of table rows.\n\nhalign::\nHorizontal cell content alignment: 'left', 'right' or 'center'.\n\nvalign::\nVertical cell content alignment: 'top', 'bottom' or 'middle'.\n\ncolnumber, colstart::\nThe number of the leftmost column occupied by the cell (1...).\n\ncolend::\nThe number of the rightmost column occupied by the cell (1...).\n\ncolspan::\nNumber of columns the cell should span.\n\nrowspan::\nNumber of rows the cell should span (1...).\n\nmorerows::\nNumber of additional rows the cell should span (0...).\n\nNested tables\n~~~~~~~~~~~~~\nAn alternative 'psv' separator character '!' can be used (instead of\n'|') in nested tables. This allows a single level of table nesting.\nColumns containing nested tables must use the 'asciidoc' style. An\nexample can be found in `./examples/website/newtables.txt`.\n\n[[X83]]\nDocBook table limitations\n~~~~~~~~~~~~~~~~~~~~~~~~~\nFully implementing tables is not trivial, some DocBook toolchains do\nbetter than others.  AsciiDoc HTML table outputs are rendered\ncorrectly in all the popular browsers -- if your DocBook generated\ntables don't look right compare them with the output generated by the\nAsciiDoc 'xhtml11' backend or try a different DocBook toolchain.  Here\nis a list of things to be aware of:\n\n- Although nested tables are not legal in DocBook 4 the FOP and\n  dblatex toolchains will process them correctly.  If you use `a2x(1)`\n  you will need to include the `--no-xmllint` option to suppress\n  DocBook validation errors.\n+\nNOTE: In theory you can nest DocBook 4 tables one level using the\n'entrytbl' element, but not all toolchains process 'entrytbl'.\n\n- DocBook only allows a subset of block elements inside table cells so\n  not all AsciiDoc elements produce valid DocBook inside table cells.\n  If you get validation errors running `a2x(1)` try the `--no-xmllint`\n  option, toolchains will often process nested block elements such as\n  sidebar blocks and floating titles correctly even though, strictly\n  speaking, they are not legal.\n\n- Text formatting in cells using the 'monospaced' table style will\n  raise validation errors because the DocBook 'literal' element was\n  not designed to support formatted text (using the 'literal' element\n  is a kludge on the part of AsciiDoc as there is no easy way to set\n  the font style in DocBook.\n\n- Cell alignments are ignored for 'verse', 'literal' or 'asciidoc'\n  table styles.\n\n\n[[X1]]\nManpage Documents\n-----------------\nSooner or later, if you program in a UNIX environment, you're going\nto have to write a man page.\n\nBy observing a couple of additional conventions (detailed below) you\ncan write AsciiDoc files that will generate HTML and PDF man pages\nplus the native manpage roff format.  The easiest way to generate roff\nmanpages from AsciiDoc source is to use the a2x(1) command. The\nfollowing example generates a roff formatted manpage file called\n`asciidoc.1` (a2x(1) uses asciidoc(1) to convert `asciidoc.1.txt` to\nDocBook which it then converts to roff using DocBook XSL Stylesheets):\n\n  a2x --doctype manpage --format manpage asciidoc.1.txt\n\n.Viewing and printing manpage files\n**********************************************************************\nUse the `man(1)` command to view the manpage file:\n\n  $ man -l asciidoc.1\n\nTo print a high quality man page to a postscript printer:\n\n  $ man -l -Tps asciidoc.1 | lpr\n\nYou could also create a PDF version of the man page by converting\nPostScript to PDF using `ps2pdf(1)`:\n\n  $ man -l -Tps asciidoc.1 | ps2pdf - asciidoc.1.pdf\n\nThe `ps2pdf(1)` command is included in the Ghostscript distribution.\n**********************************************************************\n\nTo find out more about man pages view the `man(7)` manpage\n(`man 7 man` and `man man-pages` commands).\n\n\nDocument Header\n~~~~~~~~~~~~~~~\nA manpage document Header is mandatory. The title line contains the\nman page name followed immediately by the manual section number in\nbrackets, for example 'ASCIIDOC(1)'. The title name should not contain\nwhite space and the manual section number is a single digit optionally\nfollowed by a single character.\n\nThe NAME Section\n~~~~~~~~~~~~~~~~\nThe first manpage section is mandatory, must be titled 'NAME' and must\ncontain a single paragraph (usually a single line) consisting of a\nlist of one or more comma separated command name(s) separated from the\ncommand purpose by a dash character. The dash must have at least one\nwhite space character on either side. For example:\n\n  printf, fprintf, sprintf - print formatted output\n\nThe SYNOPSIS Section\n~~~~~~~~~~~~~~~~~~~~\nThe second manpage section is mandatory and must be titled 'SYNOPSIS'.\n\nrefmiscinfo attributes\n~~~~~~~~~~~~~~~~~~~~~~\nIn addition to the automatically created man page <<X60,intrinsic\nattributes>> you can assign DocBook\nhttp://www.docbook.org/tdg5/en/html/refmiscinfo.html[refmiscinfo]\nelement 'source', 'version' and 'manual' values using AsciiDoc\n`{mansource}`, `{manversion}` and `{manmanual}` attributes\nrespectively. This example is from the AsciiDoc header of a man page\nsource file:\n\n  :man source:   AsciiDoc\n  :man version:  {revnumber}\n  :man manual:   AsciiDoc Manual\n\n\n[[X78]]\nMathematical Formulas\n---------------------\nThe 'asciimath' and 'latexmath' <<X77,passthrough macros>> along with\n'asciimath' and 'latexmath'  <<X76,passthrough blocks>> provide a\n(backend dependent) mechanism for rendering mathematical formulas. You\ncan use the following math markups:\n\nNOTE: The 'latexmath' macro used to include 'LaTeX Math' in DocBook\noutputs is not the same as the 'latexmath' macro used to include\n'LaTeX MathML' in XHTML outputs.  'LaTeX Math' applies to DocBook\noutputs that are processed by <<X31,dblatex>> and is normally used to\ngenerate PDF files.  'LaTeXMathML' is very much a subset of 'LaTeX\nMath' and applies to XHTML documents.\n\nLaTeX Math\n~~~~~~~~~~\nftp://ftp.ams.org/pub/tex/doc/amsmath/short-math-guide.pdf[LaTeX\nmath] can be included in documents that are processed by\n<<X31,dblatex(1)>>.  Example inline formula:\n\n  latexmath:[$C = \\alpha + \\beta Y^{\\gamma} + \\epsilon$]\n\nFor more examples see the {website}[AsciiDoc website] or the\ndistributed `doc/latexmath.txt` file.\n\nASCIIMathML\n~~~~~~~~~~~\n/////////////////////////////////////////////////////////////////////\nThe older ASCIIMathML 1.47 version is used instead of version 2\nbecause:\n\n1. Version 2 doesn't work when embedded.\n2. Version 2 is much larger.\n/////////////////////////////////////////////////////////////////////\n\nhttp://www1.chapman.edu/~jipsen/mathml/asciimath.html[ASCIIMathML]\nformulas can be included in XHTML documents generated using the\n'xhtml11' and 'html5' backends. To enable ASCIIMathML support you must\ndefine the 'asciimath' attribute, for example using the `-a asciimath`\ncommand-line option.  Example inline formula:\n\n  asciimath:[`x/x={(1,if x!=0),(text{undefined},if x=0):}`]\n\nFor more examples see the {website}[AsciiDoc website] or the\ndistributed `doc/asciimathml.txt` file.\n\nLaTeXMathML\n~~~~~~~~~~~\n/////////////////////////////////////////////////////////////////////\nThere is an http://math.etsu.edu/LaTeXMathML/[extended LaTeXMathML\nversion] by Jeff Knisley, in addition to a JavaScript file it requires\nthe inclusion of a CSS file.\n/////////////////////////////////////////////////////////////////////\n\n'LaTeXMathML' allows LaTeX Math style formulas to be included in XHTML\ndocuments generated using the AsciiDoc 'xhtml11' and 'html5' backends.\nAsciiDoc uses the\nhttp://www.maths.nottingham.ac.uk/personal/drw/lm.html[original\nLaTeXMathML] by Douglas Woodall.  'LaTeXMathML' is derived from\nASCIIMathML and is for users who are more familiar with or prefer\nusing LaTeX math formulas (it recognizes a subset of LaTeX Math, the\ndifferences are documented on the 'LaTeXMathML' web page).  To enable\nLaTeXMathML support you must define the 'latexmath' attribute, for\nexample using the `-a latexmath` command-line option.  Example inline\nformula:\n\n  latexmath:[$\\sum_{n=1}^\\infty \\frac{1}{2^n}$]\n\nFor more examples see the {website}[AsciiDoc website] or the\ndistributed `doc/latexmathml.txt` file.\n\nMathML\n~~~~~~\nhttp://www.w3.org/Math/[MathML] is a low level XML markup for\nmathematics. AsciiDoc has no macros for MathML but users familiar with\nthis markup could use passthrough macros and passthrough blocks to\ninclude MathML in output documents.\n\n\n[[X7]]\nConfiguration Files\n-------------------\nAsciiDoc source file syntax and output file markup is largely\ncontrolled by a set of cascading, text based, configuration files.  At\nruntime The AsciiDoc default configuration files are combined with\noptional user and document specific configuration files.\n\nConfiguration File Format\n~~~~~~~~~~~~~~~~~~~~~~~~~\nConfiguration files contain named sections. Each section begins with a\nsection name in square brackets []. The section body consists of the\nlines of text between adjacent section headings.\n\n- Section names consist of one or more alphanumeric, underscore or\n  dash characters and cannot begin or end with a dash.\n- Lines starting with a '#' character are treated as comments and\n  ignored.\n- If the section name is prefixed with a '+' character then the\n  section contents is appended to the contents of an already existing\n  same-named section.\n- Otherwise same-named sections and section entries override\n  previously loaded sections and section entries (this is sometimes\n  referred to as 'cascading').  Consequently, downstream configuration\n  files need only contain those sections and section entries that need\n  to be overridden.\n\nTIP: When creating custom configuration files you only need to include\nthe sections and entries that differ from the default configuration.\n\nTIP: The best way to learn about configuration files is to read the\ndefault configuration files in the AsciiDoc distribution in\nconjunction with asciidoc(1) output files. You can view configuration\nfile load sequence by turning on the asciidoc(1) `-v` (`--verbose`)\ncommand-line option.\n\nAsciiDoc reserves the following section names for specific purposes:\n\nmiscellaneous::\n        Configuration options that don't belong anywhere else.\nattributes::\n        Attribute name/value entries.\nspecialcharacters::\n        Special characters reserved by the backend markup.\ntags::\n        Backend markup tags.\nquotes::\n        Definitions for quoted inline character formatting.\nspecialwords::\n        Lists of words and phrases singled out for special markup.\nreplacements, replacements2, replacements3::\n        Find and replace substitution definitions.\nspecialsections::\n        Used to single out special section names for specific markup.\nmacros::\n        Macro syntax definitions.\ntitles::\n        Heading, section and block title definitions.\nparadef-*::\n        Paragraph element definitions.\nblockdef-*::\n        DelimitedBlock element definitions.\nlistdef-*::\n        List element definitions.\nlisttags-*::\n        List element tag definitions.\ntabledef-*::\n        Table element definitions.\ntabletags-*::\n        Table element tag definitions.\n\nEach line of text in these sections is a 'section entry'. Section\nentries share the following syntax:\n\nname=value::\n        The entry value is set to value.\nname=::\n        The entry value is set to a zero length string.\nname!::\n        The entry is undefined (deleted from the configuration). This\n        syntax only applies to 'attributes' and 'miscellaneous'\n        sections.\n\n.Section entry behavior\n- All equals characters inside the `name` must be escaped with a\n  backslash character.\n- `name` and `value` are stripped of leading and trailing white space.\n- Attribute names, tag entry names and markup template section names\n  consist of one or more alphanumeric, underscore or dash characters.\n  Names should not begin or end with a dash.\n- A blank configuration file section (one without any entries) deletes\n  any preceding section with the same name (applies to non-markup\n  template sections).\n\n\nMiscellaneous section\n~~~~~~~~~~~~~~~~~~~~~\nThe optional `[miscellaneous]` section specifies the following\n`name=value` options:\n\nnewline::\n        Output file line termination characters. Can include any\n        valid Python string escape sequences. The default value is\n        `\\r\\n` (carriage return, line feed). Should not be quoted or\n        contain explicit spaces (use `\\x20` instead). For example:\n\n        $ asciidoc -a 'newline=\\n' -b docbook mydoc.txt\n\noutfilesuffix::\n        The default extension for the output file, for example\n        `outfilesuffix=.html`. Defaults to backend name.\ntabsize::\n        The number of spaces to expand tab characters, for example\n        `tabsize=4`. Defaults to 8. A 'tabsize' of zero suppresses tab\n        expansion (useful when piping included files through block\n        filters). Included files can override this option using the\n        'tabsize' attribute.\npagewidth, pageunits::\n        These global table related options are documented in the\n        <<X4,Table Configuration File Definitions>> sub-section.\n\nNOTE: `[miscellaneous]` configuration file entries can be set using\nthe asciidoc(1) `-a` (`--attribute`) command-line option.\n\nTitles section\n~~~~~~~~~~~~~~\nsectiontitle::\n        Two line section title pattern. The entry value is a Python\n        regular expression containing the named group 'title'.\n\nunderlines::\n        A comma separated list of document and section title underline\n        character pairs starting with the section level 0 and ending\n        with section level 4 underline. The default setting is:\n\n        underlines=\"==\",\"--\",\"~~\",\"^^\",\"++\"\n\nsect0...sect4::\n        One line section title patterns. The entry value is a Python\n        regular expression containing the named group 'title'.\n\nblocktitle::\n        <<X42,BlockTitle element>> pattern.  The entry value is a\n        Python regular expression containing the named group 'title'.\n\nsubs::\n        A comma separated list of substitutions that are performed on\n        the document header and section titles. Defaults to 'normal'\n        substitution.\n\nTags section\n~~~~~~~~~~~~\nThe `[tags]` section contains backend tag definitions (one per\nline). Tags are used to translate AsciiDoc elements to backend\nmarkup.\n\nAn AsciiDoc tag definition is formatted like\n`<tagname>=<starttag>|<endtag>`. For example:\n\n  emphasis=<em>|</em>\n\nIn this example asciidoc(1) replaces the | character with the\nemphasized text from the AsciiDoc input file and writes the result to\nthe output file.\n\nUse the `{brvbar}` attribute reference if you need to include a | pipe\ncharacter inside tag text.\n\nAttributes section\n~~~~~~~~~~~~~~~~~~\nThe optional `[attributes]` section contains predefined attributes.\n\nIf the attribute value requires leading or trailing spaces then the\ntext text should be enclosed in quotation mark (\") characters.\n\nTo delete a attribute insert a `name!` entry in a downstream\nconfiguration file or use the asciidoc(1) `--attribute name!`\ncommand-line option (an attribute name suffixed with a `!` character\ndeletes the attribute)\n\nSpecial Characters section\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe `[specialcharacters]` section specifies how to escape characters\nreserved by the backend markup. Each translation is specified on a\nsingle line formatted like:\n\n  <special_character>=<translated_characters>\n\nSpecial characters are normally confined to those that resolve\nmarkup ambiguity (in the case of HTML and XML markups the ampersand,\nless than and greater than characters).  The following example causes\nall occurrences of the `<` character to be replaced by `&lt;`.\n\n  <=&lt;\n\nQuoted Text section\n~~~~~~~~~~~~~~~~~~~\nQuoting is used primarily for text formatting.  The `[quotes]` section\ndefines AsciiDoc quoting characters and their corresponding backend\nmarkup tags.  Each section entry value is the name of a of a `[tags]`\nsection entry. The entry name is the character (or characters) that\nquote the text.  The following examples are taken from AsciiDoc\nconfiguration files:\n\n  [quotes]\n  _=emphasis\n\n  [tags]\n  emphasis=<em>|</em>\n\nYou can specify the left and right quote strings separately by\nseparating them with a | character, for example:\n\n  ``|''=quoted\n\nOmitting the tag will disable quoting, for example, if you don't want\nsuperscripts or subscripts put the following in a custom configuration\nfile or edit the global `asciidoc.conf` configuration file:\n\n  [quotes]\n  ^=\n  ~=\n\n<<X52,Unconstrained quotes>> are differentiated from constrained\nquotes by prefixing the tag name with a hash character, for example:\n\n  __=#emphasis\n\n.Quoted text behavior\n- Quote characters must be non-alphanumeric.\n- To minimize quoting ambiguity try not to use the same quote\n  characters in different quote types.\n\nSpecial Words section\n~~~~~~~~~~~~~~~~~~~~~\nThe `[specialwords]` section is used to single out words and phrases\nthat you want to consistently format in some way throughout your\ndocument without having to repeatedly specify the markup. The name of\neach entry corresponds to a markup template section and the entry\nvalue consists of a list of words and phrases to be marked up. For\nexample:\n\n  [specialwords]\n  strongwords=NOTE IMPORTANT\n\n  [strongwords]\n  <strong>{words}</strong>\n\nThe examples specifies that any occurrence of `NOTE` or `IMPORTANT`\nshould appear in a bold font.\n\nWords and word phrases are treated as Python regular expressions: for\nexample, the word `^NOTE` would only match `NOTE` if appeared at\nthe start of a line.\n\nAsciiDoc comes with three built-in Special Word types:\n'emphasizedwords', 'monospacedwords' and 'strongwords', each has a\ncorresponding (backend specific) markup template section. Edit the\nconfiguration files to customize existing Special Words and to add new\nones.\n\n.Special word behavior\n- Word list entries must be separated by space characters.\n- Word list entries with embedded spaces should be enclosed in quotation (\")\n  characters.\n- A `[specialwords]` section entry of the form\n  +name=word1{nbsp}[word2...]+ adds words to existing `name` entries.\n- A `[specialwords]` section entry of the form `name` undefines\n  (deletes) all existing `name` words.\n- Since word list entries are processed as Python regular expressions\n  you need to be careful to escape regular expression special\n  characters.\n- By default Special Words are substituted before Inline Macros, this\n  may lead to undesirable consequences. For example the special word\n  `foobar` would be expanded inside the macro call\n  `http://www.foobar.com[]`.  A possible solution is to emphasize\n  whole words only by defining the word using regular expression\n  characters, for example `\\bfoobar\\b`.\n- If the first matched character of a special word is a backslash then\n  the remaining characters are output without markup i.e. the\n  backslash can be used to escape special word markup.  For example\n  the special word `\\\\?\\b[Tt]en\\b` will mark up the words `Ten` and\n  `ten` only if they are not preceded by a backslash.\n\n[[X10]]\nReplacements section\n~~~~~~~~~~~~~~~~~~~~\n`[replacements]`, `[replacements2]` and `[replacements3]`\nconfiguration file entries specify find and replace text and are\nformatted like:\n\n  <find_pattern>=<replacement_text>\n\nThe find text can be a Python regular expression; the replace text can\ncontain Python regular expression group references.\n\nUse Replacement shortcuts for often used macro references, for\nexample (the second replacement allows us to backslash escape the\nmacro name):\n\n  NEW!=image:./images/smallnew.png[New!]\n  \\\\NEW!=NEW!\n\nThe only difference between the three replacement types is how they\nare applied. By default 'replacements' and 'replacement2' are applied\nin <<X102,normal>> substitution contexts whereas 'replacements3' needs\nto be configured explicitly and should only be used in backend\nconfiguration files.\n\n.Replacement behavior\n- The built-in replacements can be escaped with a backslash.\n- If the find or replace text has leading or trailing spaces then the\n  text should be enclosed in quotation (\") characters.\n- Since the find text is processed as a regular expression you need to\n  be careful to escape regular expression special characters.\n- Replacements are performed in the same order they appear in the\n  configuration file replacements section.\n\nMarkup Template Sections\n~~~~~~~~~~~~~~~~~~~~~~~~\nMarkup template sections supply backend markup for translating\nAsciiDoc elements.  Since the text is normally backend dependent\nyou'll find these sections in the backend specific configuration\nfiles. Template sections differ from other sections in that they\ncontain a single block of text instead of per line 'name=value'\nentries. A markup template section body can contain:\n\n- Attribute references\n- System macro calls.\n- A document content placeholder\n\nThe document content placeholder is a single | character and is\nreplaced by text from the source element.  Use the `{brvbar}`\nattribute reference if you need a literal | character in the template.\n\n[[X27]]\nConfiguration file names, precedence and locations\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nConfiguration files have a `.conf` file name extension; they are\nloaded from the following locations:\n\n1. The directory containing the asciidoc executable.\n2. If there is no `asciidoc.conf` file in the directory containing the\n   asciidoc executable then load from the global configuration\n   directory (normally `/etc/asciidoc` or `/usr/local/etc/asciidoc`)\n   i.e. the global configuration files directory is skipped if\n   AsciiDoc configuration files are installed in the same directory as\n   the asciidoc executable. This allows both a system wide copy and\n   multiple local copies of AsciiDoc to coexist on the same host PC.\n3. The user's `$HOME/.asciidoc` directory (if it exists).\n4. The directory containing the AsciiDoc source file.\n5. Explicit configuration files specified using:\n   - The `conf-files` attribute (one or more file names separated by a\n     `|` character). These files are loaded in the order they are\n     specified and prior to files specified using the `--conf-file`\n     command-line option.\n   - The asciidoc(1) `--conf-file`) command-line option.  The\n     `--conf-file` option can be specified multiple times, in which\n     case configuration files will be processed in the same order they\n     appear on the command-line.\n6. <<X100,Backend plugin>> configuration files are loaded from\n   subdirectories named like `backends/<backend>` in locations 1, 2\n   and 3.\n7. <<X59,Filter>> configuration files are loaded from subdirectories\n   named like `filters/<filter>` in locations 1, 2 and 3.\n\nConfiguration files from the above locations are loaded in the\nfollowing order:\n\n- The `[attributes]` section only from:\n  * `asciidoc.conf` in location 3\n  * Files from location 5.\n+\nThis first pass makes locally set attributes available in the global\n`asciidoc.conf` file.\n\n- `asciidoc.conf` from locations 1, 2, 3.\n- 'attributes', 'titles' and 'specialcharacters' sections from the\n  `asciidoc.conf` in location 4.\n- The document header is parsed at this point and we can assume the\n  'backend' and 'doctype' have now been defined.\n- Backend plugin `<backend>.conf` and `<backend>-<doctype>.conf` files\n  from locations 6.  If a backend plugin is not found then try\n  locations 1, 2 and 3 for `<backend>.conf` and\n  `<backend>-<doctype>.conf` backend configuration files.\n- Filter conf files from locations 7.\n- `lang-<lang>.conf` from locations 1, 2, 3.\n- `asciidoc.conf` from location 4.\n- `<backend>.conf` and `<backend>-<doctype>.conf` from location 4.\n- Filter conf files from location 4.\n- `<docfile>.conf` and `<docfile>-<backend>.conf` from location 4.\n- Configuration files from location 5.\n\nWhere:\n\n- `<backend>` and `<doctype>` are values specified by the asciidoc(1)\n  `-b` (`--backend`) and `-d` (`--doctype`) command-line options.\n- `<infile>` is the path name of the AsciiDoc input file without the\n  file name extension.\n- `<lang>` is a two letter country code set by the the AsciiDoc 'lang'\n  attribute.\n\n[NOTE]\n=====================================================================\nThe backend and language global configuration files are loaded *after*\nthe header has been parsed.  This means that you can set most\nattributes in the document header. Here's an example header:\n\n  Life's Mysteries\n  ================\n  :author: Hu Nose\n  :doctype: book\n  :toc:\n  :icons:\n  :data-uri:\n  :lang: en\n  :encoding: iso-8859-1\n\nAttributes set in the document header take precedence over\nconfiguration file attributes.\n\n=====================================================================\n\nTIP: Use the asciidoc(1) `-v` (`--verbose`) command-line option to see\nwhich configuration files are loaded and the order in which they are\nloaded.\n\n\nDocument Attributes\n-------------------\nA document attribute is comprised of a 'name' and a textual 'value'\nand is used for textual substitution in AsciiDoc documents and\nconfiguration files. An attribute reference (an attribute name\nenclosed in braces) is replaced by the corresponding attribute\nvalue. Attribute names are case insensitive and can only contain\nalphanumeric, dash and underscore characters.\n\nThere are four sources of document attributes (from highest to lowest\nprecedence):\n\n- Command-line attributes.\n- AttributeEntry, AttributeList, Macro and BlockId elements.\n- Configuration file `[attributes]` sections.\n- Intrinsic attributes.\n\nWithin each of these divisions the last processed entry takes\nprecedence.\n\nNOTE: If an attribute is not defined then the line containing the\nattribute reference is dropped. This property is used extensively in\nAsciiDoc configuration files to facilitate conditional markup\ngeneration.\n\n\n[[X18]]\nAttribute Entries\n-----------------\nThe `AttributeEntry` block element allows document attributes to be\nassigned within an AsciiDoc document. Attribute entries are added to\nthe global document attributes dictionary. The attribute name/value\nsyntax is a single line like:\n\n  :<name>: <value>\n\nFor example:\n\n  :Author Initials: JB\n\nThis will set an attribute reference `{authorinitials}` to the value\n'JB' in the current document.\n\nTo delete (undefine) an attribute use the following syntax:\n\n  :<name>!:\n\n.AttributeEntry behavior\n- The attribute entry line begins with colon -- no white space allowed\n  in left margin.\n- AsciiDoc converts the `<name>` to a legal attribute name (lower\n  case, alphanumeric, dash and underscore characters only -- all other\n  characters deleted). This allows more human friendly text to be\n  used.\n- Leading and trailing white space is stripped from the `<value>`.\n- Lines ending in a space followed by a plus character are continued\n  to the next line, for example:\n\n  :description: AsciiDoc is a text document format for writing notes, +\n                documentation, articles, books, slideshows, web pages +\n                and man pages.\n\n- If the `<value>` is blank then the corresponding attribute value is\n  set to an empty string.\n- Attribute references contained in the entry `<value>` will be\n  expanded.\n- By default AttributeEntry values are substituted for\n  `specialcharacters` and `attributes` (see above), if you want to\n  change or disable AttributeEntry substitution use the <<X77,pass:[]\n  inline macro>> syntax.\n- Attribute entries in the document Header are available for header\n  markup template substitution.\n- Attribute elements override configuration file and intrinsic\n  attributes but do not override command-line attributes.\n\nHere are some more attribute entry examples:\n\n---------------------------------------------------------------------\nAsciiDoc User Manual\n====================\n:author:    Stuart Rackham\n:email:     srackham@gmail.com\n:revdate:   April 23, 2004\n:revnumber: 5.1.1\n---------------------------------------------------------------------\n\nWhich creates these attributes:\n\n  {author}, {firstname}, {lastname}, {authorinitials}, {email},\n  {revdate}, {revnumber}\n\nThe previous example is equivalent to this <<X95,document header>>:\n\n---------------------------------------------------------------------\nAsciiDoc User Manual\n====================\nStuart Rackham <srackham@gmail.com>\n5.1.1, April 23, 2004\n---------------------------------------------------------------------\n\nSetting configuration entries\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nA variant of the Attribute Entry syntax allows configuration file\nsection entries and markup template sections to be set from within an\nAsciiDoc document:\n\n  :<section_name>.[<entry_name>]: <entry_value>\n\nWhere `<section_name>` is the configuration section name,\n`<entry_name>` is the name of the entry and `<entry_value>` is the\noptional entry value. This example sets the default labeled list\nstyle to 'horizontal':\n\n  :listdef-labeled.style: horizontal\n\nIt is exactly equivalent to a configuration file containing:\n\n  [listdef-labeled]\n  style=horizontal\n\n- If the `<entry_name>` is omitted then the entire section is\n  substituted with the `<entry_value>`. This feature should only be\n  used to set markup template sections. The following example sets the\n  'xref2' inline macro markup template:\n\n  :xref2-inlinemacro.: <a href=\"#{1}\">{2?{2}}</a>\n\n- No substitution is performed on configuration file attribute entries\n  and they cannot be undefined.\n- This feature can only be used in attribute entries -- configuration\n  attributes cannot be set using the asciidoc(1) command `--attribute`\n  option.\n\n[[X62]]\n.Attribute entries promote clarity and eliminate repetition\n*********************************************************************\nURLs and file names in AsciiDoc macros are often quite long -- they\nbreak paragraph flow and readability suffers.  The problem is\ncompounded by redundancy if the same name is used repeatedly.\nAttribute entries can be used to make your documents easier to read\nand write, here are some examples:\n\n  :1:         http://freshmeat.net/projects/asciidoc/\n  :homepage:  http://methods.co.nz/asciidoc/[AsciiDoc home page]\n  :new:       image:./images/smallnew.png[]\n  :footnote1: footnote:[A meaningless latin term]\n\n  Using previously defined attributes: See the {1}[Freshmeat summary]\n  or the {homepage} for something new {new}. Lorem ispum {footnote1}.\n\n.Note\n- The attribute entry definition must precede it's usage.\n- You are not limited to URLs or file names, entire macro calls or\n  arbitrary lines of text can be abbreviated.\n- Shared attributes entries could be grouped into a separate file and\n  <<X63,included>> in multiple documents.\n*********************************************************************\n\n\n[[X21]]\nAttribute Lists\n---------------\n- An attribute list is a comma separated list of attribute values.\n- The entire list is enclosed in square brackets.\n- Attribute lists are used to pass parameters to macros, blocks (using\n  the <<X79,AttributeList element>>) and inline quotes.\n\nThe list consists of zero or more positional attribute values followed\nby zero or more named attribute values.  Here are three examples: a\nsingle unquoted positional attribute; three unquoted positional\nattribute values; one positional attribute followed by two named\nattributes; the unquoted attribute value in the final example contains\ncomma (`&#44;`) and double-quote (`&#34;`) character entities:\n\n  [Hello]\n  [quote, Bertrand Russell, The World of Mathematics (1956)]\n  [\"22 times\", backcolor=\"#0e0e0e\", options=\"noborders,wide\"]\n  [A footnote&#44; &#34;with an image&#34; image:smallnew.png[]]\n\n.Attribute list behavior\n- If one or more attribute values contains a comma the all string\n  values must be quoted (enclosed in double quotation mark\n  characters).\n- If the list contains any named or quoted attributes then all string\n  attribute values must be quoted.\n- To include a double quotation mark (\") character in a quoted\n  attribute value the the quotation mark must be escaped with a\n  backslash.\n- List attributes take precedence over existing attributes.\n- List attributes can only be referenced in configuration file markup\n  templates and tags, they are not available elsewhere in the\n  document.\n- Setting a named attribute to `None` undefines the attribute.\n- Positional attributes are referred to as `{1}`,`{2}`,`{3}`,...\n- Attribute `{0}` refers to the entire list (excluding the enclosing\n  square brackets).\n- Named attribute names cannot contain dash characters.\n\n[[X75]]\nOptions attribute\n~~~~~~~~~~~~~~~~~\nIf the attribute list contains an attribute named `options` it is\nprocessed as a comma separated list of option names:\n\n- Each name generates an attribute named like `<option>-option` (where\n  `<option>` is the option name) with an empty string value.  For\n  example `[options=\"opt1,opt2,opt3\"]` is equivalent to setting the\n  following three attributes\n  `[opt1-option=\"\",opt2-option=\"\",opt2-option=\"\"]`.\n- If you define a an option attribute globally (for example with an\n  <<X18,attribute entry>>) then it will apply to all elements in the\n  document.\n- AsciiDoc implements a number of predefined options which are listed\n  in the <<X74,Attribute Options appendix>>.\n\nMacro Attribute lists\n~~~~~~~~~~~~~~~~~~~~~\nMacros calls are suffixed with an attribute list. The list may be\nempty but it cannot be omitted. List entries are used to pass\nattribute values to macro markup templates.\n\n\nAttribute References\n--------------------\nAn attribute reference is an attribute name (possibly followed by an\nadditional parameters) enclosed in curly braces.  When an attribute\nreference is encountered it is evaluated and replaced by its\ncorresponding text value.  If the attribute is undefined the line\ncontaining the attribute is dropped.\n\nThere are three types of attribute reference: 'Simple', 'Conditional'\nand 'System'.\n\n.Attribute reference evaluation\n- You can suppress attribute reference expansion by placing a\n  backslash character immediately in front of the opening brace\n  character.\n- By default attribute references are not expanded in\n  'LiteralParagraphs', 'ListingBlocks' or 'LiteralBlocks'.\n- Attribute substitution proceeds line by line in reverse line order.\n- Attribute reference evaluation is performed in the following order:\n  'Simple' then 'Conditional' and finally 'System'.\n\nSimple Attributes References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSimple attribute references take the form `{<name>}`. If the\nattribute name is defined its text value is substituted otherwise the\nline containing the reference is dropped from the output.\n\nConditional Attribute References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAdditional parameters are used in conjunction with attribute names to\ncalculate a substitution value. Conditional attribute references take\nthe following forms:\n\n`{<names>=<value>}`::\n        `<value>` is substituted if the attribute `<names>` is\n        undefined otherwise its value is substituted. `<value>` can\n        contain simple attribute references.\n\n`{<names>?<value>}`::\n        `<value>` is substituted if the attribute `<names>` is defined\n        otherwise an empty string is substituted.  `<value>` can\n        contain simple attribute references.\n\n`{<names>!<value>}`::\n        `<value>` is substituted if the attribute `<names>` is\n        undefined otherwise an empty string is substituted.  `<value>`\n        can contain simple attribute references.\n\n`{<names>#<value>}`::\n        `<value>` is substituted if the attribute `<names>` is defined\n        otherwise the undefined attribute entry causes the containing\n        line to be dropped.  `<value>` can contain simple attribute\n        references.\n\n`{<names>%<value>}`::\n        `<value>` is substituted if the attribute `<names>` is not\n        defined otherwise the containing line is dropped.  `<value>`\n        can contain simple attribute references.\n\n`{<names>@<regexp>:<value1>[:<value2>]}`::\n        `<value1>` is substituted if the value of attribute `<names>`\n        matches the regular expression `<regexp>` otherwise `<value2>`\n        is substituted. If attribute `<names>` is not defined the\n        containing line is dropped. If `<value2>` is omitted an empty\n        string is assumed. The values and the regular expression can\n        contain simple attribute references.  To embed colons in the\n        values or the regular expression escape them with backslashes.\n\n`{<names>$<regexp>:<value1>[:<value2>]}`::\n        Same behavior as the previous ternary attribute except for\n        the following cases:\n\n        `{<names>$<regexp>:<value>}`;;\n                Substitutes `<value>` if `<names>` matches `<regexp>`\n                otherwise the result is undefined and the containing\n                line is dropped.\n\n        `{<names>$<regexp>::<value>}`;;\n                Substitutes `<value>` if `<names>` does not match\n                `<regexp>` otherwise the result is undefined and the\n                containing line is dropped.\n\nThe attribute `<names>` parameter normally consists of a single\nattribute name but it can be any one of the following:\n\n- A single attribute name which evaluates to the attributes value.\n- Multiple ',' separated attribute names which evaluates to an empty\n  string if one or more of the attributes is defined, otherwise it's\n  value is undefined.\n- Multiple '+' separated attribute names which evaluates to an empty\n  string if all of the attributes are defined, otherwise it's value is\n  undefined.\n\nConditional attributes with single attribute names are evaluated first\nso they can be used inside the multi-attribute conditional `<value>`.\n\nConditional attribute examples\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nConditional attributes are mainly used in AsciiDoc configuration\nfiles -- see the distribution `.conf` files for examples.\n\nAttribute equality test::\n  If `{backend}` is 'docbook45' or 'xhtml11' the example evaluates to\n  ``DocBook 4.5 or XHTML 1.1 backend'' otherwise it evaluates to\n  ``some other backend'':\n\n  {backend@docbook45|xhtml11:DocBook 4.5 or XHTML 1.1 backend:some other backend}\n\nAttribute value map::\n  This example maps the `frame` attribute values [`topbot`, `all`,\n  `none`, `sides`] to [`hsides`, `border`, `void`, `vsides`]:\n\n  {frame@topbot:hsides}{frame@all:border}{frame@none:void}{frame@sides:vsides}\n\n\n[[X24]]\nSystem Attribute References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSystem attribute references generate the attribute text value by\nexecuting a predefined action that is parametrized by one or more\narguments. The syntax is `{<action>:<arguments>}`.\n\n`{counter:<attrname>[:<seed>]}`::\n        Increments the document attribute (if the attribute is\n        undefined it is set to `1`). Returns the new attribute value.\n\n        - Counters generate global (document wide) attributes.\n        - The optional `<seed>` specifies the counter's initial value;\n          it can be a number or a single letter; defaults to '1'.\n        - `<seed>` can contain simple and conditional attribute\n          references.\n        - The 'counter' system attribute will not be executed if the\n          containing line is dropped by the prior evaluation of an\n          undefined attribute.\n\n`{counter2:<attrname>[:<seed>]}`::\n        Same as `counter` except the it always returns a blank string.\n\n`{eval:<expression>}`::\n        Substitutes the result of the Python `<expression>`.\n\n        - If `<expression>` evaluates to `None` or `False` the\n          reference is deemed undefined and the line containing the\n          reference is dropped from the output.\n        - If the expression evaluates to `True` the attribute\n          evaluates to an empty string.\n        - `<expression>` can contain simple and conditional attribute\n          references.\n        - The 'eval' system attribute can be nested inside other\n          system attributes.\n\n`{eval3:<command>}`::\n        Passthrough version of `{eval:<expression>}` -- the generated\n        output is written directly to the output without any further\n        substitutions.\n\n`{include:<filename>}`::\n        Substitutes contents of the file named `<filename>`.\n\n        - The included file is read at the time of attribute\n          substitution.\n        - If the file does not exist a warning is emitted and the line\n          containing the reference is dropped from the output file.\n        - Tabs are expanded based on the current 'tabsize' attribute\n          value.\n\n`{set:<attrname>[!][:<value>]}`::\n        Sets or unsets document attribute. Normally only used in\n        configuration file markup templates (use\n        <<X18,AttributeEntries>> in AsciiDoc documents).\n\n        - If the attribute name is followed by an exclamation mark\n          the attribute becomes undefined.\n        - If `<value>` is omitted the attribute is set to a blank\n          string.\n        - `<value>` can contain simple and conditional attribute\n          references.\n        - Returns a blank string unless the attribute is undefined in\n          which case the return value is undefined and the enclosing\n          line will be dropped.\n\n`{set2:<attrname>[!][:<value>]}`::\n        Same as `set` except that the attribute scope is local to the\n        template.\n\n`{sys:<command>}`::\n        Substitutes the stdout generated by the execution of the shell\n        `<command>`.\n\n`{sys2:<command>}`::\n        Substitutes the stdout and stderr generated by the execution\n        of the shell `<command>`.\n\n`{sys3:<command>}`::\n        Passthrough version of `{sys:<command>}` -- the generated\n        output is written directly to the output without any further\n        substitutions.\n\n`{template:<template>}`::\n        Substitutes the contents of the configuration file section\n        named `<template>`. Attribute references contained in the\n        template are substituted.\n\n.System reference behavior\n- System attribute arguments can contain non-system attribute\n  references.\n- Closing brace characters inside system attribute arguments must be\n  escaped with a backslash.\n\n[[X60]]\nIntrinsic Attributes\n--------------------\nIntrinsic attributes are simple attributes that are created\nautomatically from: AsciiDoc document header parameters; asciidoc(1)\ncommand-line arguments; attributes defined in the default\nconfiguration files; the execution context.  Here's the list of\npredefined intrinsic attributes:\n\n  {amp}                 ampersand (&) character entity\n  {asciidoc-args}       used to pass inherited arguments to asciidoc filters\n  {asciidoc-confdir}    the asciidoc(1) global configuration directory\n  {asciidoc-dir}        the asciidoc(1) application directory\n  {asciidoc-file}       the full path name of the asciidoc(1) script\n  {asciidoc-version}    the version of asciidoc(1)\n  {author}              author's full name\n  {authored}            empty string '' if {author} or {email} defined,\n  {authorinitials}      author initials (from document header)\n  {backend-<backend>}   empty string ''\n  {<backend>-<doctype>} empty string ''\n  {backend}             document backend specified by `-b` option\n  {backend-confdir}     the directory containing the <backend>.conf file\n  {backslash}           backslash character\n  {basebackend-<base>}  empty string ''\n  {basebackend}         html or docbook\n  {blockname}           current block name (note 8).\n  {brvbar}              broken vertical bar (|) character\n  {docdate}             document last modified date\n  {docdir}              document input directory name  (note 5)\n  {docfile}             document file name  (note 5)\n  {docname}             document file name without extension (note 6)\n  {doctime}             document last modified time\n  {doctitle}            document title (from document header)\n  {doctype-<doctype>}   empty string ''\n  {doctype}             document type specified by `-d` option\n  {email}               author's email address (from document header)\n  {empty}               empty string ''\n  {encoding}            specifies input and output encoding\n  {filetype-<fileext>}  empty string ''\n  {filetype}            output file name file extension\n  {firstname}           author first name (from document header)\n  {gt}                  greater than (>) character entity\n  {id}                  running block id generated by BlockId elements\n  {indir}               input file directory name (note 2,5)\n  {infile}              input file name (note 2,5)\n  {lastname}            author last name (from document header)\n  {ldquo}               Left double quote character (note 7)\n  {level}               title level 1..4 (in section titles)\n  {listindex}           the list index (1..) of the most recent list item\n  {localdate}           the current date\n  {localtime}           the current time\n  {lsquo}               Left single quote character (note 7)\n  {lt}                  less than (<) character entity\n  {manname}             manpage name (defined in NAME section)\n  {manpurpose}          manpage (defined in NAME section)\n  {mantitle}            document title minus the manpage volume number\n  {manvolnum}           manpage volume number (1..8) (from document header)\n  {middlename}          author middle name (from document header)\n  {nbsp}                non-breaking space character entity\n  {notitle}             do not display the document title\n  {outdir}              document output directory name (note 2)\n  {outfile}             output file name (note 2)\n  {python}              the full path name of the Python interpreter executable\n  {rdquo}               Right double quote character (note 7)\n  {reftext}             running block xreflabel generated by BlockId elements\n  {revdate}             document revision date (from document header)\n  {revnumber}           document revision number (from document header)\n  {rsquo}               Right single quote character (note 7)\n  {sectnum}             formatted section number (in section titles)\n  {sp}                  space character\n  {showcomments}        send comment lines to the output\n  {title}               section title (in titled elements)\n  {two-colons}          Two colon characters\n  {two-semicolons}      Two semicolon characters\n  {user-dir}            the ~/.asciidoc directory (if it exists)\n  {verbose}             defined as '' if --verbose command option specified\n  {wj}                  Word-joiner\n  {zwsp}                Zero-width space character entity\n\n[NOTE]\n======\n1. Intrinsic attributes are global so avoid defining custom attributes\n   with the same names.\n2. `{outfile}`, `{outdir}`, `{infile}`, `{indir}` attributes are\n   effectively read-only (you can set them but it won't affect the\n   input or output file paths).\n3.  See also the <<X88,Backend Attributes>> section for attributes\n    that relate to AsciiDoc XHTML file generation.\n4. The entries that translate to blank strings are designed to be used\n   for conditional text inclusion. You can also use the `ifdef`,\n   `ifndef` and `endif` System macros for conditional inclusion.\n   footnote:[Conditional inclusion using `ifdef` and `ifndef` macros\n   differs from attribute conditional inclusion in that the former\n   occurs when the file is read while the latter occurs when the\n   contents are written.]\n5. `{docfile}` and `{docdir}` refer to root document specified on the\n   asciidoc(1) command-line; `{infile}` and `{indir}` refer to the\n   current input file which may be the root document or an included\n   file. When the input is being read from the standard input\n   (`stdin`) these attributes are undefined.\n6. If the input file is the standard input and the output file is not\n   the standard output then `{docname}` is the output file name sans\n   file extension.\n7. See\n   http://en.wikipedia.org/wiki/Non-English_usage_of_quotation_marks[non-English\n   usage of quotation marks].\n8. The `{blockname}` attribute identifies the style of the current\n   block. It applies to delimited blocks, lists and tables. Here is a\n   list of `{blockname}` values (does not include filters or custom\n   block and style names):\n\n   delimited blocks:: comment, sidebar, open, pass, literal, verse,\n   listing, quote, example, note, tip, important, caution, warning,\n   abstract, partintro\n\n   lists:: arabic, loweralpha, upperalpha, lowerroman, upperroman,\n   labeled, labeled3, labeled4, qanda, horizontal, bibliography,\n   glossary\n\n   tables:: table\n\n======\n\n\n[[X73]]\nBlock Element Definitions\n-------------------------\nThe syntax and behavior of Paragraph, DelimitedBlock, List and Table\nblock elements is determined by block definitions contained in\n<<X7,AsciiDoc configuration file>> sections.\n\nEach definition consists of a section title followed by one or more\nsection entries. Each entry defines a block parameter controlling some\naspect of the block's behavior. Here's an example:\n\n---------------------------------------------------------------------\n[blockdef-listing]\ndelimiter=^-{4,}$\ntemplate=listingblock\npresubs=specialcharacters,callouts\n---------------------------------------------------------------------\n\nConfiguration file block definition sections are processed\nincrementally after each configuration file is loaded. Block\ndefinition section entries are merged into the block definition, this\nallows block parameters to be overridden and extended by later\n<<X27,loading configuration files>>.\n\nAsciiDoc Paragraph, DelimitedBlock, List and Table block elements\nshare a common subset of configuration file parameters:\n\ndelimiter::\n  A Python regular expression that matches the first line of a block\n  element -- in the case of DelimitedBlocks and Tables it also matches\n  the last line.\n\ntemplate::\n  The name of the configuration file markup template section that will\n  envelope the block contents. The pipe ('|') character is substituted\n  for the block contents. List elements use a set of (list specific)\n  tag parameters instead of a single template. The template name can\n  contain attribute references allowing dynamic template selection a\n  the time of template substitution.\n\noptions::\n  A comma delimited list of element specific option names. In addition\n  to being used internally, options are available during markup tag\n  and template substitution as attributes with an empty string value\n  named like `<option>-option` (where `<option>` is the option name).\n  See <<X74,attribute options>> for a complete list of available\n  options.\n\nsubs, presubs, postsubs::\n  * 'presubs' and 'postsubs' are lists of comma separated substitutions that are\n    performed on the block contents. 'presubs' is applied first,\n    'postsubs' (if specified) second.\n\n  * 'subs' is an alias for 'presubs'.\n\n  * If a 'filter' is allowed (Paragraphs, DelimitedBlocks and Tables)\n    and has been specified then 'presubs' and 'postsubs' substitutions\n    are performed before and after the filter is run respectively.\n\n  * Allowed values: 'specialcharacters', 'quotes', 'specialwords',\n    'replacements', 'macros', 'attributes', 'callouts'.\n\n  * [[X102]]The following composite values are also allowed:\n\n    'none';;\n        No substitutions.\n    'normal';;\n        The following substitutions in the following order:\n        'specialcharacters', 'quotes', 'attributes', 'specialwords',\n        'replacements', 'macros', 'replacements2'.\n    'verbatim';;\n        The following substitutions in the following order:\n        'specialcharacters' and 'callouts'.\n\n  * 'normal' and 'verbatim' substitutions can be redefined by with\n    `subsnormal` and `subsverbatim` entries in a configuration file\n    `[miscellaneous]` section.\n\n  * The substitutions are processed in the order in which they are\n    listed and can appear more than once.\n\nfilter::\n  This optional entry specifies an executable shell command for\n  processing block content (Paragraphs, DelimitedBlocks and Tables).\n  The filter command can contain attribute references.\n\nposattrs::\n  Optional comma separated list of positional attribute names. This\n  list maps positional attributes (in the block's <<X21,attribute\n  list>>) to named block attributes. The following example, from the\n  QuoteBlock definition, maps the first and section positional\n  attributes:\n\n  posattrs=attribution,citetitle\n\nstyle::\n  This optional parameter specifies the default style name.\n\n\n<stylename>-style::\n  Optional style definition (see <<X23,Styles>> below).\n\nThe following block parameters behave like document attributes and can\nbe set in block attribute lists and style definitions: 'template',\n'options', 'subs', 'presubs', 'postsubs', 'filter'.\n\n[[X23]]\nStyles\n~~~~~~\nA style is a set of block parameter bundled as a single named\nparameter. The following example defines a style named 'verbatim':\n\n  verbatim-style=template=\"literalblock\",subs=\"verbatim\"\n\nIf a block's <<X21,attribute list>> contains a 'style' attribute then\nthe corresponding style parameters are be merged into the default\nblock definition parameters.\n\n- All style parameter names must be suffixed with `-style` and the\n  style parameter value is in the form of a list of <<X21,named\n  attributes>>.\n- The 'template' style parameter is mandatory, other parameters can be\n  omitted in which case they inherit their values from the default\n  block definition parameters.\n- Multi-item style parameters ('subs','presubs','postsubs','posattrs')\n  must be specified using Python tuple syntax (rather than a simple\n  list of values as they in separate entries) e.g.\n  `postsubs=(\"callouts\",)` not `postsubs=\"callouts\"`.\n\nParagraphs\n~~~~~~~~~~\nParagraph translation is controlled by `[paradef-*]` configuration\nfile section entries. Users can define new types of paragraphs and\nmodify the behavior of existing types by editing AsciiDoc\nconfiguration files.\n\nHere is the shipped Default paragraph definition:\n\n--------------------------------------------------------------------\n[paradef-default]\ndelimiter=(?P<text>\\S.*)\ntemplate=paragraph\n--------------------------------------------------------------------\n\nThe normal paragraph definition has a couple of special properties:\n\n1. It must exist and be defined in a configuration file section named\n   `[paradef-default]`.\n2. Irrespective of its position in the configuration files default\n   paragraph document matches are attempted only after trying all\n   other paragraph types.\n\nParagraph specific block parameter notes:\n\ndelimiter::\n  This regular expression must contain the named group 'text' which\n  matches the text on the first line.  Paragraphs are terminated by a\n  blank line, the end of file, or the start of a DelimitedBlock.\n\noptions::\n  The 'listelement' option specifies that paragraphs of this type will\n  automatically be considered part of immediately preceding list\n  items.  The 'skip' option causes the paragraph to be treated as a\n  comment (see <<X26,CommentBlocks>>).\n\n.Paragraph processing proceeds as follows:\n1. The paragraph text is aligned to the left margin.\n2. Optional 'presubs' inline substitutions are performed on the\n   paragraph text.\n3. If a filter command is specified it is executed and the paragraph\n   text piped to its standard input; the filter output replaces the\n   paragraph text.\n4. Optional 'postsubs' inline substitutions are performed on the\n   paragraph text.\n5. The paragraph text is enveloped by the paragraph's markup template\n   and written to the output file.\n\nDelimited Blocks\n~~~~~~~~~~~~~~~~\nDelimitedBlock 'options' values are:\n\nsectionbody::\n    The block contents are processed as a SectionBody.\n\nskip::\n    The block is treated as a comment (see <<X26,CommentBlocks>>).\n    Preceding <<X21,attribute lists>> and <<X42,block titles>> are not\n    consumed.\n\n'presubs', 'postsubs' and 'filter' entries are ignored when\n'sectionbody' or 'skip' options are set.\n\nDelimitedBlock processing proceeds as follows:\n\n1. Optional 'presubs' substitutions are performed on the block\n   contents.\n2. If a filter is specified it is executed and the block's contents\n   piped to its standard input. The filter output replaces the block\n   contents.\n3. Optional 'postsubs' substitutions are performed on the block\n   contents.\n4. The block contents is enveloped by the block's markup template and\n   written to the output file.\n\nTIP: Attribute expansion is performed on the block filter command\nbefore it is executed, this is useful for passing arguments to the\nfilter.\n\nLists\n~~~~~\nList behavior and syntax is determined by `[listdef-*]` configuration\nfile sections. The user can change existing list behavior and add new\nlist types by editing configuration files.\n\nList specific block definition notes:\n\ntype::\n  This is either 'bulleted','numbered','labeled' or 'callout'.\n\ndelimiter::\n  A Python regular expression that matches the first line of a\n  list element entry. This expression can contain the named groups\n  'text' (bulleted groups), 'index' and 'text' (numbered lists),\n  'label' and 'text' (labeled lists).\n\ntags::\n  The `<name>` of the `[listtags-<name>]` configuration file section\n  containing list markup tag definitions.  The tag entries ('list',\n  'entry', 'label', 'term', 'text') map the AsciiDoc list structure to\n  backend markup; see the 'listtags' sections in the AsciiDoc\n  distributed backend `.conf` configuration files for examples.\n\nTables\n~~~~~~\nTable behavior and syntax is determined by `[tabledef-*]` and\n`[tabletags-*]` configuration file sections. The user can change\nexisting table behavior and add new table types by editing\nconfiguration files.  The following `[tabledef-*]` section entries\ngenerate table output markup elements:\n\ncolspec::\n  The table 'colspec' tag definition.\n\nheadrow, footrow, bodyrow::\n  Table header, footer and body row tag definitions. 'headrow' and\n  'footrow' table definition entries default to 'bodyrow' if\n  they are undefined.\n\nheaddata, footdata, bodydata::\n  Table header, footer and body data tag definitions. 'headdata' and\n  'footdata' table definition entries default to 'bodydata' if they\n  are undefined.\n\nparagraph::\n  If the 'paragraph' tag is specified then blank lines in the cell\n  data are treated as paragraph delimiters and marked up using this\n  tag.\n\n[[X4]]\nTable behavior is also influenced by the following `[miscellaneous]`\nconfiguration file entries:\n\npagewidth::\n  This integer value is the printable width of the output media. See\n  <<X69,table attributes>>.\n\npageunits::\n  The units of width in output markup width attribute values.\n\n.Table definition behavior\n- The output markup generation is specifically designed to work with\n  the HTML and CALS (DocBook) table models, but should be adaptable to\n  most XML table schema.\n- Table definitions can be ``mixed in'' from multiple cascading\n  configuration files.\n- New table definitions inherit the default table and table tags\n  definitions (`[tabledef-default]` and `[tabletags-default]`) so you\n  only need to override those conf file entries that require\n  modification.\n\n\n[[X59]]\nFilters\n-------\nAsciiDoc filters allow external commands to process AsciiDoc\n'Paragraphs', 'DelimitedBlocks' and 'Table' content. Filters are\nprimarily an extension mechanism for generating specialized outputs.\nFilters are implemented using external commands which are specified in\nconfiguration file definitions.\n\nThere's nothing special about the filters, they're just standard UNIX\nfilters: they read text from the standard input, process it, and write\nto the standard output.\n\nThe asciidoc(1) command `--filter` option can be used to install and\nremove filters. The same option is used to unconditionally load a\nfilter.\n\nAttribute substitution is performed on the filter command prior to\nexecution -- attributes can be used to pass parameters from the\nAsciiDoc source document to the filter.\n\nWARNING: Filters sometimes included executable code. Before installing\na filter you should verify that it is from a trusted source.\n\nFilter Search Paths\n~~~~~~~~~~~~~~~~~~~\nIf the filter command does not specify a directory path then\nasciidoc(1) recursively searches for the executable filter command:\n\n- First it looks in the user's `$HOME/.asciidoc/filters` directory.\n- Next the global filters directory (usually `/etc/asciidoc/filters`\n  or `/usr/local/etc/asciidoc`) directory is searched.\n- Then it looks in the asciidoc(1) `./filters` directory.\n- Finally it relies on the executing shell to search the environment\n  search path (`$PATH`).\n\nStandard practice is to install each filter in it's own sub-directory\nwith the same name as the filter's style definition. For example the\nmusic filter's style name is 'music' so it's configuration and filter\nfiles are stored in the `filters/music` directory.\n\nFilter Configuration Files\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nFilters are normally accompanied by a configuration file containing a\nParagraph or DelimitedBlock definition along with corresponding markup\ntemplates.\n\nWhile it is possible to create new 'Paragraph' or 'DelimitedBlock'\ndefinitions the preferred way to implement a filter is to add a\n<<X23,style>> to the existing Paragraph and ListingBlock definitions\n(all filters shipped with AsciiDoc use this technique). The filter is\napplied to the paragraph or delimited block by preceding it with an\nattribute list: the first positional attribute is the style name,\nremaining attributes are normally filter specific parameters.\n\nasciidoc(1) auto-loads all `.conf` files found in the filter search\npaths unless the container directory also contains a file named\n`__noautoload__` (see previous section). The `__noautoload__` feature\nis used for filters that will be loaded manually using the `--filter`\noption.\n\n[[X56]]\nExample Filter\n~~~~~~~~~~~~~~\nAsciiDoc comes with a toy filter for highlighting source code keywords\nand comments.  See also the `./filters/code/code-filter-readme.txt`\nfile.\n\nNOTE: The purpose of this toy filter is to demonstrate how to write a\nfilter -- it's much to simplistic to be passed off as a code syntax\nhighlighter.  If you want a full featured multi-language highlighter\nuse the {website}source-highlight-filter.html[source code highlighter\nfilter].\n\nBuilt-in filters\n~~~~~~~~~~~~~~~~\nThe AsciiDoc distribution includes 'source', 'music', 'latex' and\n'graphviz' filters, details are on the\n{website}index.html#_filters[AsciiDoc website].\n\n[cols=\"1e,5\",frame=\"topbot\",options=\"header\"]\n.Built-in filters list\n|====================================================================\n|Filter name |Description\n\n|music\n|A {website}music-filter.html[music filter] is included in the\ndistribution `./filters/` directory. It translates music in\nhttp://lilypond.org/[LilyPond] or http://abcnotation.org.uk/[ABC]\nnotation to standard classical notation.\n\n|source\n|A {website}source-highlight-filter.html[source code highlight filter]\nis included in the distribution `./filters/` directory.\n\n|latex\n|The {website}latex-filter.html[AsciiDoc LaTeX filter] translates\nLaTeX source to a PNG image that is automatically inserted into the\nAsciiDoc output documents.\n\n|graphviz\n|Gouichi Iisaka has written a http://www.graphviz.org/[Graphviz]\nfilter for AsciiDoc.  Graphviz generates diagrams from a textual\nspecification. Gouichi Iisaka's Graphviz filter is included in the\nAsciiDoc distribution. Here are some\n{website}asciidoc-graphviz-sample.html[AsciiDoc Graphviz examples].\n\n|====================================================================\n\n[[X58]]\nFilter plugins\n~~~~~~~~~~~~~~\nFilter <<X101,plugins>> are a mechanism for distributing AsciiDoc\nfilters.  A filter plugin is a Zip file containing the files that\nconstitute a filter.  The asciidoc(1) `--filter` option is used to\nload and manage filer <<X101,plugins>>.\n\n- Filter plugins <<X27,take precedence>> over built-in filters with\n  the same name.\n- By default filter plugins are installed in\n  `$HOME/.asciidoc/filters/<filter>` where `<filter>` is the filter\n  name.\n\n\n[[X101]]\nPlugins\n-------\nThe AsciiDoc plugin architecture is an extension mechanism that allows\nadditional <<X100,backends>>, <<X58,filters>> and <<X99,themes>> to be\nadded to AsciiDoc.\n\n- A plugin is a Zip file containing an AsciiDoc backend, filter or\n  theme (configuration files, stylesheets, scripts, images).\n- The asciidoc(1) `--backend`, `--filter` and `--theme` command-line\n  options are used to load and manage plugins. Each of these options\n  responds to the plugin management 'install', 'list', 'remove' and\n  'build' commands.\n- The plugin management command names are reserved and cannot be used\n  for filter, backend or theme names.\n- The plugin Zip file name always begins with the backend, filter or\n  theme name.\n\nPlugin commands and conventions are documented in the asciidoc(1) man\npage.  You can find lists of plugins on the\n{website}plugins.html[AsciiDoc website].\n\n\n[[X36]]\nHelp Commands\n-------------\nThe asciidoc(1) command has a `--help` option which prints help topics\nto stdout. The default topic summarizes asciidoc(1) usage:\n\n  $ asciidoc --help\n\nTo print a help topic specify the topic name as a command argument.\nHelp topic names can be shortened so long as they are not ambiguous.\nExamples:\n\n  $ asciidoc --help manpage\n  $ asciidoc -h m              # Short version of previous example.\n  $ asciidoc --help syntax\n  $ asciidoc -h s              # Short version of previous example.\n\nCustomizing Help\n~~~~~~~~~~~~~~~~\nTo change, delete or add your own help topics edit a help\nconfiguration file.  The help file name `help-<lang>.conf` is based on\nthe setting of the `lang` attribute, it defaults to `help.conf`\n(English).  The <<X27,help file location>> will depend on whether you\nwant the topics to apply to all users or just the current user.\n\nThe help topic files have the same named section format as other\n<<X7,configuration files>>. The `help.conf` files are stored in the\nsame locations and loaded in the same order as other configuration\nfiles.\n\nWhen the `--help` command-line option is specified AsciiDoc loads the\nappropriate help files and then prints the contents of the section\nwhose name matches the help topic name.  If a topic name is not\nspecified `default` is used. You don't need to specify the whole help\ntopic name on the command-line, just enough letters to ensure it's not\nambiguous. If a matching help file section is not found a list of\navailable topics is printed.\n\n\nTips and Tricks\n---------------\n\nKnow Your Editor\n~~~~~~~~~~~~~~~~\nWriting AsciiDoc documents will be a whole lot more pleasant if you\nknow your favorite text editor. Learn how to indent and reformat text\nblocks, paragraphs, lists and sentences. <<X20,Tips for 'vim' users>>\nfollow.\n\n[[X20]]\nVim Commands for Formatting AsciiDoc\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nText Wrap Paragraphs\n^^^^^^^^^^^^^^^^^^^^\nUse the vim `:gq` command to reformat paragraphs. Setting the\n'textwidth' sets the right text wrap margin; for example:\n\n  :set textwidth=70\n\nTo reformat a paragraph:\n\n1. Position the cursor at the start of the paragraph.\n2. Type `gq}`.\n\nExecute `:help gq` command to read about the vim gq command.\n\n[TIP]\n=====================================================================\n- Assign the `gq}` command to the Q key with the `nnoremap Q gq}`\n  command or put it in your `~/.vimrc` file to so it's always\n  available (see the <<X61, Example `~/.vimrc` file>>).\n- Put `set` commands in your `~/.vimrc` file so you don't have to\n  enter them manually.\n- The Vim website (http://www.vim.org) has a wealth of resources,\n  including scripts for automated spell checking and ASCII Art\n  drawing.\n=====================================================================\n\nFormat Lists\n^^^^^^^^^^^^\nThe `gq` command can also be used to format bulleted, numbered and\ncallout lists. First you need to set the `comments`, `formatoptions`\nand `formatlistpat` (see the <<X61, Example `~/.vimrc` file>>).\n\nNow you can format simple lists that use dash, asterisk, period and\nplus bullets along with numbered ordered lists:\n\n1. Position the cursor at the start of the list.\n2. Type `gq}`.\n\nIndent Paragraphs\n^^^^^^^^^^^^^^^^^\nIndent whole paragraphs by indenting the fist line with the desired\nindent and then executing the `gq}` command.\n\n[[X61]]\nExample `~/.vimrc` File\n^^^^^^^^^^^^^^^^^^^^^^^\n---------------------------------------------------------------------\n\" Use bold bright fonts.\nset background=dark\n\n\" Show tabs and trailing characters.\nset listchars=tab:,trail:\nset list\n\n\" Don't highlight searched text.\nhighlight clear Search\n\n\" Don't move to matched text while search pattern is being entered.\nset noincsearch\n\n\" Reformat paragraphs and list.\nnnoremap R gq}\n\n\" Delete trailing white space and Dos-returns and to expand tabs to spaces.\nnnoremap S :set et<CR>:retab!<CR>:%s/[\\r \\t]\\+$//<CR>\n\nautocmd BufRead,BufNewFile *.txt,README,TODO,CHANGELOG,NOTES\n        \\ setlocal autoindent expandtab tabstop=8 softtabstop=2 shiftwidth=2 filetype=asciidoc\n        \\ textwidth=70 wrap formatoptions=tcqn\n        \\ formatlistpat=^\\\\s*\\\\d\\\\+\\\\.\\\\s\\\\+\\\\\\\\|^\\\\s*<\\\\d\\\\+>\\\\s\\\\+\\\\\\\\|^\\\\s*[a-zA-Z.]\\\\.\\\\s\\\\+\\\\\\\\|^\\\\s*[ivxIVX]\\\\+\\\\.\\\\s\\\\+\n        \\ comments=s1:/*,ex:*/,://,b:#,:%,:XCOMM,fb:-,fb:*,fb:+,fb:.,fb:>\n---------------------------------------------------------------------\n\nTroubleshooting\n~~~~~~~~~~~~~~~\nAsciiDoc diagnostic features are detailed in the <<X82,Diagnostics\nappendix>>.\n\nGotchas\n~~~~~~~\nIncorrect character encoding::\n    If you get an error message like `'UTF-8' codec can't decode ...`\n    then you source file contains invalid UTF-8 characters -- set the\n    AsciiDoc <<X54,encoding attribute>> for the correct character set\n    (typically ISO-8859-1 (Latin-1) for European languages).\n\nInvalid output::\n    AsciiDoc attempts to validate the input AsciiDoc source but makes\n    no attempt to validate the output markup, it leaves that to\n    external tools such as `xmllint(1)` (integrated into `a2x(1)`).\n    Backend validation cannot be hardcoded into AsciiDoc because\n    backends are dynamically configured. The following example\n    generates valid HTML but invalid DocBook (the DocBook `literal`\n    element cannot contain an `emphasis` element):\n\n    +monospaced text with an _emphasized_ word+\n\nMisinterpreted text formatting::\n    You can suppress markup expansion by placing a backslash character\n    immediately in front of the element. The following example\n    suppresses inline monospaced formatting:\n\n    \\+1 for C++.\n\nOverlapping text formatting::\n    Overlapping text formatting will generate illegal overlapping\n    markup tags which will result in downstream XML parsing errors.\n    Here's an example:\n\n    Some *strong markup _that overlaps* emphasized markup_.\n\nAmbiguous underlines::\n    A DelimitedBlock can immediately follow a paragraph without an\n    intervening blank line, but be careful, a single line paragraph\n    underline may be misinterpreted as a section title underline\n    resulting in a ``closing block delimiter expected'' error.\n\nAmbiguous ordered list items::\n    Lines beginning with numbers at the end of sentences will be\n    interpreted as ordered list items.  The following example\n    (incorrectly) begins a new list with item number 1999:\n\n    He was last sighted in\n    1999. Since then things have moved on.\n+\nThe 'list item out of sequence' warning makes it unlikely that this\nproblem will go unnoticed.\n\nSpecial characters in attribute values::\n    Special character substitution precedes attribute substitution so\n    if attribute values contain special characters you may, depending\n    on the substitution context, need to escape the special characters\n    yourself. For example:\n\n    $ asciidoc -a 'orgname=Bill &amp; Ben Inc.' mydoc.txt\n\nAttribute lists::\n    If any named attribute entries are present then all string\n    attribute values must be quoted.  For example:\n\n    [\"Desktop screenshot\",width=32]\n\n[[X90]]\nCombining separate documents\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou have a number of stand-alone AsciiDoc documents that you want to\nprocess as a single document. Simply processing them with a series of\n`include` macros won't work because the documents contain (level 0)\ndocument titles.  The solution is to create a top level wrapper\ndocument and use the `leveloffset` attribute to push them all down one\nlevel. For example:\n\n[listing]\n.....................................................................\nCombined Document Title\n=======================\n\n// Push titles down one level.\n:leveloffset: 1\n\n\\include::document1.txt[]\n\n// Return to normal title levels.\n:leveloffset: 0\n\nA Top Level Section\n-------------------\nLorum ipsum.\n\n// Push titles down one level.\n:leveloffset: 1\n\n\\include::document2.txt[]\n\n\\include::document3.txt[]\n.....................................................................\n\nThe document titles in the included documents will now be processed as\nlevel 1 section titles, level 1 sections as level 2 sections and so\non.\n\n- Put a blank line between the `include` macro lines to ensure the\n  title of the included document is not seen as part of the last\n  paragraph of the previous document.\n- You won't want non-title document header lines (for example, Author\n  and Revision lines) in the included files -- conditionally exclude\n  them if they are necessary for stand-alone processing.\n\nProcessing document sections separately\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou have divided your AsciiDoc document into separate files (one per\ntop level section) which are combined and processed with the following\ntop level document:\n\n---------------------------------------------------------------------\nCombined Document Title\n=======================\nJoe Bloggs\nv1.0, 12-Aug-03\n\n\\include::section1.txt[]\n\n\\include::section2.txt[]\n\n\\include::section3.txt[]\n---------------------------------------------------------------------\n\nYou also want to process the section files as separate documents.\nThis is easy because asciidoc(1) will quite happily process\n`section1.txt`, `section2.txt` and `section3.txt` separately -- the\nresulting output documents contain the section but have no document\ntitle.\n\nProcessing document snippets\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nUse the `-s` (`--no-header-footer`) command-line option to suppress\nheader and footer output, this is useful if the processed output is to\nbe included in another file. For example:\n\n  $ asciidoc -sb docbook section1.txt\n\nasciidoc(1) can be used as a filter, so you can pipe chunks of text\nthrough it. For example:\n\n  $ echo 'Hello *World!*' | asciidoc -s -\n  <div class=\"paragraph\"><p>Hello <strong>World!</strong></p></div>\n\nBadges in HTML page footers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSee the `[footer]` section in the AsciiDoc distribution `xhtml11.conf`\nconfiguration file.\n\nPretty printing AsciiDoc output\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIf the indentation and layout of the asciidoc(1) output is not to your\nliking you can:\n\n1. Change the indentation and layout of configuration file markup\n   template sections. The `{empty}` attribute is useful for outputting\n   trailing blank lines in markup templates.\n\n2. Use Dave Raggett's http://tidy.sourceforge.net/[HTML Tidy] program\n   to tidy asciidoc(1) output. Example:\n\n   $ asciidoc -b docbook -o - mydoc.txt | tidy -indent -xml >mydoc.xml\n\n3. Use the `xmllint(1)` format option. Example:\n\n   $ xmllint --format mydoc.xml\n\nSupporting minor DocBook DTD variations\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe conditional inclusion of DocBook SGML markup at the end of the\ndistribution `docbook45.conf` file illustrates how to support minor\nDTD variations. The included sections override corresponding entries\nfrom preceding sections.\n\nCreating stand-alone HTML documents\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIf you've ever tried to send someone an HTML document that includes\nstylesheets and images you'll know that it's not as straight-forward\nas exchanging a single file.  AsciiDoc has options to create\nstand-alone documents containing embedded images, stylesheets and\nscripts.  The following AsciiDoc command creates a single file\ncontaining <<X66,embedded images>>, CSS stylesheets, and JavaScript\n(for table of contents and footnotes):\n\n  $ asciidoc -a data-uri -a icons -a toc -a max-width=55em article.txt\n\nYou can view the HTML file here: {website}article-standalone.html[]\n\nShipping stand-alone AsciiDoc source\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nReproducing presentation documents from someone else's source has one\nmajor problem: unless your configuration files are the same as the\ncreator's you won't get the same output.\n\nThe solution is to create a single backend specific configuration file\nusing the asciidoc(1) `-c` (`--dump-conf`) command-line option. You\nthen ship this file along with the AsciiDoc source document plus the\n`asciidoc.py` script. The only end user requirement is that they have\nPython installed (and that they consider you a trusted source). This\nexample creates a composite HTML configuration file for `mydoc.txt`:\n\n  $ asciidoc -cb xhtml11 mydoc.txt > mydoc-xhtml11.conf\n\nShip `mydoc.txt`, `mydoc-html.conf`, and `asciidoc.py`. With\nthese three files (and a Python interpreter) the recipient can\nregenerate the HMTL output:\n\n  $ ./asciidoc.py -eb xhtml11 mydoc.txt\n\nThe `-e` (`--no-conf`) option excludes the use of implicit\nconfiguration files, ensuring that only entries from the\n`mydoc-html.conf` configuration are used.\n\nInserting blank space\n~~~~~~~~~~~~~~~~~~~~~\nAdjust your style sheets to add the correct separation between block\nelements. Inserting blank paragraphs containing a single non-breaking\nspace character `{nbsp}` works but is an ad hoc solution compared\nto using style sheets.\n\nClosing open sections\n~~~~~~~~~~~~~~~~~~~~~\nYou can close off section tags up to level `N` by calling the\n`eval::[Section.setlevel(N)]` system macro. This is useful if you\nwant to include a section composed of raw markup. The following\nexample includes a DocBook glossary division at the top section level\n(level 0):\n\n---------------------------------------------------------------------\n\\ifdef::basebackend-docbook[]\n\n\\eval::[Section.setlevel(0)]\n\n+++++++++++++++++++++++++++++++\n<glossary>\n  <title>Glossary</title>\n  <glossdiv>\n  ...\n  </glossdiv>\n</glossary>\n+++++++++++++++++++++++++++++++\n\\endif::basebackend-docbook[]\n---------------------------------------------------------------------\n\nValidating output files\n~~~~~~~~~~~~~~~~~~~~~~~\nUse `xmllint(1)` to check the AsciiDoc generated markup is both well\nformed and valid. Here are some examples:\n\n  $ xmllint --nonet --noout --valid docbook-file.xml\n  $ xmllint --nonet --noout --valid xhtml11-file.html\n  $ xmllint --nonet --noout --valid --html html4-file.html\n\nThe `--valid` option checks the file is valid against the document\ntype's DTD, if the DTD is not installed in your system's catalog then\nit will be fetched from its Internet location. If you omit the\n`--valid` option the document will only be checked that it is well\nformed.\n\nThe online http://validator.w3.org/#validate_by_uri+with_options[W3C\nMarkup Validation Service] is the defacto standard when it comes to\nvalidating HTML (it validates all HTML standards including HTML5).\n\n\n:numbered!:\n\n[glossary]\nGlossary\n--------\n[glossary]\n[[X8]] Block element::\n    An AsciiDoc block element is a document entity composed of one or\n    more whole lines of text.\n\n[[X34]] Inline element::\n    AsciiDoc inline elements occur within block element textual\n    content, they perform formatting and substitution tasks.\n\nFormal element::\n    An AsciiDoc block element that has a BlockTitle. Formal elements\n    are normally listed in front or back matter, for example lists of\n    tables, examples and figures.\n\nVerbatim element::\n    The word verbatim indicates that white space and line breaks in\n    the source document are to be preserved in the output document.\n\n\n[appendix]\nMigration Notes\n---------------\n[[X53]]\nVersion 7 to version 8\n~~~~~~~~~~~~~~~~~~~~~~\n- A new set of quotes has been introduced which may match inline text\n  in existing documents -- if they do you'll need to escape the\n  matched text with backslashes.\n- The index entry inline macro syntax has changed -- if your documents\n  include indexes you may need to edit them.\n- Replaced a2x(1) `--no-icons` and `--no-copy` options with their\n  negated equivalents: `--icons` and `--copy` respectively. The\n  default behavior has also changed -- the use of icons and copying of\n  icon and CSS files must be specified explicitly with the `--icons`\n  and `--copy` options.\n\nThe rationale for the changes can be found in the AsciiDoc\n`CHANGELOG`.\n\nNOTE: If you want to disable unconstrained quotes, the new alternative\nconstrained quotes syntax and the new index entry syntax then you can\ndefine the attribute `asciidoc7compatible` (for example by using the\n`-a asciidoc7compatible` command-line option).\n\n[[X38]]\n[appendix]\nPackager Notes\n--------------\nRead the `README` and `INSTALL` files (in the distribution root\ndirectory) for install prerequisites and procedures.  The distribution\n`Makefile.in` (used by `configure` to generate the `Makefile`) is the\ncanonical installation procedure.\n\n\n[[X39]]\n[appendix]\nAsciiDoc Safe Mode\n-------------------\nAsciiDoc 'safe mode' skips potentially dangerous scripted sections in\nAsciiDoc source files by inhibiting the execution of arbitrary code or\nthe inclusion of arbitrary files.\n\nThe safe mode is disabled by default, it can be enabled with the\nasciidoc(1) `--safe` command-line option.\n\n.Safe mode constraints\n- `eval`, `sys` and `sys2` executable attributes and block macros are\n  not executed.\n- `include::<filename>[]` and `include1::<filename>[]` block macro\n  files must reside inside the parent file's directory.\n- `{include:<filename>}` executable attribute files must reside\n  inside the source document directory.\n- Passthrough Blocks are dropped.\n\n[WARNING]\n=====================================================================\nThe safe mode is not designed to protect against unsafe AsciiDoc\nconfiguration files. Be especially careful when:\n\n1. Implementing filters.\n2. Implementing elements that don't escape special characters.\n3. Accepting configuration files from untrusted sources.\n=====================================================================\n\n\n[appendix]\nUsing AsciiDoc with non-English Languages\n-----------------------------------------\nAsciiDoc can process UTF-8 character sets but there are some things\nyou need to be aware of:\n\n- If you are generating output documents using a DocBook toolchain\n  then you should set the AsciiDoc `lang` attribute to the appropriate\n  language (it defaults to `en` (English)). This will ensure things\n  like table of contents, figure and table captions and admonition\n  captions are output in the specified language.  For example:\n\n  $ a2x -a lang=es doc/article.txt\n\n- If you are outputting HTML directly from asciidoc(1) you'll\n  need to set the various `*_caption` attributes to match your target\n  language (see the list of captions and titles in the `[attributes]`\n  section of the distribution `lang-*.conf` files). The easiest way is\n  to create a language `.conf` file (see the AsciiDoc's `lang-en.conf`\n  file).\n+\nNOTE: You still use the 'NOTE', 'CAUTION', 'TIP', 'WARNING',\n'IMPORTANT' captions in the AsciiDoc source, they get translated in\nthe HTML output file.\n\n- asciidoc(1) automatically loads configuration files named like\n  `lang-<lang>.conf` where `<lang>` is a two letter language code that\n  matches the current AsciiDoc `lang` attribute. See also\n  <<X27,Configuration File Names and Locations>>.\n\n\n[appendix]\nVim Syntax Highlighter\n----------------------\nSyntax highlighting is incredibly useful, in addition to making\nreading AsciiDoc documents much easier syntax highlighting also helps\nyou catch AsciiDoc syntax errors as you write your documents.\n\nThe AsciiDoc `./vim/` distribution directory contains Vim syntax\nhighlighter and filetype detection scripts for AsciiDoc.  Syntax\nhighlighting makes it much easier to spot AsciiDoc syntax errors.\n\nIf Vim is installed on your system the AsciiDoc installer\n(`install.sh`) will automatically install the vim scripts in the Vim\nglobal configuration directory (`/etc/vim`).\n\nYou can also turn on syntax highlighting by adding the following line\nto the end of you AsciiDoc source files:\n\n  // vim: set syntax=asciidoc:\n\nTIP: Bold fonts are often easier to read, use the Vim `:set\nbackground=dark` command to set bold bright fonts.\n\nNOTE: There are a number of alternative syntax highlighters for\nvarious editors listed on the {website}[AsciiDoc website].\n\nLimitations\n~~~~~~~~~~~\nThe current implementation does a reasonable job but on occasions gets\nthings wrong:\n\n- Nested quoted text formatting is highlighted according to the outer\n  format.\n- If a closing Example Block delimiter is sometimes mistaken for a\n  title underline. A workaround is to insert a blank line before the\n  closing delimiter.\n- Lines within a paragraph starting with equals characters may be\n  highlighted as single-line titles.\n- Lines within a paragraph beginning with a period may be highlighted\n  as block titles.\n\n\n[[X74]]\n[appendix]\nAttribute Options\n-----------------\nHere is the list of predefined <<X75,attribute list options>>:\n\n\n[cols=\"2e,2,2,5\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|Option|Backends|AsciiDoc Elements|Description\n\n|autowidth |xhtml11, html5, html4 |table|\nThe column widths are determined by the browser, not the AsciiDoc\n'cols' attribute. If there is no 'width' attribute the table width is\nalso left up to the browser.\n\n|unbreakable |xhtml11, html5 |block elements|\n'unbreakable' attempts to keep the block element together on a single\nprinted page c.f. the 'breakable' and 'unbreakable' docbook (XSL/FO)\noptions below.\n\n|breakable, unbreakable |docbook (XSL/FO) |table, example, block image|\nThe 'breakable' options allows block elements to break across page\nboundaries; 'unbreakable' attempts to keep the block element together\non a single page. If neither option is specified the default XSL\nstylesheet behavior prevails.\n\n|compact |docbook, xhtml11, html5 |bulleted list, numbered list|\nMinimizes vertical space in the list\n\n|footer |docbook, xhtml11, html5, html4 |table|\nThe last row of the table is rendered as a footer.\n\n|header |docbook, xhtml11, html5, html4 |table|\nThe first row of the table is rendered as a header.\n\n|pgwide |docbook (XSL/FO) |table, block image, horizontal labeled list|\nSpecifies that the element should be rendered across the full text\nwidth of the page irrespective of the current indentation.\n\n|strong |xhtml11, html5, html4 |labeled lists|\nEmboldens label text.\n|====================================================================\n\n\n[[X82]]\n[appendix]\nDiagnostics\n-----------\nThe `asciidoc(1)` `--verbose` command-line option prints additional\ninformation to stderr: files processed, filters processed, warnings,\nsystem attribute evaluation.\n\nA special attribute named 'trace' enables the output of\nelement-by-element diagnostic messages detailing output markup\ngeneration to stderr.  The 'trace' attribute can be set on the\ncommand-line or from within the document using <<X18,Attribute\nEntries>> (the latter allows tracing to be confined to specific\nportions of the document).\n\n- Trace messages print the source file name and line number and the\n  trace name followed by related markup.\n- 'trace names' are normally the names of AsciiDoc elements (see the\n  list below).\n- The trace message is only printed if the 'trace' attribute value\n  matches the start of a 'trace name'. The 'trace' attribute value can\n  be any Python regular expression.  If a trace value is not specified\n  all trace messages will be printed (this can result in large amounts\n  of output if applied to the whole document).\n\n- In the case of inline substitutions:\n  * The text before and after the substitution is printed; the before\n    text is preceded by a line containing `<<<` and the after text by\n    a line containing `>>>`.\n  * The 'subs' trace value is an alias for all inline substitutions.\n\n.Trace names\n.....................................................................\n<blockname> block close\n<blockname> block open\n<subs>\ndropped line (a line containing an undefined attribute reference).\nfloating title\nfooter\nheader\nlist close\nlist entry close\nlist entry open\nlist item close\nlist item open\nlist label close\nlist label open\nlist open\nmacro block (a block macro)\nname (man page NAME section)\nparagraph\npreamble close\npreamble open\npush blockname\npop blockname\nsection close\nsection open: level <level>\nsubs (all inline substitutions)\ntable\n.....................................................................\n\nWhere:\n\n- `<level>` is section level number '0...4'.\n- `<blockname>` is a delimited block name: 'comment', 'sidebar',\n  'open', 'pass', 'listing', 'literal', 'quote', 'example'.\n- `<subs>` is an inline substitution type:\n  'specialcharacters','quotes','specialwords', 'replacements',\n  'attributes','macros','callouts', 'replacements2', 'replacements3'.\n\nCommand-line examples:\n\n. Trace the entire document.\n\n  $ asciidoc -a trace mydoc.txt\n\n. Trace messages whose names start with `quotes` or `macros`:\n\n  $ asciidoc -a 'trace=quotes|macros'  mydoc.txt\n\n. Print the first line of each trace message:\n\n  $ asciidoc -a trace mydoc.txt 2>&1 | grep ^TRACE:\n\nAttribute Entry examples:\n\n. Begin printing all trace messages:\n\n  :trace:\n\n. Print only matched trace messages:\n\n  :trace: quotes|macros\n\n. Turn trace messages off:\n\n  :trace!:\n\n\n[[X88]]\n[appendix]\nBackend Attributes\n------------------\nThis table contains a list of optional attributes that influence the\ngenerated outputs.\n\n[cols=\"1e,1,5a\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|Name |Backends |Description\n\n|badges |xhtml11, html5 |\nLink badges ('XHTML 1.1' and 'CSS') in document footers. By default\nbadges are omitted ('badges' is undefined).\n\nNOTE: The path names of images, icons and scripts are relative path\nnames to the output document not the source document.\n\n|data-uri |xhtml11, html5 |\nEmbed images using the <<X66,data: uri scheme>>.\n\n|css-signature |html5, xhtml11 |\nSet a 'CSS signature' for the document (sets the 'id' attribute of the\nHTML 'body' element). CSS signatures provide a mechanism that allows\nusers to personalize the document appearance. The term 'CSS signature'\nwas http://archivist.incutio.com/viewlist/css-discuss/13291[coined by\nEric Meyer].\n\n\n|disable-javascript |xhtml11, html5 |\nIf the `disable-javascript` attribute is defined the `asciidoc.js`\nJavaScript is not embedded or linked to the output document.  By\ndefault AsciiDoc automatically embeds or links the `asciidoc.js`\nJavaScript to the output document. The script dynamically generates\n<<X91,table of contents>> and <<X92,footnotes>>.\n\n|[[X97]] docinfo, docinfo1, docinfo2 |All backends |\nThese three attributes control which <<X87,document information\nfiles>> will be included in the the header of the output file:\n\ndocinfo:: Include `<filename>-docinfo.<ext>`\ndocinfo1:: Include `docinfo.<ext>`\ndocinfo2:: Include `docinfo.<ext>` and `<filename>-docinfo.<ext>`\n\nWhere `<filename>` is the file name (sans extension) of the AsciiDoc\ninput file and `<ext>` is `.html` for HTML outputs or `.xml` for\nDocBook outputs. If the input file is the standard input then the\noutput file name is used. The following example will include the\n`mydoc-docinfo.xml` docinfo file in the DocBook `mydoc.xml` output\nfile:\n\n  $ asciidoc -a docinfo -b docbook mydoc.txt\n\nThis next example will include `docinfo.html` and `mydoc-docinfo.html`\ndocinfo files in the HTML output file:\n\n  $ asciidoc -a docinfo2 -b html4 mydoc.txt\n\n\n|[[X54]]encoding |html4, html5, xhtml11, docbook |\nSet the input and output document character set encoding. For example\nthe `--attribute encoding=ISO-8859-1` command-line option will set the\ncharacter set encoding to `ISO-8859-1`.\n\n- The default encoding is UTF-8.\n- This attribute specifies the character set in the output document.\n- The encoding name must correspond to a Python codec name or alias.\n- The 'encoding' attribute can be set using an AttributeEntry inside\n  the document header. For example:\n\n  :encoding: ISO-8859-1\n\n|[[X45]]icons |xhtml11, html5 |\nLink admonition paragraph and admonition block icon images and badge\nimages. By default 'icons' is undefined and text is used in place of\nicon images.\n\n|[[X44]]iconsdir |html4, html5, xhtml11, docbook |\nThe name of the directory containing linked admonition icons,\nnavigation icons and the `callouts` sub-directory (the `callouts`\nsub-directory contains <<X105,callout>> number images). 'iconsdir'\ndefaults to `./images/icons`.\n\n|imagesdir |html4, html5, xhtml11, docbook |\nIf this attribute is defined it is prepended to the target image file\nname paths in inline and block image macros.\n\n|keywords, description, title |html4, html5, xhtml11 |\nThe 'keywords' and 'description' attributes set the correspondingly\nnamed HTML meta tag contents; the 'title' attribute sets the HTML\ntitle tag contents.  Their principle use is for SEO (Search Engine\nOptimisation).  All three are optional, but if they are used they must\nappear in the document header (or on the command-line). If 'title' is\nnot specified the AsciiDoc document title is used.\n\n|linkcss |html5, xhtml11 |\nLink CSS stylesheets and JavaScripts. By default 'linkcss' is\nundefined in which case stylesheets and scripts are automatically\nembedded in the output document.\n\n|[[X103]]max-width |html5, xhtml11 |\nSet the document maximum display width (sets the 'body' element CSS\n'max-width' property).\n\n|numbered |html4, html5, xhtml11, docbook (XSL Stylesheets) |\nAdds section numbers to section titles. The 'docbook' backend ignores\n'numbered' attribute entries after the document header.\n\n|plaintext | All backends |\nIf this global attribute is defined all inline substitutions are\nsuppressed and block indents are retained.  This option is useful when\ndealing with large amounts of imported plain text.\n\n|quirks |xhtml11 |\nInclude the `xhtml11-quirks.conf` configuration file and\n`xhtml11-quirks.css` <<X35,stylesheet>> to work around IE6 browser\nincompatibilities. This feature is deprecated and its use is\ndiscouraged -- documents are still viewable in IE6 without it.\n\n|revremark |docbook |\nA short summary of changes in this document revision. Must be defined\nprior to the first document section. The document also needs to be\ndated to output this attribute.\n\n|scriptsdir |html5, xhtml11 |\nThe name of the directory containing linked JavaScripts.\nSee <<X35,HTML stylesheets and JavaScript locations>>.\n\n|sgml |docbook45 |\nThe `--backend=docbook45` command-line option produces DocBook 4.5\nXML.  You can produce the older DocBook SGML format using the\n`--attribute sgml` command-line option.\n\n|stylesdir |html5, xhtml11 |\nThe name of the directory containing linked or embedded\n<<X35,stylesheets>>.\nSee <<X35,HTML stylesheets and JavaScript locations>>.\n\n|stylesheet |html5, xhtml11 |\nThe file name of an optional additional CSS <<X35,stylesheet>>.\n\n|theme |html5, xhtml11 |\nUse alternative stylesheet (see <<X35,Stylesheets>>).\n\n|[[X91]]toc |html5, xhtml11, docbook (XSL Stylesheets) |\nAdds a table of contents to the start of an article or book document.\nThe `toc` attribute can be specified using the `--attribute toc`\ncommand-line option or a `:toc:` attribute entry in the document\nheader. The 'toc' attribute is defined by default when the 'docbook'\nbackend is used. To disable table of contents generation undefine the\n'toc' attribute by putting a `:toc!:` attribute entry in the document\nheader or from the command-line with an `--attribute toc!` option.\n\n*xhtml11 and html5 backends*\n\n- JavaScript needs to be enabled in your browser.\n- The following example generates a numbered table of contents using a\n  JavaScript embedded in the `mydoc.html` output document:\n\n  $ asciidoc -a toc -a numbered mydoc.txt\n\n|toc2 |html5, xhtml11 |\nAdds a scrollable table of contents in the left hand margin of an\narticle or book document. Use the 'max-width' attribute to change the\ncontent width. In all other respects behaves the same as the 'toc'\nattribute.\n\n|toc-placement |html5, xhtml11 |\nWhen set to 'auto' (the default value) asciidoc(1) will place the\ntable of contents in the document header. When 'toc-placement' is set\nto 'manual' the TOC can be positioned anywhere in the document by\nplacing the `toc::[]` block macro at the point you want the TOC to\nappear.\n\nNOTE: If you use 'toc-placement' then you also have to define the\n<<X91,toc>> attribute.\n\n|toc-title |html5, xhtml11 |\nSets the table of contents title (defaults to 'Table of Contents').\n\n|toclevels |html5, xhtml11 |\nSets the number of title levels (1..4) reported in the table of\ncontents (see the 'toc' attribute above). Defaults to 2 and must be\nused with the 'toc' attribute. Example usage:\n\n  $ asciidoc -a toc -a toclevels=3 doc/asciidoc.txt\n\n|====================================================================\n\n\n[appendix]\nLicense\n-------\nAsciiDoc is free software; you can redistribute it and/or modify it\nunder the terms of the 'GNU General Public License version 2' (GPLv2)\nas published by the Free Software Foundation.\n\nAsciiDoc is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nGeneral Public License version 2 for more details.\n\nAsciiDoc Highlighter sponsored by O'Reilly Media\n\nCopyright (C) 2002-2011 Stuart Rackham.\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/asl.dsl",
    "content": "/*\n * Intel ACPI Component Architecture\n * AML/ASL+ Disassembler version 20180105\n *\n * ASL example\n */\nDefinitionBlock (\"\", \"SSDT\", 1, \"PmRef\", \"Cpu0Ist\", 0x00003000)\n{\n    External (_PR_.CPU0, DeviceObj)\n    External (_SB_.CPUP, UnknownObj)\n\n    Scope (\\_PR.CPU0)\n    {\n        Method (_PCT, 0, NotSerialized)  // _PCT: Performance Control\n        {\n            If (((CFGD & One) && (PDC0 & One)))\n            {\n                Return (Package (0x02)\n                {\n                    ResourceTemplate ()\n                    {\n                        Register (FFixedHW, \n                            0x00,               // Bit Width\n                            0x00,               // Bit Offset\n                            0x0000000000000000, // Address\n                            ,)\n                    }, \n\n                    ResourceTemplate ()\n                    {\n                        Register (FFixedHW, \n                            0x00,               // Bit Width\n                            0x00,               // Bit Offset\n                            0x0000000000000000, // Address\n                            ,)\n                    }\n                })\n            }\n\n            Return (Package (0x02)\n            {\n                ResourceTemplate ()\n                {\n                    Register (SystemIO, \n                        0x10,               // Bit Width\n                        0x00,               // Bit Offset\n                        0x0000000000001000, // Address\n                        ,)\n                }, \n\n                ResourceTemplate ()\n                {\n                    Register (SystemIO, \n                        0x08,               // Bit Width\n                        0x00,               // Bit Offset\n                        0x00000000000000B3, // Address\n                        ,)\n                }\n            })\n        }\n\n        Name (PSDF, Zero)\n        Method (_PSD, 0, NotSerialized)  // _PSD: Power State Dependencies\n        {\n            If (!PSDF)\n            {\n                DerefOf (HPSD [Zero]) [0x04] = TCNT /* External reference */\n                DerefOf (SPSD [Zero]) [0x04] = TCNT /* External reference */\n                PSDF = Ones\n            }\n\n            If ((PDC0 & 0x0800))\n            {\n                Return (HPSD) /* \\_PR_.CPU0.HPSD */\n            }\n\n            Return (SPSD) /* \\_PR_.CPU0.SPSD */\n        }\n    }\n}\n\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/assembly_x86.asm",
    "content": "section\t.text\n    global main         ;must be declared for using gcc\n\nmain:\t                ;tell linker entry point\n\n\tmov\tedx, len\t    ;message length\n\tmov\tecx, msg\t    ;message to write\n\tmov\tebx, 1\t        ;file descriptor (stdout)\n\tmov\teax, 4\t        ;system call number (sys_write)\n\tint\t0x80\t        ;call kernel\n\n\tmov\teax, 1\t        ;system call number (sys_exit)\n\tint\t0x80\t        ;call kernel\n\nsection\t.data\n\nmsg\tdb\t'Hello, world!',0xa\t;our dear string\nlen\tequ\t$ - msg\t\t\t;length of our dear string\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/autohotkey.ahk",
    "content": "#NoEnv\nSetBatchLines -1\n\nCoordMode Mouse, Screen\nOnExit GuiClose\n\nzoom := 9\n\ncomputeSize(){\n\tglobal as_x\n\tas_x := Round(ws_x/zoom/2 - 0.5)\n\tif (zoom>1) {\n\t\tpix := Round(zoom)\n\t} ele {\n\t\tpix := 1\n\t}\n    ToolTip Message %as_x% %zoom% %ws_x% %hws_x% \n}\n\nhdc_frame := DllCall(\"GetDC\", UInt, MagnifierID)\n\n; comment\nDrawCross(byRef x=\"\", rX,rY,z, dc){\n        ;specify the style, thickness and color of the cross lines\n    h_pen := DllCall( \"gdi32.dll\\CreatePen\", Int, 0, Int, 1, UInt, 0x0000FF)\n}\n\n;Ctrl ^; Shift +; Win #; Alt !\n^NumPadAdd::\n^WheelUp::   \n^;::   ;comment\n    If(zoom < ws_x and ( A_ThisHotKey = \"^WheelUp\" or A_ThisHotKey =\"^NumPadAdd\") )\n\t\tzoom *= 1.189207115         ; sqrt(sqrt(2))\n\tGosub,setZoom\nreturn\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/batchfile.bat",
    "content": ":: batch file highlighting in Ace!\n@echo off\n\nCALL set var1=%cd%\necho unhide everything in %var1%!\n\n:: FOR loop in bat is super strange!\nFOR /f \"tokens=*\" %%G IN ('dir /A:D /b') DO (\necho %var1%%%G\nattrib -r -a -h -s \"%var1%%%G\" /D /S\n)\n\npause\n\nREM that's all\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/bro.bro",
    "content": "##! Add countries for the originator and responder of a connection\n##! to the connection logs.\n\nmodule Conn;\n\nexport {\n\tredef record Conn::Info += {\n\t\t## Country code for the originator of the connection based \n\t\t## on a GeoIP lookup.\n\t\torig_cc: string &optional &log;\n\t\t## Country code for the responser of the connection based \n\t\t## on a GeoIP lookup.\n\t\tresp_cc: string &optional &log;\n\t};\n}\n\nevent connection_state_remove(c: connection) \n\t{\n\tlocal orig_loc = lookup_location(c$id$orig_h);\n\tif ( orig_loc?$country_code )\n\t\tc$conn$orig_cc = orig_loc$country_code;\n\n\tlocal resp_loc = lookup_location(c$id$resp_h);\n\tif ( resp_loc?$country_code )\n\t\tc$conn$resp_cc = resp_loc$country_code;\n\t}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/c9search.c9search_results",
    "content": "Searching for \u0001var\u0001 in\u0001/.c9/metadata/workspace/plugins\u0001\u0001regexp, case sensitive, whole word\u0001\n\nconfigs/default.js:\n    1: var fs = require(\"fs\");\n\t2: var argv = require('optimist').argv;\n\t3: var path = require(\"path\");\n\t5: var clientExtensions = {};\n\t6: var clientDirs = fs.readdirSync(__dirname + \"/../plugins-client\");\n\t7: for (var i = 0; i < clientDirs.length; i++) {\n\t8:     var dir = clientDirs[i];\n\t12:     var name = dir.split(\".\")[1];\n\t16: var projectDir = (argv.w && path.resolve(process.cwd(), argv.w)) || process.cwd();\n\t17: var fsUrl = \"/workspace\";\n\t19: var port = argv.p || process.env.PORT || 3131;\n\t20: var host = argv.l || \"localhost\";\n\t22: var config = {\n\nconfigs/local.js:\n\t2: var config = require(\"./default\");\n\nconfigs/packed.js:\n\t1: var config = require(\"./default\");\n\n\nFound 15 matches in 3 files"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/c_cpp.cpp",
    "content": "// compound assignment operators\n\n#include <iostream>\n\n#include \\\n   <iostream>\n\n#include \\\n   \\\n   <iostream>\n\n#include \\\n   \\\n   \"iostream\"\n\n#include <boost/asio/io_service.hpp>\n#include \"boost/asio/io_service.hpp\"\n\n#include \\\n   \\\n   \"iostream\" \\\n   \"string\" \\\n   <vector>\n   \nusing namespace std;\n\n//\nint main ()\n{\n    int a, b=3; /* foobar */\n    a = b; // single line comment\\\n        continued\n    a+=2; // equivalent to a=a+2\n    cout << a;\n    #if VERBOSE >= 2\n        prints(\"trace message\\n\");\n    #endif\n    return 0;\n}\n\n/* Print an error message and get out */\n#define ABORT                             \\\n    do {                                  \\\n        print( \"Abort\\n\" );                \\\n        exit(8);                          \\\n} while (0)                      /* Note: No semicolon */"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/cirru.cirru",
    "content": "-- https://github.com/Cirru/cirru-gopher/blob/master/code/scope.cr,\n\nset a (int 2)\n\nprint (self)\n\nset c (child)\n\nunder c\n  under parent\n    print a\n\nprint $ get c a\n\nset c x (int 3)\nprint $ get c x\n\nset just-print $ code\n  print a\n\nprint just-print\n\neval (self) just-print\neval just-print\n\nprint (string \"string with space\")\nprint (string \"escapes \\n \\\"\\\\\")\n\nbrackets ((((()))))\n\n\"eval\" $ string \"eval\"\n\nprint (add $ (int 1) (int 2))\n\nprint $ unwrap $\n  map (a $ int 1) (b $ int 2)\n\nprint a\n  int 1\n  , b c\n  int 2\n  , d"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/clojure.clj",
    "content": "(defn parting\n  \"returns a String parting in a given language\"\n  ([] (parting \"World\"))\n  ([name] (parting name \"en\"))\n  ([name language]\n    ; condp is similar to a case statement in other languages.\n    ; It is described in more detail later.\n    ; It is used here to take different actions based on whether the\n    ; parameter \"language\" is set to \"en\", \"es\" or something else.\n    (condp = language\n      \"en\" (str \"Goodbye, \" name)\n      \"es\" (str \"Adios, \" name)\n      (throw (IllegalArgumentException.\n        (str \"unsupported language \" language))))))\n\n(println (parting)) ; -> Goodbye, World\n(println (parting \"Mark\")) ; -> Goodbye, Mark\n(println (parting \"Mark\" \"es\")) ; -> Adios, Mark\n(println (parting \"Mark\", \"xy\")) ; -> java.lang.IllegalArgumentException: unsupported language xy"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/cobol.CBL",
    "content": "TODO"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/coffee.coffee",
    "content": "#!/usr/bin/env coffee\n\ntry\n    throw URIError decodeURI(0xC0ffee * 123456.7e-8 / .9)\ncatch e\n    console.log 'qstring' + \"qqstring\" + '''\n        qdoc\n    ''' + \"\"\"\n        qqdoc\n    \"\"\"\n\ndo ->\n    ###\n    herecomment\n    ###\n    re = /regex/imgy.test ///\n        heregex  # comment\n    ///imgy\n    this isnt: `just JavaScript`\n    undefined\n    \nsentence = \"#{ 22 / 7 } is a decent approximation of π\""
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/coldfusion.cfm",
    "content": "<!--- hello world --->\n\n<cfset welcome=\"Hello World!\">\n\n<cfoutput>#welcome#</cfoutput>"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/csharp.cs",
    "content": "public void HelloWorld() {\n    //Say Hello!\n    Console.WriteLine(\"Hello World\");\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/csound_document.csd",
    "content": "text\n<CsoundSynthesizer>\n<CsInstruments>\n0dbfs = 1\nprints \"hello, world\\n\"\n</CsInstruments>\n<CsScore>\ni 1 0 0\n</CsScore>\n<html>\n<!DOCTYPE html>\n</html>\n</CsoundSynthesizer>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/csound_orchestra.orc",
    "content": "/*\n * comment\n */\n; comment\n// comment\n\ninstr/**/1,/**/N_a_M_e_,/**/+Name/**///\n  iDuration = p3\n  outc:a(aSignal)\nendin\n\nopcode/**/aUDO,/**/i[],/**/aik//\n  aUDO\nendop\n\n123 0123456789\n0xabcdef0123456789 0XABCDEF\n1e2 3e+4 5e-6 7E8 9E+0 1E-2 3. 4.56 .789\n\n\"characters$MACRO.\"\n\"\\\\\\a\\b\\n\\r\\t\\012\\345\\67\\\"\"\n\n{{\ncharacters$MACRO.\n}}\n{{\\\\\\a\\b\\n\\r\\t\\\"\\012\\345\\67}}\n\n+ - ~ ¬ ! * / ^ % << >> < > <= >= == != & # | && || ? : += -= *= /=\n\n0dbfs A4 kr ksmps nchnls nchnls_i sr\n\ndo else elseif endif enduntil fi if ithen kthen od then until while\nreturn rireturn\n\naLabel:\n label2:\n\ngoto aLabel\nreinit aLabel\ncggoto 1==0, aLabel\ntimout 0, 0, aLabel\nloop_ge 0, 0, 0, aLabel\n\nreadscore {{\ni 1 0 0\n}}\npyrun {{\n# Python\n}}\nlua_exec {{\n-- Lua\n}}\n\n#include/**/\"file.udo\"\n#include/**/|file.udo|\n\n#ifdef MACRO\n#else\n#ifndef MACRO\n#endif\n#undef MACRO\n\n#   define MACRO#macro_body#\n#define/**/\nMACRO/**/\n#\\#macro\nbody\\##\n\n#define MACRO(ARG1#ARG2) #macro_body#\n#define/**/\nMACRO(ARG1'ARG2'ARG3)/**/\n#\\#macro\nbody\\##\n\n$MACRO $MACRO.\n$MACRO(x)\n@0\n@@ 1\n$MACRO.(((x#y\\)))' \"(#'x)\\)x\\))\"# {{x\\))x)\\)(#'}});\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/csound_score.sco",
    "content": "/*\n * comment\n */\n; comment\n// comment\na b C d e f i q s t v x y\nz\nnp0 nP1 Np2 NP3\nm/**/label;\nn label\n123 0123456789\n0xabcdef0123456789 0XABCDEF\n1e2 3e+4 5e-6 7E8 9E+0 1E-2 3. 4.56 .789\n\"characters$MACRO.\"\n{ 1 I\n  { 2 J\n    { 3 K\n      $I $J $K\n    }\n  }\n}\n#include \"score.sco\"\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/css.css",
    "content": ".text-layer {\n    font: 12px Monaco, \"Courier New\", monospace;\n    font-size: 3vmin;\n    cursor: text;\n}\n\n.blinker {\n    animation: blink 1s linear infinite alternate;\n}\n\n@keyframes blink {\n    0%, 40% {\n        opacity: 0; /*\n        */\n        opacity: 1\n    }\n\n    40.5%, 100% {\n        opacity: 1\n    }\n}\n\n@document url(http://c9.io/), url-prefix(http://ace.c9.io/build/),\n   domain(c9.io), regexp(\"https:.*\") /**/\n{\n    /**/\n    img[title]:before \n    {\n        content: attr(title) \"\\AImage \\\n            retrieved from\"\n            attr(src); /*\n            */\n        white-space: pre;\n        display: block;\n        background: url(asdasd); \"err\n    }\n}\n\n@viewport {\n    min-zoom: 1;\n    max-zoom: 200%;\n    user-zoom: fixed;\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/curly.curly",
    "content": "<html>\n    <head>\n\n    <style type=\"text/css\">\n        .text-layer {\n            font-family: Monaco, \"Courier New\", monospace;\n            font-size: 12px;\n            cursor: text;\n        }\n    </style>\n\n    </head>\n    <body>\n        <h1 style=\"color:red\">{{author_name}}</h1>\n    </body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/d.d",
    "content": "#!/usr/bin/env rdmd\n// Computes average line length for standard input.\nimport std.stdio;\n\nvoid main() {\n    ulong lines = 0;\n    double sumLength = 0;\n    foreach (line; stdin.byLine()) {\n        ++lines;\n        sumLength += line.length;\n    }\n    writeln(\"Average line length: \",\n        lines ? sumLength / lines : 0);\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/dart.dart",
    "content": "// Go ahead and modify this example.\n\nimport \"dart:html\";\n\n// Computes the nth Fibonacci number.\nint fibonacci(int n) {\n  if (n < 2) return n;\n  return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\n// Displays a Fibonacci number.\nvoid main() {\n  int i = 20;\n  String message = \"fibonacci($i) = ${fibonacci(i)}\";\n\n  // This example uses HTML to display the result and it will appear\n  // in a nested HTML frame (an iframe).\n  document.body.append(new HeadingElement.h1()..appendText(message));\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/diff.diff",
    "content": "diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js\r\nindex 23fc3fc..ed3b273 100644\r\n--- a/lib/ace/edit_session.js\r\n+++ b/lib/ace/edit_session.js\r\n@@ -51,6 +51,7 @@ var TextMode = require(\"./mode/text\").Mode;\r\n var Range = require(\"./range\").Range;\r\n var Document = require(\"./document\").Document;\r\n var BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\r\n+var SearchHighlight = require(\"./search_highlight\").SearchHighlight;\r\n \r\n /**\r\n  * class EditSession\r\n@@ -307,6 +308,13 @@ var EditSession = function(text, mode) {\r\n         return token;\r\n     };\r\n \r\n+    this.highlight = function(re) {\r\n+        if (!this.$searchHighlight) {\r\n+            var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\r\n+            this.$searchHighlight = this.addDynamicMarker(highlight);\r\n+        }\r\n+        this.$searchHighlight.setRegexp(re);\r\n+    }\r\n     /**\r\n     * EditSession.setUndoManager(undoManager)\r\n     * - undoManager (UndoManager): The new undo manager\r\n@@ -556,7 +564,8 @@ var EditSession = function(text, mode) {\r\n             type : type || \"line\",\r\n             renderer: typeof type == \"function\" ? type : null,\r\n             clazz : clazz,\r\n-            inFront: !!inFront\r\n+            inFront: !!inFront,\r\n+            id: id\r\n         }\r\n \r\n         if (inFront) {\r\ndiff --git a/lib/ace/editor.js b/lib/ace/editor.js\r\nindex 834e603..b27ec73 100644\r\n--- a/lib/ace/editor.js\r\n+++ b/lib/ace/editor.js\r\n@@ -494,7 +494,7 @@ var Editor = function(renderer, session) {\r\n      * Emitted when a selection has changed.\r\n      **/\r\n     this.onSelectionChange = function(e) {\r\n-        var session = this.getSession();\r\n+        var session = this.session;\r\n \r\n         if (session.$selectionMarker) {\r\n             session.removeMarker(session.$selectionMarker);\r\n@@ -509,12 +509,40 @@ var Editor = function(renderer, session) {\r\n             this.$updateHighlightActiveLine();\r\n         }\r\n \r\n-        var self = this;\r\n-        if (this.$highlightSelectedWord && !this.$wordHighlightTimer)\r\n-            this.$wordHighlightTimer = setTimeout(function() {\r\n-                self.session.$mode.highlightSelection(self);\r\n-                self.$wordHighlightTimer = null;\r\n-            }, 30, this);\r\n+        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp()\r\n     };\r\ndiff --git a/lib/ace/search_highlight.js b/lib/ace/search_highlight.js\r\nnew file mode 100644\r\nindex 0000000..b2df779\r\n--- /dev/null\r\n+++ b/lib/ace/search_highlight.js\r\n@@ -0,0 +1,3 @@\r\n+new\r\n+empty file"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/dot.dot",
    "content": "// Original source: http://www.graphviz.org/content/lion_share\n##\"A few people in the field of genetics are using dot to draw \"marriage node diagram\"  pedigree drawings.  Here is one I have done of a test pedigree from the FTREE pedigree drawing package (Lion Share was a racehorse).\" Contributed by David Duffy.\n\n##Command to get the layout: \"dot -Tpng thisfile > thisfile.png\"\n\ndigraph Ped_Lion_Share           {\n# page = \"8.2677165,11.692913\" ;\nratio = \"auto\" ;\nmincross = 2.0 ;\nlabel = \"Pedigree Lion_Share\" ;\n\n\"001\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"002\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"003\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"004\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"005\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"006\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"007\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"009\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"014\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"015\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"016\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"ZZ01\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"ZZ02\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"017\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"012\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"008\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"011\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"013\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"010\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"023\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"020\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"021\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"018\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"025\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"019\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"022\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"024\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"027\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"026\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"028\" [shape=box     , regular=1,style=filled,fillcolor=grey    ] ;\n\"marr0001\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"001\" -> \"marr0001\" [dir=none,weight=1] ;\n\"007\" -> \"marr0001\" [dir=none,weight=1] ;\n\"marr0001\" -> \"017\" [dir=none, weight=2] ;\n\"marr0002\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"001\" -> \"marr0002\" [dir=none,weight=1] ;\n\"ZZ02\" -> \"marr0002\" [dir=none,weight=1] ;\n\"marr0002\" -> \"012\" [dir=none, weight=2] ;\n\"marr0003\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"002\" -> \"marr0003\" [dir=none,weight=1] ;\n\"003\" -> \"marr0003\" [dir=none,weight=1] ;\n\"marr0003\" -> \"008\" [dir=none, weight=2] ;\n\"marr0004\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"002\" -> \"marr0004\" [dir=none,weight=1] ;\n\"006\" -> \"marr0004\" [dir=none,weight=1] ;\n\"marr0004\" -> \"011\" [dir=none, weight=2] ;\n\"marr0005\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"002\" -> \"marr0005\" [dir=none,weight=1] ;\n\"ZZ01\" -> \"marr0005\" [dir=none,weight=1] ;\n\"marr0005\" -> \"013\" [dir=none, weight=2] ;\n\"marr0006\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"004\" -> \"marr0006\" [dir=none,weight=1] ;\n\"009\" -> \"marr0006\" [dir=none,weight=1] ;\n\"marr0006\" -> \"010\" [dir=none, weight=2] ;\n\"marr0007\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"005\" -> \"marr0007\" [dir=none,weight=1] ;\n\"015\" -> \"marr0007\" [dir=none,weight=1] ;\n\"marr0007\" -> \"023\" [dir=none, weight=2] ;\n\"marr0008\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"005\" -> \"marr0008\" [dir=none,weight=1] ;\n\"016\" -> \"marr0008\" [dir=none,weight=1] ;\n\"marr0008\" -> \"020\" [dir=none, weight=2] ;\n\"marr0009\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"005\" -> \"marr0009\" [dir=none,weight=1] ;\n\"012\" -> \"marr0009\" [dir=none,weight=1] ;\n\"marr0009\" -> \"021\" [dir=none, weight=2] ;\n\"marr0010\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"008\" -> \"marr0010\" [dir=none,weight=1] ;\n\"017\" -> \"marr0010\" [dir=none,weight=1] ;\n\"marr0010\" -> \"018\" [dir=none, weight=2] ;\n\"marr0011\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"011\" -> \"marr0011\" [dir=none,weight=1] ;\n\"023\" -> \"marr0011\" [dir=none,weight=1] ;\n\"marr0011\" -> \"025\" [dir=none, weight=2] ;\n\"marr0012\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"013\" -> \"marr0012\" [dir=none,weight=1] ;\n\"014\" -> \"marr0012\" [dir=none,weight=1] ;\n\"marr0012\" -> \"019\" [dir=none, weight=2] ;\n\"marr0013\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"010\" -> \"marr0013\" [dir=none,weight=1] ;\n\"021\" -> \"marr0013\" [dir=none,weight=1] ;\n\"marr0013\" -> \"022\" [dir=none, weight=2] ;\n\"marr0014\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"019\" -> \"marr0014\" [dir=none,weight=1] ;\n\"020\" -> \"marr0014\" [dir=none,weight=1] ;\n\"marr0014\" -> \"024\" [dir=none, weight=2] ;\n\"marr0015\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"022\" -> \"marr0015\" [dir=none,weight=1] ;\n\"025\" -> \"marr0015\" [dir=none,weight=1] ;\n\"marr0015\" -> \"027\" [dir=none, weight=2] ;\n\"marr0016\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"024\" -> \"marr0016\" [dir=none,weight=1] ;\n\"018\" -> \"marr0016\" [dir=none,weight=1] ;\n\"marr0016\" -> \"026\" [dir=none, weight=2] ;\n\"marr0017\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"026\" -> \"marr0017\" [dir=none,weight=1] ;\n\"027\" -> \"marr0017\" [dir=none,weight=1] ;\n\"marr0017\" -> \"028\" [dir=none, weight=2] ;\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/drools.drl",
    "content": "/*\n * Copyright 2010 JBoss Inc\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n Original source\n https://github.com/droolsjbpm/drools/blob/master/drools-examples/\n http://docs.jboss.org/drools/\n*/\npackage com.example.ace\n\nimport java.math.BigDecimal\nimport function my.package.Foo.hello\n\ndeclare FactType\n  @author( Bob )\n  id : String\n  name : String @maxLength(100) @notnull\n\n  value : BigDecimal\nend\n\ndeclare FactType2 extends AnotherType\nend\n\ndeclare trait TraitType extends com.package.AnotherType\nend\n\n\ndeclare trait GoldenCustomer\n    balance : long @Alias( \"org.acme.foo.accountBalance\" )\nend\n\nglobal org.slf4j.Logger logger\n\n/**\n * @param name who we'll salute?\n */\nfunction String hello(String name) {\n    return \"Hello \"+name+\"!\";\n}\n\nrule \"Trim all strings\"\n  dialect \"java\"\n  no-loop\nwhen // fdsfds\n  $s : String(a == null || == \"empty\", $g : size)\n  Cheese( name matches \"(Buffalo)?\\\\S*Mozarella\" )\n    CheeseCounter( cheeses contains $var ) // contains with a variable\n    CheeseCounter( cheese memberof $matureCheeses )\n    Cheese( name soundslike 'foobar' )\n    Message( routingValue str[startsWith] \"R1\" )\n    Cheese( name in ( \"stilton\", \"cheddar\", $cheese ) )\n    Person( eval( age == girlAge + 2 ), sex = 'M' )\nthen\n  /**\n   * TODO There mus be better way\n   */\n  retract($s);\n  String a = \"fd\";\n  a.toString();\n\n  insert($s.trim());\nend\n\nquery isContainedIn( String x, String y )\n  Location( x, y; )\n  or\n  ( Location( z, y; ) and isContainedIn( x, z; ) )\nend\n\nrule \"go\" salience 10\nwhen\n    $s : String(  )\nthen\n    System.out.println( $s );\nend\n\nrule \"When all English buses are not red\"\nwhen\n    not(forall( $bus : Bus( nationality == 'english')\n                Bus( this == $bus, color = 'red' ) ))\nthen\n    // What if all english buses are not red?\nend\n\nrule \"go1\"\nwhen\n    String( this == \"go1\" )\n    isContainedIn(\"Office\", \"House\"; )\nthen\n    System.out.println( \"office is in the house\" );\nend\n\nrule \"go2\"\nwhen\n    String( this == \"go2\" )\n    isContainedIn(\"Draw\", \"House\"; )\nthen\n    System.out.println( \"Draw in the House\" );\nend\n\n/**\n * Go Right\n */\nrule GoRight dialect \"mvel\"  salience (Math.abs( $df.colDiff ))  when\n    $df   : DirectionDiff(colDiff > 0 )\n    $target : Cell(  row == $df.row, col == ($df.col + 1) )\n    CellContents( cell == $target, cellType != CellType.WALL )\n    not Direction(character == $df.fromChar, horizontal == Direction.RIGHT )\nthen\n    System.out.println( \"monster right\" );\n    retract( $df );\n    insert( new Direction($df.fromChar, Direction.RIGHT, Direction.NONE ) );\nend\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/edifact.edi",
    "content": "UNB+UNOA:1+005435656:1+006415160:1+060515:1434+00000000000778'\nUNH+00000000000117+INVnrOIC:D:97B:UN'\nBGM+380+342459+9'\nDTM+3:20060515:102'\nRFF+ON:521052'\nNAD+BY+792820524::16++CUMMINS MID-RANGE ENGINE PLANT'\nNAD+SE+005435656::16++GENERAL WIDGET COMPANY'\nCUX+1:USD'\nLIN+1++157870:IN'\nIMD+F++:::WIDGET'\nQTY+47:1020:EA'\nALI+US'\nMOA+203:1202.58'\nPRI+INV:1.179'\nLIN+2++157871:IN'\nIMD+F++:::DIFFERENT WIDGET'\nQTY+47:20:EA'\nALI+JP'\nMOA+203:410'\nPRI+INV:20.5'\nUNS+S'\nMOA+39:2137.58'\nALC+C+ABG'\nMOA+8:525'\nUNT+23+00000000000117'\nUNZ+1+00000000000778'"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/eiffel.e",
    "content": "note\n\tdescription: \"Represents a person.\"\n\nclass\n\tPERSON\n\ncreate\n\tmake, make_unknown\n\nfeature {NONE} -- Creation\n\n\tmake (a_name: like name)\n\t\t\t-- Create a person with `a_name' as `name'.\n\t\tdo\n\t\t\tname := a_name\n\t\tensure\n\t\t\tname = a_name\n\t\tend\n\n\tmake_unknown\n\t\tdo ensure\n\t\t\tname = Void\n\t\tend\n\nfeature -- Access\n\n\tname: detachable STRING\n\t\t\t-- Full name or Void if unknown.\n\nend"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/ejs.ejs",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>Cloud9 Rocks!</title>\n    </head>\n    <body>\n\n    <table class=\"table\">\n        <tr>\n            <th>Name</th>\n            <th>Size</th>\n        </tr>\n        <% if (!isRoot) { %>\n            <tr>\n                <td><a href=\"..\">..</a></td>\n                <td></td></td>\n            </tr>\n        <% } %>\n        <% entries.forEach(function(entry) { %>\n            <tr>\n                <td>\n                    <span class=\"glyphicon <%= entry.mime == 'directory' ? 'folder': 'file'%>\"></span>\n                    <a href=\"<%= entry.name %>\"><%= entry.name %></a>\n                </td>\n                <td><%= entry.size %></td>\n            </tr>\n        <% }) %>\n    </table>\n    \n    </body>\n</html>"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/elixir.ex",
    "content": "defmodule HelloModule do\n  @moduledoc \"\"\"\n    This is supposed to be `markdown`.\n    __Yes__ this is [mark](http://down.format)\n\n    # Truly\n\n    ## marked\n\n    * with lists\n    * more\n    * and more\n\n        Even.with(code)\n        blocks |> with |> samples\n\n    _Docs are first class citizens in Elixir_ (Jose Valim)\n  \"\"\"\n  \n  # A \"Hello world\" function\n  def some_fun do\n    IO.puts \"Juhu Kinners!\"\n  end\n  # A private function\n  defp priv do\n    is_regex ~r\"\"\"\n       This is a regex\n       spanning several\n       lines.\n    \"\"\"\n    x = elem({ :a, :b, :c }, 0)  #=> :a\n  end\nend\n\ntest_fun = fn(x) ->\n  cond do\n    x > 10 ->\n      :greater_than_ten\n    true ->\n      :maybe_ten\n  end\nend"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/elm.elm",
    "content": "{- Ace {- 4 -} Elm -}\nmain = lift clock (every second)\n\nclock t = collage 400 400 [ filled    lightGrey   (ngon 12 110)\n                          , outlined (solid grey) (ngon 12 110)\n                          , hand orange   100  t\n                          , hand charcoal 100 (t/60)\n                          , hand charcoal 60  (t/720) ]\n\nhand clr len time =\n  let angle = degrees (90 - 6 * inSeconds time)\n  in  traced (solid clr) <| segment (0,0) (len * cos angle, len * sin angle)"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/erlang.erl",
    "content": "  %% A process whose only job is to keep a counter.\n  %% First version\n  -module(counter).\n  -export([start/0, codeswitch/1]).\n \n  start() -> loop(0).\n \n  loop(Sum) ->\n    receive\n       {increment, Count} ->\n          loop(Sum+Count);\n       {counter, Pid} ->\n          Pid ! {counter, Sum},\n          loop(Sum);\n       code_switch ->\n          ?MODULE:codeswitch(Sum)\n          % Force the use of 'codeswitch/1' from the latest MODULE version\n    end.\n \n  codeswitch(Sum) -> loop(Sum)."
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/forth.frt",
    "content": ": HELLO  ( -- )  CR .\" Hello, world!\" ; \n\nHELLO <cr>\nHello, world!\n\n: [CHAR]   CHAR  POSTPONE LITERAL ; IMMEDIATE\n\n0 value ii        0 value jj\n0 value KeyAddr   0 value KeyLen\ncreate SArray   256 allot   \\ state array of 256 bytes\n: KeyArray      KeyLen mod   KeyAddr ;\n\n: get_byte      + c@ ;\n: set_byte      + c! ;\n: as_byte       255 and ;\n: reset_ij      0 TO ii   0 TO jj ;\n: i_update      1 +   as_byte TO ii ;\n: j_update      ii SArray get_byte +   as_byte TO jj ;\n: swap_s_ij\n    jj SArray get_byte\n       ii SArray get_byte  jj SArray set_byte\n    ii SArray set_byte\n;\n\n: rc4_init ( KeyAddr KeyLen -- )\n    256 min TO KeyLen   TO KeyAddr\n    256 0 DO   i i SArray set_byte   LOOP\n    reset_ij\n    BEGIN\n        ii KeyArray get_byte   jj +  j_update\n        swap_s_ij\n        ii 255 < WHILE\n        ii i_update\n    REPEAT\n    reset_ij\n;\n: rc4_byte\n    ii i_update   jj j_update\n    swap_s_ij\n    ii SArray get_byte   jj SArray get_byte +   as_byte SArray get_byte  xor\n;"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/fortran.f90",
    "content": "#include \"globalDefines.h\"\n\n!=========================================================\nprogram main\n!========================================================= \n    use params_module, only : nx, ny, nz\n\n    implicit none\n\n    integer, parameter :: g = 9.81\n    real, allocatable, dimension(:,:,:) :: array\n    integer :: a, b, c\n    real*8 :: x, y, z\n      \n    b = 5\n    c = 7\n\n#ifdef ARRAY_COMP\n    allocate(array(10,10,10), status=a)\n\n    write(c,'(i5.5)') b\n#endif\n\n    if(x.lt.5.0) then\n        array(:,:,:) = g\n    else\n        array(:,:,:) = x - y\n    endif\n\n    return\n!========================================================    \nend program main\n!========================================================\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/fsharp.fsi",
    "content": "(* fsharp (* example *) *)\nmodule Test =\n    let (*) x y = (x + y)\n    let func1 x = \n        if x < 100 then\n            x*x\n        else\n            x*x + 1\n    let list = (-1, 42) :: [ for i in 0 .. 99 -> (i, func1(i)) ]\n    let verbatim = @\"c:\\Program \"\" Files\\\"\n    let trippleQuote = \"\"\" \"hello world\" \"\"\"\n    \n    // print\n    printfn \"The table of squares from 0 to 99 is:\\n%A\" list"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/fsl.fsl",
    "content": "machine_name      : \"BGP\";\nmachine_version   : 1.0.0;\n\nmachine_author    : \"John Haugeland <stonecypher@gmail.com>\";\nmachine_license   : MIT;\n\ngraph_layout      : dot;\n\n\n\nIdle 'Invite' => Invited;\n\nInvited 'Invite, 1xx' -> Invited;\nInvited '3xx'         -> Redirecting;\nInvited 'Cancel'      -> Cancelling;\nInvited '200'         => Accepted;\nInvited '407'         => AuthRequested;\nInvited '4xx-6xx'     -> Failed;\n\nAuthRequested 'Ack' => Invited;\n\nRedirecting 'Act' -> Redirected;\n\nCancelling '200 (Invite)' -> LateCancel;\nCancelling '200 (Cancel)' -> Cancelled;\n\nAccepted 'Cancel' -> LateCancel;\nAccepted 'Ack'    => Established;\n\nFailed 'Ack' -> Terminated;\n\nRedirected 'Invite'  -> Invited;\nRedirected 'Timeout' -> Terminated;\n\nLateCancel 'Ack' -> Established;\n\nCancelled '487' -> Failed;\n\nEstablished 'Invite' => SessionModifying;\nEstablished 'Bye'    -> Closing;\n\nSessionModifying '488' -> SessionModificationRefused;\nSessionModifying '200' => SessionModified;\n\nClosing 'Bye,Ack,200 (Invite)' -> Closing;\nClosing '200 (Bye)'            -> Terminated;\n\nSessionModificationRefused 'Ack' -> Established;\n\nSessionModified 'Ack' => Established;\nSessionModified 'Bye' -> Closing;\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/ftl.ftl",
    "content": "<#ftl encoding=\"utf-8\" />\n<#setting locale=\"en_US\" />\n<#import \"library\" as lib />\n<#--\n    FreeMarker comment\n    ${abc} <#assign a=12 />\n-->\n\n<!DOCTYPE html>\n<html lang=\"en-us\">\n    <head>\n        <meta charset=\"utf-8\" />\n        \n        <title>${title!\"FreeMarker\"}<title>\n    </head>\n    \n    <body>\n    \n        <h1>Hello ${name!\"\"}</h1>\n        \n        <p>Today is: ${.now?date}</p>\n        \n        <#assign x = 13>\n        <#if x &gt; 12 && x lt 14>x equals 13: ${x}</#if>\n        \n        <ul>\n            <#list items as item>\n                <li>${item_index}: ${item.name!?split(\"\\n\")[0]}</li>\n            </#list>\n        </ul>\n        \n        User directive: <@lib.function attr1=true attr2='value' attr3=-42.12>Test</@lib.function>\n        <@anotherOne />\n        \n        <#if variable?exists>\n            Deprecated\n        <#elseif variable??>\n            Better\n        <#else>\n            Default\n        </#if>\n        \n        <img src=\"images/${user.id}.png\" />\n        \n    </body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/gcode.gcode",
    "content": "O003 (DIAMOND SQUARE)\nN2 G54 G90 G49 G80\nN3 M6 T1 (1.ENDMILL)\nN4 M3 S1800\nN5 G0 X-.6 Y2.050\nN6 G43  H1  Z.1\nN7 G1 Z-.3 F50.\nN8 G41 D1 Y1.45\nN9 G1 X0 F20.\nN10 G2 J-1.45\n(CUTTER COMP CANCEL)\nN11 G1 Z-.2 F50.\nN12 Y-.990\nN13 G40\nN14 G0 X-.6 Y1.590\nN15 G0 Z.1\nN16 M5 G49 G28 G91 Z0\nN17 CALL O9456\nN18 #500=0.004\nN19 #503=[#500+#501]\nN20 VC45=0.0006\nVS4=0.0007\nN21 G90 G10 L20 P3 X5.Y4. Z6.567\nN22 G0 X5000\nN23 IF [#1 LT 0.370] GOTO 49\nN24 X-0.678 Y+.990\nN25 G84.3 X-0.1\nN26 #4=#5*COS[45]\nN27 #4=#5*SIN[45]\nN28 VZOFZ=652.9658\n%"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/gherkin.feature",
    "content": "@these @_are_ @tags\nFeature: Serve coffee\n  Coffee should not be served until paid for\n  Coffee should not be served until the button has been pressed\n  If there is no coffee left then money should be refunded\n  \n  Scenario Outline: Eating\n    Given there are <start> cucumbers\n    When I eat <eat> cucumbers\n    Then I should have <left> cucumbers\n\n    Examples:\n      | start | eat | left |\n      |  12   |  5  |  7   |\n      |  @20  |  5  |  15  |    \n\n  Scenario: Buy last coffee\n    Given there are 1 coffees left in the machine\n    And I have deposited 1$ \n    When I press the coffee button\n    Then I should be served a \"coffee\"\n    \n  # this a comment\n  \n  \"\"\"\n  this is a \n  pystring\n  \"\"\""
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/glsl.glsl",
    "content": "uniform float amplitude;\nattribute float displacement;\nvarying vec3 vNormal;\n\nvoid main() {\n\n    vNormal = normal;\n  \n    // multiply our displacement by the\n    // amplitude. The amp will get animated\n    // so we'll have animated displacement\n    vec3 newPosition = position + \n                       normal * \n                       vec3(displacement *\n                            amplitude);\n\n    gl_Position = projectionMatrix *\n                  modelViewMatrix *\n                  vec4(newPosition,1.0);\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/gobstones.gbs",
    "content": "program {\n    /*\n     * A gobstons multiline comment\n     * Taken from:\n     * http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/\"\n     */\n    sumar(2, 3)\n    }\n    function sumar(a, b) {\n        r := a + b\n    }\n        // unreachable code\n        -- unreachable code\n        # unreachable code\n    procedure hacerAlgo() {\n        Mover(Este)\n        Poner(Rojo)\n        Sacar(Azul)\n    }"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/golang.go",
    "content": "// Concurrent computation of pi.\n// See http://goo.gl/ZuTZM.\n//\n// This demonstrates Go's ability to handle\n// large numbers of concurrent processes.\n// It is an unreasonable way to calculate pi.\npackage main\n\nimport (\n    \"fmt\"\n    \"math\"\n)\n\nfunc main() {\n    fmt.Println(pi(5000))\n}\n\n// pi launches n goroutines to compute an\n// approximation of pi.\nfunc pi(n int) float64 {\n    ch := make(chan float64)\n    for k := 0; k <= n; k++ {\n        go term(ch, float64(k))\n    }\n    f := 0.0\n    for k := 0; k <= n; k++ {\n        f += <-ch\n    }\n    return f\n}\n\nfunc term(ch chan float64, k float64) {\n    ch <- 4 * math.Pow(-1, k) / (2*k + 1)\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/graphqlschema.gql",
    "content": "# Main Schema\nschema {\n\tquery: Query;\n}\n\nscalar Date;\n\n# Simple type to contain all scalar types\ntype AllTypes {\n\t# Field Description for String\n\ttestString: String;\n\t# Field Description for Int\n\ttestInt: Int;\n\t# Field Description for ID\n\ttestID: ID;\n\t# Field Description for Boolean\n\ttestBoolean: Boolean;\n\t# Field Description for Float\n\ttestFloat: Float;\n}\n\ninterface ISearchable {\n    searchPreview: String!;\n}\n\nunion ProductTypes = Movie | Book;\n\n# Testing enum\nenum MovieGenere {\n    ACTION\n    COMEDY\n    THRILLER\n    DRAMA\n}\n\n# Testing Input\ninput SearchByGenere {\n\tbefore: Date;\n\tafter: Date;\n\tgenere: MovieGenere!;\n}\n\n# Testing Interface\ntype Movie implements ISearchable {\n\tid: ID!;\n\tsearchPreview: String!;\n\trentPrice: Float;\n\tpublishDate: Date;\n\tgenere: MovieGenere;\n\tcast: [String];\n}\n\n# Testing Interface\ntype Book implements ISearchable {\n    id: ID!;\n\tsearchPreview: String!;\n\tprice: Float;\n\tpublishDate: Date;\n\tauthors: [String];\n}\n\ntype Query {\n\ttestString: String;\n\ttestDate; Date;\n\tallTypes: AllTypes;\n\tallProducts: [ProductTypes];\n\n\t# searches only movies by genere with sophisticated argument\n\tsearchMovieByGenere(searchObject: SearchByGenere!): [Movie];\n\n\t# Searchs all products by text string\n\tsearchProduct(text: String!): [ISearchable];\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/groovy.groovy",
    "content": "//http://groovy.codehaus.org/Martin+Fowler%27s+closure+examples+in+Groovy\n\nclass Employee {\n    def name, salary\n    boolean manager\n    String toString() { return name }\n}\n\ndef emps = [new Employee(name:'Guillaume', manager:true, salary:200),\n    new Employee(name:'Graeme', manager:true, salary:200),\n    new Employee(name:'Dierk', manager:false, salary:151),\n    new Employee(name:'Bernd', manager:false, salary:50)]\n\ndef managers(emps) {\n    emps.findAll { e -> e.isManager() }\n}\n\nassert emps[0..1] == managers(emps) // [Guillaume, Graeme]\n\ndef highPaid(emps) {\n    threshold = 150\n    emps.findAll { e -> e.salary > threshold }\n}\n\nassert emps[0..2] == highPaid(emps) // [Guillaume, Graeme, Dierk]\n\ndef paidMore(amount) {\n    { e -> e.salary > amount}\n}\ndef highPaid = paidMore(150)\n\nassert highPaid(emps[0]) // true\nassert emps[0..2] == emps.findAll(highPaid)\n\ndef filename = 'test.txt'\nnew File(filename).withReader{ reader -> doSomethingWith(reader) }\n\ndef readersText\ndef doSomethingWith(reader) { readersText = reader.text }\n\nassert new File(filename).text == readersText"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/haml.haml",
    "content": "!!!5\n\n/[if IE]\n  %a{ :href => 'http://www.mozilla.com/en-US/firefox/' }\n    %h1 Get Firefox\n\n-# This is a HAML comment. It will not show in the output HTML\n\n-#\n  This is a HAML multiline comment\n  This won't be displayed\n    Nor will this\n                   Nor will this.\n\n/ This is a HTML comment. It will be rendered as HTML\n\n/\n  %p This doesn't render...\n  %div\n    %h1 Because it's commented out!\n\n.row\n  .col-md-6\n\n  .col-md-6\n\n\n#users.row.green\n  #articles{:style => \"border: 5px;\"}\n  #lists.list-inline\n\n%div#todos.bg-green{:id => \"#{@item.type}_#{@item.number}\", :class => '#{@item.type} #{@item.urgency}', :phoney => `asdasdasd`}\n\n/ file: app/views/movies/index.html.haml\n\n%ads:{:bleh => 33}\n%p\n  Date/Time:\n  - now = DateTime.now\n  %strong= now\n   = if now DateTime.parse(\"December 31, 2006\")\n    = \"Happy new \" + \"year!\"\n\n%sfd.dfdfg\n#content\n .title\n   %h1= @title\n   = link_to 'Home', home_url\n\n   #contents\n%div#content\n  %div.articles\n    %div.article.title Blah\n    %div.article.date 2006-11-05\n    %div.article.entry\n      Neil Patrick Harris\n\n%div[@user, :greeting]\n  %bar[290]\n\n/ This is a comment\n\n/ This is another comment with line break above\n\n.row\n  .col-md-6\n  .col-md-6\n\n  .col-md-6\n\n.row\n  .col-md-6\n\n\n  .col-md-6"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/handlebars.hbs",
    "content": "{{!-- Ace + :-}} --}}\n\n<div id=\"comments\">\n  {{#each comments}}\n  <h2><a href=\"/posts/{{../permalink}}#{{id}}\">{{title}}</a></h2>\n  <div>{{{body}}}</div>\n  {{/each}}\n</div>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/haskell.hs",
    "content": "-- Type annotation (optional)\nfib :: Int -> Integer\n \n-- With self-referencing data\nfib n = fibs !! n\n        where fibs = 0 : scanl (+) 1 fibs\n        -- 0,1,1,2,3,5,...\n \n-- Same, coded directly\nfib n = fibs !! n\n        where fibs = 0 : 1 : next fibs\n              next (a : t@(b:_)) = (a+b) : next t\n \n-- Similar idea, using zipWith\nfib n = fibs !! n\n        where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)\n \n-- Using a generator function\nfib n = fibs (0,1) !! n\n        where fibs (a,b) = a : fibs (b,a+b)"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/haskell_cabal.cabal",
    "content": "name:                reload\nversion:             0.1.0.0\nsynopsis:            Initial project template from stack\nDescription:\n    The \\'cabal\\' command-line program simplifies the process of managing\n    Haskell software by automating the fetching, configuration, compilation\n    and installation of Haskell libraries and programs.\nhomepage:            https://github.com/jpmoresmau/dbIDE/reload#readme\nlicense:             BSD3\nlicense-file:        LICENSE\nauthor:              JP Moresmau\nmaintainer:          jpmoresmau@gmail.com\ncopyright:           2016 JP Moresmau\ncategory:            Web\nbuild-type:          Simple\n-- extra-source-files:\ncabal-version:       >=1.10\n\nFlag network-uri\n  description:  Get Network.URI from the network-uri package\n  default:      True\n\nlibrary\n  hs-source-dirs:      src\n  exposed-modules:     Language.Haskell.Reload\n  build-depends:       base >= 4.7 && < 5\n                     , aeson\n                     , scotty\n                     , wai\n                     , text\n                     , directory\n                     , filepath\n                     , bytestring\n                     , containers\n                     , mime-types\n                     , transformers\n                     , wai-handler-launch\n                     , wai-middleware-static\n                     , wai-extra\n                     , http-types\n  default-language:    Haskell2010\n  other-modules:       Language.Haskell.Reload.FileBrowser\n  ghc-options:         -Wall -O2\n\nexecutable reload-exe\n  hs-source-dirs:      app\n  main-is:             Main.hs\n  ghc-options:         -threaded -O2 -rtsopts -with-rtsopts=-N\n  build-depends:       base\n                     , reload\n  default-language:    Haskell2010\n\ntest-suite reload-test\n  type:                exitcode-stdio-1.0\n  hs-source-dirs:      test\n  main-is:             Spec.hs\n  build-depends:       base\n                     , reload\n                     , hspec\n                     , hspec-wai\n                     , hspec-wai-json\n                     , aeson\n                     , directory\n                     , filepath\n                     , text\n                     , containers\n                     , unordered-containers\n                     , bytestring\n                     , wai-extra\n  ghc-options:         -threaded -O2 -rtsopts -with-rtsopts=-N\n  default-language:    Haskell2010\n  other-modules:       Language.Haskell.Reload.FileBrowserSpec\n                       Language.Haskell.ReloadSpec\n\nsource-repository head\n  type:     git\n  location: https://github.com/jpmoresmau/dbIDE/reload\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/hjson.hjson",
    "content": "{\n  # specify rate in requests/second (because comments are helpful!)\n  rate: 1000\n\n  // prefer c-style comments?\n  /* feeling old fashioned? */\n\n  # did you notice that rate doesn't need quotes?\n  hey: look ma, no quotes for strings either!\n\n  # best of all\n  notice: []\n  anything: ?\n\n  # yes, commas are optional!\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/htaccess",
    "content": "Redirect /linux http://www.linux.org\nRedirect 301 /kernel http://www.linux.org\n\n# comment\nRewriteEngine on\n\nRewriteCond %{HTTP_USER_AGENT} ^Mozilla.*\nRewriteRule ^/$ /homepage.max.html [L]\n\nRewriteRule ^/$ /homepage.std.html [L]\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/html.html",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n\n    <style type=\"text/css\">\n        .text-layer {\n            font-family: Monaco, \"Courier New\", monospace;\n            font-size: 12px;\n            cursor: text;\n        }\n    </style>\n\n    </head>\n    <body>\n        <h1 style=\"color:red\">Juhu Kinners</h1>\n    </body>\n</html>"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/html_elixir.eex",
    "content": "<h1>Listing Books</h1>\n \n<table>\n  <tr>\n    <th>Title</th>\n    <th>Summary</th>\n    <th></th>\n    <th></th>\n    <th></th>\n  </tr>\n\n<%= for book <- @books do %>\n  <tr>\n    <%# comment %>\n    <td><%= book.title %></td>\n    <td><%= book.content %></td>\n    <td><%= link \"Show\", to: book_path(@conn, :show, book) %></td>\n    <td><%= link \"Edit\", to: book_path(@conn, :edit, book) %></td>\n    <td><%= link \"Delete\", to: book_path(@conn, :delete, book), method: :delete, data: [confirm: \"Are you sure?\"] %></td>\n  </tr>\n<% end %>\n</table>\n \n<br />\n \n<%= link \"New book\", to: book_path(@conn, :new) %>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/html_ruby.erb",
    "content": "<h1>Listing Books</h1>\n \n<table>\n  <tr>\n    <th>Title</th>\n    <th>Summary</th>\n    <th></th>\n    <th></th>\n    <th></th>\n  </tr>\n \n<% @books.each do |book| %>\n  <tr>\n    <%# comment %>\n    <td><%= book.title %></td>\n    <td><%= book.content %></td>\n    <td><%= link_to 'Show', book %></td>\n    <td><%= link_to 'Edit', edit_book_path(book) %></td>\n    <td><%= link_to 'Remove', book, :confirm => 'Are you sure?', :method => :delete %></td>\n  </tr>\n<% end %>\n</table>\n \n<br />\n \n<%= link_to 'New book', new_book_path %>"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/ini.ini",
    "content": "[.ShellClassInfo]\nIconResource=..\\logo.png\n[ViewState]\nFolderType=Generic\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/io.io",
    "content": "// computes factorial of a number\nfactorial := method(n,\n    if(n == 0, return 1)\n    res := 1\n    Range 1 to(n) foreach(i, res = res * i)\n)"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/jade.jade",
    "content": "!!!doctype\n!!!5\n!!!\n\ninclude something\n\n         include another_thing\n\n  // let's talk about it\n\n// \n  here it is. a block comment!\n and another row!\nbut not here.\n\n     // \n        a far spaced\n    should be lack of block\n\n   // also not a comment\n     div.attemptAtBlock\n  \n  span#myName\n\n  #{implicit}\n     !{more_explicit}\n\n  #idDiv\n\n    .idDiv\n\n    test(id=\"tag\")\n    header(id=\"tag\", blah=\"foo\", meh=\"aads\")\nmixin article(obj, parents)\n\n  mixin bleh()\n\n    mixin clever-name\n\n -var x = \"0\";\n - y each z\n\n - var items = [\"one\", \"two\", \"three\"]\n   each item in items\n    li= item"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/java.java",
    "content": "import java.util.ArrayList;\nimport java.util.Vector;\n\npublic class InfiniteLoop {\n\n    /*\n     * This will cause the program to hang...\n     *\n     * Taken from:\n     * http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/\n     */\n    public static void main(String[] args) {\n        double d = Double.parseDouble(\"2.2250738585072012e-308\");\n\n        // unreachable code\n        System.out.println(\"Value: \" + d);\n    }\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/javascript.js",
    "content": "function foo(items, nada) {\n    for (var i=0; i<items.length; i++) {\n        alert(items[i] + \"juhu\\n\");\n    }\t// Real Tab.\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/json.json",
    "content": "{\n \"query\": {\n  \"count\": 10,\n  \"created\": \"2011-06-21T08:10:46Z\",\n  \"lang\": \"en-US\",\n  \"results\": {\n   \"photo\": [\n    {\n     \"farm\": \"6\",\n     \"id\": \"5855620975\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"32021554@N04\",\n     \"secret\": \"f1f5e8515d\",\n     \"server\": \"5110\",\n     \"title\": \"7087 bandit cat\"\n    },\n    {\n     \"farm\": \"4\",\n     \"id\": \"5856170534\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"32021554@N04\",\n     \"secret\": \"ff1efb2a6f\",\n     \"server\": \"3217\",\n     \"title\": \"6975 rusty cat\"\n    },\n    {\n     \"farm\": \"6\",\n     \"id\": \"5856172972\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"51249875@N03\",\n     \"secret\": \"6c6887347c\",\n     \"server\": \"5192\",\n     \"title\": \"watermarked-cats\"\n    },\n    {\n     \"farm\": \"6\",\n     \"id\": \"5856168328\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"32021554@N04\",\n     \"secret\": \"0c1cfdf64c\",\n     \"server\": \"5078\",\n     \"title\": \"7020 mandy cat\"\n    },\n    {\n     \"farm\": \"3\",\n     \"id\": \"5856171774\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"32021554@N04\",\n     \"secret\": \"7f5a3180ab\",\n     \"server\": \"2696\",\n     \"title\": \"7448 bobby cat\"\n    }\n   ]\n  }\n }\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/jsoniq.jq",
    "content": "TODO"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/jsp.jsp",
    "content": "<%-- initial comment --%>\n<%@ page import=\"java.util.Date\" %>\n<%--@ page isELIgnored=\"true\" //Now EL will be ignored   --%>\n<html>\n    <jsp:declaration>\n        int day = 3;\n    </jsp:declaration>\n    <%@ include file=\"relative url\" %>\n    <jsp:directive.include file=\"relative url\" />\n    <head>\n        <title>Day <%= day %></title>\n    </head> \n    <body>\n        <script>\n            var x = \"abc\";\n                function y {\n            }\n        </script>\n    <style>\n        .class {\n            background: #124356;\n        }\n    </style>\n\n    <p>\n        Today's date: <%= (new java.util.Date()).toLocaleString()%>\n    </p>\n    <%! int day = 3; %> \n    \n    <jsp:directive.page attribute=\"value\" />\n    \n    \n    <%-- This comment will not be visible in the page source --%>\n    <!-- html comment -->\n    <body>\n        <p>\n           Today's date: <%= (new java.util.Date()).toLocaleString()%>\n        </p>\n        \n<%! int i = 0; %>\n    <jsp:declaration>\n       int j = 10;\n    </jsp:declaration>\n\n    <%-- This is JSP comment --%>\n    <%@ directive attribute=\"value\" %>\n\n    <h2>Select Languages:</h2>\n\n    <form ACTION=\"jspCheckBox.jsp\">\n        <input type=\"checkbox\" name=\"id\" value=\"Java\"> Java<BR>\n        <input type=\"checkbox\" name=\"id\" value=\".NET\"> .NET<BR>\n        <input type=\"checkbox\" name=\"id\" value=\"PHP\"> PHP<BR>\n        <input type=\"checkbox\" name=\"id\" value=\"C/C++\"> C/C++<BR>\n        <input type=\"checkbox\" name=\"id\" value=\"PERL\"> PERL <BR>\n        <input type=\"submit\" value=\"Submit\">\n    </form>\n\n    <%\n    String select[] = request.getParameterValues(\"id\"); \n    if (select != null && select.length != 0) {\n        out.println(\"You have selected: \");\n        for (int i = 0; i < select.length; i++) {\n           out.println(select[i]); \n        }\n    }\n    %>\n\n\n        <% \n            switch(day) {\n            case 0:\n                   out.println(\"It\\'s Sunday.\");\n                   break;\n            case 1:\n                   out.println(\"It\\'s Monday.\");\n                   break;\n            case 2:\n                   out.println(\"It\\'s Tuesday.\");\n                   break;\n            case 3:\n                   out.println(\"It\\'s Wednesday.\");\n                   break;\n            case 4:\n                   out.println(\"It\\'s Thursday.\");\n                   break;\n            case 5:\n                   out.println(\"It\\'s Friday.\");\n                   break;\n            //hello\n            default:\n                   out.println(\"It's Saturday.\");\n            }\n        %>\n        <p>\n            <jsp:scriptlet>\n                out.println(\"Your IP address is \" + request.getRemoteAddr());\n            </jsp:scriptlet>\n        </p>\n    </body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/jssm.jssm",
    "content": "\nmachine_name    : \"Three-state traffic light, plus off and flash-red\";\nmachine_version : 1.2.1;\n\njssm_version    : >= 5.0.0;\ngraph_layout    : dot;\n\non_init         : ${setup};\non_halt         : ${finalize};\n\n\n\n/* turn on */\nOff 'Enable' { follow: ${turned_on}; } -> Red;\n\n// main sequence\nRed 'Proceed' => Green 'Proceed' => Yellow 'Proceed' => Red;\n\n// emergency flash red\n[Red Yellow Green] 'Flash' -> Flash;\nFlash 'Proceed' { label: 'no change'; } -> Flash 'Exit' -> Red;\n\n// turn off\n[Red Yellow Green Flash] 'Disable' { follow: ${turned_off}; } ~> Off;\n\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/jsx.jsx",
    "content": "/*EXPECTED\nhello world!\n*/\nclass Test {\n    static function run() : void {\n        // console.log(\"hello world!\");\n        log \"hello world!\";\n    }\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/julia.jl",
    "content": "for op = (:+, :*, :&, :|, :$)\n  @eval ($op)(a,b,c) = ($op)(($op)(a,b),c)\nend\n\nv = α';\nfunction g(x,y)\n  return x * y\n  x + y\nend\n\ncd(\"data\") do\n    open(\"outfile\", \"w\") do f\n        write(f, data)\n    end\nend\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/kotlin.kt",
    "content": "/*Taken from http://try.kotlinlang.org/#/Examples/Longer%20examples/Life/Life.kt*/\n/**\n * This is a straightforward implementation of The Game of Life\n * See http://en.wikipedia.org/wiki/Conway's_Game_of_Life\n */\npackage life\n\n/*\n * A field where cells live. Effectively immutable\n */\nclass Field(\n        val width: Int,\n        val height: Int,\n        // This function tells the constructor which cells are alive\n        // if init(i, j) is true, the cell (i, j) is alive\n        init: (Int, Int) -> Boolean\n) {\n    private val live: Array<Array<Boolean>> = Array(height) { i -> Array(width) { j -> init(i, j) } }\n\n    private fun liveCount(i: Int, j: Int)\n            = if (i in 0..height - 1 &&\n            j in 0..width - 1 &&\n            live[i][j]) 1 else 0\n\n    // How many neighbors of (i, j) are alive?\n    fun liveNeighbors(i: Int, j: Int) =\n            liveCount(i - 1, j - 1) +\n                    liveCount(i - 1, j) +\n                    liveCount(i - 1, j + 1) +\n                    liveCount(i, j - 1) +\n                    liveCount(i, j + 1) +\n                    liveCount(i + 1, j - 1) +\n                    liveCount(i + 1, j) +\n                    liveCount(i + 1, j + 1)\n\n    // You can say field[i, j], and this function gets called\n    operator fun get(i: Int, j: Int) = live[i][j]\n}\n\n/**\n * This function takes the present state of the field\n * and returns a new field representing the next moment of time\n */\nfun next(field: Field): Field {\n    return Field(field.width, field.height) { i, j ->\n        val n = field.liveNeighbors(i, j)\n        if (field[i, j])\n        // (i, j) is alive\n            n in 2..3 // It remains alive iff it has 2 or 3 neighbors\n        else\n        // (i, j) is dead\n            n == 3 // A new cell is born if there are 3 neighbors alive\n    }\n}\n\n/** A few colony examples here */\nfun main(args: Array<String>) {\n    // Simplistic demo\n    runGameOfLife(\"***\", 3)\n    // \"Star burst\"\n    runGameOfLife(\"\"\"\n        _______\n        ___*___\n        __***__\n        ___*___\n        _______\n    \"\"\", 10)\n    // Stable colony\n    runGameOfLife(\"\"\"\n        _____\n        __*__\n        _*_*_\n        __*__\n        _____\n    \"\"\", 3)\n    // Stable from the step 2\n    runGameOfLife(\"\"\"\n        __**__\n        __**__\n        __**__\n    \"\"\", 3)\n    // Oscillating colony\n    runGameOfLife(\"\"\"\n        __**____\n        __**____\n        ____**__\n        ____**__\n    \"\"\", 6)\n    // A fancier oscillating colony\n    runGameOfLife(\"\"\"\n        -------------------\n        -------***---***---\n        -------------------\n        -----*----*-*----*-\n        -----*----*-*----*-\n        -----*----*-*----*-\n        -------***---***---\n        -------------------\n        -------***---***---\n        -----*----*-*----*-\n        -----*----*-*----*-\n        -----*----*-*----*-\n        -------------------\n        -------***---***---\n        -------------------\n    \"\"\", 10)\n}\n\n// UTILITIES\n\nfun runGameOfLife(fieldText: String, steps: Int) {\n    var field = makeField(fieldText)\n    for (step in 1..steps) {\n        println(\"Step: $step\")\n        for (i in 0..field.height - 1) {\n            for (j in 0..field.width - 1) {\n                print(if (field[i, j]) \"*\" else \" \")\n            }\n            println(\"\")\n        }\n        field = next(field)\n    }\n}\n\nfun makeField(s: String): Field {\n    val lines = s.replace(\" \", \"\").split('\\n').filter({ it.isNotEmpty() })\n    val longestLine = lines.toList().maxBy { it.length } ?: \"\"\n\n    return Field(longestLine.length, lines.size) { i, j -> lines[i][j] == '*' }\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/latex.tex",
    "content": "\\usepackage{amsmath}\n\\title{\\LaTeX}\n\\date{}\n\\begin{document}\n  \\maketitle\n  \\LaTeX{} is a document preparation system for the \\TeX{}\n  typesetting program. It offers programmable desktop publishing\n  features and extensive facilities for automating most aspects of\n  typesetting and desktop publishing, including numbering and\n  cross-referencing, tables and figures, page layout, bibliographies,\n  and much more. \\LaTeX{} was originally written in 1984 by Leslie\n  Lamport and has become the dominant method for using \\TeX; few\n  people write in plain \\TeX{} anymore. The current version  is\n  \\LaTeXe.\n \n  % This is a comment; it will not be shown in the final output.\n  % The following shows a little of the typesetting power of LaTeX:\n  \\begin{align}\n    E &= mc^2                              \\\\\n    m &= \\frac{m_0}{\\sqrt{1-\\frac{v^2}{c^2}}}\n  \\end{align}\n\\end{document}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/less.less",
    "content": "/* styles.less */\n\n@base: #f938ab;\n\n.box-shadow(@style, @c) when (iscolor(@c)) {\n    box-shadow:         @style @c;\n    -webkit-box-shadow: @style @c;\n    -moz-box-shadow:    @style @c;\n}\n.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {\n    .box-shadow(@style, rgba(0, 0, 0, @alpha));\n}\n\n// Box styles\n.box { \n    color: saturate(@base, 5%);\n    border-color: lighten(@base, 30%);\n    \n    div { .box-shadow(0 0 5px, 30%) }\n  \n    a {\n        color: @base;\n        \n        &:hover {\n            color: lighten(@base, 50%);\n        }\n    }\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/liquid.liquid",
    "content": "The following examples can be found in full at http://liquidmarkup.org/\n\nLiquid is an extraction from the e-commerce system Shopify.\nShopify powers many thousands of e-commerce stores which all call for unique designs.\nFor this we developed Liquid which allows our customers complete design freedom while\nmaintaining the integrity of our servers.\n\nLiquid has been in production use since June 2006 and is now used by many other\nhosted web applications.\n\nIt was developed for usage in Ruby on Rails web applications and integrates seamlessly\nas a plugin but it also works excellently as a stand alone library.\n\nHere's what it looks like:\n\n  <ul id=\"products\">\n    {% for product in products %}\n      <li>\n        <h2>{{ product.title }}</h2>\n        Only {{ product.price | format_as_money }}\n\n        <p>{{ product.description | prettyprint | truncate: 200  }}</p>\n\n      </li>\n    {% endfor %}\n  </ul>\n\n\nSome more features include:\n\n<h2>Filters</h2>\n<p> The word \"tobi\" in uppercase: {{ 'tobi' | upcase }} </p>\n<p>The word \"tobi\" has {{ 'tobi' | size }} letters! </p>\n<p>Change \"Hello world\" to \"Hi world\": {{ 'Hello world' | replace: 'Hello', 'Hi' }} </p>\n<p>The date today is {{ 'now' | date: \"%Y %b %d\" }} </p>\n\n\n<h2>If</h2>\n<p>\n  {% if user.name == 'tobi' or user.name == 'marc' %} \n    hi marc or tobi\n  {% endif %}\n</p>\n\n\n<h2>Case</h2>\n<p>\n  {% case template %}\n    {% when 'index' %}\n       Welcome\n    {% when 'product' %}\n       {{ product.vendor | link_to_vendor }} / {{ product.title }}\n    {% else %}\n       {{ page_title }}\n  {% endcase %}\n</p>\n\n\n<h2>For Loops</h2>\n<p>\n  {% for item in array %} \n    {{ item }}\n  {% endfor %}\n</p>\n\n\n<h2>Tables</h2>\n<p>\n  {% tablerow item in items cols: 3 %}\n    {% if tablerowloop.col_first %}\n      First column: {{ item.variable }}\n    {% else %}\n      Different column: {{ item.variable }}\n    {% endif %}\n  {% endtablerow %}\n</p>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/lisp.lisp",
    "content": "(defun prompt-for-cd ()\n   \"Prompts\n    for CD\"\n   (prompt-read \"Title\" 1.53 1 2/4 1.7 1.7e0 2.9E-4 +42 -7 #b001 #b001/100 #o777 #O777 #xabc55 #c(0 -5.6))\n   (prompt-read \"Artist\" &rest)\n   (or (parse-integer (prompt-read \"Rating\") :junk-allowed t) 0)\n  (if x (format t \"yes\") (format t \"no\" nil) ;and here comment\n  ) 0xFFLL -23ull\n  ;; second line comment\n  '(+ 1 2)\n  (defvar *lines*)                ; list of all lines\n  (position-if-not #'sys::whitespacep line :start beg))\n  (quote (privet 1 2 3))\n  '(hello world)\n  (* 5 7)\n  (1 2 34 5)\n  (:use \"aaaa\")\n  (let ((x 10) (y 20))\n    (print (+ x y))\n  ) LAmbDa\n\n  \"asdad\\0eqweqe\""
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/livescript.ls",
    "content": "# Defines an editing mode for [Ace](http://ace.ajax.org).\n#\n# Open [test/ace.html](../test/ace.html) to test.\n\nrequire, exports, module <-! define \\ace/mode/ls\n\nidentifier = /(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*/$\n\nexports.Mode = class LiveScriptMode extends require(\\ace/mode/text)Mode\n  ->\n    @$tokenizer =\n      new (require \\ace/tokenizer)Tokenizer LiveScriptMode.Rules\n    if require \\ace/mode/matching_brace_outdent\n      @$outdent = new that.MatchingBraceOutdent\n\n  indenter = // (?\n    : [({[=:]\n    | [-~]>\n    | \\b (?: e(?:lse|xport) | d(?:o|efault) | t(?:ry|hen) | finally |\n             import (?:\\s* all)? | const | var |\n             let | new | catch (?:\\s* #identifier)? )\n  ) \\s* $ //\n\n  getNextLineIndent: (state, line, tab) ->\n    indent   = @$getIndent line\n    {tokens} = @$tokenizer.getLineTokens line, state\n    unless tokens.length and tokens[*-1]type is \\comment\n      indent += tab if state is \\start and indenter.test line\n    indent\n\n  toggleCommentLines: (state, doc, startRow, endRow) ->\n    comment = /^(\\s*)#/; range = new (require \\ace/range)Range 0 0 0 0\n    for i from startRow to endRow\n      if out = comment.test line = doc.getLine i\n      then line.=replace comment, \\$1\n      else line.=replace /^\\s*/   \\$&#\n      range.end.row = range.start.row = i\n      range.end.column = line.length + 1\n      doc.replace range, line\n    1 - out * 2\n\n  checkOutdent: (state, line, input) -> @$outdent?checkOutdent line, input\n\n  autoOutdent: (state, doc, row) -> @$outdent?autoOutdent doc, row\n\n### Highlight Rules\n\nkeywordend = /(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))/$\nstringfill = token: \\string, regex: '.+'\n\nLiveScriptMode.Rules =\n  start:\n    * token: \\keyword\n      regex: //(?\n        :t(?:h(?:is|row|en)|ry|ypeof!?)\n        |c(?:on(?:tinue|st)|a(?:se|tch)|lass)\n        |i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])\n        |d(?:e(?:fault|lete|bugger)|o)\n        |f(?:or(?:\\s+own)?|inally|unction)\n        |s(?:uper|witch)\n        |e(?:lse|x(?:tends|port)|val)\n        |a(?:nd|rguments)\n        |n(?:ew|ot)\n        |un(?:less|til)\n        |w(?:hile|ith)\n        |o[fr]|return|break|let|var|loop\n      )//$ + keywordend\n\n    * token: \\constant.language\n      regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend\n\n    * token: \\invalid.illegal\n      regex: '(?\n        :p(?:ackage|r(?:ivate|otected)|ublic)\n        |i(?:mplements|nterface)\n        |enum|static|yield\n      )' + keywordend\n\n    * token: \\language.support.class\n      regex: '(?\n        :R(?:e(?:gExp|ferenceError)|angeError)\n        |S(?:tring|yntaxError)\n        |E(?:rror|valError)\n        |Array|Boolean|Date|Function|Number|Object|TypeError|URIError\n      )' + keywordend\n\n    * token: \\language.support.function\n      regex: '(?\n        :is(?:NaN|Finite)\n        |parse(?:Int|Float)\n        |Math|JSON\n        |(?:en|de)codeURI(?:Component)?\n      )' + keywordend\n\n    * token: \\variable.language\n      regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend\n\n    * token: \\identifier\n      regex: identifier + /\\s*:(?![:=])/$\n\n    * token: \\variable\n      regex: identifier\n\n    * token: \\keyword.operator\n      regex: /(?:\\.{3}|\\s+\\?)/$\n\n    * token: \\keyword.variable\n      regex: /(?:@+|::|\\.\\.)/$\n      next : \\key\n\n    * token: \\keyword.operator\n      regex: /\\.\\s*/$\n      next : \\key\n\n    * token: \\string\n      regex: /\\\\\\S[^\\s,;)}\\]]*/$\n\n    * token: \\string.doc\n      regex: \\'''\n      next : \\qdoc\n\n    * token: \\string.doc\n      regex: \\\"\"\"\n      next : \\qqdoc\n\n    * token: \\string\n      regex: \\'\n      next : \\qstring\n\n    * token: \\string\n      regex: \\\"\n      next : \\qqstring\n\n    * token: \\string\n      regex: \\`\n      next : \\js\n\n    * token: \\string\n      regex: '<\\\\['\n      next : \\words\n\n    * token: \\string.regex\n      regex: \\//\n      next : \\heregex\n\n    * token: \\comment.doc\n      regex: '/\\\\*'\n      next : \\comment\n\n    * token: \\comment\n      regex: '#.*'\n\n    * token: \\string.regex\n      regex: //\n        /(?: [^ [ / \\n \\\\ ]*\n          (?: (?: \\\\.\n                | \\[ [^\\]\\n\\\\]* (?:\\\\.[^\\]\\n\\\\]*)* \\]\n              ) [^ [ / \\n \\\\ ]*\n          )*\n        )/ [gimy$]{0,4}\n      //$\n      next : \\key\n\n    * token: \\constant.numeric\n      regex: '(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*\n                |(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*\n                |(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)\n                 (?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)'\n\n    * token: \\lparen\n      regex: '[({[]'\n\n    * token: \\rparen\n      regex: '[)}\\\\]]'\n      next : \\key\n\n    * token: \\keyword.operator\n      regex: \\\\\\S+\n\n    * token: \\text\n      regex: \\\\\\s+\n\n  heregex:\n    * token: \\string.regex\n      regex: '.*?//[gimy$?]{0,4}'\n      next : \\start\n    * token: \\string.regex\n      regex: '\\\\s*#{'\n    * token: \\comment.regex\n      regex: '\\\\s+(?:#.*)?'\n    * token: \\string.regex\n      regex: '\\\\S+'\n\n  key:\n    * token: \\keyword.operator\n      regex: '[.?@!]+'\n    * token: \\identifier\n      regex: identifier\n      next : \\start\n    * token: \\text\n      regex: '.'\n      next : \\start\n\n  comment:\n    * token: \\comment.doc\n      regex: '.*?\\\\*/'\n      next : \\start\n    * token: \\comment.doc\n      regex: '.+'\n\n  qdoc:\n    token: \\string\n    regex: \".*?'''\"\n    next : \\key\n    stringfill\n\n  qqdoc:\n    token: \\string\n    regex: '.*?\"\"\"'\n    next : \\key\n    stringfill\n\n  qstring:\n    token: \\string\n    regex: /[^\\\\']*(?:\\\\.[^\\\\']*)*'/$\n    next : \\key\n    stringfill\n\n  qqstring:\n    token: \\string\n    regex: /[^\\\\\"]*(?:\\\\.[^\\\\\"]*)*\"/$\n    next : \\key\n    stringfill\n\n  js:\n    token: \\string\n    regex: /[^\\\\`]*(?:\\\\.[^\\\\`]*)*`/$\n    next : \\key\n    stringfill\n\n  words:\n    token: \\string\n    regex: '.*?\\\\]>'\n    next : \\key\n    stringfill\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/logiql.logic",
    "content": "// ancestors\nparentof(\"douglas\", \"john\").\nparentof(\"john\", \"bob\").\nparentof(\"bob\", \"ebbon\").\n\nparentof(\"douglas\", \"jane\").\nparentof(\"jane\", \"jan\").\n\nancestorof(A, B) <- parentof(A, B).\nancestorof(A, C) <- ancestorof(A, B), parentof(B,C).\n\ngrandparentof(A, B) <- parentof(A, C), parentof(C, B).\n\ncousins(A,B) <- grandparentof(C,A), grandparentof(C,B).\n\nparentof[`arg](A, B) -> int[32](A), !string(B)."
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/logtalk.lgt",
    "content": ":- object(bottles).\n\n\t:- initialization(sing(99)).\n\n\tsing(0) :-\n\t\twrite('No more bottles of beer on the wall, no more bottles of beer.'), nl,\n\t\twrite('Go to the store and buy some more, 99 bottles of beer on the wall.'), nl, nl.\n\tsing(N) :-\n\t\tN > 0,\n\t\tN2 is N - 1,\n\t\tbeers(N), write(' of beer on the wall, '), beers(N), write(' of beer.'), nl,\n\t\twrite('Take one down and pass it around, '), beers(N2), write(' of beer on the wall.'), nl, nl,\n\t\tsing(N2).\n\n\tbeers(0) :-\n\t\twrite('no more bottles').\n\tbeers(1) :-\n\t\twrite('1 bottle').\n\tbeers(N) :-\n\t\tN > 1,\n\t\twrite(N), write(' bottles').\n\n:- end_object.\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/lsl.lsl",
    "content": "/*\n    Testing syntax highlighting\n    of Ace Editor\n    for the Linden Scripting Language\n*/\n\ninteger someIntNormal       = 3672;\ninteger someIntHex          = 0x00000000;\ninteger someIntMath         = PI_BY_TWO;\n\ninteger event               = 5673;                                             // invalid.illegal\n\nkey someKeyTexture          = TEXTURE_DEFAULT;\nstring someStringSpecial    = EOF;\n\nsome_user_defined_function_without_return_type(string inputAsString)\n{\n    llSay(PUBLIC_CHANNEL, inputAsString);\n}\n\nstring user_defined_function_returning_a_string(key inputAsKey)\n{\n    return (string)inputAsKey;\n}\n\ndefault\n{\n    state_entry()\n    {\n        key someKey = NULL_KEY;\n        someKey = llGetOwner();\n\n        string someString = user_defined_function_returning_a_string(someKey);\n\n        some_user_defined_function_without_return_type(someString);\n    }\n\n    touch_start(integer num_detected)\n    {\n        list agentsInRegion = llGetAgentList(AGENT_LIST_REGION, []);\n        integer numOfAgents = llGetListLength(agentsInRegion);\n\n        integer index;                                                          // defaults to 0\n        for (; index <= numOfAgents - 1; index++)                               // for each agent in region\n        {\n            llRegionSayTo(llList2Key(agentsInRegion, index), PUBLIC_CHANNEL, \"Hello, Avatar!\");\n        }\n    }\n\n    touch_end(integer num_detected)\n    {\n        someIntNormal       = 3672;\n        someIntHex          = 0x00000000;\n        someIntMath         = PI_BY_TWO;\n\n        event               = 5673;                                             // invalid.illegal\n\n        someKeyTexture      = TEXTURE_DEFAULT;\n        someStringSpecial   = EOF;\n\n        llSetInventoryPermMask(\"some item\", MASK_NEXT, PERM_ALL);               // reserved.godmode\n\n        llWhisper(PUBLIC_CHANNEL, \"Leaving \\\"default\\\" now...\");\n        state other;\n    }\n}\n\nstate other\n{\n    state_entry()\n    {\n        llWhisper(PUBLIC_CHANNEL, \"Entered \\\"state other\\\", returning to \\\"default\\\" again...\");\n        state default;\n    }\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/lua.lua",
    "content": "--[[--\nnum_args takes in 5.1 byte code and extracts the number of arguments\nfrom its function header.\n--]]--\n\nfunction int(t)\n\treturn t:byte(1)+t:byte(2)*0x100+t:byte(3)*0x10000+t:byte(4)*0x1000000\nend\n\nfunction num_args(func)\n\tlocal dump = string.dump(func)\n\tlocal offset, cursor = int(dump:sub(13)), offset + 26\n\t--Get the params and var flag (whether there's a ... in the param)\n\treturn dump:sub(cursor):byte(), dump:sub(cursor+1):byte()\nend\n\n-- Usage:\nnum_args(function(a,b,c,d, ...) end) -- return 4, 7\n\n-- Python styled string format operator\nlocal gm = debug.getmetatable(\"\")\n\ngm.__mod=function(self, other)\n    if type(other) ~= \"table\" then other = {other} end\n    for i,v in ipairs(other) do other[i] = tostring(v) end\n    return self:format(unpack(other))\nend\n\nprint([===[\n    blah blah %s, (%d %d)\n]===]%{\"blah\", num_args(int)})\n\n--[=[--\ntable.maxn is deprecated, use # instead.\n--]=]--\nprint(table.maxn{1,2,[4]=4,[8]=8) -- outputs 8 instead of 2\n\nprint(5 --[[ blah ]])"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/luapage.lp",
    "content": "﻿<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n   \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html>\n<% --[[--\n    index.lp from the Kepler Project's LuaDoc HTML doclet.\n    http://keplerproject.github.com/luadoc/\n--]] %>\n<head>\n    <title>Reference</title>\n    <link rel=\"stylesheet\" href=\"<%=luadoc.doclet.html.link(\"luadoc.css\")%>\" type=\"text/css\" />\n\t<!--meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/-->\n</head>\n\n<body>\n<div id=\"container\">\n\n<div id=\"product\">\n\t<div id=\"product_logo\"></div>\n\t<div id=\"product_name\"><big><b></b></big></div>\n\t<div id=\"product_description\"></div>\n</div> <!-- id=\"product\" -->\n\n<div id=\"main\">\n\n<div id=\"navigation\">\n<%=luadoc.doclet.html.include(\"menu.lp\", { doc=doc })%>\n\n</div> <!-- id=\"navigation\" -->\n\n<div id=\"content\">\n\n\n<%if not options.nomodules and #doc.modules > 0 then%>\n<h2>Modules</h2>\n<table class=\"module_list\">\n<!--<tr><td colspan=\"2\">Modules</td></tr>-->\n<%for _, modulename in ipairs(doc.modules) do%>\n\t<tr>\n\t\t<td class=\"name\"><a href=\"<%=luadoc.doclet.html.module_link(modulename, doc)%>\"><%=modulename%></a></td>\n\t\t<td class=\"summary\"><%=doc.modules[modulename].summary%></td>\n\t</tr>\n<%end%>\n</table>\n<%end%>\n\n\n\n<%if not options.nofiles and #doc.files > 0 then%>\n<h2>Files</h2>\n<table class=\"file_list\">\n<!--<tr><td colspan=\"2\">Files</td></tr>-->\n<%for _, filepath in ipairs(doc.files) do%>\n\t<tr>\n\t\t<td class=\"name\"><a href=\"<%=luadoc.doclet.html.file_link(filepath)%>\"><%=filepath%></a></td>\n\t\t<td class=\"summary\"></td>\n\t</tr>\n<%end%>\n</table>\n<%end%>\n\n</div> <!-- id=\"content\" -->\n\n</div> <!-- id=\"main\" -->\n\n<div id=\"about\">\n\t<p><a href=\"http://validator.w3.org/check?uri=referer\"><img src=\"http://www.w3.org/Icons/valid-xhtml10\" alt=\"Valid XHTML 1.0!\" height=\"31\" width=\"88\" /></a></p>\n</div> <!-- id=\"about\" -->\n\n</div> <!-- id=\"container\" -->\t\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/lucene.lucene",
    "content": "(title:\"foo bar\" AND body:\"quick fox\") OR title:fox"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/markdown.md",
    "content": "Ace (Ajax.org Cloud9 Editor)\n============================\n\nAce is a standalone code editor written in JavaScript. Our goal is to create a browser based editor that matches and extends the features, usability and performance of existing native editors such as TextMate, Vim or Eclipse. It can be easily embedded in any web page or JavaScript application. Ace is developed as the primary editor for [Cloud9 IDE](http://www.cloud9ide.com/) and the successor of the Mozilla Skywriter (Bespin) Project.\n\nFeatures\n--------\n\n* Syntax highlighting\n* Automatic indent and outdent\n* An optional command line\n* Handles huge documents (100,000 lines and more are no problem)\n* Fully customizable key bindings including VI and Emacs modes\n* Themes (TextMate themes can be imported)\n* Search and replace with regular expressions\n* Highlight matching parentheses\n* Toggle between soft tabs and real tabs\n* Displays hidden characters\n* Drag and drop text using the mouse\n* Line wrapping\n* Unstructured / user code folding\n* Live syntax checker (currently JavaScript/CoffeeScript)\n\nTake Ace for a spin!\n--------------------\n\nCheck out the Ace live [demo](http://ajaxorg.github.com/ace/) or get a [Cloud9 IDE account](http://run.cloud9ide.com) to experience Ace while editing one of your own GitHub projects.\n\nIf you want, you can use Ace as a textarea replacement thanks to the [Ace Bookmarklet](http://ajaxorg.github.com/ace/build/textarea/editor.html).\n\nHistory\n-------\n\nPreviously known as “Bespin” and “Skywriter” it’s now known as Ace (Ajax.org Cloud9 Editor)! Bespin and Ace started as two independent projects, both aiming to build a no-compromise code editor component for the web. Bespin started as part of Mozilla Labs and was based on the canvas tag, while Ace is the Editor component of the Cloud9 IDE and is using the DOM for rendering. After the release of Ace at JSConf.eu 2010 in Berlin the Skywriter team decided to merge Ace with a simplified version of Skywriter's plugin system and some of Skywriter's extensibility points. All these changes have been merged back to Ace. Both Ajax.org and Mozilla are actively developing and maintaining Ace.\n\nGetting the code\n----------------\n\nAce is a community project. We actively encourage and support contributions. The Ace source code is hosted on GitHub. It is released under the BSD License. This license is very simple, and is friendly to all kinds of projects, whether open source or not. Take charge of your editor and add your favorite language highlighting and keybindings!\n\n```bash\n    git clone git://github.com/ajaxorg/ace.git\n    cd ace\n    git submodule update --init --recursive\n```\n\nEmbedding Ace\n-------------\n\nAce can be easily embedded into any existing web page. The Ace git repository ships with a pre-packaged version of Ace inside of the `build` directory. The same packaged files are also available as a separate [download](https://github.com/ajaxorg/ace/downloads). Simply copy the contents of the `src` subdirectory somewhere into your project and take a look at the included demos of how to use Ace.\n\nThe easiest version is simply:\n\n```html\n    <div id=\"editor\">some text</div>\n    <script src=\"src/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n    <script>\n    window.onload = function() {\n        var editor = ace.edit(\"editor\");\n    };\n    </script>\n```\n\nWith \"editor\" being the id of the DOM element, which should be converted to an editor. Note that this element must be explicitly sized and positioned `absolute` or `relative` for Ace to work. e.g.\n\n```css\n    #editor {\n        position: absolute;\n        width: 500px;\n        height: 400px;\n    }\n```\n\nTo change the theme simply include the Theme's JavaScript file\n\n```html\n    <script src=\"src/theme-twilight.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n```\n\nand configure the editor to use the theme:\n\n```javascript\n    editor.setTheme(\"ace/theme/twilight\");\n```\n\nBy default the editor only supports plain text mode; many other languages are available as separate modules. After including the mode's JavaScript file:\n\n```html\n    <script src=\"src/mode-javascript.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n```\n\nThen the mode can be used like this:\n\n```javascript\n    var JavaScriptMode = require(\"ace/mode/javascript\").Mode;\n    editor.getSession().setMode(new JavaScriptMode());\n```\n\nDocumentation\n-------------\n\nYou find a lot more sample code in the [demo app](https://github.com/ajaxorg/ace/blob/master/demo/demo.js).\n\nThere is also some documentation on the [wiki page](https://github.com/ajaxorg/ace/wiki).\n\nIf you still need help, feel free to drop a mail on the [ace mailing list](http://groups.google.com/group/ace-discuss).\n\nRunning Ace\n-----------\n\nAfter the checkout Ace works out of the box. No build step is required. Open 'editor.html' in any browser except Google Chrome. Google Chrome doesn't allow XMLHTTPRequests from files loaded from disc (i.e. with a file:/// URL). To open Ace in Chrome simply start the bundled mini HTTP server:\n\n```bash\n    ./static.py\n```\n\nOr using Node.JS\n\n```bash\n    ./static.js\n```\n\nThe editor can then be opened at http://localhost:8888/index.html.\n\nPackage Ace\n-----------\n\nTo package Ace we use the dryice build tool developed by the Mozilla Skywriter team. Before you can build you need to make sure that the submodules are up to date.\n\n```bash\n    git submodule update --init --recursive\n```\n\nAfterwards Ace can be built by calling\n\n```bash\n    ./Makefile.dryice.js normal\n```\n\nThe packaged Ace will be put in the 'build' folder.\n\nTo build the bookmarklet version execute\n\n```bash\n    ./Makefile.dryice.js bm\n```\n\nRunning the Unit Tests\n----------------------\n\nThe Ace unit tests run on node.js. Before the first run a couple of node modules have to be installed. The easiest way to do this is by using the node package manager (npm). In the Ace base directory simply call\n\n```bash\n    npm link .\n```\n\nTo run the tests call:\n\n```bash\n    node lib/ace/test/all.js\n```\n\nYou can also run the tests in your browser by serving:\n\n    http://localhost:8888/lib/ace/test/tests.html\n\nThis makes debugging failing tests way more easier.\n\nContributing\n------------\n\nAce wouldn't be what it is without contributions! Feel free to fork and improve/enhance Ace any way you want. If you feel that the editor or the Ace community will benefit from your changes, please open a pull request. To protect the interests of the Ace contributors and users we require contributors to sign a Contributors License Agreement (CLA) before we pull the changes into the main repository. Our CLA is the simplest of agreements, requiring that the contributions you make to an ajax.org project are only those you're allowed to make. This helps us significantly reduce future legal risk for everyone involved. It is easy, helps everyone, takes ten minutes, and only needs to be completed once.  There are two versions of the agreement:\n\n1. [The Individual CLA](https://github.com/ajaxorg/ace/raw/master/doc/Contributor_License_Agreement-v2.pdf): use this version if you're working on an ajax.org in your spare time, or can clearly claim ownership of copyright in what you'll be submitting.\n2. [The Corporate CLA](https://github.com/ajaxorg/ace/raw/master/doc/Corporate_Contributor_License_Agreement-v2.pdf): have your corporate lawyer review and submit this if your company is going to be contributing to ajax.org  projects\n\nIf you want to contribute to an ajax.org project please print the CLA and fill it out and sign it. Then either send it by snail mail or fax to us or send it back scanned (or as a photo) by email.\n\nEmail: fabian.jakobs@web.de\n\nFax: +31 (0) 206388953\n\nAddress: Ajax.org B.V.\n  Keizersgracht 241\n  1016 EA, Amsterdam\n  the Netherlands"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/mask.mask",
    "content": "/* Mask Syntax Demo */\n\ndiv > ' Test ~[name]';\n\ndefine :userProfile {\n\theader {\n\t\th4 > @title;\n\t\tbutton.close;\n\t}\n}\n\n:userProfile {\n\t@title > ' Hello ~[: username.toUpperCase()]'\n}\n\nstyle {\n    html, body {\n        background: url('name.png') 0 0 no-repeat;\n    }\n}\n\nbutton {\n\tevent click (e) {\n\t    this.textContent = `name ${e.clientX} !`;\n\t}\n}\n\nmd > \"\"\"\n\n- div\n- span\n \nHello\n\n[one](http://google.com)\n\n\"\"\";\n\n\nheader .foo > 'Heading'\n\nbutton .baz x-signal='click: test' disabled > \"\n\tHello,\n\tworld \n\t\\\"Buddy\\\"\n\"\n\nvar a = {\n    name: `name ${window.innerWidth}`\n};\n\nspan .foo > \"~[bind: a.name]\""
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/matlab.matlab",
    "content": "%{\n   %{\n      Ace Matlab demo\n   %}\n%}\n\nclassdef hello\n   methods\n      function greet(this)\n         disp('Hello!')  % say hi\n      end\n   end\nend\n\n% transpose \na = [ 'x''y', \"x\\n\\\n      y\", 1' ]' + 2'"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/maze.mz",
    "content": "## ## () ## ^^ ## ## ## ##\n## H1 C2 S1 <> S2 H2 DN ##\n## %U <> %D *2 %L IZ .. ##\n## ## ## .. ## DN *3 ## ##\n## ## ## %R C1 IZ () ## ##\n## ## ## ## >/ *1\n## () *3 *1 %L ()\n\n\n// Set divisor and dividend\nS1-> = 9\nS2-> = 24\n\n// Holding cells\nH1-> IF *1 THEN %R ELSE %N\nH2-> IF *2 THEN %R ELSE %N\n\n// Arithmetic\nDN-> -= 1\nIZ-> IF <= 0 THEN %D ELSE %U\n\nC1-> IF *3 THEN %D ELSE %R\nC2-> IF *3 THEN %U ELSE %D\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/mel.mel",
    "content": "// animated duplicates, instances script\nproc animatedDuplication (int $rangeStart, int $rangeEnd, int $numOfDuplicates, int $duplicateOrInstance)\n{\n    int $range_start = $rangeStart;\n    int $range_end = $rangeEnd;\n    int $num_of_duplicates = $numOfDuplicates;\n    int $step_size = ($range_end - $range_start) / $num_of_duplicates;\n    int $i = 0;\n    int $temp;\n\n    currentTime $range_start;     // set to range start\n\n    string $selectedObjects[];    // to store selected objects\n    $selectedObjects = `ls -sl`;  // store selected objects\n    select $selectedObjects;\n\n    while ($i <= $num_of_duplicates)\n    {\n        $temp = $range_start + ($step_size * $i);\n        currentTime ($temp);\n        // seleced the objects to duplicate or instance\n        select $selectedObjects;\n        if($duplicateOrInstance == 0)\n        {\n            duplicate;\n        }\n        else\n        {\n            instance;\n        }\n        $i++;\n    }\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/mixal.mixal",
    "content": "* PROGRAM START\nΔSTART     LDA  2000 LOAD A FROM CELL 2000\n           CMP7 =15=\n12345      HLT\n           END  START\nABC        ALF abc\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/mushcode.mc",
    "content": "@create phone\n&pickup phone=$pick up:@ifelse [u(is,u(mode),ICC)]={@pemit %#=You pick up the [fullname(me)].[set(me,PHONER:%#)][set(me,MODE:CIP)][set([u(INCOMING)],CONNECTED:[num(me)])][set(me,CONNECTED:[u(INCOMING)])]%r[showpicture(PICPICKUP)]%rUse '[color(green,black,psay <message>)]' (or '[color(green,black,p <message>)]') to talk into the phone.;@oemit %#=%N picks up the [fullname(me)].},{@pemit %#=You pick up the phone but no one is there. You hear a dialtone and then hang up. [play(u(DIALTONE))];@oemit %#=%N picks up the phone, but no one is on the other end.}\n&ringfun phone=[ifelse(eq(comp([u(%0/ringtone)],off),0),[color(black,cyan,INCOMING CALL FROM %1)],[play([switch([u(%0/ringtone)],1,[u(%0/ringtone1)],2,[u(%0/ringtone2)],3,[u(%0/ringtone3)],4,[u(%0/ringtone4)],5,[u(%0/ringtone5)],6,[u(%0/ringtone6)],7,[u(%0/ringtone7)],8,[u(%0/ringtone8)],9,[u(%0/ringtone9)],custom,[u(%0/customtone)],vibrate,[u(%0/vibrate)])])]\n&ringloop phone=@switch [u(ringstate)]=1,{@emit [setq(q,[u(connecting)])][set(%qq,rangs:0)][set(%qq,mode:WFC)][set(%qq,INCOMING:)];@ifelse [u(%qq/HASVMB)]={@tr me/ROUTEVMB=[u(connecting)];},{@pemit %#=[u(MSGCNC)];}},2,{@pemit %#=The call is connected.[setq(q,[u(CONNECTING)])][set(me,CONNECTED:%qq)][set(%qq,CONNECTED:[num(me)])][set(%qq,MODE:CIP)];@tr me/ciploop;@tr %qq/ciploop;},3,{@emit On [fullname(me)]'s earpiece you hear a ringing sound.[play(u(LINETONE))];@tr me/ringhere;@increment [u(connecting)]/RANGS;@wait 5={@tr me/ringloop};},4,{}\n&ringstate phone=[setq(q,u(connecting))][setq(1,[gt(u(%qq/rangs),sub(u(%qq/rings),1))])][setq(2,[and(u(is,u(%qq/MODE),CIP),u(is,u(%qq/INCOMING),[num(me)]))][setq(3,[u(is,u(%qq/MODE),ICC)])][ifelse(%q1,1,ifelse(%q2,2,ifelse(%q3,3,4)))]\n;comment\n@@(comment)\nsay [time()]\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/mysql.mysql",
    "content": "TODO"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/nsis.nsi",
    "content": "/*\n  NSIS Mode\n  for Ace\n*/\n\n; Includes\n!include MUI2.nsh\n\n; Settings\nName \"installer_name\"\nOutFile \"installer_name.exe\"\nRequestExecutionLevel user\nCRCCheck on\n!ifdef x64\n  InstallDir \"$PROGRAMFILES64\\installer_name\"\n!else\n  InstallDir \"$PROGRAMFILES\\installer_name\"\n!endif\n\n; Pages\n!insertmacro MUI_PAGE_INSTFILES\n\n; Sections\nSection \"section_name\" section_index\n  # your code here\nSectionEnd\n\n; Functions\nFunction .onInit\n  MessageBox MB_OK \"Here comes a$\\n$\\rline-break!\"\nFunctionEnd"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/objectivec.m",
    "content": "@protocol Printing: someParent\n-(void) print;\n@end\n\n@interface Fraction: NSObject <Printing, NSCopying> {\n    int numerator;\n    int denominator;\n}\n@end\n\n@\"blah\\8\" @\"a\\222sd\\d\" @\"\\faw\\\"\\? \\' \\4 n\\\\\" @\"\\56\"\n@\"\\xSF42\"\n\n-(NSDecimalNumber*)addCount:(id)addObject{\n\nreturn [count decimalNumberByAdding:addObject.count];\n\n}\n\n  NS_DURING  NS_HANDLER NS_ENDHANDLER\n\n@try {\n   if (argc > 1)    {\n    @throw [NSException exceptionWithName:@\"Throwing a test exception\" reason:@\"Testing the @throw directive.\" userInfo:nil];\n   }\n} \n@catch (id theException) {\n    NSLog(@\"%@\", theException);\n    result = 1  ;\n} \n@finally {\n    NSLog(@\"This always happens.\");\n    result += 2 ;\n}\n\n    @synchronized(lock) {\n        NSLog(@\"Hello World\");\n    }\n\nstruct { @defs( NSObject) }\n\nchar *enc1 = @encode(int);\n\n         IBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class \n\n\n @class @protocol\n\n@public\n  // instance variables\n@package\n  // instance variables\n@protected\n  // instance variables\n@private\n  // instance variables\n\n  YES NO Nil nil\nNSApp()\nNSRectToCGRect (Protocol ProtocolFromString:\"NSTableViewDelegate\"))\n\n[SPPoint pointFromCGPoint:self.position]\n\nNSRoundDownToMultipleOfPageSize\n\n#import <stdio.h>\n\nint main( int argc, const char *argv[] ) {\n    printf( \"hello world\\n\" );\n    return 0;\n}\n\nNSChangeSpelling\n\n@\"0 != SUBQUERY(image, $x, 0 != SUBQUERY($x.bookmarkItems, $y, $y.@count == 0).@count).@count\"\n\n@selector(lowercaseString) @selector(uppercaseString:)\n\nNSFetchRequest *localRequest = [[NSFetchRequest alloc] init];  \nlocalRequest.entity = [NSEntityDescription entityForName:@\"VNSource\" inManagedObjectContext:context];  \nlocalRequest.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@\"resolution\" ascending:YES]];  \nNSPredicate *predicate = [NSPredicate predicateWithFormat:@\"0 != SUBQUERY(image, $x, 0 != SUBQUERY($x.bookmarkItems, $y, $y.@count == 0).@count).@count\"];\n[NSPredicate predicateWithFormat:]\nNSString *predicateString = [NSString stringWithFormat:@\"SELF beginsWith[cd] %@\", searchString];\nNSPredicate *pred = [NSPredicate predicateWithFormat:predicateString];\nNSArray *filteredKeys = [[myMutableDictionary allKeys] filteredArrayUsingPredicate:pred]; \n\nlocalRequest.predicate = [NSPredicate predicateWithFormat:@\"whichChart = %@\" argumentArray: listChartToDownload];\nlocalRequest.fetchBatchSize = 100;\narrayRequest    = [context  executeFetchRequest:localRequest error:&error1];\n\n[localRequest   release];\n\n#ifndef Nil\n#define Nil __DARWIN_NULL   /* id of Nil class */\n#endif\n\n@implementation MyObject\n- (unsigned int)areaOfWidth:(unsigned int)width\n                height:(unsigned int)height\n{\n  return width*height;\n}\n@end\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/ocaml.ml",
    "content": "(*\n * Example of early return implementation taken from\n * http://ocaml.janestreet.com/?q=node/91\n *)\n\nlet with_return (type t) (f : _ -> t) =\n  let module M =\n     struct exception Return of t end\n  in\n  let return = { return = (fun x -> raise (M.Return x)); } in\n  try f return with M.Return x -> x\n\n\n(* Function that uses the 'early return' functionality provided by `with_return` *)\nlet sum_until_first_negative list =\n  with_return (fun r ->\n    List.fold list ~init:0 ~f:(fun acc x ->\n      if x >= 0 then acc + x else r.return acc))"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/pascal.pas",
    "content": "(*****************************************************************************\n * A simple bubble sort program.  Reads integers, one per line, and prints   *\n * them out in sorted order.  Blows up if there are more than 49.            *\n *****************************************************************************)\nPROGRAM Sort(input, output);\n    CONST\n        (* Max array size. *)\n        MaxElts = 50;\n    TYPE \n        (* Type of the element array. *)\n        IntArrType = ARRAY [1..MaxElts] OF Integer;\n\n    VAR\n        (* Indexes, exchange temp, array size. *)\n        i, j, tmp, size: integer;\n\n        (* Array of ints *)\n        arr: IntArrType;\n\n    (* Read in the integers. *)\n    PROCEDURE ReadArr(VAR size: Integer; VAR a: IntArrType); \n        BEGIN\n            size := 1;\n            WHILE NOT eof DO BEGIN\n                readln(a[size]);\n                IF NOT eof THEN \n                    size := size + 1\n            END\n        END;\n\n    BEGIN\n        (* Read *)\n        ReadArr(size, arr);\n\n        (* Sort using bubble sort. *)\n        FOR i := size - 1 DOWNTO 1 DO\n            FOR j := 1 TO i DO \n                IF arr[j] > arr[j + 1] THEN BEGIN\n                    tmp := arr[j];\n                    arr[j] := arr[j + 1];\n                    arr[j + 1] := tmp;\n                END;\n\n        (* Print. *)\n        FOR i := 1 TO size DO\n            writeln(arr[i])\n    END.\n            "
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/perl.pl",
    "content": "#!/usr/bin/perl\n=begin\n perl example code for Ace\n=cut\n\nuse v5.10;\nuse strict;\nuse warnings;\n\nuse List::Util qw(first);\nmy @primes;\n\n# Put 2 as the first prime so we won't have an empty array\npush @primes, 2;\n\nfor my $number_to_check (3 .. 200) {\n    # Check if the current number is divisible by any previous prime\n    # if it is, skip to the next number.  Use first to bail out as soon\n    # as we find a prime that divides it.\n    next if (first {$number_to_check % $_ == 0} @primes);\n\n    # If we reached this point it means $number_to_check is not\n    # divisable by any prime number that came before it.\n    push @primes, $number_to_check;\n}\n\n# List out all of the primes\nsay join(', ', @primes);\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/perl6.p6",
    "content": "=begin comment\r\nPerl 6 example for ace\r\n=end comment\r\nclass Cook is Employee {\r\n    has @.utensils  is rw;\r\n    has @.cookbooks is rw;\r\n\r\n    method cook( $food ) {\r\n        say \"Cooking $food\";\r\n    }\r\n\r\n    method clean_utensils {\r\n        say \"Cleaning $_\" for @.utensils;\r\n    }\r\n}\r\n\r\nclass Baker is Cook {\r\n    method cook( $confection ) {\r\n        say \"Baking a tasty $confection\";\r\n    }\r\n}\r\n\r\nmy $cook = Cook.new(\r\n    utensils => <spoon ladle knife pan>,\r\n    cookbooks => 'The Joy of Cooking',\r\n    salary => 40000);\r\n\r\n$cook.cook( 'pizza' );       # OUTPUT: «Cooking pizza␤»\r\nsay $cook.utensils.perl;     # OUTPUT: «[\"spoon\", \"ladle\", \"knife\", \"pan\"]␤»\r\nsay $cook.cookbooks.perl;    # OUTPUT: «[\"The Joy of Cooking\"]␤»\r\nsay $cook.salary;            # OUTPUT: «40000␤»\r\n\r\nmy $baker = Baker.new(\r\n    utensils => 'self cleaning oven',\r\n    cookbooks => \"The Baker's Apprentice\",\r\n    salary => 50000);\r\n\r\n$baker.cook('brioche');      # OUTPUT: «Baking a tasty brioche␤»\r\nsay $baker.utensils.perl;    # OUTPUT: «[\"self cleaning oven\"]␤»\r\nsay $baker.cookbooks.perl;   # OUTPUT: «[\"The Baker's Apprentice\"]␤»\r\nsay $baker.salary;           # OUTPUT: «50000␤» "
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/pgsql.pgsql",
    "content": "\nBEGIN;\n\n/**\n* Samples from PostgreSQL src/tutorial/basics.source\n*/\nCREATE TABLE weather (\n\tcity\t\tvarchar(80),\n\ttemp_lo\t\tint,\t\t-- low temperature\n\ttemp_hi\t\tint,\t\t-- high temperature\n\tprcp\t\treal,\t\t-- precipitation\n\t\"date\"\t\tdate\n);\n\nCREATE TABLE cities (\n\tname\t\tvarchar(80),\n\tlocation\tpoint\n);\n\n\nINSERT INTO weather\n    VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');\n\nINSERT INTO cities\n    VALUES ('San Francisco', '(-194.0, 53.0)');\n\nINSERT INTO weather (city, temp_lo, temp_hi, prcp, \"date\")\n    VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');\n\nINSERT INTO weather (date, city, temp_hi, temp_lo)\n    VALUES ('1994-11-29', 'Hayward', 54, 37);\n\n\nSELECT city, (temp_hi+temp_lo)/2 AS temp_avg, \"date\" FROM weather;\n\nSELECT city, temp_lo, temp_hi, prcp, \"date\", location\n    FROM weather, cities\n    WHERE city = name;\n\n\n\n/**\n* Dollar quotes starting at the end of the line are colored as SQL unless\n* a special language tag is used. Dollar quote syntax coloring is implemented\n* for Perl, Python, JavaScript, and Json.\n*/\ncreate or replace function blob_content_chunked(\n    in p_data bytea, \n    in p_chunk integer)\nreturns setof bytea as $$\n-- Still SQL comments\ndeclare\n\tv_size integer = octet_length(p_data);\nbegin\n\tfor i in 1..v_size by p_chunk loop\n\t\treturn next substring(p_data from i for p_chunk);\n\tend loop;\nend;\n$$ language plpgsql stable;\n\n\n-- pl/perl\nCREATE FUNCTION perl_max (integer, integer) RETURNS integer AS $perl$\n    # perl comment...\n    my ($x,$y) = @_;\n    if (! defined $x) {\n        if (! defined $y) { return undef; }\n        return $y;\n    }\n    if (! defined $y) { return $x; }\n    if ($x > $y) { return $x; }\n    return $y;\n$perl$ LANGUAGE plperl;\n\n-- pl/python\nCREATE FUNCTION usesavedplan() RETURNS trigger AS $python$\n    # python comment...\n    if SD.has_key(\"plan\"):\n        plan = SD[\"plan\"]\n    else:\n        plan = plpy.prepare(\"SELECT 1\")\n        SD[\"plan\"] = plan\n$python$ LANGUAGE plpythonu;\n\n-- pl/v8 (javascript)\nCREATE FUNCTION plv8_test(keys text[], vals text[]) RETURNS text AS $javascript$\nvar o = {};\nfor(var i=0; i<keys.length; i++){\n o[keys[i]] = vals[i];\n}\nreturn JSON.stringify(o);\n$javascript$ LANGUAGE plv8 IMMUTABLE STRICT;\n\n-- json\nselect * from json_object_keys($json$\n{\n  \"f1\": 5,\n  \"f2\": \"test\",\n  \"f3\": {}\n}\n$json$);\n\n\n-- psql commands\n\\df cash*\n\n\n-- Some string samples.\nselect 'don''t do it now;' || 'maybe later';\nselect E'dont\\'t do it';\nselect length('some other''s stuff' || $$cat in hat's stuff $$);\n\nselect $$ strings\nover multiple \nlines - use dollar quotes\n$$;\n\nEND;\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/php.php",
    "content": "<?php\n\nfunction nfact($n) {\n    if ($n == 0) {\n        return 1;\n    }\n    else {\n        return $n * nfact($n - 1);\n    }\n}\n\necho \"\\n\\nPlease enter a whole number ... \";\n$num = trim(fgets(STDIN));\n\n// ===== PROCESS - Determing the factorial of the input number =====\n$output = \"\\n\\nFactorial \" . $num . \" = \" . nfact($num) . \"\\n\\n\";\necho $output;\n\n?>"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/php_laravel_blade.blade.php",
    "content": "<!-- Stored in resources/views/layouts/app.blade.php -->\n\n<html>\n    <head>\n        <title>App Name - @yield('title')</title>\n        <script>\n            var app = @json($array);\n        </script>\n    </head>\n    <body>\n        @extends('layouts.app')\n        @section('sidebar')\n            @parent\n\n            <p>This is appended to the master sidebar.</p>\n        @endsection\n \n        @if (count($records) === 1)\n            I have one record!\n        @elseif (count($records) > 1)\n            I have multiple records!\n        @else\n            I don't have any records!\n        @endif\n\n        @foreach ($users as $user)\n            @if ($user->type == 1)\n                @continue\n            @endif\n\n            <li>{{ $user->name }}</li>\n\n            @if ($user->number == 5)\n                @break\n            @endif\n        @endforeach\n\n        @foreach ($users as $user)\n            @continue($user->type == 1)\n\n            <li>{{ $user->name }}</li>\n\n            @break($user->number == 5)\n        @endforeach\n\n        <div>\n            @include('shared.errors')\n\n            <form>\n                <!-- Form Contents -->\n            </form>\n        </div>\n\n        @includeIf('view.name', ['some' => 'data'])\n\n        @env('local')\n            // The application is in the local environment...\n        @elseenv('testing')\n            // The application is in the testing environment...\n        @else\n            // The application is not in the local or testing environment...\n        @endenv\n\n        <div class=\"container\">\n            @yield('content')\n        </div>\n    </body>\n</html>"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/pig.pig",
    "content": "A = load 'mobydick.txt';\nB = foreach A generate flatten(TOKENIZE((chararray)$0)) as word;\nC = filter B by word matches '\\\\w+';\nD = group C by word;\nE = foreach D generate COUNT(C) as count, group as word;\nF = order E by count desc;\n-- one comment\n/* another comment */\ndump F;\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/plaintext.txt",
    "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n\nDuis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.\n\nUt wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.\n\nNam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.\n\nDuis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis.\n\nAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/powershell.ps1",
    "content": "# This is a simple comment\nfunction Hello($name) {\n  Write-host \"Hello $name\"\n}\n\nfunction add($left, $right=4) {\n    if ($right -ne 4) {\n        return $left\n    } elseif ($left -eq $null -and $right -eq 2) {\n        return 3\n    } else {\n        return 2\n    }\n}\n\n$number = 1 + 2;\n$number += 3\n\nWrite-Host Hello -name \"World\"\n\n$an_array = @(1, 2, 3)\n$a_hash = @{\"something\" = \"something else\"}\n\n& notepad .\\readme.md\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/praat.praat",
    "content": "form Highlighter test\n  sentence My_sentence This should all be a string\n  text My_text This should also all be a string\n  word My_word Only the first word is a string, the rest is invalid\n  boolean Binary 1\n  boolean Text no\n  boolean Quoted \"yes\"\n  comment This should be a string\n  real left_Range -123.6\n  positive right_Range_max 3.3\n  integer Int 4\n  natural Nat 4\nendform\n\n# External scripts\ninclude /path/to/file\nrunScript: \"/path/to/file\"\nexecute /path/to/file\n\nstopwatch\n\n# old-style procedure call\ncall oldStyle \"quoted\" 2 unquoted string\nassert oldStyle.local = 1\n\n# New-style procedure call with parens\n@newStyle(\"quoted\", 2, \"quoted string\")\nif praatVersion >= 5364 \n  # New-style procedure call with colon\n  @newStyle: \"quoted\", 2, \"quoted string\"\nendif\n\n# if-block with built-in variables\nif windows\n  # We are on Windows\nelsif unix = 1 or !macintosh\n  exitScript: \"We are on Linux\"\nelse macintosh == 1\n  exit We are on Mac\nendif\n\n# inline if with inline comment\nvar = if macintosh = 1 then 0 else 1 fi ; This is an inline comment\n\n# for-loop with explicit from using local variable\n# and paren-style function calls and variable interpolation\nn = numberOfSelected(\"Sound\")\nfor i from newStyle.local to n\n  sound'i' = selected(\"Sound\", i)\n  sound[i] = sound'i'\nendfor\n\nfor i from 1 to n\n  # Different styles of object selection\n  select sound'i'\n  sound = selected()\n  sound$ = selected$(\"Sound\")\n  select Sound 'sound$'\n  selectObject(sound[i])\n  selectObject: sound\n  \n  # Pause commands\n  beginPause(\"Viewing \" + sound$)\n  if i > 1\n    button = endPause(\"Stop\", \"Previous\",\n      ...if i = total_sounds then \"Finish\" else \"Next\" fi,\n      ...3, 1)\n  else\n    button = endPause(\"Stop\",\n      ...if i = total_sounds then \"Finish\" else \"Next\" fi,\n      ...2, 1)  \n  endif\n  editor_name$ = if total_textgrids then \"TextGrid \" else \"Sound \" fi + name$\n  nocheck editor 'editor_name$'\n    nocheck Close\n  nocheck endeditor\n  \n  # New-style standalone command call\n  Rename: \"SomeName\"\n\n  # Command call with assignment\n  duration = Get total duration\n  \n  # Multi-line command with modifier\n  pitch = noprogress To Pitch (ac): 0, 75, 15, \"no\",\n    ...0.03, 0.45, 0.01, 0.35, 0.14, 600\n    \n  # do-style command with assignment\n  minimum = do(\"Get minimum...\", 0, 0, \"Hertz\", \"Parabolic\")\n\n  # New-style multi-line command call with broken strings\n  table = Create Table with column names: \"table\", 0,\n    ...\"file subject speaker\n    ...f0 f1 f2 f3 \" +\n    ...\"duration response\"\n  \n  removeObject: pitch, table\n    \n  # Picture window commands\n  selectObject: sound\n  # do-style command\n  do(\"Select inner viewport...\", 1, 6, 0.5, 1.5)\n  Black\n  Draw... 0 0 0 0 \"no\" Curve\n  Draw inner box\n  Text bottom: \"yes\", sound$\n  Erase all\n  \n  # Demo window commands\n  demo Erase all\n  demo Select inner viewport... 0 100 0 100\n  demo Axes... 0 100 0 100\n  demo Paint rectangle... white 0 100 0 100\n  demo Text... 50 centre 50 half Click to finish\n  demoWaitForInput ( )\n  demo Erase all\n  demo Text: 50, \"centre\", 50, \"half\", \"Finished\"\nendfor\n\n# An old-style sendpraat block\nsendpraat Praat\n  ...'newline$' Create Sound as pure tone... \"tone\" 1 0 0.4 44100 440 0.2 0.01 0.01\n  ...'newline$' Play\n  ...'newline$' Remove\n\n# A new-style sendpraat block\nbeginSendPraat: \"Praat\"\n  Create Sound as pure tone: \"tone\", 1, 0, 0.4, 44100, 440, 0.2, 0.01, 0.01\n  duration = Get total duration\n  Remove\nendSendPraat: \"duration\"\nappendInfoLine: \"The generated sound lasted for \", duration, \"seconds\"\n\ntime = stopwatch\nclearinfo\necho This script took \nprint 'time' seconds to \nprintline execute.\n\n# Old-style procedure declaration\nprocedure oldStyle .str1$ .num .str2$\n  .local = 1\nendproc\n\n# New-style procedure declaration with parentheses\nprocedure newStyle (.str1$, .num, .str2$)\n  # Command with \"local\" variable\n  .local = Get total duration\nendproc\n\n# New-style procedure declaration with colon\nprocedure newStyle: .str1$, .num, .str2$\n  # Command with \"local\" variable\n  newStyle.local = Get total duration\nendproc\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/prolog.plg",
    "content": "partition([], _, [], []).\npartition([X|Xs], Pivot, Smalls, Bigs) :-\n    (   X @< Pivot ->\n        Smalls = [X|Rest],\n        partition(Xs, Pivot, Rest, Bigs)\n    ;   Bigs = [X|Rest],\n        partition(Xs, Pivot, Smalls, Rest)\n    ).\n \nquicksort([])     --> [].\nquicksort([X|Xs]) -->\n    { partition(Xs, X, Smaller, Bigger) },\n    quicksort(Smaller), [X], quicksort(Bigger).\n\nperfect(N) :-\n    between(1, inf, N), U is N // 2,\n    findall(D, (between(1,U,D), N mod D =:= 0), Ds),\n    sumlist(Ds, N)."
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/properties.properties",
    "content": "# You are reading the \".properties\" entry.\n! The exclamation mark can also mark text as comments.\n# The key and element characters #, !, =, and : are written with a preceding backslash to ensure that they are properly loaded.\nwebsite = http\\://en.wikipedia.org/\nlanguage = English\n# The backslash below tells the application to continue reading\n# the value onto the next line.\nmessage = Welcome to \\\n          Wikipedia!\n# Add spaces to the key\nkey\\ with\\ spaces = This is the value that could be looked up with the key \"key with spaces\".\n# Unicode\ntab : \\u0009\nempty-key=\nlast.line=value\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/protobuf.proto",
    "content": "message Point {\n  required int32 x = 1;\n  required int32 y = 2;\n  optional string label = 3;\n}\n\nmessage Line {\n  required Point start = 1;\n  required Point end = 2;\n  optional string label = 3;\n}\n\nmessage Polyline {\n  repeated Point point = 1;\n  optional string label = 2;\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/puppet.epp",
    "content": "define apache::vhost ($port, $docroot, $servername = $title, $vhost_name = '*') {\n  include apache\n  include apache::params\n  $vhost_dir = $apache::params::vhost_dir\n  file { \"${vhost_dir}/${servername}.conf\":\n      content => template('apache/vhost-default.conf.erb'),\n      owner   => 'www',\n      group   => 'www',\n      mode    => '644',\n      require => Package['httpd'],\n      notify  => Service['httpd'],\n  }\n}\n\ntype MyModule::Tree = Array[Variant[Data, Tree]]\n\nfunction apache::bool2http(Variant[String, Boolean] $arg) >> String {\n  case $arg {\n    false, undef, /(?i:false)/ : { 'Off' }\n    true, /(?i:true)/          : { 'On' }\n    default               : { \"$arg\" }\n  }\n}\n\n# A class with parameters\nclass apache (String $version = 'latest') {\n  package {'httpd':\n    ensure => $version, # Using the class parameter from above\n    before => File['/etc/httpd.conf'],\n  }\n  file {'/etc/httpd.conf':\n    ensure  => file,\n    owner   => 'httpd',\n    content => template('apache/httpd.conf.erb'), # Template from a module\n  }\n  service {'httpd':\n    ensure    => running,\n    enable    => true,\n    subscribe => File['/etc/httpd.conf'],\n  }\n}\n\n\nif $is_virtual {\n  warning( 'Tried to include class ntp on virtual machine; this node might be misclassified.' )\n}\nelsif $operatingsystem == 'Darwin' {\n  warning( 'This NTP module does not yet work on our Mac laptops.' )\nelse {\n  include ntp\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/python.py",
    "content": "#!/usr/local/bin/python\n\nimport string, sys\n\n# If no arguments were given, print a helpful message\nif len(sys.argv)==1:\n    print '''Usage:\ncelsius temp1 temp2 ...'''\n    sys.exit(0)\n\n# Loop over the arguments\nfor i in sys.argv[1:]:\n    try:\n        fahrenheit=float(string.atoi(i))\n    except string.atoi_error:\n        print repr(i), \"not a numeric value\"\n    else:\n        celsius=(fahrenheit-32)*5.0/9.0\n        print '%i\\260F = %i\\260C' % (int(fahrenheit), int(celsius+.5))"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/r.r",
    "content": "Call:\nlm(formula = y ~ x)\n \nResiduals:\n1       2       3       4       5       6\n3.3333 -0.6667 -2.6667 -2.6667 -0.6667  3.3333\n \nCoefficients:\n            Estimate Std. Error t value Pr(>|t|)\n(Intercept)  -9.3333     2.8441  -3.282 0.030453 *\nx             7.0000     0.7303   9.585 0.000662 ***\n---\nSignif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n \nResidual standard error: 3.055 on 4 degrees of freedom\nMultiple R-squared: 0.9583,     Adjusted R-squared: 0.9478\nF-statistic: 91.88 on 1 and 4 DF,  p-value: 0.000662\n \n> par(mfrow=c(2, 2))     # Request 2x2 plot layout\n> plot(lm_1)             # Diagnostic plot of regression model"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/razor.cshtml",
    "content": "@* razor mode *@\n@{\n\tLayout = \"~/layout\"\n\t@: <a>\n\t@Layout\n\t@: </a>\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/rdoc.Rd",
    "content": "\\name{picker}\n\\alias{picker}\n\\title{Create a picker control}\n\\description{\n  Create a picker control to enable manipulation of plot variables based on a set of fixed choices.\n}\n\n\\usage{\npicker(..., initial = NULL, label = NULL)\n}\n\n\n\\arguments{\n  \\item{\\dots}{\n    Arguments containing objects to be presented as choices for the picker (or a list containing the choices). If an element is named then the name is used to display it within the picker. If an element is not named then it is displayed within the picker using \\code{\\link{as.character}}. \n}\n  \\item{initial}{\n    Initial value for picker. Value must be present in the list of choices specified. If not specified defaults to the first choice.\n}\n  \\item{label}{\n    Display label for picker. Defaults to the variable name if not specified.\n}\n}\n\n\\value{\n  An object of class \"manipulator.picker\" which can be passed to the \\code{\\link{manipulate}} function.\n}\n\n\\seealso{\n\\code{\\link{manipulate}}, \\code{\\link{slider}}, \\code{\\link{checkbox}}, \\code{\\link{button}}\n}\n\n\n\\examples{\n\\dontrun{\n\n## Filtering data with a picker\nmanipulate(\n  barplot(as.matrix(longley[,factor]), \n          beside = TRUE, main = factor),\n  factor = picker(\"GNP\", \"Unemployed\", \"Employed\"))\n\n## Create a picker with labels\nmanipulate(\n  plot(pressure, type = type), \n  type = picker(\"points\" = \"p\", \"line\" = \"l\", \"step\" = \"s\"))\n  \n## Picker with groups\nmanipulate(\n  barplot(as.matrix(mtcars[group,\"mpg\"]), beside=TRUE),\n  group = picker(\"Group 1\" = 1:11, \n                 \"Group 2\" = 12:22, \n                 \"Group 3\" = 23:32))\n\n## Histogram w/ picker to select type\nrequire(lattice)\nrequire(stats)\nmanipulate(\n  histogram(~ height | voice.part, \n            data = singer, type = type),\n  type = picker(\"percent\", \"count\", \"density\"))\n\n}\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/red.red",
    "content": "Red []\r\ninfo: func ['fn  /name /intro /args /refinements /locals /return /spec \r\n\t/arg-num /arg-names /arg-types /ref-names /ref-types /ref-num /type\r\n\t/local intr ars refs locs ret arg ref typ\r\n][\r\n\tintr: copy \"\" ars: make map! copy [] refs: make map! copy [] locs: copy [] ret: copy [] typ: ref-arg: ref-arg-type: none\r\n\tif lit-word? fn [fn: to-word fn]\r\n\tunless find [op! native! function! action!] type?/word get fn [\r\n\t\tcause-error 'user 'message [\"Only function types accepted!\"]\r\n\t]\r\n\tout: make map! copy []\r\n\tspecs: spec-of get fn \r\n\tparse specs [\r\n\t\topt [set intr string!]\r\n\t\tany [set arg [word! | lit-word!] opt [set typ block!] opt string! (put ars arg either typ [typ][[any-type!]])]\r\n\t\tany [set ref refinement! [\r\n\t\t\tif (ref <> /local) (put refs to-lit-word ref make map! copy []) \r\n\t\t\t\topt string! \r\n\t\t\t\tany [set ref-arg word! opt [set ref-arg-type block!] \r\n\t\t\t\t\t(put refs/(to-word ref) to-lit-word ref-arg either ref-arg-type [ref-arg-type][[any-type!]])\r\n\t\t\t\t]\r\n\t\t\t|\tany [set loc word! (append locs loc) opt string!] \r\n\t\t\t\topt [set-word! set ret block!]\r\n\t\t]]\r\n\t\t\r\n\t\t(\r\n\t\tout: case [\r\n\t\t\tname\t\t[to-word fn]\r\n\t\t\tintro \t\t[intr] \r\n\t\t\targs\t\t[ars]\r\n\t\t\targ-num\t\t[length? ars]\r\n\t\t\targ-names \t[copy keys-of ars] \r\n\t\t\targ-types\t[copy values-of ars]\r\n\t\t\trefinements [refs] \r\n\t\t\tref-names\t[copy keys-of refs]\r\n\t\t\tref-types\t[copy values-of refs]\r\n\t\t\tref-num\t\t[length? refs]\r\n\t\t\tlocals \t\t[locs] \r\n\t\t\treturn \t\t[ret]\r\n\t\t\tspec\t\t[specs]\r\n\t\t\ttrue \t\t[\r\n\t\t\t\tmake object!  [\r\n\t\t\t\t\tname: \t\tto-word fn \r\n\t\t\t\t\tintro: \t\tintr \r\n\t\t\t\t\targs: \t\tars \r\n\t\t\t\t\trefinements: refs \r\n\t\t\t\t\tlocals: \tlocs \r\n\t\t\t\t\treturn: \tret \r\n\t\t\t\t\tspec: \t\tspecs \r\n\t\t\t\t\ttype: \t\ttype? get fn\r\n\t\t\t\t\targ-num: \tlength? args\r\n\t\t\t\t\targ-names: \tcopy keys-of args\r\n\t\t\t\t\targ-types: \tcopy values-of args\r\n\t\t\t\t\tref-names: \tcopy keys-of refinements\r\n\t\t\t\t\tref-types: \tcopy values-of refinements\r\n\t\t\t\t\tref-num:\tlength? refinements\r\n\t\t\t\t]\r\n\t\t\t]\r\n\t\t])\r\n\t]\r\n\tout\r\n]\r\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/rhtml.Rhtml",
    "content": "<html>\n\n<head>\n<title>Title</title>\n</head>\n\n<body>\n\n<p>This is an R HTML document. When you click the <b>Knit HTML</b> button a web page will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:</p>\n\n<!--begin.rcode\nsummary(cars)\nend.rcode-->\n\n<p>You can also embed plots, for example:</p>\n\n<!--begin.rcode fig.width=7, fig.height=6\nplot(cars)\nend.rcode-->\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/rst.rst",
    "content": "==========================================\n*reStructuredText* Highlighter for **Ace**\n==========================================\n\n.. seealso::\n\n   http://docutils.sourceforge.net/docs/user/rst/quickstart.html\n\n\nReStructuredText Primer\n=======================\n\n:Author: Richard Jones\n:Version: $Revision: 5801 $\n:Copyright: This document has been placed in the public domain.\n\n.. contents::\n\n\nThe text below contains links that look like \"(quickref__)\".  These\nare relative links that point to the `Quick reStructuredText`_ user\nreference.  If these links don't work, please refer to the `master\nquick reference`_ document.\n\n__\n.. _Quick reStructuredText: quickref.html\n.. _master quick reference:\n   http://docutils.sourceforge.net/docs/user/rst/quickref.html\n\n.. Note:: This document is an informal introduction to\n   reStructuredText.  The `What Next?`_ section below has links to\n   further resources, including a formal reference.\n\n\nStructure\n---------\n\nFrom the outset, let me say that \"Structured Text\" is probably a bit\nof a misnomer.  It's more like \"Relaxed Text\" that uses certain\nconsistent patterns.  These patterns are interpreted by a HTML\nconverter to produce \"Very Structured Text\" that can be used by a web\nbrowser.\n\nThe most basic pattern recognised is a **paragraph** (quickref__).\nThat's a chunk of text that is separated by blank lines (one is\nenough).  Paragraphs must have the same indentation -- that is, line\nup at their left edge.  Paragraphs that start indented will result in\nindented quote paragraphs. For example::\n\n  This is a paragraph.  It's quite\n  short.\n\n     This paragraph will result in an indented block of\n     text, typically used for quoting other text.\n\n  This is another one.\n\nResults in:\n\n  This is a paragraph.  It's quite\n  short.\n\n     This paragraph will result in an indented block of\n     text, typically used for quoting other text.\n\n  This is another one.\n\n__ quickref.html#paragraphs\n\n\nText styles\n-----------\n\n(quickref__)\n\n__ quickref.html#inline-markup\n\nInside paragraphs and other bodies of text, you may additionally mark\ntext for *italics* with \"``*italics*``\" or **bold** with\n\"``**bold**``\".  This is called \"inline markup\".\n\nIf you want something to appear as a fixed-space literal, use\n\"````double back-quotes````\".  Note that no further fiddling is done\ninside the double back-quotes -- so asterisks \"``*``\" etc. are left\nalone.\n\nIf you find that you want to use one of the \"special\" characters in\ntext, it will generally be OK -- reStructuredText is pretty smart.\nFor example, this lone asterisk * is handled just fine, as is the\nasterisk in this equation: 5*6=30.  If you actually\nwant text \\*surrounded by asterisks* to **not** be italicised, then\nyou need to indicate that the asterisk is not special.  You do this by\nplacing a backslash just before it, like so \"``\\*``\" (quickref__), or\nby enclosing it in double back-quotes (inline literals), like this::\n\n    ``*``\n\n__ quickref.html#escaping\n\n.. Tip:: Think of inline markup as a form of (parentheses) and use it\n   the same way: immediately before and after the text being marked\n   up.  Inline markup by itself (surrounded by whitespace) or in the\n   middle of a word won't be recognized.  See the `markup spec`__ for\n   full details.\n\n__ ../../ref/rst/restructuredtext.html#inline-markup\n\n\nLists\n-----\n\nLists of items come in three main flavours: **enumerated**,\n**bulleted** and **definitions**.  In all list cases, you may have as\nmany paragraphs, sublists, etc. as you want, as long as the left-hand\nside of the paragraph or whatever aligns with the first line of text\nin the list item.\n\nLists must always start a new paragraph -- that is, they must appear\nafter a blank line.\n\n**enumerated** lists (numbers, letters or roman numerals; quickref__)\n__ quickref.html#enumerated-lists\n\nStart a line off with a number or letter followed by a period \".\",\nright bracket \")\" or surrounded by brackets \"( )\" -- whatever you're\ncomfortable with.  All of the following forms are recognised::\n\n  1. numbers\n\n  A. upper-case letters\n     and it goes over many lines\n\n     with two paragraphs and all!\n\n  a. lower-case letters\n\n     3. with a sub-list starting at a different number\n     4. make sure the numbers are in the correct sequence though!\n\n  I. upper-case roman numerals\n\n  i. lower-case roman numerals\n\n  (1) numbers again\n\n  1) and again\n\nResults in (note: the different enumerated list styles are not\nalways supported by every web browser, so you may not get the full\neffect here):\n\n1. numbers\n\nA. upper-case letters\n   and it goes over many lines\n\n   with two paragraphs and all!\n\na. lower-case letters\n\n   3. with a sub-list starting at a different number\n   4. make sure the numbers are in the correct sequence though!\n\nI. upper-case roman numerals\n\ni. lower-case roman numerals\n\n(1) numbers again\n\n1) and again\n\n**bulleted** lists (quickref__)\n__ quickref.html#bullet-lists\n\nJust like enumerated lists, start the line off with a bullet point\ncharacter - either \"-\", \"+\" or \"\\*\"::\n\n  * a bullet point using \"\\*\"\n\n    - a sub-list using \"-\"\n\n      + yet another sub-list\n\n    - another item\n\nResults in:\n\n* a bullet point using \"\\*\"\n\n  - a sub-list using \"-\"\n\n    + yet another sub-list\n\n  - another item\n\n**definition** lists (quickref__)\n__ quickref.html#definition-lists\n\nUnlike the other two, the definition lists consist of a term, and\nthe definition of that term.  The format of a definition list is::\n\n  what\n    Definition lists associate a term with a definition.\n\n  *how*\n    The term is a one-line phrase, and the definition is one or more\n    paragraphs or body elements, indented relative to the term.\n    Blank lines are not allowed between term and definition.\n\nResults in:\n\nwhat\n  Definition lists associate a term with a definition.\n\n*how*\n  The term is a one-line phrase, and the definition is one or more\n  paragraphs or body elements, indented relative to the term.\n  Blank lines are not allowed between term and definition.\n\n\nPreformatting (code samples)\n----------------------------\n(quickref__)\n\n__ quickref.html#literal-blocks\n\nTo just include a chunk of preformatted, never-to-be-fiddled-with\ntext, finish the prior paragraph with \"``::``\".  The preformatted\nblock is finished when the text falls back to the same indentation\nlevel as a paragraph prior to the preformatted block.  For example::\n\n  An example::\n\n      Whitespace, newlines, blank lines, and all kinds of markup\n        (like *this* or \\this) is preserved by literal blocks.\n    Lookie here, I've dropped an indentation level\n    (but not far enough)\n\n  no more example\n\nResults in:\n\nAn example::\n\n    Whitespace, newlines, blank lines, and all kinds of markup\n      (like *this* or \\this) is preserved by literal blocks.\n  Lookie here, I've dropped an indentation level\n  (but not far enough)\n\nno more example\n\nNote that if a paragraph consists only of \"``::``\", then it's removed\nfrom the output::\n\n  ::\n\n      This is preformatted text, and the\n      last \"::\" paragraph is removed\n\nResults in:\n\n::\n\n    This is preformatted text, and the\n    last \"::\" paragraph is removed\n\n\nSections\n--------\n\n(quickref__)\n\n__ quickref.html#section-structure\n\nTo break longer text up into sections, you use **section headers**.\nThese are a single line of text (one or more words) with adornment: an\nunderline alone, or an underline and an overline together, in dashes\n\"``-----``\", equals \"``======``\", tildes \"``~~~~~~``\" or any of the\nnon-alphanumeric characters ``= - ` : ' \" ~ ^ _ * + # < >`` that you\nfeel comfortable with.  An underline-only adornment is distinct from\nan overline-and-underline adornment using the same character.  The\nunderline/overline must be at least as long as the title text.  Be\nconsistent, since all sections marked with the same adornment style\nare deemed to be at the same level::\n\n  Chapter 1 Title\n  ===============\n\n  Section 1.1 Title\n  -----------------\n\n  Subsection 1.1.1 Title\n  ~~~~~~~~~~~~~~~~~~~~~~\n\n  Section 1.2 Title\n  -----------------\n\n  Chapter 2 Title\n  ===============\n\nThis results in the following structure, illustrated by simplified\npseudo-XML::\n\n    <section>\n        <title>\n            Chapter 1 Title\n        <section>\n            <title>\n                Section 1.1 Title\n            <section>\n                <title>\n                    Subsection 1.1.1 Title\n        <section>\n            <title>\n                Section 1.2 Title\n    <section>\n        <title>\n            Chapter 2 Title\n\n(Pseudo-XML uses indentation for nesting and has no end-tags.  It's\nnot possible to show actual processed output, as in the other\nexamples, because sections cannot exist inside block quotes.  For a\nconcrete example, compare the section structure of this document's\nsource text and processed output.)\n\nNote that section headers are available as link targets, just using\ntheir name.  To link to the Lists_ heading, I write \"``Lists_``\".  If\nthe heading has a space in it like `text styles`_, we need to quote\nthe heading \"```text styles`_``\".\n\n\nDocument Title / Subtitle\n`````````````````````````\n\nThe title of the whole document is distinct from section titles and\nmay be formatted somewhat differently (e.g. the HTML writer by default\nshows it as a centered heading).\n\nTo indicate the document title in reStructuredText, use a unique adornment\nstyle at the beginning of the document.  To indicate the document subtitle,\nuse another unique adornment style immediately after the document title.  For\nexample::\n\n    ================\n     Document Title\n    ================\n    ----------\n     Subtitle\n    ----------\n\n    Section Title\n    =============\n\n    ...\n\nNote that \"Document Title\" and \"Section Title\" above both use equals\nsigns, but are distict and unrelated styles.  The text of\noverline-and-underlined titles (but not underlined-only) may be inset\nfor aesthetics.\n\n\nImages\n------\n\n(quickref__)\n\n__ quickref.html#directives\n\nTo include an image in your document, you use the the ``image`` directive__.\nFor example::\n\n  .. image:: images/biohazard.png\n\nresults in:\n\n.. image:: images/biohazard.png\n\nThe ``images/biohazard.png`` part indicates the filename of the image\nyou wish to appear in the document. There's no restriction placed on\nthe image (format, size etc).  If the image is to appear in HTML and\nyou wish to supply additional information, you may::\n\n  .. image:: images/biohazard.png\n     :height: 100\n     :width: 200\n     :scale: 50\n     :alt: alternate text\n\nSee the full `image directive documentation`__ for more info.\n\n__ ../../ref/rst/directives.html\n__ ../../ref/rst/directives.html#images\n\n\nWhat Next?\n----------\n\nThis primer introduces the most common features of reStructuredText,\nbut there are a lot more to explore.  The `Quick reStructuredText`_\nuser reference is a good place to go next.  For complete details, the\n`reStructuredText Markup Specification`_ is the place to go [#]_.\n\nUsers who have questions or need assistance with Docutils or\nreStructuredText should post a message to the Docutils-users_ mailing\nlist.\n\n.. [#] If that relative link doesn't work, try the master document:\n   http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html.\n\n.. _reStructuredText Markup Specification:\n   ../../ref/rst/restructuredtext.html\n.. _Docutils-users: ../mailing-lists.html#docutils-users\n.. _Docutils project web site: http://docutils.sourceforge.net/\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/ruby.rb",
    "content": "#!/usr/bin/ruby\n\n# Program to find the factorial of a number\ndef fact(n)\n    if n == 0\n        1\n    else\n        n * fact(n-1)\n    end\nend\n\nputs fact(ARGV[0].to_i)\n\nclass Range\n  def to_json(*a)\n    {\n      'json_class'   => self.class.name, # = 'Range'\n      'data'         => [ first, last, exclude_end? ]\n    }.to_json(*a)\n  end\nend\n\n{:id => ?\", :key => \"value\"}\n\n\n    herDocs = [<<'FOO', <<BAR, <<-BAZ, <<-`EXEC`] #comment\n  FOO #{literal}\nFOO\n  BAR #{fact(10)}\nBAR\n  BAZ indented\n    BAZ\n        echo hi\n    EXEC\nputs herDocs"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/rust.rs",
    "content": "use core::rand::RngUtil;\n\nfn main() {\n    for [\"Alice\", \"Bob\", \"Carol\"].each |&name| {\n        do spawn {\n            let v = rand::Rng().shuffle([1, 2, 3]);\n            for v.each |&num| {\n                print(fmt!(\"%s says: '%d'\\n\", name, num + 1))\n            }\n        }\n    }\n}\n\nfn map<T, U>(vector: &[T], function: &fn(v: &T) -> U) -> ~[U] {\n    let mut accumulator = ~[];\n    for vec::each(vector) |element| {\n        accumulator.push(function(element));\n    }\n    return accumulator;\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/sass.sass",
    "content": "// sass ace mode;\n\n@import url(http://fonts.googleapis.com/css?family=Ace:700)\n\nhtml, body\n  :background-color #ace\n  text-align: center\n  height: 100%\n  /*;*********;\n    ;comment  ;\n    ;*********;\n\n.toggle\n  $size: 14px\n\n  :background url(http://subtlepatterns.com/patterns/dark_stripes.png)\n  border-radius: 8px\n  height: $size\n\n  &:before\n    $radius: $size * 0.845\n    $glow: $size * 0.125\n\n    box-shadow: 0 0 $glow $glow / 2 #fff\n    border-radius: $radius\n    \n    &:active\n      ~ .button\n        box-shadow: 0 15px 25px -4px rgba(0,0,0,0.4)      \n      ~ .label\n        font-size: 40px\n        color: rgba(0,0,0,0.45)\n\n    &:checked      \n      ~ .button\n        box-shadow: 0 15px 25px -4px #ace\n      ~ .label\n        font-size: 40px\n        color: #c9c9c9\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/scad.scad",
    "content": "// ace can highlight scad!\nmodule Element(xpos, ypos, zpos){\n\ttranslate([xpos,ypos,zpos]){\n\t\tunion(){\n\t\t\tcube([10,10,4],true);\n\t\t\tcylinder(10,15,5);\n\t\t\ttranslate([0,0,10])sphere(5);\n\t\t}\n\t}\n}\n\nunion(){\n\tfor(i=[0:30]){\n\t\t# Element(0,0,0);\n\t\tElement(15*i,0,0);\n\t}\n}\n\nfor (i = [3, 5, 7, 11]){\n\trotate([i*10,0,0])scale([1,1,i])cube(10);\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/scala.scala",
    "content": "// http://www.scala-lang.org/node/54\n\npackage examples.actors\n\nimport scala.actors.Actor\nimport scala.actors.Actor._\n\nabstract class PingMessage\ncase object Start extends PingMessage\ncase object SendPing extends PingMessage\ncase object Pong extends PingMessage\n\nabstract class PongMessage\ncase object Ping extends PongMessage\ncase object Stop extends PongMessage\n\nobject pingpong extends Application {\n  val pong = new Pong\n  val ping = new Ping(100000, pong)\n  ping.start\n  pong.start\n  ping ! Start\n}\n\nclass Ping(count: Int, pong: Actor) extends Actor {\n  def act() {\n    println(\"Ping: Initializing with count \"+count+\": \"+pong)\n    var pingsLeft = count\n    loop {\n      react {\n        case Start =>\n          println(\"Ping: starting.\")\n          pong ! Ping\n          pingsLeft = pingsLeft - 1\n        case SendPing =>\n          pong ! Ping\n          pingsLeft = pingsLeft - 1\n        case Pong =>\n          if (pingsLeft % 1000 == 0)\n            println(\"Ping: pong from: \"+sender)\n          if (pingsLeft > 0)\n            self ! SendPing\n          else {\n            println(\"Ping: Stop.\")\n            pong ! Stop\n            exit('stop)\n          }\n      }\n    }\n  }\n}\n\nclass Pong extends Actor {\n  def act() {\n    var pongCount = 0\n    loop {\n      react {\n        case Ping =>\n          if (pongCount % 1000 == 0)\n            println(\"Pong: ping \"+pongCount+\" from \"+sender)\n          sender ! Pong\n          pongCount = pongCount + 1\n        case Stop =>\n          println(\"Pong: Stop.\")\n          exit('stop)\n      }\n    }\n  }\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/scheme.scm",
    "content": "(define (prompt-for-cd)\n   \"Prompts\n    for CD\"\n   (prompt-read \"Title\" 1.53 1 2/4 1.7 1.7e0 2.9E-4 +42 -7 #b001 #b001/100 #o777 #O777 #xabc55 #c(0 -5.6))\n   (prompt-read \"Artist\")\n   (or (parse-integer (prompt-read \"Rating\") #:junk-allowed #t) 0)\n  (if x (format #t \"yes\") (format #f \"no\") ;and here comment\n  ) \n  ;; second line comment\n  '(+ 1 2)\n  (position-if-not char-set:whitespace line #:start beg))\n  (quote (privet 1 2 3))\n  '(hello world)\n  (* 5 7)\n  (1 2 34 5)\n  (#:use \"aaaa\")\n  (let ((x 10) (y 20))\n    (display (+ x y))\n  ) \n\n  \"asdad\\0eqweqe\"\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/scss.scss",
    "content": "/* style.scss */\n\n#navbar {\n    $navbar-width: 800px;\n    $items: 5;\n    $navbar-color: #ce4dd6;\n\n    width: $navbar-width;\n    border-bottom: 2px solid $navbar-color;\n\n    li {\n        float: left;\n        width: $navbar-width/$items - 10px;\n\n        background-color: lighten($navbar-color, 20%);\n        &:hover {\n            background-color: lighten($navbar-color, 10%);\n        }\n    }\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/sh.sh",
    "content": "#!/bin/sh\n\n# Script to open a browser to current branch\n# Repo formats:\n# ssh   git@github.com:richo/gh_pr.git\n# http  https://richoH@github.com/richo/gh_pr.git\n# git   git://github.com/richo/gh_pr.git\n\nusername=`git config --get github.user`\n\nget_repo() {\n    git remote -v | grep ${@:-$username} | while read remote; do\n      if repo=`echo $remote | grep -E -o \"git@github.com:[^ ]*\"`; then\n          echo $repo | sed -e \"s/^git@github\\.com://\" -e \"s/\\.git$//\"\n          exit 1\n      fi\n      if repo=`echo $remote | grep -E -o \"https?://([^@]*@)?github.com/[^ ]*\\.git\"`; then\n          echo $repo | sed -e \"s|^https?://||\" -e \"s/^.*github\\.com\\///\" -e \"s/\\.git$//\"\n          exit 1\n      fi\n      if repo=`echo $remote | grep -E -o \"git://github.com/[^ ]*\\.git\"`; then\n          echo $repo | sed -e \"s|^git://github.com/||\" -e \"s/\\.git$//\"\n          exit 1\n      fi\n    done\n\n    if [ $? -eq 0 ]; then\n        echo \"Couldn't find a valid remote\" >&2\n        exit 1\n    fi\n}\n\necho ${#x[@]}\n\nif repo=`get_repo $@`; then\n    branch=`git symbolic-ref HEAD 2>/dev/null`\n    echo \"http://github.com/$repo/pull/new/${branch##refs/heads/}\"\nelse\n    exit 1\nfi\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/sjs.sjs",
    "content": "var { each, map } = require('sjs:sequence');\nvar { get } = require('sjs:http');\n\nfunction foo(items, nada) {\n    var component = { name: \"Ace\", role: \"Editor\" };\n    console.log(\"\n        Welcome, #{component.name}\n    \".trim());\n\n    logging.debug(`Component added: $String(component) (${component})`);\n\n    console.log(`\n        Welcome, {${function() {\n            return { x: 1, y: \"why?}\"};\n        }()}\n    `.trim());\n\n    waitfor {\n        items .. each.par { |item|\n            get(item);\n        }\n    } and {\n        var lengths = items .. map(i -> i.length);\n    } or {\n        hold(1500);\n        throw new Error(\"timed out\");\n    }\n}\t// Real Tab.\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/slim.slim",
    "content": "doctype html\nhtml\n  head\n    title Slim Examples\n    meta name=\"keywords\" content=\"template language\"\n    meta name=\"author\" content=author\n    link rel=\"icon\" type=\"image/png\" href=file_path(\"favicon.png\")\n    javascript:\n        alert('Slim supports embedded javascript!')\n\n  body\n    h1 Markup examples\n\n    #content\n      p This example shows you how a basic Slim file looks.\n\n    == yield\n\n    - if items.any?\n      table#items\n        - for item in items\n          tr\n            td.name = item.name\n            td.price = item.price\n    - else\n      p No items found. Please add some inventory.\n        Thank you!\n\n    div id=\"footer\"\n      == render 'footer'\n      | Copyright &copy; #{@year} #{@author}\n        indenting test\n\n    - @page_current = true"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/smarty.smarty",
    "content": "{foreach $foo as $bar}\n  <a href=\"{$bar.zig}\">{$bar.zag}</a>\n  <a href=\"{$bar.zig2}\">{$bar.zag2}</a>\n  <a href=\"{$bar.zig3}\">{$bar.zag3}</a>\n{foreachelse}\n  There were no rows found.\n{/foreach}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/snippets.snippets",
    "content": "# Function\nsnippet fun\n\tfunction ${1?:function_name}(${2:argument}) {\n\t\t${3:// body...}\n\t}\n# Anonymous Function\nregex /((=)\\s*|(:)\\s*|(\\()|\\b)/f/(\\))?/\nname f\n\tfunction${M1?: ${1:functionName}}($2) {\n\t\t${0:$TM_SELECTED_TEXT}\n\t}${M2?;}${M3?,}${M4?)}\n# Immediate function\ntrigger \\(?f\\(\nendTrigger \\)?\nsnippet f(\n\t(function(${1}) {\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\n\t}(${1}));\n# if\nsnippet if\n\tif (${1:true}) {\n\t\t${0}\n\t}\n\t\n\t\n\t"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/soy_template.soy",
    "content": "/**\n * Greets a person using \"Hello\" by default.\n * @param name The name of the person.\n * @param? greetingWord Optional greeting word to use instead of \"Hello\".\n */\n{template .helloName #eee}\n  {if not $greetingWord}\n    Hello {$name}!\n  {else}\n    {$greetingWord} {$name}!\n  {/if}\n{/template}\n\n/**\n * Greets a person and optionally a list of other people.\n * @param name The name of the person.\n * @param additionalNames The additional names to greet. May be an empty list.\n */\n{template .helloNames}\n  // Greet the person.\n  {call .helloName data=\"all\" /}<br>\n  // Greet the additional people.\n  {foreach $additionalName in $additionalNames}\n    {call .helloName}\n      {param name: $additionalName /}\n    {/call}\n    {if not isLast($additionalName)}\n      <br>  // break after every line except the last\n    {/if}\n  {ifempty}\n    No additional people to greet.\n  {/foreach}\n{/template}\n\n\n{/foreach}\n{if length($items) > 5}\n{msg desc=\"Says hello to the user.\"}\n\n\n{namespace ns autoescape=\"contextual\"}\n\n/** Example. */\n{template .example}\n  foo is {$ij.foo}\n{/template}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/space.space",
    "content": "query\n count 10\n created 2011-06-21T08:10:46Z\n lang en-US\n results\n  photo\n   0\n    farm 6\n    id 5855620975\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 32021554@N04\n    secret f1f5e8515d\n    server 5110\n    title 7087 bandit cat\n   1\n    farm 4\n    id 5856170534\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 32021554@N04\n    secret ff1efb2a6f\n    server 3217\n    title 6975 rusty cat\n   2\n    farm 6\n    id 5856172972\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 51249875@N03\n    secret 6c6887347c\n    server 5192\n    title watermarked-cats\n   3\n    farm 6\n    id 5856168328\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 32021554@N04\n    secret 0c1cfdf64c\n    server 5078\n    title 7020 mandy cat\n   4\n    farm 3\n    id 5856171774\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 32021554@N04\n    secret 7f5a3180ab\n    server 2696\n    title 7448 bobby cat\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/sparql.rq",
    "content": "PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n\n# 1. Directors of movies starring Brad Pitt\n# Datasource: http://fragments.dbpedia.org/*/en\nSELECT ?movie ?title ?name\nWHERE {\n  ?movie dbpedia-owl:starring [ rdfs:label \"Brad Pitt\"@en ];\n         rdfs:label ?title;\n         dbpedia-owl:director [ rdfs:label ?name ].\n  FILTER LANGMATCHES(LANG(?title), \"EN\")\n  FILTER LANGMATCHES(LANG(?name),  \"EN\")\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/sql.sql",
    "content": "SELECT city, COUNT(id) AS users_count\nFROM users\nWHERE group_name = 'salesman'\nAND created > '2011-05-21'\nGROUP BY 1\nORDER BY 2 DESC"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/sqlserver.sqlserver",
    "content": "-- =============================================\n-- Author:\t\tMorgan Yarbrough\n-- Create date: 4/27/2015\n-- Description:\tTest procedure that shows off language features.\n-- \t\t\t\tIncludes non-standard folding with region comments using either\n-- \t\t\t\tline comments or block comments (both are demonstrated below).\n--\t\t\t\tThis mode imitates SSMS and it designed to be used with SQL Server theme.\n-- =============================================\nCREATE PROCEDURE dbo.TestProcedure\n\t\n--#region parameters\n\t@vint INT = 1\n\t,@vdate DATE = NULL\n\t,@vdatetime DATETIME = DATEADD(dd, 1, GETDATE())\n\t,@vvarchar VARCHAR(MAX) = ''\n--#endregion\n\nAS\nBEGIN\n\n\t/*#region set statements */\n\tSET NOCOUNT ON;\n\tSET XACT_ABORT ON;\n\tSET QUOTED_IDENTIFIER ON;\n\t/*#endregion*/\n\t\n\t/**\n\t * These comments will produce a fold widget\n\t */\n\t\n\t-- folding demonstration\n\tSET @vint = CASE\n\t\t\t\t\tWHEN @vdate IS NULL\n\t\t\t\t\t\tTHEN 1\n\t\t\t\t\tELSE 2\n\t\t\t\tEND\n\t\n\t-- another folding demonstration\n\tIF @vint = 1 \n\tBEGIN\n\t\tSET @vvarchar = 'one'\n\t\tSET @vint = DATEDIFF(dd, @vdate, @vdatetime)\n\tEND\n\t\n\t-- this mode handles strings properly\n\tDECLARE @sql NVARCHAR(4000) = N'SELECT TOP(1) OrderID \n\t\t\t\t\t\t\t\t\tFROM Orders\n\t\t\t\t\t\t\t\t\tWHERE @OrderDate > GETDATE()'\n\t\t\t\t\t\t\t\t\n\t-- this mode is aware of built in stored procedures \n\tEXECUTE sp_executesql @sql\n\t\n\t-- demonstrating some syntax highlighting\n\tSELECT Orders.OrderID\n\t\t,Customers.CompanyName\n\t\t,DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS FirstDayOfYear\n\tFROM Orders\n\tINNER JOIN Customers\n\t\tON Orders.CustomerID = Customers.CustomerID\n\tWHERE CompanyName NOT LIKE '%something'\n\t\tOR CompanyName IS NULL\n\t\tOR CompanyName IN ('bla', 'nothing')\n\t\t\n\t-- this mode includes snippets\n\t-- place your cusor at the end of the line below and trigger auto complete (Ctrl+Space)\n\tcreatepr\n\t\n\t-- SQL Server allows using keywords as object names (not recommended) as long as they are wrapped in brackets\n\tDATABASE -- keyword\n\t[DATABASE] -- not a keyword\n\t\nEND\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/stylus.styl",
    "content": "// I'm a comment!\n\n/*\n * Adds the given numbers together.\n */\n\n\n/*!\n * Adds the given numbers together.\n */\n\n\nasdasdasdad(df, ad=23)\n\nadd(a, b = a)\n   a + b\ngreen(#0c0)\n add(10, 5)\n // => 15\n\n add(10)\n add(a, b)\n\n    &asdasd\n\n    (arguments)\n\n    @sdfsdf\n.signatures\n  background-color #e0e8e0\n  border 1px solid grayLighter\n  box-shadow 0 0 3px grayLightest\n  border-radius 3px\n  padding 3px 5px\n  \"adsads\"\n  margin-left 0\n  list-style none\n.signature\n  list-style none\n  display: inline\n  margin-left 0\n  > li\n    display inline\nis not\n.signature-values\n  list-style none\n  display inline\n  margin-left 0\n  &:before\n    content '→'\n    margin 0 5px\n  > li\n  !important\n\n  unless"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/swift.swift",
    "content": "import UIKit\n \nclass DetailsViewController: UIViewController {\n    var album: Album?\n    @IBOutlet weak var albumCover: UIImageView!\n     \n    required init(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n    }\n     \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        mLabel.text = self.album?.title && \"Juhu \\( \"kinners\" )! \"\n        albumCover.image = UIImage(data: NSData(contentsOfURL: NSURL(string: self.album!.largeImageURL)!)!)\n    }\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/tcl.tcl",
    "content": "\nproc dijkstra {graph origin} {\n    # Initialize\n    dict for {vertex distmap} $graph {\n\tdict set dist $vertex Inf\n\tdict set path $vertex {}\n    }\n    dict set dist $origin 0\n    dict set path $origin [list $origin]\n \n    while {[dict size $graph]} {\n\t# Find unhandled node with least weight\n\tset d Inf\n\tdict for {uu -} $graph {\n\t    if {$d > [set dd [dict get $dist $uu]]} {\n\t\tset u $uu\n\t\tset d $dd\n\t    }\n\t}\n \n\t# No such node; graph must be disconnected\n\tif {$d == Inf} break\n \n\t# Update the weights for nodes\\\n\t lead to by the node we've picked\n\tdict for {v dd} [dict get $graph $u] {\n\t    if {[dict exists $graph $v]} {\n\t\tset alt [expr {$d + $dd}]\n\t\tif {$alt < [dict get $dist $v]} {\n\t\t    dict set dist $v $alt\n\t\t    dict set path $v [list {*}[dict get $path $u] $v]\n\t\t}\n\t    }\n\t}\n \n\t# Remove chosen node from graph still to be handled\n\tdict unset graph $u\n    }\n    return [list $dist $path]\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/terraform.tf",
    "content": "export TF_LOG=TRACE\n\n# An AMI\nvariable \"ami\" {\n  description = \"the AMI to use\"\n}\n\n/* A multi\n   line comment. */\nresource \"aws_instance\" \"web\" {\n  ami               = \"${var.ami}\"\n  count             = 2\n  source_dest_check = false\n\n  connection {\n    user = \"root\"\n  }\n}\n\nresource \"aws_instance\" \"web\" {\n  subnet = \"${var.env == \"production\" ? var.prod_subnet : var.dev_subnet}\"\n}\n\nvariable \"count\" {\n  default = 2\n}\n\nvariable \"hostnames\" {\n  default = {\n    \"0\" = \"example1.org\"\n    \"1\" = \"example2.net\"\n  }\n}\n\ndata \"template_file\" \"web_init\" {\n  # Render the template once for each instance\n  count    = \"${length(var.hostnames)}\"\n  template = \"${file(\"templates/web_init.tpl\")}\"\n  vars {\n    # count.index tells us the index of the instance we are rendering\n    hostname = \"${var.hostnames[count.index]}\"\n  }\n}\n\nresource \"aws_instance\" \"web\" {\n  # Create one instance for each hostname\n  count     = \"${length(var.hostnames)}\"\n\n  # Pass each instance its corresponding template_file\n  user_data = \"${data.template_file.web_init.*.rendered[count.index]}\"\n}\n\nvariable \"count\" {\n  default = 2\n}\n\n# Define the common tags for all resources\nlocals {\n  common_tags = {\n    Component   = \"awesome-app\"\n    Environment = \"production\"\n  }\n}\n\n# Create a resource that blends the common tags with instance-specific tags.\nresource \"aws_instance\" \"server\" {\n  ami           = \"ami-123456\"\n  instance_type = \"t2.micro\"\n\n  tags = \"${merge(\n    local.common_tags,\n    map(\n      \"Name\", \"awesome-app-server\",\n      \"Role\", \"server\"\n    )\n  )}\"\n}\n\n$ terraform apply -var foo=bar -var foo=baz\n$ terraform apply -var 'foo={quux=\"bar\"}' -var 'foo={bar=\"baz\"}'\n\n$ terraform apply -var-file=foo.tfvars -var-file=bar.tfvars\n$ TF_VAR_somemap='{foo = \"bar\", baz = \"qux\"}' terraform plan\n\nresource \"aws_instance\" \"web\" {\n  # ...\n\n  count = \"${var.count}\"\n\n  # Tag the instance with a counter starting at 1, ie. web-001\n  tags {\n    Name = \"${format(\"web-%03d\", count.index + 1)}\"\n  }\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/tex.tex",
    "content": "The quadratic formula is $$-b \\pm \\sqrt{b^2 - 4ac} \\over 2a$$\n\\bye\n\n\\makeatletter\n \\newcommand{\\be}{%\n \\begingroup\n % \\setlength{\\arraycolsep}{2pt}\n \\eqnarray%\n \\@ifstar{\\nonumber}{}%\n  }\n  \\newcommand{\\ee}{\\endeqnarray\\endgroup}\n  \\makeatother\n\n \\begin{equation}\n x=\\left\\{ \\begin{array}{cl}\n 0 & \\textrm{if }A=\\ldots\\\\\n 1 & \\textrm{if }B=\\ldots\\\\\n x & \\textrm{this runs with as much text as you like, but without an raggeright text\n.}\\end{array}\\right.\n \\end{equation}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/textile.textile",
    "content": "h1. Textile document\n\nh2. Heading Two\n\nh3. A two-line\n    header\n\nh2. Another two-line\nheader\n\nParagraph:\none, two,\nthee lines!\n\np(classone two three). This is a paragraph with classes\n\np(#id). (one with an id)\n\np(one two three#my_id). ..classes + id\n\n* Unordered list\n** sublist\n* back again!\n** sublist again..\n\n# ordered\n\nbg. Blockquote!\n    This is a two-list blockquote..!"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/toml.toml",
    "content": "# This is a TOML document. Boom.\n\ntitle = \"TOML Example\"\n\n[owner]\nname = \"Tom Preston-Werner\"\norganization = \"GitHub\"\nbio = \"GitHub Cofounder & CEO\\nLikes tater tots and beer.\"\ndob = 1979-05-27T07:32:00Z # First class dates? Why not?\n\n[database]\nserver = \"192.168.1.1\"\nports = [ 8001, 8001, 8002 ]\nconnection_max = 5000\nenabled = true\n\n[servers]\n\n  # You can indent as you please. Tabs or spaces. TOML don't care.\n  [servers.alpha]\n  ip = \"10.0.0.1\"\n  dc = \"eqdc10\"\n\n  [servers.beta]\n  ip = \"10.0.0.2\"\n  dc = \"eqdc10\"\n\n[clients]\ndata = [ [\"gamma\", \"delta\"], [1, 2] ] # just an update to make sure parsers support it"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/tsx.tsx",
    "content": "var mode = <div> \n    Typescript + <b> JSX </b> \n</div>;"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/turtle.ttl",
    "content": "@base <http://example.org/> .\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n@prefix rel: <http://www.perceive.net/schemas/relationship/> .\n\n<#green-goblin>\n    rel:enemyOf <#spiderman> ;\n    a foaf:Person ;    # in the context of the Marvel universe\n    foaf:name \"Green Goblin\" .\n\n<#spiderman>\n    rel:enemyOf <#green-goblin> ;\n    a foaf:Person ;\n    foaf:name \"Spiderman\", \"Человек-паук\"@ru ."
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/twig.twig",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>My Webpage</title>\n    </head>\n    <body>\n        <ul id=\"navigation\">\n        {% for item in navigation %}\n            <li><a href=\"{{ item.href|escape }}\">{{ item.caption }}</a></li>\n        {% endfor %}\n        </ul>\n\n        {% if 1 not in [1, 2, 3] %}\n\n        {# is equivalent to #}\n        {% if not (1 in [1, 2, 3]) %}\n\n        {% autoescape true %}\n            {{ var }}\n            {{ var|raw }}     {# var won't be escaped #}\n            {{ var|escape }}  {# var won't be doubled-escaped #}\n        {% endautoescape %}\n\n        {{ include('twig.html', sandboxed = true) }}\n\n        {{\"string #{with} \\\" escapes\" 'another#one' }}\n        <h1>My Webpage</h1>\n        {{ a_variable }}\n    </body>\n</html>"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/type_script.ts",
    "content": "TODO add a nice demo!\nTry to keep it short!"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/typescript.ts",
    "content": "class Greeter {\n\tgreeting: string;\n\tconstructor (message: string) {\n\t\tthis.greeting = message;\n\t}\n\tgreet() {\n\t\treturn \"Hello, \" + this.greeting;\n\t}\n}   \n\nvar greeter = new Greeter(\"world\");\n\nvar button = document.createElement('button')\nbutton.innerText = <string>\"Say Hello\";\nbutton.onclick = function() {\n\talert(greeter.greet())\n}\n\ndocument.body.appendChild(button)\n\nclass Snake extends Animal {\n   move() {\n       alert(\"Slithering...\");\n       super(5);\n   }\n}\n\nclass Horse extends Animal {\n   move() {\n       alert(\"Galloping...\");\n       super.move(45);\n   }\n}\n\nmodule Sayings {\n    export class Greeter {\n        greeting: string;\n        constructor (message: string) {\n            this.greeting = message;\n        }\n        greet() {\n            return \"Hello, \" + this.greeting;\n        }\n    }\n}\nmodule Mankala {\n   export class Features {\n       public turnContinues = false;\n       public seedStoredCount = 0;\n       public capturedCount = 0;\n       public spaceCaptured = NoSpace;\n\n       public clear() {\n           this.turnContinues = false;\n           this.seedStoredCount = 0;\n           this.capturedCount = 0;\n           this.spaceCaptured = NoSpace;\n       }\n\n       public toString() {\n           var stringBuilder = \"\";\n           if (this.turnContinues) {\n               stringBuilder += \" turn continues,\";\n           }\n           stringBuilder += \" stores \" + this.seedStoredCount;\n           if (this.capturedCount > 0) {\n               stringBuilder += \" captures \" + this.capturedCount + \" from space \" + this.spaceCaptured;\n           }\n           return stringBuilder;\n       }\n   }\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/vala.vala",
    "content": "﻿using Gtk;\n \nint main (string[] args) {\n    Gtk.init (ref args);\n    var foo = new MyFoo<string[](), MyBar<string, int>>();\n\n    var window = new Window();\n    window.title = \"Hello, World!\";\n    window.border_width = 10;\n    window.window_position = WindowPosition.CENTER;\n    window.set_default_size(350, 70);\n    window.destroy.connect(Gtk.main_quit);\n \n    var label = new Label(\"Hello, World!\");\n \n    window.add(label);\n    window.show_all();\n \n    Gtk.main();\n    return 0;\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/vbscript.vbs",
    "content": "myfilename = \"C:\\Wikipedia - VBScript - Example - Hello World.txt\"\r\nMakeHelloWorldFile myfilename\r\n \r\nSub MakeHelloWorldFile (FileName)\r\n'Create a new file in C: drive or overwrite existing file\r\n   Set FSO = CreateObject(\"Scripting.FileSystemObject\")\r\n   If FSO.FileExists(FileName) Then \r\n      Answer = MsgBox (\"File \" & FileName & \" exists ... OK to overwrite?\", vbOKCancel)\r\n      'If button selected is not OK, then quit now\r\n      'vbOK is a language constant\r\n      If Answer <> vbOK Then Exit Sub\r\n   Else\r\n      'Confirm OK to create\r\n      Answer = MsgBox (\"File \" & FileName & \" ... OK to create?\", vbOKCancel)\r\n      If Answer <> vbOK Then Exit Sub\r\n   End If\r\n   'Create new file (or replace an existing file)\r\n   Set FileObject = FSO.CreateTextFile (FileName)\r\n   FileObject.WriteLine \"Time ... \" & Now()\r\n   FileObject.WriteLine \"Hello World\"\r\n   FileObject.Close()\r\n   MsgBox \"File \" & FileName & \" ... updated.\"\r\nEnd Sub"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/velocity.vm",
    "content": "#*\n  This is a sample comment block that\n  spans multiple lines.\n*#\n\n#macro ( outputItem $item )\n  <li>${item}</li>\n#end\n\n## Define the items to iterate\n#set ( $items = [1, 2, 3, 4] )\n\n<ul>\n  ## Iterate over the items and output the evens.\n  #foreach ( $item in $items )\n    #if ( $_MathTool.mod($item, 2) == 0 )\n      #outputItem ($item)\n    #end\n  #end\n</ul>\n\n<script>\n  /*\n    A sample function to decomstrate\n    JavaScript highlighting and folding.\n  */\n  function foo(items, nada) {\n    for (var i=0; i<items.length; i++) {\n      alert(items[i] + \"juhu\\n\");\n    }\n  }\n</script>\n\n<style>\n  /*\n    A sample style to decomstrate\n    CSS highlighting and folding.\n  */\n  .class {\n    font-family: Monaco, \"Courier New\", monospace;\n    font-size: 12px;\n    cursor: text;\n  }\n</style>"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/verilog.v",
    "content": "always @(negedge reset or posedge clk) begin\n  if (reset == 0) begin\n    d_out <= 16'h0000;\n    d_out_mem[resetcount] <= d_out;\n    laststoredvalue <= d_out;\n  end else begin\n    d_out <= d_out + 1'b1; \n  end\nend\n\nalways @(bufreadaddr)\n  bufreadval = d_out_mem[bufreadaddr];"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/vhdl.vhd",
    "content": "library IEEE\nuser IEEE.std_logic_1164.all;\nuse IEEE.numeric_std.all;\n\nentity COUNT16 is\n\n    port (\n        cOut    :out    std_logic_vector(15 downto 0);  -- counter output\n        clkEn   :in     std_logic;                      -- count enable\n        clk     :in     std_logic;                      -- clock input\n        rst     :in     std_logic                       -- reset input\n        );\n        \nend entity;\n\narchitecture count_rtl of COUNT16 is\n    signal count :std_logic_vector (15 downto 0);\n    \nbegin\n    process (clk, rst) begin\n        \n        if(rst = '1') then\n            count <= (others=>'0');\n        elsif(rising_edge(clk)) then\n            if(clkEn = '1') then\n                count <= count + 1;\n            end if;\n        end if;\n        \n    end process;\n    cOut <= count;\n\nend architecture;\n    "
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/visualforce.vfp",
    "content": "<apex:stylesheet value=\"{!URLFOR($Resource.BrowserCompatibility, 'css/style.css')}\"/>\n\n<apex:page action=\"{!IF($User.Alias = 'JohnDoe' || $User.Alias = 'JBloggs' || $User.Alias = 'FooBar',\n    null,\n    urlFor($Action.Account.Delete, $CurrentPage.Parameters.id, [retURL='/001'], true)\n)}\" standardController=\"Account\"></apex:page>\n\n<apex:page action=\"{!IF(OR($User.Alias = 'JohnDoe', $User.Alias = 'JBloggs', $User.Alias = 'FooBar'),\n    NULL,\n    URLFOR($Action.Account.Delete, $CurrentPage.Parameters.id, [retURL='/001'], TRUE)\n)}\" standardController=\"Account\"></apex:page>\n\n<apex:commandLink action=\"{!URLFOR('/apex/' + $CurrentPage.Name, null, ['id'=id])}\" \n                   value=\"Full List\" />\n<ideas:listOutputLink stickyAttributes=\"false\">\n    \n</ideas:listOutputLink>\n{!IF(AND(Price < 1, Quantity < 1), \"Small\", null)}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/wollok.wlk",
    "content": "class Actividad {\n\tmethod calcularMejora()\n}\n\nclass EstudiarMateria inherits Actividad {\n\tvar materia\n\tvar puntos = 0\n\t\n\tnew(m, p) {\n\t\tmateria = m\n\t\tpuntos = p\n\t}\n\t\n\toverride method calcularMejora() = puntos\n}\n\nclass EjercitarEnSimulador inherits Actividad {\n\tvar horas = 0\n\tnew(h) { horas = h }\n\toverride method calcularMejora() = 10 * horas\n}\n\nobject pepita {\n\tvar energia = 100\n\tmethod volar(m) {\n\t\tenergia -= m\n\t}\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/xml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<query xmlns:yahoo=\"http://www.yahooapis.com/v1/base.rng\"\n    yahoo:count=\"7\" yahoo:created=\"2011-10-11T08:40:23Z\" yahoo:lang=\"en-US\">\n    <diagnostics>\n        <publiclyCallable>true</publiclyCallable>\n        <url execution-start-time=\"0\" execution-stop-time=\"25\" execution-time=\"25\"><![CDATA[http://where.yahooapis.com/v1/continents;start=0;count=10]]></url>\n        <user-time>26</user-time>\n        <service-time>25</service-time>\n        <build-version>21978</build-version>\n    </diagnostics> \n    <results>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865670\">\n            <woeid>24865670</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Africa</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865675\">\n            <woeid>24865675</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Europe</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865673\">\n            <woeid>24865673</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>South America</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/28289421\">\n            <woeid>28289421</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Antarctic</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865671\">\n            <woeid>24865671</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Asia</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865672\">\n            <woeid>24865672</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>North America</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/55949070\">\n            <woeid>55949070</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Australia</name>\n        </place>\n    </results>\n</query>"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/xquery.xq",
    "content": "xquery version \"1.0\";\n\nlet $message := \"Hello World!\"\nreturn <results>\n  <message>{$message}</message>\n</results>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/docs/yaml.yaml",
    "content": "# This sample document was taken from wikipedia:\n# http://en.wikipedia.org/wiki/YAML#Sample_document\n---\nreceipt:     Oz-Ware Purchase Invoice\ndate:        2007-08-06\ncustomer:\n    given:   Dorothy\n    family:  Gale\n\nitems:\n    - part_no:   'A4786'\n      descrip:   Water Bucket (Filled)\n      price:     1.47\n      quantity:  4\n\n    - part_no:   'E1628'\n      descrip:   High Heeled \"Ruby\" Slippers\n      size:      8\n      price:     100.27\n      quantity:  1\n\nbill-to:  &id001\n    street: |\n            123 Tornado Alley\n            Suite 16\n    city:   East Centerville\n    state:  KS\n\nship-to:  *id001\n\nspecialDelivery:  >\n    Follow the Yellow Brick\n    Road to the Emerald City.\n    Pay no attention to the\n    man behind the curtain.\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/kitchen-sink/styles.css",
    "content": "html {\n    height: 100%;\n    width: 100%;\n    overflow: hidden;\n}\n\nbody {\n    overflow: hidden;\n    margin: 0;\n    padding: 0;\n    height: 100%;\n    width: 100%;\n    font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif;\n    font-size: 12px;\n    background: rgb(14, 98, 165);\n    color: white;\n}\n\n#c9-logo, #ace-logo {\n    padding: 0;\n    border: none;\n}\n\n#editor-container {\n    position: absolute;\n    top:  0px;\n    left: 280px;\n    bottom: 0px;\n    right: 0px;\n    background: white;\n}\n\n#controls {\n    padding: 5px;\n}\n\n#controls td {\n    text-align: right;\n}\n\n#controls td + td {\n    text-align: left;\n}\n.ace_status-indicator {\n    color: gray;\n    position: absolute;\n    right: 0;\n    border-left: 1px solid;\n}\n\n/* .ace_text-input {\n    z-index: 10!important;\n    opacity: 1!important;\n    background: rgb(84, 0, 255)!important;\n    color: rgb(255, 255, 255)!important;\n    width: 10em!important;\n}*/\n.text-input-debug {\n    height: 100px!important;\n    position: absolute!important;\n    transform: none!important;\n    top: 0px!important;\n    left: 7px!important;\n    width: 260px!important;\n    z-index: 1000!important;\n    opacity: 1!important;\n    font-size: 1em!important;\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/modelist.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>ACE Editor Modelist Demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n    \n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<!-- load ace modelist extension -->\n<script src=\"../src/ext-modelist.js\"></script>\n<script>\n    var editor = ace.edit(\"editor\");\n    editor.setTheme(\"ace/theme/twilight\");\n    (function () {\n        var modelist = ace.require(\"ace/ext/modelist\");\n        // the file path could come from an xmlhttp request, a drop event,\n        // or any other scriptable file loading process.\n        // Extensions could consume the modelist and use it to dynamically\n        // set the editor mode. Webmasters could use it in their scripts\n        // for site specific purposes as well.\n        var filePath = \"blahblah/weee/some.js\";\n        var mode = modelist.getModeForPath(filePath).mode;\n        console.log(mode);\n        editor.session.setMode(mode);\n    }());\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/r.js",
    "content": "({\n    optimize: \"none\",\n    preserveLicenseComments: false,\n    name: \"node_modules/almond/almond\",\n    baseUrl: \"../../\",\n    paths: {\n        ace : \"lib/ace\",\n        demo: \"demo/kitchen-sink\"        \n    },\n    packages: [\n    ],\n    include: [\n        \"ace/ace\"\n    ],\n    exclude: [\n    ],\n    out: \"./packed.js\",\n    useStrict: true,\n    wrap: false\n})<!DOCTYPE html>\n\n<html>\n<head>\n    <title>Editor</title>\n    <link rel=\"stylesheet\" href=\"../kitchen-sink/styles.css\" type=\"text/css\" media=\"screen\" charset=\"utf-8\">    \n</head>\n<body>\n    <div id=\"optionsPanel\" style=\"position:absolute;height:100%;width:260px\">\n        <a href=\"http://c9.io\" title=\"Cloud9 IDE | Your code anywhere, anytime\">\n            <img id=\"c9-logo\" src=\"../kitchen-sink/logo.png\" style=\"width: 172px;margin: -9px 30px -12px 51px;\">\n        </a>\n    </div>\n    <pre id=\"editor-container\">\n        <div style=\"color:black; padding: 10px\">\n            demo showing Ace usage with r.js:\n            \n            install r.js and almond\n            and run `<code>r.js -o demo/r.js/build.js</code>`\n            \n            note that you also need ace/build/src to lazy load modes and themes\n            require(\"ace/config\").set(\"basePath\", \"../../build/src\");\n            require(\"ace/config\").set(\"packaged\", true);\n        <div>\n    </pre>\n\n    <script src=\"./packed.js\" data-ace-base=\"src\" type=\"text/javascript\" charset=\"utf-8\"></script>  \n    <script type=\"text/javascript\" charset=\"utf-8\">\n        require(\"ace/config\").set(\"basePath\", \"../../build/src\")\n        require(\"ace/config\").set(\"packaged\", true)\n        var editor = require(\"ace/ace\").edit(\"editor-container\");\n        editor.session.setMode(\"ace/mode/javascript\");\n        // editor.session.setValue(\"var editor = Ace!\")\n    </script>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/requirejs+build.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n\n    #editor {\n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\">function foo(items) {\n    var i;\n    for (i = 0; i &lt; items.length; i++) {\n        alert(\"Ace Rocks \" + items[i]);\n    }\n}</pre>\n\n<script src=\"../demo/kitchen-sink/require.js\"></script>\n<script>\n    require.config({paths: {ace: \"../src\"}})\n    define('testace', ['ace/ace'],\n        function(ace, langtools) {\n            console.log(\"This is the testace module\");\n            var editor = ace.edit(\"editor\");\n            editor.setTheme(\"ace/theme/twilight\");\n            editor.session.setMode(\"ace/mode/javascript\");\n            require([\"ace/requirejs/text!src/ace\"], function(e){\n                editor.setValue(e);\n            })\n        }\n    );\n    require(['testace'])\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/scrollable-page.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    .ace_editor {\n        position: relative !important;\n        border: 1px solid lightgray;\n        margin: auto;\n        height: 200px;\n        width: 80%;\n    }\n\n    .ace_editor.fullScreen {\n        height: auto;\n        width: auto;\n        border: 0;\n        margin: 0;\n        position: fixed !important;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        z-index: 10;\n    }\n\n    .fullScreen {\n        overflow: hidden\n    }\n\n    .scrollmargin {\n        height: 500px;\n        text-align: center;\n    }\n\n    .large-button {\n        color: lightblue;\n        cursor: pointer;\n        font: 30px arial;\n        padding: 20px;\n        text-align: center;\n        border: medium solid transparent;\n        display: inline-block;\n    }\n    .large-button:hover {\n        border: medium solid lightgray;\n        border-radius: 10px 10px 10px 10px;\n        box-shadow: 0 0 12px 0 lightblue;\n    }\n    body {\n        transform: translateZ(0);\n    }\n  </style>\n</head>\n<body>\n<div class=\"scrollmargin\">\n    <span onclick=\"scroll()\" class=\"large-button\">\n    scroll down &dArr;\n    </span>\n</div>\n<pre id=\"editor\">function foo(items) {\n    var i;\n    for (i = 0; i &lt; items.length; i++) {\n        alert(\"Ace Rocks \" + items[i]);\n    }\n\n}</pre>\n<div class=\"scrollmargin\">\n    <div style=\"padding:20px\">\n        press F11 to switch to fullscreen mode\n    </div>\n    <span onclick=\"add()\" class=\"large-button\">\n        +\n    </span>\n\n</div>\n\n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<!-- load ace themelist extension -->\n<script src=\"../src/ext-themelist.js\"></script>\n<script>\n\nvar $ = document.getElementById.bind(document);\nvar dom = require(\"ace/lib/dom\");\n\n//add command to all new editor instances\nrequire(\"ace/commands/default_commands\").commands.push({\n    name: \"Toggle Fullscreen\",\n    bindKey: \"F11\",\n    exec: function(editor) {\n        var fullScreen = dom.toggleCssClass(document.body, \"fullScreen\")\n        dom.setCssClass(editor.container, \"fullScreen\", fullScreen)\n        editor.setAutoScrollEditorIntoView(!fullScreen)\n        editor.resize()\n    }\n})\n\n// create first editor\nvar editor = ace.edit(\"editor\");\neditor.setTheme(\"ace/theme/twilight\");\neditor.session.setMode(\"ace/mode/javascript\");\neditor.renderer.setScrollMargin(10, 10);\neditor.setOptions({\n    // \"scrollPastEnd\": 0.8,\n    autoScrollEditorIntoView: true\n});\n\nvar count = 1;\nfunction add() {\n    var oldEl = editor.container\n    var pad = document.createElement(\"div\")\n    pad.style.padding = \"40px\"\n    oldEl.parentNode.insertBefore(pad, oldEl.nextSibling)\n\n    var el = document.createElement(\"div\")\n    oldEl.parentNode.insertBefore(el, pad.nextSibling)\n\n    count++\n    var theme = themes[Math.floor(themes.length * Math.random() - 1e-5)]\n    editor = ace.edit(el)\n    editor.setOptions({\n        mode: \"ace/mode/javascript\",\n        theme: theme,\n        autoScrollEditorIntoView: true\n    })\n\n    editor.setValue([\n        \"this is editor number: \", count, \"\\n\",\n        \"using theme \\\"\", theme, \"\\\"\\n\",\n        \":)\"\n    ].join(\"\"), -1)\n\n    scroll()\n}\n\nfunction scroll(speed) {\n    var top = editor.container.getBoundingClientRect().top\n    speed = speed || 10\n    if (top > 60 && speed < 500) {\n        if (speed > top - speed - 50)\n            speed = top - speed - 50\n        else\n            setTimeout(scroll, 10, speed + 10)\n        window.scrollBy(0, speed)\n    }\n}\n\nvar themes = require(\"ace/ext/themelist\").themes.map(function(t){return t.theme});\n\nwindow.add = add;\nwindow.scroll = scroll;\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/settings_menu.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n    \n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<!-- load ace settings_menu extension -->\n<script src=\"../src/ext-settings_menu.js\"></script>\n<script>\n    var editor = ace.edit(\"editor\");\n    ace.require('ace/ext/settings_menu').init(editor);\n    editor.setTheme(\"ace/theme/twilight\");\n    editor.session.setMode(\"ace/mode/html\");\n\teditor.commands.addCommands([{\n\t\tname: \"showSettingsMenu\",\n\t\tbindKey: {win: \"Ctrl-q\", mac: \"Ctrl-q\"},\n\t\texec: function(editor) {\n\t\t\teditor.showSettingsMenu();\n\t\t},\n\t\treadOnly: true\n\t}]);\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/shadow-dom.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    .scrollmargin {\n        text-align: center;\n    }\n    .large-button {\n        color: lightblue;\n        cursor: pointer;\n        font: 30px arial;\n        padding: 20px;\n        text-align: center;\n        border: medium solid transparent;\n        display: inline-block;\n    }\n    .large-button:hover {\n        border: medium solid lightgray;\n        border-radius: 10px 10px 10px 10px;\n        box-shadow: 0 0 12px 0 lightblue;\n    }\n    body {\n        transform: translateZ(0);\n    }\n  </style>\n</head>\n<body>\n\n<div class=\"scrollmargin\">\n    <span onclick=\"add()\" class=\"large-button\">+</span>\n</div>\n\n<ace-playground></ace-playground>\n\n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<script>\n\nvar dom = require(\"ace/lib/dom\");\n\n\nclass AcePlayground extends HTMLElement {\n    constructor() {\n        super();\n        \n        var shadow = this.attachShadow({mode: \"open\"});\n        \n        var dom = require(\"ace/lib/dom\");\n        dom.buildDom([\"div\", {id: \"host\"},\n            [\"div\", {id: \"html\"}],\n            [\"div\", {id: \"css\"}], \n            [\"iframe\", {id: \"preview\"}],\n            [\"style\", `\n                #host {\n                    border: solid 1px gray;\n                    display: grid;\n                    grid-template-areas: \"html preview\" \"css preview\";\n                }\n                #html {\n                    grid-area: html;\n                    height: 200px;\n                }\n                #css {\n                    grid-area: css;\n                    height: 200px;\n                }\n                #preview {\n                    grid-area: preview;\n                    width: 100%;\n                    height: 100%;\n                    border: none;\n                }\n            `]\n        ], shadow);\n        \n        var htmlEditor = ace.edit(shadow.querySelector(\"#html\"), {\n            theme: \"ace/theme/solarized_light\",\n            mode: \"ace/mode/html\",\n            value: \"<div>\\n\\thollow world!\\n</div>\\n<script><\\/script>\",\n            autoScrollEditorIntoView: true\n        });\n        var cssEditor = ace.edit(shadow.querySelector(\"#css\"), {\n            theme: \"ace/theme/solarized_dark\",\n            mode: \"ace/mode/css\",\n            value: \"*{\\n\\tcolor:red\\n}\",\n            autoScrollEditorIntoView: true\n        });\n        \n        var preview = shadow.querySelector(\"#preview\");\n        \n        this.htmlEditor = htmlEditor;        \n        this.cssEditor = cssEditor;\n        this.preview = preview;\n        \n        htmlEditor.renderer.attachToShadowRoot();\n        \n        this.updatePreview = this.updatePreview.bind(this)\n        htmlEditor.on(\"input\", this.updatePreview);\n        cssEditor.on(\"input\", this.updatePreview);\n    \n        this.updatePreview();\n    }\n    updatePreview() {\n        var code = this.htmlEditor.getValue() + \"<style>\" + this.cssEditor.getValue() + \"</style>\";\n        this.preview.src = \"data:text/html,\" + encodeURIComponent(code)\n    }\n}\n\ncustomElements.define('ace-playground', AcePlayground);\n\nwindow.add = function() {\n    var el = document.createElement(\"ace-playground\");    \n    document.body.appendChild(el);\n};\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/show_own_source.js",
    "content": "if (typeof ace == \"undefined\" && typeof require == \"undefined\") {\n    document.body.innerHTML = \"<p style='padding: 20px 50px;'>couldn't find ace.js file, <br>\"\n        + \"to build it run <code>node Makefile.dryice.js full<code>\"\n} else if (typeof ace == \"undefined\" && typeof require != \"undefined\") {\n    require([\"ace/ace\"], setValue)\n} else {\n    require = ace.require;\n    setValue()\n}\n\nfunction setValue() {\n    require(\"ace/lib/net\").get(document.baseURI, function(t){\n        var el = document.getElementById(\"editor\");\n        el.env.editor.setValue(t, 1);\n    })\n}"
  },
  {
    "path": "app/static/js/libs/ace/demo/static-highlighter.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n    <title>Static Code highlighter using Ace</title>\n    <meta name=\"author\" content=\"Matthew Kastor\">\n    <style type=\"text/css\">\n        .code {\n            width: 50%;\n            white-space: pre-wrap;\n            border: solid lightgrey 1px\n        }\n    </style>\n</head>\n<body>\n\n<h2>Client Side Syntax Highlighting</h2>\n\n<p>Syntax highlighting using Ace language modes and themes.</p>\n\n<div class=\"code\" ace-mode=\"ace/mode/css\" ace-theme=\"ace/theme/chrome\" ace-gutter=\"true\">\n.code {\n    width: 50%;\n    white-space: pre-wrap;\n    border: solid lightgrey 1px\n}\n\n</div>\n\n<pre class=\"code\" ace-mode=\"ace/mode/javascript\" ace-theme=\"ace/theme/twilight\">\nfunction wobble (flam) {\n    return flam.wobbled = true;\n}\n\n</pre>\n\n\n<div class=\"code\" ace-mode=\"ace/mode/lua\" ace-theme=\"ace/theme/chrome\" ace-gutter=\"true\" style=\"width: 30em;\">\n--[[--\nnum_args takes in 5.1 byte code and extracts the number of arguments from its function header.\n--]]--\n\nfunction int(t)\n    return t:byte(1) + t:byte(2) * 0x100 + t:byte(3) * 0x10000 + t:byte(4) * 0x1000000\nend\n\nfunction num_args(func)\n    local dump = string.dump(func)\n    local offset, cursor = int(dump:sub(13)), offset + 26\n    --Get the params and var flag (whether there's a ... in the param)\n    return dump:sub(cursor):byte(), dump:sub(cursor+1):byte()\nend\n\n</div>\n\n\n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<!-- load ace static_highlight extension -->\n<script src=\"../src/ext-static_highlight.js\"></script>\n<script>\n    var highlight = ace.require(\"ace/ext/static_highlight\")\n    var dom = ace.require(\"ace/lib/dom\")\n    function qsa(sel) {\n        return Array.apply(null, document.querySelectorAll(sel));\n    }\n\n    qsa(\".code\").forEach(function (codeEl) {\n        highlight(codeEl, {\n            mode: codeEl.getAttribute(\"ace-mode\"),\n            theme: codeEl.getAttribute(\"ace-theme\"),\n            startLineNumber: 1,\n            showGutter: codeEl.getAttribute(\"ace-gutter\"),\n            trim: true\n        }, function (highlighted) {\n            \n        });\n    });\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/statusbar.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>ACE Editor StatusBar Demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 20px;\n        left: 0;\n        right: 0;\n    }\n    #statusBar {\n        margin: 0;\n        padding: 0;\n        position: absolute;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        height: 20px;\n        background-color: rgb(245, 245, 245);\n        color: gray;\n    }\n    .ace_status-indicator {\n        color: gray;\n        position: absolute;\n        right: 0;\n        border-left: 1px solid;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n<div id=\"statusBar\">ace rocks!</div>\n    \n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<!-- load ace statusbar extension -->\n<script src=\"../src/ext-statusbar.js\"></script>\n<script>\n    var editor = ace.edit(\"editor\");\n    var StatusBar = ace.require(\"ace/ext/statusbar\").StatusBar;\n    // create a simple selection status indicator\n    var statusBar = new StatusBar(editor, document.getElementById(\"statusBar\"));\n    editor.setTheme(\"ace/theme/dawn\");\n    editor.session.setMode(\"ace/mode/html\");\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/toolbar.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n\n    .ace_editor, .toolbar {\n        border: 1px solid lightgray;\n        margin: auto;\n        width: 80%;\n    } \n    .ace_editor {\n        height: 200px;\n    }\n    </style>\n</head>\n<body>\n\n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<!-- load ace language_tools extension -->\n<script src=\"../src/ext-language_tools.js\"></script>\n<script>\n    var buildDom = require(\"ace/lib/dom\").buildDom;\n    var editor = ace.edit();\n    editor.setOptions({\n        theme: \"ace/theme/tomorrow_night_eighties\",\n        mode: \"ace/mode/markdown\",\n        maxLines: 30,\n        minLines: 30,\n        autoScrollEditorIntoView: true,\n    });\n    var refs = {};\n    function updateToolbar() {\n        refs.saveButton.disabled = editor.session.getUndoManager().isClean();\n        refs.undoButton.disabled = !editor.session.getUndoManager().hasUndo();\n        refs.redoButton.disabled = !editor.session.getUndoManager().hasRedo();\n    }\n    editor.on(\"input\", updateToolbar);\n    editor.session.setValue(localStorage.savedValue || \"Welcome to ace Toolbar demo!\")\n    function save() {\n        localStorage.savedValue = editor.getValue(); \n        editor.session.getUndoManager().markClean();\n        updateToolbar();\n    }\n    editor.commands.addCommand({\n        name: \"save\",\n        exec: save,\n        bindKey: { win: \"ctrl-s\", mac: \"cmd-s\" }\n    });\n    \n    buildDom([\"div\", { class: \"toolbar\" },\n        [\"button\", {\n            ref: \"saveButton\",\n            onclick: save\n        }, \"save\"],\n        [\"button\", {\n            ref: \"undoButton\",\n            onclick: function() {\n                editor.undo();\n            }\n        }, \"undo\"],\n        [\"button\", {\n            ref: \"redoButton\",\n            onclick: function() {\n                editor.redo();\n            }\n        }, \"redo\"],\n        [\"button\", {\n            style: \"font-weight: bold\",\n            onclick: function() {\n                editor.insertSnippet(\"**${1:$SELECTION}**\");\n                editor.renderer.scrollCursorIntoView()\n            }\n        }, \"bold\"],\n        [\"button\", {\n            style: \"font-style: italic\",\n            onclick: function() {\n                editor.insertSnippet(\"*${1:$SELECTION}*\");\n                editor.renderer.scrollCursorIntoView()\n            }\n        }, \"Italic\"],\n    ], document.body, refs);\n    document.body.appendChild(editor.container)\n    \n    window.editor = editor;\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/transform.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n\n    .ace_editor {\n        border: 1px solid lightgray;\n        margin: auto;\n        height: 800px;\n        width: 400px;\n        font-size: 26px!important;\n        max-width: 30%;\n    }\n    .scrollmargin {\n        height: 80px;\n        text-align: center;\n        \n    }\n    #editor1, #editor2, #editor3 {\n        display:inline-block\n    }\n    .wrapper {\n        text-align: center;\n        perspective: 500px;\n        margin-top: 50px;\n    }\n\n    #editor1 {\n        transform: rotateY(10deg) rotateX(-1deg);\n    }\n    #editor2 {\n        transform: translateZ(-36px) rotateX(-1deg);\n    }\n    #editor3 {\n        transform: rotateY(-10deg) rotateX(-1deg);\n    }\n    #editor4 {\n        transform: scale(-1,1) rotateX(-1deg);\n    }\n    .transformed {\n        transform: scale(0.5);\n        transform-origin: center 12%\n    }\n    #editor {\n        width: 100%;\n        min-width: 100%\n    }\n    body {\n        background: #a9bfc7;\n    }\n    .scrollmargin input > {margin: 10px}\n    </style>\n</head>\n<body>\n<div class=\"transformed\">\n    <div class=\"wrapper\">\n        <pre id=\"editor1\">editor1</pre>\n        <pre id=\"editor2\">editor2</pre>\n        <pre id=\"editor3\">editor3</pre> \n    </div>\n    <div class=\"scrollmargin\"></div>\n    <pre id=\"editor4\">editor4</pre>\n    <div class=\"scrollmargin\">\n        <textarea></textarea>\n    </div>\n    <pre id=\"editor\">editor</pre>\n    <div class=\"scrollmargin\" style=\"transform: scale(2) translateY(3em);\">\n        <input type=\"checkbox\" id=\"option\">Auto scroll into view</input>\n\n        <input type=\"range\" onchange=\"document.body.style.zoom = 1 + value/250\">css Zoom</input>\n        <input type=\"range\" onchange=\"document.body.style.transform = 'rotateZ(' + (this.value * 18) +'deg)'\">css Transform</input>\n    </div>\n</div>\n\n<div class=\"scrollmargin\">\n</div>\n\n<!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<script>\n\n    var editor1 = ace.edit(\"editor1\");\n    editor1.setOptions({\n        hasCssTransforms: true,\n        theme: \"ace/theme/tomorrow_night_blue\",\n        mode: \"ace/mode/html\"\n    });\n    \n    var editor2 = ace.edit(\"editor2\");\n    editor2.setOptions({\n        hasCssTransforms: true,\n        theme: \"ace/theme/kuroir\",\n        mode: \"ace/mode/html\"\n    });\n    \n    var editor3 = ace.edit(\"editor3\");\n    editor3.setOptions({\n        hasCssTransforms: true,\n        theme: \"ace/theme/tomorrow_night_eighties\",\n        mode: \"ace/mode/html\"\n    });\n    \n    \n    var editor4 = ace.edit(\"editor4\");\n    editor4.setOptions({\n        hasCssTransforms: true,\n        theme: \"ace/theme/solarized_light\",\n        mode: \"ace/mode/html\"\n    });\n    \n    \n\n    var editor = ace.edit(\"editor\");\n    editor.setOptions({\n        hasCssTransforms: true,\n        mode: \"ace/mode/html\",\n        value: \"editor 4\\n from a mirror\",\n    });\n    editor.renderer.setScrollMargin(10, 10, 10, 10);\n    \n    \n    var checkbox = document.getElementById(\"option\");\n    checkbox.onchange = function() {\n        editor1.setOption(\"autoScrollEditorIntoView\", checkbox.checked);\n        editor2.setOption(\"autoScrollEditorIntoView\", checkbox.checked);\n        editor3.setOption(\"autoScrollEditorIntoView\", checkbox.checked);\n        editor4.setOption(\"autoScrollEditorIntoView\", checkbox.checked);\n        editor.setOption(\"autoScrollEditorIntoView\", checkbox.checked);\n    };\n    checkbox.onchange();\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/demo/xml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\"></meta>\n    <title>ACE Autocompletion demo</title>\n    <style type=\"text/css\" media=\"screen\">\n        body { overflow: hidden; }\n        #editor {\n            margin: 0; position: absolute;\n            top: 0; bottom: 0; left: 0; right: 0;\n        }\n    </style>\n</head>\n<body>\n    <pre id=\"editor\"></pre>\n\n    <!-- load ace -->\n<script src=\"../src/ace.js\"></script>\n<!-- load ace language_tools extension -->\n<script src=\"../src/ext-language_tools.js\"></script>\n<script>\n        var langagueTools = require(\"ace/ext/language_tools\");\n        var editor = ace.edit(\"editor\");\n        editor.session.setMode(\"ace/mode/xml\");\n        editor.setTheme(\"ace/theme/tomorrow\");\n    });    \n    ]]></script>\n\n    <script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/editor.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n\n    #editor {\n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\">function foo(items) {\n    var i;\n    for (i = 0; i &lt; items.length; i++) {\n        alert(\"Ace Rocks \" + items[i]);\n    }\n}</pre>\n\n<script src=\"src-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n<script>\n    var editor = ace.edit(\"editor\");\n    editor.setTheme(\"ace/theme/twilight\");\n    editor.session.setMode(\"ace/mode/javascript\");\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/kitchen-sink.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n    <title>Ace Kitchen Sink</title>\n    <meta name=\"author\" content=\"Fabian Jakobs\">\n    <!--\n    Ace\n      version 1.4.3\n      commit  \n    -->\n\n    <link rel=\"stylesheet\" href=\"demo/kitchen-sink/styles.css\" type=\"text/css\" media=\"screen\" charset=\"utf-8\">\n    \n    <script async=\"true\" src=\"https://use.edgefonts.net/source-code-pro.js\"></script>\n    \n\n    <link href=\"./doc/site/images/favicon.ico\" rel=\"icon\" type=\"image/x-icon\">\n</head>\n<body>\n<div  style=\"position:absolute;height:100%;width:260px\">\n  <a href=\"https://c9.io\" title=\"Cloud9 IDE | Your code anywhere, anytime\">\n    <img id=\"c9-logo\" src=\"demo/kitchen-sink/logo.png\" style=\"width: 172px;margin: -9px 30px -12px 51px;\">\n  </a>\n  <div style=\"position: absolute; overflow: hidden; top:100px; bottom:0\">\n  <div id=\"optionsPanel\" style=\"width: 120%; height:100%; overflow-y: scroll\">\n\n  \n  <a href=\"https://ace.c9.io\">\n    <img id=\"ace-logo\" src=\"demo/kitchen-sink/ace-logo.png\" style=\"width: 134px;margin: 46px 0px 4px 66px;\">\n  </a>\n\n  </div>\n  </div>\n</div>\n  <div id=\"editor-container\"></div>\n\n\n\n\n  <script src=\"src/ace.js\" data-ace-base=\"src\" type=\"text/javascript\" charset=\"utf-8\"></script>\n  <script src=\"src/keybinding-vim.js\"></script>\n  <script src=\"src/keybinding-emacs.js\"></script>\n  <script src=\"demo/kitchen-sink/demo.js\"></script>\n  <script type=\"text/javascript\" charset=\"utf-8\">\n    require(\"kitchen-sink/demo\");\n  </script>\n    \n\n</body>\n</html>\n"
  },
  {
    "path": "app/static/js/libs/ace/package.json",
    "content": "{\n    \"name\": \"ace-builds\",\n    \"main\": \"./src-noconflict/ace.js\",\n    \"typings\": \"ace.d.ts\",\n    \"version\": \"1.4.3\",\n    \"description\": \"Ace (Ajax.org Cloud9 Editor)\",\n    \"scripts\": {\n        \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/ajaxorg/ace-builds.git\"\n    },\n    \"author\": \"\",\n    \"license\": \"BSD\",\n    \"bugs\": {\n        \"url\": \"https://github.com/ajaxorg/ace-builds/issues\"\n    },\n    \"homepage\": \"https://github.com/ajaxorg/ace-builds\"\n}\n"
  },
  {
    "path": "app/static/js/libs/ace/src/ace.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n    return;\n\n\nvar define = function(module, deps, payload) {\n    if (typeof module !== \"string\") {\n        if (define.original)\n            define.original.apply(this, arguments);\n        else {\n            console.error(\"dropping module because define wasn\\'t a string.\");\n            console.trace();\n        }\n        return;\n    }\n    if (arguments.length == 2)\n        payload = deps;\n    if (!define.modules[module]) {\n        define.payloads[module] = payload;\n        define.modules[module] = null;\n    }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n    if (typeof module === \"string\") {\n        var payload = lookup(parentId, module);\n        if (payload != undefined) {\n            callback && callback();\n            return payload;\n        }\n    } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n        var params = [];\n        for (var i = 0, l = module.length; i < l; ++i) {\n            var dep = lookup(parentId, module[i]);\n            if (dep == undefined && require.original)\n                return;\n            params.push(dep);\n        }\n        return callback && callback.apply(null, params) || true;\n    }\n};\n\nvar require = function(module, callback) {\n    var packagedModule = _require(\"\", module, callback);\n    if (packagedModule == undefined && require.original)\n        return require.original.apply(this, arguments);\n    return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = base + \"/\" + moduleName;\n\n        while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n    moduleName = normalizeModule(parentId, moduleName);\n\n    var module = define.modules[moduleName];\n    if (!module) {\n        module = define.payloads[moduleName];\n        if (typeof module === 'function') {\n            var exports = {};\n            var mod = {\n                id: moduleName,\n                uri: '',\n                exports: exports,\n                packaged: true\n            };\n\n            var req = function(module, callback) {\n                return _require(moduleName, module, callback);\n            };\n\n            var returnValue = module(req, exports, mod);\n            exports = returnValue || mod.exports;\n            define.modules[moduleName] = exports;\n            delete define.payloads[moduleName];\n        }\n        module = define.modules[moduleName] = exports || module;\n    }\n    return module;\n};\n\nfunction exportAce(ns) {\n    var root = global;\n    if (ns) {\n        if (!global[ns])\n            global[ns] = {};\n        root = global[ns];\n    }\n\n    if (!root.define || !root.define.packaged) {\n        define.original = root.define;\n        root.define = define;\n        root.define.packaged = true;\n    }\n\n    if (!root.require || !root.require.packaged) {\n        require.original = root.require;\n        root.require = require;\n        root.require.packaged = true;\n    }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\ndefine(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\n    var real = {\n            exec: RegExp.prototype.exec,\n            test: RegExp.prototype.test,\n            match: String.prototype.match,\n            replace: String.prototype.replace,\n            split: String.prototype.split\n        },\n        compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n        compliantLastIndexIncrement = function () {\n            var x = /^/g;\n            real.test.call(x, \"\");\n            return !x.lastIndex;\n        }();\n\n    if (compliantLastIndexIncrement && compliantExecNpcg)\n        return;\n    RegExp.prototype.exec = function (str) {\n        var match = real.exec.apply(this, arguments),\n            name, r2;\n        if ( typeof(str) == 'string' && match) {\n            if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n                r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n                real.replace.call(str.slice(match.index), r2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined)\n                            match[i] = undefined;\n                    }\n                });\n            }\n            if (this._xregexp && this._xregexp.captureNames) {\n                for (var i = 1; i < match.length; i++) {\n                    name = this._xregexp.captureNames[i - 1];\n                    if (name)\n                       match[name] = match[i];\n                }\n            }\n            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n        }\n        return match;\n    };\n    if (!compliantLastIndexIncrement) {\n        RegExp.prototype.test = function (str) {\n            var match = real.exec.call(this, str);\n            if (match && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n            return !!match;\n        };\n    }\n\n    function getNativeFlags (regex) {\n        return (regex.global     ? \"g\" : \"\") +\n               (regex.ignoreCase ? \"i\" : \"\") +\n               (regex.multiline  ? \"m\" : \"\") +\n               (regex.extended   ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n               (regex.sticky     ? \"y\" : \"\");\n    }\n\n    function indexOf (array, item, from) {\n        if (Array.prototype.indexOf) // Use the native array method if available\n            return array.indexOf(item, from);\n        for (var i = from || 0; i < array.length; i++) {\n            if (array[i] === item)\n                return i;\n        }\n        return -1;\n    }\n\n});\n\ndefine(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n\ndefine(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./regexp\");\nrequire(\"./es5-shim\");\nif (typeof Element != \"undefined\" && !Element.prototype.remove) {\n    Object.defineProperty(Element.prototype, \"remove\", {\n        enumerable: false,\n        writable: true,\n        configurable: true,\n        value: function() { this.parentNode && this.parentNode.removeChild(this); }\n    });\n}\n\n\n});\n\ndefine(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nexports.OS = {\n    LINUX: \"LINUX\",\n    MAC: \"MAC\",\n    WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n    if (exports.isMac) {\n        return exports.OS.MAC;\n    } else if (exports.isLinux) {\n        return exports.OS.LINUX;\n    } else {\n        return exports.OS.WINDOWS;\n    }\n};\nif (typeof navigator != \"object\")\n    return;\n\nvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\nvar ua = navigator.userAgent;\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n    (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\n    ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n    : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n    \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isIPad = ua.indexOf(\"iPad\") >= 0;\n\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\nexports.isMobile = exports.isIPad || exports.isAndroid;\n\n});\n\ndefine(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"./useragent\"); \nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.buildDom = function buildDom(arr, parent, refs) {\n    if (typeof arr == \"string\" && arr) {\n        var txt = document.createTextNode(arr);\n        if (parent)\n            parent.appendChild(txt);\n        return txt;\n    }\n    \n    if (!Array.isArray(arr))\n        return arr;\n    if (typeof arr[0] != \"string\" || !arr[0]) {\n        var els = [];\n        for (var i = 0; i < arr.length; i++) {\n            var ch = buildDom(arr[i], parent, refs);\n            ch && els.push(ch);\n        }\n        return els;\n    }\n    \n    var el = document.createElement(arr[0]);\n    var options = arr[1];\n    var childIndex = 1;\n    if (options && typeof options == \"object\" && !Array.isArray(options))\n        childIndex = 2;\n    for (var i = childIndex; i < arr.length; i++)\n        buildDom(arr[i], el, refs);\n    if (childIndex == 2) {\n        Object.keys(options).forEach(function(n) {\n            var val = options[n];\n            if (n === \"class\") {\n                el.className = Array.isArray(val) ? val.join(\" \") : val;\n            } else if (typeof val == \"function\" || n == \"value\") {\n                el[n] = val;\n            } else if (n === \"ref\") {\n                if (refs) refs[val] = el;\n            } else if (val != null) {\n                el.setAttribute(n, val);\n            }\n        });\n    }\n    if (parent)\n        parent.appendChild(el);\n    return el;\n};\n\nexports.getDocumentHead = function(doc) {\n    if (!doc)\n        doc = document;\n    return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n    return document.createElementNS ?\n           document.createElementNS(ns || XHTML_NS, tag) :\n           document.createElement(tag);\n};\n\nexports.removeChildren = function(element) {\n    element.innerHTML = \"\";\n};\n\nexports.createTextNode = function(textContent, element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createTextNode(textContent);\n};\n\nexports.createFragment = function(element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createDocumentFragment();\n};\n\nexports.hasCssClass = function(el, name) {\n    var classes = (el.className + \"\").split(/\\s+/g);\n    return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n    if (!exports.hasCssClass(el, name)) {\n        el.className += \" \" + name;\n    }\n};\nexports.removeCssClass = function(el, name) {\n    var classes = el.className.split(/\\s+/g);\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        classes.splice(index, 1);\n    }\n    el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n    var classes = el.className.split(/\\s+/g), add = true;\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        add = false;\n        classes.splice(index, 1);\n    }\n    if (add)\n        classes.push(name);\n\n    el.className = classes.join(\" \");\n    return add;\n};\nexports.setCssClass = function(node, className, include) {\n    if (include) {\n        exports.addCssClass(node, className);\n    } else {\n        exports.removeCssClass(node, className);\n    }\n};\n\nexports.hasCssString = function(id, doc) {\n    var index = 0, sheets;\n    doc = doc || document;\n    if ((sheets = doc.querySelectorAll(\"style\"))) {\n        while (index < sheets.length)\n            if (sheets[index++].id === id)\n                return true;\n    }\n};\n\nexports.importCssString = function importCssString(cssText, id, target) {\n    var container = target;\n    if (!target || !target.getRootNode) {\n        container = document;\n    } else {\n        container = target.getRootNode();\n        if (!container || container == target)\n            container = document;\n    }\n    \n    var doc = container.ownerDocument || container;\n    if (id && exports.hasCssString(id, container))\n        return null;\n    \n    if (id)\n        cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n    \n    var style = exports.createElement(\"style\");\n    style.appendChild(doc.createTextNode(cssText));\n    if (id)\n        style.id = id;\n\n    if (container == doc)\n        container = exports.getDocumentHead(doc);\n    container.insertBefore(style, container.firstChild);\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n    exports.buildDom([\"link\", {rel: \"stylesheet\", href: uri}], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function(document) {\n    var inner = exports.createElement(\"ace_inner\");\n    inner.style.width = \"100%\";\n    inner.style.minWidth = \"0px\";\n    inner.style.height = \"200px\";\n    inner.style.display = \"block\";\n\n    var outer = exports.createElement(\"ace_outer\");\n    var style = outer.style;\n\n    style.position = \"absolute\";\n    style.left = \"-10000px\";\n    style.overflow = \"hidden\";\n    style.width = \"200px\";\n    style.minWidth = \"0px\";\n    style.height = \"150px\";\n    style.display = \"block\";\n\n    outer.appendChild(inner);\n\n    var body = document.documentElement;\n    body.appendChild(outer);\n\n    var noScrollbar = inner.offsetWidth;\n\n    style.overflow = \"scroll\";\n    var withScrollbar = inner.offsetWidth;\n\n    if (noScrollbar == withScrollbar) {\n        withScrollbar = outer.clientWidth;\n    }\n\n    body.removeChild(outer);\n\n    return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n    exports.importCssString = function() {};\n}\n\nexports.computedStyle = function(element, style) {\n    return window.getComputedStyle(element, \"\") || {};\n};\n\nexports.setStyle = function(styles, property, value) {\n    if (styles[property] !== value) {\n        styles[property] = value;\n    }\n};\n\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n    ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n    : true;\n\nif (typeof document !== \"undefined\") {\n    var div = document.createElement(\"div\");\n    if (exports.HI_DPI && div.style.transform  !== undefined)\n        exports.HAS_CSS_TRANSFORMS = true;\n    if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n        exports.HAS_CSS_ANIMATION = true;\n    div = null;\n}\n\nif (exports.HAS_CSS_TRANSFORMS) {\n    exports.translate = function(element, tx, ty) {\n        element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) +\"px)\";\n    };\n} else {\n    exports.translate = function(element, tx, ty) {\n        element.style.top = Math.round(ty) + \"px\";\n        element.style.left = Math.round(tx) + \"px\";\n    };\n}\n\n});\n\ndefine(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./oop\");\nvar Keys = (function() {\n    var ret = {\n        MODIFIER_KEYS: {\n            16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\n        },\n\n        KEY_MODS: {\n            \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n            \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\n        },\n\n        FUNCTION_KEYS : {\n            8  : \"Backspace\",\n            9  : \"Tab\",\n            13 : \"Return\",\n            19 : \"Pause\",\n            27 : \"Esc\",\n            32 : \"Space\",\n            33 : \"PageUp\",\n            34 : \"PageDown\",\n            35 : \"End\",\n            36 : \"Home\",\n            37 : \"Left\",\n            38 : \"Up\",\n            39 : \"Right\",\n            40 : \"Down\",\n            44 : \"Print\",\n            45 : \"Insert\",\n            46 : \"Delete\",\n            96 : \"Numpad0\",\n            97 : \"Numpad1\",\n            98 : \"Numpad2\",\n            99 : \"Numpad3\",\n            100: \"Numpad4\",\n            101: \"Numpad5\",\n            102: \"Numpad6\",\n            103: \"Numpad7\",\n            104: \"Numpad8\",\n            105: \"Numpad9\",\n            '-13': \"NumpadEnter\",\n            112: \"F1\",\n            113: \"F2\",\n            114: \"F3\",\n            115: \"F4\",\n            116: \"F5\",\n            117: \"F6\",\n            118: \"F7\",\n            119: \"F8\",\n            120: \"F9\",\n            121: \"F10\",\n            122: \"F11\",\n            123: \"F12\",\n            144: \"Numlock\",\n            145: \"Scrolllock\"\n        },\n\n        PRINTABLE_KEYS: {\n           32: ' ',  48: '0',  49: '1',  50: '2',  51: '3',  52: '4', 53:  '5',\n           54: '6',  55: '7',  56: '8',  57: '9',  59: ';',  61: '=', 65:  'a',\n           66: 'b',  67: 'c',  68: 'd',  69: 'e',  70: 'f',  71: 'g', 72:  'h',\n           73: 'i',  74: 'j',  75: 'k',  76: 'l',  77: 'm',  78: 'n', 79:  'o',\n           80: 'p',  81: 'q',  82: 'r',  83: 's',  84: 't',  85: 'u', 86:  'v',\n           87: 'w',  88: 'x',  89: 'y',  90: 'z', 107: '+', 109: '-', 110: '.',\n          186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n          219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n        }\n    };\n    var name, i;\n    for (i in ret.FUNCTION_KEYS) {\n        name = ret.FUNCTION_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n    for (i in ret.PRINTABLE_KEYS) {\n        name = ret.PRINTABLE_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n    oop.mixin(ret, ret.MODIFIER_KEYS);\n    oop.mixin(ret, ret.PRINTABLE_KEYS);\n    oop.mixin(ret, ret.FUNCTION_KEYS);\n    ret.enter = ret[\"return\"];\n    ret.escape = ret.esc;\n    ret.del = ret[\"delete\"];\n    ret[173] = '-';\n    \n    (function() {\n        var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n        for (var i = Math.pow(2, mods.length); i--;) {            \n            ret.KEY_MODS[i] = mods.filter(function(x) {\n                return i & ret.KEY_MODS[x];\n            }).join(\"-\") + \"-\";\n        }\n    })();\n\n    ret.KEY_MODS[0] = \"\";\n    ret.KEY_MODS[-1] = \"input-\";\n\n    return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n    var keyString = Keys[keyCode];\n    if (typeof keyString != \"string\")\n        keyString = String.fromCharCode(keyCode);\n    return keyString.toLowerCase();\n};\n\n});\n\ndefine(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nexports.addListener = function(elem, type, callback) {\n    if (elem.addEventListener) {\n        return elem.addEventListener(type, callback, false);\n    }\n    if (elem.attachEvent) {\n        var wrapper = function() {\n            callback.call(elem, window.event);\n        };\n        callback._wrapper = wrapper;\n        elem.attachEvent(\"on\" + type, wrapper);\n    }\n};\n\nexports.removeListener = function(elem, type, callback) {\n    if (elem.removeEventListener) {\n        return elem.removeEventListener(type, callback, false);\n    }\n    if (elem.detachEvent) {\n        elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n    }\n};\nexports.stopEvent = function(e) {\n    exports.stopPropagation(e);\n    exports.preventDefault(e);\n    return false;\n};\n\nexports.stopPropagation = function(e) {\n    if (e.stopPropagation)\n        e.stopPropagation();\n    else\n        e.cancelBubble = true;\n};\n\nexports.preventDefault = function(e) {\n    if (e.preventDefault)\n        e.preventDefault();\n    else\n        e.returnValue = false;\n};\nexports.getButton = function(e) {\n    if (e.type == \"dblclick\")\n        return 0;\n    if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n        return 2;\n    if (e.preventDefault) {\n        return e.button;\n    }\n    else {\n        return {1:0, 2:2, 4:1}[e.button];\n    }\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n    function onMouseUp(e) {\n        eventHandler && eventHandler(e);\n        releaseCaptureHandler && releaseCaptureHandler(e);\n\n        exports.removeListener(document, \"mousemove\", eventHandler, true);\n        exports.removeListener(document, \"mouseup\", onMouseUp, true);\n        exports.removeListener(document, \"dragstart\", onMouseUp, true);\n    }\n\n    exports.addListener(document, \"mousemove\", eventHandler, true);\n    exports.addListener(document, \"mouseup\", onMouseUp, true);\n    exports.addListener(document, \"dragstart\", onMouseUp, true);\n    \n    return onMouseUp;\n};\n\nexports.addTouchMoveListener = function (el, callback) {\n    var startx, starty;\n    exports.addListener(el, \"touchstart\", function (e) {\n        var touches = e.touches;\n        var touchObj = touches[0];\n        startx = touchObj.clientX;\n        starty = touchObj.clientY;\n    });\n    exports.addListener(el, \"touchmove\", function (e) {\n        var touches = e.touches;\n        if (touches.length > 1) return;\n        \n        var touchObj = touches[0];\n\n        e.wheelX = startx - touchObj.clientX;\n        e.wheelY = starty - touchObj.clientY;\n\n        startx = touchObj.clientX;\n        starty = touchObj.clientY;\n\n        callback(e);\n    });\n};\n\nexports.addMouseWheelListener = function(el, callback) {\n    if (\"onmousewheel\" in el) {\n        exports.addListener(el, \"mousewheel\", function(e) {\n            var factor = 8;\n            if (e.wheelDeltaX !== undefined) {\n                e.wheelX = -e.wheelDeltaX / factor;\n                e.wheelY = -e.wheelDeltaY / factor;\n            } else {\n                e.wheelX = 0;\n                e.wheelY = -e.wheelDelta / factor;\n            }\n            callback(e);\n        });\n    } else if (\"onwheel\" in el) {\n        exports.addListener(el, \"wheel\",  function(e) {\n            var factor = 0.35;\n            switch (e.deltaMode) {\n                case e.DOM_DELTA_PIXEL:\n                    e.wheelX = e.deltaX * factor || 0;\n                    e.wheelY = e.deltaY * factor || 0;\n                    break;\n                case e.DOM_DELTA_LINE:\n                case e.DOM_DELTA_PAGE:\n                    e.wheelX = (e.deltaX || 0) * 5;\n                    e.wheelY = (e.deltaY || 0) * 5;\n                    break;\n            }\n            \n            callback(e);\n        });\n    } else {\n        exports.addListener(el, \"DOMMouseScroll\", function(e) {\n            if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n                e.wheelX = (e.detail || 0) * 5;\n                e.wheelY = 0;\n            } else {\n                e.wheelX = 0;\n                e.wheelY = (e.detail || 0) * 5;\n            }\n            callback(e);\n        });\n    }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\n    var clicks = 0;\n    var startX, startY, timer; \n    var eventNames = {\n        2: \"dblclick\",\n        3: \"tripleclick\",\n        4: \"quadclick\"\n    };\n\n    function onMousedown(e) {\n        if (exports.getButton(e) !== 0) {\n            clicks = 0;\n        } else if (e.detail > 1) {\n            clicks++;\n            if (clicks > 4)\n                clicks = 1;\n        } else {\n            clicks = 1;\n        }\n        if (useragent.isIE) {\n            var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n            if (!timer || isNewClick)\n                clicks = 1;\n            if (timer)\n                clearTimeout(timer);\n            timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n            if (clicks == 1) {\n                startX = e.clientX;\n                startY = e.clientY;\n            }\n        }\n        \n        e._clicks = clicks;\n\n        eventHandler[callbackName](\"mousedown\", e);\n\n        if (clicks > 4)\n            clicks = 0;\n        else if (clicks > 1)\n            return eventHandler[callbackName](eventNames[clicks], e);\n    }\n    function onDblclick(e) {\n        clicks = 2;\n        if (timer)\n            clearTimeout(timer);\n        timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n        eventHandler[callbackName](\"mousedown\", e);\n        eventHandler[callbackName](eventNames[clicks], e);\n    }\n    if (!Array.isArray(elements))\n        elements = [elements];\n    elements.forEach(function(el) {\n        exports.addListener(el, \"mousedown\", onMousedown);\n        if (useragent.isOldIE)\n            exports.addListener(el, \"dblclick\", onDblclick);\n    });\n};\n\nvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\n    ? function(e) {\n        return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n    }\n    : function(e) {\n        return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n    };\n\nexports.getModifierString = function(e) {\n    return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n    var hashId = getModifierHash(e);\n\n    if (!useragent.isMac && pressedKeys) {\n        if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n            hashId |= 8;\n        if (pressedKeys.altGr) {\n            if ((3 & hashId) != 3)\n                pressedKeys.altGr = 0;\n            else\n                return;\n        }\n        if (keyCode === 18 || keyCode === 17) {\n            var location = \"location\" in e ? e.location : e.keyLocation;\n            if (keyCode === 17 && location === 1) {\n                if (pressedKeys[keyCode] == 1)\n                    ts = e.timeStamp;\n            } else if (keyCode === 18 && hashId === 3 && location === 2) {\n                var dt = e.timeStamp - ts;\n                if (dt < 50)\n                    pressedKeys.altGr = true;\n            }\n        }\n    }\n    \n    if (keyCode in keys.MODIFIER_KEYS) {\n        keyCode = -1;\n    }\n    if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\n        keyCode = -1;\n    }\n    \n    if (!hashId && keyCode === 13) {\n        var location = \"location\" in e ? e.location : e.keyLocation;\n        if (location === 3) {\n            callback(e, hashId, -keyCode);\n            if (e.defaultPrevented)\n                return;\n        }\n    }\n    \n    if (useragent.isChromeOS && hashId & 8) {\n        callback(e, hashId, keyCode);\n        if (e.defaultPrevented)\n            return;\n        else\n            hashId &= ~8;\n    }\n    if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n        return false;\n    }\n    \n    return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback) {\n    var addListener = exports.addListener;\n    if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n        var lastKeyDownKeyCode = null;\n        addListener(el, \"keydown\", function(e) {\n            lastKeyDownKeyCode = e.keyCode;\n        });\n        addListener(el, \"keypress\", function(e) {\n            return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n        });\n    } else {\n        var lastDefaultPrevented = null;\n\n        addListener(el, \"keydown\", function(e) {\n            pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n            var result = normalizeCommandKeys(callback, e, e.keyCode);\n            lastDefaultPrevented = e.defaultPrevented;\n            return result;\n        });\n\n        addListener(el, \"keypress\", function(e) {\n            if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n                exports.stopEvent(e);\n                lastDefaultPrevented = null;\n            }\n        });\n\n        addListener(el, \"keyup\", function(e) {\n            pressedKeys[e.keyCode] = null;\n        });\n\n        if (!pressedKeys) {\n            resetPressedKeys();\n            addListener(window, \"focus\", resetPressedKeys);\n        }\n    }\n};\nfunction resetPressedKeys() {\n    pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n    var postMessageId = 1;\n    exports.nextTick = function(callback, win) {\n        win = win || window;\n        var messageName = \"zero-timeout-message-\" + (postMessageId++);\n        \n        var listener = function(e) {\n            if (e.data == messageName) {\n                exports.stopPropagation(e);\n                exports.removeListener(win, \"message\", listener);\n                callback();\n            }\n        };\n        \n        exports.addListener(win, \"message\", listener);\n        win.postMessage(messageName, \"*\");\n    };\n}\n\nexports.$idleBlocked = false;\nexports.onIdle = function(cb, timeout) {\n    return setTimeout(function handler() {\n        if (!exports.$idleBlocked) {\n            cb();\n        } else {\n            setTimeout(handler, 100);\n        }\n    }, timeout);\n};\n\nexports.$idleBlockId = null;\nexports.blockIdle = function(delay) {\n    if (exports.$idleBlockId)\n        clearTimeout(exports.$idleBlockId);\n        \n    exports.$idleBlocked = true;\n    exports.$idleBlockId = setTimeout(function() {\n        exports.$idleBlocked = false;\n    }, delay || 100);\n};\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n    || window.mozRequestAnimationFrame\n    || window.webkitRequestAnimationFrame\n    || window.msRequestAnimationFrame\n    || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n    exports.nextFrame = exports.nextFrame.bind(window);\nelse\n    exports.nextFrame = function(callback) {\n        setTimeout(callback, 17);\n    };\n});\n\ndefine(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE =  useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\n\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\n\nvar TextInput = function(parentNode, host) {\n    var text = dom.createElement(\"textarea\");\n    text.className = \"ace_text-input\";\n\n    text.setAttribute(\"wrap\", \"off\");\n    text.setAttribute(\"autocorrect\", \"off\");\n    text.setAttribute(\"autocapitalize\", \"off\");\n    text.setAttribute(\"spellcheck\", false);\n\n    text.style.opacity = \"0\";\n    parentNode.insertBefore(text, parentNode.firstChild);\n\n    var copied = false;\n    var pasted = false;\n    var inComposition = false;\n    var sendingText = false;\n    var tempStyle = '';\n    var isSelectionEmpty = true;\n    var copyWithEmptySelection = false;\n    \n    if (!useragent.isMobile)\n        text.style.fontSize = \"1px\";\n\n    var commandMode = false;\n    var ignoreFocusEvents = false;\n    \n    var lastValue = \"\";\n    var lastSelectionStart = 0;\n    var lastSelectionEnd = 0;\n    try { var isFocused = document.activeElement === text; } catch(e) {}\n    \n    event.addListener(text, \"blur\", function(e) {\n        if (ignoreFocusEvents) return;\n        host.onBlur(e);\n        isFocused = false;\n    });\n    event.addListener(text, \"focus\", function(e) {\n        if (ignoreFocusEvents) return;\n        isFocused = true;\n        if (useragent.isEdge) {\n            try {\n                if (!document.hasFocus())\n                    return;\n            } catch(e) {}\n        }\n        host.onFocus(e);\n        if (useragent.isEdge)\n            setTimeout(resetSelection);\n        else\n            resetSelection();\n    });\n    this.$focusScroll = false;\n    this.focus = function() {\n        if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n            return text.focus({ preventScroll: true });\n\n        var top = text.style.top;\n        text.style.position = \"fixed\";\n        text.style.top = \"0px\";\n        try {\n            var isTransformed = text.getBoundingClientRect().top != 0;\n        } catch(e) {\n            return;\n        }\n        var ancestors = [];\n        if (isTransformed) {\n            var t = text.parentElement;\n            while (t && t.nodeType == 1) {\n                ancestors.push(t);\n                t.setAttribute(\"ace_nocontext\", true);\n                if (!t.parentElement && t.getRootNode)\n                    t = t.getRootNode().host;\n                else\n                    t = t.parentElement;\n            }\n        }\n        text.focus({ preventScroll: true });\n        if (isTransformed) {\n            ancestors.forEach(function(p) {\n                p.removeAttribute(\"ace_nocontext\");\n            });\n        }\n        setTimeout(function() {\n            text.style.position = \"\";\n            if (text.style.top == \"0px\")\n                text.style.top = top;\n        }, 0);\n    };\n    this.blur = function() {\n        text.blur();\n    };\n    this.isFocused = function() {\n        return isFocused;\n    };\n    \n    host.on(\"beforeEndOperation\", function() {\n        if (host.curOp && host.curOp.command.name == \"insertstring\")\n            return;\n        if (inComposition) {\n            lastValue = text.value = \"\";\n            onCompositionEnd();\n        }\n        resetSelection();\n    });\n    \n    var resetSelection = isIOS\n    ? function(value) {\n        if (!isFocused || (copied && !value)) return;\n        if (!value) \n            value = \"\";\n        var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n        if (newValue != text.value)\n            text.value = lastValue = newValue;\n        \n        var selectionStart = 4;\n        var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n\n        if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n            text.setSelectionRange(selectionStart, selectionEnd);\n        }\n        lastSelectionStart = selectionStart;\n        lastSelectionEnd = selectionEnd;\n    }\n    : function() {\n        if (inComposition || sendingText)\n            return;\n        if (!isFocused && !afterContextMenu)\n            return;\n        inComposition = true;\n        \n        var selection = host.selection;\n        var range = selection.getRange();\n        var row = selection.cursor.row;\n        var selectionStart = range.start.column;\n        var selectionEnd = range.end.column;\n        var line = host.session.getLine(row);\n\n        if (range.start.row != row) {\n            var prevLine = host.session.getLine(row - 1);\n            selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n            selectionEnd += prevLine.length + 1;\n            line = prevLine + \"\\n\" + line;\n        }\n        else if (range.end.row != row) {\n            var nextLine = host.session.getLine(row + 1);\n            selectionEnd = range.end.row > row  + 1 ? nextLine.length : selectionEnd;\n            selectionEnd += line.length + 1;\n            line = line + \"\\n\" + nextLine;\n        }\n\n        if (line.length > MAX_LINE_LENGTH) {\n            if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n                line = line.slice(0, MAX_LINE_LENGTH);\n            } else {\n                line = \"\\n\";\n                selectionStart = 0;\n                selectionEnd = 1;\n            }\n        }\n\n        var newValue = line + \"\\n\\n\";\n        if (newValue != lastValue) {\n            text.value = lastValue = newValue;\n            lastSelectionStart = lastSelectionEnd = newValue.length;\n        }\n        if (afterContextMenu) {\n            lastSelectionStart = text.selectionStart;\n            lastSelectionEnd = text.selectionEnd;\n        }\n        if (\n            lastSelectionEnd != selectionEnd \n            || lastSelectionStart != selectionStart \n            || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n        ) {\n            try {\n                text.setSelectionRange(selectionStart, selectionEnd);\n                lastSelectionStart = selectionStart;\n                lastSelectionEnd = selectionEnd;\n            } catch(e){}\n        }\n        inComposition = false;\n    };\n\n    if (isFocused)\n        host.onFocus();\n\n\n    var isAllSelected = function(text) {\n        return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n            && text.value === lastValue && lastValue\n            && text.selectionEnd !== lastSelectionEnd;\n    };\n\n    var onSelect = function(e) {\n        if (inComposition)\n            return;\n        if (copied) {\n            copied = false;\n        } else if (isAllSelected(text)) {\n            host.selectAll();\n            resetSelection();\n        }\n    };\n\n    var inputHandler = null;\n    this.setInputHandler = function(cb) {inputHandler = cb;};\n    this.getInputHandler = function() {return inputHandler;};\n    var afterContextMenu = false;\n    \n    var sendText = function(value, fromInput) {\n        if (afterContextMenu)\n            afterContextMenu = false;\n        if (pasted) {\n            resetSelection();\n            if (value)\n                host.onPaste(value);\n            pasted = false;\n            return \"\";\n        } else {\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n        \n            var extendLeft = lastSelectionStart;\n            var extendRight = lastValue.length - lastSelectionEnd;\n            \n            var inserted = value;\n            var restoreStart = value.length - selectionStart;\n            var restoreEnd = value.length - selectionEnd;\n        \n            var i = 0;\n            while (extendLeft > 0 && lastValue[i] == value[i]) {\n                i++;\n                extendLeft--;\n            }\n            inserted = inserted.slice(i);\n            i = 1;\n            while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1  && lastValue[lastValue.length - i] == value[value.length - i]) {\n                i++;\n                extendRight--;\n            }\n            restoreStart -= i-1;\n            restoreEnd -= i-1;\n            inserted = inserted.slice(0, inserted.length - i+1);\n            if (!fromInput && restoreStart == inserted.length && !extendLeft && !extendRight && !restoreEnd)\n                return \"\";\n            \n            sendingText = true;\n            if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n                host.onTextInput(inserted);\n            } else {\n                host.onTextInput(inserted, {\n                    extendLeft: extendLeft,\n                    extendRight: extendRight,\n                    restoreStart: restoreStart,\n                    restoreEnd: restoreEnd\n                });\n            }\n            sendingText = false;\n            \n            lastValue = value;\n            lastSelectionStart = selectionStart;\n            lastSelectionEnd = selectionEnd;\n            return inserted;\n        }\n    };\n    var onInput = function(e) {\n        if (inComposition)\n            return onCompositionUpdate();\n        var data = text.value;\n        var inserted = sendText(data, true);\n        if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted))\n            resetSelection();\n    };\n    \n    var handleClipboardData = function(e, data, forceIEMime) {\n        var clipboardData = e.clipboardData || window.clipboardData;\n        if (!clipboardData || BROKEN_SETDATA)\n            return;\n        var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n        try {\n            if (data) {\n                return clipboardData.setData(mime, data) !== false;\n            } else {\n                return clipboardData.getData(mime);\n            }\n        } catch(e) {\n            if (!forceIEMime)\n                return handleClipboardData(e, data, true);\n        }\n    };\n\n    var doCopy = function(e, isCut) {\n        var data = host.getCopyText();\n        if (!data)\n            return event.preventDefault(e);\n\n        if (handleClipboardData(e, data)) {\n            if (isIOS) {\n                resetSelection(data);\n                copied = data;\n                setTimeout(function () {\n                    copied = false;\n                }, 10);\n            }\n            isCut ? host.onCut() : host.onCopy();\n            event.preventDefault(e);\n        } else {\n            copied = true;\n            text.value = data;\n            text.select();\n            setTimeout(function(){\n                copied = false;\n                resetSelection();\n                isCut ? host.onCut() : host.onCopy();\n            });\n        }\n    };\n    \n    var onCut = function(e) {\n        doCopy(e, true);\n    };\n    \n    var onCopy = function(e) {\n        doCopy(e, false);\n    };\n    \n    var onPaste = function(e) {\n        var data = handleClipboardData(e);\n        if (typeof data == \"string\") {\n            if (data)\n                host.onPaste(data, e);\n            if (useragent.isIE)\n                setTimeout(resetSelection);\n            event.preventDefault(e);\n        }\n        else {\n            text.value = \"\";\n            pasted = true;\n        }\n    };\n\n    event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n    event.addListener(text, \"select\", onSelect);\n    event.addListener(text, \"input\", onInput);\n\n    event.addListener(text, \"cut\", onCut);\n    event.addListener(text, \"copy\", onCopy);\n    event.addListener(text, \"paste\", onPaste);\n    if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n        event.addListener(parentNode, \"keydown\", function(e) {\n            if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n                return;\n\n            switch (e.keyCode) {\n                case 67:\n                    onCopy(e);\n                    break;\n                case 86:\n                    onPaste(e);\n                    break;\n                case 88:\n                    onCut(e);\n                    break;\n            }\n        });\n    }\n    var onCompositionStart = function(e) {\n        if (inComposition || !host.onCompositionStart || host.$readOnly) \n            return;\n        \n        inComposition = {};\n\n        if (commandMode)\n            return;\n        \n        setTimeout(onCompositionUpdate, 0);\n        host.on(\"mousedown\", cancelComposition);\n        \n        var range = host.getSelectionRange();\n        range.end.row = range.start.row;\n        range.end.column = range.start.column;\n        inComposition.markerRange = range;\n        inComposition.selectionStart = lastSelectionStart;\n        host.onCompositionStart(inComposition);\n        \n        if (inComposition.useTextareaForIME) {\n            text.value = \"\";\n            lastValue = \"\";\n            lastSelectionStart = 0;\n            lastSelectionEnd = 0;\n        }\n        else {\n            if (text.msGetInputContext)\n                inComposition.context = text.msGetInputContext();\n            if (text.getInputContext)\n                inComposition.context = text.getInputContext();\n        }\n    };\n\n    var onCompositionUpdate = function() {\n        if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n            return;\n        if (commandMode)\n            return cancelComposition();\n        \n        if (inComposition.useTextareaForIME) {\n            host.onCompositionUpdate(text.value);\n        }\n        else {\n            var data = text.value;\n            sendText(data);\n            if (inComposition.markerRange) {\n                if (inComposition.context) {\n                    inComposition.markerRange.start.column = inComposition.selectionStart\n                        = inComposition.context.compositionStartOffset;\n                }\n                inComposition.markerRange.end.column = inComposition.markerRange.start.column\n                    + lastSelectionEnd - inComposition.selectionStart;\n            }\n        }\n    };\n\n    var onCompositionEnd = function(e) {\n        if (!host.onCompositionEnd || host.$readOnly) return;\n        inComposition = false;\n        host.onCompositionEnd();\n        host.off(\"mousedown\", cancelComposition);\n        if (e) onInput();\n    };\n    \n\n    function cancelComposition() {\n        ignoreFocusEvents = true;\n        text.blur();\n        text.focus();\n        ignoreFocusEvents = false;\n    }\n\n    var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n    \n    function onKeyup(e) {\n        if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n            if (!inComposition)\n                lastValue = text.value;\n            lastSelectionStart = lastSelectionEnd = -1;\n            resetSelection();\n        }\n        syncComposition();\n    }\n\n    event.addListener(text, \"compositionstart\", onCompositionStart);\n    event.addListener(text, \"compositionupdate\", onCompositionUpdate);\n    event.addListener(text, \"keyup\", onKeyup);\n    event.addListener(text, \"keydown\", syncComposition);\n    event.addListener(text, \"compositionend\", onCompositionEnd);\n\n    this.getElement = function() {\n        return text;\n    };\n    this.setCommandMode = function(value) {\n       commandMode = value;\n       text.readOnly = false;\n    };\n    \n    this.setReadOnly = function(readOnly) {\n        if (!commandMode)\n            text.readOnly = readOnly;\n    };\n\n    this.setCopyWithEmptySelection = function(value) {\n        copyWithEmptySelection = value;\n    };\n\n    this.onContextMenu = function(e) {\n        afterContextMenu = true;\n        resetSelection();\n        host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n        this.moveToMouse(e, true);\n    };\n    \n    this.moveToMouse = function(e, bringToFront) {\n        if (!tempStyle)\n            tempStyle = text.style.cssText;\n        text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n            + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n            + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n\n        var rect = host.container.getBoundingClientRect();\n        var style = dom.computedStyle(host.container);\n        var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n        var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n        var maxTop = rect.bottom - top - text.clientHeight -2;\n        var move = function(e) {\n            text.style.left = e.clientX - left - 2 + \"px\";\n            text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n        }; \n        move(e);\n\n        if (e.type != \"mousedown\")\n            return;\n\n        if (host.renderer.$keepTextAreaAtCursor)\n            host.renderer.$keepTextAreaAtCursor = null;\n\n        clearTimeout(closeTimeout);\n        if (useragent.isWin)\n            event.capture(host.container, move, onContextMenuClose);\n    };\n\n    this.onContextMenuClose = onContextMenuClose;\n    var closeTimeout;\n    function onContextMenuClose() {\n        clearTimeout(closeTimeout);\n        closeTimeout = setTimeout(function () {\n            if (tempStyle) {\n                text.style.cssText = tempStyle;\n                tempStyle = '';\n            }\n            if (host.renderer.$keepTextAreaAtCursor == null) {\n                host.renderer.$keepTextAreaAtCursor = true;\n                host.renderer.$moveTextAreaToCursor();\n            }\n        }, 0);\n    }\n\n    var onContextMenu = function(e) {\n        host.textInput.onContextMenu(e);\n        onContextMenuClose();\n    };\n    event.addListener(text, \"mouseup\", onContextMenu);\n    event.addListener(text, \"mousedown\", function(e) {\n        e.preventDefault();\n        onContextMenuClose();\n    });\n    event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n    event.addListener(text, \"contextmenu\", onContextMenu);\n    \n    if (isIOS)\n        addIosSelectionHandler(parentNode, host, text);\n\n    function addIosSelectionHandler(parentNode, host, text) {\n        var typingResetTimeout = null;\n        var typing = false;\n \n        text.addEventListener(\"keydown\", function (e) {\n            if (typingResetTimeout) clearTimeout(typingResetTimeout);\n            typing = true;\n        }, true);\n\n        text.addEventListener(\"keyup\", function (e) {\n            typingResetTimeout = setTimeout(function () {\n                typing = false;\n            }, 100);\n        }, true);\n        var detectArrowKeys = function(e) {\n            if (document.activeElement !== text) return;\n            if (typing || inComposition) return;\n\n            if (copied) {\n                return;\n            }\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n            \n            var key = null;\n            var modifier = 0;\n            console.log(selectionStart, selectionEnd);\n            if (selectionStart == 0) {\n                key = KEYS.up;\n            } else if (selectionStart == 1) {\n                key = KEYS.home;\n            } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n                key = KEYS.end;\n            } else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n                key = KEYS.left;\n                modifier = MODS.option;\n            } else if (\n                selectionStart < lastSelectionStart\n                || (\n                    selectionStart == lastSelectionStart \n                    && lastSelectionEnd != lastSelectionStart\n                    && selectionStart == selectionEnd\n                )\n            ) {\n                key = KEYS.left;\n            } else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n                key = KEYS.down;\n            } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n                key = KEYS.right;\n                modifier = MODS.option;\n            } else if (\n                selectionEnd > lastSelectionEnd\n                || (\n                    selectionEnd == lastSelectionEnd \n                    && lastSelectionEnd != lastSelectionStart\n                    && selectionStart == selectionEnd\n                )\n            ) {\n                key = KEYS.right;\n            }\n            \n            if (selectionStart !== selectionEnd)\n                modifier |= MODS.shift;\n\n            if (key) {\n                host.onCommandKey(null, modifier, key);\n                lastSelectionStart = selectionStart;\n                lastSelectionEnd = selectionEnd;\n                resetSelection(\"\");\n            }\n        };\n        document.addEventListener(\"selectionchange\", detectArrowKeys);\n        host.on(\"destroy\", function() {\n            document.removeEventListener(\"selectionchange\", detectArrowKeys);\n        });\n    }\n\n};\n\nexports.TextInput = TextInput;\n});\n\ndefine(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n    mouseHandler.$clickSelection = null;\n\n    var editor = mouseHandler.editor;\n    editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n    editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n    editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n\n    var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n        \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n    exports.forEach(function(x) {\n        mouseHandler[x] = this[x];\n    }, this);\n\n    mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n    mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n    this.onMouseDown = function(ev) {\n        var inSelection = ev.inSelection();\n        var pos = ev.getDocumentPosition();\n        this.mousedownEvent = ev;\n        var editor = this.editor;\n\n        var button = ev.getButton();\n        if (button !== 0) {\n            var selectionRange = editor.getSelectionRange();\n            var selectionEmpty = selectionRange.isEmpty();\n            if (selectionEmpty || button == 1)\n                editor.selection.moveToPosition(pos);\n            if (button == 2) {\n                editor.textInput.onContextMenu(ev.domEvent);\n                if (!useragent.isMozilla)\n                    ev.preventDefault();\n            }\n            return;\n        }\n\n        this.mousedownEvent.time = Date.now();\n        if (inSelection && !editor.isFocused()) {\n            editor.focus();\n            if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n                this.setState(\"focusWait\");\n                this.captureMouse(ev);\n                return;\n            }\n        }\n\n        this.captureMouse(ev);\n        this.startSelect(pos, ev.domEvent._clicks > 1);\n        return ev.preventDefault();\n    };\n\n    this.startSelect = function(pos, waitForClickSelection) {\n        pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var editor = this.editor;\n        if (!this.mousedownEvent) return;\n        if (this.mousedownEvent.getShiftKey())\n            editor.selection.selectToPosition(pos);\n        else if (!waitForClickSelection)\n            editor.selection.moveToPosition(pos);\n        if (!waitForClickSelection)\n            this.select();\n        if (editor.renderer.scroller.setCapture) {\n            editor.renderer.scroller.setCapture();\n        }\n        editor.setStyle(\"ace_selecting\");\n        this.setState(\"select\");\n    };\n\n    this.select = function() {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        if (this.$clickSelection) {\n            var cmp = this.$clickSelection.comparePoint(cursor);\n\n            if (cmp == -1) {\n                anchor = this.$clickSelection.end;\n            } else if (cmp == 1) {\n                anchor = this.$clickSelection.start;\n            } else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n\n    this.extendSelectionBy = function(unitName) {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var range = editor.selection[unitName](cursor.row, cursor.column);\n        if (this.$clickSelection) {\n            var cmpStart = this.$clickSelection.comparePoint(range.start);\n            var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n            if (cmpStart == -1 && cmpEnd <= 0) {\n                anchor = this.$clickSelection.end;\n                if (range.end.row != cursor.row || range.end.column != cursor.column)\n                    cursor = range.start;\n            } else if (cmpEnd == 1 && cmpStart >= 0) {\n                anchor = this.$clickSelection.start;\n                if (range.start.row != cursor.row || range.start.column != cursor.column)\n                    cursor = range.end;\n            } else if (cmpStart == -1 && cmpEnd == 1) {\n                cursor = range.end;\n                anchor = range.start;\n            } else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n\n    this.selectEnd =\n    this.selectAllEnd =\n    this.selectByWordsEnd =\n    this.selectByLinesEnd = function() {\n        this.$clickSelection = null;\n        this.editor.unsetStyle(\"ace_selecting\");\n        if (this.editor.renderer.scroller.releaseCapture) {\n            this.editor.renderer.scroller.releaseCapture();\n        }\n    };\n\n    this.focusWait = function() {\n        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n        var time = Date.now();\n\n        if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n            this.startSelect(this.mousedownEvent.getDocumentPosition());\n    };\n\n    this.onDoubleClick = function(ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        var session = editor.session;\n\n        var range = session.getBracketRange(pos);\n        if (range) {\n            if (range.isEmpty()) {\n                range.start.column--;\n                range.end.column++;\n            }\n            this.setState(\"select\");\n        } else {\n            range = editor.selection.getWordRange(pos.row, pos.column);\n            this.setState(\"selectByWords\");\n        }\n        this.$clickSelection = range;\n        this.select();\n    };\n\n    this.onTripleClick = function(ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n\n        this.setState(\"selectByLines\");\n        var range = editor.getSelectionRange();\n        if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n            this.$clickSelection = editor.selection.getLineRange(range.start.row);\n            this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n        } else {\n            this.$clickSelection = editor.selection.getLineRange(pos.row);\n        }\n        this.select();\n    };\n\n    this.onQuadClick = function(ev) {\n        var editor = this.editor;\n\n        editor.selectAll();\n        this.$clickSelection = editor.getSelectionRange();\n        this.setState(\"selectAll\");\n    };\n\n    this.onMouseWheel = function(ev) {\n        if (ev.getAccelKey())\n            return;\n        if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n            ev.wheelX = ev.wheelY;\n            ev.wheelY = 0;\n        }\n        \n        var editor = this.editor;\n        \n        if (!this.$lastScroll)\n            this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n        \n        var prevScroll = this.$lastScroll;\n        var t = ev.domEvent.timeStamp;\n        var dt = t - prevScroll.t;\n        var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n        var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n        if (dt < SCROLL_COOLDOWN_T) {\n            vx = (vx + prevScroll.vx) / 2;\n            vy = (vy + prevScroll.vy) / 2;\n        }\n        \n        var direction = Math.abs(vx / vy);\n        \n        var canScroll = false;\n        if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n            canScroll = true;\n        if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n            canScroll = true;\n            \n        if (canScroll) {\n            prevScroll.allowed = t;\n        } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n            var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n                && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n            if (isSlower) {\n                canScroll = true;\n                prevScroll.allowed = t;\n            }\n            else {\n                prevScroll.allowed = 0;\n            }\n        }\n        \n        prevScroll.t = t;\n        prevScroll.vx = vx;\n        prevScroll.vy = vy;\n\n        if (canScroll) {\n            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n            return ev.stop();\n        }\n    };\n    \n    this.onTouchMove = function(ev) {\n        this.editor._emit(\"mousewheel\", ev);\n    };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n    if (range.start.row == range.end.row)\n        var cmp = 2 * cursor.column - range.start.column - range.end.column;\n    else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n        var cmp = cursor.column - 4;\n    else\n        var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n    if (cmp < 0)\n        return {cursor: range.start, anchor: range.end};\n    else\n        return {cursor: range.end, anchor: range.start};\n}\n\n});\n\ndefine(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n    this.isOpen = false;\n    this.$element = null;\n    this.$parentNode = parentNode;\n}\n\n(function() {\n    this.$init = function() {\n        this.$element = dom.createElement(\"div\");\n        this.$element.className = \"ace_tooltip\";\n        this.$element.style.display = \"none\";\n        this.$parentNode.appendChild(this.$element);\n        return this.$element;\n    };\n    this.getElement = function() {\n        return this.$element || this.$init();\n    };\n    this.setText = function(text) {\n        this.getElement().textContent = text;\n    };\n    this.setHtml = function(html) {\n        this.getElement().innerHTML = html;\n    };\n    this.setPosition = function(x, y) {\n        this.getElement().style.left = x + \"px\";\n        this.getElement().style.top = y + \"px\";\n    };\n    this.setClassName = function(className) {\n        dom.addCssClass(this.getElement(), className);\n    };\n    this.show = function(text, x, y) {\n        if (text != null)\n            this.setText(text);\n        if (x != null && y != null)\n            this.setPosition(x, y);\n        if (!this.isOpen) {\n            this.getElement().style.display = \"block\";\n            this.isOpen = true;\n        }\n    };\n\n    this.hide = function() {\n        if (this.isOpen) {\n            this.getElement().style.display = \"none\";\n            this.isOpen = false;\n        }\n    };\n    this.getHeight = function() {\n        return this.getElement().offsetHeight;\n    };\n    this.getWidth = function() {\n        return this.getElement().offsetWidth;\n    };\n    \n    this.destroy = function() {\n        this.isOpen = false;\n        if (this.$element && this.$element.parentNode) {\n            this.$element.parentNode.removeChild(this.$element);\n        }\n    };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\ndefine(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var gutter = editor.renderer.$gutterLayer;\n    var tooltip = new GutterTooltip(editor.container);\n\n    mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n        if (!editor.isFocused() || e.getButton() != 0)\n            return;\n        var gutterRegion = gutter.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\")\n            return;\n\n        var row = e.getDocumentPosition().row;\n        var selection = editor.session.selection;\n\n        if (e.getShiftKey())\n            selection.selectTo(row, 0);\n        else {\n            if (e.domEvent.detail == 2) {\n                editor.selectAll();\n                return e.preventDefault();\n            }\n            mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n        }\n        mouseHandler.setState(\"selectByLines\");\n        mouseHandler.captureMouse(e);\n        return e.preventDefault();\n    });\n\n\n    var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n    function showTooltip() {\n        var row = mouseEvent.getDocumentPosition().row;\n        var annotation = gutter.$annotations[row];\n        if (!annotation)\n            return hideTooltip();\n\n        var maxRow = editor.session.getLength();\n        if (row == maxRow) {\n            var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n            var pos = mouseEvent.$pos;\n            if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n                return hideTooltip();\n        }\n\n        if (tooltipAnnotation == annotation)\n            return;\n        tooltipAnnotation = annotation.text.join(\"<br/>\");\n\n        tooltip.setHtml(tooltipAnnotation);\n        tooltip.show();\n        editor._signal(\"showGutterTooltip\", tooltip);\n        editor.on(\"mousewheel\", hideTooltip);\n\n        if (mouseHandler.$tooltipFollowsMouse) {\n            moveTooltip(mouseEvent);\n        } else {\n            var gutterElement = mouseEvent.domEvent.target;\n            var rect = gutterElement.getBoundingClientRect();\n            var style = tooltip.getElement().style;\n            style.left = rect.right + \"px\";\n            style.top = rect.bottom + \"px\";\n        }\n    }\n\n    function hideTooltip() {\n        if (tooltipTimeout)\n            tooltipTimeout = clearTimeout(tooltipTimeout);\n        if (tooltipAnnotation) {\n            tooltip.hide();\n            tooltipAnnotation = null;\n            editor._signal(\"hideGutterTooltip\", tooltip);\n            editor.removeEventListener(\"mousewheel\", hideTooltip);\n        }\n    }\n\n    function moveTooltip(e) {\n        tooltip.setPosition(e.x, e.y);\n    }\n\n    mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n        var target = e.domEvent.target || e.domEvent.srcElement;\n        if (dom.hasCssClass(target, \"ace_fold-widget\"))\n            return hideTooltip();\n\n        if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n            moveTooltip(e);\n\n        mouseEvent = e;\n        if (tooltipTimeout)\n            return;\n        tooltipTimeout = setTimeout(function() {\n            tooltipTimeout = null;\n            if (mouseEvent && !mouseHandler.isMousePressed)\n                showTooltip();\n            else\n                hideTooltip();\n        }, 50);\n    });\n\n    event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n        mouseEvent = null;\n        if (!tooltipAnnotation || tooltipTimeout)\n            return;\n\n        tooltipTimeout = setTimeout(function() {\n            tooltipTimeout = null;\n            hideTooltip();\n        }, 50);\n    });\n    \n    editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n    Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n    this.setPosition = function(x, y) {\n        var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n        var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n        var width = this.getWidth();\n        var height = this.getHeight();\n        x += 15;\n        y += 15;\n        if (x + width > windowWidth) {\n            x -= (x + width) - windowWidth;\n        }\n        if (y + height > windowHeight) {\n            y -= 20 + height;\n        }\n        Tooltip.prototype.setPosition.call(this, x, y);\n    };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\ndefine(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n    this.domEvent = domEvent;\n    this.editor = editor;\n    \n    this.x = this.clientX = domEvent.clientX;\n    this.y = this.clientY = domEvent.clientY;\n\n    this.$pos = null;\n    this.$inSelection = null;\n    \n    this.propagationStopped = false;\n    this.defaultPrevented = false;\n};\n\n(function() {  \n    \n    this.stopPropagation = function() {\n        event.stopPropagation(this.domEvent);\n        this.propagationStopped = true;\n    };\n    \n    this.preventDefault = function() {\n        event.preventDefault(this.domEvent);\n        this.defaultPrevented = true;\n    };\n    \n    this.stop = function() {\n        this.stopPropagation();\n        this.preventDefault();\n    };\n    this.getDocumentPosition = function() {\n        if (this.$pos)\n            return this.$pos;\n        \n        this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n        return this.$pos;\n    };\n    this.inSelection = function() {\n        if (this.$inSelection !== null)\n            return this.$inSelection;\n            \n        var editor = this.editor;\n        \n\n        var selectionRange = editor.getSelectionRange();\n        if (selectionRange.isEmpty())\n            this.$inSelection = false;\n        else {\n            var pos = this.getDocumentPosition();\n            this.$inSelection = selectionRange.contains(pos.row, pos.column);\n        }\n\n        return this.$inSelection;\n    };\n    this.getButton = function() {\n        return event.getButton(this.domEvent);\n    };\n    this.getShiftKey = function() {\n        return this.domEvent.shiftKey;\n    };\n    \n    this.getAccelKey = useragent.isMac\n        ? function() { return this.domEvent.metaKey; }\n        : function() { return this.domEvent.ctrlKey; };\n    \n}).call(MouseEvent.prototype);\n\n});\n\ndefine(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n    var editor = mouseHandler.editor;\n\n    var blankImage = dom.createElement(\"img\");\n    blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n    if (useragent.isOpera)\n        blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n    var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n     exports.forEach(function(x) {\n         mouseHandler[x] = this[x];\n    }, this);\n    editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n    var mouseTarget = editor.container;\n    var dragSelectionMarker, x, y;\n    var timerId, range;\n    var dragCursor, counter = 0;\n    var dragOperation;\n    var isInternal;\n    var autoScrollStartTime;\n    var cursorMovedTime;\n    var cursorPointOnCaretMoved;\n\n    this.onDragStart = function(e) {\n        if (this.cancelDrag || !mouseTarget.draggable) {\n            var self = this;\n            setTimeout(function(){\n                self.startSelect();\n                self.captureMouse(e);\n            }, 0);\n            return e.preventDefault();\n        }\n        range = editor.getSelectionRange();\n\n        var dataTransfer = e.dataTransfer;\n        dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n        if (useragent.isOpera) {\n            editor.container.appendChild(blankImage);\n            blankImage.scrollTop = 0;\n        }\n        dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n        if (useragent.isOpera) {\n            editor.container.removeChild(blankImage);\n        }\n        dataTransfer.clearData();\n        dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n        isInternal = true;\n        this.setState(\"drag\");\n    };\n\n    this.onDragEnd = function(e) {\n        mouseTarget.draggable = false;\n        isInternal = false;\n        this.setState(null);\n        if (!editor.getReadOnly()) {\n            var dropEffect = e.dataTransfer.dropEffect;\n            if (!dragOperation && dropEffect == \"move\")\n                editor.session.remove(editor.getSelectionRange());\n            editor.renderer.$cursorLayer.setBlinking(true);\n        }\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n    };\n\n    this.onDragEnter = function(e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker)\n            addDragMarker();\n        counter++;\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n\n    this.onDragOver = function(e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker) {\n            addDragMarker();\n            counter++;\n        }\n        if (onMouseMoveTimer !== null)\n            onMouseMoveTimer = null;\n\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n\n    this.onDragLeave = function(e) {\n        counter--;\n        if (counter <= 0 && dragSelectionMarker) {\n            clearDragMarker();\n            dragOperation = null;\n            return event.preventDefault(e);\n        }\n    };\n\n    this.onDrop = function(e) {\n        if (!dragCursor)\n            return;\n        var dataTransfer = e.dataTransfer;\n        if (isInternal) {\n            switch (dragOperation) {\n                case \"move\":\n                    if (range.contains(dragCursor.row, dragCursor.column)) {\n                        range = {\n                            start: dragCursor,\n                            end: dragCursor\n                        };\n                    } else {\n                        range = editor.moveText(range, dragCursor);\n                    }\n                    break;\n                case \"copy\":\n                    range = editor.moveText(range, dragCursor, true);\n                    break;\n            }\n        } else {\n            var dropData = dataTransfer.getData('Text');\n            range = {\n                start: dragCursor,\n                end: editor.session.insert(dragCursor, dropData)\n            };\n            editor.focus();\n            dragOperation = null;\n        }\n        clearDragMarker();\n        return event.preventDefault(e);\n    };\n\n    event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n    event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n    function scrollCursorIntoView(cursor, prevCursor) {\n        var now = Date.now();\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        var hMovement = !prevCursor || cursor.column != prevCursor.column;\n        if (!cursorMovedTime || vMovement || hMovement) {\n            editor.moveCursorToPosition(cursor);\n            cursorMovedTime = now;\n            cursorPointOnCaretMoved = {x: x, y: y};\n        } else {\n            var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n            if (distance > SCROLL_CURSOR_HYSTERESIS) {\n                cursorMovedTime = null;\n            } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n                editor.renderer.scrollCursorIntoView();\n                cursorMovedTime = null;\n            }\n        }\n    }\n\n    function autoScroll(cursor, prevCursor) {\n        var now = Date.now();\n        var lineHeight = editor.renderer.layerConfig.lineHeight;\n        var characterWidth = editor.renderer.layerConfig.characterWidth;\n        var editorRect = editor.renderer.scroller.getBoundingClientRect();\n        var offsets = {\n           x: {\n               left: x - editorRect.left,\n               right: editorRect.right - x\n           },\n           y: {\n               top: y - editorRect.top,\n               bottom: editorRect.bottom - y\n           }\n        };\n        var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n        var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n        var scrollCursor = {row: cursor.row, column: cursor.column};\n        if (nearestXOffset / characterWidth <= 2) {\n            scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n        }\n        if (nearestYOffset / lineHeight <= 1) {\n            scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n        }\n        var vScroll = cursor.row != scrollCursor.row;\n        var hScroll = cursor.column != scrollCursor.column;\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        if (vScroll || (hScroll && !vMovement)) {\n            if (!autoScrollStartTime)\n                autoScrollStartTime = now;\n            else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n                editor.renderer.scrollCursorIntoView(scrollCursor);\n        } else {\n            autoScrollStartTime = null;\n        }\n    }\n\n    function onDragInterval() {\n        var prevCursor = dragCursor;\n        dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n        scrollCursorIntoView(dragCursor, prevCursor);\n        autoScroll(dragCursor, prevCursor);\n    }\n\n    function addDragMarker() {\n        range = editor.selection.toOrientedRange();\n        dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n        editor.clearSelection();\n        if (editor.isFocused())\n            editor.renderer.$cursorLayer.setBlinking(false);\n        clearInterval(timerId);\n        onDragInterval();\n        timerId = setInterval(onDragInterval, 20);\n        counter = 0;\n        event.addListener(document, \"mousemove\", onMouseMove);\n    }\n\n    function clearDragMarker() {\n        clearInterval(timerId);\n        editor.session.removeMarker(dragSelectionMarker);\n        dragSelectionMarker = null;\n        editor.selection.fromOrientedRange(range);\n        if (editor.isFocused() && !isInternal)\n            editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n        range = null;\n        dragCursor = null;\n        counter = 0;\n        autoScrollStartTime = null;\n        cursorMovedTime = null;\n        event.removeListener(document, \"mousemove\", onMouseMove);\n    }\n    var onMouseMoveTimer = null;\n    function onMouseMove() {\n        if (onMouseMoveTimer == null) {\n            onMouseMoveTimer = setTimeout(function() {\n                if (onMouseMoveTimer != null && dragSelectionMarker)\n                    clearDragMarker();\n            }, 20);\n        }\n    }\n\n    function canAccept(dataTransfer) {\n        var types = dataTransfer.types;\n        return !types || Array.prototype.some.call(types, function(type) {\n            return type == 'text/plain' || type == 'Text';\n        });\n    }\n\n    function getDropEffect(e) {\n        var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n        var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n        var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n        var effectAllowed = \"uninitialized\";\n        try {\n            effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n        } catch (e) {}\n        var dropEffect = \"none\";\n\n        if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        else if (moveAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"move\";\n        else if (copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n\n        return dropEffect;\n    }\n}\n\n(function() {\n\n    this.dragWait = function() {\n        var interval = Date.now() - this.mousedownEvent.time;\n        if (interval > this.editor.getDragDelay())\n            this.startDrag();\n    };\n\n    this.dragWaitEnd = function() {\n        var target = this.editor.container;\n        target.draggable = false;\n        this.startSelect(this.mousedownEvent.getDocumentPosition());\n        this.selectEnd();\n    };\n\n    this.dragReadyEnd = function(e) {\n        this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n        this.dragWaitEnd();\n    };\n\n    this.startDrag = function(){\n        this.cancelDrag = false;\n        var editor = this.editor;\n        var target = editor.container;\n        target.draggable = true;\n        editor.renderer.$cursorLayer.setBlinking(false);\n        editor.setStyle(\"ace_dragging\");\n        var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n        editor.renderer.setCursorStyle(cursorStyle);\n        this.setState(\"dragReady\");\n    };\n\n    this.onMouseDrag = function(e) {\n        var target = this.editor.container;\n        if (useragent.isIE && this.state == \"dragReady\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 3)\n                target.dragDrop();\n        }\n        if (this.state === \"dragWait\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 0) {\n                target.draggable = false;\n                this.startSelect(this.mousedownEvent.getDocumentPosition());\n            }\n        }\n    };\n\n    this.onMouseDown = function(e) {\n        if (!this.$dragEnabled)\n            return;\n        this.mousedownEvent = e;\n        var editor = this.editor;\n\n        var inSelection = e.inSelection();\n        var button = e.getButton();\n        var clickCount = e.domEvent.detail || 1;\n        if (clickCount === 1 && button === 0 && inSelection) {\n            if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n                return;\n            this.mousedownEvent.time = Date.now();\n            var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n            if (\"unselectable\" in eventTarget)\n                eventTarget.unselectable = \"on\";\n            if (editor.getDragDelay()) {\n                if (useragent.isWebKit) {\n                    this.cancelDrag = true;\n                    var mouseTarget = editor.container;\n                    mouseTarget.draggable = true;\n                }\n                this.setState(\"dragWait\");\n            } else {\n                this.startDrag();\n            }\n            this.captureMouse(e, this.onMouseDrag.bind(this));\n            e.defaultPrevented = true;\n        }\n    };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\ndefine(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./dom\");\n\nexports.get = function (url, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(xhr.responseText);\n        }\n    };\n    xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n    var head = dom.getDocumentHead();\n    var s = document.createElement('script');\n\n    s.src = path;\n    head.appendChild(s);\n\n    s.onload = s.onreadystatechange = function(_, isAbort) {\n        if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n            s = s.onload = s.onreadystatechange = null;\n            if (!isAbort)\n                callback();\n        }\n    };\n};\nexports.qualifyURL = function(url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.href;\n};\n\n});\n\ndefine(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"no use strict\";\n\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\n\nvar optionsProvider = {\n    setOptions: function(optList) {\n        Object.keys(optList).forEach(function(key) {\n            this.setOption(key, optList[key]);\n        }, this);\n    },\n    getOptions: function(optionNames) {\n        var result = {};\n        if (!optionNames) {\n            var options = this.$options;\n            optionNames = Object.keys(options).filter(function(key) {\n                return !options[key].hidden;\n            });\n        } else if (!Array.isArray(optionNames)) {\n            result = optionNames;\n            optionNames = Object.keys(result);\n        }\n        optionNames.forEach(function(key) {\n            result[key] = this.getOption(key);\n        }, this);\n        return result;\n    },\n    setOption: function(name, value) {\n        if (this[\"$\" + name] === value)\n            return;\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n\n        if (!opt.handlesSet)\n            this[\"$\" + name] = value;\n        if (opt && opt.set)\n            opt.set.call(this, value);\n    },\n    getOption: function(name) {\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n        return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n    }\n};\n\nfunction warn(message) {\n    if (typeof console != \"undefined\" && console.warn)\n        console.warn.apply(console, arguments);\n}\n\nfunction reportError(msg, data) {\n    var e = new Error(msg);\n    e.data = data;\n    if (typeof console == \"object\" && console.error)\n        console.error(e);\n    setTimeout(function() { throw e; });\n}\n\nvar AppConfig = function() {\n    this.$defaultOptions = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    this.defineOptions = function(obj, path, options) {\n        if (!obj.$options)\n            this.$defaultOptions[path] = obj.$options = {};\n\n        Object.keys(options).forEach(function(key) {\n            var opt = options[key];\n            if (typeof opt == \"string\")\n                opt = {forwardTo: opt};\n\n            opt.name || (opt.name = key);\n            obj.$options[opt.name] = opt;\n            if (\"initialValue\" in opt)\n                obj[\"$\" + opt.name] = opt.initialValue;\n        });\n        oop.implement(obj, optionsProvider);\n\n        return this;\n    };\n\n    this.resetOptions = function(obj) {\n        Object.keys(obj.$options).forEach(function(key) {\n            var opt = obj.$options[key];\n            if (\"value\" in opt)\n                obj.setOption(key, opt.value);\n        });\n    };\n\n    this.setDefaultValue = function(path, name, value) {\n        var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n        if (opts[name]) {\n            if (opts.forwardTo)\n                this.setDefaultValue(opts.forwardTo, name, value);\n            else\n                opts[name].value = value;\n        }\n    };\n\n    this.setDefaultValues = function(path, optionHash) {\n        Object.keys(optionHash).forEach(function(key) {\n            this.setDefaultValue(path, key, optionHash[key]);\n        }, this);\n    };\n    \n    this.warn = warn;\n    this.reportError = reportError;\n    \n}).call(AppConfig.prototype);\n\nexports.AppConfig = AppConfig;\n\n});\n\ndefine(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"], function(require, exports, module) {\n\"no use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar net = require(\"./lib/net\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\n\nmodule.exports = exports = new AppConfig();\n\nvar global = (function() {\n    return this || typeof window != \"undefined\" && window;\n})();\n\nvar options = {\n    packaged: false,\n    workerPath: null,\n    modePath: null,\n    themePath: null,\n    basePath: \"\",\n    suffix: \".js\",\n    $moduleUrls: {},\n    loadWorkerFromBlob: true\n};\n\nexports.get = function(key) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n\n    return options[key];\n};\n\nexports.set = function(key, value) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n\n    options[key] = value;\n};\n\nexports.all = function() {\n    return lang.copyObject(options);\n};\n\nexports.$modes = {};\nexports.moduleUrl = function(name, component) {\n    if (options.$moduleUrls[name])\n        return options.$moduleUrls[name];\n\n    var parts = name.split(\"/\");\n    component = component || parts[parts.length - 2] || \"\";\n    var sep = component == \"snippets\" ? \"/\" : \"-\";\n    var base = parts[parts.length - 1];\n    if (component == \"worker\" && sep == \"-\") {\n        var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n        base = base.replace(re, \"\");\n    }\n\n    if ((!base || base == component) && parts.length > 1)\n        base = parts[parts.length - 2];\n    var path = options[component + \"Path\"];\n    if (path == null) {\n        path = options.basePath;\n    } else if (sep == \"/\") {\n        component = sep = \"\";\n    }\n    if (path && path.slice(-1) != \"/\")\n        path += \"/\";\n    return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n    return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n    var module, moduleType;\n    if (Array.isArray(moduleName)) {\n        moduleType = moduleName[0];\n        moduleName = moduleName[1];\n    }\n\n    try {\n        module = require(moduleName);\n    } catch (e) {}\n    if (module && !exports.$loading[moduleName])\n        return onLoad && onLoad(module);\n\n    if (!exports.$loading[moduleName])\n        exports.$loading[moduleName] = [];\n\n    exports.$loading[moduleName].push(onLoad);\n\n    if (exports.$loading[moduleName].length > 1)\n        return;\n\n    var afterLoad = function() {\n        require([moduleName], function(module) {\n            exports._emit(\"load.module\", {name: moduleName, module: module});\n            var listeners = exports.$loading[moduleName];\n            exports.$loading[moduleName] = null;\n            listeners.forEach(function(onLoad) {\n                onLoad && onLoad(module);\n            });\n        });\n    };\n\n    if (!exports.get(\"packaged\"))\n        return afterLoad();\n    \n    net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n    reportErrorIfPathIsNotConfigured();\n};\n\nvar reportErrorIfPathIsNotConfigured = function() {\n    if (\n        !options.basePath && !options.workerPath \n        && !options.modePath && !options.themePath\n        && !Object.keys(options.$moduleUrls).length\n    ) {\n        console.error(\n            \"Unable to infer path to ace from script src,\",\n            \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\n            \"or with webpack use ace/webpack-resolver\"\n        );\n        reportErrorIfPathIsNotConfigured = function() {};\n    }\n};\ninit(true);function init(packaged) {\n\n    if (!global || !global.document)\n        return;\n    \n    options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged);\n\n    var scriptOptions = {};\n    var scriptUrl = \"\";\n    var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n    var currentDocument = currentScript && currentScript.ownerDocument || document;\n    \n    var scripts = currentDocument.getElementsByTagName(\"script\");\n    for (var i=0; i<scripts.length; i++) {\n        var script = scripts[i];\n\n        var src = script.src || script.getAttribute(\"src\");\n        if (!src)\n            continue;\n\n        var attributes = script.attributes;\n        for (var j=0, l=attributes.length; j < l; j++) {\n            var attr = attributes[j];\n            if (attr.name.indexOf(\"data-ace-\") === 0) {\n                scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n            }\n        }\n\n        var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n        if (m)\n            scriptUrl = m[1];\n    }\n\n    if (scriptUrl) {\n        scriptOptions.base = scriptOptions.base || scriptUrl;\n        scriptOptions.packaged = true;\n    }\n\n    scriptOptions.basePath = scriptOptions.base;\n    scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n    scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n    scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n    delete scriptOptions.base;\n\n    for (var key in scriptOptions)\n        if (typeof scriptOptions[key] !== \"undefined\")\n            exports.set(key, scriptOptions[key]);\n}\n\nexports.init = init;\n\nfunction deHyphenate(str) {\n    return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n\n});\n\ndefine(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar config = require(\"../config\");\n\nvar MouseHandler = function(editor) {\n    var _self = this;\n    this.editor = editor;\n\n    new DefaultHandlers(this);\n    new DefaultGutterHandler(this);\n    new DragdropHandler(this);\n\n    var focusEditor = function(e) {\n        var windowBlurred = !document.hasFocus || !document.hasFocus()\n            || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n        if (windowBlurred)\n            window.focus();\n        editor.focus();\n    };\n\n    var mouseTarget = editor.renderer.getMouseEventTarget();\n    event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n    event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n    event.addMultiMouseDownListener([\n        mouseTarget,\n        editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n        editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n        editor.textInput && editor.textInput.getElement()\n    ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n    event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n    event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n\n    var gutterEl = editor.renderer.$gutter;\n    event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n    event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n    event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n    event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n\n    event.addListener(mouseTarget, \"mousedown\", focusEditor);\n    event.addListener(gutterEl, \"mousedown\", focusEditor);\n    if (useragent.isIE && editor.renderer.scrollBarV) {\n        event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n        event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n    }\n\n    editor.on(\"mousemove\", function(e){\n        if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n            return;\n\n        var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n        var range = editor.session.selection.getRange();\n        var renderer = editor.renderer;\n\n        if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n            renderer.setCursorStyle(\"default\");\n        } else {\n            renderer.setCursorStyle(\"\");\n        }\n    });\n};\n\n(function() {\n    this.onMouseEvent = function(name, e) {\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n\n    this.onMouseMove = function(name, e) {\n        var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n        if (!listeners || !listeners.length)\n            return;\n\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n\n    this.onMouseWheel = function(name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n\n        this.editor._emit(name, mouseEvent);\n    };\n    \n    this.onTouchMove = function (name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = 1;//this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n        this.editor._emit(name, mouseEvent);\n    };\n\n    this.setState = function(state) {\n        this.state = state;\n    };\n\n    this.captureMouse = function(ev, mouseMoveHandler) {\n        this.x = ev.x;\n        this.y = ev.y;\n\n        this.isMousePressed = true;\n        var editor = this.editor;\n        var renderer = this.editor.renderer;\n        if (renderer.$keepTextAreaAtCursor)\n            renderer.$keepTextAreaAtCursor = null;\n\n        var self = this;\n        var onMouseMove = function(e) {\n            if (!e) return;\n            if (useragent.isWebKit && !e.which && self.releaseMouse)\n                return self.releaseMouse();\n\n            self.x = e.clientX;\n            self.y = e.clientY;\n            mouseMoveHandler && mouseMoveHandler(e);\n            self.mouseEvent = new MouseEvent(e, self.editor);\n            self.$mouseMoved = true;\n        };\n\n        var onCaptureEnd = function(e) {\n            editor.off(\"beforeEndOperation\", onOperationEnd);\n            clearInterval(timerId);\n            onCaptureInterval();\n            self[self.state + \"End\"] && self[self.state + \"End\"](e);\n            self.state = \"\";\n            if (renderer.$keepTextAreaAtCursor == null) {\n                renderer.$keepTextAreaAtCursor = true;\n                renderer.$moveTextAreaToCursor();\n            }\n            self.isMousePressed = false;\n            self.$onCaptureMouseMove = self.releaseMouse = null;\n            e && self.onMouseEvent(\"mouseup\", e);\n            editor.endOperation();\n        };\n\n        var onCaptureInterval = function() {\n            self[self.state] && self[self.state]();\n            self.$mouseMoved = false;\n        };\n\n        if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n            return setTimeout(function() {onCaptureEnd(ev);});\n        }\n\n        var onOperationEnd = function(e) {\n            if (!self.releaseMouse) return;\n            if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n                self[self.state + \"End\"] && self[self.state + \"End\"]();\n                self.state = \"\";\n                self.releaseMouse();\n            }\n        };\n\n        editor.on(\"beforeEndOperation\", onOperationEnd);\n        editor.startOperation({command: {name: \"mouse\"}});\n\n        self.$onCaptureMouseMove = onMouseMove;\n        self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n        var timerId = setInterval(onCaptureInterval, 20);\n    };\n    this.releaseMouse = null;\n    this.cancelContextMenu = function() {\n        var stop = function(e) {\n            if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n                return;\n            this.editor.off(\"nativecontextmenu\", stop);\n            if (e && e.domEvent)\n                event.stopEvent(e.domEvent);\n        }.bind(this);\n        setTimeout(stop, 10);\n        this.editor.on(\"nativecontextmenu\", stop);\n    };\n}).call(MouseHandler.prototype);\n\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n    scrollSpeed: {initialValue: 2},\n    dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},\n    dragEnabled: {initialValue: true},\n    focusTimeout: {initialValue: 0},\n    tooltipFollowsMouse: {initialValue: true}\n});\n\n\nexports.MouseHandler = MouseHandler;\n});\n\ndefine(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\n\nfunction FoldHandler(editor) {\n\n    editor.on(\"click\", function(e) {\n        var position = e.getDocumentPosition();\n        var session = editor.session;\n        var fold = session.getFoldAt(position.row, position.column, 1);\n        if (fold) {\n            if (e.getAccelKey())\n                session.removeFold(fold);\n            else\n                session.expandFold(fold);\n\n            e.stop();\n        }\n        \n        var target = e.domEvent && e.domEvent.target;\n        if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n            if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n                session.setOption(\"wrap\", true);\n                editor.renderer.scrollCursorIntoView();\n            }\n        }\n    });\n\n    editor.on(\"gutterclick\", function(e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            if (session.foldWidgets && session.foldWidgets[row])\n                editor.session.onFoldWidgetClick(row, e);\n            if (!editor.isFocused())\n                editor.focus();\n            e.stop();\n        }\n    });\n\n    editor.on(\"gutterdblclick\", function(e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            var data = session.getParentFoldRangeData(row, true);\n            var range = data.range || data.firstRange;\n\n            if (range) {\n                row = range.start.row;\n                var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n                if (fold) {\n                    session.removeFold(fold);\n                } else {\n                    session.addFold(\"...\", range);\n                    editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});\n                }\n            }\n            e.stop();\n        }\n    });\n}\n\nexports.FoldHandler = FoldHandler;\n\n});\n\ndefine(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil  = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\n\nvar KeyBinding = function(editor) {\n    this.$editor = editor;\n    this.$data = {editor: editor};\n    this.$handlers = [];\n    this.setDefaultHandler(editor.commands);\n};\n\n(function() {\n    this.setDefaultHandler = function(kb) {\n        this.removeKeyboardHandler(this.$defaultHandler);\n        this.$defaultHandler = kb;\n        this.addKeyboardHandler(kb, 0);\n    };\n\n    this.setKeyboardHandler = function(kb) {\n        var h = this.$handlers;\n        if (h[h.length - 1] == kb)\n            return;\n\n        while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n            this.removeKeyboardHandler(h[h.length - 1]);\n\n        this.addKeyboardHandler(kb, 1);\n    };\n\n    this.addKeyboardHandler = function(kb, pos) {\n        if (!kb)\n            return;\n        if (typeof kb == \"function\" && !kb.handleKeyboard)\n            kb.handleKeyboard = kb;\n        var i = this.$handlers.indexOf(kb);\n        if (i != -1)\n            this.$handlers.splice(i, 1);\n\n        if (pos == undefined)\n            this.$handlers.push(kb);\n        else\n            this.$handlers.splice(pos, 0, kb);\n\n        if (i == -1 && kb.attach)\n            kb.attach(this.$editor);\n    };\n\n    this.removeKeyboardHandler = function(kb) {\n        var i = this.$handlers.indexOf(kb);\n        if (i == -1)\n            return false;\n        this.$handlers.splice(i, 1);\n        kb.detach && kb.detach(this.$editor);\n        return true;\n    };\n\n    this.getKeyboardHandler = function() {\n        return this.$handlers[this.$handlers.length - 1];\n    };\n    \n    this.getStatusText = function() {\n        var data = this.$data;\n        var editor = data.editor;\n        return this.$handlers.map(function(h) {\n            return h.getStatusText && h.getStatusText(editor, data) || \"\";\n        }).filter(Boolean).join(\" \");\n    };\n\n    this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\n        var toExecute;\n        var success = false;\n        var commands = this.$editor.commands;\n\n        for (var i = this.$handlers.length; i--;) {\n            toExecute = this.$handlers[i].handleKeyboard(\n                this.$data, hashId, keyString, keyCode, e\n            );\n            if (!toExecute || !toExecute.command)\n                continue;\n            if (toExecute.command == \"null\") {\n                success = true;\n            } else {\n                success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n            }\n            if (success && e && hashId != -1 && \n                toExecute.passEvent != true && toExecute.command.passEvent != true\n            ) {\n                event.stopEvent(e);\n            }\n            if (success)\n                break;\n        }\n        \n        if (!success && hashId == -1) {\n            toExecute = {command: \"insertstring\"};\n            success = commands.exec(\"insertstring\", this.$editor, keyString);\n        }\n        \n        if (success && this.$editor._signal)\n            this.$editor._signal(\"keyboardActivity\", toExecute);\n        \n        return success;\n    };\n\n    this.onCommandKey = function(e, hashId, keyCode) {\n        var keyString = keyUtil.keyCodeToString(keyCode);\n        this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n    };\n\n    this.onTextInput = function(text) {\n        this.$callKeyboardHandlers(-1, text);\n    };\n\n}).call(KeyBinding.prototype);\n\nexports.KeyBinding = KeyBinding;\n});\n\ndefine(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false,  hasUBAT_B = false,  hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\n\nvar impTab_LTR = [\t[\t0,\t\t3,\t\t0,\t\t1,\t\t0,\t\t0,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t1,\t\t2,\t\t2,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t0x11,\t\t2,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t1,\t\t0\t],\t[\t0,\t\t3,\t\t0x15,\t\t0x15,\t\t4,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t2,\t\t0\t]\n];\n\nvar impTab_RTL = [\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t1,\t\t0\t],\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t1,\t\t3,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t0x21,\t\t3,\t\t1,\t\t1\t]\n];\n\nvar LTR = 0, RTL = 1;\n\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\n\nvar UnicodeTBL00 = [\nBN,BN,BN,BN,BN,BN,BN,BN,BN,S,B,S,WS,B,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,B,B,B,S,\nWS,ON,ON,ET,ET,ET,ON,ON,ON,ON,ON,ES,CS,ES,CS,CS,\nEN,EN,EN,EN,EN,EN,EN,EN,EN,EN,CS,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,BN,\nBN,BN,BN,BN,BN,B,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nCS,ON,ET,ET,ET,ET,ON,ON,ON,ON,L,ON,ON,BN,ON,ON,\nET,ET,EN,EN,ON,L,ON,ON,ON,EN,L,ON,ON,ON,ON,ON\n];\n\nvar UnicodeTBL20 = [\nWS,WS,WS,WS,WS,WS,WS,WS,WS,WS,WS,BN,BN,BN,L,R\t,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,WS,B,LRE,RLE,PDF,LRO,RLO,CS,\nET,ET,ET,ET,ET,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,CS,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,WS\n];\n\nfunction _computeLevels(chars, levels, len, charTypes) {\n\tvar impTab = dir ? impTab_RTL : impTab_LTR\n\t\t, prevState = null, newClass = null, newLevel = null, newState = 0\n\t\t, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n\n\tif (!charTypes) {\n\t\tfor (i = 0, charTypes = []; i < len; i++) {\n\t\t\tcharTypes[i] = _getCharacterType(chars[i]);\n\t\t}\n\t}\n\thiLevel = dir;\n\tlastArabic = false;\n\thasUBAT_AL = false;\n\thasUBAT_B = false;\n\thasUBAT_S = false;\n\tfor (ix = 0; ix < len; ix++){\n\t\tprevState = newState;\n\t\tclasses[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n\t\tnewState = impTab[prevState][newClass];\n\t\taction = newState & 0xF0;\n\t\tnewState &= 0x0F;\n\t\tlevels[ix] = newLevel = impTab[newState][5];\n\t\tif (action > 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\t\t\t\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\t\t\t\t\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\t\t\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\t\n\tif (hi == 0) {\t\t\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\t\t\t\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\t\t\n\treturn ON;\t\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\t\t\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = []; \n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) \n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\t\t\t\t\n\tif (chars[0] === '\\u202B')\n\t\tlevels[0] = exports.RLE;\n\t\t\t\t\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\t\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\ndefine(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = function(session) {\n    this.session = session;\n    this.bidiMap = {};\n    this.currentRow = null;\n    this.bidiUtil = bidiUtil;\n    this.charWidths = [];\n    this.EOL = \"\\xAC\";\n    this.showInvisibles = true;\n    this.isRtlDir = false;\n    this.$isRtl = false;\n    this.line = \"\";\n    this.wrapIndent = 0;\n    this.EOF = \"\\xB6\";\n    this.RLE = \"\\u202B\";\n    this.contentWidth = 0;\n    this.fontMetrics = null;\n    this.rtlLineOffset = 0;\n    this.wrapOffset = 0;\n    this.isMoveLeftOperation = false;\n    this.seenBidi = bidiRE.test(session.getValue());\n};\n\n(function() {\n    this.isBidiRow = function(screenRow, docRow, splitIndex) {\n        if (!this.seenBidi)\n            return false;\n        if (screenRow !== this.currentRow) {\n            this.currentRow = screenRow;\n            this.updateRowLine(docRow, splitIndex);\n            this.updateBidiMap();\n        }\n        return this.bidiMap.bidiLevels;\n    };\n\n    this.onChange = function(delta) {\n        if (!this.seenBidi) {\n            if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n                this.seenBidi = true;\n                this.currentRow = null;\n            }\n        } \n        else {\n            this.currentRow = null;\n        }\n    };\n\n    this.getDocumentRow = function() {\n        var docRow = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            if (index >= 0)\n                docRow = this.session.$docRowCache[index];\n        }\n\n        return docRow;\n    };\n\n    this.getSplitIndex = function() {\n        var splitIndex = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            while (this.currentRow - splitIndex > 0) {\n                currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n                if (currentIndex !== prevIndex)\n                    break;\n\n                prevIndex = currentIndex;\n                splitIndex++;\n            }\n        } else {\n            splitIndex = this.currentRow;\n        }\n\n        return splitIndex;\n    };\n\n    this.updateRowLine = function(docRow, splitIndex) {\n        if (docRow === undefined)\n            docRow = this.getDocumentRow();\n            \n        var isLastRow = (docRow === this.session.getLength() - 1),\n            endOfLine = isLastRow ? this.EOF : this.EOL;\n\n        this.wrapIndent = 0;\n        this.line = this.session.getLine(docRow);\n        this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n        if (this.session.$useWrapMode) {\n            var splits = this.session.$wrapData[docRow];\n            if (splits) {\n                if (splitIndex === undefined)\n                    splitIndex = this.getSplitIndex();\n\n                if(splitIndex > 0 && splits.length) {\n                    this.wrapIndent = splits.indent;\n                    this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n                    this.line = (splitIndex < splits.length) ?\n                        this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n                            this.line.substring(splits[splits.length - 1]);\n                } else {\n                    this.line = this.line.substring(0, splits[splitIndex]);\n                }\n            }\n            if (splitIndex == splits.length)\n                this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n        } else {\n            this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n        }\n        var session = this.session, shift = 0, size;\n        this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n            if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n                size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n                shift += size - 1;\n                return lang.stringRepeat(bidiUtil.DOT, size);\n            }\n            return ch;\n        });\n\n        if (this.isRtlDir) {\n            this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n            this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n        }\n    };\n    \n    this.updateBidiMap = function() {\n        var textCharTypes = [];\n        if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n             this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n        } else {\n            this.bidiMap = {};\n        }\n    };\n    this.markAsDirty = function() {\n        this.currentRow = null;\n    };\n    this.updateCharacterWidths = function(fontMetrics) {\n        if (this.characterWidth === fontMetrics.$characterSize.width)\n            return;\n\n        this.fontMetrics = fontMetrics;\n        var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n        var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n        this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n        this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n        this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n        this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n\n        this.currentRow = null;\n    };\n\n    this.setShowInvisibles = function(showInvisibles) {\n        this.showInvisibles = showInvisibles;\n        this.currentRow = null;\n    };\n\n    this.setEolChar = function(eolChar) {\n        this.EOL = eolChar; \n    };\n\n    this.setContentWidth = function(width) {\n        this.contentWidth = width;\n    };\n\n    this.isRtlLine = function(row) {\n        if (this.$isRtl) return true;\n        if (row != undefined)\n            return (this.session.getLine(row).charAt(0) == this.RLE);\n        else\n            return this.isRtlDir; \n    };\n\n    this.setRtlDirection = function(editor, isRtlDir) {\n        var cursor = editor.getCursorPosition(); \n        for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n            if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n                editor.session.doc.removeInLine(row, 0, 1);\n            else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n                editor.session.doc.insert({column: 0, row: row}, editor.session.$bidiHandler.RLE);\n        }\n    };\n    this.getPosLeft = function(col) {\n        col -= this.wrapIndent;\n        var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n        var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n        var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap),\n            levels = this.bidiMap.bidiLevels, left = 0;\n\n        if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n            visualIdx++;\n            \n        for (var i = 0; i < visualIdx; i++) {\n            left += this.charWidths[levels[i]];\n        }\n\n        if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n            left += this.charWidths[levels[visualIdx]];\n\n        if (this.wrapIndent)\n            left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n        if (this.isRtlDir)\n            left += this.rtlLineOffset;\n\n        return left;\n    };\n    this.getSelections = function(startCol, endCol) {\n        var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0,\n            selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n                isSelected = false, isSelectedPrev = false, selectionStart = 0;\n            \n        if (this.wrapIndent)\n            offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n        for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n            logIdx = map.logicalFromVisual[visIdx];\n            level = levels[visIdx];\n            isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n            if (isSelected && !isSelectedPrev) {\n                selectionStart = offset;\n            } else if (!isSelected && isSelectedPrev) {\n                selections.push({left: selectionStart, width: offset - selectionStart});\n            }\n            offset += this.charWidths[level];\n            isSelectedPrev = isSelected;\n        }\n\n        if (isSelected && (visIdx === levels.length)) {\n            selections.push({left: selectionStart, width: offset - selectionStart});\n        }\n\n        if(this.isRtlDir) {\n            for (var i = 0; i < selections.length; i++) {\n                selections[i].left += this.rtlLineOffset;\n            }\n        }\n        return selections;\n    };\n    this.offsetToCol = function(posX) {\n        if(this.isRtlDir)\n            posX -= this.rtlLineOffset;\n\n        var logicalIdx = 0, posX = Math.max(posX, 0),\n            offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n                charWidth = this.charWidths[levels[visualIdx]];\n\n        if (this.wrapIndent)\n           posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n    \n        while(posX > offset + charWidth/2) {\n            offset += charWidth;\n            if(visualIdx === levels.length - 1) {\n                charWidth = 0;\n                break;\n            }\n            charWidth = this.charWidths[levels[++visualIdx]];\n        }\n    \n        if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n            if(posX < offset)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n        } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n            logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n                    : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n        } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n                || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n            logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n        } else {\n            if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n        }\n\n        if (logicalIdx === 0 && this.isRtlDir)\n            logicalIdx++;\n\n        return (logicalIdx + this.wrapIndent);\n    };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n\ndefine(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = function(session) {\n    this.session = session;\n    this.doc = session.getDocument();\n\n    this.clearSelection();\n    this.cursor = this.lead = this.doc.createAnchor(0, 0);\n    this.anchor = this.doc.createAnchor(0, 0);\n    this.$silent = false;\n\n    var self = this;\n    this.cursor.on(\"change\", function(e) {\n        self.$cursorChanged = true;\n        if (!self.$silent)\n            self._emit(\"changeCursor\");\n        if (!self.$isEmpty && !self.$silent)\n            self._emit(\"changeSelection\");\n        if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n            self.$desiredColumn = null;\n    });\n\n    this.anchor.on(\"change\", function() {\n        self.$anchorChanged = true;\n        if (!self.$isEmpty && !self.$silent)\n            self._emit(\"changeSelection\");\n    });\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.isEmpty = function() {\n        return this.$isEmpty || (\n            this.anchor.row == this.lead.row &&\n            this.anchor.column == this.lead.column\n        );\n    };\n    this.isMultiLine = function() {\n        return !this.$isEmpty && this.anchor.row != this.cursor.row;\n    };\n    this.getCursor = function() {\n        return this.lead.getPosition();\n    };\n    this.setSelectionAnchor = function(row, column) {\n        this.$isEmpty = false;\n        this.anchor.setPosition(row, column);\n    };\n    this.getAnchor = \n    this.getSelectionAnchor = function() {\n        if (this.$isEmpty)\n            return this.getSelectionLead();\n        \n        return this.anchor.getPosition();\n    };\n    this.getSelectionLead = function() {\n        return this.lead.getPosition();\n    };\n    this.isBackwards = function() {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n    };\n    this.getRange = function() {\n        var anchor = this.anchor;\n        var lead = this.lead;\n\n        if (this.$isEmpty)\n            return Range.fromPoints(lead, lead);\n\n        return this.isBackwards()\n            ? Range.fromPoints(lead, anchor)\n            : Range.fromPoints(anchor, lead);\n    };\n    this.clearSelection = function() {\n        if (!this.$isEmpty) {\n            this.$isEmpty = true;\n            this._emit(\"changeSelection\");\n        }\n    };\n    this.selectAll = function() {\n        this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n    };\n    this.setRange =\n    this.setSelectionRange = function(range, reverse) {\n        var start = reverse ? range.end : range.start;\n        var end = reverse ? range.start : range.end;\n        this.$setSelection(start.row, start.column, end.row, end.column);\n    };\n\n    this.$setSelection = function(anchorRow, anchorColumn, cursorRow, cursorColumn) {\n        var wasEmpty = this.$isEmpty;\n        var wasMultiselect = this.inMultiSelectMode;\n        this.$silent = true;\n        this.$cursorChanged = this.$anchorChanged = false;\n        this.anchor.setPosition(anchorRow, anchorColumn);\n        this.cursor.setPosition(cursorRow, cursorColumn);\n        this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n        this.$silent = false;\n        if (this.$cursorChanged)\n            this._emit(\"changeCursor\");\n        if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n            this._emit(\"changeSelection\");\n    };\n\n    this.$moveSelection = function(mover) {\n        var lead = this.lead;\n        if (this.$isEmpty)\n            this.setSelectionAnchor(lead.row, lead.column);\n\n        mover.call(this);\n    };\n    this.selectTo = function(row, column) {\n        this.$moveSelection(function() {\n            this.moveCursorTo(row, column);\n        });\n    };\n    this.selectToPosition = function(pos) {\n        this.$moveSelection(function() {\n            this.moveCursorToPosition(pos);\n        });\n    };\n    this.moveTo = function(row, column) {\n        this.clearSelection();\n        this.moveCursorTo(row, column);\n    };\n    this.moveToPosition = function(pos) {\n        this.clearSelection();\n        this.moveCursorToPosition(pos);\n    };\n    this.selectUp = function() {\n        this.$moveSelection(this.moveCursorUp);\n    };\n    this.selectDown = function() {\n        this.$moveSelection(this.moveCursorDown);\n    };\n    this.selectRight = function() {\n        this.$moveSelection(this.moveCursorRight);\n    };\n    this.selectLeft = function() {\n        this.$moveSelection(this.moveCursorLeft);\n    };\n    this.selectLineStart = function() {\n        this.$moveSelection(this.moveCursorLineStart);\n    };\n    this.selectLineEnd = function() {\n        this.$moveSelection(this.moveCursorLineEnd);\n    };\n    this.selectFileEnd = function() {\n        this.$moveSelection(this.moveCursorFileEnd);\n    };\n    this.selectFileStart = function() {\n        this.$moveSelection(this.moveCursorFileStart);\n    };\n    this.selectWordRight = function() {\n        this.$moveSelection(this.moveCursorWordRight);\n    };\n    this.selectWordLeft = function() {\n        this.$moveSelection(this.moveCursorWordLeft);\n    };\n    this.getWordRange = function(row, column) {\n        if (typeof column == \"undefined\") {\n            var cursor = row || this.lead;\n            row = cursor.row;\n            column = cursor.column;\n        }\n        return this.session.getWordRange(row, column);\n    };\n    this.selectWord = function() {\n        this.setSelectionRange(this.getWordRange());\n    };\n    this.selectAWord = function() {\n        var cursor = this.getCursor();\n        var range = this.session.getAWordRange(cursor.row, cursor.column);\n        this.setSelectionRange(range);\n    };\n\n    this.getLineRange = function(row, excludeLastChar) {\n        var rowStart = typeof row == \"number\" ? row : this.lead.row;\n        var rowEnd;\n\n        var foldLine = this.session.getFoldLine(rowStart);\n        if (foldLine) {\n            rowStart = foldLine.start.row;\n            rowEnd = foldLine.end.row;\n        } else {\n            rowEnd = rowStart;\n        }\n        if (excludeLastChar === true)\n            return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n        else\n            return new Range(rowStart, 0, rowEnd + 1, 0);\n    };\n    this.selectLine = function() {\n        this.setSelectionRange(this.getLineRange());\n    };\n    this.moveCursorUp = function() {\n        this.moveCursorBy(-1, 0);\n    };\n    this.moveCursorDown = function() {\n        this.moveCursorBy(1, 0);\n    };\n    this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n        var start = cursor.column;\n        var end = cursor.column + tabSize;\n\n        if (direction < 0) {\n            start = cursor.column - tabSize;\n            end = cursor.column;\n        }\n        return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n    };\n    this.moveCursorLeft = function() {\n        var cursor = this.lead.getPosition(),\n            fold;\n\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n        } else if (cursor.column === 0) {\n            if (cursor.row > 0) {\n                this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, -tabSize);\n            } else {\n                this.moveCursorBy(0, -1);\n            }\n        }\n    };\n    this.moveCursorRight = function() {\n        var cursor = this.lead.getPosition(),\n            fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n        }\n        else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n            if (this.lead.row < this.doc.getLength() - 1) {\n                this.moveCursorTo(this.lead.row + 1, 0);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            var cursor = this.lead;\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, tabSize);\n            } else {\n                this.moveCursorBy(0, 1);\n            }\n        }\n    };\n    this.moveCursorLineStart = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var screenRow = this.session.documentToScreenRow(row, column);\n        var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n        var beforeCursor = this.session.getDisplayLine(\n            row, null, firstColumnPosition.row,\n            firstColumnPosition.column\n        );\n\n        var leadingSpace = beforeCursor.match(/^\\s*/);\n        if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n            firstColumnPosition.column += leadingSpace[0].length;\n        this.moveCursorToPosition(firstColumnPosition);\n    };\n    this.moveCursorLineEnd = function() {\n        var lead = this.lead;\n        var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n        if (this.lead.column == lineEnd.column) {\n            var line = this.session.getLine(lineEnd.row);\n            if (lineEnd.column == line.length) {\n                var textEnd = line.search(/\\s+$/);\n                if (textEnd > 0)\n                    lineEnd.column = textEnd;\n            }\n        }\n\n        this.moveCursorTo(lineEnd.row, lineEnd.column);\n    };\n    this.moveCursorFileEnd = function() {\n        var row = this.doc.getLength() - 1;\n        var column = this.doc.getLine(row).length;\n        this.moveCursorTo(row, column);\n    };\n    this.moveCursorFileStart = function() {\n        this.moveCursorTo(0, 0);\n    };\n    this.moveCursorLongWordRight = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n            return;\n        }\n        if (this.session.nonTokenRe.exec(rightOfCursor)) {\n            column += this.session.nonTokenRe.lastIndex;\n            this.session.nonTokenRe.lastIndex = 0;\n            rightOfCursor = line.substring(column);\n        }\n        if (column >= line.length) {\n            this.moveCursorTo(row, line.length);\n            this.moveCursorRight();\n            if (row < this.doc.getLength() - 1)\n                this.moveCursorWordRight();\n            return;\n        }\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            column += this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n\n        this.moveCursorTo(row, column);\n    };\n    this.moveCursorLongWordLeft = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n            return;\n        }\n\n        var str = this.session.getFoldStringAt(row, column, -1);\n        if (str == null) {\n            str = this.doc.getLine(row).substring(0, column);\n        }\n\n        var leftOfCursor = lang.stringReverse(str);\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        if (this.session.nonTokenRe.exec(leftOfCursor)) {\n            column -= this.session.nonTokenRe.lastIndex;\n            leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n            this.session.nonTokenRe.lastIndex = 0;\n        }\n        if (column <= 0) {\n            this.moveCursorTo(row, 0);\n            this.moveCursorLeft();\n            if (row > 0)\n                this.moveCursorWordLeft();\n            return;\n        }\n        if (this.session.tokenRe.exec(leftOfCursor)) {\n            column -= this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n\n        this.moveCursorTo(row, column);\n    };\n\n    this.$shortWordEndIndex = function(rightOfCursor) {\n        var index = 0, ch;\n        var whitespaceRe = /\\s/;\n        var tokenRe = this.session.tokenRe;\n\n        tokenRe.lastIndex = 0;\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            index = this.session.tokenRe.lastIndex;\n        } else {\n            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                index ++;\n\n            if (index < 1) {\n                tokenRe.lastIndex = 0;\n                 while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n                    tokenRe.lastIndex = 0;\n                    index ++;\n                    if (whitespaceRe.test(ch)) {\n                        if (index > 2) {\n                            index--;\n                            break;\n                        } else {\n                            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                                index ++;\n                            if (index > 2)\n                                break;\n                        }\n                    }\n                }\n            }\n        }\n        tokenRe.lastIndex = 0;\n\n        return index;\n    };\n\n    this.moveCursorShortWordRight = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold)\n            return this.moveCursorTo(fold.end.row, fold.end.column);\n\n        if (column == line.length) {\n            var l = this.doc.getLength();\n            do {\n                row++;\n                rightOfCursor = this.doc.getLine(row);\n            } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n            if (!/^\\s+/.test(rightOfCursor))\n                rightOfCursor = \"\";\n            column = 0;\n        }\n\n        var index = this.$shortWordEndIndex(rightOfCursor);\n\n        this.moveCursorTo(row, column + index);\n    };\n\n    this.moveCursorShortWordLeft = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1))\n            return this.moveCursorTo(fold.start.row, fold.start.column);\n\n        var line = this.session.getLine(row).substring(0, column);\n        if (column === 0) {\n            do {\n                row--;\n                line = this.doc.getLine(row);\n            } while (row > 0 && /^\\s*$/.test(line));\n\n            column = line.length;\n            if (!/\\s+$/.test(line))\n                line = \"\";\n        }\n\n        var leftOfCursor = lang.stringReverse(line);\n        var index = this.$shortWordEndIndex(leftOfCursor);\n\n        return this.moveCursorTo(row, column - index);\n    };\n\n    this.moveCursorWordRight = function() {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordRight();\n        else\n            this.moveCursorShortWordRight();\n    };\n\n    this.moveCursorWordLeft = function() {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordLeft();\n        else\n            this.moveCursorShortWordLeft();\n    };\n    this.moveCursorBy = function(rows, chars) {\n        var screenPos = this.session.documentToScreenPosition(\n            this.lead.row,\n            this.lead.column\n        );\n\n        var offsetX;\n\n        if (chars === 0) {\n            if (rows !== 0) {\n                if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n                    offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n                    screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n                } else {\n                    offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n                }\n            }\n\n            if (this.$desiredColumn)\n                screenPos.column = this.$desiredColumn;\n            else\n                this.$desiredColumn = screenPos.column;\n        }\n\n        var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n        \n        if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n            if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n                if (docPos.row > 0 || rows > 0)\n                    docPos.row++;\n            }\n        }\n        this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n    };\n    this.moveCursorToPosition = function(position) {\n        this.moveCursorTo(position.row, position.column);\n    };\n    this.moveCursorTo = function(row, column, keepDesiredColumn) {\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            row = fold.start.row;\n            column = fold.start.column;\n        }\n\n        this.$keepDesiredColumnOnChange = true;\n        var line = this.session.getLine(row);\n        if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n            if (this.lead.row == row && this.lead.column == column + 1)\n                column = column - 1;\n            else\n                column = column + 1;\n        }\n        this.lead.setPosition(row, column);\n        this.$keepDesiredColumnOnChange = false;\n\n        if (!keepDesiredColumn)\n            this.$desiredColumn = null;\n    };\n    this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n        var pos = this.session.screenToDocumentPosition(row, column);\n        this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n    };\n    this.detach = function() {\n        this.lead.detach();\n        this.anchor.detach();\n        this.session = this.doc = null;\n    };\n\n    this.fromOrientedRange = function(range) {\n        this.setSelectionRange(range, range.cursor == range.start);\n        this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n    };\n\n    this.toOrientedRange = function(range) {\n        var r = this.getRange();\n        if (range) {\n            range.start.column = r.start.column;\n            range.start.row = r.start.row;\n            range.end.column = r.end.column;\n            range.end.row = r.end.row;\n        } else {\n            range = r;\n        }\n\n        range.cursor = this.isBackwards() ? range.start : range.end;\n        range.desiredColumn = this.$desiredColumn;\n        return range;\n    };\n    this.getRangeOfMovements = function(func) {\n        var start = this.getCursor();\n        try {\n            func(this);\n            var end = this.getCursor();\n            return Range.fromPoints(start, end);\n        } catch(e) {\n            return Range.fromPoints(start, start);\n        } finally {\n            this.moveCursorToPosition(start);\n        }\n    };\n\n    this.toJSON = function() {\n        if (this.rangeCount) {\n            var data = this.ranges.map(function(r) {\n                var r1 = r.clone();\n                r1.isBackwards = r.cursor == r.start;\n                return r1;\n            });\n        } else {\n            var data = this.getRange();\n            data.isBackwards = this.isBackwards();\n        }\n        return data;\n    };\n\n    this.fromJSON = function(data) {\n        if (data.start == undefined) {\n            if (this.rangeList) {\n                this.toSingleRange(data[0]);\n                for (var i = data.length; i--; ) {\n                    var r = Range.fromPoints(data[i].start, data[i].end);\n                    if (data[i].isBackwards)\n                        r.cursor = r.start;\n                    this.addRange(r, true);\n                }\n                return;\n            } else {\n                data = data[0];\n            }\n        }\n        if (this.rangeList)\n            this.toSingleRange(data);\n        this.setSelectionRange(data, data.isBackwards);\n    };\n\n    this.isEqual = function(data) {\n        if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n            return false;\n        if (!data.length || !this.ranges)\n            return this.getRange().isEqual(data);\n\n        for (var i = this.ranges.length; i--; ) {\n            if (!this.ranges[i].isEqual(data[i]))\n                return false;\n        }\n        return true;\n    };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\ndefine(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n    this.states = rules;\n\n    this.regExps = {};\n    this.matchMappings = {};\n    for (var key in this.states) {\n        var state = this.states[key];\n        var ruleRegExps = [];\n        var matchTotal = 0;\n        var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n        var flag = \"g\";\n\n        var splitterRurles = [];\n        for (var i = 0; i < state.length; i++) {\n            var rule = state[i];\n            if (rule.defaultToken)\n                mapping.defaultToken = rule.defaultToken;\n            if (rule.caseInsensitive)\n                flag = \"gi\";\n            if (rule.regex == null)\n                continue;\n\n            if (rule.regex instanceof RegExp)\n                rule.regex = rule.regex.toString().slice(1, -1);\n            var adjustedregex = rule.regex;\n            var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n            if (Array.isArray(rule.token)) {\n                if (rule.token.length == 1 || matchcount == 1) {\n                    rule.token = rule.token[0];\n                } else if (matchcount - 1 != rule.token.length) {\n                    this.reportError(\"number of classes and regexp groups doesn't match\", { \n                        rule: rule,\n                        groupCount: matchcount - 1\n                    });\n                    rule.token = rule.token[0];\n                } else {\n                    rule.tokenArray = rule.token;\n                    rule.token = null;\n                    rule.onMatch = this.$arrayTokens;\n                }\n            } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n                if (matchcount > 1)\n                    rule.onMatch = this.$applyToken;\n                else\n                    rule.onMatch = rule.token;\n            }\n\n            if (matchcount > 1) {\n                if (/\\\\\\d/.test(rule.regex)) {\n                    adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n                        return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n                    });\n                } else {\n                    matchcount = 1;\n                    adjustedregex = this.removeCapturingGroups(rule.regex);\n                }\n                if (!rule.splitRegex && typeof rule.token != \"string\")\n                    splitterRurles.push(rule); // flag will be known only at the very end\n            }\n\n            mapping[matchTotal] = i;\n            matchTotal += matchcount;\n\n            ruleRegExps.push(adjustedregex);\n            if (!rule.onMatch)\n                rule.onMatch = null;\n        }\n        \n        if (!ruleRegExps.length) {\n            mapping[0] = 0;\n            ruleRegExps.push(\"$\");\n        }\n        \n        splitterRurles.forEach(function(rule) {\n            rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n        }, this);\n\n        this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n    }\n};\n\n(function() {\n    this.$setMaxTokenCount = function(m) {\n        MAX_TOKEN_COUNT = m | 0;\n    };\n    \n    this.$applyToken = function(str) {\n        var values = this.splitRegex.exec(str).slice(1);\n        var types = this.token.apply(this, values);\n        if (typeof types === \"string\")\n            return [{type: types, value: str}];\n\n        var tokens = [];\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i]\n                };\n        }\n        return tokens;\n    };\n\n    this.$arrayTokens = function(str) {\n        if (!str)\n            return [];\n        var values = this.splitRegex.exec(str);\n        if (!values)\n            return \"text\";\n        var tokens = [];\n        var types = this.tokenArray;\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i + 1])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i + 1]\n                };\n        }\n        return tokens;\n    };\n\n    this.removeCapturingGroups = function(src) {\n        var r = src.replace(\n            /\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!]|(\\()/g,\n            function(x, y) {return y ? \"(?:\" : x;}\n        );\n        return r;\n    };\n\n    this.createSplitterRegexp = function(src, flag) {\n        if (src.indexOf(\"(?=\") != -1) {\n            var stack = 0;\n            var inChClass = false;\n            var lastCapture = {};\n            src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n                m, esc, parenOpen, parenClose, square, index\n            ) {\n                if (inChClass) {\n                    inChClass = square != \"]\";\n                } else if (square) {\n                    inChClass = true;\n                } else if (parenClose) {\n                    if (stack == lastCapture.stack) {\n                        lastCapture.end = index+1;\n                        lastCapture.stack = -1;\n                    }\n                    stack--;\n                } else if (parenOpen) {\n                    stack++;\n                    if (parenOpen.length != 1) {\n                        lastCapture.stack = stack;\n                        lastCapture.start = index;\n                    }\n                }\n                return m;\n            });\n\n            if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n                src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n        }\n        if (src.charAt(0) != \"^\") src = \"^\" + src;\n        if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n        \n        return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n    };\n    this.getLineTokens = function(line, startState) {\n        if (startState && typeof startState != \"string\") {\n            var stack = startState.slice(0);\n            startState = stack[0];\n            if (startState === \"#tmp\") {\n                stack.shift();\n                startState = stack.shift();\n            }\n        } else\n            var stack = [];\n\n        var currentState = startState || \"start\";\n        var state = this.states[currentState];\n        if (!state) {\n            currentState = \"start\";\n            state = this.states[currentState];\n        }\n        var mapping = this.matchMappings[currentState];\n        var re = this.regExps[currentState];\n        re.lastIndex = 0;\n\n        var match, tokens = [];\n        var lastIndex = 0;\n        var matchAttempts = 0;\n\n        var token = {type: null, value: \"\"};\n\n        while (match = re.exec(line)) {\n            var type = mapping.defaultToken;\n            var rule = null;\n            var value = match[0];\n            var index = re.lastIndex;\n\n            if (index - value.length > lastIndex) {\n                var skipped = line.substring(lastIndex, index - value.length);\n                if (token.type == type) {\n                    token.value += skipped;\n                } else {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: type, value: skipped};\n                }\n            }\n\n            for (var i = 0; i < match.length-2; i++) {\n                if (match[i + 1] === undefined)\n                    continue;\n\n                rule = state[mapping[i]];\n\n                if (rule.onMatch)\n                    type = rule.onMatch(value, currentState, stack, line);\n                else\n                    type = rule.token;\n\n                if (rule.next) {\n                    if (typeof rule.next == \"string\") {\n                        currentState = rule.next;\n                    } else {\n                        currentState = rule.next(currentState, stack);\n                    }\n                    \n                    state = this.states[currentState];\n                    if (!state) {\n                        this.reportError(\"state doesn't exist\", currentState);\n                        currentState = \"start\";\n                        state = this.states[currentState];\n                    }\n                    mapping = this.matchMappings[currentState];\n                    lastIndex = index;\n                    re = this.regExps[currentState];\n                    re.lastIndex = index;\n                }\n                if (rule.consumeLineEnd)\n                    lastIndex = index;\n                break;\n            }\n\n            if (value) {\n                if (typeof type === \"string\") {\n                    if ((!rule || rule.merge !== false) && token.type === type) {\n                        token.value += value;\n                    } else {\n                        if (token.type)\n                            tokens.push(token);\n                        token = {type: type, value: value};\n                    }\n                } else if (type) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: null, value: \"\"};\n                    for (var i = 0; i < type.length; i++)\n                        tokens.push(type[i]);\n                }\n            }\n\n            if (lastIndex == line.length)\n                break;\n\n            lastIndex = index;\n\n            if (matchAttempts++ > MAX_TOKEN_COUNT) {\n                if (matchAttempts > 2 * line.length) {\n                    this.reportError(\"infinite loop with in ace tokenizer\", {\n                        startState: startState,\n                        line: line\n                    });\n                }\n                while (lastIndex < line.length) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {\n                        value: line.substring(lastIndex, lastIndex += 2000),\n                        type: \"overflow\"\n                    };\n                }\n                currentState = \"start\";\n                stack = [];\n                break;\n            }\n        }\n\n        if (token.type)\n            tokens.push(token);\n        \n        if (stack.length > 1) {\n            if (stack[0] !== currentState)\n                stack.unshift(\"#tmp\", currentState);\n        }\n        return {\n            tokens : tokens,\n            state : stack.length ? stack : currentState\n        };\n    };\n    \n    this.reportError = config.reportError;\n    \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\ndefine(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"empty_line\",\n            regex : '^$'\n        }, {\n            defaultToken : \"text\"\n        }]\n    };\n};\n\n(function() {\n\n    this.addRules = function(rules, prefix) {\n        if (!prefix) {\n            for (var key in rules)\n                this.$rules[key] = rules[key];\n            return;\n        }\n        for (var key in rules) {\n            var state = rules[key];\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                if (rule.next || rule.onMatch) {\n                    if (typeof rule.next == \"string\") {\n                        if (rule.next.indexOf(prefix) !== 0)\n                            rule.next = prefix + rule.next;\n                    }\n                    if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n                        rule.nextState = prefix + rule.nextState;\n                }\n            }\n            this.$rules[prefix + key] = state;\n        }\n    };\n\n    this.getRules = function() {\n        return this.$rules;\n    };\n\n    this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n        var embedRules = typeof HighlightRules == \"function\"\n            ? new HighlightRules().getRules()\n            : HighlightRules;\n        if (states) {\n            for (var i = 0; i < states.length; i++)\n                states[i] = prefix + states[i];\n        } else {\n            states = [];\n            for (var key in embedRules)\n                states.push(prefix + key);\n        }\n\n        this.addRules(embedRules, prefix);\n\n        if (escapeRules) {\n            var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n            for (var i = 0; i < states.length; i++)\n                addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n        }\n\n        if (!this.$embeds)\n            this.$embeds = [];\n        this.$embeds.push(prefix);\n    };\n\n    this.getEmbeds = function() {\n        return this.$embeds;\n    };\n\n    var pushState = function(currentState, stack) {\n        if (currentState != \"start\" || stack.length)\n            stack.unshift(this.nextState, currentState);\n        return this.nextState;\n    };\n    var popState = function(currentState, stack) {\n        stack.shift();\n        return stack.shift() || \"start\";\n    };\n\n    this.normalizeRules = function() {\n        var id = 0;\n        var rules = this.$rules;\n        function processState(key) {\n            var state = rules[key];\n            state.processed = true;\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                var toInsert = null;\n                if (Array.isArray(rule)) {\n                    toInsert = rule;\n                    rule = {};\n                }\n                if (!rule.regex && rule.start) {\n                    rule.regex = rule.start;\n                    if (!rule.next)\n                        rule.next = [];\n                    rule.next.push({\n                        defaultToken: rule.token\n                    }, {\n                        token: rule.token + \".end\",\n                        regex: rule.end || rule.start,\n                        next: \"pop\"\n                    });\n                    rule.token = rule.token + \".start\";\n                    rule.push = true;\n                }\n                var next = rule.next || rule.push;\n                if (next && Array.isArray(next)) {\n                    var stateName = rule.stateName;\n                    if (!stateName)  {\n                        stateName = rule.token;\n                        if (typeof stateName != \"string\")\n                            stateName = stateName[0] || \"\";\n                        if (rules[stateName])\n                            stateName += id++;\n                    }\n                    rules[stateName] = next;\n                    rule.next = stateName;\n                    processState(stateName);\n                } else if (next == \"pop\") {\n                    rule.next = popState;\n                }\n\n                if (rule.push) {\n                    rule.nextState = rule.next || rule.push;\n                    rule.next = pushState;\n                    delete rule.push;\n                }\n\n                if (rule.rules) {\n                    for (var r in rule.rules) {\n                        if (rules[r]) {\n                            if (rules[r].push)\n                                rules[r].push.apply(rules[r], rule.rules[r]);\n                        } else {\n                            rules[r] = rule.rules[r];\n                        }\n                    }\n                }\n                var includeName = typeof rule == \"string\" ? rule : rule.include;\n                if (includeName) {\n                    if (Array.isArray(includeName))\n                        toInsert = includeName.map(function(x) { return rules[x]; });\n                    else\n                        toInsert = rules[includeName];\n                }\n\n                if (toInsert) {\n                    var args = [i, 1].concat(toInsert);\n                    if (rule.noEscape)\n                        args = args.filter(function(x) {return !x.next;});\n                    state.splice.apply(state, args);\n                    i--;\n                }\n                \n                if (rule.keywordMap) {\n                    rule.token = this.createKeywordMapper(\n                        rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n                    );\n                    delete rule.defaultToken;\n                }\n            }\n        }\n        Object.keys(rules).forEach(processState, this);\n    };\n\n    this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n        var keywords = Object.create(null);\n        Object.keys(map).forEach(function(className) {\n            var a = map[className];\n            if (ignoreCase)\n                a = a.toLowerCase();\n            var list = a.split(splitChar || \"|\");\n            for (var i = list.length; i--; )\n                keywords[list[i]] = className;\n        });\n        if (Object.getPrototypeOf(keywords)) {\n            keywords.__proto__ = null;\n        }\n        this.$keywordList = Object.keys(keywords);\n        map = null;\n        return ignoreCase\n            ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n            : function(value) {return keywords[value] || defaultToken; };\n    };\n\n    this.getKeywords = function() {\n        return this.$keywords;\n    };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n   this.$behaviours = {};\n};\n\n(function () {\n\n    this.add = function (name, action, callback) {\n        switch (undefined) {\n          case this.$behaviours:\n              this.$behaviours = {};\n          case this.$behaviours[name]:\n              this.$behaviours[name] = {};\n        }\n        this.$behaviours[name][action] = callback;\n    };\n    \n    this.addBehaviours = function (behaviours) {\n        for (var key in behaviours) {\n            for (var action in behaviours[key]) {\n                this.add(key, action, behaviours[key][action]);\n            }\n        }\n    };\n    \n    this.remove = function (name) {\n        if (this.$behaviours && this.$behaviours[name]) {\n            delete this.$behaviours[name];\n        }\n    };\n    \n    this.inherit = function (mode, filter) {\n        if (typeof mode === \"function\") {\n            var behaviours = new mode().getBehaviours(filter);\n        } else {\n            var behaviours = mode.getBehaviours(filter);\n        }\n        this.addBehaviours(behaviours);\n    };\n    \n    this.getBehaviours = function (filter) {\n        if (!filter) {\n            return this.$behaviours;\n        } else {\n            var ret = {};\n            for (var i = 0; i < filter.length; i++) {\n                if (this.$behaviours[filter[i]]) {\n                    ret[filter[i]] = this.$behaviours[filter[i]];\n                }\n            }\n            return ret;\n        }\n    };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\ndefine(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n    this.$session = session;\n    this.$row = initialRow;\n    this.$rowTokens = session.getTokens(initialRow);\n\n    var token = session.getTokenAt(initialRow, initialColumn);\n    this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n    this.stepBackward = function() {\n        this.$tokenIndex -= 1;\n        \n        while (this.$tokenIndex < 0) {\n            this.$row -= 1;\n            if (this.$row < 0) {\n                this.$row = 0;\n                return null;\n            }\n                \n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = this.$rowTokens.length - 1;\n        }\n            \n        return this.$rowTokens[this.$tokenIndex];\n    };   \n    this.stepForward = function() {\n        this.$tokenIndex += 1;\n        var rowCount;\n        while (this.$tokenIndex >= this.$rowTokens.length) {\n            this.$row += 1;\n            if (!rowCount)\n                rowCount = this.$session.getLength();\n            if (this.$row >= rowCount) {\n                this.$row = rowCount - 1;\n                return null;\n            }\n\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = 0;\n        }\n            \n        return this.$rowTokens[this.$tokenIndex];\n    };      \n    this.getCurrentToken = function () {\n        return this.$rowTokens[this.$tokenIndex];\n    };      \n    this.getCurrentTokenRow = function () {\n        return this.$row;\n    };     \n    this.getCurrentTokenColumn = function() {\n        var rowTokens = this.$rowTokens;\n        var tokenIndex = this.$tokenIndex;\n        var column = rowTokens[tokenIndex].start;\n        if (column !== undefined)\n            return column;\n            \n        column = 0;\n        while (tokenIndex > 0) {\n            tokenIndex -= 1;\n            column += rowTokens[tokenIndex].value.length;\n        }\n        \n        return column;  \n    };\n    this.getCurrentTokenPosition = function() {\n        return {row: this.$row, column: this.getCurrentTokenColumn()};\n    };\n    this.getCurrentTokenRange = function() {\n        var token = this.$rowTokens[this.$tokenIndex];\n        var column = this.getCurrentTokenColumn();\n        return new Range(this.$row, column, this.$row, column + token.value.length);\n    };\n    \n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\ndefine(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = {rangeCount: editor.multiSelect.rangeCount};\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n                0,\n                selection.start.column + 1,\n                rowDiff,\n                selection.end.column + (rowDiff ? 0 : 1)\n            ]\n    };\n};\n\nvar CstyleBehaviour = function(options) {\n    this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                } else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n                if (!openBracePos)\n                     return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            } else if (closing) {\n                var next_indent = this.$getIndent(line);\n            } else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        } else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n\n    this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            } else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n\n    this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n        if (text.length == 1 && quotes[text]) {\n            if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) \n                return;\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            } else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column-1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                \n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                \n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                \n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                    if (pair && /string\\.end/.test(rightToken.type))\n                        pair = false;\n                } else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(leftChar);\n                    if (isWordBefore || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1,1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n};\n\n    \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isMaybeInsertedClosing(cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\ndefine(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar wordChars = [48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2];\n\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n    str.push(code += wordChars[i]);\n    if (wordChars[i + 1])\n        str.push(45, code += wordChars[i + 1]);\n}\n\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\ndefine(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar config = require(\"../config\");\n\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n    this.$defaultBehaviour = new CstyleBehaviour();\n\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n\n    this.getTokenizer = function() {\n        if (!this.$tokenizer) {\n            this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n            this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n        }\n        return this.$tokenizer;\n    };\n\n    this.lineCommentStart = \"\";\n    this.blockComment = \"\";\n\n    this.toggleCommentLines = function(state, session, startRow, endRow) {\n        var doc = session.doc;\n\n        var ignoreBlankLines = true;\n        var shouldRemove = true;\n        var minIndent = Infinity;\n        var tabSize = session.getTabSize();\n        var insertAtTabStop = false;\n\n        if (!this.lineCommentStart) {\n            if (!this.blockComment)\n                return false;\n            var lineCommentStart = this.blockComment.start;\n            var lineCommentEnd = this.blockComment.end;\n            var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n            var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n            var comment = function(line, i) {\n                if (testRemove(line, i))\n                    return;\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n                    doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n                }\n            };\n\n            var uncomment = function(line, i) {\n                var m;\n                if (m = line.match(regexpEnd))\n                    doc.removeInLine(i, line.length - m[0].length, line.length);\n                if (m = line.match(regexpStart))\n                    doc.removeInLine(i, m[1].length, m[0].length);\n            };\n\n            var testRemove = function(line, row) {\n                if (regexpStart.test(line))\n                    return true;\n                var tokens = session.getTokens(row);\n                for (var i = 0; i < tokens.length; i++) {\n                    if (tokens[i].type === \"comment\")\n                        return true;\n                }\n            };\n        } else {\n            if (Array.isArray(this.lineCommentStart)) {\n                var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n                var lineCommentStart = this.lineCommentStart[0];\n            } else {\n                var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n                var lineCommentStart = this.lineCommentStart;\n            }\n            regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n            \n            insertAtTabStop = session.getUseSoftTabs();\n\n            var uncomment = function(line, i) {\n                var m = line.match(regexpStart);\n                if (!m) return;\n                var start = m[1].length, end = m[0].length;\n                if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n                    end--;\n                doc.removeInLine(i, start, end);\n            };\n            var commentWithSpace = lineCommentStart + \" \";\n            var comment = function(line, i) {\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    if (shouldInsertSpace(line, minIndent, minIndent))\n                        doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n                    else\n                        doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n                }\n            };\n            var testRemove = function(line, i) {\n                return regexpStart.test(line);\n            };\n            \n            var shouldInsertSpace = function(line, before, after) {\n                var spaces = 0;\n                while (before-- && line.charAt(before) == \" \")\n                    spaces++;\n                if (spaces % tabSize != 0)\n                    return false;\n                var spaces = 0;\n                while (line.charAt(after++) == \" \")\n                    spaces++;\n                if (tabSize > 2)\n                    return spaces % tabSize != tabSize - 1;\n                else\n                    return spaces % tabSize == 0;\n            };\n        }\n\n        function iter(fun) {\n            for (var i = startRow; i <= endRow; i++)\n                fun(doc.getLine(i), i);\n        }\n\n\n        var minEmptyLength = Infinity;\n        iter(function(line, i) {\n            var indent = line.search(/\\S/);\n            if (indent !== -1) {\n                if (indent < minIndent)\n                    minIndent = indent;\n                if (shouldRemove && !testRemove(line, i))\n                    shouldRemove = false;\n            } else if (minEmptyLength > line.length) {\n                minEmptyLength = line.length;\n            }\n        });\n\n        if (minIndent == Infinity) {\n            minIndent = minEmptyLength;\n            ignoreBlankLines = false;\n            shouldRemove = false;\n        }\n\n        if (insertAtTabStop && minIndent % tabSize != 0)\n            minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n        iter(shouldRemove ? uncomment : comment);\n    };\n\n    this.toggleBlockComment = function(state, session, range, cursor) {\n        var comment = this.blockComment;\n        if (!comment)\n            return;\n        if (!comment.start && comment[0])\n            comment = comment[0];\n\n        var iterator = new TokenIterator(session, cursor.row, cursor.column);\n        var token = iterator.getCurrentToken();\n\n        var sel = session.selection;\n        var initialRange = session.selection.toOrientedRange();\n        var startRow, colDiff;\n\n        if (token && /comment/.test(token.type)) {\n            var startRange, endRange;\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.start);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    startRange = new Range(row, column, row, column + comment.start.length);\n                    break;\n                }\n                token = iterator.stepBackward();\n            }\n\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.end);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    endRange = new Range(row, column, row, column + comment.end.length);\n                    break;\n                }\n                token = iterator.stepForward();\n            }\n            if (endRange)\n                session.remove(endRange);\n            if (startRange) {\n                session.remove(startRange);\n                startRow = startRange.start.row;\n                colDiff = -comment.start.length;\n            }\n        } else {\n            colDiff = comment.start.length;\n            startRow = range.start.row;\n            session.insert(range.end, comment.end);\n            session.insert(range.start, comment.start);\n        }\n        if (initialRange.start.row == startRow)\n            initialRange.start.column += colDiff;\n        if (initialRange.end.row == startRow)\n            initialRange.end.column += colDiff;\n        session.selection.fromOrientedRange(initialRange);\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.createModeDelegates = function (mapping) {\n        this.$embeds = [];\n        this.$modes = {};\n        for (var i in mapping) {\n            if (mapping[i]) {\n                var Mode = mapping[i];\n                var id = Mode.prototype.$id;\n                var mode = config.$modes[id];\n                if (!mode)\n                    config.$modes[id] = mode = new Mode();\n                if (!config.$modes[i])\n                    config.$modes[i] = mode;\n                this.$embeds.push(i);\n                this.$modes[i] = mode;\n            }\n        }\n\n        var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n            \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n        for (var i = 0; i < delegations.length; i++) {\n            (function(scope) {\n              var functionName = delegations[i];\n              var defaultHandler = scope[functionName];\n              scope[delegations[i]] = function() {\n                  return this.$delegator(functionName, arguments, defaultHandler);\n              };\n            }(this));\n        }\n    };\n\n    this.$delegator = function(method, args, defaultHandler) {\n        var state = args[0] || \"start\";\n        if (typeof state != \"string\") {\n            if (Array.isArray(state[2])) {\n                var language = state[2][state[2].length - 1];\n                var mode = this.$modes[language];\n                if (mode)\n                    return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n            }\n            state = state[0] || \"start\";\n        }\n            \n        for (var i = 0; i < this.$embeds.length; i++) {\n            if (!this.$modes[this.$embeds[i]]) continue;\n\n            var split = state.split(this.$embeds[i]);\n            if (!split[0] && split[1]) {\n                args[0] = split[1];\n                var mode = this.$modes[this.$embeds[i]];\n                return mode[method].apply(mode, args);\n            }\n        }\n        var ret = defaultHandler.apply(this, args);\n        return defaultHandler ? ret : undefined;\n    };\n\n    this.transformAction = function(state, action, editor, session, param) {\n        if (this.$behaviour) {\n            var behaviours = this.$behaviour.getBehaviours();\n            for (var key in behaviours) {\n                if (behaviours[key][action]) {\n                    var ret = behaviours[key][action].apply(this, arguments);\n                    if (ret) {\n                        return ret;\n                    }\n                }\n            }\n        }\n    };\n    \n    this.getKeywords = function(append) {\n        if (!this.completionKeywords) {\n            var rules = this.$tokenizer.rules;\n            var completionKeywords = [];\n            for (var rule in rules) {\n                var ruleItr = rules[rule];\n                for (var r = 0, l = ruleItr.length; r < l; r++) {\n                    if (typeof ruleItr[r].token === \"string\") {\n                        if (/keyword|support|storage/.test(ruleItr[r].token))\n                            completionKeywords.push(ruleItr[r].regex);\n                    }\n                    else if (typeof ruleItr[r].token === \"object\") {\n                        for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {    \n                            if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n                                var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n                                completionKeywords.push(rule.substr(1, rule.length - 2));\n                            }\n                        }\n                    }\n                }\n            }\n            this.completionKeywords = completionKeywords;\n        }\n        if (!append)\n            return this.$keywordList;\n        return completionKeywords.concat(this.$keywordList || []);\n    };\n    \n    this.$createKeywordList = function() {\n        if (!this.$highlightRules)\n            this.getTokenizer();\n        return this.$keywordList = this.$highlightRules.$keywordList || [];\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var keywords = this.$keywordList || this.$createKeywordList();\n        return keywords.map(function(word) {\n            return {\n                name: word,\n                value: word,\n                score: 0,\n                meta: \"keyword\"\n            };\n        });\n    };\n\n    this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n    this.running = false;\n    this.lines = [];\n    this.states = [];\n    this.currentLine = 0;\n    this.tokenizer = tokenizer;\n\n    var self = this;\n\n    this.$worker = function() {\n        if (!self.running) { return; }\n\n        var workerStart = new Date();\n        var currentLine = self.currentLine;\n        var endLine = -1;\n        var doc = self.doc;\n\n        var startLine = currentLine;\n        while (self.lines[currentLine])\n            currentLine++;\n        \n        var len = doc.getLength();\n        var processedLines = 0;\n        self.running = false;\n        while (currentLine < len) {\n            self.$tokenizeRow(currentLine);\n            endLine = currentLine;\n            do {\n                currentLine++;\n            } while (self.lines[currentLine]);\n            processedLines ++;\n            if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n                self.running = setTimeout(self.$worker, 20);\n                break;\n            }\n        }\n        self.currentLine = currentLine;\n        \n        if (endLine == -1)\n            endLine = currentLine;\n        \n        if (startLine <= endLine)\n            self.fireUpdateEvent(startLine, endLine);\n    };\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n    this.setTokenizer = function(tokenizer) {\n        this.tokenizer = tokenizer;\n        this.lines = [];\n        this.states = [];\n\n        this.start(0);\n    };\n    this.setDocument = function(doc) {\n        this.doc = doc;\n        this.lines = [];\n        this.states = [];\n\n        this.stop();\n    };\n    this.fireUpdateEvent = function(firstRow, lastRow) {\n        var data = {\n            first: firstRow,\n            last: lastRow\n        };\n        this._signal(\"update\", {data: data});\n    };\n    this.start = function(startRow) {\n        this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n        this.lines.splice(this.currentLine, this.lines.length);\n        this.states.splice(this.currentLine, this.states.length);\n\n        this.stop();\n        this.running = setTimeout(this.$worker, 700);\n    };\n    \n    this.scheduleStart = function() {\n        if (!this.running)\n            this.running = setTimeout(this.$worker, 700);\n    };\n\n    this.$updateOnChange = function(delta) {\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n\n        if (len === 0) {\n            this.lines[startRow] = null;\n        } else if (delta.action == \"remove\") {\n            this.lines.splice(startRow, len + 1, null);\n            this.states.splice(startRow, len + 1, null);\n        } else {\n            var args = Array(len + 1);\n            args.unshift(startRow, 1);\n            this.lines.splice.apply(this.lines, args);\n            this.states.splice.apply(this.states, args);\n        }\n\n        this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n        this.stop();\n    };\n    this.stop = function() {\n        if (this.running)\n            clearTimeout(this.running);\n        this.running = false;\n    };\n    this.getTokens = function(row) {\n        return this.lines[row] || this.$tokenizeRow(row);\n    };\n    this.getState = function(row) {\n        if (this.currentLine == row)\n            this.$tokenizeRow(row);\n        return this.states[row] || \"start\";\n    };\n\n    this.$tokenizeRow = function(row) {\n        var line = this.doc.getLine(row);\n        var state = this.states[row - 1];\n\n        var data = this.tokenizer.getLineTokens(line, state, row);\n\n        if (this.states[row] + \"\" !== data.state + \"\") {\n            this.states[row] = data.state;\n            this.lines[row + 1] = null;\n            if (this.currentLine > row + 1)\n                this.currentLine = row + 1;\n        } else if (this.currentLine == row) {\n            this.currentLine = row + 1;\n        }\n\n        return this.lines[row] = data.tokens;\n    };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\ndefine(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n    this.setRegexp(regExp);\n    this.clazz = clazz;\n    this.type = type || \"text\";\n};\n\n(function() {\n    this.MAX_RANGES = 500;\n    \n    this.setRegexp = function(regExp) {\n        if (this.regExp+\"\" == regExp+\"\")\n            return;\n        this.regExp = regExp;\n        this.cache = [];\n    };\n\n    this.update = function(html, markerLayer, session, config) {\n        if (!this.regExp)\n            return;\n        var start = config.firstRow, end = config.lastRow;\n\n        for (var i = start; i <= end; i++) {\n            var ranges = this.cache[i];\n            if (ranges == null) {\n                ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n                if (ranges.length > this.MAX_RANGES)\n                    ranges = ranges.slice(0, this.MAX_RANGES);\n                ranges = ranges.map(function(match) {\n                    return new Range(i, match.offset, i, match.offset + match.length);\n                });\n                this.cache[i] = ranges.length ? ranges : \"\";\n            }\n\n            for (var j = ranges.length; j --; ) {\n                markerLayer.drawSingleLineMarker(\n                    html, ranges[j].toScreenRange(session), this.clazz, config);\n            }\n        }\n    };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\ndefine(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n    this.foldData = foldData;\n    if (Array.isArray(folds)) {\n        this.folds = folds;\n    } else {\n        folds = this.folds = [ folds ];\n    }\n\n    var last = folds[folds.length - 1];\n    this.range = new Range(folds[0].start.row, folds[0].start.column,\n                           last.end.row, last.end.column);\n    this.start = this.range.start;\n    this.end   = this.range.end;\n\n    this.folds.forEach(function(fold) {\n        fold.setFoldLine(this);\n    }, this);\n}\n\n(function() {\n    this.shiftRow = function(shift) {\n        this.start.row += shift;\n        this.end.row += shift;\n        this.folds.forEach(function(fold) {\n            fold.start.row += shift;\n            fold.end.row += shift;\n        });\n    };\n\n    this.addFold = function(fold) {\n        if (fold.sameRow) {\n            if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n                throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n            }\n            this.folds.push(fold);\n            this.folds.sort(function(a, b) {\n                return -a.range.compareEnd(b.start.row, b.start.column);\n            });\n            if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n                this.end.row = fold.end.row;\n                this.end.column =  fold.end.column;\n            } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n                this.start.row = fold.start.row;\n                this.start.column = fold.start.column;\n            }\n        } else if (fold.start.row == this.end.row) {\n            this.folds.push(fold);\n            this.end.row = fold.end.row;\n            this.end.column = fold.end.column;\n        } else if (fold.end.row == this.start.row) {\n            this.folds.unshift(fold);\n            this.start.row = fold.start.row;\n            this.start.column = fold.start.column;\n        } else {\n            throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n        }\n        fold.foldLine = this;\n    };\n\n    this.containsRow = function(row) {\n        return row >= this.start.row && row <= this.end.row;\n    };\n\n    this.walk = function(callback, endRow, endColumn) {\n        var lastEnd = 0,\n            folds = this.folds,\n            fold,\n            cmp, stop, isNewRow = true;\n\n        if (endRow == null) {\n            endRow = this.end.row;\n            endColumn = this.end.column;\n        }\n\n        for (var i = 0; i < folds.length; i++) {\n            fold = folds[i];\n\n            cmp = fold.range.compareStart(endRow, endColumn);\n            if (cmp == -1) {\n                callback(null, endRow, endColumn, lastEnd, isNewRow);\n                return;\n            }\n\n            stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n            stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n            if (stop || cmp === 0) {\n                return;\n            }\n            isNewRow = !fold.sameRow;\n            lastEnd = fold.end.column;\n        }\n        callback(null, endRow, endColumn, lastEnd, isNewRow);\n    };\n\n    this.getNextFoldTo = function(row, column) {\n        var fold, cmp;\n        for (var i = 0; i < this.folds.length; i++) {\n            fold = this.folds[i];\n            cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                return {\n                    fold: fold,\n                    kind: \"after\"\n                };\n            } else if (cmp === 0) {\n                return {\n                    fold: fold,\n                    kind: \"inside\"\n                };\n            }\n        }\n        return null;\n    };\n\n    this.addRemoveChars = function(row, column, len) {\n        var ret = this.getNextFoldTo(row, column),\n            fold, folds;\n        if (ret) {\n            fold = ret.fold;\n            if (ret.kind == \"inside\"\n                && fold.start.column != column\n                && fold.start.row != row)\n            {\n                window.console && window.console.log(row, column, fold);\n            } else if (fold.start.row == row) {\n                folds = this.folds;\n                var i = folds.indexOf(fold);\n                if (i === 0) {\n                    this.start.column += len;\n                }\n                for (i; i < folds.length; i++) {\n                    fold = folds[i];\n                    fold.start.column += len;\n                    if (!fold.sameRow) {\n                        return;\n                    }\n                    fold.end.column += len;\n                }\n                this.end.column += len;\n            }\n        }\n    };\n\n    this.split = function(row, column) {\n        var pos = this.getNextFoldTo(row, column);\n        \n        if (!pos || pos.kind == \"inside\")\n            return null;\n            \n        var fold = pos.fold;\n        var folds = this.folds;\n        var foldData = this.foldData;\n        \n        var i = folds.indexOf(fold);\n        var foldBefore = folds[i - 1];\n        this.end.row = foldBefore.end.row;\n        this.end.column = foldBefore.end.column;\n        folds = folds.splice(i, folds.length - i);\n\n        var newFoldLine = new FoldLine(foldData, folds);\n        foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n        return newFoldLine;\n    };\n\n    this.merge = function(foldLineNext) {\n        var folds = foldLineNext.folds;\n        for (var i = 0; i < folds.length; i++) {\n            this.addFold(folds[i]);\n        }\n        var foldData = this.foldData;\n        foldData.splice(foldData.indexOf(foldLineNext), 1);\n    };\n\n    this.toString = function() {\n        var ret = [this.range.toString() + \": [\" ];\n\n        this.folds.forEach(function(fold) {\n            ret.push(\"  \" + fold.toString());\n        });\n        ret.push(\"]\");\n        return ret.join(\"\\n\");\n    };\n\n    this.idxToPosition = function(idx) {\n        var lastFoldEndColumn = 0;\n\n        for (var i = 0; i < this.folds.length; i++) {\n            var fold = this.folds[i];\n\n            idx -= fold.start.column - lastFoldEndColumn;\n            if (idx < 0) {\n                return {\n                    row: fold.start.row,\n                    column: fold.start.column + idx\n                };\n            }\n\n            idx -= fold.placeholder.length;\n            if (idx < 0) {\n                return fold.start;\n            }\n\n            lastFoldEndColumn = fold.end.column;\n        }\n\n        return {\n            row: this.end.row,\n            column: this.end.column + idx\n        };\n    };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\ndefine(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n    this.ranges = [];\n};\n\n(function() {\n    this.comparePoints = comparePoints;\n\n    this.pointIndex = function(pos, excludeEdges, startIndex) {\n        var list = this.ranges;\n\n        for (var i = startIndex || 0; i < list.length; i++) {\n            var range = list[i];\n            var cmpEnd = comparePoints(pos, range.end);\n            if (cmpEnd > 0)\n                continue;\n            var cmpStart = comparePoints(pos, range.start);\n            if (cmpEnd === 0)\n                return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n            if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n                return i;\n\n            return -i-1;\n        }\n        return -i - 1;\n    };\n\n    this.add = function(range) {\n        var excludeEdges = !range.isEmpty();\n        var startIndex = this.pointIndex(range.start, excludeEdges);\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n\n        var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        else\n            endIndex++;\n        return this.ranges.splice(startIndex, endIndex - startIndex, range);\n    };\n\n    this.addList = function(list) {\n        var removed = [];\n        for (var i = list.length; i--; ) {\n            removed.push.apply(removed, this.add(list[i]));\n        }\n        return removed;\n    };\n\n    this.substractPoint = function(pos) {\n        var i = this.pointIndex(pos);\n\n        if (i >= 0)\n            return this.ranges.splice(i, 1);\n    };\n    this.merge = function() {\n        var removed = [];\n        var list = this.ranges;\n        \n        list = list.sort(function(a, b) {\n            return comparePoints(a.start, b.start);\n        });\n        \n        var next = list[0], range;\n        for (var i = 1; i < list.length; i++) {\n            range = next;\n            next = list[i];\n            var cmp = comparePoints(range.end, next.start);\n            if (cmp < 0)\n                continue;\n\n            if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n                continue;\n\n            if (comparePoints(range.end, next.end) < 0) {\n                range.end.row = next.end.row;\n                range.end.column = next.end.column;\n            }\n\n            list.splice(i, 1);\n            removed.push(next);\n            next = range;\n            i--;\n        }\n        \n        this.ranges = list;\n\n        return removed;\n    };\n\n    this.contains = function(row, column) {\n        return this.pointIndex({row: row, column: column}) >= 0;\n    };\n\n    this.containsPoint = function(pos) {\n        return this.pointIndex(pos) >= 0;\n    };\n\n    this.rangeAtPoint = function(pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges[i];\n    };\n\n\n    this.clipRows = function(startRow, endRow) {\n        var list = this.ranges;\n        if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n            return [];\n\n        var startIndex = this.pointIndex({row: startRow, column: 0});\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n\n        var clipped = [];\n        for (var i = startIndex; i < endIndex; i++) {\n            clipped.push(list[i]);\n        }\n        return clipped;\n    };\n\n    this.removeAll = function() {\n        return this.ranges.splice(0, this.ranges.length);\n    };\n\n    this.attach = function(session) {\n        if (this.session)\n            this.detach();\n\n        this.session = session;\n        this.onChange = this.$onChange.bind(this);\n\n        this.session.on('change', this.onChange);\n    };\n\n    this.detach = function() {\n        if (!this.session)\n            return;\n        this.session.removeListener('change', this.onChange);\n        this.session = null;\n    };\n\n    this.$onChange = function(delta) {\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var ranges = this.ranges;\n        for (var i = 0, n = ranges.length; i < n; i++) {\n            var r = ranges[i];\n            if (r.end.row >= startRow)\n                break;\n        }\n        \n        if (delta.action == \"insert\") {\n            var lineDif = endRow - startRow;\n            var colDiff = -start.column + end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                if (r.start.row > startRow)\n                    break;\n    \n                if (r.start.row == startRow && r.start.column >= start.column) {\n                    if (r.start.column == start.column && this.$insertRight) {\n                    } else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                if (r.end.row == startRow && r.end.column >= start.column) {\n                    if (r.end.column == start.column && this.$insertRight) {\n                        continue;\n                    }\n                    if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n                        if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n                            r.end.column -= colDiff;\n                    }\n                    r.end.column += colDiff;\n                    r.end.row += lineDif;\n                }\n            }\n        } else {\n            var lineDif = startRow - endRow;\n            var colDiff = start.column - end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                \n                if (r.start.row > endRow)\n                    break;\n                    \n                if (r.end.row < endRow\n                    && (\n                        startRow < r.end.row \n                        || startRow == r.end.row && start.column < r.end.column\n                    )\n                ) {\n                    r.end.row = startRow;\n                    r.end.column = start.column;\n                }\n                else if (r.end.row == endRow) {\n                    if (r.end.column <= end.column) {\n                        if (lineDif || r.end.column > start.column) {\n                            r.end.column = start.column;\n                            r.end.row = start.row;\n                        }\n                    }\n                    else {\n                        r.end.column += colDiff;\n                        r.end.row += lineDif;\n                    }\n                }\n                else if (r.end.row > endRow) {\n                    r.end.row += lineDif;\n                }\n                \n                if (r.start.row < endRow\n                    && (\n                        startRow < r.start.row \n                        || startRow == r.start.row && start.column < r.start.column\n                    )\n                ) {\n                    r.start.row = startRow;\n                    r.start.column = start.column;\n                }\n                else if (r.start.row == endRow) {\n                    if (r.start.column <= end.column) {\n                        if (lineDif || r.start.column > start.column) {\n                            r.start.column = start.column;\n                            r.start.row = start.row;\n                        }\n                    }\n                    else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                else if (r.start.row > endRow) {\n                    r.start.row += lineDif;\n                }\n            }\n        }\n\n        if (lineDif != 0 && i < n) {\n            for (; i < n; i++) {\n                var r = ranges[i];\n                r.start.row += lineDif;\n                r.end.row += lineDif;\n            }\n        }\n    };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\ndefine(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n    this.foldLine = null;\n    this.placeholder = placeholder;\n    this.range = range;\n    this.start = range.start;\n    this.end = range.end;\n\n    this.sameRow = range.start.row == range.end.row;\n    this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n    this.toString = function() {\n        return '\"' + this.placeholder + '\" ' + this.range.toString();\n    };\n\n    this.setFoldLine = function(foldLine) {\n        this.foldLine = foldLine;\n        this.subFolds.forEach(function(fold) {\n            fold.setFoldLine(foldLine);\n        });\n    };\n\n    this.clone = function() {\n        var range = this.range.clone();\n        var fold = new Fold(range, this.placeholder);\n        this.subFolds.forEach(function(subFold) {\n            fold.subFolds.push(subFold.clone());\n        });\n        fold.collapseChildren = this.collapseChildren;\n        return fold;\n    };\n\n    this.addSubFold = function(fold) {\n        if (this.range.isEqual(fold))\n            return;\n\n        if (!this.range.containsRange(fold))\n            throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n        consumeRange(fold, this.start);\n\n        var row = fold.start.row, column = fold.start.column;\n        for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n            cmp = this.subFolds[i].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterStart = this.subFolds[i];\n\n        if (cmp == 0)\n            return afterStart.addSubFold(fold);\n        var row = fold.range.end.row, column = fold.range.end.column;\n        for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n            cmp = this.subFolds[j].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterEnd = this.subFolds[j];\n\n        if (cmp == 0)\n            throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n        var consumedFolds = this.subFolds.splice(i, j - i, fold);\n        fold.setFoldLine(this.foldLine);\n\n        return fold;\n    };\n    \n    this.restoreRange = function(range) {\n        return restoreRange(range, this.start);\n    };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n    point.row -= anchor.row;\n    if (point.row == 0)\n        point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n    consumePoint(range.start, anchor);\n    consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n    if (point.row == 0)\n        point.column += anchor.column;\n    point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n    restorePoint(range.start, anchor);\n    restorePoint(range.end, anchor);\n}\n\n});\n\ndefine(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n    this.getFoldAt = function(row, column, side) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n\n        var folds = foldLine.folds;\n        for (var i = 0; i < folds.length; i++) {\n            var fold = folds[i];\n            if (fold.range.contains(row, column)) {\n                if (side == 1 && fold.range.isEnd(row, column)) {\n                    continue;\n                } else if (side == -1 && fold.range.isStart(row, column)) {\n                    continue;\n                }\n                return fold;\n            }\n        }\n    };\n    this.getFoldsInRange = function(range) {\n        var start = range.start;\n        var end = range.end;\n        var foldLines = this.$foldData;\n        var foundFolds = [];\n\n        start.column += 1;\n        end.column -= 1;\n\n        for (var i = 0; i < foldLines.length; i++) {\n            var cmp = foldLines[i].range.compareRange(range);\n            if (cmp == 2) {\n                continue;\n            }\n            else if (cmp == -2) {\n                break;\n            }\n\n            var folds = foldLines[i].folds;\n            for (var j = 0; j < folds.length; j++) {\n                var fold = folds[j];\n                cmp = fold.range.compareRange(range);\n                if (cmp == -2) {\n                    break;\n                } else if (cmp == 2) {\n                    continue;\n                } else\n                if (cmp == 42) {\n                    break;\n                }\n                foundFolds.push(fold);\n            }\n        }\n        start.column -= 1;\n        end.column += 1;\n\n        return foundFolds;\n    };\n\n    this.getFoldsInRangeList = function(ranges) {\n        if (Array.isArray(ranges)) {\n            var folds = [];\n            ranges.forEach(function(range) {\n                folds = folds.concat(this.getFoldsInRange(range));\n            }, this);\n        } else {\n            var folds = this.getFoldsInRange(ranges);\n        }\n        return folds;\n    };\n    this.getAllFolds = function() {\n        var folds = [];\n        var foldLines = this.$foldData;\n        \n        for (var i = 0; i < foldLines.length; i++)\n            for (var j = 0; j < foldLines[i].folds.length; j++)\n                folds.push(foldLines[i].folds[j]);\n\n        return folds;\n    };\n    this.getFoldStringAt = function(row, column, trim, foldLine) {\n        foldLine = foldLine || this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n\n        var lastFold = {\n            end: { column: 0 }\n        };\n        var str, fold;\n        for (var i = 0; i < foldLine.folds.length; i++) {\n            fold = foldLine.folds[i];\n            var cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                str = this\n                    .getLine(fold.start.row)\n                    .substring(lastFold.end.column, fold.start.column);\n                break;\n            }\n            else if (cmp === 0) {\n                return null;\n            }\n            lastFold = fold;\n        }\n        if (!str)\n            str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n        if (trim == -1)\n            return str.substring(0, column - lastFold.end.column);\n        else if (trim == 1)\n            return str.substring(column - lastFold.end.column);\n        else\n            return str;\n    };\n\n    this.getFoldLine = function(docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n                return foldLine;\n            } else if (foldLine.end.row > docRow) {\n                return null;\n            }\n        }\n        return null;\n    };\n    this.getNextFoldLine = function(docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n        }\n        return null;\n    };\n\n    this.getFoldedRowCount = function(first, last) {\n        var foldData = this.$foldData, rowCount = last-first+1;\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i],\n                end = foldLine.end.row,\n                start = foldLine.start.row;\n            if (end >= last) {\n                if (start < last) {\n                    if (start >= first)\n                        rowCount -= last-start;\n                    else\n                        rowCount = 0; // in one fold\n                }\n                break;\n            } else if (end >= first){\n                if (start >= first) // fold inside range\n                    rowCount -=  end-start;\n                else\n                    rowCount -=  end-first+1;\n            }\n        }\n        return rowCount;\n    };\n\n    this.$addFoldLine = function(foldLine) {\n        this.$foldData.push(foldLine);\n        this.$foldData.sort(function(a, b) {\n            return a.start.row - b.start.row;\n        });\n        return foldLine;\n    };\n    this.addFold = function(placeholder, range) {\n        var foldData = this.$foldData;\n        var added = false;\n        var fold;\n        \n        if (placeholder instanceof Fold)\n            fold = placeholder;\n        else {\n            fold = new Fold(range, placeholder);\n            fold.collapseChildren = range.collapseChildren;\n        }\n        this.$clipRangeToDocument(fold.range);\n\n        var startRow = fold.start.row;\n        var startColumn = fold.start.column;\n        var endRow = fold.end.row;\n        var endColumn = fold.end.column;\n        if (!(startRow < endRow || \n            startRow == endRow && startColumn <= endColumn - 2))\n            throw new Error(\"The range has to be at least 2 characters width\");\n\n        var startFold = this.getFoldAt(startRow, startColumn, 1);\n        var endFold = this.getFoldAt(endRow, endColumn, -1);\n        if (startFold && endFold == startFold)\n            return startFold.addSubFold(fold);\n\n        if (startFold && !startFold.range.isStart(startRow, startColumn))\n            this.removeFold(startFold);\n        \n        if (endFold && !endFold.range.isEnd(endRow, endColumn))\n            this.removeFold(endFold);\n        var folds = this.getFoldsInRange(fold.range);\n        if (folds.length > 0) {\n            this.removeFolds(folds);\n            folds.forEach(function(subFold) {\n                fold.addSubFold(subFold);\n            });\n        }\n\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (endRow == foldLine.start.row) {\n                foldLine.addFold(fold);\n                added = true;\n                break;\n            } else if (startRow == foldLine.end.row) {\n                foldLine.addFold(fold);\n                added = true;\n                if (!fold.sameRow) {\n                    var foldLineNext = foldData[i + 1];\n                    if (foldLineNext && foldLineNext.start.row == endRow) {\n                        foldLine.merge(foldLineNext);\n                        break;\n                    }\n                }\n                break;\n            } else if (endRow <= foldLine.start.row) {\n                break;\n            }\n        }\n\n        if (!added)\n            foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n        if (this.$useWrapMode)\n            this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n        else\n            this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n        return fold;\n    };\n\n    this.addFolds = function(folds) {\n        folds.forEach(function(fold) {\n            this.addFold(fold);\n        }, this);\n    };\n\n    this.removeFold = function(fold) {\n        var foldLine = fold.foldLine;\n        var startRow = foldLine.start.row;\n        var endRow = foldLine.end.row;\n\n        var foldLines = this.$foldData;\n        var folds = foldLine.folds;\n        if (folds.length == 1) {\n            foldLines.splice(foldLines.indexOf(foldLine), 1);\n        } else\n        if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n            folds.pop();\n            foldLine.end.row = folds[folds.length - 1].end.row;\n            foldLine.end.column = folds[folds.length - 1].end.column;\n        } else\n        if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n            folds.shift();\n            foldLine.start.row = folds[0].start.row;\n            foldLine.start.column = folds[0].start.column;\n        } else\n        if (fold.sameRow) {\n            folds.splice(folds.indexOf(fold), 1);\n        } else\n        {\n            var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n            folds = newFoldLine.folds;\n            folds.shift();\n            newFoldLine.start.row = folds[0].start.row;\n            newFoldLine.start.column = folds[0].start.column;\n        }\n\n        if (!this.$updating) {\n            if (this.$useWrapMode)\n                this.$updateWrapData(startRow, endRow);\n            else\n                this.$updateRowLengthCache(startRow, endRow);\n        }\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n    };\n\n    this.removeFolds = function(folds) {\n        var cloneFolds = [];\n        for (var i = 0; i < folds.length; i++) {\n            cloneFolds.push(folds[i]);\n        }\n\n        cloneFolds.forEach(function(fold) {\n            this.removeFold(fold);\n        }, this);\n        this.$modified = true;\n    };\n\n    this.expandFold = function(fold) {\n        this.removeFold(fold);\n        fold.subFolds.forEach(function(subFold) {\n            fold.restoreRange(subFold);\n            this.addFold(subFold);\n        }, this);\n        if (fold.collapseChildren > 0) {\n            this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n        }\n        fold.subFolds = [];\n    };\n\n    this.expandFolds = function(folds) {\n        folds.forEach(function(fold) {\n            this.expandFold(fold);\n        }, this);\n    };\n\n    this.unfold = function(location, expandInner) {\n        var range, folds;\n        if (location == null) {\n            range = new Range(0, 0, this.getLength(), 0);\n            expandInner = true;\n        } else if (typeof location == \"number\")\n            range = new Range(location, 0, location, this.getLine(location).length);\n        else if (\"row\" in location)\n            range = Range.fromPoints(location, location);\n        else\n            range = location;\n        \n        folds = this.getFoldsInRangeList(range);\n        if (expandInner) {\n            this.removeFolds(folds);\n        } else {\n            var subFolds = folds;\n            while (subFolds.length) {\n                this.expandFolds(subFolds);\n                subFolds = this.getFoldsInRangeList(range);\n            }\n        }\n        if (folds.length)\n            return folds;\n    };\n    this.isRowFolded = function(docRow, startFoldRow) {\n        return !!this.getFoldLine(docRow, startFoldRow);\n    };\n\n    this.getRowFoldEnd = function(docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.end.row : docRow;\n    };\n\n    this.getRowFoldStart = function(docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.start.row : docRow;\n    };\n\n    this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n        if (startRow == null)\n            startRow = foldLine.start.row;\n        if (startColumn == null)\n            startColumn = 0;\n        if (endRow == null)\n            endRow = foldLine.end.row;\n        if (endColumn == null)\n            endColumn = this.getLine(endRow).length;\n        var doc = this.doc;\n        var textLine = \"\";\n\n        foldLine.walk(function(placeholder, row, column, lastColumn) {\n            if (row < startRow)\n                return;\n            if (row == startRow) {\n                if (column < startColumn)\n                    return;\n                lastColumn = Math.max(startColumn, lastColumn);\n            }\n\n            if (placeholder != null) {\n                textLine += placeholder;\n            } else {\n                textLine += doc.getLine(row).substring(lastColumn, column);\n            }\n        }, endRow, endColumn);\n        return textLine;\n    };\n\n    this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n        var foldLine = this.getFoldLine(row);\n\n        if (!foldLine) {\n            var line;\n            line = this.doc.getLine(row);\n            return line.substring(startColumn || 0, endColumn || line.length);\n        } else {\n            return this.getFoldDisplayLine(\n                foldLine, row, endColumn, startRow, startColumn);\n        }\n    };\n\n    this.$cloneFoldData = function() {\n        var fd = [];\n        fd = this.$foldData.map(function(foldLine) {\n            var folds = foldLine.folds.map(function(fold) {\n                return fold.clone();\n            });\n            return new FoldLine(fd, folds);\n        });\n\n        return fd;\n    };\n\n    this.toggleFold = function(tryToUnfold) {\n        var selection = this.selection;\n        var range = selection.getRange();\n        var fold;\n        var bracketPos;\n\n        if (range.isEmpty()) {\n            var cursor = range.start;\n            fold = this.getFoldAt(cursor.row, cursor.column);\n\n            if (fold) {\n                this.expandFold(fold);\n                return;\n            } else if (bracketPos = this.findMatchingBracket(cursor)) {\n                if (range.comparePoint(bracketPos) == 1) {\n                    range.end = bracketPos;\n                } else {\n                    range.start = bracketPos;\n                    range.start.column++;\n                    range.end.column--;\n                }\n            } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n                if (range.comparePoint(bracketPos) == 1)\n                    range.end = bracketPos;\n                else\n                    range.start = bracketPos;\n\n                range.start.column++;\n            } else {\n                range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n            }\n        } else {\n            var folds = this.getFoldsInRange(range);\n            if (tryToUnfold && folds.length) {\n                this.expandFolds(folds);\n                return;\n            } else if (folds.length == 1 ) {\n                fold = folds[0];\n            }\n        }\n\n        if (!fold)\n            fold = this.getFoldAt(range.start.row, range.start.column);\n\n        if (fold && fold.range.toString() == range.toString()) {\n            this.expandFold(fold);\n            return;\n        }\n\n        var placeholder = \"...\";\n        if (!range.isMultiLine()) {\n            placeholder = this.getTextRange(range);\n            if (placeholder.length < 4)\n                return;\n            placeholder = placeholder.trim().substring(0, 2) + \"..\";\n        }\n\n        this.addFold(placeholder, range);\n    };\n\n    this.getCommentFoldRange = function(row, column, dir) {\n        var iterator = new TokenIterator(this, row, column);\n        var token = iterator.getCurrentToken();\n        var type = token.type;\n        if (token && /^comment|string/.test(type)) {\n            type = type.match(/comment|string/)[0];\n            if (type == \"comment\")\n                type += \"|doc-start\";\n            var re = new RegExp(type);\n            var range = new Range();\n            if (dir != 1) {\n                do {\n                    token = iterator.stepBackward();\n                } while (token && re.test(token.type));\n                iterator.stepForward();\n            }\n            \n            range.start.row = iterator.getCurrentTokenRow();\n            range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n            iterator = new TokenIterator(this, row, column);\n            \n            if (dir != -1) {\n                var lastRow = -1;\n                do {\n                    token = iterator.stepForward();\n                    if (lastRow == -1) {\n                        var state = this.getState(iterator.$row);\n                        if (!re.test(state))\n                            lastRow = iterator.$row;\n                    } else if (iterator.$row > lastRow) {\n                        break;\n                    }\n                } while (token && re.test(token.type));\n                token = iterator.stepBackward();\n            } else\n                token = iterator.getCurrentToken();\n\n            range.end.row = iterator.getCurrentTokenRow();\n            range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n            return range;\n        }\n    };\n\n    this.foldAll = function(startRow, endRow, depth) {\n        if (depth == undefined)\n            depth = 100000; // JSON.stringify doesn't hanle Infinity\n        var foldWidgets = this.foldWidgets;\n        if (!foldWidgets)\n            return; // mode doesn't support folding\n        endRow = endRow || this.getLength();\n        startRow = startRow || 0;\n        for (var row = startRow; row < endRow; row++) {\n            if (foldWidgets[row] == null)\n                foldWidgets[row] = this.getFoldWidget(row);\n            if (foldWidgets[row] != \"start\")\n                continue;\n\n            var range = this.getFoldWidgetRange(row);\n            if (range && range.isMultiLine()\n                && range.end.row <= endRow\n                && range.start.row >= startRow\n            ) {\n                row = range.end.row;\n                try {\n                    var fold = this.addFold(\"...\", range);\n                    if (fold)\n                        fold.collapseChildren = depth;\n                } catch(e) {}\n            }\n        }\n    };\n    this.$foldStyles = {\n        \"manual\": 1,\n        \"markbegin\": 1,\n        \"markbeginend\": 1\n    };\n    this.$foldStyle = \"markbegin\";\n    this.setFoldStyle = function(style) {\n        if (!this.$foldStyles[style])\n            throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n        \n        if (this.$foldStyle == style)\n            return;\n\n        this.$foldStyle = style;\n        \n        if (style == \"manual\")\n            this.unfold();\n        var mode = this.$foldMode;\n        this.$setFolding(null);\n        this.$setFolding(mode);\n    };\n\n    this.$setFolding = function(foldMode) {\n        if (this.$foldMode == foldMode)\n            return;\n            \n        this.$foldMode = foldMode;\n        \n        this.off('change', this.$updateFoldWidgets);\n        this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n        this._signal(\"changeAnnotation\");\n        \n        if (!foldMode || this.$foldStyle == \"manual\") {\n            this.foldWidgets = null;\n            return;\n        }\n        \n        this.foldWidgets = [];\n        this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n        this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n        \n        this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n        this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n        this.on('change', this.$updateFoldWidgets);\n        this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n    };\n\n    this.getParentFoldRangeData = function (row, ignoreCurrent) {\n        var fw = this.foldWidgets;\n        if (!fw || (ignoreCurrent && fw[row]))\n            return {};\n\n        var i = row - 1, firstRange;\n        while (i >= 0) {\n            var c = fw[i];\n            if (c == null)\n                c = fw[i] = this.getFoldWidget(i);\n\n            if (c == \"start\") {\n                var range = this.getFoldWidgetRange(i);\n                if (!firstRange)\n                    firstRange = range;\n                if (range && range.end.row >= row)\n                    break;\n            }\n            i--;\n        }\n\n        return {\n            range: i !== -1 && range,\n            firstRange: firstRange\n        };\n    };\n\n    this.onFoldWidgetClick = function(row, e) {\n        e = e.domEvent;\n        var options = {\n            children: e.shiftKey,\n            all: e.ctrlKey || e.metaKey,\n            siblings: e.altKey\n        };\n        \n        var range = this.$toggleFoldWidget(row, options);\n        if (!range) {\n            var el = (e.target || e.srcElement);\n            if (el && /ace_fold-widget/.test(el.className))\n                el.className += \" ace_invalid\";\n        }\n    };\n    \n    this.$toggleFoldWidget = function(row, options) {\n        if (!this.getFoldWidget)\n            return;\n        var type = this.getFoldWidget(row);\n        var line = this.getLine(row);\n\n        var dir = type === \"end\" ? -1 : 1;\n        var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n        if (fold) {\n            if (options.children || options.all)\n                this.removeFold(fold);\n            else\n                this.expandFold(fold);\n            return fold;\n        }\n\n        var range = this.getFoldWidgetRange(row, true);\n        if (range && !range.isMultiLine()) {\n            fold = this.getFoldAt(range.start.row, range.start.column, 1);\n            if (fold && range.isEqual(fold.range)) {\n                this.removeFold(fold);\n                return fold;\n            }\n        }\n        \n        if (options.siblings) {\n            var data = this.getParentFoldRangeData(row);\n            if (data.range) {\n                var startRow = data.range.start.row + 1;\n                var endRow = data.range.end.row;\n            }\n            this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n        } else if (options.children) {\n            endRow = range ? range.end.row : this.getLength();\n            this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n        } else if (range) {\n            if (options.all) \n                range.collapseChildren = 10000;\n            this.addFold(\"...\", range);\n        }\n        \n        return range;\n    };\n    \n    \n    \n    this.toggleFoldWidget = function(toggleParent) {\n        var row = this.selection.getCursor().row;\n        row = this.getRowFoldStart(row);\n        var range = this.$toggleFoldWidget(row, {});\n        \n        if (range)\n            return;\n        var data = this.getParentFoldRangeData(row, true);\n        range = data.range || data.firstRange;\n        \n        if (range) {\n            row = range.start.row;\n            var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n            if (fold) {\n                this.removeFold(fold);\n            } else {\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n\n    this.updateFoldWidgets = function(delta) {\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n\n        if (len === 0) {\n            this.foldWidgets[firstRow] = null;\n        } else if (delta.action == 'remove') {\n            this.foldWidgets.splice(firstRow, len + 1, null);\n        } else {\n            var args = Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.foldWidgets.splice.apply(this.foldWidgets, args);\n        }\n    };\n    this.tokenizerUpdateFoldWidgets = function(e) {\n        var rows = e.data;\n        if (rows.first != rows.last) {\n            if (this.foldWidgets.length > rows.first)\n                this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n        }\n    };\n}\n\nexports.Folding = Folding;\n\n});\n\ndefine(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n    this.findMatchingBracket = function(position, chr) {\n        if (position.column == 0) return null;\n\n        var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n        if (charBeforeCursor == \"\") return null;\n\n        var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match)\n            return null;\n\n        if (match[1])\n            return this.$findClosingBracket(match[1], position);\n        else\n            return this.$findOpeningBracket(match[2], position);\n    };\n    \n    this.getBracketRange = function(pos) {\n        var line = this.getLine(pos.row);\n        var before = true, range;\n\n        var chr = line.charAt(pos.column-1);\n        var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match) {\n            chr = line.charAt(pos.column);\n            pos = {row: pos.row, column: pos.column + 1};\n            match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n            before = false;\n        }\n        if (!match)\n            return null;\n\n        if (match[1]) {\n            var bracketPos = this.$findClosingBracket(match[1], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(pos, bracketPos);\n            if (!before) {\n                range.end.column++;\n                range.start.column--;\n            }\n            range.cursor = range.end;\n        } else {\n            var bracketPos = this.$findOpeningBracket(match[2], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(bracketPos, pos);\n            if (!before) {\n                range.start.column++;\n                range.end.column--;\n            }\n            range.cursor = range.start;\n        }\n        \n        return range;\n    };\n\n    this.$brackets = {\n        \")\": \"(\",\n        \"(\": \")\",\n        \"]\": \"[\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"}\": \"{\",\n        \"<\": \">\",\n        \">\": \"<\"\n    };\n\n    this.$findOpeningBracket = function(bracket, position, typeRe) {\n        var openBracket = this.$brackets[bracket];\n        var depth = 1;\n\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        \n         if (!typeRe){\n            typeRe = new RegExp(\n                \"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n                    .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n                + \")+\"\n            );\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n        var value = token.value;\n        \n        while (true) {\n        \n            while (valueIndex >= 0) {\n                var chr = value.charAt(valueIndex);\n                if (chr == openBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return {row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn()};\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex -= 1;\n            }\n            do {\n                token = iterator.stepBackward();\n            } while (token && !typeRe.test(token.type));\n\n            if (token == null)\n                break;\n                \n            value = token.value;\n            valueIndex = value.length - 1;\n        }\n        \n        return null;\n    };\n\n    this.$findClosingBracket = function(bracket, position, typeRe) {\n        var closingBracket = this.$brackets[bracket];\n        var depth = 1;\n\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n\n        if (!typeRe){\n            typeRe = new RegExp(\n                \"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n                    .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n                + \")+\"\n            );\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n        while (true) {\n\n            var value = token.value;\n            var valueLength = value.length;\n            while (valueIndex < valueLength) {\n                var chr = value.charAt(valueIndex);\n                if (chr == closingBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return {row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn()};\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex += 1;\n            }\n            do {\n                token = iterator.stepForward();\n            } while (token && !typeRe.test(token.type));\n\n            if (token == null)\n                break;\n\n            valueIndex = 0;\n        }\n        \n        return null;\n    };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\ndefine(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n    this.$breakpoints = [];\n    this.$decorations = [];\n    this.$frontMarkers = {};\n    this.$backMarkers = {};\n    this.$markerId = 1;\n    this.$undoSelect = true;\n\n    this.$foldData = [];\n    this.id = \"session\" + (++EditSession.$uid);\n    this.$foldData.toString = function() {\n        return this.join(\"\\n\");\n    };\n    this.on(\"changeFold\", this.onChangeFold.bind(this));\n    this.$onChange = this.onChange.bind(this);\n\n    if (typeof text != \"object\" || !text.getLine)\n        text = new Document(text);\n\n    this.setDocument(text);\n    this.selection = new Selection(this);\n    this.$bidiHandler = new BidiHandler(this);\n\n    config.resetOptions(this);\n    this.setMode(mode);\n    config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setDocument = function(doc) {\n        if (this.doc)\n            this.doc.removeListener(\"change\", this.$onChange);\n\n        this.doc = doc;\n        doc.on(\"change\", this.$onChange);\n\n        if (this.bgTokenizer)\n            this.bgTokenizer.setDocument(this.getDocument());\n\n        this.resetCaches();\n    };\n    this.getDocument = function() {\n        return this.doc;\n    };\n    this.$resetRowCache = function(docRow) {\n        if (!docRow) {\n            this.$docRowCache = [];\n            this.$screenRowCache = [];\n            return;\n        }\n        var l = this.$docRowCache.length;\n        var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n        if (l > i) {\n            this.$docRowCache.splice(i, l);\n            this.$screenRowCache.splice(i, l);\n        }\n    };\n\n    this.$getRowCacheIndex = function(cacheArray, val) {\n        var low = 0;\n        var hi = cacheArray.length - 1;\n\n        while (low <= hi) {\n            var mid = (low + hi) >> 1;\n            var c = cacheArray[mid];\n\n            if (val > c)\n                low = mid + 1;\n            else if (val < c)\n                hi = mid - 1;\n            else\n                return mid;\n        }\n\n        return low -1;\n    };\n\n    this.resetCaches = function() {\n        this.$modified = true;\n        this.$wrapData = [];\n        this.$rowLengthCache = [];\n        this.$resetRowCache(0);\n        if (this.bgTokenizer)\n            this.bgTokenizer.start(0);\n    };\n\n    this.onChangeFold = function(e) {\n        var fold = e.data;\n        this.$resetRowCache(fold.start.row);\n    };\n\n    this.onChange = function(delta) {\n        this.$modified = true;\n        this.$bidiHandler.onChange(delta);\n        this.$resetRowCache(delta.start.row);\n\n        var removedFolds = this.$updateInternalDataOnChange(delta);\n        if (!this.$fromUndo && this.$undoManager) {\n            if (removedFolds && removedFolds.length) {\n                this.$undoManager.add({\n                    action: \"removeFolds\",\n                    folds:  removedFolds\n                }, this.mergeUndoDeltas);\n                this.mergeUndoDeltas = true;\n            }\n            this.$undoManager.add(delta, this.mergeUndoDeltas);\n            this.mergeUndoDeltas = true;\n            \n            this.$informUndoManager.schedule();\n        }\n\n        this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n        this._signal(\"change\", delta);\n    };\n    this.setValue = function(text) {\n        this.doc.setValue(text);\n        this.selection.moveTo(0, 0);\n\n        this.$resetRowCache(0);\n        this.setUndoManager(this.$undoManager);\n        this.getUndoManager().reset();\n    };\n    this.getValue =\n    this.toString = function() {\n        return this.doc.getValue();\n    };\n    this.getSelection = function() {\n        return this.selection;\n    };\n    this.getState = function(row) {\n        return this.bgTokenizer.getState(row);\n    };\n    this.getTokens = function(row) {\n        return this.bgTokenizer.getTokens(row);\n    };\n    this.getTokenAt = function(row, column) {\n        var tokens = this.bgTokenizer.getTokens(row);\n        var token, c = 0;\n        if (column == null) {\n            var i = tokens.length - 1;\n            c = this.getLine(row).length;\n        } else {\n            for (var i = 0; i < tokens.length; i++) {\n                c += tokens[i].value.length;\n                if (c >= column)\n                    break;\n            }\n        }\n        token = tokens[i];\n        if (!token)\n            return null;\n        token.index = i;\n        token.start = c - token.value.length;\n        return token;\n    };\n    this.setUndoManager = function(undoManager) {\n        this.$undoManager = undoManager;\n        \n        if (this.$informUndoManager)\n            this.$informUndoManager.cancel();\n        \n        if (undoManager) {\n            var self = this;\n            undoManager.addSession(this);\n            this.$syncInformUndoManager = function() {\n                self.$informUndoManager.cancel();\n                self.mergeUndoDeltas = false;\n            };\n            this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n        } else {\n            this.$syncInformUndoManager = function() {};\n        }\n    };\n    this.markUndoGroup = function() {\n        if (this.$syncInformUndoManager)\n            this.$syncInformUndoManager();\n    };\n    \n    this.$defaultUndoManager = {\n        undo: function() {},\n        redo: function() {},\n        reset: function() {},\n        add: function() {},\n        addSelection: function() {},\n        startNewGroup: function() {},\n        addSession: function() {}\n    };\n    this.getUndoManager = function() {\n        return this.$undoManager || this.$defaultUndoManager;\n    };\n    this.getTabString = function() {\n        if (this.getUseSoftTabs()) {\n            return lang.stringRepeat(\" \", this.getTabSize());\n        } else {\n            return \"\\t\";\n        }\n    };\n    this.setUseSoftTabs = function(val) {\n        this.setOption(\"useSoftTabs\", val);\n    };\n    this.getUseSoftTabs = function() {\n        return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n    };\n    this.setTabSize = function(tabSize) {\n        this.setOption(\"tabSize\", tabSize);\n    };\n    this.getTabSize = function() {\n        return this.$tabSize;\n    };\n    this.isTabStop = function(position) {\n        return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n    };\n    this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n        this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n    };\n    this.getNavigateWithinSoftTabs = function() {\n        return this.$navigateWithinSoftTabs;\n    };\n\n    this.$overwrite = false;\n    this.setOverwrite = function(overwrite) {\n        this.setOption(\"overwrite\", overwrite);\n    };\n    this.getOverwrite = function() {\n        return this.$overwrite;\n    };\n    this.toggleOverwrite = function() {\n        this.setOverwrite(!this.$overwrite);\n    };\n    this.addGutterDecoration = function(row, className) {\n        if (!this.$decorations[row])\n            this.$decorations[row] = \"\";\n        this.$decorations[row] += \" \" + className;\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.removeGutterDecoration = function(row, className) {\n        this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.getBreakpoints = function() {\n        return this.$breakpoints;\n    };\n    this.setBreakpoints = function(rows) {\n        this.$breakpoints = [];\n        for (var i=0; i<rows.length; i++) {\n            this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n        }\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.clearBreakpoints = function() {\n        this.$breakpoints = [];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.setBreakpoint = function(row, className) {\n        if (className === undefined)\n            className = \"ace_breakpoint\";\n        if (className)\n            this.$breakpoints[row] = className;\n        else\n            delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.clearBreakpoint = function(row) {\n        delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.addMarker = function(range, clazz, type, inFront) {\n        var id = this.$markerId++;\n\n        var marker = {\n            range : range,\n            type : type || \"line\",\n            renderer: typeof type == \"function\" ? type : null,\n            clazz : clazz,\n            inFront: !!inFront,\n            id: id\n        };\n\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        } else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n\n        return id;\n    };\n    this.addDynamicMarker = function(marker, inFront) {\n        if (!marker.update)\n            return;\n        var id = this.$markerId++;\n        marker.id = id;\n        marker.inFront = !!inFront;\n\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        } else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n\n        return marker;\n    };\n    this.removeMarker = function(markerId) {\n        var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n        if (!marker)\n            return;\n\n        var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n        delete (markers[markerId]);\n        this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n    };\n    this.getMarkers = function(inFront) {\n        return inFront ? this.$frontMarkers : this.$backMarkers;\n    };\n\n    this.highlight = function(re) {\n        if (!this.$searchHighlight) {\n            var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n            this.$searchHighlight = this.addDynamicMarker(highlight);\n        }\n        this.$searchHighlight.setRegexp(re);\n    };\n    this.highlightLines = function(startRow, endRow, clazz, inFront) {\n        if (typeof endRow != \"number\") {\n            clazz = endRow;\n            endRow = startRow;\n        }\n        if (!clazz)\n            clazz = \"ace_step\";\n\n        var range = new Range(startRow, 0, endRow, Infinity);\n        range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n        return range;\n    };\n    this.setAnnotations = function(annotations) {\n        this.$annotations = annotations;\n        this._signal(\"changeAnnotation\", {});\n    };\n    this.getAnnotations = function() {\n        return this.$annotations || [];\n    };\n    this.clearAnnotations = function() {\n        this.setAnnotations([]);\n    };\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r?\\n)/m);\n        if (match) {\n            this.$autoNewLine = match[1];\n        } else {\n            this.$autoNewLine = \"\\n\";\n        }\n    };\n    this.getWordRange = function(row, column) {\n        var line = this.getLine(row);\n\n        var inToken = false;\n        if (column > 0)\n            inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n        if (!inToken)\n            inToken = !!line.charAt(column).match(this.tokenRe);\n\n        if (inToken)\n            var re = this.tokenRe;\n        else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n            var re = /\\s/;\n        else\n            var re = this.nonTokenRe;\n\n        var start = column;\n        if (start > 0) {\n            do {\n                start--;\n            }\n            while (start >= 0 && line.charAt(start).match(re));\n            start++;\n        }\n\n        var end = column;\n        while (end < line.length && line.charAt(end).match(re)) {\n            end++;\n        }\n\n        return new Range(row, start, row, end);\n    };\n    this.getAWordRange = function(row, column) {\n        var wordRange = this.getWordRange(row, column);\n        var line = this.getLine(wordRange.end.row);\n\n        while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n            wordRange.end.column += 1;\n        }\n        return wordRange;\n    };\n    this.setNewLineMode = function(newLineMode) {\n        this.doc.setNewLineMode(newLineMode);\n    };\n    this.getNewLineMode = function() {\n        return this.doc.getNewLineMode();\n    };\n    this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n    this.getUseWorker = function() { return this.$useWorker; };\n    this.onReloadTokenizer = function(e) {\n        var rows = e.data;\n        this.bgTokenizer.start(rows.first);\n        this._signal(\"tokenizerUpdate\", e);\n    };\n\n    this.$modes = config.$modes;\n    this.$mode = null;\n    this.$modeId = null;\n    this.setMode = function(mode, cb) {\n        if (mode && typeof mode === \"object\") {\n            if (mode.getTokenizer)\n                return this.$onChangeMode(mode);\n            var options = mode;\n            var path = options.path;\n        } else {\n            path = mode || \"ace/mode/text\";\n        }\n        if (!this.$modes[\"ace/mode/text\"])\n            this.$modes[\"ace/mode/text\"] = new TextMode();\n\n        if (this.$modes[path] && !options) {\n            this.$onChangeMode(this.$modes[path]);\n            cb && cb();\n            return;\n        }\n        this.$modeId = path;\n        config.loadModule([\"mode\", path], function(m) {\n            if (this.$modeId !== path)\n                return cb && cb();\n            if (this.$modes[path] && !options) {\n                this.$onChangeMode(this.$modes[path]);\n            } else if (m && m.Mode) {\n                m = new m.Mode(options);\n                if (!options) {\n                    this.$modes[path] = m;\n                    m.$id = path;\n                }\n                this.$onChangeMode(m);\n            }\n            cb && cb();\n        }.bind(this));\n        if (!this.$mode)\n            this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n    };\n\n    this.$onChangeMode = function(mode, $isPlaceholder) {\n        if (!$isPlaceholder)\n            this.$modeId = mode.$id;\n        if (this.$mode === mode) \n            return;\n\n        this.$mode = mode;\n\n        this.$stopWorker();\n\n        if (this.$useWorker)\n            this.$startWorker();\n\n        var tokenizer = mode.getTokenizer();\n\n        if(tokenizer.addEventListener !== undefined) {\n            var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n            tokenizer.addEventListener(\"update\", onReloadTokenizer);\n        }\n\n        if (!this.bgTokenizer) {\n            this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n            var _self = this;\n            this.bgTokenizer.addEventListener(\"update\", function(e) {\n                _self._signal(\"tokenizerUpdate\", e);\n            });\n        } else {\n            this.bgTokenizer.setTokenizer(tokenizer);\n        }\n\n        this.bgTokenizer.setDocument(this.getDocument());\n\n        this.tokenRe = mode.tokenRe;\n        this.nonTokenRe = mode.nonTokenRe;\n\n        \n        if (!$isPlaceholder) {\n            if (mode.attachToSession)\n                mode.attachToSession(this);\n            this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n            this.$setFolding(mode.foldingRules);\n            this.bgTokenizer.start(0);\n            this._emit(\"changeMode\");\n        }\n    };\n\n    this.$stopWorker = function() {\n        if (this.$worker) {\n            this.$worker.terminate();\n            this.$worker = null;\n        }\n    };\n\n    this.$startWorker = function() {\n        try {\n            this.$worker = this.$mode.createWorker(this);\n        } catch (e) {\n            config.warn(\"Could not load worker\", e);\n            this.$worker = null;\n        }\n    };\n    this.getMode = function() {\n        return this.$mode;\n    };\n\n    this.$scrollTop = 0;\n    this.setScrollTop = function(scrollTop) {\n        if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n            return;\n\n        this.$scrollTop = scrollTop;\n        this._signal(\"changeScrollTop\", scrollTop);\n    };\n    this.getScrollTop = function() {\n        return this.$scrollTop;\n    };\n\n    this.$scrollLeft = 0;\n    this.setScrollLeft = function(scrollLeft) {\n        if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n            return;\n\n        this.$scrollLeft = scrollLeft;\n        this._signal(\"changeScrollLeft\", scrollLeft);\n    };\n    this.getScrollLeft = function() {\n        return this.$scrollLeft;\n    };\n    this.getScreenWidth = function() {\n        this.$computeWidth();\n        if (this.lineWidgets) \n            return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n        return this.screenWidth;\n    };\n    \n    this.getLineWidgetMaxWidth = function() {\n        if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n        var width = 0;\n        this.lineWidgets.forEach(function(w) {\n            if (w && w.screenWidth > width)\n                width = w.screenWidth;\n        });\n        return this.lineWidgetWidth = width;\n    };\n\n    this.$computeWidth = function(force) {\n        if (this.$modified || force) {\n            this.$modified = false;\n\n            if (this.$useWrapMode)\n                return this.screenWidth = this.$wrapLimit;\n\n            var lines = this.doc.getAllLines();\n            var cache = this.$rowLengthCache;\n            var longestScreenLine = 0;\n            var foldIndex = 0;\n            var foldLine = this.$foldData[foldIndex];\n            var foldStart = foldLine ? foldLine.start.row : Infinity;\n            var len = lines.length;\n\n            for (var i = 0; i < len; i++) {\n                if (i > foldStart) {\n                    i = foldLine.end.row + 1;\n                    if (i >= len)\n                        break;\n                    foldLine = this.$foldData[foldIndex++];\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n\n                if (cache[i] == null)\n                    cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n                if (cache[i] > longestScreenLine)\n                    longestScreenLine = cache[i];\n            }\n            this.screenWidth = longestScreenLine;\n        }\n    };\n    this.getLine = function(row) {\n        return this.doc.getLine(row);\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.doc.getLines(firstRow, lastRow);\n    };\n    this.getLength = function() {\n        return this.doc.getLength();\n    };\n    this.getTextRange = function(range) {\n        return this.doc.getTextRange(range || this.selection.getRange());\n    };\n    this.insert = function(position, text) {\n        return this.doc.insert(position, text);\n    };\n    this.remove = function(range) {\n        return this.doc.remove(range);\n    };\n    this.removeFullLines = function(firstRow, lastRow){\n        return this.doc.removeFullLines(firstRow, lastRow);\n    };\n    this.undoChanges = function(deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n\n        this.$fromUndo = true;\n        for (var i = deltas.length - 1; i != -1; i--) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.revertDelta(delta);\n            } else if (delta.folds) {\n                this.addFolds(delta.folds);\n            }\n        }\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionBefore)\n                this.selection.fromJSON(deltas.selectionBefore);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, true));\n        }\n        this.$fromUndo = false;\n    };\n    this.redoChanges = function(deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n\n        this.$fromUndo = true;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.applyDelta(delta);\n            }\n        }\n\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionAfter)\n                this.selection.fromJSON(deltas.selectionAfter);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, false));\n        }\n        this.$fromUndo = false;\n    };\n    this.setUndoSelect = function(enable) {\n        this.$undoSelect = enable;\n    };\n\n    this.$getUndoSelection = function(deltas, isUndo) {\n        function isInsert(delta) {\n            return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n        }\n\n        var range, point;\n        var lastDeltaIsInsert;\n\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (!delta.start) continue; // skip folds\n            if (!range) {\n                if (isInsert(delta)) {\n                    range = Range.fromPoints(delta.start, delta.end);\n                    lastDeltaIsInsert = true;\n                } else {\n                    range = Range.fromPoints(delta.start, delta.start);\n                    lastDeltaIsInsert = false;\n                }\n                continue;\n            }\n            \n            if (isInsert(delta)) {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range.setStart(point);\n                }\n                point = delta.end;\n                if (range.compare(point.row, point.column) == 1) {\n                    range.setEnd(point);\n                }\n                lastDeltaIsInsert = true;\n            } else {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n                lastDeltaIsInsert = false;\n            }\n        }\n        return range;\n    };\n    this.replace = function(range, text) {\n        return this.doc.replace(range, text);\n    };\n    this.moveText = function(fromRange, toPosition, copy) {\n        var text = this.getTextRange(fromRange);\n        var folds = this.getFoldsInRange(fromRange);\n\n        var toRange = Range.fromPoints(toPosition, toPosition);\n        if (!copy) {\n            this.remove(fromRange);\n            var rowDiff = fromRange.start.row - fromRange.end.row;\n            var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n            if (collDiff) {\n                if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n                    toRange.start.column += collDiff;\n                if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n                    toRange.end.column += collDiff;\n            }\n            if (rowDiff && toRange.start.row >= fromRange.end.row) {\n                toRange.start.row += rowDiff;\n                toRange.end.row += rowDiff;\n            }\n        }\n\n        toRange.end = this.insert(toRange.start, text);\n        if (folds.length) {\n            var oldStart = fromRange.start;\n            var newStart = toRange.start;\n            var rowDiff = newStart.row - oldStart.row;\n            var collDiff = newStart.column - oldStart.column;\n            this.addFolds(folds.map(function(x) {\n                x = x.clone();\n                if (x.start.row == oldStart.row)\n                    x.start.column += collDiff;\n                if (x.end.row == oldStart.row)\n                    x.end.column += collDiff;\n                x.start.row += rowDiff;\n                x.end.row += rowDiff;\n                return x;\n            }));\n        }\n\n        return toRange;\n    };\n    this.indentRows = function(startRow, endRow, indentString) {\n        indentString = indentString.replace(/\\t/g, this.getTabString());\n        for (var row=startRow; row<=endRow; row++)\n            this.doc.insertInLine({row: row, column: 0}, indentString);\n    };\n    this.outdentRows = function (range) {\n        var rowRange = range.collapseRows();\n        var deleteRange = new Range(0, 0, 0, 0);\n        var size = this.getTabSize();\n\n        for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n            var line = this.getLine(i);\n\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            for (var j = 0; j < size; ++j)\n                if (line.charAt(j) != ' ')\n                    break;\n            if (j < size && line.charAt(j) == '\\t') {\n                deleteRange.start.column = j;\n                deleteRange.end.column = j + 1;\n            } else {\n                deleteRange.start.column = 0;\n                deleteRange.end.column = j;\n            }\n            this.remove(deleteRange);\n        }\n    };\n\n    this.$moveLines = function(firstRow, lastRow, dir) {\n        firstRow = this.getRowFoldStart(firstRow);\n        lastRow = this.getRowFoldEnd(lastRow);\n        if (dir < 0) {\n            var row = this.getRowFoldStart(firstRow + dir);\n            if (row < 0) return 0;\n            var diff = row-firstRow;\n        } else if (dir > 0) {\n            var row = this.getRowFoldEnd(lastRow + dir);\n            if (row > this.doc.getLength()-1) return 0;\n            var diff = row-lastRow;\n        } else {\n            firstRow = this.$clipRowToDocument(firstRow);\n            lastRow = this.$clipRowToDocument(lastRow);\n            var diff = lastRow - firstRow + 1;\n        }\n\n        var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n        var folds = this.getFoldsInRange(range).map(function(x){\n            x = x.clone();\n            x.start.row += diff;\n            x.end.row += diff;\n            return x;\n        });\n        \n        var lines = dir == 0\n            ? this.doc.getLines(firstRow, lastRow)\n            : this.doc.removeFullLines(firstRow, lastRow);\n        this.doc.insertFullLines(firstRow+diff, lines);\n        folds.length && this.addFolds(folds);\n        return diff;\n    };\n    this.moveLinesUp = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, -1);\n    };\n    this.moveLinesDown = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 1);\n    };\n    this.duplicateLines = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 0);\n    };\n\n\n    this.$clipRowToDocument = function(row) {\n        return Math.max(0, Math.min(row, this.doc.getLength()-1));\n    };\n\n    this.$clipColumnToRow = function(row, column) {\n        if (column < 0)\n            return 0;\n        return Math.min(this.doc.getLine(row).length, column);\n    };\n\n\n    this.$clipPositionToDocument = function(row, column) {\n        column = Math.max(0, column);\n\n        if (row < 0) {\n            row = 0;\n            column = 0;\n        } else {\n            var len = this.doc.getLength();\n            if (row >= len) {\n                row = len - 1;\n                column = this.doc.getLine(len-1).length;\n            } else {\n                column = Math.min(this.doc.getLine(row).length, column);\n            }\n        }\n\n        return {\n            row: row,\n            column: column\n        };\n    };\n\n    this.$clipRangeToDocument = function(range) {\n        if (range.start.row < 0) {\n            range.start.row = 0;\n            range.start.column = 0;\n        } else {\n            range.start.column = this.$clipColumnToRow(\n                range.start.row,\n                range.start.column\n            );\n        }\n\n        var len = this.doc.getLength() - 1;\n        if (range.end.row > len) {\n            range.end.row = len;\n            range.end.column = this.doc.getLine(len).length;\n        } else {\n            range.end.column = this.$clipColumnToRow(\n                range.end.row,\n                range.end.column\n            );\n        }\n        return range;\n    };\n    this.$wrapLimit = 80;\n    this.$useWrapMode = false;\n    this.$wrapLimitRange = {\n        min : null,\n        max : null\n    };\n    this.setUseWrapMode = function(useWrapMode) {\n        if (useWrapMode != this.$useWrapMode) {\n            this.$useWrapMode = useWrapMode;\n            this.$modified = true;\n            this.$resetRowCache(0);\n            if (useWrapMode) {\n                var len = this.getLength();\n                this.$wrapData = Array(len);\n                this.$updateWrapData(0, len - 1);\n            }\n\n            this._signal(\"changeWrapMode\");\n        }\n    };\n    this.getUseWrapMode = function() {\n        return this.$useWrapMode;\n    };\n    this.setWrapLimitRange = function(min, max) {\n        if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n            this.$wrapLimitRange = { min: min, max: max };\n            this.$modified = true;\n            this.$bidiHandler.markAsDirty();\n            if (this.$useWrapMode)\n                this._signal(\"changeWrapMode\");\n        }\n    };\n    this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n        var limits = this.$wrapLimitRange;\n        if (limits.max < 0)\n            limits = {min: $printMargin, max: $printMargin};\n        var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n        if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n            this.$wrapLimit = wrapLimit;\n            this.$modified = true;\n            if (this.$useWrapMode) {\n                this.$updateWrapData(0, this.getLength() - 1);\n                this.$resetRowCache(0);\n                this._signal(\"changeWrapLimit\");\n            }\n            return true;\n        }\n        return false;\n    };\n\n    this.$constrainWrapLimit = function(wrapLimit, min, max) {\n        if (min)\n            wrapLimit = Math.max(min, wrapLimit);\n\n        if (max)\n            wrapLimit = Math.min(max, wrapLimit);\n\n        return wrapLimit;\n    };\n    this.getWrapLimit = function() {\n        return this.$wrapLimit;\n    };\n    this.setWrapLimit = function (limit) {\n        this.setWrapLimitRange(limit, limit);\n    };\n    this.getWrapLimitRange = function() {\n        return {\n            min : this.$wrapLimitRange.min,\n            max : this.$wrapLimitRange.max\n        };\n    };\n\n    this.$updateInternalDataOnChange = function(delta) {\n        var useWrapMode = this.$useWrapMode;\n        var action = delta.action;\n        var start = delta.start;\n        var end = delta.end;\n        var firstRow = start.row;\n        var lastRow = end.row;\n        var len = lastRow - firstRow;\n        var removedFolds = null;\n        \n        this.$updating = true;\n        if (len != 0) {\n            if (action === \"remove\") {\n                this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n                var foldLines = this.$foldData;\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n\n                var foldLine = this.getFoldLine(end.row);\n                var idx = 0;\n                if (foldLine) {\n                    foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n                    foldLine.shiftRow(-len);\n\n                    var foldLineBefore = this.getFoldLine(firstRow);\n                    if (foldLineBefore && foldLineBefore !== foldLine) {\n                        foldLineBefore.merge(foldLine);\n                        foldLine = foldLineBefore;\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= end.row) {\n                        foldLine.shiftRow(-len);\n                    }\n                }\n\n                lastRow = firstRow;\n            } else {\n                var args = Array(len);\n                args.unshift(firstRow, 0);\n                var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n                arr.splice.apply(arr, args);\n                var foldLines = this.$foldData;\n                var foldLine = this.getFoldLine(firstRow);\n                var idx = 0;\n                if (foldLine) {\n                    var cmp = foldLine.range.compareInside(start.row, start.column);\n                    if (cmp == 0) {\n                        foldLine = foldLine.split(start.row, start.column);\n                        if (foldLine) {\n                            foldLine.shiftRow(len);\n                            foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n                        }\n                    } else\n                    if (cmp == -1) {\n                        foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n                        foldLine.shiftRow(len);\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= firstRow) {\n                        foldLine.shiftRow(len);\n                    }\n                }\n            }\n        } else {\n            len = Math.abs(delta.start.column - delta.end.column);\n            if (action === \"remove\") {\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n\n                len = -len;\n            }\n            var foldLine = this.getFoldLine(firstRow);\n            if (foldLine) {\n                foldLine.addRemoveChars(firstRow, start.column, len);\n            }\n        }\n\n        if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n            console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n        }\n        this.$updating = false;\n\n        if (useWrapMode)\n            this.$updateWrapData(firstRow, lastRow);\n        else\n            this.$updateRowLengthCache(firstRow, lastRow);\n\n        return removedFolds;\n    };\n\n    this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n        this.$rowLengthCache[firstRow] = null;\n        this.$rowLengthCache[lastRow] = null;\n    };\n\n    this.$updateWrapData = function(firstRow, lastRow) {\n        var lines = this.doc.getAllLines();\n        var tabSize = this.getTabSize();\n        var wrapData = this.$wrapData;\n        var wrapLimit = this.$wrapLimit;\n        var tokens;\n        var foldLine;\n\n        var row = firstRow;\n        lastRow = Math.min(lastRow, lines.length - 1);\n        while (row <= lastRow) {\n            foldLine = this.getFoldLine(row, foldLine);\n            if (!foldLine) {\n                tokens = this.$getDisplayTokens(lines[row]);\n                wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row ++;\n            } else {\n                tokens = [];\n                foldLine.walk(function(placeholder, row, column, lastColumn) {\n                        var walkTokens;\n                        if (placeholder != null) {\n                            walkTokens = this.$getDisplayTokens(\n                                            placeholder, tokens.length);\n                            walkTokens[0] = PLACEHOLDER_START;\n                            for (var i = 1; i < walkTokens.length; i++) {\n                                walkTokens[i] = PLACEHOLDER_BODY;\n                            }\n                        } else {\n                            walkTokens = this.$getDisplayTokens(\n                                lines[row].substring(lastColumn, column),\n                                tokens.length);\n                        }\n                        tokens = tokens.concat(walkTokens);\n                    }.bind(this),\n                    foldLine.end.row,\n                    lines[foldLine.end.row].length + 1\n                );\n\n                wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row = foldLine.end.row + 1;\n            }\n        }\n    };\n    var CHAR = 1,\n        CHAR_EXT = 2,\n        PLACEHOLDER_START = 3,\n        PLACEHOLDER_BODY =  4,\n        PUNCTUATION = 9,\n        SPACE = 10,\n        TAB = 11,\n        TAB_SPACE = 12;\n\n\n    this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n        if (tokens.length == 0) {\n            return [];\n        }\n\n        var splits = [];\n        var displayLength = tokens.length;\n        var lastSplit = 0, lastDocSplit = 0;\n\n        var isCode = this.$wrapAsCode;\n\n        var indentedSoftWrap = this.$indentedSoftWrap;\n        var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n            || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n        function getWrapIndent() {\n            var indentation = 0;\n            if (maxIndent === 0)\n                return indentation;\n            if (indentedSoftWrap) {\n                for (var i = 0; i < tokens.length; i++) {\n                    var token = tokens[i];\n                    if (token == SPACE)\n                        indentation += 1;\n                    else if (token == TAB)\n                        indentation += tabSize;\n                    else if (token == TAB_SPACE)\n                        continue;\n                    else\n                        break;\n                }\n            }\n            if (isCode && indentedSoftWrap !== false)\n                indentation += tabSize;\n            return Math.min(indentation, maxIndent);\n        }\n        function addSplit(screenPos) {\n            var len = screenPos - lastSplit;\n            for (var i = lastSplit; i < screenPos; i++) {\n                var ch = tokens[i];\n                if (ch === 12 || ch === 2) len -= 1;\n            }\n\n            if (!splits.length) {\n                indent = getWrapIndent();\n                splits.indent = indent;\n            }\n            lastDocSplit += len;\n            splits.push(lastDocSplit);\n            lastSplit = screenPos;\n        }\n        var indent = 0;\n        while (displayLength - lastSplit > wrapLimit - indent) {\n            var split = lastSplit + wrapLimit - indent;\n            if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n                addSplit(split);\n                continue;\n            }\n            if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n                for (split; split != lastSplit - 1; split--) {\n                    if (tokens[split] == PLACEHOLDER_START) {\n                        break;\n                    }\n                }\n                if (split > lastSplit) {\n                    addSplit(split);\n                    continue;\n                }\n                split = lastSplit + wrapLimit;\n                for (split; split < tokens.length; split++) {\n                    if (tokens[split] != PLACEHOLDER_BODY) {\n                        break;\n                    }\n                }\n                if (split == tokens.length) {\n                    break;  // Breaks the while-loop.\n                }\n                addSplit(split);\n                continue;\n            }\n            var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n            while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                split --;\n            }\n            if (isCode) {\n                while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                    split --;\n                }\n                while (split > minSplit && tokens[split] == PUNCTUATION) {\n                    split --;\n                }\n            } else {\n                while (split > minSplit && tokens[split] < SPACE) {\n                    split --;\n                }\n            }\n            if (split > minSplit) {\n                addSplit(++split);\n                continue;\n            }\n            split = lastSplit + wrapLimit;\n            if (tokens[split] == CHAR_EXT)\n                split--;\n            addSplit(split - indent);\n        }\n        return splits;\n    };\n    this.$getDisplayTokens = function(str, offset) {\n        var arr = [];\n        var tabSize;\n        offset = offset || 0;\n\n        for (var i = 0; i < str.length; i++) {\n            var c = str.charCodeAt(i);\n            if (c == 9) {\n                tabSize = this.getScreenTabSize(arr.length + offset);\n                arr.push(TAB);\n                for (var n = 1; n < tabSize; n++) {\n                    arr.push(TAB_SPACE);\n                }\n            }\n            else if (c == 32) {\n                arr.push(SPACE);\n            } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n                arr.push(PUNCTUATION);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                arr.push(CHAR, CHAR_EXT);\n            } else {\n                arr.push(CHAR);\n            }\n        }\n        return arr;\n    };\n    this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n        if (maxScreenColumn == 0)\n            return [0, 0];\n        if (maxScreenColumn == null)\n            maxScreenColumn = Infinity;\n        screenColumn = screenColumn || 0;\n\n        var c, column;\n        for (column = 0; column < str.length; column++) {\n            c = str.charCodeAt(column);\n            if (c == 9) {\n                screenColumn += this.getScreenTabSize(screenColumn);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                screenColumn += 2;\n            } else {\n                screenColumn += 1;\n            }\n            if (screenColumn > maxScreenColumn) {\n                break;\n            }\n        }\n\n        return [screenColumn, column];\n    };\n\n    this.lineWidgets = null;\n    this.getRowLength = function(row) {\n        if (this.lineWidgets)\n            var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else \n            h = 0;\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1 + h;\n        } else {\n            return this.$wrapData[row].length + 1 + h;\n        }\n    };\n    this.getRowLineCount = function(row) {\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1;\n        } else {\n            return this.$wrapData[row].length + 1;\n        }\n    };\n\n    this.getRowWrapIndent = function(screenRow) {\n        if (this.$useWrapMode) {\n            var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n            var splits = this.$wrapData[pos.row];\n            return splits.length && splits[0] < pos.column ? splits.indent : 0;\n        } else {\n            return 0;\n        }\n    };\n    this.getScreenLastRowColumn = function(screenRow) {\n        var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n        return this.documentToScreenColumn(pos.row, pos.column);\n    };\n    this.getDocumentLastRowColumn = function(docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.getScreenLastRowColumn(screenRow);\n    };\n    this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n    };\n    this.getRowSplitData = function(row) {\n        if (!this.$useWrapMode) {\n            return undefined;\n        } else {\n            return this.$wrapData[row];\n        }\n    };\n    this.getScreenTabSize = function(screenColumn) {\n        return this.$tabSize - screenColumn % this.$tabSize;\n    };\n\n\n    this.screenToDocumentRow = function(screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).row;\n    };\n\n\n    this.screenToDocumentColumn = function(screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).column;\n    };\n    this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n        if (screenRow < 0)\n            return {row: 0, column: 0};\n\n        var line;\n        var docRow = 0;\n        var docColumn = 0;\n        var column;\n        var row = 0;\n        var rowLength = 0;\n\n        var rowCache = this.$screenRowCache;\n        var i = this.$getRowCacheIndex(rowCache, screenRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var docRow = this.$docRowCache[i];\n            var doCache = screenRow > rowCache[l - 1];\n        } else {\n            var doCache = !l;\n        }\n\n        var maxRow = this.getLength() - 1;\n        var foldLine = this.getNextFoldLine(docRow);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (row <= screenRow) {\n            rowLength = this.getRowLength(docRow);\n            if (row + rowLength > screenRow || docRow >= maxRow) {\n                break;\n            } else {\n                row += rowLength;\n                docRow++;\n                if (docRow > foldStart) {\n                    docRow = foldLine.end.row+1;\n                    foldLine = this.getNextFoldLine(docRow, foldLine);\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n            }\n\n            if (doCache) {\n                this.$docRowCache.push(docRow);\n                this.$screenRowCache.push(row);\n            }\n        }\n\n        if (foldLine && foldLine.start.row <= docRow) {\n            line = this.getFoldDisplayLine(foldLine);\n            docRow = foldLine.start.row;\n        } else if (row + rowLength <= screenRow || docRow > maxRow) {\n            return {\n                row: maxRow,\n                column: this.getLine(maxRow).length\n            };\n        } else {\n            line = this.getLine(docRow);\n            foldLine = null;\n        }\n        var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n        if (this.$useWrapMode) {\n            var splits = this.$wrapData[docRow];\n            if (splits) {\n                column = splits[splitIndex];\n                if(splitIndex > 0 && splits.length) {\n                    wrapIndent = splits.indent;\n                    docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n                    line = line.substring(docColumn);\n                }\n            }\n        }\n\n        if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n            screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n        docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n        if (this.$useWrapMode && docColumn >= column)\n            docColumn = column - 1;\n\n        if (foldLine)\n            return foldLine.idxToPosition(docColumn);\n\n        return {row: docRow, column: docColumn};\n    };\n    this.documentToScreenPosition = function(docRow, docColumn) {\n        if (typeof docColumn === \"undefined\")\n            var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n        else\n            pos = this.$clipPositionToDocument(docRow, docColumn);\n\n        docRow = pos.row;\n        docColumn = pos.column;\n\n        var screenRow = 0;\n        var foldStartRow = null;\n        var fold = null;\n        fold = this.getFoldAt(docRow, docColumn, 1);\n        if (fold) {\n            docRow = fold.start.row;\n            docColumn = fold.start.column;\n        }\n\n        var rowEnd, row = 0;\n\n\n        var rowCache = this.$docRowCache;\n        var i = this.$getRowCacheIndex(rowCache, docRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var screenRow = this.$screenRowCache[i];\n            var doCache = docRow > rowCache[l - 1];\n        } else {\n            var doCache = !l;\n        }\n\n        var foldLine = this.getNextFoldLine(row);\n        var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n        while (row < docRow) {\n            if (row >= foldStart) {\n                rowEnd = foldLine.end.row + 1;\n                if (rowEnd > docRow)\n                    break;\n                foldLine = this.getNextFoldLine(rowEnd, foldLine);\n                foldStart = foldLine ?foldLine.start.row :Infinity;\n            }\n            else {\n                rowEnd = row + 1;\n            }\n\n            screenRow += this.getRowLength(row);\n            row = rowEnd;\n\n            if (doCache) {\n                this.$docRowCache.push(row);\n                this.$screenRowCache.push(screenRow);\n            }\n        }\n        var textLine = \"\";\n        if (foldLine && row >= foldStart) {\n            textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n            foldStartRow = foldLine.start.row;\n        } else {\n            textLine = this.getLine(docRow).substring(0, docColumn);\n            foldStartRow = docRow;\n        }\n        var wrapIndent = 0;\n        if (this.$useWrapMode) {\n            var wrapRow = this.$wrapData[foldStartRow];\n            if (wrapRow) {\n                var screenRowOffset = 0;\n                while (textLine.length >= wrapRow[screenRowOffset]) {\n                    screenRow ++;\n                    screenRowOffset++;\n                }\n                textLine = textLine.substring(\n                    wrapRow[screenRowOffset - 1] || 0, textLine.length\n                );\n                wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n            }\n        }\n\n        return {\n            row: screenRow,\n            column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n        };\n    };\n    this.documentToScreenColumn = function(row, docColumn) {\n        return this.documentToScreenPosition(row, docColumn).column;\n    };\n    this.documentToScreenRow = function(docRow, docColumn) {\n        return this.documentToScreenPosition(docRow, docColumn).row;\n    };\n    this.getScreenLength = function() {\n        var screenRows = 0;\n        var fold = null;\n        if (!this.$useWrapMode) {\n            screenRows = this.getLength();\n            var foldData = this.$foldData;\n            for (var i = 0; i < foldData.length; i++) {\n                fold = foldData[i];\n                screenRows -= fold.end.row - fold.start.row;\n            }\n        } else {\n            var lastRow = this.$wrapData.length;\n            var row = 0, i = 0;\n            var fold = this.$foldData[i++];\n            var foldStart = fold ? fold.start.row :Infinity;\n\n            while (row < lastRow) {\n                var splits = this.$wrapData[row];\n                screenRows += splits ? splits.length + 1 : 1;\n                row ++;\n                if (row > foldStart) {\n                    row = fold.end.row+1;\n                    fold = this.$foldData[i++];\n                    foldStart = fold ?fold.start.row :Infinity;\n                }\n            }\n        }\n        if (this.lineWidgets)\n            screenRows += this.$getWidgetScreenLength();\n\n        return screenRows;\n    };\n    this.$setFontMetrics = function(fm) {\n        if (!this.$enableVarChar) return;\n        this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n            if (maxScreenColumn === 0)\n                return [0, 0];\n            if (!maxScreenColumn)\n                maxScreenColumn = Infinity;\n            screenColumn = screenColumn || 0;\n            \n            var c, column;\n            for (column = 0; column < str.length; column++) {\n                c = str.charAt(column);\n                if (c === \"\\t\") {\n                    screenColumn += this.getScreenTabSize(screenColumn);\n                } else {\n                    screenColumn += fm.getCharacterWidth(c);\n                }\n                if (screenColumn > maxScreenColumn) {\n                    break;\n                }\n            }\n            \n            return [screenColumn, column];\n        };\n    };\n    \n    this.destroy = function() {\n        if (this.bgTokenizer) {\n            this.bgTokenizer.setDocument(null);\n            this.bgTokenizer = null;\n        }\n        this.$stopWorker();\n    };\n\n    this.isFullWidth = isFullWidth;\n    function isFullWidth(c) {\n        if (c < 0x1100)\n            return false;\n        return c >= 0x1100 && c <= 0x115F ||\n               c >= 0x11A3 && c <= 0x11A7 ||\n               c >= 0x11FA && c <= 0x11FF ||\n               c >= 0x2329 && c <= 0x232A ||\n               c >= 0x2E80 && c <= 0x2E99 ||\n               c >= 0x2E9B && c <= 0x2EF3 ||\n               c >= 0x2F00 && c <= 0x2FD5 ||\n               c >= 0x2FF0 && c <= 0x2FFB ||\n               c >= 0x3000 && c <= 0x303E ||\n               c >= 0x3041 && c <= 0x3096 ||\n               c >= 0x3099 && c <= 0x30FF ||\n               c >= 0x3105 && c <= 0x312D ||\n               c >= 0x3131 && c <= 0x318E ||\n               c >= 0x3190 && c <= 0x31BA ||\n               c >= 0x31C0 && c <= 0x31E3 ||\n               c >= 0x31F0 && c <= 0x321E ||\n               c >= 0x3220 && c <= 0x3247 ||\n               c >= 0x3250 && c <= 0x32FE ||\n               c >= 0x3300 && c <= 0x4DBF ||\n               c >= 0x4E00 && c <= 0xA48C ||\n               c >= 0xA490 && c <= 0xA4C6 ||\n               c >= 0xA960 && c <= 0xA97C ||\n               c >= 0xAC00 && c <= 0xD7A3 ||\n               c >= 0xD7B0 && c <= 0xD7C6 ||\n               c >= 0xD7CB && c <= 0xD7FB ||\n               c >= 0xF900 && c <= 0xFAFF ||\n               c >= 0xFE10 && c <= 0xFE19 ||\n               c >= 0xFE30 && c <= 0xFE52 ||\n               c >= 0xFE54 && c <= 0xFE66 ||\n               c >= 0xFE68 && c <= 0xFE6B ||\n               c >= 0xFF01 && c <= 0xFF60 ||\n               c >= 0xFFE0 && c <= 0xFFE6;\n    }\n\n}).call(EditSession.prototype);\n\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n    wrap: {\n        set: function(value) {\n            if (!value || value == \"off\")\n                value = false;\n            else if (value == \"free\")\n                value = true;\n            else if (value == \"printMargin\")\n                value = -1;\n            else if (typeof value == \"string\")\n                value = parseInt(value, 10) || false;\n\n            if (this.$wrap == value)\n                return;\n            this.$wrap = value;\n            if (!value) {\n                this.setUseWrapMode(false);\n            } else {\n                var col = typeof value == \"number\" ? value : null;\n                this.setWrapLimitRange(col, col);\n                this.setUseWrapMode(true);\n            }\n        },\n        get: function() {\n            if (this.getUseWrapMode()) {\n                if (this.$wrap == -1)\n                    return \"printMargin\";\n                if (!this.getWrapLimitRange().min)\n                    return \"free\";\n                return this.$wrap;\n            }\n            return \"off\";\n        },\n        handlesSet: true\n    },    \n    wrapMethod: {\n        set: function(val) {\n            val = val == \"auto\"\n                ? this.$mode.type != \"text\"\n                : val != \"text\";\n            if (val != this.$wrapAsCode) {\n                this.$wrapAsCode = val;\n                if (this.$useWrapMode) {\n                    this.$useWrapMode = false;\n                    this.setUseWrapMode(true);\n                }\n            }\n        },\n        initialValue: \"auto\"\n    },\n    indentedSoftWrap: {\n        set: function() {\n            if (this.$useWrapMode) {\n                this.$useWrapMode = false;\n                this.setUseWrapMode(true);\n            }\n        },\n        initialValue: true \n    },\n    firstLineNumber: {\n        set: function() {this._signal(\"changeBreakpoint\");},\n        initialValue: 1\n    },\n    useWorker: {\n        set: function(useWorker) {\n            this.$useWorker = useWorker;\n\n            this.$stopWorker();\n            if (useWorker)\n                this.$startWorker();\n        },\n        initialValue: true\n    },\n    useSoftTabs: {initialValue: true},\n    tabSize: {\n        set: function(tabSize) {\n            tabSize = parseInt(tabSize);\n            if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n\n            this.$modified = true;\n            this.$rowLengthCache = [];\n            this.$tabSize = tabSize;\n            this._signal(\"changeTabSize\");\n        },\n        initialValue: 4,\n        handlesSet: true\n    },\n    navigateWithinSoftTabs: {initialValue: false},\n    foldStyle: {\n        set: function(val) {this.setFoldStyle(val);},\n        handlesSet: true\n    },\n    overwrite: {\n        set: function(val) {this._signal(\"changeOverwrite\");},\n        initialValue: false\n    },\n    newLineMode: {\n        set: function(val) {this.doc.setNewLineMode(val);},\n        get: function() {return this.doc.getNewLineMode();},\n        handlesSet: true\n    },\n    mode: {\n        set: function(val) { this.setMode(val); },\n        get: function() { return this.$modeId; },\n        handlesSet: true\n    }\n});\n\nexports.EditSession = EditSession;\n});\n\ndefine(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar Search = function() {\n    this.$options = {};\n};\n\n(function() {\n    this.set = function(options) {\n        oop.mixin(this.$options, options);\n        return this;\n    };\n    this.getOptions = function() {\n        return lang.copyObject(this.$options);\n    };\n    this.setOptions = function(options) {\n        this.$options = options;\n    };\n    this.find = function(session) {\n        var options = this.$options;\n        var iterator = this.$matchIterator(session, options);\n        if (!iterator)\n            return false;\n\n        var firstRange = null;\n        iterator.forEach(function(sr, sc, er, ec) {\n            firstRange = new Range(sr, sc, er, ec);\n            if (sc == ec && options.start && options.start.start\n                && options.skipCurrent != false && firstRange.isEqual(options.start)\n            ) {\n                firstRange = null;\n                return false;\n            }\n            \n            return true;\n        });\n\n        return firstRange;\n    };\n    this.findAll = function(session) {\n        var options = this.$options;\n        if (!options.needle)\n            return [];\n        this.$assembleRegExp(options);\n\n        var range = options.range;\n        var lines = range\n            ? session.getLines(range.start.row, range.end.row)\n            : session.doc.getAllLines();\n\n        var ranges = [];\n        var re = options.re;\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var maxRow = lines.length - len;\n            var prevRange;\n            outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n                for (var j = 0; j < len; j++)\n                    if (lines[row + j].search(re[j]) == -1)\n                        continue outer;\n                \n                var startLine = lines[row];\n                var line = lines[row + len - 1];\n                var startIndex = startLine.length - startLine.match(re[0])[0].length;\n                var endIndex = line.match(re[len - 1])[0].length;\n                \n                if (prevRange && prevRange.end.row === row &&\n                    prevRange.end.column > startIndex\n                ) {\n                    continue;\n                }\n                ranges.push(prevRange = new Range(\n                    row, startIndex, row + len - 1, endIndex\n                ));\n                if (len > 2)\n                    row = row + len - 2;\n            }\n        } else {\n            for (var i = 0; i < lines.length; i++) {\n                var matches = lang.getMatchOffsets(lines[i], re);\n                for (var j = 0; j < matches.length; j++) {\n                    var match = matches[j];\n                    ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n                }\n            }\n        }\n\n        if (range) {\n            var startColumn = range.start.column;\n            var endColumn = range.start.column;\n            var i = 0, j = ranges.length - 1;\n            while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n                i++;\n\n            while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n                j--;\n            \n            ranges = ranges.slice(i, j + 1);\n            for (i = 0, j = ranges.length; i < j; i++) {\n                ranges[i].start.row += range.start.row;\n                ranges[i].end.row += range.start.row;\n            }\n        }\n\n        return ranges;\n    };\n    this.replace = function(input, replacement) {\n        var options = this.$options;\n\n        var re = this.$assembleRegExp(options);\n        if (options.$isMultiLine)\n            return replacement;\n\n        if (!re)\n            return;\n\n        var match = re.exec(input);\n        if (!match || match[0].length != input.length)\n            return null;\n        \n        replacement = input.replace(re, replacement);\n        if (options.preserveCase) {\n            replacement = replacement.split(\"\");\n            for (var i = Math.min(input.length, input.length); i--; ) {\n                var ch = input[i];\n                if (ch && ch.toLowerCase() != ch)\n                    replacement[i] = replacement[i].toUpperCase();\n                else\n                    replacement[i] = replacement[i].toLowerCase();\n            }\n            replacement = replacement.join(\"\");\n        }\n        \n        return replacement;\n    };\n\n    this.$assembleRegExp = function(options, $disableFakeMultiline) {\n        if (options.needle instanceof RegExp)\n            return options.re = options.needle;\n\n        var needle = options.needle;\n\n        if (!options.needle)\n            return options.re = false;\n\n        if (!options.regExp)\n            needle = lang.escapeRegExp(needle);\n\n        if (options.wholeWord)\n            needle = addWordBoundary(needle, options);\n\n        var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n        options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n        if (options.$isMultiLine)\n            return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n        try {\n            var re = new RegExp(needle, modifier);\n        } catch(e) {\n            re = false;\n        }\n        return options.re = re;\n    };\n\n    this.$assembleMultilineRegExp = function(needle, modifier) {\n        var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n        var re = [];\n        for (var i = 0; i < parts.length; i++) try {\n            re.push(new RegExp(parts[i], modifier));\n        } catch(e) {\n            return false;\n        }\n        return re;\n    };\n\n    this.$matchIterator = function(session, options) {\n        var re = this.$assembleRegExp(options);\n        if (!re)\n            return false;\n        var backwards = options.backwards == true;\n        var skipCurrent = options.skipCurrent != false;\n\n        var range = options.range;\n        var start = options.start;\n        if (!start)\n            start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n         \n        if (start.start)\n            start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n        var firstRow = range ? range.start.row : 0;\n        var lastRow = range ? range.end.row : session.getLength() - 1;\n        \n        if (backwards) {\n            var forEach = function(callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row--; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n            };\n        }\n        else {\n            var forEach = function(callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row = row + 1; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n            };\n        }\n        \n        if (options.$isMultiLine) {\n            var len = re.length;\n            var forEachInLine = function(row, offset, callback) {\n                var startRow = backwards ? row - len + 1 : row;\n                if (startRow < 0) return;\n                var line = session.getLine(startRow);\n                var startIndex = line.search(re[0]);\n                if (!backwards && startIndex < offset || startIndex === -1) return;\n                for (var i = 1; i < len; i++) {\n                    line = session.getLine(startRow + i);\n                    if (line.search(re[i]) == -1)\n                        return;\n                }\n                var endIndex = line.match(re[len - 1])[0].length;\n                if (backwards && endIndex > offset) return;\n                if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n                    return true;\n            };\n        }\n        else if (backwards) {\n            var forEachInLine = function(row, endIndex, callback) {\n                var line = session.getLine(row);\n                var matches = [];\n                var m, last = 0;\n                re.lastIndex = 0;\n                while((m = re.exec(line))) {\n                    var length = m[0].length;\n                    last = m.index;\n                    if (!length) {\n                        if (last >= line.length) break;\n                        re.lastIndex = last += 1;\n                    }\n                    if (m.index + length > endIndex)\n                        break;\n                    matches.push(m.index, length);\n                }\n                for (var i = matches.length - 1; i >= 0; i -= 2) {\n                    var column = matches[i - 1];\n                    var length = matches[i];\n                    if (callback(row, column, row, column + length))\n                        return true;\n                }\n            };\n        }\n        else {\n            var forEachInLine = function(row, startIndex, callback) {\n                var line = session.getLine(row);\n                var last;\n                var m;\n                re.lastIndex = startIndex;\n                while((m = re.exec(line))) {\n                    var length = m[0].length;\n                    last = m.index;\n                    if (callback(row, last, row,last + length))\n                        return true;\n                    if (!length) {\n                        re.lastIndex = last += 1;\n                        if (last >= line.length) return false;\n                    }\n                }\n            };\n        }\n        return {forEach: forEach};\n    };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n    function wordBoundary(c) {\n        if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n        return \"\";\n    }\n    return wordBoundary(needle[0]) + needle\n        + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\ndefine(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n    this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n    this.commands = {};\n    this.commandKeyBinding = {};\n    this.addCommands(config);\n    this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n    HashHandler.call(this, config, platform);\n    this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n    \n\n    this.addCommand = function(command) {\n        if (this.commands[command.name])\n            this.removeCommand(command);\n\n        this.commands[command.name] = command;\n\n        if (command.bindKey)\n            this._buildKeyHash(command);\n    };\n\n    this.removeCommand = function(command, keepCommand) {\n        var name = command && (typeof command === 'string' ? command : command.name);\n        command = this.commands[name];\n        if (!keepCommand)\n            delete this.commands[name];\n        var ckb = this.commandKeyBinding;\n        for (var keyId in ckb) {\n            var cmdGroup = ckb[keyId];\n            if (cmdGroup == command) {\n                delete ckb[keyId];\n            } else if (Array.isArray(cmdGroup)) {\n                var i = cmdGroup.indexOf(command);\n                if (i != -1) {\n                    cmdGroup.splice(i, 1);\n                    if (cmdGroup.length == 1)\n                        ckb[keyId] = cmdGroup[0];\n                }\n            }\n        }\n    };\n\n    this.bindKey = function(key, command, position) {\n        if (typeof key == \"object\" && key) {\n            if (position == undefined)\n                position = key.position;\n            key = key[this.platform];\n        }\n        if (!key)\n            return;\n        if (typeof command == \"function\")\n            return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n        \n        key.split(\"|\").forEach(function(keyPart) {\n            var chain = \"\";\n            if (keyPart.indexOf(\" \") != -1) {\n                var parts = keyPart.split(/\\s+/);\n                keyPart = parts.pop();\n                parts.forEach(function(keyPart) {\n                    var binding = this.parseKeys(keyPart);\n                    var id = KEY_MODS[binding.hashId] + binding.key;\n                    chain += (chain ? \" \" : \"\") + id;\n                    this._addCommandToBinding(chain, \"chainKeys\");\n                }, this);\n                chain += \" \";\n            }\n            var binding = this.parseKeys(keyPart);\n            var id = KEY_MODS[binding.hashId] + binding.key;\n            this._addCommandToBinding(chain + id, command, position);\n        }, this);\n    };\n    \n    function getPosition(command) {\n        return typeof command == \"object\" && command.bindKey\n            && command.bindKey.position \n            || (command.isDefault ? -100 : 0);\n    }\n    this._addCommandToBinding = function(keyId, command, position) {\n        var ckb = this.commandKeyBinding, i;\n        if (!command) {\n            delete ckb[keyId];\n        } else if (!ckb[keyId] || this.$singleCommand) {\n            ckb[keyId] = command;\n        } else {\n            if (!Array.isArray(ckb[keyId])) {\n                ckb[keyId] = [ckb[keyId]];\n            } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n                ckb[keyId].splice(i, 1);\n            }\n            \n            if (typeof position != \"number\") {\n                position = getPosition(command);\n            }\n\n            var commands = ckb[keyId];\n            for (i = 0; i < commands.length; i++) {\n                var other = commands[i];\n                var otherPos = getPosition(other);\n                if (otherPos > position)\n                    break;\n            }\n            commands.splice(i, 0, command);\n        }\n    };\n\n    this.addCommands = function(commands) {\n        commands && Object.keys(commands).forEach(function(name) {\n            var command = commands[name];\n            if (!command)\n                return;\n            \n            if (typeof command === \"string\")\n                return this.bindKey(command, name);\n\n            if (typeof command === \"function\")\n                command = { exec: command };\n\n            if (typeof command !== \"object\")\n                return;\n\n            if (!command.name)\n                command.name = name;\n\n            this.addCommand(command);\n        }, this);\n    };\n\n    this.removeCommands = function(commands) {\n        Object.keys(commands).forEach(function(name) {\n            this.removeCommand(commands[name]);\n        }, this);\n    };\n\n    this.bindKeys = function(keyList) {\n        Object.keys(keyList).forEach(function(key) {\n            this.bindKey(key, keyList[key]);\n        }, this);\n    };\n\n    this._buildKeyHash = function(command) {\n        this.bindKey(command.bindKey, command);\n    };\n    this.parseKeys = function(keys) {\n        var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n        var key = parts.pop();\n\n        var keyCode = keyUtil[key];\n        if (keyUtil.FUNCTION_KEYS[keyCode])\n            key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n        else if (!parts.length)\n            return {key: key, hashId: -1};\n        else if (parts.length == 1 && parts[0] == \"shift\")\n            return {key: key.toUpperCase(), hashId: -1};\n\n        var hashId = 0;\n        for (var i = parts.length; i--;) {\n            var modifier = keyUtil.KEY_MODS[parts[i]];\n            if (modifier == null) {\n                if (typeof console != \"undefined\")\n                    console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n                return false;\n            }\n            hashId |= modifier;\n        }\n        return {key: key, hashId: hashId};\n    };\n\n    this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n        var key = KEY_MODS[hashId] + keyString;\n        return this.commandKeyBinding[key];\n    };\n\n    this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n        if (keyCode < 0) return;\n        var key = KEY_MODS[hashId] + keyString;\n        var command = this.commandKeyBinding[key];\n        if (data.$keyChain) {\n            data.$keyChain += \" \" + key;\n            command = this.commandKeyBinding[data.$keyChain] || command;\n        }\n        \n        if (command) {\n            if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n                data.$keyChain = data.$keyChain || key;\n                return {command: \"null\"};\n            }\n        }\n        \n        if (data.$keyChain) {\n            if ((!hashId || hashId == 4) && keyString.length == 1)\n                data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n            else if (hashId == -1 || keyCode > 0)\n                data.$keyChain = \"\"; // reset keyChain\n        }\n        return {command: command};\n    };\n    \n    this.getStatusText = function(editor, data) {\n        return data.$keyChain || \"\";\n    };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\ndefine(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n    MultiHashHandler.call(this, commands, platform);\n    this.byName = this.commands;\n    this.setDefaultHandler(\"exec\", function(e) {\n        return e.command.exec(e.editor, e.args || {});\n    });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.exec = function(command, editor, args) {\n        if (Array.isArray(command)) {\n            for (var i = command.length; i--; ) {\n                if (this.exec(command[i], editor, args)) return true;\n            }\n            return false;\n        }\n\n        if (typeof command === \"string\")\n            command = this.commands[command];\n\n        if (!command)\n            return false;\n\n        if (editor && editor.$readOnly && !command.readOnly)\n            return false;\n\n        if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n            return false;\n\n        var e = {editor: editor, command: command, args: args};\n        e.returnValue = this._emit(\"exec\", e);\n        this._signal(\"afterExec\", e);\n\n        return e.returnValue === false ? false : true;\n    };\n\n    this.toggleRecording = function(editor) {\n        if (this.$inReplay)\n            return;\n\n        editor && editor._emit(\"changeStatus\");\n        if (this.recording) {\n            this.macro.pop();\n            this.removeEventListener(\"exec\", this.$addCommandToMacro);\n\n            if (!this.macro.length)\n                this.macro = this.oldMacro;\n\n            return this.recording = false;\n        }\n        if (!this.$addCommandToMacro) {\n            this.$addCommandToMacro = function(e) {\n                this.macro.push([e.command, e.args]);\n            }.bind(this);\n        }\n\n        this.oldMacro = this.macro;\n        this.macro = [];\n        this.on(\"exec\", this.$addCommandToMacro);\n        return this.recording = true;\n    };\n\n    this.replay = function(editor) {\n        if (this.$inReplay || !this.macro)\n            return;\n\n        if (this.recording)\n            return this.toggleRecording(editor);\n\n        try {\n            this.$inReplay = true;\n            this.macro.forEach(function(x) {\n                if (typeof x == \"string\")\n                    this.exec(x, editor);\n                else\n                    this.exec(x[0], editor, x[1]);\n            }, this);\n        } finally {\n            this.$inReplay = false;\n        }\n    };\n\n    this.trimMacro = function(m) {\n        return m.map(function(x){\n            if (typeof x[0] != \"string\")\n                x[0] = x[0].name;\n            if (!x[1])\n                x = x[0];\n            return x;\n        });\n    };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\ndefine(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n    return {win: win, mac: mac};\n}\nexports.commands = [{\n    name: \"showSettingsMenu\",\n    bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/settings_menu\", function(module) {\n            module.init(editor);\n            editor.showSettingsMenu();\n        });\n    },\n    readOnly: true\n}, {\n    name: \"goToNextError\",\n    bindKey: bindKey(\"Alt-E\", \"F4\"),\n    exec: function(editor) {\n        config.loadModule(\"./ext/error_marker\", function(module) {\n            module.showErrorMarker(editor, 1);\n        });\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"goToPreviousError\",\n    bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n    exec: function(editor) {\n        config.loadModule(\"./ext/error_marker\", function(module) {\n            module.showErrorMarker(editor, -1);\n        });\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"selectall\",\n    bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n    exec: function(editor) { editor.selectAll(); },\n    readOnly: true\n}, {\n    name: \"centerselection\",\n    bindKey: bindKey(null, \"Ctrl-L\"),\n    exec: function(editor) { editor.centerSelection(); },\n    readOnly: true\n}, {\n    name: \"gotoline\",\n    bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n    exec: function(editor, line) {\n        if (typeof line !== \"number\")\n            line = parseInt(prompt(\"Enter line number:\"), 10);\n        if (!isNaN(line)) {\n            editor.gotoLine(line);\n        }\n    },\n    readOnly: true\n}, {\n    name: \"fold\",\n    bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n    exec: function(editor) { editor.session.toggleFold(false); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"unfold\",\n    bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n    exec: function(editor) { editor.session.toggleFold(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"toggleFoldWidget\",\n    bindKey: bindKey(\"F2\", \"F2\"),\n    exec: function(editor) { editor.session.toggleFoldWidget(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"toggleParentFoldWidget\",\n    bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n    exec: function(editor) { editor.session.toggleFoldWidget(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"foldall\",\n    bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n    exec: function(editor) { editor.session.foldAll(); },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"foldOther\",\n    bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n    exec: function(editor) { \n        editor.session.foldAll();\n        editor.session.unfold(editor.selection.getAllRanges());\n    },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"unfoldall\",\n    bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n    exec: function(editor) { editor.session.unfold(); },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"findnext\",\n    bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n    exec: function(editor) { editor.findNext(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"findprevious\",\n    bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n    exec: function(editor) { editor.findPrevious(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"selectOrFindNext\",\n    bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        else\n            editor.findNext(); \n    },\n    readOnly: true\n}, {\n    name: \"selectOrFindPrevious\",\n    bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n    exec: function(editor) { \n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        else\n            editor.findPrevious();\n    },\n    readOnly: true\n}, {\n    name: \"find\",\n    bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n    },\n    readOnly: true\n}, {\n    name: \"overwrite\",\n    bindKey: \"Insert\",\n    exec: function(editor) { editor.toggleOverwrite(); },\n    readOnly: true\n}, {\n    name: \"selecttostart\",\n    bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n    exec: function(editor) { editor.getSelection().selectFileStart(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"gotostart\",\n    bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n    exec: function(editor) { editor.navigateFileStart(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"selectup\",\n    bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n    exec: function(editor) { editor.getSelection().selectUp(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"golineup\",\n    bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n    exec: function(editor, args) { editor.navigateUp(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttoend\",\n    bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n    exec: function(editor) { editor.getSelection().selectFileEnd(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"gotoend\",\n    bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n    exec: function(editor) { editor.navigateFileEnd(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"selectdown\",\n    bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n    exec: function(editor) { editor.getSelection().selectDown(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"golinedown\",\n    bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n    exec: function(editor, args) { editor.navigateDown(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectwordleft\",\n    bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n    exec: function(editor) { editor.getSelection().selectWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotowordleft\",\n    bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n    exec: function(editor) { editor.navigateWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttolinestart\",\n    bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n    exec: function(editor) { editor.getSelection().selectLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotolinestart\",\n    bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n    exec: function(editor) { editor.navigateLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectleft\",\n    bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n    exec: function(editor) { editor.getSelection().selectLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotoleft\",\n    bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n    exec: function(editor, args) { editor.navigateLeft(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectwordright\",\n    bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n    exec: function(editor) { editor.getSelection().selectWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotowordright\",\n    bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n    exec: function(editor) { editor.navigateWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttolineend\",\n    bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n    exec: function(editor) { editor.getSelection().selectLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotolineend\",\n    bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n    exec: function(editor) { editor.navigateLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectright\",\n    bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n    exec: function(editor) { editor.getSelection().selectRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotoright\",\n    bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n    exec: function(editor, args) { editor.navigateRight(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectpagedown\",\n    bindKey: \"Shift-PageDown\",\n    exec: function(editor) { editor.selectPageDown(); },\n    readOnly: true\n}, {\n    name: \"pagedown\",\n    bindKey: bindKey(null, \"Option-PageDown\"),\n    exec: function(editor) { editor.scrollPageDown(); },\n    readOnly: true\n}, {\n    name: \"gotopagedown\",\n    bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n    exec: function(editor) { editor.gotoPageDown(); },\n    readOnly: true\n}, {\n    name: \"selectpageup\",\n    bindKey: \"Shift-PageUp\",\n    exec: function(editor) { editor.selectPageUp(); },\n    readOnly: true\n}, {\n    name: \"pageup\",\n    bindKey: bindKey(null, \"Option-PageUp\"),\n    exec: function(editor) { editor.scrollPageUp(); },\n    readOnly: true\n}, {\n    name: \"gotopageup\",\n    bindKey: \"PageUp\",\n    exec: function(editor) { editor.gotoPageUp(); },\n    readOnly: true\n}, {\n    name: \"scrollup\",\n    bindKey: bindKey(\"Ctrl-Up\", null),\n    exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n    readOnly: true\n}, {\n    name: \"scrolldown\",\n    bindKey: bindKey(\"Ctrl-Down\", null),\n    exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n    readOnly: true\n}, {\n    name: \"selectlinestart\",\n    bindKey: \"Shift-Home\",\n    exec: function(editor) { editor.getSelection().selectLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectlineend\",\n    bindKey: \"Shift-End\",\n    exec: function(editor) { editor.getSelection().selectLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"togglerecording\",\n    bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n    exec: function(editor) { editor.commands.toggleRecording(editor); },\n    readOnly: true\n}, {\n    name: \"replaymacro\",\n    bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n    exec: function(editor) { editor.commands.replay(editor); },\n    readOnly: true\n}, {\n    name: \"jumptomatching\",\n    bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n    exec: function(editor) { editor.jumpToMatching(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"selecttomatching\",\n    bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n    exec: function(editor) { editor.jumpToMatching(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"expandToMatching\",\n    bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n    exec: function(editor) { editor.jumpToMatching(true, true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"passKeysToBrowser\",\n    bindKey: bindKey(null, null),\n    exec: function() {},\n    passEvent: true,\n    readOnly: true\n}, {\n    name: \"copy\",\n    exec: function(editor) {\n    },\n    readOnly: true\n},\n{\n    name: \"cut\",\n    exec: function(editor) {\n        var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n        var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n        editor._emit(\"cut\", range);\n\n        if (!range.isEmpty())\n            editor.session.remove(range);\n        editor.clearSelection();\n    },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"paste\",\n    exec: function(editor, args) {\n        editor.$handlePaste(args);\n    },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removeline\",\n    bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n    exec: function(editor) { editor.removeLines(); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEachLine\"\n}, {\n    name: \"duplicateSelection\",\n    bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n    exec: function(editor) { editor.duplicateSelection(); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"sortlines\",\n    bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n    exec: function(editor) { editor.sortLines(); },\n    scrollIntoView: \"selection\",\n    multiSelectAction: \"forEachLine\"\n}, {\n    name: \"togglecomment\",\n    bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n    exec: function(editor) { editor.toggleCommentLines(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"toggleBlockComment\",\n    bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n    exec: function(editor) { editor.toggleBlockComment(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"modifyNumberUp\",\n    bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n    exec: function(editor) { editor.modifyNumber(1); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"modifyNumberDown\",\n    bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n    exec: function(editor) { editor.modifyNumber(-1); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"replace\",\n    bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n    }\n}, {\n    name: \"undo\",\n    bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n    exec: function(editor) { editor.undo(); }\n}, {\n    name: \"redo\",\n    bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n    exec: function(editor) { editor.redo(); }\n}, {\n    name: \"copylinesup\",\n    bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n    exec: function(editor) { editor.copyLinesUp(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"movelinesup\",\n    bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n    exec: function(editor) { editor.moveLinesUp(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"copylinesdown\",\n    bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n    exec: function(editor) { editor.copyLinesDown(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"movelinesdown\",\n    bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n    exec: function(editor) { editor.moveLinesDown(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"del\",\n    bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n    exec: function(editor) { editor.remove(\"right\"); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"backspace\",\n    bindKey: bindKey(\n        \"Shift-Backspace|Backspace\",\n        \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n    ),\n    exec: function(editor) { editor.remove(\"left\"); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"cut_or_delete\",\n    bindKey: bindKey(\"Shift-Delete\", null),\n    exec: function(editor) { \n        if (editor.selection.isEmpty()) {\n            editor.remove(\"left\");\n        } else {\n            return false;\n        }\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolinestart\",\n    bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n    exec: function(editor) { editor.removeToLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolineend\",\n    bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n    exec: function(editor) { editor.removeToLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolinestarthard\",\n    bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n        range.start.column = 0;\n        editor.session.remove(range);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolineendhard\",\n    bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n        range.end.column = Number.MAX_VALUE;\n        editor.session.remove(range);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removewordleft\",\n    bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n    exec: function(editor) { editor.removeWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removewordright\",\n    bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n    exec: function(editor) { editor.removeWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"outdent\",\n    bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n    exec: function(editor) { editor.blockOutdent(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"indent\",\n    bindKey: bindKey(\"Tab\", \"Tab\"),\n    exec: function(editor) { editor.indent(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"blockoutdent\",\n    bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n    exec: function(editor) { editor.blockOutdent(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"blockindent\",\n    bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n    exec: function(editor) { editor.blockIndent(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"insertstring\",\n    exec: function(editor, str) { editor.insert(str); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"inserttext\",\n    exec: function(editor, args) {\n        editor.insert(lang.stringRepeat(args.text  || \"\", args.times || 1));\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"splitline\",\n    bindKey: bindKey(null, \"Ctrl-O\"),\n    exec: function(editor) { editor.splitLine(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"transposeletters\",\n    bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n    exec: function(editor) { editor.transposeLetters(); },\n    multiSelectAction: function(editor) {editor.transposeSelections(1); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"touppercase\",\n    bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n    exec: function(editor) { editor.toUpperCase(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"tolowercase\",\n    bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n    exec: function(editor) { editor.toLowerCase(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"expandtoline\",\n    bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n\n        range.start.column = range.end.column = 0;\n        range.end.row++;\n        editor.selection.setRange(range, false);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"joinlines\",\n    bindKey: bindKey(null, null),\n    exec: function(editor) {\n        var isBackwards = editor.selection.isBackwards();\n        var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n        var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n        var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n        var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n        var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n        var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n        for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n            var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n            if (curLine.length !== 0) {\n                curLine = \" \" + curLine;\n            }\n            insertLine += curLine;\n        }\n\n        if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n            insertLine += editor.session.doc.getNewLineCharacter();\n        }\n\n        editor.clearSelection();\n        editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n        if (selectedCount > 0) {\n            editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n            editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n        } else {\n            firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n            editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n        }\n    },\n    multiSelectAction: \"forEach\",\n    readOnly: true\n}, {\n    name: \"invertSelection\",\n    bindKey: bindKey(null, null),\n    exec: function(editor) {\n        var endRow = editor.session.doc.getLength() - 1;\n        var endCol = editor.session.doc.getLine(endRow).length;\n        var ranges = editor.selection.rangeList.ranges;\n        var newRanges = [];\n        if (ranges.length < 1) {\n            ranges = [editor.selection.getRange()];\n        }\n\n        for (var i = 0; i < ranges.length; i++) {\n            if (i == (ranges.length - 1)) {\n                if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n                    newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n                }\n            }\n\n            if (i === 0) {\n                if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n                    newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n                }\n            } else {\n                newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n            }\n        }\n\n        editor.exitMultiSelectMode();\n        editor.clearSelection();\n\n        for(var i = 0; i < newRanges.length; i++) {\n            editor.selection.addRange(newRanges[i], false);\n        }\n    },\n    readOnly: true,\n    scrollIntoView: \"none\"\n}];\n\n});\n\ndefine(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nmodule.exports = { lineMode: false };\n\n});\n\ndefine(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\n\nvar clipboard = require(\"./clipboard\");\nvar Editor = function(renderer, session, options) {\n    var container = renderer.getContainerElement();\n    this.container = container;\n    this.renderer = renderer;\n    this.id = \"editor\" + (++Editor.$uid);\n\n    this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n    if (typeof document == \"object\") {\n        this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n        this.renderer.textarea = this.textInput.getElement();\n        this.$mouseHandler = new MouseHandler(this);\n        new FoldHandler(this);\n    }\n\n    this.keyBinding = new KeyBinding(this);\n\n    this.$search = new Search().set({\n        wrap: true\n    });\n\n    this.$historyTracker = this.$historyTracker.bind(this);\n    this.commands.on(\"exec\", this.$historyTracker);\n\n    this.$initOperationListeners();\n    \n    this._$emitInputEvent = lang.delayedCall(function() {\n        this._signal(\"input\", {});\n        if (this.session && this.session.bgTokenizer)\n            this.session.bgTokenizer.scheduleStart();\n    }.bind(this));\n    \n    this.on(\"change\", function(_, _self) {\n        _self._$emitInputEvent.schedule(31);\n    });\n\n    this.setSession(session || options && options.session || new EditSession(\"\"));\n    config.resetOptions(this);\n    if (options)\n        this.setOptions(options);\n    config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$initOperationListeners = function() {\n        this.commands.on(\"exec\", this.startOperation.bind(this), true);\n        this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n        this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n        this.on(\"change\", function() {\n            if (!this.curOp) {\n                this.startOperation();\n                this.curOp.selectionBefore = this.$lastSel;\n            }\n            this.curOp.docChanged = true;\n        }.bind(this), true);\n        \n        this.on(\"changeSelection\", function() {\n            if (!this.curOp) {\n                this.startOperation();\n                this.curOp.selectionBefore = this.$lastSel;\n            }\n            this.curOp.selectionChanged = true;\n        }.bind(this), true);\n    };\n\n    this.curOp = null;\n    this.prevOp = {};\n    this.startOperation = function(commandEvent) {\n        if (this.curOp) {\n            if (!commandEvent || this.curOp.command)\n                return;\n            this.prevOp = this.curOp;\n        }\n        if (!commandEvent) {\n            this.previousCommand = null;\n            commandEvent = {};\n        }\n\n        this.$opResetTimer.schedule();\n        this.curOp = this.session.curOp = {\n            command: commandEvent.command || {},\n            args: commandEvent.args,\n            scrollTop: this.renderer.scrollTop\n        };\n        this.curOp.selectionBefore = this.selection.toJSON();\n    };\n\n    this.endOperation = function(e) {\n        if (this.curOp) {\n            if (e && e.returnValue === false)\n                return (this.curOp = null);\n            if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n                return;\n            this._signal(\"beforeEndOperation\");\n            if (!this.curOp) return;\n            var command = this.curOp.command;\n            var scrollIntoView = command && command.scrollIntoView;\n            if (scrollIntoView) {\n                switch (scrollIntoView) {\n                    case \"center-animate\":\n                        scrollIntoView = \"animate\";\n                    case \"center\":\n                        this.renderer.scrollCursorIntoView(null, 0.5);\n                        break;\n                    case \"animate\":\n                    case \"cursor\":\n                        this.renderer.scrollCursorIntoView();\n                        break;\n                    case \"selectionPart\":\n                        var range = this.selection.getRange();\n                        var config = this.renderer.layerConfig;\n                        if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n                            this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n                        }\n                        break;\n                    default:\n                        break;\n                }\n                if (scrollIntoView == \"animate\")\n                    this.renderer.animateScrolling(this.curOp.scrollTop);\n            }\n            var sel = this.selection.toJSON();\n            this.curOp.selectionAfter = sel;\n            this.$lastSel = this.selection.toJSON();\n            this.session.getUndoManager().addSelection(sel);\n            this.prevOp = this.curOp;\n            this.curOp = null;\n        }\n    };\n    this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n    this.$historyTracker = function(e) {\n        if (!this.$mergeUndoDeltas)\n            return;\n\n        var prev = this.prevOp;\n        var mergeableCommands = this.$mergeableCommands;\n        var shouldMerge = prev.command && (e.command.name == prev.command.name);\n        if (e.command.name == \"insertstring\") {\n            var text = e.args;\n            if (this.mergeNextCommand === undefined)\n                this.mergeNextCommand = true;\n\n            shouldMerge = shouldMerge\n                && this.mergeNextCommand // previous command allows to coalesce with\n                && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n            this.mergeNextCommand = true;\n        } else {\n            shouldMerge = shouldMerge\n                && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n        }\n\n        if (\n            this.$mergeUndoDeltas != \"always\"\n            && Date.now() - this.sequenceStartTime > 2000\n        ) {\n            shouldMerge = false; // the sequence is too long\n        }\n\n        if (shouldMerge)\n            this.session.mergeUndoDeltas = true;\n        else if (mergeableCommands.indexOf(e.command.name) !== -1)\n            this.sequenceStartTime = Date.now();\n    };\n    this.setKeyboardHandler = function(keyboardHandler, cb) {\n        if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n            this.$keybindingId = keyboardHandler;\n            var _self = this;\n            config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n                if (_self.$keybindingId == keyboardHandler)\n                    _self.keyBinding.setKeyboardHandler(module && module.handler);\n                cb && cb();\n            });\n        } else {\n            this.$keybindingId = null;\n            this.keyBinding.setKeyboardHandler(keyboardHandler);\n            cb && cb();\n        }\n    };\n    this.getKeyboardHandler = function() {\n        return this.keyBinding.getKeyboardHandler();\n    };\n    this.setSession = function(session) {\n        if (this.session == session)\n            return;\n        if (this.curOp) this.endOperation();\n        this.curOp = {};\n\n        var oldSession = this.session;\n        if (oldSession) {\n            this.session.off(\"change\", this.$onDocumentChange);\n            this.session.off(\"changeMode\", this.$onChangeMode);\n            this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n            this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.session.off(\"changeFold\", this.$onChangeFold);\n            this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.session.off(\"changeOverwrite\", this.$onCursorChange);\n            this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n            this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n            var selection = this.session.getSelection();\n            selection.off(\"changeCursor\", this.$onCursorChange);\n            selection.off(\"changeSelection\", this.$onSelectionChange);\n        }\n\n        this.session = session;\n        if (session) {\n            this.$onDocumentChange = this.onDocumentChange.bind(this);\n            session.on(\"change\", this.$onDocumentChange);\n            this.renderer.setSession(session);\n    \n            this.$onChangeMode = this.onChangeMode.bind(this);\n            session.on(\"changeMode\", this.$onChangeMode);\n    \n            this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n            session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n    \n            this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n            session.on(\"changeTabSize\", this.$onChangeTabSize);\n    \n            this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n            session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n    \n            this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n            session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n    \n            this.$onChangeFold = this.onChangeFold.bind(this);\n            session.on(\"changeFold\", this.$onChangeFold);\n    \n            this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n            this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n    \n            this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n            this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n    \n            this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n            this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n    \n            this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n            this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n    \n            this.$onCursorChange = this.onCursorChange.bind(this);\n            this.session.on(\"changeOverwrite\", this.$onCursorChange);\n    \n            this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n            this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n    \n            this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n            this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n    \n            this.selection = session.getSelection();\n            this.selection.on(\"changeCursor\", this.$onCursorChange);\n    \n            this.$onSelectionChange = this.onSelectionChange.bind(this);\n            this.selection.on(\"changeSelection\", this.$onSelectionChange);\n    \n            this.onChangeMode();\n    \n            this.onCursorChange();\n    \n            this.onScrollTopChange();\n            this.onScrollLeftChange();\n            this.onSelectionChange();\n            this.onChangeFrontMarker();\n            this.onChangeBackMarker();\n            this.onChangeBreakpoint();\n            this.onChangeAnnotation();\n            this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n            this.renderer.updateFull();\n        } else {\n            this.selection = null;\n            this.renderer.setSession(session);\n        }\n\n        this._signal(\"changeSession\", {\n            session: session,\n            oldSession: oldSession\n        });\n        \n        this.curOp = null;\n        \n        oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n        session && session._signal(\"changeEditor\", {editor: this});\n        \n        if (session && session.bgTokenizer)\n            session.bgTokenizer.scheduleStart();\n    };\n    this.getSession = function() {\n        return this.session;\n    };\n    this.setValue = function(val, cursorPos) {\n        this.session.doc.setValue(val);\n\n        if (!cursorPos)\n            this.selectAll();\n        else if (cursorPos == 1)\n            this.navigateFileEnd();\n        else if (cursorPos == -1)\n            this.navigateFileStart();\n\n        return val;\n    };\n    this.getValue = function() {\n        return this.session.getValue();\n    };\n    this.getSelection = function() {\n        return this.selection;\n    };\n    this.resize = function(force) {\n        this.renderer.onResize(force);\n    };\n    this.setTheme = function(theme, cb) {\n        this.renderer.setTheme(theme, cb);\n    };\n    this.getTheme = function() {\n        return this.renderer.getTheme();\n    };\n    this.setStyle = function(style) {\n        this.renderer.setStyle(style);\n    };\n    this.unsetStyle = function(style) {\n        this.renderer.unsetStyle(style);\n    };\n    this.getFontSize = function () {\n        return this.getOption(\"fontSize\") ||\n           dom.computedStyle(this.container).fontSize;\n    };\n    this.setFontSize = function(size) {\n        this.setOption(\"fontSize\", size);\n    };\n\n    this.$highlightBrackets = function() {\n        if (this.session.$bracketHighlight) {\n            this.session.removeMarker(this.session.$bracketHighlight);\n            this.session.$bracketHighlight = null;\n        }\n\n        if (this.$highlightPending) {\n            return;\n        }\n        var self = this;\n        this.$highlightPending = true;\n        setTimeout(function() {\n            self.$highlightPending = false;\n            var session = self.session;\n            if (!session || !session.bgTokenizer) return;\n            var pos = session.findMatchingBracket(self.getCursorPosition());\n            if (pos) {\n                var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n            } else if (session.$mode.getMatching) {\n                var range = session.$mode.getMatching(self.session);\n            }\n            if (range)\n                session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n        }, 50);\n    };\n    this.$highlightTags = function() {\n        if (this.$highlightTagPending)\n            return;\n        var self = this;\n        this.$highlightTagPending = true;\n        setTimeout(function() {\n            self.$highlightTagPending = false;\n            \n            var session = self.session;\n            if (!session || !session.bgTokenizer) return;\n            \n            var pos = self.getCursorPosition();\n            var iterator = new TokenIterator(self.session, pos.row, pos.column);\n            var token = iterator.getCurrentToken();\n            \n            if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n                return;\n            }\n            \n            if (token.type.indexOf(\"tag-open\") != -1) {\n                token = iterator.stepForward();\n                if (!token)\n                    return;\n            }\n            \n            var tag = token.value;\n            var depth = 0;\n            var prevToken = iterator.stepBackward();\n            \n            if (prevToken.value == '<'){\n                do {\n                    prevToken = token;\n                    token = iterator.stepForward();\n                    \n                    if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                        if (prevToken.value === '<'){\n                            depth++;\n                        } else if (prevToken.value === '</'){\n                            depth--;\n                        }\n                    }\n                    \n                } while (token && depth >= 0);\n            } else {\n                do {\n                    token = prevToken;\n                    prevToken = iterator.stepBackward();\n                    \n                    if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                        } else if (prevToken.value === '</') {\n                            depth--;\n                        }\n                    }\n                } while (prevToken && depth <= 0);\n                iterator.stepForward();\n            }\n            \n            if (!token) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n                return;\n            }\n            \n            var row = iterator.getCurrentTokenRow();\n            var column = iterator.getCurrentTokenColumn();\n            var range = new Range(row, column, row, column+token.value.length);\n            var sbm = session.$backMarkers[session.$tagHighlight];\n            if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n            }\n            \n            if (!session.$tagHighlight)\n                session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n        }, 50);\n    };\n    this.focus = function() {\n        var _self = this;\n        setTimeout(function() {\n            if (!_self.isFocused())\n                _self.textInput.focus();\n        });\n        this.textInput.focus();\n    };\n    this.isFocused = function() {\n        return this.textInput.isFocused();\n    };\n    this.blur = function() {\n        this.textInput.blur();\n    };\n    this.onFocus = function(e) {\n        if (this.$isFocused)\n            return;\n        this.$isFocused = true;\n        this.renderer.showCursor();\n        this.renderer.visualizeFocus();\n        this._emit(\"focus\", e);\n    };\n    this.onBlur = function(e) {\n        if (!this.$isFocused)\n            return;\n        this.$isFocused = false;\n        this.renderer.hideCursor();\n        this.renderer.visualizeBlur();\n        this._emit(\"blur\", e);\n    };\n\n    this.$cursorChange = function() {\n        this.renderer.updateCursor();\n    };\n    this.onDocumentChange = function(delta) {\n        var wrap = this.session.$useWrapMode;\n        var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n        this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n        this._signal(\"change\", delta);\n        this.$cursorChange();\n        this.$updateHighlightActiveLine();\n    };\n\n    this.onTokenizerUpdate = function(e) {\n        var rows = e.data;\n        this.renderer.updateLines(rows.first, rows.last);\n    };\n\n\n    this.onScrollTopChange = function() {\n        this.renderer.scrollToY(this.session.getScrollTop());\n    };\n\n    this.onScrollLeftChange = function() {\n        this.renderer.scrollToX(this.session.getScrollLeft());\n    };\n    this.onCursorChange = function() {\n        this.$cursorChange();\n\n        this.$highlightBrackets();\n        this.$highlightTags();\n        this.$updateHighlightActiveLine();\n        this._signal(\"changeSelection\");\n    };\n\n    this.$updateHighlightActiveLine = function() {\n        var session = this.getSession();\n\n        var highlight;\n        if (this.$highlightActiveLine) {\n            if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n                highlight = this.getCursorPosition();\n            if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n                highlight = false;\n            if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n                highlight = false;\n        }\n\n        if (session.$highlightLineMarker && !highlight) {\n            session.removeMarker(session.$highlightLineMarker.id);\n            session.$highlightLineMarker = null;\n        } else if (!session.$highlightLineMarker && highlight) {\n            var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n            range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n            session.$highlightLineMarker = range;\n        } else if (highlight) {\n            session.$highlightLineMarker.start.row = highlight.row;\n            session.$highlightLineMarker.end.row = highlight.row;\n            session.$highlightLineMarker.start.column = highlight.column;\n            session._signal(\"changeBackMarker\");\n        }\n    };\n\n    this.onSelectionChange = function(e) {\n        var session = this.session;\n\n        if (session.$selectionMarker) {\n            session.removeMarker(session.$selectionMarker);\n        }\n        session.$selectionMarker = null;\n\n        if (!this.selection.isEmpty()) {\n            var range = this.selection.getRange();\n            var style = this.getSelectionStyle();\n            session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n        } else {\n            this.$updateHighlightActiveLine();\n        }\n\n        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n        this.session.highlight(re);\n\n        this._signal(\"changeSelection\");\n    };\n\n    this.$getSelectionHighLightRegexp = function() {\n        var session = this.session;\n\n        var selection = this.getSelectionRange();\n        if (selection.isEmpty() || selection.isMultiLine())\n            return;\n\n        var startColumn = selection.start.column;\n        var endColumn = selection.end.column;\n        var line = session.getLine(selection.start.row);\n        \n        var needle = line.substring(startColumn, endColumn);\n        if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n            return;\n\n        var re = this.$search.$assembleRegExp({\n            wholeWord: true,\n            caseSensitive: true,\n            needle: needle\n        });\n        \n        var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n        if (!re.test(wordWithBoundary))\n            return;\n        \n        return re;\n    };\n\n\n    this.onChangeFrontMarker = function() {\n        this.renderer.updateFrontMarkers();\n    };\n\n    this.onChangeBackMarker = function() {\n        this.renderer.updateBackMarkers();\n    };\n\n\n    this.onChangeBreakpoint = function() {\n        this.renderer.updateBreakpoints();\n    };\n\n    this.onChangeAnnotation = function() {\n        this.renderer.setAnnotations(this.session.getAnnotations());\n    };\n\n\n    this.onChangeMode = function(e) {\n        this.renderer.updateText();\n        this._emit(\"changeMode\", e);\n    };\n\n\n    this.onChangeWrapLimit = function() {\n        this.renderer.updateFull();\n    };\n\n    this.onChangeWrapMode = function() {\n        this.renderer.onResize(true);\n    };\n\n\n    this.onChangeFold = function() {\n        this.$updateHighlightActiveLine();\n        this.renderer.updateFull();\n    };\n    this.getSelectedText = function() {\n        return this.session.getTextRange(this.getSelectionRange());\n    };\n    this.getCopyText = function() {\n        var text = this.getSelectedText();\n        var nl = this.session.doc.getNewLineCharacter();\n        var copyLine= false;\n        if (!text && this.$copyWithEmptySelection) {\n            copyLine = true;\n            var ranges = this.selection.getAllRanges();\n            for (var i = 0; i < ranges.length; i++) {\n                var range = ranges[i];\n                if (i && ranges[i - 1].start.row == range.start.row)\n                    continue;\n                text += this.session.getLine(range.start.row) + nl;\n            }\n        }\n        var e = {text: text};\n        this._signal(\"copy\", e);\n        clipboard.lineMode = copyLine ? e.text : \"\";\n        return e.text;\n    };\n    this.onCopy = function() {\n        this.commands.exec(\"copy\", this);\n    };\n    this.onCut = function() {\n        this.commands.exec(\"cut\", this);\n    };\n    this.onPaste = function(text, event) {\n        var e = {text: text, event: event};\n        this.commands.exec(\"paste\", this, e);\n    };\n    \n    this.$handlePaste = function(e) {\n        if (typeof e == \"string\") \n            e = {text: e};\n        this._signal(\"paste\", e);\n        var text = e.text;\n\n        var lineMode = text == clipboard.lineMode;\n        var session = this.session;\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n            if (lineMode)\n                session.insert({ row: this.selection.lead.row, column: 0 }, text);\n            else\n                this.insert(text);\n        } else if (lineMode) {\n            this.selection.rangeList.ranges.forEach(function(range) {\n                session.insert({ row: range.start.row, column: 0 }, text);\n            });\n        } else {\n            var lines = text.split(/\\r\\n|\\r|\\n/);\n            var ranges = this.selection.rangeList.ranges;\n    \n            if (lines.length > ranges.length || lines.length < 2 || !lines[1])\n                return this.commands.exec(\"insertstring\", this, text);\n    \n            for (var i = ranges.length; i--;) {\n                var range = ranges[i];\n                if (!range.isEmpty())\n                    session.remove(range);\n    \n                session.insert(range.start, lines[i]);\n            }\n        }\n    };\n\n    this.execCommand = function(command, args) {\n        return this.commands.exec(command, this, args);\n    };\n    this.insert = function(text, pasted) {\n        var session = this.session;\n        var mode = session.getMode();\n        var cursor = this.getCursorPosition();\n\n        if (this.getBehavioursEnabled() && !pasted) {\n            var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n            if (transform) {\n                if (text !== transform.text) {\n                    if (!this.inVirtualSelectionMode) {\n                        this.session.mergeUndoDeltas = false;\n                        this.mergeNextCommand = false;\n                    }\n                }\n                text = transform.text;\n\n            }\n        }\n        \n        if (text == \"\\t\")\n            text = this.session.getTabString();\n        if (!this.selection.isEmpty()) {\n            var range = this.getSelectionRange();\n            cursor = this.session.remove(range);\n            this.clearSelection();\n        }\n        else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n            var range = new Range.fromPoints(cursor, cursor);\n            range.end.column += text.length;\n            this.session.remove(range);\n        }\n\n        if (text == \"\\n\" || text == \"\\r\\n\") {\n            var line = session.getLine(cursor.row);\n            if (cursor.column > line.search(/\\S|$/)) {\n                var d = line.substr(cursor.column).search(/\\S|$/);\n                session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n            }\n        }\n        this.clearSelection();\n\n        var start = cursor.column;\n        var lineState = session.getState(cursor.row);\n        var line = session.getLine(cursor.row);\n        var shouldOutdent = mode.checkOutdent(lineState, line, text);\n        var end = session.insert(cursor, text);\n\n        if (transform && transform.selection) {\n            if (transform.selection.length == 2) { // Transform relative to the current column\n                this.selection.setSelectionRange(\n                    new Range(cursor.row, start + transform.selection[0],\n                              cursor.row, start + transform.selection[1]));\n            } else { // Transform relative to the current row.\n                this.selection.setSelectionRange(\n                    new Range(cursor.row + transform.selection[0],\n                              transform.selection[1],\n                              cursor.row + transform.selection[2],\n                              transform.selection[3]));\n            }\n        }\n\n        if (session.getDocument().isNewLine(text)) {\n            var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n            session.insert({row: cursor.row+1, column: 0}, lineIndent);\n        }\n        if (shouldOutdent)\n            mode.autoOutdent(lineState, session, cursor.row);\n    };\n\n    this.onTextInput = function(text, composition) {\n        if (!composition)\n            return this.keyBinding.onTextInput(text);\n        \n        this.startOperation({command: { name: \"insertstring\" }});\n        var applyComposition = this.applyComposition.bind(this, text, composition);\n        if (this.selection.rangeCount)\n            this.forEachSelection(applyComposition);\n        else\n            applyComposition();\n        this.endOperation();\n    };\n    \n    this.applyComposition = function(text, composition) {\n        if (composition.extendLeft || composition.extendRight) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.extendLeft;\n            r.end.column += composition.extendRight;\n            this.selection.setRange(r);\n            if (!text && !r.isEmpty())\n                this.remove();\n        }\n        if (text || !this.selection.isEmpty())\n            this.insert(text, true);\n        if (composition.restoreStart || composition.restoreEnd) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.restoreStart;\n            r.end.column -= composition.restoreEnd;\n            this.selection.setRange(r);\n        }\n    };\n\n    this.onCommandKey = function(e, hashId, keyCode) {\n        this.keyBinding.onCommandKey(e, hashId, keyCode);\n    };\n    this.setOverwrite = function(overwrite) {\n        this.session.setOverwrite(overwrite);\n    };\n    this.getOverwrite = function() {\n        return this.session.getOverwrite();\n    };\n    this.toggleOverwrite = function() {\n        this.session.toggleOverwrite();\n    };\n    this.setScrollSpeed = function(speed) {\n        this.setOption(\"scrollSpeed\", speed);\n    };\n    this.getScrollSpeed = function() {\n        return this.getOption(\"scrollSpeed\");\n    };\n    this.setDragDelay = function(dragDelay) {\n        this.setOption(\"dragDelay\", dragDelay);\n    };\n    this.getDragDelay = function() {\n        return this.getOption(\"dragDelay\");\n    };\n    this.setSelectionStyle = function(val) {\n        this.setOption(\"selectionStyle\", val);\n    };\n    this.getSelectionStyle = function() {\n        return this.getOption(\"selectionStyle\");\n    };\n    this.setHighlightActiveLine = function(shouldHighlight) {\n        this.setOption(\"highlightActiveLine\", shouldHighlight);\n    };\n    this.getHighlightActiveLine = function() {\n        return this.getOption(\"highlightActiveLine\");\n    };\n    this.setHighlightGutterLine = function(shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n\n    this.getHighlightGutterLine = function() {\n        return this.getOption(\"highlightGutterLine\");\n    };\n    this.setHighlightSelectedWord = function(shouldHighlight) {\n        this.setOption(\"highlightSelectedWord\", shouldHighlight);\n    };\n    this.getHighlightSelectedWord = function() {\n        return this.$highlightSelectedWord;\n    };\n\n    this.setAnimatedScroll = function(shouldAnimate){\n        this.renderer.setAnimatedScroll(shouldAnimate);\n    };\n\n    this.getAnimatedScroll = function(){\n        return this.renderer.getAnimatedScroll();\n    };\n    this.setShowInvisibles = function(showInvisibles) {\n        this.renderer.setShowInvisibles(showInvisibles);\n    };\n    this.getShowInvisibles = function() {\n        return this.renderer.getShowInvisibles();\n    };\n\n    this.setDisplayIndentGuides = function(display) {\n        this.renderer.setDisplayIndentGuides(display);\n    };\n\n    this.getDisplayIndentGuides = function() {\n        return this.renderer.getDisplayIndentGuides();\n    };\n    this.setShowPrintMargin = function(showPrintMargin) {\n        this.renderer.setShowPrintMargin(showPrintMargin);\n    };\n    this.getShowPrintMargin = function() {\n        return this.renderer.getShowPrintMargin();\n    };\n    this.setPrintMarginColumn = function(showPrintMargin) {\n        this.renderer.setPrintMarginColumn(showPrintMargin);\n    };\n    this.getPrintMarginColumn = function() {\n        return this.renderer.getPrintMarginColumn();\n    };\n    this.setReadOnly = function(readOnly) {\n        this.setOption(\"readOnly\", readOnly);\n    };\n    this.getReadOnly = function() {\n        return this.getOption(\"readOnly\");\n    };\n    this.setBehavioursEnabled = function (enabled) {\n        this.setOption(\"behavioursEnabled\", enabled);\n    };\n    this.getBehavioursEnabled = function () {\n        return this.getOption(\"behavioursEnabled\");\n    };\n    this.setWrapBehavioursEnabled = function (enabled) {\n        this.setOption(\"wrapBehavioursEnabled\", enabled);\n    };\n    this.getWrapBehavioursEnabled = function () {\n        return this.getOption(\"wrapBehavioursEnabled\");\n    };\n    this.setShowFoldWidgets = function(show) {\n        this.setOption(\"showFoldWidgets\", show);\n\n    };\n    this.getShowFoldWidgets = function() {\n        return this.getOption(\"showFoldWidgets\");\n    };\n\n    this.setFadeFoldWidgets = function(fade) {\n        this.setOption(\"fadeFoldWidgets\", fade);\n    };\n\n    this.getFadeFoldWidgets = function() {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n    this.remove = function(dir) {\n        if (this.selection.isEmpty()){\n            if (dir == \"left\")\n                this.selection.selectLeft();\n            else\n                this.selection.selectRight();\n        }\n\n        var range = this.getSelectionRange();\n        if (this.getBehavioursEnabled()) {\n            var session = this.session;\n            var state = session.getState(range.start.row);\n            var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n            if (range.end.column === 0) {\n                var text = session.getTextRange(range);\n                if (text[text.length - 1] == \"\\n\") {\n                    var line = session.getLine(range.end.row);\n                    if (/^\\s+$/.test(line)) {\n                        range.end.column = line.length;\n                    }\n                }\n            }\n            if (new_range)\n                range = new_range;\n        }\n\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    this.removeWordRight = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectWordRight();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeWordLeft = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectWordLeft();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeToLineStart = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectLineStart();\n        if (this.selection.isEmpty())\n            this.selection.selectLeft();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeToLineEnd = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectLineEnd();\n\n        var range = this.getSelectionRange();\n        if (range.start.column == range.end.column && range.start.row == range.end.row) {\n            range.end.column = 0;\n            range.end.row++;\n        }\n\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    this.splitLine = function() {\n        if (!this.selection.isEmpty()) {\n            this.session.remove(this.getSelectionRange());\n            this.clearSelection();\n        }\n\n        var cursor = this.getCursorPosition();\n        this.insert(\"\\n\");\n        this.moveCursorToPosition(cursor);\n    };\n    this.transposeLetters = function() {\n        if (!this.selection.isEmpty()) {\n            return;\n        }\n\n        var cursor = this.getCursorPosition();\n        var column = cursor.column;\n        if (column === 0)\n            return;\n\n        var line = this.session.getLine(cursor.row);\n        var swap, range;\n        if (column < line.length) {\n            swap = line.charAt(column) + line.charAt(column-1);\n            range = new Range(cursor.row, column-1, cursor.row, column+1);\n        }\n        else {\n            swap = line.charAt(column-1) + line.charAt(column-2);\n            range = new Range(cursor.row, column-2, cursor.row, column);\n        }\n        this.session.replace(range, swap);\n        this.session.selection.moveToPosition(range.end);\n    };\n    this.toLowerCase = function() {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toLowerCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    this.toUpperCase = function() {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toUpperCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    this.indent = function() {\n        var session = this.session;\n        var range = this.getSelectionRange();\n\n        if (range.start.row < range.end.row) {\n            var rows = this.$getSelectedRows();\n            session.indentRows(rows.first, rows.last, \"\\t\");\n            return;\n        } else if (range.start.column < range.end.column) {\n            var text = session.getTextRange(range);\n            if (!/^\\s+$/.test(text)) {\n                var rows = this.$getSelectedRows();\n                session.indentRows(rows.first, rows.last, \"\\t\");\n                return;\n            }\n        }\n        \n        var line = session.getLine(range.start.row);\n        var position = range.start;\n        var size = session.getTabSize();\n        var column = session.documentToScreenColumn(position.row, position.column);\n\n        if (this.session.getUseSoftTabs()) {\n            var count = (size - column % size);\n            var indentString = lang.stringRepeat(\" \", count);\n        } else {\n            var count = column % size;\n            while (line[range.start.column - 1] == \" \" && count) {\n                range.start.column--;\n                count--;\n            }\n            this.selection.setSelectionRange(range);\n            indentString = \"\\t\";\n        }\n        return this.insert(indentString);\n    };\n    this.blockIndent = function() {\n        var rows = this.$getSelectedRows();\n        this.session.indentRows(rows.first, rows.last, \"\\t\");\n    };\n    this.blockOutdent = function() {\n        var selection = this.session.getSelection();\n        this.session.outdentRows(selection.getRange());\n    };\n    this.sortLines = function() {\n        var rows = this.$getSelectedRows();\n        var session = this.session;\n\n        var lines = [];\n        for (var i = rows.first; i <= rows.last; i++)\n            lines.push(session.getLine(i));\n\n        lines.sort(function(a, b) {\n            if (a.toLowerCase() < b.toLowerCase()) return -1;\n            if (a.toLowerCase() > b.toLowerCase()) return 1;\n            return 0;\n        });\n\n        var deleteRange = new Range(0, 0, 0, 0);\n        for (var i = rows.first; i <= rows.last; i++) {\n            var line = session.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            deleteRange.end.column = line.length;\n            session.replace(deleteRange, lines[i-rows.first]);\n        }\n    };\n    this.toggleCommentLines = function() {\n        var state = this.session.getState(this.getCursorPosition().row);\n        var rows = this.$getSelectedRows();\n        this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n    };\n\n    this.toggleBlockComment = function() {\n        var cursor = this.getCursorPosition();\n        var state = this.session.getState(cursor.row);\n        var range = this.getSelectionRange();\n        this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n    };\n    this.getNumberAt = function(row, column) {\n        var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n        _numberRx.lastIndex = 0;\n\n        var s = this.session.getLine(row);\n        while (_numberRx.lastIndex < column) {\n            var m = _numberRx.exec(s);\n            if(m.index <= column && m.index+m[0].length >= column){\n                var number = {\n                    value: m[0],\n                    start: m.index,\n                    end: m.index+m[0].length\n                };\n                return number;\n            }\n        }\n        return null;\n    };\n    this.modifyNumber = function(amount) {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        var charRange = new Range(row, column-1, row, column);\n\n        var c = this.session.getTextRange(charRange);\n        if (!isNaN(parseFloat(c)) && isFinite(c)) {\n            var nr = this.getNumberAt(row, column);\n            if (nr) {\n                var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n                var decimals = nr.start + nr.value.length - fp;\n\n                var t = parseFloat(nr.value);\n                t *= Math.pow(10, decimals);\n\n\n                if(fp !== nr.end && column < fp){\n                    amount *= Math.pow(10, nr.end - column - 1);\n                } else {\n                    amount *= Math.pow(10, nr.end - column);\n                }\n\n                t += amount;\n                t /= Math.pow(10, decimals);\n                var nnr = t.toFixed(decimals);\n                var replaceRange = new Range(row, nr.start, row, nr.end);\n                this.session.replace(replaceRange, nnr);\n                this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n            }\n        } else {\n            this.toggleWord();\n        }\n    };\n\n    this.$toggleWordPairs = [\n        [\"first\", \"last\"],\n        [\"true\", \"false\"],\n        [\"yes\", \"no\"],\n        [\"width\", \"height\"],\n        [\"top\", \"bottom\"],\n        [\"right\", \"left\"],\n        [\"on\", \"off\"],\n        [\"x\", \"y\"],\n        [\"get\", \"set\"],\n        [\"max\", \"min\"],\n        [\"horizontal\", \"vertical\"],\n        [\"show\", \"hide\"],\n        [\"add\", \"remove\"],\n        [\"up\", \"down\"],\n        [\"before\", \"after\"],\n        [\"even\", \"odd\"],\n        [\"inside\", \"outside\"],\n        [\"next\", \"previous\"],\n        [\"increase\", \"decrease\"],\n        [\"attach\", \"detach\"],\n        [\"&&\", \"||\"],\n        [\"==\", \"!=\"]\n    ];\n\n    this.toggleWord = function () {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        this.selection.selectWord();\n        var currentState = this.getSelectedText();\n        var currWordStart = this.selection.getWordRange().start.column;\n        var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n        var delta = column - currWordStart - 1;\n        if (delta < 0) delta = 0;\n        var curLength = 0, itLength = 0;\n        var that = this;\n        if (currentState.match(/[A-Za-z0-9_]+/)) {\n            wordParts.forEach(function (item, i) {\n                itLength = curLength + item.length;\n                if (delta >= curLength && delta <= itLength) {\n                    currentState = item;\n                    that.selection.clearSelection();\n                    that.moveCursorTo(row, curLength + currWordStart);\n                    that.selection.selectTo(row, itLength + currWordStart);\n                }\n                curLength = itLength;\n            });\n        }\n\n        var wordPairs = this.$toggleWordPairs;\n        var reg;\n        for (var i = 0; i < wordPairs.length; i++) {\n            var item = wordPairs[i];\n            for (var j = 0; j <= 1; j++) {\n                var negate = +!j;\n                var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n                if (firstCondition) {\n                    var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n                    if (secondCondition) {\n                        reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n                            var res = item[negate];\n                            if (result.toUpperCase() == result) {\n                                res = res.toUpperCase();\n                            } else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n                                res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n                            }\n                            return res;\n                        });\n                        this.insert(reg);\n                        reg = \"\";\n                    }\n                }\n            }\n        }\n    };\n    this.removeLines = function() {\n        var rows = this.$getSelectedRows();\n        this.session.removeFullLines(rows.first, rows.last);\n        this.clearSelection();\n    };\n\n    this.duplicateSelection = function() {\n        var sel = this.selection;\n        var doc = this.session;\n        var range = sel.getRange();\n        var reverse = sel.isBackwards();\n        if (range.isEmpty()) {\n            var row = range.start.row;\n            doc.duplicateLines(row, row);\n        } else {\n            var point = reverse ? range.start : range.end;\n            var endPoint = doc.insert(point, doc.getTextRange(range), false);\n            range.start = point;\n            range.end = endPoint;\n\n            sel.setSelectionRange(range, reverse);\n        }\n    };\n    this.moveLinesDown = function() {\n        this.$moveLines(1, false);\n    };\n    this.moveLinesUp = function() {\n        this.$moveLines(-1, false);\n    };\n    this.moveText = function(range, toPosition, copy) {\n        return this.session.moveText(range, toPosition, copy);\n    };\n    this.copyLinesUp = function() {\n        this.$moveLines(-1, true);\n    };\n    this.copyLinesDown = function() {\n        this.$moveLines(1, true);\n    };\n    this.$moveLines = function(dir, copy) {\n        var rows, moved;\n        var selection = this.selection;\n        if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n            var range = selection.toOrientedRange();\n            rows = this.$getSelectedRows(range);\n            moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n            if (copy && dir == -1) moved = 0;\n            range.moveBy(moved, 0);\n            selection.fromOrientedRange(range);\n        } else {\n            var ranges = selection.rangeList.ranges;\n            selection.rangeList.detach(this.session);\n            this.inVirtualSelectionMode = true;\n            \n            var diff = 0;\n            var totalDiff = 0;\n            var l = ranges.length;\n            for (var i = 0; i < l; i++) {\n                var rangeIndex = i;\n                ranges[i].moveBy(diff, 0);\n                rows = this.$getSelectedRows(ranges[i]);\n                var first = rows.first;\n                var last = rows.last;\n                while (++i < l) {\n                    if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n                    var subRows = this.$getSelectedRows(ranges[i]);\n                    if (copy && subRows.first != last)\n                        break;\n                    else if (!copy && subRows.first > last + 1)\n                        break;\n                    last = subRows.last;\n                }\n                i--;\n                diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n                if (copy && dir == -1) rangeIndex = i + 1;\n                while (rangeIndex <= i) {\n                    ranges[rangeIndex].moveBy(diff, 0);\n                    rangeIndex++;\n                }\n                if (!copy) diff = 0;\n                totalDiff += diff;\n            }\n            \n            selection.fromOrientedRange(selection.ranges[0]);\n            selection.rangeList.attach(this.session);\n            this.inVirtualSelectionMode = false;\n        }\n    };\n    this.$getSelectedRows = function(range) {\n        range = (range || this.getSelectionRange()).collapseRows();\n\n        return {\n            first: this.session.getRowFoldStart(range.start.row),\n            last: this.session.getRowFoldEnd(range.end.row)\n        };\n    };\n\n    this.onCompositionStart = function(compositionState) {\n        this.renderer.showComposition(compositionState);\n    };\n\n    this.onCompositionUpdate = function(text) {\n        this.renderer.setCompositionText(text);\n    };\n\n    this.onCompositionEnd = function() {\n        this.renderer.hideComposition();\n    };\n    this.getFirstVisibleRow = function() {\n        return this.renderer.getFirstVisibleRow();\n    };\n    this.getLastVisibleRow = function() {\n        return this.renderer.getLastVisibleRow();\n    };\n    this.isRowVisible = function(row) {\n        return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n    };\n    this.isRowFullyVisible = function(row) {\n        return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n    };\n    this.$getVisibleRowCount = function() {\n        return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n    };\n\n    this.$moveByPage = function(dir, select) {\n        var renderer = this.renderer;\n        var config = this.renderer.layerConfig;\n        var rows = dir * Math.floor(config.height / config.lineHeight);\n\n        if (select === true) {\n            this.selection.$moveSelection(function(){\n                this.moveCursorBy(rows, 0);\n            });\n        } else if (select === false) {\n            this.selection.moveCursorBy(rows, 0);\n            this.selection.clearSelection();\n        }\n\n        var scrollTop = renderer.scrollTop;\n\n        renderer.scrollBy(0, rows * config.lineHeight);\n        if (select != null)\n            renderer.scrollCursorIntoView(null, 0.5);\n\n        renderer.animateScrolling(scrollTop);\n    };\n    this.selectPageDown = function() {\n        this.$moveByPage(1, true);\n    };\n    this.selectPageUp = function() {\n        this.$moveByPage(-1, true);\n    };\n    this.gotoPageDown = function() {\n       this.$moveByPage(1, false);\n    };\n    this.gotoPageUp = function() {\n        this.$moveByPage(-1, false);\n    };\n    this.scrollPageDown = function() {\n        this.$moveByPage(1);\n    };\n    this.scrollPageUp = function() {\n        this.$moveByPage(-1);\n    };\n    this.scrollToRow = function(row) {\n        this.renderer.scrollToRow(row);\n    };\n    this.scrollToLine = function(line, center, animate, callback) {\n        this.renderer.scrollToLine(line, center, animate, callback);\n    };\n    this.centerSelection = function() {\n        var range = this.getSelectionRange();\n        var pos = {\n            row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n            column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n        };\n        this.renderer.alignCursor(pos, 0.5);\n    };\n    this.getCursorPosition = function() {\n        return this.selection.getCursor();\n    };\n    this.getCursorPositionScreen = function() {\n        return this.session.documentToScreenPosition(this.getCursorPosition());\n    };\n    this.getSelectionRange = function() {\n        return this.selection.getRange();\n    };\n    this.selectAll = function() {\n        this.selection.selectAll();\n    };\n    this.clearSelection = function() {\n        this.selection.clearSelection();\n    };\n    this.moveCursorTo = function(row, column) {\n        this.selection.moveCursorTo(row, column);\n    };\n    this.moveCursorToPosition = function(pos) {\n        this.selection.moveCursorToPosition(pos);\n    };\n    this.jumpToMatching = function(select, expand) {\n        var cursor = this.getCursorPosition();\n        var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n        var prevToken = iterator.getCurrentToken();\n        var token = prevToken || iterator.stepForward();\n\n        if (!token) return;\n        var matchType;\n        var found = false;\n        var depth = {};\n        var i = cursor.column - token.start;\n        var bracketType;\n        var brackets = {\n            \")\": \"(\",\n            \"(\": \"(\",\n            \"]\": \"[\",\n            \"[\": \"[\",\n            \"{\": \"{\",\n            \"}\": \"{\"\n        };\n        \n        do {\n            if (token.value.match(/[{}()\\[\\]]/g)) {\n                for (; i < token.value.length && !found; i++) {\n                    if (!brackets[token.value[i]]) {\n                        continue;\n                    }\n\n                    bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n                    if (isNaN(depth[bracketType])) {\n                        depth[bracketType] = 0;\n                    }\n\n                    switch (token.value[i]) {\n                        case '(':\n                        case '[':\n                        case '{':\n                            depth[bracketType]++;\n                            break;\n                        case ')':\n                        case ']':\n                        case '}':\n                            depth[bracketType]--;\n\n                            if (depth[bracketType] === -1) {\n                                matchType = 'bracket';\n                                found = true;\n                            }\n                        break;\n                    }\n                }\n            }\n            else if (token.type.indexOf('tag-name') !== -1) {\n                if (isNaN(depth[token.value])) {\n                    depth[token.value] = 0;\n                }\n                \n                if (prevToken.value === '<') {\n                    depth[token.value]++;\n                }\n                else if (prevToken.value === '</') {\n                    depth[token.value]--;\n                }\n                \n                if (depth[token.value] === -1) {\n                    matchType = 'tag';\n                    found = true;\n                }\n            }\n\n            if (!found) {\n                prevToken = token;\n                token = iterator.stepForward();\n                i = 0;\n            }\n        } while (token && !found);\n        if (!matchType)\n            return;\n\n        var range, pos;\n        if (matchType === 'bracket') {\n            range = this.session.getBracketRange(cursor);\n            if (!range) {\n                range = new Range(\n                    iterator.getCurrentTokenRow(),\n                    iterator.getCurrentTokenColumn() + i - 1,\n                    iterator.getCurrentTokenRow(),\n                    iterator.getCurrentTokenColumn() + i - 1\n                );\n                pos = range.start;\n                if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\n                    range = this.session.getBracketRange(pos);\n            }\n        }\n        else if (matchType === 'tag') {\n            if (token && token.type.indexOf('tag-name') !== -1) \n                var tag = token.value;\n            else\n                return;\n\n            range = new Range(\n                iterator.getCurrentTokenRow(),\n                iterator.getCurrentTokenColumn() - 2,\n                iterator.getCurrentTokenRow(),\n                iterator.getCurrentTokenColumn() - 2\n            );\n            if (range.compare(cursor.row, cursor.column) === 0) {\n                found = false;\n                do {\n                    token = prevToken;\n                    prevToken = iterator.stepBackward();\n                    \n                    if (prevToken) {\n                        if (prevToken.type.indexOf('tag-close') !== -1) {\n                            range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n                        }\n\n                        if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                            if (prevToken.value === '<') {\n                                depth[tag]++;\n                            }\n                            else if (prevToken.value === '</') {\n                                depth[tag]--;\n                            }\n                            \n                            if (depth[tag] === 0)\n                                found = true;\n                        }\n                    }\n                } while (prevToken && !found);\n            }\n            if (token && token.type.indexOf('tag-name')) {\n                pos = range.start;\n                if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\n                    pos = range.end;\n            }\n        }\n\n        pos = range && range.cursor || pos;\n        if (pos) {\n            if (select) {\n                if (range && expand) {\n                    this.selection.setRange(range);\n                } else if (range && range.isEqual(this.getSelectionRange())) {\n                    this.clearSelection();\n                } else {\n                    this.selection.selectTo(pos.row, pos.column);\n                }\n            } else {\n                this.selection.moveTo(pos.row, pos.column);\n            }\n        }\n    };\n    this.gotoLine = function(lineNumber, column, animate) {\n        this.selection.clearSelection();\n        this.session.unfold({row: lineNumber - 1, column: column || 0});\n        this.exitMultiSelectMode && this.exitMultiSelectMode();\n        this.moveCursorTo(lineNumber - 1, column || 0);\n\n        if (!this.isRowFullyVisible(lineNumber - 1))\n            this.scrollToLine(lineNumber - 1, true, animate);\n    };\n    this.navigateTo = function(row, column) {\n        this.selection.moveTo(row, column);\n    };\n    this.navigateUp = function(times) {\n        if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n            var selectionStart = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionStart);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(-times || -1, 0);\n    };\n    this.navigateDown = function(times) {\n        if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n            var selectionEnd = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionEnd);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(times || 1, 0);\n    };\n    this.navigateLeft = function(times) {\n        if (!this.selection.isEmpty()) {\n            var selectionStart = this.getSelectionRange().start;\n            this.moveCursorToPosition(selectionStart);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorLeft();\n            }\n        }\n        this.clearSelection();\n    };\n    this.navigateRight = function(times) {\n        if (!this.selection.isEmpty()) {\n            var selectionEnd = this.getSelectionRange().end;\n            this.moveCursorToPosition(selectionEnd);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorRight();\n            }\n        }\n        this.clearSelection();\n    };\n    this.navigateLineStart = function() {\n        this.selection.moveCursorLineStart();\n        this.clearSelection();\n    };\n    this.navigateLineEnd = function() {\n        this.selection.moveCursorLineEnd();\n        this.clearSelection();\n    };\n    this.navigateFileEnd = function() {\n        this.selection.moveCursorFileEnd();\n        this.clearSelection();\n    };\n    this.navigateFileStart = function() {\n        this.selection.moveCursorFileStart();\n        this.clearSelection();\n    };\n    this.navigateWordRight = function() {\n        this.selection.moveCursorWordRight();\n        this.clearSelection();\n    };\n    this.navigateWordLeft = function() {\n        this.selection.moveCursorWordLeft();\n        this.clearSelection();\n    };\n    this.replace = function(replacement, options) {\n        if (options)\n            this.$search.set(options);\n\n        var range = this.$search.find(this.session);\n        var replaced = 0;\n        if (!range)\n            return replaced;\n\n        if (this.$tryReplace(range, replacement)) {\n            replaced = 1;\n        }\n\n        this.selection.setSelectionRange(range);\n        this.renderer.scrollSelectionIntoView(range.start, range.end);\n\n        return replaced;\n    };\n    this.replaceAll = function(replacement, options) {\n        if (options) {\n            this.$search.set(options);\n        }\n\n        var ranges = this.$search.findAll(this.session);\n        var replaced = 0;\n        if (!ranges.length)\n            return replaced;\n\n        var selection = this.getSelectionRange();\n        this.selection.moveTo(0, 0);\n\n        for (var i = ranges.length - 1; i >= 0; --i) {\n            if(this.$tryReplace(ranges[i], replacement)) {\n                replaced++;\n            }\n        }\n\n        this.selection.setSelectionRange(selection);\n\n        return replaced;\n    };\n\n    this.$tryReplace = function(range, replacement) {\n        var input = this.session.getTextRange(range);\n        replacement = this.$search.replace(input, replacement);\n        if (replacement !== null) {\n            range.end = this.session.replace(range, replacement);\n            return range;\n        } else {\n            return null;\n        }\n    };\n    this.getLastSearchOptions = function() {\n        return this.$search.getOptions();\n    };\n    this.find = function(needle, options, animate) {\n        if (!options)\n            options = {};\n\n        if (typeof needle == \"string\" || needle instanceof RegExp)\n            options.needle = needle;\n        else if (typeof needle == \"object\")\n            oop.mixin(options, needle);\n\n        var range = this.selection.getRange();\n        if (options.needle == null) {\n            needle = this.session.getTextRange(range)\n                || this.$search.$options.needle;\n            if (!needle) {\n                range = this.session.getWordRange(range.start.row, range.start.column);\n                needle = this.session.getTextRange(range);\n            }\n            this.$search.set({needle: needle});\n        }\n\n        this.$search.set(options);\n        if (!options.start)\n            this.$search.set({start: range});\n\n        var newRange = this.$search.find(this.session);\n        if (options.preventScroll)\n            return newRange;\n        if (newRange) {\n            this.revealRange(newRange, animate);\n            return newRange;\n        }\n        if (options.backwards)\n            range.start = range.end;\n        else\n            range.end = range.start;\n        this.selection.setRange(range);\n    };\n    this.findNext = function(options, animate) {\n        this.find({skipCurrent: true, backwards: false}, options, animate);\n    };\n    this.findPrevious = function(options, animate) {\n        this.find(options, {skipCurrent: true, backwards: true}, animate);\n    };\n\n    this.revealRange = function(range, animate) {\n        this.session.unfold(range);\n        this.selection.setSelectionRange(range);\n\n        var scrollTop = this.renderer.scrollTop;\n        this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n        if (animate !== false)\n            this.renderer.animateScrolling(scrollTop);\n    };\n    this.undo = function() {\n        this.session.getUndoManager().undo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    this.redo = function() {\n        this.session.getUndoManager().redo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    this.destroy = function() {\n        this.renderer.destroy();\n        this._signal(\"destroy\", this);\n        if (this.session) {\n            this.session.destroy();\n        }\n    };\n    this.setAutoScrollEditorIntoView = function(enable) {\n        if (!enable)\n            return;\n        var rect;\n        var self = this;\n        var shouldScroll = false;\n        if (!this.$scrollAnchor)\n            this.$scrollAnchor = document.createElement(\"div\");\n        var scrollAnchor = this.$scrollAnchor;\n        scrollAnchor.style.cssText = \"position:absolute\";\n        this.container.insertBefore(scrollAnchor, this.container.firstChild);\n        var onChangeSelection = this.on(\"changeSelection\", function() {\n            shouldScroll = true;\n        });\n        var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n            if (shouldScroll)\n                rect = self.renderer.container.getBoundingClientRect();\n        });\n        var onAfterRender = this.renderer.on(\"afterRender\", function() {\n            if (shouldScroll && rect && (self.isFocused()\n                || self.searchBox && self.searchBox.isFocused())\n            ) {\n                var renderer = self.renderer;\n                var pos = renderer.$cursorLayer.$pixelPos;\n                var config = renderer.layerConfig;\n                var top = pos.top - config.offset;\n                if (pos.top >= 0 && top + rect.top < 0) {\n                    shouldScroll = true;\n                } else if (pos.top < config.height &&\n                    pos.top + rect.top + config.lineHeight > window.innerHeight) {\n                    shouldScroll = false;\n                } else {\n                    shouldScroll = null;\n                }\n                if (shouldScroll != null) {\n                    scrollAnchor.style.top = top + \"px\";\n                    scrollAnchor.style.left = pos.left + \"px\";\n                    scrollAnchor.style.height = config.lineHeight + \"px\";\n                    scrollAnchor.scrollIntoView(shouldScroll);\n                }\n                shouldScroll = rect = null;\n            }\n        });\n        this.setAutoScrollEditorIntoView = function(enable) {\n            if (enable)\n                return;\n            delete this.setAutoScrollEditorIntoView;\n            this.off(\"changeSelection\", onChangeSelection);\n            this.renderer.off(\"afterRender\", onAfterRender);\n            this.renderer.off(\"beforeRender\", onBeforeRender);\n        };\n    };\n\n\n    this.$resetCursorStyle = function() {\n        var style = this.$cursorStyle || \"ace\";\n        var cursorLayer = this.renderer.$cursorLayer;\n        if (!cursorLayer)\n            return;\n        cursorLayer.setSmoothBlinking(/smooth/.test(style));\n        cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n        dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n    };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    selectionStyle: {\n        set: function(style) {\n            this.onSelectionChange();\n            this._signal(\"changeSelectionStyle\", {data: style});\n        },\n        initialValue: \"line\"\n    },\n    highlightActiveLine: {\n        set: function() {this.$updateHighlightActiveLine();},\n        initialValue: true\n    },\n    highlightSelectedWord: {\n        set: function(shouldHighlight) {this.$onSelectionChange();},\n        initialValue: true\n    },\n    readOnly: {\n        set: function(readOnly) {\n            this.textInput.setReadOnly(readOnly);\n            this.$resetCursorStyle(); \n        },\n        initialValue: false\n    },\n    copyWithEmptySelection: {\n        set: function(value) {\n            this.textInput.setCopyWithEmptySelection(value);\n        },\n        initialValue: false\n    },\n    cursorStyle: {\n        set: function(val) { this.$resetCursorStyle(); },\n        values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n        initialValue: \"ace\"\n    },\n    mergeUndoDeltas: {\n        values: [false, true, \"always\"],\n        initialValue: true\n    },\n    behavioursEnabled: {initialValue: true},\n    wrapBehavioursEnabled: {initialValue: true},\n    autoScrollEditorIntoView: {\n        set: function(val) {this.setAutoScrollEditorIntoView(val);}\n    },\n    keyboardHandler: {\n        set: function(val) { this.setKeyboardHandler(val); },\n        get: function() { return this.$keybindingId; },\n        handlesSet: true\n    },\n    value: {\n        set: function(val) { this.session.setValue(val); },\n        get: function() { return this.getValue(); },\n        handlesSet: true,\n        hidden: true\n    },\n    session: {\n        set: function(val) { this.setSession(val); },\n        get: function() { return this.session; },\n        handlesSet: true,\n        hidden: true\n    },\n    \n    showLineNumbers: {\n        set: function(show) {\n            this.renderer.$gutterLayer.setShowLineNumbers(show);\n            this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n            if (show && this.$relativeLineNumbers)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        },\n        initialValue: true\n    },\n    relativeLineNumbers: {\n        set: function(value) {\n            if (this.$showLineNumbers && value)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        }\n    },\n\n    hScrollBarAlwaysVisible: \"renderer\",\n    vScrollBarAlwaysVisible: \"renderer\",\n    highlightGutterLine: \"renderer\",\n    animatedScroll: \"renderer\",\n    showInvisibles: \"renderer\",\n    showPrintMargin: \"renderer\",\n    printMarginColumn: \"renderer\",\n    printMargin: \"renderer\",\n    fadeFoldWidgets: \"renderer\",\n    showFoldWidgets: \"renderer\",\n    displayIndentGuides: \"renderer\",\n    showGutter: \"renderer\",\n    fontSize: \"renderer\",\n    fontFamily: \"renderer\",\n    maxLines: \"renderer\",\n    minLines: \"renderer\",\n    scrollPastEnd: \"renderer\",\n    fixedWidthGutter: \"renderer\",\n    theme: \"renderer\",\n    hasCssTransforms: \"renderer\",\n    maxPixelHeight: \"renderer\",\n    useTextareaForIME: \"renderer\",\n\n    scrollSpeed: \"$mouseHandler\",\n    dragDelay: \"$mouseHandler\",\n    dragEnabled: \"$mouseHandler\",\n    focusTimeout: \"$mouseHandler\",\n    tooltipFollowsMouse: \"$mouseHandler\",\n\n    firstLineNumber: \"session\",\n    overwrite: \"session\",\n    newLineMode: \"session\",\n    useWorker: \"session\",\n    useSoftTabs: \"session\",\n    navigateWithinSoftTabs: \"session\",\n    tabSize: \"session\",\n    wrap: \"session\",\n    indentedSoftWrap: \"session\",\n    foldStyle: \"session\",\n    mode: \"session\"\n});\n\n\nvar relativeNumberRenderer = {\n    getText: function(session, row) {\n        return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n    },\n    getWidth: function(session, lastLineNumber, config) {\n        return Math.max(\n            lastLineNumber.toString().length,\n            (config.lastRow + 1).toString().length,\n            2\n        ) * config.characterWidth;\n    },\n    update: function(e, editor) {\n        editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n    },\n    attach: function(editor) {\n        editor.renderer.$gutterLayer.$renderer = this;\n        editor.on(\"changeSelection\", this.update);\n        this.update(null, editor);\n    },\n    detach: function(editor) {\n        if (editor.renderer.$gutterLayer.$renderer == this)\n            editor.renderer.$gutterLayer.$renderer = null;\n        editor.off(\"changeSelection\", this.update);\n        this.update(null, editor);\n    }\n};\n\nexports.Editor = Editor;\n});\n\ndefine(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n    this.$maxRev = 0;\n    this.$fromUndo = false;\n    this.reset();\n};\n\n(function() {\n    \n    this.addSession = function(session) {\n        this.$session = session;\n    };\n    this.add = function(delta, allowMerge, session) {\n        if (this.$fromUndo) return;\n        if (delta == this.$lastDelta) return;\n        if (allowMerge === false || !this.lastDeltas) {\n            this.lastDeltas = [];\n            this.$undoStack.push(this.lastDeltas);\n            delta.id = this.$rev = ++this.$maxRev;\n        }\n        if (delta.action == \"remove\" || delta.action == \"insert\")\n            this.$lastDelta = delta;\n        this.lastDeltas.push(delta);\n    };\n    \n    this.addSelection = function(selection, rev) {\n        this.selections.push({\n            value: selection,\n            rev: rev || this.$rev\n        });\n    };\n    \n    this.startNewGroup = function() {\n        this.lastDeltas = null;\n        return this.$rev;\n    };\n    \n    this.markIgnored = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        var stack = this.$undoStack;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id <= from)\n                break;\n            if (delta.id < to)\n                delta.ignore = true;\n        }\n        this.lastDeltas = null;\n    };\n    \n    this.getSelection = function(rev, after) {\n        var stack = this.selections;\n        for (var i = stack.length; i--;) {\n            var selection = stack[i];\n            if (selection.rev < rev) {\n                if (after)\n                    selection = stack[i + 1];\n                return selection;\n            }\n        }\n    };\n    \n    this.getRevision = function() {\n        return this.$rev;\n    };\n    \n    this.getDeltas = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        var stack = this.$undoStack;\n        var end = null, start = 0;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id < to && !end)\n                end = i+1;\n            if (delta.id <= from) {\n                start = i + 1;\n                break;\n            }\n        }\n        return stack.slice(start, end);\n    };\n    \n    this.getChangedRanges = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        \n    };\n    \n    this.getChangedLines = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        \n    };\n    this.undo = function(session, dontSelect) {\n        this.lastDeltas = null;\n        var stack = this.$undoStack;\n        \n        if (!rearrangeUndoStack(stack, stack.length))\n            return;\n        \n        if (!session)\n            session = this.$session;\n        \n        if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n            this.$redoStack = [];\n        \n        this.$fromUndo = true;\n        \n        var deltaSet = stack.pop();\n        var undoSelectionRange = null;\n        if (deltaSet && deltaSet.length) {\n            undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n            this.$redoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        \n        this.$fromUndo = false;\n\n        return undoSelectionRange;\n    };\n    this.redo = function(session, dontSelect) {\n        this.lastDeltas = null;\n        \n        if (!session)\n            session = this.$session;\n        \n        this.$fromUndo = true;\n        if (this.$redoStackBaseRev != this.$rev) {\n            var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n            rebaseRedoStack(this.$redoStack, diff);\n            this.$redoStackBaseRev = this.$rev;\n            this.$redoStack.forEach(function(x) {\n                x[0].id = ++this.$maxRev;\n            }, this);\n        }\n        var deltaSet = this.$redoStack.pop();\n        var redoSelectionRange = null;\n        \n        if (deltaSet) {\n            redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n            this.$undoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        this.$fromUndo = false;\n        \n        return redoSelectionRange;\n    };\n    \n    this.$syncRev = function() {\n        var stack = this.$undoStack;\n        var nextDelta = stack[stack.length - 1];\n        var id = nextDelta && nextDelta[0].id || 0;\n        this.$redoStackBaseRev = id;\n        this.$rev = id;\n    };\n    this.reset = function() {\n        this.lastDeltas = null;\n        this.$lastDelta = null;\n        this.$undoStack = [];\n        this.$redoStack = [];\n        this.$rev = 0;\n        this.mark = 0;\n        this.$redoStackBaseRev = this.$rev;\n        this.selections = [];\n    };\n    this.canUndo = function() {\n        return this.$undoStack.length > 0;\n    };\n    this.canRedo = function() {\n        return this.$redoStack.length > 0;\n    };\n    this.bookmark = function(rev) {\n        if (rev == undefined)\n            rev = this.$rev;\n        this.mark = rev;\n    };\n    this.isAtBookmark = function() {\n        return this.$rev === this.mark;\n    };\n    \n    this.toJSON = function() {\n        \n    };\n    \n    this.fromJSON = function() {\n        \n    };\n    \n    this.hasUndo = this.canUndo;\n    this.hasRedo = this.canRedo;\n    this.isClean = this.isAtBookmark;\n    this.markClean = this.bookmark;\n    \n    this.$prettyPrint = function(delta) {\n        if (delta) return stringifyDelta(delta);\n        return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n    };\n}).call(UndoManager.prototype);\n\nfunction rearrangeUndoStack(stack, pos) {\n    for (var i = pos; i--; ) {\n        var deltaSet = stack[i];\n        if (deltaSet && !deltaSet[0].ignore) {\n            while(i < pos - 1) {\n                var swapped = swapGroups(stack[i], stack[i + 1]);\n                stack[i] = swapped[0];\n                stack[i + 1] = swapped[1];\n                i++;\n            }\n            return true;\n        }\n    }\n}\n\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\n\nfunction $updateMarkers(delta) {\n    var isInsert = delta.action == \"insert\";\n    var start = delta.start;\n    var end = delta.end;\n    var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n    var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n    if (isInsert) end = start;\n\n    for (var i in this.marks) {\n        var point = this.marks[i];\n        var cmp = comparePoints(point, start);\n        if (cmp < 0) {\n            continue; // delta starts after the range\n        }\n        if (cmp === 0) {\n            if (isInsert) {\n                if (point.bias == 1) {\n                    cmp = 1;\n                }\n                else {\n                    point.bias == -1;\n                    continue;\n                }\n            }\n        }\n        var cmp2 = isInsert ? cmp : comparePoints(point, end);\n        if (cmp2 > 0) {\n            point.row += rowShift;\n            point.column += point.row == end.row ? colShift : 0;\n            continue;\n        }\n        if (!isInsert && cmp2 <= 0) {\n            point.row = start.row;\n            point.column = start.column;\n            if (cmp2 === 0)\n                point.bias = 1;\n        }\n    }\n}\n\n\n\nfunction clonePos(pos) {\n    return {row: pos.row,column: pos.column};\n}\nfunction cloneDelta(d) {\n    return {\n        start: clonePos(d.start),\n        end: clonePos(d.end),\n        action: d.action,\n        lines: d.lines.slice()\n    };\n}\nfunction stringifyDelta(d) {\n    d = d || this;\n    if (Array.isArray(d)) {\n        return d.map(stringifyDelta).join(\"\\n\");\n    }\n    var type = \"\";\n    if (d.action) {\n        type = d.action == \"insert\" ? \"+\" : \"-\";\n        type += \"[\" + d.lines + \"]\";\n    } else if (d.value) {\n        if (Array.isArray(d.value)) {\n            type = d.value.map(stringifyRange).join(\"\\n\");\n        } else {\n            type = stringifyRange(d.value);\n        }\n    }\n    if (d.start) {\n        type += stringifyRange(d);\n    }\n    if (d.id || d.rev) {\n        type += \"\\t(\" + (d.id || d.rev) + \")\";\n    }\n    return type;\n}\nfunction stringifyRange(r) {\n    return r.start.row + \":\" + r.start.column \n        + \"=>\" + r.end.row + \":\" + r.end.column;\n}\n\nfunction swap(d1, d2) {\n    var i1 = d1.action == \"insert\";\n    var i2 = d2.action == \"insert\";\n    \n    if (i1 && i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        } else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        } else {\n            return null;\n        }\n    } else if (i1 && !i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        } else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        } else {\n            return null;\n        }\n    } else if (!i1 && i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        } else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        } else {\n            return null;\n        }\n    } else if (!i1 && !i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        } else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        } else {\n            return null;\n        }\n    }\n    return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n    for (var i = ds1.length; i--; ) {\n        for (var j = 0; j < ds2.length; j++) {\n            if (!swap(ds1[i], ds2[j])) {\n                while (i < ds1.length) {\n                    while (j--) {\n                        swap(ds2[j], ds1[i]);\n                    }\n                    j = ds2.length;\n                    i++;\n                }                \n                return [ds1, ds2];\n            }\n        }\n    }\n    ds1.selectionBefore = ds2.selectionBefore = \n    ds1.selectionAfter = ds2.selectionAfter = null;\n    return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n    var i1 = d1.action == \"insert\";\n    var i2 = c1.action == \"insert\";\n    \n    if (i1 && i2) {\n        if (cmp(d1.start, c1.start) < 0) {\n            shift(c1, d1, 1);\n        } else {\n            shift(d1, c1, 1);\n        }\n    } else if (i1 && !i2) {\n        if (cmp(d1.start, c1.end) >= 0) {\n            shift(d1, c1, -1);\n        } else if (cmp(d1.start, c1.start) <= 0) {\n            shift(c1, d1, +1);\n        } else {\n            shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n            shift(c1, d1, +1);\n        }\n    } else if (!i1 && i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        } else if (cmp(c1.start, d1.start) <= 0) {\n            shift(d1, c1, +1);\n        } else {\n            shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n            shift(d1, c1, +1);\n        }\n    } else if (!i1 && !i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        } else if (cmp(c1.end, d1.start) <= 0) {\n            shift(d1, c1, -1);\n        } else {\n            var before, after;\n            if (cmp(d1.start, c1.start) < 0) {\n                before = d1;\n                d1 = splitDelta(d1, c1.start);\n            }\n            if (cmp(d1.end, c1.end) > 0) {\n                after = splitDelta(d1, c1.end);\n            }\n\n            shiftPos(c1.end, d1.start, d1.end, -1);\n            if (after && !before) {\n                d1.lines = after.lines;\n                d1.start = after.start;\n                d1.end = after.end;\n                after = d1;\n            }\n\n            return [c1, before, after].filter(Boolean);\n        }\n    }\n    return [c1, d1];\n}\n    \nfunction shift(d1, d2, dir) {\n    shiftPos(d1.start, d2.start, d2.end, dir);\n    shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n    if (pos.row == (dir == 1 ? start : end).row) {\n        pos.column += dir * (end.column - start.column);\n    }\n    pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n    var lines = c.lines;\n    var end = c.end;\n    c.end = clonePos(pos);    \n    var rowsBefore = c.end.row - c.start.row;\n    var otherLines = lines.splice(rowsBefore, lines.length);\n    \n    var col = rowsBefore ? pos.column : pos.column - c.start.column;\n    lines.push(otherLines[0].substring(0, col));\n    otherLines[0] = otherLines[0].substr(col)   ; \n    var rest = {\n        start: clonePos(pos),\n        end: end,\n        lines: otherLines,\n        action: c.action\n    };\n    return rest;\n}\n\nfunction moveDeltasByOne(redoStack, d) {\n    d = cloneDelta(d);\n    for (var j = redoStack.length; j--;) {\n        var deltaSet = redoStack[j];\n        for (var i = 0; i < deltaSet.length; i++) {\n            var x = deltaSet[i];\n            var xformed = xform(x, d);\n            d = xformed[0];\n            if (xformed.length != 2) {\n                if (xformed[2]) {\n                    deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n                    i++;\n                } else if (!xformed[1]) {\n                    deltaSet.splice(i, 1);\n                    i--;\n                }\n            }\n        }\n        if (!deltaSet.length) {\n            redoStack.splice(j, 1); \n        }\n    }\n    return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n    for (var i = 0; i < deltaSets.length; i++) {\n        var deltas = deltaSets[i];\n        for (var j = 0; j < deltas.length; j++) {\n            moveDeltasByOne(redoStack, deltas[j]);\n        }\n    }\n}\n\nexports.UndoManager = UndoManager;\n\n});\n\ndefine(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Lines = function(element, canvasHeight) {\n    this.element = element;\n    this.canvasHeight = canvasHeight || 500000;\n    this.element.style.height = (this.canvasHeight * 2) + \"px\";\n    \n    this.cells = [];\n    this.cellCache = [];\n    this.$offsetCoefficient = 0;\n};\n\n(function() {\n    \n    this.moveContainer = function(config) {\n        dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n    };    \n    \n    this.pageChanged = function(oldConfig, newConfig) {\n        return (\n            Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n            Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)\n        );\n    };\n    \n    this.computeLineTop = function(row, config, session) {\n        var screenTop = config.firstRowScreen * config.lineHeight;\n        var screenPage = Math.floor(screenTop / this.canvasHeight);\n        var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n        return lineTop - (screenPage * this.canvasHeight);\n    };\n    \n    this.computeLineHeight = function(row, config, session) {\n        return config.lineHeight * session.getRowLength(row);\n    };\n    \n    this.getLength = function() {\n        return this.cells.length;\n    };\n    \n    this.get = function(index) {\n        return this.cells[index];\n    };\n    \n    this.shift = function() {\n        this.$cacheCell(this.cells.shift());\n    };\n    \n    this.pop = function() {\n        this.$cacheCell(this.cells.pop());\n    };\n    \n    this.push = function(cell) {\n        if (Array.isArray(cell)) {\n            this.cells.push.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i=0; i<cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            this.element.appendChild(fragment);\n         } else {\n            this.cells.push(cell);\n            this.element.appendChild(cell.element);\n         }\n    };\n    \n    this.unshift = function(cell) {\n        if (Array.isArray(cell)) {\n            this.cells.unshift.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i=0; i<cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            if (this.element.firstChild)\n                this.element.insertBefore(fragment, this.element.firstChild);\n            else\n                this.element.appendChild(fragment);\n         } else {\n            this.cells.unshift(cell);\n            this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n         }\n    };\n    \n    this.last = function() {\n        if (this.cells.length)\n            return this.cells[this.cells.length-1];\n        else\n            return null;\n    };\n    \n    this.$cacheCell = function(cell) {\n        if (!cell)\n            return;\n            \n        cell.element.remove();\n        this.cellCache.push(cell);\n    };\n    \n    this.createCell = function(row, config, session, initElement) {\n        var cell = this.cellCache.pop();\n        if (!cell) {\n            var element = dom.createElement(\"div\");\n            if (initElement)\n                initElement(element);\n            \n            this.element.appendChild(element);\n            \n            cell = {\n                element: element,\n                text: \"\",\n                row: row\n            };\n        }\n        cell.row = row;\n        \n        return cell;\n    };\n    \n}).call(Lines.prototype);\n\nexports.Lines = Lines;\n\n});\n\ndefine(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\n\nvar Gutter = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_gutter-layer\";\n    parentEl.appendChild(this.element);\n    this.setShowFoldWidgets(this.$showFoldWidgets);\n    \n    this.gutterWidth = 0;\n\n    this.$annotations = [];\n    this.$updateAnnotations = this.$updateAnnotations.bind(this);\n    \n    this.$lines = new Lines(this.element);\n    this.$lines.$offsetCoefficient = 1;\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.setSession = function(session) {\n        if (this.session)\n            this.session.removeEventListener(\"change\", this.$updateAnnotations);\n        this.session = session;\n        if (session)\n            session.on(\"change\", this.$updateAnnotations);\n    };\n\n    this.addGutterDecoration = function(row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n        this.session.addGutterDecoration(row, className);\n    };\n\n    this.removeGutterDecoration = function(row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n        this.session.removeGutterDecoration(row, className);\n    };\n\n    this.setAnnotations = function(annotations) {\n        this.$annotations = [];\n        for (var i = 0; i < annotations.length; i++) {\n            var annotation = annotations[i];\n            var row = annotation.row;\n            var rowInfo = this.$annotations[row];\n            if (!rowInfo)\n                rowInfo = this.$annotations[row] = {text: []};\n           \n            var annoText = annotation.text;\n            annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n            if (rowInfo.text.indexOf(annoText) === -1)\n                rowInfo.text.push(annoText);\n\n            var type = annotation.type;\n            if (type == \"error\")\n                rowInfo.className = \" ace_error\";\n            else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n                rowInfo.className = \" ace_warning\";\n            else if (type == \"info\" && (!rowInfo.className))\n                rowInfo.className = \" ace_info\";\n        }\n    };\n\n    this.$updateAnnotations = function (delta) {\n        if (!this.$annotations.length)\n            return;\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n        } else if (delta.action == 'remove') {\n            this.$annotations.splice(firstRow, len + 1, null);\n        } else {\n            var args = new Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.$annotations.splice.apply(this.$annotations, args);\n        }\n    };\n\n    this.update = function(config) {\n        this.config = config;\n        \n        var session = this.session;\n        var firstRow = config.firstRow;\n        var lastRow = Math.min(config.lastRow + config.gutterOffset,  // needed to compensate for hor scollbar\n            session.getLength() - 1);\n            \n        this.oldLastRow = lastRow;\n        this.config = config;\n        \n        this.$lines.moveContainer(config);\n        this.$updateCursorRow();\n            \n        var fold = session.getNextFoldLine(firstRow);\n        var foldStart = fold ? fold.start.row : Infinity;\n\n        var cell = null;\n        var index = -1;\n        var row = firstRow;\n        \n        while (true) {\n            if (row > foldStart) {\n                row = fold.end.row + 1;\n                fold = session.getNextFoldLine(row, fold);\n                foldStart = fold ? fold.start.row : Infinity;\n            }\n            if (row > lastRow) {\n                while (this.$lines.getLength() > index + 1)\n                    this.$lines.pop();\n                    \n                break;\n            }\n\n            cell = this.$lines.get(++index);\n            if (cell) {\n                cell.row = row;\n            } else {\n                cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n                this.$lines.push(cell);\n            }\n\n            this.$renderCell(cell, config, fold, row);\n            row++;\n        }\n        \n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n    };\n\n    this.$updateGutterWidth = function(config) {\n        var session = this.session;\n        \n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        \n        var firstLineNumber = session.$firstLineNumber;\n        var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n        \n        if (this.$fixedWidth || session.$useWrapMode)\n            lastLineText = session.getLength() + firstLineNumber - 1;\n\n        var gutterWidth = gutterRenderer \n            ? gutterRenderer.getWidth(session, lastLineText, config)\n            : lastLineText.toString().length * config.characterWidth;\n        \n        var padding = this.$padding || this.$computePadding();\n        gutterWidth += padding.left + padding.right;\n        if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n            this.gutterWidth = gutterWidth;\n            this.element.parentNode.style.width = \n            this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n            this._signal(\"changeGutterWidth\", gutterWidth);\n        }\n    };\n    \n    this.$updateCursorRow = function() {\n        if (!this.$highlightGutterLine)\n            return;\n            \n        var position = this.session.selection.getCursor();\n        if (this.$cursorRow === position.row)\n            return;\n        \n        this.$cursorRow = position.row;\n    };\n    \n    this.updateLineHighlight = function() {\n        if (!this.$highlightGutterLine)\n            return;\n        var row = this.session.selection.cursor.row;\n        this.$cursorRow = row;\n\n        if (this.$cursorCell && this.$cursorCell.row == row)\n            return;\n        if (this.$cursorCell)\n            this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n        var cells = this.$lines.cells;\n        this.$cursorCell = null;\n        for (var i = 0; i < cells.length; i++) {\n            var cell = cells[i];\n            if (cell.row >= this.$cursorRow) {\n                if (cell.row > this.$cursorRow) {\n                    var fold = this.session.getFoldLine(this.$cursorRow);\n                    if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n                        cell = cells[i - 1];\n                    else\n                        break;\n                }\n                cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n                this.$cursorCell = cell;\n                break;\n            }\n        }\n    };\n    \n    this.scrollLines = function(config) {\n        var oldConfig = this.config;\n        this.config = config;\n        \n        this.$updateCursorRow();\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n        \n        this.$lines.moveContainer(config);\n\n        var lastRow = Math.min(config.lastRow + config.gutterOffset,  // needed to compensate for hor scollbar\n            this.session.getLength() - 1);\n        var oldLastRow = this.oldLastRow;\n        this.oldLastRow = lastRow;\n        \n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n                this.$lines.shift();\n\n        if (oldLastRow > lastRow)\n            for (var row=this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row>0; row--)\n                this.$lines.pop();\n\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n\n        if (lastRow > oldLastRow) {\n            this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n        }\n        \n        this.updateLineHighlight();\n        \n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n    };\n\n    this.$renderLines = function(config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n\n            var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n            this.$renderCell(cell, config, foldLine, row);\n            fragment.push(cell);\n\n            row++;\n        }\n        return fragment;\n    };\n    \n    this.$renderCell = function(cell, config, fold, row) {\n        var element = cell.element;\n        \n        var session = this.session;\n        \n        var textNode = element.childNodes[0];\n        var foldWidget = element.childNodes[1];\n\n        var firstLineNumber = session.$firstLineNumber;\n        \n        var breakpoints = session.$breakpoints;\n        var decorations = session.$decorations;\n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n        var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n        \n        var className = \"ace_gutter-cell \";\n        if (this.$highlightGutterLine) {\n            if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart &&  this.$cursorRow <= fold.end.row)) {\n                className += \"ace_gutter-active-line \";\n                if (this.$cursorCell != cell) {\n                    if (this.$cursorCell)\n                        this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n                    this.$cursorCell = cell;\n                }\n            }\n        }\n        \n        if (breakpoints[row])\n            className += breakpoints[row];\n        if (decorations[row])\n            className += decorations[row];\n        if (this.$annotations[row])\n            className += this.$annotations[row].className;\n        if (element.className != className)\n            element.className = className;\n\n        if (foldWidgets) {\n            var c = foldWidgets[row];\n            if (c == null)\n                c = foldWidgets[row] = session.getFoldWidget(row);\n        }\n\n        if (c) {\n            var className = \"ace_fold-widget ace_\" + c;\n            if (c == \"start\" && row == foldStart && row < fold.end.row)\n                className += \" ace_closed\";\n            else\n                className += \" ace_open\";\n            if (foldWidget.className != className)\n                foldWidget.className = className;\n\n            var foldHeight = config.lineHeight + \"px\";\n            dom.setStyle(foldWidget.style, \"height\", foldHeight);\n            dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n        } else {\n            if (foldWidget) {\n                dom.setStyle(foldWidget.style, \"display\", \"none\");\n            }\n        }\n        \n        var text = (gutterRenderer\n            ? gutterRenderer.getText(session, row)\n            : row + firstLineNumber).toString();\n            \n        if (text !== textNode.data) {\n            textNode.data = text;\n        }\n        \n        dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n        dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n        \n        cell.text = text;\n        return cell;\n    };\n\n    this.$fixedWidth = false;\n    \n    this.$highlightGutterLine = true;\n    this.$renderer = \"\";\n    this.setHighlightGutterLine = function(highlightGutterLine) {\n        this.$highlightGutterLine = highlightGutterLine;\n    };\n    \n    this.$showLineNumbers = true;\n    this.$renderer = \"\";\n    this.setShowLineNumbers = function(show) {\n        this.$renderer = !show && {\n            getWidth: function() {return 0;},\n            getText: function() {return \"\";}\n        };\n    };\n    \n    this.getShowLineNumbers = function() {\n        return this.$showLineNumbers;\n    };\n    \n    this.$showFoldWidgets = true;\n    this.setShowFoldWidgets = function(show) {\n        if (show)\n            dom.addCssClass(this.element, \"ace_folding-enabled\");\n        else\n            dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n        this.$showFoldWidgets = show;\n        this.$padding = null;\n    };\n    \n    this.getShowFoldWidgets = function() {\n        return this.$showFoldWidgets;\n    };\n\n    this.$computePadding = function() {\n        if (!this.element.firstChild)\n            return {left: 0, right: 0};\n        var style = dom.computedStyle(this.element.firstChild);\n        this.$padding = {};\n        this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n            + (parseInt(style.paddingLeft) || 0) + 1;\n        this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n            + (parseInt(style.paddingRight) || 0);\n        return this.$padding;\n    };\n\n    this.getRegion = function(point) {\n        var padding = this.$padding || this.$computePadding();\n        var rect = this.element.getBoundingClientRect();\n        if (point.x < padding.left + rect.left)\n            return \"markers\";\n        if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n            return \"foldWidgets\";\n    };\n\n}).call(Gutter.prototype);\n\nfunction onCreateCell(element) {\n    var textNode = document.createTextNode('');\n    element.appendChild(textNode);\n    \n    var foldWidget = dom.createElement(\"span\");\n    element.appendChild(foldWidget);\n    \n    return element;\n}\n\nexports.Gutter = Gutter;\n\n});\n\ndefine(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_marker-layer\";\n    parentEl.appendChild(this.element);\n};\n\n(function() {\n\n    this.$padding = 0;\n\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n    };\n    this.setSession = function(session) {\n        this.session = session;\n    };\n    \n    this.setMarkers = function(markers) {\n        this.markers = markers;\n    };\n    \n    this.elt = function(className, css) {\n        var x = this.i != -1 && this.element.childNodes[this.i];\n        if (!x) {\n            x = document.createElement(\"div\");\n            this.element.appendChild(x);\n            this.i = -1;\n        } else {\n            this.i++;\n        }\n        x.style.cssText = css;\n        x.className = className;\n    };\n\n    this.update = function(config) {\n        if (!config) return;\n\n        this.config = config;\n\n        this.i = 0;\n        var html;\n        for (var key in this.markers) {\n            var marker = this.markers[key];\n\n            if (!marker.range) {\n                marker.update(html, this, this.session, config);\n                continue;\n            }\n\n            var range = marker.range.clipRows(config.firstRow, config.lastRow);\n            if (range.isEmpty()) continue;\n\n            range = range.toScreenRange(this.session);\n            if (marker.renderer) {\n                var top = this.$getTop(range.start.row, config);\n                var left = this.$padding + range.start.column * config.characterWidth;\n                marker.renderer(html, range, left, top, config);\n            } else if (marker.type == \"fullLine\") {\n                this.drawFullLineMarker(html, range, marker.clazz, config);\n            } else if (marker.type == \"screenLine\") {\n                this.drawScreenLineMarker(html, range, marker.clazz, config);\n            } else if (range.isMultiLine()) {\n                if (marker.type == \"text\")\n                    this.drawTextMarker(html, range, marker.clazz, config);\n                else\n                    this.drawMultiLineMarker(html, range, marker.clazz, config);\n            } else {\n                this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n            }\n        }\n        if (this.i !=-1) {\n            while (this.i < this.element.childElementCount)\n                this.element.removeChild(this.element.lastChild);\n        }\n    };\n\n    this.$getTop = function(row, layerConfig) {\n        return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n    };\n\n    function getBorderClass(tl, tr, br, bl) {\n        return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n    }\n    this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n        var session = this.session;\n        var start = range.start.row;\n        var end = range.end.row;\n        var row = start;\n        var prev = 0; \n        var curr = 0;\n        var next = session.getScreenLastRowColumn(row);\n        var lineRange = new Range(row, range.start.column, row, curr);\n        for (; row <= end; row++) {\n            lineRange.start.row = lineRange.end.row = row;\n            lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n            lineRange.end.column = next;\n            prev = curr;\n            curr = next;\n            next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n            this.drawSingleLineMarker(stringBuilder, lineRange, \n                clazz + (row == start  ? \" ace_start\" : \"\") + \" ace_br\"\n                    + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\n                layerConfig, row == end ? 0 : 1, extraStyle);\n        }\n    };\n    this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var padding = this.$padding;\n        var height = config.lineHeight;\n        var top = this.$getTop(range.start.row, config);\n        var left = padding + range.start.column * config.characterWidth;\n        extraStyle = extraStyle || \"\";\n\n        if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n           var range1 = range.clone();\n           range1.end.row = range1.start.row;\n           range1.end.column = this.session.getLine(range1.start.row).length;\n           this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n        } else {\n            this.elt(\n                clazz + \" ace_br1 ace_start\",\n                \"height:\"+ height+ \"px;\"+ \"right:0;\"+ \"top:\"+top+ \"px;left:\"+ left+ \"px;\" + (extraStyle || \"\")\n            );\n        }\n        if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n           var range1 = range.clone();\n           range1.start.row = range1.end.row;\n           range1.start.column = 0;\n           this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n        } else {\n            top = this.$getTop(range.end.row, config);\n            var width = range.end.column * config.characterWidth;\n\n            this.elt(\n                clazz + \" ace_br12\",\n                \"height:\"+ height+ \"px;\"+\n                \"width:\"+ width+ \"px;\"+\n                \"top:\"+ top+ \"px;\"+\n                \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n            );\n        }\n        height = (range.end.row - range.start.row - 1) * config.lineHeight;\n        if (height <= 0)\n            return;\n        top = this.$getTop(range.start.row + 1, config);\n        \n        var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n        this.elt(\n            clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"),\n            \"height:\"+ height+ \"px;\"+\n            \"right:0;\"+\n            \"top:\"+ top+ \"px;\"+\n            \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n        );\n    };\n    this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        if (this.session.$bidiHandler.isBidiRow(range.start.row))\n            return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n        var height = config.lineHeight;\n        var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n        var top = this.$getTop(range.start.row, config);\n        var left = this.$padding + range.start.column * config.characterWidth;\n\n        this.elt(\n            clazz,\n            \"height:\"+ height+ \"px;\"+\n            \"width:\"+ width+ \"px;\"+\n            \"top:\"+ top+ \"px;\"+\n            \"left:\"+ left+ \"px;\"+ (extraStyle || \"\")\n        );\n    };\n    this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n        var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n        selections.forEach(function(selection) {\n            this.elt(\n                clazz,\n                \"height:\" + height + \"px;\" +\n                \"width:\" + selection.width + (extraLength || 0) + \"px;\" +\n                \"top:\" + top + \"px;\" +\n                \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\")\n            );\n        }, this);\n    };\n\n    this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        if (range.start.row != range.end.row)\n            height += this.$getTop(range.end.row, config) - top;\n\n        this.elt(\n            clazz,\n            \"height:\"+ height+ \"px;\"+\n            \"top:\"+ top+ \"px;\"+\n            \"left:0;right:0;\"+ (extraStyle || \"\")\n        );\n    };\n    \n    this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n\n        this.elt(\n            clazz,\n            \"height:\"+ height+ \"px;\"+\n            \"top:\"+ top+ \"px;\"+\n            \"left:0;right:0;\"+ (extraStyle || \"\")\n        );\n    };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\ndefine(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n    this.dom = dom; \n    this.element = this.dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_text-layer\";\n    parentEl.appendChild(this.element);\n    this.$updateEolChar = this.$updateEolChar.bind(this);\n    this.$lines = new Lines(this.element);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.EOF_CHAR = \"\\xB6\";\n    this.EOL_CHAR_LF = \"\\xAC\";\n    this.EOL_CHAR_CRLF = \"\\xa4\";\n    this.EOL_CHAR = this.EOL_CHAR_LF;\n    this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n    this.SPACE_CHAR = \"\\xB7\";\n    this.$padding = 0;\n    this.MAX_LINE_LENGTH = 10000;\n\n    this.$updateEolChar = function() {\n        var doc = this.session.doc;\n        var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n        var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n        if (this.EOL_CHAR != EOL_CHAR) {\n            this.EOL_CHAR = EOL_CHAR;\n            return true;\n        }\n    };\n\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n        this.element.style.margin = \"0 \" + padding + \"px\";\n    };\n\n    this.getLineHeight = function() {\n        return this.$fontMetrics.$characterSize.height || 0;\n    };\n\n    this.getCharacterWidth = function() {\n        return this.$fontMetrics.$characterSize.width || 0;\n    };\n    \n    this.$setFontMetrics = function(measure) {\n        this.$fontMetrics = measure;\n        this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n            this._signal(\"changeCharacterSize\", e);\n        }.bind(this));\n        this.$pollSizeChanges();\n    };\n\n    this.checkForSizeChanges = function() {\n        this.$fontMetrics.checkForSizeChanges();\n    };\n    this.$pollSizeChanges = function() {\n        return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n    };\n    this.setSession = function(session) {\n        this.session = session;\n        if (session)\n            this.$computeTabString();\n    };\n\n    this.showInvisibles = false;\n    this.setShowInvisibles = function(showInvisibles) {\n        if (this.showInvisibles == showInvisibles)\n            return false;\n\n        this.showInvisibles = showInvisibles;\n        this.$computeTabString();\n        return true;\n    };\n\n    this.displayIndentGuides = true;\n    this.setDisplayIndentGuides = function(display) {\n        if (this.displayIndentGuides == display)\n            return false;\n\n        this.displayIndentGuides = display;\n        this.$computeTabString();\n        return true;\n    };\n\n    this.$tabStrings = [];\n    this.onChangeTabSize =\n    this.$computeTabString = function() {\n        var tabSize = this.session.getTabSize();\n        this.tabSize = tabSize;\n        var tabStr = this.$tabStrings = [0];\n        for (var i = 1; i < tabSize + 1; i++) {\n            if (this.showInvisibles) {\n                var span = this.dom.createElement(\"span\");\n                span.className = \"ace_invisible ace_invisible_tab\";\n                span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n                tabStr.push(span);\n            } else {\n                tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n            }\n        }\n        if (this.displayIndentGuides) {\n            this.$indentGuideRe =  /\\s\\S| \\t|\\t |\\s$/;\n            var className = \"ace_indent-guide\";\n            var spaceClass = \"\";\n            var tabClass = \"\";\n            if (this.showInvisibles) {\n                className += \" ace_invisible\";\n                spaceClass = \" ace_invisible_space\";\n                tabClass = \" ace_invisible_tab\";\n                var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n                var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n            } else {\n                var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n                var tabContent = spaceContent;\n            }\n\n            var span = this.dom.createElement(\"span\");\n            span.className = className + spaceClass;\n            span.textContent = spaceContent;\n            this.$tabStrings[\" \"] = span;\n            \n            var span = this.dom.createElement(\"span\");\n            span.className = className + tabClass;\n            span.textContent = tabContent;\n            this.$tabStrings[\"\\t\"] = span;\n        }\n    };\n\n    this.updateLines = function(config, firstRow, lastRow) {\n        if (this.config.lastRow != config.lastRow ||\n            this.config.firstRow != config.firstRow) {\n            return this.update(config);\n        }\n        \n        this.config = config;\n\n        var first = Math.max(firstRow, config.firstRow);\n        var last = Math.min(lastRow, config.lastRow);\n\n        var lineElements = this.element.childNodes;\n        var lineElementsIdx = 0;\n\n        for (var row = config.firstRow; row < first; row++) {\n            var foldLine = this.session.getFoldLine(row);\n            if (foldLine) {\n                if (foldLine.containsRow(first)) {\n                    first = foldLine.start.row;\n                    break;\n                } else {\n                    row = foldLine.end.row;\n                }\n            }\n            lineElementsIdx ++;\n        }\n\n        var heightChanged = false;\n        var row = first;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row :Infinity;\n            }\n            if (row > last)\n                break;\n\n            var lineElement = lineElements[lineElementsIdx++];\n            if (lineElement) {\n                this.dom.removeChildren(lineElement);\n                this.$renderLine(\n                    lineElement, row, row == foldStart ? foldLine : false\n                );\n                var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n                if (lineElement.style.height != height) {\n                    heightChanged = true;\n                    lineElement.style.height = height;\n                }\n            }\n            row++;\n        }\n        if (heightChanged) {\n            while (lineElementsIdx < this.$lines.cells.length) {\n                var cell = this.$lines.cells[lineElementsIdx++];\n                cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n            }\n        }\n    };\n\n    this.scrollLines = function(config) {\n        var oldConfig = this.config;\n        this.config = config;\n\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n            \n        this.$lines.moveContainer(config);\n        \n        var lastRow = config.lastRow;\n        var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n\n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n\n        if (!oldConfig || oldConfig.lastRow < config.firstRow)\n            return this.update(config);\n\n        if (config.lastRow < oldConfig.firstRow)\n            return this.update(config);\n\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n                this.$lines.shift();\n\n        if (oldConfig.lastRow > config.lastRow)\n            for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n                this.$lines.pop();\n\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n\n        if (config.lastRow > oldConfig.lastRow) {\n            this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n        }\n    };\n\n    this.$renderLinesFragment = function(config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n\n            var line = this.$lines.createCell(row, config, this.session);\n            \n            var lineEl = line.element;\n            this.dom.removeChildren(lineEl);\n            dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n            dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n            this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n\n            if (this.$useLineGroups()) {\n                lineEl.className = \"ace_line_group\";\n            } else {\n                lineEl.className = \"ace_line\";\n            }\n            fragment.push(line);\n\n            row++;\n        }\n        return fragment;\n    };\n\n    this.update = function(config) {\n        this.$lines.moveContainer(config);\n        \n        this.config = config;\n\n        var firstRow = config.firstRow;\n        var lastRow = config.lastRow;\n\n        var lines = this.$lines;\n        while (lines.getLength())\n            lines.pop();\n            \n        lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n    };\n\n    this.$textToken = {\n        \"text\": true,\n        \"rparen\": true,\n        \"lparen\": true\n    };\n\n    this.$renderToken = function(parent, screenColumn, token, value) {\n        var self = this;\n        var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n        \n        var valueFragment = this.dom.createFragment(this.element);\n\n        var m;\n        var i = 0;\n        while (m = re.exec(value)) {\n            var tab = m[1];\n            var simpleSpace = m[2];\n            var controlCharacter = m[3];\n            var cjkSpace = m[4];\n            var cjk = m[5];\n            \n            if (!self.showInvisibles && simpleSpace)\n                continue;\n\n            var before = i != m.index ? value.slice(i, m.index) : \"\";\n\n            i = m.index + m[0].length;\n            \n            if (before) {\n                valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n            }\n                \n            if (tab) {\n                var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n                valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n                screenColumn += tabSize - 1;\n            } else if (simpleSpace) {\n                if (self.showInvisibles) {\n                    var span = this.dom.createElement(\"span\");\n                    span.className = \"ace_invisible ace_invisible_space\";\n                    span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n                    valueFragment.appendChild(span);\n                } else {\n                    valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\n                }\n            } else if (controlCharacter) {\n                var span = this.dom.createElement(\"span\");\n                span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n                span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n                valueFragment.appendChild(span);\n            } else if (cjkSpace) {\n                var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\n                screenColumn += 1;\n                \n                var span = this.dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n                span.textContent = self.showInvisibles ? self.SPACE_CHAR : \"\";\n                valueFragment.appendChild(span);\n            } else if (cjk) {\n                screenColumn += 1;\n                var span = dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = \"ace_cjk\";\n                span.textContent = cjk;\n                valueFragment.appendChild(span);\n            }\n        }\n        \n        valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n\n        if (!this.$textToken[token.type]) {\n            var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n            var span = this.dom.createElement(\"span\");\n            if (token.type == \"fold\")\n                span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n                \n            span.className = classes;\n            span.appendChild(valueFragment);\n            \n            parent.appendChild(span);\n        }\n        else {\n            parent.appendChild(valueFragment);\n        }\n        \n        return screenColumn + value.length;\n    };\n\n    this.renderIndentGuide = function(parent, value, max) {\n        var cols = value.search(this.$indentGuideRe);\n        if (cols <= 0 || cols >= max)\n            return value;\n        if (value[0] == \" \") {\n            cols -= cols % this.tabSize;\n            var count = cols/this.tabSize;\n            for (var i=0; i<count; i++) {\n                parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n            }\n            return value.substr(cols);\n        } else if (value[0] == \"\\t\") {\n            for (var i=0; i<cols; i++) {\n                parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n            }\n            return value.substr(cols);\n        }\n        return value;\n    };\n\n    this.$createLineElement = function(parent) {\n        var lineEl = this.dom.createElement(\"div\");\n        lineEl.className = \"ace_line\";\n        lineEl.style.height = this.config.lineHeight + \"px\";\n        \n        return lineEl;\n    };\n\n    this.$renderWrappedLine = function(parent, tokens, splits) {\n        var chars = 0;\n        var split = 0;\n        var splitChars = splits[0];\n        var screenColumn = 0;\n\n        var lineEl = this.$createLineElement();\n        parent.appendChild(lineEl);\n        \n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                chars = value.length;\n                value = this.renderIndentGuide(lineEl, value, splitChars);\n                if (!value)\n                    continue;\n                chars -= value.length;\n            }\n\n            if (chars + value.length < splitChars) {\n                screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n                chars += value.length;\n            } else {\n                while (chars + value.length >= splitChars) {\n                    screenColumn = this.$renderToken(\n                        lineEl, screenColumn,\n                        token, value.substring(0, splitChars - chars)\n                    );\n                    value = value.substring(splitChars - chars);\n                    chars = splitChars;\n\n                    lineEl = this.$createLineElement();\n                    parent.appendChild(lineEl);\n\n                    lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n\n                    split ++;\n                    screenColumn = 0;\n                    splitChars = splits[split] || Number.MAX_VALUE;\n                }\n                if (value.length != 0) {\n                    chars += value.length;\n                    screenColumn = this.$renderToken(\n                        lineEl, screenColumn, token, value\n                    );\n                }\n            }\n        }\n    };\n\n    this.$renderSimpleLine = function(parent, tokens) {\n        var screenColumn = 0;\n        var token = tokens[0];\n        var value = token.value;\n        if (this.displayIndentGuides)\n            value = this.renderIndentGuide(parent, value);\n        if (value)\n            screenColumn = this.$renderToken(parent, screenColumn, token, value);\n        for (var i = 1; i < tokens.length; i++) {\n            token = tokens[i];\n            value = token.value;\n            if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n                return this.$renderOverflowMessage(parent, screenColumn, token, value);\n            screenColumn = this.$renderToken(parent, screenColumn, token, value);\n        }\n    };\n    \n    this.$renderOverflowMessage = function(parent, screenColumn, token, value) {\n        this.$renderToken(parent, screenColumn, token,\n            value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n            \n        var overflowEl = this.dom.createElement(\"span\");\n        overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n        overflowEl.style.position = \"absolute\";\n        overflowEl.style.right = \"0\";\n        overflowEl.textContent = \"<click to see more...>\";\n        \n        parent.appendChild(overflowEl);        \n    };\n    this.$renderLine = function(parent, row, foldLine) {\n        if (!foldLine && foldLine != false)\n            foldLine = this.session.getFoldLine(row);\n\n        if (foldLine)\n            var tokens = this.$getFoldLineTokens(row, foldLine);\n        else\n            var tokens = this.session.getTokens(row);\n\n        var lastLineEl = parent;\n        if (tokens.length) {\n            var splits = this.session.getRowSplitData(row);\n            if (splits && splits.length) {\n                this.$renderWrappedLine(parent, tokens, splits);\n                var lastLineEl = parent.lastChild;\n            } else {\n                var lastLineEl = parent;\n                if (this.$useLineGroups()) {\n                    lastLineEl = this.$createLineElement();\n                    parent.appendChild(lastLineEl);\n                }\n                this.$renderSimpleLine(lastLineEl, tokens);\n            }\n        } else if (this.$useLineGroups()) {\n            lastLineEl = this.$createLineElement();\n            parent.appendChild(lastLineEl);\n        }\n\n        if (this.showInvisibles && lastLineEl) {\n            if (foldLine)\n                row = foldLine.end.row;\n\n            var invisibleEl = this.dom.createElement(\"span\");\n            invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n            invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n            \n            lastLineEl.appendChild(invisibleEl);\n        }\n    };\n\n    this.$getFoldLineTokens = function(row, foldLine) {\n        var session = this.session;\n        var renderTokens = [];\n\n        function addTokens(tokens, from, to) {\n            var idx = 0, col = 0;\n            while ((col + tokens[idx].value.length) < from) {\n                col += tokens[idx].value.length;\n                idx++;\n\n                if (idx == tokens.length)\n                    return;\n            }\n            if (col != from) {\n                var value = tokens[idx].value.substring(from - col);\n                if (value.length > (to - from))\n                    value = value.substring(0, to - from);\n\n                renderTokens.push({\n                    type: tokens[idx].type,\n                    value: value\n                });\n\n                col = from + value.length;\n                idx += 1;\n            }\n\n            while (col < to && idx < tokens.length) {\n                var value = tokens[idx].value;\n                if (value.length + col > to) {\n                    renderTokens.push({\n                        type: tokens[idx].type,\n                        value: value.substring(0, to - col)\n                    });\n                } else\n                    renderTokens.push(tokens[idx]);\n                col += value.length;\n                idx += 1;\n            }\n        }\n\n        var tokens = session.getTokens(row);\n        foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n            if (placeholder != null) {\n                renderTokens.push({\n                    type: \"fold\",\n                    value: placeholder\n                });\n            } else {\n                if (isNewRow)\n                    tokens = session.getTokens(row);\n\n                if (tokens.length)\n                    addTokens(tokens, lastColumn, column);\n            }\n        }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n        return renderTokens;\n    };\n\n    this.$useLineGroups = function() {\n        return this.session.getUseWrapMode();\n    };\n\n    this.destroy = function() {};\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\ndefine(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Cursor = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_cursor-layer\";\n    parentEl.appendChild(this.element);\n    \n    this.isVisible = false;\n    this.isBlinking = true;\n    this.blinkInterval = 1000;\n    this.smoothBlinking = false;\n\n    this.cursors = [];\n    this.cursor = this.addCursor();\n    dom.addCssClass(this.element, \"ace_hidden-cursors\");\n    this.$updateCursors = this.$updateOpacity.bind(this);\n};\n\n(function() {\n    \n    this.$updateOpacity = function(val) {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--; )\n            dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n    };\n\n    this.$startCssAnimation = function() {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--; )\n            cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n\n        setTimeout(function() {\n            dom.addCssClass(this.element, \"ace_animate-blinking\");\n        }.bind(this));\n    };\n    \n    this.$stopCssAnimation = function() {\n        dom.removeCssClass(this.element, \"ace_animate-blinking\");\n    };\n\n    this.$padding = 0;\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n    };\n\n    this.setSession = function(session) {\n        this.session = session;\n    };\n\n    this.setBlinking = function(blinking) {\n        if (blinking != this.isBlinking) {\n            this.isBlinking = blinking;\n            this.restartTimer();\n        }\n    };\n\n    this.setBlinkInterval = function(blinkInterval) {\n        if (blinkInterval != this.blinkInterval) {\n            this.blinkInterval = blinkInterval;\n            this.restartTimer();\n        }\n    };\n\n    this.setSmoothBlinking = function(smoothBlinking) {\n        if (smoothBlinking != this.smoothBlinking) {\n            this.smoothBlinking = smoothBlinking;\n            dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n            this.$updateCursors(true);\n            this.restartTimer();\n        }\n    };\n\n    this.addCursor = function() {\n        var el = dom.createElement(\"div\");\n        el.className = \"ace_cursor\";\n        this.element.appendChild(el);\n        this.cursors.push(el);\n        return el;\n    };\n\n    this.removeCursor = function() {\n        if (this.cursors.length > 1) {\n            var el = this.cursors.pop();\n            el.parentNode.removeChild(el);\n            return el;\n        }\n    };\n\n    this.hideCursor = function() {\n        this.isVisible = false;\n        dom.addCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n\n    this.showCursor = function() {\n        this.isVisible = true;\n        dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n\n    this.restartTimer = function() {\n        var update = this.$updateCursors;\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n        this.$stopCssAnimation();\n\n        if (this.smoothBlinking) {\n            dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n        }\n        \n        update(true);\n\n        if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n            this.$stopCssAnimation();\n            return;\n        }\n\n        if (this.smoothBlinking) {\n            setTimeout(function(){\n                dom.addCssClass(this.element, \"ace_smooth-blinking\");\n            }.bind(this));\n        }\n        \n        if (dom.HAS_CSS_ANIMATION) {\n            this.$startCssAnimation();\n        } else {\n            var blink = function(){\n                this.timeoutId = setTimeout(function() {\n                    update(false);\n                }, 0.6 * this.blinkInterval);\n            }.bind(this);\n    \n            this.intervalId = setInterval(function() {\n                update(true);\n                blink();\n            }, this.blinkInterval);\n            blink();\n        }\n    };\n\n    this.getPixelPosition = function(position, onScreen) {\n        if (!this.config || !this.session)\n            return {left : 0, top : 0};\n\n        if (!position)\n            position = this.session.selection.getCursor();\n        var pos = this.session.documentToScreenPosition(position);\n        var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n            ? this.session.$bidiHandler.getPosLeft(pos.column)\n            : pos.column * this.config.characterWidth);\n\n        var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n            this.config.lineHeight;\n\n        return {left : cursorLeft, top : cursorTop};\n    };\n\n    this.isCursorInView = function(pixelPos, config) {\n        return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n    };\n\n    this.update = function(config) {\n        this.config = config;\n\n        var selections = this.session.$selectionMarkers;\n        var i = 0, cursorIndex = 0;\n\n        if (selections === undefined || selections.length === 0){\n            selections = [{cursor: null}];\n        }\n\n        for (var i = 0, n = selections.length; i < n; i++) {\n            var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n            if ((pixelPos.top > config.height + config.offset ||\n                 pixelPos.top < 0) && i > 1) {\n                continue;\n            }\n\n            var element = this.cursors[cursorIndex++] || this.addCursor();\n            var style = element.style;\n            \n            if (!this.drawCursor) {\n                if (!this.isCursorInView(pixelPos, config)) {\n                    dom.setStyle(style, \"display\", \"none\");\n                } else {\n                    dom.setStyle(style, \"display\", \"block\");\n                    dom.translate(element, pixelPos.left, pixelPos.top);\n                    dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n                    dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n                }\n            } else {\n                this.drawCursor(element, pixelPos, config, selections[i], this.session);\n            }\n        }\n        while (this.cursors.length > cursorIndex)\n            this.removeCursor();\n\n        var overwrite = this.session.getOverwrite();\n        this.$setOverwrite(overwrite);\n        this.$pixelPos = pixelPos;\n        this.restartTimer();\n    };\n    \n    this.drawCursor = null;\n\n    this.$setOverwrite = function(overwrite) {\n        if (overwrite != this.overwrite) {\n            this.overwrite = overwrite;\n            if (overwrite)\n                dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n            else\n                dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n        }\n    };\n\n    this.destroy = function() {\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n    };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\ndefine(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n    this.inner = dom.createElement(\"div\");\n    this.inner.className = \"ace_scrollbar-inner\";\n    this.element.appendChild(this.inner);\n\n    parent.appendChild(this.element);\n\n    this.setVisible(false);\n    this.skipEvent = false;\n\n    event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n    event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n\n    this.setVisible = function(isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollTop = 0;\n    this.scrollHeight = 0;\n    renderer.$scrollbarWidth = \n    this.width = dom.scrollbarWidth(parent.ownerDocument);\n    this.inner.style.width =\n    this.element.style.width = (this.width || 15) + 5 + \"px\";\n    this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n    this.classSuffix = '-v';\n    this.onScroll = function() {\n        if (!this.skipEvent) {\n            this.scrollTop = this.element.scrollTop;\n            if (this.coeff != 1) {\n                var h = this.element.clientHeight / this.scrollHeight;\n                this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n            }\n            this._emit(\"scroll\", {data: this.scrollTop});\n        }\n        this.skipEvent = false;\n    };\n    this.getWidth = function() {\n        return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n    };\n    this.setHeight = function(height) {\n        this.element.style.height = height + \"px\";\n    };\n    this.setInnerHeight = \n    this.setScrollHeight = function(height) {\n        this.scrollHeight = height;\n        if (height > MAX_SCROLL_H) {\n            this.coeff = MAX_SCROLL_H / height;\n            height = MAX_SCROLL_H;\n        } else if (this.coeff != 1) {\n            this.coeff = 1;\n        }\n        this.inner.style.height = height + \"px\";\n    };\n    this.setScrollTop = function(scrollTop) {\n        if (this.scrollTop != scrollTop) {\n            this.skipEvent = true;\n            this.scrollTop = scrollTop;\n            this.element.scrollTop = scrollTop * this.coeff;\n        }\n    };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollLeft = 0;\n    this.height = renderer.$scrollbarWidth;\n    this.inner.style.height =\n    this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n    this.classSuffix = '-h';\n    this.onScroll = function() {\n        if (!this.skipEvent) {\n            this.scrollLeft = this.element.scrollLeft;\n            this._emit(\"scroll\", {data: this.scrollLeft});\n        }\n        this.skipEvent = false;\n    };\n    this.getHeight = function() {\n        return this.isVisible ? this.height : 0;\n    };\n    this.setWidth = function(width) {\n        this.element.style.width = width + \"px\";\n    };\n    this.setInnerWidth = function(width) {\n        this.inner.style.width = width + \"px\";\n    };\n    this.setScrollWidth = function(width) {\n        this.inner.style.width = width + \"px\";\n    };\n    this.setScrollLeft = function(scrollLeft) {\n        if (this.scrollLeft != scrollLeft) {\n            this.skipEvent = true;\n            this.scrollLeft = this.element.scrollLeft = scrollLeft;\n        }\n    };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\ndefine(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n    this.onRender = onRender;\n    this.pending = false;\n    this.changes = 0;\n    this.$recursionLimit = 2;\n    this.window = win || window;\n    var _self = this;\n    this._flush = function(ts) {\n        _self.pending = false;\n        var changes = _self.changes;\n\n        if (changes) {\n            event.blockIdle(100);\n            _self.changes = 0;\n            _self.onRender(changes);\n        }\n        \n        if (_self.changes) {\n            if (_self.$recursionLimit-- < 0) return;\n            _self.schedule();\n        } else {\n            _self.$recursionLimit = 2;\n        }\n    };\n};\n\n(function() {\n\n    this.schedule = function(change) {\n        this.changes = this.changes | change;\n        if (this.changes && !this.pending) {\n            event.nextFrame(this._flush);\n            this.pending = true;\n        }\n    };\n\n    this.clear = function(change) {\n        var changes = this.changes;\n        this.changes = 0;\n        return changes;\n    };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\ndefine(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 256;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n    this.el = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.el.style, true);\n    \n    this.$main = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$main.style);\n    \n    this.$measureNode = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$measureNode.style);\n    \n    \n    this.el.appendChild(this.$main);\n    this.el.appendChild(this.$measureNode);\n    parentEl.appendChild(this.el);\n    \n    this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n    \n    this.$characterSize = {width: 0, height: 0};\n    \n    \n    if (USE_OBSERVER)\n        this.$addObserver();\n    else\n        this.checkForSizeChanges();\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n        \n    this.$characterSize = {width: 0, height: 0};\n    \n    this.$setMeasureNodeStyles = function(style, isRoot) {\n        style.width = style.height = \"auto\";\n        style.left = style.top = \"0px\";\n        style.visibility = \"hidden\";\n        style.position = \"absolute\";\n        style.whiteSpace = \"pre\";\n\n        if (useragent.isIE < 8) {\n            style[\"font-family\"] = \"inherit\";\n        } else {\n            style.font = \"inherit\";\n        }\n        style.overflow = isRoot ? \"hidden\" : \"visible\";\n    };\n\n    this.checkForSizeChanges = function(size) {\n        if (size === undefined)\n            size = this.$measureSizes();\n        if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n            this.$measureNode.style.fontWeight = \"bold\";\n            var boldSize = this.$measureSizes();\n            this.$measureNode.style.fontWeight = \"\";\n            this.$characterSize = size;\n            this.charSizes = Object.create(null);\n            this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n            this._emit(\"changeCharacterSize\", {data: size});\n        }\n    };\n    \n    this.$addObserver = function() {\n        var self = this;\n        this.$observer = new window.ResizeObserver(function(e) {\n            var rect = e[0].contentRect;\n            self.checkForSizeChanges({\n                height: rect.height,\n                width: rect.width / CHAR_COUNT\n            });\n        });\n        this.$observer.observe(this.$measureNode);\n    };\n\n    this.$pollSizeChanges = function() {\n        if (this.$pollSizeChangesTimer || this.$observer)\n            return this.$pollSizeChangesTimer;\n        var self = this;\n        \n        return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n            self.checkForSizeChanges();\n            event.onIdle(cb, 500);\n        }, 500);\n    };\n    \n    this.setPolling = function(val) {\n        if (val) {\n            this.$pollSizeChanges();\n        } else if (this.$pollSizeChangesTimer) {\n            clearInterval(this.$pollSizeChangesTimer);\n            this.$pollSizeChangesTimer = 0;\n        }\n    };\n\n    this.$measureSizes = function(node) {\n        var size = {\n            height: (node || this.$measureNode).clientHeight,\n            width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n        };\n        if (size.width === 0 || size.height === 0)\n            return null;\n        return size;\n    };\n\n    this.$measureCharWidth = function(ch) {\n        this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n        var rect = this.$main.getBoundingClientRect();\n        return rect.width / CHAR_COUNT;\n    };\n    \n    this.getCharacterWidth = function(ch) {\n        var w = this.charSizes[ch];\n        if (w === undefined) {\n            w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n        }\n        return w;\n    };\n\n    this.destroy = function() {\n        clearInterval(this.$pollSizeChangesTimer);\n        if (this.$observer)\n            this.$observer.disconnect();\n        if (this.el && this.el.parentNode)\n            this.el.parentNode.removeChild(this.el);\n    };\n\n    \n    this.$getZoom = function getZoom(element) {\n        if (!element) return 1;\n        return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n    };\n    this.$initTransformMeasureNodes = function() {\n        var t = function(t, l) {\n            return [\"div\", {\n                style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n            }];\n        };\n        this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n    };\n    this.transformCoordinates = function(clientPos, elPos) {\n        if (clientPos) {\n            var zoom = this.$getZoom(this.el);\n            clientPos = mul(1 / zoom, clientPos);\n        }\n        function solve(l1, l2, r) {\n            var det = l1[1] * l2[0] - l1[0] * l2[1];\n            return [\n                (-l2[1] * r[0] + l2[0] * r[1]) / det,\n                (+l1[1] * r[0] - l1[0] * r[1]) / det\n            ];\n        }\n        function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n        function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n        function mul(a, b) { return [a * b[0], a * b[1]]; }\n\n        if (!this.els)\n            this.$initTransformMeasureNodes();\n        \n        function p(el) {\n            var r = el.getBoundingClientRect();\n            return [r.left, r.top];\n        }\n\n        var a = p(this.els[0]);\n        var b = p(this.els[1]);\n        var c = p(this.els[2]);\n        var d = p(this.els[3]);\n\n        var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n\n        var m1 = mul(1 + h[0], sub(b, a));\n        var m2 = mul(1 + h[1], sub(c, a));\n        \n        if (elPos) {\n            var x = elPos;\n            var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n            var ut = add(mul(x[0], m1), mul(x[1], m2));\n            return  add(mul(1 / k / L, ut), a);\n        }\n        var u = sub(clientPos, a);\n        var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n        return mul(L, f);\n    };\n    \n}).call(FontMetrics.prototype);\n\n});\n\ndefine(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \"\\\n.ace_br1 {border-top-left-radius    : 3px;}\\\n.ace_br2 {border-top-right-radius   : 3px;}\\\n.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}\\\n.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}\\\n.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\\n.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\\n.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\\n.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\ncontain: style size layout;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncontain: style size layout;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\ncontain: strict;\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ncontain: strict;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: transparent;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\n}\\\n.ace_composition_placeholder { color: transparent }\\\n.ace_composition_marker { \\\nborder-bottom: 1px solid;\\\nposition: absolute;\\\nborder-radius: 0;\\\nmargin-top: 1px;\\\n}\\\n[ace_nocontext=true] {\\\ntransform: none!important;\\\nfilter: none!important;\\\nperspective: none!important;\\\nclip-path: none!important;\\\nmask : none!important;\\\ncontain: none!important;\\\nperspective: none!important;\\\nmix-blend-mode: initial!important;\\\nz-index: auto;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\nheight: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\nposition: absolute;\\\nheight: 1000000px;\\\nwidth: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\\ncontain: style size layout;\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_hidpi .ace_text-layer,\\\n.ace_hidpi .ace_gutter-layer,\\\n.ace_hidpi .ace_content,\\\n.ace_hidpi .ace_gutter {\\\ncontain: strict;\\\nwill-change: transform;\\\n}\\\n.ace_hidpi .ace_text-layer > .ace_line, \\\n.ace_hidpi .ace_text-layer > .ace_line_group {\\\ncontain: strict;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_animate-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: step-end;\\\nanimation-name: blink-ace-animate;\\\nanimation-iteration-count: infinite;\\\n}\\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: ease-in-out;\\\nanimation-name: blink-ace-animate-smooth;\\\n}\\\n@keyframes blink-ace-animate {\\\nfrom, to { opacity: 1; }\\\n60% { opacity: 0; }\\\n}\\\n@keyframes blink-ace-animate-smooth {\\\nfrom, to { opacity: 1; }\\\n45% { opacity: 1; }\\\n60% { opacity: 0; }\\\n85% { opacity: 0; }\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block;   \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_inline_button {\\\nborder: 1px solid lightgray;\\\ndisplay: inline-block;\\\nmargin: -1px 8px;\\\npadding: 0 5px;\\\npointer-events: auto;\\\ncursor: pointer;\\\n}\\\n.ace_inline_button:hover {\\\nborder-color: gray;\\\nbackground: rgba(200,200,200,0.2);\\\ndisplay: inline-block;\\\npointer-events: auto;\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n\";\n\nvar useragent = require(\"./lib/useragent\");\nvar HIDE_TEXTAREA = useragent.isIE;\n\ndom.importCssString(editorCss, \"ace_editor.css\");\n\nvar VirtualRenderer = function(container, theme) {\n    var _self = this;\n\n    this.container = container || dom.createElement(\"div\");\n\n    dom.addCssClass(this.container, \"ace_editor\");\n    if (dom.HI_DPI) dom.addCssClass(this.container, \"ace_hidpi\");\n\n    this.setTheme(theme);\n\n    this.$gutter = dom.createElement(\"div\");\n    this.$gutter.className = \"ace_gutter\";\n    this.container.appendChild(this.$gutter);\n    this.$gutter.setAttribute(\"aria-hidden\", true);\n\n    this.scroller = dom.createElement(\"div\");\n    this.scroller.className = \"ace_scroller\";\n    \n    this.container.appendChild(this.scroller);\n\n    this.content = dom.createElement(\"div\");\n    this.content.className = \"ace_content\";\n    this.scroller.appendChild(this.content);\n\n    this.$gutterLayer = new GutterLayer(this.$gutter);\n    this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n    this.$markerBack = new MarkerLayer(this.content);\n\n    var textLayer = this.$textLayer = new TextLayer(this.content);\n    this.canvas = textLayer.element;\n\n    this.$markerFront = new MarkerLayer(this.content);\n\n    this.$cursorLayer = new CursorLayer(this.content);\n    this.$horizScroll = false;\n    this.$vScroll = false;\n\n    this.scrollBar = \n    this.scrollBarV = new VScrollBar(this.container, this);\n    this.scrollBarH = new HScrollBar(this.container, this);\n    this.scrollBarV.addEventListener(\"scroll\", function(e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n    });\n    this.scrollBarH.addEventListener(\"scroll\", function(e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n    });\n\n    this.scrollTop = 0;\n    this.scrollLeft = 0;\n\n    this.cursorPos = {\n        row : 0,\n        column : 0\n    };\n\n    this.$fontMetrics = new FontMetrics(this.container);\n    this.$textLayer.$setFontMetrics(this.$fontMetrics);\n    this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\n        _self.updateCharacterSize();\n        _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n        _self._signal(\"changeCharacterSize\", e);\n    });\n\n    this.$size = {\n        width: 0,\n        height: 0,\n        scrollerHeight: 0,\n        scrollerWidth: 0,\n        $dirty: true\n    };\n\n    this.layerConfig = {\n        width : 1,\n        padding : 0,\n        firstRow : 0,\n        firstRowScreen: 0,\n        lastRow : 0,\n        lineHeight : 0,\n        characterWidth : 0,\n        minHeight : 1,\n        maxHeight : 1,\n        offset : 0,\n        height : 1,\n        gutterOffset: 1\n    };\n    \n    this.scrollMargin = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        v: 0,\n        h: 0\n    };\n    \n    this.margin = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        v: 0,\n        h: 0\n    };\n    \n    this.$keepTextAreaAtCursor = !useragent.isIOS;\n\n    this.$loop = new RenderLoop(\n        this.$renderChanges.bind(this),\n        this.container.ownerDocument.defaultView\n    );\n    this.$loop.schedule(this.CHANGE_FULL);\n\n    this.updateCharacterSize();\n    this.setPadding(4);\n    config.resetOptions(this);\n    config._emit(\"renderer\", this);\n};\n\n(function() {\n\n    this.CHANGE_CURSOR = 1;\n    this.CHANGE_MARKER = 2;\n    this.CHANGE_GUTTER = 4;\n    this.CHANGE_SCROLL = 8;\n    this.CHANGE_LINES = 16;\n    this.CHANGE_TEXT = 32;\n    this.CHANGE_SIZE = 64;\n    this.CHANGE_MARKER_BACK = 128;\n    this.CHANGE_MARKER_FRONT = 256;\n    this.CHANGE_FULL = 512;\n    this.CHANGE_H_SCROLL = 1024;\n\n    oop.implement(this, EventEmitter);\n\n    this.updateCharacterSize = function() {\n        if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n            this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n            this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n        }\n\n        this.layerConfig.characterWidth =\n        this.characterWidth = this.$textLayer.getCharacterWidth();\n        this.layerConfig.lineHeight =\n        this.lineHeight = this.$textLayer.getLineHeight();\n        this.$updatePrintMargin();\n    };\n    this.setSession = function(session) {\n        if (this.session)\n            this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n            \n        this.session = session;\n        if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n            session.setScrollTop(-this.scrollMargin.top);\n\n        this.$cursorLayer.setSession(session);\n        this.$markerBack.setSession(session);\n        this.$markerFront.setSession(session);\n        this.$gutterLayer.setSession(session);\n        this.$textLayer.setSession(session);\n        if (!session)\n            return;\n        \n        this.$loop.schedule(this.CHANGE_FULL);\n        this.session.$setFontMetrics(this.$fontMetrics);\n        this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n        \n        this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n        this.onChangeNewLineMode();\n        this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n    };\n    this.updateLines = function(firstRow, lastRow, force) {\n        if (lastRow === undefined)\n            lastRow = Infinity;\n\n        if (!this.$changedLines) {\n            this.$changedLines = {\n                firstRow: firstRow,\n                lastRow: lastRow\n            };\n        }\n        else {\n            if (this.$changedLines.firstRow > firstRow)\n                this.$changedLines.firstRow = firstRow;\n\n            if (this.$changedLines.lastRow < lastRow)\n                this.$changedLines.lastRow = lastRow;\n        }\n        if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n            if (force)\n                this.$changedLines.lastRow = this.layerConfig.lastRow;\n            else\n                return;\n        }\n        if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n            return;\n        this.$loop.schedule(this.CHANGE_LINES);\n    };\n\n    this.onChangeNewLineMode = function() {\n        this.$loop.schedule(this.CHANGE_TEXT);\n        this.$textLayer.$updateEolChar();\n        this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n    };\n    \n    this.onChangeTabSize = function() {\n        this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n        this.$textLayer.onChangeTabSize();\n    };\n    this.updateText = function() {\n        this.$loop.schedule(this.CHANGE_TEXT);\n    };\n    this.updateFull = function(force) {\n        if (force)\n            this.$renderChanges(this.CHANGE_FULL, true);\n        else\n            this.$loop.schedule(this.CHANGE_FULL);\n    };\n    this.updateFontSize = function() {\n        this.$textLayer.checkForSizeChanges();\n    };\n\n    this.$changes = 0;\n    this.$updateSizeAsync = function() {\n        if (this.$loop.pending)\n            this.$size.$dirty = true;\n        else\n            this.onResize();\n    };\n    this.onResize = function(force, gutterWidth, width, height) {\n        if (this.resizing > 2)\n            return;\n        else if (this.resizing > 0)\n            this.resizing++;\n        else\n            this.resizing = force ? 1 : 0;\n        var el = this.container;\n        if (!height)\n            height = el.clientHeight || el.scrollHeight;\n        if (!width)\n            width = el.clientWidth || el.scrollWidth;\n        var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n        \n        if (!this.$size.scrollerHeight || (!width && !height))\n            return this.resizing = 0;\n\n        if (force)\n            this.$gutterLayer.$padding = null;\n\n        if (force)\n            this.$renderChanges(changes | this.$changes, true);\n        else\n            this.$loop.schedule(changes | this.$changes);\n\n        if (this.resizing)\n            this.resizing = 0;\n        this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n    };\n    \n    this.$updateCachedSize = function(force, gutterWidth, width, height) {\n        height -= (this.$extraHeight || 0);\n        var changes = 0;\n        var size = this.$size;\n        var oldSize = {\n            width: size.width,\n            height: size.height,\n            scrollerHeight: size.scrollerHeight,\n            scrollerWidth: size.scrollerWidth\n        };\n        if (height && (force || size.height != height)) {\n            size.height = height;\n            changes |= this.CHANGE_SIZE;\n\n            size.scrollerHeight = size.height;\n            if (this.$horizScroll)\n                size.scrollerHeight -= this.scrollBarH.getHeight();\n            this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n            changes = changes | this.CHANGE_SCROLL;\n        }\n\n        if (width && (force || size.width != width)) {\n            changes |= this.CHANGE_SIZE;\n            size.width = width;\n            \n            if (gutterWidth == null)\n                gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n            \n            this.gutterWidth = gutterWidth;\n            \n            dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n            dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n            size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n            dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n            \n            var right = this.scrollBarV.getWidth() + \"px\";\n            dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n\n            if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n                changes |= this.CHANGE_FULL;\n            }\n        }\n        \n        size.$dirty = !width || !height;\n\n        if (changes)\n            this._signal(\"resize\", oldSize);\n\n        return changes;\n    };\n\n    this.onGutterResize = function(width) {\n        var gutterWidth = this.$showGutter ? width : 0;\n        if (gutterWidth != this.gutterWidth)\n            this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n        if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        } else if (this.$size.$dirty) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        } else {\n            this.$computeLayerConfig();\n        }\n    };\n    this.adjustWrapLimit = function() {\n        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n        var limit = Math.floor(availableWidth / this.characterWidth);\n        return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n    };\n    this.setAnimatedScroll = function(shouldAnimate){\n        this.setOption(\"animatedScroll\", shouldAnimate);\n    };\n    this.getAnimatedScroll = function() {\n        return this.$animatedScroll;\n    };\n    this.setShowInvisibles = function(showInvisibles) {\n        this.setOption(\"showInvisibles\", showInvisibles);\n        this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n    };\n    this.getShowInvisibles = function() {\n        return this.getOption(\"showInvisibles\");\n    };\n    this.getDisplayIndentGuides = function() {\n        return this.getOption(\"displayIndentGuides\");\n    };\n\n    this.setDisplayIndentGuides = function(display) {\n        this.setOption(\"displayIndentGuides\", display);\n    };\n    this.setShowPrintMargin = function(showPrintMargin) {\n        this.setOption(\"showPrintMargin\", showPrintMargin);\n    };\n    this.getShowPrintMargin = function() {\n        return this.getOption(\"showPrintMargin\");\n    };\n    this.setPrintMarginColumn = function(showPrintMargin) {\n        this.setOption(\"printMarginColumn\", showPrintMargin);\n    };\n    this.getPrintMarginColumn = function() {\n        return this.getOption(\"printMarginColumn\");\n    };\n    this.getShowGutter = function(){\n        return this.getOption(\"showGutter\");\n    };\n    this.setShowGutter = function(show){\n        return this.setOption(\"showGutter\", show);\n    };\n\n    this.getFadeFoldWidgets = function(){\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n\n    this.setFadeFoldWidgets = function(show) {\n        this.setOption(\"fadeFoldWidgets\", show);\n    };\n\n    this.setHighlightGutterLine = function(shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n\n    this.getHighlightGutterLine = function() {\n        return this.getOption(\"highlightGutterLine\");\n    };\n\n    this.$updatePrintMargin = function() {\n        if (!this.$showPrintMargin && !this.$printMarginEl)\n            return;\n\n        if (!this.$printMarginEl) {\n            var containerEl = dom.createElement(\"div\");\n            containerEl.className = \"ace_layer ace_print-margin-layer\";\n            this.$printMarginEl = dom.createElement(\"div\");\n            this.$printMarginEl.className = \"ace_print-margin\";\n            containerEl.appendChild(this.$printMarginEl);\n            this.content.insertBefore(containerEl, this.content.firstChild);\n        }\n\n        var style = this.$printMarginEl.style;\n        style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n        style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n        \n        if (this.session && this.session.$wrap == -1)\n            this.adjustWrapLimit();\n    };\n    this.getContainerElement = function() {\n        return this.container;\n    };\n    this.getMouseEventTarget = function() {\n        return this.scroller;\n    };\n    this.getTextAreaContainer = function() {\n        return this.container;\n    };\n    this.$moveTextAreaToCursor = function() {\n        var style = this.textarea.style;\n        if (!this.$keepTextAreaAtCursor) {\n            dom.translate(this.textarea, -100, 0);\n            return;\n        }\n        var pixelPos = this.$cursorLayer.$pixelPos;\n        if (!pixelPos)\n            return;\n        var composition = this.$composition;\n        if (composition && composition.markerRange)\n            pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n        \n        var config = this.layerConfig;\n        var posTop = pixelPos.top;\n        var posLeft = pixelPos.left;\n        posTop -= config.offset;\n\n        var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n        if (posTop < 0 || posTop > config.height - h) {\n            dom.translate(this.textarea, 0, 0);\n            return;\n        }\n\n        var w = 1;\n        if (!composition) {\n            posTop += this.lineHeight;\n        }\n        else {\n            if (composition.useTextareaForIME) {\n                var val = this.textarea.value;\n                w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n                h += 2;\n            }\n            else {\n                posTop += this.lineHeight + 2;\n            }\n        }\n        \n        posLeft -= this.scrollLeft;\n        if (posLeft > this.$size.scrollerWidth - w)\n            posLeft = this.$size.scrollerWidth - w;\n\n        posLeft += this.gutterWidth + this.margin.left;\n\n        dom.setStyle(style, \"height\", h + \"px\");\n        dom.setStyle(style, \"width\", w + \"px\");\n        dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, this.$size.height - h));\n    };\n    this.getFirstVisibleRow = function() {\n        return this.layerConfig.firstRow;\n    };\n    this.getFirstFullyVisibleRow = function() {\n        return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n    };\n    this.getLastFullyVisibleRow = function() {\n        var config = this.layerConfig;\n        var lastRow = config.lastRow;\n        var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n        if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n            return lastRow - 1;\n        return lastRow;\n    };\n    this.getLastVisibleRow = function() {\n        return this.layerConfig.lastRow;\n    };\n\n    this.$padding = null;\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n        this.$textLayer.setPadding(padding);\n        this.$cursorLayer.setPadding(padding);\n        this.$markerFront.setPadding(padding);\n        this.$markerBack.setPadding(padding);\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.$updatePrintMargin();\n    };\n    \n    this.setScrollMargin = function(top, bottom, left, right) {\n        var sm = this.scrollMargin;\n        sm.top = top|0;\n        sm.bottom = bottom|0;\n        sm.right = right|0;\n        sm.left = left|0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        if (sm.top && this.scrollTop <= 0 && this.session)\n            this.session.setScrollTop(-sm.top);\n        this.updateFull();\n    };\n    \n    this.setMargin = function(top, bottom, left, right) {\n        var sm = this.margin;\n        sm.top = top|0;\n        sm.bottom = bottom|0;\n        sm.right = right|0;\n        sm.left = left|0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n        this.updateFull();\n    };\n    this.getHScrollBarAlwaysVisible = function() {\n        return this.$hScrollBarAlwaysVisible;\n    };\n    this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n        this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    this.getVScrollBarAlwaysVisible = function() {\n        return this.$vScrollBarAlwaysVisible;\n    };\n    this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n        this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n    };\n\n    this.$updateScrollBarV = function() {\n        var scrollHeight = this.layerConfig.maxHeight;\n        var scrollerHeight = this.$size.scrollerHeight;\n        if (!this.$maxLines && this.$scrollPastEnd) {\n            scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n            if (this.scrollTop > scrollHeight - scrollerHeight) {\n                scrollHeight = this.scrollTop + scrollerHeight;\n                this.scrollBarV.scrollTop = null;\n            }\n        }\n        this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n        this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n    };\n    this.$updateScrollBarH = function() {\n        this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n        this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n    };\n    \n    this.$frozen = false;\n    this.freeze = function() {\n        this.$frozen = true;\n    };\n    \n    this.unfreeze = function() {\n        this.$frozen = false;\n    };\n\n    this.$renderChanges = function(changes, force) {\n        if (this.$changes) {\n            changes |= this.$changes;\n            this.$changes = 0;\n        }\n        if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n            this.$changes |= changes;\n            return; \n        } \n        if (this.$size.$dirty) {\n            this.$changes |= changes;\n            return this.onResize(true);\n        }\n        if (!this.lineHeight) {\n            this.$textLayer.checkForSizeChanges();\n        }\n        \n        this._signal(\"beforeRender\");\n        \n        if (this.session && this.session.$bidiHandler)\n            this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n        var config = this.layerConfig;\n        if (changes & this.CHANGE_FULL ||\n            changes & this.CHANGE_SIZE ||\n            changes & this.CHANGE_TEXT ||\n            changes & this.CHANGE_LINES ||\n            changes & this.CHANGE_SCROLL ||\n            changes & this.CHANGE_H_SCROLL\n        ) {\n            changes |= this.$computeLayerConfig() | this.$loop.clear();\n            if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n                var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n                if (st > 0) {\n                    this.scrollTop = st;\n                    changes = changes | this.CHANGE_SCROLL;\n                    changes |= this.$computeLayerConfig() | this.$loop.clear();\n                }\n            }\n            config = this.layerConfig;\n            this.$updateScrollBarV();\n            if (changes & this.CHANGE_H_SCROLL)\n                this.$updateScrollBarH();\n            \n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            \n            var width = config.width + 2 * this.$padding + \"px\";\n            var height = config.minHeight + \"px\";\n            \n            dom.setStyle(this.content.style, \"width\", width);\n            dom.setStyle(this.content.style, \"height\", height);\n        }\n        if (changes & this.CHANGE_H_SCROLL) {\n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n        }\n        if (changes & this.CHANGE_FULL) {\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\");\n            return;\n        }\n        if (changes & this.CHANGE_SCROLL) {\n            if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n                this.$textLayer.update(config);\n            else\n                this.$textLayer.scrollLines(config);\n\n            if (this.$showGutter) {\n                if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n                    this.$gutterLayer.update(config);\n                else\n                    this.$gutterLayer.scrollLines(config);\n            }\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\");\n            return;\n        }\n\n        if (changes & this.CHANGE_TEXT) {\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_LINES) {\n            if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_CURSOR) {\n            if (this.$highlightGutterLine)\n                this.$gutterLayer.updateLineHighlight(config);\n        }\n\n        if (changes & this.CHANGE_CURSOR) {\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n        }\n\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n            this.$markerFront.update(config);\n        }\n\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n            this.$markerBack.update(config);\n        }\n\n        this._signal(\"afterRender\");\n    };\n\n    \n    this.$autosize = function() {\n        var height = this.session.getScreenLength() * this.lineHeight;\n        var maxHeight = this.$maxLines * this.lineHeight;\n        var desiredHeight = Math.min(maxHeight, \n            Math.max((this.$minLines || 1) * this.lineHeight, height)\n        ) + this.scrollMargin.v + (this.$extraHeight || 0);\n        if (this.$horizScroll)\n            desiredHeight += this.scrollBarH.getHeight();\n        if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n            desiredHeight = this.$maxPixelHeight;\n        \n        var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n        var vScroll = !hideScrollbars && height > maxHeight;\n        \n        if (desiredHeight != this.desiredHeight ||\n            this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n            if (vScroll != this.$vScroll) {\n                this.$vScroll = vScroll;\n                this.scrollBarV.setVisible(vScroll);\n            }\n            \n            var w = this.container.clientWidth;\n            this.container.style.height = desiredHeight + \"px\";\n            this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n            this.desiredHeight = desiredHeight;\n            \n            this._signal(\"autosize\");\n        }\n    };\n    \n    this.$computeLayerConfig = function() {\n        var session = this.session;\n        var size = this.$size;\n        \n        var hideScrollbars = size.height <= 2 * this.lineHeight;\n        var screenLines = this.session.getScreenLength();\n        var maxHeight = screenLines * this.lineHeight;\n\n        var longestLine = this.$getLongestLine();\n        \n        var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n            size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n        var hScrollChanged = this.$horizScroll !== horizScroll;\n        if (hScrollChanged) {\n            this.$horizScroll = horizScroll;\n            this.scrollBarH.setVisible(horizScroll);\n        }\n        var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n        if (this.$maxLines && this.lineHeight > 1)\n            this.$autosize();\n\n        var minHeight = size.scrollerHeight + this.lineHeight;\n        \n        var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n            ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n            : 0;\n        maxHeight += scrollPastEnd;\n        \n        var sm = this.scrollMargin;\n        this.session.setScrollTop(Math.max(-sm.top,\n            Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n        this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n            longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n        \n        var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n            size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n        var vScrollChanged = vScrollBefore !== vScroll;\n        if (vScrollChanged) {\n            this.$vScroll = vScroll;\n            this.scrollBarV.setVisible(vScroll);\n        }\n\n        var offset = this.scrollTop % this.lineHeight;\n        var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n        var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n        var lastRow = firstRow + lineCount;\n        var firstRowScreen, firstRowHeight;\n        var lineHeight = this.lineHeight;\n        firstRow = session.screenToDocumentRow(firstRow, 0);\n        var foldLine = session.getFoldLine(firstRow);\n        if (foldLine) {\n            firstRow = foldLine.start.row;\n        }\n\n        firstRowScreen = session.documentToScreenRow(firstRow, 0);\n        firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n        lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n        minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n                                                firstRowHeight;\n\n        offset = this.scrollTop - firstRowScreen * lineHeight;\n\n        var changes = 0;\n        if (this.layerConfig.width != longestLine || hScrollChanged) \n            changes = this.CHANGE_H_SCROLL;\n        if (hScrollChanged || vScrollChanged) {\n            changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n            this._signal(\"scrollbarVisibilityChanged\");\n            if (vScrollChanged)\n                longestLine = this.$getLongestLine();\n        }\n        \n        this.layerConfig = {\n            width : longestLine,\n            padding : this.$padding,\n            firstRow : firstRow,\n            firstRowScreen: firstRowScreen,\n            lastRow : lastRow,\n            lineHeight : lineHeight,\n            characterWidth : this.characterWidth,\n            minHeight : minHeight,\n            maxHeight : maxHeight,\n            offset : offset,\n            gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n            height : this.$size.scrollerHeight\n        };\n\n        if (this.session.$bidiHandler)\n            this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n\n        return changes;\n    };\n\n    this.$updateLines = function() {\n        if (!this.$changedLines) return;\n        var firstRow = this.$changedLines.firstRow;\n        var lastRow = this.$changedLines.lastRow;\n        this.$changedLines = null;\n\n        var layerConfig = this.layerConfig;\n\n        if (firstRow > layerConfig.lastRow + 1) { return; }\n        if (lastRow < layerConfig.firstRow) { return; }\n        if (lastRow === Infinity) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(layerConfig);\n            this.$textLayer.update(layerConfig);\n            return;\n        }\n        this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n        return true;\n    };\n\n    this.$getLongestLine = function() {\n        var charCount = this.session.getScreenWidth();\n        if (this.showInvisibles && !this.session.$useWrapMode)\n            charCount += 1;\n            \n        if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n            charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n\n        return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n    };\n    this.updateFrontMarkers = function() {\n        this.$markerFront.setMarkers(this.session.getMarkers(true));\n        this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n    };\n    this.updateBackMarkers = function() {\n        this.$markerBack.setMarkers(this.session.getMarkers());\n        this.$loop.schedule(this.CHANGE_MARKER_BACK);\n    };\n    this.addGutterDecoration = function(row, className){\n        this.$gutterLayer.addGutterDecoration(row, className);\n    };\n    this.removeGutterDecoration = function(row, className){\n        this.$gutterLayer.removeGutterDecoration(row, className);\n    };\n    this.updateBreakpoints = function(rows) {\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    this.setAnnotations = function(annotations) {\n        this.$gutterLayer.setAnnotations(annotations);\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    this.updateCursor = function() {\n        this.$loop.schedule(this.CHANGE_CURSOR);\n    };\n    this.hideCursor = function() {\n        this.$cursorLayer.hideCursor();\n    };\n    this.showCursor = function() {\n        this.$cursorLayer.showCursor();\n    };\n\n    this.scrollSelectionIntoView = function(anchor, lead, offset) {\n        this.scrollCursorIntoView(anchor, offset);\n        this.scrollCursorIntoView(lead, offset);\n    };\n    this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n        if (this.$size.scrollerHeight === 0)\n            return;\n\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n        var left = pos.left;\n        var top = pos.top;\n        \n        var topMargin = $viewMargin && $viewMargin.top || 0;\n        var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n        \n        var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n        \n        if (scrollTop + topMargin > top) {\n            if (offset && scrollTop + topMargin > top + this.lineHeight)\n                top -= offset * this.$size.scrollerHeight;\n            if (top === 0)\n                top = -this.scrollMargin.top;\n            this.session.setScrollTop(top);\n        } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n            if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top -  this.lineHeight)\n                top += offset * this.$size.scrollerHeight;\n            this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n        }\n\n        var scrollLeft = this.scrollLeft;\n\n        if (scrollLeft > left) {\n            if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n                left = -this.scrollMargin.left;\n            this.session.setScrollLeft(left);\n        } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n            this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n        } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n            this.session.setScrollLeft(0);\n        }\n    };\n    this.getScrollTop = function() {\n        return this.session.getScrollTop();\n    };\n    this.getScrollLeft = function() {\n        return this.session.getScrollLeft();\n    };\n    this.getScrollTopRow = function() {\n        return this.scrollTop / this.lineHeight;\n    };\n    this.getScrollBottomRow = function() {\n        return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n    };\n    this.scrollToRow = function(row) {\n        this.session.setScrollTop(row * this.lineHeight);\n    };\n\n    this.alignCursor = function(cursor, alignment) {\n        if (typeof cursor == \"number\")\n            cursor = {row: cursor, column: 0};\n\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var h = this.$size.scrollerHeight - this.lineHeight;\n        var offset = pos.top - h * (alignment || 0);\n\n        this.session.setScrollTop(offset);\n        return offset;\n    };\n\n    this.STEPS = 8;\n    this.$calcSteps = function(fromValue, toValue){\n        var i = 0;\n        var l = this.STEPS;\n        var steps = [];\n\n        var func  = function(t, x_min, dx) {\n            return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n        };\n\n        for (i = 0; i < l; ++i)\n            steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n        return steps;\n    };\n    this.scrollToLine = function(line, center, animate, callback) {\n        var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n        var offset = pos.top;\n        if (center)\n            offset -= this.$size.scrollerHeight / 2;\n\n        var initialScroll = this.scrollTop;\n        this.session.setScrollTop(offset);\n        if (animate !== false)\n            this.animateScrolling(initialScroll, callback);\n    };\n\n    this.animateScrolling = function(fromValue, callback) {\n        var toValue = this.scrollTop;\n        if (!this.$animatedScroll)\n            return;\n        var _self = this;\n        \n        if (fromValue == toValue)\n            return;\n        \n        if (this.$scrollAnimation) {\n            var oldSteps = this.$scrollAnimation.steps;\n            if (oldSteps.length) {\n                fromValue = oldSteps[0];\n                if (fromValue == toValue)\n                    return;\n            }\n        }\n        \n        var steps = _self.$calcSteps(fromValue, toValue);\n        this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n        clearInterval(this.$timer);\n\n        _self.session.setScrollTop(steps.shift());\n        _self.session.$scrollTop = toValue;\n        this.$timer = setInterval(function() {\n            if (steps.length) {\n                _self.session.setScrollTop(steps.shift());\n                _self.session.$scrollTop = toValue;\n            } else if (toValue != null) {\n                _self.session.$scrollTop = -1;\n                _self.session.setScrollTop(toValue);\n                toValue = null;\n            } else {\n                _self.$timer = clearInterval(_self.$timer);\n                _self.$scrollAnimation = null;\n                callback && callback();\n            }\n        }, 10);\n    };\n    this.scrollToY = function(scrollTop) {\n        if (this.scrollTop !== scrollTop) {\n            this.$loop.schedule(this.CHANGE_SCROLL);\n            this.scrollTop = scrollTop;\n        }\n    };\n    this.scrollToX = function(scrollLeft) {\n        if (this.scrollLeft !== scrollLeft)\n            this.scrollLeft = scrollLeft;\n        this.$loop.schedule(this.CHANGE_H_SCROLL);\n    };\n    this.scrollTo = function(x, y) {\n        this.session.setScrollTop(y);\n        this.session.setScrollLeft(y);\n    };\n    this.scrollBy = function(deltaX, deltaY) {\n        deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n        deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n    };\n    this.isScrollableBy = function(deltaX, deltaY) {\n        if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n           return true;\n        if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n            - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n           return true;\n        if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n            return true;\n        if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n            - this.layerConfig.width < -1 + this.scrollMargin.right)\n           return true;\n    };\n\n    this.pixelToScreenCoordinates = function(x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = {top:0, left: 0};\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        } else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n        \n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n        return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX:  offsetX};\n    };\n\n    this.screenToTextCoordinates = function(x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = {top:0, left: 0};\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        } else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n\n        return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n    };\n    this.textToScreenCoordinates = function(row, column) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n        var pos = this.session.documentToScreenPosition(row, column);\n\n        var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n             ? this.session.$bidiHandler.getPosLeft(pos.column)\n             : Math.round(pos.column * this.characterWidth));\n        \n        var y = pos.row * this.lineHeight;\n\n        return {\n            pageX: canvasPos.left + x - this.scrollLeft,\n            pageY: canvasPos.top + y - this.scrollTop\n        };\n    };\n    this.visualizeFocus = function() {\n        dom.addCssClass(this.container, \"ace_focus\");\n    };\n    this.visualizeBlur = function() {\n        dom.removeCssClass(this.container, \"ace_focus\");\n    };\n    this.showComposition = function(composition) {\n        this.$composition = composition;\n        if (!composition.cssText) {\n            composition.cssText = this.textarea.style.cssText;\n            composition.keepTextAreaAtCursor = this.$keepTextAreaAtCursor;\n        }\n        composition.useTextareaForIME = this.$useTextareaForIME;\n        \n        if (this.$useTextareaForIME) {\n            this.$keepTextAreaAtCursor = true;\n            dom.addCssClass(this.textarea, \"ace_composition\");\n            this.textarea.style.cssText = \"\";\n            this.$moveTextAreaToCursor();\n            this.$cursorLayer.element.style.display = \"none\";\n        }\n        else {            \n            composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n        }\n    };\n    this.setCompositionText = function(text) {\n        var cursor = this.session.selection.cursor;\n        this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n        this.$moveTextAreaToCursor();\n    };\n    this.hideComposition = function() {\n        if (!this.$composition)\n            return;\n        \n        if (this.$composition.markerId)\n            this.session.removeMarker(this.$composition.markerId);\n\n        dom.removeCssClass(this.textarea, \"ace_composition\");\n        this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\n        this.textarea.style.cssText = this.$composition.cssText;\n        this.$composition = null;\n        this.$cursorLayer.element.style.display = \"\";\n    };\n    \n    this.addToken = function(text, type, row, column) {\n        var session = this.session;\n        session.bgTokenizer.lines[row] = null;\n        var newToken = {type: type, value: text};\n        var tokens = session.getTokens(row);\n        if (column == null) {\n            tokens.push(newToken);\n        } else {\n            var l = 0;\n            for (var i =0; i < tokens.length; i++) {\n                var token = tokens[i];\n                l += token.value.length;\n                if (column <= l) {\n                    var diff = token.value.length - (l - column);\n                    var before = token.value.slice(0, diff);\n                    var after = token.value.slice(diff);\n    \n                    tokens.splice(i, 1, {type: token.type, value: before},  newToken,  {type: token.type, value: after});\n                    break;\n                }\n            }\n        }\n        this.updateLines(row, row);\n    };\n    this.setTheme = function(theme, cb) {\n        var _self = this;\n        this.$themeId = theme;\n        _self._dispatchEvent('themeChange',{theme:theme});\n\n        if (!theme || typeof theme == \"string\") {\n            var moduleName = theme || this.$options.theme.initialValue;\n            config.loadModule([\"theme\", moduleName], afterLoad);\n        } else {\n            afterLoad(theme);\n        }\n\n        function afterLoad(module) {\n            if (_self.$themeId != theme)\n                return cb && cb();\n            if (!module || !module.cssClass)\n                throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n            if (module.$id)\n                _self.$themeId = module.$id;\n            dom.importCssString(\n                module.cssText,\n                module.cssClass,\n                _self.container\n            );\n\n            if (_self.theme)\n                dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n            var padding = \"padding\" in module ? module.padding \n                : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n            if (_self.$padding && padding != _self.$padding)\n                _self.setPadding(padding);\n            _self.$theme = module.cssClass;\n\n            _self.theme = module;\n            dom.addCssClass(_self.container, module.cssClass);\n            dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n            if (_self.$size) {\n                _self.$size.width = 0;\n                _self.$updateSizeAsync();\n            }\n\n            _self._dispatchEvent('themeLoaded', {theme:module});\n            cb && cb();\n        }\n    };\n    this.getTheme = function() {\n        return this.$themeId;\n    };\n    this.setStyle = function(style, include) {\n        dom.setCssClass(this.container, style, include !== false);\n    };\n    this.unsetStyle = function(style) {\n        dom.removeCssClass(this.container, style);\n    };\n    \n    this.setCursorStyle = function(style) {\n        dom.setStyle(this.scroller.style, \"cursor\", style);\n    };\n    this.setMouseCursor = function(cursorStyle) {\n        dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n    };\n    \n    this.attachToShadowRoot = function() {\n        dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n    };\n    this.destroy = function() {\n        this.$fontMetrics.destroy();\n        this.$cursorLayer.destroy();\n    };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n    animatedScroll: {initialValue: false},\n    showInvisibles: {\n        set: function(value) {\n            if (this.$textLayer.setShowInvisibles(value))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: false\n    },\n    showPrintMargin: {\n        set: function() { this.$updatePrintMargin(); },\n        initialValue: true\n    },\n    printMarginColumn: {\n        set: function() { this.$updatePrintMargin(); },\n        initialValue: 80\n    },\n    printMargin: {\n        set: function(val) {\n            if (typeof val == \"number\")\n                this.$printMarginColumn = val;\n            this.$showPrintMargin = !!val;\n            this.$updatePrintMargin();\n        },\n        get: function() {\n            return this.$showPrintMargin && this.$printMarginColumn; \n        }\n    },\n    showGutter: {\n        set: function(show){\n            this.$gutter.style.display = show ? \"block\" : \"none\";\n            this.$loop.schedule(this.CHANGE_FULL);\n            this.onGutterResize();\n        },\n        initialValue: true\n    },\n    fadeFoldWidgets: {\n        set: function(show) {\n            dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n        },\n        initialValue: false\n    },\n    showFoldWidgets: {\n        set: function(show) {\n            this.$gutterLayer.setShowFoldWidgets(show);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    displayIndentGuides: {\n        set: function(show) {\n            if (this.$textLayer.setDisplayIndentGuides(show))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: true\n    },\n    highlightGutterLine: {\n        set: function(shouldHighlight) {\n            this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    hScrollBarAlwaysVisible: {\n        set: function(val) {\n            if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    vScrollBarAlwaysVisible: {\n        set: function(val) {\n            if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    fontSize: {\n        set: function(size) {\n            if (typeof size == \"number\")\n                size = size + \"px\";\n            this.container.style.fontSize = size;\n            this.updateFontSize();\n        },\n        initialValue: 12\n    },\n    fontFamily: {\n        set: function(name) {\n            this.container.style.fontFamily = name;\n            this.updateFontSize();\n        }\n    },\n    maxLines: {\n        set: function(val) {\n            this.updateFull();\n        }\n    },\n    minLines: {\n        set: function(val) {\n            if (!(this.$minLines < 0x1ffffffffffff))\n                this.$minLines = 0;\n            this.updateFull();\n        }\n    },\n    maxPixelHeight: {\n        set: function(val) {\n            this.updateFull();\n        },\n        initialValue: 0\n    },\n    scrollPastEnd: {\n        set: function(val) {\n            val = +val || 0;\n            if (this.$scrollPastEnd == val)\n                return;\n            this.$scrollPastEnd = val;\n            this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: 0,\n        handlesSet: true\n    },\n    fixedWidthGutter: {\n        set: function(val) {\n            this.$gutterLayer.$fixedWidth = !!val;\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        }\n    },\n    theme: {\n        set: function(val) { this.setTheme(val); },\n        get: function() { return this.$themeId || this.theme; },\n        initialValue: \"./theme/textmate\",\n        handlesSet: true\n    },\n    hasCssTransforms: {\n    },\n    useTextareaForIME: {\n        initialValue: !useragent.isMobile && !useragent.isIE\n    }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\ndefine(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n    var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n    try {\n        return new Blob([script], {\"type\": \"application/javascript\"});\n    } catch (e) { // Backwards-compatibility\n        var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n        var blobBuilder = new BlobBuilder();\n        blobBuilder.append(script);\n        return blobBuilder.getBlob(\"application/javascript\");\n    }\n}\n\nfunction createWorker(workerUrl) {\n    if (typeof Worker == \"undefined\")\n        return { postMessage: function() {}, terminate: function() {} };\n    if (config.get(\"loadWorkerFromBlob\")) {\n        var blob = $workerBlob(workerUrl);\n        var URL = window.URL || window.webkitURL;\n        var blobURL = URL.createObjectURL(blob);\n        return new Worker(blobURL);\n    }\n    return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n    if (!worker.postMessage)\n        worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n    this.$worker = worker;\n    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.onMessage = this.onMessage.bind(this);\n\n    this.callbackId = 1;\n    this.callbacks = {};\n\n    this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n        if (require.nameToUrl && !require.toUrl)\n            require.toUrl = require.nameToUrl;\n\n        if (config.get(\"packaged\") || !require.toUrl) {\n            workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n        } else {\n            var normalizePath = this.$normalizePath;\n            workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n            var tlns = {};\n            topLevelNamespaces.forEach(function(ns) {\n                tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n            });\n        }\n\n        this.$worker = createWorker(workerUrl);\n        if (importScripts) {\n            this.send(\"importScripts\", importScripts);\n        }\n        this.$worker.postMessage({\n            init : true,\n            tlns : tlns,\n            module : mod,\n            classname : classname\n        });\n        return this.$worker;\n    };\n\n    this.onMessage = function(e) {\n        var msg = e.data;\n        switch (msg.type) {\n            case \"event\":\n                this._signal(msg.name, {data: msg.data});\n                break;\n            case \"call\":\n                var callback = this.callbacks[msg.id];\n                if (callback) {\n                    callback(msg.data);\n                    delete this.callbacks[msg.id];\n                }\n                break;\n            case \"error\":\n                this.reportError(msg.data);\n                break;\n            case \"log\":\n                window.console && console.log && console.log.apply(console, msg.data);\n                break;\n        }\n    };\n    \n    this.reportError = function(err) {\n        window.console && console.error && console.error(err);\n    };\n\n    this.$normalizePath = function(path) {\n        return net.qualifyURL(path);\n    };\n\n    this.terminate = function() {\n        this._signal(\"terminate\", {});\n        this.deltaQueue = null;\n        this.$worker.terminate();\n        this.$worker = null;\n        if (this.$doc)\n            this.$doc.off(\"change\", this.changeListener);\n        this.$doc = null;\n    };\n\n    this.send = function(cmd, args) {\n        this.$worker.postMessage({command: cmd, args: args});\n    };\n\n    this.call = function(cmd, args, callback) {\n        if (callback) {\n            var id = this.callbackId++;\n            this.callbacks[id] = callback;\n            args.push(id);\n        }\n        this.send(cmd, args);\n    };\n\n    this.emit = function(event, data) {\n        try {\n            if (data.data && data.data.err)\n                data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n            this.$worker.postMessage({event: event, data: {data: data.data}});\n        }\n        catch(ex) {\n            console.error(ex.stack);\n        }\n    };\n\n    this.attachToDocument = function(doc) {\n        if (this.$doc)\n            this.terminate();\n\n        this.$doc = doc;\n        this.call(\"setValue\", [doc.getValue()]);\n        doc.on(\"change\", this.changeListener);\n    };\n\n    this.changeListener = function(delta) {\n        if (!this.deltaQueue) {\n            this.deltaQueue = [];\n            setTimeout(this.$sendDeltaQueue, 0);\n        }\n        if (delta.action == \"insert\")\n            this.deltaQueue.push(delta.start, delta.lines);\n        else\n            this.deltaQueue.push(delta.start, delta.end);\n    };\n\n    this.$sendDeltaQueue = function() {\n        var q = this.deltaQueue;\n        if (!q) return;\n        this.deltaQueue = null;\n        if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n            this.call(\"setValue\", [this.$doc.getValue()]);\n        } else\n            this.emit(\"change\", {data: q});\n    };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n    var main = null;\n    var emitSync = false;\n    var sender = Object.create(EventEmitter);\n\n    var messageBuffer = [];\n    var workerClient = new WorkerClient({\n        messageBuffer: messageBuffer,\n        terminate: function() {},\n        postMessage: function(e) {\n            messageBuffer.push(e);\n            if (!main) return;\n            if (emitSync)\n                setTimeout(processNext);\n            else\n                processNext();\n        }\n    });\n\n    workerClient.setEmitSync = function(val) { emitSync = val; };\n\n    var processNext = function() {\n        var msg = messageBuffer.shift();\n        if (msg.command)\n            main[msg.command].apply(main, msg.args);\n        else if (msg.event)\n            sender._signal(msg.event, msg.data);\n    };\n\n    sender.postMessage = function(msg) {\n        workerClient.onMessage({data: msg});\n    };\n    sender.callback = function(data, callbackId) {\n        this.postMessage({type: \"call\", id: callbackId, data: data});\n    };\n    sender.emit = function(name, data) {\n        this.postMessage({type: \"event\", name: name, data: data});\n    };\n\n    config.loadModule([\"worker\", mod], function(Main) {\n        main = new Main[classname](sender);\n        while (messageBuffer.length)\n            processNext();\n    });\n\n    return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\ndefine(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n    var _self = this;\n    this.length = length;\n    this.session = session;\n    this.doc = session.getDocument();\n    this.mainClass = mainClass;\n    this.othersClass = othersClass;\n    this.$onUpdate = this.onUpdate.bind(this);\n    this.doc.on(\"change\", this.$onUpdate);\n    this.$others = others;\n    \n    this.$onCursorChange = function() {\n        setTimeout(function() {\n            _self.onCursorChange();\n        });\n    };\n    \n    this.$pos = pos;\n    var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n    this.$undoStackDepth = undoStack.length;\n    this.setup();\n\n    session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setup = function() {\n        var _self = this;\n        var doc = this.doc;\n        var session = this.session;\n        \n        this.selectionBefore = session.selection.toJSON();\n        if (session.selection.inMultiSelectMode)\n            session.selection.toSingleRange();\n\n        this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n        var pos = this.pos;\n        pos.$insertRight = true;\n        pos.detach();\n        pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n        this.others = [];\n        this.$others.forEach(function(other) {\n            var anchor = doc.createAnchor(other.row, other.column);\n            anchor.$insertRight = true;\n            anchor.detach();\n            _self.others.push(anchor);\n        });\n        session.setUndoSelect(false);\n    };\n    this.showOtherMarkers = function() {\n        if (this.othersActive) return;\n        var session = this.session;\n        var _self = this;\n        this.othersActive = true;\n        this.others.forEach(function(anchor) {\n            anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n        });\n    };\n    this.hideOtherMarkers = function() {\n        if (!this.othersActive) return;\n        this.othersActive = false;\n        for (var i = 0; i < this.others.length; i++) {\n            this.session.removeMarker(this.others[i].markerId);\n        }\n    };\n    this.onUpdate = function(delta) {\n        if (this.$updating)\n            return this.updateAnchors(delta);\n            \n        var range = delta;\n        if (range.start.row !== range.end.row) return;\n        if (range.start.row !== this.pos.row) return;\n        this.$updating = true;\n        var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n        var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n        var distanceFromStart = range.start.column - this.pos.column;\n        \n        this.updateAnchors(delta);\n        \n        if (inMainRange)\n            this.length += lengthDiff;\n\n        if (inMainRange && !this.session.$fromUndo) {\n            if (delta.action === 'insert') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n                    this.doc.insertMergedLines(newPos, delta.lines);\n                }\n            } else if (delta.action === 'remove') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n                    this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n                }\n            }\n        }\n        \n        this.$updating = false;\n        this.updateMarkers();\n    };\n    \n    this.updateAnchors = function(delta) {\n        this.pos.onChange(delta);\n        for (var i = this.others.length; i--;)\n            this.others[i].onChange(delta);\n        this.updateMarkers();\n    };\n    \n    this.updateMarkers = function() {\n        if (this.$updating)\n            return;\n        var _self = this;\n        var session = this.session;\n        var updateMarker = function(pos, className) {\n            session.removeMarker(pos.markerId);\n            pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n        };\n        updateMarker(this.pos, this.mainClass);\n        for (var i = this.others.length; i--;)\n            updateMarker(this.others[i], this.othersClass);\n    };\n\n    this.onCursorChange = function(event) {\n        if (this.$updating || !this.session) return;\n        var pos = this.session.selection.getCursor();\n        if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n            this.showOtherMarkers();\n            this._emit(\"cursorEnter\", event);\n        } else {\n            this.hideOtherMarkers();\n            this._emit(\"cursorLeave\", event);\n        }\n    };    \n    this.detach = function() {\n        this.session.removeMarker(this.pos && this.pos.markerId);\n        this.hideOtherMarkers();\n        this.doc.removeEventListener(\"change\", this.$onUpdate);\n        this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n        this.session.setUndoSelect(true);\n        this.session = null;\n    };\n    this.cancel = function() {\n        if (this.$undoStackDepth === -1)\n            return;\n        var undoManager = this.session.getUndoManager();\n        var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n        for (var i = 0; i < undosRequired; i++) {\n            undoManager.undo(this.session, true);\n        }\n        if (this.selectionBefore)\n            this.session.selection.fromJSON(this.selectionBefore);\n    };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\ndefine(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n    var ev = e.domEvent;\n    var alt = ev.altKey;\n    var shift = ev.shiftKey;\n    var ctrl = ev.ctrlKey;\n    var accel = e.getAccelKey();\n    var button = e.getButton();\n    \n    if (ctrl && useragent.isMac)\n        button = ev.button;\n\n    if (e.editor.inMultiSelectMode && button == 2) {\n        e.editor.textInput.onContextMenu(e.domEvent);\n        return;\n    }\n    \n    if (!ctrl && !alt && !accel) {\n        if (button === 0 && e.editor.inMultiSelectMode)\n            e.editor.exitMultiSelectMode();\n        return;\n    }\n    \n    if (button !== 0)\n        return;\n\n    var editor = e.editor;\n    var selection = editor.selection;\n    var isMultiSelect = editor.inMultiSelectMode;\n    var pos = e.getDocumentPosition();\n    var cursor = selection.getCursor();\n    var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n    var mouseX = e.x, mouseY = e.y;\n    var onMouseSelection = function(e) {\n        mouseX = e.clientX;\n        mouseY = e.clientY;\n    };\n    \n    var session = editor.session;\n    var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n    var screenCursor = screenAnchor;\n    \n    var selectionMode;\n    if (editor.$mouseHandler.$enableJumpToDef) {\n        if (ctrl && alt || accel && alt)\n            selectionMode = shift ? \"block\" : \"add\";\n        else if (alt && editor.$blockSelectEnabled)\n            selectionMode = \"block\";\n    } else {\n        if (accel && !alt) {\n            selectionMode = \"add\";\n            if (!isMultiSelect && shift)\n                return;\n        } else if (alt && editor.$blockSelectEnabled) {\n            selectionMode = \"block\";\n        }\n    }\n    \n    if (selectionMode && useragent.isMac && ev.ctrlKey) {\n        editor.$mouseHandler.cancelContextMenu();\n    }\n\n    if (selectionMode == \"add\") {\n        if (!isMultiSelect && inSelection)\n            return; // dragging\n\n        if (!isMultiSelect) {\n            var range = selection.toOrientedRange();\n            editor.addSelectionMarker(range);\n        }\n\n        var oldRange = selection.rangeList.rangeAtPoint(pos);\n        \n        editor.inVirtualSelectionMode = true;\n        \n        if (shift) {\n            oldRange = null;\n            range = selection.ranges[0] || range;\n            editor.removeSelectionMarker(range);\n        }\n        editor.once(\"mouseup\", function() {\n            var tmpSel = selection.toOrientedRange();\n\n            if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n                selection.substractPoint(tmpSel.cursor);\n            else {\n                if (shift) {\n                    selection.substractPoint(range.cursor);\n                } else if (range) {\n                    editor.removeSelectionMarker(range);\n                    selection.addRange(range);\n                }\n                selection.addRange(tmpSel);\n            }\n            editor.inVirtualSelectionMode = false;\n        });\n\n    } else if (selectionMode == \"block\") {\n        e.stop();\n        editor.inVirtualSelectionMode = true;        \n        var initialRange;\n        var rectSel = [];\n        var blockSelect = function() {\n            var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n            var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n            if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n                return;\n            screenCursor = newCursor;\n            \n            editor.selection.moveToPosition(cursor);\n            editor.renderer.scrollCursorIntoView();\n\n            editor.removeSelectionMarkers(rectSel);\n            rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n            if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n                rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n            rectSel.forEach(editor.addSelectionMarker, editor);\n            editor.updateSelectionMarkers();\n        };\n        if (isMultiSelect && !accel) {\n            selection.toSingleRange();\n        } else if (!isMultiSelect && accel) {\n            initialRange = selection.toOrientedRange();\n            editor.addSelectionMarker(initialRange);\n        }\n        \n        if (shift)\n            screenAnchor = session.documentToScreenPosition(selection.lead);            \n        else\n            selection.moveToPosition(pos);\n        \n        screenCursor = {row: -1, column: -1};\n\n        var onMouseSelectionEnd = function(e) {\n            blockSelect();\n            clearInterval(timerId);\n            editor.removeSelectionMarkers(rectSel);\n            if (!rectSel.length)\n                rectSel = [selection.toOrientedRange()];\n            if (initialRange) {\n                editor.removeSelectionMarker(initialRange);\n                selection.toSingleRange(initialRange);\n            }\n            for (var i = 0; i < rectSel.length; i++)\n                selection.addRange(rectSel[i]);\n            editor.inVirtualSelectionMode = false;\n            editor.$mouseHandler.$clickSelection = null;\n        };\n\n        var onSelectionInterval = blockSelect;\n\n        event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n        var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n        return e.preventDefault();\n    }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\ndefine(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module) {\nexports.defaultCommands = [{\n    name: \"addCursorAbove\",\n    exec: function(editor) { editor.selectMoreLines(-1); },\n    bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorBelow\",\n    exec: function(editor) { editor.selectMoreLines(1); },\n    bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorAboveSkipCurrent\",\n    exec: function(editor) { editor.selectMoreLines(-1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorBelowSkipCurrent\",\n    exec: function(editor) { editor.selectMoreLines(1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectMoreBefore\",\n    exec: function(editor) { editor.selectMore(-1); },\n    bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectMoreAfter\",\n    exec: function(editor) { editor.selectMore(1); },\n    bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectNextBefore\",\n    exec: function(editor) { editor.selectMore(-1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectNextAfter\",\n    exec: function(editor) { editor.selectMore(1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"splitIntoLines\",\n    exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n    bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n    readOnly: true\n}, {\n    name: \"alignCursors\",\n    exec: function(editor) { editor.alignCursors(); },\n    bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"findAll\",\n    exec: function(editor) { editor.findAll(); },\n    bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}];\nexports.multiSelectCommands = [{\n    name: \"singleSelection\",\n    bindKey: \"esc\",\n    exec: function(editor) { editor.exitMultiSelectMode(); },\n    scrollIntoView: \"cursor\",\n    readOnly: true,\n    isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\ndefine(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n    search.$options.wrap = true;\n    search.$options.needle = needle;\n    search.$options.backwards = dir == -1;\n    return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function() {\n    this.getSelectionMarkers = function() {\n        return this.$selectionMarkers;\n    };\n}).call(EditSession.prototype);\n(function() {\n    this.ranges = null;\n    this.rangeList = null;\n    this.addRange = function(range, $blockChangeEvents) {\n        if (!range)\n            return;\n\n        if (!this.inMultiSelectMode && this.rangeCount === 0) {\n            var oldRange = this.toOrientedRange();\n            this.rangeList.add(oldRange);\n            this.rangeList.add(range);\n            if (this.rangeList.ranges.length != 2) {\n                this.rangeList.removeAll();\n                return $blockChangeEvents || this.fromOrientedRange(range);\n            }\n            this.rangeList.removeAll();\n            this.rangeList.add(oldRange);\n            this.$onAddRange(oldRange);\n        }\n\n        if (!range.cursor)\n            range.cursor = range.end;\n\n        var removed = this.rangeList.add(range);\n\n        this.$onAddRange(range);\n\n        if (removed.length)\n            this.$onRemoveRange(removed);\n\n        if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n            this._signal(\"multiSelect\");\n            this.inMultiSelectMode = true;\n            this.session.$undoSelect = false;\n            this.rangeList.attach(this.session);\n        }\n\n        return $blockChangeEvents || this.fromOrientedRange(range);\n    };\n\n    this.toSingleRange = function(range) {\n        range = range || this.ranges[0];\n        var removed = this.rangeList.removeAll();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n\n        range && this.fromOrientedRange(range);\n    };\n    this.substractPoint = function(pos) {\n        var removed = this.rangeList.substractPoint(pos);\n        if (removed) {\n            this.$onRemoveRange(removed);\n            return removed[0];\n        }\n    };\n    this.mergeOverlappingRanges = function() {\n        var removed = this.rangeList.merge();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n    };\n\n    this.$onAddRange = function(range) {\n        this.rangeCount = this.rangeList.ranges.length;\n        this.ranges.unshift(range);\n        this._signal(\"addRange\", {range: range});\n    };\n\n    this.$onRemoveRange = function(removed) {\n        this.rangeCount = this.rangeList.ranges.length;\n        if (this.rangeCount == 1 && this.inMultiSelectMode) {\n            var lastRange = this.rangeList.ranges.pop();\n            removed.push(lastRange);\n            this.rangeCount = 0;\n        }\n\n        for (var i = removed.length; i--; ) {\n            var index = this.ranges.indexOf(removed[i]);\n            this.ranges.splice(index, 1);\n        }\n\n        this._signal(\"removeRange\", {ranges: removed});\n\n        if (this.rangeCount === 0 && this.inMultiSelectMode) {\n            this.inMultiSelectMode = false;\n            this._signal(\"singleSelect\");\n            this.session.$undoSelect = true;\n            this.rangeList.detach(this.session);\n        }\n\n        lastRange = lastRange || this.ranges[0];\n        if (lastRange && !lastRange.isEqual(this.getRange()))\n            this.fromOrientedRange(lastRange);\n    };\n    this.$initRangeList = function() {\n        if (this.rangeList)\n            return;\n\n        this.rangeList = new RangeList();\n        this.ranges = [];\n        this.rangeCount = 0;\n    };\n    this.getAllRanges = function() {\n        return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n    };\n\n    this.splitIntoLines = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        } else {\n            var range = this.getRange();\n            var isBackwards = this.isBackwards();\n            var startRow = range.start.row;\n            var endRow = range.end.row;\n            if (startRow == endRow) {\n                if (isBackwards)\n                    var start = range.end, end = range.start;\n                else\n                    var start = range.start, end = range.end;\n                \n                this.addRange(Range.fromPoints(end, end));\n                this.addRange(Range.fromPoints(start, start));\n                return;\n            }\n\n            var rectSel = [];\n            var r = this.getLineRange(startRow, true);\n            r.start.column = range.start.column;\n            rectSel.push(r);\n\n            for (var i = startRow + 1; i < endRow; i++)\n                rectSel.push(this.getLineRange(i, true));\n\n            r = this.getLineRange(endRow, true);\n            r.end.column = range.end.column;\n            rectSel.push(r);\n\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n    this.toggleBlockSelection = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        } else {\n            var cursor = this.session.documentToScreenPosition(this.cursor);\n            var anchor = this.session.documentToScreenPosition(this.anchor);\n\n            var rectSel = this.rectangularRangeBlock(cursor, anchor);\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n    this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n        var rectSel = [];\n\n        var xBackwards = screenCursor.column < screenAnchor.column;\n        if (xBackwards) {\n            var startColumn = screenCursor.column;\n            var endColumn = screenAnchor.column;\n            var startOffsetX = screenCursor.offsetX;\n            var endOffsetX = screenAnchor.offsetX;\n        } else {\n            var startColumn = screenAnchor.column;\n            var endColumn = screenCursor.column;\n            var startOffsetX = screenAnchor.offsetX;\n            var endOffsetX = screenCursor.offsetX;\n        }\n\n        var yBackwards = screenCursor.row < screenAnchor.row;\n        if (yBackwards) {\n            var startRow = screenCursor.row;\n            var endRow = screenAnchor.row;\n        } else {\n            var startRow = screenAnchor.row;\n            var endRow = screenCursor.row;\n        }\n\n        if (startColumn < 0)\n            startColumn = 0;\n        if (startRow < 0)\n            startRow = 0;\n\n        if (startRow == endRow)\n            includeEmptyLines = true;\n\n        var docEnd;\n        for (var row = startRow; row <= endRow; row++) {\n            var range = Range.fromPoints(\n                this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n                this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n            );\n            if (range.isEmpty()) {\n                if (docEnd && isSamePoint(range.end, docEnd))\n                    break;\n                docEnd = range.end;\n            }\n            range.cursor = xBackwards ? range.start : range.end;\n            rectSel.push(range);\n        }\n\n        if (yBackwards)\n            rectSel.reverse();\n\n        if (!includeEmptyLines) {\n            var end = rectSel.length - 1;\n            while (rectSel[end].isEmpty() && end > 0)\n                end--;\n            if (end > 0) {\n                var start = 0;\n                while (rectSel[start].isEmpty())\n                    start++;\n            }\n            for (var i = end; i >= start; i--) {\n                if (rectSel[i].isEmpty())\n                    rectSel.splice(i, 1);\n            }\n        }\n\n        return rectSel;\n    };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.updateSelectionMarkers = function() {\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.addSelectionMarker = function(orientedRange) {\n        if (!orientedRange.cursor)\n            orientedRange.cursor = orientedRange.end;\n\n        var style = this.getSelectionStyle();\n        orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n        this.session.$selectionMarkers.push(orientedRange);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n        return orientedRange;\n    };\n    this.removeSelectionMarker = function(range) {\n        if (!range.marker)\n            return;\n        this.session.removeMarker(range.marker);\n        var index = this.session.$selectionMarkers.indexOf(range);\n        if (index != -1)\n            this.session.$selectionMarkers.splice(index, 1);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n    };\n\n    this.removeSelectionMarkers = function(ranges) {\n        var markerList = this.session.$selectionMarkers;\n        for (var i = ranges.length; i--; ) {\n            var range = ranges[i];\n            if (!range.marker)\n                continue;\n            this.session.removeMarker(range.marker);\n            var index = markerList.indexOf(range);\n            if (index != -1)\n                markerList.splice(index, 1);\n        }\n        this.session.selectionMarkerCount = markerList.length;\n    };\n\n    this.$onAddRange = function(e) {\n        this.addSelectionMarker(e.range);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onRemoveRange = function(e) {\n        this.removeSelectionMarkers(e.ranges);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onMultiSelect = function(e) {\n        if (this.inMultiSelectMode)\n            return;\n        this.inMultiSelectMode = true;\n\n        this.setStyle(\"ace_multiselect\");\n        this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n        this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onSingleSelect = function(e) {\n        if (this.session.multiSelect.inVirtualMode)\n            return;\n        this.inMultiSelectMode = false;\n\n        this.unsetStyle(\"ace_multiselect\");\n        this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n        this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n        this._emit(\"changeSelection\");\n    };\n\n    this.$onMultiSelectExec = function(e) {\n        var command = e.command;\n        var editor = e.editor;\n        if (!editor.multiSelect)\n            return;\n        if (!command.multiSelectAction) {\n            var result = command.exec(editor, e.args || {});\n            editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n            editor.multiSelect.mergeOverlappingRanges();\n        } else if (command.multiSelectAction == \"forEach\") {\n            result = editor.forEachSelection(command, e.args);\n        } else if (command.multiSelectAction == \"forEachLine\") {\n            result = editor.forEachSelection(command, e.args, true);\n        } else if (command.multiSelectAction == \"single\") {\n            editor.exitMultiSelectMode();\n            result = command.exec(editor, e.args || {});\n        } else {\n            result = command.multiSelectAction(editor, e.args || {});\n        }\n        return result;\n    }; \n    this.forEachSelection = function(cmd, args, options) {\n        if (this.inVirtualSelectionMode)\n            return;\n        var keepOrder = options && options.keepOrder;\n        var $byLines = options == true || options && options.$byLines;\n        var session = this.session;\n        var selection = this.selection;\n        var rangeList = selection.rangeList;\n        var ranges = (keepOrder ? selection : rangeList).ranges;\n        var result;\n        \n        if (!ranges.length)\n            return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n        \n        var reg = selection._eventRegistry;\n        selection._eventRegistry = {};\n\n        var tmpSel = new Selection(session);\n        this.inVirtualSelectionMode = true;\n        for (var i = ranges.length; i--;) {\n            if ($byLines) {\n                while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n                    i--;\n            }\n            tmpSel.fromOrientedRange(ranges[i]);\n            tmpSel.index = i;\n            this.selection = session.selection = tmpSel;\n            var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n            if (!result && cmdResult !== undefined)\n                result = cmdResult;\n            tmpSel.toOrientedRange(ranges[i]);\n        }\n        tmpSel.detach();\n\n        this.selection = session.selection = selection;\n        this.inVirtualSelectionMode = false;\n        selection._eventRegistry = reg;\n        selection.mergeOverlappingRanges();\n        if (selection.ranges[0])\n            selection.fromOrientedRange(selection.ranges[0]);\n        \n        var anim = this.renderer.$scrollAnimation;\n        this.onCursorChange();\n        this.onSelectionChange();\n        if (anim && anim.from == anim.to)\n            this.renderer.animateScrolling(anim.from);\n        \n        return result;\n    };\n    this.exitMultiSelectMode = function() {\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n            return;\n        this.multiSelect.toSingleRange();\n    };\n\n    this.getSelectedText = function() {\n        var text = \"\";\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var ranges = this.multiSelect.rangeList.ranges;\n            var buf = [];\n            for (var i = 0; i < ranges.length; i++) {\n                buf.push(this.session.getTextRange(ranges[i]));\n            }\n            var nl = this.session.getDocument().getNewLineCharacter();\n            text = buf.join(nl);\n            if (text.length == (buf.length - 1) * nl.length)\n                text = \"\";\n        } else if (!this.selection.isEmpty()) {\n            text = this.session.getTextRange(this.getSelectionRange());\n        }\n        return text;\n    };\n    \n    this.$checkMultiselectChange = function(e, anchor) {\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var range = this.multiSelect.ranges[0];\n            if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n                return;\n            var pos = anchor == this.multiSelect.anchor\n                ? range.cursor == range.start ? range.end : range.start\n                : range.cursor;\n            if (pos.row != anchor.row \n                || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n                this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n            else\n                this.multiSelect.mergeOverlappingRanges();\n        }\n    };\n    this.findAll = function(needle, options, additive) {\n        options = options || {};\n        options.needle = needle || options.needle;\n        if (options.needle == undefined) {\n            var range = this.selection.isEmpty()\n                ? this.selection.getWordRange()\n                : this.selection.getRange();\n            options.needle = this.session.getTextRange(range);\n        }    \n        this.$search.set(options);\n        \n        var ranges = this.$search.findAll(this.session);\n        if (!ranges.length)\n            return 0;\n\n        var selection = this.multiSelect;\n\n        if (!additive)\n            selection.toSingleRange(ranges[0]);\n\n        for (var i = ranges.length; i--; )\n            selection.addRange(ranges[i], true);\n        if (range && selection.rangeList.rangeAtPoint(range.start))\n            selection.addRange(range, true);\n        \n        return ranges.length;\n    };\n    this.selectMoreLines = function(dir, skip) {\n        var range = this.selection.toOrientedRange();\n        var isBackwards = range.cursor == range.end;\n\n        var screenLead = this.session.documentToScreenPosition(range.cursor);\n        if (this.selection.$desiredColumn)\n            screenLead.column = this.selection.$desiredColumn;\n\n        var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n        if (!range.isEmpty()) {\n            var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n            var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n        } else {\n            var anchor = lead;\n        }\n\n        if (isBackwards) {\n            var newRange = Range.fromPoints(lead, anchor);\n            newRange.cursor = newRange.start;\n        } else {\n            var newRange = Range.fromPoints(anchor, lead);\n            newRange.cursor = newRange.end;\n        }\n\n        newRange.desiredColumn = screenLead.column;\n        if (!this.selection.inMultiSelectMode) {\n            this.selection.addRange(range);\n        } else {\n            if (skip)\n                var toRemove = range.cursor;\n        }\n\n        this.selection.addRange(newRange);\n        if (toRemove)\n            this.selection.substractPoint(toRemove);\n    };\n    this.transposeSelections = function(dir) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var all = sel.ranges;\n\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            if (range.isEmpty()) {\n                var tmp = session.getWordRange(range.start.row, range.start.column);\n                range.start.row = tmp.start.row;\n                range.start.column = tmp.start.column;\n                range.end.row = tmp.end.row;\n                range.end.column = tmp.end.column;\n            }\n        }\n        sel.mergeOverlappingRanges();\n\n        var words = [];\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            words.unshift(session.getTextRange(range));\n        }\n\n        if (dir < 0)\n            words.unshift(words.pop());\n        else\n            words.push(words.shift());\n\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            var tmp = range.clone();\n            session.replace(range, words[i]);\n            range.start.row = tmp.start.row;\n            range.start.column = tmp.start.column;\n        }\n        sel.fromOrientedRange(sel.ranges[0]);\n    };\n    this.selectMore = function(dir, skip, stopAtFirst) {\n        var session = this.session;\n        var sel = session.multiSelect;\n\n        var range = sel.toOrientedRange();\n        if (range.isEmpty()) {\n            range = session.getWordRange(range.start.row, range.start.column);\n            range.cursor = dir == -1 ? range.start : range.end;\n            this.multiSelect.addRange(range);\n            if (stopAtFirst)\n                return;\n        }\n        var needle = session.getTextRange(range);\n\n        var newRange = find(session, needle, dir);\n        if (newRange) {\n            newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n            this.session.unfold(newRange);\n            this.multiSelect.addRange(newRange);\n            this.renderer.scrollCursorIntoView(null, 0.5);\n        }\n        if (skip)\n            this.multiSelect.substractPoint(range.cursor);\n    };\n    this.alignCursors = function() {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var ranges = sel.ranges;\n        var row = -1;\n        var sameRowRanges = ranges.filter(function(r) {\n            if (r.cursor.row == row)\n                return true;\n            row = r.cursor.row;\n        });\n        \n        if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n            var range = this.selection.getRange();\n            var fr = range.start.row, lr = range.end.row;\n            var guessRange = fr == lr;\n            if (guessRange) {\n                var max = this.session.getLength();\n                var line;\n                do {\n                    line = this.session.getLine(lr);\n                } while (/[=:]/.test(line) && ++lr < max);\n                do {\n                    line = this.session.getLine(fr);\n                } while (/[=:]/.test(line) && --fr > 0);\n                \n                if (fr < 0) fr = 0;\n                if (lr >= max) lr = max - 1;\n            }\n            var lines = this.session.removeFullLines(fr, lr);\n            lines = this.$reAlignText(lines, guessRange);\n            this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n            if (!guessRange) {\n                range.start.column = 0;\n                range.end.column = lines[lines.length - 1].length;\n            }\n            this.selection.setRange(range);\n        } else {\n            sameRowRanges.forEach(function(r) {\n                sel.substractPoint(r.cursor);\n            });\n\n            var maxCol = 0;\n            var minSpace = Infinity;\n            var spaceOffsets = ranges.map(function(r) {\n                var p = r.cursor;\n                var line = session.getLine(p.row);\n                var spaceOffset = line.substr(p.column).search(/\\S/g);\n                if (spaceOffset == -1)\n                    spaceOffset = 0;\n\n                if (p.column > maxCol)\n                    maxCol = p.column;\n                if (spaceOffset < minSpace)\n                    minSpace = spaceOffset;\n                return spaceOffset;\n            });\n            ranges.forEach(function(r, i) {\n                var p = r.cursor;\n                var l = maxCol - p.column;\n                var d = spaceOffsets[i] - minSpace;\n                if (l > d)\n                    session.insert(p, lang.stringRepeat(\" \", l - d));\n                else\n                    session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n                r.start.column = r.end.column = maxCol;\n                r.start.row = r.end.row = p.row;\n                r.cursor = r.end;\n            });\n            sel.fromOrientedRange(ranges[0]);\n            this.renderer.updateCursor();\n            this.renderer.updateBackMarkers();\n        }\n    };\n\n    this.$reAlignText = function(lines, forceLeft) {\n        var isLeftAligned = true, isRightAligned = true;\n        var startW, textW, endW;\n\n        return lines.map(function(line) {\n            var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n            if (!m)\n                return [line];\n\n            if (startW == null) {\n                startW = m[1].length;\n                textW = m[2].length;\n                endW = m[3].length;\n                return m;\n            }\n\n            if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n                isRightAligned = false;\n            if (startW != m[1].length)\n                isLeftAligned = false;\n\n            if (startW > m[1].length)\n                startW = m[1].length;\n            if (textW < m[2].length)\n                textW = m[2].length;\n            if (endW > m[3].length)\n                endW = m[3].length;\n\n            return m;\n        }).map(forceLeft ? alignLeft :\n            isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n        function spaces(n) {\n            return lang.stringRepeat(\" \", n);\n        }\n\n        function alignLeft(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(textW - m[2].length + endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function alignRight(m) {\n            return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function unAlign(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n    };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n    var session = e.session;\n    if (session && !session.multiSelect) {\n        session.$selectionMarkers = [];\n        session.selection.$initRangeList();\n        session.multiSelect = session.selection;\n    }\n    this.multiSelect = session && session.multiSelect;\n\n    var oldSession = e.oldSession;\n    if (oldSession) {\n        oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n        oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n        oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n        oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n        oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n        oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n    }\n\n    if (session) {\n        session.multiSelect.on(\"addRange\", this.$onAddRange);\n        session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n        session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n        session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n        session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n        session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n    }\n\n    if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n        if (session.selection.inMultiSelectMode)\n            this.$onMultiSelect();\n        else\n            this.$onSingleSelect();\n    }\n};\nfunction MultiSelect(editor) {\n    if (editor.$multiselectOnSessionChange)\n        return;\n    editor.$onAddRange = editor.$onAddRange.bind(editor);\n    editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n    editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n    editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n    editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n    editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n    editor.$multiselectOnSessionChange(editor);\n    editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n    editor.on(\"mousedown\", onMouseDown);\n    editor.commands.addCommands(commands.defaultCommands);\n\n    addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n    var el = editor.textInput.getElement();\n    var altCursor = false;\n    event.addListener(el, \"keydown\", function(e) {\n        var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n        if (editor.$blockSelectEnabled && altDown) {\n            if (!altCursor) {\n                editor.renderer.setMouseCursor(\"crosshair\");\n                altCursor = true;\n            }\n        } else if (altCursor) {\n            reset();\n        }\n    });\n\n    event.addListener(el, \"keyup\", reset);\n    event.addListener(el, \"blur\", reset);\n    function reset(e) {\n        if (altCursor) {\n            editor.renderer.setMouseCursor(\"\");\n            altCursor = false;\n        }\n    }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    enableMultiselect: {\n        set: function(val) {\n            MultiSelect(this);\n            if (val) {\n                this.on(\"changeSession\", this.$multiselectOnSessionChange);\n                this.on(\"mousedown\", onMouseDown);\n            } else {\n                this.off(\"changeSession\", this.$multiselectOnSessionChange);\n                this.off(\"mousedown\", onMouseDown);\n            }\n        },\n        value: true\n    },\n    enableBlockSelect: {\n        set: function(val) {\n            this.$blockSelectEnabled = val;\n        },\n        value: true\n    }\n});\n\n\n\n});\n\ndefine(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n    this.foldingStartMarker = null;\n    this.foldingStopMarker = null;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.foldingStartMarker.test(line))\n            return \"start\";\n        if (foldStyle == \"markbeginend\"\n                && this.foldingStopMarker\n                && this.foldingStopMarker.test(line))\n            return \"end\";\n        return \"\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        return null;\n    };\n\n    this.indentationBlock = function(session, row, column) {\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1)\n            return;\n\n        var startColumn = column || line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            var level = session.getLine(row).search(re);\n\n            if (level == -1)\n                continue;\n\n            if (level <= startLevel)\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n    this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n        var start = {row: row, column: column + 1};\n        var end = session.$findClosingBracket(bracket, start, typeRe);\n        if (!end)\n            return;\n\n        var fw = session.foldWidgets[end.row];\n        if (fw == null)\n            fw = session.getFoldWidget(end.row);\n\n        if (fw == \"start\" && end.row > start.row) {\n            end.row --;\n            end.column = session.getLine(end.row).length;\n        }\n        return Range.fromPoints(start, end);\n    };\n\n    this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n        var end = {row: row, column: column};\n        var start = session.$findOpeningBracket(bracket, end);\n\n        if (!start)\n            return;\n\n        start.column++;\n        end.column--;\n\n        return  Range.fromPoints(start, end);\n    };\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\ndefine(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\n\n\nfunction LineWidgets(session) {\n    this.session = session;\n    this.session.widgetManager = this;\n    this.session.getRowLength = this.getRowLength;\n    this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n    this.updateOnChange = this.updateOnChange.bind(this);\n    this.renderWidgets = this.renderWidgets.bind(this);\n    this.measureWidgets = this.measureWidgets.bind(this);\n    this.session._changedWidgets = [];\n    this.$onChangeEditor = this.$onChangeEditor.bind(this);\n    \n    this.session.on(\"change\", this.updateOnChange);\n    this.session.on(\"changeFold\", this.updateOnFold);\n    this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n    this.getRowLength = function(row) {\n        var h;\n        if (this.lineWidgets)\n            h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else \n            h = 0;\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1 + h;\n        } else {\n            return this.$wrapData[row].length + 1 + h;\n        }\n    };\n\n    this.$getWidgetScreenLength = function() {\n        var screenRows = 0;\n        this.lineWidgets.forEach(function(w){\n            if (w && w.rowCount && !w.hidden)\n                screenRows += w.rowCount;\n        });\n        return screenRows;\n    };    \n    \n    this.$onChangeEditor = function(e) {\n        this.attach(e.editor);\n    };\n    \n    this.attach = function(editor) {\n        if (editor  && editor.widgetManager && editor.widgetManager != this)\n            editor.widgetManager.detach();\n\n        if (this.editor == editor)\n            return;\n\n        this.detach();\n        this.editor = editor;\n        \n        if (editor) {\n            editor.widgetManager = this;\n            editor.renderer.on(\"beforeRender\", this.measureWidgets);\n            editor.renderer.on(\"afterRender\", this.renderWidgets);\n        }\n    };\n    this.detach = function(e) {\n        var editor = this.editor;\n        if (!editor)\n            return;\n        \n        this.editor = null;\n        editor.widgetManager = null;\n        \n        editor.renderer.off(\"beforeRender\", this.measureWidgets);\n        editor.renderer.off(\"afterRender\", this.renderWidgets);\n        var lineWidgets = this.session.lineWidgets;\n        lineWidgets && lineWidgets.forEach(function(w) {\n            if (w && w.el && w.el.parentNode) {\n                w._inDocument = false;\n                w.el.parentNode.removeChild(w.el);\n            }\n        });\n    };\n\n    this.updateOnFold = function(e, session) {\n        var lineWidgets = session.lineWidgets;\n        if (!lineWidgets || !e.action)\n            return;\n        var fold = e.data;\n        var start = fold.start.row;\n        var end = fold.end.row;\n        var hide = e.action == \"add\";\n        for (var i = start + 1; i < end; i++) {\n            if (lineWidgets[i])\n                lineWidgets[i].hidden = hide;\n        }\n        if (lineWidgets[end]) {\n            if (hide) {\n                if (!lineWidgets[start])\n                    lineWidgets[start] = lineWidgets[end];\n                else\n                    lineWidgets[end].hidden = hide;\n            } else {\n                if (lineWidgets[start] == lineWidgets[end])\n                    lineWidgets[start] = undefined;\n                lineWidgets[end].hidden = hide;\n            }\n        }\n    };\n    \n    this.updateOnChange = function(delta) {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets) return;\n        \n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n\n        if (len === 0) {\n        } else if (delta.action == 'remove') {\n            var removed = lineWidgets.splice(startRow + 1, len);\n            removed.forEach(function(w) {\n                w && this.removeLineWidget(w);\n            }, this);\n            this.$updateRows();\n        } else {\n            var args = new Array(len);\n            args.unshift(startRow, 0);\n            lineWidgets.splice.apply(lineWidgets, args);\n            this.$updateRows();\n        }\n    };\n    \n    this.$updateRows = function() {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets) return;\n        var noWidgets = true;\n        lineWidgets.forEach(function(w, i) {\n            if (w) {\n                noWidgets = false;\n                w.row = i;\n                while (w.$oldWidget) {\n                    w.$oldWidget.row = i;\n                    w = w.$oldWidget;\n                }\n            }\n        });\n        if (noWidgets)\n            this.session.lineWidgets = null;\n    };\n\n    this.addLineWidget = function(w) {\n        if (!this.session.lineWidgets)\n            this.session.lineWidgets = new Array(this.session.getLength());\n        \n        var old = this.session.lineWidgets[w.row];\n        if (old) {\n            w.$oldWidget = old;\n            if (old.el && old.el.parentNode) {\n                old.el.parentNode.removeChild(old.el);\n                old._inDocument = false;\n            }\n        }\n            \n        this.session.lineWidgets[w.row] = w;\n        \n        w.session = this.session;\n        \n        var renderer = this.editor.renderer;\n        if (w.html && !w.el) {\n            w.el = dom.createElement(\"div\");\n            w.el.innerHTML = w.html;\n        }\n        if (w.el) {\n            dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n            w.el.style.position = \"absolute\";\n            w.el.style.zIndex = 5;\n            renderer.container.appendChild(w.el);\n            w._inDocument = true;\n        }\n        \n        if (!w.coverGutter) {\n            w.el.style.zIndex = 3;\n        }\n        if (w.pixelHeight == null) {\n            w.pixelHeight = w.el.offsetHeight;\n        }\n        if (w.rowCount == null) {\n            w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n        }\n        \n        var fold = this.session.getFoldAt(w.row, 0);\n        w.$fold = fold;\n        if (fold) {\n            var lineWidgets = this.session.lineWidgets;\n            if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n                lineWidgets[fold.start.row] = w;\n            else\n                w.hidden = true;\n        }\n            \n        this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n        \n        this.$updateRows();\n        this.renderWidgets(null, renderer);\n        this.onWidgetChanged(w);\n        return w;\n    };\n    \n    this.removeLineWidget = function(w) {\n        w._inDocument = false;\n        w.session = null;\n        if (w.el && w.el.parentNode)\n            w.el.parentNode.removeChild(w.el);\n        if (w.editor && w.editor.destroy) try {\n            w.editor.destroy();\n        } catch(e){}\n        if (this.session.lineWidgets) {\n            var w1 = this.session.lineWidgets[w.row];\n            if (w1 == w) {\n                this.session.lineWidgets[w.row] = w.$oldWidget;\n                if (w.$oldWidget)\n                    this.onWidgetChanged(w.$oldWidget);\n            } else {\n                while (w1) {\n                    if (w1.$oldWidget == w) {\n                        w1.$oldWidget = w.$oldWidget;\n                        break;\n                    }\n                    w1 = w1.$oldWidget;\n                }\n            }\n        }\n        this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n        this.$updateRows();\n    };\n    \n    this.getWidgetsAtRow = function(row) {\n        var lineWidgets = this.session.lineWidgets;\n        var w = lineWidgets && lineWidgets[row];\n        var list = [];\n        while (w) {\n            list.push(w);\n            w = w.$oldWidget;\n        }\n        return list;\n    };\n    \n    this.onWidgetChanged = function(w) {\n        this.session._changedWidgets.push(w);\n        this.editor && this.editor.renderer.updateFull();\n    };\n    \n    this.measureWidgets = function(e, renderer) {\n        var changedWidgets = this.session._changedWidgets;\n        var config = renderer.layerConfig;\n        \n        if (!changedWidgets || !changedWidgets.length) return;\n        var min = Infinity;\n        for (var i = 0; i < changedWidgets.length; i++) {\n            var w = changedWidgets[i];\n            if (!w || !w.el) continue;\n            if (w.session != this.session) continue;\n            if (!w._inDocument) {\n                if (this.session.lineWidgets[w.row] != w)\n                    continue;\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            \n            w.h = w.el.offsetHeight;\n            \n            if (!w.fixedWidth) {\n                w.w = w.el.offsetWidth;\n                w.screenWidth = Math.ceil(w.w / config.characterWidth);\n            }\n            \n            var rowCount = w.h / config.lineHeight;\n            if (w.coverLine) {\n                rowCount -= this.session.getRowLineCount(w.row);\n                if (rowCount < 0)\n                    rowCount = 0;\n            }\n            if (w.rowCount != rowCount) {\n                w.rowCount = rowCount;\n                if (w.row < min)\n                    min = w.row;\n            }\n        }\n        if (min != Infinity) {\n            this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n            this.session.lineWidgetWidth = null;\n        }\n        this.session._changedWidgets = [];\n    };\n    \n    this.renderWidgets = function(e, renderer) {\n        var config = renderer.layerConfig;\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var first = Math.min(this.firstRow, config.firstRow);\n        var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n        \n        while (first > 0 && !lineWidgets[first])\n            first--;\n        \n        this.firstRow = config.firstRow;\n        this.lastRow = config.lastRow;\n\n        renderer.$cursorLayer.config = config;\n        for (var i = first; i <= last; i++) {\n            var w = lineWidgets[i];\n            if (!w || !w.el) continue;\n            if (w.hidden) {\n                w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n                continue;\n            }\n            if (!w._inDocument) {\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n            if (!w.coverLine)\n                top += config.lineHeight * this.session.getRowLineCount(w.row);\n            w.el.style.top = top - config.offset + \"px\";\n            \n            var left = w.coverGutter ? 0 : renderer.gutterWidth;\n            if (!w.fixedWidth)\n                left -= renderer.scrollLeft;\n            w.el.style.left = left + \"px\";\n            \n            if (w.fullWidth && w.screenWidth) {\n                w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n            }\n            \n            if (w.fixedWidth) {\n                w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n            } else {\n                w.el.style.right = \"\";\n            }\n        }\n    };\n    \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\ndefine(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n    var first = 0;\n    var last = array.length - 1;\n\n    while (first <= last) {\n        var mid = (first + last) >> 1;\n        var c = comparator(needle, array[mid]);\n        if (c > 0)\n            first = mid + 1;\n        else if (c < 0)\n            last = mid - 1;\n        else\n            return mid;\n    }\n    return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n    var annotations = session.getAnnotations().sort(Range.comparePoints);\n    if (!annotations.length)\n        return;\n    \n    var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n    if (i < 0)\n        i = -i - 1;\n    \n    if (i >= annotations.length)\n        i = dir > 0 ? 0 : annotations.length - 1;\n    else if (i === 0 && dir < 0)\n        i = annotations.length - 1;\n    \n    var annotation = annotations[i];\n    if (!annotation || !dir)\n        return;\n\n    if (annotation.row === row) {\n        do {\n            annotation = annotations[i += dir];\n        } while (annotation && annotation.row === row);\n        if (!annotation)\n            return annotations.slice();\n    }\n    \n    \n    var matched = [];\n    row = annotation.row;\n    do {\n        matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n        annotation = annotations[i += dir];\n    } while (annotation && annotation.row == row);\n    return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n    var session = editor.session;\n    if (!session.widgetManager) {\n        session.widgetManager = new LineWidgets(session);\n        session.widgetManager.attach(editor);\n    }\n    \n    var pos = editor.getCursorPosition();\n    var row = pos.row;\n    var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n        return w.type == \"errorMarker\";\n    })[0];\n    if (oldWidget) {\n        oldWidget.destroy();\n    } else {\n        row -= dir;\n    }\n    var annotations = findAnnotations(session, row, dir);\n    var gutterAnno;\n    if (annotations) {\n        var annotation = annotations[0];\n        pos.column = (annotation.pos && typeof annotation.column != \"number\"\n            ? annotation.pos.sc\n            : annotation.column) || 0;\n        pos.row = annotation.row;\n        gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n    } else if (oldWidget) {\n        return;\n    } else {\n        gutterAnno = {\n            text: [\"Looks good!\"],\n            className: \"ace_ok\"\n        };\n    }\n    editor.session.unfold(pos.row);\n    editor.selection.moveToPosition(pos);\n    \n    var w = {\n        row: pos.row, \n        fixedWidth: true,\n        coverGutter: true,\n        el: dom.createElement(\"div\"),\n        type: \"errorMarker\"\n    };\n    var el = w.el.appendChild(dom.createElement(\"div\"));\n    var arrow = w.el.appendChild(dom.createElement(\"div\"));\n    arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n    \n    var left = editor.renderer.$cursorLayer\n        .getPixelPosition(pos).left;\n    arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n    \n    w.el.className = \"error_widget_wrapper\";\n    el.className = \"error_widget \" + gutterAnno.className;\n    el.innerHTML = gutterAnno.text.join(\"<br>\");\n    \n    el.appendChild(dom.createElement(\"div\"));\n    \n    var kb = function(_, hashId, keyString) {\n        if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n            w.destroy();\n            return {command: \"null\"};\n        }\n    };\n    \n    w.destroy = function() {\n        if (editor.$mouseHandler.isMousePressed)\n            return;\n        editor.keyBinding.removeKeyboardHandler(kb);\n        session.widgetManager.removeLineWidget(w);\n        editor.off(\"changeSelection\", w.destroy);\n        editor.off(\"changeSession\", w.destroy);\n        editor.off(\"mouseup\", w.destroy);\n        editor.off(\"change\", w.destroy);\n    };\n    \n    editor.keyBinding.addKeyboardHandler(kb);\n    editor.on(\"changeSelection\", w.destroy);\n    editor.on(\"changeSession\", w.destroy);\n    editor.on(\"mouseup\", w.destroy);\n    editor.on(\"change\", w.destroy);\n    \n    editor.session.widgetManager.addLineWidget(w);\n    \n    w.el.onmousedown = editor.focus.bind(editor);\n    \n    editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n    .error_widget_wrapper {\\\n        background: inherit;\\\n        color: inherit;\\\n        border:none\\\n    }\\\n    .error_widget {\\\n        border-top: solid 2px;\\\n        border-bottom: solid 2px;\\\n        margin: 5px 0;\\\n        padding: 10px 40px;\\\n        white-space: pre-wrap;\\\n    }\\\n    .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n        border-color: #ff5a5a\\\n    }\\\n    .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n        border-color: #F1D817\\\n    }\\\n    .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n        border-color: #5a5a5a\\\n    }\\\n    .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n        border-color: #5aaa5a\\\n    }\\\n    .error_widget_arrow {\\\n        position: absolute;\\\n        border: solid 5px;\\\n        border-top-color: transparent!important;\\\n        border-right-color: transparent!important;\\\n        border-left-color: transparent!important;\\\n        top: -5px;\\\n    }\\\n\", \"\");\n\n});\n\ndefine(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\n\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\n\nexports.config = require(\"./config\");\nexports.require = require;\n\nif (typeof define === \"function\")\n    exports.define = define;\nexports.edit = function(el, options) {\n    if (typeof el == \"string\") {\n        var _id = el;\n        el = document.getElementById(_id);\n        if (!el)\n            throw new Error(\"ace.edit can't find div #\" + _id);\n    }\n\n    if (el && el.env && el.env.editor instanceof Editor)\n        return el.env.editor;\n\n    var value = \"\";\n    if (el && /input|textarea/i.test(el.tagName)) {\n        var oldNode = el;\n        value = oldNode.value;\n        el = dom.createElement(\"pre\");\n        oldNode.parentNode.replaceChild(el, oldNode);\n    } else if (el) {\n        value = el.textContent;\n        el.innerHTML = \"\";\n    }\n\n    var doc = exports.createEditSession(value);\n\n    var editor = new Editor(new Renderer(el), doc, options);\n\n    var env = {\n        document: doc,\n        editor: editor,\n        onResize: editor.resize.bind(editor, null)\n    };\n    if (oldNode) env.textarea = oldNode;\n    event.addListener(window, \"resize\", env.onResize);\n    editor.on(\"destroy\", function() {\n        event.removeListener(window, \"resize\", env.onResize);\n        env.editor.container.env = null; // prevent memory leak on old ie\n    });\n    editor.container.env = editor.env = env;\n    return editor;\n};\nexports.createEditSession = function(text, mode) {\n    var doc = new EditSession(text, mode);\n    doc.setUndoManager(new UndoManager());\n    return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = \"1.4.3\";\n});            (function() {\n                window.require([\"ace/ace\"], function(a) {\n                    if (a) {\n                        a.config.init(true);\n                        a.define = window.define;\n                    }\n                    if (!window.ace)\n                        window.ace = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        window.ace[key] = a[key];\n                    window.ace[\"default\"] = window.ace;\n                    if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                        module.exports = window.ace;\n                    }\n                });\n            })();\n        "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-beautify.js",
    "content": "define(\"ace/ext/beautify\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nexports.singletonTags = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"html\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"];\nexports.blockTags = [\"article\", \"aside\", \"blockquote\", \"body\", \"div\", \"dl\", \"fieldset\", \"footer\", \"form\", \"head\", \"header\", \"html\", \"nav\", \"ol\", \"p\", \"script\", \"section\", \"style\", \"table\", \"tbody\", \"tfoot\", \"thead\", \"ul\"];\n\nexports.beautify = function(session) {\n    var iterator = new TokenIterator(session, 0, 0);\n    var token = iterator.getCurrentToken();\n    var tabString = session.getTabString();\n    var singletonTags = exports.singletonTags;\n    var blockTags = exports.blockTags;\n    var nextToken;\n    var breakBefore = false;\n    var spaceBefore = false;\n    var spaceAfter = false;\n    var code = \"\";\n    var value = \"\";\n    var tagName = \"\";\n    var depth = 0;\n    var lastDepth = 0;\n    var lastIndent = 0;\n    var indent = 0;\n    var unindent = 0;\n    var roundDepth = 0;\n    var curlyDepth = 0;\n    var row;\n    var curRow = 0;\n    var rowsToAdd = 0;\n    var rowTokens = [];\n    var abort = false;\n    var i;\n    var indentNextLine = false;\n    var inTag = false;\n    var inCSS = false;\n    var inBlock = false;\n    var levels = {0: 0};\n    var parents = [];\n\n    var trimNext = function() {\n        if (nextToken && nextToken.value && nextToken.type !== 'string.regexp')\n            nextToken.value = nextToken.value.trim();\n    };\n\n    var trimLine = function() {\n        code = code.replace(/ +$/, \"\");\n    };\n\n    var trimCode = function() {\n        code = code.trimRight();\n        breakBefore = false;\n    };\n\n    while (token !== null) {\n        curRow = iterator.getCurrentTokenRow();\n        rowTokens = iterator.$rowTokens;\n        nextToken = iterator.stepForward();\n\n        if (typeof token !== \"undefined\") {\n            value = token.value;\n            unindent = 0;\n            inCSS = (tagName === \"style\" || session.$modeId === \"ace/mode/css\");\n            if (is(token, \"tag-open\")) {\n                inTag = true;\n                if (nextToken)\n                    inBlock = (blockTags.indexOf(nextToken.value) !== -1);\n                if (value === \"</\") {\n                    if (inBlock && !breakBefore && rowsToAdd < 1)\n                        rowsToAdd++;\n\n                    if (inCSS)\n                        rowsToAdd = 1;\n\n                    unindent = 1;\n                    inBlock = false;\n                }\n            } else if (is(token, \"tag-close\")) {\n                inTag = false;\n            } else if (is(token, \"comment.start\")) {\n                inBlock = true;\n            } else if (is(token, \"comment.end\")) {\n                inBlock = false;\n            }\n            if (!inTag && !rowsToAdd && token.type === \"paren.rparen\" && token.value.substr(0, 1) === \"}\") {\n                rowsToAdd++;\n            }\n            if (curRow !== row) {\n                rowsToAdd = curRow;\n\n                if (row)\n                    rowsToAdd -= row;\n            }\n\n            if (rowsToAdd) {\n                trimCode();\n                for (; rowsToAdd > 0; rowsToAdd--)\n                    code += \"\\n\";\n\n                breakBefore = true;\n                if (!is(token, \"comment\") && !token.type.match(/^(comment|string)$/))\n                   value = value.trimLeft();\n            }\n\n            if (value) {\n                if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|foreach|while|switch)$/)) {\n                    parents[depth] = value;\n\n                    trimNext();\n                    spaceAfter = true;\n                    if (value.match(/^(else|elseif)$/)) {\n                        if (code.match(/\\}[\\s]*$/)) {\n                            trimCode();\n                            spaceBefore = true;\n                        }\n                    }\n                } else if (token.type === \"paren.lparen\") {\n                    trimNext();\n                    if (value.substr(-1) === \"{\") {\n                        spaceAfter = true;\n                        indentNextLine = false;\n\n                        if(!inTag)\n                            rowsToAdd = 1;\n                    }\n                    if (value.substr(0, 1) === \"{\") {\n                        spaceBefore = true;\n                        if (code.substr(-1) !== '[' && code.trimRight().substr(-1) === '[') {\n                            trimCode();\n                            spaceBefore = false;\n                        } else if (code.trimRight().substr(-1) === ')') {\n                            trimCode();\n                        } else {\n                            trimLine();\n                        }\n                    }\n                } else if (token.type === \"paren.rparen\") {\n                    unindent = 1;\n                    if (value.substr(0, 1) === \"}\") {\n                        if (parents[depth-1] === 'case')\n                            unindent++;\n\n                        if (code.trimRight().substr(-1) === '{') {\n                            trimCode();\n                        } else {\n                            spaceBefore = true;\n\n                            if (inCSS)\n                                rowsToAdd+=2;\n                        }\n                    }\n                    if (value.substr(0, 1) === \"]\") {\n                        if (code.substr(-1) !== '}' && code.trimRight().substr(-1) === '}') {\n                            spaceBefore = false;\n                            indent++;\n                            trimCode();\n                        }\n                    }\n                    if (value.substr(0, 1) === \")\") {\n                        if (code.substr(-1) !== '(' && code.trimRight().substr(-1) === '(') {\n                            spaceBefore = false;\n                            indent++;\n                            trimCode();\n                        }\n                    }\n\n                    trimLine();\n                } else if ((token.type === \"keyword.operator\" || token.type === \"keyword\") && value.match(/^(=|==|===|!=|!==|&&|\\|\\||and|or|xor|\\+=|.=|>|>=|<|<=|=>)$/)) {\n                    trimCode();\n                    trimNext();\n                    spaceBefore = true;\n                    spaceAfter = true;\n                } else if (token.type === \"punctuation.operator\" && value === ';') {\n                    trimCode();\n                    trimNext();\n                    spaceAfter = true;\n\n                    if (inCSS)\n                        rowsToAdd++;\n                } else if (token.type === \"punctuation.operator\" && value.match(/^(:|,)$/)) {\n                    trimCode();\n                    trimNext();\n                    if (value.match(/^(,)$/) && curlyDepth>0 && roundDepth===0) {\n                        rowsToAdd++;\n                    } else {\n                        spaceAfter = true;\n                        breakBefore = false;\n                    }\n                } else if (token.type === \"support.php_tag\" && value === \"?>\" && !breakBefore) {\n                    trimCode();\n                    spaceBefore = true;\n                } else if (is(token, \"attribute-name\") && code.substr(-1).match(/^\\s$/)) {\n                    spaceBefore = true;\n                } else if (is(token, \"attribute-equals\")) {\n                    trimLine();\n                    trimNext();\n                } else if (is(token, \"tag-close\")) {\n                    trimLine();\n                    if(value === \"/>\")\n                        spaceBefore = true;\n                }\n                if (breakBefore && !(token.type.match(/^(comment)$/) && !value.substr(0, 1).match(/^[/#]$/)) && !(token.type.match(/^(string)$/) && !value.substr(0, 1).match(/^['\"]$/))) {\n\n                    indent = lastIndent;\n\n                    if(depth > lastDepth) {\n                        indent++;\n\n                        for (i=depth; i > lastDepth; i--)\n                            levels[i] = indent;\n                    } else if(depth < lastDepth)\n                        indent = levels[depth];\n\n                    lastDepth = depth;\n                    lastIndent = indent;\n\n                    if(unindent)\n                        indent -= unindent;\n\n                    if (indentNextLine && !roundDepth) {\n                        indent++;\n                        indentNextLine = false;\n                    }\n\n                    for (i = 0; i < indent; i++)\n                        code += tabString;\n                }\n\n\n                if (token.type === \"keyword\" && value.match(/^(case|default)$/)) {\n                    parents[depth] = value;\n                    depth++;\n                }\n\n\n                if (token.type === \"keyword\" && value.match(/^(break)$/)) {\n                    if(parents[depth-1] && parents[depth-1].match(/^(case|default)$/)) {\n                        depth--;\n                    }\n                }\n                if (token.type === \"paren.lparen\") {\n                    roundDepth += (value.match(/\\(/g) || []).length;\n                    curlyDepth += (value.match(/\\{/g) || []).length;\n                    depth += value.length;\n                }\n\n                if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|while)$/)) {\n                    indentNextLine = true;\n                    roundDepth = 0;\n                } else if (!roundDepth && value.trim() && token.type !== \"comment\")\n                    indentNextLine = false;\n\n                if (token.type === \"paren.rparen\") {\n                    roundDepth -= (value.match(/\\)/g) || []).length;\n                    curlyDepth -= (value.match(/\\}/g) || []).length;\n\n                    for (i = 0; i < value.length; i++) {\n                        depth--;\n                        if(value.substr(i, 1)==='}' && parents[depth]==='case') {\n                            depth--;\n                        }\n                    }\n                }\n                if (spaceBefore && !breakBefore) {\n                    trimLine();\n                    if (code.substr(-1) !== \"\\n\")\n                        code += \" \";\n                }\n\n                code += value;\n\n                if (spaceAfter)\n                    code += \" \";\n\n                breakBefore = false;\n                spaceBefore = false;\n                spaceAfter = false;\n                if ((is(token, \"tag-close\") && (inBlock || blockTags.indexOf(tagName) !== -1)) || (is(token, \"doctype\") && value === \">\")) {\n                    if (inBlock && nextToken && nextToken.value === \"</\")\n                        rowsToAdd = -1;\n                    else\n                        rowsToAdd = 1;\n                }\n                if (is(token, \"tag-open\") && value === \"</\") {\n                    depth--;\n                } else if (is(token, \"tag-open\") && value === \"<\" && singletonTags.indexOf(nextToken.value) === -1) {\n                    depth++;\n                } else if (is(token, \"tag-name\")) {\n                    tagName = value;\n                } else if (is(token, \"tag-close\") && value === \"/>\" && singletonTags.indexOf(tagName) === -1){\n                    depth--;\n                }\n\n                row = curRow;\n            }\n        }\n\n        token = nextToken;\n    }\n\n    code = code.trim();\n    session.doc.setValue(code);\n};\n\nexports.commands = [{\n    name: \"beautify\",\n    exec: function(editor) {\n        exports.beautify(editor.session);\n    },\n    bindKey: \"Ctrl-Shift-B\"\n}];\n\n});                (function() {\n                    window.require([\"ace/ext/beautify\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-elastic_tabstops_lite.js",
    "content": "define(\"ace/ext/elastic_tabstops_lite\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar ElasticTabstopsLite = function(editor) {\n    this.$editor = editor;\n    var self = this;\n    var changedRows = [];\n    var recordChanges = false;\n    this.onAfterExec = function() {\n        recordChanges = false;\n        self.processRows(changedRows);\n        changedRows = [];\n    };\n    this.onExec = function() {\n        recordChanges = true;\n    };\n    this.onChange = function(delta) {\n        if (recordChanges) {\n            if (changedRows.indexOf(delta.start.row) == -1)\n                changedRows.push(delta.start.row);\n            if (delta.end.row != delta.start.row)\n                changedRows.push(delta.end.row);\n        }\n    };\n};\n\n(function() {\n    this.processRows = function(rows) {\n        this.$inChange = true;\n        var checkedRows = [];\n\n        for (var r = 0, rowCount = rows.length; r < rowCount; r++) {\n            var row = rows[r];\n\n            if (checkedRows.indexOf(row) > -1)\n                continue;\n\n            var cellWidthObj = this.$findCellWidthsForBlock(row);\n            var cellWidths = this.$setBlockCellWidthsToMax(cellWidthObj.cellWidths);\n            var rowIndex = cellWidthObj.firstRow;\n\n            for (var w = 0, l = cellWidths.length; w < l; w++) {\n                var widths = cellWidths[w];\n                checkedRows.push(rowIndex);\n                this.$adjustRow(rowIndex, widths);\n                rowIndex++;\n            }\n        }\n        this.$inChange = false;\n    };\n\n    this.$findCellWidthsForBlock = function(row) {\n        var cellWidths = [], widths;\n        var rowIter = row;\n        while (rowIter >= 0) {\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n\n            cellWidths.unshift(widths);\n            rowIter--;\n        }\n        var firstRow = rowIter + 1;\n        rowIter = row;\n        var numRows = this.$editor.session.getLength();\n\n        while (rowIter < numRows - 1) {\n            rowIter++;\n\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n\n            cellWidths.push(widths);\n        }\n\n        return { cellWidths: cellWidths, firstRow: firstRow };\n    };\n\n    this.$cellWidthsForRow = function(row) {\n        var selectionColumns = this.$selectionColumnsForRow(row);\n\n        var tabs = [-1].concat(this.$tabsForRow(row));\n        var widths = tabs.map(function(el) { return 0; } ).slice(1);\n        var line = this.$editor.session.getLine(row);\n\n        for (var i = 0, len = tabs.length - 1; i < len; i++) {\n            var leftEdge = tabs[i]+1;\n            var rightEdge = tabs[i+1];\n\n            var rightmostSelection = this.$rightmostSelectionInCell(selectionColumns, rightEdge);\n            var cell = line.substring(leftEdge, rightEdge);\n            widths[i] = Math.max(cell.replace(/\\s+$/g,'').length, rightmostSelection - leftEdge);\n        }\n\n        return widths;\n    };\n\n    this.$selectionColumnsForRow = function(row) {\n        var selections = [], cursor = this.$editor.getCursorPosition();\n        if (this.$editor.session.getSelection().isEmpty()) {\n            if (row == cursor.row)\n                selections.push(cursor.column);\n        }\n\n        return selections;\n    };\n\n    this.$setBlockCellWidthsToMax = function(cellWidths) {\n        var startingNewBlock = true, blockStartRow, blockEndRow, maxWidth;\n        var columnInfo = this.$izip_longest(cellWidths);\n\n        for (var c = 0, l = columnInfo.length; c < l; c++) {\n            var column = columnInfo[c];\n            if (!column.push) {\n                console.error(column);\n                continue;\n            }\n            column.push(NaN);\n\n            for (var r = 0, s = column.length; r < s; r++) {\n                var width = column[r];\n                if (startingNewBlock) {\n                    blockStartRow = r;\n                    maxWidth = 0;\n                    startingNewBlock = false;\n                }\n                if (isNaN(width)) {\n                    blockEndRow = r;\n\n                    for (var j = blockStartRow; j < blockEndRow; j++) {\n                        cellWidths[j][c] = maxWidth;\n                    }\n                    startingNewBlock = true;\n                }\n\n                maxWidth = Math.max(maxWidth, width);\n            }\n        }\n\n        return cellWidths;\n    };\n\n    this.$rightmostSelectionInCell = function(selectionColumns, cellRightEdge) {\n        var rightmost = 0;\n\n        if (selectionColumns.length) {\n            var lengths = [];\n            for (var s = 0, length = selectionColumns.length; s < length; s++) {\n                if (selectionColumns[s] <= cellRightEdge)\n                    lengths.push(s);\n                else\n                    lengths.push(0);\n            }\n            rightmost = Math.max.apply(Math, lengths);\n        }\n\n        return rightmost;\n    };\n\n    this.$tabsForRow = function(row) {\n        var rowTabs = [], line = this.$editor.session.getLine(row),\n            re = /\\t/g, match;\n\n        while ((match = re.exec(line)) != null) {\n            rowTabs.push(match.index);\n        }\n\n        return rowTabs;\n    };\n\n    this.$adjustRow = function(row, widths) {\n        var rowTabs = this.$tabsForRow(row);\n\n        if (rowTabs.length == 0)\n            return;\n\n        var bias = 0, location = -1;\n        var expandedSet = this.$izip(widths, rowTabs);\n\n        for (var i = 0, l = expandedSet.length; i < l; i++) {\n            var w = expandedSet[i][0], it = expandedSet[i][1];\n            location += 1 + w;\n            it += bias;\n            var difference = location - it;\n\n            if (difference == 0)\n                continue;\n\n            var partialLine = this.$editor.session.getLine(row).substr(0, it );\n            var strippedPartialLine = partialLine.replace(/\\s*$/g, \"\");\n            var ispaces = partialLine.length - strippedPartialLine.length;\n\n            if (difference > 0) {\n                this.$editor.session.getDocument().insertInLine({row: row, column: it + 1}, Array(difference + 1).join(\" \") + \"\\t\");\n                this.$editor.session.getDocument().removeInLine(row, it, it + 1);\n\n                bias += difference;\n            }\n\n            if (difference < 0 && ispaces >= -difference) {\n                this.$editor.session.getDocument().removeInLine(row, it + difference, it);\n                bias += difference;\n            }\n        }\n    };\n    this.$izip_longest = function(iterables) {\n        if (!iterables[0])\n            return [];\n        var longest = iterables[0].length;\n        var iterablesLength = iterables.length;\n\n        for (var i = 1; i < iterablesLength; i++) {\n            var iLength = iterables[i].length;\n            if (iLength > longest)\n                longest = iLength;\n        }\n\n        var expandedSet = [];\n\n        for (var l = 0; l < longest; l++) {\n            var set = [];\n            for (var i = 0; i < iterablesLength; i++) {\n                if (iterables[i][l] === \"\")\n                    set.push(NaN);\n                else\n                    set.push(iterables[i][l]);\n            }\n\n            expandedSet.push(set);\n        }\n\n\n        return expandedSet;\n    };\n    this.$izip = function(widths, tabs) {\n        var size = widths.length >= tabs.length ? tabs.length : widths.length;\n\n        var expandedSet = [];\n        for (var i = 0; i < size; i++) {\n            var set = [ widths[i], tabs[i] ];\n            expandedSet.push(set);\n        }\n        return expandedSet;\n    };\n\n}).call(ElasticTabstopsLite.prototype);\n\nexports.ElasticTabstopsLite = ElasticTabstopsLite;\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    useElasticTabstops: {\n        set: function(val) {\n            if (val) {\n                if (!this.elasticTabstops)\n                    this.elasticTabstops = new ElasticTabstopsLite(this);\n                this.commands.on(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.on(\"exec\", this.elasticTabstops.onExec);\n                this.on(\"change\", this.elasticTabstops.onChange);\n            } else if (this.elasticTabstops) {\n                this.commands.removeListener(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.removeListener(\"exec\", this.elasticTabstops.onExec);\n                this.removeListener(\"change\", this.elasticTabstops.onChange);\n            }\n        }\n    }\n});\n\n});                (function() {\n                    window.require([\"ace/ext/elastic_tabstops_lite\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-emmet.js",
    "content": "define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    \n    this.getTokenizer = function() {\n        function TabstopToken(str, _, stack) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str) && !stack.inFormatString)\n                return [{tabstopId: parseInt(str, 10)}];\n            return [{text: str}];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                {regex: /:/, onMatch: function(val, state, stack) {\n                    if (stack.length && stack[0].expectIf) {\n                        stack[0].expectIf = false;\n                        stack[0].elseBranch = stack[0];\n                        return [stack[0]];\n                    }\n                    return \":\";\n                }},\n                {regex: /\\\\./, onMatch: function(val, state, stack) {\n                    var ch = val[1];\n                    if (ch == \"}\" && stack.length) {\n                        val = ch;\n                    }else if (\"`$\\\\\".indexOf(ch) != -1) {\n                        val = ch;\n                    } else if (stack.inFormatString) {\n                        if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\n\";\n                        else if (\"ulULE\".indexOf(ch) != -1) {\n                            val = {changeCase: ch, local: ch > \"a\"};\n                        }\n                    }\n\n                    return [val];\n                }},\n                {regex: /}/, onMatch: function(val, state, stack) {\n                    return [stack.length ? stack.shift() : val];\n                }},\n                {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n                {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n                    var t = TabstopToken(str.substr(1), state, stack);\n                    stack.unshift(t[0]);\n                    return t;\n                }, next: \"snippetVar\"},\n                {regex: /\\n/, token: \"newline\", merge: false}\n            ],\n            snippetVar: [\n                {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n                    stack[0].choices = val.slice(1, -1).split(\",\");\n                }, next: \"start\"},\n                {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n                 onMatch: function(val, state, stack) {\n                    var ts = stack[0];\n                    ts.fmtString = val;\n\n                    val = this.splitRegex.exec(val);\n                    ts.guard = val[1];\n                    ts.fmt = val[2];\n                    ts.flag = val[3];\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n                    stack[0].code = val.splice(1, -1);\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n                    if (stack[0])\n                        stack[0].expectIf = true;\n                }, next: \"start\"},\n                {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n            ],\n            formatString: [\n                {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n                {regex: \"\", onMatch: function(val, state, stack) {\n                    stack.inFormatString = true;\n                }, next: \"start\"}\n            ]\n        });\n        SnippetManager.prototype.getTokenizer = function() {\n            return SnippetManager.$tokenizer;\n        };\n        return SnippetManager.$tokenizer;\n    };\n\n    this.tokenizeTmSnippet = function(str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n            return x.value || x;\n        });\n    };\n\n    this.$getDefaultValue = function(editor, name) {\n        if (/^[A-Z]\\d+$/.test(name)) {\n            var i = name.substr(1);\n            return (this.variables[name[0] + \"__\"] || {})[i];\n        }\n        if (/^\\d+$/.test(name)) {\n            return (this.variables.__ || {})[name];\n        }\n        name = name.replace(/^TM_/, \"\");\n\n        if (!editor)\n            return;\n        var s = editor.session;\n        switch(name) {\n            case \"CURRENT_WORD\":\n                var r = s.getWordRange();\n            case \"SELECTION\":\n            case \"SELECTED_TEXT\":\n                return s.getTextRange(r);\n            case \"CURRENT_LINE\":\n                return s.getLine(editor.getCursorPosition().row);\n            case \"PREV_LINE\": // not possible in textmate\n                return s.getLine(editor.getCursorPosition().row - 1);\n            case \"LINE_INDEX\":\n                return editor.getCursorPosition().column;\n            case \"LINE_NUMBER\":\n                return editor.getCursorPosition().row + 1;\n            case \"SOFT_TABS\":\n                return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n            case \"TAB_SIZE\":\n                return s.getTabSize();\n            case \"FILENAME\":\n            case \"FILEPATH\":\n                return \"\";\n            case \"FULLNAME\":\n                return \"Ace\";\n        }\n    };\n    this.variables = {};\n    this.getVariableValue = function(editor, varName) {\n        if (this.variables.hasOwnProperty(varName))\n            return this.variables[varName](editor, varName) || \"\";\n        return this.$getDefaultValue(editor, varName) || \"\";\n    };\n    this.tmStrFormat = function(str, ch, editor) {\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n        var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n        var _self = this;\n        var formatted = str.replace(re, function() {\n            _self.variables.__ = arguments;\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i  = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    } else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                } else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                } else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            return fmtParts.join(\"\");\n        });\n        this.variables.__ = null;\n        return formatted;\n    };\n\n    this.resolveVariables = function(snippet, editor) {\n        var result = [];\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n            } else if (typeof ch != \"object\") {\n                continue;\n            } else if (ch.skip) {\n                gotoNext(ch);\n            } else if (ch.processed < i) {\n                continue;\n            } else if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text);\n                if (value && ch.fmtString)\n                    value = this.tmStrFormat(value, ch);\n                ch.processed = i;\n                if (ch.expectIf == null) {\n                    if (value) {\n                        result.push(value);\n                        gotoNext(ch);\n                    }\n                } else {\n                    if (value) {\n                        ch.skip = ch.elseBranch;\n                    } else\n                        gotoNext(ch);\n                }\n            } else if (ch.tabstopId != null) {\n                result.push(ch);\n            } else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n\n    this.insertSnippetForSelection = function(editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        \n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function(x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function(p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function(t) {return typeof t === \"object\";});\n            if (isNested && !ts.value) {\n                ts.value = value;\n            } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function(ts) {ts.length = 0;});\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || {tabstopId: p.tabstopId};\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p)\n                    expanding[id] = null;\n                continue;\n            }\n            \n            var ts = tabstops[id];\n            var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n            arg.unshift(i + 1, Math.max(0, i1 - i));\n            arg.push(p);\n            expanding[id] = p;\n            tokens.splice.apply(tokens, arg);\n\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function(t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1){\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                } else\n                    column += t.length;\n                text += t;\n            } else {\n                if (!t.start)\n                    t.start = {row: row, column: column};\n                else\n                    t.end = {row: row, column: column};\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    \n    this.insertSnippet = function(editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        \n        editor.forEachSelection(function() {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, {keepOrder: true});\n        \n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n\n    this.$getScope = function(editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        \n        return scope;\n    };\n\n    this.getActiveScopes = function(editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n\n    this.expandWithTab = function(editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function() {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, {keepOrder: true});\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    \n    this.expandSnippetForSelection = function(editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row,\n            cursor.column - snippet.replaceBefore.length,\n            cursor.column + snippet.replaceAfter.length\n        );\n\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n\n    this.findMatchingSnippet = function(snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        \n        if (!snippets) \n            snippets = [];\n        \n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            } else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            \n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            \n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n\n        if (snippets && snippets.content)\n            addSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(addSnippet);\n        \n        this._signal(\"registerSnippets\", {scope: scope});\n    };\n    this.unregister = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope||scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope||scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function(str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                } catch (e) {}\n            } if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            } else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                } else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                } else {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function(name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function() {\n    this.attach = function(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function() {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n\n    this.onChange = function(delta) {\n        var changeRange = delta;\n        var isRemove = delta.action[0] == \"r\";\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n        var colDiff = end.column - start.column;\n\n        if (isRemove) {\n            lineDif = -lineDif;\n            colDiff = -colDiff;\n        }\n        if (!this.$inChange && isRemove) {\n            var ts = this.selectedTabstop;\n            var changedOutside = ts && !ts.some(function(r) {\n                return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n            });\n            if (changedOutside)\n                return this.detach();\n        }\n        var ranges = this.ranges;\n        for (var i = 0; i < ranges.length; i++) {\n            var r = ranges[i];\n            if (r.end.row < start.row)\n                continue;\n\n            if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n                this.removeRange(r);\n                i--;\n                continue;\n            }\n\n            if (r.start.row == startRow && r.start.column > start.column)\n                r.start.column += colDiff;\n            if (r.end.row == startRow && r.end.column >= start.column)\n                r.end.column += colDiff;\n            if (r.start.row >= startRow)\n                r.start.row += lineDif;\n            if (r.end.row >= startRow)\n                r.end.row += lineDif;\n\n            if (comparePoints(r.start, r.end) > 0)\n                this.removeRange(r);\n        }\n        if (!ranges.length)\n            this.detach();\n    };\n    this.updateLinkedFields = function() {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = ts.length; i--;) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function(e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function() {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = this.ranges.length; i--;) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function() {\n        this.detach();\n    };\n    this.tabNext = function(dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function(index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        \n        this.selectedTabstop = ts;\n        if (!this.editor.inVirtualSelectionMode) {        \n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(ts.firstNonLinked.clone());\n            for (var i = ts.length; i--;) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n            if (sel.ranges[0])\n                sel.addRange(sel.ranges[0].clone());\n        } else {\n            this.editor.selection.setRange(ts.firstNonLinked);\n        }\n        \n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.addTabstops = function(tabstops, start, end) {\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function(ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n                \n            for (var i = ts.length; i--;) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                } else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n        }, this);\n        \n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n\n    this.addTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            if  (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function(range) {\n        var i = range.tabstop.indexOf(range);\n        range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        this.ranges.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function(ed) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n                return;\n            }\n\n            ed.tabstopManager.tabNext(1);\n        },\n        \"Shift-Tab\": function(ed) {\n            ed.tabstopManager.tabNext(-1);\n        },\n        \"Esc\": function(ed) {\n            ed.tabstopManager.detach();\n        },\n        \"Return\": function(ed) {\n            return false;\n        }\n    });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n    this.pos.row = row;\n    this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n    this.$insertRight = $insertRight;\n    this.pos = pos; \n    this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n    -moz-box-sizing: border-box;\\\n    box-sizing: border-box;\\\n    background: rgba(194, 193, 208, 0.09);\\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\\n    position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.insertSnippet = function(content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function(options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\ndefine(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"resources\",\"resources\",\"tabStops\",\"resources\",\"utils\",\"actions\",\"ace/config\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\nvar HashHandler = require(\"ace/keyboard/hash_handler\").HashHandler;\nvar Editor = require(\"ace/editor\").Editor;\nvar snippetManager = require(\"ace/snippets\").snippetManager;\nvar Range = require(\"ace/range\").Range;\nvar emmet, emmetPath;\nfunction AceEmmetEditor() {}\n\nAceEmmetEditor.prototype = {\n    setupContext: function(editor) {\n        this.ace = editor;\n        this.indentation = editor.session.getTabString();\n        if (!emmet)\n            emmet = window.emmet;\n        var resources = emmet.resources || emmet.require(\"resources\");\n        resources.setVariable(\"indentation\", this.indentation);\n        this.$syntax = null;\n        this.$syntax = this.getSyntax();\n    },\n    getSelectionRange: function() {\n        var range = this.ace.getSelectionRange();\n        var doc = this.ace.session.doc;\n        return {\n            start: doc.positionToIndex(range.start),\n            end: doc.positionToIndex(range.end)\n        };\n    },\n    createSelection: function(start, end) {\n        var doc = this.ace.session.doc;\n        this.ace.selection.setRange({\n            start: doc.indexToPosition(start),\n            end: doc.indexToPosition(end)\n        });\n    },\n    getCurrentLineRange: function() {\n        var ace = this.ace;\n        var row = ace.getCursorPosition().row;\n        var lineLength = ace.session.getLine(row).length;\n        var index = ace.session.doc.positionToIndex({row: row, column: 0});\n        return {\n            start: index,\n            end: index + lineLength\n        };\n    },\n    getCaretPos: function(){\n        var pos = this.ace.getCursorPosition();\n        return this.ace.session.doc.positionToIndex(pos);\n    },\n    setCaretPos: function(index){\n        var pos = this.ace.session.doc.indexToPosition(index);\n        this.ace.selection.moveToPosition(pos);\n    },\n    getCurrentLine: function() {\n        var row = this.ace.getCursorPosition().row;\n        return this.ace.session.getLine(row);\n    },\n    replaceContent: function(value, start, end, noIndent) {\n        if (end == null)\n            end = start == null ? this.getContent().length : start;\n        if (start == null)\n            start = 0;        \n        \n        var editor = this.ace;\n        var doc = editor.session.doc;\n        var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end));\n        editor.session.remove(range);\n        \n        range.end = range.start;\n        \n        value = this.$updateTabstops(value);\n        snippetManager.insertSnippet(editor, value);\n    },\n    getContent: function(){\n        return this.ace.getValue();\n    },\n    getSyntax: function() {\n        if (this.$syntax)\n            return this.$syntax;\n        var syntax = this.ace.session.$modeId.split(\"/\").pop();\n        if (syntax == \"html\" || syntax == \"php\") {\n            var cursor = this.ace.getCursorPosition();\n            var state = this.ace.session.getState(cursor.row);\n            if (typeof state != \"string\")\n                state = state[0];\n            if (state) {\n                state = state.split(\"-\");\n                if (state.length > 1)\n                    syntax = state[0];\n                else if (syntax == \"php\")\n                    syntax = \"html\";\n            }\n        }\n        return syntax;\n    },\n    getProfileName: function() {\n        var resources = emmet.resources || emmet.require(\"resources\");\n        switch (this.getSyntax()) {\n          case \"css\": return \"css\";\n          case \"xml\":\n          case \"xsl\":\n            return \"xml\";\n          case \"html\":\n            var profile = resources.getVariable(\"profile\");\n            if (!profile)\n                profile = this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i) != -1 ? \"xhtml\": \"html\";\n            return profile;\n          default:\n            var mode = this.ace.session.$mode;\n            return mode.emmetConfig && mode.emmetConfig.profile || \"xhtml\";\n        }\n    },\n    prompt: function(title) {\n        return prompt(title);\n    },\n    getSelection: function() {\n        return this.ace.session.getTextRange();\n    },\n    getFilePath: function() {\n        return \"\";\n    },\n    $updateTabstops: function(value) {\n        var base = 1000;\n        var zeroBase = 0;\n        var lastZero = null;\n        var ts = emmet.tabStops || emmet.require('tabStops');\n        var resources = emmet.resources || emmet.require(\"resources\");\n        var settings = resources.getVocabulary(\"user\");\n        var tabstopOptions = {\n            tabstop: function(data) {\n                var group = parseInt(data.group, 10);\n                var isZero = group === 0;\n                if (isZero)\n                    group = ++zeroBase;\n                else\n                    group += base;\n\n                var placeholder = data.placeholder;\n                if (placeholder) {\n                    placeholder = ts.processText(placeholder, tabstopOptions);\n                }\n\n                var result = '${' + group + (placeholder ? ':' + placeholder : '') + '}';\n\n                if (isZero) {\n                    lastZero = [data.start, result];\n                }\n\n                return result;\n            },\n            escape: function(ch) {\n                if (ch == '$') return '\\\\$';\n                if (ch == '\\\\') return '\\\\\\\\';\n                return ch;\n            }\n        };\n\n        value = ts.processText(value, tabstopOptions);\n\n        if (settings.variables['insert_final_tabstop'] && !/\\$\\{0\\}$/.test(value)) {\n            value += '${0}';\n        } else if (lastZero) {\n            var common = emmet.utils ? emmet.utils.common : emmet.require('utils');\n            value = common.replaceSubstring(value, '${0}', lastZero[0], lastZero[1]);\n        }\n        \n        return value;\n    }\n};\n\n\nvar keymap = {\n    expand_abbreviation: {\"mac\": \"ctrl+alt+e\", \"win\": \"alt+e\"},\n    match_pair_outward: {\"mac\": \"ctrl+d\", \"win\": \"ctrl+,\"},\n    match_pair_inward: {\"mac\": \"ctrl+j\", \"win\": \"ctrl+shift+0\"},\n    matching_pair: {\"mac\": \"ctrl+alt+j\", \"win\": \"alt+j\"},\n    next_edit_point: \"alt+right\",\n    prev_edit_point: \"alt+left\",\n    toggle_comment: {\"mac\": \"command+/\", \"win\": \"ctrl+/\"},\n    split_join_tag: {\"mac\": \"shift+command+'\", \"win\": \"shift+ctrl+`\"},\n    remove_tag: {\"mac\": \"command+'\", \"win\": \"shift+ctrl+;\"},\n    evaluate_math_expression: {\"mac\": \"shift+command+y\", \"win\": \"shift+ctrl+y\"},\n    increment_number_by_1: \"ctrl+up\",\n    decrement_number_by_1: \"ctrl+down\",\n    increment_number_by_01: \"alt+up\",\n    decrement_number_by_01: \"alt+down\",\n    increment_number_by_10: {\"mac\": \"alt+command+up\", \"win\": \"shift+alt+up\"},\n    decrement_number_by_10: {\"mac\": \"alt+command+down\", \"win\": \"shift+alt+down\"},\n    select_next_item: {\"mac\": \"shift+command+.\", \"win\": \"shift+ctrl+.\"},\n    select_previous_item: {\"mac\": \"shift+command+,\", \"win\": \"shift+ctrl+,\"},\n    reflect_css_value: {\"mac\": \"shift+command+r\", \"win\": \"shift+ctrl+r\"},\n\n    encode_decode_data_url: {\"mac\": \"shift+ctrl+d\", \"win\": \"ctrl+'\"},\n    expand_abbreviation_with_tab: \"Tab\",\n    wrap_with_abbreviation: {\"mac\": \"shift+ctrl+a\", \"win\": \"shift+ctrl+a\"}\n};\n\nvar editorProxy = new AceEmmetEditor();\nexports.commands = new HashHandler();\nexports.runEmmetCommand = function runEmmetCommand(editor) {\n    try {\n        editorProxy.setupContext(editor);\n        var actions = emmet.actions || emmet.require(\"actions\");\n    \n        if (this.action == \"expand_abbreviation_with_tab\") {\n            if (!editor.selection.isEmpty())\n                return false;\n            var pos = editor.selection.lead;\n            var token = editor.session.getTokenAt(pos.row, pos.column);\n            if (token && /\\btag\\b/.test(token.type))\n                return false;\n        }\n        \n        if (this.action == \"wrap_with_abbreviation\") {\n            return setTimeout(function() {\n                actions.run(\"wrap_with_abbreviation\", editorProxy);\n            }, 0);\n        }\n        \n        var result = actions.run(this.action, editorProxy);\n    } catch(e) {\n        if (!emmet) {\n            exports.load(runEmmetCommand.bind(this, editor));\n            return true;\n        }\n        editor._signal(\"changeStatus\", typeof e == \"string\" ? e : e.message);\n        console.log(e);\n        result = false;\n    }\n    return result;\n};\n\nfor (var command in keymap) {\n    exports.commands.addCommand({\n        name: \"emmet:\" + command,\n        action: command,\n        bindKey: keymap[command],\n        exec: exports.runEmmetCommand,\n        multiSelectAction: \"forEach\"\n    });\n}\n\nexports.updateCommands = function(editor, enabled) {\n    if (enabled) {\n        editor.keyBinding.addKeyboardHandler(exports.commands);\n    } else {\n        editor.keyBinding.removeKeyboardHandler(exports.commands);\n    }\n};\n\nexports.isSupportedMode = function(mode) {\n    if (!mode) return false;\n    if (mode.emmetConfig) return true;\n    var id = mode.$id || mode;\n    return /css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(id);\n};\n\nexports.isAvailable = function(editor, command) {\n    if (/(evaluate_math_expression|expand_abbreviation)$/.test(command))\n        return true;\n    var mode = editor.session.$mode;\n    var isSupported = exports.isSupportedMode(mode);\n    if (isSupported && mode.$modes) {\n        try {\n            editorProxy.setupContext(editor);\n            if (/js|php/.test(editorProxy.getSyntax()))\n                isSupported = false;\n        } catch(e) {}\n    }\n    return isSupported;\n};\n\nvar onChangeMode = function(e, target) {\n    var editor = target;\n    if (!editor)\n        return;\n    var enabled = exports.isSupportedMode(editor.session.$mode);\n    if (e.enableEmmet === false)\n        enabled = false;\n    if (enabled)\n        exports.load();\n    exports.updateCommands(editor, enabled);\n};\n\nexports.load = function(cb) {\n    if (typeof emmetPath == \"string\") {\n        require(\"ace/config\").loadModule(emmetPath, function() {\n            emmetPath = null;\n            cb && cb();\n        });\n    }\n};\n\nexports.AceEmmetEditor = AceEmmetEditor;\nrequire(\"ace/config\").defineOptions(Editor.prototype, \"editor\", {\n    enableEmmet: {\n        set: function(val) {\n            this[val ? \"on\" : \"removeListener\"](\"changeMode\", onChangeMode);\n            onChangeMode({enableEmmet: !!val}, this);\n        },\n        value: true\n    }\n});\n\nexports.setCore = function(e) {\n    if (typeof e == \"string\")\n       emmetPath = e;\n    else\n       emmet = e;\n};\n});                (function() {\n                    window.require([\"ace/ext/emmet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-error_marker.js",
    "content": "\n;                (function() {\n                    window.require([\"ace/ext/error_marker\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-keybinding_menu.js",
    "content": "define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = \"#ace_settingsmenu, #kbshortcutmenu {\\\nbackground-color: #F7F7F7;\\\ncolor: black;\\\nbox-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\\npadding: 1em 0.5em 2em 1em;\\\noverflow: auto;\\\nposition: absolute;\\\nmargin: 0;\\\nbottom: 0;\\\nright: 0;\\\ntop: 0;\\\nz-index: 9991;\\\ncursor: default;\\\n}\\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\\nbox-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\\nbackground-color: rgba(255, 255, 255, 0.6);\\\ncolor: black;\\\n}\\\n.ace_optionsMenuEntry:hover {\\\nbackground-color: rgba(100, 100, 100, 0.1);\\\ntransition: all 0.3s\\\n}\\\n.ace_closeButton {\\\nbackground: rgba(245, 146, 146, 0.5);\\\nborder: 1px solid #F48A8A;\\\nborder-radius: 50%;\\\npadding: 7px;\\\nposition: absolute;\\\nright: -8px;\\\ntop: -8px;\\\nz-index: 100000;\\\n}\\\n.ace_closeButton{\\\nbackground: rgba(245, 146, 146, 0.9);\\\n}\\\n.ace_optionsMenuKey {\\\ncolor: darkslateblue;\\\nfont-weight: bold;\\\n}\\\n.ace_optionsMenuCommand {\\\ncolor: darkcyan;\\\nfont-weight: normal;\\\n}\\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\\nvertical-align: middle;\\\n}\\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\\nbackground: #e7e7e7;\\\nbox-shadow: 1px 0px 2px 0px #adadad inset;\\\nborder-color: #adadad;\\\n}\\\n.ace_optionsMenuEntry button {\\\nbackground: white;\\\nborder: 1px solid lightgray;\\\nmargin: 0px;\\\n}\\\n.ace_optionsMenuEntry button:hover{\\\nbackground: #f0f0f0;\\\n}\";\ndom.importCssString(cssText);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {\n    top = top ? 'top: ' + top + ';' : '';\n    bottom = bottom ? 'bottom: ' + bottom + ';' : '';\n    right = right ? 'right: ' + right + ';' : '';\n    left = left ? 'left: ' + left + ';' : '';\n\n    var closer = document.createElement('div');\n    var contentContainer = document.createElement('div');\n\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            closer.click();\n        }\n    }\n\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        'background-color: rgba(0, 0, 0, 0.3);';\n    closer.addEventListener('click', function() {\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        editor.focus();\n        closer = null;\n    });\n    document.addEventListener('keydown', documentEscListener);\n\n    contentContainer.style.cssText = top + right + bottom + left;\n    contentContainer.addEventListener('click', function(e) {\n        e.stopPropagation();\n    });\n\n    var wrapper = dom.createElement(\"div\");\n    wrapper.style.position = \"relative\";\n    \n    var closeButton = dom.createElement(\"div\");\n    closeButton.className = \"ace_closeButton\";\n    closeButton.addEventListener('click', function() {\n        closer.click();\n    });\n    \n    wrapper.appendChild(closeButton);\n    contentContainer.appendChild(wrapper);\n    \n    contentContainer.appendChild(contentElement);\n    closer.appendChild(contentContainer);\n    document.body.appendChild(closer);\n    editor.blur();\n};\n\n});\n\ndefine(\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\nvar keys = require(\"../../lib/keys\");\nmodule.exports.getEditorKeybordShortcuts = function(editor) {\n    var KEY_MODS = keys.KEY_MODS;\n    var keybindings = [];\n    var commandMap = {};\n    editor.keyBinding.$handlers.forEach(function(handler) {\n        var ckb = handler.commandKeyBinding;\n        for (var i in ckb) {\n            var key = i.replace(/(^|-)\\w/g, function(x) { return x.toUpperCase(); });\n            var commands = ckb[i];\n            if (!Array.isArray(commands))\n                commands = [commands];\n            commands.forEach(function(command) {\n                if (typeof command != \"string\")\n                    command  = command.name;\n                if (commandMap[command]) {\n                    commandMap[command].key += \"|\" + key;\n                } else {\n                    commandMap[command] = {key: key, command: command};\n                    keybindings.push(commandMap[command]);\n                }         \n            });\n        }\n    });\n    return keybindings;\n};\n\n});\n\ndefine(\"ace/ext/keybinding_menu\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/ext/menu_tools/overlay_page\",\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\"], function(require, exports, module) {\n    \"use strict\";\n    var Editor = require(\"ace/editor\").Editor;\n    function showKeyboardShortcuts (editor) {\n        if(!document.getElementById('kbshortcutmenu')) {\n            var overlayPage = require('./menu_tools/overlay_page').overlayPage;\n            var getEditorKeybordShortcuts = require('./menu_tools/get_editor_keyboard_shortcuts').getEditorKeybordShortcuts;\n            var kb = getEditorKeybordShortcuts(editor);\n            var el = document.createElement('div');\n            var commands = kb.reduce(function(previous, current) {\n                return previous + '<div class=\"ace_optionsMenuEntry\"><span class=\"ace_optionsMenuCommand\">' \n                    + current.command + '</span> : '\n                    + '<span class=\"ace_optionsMenuKey\">' + current.key + '</span></div>';\n            }, '');\n\n            el.id = 'kbshortcutmenu';\n            el.innerHTML = '<h1>Keyboard Shortcuts</h1>' + commands + '</div>';\n            overlayPage(editor, el, '0', '0', '0', null);\n        }\n    }\n    module.exports.init = function(editor) {\n        Editor.prototype.showKeyboardShortcuts = function() {\n            showKeyboardShortcuts(this);\n        };\n        editor.commands.addCommands([{\n            name: \"showKeyboardShortcuts\",\n            bindKey: {win: \"Ctrl-Alt-h\", mac: \"Command-Alt-h\"},\n            exec: function(editor, line) {\n                editor.showKeyboardShortcuts();\n            }\n        }]);\n    };\n\n});                (function() {\n                    window.require([\"ace/ext/keybinding_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-language_tools.js",
    "content": "define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    \n    this.getTokenizer = function() {\n        function TabstopToken(str, _, stack) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str) && !stack.inFormatString)\n                return [{tabstopId: parseInt(str, 10)}];\n            return [{text: str}];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                {regex: /:/, onMatch: function(val, state, stack) {\n                    if (stack.length && stack[0].expectIf) {\n                        stack[0].expectIf = false;\n                        stack[0].elseBranch = stack[0];\n                        return [stack[0]];\n                    }\n                    return \":\";\n                }},\n                {regex: /\\\\./, onMatch: function(val, state, stack) {\n                    var ch = val[1];\n                    if (ch == \"}\" && stack.length) {\n                        val = ch;\n                    }else if (\"`$\\\\\".indexOf(ch) != -1) {\n                        val = ch;\n                    } else if (stack.inFormatString) {\n                        if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\n\";\n                        else if (\"ulULE\".indexOf(ch) != -1) {\n                            val = {changeCase: ch, local: ch > \"a\"};\n                        }\n                    }\n\n                    return [val];\n                }},\n                {regex: /}/, onMatch: function(val, state, stack) {\n                    return [stack.length ? stack.shift() : val];\n                }},\n                {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n                {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n                    var t = TabstopToken(str.substr(1), state, stack);\n                    stack.unshift(t[0]);\n                    return t;\n                }, next: \"snippetVar\"},\n                {regex: /\\n/, token: \"newline\", merge: false}\n            ],\n            snippetVar: [\n                {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n                    stack[0].choices = val.slice(1, -1).split(\",\");\n                }, next: \"start\"},\n                {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n                 onMatch: function(val, state, stack) {\n                    var ts = stack[0];\n                    ts.fmtString = val;\n\n                    val = this.splitRegex.exec(val);\n                    ts.guard = val[1];\n                    ts.fmt = val[2];\n                    ts.flag = val[3];\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n                    stack[0].code = val.splice(1, -1);\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n                    if (stack[0])\n                        stack[0].expectIf = true;\n                }, next: \"start\"},\n                {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n            ],\n            formatString: [\n                {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n                {regex: \"\", onMatch: function(val, state, stack) {\n                    stack.inFormatString = true;\n                }, next: \"start\"}\n            ]\n        });\n        SnippetManager.prototype.getTokenizer = function() {\n            return SnippetManager.$tokenizer;\n        };\n        return SnippetManager.$tokenizer;\n    };\n\n    this.tokenizeTmSnippet = function(str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n            return x.value || x;\n        });\n    };\n\n    this.$getDefaultValue = function(editor, name) {\n        if (/^[A-Z]\\d+$/.test(name)) {\n            var i = name.substr(1);\n            return (this.variables[name[0] + \"__\"] || {})[i];\n        }\n        if (/^\\d+$/.test(name)) {\n            return (this.variables.__ || {})[name];\n        }\n        name = name.replace(/^TM_/, \"\");\n\n        if (!editor)\n            return;\n        var s = editor.session;\n        switch(name) {\n            case \"CURRENT_WORD\":\n                var r = s.getWordRange();\n            case \"SELECTION\":\n            case \"SELECTED_TEXT\":\n                return s.getTextRange(r);\n            case \"CURRENT_LINE\":\n                return s.getLine(editor.getCursorPosition().row);\n            case \"PREV_LINE\": // not possible in textmate\n                return s.getLine(editor.getCursorPosition().row - 1);\n            case \"LINE_INDEX\":\n                return editor.getCursorPosition().column;\n            case \"LINE_NUMBER\":\n                return editor.getCursorPosition().row + 1;\n            case \"SOFT_TABS\":\n                return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n            case \"TAB_SIZE\":\n                return s.getTabSize();\n            case \"FILENAME\":\n            case \"FILEPATH\":\n                return \"\";\n            case \"FULLNAME\":\n                return \"Ace\";\n        }\n    };\n    this.variables = {};\n    this.getVariableValue = function(editor, varName) {\n        if (this.variables.hasOwnProperty(varName))\n            return this.variables[varName](editor, varName) || \"\";\n        return this.$getDefaultValue(editor, varName) || \"\";\n    };\n    this.tmStrFormat = function(str, ch, editor) {\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n        var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n        var _self = this;\n        var formatted = str.replace(re, function() {\n            _self.variables.__ = arguments;\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i  = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    } else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                } else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                } else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            return fmtParts.join(\"\");\n        });\n        this.variables.__ = null;\n        return formatted;\n    };\n\n    this.resolveVariables = function(snippet, editor) {\n        var result = [];\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n            } else if (typeof ch != \"object\") {\n                continue;\n            } else if (ch.skip) {\n                gotoNext(ch);\n            } else if (ch.processed < i) {\n                continue;\n            } else if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text);\n                if (value && ch.fmtString)\n                    value = this.tmStrFormat(value, ch);\n                ch.processed = i;\n                if (ch.expectIf == null) {\n                    if (value) {\n                        result.push(value);\n                        gotoNext(ch);\n                    }\n                } else {\n                    if (value) {\n                        ch.skip = ch.elseBranch;\n                    } else\n                        gotoNext(ch);\n                }\n            } else if (ch.tabstopId != null) {\n                result.push(ch);\n            } else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n\n    this.insertSnippetForSelection = function(editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        \n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function(x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function(p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function(t) {return typeof t === \"object\";});\n            if (isNested && !ts.value) {\n                ts.value = value;\n            } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function(ts) {ts.length = 0;});\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || {tabstopId: p.tabstopId};\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p)\n                    expanding[id] = null;\n                continue;\n            }\n            \n            var ts = tabstops[id];\n            var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n            arg.unshift(i + 1, Math.max(0, i1 - i));\n            arg.push(p);\n            expanding[id] = p;\n            tokens.splice.apply(tokens, arg);\n\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function(t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1){\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                } else\n                    column += t.length;\n                text += t;\n            } else {\n                if (!t.start)\n                    t.start = {row: row, column: column};\n                else\n                    t.end = {row: row, column: column};\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    \n    this.insertSnippet = function(editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        \n        editor.forEachSelection(function() {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, {keepOrder: true});\n        \n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n\n    this.$getScope = function(editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        \n        return scope;\n    };\n\n    this.getActiveScopes = function(editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n\n    this.expandWithTab = function(editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function() {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, {keepOrder: true});\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    \n    this.expandSnippetForSelection = function(editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row,\n            cursor.column - snippet.replaceBefore.length,\n            cursor.column + snippet.replaceAfter.length\n        );\n\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n\n    this.findMatchingSnippet = function(snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        \n        if (!snippets) \n            snippets = [];\n        \n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            } else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            \n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            \n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n\n        if (snippets && snippets.content)\n            addSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(addSnippet);\n        \n        this._signal(\"registerSnippets\", {scope: scope});\n    };\n    this.unregister = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope||scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope||scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function(str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                } catch (e) {}\n            } if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            } else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                } else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                } else {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function(name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function() {\n    this.attach = function(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function() {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n\n    this.onChange = function(delta) {\n        var changeRange = delta;\n        var isRemove = delta.action[0] == \"r\";\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n        var colDiff = end.column - start.column;\n\n        if (isRemove) {\n            lineDif = -lineDif;\n            colDiff = -colDiff;\n        }\n        if (!this.$inChange && isRemove) {\n            var ts = this.selectedTabstop;\n            var changedOutside = ts && !ts.some(function(r) {\n                return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n            });\n            if (changedOutside)\n                return this.detach();\n        }\n        var ranges = this.ranges;\n        for (var i = 0; i < ranges.length; i++) {\n            var r = ranges[i];\n            if (r.end.row < start.row)\n                continue;\n\n            if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n                this.removeRange(r);\n                i--;\n                continue;\n            }\n\n            if (r.start.row == startRow && r.start.column > start.column)\n                r.start.column += colDiff;\n            if (r.end.row == startRow && r.end.column >= start.column)\n                r.end.column += colDiff;\n            if (r.start.row >= startRow)\n                r.start.row += lineDif;\n            if (r.end.row >= startRow)\n                r.end.row += lineDif;\n\n            if (comparePoints(r.start, r.end) > 0)\n                this.removeRange(r);\n        }\n        if (!ranges.length)\n            this.detach();\n    };\n    this.updateLinkedFields = function() {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = ts.length; i--;) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function(e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function() {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = this.ranges.length; i--;) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function() {\n        this.detach();\n    };\n    this.tabNext = function(dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function(index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        \n        this.selectedTabstop = ts;\n        if (!this.editor.inVirtualSelectionMode) {        \n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(ts.firstNonLinked.clone());\n            for (var i = ts.length; i--;) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n            if (sel.ranges[0])\n                sel.addRange(sel.ranges[0].clone());\n        } else {\n            this.editor.selection.setRange(ts.firstNonLinked);\n        }\n        \n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.addTabstops = function(tabstops, start, end) {\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function(ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n                \n            for (var i = ts.length; i--;) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                } else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n        }, this);\n        \n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n\n    this.addTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            if  (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function(range) {\n        var i = range.tabstop.indexOf(range);\n        range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        this.ranges.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function(ed) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n                return;\n            }\n\n            ed.tabstopManager.tabNext(1);\n        },\n        \"Shift-Tab\": function(ed) {\n            ed.tabstopManager.tabNext(-1);\n        },\n        \"Esc\": function(ed) {\n            ed.tabstopManager.detach();\n        },\n        \"Return\": function(ed) {\n            return false;\n        }\n    });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n    this.pos.row = row;\n    this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n    this.$insertRight = $insertRight;\n    this.pos = pos; \n    this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n    -moz-box-sizing: border-box;\\\n    box-sizing: border-box;\\\n    background: rgba(194, 193, 208, 0.09);\\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\\n    position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.insertSnippet = function(content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function(options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\ndefine(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\n\nvar $singleLineEditor = function(el) {\n    var renderer = new Renderer(el);\n\n    renderer.$maxLines = 4;\n\n    var editor = new Editor(renderer);\n\n    editor.setHighlightActiveLine(false);\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n\n    editor.$mouseHandler.$focusTimeout = 0;\n    editor.$highlightTagPending = true;\n\n    return editor;\n};\n\nvar AcePopup = function(parentNode) {\n    var el = dom.createElement(\"div\");\n    var popup = new $singleLineEditor(el);\n\n    if (parentNode)\n        parentNode.appendChild(el);\n    el.style.display = \"none\";\n    popup.renderer.content.style.cursor = \"default\";\n    popup.renderer.setStyle(\"ace_autocomplete\");\n\n    popup.setOption(\"displayIndentGuides\", false);\n    popup.setOption(\"dragDelay\", 150);\n\n    var noop = function(){};\n\n    popup.focus = noop;\n    popup.$isFocused = true;\n\n    popup.renderer.$cursorLayer.restartTimer = noop;\n    popup.renderer.$cursorLayer.element.style.opacity = 0;\n\n    popup.renderer.$maxLines = 8;\n    popup.renderer.$keepTextAreaAtCursor = false;\n\n    popup.setHighlightActiveLine(false);\n    popup.session.highlight(\"\");\n    popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n\n    popup.on(\"mousedown\", function(e) {\n        var pos = e.getDocumentPosition();\n        popup.selection.moveToPosition(pos);\n        selectionMarker.start.row = selectionMarker.end.row = pos.row;\n        e.stop();\n    });\n\n    var lastMouseEvent;\n    var hoverMarker = new Range(-1,0,-1,Infinity);\n    var selectionMarker = new Range(-1,0,-1,Infinity);\n    selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n    popup.setSelectOnHover = function(val) {\n        if (!val) {\n            hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n        } else if (hoverMarker.id) {\n            popup.session.removeMarker(hoverMarker.id);\n            hoverMarker.id = null;\n        }\n    };\n    popup.setSelectOnHover(false);\n    popup.on(\"mousemove\", function(e) {\n        if (!lastMouseEvent) {\n            lastMouseEvent = e;\n            return;\n        }\n        if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n            return;\n        }\n        lastMouseEvent = e;\n        lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n        var row = lastMouseEvent.getDocumentPosition().row;\n        if (hoverMarker.start.row != row) {\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row);\n        }\n    });\n    popup.renderer.on(\"beforeRender\", function() {\n        if (lastMouseEvent && hoverMarker.start.row != -1) {\n            lastMouseEvent.$pos = null;\n            var row = lastMouseEvent.getDocumentPosition().row;\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row, true);\n        }\n    });\n    popup.renderer.on(\"afterRender\", function() {\n        var row = popup.getRow();\n        var t = popup.renderer.$textLayer;\n        var selected = t.element.childNodes[row - t.config.firstRow];\n        if (selected !== t.selectedNode && t.selectedNode)\n            dom.removeCssClass(t.selectedNode, \"ace_selected\");\n        t.selectedNode = selected;\n        if (selected)\n            dom.addCssClass(selected, \"ace_selected\");\n    });\n    var hideHoverMarker = function() { setHoverMarker(-1); };\n    var setHoverMarker = function(row, suppressRedraw) {\n        if (row !== hoverMarker.start.row) {\n            hoverMarker.start.row = hoverMarker.end.row = row;\n            if (!suppressRedraw)\n                popup.session._emit(\"changeBackMarker\");\n            popup._emit(\"changeHoverMarker\");\n        }\n    };\n    popup.getHoveredRow = function() {\n        return hoverMarker.start.row;\n    };\n\n    event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n    popup.on(\"hide\", hideHoverMarker);\n    popup.on(\"changeSelection\", hideHoverMarker);\n\n    popup.session.doc.getLength = function() {\n        return popup.data.length;\n    };\n    popup.session.doc.getLine = function(i) {\n        var data = popup.data[i];\n        if (typeof data == \"string\")\n            return data;\n        return (data && data.value) || \"\";\n    };\n\n    var bgTokenizer = popup.session.bgTokenizer;\n    bgTokenizer.$tokenizeRow = function(row) {\n        var data = popup.data[row];\n        var tokens = [];\n        if (!data)\n            return tokens;\n        if (typeof data == \"string\")\n            data = {value: data};\n        var caption = data.caption || data.value || data.name;\n\n        function addToken(value, className) {\n            value && tokens.push({\n                type: (data.className || \"\") + (className || \"\"), \n                value: value\n            });\n        }\n        \n        var lower = caption.toLowerCase();\n        var filterText = (popup.filterText || \"\").toLowerCase();\n        var lastIndex = 0;\n        var lastI = 0;\n        for (var i = 0; i <= filterText.length; i++) {\n            if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n                var sub = filterText.slice(lastI, i);\n                lastI = i;\n                var index = lower.indexOf(sub, lastIndex);\n                if (index == -1) continue;\n                addToken(caption.slice(lastIndex, index), \"\");\n                lastIndex = index + sub.length;\n                addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n            }\n        }\n        addToken(caption.slice(lastIndex, caption.length), \"\");\n        \n        if (data.meta)\n            tokens.push({type: \"completion-meta\", value: data.meta});\n\n        return tokens;\n    };\n    bgTokenizer.$updateOnChange = noop;\n    bgTokenizer.start = noop;\n\n    popup.session.$computeWidth = function() {\n        return this.screenWidth = 0;\n    };\n    popup.isOpen = false;\n    popup.isTopdown = false;\n    popup.autoSelect = true;\n    popup.filterText = \"\";\n\n    popup.data = [];\n    popup.setData = function(list, filterText) {\n        popup.filterText = filterText || \"\";\n        popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n        popup.data = list || [];\n        popup.setRow(0);\n    };\n    popup.getData = function(row) {\n        return popup.data[row];\n    };\n\n    popup.getRow = function() {\n        return selectionMarker.start.row;\n    };\n    popup.setRow = function(line) {\n        line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n        if (selectionMarker.start.row != line) {\n            popup.selection.clearSelection();\n            selectionMarker.start.row = selectionMarker.end.row = line || 0;\n            popup.session._emit(\"changeBackMarker\");\n            popup.moveCursorTo(line || 0, 0);\n            if (popup.isOpen)\n                popup._signal(\"select\");\n        }\n    };\n\n    popup.on(\"changeSelection\", function() {\n        if (popup.isOpen)\n            popup.setRow(popup.selection.lead.row);\n        popup.renderer.scrollCursorIntoView();\n    });\n\n    popup.hide = function() {\n        this.container.style.display = \"none\";\n        this._signal(\"hide\");\n        popup.isOpen = false;\n    };\n    popup.show = function(pos, lineHeight, topdownOnly) {\n        var el = this.container;\n        var screenHeight = window.innerHeight;\n        var screenWidth = window.innerWidth;\n        var renderer = this.renderer;\n        var maxH = renderer.$maxLines * lineHeight * 1.4;\n        var top = pos.top + this.$borderSize;\n        var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n        if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n            renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n            el.style.top = \"\";\n            el.style.bottom = screenHeight - top + \"px\";\n            popup.isTopdown = false;\n        } else {\n            top += lineHeight;\n            renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n            el.style.top = top + \"px\";\n            el.style.bottom = \"\";\n            popup.isTopdown = true;\n        }\n\n        el.style.display = \"\";\n\n        var left = pos.left;\n        if (left + el.offsetWidth > screenWidth)\n            left = screenWidth - el.offsetWidth;\n\n        el.style.left = left + \"px\";\n\n        this._signal(\"show\");\n        lastMouseEvent = null;\n        popup.isOpen = true;\n    };\n\n    popup.getTextLeftOffset = function() {\n        return this.$borderSize + this.renderer.$padding + this.$imageSize;\n    };\n\n    popup.$imageSize = 0;\n    popup.$borderSize = 1;\n\n    return popup;\n};\n\ndom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n    background-color: #CAD6FA;\\\n    z-index: 1;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n    background-color: #3a674e;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n    border: 1px solid #abbffe;\\\n    margin-top: -1px;\\\n    background: rgba(233,233,253,0.4);\\\n    position: absolute;\\\n    z-index: 2;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\\n    border: 1px solid rgba(109, 150, 13, 0.8);\\\n    background: rgba(58, 103, 78, 0.62);\\\n}\\\n.ace_completion-meta {\\\n    opacity: 0.5;\\\n    margin: 0.9em;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n    color: #2d69c7;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n    color: #93ca12;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n    width: 300px;\\\n    z-index: 200000;\\\n    border: 1px lightgray solid;\\\n    position: fixed;\\\n    box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n    line-height: 1.4;\\\n    background: #fefefe;\\\n    color: #111;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete {\\\n    border: 1px #484747 solid;\\\n    box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\\n    line-height: 1.4;\\\n    background: #25282c;\\\n    color: #c1c1c1;\\\n}\", \"autocompletion.css\");\n\nexports.AcePopup = AcePopup;\n\n});\n\ndefine(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.parForEach = function(array, fn, callback) {\n    var completed = 0;\n    var arLength = array.length;\n    if (arLength === 0)\n        callback();\n    for (var i = 0; i < arLength; i++) {\n        fn(array[i], function(result, err) {\n            completed++;\n            if (completed === arLength)\n                callback(result, err);\n        });\n    }\n};\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;\n\nexports.retrievePrecedingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos-1; i >= 0; i--) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf.reverse().join(\"\");\n};\n\nexports.retrieveFollowingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos; i < text.length; i++) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf;\n};\n\nexports.getCompletionPrefix = function (editor) {\n    var pos = editor.getCursorPosition();\n    var line = editor.session.getLine(pos.row);\n    var prefix;\n    editor.completers.forEach(function(completer) {\n        if (completer.identifierRegexps) {\n            completer.identifierRegexps.forEach(function(identifierRegex) {\n                if (!prefix && identifierRegex)\n                    prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n            }.bind(this));\n        }\n    }.bind(this));\n    return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\ndefine(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\"], function(require, exports, module) {\n\"use strict\";\n\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\n\nvar Autocomplete = function() {\n    this.autoInsert = false;\n    this.autoSelect = true;\n    this.exactMatch = false;\n    this.gatherCompletionsId = 0;\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys(this.commands);\n\n    this.blurListener = this.blurListener.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.mousedownListener = this.mousedownListener.bind(this);\n    this.mousewheelListener = this.mousewheelListener.bind(this);\n\n    this.changeTimer = lang.delayedCall(function() {\n        this.updateCompletions(true);\n    }.bind(this));\n\n    this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n\n(function() {\n\n    this.$init = function() {\n        this.popup = new AcePopup(document.body || document.documentElement);\n        this.popup.on(\"click\", function(e) {\n            this.insertMatch();\n            e.stop();\n        }.bind(this));\n        this.popup.focus = this.editor.focus.bind(this.editor);\n        this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n        return this.popup;\n    };\n\n    this.getPopup = function() {\n        return this.popup || this.$init();\n    };\n\n    this.openPopup = function(editor, prefix, keepPopupPosition) {\n        if (!this.popup)\n            this.$init();\n\n        this.popup.autoSelect = this.autoSelect;\n\n        this.popup.setData(this.completions.filtered, this.completions.filterText);\n\n        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        \n        var renderer = editor.renderer;\n        this.popup.setRow(this.autoSelect ? 0 : -1);\n        if (!keepPopupPosition) {\n            this.popup.setTheme(editor.getTheme());\n            this.popup.setFontSize(editor.getFontSize());\n\n            var lineHeight = renderer.layerConfig.lineHeight;\n\n            var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n            pos.left -= this.popup.getTextLeftOffset();\n\n            var rect = editor.container.getBoundingClientRect();\n            pos.top += rect.top - renderer.layerConfig.offset;\n            pos.left += rect.left - editor.renderer.scrollLeft;\n            pos.left += renderer.gutterWidth;\n\n            this.popup.show(pos, lineHeight);\n        } else if (keepPopupPosition && !prefix) {\n            this.detach();\n        }\n    };\n\n    this.detach = function() {\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.off(\"changeSelection\", this.changeListener);\n        this.editor.off(\"blur\", this.blurListener);\n        this.editor.off(\"mousedown\", this.mousedownListener);\n        this.editor.off(\"mousewheel\", this.mousewheelListener);\n        this.changeTimer.cancel();\n        this.hideDocTooltip();\n\n        this.gatherCompletionsId += 1;\n        if (this.popup && this.popup.isOpen)\n            this.popup.hide();\n\n        if (this.base)\n            this.base.detach();\n        this.activated = false;\n        this.completions = this.base = null;\n    };\n\n    this.changeListener = function(e) {\n        var cursor = this.editor.selection.lead;\n        if (cursor.row != this.base.row || cursor.column < this.base.column) {\n            this.detach();\n        }\n        if (this.activated)\n            this.changeTimer.schedule();\n        else\n            this.detach();\n    };\n\n    this.blurListener = function(e) {\n        var el = document.activeElement;\n        var text = this.editor.textInput.getElement();\n        var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n        var container = this.popup && this.popup.container;\n        if (el != text && el.parentNode != container && !fromTooltip\n            && el != this.tooltipNode && e.relatedTarget != text\n        ) {\n            this.detach();\n        }\n    };\n\n    this.mousedownListener = function(e) {\n        this.detach();\n    };\n\n    this.mousewheelListener = function(e) {\n        this.detach();\n    };\n\n    this.goTo = function(where) {\n        var row = this.popup.getRow();\n        var max = this.popup.session.getLength() - 1;\n\n        switch(where) {\n            case \"up\": row = row <= 0 ? max : row - 1; break;\n            case \"down\": row = row >= max ? -1 : row + 1; break;\n            case \"start\": row = 0; break;\n            case \"end\": row = max; break;\n        }\n\n        this.popup.setRow(row);\n    };\n\n    this.insertMatch = function(data, options) {\n        if (!data)\n            data = this.popup.getData(this.popup.getRow());\n        if (!data)\n            return false;\n\n        if (data.completer && data.completer.insertMatch) {\n            data.completer.insertMatch(this.editor, data);\n        } else {\n            if (this.completions.filterText) {\n                var ranges = this.editor.selection.getAllRanges();\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= this.completions.filterText.length;\n                    this.editor.session.remove(range);\n                }\n            }\n            if (data.snippet)\n                snippetManager.insertSnippet(this.editor, data.snippet);\n            else\n                this.editor.execCommand(\"insertstring\", data.value || data);\n        }\n        this.detach();\n    };\n\n\n    this.commands = {\n        \"Up\": function(editor) { editor.completer.goTo(\"up\"); },\n        \"Down\": function(editor) { editor.completer.goTo(\"down\"); },\n        \"Ctrl-Up|Ctrl-Home\": function(editor) { editor.completer.goTo(\"start\"); },\n        \"Ctrl-Down|Ctrl-End\": function(editor) { editor.completer.goTo(\"end\"); },\n\n        \"Esc\": function(editor) { editor.completer.detach(); },\n        \"Return\": function(editor) { return editor.completer.insertMatch(); },\n        \"Shift-Return\": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); },\n        \"Tab\": function(editor) {\n            var result = editor.completer.insertMatch();\n            if (!result && !editor.tabstopManager)\n                editor.completer.goTo(\"down\");\n            else\n                return result;\n        },\n\n        \"PageUp\": function(editor) { editor.completer.popup.gotoPageUp(); },\n        \"PageDown\": function(editor) { editor.completer.popup.gotoPageDown(); }\n    };\n\n    this.gatherCompletions = function(editor, callback) {\n        var session = editor.getSession();\n        var pos = editor.getCursorPosition();\n\n        var prefix = util.getCompletionPrefix(editor);\n\n        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n        this.base.$insertRight = true;\n\n        var matches = [];\n        var total = editor.completers.length;\n        editor.completers.forEach(function(completer, i) {\n            completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n                if (!err && results)\n                    matches = matches.concat(results);\n                callback(null, {\n                    prefix: util.getCompletionPrefix(editor),\n                    matches: matches,\n                    finished: (--total === 0)\n                });\n            });\n        });\n        return true;\n    };\n\n    this.showPopup = function(editor) {\n        if (this.editor)\n            this.detach();\n\n        this.activated = true;\n\n        this.editor = editor;\n        if (editor.completer != this) {\n            if (editor.completer)\n                editor.completer.detach();\n            editor.completer = this;\n        }\n\n        editor.on(\"changeSelection\", this.changeListener);\n        editor.on(\"blur\", this.blurListener);\n        editor.on(\"mousedown\", this.mousedownListener);\n        editor.on(\"mousewheel\", this.mousewheelListener);\n\n        this.updateCompletions();\n    };\n\n    this.updateCompletions = function(keepPopupPosition) {\n        if (keepPopupPosition && this.base && this.completions) {\n            var pos = this.editor.getCursorPosition();\n            var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n            if (prefix == this.completions.filterText)\n                return;\n            this.completions.setFilter(prefix);\n            if (!this.completions.filtered.length)\n                return this.detach();\n            if (this.completions.filtered.length == 1\n            && this.completions.filtered[0].value == prefix\n            && !this.completions.filtered[0].snippet)\n                return this.detach();\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            return;\n        }\n        var _id = this.gatherCompletionsId;\n        this.gatherCompletions(this.editor, function(err, results) {\n            var detachIfFinished = function() {\n                if (!results.finished) return;\n                return this.detach();\n            }.bind(this);\n\n            var prefix = results.prefix;\n            var matches = results && results.matches;\n\n            if (!matches || !matches.length)\n                return detachIfFinished();\n            if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n                return;\n\n            this.completions = new FilteredList(matches);\n\n            if (this.exactMatch)\n                this.completions.exactMatch = true;\n\n            this.completions.setFilter(prefix);\n            var filtered = this.completions.filtered;\n            if (!filtered.length)\n                return detachIfFinished();\n            if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n                return detachIfFinished();\n            if (this.autoInsert && filtered.length == 1 && results.finished)\n                return this.insertMatch(filtered[0]);\n\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n        }.bind(this));\n    };\n\n    this.cancelContextMenu = function() {\n        this.editor.$mouseHandler.cancelContextMenu();\n    };\n\n    this.updateDocTooltip = function() {\n        var popup = this.popup;\n        var all = popup.data;\n        var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n        var doc = null;\n        if (!selected || !this.editor || !this.popup.isOpen)\n            return this.hideDocTooltip();\n        this.editor.completers.some(function(completer) {\n            if (completer.getDocTooltip)\n                doc = completer.getDocTooltip(selected);\n            return doc;\n        });\n        if (!doc)\n            doc = selected;\n\n        if (typeof doc == \"string\")\n            doc = {docText: doc};\n        if (!doc || !(doc.docHTML || doc.docText))\n            return this.hideDocTooltip();\n        this.showDocTooltip(doc);\n    };\n\n    this.showDocTooltip = function(item) {\n        if (!this.tooltipNode) {\n            this.tooltipNode = dom.createElement(\"div\");\n            this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n            this.tooltipNode.style.margin = 0;\n            this.tooltipNode.style.pointerEvents = \"auto\";\n            this.tooltipNode.tabIndex = -1;\n            this.tooltipNode.onblur = this.blurListener.bind(this);\n            this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n        }\n\n        var tooltipNode = this.tooltipNode;\n        if (item.docHTML) {\n            tooltipNode.innerHTML = item.docHTML;\n        } else if (item.docText) {\n            tooltipNode.textContent = item.docText;\n        }\n\n        if (!tooltipNode.parentNode)\n            document.body.appendChild(tooltipNode);\n        var popup = this.popup;\n        var rect = popup.container.getBoundingClientRect();\n        tooltipNode.style.top = popup.container.style.top;\n        tooltipNode.style.bottom = popup.container.style.bottom;\n\n        tooltipNode.style.display = \"block\";\n        if (window.innerWidth - rect.right < 320) {\n            if (rect.left < 320) {\n                if(popup.isTopdown) {\n                    tooltipNode.style.top = rect.bottom + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                } else {\n                    tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                }\n            } else {\n                tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n                tooltipNode.style.left = \"\";\n            }\n        } else {\n            tooltipNode.style.left = (rect.right + 1) + \"px\";\n            tooltipNode.style.right = \"\";\n        }\n    };\n\n    this.hideDocTooltip = function() {\n        this.tooltipTimer.cancel();\n        if (!this.tooltipNode) return;\n        var el = this.tooltipNode;\n        if (!this.editor.isFocused() && document.activeElement == el)\n            this.editor.focus();\n        this.tooltipNode = null;\n        if (el.parentNode)\n            el.parentNode.removeChild(el);\n    };\n    \n    this.onTooltipClick = function(e) {\n        var a = e.target;\n        while (a && a != this.tooltipNode) {\n            if (a.nodeName == \"A\" && a.href) {\n                a.rel = \"noreferrer\";\n                a.target = \"_blank\";\n                break;\n            }\n            a = a.parentNode;\n        }\n    };\n\n}).call(Autocomplete.prototype);\n\nAutocomplete.startCommand = {\n    name: \"startAutocomplete\",\n    exec: function(editor) {\n        if (!editor.completer)\n            editor.completer = new Autocomplete();\n        editor.completer.autoInsert = false;\n        editor.completer.autoSelect = true;\n        editor.completer.showPopup(editor);\n        editor.completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\n\nvar FilteredList = function(array, filterText) {\n    this.all = array;\n    this.filtered = array;\n    this.filterText = filterText || \"\";\n    this.exactMatch = false;\n};\n(function(){\n    this.setFilter = function(str) {\n        if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n            var matches = this.filtered;\n        else\n            var matches = this.all;\n\n        this.filterText = str;\n        matches = this.filterCompletions(matches, this.filterText);\n        matches = matches.sort(function(a, b) {\n            return b.exactMatch - a.exactMatch || b.$score - a.$score \n                || (a.caption || a.value) < (b.caption || b.value);\n        });\n        var prev = null;\n        matches = matches.filter(function(item){\n            var caption = item.snippet || item.caption || item.value;\n            if (caption === prev) return false;\n            prev = caption;\n            return true;\n        });\n\n        this.filtered = matches;\n    };\n    this.filterCompletions = function(items, needle) {\n        var results = [];\n        var upper = needle.toUpperCase();\n        var lower = needle.toLowerCase();\n        loop: for (var i = 0, item; item = items[i]; i++) {\n            var caption = item.caption || item.value || item.snippet;\n            if (!caption) continue;\n            var lastIndex = -1;\n            var matchMask = 0;\n            var penalty = 0;\n            var index, distance;\n\n            if (this.exactMatch) {\n                if (needle !== caption.substr(0, needle.length))\n                    continue loop;\n            } else {\n                var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n                if (fullMatchIndex > -1) {\n                    penalty = fullMatchIndex;\n                } else {\n                    for (var j = 0; j < needle.length; j++) {\n                        var i1 = caption.indexOf(lower[j], lastIndex + 1);\n                        var i2 = caption.indexOf(upper[j], lastIndex + 1);\n                        index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n                        if (index < 0)\n                            continue loop;\n                        distance = index - lastIndex - 1;\n                        if (distance > 0) {\n                            if (lastIndex === -1)\n                                penalty += 10;\n                            penalty += distance;\n                            matchMask = matchMask | (1 << j);\n                        }\n                        lastIndex = index;\n                    }\n                }\n            }\n            item.matchMask = matchMask;\n            item.exactMatch = penalty ? 0 : 1;\n            item.$score = (item.score || 0) - penalty;\n            results.push(item);\n        }\n        return results;\n    };\n}).call(FilteredList.prototype);\n\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\ndefine(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n    var Range = require(\"../range\").Range;\n    \n    var splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n\n    function getWordIndex(doc, pos) {\n        var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));\n        return textBefore.split(splitRegex).length - 1;\n    }\n    function wordDistance(doc, pos) {\n        var prefixPos = getWordIndex(doc, pos);\n        var words = doc.getValue().split(splitRegex);\n        var wordScores = Object.create(null);\n        \n        var currentWord = words[prefixPos];\n\n        words.forEach(function(word, idx) {\n            if (!word || word === currentWord) return;\n\n            var distance = Math.abs(prefixPos - idx);\n            var score = words.length - distance;\n            if (wordScores[word]) {\n                wordScores[word] = Math.max(score, wordScores[word]);\n            } else {\n                wordScores[word] = score;\n            }\n        });\n        return wordScores;\n    }\n\n    exports.getCompletions = function(editor, session, pos, prefix, callback) {\n        var wordScore = wordDistance(session, pos);\n        var wordList = Object.keys(wordScore);\n        callback(null, wordList.map(function(word) {\n            return {\n                caption: word,\n                value: word,\n                score: wordScore[word],\n                meta: \"local\"\n            };\n        }));\n    };\n});\n\ndefine(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\n\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        if (session.$mode.completer) {\n            return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n        }\n        var state = editor.session.getState(pos.row);\n        var completions = session.$mode.getCompletions(state, session, pos, prefix);\n        callback(null, completions);\n    }\n};\n\nvar snippetCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        var scopes = [];\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n            scopes.push('html-tag');\n        else\n            scopes = snippetManager.getActiveScopes(editor);\n\n        var snippetMap = snippetManager.snippetMap;\n        var completions = [];\n        scopes.forEach(function(scope) {\n            var snippets = snippetMap[scope] || [];\n            for (var i = snippets.length; i--;) {\n                var s = snippets[i];\n                var caption = s.name || s.tabTrigger;\n                if (!caption)\n                    continue;\n                completions.push({\n                    caption: caption,\n                    snippet: s.content,\n                    meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n                    type: \"snippet\"\n                });\n            }\n        }, this);\n        callback(null, completions);\n    },\n    getDocTooltip: function(item) {\n        if (item.type == \"snippet\" && !item.docHTML) {\n            item.docHTML = [\n                \"<b>\", lang.escapeHTML(item.caption), \"</b>\", \"<hr></hr>\",\n                lang.escapeHTML(item.snippet)\n            ].join(\"\");\n        }\n    }\n};\n\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function(val) {\n    completers.length = 0;\n    if (val) completers.push.apply(completers, val);\n};\nexports.addCompleter = function(completer) {\n    completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\n\nvar expandSnippet = {\n    name: \"expandSnippet\",\n    exec: function(editor) {\n        return snippetManager.expandWithTab(editor);\n    },\n    bindKey: \"Tab\"\n};\n\nvar onChangeMode = function(e, editor) {\n    loadSnippetsForMode(editor.session.$mode);\n};\n\nvar loadSnippetsForMode = function(mode) {\n    var id = mode.$id;\n    if (!snippetManager.files)\n        snippetManager.files = {};\n    loadSnippetFile(id);\n    if (mode.modes)\n        mode.modes.forEach(loadSnippetsForMode);\n};\n\nvar loadSnippetFile = function(id) {\n    if (!id || snippetManager.files[id])\n        return;\n    var snippetFilePath = id.replace(\"mode\", \"snippets\");\n    snippetManager.files[id] = {};\n    config.loadModule(snippetFilePath, function(m) {\n        if (m) {\n            snippetManager.files[id] = m;\n            if (!m.snippets && m.snippetText)\n                m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n            snippetManager.register(m.snippets || [], m.scope);\n            if (m.includeScopes) {\n                snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n                m.includeScopes.forEach(function(x) {\n                    loadSnippetFile(\"ace/mode/\" + x);\n                });\n            }\n        }\n    });\n};\n\nvar doLiveAutocomplete = function(e) {\n    var editor = e.editor;\n    var hasCompleter = editor.completer && editor.completer.activated;\n    if (e.command.name === \"backspace\") {\n        if (hasCompleter && !util.getCompletionPrefix(editor))\n            editor.completer.detach();\n    }\n    else if (e.command.name === \"insertstring\") {\n        var prefix = util.getCompletionPrefix(editor);\n        if (prefix && !hasCompleter) {\n            if (!editor.completer) {\n                editor.completer = new Autocomplete();\n            }\n            editor.completer.autoInsert = false;\n            editor.completer.showPopup(editor);\n        }\n    }\n};\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableBasicAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                this.commands.addCommand(Autocomplete.startCommand);\n            } else {\n                this.commands.removeCommand(Autocomplete.startCommand);\n            }\n        },\n        value: false\n    },\n    enableLiveAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                this.commands.on('afterExec', doLiveAutocomplete);\n            } else {\n                this.commands.removeListener('afterExec', doLiveAutocomplete);\n            }\n        },\n        value: false\n    },\n    enableSnippets: {\n        set: function(val) {\n            if (val) {\n                this.commands.addCommand(expandSnippet);\n                this.on(\"changeMode\", onChangeMode);\n                onChangeMode(null, this);\n            } else {\n                this.commands.removeCommand(expandSnippet);\n                this.off(\"changeMode\", onChangeMode);\n            }\n        },\n        value: false\n    }\n});\n});                (function() {\n                    window.require([\"ace/ext/language_tools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-linking.js",
    "content": "define(\"ace/ext/linking\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\nvar Editor = require(\"ace/editor\").Editor;\n\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableLinking: {\n        set: function(val) {\n            if (val) {\n                this.on(\"click\", onClick);\n                this.on(\"mousemove\", onMouseMove);\n            } else {\n                this.off(\"click\", onClick);\n                this.off(\"mousemove\", onMouseMove);\n            }\n        },\n        value: false\n    }\n});\n\nexports.previousLinkingHover = false;\n\nfunction onMouseMove(e) {\n    var editor = e.editor;\n    var ctrl = e.getAccelKey();\n\n    if (ctrl) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var session = editor.session;\n        var token = session.getTokenAt(docPos.row, docPos.column);\n\n        if (exports.previousLinkingHover && exports.previousLinkingHover != token) {\n            editor._emit(\"linkHoverOut\");\n        }\n        editor._emit(\"linkHover\", {position: docPos, token: token});\n        exports.previousLinkingHover = token;\n    } else if (exports.previousLinkingHover) {\n        editor._emit(\"linkHoverOut\");\n        exports.previousLinkingHover = false;\n    }\n}\n\nfunction onClick(e) {\n    var ctrl = e.getAccelKey();\n    var button = e.getButton();\n\n    if (button == 0 && ctrl) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var session = editor.session;\n        var token = session.getTokenAt(docPos.row, docPos.column);\n\n        editor._emit(\"linkClick\", {position: docPos, token: token});\n    }\n}\n\n});                (function() {\n                    window.require([\"ace/ext/linking\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-modelist.js",
    "content": "define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\n\nvar Mode = function(name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function(a, b){\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    } else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n\n    this.extRe = new RegExp(re, \"gi\");\n};\n\nMode.prototype.supportsFile = function(filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP:        [\"abap\"],\n    ABC:         [\"abc\"],\n    ActionScript:[\"as\"],\n    ADA:         [\"ada|adb\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    AsciiDoc:    [\"asciidoc|adoc\"],\n    ASL:         [\"dsl|asl\"],\n    Assembly_x86:[\"asm|a\"],\n    AutoHotKey:  [\"ahk\"],\n    Apex:        [\"apex|cls|trigger|tgr\"],\n    BatchFile:   [\"bat|cmd\"],\n    Bro:         [\"bro\"],\n    C_Cpp:       [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search:    [\"c9search_results\"],\n    Cirru:       [\"cirru|cr\"],\n    Clojure:     [\"clj|cljs\"],\n    Cobol:       [\"CBL|COB\"],\n    coffee:      [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion:  [\"cfm\"],\n    CSharp:      [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS:         [\"css\"],\n    Curly:       [\"curly\"],\n    D:           [\"d|di\"],\n    Dart:        [\"dart\"],\n    Diff:        [\"diff|patch\"],\n    Dockerfile:  [\"^Dockerfile\"],\n    Dot:         [\"dot\"],\n    Drools:      [\"drl\"],\n    Edifact:     [\"edi\"],\n    Eiffel:      [\"e|ge\"],\n    EJS:         [\"ejs\"],\n    Elixir:      [\"ex|exs\"],\n    Elm:         [\"elm\"],\n    Erlang:      [\"erl|hrl\"],\n    Forth:       [\"frt|fs|ldr|fth|4th\"],\n    Fortran:     [\"f|f90\"],\n    FSharp:      [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL:         [\"fsl\"],\n    FTL:         [\"ftl\"],\n    Gcode:       [\"gcode\"],\n    Gherkin:     [\"feature\"],\n    Gitignore:   [\"^.gitignore\"],\n    Glsl:        [\"glsl|frag|vert\"],\n    Gobstones:   [\"gbs\"],\n    golang:      [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy:      [\"groovy\"],\n    HAML:        [\"haml\"],\n    Handlebars:  [\"hbs|handlebars|tpl|mustache\"],\n    Haskell:     [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe:        [\"hx\"],\n    Hjson:       [\"hjson\"],\n    HTML:        [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby:   [\"erb|rhtml|html.erb\"],\n    INI:         [\"ini|conf|cfg|prefs\"],\n    Io:          [\"io\"],\n    Jack:        [\"jack\"],\n    Jade:        [\"jade|pug\"],\n    Java:        [\"java\"],\n    JavaScript:  [\"js|jsm|jsx\"],\n    JSON:        [\"json\"],\n    JSONiq:      [\"jq\"],\n    JSP:         [\"jsp\"],\n    JSSM:        [\"jssm|jssm_state\"],\n    JSX:         [\"jsx\"],\n    Julia:       [\"jl\"],\n    Kotlin:      [\"kt|kts\"],\n    LaTeX:       [\"tex|latex|ltx|bib\"],\n    LESS:        [\"less\"],\n    Liquid:      [\"liquid\"],\n    Lisp:        [\"lisp\"],\n    LiveScript:  [\"ls\"],\n    LogiQL:      [\"logic|lql\"],\n    LSL:         [\"lsl\"],\n    Lua:         [\"lua\"],\n    LuaPage:     [\"lp\"],\n    Lucene:      [\"lucene\"],\n    Makefile:    [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown:    [\"md|markdown\"],\n    Mask:        [\"mask\"],\n    MATLAB:      [\"matlab\"],\n    Maze:        [\"mz\"],\n    MEL:         [\"mel\"],\n    MIXAL:       [\"mixal\"],\n    MUSHCode:    [\"mc|mush\"],\n    MySQL:       [\"mysql\"],\n    Nix:         [\"nix\"],\n    NSIS:        [\"nsi|nsh\"],\n    ObjectiveC:  [\"m|mm\"],\n    OCaml:       [\"ml|mli\"],\n    Pascal:      [\"pas|p\"],\n    Perl:        [\"pl|pm\"],\n    Perl6:       [\"p6|pl6|pm6\"],\n    pgSQL:       [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP:         [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Puppet:      [\"epp|pp\"],\n    Pig:         [\"pig\"],\n    Powershell:  [\"ps1\"],\n    Praat:       [\"praat|praatscript|psc|proc\"],\n    Prolog:      [\"plg|prolog\"],\n    Properties:  [\"properties\"],\n    Protobuf:    [\"proto\"],\n    Python:      [\"py\"],\n    R:           [\"r\"],\n    Razor:       [\"cshtml|asp\"],\n    RDoc:        [\"Rd\"],\n    Red:         [\"red|reds\"],\n    RHTML:       [\"Rhtml\"],\n    RST:         [\"rst\"],\n    Ruby:        [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust:        [\"rs\"],\n    SASS:        [\"sass\"],\n    SCAD:        [\"scad\"],\n    Scala:       [\"scala\"],\n    Scheme:      [\"scm|sm|rkt|oak|scheme\"],\n    SCSS:        [\"scss\"],\n    SH:          [\"sh|bash|^.bashrc\"],\n    SJS:         [\"sjs\"],\n    Slim:        [\"slim|skim\"],\n    Smarty:      [\"smarty|tpl\"],\n    snippets:    [\"snippets\"],\n    Soy_Template:[\"soy\"],\n    Space:       [\"space\"],\n    SQL:         [\"sql\"],\n    SQLServer:   [\"sqlserver\"],\n    Stylus:      [\"styl|stylus\"],\n    SVG:         [\"svg\"],\n    Swift:       [\"swift\"],\n    Tcl:         [\"tcl\"],\n    Terraform:   [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex:         [\"tex\"],\n    Text:        [\"txt\"],\n    Textile:     [\"textile\"],\n    Toml:        [\"toml\"],\n    TSX:         [\"tsx\"],\n    Twig:        [\"latte|twig|swig\"],\n    Typescript:  [\"ts|typescript|str\"],\n    Vala:        [\"vala\"],\n    VBScript:    [\"vbs|vb\"],\n    Velocity:    [\"vm\"],\n    Verilog:     [\"v|vh|sv|svh\"],\n    VHDL:        [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok:      [\"wlk|wpgm|wtest\"],\n    XML:         [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery:      [\"xq\"],\n    YAML:        [\"yaml|yml\"],\n    Django:      [\"html\"]\n};\n\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\n\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});                (function() {\n                    window.require([\"ace/ext/modelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-options.js",
    "content": "define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = \"#ace_settingsmenu, #kbshortcutmenu {\\\nbackground-color: #F7F7F7;\\\ncolor: black;\\\nbox-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\\npadding: 1em 0.5em 2em 1em;\\\noverflow: auto;\\\nposition: absolute;\\\nmargin: 0;\\\nbottom: 0;\\\nright: 0;\\\ntop: 0;\\\nz-index: 9991;\\\ncursor: default;\\\n}\\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\\nbox-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\\nbackground-color: rgba(255, 255, 255, 0.6);\\\ncolor: black;\\\n}\\\n.ace_optionsMenuEntry:hover {\\\nbackground-color: rgba(100, 100, 100, 0.1);\\\ntransition: all 0.3s\\\n}\\\n.ace_closeButton {\\\nbackground: rgba(245, 146, 146, 0.5);\\\nborder: 1px solid #F48A8A;\\\nborder-radius: 50%;\\\npadding: 7px;\\\nposition: absolute;\\\nright: -8px;\\\ntop: -8px;\\\nz-index: 100000;\\\n}\\\n.ace_closeButton{\\\nbackground: rgba(245, 146, 146, 0.9);\\\n}\\\n.ace_optionsMenuKey {\\\ncolor: darkslateblue;\\\nfont-weight: bold;\\\n}\\\n.ace_optionsMenuCommand {\\\ncolor: darkcyan;\\\nfont-weight: normal;\\\n}\\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\\nvertical-align: middle;\\\n}\\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\\nbackground: #e7e7e7;\\\nbox-shadow: 1px 0px 2px 0px #adadad inset;\\\nborder-color: #adadad;\\\n}\\\n.ace_optionsMenuEntry button {\\\nbackground: white;\\\nborder: 1px solid lightgray;\\\nmargin: 0px;\\\n}\\\n.ace_optionsMenuEntry button:hover{\\\nbackground: #f0f0f0;\\\n}\";\ndom.importCssString(cssText);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {\n    top = top ? 'top: ' + top + ';' : '';\n    bottom = bottom ? 'bottom: ' + bottom + ';' : '';\n    right = right ? 'right: ' + right + ';' : '';\n    left = left ? 'left: ' + left + ';' : '';\n\n    var closer = document.createElement('div');\n    var contentContainer = document.createElement('div');\n\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            closer.click();\n        }\n    }\n\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        'background-color: rgba(0, 0, 0, 0.3);';\n    closer.addEventListener('click', function() {\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        editor.focus();\n        closer = null;\n    });\n    document.addEventListener('keydown', documentEscListener);\n\n    contentContainer.style.cssText = top + right + bottom + left;\n    contentContainer.addEventListener('click', function(e) {\n        e.stopPropagation();\n    });\n\n    var wrapper = dom.createElement(\"div\");\n    wrapper.style.position = \"relative\";\n    \n    var closeButton = dom.createElement(\"div\");\n    closeButton.className = \"ace_closeButton\";\n    closeButton.addEventListener('click', function() {\n        closer.click();\n    });\n    \n    wrapper.appendChild(closeButton);\n    contentContainer.appendChild(wrapper);\n    \n    contentContainer.appendChild(contentElement);\n    closer.appendChild(contentContainer);\n    document.body.appendChild(closer);\n    editor.blur();\n};\n\n});\n\ndefine(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\n\nvar Mode = function(name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function(a, b){\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    } else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n\n    this.extRe = new RegExp(re, \"gi\");\n};\n\nMode.prototype.supportsFile = function(filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP:        [\"abap\"],\n    ABC:         [\"abc\"],\n    ActionScript:[\"as\"],\n    ADA:         [\"ada|adb\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    AsciiDoc:    [\"asciidoc|adoc\"],\n    ASL:         [\"dsl|asl\"],\n    Assembly_x86:[\"asm|a\"],\n    AutoHotKey:  [\"ahk\"],\n    Apex:        [\"apex|cls|trigger|tgr\"],\n    BatchFile:   [\"bat|cmd\"],\n    Bro:         [\"bro\"],\n    C_Cpp:       [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search:    [\"c9search_results\"],\n    Cirru:       [\"cirru|cr\"],\n    Clojure:     [\"clj|cljs\"],\n    Cobol:       [\"CBL|COB\"],\n    coffee:      [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion:  [\"cfm\"],\n    CSharp:      [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS:         [\"css\"],\n    Curly:       [\"curly\"],\n    D:           [\"d|di\"],\n    Dart:        [\"dart\"],\n    Diff:        [\"diff|patch\"],\n    Dockerfile:  [\"^Dockerfile\"],\n    Dot:         [\"dot\"],\n    Drools:      [\"drl\"],\n    Edifact:     [\"edi\"],\n    Eiffel:      [\"e|ge\"],\n    EJS:         [\"ejs\"],\n    Elixir:      [\"ex|exs\"],\n    Elm:         [\"elm\"],\n    Erlang:      [\"erl|hrl\"],\n    Forth:       [\"frt|fs|ldr|fth|4th\"],\n    Fortran:     [\"f|f90\"],\n    FSharp:      [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL:         [\"fsl\"],\n    FTL:         [\"ftl\"],\n    Gcode:       [\"gcode\"],\n    Gherkin:     [\"feature\"],\n    Gitignore:   [\"^.gitignore\"],\n    Glsl:        [\"glsl|frag|vert\"],\n    Gobstones:   [\"gbs\"],\n    golang:      [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy:      [\"groovy\"],\n    HAML:        [\"haml\"],\n    Handlebars:  [\"hbs|handlebars|tpl|mustache\"],\n    Haskell:     [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe:        [\"hx\"],\n    Hjson:       [\"hjson\"],\n    HTML:        [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby:   [\"erb|rhtml|html.erb\"],\n    INI:         [\"ini|conf|cfg|prefs\"],\n    Io:          [\"io\"],\n    Jack:        [\"jack\"],\n    Jade:        [\"jade|pug\"],\n    Java:        [\"java\"],\n    JavaScript:  [\"js|jsm|jsx\"],\n    JSON:        [\"json\"],\n    JSONiq:      [\"jq\"],\n    JSP:         [\"jsp\"],\n    JSSM:        [\"jssm|jssm_state\"],\n    JSX:         [\"jsx\"],\n    Julia:       [\"jl\"],\n    Kotlin:      [\"kt|kts\"],\n    LaTeX:       [\"tex|latex|ltx|bib\"],\n    LESS:        [\"less\"],\n    Liquid:      [\"liquid\"],\n    Lisp:        [\"lisp\"],\n    LiveScript:  [\"ls\"],\n    LogiQL:      [\"logic|lql\"],\n    LSL:         [\"lsl\"],\n    Lua:         [\"lua\"],\n    LuaPage:     [\"lp\"],\n    Lucene:      [\"lucene\"],\n    Makefile:    [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown:    [\"md|markdown\"],\n    Mask:        [\"mask\"],\n    MATLAB:      [\"matlab\"],\n    Maze:        [\"mz\"],\n    MEL:         [\"mel\"],\n    MIXAL:       [\"mixal\"],\n    MUSHCode:    [\"mc|mush\"],\n    MySQL:       [\"mysql\"],\n    Nix:         [\"nix\"],\n    NSIS:        [\"nsi|nsh\"],\n    ObjectiveC:  [\"m|mm\"],\n    OCaml:       [\"ml|mli\"],\n    Pascal:      [\"pas|p\"],\n    Perl:        [\"pl|pm\"],\n    Perl6:       [\"p6|pl6|pm6\"],\n    pgSQL:       [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP:         [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Puppet:      [\"epp|pp\"],\n    Pig:         [\"pig\"],\n    Powershell:  [\"ps1\"],\n    Praat:       [\"praat|praatscript|psc|proc\"],\n    Prolog:      [\"plg|prolog\"],\n    Properties:  [\"properties\"],\n    Protobuf:    [\"proto\"],\n    Python:      [\"py\"],\n    R:           [\"r\"],\n    Razor:       [\"cshtml|asp\"],\n    RDoc:        [\"Rd\"],\n    Red:         [\"red|reds\"],\n    RHTML:       [\"Rhtml\"],\n    RST:         [\"rst\"],\n    Ruby:        [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust:        [\"rs\"],\n    SASS:        [\"sass\"],\n    SCAD:        [\"scad\"],\n    Scala:       [\"scala\"],\n    Scheme:      [\"scm|sm|rkt|oak|scheme\"],\n    SCSS:        [\"scss\"],\n    SH:          [\"sh|bash|^.bashrc\"],\n    SJS:         [\"sjs\"],\n    Slim:        [\"slim|skim\"],\n    Smarty:      [\"smarty|tpl\"],\n    snippets:    [\"snippets\"],\n    Soy_Template:[\"soy\"],\n    Space:       [\"space\"],\n    SQL:         [\"sql\"],\n    SQLServer:   [\"sqlserver\"],\n    Stylus:      [\"styl|stylus\"],\n    SVG:         [\"svg\"],\n    Swift:       [\"swift\"],\n    Tcl:         [\"tcl\"],\n    Terraform:   [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex:         [\"tex\"],\n    Text:        [\"txt\"],\n    Textile:     [\"textile\"],\n    Toml:        [\"toml\"],\n    TSX:         [\"tsx\"],\n    Twig:        [\"latte|twig|swig\"],\n    Typescript:  [\"ts|typescript|str\"],\n    Vala:        [\"vala\"],\n    VBScript:    [\"vbs|vb\"],\n    Velocity:    [\"vm\"],\n    Verilog:     [\"v|vh|sv|svh\"],\n    VHDL:        [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok:      [\"wlk|wpgm|wtest\"],\n    XML:         [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery:      [\"xq\"],\n    YAML:        [\"yaml|yml\"],\n    Django:      [\"html\"]\n};\n\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\n\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n\ndefine(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar themeData = [\n    [\"Chrome\"         ],\n    [\"Clouds\"         ],\n    [\"Crimson Editor\" ],\n    [\"Dawn\"           ],\n    [\"Dreamweaver\"    ],\n    [\"Eclipse\"        ],\n    [\"GitHub\"         ],\n    [\"IPlastic\"       ],\n    [\"Solarized Light\"],\n    [\"TextMate\"       ],\n    [\"Tomorrow\"       ],\n    [\"XCode\"          ],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\"           ,\"sqlserver\"               , \"light\"],\n    [\"Ambiance\"             ,\"ambiance\"                ,  \"dark\"],\n    [\"Chaos\"                ,\"chaos\"                   ,  \"dark\"],\n    [\"Clouds Midnight\"      ,\"clouds_midnight\"         ,  \"dark\"],\n    [\"Dracula\"              ,\"\"                        ,  \"dark\"],\n    [\"Cobalt\"               ,\"cobalt\"                  ,  \"dark\"],\n    [\"Gruvbox\"              ,\"gruvbox\"                 ,  \"dark\"],\n    [\"Green on Black\"       ,\"gob\"                     ,  \"dark\"],\n    [\"idle Fingers\"         ,\"idle_fingers\"            ,  \"dark\"],\n    [\"krTheme\"              ,\"kr_theme\"                ,  \"dark\"],\n    [\"Merbivore\"            ,\"merbivore\"               ,  \"dark\"],\n    [\"Merbivore Soft\"       ,\"merbivore_soft\"          ,  \"dark\"],\n    [\"Mono Industrial\"      ,\"mono_industrial\"         ,  \"dark\"],\n    [\"Monokai\"              ,\"monokai\"                 ,  \"dark\"],\n    [\"Pastel on dark\"       ,\"pastel_on_dark\"          ,  \"dark\"],\n    [\"Solarized Dark\"       ,\"solarized_dark\"          ,  \"dark\"],\n    [\"Terminal\"             ,\"terminal\"                ,  \"dark\"],\n    [\"Tomorrow Night\"       ,\"tomorrow_night\"          ,  \"dark\"],\n    [\"Tomorrow Night Blue\"  ,\"tomorrow_night_blue\"     ,  \"dark\"],\n    [\"Tomorrow Night Bright\",\"tomorrow_night_bright\"   ,  \"dark\"],\n    [\"Tomorrow Night 80s\"   ,\"tomorrow_night_eighties\" ,  \"dark\"],\n    [\"Twilight\"             ,\"twilight\"                ,  \"dark\"],\n    [\"Vibrant Ink\"          ,\"vibrant_ink\"             ,  \"dark\"]\n];\n\n\nexports.themesByName = {};\nexports.themes = themeData.map(function(data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});\n\ndefine(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"], function(require, exports, module) {\n\"use strict\";\nvar overlayPage = require('./menu_tools/overlay_page').overlayPage;\n\n \nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar buildDom = dom.buildDom;\n\nvar modelist = require(\"./modelist\");\nvar themelist = require(\"./themelist\");\n\nvar themes = { Bright: [], Dark: [] };\nthemelist.themes.forEach(function(x) {\n    themes[x.isDark ? \"Dark\" : \"Bright\"].push({ caption: x.caption, value: x.theme });\n});\n\nvar modes = modelist.modes.map(function(x){ \n    return { caption: x.caption, value: x.mode }; \n});\n\n\nvar optionGroups = {\n    Main: {\n        Mode: {\n            path: \"mode\",\n            type: \"select\",\n            items: modes\n        },\n        Theme: {\n            path: \"theme\",\n            type: \"select\",\n            items: themes\n        },\n        \"Keybinding\": {\n            type: \"buttonBar\",\n            path: \"keyboardHandler\",\n            items: [\n                { caption : \"Ace\", value : null },\n                { caption : \"Vim\", value : \"ace/keyboard/vim\" },\n                { caption : \"Emacs\", value : \"ace/keyboard/emacs\" },\n                { caption : \"Sublime\", value : \"ace/keyboard/sublime\" }\n            ]\n        },\n        \"Font Size\": {\n            path: \"fontSize\",\n            type: \"number\",\n            defaultValue: 12,\n            defaults: [\n                {caption: \"12px\", value: 12},\n                {caption: \"24px\", value: 24}\n            ]\n        },\n        \"Soft Wrap\": {\n            type: \"buttonBar\",\n            path: \"wrap\",\n            items: [\n               { caption : \"Off\",  value : \"off\" },\n               { caption : \"View\", value : \"free\" },\n               { caption : \"margin\", value : \"printMargin\" },\n               { caption : \"40\",   value : \"40\" }\n            ]\n        },\n        \"Cursor Style\": {\n            path: \"cursorStyle\",\n            items: [\n               { caption : \"Ace\",    value : \"ace\" },\n               { caption : \"Slim\",   value : \"slim\" },\n               { caption : \"Smooth\", value : \"smooth\" },\n               { caption : \"Smooth And Slim\", value : \"smooth slim\" },\n               { caption : \"Wide\",   value : \"wide\" }\n            ]\n        },\n        \"Folding\": {\n            path: \"foldStyle\",\n            items: [\n                { caption : \"Manual\", value : \"manual\" },\n                { caption : \"Mark begin\", value : \"markbegin\" },\n                { caption : \"Mark begin and end\", value : \"markbeginend\" }\n            ]\n        },\n        \"Soft Tabs\": [{\n            path: \"useSoftTabs\"\n        }, {\n            path: \"tabSize\",\n            type: \"number\",\n            values: [2, 3, 4, 8, 16]\n        }],\n        \"Overscroll\": {\n            type: \"buttonBar\",\n            path: \"scrollPastEnd\",\n            items: [\n               { caption : \"None\",  value : 0 },\n               { caption : \"Half\",   value : 0.5 },\n               { caption : \"Full\",   value : 1 }\n            ]\n        }\n    },\n    More: {\n        \"Atomic soft tabs\": {\n            path: \"navigateWithinSoftTabs\"\n        },\n        \"Enable Behaviours\": {\n            path: \"behavioursEnabled\"\n        },\n        \"Full Line Selection\": {\n            type: \"checkbox\",\n            values: \"text|line\",\n            path: \"selectionStyle\"\n        },\n        \"Highlight Active Line\": {\n            path: \"highlightActiveLine\"\n        },\n        \"Show Invisibles\": {\n            path: \"showInvisibles\"\n        },\n        \"Show Indent Guides\": {\n            path: \"displayIndentGuides\"\n        },\n        \"Persistent Scrollbar\": [{\n            path: \"hScrollBarAlwaysVisible\"\n        }, {\n            path: \"vScrollBarAlwaysVisible\"\n        }],\n        \"Animate scrolling\": {\n            path: \"animatedScroll\"\n        },\n        \"Show Gutter\": {\n            path: \"showGutter\"\n        },\n        \"Show Line Numbers\": {\n            path: \"showLineNumbers\"\n        },\n        \"Relative Line Numbers\": {\n            path: \"relativeLineNumbers\"\n        },\n        \"Fixed Gutter Width\": {\n            path: \"fixedWidthGutter\"\n        },\n        \"Show Print Margin\": [{\n            path: \"showPrintMargin\"\n        }, {\n            type: \"number\",\n            path: \"printMarginColumn\"\n        }],\n        \"Indented Soft Wrap\": {\n            path: \"indentedSoftWrap\"\n        },\n        \"Highlight selected word\": {\n            path: \"highlightSelectedWord\"\n        },\n        \"Fade Fold Widgets\": {\n            path: \"fadeFoldWidgets\"\n        },\n        \"Use textarea for IME\": {\n            path: \"useTextareaForIME\"\n        },\n        \"Merge Undo Deltas\": {\n            path: \"mergeUndoDeltas\",\n            items: [\n               { caption : \"Always\",  value : \"always\" },\n               { caption : \"Never\",   value : \"false\" },\n               { caption : \"Timed\",   value : \"true\" }\n            ]\n        },\n        \"Elastic Tabstops\": {\n            path: \"useElasticTabstops\"\n        },\n        \"Incremental Search\": {\n            path: \"useIncrementalSearch\"\n        },\n        \"Read-only\": {\n            path: \"readOnly\"\n        },\n        \"Copy without selection\": {\n            path: \"copyWithEmptySelection\"\n        },\n        \"Live Autocompletion\": {\n            path: \"enableLiveAutocompletion\"\n        }\n    }\n};\n\n\nvar OptionPanel = function(editor, element) {\n    this.editor = editor;\n    this.container = element || document.createElement(\"div\");\n    this.groups = [];\n    this.options = {};\n};\n\n(function() {\n    \n    oop.implement(this, EventEmitter);\n    \n    this.add = function(config) {\n        if (config.Main)\n            oop.mixin(optionGroups.Main, config.Main);\n        if (config.More)\n            oop.mixin(optionGroups.More, config.More);\n    };\n    \n    this.render = function() {\n        this.container.innerHTML = \"\";\n        buildDom([\"table\", {id: \"controls\"}, \n            this.renderOptionGroup(optionGroups.Main),\n            [\"tr\", null, [\"td\", {colspan: 2},\n                [\"table\", {id: \"more-controls\"}, \n                    this.renderOptionGroup(optionGroups.More)\n                ]\n            ]]\n        ], this.container);\n    };\n    \n    this.renderOptionGroup = function(group) {\n        return Object.keys(group).map(function(key, i) {\n            var item = group[key];\n            if (!item.position)\n                item.position = i / 10000;\n            if (!item.label)\n                item.label = key;\n            return item;\n        }).sort(function(a, b) {\n            return a.position - b.position;\n        }).map(function(item) {\n            return this.renderOption(item.label, item);\n        }, this);\n    };\n    \n    this.renderOptionControl = function(key, option) {\n        var self = this;\n        if (Array.isArray(option)) {\n            return option.map(function(x) {\n                return self.renderOptionControl(key, x);\n            });\n        }\n        var control;\n        \n        var value = self.getOption(option);\n        \n        if (option.values && option.type != \"checkbox\") {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            option.items = option.values.map(function(v) {\n                return { value: v, name: v };\n            });\n        }\n        \n        if (option.type == \"buttonBar\") {\n            control = [\"div\", option.items.map(function(item) {\n                return [\"button\", { \n                    value: item.value, \n                    ace_selected_button: value == item.value, \n                    onclick: function() {\n                        self.setOption(option, item.value);\n                        var nodes = this.parentNode.querySelectorAll(\"[ace_selected_button]\");\n                        for (var i = 0; i < nodes.length; i++) {\n                            nodes[i].removeAttribute(\"ace_selected_button\");\n                        }\n                        this.setAttribute(\"ace_selected_button\", true);\n                    } \n                }, item.desc || item.caption || item.name];\n            })];\n        } else if (option.type == \"number\") {\n            control = [\"input\", {type: \"number\", value: value || option.defaultValue, style:\"width:3em\", oninput: function() {\n                self.setOption(option, parseInt(this.value));\n            }}];\n            if (option.defaults) {\n                control = [control, option.defaults.map(function(item) {\n                    return [\"button\", {onclick: function() {\n                        var input = this.parentNode.firstChild;\n                        input.value = item.value;\n                        input.oninput();\n                    }}, item.caption];\n                })];\n            }\n        } else if (option.items) {\n            var buildItems = function(items) {\n                return items.map(function(item) {\n                    return [\"option\", { value: item.value || item.name }, item.desc || item.caption || item.name];\n                });\n            };\n            \n            var items = Array.isArray(option.items) \n                ? buildItems(option.items)\n                : Object.keys(option.items).map(function(key) {\n                    return [\"optgroup\", {\"label\": key}, buildItems(option.items[key])];\n                });\n            control = [\"select\", { id: key, value: value, onchange: function() {\n                self.setOption(option, this.value);\n            } }, items];\n        } else {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            if (option.values) value = value == option.values[1];\n            control = [\"input\", { type: \"checkbox\", id: key, checked: value || null, onchange: function() {\n                var value = this.checked;\n                if (option.values) value = option.values[value ? 1 : 0];\n                self.setOption(option, value);\n            }}];\n            if (option.type == \"checkedNumber\") {\n                control = [control, []];\n            }\n        }\n        return control;\n    };\n    \n    this.renderOption = function(key, option) {\n        if (option.path && !option.onchange && !this.editor.$options[option.path])\n            return;\n        this.options[option.path] = option;\n        var safeKey = \"-\" + option.path;\n        var control = this.renderOptionControl(safeKey, option);\n        return [\"tr\", {class: \"ace_optionsMenuEntry\"}, [\"td\",\n            [\"label\", {for: safeKey}, key]\n        ], [\"td\", control]];\n    };\n    \n    this.setOption = function(option, value) {\n        if (typeof option == \"string\")\n            option = this.options[option];\n        if (value == \"false\") value = false;\n        if (value == \"true\") value = true;\n        if (value == \"null\") value = null;\n        if (value == \"undefined\") value = undefined;\n        if (typeof value == \"string\" && parseFloat(value).toString() == value)\n            value = parseFloat(value);\n        if (option.onchange)\n            option.onchange(value);\n        else if (option.path)\n            this.editor.setOption(option.path, value);\n        this._signal(\"setOption\", {name: option.path, value: value});\n    };\n    \n    this.getOption = function(option) {\n        if (option.getValue)\n            return option.getValue();\n        return this.editor.getOption(option.path);\n    };\n    \n}).call(OptionPanel.prototype);\n\nexports.OptionPanel = OptionPanel;\n\n});                (function() {\n                    window.require([\"ace/ext/options\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-rtl.js",
    "content": "define(\"ace/ext/rtl\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"ace/lib/dom\");\nvar lang = require(\"ace/lib/lang\");\n\nvar commands = [{\n    name: \"leftToRight\",\n    bindKey: { win: \"Ctrl-Alt-Shift-L\", mac: \"Command-Alt-Shift-L\" },\n    exec: function(editor) {\n        editor.session.$bidiHandler.setRtlDirection(editor, false);\n    },\n    readOnly: true\n}, {\n    name: \"rightToLeft\",\n    bindKey: { win: \"Ctrl-Alt-Shift-R\",  mac: \"Command-Alt-Shift-R\" },\n    exec: function(editor) {\n        editor.session.$bidiHandler.setRtlDirection(editor, true);\n    },\n    readOnly: true\n}];\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    rtlText: {\n        set: function(val) {\n            if (val) {\n                this.on(\"change\", onChange);\n                this.on(\"changeSelection\", onChangeSelection);\n                this.renderer.on(\"afterRender\", updateLineDirection);\n                this.commands.on(\"exec\", onCommandEmitted);\n                this.commands.addCommands(commands);\n            } else {\n                this.off(\"change\", onChange);\n                this.off(\"changeSelection\", onChangeSelection);\n                this.renderer.off(\"afterRender\", updateLineDirection);\n                this.commands.off(\"exec\", onCommandEmitted);\n                this.commands.removeCommands(commands);\n                clearTextLayer(this.renderer);\n            }\n            this.renderer.updateFull();\n        }\n    },\n    rtl: {\n        set: function(val) {\n            this.session.$bidiHandler.$isRtl = val;\n            if (val) {\n                this.setOption(\"rtlText\", false);\n                this.renderer.on(\"afterRender\", updateLineDirection);\n                this.session.$bidiHandler.seenBidi = true;\n            } else {\n                this.renderer.off(\"afterRender\", updateLineDirection);\n                clearTextLayer(this.renderer);\n            }\n            this.renderer.updateFull();\n        }\n    }\n});\nfunction onChangeSelection(e, editor) {\n    var lead = editor.getSelection().lead;\n    if (editor.session.$bidiHandler.isRtlLine(lead.row)) {\n        if (lead.column === 0) {\n            if (editor.session.$bidiHandler.isMoveLeftOperation && lead.row > 0) {\n                editor.getSelection().moveCursorTo(lead.row - 1, editor.session.getLine(lead.row - 1).length);\n            } else {\n                if (editor.getSelection().isEmpty())\n                    lead.column += 1;\n                else\n                    lead.setPosition(lead.row, lead.column + 1);\n            }\n        }\n    }\n}\n\nfunction onCommandEmitted(commadEvent) {\n    commadEvent.editor.session.$bidiHandler.isMoveLeftOperation = /gotoleft|selectleft|backspace|removewordleft/.test(commadEvent.command.name);\n}\nfunction onChange(delta, editor) {\n    var session = editor.session;\n    session.$bidiHandler.currentRow = null;\n    if (session.$bidiHandler.isRtlLine(delta.start.row) && delta.action === 'insert' && delta.lines.length > 1) {\n        for (var row = delta.start.row; row < delta.end.row; row++) {\n            if (session.getLine(row + 1).charAt(0) !== session.$bidiHandler.RLE)\n                session.doc.$lines[row + 1] = session.$bidiHandler.RLE + session.getLine(row + 1);\n        }\n    }\n}\n\nfunction updateLineDirection(e, renderer) {\n    var session = renderer.session;\n    var $bidiHandler = session.$bidiHandler;\n    var cells = renderer.$textLayer.$lines.cells;\n    var width = renderer.layerConfig.width - renderer.layerConfig.padding + \"px\";\n    cells.forEach(function(cell) {\n        var style = cell.element.style;\n        if ($bidiHandler && $bidiHandler.isRtlLine(cell.row)) {\n            style.direction = \"rtl\";\n            style.textAlign = \"right\";\n            style.width = width;\n        } else {\n            style.direction = \"\";\n            style.textAlign = \"\";\n            style.width = \"\";\n        }\n    });\n}\n\nfunction clearTextLayer(renderer) {\n    var lines = renderer.$textLayer.$lines;\n    lines.cells.forEach(clear);\n    lines.cellCache.forEach(clear);\n    function clear(cell) {\n        var style = cell.element.style;\n        style.direction = style.textAlign = style.width = \"\";\n    }\n}\n\n});                (function() {\n                    window.require([\"ace/ext/rtl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-searchbox.js",
    "content": "define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar searchboxCss = \"\\\n.ace_search {\\\nbackground-color: #ddd;\\\ncolor: #666;\\\nborder: 1px solid #cbcbcb;\\\nborder-top: 0 none;\\\noverflow: hidden;\\\nmargin: 0;\\\npadding: 4px 6px 0 4px;\\\nposition: absolute;\\\ntop: 0;\\\nz-index: 99;\\\nwhite-space: normal;\\\n}\\\n.ace_search.left {\\\nborder-left: 0 none;\\\nborder-radius: 0px 0px 5px 0px;\\\nleft: 0;\\\n}\\\n.ace_search.right {\\\nborder-radius: 0px 0px 0px 5px;\\\nborder-right: 0 none;\\\nright: 0;\\\n}\\\n.ace_search_form, .ace_replace_form {\\\nmargin: 0 20px 4px 0;\\\noverflow: hidden;\\\nline-height: 1.9;\\\n}\\\n.ace_replace_form {\\\nmargin-right: 0;\\\n}\\\n.ace_search_form.ace_nomatch {\\\noutline: 1px solid red;\\\n}\\\n.ace_search_field {\\\nborder-radius: 3px 0 0 3px;\\\nbackground-color: white;\\\ncolor: black;\\\nborder: 1px solid #cbcbcb;\\\nborder-right: 0 none;\\\noutline: 0;\\\npadding: 0;\\\nfont-size: inherit;\\\nmargin: 0;\\\nline-height: inherit;\\\npadding: 0 6px;\\\nmin-width: 17em;\\\nvertical-align: top;\\\nmin-height: 1.8em;\\\nbox-sizing: content-box;\\\n}\\\n.ace_searchbtn {\\\nborder: 1px solid #cbcbcb;\\\nline-height: inherit;\\\ndisplay: inline-block;\\\npadding: 0 6px;\\\nbackground: #fff;\\\nborder-right: 0 none;\\\nborder-left: 1px solid #dcdcdc;\\\ncursor: pointer;\\\nmargin: 0;\\\nposition: relative;\\\ncolor: #666;\\\n}\\\n.ace_searchbtn:last-child {\\\nborder-radius: 0 3px 3px 0;\\\nborder-right: 1px solid #cbcbcb;\\\n}\\\n.ace_searchbtn:disabled {\\\nbackground: none;\\\ncursor: default;\\\n}\\\n.ace_searchbtn:hover {\\\nbackground-color: #eef1f6;\\\n}\\\n.ace_searchbtn.prev, .ace_searchbtn.next {\\\npadding: 0px 0.7em\\\n}\\\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\\\ncontent: \\\"\\\";\\\nborder: solid 2px #888;\\\nwidth: 0.5em;\\\nheight: 0.5em;\\\nborder-width:  2px 0 0 2px;\\\ndisplay:inline-block;\\\ntransform: rotate(-45deg);\\\n}\\\n.ace_searchbtn.next:after {\\\nborder-width: 0 2px 2px 0 ;\\\n}\\\n.ace_searchbtn_close {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\nborder-radius: 50%;\\\nborder: 0 none;\\\ncolor: #656565;\\\ncursor: pointer;\\\nfont: 16px/16px Arial;\\\npadding: 0;\\\nheight: 14px;\\\nwidth: 14px;\\\ntop: 9px;\\\nright: 7px;\\\nposition: absolute;\\\n}\\\n.ace_searchbtn_close:hover {\\\nbackground-color: #656565;\\\nbackground-position: 50% 100%;\\\ncolor: white;\\\n}\\\n.ace_button {\\\nmargin-left: 2px;\\\ncursor: pointer;\\\n-webkit-user-select: none;\\\n-moz-user-select: none;\\\n-o-user-select: none;\\\n-ms-user-select: none;\\\nuser-select: none;\\\noverflow: hidden;\\\nopacity: 0.7;\\\nborder: 1px solid rgba(100,100,100,0.23);\\\npadding: 1px;\\\nbox-sizing:    border-box!important;\\\ncolor: black;\\\n}\\\n.ace_button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_button.checked {\\\nborder-color: #3399ff;\\\nopacity:1;\\\n}\\\n.ace_search_options{\\\nmargin-bottom: 3px;\\\ntext-align: right;\\\n-webkit-user-select: none;\\\n-moz-user-select: none;\\\n-o-user-select: none;\\\n-ms-user-select: none;\\\nuser-select: none;\\\nclear: both;\\\n}\\\n.ace_search_counter {\\\nfloat: left;\\\nfont-family: arial;\\\npadding: 0 8px;\\\n}\";\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar keyUtil = require(\"../lib/keys\");\n\nvar MAX_COUNT = 999;\n\ndom.importCssString(searchboxCss, \"ace_searchbox\");\n\nvar SearchBox = function(editor, range, showReplaceForm) {\n    var div = dom.createElement(\"div\");\n    dom.buildDom([\"div\", {class:\"ace_search right\"},\n        [\"span\", {action: \"hide\", class: \"ace_searchbtn_close\"}],\n        [\"div\", {class: \"ace_search_form\"},\n            [\"input\", {class: \"ace_search_field\", placeholder: \"Search for\", spellcheck: \"false\"}],\n            [\"span\", {action: \"findPrev\", class: \"ace_searchbtn prev\"}, \"\\u200b\"],\n            [\"span\", {action: \"findNext\", class: \"ace_searchbtn next\"}, \"\\u200b\"],\n            [\"span\", {action: \"findAll\", class: \"ace_searchbtn\", title: \"Alt-Enter\"}, \"All\"]\n        ],\n        [\"div\", {class: \"ace_replace_form\"},\n            [\"input\", {class: \"ace_search_field\", placeholder: \"Replace with\", spellcheck: \"false\"}],\n            [\"span\", {action: \"replaceAndFindNext\", class: \"ace_searchbtn\"}, \"Replace\"],\n            [\"span\", {action: \"replaceAll\", class: \"ace_searchbtn\"}, \"All\"]\n        ],\n        [\"div\", {class: \"ace_search_options\"},\n            [\"span\", {action: \"toggleReplace\", class: \"ace_button\", title: \"Toggle Replace mode\",\n                style: \"float:left;margin-top:-2px;padding:0 5px;\"}, \"+\"],\n            [\"span\", {class: \"ace_search_counter\"}],\n            [\"span\", {action: \"toggleRegexpMode\", class: \"ace_button\", title: \"RegExp Search\"}, \".*\"],\n            [\"span\", {action: \"toggleCaseSensitive\", class: \"ace_button\", title: \"CaseSensitive Search\"}, \"Aa\"],\n            [\"span\", {action: \"toggleWholeWords\", class: \"ace_button\", title: \"Whole Word Search\"}, \"\\\\b\"],\n            [\"span\", {action: \"searchInSelection\", class: \"ace_button\", title: \"Search In Selection\"}, \"S\"]\n        ]\n    ], div);\n    this.element = div.firstChild;\n    \n    this.setSession = this.setSession.bind(this);\n\n    this.$init();\n    this.setEditor(editor);\n    dom.importCssString(searchboxCss, \"ace_searchbox\", editor.container);\n};\n\n(function() {\n    this.setEditor = function(editor) {\n        editor.searchBox = this;\n        editor.renderer.scroller.appendChild(this.element);\n        this.editor = editor;\n    };\n    \n    this.setSession = function(e) {\n        this.searchRange = null;\n        this.$syncOptions(true);\n    };\n\n    this.$initElements = function(sb) {\n        this.searchBox = sb.querySelector(\".ace_search_form\");\n        this.replaceBox = sb.querySelector(\".ace_replace_form\");\n        this.searchOption = sb.querySelector(\"[action=searchInSelection]\");\n        this.replaceOption = sb.querySelector(\"[action=toggleReplace]\");\n        this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\n        this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\n        this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\n        this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\n        this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\n        this.searchCounter = sb.querySelector(\".ace_search_counter\");\n    };\n    \n    this.$init = function() {\n        var sb = this.element;\n        \n        this.$initElements(sb);\n        \n        var _this = this;\n        event.addListener(sb, \"mousedown\", function(e) {\n            setTimeout(function(){\n                _this.activeInput.focus();\n            }, 0);\n            event.stopPropagation(e);\n        });\n        event.addListener(sb, \"click\", function(e) {\n            var t = e.target || e.srcElement;\n            var action = t.getAttribute(\"action\");\n            if (action && _this[action])\n                _this[action]();\n            else if (_this.$searchBarKb.commands[action])\n                _this.$searchBarKb.commands[action].exec(_this);\n            event.stopPropagation(e);\n        });\n\n        event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\n            var keyString = keyUtil.keyCodeToString(keyCode);\n            var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\n            if (command && command.exec) {\n                command.exec(_this);\n                event.stopEvent(e);\n            }\n        });\n\n        this.$onChange = lang.delayedCall(function() {\n            _this.find(false, false);\n        });\n\n        event.addListener(this.searchInput, \"input\", function() {\n            _this.$onChange.schedule(20);\n        });\n        event.addListener(this.searchInput, \"focus\", function() {\n            _this.activeInput = _this.searchInput;\n            _this.searchInput.value && _this.highlight();\n        });\n        event.addListener(this.replaceInput, \"focus\", function() {\n            _this.activeInput = _this.replaceInput;\n            _this.searchInput.value && _this.highlight();\n        });\n    };\n    this.$closeSearchBarKb = new HashHandler([{\n        bindKey: \"Esc\",\n        name: \"closeSearchBar\",\n        exec: function(editor) {\n            editor.searchBox.hide();\n        }\n    }]);\n    this.$searchBarKb = new HashHandler();\n    this.$searchBarKb.bindKeys({\n        \"Ctrl-f|Command-f\": function(sb) {\n            var isReplace = sb.isReplace = !sb.isReplace;\n            sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\n            sb.replaceOption.checked = false;\n            sb.$syncOptions();\n            sb.searchInput.focus();\n        },\n        \"Ctrl-H|Command-Option-F\": function(sb) {\n            if (sb.editor.getReadOnly())\n                return;\n            sb.replaceOption.checked = true;\n            sb.$syncOptions();\n            sb.replaceInput.focus();\n        },\n        \"Ctrl-G|Command-G\": function(sb) {\n            sb.findNext();\n        },\n        \"Ctrl-Shift-G|Command-Shift-G\": function(sb) {\n            sb.findPrev();\n        },\n        \"esc\": function(sb) {\n            setTimeout(function() { sb.hide();});\n        },\n        \"Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findNext();\n        },\n        \"Shift-Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findPrev();\n        },\n        \"Alt-Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replaceAll();\n            sb.findAll();\n        },\n        \"Tab\": function(sb) {\n            (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\n        }\n    });\n\n    this.$searchBarKb.addCommands([{\n        name: \"toggleRegexpMode\",\n        bindKey: {win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"},\n        exec: function(sb) {\n            sb.regExpOption.checked = !sb.regExpOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleCaseSensitive\",\n        bindKey: {win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"},\n        exec: function(sb) {\n            sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleWholeWords\",\n        bindKey: {win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"},\n        exec: function(sb) {\n            sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleReplace\",\n        exec: function(sb) {\n            sb.replaceOption.checked = !sb.replaceOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"searchInSelection\",\n        exec: function(sb) {\n            sb.searchOption.checked = !sb.searchRange;\n            sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());\n            sb.$syncOptions();\n        }\n    }]);\n    \n    this.setSearchRange = function(range) {\n        this.searchRange = range;\n        if (range) {\n            this.searchRangeMarker = this.editor.session.addMarker(range, \"ace_active-line\");\n        } else if (this.searchRangeMarker) {\n            this.editor.session.removeMarker(this.searchRangeMarker);\n            this.searchRangeMarker = null;\n        }\n    };\n\n    this.$syncOptions = function(preventScroll) {\n        dom.setCssClass(this.replaceOption, \"checked\", this.searchRange);\n        dom.setCssClass(this.searchOption, \"checked\", this.searchOption.checked);\n        this.replaceOption.textContent = this.replaceOption.checked ? \"-\" : \"+\";\n        dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\n        dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\n        dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\n        var readOnly = this.editor.getReadOnly();\n        this.replaceOption.style.display = readOnly ? \"none\" : \"\";\n        this.replaceBox.style.display = this.replaceOption.checked && !readOnly ? \"\" : \"none\";\n        this.find(false, false, preventScroll);\n    };\n\n    this.highlight = function(re) {\n        this.editor.session.highlight(re || this.editor.$search.$options.re);\n        this.editor.renderer.updateBackMarkers();\n    };\n    this.find = function(skipCurrent, backwards, preventScroll) {\n        var range = this.editor.find(this.searchInput.value, {\n            skipCurrent: skipCurrent,\n            backwards: backwards,\n            wrap: true,\n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked,\n            preventScroll: preventScroll,\n            range: this.searchRange\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.updateCounter();\n    };\n    this.updateCounter = function() {\n        var editor = this.editor;\n        var regex = editor.$search.$options.re;\n        var all = 0;\n        var before = 0;\n        if (regex) {\n            var value = this.searchRange\n                ? editor.session.getTextRange(this.searchRange)\n                : editor.getValue();\n            \n            var offset = editor.session.doc.positionToIndex(editor.selection.anchor);\n            if (this.searchRange)\n                offset -= editor.session.doc.positionToIndex(this.searchRange.start);\n                \n            var last = regex.lastIndex = 0;\n            var m;\n            while ((m = regex.exec(value))) {\n                all++;\n                last = m.index;\n                if (last <= offset)\n                    before++;\n                if (all > MAX_COUNT)\n                    break;\n                if (!m[0]) {\n                    regex.lastIndex = last += 1;\n                    if (last >= value.length)\n                        break;\n                }\n            }\n        }\n        this.searchCounter.textContent = before + \" of \" + (all > MAX_COUNT ? MAX_COUNT + \"+\" : all);\n    };\n    this.findNext = function() {\n        this.find(true, false);\n    };\n    this.findPrev = function() {\n        this.find(true, true);\n    };\n    this.findAll = function(){\n        var range = this.editor.findAll(this.searchInput.value, {            \n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.hide();\n    };\n    this.replace = function() {\n        if (!this.editor.getReadOnly())\n            this.editor.replace(this.replaceInput.value);\n    };    \n    this.replaceAndFindNext = function() {\n        if (!this.editor.getReadOnly()) {\n            this.editor.replace(this.replaceInput.value);\n            this.findNext();\n        }\n    };\n    this.replaceAll = function() {\n        if (!this.editor.getReadOnly())\n            this.editor.replaceAll(this.replaceInput.value);\n    };\n\n    this.hide = function() {\n        this.active = false;\n        this.setSearchRange(null);\n        this.editor.off(\"changeSession\", this.setSession);\n        \n        this.element.style.display = \"none\";\n        this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\n        this.editor.focus();\n    };\n    this.show = function(value, isReplace) {\n        this.active = true;\n        this.editor.on(\"changeSession\", this.setSession);\n        this.element.style.display = \"\";\n        this.replaceOption.checked = isReplace;\n        \n        if (value)\n            this.searchInput.value = value;\n        \n        this.searchInput.focus();\n        this.searchInput.select();\n\n        this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\n        \n        this.$syncOptions(true);\n    };\n\n    this.isFocused = function() {\n        var el = document.activeElement;\n        return el == this.searchInput || el == this.replaceInput;\n    };\n}).call(SearchBox.prototype);\n\nexports.SearchBox = SearchBox;\n\nexports.Search = function(editor, isReplace) {\n    var sb = editor.searchBox || new SearchBox(editor);\n    sb.show(editor.session.getTextRange(), isReplace);\n};\n\n});                (function() {\n                    window.require([\"ace/ext/searchbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-settings_menu.js",
    "content": "define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = \"#ace_settingsmenu, #kbshortcutmenu {\\\nbackground-color: #F7F7F7;\\\ncolor: black;\\\nbox-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\\npadding: 1em 0.5em 2em 1em;\\\noverflow: auto;\\\nposition: absolute;\\\nmargin: 0;\\\nbottom: 0;\\\nright: 0;\\\ntop: 0;\\\nz-index: 9991;\\\ncursor: default;\\\n}\\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\\nbox-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\\nbackground-color: rgba(255, 255, 255, 0.6);\\\ncolor: black;\\\n}\\\n.ace_optionsMenuEntry:hover {\\\nbackground-color: rgba(100, 100, 100, 0.1);\\\ntransition: all 0.3s\\\n}\\\n.ace_closeButton {\\\nbackground: rgba(245, 146, 146, 0.5);\\\nborder: 1px solid #F48A8A;\\\nborder-radius: 50%;\\\npadding: 7px;\\\nposition: absolute;\\\nright: -8px;\\\ntop: -8px;\\\nz-index: 100000;\\\n}\\\n.ace_closeButton{\\\nbackground: rgba(245, 146, 146, 0.9);\\\n}\\\n.ace_optionsMenuKey {\\\ncolor: darkslateblue;\\\nfont-weight: bold;\\\n}\\\n.ace_optionsMenuCommand {\\\ncolor: darkcyan;\\\nfont-weight: normal;\\\n}\\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\\nvertical-align: middle;\\\n}\\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\\nbackground: #e7e7e7;\\\nbox-shadow: 1px 0px 2px 0px #adadad inset;\\\nborder-color: #adadad;\\\n}\\\n.ace_optionsMenuEntry button {\\\nbackground: white;\\\nborder: 1px solid lightgray;\\\nmargin: 0px;\\\n}\\\n.ace_optionsMenuEntry button:hover{\\\nbackground: #f0f0f0;\\\n}\";\ndom.importCssString(cssText);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {\n    top = top ? 'top: ' + top + ';' : '';\n    bottom = bottom ? 'bottom: ' + bottom + ';' : '';\n    right = right ? 'right: ' + right + ';' : '';\n    left = left ? 'left: ' + left + ';' : '';\n\n    var closer = document.createElement('div');\n    var contentContainer = document.createElement('div');\n\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            closer.click();\n        }\n    }\n\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        'background-color: rgba(0, 0, 0, 0.3);';\n    closer.addEventListener('click', function() {\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        editor.focus();\n        closer = null;\n    });\n    document.addEventListener('keydown', documentEscListener);\n\n    contentContainer.style.cssText = top + right + bottom + left;\n    contentContainer.addEventListener('click', function(e) {\n        e.stopPropagation();\n    });\n\n    var wrapper = dom.createElement(\"div\");\n    wrapper.style.position = \"relative\";\n    \n    var closeButton = dom.createElement(\"div\");\n    closeButton.className = \"ace_closeButton\";\n    closeButton.addEventListener('click', function() {\n        closer.click();\n    });\n    \n    wrapper.appendChild(closeButton);\n    contentContainer.appendChild(wrapper);\n    \n    contentContainer.appendChild(contentElement);\n    closer.appendChild(contentContainer);\n    document.body.appendChild(closer);\n    editor.blur();\n};\n\n});\n\ndefine(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\n\nvar Mode = function(name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function(a, b){\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    } else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n\n    this.extRe = new RegExp(re, \"gi\");\n};\n\nMode.prototype.supportsFile = function(filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP:        [\"abap\"],\n    ABC:         [\"abc\"],\n    ActionScript:[\"as\"],\n    ADA:         [\"ada|adb\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    AsciiDoc:    [\"asciidoc|adoc\"],\n    ASL:         [\"dsl|asl\"],\n    Assembly_x86:[\"asm|a\"],\n    AutoHotKey:  [\"ahk\"],\n    Apex:        [\"apex|cls|trigger|tgr\"],\n    BatchFile:   [\"bat|cmd\"],\n    Bro:         [\"bro\"],\n    C_Cpp:       [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search:    [\"c9search_results\"],\n    Cirru:       [\"cirru|cr\"],\n    Clojure:     [\"clj|cljs\"],\n    Cobol:       [\"CBL|COB\"],\n    coffee:      [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion:  [\"cfm\"],\n    CSharp:      [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS:         [\"css\"],\n    Curly:       [\"curly\"],\n    D:           [\"d|di\"],\n    Dart:        [\"dart\"],\n    Diff:        [\"diff|patch\"],\n    Dockerfile:  [\"^Dockerfile\"],\n    Dot:         [\"dot\"],\n    Drools:      [\"drl\"],\n    Edifact:     [\"edi\"],\n    Eiffel:      [\"e|ge\"],\n    EJS:         [\"ejs\"],\n    Elixir:      [\"ex|exs\"],\n    Elm:         [\"elm\"],\n    Erlang:      [\"erl|hrl\"],\n    Forth:       [\"frt|fs|ldr|fth|4th\"],\n    Fortran:     [\"f|f90\"],\n    FSharp:      [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL:         [\"fsl\"],\n    FTL:         [\"ftl\"],\n    Gcode:       [\"gcode\"],\n    Gherkin:     [\"feature\"],\n    Gitignore:   [\"^.gitignore\"],\n    Glsl:        [\"glsl|frag|vert\"],\n    Gobstones:   [\"gbs\"],\n    golang:      [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy:      [\"groovy\"],\n    HAML:        [\"haml\"],\n    Handlebars:  [\"hbs|handlebars|tpl|mustache\"],\n    Haskell:     [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe:        [\"hx\"],\n    Hjson:       [\"hjson\"],\n    HTML:        [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby:   [\"erb|rhtml|html.erb\"],\n    INI:         [\"ini|conf|cfg|prefs\"],\n    Io:          [\"io\"],\n    Jack:        [\"jack\"],\n    Jade:        [\"jade|pug\"],\n    Java:        [\"java\"],\n    JavaScript:  [\"js|jsm|jsx\"],\n    JSON:        [\"json\"],\n    JSONiq:      [\"jq\"],\n    JSP:         [\"jsp\"],\n    JSSM:        [\"jssm|jssm_state\"],\n    JSX:         [\"jsx\"],\n    Julia:       [\"jl\"],\n    Kotlin:      [\"kt|kts\"],\n    LaTeX:       [\"tex|latex|ltx|bib\"],\n    LESS:        [\"less\"],\n    Liquid:      [\"liquid\"],\n    Lisp:        [\"lisp\"],\n    LiveScript:  [\"ls\"],\n    LogiQL:      [\"logic|lql\"],\n    LSL:         [\"lsl\"],\n    Lua:         [\"lua\"],\n    LuaPage:     [\"lp\"],\n    Lucene:      [\"lucene\"],\n    Makefile:    [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown:    [\"md|markdown\"],\n    Mask:        [\"mask\"],\n    MATLAB:      [\"matlab\"],\n    Maze:        [\"mz\"],\n    MEL:         [\"mel\"],\n    MIXAL:       [\"mixal\"],\n    MUSHCode:    [\"mc|mush\"],\n    MySQL:       [\"mysql\"],\n    Nix:         [\"nix\"],\n    NSIS:        [\"nsi|nsh\"],\n    ObjectiveC:  [\"m|mm\"],\n    OCaml:       [\"ml|mli\"],\n    Pascal:      [\"pas|p\"],\n    Perl:        [\"pl|pm\"],\n    Perl6:       [\"p6|pl6|pm6\"],\n    pgSQL:       [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP:         [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Puppet:      [\"epp|pp\"],\n    Pig:         [\"pig\"],\n    Powershell:  [\"ps1\"],\n    Praat:       [\"praat|praatscript|psc|proc\"],\n    Prolog:      [\"plg|prolog\"],\n    Properties:  [\"properties\"],\n    Protobuf:    [\"proto\"],\n    Python:      [\"py\"],\n    R:           [\"r\"],\n    Razor:       [\"cshtml|asp\"],\n    RDoc:        [\"Rd\"],\n    Red:         [\"red|reds\"],\n    RHTML:       [\"Rhtml\"],\n    RST:         [\"rst\"],\n    Ruby:        [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust:        [\"rs\"],\n    SASS:        [\"sass\"],\n    SCAD:        [\"scad\"],\n    Scala:       [\"scala\"],\n    Scheme:      [\"scm|sm|rkt|oak|scheme\"],\n    SCSS:        [\"scss\"],\n    SH:          [\"sh|bash|^.bashrc\"],\n    SJS:         [\"sjs\"],\n    Slim:        [\"slim|skim\"],\n    Smarty:      [\"smarty|tpl\"],\n    snippets:    [\"snippets\"],\n    Soy_Template:[\"soy\"],\n    Space:       [\"space\"],\n    SQL:         [\"sql\"],\n    SQLServer:   [\"sqlserver\"],\n    Stylus:      [\"styl|stylus\"],\n    SVG:         [\"svg\"],\n    Swift:       [\"swift\"],\n    Tcl:         [\"tcl\"],\n    Terraform:   [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex:         [\"tex\"],\n    Text:        [\"txt\"],\n    Textile:     [\"textile\"],\n    Toml:        [\"toml\"],\n    TSX:         [\"tsx\"],\n    Twig:        [\"latte|twig|swig\"],\n    Typescript:  [\"ts|typescript|str\"],\n    Vala:        [\"vala\"],\n    VBScript:    [\"vbs|vb\"],\n    Velocity:    [\"vm\"],\n    Verilog:     [\"v|vh|sv|svh\"],\n    VHDL:        [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok:      [\"wlk|wpgm|wtest\"],\n    XML:         [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery:      [\"xq\"],\n    YAML:        [\"yaml|yml\"],\n    Django:      [\"html\"]\n};\n\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\n\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n\ndefine(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar themeData = [\n    [\"Chrome\"         ],\n    [\"Clouds\"         ],\n    [\"Crimson Editor\" ],\n    [\"Dawn\"           ],\n    [\"Dreamweaver\"    ],\n    [\"Eclipse\"        ],\n    [\"GitHub\"         ],\n    [\"IPlastic\"       ],\n    [\"Solarized Light\"],\n    [\"TextMate\"       ],\n    [\"Tomorrow\"       ],\n    [\"XCode\"          ],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\"           ,\"sqlserver\"               , \"light\"],\n    [\"Ambiance\"             ,\"ambiance\"                ,  \"dark\"],\n    [\"Chaos\"                ,\"chaos\"                   ,  \"dark\"],\n    [\"Clouds Midnight\"      ,\"clouds_midnight\"         ,  \"dark\"],\n    [\"Dracula\"              ,\"\"                        ,  \"dark\"],\n    [\"Cobalt\"               ,\"cobalt\"                  ,  \"dark\"],\n    [\"Gruvbox\"              ,\"gruvbox\"                 ,  \"dark\"],\n    [\"Green on Black\"       ,\"gob\"                     ,  \"dark\"],\n    [\"idle Fingers\"         ,\"idle_fingers\"            ,  \"dark\"],\n    [\"krTheme\"              ,\"kr_theme\"                ,  \"dark\"],\n    [\"Merbivore\"            ,\"merbivore\"               ,  \"dark\"],\n    [\"Merbivore Soft\"       ,\"merbivore_soft\"          ,  \"dark\"],\n    [\"Mono Industrial\"      ,\"mono_industrial\"         ,  \"dark\"],\n    [\"Monokai\"              ,\"monokai\"                 ,  \"dark\"],\n    [\"Pastel on dark\"       ,\"pastel_on_dark\"          ,  \"dark\"],\n    [\"Solarized Dark\"       ,\"solarized_dark\"          ,  \"dark\"],\n    [\"Terminal\"             ,\"terminal\"                ,  \"dark\"],\n    [\"Tomorrow Night\"       ,\"tomorrow_night\"          ,  \"dark\"],\n    [\"Tomorrow Night Blue\"  ,\"tomorrow_night_blue\"     ,  \"dark\"],\n    [\"Tomorrow Night Bright\",\"tomorrow_night_bright\"   ,  \"dark\"],\n    [\"Tomorrow Night 80s\"   ,\"tomorrow_night_eighties\" ,  \"dark\"],\n    [\"Twilight\"             ,\"twilight\"                ,  \"dark\"],\n    [\"Vibrant Ink\"          ,\"vibrant_ink\"             ,  \"dark\"]\n];\n\n\nexports.themesByName = {};\nexports.themes = themeData.map(function(data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});\n\ndefine(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"], function(require, exports, module) {\n\"use strict\";\nvar overlayPage = require('./menu_tools/overlay_page').overlayPage;\n\n \nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar buildDom = dom.buildDom;\n\nvar modelist = require(\"./modelist\");\nvar themelist = require(\"./themelist\");\n\nvar themes = { Bright: [], Dark: [] };\nthemelist.themes.forEach(function(x) {\n    themes[x.isDark ? \"Dark\" : \"Bright\"].push({ caption: x.caption, value: x.theme });\n});\n\nvar modes = modelist.modes.map(function(x){ \n    return { caption: x.caption, value: x.mode }; \n});\n\n\nvar optionGroups = {\n    Main: {\n        Mode: {\n            path: \"mode\",\n            type: \"select\",\n            items: modes\n        },\n        Theme: {\n            path: \"theme\",\n            type: \"select\",\n            items: themes\n        },\n        \"Keybinding\": {\n            type: \"buttonBar\",\n            path: \"keyboardHandler\",\n            items: [\n                { caption : \"Ace\", value : null },\n                { caption : \"Vim\", value : \"ace/keyboard/vim\" },\n                { caption : \"Emacs\", value : \"ace/keyboard/emacs\" },\n                { caption : \"Sublime\", value : \"ace/keyboard/sublime\" }\n            ]\n        },\n        \"Font Size\": {\n            path: \"fontSize\",\n            type: \"number\",\n            defaultValue: 12,\n            defaults: [\n                {caption: \"12px\", value: 12},\n                {caption: \"24px\", value: 24}\n            ]\n        },\n        \"Soft Wrap\": {\n            type: \"buttonBar\",\n            path: \"wrap\",\n            items: [\n               { caption : \"Off\",  value : \"off\" },\n               { caption : \"View\", value : \"free\" },\n               { caption : \"margin\", value : \"printMargin\" },\n               { caption : \"40\",   value : \"40\" }\n            ]\n        },\n        \"Cursor Style\": {\n            path: \"cursorStyle\",\n            items: [\n               { caption : \"Ace\",    value : \"ace\" },\n               { caption : \"Slim\",   value : \"slim\" },\n               { caption : \"Smooth\", value : \"smooth\" },\n               { caption : \"Smooth And Slim\", value : \"smooth slim\" },\n               { caption : \"Wide\",   value : \"wide\" }\n            ]\n        },\n        \"Folding\": {\n            path: \"foldStyle\",\n            items: [\n                { caption : \"Manual\", value : \"manual\" },\n                { caption : \"Mark begin\", value : \"markbegin\" },\n                { caption : \"Mark begin and end\", value : \"markbeginend\" }\n            ]\n        },\n        \"Soft Tabs\": [{\n            path: \"useSoftTabs\"\n        }, {\n            path: \"tabSize\",\n            type: \"number\",\n            values: [2, 3, 4, 8, 16]\n        }],\n        \"Overscroll\": {\n            type: \"buttonBar\",\n            path: \"scrollPastEnd\",\n            items: [\n               { caption : \"None\",  value : 0 },\n               { caption : \"Half\",   value : 0.5 },\n               { caption : \"Full\",   value : 1 }\n            ]\n        }\n    },\n    More: {\n        \"Atomic soft tabs\": {\n            path: \"navigateWithinSoftTabs\"\n        },\n        \"Enable Behaviours\": {\n            path: \"behavioursEnabled\"\n        },\n        \"Full Line Selection\": {\n            type: \"checkbox\",\n            values: \"text|line\",\n            path: \"selectionStyle\"\n        },\n        \"Highlight Active Line\": {\n            path: \"highlightActiveLine\"\n        },\n        \"Show Invisibles\": {\n            path: \"showInvisibles\"\n        },\n        \"Show Indent Guides\": {\n            path: \"displayIndentGuides\"\n        },\n        \"Persistent Scrollbar\": [{\n            path: \"hScrollBarAlwaysVisible\"\n        }, {\n            path: \"vScrollBarAlwaysVisible\"\n        }],\n        \"Animate scrolling\": {\n            path: \"animatedScroll\"\n        },\n        \"Show Gutter\": {\n            path: \"showGutter\"\n        },\n        \"Show Line Numbers\": {\n            path: \"showLineNumbers\"\n        },\n        \"Relative Line Numbers\": {\n            path: \"relativeLineNumbers\"\n        },\n        \"Fixed Gutter Width\": {\n            path: \"fixedWidthGutter\"\n        },\n        \"Show Print Margin\": [{\n            path: \"showPrintMargin\"\n        }, {\n            type: \"number\",\n            path: \"printMarginColumn\"\n        }],\n        \"Indented Soft Wrap\": {\n            path: \"indentedSoftWrap\"\n        },\n        \"Highlight selected word\": {\n            path: \"highlightSelectedWord\"\n        },\n        \"Fade Fold Widgets\": {\n            path: \"fadeFoldWidgets\"\n        },\n        \"Use textarea for IME\": {\n            path: \"useTextareaForIME\"\n        },\n        \"Merge Undo Deltas\": {\n            path: \"mergeUndoDeltas\",\n            items: [\n               { caption : \"Always\",  value : \"always\" },\n               { caption : \"Never\",   value : \"false\" },\n               { caption : \"Timed\",   value : \"true\" }\n            ]\n        },\n        \"Elastic Tabstops\": {\n            path: \"useElasticTabstops\"\n        },\n        \"Incremental Search\": {\n            path: \"useIncrementalSearch\"\n        },\n        \"Read-only\": {\n            path: \"readOnly\"\n        },\n        \"Copy without selection\": {\n            path: \"copyWithEmptySelection\"\n        },\n        \"Live Autocompletion\": {\n            path: \"enableLiveAutocompletion\"\n        }\n    }\n};\n\n\nvar OptionPanel = function(editor, element) {\n    this.editor = editor;\n    this.container = element || document.createElement(\"div\");\n    this.groups = [];\n    this.options = {};\n};\n\n(function() {\n    \n    oop.implement(this, EventEmitter);\n    \n    this.add = function(config) {\n        if (config.Main)\n            oop.mixin(optionGroups.Main, config.Main);\n        if (config.More)\n            oop.mixin(optionGroups.More, config.More);\n    };\n    \n    this.render = function() {\n        this.container.innerHTML = \"\";\n        buildDom([\"table\", {id: \"controls\"}, \n            this.renderOptionGroup(optionGroups.Main),\n            [\"tr\", null, [\"td\", {colspan: 2},\n                [\"table\", {id: \"more-controls\"}, \n                    this.renderOptionGroup(optionGroups.More)\n                ]\n            ]]\n        ], this.container);\n    };\n    \n    this.renderOptionGroup = function(group) {\n        return Object.keys(group).map(function(key, i) {\n            var item = group[key];\n            if (!item.position)\n                item.position = i / 10000;\n            if (!item.label)\n                item.label = key;\n            return item;\n        }).sort(function(a, b) {\n            return a.position - b.position;\n        }).map(function(item) {\n            return this.renderOption(item.label, item);\n        }, this);\n    };\n    \n    this.renderOptionControl = function(key, option) {\n        var self = this;\n        if (Array.isArray(option)) {\n            return option.map(function(x) {\n                return self.renderOptionControl(key, x);\n            });\n        }\n        var control;\n        \n        var value = self.getOption(option);\n        \n        if (option.values && option.type != \"checkbox\") {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            option.items = option.values.map(function(v) {\n                return { value: v, name: v };\n            });\n        }\n        \n        if (option.type == \"buttonBar\") {\n            control = [\"div\", option.items.map(function(item) {\n                return [\"button\", { \n                    value: item.value, \n                    ace_selected_button: value == item.value, \n                    onclick: function() {\n                        self.setOption(option, item.value);\n                        var nodes = this.parentNode.querySelectorAll(\"[ace_selected_button]\");\n                        for (var i = 0; i < nodes.length; i++) {\n                            nodes[i].removeAttribute(\"ace_selected_button\");\n                        }\n                        this.setAttribute(\"ace_selected_button\", true);\n                    } \n                }, item.desc || item.caption || item.name];\n            })];\n        } else if (option.type == \"number\") {\n            control = [\"input\", {type: \"number\", value: value || option.defaultValue, style:\"width:3em\", oninput: function() {\n                self.setOption(option, parseInt(this.value));\n            }}];\n            if (option.defaults) {\n                control = [control, option.defaults.map(function(item) {\n                    return [\"button\", {onclick: function() {\n                        var input = this.parentNode.firstChild;\n                        input.value = item.value;\n                        input.oninput();\n                    }}, item.caption];\n                })];\n            }\n        } else if (option.items) {\n            var buildItems = function(items) {\n                return items.map(function(item) {\n                    return [\"option\", { value: item.value || item.name }, item.desc || item.caption || item.name];\n                });\n            };\n            \n            var items = Array.isArray(option.items) \n                ? buildItems(option.items)\n                : Object.keys(option.items).map(function(key) {\n                    return [\"optgroup\", {\"label\": key}, buildItems(option.items[key])];\n                });\n            control = [\"select\", { id: key, value: value, onchange: function() {\n                self.setOption(option, this.value);\n            } }, items];\n        } else {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            if (option.values) value = value == option.values[1];\n            control = [\"input\", { type: \"checkbox\", id: key, checked: value || null, onchange: function() {\n                var value = this.checked;\n                if (option.values) value = option.values[value ? 1 : 0];\n                self.setOption(option, value);\n            }}];\n            if (option.type == \"checkedNumber\") {\n                control = [control, []];\n            }\n        }\n        return control;\n    };\n    \n    this.renderOption = function(key, option) {\n        if (option.path && !option.onchange && !this.editor.$options[option.path])\n            return;\n        this.options[option.path] = option;\n        var safeKey = \"-\" + option.path;\n        var control = this.renderOptionControl(safeKey, option);\n        return [\"tr\", {class: \"ace_optionsMenuEntry\"}, [\"td\",\n            [\"label\", {for: safeKey}, key]\n        ], [\"td\", control]];\n    };\n    \n    this.setOption = function(option, value) {\n        if (typeof option == \"string\")\n            option = this.options[option];\n        if (value == \"false\") value = false;\n        if (value == \"true\") value = true;\n        if (value == \"null\") value = null;\n        if (value == \"undefined\") value = undefined;\n        if (typeof value == \"string\" && parseFloat(value).toString() == value)\n            value = parseFloat(value);\n        if (option.onchange)\n            option.onchange(value);\n        else if (option.path)\n            this.editor.setOption(option.path, value);\n        this._signal(\"setOption\", {name: option.path, value: value});\n    };\n    \n    this.getOption = function(option) {\n        if (option.getValue)\n            return option.getValue();\n        return this.editor.getOption(option.path);\n    };\n    \n}).call(OptionPanel.prototype);\n\nexports.OptionPanel = OptionPanel;\n\n});\n\ndefine(\"ace/ext/settings_menu\",[\"require\",\"exports\",\"module\",\"ace/ext/options\",\"ace/ext/menu_tools/overlay_page\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar OptionPanel = require(\"ace/ext/options\").OptionPanel;\nvar overlayPage = require('./menu_tools/overlay_page').overlayPage;\nfunction showSettingsMenu(editor) {\n    if (!document.getElementById('ace_settingsmenu')) {\n        var options = new OptionPanel(editor);\n        options.render();\n        options.container.id = \"ace_settingsmenu\";\n        overlayPage(editor, options.container, '0', '0', '0');\n        options.container.querySelector(\"select,input,button,checkbox\").focus();\n    }\n}\nmodule.exports.init = function(editor) {\n    var Editor = require(\"ace/editor\").Editor;\n    Editor.prototype.showSettingsMenu = function() {\n        showSettingsMenu(this);\n    };\n};\n});                (function() {\n                    window.require([\"ace/ext/settings_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-spellcheck.js",
    "content": "define(\"ace/ext/spellcheck\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\nvar event = require(\"../lib/event\");\n\nexports.contextMenuHandler = function(e){\n    var host = e.target;\n    var text = host.textInput.getElement();\n    if (!host.selection.isEmpty())\n        return;\n    var c = host.getCursorPosition();\n    var r = host.session.getWordRange(c.row, c.column);\n    var w = host.session.getTextRange(r);\n\n    host.session.tokenRe.lastIndex = 0;\n    if (!host.session.tokenRe.test(w))\n        return;\n    var PLACEHOLDER = \"\\x01\\x01\";\n    var value = w + \" \" + PLACEHOLDER;\n    text.value = value;\n    text.setSelectionRange(w.length, w.length + 1);\n    text.setSelectionRange(0, 0);\n    text.setSelectionRange(0, w.length);\n\n    var afterKeydown = false;\n    event.addListener(text, \"keydown\", function onKeydown() {\n        event.removeListener(text, \"keydown\", onKeydown);\n        afterKeydown = true;\n    });\n\n    host.textInput.setInputHandler(function(newVal) {\n        console.log(newVal , value, text.selectionStart, text.selectionEnd);\n        if (newVal == value)\n            return '';\n        if (newVal.lastIndexOf(value, 0) === 0)\n            return newVal.slice(value.length);\n        if (newVal.substr(text.selectionEnd) == value)\n            return newVal.slice(0, -value.length);\n        if (newVal.slice(-2) == PLACEHOLDER) {\n            var val = newVal.slice(0, -2);\n            if (val.slice(-1) == \" \") {\n                if (afterKeydown)\n                    return val.substring(0, text.selectionEnd);\n                val = val.slice(0, -1);\n                host.session.replace(r, val);\n                return \"\";\n            }\n        }\n\n        return newVal;\n    });\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    spellcheck: {\n        set: function(val) {\n            var text = this.textInput.getElement();\n            text.spellcheck = !!val;\n            if (!val)\n                this.removeListener(\"nativecontextmenu\", exports.contextMenuHandler);\n            else\n                this.on(\"nativecontextmenu\", exports.contextMenuHandler);\n        },\n        value: true\n    }\n});\n\n});                (function() {\n                    window.require([\"ace/ext/spellcheck\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-split.js",
    "content": "define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Editor = require(\"./editor\").Editor;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = require(\"./edit_session\").EditSession;\n\n\nvar Split = function(container, theme, splits) {\n    this.BELOW = 1;\n    this.BESIDE = 0;\n\n    this.$container = container;\n    this.$theme = theme;\n    this.$splits = 0;\n    this.$editorCSS = \"\";\n    this.$editors = [];\n    this.$orientation = this.BESIDE;\n\n    this.setSplits(splits || 1);\n    this.$cEditor = this.$editors[0];\n\n\n    this.on(\"focus\", function(editor) {\n        this.$cEditor = editor;\n    }.bind(this));\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$createEditor = function() {\n        var el = document.createElement(\"div\");\n        el.className = this.$editorCSS;\n        el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n        this.$container.appendChild(el);\n        var editor = new Editor(new Renderer(el, this.$theme));\n\n        editor.on(\"focus\", function() {\n            this._emit(\"focus\", editor);\n        }.bind(this));\n\n        this.$editors.push(editor);\n        editor.setFontSize(this.$fontSize);\n        return editor;\n    };\n\n    this.setSplits = function(splits) {\n        var editor;\n        if (splits < 1) {\n            throw \"The number of splits have to be > 0!\";\n        }\n\n        if (splits == this.$splits) {\n            return;\n        } else if (splits > this.$splits) {\n            while (this.$splits < this.$editors.length && this.$splits < splits) {\n                editor = this.$editors[this.$splits];\n                this.$container.appendChild(editor.container);\n                editor.setFontSize(this.$fontSize);\n                this.$splits ++;\n            }\n            while (this.$splits < splits) {\n                this.$createEditor();\n                this.$splits ++;\n            }\n        } else {\n            while (this.$splits > splits) {\n                editor = this.$editors[this.$splits - 1];\n                this.$container.removeChild(editor.container);\n                this.$splits --;\n            }\n        }\n        this.resize();\n    };\n    this.getSplits = function() {\n        return this.$splits;\n    };\n    this.getEditor = function(idx) {\n        return this.$editors[idx];\n    };\n    this.getCurrentEditor = function() {\n        return this.$cEditor;\n    };\n    this.focus = function() {\n        this.$cEditor.focus();\n    };\n    this.blur = function() {\n        this.$cEditor.blur();\n    };\n    this.setTheme = function(theme) {\n        this.$editors.forEach(function(editor) {\n            editor.setTheme(theme);\n        });\n    };\n    this.setKeyboardHandler = function(keybinding) {\n        this.$editors.forEach(function(editor) {\n            editor.setKeyboardHandler(keybinding);\n        });\n    };\n    this.forEach = function(callback, scope) {\n        this.$editors.forEach(callback, scope);\n    };\n\n\n    this.$fontSize = \"\";\n    this.setFontSize = function(size) {\n        this.$fontSize = size;\n        this.forEach(function(editor) {\n           editor.setFontSize(size);\n        });\n    };\n\n    this.$cloneSession = function(session) {\n        var s = new EditSession(session.getDocument(), session.getMode());\n\n        var undoManager = session.getUndoManager();\n        s.setUndoManager(undoManager);\n        s.setTabSize(session.getTabSize());\n        s.setUseSoftTabs(session.getUseSoftTabs());\n        s.setOverwrite(session.getOverwrite());\n        s.setBreakpoints(session.getBreakpoints());\n        s.setUseWrapMode(session.getUseWrapMode());\n        s.setUseWorker(session.getUseWorker());\n        s.setWrapLimitRange(session.$wrapLimitRange.min,\n                            session.$wrapLimitRange.max);\n        s.$foldData = session.$cloneFoldData();\n\n        return s;\n    };\n    this.setSession = function(session, idx) {\n        var editor;\n        if (idx == null) {\n            editor = this.$cEditor;\n        } else {\n            editor = this.$editors[idx];\n        }\n        var isUsed = this.$editors.some(function(editor) {\n           return editor.session === session;\n        });\n\n        if (isUsed) {\n            session = this.$cloneSession(session);\n        }\n        editor.setSession(session);\n        return session;\n    };\n    this.getOrientation = function() {\n        return this.$orientation;\n    };\n    this.setOrientation = function(orientation) {\n        if (this.$orientation == orientation) {\n            return;\n        }\n        this.$orientation = orientation;\n        this.resize();\n    };\n    this.resize = function() {\n        var width = this.$container.clientWidth;\n        var height = this.$container.clientHeight;\n        var editor;\n\n        if (this.$orientation == this.BESIDE) {\n            var editorWidth = width / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = editorWidth + \"px\";\n                editor.container.style.top = \"0px\";\n                editor.container.style.left = i * editorWidth + \"px\";\n                editor.container.style.height = height + \"px\";\n                editor.resize();\n            }\n        } else {\n            var editorHeight = height / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = width + \"px\";\n                editor.container.style.top = i * editorHeight + \"px\";\n                editor.container.style.left = \"0px\";\n                editor.container.style.height = editorHeight + \"px\";\n                editor.resize();\n            }\n        }\n    };\n\n}).call(Split.prototype);\n\nexports.Split = Split;\n});\n\ndefine(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"], function(require, exports, module) {\n\"use strict\";\nmodule.exports = require(\"../split\");\n\n});                (function() {\n                    window.require([\"ace/ext/split\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-static_highlight.js",
    "content": "define(\"ace/ext/static_highlight\",[\"require\",\"exports\",\"module\",\"ace/edit_session\",\"ace/layer/text\",\"ace/config\",\"ace/lib/dom\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar TextLayer = require(\"../layer/text\").Text;\nvar baseStyles = \".ace_static_highlight {\\\nfont-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;\\\nfont-size: 12px;\\\nwhite-space: pre-wrap\\\n}\\\n.ace_static_highlight .ace_gutter {\\\nwidth: 2em;\\\ntext-align: right;\\\npadding: 0 3px 0 0;\\\nmargin-right: 3px;\\\ncontain: none;\\\n}\\\n.ace_static_highlight.ace_show_gutter .ace_line {\\\npadding-left: 2.6em;\\\n}\\\n.ace_static_highlight .ace_line { position: relative; }\\\n.ace_static_highlight .ace_gutter-cell {\\\n-moz-user-select: -moz-none;\\\n-khtml-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\nposition: absolute;\\\n}\\\n.ace_static_highlight .ace_gutter-cell:before {\\\ncontent: counter(ace_line, decimal);\\\ncounter-increment: ace_line;\\\n}\\\n.ace_static_highlight {\\\ncounter-reset: ace_line;\\\n}\\\n\";\nvar config = require(\"../config\");\nvar dom = require(\"../lib/dom\");\nvar escapeHTML = require(\"../lib/lang\").escapeHTML;\n\nfunction Element(type) {\n    this.type = type;\n    this.style = {};\n    this.textContent = \"\";\n}\nElement.prototype.cloneNode = function() {\n    return this;\n};\nElement.prototype.appendChild = function(child) {\n    this.textContent += child.toString();\n};\nElement.prototype.toString = function() {\n    var stringBuilder = [];\n    if (this.type != \"fragment\") {\n        stringBuilder.push(\"<\", this.type);\n        if (this.className)\n            stringBuilder.push(\" class='\", this.className, \"'\");\n        var styleStr = [];\n        for (var key in this.style) {\n            styleStr.push(key, \":\", this.style[key]);\n        }\n        if (styleStr.length)\n            stringBuilder.push(\" style='\", styleStr.join(\"\"), \"'\");\n        stringBuilder.push(\">\");\n    }\n\n    if (this.textContent) {\n        stringBuilder.push(this.textContent);\n    }\n\n    if (this.type != \"fragment\") {\n        stringBuilder.push(\"</\", this.type, \">\");\n    }\n    \n    return stringBuilder.join(\"\");\n};\n\n\nvar simpleDom = {\n    createTextNode: function(textContent, element) {\n        return escapeHTML(textContent);\n    },\n    createElement: function(type) {\n        return new Element(type);\n    },\n    createFragment: function() {\n        return new Element(\"fragment\");\n    }\n};\n\nvar SimpleTextLayer = function() {\n    this.config = {};\n    this.dom = simpleDom;\n};\nSimpleTextLayer.prototype = TextLayer.prototype;\n\nvar highlight = function(el, opts, callback) {\n    var m = el.className.match(/lang-(\\w+)/);\n    var mode = opts.mode || m && (\"ace/mode/\" + m[1]);\n    if (!mode)\n        return false;\n    var theme = opts.theme || \"ace/theme/textmate\";\n    \n    var data = \"\";\n    var nodes = [];\n\n    if (el.firstElementChild) {\n        var textLen = 0;\n        for (var i = 0; i < el.childNodes.length; i++) {\n            var ch = el.childNodes[i];\n            if (ch.nodeType == 3) {\n                textLen += ch.data.length;\n                data += ch.data;\n            } else {\n                nodes.push(textLen, ch);\n            }\n        }\n    } else {\n        data = el.textContent;\n        if (opts.trim)\n            data = data.trim();\n    }\n    \n    highlight.render(data, mode, theme, opts.firstLineNumber, !opts.showGutter, function (highlighted) {\n        dom.importCssString(highlighted.css, \"ace_highlight\");\n        el.innerHTML = highlighted.html;\n        var container = el.firstChild.firstChild;\n        for (var i = 0; i < nodes.length; i += 2) {\n            var pos = highlighted.session.doc.indexToPosition(nodes[i]);\n            var node = nodes[i + 1];\n            var lineEl = container.children[pos.row];\n            lineEl && lineEl.appendChild(node);\n        }\n        callback && callback();\n    });\n};\nhighlight.render = function(input, mode, theme, lineStart, disableGutter, callback) {\n    var waiting = 1;\n    var modeCache = EditSession.prototype.$modes;\n    if (typeof theme == \"string\") {\n        waiting++;\n        config.loadModule(['theme', theme], function(m) {\n            theme = m;\n            --waiting || done();\n        });\n    }\n    var modeOptions;\n    if (mode && typeof mode === \"object\" && !mode.getTokenizer) {\n        modeOptions = mode;\n        mode = modeOptions.path;\n    }\n    if (typeof mode == \"string\") {\n        waiting++;\n        config.loadModule(['mode', mode], function(m) {\n            if (!modeCache[mode] || modeOptions)\n                modeCache[mode] = new m.Mode(modeOptions);\n            mode = modeCache[mode];\n            --waiting || done();\n        });\n    }\n    function done() {\n        var result = highlight.renderSync(input, mode, theme, lineStart, disableGutter);\n        return callback ? callback(result) : result;\n    }\n    return --waiting || done();\n};\nhighlight.renderSync = function(input, mode, theme, lineStart, disableGutter) {\n    lineStart = parseInt(lineStart || 1, 10);\n\n    var session = new EditSession(\"\");\n    session.setUseWorker(false);\n    session.setMode(mode);\n\n    var textLayer = new SimpleTextLayer();\n    textLayer.setSession(session);\n    Object.keys(textLayer.$tabStrings).forEach(function(k) {\n        if (typeof textLayer.$tabStrings[k] == \"string\") {\n            var el = simpleDom.createFragment();\n            el.textContent = textLayer.$tabStrings[k];\n            textLayer.$tabStrings[k] = el;\n        }\n    });\n\n    session.setValue(input);\n    var length =  session.getLength();\n    \n    var outerEl = simpleDom.createElement(\"div\");\n    outerEl.className = theme.cssClass;\n    \n    var innerEl = simpleDom.createElement(\"div\");\n    innerEl.className = \"ace_static_highlight\" + (disableGutter ? \"\" : \" ace_show_gutter\");\n    innerEl.style[\"counter-reset\"] = \"ace_line \" + (lineStart - 1);\n\n    for (var ix = 0; ix < length; ix++) {\n        var lineEl = simpleDom.createElement(\"div\");\n        lineEl.className = \"ace_line\";\n        \n        if (!disableGutter) {\n            var gutterEl = simpleDom.createElement(\"span\");\n            gutterEl.className =\"ace_gutter ace_gutter-cell\";\n            gutterEl.textContent = \"\";\n            lineEl.appendChild(gutterEl);\n        }\n        textLayer.$renderLine(lineEl, ix, false);\n        lineEl.textContent += \"\\n\";\n        innerEl.appendChild(lineEl);\n    }\n    outerEl.appendChild(innerEl);\n\n    return {\n        css: baseStyles + theme.cssText,\n        html: outerEl.toString(),\n        session: session\n    };\n};\n\nmodule.exports = highlight;\nmodule.exports.highlight = highlight;\n});                (function() {\n                    window.require([\"ace/ext/static_highlight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-statusbar.js",
    "content": "define(\"ace/ext/statusbar\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"ace/lib/dom\");\nvar lang = require(\"ace/lib/lang\");\n\nvar StatusBar = function(editor, parentNode) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_status-indicator\";\n    this.element.style.cssText = \"display: inline-block;\";\n    parentNode.appendChild(this.element);\n\n    var statusUpdate = lang.delayedCall(function(){\n        this.updateStatus(editor);\n    }.bind(this)).schedule.bind(null, 100);\n    \n    editor.on(\"changeStatus\", statusUpdate);\n    editor.on(\"changeSelection\", statusUpdate);\n    editor.on(\"keyboardActivity\", statusUpdate);\n};\n\n(function(){\n    this.updateStatus = function(editor) {\n        var status = [];\n        function add(str, separator) {\n            str && status.push(str, separator || \"|\");\n        }\n\n        add(editor.keyBinding.getStatusText(editor));\n        if (editor.commands.recording)\n            add(\"REC\");\n        \n        var sel = editor.selection;\n        var c = sel.lead;\n        \n        if (!sel.isEmpty()) {\n            var r = editor.getSelectionRange();\n            add(\"(\" + (r.end.row - r.start.row) + \":\"  +(r.end.column - r.start.column) + \")\", \" \");\n        }\n        add(c.row + \":\" + c.column, \" \");        \n        if (sel.rangeCount)\n            add(\"[\" + sel.rangeCount + \"]\", \" \");\n        status.pop();\n        this.element.textContent = status.join(\"\");\n    };\n}).call(StatusBar.prototype);\n\nexports.StatusBar = StatusBar;\n\n});                (function() {\n                    window.require([\"ace/ext/statusbar\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-textarea.js",
    "content": "define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\ndefine(\"ace/ext/textarea\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/net\",\"ace/ace\",\"ace/theme/textmate\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar UA = require(\"../lib/useragent\");\nvar net = require(\"../lib/net\");\nvar ace = require(\"../ace\");\n\nrequire(\"../theme/textmate\");\n\nmodule.exports = exports = ace;\nvar getCSSProperty = function(element, container, property) {\n    var ret = element.style[property];\n\n    if (!ret) {\n        if (window.getComputedStyle) {\n            ret = window.getComputedStyle(element, '').getPropertyValue(property);\n        } else {\n            ret = element.currentStyle[property];\n        }\n    }\n\n    if (!ret || ret == 'auto' || ret == 'intrinsic') {\n        ret = container.style[property];\n    }\n    return ret;\n};\n\nfunction applyStyles(elm, styles) {\n    for (var style in styles) {\n        elm.style[style] = styles[style];\n    }\n}\n\nfunction setupContainer(element, getValue) {\n    if (element.type != 'textarea') {\n        throw new Error(\"Textarea required!\");\n    }\n\n    var parentNode = element.parentNode;\n    var container = document.createElement('div');\n    var resizeEvent = function() {\n        var style = 'position:relative;';\n        [\n            'margin-top', 'margin-left', 'margin-right', 'margin-bottom'\n        ].forEach(function(item) {\n            style += item + ':' +\n                        getCSSProperty(element, container, item) + ';';\n        });\n        var width = getCSSProperty(element, container, 'width') || (element.clientWidth + \"px\");\n        var height = getCSSProperty(element, container, 'height')  || (element.clientHeight + \"px\");\n        style += 'height:' + height + ';width:' + width + ';';\n        style += 'display:inline-block;';\n        container.setAttribute('style', style);\n    };\n    event.addListener(window, 'resize', resizeEvent);\n    resizeEvent();\n    parentNode.insertBefore(container, element.nextSibling);\n    while (parentNode !== document) {\n        if (parentNode.tagName.toUpperCase() === 'FORM') {\n            var oldSumit = parentNode.onsubmit;\n            parentNode.onsubmit = function(evt) {\n                element.value = getValue();\n                if (oldSumit) {\n                    oldSumit.call(this, evt);\n                }\n            };\n            break;\n        }\n        parentNode = parentNode.parentNode;\n    }\n    return container;\n}\n\nexports.transformTextarea = function(element, options) {\n    var isFocused = element.autofocus || document.activeElement == element;\n    var session;\n    var container = setupContainer(element, function() {\n        return session.getValue();\n    });\n    element.style.display = 'none';\n    container.style.background = 'white';\n    var editorDiv = document.createElement(\"div\");\n    applyStyles(editorDiv, {\n        top: \"0px\",\n        left: \"0px\",\n        right: \"0px\",\n        bottom: \"0px\",\n        border: \"1px solid gray\",\n        position: \"absolute\"\n    });\n    container.appendChild(editorDiv);\n\n    var settingOpener = document.createElement(\"div\");\n    applyStyles(settingOpener, {\n        position: \"absolute\",\n        right: \"0px\",\n        bottom: \"0px\",\n        cursor: \"nw-resize\",\n        border: \"solid 9px\",\n        borderColor: \"lightblue gray gray #ceade6\",\n        zIndex: 101\n    });\n\n    var settingDiv = document.createElement(\"div\");\n    var settingDivStyles = {\n        top: \"0px\",\n        left: \"20%\",\n        right: \"0px\",\n        bottom: \"0px\",\n        position: \"absolute\",\n        padding: \"5px\",\n        zIndex: 100,\n        color: \"white\",\n        display: \"none\",\n        overflow: \"auto\",\n        fontSize: \"14px\",\n        boxShadow: \"-5px 2px 3px gray\"\n    };\n    if (!UA.isOldIE) {\n        settingDivStyles.backgroundColor = \"rgba(0, 0, 0, 0.6)\";\n    } else {\n        settingDivStyles.backgroundColor = \"#333\";\n    }\n\n    applyStyles(settingDiv, settingDivStyles);\n    container.appendChild(settingDiv);\n\n    options = options || exports.defaultOptions;\n    var editor = ace.edit(editorDiv);\n    session = editor.getSession();\n\n    session.setValue(element.value || element.innerHTML);\n    if (isFocused)\n        editor.focus();\n    container.appendChild(settingOpener);\n    setupApi(editor, editorDiv, settingDiv, ace, options);\n    setupSettingPanel(settingDiv, settingOpener, editor);\n\n    var state = \"\";\n    event.addListener(settingOpener, \"mousemove\", function(e) {\n        var rect = this.getBoundingClientRect();\n        var x = e.clientX - rect.left, y = e.clientY - rect.top;\n        if (x + y < (rect.width + rect.height)/2) {\n            this.style.cursor = \"pointer\";\n            state = \"toggle\";\n        } else {\n            state = \"resize\";\n            this.style.cursor = \"nw-resize\";\n        }\n    });\n\n    event.addListener(settingOpener, \"mousedown\", function(e) {\n        e.preventDefault();\n        if (state == \"toggle\") {\n            editor.setDisplaySettings();\n            return;\n        }\n        container.style.zIndex = 100000;\n        var rect = container.getBoundingClientRect();\n        var startX = rect.width  + rect.left - e.clientX;\n        var startY = rect.height  + rect.top - e.clientY;\n        event.capture(settingOpener, function(e) {\n            container.style.width = e.clientX - rect.left + startX + \"px\";\n            container.style.height = e.clientY - rect.top + startY + \"px\";\n            editor.resize();\n        }, function() {});\n    });\n\n    return editor;\n};\n\nfunction load(url, module, callback) {\n    net.loadScript(url, function() {\n        require([module], callback);\n    });\n}\n\nfunction setupApi(editor, editorDiv, settingDiv, ace, options) {\n    var session = editor.getSession();\n    var renderer = editor.renderer;\n\n    function toBool(value) {\n        return value === \"true\" || value == true;\n    }\n\n    editor.setDisplaySettings = function(display) {\n        if (display == null)\n            display = settingDiv.style.display == \"none\";\n        if (display) {\n            settingDiv.style.display = \"block\";\n            settingDiv.hideButton.focus();\n            editor.on(\"focus\", function onFocus() {\n                editor.removeListener(\"focus\", onFocus);\n                settingDiv.style.display = \"none\";\n            });\n        } else {\n            editor.focus();\n        }\n    };\n\n    editor.$setOption = editor.setOption;\n    editor.$getOption = editor.getOption;\n    editor.setOption = function(key, value) {\n        switch (key) {\n            case \"mode\":\n                editor.$setOption(\"mode\", \"ace/mode/\" + value);\n            break;\n            case \"theme\":\n                editor.$setOption(\"theme\", \"ace/theme/\" + value);\n            break;\n            case \"keybindings\":\n                switch (value) {\n                    case \"vim\":\n                        editor.setKeyboardHandler(\"ace/keyboard/vim\");\n                        break;\n                    case \"emacs\":\n                        editor.setKeyboardHandler(\"ace/keyboard/emacs\");\n                        break;\n                    default:\n                        editor.setKeyboardHandler(null);\n                }\n            break;\n\n            case \"wrap\":\n            case \"fontSize\":\n                editor.$setOption(key, value);\n            break;\n            \n            default:\n                editor.$setOption(key, toBool(value));\n        }\n    };\n\n    editor.getOption = function(key) {\n        switch (key) {\n            case \"mode\":\n                return editor.$getOption(\"mode\").substr(\"ace/mode/\".length);\n            break;\n\n            case \"theme\":\n                return editor.$getOption(\"theme\").substr(\"ace/theme/\".length);\n            break;\n\n            case \"keybindings\":\n                var value = editor.getKeyboardHandler();\n                switch (value && value.$id) {\n                    case \"ace/keyboard/vim\":\n                        return \"vim\";\n                    case \"ace/keyboard/emacs\":\n                        return \"emacs\";\n                    default:\n                        return \"ace\";\n                }\n            break;\n\n            default:\n                return editor.$getOption(key);\n        }\n    };\n\n    editor.setOptions(options);\n    return editor;\n}\n\nfunction setupSettingPanel(settingDiv, settingOpener, editor) {\n    var BOOL = null;\n\n    var desc = {\n        mode:            \"Mode:\",\n        wrap:            \"Soft Wrap:\",\n        theme:           \"Theme:\",\n        fontSize:        \"Font Size:\",\n        showGutter:      \"Display Gutter:\",\n        keybindings:     \"Keyboard\",\n        showPrintMargin: \"Show Print Margin:\",\n        useSoftTabs:     \"Use Soft Tabs:\",\n        showInvisibles:  \"Show Invisibles\"\n    };\n\n    var optionValues = {\n        mode: {\n            text:       \"Plain\",\n            javascript: \"JavaScript\",\n            xml:        \"XML\",\n            html:       \"HTML\",\n            css:        \"CSS\",\n            scss:       \"SCSS\",\n            python:     \"Python\",\n            php:        \"PHP\",\n            java:       \"Java\",\n            ruby:       \"Ruby\",\n            c_cpp:      \"C/C++\",\n            coffee:     \"CoffeeScript\",\n            json:       \"json\",\n            perl:       \"Perl\",\n            clojure:    \"Clojure\",\n            ocaml:      \"OCaml\",\n            csharp:     \"C#\",\n            haxe:       \"haXe\",\n            svg:        \"SVG\",\n            textile:    \"Textile\",\n            groovy:     \"Groovy\",\n            liquid:     \"Liquid\",\n            Scala:      \"Scala\"\n        },\n        theme: {\n            clouds:           \"Clouds\",\n            clouds_midnight:  \"Clouds Midnight\",\n            cobalt:           \"Cobalt\",\n            crimson_editor:   \"Crimson Editor\",\n            dawn:             \"Dawn\",\n            gob:              \"Green on Black\",\n            eclipse:          \"Eclipse\",\n            idle_fingers:     \"Idle Fingers\",\n            kr_theme:         \"Kr Theme\",\n            merbivore:        \"Merbivore\",\n            merbivore_soft:   \"Merbivore Soft\",\n            mono_industrial:  \"Mono Industrial\",\n            monokai:          \"Monokai\",\n            pastel_on_dark:   \"Pastel On Dark\",\n            solarized_dark:   \"Solarized Dark\",\n            solarized_light:  \"Solarized Light\",\n            textmate:         \"Textmate\",\n            twilight:         \"Twilight\",\n            vibrant_ink:      \"Vibrant Ink\"\n        },\n        showGutter: BOOL,\n        fontSize: {\n            \"10px\": \"10px\",\n            \"11px\": \"11px\",\n            \"12px\": \"12px\",\n            \"14px\": \"14px\",\n            \"16px\": \"16px\"\n        },\n        wrap: {\n            off:    \"Off\",\n            40:     \"40\",\n            80:     \"80\",\n            free:   \"Free\"\n        },\n        keybindings: {\n            ace: \"ace\",\n            vim: \"vim\",\n            emacs: \"emacs\"\n        },\n        showPrintMargin:    BOOL,\n        useSoftTabs:        BOOL,\n        showInvisibles:     BOOL\n    };\n\n    var table = [];\n    table.push(\"<table><tr><th>Setting</th><th>Value</th></tr>\");\n\n    function renderOption(builder, option, obj, cValue) {\n        if (!obj) {\n            builder.push(\n                \"<input type='checkbox' title='\", option, \"' \",\n                    cValue + \"\" == \"true\" ? \"checked='true'\" : \"\",\n               \"'></input>\"\n            );\n            return;\n        }\n        builder.push(\"<select title='\" + option + \"'>\");\n        for (var value in obj) {\n            builder.push(\"<option value='\" + value + \"' \");\n\n            if (cValue == value) {\n                builder.push(\" selected \");\n            }\n\n            builder.push(\">\",\n                obj[value],\n                \"</option>\");\n        }\n        builder.push(\"</select>\");\n    }\n\n    for (var option in exports.defaultOptions) {\n        table.push(\"<tr><td>\", desc[option], \"</td>\");\n        table.push(\"<td>\");\n        renderOption(table, option, optionValues[option], editor.getOption(option));\n        table.push(\"</td></tr>\");\n    }\n    table.push(\"</table>\");\n    settingDiv.innerHTML = table.join(\"\");\n\n    var onChange = function(e) {\n        var select = e.currentTarget;\n        editor.setOption(select.title, select.value);\n    };\n    var onClick = function(e) {\n        var cb = e.currentTarget;\n        editor.setOption(cb.title, cb.checked);\n    };\n    var selects = settingDiv.getElementsByTagName(\"select\");\n    for (var i = 0; i < selects.length; i++)\n        selects[i].onchange = onChange;\n    var cbs = settingDiv.getElementsByTagName(\"input\");\n    for (var i = 0; i < cbs.length; i++)\n        cbs[i].onclick = onClick;\n\n\n    var button = document.createElement(\"input\");\n    button.type = \"button\";\n    button.value = \"Hide\";\n    event.addListener(button, \"click\", function() {\n        editor.setDisplaySettings(false);\n    });\n    settingDiv.appendChild(button);\n    settingDiv.hideButton = button;\n}\nexports.defaultOptions = {\n    mode:               \"javascript\",\n    theme:              \"textmate\",\n    wrap:               \"off\",\n    fontSize:           \"12px\",\n    showGutter:         \"false\",\n    keybindings:        \"ace\",\n    showPrintMargin:    \"false\",\n    useSoftTabs:        \"true\",\n    showInvisibles:     \"false\"\n};\n\n});                (function() {\n                    window.require([\"ace/ext/textarea\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-themelist.js",
    "content": "define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar themeData = [\n    [\"Chrome\"         ],\n    [\"Clouds\"         ],\n    [\"Crimson Editor\" ],\n    [\"Dawn\"           ],\n    [\"Dreamweaver\"    ],\n    [\"Eclipse\"        ],\n    [\"GitHub\"         ],\n    [\"IPlastic\"       ],\n    [\"Solarized Light\"],\n    [\"TextMate\"       ],\n    [\"Tomorrow\"       ],\n    [\"XCode\"          ],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\"           ,\"sqlserver\"               , \"light\"],\n    [\"Ambiance\"             ,\"ambiance\"                ,  \"dark\"],\n    [\"Chaos\"                ,\"chaos\"                   ,  \"dark\"],\n    [\"Clouds Midnight\"      ,\"clouds_midnight\"         ,  \"dark\"],\n    [\"Dracula\"              ,\"\"                        ,  \"dark\"],\n    [\"Cobalt\"               ,\"cobalt\"                  ,  \"dark\"],\n    [\"Gruvbox\"              ,\"gruvbox\"                 ,  \"dark\"],\n    [\"Green on Black\"       ,\"gob\"                     ,  \"dark\"],\n    [\"idle Fingers\"         ,\"idle_fingers\"            ,  \"dark\"],\n    [\"krTheme\"              ,\"kr_theme\"                ,  \"dark\"],\n    [\"Merbivore\"            ,\"merbivore\"               ,  \"dark\"],\n    [\"Merbivore Soft\"       ,\"merbivore_soft\"          ,  \"dark\"],\n    [\"Mono Industrial\"      ,\"mono_industrial\"         ,  \"dark\"],\n    [\"Monokai\"              ,\"monokai\"                 ,  \"dark\"],\n    [\"Pastel on dark\"       ,\"pastel_on_dark\"          ,  \"dark\"],\n    [\"Solarized Dark\"       ,\"solarized_dark\"          ,  \"dark\"],\n    [\"Terminal\"             ,\"terminal\"                ,  \"dark\"],\n    [\"Tomorrow Night\"       ,\"tomorrow_night\"          ,  \"dark\"],\n    [\"Tomorrow Night Blue\"  ,\"tomorrow_night_blue\"     ,  \"dark\"],\n    [\"Tomorrow Night Bright\",\"tomorrow_night_bright\"   ,  \"dark\"],\n    [\"Tomorrow Night 80s\"   ,\"tomorrow_night_eighties\" ,  \"dark\"],\n    [\"Twilight\"             ,\"twilight\"                ,  \"dark\"],\n    [\"Vibrant Ink\"          ,\"vibrant_ink\"             ,  \"dark\"]\n];\n\n\nexports.themesByName = {};\nexports.themes = themeData.map(function(data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});                (function() {\n                    window.require([\"ace/ext/themelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/ext-whitespace.js",
    "content": "define(\"ace/ext/whitespace\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nexports.$detectIndentation = function(lines, fallback) {\n    var stats = [];\n    var changes = [];\n    var tabIndents = 0;\n    var prevSpaces = 0;\n    var max = Math.min(lines.length, 1000);\n    for (var i = 0; i < max; i++) {\n        var line = lines[i];\n        if (!/^\\s*[^*+\\-\\s]/.test(line))\n            continue;\n\n        if (line[0] == \"\\t\") {\n            tabIndents++;\n            prevSpaces = -Number.MAX_VALUE;\n        } else {\n            var spaces = line.match(/^ */)[0].length;\n            if (spaces && line[spaces] != \"\\t\") {\n                var diff = spaces - prevSpaces;\n                if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff))\n                    changes[diff] = (changes[diff] || 0) + 1;\n    \n                stats[spaces] = (stats[spaces] || 0) + 1;\n            }\n            prevSpaces = spaces;\n        }\n        while (i < max && line[line.length - 1] == \"\\\\\")\n            line = lines[i++];\n    }\n    \n    function getScore(indent) {\n        var score = 0;\n        for (var i = indent; i < stats.length; i += indent)\n            score += stats[i] || 0;\n        return score;\n    }\n\n    var changesTotal = changes.reduce(function(a,b){return a+b;}, 0);\n\n    var first = {score: 0, length: 0};\n    var spaceIndents = 0;\n    for (var i = 1; i < 12; i++) {\n        var score = getScore(i);\n        if (i == 1) {\n            spaceIndents = score;\n            score = stats[1] ? 0.9 : 0.8;\n            if (!stats.length)\n                score = 0;\n        } else\n            score /= spaceIndents;\n\n        if (changes[i])\n            score += changes[i] / changesTotal;\n\n        if (score > first.score)\n            first = {score: score, length: i};\n    }\n\n    if (first.score && first.score > 1.4)\n        var tabLength = first.length;\n\n    if (tabIndents > spaceIndents + 1) {\n        if (tabLength == 1 || spaceIndents < tabIndents / 4 || first.score < 1.8)\n            tabLength = undefined;\n        return {ch: \"\\t\", length: tabLength};\n    }\n    if (spaceIndents > tabIndents + 1)\n        return {ch: \" \", length: tabLength};\n};\n\nexports.detectIndentation = function(session) {\n    var lines = session.getLines(0, 1000);\n    var indent = exports.$detectIndentation(lines) || {};\n\n    if (indent.ch)\n        session.setUseSoftTabs(indent.ch == \" \");\n\n    if (indent.length)\n        session.setTabSize(indent.length);\n    return indent;\n};\nexports.trimTrailingSpace = function(session, options) {\n    var doc = session.getDocument();\n    var lines = doc.getAllLines();\n    \n    var min = options && options.trimEmpty ? -1 : 0;\n    var cursors = [], ci = -1;\n    if (options && options.keepCursorPosition) {\n        if (session.selection.rangeCount) {\n            session.selection.rangeList.ranges.forEach(function(x, i, ranges) {\n               var next = ranges[i + 1];\n               if (next && next.cursor.row == x.cursor.row)\n                  return;\n              cursors.push(x.cursor);\n            });\n        } else {\n            cursors.push(session.selection.getCursor());\n        }\n        ci = 0;\n    }\n    var cursorRow = cursors[ci] && cursors[ci].row;\n\n    for (var i = 0, l=lines.length; i < l; i++) {\n        var line = lines[i];\n        var index = line.search(/\\s+$/);\n\n        if (i == cursorRow) {\n            if (index < cursors[ci].column && index > min)\n               index = cursors[ci].column;\n            ci++;\n            cursorRow = cursors[ci] ? cursors[ci].row : -1;\n        }\n\n        if (index > min)\n            doc.removeInLine(i, index, line.length);\n    }\n};\n\nexports.convertIndentation = function(session, ch, len) {\n    var oldCh = session.getTabString()[0];\n    var oldLen = session.getTabSize();\n    if (!len) len = oldLen;\n    if (!ch) ch = oldCh;\n\n    var tab = ch == \"\\t\" ? ch: lang.stringRepeat(ch, len);\n\n    var doc = session.doc;\n    var lines = doc.getAllLines();\n\n    var cache = {};\n    var spaceCache = {};\n    for (var i = 0, l=lines.length; i < l; i++) {\n        var line = lines[i];\n        var match = line.match(/^\\s*/)[0];\n        if (match) {\n            var w = session.$getStringScreenWidth(match)[0];\n            var tabCount = Math.floor(w/oldLen);\n            var reminder = w%oldLen;\n            var toInsert = cache[tabCount] || (cache[tabCount] = lang.stringRepeat(tab, tabCount));\n            toInsert += spaceCache[reminder] || (spaceCache[reminder] = lang.stringRepeat(\" \", reminder));\n\n            if (toInsert != match) {\n                doc.removeInLine(i, 0, match.length);\n                doc.insertInLine({row: i, column: 0}, toInsert);\n            }\n        }\n    }\n    session.setTabSize(len);\n    session.setUseSoftTabs(ch == \" \");\n};\n\nexports.$parseStringArg = function(text) {\n    var indent = {};\n    if (/t/.test(text))\n        indent.ch = \"\\t\";\n    else if (/s/.test(text))\n        indent.ch = \" \";\n    var m = text.match(/\\d+/);\n    if (m)\n        indent.length = parseInt(m[0], 10);\n    return indent;\n};\n\nexports.$parseArg = function(arg) {\n    if (!arg)\n        return {};\n    if (typeof arg == \"string\")\n        return exports.$parseStringArg(arg);\n    if (typeof arg.text == \"string\")\n        return exports.$parseStringArg(arg.text);\n    return arg;\n};\n\nexports.commands = [{\n    name: \"detectIndentation\",\n    exec: function(editor) {\n        exports.detectIndentation(editor.session);\n    }\n}, {\n    name: \"trimTrailingSpace\",\n    exec: function(editor, args) {\n        exports.trimTrailingSpace(editor.session, args);\n    }\n}, {\n    name: \"convertIndentation\",\n    exec: function(editor, arg) {\n        var indent = exports.$parseArg(arg);\n        exports.convertIndentation(editor.session, indent.ch, indent.length);\n    }\n}, {\n    name: \"setIndentation\",\n    exec: function(editor, arg) {\n        var indent = exports.$parseArg(arg);\n        indent.length && editor.session.setTabSize(indent.length);\n        indent.ch && editor.session.setUseSoftTabs(indent.ch == \" \");\n    }\n}];\n\n});                (function() {\n                    window.require([\"ace/ext/whitespace\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/keybinding-emacs.js",
    "content": "define(\"ace/occur\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/edit_session\",\"ace/search_highlight\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nfunction Occur() {}\n\noop.inherits(Occur, Search);\n\n(function() {\n    this.enter = function(editor, options) {\n        if (!options.needle) return false;\n        var pos = editor.getCursorPosition();\n        this.displayOccurContent(editor, options);\n        var translatedPos = this.originalToOccurPosition(editor.session, pos);\n        editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n    this.exit = function(editor, options) {\n        var pos = options.translatePosition && editor.getCursorPosition();\n        var translatedPos = pos && this.occurToOriginalPosition(editor.session, pos);\n        this.displayOriginalContent(editor);\n        if (translatedPos)\n            editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n\n    this.highlight = function(sess, regexp) {\n        var hl = sess.$occurHighlight = sess.$occurHighlight || sess.addDynamicMarker(\n                new SearchHighlight(null, \"ace_occur-highlight\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n\n    this.displayOccurContent = function(editor, options) {\n        this.$originalSession = editor.session;\n        var found = this.matchingLines(editor.session, options);\n        var lines = found.map(function(foundLine) { return foundLine.content; });\n        var occurSession = new EditSession(lines.join('\\n'));\n        occurSession.$occur = this;\n        occurSession.$occurMatchingLines = found;\n        editor.setSession(occurSession);\n        this.$useEmacsStyleLineStart = this.$originalSession.$useEmacsStyleLineStart;\n        occurSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n        this.highlight(occurSession, options.re);\n        occurSession._emit('changeBackMarker');\n    };\n\n    this.displayOriginalContent = function(editor) {\n        editor.setSession(this.$originalSession);\n        this.$originalSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n    };\n    this.originalToOccurPosition = function(session, pos) {\n        var lines = session.$occurMatchingLines;\n        var nullPos = {row: 0, column: 0};\n        if (!lines) return nullPos;\n        for (var i = 0; i < lines.length; i++) {\n            if (lines[i].row === pos.row)\n                return {row: i, column: pos.column};\n        }\n        return nullPos;\n    };\n    this.occurToOriginalPosition = function(session, pos) {\n        var lines = session.$occurMatchingLines;\n        if (!lines || !lines[pos.row])\n            return pos;\n        return {row: lines[pos.row].row, column: pos.column};\n    };\n\n    this.matchingLines = function(session, options) {\n        options = oop.mixin({}, options);\n        if (!session || !options.needle) return [];\n        var search = new Search();\n        search.set(options);\n        return search.findAll(session).reduce(function(lines, range) {\n            var row = range.start.row;\n            var last = lines[lines.length-1];\n            return last && last.row === row ?\n                lines :\n                lines.concat({row: row, content: session.getLine(row)});\n        }, []);\n    };\n\n}).call(Occur.prototype);\n\nvar dom = require('./lib/dom');\ndom.importCssString(\".ace_occur-highlight {\\n\\\n    border-radius: 4px;\\n\\\n    background-color: rgba(87, 255, 8, 0.25);\\n\\\n    position: absolute;\\n\\\n    z-index: 4;\\n\\\n    box-sizing: border-box;\\n\\\n    box-shadow: 0 0 4px rgb(91, 255, 50);\\n\\\n}\\n\\\n.ace_dark .ace_occur-highlight {\\n\\\n    background-color: rgb(80, 140, 85);\\n\\\n    box-shadow: 0 0 4px rgb(60, 120, 70);\\n\\\n}\\n\", \"incremental-occur-highlighting\");\n\nexports.Occur = Occur;\n\n});\n\ndefine(\"ace/commands/occur_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/occur\",\"ace/keyboard/hash_handler\",\"ace/lib/oop\"], function(require, exports, module) {\n\nvar config = require(\"../config\"),\n    Occur = require(\"../occur\").Occur;\nvar occurStartCommand = {\n    name: \"occur\",\n    exec: function(editor, options) {\n        var alreadyInOccur = !!editor.session.$occur;\n        var occurSessionActive = new Occur().enter(editor, options);\n        if (occurSessionActive && !alreadyInOccur)\n            OccurKeyboardHandler.installIn(editor);\n    },\n    readOnly: true\n};\n\nvar occurCommands = [{\n    name: \"occurexit\",\n    bindKey: 'esc|Ctrl-G',\n    exec: function(editor) {\n        var occur = editor.session.$occur;\n        if (!occur) return;\n        occur.exit(editor, {});\n        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);\n    },\n    readOnly: true\n}, {\n    name: \"occuraccept\",\n    bindKey: 'enter',\n    exec: function(editor) {\n        var occur = editor.session.$occur;\n        if (!occur) return;\n        occur.exit(editor, {translatePosition: true});\n        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);\n    },\n    readOnly: true\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar oop = require(\"../lib/oop\");\n\n\nfunction OccurKeyboardHandler() {}\n\noop.inherits(OccurKeyboardHandler, HashHandler);\n\n(function() {\n\n    this.isOccurHandler = true;\n\n    this.attach = function(editor) {\n        HashHandler.call(this, occurCommands, editor.commands.platform);\n        this.$editor = editor;\n    };\n\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function(data, hashId, key, keyCode) {\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        return (cmd && cmd.command) ? cmd : undefined;\n    };\n\n}).call(OccurKeyboardHandler.prototype);\n\nOccurKeyboardHandler.installIn = function(editor) {\n    var handler = new this();\n    editor.keyBinding.addKeyboardHandler(handler);\n    editor.commands.addCommands(occurCommands);\n};\n\nOccurKeyboardHandler.uninstallFrom = function(editor) {\n    editor.commands.removeCommands(occurCommands);\n    var handler = editor.getKeyboardHandler();\n    if (handler.isOccurHandler)\n        editor.keyBinding.removeKeyboardHandler(handler);\n};\n\nexports.occurStartCommand = occurStartCommand;\n\n});\n\ndefine(\"ace/commands/incremental_search_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/commands/occur_commands\"], function(require, exports, module) {\n\nvar config = require(\"../config\");\nvar oop = require(\"../lib/oop\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar occurStartCommand = require(\"./occur_commands\").occurStartCommand;\nexports.iSearchStartCommands = [{\n    name: \"iSearch\",\n    bindKey: {win: \"Ctrl-F\", mac: \"Command-F\"},\n    exec: function(editor, options) {\n        config.loadModule([\"core\", \"ace/incremental_search\"], function(e) {\n            var iSearch = e.iSearch = e.iSearch || new e.IncrementalSearch();\n            iSearch.activate(editor, options.backwards);\n            if (options.jumpToFirstMatch) iSearch.next(options);\n        });\n    },\n    readOnly: true\n}, {\n    name: \"iSearchBackwards\",\n    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {backwards: true}); },\n    readOnly: true\n}, {\n    name: \"iSearchAndGo\",\n    bindKey: {win: \"Ctrl-K\", mac: \"Command-G\"},\n    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {jumpToFirstMatch: true, useCurrentOrPrevSearch: true}); },\n    readOnly: true\n}, {\n    name: \"iSearchBackwardsAndGo\",\n    bindKey: {win: \"Ctrl-Shift-K\", mac: \"Command-Shift-G\"},\n    exec: function(editor) { editor.execCommand('iSearch', {jumpToFirstMatch: true, backwards: true, useCurrentOrPrevSearch: true}); },\n    readOnly: true\n}];\nexports.iSearchCommands = [{\n    name: \"restartSearch\",\n    bindKey: {win: \"Ctrl-F\", mac: \"Command-F\"},\n    exec: function(iSearch) {\n        iSearch.cancelSearch(true);\n    }\n}, {\n    name: \"searchForward\",\n    bindKey: {win: \"Ctrl-S|Ctrl-K\", mac: \"Ctrl-S|Command-G\"},\n    exec: function(iSearch, options) {\n        options.useCurrentOrPrevSearch = true;\n        iSearch.next(options);\n    }\n}, {\n    name: \"searchBackward\",\n    bindKey: {win: \"Ctrl-R|Ctrl-Shift-K\", mac: \"Ctrl-R|Command-Shift-G\"},\n    exec: function(iSearch, options) {\n        options.useCurrentOrPrevSearch = true;\n        options.backwards = true;\n        iSearch.next(options);\n    }\n}, {\n    name: \"extendSearchTerm\",\n    exec: function(iSearch, string) {\n        iSearch.addString(string);\n    }\n}, {\n    name: \"extendSearchTermSpace\",\n    bindKey: \"space\",\n    exec: function(iSearch) { iSearch.addString(' '); }\n}, {\n    name: \"shrinkSearchTerm\",\n    bindKey: \"backspace\",\n    exec: function(iSearch) {\n        iSearch.removeChar();\n    }\n}, {\n    name: 'confirmSearch',\n    bindKey: 'return',\n    exec: function(iSearch) { iSearch.deactivate(); }\n}, {\n    name: 'cancelSearch',\n    bindKey: 'esc|Ctrl-G',\n    exec: function(iSearch) { iSearch.deactivate(true); }\n}, {\n    name: 'occurisearch',\n    bindKey: 'Ctrl-O',\n    exec: function(iSearch) {\n        var options = oop.mixin({}, iSearch.$options);\n        iSearch.deactivate();\n        occurStartCommand.exec(iSearch.$editor, options);\n    }\n}, {\n    name: \"yankNextWord\",\n    bindKey: \"Ctrl-w\",\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorWordRight(); }),\n            string = ed.session.getTextRange(range);\n        iSearch.addString(string);\n    }\n}, {\n    name: \"yankNextChar\",\n    bindKey: \"Ctrl-Alt-y\",\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorRight(); }),\n            string = ed.session.getTextRange(range);\n        iSearch.addString(string);\n    }\n}, {\n    name: 'recenterTopBottom',\n    bindKey: 'Ctrl-l',\n    exec: function(iSearch) { iSearch.$editor.execCommand('recenterTopBottom'); }\n}, {\n    name: 'selectAllMatches',\n    bindKey: 'Ctrl-space',\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            hl = ed.session.$isearchHighlight,\n            ranges = hl && hl.cache ? hl.cache\n                .reduce(function(ranges, ea) {\n                    return ranges.concat(ea ? ea : []); }, []) : [];\n        iSearch.deactivate(false);\n        ranges.forEach(ed.selection.addRange.bind(ed.selection));\n    }\n}, {\n    name: 'searchAsRegExp',\n    bindKey: 'Alt-r',\n    exec: function(iSearch) {\n        iSearch.convertNeedleToRegExp();\n    }\n}].map(function(cmd) {\n    cmd.readOnly = true;\n    cmd.isIncrementalSearchCommand = true;\n    cmd.scrollIntoView = \"animate-cursor\";\n    return cmd;\n});\n\nfunction IncrementalSearchKeyboardHandler(iSearch) {\n    this.$iSearch = iSearch;\n}\n\noop.inherits(IncrementalSearchKeyboardHandler, HashHandler);\n\n(function() {\n\n    this.attach = function(editor) {\n        var iSearch = this.$iSearch;\n        HashHandler.call(this, exports.iSearchCommands, editor.commands.platform);\n        this.$commandExecHandler = editor.commands.addEventListener('exec', function(e) {\n            if (!e.command.isIncrementalSearchCommand)\n                return iSearch.deactivate();\n            e.stopPropagation();\n            e.preventDefault();\n            var scrollTop = editor.session.getScrollTop();\n            var result = e.command.exec(iSearch, e.args || {});\n            editor.renderer.scrollCursorIntoView(null, 0.5);\n            editor.renderer.animateScrolling(scrollTop);\n            return result;\n        });\n    };\n\n    this.detach = function(editor) {\n        if (!this.$commandExecHandler) return;\n        editor.commands.removeEventListener('exec', this.$commandExecHandler);\n        delete this.$commandExecHandler;\n    };\n\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function(data, hashId, key, keyCode) {\n        if (((hashId === 1/*ctrl*/ || hashId === 8/*command*/) && key === 'v')\n         || (hashId === 1/*ctrl*/ && key === 'y')) return null;\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        if (cmd.command) { return cmd; }\n        if (hashId == -1) {\n            var extendCmd = this.commands.extendSearchTerm;\n            if (extendCmd) { return {command: extendCmd, args: key}; }\n        }\n        return false;\n    };\n\n}).call(IncrementalSearchKeyboardHandler.prototype);\n\n\nexports.IncrementalSearchKeyboardHandler = IncrementalSearchKeyboardHandler;\n\n});\n\ndefine(\"ace/incremental_search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/search_highlight\",\"ace/commands/incremental_search_commands\",\"ace/lib/dom\",\"ace/commands/command_manager\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar iSearchCommandModule = require(\"./commands/incremental_search_commands\");\nvar ISearchKbd = iSearchCommandModule.IncrementalSearchKeyboardHandler;\nfunction IncrementalSearch() {\n    this.$options = {wrap: false, skipCurrent: false};\n    this.$keyboardHandler = new ISearchKbd(this);\n}\n\noop.inherits(IncrementalSearch, Search);\n\nfunction isRegExp(obj) {\n    return obj instanceof RegExp;\n}\n\nfunction regExpToObject(re) {\n    var string = String(re),\n        start = string.indexOf('/'),\n        flagStart = string.lastIndexOf('/');\n    return {\n        expression: string.slice(start+1, flagStart),\n        flags: string.slice(flagStart+1)\n    };\n}\n\nfunction stringToRegExp(string, flags) {\n    try {\n        return new RegExp(string, flags);\n    } catch (e) { return string; }\n}\n\nfunction objectToRegExp(obj) {\n    return stringToRegExp(obj.expression, obj.flags);\n}\n\n(function() {\n\n    this.activate = function(ed, backwards) {\n        this.$editor = ed;\n        this.$startPos = this.$currentPos = ed.getCursorPosition();\n        this.$options.needle = '';\n        this.$options.backwards = backwards;\n        ed.keyBinding.addKeyboardHandler(this.$keyboardHandler);\n        this.$originalEditorOnPaste = ed.onPaste; ed.onPaste = this.onPaste.bind(this);\n        this.$mousedownHandler = ed.addEventListener('mousedown', this.onMouseDown.bind(this));\n        this.selectionFix(ed);\n        this.statusMessage(true);\n    };\n\n    this.deactivate = function(reset) {\n        this.cancelSearch(reset);\n        var ed = this.$editor;\n        ed.keyBinding.removeKeyboardHandler(this.$keyboardHandler);\n        if (this.$mousedownHandler) {\n            ed.removeEventListener('mousedown', this.$mousedownHandler);\n            delete this.$mousedownHandler;\n        }\n        ed.onPaste = this.$originalEditorOnPaste;\n        this.message('');\n    };\n\n    this.selectionFix = function(editor) {\n        if (editor.selection.isEmpty() && !editor.session.$emacsMark) {\n            editor.clearSelection();\n        }\n    };\n\n    this.highlight = function(regexp) {\n        var sess = this.$editor.session,\n            hl = sess.$isearchHighlight = sess.$isearchHighlight || sess.addDynamicMarker(\n                new SearchHighlight(null, \"ace_isearch-result\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n\n    this.cancelSearch = function(reset) {\n        var e = this.$editor;\n        this.$prevNeedle = this.$options.needle;\n        this.$options.needle = '';\n        if (reset) {\n            e.moveCursorToPosition(this.$startPos);\n            this.$currentPos = this.$startPos;\n        } else {\n            e.pushEmacsMark && e.pushEmacsMark(this.$startPos, false);\n        }\n        this.highlight(null);\n        return Range.fromPoints(this.$currentPos, this.$currentPos);\n    };\n\n    this.highlightAndFindWithNeedle = function(moveToNext, needleUpdateFunc) {\n        if (!this.$editor) return null;\n        var options = this.$options;\n        if (needleUpdateFunc) {\n            options.needle = needleUpdateFunc.call(this, options.needle || '') || '';\n        }\n        if (options.needle.length === 0) {\n            this.statusMessage(true);\n            return this.cancelSearch(true);\n        }\n        options.start = this.$currentPos;\n        var session = this.$editor.session,\n            found = this.find(session),\n            shouldSelect = this.$editor.emacsMark ?\n                !!this.$editor.emacsMark() : !this.$editor.selection.isEmpty();\n        if (found) {\n            if (options.backwards) found = Range.fromPoints(found.end, found.start);\n            this.$editor.selection.setRange(Range.fromPoints(shouldSelect ? this.$startPos : found.end, found.end));\n            if (moveToNext) this.$currentPos = found.end;\n            this.highlight(options.re);\n        }\n\n        this.statusMessage(found);\n\n        return found;\n    };\n\n    this.addString = function(s) {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            if (!isRegExp(needle))\n              return needle + s;\n            var reObj = regExpToObject(needle);\n            reObj.expression += s;\n            return objectToRegExp(reObj);\n        });\n    };\n\n    this.removeChar = function(c) {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            if (!isRegExp(needle))\n              return needle.substring(0, needle.length-1);\n            var reObj = regExpToObject(needle);\n            reObj.expression = reObj.expression.substring(0, reObj.expression.length-1);\n            return objectToRegExp(reObj);\n        });\n    };\n\n    this.next = function(options) {\n        options = options || {};\n        this.$options.backwards = !!options.backwards;\n        this.$currentPos = this.$editor.getCursorPosition();\n        return this.highlightAndFindWithNeedle(true, function(needle) {\n            return options.useCurrentOrPrevSearch && needle.length === 0 ?\n                this.$prevNeedle || '' : needle;\n        });\n    };\n\n    this.onMouseDown = function(evt) {\n        this.deactivate();\n        return true;\n    };\n\n    this.onPaste = function(text) {\n        this.addString(text);\n    };\n\n    this.convertNeedleToRegExp = function() {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            return isRegExp(needle) ? needle : stringToRegExp(needle, 'ig');\n        });\n    };\n\n    this.convertNeedleToString = function() {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            return isRegExp(needle) ? regExpToObject(needle).expression : needle;\n        });\n    };\n\n    this.statusMessage = function(found) {\n        var options = this.$options, msg = '';\n        msg += options.backwards ? 'reverse-' : '';\n        msg += 'isearch: ' + options.needle;\n        msg += found ? '' : ' (not found)';\n        this.message(msg);\n    };\n\n    this.message = function(msg) {\n        if (this.$editor.showCommandLine) {\n            this.$editor.showCommandLine(msg);\n            this.$editor.focus();\n        } else {\n            console.log(msg);\n        }\n    };\n\n}).call(IncrementalSearch.prototype);\n\n\nexports.IncrementalSearch = IncrementalSearch;\n\nvar dom = require('./lib/dom');\ndom.importCssString && dom.importCssString(\"\\\n.ace_marker-layer .ace_isearch-result {\\\n  position: absolute;\\\n  z-index: 6;\\\n  box-sizing: border-box;\\\n}\\\ndiv.ace_isearch-result {\\\n  border-radius: 4px;\\\n  background-color: rgba(255, 200, 0, 0.5);\\\n  box-shadow: 0 0 4px rgb(255, 200, 0);\\\n}\\\n.ace_dark div.ace_isearch-result {\\\n  background-color: rgb(100, 110, 160);\\\n  box-shadow: 0 0 4px rgb(80, 90, 140);\\\n}\", \"incremental-search-highlighting\");\nvar commands = require(\"./commands/command_manager\");\n(function() {\n    this.setupIncrementalSearch = function(editor, val) {\n        if (this.usesIncrementalSearch == val) return;\n        this.usesIncrementalSearch = val;\n        var iSearchCommands = iSearchCommandModule.iSearchStartCommands;\n        var method = val ? 'addCommands' : 'removeCommands';\n        this[method](iSearchCommands);\n    };\n}).call(commands.CommandManager.prototype);\nvar Editor = require(\"./editor\").Editor;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    useIncrementalSearch: {\n        set: function(val) {\n            this.keyBinding.$handlers.forEach(function(handler) {\n                if (handler.setupIncrementalSearch) {\n                    handler.setupIncrementalSearch(this, val);\n                }\n            });\n            this._emit('incrementalSearchSettingChanged', {isEnabled: val});\n        }\n    }\n});\n\n});\n\ndefine(\"ace/keyboard/emacs\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/incremental_search\",\"ace/commands/incremental_search_commands\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nrequire(\"../incremental_search\");\nvar iSearchCommandModule = require(\"../commands/incremental_search_commands\");\n\n\nvar HashHandler = require(\"./hash_handler\").HashHandler;\nexports.handler = new HashHandler();\n\nexports.handler.isEmacs = true;\nexports.handler.$id = \"ace/keyboard/emacs\";\n\nvar initialized = false;\nvar $formerLongWords;\nvar $formerLineStart;\n\nexports.handler.attach = function(editor) {\n    if (!initialized) {\n        initialized = true;\n        dom.importCssString('\\\n            .emacs-mode .ace_cursor{\\\n                border: 1px rgba(50,250,50,0.8) solid!important;\\\n                box-sizing: border-box!important;\\\n                background-color: rgba(0,250,0,0.9);\\\n                opacity: 0.5;\\\n            }\\\n            .emacs-mode .ace_hidden-cursors .ace_cursor{\\\n                opacity: 1;\\\n                background-color: transparent;\\\n            }\\\n            .emacs-mode .ace_overwrite-cursors .ace_cursor {\\\n                opacity: 1;\\\n                background-color: transparent;\\\n                border-width: 0 0 2px 2px !important;\\\n            }\\\n            .emacs-mode .ace_text-layer {\\\n                z-index: 4\\\n            }\\\n            .emacs-mode .ace_cursor-layer {\\\n                z-index: 2\\\n            }', 'emacsMode'\n        );\n    }\n    $formerLongWords = editor.session.$selectLongWords;\n    editor.session.$selectLongWords = true;\n    $formerLineStart = editor.session.$useEmacsStyleLineStart;\n    editor.session.$useEmacsStyleLineStart = true;\n\n    editor.session.$emacsMark = null; // the active mark\n    editor.session.$emacsMarkRing = editor.session.$emacsMarkRing || [];\n\n    editor.emacsMark = function() {\n        return this.session.$emacsMark;\n    };\n\n    editor.setEmacsMark = function(p) {\n        this.session.$emacsMark = p;\n    };\n\n    editor.pushEmacsMark = function(p, activate) {\n        var prevMark = this.session.$emacsMark;\n        if (prevMark)\n            this.session.$emacsMarkRing.push(prevMark);\n        if (!p || activate) this.setEmacsMark(p);\n        else this.session.$emacsMarkRing.push(p);\n    };\n\n    editor.popEmacsMark = function() {\n        var mark = this.emacsMark();\n        if (mark) { this.setEmacsMark(null); return mark; }\n        return this.session.$emacsMarkRing.pop();\n    };\n\n    editor.getLastEmacsMark = function(p) {\n        return this.session.$emacsMark || this.session.$emacsMarkRing.slice(-1)[0];\n    };\n\n    editor.emacsMarkForSelection = function(replacement) {\n        var sel = this.selection,\n            multiRangeLength = this.multiSelect ?\n                this.multiSelect.getAllRanges().length : 1,\n            selIndex = sel.index || 0,\n            markRing = this.session.$emacsMarkRing,\n            markIndex = markRing.length - (multiRangeLength - selIndex),\n            lastMark = markRing[markIndex] || sel.anchor;\n        if (replacement) {\n            markRing.splice(markIndex, 1,\n                \"row\" in replacement && \"column\" in replacement ?\n                    replacement : undefined);\n        }\n        return lastMark;\n    };\n\n    editor.on(\"click\", $resetMarkMode);\n    editor.on(\"changeSession\", $kbSessionChange);\n    editor.renderer.$blockCursor = true;\n    editor.setStyle(\"emacs-mode\");\n    editor.commands.addCommands(commands);\n    exports.handler.platform = editor.commands.platform;\n    editor.$emacsModeHandler = this;\n    editor.addEventListener('copy', this.onCopy);\n    editor.addEventListener('paste', this.onPaste);\n};\n\nexports.handler.detach = function(editor) {\n    editor.renderer.$blockCursor = false;\n    editor.session.$selectLongWords = $formerLongWords;\n    editor.session.$useEmacsStyleLineStart = $formerLineStart;\n    editor.removeEventListener(\"click\", $resetMarkMode);\n    editor.removeEventListener(\"changeSession\", $kbSessionChange);\n    editor.unsetStyle(\"emacs-mode\");\n    editor.commands.removeCommands(commands);\n    editor.removeEventListener('copy', this.onCopy);\n    editor.removeEventListener('paste', this.onPaste);\n    editor.$emacsModeHandler = null;\n};\n\nvar $kbSessionChange = function(e) {\n    if (e.oldSession) {\n        e.oldSession.$selectLongWords = $formerLongWords;\n        e.oldSession.$useEmacsStyleLineStart = $formerLineStart;\n    }\n\n    $formerLongWords = e.session.$selectLongWords;\n    e.session.$selectLongWords = true;\n    $formerLineStart = e.session.$useEmacsStyleLineStart;\n    e.session.$useEmacsStyleLineStart = true;\n\n    if (!e.session.hasOwnProperty('$emacsMark'))\n        e.session.$emacsMark = null;\n    if (!e.session.hasOwnProperty('$emacsMarkRing'))\n        e.session.$emacsMarkRing = [];\n};\n\nvar $resetMarkMode = function(e) {\n    e.editor.session.$emacsMark = null;\n};\n\nvar keys = require(\"../lib/keys\").KEY_MODS;\nvar eMods = {C: \"ctrl\", S: \"shift\", M: \"alt\", CMD: \"command\"};\nvar combinations = [\"C-S-M-CMD\",\n                    \"S-M-CMD\", \"C-M-CMD\", \"C-S-CMD\", \"C-S-M\",\n                    \"M-CMD\", \"S-CMD\", \"S-M\", \"C-CMD\", \"C-M\", \"C-S\",\n                    \"CMD\", \"M\", \"S\", \"C\"];\ncombinations.forEach(function(c) {\n    var hashId = 0;\n    c.split(\"-\").forEach(function(c) {\n        hashId = hashId | keys[eMods[c]];\n    });\n    eMods[hashId] = c.toLowerCase() + \"-\";\n});\n\nexports.handler.onCopy = function(e, editor) {\n    if (editor.$handlesEmacsOnCopy) return;\n    editor.$handlesEmacsOnCopy = true;\n    exports.handler.commands.killRingSave.exec(editor);\n    editor.$handlesEmacsOnCopy = false;\n};\n\nexports.handler.onPaste = function(e, editor) {\n    editor.pushEmacsMark(editor.getCursorPosition());\n};\n\nexports.handler.bindKey = function(key, command) {\n    if (typeof key == \"object\")\n        key = key[this.platform];\n    if (!key)\n        return;\n\n    var ckb = this.commandKeyBinding;\n    key.split(\"|\").forEach(function(keyPart) {\n        keyPart = keyPart.toLowerCase();\n        ckb[keyPart] = command;\n        var keyParts = keyPart.split(\" \").slice(0,-1);\n        keyParts.reduce(function(keyMapKeys, keyPart, i) {\n            var prefix = keyMapKeys[i-1] ? keyMapKeys[i-1] + ' ' : '';\n            return keyMapKeys.concat([prefix + keyPart]);\n        }, []).forEach(function(keyPart) {\n            if (!ckb[keyPart]) ckb[keyPart] = \"null\";\n        });\n    }, this);\n};\n\nexports.handler.getStatusText = function(editor, data) {\n  var str = \"\";\n  if (data.count)\n    str += data.count;\n  if (data.keyChain)\n    str += \" \" + data.keyChain;\n  return str;\n};\n\nexports.handler.handleKeyboard = function(data, hashId, key, keyCode) {\n    if (keyCode === -1) return undefined;\n\n    var editor = data.editor;\n    editor._signal(\"changeStatus\");\n    if (hashId == -1) {\n        editor.pushEmacsMark();\n        if (data.count) {\n            var str = new Array(data.count + 1).join(key);\n            data.count = null;\n            return {command: \"insertstring\", args: str};\n        }\n    }\n\n    var modifier = eMods[hashId];\n    if (modifier == \"c-\" || data.count) {\n        var count = parseInt(key[key.length - 1]);\n        if (typeof count === 'number' && !isNaN(count)) {\n            data.count = Math.max(data.count, 0) || 0;\n            data.count = 10 * data.count + count;\n            return {command: \"null\"};\n        }\n    }\n    if (modifier) key = modifier + key;\n    if (data.keyChain) key = data.keyChain += \" \" + key;\n    var command = this.commandKeyBinding[key];\n    data.keyChain = command == \"null\" ? key : \"\";\n    if (!command) return undefined;\n    if (command === \"null\") return {command: \"null\"};\n\n    if (command === \"universalArgument\") {\n        data.count = -4;\n        return {command: \"null\"};\n    }\n    var args;\n    if (typeof command !== \"string\") {\n        args = command.args;\n        if (command.command) command = command.command;\n        if (command === \"goorselect\") {\n            command = editor.emacsMark() ? args[1] : args[0];\n            args = null;\n        }\n    }\n\n    if (typeof command === \"string\") {\n        if (command === \"insertstring\" ||\n            command === \"splitline\" ||\n            command === \"togglecomment\") {\n            editor.pushEmacsMark();\n        }\n        command = this.commands[command] || editor.commands.commands[command];\n        if (!command) return undefined;\n    }\n\n    if (!command.readOnly && !command.isYank)\n        data.lastCommand = null;\n\n    if (!command.readOnly && editor.emacsMark())\n        editor.setEmacsMark(null);\n        \n    if (data.count) {\n        var count = data.count;\n        data.count = 0;\n        if (!command || !command.handlesCount) {\n            return {\n                args: args,\n                command: {\n                    exec: function(editor, args) {\n                        for (var i = 0; i < count; i++)\n                            command.exec(editor, args);\n                    },\n                    multiSelectAction: command.multiSelectAction\n                }\n            };\n        } else {\n            if (!args) args = {};\n            if (typeof args === 'object') args.count = count;\n        }\n    }\n\n    return {command: command, args: args};\n};\n\nexports.emacsKeys = {\n    \"Up|C-p\"      : {command: \"goorselect\", args: [\"golineup\",\"selectup\"]},\n    \"Down|C-n\"    : {command: \"goorselect\", args: [\"golinedown\",\"selectdown\"]},\n    \"Left|C-b\"    : {command: \"goorselect\", args: [\"gotoleft\",\"selectleft\"]},\n    \"Right|C-f\"   : {command: \"goorselect\", args: [\"gotoright\",\"selectright\"]},\n    \"C-Left|M-b\"  : {command: \"goorselect\", args: [\"gotowordleft\",\"selectwordleft\"]},\n    \"C-Right|M-f\" : {command: \"goorselect\", args: [\"gotowordright\",\"selectwordright\"]},\n    \"Home|C-a\"    : {command: \"goorselect\", args: [\"gotolinestart\",\"selecttolinestart\"]},\n    \"End|C-e\"     : {command: \"goorselect\", args: [\"gotolineend\",\"selecttolineend\"]},\n    \"C-Home|S-M-,\": {command: \"goorselect\", args: [\"gotostart\",\"selecttostart\"]},\n    \"C-End|S-M-.\" : {command: \"goorselect\", args: [\"gotoend\",\"selecttoend\"]},\n    \"S-Up|S-C-p\"      : \"selectup\",\n    \"S-Down|S-C-n\"    : \"selectdown\",\n    \"S-Left|S-C-b\"    : \"selectleft\",\n    \"S-Right|S-C-f\"   : \"selectright\",\n    \"S-C-Left|S-M-b\"  : \"selectwordleft\",\n    \"S-C-Right|S-M-f\" : \"selectwordright\",\n    \"S-Home|S-C-a\"    : \"selecttolinestart\",\n    \"S-End|S-C-e\"     : \"selecttolineend\",\n    \"S-C-Home\"        : \"selecttostart\",\n    \"S-C-End\"         : \"selecttoend\",\n\n    \"C-l\" : \"recenterTopBottom\",\n    \"M-s\" : \"centerselection\",\n    \"M-g\": \"gotoline\",\n    \"C-x C-p\": \"selectall\",\n    \"C-Down\": {command: \"goorselect\", args: [\"gotopagedown\",\"selectpagedown\"]},\n    \"C-Up\": {command: \"goorselect\", args: [\"gotopageup\",\"selectpageup\"]},\n    \"PageDown|C-v\": {command: \"goorselect\", args: [\"gotopagedown\",\"selectpagedown\"]},\n    \"PageUp|M-v\": {command: \"goorselect\", args: [\"gotopageup\",\"selectpageup\"]},\n    \"S-C-Down\": \"selectpagedown\",\n    \"S-C-Up\": \"selectpageup\",\n\n    \"C-s\": \"iSearch\",\n    \"C-r\": \"iSearchBackwards\",\n\n    \"M-C-s\": \"findnext\",\n    \"M-C-r\": \"findprevious\",\n    \"S-M-5\": \"replace\",\n    \"Backspace\": \"backspace\",\n    \"Delete|C-d\": \"del\",\n    \"Return|C-m\": {command: \"insertstring\", args: \"\\n\"}, // \"newline\"\n    \"C-o\": \"splitline\",\n\n    \"M-d|C-Delete\": {command: \"killWord\", args: \"right\"},\n    \"C-Backspace|M-Backspace|M-Delete\": {command: \"killWord\", args: \"left\"},\n    \"C-k\": \"killLine\",\n\n    \"C-y|S-Delete\": \"yank\",\n    \"M-y\": \"yankRotate\",\n    \"C-g\": \"keyboardQuit\",\n\n    \"C-w|C-S-W\": \"killRegion\",\n    \"M-w\": \"killRingSave\",\n    \"C-Space\": \"setMark\",\n    \"C-x C-x\": \"exchangePointAndMark\",\n\n    \"C-t\": \"transposeletters\",\n    \"M-u\": \"touppercase\",    // Doesn't work\n    \"M-l\": \"tolowercase\",\n    \"M-/\": \"autocomplete\",   // Doesn't work\n    \"C-u\": \"universalArgument\",\n\n    \"M-;\": \"togglecomment\",\n\n    \"C-/|C-x u|S-C--|C-z\": \"undo\",\n    \"S-C-/|S-C-x u|C--|S-C-z\": \"redo\", // infinite undo?\n    \"C-x r\":  \"selectRectangularRegion\",\n    \"M-x\": {command: \"focusCommandLine\", args: \"M-x \"}\n};\n\n\nexports.handler.bindKeys(exports.emacsKeys);\n\nexports.handler.addCommands({\n    recenterTopBottom: function(editor) {\n        var renderer = editor.renderer;\n        var pos = renderer.$cursorLayer.getPixelPosition();\n        var h = renderer.$size.scrollerHeight - renderer.lineHeight;\n        var scrollTop = renderer.scrollTop;\n        if (Math.abs(pos.top - scrollTop) < 2) {\n            scrollTop = pos.top - h;\n        } else if (Math.abs(pos.top - scrollTop - h * 0.5) < 2) {\n            scrollTop = pos.top;\n        } else {\n            scrollTop = pos.top - h * 0.5;\n        }\n        editor.session.setScrollTop(scrollTop);\n    },\n    selectRectangularRegion:  function(editor) {\n        editor.multiSelect.toggleBlockSelection();\n    },\n    setMark:  {\n        exec: function(editor, args) {\n\n            if (args && args.count) {\n                if (editor.inMultiSelectMode) editor.forEachSelection(moveToMark);\n                else moveToMark();\n                moveToMark();\n                return;\n            }\n\n            var mark = editor.emacsMark(),\n                ranges = editor.selection.getAllRanges(),\n                rangePositions = ranges.map(function(r) { return {row: r.start.row, column: r.start.column}; }),\n                transientMarkModeActive = true,\n                hasNoSelection = ranges.every(function(range) { return range.isEmpty(); });\n            if (transientMarkModeActive && (mark || !hasNoSelection)) {\n                if (editor.inMultiSelectMode) editor.forEachSelection({exec: editor.clearSelection.bind(editor)});\n                else editor.clearSelection();\n                if (mark) editor.pushEmacsMark(null);\n                return;\n            }\n\n            if (!mark) {\n                rangePositions.forEach(function(pos) { editor.pushEmacsMark(pos); });\n                editor.setEmacsMark(rangePositions[rangePositions.length-1]);\n                return;\n            }\n\n            function moveToMark() {\n                var mark = editor.popEmacsMark();\n                mark && editor.moveCursorToPosition(mark);\n            }\n\n        },\n        readOnly: true,\n        handlesCount: true\n    },\n    exchangePointAndMark: {\n        exec: function exchangePointAndMark$exec(editor, args) {\n            var sel = editor.selection;\n            if (!args.count && !sel.isEmpty()) { // just invert selection\n                sel.setSelectionRange(sel.getRange(), !sel.isBackwards());\n                return;\n            }\n\n            if (args.count) { // replace mark and point\n                var pos = {row: sel.lead.row, column: sel.lead.column};\n                sel.clearSelection();\n                sel.moveCursorToPosition(editor.emacsMarkForSelection(pos));\n            } else { // create selection to last mark\n                sel.selectToPosition(editor.emacsMarkForSelection());\n            }\n        },\n        readOnly: true,\n        handlesCount: true,\n        multiSelectAction: \"forEach\"\n    },\n    killWord: {\n        exec: function(editor, dir) {\n            editor.clearSelection();\n            if (dir == \"left\")\n                editor.selection.selectWordLeft();\n            else\n                editor.selection.selectWordRight();\n\n            var range = editor.getSelectionRange();\n            var text = editor.session.getTextRange(range);\n            exports.killRing.add(text);\n\n            editor.session.remove(range);\n            editor.clearSelection();\n        },\n        multiSelectAction: \"forEach\"\n    },\n    killLine: function(editor) {\n        editor.pushEmacsMark(null);\n        editor.clearSelection();\n        var range = editor.getSelectionRange();\n        var line = editor.session.getLine(range.start.row);\n        range.end.column = line.length;\n        line = line.substr(range.start.column);\n        \n        var foldLine = editor.session.getFoldLine(range.start.row);\n        if (foldLine && range.end.row != foldLine.end.row) {\n            range.end.row = foldLine.end.row;\n            line = \"x\";\n        }\n        if (/^\\s*$/.test(line)) {\n            range.end.row++;\n            line = editor.session.getLine(range.end.row);\n            range.end.column = /^\\s*$/.test(line) ? line.length : 0;\n        }\n        var text = editor.session.getTextRange(range);\n        if (editor.prevOp.command == this)\n            exports.killRing.append(text);\n        else\n            exports.killRing.add(text);\n\n        editor.session.remove(range);\n        editor.clearSelection();\n    },\n    yank: function(editor) {\n        editor.onPaste(exports.killRing.get() || '');\n        editor.keyBinding.$data.lastCommand = \"yank\";\n    },\n    yankRotate: function(editor) {\n        if (editor.keyBinding.$data.lastCommand != \"yank\")\n            return;\n        editor.undo();\n        editor.session.$emacsMarkRing.pop(); // also undo recording mark\n        editor.onPaste(exports.killRing.rotate());\n        editor.keyBinding.$data.lastCommand = \"yank\";\n    },\n    killRegion: {\n        exec: function(editor) {\n            exports.killRing.add(editor.getCopyText());\n            editor.commands.byName.cut.exec(editor);\n            editor.setEmacsMark(null);\n        },\n        readOnly: true,\n        multiSelectAction: \"forEach\"\n    },\n    killRingSave: {\n        exec: function(editor) {\n\n            editor.$handlesEmacsOnCopy = true;\n            var marks = editor.session.$emacsMarkRing.slice(),\n                deselectedMarks = [];\n            exports.killRing.add(editor.getCopyText());\n\n            setTimeout(function() {\n                function deselect() {\n                    var sel = editor.selection, range = sel.getRange(),\n                        pos = sel.isBackwards() ? range.end : range.start;\n                    deselectedMarks.push({row: pos.row, column: pos.column});\n                    sel.clearSelection();\n                }\n                editor.$handlesEmacsOnCopy = false;\n                if (editor.inMultiSelectMode) editor.forEachSelection({exec: deselect});\n                else deselect();\n                editor.session.$emacsMarkRing = marks.concat(deselectedMarks.reverse());\n            }, 0);\n        },\n        readOnly: true\n    },\n    keyboardQuit: function(editor) {\n        editor.selection.clearSelection();\n        editor.setEmacsMark(null);\n        editor.keyBinding.$data.count = null;\n    },\n    focusCommandLine: function(editor, arg) {\n        if (editor.showCommandLine)\n            editor.showCommandLine(arg);\n    }\n});\n\nexports.handler.addCommands(iSearchCommandModule.iSearchStartCommands);\n\nvar commands = exports.handler.commands;\ncommands.yank.isYank = true;\ncommands.yankRotate.isYank = true;\n\nexports.killRing = {\n    $data: [],\n    add: function(str) {\n        str && this.$data.push(str);\n        if (this.$data.length > 30)\n            this.$data.shift();\n    },\n    append: function(str) {\n        var idx = this.$data.length - 1;\n        var text = this.$data[idx] || \"\";\n        if (str) text += str;\n        if (text) this.$data[idx] = text;\n    },\n    get: function(n) {\n        n = n || 1;\n        return this.$data.slice(this.$data.length-n, this.$data.length).reverse().join('\\n');\n    },\n    pop: function() {\n        if (this.$data.length > 1)\n            this.$data.pop();\n        return this.get();\n    },\n    rotate: function() {\n        this.$data.unshift(this.$data.pop());\n        return this.get();\n    }\n};\n\n});                (function() {\n                    window.require([\"ace/keyboard/emacs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/keybinding-sublime.js",
    "content": "define(\"ace/keyboard/sublime\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/oop\",\"ace/lib/useragent\",\"ace/keyboard/hash_handler\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar oop = require(\"../lib/oop\");\nvar useragent = require(\"../lib/useragent\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\n\nfunction moveBySubWords(editor, direction, extend) {\n    var selection = editor.selection;\n    var row = selection.lead.row;\n    var column = selection.lead.column;\n\n    var line = editor.session.getLine(row);\n    if (!line[column + direction]) {\n        var method = (extend ? \"selectWord\" : \"moveCursorShortWord\")\n            + (direction == 1 ? \"Right\" : \"Left\");\n        return editor.selection[method]();\n    }\n    if (direction == -1) column--;\n    while (line[column]) {\n        var type = getType(line[column]) + getType(line[column + direction]);\n        column += direction;\n        if (direction == 1) {\n            if (type == \"WW\" && getType(line[column + 1]) == \"w\")\n                break;\n        }\n        else {\n            if (type == \"wW\") {\n                if (getType(line[column - 1]) == \"W\") {\n                    column -= 1;\n                    break;\n                } else {\n                    continue;\n                }\n            }\n            if (type == \"Ww\")\n                break;\n        }\n        if (/w[s_oW]|_[sWo]|o[s_wW]|s[W]|W[so]/.test(type))\n            break;\n    }\n    if (direction == -1) column++;\n    if (extend)\n        editor.selection.moveCursorTo(row, column);\n    else\n        editor.selection.moveTo(row, column);\n    \n    function getType(x) {\n        if (!x) return \"-\";\n        if (/\\s/.test(x)) return \"s\";\n        if (x == \"_\") return \"_\";\n        if (x.toUpperCase() == x && x.toLowerCase() != x) return \"W\";\n        if (x.toUpperCase() != x && x.toLowerCase() == x) return \"w\";\n        return \"o\";\n    }\n}\n\nexports.handler = new HashHandler();\n \nexports.handler.addCommands([{\n    name: \"find_all_under\",\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        editor.findAll();\n    },\n    readOnly: true\n}, {\n    name: \"find_under\",\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        editor.findNext();\n    },\n    readOnly: true\n}, {\n    name: \"find_under_prev\",\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        editor.findPrevious();\n    },\n    readOnly: true\n}, {\n    name: \"find_under_expand\",\n    exec: function(editor) {\n        editor.selectMore(1, false, true);\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"find_under_expand_skip\",\n    exec: function(editor) {\n        editor.selectMore(1, true, true);\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"delete_to_hard_bol\",\n    exec: function(editor) {\n        var pos = editor.selection.getCursor();\n        editor.session.remove({\n            start: { row: pos.row, column: 0 },\n            end: pos\n        });\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"delete_to_hard_eol\",\n    exec: function(editor) {\n        var pos = editor.selection.getCursor();\n        editor.session.remove({\n            start: pos,\n            end: { row: pos.row, column: Infinity }\n        });\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"moveToWordStartLeft\",\n    exec: function(editor) {\n        editor.selection.moveCursorLongWordLeft();\n        editor.clearSelection();\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"moveToWordEndRight\",\n    exec: function(editor) {\n        editor.selection.moveCursorLongWordRight();\n        editor.clearSelection();\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"selectToWordStartLeft\",\n    exec: function(editor) {\n        var sel = editor.selection;\n        sel.$moveSelection(sel.moveCursorLongWordLeft);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"selectToWordEndRight\",\n    exec: function(editor) {\n        var sel = editor.selection;\n        sel.$moveSelection(sel.moveCursorLongWordRight);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"selectSubWordRight\",\n    exec: function(editor) {\n        moveBySubWords(editor, 1, true);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectSubWordLeft\",\n    exec: function(editor) {\n        moveBySubWords(editor, -1, true);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"moveSubWordRight\",\n    exec: function(editor) {\n        moveBySubWords(editor, 1);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"moveSubWordLeft\",\n    exec: function(editor) {\n        moveBySubWords(editor, -1);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}]);\n\n\n[{\n    bindKey: { mac: \"cmd-k cmd-backspace|cmd-backspace\", win: \"ctrl-shift-backspace|ctrl-k ctrl-backspace\" },\n    name: \"removetolinestarthard\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-k|cmd-delete|ctrl-k\", win: \"ctrl-shift-delete|ctrl-k ctrl-k\" },\n    name: \"removetolineendhard\"\n}, {\n    bindKey: { mac: \"cmd-shift-d\", win: \"ctrl-shift-d\" },\n    name: \"duplicateSelection\"\n}, {\n    bindKey: { mac: \"cmd-l\", win: \"ctrl-l\" },\n    name: \"expandtoline\"\n}, \n{\n    bindKey: {mac: \"cmd-shift-a\", win: \"ctrl-shift-a\"},\n    name: \"expandSelection\",\n    args: {to: \"tag\"}\n}, {\n    bindKey: {mac: \"cmd-shift-j\", win: \"ctrl-shift-j\"},\n    name: \"expandSelection\",\n    args: {to: \"indentation\"}\n}, {\n    bindKey: {mac: \"ctrl-shift-m\", win: \"ctrl-shift-m\"},\n    name: \"expandSelection\",\n    args: {to: \"brackets\"}\n}, {\n    bindKey: {mac: \"cmd-shift-space\", win: \"ctrl-shift-space\"},\n    name: \"expandSelection\",\n    args: {to: \"scope\"}\n},\n{\n    bindKey: { mac: \"ctrl-cmd-g\", win: \"alt-f3\" },\n    name: \"find_all_under\"\n}, {\n    bindKey: { mac: \"alt-cmd-g\", win: \"ctrl-f3\" },\n    name: \"find_under\"\n}, {\n    bindKey: { mac: \"shift-alt-cmd-g\", win: \"ctrl-shift-f3\" },\n    name: \"find_under_prev\"\n}, {\n    bindKey: { mac: \"cmd-g\", win: \"f3\" },\n    name: \"findnext\"\n}, {\n    bindKey: { mac: \"shift-cmd-g\", win: \"shift-f3\" },\n    name: \"findprevious\"\n}, {\n    bindKey: { mac: \"cmd-d\", win: \"ctrl-d\" },\n    name: \"find_under_expand\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-d\", win: \"ctrl-k ctrl-d\" },\n    name: \"find_under_expand_skip\"\n}, \n{\n    bindKey: { mac: \"cmd-alt-[\", win: \"ctrl-shift-[\" },\n    name: \"toggleFoldWidget\"\n}, {\n    bindKey: { mac: \"cmd-alt-]\", win: \"ctrl-shift-]\" },\n    name: \"unfold\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-0|cmd-k cmd-j\", win: \"ctrl-k ctrl-0|ctrl-k ctrl-j\" },\n    name: \"unfoldall\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-1\", win: \"ctrl-k ctrl-1\" },\n    name: \"foldOther\",\n    args: { level: 1 }\n},\n{\n    bindKey: { win: \"ctrl-left\", mac: \"alt-left\" },\n    name: \"moveToWordStartLeft\"\n}, {\n    bindKey: { win: \"ctrl-right\", mac: \"alt-right\" },\n    name: \"moveToWordEndRight\"\n}, {\n    bindKey: { win: \"ctrl-shift-left\", mac: \"alt-shift-left\" },\n    name: \"selectToWordStartLeft\"\n}, {\n    bindKey: { win: \"ctrl-shift-right\", mac: \"alt-shift-right\" },\n    name: \"selectToWordEndRight\"\n}, \n{\n    bindKey: {mac: \"ctrl-alt-shift-right|ctrl-shift-right\", win: \"alt-shift-right\"},\n    name: \"selectSubWordRight\"\n}, {\n    bindKey: {mac: \"ctrl-alt-shift-left|ctrl-shift-left\", win: \"alt-shift-left\"},\n    name: \"selectSubWordLeft\"\n}, {\n    bindKey: {mac: \"ctrl-alt-right|ctrl-right\", win: \"alt-right\"},\n    name: \"moveSubWordRight\"\n}, {\n    bindKey: {mac: \"ctrl-alt-left|ctrl-left\", win: \"alt-left\"},\n    name: \"moveSubWordLeft\"\n}, \n{\n    bindKey: { mac: \"ctrl-m\", win: \"ctrl-m\" },\n    name: \"jumptomatching\",\n    args: { to: \"brackets\" }\n}, \n{\n    bindKey: { mac: \"ctrl-f6\", win: \"ctrl-f6\" },\n    name: \"goToNextError\"\n}, {\n    bindKey: { mac: \"ctrl-shift-f6\", win: \"ctrl-shift-f6\" },\n    name: \"goToPreviousError\"\n},\n\n{\n    bindKey: { mac: \"ctrl-o\" },\n    name: \"splitline\"\n}, \n{\n    bindKey: {mac: \"ctrl-shift-w\", win: \"alt-shift-w\"},\n    name: \"surrowndWithTag\"\n},{\n    bindKey: {mac: \"cmd-alt-.\", win: \"alt-.\"},\n    name: \"close_tag\"\n}, \n{\n    bindKey: { mac: \"cmd-j\", win: \"ctrl-j\" },\n    name: \"joinlines\"\n}, \n\n{\n    bindKey: {mac: \"ctrl--\", win: \"alt--\"},\n    name: \"jumpBack\"\n}, {\n    bindKey: {mac: \"ctrl-shift--\", win: \"alt-shift--\"},\n    name: \"jumpForward\"\n}, \n\n{\n    bindKey: { mac: \"cmd-k cmd-l\", win: \"ctrl-k ctrl-l\" },\n    name: \"tolowercase\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-u\", win: \"ctrl-k ctrl-u\" },\n    name: \"touppercase\"\n}, \n\n{\n    bindKey: {mac: \"cmd-shift-v\", win: \"ctrl-shift-v\"},\n    name: \"paste_and_indent\"\n}, {\n    bindKey: {mac: \"cmd-k cmd-v|cmd-alt-v\", win: \"ctrl-k ctrl-v\"},\n    name: \"paste_from_history\"\n}, \n\n{\n    bindKey: { mac: \"cmd-shift-enter\", win: \"ctrl-shift-enter\" },\n    name: \"addLineBefore\"\n}, {\n    bindKey: { mac: \"cmd-enter\", win: \"ctrl-enter\" },\n    name: \"addLineAfter\"\n}, {\n    bindKey: { mac: \"ctrl-shift-k\", win: \"ctrl-shift-k\" },\n    name: \"removeline\"\n}, {\n    bindKey: { mac: \"ctrl-alt-up\", win: \"ctrl-up\" },\n    name: \"scrollup\"\n}, {\n    bindKey: { mac: \"ctrl-alt-down\", win: \"ctrl-down\" },\n    name: \"scrolldown\"\n}, {\n    bindKey: { mac: \"cmd-a\", win: \"ctrl-a\" },\n    name: \"selectall\"\n}, {\n    bindKey: { linux: \"alt-shift-down\", mac: \"ctrl-shift-down\", win: \"ctrl-alt-down\" },\n    name: \"addCursorBelow\"\n}, {\n    bindKey: { linux: \"alt-shift-up\", mac: \"ctrl-shift-up\", win: \"ctrl-alt-up\" },\n    name: \"addCursorAbove\"\n},\n\n\n{\n    bindKey: { mac: \"cmd-k cmd-c|ctrl-l\", win: \"ctrl-k ctrl-c\" },\n    name: \"centerselection\"\n}, \n\n{\n    bindKey: { mac: \"f5\", win: \"f9\" },\n    name: \"sortlines\"\n}, \n{\n    bindKey: {mac: \"ctrl-f5\", win: \"ctrl-f9\"},\n    name: \"sortlines\",\n    args: {caseSensitive: true}\n},\n{\n    bindKey: { mac: \"cmd-shift-l\", win: \"ctrl-shift-l\" },\n    name: \"splitIntoLines\"\n}, {\n    bindKey: { mac: \"ctrl-cmd-down\", win: \"ctrl-shift-down\" },\n    name: \"movelinesdown\"\n}, {\n    bindKey: { mac: \"ctrl-cmd-up\", win: \"ctrl-shift-up\" },\n    name: \"movelinesup\"\n}, {\n    bindKey: { mac: \"alt-down\", win: \"alt-down\" },\n    name: \"modifyNumberDown\"\n}, {\n    bindKey: { mac: \"alt-up\", win: \"alt-up\" },\n    name: \"modifyNumberUp\"\n}, {\n    bindKey: { mac: \"cmd-/\", win: \"ctrl-/\" },\n    name: \"togglecomment\"\n}, {\n    bindKey: { mac: \"cmd-alt-/\", win: \"ctrl-shift-/\" },\n    name: \"toggleBlockComment\"\n},\n\n\n{\n    bindKey: { linux: \"ctrl-alt-q\", mac: \"ctrl-q\", win: \"ctrl-q\" },\n    name: \"togglerecording\"\n}, {\n    bindKey: { linux: \"ctrl-alt-shift-q\", mac: \"ctrl-shift-q\", win: \"ctrl-shift-q\" },\n    name: \"replaymacro\"\n}, \n\n{\n    bindKey: { mac: \"ctrl-t\", win: \"ctrl-t\" },\n    name: \"transpose\"\n}\n\n].forEach(function(binding) {\n    var command = exports.handler.commands[binding.name];\n    if (command)\n        command.bindKey = binding.bindKey;\n    exports.handler.bindKey(binding.bindKey, command || binding.name);\n});\n\n});                (function() {\n                    window.require([\"ace/keyboard/sublime\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/keybinding-vim.js",
    "content": "define(\"ace/keyboard/vim\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/search\",\"ace/lib/useragent\",\"ace/search_highlight\",\"ace/commands/multi_select_commands\",\"ace/mode/text\",\"ace/multi_select\"], function(require, exports, module) {\n  'use strict';\n\n  function log() {\n    var d = \"\";\n    function format(p) {\n      if (typeof p != \"object\")\n        return p + \"\";\n      if (\"line\" in p) {\n        return p.line + \":\" + p.ch;\n      }\n      if (\"anchor\" in p) {\n        return format(p.anchor) + \"->\" + format(p.head);\n      }\n      if (Array.isArray(p))\n        return \"[\" + p.map(function(x) {\n          return format(x);\n        }) + \"]\";\n      return JSON.stringify(p);\n    }\n    for (var i = 0; i < arguments.length; i++) {\n      var p = arguments[i];\n      var f = format(p);\n      d += f + \"  \";\n    }\n    console.log(d);\n  }\n  var Range = require(\"../range\").Range;\n  var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n  var dom = require(\"../lib/dom\");\n  var oop = require(\"../lib/oop\");\n  var KEYS = require(\"../lib/keys\");\n  var event = require(\"../lib/event\");\n  var Search = require(\"../search\").Search;\n  var useragent = require(\"../lib/useragent\");\n  var SearchHighlight = require(\"../search_highlight\").SearchHighlight;\n  var multiSelectCommands = require(\"../commands/multi_select_commands\");\n  var TextModeTokenRe = require(\"../mode/text\").Mode.prototype.tokenRe;\n  require(\"../multi_select\");\n\n  var CodeMirror = function(ace) {\n    this.ace = ace;\n    this.state = {};\n    this.marks = {};\n    this.$uid = 0;\n    this.onChange = this.onChange.bind(this);\n    this.onSelectionChange = this.onSelectionChange.bind(this);\n    this.onBeforeEndOperation = this.onBeforeEndOperation.bind(this);\n    this.ace.on('change', this.onChange);\n    this.ace.on('changeSelection', this.onSelectionChange);\n    this.ace.on('beforeEndOperation', this.onBeforeEndOperation);\n  };\n  CodeMirror.Pos = function(line, ch) {\n    if (!(this instanceof Pos)) return new Pos(line, ch);\n    this.line = line; this.ch = ch;\n  };\n  CodeMirror.defineOption = function(name, val, setter) {};\n  CodeMirror.commands = {\n    redo: function(cm) { cm.ace.redo(); },\n    undo: function(cm) { cm.ace.undo(); },\n    newlineAndIndent: function(cm) { cm.ace.insert(\"\\n\"); }\n  };\n  CodeMirror.keyMap = {};\n  CodeMirror.addClass = CodeMirror.rmClass = function() {};\n  CodeMirror.e_stop = CodeMirror.e_preventDefault = event.stopEvent;\n  CodeMirror.keyName = function(e) {\n    var key = (KEYS[e.keyCode] || e.key || \"\");\n    if (key.length == 1) key = key.toUpperCase();\n    key = event.getModifierString(e).replace(/(^|-)\\w/g, function(m) {\n      return m.toUpperCase();\n    }) + key;\n    return key;\n  };\n  CodeMirror.keyMap['default'] = function(key) {\n    return function(cm) {\n      var cmd = cm.ace.commands.commandKeyBinding[key.toLowerCase()];\n      return cmd && cm.ace.execCommand(cmd) !== false;\n    };\n  };\n  CodeMirror.lookupKey = function lookupKey(key, map, handle) {\n    if (typeof map == \"string\")\n      map = CodeMirror.keyMap[map];\n    var found = typeof map == \"function\" ? map(key) : map[key];\n    if (found === false) return \"nothing\";\n    if (found === \"...\") return \"multi\";\n    if (found != null && handle(found)) return \"handled\";\n\n    if (map.fallthrough) {\n      if (!Array.isArray(map.fallthrough))\n        return lookupKey(key, map.fallthrough, handle);\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle);\n        if (result) return result;\n      }\n    }\n  };\n\n  CodeMirror.signal = function(o, name, e) { return o._signal(name, e) };\n  CodeMirror.on = event.addListener;\n  CodeMirror.off = event.removeListener;\n  CodeMirror.isWordChar = function(ch) {\n    if (ch < \"\\x7f\") return /^\\w$/.test(ch);\n    TextModeTokenRe.lastIndex = 0;\n    return TextModeTokenRe.test(ch);\n  };\n  \n(function() {\n  oop.implement(CodeMirror.prototype, EventEmitter);\n  \n  this.destroy = function() {\n    this.ace.off('change', this.onChange);\n    this.ace.off('changeSelection', this.onSelectionChange);\n    this.ace.off('beforeEndOperation', this.onBeforeEndOperation);\n    this.removeOverlay();\n  };\n  this.virtualSelectionMode = function() {\n    return this.ace.inVirtualSelectionMode && this.ace.selection.index;\n  };\n  this.onChange = function(delta) {\n    var change = { text: delta.action[0] == 'i' ? delta.lines : [] };\n    var curOp = this.curOp = this.curOp || {};\n    if (!curOp.changeHandlers)\n      curOp.changeHandlers = this._eventRegistry[\"change\"] && this._eventRegistry[\"change\"].slice();\n    if (!curOp.lastChange) {\n      curOp.lastChange = curOp.change = change;\n    } else {\n      curOp.lastChange.next = curOp.lastChange = change;\n    }\n    this.$updateMarkers(delta);\n  };\n  this.onSelectionChange = function() {\n    var curOp = this.curOp = this.curOp || {};\n    if (!curOp.cursorActivityHandlers)\n      curOp.cursorActivityHandlers = this._eventRegistry[\"cursorActivity\"] && this._eventRegistry[\"cursorActivity\"].slice();\n    this.curOp.cursorActivity = true;\n    if (this.ace.inMultiSelectMode) {\n      this.ace.keyBinding.removeKeyboardHandler(multiSelectCommands.keyboardHandler);\n    }\n  };\n  this.operation = function(fn, force) {\n    if (!force && this.curOp || force && this.curOp && this.curOp.force) {\n      return fn();\n    }\n    if (force || !this.ace.curOp) {\n      if (this.curOp)\n        this.onBeforeEndOperation();\n    }\n    if (!this.ace.curOp) {\n      var prevOp = this.ace.prevOp;\n      this.ace.startOperation({\n        command: { name: \"vim\",  scrollIntoView: \"cursor\" }\n      });\n    }\n    var curOp = this.curOp = this.curOp || {};\n    this.curOp.force = force;\n    var result = fn();\n    if (this.ace.curOp && this.ace.curOp.command.name == \"vim\") {\n      if (this.state.dialog)\n        this.ace.curOp.command.scrollIntoView = false;\n      this.ace.endOperation();\n      if (!curOp.cursorActivity && !curOp.lastChange && prevOp)\n        this.ace.prevOp = prevOp;\n    }\n    if (force || !this.ace.curOp) {\n      if (this.curOp)\n        this.onBeforeEndOperation();\n    }\n    return result;\n  };\n  this.onBeforeEndOperation = function() {\n    var op = this.curOp;\n    if (op) {\n      if (op.change) { this.signal(\"change\", op.change, op); }\n      if (op && op.cursorActivity) { this.signal(\"cursorActivity\", null, op); }\n      this.curOp = null;\n    }\n  };\n\n  this.signal = function(eventName, e, handlers) {\n    var listeners = handlers ? handlers[eventName + \"Handlers\"]\n        : (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](this, e);\n  };\n  this.firstLine = function() { return 0; };\n  this.lastLine = function() { return this.ace.session.getLength() - 1; };\n  this.lineCount = function() { return this.ace.session.getLength(); };\n  this.setCursor = function(line, ch) {\n    if (typeof line === 'object') {\n      ch = line.ch;\n      line = line.line;\n    }\n    if (!this.ace.inVirtualSelectionMode)\n      this.ace.exitMultiSelectMode();\n    this.ace.session.unfold({row: line, column: ch});\n    this.ace.selection.moveTo(line, ch);\n  };\n  this.getCursor = function(p) {\n    var sel = this.ace.selection;\n    var pos = p == 'anchor' ? (sel.isEmpty() ? sel.lead : sel.anchor) :\n        p == 'head' || !p ? sel.lead : sel.getRange()[p];\n    return toCmPos(pos);\n  };\n  this.listSelections = function(p) {\n    var ranges = this.ace.multiSelect.rangeList.ranges;\n    if (!ranges.length || this.ace.inVirtualSelectionMode)\n      return [{anchor: this.getCursor('anchor'), head: this.getCursor('head')}];\n    return ranges.map(function(r) {\n      return {\n        anchor: this.clipPos(toCmPos(r.cursor == r.end ? r.start : r.end)),\n        head: this.clipPos(toCmPos(r.cursor))\n      };\n    }, this);\n  };\n  this.setSelections = function(p, primIndex) {\n    var sel = this.ace.multiSelect;\n    var ranges = p.map(function(x) {\n      var anchor = toAcePos(x.anchor);\n      var head = toAcePos(x.head);\n      var r = Range.comparePoints(anchor, head) < 0\n        ? new Range.fromPoints(anchor, head)\n        : new Range.fromPoints(head, anchor);\n      r.cursor = Range.comparePoints(r.start, head) ? r.end : r.start;\n      return r;\n    });\n    \n    if (this.ace.inVirtualSelectionMode) {\n      this.ace.selection.fromOrientedRange(ranges[0]);\n      return;\n    }\n    if (!primIndex) {\n        ranges = ranges.reverse();\n    } else if (ranges[primIndex]) {\n       ranges.push(ranges.splice(primIndex, 1)[0]);\n    }\n    sel.toSingleRange(ranges[0].clone());\n    var session = this.ace.session;\n    for (var i = 0; i < ranges.length; i++) {\n      var range = session.$clipRangeToDocument(ranges[i]); // todo why ace doesn't do this?\n      sel.addRange(range);\n    }\n  };\n  this.setSelection = function(a, h, options) {\n    var sel = this.ace.selection;\n    sel.moveTo(a.line, a.ch);\n    sel.selectTo(h.line, h.ch);\n    if (options && options.origin == '*mouse') {\n      this.onBeforeEndOperation();\n    }\n  };\n  this.somethingSelected = function(p) {\n    return !this.ace.selection.isEmpty();\n  };\n  this.clipPos = function(p) {\n    var pos = this.ace.session.$clipPositionToDocument(p.line, p.ch);\n    return toCmPos(pos);\n  };\n  this.markText = function(cursor) {\n    return {clear: function() {}, find: function() {}};\n  };\n  this.$updateMarkers = function(delta) {\n    var isInsert = delta.action == \"insert\";\n    var start = delta.start;\n    var end = delta.end;\n    var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n    var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n    if (isInsert) end = start;\n    \n    for (var i in this.marks) {\n      var point = this.marks[i];\n      var cmp = Range.comparePoints(point, start);\n      if (cmp < 0) {\n        continue; // delta starts after the range\n      }\n      if (cmp === 0) {\n        if (isInsert) {\n          if (point.bias == 1) {\n            cmp = 1;\n          } else {\n            point.bias = -1;\n            continue;\n          }\n        }\n      }\n      var cmp2 = isInsert ? cmp : Range.comparePoints(point, end);\n      if (cmp2 > 0) {\n        point.row += rowShift;\n        point.column += point.row == end.row ? colShift : 0;\n        continue;\n      }\n      if (!isInsert && cmp2 <= 0) {\n        point.row = start.row;\n        point.column = start.column;\n        if (cmp2 === 0)\n          point.bias = 1;\n      }\n    }\n  };\n  var Marker = function(cm, id, row, column) {\n    this.cm = cm;\n    this.id = id;\n    this.row = row;\n    this.column = column;\n    cm.marks[this.id] = this;\n  };\n  Marker.prototype.clear = function() { delete this.cm.marks[this.id] };\n  Marker.prototype.find = function() { return toCmPos(this) };\n  this.setBookmark = function(cursor, options) {\n    var bm = new Marker(this, this.$uid++, cursor.line, cursor.ch);\n    if (!options || !options.insertLeft)\n      bm.$insertRight = true;\n    this.marks[bm.id] = bm;\n    return bm;\n  };\n  this.moveH = function(increment, unit) {\n    if (unit == 'char') {\n      var sel = this.ace.selection;\n      sel.clearSelection();\n      sel.moveCursorBy(0, increment);\n    }\n  };\n  this.findPosV = function(start, amount, unit, goalColumn) {\n    if (unit == 'page') {\n      var renderer = this.ace.renderer;\n      var config = renderer.layerConfig;\n      amount = amount * Math.floor(config.height / config.lineHeight);\n      unit = 'line';\n    }\n    if (unit == 'line') {\n      var screenPos = this.ace.session.documentToScreenPosition(start.line, start.ch);\n      if (goalColumn != null)\n        screenPos.column = goalColumn;\n      screenPos.row += amount;\n      screenPos.row = Math.min(Math.max(0, screenPos.row), this.ace.session.getScreenLength() - 1);\n      var pos = this.ace.session.screenToDocumentPosition(screenPos.row, screenPos.column);\n      return toCmPos(pos);\n    } else {\n      debugger;\n    }\n  };\n  this.charCoords = function(pos, mode) {\n    if (mode == 'div' || !mode) {\n      var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n      return {left: sc.column, top: sc.row};\n    }if (mode == 'local') {\n      var renderer = this.ace.renderer;\n      var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n      var lh = renderer.layerConfig.lineHeight;\n      var cw = renderer.layerConfig.characterWidth;\n      var top = lh * sc.row;\n      return {left: sc.column * cw, top: top, bottom: top + lh};\n    }\n  };\n  this.coordsChar = function(pos, mode) {\n    var renderer = this.ace.renderer;\n    if (mode == 'local') {\n      var row = Math.max(0, Math.floor(pos.top / renderer.lineHeight));\n      var col = Math.max(0, Math.floor(pos.left / renderer.characterWidth));\n      var ch = renderer.session.screenToDocumentPosition(row, col);\n      return toCmPos(ch);\n    } else if (mode == 'div') {\n      throw \"not implemented\";\n    }\n  };\n  this.getSearchCursor = function(query, pos, caseFold) {\n    var caseSensitive = false;\n    var isRegexp = false;\n    if (query instanceof RegExp && !query.global) {\n      caseSensitive = !query.ignoreCase;\n      query = query.source;\n      isRegexp = true;\n    }\n    var search = new Search();\n    if (pos.ch == undefined) pos.ch = Number.MAX_VALUE;\n    var acePos = {row: pos.line, column: pos.ch};\n    var cm = this;\n    var last = null;\n    return {\n      findNext: function() { return this.find(false) },\n      findPrevious: function() {return this.find(true) },\n      find: function(back) {\n        search.setOptions({\n          needle: query,\n          caseSensitive: caseSensitive,\n          wrap: false,\n          backwards: back,\n          regExp: isRegexp,\n          start: last || acePos\n        });\n        var range = search.find(cm.ace.session);\n        if (range && range.isEmpty()) {\n          if (cm.getLine(range.start.row).length == range.start.column) {\n            search.$options.start = range;\n            range = search.find(cm.ace.session);\n          }\n        }\n        last = range;\n        return last;\n      },\n      from: function() { return last && toCmPos(last.start) },\n      to: function() { return last && toCmPos(last.end) },\n      replace: function(text) {\n        if (last) {\n          last.end = cm.ace.session.doc.replace(last, text);\n        }\n      }\n    };\n  };\n  this.scrollTo = function(x, y) {\n    var renderer = this.ace.renderer;\n    var config = renderer.layerConfig;\n    var maxHeight = config.maxHeight;\n    maxHeight -= (renderer.$size.scrollerHeight - renderer.lineHeight) * renderer.$scrollPastEnd;\n    if (y != null) this.ace.session.setScrollTop(Math.max(0, Math.min(y, maxHeight)));\n    if (x != null) this.ace.session.setScrollLeft(Math.max(0, Math.min(x, config.width)));\n  };\n  this.scrollInfo = function() { return 0; };\n  this.scrollIntoView = function(pos, margin) {\n    if (pos) {\n      var renderer = this.ace.renderer;\n      var viewMargin = { \"top\": 0, \"bottom\": margin };\n      renderer.scrollCursorIntoView(toAcePos(pos),\n        (renderer.lineHeight * 2) / renderer.$size.scrollerHeight, viewMargin);\n    }\n  };\n  this.getLine = function(row) { return this.ace.session.getLine(row) };\n  this.getRange = function(s, e) {\n    return this.ace.session.getTextRange(new Range(s.line, s.ch, e.line, e.ch));\n  };\n  this.replaceRange = function(text, s, e) {\n    if (!e) e = s;\n    return this.ace.session.replace(new Range(s.line, s.ch, e.line, e.ch), text);\n  };\n  this.replaceSelections = function(p) {\n    var sel = this.ace.selection;\n    if (this.ace.inVirtualSelectionMode) {\n      this.ace.session.replace(sel.getRange(), p[0] || \"\");\n      return;\n    }\n    sel.inVirtualSelectionMode = true;\n    var ranges = sel.rangeList.ranges;\n    if (!ranges.length) ranges = [this.ace.multiSelect.getRange()];\n    for (var i = ranges.length; i--;)\n       this.ace.session.replace(ranges[i], p[i] || \"\");\n    sel.inVirtualSelectionMode = false;\n  };\n  this.getSelection = function() {\n    return this.ace.getSelectedText();\n  };\n  this.getSelections = function() {\n    return this.listSelections().map(function(x) {\n      return this.getRange(x.anchor, x.head);\n    }, this);\n  };\n  this.getInputField = function() {\n    return this.ace.textInput.getElement();\n  };\n  this.getWrapperElement = function() {\n    return this.ace.container;\n  };\n  var optMap = {\n    indentWithTabs: \"useSoftTabs\",\n    indentUnit: \"tabSize\",\n    tabSize: \"tabSize\",\n    firstLineNumber: \"firstLineNumber\",\n    readOnly: \"readOnly\"\n  };\n  this.setOption = function(name, val) {\n    this.state[name] = val;\n    switch (name) {\n      case 'indentWithTabs':\n        name = optMap[name];\n        val = !val;\n      break;\n      default:\n        name = optMap[name];\n    }\n    if (name)\n      this.ace.setOption(name, val);\n  };\n  this.getOption = function(name, val) {\n    var aceOpt = optMap[name];\n    if (aceOpt)\n      val = this.ace.getOption(aceOpt);\n    switch (name) {\n      case 'indentWithTabs':\n        name = optMap[name];\n        return !val;\n    }\n    return aceOpt ? val : this.state[name];\n  };\n  this.toggleOverwrite = function(on) {\n    this.state.overwrite = on;\n    return this.ace.setOverwrite(on);\n  };\n  this.addOverlay = function(o) {\n    if (!this.$searchHighlight || !this.$searchHighlight.session) {\n      var highlight = new SearchHighlight(null, \"ace_highlight-marker\", \"text\");\n      var marker = this.ace.session.addDynamicMarker(highlight);\n      highlight.id = marker.id;\n      highlight.session = this.ace.session;\n      highlight.destroy = function(o) {\n        highlight.session.off(\"change\", highlight.updateOnChange);\n        highlight.session.off(\"changeEditor\", highlight.destroy);\n        highlight.session.removeMarker(highlight.id);\n        highlight.session = null;\n      };\n      highlight.updateOnChange = function(delta) {\n        var row = delta.start.row;\n        if (row == delta.end.row) highlight.cache[row] = undefined;\n        else highlight.cache.splice(row, highlight.cache.length);\n      };\n      highlight.session.on(\"changeEditor\", highlight.destroy);\n      highlight.session.on(\"change\", highlight.updateOnChange);\n    }\n    var re = new RegExp(o.query.source, \"gmi\");\n    this.$searchHighlight = o.highlight = highlight;\n    this.$searchHighlight.setRegexp(re);\n    this.ace.renderer.updateBackMarkers();\n  };\n  this.removeOverlay = function(o) {\n    if (this.$searchHighlight && this.$searchHighlight.session) {\n      this.$searchHighlight.destroy();\n    }\n  };\n  this.getScrollInfo = function() {\n    var renderer = this.ace.renderer;\n    var config = renderer.layerConfig;\n    return {\n      left: renderer.scrollLeft,\n      top: renderer.scrollTop,\n      height: config.maxHeight,\n      width: config.width,\n      clientHeight: config.height,\n      clientWidth: config.width\n    };\n  };\n  this.getValue = function() {\n    return this.ace.getValue();\n  };\n  this.setValue = function(v) {\n    return this.ace.setValue(v);\n  };\n  this.getTokenTypeAt = function(pos) {\n    var token = this.ace.session.getTokenAt(pos.line, pos.ch);\n    return token && /comment|string/.test(token.type) ? \"string\" : \"\";\n  };\n  this.findMatchingBracket = function(pos) {\n    var m = this.ace.session.findMatchingBracket(toAcePos(pos));\n    return {to: m && toCmPos(m)};\n  };\n  this.indentLine = function(line, method) {\n    if (method === true)\n        this.ace.session.indentRows(line, line, \"\\t\");\n    else if (method === false)\n        this.ace.session.outdentRows(new Range(line, 0, line, 0));\n  };\n  this.indexFromPos = function(pos) {\n    return this.ace.session.doc.positionToIndex(toAcePos(pos));\n  };\n  this.posFromIndex = function(index) {\n    return toCmPos(this.ace.session.doc.indexToPosition(index));\n  };\n  this.focus = function(index) {\n    return this.ace.textInput.focus();\n  };\n  this.blur = function(index) {\n    return this.ace.blur();\n  };\n  this.defaultTextHeight = function(index) {\n    return this.ace.renderer.layerConfig.lineHeight;\n  };\n  this.scanForBracket = function(pos, dir, _, options) {\n    var re = options.bracketRegex.source;\n    var tokenRe = /paren|text|operator|tag/;\n    if (dir == 1) {\n      var m = this.ace.session.$findClosingBracket(re.slice(1, 2), toAcePos(pos), tokenRe);\n    } else {\n      var m = this.ace.session.$findOpeningBracket(re.slice(-2, -1), {row: pos.line, column: pos.ch + 1}, tokenRe);\n    }\n    return m && {pos: toCmPos(m)};\n  };\n  this.refresh = function() {\n    return this.ace.resize(true);\n  };\n  this.getMode = function() {\n    return { name : this.getOption(\"mode\") };\n  }\n}).call(CodeMirror.prototype);\n  function toAcePos(cmPos) {\n    return {row: cmPos.line, column: cmPos.ch};\n  }\n  function toCmPos(acePos) {\n    return new Pos(acePos.row, acePos.column);\n  }\n\n  var StringStream = CodeMirror.StringStream = function(string, tabSize) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n  };\n\n  StringStream.prototype = {\n    eol: function() {return this.pos >= this.string.length;},\n    sol: function() {return this.pos == this.lineStart;},\n    peek: function() {return this.string.charAt(this.pos) || undefined;},\n    next: function() {\n      if (this.pos < this.string.length)\n        return this.string.charAt(this.pos++);\n    },\n    eat: function(match) {\n      var ch = this.string.charAt(this.pos);\n      if (typeof match == \"string\") var ok = ch == match;\n      else var ok = ch && (match.test ? match.test(ch) : match(ch));\n      if (ok) {++this.pos; return ch;}\n    },\n    eatWhile: function(match) {\n      var start = this.pos;\n      while (this.eat(match)){}\n      return this.pos > start;\n    },\n    eatSpace: function() {\n      var start = this.pos;\n      while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n      return this.pos > start;\n    },\n    skipToEnd: function() {this.pos = this.string.length;},\n    skipTo: function(ch) {\n      var found = this.string.indexOf(ch, this.pos);\n      if (found > -1) {this.pos = found; return true;}\n    },\n    backUp: function(n) {this.pos -= n;},\n    column: function() {\n      throw \"not implemented\";\n    },\n    indentation: function() {\n      throw \"not implemented\";\n    },\n    match: function(pattern, consume, caseInsensitive) {\n      if (typeof pattern == \"string\") {\n        var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};\n        var substr = this.string.substr(this.pos, pattern.length);\n        if (cased(substr) == cased(pattern)) {\n          if (consume !== false) this.pos += pattern.length;\n          return true;\n        }\n      } else {\n        var match = this.string.slice(this.pos).match(pattern);\n        if (match && match.index > 0) return null;\n        if (match && consume !== false) this.pos += match[0].length;\n        return match;\n      }\n    },\n    current: function(){return this.string.slice(this.start, this.pos);},\n    hideFirstChars: function(n, inner) {\n      this.lineStart += n;\n      try { return inner(); }\n      finally { this.lineStart -= n; }\n    }\n  };\nCodeMirror.defineExtension = function(name, fn) {\n  CodeMirror.prototype[name] = fn;\n};\ndom.importCssString(\".normal-mode .ace_cursor{\\\n    border: none;\\\n    background-color: rgba(255,0,0,0.5);\\\n}\\\n.normal-mode .ace_hidden-cursors .ace_cursor{\\\n  background-color: transparent;\\\n  border: 1px solid red;\\\n  opacity: 0.7\\\n}\\\n.ace_dialog {\\\n  position: absolute;\\\n  left: 0; right: 0;\\\n  background: inherit;\\\n  z-index: 15;\\\n  padding: .1em .8em;\\\n  overflow: hidden;\\\n  color: inherit;\\\n}\\\n.ace_dialog-top {\\\n  border-bottom: 1px solid #444;\\\n  top: 0;\\\n}\\\n.ace_dialog-bottom {\\\n  border-top: 1px solid #444;\\\n  bottom: 0;\\\n}\\\n.ace_dialog input {\\\n  border: none;\\\n  outline: none;\\\n  background: transparent;\\\n  width: 20em;\\\n  color: inherit;\\\n  font-family: monospace;\\\n}\", \"vimMode\");\n(function() {\n  function dialogDiv(cm, template, bottom) {\n    var wrap = cm.ace.container;\n    var dialog;\n    dialog = wrap.appendChild(document.createElement(\"div\"));\n    if (bottom)\n      dialog.className = \"ace_dialog ace_dialog-bottom\";\n    else\n      dialog.className = \"ace_dialog ace_dialog-top\";\n\n    if (typeof template == \"string\") {\n      dialog.innerHTML = template;\n    } else { // Assuming it's a detached DOM element.\n      dialog.appendChild(template);\n    }\n    return dialog;\n  }\n\n  function closeNotification(cm, newVal) {\n    if (cm.state.currentNotificationClose)\n      cm.state.currentNotificationClose();\n    cm.state.currentNotificationClose = newVal;\n  }\n\n  CodeMirror.defineExtension(\"openDialog\", function(template, callback, options) {\n    if (this.virtualSelectionMode()) return;\n    if (!options) options = {};\n\n    closeNotification(this, null);\n\n    var dialog = dialogDiv(this, template, options.bottom);\n    var closed = false, me = this;\n    this.state.dialog = dialog;\n    function close(newVal) {\n      if (typeof newVal == 'string') {\n        inp.value = newVal;\n      } else {\n        if (closed) return;\n        \n        if (newVal && newVal.type == \"blur\") {\n          if (document.activeElement === inp)\n            return;\n        }\n        \n        me.state.dialog = null;\n        closed = true;\n        dialog.parentNode.removeChild(dialog);\n        me.focus();\n\n        if (options.onClose) options.onClose(dialog);\n      }\n    }\n\n    var inp = dialog.getElementsByTagName(\"input\")[0], button;\n    if (inp) {\n      if (options.value) {\n        inp.value = options.value;\n        if (options.selectValueOnOpen !== false) inp.select();\n      }\n\n      if (options.onInput)\n        CodeMirror.on(inp, \"input\", function(e) { options.onInput(e, inp.value, close);});\n      if (options.onKeyUp)\n        CodeMirror.on(inp, \"keyup\", function(e) {options.onKeyUp(e, inp.value, close);});\n\n      CodeMirror.on(inp, \"keydown\", function(e) {\n        if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }\n        if (e.keyCode == 13) callback(inp.value);\n        if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {\n          inp.blur();\n          CodeMirror.e_stop(e);\n          close();\n        }\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(inp, \"blur\", close);\n\n      inp.focus();\n    } else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n      CodeMirror.on(button, \"click\", function() {\n        close();\n        me.focus();\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(button, \"blur\", close);\n\n      button.focus();\n    }\n    return close;\n  });\n\n  CodeMirror.defineExtension(\"openNotification\", function(template, options) {\n    if (this.virtualSelectionMode()) return;\n    closeNotification(this, close);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var closed = false, doneTimer;\n    var duration = options && typeof options.duration !== \"undefined\" ? options.duration : 5000;\n\n    function close() {\n      if (closed) return;\n      closed = true;\n      clearTimeout(doneTimer);\n      dialog.parentNode.removeChild(dialog);\n    }\n\n    CodeMirror.on(dialog, 'click', function(e) {\n      CodeMirror.e_preventDefault(e);\n      close();\n    });\n\n    if (duration)\n      doneTimer = setTimeout(close, duration);\n\n    return close;\n  });\n})();\n\n  \n  var defaultKeymap = [\n    { keys: '<Left>', type: 'keyToKey', toKeys: 'h' },\n    { keys: '<Right>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<Up>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<Down>', type: 'keyToKey', toKeys: 'j' },\n    { keys: '<Space>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<BS>', type: 'keyToKey', toKeys: 'h', context: 'normal'},\n    { keys: '<C-Space>', type: 'keyToKey', toKeys: 'W' },\n    { keys: '<C-BS>', type: 'keyToKey', toKeys: 'B', context: 'normal' },\n    { keys: '<S-Space>', type: 'keyToKey', toKeys: 'w' },\n    { keys: '<S-BS>', type: 'keyToKey', toKeys: 'b', context: 'normal' },\n    { keys: '<C-n>', type: 'keyToKey', toKeys: 'j' },\n    { keys: '<C-p>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' },\n    { keys: 's', type: 'keyToKey', toKeys: 'c', context: 'visual'},\n    { keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' },\n    { keys: 'S', type: 'keyToKey', toKeys: 'VdO', context: 'visual' },\n    { keys: '<Home>', type: 'keyToKey', toKeys: '0' },\n    { keys: '<End>', type: 'keyToKey', toKeys: '$' },\n    { keys: '<PageUp>', type: 'keyToKey', toKeys: '<C-b>' },\n    { keys: '<PageDown>', type: 'keyToKey', toKeys: '<C-f>' },\n    { keys: '<CR>', type: 'keyToKey', toKeys: 'j^', context: 'normal' },\n    { keys: '<Ins>', type: 'action', action: 'toggleOverwrite', context: 'insert' },\n    { keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'h', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: false }},\n    { keys: 'l', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: true }},\n    { keys: 'j', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, linewise: true }},\n    { keys: 'k', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, linewise: true }},\n    { keys: 'gj', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: true }},\n    { keys: 'gk', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: false }},\n    { keys: 'w', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false }},\n    { keys: 'W', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false, bigWord: true }},\n    { keys: 'e', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, inclusive: true }},\n    { keys: 'E', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, bigWord: true, inclusive: true }},\n    { keys: 'b', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }},\n    { keys: 'B', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false, bigWord: true }},\n    { keys: 'ge', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, inclusive: true }},\n    { keys: 'gE', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, bigWord: true, inclusive: true }},\n    { keys: '{', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: false, toJumplist: true }},\n    { keys: '}', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: true, toJumplist: true }},\n    { keys: '<C-f>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: true }},\n    { keys: '<C-b>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: false }},\n    { keys: '<C-d>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: true, explicitRepeat: true }},\n    { keys: '<C-u>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: false, explicitRepeat: true }},\n    { keys: 'gg', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: 'G', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: '0', type: 'motion', motion: 'moveToStartOfLine' },\n    { keys: '^', type: 'motion', motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '+', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true }},\n    { keys: '-', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, toFirstChar:true }},\n    { keys: '_', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true, repeatOffset:-1 }},\n    { keys: '$', type: 'motion', motion: 'moveToEol', motionArgs: { inclusive: true }},\n    { keys: '%', type: 'motion', motion: 'moveToMatchedSymbol', motionArgs: { inclusive: true, toJumplist: true }},\n    { keys: 'f<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: true , inclusive: true }},\n    { keys: 'F<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: false }},\n    { keys: 't<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: true, inclusive: true }},\n    { keys: 'T<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: false }},\n    { keys: ';', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: true }},\n    { keys: ',', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: false }},\n    { keys: '\\'<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true, linewise: true}},\n    { keys: '`<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true}},\n    { keys: ']`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } },\n    { keys: '[`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } },\n    { keys: ']\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } },\n    { keys: '[\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } },\n    { keys: ']p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true, matchIndent: true}},\n    { keys: '[p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true, matchIndent: true}},\n    { keys: ']<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: true, toJumplist: true}},\n    { keys: '[<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: false, toJumplist: true}},\n    { keys: '|', type: 'motion', motion: 'moveToColumn'},\n    { keys: 'o', type: 'motion', motion: 'moveToOtherHighlightedEnd', context:'visual'},\n    { keys: 'O', type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: {sameLine: true}, context:'visual'},\n    { keys: 'd', type: 'operator', operator: 'delete' },\n    { keys: 'y', type: 'operator', operator: 'yank' },\n    { keys: 'c', type: 'operator', operator: 'change' },\n    { keys: '>', type: 'operator', operator: 'indent', operatorArgs: { indentRight: true }},\n    { keys: '<', type: 'operator', operator: 'indent', operatorArgs: { indentRight: false }},\n    { keys: 'g~', type: 'operator', operator: 'changeCase' },\n    { keys: 'gu', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, isEdit: true },\n    { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, isEdit: true },\n    { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true }},\n    { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true }},\n    { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false }},\n    { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true }},\n    { keys: 'D', type: 'operatorMotion', operator: 'delete', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'D', type: 'operator', operator: 'delete', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: 'Y', type: 'operatorMotion', operator: 'yank', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'Y', type: 'operator', operator: 'yank', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: 'C', type: 'operatorMotion', operator: 'change', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'C', type: 'operator', operator: 'change', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: '~', type: 'operatorMotion', operator: 'changeCase', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorArgs: { shouldMoveCursor: true }, context: 'normal'},\n    { keys: '~', type: 'operator', operator: 'changeCase', context: 'visual'},\n    { keys: '<C-w>', type: 'operatorMotion', operator: 'delete', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }, context: 'insert' },\n    { keys: '<C-i>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: true }},\n    { keys: '<C-o>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: false }},\n    { keys: '<C-e>', type: 'action', action: 'scroll', actionArgs: { forward: true, linewise: true }},\n    { keys: '<C-y>', type: 'action', action: 'scroll', actionArgs: { forward: false, linewise: true }},\n    { keys: 'a', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'charAfter' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'eol' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' },\n    { keys: 'i', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'inplace' }, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'firstNonBlank'}, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'startOfSelectedArea' }, context: 'visual' },\n    { keys: 'o', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: true }, context: 'normal' },\n    { keys: 'O', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: false }, context: 'normal' },\n    { keys: 'v', type: 'action', action: 'toggleVisualMode' },\n    { keys: 'V', type: 'action', action: 'toggleVisualMode', actionArgs: { linewise: true }},\n    { keys: '<C-v>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }},\n    { keys: '<C-q>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }},\n    { keys: 'gv', type: 'action', action: 'reselectLastSelection' },\n    { keys: 'J', type: 'action', action: 'joinLines', isEdit: true },\n    { keys: 'p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true }},\n    { keys: 'P', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true }},\n    { keys: 'r<character>', type: 'action', action: 'replace', isEdit: true },\n    { keys: '@<character>', type: 'action', action: 'replayMacro' },\n    { keys: 'q<character>', type: 'action', action: 'enterMacroRecordMode' },\n    { keys: 'R', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { replace: true }},\n    { keys: 'u', type: 'action', action: 'undo', context: 'normal' },\n    { keys: 'u', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, context: 'visual', isEdit: true },\n    { keys: 'U', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, context: 'visual', isEdit: true },\n    { keys: '<C-r>', type: 'action', action: 'redo' },\n    { keys: 'm<character>', type: 'action', action: 'setMark' },\n    { keys: '\"<character>', type: 'action', action: 'setRegister' },\n    { keys: 'zz', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }},\n    { keys: 'z.', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'zt', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }},\n    { keys: 'z<CR>', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'z-', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }},\n    { keys: 'zb', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '.', type: 'action', action: 'repeatLastEdit' },\n    { keys: '<C-a>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: true, backtrack: false}},\n    { keys: '<C-x>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: false, backtrack: false}},\n    { keys: '<C-t>', type: 'action', action: 'indent', actionArgs: { indentRight: true }, context: 'insert' },\n    { keys: '<C-d>', type: 'action', action: 'indent', actionArgs: { indentRight: false }, context: 'insert' },\n    { keys: 'a<character>', type: 'motion', motion: 'textObjectManipulation' },\n    { keys: 'i<character>', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true }},\n    { keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }},\n    { keys: '?', type: 'search', searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true }},\n    { keys: '*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: '#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: 'g*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true }},\n    { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }},\n    { keys: ':', type: 'ex' }\n  ];\n  var defaultExCommandMap = [\n    { name: 'colorscheme', shortName: 'colo' },\n    { name: 'map' },\n    { name: 'imap', shortName: 'im' },\n    { name: 'nmap', shortName: 'nm' },\n    { name: 'vmap', shortName: 'vm' },\n    { name: 'unmap' },\n    { name: 'write', shortName: 'w' },\n    { name: 'undo', shortName: 'u' },\n    { name: 'redo', shortName: 'red' },\n    { name: 'set', shortName: 'se' },\n    { name: 'set', shortName: 'se' },\n    { name: 'setlocal', shortName: 'setl' },\n    { name: 'setglobal', shortName: 'setg' },\n    { name: 'sort', shortName: 'sor' },\n    { name: 'substitute', shortName: 's', possiblyAsync: true },\n    { name: 'nohlsearch', shortName: 'noh' },\n    { name: 'yank', shortName: 'y' },\n    { name: 'delmarks', shortName: 'delm' },\n    { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },\n    { name: 'global', shortName: 'g' }\n  ];\n\n  var Pos = CodeMirror.Pos;\n\n  var Vim = function() { return vimApi; } //{\n    function enterVimMode(cm) {\n      cm.setOption('disableInput', true);\n      cm.setOption('showCursorWhenSelecting', false);\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      cm.on('cursorActivity', onCursorActivity);\n      maybeInitVimState(cm);\n      CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm));\n    }\n\n    function leaveVimMode(cm) {\n      cm.setOption('disableInput', false);\n      cm.off('cursorActivity', onCursorActivity);\n      CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm));\n      cm.state.vim = null;\n    }\n\n    function detachVimMap(cm, next) {\n      if (this == CodeMirror.keyMap.vim)\n        CodeMirror.rmClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n\n      if (!next || next.attach != attachVimMap)\n        leaveVimMode(cm);\n    }\n    function attachVimMap(cm, prev) {\n      if (this == CodeMirror.keyMap.vim)\n        CodeMirror.addClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n\n      if (!prev || prev.attach != attachVimMap)\n        enterVimMode(cm);\n    }\n    CodeMirror.defineOption('vimMode', false, function(cm, val, prev) {\n      if (val && cm.getOption(\"keyMap\") != \"vim\")\n        cm.setOption(\"keyMap\", \"vim\");\n      else if (!val && prev != CodeMirror.Init && /^vim/.test(cm.getOption(\"keyMap\")))\n        cm.setOption(\"keyMap\", \"default\");\n    });\n\n    function cmKey(key, cm) {\n      if (!cm) { return undefined; }\n      if (this[key]) { return this[key]; }\n      var vimKey = cmKeyToVimKey(key);\n      if (!vimKey) {\n        return false;\n      }\n      var cmd = CodeMirror.Vim.findKey(cm, vimKey);\n      if (typeof cmd == 'function') {\n        CodeMirror.signal(cm, 'vim-keypress', vimKey);\n      }\n      return cmd;\n    }\n\n    var modifiers = {'Shift': 'S', 'Ctrl': 'C', 'Alt': 'A', 'Cmd': 'D', 'Mod': 'A'};\n    var specialKeys = {Enter:'CR',Backspace:'BS',Delete:'Del',Insert:'Ins'};\n    function cmKeyToVimKey(key) {\n      if (key.charAt(0) == '\\'') {\n        return key.charAt(1);\n      }\n      var pieces = key.split(/-(?!$)/);\n      var lastPiece = pieces[pieces.length - 1];\n      if (pieces.length == 1 && pieces[0].length == 1) {\n        return false;\n      } else if (pieces.length == 2 && pieces[0] == 'Shift' && lastPiece.length == 1) {\n        return false;\n      }\n      var hasCharacter = false;\n      for (var i = 0; i < pieces.length; i++) {\n        var piece = pieces[i];\n        if (piece in modifiers) { pieces[i] = modifiers[piece]; }\n        else { hasCharacter = true; }\n        if (piece in specialKeys) { pieces[i] = specialKeys[piece]; }\n      }\n      if (!hasCharacter) {\n        return false;\n      }\n      if (isUpperCase(lastPiece)) {\n        pieces[pieces.length - 1] = lastPiece.toLowerCase();\n      }\n      return '<' + pieces.join('-') + '>';\n    }\n\n    function getOnPasteFn(cm) {\n      var vim = cm.state.vim;\n      if (!vim.onPasteFn) {\n        vim.onPasteFn = function() {\n          if (!vim.insertMode) {\n            cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));\n            actions.enterInsertMode(cm, {}, vim);\n          }\n        };\n      }\n      return vim.onPasteFn;\n    }\n\n    var numberRegex = /[\\d]/;\n    var wordCharTest = [CodeMirror.isWordChar, function(ch) {\n      return ch && !CodeMirror.isWordChar(ch) && !/\\s/.test(ch);\n    }], bigWordCharTest = [function(ch) {\n      return /\\S/.test(ch);\n    }];\n    function makeKeyRange(start, size) {\n      var keys = [];\n      for (var i = start; i < start + size; i++) {\n        keys.push(String.fromCharCode(i));\n      }\n      return keys;\n    }\n    var upperCaseAlphabet = makeKeyRange(65, 26);\n    var lowerCaseAlphabet = makeKeyRange(97, 26);\n    var numbers = makeKeyRange(48, 10);\n    var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']);\n    var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '\"', '.', ':', '/']);\n\n    function isLine(cm, line) {\n      return line >= cm.firstLine() && line <= cm.lastLine();\n    }\n    function isLowerCase(k) {\n      return (/^[a-z]$/).test(k);\n    }\n    function isMatchableSymbol(k) {\n      return '()[]{}'.indexOf(k) != -1;\n    }\n    function isNumber(k) {\n      return numberRegex.test(k);\n    }\n    function isUpperCase(k) {\n      return (/^[A-Z]$/).test(k);\n    }\n    function isWhiteSpaceString(k) {\n      return (/^\\s*$/).test(k);\n    }\n    function inArray(val, arr) {\n      for (var i = 0; i < arr.length; i++) {\n        if (arr[i] == val) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    var options = {};\n    function defineOption(name, defaultValue, type, aliases, callback) {\n      if (defaultValue === undefined && !callback) {\n        throw Error('defaultValue is required unless callback is provided');\n      }\n      if (!type) { type = 'string'; }\n      options[name] = {\n        type: type,\n        defaultValue: defaultValue,\n        callback: callback\n      };\n      if (aliases) {\n        for (var i = 0; i < aliases.length; i++) {\n          options[aliases[i]] = options[name];\n        }\n      }\n      if (defaultValue) {\n        setOption(name, defaultValue);\n      }\n    }\n\n    function setOption(name, value, cm, cfg) {\n      var option = options[name];\n      cfg = cfg || {};\n      var scope = cfg.scope;\n      if (!option) {\n        return new Error('Unknown option: ' + name);\n      }\n      if (option.type == 'boolean') {\n        if (value && value !== true) {\n          return new Error('Invalid argument: ' + name + '=' + value);\n        } else if (value !== false) {\n          value = true;\n        }\n      }\n      if (option.callback) {\n        if (scope !== 'local') {\n          option.callback(value, undefined);\n        }\n        if (scope !== 'global' && cm) {\n          option.callback(value, cm);\n        }\n      } else {\n        if (scope !== 'local') {\n          option.value = option.type == 'boolean' ? !!value : value;\n        }\n        if (scope !== 'global' && cm) {\n          cm.state.vim.options[name] = {value: value};\n        }\n      }\n    }\n\n    function getOption(name, cm, cfg) {\n      var option = options[name];\n      cfg = cfg || {};\n      var scope = cfg.scope;\n      if (!option) {\n        return new Error('Unknown option: ' + name);\n      }\n      if (option.callback) {\n        var local = cm && option.callback(undefined, cm);\n        if (scope !== 'global' && local !== undefined) {\n          return local;\n        }\n        if (scope !== 'local') {\n          return option.callback();\n        }\n        return;\n      } else {\n        var local = (scope !== 'global') && (cm && cm.state.vim.options[name]);\n        return (local || (scope !== 'local') && option || {}).value;\n      }\n    }\n\n    defineOption('filetype', undefined, 'string', ['ft'], function(name, cm) {\n      if (cm === undefined) {\n        return;\n      }\n      if (name === undefined) {\n        var mode = cm.getOption('mode');\n        return mode == 'null' ? '' : mode;\n      } else {\n        var mode = name == '' ? 'null' : name;\n        cm.setOption('mode', mode);\n      }\n    });\n\n    var createCircularJumpList = function() {\n      var size = 100;\n      var pointer = -1;\n      var head = 0;\n      var tail = 0;\n      var buffer = new Array(size);\n      function add(cm, oldCur, newCur) {\n        var current = pointer % size;\n        var curMark = buffer[current];\n        function useNextSlot(cursor) {\n          var next = ++pointer % size;\n          var trashMark = buffer[next];\n          if (trashMark) {\n            trashMark.clear();\n          }\n          buffer[next] = cm.setBookmark(cursor);\n        }\n        if (curMark) {\n          var markPos = curMark.find();\n          if (markPos && !cursorEqual(markPos, oldCur)) {\n            useNextSlot(oldCur);\n          }\n        } else {\n          useNextSlot(oldCur);\n        }\n        useNextSlot(newCur);\n        head = pointer;\n        tail = pointer - size + 1;\n        if (tail < 0) {\n          tail = 0;\n        }\n      }\n      function move(cm, offset) {\n        pointer += offset;\n        if (pointer > head) {\n          pointer = head;\n        } else if (pointer < tail) {\n          pointer = tail;\n        }\n        var mark = buffer[(size + pointer) % size];\n        if (mark && !mark.find()) {\n          var inc = offset > 0 ? 1 : -1;\n          var newCur;\n          var oldCur = cm.getCursor();\n          do {\n            pointer += inc;\n            mark = buffer[(size + pointer) % size];\n            if (mark &&\n                (newCur = mark.find()) &&\n                !cursorEqual(oldCur, newCur)) {\n              break;\n            }\n          } while (pointer < head && pointer > tail);\n        }\n        return mark;\n      }\n      return {\n        cachedCursor: undefined, //used for # and * jumps\n        add: add,\n        move: move\n      };\n    };\n    var createInsertModeChanges = function(c) {\n      if (c) {\n        return {\n          changes: c.changes,\n          expectCursorActivityForChange: c.expectCursorActivityForChange\n        };\n      }\n      return {\n        changes: [],\n        expectCursorActivityForChange: false\n      };\n    };\n\n    function MacroModeState() {\n      this.latestRegister = undefined;\n      this.isPlaying = false;\n      this.isRecording = false;\n      this.replaySearchQueries = [];\n      this.onRecordingDone = undefined;\n      this.lastInsertModeChanges = createInsertModeChanges();\n    }\n    MacroModeState.prototype = {\n      exitMacroRecordMode: function() {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.onRecordingDone) {\n          macroModeState.onRecordingDone(); // close dialog\n        }\n        macroModeState.onRecordingDone = undefined;\n        macroModeState.isRecording = false;\n      },\n      enterMacroRecordMode: function(cm, registerName) {\n        var register =\n            vimGlobalState.registerController.getRegister(registerName);\n        if (register) {\n          register.clear();\n          this.latestRegister = registerName;\n          if (cm.openDialog) {\n            this.onRecordingDone = cm.openDialog(\n                '(recording)['+registerName+']', null, {bottom:true});\n          }\n          this.isRecording = true;\n        }\n      }\n    };\n\n    function maybeInitVimState(cm) {\n      if (!cm.state.vim) {\n        cm.state.vim = {\n          inputState: new InputState(),\n          lastEditInputState: undefined,\n          lastEditActionCommand: undefined,\n          lastHPos: -1,\n          lastHSPos: -1,\n          lastMotion: null,\n          marks: {},\n          fakeCursor: null,\n          insertMode: false,\n          insertModeRepeat: undefined,\n          visualMode: false,\n          visualLine: false,\n          visualBlock: false,\n          lastSelection: null,\n          lastPastedText: null,\n          sel: {},\n          options: {}\n        };\n      }\n      return cm.state.vim;\n    }\n    var vimGlobalState;\n    function resetVimGlobalState() {\n      vimGlobalState = {\n        searchQuery: null,\n        searchIsReversed: false,\n        lastSubstituteReplacePart: undefined,\n        jumpList: createCircularJumpList(),\n        macroModeState: new MacroModeState,\n        lastCharacterSearch: {increment:0, forward:true, selectedCharacter:''},\n        registerController: new RegisterController({}),\n        searchHistoryController: new HistoryController(),\n        exCommandHistoryController : new HistoryController()\n      };\n      for (var optionName in options) {\n        var option = options[optionName];\n        option.value = option.defaultValue;\n      }\n    }\n\n    var lastInsertModeKeyTimer;\n    var vimApi= {\n      buildKeyMap: function() {\n      },\n      getRegisterController: function() {\n        return vimGlobalState.registerController;\n      },\n      resetVimGlobalState_: resetVimGlobalState,\n      getVimGlobalState_: function() {\n        return vimGlobalState;\n      },\n      maybeInitVimState_: maybeInitVimState,\n\n      suppressErrorLogging: false,\n\n      InsertModeKey: InsertModeKey,\n      map: function(lhs, rhs, ctx) {\n        exCommandDispatcher.map(lhs, rhs, ctx);\n      },\n      unmap: function(lhs, ctx) {\n        exCommandDispatcher.unmap(lhs, ctx);\n      },\n      setOption: setOption,\n      getOption: getOption,\n      defineOption: defineOption,\n      defineEx: function(name, prefix, func){\n        if (!prefix) {\n          prefix = name;\n        } else if (name.indexOf(prefix) !== 0) {\n          throw new Error('(Vim.defineEx) \"'+prefix+'\" is not a prefix of \"'+name+'\", command not registered');\n        }\n        exCommands[name]=func;\n        exCommandDispatcher.commandMap_[prefix]={name:name, shortName:prefix, type:'api'};\n      },\n      handleKey: function (cm, key, origin) {\n        var command = this.findKey(cm, key, origin);\n        if (typeof command === 'function') {\n          return command();\n        }\n      },\n      findKey: function(cm, key, origin) {\n        var vim = maybeInitVimState(cm);\n        function handleMacroRecording() {\n          var macroModeState = vimGlobalState.macroModeState;\n          if (macroModeState.isRecording) {\n            if (key == 'q') {\n              macroModeState.exitMacroRecordMode();\n              clearInputState(cm);\n              return true;\n            }\n            if (origin != 'mapping') {\n              logKey(macroModeState, key);\n            }\n          }\n        }\n        function handleEsc() {\n          if (key == '<Esc>') {\n            clearInputState(cm);\n            if (vim.visualMode) {\n              exitVisualMode(cm);\n            } else if (vim.insertMode) {\n              exitInsertMode(cm);\n            }\n            return true;\n          }\n        }\n        function doKeyToKey(keys) {\n          var match;\n          while (keys) {\n            match = (/<\\w+-.+?>|<\\w+>|./).exec(keys);\n            key = match[0];\n            keys = keys.substring(match.index + key.length);\n            CodeMirror.Vim.handleKey(cm, key, 'mapping');\n          }\n        }\n\n        function handleKeyInsertMode() {\n          if (handleEsc()) { return true; }\n          var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n          var keysAreChars = key.length == 1;\n          var match = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n          while (keys.length > 1 && match.type != 'full') {\n            var keys = vim.inputState.keyBuffer = keys.slice(1);\n            var thisMatch = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n            if (thisMatch.type != 'none') { match = thisMatch; }\n          }\n          if (match.type == 'none') { clearInputState(cm); return false; }\n          else if (match.type == 'partial') {\n            if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }\n            lastInsertModeKeyTimer = window.setTimeout(\n              function() { if (vim.insertMode && vim.inputState.keyBuffer) { clearInputState(cm); } },\n              getOption('insertModeEscKeysTimeout'));\n            return !keysAreChars;\n          }\n\n          if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }\n          if (keysAreChars) {\n            var selections = cm.listSelections();\n            for (var i = 0; i < selections.length; i++) {\n              var here = selections[i].head;\n              cm.replaceRange('', offsetCursor(here, 0, -(keys.length - 1)), here, '+input');\n            }\n            vimGlobalState.macroModeState.lastInsertModeChanges.changes.pop();\n          }\n          clearInputState(cm);\n          return match.command;\n        }\n\n        function handleKeyNonInsertMode() {\n          if (handleMacroRecording() || handleEsc()) { return true; }\n\n          var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n          if (/^[1-9]\\d*$/.test(keys)) { return true; }\n\n          var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n          if (!keysMatcher) { clearInputState(cm); return false; }\n          var context = vim.visualMode ? 'visual' :\n                                         'normal';\n          var match = commandDispatcher.matchCommand(keysMatcher[2] || keysMatcher[1], defaultKeymap, vim.inputState, context);\n          if (match.type == 'none') { clearInputState(cm); return false; }\n          else if (match.type == 'partial') { return true; }\n\n          vim.inputState.keyBuffer = '';\n          var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n          if (keysMatcher[1] && keysMatcher[1] != '0') {\n            vim.inputState.pushRepeatDigit(keysMatcher[1]);\n          }\n          return match.command;\n        }\n\n        var command;\n        if (vim.insertMode) { command = handleKeyInsertMode(); }\n        else { command = handleKeyNonInsertMode(); }\n        if (command === false) {\n          return undefined;\n        } else if (command === true) {\n          return function() { return true; };\n        } else {\n          return function() {\n            if ((command.operator || command.isEdit) && cm.getOption('readOnly'))\n              return; // ace_patch\n            return cm.operation(function() {\n              cm.curOp.isVimOp = true;\n              try {\n                if (command.type == 'keyToKey') {\n                  doKeyToKey(command.toKeys);\n                } else {\n                  commandDispatcher.processCommand(cm, vim, command);\n                }\n              } catch (e) {\n                cm.state.vim = undefined;\n                maybeInitVimState(cm);\n                if (!CodeMirror.Vim.suppressErrorLogging) {\n                  console['log'](e);\n                }\n                throw e;\n              }\n              return true;\n            });\n          };\n        }\n      },\n      handleEx: function(cm, input) {\n        exCommandDispatcher.processCommand(cm, input);\n      },\n\n      defineMotion: defineMotion,\n      defineAction: defineAction,\n      defineOperator: defineOperator,\n      mapCommand: mapCommand,\n      _mapCommand: _mapCommand,\n\n      defineRegister: defineRegister,\n\n      exitVisualMode: exitVisualMode,\n      exitInsertMode: exitInsertMode\n    };\n    function InputState() {\n      this.prefixRepeat = [];\n      this.motionRepeat = [];\n\n      this.operator = null;\n      this.operatorArgs = null;\n      this.motion = null;\n      this.motionArgs = null;\n      this.keyBuffer = []; // For matching multi-key commands.\n      this.registerName = null; // Defaults to the unnamed register.\n    }\n    InputState.prototype.pushRepeatDigit = function(n) {\n      if (!this.operator) {\n        this.prefixRepeat = this.prefixRepeat.concat(n);\n      } else {\n        this.motionRepeat = this.motionRepeat.concat(n);\n      }\n    };\n    InputState.prototype.getRepeat = function() {\n      var repeat = 0;\n      if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) {\n        repeat = 1;\n        if (this.prefixRepeat.length > 0) {\n          repeat *= parseInt(this.prefixRepeat.join(''), 10);\n        }\n        if (this.motionRepeat.length > 0) {\n          repeat *= parseInt(this.motionRepeat.join(''), 10);\n        }\n      }\n      return repeat;\n    };\n\n    function clearInputState(cm, reason) {\n      cm.state.vim.inputState = new InputState();\n      CodeMirror.signal(cm, 'vim-command-done', reason);\n    }\n    function Register(text, linewise, blockwise) {\n      this.clear();\n      this.keyBuffer = [text || ''];\n      this.insertModeChanges = [];\n      this.searchQueries = [];\n      this.linewise = !!linewise;\n      this.blockwise = !!blockwise;\n    }\n    Register.prototype = {\n      setText: function(text, linewise, blockwise) {\n        this.keyBuffer = [text || ''];\n        this.linewise = !!linewise;\n        this.blockwise = !!blockwise;\n      },\n      pushText: function(text, linewise) {\n        if (linewise) {\n          if (!this.linewise) {\n            this.keyBuffer.push('\\n');\n          }\n          this.linewise = true;\n        }\n        this.keyBuffer.push(text);\n      },\n      pushInsertModeChanges: function(changes) {\n        this.insertModeChanges.push(createInsertModeChanges(changes));\n      },\n      pushSearchQuery: function(query) {\n        this.searchQueries.push(query);\n      },\n      clear: function() {\n        this.keyBuffer = [];\n        this.insertModeChanges = [];\n        this.searchQueries = [];\n        this.linewise = false;\n      },\n      toString: function() {\n        return this.keyBuffer.join('');\n      }\n    };\n    function defineRegister(name, register) {\n      var registers = vimGlobalState.registerController.registers;\n      if (!name || name.length != 1) {\n        throw Error('Register name must be 1 character');\n      }\n      registers[name] = register;\n      validRegisters.push(name);\n    }\n    function RegisterController(registers) {\n      this.registers = registers;\n      this.unnamedRegister = registers['\"'] = new Register();\n      registers['.'] = new Register();\n      registers[':'] = new Register();\n      registers['/'] = new Register();\n    }\n    RegisterController.prototype = {\n      pushText: function(registerName, operator, text, linewise, blockwise) {\n        if (linewise && text.charAt(text.length - 1) !== '\\n'){\n          text += '\\n';\n        }\n        var register = this.isValidRegister(registerName) ?\n            this.getRegister(registerName) : null;\n        if (!register) {\n          switch (operator) {\n            case 'yank':\n              this.registers['0'] = new Register(text, linewise, blockwise);\n              break;\n            case 'delete':\n            case 'change':\n              if (text.indexOf('\\n') == -1) {\n                this.registers['-'] = new Register(text, linewise);\n              } else {\n                this.shiftNumericRegisters_();\n                this.registers['1'] = new Register(text, linewise);\n              }\n              break;\n          }\n          this.unnamedRegister.setText(text, linewise, blockwise);\n          return;\n        }\n        var append = isUpperCase(registerName);\n        if (append) {\n          register.pushText(text, linewise);\n        } else {\n          register.setText(text, linewise, blockwise);\n        }\n        this.unnamedRegister.setText(register.toString(), linewise);\n      },\n      getRegister: function(name) {\n        if (!this.isValidRegister(name)) {\n          return this.unnamedRegister;\n        }\n        name = name.toLowerCase();\n        if (!this.registers[name]) {\n          this.registers[name] = new Register();\n        }\n        return this.registers[name];\n      },\n      isValidRegister: function(name) {\n        return name && inArray(name, validRegisters);\n      },\n      shiftNumericRegisters_: function() {\n        for (var i = 9; i >= 2; i--) {\n          this.registers[i] = this.getRegister('' + (i - 1));\n        }\n      }\n    };\n    function HistoryController() {\n        this.historyBuffer = [];\n        this.iterator = 0;\n        this.initialPrefix = null;\n    }\n    HistoryController.prototype = {\n      nextMatch: function (input, up) {\n        var historyBuffer = this.historyBuffer;\n        var dir = up ? -1 : 1;\n        if (this.initialPrefix === null) this.initialPrefix = input;\n        for (var i = this.iterator + dir; up ? i >= 0 : i < historyBuffer.length; i+= dir) {\n          var element = historyBuffer[i];\n          for (var j = 0; j <= element.length; j++) {\n            if (this.initialPrefix == element.substring(0, j)) {\n              this.iterator = i;\n              return element;\n            }\n          }\n        }\n        if (i >= historyBuffer.length) {\n          this.iterator = historyBuffer.length;\n          return this.initialPrefix;\n        }\n        if (i < 0 ) return input;\n      },\n      pushInput: function(input) {\n        var index = this.historyBuffer.indexOf(input);\n        if (index > -1) this.historyBuffer.splice(index, 1);\n        if (input.length) this.historyBuffer.push(input);\n      },\n      reset: function() {\n        this.initialPrefix = null;\n        this.iterator = this.historyBuffer.length;\n      }\n    };\n    var commandDispatcher = {\n      matchCommand: function(keys, keyMap, inputState, context) {\n        var matches = commandMatches(keys, keyMap, context, inputState);\n        if (!matches.full && !matches.partial) {\n          return {type: 'none'};\n        } else if (!matches.full && matches.partial) {\n          return {type: 'partial'};\n        }\n\n        var bestMatch;\n        for (var i = 0; i < matches.full.length; i++) {\n          var match = matches.full[i];\n          if (!bestMatch) {\n            bestMatch = match;\n          }\n        }\n        if (bestMatch.keys.slice(-11) == '<character>') {\n          var character = lastChar(keys);\n          if (/<C-.>/.test(character)) return {type: 'none'};\n          inputState.selectedCharacter = character;\n        }\n        return {type: 'full', command: bestMatch};\n      },\n      processCommand: function(cm, vim, command) {\n        vim.inputState.repeatOverride = command.repeatOverride;\n        switch (command.type) {\n          case 'motion':\n            this.processMotion(cm, vim, command);\n            break;\n          case 'operator':\n            this.processOperator(cm, vim, command);\n            break;\n          case 'operatorMotion':\n            this.processOperatorMotion(cm, vim, command);\n            break;\n          case 'action':\n            this.processAction(cm, vim, command);\n            break;\n          case 'search':\n            this.processSearch(cm, vim, command);\n            break;\n          case 'ex':\n          case 'keyToEx':\n            this.processEx(cm, vim, command);\n            break;\n          default:\n            break;\n        }\n      },\n      processMotion: function(cm, vim, command) {\n        vim.inputState.motion = command.motion;\n        vim.inputState.motionArgs = copyArgs(command.motionArgs);\n        this.evalInput(cm, vim);\n      },\n      processOperator: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        if (inputState.operator) {\n          if (inputState.operator == command.operator) {\n            inputState.motion = 'expandToLine';\n            inputState.motionArgs = { linewise: true };\n            this.evalInput(cm, vim);\n            return;\n          } else {\n            clearInputState(cm);\n          }\n        }\n        inputState.operator = command.operator;\n        inputState.operatorArgs = copyArgs(command.operatorArgs);\n        if (vim.visualMode) {\n          this.evalInput(cm, vim);\n        }\n      },\n      processOperatorMotion: function(cm, vim, command) {\n        var visualMode = vim.visualMode;\n        var operatorMotionArgs = copyArgs(command.operatorMotionArgs);\n        if (operatorMotionArgs) {\n          if (visualMode && operatorMotionArgs.visualLine) {\n            vim.visualLine = true;\n          }\n        }\n        this.processOperator(cm, vim, command);\n        if (!visualMode) {\n          this.processMotion(cm, vim, command);\n        }\n      },\n      processAction: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        var repeat = inputState.getRepeat();\n        var repeatIsExplicit = !!repeat;\n        var actionArgs = copyArgs(command.actionArgs) || {};\n        if (inputState.selectedCharacter) {\n          actionArgs.selectedCharacter = inputState.selectedCharacter;\n        }\n        if (command.operator) {\n          this.processOperator(cm, vim, command);\n        }\n        if (command.motion) {\n          this.processMotion(cm, vim, command);\n        }\n        if (command.motion || command.operator) {\n          this.evalInput(cm, vim);\n        }\n        actionArgs.repeat = repeat || 1;\n        actionArgs.repeatIsExplicit = repeatIsExplicit;\n        actionArgs.registerName = inputState.registerName;\n        clearInputState(cm);\n        vim.lastMotion = null;\n        if (command.isEdit) {\n          this.recordLastEdit(vim, inputState, command);\n        }\n        actions[command.action](cm, actionArgs, vim);\n      },\n      processSearch: function(cm, vim, command) {\n        if (!cm.getSearchCursor) {\n          return;\n        }\n        var forward = command.searchArgs.forward;\n        var wholeWordOnly = command.searchArgs.wholeWordOnly;\n        getSearchState(cm).setReversed(!forward);\n        var promptPrefix = (forward) ? '/' : '?';\n        var originalQuery = getSearchState(cm).getQuery();\n        var originalScrollPos = cm.getScrollInfo();\n        function handleQuery(query, ignoreCase, smartCase) {\n          vimGlobalState.searchHistoryController.pushInput(query);\n          vimGlobalState.searchHistoryController.reset();\n          try {\n            updateSearchQuery(cm, query, ignoreCase, smartCase);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + query);\n            clearInputState(cm);\n            return;\n          }\n          commandDispatcher.processMotion(cm, vim, {\n            type: 'motion',\n            motion: 'findNext',\n            motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist }\n          });\n        }\n        function onPromptClose(query) {\n          handleQuery(query, true /** ignoreCase */, true /** smartCase */);\n          var macroModeState = vimGlobalState.macroModeState;\n          if (macroModeState.isRecording) {\n            logSearchQuery(macroModeState, query);\n          }\n        }\n        function onPromptKeyUp(e, query, close) {\n          var keyName = CodeMirror.keyName(e), up, offset;\n          if (keyName == 'Up' || keyName == 'Down') {\n            up = keyName == 'Up' ? true : false;\n            offset = e.target ? e.target.selectionEnd : 0;\n            query = vimGlobalState.searchHistoryController.nextMatch(query, up) || '';\n            close(query);\n            if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n          } else {\n            if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n              vimGlobalState.searchHistoryController.reset();\n          }\n          var parsedQuery;\n          try {\n            parsedQuery = updateSearchQuery(cm, query,\n                true /** ignoreCase */, true /** smartCase */);\n          } catch (e) {\n          }\n          if (parsedQuery) {\n            cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30);\n          } else {\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n          }\n        }\n        function onPromptKeyDown(e, query, close) {\n          var keyName = CodeMirror.keyName(e);\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n              (keyName == 'Backspace' && query == '')) {\n            vimGlobalState.searchHistoryController.pushInput(query);\n            vimGlobalState.searchHistoryController.reset();\n            updateSearchQuery(cm, originalQuery);\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n            CodeMirror.e_stop(e);\n            clearInputState(cm);\n            close();\n            cm.focus();\n          } else if (keyName == 'Up' || keyName == 'Down') {\n            CodeMirror.e_stop(e);\n          } else if (keyName == 'Ctrl-U') {\n            CodeMirror.e_stop(e);\n            close('');\n          }\n        }\n        switch (command.searchArgs.querySrc) {\n          case 'prompt':\n            var macroModeState = vimGlobalState.macroModeState;\n            if (macroModeState.isPlaying) {\n              var query = macroModeState.replaySearchQueries.shift();\n              handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            } else {\n              showPrompt(cm, {\n                  onClose: onPromptClose,\n                  prefix: promptPrefix,\n                  desc: searchPromptDesc,\n                  onKeyUp: onPromptKeyUp,\n                  onKeyDown: onPromptKeyDown\n              });\n            }\n            break;\n          case 'wordUnderCursor':\n            var word = expandWordUnderCursor(cm, false /** inclusive */,\n                true /** forward */, false /** bigWord */,\n                true /** noSymbol */);\n            var isKeyword = true;\n            if (!word) {\n              word = expandWordUnderCursor(cm, false /** inclusive */,\n                  true /** forward */, false /** bigWord */,\n                  false /** noSymbol */);\n              isKeyword = false;\n            }\n            if (!word) {\n              return;\n            }\n            var query = cm.getLine(word.start.line).substring(word.start.ch,\n                word.end.ch);\n            if (isKeyword && wholeWordOnly) {\n                query = '\\\\b' + query + '\\\\b';\n            } else {\n              query = escapeRegex(query);\n            }\n            vimGlobalState.jumpList.cachedCursor = cm.getCursor();\n            cm.setCursor(word.start);\n\n            handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            break;\n        }\n      },\n      processEx: function(cm, vim, command) {\n        function onPromptClose(input) {\n          vimGlobalState.exCommandHistoryController.pushInput(input);\n          vimGlobalState.exCommandHistoryController.reset();\n          exCommandDispatcher.processCommand(cm, input);\n        }\n        function onPromptKeyDown(e, input, close) {\n          var keyName = CodeMirror.keyName(e), up, offset;\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n              (keyName == 'Backspace' && input == '')) {\n            vimGlobalState.exCommandHistoryController.pushInput(input);\n            vimGlobalState.exCommandHistoryController.reset();\n            CodeMirror.e_stop(e);\n            clearInputState(cm);\n            close();\n            cm.focus();\n          }\n          if (keyName == 'Up' || keyName == 'Down') {\n            CodeMirror.e_stop(e);\n            up = keyName == 'Up' ? true : false;\n            offset = e.target ? e.target.selectionEnd : 0;\n            input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || '';\n            close(input);\n            if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n          } else if (keyName == 'Ctrl-U') {\n            CodeMirror.e_stop(e);\n            close('');\n          } else {\n            if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n              vimGlobalState.exCommandHistoryController.reset();\n          }\n        }\n        if (command.type == 'keyToEx') {\n          exCommandDispatcher.processCommand(cm, command.exArgs.input);\n        } else {\n          if (vim.visualMode) {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\\'<,\\'>',\n                onKeyDown: onPromptKeyDown, selectValueOnOpen: false});\n          } else {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':',\n                onKeyDown: onPromptKeyDown});\n          }\n        }\n      },\n      evalInput: function(cm, vim) {\n        var inputState = vim.inputState;\n        var motion = inputState.motion;\n        var motionArgs = inputState.motionArgs || {};\n        var operator = inputState.operator;\n        var operatorArgs = inputState.operatorArgs || {};\n        var registerName = inputState.registerName;\n        var sel = vim.sel;\n        var origHead = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.head): cm.getCursor('head'));\n        var origAnchor = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.anchor) : cm.getCursor('anchor'));\n        var oldHead = copyCursor(origHead);\n        var oldAnchor = copyCursor(origAnchor);\n        var newHead, newAnchor;\n        var repeat;\n        if (operator) {\n          this.recordLastEdit(vim, inputState);\n        }\n        if (inputState.repeatOverride !== undefined) {\n          repeat = inputState.repeatOverride;\n        } else {\n          repeat = inputState.getRepeat();\n        }\n        if (repeat > 0 && motionArgs.explicitRepeat) {\n          motionArgs.repeatIsExplicit = true;\n        } else if (motionArgs.noRepeat ||\n            (!motionArgs.explicitRepeat && repeat === 0)) {\n          repeat = 1;\n          motionArgs.repeatIsExplicit = false;\n        }\n        if (inputState.selectedCharacter) {\n          motionArgs.selectedCharacter = operatorArgs.selectedCharacter =\n              inputState.selectedCharacter;\n        }\n        motionArgs.repeat = repeat;\n        clearInputState(cm);\n        if (motion) {\n          var motionResult = motions[motion](cm, origHead, motionArgs, vim);\n          vim.lastMotion = motions[motion];\n          if (!motionResult) {\n            return;\n          }\n          if (motionArgs.toJumplist) {\n            if (!operator && cm.ace.curOp != null)\n              cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n            var jumpList = vimGlobalState.jumpList;\n            var cachedCursor = jumpList.cachedCursor;\n            if (cachedCursor) {\n              recordJumpPosition(cm, cachedCursor, motionResult);\n              delete jumpList.cachedCursor;\n            } else {\n              recordJumpPosition(cm, origHead, motionResult);\n            }\n          }\n          if (motionResult instanceof Array) {\n            newAnchor = motionResult[0];\n            newHead = motionResult[1];\n          } else {\n            newHead = motionResult;\n          }\n          if (!newHead) {\n            newHead = copyCursor(origHead);\n          }\n          if (vim.visualMode) {\n            if (!(vim.visualBlock && newHead.ch === Infinity)) {\n              newHead = clipCursorToContent(cm, newHead, vim.visualBlock);\n            }\n            if (newAnchor) {\n              newAnchor = clipCursorToContent(cm, newAnchor, true);\n            }\n            newAnchor = newAnchor || oldAnchor;\n            sel.anchor = newAnchor;\n            sel.head = newHead;\n            updateCmSelection(cm);\n            updateMark(cm, vim, '<',\n                cursorIsBefore(newAnchor, newHead) ? newAnchor\n                    : newHead);\n            updateMark(cm, vim, '>',\n                cursorIsBefore(newAnchor, newHead) ? newHead\n                    : newAnchor);\n          } else if (!operator) {\n            newHead = clipCursorToContent(cm, newHead);\n            cm.setCursor(newHead.line, newHead.ch);\n          }\n        }\n        if (operator) {\n          if (operatorArgs.lastSel) {\n            newAnchor = oldAnchor;\n            var lastSel = operatorArgs.lastSel;\n            var lineOffset = Math.abs(lastSel.head.line - lastSel.anchor.line);\n            var chOffset = Math.abs(lastSel.head.ch - lastSel.anchor.ch);\n            if (lastSel.visualLine) {\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n            } else if (lastSel.visualBlock) {\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch + chOffset);\n            } else if (lastSel.head.line == lastSel.anchor.line) {\n              newHead = Pos(oldAnchor.line, oldAnchor.ch + chOffset);\n            } else {\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n            }\n            vim.visualMode = true;\n            vim.visualLine = lastSel.visualLine;\n            vim.visualBlock = lastSel.visualBlock;\n            sel = vim.sel = {\n              anchor: newAnchor,\n              head: newHead\n            };\n            updateCmSelection(cm);\n          } else if (vim.visualMode) {\n            operatorArgs.lastSel = {\n              anchor: copyCursor(sel.anchor),\n              head: copyCursor(sel.head),\n              visualBlock: vim.visualBlock,\n              visualLine: vim.visualLine\n            };\n          }\n          var curStart, curEnd, linewise, mode;\n          var cmSel;\n          if (vim.visualMode) {\n            curStart = cursorMin(sel.head, sel.anchor);\n            curEnd = cursorMax(sel.head, sel.anchor);\n            linewise = vim.visualLine || operatorArgs.linewise;\n            mode = vim.visualBlock ? 'block' :\n                   linewise ? 'line' :\n                   'char';\n            cmSel = makeCmSelection(cm, {\n              anchor: curStart,\n              head: curEnd\n            }, mode);\n            if (linewise) {\n              var ranges = cmSel.ranges;\n              if (mode == 'block') {\n                for (var i = 0; i < ranges.length; i++) {\n                  ranges[i].head.ch = lineLength(cm, ranges[i].head.line);\n                }\n              } else if (mode == 'line') {\n                ranges[0].head = Pos(ranges[0].head.line + 1, 0);\n              }\n            }\n          } else {\n            curStart = copyCursor(newAnchor || oldAnchor);\n            curEnd = copyCursor(newHead || oldHead);\n            if (cursorIsBefore(curEnd, curStart)) {\n              var tmp = curStart;\n              curStart = curEnd;\n              curEnd = tmp;\n            }\n            linewise = motionArgs.linewise || operatorArgs.linewise;\n            if (linewise) {\n              expandSelectionToLine(cm, curStart, curEnd);\n            } else if (motionArgs.forward) {\n              clipToLine(cm, curStart, curEnd);\n            }\n            mode = 'char';\n            var exclusive = !motionArgs.inclusive || linewise;\n            cmSel = makeCmSelection(cm, {\n              anchor: curStart,\n              head: curEnd\n            }, mode, exclusive);\n          }\n          cm.setSelections(cmSel.ranges, cmSel.primary);\n          vim.lastMotion = null;\n          operatorArgs.repeat = repeat; // For indent in visual mode.\n          operatorArgs.registerName = registerName;\n          operatorArgs.linewise = linewise;\n          var operatorMoveTo = operators[operator](\n            cm, operatorArgs, cmSel.ranges, oldAnchor, newHead);\n          if (vim.visualMode) {\n            exitVisualMode(cm, operatorMoveTo != null);\n          }\n          if (operatorMoveTo) {\n            cm.setCursor(operatorMoveTo);\n          }\n        }\n      },\n      recordLastEdit: function(vim, inputState, actionCommand) {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        vim.lastEditInputState = inputState;\n        vim.lastEditActionCommand = actionCommand;\n        macroModeState.lastInsertModeChanges.changes = [];\n        macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false;\n      }\n    };\n    var motions = {\n      moveToTopLine: function(cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).top + motionArgs.repeat -1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToMiddleLine: function(cm) {\n        var range = getUserVisibleLines(cm);\n        var line = Math.floor((range.top + range.bottom) * 0.5);\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToBottomLine: function(cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).bottom - motionArgs.repeat +1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      expandToLine: function(_cm, head, motionArgs) {\n        var cur = head;\n        return Pos(cur.line + motionArgs.repeat - 1, Infinity);\n      },\n      findNext: function(cm, _head, motionArgs) {\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        if (!query) {\n          return;\n        }\n        var prev = !motionArgs.forward;\n        prev = (state.isReversed()) ? !prev : prev;\n        highlightSearchMatches(cm, query);\n        return findNext(cm, prev/** prev */, query, motionArgs.repeat);\n      },\n      goToMark: function(cm, _head, motionArgs, vim) {\n        var pos = getMarkPos(cm, vim, motionArgs.selectedCharacter);\n        if (pos) {\n          return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos;\n        }\n        return null;\n      },\n      moveToOtherHighlightedEnd: function(cm, _head, motionArgs, vim) {\n        if (vim.visualBlock && motionArgs.sameLine) {\n          var sel = vim.sel;\n          return [\n            clipCursorToContent(cm, Pos(sel.anchor.line, sel.head.ch)),\n            clipCursorToContent(cm, Pos(sel.head.line, sel.anchor.ch))\n          ];\n        } else {\n          return ([vim.sel.head, vim.sel.anchor]);\n        }\n      },\n      jumpToMark: function(cm, head, motionArgs, vim) {\n        var best = head;\n        for (var i = 0; i < motionArgs.repeat; i++) {\n          var cursor = best;\n          for (var key in vim.marks) {\n            if (!isLowerCase(key)) {\n              continue;\n            }\n            var mark = vim.marks[key].find();\n            var isWrongDirection = (motionArgs.forward) ?\n              cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark);\n\n            if (isWrongDirection) {\n              continue;\n            }\n            if (motionArgs.linewise && (mark.line == cursor.line)) {\n              continue;\n            }\n\n            var equal = cursorEqual(cursor, best);\n            var between = (motionArgs.forward) ?\n              cursorIsBetween(cursor, mark, best) :\n              cursorIsBetween(best, mark, cursor);\n\n            if (equal || between) {\n              best = mark;\n            }\n          }\n        }\n\n        if (motionArgs.linewise) {\n          best = Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line)));\n        }\n        return best;\n      },\n      moveByCharacters: function(_cm, head, motionArgs) {\n        var cur = head;\n        var repeat = motionArgs.repeat;\n        var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat;\n        return Pos(cur.line, ch);\n      },\n      moveByLines: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        var endCh = cur.ch;\n        switch (vim.lastMotion) {\n          case this.moveByLines:\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveToColumn:\n          case this.moveToEol:\n            endCh = vim.lastHPos;\n            break;\n          default:\n            vim.lastHPos = endCh;\n        }\n        var repeat = motionArgs.repeat+(motionArgs.repeatOffset||0);\n        var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;\n        var first = cm.firstLine();\n        var last = cm.lastLine();\n        if (line < first && cur.line == first){\n          return this.moveToStartOfLine(cm, head, motionArgs, vim);\n        }else if (line > last && cur.line == last){\n            return this.moveToEol(cm, head, motionArgs, vim);\n        }\n        var fold = cm.ace.session.getFoldLine(line);\n        if (fold) {\n          if (motionArgs.forward) {\n            if (line > fold.start.row)\n              line = fold.end.row + 1;\n          } else {\n            line = fold.start.row;\n          }\n        }\n        if (motionArgs.toFirstChar){\n          endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));\n          vim.lastHPos = endCh;\n        }\n        vim.lastHSPos = cm.charCoords(Pos(line, endCh),'div').left;\n        return Pos(line, endCh);\n      },\n      moveByDisplayLines: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        switch (vim.lastMotion) {\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveByLines:\n          case this.moveToColumn:\n          case this.moveToEol:\n            break;\n          default:\n            vim.lastHSPos = cm.charCoords(cur,'div').left;\n        }\n        var repeat = motionArgs.repeat;\n        var res=cm.findPosV(cur,(motionArgs.forward ? repeat : -repeat),'line',vim.lastHSPos);\n        if (res.hitSide) {\n          if (motionArgs.forward) {\n            var lastCharCoords = cm.charCoords(res, 'div');\n            var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos };\n            var res = cm.coordsChar(goalCoords, 'div');\n          } else {\n            var resCoords = cm.charCoords(Pos(cm.firstLine(), 0), 'div');\n            resCoords.left = vim.lastHSPos;\n            res = cm.coordsChar(resCoords, 'div');\n          }\n        }\n        vim.lastHPos = res.ch;\n        return res;\n      },\n      moveByPage: function(cm, head, motionArgs) {\n        var curStart = head;\n        var repeat = motionArgs.repeat;\n        return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');\n      },\n      moveByParagraph: function(cm, head, motionArgs) {\n        var dir = motionArgs.forward ? 1 : -1;\n        return findParagraph(cm, head, motionArgs.repeat, dir);\n      },\n      moveByScroll: function(cm, head, motionArgs, vim) {\n        var scrollbox = cm.getScrollInfo();\n        var curEnd = null;\n        var repeat = motionArgs.repeat;\n        if (!repeat) {\n          repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight());\n        }\n        var orig = cm.charCoords(head, 'local');\n        motionArgs.repeat = repeat;\n        var curEnd = motions.moveByDisplayLines(cm, head, motionArgs, vim);\n        if (!curEnd) {\n          return null;\n        }\n        var dest = cm.charCoords(curEnd, 'local');\n        cm.scrollTo(null, scrollbox.top + dest.top - orig.top);\n        return curEnd;\n      },\n      moveByWords: function(cm, head, motionArgs) {\n        return moveToWord(cm, head, motionArgs.repeat, !!motionArgs.forward,\n            !!motionArgs.wordEnd, !!motionArgs.bigWord);\n      },\n      moveTillCharacter: function(cm, _head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        var curEnd = moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter);\n        var increment = motionArgs.forward ? -1 : 1;\n        recordLastCharacterSearch(increment, motionArgs);\n        if (!curEnd) return null;\n        curEnd.ch += increment;\n        return curEnd;\n      },\n      moveToCharacter: function(cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        recordLastCharacterSearch(0, motionArgs);\n        return moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || head;\n      },\n      moveToSymbol: function(cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        return findSymbol(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || head;\n      },\n      moveToColumn: function(cm, head, motionArgs, vim) {\n        var repeat = motionArgs.repeat;\n        vim.lastHPos = repeat - 1;\n        vim.lastHSPos = cm.charCoords(head,'div').left;\n        return moveToColumn(cm, repeat);\n      },\n      moveToEol: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        vim.lastHPos = Infinity;\n        var retval= Pos(cur.line + motionArgs.repeat - 1, Infinity);\n        var end=cm.clipPos(retval);\n        end.ch--;\n        vim.lastHSPos = cm.charCoords(end,'div').left;\n        return retval;\n      },\n      moveToFirstNonWhiteSpaceCharacter: function(cm, head) {\n        var cursor = head;\n        return Pos(cursor.line,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line)));\n      },\n      moveToMatchedSymbol: function(cm, head) {\n        var cursor = head;\n        var line = cursor.line;\n        var ch = cursor.ch;\n        var lineText = cm.getLine(line);\n        var symbol;\n        do {\n          symbol = lineText.charAt(ch++);\n          if (symbol && isMatchableSymbol(symbol)) {\n            var style = cm.getTokenTypeAt(Pos(line, ch));\n            if (style !== \"string\" && style !== \"comment\") {\n              break;\n            }\n          }\n        } while (symbol);\n        if (symbol) {\n          var matched = cm.findMatchingBracket(Pos(line, ch));\n          return matched.to;\n        } else {\n          return cursor;\n        }\n      },\n      moveToStartOfLine: function(_cm, head) {\n        return Pos(head.line, 0);\n      },\n      moveToLineOrEdgeOfDocument: function(cm, _head, motionArgs) {\n        var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine();\n        if (motionArgs.repeatIsExplicit) {\n          lineNum = motionArgs.repeat - cm.getOption('firstLineNumber');\n        }\n        return Pos(lineNum,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum)));\n      },\n      textObjectManipulation: function(cm, head, motionArgs, vim) {\n        var mirroredPairs = {'(': ')', ')': '(',\n                             '{': '}', '}': '{',\n                             '[': ']', ']': '[',\n                             '<': '>', '>': '<'};\n        var selfPaired = {'\\'': true, '\"': true, '`': true};\n\n        var character = motionArgs.selectedCharacter;\n        if (character == 'b') {\n          character = '(';\n        } else if (character == 'B') {\n          character = '{';\n        }\n        var inclusive = !motionArgs.textObjectInner;\n\n        var tmp;\n        if (mirroredPairs[character]) {\n          tmp = selectCompanionObject(cm, head, character, inclusive);\n        } else if (selfPaired[character]) {\n          tmp = findBeginningAndEnd(cm, head, character, inclusive);\n        } else if (character === 'W') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     true /** bigWord */);\n        } else if (character === 'w') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     false /** bigWord */);\n        } else if (character === 'p') {\n          tmp = findParagraph(cm, head, motionArgs.repeat, 0, inclusive);\n          motionArgs.linewise = true;\n          if (vim.visualMode) {\n            if (!vim.visualLine) { vim.visualLine = true; }\n          } else {\n            var operatorArgs = vim.inputState.operatorArgs;\n            if (operatorArgs) { operatorArgs.linewise = true; }\n            tmp.end.line--;\n          }\n        } else {\n          return null;\n        }\n\n        if (!cm.state.vim.visualMode) {\n          return [tmp.start, tmp.end];\n        } else {\n          return expandSelection(cm, tmp.start, tmp.end);\n        }\n      },\n\n      repeatLastCharacterSearch: function(cm, head, motionArgs) {\n        var lastSearch = vimGlobalState.lastCharacterSearch;\n        var repeat = motionArgs.repeat;\n        var forward = motionArgs.forward === lastSearch.forward;\n        var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1);\n        cm.moveH(-increment, 'char');\n        motionArgs.inclusive = forward ? true : false;\n        var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter);\n        if (!curEnd) {\n          cm.moveH(increment, 'char');\n          return head;\n        }\n        curEnd.ch += increment;\n        return curEnd;\n      }\n    };\n\n    function defineMotion(name, fn) {\n      motions[name] = fn;\n    }\n\n    function fillArray(val, times) {\n      var arr = [];\n      for (var i = 0; i < times; i++) {\n        arr.push(val);\n      }\n      return arr;\n    }\n    var operators = {\n      change: function(cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock = vim.visualBlock;\n        if (!vim.visualMode) {\n          var anchor = ranges[0].anchor,\n              head = ranges[0].head;\n          text = cm.getRange(anchor, head);\n          var lastState = vim.lastEditInputState || {};\n          if (lastState.motion == \"moveByWords\" && !isWhiteSpaceString(text)) {\n            var match = (/\\s+$/).exec(text);\n            if (match && lastState.motionArgs && lastState.motionArgs.forward) {\n              head = offsetCursor(head, 0, - match[0].length);\n              text = text.slice(0, - match[0].length);\n            }\n          }\n          var prevLineEnd = new Pos(anchor.line - 1, Number.MAX_VALUE);\n          var wasLastLine = cm.firstLine() == cm.lastLine();\n          if (head.line > cm.lastLine() && args.linewise && !wasLastLine) {\n            cm.replaceRange('', prevLineEnd, head);\n          } else {\n            cm.replaceRange('', anchor, head);\n          }\n          if (args.linewise) {\n            if (!wasLastLine) {\n              cm.setCursor(prevLineEnd);\n              CodeMirror.commands.newlineAndIndent(cm);\n            }\n            anchor.ch = Number.MAX_VALUE;\n          }\n          finalHead = anchor;\n        } else {\n          text = cm.getSelection();\n          var replacement = fillArray('', ranges.length);\n          cm.replaceSelections(replacement);\n          finalHead = cursorMin(ranges[0].head, ranges[0].anchor);\n        }\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'change', text,\n            args.linewise, ranges.length > 1);\n        actions.enterInsertMode(cm, {head: finalHead}, cm.state.vim);\n      },\n      'delete': function(cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        if (!vim.visualBlock) {\n          var anchor = ranges[0].anchor,\n              head = ranges[0].head;\n          if (args.linewise &&\n              head.line != cm.firstLine() &&\n              anchor.line == cm.lastLine() &&\n              anchor.line == head.line - 1) {\n            if (anchor.line == cm.firstLine()) {\n              anchor.ch = 0;\n            } else {\n              anchor = Pos(anchor.line - 1, lineLength(cm, anchor.line - 1));\n            }\n          }\n          text = cm.getRange(anchor, head);\n          cm.replaceRange('', anchor, head);\n          finalHead = anchor;\n          if (args.linewise) {\n            finalHead = motions.moveToFirstNonWhiteSpaceCharacter(cm, anchor);\n          }\n        } else {\n          text = cm.getSelection();\n          var replacement = fillArray('', ranges.length);\n          cm.replaceSelections(replacement);\n          finalHead = ranges[0].anchor;\n        }\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'delete', text,\n            args.linewise, vim.visualBlock);\n        var includeLineBreak = vim.insertMode\n        return clipCursorToContent(cm, finalHead, includeLineBreak);\n      },\n      indent: function(cm, args, ranges) {\n        var vim = cm.state.vim;\n        var startLine = ranges[0].anchor.line;\n        var endLine = vim.visualBlock ?\n          ranges[ranges.length - 1].anchor.line :\n          ranges[0].head.line;\n        var repeat = (vim.visualMode) ? args.repeat : 1;\n        if (args.linewise) {\n          endLine--;\n        }\n        for (var i = startLine; i <= endLine; i++) {\n          for (var j = 0; j < repeat; j++) {\n            cm.indentLine(i, args.indentRight);\n          }\n        }\n        return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor);\n      },\n      changeCase: function(cm, args, ranges, oldAnchor, newHead) {\n        var selections = cm.getSelections();\n        var swapped = [];\n        var toLower = args.toLower;\n        for (var j = 0; j < selections.length; j++) {\n          var toSwap = selections[j];\n          var text = '';\n          if (toLower === true) {\n            text = toSwap.toLowerCase();\n          } else if (toLower === false) {\n            text = toSwap.toUpperCase();\n          } else {\n            for (var i = 0; i < toSwap.length; i++) {\n              var character = toSwap.charAt(i);\n              text += isUpperCase(character) ? character.toLowerCase() :\n                  character.toUpperCase();\n            }\n          }\n          swapped.push(text);\n        }\n        cm.replaceSelections(swapped);\n        if (args.shouldMoveCursor){\n          return newHead;\n        } else if (!cm.state.vim.visualMode && args.linewise && ranges[0].anchor.line + 1 == ranges[0].head.line) {\n          return motions.moveToFirstNonWhiteSpaceCharacter(cm, oldAnchor);\n        } else if (args.linewise){\n          return oldAnchor;\n        } else {\n          return cursorMin(ranges[0].anchor, ranges[0].head);\n        }\n      },\n      yank: function(cm, args, ranges, oldAnchor) {\n        var vim = cm.state.vim;\n        var text = cm.getSelection();\n        var endPos = vim.visualMode\n          ? cursorMin(vim.sel.anchor, vim.sel.head, ranges[0].head, ranges[0].anchor)\n          : oldAnchor;\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'yank',\n            text, args.linewise, vim.visualBlock);\n        return endPos;\n      }\n    };\n\n    function defineOperator(name, fn) {\n      operators[name] = fn;\n    }\n\n    var actions = {\n      jumpListWalk: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat;\n        var forward = actionArgs.forward;\n        var jumpList = vimGlobalState.jumpList;\n\n        var mark = jumpList.move(cm, forward ? repeat : -repeat);\n        var markPos = mark ? mark.find() : undefined;\n        markPos = markPos ? markPos : cm.getCursor();\n        cm.setCursor(markPos);\n        cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n      },\n      scroll: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat || 1;\n        var lineHeight = cm.defaultTextHeight();\n        var top = cm.getScrollInfo().top;\n        var delta = lineHeight * repeat;\n        var newPos = actionArgs.forward ? top + delta : top - delta;\n        var cursor = copyCursor(cm.getCursor());\n        var cursorCoords = cm.charCoords(cursor, 'local');\n        if (actionArgs.forward) {\n          if (newPos > cursorCoords.top) {\n             cursor.line += (newPos - cursorCoords.top) / lineHeight;\n             cursor.line = Math.ceil(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(null, cursorCoords.top);\n          } else {\n             cm.scrollTo(null, newPos);\n          }\n        } else {\n          var newBottom = newPos + cm.getScrollInfo().clientHeight;\n          if (newBottom < cursorCoords.bottom) {\n             cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight;\n             cursor.line = Math.floor(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(\n                 null, cursorCoords.bottom - cm.getScrollInfo().clientHeight);\n          } else {\n             cm.scrollTo(null, newPos);\n          }\n        }\n      },\n      scrollToCursor: function(cm, actionArgs) {\n        var lineNum = cm.getCursor().line;\n        var charCoords = cm.charCoords(Pos(lineNum, 0), 'local');\n        var height = cm.getScrollInfo().clientHeight;\n        var y = charCoords.top;\n        var lineHeight = charCoords.bottom - y;\n        switch (actionArgs.position) {\n          case 'center': y = y - (height / 2) + lineHeight;\n            break;\n          case 'bottom': y = y - height + lineHeight*1.4;\n            break;\n          case 'top': y = y + lineHeight*0.4;\n            break;\n        }\n        cm.scrollTo(null, y);\n      },\n      replayMacro: function(cm, actionArgs, vim) {\n        var registerName = actionArgs.selectedCharacter;\n        var repeat = actionArgs.repeat;\n        var macroModeState = vimGlobalState.macroModeState;\n        if (registerName == '@') {\n          registerName = macroModeState.latestRegister;\n        }\n        while(repeat--){\n          executeMacroRegister(cm, vim, macroModeState, registerName);\n        }\n      },\n      enterMacroRecordMode: function(cm, actionArgs) {\n        var macroModeState = vimGlobalState.macroModeState;\n        var registerName = actionArgs.selectedCharacter;\n        if (vimGlobalState.registerController.isValidRegister(registerName)) {\n          macroModeState.enterMacroRecordMode(cm, registerName);\n        }\n      },\n      toggleOverwrite: function(cm) {\n        if (!cm.state.overwrite) {\n          cm.toggleOverwrite(true);\n          cm.setOption('keyMap', 'vim-replace');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"replace\"});\n        } else {\n          cm.toggleOverwrite(false);\n          cm.setOption('keyMap', 'vim-insert');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"insert\"});\n        }\n      },\n      enterInsertMode: function(cm, actionArgs, vim) {\n        if (cm.getOption('readOnly')) { return; }\n        vim.insertMode = true;\n        vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1;\n        var insertAt = (actionArgs) ? actionArgs.insertAt : null;\n        var sel = vim.sel;\n        var head = actionArgs.head || cm.getCursor('head');\n        var height = cm.listSelections().length;\n        if (insertAt == 'eol') {\n          head = Pos(head.line, lineLength(cm, head.line));\n        } else if (insertAt == 'charAfter') {\n          head = offsetCursor(head, 0, 1);\n        } else if (insertAt == 'firstNonBlank') {\n          head = motions.moveToFirstNonWhiteSpaceCharacter(cm, head);\n        } else if (insertAt == 'startOfSelectedArea') {\n          if (!vim.visualBlock) {\n            if (sel.head.line < sel.anchor.line) {\n              head = sel.head;\n            } else {\n              head = Pos(sel.anchor.line, 0);\n            }\n          } else {\n            head = Pos(\n                Math.min(sel.head.line, sel.anchor.line),\n                Math.min(sel.head.ch, sel.anchor.ch));\n            height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n          }\n        } else if (insertAt == 'endOfSelectedArea') {\n          if (!vim.visualBlock) {\n            if (sel.head.line >= sel.anchor.line) {\n              head = offsetCursor(sel.head, 0, 1);\n            } else {\n              head = Pos(sel.anchor.line, 0);\n            }\n          } else {\n            head = Pos(\n                Math.min(sel.head.line, sel.anchor.line),\n                Math.max(sel.head.ch + 1, sel.anchor.ch));\n            height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n          }\n        } else if (insertAt == 'inplace') {\n          if (vim.visualMode){\n            return;\n          }\n        }\n        cm.setOption('disableInput', false);\n        if (actionArgs && actionArgs.replace) {\n          cm.toggleOverwrite(true);\n          cm.setOption('keyMap', 'vim-replace');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"replace\"});\n        } else {\n          cm.toggleOverwrite(false);\n          cm.setOption('keyMap', 'vim-insert');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"insert\"});\n        }\n        if (!vimGlobalState.macroModeState.isPlaying) {\n          cm.on('change', onChange);\n          CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n        }\n        if (vim.visualMode) {\n          exitVisualMode(cm);\n        }\n        selectForInsert(cm, head, height);\n      },\n      toggleVisualMode: function(cm, actionArgs, vim) {\n        var repeat = actionArgs.repeat;\n        var anchor = cm.getCursor();\n        var head;\n        if (!vim.visualMode) {\n          vim.visualMode = true;\n          vim.visualLine = !!actionArgs.linewise;\n          vim.visualBlock = !!actionArgs.blockwise;\n          head = clipCursorToContent(\n              cm, Pos(anchor.line, anchor.ch + repeat - 1),\n              true /** includeLineBreak */);\n          vim.sel = {\n            anchor: anchor,\n            head: head\n          };\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\"});\n          updateCmSelection(cm);\n          updateMark(cm, vim, '<', cursorMin(anchor, head));\n          updateMark(cm, vim, '>', cursorMax(anchor, head));\n        } else if (vim.visualLine ^ actionArgs.linewise ||\n            vim.visualBlock ^ actionArgs.blockwise) {\n          vim.visualLine = !!actionArgs.linewise;\n          vim.visualBlock = !!actionArgs.blockwise;\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\"});\n          updateCmSelection(cm);\n        } else {\n          exitVisualMode(cm);\n        }\n      },\n      reselectLastSelection: function(cm, _actionArgs, vim) {\n        var lastSelection = vim.lastSelection;\n        if (vim.visualMode) {\n          updateLastSelection(cm, vim);\n        }\n        if (lastSelection) {\n          var anchor = lastSelection.anchorMark.find();\n          var head = lastSelection.headMark.find();\n          if (!anchor || !head) {\n            return;\n          }\n          vim.sel = {\n            anchor: anchor,\n            head: head\n          };\n          vim.visualMode = true;\n          vim.visualLine = lastSelection.visualLine;\n          vim.visualBlock = lastSelection.visualBlock;\n          updateCmSelection(cm);\n          updateMark(cm, vim, '<', cursorMin(anchor, head));\n          updateMark(cm, vim, '>', cursorMax(anchor, head));\n          CodeMirror.signal(cm, 'vim-mode-change', {\n            mode: 'visual',\n            subMode: vim.visualLine ? 'linewise' :\n                     vim.visualBlock ? 'blockwise' : ''});\n        }\n      },\n      joinLines: function(cm, actionArgs, vim) {\n        var curStart, curEnd;\n        if (vim.visualMode) {\n          curStart = cm.getCursor('anchor');\n          curEnd = cm.getCursor('head');\n          if (cursorIsBefore(curEnd, curStart)) {\n            var tmp = curEnd;\n            curEnd = curStart;\n            curStart = tmp;\n          }\n          curEnd.ch = lineLength(cm, curEnd.line) - 1;\n        } else {\n          var repeat = Math.max(actionArgs.repeat, 2);\n          curStart = cm.getCursor();\n          curEnd = clipCursorToContent(cm, Pos(curStart.line + repeat - 1,\n                                               Infinity));\n        }\n        var finalCh = 0;\n        for (var i = curStart.line; i < curEnd.line; i++) {\n          finalCh = lineLength(cm, curStart.line);\n          var tmp = Pos(curStart.line + 1,\n                        lineLength(cm, curStart.line + 1));\n          var text = cm.getRange(curStart, tmp);\n          text = text.replace(/\\n\\s*/g, ' ');\n          cm.replaceRange(text, curStart, tmp);\n        }\n        var curFinalPos = Pos(curStart.line, finalCh);\n        if (vim.visualMode) {\n          exitVisualMode(cm, false);\n        }\n        cm.setCursor(curFinalPos);\n      },\n      newLineAndEnterInsertMode: function(cm, actionArgs, vim) {\n        vim.insertMode = true;\n        var insertAt = copyCursor(cm.getCursor());\n        if (insertAt.line === cm.firstLine() && !actionArgs.after) {\n          cm.replaceRange('\\n', Pos(cm.firstLine(), 0));\n          cm.setCursor(cm.firstLine(), 0);\n        } else {\n          insertAt.line = (actionArgs.after) ? insertAt.line :\n              insertAt.line - 1;\n          insertAt.ch = lineLength(cm, insertAt.line);\n          cm.setCursor(insertAt);\n          var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment ||\n              CodeMirror.commands.newlineAndIndent;\n          newlineFn(cm);\n        }\n        this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);\n      },\n      paste: function(cm, actionArgs, vim) {\n        var cur = copyCursor(cm.getCursor());\n        var register = vimGlobalState.registerController.getRegister(\n            actionArgs.registerName);\n        var text = register.toString();\n        if (!text) {\n          return;\n        }\n        if (actionArgs.matchIndent) {\n          var tabSize = cm.getOption(\"tabSize\");\n          var whitespaceLength = function(str) {\n            var tabs = (str.split(\"\\t\").length - 1);\n            var spaces = (str.split(\" \").length - 1);\n            return tabs * tabSize + spaces * 1;\n          };\n          var currentLine = cm.getLine(cm.getCursor().line);\n          var indent = whitespaceLength(currentLine.match(/^\\s*/)[0]);\n          var chompedText = text.replace(/\\n$/, '');\n          var wasChomped = text !== chompedText;\n          var firstIndent = whitespaceLength(text.match(/^\\s*/)[0]);\n          var text = chompedText.replace(/^\\s*/gm, function(wspace) {\n            var newIndent = indent + (whitespaceLength(wspace) - firstIndent);\n            if (newIndent < 0) {\n              return \"\";\n            }\n            else if (cm.getOption(\"indentWithTabs\")) {\n              var quotient = Math.floor(newIndent / tabSize);\n              return Array(quotient + 1).join('\\t');\n            }\n            else {\n              return Array(newIndent + 1).join(' ');\n            }\n          });\n          text += wasChomped ? \"\\n\" : \"\";\n        }\n        if (actionArgs.repeat > 1) {\n          var text = Array(actionArgs.repeat + 1).join(text);\n        }\n        var linewise = register.linewise;\n        var blockwise = register.blockwise;\n        if (linewise && !blockwise) {\n          if(vim.visualMode) {\n            text = vim.visualLine ? text.slice(0, -1) : '\\n' + text.slice(0, text.length - 1) + '\\n';\n          } else if (actionArgs.after) {\n            text = '\\n' + text.slice(0, text.length - 1);\n            cur.ch = lineLength(cm, cur.line);\n          } else {\n            cur.ch = 0;\n          }\n        } else {\n          if (blockwise) {\n            text = text.split('\\n');\n            for (var i = 0; i < text.length; i++) {\n              text[i] = (text[i] == '') ? ' ' : text[i];\n            }\n          }\n          cur.ch += actionArgs.after ? 1 : 0;\n        }\n        var curPosFinal;\n        var idx;\n        if (vim.visualMode) {\n          vim.lastPastedText = text;\n          var lastSelectionCurEnd;\n          var selectedArea = getSelectedAreaRange(cm, vim);\n          var selectionStart = selectedArea[0];\n          var selectionEnd = selectedArea[1];\n          var selectedText = cm.getSelection();\n          var selections = cm.listSelections();\n          var emptyStrings = new Array(selections.length).join('1').split('1');\n          if (vim.lastSelection) {\n            lastSelectionCurEnd = vim.lastSelection.headMark.find();\n          }\n          vimGlobalState.registerController.unnamedRegister.setText(selectedText);\n          if (blockwise) {\n            cm.replaceSelections(emptyStrings);\n            selectionEnd = Pos(selectionStart.line + text.length-1, selectionStart.ch);\n            cm.setCursor(selectionStart);\n            selectBlock(cm, selectionEnd);\n            cm.replaceSelections(text);\n            curPosFinal = selectionStart;\n          } else if (vim.visualBlock) {\n            cm.replaceSelections(emptyStrings);\n            cm.setCursor(selectionStart);\n            cm.replaceRange(text, selectionStart, selectionStart);\n            curPosFinal = selectionStart;\n          } else {\n            cm.replaceRange(text, selectionStart, selectionEnd);\n            curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1);\n          }\n          if(lastSelectionCurEnd) {\n            vim.lastSelection.headMark = cm.setBookmark(lastSelectionCurEnd);\n          }\n          if (linewise) {\n            curPosFinal.ch=0;\n          }\n        } else {\n          if (blockwise) {\n            cm.setCursor(cur);\n            for (var i = 0; i < text.length; i++) {\n              var line = cur.line+i;\n              if (line > cm.lastLine()) {\n                cm.replaceRange('\\n',  Pos(line, 0));\n              }\n              var lastCh = lineLength(cm, line);\n              if (lastCh < cur.ch) {\n                extendLineToColumn(cm, line, cur.ch);\n              }\n            }\n            cm.setCursor(cur);\n            selectBlock(cm, Pos(cur.line + text.length-1, cur.ch));\n            cm.replaceSelections(text);\n            curPosFinal = cur;\n          } else {\n            cm.replaceRange(text, cur);\n            if (linewise && actionArgs.after) {\n              curPosFinal = Pos(\n              cur.line + 1,\n              findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));\n            } else if (linewise && !actionArgs.after) {\n              curPosFinal = Pos(\n                cur.line,\n                findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));\n            } else if (!linewise && actionArgs.after) {\n              idx = cm.indexFromPos(cur);\n              curPosFinal = cm.posFromIndex(idx + text.length - 1);\n            } else {\n              idx = cm.indexFromPos(cur);\n              curPosFinal = cm.posFromIndex(idx + text.length);\n            }\n          }\n        }\n        if (vim.visualMode) {\n          exitVisualMode(cm, false);\n        }\n        cm.setCursor(curPosFinal);\n      },\n      undo: function(cm, actionArgs) {\n        cm.operation(function() {\n          repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)();\n          cm.setCursor(cm.getCursor('anchor'));\n        });\n      },\n      redo: function(cm, actionArgs) {\n        repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)();\n      },\n      setRegister: function(_cm, actionArgs, vim) {\n        vim.inputState.registerName = actionArgs.selectedCharacter;\n      },\n      setMark: function(cm, actionArgs, vim) {\n        var markName = actionArgs.selectedCharacter;\n        updateMark(cm, vim, markName, cm.getCursor());\n      },\n      replace: function(cm, actionArgs, vim) {\n        var replaceWith = actionArgs.selectedCharacter;\n        var curStart = cm.getCursor();\n        var replaceTo;\n        var curEnd;\n        var selections = cm.listSelections();\n        if (vim.visualMode) {\n          curStart = cm.getCursor('start');\n          curEnd = cm.getCursor('end');\n        } else {\n          var line = cm.getLine(curStart.line);\n          replaceTo = curStart.ch + actionArgs.repeat;\n          if (replaceTo > line.length) {\n            replaceTo=line.length;\n          }\n          curEnd = Pos(curStart.line, replaceTo);\n        }\n        if (replaceWith=='\\n') {\n          if (!vim.visualMode) cm.replaceRange('', curStart, curEnd);\n          (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm);\n        } else {\n          var replaceWithStr = cm.getRange(curStart, curEnd);\n          replaceWithStr = replaceWithStr.replace(/[^\\n]/g, replaceWith);\n          if (vim.visualBlock) {\n            var spaces = new Array(cm.getOption(\"tabSize\")+1).join(' ');\n            replaceWithStr = cm.getSelection();\n            replaceWithStr = replaceWithStr.replace(/\\t/g, spaces).replace(/[^\\n]/g, replaceWith).split('\\n');\n            cm.replaceSelections(replaceWithStr);\n          } else {\n            cm.replaceRange(replaceWithStr, curStart, curEnd);\n          }\n          if (vim.visualMode) {\n            curStart = cursorIsBefore(selections[0].anchor, selections[0].head) ?\n                         selections[0].anchor : selections[0].head;\n            cm.setCursor(curStart);\n            exitVisualMode(cm, false);\n          } else {\n            cm.setCursor(offsetCursor(curEnd, 0, -1));\n          }\n        }\n      },\n      incrementNumberToken: function(cm, actionArgs) {\n        var cur = cm.getCursor();\n        var lineStr = cm.getLine(cur.line);\n        var re = /(-?)(?:(0x)([\\da-f]+)|(0b|0|)(\\d+))/gi;\n        var match;\n        var start;\n        var end;\n        var numberStr;\n        while ((match = re.exec(lineStr)) !== null) {\n          start = match.index;\n          end = start + match[0].length;\n          if (cur.ch < end)break;\n        }\n        if (!actionArgs.backtrack && (end <= cur.ch))return;\n        if (match) {\n          var baseStr = match[2] || match[4]\n          var digits = match[3] || match[5]\n          var increment = actionArgs.increase ? 1 : -1;\n          var base = {'0b': 2, '0': 8, '': 10, '0x': 16}[baseStr.toLowerCase()];\n          var number = parseInt(match[1] + digits, base) + (increment * actionArgs.repeat);\n          numberStr = number.toString(base);\n          var zeroPadding = baseStr ? new Array(digits.length - numberStr.length + 1 + match[1].length).join('0') : ''\n          if (numberStr.charAt(0) === '-') {\n            numberStr = '-' + baseStr + zeroPadding + numberStr.substr(1);\n          } else {\n            numberStr = baseStr + zeroPadding + numberStr;\n          }\n          var from = Pos(cur.line, start);\n          var to = Pos(cur.line, end);\n          cm.replaceRange(numberStr, from, to);\n        } else {\n          return;\n        }\n        cm.setCursor(Pos(cur.line, start + numberStr.length - 1));\n      },\n      repeatLastEdit: function(cm, actionArgs, vim) {\n        var lastEditInputState = vim.lastEditInputState;\n        if (!lastEditInputState) { return; }\n        var repeat = actionArgs.repeat;\n        if (repeat && actionArgs.repeatIsExplicit) {\n          vim.lastEditInputState.repeatOverride = repeat;\n        } else {\n          repeat = vim.lastEditInputState.repeatOverride || repeat;\n        }\n        repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);\n      },\n      indent: function(cm, actionArgs) {\n        cm.indentLine(cm.getCursor().line, actionArgs.indentRight);\n      },\n      exitInsertMode: exitInsertMode\n    };\n\n    function defineAction(name, fn) {\n      actions[name] = fn;\n    }\n    function clipCursorToContent(cm, cur, includeLineBreak) {\n      var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine() );\n      var maxCh = lineLength(cm, line) - 1;\n      maxCh = (includeLineBreak) ? maxCh + 1 : maxCh;\n      var ch = Math.min(Math.max(0, cur.ch), maxCh);\n      return Pos(line, ch);\n    }\n    function copyArgs(args) {\n      var ret = {};\n      for (var prop in args) {\n        if (args.hasOwnProperty(prop)) {\n          ret[prop] = args[prop];\n        }\n      }\n      return ret;\n    }\n    function offsetCursor(cur, offsetLine, offsetCh) {\n      if (typeof offsetLine === 'object') {\n        offsetCh = offsetLine.ch;\n        offsetLine = offsetLine.line;\n      }\n      return Pos(cur.line + offsetLine, cur.ch + offsetCh);\n    }\n    function getOffset(anchor, head) {\n      return {\n        line: head.line - anchor.line,\n        ch: head.line - anchor.line\n      };\n    }\n    function commandMatches(keys, keyMap, context, inputState) {\n      var match, partial = [], full = [];\n      for (var i = 0; i < keyMap.length; i++) {\n        var command = keyMap[i];\n        if (context == 'insert' && command.context != 'insert' ||\n            command.context && command.context != context ||\n            inputState.operator && command.type == 'action' ||\n            !(match = commandMatch(keys, command.keys))) { continue; }\n        if (match == 'partial') { partial.push(command); }\n        if (match == 'full') { full.push(command); }\n      }\n      return {\n        partial: partial.length && partial,\n        full: full.length && full\n      };\n    }\n    function commandMatch(pressed, mapped) {\n      if (mapped.slice(-11) == '<character>') {\n        var prefixLen = mapped.length - 11;\n        var pressedPrefix = pressed.slice(0, prefixLen);\n        var mappedPrefix = mapped.slice(0, prefixLen);\n        return pressedPrefix == mappedPrefix && pressed.length > prefixLen ? 'full' :\n               mappedPrefix.indexOf(pressedPrefix) == 0 ? 'partial' : false;\n      } else {\n        return pressed == mapped ? 'full' :\n               mapped.indexOf(pressed) == 0 ? 'partial' : false;\n      }\n    }\n    function lastChar(keys) {\n      var match = /^.*(<[^>]+>)$/.exec(keys);\n      var selectedCharacter = match ? match[1] : keys.slice(-1);\n      if (selectedCharacter.length > 1){\n        switch(selectedCharacter){\n          case '<CR>':\n            selectedCharacter='\\n';\n            break;\n          case '<Space>':\n            selectedCharacter=' ';\n            break;\n          default:\n            selectedCharacter='';\n            break;\n        }\n      }\n      return selectedCharacter;\n    }\n    function repeatFn(cm, fn, repeat) {\n      return function() {\n        for (var i = 0; i < repeat; i++) {\n          fn(cm);\n        }\n      };\n    }\n    function copyCursor(cur) {\n      return Pos(cur.line, cur.ch);\n    }\n    function cursorEqual(cur1, cur2) {\n      return cur1.ch == cur2.ch && cur1.line == cur2.line;\n    }\n    function cursorIsBefore(cur1, cur2) {\n      if (cur1.line < cur2.line) {\n        return true;\n      }\n      if (cur1.line == cur2.line && cur1.ch < cur2.ch) {\n        return true;\n      }\n      return false;\n    }\n    function cursorMin(cur1, cur2) {\n      if (arguments.length > 2) {\n        cur2 = cursorMin.apply(undefined, Array.prototype.slice.call(arguments, 1));\n      }\n      return cursorIsBefore(cur1, cur2) ? cur1 : cur2;\n    }\n    function cursorMax(cur1, cur2) {\n      if (arguments.length > 2) {\n        cur2 = cursorMax.apply(undefined, Array.prototype.slice.call(arguments, 1));\n      }\n      return cursorIsBefore(cur1, cur2) ? cur2 : cur1;\n    }\n    function cursorIsBetween(cur1, cur2, cur3) {\n      var cur1before2 = cursorIsBefore(cur1, cur2);\n      var cur2before3 = cursorIsBefore(cur2, cur3);\n      return cur1before2 && cur2before3;\n    }\n    function lineLength(cm, lineNum) {\n      return cm.getLine(lineNum).length;\n    }\n    function trim(s) {\n      if (s.trim) {\n        return s.trim();\n      }\n      return s.replace(/^\\s+|\\s+$/g, '');\n    }\n    function escapeRegex(s) {\n      return s.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g, '\\\\$1');\n    }\n    function extendLineToColumn(cm, lineNum, column) {\n      var endCh = lineLength(cm, lineNum);\n      var spaces = new Array(column-endCh+1).join(' ');\n      cm.setCursor(Pos(lineNum, endCh));\n      cm.replaceRange(spaces, cm.getCursor());\n    }\n    function selectBlock(cm, selectionEnd) {\n      var selections = [], ranges = cm.listSelections();\n      var head = copyCursor(cm.clipPos(selectionEnd));\n      var isClipped = !cursorEqual(selectionEnd, head);\n      var curHead = cm.getCursor('head');\n      var primIndex = getIndex(ranges, curHead);\n      var wasClipped = cursorEqual(ranges[primIndex].head, ranges[primIndex].anchor);\n      var max = ranges.length - 1;\n      var index = max - primIndex > primIndex ? max : 0;\n      var base = ranges[index].anchor;\n\n      var firstLine = Math.min(base.line, head.line);\n      var lastLine = Math.max(base.line, head.line);\n      var baseCh = base.ch, headCh = head.ch;\n\n      var dir = ranges[index].head.ch - baseCh;\n      var newDir = headCh - baseCh;\n      if (dir > 0 && newDir <= 0) {\n        baseCh++;\n        if (!isClipped) { headCh--; }\n      } else if (dir < 0 && newDir >= 0) {\n        baseCh--;\n        if (!wasClipped) { headCh++; }\n      } else if (dir < 0 && newDir == -1) {\n        baseCh--;\n        headCh++;\n      }\n      for (var line = firstLine; line <= lastLine; line++) {\n        var range = {anchor: new Pos(line, baseCh), head: new Pos(line, headCh)};\n        selections.push(range);\n      }\n      cm.setSelections(selections);\n      selectionEnd.ch = headCh;\n      base.ch = baseCh;\n      return base;\n    }\n    function selectForInsert(cm, head, height) {\n      var sel = [];\n      for (var i = 0; i < height; i++) {\n        var lineHead = offsetCursor(head, i, 0);\n        sel.push({anchor: lineHead, head: lineHead});\n      }\n      cm.setSelections(sel, 0);\n    }\n    function getIndex(ranges, cursor, end) {\n      for (var i = 0; i < ranges.length; i++) {\n        var atAnchor = end != 'head' && cursorEqual(ranges[i].anchor, cursor);\n        var atHead = end != 'anchor' && cursorEqual(ranges[i].head, cursor);\n        if (atAnchor || atHead) {\n          return i;\n        }\n      }\n      return -1;\n    }\n    function getSelectedAreaRange(cm, vim) {\n      var lastSelection = vim.lastSelection;\n      var getCurrentSelectedAreaRange = function() {\n        var selections = cm.listSelections();\n        var start =  selections[0];\n        var end = selections[selections.length-1];\n        var selectionStart = cursorIsBefore(start.anchor, start.head) ? start.anchor : start.head;\n        var selectionEnd = cursorIsBefore(end.anchor, end.head) ? end.head : end.anchor;\n        return [selectionStart, selectionEnd];\n      };\n      var getLastSelectedAreaRange = function() {\n        var selectionStart = cm.getCursor();\n        var selectionEnd = cm.getCursor();\n        var block = lastSelection.visualBlock;\n        if (block) {\n          var width = block.width;\n          var height = block.height;\n          selectionEnd = Pos(selectionStart.line + height, selectionStart.ch + width);\n          var selections = [];\n          for (var i = selectionStart.line; i < selectionEnd.line; i++) {\n            var anchor = Pos(i, selectionStart.ch);\n            var head = Pos(i, selectionEnd.ch);\n            var range = {anchor: anchor, head: head};\n            selections.push(range);\n          }\n          cm.setSelections(selections);\n        } else {\n          var start = lastSelection.anchorMark.find();\n          var end = lastSelection.headMark.find();\n          var line = end.line - start.line;\n          var ch = end.ch - start.ch;\n          selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch};\n          if (lastSelection.visualLine) {\n            selectionStart = Pos(selectionStart.line, 0);\n            selectionEnd = Pos(selectionEnd.line, lineLength(cm, selectionEnd.line));\n          }\n          cm.setSelection(selectionStart, selectionEnd);\n        }\n        return [selectionStart, selectionEnd];\n      };\n      if (!vim.visualMode) {\n        return getLastSelectedAreaRange();\n      } else {\n        return getCurrentSelectedAreaRange();\n      }\n    }\n    function updateLastSelection(cm, vim) {\n      var anchor = vim.sel.anchor;\n      var head = vim.sel.head;\n      if (vim.lastPastedText) {\n        head = cm.posFromIndex(cm.indexFromPos(anchor) + vim.lastPastedText.length);\n        vim.lastPastedText = null;\n      }\n      vim.lastSelection = {'anchorMark': cm.setBookmark(anchor),\n                           'headMark': cm.setBookmark(head),\n                           'anchor': copyCursor(anchor),\n                           'head': copyCursor(head),\n                           'visualMode': vim.visualMode,\n                           'visualLine': vim.visualLine,\n                           'visualBlock': vim.visualBlock};\n    }\n    function expandSelection(cm, start, end) {\n      var sel = cm.state.vim.sel;\n      var head = sel.head;\n      var anchor = sel.anchor;\n      var tmp;\n      if (cursorIsBefore(end, start)) {\n        tmp = end;\n        end = start;\n        start = tmp;\n      }\n      if (cursorIsBefore(head, anchor)) {\n        head = cursorMin(start, head);\n        anchor = cursorMax(anchor, end);\n      } else {\n        anchor = cursorMin(start, anchor);\n        head = cursorMax(head, end);\n        head = offsetCursor(head, 0, -1);\n        if (head.ch == -1 && head.line != cm.firstLine()) {\n          head = Pos(head.line - 1, lineLength(cm, head.line - 1));\n        }\n      }\n      return [anchor, head];\n    }\n    function updateCmSelection(cm, sel, mode) {\n      var vim = cm.state.vim;\n      sel = sel || vim.sel;\n      var mode = mode ||\n        vim.visualLine ? 'line' : vim.visualBlock ? 'block' : 'char';\n      var cmSel = makeCmSelection(cm, sel, mode);\n      cm.setSelections(cmSel.ranges, cmSel.primary);\n      updateFakeCursor(cm);\n    }\n    function makeCmSelection(cm, sel, mode, exclusive) {\n      var head = copyCursor(sel.head);\n      var anchor = copyCursor(sel.anchor);\n      if (mode == 'char') {\n        var headOffset = !exclusive && !cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        var anchorOffset = cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        head = offsetCursor(sel.head, 0, headOffset);\n        anchor = offsetCursor(sel.anchor, 0, anchorOffset);\n        return {\n          ranges: [{anchor: anchor, head: head}],\n          primary: 0\n        };\n      } else if (mode == 'line') {\n        if (!cursorIsBefore(sel.head, sel.anchor)) {\n          anchor.ch = 0;\n\n          var lastLine = cm.lastLine();\n          if (head.line > lastLine) {\n            head.line = lastLine;\n          }\n          head.ch = lineLength(cm, head.line);\n        } else {\n          head.ch = 0;\n          anchor.ch = lineLength(cm, anchor.line);\n        }\n        return {\n          ranges: [{anchor: anchor, head: head}],\n          primary: 0\n        };\n      } else if (mode == 'block') {\n        var top = Math.min(anchor.line, head.line),\n            left = Math.min(anchor.ch, head.ch),\n            bottom = Math.max(anchor.line, head.line),\n            right = Math.max(anchor.ch, head.ch) + 1;\n        var height = bottom - top + 1;\n        var primary = head.line == top ? 0 : height - 1;\n        var ranges = [];\n        for (var i = 0; i < height; i++) {\n          ranges.push({\n            anchor: Pos(top + i, left),\n            head: Pos(top + i, right)\n          });\n        }\n        return {\n          ranges: ranges,\n          primary: primary\n        };\n      }\n    }\n    function getHead(cm) {\n      var cur = cm.getCursor('head');\n      if (cm.getSelection().length == 1) {\n        cur = cursorMin(cur, cm.getCursor('anchor'));\n      }\n      return cur;\n    }\n    function exitVisualMode(cm, moveHead) {\n      var vim = cm.state.vim;\n      if (moveHead !== false) {\n        cm.setCursor(clipCursorToContent(cm, vim.sel.head));\n      }\n      updateLastSelection(cm, vim);\n      vim.visualMode = false;\n      vim.visualLine = false;\n      vim.visualBlock = false;\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      if (vim.fakeCursor) {\n        vim.fakeCursor.clear();\n      }\n    }\n    function clipToLine(cm, curStart, curEnd) {\n      var selection = cm.getRange(curStart, curEnd);\n      if (/\\n\\s*$/.test(selection)) {\n        var lines = selection.split('\\n');\n        lines.pop();\n        var line;\n        for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) {\n          curEnd.line--;\n          curEnd.ch = 0;\n        }\n        if (line) {\n          curEnd.line--;\n          curEnd.ch = lineLength(cm, curEnd.line);\n        } else {\n          curEnd.ch = 0;\n        }\n      }\n    }\n    function expandSelectionToLine(_cm, curStart, curEnd) {\n      curStart.ch = 0;\n      curEnd.ch = 0;\n      curEnd.line++;\n    }\n\n    function findFirstNonWhiteSpaceCharacter(text) {\n      if (!text) {\n        return 0;\n      }\n      var firstNonWS = text.search(/\\S/);\n      return firstNonWS == -1 ? text.length : firstNonWS;\n    }\n\n    function expandWordUnderCursor(cm, inclusive, _forward, bigWord, noSymbol) {\n      var cur = getHead(cm);\n      var line = cm.getLine(cur.line);\n      var idx = cur.ch;\n      var test = noSymbol ? wordCharTest[0] : bigWordCharTest [0];\n      while (!test(line.charAt(idx))) {\n        idx++;\n        if (idx >= line.length) { return null; }\n      }\n\n      if (bigWord) {\n        test = bigWordCharTest[0];\n      } else {\n        test = wordCharTest[0];\n        if (!test(line.charAt(idx))) {\n          test = wordCharTest[1];\n        }\n      }\n\n      var end = idx, start = idx;\n      while (test(line.charAt(end)) && end < line.length) { end++; }\n      while (test(line.charAt(start)) && start >= 0) { start--; }\n      start++;\n\n      if (inclusive) {\n        var wordEnd = end;\n        while (/\\s/.test(line.charAt(end)) && end < line.length) { end++; }\n        if (wordEnd == end) {\n          var wordStart = start;\n          while (/\\s/.test(line.charAt(start - 1)) && start > 0) { start--; }\n          if (!start) { start = wordStart; }\n        }\n      }\n      return { start: Pos(cur.line, start), end: Pos(cur.line, end) };\n    }\n\n    function recordJumpPosition(cm, oldCur, newCur) {\n      if (!cursorEqual(oldCur, newCur)) {\n        vimGlobalState.jumpList.add(cm, oldCur, newCur);\n      }\n    }\n\n    function recordLastCharacterSearch(increment, args) {\n        vimGlobalState.lastCharacterSearch.increment = increment;\n        vimGlobalState.lastCharacterSearch.forward = args.forward;\n        vimGlobalState.lastCharacterSearch.selectedCharacter = args.selectedCharacter;\n    }\n\n    var symbolToMode = {\n        '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket',\n        '[': 'section', ']': 'section',\n        '*': 'comment', '/': 'comment',\n        'm': 'method', 'M': 'method',\n        '#': 'preprocess'\n    };\n    var findSymbolModes = {\n      bracket: {\n        isComplete: function(state) {\n          if (state.nextCh === state.symb) {\n            state.depth++;\n            if (state.depth >= 1)return true;\n          } else if (state.nextCh === state.reverseSymb) {\n            state.depth--;\n          }\n          return false;\n        }\n      },\n      section: {\n        init: function(state) {\n          state.curMoveThrough = true;\n          state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}';\n        },\n        isComplete: function(state) {\n          return state.index === 0 && state.nextCh === state.symb;\n        }\n      },\n      comment: {\n        isComplete: function(state) {\n          var found = state.lastCh === '*' && state.nextCh === '/';\n          state.lastCh = state.nextCh;\n          return found;\n        }\n      },\n      method: {\n        init: function(state) {\n          state.symb = (state.symb === 'm' ? '{' : '}');\n          state.reverseSymb = state.symb === '{' ? '}' : '{';\n        },\n        isComplete: function(state) {\n          if (state.nextCh === state.symb)return true;\n          return false;\n        }\n      },\n      preprocess: {\n        init: function(state) {\n          state.index = 0;\n        },\n        isComplete: function(state) {\n          if (state.nextCh === '#') {\n            var token = state.lineText.match(/#(\\w+)/)[1];\n            if (token === 'endif') {\n              if (state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth++;\n            } else if (token === 'if') {\n              if (!state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth--;\n            }\n            if (token === 'else' && state.depth === 0)return true;\n          }\n          return false;\n        }\n      }\n    };\n    function findSymbol(cm, repeat, forward, symb) {\n      var cur = copyCursor(cm.getCursor());\n      var increment = forward ? 1 : -1;\n      var endLine = forward ? cm.lineCount() : -1;\n      var curCh = cur.ch;\n      var line = cur.line;\n      var lineText = cm.getLine(line);\n      var state = {\n        lineText: lineText,\n        nextCh: lineText.charAt(curCh),\n        lastCh: null,\n        index: curCh,\n        symb: symb,\n        reverseSymb: (forward ?  { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb],\n        forward: forward,\n        depth: 0,\n        curMoveThrough: false\n      };\n      var mode = symbolToMode[symb];\n      if (!mode)return cur;\n      var init = findSymbolModes[mode].init;\n      var isComplete = findSymbolModes[mode].isComplete;\n      if (init) { init(state); }\n      while (line !== endLine && repeat) {\n        state.index += increment;\n        state.nextCh = state.lineText.charAt(state.index);\n        if (!state.nextCh) {\n          line += increment;\n          state.lineText = cm.getLine(line) || '';\n          if (increment > 0) {\n            state.index = 0;\n          } else {\n            var lineLen = state.lineText.length;\n            state.index = (lineLen > 0) ? (lineLen-1) : 0;\n          }\n          state.nextCh = state.lineText.charAt(state.index);\n        }\n        if (isComplete(state)) {\n          cur.line = line;\n          cur.ch = state.index;\n          repeat--;\n        }\n      }\n      if (state.nextCh || state.curMoveThrough) {\n        return Pos(line, state.index);\n      }\n      return cur;\n    }\n    function findWord(cm, cur, forward, bigWord, emptyLineIsWord) {\n      var lineNum = cur.line;\n      var pos = cur.ch;\n      var line = cm.getLine(lineNum);\n      var dir = forward ? 1 : -1;\n      var charTests = bigWord ? bigWordCharTest: wordCharTest;\n\n      if (emptyLineIsWord && line == '') {\n        lineNum += dir;\n        line = cm.getLine(lineNum);\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        pos = (forward) ? 0 : line.length;\n      }\n\n      while (true) {\n        if (emptyLineIsWord && line == '') {\n          return { from: 0, to: 0, line: lineNum };\n        }\n        var stop = (dir > 0) ? line.length : -1;\n        var wordStart = stop, wordEnd = stop;\n        while (pos != stop) {\n          var foundWord = false;\n          for (var i = 0; i < charTests.length && !foundWord; ++i) {\n            if (charTests[i](line.charAt(pos))) {\n              wordStart = pos;\n              while (pos != stop && charTests[i](line.charAt(pos))) {\n                pos += dir;\n              }\n              wordEnd = pos;\n              foundWord = wordStart != wordEnd;\n              if (wordStart == cur.ch && lineNum == cur.line &&\n                  wordEnd == wordStart + dir) {\n                continue;\n              } else {\n                return {\n                  from: Math.min(wordStart, wordEnd + 1),\n                  to: Math.max(wordStart, wordEnd),\n                  line: lineNum };\n              }\n            }\n          }\n          if (!foundWord) {\n            pos += dir;\n          }\n        }\n        lineNum += dir;\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        line = cm.getLine(lineNum);\n        pos = (dir > 0) ? 0 : line.length;\n      }\n    }\n    function moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) {\n      var curStart = copyCursor(cur);\n      var words = [];\n      if (forward && !wordEnd || !forward && wordEnd) {\n        repeat++;\n      }\n      var emptyLineIsWord = !(forward && wordEnd);\n      for (var i = 0; i < repeat; i++) {\n        var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord);\n        if (!word) {\n          var eodCh = lineLength(cm, cm.lastLine());\n          words.push(forward\n              ? {line: cm.lastLine(), from: eodCh, to: eodCh}\n              : {line: 0, from: 0, to: 0});\n          break;\n        }\n        words.push(word);\n        cur = Pos(word.line, forward ? (word.to - 1) : word.from);\n      }\n      var shortCircuit = words.length != repeat;\n      var firstWord = words[0];\n      var lastWord = words.pop();\n      if (forward && !wordEnd) {\n        if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) {\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.from);\n      } else if (forward && wordEnd) {\n        return Pos(lastWord.line, lastWord.to - 1);\n      } else if (!forward && wordEnd) {\n        if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) {\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.to);\n      } else {\n        return Pos(lastWord.line, lastWord.from);\n      }\n    }\n\n    function moveToCharacter(cm, repeat, forward, character) {\n      var cur = cm.getCursor();\n      var start = cur.ch;\n      var idx;\n      for (var i = 0; i < repeat; i ++) {\n        var line = cm.getLine(cur.line);\n        idx = charIdxInLine(start, line, character, forward, true);\n        if (idx == -1) {\n          return null;\n        }\n        start = idx;\n      }\n      return Pos(cm.getCursor().line, idx);\n    }\n\n    function moveToColumn(cm, repeat) {\n      var line = cm.getCursor().line;\n      return clipCursorToContent(cm, Pos(line, repeat - 1));\n    }\n\n    function updateMark(cm, vim, markName, pos) {\n      if (!inArray(markName, validMarks)) {\n        return;\n      }\n      if (vim.marks[markName]) {\n        vim.marks[markName].clear();\n      }\n      vim.marks[markName] = cm.setBookmark(pos);\n    }\n\n    function charIdxInLine(start, line, character, forward, includeChar) {\n      var idx;\n      if (forward) {\n        idx = line.indexOf(character, start + 1);\n        if (idx != -1 && !includeChar) {\n          idx -= 1;\n        }\n      } else {\n        idx = line.lastIndexOf(character, start - 1);\n        if (idx != -1 && !includeChar) {\n          idx += 1;\n        }\n      }\n      return idx;\n    }\n\n    function findParagraph(cm, head, repeat, dir, inclusive) {\n      var line = head.line;\n      var min = cm.firstLine();\n      var max = cm.lastLine();\n      var start, end, i = line;\n      function isEmpty(i) { return !/\\S/.test(cm.getLine(i)); } // ace_patch\n      function isBoundary(i, dir, any) {\n        if (any) { return isEmpty(i) != isEmpty(i + dir); }\n        return !isEmpty(i) && isEmpty(i + dir);\n      }\n      function skipFold(i) {\n          dir = dir > 0 ? 1 : -1;\n          var foldLine = cm.ace.session.getFoldLine(i);\n          if (foldLine) {\n              if (i + dir > foldLine.start.row && i + dir < foldLine.end.row)\n                  dir = (dir > 0 ? foldLine.end.row : foldLine.start.row) - i;\n          }\n      }\n      if (dir) {\n        while (min <= i && i <= max && repeat > 0) {\n          skipFold(i);\n          if (isBoundary(i, dir)) { repeat--; }\n          i += dir;\n        }\n        return new Pos(i, 0);\n      }\n\n      var vim = cm.state.vim;\n      if (vim.visualLine && isBoundary(line, 1, true)) {\n        var anchor = vim.sel.anchor;\n        if (isBoundary(anchor.line, -1, true)) {\n          if (!inclusive || anchor.line != line) {\n            line += 1;\n          }\n        }\n      }\n      var startState = isEmpty(line);\n      for (i = line; i <= max && repeat; i++) {\n        if (isBoundary(i, 1, true)) {\n          if (!inclusive || isEmpty(i) != startState) {\n            repeat--;\n          }\n        }\n      }\n      end = new Pos(i, 0);\n      if (i > max && !startState) { startState = true; }\n      else { inclusive = false; }\n      for (i = line; i > min; i--) {\n        if (!inclusive || isEmpty(i) == startState || i == line) {\n          if (isBoundary(i, -1, true)) { break; }\n        }\n      }\n      start = new Pos(i, 0);\n      return { start: start, end: end };\n    }\n    function selectCompanionObject(cm, head, symb, inclusive) {\n      var cur = head, start, end;\n\n      var bracketRegexp = ({\n        '(': /[()]/, ')': /[()]/,\n        '[': /[[\\]]/, ']': /[[\\]]/,\n        '{': /[{}]/, '}': /[{}]/,\n        '<': /[<>]/, '>': /[<>]/})[symb];\n      var openSym = ({\n        '(': '(', ')': '(',\n        '[': '[', ']': '[',\n        '{': '{', '}': '{',\n        '<': '<', '>': '<'})[symb];\n      var curChar = cm.getLine(cur.line).charAt(cur.ch);\n      var offset = curChar === openSym ? 1 : 0;\n\n      start = cm.scanForBracket(Pos(cur.line, cur.ch + offset), -1, null, {'bracketRegex': bracketRegexp});\n      end = cm.scanForBracket(Pos(cur.line, cur.ch + offset), 1, null, {'bracketRegex': bracketRegexp});\n\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n\n      start = start.pos;\n      end = end.pos;\n\n      if ((start.line == end.line && start.ch > end.ch)\n          || (start.line > end.line)) {\n        var tmp = start;\n        start = end;\n        end = tmp;\n      }\n\n      if (inclusive) {\n        end.ch += 1;\n      } else {\n        start.ch += 1;\n      }\n\n      return { start: start, end: end };\n    }\n    function findBeginningAndEnd(cm, head, symb, inclusive) {\n      var cur = copyCursor(head);\n      var line = cm.getLine(cur.line);\n      var chars = line.split('');\n      var start, end, i, len;\n      var firstIndex = chars.indexOf(symb);\n      if (cur.ch < firstIndex) {\n        cur.ch = firstIndex;\n      }\n      else if (firstIndex < cur.ch && chars[cur.ch] == symb) {\n        end = cur.ch; // assign end to the current cursor\n        --cur.ch; // make sure to look backwards\n      }\n      if (chars[cur.ch] == symb && !end) {\n        start = cur.ch + 1; // assign start to ahead of the cursor\n      } else {\n        for (i = cur.ch; i > -1 && !start; i--) {\n          if (chars[i] == symb) {\n            start = i + 1;\n          }\n        }\n      }\n      if (start && !end) {\n        for (i = start, len = chars.length; i < len && !end; i++) {\n          if (chars[i] == symb) {\n            end = i;\n          }\n        }\n      }\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n      if (inclusive) {\n        --start; ++end;\n      }\n\n      return {\n        start: Pos(cur.line, start),\n        end: Pos(cur.line, end)\n      };\n    }\n    defineOption('pcre', true, 'boolean');\n    function SearchState() {}\n    SearchState.prototype = {\n      getQuery: function() {\n        return vimGlobalState.query;\n      },\n      setQuery: function(query) {\n        vimGlobalState.query = query;\n      },\n      getOverlay: function() {\n        return this.searchOverlay;\n      },\n      setOverlay: function(overlay) {\n        this.searchOverlay = overlay;\n      },\n      isReversed: function() {\n        return vimGlobalState.isReversed;\n      },\n      setReversed: function(reversed) {\n        vimGlobalState.isReversed = reversed;\n      },\n      getScrollbarAnnotate: function() {\n        return this.annotate;\n      },\n      setScrollbarAnnotate: function(annotate) {\n        this.annotate = annotate;\n      }\n    };\n    function getSearchState(cm) {\n      var vim = cm.state.vim;\n      return vim.searchState_ || (vim.searchState_ = new SearchState());\n    }\n    function dialog(cm, template, shortText, onClose, options) {\n      if (cm.openDialog) {\n        cm.openDialog(template, onClose, { bottom: true, value: options.value,\n            onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp,\n            selectValueOnOpen: false, onClose: function() {\n              if (cm.state.vim) {\n                cm.state.vim.status = \"\";\n                cm.ace.renderer.$loop.schedule(cm.ace.renderer.CHANGE_CURSOR);\n              }\n            }});\n      }\n      else {\n        onClose(prompt(shortText, ''));\n      }\n    }\n    \n    function splitBySlash(argString) {\n      return splitBySeparator(argString, '/');\n    }\n  \n    function findUnescapedSlashes(argString) {\n      return findUnescapedSeparators(argString, '/');\n    }\n\n    function splitBySeparator(argString, separator) {\n      var slashes = findUnescapedSeparators(argString, separator) || [];\n      if (!slashes.length) return [];\n      var tokens = [];\n      if (slashes[0] !== 0) return;\n      for (var i = 0; i < slashes.length; i++) {\n        if (typeof slashes[i] == 'number')\n          tokens.push(argString.substring(slashes[i] + 1, slashes[i+1]));\n      }\n      return tokens;\n    }\n\n    function findUnescapedSeparators(str, separator) {\n      if (!separator)\n        separator = '/';\n\n      var escapeNextChar = false;\n      var slashes = [];\n      for (var i = 0; i < str.length; i++) {\n        var c = str.charAt(i);\n        if (!escapeNextChar && c == separator) {\n          slashes.push(i);\n        }\n        escapeNextChar = !escapeNextChar && (c == '\\\\');\n      }\n      return slashes;\n    }\n    function translateRegex(str) {\n      var specials = '|(){';\n      var unescape = '}';\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        var specialComesNext = (n && specials.indexOf(n) != -1);\n        if (escapeNextChar) {\n          if (c !== '\\\\' || !specialComesNext) {\n            out.push(c);\n          }\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            if (n && unescape.indexOf(n) != -1) {\n              specialComesNext = true;\n            }\n            if (!specialComesNext || n === '\\\\') {\n              out.push(c);\n            }\n          } else {\n            out.push(c);\n            if (specialComesNext && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n    var charUnescapes = {'\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t'};\n    function translateRegexReplace(str) {\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        if (charUnescapes[c + n]) {\n          out.push(charUnescapes[c+n]);\n          i++;\n        } else if (escapeNextChar) {\n          out.push(c);\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            if ((isNumber(n) || n === '$')) {\n              out.push('$');\n            } else if (n !== '/' && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          } else {\n            if (c === '$') {\n              out.push('$');\n            }\n            out.push(c);\n            if (n === '/') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n    var unescapes = {'\\\\/': '/', '\\\\\\\\': '\\\\', '\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t'};\n    function unescapeRegexReplace(str) {\n      var stream = new CodeMirror.StringStream(str);\n      var output = [];\n      while (!stream.eol()) {\n        while (stream.peek() && stream.peek() != '\\\\') {\n          output.push(stream.next());\n        }\n        var matched = false;\n        for (var matcher in unescapes) {\n          if (stream.match(matcher, true)) {\n            matched = true;\n            output.push(unescapes[matcher]);\n            break;\n          }\n        }\n        if (!matched) {\n          output.push(stream.next());\n        }\n      }\n      return output.join('');\n    }\n    function parseQuery(query, ignoreCase, smartCase) {\n      var lastSearchRegister = vimGlobalState.registerController.getRegister('/');\n      lastSearchRegister.setText(query);\n      if (query instanceof RegExp) { return query; }\n      var slashes = findUnescapedSlashes(query);\n      var regexPart;\n      var forceIgnoreCase;\n      if (!slashes.length) {\n        regexPart = query;\n      } else {\n        regexPart = query.substring(0, slashes[0]);\n        var flagsPart = query.substring(slashes[0]);\n        forceIgnoreCase = (flagsPart.indexOf('i') != -1);\n      }\n      if (!regexPart) {\n        return null;\n      }\n      if (!getOption('pcre')) {\n        regexPart = translateRegex(regexPart);\n      }\n      if (smartCase) {\n        ignoreCase = (/^[^A-Z]*$/).test(regexPart);\n      }\n      var regexp = new RegExp(regexPart,\n          (ignoreCase || forceIgnoreCase) ? 'i' : undefined);\n      return regexp;\n    }\n    function showConfirm(cm, text) {\n      if (cm.openNotification) {\n        cm.openNotification('<span style=\"color: red\">' + text + '</span>',\n                            {bottom: true, duration: 5000});\n      } else {\n        alert(text);\n      }\n    }\n    function makePrompt(prefix, desc) {\n      var raw = '<span style=\"font-family: monospace; white-space: pre\">' +\n          (prefix || \"\") + '<input type=\"text\" autocorrect=\"off\" autocapitalize=\"none\" autocomplete=\"off\"></span>';\n      if (desc)\n        raw += ' <span style=\"color: #888\">' + desc + '</span>';\n      return raw;\n    }\n    var searchPromptDesc = '(Javascript regexp)';\n    function showPrompt(cm, options) {\n      var shortText = (options.prefix || '') + ' ' + (options.desc || '');\n      var prompt = makePrompt(options.prefix, options.desc);\n      dialog(cm, prompt, shortText, options.onClose, options);\n    }\n    function regexEqual(r1, r2) {\n      if (r1 instanceof RegExp && r2 instanceof RegExp) {\n          var props = ['global', 'multiline', 'ignoreCase', 'source'];\n          for (var i = 0; i < props.length; i++) {\n              var prop = props[i];\n              if (r1[prop] !== r2[prop]) {\n                  return false;\n              }\n          }\n          return true;\n      }\n      return false;\n    }\n    function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) {\n      if (!rawQuery) {\n        return;\n      }\n      var state = getSearchState(cm);\n      var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase);\n      if (!query) {\n        return;\n      }\n      highlightSearchMatches(cm, query);\n      if (regexEqual(query, state.getQuery())) {\n        return query;\n      }\n      state.setQuery(query);\n      return query;\n    }\n    function searchOverlay(query) {\n      if (query.source.charAt(0) == '^') {\n        var matchSol = true;\n      }\n      return {\n        token: function(stream) {\n          if (matchSol && !stream.sol()) {\n            stream.skipToEnd();\n            return;\n          }\n          var match = stream.match(query, false);\n          if (match) {\n            if (match[0].length == 0) {\n              stream.next();\n              return 'searching';\n            }\n            if (!stream.sol()) {\n              stream.backUp(1);\n              if (!query.exec(stream.next() + match[0])) {\n                stream.next();\n                return null;\n              }\n            }\n            stream.match(query);\n            return 'searching';\n          }\n          while (!stream.eol()) {\n            stream.next();\n            if (stream.match(query, false)) break;\n          }\n        },\n        query: query\n      };\n    }\n    function highlightSearchMatches(cm, query) {\n      var searchState = getSearchState(cm);\n      var overlay = searchState.getOverlay();\n      if (!overlay || query != overlay.query) {\n        if (overlay) {\n          cm.removeOverlay(overlay);\n        }\n        overlay = searchOverlay(query);\n        cm.addOverlay(overlay);\n        if (cm.showMatchesOnScrollbar) {\n          if (searchState.getScrollbarAnnotate()) {\n            searchState.getScrollbarAnnotate().clear();\n          }\n          searchState.setScrollbarAnnotate(cm.showMatchesOnScrollbar(query));\n        }\n        searchState.setOverlay(overlay);\n      }\n    }\n    function findNext(cm, prev, query, repeat) {\n      if (repeat === undefined) { repeat = 1; }\n      return cm.operation(function() {\n        var pos = cm.getCursor();\n        var cursor = cm.getSearchCursor(query, pos);\n        for (var i = 0; i < repeat; i++) {\n          var found = cursor.find(prev);\n          if (i == 0 && found && cursorEqual(cursor.from(), pos)) { found = cursor.find(prev); }\n          if (!found) {\n            cursor = cm.getSearchCursor(query,\n                (prev) ? Pos(cm.lastLine()) : Pos(cm.firstLine(), 0) );\n            if (!cursor.find(prev)) {\n              return;\n            }\n          }\n        }\n        return cursor.from();\n      });\n    }\n    function clearSearchHighlight(cm) {\n      var state = getSearchState(cm);\n      cm.removeOverlay(getSearchState(cm).getOverlay());\n      state.setOverlay(null);\n      if (state.getScrollbarAnnotate()) {\n        state.getScrollbarAnnotate().clear();\n        state.setScrollbarAnnotate(null);\n      }\n    }\n    function isInRange(pos, start, end) {\n      if (typeof pos != 'number') {\n        pos = pos.line;\n      }\n      if (start instanceof Array) {\n        return inArray(pos, start);\n      } else {\n        if (end) {\n          return (pos >= start && pos <= end);\n        } else {\n          return pos == start;\n        }\n      }\n    }\n    function getUserVisibleLines(cm) {\n      var renderer = cm.ace.renderer;\n      return {\n        top: renderer.getFirstFullyVisibleRow(),\n        bottom: renderer.getLastFullyVisibleRow()\n      }\n    }\n\n    function getMarkPos(cm, vim, markName) {\n\n      var mark = vim.marks[markName];\n      return mark && mark.find();\n    }\n\n    var ExCommandDispatcher = function() {\n      this.buildCommandMap_();\n    };\n    ExCommandDispatcher.prototype = {\n      processCommand: function(cm, input, opt_params) {\n        var that = this;\n        cm.operation(function () {\n          cm.curOp.isVimOp = true;\n          that._processCommand(cm, input, opt_params);\n        });\n      },\n      _processCommand: function(cm, input, opt_params) {\n        var vim = cm.state.vim;\n        var commandHistoryRegister = vimGlobalState.registerController.getRegister(':');\n        var previousCommand = commandHistoryRegister.toString();\n        if (vim.visualMode) {\n          exitVisualMode(cm);\n        }\n        var inputStream = new CodeMirror.StringStream(input);\n        commandHistoryRegister.setText(input);\n        var params = opt_params || {};\n        params.input = input;\n        try {\n          this.parseInput_(cm, inputStream, params);\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n        var command;\n        var commandName;\n        if (!params.commandName) {\n          if (params.line !== undefined) {\n            commandName = 'move';\n          }\n        } else {\n          command = this.matchCommand_(params.commandName);\n          if (command) {\n            commandName = command.name;\n            if (command.excludeFromCommandHistory) {\n              commandHistoryRegister.setText(previousCommand);\n            }\n            this.parseCommandArgs_(inputStream, params, command);\n            if (command.type == 'exToKey') {\n              for (var i = 0; i < command.toKeys.length; i++) {\n                CodeMirror.Vim.handleKey(cm, command.toKeys[i], 'mapping');\n              }\n              return;\n            } else if (command.type == 'exToEx') {\n              this.processCommand(cm, command.toInput);\n              return;\n            }\n          }\n        }\n        if (!commandName) {\n          showConfirm(cm, 'Not an editor command \":' + input + '\"');\n          return;\n        }\n        try {\n          exCommands[commandName](cm, params);\n          if ((!command || !command.possiblyAsync) && params.callback) {\n            params.callback();\n          }\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n      },\n      parseInput_: function(cm, inputStream, result) {\n        inputStream.eatWhile(':');\n        if (inputStream.eat('%')) {\n          result.line = cm.firstLine();\n          result.lineEnd = cm.lastLine();\n        } else {\n          result.line = this.parseLineSpec_(cm, inputStream);\n          if (result.line !== undefined && inputStream.eat(',')) {\n            result.lineEnd = this.parseLineSpec_(cm, inputStream);\n          }\n        }\n        var commandMatch = inputStream.match(/^(\\w+)/);\n        if (commandMatch) {\n          result.commandName = commandMatch[1];\n        } else {\n          result.commandName = inputStream.match(/.*/)[0];\n        }\n\n        return result;\n      },\n      parseLineSpec_: function(cm, inputStream) {\n        var numberMatch = inputStream.match(/^(\\d+)/);\n        if (numberMatch) {\n          return parseInt(numberMatch[1], 10) - 1;\n        }\n        switch (inputStream.next()) {\n          case '.':\n            return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);\n          case '$':\n            return this.parseLineSpecOffset_(inputStream, cm.lastLine());\n          case '\\'':\n            var markName = inputStream.next();\n            var markPos = getMarkPos(cm, cm.state.vim, markName);\n            if (!markPos) throw new Error('Mark not set');\n            return this.parseLineSpecOffset_(inputStream, markPos.line);\n          case '-':\n          case '+':\n            inputStream.backUp(1);\n            return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);\n          default:\n            inputStream.backUp(1);\n            return undefined;\n        }\n      },\n      parseLineSpecOffset_: function(inputStream, line) {\n        var offsetMatch = inputStream.match(/^([+-])?(\\d+)/);\n        if (offsetMatch) {\n          var offset = parseInt(offsetMatch[2], 10);\n          if (offsetMatch[1] == \"-\") {\n            line -= offset;\n          } else {\n            line += offset;\n          }\n        }\n        return line;\n      },\n      parseCommandArgs_: function(inputStream, params, command) {\n        if (inputStream.eol()) {\n          return;\n        }\n        params.argString = inputStream.match(/.*/)[0];\n        var delim = command.argDelimiter || /\\s+/;\n        var args = trim(params.argString).split(delim);\n        if (args.length && args[0]) {\n          params.args = args;\n        }\n      },\n      matchCommand_: function(commandName) {\n        for (var i = commandName.length; i > 0; i--) {\n          var prefix = commandName.substring(0, i);\n          if (this.commandMap_[prefix]) {\n            var command = this.commandMap_[prefix];\n            if (command.name.indexOf(commandName) === 0) {\n              return command;\n            }\n          }\n        }\n        return null;\n      },\n      buildCommandMap_: function() {\n        this.commandMap_ = {};\n        for (var i = 0; i < defaultExCommandMap.length; i++) {\n          var command = defaultExCommandMap[i];\n          var key = command.shortName || command.name;\n          this.commandMap_[key] = command;\n        }\n      },\n      map: function(lhs, rhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToEx',\n              toInput: rhs.substring(1),\n              user: true\n            };\n          } else {\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToKey',\n              toKeys: rhs,\n              user: true\n            };\n          }\n        } else {\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            var mapping = {\n              keys: lhs,\n              type: 'keyToEx',\n              exArgs: { input: rhs.substring(1) }\n            };\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          } else {\n            var mapping = {\n              keys: lhs,\n              type: 'keyToKey',\n              toKeys: rhs\n            };\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          }\n        }\n      },\n      unmap: function(lhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (this.commandMap_[commandName] && this.commandMap_[commandName].user) {\n            delete this.commandMap_[commandName];\n            return;\n          }\n        } else {\n          var keys = lhs;\n          for (var i = 0; i < defaultKeymap.length; i++) {\n            if (keys == defaultKeymap[i].keys\n                && defaultKeymap[i].context === ctx) {\n              defaultKeymap.splice(i, 1);\n              return;\n            }\n          }\n        }\n      }\n    };\n\n    var exCommands = {\n      colorscheme: function(cm, params) {\n        if (!params.args || params.args.length < 1) {\n          showConfirm(cm, cm.getOption('theme'));\n          return;\n        }\n        cm.setOption('theme', params.args[0]);\n      },\n      map: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 2) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx);\n      },\n      imap: function(cm, params) { this.map(cm, params, 'insert'); },\n      nmap: function(cm, params) { this.map(cm, params, 'normal'); },\n      vmap: function(cm, params) { this.map(cm, params, 'visual'); },\n      unmap: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'No such mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.unmap(mapArgs[0], ctx);\n      },\n      move: function(cm, params) {\n        commandDispatcher.processCommand(cm, cm.state.vim, {\n            type: 'motion',\n            motion: 'moveToLineOrEdgeOfDocument',\n            motionArgs: { forward: false, explicitRepeat: true,\n              linewise: true },\n            repeatOverride: params.line+1});\n      },\n      set: function(cm, params) {\n        var setArgs = params.args;\n        var setCfg = params.setCfg || {};\n        if (!setArgs || setArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        var expr = setArgs[0].split('=');\n        var optionName = expr[0];\n        var value = expr[1];\n        var forceGet = false;\n\n        if (optionName.charAt(optionName.length - 1) == '?') {\n          if (value) { throw Error('Trailing characters: ' + params.argString); }\n          optionName = optionName.substring(0, optionName.length - 1);\n          forceGet = true;\n        }\n        if (value === undefined && optionName.substring(0, 2) == 'no') {\n          optionName = optionName.substring(2);\n          value = false;\n        }\n\n        var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean';\n        if (optionIsBoolean && value == undefined) {\n          value = true;\n        }\n        if (!optionIsBoolean && value === undefined || forceGet) {\n          var oldValue = getOption(optionName, cm, setCfg);\n          if (oldValue instanceof Error) {\n            showConfirm(cm, oldValue.message);\n          } else if (oldValue === true || oldValue === false) {\n            showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);\n          } else {\n            showConfirm(cm, '  ' + optionName + '=' + oldValue);\n          }\n        } else {\n          var setOptionReturn = setOption(optionName, value, cm, setCfg);\n          if (setOptionReturn instanceof Error) {\n            showConfirm(cm, setOptionReturn.message);\n          }\n        }\n      },\n      setlocal: function (cm, params) {\n        params.setCfg = {scope: 'local'};\n        this.set(cm, params);\n      },\n      setglobal: function (cm, params) {\n        params.setCfg = {scope: 'global'};\n        this.set(cm, params);\n      },\n      registers: function(cm, params) {\n        var regArgs = params.args;\n        var registers = vimGlobalState.registerController.registers;\n        var regInfo = '----------Registers----------<br><br>';\n        if (!regArgs) {\n          for (var registerName in registers) {\n            var text = registers[registerName].toString();\n            if (text.length) {\n              regInfo += '\"' + registerName + '    ' + text + '<br>';\n            }\n          }\n        } else {\n          var registerName;\n          regArgs = regArgs.join('');\n          for (var i = 0; i < regArgs.length; i++) {\n            registerName = regArgs.charAt(i);\n            if (!vimGlobalState.registerController.isValidRegister(registerName)) {\n              continue;\n            }\n            var register = registers[registerName] || new Register();\n            regInfo += '\"' + registerName + '    ' + register.toString() + '<br>';\n          }\n        }\n        showConfirm(cm, regInfo);\n      },\n      sort: function(cm, params) {\n        var reverse, ignoreCase, unique, number, pattern;\n        function parseArgs() {\n          if (params.argString) {\n            var args = new CodeMirror.StringStream(params.argString);\n            if (args.eat('!')) { reverse = true; }\n            if (args.eol()) { return; }\n            if (!args.eatSpace()) { return 'Invalid arguments'; }\n            var opts = args.match(/([dinuox]+)?\\s*(\\/.+\\/)?\\s*/);\n            if (!opts && !args.eol()) { return 'Invalid arguments'; }\n            if (opts[1]) {\n              ignoreCase = opts[1].indexOf('i') != -1;\n              unique = opts[1].indexOf('u') != -1;\n              var decimal = opts[1].indexOf('d') != -1 || opts[1].indexOf('n') != -1 && 1;\n              var hex = opts[1].indexOf('x') != -1 && 1;\n              var octal = opts[1].indexOf('o') != -1 && 1;\n              if (decimal + hex + octal > 1) { return 'Invalid arguments'; }\n              number = decimal && 'decimal' || hex && 'hex' || octal && 'octal';\n            }\n            if (opts[2]) {\n              pattern = new RegExp(opts[2].substr(1, opts[2].length - 2), ignoreCase ? 'i' : '');\n            }\n          }\n        }\n        var err = parseArgs();\n        if (err) {\n          showConfirm(cm, err + ': ' + params.argString);\n          return;\n        }\n        var lineStart = params.line || cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        if (lineStart == lineEnd) { return; }\n        var curStart = Pos(lineStart, 0);\n        var curEnd = Pos(lineEnd, lineLength(cm, lineEnd));\n        var text = cm.getRange(curStart, curEnd).split('\\n');\n        var numberRegex = pattern ? pattern :\n           (number == 'decimal') ? /(-?)([\\d]+)/ :\n           (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i :\n           (number == 'octal') ? /([0-7]+)/ : null;\n        var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null;\n        var numPart = [], textPart = [];\n        if (number || pattern) {\n          for (var i = 0; i < text.length; i++) {\n            var matchPart = pattern ? text[i].match(pattern) : null;\n            if (matchPart && matchPart[0] != '') {\n              numPart.push(matchPart);\n            } else if (!pattern && numberRegex.exec(text[i])) {\n              numPart.push(text[i]);\n            } else {\n              textPart.push(text[i]);\n            }\n          }\n        } else {\n          textPart = text;\n        }\n        function compareFn(a, b) {\n          if (reverse) { var tmp; tmp = a; a = b; b = tmp; }\n          if (ignoreCase) { a = a.toLowerCase(); b = b.toLowerCase(); }\n          var anum = number && numberRegex.exec(a);\n          var bnum = number && numberRegex.exec(b);\n          if (!anum) { return a < b ? -1 : 1; }\n          anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix);\n          bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix);\n          return anum - bnum;\n        }\n        function comparePatternFn(a, b) {\n          if (reverse) { var tmp; tmp = a; a = b; b = tmp; }\n          if (ignoreCase) { a[0] = a[0].toLowerCase(); b[0] = b[0].toLowerCase(); }\n          return (a[0] < b[0]) ? -1 : 1;\n        }\n        numPart.sort(pattern ? comparePatternFn : compareFn);\n        if (pattern) {\n          for (var i = 0; i < numPart.length; i++) {\n            numPart[i] = numPart[i].input;\n          }\n        } else if (!number) { textPart.sort(compareFn); }\n        text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart);\n        if (unique) { // Remove duplicate lines\n          var textOld = text;\n          var lastLine;\n          text = [];\n          for (var i = 0; i < textOld.length; i++) {\n            if (textOld[i] != lastLine) {\n              text.push(textOld[i]);\n            }\n            lastLine = textOld[i];\n          }\n        }\n        cm.replaceRange(text.join('\\n'), curStart, curEnd);\n      },\n      global: function(cm, params) {\n        var argString = params.argString;\n        if (!argString) {\n          showConfirm(cm, 'Regular Expression missing from global');\n          return;\n        }\n        var lineStart = (params.line !== undefined) ? params.line : cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        var tokens = splitBySlash(argString);\n        var regexPart = argString, cmd;\n        if (tokens.length) {\n          regexPart = tokens[0];\n          cmd = tokens.slice(1, tokens.length).join('/');\n        }\n        if (regexPart) {\n          try {\n           updateSearchQuery(cm, regexPart, true /** ignoreCase */,\n             true /** smartCase */);\n          } catch (e) {\n           showConfirm(cm, 'Invalid regex: ' + regexPart);\n           return;\n          }\n        }\n        var query = getSearchState(cm).getQuery();\n        var matchedLines = [], content = '';\n        for (var i = lineStart; i <= lineEnd; i++) {\n          var matched = query.test(cm.getLine(i));\n          if (matched) {\n            matchedLines.push(i+1);\n            content+= cm.getLine(i) + '<br>';\n          }\n        }\n        if (!cmd) {\n          showConfirm(cm, content);\n          return;\n        }\n        var index = 0;\n        var nextCommand = function() {\n          if (index < matchedLines.length) {\n            var command = matchedLines[index] + cmd;\n            exCommandDispatcher.processCommand(cm, command, {\n              callback: nextCommand\n            });\n          }\n          index++;\n        };\n        nextCommand();\n      },\n      substitute: function(cm, params) {\n        if (!cm.getSearchCursor) {\n          throw new Error('Search feature not available. Requires searchcursor.js or ' +\n              'any other getSearchCursor implementation.');\n        }\n        var argString = params.argString;\n        var tokens = argString ? splitBySeparator(argString, argString[0]) : [];\n        var regexPart, replacePart = '', trailing, flagsPart, count;\n        var confirm = false; // Whether to confirm each replace.\n        var global = false; // True to replace all instances on a line, false to replace only 1.\n        if (tokens.length) {\n          regexPart = tokens[0];\n          replacePart = tokens[1];\n          if (regexPart && regexPart[regexPart.length - 1] === '$') {\n            regexPart = regexPart.slice(0, regexPart.length - 1) + '\\\\n';\n            replacePart = replacePart ? replacePart + '\\n' : '\\n';\n          }\n          if (replacePart !== undefined) {\n            if (getOption('pcre')) {\n              replacePart = unescapeRegexReplace(replacePart);\n            } else {\n              replacePart = translateRegexReplace(replacePart);\n            }\n            vimGlobalState.lastSubstituteReplacePart = replacePart;\n          }\n          trailing = tokens[2] ? tokens[2].split(' ') : [];\n        } else {\n          if (argString && argString.length) {\n            showConfirm(cm, 'Substitutions should be of the form ' +\n                ':s/pattern/replace/');\n            return;\n          }\n        }\n        if (trailing) {\n          flagsPart = trailing[0];\n          count = parseInt(trailing[1]);\n          if (flagsPart) {\n            if (flagsPart.indexOf('c') != -1) {\n              confirm = true;\n              flagsPart.replace('c', '');\n            }\n            if (flagsPart.indexOf('g') != -1) {\n              global = true;\n              flagsPart.replace('g', '');\n            }\n            regexPart = regexPart.replace(/\\//g, \"\\\\/\") + '/' + flagsPart;\n          }\n        }\n        if (regexPart) {\n          try {\n            updateSearchQuery(cm, regexPart, true /** ignoreCase */,\n              true /** smartCase */);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + regexPart);\n            return;\n          }\n        }\n        replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart;\n        if (replacePart === undefined) {\n          showConfirm(cm, 'No previous substitute regular expression');\n          return;\n        }\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line;\n        var lineEnd = params.lineEnd || lineStart;\n        if (lineStart == cm.firstLine() && lineEnd == cm.lastLine()) {\n          lineEnd = Infinity;\n        }\n        if (count) {\n          lineStart = lineEnd;\n          lineEnd = lineStart + count - 1;\n        }\n        var startPos = clipCursorToContent(cm, Pos(lineStart, 0));\n        var cursor = cm.getSearchCursor(query, startPos);\n        doReplace(cm, confirm, global, lineStart, lineEnd, cursor, query, replacePart, params.callback);\n      },\n      redo: CodeMirror.commands.redo,\n      undo: CodeMirror.commands.undo,\n      write: function(cm) {\n        if (CodeMirror.commands.save) {\n          CodeMirror.commands.save(cm);\n        } else if (cm.save) {\n          cm.save();\n        }\n      },\n      nohlsearch: function(cm) {\n        clearSearchHighlight(cm);\n      },\n      yank: function (cm) {\n        var cur = copyCursor(cm.getCursor());\n        var line = cur.line;\n        var lineText = cm.getLine(line);\n        vimGlobalState.registerController.pushText(\n          '0', 'yank', lineText, true, true);\n      },\n      delmarks: function(cm, params) {\n        if (!params.argString || !trim(params.argString)) {\n          showConfirm(cm, 'Argument required');\n          return;\n        }\n\n        var state = cm.state.vim;\n        var stream = new CodeMirror.StringStream(trim(params.argString));\n        while (!stream.eol()) {\n          stream.eatSpace();\n          var count = stream.pos;\n\n          if (!stream.match(/[a-zA-Z]/, false)) {\n            showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n            return;\n          }\n\n          var sym = stream.next();\n          if (stream.match('-', true)) {\n            if (!stream.match(/[a-zA-Z]/, false)) {\n              showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n              return;\n            }\n\n            var startMark = sym;\n            var finishMark = stream.next();\n            if (isLowerCase(startMark) && isLowerCase(finishMark) ||\n                isUpperCase(startMark) && isUpperCase(finishMark)) {\n              var start = startMark.charCodeAt(0);\n              var finish = finishMark.charCodeAt(0);\n              if (start >= finish) {\n                showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n                return;\n              }\n              for (var j = 0; j <= finish - start; j++) {\n                var mark = String.fromCharCode(start + j);\n                delete state.marks[mark];\n              }\n            } else {\n              showConfirm(cm, 'Invalid argument: ' + startMark + '-');\n              return;\n            }\n          } else {\n            delete state.marks[sym];\n          }\n        }\n      }\n    };\n\n    var exCommandDispatcher = new ExCommandDispatcher();\n    function doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query,\n        replaceWith, callback) {\n      cm.state.vim.exMode = true;\n      var done = false;\n      var lastPos = searchCursor.from();\n      function replaceAll() {\n        cm.operation(function() {\n          while (!done) {\n            replace();\n            next();\n          }\n          stop();\n        });\n      }\n      function replace() {\n        var text = cm.getRange(searchCursor.from(), searchCursor.to());\n        var newText = text.replace(query, replaceWith);\n        searchCursor.replace(newText);\n      }\n      function next() {\n        while(searchCursor.findNext() &&\n              isInRange(searchCursor.from(), lineStart, lineEnd)) {\n          if (!global && lastPos && searchCursor.from().line == lastPos.line) {\n            continue;\n          }\n          cm.scrollIntoView(searchCursor.from(), 30);\n          cm.setSelection(searchCursor.from(), searchCursor.to());\n          lastPos = searchCursor.from();\n          done = false;\n          return;\n        }\n        done = true;\n      }\n      function stop(close) {\n        if (close) { close(); }\n        cm.focus();\n        if (lastPos) {\n          cm.setCursor(lastPos);\n          var vim = cm.state.vim;\n          vim.exMode = false;\n          vim.lastHPos = vim.lastHSPos = lastPos.ch;\n        }\n        if (callback) { callback(); }\n      }\n      function onPromptKeyDown(e, _value, close) {\n        CodeMirror.e_stop(e);\n        var keyName = CodeMirror.keyName(e);\n        switch (keyName) {\n          case 'Y':\n            replace(); next(); break;\n          case 'N':\n            next(); break;\n          case 'A':\n            var savedCallback = callback;\n            callback = undefined;\n            cm.operation(replaceAll);\n            callback = savedCallback;\n            break;\n          case 'L':\n            replace();\n          case 'Q':\n          case 'Esc':\n          case 'Ctrl-C':\n          case 'Ctrl-[':\n            stop(close);\n            break;\n        }\n        if (done) { stop(close); }\n        return true;\n      }\n      next();\n      if (done) {\n        showConfirm(cm, 'No matches for ' + query.source);\n        return;\n      }\n      if (!confirm) {\n        replaceAll();\n        if (callback) { callback(); }\n        return;\n      }\n      showPrompt(cm, {\n        prefix: 'replace with <strong>' + replaceWith + '</strong> (y/n/a/q/l)',\n        onKeyDown: onPromptKeyDown\n      });\n    }\n\n    CodeMirror.keyMap.vim = {\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    function exitInsertMode(cm) {\n      var vim = cm.state.vim;\n      var macroModeState = vimGlobalState.macroModeState;\n      var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.');\n      var isPlaying = macroModeState.isPlaying;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      if (!isPlaying) {\n        cm.off('change', onChange);\n        CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n      }\n      if (!isPlaying && vim.insertModeRepeat > 1) {\n        repeatLastEdit(cm, vim, vim.insertModeRepeat - 1,\n            true /** repeatForInsert */);\n        vim.lastEditInputState.repeatOverride = vim.insertModeRepeat;\n      }\n      delete vim.insertModeRepeat;\n      vim.insertMode = false;\n      cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1);\n      cm.setOption('keyMap', 'vim');\n      cm.setOption('disableInput', true);\n      cm.toggleOverwrite(false); // exit replace mode if we were in it.\n      insertModeChangeRegister.setText(lastChange.changes.join(''));\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      if (macroModeState.isRecording) {\n        logInsertModeChange(macroModeState);\n      }\n    }\n\n    function _mapCommand(command) {\n      defaultKeymap.unshift(command);\n    }\n\n    function mapCommand(keys, type, name, args, extra) {\n      var command = {keys: keys, type: type};\n      command[type] = name;\n      command[type + \"Args\"] = args;\n      for (var key in extra)\n        command[key] = extra[key];\n      _mapCommand(command);\n    }\n    defineOption('insertModeEscKeysTimeout', 200, 'number');\n\n    CodeMirror.keyMap['vim-insert'] = {\n      'Ctrl-N': 'autocomplete',\n      'Ctrl-P': 'autocomplete',\n      'Enter': function(cm) {\n        var fn = CodeMirror.commands.newlineAndIndentContinueComment ||\n            CodeMirror.commands.newlineAndIndent;\n        fn(cm);\n      },\n      fallthrough: ['default'],\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    CodeMirror.keyMap['vim-replace'] = {\n      'Backspace': 'goCharLeft',\n      fallthrough: ['vim-insert'],\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    function executeMacroRegister(cm, vim, macroModeState, registerName) {\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (registerName == ':') {\n        if (register.keyBuffer[0]) {\n          exCommandDispatcher.processCommand(cm, register.keyBuffer[0]);\n        }\n        macroModeState.isPlaying = false;\n        return;\n      }\n      var keyBuffer = register.keyBuffer;\n      var imc = 0;\n      macroModeState.isPlaying = true;\n      macroModeState.replaySearchQueries = register.searchQueries.slice(0);\n      for (var i = 0; i < keyBuffer.length; i++) {\n        var text = keyBuffer[i];\n        var match, key;\n        while (text) {\n          match = (/<\\w+-.+?>|<\\w+>|./).exec(text);\n          key = match[0];\n          text = text.substring(match.index + key.length);\n          CodeMirror.Vim.handleKey(cm, key, 'macro');\n          if (vim.insertMode) {\n            var changes = register.insertModeChanges[imc++].changes;\n            vimGlobalState.macroModeState.lastInsertModeChanges.changes =\n                changes;\n            repeatInsertModeChanges(cm, changes, 1);\n            exitInsertMode(cm);\n          }\n        }\n      }\n      macroModeState.isPlaying = false;\n    }\n\n    function logKey(macroModeState, key) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register) {\n        register.pushText(key);\n      }\n    }\n\n    function logInsertModeChange(macroModeState) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register && register.pushInsertModeChanges) {\n        register.pushInsertModeChanges(macroModeState.lastInsertModeChanges);\n      }\n    }\n\n    function logSearchQuery(macroModeState, query) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register && register.pushSearchQuery) {\n        register.pushSearchQuery(query);\n      }\n    }\n    function onChange(cm, changeObj) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      if (!macroModeState.isPlaying) {\n        while(changeObj) {\n          lastChange.expectCursorActivityForChange = true;\n          if (lastChange.ignoreCount > 1) {\n            lastChange.ignoreCount--;\n          } else if (changeObj.origin == '+input' || changeObj.origin == 'paste'\n              || changeObj.origin === undefined /* only in testing */) {\n            var selectionCount = cm.listSelections().length;\n            if (selectionCount > 1)\n              lastChange.ignoreCount = selectionCount;\n            var text = changeObj.text.join('\\n');\n            if (lastChange.maybeReset) {\n              lastChange.changes = [];\n              lastChange.maybeReset = false;\n            }\n            if (cm.state.overwrite && !/\\n/.test(text)) {\n                lastChange.changes.push([text]);\n            } else {\n                lastChange.changes.push(text);\n            }\n          }\n          changeObj = changeObj.next;\n        }\n      }\n    }\n    function onCursorActivity(cm) {\n      var vim = cm.state.vim;\n      if (vim.insertMode) {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        var lastChange = macroModeState.lastInsertModeChanges;\n        if (lastChange.expectCursorActivityForChange) {\n          lastChange.expectCursorActivityForChange = false;\n        } else {\n          lastChange.maybeReset = true;\n        }\n      } else if (!cm.curOp.isVimOp) {\n        handleExternalSelection(cm, vim);\n      }\n      if (vim.visualMode) {\n        updateFakeCursor(cm);\n      }\n    }\n    function updateFakeCursor(cm) {\n      var vim = cm.state.vim;\n      var from = clipCursorToContent(cm, copyCursor(vim.sel.head));\n      var to = offsetCursor(from, 0, 1);\n      if (vim.fakeCursor) {\n        vim.fakeCursor.clear();\n      }\n      vim.fakeCursor = cm.markText(from, to, {className: 'cm-animate-fat-cursor'});\n    }\n    function handleExternalSelection(cm, vim) {\n      var anchor = cm.getCursor('anchor');\n      var head = cm.getCursor('head');\n      if (vim.visualMode && !cm.somethingSelected()) {\n        exitVisualMode(cm, false);\n      } else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) {\n        vim.visualMode = true;\n        vim.visualLine = false;\n        CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\"});\n      }\n      if (vim.visualMode) {\n        var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n        var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n        head = offsetCursor(head, 0, headOffset);\n        anchor = offsetCursor(anchor, 0, anchorOffset);\n        vim.sel = {\n          anchor: anchor,\n          head: head\n        };\n        updateMark(cm, vim, '<', cursorMin(head, anchor));\n        updateMark(cm, vim, '>', cursorMax(head, anchor));\n      } else if (!vim.insertMode) {\n        vim.lastHPos = cm.getCursor().ch;\n      }\n    }\n    function InsertModeKey(keyName) {\n      this.keyName = keyName;\n    }\n    function onKeyEventTargetKeyDown(e) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      var keyName = CodeMirror.keyName(e);\n      if (!keyName) { return; }\n      function onKeyFound() {\n        if (lastChange.maybeReset) {\n          lastChange.changes = [];\n          lastChange.maybeReset = false;\n        }\n        lastChange.changes.push(new InsertModeKey(keyName));\n        return true;\n      }\n      if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) {\n        CodeMirror.lookupKey(keyName, 'vim-insert', onKeyFound);\n      }\n    }\n    function repeatLastEdit(cm, vim, repeat, repeatForInsert) {\n      var macroModeState = vimGlobalState.macroModeState;\n      macroModeState.isPlaying = true;\n      var isAction = !!vim.lastEditActionCommand;\n      var cachedInputState = vim.inputState;\n      function repeatCommand() {\n        if (isAction) {\n          commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand);\n        } else {\n          commandDispatcher.evalInput(cm, vim);\n        }\n      }\n      function repeatInsert(repeat) {\n        if (macroModeState.lastInsertModeChanges.changes.length > 0) {\n          repeat = !vim.lastEditActionCommand ? 1 : repeat;\n          var changeObject = macroModeState.lastInsertModeChanges;\n          repeatInsertModeChanges(cm, changeObject.changes, repeat);\n        }\n      }\n      vim.inputState = vim.lastEditInputState;\n      if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) {\n        for (var i = 0; i < repeat; i++) {\n          repeatCommand();\n          repeatInsert(1);\n        }\n      } else {\n        if (!repeatForInsert) {\n          repeatCommand();\n        }\n        repeatInsert(repeat);\n      }\n      vim.inputState = cachedInputState;\n      if (vim.insertMode && !repeatForInsert) {\n        exitInsertMode(cm);\n      }\n      macroModeState.isPlaying = false;\n    }\n\n    function repeatInsertModeChanges(cm, changes, repeat) {\n      function keyHandler(binding) {\n        if (typeof binding == 'string') {\n          CodeMirror.commands[binding](cm);\n        } else {\n          binding(cm);\n        }\n        return true;\n      }\n      var head = cm.getCursor('head');\n      var inVisualBlock = vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock;\n      if (inVisualBlock) {\n        var vim = cm.state.vim;\n        var lastSel = vim.lastSelection;\n        var offset = getOffset(lastSel.anchor, lastSel.head);\n        selectForInsert(cm, head, offset.line + 1);\n        repeat = cm.listSelections().length;\n        cm.setCursor(head);\n      }\n      for (var i = 0; i < repeat; i++) {\n        if (inVisualBlock) {\n          cm.setCursor(offsetCursor(head, i, 0));\n        }\n        for (var j = 0; j < changes.length; j++) {\n          var change = changes[j];\n          if (change instanceof InsertModeKey) {\n            CodeMirror.lookupKey(change.keyName, 'vim-insert', keyHandler);\n          } else if (typeof change == \"string\") {\n            var cur = cm.getCursor();\n            cm.replaceRange(change, cur, cur);\n          } else {\n            var start = cm.getCursor();\n            var end = offsetCursor(start, 0, change[0].length);\n            cm.replaceRange(change[0], start, end);\n          }\n        }\n      }\n      if (inVisualBlock) {\n        cm.setCursor(offsetCursor(head, 0, 1));\n      }\n    }\n\n    resetVimGlobalState();\n  CodeMirror.Vim = Vim();\n\n  Vim = CodeMirror.Vim;\n\n  var specialKey = {'return':'CR',backspace:'BS','delete':'Del',esc:'Esc',\n    left:'Left',right:'Right',up:'Up',down:'Down',space: 'Space',\n    home:'Home',end:'End',pageup:'PageUp',pagedown:'PageDown', enter: 'CR'\n  };\n  function lookupKey(hashId, key, e) {\n    if (key.length > 1 && key[0] == \"n\") {\n      key = key.replace(\"numpad\", \"\");\n    }\n    key = specialKey[key] || key;\n    var name = '';\n    if (e.ctrlKey) { name += 'C-'; }\n    if (e.altKey) { name += 'A-'; }\n    if ((name || key.length > 1) && e.shiftKey) { name += 'S-'; }\n\n    name += key;\n    if (name.length > 1) { name = '<' + name + '>'; }\n    return name;\n  }\n  var handleKey = Vim.handleKey.bind(Vim);\n  Vim.handleKey = function(cm, key, origin) {\n    return cm.operation(function() {\n      return handleKey(cm, key, origin);\n    }, true);\n  }\n  function cloneVimState(state) {\n    var n = new state.constructor();\n    Object.keys(state).forEach(function(key) {\n      var o = state[key];\n      if (Array.isArray(o))\n        o = o.slice();\n      else if (o && typeof o == \"object\" && o.constructor != Object)\n        o = cloneVimState(o);\n      n[key] = o;\n    });\n    if (state.sel) {\n      n.sel = {\n        head: state.sel.head && copyCursor(state.sel.head),\n        anchor: state.sel.anchor && copyCursor(state.sel.anchor)\n      };\n    }\n    return n;\n  }\n  function multiSelectHandleKey(cm, key, origin) {\n    var isHandled = false;\n    var vim = Vim.maybeInitVimState_(cm);\n    var visualBlock = vim.visualBlock || vim.wasInVisualBlock;\n    if (vim.wasInVisualBlock && !cm.ace.inMultiSelectMode) {\n      vim.wasInVisualBlock = false;\n    } else if (cm.ace.inMultiSelectMode && vim.visualBlock) {\n       vim.wasInVisualBlock = true;\n    }\n    \n    if (key == '<Esc>' && !vim.insertMode && !vim.visualMode && cm.ace.inMultiSelectMode) {\n      cm.ace.exitMultiSelectMode();\n    } else if (visualBlock || !cm.ace.inMultiSelectMode || cm.ace.inVirtualSelectionMode) {\n      isHandled = Vim.handleKey(cm, key, origin);\n    } else {\n      var old = cloneVimState(vim);\n      cm.operation(function() {\n        cm.ace.forEachSelection(function() {\n          var sel = cm.ace.selection;\n          cm.state.vim.lastHPos = sel.$desiredColumn == null ? sel.lead.column : sel.$desiredColumn;\n          var head = cm.getCursor(\"head\");\n          var anchor = cm.getCursor(\"anchor\");\n          var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n          var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n          head = offsetCursor(head, 0, headOffset);\n          anchor = offsetCursor(anchor, 0, anchorOffset);\n          cm.state.vim.sel.head = head;\n          cm.state.vim.sel.anchor = anchor;\n          \n          isHandled = handleKey(cm, key, origin);\n          sel.$desiredColumn = cm.state.vim.lastHPos == -1 ? null : cm.state.vim.lastHPos;\n          if (cm.virtualSelectionMode()) {\n            cm.state.vim = cloneVimState(old);\n          }\n        });\n        if (cm.curOp.cursorActivity && !isHandled)\n          cm.curOp.cursorActivity = false;\n      }, true);\n    }\n    if (isHandled && !vim.visualMode && !vim.insert)\n      handleExternalSelection(cm, vim);\n    return isHandled;\n  }\n  exports.CodeMirror = CodeMirror;\n  var getVim = Vim.maybeInitVimState_;\n  exports.handler = {\n    $id: \"ace/keyboard/vim\",\n    drawCursor: function(element, pixelPos, config, sel, session) {\n      var vim = this.state.vim || {};\n      var w = config.characterWidth;\n      var h = config.lineHeight;\n      var top = pixelPos.top;\n      var left = pixelPos.left;\n      if (!vim.insertMode) {\n        var isbackwards = !sel.cursor \n            ? session.selection.isBackwards() || session.selection.isEmpty()\n            : Range.comparePoints(sel.cursor, sel.start) <= 0;\n        if (!isbackwards && left > w)\n          left -= w;\n      }     \n      if (!vim.insertMode && vim.status) {\n        h = h / 2;\n        top += h;\n      }\n      dom.translate(element, left, top);\n      dom.setStyle(element.style, \"width\", w + \"px\");\n      dom.setStyle(element.style, \"height\", h + \"px\");\n    },\n    handleKeyboard: function(data, hashId, key, keyCode, e) {\n      var editor = data.editor;\n      var cm = editor.state.cm;\n      var vim = getVim(cm);\n      if (keyCode == -1) return;\n      if (!vim.insertMode) {\n        if (hashId == -1) {\n          if (key.charCodeAt(0) > 0xFF) {\n            if (data.inputKey) {\n              key = data.inputKey;\n              if (key && data.inputHash == 4)\n                key = key.toUpperCase();\n            }\n          }\n          data.inputChar = key;\n        }\n        else if (hashId == 4 || hashId == 0) {\n          if (data.inputKey == key && data.inputHash == hashId && data.inputChar) {\n            key = data.inputChar;\n            hashId = -1\n          }\n          else {\n            data.inputChar = null;\n            data.inputKey = key;\n            data.inputHash = hashId;\n          }\n        }\n        else {\n          data.inputChar = data.inputKey = null;\n        }\n      }\n      if (key == \"c\" && hashId == 1) { // key == \"ctrl-c\"\n        if (!useragent.isMac && editor.getCopyText()) {\n          editor.once(\"copy\", function() {\n            editor.selection.clearSelection();\n          });\n          return {command: \"null\", passEvent: true};\n        }\n      }\n      \n      if (key == \"esc\" && !vim.insertMode && !vim.visualMode && !cm.ace.inMultiSelectMode) {\n        var searchState = getSearchState(cm);\n        var overlay = searchState.getOverlay();\n        if (overlay) cm.removeOverlay(overlay);\n      }\n      \n      if (hashId == -1 || hashId & 1 || hashId === 0 && key.length > 1) {\n        var insertMode = vim.insertMode;\n        var name = lookupKey(hashId, key, e || {});\n        if (vim.status == null)\n          vim.status = \"\";\n        var isHandled = multiSelectHandleKey(cm, name, 'user');\n        vim = getVim(cm); // may be changed by multiSelectHandleKey\n        if (isHandled && vim.status != null)\n          vim.status += name;\n        else if (vim.status == null)\n          vim.status = \"\";\n        cm._signal(\"changeStatus\");\n        if (!isHandled && (hashId != -1 || insertMode))\n          return;\n        return {command: \"null\", passEvent: !isHandled};\n      }\n    },\n    attach: function(editor) {\n      if (!editor.state) editor.state = {};\n      var cm = new CodeMirror(editor);\n      editor.state.cm = cm;\n      editor.$vimModeHandler = this;\n      CodeMirror.keyMap.vim.attach(cm);\n      getVim(cm).status = null;\n      cm.on('vim-command-done', function() {\n        if (cm.virtualSelectionMode()) return;\n        getVim(cm).status = null;\n        cm.ace._signal(\"changeStatus\");\n        cm.ace.session.markUndoGroup();\n      });\n      cm.on(\"changeStatus\", function() {\n        cm.ace.renderer.updateCursor();\n        cm.ace._signal(\"changeStatus\");\n      });\n      cm.on(\"vim-mode-change\", function() {\n        if (cm.virtualSelectionMode()) return;\n        updateInputMode();\n        cm._signal(\"changeStatus\");\n      });\n      function updateInputMode() {\n        var isIntsert = getVim(cm).insertMode;\n        cm.ace.renderer.setStyle(\"normal-mode\", !isIntsert);\n        editor.textInput.setCommandMode(!isIntsert);\n        editor.renderer.$keepTextAreaAtCursor = isIntsert;\n        editor.renderer.$blockCursor = !isIntsert;\n      }\n      updateInputMode();\n      editor.renderer.$cursorLayer.drawCursor = this.drawCursor.bind(cm);\n    },\n    detach: function(editor) {\n      var cm = editor.state.cm;\n      CodeMirror.keyMap.vim.detach(cm);\n      cm.destroy();\n      editor.state.cm = null;\n      editor.$vimModeHandler = null;\n      editor.renderer.$cursorLayer.drawCursor = null;\n      editor.renderer.setStyle(\"normal-mode\", false);\n      editor.textInput.setCommandMode(false);\n      editor.renderer.$keepTextAreaAtCursor = true;\n    },\n    getStatusText: function(editor) {\n      var cm = editor.state.cm;\n      var vim = getVim(cm);\n      if (vim.insertMode)\n        return \"INSERT\";\n      var status = \"\";\n      if (vim.visualMode) {\n        status += \"VISUAL\";\n        if (vim.visualLine)\n          status += \" LINE\";\n        if (vim.visualBlock)\n          status += \" BLOCK\";\n      }\n      if (vim.status)\n        status += (status ? \" \" : \"\") + vim.status;\n      return status;\n    }\n  };\n  Vim.defineOption({\n    name: \"wrap\",\n    set: function(value, cm) {\n      if (cm) {cm.ace.setOption(\"wrap\", value)}\n    },\n    type: \"boolean\"\n  }, false);\n  Vim.defineEx('write', 'w', function() {\n    console.log(':write is not implemented')\n  });\n  defaultKeymap.push(\n    { keys: 'zc', type: 'action', action: 'fold', actionArgs: { open: false } },\n    { keys: 'zC', type: 'action', action: 'fold', actionArgs: { open: false, all: true } },\n    { keys: 'zo', type: 'action', action: 'fold', actionArgs: { open: true } },\n    { keys: 'zO', type: 'action', action: 'fold', actionArgs: { open: true, all: true } },\n    { keys: 'za', type: 'action', action: 'fold', actionArgs: { toggle: true } },\n    { keys: 'zA', type: 'action', action: 'fold', actionArgs: { toggle: true, all: true } },\n    { keys: 'zf', type: 'action', action: 'fold', actionArgs: { open: true, all: true } },\n    { keys: 'zd', type: 'action', action: 'fold', actionArgs: { open: true, all: true } },\n    \n    { keys: '<C-A-k>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAbove\" } },\n    { keys: '<C-A-j>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelow\" } },\n    { keys: '<C-A-S-k>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAboveSkipCurrent\" } },\n    { keys: '<C-A-S-j>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelowSkipCurrent\" } },\n    { keys: '<C-A-h>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreBefore\" } },\n    { keys: '<C-A-l>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreAfter\" } },\n    { keys: '<C-A-S-h>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextBefore\" } },\n    { keys: '<C-A-S-l>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextAfter\" } }\n  );\n  actions.aceCommand = function(cm, actionArgs, vim) {\n    cm.vimCmd = actionArgs;\n    if (cm.ace.inVirtualSelectionMode)\n      cm.ace.on(\"beforeEndOperation\", delayedExecAceCommand);\n    else\n      delayedExecAceCommand(null, cm.ace);\n  };\n  function delayedExecAceCommand(op, ace) {\n    ace.off(\"beforeEndOperation\", delayedExecAceCommand);\n    var cmd = ace.state.cm.vimCmd;\n    if (cmd) {\n      ace.execCommand(cmd.exec ? cmd : cmd.name, cmd.args);\n    }\n    ace.curOp = ace.prevOp;\n  }\n  actions.fold = function(cm, actionArgs, vim) {\n    cm.ace.execCommand(['toggleFoldWidget', 'toggleFoldWidget', 'foldOther', 'unfoldall'\n      ][(actionArgs.all ? 2 : 0) + (actionArgs.open ? 1 : 0)]);\n  };\n\n  exports.handler.defaultKeymap = defaultKeymap;\n  exports.handler.actions = actions;\n  exports.Vim = Vim;\n  \n  Vim.map(\"Y\", \"yy\", \"normal\");\n});                (function() {\n                    window.require([\"ace/keyboard/vim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-abap.js",
    "content": "define(\"ace/mode/abap_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AbapHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \n            \"ADD ALIAS ALIASES ASCENDING ASSERT ASSIGN ASSIGNING AT BACK\" +\n            \" CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY\" +\n            \" DATA DEFINE DEFINITION DEFERRED DELETE DESCENDING DESCRIBE DETAIL DIVIDE DO\" +\n            \" ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT\" +\n            \" FETCH FIELDS FORM FORMAT FREE FROM FUNCTION\" +\n            \" GENERATE GET\" +\n            \" HIDE\" +\n            \" IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION\" +\n            \" LEAVE LIKE LINE LOAD LOCAL LOOP\" +\n            \" MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY\" +\n            \" ON OVERLAY OPTIONAL OTHERS\" +\n            \" PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT\" +\n            \" RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURN RETURNING ROLLBACK\" +\n            \" SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS\" +\n            \" TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES\" +\n            \" UNASSIGN ULINE UNPACK UPDATE\" +\n            \" WHEN WHILE WINDOW WRITE\" +\n            \" OCCURS STRUCTURE OBJECT PROPERTY\" +\n            \" CASTING APPEND RAISING VALUE COLOR\" +\n            \" CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT\" +\n            \" ID NUMBER FOR TITLE OUTPUT\" +\n            \" WITH EXIT USING\" +\n            \" INTO WHERE GROUP BY HAVING ORDER BY SINGLE\" +\n            \" APPENDING CORRESPONDING FIELDS OF TABLE\" +\n            \" LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING\" +\n            \" EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN\",\n        \"constant.language\": \n            \"TRUE FALSE NULL SPACE\",\n        \"support.type\": \n            \"c n i p f d t x string xstring decfloat16 decfloat34\",\n        \"keyword.operator\":\n            \"abs sign ceil floor trunc frac acos asin atan cos sin tan\" +\n            \" abapOperator cosh sinh tanh exp log log10 sqrt\" +\n            \" strlen xstrlen charlen numofchar dbmaxlen lines\" \n    }, \"text\", true, \" \");\n\n    var compoundKeywords = \"WITH\\\\W+(?:HEADER\\\\W+LINE|FRAME|KEY)|NO\\\\W+STANDARD\\\\W+PAGE\\\\W+HEADING|\"+\n        \"EXIT\\\\W+FROM\\\\W+STEP\\\\W+LOOP|BEGIN\\\\W+OF\\\\W+(?:BLOCK|LINE)|BEGIN\\\\W+OF|\"+\n        \"END\\\\W+OF\\\\W+(?:BLOCK|LINE)|END\\\\W+OF|NO\\\\W+INTERVALS|\"+\n        \"RESPECTING\\\\W+BLANKS|SEPARATED\\\\W+BY|USING\\\\W+(?:EDIT\\\\W+MASK)|\"+\n        \"WHERE\\\\W+(?:LINE)|RADIOBUTTON\\\\W+GROUP|REF\\\\W+TO|\"+\n        \"(?:PUBLIC|PRIVATE|PROTECTED)(?:\\\\W+SECTION)?|DELETING\\\\W+(?:TRAILING|LEADING)\"+\n        \"(?:ALL\\\\W+OCCURRENCES)|(?:FIRST|LAST)\\\\W+OCCURRENCE|INHERITING\\\\W+FROM|\"+\n        \"LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|\"+\n        \"CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|\"+\n        \"FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|\"+\n        \"NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|\"+\n        \"START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|\"+\n        \"TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|\"+\n        \"IS\\\\W+(?:NOT\\\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)\";\n     \n    this.$rules = {\n        \"start\" : [\n            {token : \"string\", regex : \"`\", next  : \"string\"},\n            {token : \"string\", regex : \"'\", next  : \"qstring\"},\n            {token : \"doc.comment\", regex : /^\\*.+/},\n            {token : \"comment\",  regex : /\".+$/},\n            {token : \"invalid\", regex: \"\\\\.{2,}\"},\n            {token : \"keyword.operator\", regex: /\\W[\\-+%=<>*]\\W|\\*\\*|[~:,\\.&$]|->*?|=>/},\n            {token : \"paren.lparen\", regex : \"[\\\\[({]\"},\n            {token : \"paren.rparen\", regex : \"[\\\\])}]\"},\n            {token : \"constant.numeric\", regex: \"[+-]?\\\\d+\\\\b\"},\n            {token : \"variable.parameter\", regex : /sy|pa?\\d\\d\\d\\d\\|t\\d\\d\\d\\.|innnn/}, \n            {token : \"keyword\", regex : compoundKeywords}, \n            {token : \"variable.parameter\", regex : /\\w+-\\w[\\-\\w]*/},\n            {token : keywordMapper, regex : \"\\\\b\\\\w+\\\\b\"},\n            {caseInsensitive: true}\n        ],\n        \"qstring\" : [\n            {token : \"constant.language.escape\",   regex : \"''\"},\n            {token : \"string\", regex : \"'\",     next  : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"string\" : [\n            {token : \"constant.language.escape\",   regex : \"``\"},\n            {token : \"string\", regex : \"`\",     next  : \"start\"},\n            {defaultToken : \"string\"}\n        ]\n    };\n};\noop.inherits(AbapHighlightRules, TextHighlightRules);\n\nexports.AbapHighlightRules = AbapHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/abap\",[\"require\",\"exports\",\"module\",\"ace/mode/abap_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./abap_highlight_rules\").AbapHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar oop = require(\"../lib/oop\");\n\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.foldingRules = new FoldMode();\n}\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.lineCommentStart = '\"';\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        return indent;\n    };    \n    \n    this.$id = \"ace/mode/abap\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-abc.js",
    "content": "define(\"ace/mode/abc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var ABCHighlightRules = function () {\n\n        this.$rules = {\n            start: [\n                {\n                    token: ['zupfnoter.information.comment.line.percentage', 'information.keyword', 'in formation.keyword.embedded'],\n                    regex: '(%%%%)(hn\\\\.[a-z]*)(.*)',\n                    comment: 'Instruction Comment'\n                },\n                {\n                    token: ['information.comment.line.percentage', 'information.keyword.embedded'],\n                    regex: '(%%)(.*)',\n                    comment: 'Instruction Comment'\n                },\n\n                {\n                    token: 'comment.line.percentage',\n                    regex: '%.*',\n                    comment: 'Comments'\n                },\n\n                {\n                    token: 'barline.keyword.operator',\n                    regex: '[\\\\[:]*[|:][|\\\\]:]*(?:\\\\[?[0-9]+)?|\\\\[[0-9]+',\n                    comment: 'Bar lines'\n                },\n                {\n                    token: ['information.keyword.embedded', 'information.argument.string.unquoted'],\n                    regex: '(\\\\[[A-Za-z]:)([^\\\\]]*\\\\])',\n                    comment: 'embedded Header lines'\n                },\n                {\n                    token: ['information.keyword', 'information.argument.string.unquoted'],\n                    regex: '^([A-Za-z]:)([^%\\\\\\\\]*)',\n                    comment: 'Header lines'\n                },\n                {\n                    token: ['text', 'entity.name.function', 'string.unquoted', 'text'],\n                    regex: '(\\\\[)([A-Z]:)(.*?)(\\\\])',\n                    comment: 'Inline fields'\n                },\n                {\n                    token: ['accent.constant.language', 'pitch.constant.numeric', 'duration.constant.numeric'],\n                    regex: '([\\\\^=_]*)([A-Ga-gz][,\\']*)([0-9]*/*[><0-9]*)',\n                    comment: 'Notes'\n                },\n                {\n                    token: 'zupfnoter.jumptarget.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\:.*?[\\\\\"!]',\n                    comment: 'Zupfnoter jumptarget'\n                }, {\n                    token: 'zupfnoter.goto.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\@.*?[\\\\\"!]',\n                    comment: 'Zupfnoter goto'\n                },\n                {\n                    token: 'zupfnoter.annotation.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\!.*?[\\\\\"!]',\n                    comment: 'Zupfnoter annoation'\n                },\n                {\n                    token: 'zupfnoter.annotationref.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\#.*?[\\\\\"!]',\n                    comment: 'Zupfnoter annotation reference'\n                },\n                {\n                    token: 'chordname.string.quoted',\n                    regex: '[\\\\\"!]\\\\^.*?[\\\\\"!]',\n                    comment: 'abc chord'\n                },\n                {\n                    token: 'string.quoted',\n                    regex: '[\\\\\"!].*?[\\\\\"!]',\n                    comment: 'abc annotation'\n                }\n\n            ]\n        };\n\n        this.normalizeRules();\n    };\n\n    ABCHighlightRules.metaData = {\n        fileTypes: ['abc'],\n        name: 'ABC',\n        scopeName: 'text.abcnotation'\n    };\n\n\n    oop.inherits(ABCHighlightRules, TextHighlightRules);\n\n    exports.ABCHighlightRules = ABCHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/abc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/abc_highlight_rules\",\"ace/mode/folding/cstyle\"], function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var ABCHighlightRules = require(\"./abc_highlight_rules\").ABCHighlightRules;\n    var FoldMode = require(\"./folding/cstyle\").FoldMode;\n\n    var Mode = function () {\n        this.HighlightRules = ABCHighlightRules;\n        this.foldingRules = new FoldMode();\n        this.$behaviour = this.$defaultBehaviour;\n    };\n    oop.inherits(Mode, TextMode);\n\n    (function () {\n        this.$id = \"ace/mode/abc\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-actionscript.js",
    "content": "define(\"ace/mode/actionscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ActionScriptHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'support.class.actionscript.2',\n           regex: '\\\\b(?:R(?:ecordset|DBMSResolver|adioButton(?:Group)?)|X(?:ML(?:Socket|Node|Connector)?|UpdateResolverDataHolder)|M(?:M(?:Save|Execute)|icrophoneMicrophone|o(?:use|vieClip(?:Loader)?)|e(?:nu(?:Bar)?|dia(?:Controller|Display|Playback))|ath)|B(?:yName|inding|utton)|S(?:haredObject|ystem|crollPane|t(?:yleSheet|age|ream)|ound|e(?:ndEvent|rviceObject)|OAPCall|lide)|N(?:umericStepper|et(?:stream|S(?:tream|ervices)|Connection|Debug(?:Config)?))|C(?:heckBox|o(?:ntextMenu(?:Item)?|okie|lor|m(?:ponentMixins|boBox))|ustomActions|lient|amera)|T(?:ypedValue|ext(?:Snapshot|Input|F(?:ield|ormat)|Area)|ree|AB)|Object|D(?:ownload|elta(?:Item|Packet)?|at(?:e(?:Chooser|Field)?|a(?:G(?:lue|rid)|Set|Type)))|U(?:RL|TC|IScrollBar)|P(?:opUpManager|endingCall|r(?:intJob|o(?:duct|gressBar)))|E(?:ndPoint|rror)|Video|Key|F(?:RadioButton|GridColumn|MessageBox|BarChart|S(?:croll(?:Bar|Pane)|tyleFormat|plitView)|orm|C(?:heckbox|omboBox|alendar)|unction|T(?:icker|ooltip(?:Lite)?|ree(?:Node)?)|IconButton|D(?:ataGrid|raggablePane)|P(?:ieChart|ushButton|ro(?:gressBar|mptBox))|L(?:i(?:stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(?:indow|SDLURL|ebService(?:Connector)?)|L(?:ist|o(?:calConnection|ad(?:er|Vars)|g)|a(?:unch|bel))|A(?:sBroadcaster|cc(?:ordion|essibility)|S(?:Set(?:Native|PropFlags)|N(?:ew|ative)|C(?:onstructor|lamp(?:2)?)|InstanceOf)|pplication|lert|rray))\\\\b' },\n         { token: 'support.function.actionscript.2',\n           regex: '\\\\b(?:s(?:h(?:ift|ow(?:GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(?:ow|ePane))|c(?:hema|ale(?:X|Mode|Y|Content)|r(?:oll(?:Track|Drag)?|een(?:Resolution|Color|DPI)))|t(?:yleSheet|op(?:Drag|A(?:nimation|llSounds|gent))?|epSize|a(?:tus|rt(?:Drag|A(?:nimation|gent))?))|i(?:n|ze|lence(?:TimeOut|Level))|o(?:ngname|urce|rt(?:Items(?:By)?|On(?:HeaderRelease)?|able(?:Columns)?)?)|u(?:ppressInvalidCalls|bstr(?:ing)?)|p(?:li(?:ce|t)|aceCol(?:umnsEqually|lumnsEqually))|e(?:nd(?:DefaultPushButtonEvent|AndLoad)?|curity|t(?:R(?:GB|o(?:otNode|w(?:Height|Count))|esizable(?:Columns)?|a(?:nge|te))|G(?:ain|roupName)|X(?:AxisTitle)?|M(?:i(?:n(?:imum|utes)|lliseconds)|o(?:nth(?:Names)?|tionLevel|de)|ultilineMode|e(?:ssage|nu(?:ItemEnabled(?:At)?|EnabledAt)|dia)|a(?:sk|ximum))|B(?:u(?:tton(?:s|Width)|fferTime)|a(?:seTabIndex|ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Target|P(?:osition|roperties)|barState|Location)|t(?:yle(?:Property)?|opOnFocus|at(?:us|e))|i(?:ze|lenceLevel)|ort(?:able(?:Columns)?|Function)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)?|Style|Color|ed(?:Node(?:s)?|Cell|I(?:nd(?:ices|ex)|tem(?:s)?))?|able))|kin|m(?:oothness|allScroll))|H(?:ighlight(?:s|Color)|Scroll|o(?:urs|rizontal)|eader(?:Symbol|Height|Text|Property|Format|Width|Location)?|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:ode(?:Properties|ExpansionHandler)|ewTextFormat)|C(?:h(?:ildNodes|a(?:ngeHandler|rt(?:Title|EventHandler)))|o(?:ntent(?:Size)?|okie|lumns)|ell(?:Symbol|Data)|l(?:i(?:ckHandler|pboard)|oseHandler)|redentials)|T(?:ype(?:dVaule)?|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:out(?:Handler)?)?)|oggle|extFormat|ransform)|I(?:s(?:Branch|Open)|n(?:terval|putProperty)|con(?:SymbolName)?|te(?:rator|m(?:ByKey|Symbol)))|Orientation|D(?:i(?:splay(?:Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(?:pth(?:Below|To|Above)|fault(?:GatewayURL|Mappings|NodeIconSymbolName)|l(?:iveryMode|ay)|bug(?:ID)?)|a(?:yOfWeekNames|t(?:e(?:Filter)?|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Provider|All(?:Height|Property|Format|Width))?))|ra(?:wConnectors|gContent))|U(?:se(?:Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(?:osition|ercentComplete|an(?:e(?:M(?:inimumSize|aximumSize)|Size|Title))?|ro(?:pert(?:y(?:Data)?|iesAt)|gress))|E(?:nabled|dit(?:Handler|able)|xpand(?:NodeTrigger|erSymbolName))|V(?:Scroll|olume|alue(?:Source)?)|KeyFrameInterval|Quality|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:opback|adTarget)|a(?:rgeScroll|bel(?:Source|Placement)?))|A(?:s(?:Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:e(?:State(?:Handler)?|Handler)|ateHandler)|utoH(?:ideScrollBar|eight)))?|paratorBefore|ek|lect(?:ion(?:Disabled|Unfocused)?|ed(?:Node(?:s)?|Child|I(?:nd(?:ices|ex)|tem(?:s)?)|Dat(?:e|a))?|able(?:Ranges)?)|rver(?:String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(?:scroll(?:Policy)?|tml(?:Text)?|i(?:t(?:Test(?:TextNearPos)?|Area)|de(?:BuiltInItems|Child)?|ghlight(?:2D|3D)?)|orizontal|e(?:ight|ader(?:Re(?:nderer|lease)|Height|Text))|P(?:osition|ageScrollSize)|a(?:s(?:childNodes|MP3|S(?:creen(?:Broadcast|Playback)|treaming(?:Video|Audio)|ort)|Next|OwnProperty|Pr(?:inting|evious)|EmbeddedVideo|VideoEncoder|A(?:ccesibility|udio(?:Encoder)?))|ndlerName)|LineScrollSize)|ye(?:sLabel|ar)|n(?:o(?:t|de(?:Name|Close|Type|Open|Value)|Label)|u(?:llValue|mChild(?:S(?:creens|lides)|ren|Forms))|e(?:w(?:Item|line|Value|LocationDialog)|xt(?:S(?:cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(?:s)?)|c(?:h(?:ildNodes|eck|a(?:nge(?:sPending)?|r(?:CodeAt|At))|r)|o(?:s|n(?:st(?:ant|ructor)|nect|c(?:urrency|at)|t(?:ent(?:Type|Path)?|ains|rol(?:Placement|lerPolicy))|denseWhite|version)|py|l(?:or|umn(?:Stretch|Name(?:s)?|Count))|m(?:p(?:onent|lete)|ment))|u(?:stomItems|ePoint(?:s)?|r(?:veTo|Value|rent(?:Slide|ChildSlide|Item|F(?:ocused(?:S(?:creen|lide)|Form)|ps))))|e(?:il|ll(?:Renderer|Press|Edit|Focus(?:In|Out)))|l(?:i(?:ck|ents)|o(?:se(?:Button|Pane)?|ne(?:Node)?)|ear(?:S(?:haredObjects|treams)|Timeout|Interval)?)|a(?:ncelLabel|tch|p(?:tion|abilities)|l(?:cFields|l(?:e(?:e|r))?))|reate(?:GatewayConnection|Menu|Se(?:rver|gment)|C(?:hild(?:AtDepth)?|l(?:ient|ass(?:ChildAtDepth|Object(?:AtDepth)?))|all)|Text(?:Node|Field)|Item|Object(?:AtDepth)?|PopUp|E(?:lement|mptyMovieClip)))|t(?:h(?:is|row)|ype(?:of|Name)?|i(?:tle(?:StyleDeclaration)?|me(?:out)?)|o(?:talTime|String|olTipText|p|UpperCase|ggle(?:HighQuality)?|Lo(?:caleString|werCase))|e(?:st|llTarget|xt(?:RightMargin|Bold|S(?:ize|elected)|Height|Color|I(?:ndent|talic)|Disabled|Underline|F(?:ield|ont)|Width|LeftMargin|Align)?)|a(?:n|rget(?:Path)?|b(?:Stops|Children|Index|Enabled|leName))|r(?:y|igger|ac(?:e|k(?:AsMenu)?)))|i(?:s(?:Running|Branch|NaN|Con(?:soleOpen|nected)|Toggled|Installed|Open|D(?:own|ebugger)|P(?:urchased|ro(?:totypeOf|pertyEnumerable))|Empty|F(?:inite|ullyPopulated)|Local|Active)|n(?:s(?:tall|ertBefore)|cludeDeltaPacketInfo|t|it(?:ialize|Component|Pod|A(?:pplication|gent))?|de(?:nt|terminate|x(?:InParent(?:Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(?:F(?:ield|unction))?|t(?:e(?:ratorScrolled|m(?:s|RollO(?:ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(?:Case|White))|o(?:s|n(?:R(?:ollO(?:ut|ver)|e(?:s(?:ize|ult)|l(?:ease(?:Outside)?|aseOutside)))|XML|Mouse(?:Move|Down|Up|Wheel)|S(?:ync|croller|tatus|oundComplete|e(?:tFocus|lect(?:edItem)?))|N(?:oticeEvent|etworkChange)|C(?:hanged|onnect|l(?:ipEvent|ose))|ID3|D(?:isconnect|eactivate|ata|ragO(?:ut|ver))|Un(?:install|load)|P(?:aymentResult|ress)|EnterFrame|K(?:illFocus|ey(?:Down|Up))|Fault|Lo(?:ad|g)|A(?:ctiv(?:ity|ate)|ppSt(?:op|art)))?|pe(?:n|ration)|verLayChildren|kLabel|ldValue|r(?:d)?)|d(?:i(?:s(?:connect|play(?:Normal|ed(?:Month|Year)|Full)|able(?:Shader|d(?:Ranges|Days)|CloseBox|Events))|rection)|o(?:cTypeDecl|tall|Decoding|main|LazyDecoding)|u(?:plicateMovieClip|ration)|e(?:stroy(?:ChildAt|Object)|code|fault(?:PushButton(?:Enabled)?|KeydownHandler)?|l(?:ta(?:Packet(?:Changed)?)?|ete(?:PopUp|All)?)|blocking)|a(?:shBoardSave|yNames|ta(?:Provider)?|rkshadow)|r(?:opdown(?:Width)?|a(?:w|gO(?:ut|ver))))|u(?:se(?:Sort|HandCursor|Codepage|EchoSuppression)|n(?:shift|install|derline|escape|format|watch|lo(?:ck|ad(?:Movie(?:Num)?)?))|pdate(?:Results|Mode|I(?:nputProperties|tem(?:ByIndex)?)|P(?:acket|roperties)|View|AfterEvent)|rl)|join|p(?:ixelAspectRatio|o(?:sition|p|w)|u(?:sh|rge|blish)|ercen(?:tComplete|Loaded)|lay(?:head(?:Change|Time)|ing|Hidden|erType)?|a(?:ssword|use|r(?:se(?:XML|CSS|Int|Float)|ent(?:Node|Is(?:S(?:creen|lide)|Form))|ams))|r(?:int(?:Num|AsBitmap(?:Num)?)?|o(?:to(?:type)?|pert(?:y|ies)|gress)|e(?:ss|v(?:ious(?:S(?:ibling|lide)|Value)?|Scene|Frame)|ferred(?:Height|Width))))|e(?:scape|n(?:code(?:r)?|ter(?:Frame)?|dFill|able(?:Shader|d|CloseBox|Events))|dit(?:able|Field|LocationDialog)|v(?:ent|al(?:uate)?)|q|x(?:tended|p|ec(?:ute)?|actSettings)|m(?:phasized(?:StyleDeclaration)?|bedFonts))|v(?:i(?:sible|ewPod)|ScrollPolicy|o(?:id|lume)|ersion|P(?:osition|ageScrollSize)|a(?:l(?:idat(?:ionError|e(?:Property|ActivationKey)?)|ue(?:Of)?)|riable)|LineScrollSize)|k(?:ind|ey(?:Down|Up|Press|FrameInterval))|q(?:sort|uality)|f(?:scommand|i(?:n(?:d(?:Text|First|Last)?|ally)|eldInfo|lter(?:ed|Func)?|rst(?:Slide|Child|DayOfWeek|VisibleNode)?)|o(?:nt|cus(?:In|edCell|Out|Enabled)|r(?:egroundDisabled|mat(?:ter)?))|unctionName|ps|l(?:oor|ush)|ace|romCharCode)|w(?:i(?:th|dth)|ordWrap|atch|riteAccess)|l(?:t|i(?:st(?:Owner)?|ne(?:Style|To))|o(?:c(?:k|a(?:t(?:ion|eByld)|l(?:ToGlobal|FileReadDisable)))|opback|ad(?:Movie(?:Num)?|S(?:crollContent|ound)|ed|Variables(?:Num)?|Application)?|g(?:Changes)?)|e(?:ngth|ft(?:Margin)?|ading)?|a(?:st(?:Slide|Child|Index(?:Of)?)?|nguage|b(?:el(?:Placement|F(?:ield|unction))?|leField)))|a(?:s(?:scociate(?:Controller|Display)|in|pectRatio|function)|nd|c(?:ceptConnection|tiv(?:ityLevel|ePlayControl)|os)|t(?:t(?:ach(?:Movie|Sound|Video|Audio)|ributes)|an(?:2)?)|dd(?:header|RequestHeader|Menu(?:Item(?:At)?|At)?|Sort|Header|No(?:tice|de(?:At)?)|C(?:olumn(?:At)?|uePoint)|T(?:oLocalInternetCache|reeNode(?:At)?)|I(?:con|tem(?:s(?:At)?|At)?)|DeltaItem|P(?:od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(?:Size|Play|KeyNav|Load)|pp(?:endChild|ly(?:Changes|Updates)?)|vHardwareDisable|fterLoaded|l(?:ternateRowColors|ign|l(?:ow(?:InsecureDomain|Domain)|Transitions(?:InDone|OutDone))|bum)|r(?:tist|row|g(?:uments|List))|gent|bs)|r(?:ight(?:Margin)?|o(?:ot(?:S(?:creen|lide)|Form)|und|w(?:Height|Count)|llO(?:ut|ver))|e(?:s(?:yncDepth|t(?:orePane|artAnimation|rict)|iz(?:e|able(?:Columns)?)|olveDelta|ult(?:s)?|ponse)|c(?:o(?:ncile(?:Results|Updates)|rd)|eive(?:Video|Audio))|draw|jectConnection|place(?:Sel|ItemAt|AllItems)?|ve(?:al(?:Child)?|rse)|quest(?:SizeChange|Payment)?|f(?:errer|resh(?:ScrollContent|Destinations|Pane|FromSources)?)|lease(?:Outside)?|ad(?:Only|Access)|gister(?:SkinElement|C(?:olor(?:Style|Name)|lass)|InheritingStyle|Proxy)|move(?:Range|M(?:ovieClip|enu(?:Item(?:At)?|At))|Background|Sort|No(?:tice|de(?:sAt|At)?)|C(?:olum(?:nAt|At)|uePoints)|T(?:extField|reeNode(?:At)?)|Item(?:At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(?:C(?:olumns|uePoints)|Items)?))|a(?:ndom|te|dioDot))|g(?:t|oto(?:Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(?:Stop|Play))|e(?:nre|t(?:R(?:GB|o(?:otNode|wCount)|e(?:sizable|mote))|X(?:AxisTitle)?|M(?:i(?:n(?:imum(?:Size)?|utes)|lliseconds)|onth(?:Names)?|ultilineMode|e(?:ssage|nu(?:ItemAt|EnabledAt|At))|aximum(?:Size)?)|B(?:ytes(?:Total|Loaded)|ounds|utton(?:s|Width)|eginIndex|a(?:ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Position|barState|Location)|t(?:yle(?:Names)?|opOnFocus|ate)|ize|o(?:urce|rtState)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)|Style|ed(?:Node(?:s)?|Cell|Text|I(?:nd(?:ices|ex)|tem(?:s)?))?)|rvice)|moothness|WFVersion)|H(?:ighlight(?:s|Color)|ours|e(?:ight|ader(?:Height|Text|Property|Format|Width|Location)?)|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:o(?:tices|de(?:DisplayedAt|At))|um(?:Children|berAvailable)|e(?:wTextFormat|xtHighestDepth))|C(?:h(?:ild(?:S(?:creen|lide)|Nodes|Form|At)|artTitle)|o(?:n(?:tent|figInfo)|okie|de|unt|lumn(?:Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(?:ll|retIndex))|T(?:ypedValue|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:stamp|zoneOffset|out(?:State|Handler)|r)?)|oggle|ext(?:Extent|Format)?|r(?:ee(?:NodeAt|Length)|ans(?:form|actionId)))|I(?:s(?:Branch|Open)|n(?:stanceAtDepth|d(?:icesByKey|exByKey))|con(?:SymbolName)?|te(?:rator|m(?:sByKey|By(?:Name|Key)|id|ID|At))|d)|O(?:utput(?:Parameter(?:s|ByName)?|Value(?:s)?)|peration|ri(?:entation|ginalCellData))|D(?:i(?:s(?:play(?:Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(?:pth|faultNodeIconSymbolName|l(?:taPacket|ay)|bug(?:Config|ID)?)|a(?:y(?:OfWeekNames)?|t(?:e|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Label|All(?:Height|Property|Format|Width))?))|rawConnectors)|U(?:se(?:Shadow|HandCursor|rInput|Fade)|RL|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear))|P(?:o(?:sition|ds)|ercentComplete|a(?:n(?:e(?:M(?:inimums|aximums)|Height|Title|Width))?|rentNode)|r(?:operty(?:Name|Data)?|efer(?:ences|red(?:Height|Width))))|E(?:n(?:dIndex|abled)|ditingData|x(?:panderSymbolName|andNodeTrigger))|V(?:iewed(?:Pods|Applications)|olume|ersion|alue(?:Source)?)|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|o(?:ntList|cus)|ullYear|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:cal|adTarget)|ength|a(?:stTabIndex|bel(?:Source)?))|A(?:s(?:cii|Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:eState(?:Handler)?|ateHandler)|utoH(?:ideScrollBar|eight)|llItems|gent))?)?|lobal(?:StyleFormat|ToLocal)?|ain|roupName)|x(?:updatePackety|mlDecl)?|m(?:y(?:MethodName|Call)|in(?:imum)?|o(?:nthNames|tion(?:TimeOut|Level)|de(?:lChanged)?|use(?:Move|O(?:ut|ver)|Down(?:Somewhere|Outside)?|Up(?:Somewhere)?|WheelEnabled)|ve(?:To)?)|u(?:ted|lti(?:pleS(?:imultaneousAllowed|elections)|line))|e(?:ssage|nu(?:Show|Hide)?|th(?:od)?|diaType)|a(?:nufacturer|tch|x(?:scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(?:substring|chr|ord|length))|b(?:ytes(?:Total|Loaded)|indFormat(?:Strings|Function)|o(?:ttom(?:Scroll)?|ld|rder(?:Color)?)|u(?:tton(?:Height|Width)|iltInItems|ffer(?:Time|Length)|llet)|e(?:foreApplyUpdates|gin(?:GradientFill|Fill))|lockIndent|a(?:ndwidth|ckground(?:Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\\\\b' },\n         { token: 'support.constant.actionscript.2',\n           regex: '\\\\b(?:__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\\\\b' },\n         { token: 'keyword.control.actionscript.2',\n           regex: '\\\\b(?:dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\\\\b' },\n         { token: 'storage.type.actionscript.2',\n           regex: '\\\\b(?:Boolean|Number|String|Void)\\\\b' },\n         { token: 'constant.language.actionscript.2',\n           regex: '\\\\b(?:null|undefined|true|false)\\\\b' },\n         { token: 'constant.numeric.actionscript.2',\n           regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b' },\n         { token: 'punctuation.definition.string.begin.actionscript.2',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.actionscript.2',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.actionscript.2',\n                regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.double.actionscript.2' } ] },\n         { token: 'punctuation.definition.string.begin.actionscript.2',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.actionscript.2',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.actionscript.2',\n                regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.single.actionscript.2' } ] },\n         { token: 'support.constant.actionscript.2',\n           regex: '\\\\b(?:BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\\\\b' },\n         { token: 'punctuation.definition.comment.actionscript.2',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.actionscript.2',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.actionscript.2' } ] },\n         { token: 'punctuation.definition.comment.actionscript.2',\n           regex: '//.*$',\n           push_: \n            [ { token: 'comment.line.double-slash.actionscript.2',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-slash.actionscript.2' } ] },\n         { token: 'keyword.operator.actionscript.2',\n           regex: '\\\\binstanceof\\\\b' },\n         { token: 'keyword.operator.symbolic.actionscript.2',\n           regex: '[-!%&*+=/?:]' },\n         { token: \n            [ 'meta.preprocessor.actionscript.2',\n              'punctuation.definition.preprocessor.actionscript.2',\n              'meta.preprocessor.actionscript.2' ],\n           regex: '^([ \\\\t]*)(#)([a-zA-Z]+)' },\n         { token: \n            [ 'storage.type.function.actionscript.2',\n              'meta.function.actionscript.2',\n              'entity.name.function.actionscript.2',\n              'meta.function.actionscript.2',\n              'punctuation.definition.parameters.begin.actionscript.2' ],\n           regex: '\\\\b(function)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()',\n           push: \n            [ { token: 'punctuation.definition.parameters.end.actionscript.2',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: 'variable.parameter.function.actionscript.2',\n                regex: '[^,)$]+' },\n              { defaultToken: 'meta.function.actionscript.2' } ] },\n         { token: \n            [ 'storage.type.class.actionscript.2',\n              'meta.class.actionscript.2',\n              'entity.name.type.class.actionscript.2',\n              'meta.class.actionscript.2',\n              'storage.modifier.extends.actionscript.2',\n              'meta.class.actionscript.2',\n              'entity.other.inherited-class.actionscript.2' ],\n           regex: '\\\\b(class)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*)(?:(\\\\s+)(extends)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*))?' } ] };\n    \n    this.normalizeRules();\n};\n\nActionScriptHighlightRules.metaData = { fileTypes: [ 'as' ],\n      keyEquivalent: '^~A',\n      name: 'ActionScript',\n      scopeName: 'source.actionscript.2' };\n\n\noop.inherits(ActionScriptHighlightRules, TextHighlightRules);\n\nexports.ActionScriptHighlightRules = ActionScriptHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/actionscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/actionscript_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ActionScriptHighlightRules = require(\"./actionscript_highlight_rules\").ActionScriptHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ActionScriptHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/actionscript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-ada.js",
    "content": "define(\"ace/mode/ada_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AdaHighlightRules = function() {\nvar keywords = \"abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|\" +\n\"access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|\" +\n\"array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|\" +\n\"body|private|then|if|procedure|type|case|in|protected|constant|interface|until|\" +\n\"|is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor\";\n\n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n    var builtinFunctions = (\n        \"count|min|max|avg|sum|rank|now|coalesce|main\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"--.*$\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // character\n            regex : \"'.'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n};\n\noop.inherits(AdaHighlightRules, TextHighlightRules);\n\nexports.AdaHighlightRules = AdaHighlightRules;\n});\n\ndefine(\"ace/mode/ada\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ada_highlight_rules\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AdaHighlightRules = require(\"./ada_highlight_rules\").AdaHighlightRules;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = AdaHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*(begin|loop|then|is|do)\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        var complete_line = line + input;\n        if (complete_line.match(/^\\s*(begin|end)$/)) {\n            return true;\n        }\n\n        return false;\n    };\n\n    this.autoOutdent = function(state, session, row) {\n\n        var line = session.getLine(row);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine).length;\n        var indent = this.$getIndent(line).length;\n        if (indent <= prevIndent) {\n            return;\n        }\n\n        session.outdentRows(new Range(row, 0, row + 2, 0));\n    };\n\n\n    this.$id = \"ace/mode/ada\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-apache_conf.js",
    "content": "define(\"ace/mode/apache_conf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ApacheConfHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: \n            [ 'punctuation.definition.comment.apacheconf',\n              'comment.line.hash.ini',\n              'comment.line.hash.ini' ],\n           regex: '^((?:\\\\s)*)(#)(.*$)' },\n         { token: \n            [ 'punctuation.definition.tag.apacheconf',\n              'entity.tag.apacheconf',\n              'text',\n              'string.value.apacheconf',\n              'punctuation.definition.tag.apacheconf' ],\n           regex: '(<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(?:(\\\\s)(.+?))?(>)' },\n         { token: \n            [ 'punctuation.definition.tag.apacheconf',\n              'entity.tag.apacheconf',\n              'punctuation.definition.tag.apacheconf' ],\n           regex: '(</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(>)' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'string.regexp.apacheconf', 'text',\n              'string.replacement.apacheconf', 'text' ],\n           regex: '(Rewrite(?:Rule|Cond))(\\\\s+)(.+?)(\\\\s+)(.+?)($|\\\\s)' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'entity.status.apacheconf', 'text',\n              'string.regexp.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(RedirectMatch)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text', \n              'entity.status.apacheconf', 'text',\n              'string.path.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(Redirect)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'string.regexp.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(ScriptAliasMatch|AliasMatch)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)(\\\\s))?' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'string.path.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n         { token: 'keyword.core.apacheconf',\n           regex: '\\\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\\\b' },\n         { token: 'keyword.mpm.apacheconf',\n           regex: '\\\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\\\b' },\n         { token: 'keyword.access.apacheconf',\n           regex: '\\\\b(?:Allow|Deny|Order)\\\\b' },\n         { token: 'keyword.actions.apacheconf',\n           regex: '\\\\b(?:Action|Script)\\\\b' },\n         { token: 'keyword.alias.apacheconf',\n           regex: '\\\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\\\b' },\n         { token: 'keyword.auth.apacheconf',\n           regex: '\\\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\\\b' },\n         { token: 'keyword.auth_anon.apacheconf',\n           regex: '\\\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\\\b' },\n         { token: 'keyword.auth_dbm.apacheconf',\n           regex: '\\\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\\\b' },\n         { token: 'keyword.auth_digest.apacheconf',\n           regex: '\\\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\\\b' },\n         { token: 'keyword.auth_ldap.apacheconf',\n           regex: '\\\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\\\b' },\n         { token: 'keyword.autoindex.apacheconf',\n           regex: '\\\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\\\b' },\n         { token: 'keyword.cache.apacheconf',\n           regex: '\\\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\\\b' },\n         { token: 'keyword.cern_meta.apacheconf',\n           regex: '\\\\b(?:MetaDir|MetaFiles|MetaSuffix)\\\\b' },\n         { token: 'keyword.cgi.apacheconf',\n           regex: '\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\\\b' },\n         { token: 'keyword.cgid.apacheconf',\n           regex: '\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\\\b' },\n         { token: 'keyword.charset_lite.apacheconf',\n           regex: '\\\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\\\b' },\n         { token: 'keyword.dav.apacheconf',\n           regex: '\\\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\\\b' },\n         { token: 'keyword.deflate.apacheconf',\n           regex: '\\\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\\\b' },\n         { token: 'keyword.dir.apacheconf',\n           regex: '\\\\b(?:DirectoryIndex|DirectorySlash)\\\\b' },\n         { token: 'keyword.disk_cache.apacheconf',\n           regex: '\\\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\\\b' },\n         { token: 'keyword.dumpio.apacheconf',\n           regex: '\\\\b(?:DumpIOInput|DumpIOOutput)\\\\b' },\n         { token: 'keyword.env.apacheconf',\n           regex: '\\\\b(?:PassEnv|SetEnv|UnsetEnv)\\\\b' },\n         { token: 'keyword.expires.apacheconf',\n           regex: '\\\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\\\b' },\n         { token: 'keyword.ext_filter.apacheconf',\n           regex: '\\\\b(?:ExtFilterDefine|ExtFilterOptions)\\\\b' },\n         { token: 'keyword.file_cache.apacheconf',\n           regex: '\\\\b(?:CacheFile|MMapFile)\\\\b' },\n         { token: 'keyword.headers.apacheconf',\n           regex: '\\\\b(?:Header|RequestHeader)\\\\b' },\n         { token: 'keyword.imap.apacheconf',\n           regex: '\\\\b(?:ImapBase|ImapDefault|ImapMenu)\\\\b' },\n         { token: 'keyword.include.apacheconf',\n           regex: '\\\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\\\b' },\n         { token: 'keyword.isapi.apacheconf',\n           regex: '\\\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\\\b' },\n         { token: 'keyword.ldap.apacheconf',\n           regex: '\\\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\\\b' },\n         { token: 'keyword.log.apacheconf',\n           regex: '\\\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\\\b' },\n         { token: 'keyword.mem_cache.apacheconf',\n           regex: '\\\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\\\b' },\n         { token: 'keyword.mime.apacheconf',\n           regex: '\\\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\\\b' },\n         { token: 'keyword.misc.apacheconf',\n           regex: '\\\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\\\b' },\n         { token: 'keyword.negotiation.apacheconf',\n           regex: '\\\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\\\b' },\n         { token: 'keyword.nw_ssl.apacheconf',\n           regex: '\\\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\\\b' },\n         { token: 'keyword.proxy.apacheconf',\n           regex: '\\\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\\\b' },\n         { token: 'keyword.rewrite.apacheconf',\n           regex: '\\\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\\\b' },\n         { token: 'keyword.setenvif.apacheconf',\n           regex: '\\\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\\\b' },\n         { token: 'keyword.so.apacheconf',\n           regex: '\\\\b(?:LoadFile|LoadModule)\\\\b' },\n         { token: 'keyword.ssl.apacheconf',\n           regex: '\\\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\\\b' },\n         { token: 'keyword.usertrack.apacheconf',\n           regex: '\\\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\\\b' },\n         { token: 'keyword.vhost_alias.apacheconf',\n           regex: '\\\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\\\b' },\n         { token: \n            [ 'keyword.php.apacheconf',\n              'text',\n              'entity.property.apacheconf',\n              'text',\n              'string.value.apacheconf',\n              'text' ],\n           regex: '\\\\b(php_value|php_flag)\\\\b(?:(\\\\s+)(.+?)(?:(\\\\s+)(.+?))?)?(\\\\s)' },\n         { token: \n            [ 'punctuation.variable.apacheconf',\n              'variable.env.apacheconf',\n              'variable.misc.apacheconf',\n              'punctuation.variable.apacheconf' ],\n           regex: '(%\\\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\\\})' },\n         { token: [ 'entity.mime-type.apacheconf', 'text' ],\n           regex: '\\\\b((?:text|image|application|video|audio)/.+?)(\\\\s)' },\n         { token: 'entity.helper.apacheconf',\n           regex: '\\\\b(?:from|unset|set|on|off)\\\\b',\n           caseInsensitive: true },\n         { token: 'constant.integer.apacheconf', regex: '\\\\b\\\\d+\\\\b' },\n         { token: \n            [ 'text',\n              'punctuation.definition.flag.apacheconf',\n              'string.flag.apacheconf',\n              'punctuation.definition.flag.apacheconf',\n              'text' ],\n           regex: '(\\\\s)(\\\\[)(.*?)(\\\\])(\\\\s)' } ] };\n    \n    this.normalizeRules();\n};\n\nApacheConfHighlightRules.metaData = { fileTypes: \n       [ 'conf',\n         'CONF',\n         'htaccess',\n         'HTACCESS',\n         'htgroups',\n         'HTGROUPS',\n         'htpasswd',\n         'HTPASSWD',\n         '.htaccess',\n         '.HTACCESS',\n         '.htgroups',\n         '.HTGROUPS',\n         '.htpasswd',\n         '.HTPASSWD' ],\n      name: 'Apache Conf',\n      scopeName: 'source.apacheconf' };\n\n\noop.inherits(ApacheConfHighlightRules, TextHighlightRules);\n\nexports.ApacheConfHighlightRules = ApacheConfHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/apache_conf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apache_conf_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ApacheConfHighlightRules = require(\"./apache_conf_highlight_rules\").ApacheConfHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ApacheConfHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/apache_conf\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-apex.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/apex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"../mode/text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = require(\"../mode/doc_comment_highlight_rules\").DocCommentHighlightRules;\n\nvar ApexHighlightRules = function() {\n    var mainKeywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"activate|any|autonomous|begin|bigdecimal|byte|cast|char|collect|const\"\n             + \"|end|exit|export|float|goto|group|having|hint|import|inner|into|join|loop|number|object|of|outer\"\n             + \"|parallel|pragma|retrieve|returning|search|short|stat|synchronized|then|this_month\"\n             + \"|transaction|type|when\",\n        \"keyword\": \"private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final\"\n             + \"|and|array|as|asc|break|bulk|by|catch|class|commit|continue|convertcurrency\"\n             + \"|delete|desc|do|else|enum|extends|false|final|finally|for|from|future|global\"\n             + \"|if|implements|in|insert|instanceof|interface|last_90_days|last_month\"\n             + \"|last_n_days|last_week|like|limit|list|map|merge|new|next_90_days|next_month|next_n_days\"\n             + \"|next_week|not|null|nulls|on|or|override|package|return\"\n             + \"|rollback|savepoint|select|set|sort|super|testmethod|this|this_week|throw|today\"\n             + \"|tolabel|tomorrow|trigger|true|try|undelete|update|upsert|using|virtual|webservice\"\n             + \"|where|while|yesterday|switch|case|default\",\n        \"storage.type\":\n            \"def|boolean|byte|char|short|int|float|pblob|date|datetime|decimal|double|id|integer|long|string|time|void|blob|Object\",\n        \"constant.language\":\n            \"true|false|null|after|before|count|excludes|first|includes|last|order|sharing|with\",\n        \"support.function\":\n            \"system|apex|label|apexpages|userinfo|schema\"\n    }, \"identifier\", true);\n    function keywordMapper(value) {\n        if (value.slice(-3) == \"__c\") return \"support.function\";\n        return mainKeywordMapper(value);\n    }\n    \n    function string(start, options) {\n        return {\n            regex: start + (options.multiline ? \"\" : \"(?=.)\"),\n            token: \"string.start\",\n            next: [{\n                regex: options.escape,\n                token: \"character.escape\"\n            }, {\n                regex: options.error,\n                token: \"error.invalid\"\n            }, {\n                regex: start + (options.multiline ? \"\" : \"|$\"),\n                token: \"string.end\",\n                next: options.next || \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        };\n    }\n    \n    function comments() {\n        return [{\n                token : \"comment\",\n                regex : \"\\\\/\\\\/(?=.)\",\n                next : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment\", regex : \"$|^\", next : \"start\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : /\\/\\*/,\n                next : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment\", regex : \"\\\\*\\\\/\", next : \"start\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            }\n        ];\n    }\n    \n    this.$rules = {\n        start: [\n            string(\"'\", {\n                escape: /\\\\[nb'\"\\\\]/,\n                error: /\\\\./,\n                multiline: false\n            }),\n            comments(\"c\"),\n            {\n                type: \"decoration\",\n                token: [\n                    \"meta.package.apex\",\n                    \"keyword.other.package.apex\",\n                    \"meta.package.apex\",\n                    \"storage.modifier.package.apex\",\n                    \"meta.package.apex\",\n                    \"punctuation.terminator.apex\"\n                ],\n                regex: /^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*)((?:;)?))?/\n            }, {\n                 regex: /@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                 token: \"constant.language\"\n            },\n            {\n                regex: /[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                token: keywordMapper\n            },  \n            {\n                regex: \"`#%\",\n                token: \"error.invalid\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d+(?:(?:\\.\\d*)?(?:[LlDdEe][+-]?\\d+)?)\\b|\\.\\d+[LlDdEe]/\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[]/,\n                next  : \"maybe_soql\",\n                merge : false\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\",\n                merge : false\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/,\n                merge : false\n            } \n        ], \n        maybe_soql: [{\n            regex: /\\s+/,\n            token: \"text\"\n        }, {\n            regex: /(SELECT|FIND)\\b/,\n            token: \"keyword\",\n            caseInsensitive: true,\n            next: \"soql\"\n        }, {\n            regex: \"\",\n            token: \"none\",\n            next: \"start\"\n        }],\n        soql: [{\n            regex: \"(:?ASC|BY|CATEGORY|CUBE|DATA|DESC|END|FIND|FIRST|FOR|FROM|GROUP|HAVING|IN|LAST\"\n                + \"|LIMIT|NETWORK|NULLS|OFFSET|ORDER|REFERENCE|RETURNING|ROLLUP|SCOPE|SELECT\"\n                + \"|SNIPPET|TRACKING|TYPEOF|UPDATE|USING|VIEW|VIEWSTAT|WHERE|WITH|AND|OR)\\\\b\",\n            token: \"keyword\",\n            caseInsensitive: true\n        }, {\n            regex: \"(:?target_length|toLabel|convertCurrency|count|Contact|Account|User|FIELDS)\\\\b\",\n            token: \"support.function\",\n            caseInsensitive: true\n        }, {\n            token : \"paren.rparen\",\n            regex : /[\\]]/,\n            next  : \"start\",\n            merge : false\n        }, \n        string(\"'\", {\n            escape: /\\\\[nb'\"\\\\]/,\n            error: /\\\\./,\n            multiline: false,\n            next: \"soql\"\n        }),\n        string('\"', {\n            escape: /\\\\[nb'\"\\\\]/,\n            error: /\\\\./,\n            multiline: false,\n            next: \"soql\"\n        }),\n        {\n            regex: /\\\\./,\n            token: \"character.escape\"\n        },\n        {\n            regex : /[\\?\\&\\|\\!\\{\\}\\[\\]\\(\\)\\^\\~\\*\\:\\\"\\'\\+\\-\\,\\.=\\\\\\/]/,\n            token : \"keyword.operator\"\n        }],\n        \n        \"log-start\" : [ {\n            token : \"timestamp.invisible\",\n            regex : /^[\\d:.() ]+\\|/, \n            next: \"log-header\"\n        },  {\n            token : \"timestamp.invisible\",\n            regex : /^  (Number of|Maximum)[^:]*:/,\n            next: \"log-comment\"\n        }, {\n            token : \"invisible\",\n            regex : /^Execute Anonymous:/,\n            next: \"log-comment\"\n        },  {\n            defaultToken: \"text\"\n        }],\n        \"log-comment\": [{\n            token : \"log-comment\",\n            regex : /.*$/,\n            next: \"log-start\"\n        }],\n        \"log-header\": [{\n            token : \"timestamp.invisible\",\n            regex : /((USER_DEBUG|\\[\\d+\\]|DEBUG)\\|)+/\n        },\n        {\n            token : \"keyword\",\n            regex: \"(?:EXECUTION_FINISHED|EXECUTION_STARTED|CODE_UNIT_STARTED\"\n                + \"|CUMULATIVE_LIMIT_USAGE|LIMIT_USAGE_FOR_NS\"\n                + \"|CUMULATIVE_LIMIT_USAGE_END|CODE_UNIT_FINISHED)\"\n        }, {\n            regex: \"\",\n            next: \"log-start\"\n        }]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n        \n\n    this.normalizeRules();\n};\n\n\noop.inherits(ApexHighlightRules, TextHighlightRules);\n\nexports.ApexHighlightRules = ApexHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/apex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apex_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar ApexHighlightRules = require(\"./apex_highlight_rules\").ApexHighlightRules;\nvar FoldMode = require(\"../mode/folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"../mode/behaviour/cstyle\").CstyleBehaviour;\n\nfunction ApexMode() {\n    TextMode.call(this);\n\n    this.HighlightRules = ApexHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n}\n\noop.inherits(ApexMode, TextMode);\n\nApexMode.prototype.lineCommentStart = \"//\";\n\nApexMode.prototype.blockComment = {\n    start: \"/*\",\n    end: \"*/\"\n};\n\nexports.Mode = ApexMode;\n\n});                (function() {\n                    window.require([\"ace/mode/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-applescript.js",
    "content": "define(\"ace/mode/applescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AppleScriptHighlightRules = function() {\n    var keywords = (\n        \"about|above|after|against|and|around|as|at|back|before|beginning|\" +\n        \"behind|below|beneath|beside|between|but|by|considering|\" +\n        \"contain|contains|continue|copy|div|does|eighth|else|end|equal|\" +\n        \"equals|error|every|exit|fifth|first|for|fourth|from|front|\" +\n        \"get|given|global|if|ignoring|in|into|is|it|its|last|local|me|\" +\n        \"middle|mod|my|ninth|not|of|on|onto|or|over|prop|property|put|ref|\" +\n        \"reference|repeat|returning|script|second|set|seventh|since|\" +\n        \"sixth|some|tell|tenth|that|the|then|third|through|thru|\" +\n        \"timeout|times|to|transaction|try|until|where|while|whose|with|without\"\n    );\n\n    var builtinConstants = (\n        \"AppleScript|false|linefeed|return|pi|quote|result|space|tab|true\"\n    );\n\n    var builtinFunctions = (\n        \"activate|beep|count|delay|launch|log|offset|read|round|run|say|\" +\n        \"summarize|write\"\n    );\n\n    var builtinTypes = (\n        \"alias|application|boolean|class|constant|date|file|integer|list|\" +\n        \"number|real|record|string|text|character|characters|contents|day|\" +\n        \"frontmost|id|item|length|month|name|paragraph|paragraphs|rest|\" +\n        \"reverse|running|time|version|weekday|word|words|year\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"support.type\": builtinTypes,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"--.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\(\\\\*\",\n                next : \"comment\"\n            },\n            {\n                token: \"string\",           // \" string\n                regex: '\".*?\"'\n            },\n            {\n                token: \"support.type\",\n                regex: '\\\\b(POSIX file|POSIX path|(date|time) string|quoted form)\\\\b'\n            },\n            {\n                token: \"support.function\",\n                regex: '\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|' +\n          'mount volume|path to|(close|open for) access|(get|set) eof|' +\n          'current date|do shell script|get volume settings|random number|' +\n          'set volume|system attribute|system info|time to GMT|' +\n          '(load|run|store) script|scripting components|' +\n          'ASCII (character|number)|localized string|' +\n          'choose (application|color|file|file name|' +\n          'folder|from list|remote application|URL)|' +\n          'display (alert|dialog))\\\\b|^\\\\s*return\\\\b'\n            },\n            {\n                token: \"constant.language\",\n                regex: '\\\\b(text item delimiters|current application|missing value)\\\\b'\n            },\n            {\n                token: \"keyword\",\n                regex: '\\\\b(apart from|aside from|instead of|out of|greater than|' +\n          \"isn't|(doesn't|does not) (equal|come before|come after|contain)|\" +\n          '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' +\n          'contained by|comes (before|after)|a (ref|reference))\\\\b'\n            },\n            {\n                token: keywordMapper,\n                regex: \"[a-zA-Z][a-zA-Z0-9_]*\\\\b\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\", // closing comment\n                regex: \"\\\\*\\\\)\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(AppleScriptHighlightRules, TextHighlightRules);\n\nexports.AppleScriptHighlightRules = AppleScriptHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/applescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/applescript_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AppleScriptHighlightRules = require(\"./applescript_highlight_rules\").AppleScriptHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AppleScriptHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"(*\", end: \"*)\"};\n    this.$id = \"ace/mode/applescript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-asciidoc.js",
    "content": "define(\"ace/mode/asciidoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AsciidocHighlightRules = function() {\n    var identifierRe = \"[a-zA-Z\\u00a1-\\uffff]+\\\\b\";\n\n    this.$rules = {\n        \"start\": [\n            {token: \"empty\",   regex: /$/},\n            {token: \"literal\", regex: /^\\.{4,}\\s*$/,  next: \"listingBlock\"},\n            {token: \"literal\", regex: /^-{4,}\\s*$/,   next: \"literalBlock\"},\n            {token: \"string\",  regex: /^\\+{4,}\\s*$/,  next: \"passthroughBlock\"},\n            {token: \"keyword\", regex: /^={4,}\\s*$/},\n            {token: \"text\",    regex: /^\\s*$/},\n            {token: \"empty\", regex: \"\", next: \"dissallowDelimitedBlock\"}\n        ],\n\n        \"dissallowDelimitedBlock\": [\n            {include: \"paragraphEnd\"},\n            {token: \"comment\", regex: '^//.+$'},\n            {token: \"keyword\", regex: \"^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):\"},\n\n            {include: \"listStart\"},\n            {token: \"literal\", regex: /^\\s+.+$/, next: \"indentedBlock\"},\n            {token: \"empty\",   regex: \"\", next: \"text\"}\n        ],\n\n        \"paragraphEnd\": [\n            {token: \"doc.comment\", regex: /^\\/{4,}\\s*$/,    next: \"commentBlock\"},\n            {token: \"tableBlock\",  regex: /^\\s*[|!]=+\\s*$/, next: \"tableBlock\"},\n            {token: \"keyword\",     regex: /^(?:--|''')\\s*$/, next: \"start\"},\n            {token: \"option\",      regex: /^\\[.*\\]\\s*$/,     next: \"start\"},\n            {token: \"pageBreak\",   regex: /^>{3,}$/,         next: \"start\"},\n            {token: \"literal\",     regex: /^\\.{4,}\\s*$/,     next: \"listingBlock\"},\n            {token: \"titleUnderline\",    regex: /^(?:={2,}|-{2,}|~{2,}|\\^{2,}|\\+{2,})\\s*$/, next: \"start\"},\n            {token: \"singleLineTitle\",   regex: /^={1,5}\\s+\\S.*$/, next: \"start\"},\n\n            {token: \"otherBlock\",    regex: /^(?:\\*{2,}|_{2,})\\s*$/, next: \"start\"},\n            {token: \"optionalTitle\", regex: /^\\.[^.\\s].+$/,  next: \"start\"}\n        ],\n\n        \"listStart\": [\n            {token: \"keyword\",  regex: /^\\s*(?:\\d+\\.|[a-zA-Z]\\.|[ixvmIXVM]+\\)|\\*{1,5}|-|\\.{1,5})\\s/, next: \"listText\"},\n            {token: \"meta.tag\", regex: /^.+(?::{2,4}|;;)(?: |$)/, next: \"listText\"},\n            {token: \"support.function.list.callout\", regex: /^(?:<\\d+>|\\d+>|>) /, next: \"text\"},\n            {token: \"keyword\",  regex: /^\\+\\s*$/, next: \"start\"}\n        ],\n\n        \"text\": [\n            {token: [\"link\", \"variable.language\"], regex: /((?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+)(\\[.*?\\])/},\n            {token: \"link\", regex: /(?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+/},\n            {token: \"link\", regex: /\\b[\\w\\.\\/\\-]+@[\\w\\.\\/\\-]+\\b/},\n            {include: \"macros\"},\n            {include: \"paragraphEnd\"},\n            {token: \"literal\", regex:/\\+{3,}/, next:\"smallPassthrough\"},\n            {token: \"escape\", regex: /\\((?:C|TM|R)\\)|\\.{3}|->|<-|=>|<=|&#(?:\\d+|x[a-fA-F\\d]+);|(?: |^)--(?=\\s+\\S)/},\n            {token: \"escape\", regex: /\\\\[_*'`+#]|\\\\{2}[_*'`+#]{2}/},\n            {token: \"keyword\", regex: /\\s\\+$/},\n            {token: \"text\", regex: identifierRe},\n            {token: [\"keyword\", \"string\", \"keyword\"],\n                regex: /(<<[\\w\\d\\-$]+,)(.*?)(>>|$)/},\n            {token: \"keyword\", regex: /<<[\\w\\d\\-$]+,?|>>/},\n            {token: \"constant.character\", regex: /\\({2,3}.*?\\){2,3}/},\n            {token: \"keyword\", regex: /\\[\\[.+?\\]\\]/},\n            {token: \"support\", regex: /^\\[{3}[\\w\\d =\\-]+\\]{3}/},\n\n            {include: \"quotes\"},\n            {token: \"empty\", regex: /^\\s*$/, next: \"start\"}\n        ],\n\n        \"listText\": [\n            {include: \"listStart\"},\n            {include: \"text\"}\n        ],\n\n        \"indentedBlock\": [\n            {token: \"literal\", regex: /^[\\s\\w].+$/, next: \"indentedBlock\"},\n            {token: \"literal\", regex: \"\", next: \"start\"}\n        ],\n\n        \"listingBlock\": [\n            {token: \"literal\", regex: /^\\.{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"constant.numeric\", regex: '<\\\\d+>'},\n            {token: \"literal\", regex: '[^<]+'},\n            {token: \"literal\", regex: '<'}\n        ],\n        \"literalBlock\": [\n            {token: \"literal\", regex: /^-{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"constant.numeric\", regex: '<\\\\d+>'},\n            {token: \"literal\", regex: '[^<]+'},\n            {token: \"literal\", regex: '<'}\n        ],\n        \"passthroughBlock\": [\n            {token: \"literal\", regex: /^\\+{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"literal\", regex: identifierRe + \"|\\\\d+\"},\n            {include: \"macros\"},\n            {token: \"literal\", regex: \".\"}\n        ],\n\n        \"smallPassthrough\": [\n            {token: \"literal\", regex: /[+]{3,}/, next: \"dissallowDelimitedBlock\"},\n            {token: \"literal\", regex: /^\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"literal\", regex: identifierRe + \"|\\\\d+\"},\n            {include: \"macros\"}\n        ],\n\n        \"commentBlock\": [\n            {token: \"doc.comment\", regex: /^\\/{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"doc.comment\", regex: '^.*$'}\n        ],\n        \"tableBlock\": [\n            {token: \"tableBlock\", regex: /^\\s*\\|={3,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"tableBlock\", regex: /^\\s*!={3,}\\s*$/, next: \"innerTableBlock\"},\n            {token: \"tableBlock\", regex: /\\|/},\n            {include: \"text\", noEscape: true}\n        ],\n        \"innerTableBlock\": [\n            {token: \"tableBlock\", regex: /^\\s*!={3,}\\s*$/, next: \"tableBlock\"},\n            {token: \"tableBlock\", regex: /^\\s*|={3,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"tableBlock\", regex: /!/}\n        ],\n        \"macros\": [\n            {token: \"macro\", regex: /{[\\w\\-$]+}/},\n            {token: [\"text\", \"string\", \"text\", \"constant.character\", \"text\"], regex: /({)([\\w\\-$]+)(:)?(.+)?(})/},\n            {token: [\"text\", \"markup.list.macro\", \"keyword\", \"string\"], regex: /(\\w+)(footnote(?:ref)?::?)([^\\s\\[]+)?(\\[.*?\\])?/},\n            {token: [\"markup.list.macro\", \"keyword\", \"string\"], regex: /([a-zA-Z\\-][\\w\\.\\/\\-]*::?)([^\\s\\[]+)(\\[.*?\\])?/},\n            {token: [\"markup.list.macro\", \"keyword\"], regex: /([a-zA-Z\\-][\\w\\.\\/\\-]+::?)(\\[.*?\\])/},\n            {token: \"keyword\",     regex: /^:.+?:(?= |$)/}\n        ],\n\n        \"quotes\": [\n            {token: \"string.italic\", regex: /__[^_\\s].*?__/},\n            {token: \"string.italic\", regex: quoteRule(\"_\")},\n            \n            {token: \"keyword.bold\", regex: /\\*\\*[^*\\s].*?\\*\\*/},\n            {token: \"keyword.bold\", regex: quoteRule(\"\\\\*\")},\n            \n            {token: \"literal\", regex: quoteRule(\"\\\\+\")},\n            {token: \"literal\", regex: /\\+\\+[^+\\s].*?\\+\\+/},\n            {token: \"literal\", regex: /\\$\\$.+?\\$\\$/},\n            {token: \"literal\", regex: quoteRule(\"`\")},\n\n            {token: \"keyword\", regex: quoteRule(\"^\")},\n            {token: \"keyword\", regex: quoteRule(\"~\")},\n            {token: \"keyword\", regex: /##?/},\n            {token: \"keyword\", regex: /(?:\\B|^)``|\\b''/}\n        ]\n\n    };\n\n    function quoteRule(ch) {\n        var prefix = /\\w/.test(ch) ? \"\\\\b\" : \"(?:\\\\B|^)\";\n        return prefix + ch + \"[^\" + ch + \"].*?\" + ch + \"(?![\\\\w*])\";\n    }\n\n    var tokenMap = {\n        macro: \"constant.character\",\n        tableBlock: \"doc.comment\",\n        titleUnderline: \"markup.heading\",\n        singleLineTitle: \"markup.heading\",\n        pageBreak: \"string\",\n        option: \"string.regexp\",\n        otherBlock: \"markup.list\",\n        literal: \"support.function\",\n        optionalTitle: \"constant.numeric\",\n        escape: \"constant.language.escape\",\n        link: \"markup.underline.list\"\n    };\n\n    for (var state in this.$rules) {\n        var stateRules = this.$rules[state];\n        for (var i = stateRules.length; i--; ) {\n            var rule = stateRules[i];\n            if (rule.include || typeof rule == \"string\") {\n                var args = [i, 1].concat(this.$rules[rule.include || rule]);\n                if (rule.noEscape) {\n                    args = args.filter(function(x) {\n                        return !x.next;\n                    });\n                }\n                stateRules.splice.apply(stateRules, args);\n            } else if (rule.token in tokenMap) {\n                rule.token = tokenMap[rule.token];\n            }\n        }\n    }\n};\noop.inherits(AsciidocHighlightRules, TextHighlightRules);\n\nexports.AsciidocHighlightRules = AsciidocHighlightRules;\n});\n\ndefine(\"ace/mode/folding/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /^(?:\\|={10,}|[\\.\\/=\\-~^+]{4,}\\s*$|={1,5} )/;\n    this.singleLineHeadingRe = /^={1,5}(?=\\s+\\S)/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n\n        if (line[0] == \"=\") {\n            if (this.singleLineHeadingRe.test(line))\n                return \"start\";\n            if (session.getLine(row - 1).length != session.getLine(row).length)\n                return \"\";\n            return \"start\";\n        }\n        if (session.bgTokenizer.getState(row) == \"dissallowDelimitedBlock\")\n            return \"end\";\n        return \"start\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n\n        var token;\n        function getTokenType(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type;\n        }\n\n        var levels = [\"=\",\"-\",\"~\",\"^\",\"+\"];\n        var heading = \"markup.heading\";\n        var singleLineHeadingRe = this.singleLineHeadingRe;\n        function getLevel() {\n            var match = token.value.match(singleLineHeadingRe);\n            if (match)\n                return match[0].length;\n            var level = levels.indexOf(token.value[0]) + 1;\n            if (level == 1) {\n                if (session.getLine(row - 1).length != session.getLine(row).length)\n                    return Infinity;\n            }\n            return level;\n        }\n\n        if (getTokenType(row) == heading) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (getTokenType(row) != heading)\n                    continue;\n                var level = getLevel();\n                if (level <= startHeadingLevel)\n                    break;\n            }\n\n            var isSingleLineHeading = token && token.value.match(this.singleLineHeadingRe);\n            endRow = isSingleLineHeading ? row - 1 : row - 2;\n\n            if (endRow > startRow) {\n                while (endRow > startRow && (!getTokenType(endRow) || token.value[0] == \"[\"))\n                    endRow--;\n            }\n\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        } else {\n            var state = session.bgTokenizer.getState(row);\n            if (state == \"dissallowDelimitedBlock\") {\n                while (row -- > 0) {\n                    if (session.bgTokenizer.getState(row).lastIndexOf(\"Block\") == -1)\n                        break;\n                }\n                endRow = row + 1;\n                if (endRow < startRow) {\n                    var endColumn = session.getLine(row).length;\n                    return new Range(endRow, 5, startRow, startColumn - 5);\n                }\n            } else {\n                while (++row < maxRow) {\n                    if (session.bgTokenizer.getState(row) == \"dissallowDelimitedBlock\")\n                        break;\n                }\n                endRow = row;\n                if (endRow > startRow) {\n                    var endColumn = session.getLine(row).length;\n                    return new Range(startRow, 5, endRow, endColumn - 5);\n                }\n            }\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asciidoc_highlight_rules\",\"ace/mode/folding/asciidoc\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AsciidocHighlightRules = require(\"./asciidoc_highlight_rules\").AsciidocHighlightRules;\nvar AsciidocFoldMode = require(\"./folding/asciidoc\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AsciidocHighlightRules;\n    \n    this.foldingRules = new AsciidocFoldMode();    \n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^((?:.+)?)([-+*][ ]+)/.exec(line);\n            if (match) {\n                return new Array(match[1].length + 1).join(\" \") + match[2];\n            } else {\n                return \"\";\n            }\n        } else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/asciidoc\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-asl.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/asl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var ASLHighlightRules = function() {\n        var keywords = (\n            \"Default|DefinitionBlock|Device|Method|Else|ElseIf|For|Function|If|Include|Method|Return|\" +\n            \"Scope|Switch|Case|While|Break|BreakPoint|Continue|NoOp|Wait\"\n        );\n\n        var keywordOperators = (\n            \"Add|And|Decrement|Divide|Increment|Index|LAnd|LEqual|LGreater|LGreaterEqual|\" +\n            \"LLess|LLessEqual|LNot|LNotEqual|LOr|Mod|Multiply|NAnd|NOr|Not|Or|RefOf|Revision|\" +\n            \"ShiftLeft|ShiftRight|Subtract|XOr|DerefOf\"\n        );\n\n        var buildinFunctions = (\n            \"AccessAs|Acquire|Alias|BankField|Buffer|Concatenate|ConcatenateResTemplate|\" +\n            \"CondRefOf|Connection|CopyObject|CreateBitField|CreateByteField|CreateDWordField|\" +\n            \"CreateField|CreateQWordField|CreateWordField|DataTableRegion|Debug|\" +\n            \"DMA|DWordIO|DWordMemory|DWordSpace|EisaId|EISAID|EndDependentFn|Event|ExtendedIO|\" +\n            \"ExtendedMemory|ExtendedSpace|External|Fatal|Field|FindSetLeftBit|FindSetRightBit|\" +\n            \"FixedDMA|FixedIO|Fprintf|FromBCD|GpioInt|GpioIo|I2CSerialBusV2|IndexField|\" +\n            \"Interrupt|IO|IRQ|IRQNoFlags|Load|LoadTable|Match|Memory32|Memory32Fixed|\" +\n            \"Mid|Mutex|Name|Notify|Offset|ObjectType|OperationRegion|Package|PowerResource|Printf|\" +\n            \"QWordIO|QWordMemory|QWordSpace|RawDataBuffer|Register|Release|Reset|ResourceTemplate|\" +\n            \"Signal|SizeOf|Sleep|SPISerialBusV2|Stall|StartDependentFn|StartDependentFnNoPri|\" +\n            \"Store|ThermalZone|Timer|ToBCD|ToBuffer|ToDecimalString|ToInteger|ToPLD|ToString|\" +\n            \"ToUUID|UARTSerialBusV2|Unicode|Unload|VendorLong|VendorShort|WordBusNumber|WordIO|\" +\n            \"WordSpace\"\n        );\n\n        var flags = (\n            \"AttribQuick|AttribSendReceive|AttribByte|AttribBytes|AttribRawBytes|\" +\n            \"AttribRawProcessBytes|AttribWord|AttribBlock|AttribProcessCall|AttribBlockProcessCall|\" +\n            \"AnyAcc|ByteAcc|WordAcc|DWordAcc|QWordAcc|BufferAcc|\" +\n            \"AddressRangeMemory|AddressRangeReserved|AddressRangeNVS|AddressRangeACPI|\" +\n            \"RegionSpaceKeyword|FFixedHW|PCC|\" +\n            \"AddressingMode7Bit|AddressingMode10Bit|\" +\n            \"DataBitsFive|DataBitsSix|DataBitsSeven|DataBitsEight|DataBitsNine|\" +\n            \"BusMaster|NotBusMaster|\" +\n            \"ClockPhaseFirst|ClockPhaseSecond|ClockPolarityLow|ClockPolarityHigh|\" +\n            \"SubDecode|PosDecode|\" +\n            \"BigEndianing|LittleEndian|\" +\n            \"FlowControlNone|FlowControlXon|FlowControlHardware|\" +\n            \"Edge|Level|ActiveHigh|ActiveLow|ActiveBoth|Decode16|Decode10|\" +\n            \"IoRestrictionNone|IoRestrictionInputOnly|IoRestrictionOutputOnly|\" +\n            \"IoRestrictionNoneAndPreserve|Lock|NoLock|MTR|MEQ|MLE|MLT|MGE|MGT|\" +\n            \"MaxFixed|MaxNotFixed|Cacheable|WriteCombining|Prefetchable|NonCacheable|\" +\n            \"MinFixed|MinNotFixed|\" +\n            \"ParityTypeNone|ParityTypeSpace|ParityTypeMark|ParityTypeOdd|ParityTypeEven|\" +\n            \"PullDefault|PullUp|PullDown|PullNone|PolarityHigh|PolarityLow|\" +\n            \"ISAOnlyRanges|NonISAOnlyRanges|EntireRange|ReadWrite|ReadOnly|\" +\n            \"UserDefRegionSpace|SystemIO|SystemMemory|PCI_Config|EmbeddedControl|\" +\n            \"SMBus|SystemCMOS|PciBarTarget|IPMI|GeneralPurposeIO|GenericSerialBus|\" +\n            \"ResourceConsumer|ResourceProducer|Serialized|NotSerialized|\" +\n            \"Shared|Exclusive|SharedAndWake|ExclusiveAndWake|ControllerInitiated|DeviceInitiated|\" +\n            \"StopBitsZero|StopBitsOne|StopBitsOnePlusHalf|StopBitsTwo|\" +\n            \"Width8Bit|Width16Bit|Width32Bit|Width64Bit|Width128Bit|Width256Bit|\" +\n            \"SparseTranslation|DenseTranslation|TypeTranslation|TypeStatic|\" +\n            \"Preserve|WriteAsOnes|WriteAsZeros|Transfer8|Transfer16|Transfer8_16|\" +\n            \"ThreeWireMode|FourWireMode\"\n        );\n\n        var storageTypes = (\n            \"UnknownObj|IntObj|StrObj|BuffObj|PkgObj|FieldUnitObj|DeviceObj|\" +\n            \"EventObj|MethodObj|MutexObj|OpRegionObj|PowerResObj|ProcessorObj|\" +\n            \"ThermalZoneObj|BuffFieldObj|DDBHandleObj\"\n        );\n\n        var buildinConstants = (\n            \"__FILE__|__PATH__|__LINE__|__DATE__|__IASL__\"\n        );\n\n        var deprecated = (\n            \"Memory24|Processor\"\n        );\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"keyword.operator\": keywordOperators,\n            \"function.buildin\": buildinFunctions,\n            \"constant.language\": buildinConstants,\n            \"storage.type\": storageTypes,\n            \"constant.character\": flags,\n            \"invalid.deprecated\": deprecated\n        }, \"identifier\");\n\n        this.$rules = {\n            \"start\" : [\n                {\n                    token : \"comment\",\n                    regex : \"\\\\/\\\\/.*$\"\n                },\n                DocCommentHighlightRules.getStartRule(\"doc-start\"),\n                {\n                    token : \"comment\", // multi line comment\n                    regex : \"\\\\/\\\\*\",\n                    next : \"comment\"\n                },\n                DocCommentHighlightRules.getStartRule(\"doc-start\"),\n                {\n                    token : \"comment\", // ignored fields / comments\n                    regex : \"\\\\\\[\",\n                    next : \"ignoredfield\"\n                }, {\n                    token : \"variable\",\n                    regex : \"\\\\Local[0-7]|\\\\Arg[0-6]\"\n                }, {\n                    token : \"keyword\", // pre-compiler directives\n                    regex : \"#\\\\s*(?:define|elif|else|endif|error|if|ifdef|ifndef|include|includebuffer|line|pragma|undef|warning)\\\\b\",\n                    next  : \"directive\"\n                }, {\n                    token : \"string\", // single line\n                    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n                }, {\n                    token : \"constant.character\", // single line\n                    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n                }, {\n                    token : \"constant.numeric\", // hex\n                    regex : /0[xX][0-9a-fA-F]+\\b/\n                }, {\n                    token : \"constant.numeric\",\n                    regex : /(One(s)?|Zero|True|False|[0-9]+)\\b/\n                }, {\n                    token : keywordMapper,\n                    regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"/|!|\\\\$|%|&|\\\\||\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|\\\\^|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\|=\"\n                }, {\n                    token : \"lparen\",\n                    regex : \"[[({]\"\n                }, {\n                    token : \"rparen\",\n                    regex : \"[\\\\])}]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }\n            ],\n            \"comment\" : [\n                {\n                    token : \"comment\", // closing comment\n                    regex : \"\\\\*\\\\/\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ],\n            \"ignoredfield\" : [\n                {\n                    token : \"comment\", // closing ignored fields / comments\n                    regex : \"\\\\\\]\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ],\n            \"directive\" : [\n                {\n                    token : \"constant.other.multiline\",\n                    regex : /\\\\/\n                },\n                {\n                    token : \"constant.other.multiline\",\n                    regex : /.*\\\\/\n                },\n                {\n                    token : \"constant.other\",\n                    regex : \"\\\\s*<.+?>*s\",\n                    next : \"start\"\n                },\n                {\n                    token : \"constant.other\", // single line\n                    regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]*s',\n                    next : \"start\"\n                },\n                {\n                    token : \"constant.other\", // single line\n                    regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                    next : \"start\"\n                },\n                {\n                    token : \"constant.other\",\n                    regex : /[^\\\\\\/]+/,\n                    next : \"start\"\n                }\n            ]\n        };\n\n        this.embedRules(DocCommentHighlightRules, \"doc-\",\n            [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    };\n\n    oop.inherits(ASLHighlightRules, TextHighlightRules);\n\n    exports.ASLHighlightRules = ASLHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/asl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asl_highlight_rules\",\"ace/mode/folding/cstyle\"], function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var ASLHighlightRules = require(\"./asl_highlight_rules\").ASLHighlightRules;\n    var FoldMode = require(\"./folding/cstyle\").FoldMode;\n\n    var Mode = function () {\n        this.HighlightRules = ASLHighlightRules;\n        this.foldingRules = new FoldMode();\n        this.$behaviour = this.$defaultBehaviour;\n    };\n    oop.inherits(Mode, TextMode);\n\n    (function () {\n        this.$id = \"ace/mode/asl\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-assembly_x86.js",
    "content": "define(\"ace/mode/assembly_x86_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AssemblyX86HighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'keyword.control.assembly',\n           regex: '\\\\b(?:aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vtestps|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(?:n?e|n?z)?|call|j(?:mp|n?e|ge?|ae?|le?|be?|n?o|n?z))\\\\b',\n           caseInsensitive: true },\n         { token: 'variable.parameter.register.assembly',\n           regex: '\\\\b(?:CS|DS|ES|FS|GS|SS|RAX|EAX|RBX|EBX|RCX|ECX|RDX|EDX|RCX|RIP|EIP|IP|RSP|ESP|SP|RSI|ESI|SI|RDI|EDI|DI|RFLAGS|EFLAGS|FLAGS|R8-15|(?:Y|X)MM(?:[0-9]|10|11|12|13|14|15)|(?:A|B|C|D)(?:X|H|L)|CR(?:[0-4]|DR(?:[0-7]|TR6|TR7|EFER)))\\\\b',\n           caseInsensitive: true },\n         { token: 'constant.character.decimal.assembly',\n           regex: '\\\\b[0-9]+\\\\b' },\n         { token: 'constant.character.hexadecimal.assembly',\n           regex: '\\\\b0x[A-F0-9]+\\\\b',\n           caseInsensitive: true },\n         { token: 'constant.character.hexadecimal.assembly',\n           regex: '\\\\b[A-F0-9]+h\\\\b',\n           caseInsensitive: true },\n         { token: 'string.assembly', regex: /'([^\\\\']|\\\\.)*'/ },\n         { token: 'string.assembly', regex: /\"([^\\\\\"]|\\\\.)*\"/ },\n         { token: 'support.function.directive.assembly',\n           regex: '^\\\\[',\n           push: \n            [ { token: 'support.function.directive.assembly',\n                regex: '\\\\]$',\n                next: 'pop' },\n              { defaultToken: 'support.function.directive.assembly' } ] },\n         { token: \n            [ 'support.function.directive.assembly',\n              'support.function.directive.assembly',\n              'entity.name.function.assembly' ],\n           regex: '(^struc)( )([_a-zA-Z][_a-zA-Z0-9]*)' },\n         { token: 'support.function.directive.assembly',\n           regex: '^endstruc\\\\b' },\n        { token: \n            [ 'support.function.directive.assembly',\n              'entity.name.function.assembly',\n              'support.function.directive.assembly',\n              'constant.character.assembly' ],\n           regex: '^(%macro )([_a-zA-Z][_a-zA-Z0-9]*)( )([0-9]+)' },\n         { token: 'support.function.directive.assembly',\n           regex: '^%endmacro' },\n         { token: \n            [ 'text',\n              'support.function.directive.assembly',\n              'text',\n              'entity.name.function.assembly' ],\n           regex: '(\\\\s*)(%define|%xdefine|%idefine|%undef|%assign|%defstr|%strcat|%strlen|%substr|%00|%0|%rotate|%rep|%endrep|%include|\\\\$\\\\$|\\\\$|%unmacro|%if|%elif|%else|%endif|%(?:el)?ifdef|%(?:el)?ifmacro|%(?:el)?ifctx|%(?:el)?ifidn|%(?:el)?ifidni|%(?:el)?ifid|%(?:el)?ifnum|%(?:el)?ifstr|%(?:el)?iftoken|%(?:el)?ifempty|%(?:el)?ifenv|%pathsearch|%depend|%use|%push|%pop|%repl|%arg|%stacksize|%local|%error|%warning|%fatal|%line|%!|%comment|%endcomment|__NASM_VERSION_ID__|__NASM_VER__|__FILE__|__LINE__|__BITS__|__OUTPUT_FORMAT__|__DATE__|__TIME__|__DATE_NUM__|_TIME__NUM__|__UTC_DATE__|__UTC_TIME__|__UTC_DATE_NUM__|__UTC_TIME_NUM__|__POSIX_TIME__|__PASS__|ISTRUC|AT|IEND|BITS 16|BITS 32|BITS 64|USE16|USE32|__SECT__|ABSOLUTE|EXTERN|GLOBAL|COMMON|CPU|FLOAT)\\\\b( ?)((?:[_a-zA-Z][_a-zA-Z0-9]*)?)',\n           caseInsensitive: true },\n          { token: 'support.function.directive.assembly',\n           regex: '\\\\b(?:d[bwdqtoy]|res[bwdqto]|equ|times|align|alignb|sectalign|section|ptr|byte|word|dword|qword|incbin)\\\\b',\n           caseInsensitive: true },\n         { token: 'entity.name.function.assembly', regex: '^\\\\s*%%[\\\\w.]+?:$' },\n         { token: 'entity.name.function.assembly', regex: '^\\\\s*%\\\\$[\\\\w.]+?:$' },\n         { token: 'entity.name.function.assembly', regex: '^[\\\\w.]+?:' },\n         { token: 'entity.name.function.assembly', regex: '^[\\\\w.]+?\\\\b' },\n         { token: 'comment.assembly', regex: ';.*$' } ] \n    };\n    \n    this.normalizeRules();\n};\n\nAssemblyX86HighlightRules.metaData = { fileTypes: [ 'asm' ],\n      name: 'Assembly x86',\n      scopeName: 'source.assembly' };\n\n\noop.inherits(AssemblyX86HighlightRules, TextHighlightRules);\n\nexports.AssemblyX86HighlightRules = AssemblyX86HighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/assembly_x86\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/assembly_x86_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AssemblyX86HighlightRules = require(\"./assembly_x86_highlight_rules\").AssemblyX86HighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AssemblyX86HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = [\";\"];\n    this.$id = \"ace/mode/assembly_x86\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-autohotkey.js",
    "content": "define(\"ace/mode/autohotkey_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AutoHotKeyHighlightRules = function() {\n    var autoItKeywords = 'And|ByRef|Case|Const|ContinueCase|ContinueLoop|Default|Dim|Do|Else|ElseIf|EndFunc|EndIf|EndSelect|EndSwitch|EndWith|Enum|Exit|ExitLoop|False|For|Func|Global|If|In|Local|Next|Not|Or|ReDim|Return|Select|Step|Switch|Then|To|True|Until|WEnd|While|With|' +       \n        'Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitRotate|BitShift|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|ControlTreeView|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCallbackFree|DllCallbackGetPtr|DllCallbackRegister|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFSLink|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GUICreate|GUICtrlCreateAvi|GUICtrlCreateButton|GUICtrlCreateCheckbox|GUICtrlCreateCombo|GUICtrlCreateContextMenu|GUICtrlCreateDate|GUICtrlCreateDummy|GUICtrlCreateEdit|GUICtrlCreateGraphic|GUICtrlCreateGroup|GUICtrlCreateIcon|GUICtrlCreateInput|GUICtrlCreateLabel|GUICtrlCreateList|GUICtrlCreateListView|GUICtrlCreateListViewItem|GUICtrlCreateMenu|GUICtrlCreateMenuItem|GUICtrlCreateMonthCal|GUICtrlCreateObj|GUICtrlCreatePic|GUICtrlCreateProgress|GUICtrlCreateRadio|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTabItem|GUICtrlCreateTreeView|GUICtrlCreateTreeViewItem|GUICtrlCreateUpdown|GUICtrlDelete|GUICtrlGetHandle|GUICtrlGetState|GUICtrlRead|GUICtrlRecvMsg|GUICtrlRegisterListViewSort|GUICtrlSendMsg|GUICtrlSendToDummy|GUICtrlSetBkColor|GUICtrlSetColor|GUICtrlSetCursor|GUICtrlSetData|GUICtrlSetFont|GUICtrlSetDefColor|GUICtrlSetDefBkColor|GUICtrlSetGraphic|GUICtrlSetImage|GUICtrlSetLimit|GUICtrlSetOnEvent|GUICtrlSetPos|GUICtrlSetResizing|GUICtrlSetState|GUICtrlSetStyle|GUICtrlSetTip|GUIDelete|GUIGetCursorInfo|GUIGetMsg|GUIGetStyle|GUIRegisterMsg|GUISetAccelerators()|GUISetBkColor|GUISetCoord|GUISetCursor|GUISetFont|GUISetHelp|GUISetIcon|GUISetOnEvent|GUISetState|GUISetStyle|GUIStartGroup|GUISwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsPtr|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Opt|Ping|PixelChecksum|PixelGetColor|PixelSearch|PluginClose|PluginOpen|ProcessClose|ProcessExists|ProcessGetStats|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProgressOn|ProgressSet|Ptr|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAs|RunAsWait|RunWait|Send|SendKeepActive|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdioClose|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPRecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|UDPShutdown|UDPStartup|VarGetType|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive|' +\n        'ArrayAdd|ArrayBinarySearch|ArrayConcatenate|ArrayDelete|ArrayDisplay|ArrayFindAll|ArrayInsert|ArrayMax|ArrayMaxIndex|ArrayMin|ArrayMinIndex|ArrayPop|ArrayPush|ArrayReverse|ArraySearch|ArraySort|ArraySwap|ArrayToClip|ArrayToString|ArrayTrim|ChooseColor|ChooseFont|ClipBoard_ChangeChain|ClipBoard_Close|ClipBoard_CountFormats|ClipBoard_Empty|ClipBoard_EnumFormats|ClipBoard_FormatStr|ClipBoard_GetData|ClipBoard_GetDataEx|ClipBoard_GetFormatName|ClipBoard_GetOpenWindow|ClipBoard_GetOwner|ClipBoard_GetPriorityFormat|ClipBoard_GetSequenceNumber|ClipBoard_GetViewer|ClipBoard_IsFormatAvailable|ClipBoard_Open|ClipBoard_RegisterFormat|ClipBoard_SetData|ClipBoard_SetDataEx|ClipBoard_SetViewer|ClipPutFile|ColorConvertHSLtoRGB|ColorConvertRGBtoHSL|ColorGetBlue|ColorGetGreen|ColorGetRed|Date_Time_CompareFileTime|Date_Time_DOSDateTimeToArray|Date_Time_DOSDateTimeToFileTime|Date_Time_DOSDateTimeToStr|Date_Time_DOSDateToArray|Date_Time_DOSDateToStr|Date_Time_DOSTimeToArray|Date_Time_DOSTimeToStr|Date_Time_EncodeFileTime|Date_Time_EncodeSystemTime|Date_Time_FileTimeToArray|Date_Time_FileTimeToDOSDateTime|Date_Time_FileTimeToLocalFileTime|Date_Time_FileTimeToStr|Date_Time_FileTimeToSystemTime|Date_Time_GetFileTime|Date_Time_GetLocalTime|Date_Time_GetSystemTime|Date_Time_GetSystemTimeAdjustment|Date_Time_GetSystemTimeAsFileTime|Date_Time_GetSystemTimes|Date_Time_GetTickCount|Date_Time_GetTimeZoneInformation|Date_Time_LocalFileTimeToFileTime|Date_Time_SetFileTime|Date_Time_SetLocalTime|Date_Time_SetSystemTime|Date_Time_SetSystemTimeAdjustment|Date_Time_SetTimeZoneInformation|Date_Time_SystemTimeToArray|Date_Time_SystemTimeToDateStr|Date_Time_SystemTimeToDateTimeStr|Date_Time_SystemTimeToFileTime|Date_Time_SystemTimeToTimeStr|Date_Time_SystemTimeToTzSpecificLocalTime|Date_Time_TzSpecificLocalTimeToSystemTime|DateAdd|DateDayOfWeek|DateDaysInMonth|DateDiff|DateIsLeapYear|DateIsValid|DateTimeFormat|DateTimeSplit|DateToDayOfWeek|DateToDayOfWeekISO|DateToDayValue|DateToMonth|DayValueToDate|DebugBugReportEnv|DebugOut|DebugSetup|Degree|EventLog__Backup|EventLog__Clear|EventLog__Close|EventLog__Count|EventLog__DeregisterSource|EventLog__Full|EventLog__Notify|EventLog__Oldest|EventLog__Open|EventLog__OpenBackup|EventLog__Read|EventLog__RegisterSource|EventLog__Report|FileCountLines|FileCreate|FileListToArray|FilePrint|FileReadToArray|FileWriteFromArray|FileWriteLog|FileWriteToLine|GDIPlus_ArrowCapCreate|GDIPlus_ArrowCapDispose|GDIPlus_ArrowCapGetFillState|GDIPlus_ArrowCapGetHeight|GDIPlus_ArrowCapGetMiddleInset|GDIPlus_ArrowCapGetWidth|GDIPlus_ArrowCapSetFillState|GDIPlus_ArrowCapSetHeight|GDIPlus_ArrowCapSetMiddleInset|GDIPlus_ArrowCapSetWidth|GDIPlus_BitmapCloneArea|GDIPlus_BitmapCreateFromFile|GDIPlus_BitmapCreateFromGraphics|GDIPlus_BitmapCreateFromHBITMAP|GDIPlus_BitmapCreateHBITMAPFromBitmap|GDIPlus_BitmapDispose|GDIPlus_BitmapLockBits|GDIPlus_BitmapUnlockBits|GDIPlus_BrushClone|GDIPlus_BrushCreateSolid|GDIPlus_BrushDispose|GDIPlus_BrushGetType|GDIPlus_CustomLineCapDispose|GDIPlus_Decoders|GDIPlus_DecodersGetCount|GDIPlus_DecodersGetSize|GDIPlus_Encoders|GDIPlus_EncodersGetCLSID|GDIPlus_EncodersGetCount|GDIPlus_EncodersGetParamList|GDIPlus_EncodersGetParamListSize|GDIPlus_EncodersGetSize|GDIPlus_FontCreate|GDIPlus_FontDispose|GDIPlus_FontFamilyCreate|GDIPlus_FontFamilyDispose|GDIPlus_GraphicsClear|GDIPlus_GraphicsCreateFromHDC|GDIPlus_GraphicsCreateFromHWND|GDIPlus_GraphicsDispose|GDIPlus_GraphicsDrawArc|GDIPlus_GraphicsDrawBezier|GDIPlus_GraphicsDrawClosedCurve|GDIPlus_GraphicsDrawCurve|GDIPlus_GraphicsDrawEllipse|GDIPlus_GraphicsDrawImage|GDIPlus_GraphicsDrawImageRect|GDIPlus_GraphicsDrawImageRectRect|GDIPlus_GraphicsDrawLine|GDIPlus_GraphicsDrawPie|GDIPlus_GraphicsDrawPolygon|GDIPlus_GraphicsDrawRect|GDIPlus_GraphicsDrawString|GDIPlus_GraphicsDrawStringEx|GDIPlus_GraphicsFillClosedCurve|GDIPlus_GraphicsFillEllipse|GDIPlus_GraphicsFillPie|GDIPlus_GraphicsFillRect|GDIPlus_GraphicsGetDC|GDIPlus_GraphicsGetSmoothingMode|GDIPlus_GraphicsMeasureString|GDIPlus_GraphicsReleaseDC|GDIPlus_GraphicsSetSmoothingMode|GDIPlus_GraphicsSetTransform|GDIPlus_ImageDispose|GDIPlus_ImageGetGraphicsContext|GDIPlus_ImageGetHeight|GDIPlus_ImageGetWidth|GDIPlus_ImageLoadFromFile|GDIPlus_ImageSaveToFile|GDIPlus_ImageSaveToFileEx|GDIPlus_MatrixCreate|GDIPlus_MatrixDispose|GDIPlus_MatrixRotate|GDIPlus_ParamAdd|GDIPlus_ParamInit|GDIPlus_PenCreate|GDIPlus_PenDispose|GDIPlus_PenGetAlignment|GDIPlus_PenGetColor|GDIPlus_PenGetCustomEndCap|GDIPlus_PenGetDashCap|GDIPlus_PenGetDashStyle|GDIPlus_PenGetEndCap|GDIPlus_PenGetWidth|GDIPlus_PenSetAlignment|GDIPlus_PenSetColor|GDIPlus_PenSetCustomEndCap|GDIPlus_PenSetDashCap|GDIPlus_PenSetDashStyle|GDIPlus_PenSetEndCap|GDIPlus_PenSetWidth|GDIPlus_RectFCreate|GDIPlus_Shutdown|GDIPlus_Startup|GDIPlus_StringFormatCreate|GDIPlus_StringFormatDispose|GetIP|GUICtrlAVI_Close|GUICtrlAVI_Create|GUICtrlAVI_Destroy|GUICtrlAVI_Open|GUICtrlAVI_OpenEx|GUICtrlAVI_Play|GUICtrlAVI_Seek|GUICtrlAVI_Show|GUICtrlAVI_Stop|GUICtrlButton_Click|GUICtrlButton_Create|GUICtrlButton_Destroy|GUICtrlButton_Enable|GUICtrlButton_GetCheck|GUICtrlButton_GetFocus|GUICtrlButton_GetIdealSize|GUICtrlButton_GetImage|GUICtrlButton_GetImageList|GUICtrlButton_GetState|GUICtrlButton_GetText|GUICtrlButton_GetTextMargin|GUICtrlButton_SetCheck|GUICtrlButton_SetFocus|GUICtrlButton_SetImage|GUICtrlButton_SetImageList|GUICtrlButton_SetSize|GUICtrlButton_SetState|GUICtrlButton_SetStyle|GUICtrlButton_SetText|GUICtrlButton_SetTextMargin|GUICtrlButton_Show|GUICtrlComboBox_AddDir|GUICtrlComboBox_AddString|GUICtrlComboBox_AutoComplete|GUICtrlComboBox_BeginUpdate|GUICtrlComboBox_Create|GUICtrlComboBox_DeleteString|GUICtrlComboBox_Destroy|GUICtrlComboBox_EndUpdate|GUICtrlComboBox_FindString|GUICtrlComboBox_FindStringExact|GUICtrlComboBox_GetComboBoxInfo|GUICtrlComboBox_GetCount|GUICtrlComboBox_GetCurSel|GUICtrlComboBox_GetDroppedControlRect|GUICtrlComboBox_GetDroppedControlRectEx|GUICtrlComboBox_GetDroppedState|GUICtrlComboBox_GetDroppedWidth|GUICtrlComboBox_GetEditSel|GUICtrlComboBox_GetEditText|GUICtrlComboBox_GetExtendedUI|GUICtrlComboBox_GetHorizontalExtent|GUICtrlComboBox_GetItemHeight|GUICtrlComboBox_GetLBText|GUICtrlComboBox_GetLBTextLen|GUICtrlComboBox_GetList|GUICtrlComboBox_GetListArray|GUICtrlComboBox_GetLocale|GUICtrlComboBox_GetLocaleCountry|GUICtrlComboBox_GetLocaleLang|GUICtrlComboBox_GetLocalePrimLang|GUICtrlComboBox_GetLocaleSubLang|GUICtrlComboBox_GetMinVisible|GUICtrlComboBox_GetTopIndex|GUICtrlComboBox_InitStorage|GUICtrlComboBox_InsertString|GUICtrlComboBox_LimitText|GUICtrlComboBox_ReplaceEditSel|GUICtrlComboBox_ResetContent|GUICtrlComboBox_SelectString|GUICtrlComboBox_SetCurSel|GUICtrlComboBox_SetDroppedWidth|GUICtrlComboBox_SetEditSel|GUICtrlComboBox_SetEditText|GUICtrlComboBox_SetExtendedUI|GUICtrlComboBox_SetHorizontalExtent|GUICtrlComboBox_SetItemHeight|GUICtrlComboBox_SetMinVisible|GUICtrlComboBox_SetTopIndex|GUICtrlComboBox_ShowDropDown|GUICtrlComboBoxEx_AddDir|GUICtrlComboBoxEx_AddString|GUICtrlComboBoxEx_BeginUpdate|GUICtrlComboBoxEx_Create|GUICtrlComboBoxEx_CreateSolidBitMap|GUICtrlComboBoxEx_DeleteString|GUICtrlComboBoxEx_Destroy|GUICtrlComboBoxEx_EndUpdate|GUICtrlComboBoxEx_FindStringExact|GUICtrlComboBoxEx_GetComboBoxInfo|GUICtrlComboBoxEx_GetComboControl|GUICtrlComboBoxEx_GetCount|GUICtrlComboBoxEx_GetCurSel|GUICtrlComboBoxEx_GetDroppedControlRect|GUICtrlComboBoxEx_GetDroppedControlRectEx|GUICtrlComboBoxEx_GetDroppedState|GUICtrlComboBoxEx_GetDroppedWidth|GUICtrlComboBoxEx_GetEditControl|GUICtrlComboBoxEx_GetEditSel|GUICtrlComboBoxEx_GetEditText|GUICtrlComboBoxEx_GetExtendedStyle|GUICtrlComboBoxEx_GetExtendedUI|GUICtrlComboBoxEx_GetImageList|GUICtrlComboBoxEx_GetItem|GUICtrlComboBoxEx_GetItemEx|GUICtrlComboBoxEx_GetItemHeight|GUICtrlComboBoxEx_GetItemImage|GUICtrlComboBoxEx_GetItemIndent|GUICtrlComboBoxEx_GetItemOverlayImage|GUICtrlComboBoxEx_GetItemParam|GUICtrlComboBoxEx_GetItemSelectedImage|GUICtrlComboBoxEx_GetItemText|GUICtrlComboBoxEx_GetItemTextLen|GUICtrlComboBoxEx_GetList|GUICtrlComboBoxEx_GetListArray|GUICtrlComboBoxEx_GetLocale|GUICtrlComboBoxEx_GetLocaleCountry|GUICtrlComboBoxEx_GetLocaleLang|GUICtrlComboBoxEx_GetLocalePrimLang|GUICtrlComboBoxEx_GetLocaleSubLang|GUICtrlComboBoxEx_GetMinVisible|GUICtrlComboBoxEx_GetTopIndex|GUICtrlComboBoxEx_InitStorage|GUICtrlComboBoxEx_InsertString|GUICtrlComboBoxEx_LimitText|GUICtrlComboBoxEx_ReplaceEditSel|GUICtrlComboBoxEx_ResetContent|GUICtrlComboBoxEx_SetCurSel|GUICtrlComboBoxEx_SetDroppedWidth|GUICtrlComboBoxEx_SetEditSel|GUICtrlComboBoxEx_SetEditText|GUICtrlComboBoxEx_SetExtendedStyle|GUICtrlComboBoxEx_SetExtendedUI|GUICtrlComboBoxEx_SetImageList|GUICtrlComboBoxEx_SetItem|GUICtrlComboBoxEx_SetItemEx|GUICtrlComboBoxEx_SetItemHeight|GUICtrlComboBoxEx_SetItemImage|GUICtrlComboBoxEx_SetItemIndent|GUICtrlComboBoxEx_SetItemOverlayImage|GUICtrlComboBoxEx_SetItemParam|GUICtrlComboBoxEx_SetItemSelectedImage|GUICtrlComboBoxEx_SetMinVisible|GUICtrlComboBoxEx_SetTopIndex|GUICtrlComboBoxEx_ShowDropDown|GUICtrlDTP_Create|GUICtrlDTP_Destroy|GUICtrlDTP_GetMCColor|GUICtrlDTP_GetMCFont|GUICtrlDTP_GetMonthCal|GUICtrlDTP_GetRange|GUICtrlDTP_GetRangeEx|GUICtrlDTP_GetSystemTime|GUICtrlDTP_GetSystemTimeEx|GUICtrlDTP_SetFormat|GUICtrlDTP_SetMCColor|GUICtrlDTP_SetMCFont|GUICtrlDTP_SetRange|GUICtrlDTP_SetRangeEx|GUICtrlDTP_SetSystemTime|GUICtrlDTP_SetSystemTimeEx|GUICtrlEdit_AppendText|GUICtrlEdit_BeginUpdate|GUICtrlEdit_CanUndo|GUICtrlEdit_CharFromPos|GUICtrlEdit_Create|GUICtrlEdit_Destroy|GUICtrlEdit_EmptyUndoBuffer|GUICtrlEdit_EndUpdate|GUICtrlEdit_Find|GUICtrlEdit_FmtLines|GUICtrlEdit_GetFirstVisibleLine|GUICtrlEdit_GetLimitText|GUICtrlEdit_GetLine|GUICtrlEdit_GetLineCount|GUICtrlEdit_GetMargins|GUICtrlEdit_GetModify|GUICtrlEdit_GetPasswordChar|GUICtrlEdit_GetRECT|GUICtrlEdit_GetRECTEx|GUICtrlEdit_GetSel|GUICtrlEdit_GetText|GUICtrlEdit_GetTextLen|GUICtrlEdit_HideBalloonTip|GUICtrlEdit_InsertText|GUICtrlEdit_LineFromChar|GUICtrlEdit_LineIndex|GUICtrlEdit_LineLength|GUICtrlEdit_LineScroll|GUICtrlEdit_PosFromChar|GUICtrlEdit_ReplaceSel|GUICtrlEdit_Scroll|GUICtrlEdit_SetLimitText|GUICtrlEdit_SetMargins|GUICtrlEdit_SetModify|GUICtrlEdit_SetPasswordChar|GUICtrlEdit_SetReadOnly|GUICtrlEdit_SetRECT|GUICtrlEdit_SetRECTEx|GUICtrlEdit_SetRECTNP|GUICtrlEdit_SetRectNPEx|GUICtrlEdit_SetSel|GUICtrlEdit_SetTabStops|GUICtrlEdit_SetText|GUICtrlEdit_ShowBalloonTip|GUICtrlEdit_Undo|GUICtrlHeader_AddItem|GUICtrlHeader_ClearFilter|GUICtrlHeader_ClearFilterAll|GUICtrlHeader_Create|GUICtrlHeader_CreateDragImage|GUICtrlHeader_DeleteItem|GUICtrlHeader_Destroy|GUICtrlHeader_EditFilter|GUICtrlHeader_GetBitmapMargin|GUICtrlHeader_GetImageList|GUICtrlHeader_GetItem|GUICtrlHeader_GetItemAlign|GUICtrlHeader_GetItemBitmap|GUICtrlHeader_GetItemCount|GUICtrlHeader_GetItemDisplay|GUICtrlHeader_GetItemFlags|GUICtrlHeader_GetItemFormat|GUICtrlHeader_GetItemImage|GUICtrlHeader_GetItemOrder|GUICtrlHeader_GetItemParam|GUICtrlHeader_GetItemRect|GUICtrlHeader_GetItemRectEx|GUICtrlHeader_GetItemText|GUICtrlHeader_GetItemWidth|GUICtrlHeader_GetOrderArray|GUICtrlHeader_GetUnicodeFormat|GUICtrlHeader_HitTest|GUICtrlHeader_InsertItem|GUICtrlHeader_Layout|GUICtrlHeader_OrderToIndex|GUICtrlHeader_SetBitmapMargin|GUICtrlHeader_SetFilterChangeTimeout|GUICtrlHeader_SetHotDivider|GUICtrlHeader_SetImageList|GUICtrlHeader_SetItem|GUICtrlHeader_SetItemAlign|GUICtrlHeader_SetItemBitmap|GUICtrlHeader_SetItemDisplay|GUICtrlHeader_SetItemFlags|GUICtrlHeader_SetItemFormat|GUICtrlHeader_SetItemImage|GUICtrlHeader_SetItemOrder|GUICtrlHeader_SetItemParam|GUICtrlHeader_SetItemText|GUICtrlHeader_SetItemWidth|GUICtrlHeader_SetOrderArray|GUICtrlHeader_SetUnicodeFormat|GUICtrlIpAddress_ClearAddress|GUICtrlIpAddress_Create|GUICtrlIpAddress_Destroy|GUICtrlIpAddress_Get|GUICtrlIpAddress_GetArray|GUICtrlIpAddress_GetEx|GUICtrlIpAddress_IsBlank|GUICtrlIpAddress_Set|GUICtrlIpAddress_SetArray|GUICtrlIpAddress_SetEx|GUICtrlIpAddress_SetFocus|GUICtrlIpAddress_SetFont|GUICtrlIpAddress_SetRange|GUICtrlIpAddress_ShowHide|GUICtrlListBox_AddFile|GUICtrlListBox_AddString|GUICtrlListBox_BeginUpdate|GUICtrlListBox_Create|GUICtrlListBox_DeleteString|GUICtrlListBox_Destroy|GUICtrlListBox_Dir|GUICtrlListBox_EndUpdate|GUICtrlListBox_FindInText|GUICtrlListBox_FindString|GUICtrlListBox_GetAnchorIndex|GUICtrlListBox_GetCaretIndex|GUICtrlListBox_GetCount|GUICtrlListBox_GetCurSel|GUICtrlListBox_GetHorizontalExtent|GUICtrlListBox_GetItemData|GUICtrlListBox_GetItemHeight|GUICtrlListBox_GetItemRect|GUICtrlListBox_GetItemRectEx|GUICtrlListBox_GetListBoxInfo|GUICtrlListBox_GetLocale|GUICtrlListBox_GetLocaleCountry|GUICtrlListBox_GetLocaleLang|GUICtrlListBox_GetLocalePrimLang|GUICtrlListBox_GetLocaleSubLang|GUICtrlListBox_GetSel|GUICtrlListBox_GetSelCount|GUICtrlListBox_GetSelItems|GUICtrlListBox_GetSelItemsText|GUICtrlListBox_GetText|GUICtrlListBox_GetTextLen|GUICtrlListBox_GetTopIndex|GUICtrlListBox_InitStorage|GUICtrlListBox_InsertString|GUICtrlListBox_ItemFromPoint|GUICtrlListBox_ReplaceString|GUICtrlListBox_ResetContent|GUICtrlListBox_SelectString|GUICtrlListBox_SelItemRange|GUICtrlListBox_SelItemRangeEx|GUICtrlListBox_SetAnchorIndex|GUICtrlListBox_SetCaretIndex|GUICtrlListBox_SetColumnWidth|GUICtrlListBox_SetCurSel|GUICtrlListBox_SetHorizontalExtent|GUICtrlListBox_SetItemData|GUICtrlListBox_SetItemHeight|GUICtrlListBox_SetLocale|GUICtrlListBox_SetSel|GUICtrlListBox_SetTabStops|GUICtrlListBox_SetTopIndex|GUICtrlListBox_Sort|GUICtrlListBox_SwapString|GUICtrlListBox_UpdateHScroll|GUICtrlListView_AddArray|GUICtrlListView_AddColumn|GUICtrlListView_AddItem|GUICtrlListView_AddSubItem|GUICtrlListView_ApproximateViewHeight|GUICtrlListView_ApproximateViewRect|GUICtrlListView_ApproximateViewWidth|GUICtrlListView_Arrange|GUICtrlListView_BeginUpdate|GUICtrlListView_CancelEditLabel|GUICtrlListView_ClickItem|GUICtrlListView_CopyItems|GUICtrlListView_Create|GUICtrlListView_CreateDragImage|GUICtrlListView_CreateSolidBitMap|GUICtrlListView_DeleteAllItems|GUICtrlListView_DeleteColumn|GUICtrlListView_DeleteItem|GUICtrlListView_DeleteItemsSelected|GUICtrlListView_Destroy|GUICtrlListView_DrawDragImage|GUICtrlListView_EditLabel|GUICtrlListView_EnableGroupView|GUICtrlListView_EndUpdate|GUICtrlListView_EnsureVisible|GUICtrlListView_FindInText|GUICtrlListView_FindItem|GUICtrlListView_FindNearest|GUICtrlListView_FindParam|GUICtrlListView_FindText|GUICtrlListView_GetBkColor|GUICtrlListView_GetBkImage|GUICtrlListView_GetCallbackMask|GUICtrlListView_GetColumn|GUICtrlListView_GetColumnCount|GUICtrlListView_GetColumnOrder|GUICtrlListView_GetColumnOrderArray|GUICtrlListView_GetColumnWidth|GUICtrlListView_GetCounterPage|GUICtrlListView_GetEditControl|GUICtrlListView_GetExtendedListViewStyle|GUICtrlListView_GetGroupInfo|GUICtrlListView_GetGroupViewEnabled|GUICtrlListView_GetHeader|GUICtrlListView_GetHotCursor|GUICtrlListView_GetHotItem|GUICtrlListView_GetHoverTime|GUICtrlListView_GetImageList|GUICtrlListView_GetISearchString|GUICtrlListView_GetItem|GUICtrlListView_GetItemChecked|GUICtrlListView_GetItemCount|GUICtrlListView_GetItemCut|GUICtrlListView_GetItemDropHilited|GUICtrlListView_GetItemEx|GUICtrlListView_GetItemFocused|GUICtrlListView_GetItemGroupID|GUICtrlListView_GetItemImage|GUICtrlListView_GetItemIndent|GUICtrlListView_GetItemParam|GUICtrlListView_GetItemPosition|GUICtrlListView_GetItemPositionX|GUICtrlListView_GetItemPositionY|GUICtrlListView_GetItemRect|GUICtrlListView_GetItemRectEx|GUICtrlListView_GetItemSelected|GUICtrlListView_GetItemSpacing|GUICtrlListView_GetItemSpacingX|GUICtrlListView_GetItemSpacingY|GUICtrlListView_GetItemState|GUICtrlListView_GetItemStateImage|GUICtrlListView_GetItemText|GUICtrlListView_GetItemTextArray|GUICtrlListView_GetItemTextString|GUICtrlListView_GetNextItem|GUICtrlListView_GetNumberOfWorkAreas|GUICtrlListView_GetOrigin|GUICtrlListView_GetOriginX|GUICtrlListView_GetOriginY|GUICtrlListView_GetOutlineColor|GUICtrlListView_GetSelectedColumn|GUICtrlListView_GetSelectedCount|GUICtrlListView_GetSelectedIndices|GUICtrlListView_GetSelectionMark|GUICtrlListView_GetStringWidth|GUICtrlListView_GetSubItemRect|GUICtrlListView_GetTextBkColor|GUICtrlListView_GetTextColor|GUICtrlListView_GetToolTips|GUICtrlListView_GetTopIndex|GUICtrlListView_GetUnicodeFormat|GUICtrlListView_GetView|GUICtrlListView_GetViewDetails|GUICtrlListView_GetViewLarge|GUICtrlListView_GetViewList|GUICtrlListView_GetViewRect|GUICtrlListView_GetViewSmall|GUICtrlListView_GetViewTile|GUICtrlListView_HideColumn|GUICtrlListView_HitTest|GUICtrlListView_InsertColumn|GUICtrlListView_InsertGroup|GUICtrlListView_InsertItem|GUICtrlListView_JustifyColumn|GUICtrlListView_MapIDToIndex|GUICtrlListView_MapIndexToID|GUICtrlListView_RedrawItems|GUICtrlListView_RegisterSortCallBack|GUICtrlListView_RemoveAllGroups|GUICtrlListView_RemoveGroup|GUICtrlListView_Scroll|GUICtrlListView_SetBkColor|GUICtrlListView_SetBkImage|GUICtrlListView_SetCallBackMask|GUICtrlListView_SetColumn|GUICtrlListView_SetColumnOrder|GUICtrlListView_SetColumnOrderArray|GUICtrlListView_SetColumnWidth|GUICtrlListView_SetExtendedListViewStyle|GUICtrlListView_SetGroupInfo|GUICtrlListView_SetHotItem|GUICtrlListView_SetHoverTime|GUICtrlListView_SetIconSpacing|GUICtrlListView_SetImageList|GUICtrlListView_SetItem|GUICtrlListView_SetItemChecked|GUICtrlListView_SetItemCount|GUICtrlListView_SetItemCut|GUICtrlListView_SetItemDropHilited|GUICtrlListView_SetItemEx|GUICtrlListView_SetItemFocused|GUICtrlListView_SetItemGroupID|GUICtrlListView_SetItemImage|GUICtrlListView_SetItemIndent|GUICtrlListView_SetItemParam|GUICtrlListView_SetItemPosition|GUICtrlListView_SetItemPosition32|GUICtrlListView_SetItemSelected|GUICtrlListView_SetItemState|GUICtrlListView_SetItemStateImage|GUICtrlListView_SetItemText|GUICtrlListView_SetOutlineColor|GUICtrlListView_SetSelectedColumn|GUICtrlListView_SetSelectionMark|GUICtrlListView_SetTextBkColor|GUICtrlListView_SetTextColor|GUICtrlListView_SetToolTips|GUICtrlListView_SetUnicodeFormat|GUICtrlListView_SetView|GUICtrlListView_SetWorkAreas|GUICtrlListView_SimpleSort|GUICtrlListView_SortItems|GUICtrlListView_SubItemHitTest|GUICtrlListView_UnRegisterSortCallBack|GUICtrlMenu_AddMenuItem|GUICtrlMenu_AppendMenu|GUICtrlMenu_CheckMenuItem|GUICtrlMenu_CheckRadioItem|GUICtrlMenu_CreateMenu|GUICtrlMenu_CreatePopup|GUICtrlMenu_DeleteMenu|GUICtrlMenu_DestroyMenu|GUICtrlMenu_DrawMenuBar|GUICtrlMenu_EnableMenuItem|GUICtrlMenu_FindItem|GUICtrlMenu_FindParent|GUICtrlMenu_GetItemBmp|GUICtrlMenu_GetItemBmpChecked|GUICtrlMenu_GetItemBmpUnchecked|GUICtrlMenu_GetItemChecked|GUICtrlMenu_GetItemCount|GUICtrlMenu_GetItemData|GUICtrlMenu_GetItemDefault|GUICtrlMenu_GetItemDisabled|GUICtrlMenu_GetItemEnabled|GUICtrlMenu_GetItemGrayed|GUICtrlMenu_GetItemHighlighted|GUICtrlMenu_GetItemID|GUICtrlMenu_GetItemInfo|GUICtrlMenu_GetItemRect|GUICtrlMenu_GetItemRectEx|GUICtrlMenu_GetItemState|GUICtrlMenu_GetItemStateEx|GUICtrlMenu_GetItemSubMenu|GUICtrlMenu_GetItemText|GUICtrlMenu_GetItemType|GUICtrlMenu_GetMenu|GUICtrlMenu_GetMenuBackground|GUICtrlMenu_GetMenuBarInfo|GUICtrlMenu_GetMenuContextHelpID|GUICtrlMenu_GetMenuData|GUICtrlMenu_GetMenuDefaultItem|GUICtrlMenu_GetMenuHeight|GUICtrlMenu_GetMenuInfo|GUICtrlMenu_GetMenuStyle|GUICtrlMenu_GetSystemMenu|GUICtrlMenu_InsertMenuItem|GUICtrlMenu_InsertMenuItemEx|GUICtrlMenu_IsMenu|GUICtrlMenu_LoadMenu|GUICtrlMenu_MapAccelerator|GUICtrlMenu_MenuItemFromPoint|GUICtrlMenu_RemoveMenu|GUICtrlMenu_SetItemBitmaps|GUICtrlMenu_SetItemBmp|GUICtrlMenu_SetItemBmpChecked|GUICtrlMenu_SetItemBmpUnchecked|GUICtrlMenu_SetItemChecked|GUICtrlMenu_SetItemData|GUICtrlMenu_SetItemDefault|GUICtrlMenu_SetItemDisabled|GUICtrlMenu_SetItemEnabled|GUICtrlMenu_SetItemGrayed|GUICtrlMenu_SetItemHighlighted|GUICtrlMenu_SetItemID|GUICtrlMenu_SetItemInfo|GUICtrlMenu_SetItemState|GUICtrlMenu_SetItemSubMenu|GUICtrlMenu_SetItemText|GUICtrlMenu_SetItemType|GUICtrlMenu_SetMenu|GUICtrlMenu_SetMenuBackground|GUICtrlMenu_SetMenuContextHelpID|GUICtrlMenu_SetMenuData|GUICtrlMenu_SetMenuDefaultItem|GUICtrlMenu_SetMenuHeight|GUICtrlMenu_SetMenuInfo|GUICtrlMenu_SetMenuStyle|GUICtrlMenu_TrackPopupMenu|GUICtrlMonthCal_Create|GUICtrlMonthCal_Destroy|GUICtrlMonthCal_GetColor|GUICtrlMonthCal_GetColorArray|GUICtrlMonthCal_GetCurSel|GUICtrlMonthCal_GetCurSelStr|GUICtrlMonthCal_GetFirstDOW|GUICtrlMonthCal_GetFirstDOWStr|GUICtrlMonthCal_GetMaxSelCount|GUICtrlMonthCal_GetMaxTodayWidth|GUICtrlMonthCal_GetMinReqHeight|GUICtrlMonthCal_GetMinReqRect|GUICtrlMonthCal_GetMinReqRectArray|GUICtrlMonthCal_GetMinReqWidth|GUICtrlMonthCal_GetMonthDelta|GUICtrlMonthCal_GetMonthRange|GUICtrlMonthCal_GetMonthRangeMax|GUICtrlMonthCal_GetMonthRangeMaxStr|GUICtrlMonthCal_GetMonthRangeMin|GUICtrlMonthCal_GetMonthRangeMinStr|GUICtrlMonthCal_GetMonthRangeSpan|GUICtrlMonthCal_GetRange|GUICtrlMonthCal_GetRangeMax|GUICtrlMonthCal_GetRangeMaxStr|GUICtrlMonthCal_GetRangeMin|GUICtrlMonthCal_GetRangeMinStr|GUICtrlMonthCal_GetSelRange|GUICtrlMonthCal_GetSelRangeMax|GUICtrlMonthCal_GetSelRangeMaxStr|GUICtrlMonthCal_GetSelRangeMin|GUICtrlMonthCal_GetSelRangeMinStr|GUICtrlMonthCal_GetToday|GUICtrlMonthCal_GetTodayStr|GUICtrlMonthCal_GetUnicodeFormat|GUICtrlMonthCal_HitTest|GUICtrlMonthCal_SetColor|GUICtrlMonthCal_SetCurSel|GUICtrlMonthCal_SetDayState|GUICtrlMonthCal_SetFirstDOW|GUICtrlMonthCal_SetMaxSelCount|GUICtrlMonthCal_SetMonthDelta|GUICtrlMonthCal_SetRange|GUICtrlMonthCal_SetSelRange|GUICtrlMonthCal_SetToday|GUICtrlMonthCal_SetUnicodeFormat|GUICtrlRebar_AddBand|GUICtrlRebar_AddToolBarBand|GUICtrlRebar_BeginDrag|GUICtrlRebar_Create|GUICtrlRebar_DeleteBand|GUICtrlRebar_Destroy|GUICtrlRebar_DragMove|GUICtrlRebar_EndDrag|GUICtrlRebar_GetBandBackColor|GUICtrlRebar_GetBandBorders|GUICtrlRebar_GetBandBordersEx|GUICtrlRebar_GetBandChildHandle|GUICtrlRebar_GetBandChildSize|GUICtrlRebar_GetBandCount|GUICtrlRebar_GetBandForeColor|GUICtrlRebar_GetBandHeaderSize|GUICtrlRebar_GetBandID|GUICtrlRebar_GetBandIdealSize|GUICtrlRebar_GetBandLength|GUICtrlRebar_GetBandLParam|GUICtrlRebar_GetBandMargins|GUICtrlRebar_GetBandMarginsEx|GUICtrlRebar_GetBandRect|GUICtrlRebar_GetBandRectEx|GUICtrlRebar_GetBandStyle|GUICtrlRebar_GetBandStyleBreak|GUICtrlRebar_GetBandStyleChildEdge|GUICtrlRebar_GetBandStyleFixedBMP|GUICtrlRebar_GetBandStyleFixedSize|GUICtrlRebar_GetBandStyleGripperAlways|GUICtrlRebar_GetBandStyleHidden|GUICtrlRebar_GetBandStyleHideTitle|GUICtrlRebar_GetBandStyleNoGripper|GUICtrlRebar_GetBandStyleTopAlign|GUICtrlRebar_GetBandStyleUseChevron|GUICtrlRebar_GetBandStyleVariableHeight|GUICtrlRebar_GetBandText|GUICtrlRebar_GetBarHeight|GUICtrlRebar_GetBKColor|GUICtrlRebar_GetColorScheme|GUICtrlRebar_GetRowCount|GUICtrlRebar_GetRowHeight|GUICtrlRebar_GetTextColor|GUICtrlRebar_GetToolTips|GUICtrlRebar_GetUnicodeFormat|GUICtrlRebar_HitTest|GUICtrlRebar_IDToIndex|GUICtrlRebar_MaximizeBand|GUICtrlRebar_MinimizeBand|GUICtrlRebar_MoveBand|GUICtrlRebar_SetBandBackColor|GUICtrlRebar_SetBandForeColor|GUICtrlRebar_SetBandHeaderSize|GUICtrlRebar_SetBandID|GUICtrlRebar_SetBandIdealSize|GUICtrlRebar_SetBandLength|GUICtrlRebar_SetBandLParam|GUICtrlRebar_SetBandStyle|GUICtrlRebar_SetBandStyleBreak|GUICtrlRebar_SetBandStyleChildEdge|GUICtrlRebar_SetBandStyleFixedBMP|GUICtrlRebar_SetBandStyleFixedSize|GUICtrlRebar_SetBandStyleGripperAlways|GUICtrlRebar_SetBandStyleHidden|GUICtrlRebar_SetBandStyleHideTitle|GUICtrlRebar_SetBandStyleNoGripper|GUICtrlRebar_SetBandStyleTopAlign|GUICtrlRebar_SetBandStyleUseChevron|GUICtrlRebar_SetBandStyleVariableHeight|GUICtrlRebar_SetBandText|GUICtrlRebar_SetBKColor|GUICtrlRebar_SetColorScheme|GUICtrlRebar_SetTextColor|GUICtrlRebar_SetToolTips|GUICtrlRebar_SetUnicodeFormat|GUICtrlRebar_ShowBand|GUICtrlSlider_ClearSel|GUICtrlSlider_ClearTics|GUICtrlSlider_Create|GUICtrlSlider_Destroy|GUICtrlSlider_GetBuddy|GUICtrlSlider_GetChannelRect|GUICtrlSlider_GetLineSize|GUICtrlSlider_GetNumTics|GUICtrlSlider_GetPageSize|GUICtrlSlider_GetPos|GUICtrlSlider_GetPTics|GUICtrlSlider_GetRange|GUICtrlSlider_GetRangeMax|GUICtrlSlider_GetRangeMin|GUICtrlSlider_GetSel|GUICtrlSlider_GetSelEnd|GUICtrlSlider_GetSelStart|GUICtrlSlider_GetThumbLength|GUICtrlSlider_GetThumbRect|GUICtrlSlider_GetThumbRectEx|GUICtrlSlider_GetTic|GUICtrlSlider_GetTicPos|GUICtrlSlider_GetToolTips|GUICtrlSlider_GetUnicodeFormat|GUICtrlSlider_SetBuddy|GUICtrlSlider_SetLineSize|GUICtrlSlider_SetPageSize|GUICtrlSlider_SetPos|GUICtrlSlider_SetRange|GUICtrlSlider_SetRangeMax|GUICtrlSlider_SetRangeMin|GUICtrlSlider_SetSel|GUICtrlSlider_SetSelEnd|GUICtrlSlider_SetSelStart|GUICtrlSlider_SetThumbLength|GUICtrlSlider_SetTic|GUICtrlSlider_SetTicFreq|GUICtrlSlider_SetTipSide|GUICtrlSlider_SetToolTips|GUICtrlSlider_SetUnicodeFormat|GUICtrlStatusBar_Create|GUICtrlStatusBar_Destroy|GUICtrlStatusBar_EmbedControl|GUICtrlStatusBar_GetBorders|GUICtrlStatusBar_GetBordersHorz|GUICtrlStatusBar_GetBordersRect|GUICtrlStatusBar_GetBordersVert|GUICtrlStatusBar_GetCount|GUICtrlStatusBar_GetHeight|GUICtrlStatusBar_GetIcon|GUICtrlStatusBar_GetParts|GUICtrlStatusBar_GetRect|GUICtrlStatusBar_GetRectEx|GUICtrlStatusBar_GetText|GUICtrlStatusBar_GetTextFlags|GUICtrlStatusBar_GetTextLength|GUICtrlStatusBar_GetTextLengthEx|GUICtrlStatusBar_GetTipText|GUICtrlStatusBar_GetUnicodeFormat|GUICtrlStatusBar_GetWidth|GUICtrlStatusBar_IsSimple|GUICtrlStatusBar_Resize|GUICtrlStatusBar_SetBkColor|GUICtrlStatusBar_SetIcon|GUICtrlStatusBar_SetMinHeight|GUICtrlStatusBar_SetParts|GUICtrlStatusBar_SetSimple|GUICtrlStatusBar_SetText|GUICtrlStatusBar_SetTipText|GUICtrlStatusBar_SetUnicodeFormat|GUICtrlStatusBar_ShowHide|GUICtrlTab_Create|GUICtrlTab_DeleteAllItems|GUICtrlTab_DeleteItem|GUICtrlTab_DeselectAll|GUICtrlTab_Destroy|GUICtrlTab_FindTab|GUICtrlTab_GetCurFocus|GUICtrlTab_GetCurSel|GUICtrlTab_GetDisplayRect|GUICtrlTab_GetDisplayRectEx|GUICtrlTab_GetExtendedStyle|GUICtrlTab_GetImageList|GUICtrlTab_GetItem|GUICtrlTab_GetItemCount|GUICtrlTab_GetItemImage|GUICtrlTab_GetItemParam|GUICtrlTab_GetItemRect|GUICtrlTab_GetItemRectEx|GUICtrlTab_GetItemState|GUICtrlTab_GetItemText|GUICtrlTab_GetRowCount|GUICtrlTab_GetToolTips|GUICtrlTab_GetUnicodeFormat|GUICtrlTab_HighlightItem|GUICtrlTab_HitTest|GUICtrlTab_InsertItem|GUICtrlTab_RemoveImage|GUICtrlTab_SetCurFocus|GUICtrlTab_SetCurSel|GUICtrlTab_SetExtendedStyle|GUICtrlTab_SetImageList|GUICtrlTab_SetItem|GUICtrlTab_SetItemImage|GUICtrlTab_SetItemParam|GUICtrlTab_SetItemSize|GUICtrlTab_SetItemState|GUICtrlTab_SetItemText|GUICtrlTab_SetMinTabWidth|GUICtrlTab_SetPadding|GUICtrlTab_SetToolTips|GUICtrlTab_SetUnicodeFormat|GUICtrlToolbar_AddBitmap|GUICtrlToolbar_AddButton|GUICtrlToolbar_AddButtonSep|GUICtrlToolbar_AddString|GUICtrlToolbar_ButtonCount|GUICtrlToolbar_CheckButton|GUICtrlToolbar_ClickAccel|GUICtrlToolbar_ClickButton|GUICtrlToolbar_ClickIndex|GUICtrlToolbar_CommandToIndex|GUICtrlToolbar_Create|GUICtrlToolbar_Customize|GUICtrlToolbar_DeleteButton|GUICtrlToolbar_Destroy|GUICtrlToolbar_EnableButton|GUICtrlToolbar_FindToolbar|GUICtrlToolbar_GetAnchorHighlight|GUICtrlToolbar_GetBitmapFlags|GUICtrlToolbar_GetButtonBitmap|GUICtrlToolbar_GetButtonInfo|GUICtrlToolbar_GetButtonInfoEx|GUICtrlToolbar_GetButtonParam|GUICtrlToolbar_GetButtonRect|GUICtrlToolbar_GetButtonRectEx|GUICtrlToolbar_GetButtonSize|GUICtrlToolbar_GetButtonState|GUICtrlToolbar_GetButtonStyle|GUICtrlToolbar_GetButtonText|GUICtrlToolbar_GetColorScheme|GUICtrlToolbar_GetDisabledImageList|GUICtrlToolbar_GetExtendedStyle|GUICtrlToolbar_GetHotImageList|GUICtrlToolbar_GetHotItem|GUICtrlToolbar_GetImageList|GUICtrlToolbar_GetInsertMark|GUICtrlToolbar_GetInsertMarkColor|GUICtrlToolbar_GetMaxSize|GUICtrlToolbar_GetMetrics|GUICtrlToolbar_GetPadding|GUICtrlToolbar_GetRows|GUICtrlToolbar_GetString|GUICtrlToolbar_GetStyle|GUICtrlToolbar_GetStyleAltDrag|GUICtrlToolbar_GetStyleCustomErase|GUICtrlToolbar_GetStyleFlat|GUICtrlToolbar_GetStyleList|GUICtrlToolbar_GetStyleRegisterDrop|GUICtrlToolbar_GetStyleToolTips|GUICtrlToolbar_GetStyleTransparent|GUICtrlToolbar_GetStyleWrapable|GUICtrlToolbar_GetTextRows|GUICtrlToolbar_GetToolTips|GUICtrlToolbar_GetUnicodeFormat|GUICtrlToolbar_HideButton|GUICtrlToolbar_HighlightButton|GUICtrlToolbar_HitTest|GUICtrlToolbar_IndexToCommand|GUICtrlToolbar_InsertButton|GUICtrlToolbar_InsertMarkHitTest|GUICtrlToolbar_IsButtonChecked|GUICtrlToolbar_IsButtonEnabled|GUICtrlToolbar_IsButtonHidden|GUICtrlToolbar_IsButtonHighlighted|GUICtrlToolbar_IsButtonIndeterminate|GUICtrlToolbar_IsButtonPressed|GUICtrlToolbar_LoadBitmap|GUICtrlToolbar_LoadImages|GUICtrlToolbar_MapAccelerator|GUICtrlToolbar_MoveButton|GUICtrlToolbar_PressButton|GUICtrlToolbar_SetAnchorHighlight|GUICtrlToolbar_SetBitmapSize|GUICtrlToolbar_SetButtonBitMap|GUICtrlToolbar_SetButtonInfo|GUICtrlToolbar_SetButtonInfoEx|GUICtrlToolbar_SetButtonParam|GUICtrlToolbar_SetButtonSize|GUICtrlToolbar_SetButtonState|GUICtrlToolbar_SetButtonStyle|GUICtrlToolbar_SetButtonText|GUICtrlToolbar_SetButtonWidth|GUICtrlToolbar_SetCmdID|GUICtrlToolbar_SetColorScheme|GUICtrlToolbar_SetDisabledImageList|GUICtrlToolbar_SetDrawTextFlags|GUICtrlToolbar_SetExtendedStyle|GUICtrlToolbar_SetHotImageList|GUICtrlToolbar_SetHotItem|GUICtrlToolbar_SetImageList|GUICtrlToolbar_SetIndent|GUICtrlToolbar_SetIndeterminate|GUICtrlToolbar_SetInsertMark|GUICtrlToolbar_SetInsertMarkColor|GUICtrlToolbar_SetMaxTextRows|GUICtrlToolbar_SetMetrics|GUICtrlToolbar_SetPadding|GUICtrlToolbar_SetParent|GUICtrlToolbar_SetRows|GUICtrlToolbar_SetStyle|GUICtrlToolbar_SetStyleAltDrag|GUICtrlToolbar_SetStyleCustomErase|GUICtrlToolbar_SetStyleFlat|GUICtrlToolbar_SetStyleList|GUICtrlToolbar_SetStyleRegisterDrop|GUICtrlToolbar_SetStyleToolTips|GUICtrlToolbar_SetStyleTransparent|GUICtrlToolbar_SetStyleWrapable|GUICtrlToolbar_SetToolTips|GUICtrlToolbar_SetUnicodeFormat|GUICtrlToolbar_SetWindowTheme|GUICtrlTreeView_Add|GUICtrlTreeView_AddChild|GUICtrlTreeView_AddChildFirst|GUICtrlTreeView_AddFirst|GUICtrlTreeView_BeginUpdate|GUICtrlTreeView_ClickItem|GUICtrlTreeView_Create|GUICtrlTreeView_CreateDragImage|GUICtrlTreeView_CreateSolidBitMap|GUICtrlTreeView_Delete|GUICtrlTreeView_DeleteAll|GUICtrlTreeView_DeleteChildren|GUICtrlTreeView_Destroy|GUICtrlTreeView_DisplayRect|GUICtrlTreeView_DisplayRectEx|GUICtrlTreeView_EditText|GUICtrlTreeView_EndEdit|GUICtrlTreeView_EndUpdate|GUICtrlTreeView_EnsureVisible|GUICtrlTreeView_Expand|GUICtrlTreeView_ExpandedOnce|GUICtrlTreeView_FindItem|GUICtrlTreeView_FindItemEx|GUICtrlTreeView_GetBkColor|GUICtrlTreeView_GetBold|GUICtrlTreeView_GetChecked|GUICtrlTreeView_GetChildCount|GUICtrlTreeView_GetChildren|GUICtrlTreeView_GetCount|GUICtrlTreeView_GetCut|GUICtrlTreeView_GetDropTarget|GUICtrlTreeView_GetEditControl|GUICtrlTreeView_GetExpanded|GUICtrlTreeView_GetFirstChild|GUICtrlTreeView_GetFirstItem|GUICtrlTreeView_GetFirstVisible|GUICtrlTreeView_GetFocused|GUICtrlTreeView_GetHeight|GUICtrlTreeView_GetImageIndex|GUICtrlTreeView_GetImageListIconHandle|GUICtrlTreeView_GetIndent|GUICtrlTreeView_GetInsertMarkColor|GUICtrlTreeView_GetISearchString|GUICtrlTreeView_GetItemByIndex|GUICtrlTreeView_GetItemHandle|GUICtrlTreeView_GetItemParam|GUICtrlTreeView_GetLastChild|GUICtrlTreeView_GetLineColor|GUICtrlTreeView_GetNext|GUICtrlTreeView_GetNextChild|GUICtrlTreeView_GetNextSibling|GUICtrlTreeView_GetNextVisible|GUICtrlTreeView_GetNormalImageList|GUICtrlTreeView_GetParentHandle|GUICtrlTreeView_GetParentParam|GUICtrlTreeView_GetPrev|GUICtrlTreeView_GetPrevChild|GUICtrlTreeView_GetPrevSibling|GUICtrlTreeView_GetPrevVisible|GUICtrlTreeView_GetScrollTime|GUICtrlTreeView_GetSelected|GUICtrlTreeView_GetSelectedImageIndex|GUICtrlTreeView_GetSelection|GUICtrlTreeView_GetSiblingCount|GUICtrlTreeView_GetState|GUICtrlTreeView_GetStateImageIndex|GUICtrlTreeView_GetStateImageList|GUICtrlTreeView_GetText|GUICtrlTreeView_GetTextColor|GUICtrlTreeView_GetToolTips|GUICtrlTreeView_GetTree|GUICtrlTreeView_GetUnicodeFormat|GUICtrlTreeView_GetVisible|GUICtrlTreeView_GetVisibleCount|GUICtrlTreeView_HitTest|GUICtrlTreeView_HitTestEx|GUICtrlTreeView_HitTestItem|GUICtrlTreeView_Index|GUICtrlTreeView_InsertItem|GUICtrlTreeView_IsFirstItem|GUICtrlTreeView_IsParent|GUICtrlTreeView_Level|GUICtrlTreeView_SelectItem|GUICtrlTreeView_SelectItemByIndex|GUICtrlTreeView_SetBkColor|GUICtrlTreeView_SetBold|GUICtrlTreeView_SetChecked|GUICtrlTreeView_SetCheckedByIndex|GUICtrlTreeView_SetChildren|GUICtrlTreeView_SetCut|GUICtrlTreeView_SetDropTarget|GUICtrlTreeView_SetFocused|GUICtrlTreeView_SetHeight|GUICtrlTreeView_SetIcon|GUICtrlTreeView_SetImageIndex|GUICtrlTreeView_SetIndent|GUICtrlTreeView_SetInsertMark|GUICtrlTreeView_SetInsertMarkColor|GUICtrlTreeView_SetItemHeight|GUICtrlTreeView_SetItemParam|GUICtrlTreeView_SetLineColor|GUICtrlTreeView_SetNormalImageList|GUICtrlTreeView_SetScrollTime|GUICtrlTreeView_SetSelected|GUICtrlTreeView_SetSelectedImageIndex|GUICtrlTreeView_SetState|GUICtrlTreeView_SetStateImageIndex|GUICtrlTreeView_SetStateImageList|GUICtrlTreeView_SetText|GUICtrlTreeView_SetTextColor|GUICtrlTreeView_SetToolTips|GUICtrlTreeView_SetUnicodeFormat|GUICtrlTreeView_Sort|GUIImageList_Add|GUIImageList_AddBitmap|GUIImageList_AddIcon|GUIImageList_AddMasked|GUIImageList_BeginDrag|GUIImageList_Copy|GUIImageList_Create|GUIImageList_Destroy|GUIImageList_DestroyIcon|GUIImageList_DragEnter|GUIImageList_DragLeave|GUIImageList_DragMove|GUIImageList_Draw|GUIImageList_DrawEx|GUIImageList_Duplicate|GUIImageList_EndDrag|GUIImageList_GetBkColor|GUIImageList_GetIcon|GUIImageList_GetIconHeight|GUIImageList_GetIconSize|GUIImageList_GetIconSizeEx|GUIImageList_GetIconWidth|GUIImageList_GetImageCount|GUIImageList_GetImageInfoEx|GUIImageList_Remove|GUIImageList_ReplaceIcon|GUIImageList_SetBkColor|GUIImageList_SetIconSize|GUIImageList_SetImageCount|GUIImageList_Swap|GUIScrollBars_EnableScrollBar|GUIScrollBars_GetScrollBarInfoEx|GUIScrollBars_GetScrollBarRect|GUIScrollBars_GetScrollBarRGState|GUIScrollBars_GetScrollBarXYLineButton|GUIScrollBars_GetScrollBarXYThumbBottom|GUIScrollBars_GetScrollBarXYThumbTop|GUIScrollBars_GetScrollInfo|GUIScrollBars_GetScrollInfoEx|GUIScrollBars_GetScrollInfoMax|GUIScrollBars_GetScrollInfoMin|GUIScrollBars_GetScrollInfoPage|GUIScrollBars_GetScrollInfoPos|GUIScrollBars_GetScrollInfoTrackPos|GUIScrollBars_GetScrollPos|GUIScrollBars_GetScrollRange|GUIScrollBars_Init|GUIScrollBars_ScrollWindow|GUIScrollBars_SetScrollInfo|GUIScrollBars_SetScrollInfoMax|GUIScrollBars_SetScrollInfoMin|GUIScrollBars_SetScrollInfoPage|GUIScrollBars_SetScrollInfoPos|GUIScrollBars_SetScrollRange|GUIScrollBars_ShowScrollBar|GUIToolTip_Activate|GUIToolTip_AddTool|GUIToolTip_AdjustRect|GUIToolTip_BitsToTTF|GUIToolTip_Create|GUIToolTip_DelTool|GUIToolTip_Destroy|GUIToolTip_EnumTools|GUIToolTip_GetBubbleHeight|GUIToolTip_GetBubbleSize|GUIToolTip_GetBubbleWidth|GUIToolTip_GetCurrentTool|GUIToolTip_GetDelayTime|GUIToolTip_GetMargin|GUIToolTip_GetMarginEx|GUIToolTip_GetMaxTipWidth|GUIToolTip_GetText|GUIToolTip_GetTipBkColor|GUIToolTip_GetTipTextColor|GUIToolTip_GetTitleBitMap|GUIToolTip_GetTitleText|GUIToolTip_GetToolCount|GUIToolTip_GetToolInfo|GUIToolTip_HitTest|GUIToolTip_NewToolRect|GUIToolTip_Pop|GUIToolTip_PopUp|GUIToolTip_SetDelayTime|GUIToolTip_SetMargin|GUIToolTip_SetMaxTipWidth|GUIToolTip_SetTipBkColor|GUIToolTip_SetTipTextColor|GUIToolTip_SetTitle|GUIToolTip_SetToolInfo|GUIToolTip_SetWindowTheme|GUIToolTip_ToolExists|GUIToolTip_ToolToArray|GUIToolTip_TrackActivate|GUIToolTip_TrackPosition|GUIToolTip_TTFToBits|GUIToolTip_Update|GUIToolTip_UpdateTipText|HexToString|IE_Example|IE_Introduction|IE_VersionInfo|IEAction|IEAttach|IEBodyReadHTML|IEBodyReadText|IEBodyWriteHTML|IECreate|IECreateEmbedded|IEDocGetObj|IEDocInsertHTML|IEDocInsertText|IEDocReadHTML|IEDocWriteHTML|IEErrorHandlerDeRegister|IEErrorHandlerRegister|IEErrorNotify|IEFormElementCheckBoxSelect|IEFormElementGetCollection|IEFormElementGetObjByName|IEFormElementGetValue|IEFormElementOptionSelect|IEFormElementRadioSelect|IEFormElementSetValue|IEFormGetCollection|IEFormGetObjByName|IEFormImageClick|IEFormReset|IEFormSubmit|IEFrameGetCollection|IEFrameGetObjByName|IEGetObjById|IEGetObjByName|IEHeadInsertEventScript|IEImgClick|IEImgGetCollection|IEIsFrameSet|IELinkClickByIndex|IELinkClickByText|IELinkGetCollection|IELoadWait|IELoadWaitTimeout|IENavigate|IEPropertyGet|IEPropertySet|IEQuit|IETableGetCollection|IETableWriteToArray|IETagNameAllGetCollection|IETagNameGetCollection|Iif|INetExplorerCapable|INetGetSource|INetMail|INetSmtpMail|IsPressed|MathCheckDiv|Max|MemGlobalAlloc|MemGlobalFree|MemGlobalLock|MemGlobalSize|MemGlobalUnlock|MemMoveMemory|MemMsgBox|MemShowError|MemVirtualAlloc|MemVirtualAllocEx|MemVirtualFree|MemVirtualFreeEx|Min|MouseTrap|NamedPipes_CallNamedPipe|NamedPipes_ConnectNamedPipe|NamedPipes_CreateNamedPipe|NamedPipes_CreatePipe|NamedPipes_DisconnectNamedPipe|NamedPipes_GetNamedPipeHandleState|NamedPipes_GetNamedPipeInfo|NamedPipes_PeekNamedPipe|NamedPipes_SetNamedPipeHandleState|NamedPipes_TransactNamedPipe|NamedPipes_WaitNamedPipe|Net_Share_ConnectionEnum|Net_Share_FileClose|Net_Share_FileEnum|Net_Share_FileGetInfo|Net_Share_PermStr|Net_Share_ResourceStr|Net_Share_SessionDel|Net_Share_SessionEnum|Net_Share_SessionGetInfo|Net_Share_ShareAdd|Net_Share_ShareCheck|Net_Share_ShareDel|Net_Share_ShareEnum|Net_Share_ShareGetInfo|Net_Share_ShareSetInfo|Net_Share_StatisticsGetSvr|Net_Share_StatisticsGetWrk|Now|NowCalc|NowCalcDate|NowDate|NowTime|PathFull|PathMake|PathSplit|ProcessGetName|ProcessGetPriority|Radian|ReplaceStringInFile|RunDOS|ScreenCapture_Capture|ScreenCapture_CaptureWnd|ScreenCapture_SaveImage|ScreenCapture_SetBMPFormat|ScreenCapture_SetJPGQuality|ScreenCapture_SetTIFColorDepth|ScreenCapture_SetTIFCompression|Security__AdjustTokenPrivileges|Security__GetAccountSid|Security__GetLengthSid|Security__GetTokenInformation|Security__ImpersonateSelf|Security__IsValidSid|Security__LookupAccountName|Security__LookupAccountSid|Security__LookupPrivilegeValue|Security__OpenProcessToken|Security__OpenThreadToken|Security__OpenThreadTokenEx|Security__SetPrivilege|Security__SidToStringSid|Security__SidTypeStr|Security__StringSidToSid|SendMessage|SendMessageA|SetDate|SetTime|Singleton|SoundClose|SoundLength|SoundOpen|SoundPause|SoundPlay|SoundPos|SoundResume|SoundSeek|SoundStatus|SoundStop|SQLite_Changes|SQLite_Close|SQLite_Display2DResult|SQLite_Encode|SQLite_ErrCode|SQLite_ErrMsg|SQLite_Escape|SQLite_Exec|SQLite_FetchData|SQLite_FetchNames|SQLite_GetTable|SQLite_GetTable2d|SQLite_LastInsertRowID|SQLite_LibVersion|SQLite_Open|SQLite_Query|SQLite_QueryFinalize|SQLite_QueryReset|SQLite_QuerySingleRow|SQLite_SaveMode|SQLite_SetTimeout|SQLite_Shutdown|SQLite_SQLiteExe|SQLite_Startup|SQLite_TotalChanges|StringAddComma|StringBetween|StringEncrypt|StringInsert|StringProper|StringRepeat|StringReverse|StringSplit|StringToHex|TCPIpToName|TempFile|TicksToTime|Timer_Diff|Timer_GetTimerID|Timer_Init|Timer_KillAllTimers|Timer_KillTimer|Timer_SetTimer|TimeToTicks|VersionCompare|viClose|viExecCommand|viFindGpib|viGpibBusReset|viGTL|viOpen|viSetAttribute|viSetTimeout|WeekNumberISO|WinAPI_AttachConsole|WinAPI_AttachThreadInput|WinAPI_Beep|WinAPI_BitBlt|WinAPI_CallNextHookEx|WinAPI_Check|WinAPI_ClientToScreen|WinAPI_CloseHandle|WinAPI_CommDlgExtendedError|WinAPI_CopyIcon|WinAPI_CreateBitmap|WinAPI_CreateCompatibleBitmap|WinAPI_CreateCompatibleDC|WinAPI_CreateEvent|WinAPI_CreateFile|WinAPI_CreateFont|WinAPI_CreateFontIndirect|WinAPI_CreateProcess|WinAPI_CreateSolidBitmap|WinAPI_CreateSolidBrush|WinAPI_CreateWindowEx|WinAPI_DefWindowProc|WinAPI_DeleteDC|WinAPI_DeleteObject|WinAPI_DestroyIcon|WinAPI_DestroyWindow|WinAPI_DrawEdge|WinAPI_DrawFrameControl|WinAPI_DrawIcon|WinAPI_DrawIconEx|WinAPI_DrawText|WinAPI_EnableWindow|WinAPI_EnumDisplayDevices|WinAPI_EnumWindows|WinAPI_EnumWindowsPopup|WinAPI_EnumWindowsTop|WinAPI_ExpandEnvironmentStrings|WinAPI_ExtractIconEx|WinAPI_FatalAppExit|WinAPI_FillRect|WinAPI_FindExecutable|WinAPI_FindWindow|WinAPI_FlashWindow|WinAPI_FlashWindowEx|WinAPI_FloatToInt|WinAPI_FlushFileBuffers|WinAPI_FormatMessage|WinAPI_FrameRect|WinAPI_FreeLibrary|WinAPI_GetAncestor|WinAPI_GetAsyncKeyState|WinAPI_GetClassName|WinAPI_GetClientHeight|WinAPI_GetClientRect|WinAPI_GetClientWidth|WinAPI_GetCurrentProcess|WinAPI_GetCurrentProcessID|WinAPI_GetCurrentThread|WinAPI_GetCurrentThreadId|WinAPI_GetCursorInfo|WinAPI_GetDC|WinAPI_GetDesktopWindow|WinAPI_GetDeviceCaps|WinAPI_GetDIBits|WinAPI_GetDlgCtrlID|WinAPI_GetDlgItem|WinAPI_GetFileSizeEx|WinAPI_GetFocus|WinAPI_GetForegroundWindow|WinAPI_GetIconInfo|WinAPI_GetLastError|WinAPI_GetLastErrorMessage|WinAPI_GetModuleHandle|WinAPI_GetMousePos|WinAPI_GetMousePosX|WinAPI_GetMousePosY|WinAPI_GetObject|WinAPI_GetOpenFileName|WinAPI_GetOverlappedResult|WinAPI_GetParent|WinAPI_GetProcessAffinityMask|WinAPI_GetSaveFileName|WinAPI_GetStdHandle|WinAPI_GetStockObject|WinAPI_GetSysColor|WinAPI_GetSysColorBrush|WinAPI_GetSystemMetrics|WinAPI_GetTextExtentPoint32|WinAPI_GetWindow|WinAPI_GetWindowDC|WinAPI_GetWindowHeight|WinAPI_GetWindowLong|WinAPI_GetWindowRect|WinAPI_GetWindowText|WinAPI_GetWindowThreadProcessId|WinAPI_GetWindowWidth|WinAPI_GetXYFromPoint|WinAPI_GlobalMemStatus|WinAPI_GUIDFromString|WinAPI_GUIDFromStringEx|WinAPI_HiWord|WinAPI_InProcess|WinAPI_IntToFloat|WinAPI_InvalidateRect|WinAPI_IsClassName|WinAPI_IsWindow|WinAPI_IsWindowVisible|WinAPI_LoadBitmap|WinAPI_LoadImage|WinAPI_LoadLibrary|WinAPI_LoadLibraryEx|WinAPI_LoadShell32Icon|WinAPI_LoadString|WinAPI_LocalFree|WinAPI_LoWord|WinAPI_MakeDWord|WinAPI_MAKELANGID|WinAPI_MAKELCID|WinAPI_MakeLong|WinAPI_MessageBeep|WinAPI_Mouse_Event|WinAPI_MoveWindow|WinAPI_MsgBox|WinAPI_MulDiv|WinAPI_MultiByteToWideChar|WinAPI_MultiByteToWideCharEx|WinAPI_OpenProcess|WinAPI_PointFromRect|WinAPI_PostMessage|WinAPI_PrimaryLangId|WinAPI_PtInRect|WinAPI_ReadFile|WinAPI_ReadProcessMemory|WinAPI_RectIsEmpty|WinAPI_RedrawWindow|WinAPI_RegisterWindowMessage|WinAPI_ReleaseCapture|WinAPI_ReleaseDC|WinAPI_ScreenToClient|WinAPI_SelectObject|WinAPI_SetBkColor|WinAPI_SetCapture|WinAPI_SetCursor|WinAPI_SetDefaultPrinter|WinAPI_SetDIBits|WinAPI_SetEvent|WinAPI_SetFocus|WinAPI_SetFont|WinAPI_SetHandleInformation|WinAPI_SetLastError|WinAPI_SetParent|WinAPI_SetProcessAffinityMask|WinAPI_SetSysColors|WinAPI_SetTextColor|WinAPI_SetWindowLong|WinAPI_SetWindowPos|WinAPI_SetWindowsHookEx|WinAPI_SetWindowText|WinAPI_ShowCursor|WinAPI_ShowError|WinAPI_ShowMsg|WinAPI_ShowWindow|WinAPI_StringFromGUID|WinAPI_SubLangId|WinAPI_SystemParametersInfo|WinAPI_TwipsPerPixelX|WinAPI_TwipsPerPixelY|WinAPI_UnhookWindowsHookEx|WinAPI_UpdateLayeredWindow|WinAPI_UpdateWindow|WinAPI_ValidateClassName|WinAPI_WaitForInputIdle|WinAPI_WaitForMultipleObjects|WinAPI_WaitForSingleObject|WinAPI_WideCharToMultiByte|WinAPI_WindowFromPoint|WinAPI_WriteConsole|WinAPI_WriteFile|WinAPI_WriteProcessMemory|WinNet_AddConnection|WinNet_AddConnection2|WinNet_AddConnection3|WinNet_CancelConnection|WinNet_CancelConnection2|WinNet_CloseEnum|WinNet_ConnectionDialog|WinNet_ConnectionDialog1|WinNet_DisconnectDialog|WinNet_DisconnectDialog1|WinNet_EnumResource|WinNet_GetConnection|WinNet_GetConnectionPerformance|WinNet_GetLastError|WinNet_GetNetworkInformation|WinNet_GetProviderName|WinNet_GetResourceInformation|WinNet_GetResourceParent|WinNet_GetUniversalName|WinNet_GetUser|WinNet_OpenEnum|WinNet_RestoreConnection|WinNet_UseConnection|Word_VersionInfo|WordAttach|WordCreate|WordDocAdd|WordDocAddLink|WordDocAddPicture|WordDocClose|WordDocFindReplace|WordDocGetCollection|WordDocLinkGetCollection|WordDocOpen|WordDocPrint|WordDocPropertyGet|WordDocPropertySet|WordDocSave|WordDocSaveAs|WordErrorHandlerDeRegister|WordErrorHandlerRegister|WordErrorNotify|WordMacroRun|WordPropertyGet|WordPropertySet|WordQuit|' +\n        'ce|comments-end|comments-start|cs|include|include-once|NoTrayIcon|RequireAdmin|' +\n        'AutoIt3Wrapper_Au3Check_Parameters|AutoIt3Wrapper_Au3Check_Stop_OnWarning|AutoIt3Wrapper_Change2CUI|AutoIt3Wrapper_Compression|AutoIt3Wrapper_cvsWrapper_Parameters|AutoIt3Wrapper_Icon|AutoIt3Wrapper_Outfile|AutoIt3Wrapper_Outfile_Type|AutoIt3Wrapper_Plugin_Funcs|AutoIt3Wrapper_Res_Comment|AutoIt3Wrapper_Res_Description|AutoIt3Wrapper_Res_Field|AutoIt3Wrapper_Res_File_Add|AutoIt3Wrapper_Res_Fileversion|AutoIt3Wrapper_Res_FileVersion_AutoIncrement|AutoIt3Wrapper_Res_Icon_Add|AutoIt3Wrapper_Res_Language|AutoIt3Wrapper_Res_LegalCopyright|AutoIt3Wrapper_res_requestedExecutionLevel|AutoIt3Wrapper_Res_SaveSource|AutoIt3Wrapper_Run_After|AutoIt3Wrapper_Run_Au3check|AutoIt3Wrapper_Run_Before|AutoIt3Wrapper_Run_cvsWrapper|AutoIt3Wrapper_Run_Debug_Mode|AutoIt3Wrapper_Run_Obfuscator|AutoIt3Wrapper_Run_Tidy|AutoIt3Wrapper_Tidy_Stop_OnError|AutoIt3Wrapper_UseAnsi|AutoIt3Wrapper_UseUpx|AutoIt3Wrapper_UseX64|AutoIt3Wrapper_Version|EndRegion|forceref|Obfuscator_Ignore_Funcs|Obfuscator_Ignore_Variables|Obfuscator_Parameters|Region|Tidy_Parameters';\n    var atKeywords = 'AppDataCommonDir|AppDataDir|AutoItExe|AutoItPID|AutoItUnicode|AutoItVersion|AutoItX64|COM_EventObj|CommonFilesDir|Compiled|ComputerName|ComSpec|CR|CRLF|DesktopCommonDir|DesktopDepth|DesktopDir|DesktopHeight|DesktopRefresh|DesktopWidth|DocumentsCommonDir|error|exitCode|exitMethod|extended|FavoritesCommonDir|FavoritesDir|GUI_CtrlHandle|GUI_CtrlId|GUI_DragFile|GUI_DragId|GUI_DropId|GUI_WinHandle|HomeDrive|HomePath|HomeShare|HotKeyPressed|HOUR|InetGetActive|InetGetBytesRead|IPAddress1|IPAddress2|IPAddress3|IPAddress4|KBLayout|LF|LogonDNSDomain|LogonDomain|LogonServer|MDAY|MIN|MON|MyDocumentsDir|NumParams|OSBuild|OSLang|OSServicePack|OSTYPE|OSVersion|ProcessorArch|ProgramFilesDir|ProgramsCommonDir|ProgramsDir|ScriptDir|ScriptFullPath|ScriptLineNumber|ScriptName|SEC|StartMenuCommonDir|StartMenuDir|StartupCommonDir|StartupDir|SW_DISABLE|SW_ENABLE|SW_HIDE|SW_LOCK|SW_MAXIMIZE|SW_MINIMIZE|SW_RESTORE|SW_SHOW|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWMINNOACTIVE|SW_SHOWNA|SW_SHOWNOACTIVATE|SW_SHOWNORMAL|SW_UNLOCK|SystemDir|TAB|TempDir|TRAY_ID|TrayIconFlashing|TrayIconVisible|UserName|UserProfileDir|WDAY|WindowsDir|WorkingDir|YDAY|YEAR';\n    \n    this.$rules = { start: \n       [ { token: 'comment.line.ahk', regex: '(?:^| );.*$' },\n         { token: 'comment.block.ahk',\n           regex: '/\\\\*', push: \n            [ { token: 'comment.block.ahk', regex: '\\\\*/', next: 'pop' },\n              { defaultToken: 'comment.block.ahk' } ] },\n         { token: 'doc.comment.ahk',\n           regex: '#cs', push: \n            [ { token: 'doc.comment.ahk', regex: '#ce', next: 'pop' },\n              { defaultToken: 'doc.comment.ahk' } ] },\n         { token: 'keyword.command.ahk',\n           regex: '(?:\\\\b|^)(?:allowsamelinecomments|clipboardtimeout|commentflag|errorstdout|escapechar|hotkeyinterval|hotkeymodifiertimeout|hotstring|include|includeagain|installkeybdhook|installmousehook|keyhistory|ltrim|maxhotkeysperinterval|maxmem|maxthreads|maxthreadsbuffer|maxthreadsperhotkey|noenv|notrayicon|persistent|singleinstance|usehook|winactivateforce|autotrim|blockinput|click|clipwait|continue|control|controlclick|controlfocus|controlget|controlgetfocus|controlgetpos|controlgettext|controlmove|controlsend|controlsendraw|controlsettext|coordmode|critical|detecthiddentext|detecthiddenwindows|drive|driveget|drivespacefree|edit|endrepeat|envadd|envdiv|envget|envmult|envset|envsub|envupdate|exit|exitapp|fileappend|filecopy|filecopydir|filecreatedir|filecreateshortcut|filedelete|filegetattrib|filegetshortcut|filegetsize|filegettime|filegetversion|fileinstall|filemove|filemovedir|fileread|filereadline|filerecycle|filerecycleempty|fileremovedir|fileselectfile|fileselectfolder|filesetattrib|filesettime|formattime|getkeystate|gosub|goto|groupactivate|groupadd|groupclose|groupdeactivate|gui|guicontrol|guicontrolget|hideautoitwin|hotkey|ifequal|ifexist|ifgreater|ifgreaterorequal|ifinstring|ifless|iflessorequal|ifmsgbox|ifnotequal|ifnotexist|ifnotinstring|ifwinactive|ifwinexist|ifwinnotactive|ifwinnotexist|imagesearch|inidelete|iniread|iniwrite|input|inputbox|keyhistory|keywait|listhotkeys|listlines|listvars|menu|mouseclick|mouseclickdrag|mousegetpos|mousemove|msgbox|onexit|outputdebug|pause|pixelgetcolor|pixelsearch|postmessage|process|progress|random|regdelete|regread|regwrite|reload|repeat|run|runas|runwait|send|sendevent|sendinput|sendmode|sendplay|sendmessage|sendraw|setbatchlines|setcapslockstate|setcontroldelay|setdefaultmousespeed|setenv|setformat|setkeydelay|setmousedelay|setnumlockstate|setscrolllockstate|setstorecapslockmode|settimer|settitlematchmode|setwindelay|setworkingdir|shutdown|sleep|sort|soundbeep|soundget|soundgetwavevolume|soundplay|soundset|soundsetwavevolume|splashimage|splashtextoff|splashtexton|splitpath|statusbargettext|statusbarwait|stringcasesense|stringgetpos|stringleft|stringlen|stringlower|stringmid|stringreplace|stringright|stringsplit|stringtrimleft|stringtrimright|stringupper|suspend|sysget|thread|tooltip|transform|traytip|urldownloadtofile|while|winactivate|winactivatebottom|winclose|winget|wingetactivestats|wingetactivetitle|wingetclass|wingetpos|wingettext|wingettitle|winhide|winkill|winmaximize|winmenuselectitem|winminimize|winminimizeall|winminimizeallundo|winmove|winrestore|winset|winsettitle|winshow|winwait|winwaitactive|winwaitclose|winwaitnotactive)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.ahk',\n           regex: '(?:\\\\b|^)(?:if|else|return|loop|break|for|while|global|local|byref)\\\\b',\n           caseInsensitive: true },\n         { token: 'support.function.ahk',\n           regex: '(?:\\\\b|^)(?:abs|acos|asc|asin|atan|ceil|chr|cos|dllcall|exp|fileexist|floor|getkeystate|il_add|il_create|il_destroy|instr|substr|isfunc|islabel|ln|log|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|onmessage|numget|numput|registercallback|regexmatch|regexreplace|round|sin|tan|sqrt|strlen|sb_seticon|sb_setparts|sb_settext|tv_add|tv_delete|tv_getchild|tv_getcount|tv_getnext|tv_get|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist)\\\\b',\n           caseInsensitive: true },\n         { token: 'variable.predefined.ahk',\n           regex: '(?:\\\\b|^)(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_formatfloat|a_formatinteger|a_gui|a_guievent|a_guicontrol|a_guicontrolevent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|programfiles|a_programfiles|a_programs|a_programscommon|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel)\\\\b',\n           caseInsensitive: true },\n         { token: 'support.constant.ahk',\n           regex: '(?:\\\\b|^)(?:shift|lshift|rshift|alt|lalt|ralt|control|lcontrol|rcontrol|ctrl|lctrl|rctrl|lwin|rwin|appskey|altdown|altup|shiftdown|shiftup|ctrldown|ctrlup|lwindown|lwinup|rwindown|rwinup|lbutton|rbutton|mbutton|wheelup|wheelleft|wheelright|wheeldown|xbutton1|xbutton2|joy1|joy2|joy3|joy4|joy5|joy6|joy7|joy8|joy9|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy30|joy31|joy32|joyx|joyy|joyz|joyr|joyu|joyv|joypov|joyname|joybuttons|joyaxes|joyinfo|space|tab|enter|escape|esc|backspace|bs|delete|del|insert|ins|pgup|pgdn|home|end|up|down|left|right|printscreen|ctrlbreak|pause|scrolllock|capslock|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadmult|numpadadd|numpadsub|numpaddiv|numpaddot|numpaddel|numpadins|numpadclear|numpadup|numpaddown|numpadleft|numpadright|numpadhome|numpadend|numpadpgup|numpadpgdn|numpadenter|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f20|f21|f22|f23|f24|browser_back|browser_forward|browser_refresh|browser_stop|browser_search|browser_favorites|browser_home|volume_mute|volume_down|volume_up|media_next|media_prev|media_stop|media_play_pause|launch_mail|launch_media|launch_app1|launch_app2)\\\\b',\n           caseInsensitive: true },\n         { token: 'variable.parameter',\n           regex: '(?:\\\\b|^)(?:pixel|mouse|screen|relative|rgb|ltrim|rtrim|join|low|belownormal|normal|abovenormal|high|realtime|ahk_id|ahk_pid|ahk_class|ahk_group|between|contains|in|is|integer|float|integerfast|floatfast|number|digit|xdigit|alpha|upper|lower|alnum|time|date|not|or|and|alwaysontop|topmost|top|bottom|transparent|transcolor|redraw|region|id|idlast|processname|minmax|controllist|count|list|capacity|statuscd|eject|lock|unlock|label|filesystem|label|setlabel|serial|type|status|static|seconds|minutes|hours|days|read|parse|logoff|close|error|single|tray|add|rename|check|uncheck|togglecheck|enable|disable|toggleenable|default|nodefault|standard|nostandard|color|delete|deleteall|icon|noicon|tip|click|show|mainwindow|nomainwindow|useerrorlevel|text|picture|pic|groupbox|button|checkbox|radio|dropdownlist|ddl|combobox|listbox|listview|datetime|monthcal|updown|slider|tab|tab2|statusbar|treeview|iconsmall|tile|report|sortdesc|nosort|nosorthdr|grid|hdr|autosize|range|xm|ym|ys|xs|xp|yp|font|resize|owner|submit|nohide|minimize|maximize|restore|noactivate|na|cancel|destroy|center|margin|maxsize|minsize|owndialogs|guiescape|guiclose|guisize|guicontextmenu|guidropfiles|tabstop|section|altsubmit|wrap|hscroll|vscroll|border|top|bottom|buttons|expand|first|imagelist|lines|wantctrla|wantf2|vis|visfirst|number|uppercase|lowercase|limit|password|multi|wantreturn|group|background|bold|italic|strike|underline|norm|backgroundtrans|theme|caption|delimiter|minimizebox|maximizebox|sysmenu|toolwindow|flash|style|exstyle|check3|checked|checkedgray|readonly|password|hidden|left|right|center|notab|section|move|focus|hide|choose|choosestring|text|pos|enabled|disabled|visible|lastfound|lastfoundexist|alttab|shiftalttab|alttabmenu|alttabandmenu|alttabmenudismiss|notimers|interrupt|priority|waitclose|blind|raw|unicode|deref|pow|bitnot|bitand|bitor|bitxor|bitshiftleft|bitshiftright|yes|no|ok|cancel|abort|retry|ignore|tryagain|on|off|all|hkey_local_machine|hkey_users|hkey_current_user|hkey_classes_root|hkey_current_config|hklm|hku|hkcu|hkcr|hkcc|reg_sz|reg_expand_sz|reg_multi_sz|reg_dword|reg_qword|reg_binary|reg_link|reg_resource_list|reg_full_resource_descriptor|reg_resource_requirements_list|reg_dword_big_endian)\\\\b',\n           caseInsensitive: true },\n         { keywordMap: {\"constant.language\": autoItKeywords}, regex: '\\\\w+\\\\b'},\n         { keywordMap: {\"variable.function\": atKeywords}, regex: '@\\\\w+\\\\b'},\n         { token : \"constant.numeric\", regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},\n         { token: 'keyword.operator.ahk',\n           regex: '=|==|<>|:=|<|>|\\\\*|\\\\/|\\\\+|:|\\\\?|\\\\-' },\n         { token: 'punctuation.ahk',\n           regex: '#|`|::|,|\\\\{|\\\\}|\\\\(|\\\\)|\\\\%' },\n         { token: \n            [ 'punctuation.quote.double',\n              'string.quoted.ahk',\n              'punctuation.quote.double' ],\n           regex: '(\")((?:[^\"]|\"\")*)(\")' },\n         { token: [ 'label.ahk', 'punctuation.definition.label.ahk' ],\n           regex: '^([^: ]+)(:)(?!:)' } ] };\n    \n    this.normalizeRules();\n};\n\nAutoHotKeyHighlightRules.metaData = { name: 'AutoHotKey',\n      scopeName: 'source.ahk',\n      fileTypes: [ 'ahk' ],\n      foldingStartMarker: '^\\\\s*/\\\\*|^(?![^{]*?;|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|;|/\\\\*(?!.*?\\\\*/.*\\\\S))',\n      foldingStopMarker: '^\\\\s*\\\\*/|^\\\\s*\\\\}' };\n\n\noop.inherits(AutoHotKeyHighlightRules, TextHighlightRules);\n\nexports.AutoHotKeyHighlightRules = AutoHotKeyHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/autohotkey\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/autohotkey_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AutoHotKeyHighlightRules = require(\"./autohotkey_highlight_rules\").AutoHotKeyHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AutoHotKeyHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \";\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/autohotkey\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-batchfile.js",
    "content": "define(\"ace/mode/batchfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar BatchFileHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'keyword.command.dosbatch',\n           regex: '\\\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.statement.dosbatch',\n           regex: '\\\\b(?:goto|call|exit)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.conditional.if.dosbatch',\n           regex: '\\\\bif\\\\s+not\\\\s+(?:exist|defined|errorlevel|cmdextversion)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.conditional.dosbatch',\n           regex: '\\\\b(?:if|else)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.repeat.dosbatch',\n           regex: '\\\\bfor\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.operator.dosbatch',\n           regex: '\\\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\\\b' },\n         { token: ['doc.comment', 'comment'],\n           regex: '(?:^|\\\\b)(rem)($|\\\\s.*$)',\n           caseInsensitive: true },\n         { token: 'comment.line.colons.dosbatch',\n           regex: '::.*$' },\n         { include: 'variable' },\n         { token: 'punctuation.definition.string.begin.shell',\n           regex: '\"',\n           push: [ \n              { token: 'punctuation.definition.string.end.shell', regex: '\"', next: 'pop' },\n              { include: 'variable' },\n              { defaultToken: 'string.quoted.double.dosbatch' } ] },\n         { token: 'keyword.operator.pipe.dosbatch', regex: '[|]' },\n         { token: 'keyword.operator.redirect.shell',\n           regex: '&>|\\\\d*>&\\\\d*|\\\\d*(?:>>|>|<)|\\\\d*<&|\\\\d*<>' } ],\n        variable: [\n         { token: 'constant.numeric', regex: '%%\\\\w+|%[*\\\\d]|%\\\\w+%'},\n         { token: 'constant.numeric', regex: '%~\\\\d+'},\n         { token: ['markup.list', 'constant.other', 'markup.list'],\n            regex: '(%)(\\\\w+)(%?)' }]};\n    \n    this.normalizeRules();\n};\n\nBatchFileHighlightRules.metaData = { name: 'Batch File',\n      scopeName: 'source.dosbatch',\n      fileTypes: [ 'bat' ] };\n\n\noop.inherits(BatchFileHighlightRules, TextHighlightRules);\n\nexports.BatchFileHighlightRules = BatchFileHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/batchfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/batchfile_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar BatchFileHighlightRules = require(\"./batchfile_highlight_rules\").BatchFileHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = BatchFileHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"::\";\n    this.blockComment = \"\";\n    this.$id = \"ace/mode/batchfile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-bro.js",
    "content": "define(\"ace/mode/bro_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar BroHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"punctuation.definition.comment.bro\",\n            regex: /#/,\n            push: [{\n                token: \"comment.line.number-sign.bro\",\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.line.number-sign.bro\"\n            }]\n        }, {\n            token: \"keyword.control.bro\",\n            regex: /\\b(?:break|case|continue|else|for|if|return|switch|next|when|timeout|schedule)\\b/\n        }, {\n            token: [\n                \"meta.function.bro\",\n                \"meta.function.bro\",\n                \"storage.type.bro\",\n                \"meta.function.bro\",\n                \"entity.name.function.bro\",\n                \"meta.function.bro\"\n            ],\n            regex: /^(\\s*)(?:function|hook|event)(\\s*)(.*)(\\s*\\()(.*)(\\).*$)/\n        }, {\n            token: \"storage.type.bro\",\n            regex: /\\b(?:bool|enum|double|int|count|port|addr|subnet|any|file|interval|time|string|table|vector|set|record|pattern|hook)\\b/\n        }, {\n            token: \"storage.modifier.bro\",\n            regex: /\\b(?:global|const|redef|local|&(?:optional|rotate_interval|rotate_size|add_func|del_func|expire_func|expire_create|expire_read|expire_write|persistent|synchronized|encrypt|mergeable|priority|group|type_column|log|error_handler))\\b/\n        }, {\n            token: \"keyword.operator.bro\",\n            regex: /\\s*(?:\\||&&|(?:>|<|!)=?|==)\\s*|\\b!?in\\b/\n        }, {\n            token: \"constant.language.bro\",\n            regex: /\\b(?:T|F)\\b/\n        }, {\n            token: \"constant.numeric.bro\",\n            regex: /\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:\\/(?:tcp|udp|icmp)|\\s*(?:u?sec|min|hr|day)s?)?\\b/\n        }, {\n            token: \"punctuation.definition.string.begin.bro\",\n            regex: /\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.bro\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                include: \"#string_escaped_char\"\n            }, {\n                include: \"#string_placeholder\"\n            }, {\n                defaultToken: \"string.quoted.double.bro\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.bro\",\n            regex: /\\//,\n            push: [{\n                token: \"punctuation.definition.string.end.bro\",\n                regex: /\\//,\n                next: \"pop\"\n            }, {\n                include: \"#string_escaped_char\"\n            }, {\n                include: \"#string_placeholder\"\n            }, {\n                defaultToken: \"string.quoted.regex.bro\"\n            }]\n        }, {\n            token: [\n                \"meta.preprocessor.bro.load\",\n                \"keyword.other.special-method.bro\"\n            ],\n            regex: /^(\\s*)(\\@load(?:-sigs)?)\\b/,\n            push: [{\n                token: [],\n                regex: /(?=\\#)|$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"meta.preprocessor.bro.load\"\n            }]\n        }, {\n            token: [\n                \"meta.preprocessor.bro.if\",\n                \"keyword.other.special-method.bro\",\n                \"meta.preprocessor.bro.if\"\n            ],\n            regex: /^(\\s*)(\\@endif|\\@if(?:n?def)?)(.*$)/,\n            push: [{\n                token: [],\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"meta.preprocessor.bro.if\"\n            }]\n        }],\n        \"#disabled\": [{\n            token: \"text\",\n            regex: /^\\s*\\@if(?:n?def)?\\b.*$/,\n            push: [{\n                token: \"text\",\n                regex: /^\\s*\\@endif\\b.*$/,\n                next: \"pop\"\n            }, {\n                include: \"#disabled\"\n            }, {\n                include: \"#pragma-mark\"\n            }],\n            comment: \"eat nested preprocessor ifdefs\"\n        }],\n        \"#preprocessor-rule-other\": [{\n            token: [\n                \"text\",\n                \"meta.preprocessor.bro\",\n                \"meta.preprocessor.bro\",\n                \"text\"\n            ],\n            regex: /^(\\s*)(@if)((?:n?def)?)\\b(.*?)(?:(?=)|$)/,\n            push: [{\n                token: [\"text\", \"meta.preprocessor.bro\", \"text\"],\n                regex: /^(\\s*)(@endif)\\b(.*$)/,\n                next: \"pop\"\n            }, {\n                include: \"$base\"\n            }]\n        }],\n        \"#string_escaped_char\": [{\n            token: \"constant.character.escape.bro\",\n            regex: /\\\\(?:\\\\|[abefnprtv'\"?]|[0-3]\\d{,2}|[4-7]\\d?|x[a-fA-F0-9]{,2})/\n        }, {\n            token: \"invalid.illegal.unknown-escape.bro\",\n            regex: /\\\\./\n        }],\n        \"#string_placeholder\": [{\n            token: \"constant.other.placeholder.bro\",\n            regex: /%(?:\\d+\\$)?[#0\\- +']*[,;:_]?(?:-?\\d+|\\*(?:-?\\d+\\$)?)?(?:\\.(?:-?\\d+|\\*(?:-?\\d+\\$)?)?)?(?:hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?[diouxXDOUeEfFgGaACcSspn%]/\n        }, {\n            token: \"invalid.illegal.placeholder.bro\",\n            regex: /%/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nBroHighlightRules.metaData = {\n    fileTypes: [\"bro\"],\n    foldingStartMarker: \"^(\\\\@if(n?def)?)\",\n    foldingStopMarker: \"^\\\\@endif\",\n    keyEquivalent: \"@B\",\n    name: \"Bro\",\n    scopeName: \"source.bro\"\n};\n\n\noop.inherits(BroHighlightRules, TextHighlightRules);\n\nexports.BroHighlightRules = BroHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/bro\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/bro_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar BroHighlightRules = require(\"./bro_highlight_rules\").BroHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = BroHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/bro\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/bro\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-c9search.js",
    "content": "define(\"ace/mode/c9search_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nfunction safeCreateRegexp(source, flag) {\n    try {\n        return new RegExp(source, flag);\n    } catch(e) {}\n}\n\nvar C9SearchHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                tokenNames : [\"c9searchresults.constant.numeric\", \"c9searchresults.text\", \"c9searchresults.text\", \"c9searchresults.keyword\"],\n                regex : /(^\\s+[0-9]+)(:)(\\d*\\s?)([^\\r\\n]+)/,\n                onMatch : function(val, state, stack) {\n                    var values = this.splitRegex.exec(val);\n                    var types = this.tokenNames;\n                    var tokens = [{\n                        type: types[0],\n                        value: values[1]\n                    }, {\n                        type: types[1],\n                        value: values[2]\n                    }];\n                    \n                    if (values[3]) {\n                        if (values[3] == \" \")\n                            tokens[1] = { type: types[1], value: values[2] + \" \" };\n                        else\n                            tokens.push({ type: types[1], value: values[3] });\n                    }\n                    var regex = stack[1];\n                    var str = values[4];\n                    \n                    var m;\n                    var last = 0;\n                    if (regex && regex.exec) {\n                        regex.lastIndex = 0;\n                        while (m = regex.exec(str)) {\n                            var skipped = str.substring(last, m.index);\n                            last = regex.lastIndex;\n                            if (skipped)\n                                tokens.push({type: types[2], value: skipped});\n                            if (m[0])\n                                tokens.push({type: types[3], value: m[0]});\n                            else if (!skipped)\n                                break;\n                        }\n                    }\n                    if (last < str.length)\n                        tokens.push({type: types[2], value: str.substr(last)});\n                    return tokens;\n                }\n            },\n            {\n                regex : \"^Searching for [^\\\\r\\\\n]*$\",\n                onMatch: function(val, state, stack) {\n                    var parts = val.split(\"\\x01\");\n                    if (parts.length < 3)\n                        return \"text\";\n\n                    var options, search;\n                    \n                    var i = 0;\n                    var tokens = [{\n                        value: parts[i++] + \"'\",\n                        type: \"text\"\n                    }, {\n                        value: search = parts[i++],\n                        type: \"text\" // \"c9searchresults.keyword\"\n                    }, {\n                        value: \"'\" + parts[i++],\n                        type: \"text\"\n                    }];\n                    if (parts[2] !== \" in\") {\n                        tokens.push({\n                            value: \"'\" + parts[i++] + \"'\",\n                            type: \"text\"\n                        }, {\n                            value: parts[i++],\n                            type: \"text\"\n                        });\n                    }\n                    tokens.push({\n                        value: \" \" + parts[i++] + \" \",\n                        type: \"text\"\n                    });\n                    if (parts[i+1]) {\n                        options = parts[i+1];\n                        tokens.push({\n                            value: \"(\" + parts[i+1] + \")\",\n                            type: \"text\"\n                        });\n                        i += 1;\n                    } else {\n                        i -= 1;\n                    }\n                    while (i++ < parts.length) {\n                        parts[i] && tokens.push({\n                            value: parts[i],\n                            type: \"text\"\n                        });\n                    }\n                    \n                    if (search) {\n                        if (!/regex/.test(options))\n                            search = lang.escapeRegExp(search);\n                        if (/whole/.test(options))\n                            search = \"\\\\b\" + search + \"\\\\b\";\n                    }\n                    \n                    var regex = search && safeCreateRegexp(\n                        \"(\" + search + \")\",\n                        / sensitive/.test(options) ? \"g\" : \"ig\"\n                    );\n                    if (regex) {\n                        stack[0] = state;\n                        stack[1] = regex;\n                    }\n                    \n                    return tokens;\n                }\n            },\n            {\n                regex : \"^(?=Found \\\\d+ matches)\",\n                token : \"text\",\n                next : \"numbers\"\n            },\n            {\n                token : \"string\", // single line\n                regex : \"^\\\\S:?[^:]+\",\n                next : \"numbers\"\n            }\n        ],\n        numbers:[{\n            regex : \"\\\\d+\",\n            token : \"constant.numeric\"\n        }, {\n            regex : \"$\",\n            token : \"text\",\n            next : \"start\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(C9SearchHighlightRules, TextHighlightRules);\n\nexports.C9SearchHighlightRules = C9SearchHighlightRules;\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^(\\S.*:|Searching for.*)$/;\n    this.foldingStopMarker = /^(\\s+|Found.*)$/;\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var lines = session.doc.getAllLines(row);\n        var line = lines[row];\n        var level1 = /^(Found.*|Searching for.*)$/;\n        var level2 = /^(\\S.*:|\\s*)$/;\n        var re = level1.test(line) ? level1 : level2;\n        \n        var startRow = row;\n        var endRow = row;\n\n        if (this.foldingStartMarker.test(line)) {\n            for (var i = row + 1, l = session.getLength(); i < l; i++) {\n                if (re.test(lines[i]))\n                    break;\n            }\n            endRow = i;\n        }\n        else if (this.foldingStopMarker.test(line)) {\n            for (var i = row - 1; i >= 0; i--) {\n                line = lines[i];\n                if (re.test(line))\n                    break;\n            }\n            startRow = i;\n        }\n        if (startRow != endRow) {\n            var col = line.length;\n            if (re === level1)\n                col = line.search(/\\(Found[^)]+\\)$|$/);\n            return new Range(startRow, col, endRow, 0);\n        }\n    };\n    \n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c9search_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/c9search\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar C9SearchHighlightRules = require(\"./c9search_highlight_rules\").C9SearchHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar C9StyleFoldMode = require(\"./folding/c9search\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = C9SearchHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new C9StyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c9search\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-c_cpp.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-cirru.js",
    "content": "define(\"ace/mode/cirru_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CirruHighlightRules = function() {\n    this.$rules = {\n        start: [{\n            token: 'constant.numeric',\n            regex: /[\\d\\.]+/\n        }, {\n            token: 'comment.line.double-dash',\n            regex: /--/,\n            next: 'comment'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\(/\n        }, {\n            token: 'storage.modifier',\n            regex: /,/,\n            next: 'line'\n        }, {\n            token: 'support.function',\n            regex: /[^\\(\\)\"\\s]+/,\n            next: 'line'\n        }, {\n            token: 'string.quoted.double',\n            regex: /\"/,\n            next: 'string'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\)/\n        }],\n        comment: [{\n            token: 'comment.line.double-dash',\n            regex: / +[^\\n]+/,\n            next: 'start'\n        }],\n        string: [{\n            token: 'string.quoted.double',\n            regex: /\"/,\n            next: 'line'\n        }, {\n            token: 'constant.character.escape',\n            regex: /\\\\/,\n            next: 'escape'\n        }, {\n            token: 'string.quoted.double',\n            regex: /[^\\\\\"]+/\n        }],\n        escape: [{\n            token: 'constant.character.escape',\n            regex: /./,\n            next: 'string'\n        }],\n        line: [{\n            token: 'constant.numeric',\n            regex: /[\\d\\.]+/\n        }, {\n            token: 'markup.raw',\n            regex: /^\\s*/,\n            next: 'start'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\$/,\n            next: 'start'\n        }, {\n            token: 'variable.parameter',\n            regex: /[^\\(\\)\"\\s]+/\n        }, {\n            token: 'storage.modifier',\n            regex: /\\(/,\n            next: 'start'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\)/\n        }, {\n            token: 'markup.raw',\n            regex: /^ */,\n            next: 'start'\n        }, {\n            token: 'string.quoted.double',\n            regex: /\"/,\n            next: 'string'\n        }]\n    };\n\n};\n\noop.inherits(CirruHighlightRules, TextHighlightRules);\n\nexports.CirruHighlightRules = CirruHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/cirru\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cirru_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CirruHighlightRules = require(\"./cirru_highlight_rules\").CirruHighlightRules;\nvar CoffeeFoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CirruHighlightRules;\n    this.foldingRules = new CoffeeFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.$id = \"ace/mode/cirru\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-clojure.js",
    "content": "define(\"ace/mode/clojure_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n\n\nvar ClojureHighlightRules = function() {\n\n    var builtinFunctions = (\n        '* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* ' +\n        '*command-line-args* *compile-files* *compile-path* *e *err* *file* ' +\n        '*flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* ' +\n        '*print-dup* *print-length* *print-level* *print-meta* *print-readably* ' +\n        '*read-eval* *source-path* *use-context-classloader* ' +\n        '*warn-on-reflection* + - -> ->> .. / < <= = ' +\n        '== > &gt; >= &gt;= accessor aclone ' +\n        'add-classpath add-watch agent agent-errors aget alength alias all-ns ' +\n        'alter alter-meta! alter-var-root amap ancestors and apply areduce ' +\n        'array-map aset aset-boolean aset-byte aset-char aset-double aset-float ' +\n        'aset-int aset-long aset-short assert assoc assoc! assoc-in associative? ' +\n        'atom await await-for await1 bases bean bigdec bigint binding bit-and ' +\n        'bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left ' +\n        'bit-shift-right bit-test bit-xor boolean boolean-array booleans ' +\n        'bound-fn bound-fn* butlast byte byte-array bytes cast char char-array ' +\n        'char-escape-string char-name-string char? chars chunk chunk-append ' +\n        'chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? ' +\n        'class class? clear-agent-errors clojure-version coll? comment commute ' +\n        'comp comparator compare compare-and-set! compile complement concat cond ' +\n        'condp conj conj! cons constantly construct-proxy contains? count ' +\n        'counted? create-ns create-struct cycle dec decimal? declare definline ' +\n        'defmacro defmethod defmulti defn defn- defonce defstruct delay delay? ' +\n        'deliver deref derive descendants destructure disj disj! dissoc dissoc! ' +\n        'distinct distinct? doall doc dorun doseq dosync dotimes doto double ' +\n        'double-array doubles drop drop-last drop-while empty empty? ensure ' +\n        'enumeration-seq eval even? every? false? ffirst file-seq filter find ' +\n        'find-doc find-ns find-var first float float-array float? floats flush ' +\n        'fn fn? fnext for force format future future-call future-cancel ' +\n        'future-cancelled? future-done? future? gen-class gen-interface gensym ' +\n        'get get-in get-method get-proxy-class get-thread-bindings get-validator ' +\n        'hash hash-map hash-set identical? identity if-let if-not ifn? import ' +\n        'in-ns inc init-proxy instance? int int-array integer? interleave intern ' +\n        'interpose into into-array ints io! isa? iterate iterator-seq juxt key ' +\n        'keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list ' +\n        'list* list? load load-file load-reader load-string loaded-libs locking ' +\n        'long long-array longs loop macroexpand macroexpand-1 make-array ' +\n        'make-hierarchy map map? mapcat max max-key memfn memoize merge ' +\n        'merge-with meta method-sig methods min min-key mod name namespace neg? ' +\n        'newline next nfirst nil? nnext not not-any? not-empty not-every? not= ' +\n        'ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ' +\n        'ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? ' +\n        'or parents partial partition pcalls peek persistent! pmap pop pop! ' +\n        'pop-thread-bindings pos? pr pr-str prefer-method prefers ' +\n        'primitives-classnames print print-ctor print-doc print-dup print-method ' +\n        'print-namespace-doc print-simple print-special-doc print-str printf ' +\n        'println println-str prn prn-str promise proxy proxy-call-with-super ' +\n        'proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot ' +\n        'rand rand-int range ratio? rational? rationalize re-find re-groups ' +\n        're-matcher re-matches re-pattern re-seq read read-line read-string ' +\n        'reduce ref ref-history-count ref-max-history ref-min-history ref-set ' +\n        'refer refer-clojure release-pending-sends rem remove remove-method ' +\n        'remove-ns remove-watch repeat repeatedly replace replicate require ' +\n        'reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq ' +\n        'rsubseq second select-keys send send-off seq seq? seque sequence ' +\n        'sequential? set set-validator! set? short short-array shorts ' +\n        'shutdown-agents slurp some sort sort-by sorted-map sorted-map-by ' +\n        'sorted-set sorted-set-by sorted? special-form-anchor special-symbol? ' +\n        'split-at split-with str stream? string? struct struct-map subs subseq ' +\n        'subvec supers swap! symbol symbol? sync syntax-symbol-anchor take ' +\n        'take-last take-nth take-while test the-ns time to-array to-array-2d ' +\n        'trampoline transient tree-seq true? type unchecked-add unchecked-dec ' +\n        'unchecked-divide unchecked-inc unchecked-multiply unchecked-negate ' +\n        'unchecked-remainder unchecked-subtract underive unquote ' +\n        'unquote-splicing update-in update-proxy use val vals var-get var-set ' +\n        'var? vary-meta vec vector vector? when when-first when-let when-not ' +\n        'while with-bindings with-bindings* with-in-str with-loading-context ' +\n        'with-local-vars with-meta with-open with-out-str with-precision xml-seq ' +\n        'zero? zipmap'\n    );\n\n    var keywords = ('throw try var ' +\n        'def do fn if let loop monitor-enter monitor-exit new quote recur set!'\n    );\n\n    var buildinConstants = (\"true false nil\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\", false, \" \");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \";.*$\"\n            }, {\n                token : \"keyword\", //parens\n                regex : \"[\\\\(|\\\\)]\"\n            }, {\n                token : \"keyword\", //lists\n                regex : \"[\\\\'\\\\(]\"\n            }, {\n                token : \"keyword\", //vectors\n                regex : \"[\\\\[|\\\\]]\"\n            }, {\n                token : \"keyword\", //sets and maps\n                regex : \"[\\\\{|\\\\}|\\\\#\\\\{|\\\\#\\\\}]\"\n            }, {\n                    token : \"keyword\", // ampersands\n                    regex : '[\\\\&]'\n            }, {\n                    token : \"keyword\", // metadata\n                    regex : '[\\\\#\\\\^\\\\{]'\n            }, {\n                    token : \"keyword\", // anonymous fn syntactic sugar\n                    regex : '[\\\\%]'\n            }, {\n                    token : \"keyword\", // deref reader macro\n                    regex : '[@]'\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language\",\n                regex : '[!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+||=|!=|<=|>=|<>|<|>|!|&&]'\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next: \"string\"\n            }, {\n                token : \"constant\", // symbol\n                regex : /:[^()\\[\\]{}'\"\\^%`,;\\s]+/\n            }, {\n                token : \"string.regexp\", //Regular Expressions\n                regex : '/#\"(?:\\\\.|(?:\\\\\")|[^\"\"\\n])*\"/g'\n            }\n\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : \"\\\\\\\\.|\\\\\\\\$\"\n            }, {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+'\n            }, {\n                token : \"string\",\n                regex : '\"',\n                next : \"start\"\n            }\n        ]\n    };\n};\n\noop.inherits(ClojureHighlightRules, TextHighlightRules);\n\nexports.ClojureHighlightRules = ClojureHighlightRules;\n});\n\ndefine(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingParensOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\)/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\))/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        var match = line.match(/^(\\s+)/);\n        if (match) {\n            return match[1];\n        }\n\n        return \"\";\n    };\n\n}).call(MatchingParensOutdent.prototype);\n\nexports.MatchingParensOutdent = MatchingParensOutdent;\n});\n\ndefine(\"ace/mode/clojure\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/clojure_highlight_rules\",\"ace/mode/matching_parens_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ClojureHighlightRules = require(\"./clojure_highlight_rules\").ClojureHighlightRules;\nvar MatchingParensOutdent = require(\"./matching_parens_outdent\").MatchingParensOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = ClojureHighlightRules;\n    this.$outdent = new MatchingParensOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.minorIndentFunctions = [\"defn\", \"defn-\", \"defmacro\", \"def\", \"deftest\", \"testing\"];\n\n    this.$toIndent = function(str) {\n        return str.split('').map(function(ch) {\n            if (/\\s/.exec(ch)) {\n                return ch;\n            } else {\n                return ' ';\n            }\n        }).join('');\n    };\n\n    this.$calculateIndent = function(line, tab) {\n        var baseIndent = this.$getIndent(line);\n        var delta = 0;\n        var isParen, ch;\n        for (var i = line.length - 1; i >= 0; i--) {\n            ch = line[i];\n            if (ch === '(') {\n                delta--;\n                isParen = true;\n            } else if (ch === '(' || ch === '[' || ch === '{') {\n                delta--;\n                isParen = false;\n            } else if (ch === ')' || ch === ']' || ch === '}') {\n                delta++;\n            }\n            if (delta < 0) {\n                break;\n            }\n        }\n        if (delta < 0 && isParen) {\n            i += 1;\n            var iBefore = i;\n            var fn = '';\n            while (true) {\n                ch = line[i];\n                if (ch === ' ' || ch === '\\t') {\n                    if(this.minorIndentFunctions.indexOf(fn) !== -1) {\n                        return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                    } else {\n                        return this.$toIndent(line.substring(0, i + 1));\n                    }\n                } else if (ch === undefined) {\n                    return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                }\n                fn += line[i];\n                i++;\n            }\n        } else if(delta < 0 && !isParen) {\n            return this.$toIndent(line.substring(0, i+1));\n        } else if(delta > 0) {\n            baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);\n            return baseIndent;\n        } else {\n            return baseIndent;\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$calculateIndent(line, tab);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/clojure\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-cobol.js",
    "content": "define(\"ace/mode/cobol_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CobolHighlightRules = function() {\nvar keywords = \"ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|\" +\n\"AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|\" +\n\"ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|\" +\n\"TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|\" +\n\"UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|\" +\n\"PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|\" +\n\"CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|\" +\n\"COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|\" +\n\"RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|\" +\n\"DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|\" +\n\"ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|\" +\n\"EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT\";\n\n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n    var builtinFunctions = (\n        \"count|min|max|avg|sum|rank|now|coalesce|main\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"\\\\*.*$\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n};\n\noop.inherits(CobolHighlightRules, TextHighlightRules);\n\nexports.CobolHighlightRules = CobolHighlightRules;\n});\n\ndefine(\"ace/mode/cobol\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cobol_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CobolHighlightRules = require(\"./cobol_highlight_rules\").CobolHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CobolHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"*\";\n\n    this.$id = \"ace/mode/cobol\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-coffee.js",
    "content": "define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    oop.inherits(CoffeeHighlightRules, TextHighlightRules);\n\n    function CoffeeHighlightRules() {\n        var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n\n        var keywords = (\n            \"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n            \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n            \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n            \"or|on|unless|until|and|yes|yield|export|import|default\"\n        );\n\n        var langConstant = (\n            \"true|false|null|undefined|NaN|Infinity\"\n        );\n\n        var illegal = (\n            \"case|const|function|var|void|with|enum|implements|\" +\n            \"interface|let|package|private|protected|public|static\"\n        );\n\n        var supportClass = (\n            \"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n            \"SyntaxError|TypeError|URIError|\"  +\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\"\n        );\n\n        var supportFunction = (\n            \"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n            \"encodeURIComponent|decodeURI|decodeURIComponent|String|\"\n        );\n\n        var variableLanguage = (\n            \"window|arguments|prototype|document\"\n        );\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": langConstant,\n            \"invalid.illegal\": illegal,\n            \"language.support.class\": supportClass,\n            \"language.support.function\": supportFunction,\n            \"variable.language\": variableLanguage\n        }, \"identifier\");\n\n        var functionRule = {\n            token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n            regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n        };\n\n        var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n\n        this.$rules = {\n            start : [\n                {\n                    token : \"constant.numeric\",\n                    regex : \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n                }, {\n                    stateName: \"qdoc\",\n                    token : \"string\", regex : \"'''\", next : [\n                        {token : \"string\", regex : \"'''\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqdoc\",\n                    token : \"string\",\n                    regex : '\"\"\"',\n                    next : [\n                        {token : \"string\", regex : '\"\"\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qstring\",\n                    token : \"string\", regex : \"'\", next : [\n                        {token : \"string\", regex : \"'\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqstring\",\n                    token : \"string.start\", regex : '\"', next : [\n                        {token : \"string.end\", regex : '\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"js\",\n                    token : \"string\", regex : \"`\", next : [\n                        {token : \"string\", regex : \"`\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    regex: \"[{}]\", onMatch: function(val, state, stack) {\n                        this.next = \"\";\n                        if (val == \"{\" && stack.length) {\n                            stack.unshift(\"start\", state);\n                            return \"paren\";\n                        }\n                        if (val == \"}\" && stack.length) {\n                            stack.shift();\n                            this.next = stack.shift() || \"\";\n                            if (this.next.indexOf(\"string\") != -1)\n                                return \"paren.string\";\n                        }\n                        return \"paren\";\n                    }\n                }, {\n                    token : \"string.regex\",\n                    regex : \"///\",\n                    next : \"heregex\"\n                }, {\n                    token : \"string.regex\",\n                    regex : /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n                }, {\n                    token : \"comment\",\n                    regex : \"###(?!#)\",\n                    next : \"comment\"\n                }, {\n                    token : \"comment\",\n                    regex : \"#.*\"\n                }, {\n                    token : [\"punctuation.operator\", \"text\", \"identifier\"],\n                    regex : \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\.{1,3}\"\n                }, {\n                    token : [\"keyword\", \"text\", \"language.support.class\",\n                     \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                    regex : \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n                }, {\n                    token : [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                    regex : \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n                }, \n                functionRule, \n                {\n                    token : \"variable\",\n                    regex : \"@(?:\" + identifier + \")?\"\n                }, {\n                    token: keywordMapper,\n                    regex : identifier\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\,|\\\\.\"\n                }, {\n                    token : \"storage.type\",\n                    regex : \"[\\\\-=]>\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[({[]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\]})]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }],\n\n\n            heregex : [{\n                token : \"string.regex\",\n                regex : '.*?///[imgy]{0,4}',\n                next : \"start\"\n            }, {\n                token : \"comment.regex\",\n                regex : \"\\\\s+(?:#.*)?\"\n            }, {\n                token : \"string.regex\",\n                regex : \"\\\\S+\"\n            }],\n\n            comment : [{\n                token : \"comment\",\n                regex : '###',\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        };\n        this.normalizeRules();\n    }\n\n    exports.CoffeeHighlightRules = CoffeeHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\n\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.foldingRules = new FoldMode();\n}\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    var indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;\n    \n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"###\", end: \"###\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n    \n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/coffee_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/coffee\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-coldfusion.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/coldfusion_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar ColdfusionHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    this.$rules.tag[2].token = function (start, tag) {\n        var group = tag.slice(0,2) == \"cf\" ? \"keyword\" : \"meta.tag\";\n        return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n            group + \".tag-name.xml\"];\n    };\n\n    var jsAndCss = Object.keys(this.$rules).filter(function(x) {\n        return /^(js|css)-/.test(x);\n    });\n    this.embedRules({\n        cfmlComment: [\n            { regex: \"<!---\", token: \"comment.start\", push: \"cfmlComment\"}, \n            { regex: \"--->\", token: \"comment.end\", next: \"pop\"},\n            { defaultToken: \"comment\"}\n        ]\n    }, \"\", [\n        { regex: \"<!---\", token: \"comment.start\", push: \"cfmlComment\"}\n    ], [\n        \"comment\", \"start\", \"tag_whitespace\", \"cdata\"\n    ].concat(jsAndCss));\n    \n    \n    this.$rules.cfTag = [\n        {include : \"attributes\"},\n        {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"pop\"}\n    ];\n    var cfTag = {\n        token : function(start, tag) {\n            return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                \"keyword.tag-name.xml\"];\n        },\n        regex : \"(</?)(cf[-_a-zA-Z0-9:.]+)\",\n        push: \"cfTag\"\n    };\n    jsAndCss.forEach(function(s) {\n        this.$rules[s].unshift(cfTag);\n    }, this);\n    \n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"cfjs-\", \"cfscript\");\n\n    this.normalizeRules();\n};\n\noop.inherits(ColdfusionHighlightRules, HtmlHighlightRules);\n\nexports.ColdfusionHighlightRules = ColdfusionHighlightRules;\n});\n\ndefine(\"ace/mode/coldfusion\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html\",\"ace/mode/coldfusion_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar HtmlMode = require(\"./html\").Mode;\nvar ColdfusionHighlightRules = require(\"./coldfusion_highlight_rules\").ColdfusionHighlightRules;\n\nvar voidElements = \"cfabort|cfapplication|cfargument|cfassociate|cfbreak|cfcache|cfcollection|cfcookie|cfdbinfo|cfdirectory|cfdump|cfelse|cfelseif|cferror|cfexchangecalendar|cfexchangeconnection|cfexchangecontact|cfexchangefilter|cfexchangetask|cfexit|cffeed|cffile|cfflush|cfftp|cfheader|cfhtmlhead|cfhttpparam|cfimage|cfimport|cfinclude|cfindex|cfinsert|cfinvokeargument|cflocation|cflog|cfmailparam|cfNTauthenticate|cfobject|cfobjectcache|cfparam|cfpdfformparam|cfprint|cfprocparam|cfprocresult|cfproperty|cfqueryparam|cfregistry|cfreportparam|cfrethrow|cfreturn|cfschedule|cfsearch|cfset|cfsetting|cfthrow|cfzipparam)\".split(\"|\");\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    \n    this.HighlightRules = ColdfusionHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.voidElements = oop.mixin(lang.arrayToMap(voidElements), this.voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.$id = \"ace/mode/coldfusion\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-csharp.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CSharpHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\n        \"constant.language\": \"null|true|false\"\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : /'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/\n            }, {\n                token : \"string\", start : '\"', end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"string\", start : '@\"', end : '\"', next:[\n                    {token: \"constant.language.escape\", regex: '\"\"'}\n                ]\n            }, {\n                token : \"string\", start : /\\$\"/, end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?$)|{{/},\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"keyword\",\n                regex : \"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(CSharpHighlightRules, TextHighlightRules);\n\nexports.CSharpHighlightRules = CSharpHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar CFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, CFoldMode);\n\n(function() {\n    this.usingRe = /^\\s*using \\S/;\n\n    this.getFoldWidgetRangeBase = this.getFoldWidgetRange;\n    this.getFoldWidgetBase = this.getFoldWidget;\n    \n    this.getFoldWidget = function(session, foldStyle, row) {\n        var fw = this.getFoldWidgetBase(session, foldStyle, row);\n        if (!fw) {\n            var line = session.getLine(row);\n            if (/^\\s*#region\\b/.test(line)) \n                return \"start\";\n            var usingRe = this.usingRe;\n            if (usingRe.test(line)) {\n                var prev = session.getLine(row - 1);\n                var next = session.getLine(row + 1);\n                if (!usingRe.test(prev) && usingRe.test(next))\n                    return \"start\";\n            }\n        }\n        return fw;\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.getFoldWidgetRangeBase(session, foldStyle, row);\n        if (range)\n            return range;\n\n        var line = session.getLine(row);\n        if (this.usingRe.test(line))\n            return this.getUsingStatementBlock(session, line, row);\n            \n        if (/^\\s*#region\\b/.test(line))\n            return this.getRegionBlock(session, line, row);\n    };\n    \n    this.getUsingStatementBlock = function(session, line, row) {\n        var startColumn = line.match(this.usingRe)[0].length - 1;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            if (!this.usingRe.test(line))\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    \n    this.getRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*#(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n\n            if (!depth)\n                break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csharp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/csharp\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CSharpHighlightRules = require(\"./csharp_highlight_rules\").CSharpHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/csharp\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CSharpHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n  \n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n  \n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n    \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n  \n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n  \n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/csharp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-csound_document.js",
    "content": "define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundPreprocessorHighlightRules = function() {\n\n    this.semicolonComments = {\n        token : \"comment.line.semicolon.csound\",\n        regex : \";.*$\"\n    };\n\n    this.comments = [\n        {\n            token : \"punctuation.definition.comment.begin.csound\",\n            regex : \"/\\\\*\",\n            push  : [\n                {\n                    token : \"punctuation.definition.comment.end.csound\",\n                    regex : \"\\\\*/\",\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token : \"comment.line.double-slash.csound\",\n            regex : \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n\n    this.macroUses = [\n        {\n            token : [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex : /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next  : \"macro parameter value list\"\n        }, {\n            token : \"entity.name.function.preprocessor.csound\",\n            regex : /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n\n    this.numbers = [\n        {\n            token : \"constant.numeric.float.csound\",\n            regex : /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token : [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex : /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token : \"constant.numeric.integer.decimal.csound\",\n            regex : /\\d+/\n        }\n    ];\n\n    this.bracedStringContents = [\n        {\n            token : \"constant.character.escape.csound\",\n            regex : /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        {\n            token : \"constant.character.placeholder.csound\",\n            regex : /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token : \"constant.character.escape.csound\",\n            regex : /%%/\n        }\n    ];\n\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n\n    var start = [\n        this.comments,\n\n        {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#include/,\n            push  : [\n                this.comments,\n                {\n                    token : \"string.csound\",\n                    regex : /([^ \\t])(?:.*?\\1)/,\n                    next  : \"pop\"\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#[ \\t]*define/,\n            next  : \"define directive\"\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:ifn?def|undef)\\b/,\n            next  : \"macro directive\"\n        },\n\n        this.macroUses\n    ];\n\n    this.$rules = {\n        \"start\": start,\n\n        \"define directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter name list\"\n            }, {\n                token : \"punctuation.definition.macro.begin.csound\",\n                regex : /#/,\n                next  : \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token : \"variable.parameter.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex : /\\)/,\n                next  : \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\#/\n            }, {\n                token : \"punctuation.definition.macro.end.csound\",\n                regex : /#/,\n                next  : \"start\"\n            },\n            start\n        ],\n\n        \"macro directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"macro parameter value list\": [\n            {\n                token : \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex : /\\)/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }), {\n                token : \"punctuation.macro-parameter-value-separator.csound\",\n                regex : \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\\\)/\n            }, this.popRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex : /\\)/\n            }), this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\n\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n\n(function() {\n\n    this.pushRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                } else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (Array.isArray(params.next)) {\n                    var oldNext = params.next[params.next.length - 1];\n                    var oldNextIndex = oldNext.length - 1;\n                    var newNextIndex = next.length - 1;\n                    if (newNextIndex > oldNextIndex) {\n                        while (oldNextIndex >= 0 && newNextIndex >= 0) {\n                            if (oldNext.charAt(oldNextIndex) !== next.charAt(newNextIndex)) {\n                                var prefix = next.substr(0, newNextIndex);\n                                for (var i = 0; i < params.next.length; i++) {\n                                    params.next[i] = prefix + params.next[i];\n                                }\n                                break;\n                            }\n                            oldNextIndex--;\n                            newNextIndex--;\n                        }\n                    }\n                } else {\n                    params.next = next;\n                }\n            },\n            get token() { return params.token; }\n        };\n    };\n\n    this.popRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                } else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n\n}).call(CsoundPreprocessorHighlightRules.prototype);\n\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n});\n\ndefine(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\n\nvar CsoundScoreHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n\n    this.quotedStringContents.push({\n        token : \"invalid.illegal.csound-score\",\n        regex : /[^\"]*$/\n    });\n\n    var start = this.$rules.start;\n    start.push(\n        {\n            token : \"keyword.control.csound-score\",\n            regex : /[abCdefiqstvxy]/\n        }, {\n            token : \"invalid.illegal.csound-score\",\n            regex : /w/\n        }, {\n            token : \"constant.numeric.language.csound-score\",\n            regex : /z/\n        }, {\n            token : [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n            regex : /([nNpP][pP])(\\d+)/\n        }, {\n            token : \"keyword.other.csound-score\",\n            regex : /[mn]/,\n            push  : [\n                {\n                    token : \"empty\",\n                    regex : /$/,\n                    next  : \"pop\"\n                },\n                this.comments,\n                {\n                    token : \"entity.name.label.csound-score\",\n                    regex : /[A-Z_a-z]\\w*/\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound-score\",\n            regex : /r\\b/,\n            next  : \"repeat section\"\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound-score\",\n            regex : \"[!+\\\\-*/^%&|<>#~.]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound-score\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }),\n\n        this.pushRule({\n            token : \"punctuation.braced-loop.begin.csound-score\",\n            regex : /{/,\n            next  : \"loop after left brace\"\n        })\n    );\n\n    this.addRules({\n        \"repeat section\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"entity.name.label.csound-score\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound-score\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n\n        \"loop after left brace\": [\n            this.popRule({\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token : \"entity.name.function.preprocessor.csound-score\",\n                regex : /[A-Z_a-z]\\w*\\b/,\n                next  : \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token : \"punctuation.braced-loop.end.csound-score\",\n                regex : /}/\n            })\n        ]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n});\n\ndefine(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuaHighlightRules = function() {\n\n    var keywords = (\n        \"break|do|else|elseif|end|for|function|if|in|local|repeat|\"+\n         \"return|then|until|while|or|and|not\"\n    );\n\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n\n    var functions = (\n        \"string|xpcall|package|tostring|print|os|unpack|require|\"+\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\"+\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\"+\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\"+\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\"+\n        \"load|error|loadfile|\"+\n\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\"+\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\"+\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\"+\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\"+\n        \"lines|write|close|flush|open|output|type|read|stderr|\"+\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\"+\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\"+\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\"+\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\"+\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\"+\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\"+\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\"+\n        \"status|wrap|create|running|\"+\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\"+\n         \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\"\n    );\n\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [{\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex : /\\-\\-\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"comment\";\n                    },\n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ]\n        },\n\n        {\n            token : \"comment\",\n            regex : \"\\\\-\\\\-.*$\"\n        },\n        {\n            stateName: \"bracketedString\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length, currentState);\n                return \"string.start\";\n            },\n            regex : /\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"string.end\";\n                    },\n                    \n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        },\n        {\n            token : \"string\",           // \" string\n            regex : '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+|\\\\w+\"\n        } ]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LuaHighlightRules, TextHighlightRules);\n\nexports.LuaHighlightRules = LuaHighlightRules;\n});\n\ndefine(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\"\n    );\n\n    var builtinConstants = (\n        \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n    );\n\n    var builtinFunctions = (\n        \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + '\"{3}',\n            next: \"rawqqstring3\"\n        }, {\n            token: \"string\", \n            regex: strRawPre + '\"(?=.)',\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'{3}\",\n            next: \"rawqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'(?=.)\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"{3}',\n            next: \"fqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"(?=.)',\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'{3}\",\n            next: \"fqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'(?=.)\",\n            next: \"fqstring\"\n        },{\n            token: \"string\",\n            regex: strRawFormatPre + '\"{3}',\n            next: \"rfqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + '\"(?=.)',\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'{3}\",\n            next: \"rfqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'(?=.)\",\n            next: \"rfqstring\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }, {\n            include: \"constants\"\n        }],\n        \"qqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring\": [{\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstringParRules\": [{//TODO: nested {}\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)]\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string\",\n            regex: \"'(.)*'\"\n        }, {\n            token: \"string\",\n            regex: '\"(.)*\"'\n        }, {\n            token: \"function.support\",\n            regex: \"(!s|!r|!a)\"\n        }, {\n            include: \"constants\"\n        },{\n            token: 'paren.rparen',\n            regex: \"}\",\n            next: 'pop'\n        },{\n            token: 'paren.lparen',\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }],\n        \"constants\": [{\n            token: \"constant.numeric\", // imaginary\n            regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: floatNumber\n        }, {\n            token: \"constant.numeric\", // long integer\n            regex: integer + \"[lL]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // integer\n            regex: integer + \"\\\\b\"\n        }, {\n            token: [\"punctuation\", \"function.support\"],// method\n            regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n\ndefine(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\n\nvar CsoundOrchestraHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n    var opcodes = [\n        \"ATSadd\",\n        \"ATSaddnz\",\n        \"ATSbufread\",\n        \"ATScross\",\n        \"ATSinfo\",\n        \"ATSinterpread\",\n        \"ATSpartialtap\",\n        \"ATSread\",\n        \"ATSreadnz\",\n        \"ATSsinnoi\",\n        \"FLbox\",\n        \"FLbutBank\",\n        \"FLbutton\",\n        \"FLcloseButton\",\n        \"FLcolor\",\n        \"FLcolor2\",\n        \"FLcount\",\n        \"FLexecButton\",\n        \"FLgetsnap\",\n        \"FLgroup\",\n        \"FLgroupEnd\",\n        \"FLgroup_end\",\n        \"FLhide\",\n        \"FLhvsBox\",\n        \"FLhvsBoxSetValue\",\n        \"FLjoy\",\n        \"FLkeyIn\",\n        \"FLknob\",\n        \"FLlabel\",\n        \"FLloadsnap\",\n        \"FLmouse\",\n        \"FLpack\",\n        \"FLpackEnd\",\n        \"FLpack_end\",\n        \"FLpanel\",\n        \"FLpanelEnd\",\n        \"FLpanel_end\",\n        \"FLprintk\",\n        \"FLprintk2\",\n        \"FLroller\",\n        \"FLrun\",\n        \"FLsavesnap\",\n        \"FLscroll\",\n        \"FLscrollEnd\",\n        \"FLscroll_end\",\n        \"FLsetAlign\",\n        \"FLsetBox\",\n        \"FLsetColor\",\n        \"FLsetColor2\",\n        \"FLsetFont\",\n        \"FLsetPosition\",\n        \"FLsetSize\",\n        \"FLsetSnapGroup\",\n        \"FLsetText\",\n        \"FLsetTextColor\",\n        \"FLsetTextSize\",\n        \"FLsetTextType\",\n        \"FLsetVal\",\n        \"FLsetVal_i\",\n        \"FLsetVali\",\n        \"FLsetsnap\",\n        \"FLshow\",\n        \"FLslidBnk\",\n        \"FLslidBnk2\",\n        \"FLslidBnk2Set\",\n        \"FLslidBnk2Setk\",\n        \"FLslidBnkGetHandle\",\n        \"FLslidBnkSet\",\n        \"FLslidBnkSetk\",\n        \"FLslider\",\n        \"FLtabs\",\n        \"FLtabsEnd\",\n        \"FLtabs_end\",\n        \"FLtext\",\n        \"FLupdate\",\n        \"FLvalue\",\n        \"FLvkeybd\",\n        \"FLvslidBnk\",\n        \"FLvslidBnk2\",\n        \"FLxyin\",\n        \"JackoAudioIn\",\n        \"JackoAudioInConnect\",\n        \"JackoAudioOut\",\n        \"JackoAudioOutConnect\",\n        \"JackoFreewheel\",\n        \"JackoInfo\",\n        \"JackoInit\",\n        \"JackoMidiInConnect\",\n        \"JackoMidiOut\",\n        \"JackoMidiOutConnect\",\n        \"JackoNoteOut\",\n        \"JackoOn\",\n        \"JackoTransport\",\n        \"K35_hpf\",\n        \"K35_lpf\",\n        \"MixerClear\",\n        \"MixerGetLevel\",\n        \"MixerReceive\",\n        \"MixerSend\",\n        \"MixerSetLevel\",\n        \"MixerSetLevel_i\",\n        \"OSCbundle\",\n        \"OSCcount\",\n        \"OSCinit\",\n        \"OSCinitM\",\n        \"OSClisten\",\n        \"OSCraw\",\n        \"OSCsend\",\n        \"OSCsend_lo\",\n        \"S\",\n        \"STKBandedWG\",\n        \"STKBeeThree\",\n        \"STKBlowBotl\",\n        \"STKBlowHole\",\n        \"STKBowed\",\n        \"STKBrass\",\n        \"STKClarinet\",\n        \"STKDrummer\",\n        \"STKFMVoices\",\n        \"STKFlute\",\n        \"STKHevyMetl\",\n        \"STKMandolin\",\n        \"STKModalBar\",\n        \"STKMoog\",\n        \"STKPercFlut\",\n        \"STKPlucked\",\n        \"STKResonate\",\n        \"STKRhodey\",\n        \"STKSaxofony\",\n        \"STKShakers\",\n        \"STKSimple\",\n        \"STKSitar\",\n        \"STKStifKarp\",\n        \"STKTubeBell\",\n        \"STKVoicForm\",\n        \"STKWhistle\",\n        \"STKWurley\",\n        \"a\",\n        \"abs\",\n        \"active\",\n        \"adsr\",\n        \"adsyn\",\n        \"adsynt\",\n        \"adsynt2\",\n        \"aftouch\",\n        \"alpass\",\n        \"alwayson\",\n        \"ampdb\",\n        \"ampdbfs\",\n        \"ampmidi\",\n        \"ampmidid\",\n        \"areson\",\n        \"aresonk\",\n        \"atone\",\n        \"atonek\",\n        \"atonex\",\n        \"babo\",\n        \"balance\",\n        \"balance2\",\n        \"bamboo\",\n        \"barmodel\",\n        \"bbcutm\",\n        \"bbcuts\",\n        \"beadsynt\",\n        \"beosc\",\n        \"betarand\",\n        \"bexprnd\",\n        \"bformdec1\",\n        \"bformenc1\",\n        \"binit\",\n        \"biquad\",\n        \"biquada\",\n        \"birnd\",\n        \"bpf\",\n        \"bpfcos\",\n        \"bqrez\",\n        \"butbp\",\n        \"butbr\",\n        \"buthp\",\n        \"butlp\",\n        \"butterbp\",\n        \"butterbr\",\n        \"butterhp\",\n        \"butterlp\",\n        \"button\",\n        \"buzz\",\n        \"c2r\",\n        \"cabasa\",\n        \"cauchy\",\n        \"cauchyi\",\n        \"cbrt\",\n        \"ceil\",\n        \"cell\",\n        \"cent\",\n        \"centroid\",\n        \"ceps\",\n        \"cepsinv\",\n        \"chanctrl\",\n        \"changed\",\n        \"changed2\",\n        \"chani\",\n        \"chano\",\n        \"chebyshevpoly\",\n        \"checkbox\",\n        \"chn_S\",\n        \"chn_a\",\n        \"chn_k\",\n        \"chnclear\",\n        \"chnexport\",\n        \"chnget\",\n        \"chngetks\",\n        \"chnmix\",\n        \"chnparams\",\n        \"chnset\",\n        \"chnsetks\",\n        \"chuap\",\n        \"clear\",\n        \"clfilt\",\n        \"clip\",\n        \"clockoff\",\n        \"clockon\",\n        \"cmp\",\n        \"cmplxprod\",\n        \"comb\",\n        \"combinv\",\n        \"compilecsd\",\n        \"compileorc\",\n        \"compilestr\",\n        \"compress\",\n        \"compress2\",\n        \"connect\",\n        \"control\",\n        \"convle\",\n        \"convolve\",\n        \"copya2ftab\",\n        \"copyf2array\",\n        \"cos\",\n        \"cosh\",\n        \"cosinv\",\n        \"cosseg\",\n        \"cossegb\",\n        \"cossegr\",\n        \"cps2pch\",\n        \"cpsmidi\",\n        \"cpsmidib\",\n        \"cpsmidinn\",\n        \"cpsoct\",\n        \"cpspch\",\n        \"cpstmid\",\n        \"cpstun\",\n        \"cpstuni\",\n        \"cpsxpch\",\n        \"cpumeter\",\n        \"cpuprc\",\n        \"cross2\",\n        \"crossfm\",\n        \"crossfmi\",\n        \"crossfmpm\",\n        \"crossfmpmi\",\n        \"crosspm\",\n        \"crosspmi\",\n        \"crunch\",\n        \"ctlchn\",\n        \"ctrl14\",\n        \"ctrl21\",\n        \"ctrl7\",\n        \"ctrlinit\",\n        \"cuserrnd\",\n        \"dam\",\n        \"date\",\n        \"dates\",\n        \"db\",\n        \"dbamp\",\n        \"dbfsamp\",\n        \"dcblock\",\n        \"dcblock2\",\n        \"dconv\",\n        \"dct\",\n        \"dctinv\",\n        \"deinterleave\",\n        \"delay\",\n        \"delay1\",\n        \"delayk\",\n        \"delayr\",\n        \"delayw\",\n        \"deltap\",\n        \"deltap3\",\n        \"deltapi\",\n        \"deltapn\",\n        \"deltapx\",\n        \"deltapxw\",\n        \"denorm\",\n        \"diff\",\n        \"diode_ladder\",\n        \"directory\",\n        \"diskgrain\",\n        \"diskin\",\n        \"diskin2\",\n        \"dispfft\",\n        \"display\",\n        \"distort\",\n        \"distort1\",\n        \"divz\",\n        \"doppler\",\n        \"dot\",\n        \"downsamp\",\n        \"dripwater\",\n        \"dssiactivate\",\n        \"dssiaudio\",\n        \"dssictls\",\n        \"dssiinit\",\n        \"dssilist\",\n        \"dumpk\",\n        \"dumpk2\",\n        \"dumpk3\",\n        \"dumpk4\",\n        \"duserrnd\",\n        \"dust\",\n        \"dust2\",\n        \"envlpx\",\n        \"envlpxr\",\n        \"ephasor\",\n        \"eqfil\",\n        \"evalstr\",\n        \"event\",\n        \"event_i\",\n        \"exciter\",\n        \"exitnow\",\n        \"exp\",\n        \"expcurve\",\n        \"expon\",\n        \"exprand\",\n        \"exprandi\",\n        \"expseg\",\n        \"expsega\",\n        \"expsegb\",\n        \"expsegba\",\n        \"expsegr\",\n        \"fareylen\",\n        \"fareyleni\",\n        \"faustaudio\",\n        \"faustcompile\",\n        \"faustctl\",\n        \"faustdsp\",\n        \"faustgen\",\n        \"faustplay\",\n        \"fft\",\n        \"fftinv\",\n        \"ficlose\",\n        \"filebit\",\n        \"filelen\",\n        \"filenchnls\",\n        \"filepeak\",\n        \"filescal\",\n        \"filesr\",\n        \"filevalid\",\n        \"fillarray\",\n        \"filter2\",\n        \"fin\",\n        \"fini\",\n        \"fink\",\n        \"fiopen\",\n        \"flanger\",\n        \"flashtxt\",\n        \"flooper\",\n        \"flooper2\",\n        \"floor\",\n        \"fmanal\",\n        \"fmax\",\n        \"fmb3\",\n        \"fmbell\",\n        \"fmin\",\n        \"fmmetal\",\n        \"fmod\",\n        \"fmpercfl\",\n        \"fmrhode\",\n        \"fmvoice\",\n        \"fmwurlie\",\n        \"fof\",\n        \"fof2\",\n        \"fofilter\",\n        \"fog\",\n        \"fold\",\n        \"follow\",\n        \"follow2\",\n        \"foscil\",\n        \"foscili\",\n        \"fout\",\n        \"fouti\",\n        \"foutir\",\n        \"foutk\",\n        \"fprintks\",\n        \"fprints\",\n        \"frac\",\n        \"fractalnoise\",\n        \"framebuffer\",\n        \"freeverb\",\n        \"ftaudio\",\n        \"ftchnls\",\n        \"ftconv\",\n        \"ftcps\",\n        \"ftfree\",\n        \"ftgen\",\n        \"ftgenonce\",\n        \"ftgentmp\",\n        \"ftlen\",\n        \"ftload\",\n        \"ftloadk\",\n        \"ftlptim\",\n        \"ftmorf\",\n        \"ftom\",\n        \"ftprint\",\n        \"ftresize\",\n        \"ftresizei\",\n        \"ftsamplebank\",\n        \"ftsave\",\n        \"ftsavek\",\n        \"ftslice\",\n        \"ftsr\",\n        \"gain\",\n        \"gainslider\",\n        \"gauss\",\n        \"gaussi\",\n        \"gausstrig\",\n        \"gbuzz\",\n        \"genarray\",\n        \"genarray_i\",\n        \"gendy\",\n        \"gendyc\",\n        \"gendyx\",\n        \"getcfg\",\n        \"getcol\",\n        \"getftargs\",\n        \"getrow\",\n        \"getrowlin\",\n        \"getseed\",\n        \"gogobel\",\n        \"grain\",\n        \"grain2\",\n        \"grain3\",\n        \"granule\",\n        \"guiro\",\n        \"harmon\",\n        \"harmon2\",\n        \"harmon3\",\n        \"harmon4\",\n        \"hdf5read\",\n        \"hdf5write\",\n        \"hilbert\",\n        \"hilbert2\",\n        \"hrtfearly\",\n        \"hrtfmove\",\n        \"hrtfmove2\",\n        \"hrtfreverb\",\n        \"hrtfstat\",\n        \"hsboscil\",\n        \"hvs1\",\n        \"hvs2\",\n        \"hvs3\",\n        \"hypot\",\n        \"i\",\n        \"ihold\",\n        \"imagecreate\",\n        \"imagefree\",\n        \"imagegetpixel\",\n        \"imageload\",\n        \"imagesave\",\n        \"imagesetpixel\",\n        \"imagesize\",\n        \"in\",\n        \"in32\",\n        \"inch\",\n        \"inh\",\n        \"init\",\n        \"initc14\",\n        \"initc21\",\n        \"initc7\",\n        \"inleta\",\n        \"inletf\",\n        \"inletk\",\n        \"inletkid\",\n        \"inletv\",\n        \"ino\",\n        \"inq\",\n        \"inrg\",\n        \"ins\",\n        \"insglobal\",\n        \"insremot\",\n        \"int\",\n        \"integ\",\n        \"interleave\",\n        \"interp\",\n        \"invalue\",\n        \"inx\",\n        \"inz\",\n        \"jacktransport\",\n        \"jitter\",\n        \"jitter2\",\n        \"joystick\",\n        \"jspline\",\n        \"k\",\n        \"la_i_add_mc\",\n        \"la_i_add_mr\",\n        \"la_i_add_vc\",\n        \"la_i_add_vr\",\n        \"la_i_assign_mc\",\n        \"la_i_assign_mr\",\n        \"la_i_assign_t\",\n        \"la_i_assign_vc\",\n        \"la_i_assign_vr\",\n        \"la_i_conjugate_mc\",\n        \"la_i_conjugate_mr\",\n        \"la_i_conjugate_vc\",\n        \"la_i_conjugate_vr\",\n        \"la_i_distance_vc\",\n        \"la_i_distance_vr\",\n        \"la_i_divide_mc\",\n        \"la_i_divide_mr\",\n        \"la_i_divide_vc\",\n        \"la_i_divide_vr\",\n        \"la_i_dot_mc\",\n        \"la_i_dot_mc_vc\",\n        \"la_i_dot_mr\",\n        \"la_i_dot_mr_vr\",\n        \"la_i_dot_vc\",\n        \"la_i_dot_vr\",\n        \"la_i_get_mc\",\n        \"la_i_get_mr\",\n        \"la_i_get_vc\",\n        \"la_i_get_vr\",\n        \"la_i_invert_mc\",\n        \"la_i_invert_mr\",\n        \"la_i_lower_solve_mc\",\n        \"la_i_lower_solve_mr\",\n        \"la_i_lu_det_mc\",\n        \"la_i_lu_det_mr\",\n        \"la_i_lu_factor_mc\",\n        \"la_i_lu_factor_mr\",\n        \"la_i_lu_solve_mc\",\n        \"la_i_lu_solve_mr\",\n        \"la_i_mc_create\",\n        \"la_i_mc_set\",\n        \"la_i_mr_create\",\n        \"la_i_mr_set\",\n        \"la_i_multiply_mc\",\n        \"la_i_multiply_mr\",\n        \"la_i_multiply_vc\",\n        \"la_i_multiply_vr\",\n        \"la_i_norm1_mc\",\n        \"la_i_norm1_mr\",\n        \"la_i_norm1_vc\",\n        \"la_i_norm1_vr\",\n        \"la_i_norm_euclid_mc\",\n        \"la_i_norm_euclid_mr\",\n        \"la_i_norm_euclid_vc\",\n        \"la_i_norm_euclid_vr\",\n        \"la_i_norm_inf_mc\",\n        \"la_i_norm_inf_mr\",\n        \"la_i_norm_inf_vc\",\n        \"la_i_norm_inf_vr\",\n        \"la_i_norm_max_mc\",\n        \"la_i_norm_max_mr\",\n        \"la_i_print_mc\",\n        \"la_i_print_mr\",\n        \"la_i_print_vc\",\n        \"la_i_print_vr\",\n        \"la_i_qr_eigen_mc\",\n        \"la_i_qr_eigen_mr\",\n        \"la_i_qr_factor_mc\",\n        \"la_i_qr_factor_mr\",\n        \"la_i_qr_sym_eigen_mc\",\n        \"la_i_qr_sym_eigen_mr\",\n        \"la_i_random_mc\",\n        \"la_i_random_mr\",\n        \"la_i_random_vc\",\n        \"la_i_random_vr\",\n        \"la_i_size_mc\",\n        \"la_i_size_mr\",\n        \"la_i_size_vc\",\n        \"la_i_size_vr\",\n        \"la_i_subtract_mc\",\n        \"la_i_subtract_mr\",\n        \"la_i_subtract_vc\",\n        \"la_i_subtract_vr\",\n        \"la_i_t_assign\",\n        \"la_i_trace_mc\",\n        \"la_i_trace_mr\",\n        \"la_i_transpose_mc\",\n        \"la_i_transpose_mr\",\n        \"la_i_upper_solve_mc\",\n        \"la_i_upper_solve_mr\",\n        \"la_i_vc_create\",\n        \"la_i_vc_set\",\n        \"la_i_vr_create\",\n        \"la_i_vr_set\",\n        \"la_k_a_assign\",\n        \"la_k_add_mc\",\n        \"la_k_add_mr\",\n        \"la_k_add_vc\",\n        \"la_k_add_vr\",\n        \"la_k_assign_a\",\n        \"la_k_assign_f\",\n        \"la_k_assign_mc\",\n        \"la_k_assign_mr\",\n        \"la_k_assign_t\",\n        \"la_k_assign_vc\",\n        \"la_k_assign_vr\",\n        \"la_k_conjugate_mc\",\n        \"la_k_conjugate_mr\",\n        \"la_k_conjugate_vc\",\n        \"la_k_conjugate_vr\",\n        \"la_k_current_f\",\n        \"la_k_current_vr\",\n        \"la_k_distance_vc\",\n        \"la_k_distance_vr\",\n        \"la_k_divide_mc\",\n        \"la_k_divide_mr\",\n        \"la_k_divide_vc\",\n        \"la_k_divide_vr\",\n        \"la_k_dot_mc\",\n        \"la_k_dot_mc_vc\",\n        \"la_k_dot_mr\",\n        \"la_k_dot_mr_vr\",\n        \"la_k_dot_vc\",\n        \"la_k_dot_vr\",\n        \"la_k_f_assign\",\n        \"la_k_get_mc\",\n        \"la_k_get_mr\",\n        \"la_k_get_vc\",\n        \"la_k_get_vr\",\n        \"la_k_invert_mc\",\n        \"la_k_invert_mr\",\n        \"la_k_lower_solve_mc\",\n        \"la_k_lower_solve_mr\",\n        \"la_k_lu_det_mc\",\n        \"la_k_lu_det_mr\",\n        \"la_k_lu_factor_mc\",\n        \"la_k_lu_factor_mr\",\n        \"la_k_lu_solve_mc\",\n        \"la_k_lu_solve_mr\",\n        \"la_k_mc_set\",\n        \"la_k_mr_set\",\n        \"la_k_multiply_mc\",\n        \"la_k_multiply_mr\",\n        \"la_k_multiply_vc\",\n        \"la_k_multiply_vr\",\n        \"la_k_norm1_mc\",\n        \"la_k_norm1_mr\",\n        \"la_k_norm1_vc\",\n        \"la_k_norm1_vr\",\n        \"la_k_norm_euclid_mc\",\n        \"la_k_norm_euclid_mr\",\n        \"la_k_norm_euclid_vc\",\n        \"la_k_norm_euclid_vr\",\n        \"la_k_norm_inf_mc\",\n        \"la_k_norm_inf_mr\",\n        \"la_k_norm_inf_vc\",\n        \"la_k_norm_inf_vr\",\n        \"la_k_norm_max_mc\",\n        \"la_k_norm_max_mr\",\n        \"la_k_qr_eigen_mc\",\n        \"la_k_qr_eigen_mr\",\n        \"la_k_qr_factor_mc\",\n        \"la_k_qr_factor_mr\",\n        \"la_k_qr_sym_eigen_mc\",\n        \"la_k_qr_sym_eigen_mr\",\n        \"la_k_random_mc\",\n        \"la_k_random_mr\",\n        \"la_k_random_vc\",\n        \"la_k_random_vr\",\n        \"la_k_subtract_mc\",\n        \"la_k_subtract_mr\",\n        \"la_k_subtract_vc\",\n        \"la_k_subtract_vr\",\n        \"la_k_t_assign\",\n        \"la_k_trace_mc\",\n        \"la_k_trace_mr\",\n        \"la_k_upper_solve_mc\",\n        \"la_k_upper_solve_mr\",\n        \"la_k_vc_set\",\n        \"la_k_vr_set\",\n        \"lenarray\",\n        \"lfo\",\n        \"limit\",\n        \"limit1\",\n        \"lincos\",\n        \"line\",\n        \"linen\",\n        \"linenr\",\n        \"lineto\",\n        \"link_beat_force\",\n        \"link_beat_get\",\n        \"link_beat_request\",\n        \"link_create\",\n        \"link_enable\",\n        \"link_is_enabled\",\n        \"link_metro\",\n        \"link_peers\",\n        \"link_tempo_get\",\n        \"link_tempo_set\",\n        \"linlin\",\n        \"linrand\",\n        \"linseg\",\n        \"linsegb\",\n        \"linsegr\",\n        \"liveconv\",\n        \"locsend\",\n        \"locsig\",\n        \"log\",\n        \"log10\",\n        \"log2\",\n        \"logbtwo\",\n        \"logcurve\",\n        \"loopseg\",\n        \"loopsegp\",\n        \"looptseg\",\n        \"loopxseg\",\n        \"lorenz\",\n        \"loscil\",\n        \"loscil3\",\n        \"loscil3phs\",\n        \"loscilphs\",\n        \"loscilx\",\n        \"lowpass2\",\n        \"lowres\",\n        \"lowresx\",\n        \"lpf18\",\n        \"lpform\",\n        \"lpfreson\",\n        \"lphasor\",\n        \"lpinterp\",\n        \"lposcil\",\n        \"lposcil3\",\n        \"lposcila\",\n        \"lposcilsa\",\n        \"lposcilsa2\",\n        \"lpread\",\n        \"lpreson\",\n        \"lpshold\",\n        \"lpsholdp\",\n        \"lpslot\",\n        \"lua_exec\",\n        \"lua_iaopcall\",\n        \"lua_iaopcall_off\",\n        \"lua_ikopcall\",\n        \"lua_ikopcall_off\",\n        \"lua_iopcall\",\n        \"lua_iopcall_off\",\n        \"lua_opdef\",\n        \"mac\",\n        \"maca\",\n        \"madsr\",\n        \"mags\",\n        \"mandel\",\n        \"mandol\",\n        \"maparray\",\n        \"maparray_i\",\n        \"marimba\",\n        \"massign\",\n        \"max\",\n        \"max_k\",\n        \"maxabs\",\n        \"maxabsaccum\",\n        \"maxaccum\",\n        \"maxalloc\",\n        \"maxarray\",\n        \"mclock\",\n        \"mdelay\",\n        \"median\",\n        \"mediank\",\n        \"metro\",\n        \"mfb\",\n        \"midglobal\",\n        \"midiarp\",\n        \"midic14\",\n        \"midic21\",\n        \"midic7\",\n        \"midichannelaftertouch\",\n        \"midichn\",\n        \"midicontrolchange\",\n        \"midictrl\",\n        \"mididefault\",\n        \"midifilestatus\",\n        \"midiin\",\n        \"midinoteoff\",\n        \"midinoteoncps\",\n        \"midinoteonkey\",\n        \"midinoteonoct\",\n        \"midinoteonpch\",\n        \"midion\",\n        \"midion2\",\n        \"midiout\",\n        \"midiout_i\",\n        \"midipgm\",\n        \"midipitchbend\",\n        \"midipolyaftertouch\",\n        \"midiprogramchange\",\n        \"miditempo\",\n        \"midremot\",\n        \"min\",\n        \"minabs\",\n        \"minabsaccum\",\n        \"minaccum\",\n        \"minarray\",\n        \"mincer\",\n        \"mirror\",\n        \"mode\",\n        \"modmatrix\",\n        \"monitor\",\n        \"moog\",\n        \"moogladder\",\n        \"moogladder2\",\n        \"moogvcf\",\n        \"moogvcf2\",\n        \"moscil\",\n        \"mp3bitrate\",\n        \"mp3in\",\n        \"mp3len\",\n        \"mp3nchnls\",\n        \"mp3scal\",\n        \"mp3sr\",\n        \"mpulse\",\n        \"mrtmsg\",\n        \"mtof\",\n        \"mton\",\n        \"multitap\",\n        \"mute\",\n        \"mvchpf\",\n        \"mvclpf1\",\n        \"mvclpf2\",\n        \"mvclpf3\",\n        \"mvclpf4\",\n        \"mxadsr\",\n        \"nchnls_hw\",\n        \"nestedap\",\n        \"nlalp\",\n        \"nlfilt\",\n        \"nlfilt2\",\n        \"noise\",\n        \"noteoff\",\n        \"noteon\",\n        \"noteondur\",\n        \"noteondur2\",\n        \"notnum\",\n        \"nreverb\",\n        \"nrpn\",\n        \"nsamp\",\n        \"nstance\",\n        \"nstrnum\",\n        \"ntom\",\n        \"ntrpol\",\n        \"nxtpow2\",\n        \"octave\",\n        \"octcps\",\n        \"octmidi\",\n        \"octmidib\",\n        \"octmidinn\",\n        \"octpch\",\n        \"olabuffer\",\n        \"oscbnk\",\n        \"oscil\",\n        \"oscil1\",\n        \"oscil1i\",\n        \"oscil3\",\n        \"oscili\",\n        \"oscilikt\",\n        \"osciliktp\",\n        \"oscilikts\",\n        \"osciln\",\n        \"oscils\",\n        \"oscilx\",\n        \"out\",\n        \"out32\",\n        \"outc\",\n        \"outch\",\n        \"outh\",\n        \"outiat\",\n        \"outic\",\n        \"outic14\",\n        \"outipat\",\n        \"outipb\",\n        \"outipc\",\n        \"outkat\",\n        \"outkc\",\n        \"outkc14\",\n        \"outkpat\",\n        \"outkpb\",\n        \"outkpc\",\n        \"outleta\",\n        \"outletf\",\n        \"outletk\",\n        \"outletkid\",\n        \"outletv\",\n        \"outo\",\n        \"outq\",\n        \"outq1\",\n        \"outq2\",\n        \"outq3\",\n        \"outq4\",\n        \"outrg\",\n        \"outs\",\n        \"outs1\",\n        \"outs2\",\n        \"outvalue\",\n        \"outx\",\n        \"outz\",\n        \"p\",\n        \"p5gconnect\",\n        \"p5gdata\",\n        \"pan\",\n        \"pan2\",\n        \"pareq\",\n        \"part2txt\",\n        \"partials\",\n        \"partikkel\",\n        \"partikkelget\",\n        \"partikkelset\",\n        \"partikkelsync\",\n        \"passign\",\n        \"paulstretch\",\n        \"pcauchy\",\n        \"pchbend\",\n        \"pchmidi\",\n        \"pchmidib\",\n        \"pchmidinn\",\n        \"pchoct\",\n        \"pchtom\",\n        \"pconvolve\",\n        \"pcount\",\n        \"pdclip\",\n        \"pdhalf\",\n        \"pdhalfy\",\n        \"peak\",\n        \"pgmassign\",\n        \"pgmchn\",\n        \"phaser1\",\n        \"phaser2\",\n        \"phasor\",\n        \"phasorbnk\",\n        \"phs\",\n        \"pindex\",\n        \"pinker\",\n        \"pinkish\",\n        \"pitch\",\n        \"pitchac\",\n        \"pitchamdf\",\n        \"planet\",\n        \"platerev\",\n        \"plltrack\",\n        \"pluck\",\n        \"poisson\",\n        \"pol2rect\",\n        \"polyaft\",\n        \"polynomial\",\n        \"port\",\n        \"portk\",\n        \"poscil\",\n        \"poscil3\",\n        \"pow\",\n        \"powershape\",\n        \"powoftwo\",\n        \"pows\",\n        \"prealloc\",\n        \"prepiano\",\n        \"print\",\n        \"print_type\",\n        \"printarray\",\n        \"printf\",\n        \"printf_i\",\n        \"printk\",\n        \"printk2\",\n        \"printks\",\n        \"printks2\",\n        \"prints\",\n        \"product\",\n        \"pset\",\n        \"ptable\",\n        \"ptable3\",\n        \"ptablei\",\n        \"ptableiw\",\n        \"ptablew\",\n        \"ptrack\",\n        \"puts\",\n        \"pvadd\",\n        \"pvbufread\",\n        \"pvcross\",\n        \"pvinterp\",\n        \"pvoc\",\n        \"pvread\",\n        \"pvs2array\",\n        \"pvs2tab\",\n        \"pvsadsyn\",\n        \"pvsanal\",\n        \"pvsarp\",\n        \"pvsbandp\",\n        \"pvsbandr\",\n        \"pvsbin\",\n        \"pvsblur\",\n        \"pvsbuffer\",\n        \"pvsbufread\",\n        \"pvsbufread2\",\n        \"pvscale\",\n        \"pvscent\",\n        \"pvsceps\",\n        \"pvscross\",\n        \"pvsdemix\",\n        \"pvsdiskin\",\n        \"pvsdisp\",\n        \"pvsenvftw\",\n        \"pvsfilter\",\n        \"pvsfread\",\n        \"pvsfreeze\",\n        \"pvsfromarray\",\n        \"pvsftr\",\n        \"pvsftw\",\n        \"pvsfwrite\",\n        \"pvsgain\",\n        \"pvshift\",\n        \"pvsifd\",\n        \"pvsin\",\n        \"pvsinfo\",\n        \"pvsinit\",\n        \"pvslock\",\n        \"pvsmaska\",\n        \"pvsmix\",\n        \"pvsmooth\",\n        \"pvsmorph\",\n        \"pvsosc\",\n        \"pvsout\",\n        \"pvspitch\",\n        \"pvstanal\",\n        \"pvstencil\",\n        \"pvstrace\",\n        \"pvsvoc\",\n        \"pvswarp\",\n        \"pvsynth\",\n        \"pwd\",\n        \"pyassign\",\n        \"pyassigni\",\n        \"pyassignt\",\n        \"pycall\",\n        \"pycall1\",\n        \"pycall1i\",\n        \"pycall1t\",\n        \"pycall2\",\n        \"pycall2i\",\n        \"pycall2t\",\n        \"pycall3\",\n        \"pycall3i\",\n        \"pycall3t\",\n        \"pycall4\",\n        \"pycall4i\",\n        \"pycall4t\",\n        \"pycall5\",\n        \"pycall5i\",\n        \"pycall5t\",\n        \"pycall6\",\n        \"pycall6i\",\n        \"pycall6t\",\n        \"pycall7\",\n        \"pycall7i\",\n        \"pycall7t\",\n        \"pycall8\",\n        \"pycall8i\",\n        \"pycall8t\",\n        \"pycalli\",\n        \"pycalln\",\n        \"pycallni\",\n        \"pycallt\",\n        \"pyeval\",\n        \"pyevali\",\n        \"pyevalt\",\n        \"pyexec\",\n        \"pyexeci\",\n        \"pyexect\",\n        \"pyinit\",\n        \"pylassign\",\n        \"pylassigni\",\n        \"pylassignt\",\n        \"pylcall\",\n        \"pylcall1\",\n        \"pylcall1i\",\n        \"pylcall1t\",\n        \"pylcall2\",\n        \"pylcall2i\",\n        \"pylcall2t\",\n        \"pylcall3\",\n        \"pylcall3i\",\n        \"pylcall3t\",\n        \"pylcall4\",\n        \"pylcall4i\",\n        \"pylcall4t\",\n        \"pylcall5\",\n        \"pylcall5i\",\n        \"pylcall5t\",\n        \"pylcall6\",\n        \"pylcall6i\",\n        \"pylcall6t\",\n        \"pylcall7\",\n        \"pylcall7i\",\n        \"pylcall7t\",\n        \"pylcall8\",\n        \"pylcall8i\",\n        \"pylcall8t\",\n        \"pylcalli\",\n        \"pylcalln\",\n        \"pylcallni\",\n        \"pylcallt\",\n        \"pyleval\",\n        \"pylevali\",\n        \"pylevalt\",\n        \"pylexec\",\n        \"pylexeci\",\n        \"pylexect\",\n        \"pylrun\",\n        \"pylruni\",\n        \"pylrunt\",\n        \"pyrun\",\n        \"pyruni\",\n        \"pyrunt\",\n        \"qinf\",\n        \"qnan\",\n        \"r2c\",\n        \"rand\",\n        \"randh\",\n        \"randi\",\n        \"random\",\n        \"randomh\",\n        \"randomi\",\n        \"rbjeq\",\n        \"readclock\",\n        \"readf\",\n        \"readfi\",\n        \"readk\",\n        \"readk2\",\n        \"readk3\",\n        \"readk4\",\n        \"readks\",\n        \"readscore\",\n        \"readscratch\",\n        \"rect2pol\",\n        \"release\",\n        \"remoteport\",\n        \"remove\",\n        \"repluck\",\n        \"reshapearray\",\n        \"reson\",\n        \"resonk\",\n        \"resonr\",\n        \"resonx\",\n        \"resonxk\",\n        \"resony\",\n        \"resonz\",\n        \"resyn\",\n        \"reverb\",\n        \"reverb2\",\n        \"reverbsc\",\n        \"rewindscore\",\n        \"rezzy\",\n        \"rfft\",\n        \"rifft\",\n        \"rms\",\n        \"rnd\",\n        \"rnd31\",\n        \"round\",\n        \"rspline\",\n        \"rtclock\",\n        \"s16b14\",\n        \"s32b14\",\n        \"samphold\",\n        \"sandpaper\",\n        \"sc_lag\",\n        \"sc_lagud\",\n        \"sc_phasor\",\n        \"sc_trig\",\n        \"scale\",\n        \"scalearray\",\n        \"scanhammer\",\n        \"scans\",\n        \"scantable\",\n        \"scanu\",\n        \"schedkwhen\",\n        \"schedkwhennamed\",\n        \"schedule\",\n        \"schedwhen\",\n        \"scoreline\",\n        \"scoreline_i\",\n        \"seed\",\n        \"sekere\",\n        \"select\",\n        \"semitone\",\n        \"sense\",\n        \"sensekey\",\n        \"seqtime\",\n        \"seqtime2\",\n        \"serialBegin\",\n        \"serialEnd\",\n        \"serialFlush\",\n        \"serialPrint\",\n        \"serialRead\",\n        \"serialWrite\",\n        \"serialWrite_i\",\n        \"setcol\",\n        \"setctrl\",\n        \"setksmps\",\n        \"setrow\",\n        \"setscorepos\",\n        \"sfilist\",\n        \"sfinstr\",\n        \"sfinstr3\",\n        \"sfinstr3m\",\n        \"sfinstrm\",\n        \"sfload\",\n        \"sflooper\",\n        \"sfpassign\",\n        \"sfplay\",\n        \"sfplay3\",\n        \"sfplay3m\",\n        \"sfplaym\",\n        \"sfplist\",\n        \"sfpreset\",\n        \"shaker\",\n        \"shiftin\",\n        \"shiftout\",\n        \"signum\",\n        \"sin\",\n        \"sinh\",\n        \"sininv\",\n        \"sinsyn\",\n        \"sleighbells\",\n        \"slicearray\",\n        \"slicearray_i\",\n        \"slider16\",\n        \"slider16f\",\n        \"slider16table\",\n        \"slider16tablef\",\n        \"slider32\",\n        \"slider32f\",\n        \"slider32table\",\n        \"slider32tablef\",\n        \"slider64\",\n        \"slider64f\",\n        \"slider64table\",\n        \"slider64tablef\",\n        \"slider8\",\n        \"slider8f\",\n        \"slider8table\",\n        \"slider8tablef\",\n        \"sliderKawai\",\n        \"sndloop\",\n        \"sndwarp\",\n        \"sndwarpst\",\n        \"sockrecv\",\n        \"sockrecvs\",\n        \"socksend\",\n        \"socksends\",\n        \"sorta\",\n        \"sortd\",\n        \"soundin\",\n        \"space\",\n        \"spat3d\",\n        \"spat3di\",\n        \"spat3dt\",\n        \"spdist\",\n        \"splitrig\",\n        \"sprintf\",\n        \"sprintfk\",\n        \"spsend\",\n        \"sqrt\",\n        \"squinewave\",\n        \"statevar\",\n        \"stix\",\n        \"strcat\",\n        \"strcatk\",\n        \"strchar\",\n        \"strchark\",\n        \"strcmp\",\n        \"strcmpk\",\n        \"strcpy\",\n        \"strcpyk\",\n        \"strecv\",\n        \"streson\",\n        \"strfromurl\",\n        \"strget\",\n        \"strindex\",\n        \"strindexk\",\n        \"strlen\",\n        \"strlenk\",\n        \"strlower\",\n        \"strlowerk\",\n        \"strrindex\",\n        \"strrindexk\",\n        \"strset\",\n        \"strsub\",\n        \"strsubk\",\n        \"strtod\",\n        \"strtodk\",\n        \"strtol\",\n        \"strtolk\",\n        \"strupper\",\n        \"strupperk\",\n        \"stsend\",\n        \"subinstr\",\n        \"subinstrinit\",\n        \"sum\",\n        \"sumarray\",\n        \"svfilter\",\n        \"syncgrain\",\n        \"syncloop\",\n        \"syncphasor\",\n        \"system\",\n        \"system_i\",\n        \"tab\",\n        \"tab2array\",\n        \"tab2pvs\",\n        \"tab_i\",\n        \"tabifd\",\n        \"table\",\n        \"table3\",\n        \"table3kt\",\n        \"tablecopy\",\n        \"tablefilter\",\n        \"tablefilteri\",\n        \"tablegpw\",\n        \"tablei\",\n        \"tableicopy\",\n        \"tableigpw\",\n        \"tableikt\",\n        \"tableimix\",\n        \"tableiw\",\n        \"tablekt\",\n        \"tablemix\",\n        \"tableng\",\n        \"tablera\",\n        \"tableseg\",\n        \"tableshuffle\",\n        \"tableshufflei\",\n        \"tablew\",\n        \"tablewa\",\n        \"tablewkt\",\n        \"tablexkt\",\n        \"tablexseg\",\n        \"tabmorph\",\n        \"tabmorpha\",\n        \"tabmorphak\",\n        \"tabmorphi\",\n        \"tabplay\",\n        \"tabrec\",\n        \"tabrowlin\",\n        \"tabsum\",\n        \"tabw\",\n        \"tabw_i\",\n        \"tambourine\",\n        \"tan\",\n        \"tanh\",\n        \"taninv\",\n        \"taninv2\",\n        \"tbvcf\",\n        \"tempest\",\n        \"tempo\",\n        \"temposcal\",\n        \"tempoval\",\n        \"timedseq\",\n        \"timeinstk\",\n        \"timeinsts\",\n        \"timek\",\n        \"times\",\n        \"tival\",\n        \"tlineto\",\n        \"tone\",\n        \"tonek\",\n        \"tonex\",\n        \"tradsyn\",\n        \"trandom\",\n        \"transeg\",\n        \"transegb\",\n        \"transegr\",\n        \"trcross\",\n        \"trfilter\",\n        \"trhighest\",\n        \"trigger\",\n        \"trigseq\",\n        \"trim\",\n        \"trim_i\",\n        \"trirand\",\n        \"trlowest\",\n        \"trmix\",\n        \"trscale\",\n        \"trshift\",\n        \"trsplit\",\n        \"turnoff\",\n        \"turnoff2\",\n        \"turnon\",\n        \"tvconv\",\n        \"unirand\",\n        \"unwrap\",\n        \"upsamp\",\n        \"urandom\",\n        \"urd\",\n        \"vactrol\",\n        \"vadd\",\n        \"vadd_i\",\n        \"vaddv\",\n        \"vaddv_i\",\n        \"vaget\",\n        \"valpass\",\n        \"vaset\",\n        \"vbap\",\n        \"vbapg\",\n        \"vbapgmove\",\n        \"vbaplsinit\",\n        \"vbapmove\",\n        \"vbapz\",\n        \"vbapzmove\",\n        \"vcella\",\n        \"vco\",\n        \"vco2\",\n        \"vco2ft\",\n        \"vco2ift\",\n        \"vco2init\",\n        \"vcomb\",\n        \"vcopy\",\n        \"vcopy_i\",\n        \"vdel_k\",\n        \"vdelay\",\n        \"vdelay3\",\n        \"vdelayk\",\n        \"vdelayx\",\n        \"vdelayxq\",\n        \"vdelayxs\",\n        \"vdelayxw\",\n        \"vdelayxwq\",\n        \"vdelayxws\",\n        \"vdivv\",\n        \"vdivv_i\",\n        \"vecdelay\",\n        \"veloc\",\n        \"vexp\",\n        \"vexp_i\",\n        \"vexpseg\",\n        \"vexpv\",\n        \"vexpv_i\",\n        \"vibes\",\n        \"vibr\",\n        \"vibrato\",\n        \"vincr\",\n        \"vlimit\",\n        \"vlinseg\",\n        \"vlowres\",\n        \"vmap\",\n        \"vmirror\",\n        \"vmult\",\n        \"vmult_i\",\n        \"vmultv\",\n        \"vmultv_i\",\n        \"voice\",\n        \"vosim\",\n        \"vphaseseg\",\n        \"vport\",\n        \"vpow\",\n        \"vpow_i\",\n        \"vpowv\",\n        \"vpowv_i\",\n        \"vpvoc\",\n        \"vrandh\",\n        \"vrandi\",\n        \"vsubv\",\n        \"vsubv_i\",\n        \"vtaba\",\n        \"vtabi\",\n        \"vtabk\",\n        \"vtable1k\",\n        \"vtablea\",\n        \"vtablei\",\n        \"vtablek\",\n        \"vtablewa\",\n        \"vtablewi\",\n        \"vtablewk\",\n        \"vtabwa\",\n        \"vtabwi\",\n        \"vtabwk\",\n        \"vwrap\",\n        \"waveset\",\n        \"websocket\",\n        \"weibull\",\n        \"wgbow\",\n        \"wgbowedbar\",\n        \"wgbrass\",\n        \"wgclar\",\n        \"wgflute\",\n        \"wgpluck\",\n        \"wgpluck2\",\n        \"wguide1\",\n        \"wguide2\",\n        \"wiiconnect\",\n        \"wiidata\",\n        \"wiirange\",\n        \"wiisend\",\n        \"window\",\n        \"wrap\",\n        \"writescratch\",\n        \"wterrain\",\n        \"xadsr\",\n        \"xin\",\n        \"xout\",\n        \"xscanmap\",\n        \"xscans\",\n        \"xscansmap\",\n        \"xscanu\",\n        \"xtratim\",\n        \"xyscale\",\n        \"zacl\",\n        \"zakinit\",\n        \"zamod\",\n        \"zar\",\n        \"zarg\",\n        \"zaw\",\n        \"zawm\",\n        \"zdf_1pole\",\n        \"zdf_1pole_mode\",\n        \"zdf_2pole\",\n        \"zdf_2pole_mode\",\n        \"zdf_ladder\",\n        \"zfilter2\",\n        \"zir\",\n        \"ziw\",\n        \"ziwm\",\n        \"zkcl\",\n        \"zkmod\",\n        \"zkr\",\n        \"zkw\",\n        \"zkwm\"\n    ];\n    var deprecatedOpcodes = [\n        \"array\",\n        \"bformdec\",\n        \"bformenc\",\n        \"copy2ftab\",\n        \"copy2ttab\",\n        \"hrtfer\",\n        \"ktableseg\",\n        \"lentab\",\n        \"maxtab\",\n        \"mintab\",\n        \"pop\",\n        \"pop_f\",\n        \"push\",\n        \"push_f\",\n        \"scalet\",\n        \"sndload\",\n        \"soundout\",\n        \"soundouts\",\n        \"specaddm\",\n        \"specdiff\",\n        \"specdisp\",\n        \"specfilt\",\n        \"spechist\",\n        \"specptrk\",\n        \"specscal\",\n        \"specsum\",\n        \"spectrum\",\n        \"stack\",\n        \"sumtab\",\n        \"tabgen\",\n        \"tabmap\",\n        \"tabmap_i\",\n        \"tabslice\",\n        \"tb0\",\n        \"tb0_init\",\n        \"tb1\",\n        \"tb10\",\n        \"tb10_init\",\n        \"tb11\",\n        \"tb11_init\",\n        \"tb12\",\n        \"tb12_init\",\n        \"tb13\",\n        \"tb13_init\",\n        \"tb14\",\n        \"tb14_init\",\n        \"tb15\",\n        \"tb15_init\",\n        \"tb1_init\",\n        \"tb2\",\n        \"tb2_init\",\n        \"tb3\",\n        \"tb3_init\",\n        \"tb4\",\n        \"tb4_init\",\n        \"tb5\",\n        \"tb5_init\",\n        \"tb6\",\n        \"tb6_init\",\n        \"tb7\",\n        \"tb7_init\",\n        \"tb8\",\n        \"tb8_init\",\n        \"tb9\",\n        \"tb9_init\",\n        \"vbap16\",\n        \"vbap4\",\n        \"vbap4move\",\n        \"vbap8\",\n        \"vbap8move\",\n        \"xyin\"\n    ];\n\n    opcodes = lang.arrayToMap(opcodes);\n    deprecatedOpcodes = lang.arrayToMap(deprecatedOpcodes);\n\n    this.lineContinuations = [\n        {\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\$/\n        }, this.pushRule({\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\/,\n            next  : \"line continuation\"\n        })\n    ];\n\n    this.comments.push(this.lineContinuations);\n\n    this.quotedStringContents.push(\n        this.lineContinuations,\n        {\n            token : \"invalid.illegal\",\n            regex : /[^\"\\\\]*$/\n        }\n    );\n\n    var start = this.$rules.start;\n    start.splice(1, 0, {\n        token : [\"text.csound\", \"entity.name.label.csound\", \"entity.punctuation.label.csound\", \"text.csound\"],\n        regex : /^([ \\t]*)(\\w+)(:)([ \\t]+|$)/\n    });\n    start.push(\n        this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\binstr\\b/,\n            next  : \"instrument numbers and identifiers\"\n        }), this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\bopcode\\b/,\n            next  : \"after opcode keyword\"\n        }), {\n            token : \"keyword.other.csound\",\n            regex : /\\bend(?:in|op)\\b/\n        },\n\n        {\n            token : \"variable.language.csound\",\n            regex : /\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound\",\n            regex : \"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~¬]|[=!+\\\\-*/^%&|<>#?:]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }), this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /{{/,\n            next  : \"braced string\"\n        }),\n\n        {\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/\n        },\n\n        this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b[ik]?goto\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:r(?:einit|igoto)|tigoto)\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bc(?:g|in?|k|nk?)goto\\b/,\n            next  : [\"goto before label\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\btimout\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bloop_[gl][et]\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\", \"goto before argument\"]\n        }),\n\n        this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\b(?:readscore|scoreline(?:_i)?)\\b/,\n            next  : \"Csound score opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\bpyl?run[it]?\\b(?!$)/,\n            next  : \"Python opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\blua_(?:exec|opdef)\\b(?!$)/,\n            next  : \"Lua opcode\"\n        }),\n\n        {\n            token : \"support.variable.csound\",\n            regex : /\\bp\\d+\\b/\n        }, {\n            regex : /\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/, onMatch: function(value, currentState, stack, line) {\n                var tokens = value.split(this.splitRegex);\n                var name = tokens[1];\n                var type;\n                if (opcodes.hasOwnProperty(name))\n                    type = \"support.function.csound\";\n                else if (deprecatedOpcodes.hasOwnProperty(name))\n                    type = \"invalid.deprecated.csound\";\n                if (type) {\n                    if (tokens[2]) {\n                        return [\n                            {type: type, value: name},\n                            {type: \"punctuation.type-annotation.csound\", value: tokens[2]},\n                            {type: \"type-annotation.storage.type.csound\", value: tokens[3]}\n                        ];\n                    }\n                    return type;\n                }\n                return \"text.csound\";\n            }\n        }\n    );\n\n    this.$rules[\"macro parameter value list\"].splice(2, 0, {\n        token : \"punctuation.definition.string.begin.csound\",\n        regex : /{{/,\n        next  : \"macro parameter value braced string\"\n    });\n\n    this.addRules({\n        \"macro parameter value braced string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/,\n                next  : \"macro parameter value list\"\n            }, {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"instrument numbers and identifiers\": [\n            this.comments,\n            {\n                token : \"entity.name.function.csound\",\n                regex : /\\d+|[A-Z_a-z]\\w*/\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"after opcode keyword\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), this.popRule({\n                token : \"entity.name.function.opcode.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"opcode type signatures\"\n            })\n        ],\n        \"opcode type signatures\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), {\n                token : \"storage.type.csound\",\n                regex : /\\b(?:0|[afijkKoOpPStV\\[\\]]+)/\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"braced string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/\n            }),\n            this.bracedStringContents,\n            {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"goto before argument\": [\n            this.popRule({\n                token : \"text.csound\",\n                regex : /,/\n            }),\n            start\n        ],\n        \"goto before label\": [\n            {\n                token : \"text.csound\",\n                regex : /\\s+/\n            },\n            this.comments,\n            this.popRule({\n                token : \"entity.name.label.csound\",\n                regex : /\\w+/\n            }), this.popRule({\n                token : \"empty\",\n                regex : /(?!\\w)/\n            })\n        ],\n\n        \"Csound score opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"csound-score-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Python opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"python-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Lua opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"lua-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"line continuation\": [\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }),\n            this.semicolonComments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ]\n    });\n\n    var rules = [\n        this.popRule({\n            token : \"punctuation.definition.string.end.csound\",\n            regex : /}}/\n        })\n    ];\n    this.embedRules(CsoundScoreHighlightRules, \"csound-score-\", rules);\n    this.embedRules(PythonHighlightRules, \"python-\", rules);\n    this.embedRules(LuaHighlightRules, \"lua-\", rules);\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundOrchestraHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundOrchestraHighlightRules = CsoundOrchestraHighlightRules;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/csound_document_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_orchestra_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundOrchestraHighlightRules = require(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundDocumentHighlightRules = function() {\n\n    this.$rules = {\n        \"start\": [\n            {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : /(<)(CsoundSynthesi[sz]er)(>)/,\n                next  : \"synthesizer\"\n            },\n            {defaultToken : \"text.csound-document\"}\n        ],\n\n        \"synthesizer\": [\n            {\n                token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(</)(CsoundSynthesi[sz]er)(>)\",\n                next  : \"start\"\n            }, {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(<)(CsInstruments)(>)\",\n                next  : \"csound-start\"\n            }, {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(<)(CsScore)(>)\",\n                next  : \"csound-score-start\"\n            }, {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(<)([Hh][Tt][Mm][Ll])(>)\",\n                next  : \"html-start\"\n            }\n        ]\n    };\n\n    this.embedRules(CsoundOrchestraHighlightRules, \"csound-\", [{\n        token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n        regex : \"(</)(CsInstruments)(>)\",\n        next  : \"synthesizer\"\n    }]);\n    this.embedRules(CsoundScoreHighlightRules, \"csound-score-\", [{\n        token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n        regex : \"(</)(CsScore)(>)\",\n        next  : \"synthesizer\"\n    }]);\n    this.embedRules(HtmlHighlightRules, \"html-\", [{\n        token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n        regex : \"(</)([Hh][Tt][Mm][Ll])(>)\",\n        next  : \"synthesizer\"\n    }]);\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundDocumentHighlightRules, TextHighlightRules);\n\nexports.CsoundDocumentHighlightRules = CsoundDocumentHighlightRules;\n});\n\ndefine(\"ace/mode/csound_document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_document_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundDocumentHighlightRules = require(\"./csound_document_highlight_rules\").CsoundDocumentHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CsoundDocumentHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-csound_orchestra.js",
    "content": "define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundPreprocessorHighlightRules = function() {\n\n    this.semicolonComments = {\n        token : \"comment.line.semicolon.csound\",\n        regex : \";.*$\"\n    };\n\n    this.comments = [\n        {\n            token : \"punctuation.definition.comment.begin.csound\",\n            regex : \"/\\\\*\",\n            push  : [\n                {\n                    token : \"punctuation.definition.comment.end.csound\",\n                    regex : \"\\\\*/\",\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token : \"comment.line.double-slash.csound\",\n            regex : \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n\n    this.macroUses = [\n        {\n            token : [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex : /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next  : \"macro parameter value list\"\n        }, {\n            token : \"entity.name.function.preprocessor.csound\",\n            regex : /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n\n    this.numbers = [\n        {\n            token : \"constant.numeric.float.csound\",\n            regex : /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token : [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex : /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token : \"constant.numeric.integer.decimal.csound\",\n            regex : /\\d+/\n        }\n    ];\n\n    this.bracedStringContents = [\n        {\n            token : \"constant.character.escape.csound\",\n            regex : /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        {\n            token : \"constant.character.placeholder.csound\",\n            regex : /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token : \"constant.character.escape.csound\",\n            regex : /%%/\n        }\n    ];\n\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n\n    var start = [\n        this.comments,\n\n        {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#include/,\n            push  : [\n                this.comments,\n                {\n                    token : \"string.csound\",\n                    regex : /([^ \\t])(?:.*?\\1)/,\n                    next  : \"pop\"\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#[ \\t]*define/,\n            next  : \"define directive\"\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:ifn?def|undef)\\b/,\n            next  : \"macro directive\"\n        },\n\n        this.macroUses\n    ];\n\n    this.$rules = {\n        \"start\": start,\n\n        \"define directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter name list\"\n            }, {\n                token : \"punctuation.definition.macro.begin.csound\",\n                regex : /#/,\n                next  : \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token : \"variable.parameter.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex : /\\)/,\n                next  : \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\#/\n            }, {\n                token : \"punctuation.definition.macro.end.csound\",\n                regex : /#/,\n                next  : \"start\"\n            },\n            start\n        ],\n\n        \"macro directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"macro parameter value list\": [\n            {\n                token : \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex : /\\)/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }), {\n                token : \"punctuation.macro-parameter-value-separator.csound\",\n                regex : \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\\\)/\n            }, this.popRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex : /\\)/\n            }), this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\n\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n\n(function() {\n\n    this.pushRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                } else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (Array.isArray(params.next)) {\n                    var oldNext = params.next[params.next.length - 1];\n                    var oldNextIndex = oldNext.length - 1;\n                    var newNextIndex = next.length - 1;\n                    if (newNextIndex > oldNextIndex) {\n                        while (oldNextIndex >= 0 && newNextIndex >= 0) {\n                            if (oldNext.charAt(oldNextIndex) !== next.charAt(newNextIndex)) {\n                                var prefix = next.substr(0, newNextIndex);\n                                for (var i = 0; i < params.next.length; i++) {\n                                    params.next[i] = prefix + params.next[i];\n                                }\n                                break;\n                            }\n                            oldNextIndex--;\n                            newNextIndex--;\n                        }\n                    }\n                } else {\n                    params.next = next;\n                }\n            },\n            get token() { return params.token; }\n        };\n    };\n\n    this.popRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                } else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n\n}).call(CsoundPreprocessorHighlightRules.prototype);\n\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n});\n\ndefine(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\n\nvar CsoundScoreHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n\n    this.quotedStringContents.push({\n        token : \"invalid.illegal.csound-score\",\n        regex : /[^\"]*$/\n    });\n\n    var start = this.$rules.start;\n    start.push(\n        {\n            token : \"keyword.control.csound-score\",\n            regex : /[abCdefiqstvxy]/\n        }, {\n            token : \"invalid.illegal.csound-score\",\n            regex : /w/\n        }, {\n            token : \"constant.numeric.language.csound-score\",\n            regex : /z/\n        }, {\n            token : [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n            regex : /([nNpP][pP])(\\d+)/\n        }, {\n            token : \"keyword.other.csound-score\",\n            regex : /[mn]/,\n            push  : [\n                {\n                    token : \"empty\",\n                    regex : /$/,\n                    next  : \"pop\"\n                },\n                this.comments,\n                {\n                    token : \"entity.name.label.csound-score\",\n                    regex : /[A-Z_a-z]\\w*/\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound-score\",\n            regex : /r\\b/,\n            next  : \"repeat section\"\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound-score\",\n            regex : \"[!+\\\\-*/^%&|<>#~.]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound-score\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }),\n\n        this.pushRule({\n            token : \"punctuation.braced-loop.begin.csound-score\",\n            regex : /{/,\n            next  : \"loop after left brace\"\n        })\n    );\n\n    this.addRules({\n        \"repeat section\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"entity.name.label.csound-score\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound-score\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n\n        \"loop after left brace\": [\n            this.popRule({\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token : \"entity.name.function.preprocessor.csound-score\",\n                regex : /[A-Z_a-z]\\w*\\b/,\n                next  : \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token : \"punctuation.braced-loop.end.csound-score\",\n                regex : /}/\n            })\n        ]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n});\n\ndefine(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuaHighlightRules = function() {\n\n    var keywords = (\n        \"break|do|else|elseif|end|for|function|if|in|local|repeat|\"+\n         \"return|then|until|while|or|and|not\"\n    );\n\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n\n    var functions = (\n        \"string|xpcall|package|tostring|print|os|unpack|require|\"+\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\"+\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\"+\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\"+\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\"+\n        \"load|error|loadfile|\"+\n\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\"+\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\"+\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\"+\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\"+\n        \"lines|write|close|flush|open|output|type|read|stderr|\"+\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\"+\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\"+\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\"+\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\"+\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\"+\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\"+\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\"+\n        \"status|wrap|create|running|\"+\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\"+\n         \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\"\n    );\n\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [{\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex : /\\-\\-\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"comment\";\n                    },\n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ]\n        },\n\n        {\n            token : \"comment\",\n            regex : \"\\\\-\\\\-.*$\"\n        },\n        {\n            stateName: \"bracketedString\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length, currentState);\n                return \"string.start\";\n            },\n            regex : /\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"string.end\";\n                    },\n                    \n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        },\n        {\n            token : \"string\",           // \" string\n            regex : '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+|\\\\w+\"\n        } ]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LuaHighlightRules, TextHighlightRules);\n\nexports.LuaHighlightRules = LuaHighlightRules;\n});\n\ndefine(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\"\n    );\n\n    var builtinConstants = (\n        \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n    );\n\n    var builtinFunctions = (\n        \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + '\"{3}',\n            next: \"rawqqstring3\"\n        }, {\n            token: \"string\", \n            regex: strRawPre + '\"(?=.)',\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'{3}\",\n            next: \"rawqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'(?=.)\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"{3}',\n            next: \"fqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"(?=.)',\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'{3}\",\n            next: \"fqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'(?=.)\",\n            next: \"fqstring\"\n        },{\n            token: \"string\",\n            regex: strRawFormatPre + '\"{3}',\n            next: \"rfqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + '\"(?=.)',\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'{3}\",\n            next: \"rfqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'(?=.)\",\n            next: \"rfqstring\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }, {\n            include: \"constants\"\n        }],\n        \"qqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring\": [{\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstringParRules\": [{//TODO: nested {}\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)]\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string\",\n            regex: \"'(.)*'\"\n        }, {\n            token: \"string\",\n            regex: '\"(.)*\"'\n        }, {\n            token: \"function.support\",\n            regex: \"(!s|!r|!a)\"\n        }, {\n            include: \"constants\"\n        },{\n            token: 'paren.rparen',\n            regex: \"}\",\n            next: 'pop'\n        },{\n            token: 'paren.lparen',\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }],\n        \"constants\": [{\n            token: \"constant.numeric\", // imaginary\n            regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: floatNumber\n        }, {\n            token: \"constant.numeric\", // long integer\n            regex: integer + \"[lL]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // integer\n            regex: integer + \"\\\\b\"\n        }, {\n            token: [\"punctuation\", \"function.support\"],// method\n            regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n\ndefine(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\n\nvar CsoundOrchestraHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n    var opcodes = [\n        \"ATSadd\",\n        \"ATSaddnz\",\n        \"ATSbufread\",\n        \"ATScross\",\n        \"ATSinfo\",\n        \"ATSinterpread\",\n        \"ATSpartialtap\",\n        \"ATSread\",\n        \"ATSreadnz\",\n        \"ATSsinnoi\",\n        \"FLbox\",\n        \"FLbutBank\",\n        \"FLbutton\",\n        \"FLcloseButton\",\n        \"FLcolor\",\n        \"FLcolor2\",\n        \"FLcount\",\n        \"FLexecButton\",\n        \"FLgetsnap\",\n        \"FLgroup\",\n        \"FLgroupEnd\",\n        \"FLgroup_end\",\n        \"FLhide\",\n        \"FLhvsBox\",\n        \"FLhvsBoxSetValue\",\n        \"FLjoy\",\n        \"FLkeyIn\",\n        \"FLknob\",\n        \"FLlabel\",\n        \"FLloadsnap\",\n        \"FLmouse\",\n        \"FLpack\",\n        \"FLpackEnd\",\n        \"FLpack_end\",\n        \"FLpanel\",\n        \"FLpanelEnd\",\n        \"FLpanel_end\",\n        \"FLprintk\",\n        \"FLprintk2\",\n        \"FLroller\",\n        \"FLrun\",\n        \"FLsavesnap\",\n        \"FLscroll\",\n        \"FLscrollEnd\",\n        \"FLscroll_end\",\n        \"FLsetAlign\",\n        \"FLsetBox\",\n        \"FLsetColor\",\n        \"FLsetColor2\",\n        \"FLsetFont\",\n        \"FLsetPosition\",\n        \"FLsetSize\",\n        \"FLsetSnapGroup\",\n        \"FLsetText\",\n        \"FLsetTextColor\",\n        \"FLsetTextSize\",\n        \"FLsetTextType\",\n        \"FLsetVal\",\n        \"FLsetVal_i\",\n        \"FLsetVali\",\n        \"FLsetsnap\",\n        \"FLshow\",\n        \"FLslidBnk\",\n        \"FLslidBnk2\",\n        \"FLslidBnk2Set\",\n        \"FLslidBnk2Setk\",\n        \"FLslidBnkGetHandle\",\n        \"FLslidBnkSet\",\n        \"FLslidBnkSetk\",\n        \"FLslider\",\n        \"FLtabs\",\n        \"FLtabsEnd\",\n        \"FLtabs_end\",\n        \"FLtext\",\n        \"FLupdate\",\n        \"FLvalue\",\n        \"FLvkeybd\",\n        \"FLvslidBnk\",\n        \"FLvslidBnk2\",\n        \"FLxyin\",\n        \"JackoAudioIn\",\n        \"JackoAudioInConnect\",\n        \"JackoAudioOut\",\n        \"JackoAudioOutConnect\",\n        \"JackoFreewheel\",\n        \"JackoInfo\",\n        \"JackoInit\",\n        \"JackoMidiInConnect\",\n        \"JackoMidiOut\",\n        \"JackoMidiOutConnect\",\n        \"JackoNoteOut\",\n        \"JackoOn\",\n        \"JackoTransport\",\n        \"K35_hpf\",\n        \"K35_lpf\",\n        \"MixerClear\",\n        \"MixerGetLevel\",\n        \"MixerReceive\",\n        \"MixerSend\",\n        \"MixerSetLevel\",\n        \"MixerSetLevel_i\",\n        \"OSCbundle\",\n        \"OSCcount\",\n        \"OSCinit\",\n        \"OSCinitM\",\n        \"OSClisten\",\n        \"OSCraw\",\n        \"OSCsend\",\n        \"OSCsend_lo\",\n        \"S\",\n        \"STKBandedWG\",\n        \"STKBeeThree\",\n        \"STKBlowBotl\",\n        \"STKBlowHole\",\n        \"STKBowed\",\n        \"STKBrass\",\n        \"STKClarinet\",\n        \"STKDrummer\",\n        \"STKFMVoices\",\n        \"STKFlute\",\n        \"STKHevyMetl\",\n        \"STKMandolin\",\n        \"STKModalBar\",\n        \"STKMoog\",\n        \"STKPercFlut\",\n        \"STKPlucked\",\n        \"STKResonate\",\n        \"STKRhodey\",\n        \"STKSaxofony\",\n        \"STKShakers\",\n        \"STKSimple\",\n        \"STKSitar\",\n        \"STKStifKarp\",\n        \"STKTubeBell\",\n        \"STKVoicForm\",\n        \"STKWhistle\",\n        \"STKWurley\",\n        \"a\",\n        \"abs\",\n        \"active\",\n        \"adsr\",\n        \"adsyn\",\n        \"adsynt\",\n        \"adsynt2\",\n        \"aftouch\",\n        \"alpass\",\n        \"alwayson\",\n        \"ampdb\",\n        \"ampdbfs\",\n        \"ampmidi\",\n        \"ampmidid\",\n        \"areson\",\n        \"aresonk\",\n        \"atone\",\n        \"atonek\",\n        \"atonex\",\n        \"babo\",\n        \"balance\",\n        \"balance2\",\n        \"bamboo\",\n        \"barmodel\",\n        \"bbcutm\",\n        \"bbcuts\",\n        \"beadsynt\",\n        \"beosc\",\n        \"betarand\",\n        \"bexprnd\",\n        \"bformdec1\",\n        \"bformenc1\",\n        \"binit\",\n        \"biquad\",\n        \"biquada\",\n        \"birnd\",\n        \"bpf\",\n        \"bpfcos\",\n        \"bqrez\",\n        \"butbp\",\n        \"butbr\",\n        \"buthp\",\n        \"butlp\",\n        \"butterbp\",\n        \"butterbr\",\n        \"butterhp\",\n        \"butterlp\",\n        \"button\",\n        \"buzz\",\n        \"c2r\",\n        \"cabasa\",\n        \"cauchy\",\n        \"cauchyi\",\n        \"cbrt\",\n        \"ceil\",\n        \"cell\",\n        \"cent\",\n        \"centroid\",\n        \"ceps\",\n        \"cepsinv\",\n        \"chanctrl\",\n        \"changed\",\n        \"changed2\",\n        \"chani\",\n        \"chano\",\n        \"chebyshevpoly\",\n        \"checkbox\",\n        \"chn_S\",\n        \"chn_a\",\n        \"chn_k\",\n        \"chnclear\",\n        \"chnexport\",\n        \"chnget\",\n        \"chngetks\",\n        \"chnmix\",\n        \"chnparams\",\n        \"chnset\",\n        \"chnsetks\",\n        \"chuap\",\n        \"clear\",\n        \"clfilt\",\n        \"clip\",\n        \"clockoff\",\n        \"clockon\",\n        \"cmp\",\n        \"cmplxprod\",\n        \"comb\",\n        \"combinv\",\n        \"compilecsd\",\n        \"compileorc\",\n        \"compilestr\",\n        \"compress\",\n        \"compress2\",\n        \"connect\",\n        \"control\",\n        \"convle\",\n        \"convolve\",\n        \"copya2ftab\",\n        \"copyf2array\",\n        \"cos\",\n        \"cosh\",\n        \"cosinv\",\n        \"cosseg\",\n        \"cossegb\",\n        \"cossegr\",\n        \"cps2pch\",\n        \"cpsmidi\",\n        \"cpsmidib\",\n        \"cpsmidinn\",\n        \"cpsoct\",\n        \"cpspch\",\n        \"cpstmid\",\n        \"cpstun\",\n        \"cpstuni\",\n        \"cpsxpch\",\n        \"cpumeter\",\n        \"cpuprc\",\n        \"cross2\",\n        \"crossfm\",\n        \"crossfmi\",\n        \"crossfmpm\",\n        \"crossfmpmi\",\n        \"crosspm\",\n        \"crosspmi\",\n        \"crunch\",\n        \"ctlchn\",\n        \"ctrl14\",\n        \"ctrl21\",\n        \"ctrl7\",\n        \"ctrlinit\",\n        \"cuserrnd\",\n        \"dam\",\n        \"date\",\n        \"dates\",\n        \"db\",\n        \"dbamp\",\n        \"dbfsamp\",\n        \"dcblock\",\n        \"dcblock2\",\n        \"dconv\",\n        \"dct\",\n        \"dctinv\",\n        \"deinterleave\",\n        \"delay\",\n        \"delay1\",\n        \"delayk\",\n        \"delayr\",\n        \"delayw\",\n        \"deltap\",\n        \"deltap3\",\n        \"deltapi\",\n        \"deltapn\",\n        \"deltapx\",\n        \"deltapxw\",\n        \"denorm\",\n        \"diff\",\n        \"diode_ladder\",\n        \"directory\",\n        \"diskgrain\",\n        \"diskin\",\n        \"diskin2\",\n        \"dispfft\",\n        \"display\",\n        \"distort\",\n        \"distort1\",\n        \"divz\",\n        \"doppler\",\n        \"dot\",\n        \"downsamp\",\n        \"dripwater\",\n        \"dssiactivate\",\n        \"dssiaudio\",\n        \"dssictls\",\n        \"dssiinit\",\n        \"dssilist\",\n        \"dumpk\",\n        \"dumpk2\",\n        \"dumpk3\",\n        \"dumpk4\",\n        \"duserrnd\",\n        \"dust\",\n        \"dust2\",\n        \"envlpx\",\n        \"envlpxr\",\n        \"ephasor\",\n        \"eqfil\",\n        \"evalstr\",\n        \"event\",\n        \"event_i\",\n        \"exciter\",\n        \"exitnow\",\n        \"exp\",\n        \"expcurve\",\n        \"expon\",\n        \"exprand\",\n        \"exprandi\",\n        \"expseg\",\n        \"expsega\",\n        \"expsegb\",\n        \"expsegba\",\n        \"expsegr\",\n        \"fareylen\",\n        \"fareyleni\",\n        \"faustaudio\",\n        \"faustcompile\",\n        \"faustctl\",\n        \"faustdsp\",\n        \"faustgen\",\n        \"faustplay\",\n        \"fft\",\n        \"fftinv\",\n        \"ficlose\",\n        \"filebit\",\n        \"filelen\",\n        \"filenchnls\",\n        \"filepeak\",\n        \"filescal\",\n        \"filesr\",\n        \"filevalid\",\n        \"fillarray\",\n        \"filter2\",\n        \"fin\",\n        \"fini\",\n        \"fink\",\n        \"fiopen\",\n        \"flanger\",\n        \"flashtxt\",\n        \"flooper\",\n        \"flooper2\",\n        \"floor\",\n        \"fmanal\",\n        \"fmax\",\n        \"fmb3\",\n        \"fmbell\",\n        \"fmin\",\n        \"fmmetal\",\n        \"fmod\",\n        \"fmpercfl\",\n        \"fmrhode\",\n        \"fmvoice\",\n        \"fmwurlie\",\n        \"fof\",\n        \"fof2\",\n        \"fofilter\",\n        \"fog\",\n        \"fold\",\n        \"follow\",\n        \"follow2\",\n        \"foscil\",\n        \"foscili\",\n        \"fout\",\n        \"fouti\",\n        \"foutir\",\n        \"foutk\",\n        \"fprintks\",\n        \"fprints\",\n        \"frac\",\n        \"fractalnoise\",\n        \"framebuffer\",\n        \"freeverb\",\n        \"ftaudio\",\n        \"ftchnls\",\n        \"ftconv\",\n        \"ftcps\",\n        \"ftfree\",\n        \"ftgen\",\n        \"ftgenonce\",\n        \"ftgentmp\",\n        \"ftlen\",\n        \"ftload\",\n        \"ftloadk\",\n        \"ftlptim\",\n        \"ftmorf\",\n        \"ftom\",\n        \"ftprint\",\n        \"ftresize\",\n        \"ftresizei\",\n        \"ftsamplebank\",\n        \"ftsave\",\n        \"ftsavek\",\n        \"ftslice\",\n        \"ftsr\",\n        \"gain\",\n        \"gainslider\",\n        \"gauss\",\n        \"gaussi\",\n        \"gausstrig\",\n        \"gbuzz\",\n        \"genarray\",\n        \"genarray_i\",\n        \"gendy\",\n        \"gendyc\",\n        \"gendyx\",\n        \"getcfg\",\n        \"getcol\",\n        \"getftargs\",\n        \"getrow\",\n        \"getrowlin\",\n        \"getseed\",\n        \"gogobel\",\n        \"grain\",\n        \"grain2\",\n        \"grain3\",\n        \"granule\",\n        \"guiro\",\n        \"harmon\",\n        \"harmon2\",\n        \"harmon3\",\n        \"harmon4\",\n        \"hdf5read\",\n        \"hdf5write\",\n        \"hilbert\",\n        \"hilbert2\",\n        \"hrtfearly\",\n        \"hrtfmove\",\n        \"hrtfmove2\",\n        \"hrtfreverb\",\n        \"hrtfstat\",\n        \"hsboscil\",\n        \"hvs1\",\n        \"hvs2\",\n        \"hvs3\",\n        \"hypot\",\n        \"i\",\n        \"ihold\",\n        \"imagecreate\",\n        \"imagefree\",\n        \"imagegetpixel\",\n        \"imageload\",\n        \"imagesave\",\n        \"imagesetpixel\",\n        \"imagesize\",\n        \"in\",\n        \"in32\",\n        \"inch\",\n        \"inh\",\n        \"init\",\n        \"initc14\",\n        \"initc21\",\n        \"initc7\",\n        \"inleta\",\n        \"inletf\",\n        \"inletk\",\n        \"inletkid\",\n        \"inletv\",\n        \"ino\",\n        \"inq\",\n        \"inrg\",\n        \"ins\",\n        \"insglobal\",\n        \"insremot\",\n        \"int\",\n        \"integ\",\n        \"interleave\",\n        \"interp\",\n        \"invalue\",\n        \"inx\",\n        \"inz\",\n        \"jacktransport\",\n        \"jitter\",\n        \"jitter2\",\n        \"joystick\",\n        \"jspline\",\n        \"k\",\n        \"la_i_add_mc\",\n        \"la_i_add_mr\",\n        \"la_i_add_vc\",\n        \"la_i_add_vr\",\n        \"la_i_assign_mc\",\n        \"la_i_assign_mr\",\n        \"la_i_assign_t\",\n        \"la_i_assign_vc\",\n        \"la_i_assign_vr\",\n        \"la_i_conjugate_mc\",\n        \"la_i_conjugate_mr\",\n        \"la_i_conjugate_vc\",\n        \"la_i_conjugate_vr\",\n        \"la_i_distance_vc\",\n        \"la_i_distance_vr\",\n        \"la_i_divide_mc\",\n        \"la_i_divide_mr\",\n        \"la_i_divide_vc\",\n        \"la_i_divide_vr\",\n        \"la_i_dot_mc\",\n        \"la_i_dot_mc_vc\",\n        \"la_i_dot_mr\",\n        \"la_i_dot_mr_vr\",\n        \"la_i_dot_vc\",\n        \"la_i_dot_vr\",\n        \"la_i_get_mc\",\n        \"la_i_get_mr\",\n        \"la_i_get_vc\",\n        \"la_i_get_vr\",\n        \"la_i_invert_mc\",\n        \"la_i_invert_mr\",\n        \"la_i_lower_solve_mc\",\n        \"la_i_lower_solve_mr\",\n        \"la_i_lu_det_mc\",\n        \"la_i_lu_det_mr\",\n        \"la_i_lu_factor_mc\",\n        \"la_i_lu_factor_mr\",\n        \"la_i_lu_solve_mc\",\n        \"la_i_lu_solve_mr\",\n        \"la_i_mc_create\",\n        \"la_i_mc_set\",\n        \"la_i_mr_create\",\n        \"la_i_mr_set\",\n        \"la_i_multiply_mc\",\n        \"la_i_multiply_mr\",\n        \"la_i_multiply_vc\",\n        \"la_i_multiply_vr\",\n        \"la_i_norm1_mc\",\n        \"la_i_norm1_mr\",\n        \"la_i_norm1_vc\",\n        \"la_i_norm1_vr\",\n        \"la_i_norm_euclid_mc\",\n        \"la_i_norm_euclid_mr\",\n        \"la_i_norm_euclid_vc\",\n        \"la_i_norm_euclid_vr\",\n        \"la_i_norm_inf_mc\",\n        \"la_i_norm_inf_mr\",\n        \"la_i_norm_inf_vc\",\n        \"la_i_norm_inf_vr\",\n        \"la_i_norm_max_mc\",\n        \"la_i_norm_max_mr\",\n        \"la_i_print_mc\",\n        \"la_i_print_mr\",\n        \"la_i_print_vc\",\n        \"la_i_print_vr\",\n        \"la_i_qr_eigen_mc\",\n        \"la_i_qr_eigen_mr\",\n        \"la_i_qr_factor_mc\",\n        \"la_i_qr_factor_mr\",\n        \"la_i_qr_sym_eigen_mc\",\n        \"la_i_qr_sym_eigen_mr\",\n        \"la_i_random_mc\",\n        \"la_i_random_mr\",\n        \"la_i_random_vc\",\n        \"la_i_random_vr\",\n        \"la_i_size_mc\",\n        \"la_i_size_mr\",\n        \"la_i_size_vc\",\n        \"la_i_size_vr\",\n        \"la_i_subtract_mc\",\n        \"la_i_subtract_mr\",\n        \"la_i_subtract_vc\",\n        \"la_i_subtract_vr\",\n        \"la_i_t_assign\",\n        \"la_i_trace_mc\",\n        \"la_i_trace_mr\",\n        \"la_i_transpose_mc\",\n        \"la_i_transpose_mr\",\n        \"la_i_upper_solve_mc\",\n        \"la_i_upper_solve_mr\",\n        \"la_i_vc_create\",\n        \"la_i_vc_set\",\n        \"la_i_vr_create\",\n        \"la_i_vr_set\",\n        \"la_k_a_assign\",\n        \"la_k_add_mc\",\n        \"la_k_add_mr\",\n        \"la_k_add_vc\",\n        \"la_k_add_vr\",\n        \"la_k_assign_a\",\n        \"la_k_assign_f\",\n        \"la_k_assign_mc\",\n        \"la_k_assign_mr\",\n        \"la_k_assign_t\",\n        \"la_k_assign_vc\",\n        \"la_k_assign_vr\",\n        \"la_k_conjugate_mc\",\n        \"la_k_conjugate_mr\",\n        \"la_k_conjugate_vc\",\n        \"la_k_conjugate_vr\",\n        \"la_k_current_f\",\n        \"la_k_current_vr\",\n        \"la_k_distance_vc\",\n        \"la_k_distance_vr\",\n        \"la_k_divide_mc\",\n        \"la_k_divide_mr\",\n        \"la_k_divide_vc\",\n        \"la_k_divide_vr\",\n        \"la_k_dot_mc\",\n        \"la_k_dot_mc_vc\",\n        \"la_k_dot_mr\",\n        \"la_k_dot_mr_vr\",\n        \"la_k_dot_vc\",\n        \"la_k_dot_vr\",\n        \"la_k_f_assign\",\n        \"la_k_get_mc\",\n        \"la_k_get_mr\",\n        \"la_k_get_vc\",\n        \"la_k_get_vr\",\n        \"la_k_invert_mc\",\n        \"la_k_invert_mr\",\n        \"la_k_lower_solve_mc\",\n        \"la_k_lower_solve_mr\",\n        \"la_k_lu_det_mc\",\n        \"la_k_lu_det_mr\",\n        \"la_k_lu_factor_mc\",\n        \"la_k_lu_factor_mr\",\n        \"la_k_lu_solve_mc\",\n        \"la_k_lu_solve_mr\",\n        \"la_k_mc_set\",\n        \"la_k_mr_set\",\n        \"la_k_multiply_mc\",\n        \"la_k_multiply_mr\",\n        \"la_k_multiply_vc\",\n        \"la_k_multiply_vr\",\n        \"la_k_norm1_mc\",\n        \"la_k_norm1_mr\",\n        \"la_k_norm1_vc\",\n        \"la_k_norm1_vr\",\n        \"la_k_norm_euclid_mc\",\n        \"la_k_norm_euclid_mr\",\n        \"la_k_norm_euclid_vc\",\n        \"la_k_norm_euclid_vr\",\n        \"la_k_norm_inf_mc\",\n        \"la_k_norm_inf_mr\",\n        \"la_k_norm_inf_vc\",\n        \"la_k_norm_inf_vr\",\n        \"la_k_norm_max_mc\",\n        \"la_k_norm_max_mr\",\n        \"la_k_qr_eigen_mc\",\n        \"la_k_qr_eigen_mr\",\n        \"la_k_qr_factor_mc\",\n        \"la_k_qr_factor_mr\",\n        \"la_k_qr_sym_eigen_mc\",\n        \"la_k_qr_sym_eigen_mr\",\n        \"la_k_random_mc\",\n        \"la_k_random_mr\",\n        \"la_k_random_vc\",\n        \"la_k_random_vr\",\n        \"la_k_subtract_mc\",\n        \"la_k_subtract_mr\",\n        \"la_k_subtract_vc\",\n        \"la_k_subtract_vr\",\n        \"la_k_t_assign\",\n        \"la_k_trace_mc\",\n        \"la_k_trace_mr\",\n        \"la_k_upper_solve_mc\",\n        \"la_k_upper_solve_mr\",\n        \"la_k_vc_set\",\n        \"la_k_vr_set\",\n        \"lenarray\",\n        \"lfo\",\n        \"limit\",\n        \"limit1\",\n        \"lincos\",\n        \"line\",\n        \"linen\",\n        \"linenr\",\n        \"lineto\",\n        \"link_beat_force\",\n        \"link_beat_get\",\n        \"link_beat_request\",\n        \"link_create\",\n        \"link_enable\",\n        \"link_is_enabled\",\n        \"link_metro\",\n        \"link_peers\",\n        \"link_tempo_get\",\n        \"link_tempo_set\",\n        \"linlin\",\n        \"linrand\",\n        \"linseg\",\n        \"linsegb\",\n        \"linsegr\",\n        \"liveconv\",\n        \"locsend\",\n        \"locsig\",\n        \"log\",\n        \"log10\",\n        \"log2\",\n        \"logbtwo\",\n        \"logcurve\",\n        \"loopseg\",\n        \"loopsegp\",\n        \"looptseg\",\n        \"loopxseg\",\n        \"lorenz\",\n        \"loscil\",\n        \"loscil3\",\n        \"loscil3phs\",\n        \"loscilphs\",\n        \"loscilx\",\n        \"lowpass2\",\n        \"lowres\",\n        \"lowresx\",\n        \"lpf18\",\n        \"lpform\",\n        \"lpfreson\",\n        \"lphasor\",\n        \"lpinterp\",\n        \"lposcil\",\n        \"lposcil3\",\n        \"lposcila\",\n        \"lposcilsa\",\n        \"lposcilsa2\",\n        \"lpread\",\n        \"lpreson\",\n        \"lpshold\",\n        \"lpsholdp\",\n        \"lpslot\",\n        \"lua_exec\",\n        \"lua_iaopcall\",\n        \"lua_iaopcall_off\",\n        \"lua_ikopcall\",\n        \"lua_ikopcall_off\",\n        \"lua_iopcall\",\n        \"lua_iopcall_off\",\n        \"lua_opdef\",\n        \"mac\",\n        \"maca\",\n        \"madsr\",\n        \"mags\",\n        \"mandel\",\n        \"mandol\",\n        \"maparray\",\n        \"maparray_i\",\n        \"marimba\",\n        \"massign\",\n        \"max\",\n        \"max_k\",\n        \"maxabs\",\n        \"maxabsaccum\",\n        \"maxaccum\",\n        \"maxalloc\",\n        \"maxarray\",\n        \"mclock\",\n        \"mdelay\",\n        \"median\",\n        \"mediank\",\n        \"metro\",\n        \"mfb\",\n        \"midglobal\",\n        \"midiarp\",\n        \"midic14\",\n        \"midic21\",\n        \"midic7\",\n        \"midichannelaftertouch\",\n        \"midichn\",\n        \"midicontrolchange\",\n        \"midictrl\",\n        \"mididefault\",\n        \"midifilestatus\",\n        \"midiin\",\n        \"midinoteoff\",\n        \"midinoteoncps\",\n        \"midinoteonkey\",\n        \"midinoteonoct\",\n        \"midinoteonpch\",\n        \"midion\",\n        \"midion2\",\n        \"midiout\",\n        \"midiout_i\",\n        \"midipgm\",\n        \"midipitchbend\",\n        \"midipolyaftertouch\",\n        \"midiprogramchange\",\n        \"miditempo\",\n        \"midremot\",\n        \"min\",\n        \"minabs\",\n        \"minabsaccum\",\n        \"minaccum\",\n        \"minarray\",\n        \"mincer\",\n        \"mirror\",\n        \"mode\",\n        \"modmatrix\",\n        \"monitor\",\n        \"moog\",\n        \"moogladder\",\n        \"moogladder2\",\n        \"moogvcf\",\n        \"moogvcf2\",\n        \"moscil\",\n        \"mp3bitrate\",\n        \"mp3in\",\n        \"mp3len\",\n        \"mp3nchnls\",\n        \"mp3scal\",\n        \"mp3sr\",\n        \"mpulse\",\n        \"mrtmsg\",\n        \"mtof\",\n        \"mton\",\n        \"multitap\",\n        \"mute\",\n        \"mvchpf\",\n        \"mvclpf1\",\n        \"mvclpf2\",\n        \"mvclpf3\",\n        \"mvclpf4\",\n        \"mxadsr\",\n        \"nchnls_hw\",\n        \"nestedap\",\n        \"nlalp\",\n        \"nlfilt\",\n        \"nlfilt2\",\n        \"noise\",\n        \"noteoff\",\n        \"noteon\",\n        \"noteondur\",\n        \"noteondur2\",\n        \"notnum\",\n        \"nreverb\",\n        \"nrpn\",\n        \"nsamp\",\n        \"nstance\",\n        \"nstrnum\",\n        \"ntom\",\n        \"ntrpol\",\n        \"nxtpow2\",\n        \"octave\",\n        \"octcps\",\n        \"octmidi\",\n        \"octmidib\",\n        \"octmidinn\",\n        \"octpch\",\n        \"olabuffer\",\n        \"oscbnk\",\n        \"oscil\",\n        \"oscil1\",\n        \"oscil1i\",\n        \"oscil3\",\n        \"oscili\",\n        \"oscilikt\",\n        \"osciliktp\",\n        \"oscilikts\",\n        \"osciln\",\n        \"oscils\",\n        \"oscilx\",\n        \"out\",\n        \"out32\",\n        \"outc\",\n        \"outch\",\n        \"outh\",\n        \"outiat\",\n        \"outic\",\n        \"outic14\",\n        \"outipat\",\n        \"outipb\",\n        \"outipc\",\n        \"outkat\",\n        \"outkc\",\n        \"outkc14\",\n        \"outkpat\",\n        \"outkpb\",\n        \"outkpc\",\n        \"outleta\",\n        \"outletf\",\n        \"outletk\",\n        \"outletkid\",\n        \"outletv\",\n        \"outo\",\n        \"outq\",\n        \"outq1\",\n        \"outq2\",\n        \"outq3\",\n        \"outq4\",\n        \"outrg\",\n        \"outs\",\n        \"outs1\",\n        \"outs2\",\n        \"outvalue\",\n        \"outx\",\n        \"outz\",\n        \"p\",\n        \"p5gconnect\",\n        \"p5gdata\",\n        \"pan\",\n        \"pan2\",\n        \"pareq\",\n        \"part2txt\",\n        \"partials\",\n        \"partikkel\",\n        \"partikkelget\",\n        \"partikkelset\",\n        \"partikkelsync\",\n        \"passign\",\n        \"paulstretch\",\n        \"pcauchy\",\n        \"pchbend\",\n        \"pchmidi\",\n        \"pchmidib\",\n        \"pchmidinn\",\n        \"pchoct\",\n        \"pchtom\",\n        \"pconvolve\",\n        \"pcount\",\n        \"pdclip\",\n        \"pdhalf\",\n        \"pdhalfy\",\n        \"peak\",\n        \"pgmassign\",\n        \"pgmchn\",\n        \"phaser1\",\n        \"phaser2\",\n        \"phasor\",\n        \"phasorbnk\",\n        \"phs\",\n        \"pindex\",\n        \"pinker\",\n        \"pinkish\",\n        \"pitch\",\n        \"pitchac\",\n        \"pitchamdf\",\n        \"planet\",\n        \"platerev\",\n        \"plltrack\",\n        \"pluck\",\n        \"poisson\",\n        \"pol2rect\",\n        \"polyaft\",\n        \"polynomial\",\n        \"port\",\n        \"portk\",\n        \"poscil\",\n        \"poscil3\",\n        \"pow\",\n        \"powershape\",\n        \"powoftwo\",\n        \"pows\",\n        \"prealloc\",\n        \"prepiano\",\n        \"print\",\n        \"print_type\",\n        \"printarray\",\n        \"printf\",\n        \"printf_i\",\n        \"printk\",\n        \"printk2\",\n        \"printks\",\n        \"printks2\",\n        \"prints\",\n        \"product\",\n        \"pset\",\n        \"ptable\",\n        \"ptable3\",\n        \"ptablei\",\n        \"ptableiw\",\n        \"ptablew\",\n        \"ptrack\",\n        \"puts\",\n        \"pvadd\",\n        \"pvbufread\",\n        \"pvcross\",\n        \"pvinterp\",\n        \"pvoc\",\n        \"pvread\",\n        \"pvs2array\",\n        \"pvs2tab\",\n        \"pvsadsyn\",\n        \"pvsanal\",\n        \"pvsarp\",\n        \"pvsbandp\",\n        \"pvsbandr\",\n        \"pvsbin\",\n        \"pvsblur\",\n        \"pvsbuffer\",\n        \"pvsbufread\",\n        \"pvsbufread2\",\n        \"pvscale\",\n        \"pvscent\",\n        \"pvsceps\",\n        \"pvscross\",\n        \"pvsdemix\",\n        \"pvsdiskin\",\n        \"pvsdisp\",\n        \"pvsenvftw\",\n        \"pvsfilter\",\n        \"pvsfread\",\n        \"pvsfreeze\",\n        \"pvsfromarray\",\n        \"pvsftr\",\n        \"pvsftw\",\n        \"pvsfwrite\",\n        \"pvsgain\",\n        \"pvshift\",\n        \"pvsifd\",\n        \"pvsin\",\n        \"pvsinfo\",\n        \"pvsinit\",\n        \"pvslock\",\n        \"pvsmaska\",\n        \"pvsmix\",\n        \"pvsmooth\",\n        \"pvsmorph\",\n        \"pvsosc\",\n        \"pvsout\",\n        \"pvspitch\",\n        \"pvstanal\",\n        \"pvstencil\",\n        \"pvstrace\",\n        \"pvsvoc\",\n        \"pvswarp\",\n        \"pvsynth\",\n        \"pwd\",\n        \"pyassign\",\n        \"pyassigni\",\n        \"pyassignt\",\n        \"pycall\",\n        \"pycall1\",\n        \"pycall1i\",\n        \"pycall1t\",\n        \"pycall2\",\n        \"pycall2i\",\n        \"pycall2t\",\n        \"pycall3\",\n        \"pycall3i\",\n        \"pycall3t\",\n        \"pycall4\",\n        \"pycall4i\",\n        \"pycall4t\",\n        \"pycall5\",\n        \"pycall5i\",\n        \"pycall5t\",\n        \"pycall6\",\n        \"pycall6i\",\n        \"pycall6t\",\n        \"pycall7\",\n        \"pycall7i\",\n        \"pycall7t\",\n        \"pycall8\",\n        \"pycall8i\",\n        \"pycall8t\",\n        \"pycalli\",\n        \"pycalln\",\n        \"pycallni\",\n        \"pycallt\",\n        \"pyeval\",\n        \"pyevali\",\n        \"pyevalt\",\n        \"pyexec\",\n        \"pyexeci\",\n        \"pyexect\",\n        \"pyinit\",\n        \"pylassign\",\n        \"pylassigni\",\n        \"pylassignt\",\n        \"pylcall\",\n        \"pylcall1\",\n        \"pylcall1i\",\n        \"pylcall1t\",\n        \"pylcall2\",\n        \"pylcall2i\",\n        \"pylcall2t\",\n        \"pylcall3\",\n        \"pylcall3i\",\n        \"pylcall3t\",\n        \"pylcall4\",\n        \"pylcall4i\",\n        \"pylcall4t\",\n        \"pylcall5\",\n        \"pylcall5i\",\n        \"pylcall5t\",\n        \"pylcall6\",\n        \"pylcall6i\",\n        \"pylcall6t\",\n        \"pylcall7\",\n        \"pylcall7i\",\n        \"pylcall7t\",\n        \"pylcall8\",\n        \"pylcall8i\",\n        \"pylcall8t\",\n        \"pylcalli\",\n        \"pylcalln\",\n        \"pylcallni\",\n        \"pylcallt\",\n        \"pyleval\",\n        \"pylevali\",\n        \"pylevalt\",\n        \"pylexec\",\n        \"pylexeci\",\n        \"pylexect\",\n        \"pylrun\",\n        \"pylruni\",\n        \"pylrunt\",\n        \"pyrun\",\n        \"pyruni\",\n        \"pyrunt\",\n        \"qinf\",\n        \"qnan\",\n        \"r2c\",\n        \"rand\",\n        \"randh\",\n        \"randi\",\n        \"random\",\n        \"randomh\",\n        \"randomi\",\n        \"rbjeq\",\n        \"readclock\",\n        \"readf\",\n        \"readfi\",\n        \"readk\",\n        \"readk2\",\n        \"readk3\",\n        \"readk4\",\n        \"readks\",\n        \"readscore\",\n        \"readscratch\",\n        \"rect2pol\",\n        \"release\",\n        \"remoteport\",\n        \"remove\",\n        \"repluck\",\n        \"reshapearray\",\n        \"reson\",\n        \"resonk\",\n        \"resonr\",\n        \"resonx\",\n        \"resonxk\",\n        \"resony\",\n        \"resonz\",\n        \"resyn\",\n        \"reverb\",\n        \"reverb2\",\n        \"reverbsc\",\n        \"rewindscore\",\n        \"rezzy\",\n        \"rfft\",\n        \"rifft\",\n        \"rms\",\n        \"rnd\",\n        \"rnd31\",\n        \"round\",\n        \"rspline\",\n        \"rtclock\",\n        \"s16b14\",\n        \"s32b14\",\n        \"samphold\",\n        \"sandpaper\",\n        \"sc_lag\",\n        \"sc_lagud\",\n        \"sc_phasor\",\n        \"sc_trig\",\n        \"scale\",\n        \"scalearray\",\n        \"scanhammer\",\n        \"scans\",\n        \"scantable\",\n        \"scanu\",\n        \"schedkwhen\",\n        \"schedkwhennamed\",\n        \"schedule\",\n        \"schedwhen\",\n        \"scoreline\",\n        \"scoreline_i\",\n        \"seed\",\n        \"sekere\",\n        \"select\",\n        \"semitone\",\n        \"sense\",\n        \"sensekey\",\n        \"seqtime\",\n        \"seqtime2\",\n        \"serialBegin\",\n        \"serialEnd\",\n        \"serialFlush\",\n        \"serialPrint\",\n        \"serialRead\",\n        \"serialWrite\",\n        \"serialWrite_i\",\n        \"setcol\",\n        \"setctrl\",\n        \"setksmps\",\n        \"setrow\",\n        \"setscorepos\",\n        \"sfilist\",\n        \"sfinstr\",\n        \"sfinstr3\",\n        \"sfinstr3m\",\n        \"sfinstrm\",\n        \"sfload\",\n        \"sflooper\",\n        \"sfpassign\",\n        \"sfplay\",\n        \"sfplay3\",\n        \"sfplay3m\",\n        \"sfplaym\",\n        \"sfplist\",\n        \"sfpreset\",\n        \"shaker\",\n        \"shiftin\",\n        \"shiftout\",\n        \"signum\",\n        \"sin\",\n        \"sinh\",\n        \"sininv\",\n        \"sinsyn\",\n        \"sleighbells\",\n        \"slicearray\",\n        \"slicearray_i\",\n        \"slider16\",\n        \"slider16f\",\n        \"slider16table\",\n        \"slider16tablef\",\n        \"slider32\",\n        \"slider32f\",\n        \"slider32table\",\n        \"slider32tablef\",\n        \"slider64\",\n        \"slider64f\",\n        \"slider64table\",\n        \"slider64tablef\",\n        \"slider8\",\n        \"slider8f\",\n        \"slider8table\",\n        \"slider8tablef\",\n        \"sliderKawai\",\n        \"sndloop\",\n        \"sndwarp\",\n        \"sndwarpst\",\n        \"sockrecv\",\n        \"sockrecvs\",\n        \"socksend\",\n        \"socksends\",\n        \"sorta\",\n        \"sortd\",\n        \"soundin\",\n        \"space\",\n        \"spat3d\",\n        \"spat3di\",\n        \"spat3dt\",\n        \"spdist\",\n        \"splitrig\",\n        \"sprintf\",\n        \"sprintfk\",\n        \"spsend\",\n        \"sqrt\",\n        \"squinewave\",\n        \"statevar\",\n        \"stix\",\n        \"strcat\",\n        \"strcatk\",\n        \"strchar\",\n        \"strchark\",\n        \"strcmp\",\n        \"strcmpk\",\n        \"strcpy\",\n        \"strcpyk\",\n        \"strecv\",\n        \"streson\",\n        \"strfromurl\",\n        \"strget\",\n        \"strindex\",\n        \"strindexk\",\n        \"strlen\",\n        \"strlenk\",\n        \"strlower\",\n        \"strlowerk\",\n        \"strrindex\",\n        \"strrindexk\",\n        \"strset\",\n        \"strsub\",\n        \"strsubk\",\n        \"strtod\",\n        \"strtodk\",\n        \"strtol\",\n        \"strtolk\",\n        \"strupper\",\n        \"strupperk\",\n        \"stsend\",\n        \"subinstr\",\n        \"subinstrinit\",\n        \"sum\",\n        \"sumarray\",\n        \"svfilter\",\n        \"syncgrain\",\n        \"syncloop\",\n        \"syncphasor\",\n        \"system\",\n        \"system_i\",\n        \"tab\",\n        \"tab2array\",\n        \"tab2pvs\",\n        \"tab_i\",\n        \"tabifd\",\n        \"table\",\n        \"table3\",\n        \"table3kt\",\n        \"tablecopy\",\n        \"tablefilter\",\n        \"tablefilteri\",\n        \"tablegpw\",\n        \"tablei\",\n        \"tableicopy\",\n        \"tableigpw\",\n        \"tableikt\",\n        \"tableimix\",\n        \"tableiw\",\n        \"tablekt\",\n        \"tablemix\",\n        \"tableng\",\n        \"tablera\",\n        \"tableseg\",\n        \"tableshuffle\",\n        \"tableshufflei\",\n        \"tablew\",\n        \"tablewa\",\n        \"tablewkt\",\n        \"tablexkt\",\n        \"tablexseg\",\n        \"tabmorph\",\n        \"tabmorpha\",\n        \"tabmorphak\",\n        \"tabmorphi\",\n        \"tabplay\",\n        \"tabrec\",\n        \"tabrowlin\",\n        \"tabsum\",\n        \"tabw\",\n        \"tabw_i\",\n        \"tambourine\",\n        \"tan\",\n        \"tanh\",\n        \"taninv\",\n        \"taninv2\",\n        \"tbvcf\",\n        \"tempest\",\n        \"tempo\",\n        \"temposcal\",\n        \"tempoval\",\n        \"timedseq\",\n        \"timeinstk\",\n        \"timeinsts\",\n        \"timek\",\n        \"times\",\n        \"tival\",\n        \"tlineto\",\n        \"tone\",\n        \"tonek\",\n        \"tonex\",\n        \"tradsyn\",\n        \"trandom\",\n        \"transeg\",\n        \"transegb\",\n        \"transegr\",\n        \"trcross\",\n        \"trfilter\",\n        \"trhighest\",\n        \"trigger\",\n        \"trigseq\",\n        \"trim\",\n        \"trim_i\",\n        \"trirand\",\n        \"trlowest\",\n        \"trmix\",\n        \"trscale\",\n        \"trshift\",\n        \"trsplit\",\n        \"turnoff\",\n        \"turnoff2\",\n        \"turnon\",\n        \"tvconv\",\n        \"unirand\",\n        \"unwrap\",\n        \"upsamp\",\n        \"urandom\",\n        \"urd\",\n        \"vactrol\",\n        \"vadd\",\n        \"vadd_i\",\n        \"vaddv\",\n        \"vaddv_i\",\n        \"vaget\",\n        \"valpass\",\n        \"vaset\",\n        \"vbap\",\n        \"vbapg\",\n        \"vbapgmove\",\n        \"vbaplsinit\",\n        \"vbapmove\",\n        \"vbapz\",\n        \"vbapzmove\",\n        \"vcella\",\n        \"vco\",\n        \"vco2\",\n        \"vco2ft\",\n        \"vco2ift\",\n        \"vco2init\",\n        \"vcomb\",\n        \"vcopy\",\n        \"vcopy_i\",\n        \"vdel_k\",\n        \"vdelay\",\n        \"vdelay3\",\n        \"vdelayk\",\n        \"vdelayx\",\n        \"vdelayxq\",\n        \"vdelayxs\",\n        \"vdelayxw\",\n        \"vdelayxwq\",\n        \"vdelayxws\",\n        \"vdivv\",\n        \"vdivv_i\",\n        \"vecdelay\",\n        \"veloc\",\n        \"vexp\",\n        \"vexp_i\",\n        \"vexpseg\",\n        \"vexpv\",\n        \"vexpv_i\",\n        \"vibes\",\n        \"vibr\",\n        \"vibrato\",\n        \"vincr\",\n        \"vlimit\",\n        \"vlinseg\",\n        \"vlowres\",\n        \"vmap\",\n        \"vmirror\",\n        \"vmult\",\n        \"vmult_i\",\n        \"vmultv\",\n        \"vmultv_i\",\n        \"voice\",\n        \"vosim\",\n        \"vphaseseg\",\n        \"vport\",\n        \"vpow\",\n        \"vpow_i\",\n        \"vpowv\",\n        \"vpowv_i\",\n        \"vpvoc\",\n        \"vrandh\",\n        \"vrandi\",\n        \"vsubv\",\n        \"vsubv_i\",\n        \"vtaba\",\n        \"vtabi\",\n        \"vtabk\",\n        \"vtable1k\",\n        \"vtablea\",\n        \"vtablei\",\n        \"vtablek\",\n        \"vtablewa\",\n        \"vtablewi\",\n        \"vtablewk\",\n        \"vtabwa\",\n        \"vtabwi\",\n        \"vtabwk\",\n        \"vwrap\",\n        \"waveset\",\n        \"websocket\",\n        \"weibull\",\n        \"wgbow\",\n        \"wgbowedbar\",\n        \"wgbrass\",\n        \"wgclar\",\n        \"wgflute\",\n        \"wgpluck\",\n        \"wgpluck2\",\n        \"wguide1\",\n        \"wguide2\",\n        \"wiiconnect\",\n        \"wiidata\",\n        \"wiirange\",\n        \"wiisend\",\n        \"window\",\n        \"wrap\",\n        \"writescratch\",\n        \"wterrain\",\n        \"xadsr\",\n        \"xin\",\n        \"xout\",\n        \"xscanmap\",\n        \"xscans\",\n        \"xscansmap\",\n        \"xscanu\",\n        \"xtratim\",\n        \"xyscale\",\n        \"zacl\",\n        \"zakinit\",\n        \"zamod\",\n        \"zar\",\n        \"zarg\",\n        \"zaw\",\n        \"zawm\",\n        \"zdf_1pole\",\n        \"zdf_1pole_mode\",\n        \"zdf_2pole\",\n        \"zdf_2pole_mode\",\n        \"zdf_ladder\",\n        \"zfilter2\",\n        \"zir\",\n        \"ziw\",\n        \"ziwm\",\n        \"zkcl\",\n        \"zkmod\",\n        \"zkr\",\n        \"zkw\",\n        \"zkwm\"\n    ];\n    var deprecatedOpcodes = [\n        \"array\",\n        \"bformdec\",\n        \"bformenc\",\n        \"copy2ftab\",\n        \"copy2ttab\",\n        \"hrtfer\",\n        \"ktableseg\",\n        \"lentab\",\n        \"maxtab\",\n        \"mintab\",\n        \"pop\",\n        \"pop_f\",\n        \"push\",\n        \"push_f\",\n        \"scalet\",\n        \"sndload\",\n        \"soundout\",\n        \"soundouts\",\n        \"specaddm\",\n        \"specdiff\",\n        \"specdisp\",\n        \"specfilt\",\n        \"spechist\",\n        \"specptrk\",\n        \"specscal\",\n        \"specsum\",\n        \"spectrum\",\n        \"stack\",\n        \"sumtab\",\n        \"tabgen\",\n        \"tabmap\",\n        \"tabmap_i\",\n        \"tabslice\",\n        \"tb0\",\n        \"tb0_init\",\n        \"tb1\",\n        \"tb10\",\n        \"tb10_init\",\n        \"tb11\",\n        \"tb11_init\",\n        \"tb12\",\n        \"tb12_init\",\n        \"tb13\",\n        \"tb13_init\",\n        \"tb14\",\n        \"tb14_init\",\n        \"tb15\",\n        \"tb15_init\",\n        \"tb1_init\",\n        \"tb2\",\n        \"tb2_init\",\n        \"tb3\",\n        \"tb3_init\",\n        \"tb4\",\n        \"tb4_init\",\n        \"tb5\",\n        \"tb5_init\",\n        \"tb6\",\n        \"tb6_init\",\n        \"tb7\",\n        \"tb7_init\",\n        \"tb8\",\n        \"tb8_init\",\n        \"tb9\",\n        \"tb9_init\",\n        \"vbap16\",\n        \"vbap4\",\n        \"vbap4move\",\n        \"vbap8\",\n        \"vbap8move\",\n        \"xyin\"\n    ];\n\n    opcodes = lang.arrayToMap(opcodes);\n    deprecatedOpcodes = lang.arrayToMap(deprecatedOpcodes);\n\n    this.lineContinuations = [\n        {\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\$/\n        }, this.pushRule({\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\/,\n            next  : \"line continuation\"\n        })\n    ];\n\n    this.comments.push(this.lineContinuations);\n\n    this.quotedStringContents.push(\n        this.lineContinuations,\n        {\n            token : \"invalid.illegal\",\n            regex : /[^\"\\\\]*$/\n        }\n    );\n\n    var start = this.$rules.start;\n    start.splice(1, 0, {\n        token : [\"text.csound\", \"entity.name.label.csound\", \"entity.punctuation.label.csound\", \"text.csound\"],\n        regex : /^([ \\t]*)(\\w+)(:)([ \\t]+|$)/\n    });\n    start.push(\n        this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\binstr\\b/,\n            next  : \"instrument numbers and identifiers\"\n        }), this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\bopcode\\b/,\n            next  : \"after opcode keyword\"\n        }), {\n            token : \"keyword.other.csound\",\n            regex : /\\bend(?:in|op)\\b/\n        },\n\n        {\n            token : \"variable.language.csound\",\n            regex : /\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound\",\n            regex : \"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~¬]|[=!+\\\\-*/^%&|<>#?:]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }), this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /{{/,\n            next  : \"braced string\"\n        }),\n\n        {\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/\n        },\n\n        this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b[ik]?goto\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:r(?:einit|igoto)|tigoto)\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bc(?:g|in?|k|nk?)goto\\b/,\n            next  : [\"goto before label\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\btimout\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bloop_[gl][et]\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\", \"goto before argument\"]\n        }),\n\n        this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\b(?:readscore|scoreline(?:_i)?)\\b/,\n            next  : \"Csound score opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\bpyl?run[it]?\\b(?!$)/,\n            next  : \"Python opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\blua_(?:exec|opdef)\\b(?!$)/,\n            next  : \"Lua opcode\"\n        }),\n\n        {\n            token : \"support.variable.csound\",\n            regex : /\\bp\\d+\\b/\n        }, {\n            regex : /\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/, onMatch: function(value, currentState, stack, line) {\n                var tokens = value.split(this.splitRegex);\n                var name = tokens[1];\n                var type;\n                if (opcodes.hasOwnProperty(name))\n                    type = \"support.function.csound\";\n                else if (deprecatedOpcodes.hasOwnProperty(name))\n                    type = \"invalid.deprecated.csound\";\n                if (type) {\n                    if (tokens[2]) {\n                        return [\n                            {type: type, value: name},\n                            {type: \"punctuation.type-annotation.csound\", value: tokens[2]},\n                            {type: \"type-annotation.storage.type.csound\", value: tokens[3]}\n                        ];\n                    }\n                    return type;\n                }\n                return \"text.csound\";\n            }\n        }\n    );\n\n    this.$rules[\"macro parameter value list\"].splice(2, 0, {\n        token : \"punctuation.definition.string.begin.csound\",\n        regex : /{{/,\n        next  : \"macro parameter value braced string\"\n    });\n\n    this.addRules({\n        \"macro parameter value braced string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/,\n                next  : \"macro parameter value list\"\n            }, {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"instrument numbers and identifiers\": [\n            this.comments,\n            {\n                token : \"entity.name.function.csound\",\n                regex : /\\d+|[A-Z_a-z]\\w*/\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"after opcode keyword\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), this.popRule({\n                token : \"entity.name.function.opcode.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"opcode type signatures\"\n            })\n        ],\n        \"opcode type signatures\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), {\n                token : \"storage.type.csound\",\n                regex : /\\b(?:0|[afijkKoOpPStV\\[\\]]+)/\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"braced string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/\n            }),\n            this.bracedStringContents,\n            {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"goto before argument\": [\n            this.popRule({\n                token : \"text.csound\",\n                regex : /,/\n            }),\n            start\n        ],\n        \"goto before label\": [\n            {\n                token : \"text.csound\",\n                regex : /\\s+/\n            },\n            this.comments,\n            this.popRule({\n                token : \"entity.name.label.csound\",\n                regex : /\\w+/\n            }), this.popRule({\n                token : \"empty\",\n                regex : /(?!\\w)/\n            })\n        ],\n\n        \"Csound score opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"csound-score-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Python opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"python-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Lua opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"lua-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"line continuation\": [\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }),\n            this.semicolonComments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ]\n    });\n\n    var rules = [\n        this.popRule({\n            token : \"punctuation.definition.string.end.csound\",\n            regex : /}}/\n        })\n    ];\n    this.embedRules(CsoundScoreHighlightRules, \"csound-score-\", rules);\n    this.embedRules(PythonHighlightRules, \"python-\", rules);\n    this.embedRules(LuaHighlightRules, \"lua-\", rules);\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundOrchestraHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundOrchestraHighlightRules = CsoundOrchestraHighlightRules;\n});\n\ndefine(\"ace/mode/csound_orchestra\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_orchestra_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundOrchestraHighlightRules = require(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CsoundOrchestraHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-csound_score.js",
    "content": "define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundPreprocessorHighlightRules = function() {\n\n    this.semicolonComments = {\n        token : \"comment.line.semicolon.csound\",\n        regex : \";.*$\"\n    };\n\n    this.comments = [\n        {\n            token : \"punctuation.definition.comment.begin.csound\",\n            regex : \"/\\\\*\",\n            push  : [\n                {\n                    token : \"punctuation.definition.comment.end.csound\",\n                    regex : \"\\\\*/\",\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token : \"comment.line.double-slash.csound\",\n            regex : \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n\n    this.macroUses = [\n        {\n            token : [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex : /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next  : \"macro parameter value list\"\n        }, {\n            token : \"entity.name.function.preprocessor.csound\",\n            regex : /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n\n    this.numbers = [\n        {\n            token : \"constant.numeric.float.csound\",\n            regex : /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token : [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex : /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token : \"constant.numeric.integer.decimal.csound\",\n            regex : /\\d+/\n        }\n    ];\n\n    this.bracedStringContents = [\n        {\n            token : \"constant.character.escape.csound\",\n            regex : /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        {\n            token : \"constant.character.placeholder.csound\",\n            regex : /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token : \"constant.character.escape.csound\",\n            regex : /%%/\n        }\n    ];\n\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n\n    var start = [\n        this.comments,\n\n        {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#include/,\n            push  : [\n                this.comments,\n                {\n                    token : \"string.csound\",\n                    regex : /([^ \\t])(?:.*?\\1)/,\n                    next  : \"pop\"\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#[ \\t]*define/,\n            next  : \"define directive\"\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:ifn?def|undef)\\b/,\n            next  : \"macro directive\"\n        },\n\n        this.macroUses\n    ];\n\n    this.$rules = {\n        \"start\": start,\n\n        \"define directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter name list\"\n            }, {\n                token : \"punctuation.definition.macro.begin.csound\",\n                regex : /#/,\n                next  : \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token : \"variable.parameter.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex : /\\)/,\n                next  : \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\#/\n            }, {\n                token : \"punctuation.definition.macro.end.csound\",\n                regex : /#/,\n                next  : \"start\"\n            },\n            start\n        ],\n\n        \"macro directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"macro parameter value list\": [\n            {\n                token : \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex : /\\)/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }), {\n                token : \"punctuation.macro-parameter-value-separator.csound\",\n                regex : \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\\\)/\n            }, this.popRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex : /\\)/\n            }), this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\n\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n\n(function() {\n\n    this.pushRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                } else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (Array.isArray(params.next)) {\n                    var oldNext = params.next[params.next.length - 1];\n                    var oldNextIndex = oldNext.length - 1;\n                    var newNextIndex = next.length - 1;\n                    if (newNextIndex > oldNextIndex) {\n                        while (oldNextIndex >= 0 && newNextIndex >= 0) {\n                            if (oldNext.charAt(oldNextIndex) !== next.charAt(newNextIndex)) {\n                                var prefix = next.substr(0, newNextIndex);\n                                for (var i = 0; i < params.next.length; i++) {\n                                    params.next[i] = prefix + params.next[i];\n                                }\n                                break;\n                            }\n                            oldNextIndex--;\n                            newNextIndex--;\n                        }\n                    }\n                } else {\n                    params.next = next;\n                }\n            },\n            get token() { return params.token; }\n        };\n    };\n\n    this.popRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                } else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n\n}).call(CsoundPreprocessorHighlightRules.prototype);\n\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n});\n\ndefine(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\n\nvar CsoundScoreHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n\n    this.quotedStringContents.push({\n        token : \"invalid.illegal.csound-score\",\n        regex : /[^\"]*$/\n    });\n\n    var start = this.$rules.start;\n    start.push(\n        {\n            token : \"keyword.control.csound-score\",\n            regex : /[abCdefiqstvxy]/\n        }, {\n            token : \"invalid.illegal.csound-score\",\n            regex : /w/\n        }, {\n            token : \"constant.numeric.language.csound-score\",\n            regex : /z/\n        }, {\n            token : [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n            regex : /([nNpP][pP])(\\d+)/\n        }, {\n            token : \"keyword.other.csound-score\",\n            regex : /[mn]/,\n            push  : [\n                {\n                    token : \"empty\",\n                    regex : /$/,\n                    next  : \"pop\"\n                },\n                this.comments,\n                {\n                    token : \"entity.name.label.csound-score\",\n                    regex : /[A-Z_a-z]\\w*/\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound-score\",\n            regex : /r\\b/,\n            next  : \"repeat section\"\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound-score\",\n            regex : \"[!+\\\\-*/^%&|<>#~.]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound-score\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }),\n\n        this.pushRule({\n            token : \"punctuation.braced-loop.begin.csound-score\",\n            regex : /{/,\n            next  : \"loop after left brace\"\n        })\n    );\n\n    this.addRules({\n        \"repeat section\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"entity.name.label.csound-score\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound-score\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n\n        \"loop after left brace\": [\n            this.popRule({\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token : \"entity.name.function.preprocessor.csound-score\",\n                regex : /[A-Z_a-z]\\w*\\b/,\n                next  : \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token : \"punctuation.braced-loop.end.csound-score\",\n                regex : /}/\n            })\n        ]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n});\n\ndefine(\"ace/mode/csound_score\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_score_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CsoundScoreHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-csp.js",
    "content": "define(\"ace/mode/csp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var CspHighlightRules = function() {\n        var keywordMapper = this.createKeywordMapper({\n            \"constant.language\": \"child-src|connect-src|default-src|font-src|frame-src|img-src|manifest-src|media-src|object-src\"\n                  + \"|script-src|style-src|worker-src|base-uri|plugin-types|sandbox|disown-opener|form-action|frame-ancestors|report-uri\"\n                  + \"|report-to|upgrade-insecure-requests|block-all-mixed-content|require-sri-for|reflected-xss|referrer|policy-uri\",\n            \"variable\": \"'none'|'self'|'unsafe-inline'|'unsafe-eval'|'strict-dynamic'|'unsafe-hashed-attributes'\"\n        }, \"identifier\", true);\n\n        this.$rules = {\n            start: [{\n                token: \"string.link\",\n                regex: /https?:[^;\\s]*/\n            }, {\n                token: \"operator.punctuation\",\n                regex: /;/\n            }, {\n                token: keywordMapper,\n                regex: /[^\\s;]+/\n            }]\n        };\n    };\n\n    oop.inherits(CspHighlightRules, TextHighlightRules);\n\n    exports.CspHighlightRules = CspHighlightRules;\n});\n\ndefine(\"ace/mode/csp\",[\"require\",\"exports\",\"module\",\"ace/mode/text\",\"ace/mode/csp_highlight_rules\",\"ace/lib/oop\"], function(require, exports, module) {\n    \"use strict\";\n\n    var TextMode = require(\"./text\").Mode;\n    var CspHighlightRules = require(\"./csp_highlight_rules\").CspHighlightRules;\n    var oop = require(\"../lib/oop\");\n\n    var Mode = function() {\n        this.HighlightRules = CspHighlightRules;\n    };\n\n    oop.inherits(Mode, TextMode);\n\n    (function() {\n        this.$id = \"ace/mode/csp\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-css.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-curly.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/curly_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\n\nvar CurlyHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    this.$rules[\"start\"].unshift({\n        token: \"variable\",\n        regex: \"{{\",\n        push: \"curly-start\"\n    });\n\n    this.$rules[\"curly-start\"] = [{\n        token: \"variable\",\n        regex: \"}}\",\n        next: \"pop\"\n    }];\n\n    this.normalizeRules();\n};\n\noop.inherits(CurlyHighlightRules, HtmlHighlightRules);\n\nexports.CurlyHighlightRules = CurlyHighlightRules;\n\n});\n\ndefine(\"ace/mode/curly\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/html\",\"ace/mode/curly_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar CurlyHighlightRules = require(\"./curly_highlight_rules\").CurlyHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = CurlyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new HtmlFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.$id = \"ace/mode/curly\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-d.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/d_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DHighlightRules = function() {\n\n    var keywords = (\n        \"this|super|import|module|body|mixin|__traits|invariant|alias|asm|delete|\"+\n        \"typeof|typeid|sizeof|cast|new|in|is|typedef|__vector|__parameters\"\n    );\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|foreach|foreach_reverse|goto|if|\" +\n        \"return|switch|while|catch|try|throw|finally|version|assert|unittest|with\"\n    );\n    \n    var types = (\n        \"auto|bool|char|dchar|wchar|byte|ubyte|float|double|real|\" +\n        \"cfloat|creal|cdouble|cent|ifloat|ireal|idouble|\" +\n        \"int|long|short|void|uint|ulong|ushort|ucent|\" +\n        \"function|delegate|string|wstring|dstring|size_t|ptrdiff_t|hash_t|Object\"\n    );\n\n    var modifiers = (\n        \"abstract|align|debug|deprecated|export|extern|const|final|in|inout|out|\" +\n        \"ref|immutable|lazy|nothrow|override|package|pragma|private|protected|\" +\n        \"public|pure|scope|shared|__gshared|synchronized|static|volatile\"\n    );\n    \n    var storages = (\n        \"class|struct|union|template|interface|enum|macro\"\n    );\n    \n    var stringEscapesSeq =  {\n        token: \"constant.language.escape\",\n        regex: \"\\\\\\\\(?:(?:x[0-9A-F]{2})|(?:[0-7]{1,3})|(?:['\\\"\\\\?0abfnrtv\\\\\\\\])|\" +\n            \"(?:u[0-9a-fA-F]{4})|(?:U[0-9a-fA-F]{8}))\"\n    };\n\n    var builtinConstants = (\n        \"null|true|false|\"+\n        \"__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__|\"+\n        \"__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__\"\n    );\n    \n    var operators = (\n        \"/|/\\\\=|&|&\\\\=|&&|\\\\|\\\\|\\\\=|\\\\|\\\\||\\\\-|\\\\-\\\\=|\\\\-\\\\-|\\\\+|\" +\n        \"\\\\+\\\\=|\\\\+\\\\+|\\\\<|\\\\<\\\\=|\\\\<\\\\<|\\\\<\\\\<\\\\=|\\\\<\\\\>|\\\\<\\\\>\\\\=|\\\\>|\\\\>\\\\=|\\\\>\\\\>\\\\=|\" +\n        \"\\\\>\\\\>\\\\>\\\\=|\\\\>\\\\>|\\\\>\\\\>\\\\>|\\\\!|\\\\!\\\\=|\\\\!\\\\<\\\\>|\\\\!\\\\<\\\\>\\\\=|\\\\!\\\\<|\\\\!\\\\<\\\\=|\" +\n        \"\\\\!\\\\>|\\\\!\\\\>\\\\=|\\\\?|\\\\$|\\\\=|\\\\=\\\\=|\\\\*|\\\\*\\\\=|%|%\\\\=|\" +\n        \"\\\\^|\\\\^\\\\=|\\\\^\\\\^|\\\\^\\\\^\\\\=|~|~\\\\=|\\\\=\\\\>|#\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.modifier\" : modifiers,\n        \"keyword.control\" :  keywordControls,\n        \"keyword.type\" :     types,\n        \"keyword\":           keywords,\n        \"keyword.storage\":   storages,\n        \"punctation\": \"\\\\.|\\\\,|;|\\\\.\\\\.|\\\\.\\\\.\\\\.\",\n        \"keyword.operator\" : operators,\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    \n    var identifierRe = \"[a-zA-Z_\\u00a1-\\uffff][a-zA-Z\\\\d_\\u00a1-\\uffff]*\\\\b\";\n\n    this.$rules = {\n        \"start\" : [\n            {     //-------------------------------------------------------- COMMENTS\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"star-comment\"\n            }, {\n                token: \"comment.shebang\",\n                regex: \"^\\\\s*#!.*\"\n            }, {\n                token : \"comment\",\n                regex : \"\\\\/\\\\+\",\n                next: \"plus-comment\"\n            }, {  //-------------------------------------------------------- STRINGS\n                onMatch: function(value, currentState, state) {\n                    state.unshift(this.next, value.substr(2));\n                    return \"string\";\n                },\n                regex: 'q\"(?:[\\\\[\\\\(\\\\{\\\\<]+)',\n                next: 'operator-heredoc-string'\n            }, {\n                onMatch: function(value, currentState, state) {\n                    state.unshift(this.next, value.substr(2));\n                    return \"string\";\n                },\n                regex: 'q\"(?:[a-zA-Z_]+)$',\n                next: 'identifier-heredoc-string'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[xr]?\"',\n                next : \"quote-string\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[xr]?`',\n                next : \"backtick-string\"\n            }, {\n                token : \"string\", // single line\n                regex : \"[xr]?['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?['][cdw]?\"\n            }, {  //-------------------------------------------------------- RULES\n                token: [\"keyword\", \"text\", \"paren.lparen\"],\n                regex: /(asm)(\\s*)({)/,\n                next: \"d-asm\"\n            }, {\n                token: [\"keyword\", \"text\", \"paren.lparen\", \"constant.language\"],\n                regex: \"(__traits)(\\\\s*)(\\\\()(\"+identifierRe+\")\"\n            }, { // import|module abc\n                token: [\"keyword\", \"text\", \"variable.module\"],\n                regex: \"(import|module)(\\\\s+)((?:\"+identifierRe+\"\\\\.?)*)\"\n            }, { // storage Name\n                token: [\"keyword.storage\", \"text\", \"entity.name.type\"],\n                regex: \"(\"+storages+\")(\\\\s*)(\"+identifierRe+\")\"\n            }, { // alias|typedef foo bar;\n                token: [\"keyword\", \"text\", \"variable.storage\", \"text\"],\n                regex: \"(alias|typedef)(\\\\s*)(\"+identifierRe+\")(\\\\s*)\"\n            }, {  //-------------------------------------------------------- OTHERS\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F_]+(l|ul|u|f|F|L|U|UL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d[\\\\d_]*(?:(?:\\\\.[\\\\d_]*)?(?:[eE][+-]?[\\\\d_]+)?)?(l|ul|u|f|F|L|U|UL)?\\\\b\"\n            }, {\n                token: \"entity.other.attribute-name\",\n                regex: \"@\"+identifierRe\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : operators\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.|\\\\:\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"star-comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken: 'comment'\n            }\n        ],\n        \"plus-comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\+\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken: 'comment'\n            }\n        ],\n        \n        \"quote-string\" : [\n           stringEscapesSeq,\n           {\n                token : \"string\",\n                regex : '\"[cdw]?',\n                next : \"start\"\n            }, {\n                defaultToken: 'string'\n            }\n        ],\n        \n        \"backtick-string\" : [\n           stringEscapesSeq,\n           {\n                token : \"string\",\n                regex : '`[cdw]?',\n                next : \"start\"\n            }, {\n                defaultToken: 'string'\n            }\n        ],\n        \n        \"operator-heredoc-string\": [\n            {\n                onMatch: function(value, currentState, state) {\n                    value = value.substring(value.length-2, value.length-1);\n                    var map = {'>':'<',']':'[',')':'(','}':'{'};\n                    if(Object.keys(map).indexOf(value) != -1)\n                        value = map[value];\n                    if(value != state[1]) return \"string\";\n                    state.shift();\n                    state.shift();\n                    \n                    return \"string\";\n                },\n                regex: '(?:[\\\\]\\\\)}>]+)\"',\n                next: 'start'\n            }, {\n                token: 'string',\n                regex: '[^\\\\]\\\\)}>]+'\n            }\n        ],\n        \n        \"identifier-heredoc-string\": [\n            {\n                onMatch: function(value, currentState, state) {\n                    value = value.substring(0, value.length-1);\n                    if(value != state[1]) return \"string\";\n                    state.shift();\n                    state.shift();\n                    \n                    return \"string\";\n                },\n                regex: '^(?:[A-Za-z_][a-zA-Z0-9]+)\"',\n                next: 'start'\n            }, {\n                token: 'string',\n                regex: '[^\\\\]\\\\)}>]+'\n            }\n        ],\n        \n        \"d-asm\": [\n            {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: 'keyword.instruction',\n                regex: '[a-zA-Z]+',\n                next: 'd-asm-instruction' \n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        'd-asm-instruction': [\n            {\n                token: 'constant.language',\n                regex: /AL|AH|AX|EAX|BL|BH|BX|EBX|CL|CH|CX|ECX|DL|DH|DX|EDX|BP|EBP|SP|ESP|DI|EDI|SI|ESI/i\n            }, {\n                token: 'identifier',\n                regex: '[a-zA-Z]+'\n            }, {\n                token: 'string',\n                regex: '\".*\"'\n            }, {\n                token: 'comment',\n                regex: '//.*$'\n            }, {\n                token: 'constant.numeric',\n                regex: '[0-9.xA-F]+'\n            }, {\n                token: 'punctuation.operator',\n                regex: '\\\\,'\n            }, {\n                token: 'punctuation.operator',\n                regex: ';',\n                next: 'd-asm'\n            }, {\n                token: 'text',\n                regex: '\\\\s+'\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\nDHighlightRules.metaData = {\n      comment: 'D language',\n      fileTypes: [ 'd', 'di' ],\n      firstLineMatch: '^#!.*\\\\b[glr]?dmd\\\\b.',\n      foldingStartMarker: '(?x)/\\\\*\\\\*(?!\\\\*)|^(?![^{]*?//|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|//|/\\\\*(?!.*?\\\\*/.*\\\\S))',\n      foldingStopMarker: '(?<!\\\\*)\\\\*\\\\*/|^\\\\s*\\\\}',\n      keyEquivalent: '^~D',\n      name: 'D',\n      scopeName: 'source.d'\n};\noop.inherits(DHighlightRules, TextHighlightRules);\n\nexports.DHighlightRules = DHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/d\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/d_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar DHighlightRules = require(\"./d_highlight_rules\").DHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = DHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/d\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-dart.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/dart_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DartHighlightRules = function() {\n\n    var constantLanguage = \"true|false|null\";\n    var variableLanguage = \"this|super\";\n    var keywordControl = \"try|catch|finally|throw|rethrow|assert|break|case|continue|default|do|else|for|if|in|return|switch|while|new|deferred|async|await\";\n    var keywordDeclaration = \"abstract|class|extends|external|factory|implements|get|native|operator|set|typedef|with|enum\";\n    var storageModifier = \"static|final|const\";\n    var storageType = \"void|bool|num|int|double|dynamic|var|String\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.dart\": constantLanguage,\n        \"variable.language.dart\": variableLanguage,\n        \"keyword.control.dart\": keywordControl,\n        \"keyword.declaration.dart\": keywordDeclaration,\n        \"storage.modifier.dart\": storageModifier,\n        \"storage.type.primitive.dart\": storageType\n    }, \"identifier\");\n\n    var stringfill = [{\n        token : \"constant.language.escape\",\n        regex : /\\\\./\n    }, {\n        token : \"text\",\n        regex : /\\$(?:\\w+|{[^\"'}]+})?/\n    }, {\n        defaultToken : \"string\"\n    }];\n\n    this.$rules = {\n    \"start\": [\n        {\n            token : \"comment\",\n            regex : /\\/\\/.*$/\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next : \"comment\"\n        },\n        {\n            token: [\"meta.preprocessor.script.dart\"],\n            regex: \"^(#!.*)$\"\n        },\n        {\n            token: \"keyword.other.import.dart\",\n            regex: \"(?:\\\\b)(?:library|import|export|part|of|show|hide)(?:\\\\b)\"\n        },\n        {\n            token : [\"keyword.other.import.dart\", \"text\"],\n            regex : \"(?:\\\\b)(prefix)(\\\\s*:)\"\n        },\n        {\n            regex: \"\\\\bas\\\\b\",\n            token: \"keyword.cast.dart\"\n        },\n        {\n            regex: \"\\\\?|:\",\n            token: \"keyword.control.ternary.dart\"\n        },\n        {\n            regex: \"(?:\\\\b)(is\\\\!?)(?:\\\\b)\",\n            token: [\"keyword.operator.dart\"]\n        },\n        {\n            regex: \"(<<|>>>?|~|\\\\^|\\\\||&)\",\n            token: [\"keyword.operator.bitwise.dart\"]\n        },\n        {\n            regex: \"((?:&|\\\\^|\\\\||<<|>>>?)=)\",\n            token: [\"keyword.operator.assignment.bitwise.dart\"]\n        },\n        {\n            regex: \"(===?|!==?|<=?|>=?)\",\n            token: [\"keyword.operator.comparison.dart\"]\n        },\n        {\n            regex: \"((?:[+*/%-]|\\\\~)=)\",\n            token: [\"keyword.operator.assignment.arithmetic.dart\"]\n        },\n        {\n            regex: \"=\",\n            token: \"keyword.operator.assignment.dart\"\n        },\n        {\n            token : \"string\",\n            regex : \"'''\",\n            next : \"qdoc\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"\"\"',\n            next : \"qqdoc\"\n        }, \n        {\n            token : \"string\",\n            regex : \"'\",\n            next : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"',\n            next : \"qqstring\"\n        }, \n        {\n            regex: \"(\\\\-\\\\-|\\\\+\\\\+)\",\n            token: [\"keyword.operator.increment-decrement.dart\"]\n        },\n        {\n            regex: \"(\\\\-|\\\\+|\\\\*|\\\\/|\\\\~\\\\/|%)\",\n            token: [\"keyword.operator.arithmetic.dart\"]\n        },\n        {\n            regex: \"(!|&&|\\\\|\\\\|)\",\n            token: [\"keyword.operator.logical.dart\"]\n        },\n        {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, \n        {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, \n        {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }\n    ],\n    \"comment\" : [\n        {\n            token : \"comment\", // closing comment\n            regex : \"\\\\*\\\\/\",\n            next : \"start\"\n        }, {\n            defaultToken : \"comment\"\n        }\n    ],\n    \"qdoc\" : [\n        {\n            token : \"string\",\n            regex : \"'''\",\n            next : \"start\"\n        }\n    ].concat(stringfill),\n\n    \"qqdoc\" : [\n        {\n            token : \"string\",\n            regex : '\"\"\"',\n            next : \"start\"\n        }\n    ].concat(stringfill),\n\n    \"qstring\" : [\n        {\n            token : \"string\",\n            regex : \"'|$\",\n            next : \"start\"\n        }\n    ].concat(stringfill),\n\n    \"qqstring\" : [\n        {\n            token : \"string\",\n            regex : '\"|$',\n            next : \"start\"\n        }\n    ].concat(stringfill)\n};\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(DartHighlightRules, TextHighlightRules);\n\nexports.DartHighlightRules = DartHighlightRules;\n});\n\ndefine(\"ace/mode/dart\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/dart_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar DartHighlightRules = require(\"./dart_highlight_rules\").DartHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    CMode.call(this);\n    this.HighlightRules = DartHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, CMode);\n\n(function() { \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/dart\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-diff.js",
    "content": "define(\"ace/mode/diff_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DiffHighlightRules = function() {\n\n    this.$rules = {\n        \"start\" : [{\n                regex: \"^(?:\\\\*{15}|={67}|-{3}|\\\\+{3})$\",\n                token: \"punctuation.definition.separator.diff\",\n                \"name\": \"keyword\"\n            }, { //diff.range.unified\n                regex: \"^(@@)(\\\\s*.+?\\\\s*)(@@)(.*)$\",\n                token: [\n                    \"constant\",\n                    \"constant.numeric\",\n                    \"constant\",\n                    \"comment.doc.tag\"\n                ]\n            }, { //diff.range.normal\n                regex: \"^(\\\\d+)([,\\\\d]+)(a|d|c)(\\\\d+)([,\\\\d]+)(.*)$\",\n                token: [\n                    \"constant.numeric\",\n                    \"punctuation.definition.range.diff\",\n                    \"constant.function\",\n                    \"constant.numeric\",\n                    \"punctuation.definition.range.diff\",\n                    \"invalid\"\n                ],\n                \"name\": \"meta.\"\n            }, {\n                regex: \"^(\\\\-{3}|\\\\+{3}|\\\\*{3})( .+)$\",\n                token: [\n                    \"constant.numeric\",\n                    \"meta.tag\"\n                ]\n            }, { // added\n                regex: \"^([!+>])(.*?)(\\\\s*)$\",\n                token: [\n                    \"support.constant\",\n                    \"text\",\n                    \"invalid\"\n                ]\n            }, { // removed\n                regex: \"^([<\\\\-])(.*?)(\\\\s*)$\",\n                token: [\n                    \"support.function\",\n                    \"string\",\n                    \"invalid\"\n                ]\n            }, {\n                regex: \"^(diff)(\\\\s+--\\\\w+)?(.+?)( .+)?$\",\n                token: [\"variable\", \"variable\", \"keyword\", \"variable\"]\n            }, {\n                regex: \"^Index.+$\",\n                token: \"variable\"\n            }, {\n                regex: \"^\\\\s+$\",\n                token: \"text\"\n            }, {\n                regex: \"\\\\s*$\",\n                token: \"invalid\"\n            }, {\n                defaultToken: \"invisible\",\n                caseInsensitive: true\n            }\n        ]\n    };\n};\n\noop.inherits(DiffHighlightRules, TextHighlightRules);\n\nexports.DiffHighlightRules = DiffHighlightRules;\n});\n\ndefine(\"ace/mode/folding/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function(levels, flag) {\n\tthis.regExpList = levels;\n\tthis.flag = flag;\n\tthis.foldingStartMarker = RegExp(\"^(\" + levels.join(\"|\") + \")\", this.flag);\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var start = {row: row, column: line.length};\n\n        var regList = this.regExpList;\n        for (var i = 1; i <= regList.length; i++) {\n            var re = RegExp(\"^(\" + regList.slice(0, i).join(\"|\") + \")\", this.flag);\n            if (re.test(line))\n                break;\n        }\n\n        for (var l = session.getLength(); ++row < l; ) {\n            line = session.getLine(row);\n            if (re.test(line))\n                break;\n        }\n        if (row == start.row + 1)\n            return;\n        return new Range(start.row, start.column, row - 1, line.length);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/diff_highlight_rules\",\"ace/mode/folding/diff\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./diff_highlight_rules\").DiffHighlightRules;\nvar FoldMode = require(\"./folding/diff\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode([\"diff\", \"@@|\\\\*{5}\"], \"i\");\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/diff\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-django.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/django\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DjangoHighlightRules = function(){\n    this.$rules = {\n        'start': [{\n            token: \"string\",\n            regex: '\".*?\"'\n        }, {\n            token: \"string\",\n            regex: \"'.*?'\"\n        }, {\n            token: \"constant\",\n            regex: '[0-9]+'\n        }, {\n            token: \"variable\",\n            regex: \"[-_a-zA-Z0-9:]+\"\n        }],\n        'tag': [{\n            token: \"entity.name.function\",\n            regex: \"[a-zA-Z][_a-zA-Z0-9]*\",\n            next: \"start\"\n        }]\n    };\n};\n\noop.inherits(DjangoHighlightRules, TextHighlightRules);\n\nvar DjangoHtmlHighlightRules = function() {\n    this.$rules = new HtmlHighlightRules().getRules();\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"comment.line\",\n            regex: \"\\\\{#.*?#\\\\}\"\n        }, {\n            token: \"comment.block\",\n            regex: \"\\\\{\\\\%\\\\s*comment\\\\s*\\\\%\\\\}\",\n            merge: true,\n            next: \"django-comment\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\{\\\\{\",\n            next: \"django-start\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\{\\\\%\",\n            next: \"django-tag\"\n        });\n        this.embedRules(DjangoHighlightRules, \"django-\", [{\n                token: \"comment.block\",\n                regex: \"\\\\{\\\\%\\\\s*endcomment\\\\s*\\\\%\\\\}\",\n                merge: true,\n                next: \"start\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\%\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\}\\\\}\",\n                next: \"start\"\n        }]);\n    }\n};\n\noop.inherits(DjangoHtmlHighlightRules, HtmlHighlightRules);\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = DjangoHtmlHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.$id = \"ace/mode/django\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-dockerfile.js",
    "content": "define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\nvar Mode = function() {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n   \n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/sh\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/dockerfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\n\nvar DockerfileHighlightRules = function() {\n    ShHighlightRules.call(this);\n\n    var startRules = this.$rules.start;\n    for (var i = 0; i < startRules.length; i++) {\n        if (startRules[i].token == \"variable.language\") {\n            startRules.splice(i, 0, {\n                token: \"constant.language\",\n                regex: \"(?:^(?:FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|COPY|LABEL)\\\\b)\",\n                caseInsensitive: true\n            });\n            break;\n        }\n    }\n    \n};\n\noop.inherits(DockerfileHighlightRules, ShHighlightRules);\n\nexports.DockerfileHighlightRules = DockerfileHighlightRules;\n});\n\ndefine(\"ace/mode/dockerfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh\",\"ace/mode/dockerfile_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar ShMode = require(\"./sh\").Mode;\nvar DockerfileHighlightRules = require(\"./dockerfile_highlight_rules\").DockerfileHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    ShMode.call(this);\n    \n    this.HighlightRules = DockerfileHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, ShMode);\n\n(function() {\n    this.$id = \"ace/mode/dockerfile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-dot.js",
    "content": "define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/dot_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n\nvar DotHighlightRules = function() {\n\n   var keywords = lang.arrayToMap(\n        (\"strict|node|edge|graph|digraph|subgraph\").split(\"|\")\n   );\n\n   var attributes = lang.arrayToMap(\n        (\"damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z\").split(\"|\")\n   );\n\n   this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /\\/\\/.*$/\n            }, {\n                token : \"comment\",\n                regex : /#.*$/\n            }, {\n                token : \"comment\", // multi line comment\n                merge : true,\n                regex : /\\/\\*/,\n                next : \"comment\"\n            }, {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : /[+\\-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?\\b/\n            }, {\n                token : \"keyword.operator\",\n                regex : /\\+|=|\\->/\n            }, {\n                token : \"punctuation.operator\",\n                regex : /,|;/\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[{]/\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\]}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }, {\n                token: function(value) {\n                    if (keywords.hasOwnProperty(value.toLowerCase())) {\n                        return \"keyword\";\n                    }\n                    else if (attributes.hasOwnProperty(value.toLowerCase())) {\n                        return \"variable\";\n                    }\n                    else {\n                        return \"text\";\n                    }\n                },\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n           }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+',\n                merge : true\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\",\n                merge : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\",\n                merge : true\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"[^'\\\\\\\\]+\",\n                merge : true\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qstring\",\n                merge : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"start\",\n                merge : true\n            }\n        ]\n   };\n};\n\noop.inherits(DotHighlightRules, TextHighlightRules);\n\nexports.DotHighlightRules = DotHighlightRules;\n\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/dot\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matching_brace_outdent\",\"ace/mode/dot_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar DotHighlightRules = require(\"./dot_highlight_rules\").DotHighlightRules;\nvar DotFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = DotHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new DotFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/dot\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-drools.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JavaHighlightRules = function() {\n    var keywords = (\n    \"abstract|continue|for|new|switch|\" +\n    \"assert|default|goto|package|synchronized|\" +\n    \"boolean|do|if|private|this|\" +\n    \"break|double|implements|protected|throw|\" +\n    \"byte|else|import|public|throws|\" +\n    \"case|enum|instanceof|return|transient|\" +\n    \"catch|extends|int|short|try|\" +\n    \"char|final|interface|static|void|\" +\n    \"class|finally|long|strictfp|volatile|\" +\n    \"const|float|native|super|while|\" +\n    \"var\"\n    );\n\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                regex: \"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",\n                token: \"keyword\",\n                next: [{\n                    regex: \"{\",\n                    token: \"paren.lparen\",\n                    next: [{\n                        regex: \"}\",\n                        token: \"paren.rparen\",\n                        next: \"start\"\n                    }, {\n                        regex: \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n                        token: \"keyword\" \n                    }]\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    token : \"identifier\",\n                    regex : \"\\\\w+\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \".\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    regex: \"\", // exit if there is anything else\n                    next: \"start\"\n                }]\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(JavaHighlightRules, TextHighlightRules);\n\nexports.JavaHighlightRules = JavaHighlightRules;\n});\n\ndefine(\"ace/mode/drools_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/java_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar packageIdentifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][\\\\.a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar DroolsHighlightRules = function() {\n\n    var keywords = (\"date|effective|expires|lock|on|active|no|loop|auto|focus\" +\n        \"|activation|group|agenda|ruleflow|duration|timer|calendars|refract|direct\" +\n        \"|dialect|salience|enabled|attributes|extends|template\" +\n        \"|function|contains|matches|eval|excludes|soundslike\" +\n        \"|memberof|not|in|or|and|exists|forall|over|from|entry|point|accumulate|acc|collect\" +\n        \"|action|reverse|result|end|init|instanceof|extends|super|boolean|char|byte|short\" +\n        \"|int|long|float|double|this|void|class|new|case|final|if|else|for|while|do\" +\n        \"|default|try|catch|finally|switch|synchronized|return|throw|break|continue|assert\" +\n        \"|modify|static|public|protected|private|abstract|native|transient|volatile\" +\n        \"|strictfp|throws|interface|enum|implements|type|window|trait|no-loop|str\"\n      );\n\n      var langClasses = (\n          \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n          \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n          \"ExceptionInInitializerError|IllegalAccessError|\"+\n          \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n          \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n          \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n          \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n          \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n          \"InstantiationException|IndexOutOfBoundsException|\"+\n          \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n          \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n          \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n          \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n          \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n          \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n          \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n          \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n          \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n          \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n          \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n          \"ArrayStoreException|ClassCastException|LinkageError|\"+\n          \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n          \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n          \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n      );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": \"null\",\n        \"support.class\" : langClasses,\n        \"support.function\" : \"retract|update|modify|insert\"\n    }, \"identifier\");\n\n    var stringRules = function() {\n      return [{\n        token : \"string\", // single line\n        regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n      }, {\n        token : \"string\", // single line\n        regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n      }];\n    };\n\n\n      var basicPreRules = function(blockCommentRules) {\n        return [{\n            token : \"comment\",\n            regex : \"\\\\/\\\\/.*$\"\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            next : blockCommentRules\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n          }];\n      };\n\n      var blockCommentRules = function(returnRule) {\n        return [\n            {\n                token : \"comment.block\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : returnRule\n            }, {\n                defaultToken : \"comment.block\"\n            }\n        ];\n      };\n\n      var basicPostRules = function() {\n        return [{\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }];\n      };\n\n\n    this.$rules = {\n        \"start\" : [].concat(basicPreRules(\"block.comment\"), [\n              {\n                token : \"entity.name.type\",\n                regex : \"@[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(package)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(import)(\\\\s+)(function)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(import)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\",\"text\",\"variable\"],\n                regex : \"(global)(\\\\s+)(\" + packageIdentifierRe +\")(\\\\s+)(\" + identifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(declare)(\\\\s+)(trait)(\\\\s+)(\" + identifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(declare)(\\\\s+)(\" + identifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(extends)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\"],\n                regex : \"(rule)(\\\\s+)\",\n                next :  \"asset.name\"\n              }],\n              stringRules(),\n              [{\n                token : [\"variable.other\",\"text\",\"text\"],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)\"\n              }, {\n                token : [\"keyword\",\"text\"],\n                regex : \"(query)(\\\\s+)\",\n                next :  \"asset.name\"\n              }, {\n                token : [\"keyword\",\"text\"],\n                regex : \"(when)(\\\\s*)\"\n              }, {\n                token : [\"keyword\",\"text\"],\n                regex : \"(then)(\\\\s*)\",\n                next :  \"java-start\"\n              }, {\n                  token : \"paren.lparen\",\n                  regex : /[\\[({]/\n              }, {\n                  token : \"paren.rparen\",\n                  regex : /[\\])}]/\n              }], basicPostRules()),\n        \"block.comment\" : blockCommentRules(\"start\"),\n        \"asset.name\" : [\n            {\n                token : \"entity.name\",\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"entity.name\",\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"entity.name\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"start\"\n            }]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n\n    this.embedRules(JavaHighlightRules, \"java-\", [\n      {\n       token : \"support.function\",\n       regex: \"\\\\b(insert|modify|retract|update)\\\\b\"\n     }, {\n       token : \"keyword\",\n       regex: \"\\\\bend\\\\b\",\n       next  : \"start\"\n    }]);\n\n};\n\noop.inherits(DroolsHighlightRules, TextHighlightRules);\n\nexports.DroolsHighlightRules = DroolsHighlightRules;\n});\n\ndefine(\"ace/mode/folding/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /\\b(rule|declare|query|when|then)\\b/; \n    this.foldingStopMarker = /\\bend\\b/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1]) {\n                var position = {row: row, column: line.length};\n                var iterator = new TokenIterator(session, position.row, position.column);\n                var seek = \"end\";\n                var token = iterator.getCurrentToken();\n                if (token.value == \"when\") {\n                    seek = \"then\";\n                }\n                while (token) {\n                    if (token.value == seek) { \n                        return Range.fromPoints(position ,{\n                            row: iterator.getCurrentTokenRow(),\n                            column: iterator.getCurrentTokenColumn()\n                        });\n                    }\n                    token = iterator.stepForward();\n                }\n            }\n\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/drools_highlight_rules\",\"ace/mode/folding/drools\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar DroolsHighlightRules = require(\"./drools_highlight_rules\").DroolsHighlightRules;\nvar DroolsFoldMode = require(\"./folding/drools\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = DroolsHighlightRules;\n    this.foldingRules = new DroolsFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/drools\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-edifact.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/edifact_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n    \n    var oop = require(\"../lib/oop\");\n    var DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n    \n    var EdifactHighlightRules = function() {\n    \n        var header = (\n            \"UNH\"\n        );\n        var segment = (\n            \"ADR|AGR|AJT|ALC|ALI|APP|APR|ARD|ARR|ASI|ATT|AUT|\"+\n            \"BAS|BGM|BII|BUS|\"+\n            \"CAV|CCD|CCI|CDI|CDS|CDV|CED|CIN|CLA|CLI|CMP|CNI|CNT|COD|COM|COT|CPI|CPS|CPT|CST|CTA|CUX|\"+\n            \"DAM|DFN|DGS|DII|DIM|DLI|DLM|DMS|DOC|DRD|DSG|DSI|DTM|\"+\n            \"EDT|EFI|ELM|ELU|ELV|EMP|EQA|EQD|EQN|ERC|ERP|EVE|FCA|FII|FNS|FNT|FOR|FSQ|FTX|\"+\n            \"GDS|GEI|GID|GIN|GIR|GOR|GPO|GRU|HAN|HYN|ICD|IDE|IFD|IHC|IMD|IND|INP|INV|IRQ|\"+\n            \"LAN|LIN|LOC|MEA|MEM|MKS|MOA|MSG|MTD|NAD|NAT|\"+\n            \"PAC|PAI|PAS|PCC|PCD|PCI|PDI|PER|PGI|PIA|PNA|POC|PRC|PRI|PRV|PSD|PTY|PYT|\"+\n            \"QRS|QTY|QUA|QVR|\"+\n            \"RCS|REL|RFF|RJL|RNG|ROD|RSL|RTE|\"+\n            \"SAL|SCC|SCD|SEG|SEL|SEQ|SFI|SGP|SGU|SPR|SPS|STA|STC|STG|STS|\"+\n            \"TAX|TCC|TDT|TEM|TMD|TMP|TOD|TPL|TRU|TSR|\"+\n            \"UNB|UNZ|UNT|UGH|UGT|UNS|\"+\n            \"VLI\"\n        );\n    \n        var header = (\n            \"UNH\"\n        );\n    \n        var buildinConstants = (\"null|Infinity|NaN|undefined\");\n        var langClasses = (\n            \"\"\n        );\n    \n        var keywords = (\n            \"BY|SE|ON|INV|JP|UNOA\"\n        );\n    \n        var keywordMapper = this.createKeywordMapper({\n            \"variable.language\": \"this\",\n            \"keyword\": keywords,\n            \"entity.name.segment\":segment,\n            \"entity.name.header\":header,\n            \"constant.language\": buildinConstants,\n            \"support.function\": langClasses\n        }, \"identifier\");\n    \n        this.$rules = {\n            \"start\" : [\n                {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\+.\\\\+\"\n                }, {\n                    token : \"constant.language.boolean\",\n                    regex : \"(?:true|false)\\\\b\"\n                }, {\n                    token : keywordMapper,\n                    regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"\\\\+\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\:|'\"\n                },{\n                    token : \"identifier\",\n                    regex : \"\\\\:D\\\\:\"\n                }\n            ]\n        };\n    \n        this.embedRules(DocCommentHighlightRules, \"doc-\",\n            [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    };\n    \n    EdifactHighlightRules.metaData = { fileTypes: [ 'edi' ],\n          keyEquivalent: '^~E',\n          name: 'Edifact',\n          scopeName: 'source.edifact' };\n    \n    oop.inherits(EdifactHighlightRules, TextHighlightRules);\n    \n    exports.EdifactHighlightRules = EdifactHighlightRules;\n    });\n\ndefine(\"ace/mode/edifact\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/edifact_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar EdifactHighlightRules = require(\"./edifact_highlight_rules\").EdifactHighlightRules;\n\nvar Mode = function() {\n   \n    this.HighlightRules = EdifactHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/edifact\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-eiffel.js",
    "content": "define(\"ace/mode/eiffel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar EiffelHighlightRules = function() {\n    var keywords = \"across|agent|alias|all|attached|as|assign|attribute|check|\" +\n        \"class|convert|create|debug|deferred|detachable|do|else|elseif|end|\" +\n        \"ensure|expanded|export|external|feature|from|frozen|if|inherit|\" +\n        \"inspect|invariant|like|local|loop|not|note|obsolete|old|once|\" +\n        \"Precursor|redefine|rename|require|rescue|retry|select|separate|\" +\n        \"some|then|undefine|until|variant|when\";\n\n    var operatorKeywords = \"and|implies|or|xor\";\n\n    var languageConstants = \"Void\";\n\n    var booleanConstants = \"True|False\";\n\n    var languageVariables = \"Current|Result\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language\": languageConstants,\n        \"constant.language.boolean\": booleanConstants,\n        \"variable.language\": languageVariables,\n        \"keyword.operator\": operatorKeywords,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n\n    var simpleString = /(?:[^\"%\\b\\f\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)+?/;\n\n    this.$rules = {\n        \"start\": [{\n                token : \"string.quoted.other\", // Aligned-verbatim-strings (verbatim option not supported)\n                regex : /\"\\[/,\n                next: \"aligned_verbatim_string\"\n            }, {\n                token : \"string.quoted.other\", // Non-aligned-verbatim-strings (verbatim option not supported)\n                regex : /\"\\{/,\n                next: \"non-aligned_verbatim_string\"\n            }, {\n                token : \"string.quoted.double\",\n                regex : /\"(?:[^%\\b\\f\\n\\r\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)*?\"/\n            }, {\n                token : \"comment.line.double-dash\",\n                regex : /--.*/\n            }, {\n                token : \"constant.character\",\n                regex : /'(?:[^%\\b\\f\\n\\r\\t\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)'/\n            }, {\n                token : \"constant.numeric\", // hexa | octal | bin\n                regex : /\\b0(?:[xX][\\da-fA-F](?:_*[\\da-fA-F])*|[cC][0-7](?:_*[0-7])*|[bB][01](?:_*[01])*)\\b/\n            }, {\n                token : \"constant.numeric\",\n                regex : /(?:\\d(?:_*\\d)*)?\\.(?:(?:\\d(?:_*\\d)*)?[eE][+-]?)?\\d(?:_*\\d)*|\\d(?:_*\\d)*\\.?/\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]|<<|\\|\\(/\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]|>>|\\|\\)/\n            }, {\n                token : \"keyword.operator\", // punctuation\n                regex : /:=|->|\\.(?=\\w)|[;,:?]/\n            }, {\n                token : \"keyword.operator\",\n                regex : /\\\\\\\\|\\|\\.\\.\\||\\.\\.|\\/[~\\/]?|[><\\/]=?|[-+*^=~]/\n            }, {\n                token : function (v) {\n                    var result = keywordMapper(v);\n                    if (result === \"identifier\" && v === v.toUpperCase()) {\n                        result =  \"entity.name.type\";\n                    }\n                    return result;\n                },\n                regex : /[a-zA-Z][a-zA-Z\\d_]*\\b/\n            }, {\n                token : \"text\",\n                regex : /\\s+/\n            }\n        ],\n        \"aligned_verbatim_string\" : [{\n                token : \"string\",\n                regex : /]\"/,\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : simpleString\n            }\n        ],\n        \"non-aligned_verbatim_string\" : [{\n                token : \"string.quoted.other\",\n                regex : /}\"/,\n                next : \"start\"\n            }, {\n                token : \"string.quoted.other\",\n                regex : simpleString\n            }\n        ]};\n};\n\noop.inherits(EiffelHighlightRules, TextHighlightRules);\n\nexports.EiffelHighlightRules = EiffelHighlightRules;\n});\n\ndefine(\"ace/mode/eiffel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/eiffel_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar EiffelHighlightRules = require(\"./eiffel_highlight_rules\").EiffelHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = EiffelHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.$id = \"ace/mode/eiffel\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-ejs.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length-tab.length, row, indent.length));\n        }\n    };\n\n    this.$id = \"ace/mode/ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/ejs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar EjsHighlightRules = function(start, end) {\n    HtmlHighlightRules.call(this);\n    \n    if (!start)\n        start = \"(?:<%|<\\\\?|{{)\";\n    if (!end)\n        end = \"(?:%>|\\\\?>|}})\";\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token : \"markup.list.meta.tag\",\n            regex : start + \"(?![>}])[-=]?\",\n            push  : \"ejs-start\"\n        });\n    }\n    \n    this.embedRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"ejs-\", [{\n        token : \"markup.list.meta.tag\",\n        regex : \"-?\" + end,\n        next  : \"pop\"\n    }, {\n        token: \"comment\",\n        regex: \"//.*?\" + end,\n        next: \"pop\"\n    }]);\n    \n    this.normalizeRules();\n};\n\n\noop.inherits(EjsHighlightRules, HtmlHighlightRules);\n\nexports.EjsHighlightRules = EjsHighlightRules;\n\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar RubyMode = require(\"./ruby\").Mode;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = EjsHighlightRules;    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"ejs-\": JavaScriptMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.$id = \"ace/mode/ejs\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-elixir.js",
    "content": "define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ElixirHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: \n            [ 'meta.module.elixir',\n              'keyword.control.module.elixir',\n              'meta.module.elixir',\n              'entity.name.type.module.elixir' ],\n           regex: '^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.false',\n           regex: '@(?:module|type)?doc false',\n           comment: '@doc false is treated as documentation' },\n         { token: 'comment.documentation.string',\n           regex: '@(?:module|type)?doc \"',\n           push: \n            [ { token: 'comment.documentation.string',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.string' } ],\n           comment: '@doc with string is treated as documentation' },\n         { token: 'keyword.control.elixir',\n           regex: '\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])' },\n         { token: 'keyword.operator.elixir',\n           regex: '\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           comment: ' as above, just doesn\\'t need a \\'end\\' and does a logic operation' },\n         { token: 'constant.language.elixir',\n           regex: '\\\\b(?:nil|true|false)\\\\b(?![?!])' },\n         { token: 'variable.language.elixir',\n           regex: '\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.readwrite.module.elixir' ],\n           regex: '(@)([a-zA-Z_]\\\\w*)' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.anonymous.elixir' ],\n           regex: '(&)(\\\\d*)' },\n         { token: 'variable.other.constant.elixir',\n           regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\\'',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.single-quoted.elixir' } ] },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\"',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.double-quoted.elixir' } ] },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\\'\\'\\')',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\\'\\'\\')',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' } ],\n           comment: 'Single-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.elixir' } ],\n           comment: 'single quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.elixir' } ],\n           comment: 'double quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[a-z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[A-Z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'],\n           regex: '(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)',\n           comment: 'symbols' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: '(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)',\n           comment: 'symbols' },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(#)(.*)' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           comment: '\\n\\t\\t\\tmatches questionmark-letters.\\n\\n\\t\\t\\texamples (1st alternation = hex):\\n\\t\\t\\t?\\\\x1     ?\\\\x61\\n\\n\\t\\t\\texamples (2rd alternation = escaped):\\n\\t\\t\\t?\\\\n      ?\\\\b\\n\\n\\t\\t\\texamples (3rd alternation = normal):\\n\\t\\t\\t?a       ?A       ?0 \\n\\t\\t\\t?*       ?\"       ?( \\n\\t\\t\\t?.       ?#\\n\\t\\t\\t\\n\\t\\t\\tthe negative lookbehind prevents against matching\\n\\t\\t\\tp(42.tainted?)\\n\\t\\t\\t' },\n         { token: 'keyword.operator.assignment.augmented.elixir',\n           regex: '\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=' },\n         { token: 'keyword.operator.comparison.elixir',\n           regex: '===?|!==?|<=?|>=?' },\n         { token: 'keyword.operator.bitwise.elixir',\n           regex: '\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}' },\n         { token: 'keyword.operator.logical.elixir',\n           regex: '!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b',\n           originalRegex: '(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b' },\n         { token: 'keyword.operator.arithmetic.elixir',\n           regex: '\\\\*|\\\\+|\\\\-|/' },\n         { token: 'keyword.operator.other.elixir',\n           regex: '\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>' },\n         { token: 'keyword.operator.assignment.elixir', regex: '=' },\n         { token: 'punctuation.separator.other.elixir', regex: ':' },\n         { token: 'punctuation.separator.statement.elixir',\n           regex: '\\\\;' },\n         { token: 'punctuation.separator.object.elixir', regex: ',' },\n         { token: 'punctuation.separator.method.elixir', regex: '\\\\.' },\n         { token: 'punctuation.section.scope.elixir', regex: '\\\\{|\\\\}' },\n         { token: 'punctuation.section.array.elixir', regex: '\\\\[|\\\\]' },\n         { token: 'punctuation.section.function.elixir',\n           regex: '\\\\(|\\\\)' } ],\n      '#escaped_char': \n       [ { token: 'constant.character.escape.elixir',\n           regex: '\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)' } ],\n      '#interpolated_elixir': \n       [ { token: \n            [ 'source.elixir.embedded.source',\n              'source.elixir.embedded.source.empty' ],\n           regex: '(#\\\\{)(\\\\})' },\n         { todo: \n            { token: 'punctuation.section.embedded.elixir',\n              regex: '#\\\\{',\n              push: \n               [ { token: 'punctuation.section.embedded.elixir',\n                   regex: '\\\\}',\n                   next: 'pop' },\n                 { include: '#nest_curly_and_self' },\n                 { include: '$self' },\n                 { defaultToken: 'source.elixir.embedded.source' } ] } } ],\n      '#nest_curly_and_self': \n       [ { token: 'punctuation.section.scope.elixir',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.section.scope.elixir',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#nest_curly_and_self' } ] },\n         { include: '$self' } ],\n      '#regex_sub': \n       [ { include: '#interpolated_elixir' },\n         { include: '#escaped_char' },\n         { token: \n            [ 'punctuation.definition.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'punctuation.definition.arbitrary-repitition.elixir' ],\n           regex: '(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})' },\n         { token: 'punctuation.definition.character-class.elixir',\n           regex: '\\\\[(?:\\\\^?\\\\])?',\n           push: \n            [ { token: 'punctuation.definition.character-class.elixir',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.regexp.character-class.elixir' } ] },\n         { token: 'punctuation.definition.group.elixir',\n           regex: '\\\\(',\n           push: \n            [ { token: 'punctuation.definition.group.elixir',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#regex_sub' },\n              { defaultToken: 'string.regexp.group.elixir' } ] },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)',\n           originalRegex: '(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$',\n           comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' } ] };\n    \n    this.normalizeRules();\n};\n\nElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.',\n      fileTypes: [ 'ex', 'exs' ],\n      firstLineMatch: '^#!/.*\\\\belixir',\n      foldingStartMarker: '(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$',\n      foldingStopMarker: '^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)',\n      keyEquivalent: '^~E',\n      name: 'Elixir',\n      scopeName: 'source.elixir' };\n\n\noop.inherits(ElixirHighlightRules, TextHighlightRules);\n\nexports.ElixirHighlightRules = ElixirHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ElixirHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/elixir\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-elm.js",
    "content": "define(\"ace/mode/elm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ElmHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n       \"keyword\": \"as|case|class|data|default|deriving|do|else|export|foreign|\" +\n            \"hiding|jsevent|if|import|in|infix|infixl|infixr|instance|let|\" +\n            \"module|newtype|of|open|then|type|where|_|port|\\u03BB\"\n    }, \"identifier\");\n    \n    var escapeRe = /\\\\(\\d+|['\"\\\\&trnbvf])/;\n    \n    var smallRe = /[a-z_]/.source;\n    var largeRe = /[A-Z]/.source;\n    var idRe = /[a-z_A-Z0-9']/.source;\n\n    this.$rules = {\n        start: [{\n            token: \"string.start\",\n            regex: '\"',\n            next: \"string\"\n        }, {\n            token: \"string.character\",\n            regex: \"'(?:\" + escapeRe.source + \"|.)'?\"\n        }, {\n            regex: /0(?:[xX][0-9A-Fa-f]+|[oO][0-7]+)|\\d+(\\.\\d+)?([eE][-+]?\\d*)?/,\n            token: \"constant.numeric\"\n        }, {\n            token: \"comment\",\n            regex: \"--.*\"\n        }, {\n            token : \"keyword\",\n            regex : /\\.\\.|\\||:|=|\\\\|\"|->|<-|\\u2192/\n        }, {\n            token : \"keyword.operator\",\n            regex : /[-!#$%&*+.\\/<=>?@\\\\^|~:\\u03BB\\u2192]+/\n        }, {\n            token : \"operator.punctuation\",\n            regex : /[,;`]/\n        }, {\n            regex : largeRe + idRe + \"+\\\\.?\",\n            token : function(value) {\n                if (value[value.length - 1] == \".\")\n                    return \"entity.name.function\"; \n                return \"constant.language\"; \n            }\n        }, {\n            regex : \"^\" + smallRe  + idRe + \"+\",\n            token : function(value) {\n                return \"constant.language\"; \n            }\n        }, {\n            token : keywordMapper,\n            regex : \"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"\n        }, {\n            regex: \"{-#?\",\n            token: \"comment.start\",\n            onMatch: function(value, currentState, stack) {\n                this.next = value.length == 2 ? \"blockComment\" : \"docComment\";\n                return this.token;\n            }\n        }, {\n            token: \"variable.language\",\n            regex: /\\[markdown\\|/,\n            next: \"markdown\"\n        }, {\n            token: \"paren.lparen\",\n            regex: /[\\[({]/ \n        }, {\n            token: \"paren.rparen\",\n            regex: /[\\])}]/\n        } ],\n        markdown: [{\n            regex: /\\|\\]/,\n            next: \"start\"\n        }, {\n            defaultToken : \"string\"\n        }],\n        blockComment: [{\n            regex: \"{-\",\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            regex: \"-}\",\n            token: \"comment.end\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }],\n        docComment: [{\n            regex: \"{-\",\n            token: \"comment.start\",\n            push: \"docComment\"\n        }, {\n            regex: \"-}\",\n            token: \"comment.end\",\n            next: \"pop\" \n        }, {\n            defaultToken: \"doc.comment\"\n        }],\n        string: [{\n            token: \"constant.language.escape\",\n            regex: escapeRe\n        }, {\n            token: \"text\",\n            regex: /\\\\(\\s|$)/,\n            next: \"stringGap\"\n        }, {\n            token: \"string.end\",\n            regex: '\"',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        stringGap: [{\n            token: \"text\",\n            regex: /\\\\/,\n            next: \"string\"\n        }, {\n            token: \"error\",\n            regex: \"\",\n            next: \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ElmHighlightRules, TextHighlightRules);\n\nexports.ElmHighlightRules = ElmHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/elm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elm_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./elm_highlight_rules\").ElmHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"{-\", end: \"-}\", nestable: true};\n    this.$id = \"ace/mode/elm\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-erlang.js",
    "content": "define(\"ace/mode/erlang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ErlangHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { include: '#module-directive' },\n         { include: '#import-export-directive' },\n         { include: '#behaviour-directive' },\n         { include: '#record-directive' },\n         { include: '#define-directive' },\n         { include: '#macro-directive' },\n         { include: '#directive' },\n         { include: '#function' },\n         { include: '#everything-else' } ],\n      '#atom': \n       [ { token: 'punctuation.definition.symbol.begin.erlang',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.symbol.end.erlang',\n                regex: '\\'',\n                next: 'pop' },\n              { token: \n                 [ 'punctuation.definition.escape.erlang',\n                   'constant.other.symbol.escape.erlang',\n                   'punctuation.definition.escape.erlang',\n                   'constant.other.symbol.escape.erlang',\n                   'constant.other.symbol.escape.erlang' ],\n                regex: '(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n              { token: 'invalid.illegal.atom.erlang', regex: '\\\\\\\\\\\\^?.?' },\n              { defaultToken: 'constant.other.symbol.quoted.single.erlang' } ] },\n         { token: 'constant.other.symbol.unquoted.erlang',\n           regex: '[a-z][a-zA-Z\\\\d@_]*' } ],\n      '#behaviour-directive': \n       [ { token: \n            [ 'meta.directive.behaviour.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.behaviour.erlang',\n              'keyword.control.directive.behaviour.erlang',\n              'meta.directive.behaviour.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.behaviour.erlang',\n              'entity.name.type.class.behaviour.definition.erlang',\n              'meta.directive.behaviour.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.behaviour.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(behaviour)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' } ],\n      '#binary': \n       [ { token: 'punctuation.definition.binary.begin.erlang',\n           regex: '<<',\n           push: \n            [ { token: 'punctuation.definition.binary.end.erlang',\n                regex: '>>',\n                next: 'pop' },\n              { token: \n                 [ 'punctuation.separator.binary.erlang',\n                   'punctuation.separator.value-size.erlang' ],\n                regex: '(,)|(:)' },\n              { include: '#internal-type-specifiers' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.binary.erlang' } ] } ],\n      '#character': \n       [ { token: \n            [ 'punctuation.definition.character.erlang',\n              'punctuation.definition.escape.erlang',\n              'constant.character.escape.erlang',\n              'punctuation.definition.escape.erlang',\n              'constant.character.escape.erlang',\n              'constant.character.escape.erlang' ],\n           regex: '(\\\\$)(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n         { token: 'invalid.illegal.character.erlang',\n           regex: '\\\\$\\\\\\\\\\\\^?.?' },\n         { token: \n            [ 'punctuation.definition.character.erlang',\n              'constant.character.erlang' ],\n           regex: '(\\\\$)(\\\\S)' },\n         { token: 'invalid.illegal.character.erlang', regex: '\\\\$.?' } ],\n      '#comment': \n       [ { token: 'punctuation.definition.comment.erlang',\n           regex: '%.*$',\n           push_: \n            [ { token: 'comment.line.percentage.erlang',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.percentage.erlang' } ] } ],\n      '#define-directive': \n       [ { token: \n            [ 'meta.directive.define.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.define.erlang',\n              'keyword.control.directive.define.erlang',\n              'meta.directive.define.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.define.erlang',\n              'entity.name.function.macro.definition.erlang',\n              'meta.directive.define.erlang',\n              'punctuation.separator.parameters.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(,)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.define.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.directive.define.erlang' } ] },\n         { token: 'meta.directive.define.erlang',\n           regex: '(?=^\\\\s*-\\\\s*define\\\\s*\\\\(\\\\s*[a-zA-Z\\\\d@_]+\\\\s*\\\\()',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.define.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { token: \n                 [ 'text',\n                   'punctuation.section.directive.begin.erlang',\n                   'text',\n                   'keyword.control.directive.define.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang',\n                   'text',\n                   'entity.name.function.macro.definition.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang' ],\n                regex: '^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\()',\n                push: \n                 [ { token: \n                      [ 'punctuation.definition.parameters.end.erlang',\n                        'text',\n                        'punctuation.separator.parameters.erlang' ],\n                     regex: '(\\\\))(\\\\s*)(,)',\n                     next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { token: 'punctuation.separator.define.erlang',\n                regex: '\\\\|\\\\||\\\\||:|;|,|\\\\.|->' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.directive.define.erlang' } ] } ],\n      '#directive': \n       [ { token: \n            [ 'meta.directive.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.erlang',\n              'keyword.control.directive.erlang',\n              'meta.directive.erlang',\n              'punctuation.definition.parameters.begin.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\(?)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\)?)(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.directive.erlang' } ] },\n         { token: \n            [ 'meta.directive.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.erlang',\n              'keyword.control.directive.erlang',\n              'meta.directive.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\.)' } ],\n      '#everything-else': \n       [ { include: '#comment' },\n         { include: '#record-usage' },\n         { include: '#macro-usage' },\n         { include: '#expression' },\n         { include: '#keyword' },\n         { include: '#textual-operator' },\n         { include: '#function-call' },\n         { include: '#tuple' },\n         { include: '#list' },\n         { include: '#binary' },\n         { include: '#parenthesized-expression' },\n         { include: '#character' },\n         { include: '#number' },\n         { include: '#atom' },\n         { include: '#string' },\n         { include: '#symbolic-operator' },\n         { include: '#variable' } ],\n      '#expression': \n       [ { token: 'keyword.control.if.erlang',\n           regex: '\\\\bif\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.if.erlang' } ] },\n         { token: 'keyword.control.case.erlang',\n           regex: '\\\\bcase\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.case.erlang' } ] },\n         { token: 'keyword.control.receive.erlang',\n           regex: '\\\\breceive\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.receive.erlang' } ] },\n         { token: \n            [ 'keyword.control.fun.erlang',\n              'text',\n              'entity.name.type.class.module.erlang',\n              'text',\n              'punctuation.separator.module-function.erlang',\n              'text',\n              'entity.name.function.erlang',\n              'text',\n              'punctuation.separator.function-arity.erlang' ],\n           regex: '\\\\b(fun)(\\\\s*)(?:([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(/)' },\n         { token: 'keyword.control.fun.erlang',\n           regex: '\\\\bfun\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { token: 'text',\n                regex: '(?=\\\\()',\n                push: \n                 [ { token: 'punctuation.separator.clauses.erlang',\n                     regex: ';|(?=\\\\bend\\\\b)',\n                     next: 'pop' },\n                   { include: '#internal-function-parts' } ] },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.fun.erlang' } ] },\n         { token: 'keyword.control.try.erlang',\n           regex: '\\\\btry\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.try.erlang' } ] },\n         { token: 'keyword.control.begin.erlang',\n           regex: '\\\\bbegin\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.begin.erlang' } ] },\n         { token: 'keyword.control.query.erlang',\n           regex: '\\\\bquery\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.query.erlang' } ] } ],\n      '#function': \n       [ { token: \n            [ 'meta.function.erlang',\n              'entity.name.function.definition.erlang',\n              'meta.function.erlang' ],\n           regex: '^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(?=\\\\()',\n           push: \n            [ { token: 'punctuation.terminator.function.erlang',\n                regex: '\\\\.',\n                next: 'pop' },\n              { token: [ 'text', 'entity.name.function.erlang', 'text' ],\n                regex: '^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(?=\\\\()' },\n              { token: 'text',\n                regex: '(?=\\\\()',\n                push: \n                 [ { token: 'punctuation.separator.clauses.erlang',\n                     regex: ';|(?=\\\\.)',\n                     next: 'pop' },\n                   { include: '#parenthesized-expression' },\n                   { include: '#internal-function-parts' } ] },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.function.erlang' } ] } ],\n      '#function-call': \n       [ { token: 'meta.function-call.erlang',\n           regex: '(?=(?:[a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')\\\\s*(?:\\\\(|:\\\\s*(?:[a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')\\\\s*\\\\())',\n           push: \n            [ { token: 'punctuation.definition.parameters.end.erlang',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: \n                 [ 'entity.name.type.class.module.erlang',\n                   'text',\n                   'punctuation.separator.module-function.erlang',\n                   'text',\n                   'entity.name.function.guard.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang' ],\n                regex: '(?:(erlang)(\\\\s*)(:)(\\\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\\\s*)(\\\\()',\n                push: \n                 [ { token: 'text', regex: '(?=\\\\))', next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { token: \n                 [ 'entity.name.type.class.module.erlang',\n                   'text',\n                   'punctuation.separator.module-function.erlang',\n                   'text',\n                   'entity.name.function.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang' ],\n                regex: '(?:([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(\\\\()',\n                push: \n                 [ { token: 'text', regex: '(?=\\\\))', next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { defaultToken: 'meta.function-call.erlang' } ] } ],\n      '#import-export-directive': \n       [ { token: \n            [ 'meta.directive.import.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.import.erlang',\n              'keyword.control.directive.import.erlang',\n              'meta.directive.import.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.import.erlang',\n              'entity.name.type.class.module.erlang',\n              'meta.directive.import.erlang',\n              'punctuation.separator.parameters.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(import)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(,)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.import.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#internal-function-list' },\n              { defaultToken: 'meta.directive.import.erlang' } ] },\n         { token: \n            [ 'meta.directive.export.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.export.erlang',\n              'keyword.control.directive.export.erlang',\n              'meta.directive.export.erlang',\n              'punctuation.definition.parameters.begin.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(export)(\\\\s*)(\\\\()',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.export.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#internal-function-list' },\n              { defaultToken: 'meta.directive.export.erlang' } ] } ],\n      '#internal-expression-punctuation': \n       [ { token: \n            [ 'punctuation.separator.clause-head-body.erlang',\n              'punctuation.separator.clauses.erlang',\n              'punctuation.separator.expressions.erlang' ],\n           regex: '(->)|(;)|(,)' } ],\n      '#internal-function-list': \n       [ { token: 'punctuation.definition.list.begin.erlang',\n           regex: '\\\\[',\n           push: \n            [ { token: 'punctuation.definition.list.end.erlang',\n                regex: '\\\\]',\n                next: 'pop' },\n              { token: \n                 [ 'entity.name.function.erlang',\n                   'text',\n                   'punctuation.separator.function-arity.erlang' ],\n                regex: '([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(/)',\n                push: \n                 [ { token: 'punctuation.separator.list.erlang',\n                     regex: ',|(?=\\\\])',\n                     next: 'pop' },\n                   { include: '#everything-else' } ] },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.list.function.erlang' } ] } ],\n      '#internal-function-parts': \n       [ { token: 'text',\n           regex: '(?=\\\\()',\n           push: \n            [ { token: 'punctuation.separator.clause-head-body.erlang',\n                regex: '->',\n                next: 'pop' },\n              { token: 'punctuation.definition.parameters.begin.erlang',\n                regex: '\\\\(',\n                push: \n                 [ { token: 'punctuation.definition.parameters.end.erlang',\n                     regex: '\\\\)',\n                     next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { token: 'punctuation.separator.guards.erlang', regex: ',|;' },\n              { include: '#everything-else' } ] },\n         { token: 'punctuation.separator.expressions.erlang',\n           regex: ',' },\n         { include: '#everything-else' } ],\n      '#internal-record-body': \n       [ { token: 'punctuation.definition.class.record.begin.erlang',\n           regex: '\\\\{',\n           push: \n            [ { token: 'meta.structure.record.erlang',\n                regex: '(?=\\\\})',\n                next: 'pop' },\n              { token: \n                 [ 'variable.other.field.erlang',\n                   'variable.language.omitted.field.erlang',\n                   'text',\n                   'keyword.operator.assignment.erlang' ],\n                regex: '(?:([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')|(_))(\\\\s*)(=|::)',\n                push: \n                 [ { token: 'punctuation.separator.class.record.erlang',\n                     regex: ',|(?=\\\\})',\n                     next: 'pop' },\n                   { include: '#everything-else' } ] },\n              { token: \n                 [ 'variable.other.field.erlang',\n                   'text',\n                   'punctuation.separator.class.record.erlang' ],\n                regex: '([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)((?:,)?)' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.record.erlang' } ] } ],\n      '#internal-type-specifiers': \n       [ { token: 'punctuation.separator.value-type.erlang',\n           regex: '/',\n           push: \n            [ { token: 'text', regex: '(?=,|:|>>)', next: 'pop' },\n              { token: \n                 [ 'storage.type.erlang',\n                   'storage.modifier.signedness.erlang',\n                   'storage.modifier.endianness.erlang',\n                   'storage.modifier.unit.erlang',\n                   'punctuation.separator.type-specifiers.erlang' ],\n                regex: '(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)' } ] } ],\n      '#keyword': \n       [ { token: 'keyword.control.erlang',\n           regex: '\\\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\\\b' } ],\n      '#list': \n       [ { token: 'punctuation.definition.list.begin.erlang',\n           regex: '\\\\[',\n           push: \n            [ { token: 'punctuation.definition.list.end.erlang',\n                regex: '\\\\]',\n                next: 'pop' },\n              { token: 'punctuation.separator.list.erlang',\n                regex: '\\\\||\\\\|\\\\||,' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.list.erlang' } ] } ],\n      '#macro-directive': \n       [ { token: \n            [ 'meta.directive.ifdef.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.ifdef.erlang',\n              'keyword.control.directive.ifdef.erlang',\n              'meta.directive.ifdef.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.ifdef.erlang',\n              'entity.name.function.macro.erlang',\n              'meta.directive.ifdef.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.ifdef.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(ifdef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' },\n         { token: \n            [ 'meta.directive.ifndef.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.ifndef.erlang',\n              'keyword.control.directive.ifndef.erlang',\n              'meta.directive.ifndef.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.ifndef.erlang',\n              'entity.name.function.macro.erlang',\n              'meta.directive.ifndef.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.ifndef.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(ifndef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' },\n         { token: \n            [ 'meta.directive.undef.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.undef.erlang',\n              'keyword.control.directive.undef.erlang',\n              'meta.directive.undef.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.undef.erlang',\n              'entity.name.function.macro.erlang',\n              'meta.directive.undef.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.undef.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(undef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' } ],\n      '#macro-usage': \n       [ { token: \n            [ 'keyword.operator.macro.erlang',\n              'meta.macro-usage.erlang',\n              'entity.name.function.macro.erlang' ],\n           regex: '(\\\\?\\\\??)(\\\\s*)([a-zA-Z\\\\d@_]+)' } ],\n      '#module-directive': \n       [ { token: \n            [ 'meta.directive.module.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.module.erlang',\n              'keyword.control.directive.module.erlang',\n              'meta.directive.module.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.module.erlang',\n              'entity.name.type.class.module.definition.erlang',\n              'meta.directive.module.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.module.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(module)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' } ],\n      '#number': \n       [ { token: 'text',\n           regex: '(?=\\\\d)',\n           push: \n            [ { token: 'text', regex: '(?!\\\\d)', next: 'pop' },\n              { token: \n                 [ 'constant.numeric.float.erlang',\n                   'punctuation.separator.integer-float.erlang',\n                   'constant.numeric.float.erlang',\n                   'punctuation.separator.float-exponent.erlang' ],\n                regex: '(\\\\d+)(\\\\.)(\\\\d+)((?:[eE][\\\\+\\\\-]?\\\\d+)?)' },\n              { token: \n                 [ 'constant.numeric.integer.binary.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.binary.erlang' ],\n                regex: '(2)(#)([0-1]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-3.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-3.erlang' ],\n                regex: '(3)(#)([0-2]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-4.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-4.erlang' ],\n                regex: '(4)(#)([0-3]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-5.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-5.erlang' ],\n                regex: '(5)(#)([0-4]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-6.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-6.erlang' ],\n                regex: '(6)(#)([0-5]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-7.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-7.erlang' ],\n                regex: '(7)(#)([0-6]+)' },\n              { token: \n                 [ 'constant.numeric.integer.octal.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.octal.erlang' ],\n                regex: '(8)(#)([0-7]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-9.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-9.erlang' ],\n                regex: '(9)(#)([0-8]+)' },\n              { token: \n                 [ 'constant.numeric.integer.decimal.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.decimal.erlang' ],\n                regex: '(10)(#)(\\\\d+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-11.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-11.erlang' ],\n                regex: '(11)(#)([\\\\daA]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-12.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-12.erlang' ],\n                regex: '(12)(#)([\\\\da-bA-B]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-13.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-13.erlang' ],\n                regex: '(13)(#)([\\\\da-cA-C]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-14.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-14.erlang' ],\n                regex: '(14)(#)([\\\\da-dA-D]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-15.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-15.erlang' ],\n                regex: '(15)(#)([\\\\da-eA-E]+)' },\n              { token: \n                 [ 'constant.numeric.integer.hexadecimal.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.hexadecimal.erlang' ],\n                regex: '(16)(#)([\\\\da-fA-F]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-17.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-17.erlang' ],\n                regex: '(17)(#)([\\\\da-gA-G]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-18.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-18.erlang' ],\n                regex: '(18)(#)([\\\\da-hA-H]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-19.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-19.erlang' ],\n                regex: '(19)(#)([\\\\da-iA-I]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-20.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-20.erlang' ],\n                regex: '(20)(#)([\\\\da-jA-J]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-21.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-21.erlang' ],\n                regex: '(21)(#)([\\\\da-kA-K]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-22.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-22.erlang' ],\n                regex: '(22)(#)([\\\\da-lA-L]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-23.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-23.erlang' ],\n                regex: '(23)(#)([\\\\da-mA-M]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-24.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-24.erlang' ],\n                regex: '(24)(#)([\\\\da-nA-N]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-25.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-25.erlang' ],\n                regex: '(25)(#)([\\\\da-oA-O]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-26.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-26.erlang' ],\n                regex: '(26)(#)([\\\\da-pA-P]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-27.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-27.erlang' ],\n                regex: '(27)(#)([\\\\da-qA-Q]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-28.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-28.erlang' ],\n                regex: '(28)(#)([\\\\da-rA-R]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-29.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-29.erlang' ],\n                regex: '(29)(#)([\\\\da-sA-S]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-30.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-30.erlang' ],\n                regex: '(30)(#)([\\\\da-tA-T]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-31.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-31.erlang' ],\n                regex: '(31)(#)([\\\\da-uA-U]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-32.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-32.erlang' ],\n                regex: '(32)(#)([\\\\da-vA-V]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-33.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-33.erlang' ],\n                regex: '(33)(#)([\\\\da-wA-W]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-34.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-34.erlang' ],\n                regex: '(34)(#)([\\\\da-xA-X]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-35.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-35.erlang' ],\n                regex: '(35)(#)([\\\\da-yA-Y]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-36.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-36.erlang' ],\n                regex: '(36)(#)([\\\\da-zA-Z]+)' },\n              { token: 'invalid.illegal.integer.erlang',\n                regex: '\\\\d+#[\\\\da-zA-Z]+' },\n              { token: 'constant.numeric.integer.decimal.erlang',\n                regex: '\\\\d+' } ] } ],\n      '#parenthesized-expression': \n       [ { token: 'punctuation.section.expression.begin.erlang',\n           regex: '\\\\(',\n           push: \n            [ { token: 'punctuation.section.expression.end.erlang',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.parenthesized' } ] } ],\n      '#record-directive': \n       [ { token: \n            [ 'meta.directive.record.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.record.erlang',\n              'keyword.control.directive.import.erlang',\n              'meta.directive.record.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.record.erlang',\n              'entity.name.type.class.record.definition.erlang',\n              'meta.directive.record.erlang',\n              'punctuation.separator.parameters.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(record)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(,)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.class.record.end.erlang',\n                   'meta.directive.record.erlang',\n                   'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.record.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\})(\\\\s*)(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#internal-record-body' },\n              { defaultToken: 'meta.directive.record.erlang' } ] } ],\n      '#record-usage': \n       [ { token: \n            [ 'keyword.operator.record.erlang',\n              'meta.record-usage.erlang',\n              'entity.name.type.class.record.erlang',\n              'meta.record-usage.erlang',\n              'punctuation.separator.record-field.erlang',\n              'meta.record-usage.erlang',\n              'variable.other.field.erlang' ],\n           regex: '(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(\\\\.)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')' },\n         { token: \n            [ 'keyword.operator.record.erlang',\n              'meta.record-usage.erlang',\n              'entity.name.type.class.record.erlang' ],\n           regex: '(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')',\n           push: \n            [ { token: 'punctuation.definition.class.record.end.erlang',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#internal-record-body' },\n              { defaultToken: 'meta.record-usage.erlang' } ] } ],\n      '#string': \n       [ { token: 'punctuation.definition.string.begin.erlang',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.erlang',\n                regex: '\"',\n                next: 'pop' },\n              { token: \n                 [ 'punctuation.definition.escape.erlang',\n                   'constant.character.escape.erlang',\n                   'punctuation.definition.escape.erlang',\n                   'constant.character.escape.erlang',\n                   'constant.character.escape.erlang' ],\n                regex: '(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n              { token: 'invalid.illegal.string.erlang', regex: '\\\\\\\\\\\\^?.?' },\n              { token: \n                 [ 'punctuation.definition.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'constant.other.placeholder.erlang' ],\n                regex: '(~)(?:((?:\\\\-)?)(\\\\d+)|(\\\\*))?(?:(\\\\.)(?:(\\\\d+)|(\\\\*)))?(?:(\\\\.)(?:(\\\\*)|(.)))?([~cfegswpWPBX#bx\\\\+ni])' },\n              { token: \n                 [ 'punctuation.definition.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'constant.other.placeholder.erlang' ],\n                regex: '(~)((?:\\\\*)?)((?:\\\\d+)?)([~du\\\\-#fsacl])' },\n              { token: 'invalid.illegal.string.erlang', regex: '~.?' },\n              { defaultToken: 'string.quoted.double.erlang' } ] } ],\n      '#symbolic-operator': \n       [ { token: 'keyword.operator.symbolic.erlang',\n           regex: '\\\\+\\\\+|\\\\+|--|-|\\\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::' } ],\n      '#textual-operator': \n       [ { token: 'keyword.operator.textual.erlang',\n           regex: '\\\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\\\b' } ],\n      '#tuple': \n       [ { token: 'punctuation.definition.tuple.begin.erlang',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.definition.tuple.end.erlang',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'punctuation.separator.tuple.erlang', regex: ',' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.tuple.erlang' } ] } ],\n      '#variable': \n       [ { token: [ 'variable.other.erlang', 'variable.language.omitted.erlang' ],\n           regex: '(_[a-zA-Z\\\\d@_]+|[A-Z][a-zA-Z\\\\d@_]*)|(_)' } ] };\n    \n    this.normalizeRules();\n};\n\nErlangHighlightRules.metaData = { comment: 'The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace).  Also, the function/module/record/macro names must be given unquoted.  -- desp',\n      fileTypes: [ 'erl', 'hrl' ],\n      keyEquivalent: '^~E',\n      name: 'Erlang',\n      scopeName: 'source.erlang' };\n\n\noop.inherits(ErlangHighlightRules, TextHighlightRules);\n\nexports.ErlangHighlightRules = ErlangHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/erlang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/erlang_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ErlangHighlightRules = require(\"./erlang_highlight_rules\").ErlangHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ErlangHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"%\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/erlang\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-forth.js",
    "content": "define(\"ace/mode/forth_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ForthHighlightRules = function() {\n\n    this.$rules = { start: [ { include: '#forth' } ],\n      '#comment':\n       [ { token: 'comment.line.double-dash.forth',\n           regex: '(?:^|\\\\s)--\\\\s.*$',\n           comment: 'line comments for iForth' },\n         { token: 'comment.line.backslash.forth',\n           regex: '(?:^|\\\\s)\\\\\\\\[\\\\s\\\\S]*$',\n           comment: 'ANSI line comment' },\n         { token: 'comment.line.backslash-g.forth',\n           regex: '(?:^|\\\\s)\\\\\\\\[Gg] .*$',\n           comment: 'gForth line comment' },\n         { token: 'comment.block.forth',\n           regex: '(?:^|\\\\s)\\\\(\\\\*(?=\\\\s|$)',\n           push:\n            [ { token: 'comment.block.forth',\n                regex: '(?:^|\\\\s)\\\\*\\\\)(?=\\\\s|$)',\n                next: 'pop' },\n              { defaultToken: 'comment.block.forth' } ],\n           comment: 'multiline comments for iForth' },\n         { token: 'comment.block.documentation.forth',\n           regex: '\\\\bDOC\\\\b',\n           caseInsensitive: true,\n           push:\n            [ { token: 'comment.block.documentation.forth',\n                regex: '\\\\bENDDOC\\\\b',\n                caseInsensitive: true,\n                next: 'pop' },\n              { defaultToken: 'comment.block.documentation.forth' } ],\n           comment: 'documentation comments for iForth' },\n         { token: 'comment.line.parentheses.forth',\n           regex: '(?:^|\\\\s)\\\\.?\\\\( [^)]*\\\\)',\n           comment: 'ANSI line comment' } ],\n      '#constant':\n       [ { token: 'constant.language.forth',\n           regex: '(?:^|\\\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'constant.numeric.forth',\n           regex: '(?:^|\\\\s)[$#%]?[-+]?[0-9]+(?:\\\\.[0-9]*e-?[0-9]+|\\\\.?[0-9a-fA-F]*)(?=\\\\s|$)'},\n         { token: 'constant.character.forth',\n           regex: '(?:^|\\\\s)(?:[&^]\\\\S|(?:\"|\\')\\\\S(?:\"|\\'))(?=\\\\s|$)'}],\n      '#forth':\n       [ { include: '#constant' },\n         { include: '#comment' },\n         { include: '#string' },\n         { include: '#word' },\n         { include: '#variable' },\n         { include: '#storage' },\n         { include: '#word-def' } ],\n      '#storage':\n       [ { token: 'storage.type.forth',\n           regex: '(?:^|\\\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\\\s|$)',\n           caseInsensitive: true}],\n      '#string':\n       [ { token: 'string.quoted.double.forth',\n           regex: '(ABORT\" |BREAK\" |\\\\.\" |C\" |0\"|S\\\\\\\\?\" )([^\"]+\")',\n           caseInsensitive: true},\n         { token: 'string.unquoted.forth',\n           regex: '(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\\\S+(?=\\\\s|$)',\n           caseInsensitive: true}],\n      '#variable':\n       [ { token: 'variable.language.forth',\n           regex: '\\\\b(?:I|J)\\\\b',\n           caseInsensitive: true } ],\n      '#word':\n       [ { token: 'keyword.control.immediate.forth',\n           regex: '(?:^|\\\\s)\\\\[(?:\\\\?DO|\\\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\\\](?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.immediate.forth',\n           regex: '(?:^|\\\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT\\'S|])(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.control.compile-only.forth',\n           regex: '(?:^|\\\\s)(?:-DO|\\\\-LOOP|\\\\?DO|\\\\?LEAVE|\\\\+DO|\\\\+LOOP|ABORT\\\\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\\\-DO|U\\\\+DO|UNTIL|WHILE)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.compile-only.forth',\n           regex: '(?:^|\\\\s)(?:\\\\?DUP-0=-IF|\\\\?DUP-IF|\\\\)|\\\\[|\\\\[\\'\\\\]|\\\\[CHAR\\\\]|\\\\[COMPILE\\\\]|\\\\[IS\\\\]|\\\\[TO\\\\]|<COMPILATION|<INTERPRETATION|ASSERT\\\\(|ASSERT0\\\\(|ASSERT1\\\\(|ASSERT2\\\\(|ASSERT3\\\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.non-immediate.forth',\n           regex: '(?:^|\\\\s)(?:\\'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.warning.forth',\n           regex: '(?:^|\\\\s)(?:~~|BREAK:|BREAK\"|DBG)(?=\\\\s|$)',\n           caseInsensitive: true}],\n      '#word-def':\n       [ { token:\n            [ 'keyword.other.compile-only.forth',\n              'keyword.other.compile-only.forth',\n              'meta.block.forth',\n              'entity.name.function.forth' ],\n           regex: '(:NONAME)|(^:|\\\\s:)(\\\\s)(\\\\S+)(?=\\\\s|$)',\n           caseInsensitive: true,\n           push:\n            [ { token: 'keyword.other.compile-only.forth',\n                regex: ';(?:CODE)?',\n                caseInsensitive: true,\n                next: 'pop' },\n              { include: '#constant' },\n              { include: '#comment' },\n              { include: '#string' },\n              { include: '#word' },\n              { include: '#variable' },\n              { include: '#storage' },\n              { defaultToken: 'meta.block.forth' } ] } ] };\n    \n    this.normalizeRules();\n};\n\nForthHighlightRules.metaData = { fileTypes: [ 'frt', 'fs', 'ldr', 'fth', '4th' ],\n      foldingStartMarker: '/\\\\*\\\\*|\\\\{\\\\s*$',\n      foldingStopMarker: '\\\\*\\\\*/|^\\\\s*\\\\}',\n      keyEquivalent: '^~F',\n      name: 'Forth',\n      scopeName: 'source.forth' };\n\n\noop.inherits(ForthHighlightRules, TextHighlightRules);\n\nexports.ForthHighlightRules = ForthHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/forth\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/forth_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ForthHighlightRules = require(\"./forth_highlight_rules\").ForthHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ForthHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/forth\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-fortran.js",
    "content": "define(\"ace/mode/fortran_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar FortranHighlightRules = function() {\n\n    var keywords = (\n        \"call|case|contains|continue|cycle|do|else|elseif|end|enddo|endif|function|\"+ \n        \"if|implicit|in|include|inout|intent|module|none|only|out|print|program|return|\"+ \n        \"select|status|stop|subroutine|\" +\n        \"return|then|use|while|write|\"+\n        \"CALL|CASE|CONTAINS|CONTINUE|CYCLE|DO|ELSE|ELSEIF|END|ENDDO|ENDIF|FUNCTION|\"+\n        \"IF|IMPLICIT|IN|INCLUDE|INOUT|INTENT|MODULE|NONE|ONLY|OUT|PRINT|PROGRAM|RETURN|\"+\n        \"SELECT|STATUS|STOP|SUBROUTINE|\" +\n        \"RETURN|THEN|USE|WHILE|WRITE\"\n    );\n\n    var keywordOperators = (\n        \"and|or|not|eq|ne|gt|ge|lt|le|\" +\n        \"AND|OR|NOT|EQ|NE|GT|GE|LT|LE\" \n    );\n\n    var builtinConstants = (\n        \"true|false|TRUE|FALSE\"\n    );\n\n    var builtinFunctions = (\n        \"abs|achar|acos|acosh|adjustl|adjustr|aimag|aint|all|allocate|\"+\n        \"anint|any|asin|asinh|associated|atan|atan2|atanh|\"+\n        \"bessel_j0|bessel_j1|bessel_jn|bessel_y0|bessel_y1|bessel_yn|\"+\n        \"bge|bgt|bit_size|ble|blt|btest|ceiling|char|cmplx|conjg|cos|cosh|\"+\n        \"count|cpu_time|cshift|date_and_time|dble|deallocate|digits|dim|dot_product|dprod|\"+\n        \"dshiftl|dshiftr|dsqrt|eoshift|epsilon|erf|erfc|erfc_scaled|exp|float|floor|\"+\n        \"format|fraction|gamma|input|len|lge|lgt|lle|llt|log|log10|maskl|maskr|matmul|max|maxloc|maxval|\"+\n        \"merge|min|minloc|minval|mod|modulo|nint|not|norm2|null|nullify|pack|parity|popcnt|poppar|\"+\n        \"precision|present|product|radix|random_number|random_seed|range|repeat|reshape|round|\"+\n        \"rrspacing|same_type_as|scale|scan|selected_char_kind|selected_int_kind|selected_real_kind|\"+\n        \"set_exponent|shape|shifta|shiftl|shiftr|sign|sin|sinh|size|sngl|spacing|spread|\"+\n        \"sqrt|sum|system_clock|tan|tanh|tiny|trailz|transfer|transpose|trim|ubound|unpack|verify|\" +\n        \"ABS|ACHAR|ACOS|ACOSH|ADJUSTL|ADJUSTR|AIMAG|AINT|ALL|ALLOCATE|\"+\n        \"ANINT|ANY|ASIN|ASINH|ASSOCIATED|ATAN|ATAN2|ATANH|\"+\n        \"BESSEL_J0|BESSEL_J1|BESSEL_JN|BESSEL_Y0|BESSEL_Y1|BESSEL_YN|\"+\n        \"BGE|BGT|BIT_SIZE|BLE|BLT|BTEST|CEILING|CHAR|CMPLX|CONJG|COS|COSH|\"+\n        \"COUNT|CPU_TIME|CSHIFT|DATE_AND_TIME|DBLE|DEALLOCATE|DIGITS|DIM|DOT_PRODUCT|DPROD|\"+\n        \"DSHIFTL|DSHIFTR|DSQRT|EOSHIFT|EPSILON|ERF|ERFC|ERFC_SCALED|EXP|FLOAT|FLOOR|\"+\n        \"FORMAT|FRACTION|GAMMA|INPUT|LEN|LGE|LGT|LLE|LLT|LOG|LOG10|MASKL|MASKR|MATMUL|MAX|MAXLOC|MAXVAL|\"+\n        \"MERGE|MIN|MINLOC|MINVAL|MOD|MODULO|NINT|NOT|NORM2|NULL|NULLIFY|PACK|PARITY|POPCNT|POPPAR|\"+\n        \"PRECISION|PRESENT|PRODUCT|RADIX|RANDOM_NUMBER|RANDOM_SEED|RANGE|REPEAT|RESHAPE|ROUND|\"+\n        \"RRSPACING|SAME_TYPE_AS|SCALE|SCAN|SELECTED_CHAR_KIND|SELECTED_INT_KIND|SELECTED_REAL_KIND|\"+\n        \"SET_EXPONENT|SHAPE|SHIFTA|SHIFTL|SHIFTR|SIGN|SIN|SINH|SIZE|SNGL|SPACING|SPREAD|\"+\n        \"SQRT|SUM|SYSTEM_CLOCK|TAN|TANH|TINY|TRAILZ|TRANSFER|TRANSPOSE|TRIM|UBOUND|UNPACK|VERIFY\"\n    );\n\n    var storageType = (\n        \"logical|character|integer|real|type|\" +\n        \"LOGICAL|CHARACTER|INTEGER|REAL|TYPE\"    \n    );\n\n    var storageModifiers = ( \n        \"allocatable|dimension|intent|parameter|pointer|target|private|public|\" +\n        \"ALLOCATABLE|DIMENSION|INTENT|PARAMETER|POINTER|TARGET|PRIVATE|PUBLIC\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords,\n        \"keyword.operator\": keywordOperators,\n        \"storage.type\": storageType,\n        \"storage.modifier\" : storageModifiers\n    }, \"identifier\");\n\n    var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape =  \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"!.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token : \"constant.numeric\", // imaginary\n            regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // long integer\n            regex : integer + \"[lL]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : \"keyword\", // pre-compiler directives\n            regex : \"#\\\\s*(?:include|import|define|undef|INCLUDE|IMPORT|DEFINE|UNDEF)\\\\b\"\n        }, {\n            token : \"keyword\", // special case pre-compiler directive\n            regex : \"#\\\\s*(?:endif|ifdef|else|elseif|ifndef|ENDIF|IFDEF|ELSE|ELSEIF|IFNDEF)\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ],\n        \"qqstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        } ],\n        \"qstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        } ],\n        \"qqstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }]\n    };\n};\n\noop.inherits(FortranHighlightRules, TextHighlightRules);\n\nexports.FortranHighlightRules = FortranHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/fortran\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fortran_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FortranHighlightRules = require(\"./fortran_highlight_rules\").FortranHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = FortranHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"!\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"return\": 1,\n        \"break\": 1,\n        \"continue\": 1,\n        \"RETURN\": 1,\n        \"BREAK\": 1,\n        \"CONTINUE\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/fortran\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-fsharp.js",
    "content": "define(\"ace/mode/fsharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar FSharpHighlightRules = function () {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable\": \"this\",\n        \"keyword\": 'abstract|assert|base|begin|class|default|delegate|done|downcast|downto|elif\\\n|else|exception|extern|false|finally|function|global|inherit|inline|interface|internal|lazy|match\\\n|member|module|mutable|namespace|open|or|override|private|public|rec|return|return!|select|static\\\n|struct|then|to|true|try|typeof|upcast|use|use!|val|void|when|while|with|yield|yield!|__SOURCE_DIRECTORY__\\\n|as|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue\\\n|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall\\\n|trait|virtual|volatile|and|do|end|for|fun|if|in|let|let!|new|not|null|of|endif',\n        \"constant\": \"true|false\"\n    }, \"identifier\");\n\n    var floatNumber = \"(?:(?:(?:(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.))|(?:\\\\d+))(?:[eE][+-]?\\\\d+))|(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.)))\";\n\n    this.$rules = {\n        \"start\": [\n            {\n              token: \"variable.classes\",\n              regex: '\\\\[\\\\<[.]*\\\\>\\\\]'\n            },\n            {\n                token: \"comment\",\n                regex: '//.*$'\n            },\n            {\n                token: \"comment.start\",\n                regex: /\\(\\*(?!\\))/,\n                push: \"blockComment\"\n            },\n            {\n                token: \"string\",\n                regex: \"'.'\"\n            },\n            {\n                token: \"string\",\n                regex: '\"\"\"',\n                next  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\./,\n                    next  : \"qqstring\"\n                }, {\n                    token : \"string\",\n                    regex : '\"\"\"',\n                    next  : \"start\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            },\n            {\n                token: \"string\",\n                regex: '\"',\n                next  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\./,\n                    next  : \"qqstring\"\n                }, {\n                    token : \"string\",\n                    regex : '\"',\n                    next  : \"start\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            },\n            {\n                token: [\"verbatim.string\", \"string\"],\n                regex: '(@?)(\")',\n                stateName : \"qqstring\",\n                next  : [{\n                    token : \"constant.language.escape\",\n                    regex : '\"\"'\n                }, {\n                    token : \"string\",\n                    regex : '\"',\n                    next  : \"start\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            },\n            {\n                token: \"constant.float\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            },\n            {\n                token: \"constant.float\",\n                regex: floatNumber\n            },\n            {\n                token: \"constant.integer\",\n                regex: \"(?:(?:(?:[1-9]\\\\d*)|(?:0))|(?:0[oO]?[0-7]+)|(?:0[xX][\\\\dA-Fa-f]+)|(?:0[bB][01]+))\\\\b\"\n            },\n            {\n                token: [\"keyword.type\", \"variable\"],\n                regex: \"(type\\\\s)([a-zA-Z0-9_$\\-]*\\\\b)\"\n            },\n            {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|\\\\(\\\\*\\\\)\"\n            },\n            {\n                token: \"paren.lpar\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.rpar\",\n                regex: \"[\\\\])}]\"\n            }\n        ],\n        blockComment: [{\n            regex: /\\(\\*\\)/,\n            token: \"comment\"\n        }, {\n            regex: /\\(\\*(?!\\))/,\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            regex: /\\*\\)/,\n            token: \"comment.end\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }]\n    };\n    this.normalizeRules();\n};\n\n\noop.inherits(FSharpHighlightRules, TextHighlightRules);\n\nexports.FSharpHighlightRules = FSharpHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/fsharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsharp_highlight_rules\",\"ace/mode/folding/cstyle\"], function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var FSharpHighlightRules = require(\"./fsharp_highlight_rules\").FSharpHighlightRules;\n    var CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\n    var Mode = function () {\n        TextMode.call(this);\n        this.HighlightRules = FSharpHighlightRules;\n        this.foldingRules = new CStyleFoldMode();\n    };\n\n    oop.inherits(Mode, TextMode);\n\n\n    (function () {\n        this.lineCommentStart = \"//\";\n        this.blockComment = {start: \"(*\", end: \"*)\", nestable: true};\n\n\n        this.$id = \"ace/mode/fsharp\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-fsl.js",
    "content": "define(\"ace/mode/fsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar FSLHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"punctuation.definition.comment.mn\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.mn\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.fsl\"\n            }]\n        }, {\n            token: \"comment.line.fsl\",\n            regex: /\\/\\//,\n            push: [{\n                token: \"comment.line.fsl\",\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.line.fsl\"\n            }]\n        }, {\n            token: \"entity.name.function\",\n            regex: /\\${/,\n            push: [{\n                token: \"entity.name.function\",\n                regex: /}/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"keyword.other\"\n            }],\n            comment: \"js outcalls\"\n        }, {\n            token: \"constant.numeric\",\n            regex: /[0-9]*\\.[0-9]*\\.[0-9]*/,\n            comment: \"semver\"\n        }, {\n            token: \"constant.language.fslLanguage\",\n            regex: \"(?:\"\n                + \"graph_layout|machine_name|machine_author|machine_license|machine_comment|machine_language\"\n                + \"|machine_version|machine_reference|npm_name|graph_layout|on_init|on_halt|on_end|on_terminate|on_finalize|on_transition\"\n                + \"|on_action|on_stochastic_action|on_legal|on_main|on_forced|on_validation|on_validation_failure|on_transition_refused|on_forced_transition_refused\"\n                + \"|on_action_refused|on_enter|on_exit|start_states|end_states|terminal_states|final_states|fsl_version\"\n                + \")\\\\s*:\"\n        }, {\n            token: \"keyword.control.transition.fslArrow\",\n            regex: /<->|<-|->|<=>|=>|<=|<~>|~>|<~|<-=>|<=->|<-~>|<~->|<=~>|<~=>/\n        }, {\n            token: \"constant.numeric.fslProbability\",\n            regex: /[0-9]+%/,\n            comment: \"edge probability annotation\"\n        }, {\n            token: \"constant.character.fslAction\",\n            regex: /\\'[^']*\\'/,\n            comment: \"action annotation\"\n        }, {\n            token: \"string.quoted.double.fslLabel.doublequoted\",\n            regex: /\\\"[^\"]*\\\"/,\n            comment: \"fsl label annotation\"\n        }, {\n            token: \"entity.name.tag.fslLabel.atom\",\n            regex: /[a-zA-Z0-9_.+&()#@!?,]/,\n            comment: \"fsl label annotation\"\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nFSLHighlightRules.metaData = {\n    fileTypes: [\"fsl\", \"fsl_state\"],\n    name: \"FSL\",\n    scopeName: \"source.fsl\"\n};\n\n\noop.inherits(FSLHighlightRules, TextHighlightRules);\n\nexports.FSLHighlightRules = FSLHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/fsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsl_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FSLHighlightRules = require(\"./fsl_highlight_rules\").FSLHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = FSLHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/fsl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-ftl.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/ftl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar FtlLangHighlightRules = function () {\n\n    var stringBuiltIns = \"\\\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|\"\n        + \"ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|\"\n        + \"left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|\"\n        + \"upper_case|word_list|xhtml|xml\";\n    var numberBuiltIns = \"c|round|floor|ceiling\";\n    var dateBuiltIns = \"iso_[a-z_]+\";\n    var seqBuiltIns = \"first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk\";\n    var hashBuiltIns = \"keys|values\";\n    var xmlBuiltIns = \"children|parent|root|ancestors|node_name|node_type|node_namespace\";\n    var expertBuiltIns = \"byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|\"\n        + \"eval|has_content|interpret|is_[a-z_]+|namespacenew\";\n    var allBuiltIns = stringBuiltIns + numberBuiltIns + dateBuiltIns + seqBuiltIns + hashBuiltIns\n        + xmlBuiltIns + expertBuiltIns;\n\n    var deprecatedBuiltIns = \"default|exists|if_exists|web_safe\";\n\n    var variables = \"data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|\"\n        + \"now|output_encoding|template_name|url_escaping_charset|vars|version\";\n\n    var operators = \"gt|gte|lt|lte|as|in|using\";\n\n    var reserved = \"true|false\";\n\n    var attributes = \"encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|\"\n        + \"url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|\"\n        + \"attributes\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant.character.entity\",\n            regex : /&[^;]+;/\n        }, {\n            token : \"support.function\",\n            regex : \"\\\\?(\"+allBuiltIns+\")\"\n        },  {\n            token : \"support.function.deprecated\",\n            regex : \"\\\\?(\"+deprecatedBuiltIns+\")\"\n        }, {\n            token : \"language.variable\",\n            regex : \"\\\\.(?:\"+variables+\")\"\n        }, {\n            token : \"constant.language\",\n            regex : \"\\\\b(\"+reserved+\")\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\b(?:\"+operators+\")\\\\b\"\n        }, {\n            token : \"entity.other.attribute-name\",\n            regex : attributes\n        }, {\n            token : \"string\", //\n            regex : /['\"]/,\n            next : \"qstring\"\n        }, {\n            token : function(value) {\n                if (value.match(\"^[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?$\")) {\n                    return \"constant.numeric\";\n                } else {\n                    return \"variable\";\n                }\n            },\n            regex : /[\\w.+\\-]+/\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|\\\\.|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }],\n\n        \"qstring\" : [{\n            token : \"constant.character.escape\",\n            regex : '\\\\\\\\[nrtvef\\\\\\\\\"$]'\n        }, {\n            token : \"string\",\n            regex : /['\"]/,\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        }]\n    };\n};\n\noop.inherits(FtlLangHighlightRules, TextHighlightRules);\n\nvar FtlHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var directives = \"assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|\"\n        + \"ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|\"\n        + \"setting|stop|switch|t|visit\";\n\n    var startRules = [\n        {\n            token : \"comment\",\n            regex : \"<#--\",\n            next : \"ftl-dcomment\"\n        }, {\n            token : \"string.interpolated\",\n            regex : \"\\\\${\",\n            push  : \"ftl-start\"\n        }, {\n            token : \"keyword.function\",\n            regex :  \"</?#(\"+directives+\")\",\n            push : \"ftl-start\"\n        }, {\n            token : \"keyword.other\",\n            regex : \"</?@[a-zA-Z\\\\.]+\",\n            push : \"ftl-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n           token : \"keyword\",\n            regex : \"/?>\",\n            next  : \"pop\"\n        }, {\n            token : \"string.interpolated\",\n            regex : \"}\",\n            next  : \"pop\"\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(FtlLangHighlightRules, \"ftl-\", endRules, [\"start\"]);\n\n    this.addRules({\n        \"ftl-dcomment\" : [{\n            token : \"comment\",\n            regex : \"-->\",\n            next : \"pop\"\n        }, {\n            defaultToken : \"comment\"\n        }]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(FtlHighlightRules, HtmlHighlightRules);\n\nexports.FtlHighlightRules = FtlHighlightRules;\n});\n\ndefine(\"ace/mode/ftl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ftl_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FtlHighlightRules = require(\"./ftl_highlight_rules\").FtlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = FtlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/ftl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-gcode.js",
    "content": "define(\"ace/mode/gcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var GcodeHighlightRules = function() {\n\n        var keywords = (\n            \"IF|DO|WHILE|ENDWHILE|CALL|ENDIF|SUB|ENDSUB|GOTO|REPEAT|ENDREPEAT|CALL\"\n            );\n\n        var builtinConstants = (\n            \"PI\"\n            );\n\n        var builtinFunctions = (\n            \"ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN\"\n            );\n        var keywordMapper = this.createKeywordMapper({\n            \"support.function\": builtinFunctions,\n            \"keyword\": keywords,\n            \"constant.language\": builtinConstants\n        }, \"identifier\", true);\n\n        this.$rules = {\n            \"start\" : [ {\n                token : \"comment\",\n                regex : \"\\\\(.*\\\\)\"\n            }, {\n                token : \"comment\",           // block number\n                regex : \"([N])([0-9]+)\"\n            }, {\n                token : \"string\",           // \" string\n                regex : \"([G])([0-9]+\\\\.?[0-9]?)\"\n            }, {\n                token : \"string\",           // ' string\n                regex : \"([M])([0-9]+\\\\.?[0-9]?)\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"([-+]?([0-9]*\\\\.?[0-9]+\\\\.?))|(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\"\n            }, {\n                token : keywordMapper,\n                regex : \"[A-Z]\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"EQ|LT|GT|NE|GE|LE|OR|XOR\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[\\\\[]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\]]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            } ]\n        };\n    };\n\n    oop.inherits(GcodeHighlightRules, TextHighlightRules);\n\n    exports.GcodeHighlightRules = GcodeHighlightRules;\n});\n\ndefine(\"ace/mode/gcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gcode_highlight_rules\",\"ace/range\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var GcodeHighlightRules = require(\"./gcode_highlight_rules\").GcodeHighlightRules;\n    var Range = require(\"../range\").Range;\n\n    var Mode = function() {\n        this.HighlightRules = GcodeHighlightRules;\n        this.$behaviour = this.$defaultBehaviour;\n    };\n    oop.inherits(Mode, TextMode);\n\n    (function() {\n        this.$id = \"ace/mode/gcode\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-gherkin.js",
    "content": "define(\"ace/mode/gherkin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar stringEscape =  \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\nvar GherkinHighlightRules = function() {\n    var languages = [{\n        name: \"en\",\n        labels: \"Feature|Background|Scenario(?: Outline)?|Examples\",\n        keywords: \"Given|When|Then|And|But\"\n    }];\n    \n    var labels = languages.map(function(l) {\n        return l.labels;\n    }).join(\"|\");\n    var keywords = languages.map(function(l) {\n        return l.keywords;\n    }).join(\"|\");\n    this.$rules = {\n        start : [{\n            token: \"constant.numeric\",\n            regex: \"(?:(?:[1-9]\\\\d*)|(?:0))\"\n        }, {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"keyword\",\n            regex : \"(?:\" + labels + \"):|(?:\" + keywords + \")\\\\b\"\n        }, {\n            token : \"keyword\",\n            regex : \"\\\\*\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\"',\n            next : \"qqstring\"\n        }, {\n            token : \"text\",\n            regex : \"^\\\\s*(?=@[\\\\w])\",\n            next : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : \"variable.parameter\",\n                regex : \"@[\\\\w]+\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"start\"\n            }]\n        }, {\n            token : \"comment\",\n            regex : \"<[^>]+>\"\n        }, {\n            token : \"comment\",\n            regex : \"\\\\|(?=.)\",\n            next : \"table-item\"\n        }, {\n            token : \"comment\",\n            regex : \"\\\\|$\",\n            next : \"start\"\n        }],\n        \"qqstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        }],\n        \"qqstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"table-item\" : [{\n            token : \"comment\",\n            regex : /$/,\n            next : \"start\"\n        }, {\n            token : \"comment\",\n            regex : /\\|/\n        }, {\n            token : \"string\",\n            regex : /\\\\./\n        }, {\n            defaultToken : \"string\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(GherkinHighlightRules, TextHighlightRules);\n\nexports.GherkinHighlightRules = GherkinHighlightRules;\n});\n\ndefine(\"ace/mode/gherkin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gherkin_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GherkinHighlightRules = require(\"./gherkin_highlight_rules\").GherkinHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = GherkinHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/gherkin\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var space2 = \"  \";\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        \n        console.log(state);\n        \n        if(line.match(\"[ ]*\\\\|\")) {\n            indent += \"| \";\n        }\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        \n\n        if (state == \"start\") {\n            if (line.match(\"Scenario:|Feature:|Scenario Outline:|Background:\")) {\n                indent += space2;\n            } else if(line.match(\"(Given|Then).+(:)$|Examples:\")) {\n                indent += space2;\n            } else if(line.match(\"\\\\*.+\")) {\n                indent += \"* \";\n            } \n        }\n        \n\n        return indent;\n    };\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-gitignore.js",
    "content": "define(\"ace/mode/gitignore_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GitignoreHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /^\\s*#.*$/\n            }, {\n                token : \"keyword\", // negated patterns\n                regex : /^\\s*!.*$/\n            }\n        ]\n    };\n    \n    this.normalizeRules();\n};\n\nGitignoreHighlightRules.metaData = {\n    fileTypes: ['gitignore'],\n    name: 'Gitignore'\n};\n\noop.inherits(GitignoreHighlightRules, TextHighlightRules);\n\nexports.GitignoreHighlightRules = GitignoreHighlightRules;\n});\n\ndefine(\"ace/mode/gitignore\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gitignore_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GitignoreHighlightRules = require(\"./gitignore_highlight_rules\").GitignoreHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = GitignoreHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/gitignore\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-glsl.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/glsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\n\nvar glslHighlightRules = function() {\n\n    var keywords = (\n        \"attribute|const|uniform|varying|break|continue|do|for|while|\" +\n        \"if|else|in|out|inout|float|int|void|bool|true|false|\" +\n        \"lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|\" +\n        \"mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|\" +\n        \"samplerCube|struct\"\n    );\n\n    var buildinConstants = (\n        \"radians|degrees|sin|cos|tan|asin|acos|atan|pow|\" +\n        \"exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|\" +\n        \"min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|\" +\n        \"normalize|faceforward|reflect|refract|matrixCompMult|lessThan|\" +\n        \"lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|\" +\n        \"not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|\" +\n        \"texture2DProjLod|textureCube|textureCubeLod|\" +\n        \"gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|\" +\n        \"gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|\" +\n        \"gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|\" +\n        \"gl_DepthRangeParameters|gl_DepthRange|\" +\n        \"gl_Position|gl_PointSize|\" +\n        \"gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    this.$rules = new c_cppHighlightRules().$rules;\n    this.$rules.start.forEach(function(rule) {\n        if (typeof rule.token == \"function\")\n            rule.token = keywordMapper;\n    });\n};\n\noop.inherits(glslHighlightRules, c_cppHighlightRules);\n\nexports.glslHighlightRules = glslHighlightRules;\n});\n\ndefine(\"ace/mode/glsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/glsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar glslHighlightRules = require(\"./glsl_highlight_rules\").glslHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = glslHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, CMode);\n\n(function() {\n    this.$id = \"ace/mode/glsl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-gobstones.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/gobstones_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GobstonesHighlightRules = function() {\n\n    var keywords = (\n    \"program|procedure|function|interactive|if|then|else|switch|repeat|while|foreach|in|not|div|mod|Skip|return\"\n    );\n\n    var buildinConstants = (\n        \"False|True\"\n    );\n\n\n    var langClasses = (\n        \"Poner|Sacar|Mover|IrAlBorde|VaciarTablero|\" +\n        \"nroBolitas|hayBolitas|puedeMover|siguiente|previo|opuesto|minBool|maxBool|\" +\n        \"minDir|maxDir|minColor|maxColor\"\n    );\n\n    var supportType = (\n        \"Verde|Rojo|Azul|Negro|Norte|Sur|Este|Oeste\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses,\n        \"support.type\": supportType\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\",\n                regex : \"\\\\-\\\\-.*$\"\n            },\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:True|False)\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \":=|\\\\.\\\\.|,|;|\\\\|\\\\||\\\\/\\\\/|\\\\+|\\\\-|\\\\^|\\\\*|>|<|>=|=>|==|&&\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(GobstonesHighlightRules, TextHighlightRules);\n\nexports.GobstonesHighlightRules = GobstonesHighlightRules;\n});\n\ndefine(\"ace/mode/gobstones\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/gobstones_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar GobstonesHighlightRules = require(\"./gobstones_highlight_rules\").GobstonesHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = GobstonesHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/gobstones\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-golang.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/golang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    var oop = require(\"../lib/oop\");\n    var DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var GolangHighlightRules = function() {\n        var keywords = (\n            \"else|break|case|return|goto|if|const|select|\" +\n            \"continue|struct|default|switch|for|range|\" +\n            \"func|import|package|chan|defer|fallthrough|go|interface|map|range|\" +\n            \"select|type|var\"\n        );\n        var builtinTypes = (\n            \"string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|\" +\n            \"float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error\"\n        );\n        var builtinFunctions = (\n            \"new|close|cap|copy|panic|panicln|print|println|len|make|delete|real|recover|imag|append\"\n        );\n        var builtinConstants = (\"nil|true|false|iota\");\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": builtinConstants,\n            \"support.function\": builtinFunctions,\n            \"support.type\": builtinTypes\n        }, \"\");\n        \n        var stringEscapeRe = \"\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u{4}|U\\\\h{6}|[abfnrtv'\\\"\\\\\\\\])\".replace(/\\\\h/g, \"[a-fA-F\\\\d]\");\n\n        this.$rules = {\n            \"start\" : [\n                {\n                    token : \"comment\",\n                    regex : \"\\\\/\\\\/.*$\"\n                },\n                DocCommentHighlightRules.getStartRule(\"doc-start\"),\n                {\n                    token : \"comment.start\", // multi line comment\n                    regex : \"\\\\/\\\\*\",\n                    next : \"comment\"\n                }, {\n                    token : \"string\", // single line\n                    regex : /\"(?:[^\"\\\\]|\\\\.)*?\"/\n                }, {\n                    token : \"string\", // raw\n                    regex : '`',\n                    next : \"bqstring\"\n                }, {\n                    token : \"constant.numeric\", // rune\n                    regex : \"'(?:[^\\\\'\\uD800-\\uDBFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|\" + stringEscapeRe.replace('\"', '')  + \")'\"\n                }, {\n                    token : \"constant.numeric\", // hex\n                    regex : \"0[xX][0-9a-fA-F]+\\\\b\" \n                }, {\n                    token : \"constant.numeric\", // float\n                    regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n                }, {\n                    token : [\"keyword\", \"text\", \"entity.name.function\"],\n                    regex : \"(func)(\\\\s+)([a-zA-Z_$][a-zA-Z0-9_$]*)\\\\b\"\n                }, {\n                    token : function(val) {\n                        if (val[val.length - 1] == \"(\") {\n                            return [{\n                                type: keywordMapper(val.slice(0, -1)) || \"support.function\",\n                                value: val.slice(0, -1)\n                            }, {\n                                type: \"paren.lparen\",\n                                value: val.slice(-1)\n                            }];\n                        }\n                        \n                        return keywordMapper(val) || \"identifier\";\n                    },\n                    regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\\\\(?\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[[({]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\])}]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }\n            ],\n            \"comment\" : [\n                {\n                    token : \"comment.end\",\n                    regex : \"\\\\*\\\\/\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ],\n            \"bqstring\" : [\n                {\n                    token : \"string\",\n                    regex : '`',\n                    next : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        };\n\n        this.embedRules(DocCommentHighlightRules, \"doc-\",\n            [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    };\n    oop.inherits(GolangHighlightRules, TextHighlightRules);\n\n    exports.GolangHighlightRules = GolangHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/golang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/golang_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GolangHighlightRules = require(\"./golang_highlight_rules\").GolangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = GolangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };//end getNextLineIndent\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/golang\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-graphqlschema.js",
    "content": "define(\"ace/mode/graphqlschema_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GraphQLSchemaHighlightRules = function() {\n\n    var keywords = (\n      \"type|interface|union|enum|schema|input|implements|extends|scalar\"\n    );\n\n    var dataTypes = (\n      \"Int|Float|String|ID|Boolean\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"storage.type\": dataTypes\n    }, \"identifier\");\n\n    this.$rules = {\n      \"start\" : [ {\n        token : \"comment\",\n        regex : \"#.*$\"\n      }, {\n        token : \"paren.lparen\",\n        regex : /[\\[({]/,\n        next  : \"start\"\n      }, {\n        token : \"paren.rparen\",\n        regex : /[\\])}]/\n      }, {\n        token : keywordMapper,\n        regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n      } ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(GraphQLSchemaHighlightRules, TextHighlightRules);\n\nexports.GraphQLSchemaHighlightRules = GraphQLSchemaHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/graphqlschema\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/graphqlschema_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GraphQLSchemaHighlightRules = require(\"./graphqlschema_highlight_rules\").GraphQLSchemaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = GraphQLSchemaHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/graphqlschema\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-groovy.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/groovy_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GroovyHighlightRules = function() {\n\n    var keywords = (\n        \"assert|with|abstract|continue|for|new|switch|\" +\n        \"assert|default|goto|package|synchronized|\" +\n        \"boolean|do|if|private|this|\" +\n        \"break|double|implements|protected|throw|\" +\n        \"byte|else|import|public|throws|\" +\n        \"case|enum|instanceof|return|transient|\" +\n        \"catch|extends|int|short|try|\" +\n        \"char|final|interface|static|void|\" +\n        \"class|finally|long|strictfp|volatile|\" +\n        \"def|float|native|super|while\"\n    );\n\n    var buildinConstants = (\n        \"null|Infinity|NaN|undefined\"\n    );\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"support.function\": langClasses,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\",\n                regex : '\"\"\"',\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : \"'''\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"\\\\?:|\\\\?\\\\.|\\\\*\\\\.|<=>|=~|==~|\\\\.@|\\\\*\\\\.@|\\\\.&|as|in|is|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:u[0-9A-Fa-f]{4}|.|$)/\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\$[\\w\\d]+/\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\$\\{[^\"\\}]+\\}?/\n            }, {\n                token : \"string\",\n                regex : '\"{3,5}',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+?'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:u[0-9A-Fa-f]{4}|.|$)/\n            }, {\n                token : \"string\",\n                regex : \"'{3,5}\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : \".+?\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(GroovyHighlightRules, TextHighlightRules);\n\nexports.GroovyHighlightRules = GroovyHighlightRules;\n});\n\ndefine(\"ace/mode/groovy\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/groovy_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar GroovyHighlightRules = require(\"./groovy_highlight_rules\").GroovyHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = GroovyHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/groovy\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-haml.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\ndefine(\"ace/mode/haml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar RubyExports = require(\"./ruby_highlight_rules\");\nvar RubyHighlightRules = RubyExports.RubyHighlightRules;\n\nvar HamlHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.block\", // multiline HTML comment\n                regex: /^\\/$/,\n                next: \"comment\"\n            },\n            {\n                token: \"comment.block\", // multiline HAML comment\n                regex: /^\\-#$/,\n                next: \"comment\"\n            },\n            {\n                token: \"comment.line\", // HTML comment\n                regex: /\\/\\s*.*/\n            },\n            {\n                token: \"comment.line\", // HAML comment\n                regex: /-#\\s*.*/\n            },\n            {\n                token: \"keyword.other.doctype\",\n                regex: \"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"\n            },\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            {\n                token: \"meta.tag.haml\",\n                regex: /(%[\\w:\\-]+)/\n            },\n            {\n                token: \"keyword.attribute-name.class.haml\",\n                regex: /\\.[\\w-]+/\n            },\n            {\n                token: \"keyword.attribute-name.id.haml\",\n                regex: /#[\\w-]+/,\n                next: \"element_class\"\n            },\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            RubyExports.constantOtherSymbol,\n            {\n                token: \"text\",\n                regex: /=|-|~/,\n                next: \"embedded_ruby\"\n            }\n        ],\n        \"element_class\": [\n            {\n                token: \"keyword.attribute-name.class.haml\",\n                regex: /\\.[\\w-]+/\n            },\n            {\n                token: \"punctuation.section\",\n                regex: /\\{/,\n                next: \"element_attributes\"\n            },\n            RubyExports.constantOtherSymbol,\n            {\n                token: \"empty\",\n                regex: \"$|(?!\\\\.|#|\\\\{|\\\\[|=|-|~|\\\\/])\",\n                next: \"start\"\n            }\n        ],\n        \"element_attributes\": [\n            RubyExports.constantOtherSymbol,\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            {\n                token: \"punctuation.section\",\n                regex: /$|\\}/,\n                next: \"start\"\n            }\n        ],\n        \"embedded_ruby\": [\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            RubyExports.instanceVariable,\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n            {\n                token : new RubyHighlightRules().getKeywords(),\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token : [\"keyword\", \"text\", \"text\"],\n                regex : \"(?:do|\\\\{)(?: \\\\|[^|]+\\\\|)?$\",\n                next  : \"start\"\n            },\n            {\n                token : [\"text\"],\n                regex : \"^$\",\n                next  : \"start\"\n            },\n            {\n                token : [\"text\"],\n                regex : \"^(?!.*\\\\|\\\\s*$)\",\n                next  : \"start\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.block\",\n                regex: /^$/,\n                next: \"start\"\n            },\n            {\n                token: \"comment.block\", // comment spanning the whole line\n                regex: /\\s+.*/\n            }\n        ]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(HamlHighlightRules, HtmlHighlightRules);\n\nexports.HamlHighlightRules = HamlHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/haml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haml_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HamlHighlightRules = require(\"./haml_highlight_rules\").HamlHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HamlHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    \n    this.$id = \"ace/mode/haml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-handlebars.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/handlebars_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nfunction pop2(currentState, stack) {\n    stack.splice(0, 3);\n    return stack.shift() || \"start\";\n}\nvar HandlebarsHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var hbs = {\n        regex : \"(?={{)\",\n        push : \"handlebars\"\n    };\n    for (var key in this.$rules) {\n        this.$rules[key].unshift(hbs);\n    }\n    this.$rules.handlebars = [{\n        token : \"comment.start\",\n        regex : \"{{!--\",\n        push : [{\n            token : \"comment.end\",\n            regex : \"--}}\",\n            next : pop2\n        }, {\n            defaultToken : \"comment\"\n        }]\n    }, {\n        token : \"comment.start\",\n        regex : \"{{!\",\n        push : [{\n            token : \"comment.end\",\n            regex : \"}}\",\n            next : pop2\n        }, {\n            defaultToken : \"comment\"\n        }]\n    }, {\n        token : \"support.function\", // unescaped variable\n        regex : \"{{{\",\n        push : [{\n            token : \"support.function\",\n            regex : \"}}}\",\n            next : pop2\n        }, {\n            token : \"variable.parameter\",\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n        }]\n    }, {\n        token : \"storage.type.start\", // begin section\n        regex : \"{{[#\\\\^/&]?\",\n        push : [{\n            token : \"storage.type.end\",\n            regex : \"}}\",\n            next : pop2\n        }, {\n            token : \"variable.parameter\",\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n        }]\n    }];\n\n    this.normalizeRules();\n};\n\noop.inherits(HandlebarsHighlightRules, HtmlHighlightRules);\n\nexports.HandlebarsHighlightRules = HandlebarsHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour/xml\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\n\nvar HtmlBehaviour = function () {\n\n    XmlBehaviour.call(this);\n\n};\n\noop.inherits(HtmlBehaviour, XmlBehaviour);\n\nexports.HtmlBehaviour = HtmlBehaviour;\n});\n\ndefine(\"ace/mode/handlebars\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/handlebars_highlight_rules\",\"ace/mode/behaviour/html\",\"ace/mode/folding/html\"], function(require, exports, module) {\n  \"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar HandlebarsHighlightRules = require(\"./handlebars_highlight_rules\").HandlebarsHighlightRules;\nvar HtmlBehaviour = require(\"./behaviour/html\").HtmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = HandlebarsHighlightRules;\n    this.$behaviour = new HtmlBehaviour();\n};\n\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.blockComment = {start: \"{{!--\", end: \"--}}\"};\n    this.$id = \"ace/mode/handlebars\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-haskell.js",
    "content": "define(\"ace/mode/haskell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar HaskellHighlightRules = function() {\n\n    this.$rules = { start:\n       [ { token:\n            [ 'punctuation.definition.entity.haskell',\n              'keyword.operator.function.infix.haskell',\n              'punctuation.definition.entity.haskell' ],\n           regex: '(`)([a-zA-Z_\\']*?)(`)',\n           comment: 'In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).' },\n         { token: 'constant.language.unit.haskell', regex: '\\\\(\\\\)' },\n         { token: 'constant.language.empty-list.haskell',\n           regex: '\\\\[\\\\]' },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\b(module|signature)\\\\b',\n           push:\n            [ { token: 'keyword.other.haskell', regex: '\\\\bwhere\\\\b', next: 'pop' },\n              { include: '#module_name' },\n              { include: '#module_exports' },\n              { token: 'invalid', regex: '[a-z]+' },\n              { defaultToken: 'meta.declaration.module.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\bclass\\\\b',\n           push:\n            [ { token: 'keyword.other.haskell',\n                regex: '\\\\bwhere\\\\b',\n                next: 'pop' },\n              { token: 'support.class.prelude.haskell',\n                regex: '\\\\b(?:Monad|Functor|Eq|Ord|Read|Show|Num|(?:Frac|Ra)tional|Enum|Bounded|Real(?:Frac|Float)?|Integral|Floating)\\\\b' },\n              { token: 'entity.other.inherited-class.haskell',\n                regex: '[A-Z][A-Za-z_\\']*' },\n              { token: 'variable.other.generic-type.haskell',\n                regex: '\\\\b[a-z][a-zA-Z0-9_\\']*\\\\b' },\n              { defaultToken: 'meta.declaration.class.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\binstance\\\\b',\n           push:\n            [ { token: 'keyword.other.haskell',\n                regex: '\\\\bwhere\\\\b|$',\n                next: 'pop' },\n              { include: '#type_signature' },\n              { defaultToken: 'meta.declaration.instance.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: 'import',\n           push:\n            [ { token: 'meta.import.haskell', regex: '$|;|^', next: 'pop' },\n              { token: 'keyword.other.haskell', regex: 'qualified|as|hiding' },\n              { include: '#module_name' },\n              { include: '#module_exports' },\n              { defaultToken: 'meta.import.haskell' } ] },\n         { token: [ 'keyword.other.haskell', 'meta.deriving.haskell' ],\n           regex: '(deriving)(\\\\s*\\\\()',\n           push:\n            [ { token: 'meta.deriving.haskell', regex: '\\\\)', next: 'pop' },\n              { token: 'entity.other.inherited-class.haskell',\n                regex: '\\\\b[A-Z][a-zA-Z_\\']*' },\n              { defaultToken: 'meta.deriving.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\b(?:deriving|where|data|type|case|of|let|in|newtype|default)\\\\b' },\n         { token: 'keyword.operator.haskell', regex: '\\\\binfix[lr]?\\\\b' },\n         { token: 'keyword.control.haskell',\n           regex: '\\\\b(?:do|if|then|else)\\\\b' },\n         { token: 'constant.numeric.float.haskell',\n           regex: '\\\\b(?:[0-9]+\\\\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\\\b',\n           comment: 'Floats are always decimal' },\n         { token: 'constant.numeric.haskell',\n           regex: '\\\\b(?:[0-9]+|0(?:[xX][0-9a-fA-F]+|[oO][0-7]+))\\\\b' },\n         { token:\n            [ 'meta.preprocessor.c',\n              'punctuation.definition.preprocessor.c',\n              'meta.preprocessor.c' ],\n           regex: '^(\\\\s*)(#)(\\\\s*\\\\w+)',\n           comment: 'In addition to Haskell\\'s \"native\" syntax, GHC permits the C preprocessor to be run on a source file.' },\n         { include: '#pragma' },\n         { token: 'punctuation.definition.string.begin.haskell',\n           regex: '\"',\n           push:\n            [ { token: 'punctuation.definition.string.end.haskell',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.haskell',\n                regex: '\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\"\\'\\\\&])' },\n              { token: 'constant.character.escape.octal.haskell',\n                regex: '\\\\\\\\o[0-7]+|\\\\\\\\x[0-9A-Fa-f]+|\\\\\\\\[0-9]+' },\n              { token: 'constant.character.escape.control.haskell',\n                regex: '\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]' },\n              { defaultToken: 'string.quoted.double.haskell' } ] },\n         { token:\n            [ 'punctuation.definition.string.begin.haskell',\n              'string.quoted.single.haskell',\n              'constant.character.escape.haskell',\n              'constant.character.escape.octal.haskell',\n              'constant.character.escape.hexadecimal.haskell',\n              'constant.character.escape.control.haskell',\n              'punctuation.definition.string.end.haskell' ],\n           regex: '(\\')(?:([\\\\ -\\\\[\\\\]-~])|(\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\"\\'\\\\&]))|(\\\\\\\\o[0-7]+)|(\\\\\\\\x[0-9A-Fa-f]+)|(\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]))(\\')' },\n         { token:\n            [ 'meta.function.type-declaration.haskell',\n              'entity.name.function.haskell',\n              'meta.function.type-declaration.haskell',\n              'keyword.other.double-colon.haskell' ],\n           regex: '^(\\\\s*)([a-z_][a-zA-Z0-9_\\']*|\\\\([|!%$+\\\\-.,=</>]+\\\\))(\\\\s*)(::)',\n           push:\n            [ { token: 'meta.function.type-declaration.haskell',\n                regex: '$',\n                next: 'pop' },\n              { include: '#type_signature' },\n              { defaultToken: 'meta.function.type-declaration.haskell' } ] },\n         { token: 'support.constant.haskell',\n           regex: '\\\\b(?:Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\\\(\\\\)|\\\\[\\\\])\\\\b' },\n         { token: 'constant.other.haskell', regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n         { include: '#comments' },\n         { token: 'support.function.prelude.haskell',\n           regex: '\\\\b(?:abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\\\b' },\n         { include: '#infix_op' },\n         { token: 'keyword.operator.haskell',\n           regex: '[|!%$?~+:\\\\-.=</>\\\\\\\\]+',\n           comment: 'In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.' },\n         { token: 'punctuation.separator.comma.haskell', regex: ',' } ],\n      '#block_comment':\n       [ { token: 'punctuation.definition.comment.haskell',\n           regex: '\\\\{-(?!#)',\n           push:\n            [ { include: '#block_comment' },\n              { token: 'punctuation.definition.comment.haskell',\n                regex: '-\\\\}',\n                next: 'pop' },\n              { defaultToken: 'comment.block.haskell' } ] } ],\n      '#comments':\n       [ { token: 'punctuation.definition.comment.haskell',\n           regex: '--.*',\n           push_:\n            [ { token: 'comment.line.double-dash.haskell',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-dash.haskell' } ] },\n         { include: '#block_comment' } ],\n      '#infix_op':\n       [ { token: 'entity.name.function.infix.haskell',\n           regex: '\\\\([|!%$+:\\\\-.=</>]+\\\\)|\\\\(,+\\\\)' } ],\n      '#module_exports':\n       [ { token: 'meta.declaration.exports.haskell',\n           regex: '\\\\(',\n           push:\n            [ { token: 'meta.declaration.exports.haskell.end',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: 'entity.name.function.haskell',\n                regex: '\\\\b[a-z][a-zA-Z_\\']*' },\n              { token: 'storage.type.haskell', regex: '\\\\b[A-Z][A-Za-z_\\']*' },\n              { token: 'punctuation.separator.comma.haskell', regex: ',' },\n              { include: '#infix_op' },\n              { token: 'meta.other.unknown.haskell',\n                regex: '\\\\(.*?\\\\)',\n                comment: 'So named because I don\\'t know what to call this.' },\n              { defaultToken: 'meta.declaration.exports.haskell.end' } ] } ],\n      '#module_name':\n       [ { token: 'support.other.module.haskell',\n           regex: '[A-Z][A-Za-z._\\']*' } ],\n      '#pragma':\n       [ { token: 'meta.preprocessor.haskell',\n           regex: '\\\\{-#',\n           push:\n            [ { token: 'meta.preprocessor.haskell',\n                regex: '#-\\\\}',\n                next: 'pop' },\n              { token: 'keyword.other.preprocessor.haskell',\n                regex: '\\\\b(?:LANGUAGE|UNPACK|INLINE)\\\\b' },\n              { defaultToken: 'meta.preprocessor.haskell' } ] } ],\n      '#type_signature':\n       [ { token:\n            [ 'meta.class-constraint.haskell',\n              'entity.other.inherited-class.haskell',\n              'meta.class-constraint.haskell',\n              'variable.other.generic-type.haskell',\n              'meta.class-constraint.haskell',\n              'keyword.other.big-arrow.haskell' ],\n           regex: '(\\\\(\\\\s*)([A-Z][A-Za-z]*)(\\\\s+)([a-z][A-Za-z_\\']*)(\\\\)\\\\s*)(=>)' },\n         { include: '#pragma' },\n         { token: 'keyword.other.arrow.haskell', regex: '->' },\n         { token: 'keyword.other.big-arrow.haskell', regex: '=>' },\n         { token: 'support.type.prelude.haskell',\n           regex: '\\\\b(?:Int(?:eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(?:Error)?)\\\\b' },\n         { token: 'variable.other.generic-type.haskell',\n           regex: '\\\\b[a-z][a-zA-Z0-9_\\']*\\\\b' },\n         { token: 'storage.type.haskell',\n           regex: '\\\\b[A-Z][a-zA-Z0-9_\\']*\\\\b' },\n         { token: 'support.constant.unit.haskell', regex: '\\\\(\\\\)' },\n         { include: '#comments' } ] };\n\n    this.normalizeRules();\n};\n\nHaskellHighlightRules.metaData = { fileTypes: [ 'hs' ],\n      keyEquivalent: '^~H',\n      name: 'Haskell',\n      scopeName: 'source.haskell' };\n\n\noop.inherits(HaskellHighlightRules, TextHighlightRules);\n\nexports.HaskellHighlightRules = HaskellHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/haskell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HaskellHighlightRules = require(\"./haskell_highlight_rules\").HaskellHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HaskellHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/haskell\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-haskell_cabal.js",
    "content": "define(\"ace/mode/haskell_cabal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CabalHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"^\\\\s*--.*$\"\n            }, {\n                token: [\"keyword\"],\n                regex: /^(\\s*\\w.*?)(:(?:\\s+|$))/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[\\d_]+(?:(?:[\\.\\d_]*)?)/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n            }, {\n                token : \"markup.heading\",\n                regex : /^(\\w.*)$/\n            }\n        ]};\n\n};\n\noop.inherits(CabalHighlightRules, TextHighlightRules);\n\nexports.CabalHighlightRules = CabalHighlightRules;\n});\n\ndefine(\"ace/mode/folding/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n  this.isHeading = function (session,row) {\n      var heading = \"markup.heading\";\n      var token = session.getTokens(row)[0];\n      return row==0 || (token && token.type.lastIndexOf(heading, 0) === 0);\n  };\n\n  this.getFoldWidget = function(session, foldStyle, row) {\n      if (this.isHeading(session,row)){\n        return \"start\";\n      } else if (foldStyle === \"markbeginend\" && !(/^\\s*$/.test(session.getLine(row)))){\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n          if (!(/^\\s*$/.test(session.getLine(row)))){\n              break;\n          }\n        }\n        if (row==maxRow || this.isHeading(session,row)){\n          return \"end\";\n        }\n      }\n      return \"\";\n  };\n\n\n  this.getFoldWidgetRange = function(session, foldStyle, row) {\n      var line = session.getLine(row);\n      var startColumn = line.length;\n      var maxRow = session.getLength();\n      var startRow = row;\n      var endRow = row;\n      if (this.isHeading(session,row)) {\n          while (++row < maxRow) {\n              if (this.isHeading(session,row)){\n                row--;\n                break;\n              }\n          }\n\n          endRow = row;\n          if (endRow > startRow) {\n              while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                  endRow--;\n          }\n\n          if (endRow > startRow) {\n              var endColumn = session.getLine(endRow).length;\n              return new Range(startRow, startColumn, endRow, endColumn);\n          }\n      } else if (this.getFoldWidget(session, foldStyle, row)===\"end\"){\n        var endRow = row;\n        var endColumn = session.getLine(endRow).length;\n        while (--row>=0){\n          if (this.isHeading(session,row)){\n            break;\n          }\n        }\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        return new Range(row, startColumn, endRow, endColumn);\n      }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_cabal_highlight_rules\",\"ace/mode/folding/haskell_cabal\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CabalHighlightRules = require(\"./haskell_cabal_highlight_rules\").CabalHighlightRules;\nvar FoldMode = require(\"./folding/haskell_cabal\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CabalHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/haskell_cabal\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-haxe.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/haxe_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar HaxeHighlightRules = function() {\n\n    var keywords = (\n        \"break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std\"\n    );\n\n    var buildinConstants = (\n        \"null|true|false\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({<]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}>]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(HaxeHighlightRules, TextHighlightRules);\n\nexports.HaxeHighlightRules = HaxeHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/haxe\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haxe_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HaxeHighlightRules = require(\"./haxe_highlight_rules\").HaxeHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HaxeHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/haxe\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-hjson.js",
    "content": "define(\"ace/mode/hjson_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar HjsonHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            include: \"#rootObject\"\n        }, {\n            include: \"#value\"\n        }],\n        \"#array\": [{\n            token: \"paren.lparen\",\n            regex: /\\[/,\n            push: [{\n                token: \"paren.rparen\",\n                regex: /\\]/,\n                next: \"pop\"\n            }, {\n                include: \"#value\"\n            }, {\n                include: \"#comments\"\n            }, {\n                token: \"text\",\n                regex: /,|$/\n            }, {\n                token: \"invalid.illegal\",\n                regex: /[^\\s\\]]/\n            }, {\n                defaultToken: \"array\"\n            }]\n        }],\n        \"#comments\": [{\n            token: [\n                \"comment.punctuation\",\n                \"comment.line\"\n            ],\n            regex: /(#)(.*$)/\n        }, {\n            token: \"comment.punctuation\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"comment.punctuation\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block\"\n            }]\n        }, {\n            token: [\n                \"comment.punctuation\",\n                \"comment.line\"\n            ],\n            regex: /(\\/\\/)(.*$)/\n        }],\n        \"#constant\": [{\n            token: \"constant\",\n            regex: /\\b(?:true|false|null)\\b/\n        }],\n        \"#keyname\": [{\n            token: \"keyword\",\n            regex: /(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*(?=:)/\n        }],\n        \"#mstring\": [{\n            token: \"string\",\n            regex: /'''/,\n            push: [{\n                token: \"string\",\n                regex: /'''/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        \"#number\": [{\n            token: \"constant.numeric\",\n            regex: /-?(?:0|[1-9]\\d*)(?:(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)?/,\n            comment: \"handles integer and decimal numbers\"\n        }],\n        \"#object\": [{\n            token: \"paren.lparen\",\n            regex: /\\{/,\n            push: [{\n                token: \"paren.rparen\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                include: \"#keyname\"\n            }, {\n                include: \"#value\"\n            }, {\n                token: \"text\",\n                regex: /:/\n            }, {\n                token: \"text\",\n                regex: /,/\n            }, {\n                defaultToken: \"paren\"\n            }]\n        }],\n        \"#rootObject\": [{\n            token: \"paren\",\n            regex: /(?=\\s*(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*:)/,\n            push: [{\n                token: \"paren.rparen\",\n                regex: /---none---/,\n                next: \"pop\"\n            }, {\n                include: \"#keyname\"\n            }, {\n                include: \"#value\"\n            }, {\n                token: \"text\",\n                regex: /:/\n            }, {\n                token: \"text\",\n                regex: /,/\n            }, {\n                defaultToken: \"paren\"\n            }]\n        }],\n        \"#string\": [{\n            token: \"string\",\n            regex: /\"/,\n            push: [{\n                token: \"string\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/\n            }, {\n                token: \"invalid.illegal\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        \"#ustring\": [{\n            token: \"string\",\n            regex: /\\b[^:,0-9\\-\\{\\[\\}\\]\\s].*$/\n        }],\n        \"#value\": [{\n            include: \"#constant\"\n        }, {\n            include: \"#number\"\n        }, {\n            include: \"#string\"\n        }, {\n            include: \"#array\"\n        }, {\n            include: \"#object\"\n        }, {\n            include: \"#comments\"\n        }, {\n            include: \"#mstring\"\n        }, {\n            include: \"#ustring\"\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nHjsonHighlightRules.metaData = {\n    fileTypes: [\"hjson\"],\n    foldingStartMarker: \"(?x:     # turn on extended mode\\n              ^    # a line beginning with\\n              \\\\s*    # some optional space\\n              [{\\\\[]  # the start of an object or array\\n              (?!    # but not followed by\\n              .*   # whatever\\n              [}\\\\]]  # and the close of an object or array\\n              ,?   # an optional comma\\n              \\\\s*  # some optional space\\n              $    # at the end of the line\\n              )\\n              |    # ...or...\\n              [{\\\\[]  # the start of an object or array\\n              \\\\s*    # some optional space\\n              $    # at the end of the line\\n            )\",\n    foldingStopMarker: \"(?x:   # turn on extended mode\\n             ^    # a line beginning with\\n             \\\\s*  # some optional space\\n             [}\\\\]]  # and the close of an object or array\\n             )\",\n    keyEquivalent: \"^~J\",\n    name: \"Hjson\",\n    scopeName: \"source.hjson\"\n};\n\n\noop.inherits(HjsonHighlightRules, TextHighlightRules);\n\nexports.HjsonHighlightRules = HjsonHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/hjson\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/hjson_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HjsonHighlightRules = require(\"./hjson_highlight_rules\").HjsonHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HjsonHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/hjson\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-html.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-html_elixir.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ElixirHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: \n            [ 'meta.module.elixir',\n              'keyword.control.module.elixir',\n              'meta.module.elixir',\n              'entity.name.type.module.elixir' ],\n           regex: '^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.false',\n           regex: '@(?:module|type)?doc false',\n           comment: '@doc false is treated as documentation' },\n         { token: 'comment.documentation.string',\n           regex: '@(?:module|type)?doc \"',\n           push: \n            [ { token: 'comment.documentation.string',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.string' } ],\n           comment: '@doc with string is treated as documentation' },\n         { token: 'keyword.control.elixir',\n           regex: '\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])' },\n         { token: 'keyword.operator.elixir',\n           regex: '\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           comment: ' as above, just doesn\\'t need a \\'end\\' and does a logic operation' },\n         { token: 'constant.language.elixir',\n           regex: '\\\\b(?:nil|true|false)\\\\b(?![?!])' },\n         { token: 'variable.language.elixir',\n           regex: '\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.readwrite.module.elixir' ],\n           regex: '(@)([a-zA-Z_]\\\\w*)' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.anonymous.elixir' ],\n           regex: '(&)(\\\\d*)' },\n         { token: 'variable.other.constant.elixir',\n           regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\\'',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.single-quoted.elixir' } ] },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\"',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.double-quoted.elixir' } ] },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\\'\\'\\')',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\\'\\'\\')',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' } ],\n           comment: 'Single-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.elixir' } ],\n           comment: 'single quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.elixir' } ],\n           comment: 'double quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[a-z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[A-Z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'],\n           regex: '(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)',\n           comment: 'symbols' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: '(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)',\n           comment: 'symbols' },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(#)(.*)' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           comment: '\\n\\t\\t\\tmatches questionmark-letters.\\n\\n\\t\\t\\texamples (1st alternation = hex):\\n\\t\\t\\t?\\\\x1     ?\\\\x61\\n\\n\\t\\t\\texamples (2rd alternation = escaped):\\n\\t\\t\\t?\\\\n      ?\\\\b\\n\\n\\t\\t\\texamples (3rd alternation = normal):\\n\\t\\t\\t?a       ?A       ?0 \\n\\t\\t\\t?*       ?\"       ?( \\n\\t\\t\\t?.       ?#\\n\\t\\t\\t\\n\\t\\t\\tthe negative lookbehind prevents against matching\\n\\t\\t\\tp(42.tainted?)\\n\\t\\t\\t' },\n         { token: 'keyword.operator.assignment.augmented.elixir',\n           regex: '\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=' },\n         { token: 'keyword.operator.comparison.elixir',\n           regex: '===?|!==?|<=?|>=?' },\n         { token: 'keyword.operator.bitwise.elixir',\n           regex: '\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}' },\n         { token: 'keyword.operator.logical.elixir',\n           regex: '!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b',\n           originalRegex: '(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b' },\n         { token: 'keyword.operator.arithmetic.elixir',\n           regex: '\\\\*|\\\\+|\\\\-|/' },\n         { token: 'keyword.operator.other.elixir',\n           regex: '\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>' },\n         { token: 'keyword.operator.assignment.elixir', regex: '=' },\n         { token: 'punctuation.separator.other.elixir', regex: ':' },\n         { token: 'punctuation.separator.statement.elixir',\n           regex: '\\\\;' },\n         { token: 'punctuation.separator.object.elixir', regex: ',' },\n         { token: 'punctuation.separator.method.elixir', regex: '\\\\.' },\n         { token: 'punctuation.section.scope.elixir', regex: '\\\\{|\\\\}' },\n         { token: 'punctuation.section.array.elixir', regex: '\\\\[|\\\\]' },\n         { token: 'punctuation.section.function.elixir',\n           regex: '\\\\(|\\\\)' } ],\n      '#escaped_char': \n       [ { token: 'constant.character.escape.elixir',\n           regex: '\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)' } ],\n      '#interpolated_elixir': \n       [ { token: \n            [ 'source.elixir.embedded.source',\n              'source.elixir.embedded.source.empty' ],\n           regex: '(#\\\\{)(\\\\})' },\n         { todo: \n            { token: 'punctuation.section.embedded.elixir',\n              regex: '#\\\\{',\n              push: \n               [ { token: 'punctuation.section.embedded.elixir',\n                   regex: '\\\\}',\n                   next: 'pop' },\n                 { include: '#nest_curly_and_self' },\n                 { include: '$self' },\n                 { defaultToken: 'source.elixir.embedded.source' } ] } } ],\n      '#nest_curly_and_self': \n       [ { token: 'punctuation.section.scope.elixir',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.section.scope.elixir',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#nest_curly_and_self' } ] },\n         { include: '$self' } ],\n      '#regex_sub': \n       [ { include: '#interpolated_elixir' },\n         { include: '#escaped_char' },\n         { token: \n            [ 'punctuation.definition.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'punctuation.definition.arbitrary-repitition.elixir' ],\n           regex: '(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})' },\n         { token: 'punctuation.definition.character-class.elixir',\n           regex: '\\\\[(?:\\\\^?\\\\])?',\n           push: \n            [ { token: 'punctuation.definition.character-class.elixir',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.regexp.character-class.elixir' } ] },\n         { token: 'punctuation.definition.group.elixir',\n           regex: '\\\\(',\n           push: \n            [ { token: 'punctuation.definition.group.elixir',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#regex_sub' },\n              { defaultToken: 'string.regexp.group.elixir' } ] },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)',\n           originalRegex: '(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$',\n           comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' } ] };\n    \n    this.normalizeRules();\n};\n\nElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.',\n      fileTypes: [ 'ex', 'exs' ],\n      firstLineMatch: '^#!/.*\\\\belixir',\n      foldingStartMarker: '(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$',\n      foldingStopMarker: '^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)',\n      keyEquivalent: '^~E',\n      name: 'Elixir',\n      scopeName: 'source.elixir' };\n\n\noop.inherits(ElixirHighlightRules, TextHighlightRules);\n\nexports.ElixirHighlightRules = ElixirHighlightRules;\n});\n\ndefine(\"ace/mode/html_elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/elixir_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n    var ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\n\n    var HtmlElixirHighlightRules = function() {\n        HtmlHighlightRules.call(this);\n\n        var startRules = [\n            {\n                regex: \"<%%|%%>\",\n                token: \"constant.language.escape\"\n            }, {\n                token : \"comment.start.eex\",\n                regex : \"<%#\",\n                push  : [{\n                    token : \"comment.end.eex\",\n                    regex: \"%>\",\n                    next: \"pop\",\n                    defaultToken:\"comment\"\n                }]\n            }, {\n                token : \"support.elixir_tag\",\n                regex : \"<%+(?!>)[-=]?\",\n                push  : \"elixir-start\"\n            }\n        ];\n\n        var endRules = [\n            {\n                token : \"support.elixir_tag\",\n                regex : \"%>\",\n                next  : \"pop\"\n            }, {\n                token: \"comment\",\n                regex: \"#(?:[^%]|%[^>])*\"\n            }\n        ];\n\n        for (var key in this.$rules)\n            this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n        this.embedRules(ElixirHighlightRules, \"elixir-\", endRules, [\"start\"]);\n\n        this.normalizeRules();\n    };\n\n\n    oop.inherits(HtmlElixirHighlightRules, HtmlHighlightRules);\n\n    exports.HtmlElixirHighlightRules = HtmlElixirHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ElixirHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/elixir\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/html_elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_elixir_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/elixir\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlElixirHighlightRules = require(\"./html_elixir_highlight_rules\").HtmlElixirHighlightRules;\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar ElixirMode = require(\"./elixir\").Mode;\n\nvar Mode = function() {\n    HtmlMode.call(this);   \n    this.HighlightRules = HtmlElixirHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"elixir-\": ElixirMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.$id = \"ace/mode/html_elixir\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-html_ruby.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\ndefine(\"ace/mode/html_ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n    var RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\n\n    var HtmlRubyHighlightRules = function() {\n        HtmlHighlightRules.call(this);\n\n        var startRules = [\n            {\n                regex: \"<%%|%%>\",\n                token: \"constant.language.escape\"\n            }, {\n                token : \"comment.start.erb\",\n                regex : \"<%#\",\n                push  : [{\n                    token : \"comment.end.erb\",\n                    regex: \"%>\",\n                    next: \"pop\",\n                    defaultToken:\"comment\"\n                }]\n            }, {\n                token : \"support.ruby_tag\",\n                regex : \"<%+(?!>)[-=]?\",\n                push  : \"ruby-start\"\n            }\n        ];\n\n        var endRules = [\n            {\n                token : \"support.ruby_tag\",\n                regex : \"%>\",\n                next  : \"pop\"\n            }, {\n                token: \"comment\",\n                regex: \"#(?:[^%]|%[^>])*\"\n            }\n        ];\n\n        for (var key in this.$rules)\n            this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n        this.embedRules(RubyHighlightRules, \"ruby-\", endRules, [\"start\"]);\n\n        this.normalizeRules();\n    };\n\n\n    oop.inherits(HtmlRubyHighlightRules, HtmlHighlightRules);\n\n    exports.HtmlRubyHighlightRules = HtmlRubyHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length-tab.length, row, indent.length));\n        }\n    };\n\n    this.$id = \"ace/mode/ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/html_ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_ruby_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlRubyHighlightRules = require(\"./html_ruby_highlight_rules\").HtmlRubyHighlightRules;\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar RubyMode = require(\"./ruby\").Mode;\n\nvar Mode = function() {\n    HtmlMode.call(this);   \n    this.HighlightRules = HtmlRubyHighlightRules;    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"ruby-\": RubyMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.$id = \"ace/mode/html_ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-ini.js",
    "content": "define(\"ace/mode/ini_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar escapeRe = \"\\\\\\\\(?:[\\\\\\\\0abtrn;#=:]|x[a-fA-F\\\\d]{4})\";\n\nvar IniHighlightRules = function() {\n    this.$rules = {\n        start: [{\n            token: 'punctuation.definition.comment.ini',\n            regex: '#.*',\n            push_: [{\n                token: 'comment.line.number-sign.ini',\n                regex: '$|^',\n                next: 'pop'\n            }, {\n                defaultToken: 'comment.line.number-sign.ini'\n            }]\n        }, {\n            token: 'punctuation.definition.comment.ini',\n            regex: ';.*',\n            push_: [{\n                token: 'comment.line.semicolon.ini',\n                regex: '$|^',\n                next: 'pop'\n            }, {\n                defaultToken: 'comment.line.semicolon.ini'\n            }]\n        }, {\n            token: ['keyword.other.definition.ini', 'text', 'punctuation.separator.key-value.ini'],\n            regex: '\\\\b([a-zA-Z0-9_.-]+)\\\\b(\\\\s*)(=)'\n        }, {\n            token: ['punctuation.definition.entity.ini', 'constant.section.group-title.ini', 'punctuation.definition.entity.ini'],\n            regex: '^(\\\\[)(.*?)(\\\\])'\n        }, {\n            token: 'punctuation.definition.string.begin.ini',\n            regex: \"'\",\n            push: [{\n                token: 'punctuation.definition.string.end.ini',\n                regex: \"'\",\n                next: 'pop'\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapeRe\n            }, {\n                defaultToken: 'string.quoted.single.ini'\n            }]\n        }, {\n            token: 'punctuation.definition.string.begin.ini',\n            regex: '\"',\n            push: [{\n                token: \"constant.language.escape\",\n                regex: escapeRe\n            }, {\n                token: 'punctuation.definition.string.end.ini',\n                regex: '\"',\n                next: 'pop'\n            }, {\n                defaultToken: 'string.quoted.double.ini'\n            }]\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nIniHighlightRules.metaData = {\n    fileTypes: ['ini', 'conf'],\n    keyEquivalent: '^~I',\n    name: 'Ini',\n    scopeName: 'source.ini'\n};\n\n\noop.inherits(IniHighlightRules, TextHighlightRules);\n\nexports.IniHighlightRules = IniHighlightRules;\n});\n\ndefine(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var re = this.foldingStartMarker;\n        var line = session.getLine(row);\n        \n        var m = line.match(re);\n        \n        if (!m) return;\n        \n        var startName = m[1] + \".\";\n        \n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            m = line.match(re);\n            if (m && m[1].lastIndexOf(startName, 0) !== 0)\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ini_highlight_rules\",\"ace/mode/folding/ini\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar IniHighlightRules = require(\"./ini_highlight_rules\").IniHighlightRules;\nvar FoldMode = require(\"./folding/ini\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = IniHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \";\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/ini\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-io.js",
    "content": "define(\"ace/mode/io_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar IoHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: [ 'text', 'meta.empty-parenthesis.io' ],\n           regex: '(\\\\()(\\\\))',\n           comment: 'we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob' },\n         { token: [ 'text', 'meta.comma-parenthesis.io' ],\n           regex: '(\\\\,)(\\\\))',\n           comment: 'We want to do the same for ,) -- Seckar; same as above -- Rob' },\n         { token: 'keyword.control.io',\n           regex: '\\\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\\\b' },\n         { token: 'punctuation.definition.comment.io',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.io',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.io' } ] },\n         { token: 'punctuation.definition.comment.io',\n           regex: '//',\n           push: \n            [ { token: 'comment.line.double-slash.io',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-slash.io' } ] },\n         { token: 'punctuation.definition.comment.io',\n           regex: '#',\n           push: \n            [ { token: 'comment.line.number-sign.io', regex: '$', next: 'pop' },\n              { defaultToken: 'comment.line.number-sign.io' } ] },\n         { token: 'variable.language.io',\n           regex: '\\\\b(?:self|sender|target|proto|protos|parent)\\\\b',\n           comment: 'I wonder if some of this isn\\'t variable.other.language? --Allan; scoping this as variable.language to match Objective-C\\'s handling of \\'self\\', which is inconsistent with C++\\'s handling of \\'this\\' but perhaps intentionally so -- Rob' },\n         { token: 'keyword.operator.io',\n           regex: '<=|>=|=|:=|\\\\*|\\\\||\\\\|\\\\||\\\\+|-|/|&|&&|>|<|\\\\?|@|@@|\\\\b(?:and|or)\\\\b' },\n         { token: 'constant.other.io', regex: '\\\\bGL[\\\\w_]+\\\\b' },\n         { token: 'support.class.io', regex: '\\\\b[A-Z](?:\\\\w+)?\\\\b' },\n         { token: 'support.function.io',\n           regex: '\\\\b(?:clone|call|init|method|list|vector|block|\\\\w+(?=\\\\s*\\\\())\\\\b' },\n         { token: 'support.function.open-gl.io',\n           regex: '\\\\bgl(?:u|ut)?[A-Z]\\\\w+\\\\b' },\n         { token: 'punctuation.definition.string.begin.io',\n           regex: '\"\"\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.io',\n                regex: '\"\"\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.io', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.triple.io' } ] },\n         { token: 'punctuation.definition.string.begin.io',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.io',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.io', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.double.io' } ] },\n         { token: 'constant.numeric.io',\n           regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b' },\n         { token: 'variable.other.global.io', regex: 'Lobby\\\\b' },\n         { token: 'constant.language.io',\n           regex: '\\\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\\\b' } ] };\n    \n    this.normalizeRules();\n};\n\nIoHighlightRules.metaData = { fileTypes: [ 'io' ],\n      keyEquivalent: '^~I',\n      name: 'Io',\n      scopeName: 'source.io' };\n\n\noop.inherits(IoHighlightRules, TextHighlightRules);\n\nexports.IoHighlightRules = IoHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/io\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/io_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar IoHighlightRules = require(\"./io_highlight_rules\").IoHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = IoHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/io\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-jack.js",
    "content": "define(\"ace/mode/jack_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JackHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"string\",\n                regex : '\"',\n                next  : \"string2\"\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next  : \"string1\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex: \"-?0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"(?:0|[-+]?[1-9][0-9]*)\\\\b\"\n            }, {\n                token : \"constant.binary\",\n                regex : \"<[0-9A-Fa-f][0-9A-Fa-f](\\\\s+[0-9A-Fa-f][0-9A-Fa-f])*>\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"constant.language.null\",\n                regex : \"null\\\\b\"\n            }, {\n                token : \"storage.type\",\n                regex: \"(?:Integer|Boolean|Null|String|Buffer|Tuple|List|Object|Function|Coroutine|Form)\\\\b\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:return|abort|vars|for|delete|in|is|escape|exec|split|and|if|elif|else|while)\\\\b\"\n            }, {\n                token : \"language.builtin\",\n                regex : \"(?:lines|source|parse|read-stream|interval|substr|parseint|write|print|range|rand|inspect|bind|i-values|i-pairs|i-map|i-filter|i-chunk|i-all\\\\?|i-any\\\\?|i-collect|i-zip|i-merge|i-each)\\\\b\"\n            }, {\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"storage.form\",\n                regex : \"@[a-z]+\"\n            }, {\n                token : \"constant.other.symbol\",\n                regex : ':+[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?'\n            }, {\n                token : \"variable\",\n                regex : '[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?'\n            }, {\n                token : \"keyword.operator\",\n                regex : \"\\\\|\\\\||\\\\^\\\\^|&&|!=|==|<=|<|>=|>|\\\\+|-|\\\\*|\\\\/|\\\\^|\\\\%|\\\\#|\\\\!\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string1\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : \"[^'\\\\\\\\]+\"\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next  : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\",\n                next  : \"start\"\n            }\n        ],\n        \"string2\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+'\n            }, {\n                token : \"string\",\n                regex : '\"',\n                next  : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\",\n                next  : \"start\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JackHighlightRules, TextHighlightRules);\n\nexports.JackHighlightRules = JackHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/jack\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jack_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./jack_highlight_rules\").JackHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.$id = \"ace/mode/jack\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-jade.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token : \"support.function\",\n        regex : /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function(value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next  : \"githubblock\"\n    };\n    var codeBlockRules = [{\n        token : \"support.function\",\n        regex : \".*\",\n        onMatch: function(value, state, stack, line) {\n            var embedState = stack[1];\n            var indent = stack[2][0];\n            var endMarker = stack[2][1];\n            var language = stack[2][2];\n            \n            var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n            if (\n                m && m[1].length < indent.length + 3\n                && m[2].length >= endMarker.length && m[2][0] == endMarker[0]\n            ) {\n                stack.splice(0, 3);\n                this.next = stack.shift();\n                return this.token;\n            }\n            this.next = \"\";\n            if (language && modes[language]) {\n                var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                stack[1] = data.state;\n                return data.tokens;\n            }\n            return this.token;\n        }\n    }];\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s|$)/,\n        next : \"header\"\n    },\n    codeBlockStartRule,\n    { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\!?\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text or alt text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href or image\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        },\n        codeBlockStartRule,\n        {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : codeBlockRules\n    });\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n\ndefine(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    );\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\ndefine(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\n\nvar LessHighlightRules = function() {\n\n\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" + \n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n\n    var keywords = keywordList.split('|');\n\n    var properties = CssHighlightRules.supportType.split('|');\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);   \n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : [\"constant.numeric\", \"keyword\"],\n                regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex : \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token : [\"support.function\", \"paren.lparen\"],\n                regex : \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token : function(value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex : \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token : \"variable\",\n                regex : \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token : function(first, second) {\n                    if(properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex : \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token : \"keyword\",\n                regex : \"&\"   // special case - always treat as keyword\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(LessHighlightRules, TextHighlightRules);\n\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\ndefine(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    oop.inherits(CoffeeHighlightRules, TextHighlightRules);\n\n    function CoffeeHighlightRules() {\n        var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n\n        var keywords = (\n            \"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n            \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n            \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n            \"or|on|unless|until|and|yes|yield|export|import|default\"\n        );\n\n        var langConstant = (\n            \"true|false|null|undefined|NaN|Infinity\"\n        );\n\n        var illegal = (\n            \"case|const|function|var|void|with|enum|implements|\" +\n            \"interface|let|package|private|protected|public|static\"\n        );\n\n        var supportClass = (\n            \"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n            \"SyntaxError|TypeError|URIError|\"  +\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\"\n        );\n\n        var supportFunction = (\n            \"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n            \"encodeURIComponent|decodeURI|decodeURIComponent|String|\"\n        );\n\n        var variableLanguage = (\n            \"window|arguments|prototype|document\"\n        );\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": langConstant,\n            \"invalid.illegal\": illegal,\n            \"language.support.class\": supportClass,\n            \"language.support.function\": supportFunction,\n            \"variable.language\": variableLanguage\n        }, \"identifier\");\n\n        var functionRule = {\n            token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n            regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n        };\n\n        var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n\n        this.$rules = {\n            start : [\n                {\n                    token : \"constant.numeric\",\n                    regex : \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n                }, {\n                    stateName: \"qdoc\",\n                    token : \"string\", regex : \"'''\", next : [\n                        {token : \"string\", regex : \"'''\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqdoc\",\n                    token : \"string\",\n                    regex : '\"\"\"',\n                    next : [\n                        {token : \"string\", regex : '\"\"\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qstring\",\n                    token : \"string\", regex : \"'\", next : [\n                        {token : \"string\", regex : \"'\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqstring\",\n                    token : \"string.start\", regex : '\"', next : [\n                        {token : \"string.end\", regex : '\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"js\",\n                    token : \"string\", regex : \"`\", next : [\n                        {token : \"string\", regex : \"`\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    regex: \"[{}]\", onMatch: function(val, state, stack) {\n                        this.next = \"\";\n                        if (val == \"{\" && stack.length) {\n                            stack.unshift(\"start\", state);\n                            return \"paren\";\n                        }\n                        if (val == \"}\" && stack.length) {\n                            stack.shift();\n                            this.next = stack.shift() || \"\";\n                            if (this.next.indexOf(\"string\") != -1)\n                                return \"paren.string\";\n                        }\n                        return \"paren\";\n                    }\n                }, {\n                    token : \"string.regex\",\n                    regex : \"///\",\n                    next : \"heregex\"\n                }, {\n                    token : \"string.regex\",\n                    regex : /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n                }, {\n                    token : \"comment\",\n                    regex : \"###(?!#)\",\n                    next : \"comment\"\n                }, {\n                    token : \"comment\",\n                    regex : \"#.*\"\n                }, {\n                    token : [\"punctuation.operator\", \"text\", \"identifier\"],\n                    regex : \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\.{1,3}\"\n                }, {\n                    token : [\"keyword\", \"text\", \"language.support.class\",\n                     \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                    regex : \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n                }, {\n                    token : [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                    regex : \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n                }, \n                functionRule, \n                {\n                    token : \"variable\",\n                    regex : \"@(?:\" + identifier + \")?\"\n                }, {\n                    token: keywordMapper,\n                    regex : identifier\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\,|\\\\.\"\n                }, {\n                    token : \"storage.type\",\n                    regex : \"[\\\\-=]>\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[({[]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\]})]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }],\n\n\n            heregex : [{\n                token : \"string.regex\",\n                regex : '.*?///[imgy]{0,4}',\n                next : \"start\"\n            }, {\n                token : \"comment.regex\",\n                regex : \"\\\\s+(?:#.*)?\"\n            }, {\n                token : \"string.regex\",\n                regex : \"\\\\S+\"\n            }],\n\n            comment : [{\n                token : \"comment\",\n                regex : '###',\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        };\n        this.normalizeRules();\n    }\n\n    exports.CoffeeHighlightRules = CoffeeHighlightRules;\n});\n\ndefine(\"ace/mode/jade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/scss_highlight_rules\",\"ace/mode/less_highlight_rules\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/javascript_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar SassHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar CoffeeHighlightRules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nfunction mixin_embed(tag, prefix) {\n    return { \n        token : \"entity.name.function.jade\",\n        regex : \"^\\\\s*\\\\:\" + tag,\n        next  : prefix + \"start\"\n    };\n}\n\nvar JadeHighlightRules = function() {\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-6][0-7]?|\" + // oct\n        \"37[0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token: \"keyword.control.import.include.jade\",\n            regex: \"\\\\s*\\\\binclude\\\\b\"\n        },\n        {\n            token: \"keyword.other.doctype.jade\",\n            regex: \"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"\n        },\n        {\n            onMatch: function(value, currentState, stack) {\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\//,\n            next: \"comment_block\"\n        },\n        mixin_embed(\"markdown\", \"markdown-\"),\n        mixin_embed(\"sass\", \"sass-\"),\n        mixin_embed(\"less\", \"less-\"),\n        mixin_embed(\"coffee\", \"coffee-\"),\n        {\n            token: [ \"storage.type.function.jade\",\n                       \"entity.name.function.jade\",\n                       \"punctuation.definition.parameters.begin.jade\",\n                       \"variable.parameter.function.jade\",\n                       \"punctuation.definition.parameters.end.jade\"\n                    ],\n            regex: \"^(\\\\s*mixin)( [\\\\w\\\\-]+)(\\\\s*\\\\()(.*?)(\\\\))\"\n        },\n        {\n            token: [ \"storage.type.function.jade\", \"entity.name.function.jade\"],\n            regex: \"^(\\\\s*mixin)( [\\\\w\\\\-]+)\"\n        },\n        {\n            token: \"source.js.embedded.jade\",\n            regex: \"^\\\\s*(?:-|=|!=)\",\n            next: \"js-start\"\n        },\n        {\n            token: \"string.interpolated.jade\",\n            regex: \"[#!]\\\\{[^\\\\}]+\\\\}\"\n        },\n        {\n            token: \"meta.tag.any.jade\",\n            regex: /^\\s*(?!\\w+:)(?:[\\w-]+|(?=\\.|#)])/,\n            next: \"tag_single\"\n        },\n        {\n            token: \"suport.type.attribute.id.jade\",\n            regex: \"#\\\\w+\"\n        },\n        {\n            token: \"suport.type.attribute.class.jade\",\n            regex: \"\\\\.\\\\w+\"\n        },\n        {\n            token: \"punctuation\",\n            regex: \"\\\\s*(?:\\\\()\",\n            next: \"tag_attributes\"\n        }\n    ],\n    \"comment_block\": [\n        {regex: /^\\s*(?:\\/\\/)?/, onMatch: function(value, currentState, stack) {\n            if (value.length <= stack[1]) {\n                if (value.slice(-1) == \"/\") {\n                    stack[1] = value.length - 2;\n                    this.next = \"\";\n                    return \"comment\";\n                }\n                stack.shift();\n                stack.shift();\n                this.next = stack.shift();\n                return \"text\";\n            } else {\n                this.next = \"\";\n                return \"comment\";\n            }\n        }, next: \"start\"},\n        {defaultToken: \"comment\"}\n    ],\n    \"tag_single\": [\n        {\n            token: \"entity.other.attribute-name.class.jade\",\n            regex: \"\\\\.[\\\\w-]+\"\n        },\n        {\n            token: \"entity.other.attribute-name.id.jade\",\n            regex: \"#[\\\\w-]+\"\n        },\n        {\n            token: [\"text\", \"punctuation\"],\n            regex: \"($)|((?!\\\\.|#|=|-))\",\n            next: \"start\"\n        }\n    ],\n    \"tag_attributes\": [ \n        {\n            token : \"string\",\n            regex : \"'(?=.)\",\n            next  : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        },\n        {\n            token: [\"entity.other.attribute-name.jade\", \"punctuation\"],\n            regex: \"([a-zA-Z:\\\\.-]+)(=)?\",\n            next: \"attribute_strings\"\n        },\n        {\n            token: \"punctuation\",\n            regex: \"\\\\)\",\n            next: \"start\"\n        }\n    ],\n    \"attribute_strings\": [\n        {\n            token : \"string\",\n            regex : \"'(?=.)\",\n            next  : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        },\n        {\n            token : \"string\",\n            regex : '(?=\\\\S)',\n            next  : \"tag_attributes\"\n        }\n    ],\n    \"qqstring\" : [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        }, {\n            token : \"string\",\n            regex : '[^\"\\\\\\\\]+'\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"tag_attributes\"\n        }\n    ],\n    \"qstring\" : [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        }, {\n            token : \"string\",\n            regex : \"[^'\\\\\\\\]+\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"tag_attributes\"\n        }\n    ]\n};\n\n    this.embedRules(JavaScriptHighlightRules, \"js-\", [{\n        token: \"text\",\n        regex: \".$\",\n        next: \"start\"\n    }]);\n};\n\noop.inherits(JadeHighlightRules, TextHighlightRules);\n\nexports.JadeHighlightRules = JadeHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/jade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jade_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JadeHighlightRules = require(\"./jade_highlight_rules\").JadeHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JadeHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() { \n\tthis.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/jade\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-java.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JavaHighlightRules = function() {\n    var keywords = (\n    \"abstract|continue|for|new|switch|\" +\n    \"assert|default|goto|package|synchronized|\" +\n    \"boolean|do|if|private|this|\" +\n    \"break|double|implements|protected|throw|\" +\n    \"byte|else|import|public|throws|\" +\n    \"case|enum|instanceof|return|transient|\" +\n    \"catch|extends|int|short|try|\" +\n    \"char|final|interface|static|void|\" +\n    \"class|finally|long|strictfp|volatile|\" +\n    \"const|float|native|super|while|\" +\n    \"var\"\n    );\n\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                regex: \"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",\n                token: \"keyword\",\n                next: [{\n                    regex: \"{\",\n                    token: \"paren.lparen\",\n                    next: [{\n                        regex: \"}\",\n                        token: \"paren.rparen\",\n                        next: \"start\"\n                    }, {\n                        regex: \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n                        token: \"keyword\" \n                    }]\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    token : \"identifier\",\n                    regex : \"\\\\w+\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \".\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    regex: \"\", // exit if there is anything else\n                    next: \"start\"\n                }]\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(JavaHighlightRules, TextHighlightRules);\n\nexports.JavaHighlightRules = JavaHighlightRules;\n});\n\ndefine(\"ace/mode/folding/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, CStyleFoldMode);\n\n(function() {\n    this.importRegex = /^import /;\n    this.getCStyleFoldWidget = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        if (foldStyle === \"markbegin\") {\n            var line = session.getLine(row);\n            if (this.importRegex.test(line)) {\n                if (row == 0 || !this.importRegex.test(session.getLine(row - 1)))\n                    return \"start\";\n            }\n        }\n\n        return this.getCStyleFoldWidget(session, foldStyle, row);\n    };\n    \n    this.getCstyleFoldWidgetRange = this.getFoldWidgetRange;\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        var match = line.match(this.importRegex);\n        if (!match || foldStyle !== \"markbegin\")\n            return this.getCstyleFoldWidgetRange(session, foldStyle, row, forceMultiline);\n\n        var startColumn = match[0].length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            var line = session.getLine(row);\n            if (line.match(/^\\s*$/))\n                continue;\n\n            if (!line.match(this.importRegex))\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/java_highlight_rules\",\"ace/mode/folding/java\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\nvar JavaFoldMode = require(\"./folding/java\").FoldMode;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = JavaHighlightRules;\n    this.foldingRules = new JavaFoldMode();\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/java\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-javascript.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-json.js",
    "content": "define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"variable\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next  : \"string\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"text\", // single quoted strings are not allowed\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"comment\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.start\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\*\",\n                next  : \"comment\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\", // comments are not allowed, but who cares?\n                regex : \"\\\\*\\\\/\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n\n    this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-jsoniq.js",
    "content": "define(\"ace/mode/xquery/jsoniq_lexer\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var JSONiqTokenizer = exports.JSONiqTokenizer = function JSONiqTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 59:                        // '<?'\n      shift(59);                    // '<?'\n      break;\n    case 43:                        // '(#'\n      shift(43);                    // '(#'\n      break;\n    case 45:                        // '(:~'\n      shift(45);                    // '(:~'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    case 277:                       // '}'\n      shift(277);                   // '}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 42:                        // '('\n      shift(42);                    // '('\n      break;\n    case 46:                        // ')'\n      shift(46);                    // ')'\n      break;\n    case 52:                        // '/'\n      shift(52);                    // '/'\n      break;\n    case 65:                        // '['\n      shift(65);                    // '['\n      break;\n    case 66:                        // ']'\n      shift(66);                    // ']'\n      break;\n    case 49:                        // ','\n      shift(49);                    // ','\n      break;\n    case 51:                        // '.'\n      shift(51);                    // '.'\n      break;\n    case 56:                        // ';'\n      shift(56);                    // ';'\n      break;\n    case 54:                        // ':'\n      shift(54);                    // ':'\n      break;\n    case 36:                        // '!'\n      shift(36);                    // '!'\n      break;\n    case 276:                       // '|'\n      shift(276);                   // '|'\n      break;\n    case 40:                        // '$$'\n      shift(40);                    // '$$'\n      break;\n    case 5:                         // Annotation\n      shift(5);                     // Annotation\n      break;\n    case 4:                         // ModuleDecl\n      shift(4);                     // ModuleDecl\n      break;\n    case 6:                         // OptionDecl\n      shift(6);                     // OptionDecl\n      break;\n    case 15:                        // AttrTest\n      shift(15);                    // AttrTest\n      break;\n    case 16:                        // Wildcard\n      shift(16);                    // Wildcard\n      break;\n    case 18:                        // IntegerLiteral\n      shift(18);                    // IntegerLiteral\n      break;\n    case 19:                        // DecimalLiteral\n      shift(19);                    // DecimalLiteral\n      break;\n    case 20:                        // DoubleLiteral\n      shift(20);                    // DoubleLiteral\n      break;\n    case 8:                         // Variable\n      shift(8);                     // Variable\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 7:                         // Operator\n      shift(7);                     // Operator\n      break;\n    case 35:                        // EOF\n      shift(35);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    case 53:                        // '/>'\n      shift(53);                    // '/>'\n      break;\n    case 29:                        // QName\n      shift(29);                    // QName\n      break;\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 25:                        // ElementContentChar\n      shift(25);                    // ElementContentChar\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 10:                        // EndTag\n      shift(10);                    // EndTag\n      break;\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 27:                        // AposAttrContentChar\n      shift(27);                    // AposAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 22:                        // EscapeQuot\n      shift(22);                    // EscapeQuot\n      break;\n    case 26:                        // QuotAttrContentChar\n      shift(26);                    // QuotAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 14:                        // CDataSectionContents\n      shift(14);                    // CDataSectionContents\n      break;\n    case 67:                        // ']]>'\n      shift(67);                    // ']]>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 12:                        // DirCommentContents\n      shift(12);                    // DirCommentContents\n      break;\n    case 50:                        // '-->'\n      shift(50);                    // '-->'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 13:                        // DirPIContents\n      shift(13);                    // DirPIContents\n      break;\n    case 62:                        // '?'\n      shift(62);                    // '?'\n      break;\n    case 63:                        // '?>'\n      shift(63);                    // '?>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 11:                        // PragmaContents\n      shift(11);                    // PragmaContents\n      break;\n    case 38:                        // '#'\n      shift(38);                    // '#'\n      break;\n    case 39:                        // '#)'\n      shift(39);                    // '#)'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 32:                        // CommentContents\n      shift(32);                    // CommentContents\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(6);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 33:                        // DocTag\n      shift(33);                    // DocTag\n      break;\n    case 34:                        // DocCommentContents\n      shift(34);                    // DocCommentContents\n      break;\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(5);                  // JSONChar | JSONCharRef | JSONPredefinedCharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 3:                         // JSONPredefinedCharRef\n      shift(3);                     // JSONPredefinedCharRef\n      break;\n    case 2:                         // JSONCharRef\n      shift(2);                     // JSONCharRef\n      break;\n    case 1:                         // JSONChar\n      shift(1);                     // JSONChar\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 24:                        // AposChar\n      shift(24);                    // AposChar\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 17:                        // EQName^Token\n      shift(17);                    // EQName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 28:                        // NCName^Token\n      shift(28);                    // NCName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 30)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqTokenizer.MAP1[(c0 & 15) + JSONiqTokenizer.MAP1[(c1 & 31) + JSONiqTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = JSONiqTokenizer.TRANSITION[(i0 & 15) + JSONiqTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 279; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2066 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqTokenizer.EXPECTED[(i0 & 3) + JSONiqTokenizer.EXPECTED[(i1 & 3) + JSONiqTokenizer.EXPECTED[(i2 & 3) + JSONiqTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqTokenizer.MAP0 =\n[ 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37\n];\n\nJSONiqTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 31, 31, 37, 37, 37, 37, 37, 37, 37, 66, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66\n];\n\nJSONiqTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 37, 31, 37, 31, 31, 37\n];\n\nJSONiqTokenizer.INITIAL =\n[ 1, 2, 49155, 57348, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nJSONiqTokenizer.TRANSITION =\n[ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 17408, 19288, 17439, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19074, 36169, 17439, 36866, 17466, 36890, 36866, 22314, 19105, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22182, 19288, 19121, 36866, 17466, 18345, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19273, 19552, 19304, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19332, 17423, 19363, 36866, 17466, 17537, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 18614, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19391, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19427, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36154, 19288, 19457, 36866, 17466, 17740, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22780, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22375, 22197, 18469, 36866, 17466, 36890, 36866, 21991, 24018, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21331, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 19485, 19501, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19537, 22390, 19568, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19596, 19611, 19457, 36866, 17466, 36890, 36866, 18246, 19627, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22242, 20553, 19457, 36866, 17466, 36890, 36866, 18648, 30477, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36472, 19288, 19457, 36866, 17466, 17809, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21770, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19643, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19672, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20538, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17975, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22345, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19726, 19742, 21529, 24035, 23112, 26225, 23511, 27749, 27397, 24035, 34360, 24035, 24036, 23114, 35166, 23114, 23114, 19758, 23511, 35247, 23511, 23511, 28447, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 19821, 23511, 23511, 23511, 23511, 23512, 19441, 36539, 24035, 24035, 24035, 24035, 19846, 19869, 23114, 23114, 23114, 28618, 32187, 19892, 23511, 23511, 23511, 34585, 20402, 36647, 24035, 24035, 24036, 23114, 33757, 23114, 23114, 23029, 20271, 23511, 27070, 23511, 23511, 30562, 24035, 24035, 29274, 26576, 23114, 23114, 31118, 23036, 29695, 23511, 23511, 32431, 23634, 30821, 24035, 23110, 19913, 23114, 23467, 31261, 23261, 34299, 19932, 24035, 32609, 19965, 35389, 19984, 27689, 19830, 29391, 29337, 20041, 22643, 35619, 33728, 20062, 20121, 20166, 35100, 26145, 20211, 23008, 19876, 20208, 20227, 25670, 20132, 26578, 27685, 20141, 20243, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36094, 19288, 19457, 36866, 17466, 21724, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22735, 19552, 20287, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22750, 19288, 21529, 24035, 23112, 28056, 23511, 29483, 28756, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 20327, 23511, 23511, 23511, 23511, 31156, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 20371, 23511, 23511, 23511, 23511, 27443, 20395, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 29457, 29700, 23511, 23511, 23511, 23511, 33444, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 28350, 20421, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 20447, 20475, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20523, 22257, 20569, 20783, 21715, 17603, 20699, 20837, 20614, 20630, 21149, 20670, 21405, 17486, 17509, 17525, 18373, 19179, 20695, 20716, 20732, 20755, 19194, 18042, 21641, 20592, 20779, 20598, 21412, 17470, 17591, 20896, 17468, 17619, 20799, 20700, 21031, 20744, 20699, 20828, 18075, 21259, 20581, 20853, 18048, 20868, 20884, 17756, 17784, 17800, 17825, 17854, 21171, 21200, 20931, 20947, 21378, 20955, 20971, 18086, 20645, 21002, 20986, 18178, 17960, 18012, 18381, 18064, 29176, 21044, 21438, 21018, 21122, 21393, 21060, 21844, 21094, 20654, 17493, 18150, 18166, 18214, 25967, 20763, 21799, 21110, 21830, 21138, 21246, 21301, 18336, 18361, 21165, 21187, 20812, 21216, 21232, 21287, 21317, 18553, 21347, 21363, 21428, 21454, 21271, 21483, 21499, 21515, 21575, 21467, 18712, 21591, 21633, 21078, 18189, 18198, 20679, 21657, 21701, 21074, 21687, 21740, 21756, 21786, 21815, 21860, 21876, 21892, 21946, 21962, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36457, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 36813, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 21981, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 22151, 22007, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 27898, 17884, 18890, 17906, 17928, 22042, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 22070, 22112, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 22142, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36109, 19288, 18469, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22167, 19288, 19457, 36866, 17466, 17768, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22227, 36487, 22273, 36866, 17466, 36890, 36866, 19316, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18749, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 22304, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19580, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22330, 19089, 19457, 36866, 17466, 18721, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22765, 19347, 19457, 36866, 17466, 36890, 36866, 18114, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34541, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 22540, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29908, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22561, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 23837, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22584, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36442, 19288, 21605, 24035, 23112, 28137, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 31568, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22690, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 27584, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 22659, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22360, 19552, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22675, 22811, 19457, 36866, 17466, 36890, 36866, 19133, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22827, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36064, 19288, 22865, 22881, 32031, 22897, 22913, 22956, 29939, 24035, 24035, 24035, 23003, 23114, 23114, 23114, 23024, 22420, 23511, 23511, 23511, 23052, 29116, 23073, 29268, 24035, 25563, 26915, 23106, 23131, 23114, 23114, 23159, 23181, 23197, 23248, 23511, 23511, 23282, 23305, 22493, 32364, 24035, 33472, 30138, 26325, 31770, 33508, 27345, 33667, 23114, 23321, 23473, 23351, 35793, 36576, 23511, 23375, 22500, 24145, 24035, 29197, 20192, 24533, 23440, 23114, 19017, 23459, 22839, 23489, 23510, 23511, 33563, 23528, 32076, 25389, 24035, 26576, 23561, 23583, 23114, 32683, 22516, 23622, 23655, 23511, 23634, 35456, 37144, 23110, 23683, 34153, 20499, 32513, 25824, 23705, 24035, 24035, 23111, 23114, 19874, 27078, 33263, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 20507, 32241, 20150, 31862, 27464, 35108, 23727, 23007, 35895, 34953, 26578, 27685, 20141, 24569, 31691, 19787, 33967, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36427, 19552, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 27027, 26576, 23114, 23114, 23114, 31471, 23756, 22468, 23511, 23511, 23511, 34687, 23772, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 23788, 24035, 24035, 24035, 21559, 23828, 23114, 23114, 23114, 25086, 22839, 23853, 23511, 23511, 23511, 23876, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 31761, 23909, 23953, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36049, 19288, 21605, 30825, 23112, 23987, 23511, 24003, 31001, 27617, 24034, 24035, 24036, 24052, 24089, 23114, 23114, 22420, 24109, 24168, 23511, 23511, 29116, 24188, 27609, 20017, 29516, 24035, 26576, 24222, 19968, 23114, 24252, 33811, 22468, 24270, 33587, 23511, 24320, 27443, 22493, 24035, 24035, 24035, 24035, 24339, 23113, 23114, 23114, 23114, 28128, 28618, 29700, 23511, 23511, 23511, 28276, 34564, 20402, 24035, 24035, 32929, 24036, 23114, 23114, 23114, 24357, 23029, 22839, 23511, 23511, 23511, 24377, 25645, 24035, 34112, 24035, 26576, 23114, 26643, 23114, 32683, 22516, 23511, 25638, 23511, 23711, 24035, 24395, 27809, 23114, 24414, 20499, 24432, 30917, 23628, 24035, 30680, 23111, 23114, 30233, 27078, 25748, 24452, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 24475, 19829, 26577, 26597, 26154, 24519, 24556, 24596, 23007, 20046, 20132, 26578, 24634, 20141, 24569, 31691, 24679, 24727, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36412, 19288, 21605, 19943, 34861, 32618, 26027, 29483, 32016, 32050, 36233, 24776, 35574, 24801, 24819, 32671, 31289, 22420, 24868, 24886, 20087, 26849, 29116, 19803, 24035, 24035, 24035, 36228, 26576, 23114, 23114, 23114, 24981, 33811, 22468, 23511, 23511, 23511, 29028, 27443, 22493, 24923, 27965, 24035, 24035, 32797, 24946, 23443, 23114, 23114, 29636, 24997, 22849, 28252, 23511, 23511, 23511, 25042, 25110, 24035, 24035, 34085, 24036, 25133, 23114, 23114, 25152, 23029, 22839, 25169, 23511, 36764, 23511, 25645, 30403, 24035, 25186, 26576, 31806, 24093, 25212, 32683, 22516, 32713, 26245, 34293, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 32406, 23111, 23114, 28676, 30944, 27689, 25234, 24035, 23112, 19872, 37063, 23266, 24036, 23114, 30243, 20379, 26100, 29218, 20211, 30105, 25257, 25284, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 24834, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36034, 19288, 21671, 25314, 25072, 25330, 25346, 25362, 29939, 29951, 35288, 29984, 23812, 27216, 25405, 25424, 30456, 22584, 26292, 25461, 25480, 31592, 29116, 25516, 34963, 25545, 27007, 25579, 33937, 25614, 25661, 25686, 34872, 25702, 25718, 25734, 25769, 25795, 25811, 25840, 22493, 26533, 25856, 24035, 25876, 30763, 27481, 25909, 23114, 28987, 25936, 25954, 29700, 25983, 23511, 31412, 26043, 26063, 22568, 29241, 29592, 26116, 31216, 35383, 26170, 34783, 26194, 26221, 22839, 26241, 26261, 22477, 26283, 26308, 27306, 31035, 24655, 26576, 29854, 33386, 26341, 32683, 22516, 32153, 30926, 26361, 19996, 26381, 35463, 26397, 26424, 34646, 26478, 35605, 31386, 26494, 35567, 31964, 22940, 23689, 25218, 30309, 32289, 19830, 33605, 23112, 32109, 27733, 27084, 24496, 35886, 35221, 26525, 36602, 26549, 26558, 26574, 26594, 26613, 26629, 26666, 26700, 26578, 27685, 23740, 24285, 31691, 26733, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36397, 19552, 18991, 25887, 28117, 32618, 26776, 29483, 29939, 26802, 24035, 24035, 24036, 28664, 23114, 23114, 23114, 22420, 30297, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 25559, 26576, 23114, 23114, 23114, 30525, 33811, 22468, 23511, 23511, 23511, 28725, 27443, 22493, 24035, 24035, 27249, 24035, 24035, 23113, 23114, 23114, 26827, 23114, 28618, 29700, 23511, 23511, 26845, 23511, 34564, 20402, 24035, 24035, 26979, 24036, 23114, 23114, 23114, 24974, 23029, 22839, 23511, 23511, 23511, 26865, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 33305, 24035, 25598, 23114, 19874, 34253, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 26886, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 26931, 24569, 26439, 26947, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36019, 19288, 26995, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 27043, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 27061, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 29978, 24035, 24035, 23113, 23114, 33114, 23114, 23114, 30010, 29700, 23511, 35913, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 27155, 26576, 23114, 23114, 30447, 23036, 29695, 23511, 23511, 30935, 20099, 24152, 25529, 27100, 34461, 27121, 22625, 29156, 26009, 27137, 30422, 31903, 31655, 28870, 27171, 32439, 31731, 19830, 27232, 22612, 27265, 26786, 25494, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 20342, 27288, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 27322, 27339, 28020, 27361, 27382, 29939, 24035, 24035, 32581, 24036, 23114, 23114, 23114, 27425, 22420, 23511, 23511, 23511, 27442, 28306, 19803, 24035, 24035, 24035, 24035, 26710, 23114, 23114, 23114, 23114, 32261, 22468, 23511, 23511, 23511, 23511, 35719, 24694, 29510, 24035, 24035, 24035, 24035, 26717, 23114, 23114, 23114, 23114, 28618, 32217, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 27459, 23114, 23114, 23114, 36252, 23029, 20271, 23511, 23511, 23511, 28840, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 27480, 34483, 28401, 29761, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36382, 19288, 21605, 27497, 27517, 28504, 28898, 27569, 29939, 29401, 27600, 27323, 27633, 19025, 27662, 23114, 27705, 22420, 20483, 27721, 23511, 27765, 28306, 19803, 23540, 24035, 24610, 27781, 27805, 26650, 23114, 28573, 32990, 25920, 22468, 26870, 23511, 26684, 34262, 34737, 25057, 34622, 24035, 24035, 23971, 24206, 27825, 27847, 23114, 23114, 27865, 27885, 35766, 27914, 23511, 23511, 32766, 32844, 27934, 28795, 26909, 27955, 26092, 27988, 25445, 28005, 28036, 28052, 21965, 23511, 32196, 19897, 28072, 28102, 36534, 21541, 23801, 28153, 28180, 28197, 28221, 23036, 32695, 28251, 28268, 28292, 23667, 34825, 23930, 24580, 28322, 28344, 31627, 28366, 25996, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 35625, 33477, 33359, 27674, 28393, 33992, 24036, 23114, 30243, 19829, 28417, 28433, 28463, 23008, 19876, 20208, 23007, 20046, 20132, 28489, 28520, 20141, 24569, 31691, 19787, 28550, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 28589, 24035, 24035, 24035, 24035, 28608, 23114, 23114, 23114, 23114, 28618, 20431, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36004, 19288, 28634, 31951, 28565, 28702, 28718, 28741, 32544, 20175, 28792, 32086, 20105, 28811, 29059, 29862, 28856, 22420, 28886, 30354, 23359, 28922, 28306, 28952, 23888, 26320, 36506, 24035, 29331, 28968, 36609, 23114, 29003, 31661, 27061, 30649, 27366, 23511, 29023, 27918, 24694, 24035, 24035, 23893, 33094, 30867, 23113, 23114, 23114, 29044, 34184, 30010, 29700, 23511, 23511, 29081, 29102, 34585, 20402, 27789, 24035, 24035, 24036, 23114, 29132, 23114, 23114, 23029, 20271, 23511, 29153, 23511, 23511, 30562, 30174, 24035, 24035, 27409, 25438, 23114, 23114, 29172, 36668, 31332, 23511, 23511, 29192, 30144, 24035, 23110, 30203, 23114, 23467, 31544, 23261, 23628, 24035, 22545, 23111, 23114, 29213, 27078, 27689, 29234, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 29257, 23008, 19876, 20208, 28768, 29290, 29320, 34776, 29353, 20141, 22435, 29378, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36367, 19288, 21605, 34616, 19006, 32618, 31497, 31507, 36216, 20184, 24035, 34393, 29424, 34668, 23114, 34900, 29447, 22420, 30360, 23511, 37089, 29473, 28306, 19803, 29499, 24398, 24035, 24035, 26576, 31799, 29532, 29550, 23114, 33811, 22468, 32298, 29571, 31184, 23511, 23512, 37127, 36628, 29589, 24035, 24135, 24035, 23113, 29608, 23114, 27831, 29634, 28618, 29652, 30037, 23511, 24172, 29671, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 29555, 29690, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 29719, 24035, 23110, 29738, 23114, 23467, 34035, 29756, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 29777, 34364, 28181, 30243, 29799, 31920, 27272, 27185, 23008, 31126, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29828, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35989, 19552, 19687, 35139, 28649, 29878, 29894, 29924, 29939, 23224, 23085, 31969, 24036, 35173, 24752, 24803, 23114, 22420, 31190, 30318, 24870, 23511, 28306, 29967, 23967, 24035, 24035, 24035, 26576, 30000, 23114, 23114, 23114, 33811, 22468, 30026, 23511, 23511, 23511, 23512, 26078, 24035, 24035, 24035, 30053, 37137, 30071, 23114, 23114, 33368, 25136, 28618, 30723, 23511, 23511, 37096, 31356, 34585, 20402, 30092, 30127, 30160, 24036, 35740, 30219, 24960, 30259, 23029, 20271, 34042, 30285, 30342, 30376, 23289, 30055, 30400, 30419, 30438, 32640, 33532, 33514, 30472, 18792, 26267, 24323, 23057, 30493, 23639, 20008, 30196, 33188, 30517, 20075, 23511, 30541, 23628, 30578, 33928, 28776, 30594, 19874, 30610, 30637, 19830, 30677, 27646, 19872, 25779, 23266, 23232, 35016, 30243, 30696, 29812, 30712, 30746, 27206, 30779, 30807, 23007, 33395, 20132, 26578, 27685, 31703, 22928, 31691, 19787, 31079, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36352, 19288, 23335, 30841, 26131, 30888, 30904, 30986, 29939, 24035, 24704, 31017, 20025, 23114, 26178, 31051, 31095, 22420, 23511, 22524, 31142, 31172, 28534, 31206, 35497, 25196, 24035, 28592, 24503, 23114, 31239, 31285, 23114, 31305, 31321, 31355, 31372, 31407, 23511, 30556, 24694, 24035, 27501, 19805, 24035, 24035, 23113, 23114, 31428, 24066, 23114, 28618, 29700, 23511, 31837, 18809, 23511, 34585, 31448, 24035, 24035, 24035, 23090, 23114, 23114, 23114, 23114, 31619, 35038, 23511, 23511, 23511, 23511, 33714, 24035, 33085, 24035, 29431, 23114, 31467, 23114, 23143, 31487, 23511, 31523, 23511, 35195, 36783, 24035, 30111, 23567, 23114, 23467, 31543, 31560, 23628, 24035, 24035, 23111, 23114, 19874, 30953, 31584, 34508, 24035, 31608, 26345, 37055, 23266, 31643, 31677, 31719, 31747, 31786, 31822, 26898, 23008, 19876, 31859, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 31878, 31936, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35974, 19288, 21605, 27972, 35663, 31985, 29655, 32001, 36715, 24785, 25893, 23545, 31912, 19853, 19916, 25938, 24540, 22420, 31843, 29674, 29573, 32735, 28936, 19803, 24035, 24035, 32047, 24035, 26576, 23114, 23114, 27544, 23114, 33811, 22468, 23511, 23511, 32161, 23511, 23512, 32066, 24035, 33313, 24035, 24035, 24035, 23113, 27426, 32102, 23114, 23114, 28618, 32125, 23511, 32144, 23511, 23511, 33569, 20402, 24035, 27045, 24035, 24036, 23114, 23114, 28328, 23114, 30076, 32177, 23511, 23511, 30384, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23595, 32212, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 22635, 25753, 32233, 32257, 32277, 19829, 26577, 26597, 20211, 23008, 19876, 32322, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 32352, 35285, 32380, 34196, 33016, 30661, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 32404, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 32422, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 30269, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 19949, 24035, 23111, 32455, 19874, 31269, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36337, 19552, 19209, 21617, 26509, 32475, 32491, 32529, 29939, 24035, 32578, 25241, 32597, 23114, 32634, 29007, 32656, 22420, 23511, 32729, 26365, 32751, 28306, 32788, 32882, 24035, 24035, 32813, 36727, 23114, 33182, 23114, 27553, 33235, 32829, 23511, 32706, 23511, 28906, 28377, 26962, 32881, 32904, 32898, 32920, 24035, 32953, 23114, 32977, 26408, 23114, 28164, 33006, 23511, 33039, 35774, 23511, 32306, 20402, 33076, 30872, 24035, 24036, 25408, 33110, 28979, 23114, 23029, 20271, 35835, 33130, 33054, 23511, 30562, 33148, 24035, 24035, 33167, 23114, 23114, 33775, 23036, 20459, 23511, 23511, 25464, 24646, 24035, 24035, 22446, 23114, 23114, 25627, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 31391, 33204, 33220, 33251, 33287, 26577, 26597, 20211, 33329, 19876, 33345, 23007, 20046, 20132, 26578, 27685, 28473, 22599, 31691, 33411, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35959, 19288, 21907, 27243, 29843, 32618, 33427, 31507, 29939, 33460, 34090, 24035, 24036, 33493, 24416, 33530, 23114, 22420, 33548, 24379, 33585, 23511, 28306, 19803, 33603, 24202, 24035, 24035, 25593, 33749, 28205, 23114, 23114, 32388, 22468, 33853, 33060, 23511, 23511, 31339, 33621, 24035, 24035, 34397, 24618, 30757, 33663, 23114, 23114, 33683, 35684, 28618, 26678, 23511, 23511, 32506, 33699, 34585, 20402, 24035, 32562, 26973, 24036, 23114, 23114, 33377, 33773, 23029, 20271, 23511, 23511, 30621, 23511, 23860, 24035, 33791, 21553, 26576, 36558, 23114, 33809, 23036, 32857, 26047, 23511, 33827, 23634, 24035, 24035, 23110, 23114, 23114, 31252, 23511, 33845, 23628, 24035, 24459, 23111, 23114, 33869, 27078, 30791, 29783, 24035, 24742, 19872, 33895, 23266, 26462, 19710, 33879, 33919, 26577, 26597, 24123, 24930, 21930, 20208, 30501, 33953, 25268, 20252, 33983, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36322, 19552, 23390, 33634, 35154, 34008, 34024, 34058, 35544, 34106, 34128, 26811, 33151, 34144, 34169, 34212, 23114, 34228, 34244, 34278, 34315, 23511, 34331, 34347, 34380, 34413, 24035, 24663, 26576, 34429, 34453, 34477, 29534, 33811, 22468, 34499, 34524, 34557, 25170, 34580, 35436, 23937, 34601, 24035, 24341, 26453, 23113, 34638, 34662, 23114, 24236, 28618, 34684, 34703, 34729, 23511, 35352, 34753, 34799, 24035, 34815, 32558, 34848, 34888, 35814, 34923, 23165, 29137, 23606, 30326, 30730, 34939, 33023, 30562, 36848, 34979, 24035, 24847, 34996, 23114, 23114, 35032, 29695, 35054, 23511, 23511, 35091, 33296, 35124, 24296, 28235, 24361, 36276, 32772, 35067, 35189, 27301, 30855, 24852, 22452, 35211, 35237, 35316, 25500, 35270, 23405, 24304, 35304, 29362, 24036, 23114, 35332, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 35368, 28823, 23920, 32336, 35405, 20141, 24569, 31691, 35421, 35479, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35944, 22795, 21605, 33647, 35877, 35513, 30962, 35529, 34073, 35557, 24035, 24035, 20405, 31107, 23114, 23114, 23114, 35590, 34713, 23511, 23511, 23511, 35641, 19803, 29408, 32937, 25298, 24035, 35657, 23115, 27849, 24760, 35679, 26205, 22468, 23511, 35700, 24907, 24901, 35075, 31893, 34980, 24035, 24035, 24035, 24035, 23113, 35009, 23114, 23114, 23114, 28618, 35716, 30970, 23511, 23511, 23511, 34585, 23215, 24035, 24035, 24035, 24036, 35735, 23114, 23114, 23114, 27105, 35756, 35790, 23511, 23511, 23511, 35254, 35446, 24035, 24035, 31223, 35809, 23114, 23114, 23036, 36825, 35830, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 31031, 20355, 19872, 33903, 23266, 24036, 23114, 28686, 19829, 26577, 26597, 20211, 23008, 23424, 20208, 24711, 31065, 24486, 26578, 27685, 20141, 19773, 35851, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36307, 19288, 21605, 35494, 19702, 32618, 33437, 31507, 29939, 25117, 24035, 27939, 24036, 27869, 23114, 26829, 23114, 22420, 23494, 23511, 33132, 23511, 28306, 19803, 24035, 34832, 24035, 24035, 26576, 23114, 25153, 23114, 23114, 33811, 22468, 23511, 23511, 35911, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35929, 19288, 21605, 25860, 23112, 36185, 23511, 36201, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 26748, 24035, 24035, 24035, 24035, 24035, 36249, 23114, 23114, 23114, 23114, 28618, 28835, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 27151, 24035, 26760, 23114, 27989, 23114, 23114, 36268, 20271, 23511, 24436, 23511, 29703, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36292, 19288, 21605, 36503, 21922, 32618, 34534, 31507, 36522, 24035, 33793, 24035, 35864, 23114, 23114, 36555, 23417, 22420, 23511, 23511, 36574, 26020, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 36592, 24035, 24035, 36625, 24035, 24035, 23113, 23114, 32961, 23114, 23114, 29618, 29700, 23511, 29086, 23511, 23511, 34585, 20402, 36644, 24035, 24035, 24036, 29740, 23114, 23114, 23114, 29065, 36663, 31527, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 31451, 23112, 36684, 23511, 36700, 29939, 24035, 24035, 24035, 30185, 23114, 23114, 23114, 27526, 22420, 23511, 23511, 23511, 32865, 28306, 19803, 36743, 24035, 27017, 24035, 26576, 27535, 23114, 31432, 23114, 33811, 22468, 33271, 23511, 32128, 23511, 23512, 24694, 24035, 27196, 24035, 24035, 24035, 23113, 32459, 23114, 23114, 23114, 28618, 29700, 33829, 36762, 23511, 23511, 34585, 20402, 24035, 36746, 24035, 29722, 23114, 23114, 34437, 23114, 34907, 20271, 23511, 23511, 18801, 23511, 23206, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 36837, 24035, 24035, 33739, 23114, 23114, 25094, 23511, 23261, 23628, 24035, 36780, 23111, 24073, 19874, 27078, 35344, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22720, 19288, 36799, 36866, 17466, 36890, 36864, 21991, 22211, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17631, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22705, 19288, 19457, 36866, 17466, 36890, 36866, 19375, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36124, 19288, 36951, 36866, 17466, 36890, 36866, 21991, 22404, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18567, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36979, 36995, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18027, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 21529, 24035, 23112, 23033, 23511, 31507, 25377, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 37040, 23511, 23511, 23511, 23511, 28086, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 37079, 23511, 23511, 23511, 23511, 23512, 34766, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 37112, 37160, 18469, 36866, 17466, 36890, 36866, 17656, 37174, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18537, 22984, 17553, 17572, 22285, 18780, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 0, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 127011, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2576384, 2215936, 2215936, 2215936, 2416640, 2424832, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2543616, 2215936, 2215936, 2215936, 2215936, 2215936, 2629632, 2215936, 2617344, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2691072, 2215936, 2707456, 2215936, 2715648, 2215936, 2723840, 2764800, 2215936, 2215936, 2797568, 2215936, 2822144, 2215936, 2215936, 2854912, 2215936, 2215936, 2215936, 2912256, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 180224, 0, 0, 2174976, 0, 0, 2170880, 2617344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2691072, 2170880, 2707456, 2170880, 2715648, 2170880, 2723840, 2764800, 2170880, 2170880, 2797568, 2170880, 2170880, 2797568, 2170880, 2822144, 2170880, 2170880, 2854912, 2170880, 2170880, 2170880, 2912256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2609152, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2654208, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 184599, 280, 0, 2174976, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 544, 0, 546, 0, 0, 2179072, 0, 0, 0, 552, 0, 0, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2158592, 2158592, 2232320, 2232320, 0, 2240512, 2240512, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 2768896, 2789376, 2813952, 2170880, 2170880, 2170880, 2875392, 2904064, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 167936, 0, 0, 0, 0, 2174976, 0, 0, 2215936, 2215936, 2514944, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2592768, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 32768, 0, 0, 0, 0, 0, 2174976, 32768, 0, 2633728, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2711552, 2215936, 2215936, 2215936, 2215936, 2215936, 2760704, 2768896, 2789376, 2813952, 2215936, 2215936, 2215936, 2875392, 2904064, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 65819, 2215936, 2215936, 3031040, 2215936, 3055616, 2215936, 2215936, 2215936, 2215936, 3092480, 2215936, 2215936, 3125248, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2170880, 2170880, 2494464, 2170880, 2170880, 0, 0, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 2699264, 2170880, 2727936, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3026944, 2170880, 2170880, 3063808, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 2379776, 2215936, 2523136, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2596864, 2215936, 2621440, 2215936, 2215936, 2641920, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 548, 0, 0, 0, 0, 287, 2170880, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2699264, 2215936, 2727936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2879488, 2215936, 2916352, 2215936, 2215936, 0, 0, 0, 0, 188416, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 0, 2171019, 2171019, 2171019, 2400395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3031179, 2171019, 3055755, 2171019, 2171019, 2215936, 3133440, 2215936, 2215936, 2215936, 3162112, 2215936, 2215936, 3182592, 3186688, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2523275, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2597003, 2171019, 2621579, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 4337664, 28, 2170880, 2170880, 2170880, 2629632, 2170880, 2170880, 2170880, 2170880, 2719744, 2744320, 2170880, 2170880, 2170880, 2834432, 2838528, 2170880, 2908160, 2170880, 2170880, 2936832, 2215936, 2215936, 2215936, 2215936, 2719744, 2744320, 2215936, 2215936, 2215936, 2834432, 2838528, 2215936, 2908160, 2215936, 2215936, 2936832, 2215936, 2215936, 2985984, 2215936, 2994176, 2215936, 2215936, 3014656, 2215936, 3059712, 3076096, 3088384, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2445312, 2215936, 2465792, 2473984, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2171019, 2494603, 2171019, 2171019, 2215936, 2215936, 2215936, 3215360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3016168, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 124, 124, 0, 128, 128, 2170880, 2170880, 2170880, 3215360, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2535424, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 0, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2170880, 2170880, 3170304, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 2215936, 2215936, 2215936, 2535424, 2539520, 2215936, 2215936, 2588672, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 136, 0, 2215936, 2215936, 2920448, 2215936, 2215936, 2215936, 2990080, 2215936, 2215936, 2215936, 2215936, 3051520, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3108864, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3026944, 2215936, 2215936, 3063808, 2215936, 2215936, 3112960, 2215936, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2537049, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 1508, 2170880, 2170880, 2170880, 1512, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2686976, 2748416, 2170880, 2170880, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3121152, 2170880, 2170880, 3145728, 3158016, 3166208, 2170880, 2420736, 2428928, 2170880, 2478080, 2170880, 2170880, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 0, 0, 3145728, 3158016, 3166208, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 0, 2170880, 2215936, 2215936, 2580480, 2215936, 2605056, 2637824, 2215936, 2215936, 2686976, 2748416, 2215936, 2215936, 2215936, 2924544, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 286, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 1625, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 647, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2686976, 0, 0, 2748416, 2170880, 2170880, 0, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 0, 0, 28, 28, 2170880, 3141632, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2170880, 2420736, 2428928, 2752512, 2756608, 0, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2170880, 3141632, 2170880, 2170880, 2490368, 2215936, 2490368, 2215936, 2215936, 2215936, 2547712, 2555904, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 245760, 0, 3129344, 2170880, 2170880, 2490368, 2170880, 2170880, 2170880, 0, 0, 2547712, 2555904, 2170880, 2170880, 2170880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 45056, 0, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1482, 97, 97, 97, 97, 97, 97, 97, 1354, 97, 97, 97, 97, 97, 97, 97, 97, 1148, 97, 97, 97, 97, 97, 97, 97, 2584576, 2170880, 2170880, 1512, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2170880, 2850816, 2170880, 2170880, 2170880, 3022848, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 2215936, 3022848, 2170880, 2441216, 2170880, 2527232, 0, 0, 2170880, 2600960, 2170880, 0, 2850816, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2596864, 2170880, 2621440, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 3022848, 2170880, 2519040, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2514944, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2519040, 0, 2024, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 2024, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 2170880, 2215936, 2650112, 2965504, 2215936, 0, 0, 2170880, 2650112, 2965504, 2170880, 2551808, 2170880, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 141, 45, 45, 67, 67, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 0, 2551808, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2977792, 2977792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 29, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 49172, 0, 0, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 4256099, 4256099, 24, 24, 0, 28, 28, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 0, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 2170880, 2547712, 2555904, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2215936, 2215936, 543, 543, 545, 545, 0, 0, 2179072, 0, 550, 551, 551, 0, 287, 2171166, 2171166, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 645, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 149, 2584576, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2519040, 0, 0, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 0, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 53264, 18, 49172, 57366, 24, 155648, 28, 102432, 155648, 155687, 114730, 106539, 0, 0, 155648, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 0, 0, 2220032, 0, 94208, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 208896, 18, 278528, 24, 24, 0, 28, 28, 53264, 18, 159765, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 139394, 28, 28, 102432, 131, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 32768, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 546, 0, 0, 2183168, 0, 0, 552, 832, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2654208, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 1084, 0, 1088, 0, 1092, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 937, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 644, 0, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 826, 0, 828, 0, 0, 2183168, 0, 0, 830, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2170880, 2170880, 2633728, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 53264, 18, 49172, 57366, 24, 8192, 28, 172066, 172032, 110630, 172066, 106539, 0, 0, 172032, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 102432, 0, 98304, 0, 0, 2220032, 110630, 0, 0, 0, 0, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 45056, 0, 0, 0, 53264, 18, 49172, 57366, 25, 8192, 30, 102432, 0, 110630, 114730, 106539, 0, 0, 176219, 53264, 18, 18, 49172, 0, 57366, 0, 124, 124, 124, 0, 128, 128, 128, 128, 102432, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 546, 0, 0, 2183168, 0, 65536, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 143, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1824, 67, 1826, 67, 67, 67, 67, 17, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 120, 121, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 2179072, 548, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2033, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 978, 0, 546, 70179, 0, 2183168, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1013, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 67, 67, 67, 483, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1359, 97, 97, 97, 67, 67, 1584, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 45, 45, 45, 45, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 774, 67, 67, 1713, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1723, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 45, 1559, 45, 45, 1561, 45, 45, 45, 45, 45, 45, 45, 687, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1771, 1772, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 1827, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 1614, 97, 97, 97, 97, 97, 603, 97, 97, 605, 97, 97, 608, 97, 97, 97, 97, 0, 1532, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 450, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 1839, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 1883, 97, 1885, 97, 0, 1888, 0, 97, 97, 0, 97, 97, 1848, 97, 97, 97, 97, 1852, 45, 45, 45, 45, 45, 45, 45, 384, 391, 45, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 45, 45, 45, 45, 1237, 45, 45, 45, 45, 45, 45, 67, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1951, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1963, 97, 2023, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 1994, 67, 1995, 67, 67, 67, 67, 67, 67, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 137, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2793472, 2805760, 2170880, 2830336, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 281, 549, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2031, 2032, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 0, 546, 70179, 549, 549, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1858, 45, 641, 0, 0, 0, 0, 41606, 926, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 456, 67, 0, 0, 0, 1313, 0, 0, 0, 1096, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1110, 97, 97, 97, 97, 67, 67, 67, 67, 1301, 1476, 0, 0, 0, 0, 1307, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1486, 97, 1487, 97, 1313, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 97, 45, 1853, 45, 1855, 45, 45, 45, 45, 53264, 18, 49172, 57366, 26, 8192, 31, 102432, 0, 110630, 114730, 106539, 0, 0, 225368, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 18, 49172, 163840, 57366, 0, 24, 24, 229376, 0, 28, 28, 28, 229376, 102432, 0, 0, 0, 0, 2220167, 110630, 0, 0, 0, 114730, 106539, 0, 2171019, 2171019, 2171019, 2171019, 2592907, 2171019, 2171019, 2171019, 2171019, 2633867, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2654347, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3117195, 2171019, 2171019, 2171019, 2171019, 2240641, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 140, 2171019, 2171019, 2171019, 2416779, 2424971, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2617483, 2171019, 2171019, 2642059, 2171019, 2171019, 2171019, 2699403, 2171019, 2728075, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3215499, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2171019, 2822283, 2171019, 2171019, 2855051, 2171019, 2171019, 2171019, 2912395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3002507, 2171019, 2171019, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2171166, 2171166, 2416926, 2425118, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2576670, 2171166, 2617630, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2691358, 2171166, 2707742, 2171166, 2715934, 2171166, 2724126, 2765086, 2171166, 2171166, 2797854, 2171166, 2822430, 2171166, 2171166, 2855198, 2171166, 2171166, 2171166, 2912542, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2793758, 2806046, 2171166, 2830622, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3109150, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2543902, 2171166, 2171166, 2171166, 2171166, 2171166, 2629918, 2793611, 2805899, 2171019, 2830475, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2171166, 2171166, 2171166, 2400542, 2171166, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 0, 2171166, 2920734, 2171166, 2171166, 2171166, 2990366, 2171166, 2171166, 2171166, 2171166, 3117342, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 53264, 0, 18, 18, 4329472, 2232445, 0, 2240641, 4337664, 2711691, 2171019, 2171019, 2171019, 2171019, 2171019, 2760843, 2769035, 2789515, 2814091, 2171019, 2171019, 2171019, 2875531, 2904203, 2171019, 2171019, 3092619, 2171019, 2171019, 3125387, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3199115, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2793472, 2805760, 2215936, 2830336, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2494464, 2170880, 2170880, 2171166, 2171166, 2634014, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2711838, 2171166, 2171166, 2171166, 2171166, 2171166, 2760990, 2769182, 2789662, 2814238, 2171166, 2171166, 2171166, 2875678, 2904350, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3199262, 2171166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379915, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2445451, 2171019, 2465931, 2474123, 2171019, 2171019, 3113099, 2171019, 2171019, 3133579, 2171019, 2171019, 2171019, 3162251, 2171019, 2171019, 3182731, 3186827, 2171019, 2379776, 2879627, 2171019, 2916491, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3027083, 2171019, 2171019, 3063947, 2699550, 2171166, 2728222, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2879774, 2171166, 2916638, 2171166, 2171166, 2171166, 2171166, 2171166, 2609438, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2654494, 2171166, 2171166, 2171166, 2171166, 2171166, 2445598, 2171166, 2466078, 2474270, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2523422, 2171019, 2437259, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2543755, 2171019, 2171019, 2171019, 2584715, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2908299, 2171019, 2171019, 2936971, 2171019, 2171019, 2986123, 2171019, 2994315, 2171019, 2171019, 3014795, 2171019, 3059851, 3076235, 3088523, 2171166, 2171166, 2986270, 2171166, 2994462, 2171166, 2171166, 3014942, 2171166, 3059998, 3076382, 3088670, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3027230, 2171166, 2171166, 3064094, 2171166, 2171166, 3113246, 2171166, 2171166, 3133726, 2506891, 2171019, 2171019, 2171019, 2535563, 2539659, 2171019, 2171019, 2588811, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2691211, 2171019, 2707595, 2171019, 2715787, 2171019, 2723979, 2764939, 2171019, 2171019, 2797707, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2453790, 2457886, 2171166, 2171166, 2171166, 2486558, 2171166, 2171166, 2507038, 2171166, 2171166, 2171166, 2535710, 2539806, 2171166, 2171166, 2588958, 2171166, 2171166, 2171166, 2171166, 2515230, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2593054, 2171166, 2171166, 2171166, 2171166, 3051806, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3170590, 0, 2388107, 2392203, 2171019, 2171019, 2433163, 2171019, 2461835, 2171019, 2171019, 2171019, 2510987, 2171019, 2171019, 2171019, 2171019, 2580619, 2171019, 2605195, 2637963, 2171019, 2171019, 2171019, 2920587, 2171019, 2171019, 2171019, 2990219, 2171019, 2171019, 2171019, 2171019, 3051659, 2171019, 2171019, 2171019, 2453643, 2457739, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2515083, 2171019, 2171019, 2171019, 2171019, 2646155, 2670731, 2752651, 2756747, 2846859, 2961547, 2171019, 2998411, 2171019, 3010699, 2171019, 2171019, 2687115, 2748555, 2171019, 2171019, 2171019, 2924683, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3121291, 2171019, 2171019, 2171019, 3170443, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 3145867, 3158155, 3166347, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 553, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2388254, 2392350, 2171166, 2171166, 2433310, 2171166, 2461982, 2171166, 2171166, 2171166, 2511134, 2171166, 2171166, 0, 2171166, 2171166, 2580766, 2171166, 2605342, 2638110, 2171166, 2171166, 2171166, 2171166, 3031326, 2171166, 3055902, 2171166, 2171166, 2171166, 2171166, 3092766, 2171166, 2171166, 3125534, 2171166, 2171166, 2171166, 3162398, 2171166, 2171166, 3182878, 3186974, 2171166, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 3109003, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2171166, 2687262, 0, 0, 2748702, 2171166, 2171166, 0, 2171166, 2924830, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2597150, 2171166, 2621726, 2171166, 2171166, 2642206, 2171166, 2171166, 2171166, 2171166, 3121438, 2171166, 2171166, 3146014, 3158302, 3166494, 2171019, 2420875, 2429067, 2171019, 2478219, 2171019, 2171019, 2171019, 2171019, 2547851, 2556043, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3129483, 2215936, 2171019, 3141771, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2171166, 2421022, 2429214, 2171166, 2478366, 2171166, 2171166, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2646302, 2670878, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 0, 45, 45, 45, 45, 45, 1405, 1406, 45, 45, 45, 45, 1409, 45, 45, 45, 45, 45, 1415, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1238, 45, 45, 45, 45, 67, 2752798, 2756894, 0, 2847006, 2961694, 2171166, 2998558, 2171166, 3010846, 2171166, 2171166, 2171166, 3141918, 2171019, 2171019, 2490507, 3129344, 2171166, 2171166, 2490654, 2171166, 2171166, 2171166, 0, 0, 2547998, 2556190, 2171166, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 167, 45, 45, 45, 45, 185, 187, 45, 45, 198, 45, 45, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3129630, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2576523, 2171019, 2171019, 2171019, 2171019, 2171019, 2609291, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2171166, 2171166, 2494750, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 147, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 3002654, 2171166, 2171166, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2175257, 0, 0, 2584862, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2441355, 2171019, 2527371, 2171019, 2601099, 2171019, 2850955, 2171019, 2171019, 2171019, 3022987, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 69632, 287, 2170880, 2215936, 3022848, 2171166, 2441502, 2171166, 2527518, 0, 0, 2171166, 2601246, 2171166, 0, 2851102, 2171166, 2171166, 2171166, 2171166, 2720030, 2744606, 2171166, 2171166, 2171166, 2834718, 2838814, 2171166, 2908446, 2171166, 2171166, 2937118, 3023134, 2171019, 2519179, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 3215646, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2486411, 2171019, 2171019, 2171019, 2629771, 2171019, 2171019, 2171019, 2171019, 2719883, 2744459, 2171019, 2171019, 2171019, 2834571, 2838667, 2171019, 2519326, 0, 0, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 2396299, 2171019, 2171019, 2171019, 2171019, 3018891, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396446, 0, 0, 2171166, 2171166, 2171166, 2171166, 3019038, 2171019, 2650251, 2965643, 2171019, 2215936, 2650112, 2965504, 2215936, 0, 0, 2171166, 2650398, 2965790, 2171166, 2551947, 2171019, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 144, 45, 45, 67, 67, 67, 67, 67, 228, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1929, 97, 97, 97, 97, 0, 0, 0, 2552094, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2977931, 2977792, 2978078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1321, 97, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 140, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2584576, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 140, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3215360, 544, 0, 0, 0, 544, 0, 546, 0, 0, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 0, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 552, 0, 0, 0, 552, 0, 287, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 644, 0, 2215936, 2215936, 3170304, 544, 0, 546, 0, 552, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 140, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 249856, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 151640, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 253952, 110630, 114730, 106539, 0, 0, 32856, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 192512, 53264, 18, 18, 49172, 0, 57366, 0, 2232445, 184320, 2232445, 0, 2240641, 2240641, 184320, 2240641, 102432, 0, 0, 0, 221184, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3108864, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 0, 0, 0, 45056, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 127, 127, 53264, 18, 49172, 258071, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 204800, 53264, 18, 49172, 57366, 24, 27, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 33, 0, 33, 33, 33, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2170880, 2170880, 2170880, 2416640, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2030, 45, 45, 45, 45, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1699, 67, 67, 67, 67, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 1358, 97, 97, 97, 641, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 45, 45, 45, 0, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1680, 45, 45, 45, 641, 0, 924, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 45, 45, 45, 45, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 282, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 2028, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1767, 67, 67, 67, 0, 0, 0, 0, 0, 0, 1612, 97, 97, 97, 97, 97, 97, 0, 1785, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1790, 97, 0, 0, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 241664, 2387968, 2392064, 2170880, 2170880, 2433024, 53264, 19, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 274432, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 270336, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 1134711, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 1126440, 1126440, 1126440, 0, 0, 1126400, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 36, 110630, 114730, 106539, 0, 0, 217088, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 94, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 96, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 24666, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 126, 28, 28, 28, 28, 102432, 53264, 122, 123, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 2170880, 2170880, 4256099, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1109, 97, 97, 97, 97, 1113, 132, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 146, 150, 45, 45, 45, 45, 45, 175, 45, 180, 45, 186, 45, 189, 45, 45, 203, 67, 256, 67, 67, 270, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 293, 297, 97, 97, 97, 97, 97, 322, 97, 327, 97, 333, 97, 0, 0, 97, 2026, 0, 2027, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 336, 97, 97, 350, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 2424832, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2617344, 2170880, 45, 439, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 525, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 622, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 1527, 369, 648, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1239, 45, 45, 45, 67, 729, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 762, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 0, 0, 0, 1477, 0, 1086, 0, 0, 0, 1479, 0, 1090, 67, 67, 796, 67, 67, 799, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 67, 67, 811, 67, 67, 67, 67, 67, 816, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 833, 97, 97, 97, 97, 97, 97, 97, 97, 1380, 0, 0, 0, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 45, 45, 45, 45, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 97, 97, 97, 894, 97, 97, 897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1382, 45, 45, 45, 97, 909, 97, 97, 97, 97, 97, 914, 97, 97, 97, 97, 97, 97, 97, 923, 67, 67, 1079, 67, 67, 67, 67, 67, 37689, 1085, 25403, 1089, 66365, 1093, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 148, 1114, 97, 97, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 97, 97, 606, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1173, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 145, 45, 45, 67, 67, 67, 67, 67, 1762, 67, 67, 67, 1766, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1934, 67, 67, 1255, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 67, 67, 67, 67, 1297, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 33344, 97, 97, 97, 1335, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1377, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 670, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 67, 67, 1438, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 0, 0, 0, 1311, 0, 0, 0, 1317, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1322, 97, 97, 1491, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 1553, 45, 1504, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 97, 97, 0, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 1540, 45, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1700, 67, 67, 67, 97, 1648, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1541, 0, 97, 97, 97, 97, 0, 1940, 0, 97, 97, 97, 97, 97, 97, 45, 45, 2011, 45, 45, 45, 2015, 67, 67, 2017, 67, 67, 67, 2021, 97, 67, 67, 812, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 97, 97, 910, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 0, 0, 0, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 1188, 45, 45, 45, 45, 1414, 45, 45, 45, 1417, 45, 1419, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 453, 45, 45, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 1324, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 930, 45, 45, 45, 45, 97, 97, 97, 97, 1378, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 45, 67, 67, 1923, 67, 1925, 67, 67, 1927, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1985, 45, 45, 45, 45, 45, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 45, 946, 45, 45, 950, 45, 45, 45, 0, 97, 97, 97, 1939, 0, 0, 0, 97, 1943, 97, 97, 1945, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 990, 45, 45, 45, 67, 257, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 337, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 2170880, 2170880, 2170880, 2416640, 401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 459, 461, 67, 67, 67, 67, 67, 67, 67, 67, 475, 67, 480, 67, 67, 67, 67, 67, 67, 1054, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 484, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 67, 67, 97, 556, 558, 97, 97, 97, 97, 97, 97, 97, 97, 572, 97, 577, 97, 97, 0, 0, 1896, 97, 97, 97, 97, 97, 97, 1903, 45, 45, 45, 45, 983, 45, 45, 45, 45, 988, 45, 45, 45, 45, 45, 45, 1195, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1549, 45, 45, 45, 45, 45, 581, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1004, 45, 45, 45, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 761, 67, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 1071, 67, 67, 67, 67, 1076, 794, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 544, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 859, 97, 0, 0, 2025, 97, 20480, 97, 97, 2029, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1775, 67, 67, 67, 97, 97, 97, 97, 892, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1515, 97, 993, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 992, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1607, 67, 67, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 97, 45, 1556, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 696, 45, 1596, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 67, 97, 97, 97, 1621, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1346, 97, 97, 97, 97, 1740, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 45, 45, 67, 97, 97, 97, 97, 97, 97, 1836, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1984, 97, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 45, 45, 45, 45, 67, 739, 67, 67, 67, 67, 67, 744, 45, 45, 1909, 45, 45, 45, 45, 45, 45, 45, 67, 1917, 67, 1918, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 67, 67, 67, 67, 67, 97, 1930, 97, 1931, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 1580, 67, 67, 0, 97, 97, 1938, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 699, 45, 45, 45, 704, 45, 45, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 2006, 97, 97, 97, 97, 0, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 722, 723, 45, 45, 45, 45, 45, 45, 2045, 67, 67, 67, 2047, 0, 0, 97, 97, 97, 2051, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1957, 45, 67, 67, 67, 67, 67, 1836, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 67, 67, 1761, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 45, 45, 420, 45, 45, 422, 45, 45, 425, 45, 45, 45, 45, 45, 45, 45, 387, 45, 45, 45, 45, 397, 45, 45, 45, 67, 460, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 515, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 97, 0, 2039, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1426, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1689, 67, 67, 67, 97, 557, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 612, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 896, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 97, 45, 939, 45, 45, 45, 45, 943, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1916, 67, 67, 67, 67, 67, 45, 67, 67, 67, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 1019, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 804, 67, 67, 67, 67, 67, 1077, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2543616, 2170880, 2170880, 2170880, 2170880, 2170880, 2629632, 1169, 97, 1171, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 936, 45, 45, 67, 67, 214, 67, 220, 67, 67, 233, 67, 243, 67, 248, 67, 67, 67, 67, 67, 67, 1298, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1617, 97, 0, 0, 0, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 45, 45, 45, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 1281, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 776, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 907, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 690, 45, 45, 695, 45, 45, 67, 67, 67, 67, 67, 1465, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1712, 97, 97, 97, 97, 1741, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1924, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1983, 97, 97, 45, 45, 1987, 45, 1988, 45, 0, 97, 97, 97, 97, 0, 0, 0, 1942, 97, 97, 97, 97, 97, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 711, 45, 45, 153, 45, 45, 166, 45, 176, 45, 181, 45, 45, 188, 191, 196, 45, 204, 255, 258, 263, 67, 271, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 97, 97, 294, 97, 300, 97, 97, 313, 97, 323, 97, 328, 97, 97, 335, 338, 343, 97, 351, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1411, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 67, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1263, 67, 67, 67, 67, 67, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1526, 97, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 0, 97, 97, 1796, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1744, 45, 45, 45, 369, 0, 651, 45, 653, 45, 654, 45, 656, 45, 45, 45, 660, 45, 45, 45, 45, 1558, 45, 45, 45, 45, 45, 45, 45, 45, 1566, 45, 45, 681, 45, 683, 45, 45, 45, 45, 45, 45, 45, 45, 691, 692, 694, 45, 45, 45, 716, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 709, 45, 45, 712, 45, 714, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 726, 45, 45, 45, 733, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 747, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 1613, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 67, 764, 67, 67, 67, 67, 768, 67, 770, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1977, 67, 778, 779, 781, 67, 67, 67, 67, 67, 67, 788, 789, 67, 67, 792, 793, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 67, 67, 824, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 836, 97, 838, 97, 839, 97, 841, 97, 97, 97, 845, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 97, 97, 0, 1728, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1802, 45, 97, 97, 862, 97, 97, 97, 97, 866, 97, 868, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1788, 97, 97, 97, 0, 0, 97, 97, 876, 877, 879, 97, 97, 97, 97, 97, 97, 886, 887, 97, 97, 890, 891, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1646, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 97, 97, 922, 923, 45, 955, 45, 957, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 195, 45, 45, 45, 45, 45, 981, 982, 45, 45, 45, 45, 45, 45, 989, 45, 45, 45, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 67, 67, 1031, 67, 1033, 67, 67, 67, 67, 67, 67, 67, 817, 819, 67, 67, 67, 67, 67, 37689, 544, 67, 1065, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 1078, 67, 67, 1081, 1082, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2437406, 2171166, 2171166, 97, 1115, 97, 1117, 97, 97, 97, 97, 97, 97, 1125, 97, 1127, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 1644, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 1642, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1159, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1502, 97, 97, 97, 97, 97, 1172, 97, 97, 1175, 1176, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 935, 45, 45, 45, 1233, 45, 45, 45, 1236, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1873, 67, 67, 45, 45, 1218, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 1230, 45, 45, 67, 67, 215, 219, 222, 67, 230, 67, 67, 244, 246, 249, 67, 67, 67, 67, 67, 67, 1882, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1904, 45, 1905, 45, 67, 67, 67, 67, 67, 1258, 67, 1260, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 67, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 67, 818, 67, 67, 67, 67, 67, 67, 37689, 544, 67, 67, 1295, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 97, 97, 97, 1326, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 97, 97, 97, 97, 97, 1338, 97, 1340, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 1503, 97, 1363, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 578, 97, 1375, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 45, 45, 45, 45, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1778, 97, 97, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 97, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 1554, 45, 1570, 1571, 45, 67, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 67, 1061, 67, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 1594, 67, 67, 67, 67, 67, 97, 2038, 0, 97, 97, 97, 97, 97, 2044, 45, 45, 45, 995, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 45, 45, 45, 1809, 45, 1811, 45, 45, 45, 45, 45, 67, 1610, 1611, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 1618, 1647, 1649, 97, 97, 97, 1652, 97, 1654, 1655, 97, 0, 45, 45, 45, 1658, 45, 45, 67, 67, 216, 67, 67, 67, 67, 234, 67, 67, 67, 67, 252, 254, 1845, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 947, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1881, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1902, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1921, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 0, 97, 1937, 97, 97, 1940, 0, 0, 97, 97, 97, 97, 97, 97, 1947, 1948, 1949, 45, 45, 45, 1952, 45, 1954, 45, 45, 45, 45, 1959, 1960, 1961, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 67, 67, 1964, 67, 1966, 67, 67, 67, 67, 1971, 1972, 1973, 97, 0, 0, 0, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 884, 97, 97, 97, 889, 97, 97, 1978, 97, 0, 0, 1981, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 736, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 45, 67, 67, 67, 67, 0, 2049, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 933, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 97, 97, 288, 97, 97, 97, 97, 97, 97, 317, 97, 97, 97, 97, 97, 97, 0, 0, 97, 1787, 97, 97, 97, 97, 0, 0, 45, 45, 378, 45, 45, 45, 45, 45, 390, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 431, 433, 45, 45, 45, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 67, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 632, 97, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 67, 97, 97, 97, 97, 97, 97, 1837, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1897, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 97, 2010, 45, 45, 45, 45, 45, 45, 2016, 67, 67, 67, 67, 67, 67, 2022, 45, 2046, 67, 67, 67, 0, 0, 2050, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 932, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 45, 45, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 701, 702, 45, 45, 705, 706, 45, 45, 45, 45, 45, 45, 703, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 45, 45, 45, 45, 45, 725, 45, 45, 45, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 834, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1799, 97, 97, 45, 45, 45, 1569, 45, 45, 45, 1572, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1306, 0, 67, 67, 67, 1598, 67, 67, 67, 67, 67, 67, 67, 67, 1606, 67, 67, 1609, 97, 97, 97, 1650, 97, 97, 1653, 97, 97, 97, 0, 45, 45, 1657, 45, 45, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1421, 45, 45, 45, 1703, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1711, 97, 97, 0, 1895, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 958, 45, 960, 45, 45, 45, 45, 45, 45, 45, 45, 1913, 45, 45, 1915, 67, 67, 67, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 481, 67, 45, 1749, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 45, 45, 45, 45, 173, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1773, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1886, 0, 0, 0, 97, 97, 67, 2035, 2036, 67, 67, 97, 0, 0, 97, 2041, 2042, 97, 97, 45, 45, 45, 45, 1662, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1397, 45, 45, 45, 45, 151, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 437, 205, 45, 67, 67, 67, 218, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 67, 97, 97, 97, 97, 298, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 97, 97, 97, 97, 97, 97, 352, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 365, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1427, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1435, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1037, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1919, 67, 1759, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 45, 154, 45, 162, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 964, 45, 45, 45, 206, 45, 67, 67, 67, 67, 221, 67, 229, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 67, 785, 67, 67, 67, 67, 67, 67, 67, 67, 802, 67, 67, 67, 807, 67, 67, 67, 97, 97, 97, 97, 353, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 402, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 45, 45, 674, 45, 45, 45, 45, 45, 45, 45, 45, 389, 45, 394, 45, 45, 398, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 447, 45, 45, 45, 454, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 488, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 67, 67, 67, 67, 67, 1774, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 67, 67, 523, 67, 67, 527, 67, 67, 67, 67, 67, 533, 67, 67, 67, 540, 97, 97, 97, 585, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 97, 97, 97, 97, 1784, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 620, 97, 97, 624, 97, 97, 97, 97, 97, 630, 97, 97, 97, 637, 713, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 45, 45, 45, 1197, 45, 45, 45, 45, 45, 45, 45, 45, 730, 732, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1581, 67, 45, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 775, 67, 67, 67, 67, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 67, 67, 67, 1080, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 287, 0, 2379776, 2170880, 2170880, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 920, 97, 97, 0, 0, 0, 0, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 45, 959, 45, 45, 45, 45, 45, 45, 45, 45, 45, 184, 45, 45, 45, 45, 202, 45, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1266, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1279, 67, 67, 67, 67, 67, 272, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1293, 67, 67, 67, 1296, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 281, 94, 0, 0, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 0, 97, 1376, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1384, 45, 45, 67, 208, 67, 67, 67, 67, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1069, 1070, 67, 67, 67, 67, 67, 67, 67, 0, 37140, 24854, 0, 0, 0, 0, 41098, 65821, 45, 1423, 45, 45, 45, 45, 45, 45, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1083, 37689, 0, 25403, 0, 66365, 0, 0, 0, 1436, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1830, 67, 1452, 1453, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 67, 67, 1461, 67, 67, 67, 1464, 67, 1466, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 1587, 67, 67, 67, 67, 67, 67, 67, 67, 1595, 1489, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 1505, 1506, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 1164, 97, 97, 97, 97, 97, 1516, 97, 97, 97, 1519, 97, 1521, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1301, 0, 0, 0, 1307, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 919, 97, 97, 97, 0, 97, 97, 97, 1781, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1792, 1860, 45, 1862, 1863, 45, 1865, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1875, 67, 1877, 1878, 67, 1880, 67, 97, 97, 97, 97, 97, 1887, 0, 1889, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 237568, 0, 367, 0, 97, 1893, 0, 0, 0, 97, 1898, 1899, 97, 1901, 97, 45, 45, 45, 45, 45, 2014, 45, 67, 67, 67, 67, 67, 2020, 67, 97, 1989, 45, 1990, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1996, 67, 1997, 67, 67, 67, 67, 67, 273, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 2005, 0, 97, 2007, 97, 97, 18, 0, 139621, 0, 0, 0, 642, 0, 133, 364, 0, 0, 367, 41606, 0, 97, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 209, 67, 67, 67, 223, 67, 67, 67, 67, 67, 67, 67, 67, 67, 786, 67, 67, 67, 791, 67, 67, 45, 45, 940, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1016, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 142, 45, 45, 67, 210, 67, 67, 67, 225, 67, 67, 239, 67, 67, 67, 250, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 476, 67, 67, 67, 67, 67, 67, 67, 1709, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1843, 0, 67, 259, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 289, 97, 97, 97, 303, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 97, 339, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 358, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1953, 45, 1955, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1687, 1688, 67, 67, 67, 67, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1203, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 477, 67, 67, 67, 67, 67, 67, 67, 1970, 97, 97, 97, 1974, 0, 0, 0, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1372, 97, 97, 97, 97, 67, 522, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 536, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 574, 97, 97, 97, 97, 97, 301, 97, 309, 97, 97, 97, 97, 97, 97, 97, 97, 97, 900, 97, 97, 97, 905, 97, 97, 97, 619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 633, 97, 97, 18, 0, 139621, 0, 0, 362, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 664, 67, 67, 67, 67, 750, 751, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1057, 1058, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 67, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 902, 97, 97, 97, 97, 67, 67, 1051, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1302, 0, 0, 0, 1308, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1139, 97, 97, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 1161, 97, 97, 97, 97, 97, 1166, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 1257, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 97, 97, 1337, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1630, 97, 67, 1474, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380062, 2171166, 2171166, 97, 1529, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 45, 45, 67, 67, 67, 67, 1707, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1891, 1739, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 1200, 45, 45, 45, 45, 97, 97, 1894, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 45, 45, 45, 67, 67, 1965, 67, 1967, 67, 67, 67, 97, 97, 97, 97, 0, 1976, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 97, 97, 1979, 0, 0, 97, 1982, 97, 97, 97, 1986, 45, 45, 45, 45, 45, 735, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 2000, 97, 97, 97, 2002, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1798, 97, 97, 97, 45, 45, 45, 2034, 67, 67, 67, 67, 97, 0, 0, 2040, 97, 97, 97, 97, 45, 45, 45, 45, 1752, 45, 45, 45, 1753, 1754, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 45, 45, 438, 45, 45, 45, 45, 45, 445, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1430, 67, 67, 67, 67, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 531, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1096, 97, 97, 97, 621, 97, 97, 97, 97, 97, 628, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 45, 942, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 708, 45, 45, 45, 45, 763, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 809, 810, 67, 67, 67, 67, 783, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1303, 0, 0, 0, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 45, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 67, 67, 67, 67, 1027, 67, 67, 67, 67, 1032, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1097, 1064, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 67, 1098, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 331, 97, 97, 97, 97, 1158, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 1309, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1374, 97, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1240, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1252, 67, 97, 97, 97, 1635, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1800, 97, 45, 45, 45, 97, 97, 1793, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1743, 45, 45, 45, 1746, 45, 0, 97, 97, 97, 97, 97, 1851, 97, 45, 45, 45, 45, 1856, 45, 45, 45, 45, 1864, 45, 45, 67, 67, 1869, 67, 67, 67, 67, 1874, 67, 0, 97, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 211, 67, 67, 67, 67, 67, 67, 240, 67, 67, 67, 67, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 67, 67, 268, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 290, 97, 97, 97, 305, 97, 97, 319, 97, 97, 97, 330, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 643, 367, 41606, 97, 97, 348, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 395, 45, 45, 45, 400, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 45, 972, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1086, 25403, 1090, 66365, 1094, 0, 0, 97, 843, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 1121, 97, 97, 97, 97, 1126, 97, 97, 97, 97, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1400, 45, 67, 67, 67, 1011, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1304, 0, 0, 0, 1190, 45, 45, 1193, 1194, 45, 45, 45, 45, 45, 1199, 45, 1201, 45, 45, 45, 45, 1911, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 67, 67, 45, 1205, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1217, 45, 45, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 1229, 45, 45, 45, 1388, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1574, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 1254, 67, 67, 67, 67, 67, 1259, 67, 1261, 67, 67, 67, 67, 1265, 67, 67, 67, 67, 67, 67, 1708, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 1289, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1087, 25403, 1091, 66365, 1095, 0, 0, 97, 97, 97, 97, 1339, 97, 1341, 97, 97, 97, 97, 1345, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 573, 97, 97, 97, 97, 97, 97, 1717, 97, 0, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1329, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 97, 97, 97, 1365, 97, 97, 97, 97, 1369, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1399, 45, 45, 45, 1413, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1669, 45, 1422, 45, 45, 1425, 45, 45, 1428, 45, 1429, 67, 67, 67, 67, 67, 67, 67, 67, 1468, 67, 67, 67, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 539, 67, 67, 1475, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 97, 97, 1530, 97, 0, 45, 45, 1534, 45, 45, 45, 45, 45, 45, 45, 45, 1956, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 67, 67, 1601, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 67, 1632, 97, 1634, 0, 97, 97, 97, 1640, 97, 97, 97, 1643, 97, 97, 1645, 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1660, 1661, 45, 45, 45, 45, 1665, 1666, 45, 45, 45, 45, 45, 1670, 1692, 1693, 67, 67, 67, 67, 67, 1697, 67, 67, 67, 67, 67, 67, 67, 1702, 97, 97, 1714, 1715, 97, 97, 97, 97, 0, 1721, 1722, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 97, 97, 1362, 1726, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 1734, 97, 97, 97, 97, 97, 848, 849, 97, 97, 97, 97, 856, 97, 97, 97, 97, 97, 354, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 45, 45, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1681, 45, 0, 1846, 97, 97, 97, 97, 97, 97, 45, 45, 1854, 45, 45, 45, 45, 1859, 67, 67, 67, 1879, 67, 67, 97, 97, 1884, 97, 97, 0, 0, 0, 97, 97, 97, 1105, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 1347, 97, 1892, 97, 0, 0, 0, 97, 97, 97, 1900, 97, 97, 45, 45, 45, 45, 45, 997, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1002, 45, 45, 1005, 1006, 45, 67, 67, 67, 67, 67, 1926, 67, 67, 1928, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1737, 97, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1944, 97, 97, 1946, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 190, 45, 45, 45, 152, 155, 45, 163, 45, 45, 177, 179, 182, 45, 45, 45, 193, 197, 45, 45, 45, 1672, 45, 45, 45, 45, 45, 1677, 45, 1679, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 67, 260, 264, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 295, 299, 302, 97, 310, 97, 97, 324, 326, 329, 97, 97, 97, 0, 97, 97, 1639, 0, 1641, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 97, 1523, 97, 97, 97, 97, 97, 97, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 97, 97, 312, 97, 97, 97, 97, 97, 97, 97, 97, 1123, 97, 97, 97, 97, 97, 97, 97, 340, 344, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 373, 375, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 435, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1410, 45, 45, 45, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 67, 67, 67, 67, 1969, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 2064, 2065, 0, 2066, 45, 521, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 465, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1933, 0, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 18, 640, 139621, 358, 641, 0, 0, 0, 0, 364, 0, 0, 367, 0, 618, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 97, 97, 881, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 569, 97, 97, 97, 97, 97, 369, 0, 45, 652, 45, 45, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1432, 67, 67, 67, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 67, 0, 1305, 0, 1311, 0, 1317, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 1724, 97, 97, 97, 777, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 535, 67, 67, 67, 67, 67, 67, 67, 814, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 837, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 97, 97, 97, 0, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1168, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 97, 97, 0, 1637, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1801, 45, 45, 97, 875, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1151, 1152, 97, 97, 97, 67, 67, 67, 1040, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 790, 67, 67, 67, 1180, 0, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 200, 45, 45, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 67, 67, 67, 0, 0, 0, 1481, 0, 1094, 0, 0, 97, 1483, 97, 97, 97, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 1633, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1381, 0, 0, 45, 45, 45, 45, 97, 97, 1727, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 636, 45, 45, 1760, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 67, 67, 1299, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1616, 97, 97, 1803, 45, 45, 45, 45, 1807, 45, 45, 45, 45, 45, 1813, 45, 45, 45, 67, 67, 1684, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 822, 67, 67, 37689, 544, 67, 67, 1818, 67, 67, 67, 67, 1822, 67, 67, 67, 67, 67, 1828, 67, 67, 67, 67, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2012, 2013, 45, 45, 67, 67, 67, 2018, 2019, 67, 67, 97, 67, 97, 97, 97, 1833, 97, 97, 0, 0, 97, 97, 1840, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 1733, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 1849, 97, 97, 97, 45, 45, 45, 45, 45, 1857, 45, 45, 45, 1910, 45, 1912, 45, 45, 1914, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 67, 1020, 67, 45, 1861, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1446, 67, 67, 67, 67, 67, 1876, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1890, 97, 97, 97, 97, 97, 1134, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 97, 97, 97, 580, 1935, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1906, 45, 67, 67, 67, 67, 2048, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 931, 45, 45, 45, 45, 45, 45, 1674, 45, 1676, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1871, 67, 67, 67, 67, 0, 97, 97, 45, 67, 0, 97, 2060, 2061, 0, 2063, 45, 67, 0, 97, 45, 45, 156, 45, 45, 45, 45, 45, 45, 45, 45, 45, 192, 45, 45, 45, 45, 1673, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 429, 45, 45, 45, 45, 67, 67, 67, 269, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 349, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 374, 45, 45, 67, 67, 213, 217, 67, 67, 67, 67, 67, 242, 67, 247, 67, 253, 45, 45, 698, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 399, 45, 45, 0, 0, 0, 0, 925, 41606, 0, 929, 0, 0, 45, 45, 45, 45, 45, 45, 1391, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 436, 45, 67, 67, 67, 67, 1041, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1776, 67, 67, 97, 97, 97, 1099, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 888, 97, 97, 97, 1131, 97, 97, 97, 97, 1135, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 883, 97, 97, 97, 97, 97, 97, 1310, 0, 0, 0, 1316, 0, 0, 0, 0, 1100, 0, 0, 0, 97, 97, 97, 97, 97, 1107, 97, 97, 97, 97, 97, 97, 97, 97, 1343, 97, 97, 97, 97, 97, 97, 1348, 0, 0, 1317, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1868, 67, 1870, 67, 67, 67, 67, 67, 1817, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 823, 67, 37689, 544, 67, 97, 1832, 97, 97, 1834, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 1732, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1177, 0, 0, 925, 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 1941, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1991, 1992, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1998, 134, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 941, 45, 45, 944, 45, 45, 45, 45, 45, 45, 952, 45, 45, 207, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 67, 67, 67, 37689, 544, 369, 650, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1682, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 835, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1725, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 1036, 67, 67, 67, 265, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 296, 97, 97, 97, 97, 314, 97, 97, 97, 97, 332, 334, 97, 97, 97, 97, 97, 1146, 1147, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 97, 97, 345, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 372, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 45, 45, 404, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 451, 452, 45, 45, 45, 67, 1683, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 490, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 1450, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 537, 538, 67, 67, 67, 67, 67, 506, 67, 67, 508, 67, 67, 511, 67, 67, 67, 67, 0, 1476, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1484, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1499, 97, 97, 97, 97, 97, 97, 97, 97, 97, 587, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 634, 635, 97, 97, 97, 97, 97, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 97, 97, 97, 369, 0, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 1001, 45, 45, 45, 45, 45, 45, 45, 45, 715, 45, 45, 45, 720, 45, 45, 45, 45, 45, 45, 45, 45, 728, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 840, 97, 97, 97, 97, 97, 1174, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 97, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 680, 45, 968, 45, 970, 45, 973, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 962, 45, 45, 45, 45, 45, 979, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 688, 45, 45, 45, 45, 45, 45, 45, 1007, 1008, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 1044, 67, 1046, 67, 1049, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 808, 67, 67, 0, 0, 0, 1102, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 97, 97, 97, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 1138, 97, 1140, 97, 1143, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 45, 1191, 45, 45, 45, 45, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 991, 45, 67, 67, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1048, 67, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 97, 1386, 45, 1387, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 455, 45, 457, 45, 45, 1424, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1433, 67, 1434, 67, 67, 67, 67, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 1593, 67, 67, 45, 45, 1805, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1814, 45, 45, 1816, 67, 67, 67, 67, 1820, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1829, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 821, 67, 67, 67, 37689, 544, 67, 1831, 97, 97, 97, 97, 1835, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1850, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 961, 45, 45, 45, 45, 965, 45, 967, 1907, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1920, 0, 1936, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 28672, 97, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2054, 97, 97, 291, 97, 97, 97, 97, 97, 97, 320, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 926, 1179, 0, 45, 377, 45, 45, 45, 381, 45, 45, 392, 45, 45, 396, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 45, 45, 45, 67, 67, 67, 67, 463, 67, 67, 67, 467, 67, 67, 478, 67, 67, 482, 67, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 1472, 67, 502, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1460, 67, 97, 97, 97, 97, 560, 97, 97, 97, 564, 97, 97, 575, 97, 97, 579, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 930, 97, 599, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 872, 97, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1758, 0, 362, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 934, 45, 45, 45, 164, 168, 174, 178, 45, 45, 45, 45, 45, 194, 45, 45, 45, 165, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 45, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1060, 67, 67, 67, 67, 67, 67, 1052, 1053, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1063, 97, 1157, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1167, 97, 97, 97, 97, 97, 1379, 97, 97, 97, 0, 0, 0, 45, 1383, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 1812, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1471, 67, 45, 1402, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 67, 1462, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 1517, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 1636, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1705, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1842, 0, 0, 1779, 97, 97, 97, 1782, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1789, 97, 97, 0, 0, 0, 97, 1847, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 45, 737, 738, 67, 740, 67, 741, 67, 743, 67, 67, 67, 67, 67, 67, 1968, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 2062, 97, 45, 67, 0, 97, 45, 67, 67, 97, 97, 2001, 97, 0, 0, 2004, 97, 97, 0, 97, 97, 97, 97, 1797, 97, 97, 97, 97, 97, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 292, 97, 97, 97, 97, 311, 315, 321, 325, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1330, 97, 97, 1333, 1334, 97, 341, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 363, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 416, 45, 376, 45, 45, 45, 45, 382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 45, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 414, 45, 45, 45, 418, 67, 67, 67, 462, 67, 67, 67, 67, 468, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 1604, 67, 67, 67, 67, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 1067, 67, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 274, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 504, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 517, 519, 541, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 554, 97, 97, 97, 559, 97, 97, 97, 97, 565, 97, 97, 97, 97, 97, 97, 97, 1718, 0, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 906, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 597, 97, 97, 97, 97, 97, 1520, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 1656, 45, 45, 45, 97, 97, 601, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 614, 616, 638, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 661, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1815, 45, 67, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 678, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 977, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 697, 67, 67, 748, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1274, 67, 67, 67, 67, 67, 67, 67, 67, 765, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 780, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1777, 67, 97, 97, 97, 97, 97, 97, 846, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 97, 1742, 45, 45, 45, 45, 45, 45, 45, 1747, 97, 97, 97, 863, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 1178, 925, 0, 1179, 0, 97, 97, 97, 878, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 954, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 963, 45, 45, 966, 45, 45, 157, 45, 45, 171, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 1022, 67, 67, 1026, 67, 67, 67, 1030, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 1605, 67, 67, 67, 1608, 67, 67, 67, 1039, 67, 67, 1042, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 67, 0, 1100, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 97, 97, 97, 97, 1116, 97, 97, 1120, 97, 97, 97, 1124, 97, 97, 97, 97, 97, 97, 562, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1133, 97, 97, 1136, 97, 97, 97, 97, 97, 97, 97, 97, 915, 917, 97, 97, 97, 97, 97, 0, 97, 1170, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1993, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 1278, 67, 0, 0, 0, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1189, 1204, 45, 45, 45, 1207, 45, 45, 1209, 45, 1210, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 45, 689, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 805, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1249, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1300, 0, 0, 0, 0, 0, 1267, 67, 67, 1269, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 97, 1349, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 97, 0, 1980, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 677, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 953, 67, 1437, 67, 1440, 67, 67, 67, 67, 1445, 67, 67, 67, 1448, 67, 67, 67, 67, 67, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 67, 67, 67, 1473, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 834, 97, 97, 97, 97, 1490, 97, 1493, 97, 97, 97, 97, 1498, 97, 97, 97, 1501, 97, 97, 97, 0, 97, 1638, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 916, 97, 97, 97, 97, 97, 97, 0, 1528, 97, 97, 97, 0, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1932, 0, 0, 1555, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1567, 45, 45, 158, 45, 45, 172, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 67, 212, 67, 67, 67, 67, 231, 235, 241, 245, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 472, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1651, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 45, 67, 1704, 67, 1706, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1841, 97, 0, 1844, 97, 97, 97, 97, 1716, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1385, 1748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1757, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 97, 97, 1780, 97, 97, 97, 0, 0, 1786, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1730, 0, 97, 97, 97, 97, 97, 1736, 97, 1738, 67, 97, 97, 97, 97, 97, 97, 0, 1838, 97, 97, 97, 97, 97, 0, 0, 97, 1729, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 1165, 97, 97, 97, 45, 1950, 45, 45, 45, 45, 45, 45, 45, 45, 1958, 67, 67, 67, 1962, 67, 67, 67, 67, 67, 1246, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1710, 97, 97, 97, 1999, 67, 97, 97, 97, 97, 0, 2003, 97, 97, 97, 0, 97, 97, 2008, 2009, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 2052, 67, 2053, 0, 0, 0, 0, 925, 41606, 0, 0, 930, 0, 45, 45, 45, 45, 45, 45, 1392, 45, 1394, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 1565, 45, 45, 45, 1568, 0, 97, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 28672, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 679, 45, 45, 67, 67, 266, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 346, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 362, 0, 364, 0, 367, 41098, 369, 140, 371, 45, 45, 45, 379, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 449, 45, 45, 45, 45, 45, 67, 67, 542, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 97, 0, 1794, 1795, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 97, 639, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 45, 731, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 251, 67, 67, 67, 67, 67, 798, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1073, 67, 67, 67, 860, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 873, 0, 0, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 921, 97, 0, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1250, 67, 67, 1253, 0, 0, 1312, 0, 0, 0, 1318, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 97, 1155, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1141, 97, 97, 67, 67, 1439, 67, 1441, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 97, 97, 1492, 97, 1494, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 97, 67, 67, 67, 2037, 67, 97, 0, 0, 97, 97, 97, 2043, 97, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 232, 67, 67, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1975, 0, 0, 97, 874, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1142, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 65, 86, 117, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 63, 84, 115, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 61, 82, 113, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 59, 80, 111, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 57, 78, 109, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 55, 76, 107, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 53, 74, 105, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 51, 72, 103, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 49, 70, 101, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 47, 68, 99, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 45, 67, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 213085, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 0, 0, 44, 0, 0, 32863, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 41, 41, 41, 0, 0, 1138688, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 89, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 127, 127, 127, 127, 102432, 67, 262, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 342, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 360, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 45, 45, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1292, 67, 67, 1294, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1615, 97, 97, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 66, 87, 118, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 64, 85, 116, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 62, 83, 114, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 60, 81, 112, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 58, 79, 110, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 56, 77, 108, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 54, 75, 106, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 52, 73, 104, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 50, 71, 102, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 48, 69, 100, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 46, 67, 98, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 233472, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 69724, 53264, 18, 18, 49172, 0, 57366, 262144, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 45, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 28, 139621, 359, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1389, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 45, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1449, 67, 67, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1154, 97, 0, 0, 0, 0, 925, 41606, 927, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 67, 67, 45, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 951, 45, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 45, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1488, 67, 67, 267, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 347, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 361, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 734, 45, 45, 45, 67, 67, 67, 67, 67, 742, 67, 67, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1214, 45, 45, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1361, 97, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 45, 45, 0, 0, 0, 0, 2220032, 0, 0, 1130496, 0, 0, 0, 0, 2170880, 2171020, 2170880, 2170880, 18, 0, 0, 131072, 0, 0, 0, 90112, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1485, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1390, 45, 1393, 45, 45, 45, 45, 1398, 45, 45, 45, 2170880, 2171167, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2721252, 2744320, 2170880, 2170880, 2170880, 2834432, 2840040, 2170880, 2908160, 2170880, 2170880, 2936832, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3014656, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 0, 2220032, 0, 0, 0, 1142784, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3215360, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 543, 0, 545, 0, 0, 2183168, 0, 0, 831, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 2170880, 2170880, 3092480, 2170880, 2170880, 3125248, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 0, 0, 0, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 0, 0, 0, 65820, 65820, 0, 287, 97, 97, 97, 97, 97, 1783, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1791, 0, 0, 546, 70179, 0, 0, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 97, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 0, 0, 147456, 0, 0, 0, 0, 925, 41606, 0, 928, 0, 0, 45, 45, 45, 45, 45, 45, 998, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 1564, 45, 45, 45, 45, 0, 2158592, 2158592, 0, 0, 0, 0, 2232320, 2232320, 2232320, 0, 2240512, 2240512, 2240512, 2240512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640\n];\n\nJSONiqTokenizer.EXPECTED =\n[ 291, 300, 304, 341, 315, 309, 305, 295, 319, 323, 327, 329, 296, 333, 337, 339, 342, 346, 350, 294, 356, 360, 312, 367, 352, 371, 363, 375, 379, 383, 387, 391, 395, 726, 399, 405, 518, 684, 405, 405, 405, 405, 808, 405, 405, 405, 512, 405, 405, 405, 431, 405, 405, 406, 405, 405, 404, 405, 405, 405, 405, 405, 405, 405, 908, 631, 410, 415, 405, 414, 419, 608, 405, 429, 602, 405, 435, 443, 405, 441, 641, 478, 405, 447, 451, 450, 456, 643, 461, 460, 762, 679, 465, 469, 741, 473, 477, 482, 486, 492, 932, 931, 523, 498, 504, 720, 405, 510, 596, 405, 516, 941, 580, 522, 929, 527, 590, 589, 897, 939, 534, 538, 547, 551, 555, 559, 563, 567, 571, 969, 575, 708, 690, 689, 579, 584, 634, 405, 594, 731, 405, 600, 882, 405, 606, 895, 786, 452, 612, 405, 615, 620, 876, 624, 628, 638, 647, 651, 655, 659, 663, 667, 676, 683, 688, 695, 694, 791, 405, 699, 437, 405, 706, 714, 405, 712, 825, 870, 405, 718, 724, 769, 768, 823, 730, 735, 745, 751, 422, 755, 759, 425, 766, 902, 810, 587, 775, 888, 887, 405, 773, 992, 405, 779, 962, 405, 785, 781, 986, 790, 795, 797, 506, 500, 499, 801, 805, 814, 820, 829, 833, 837, 841, 845, 849, 853, 857, 861, 616, 865, 869, 868, 488, 405, 874, 816, 405, 880, 738, 405, 886, 892, 543, 405, 901, 906, 913, 912, 918, 494, 541, 922, 926, 936, 945, 949, 953, 957, 530, 966, 973, 960, 702, 701, 405, 979, 981, 405, 985, 747, 405, 990, 998, 914, 405, 996, 1004, 672, 975, 974, 1014, 1002, 1008, 670, 1012, 405, 405, 405, 405, 405, 401, 1018, 1022, 1026, 1106, 1071, 1111, 1111, 1111, 1082, 1145, 1030, 1101, 1034, 1038, 1106, 1106, 1106, 1106, 1046, 1206, 1052, 1106, 1072, 1111, 1111, 1042, 1134, 1065, 1111, 1112, 1056, 1160, 1207, 1062, 1204, 1208, 1069, 1106, 1106, 1106, 1076, 1111, 1207, 1161, 1122, 1205, 1064, 1094, 1106, 1106, 1107, 1111, 1111, 1111, 1078, 1086, 1207, 1092, 1098, 1046, 1058, 1106, 1106, 1110, 1111, 1111, 1116, 1120, 1161, 1126, 1202, 1104, 1106, 1145, 1146, 1129, 1138, 1088, 1151, 1048, 1157, 1153, 1132, 1141, 1165, 1107, 1111, 1172, 1179, 1109, 1183, 1175, 1143, 1147, 1187, 1108, 1191, 1195, 1144, 1199, 1168, 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1557, 1247, 1241, 1241, 1038, 1434, 1241, 1241, 1241, 1241, 1254, 1275, 1617, 1241, 1280, 1287, 1241, 1241, 1241, 1287, 1241, 2114, 1291, 1241, 1243, 1241, 2049, 1824, 2094, 2095, 1520, 1309, 1241, 1241, 1302, 1241, 1321, 1311, 1241, 1241, 1313, 1778, 1325, 1336, 1241, 1241, 1325, 1330, 1353, 1241, 1241, 1695, 1354, 1241, 1241, 1241, 1294, 1686, 1331, 1241, 1696, 1368, 1241, 1338, 1370, 1241, 1392, 1399, 1364, 2017, 1406, 2016, 1405, 1716, 1406, 1407, 1422, 1417, 1421, 1241, 1241, 1241, 1349, 1426, 1241, 1774, 1756, 1241, 1773, 1241, 1241, 1345, 1964, 1812, 1432, 1241, 1241, 1345, 1993, 1459, 1241, 1241, 1241, 1395, 1848, 1767, 1465, 1241, 1241, 1394, 1847, 1242, 1477, 1241, 1241, 1428, 1241, 1445, 1492, 1241, 1241, 1438, 1241, 1499, 1241, 1241, 1241, 1455, 1241, 1818, 1448, 1241, 1250, 1241, 2026, 1623, 1449, 1241, 1612, 1616, 1241, 1614, 1241, 1257, 1241, 1241, 1985, 1292, 1586, 1512, 1241, 1517, 2050, 1526, 1674, 1519, 1524, 1647, 2051, 1532, 1537, 1551, 1544, 1550, 1555, 1561, 1571, 1578, 1584, 1590, 1591, 1653, 1595, 1602, 1606, 1610, 1634, 1628, 1640, 1633, 1645, 1241, 1241, 1241, 1469, 1241, 1970, 1651, 1241, 1270, 1241, 1241, 1819, 1449, 1241, 1293, 1664, 1241, 1241, 1481, 1485, 1574, 1672, 1241, 1241, 1513, 1317, 1487, 1684, 1241, 1241, 1533, 1299, 1694, 1241, 1241, 1295, 1241, 1241, 1241, 1546, 1700, 1241, 1241, 1707, 1241, 1713, 1241, 1849, 1715, 1241, 1720, 1241, 1276, 1267, 1241, 1241, 2107, 1657, 1864, 1241, 1881, 1241, 1326, 1292, 1241, 1685, 1358, 1724, 1338, 1241, 1363, 1362, 1342, 1340, 1361, 1339, 1833, 1372, 1360, 1833, 1833, 1342, 1343, 1835, 1341, 1731, 1738, 1344, 1241, 1745, 1241, 1379, 1241, 1241, 2092, 1241, 1388, 1761, 1754, 1241, 1386, 1241, 1400, 1760, 1241, 1241, 1241, 1598, 1734, 1241, 1241, 1241, 1635, 1645, 1241, 1780, 1766, 1241, 1241, 1332, 1771, 1241, 1241, 1629, 2079, 1241, 1242, 1784, 1241, 1241, 1680, 1639, 2063, 1790, 1241, 1241, 1741, 1241, 1241, 1800, 1241, 1241, 1762, 1473, 1241, 1806, 1241, 1241, 1786, 1240, 1709, 1241, 1241, 1241, 1668, 1811, 1241, 1940, 1241, 1401, 1974, 1241, 1408, 1413, 1382, 1241, 1816, 1241, 1241, 1802, 2086, 1811, 1241, 1817, 1945, 1823, 2095, 2095, 2047, 2094, 2046, 2080, 1241, 1409, 1312, 1376, 2096, 2048, 1241, 1241, 1807, 1241, 1241, 1241, 2035, 1241, 1241, 1828, 1241, 2057, 2061, 1241, 1241, 1843, 1241, 2059, 1241, 1241, 1241, 1690, 1847, 1241, 1241, 1241, 1703, 2102, 1848, 1241, 1241, 1853, 1292, 1848, 1241, 2016, 1857, 1241, 2002, 1868, 1241, 1436, 1241, 1241, 1271, 1305, 1241, 1874, 1241, 1241, 1884, 2037, 1892, 1241, 1890, 1241, 1461, 1241, 1241, 1795, 1241, 1241, 1891, 1241, 1878, 1241, 1888, 1241, 1888, 1905, 1896, 2087, 1912, 1903, 1241, 1911, 1906, 1916, 1905, 2027, 1863, 1925, 2088, 1859, 1861, 1922, 1927, 1931, 1935, 1494, 1241, 1241, 1918, 1907, 1939, 1917, 1944, 1949, 1241, 1241, 1451, 1955, 1241, 1241, 1241, 1796, 1727, 2061, 1241, 1241, 1899, 1241, 1660, 1968, 1241, 1241, 1951, 1678, 1978, 1241, 1241, 1241, 1839, 1241, 1241, 1984, 1982, 1241, 1488, 1241, 1241, 1624, 1450, 1989, 1241, 1241, 1241, 1870, 1995, 1292, 1241, 1241, 1958, 1261, 1241, 1996, 1241, 1241, 1241, 2039, 2008, 1241, 1241, 1750, 2000, 1241, 1256, 2001, 1960, 1241, 1564, 1241, 1504, 1241, 1241, 1442, 1241, 1241, 1564, 1528, 1263, 1241, 1508, 1241, 1241, 1468, 1498, 2006, 1540, 2015, 1539, 2014, 1748, 2013, 1539, 1831, 2014, 2012, 1500, 1567, 2022, 2021, 1241, 1580, 1241, 1241, 2033, 2037, 1791, 2045, 2031, 1241, 1621, 1241, 1641, 2044, 1241, 1241, 1241, 2093, 1241, 1241, 2055, 1241, 1241, 2067, 1241, 1283, 1241, 1241, 1241, 2101, 2071, 1241, 1241, 1241, 2073, 1848, 2040, 1241, 1241, 1241, 2077, 1241, 1241, 2106, 1241, 1241, 2084, 1241, 2111, 1241, 1241, 1381, 1380, 1241, 1241, 1241, 2100, 1241, 2129, 2118, 2122, 2126, 2197, 2133, 3010, 2825, 2145, 2698, 2156, 2226, 2160, 2161, 2165, 2174, 2293, 2194, 2630, 2201, 2203, 2152, 3019, 2226, 2263, 2209, 2213, 2218, 2269, 2292, 2269, 2269, 2184, 2226, 2238, 2148, 2151, 3017, 2245, 2214, 2269, 2269, 2185, 2226, 2292, 2269, 2291, 2269, 2269, 2269, 2292, 2205, 3019, 2226, 2226, 2160, 2160, 2160, 2261, 2160, 2160, 2160, 2262, 2276, 2160, 2160, 2277, 2216, 2283, 2216, 2269, 2269, 2268, 2269, 2267, 2269, 2269, 2269, 2271, 2568, 2292, 2269, 2293, 2269, 2182, 2190, 2269, 2186, 2226, 2226, 2226, 2226, 2227, 2160, 2160, 2160, 2160, 2263, 2160, 2275, 2277, 2282, 2215, 2217, 2269, 2269, 2291, 2269, 2269, 2293, 2291, 2269, 2220, 2269, 2295, 2294, 2269, 2269, 2305, 2233, 2262, 2278, 2218, 2269, 2234, 2226, 2226, 2228, 2160, 2160, 2160, 2289, 2220, 2294, 2294, 2269, 2269, 2304, 2269, 2160, 2160, 2287, 2269, 2269, 2305, 2269, 2269, 2312, 2269, 2269, 2225, 2226, 2160, 2287, 2289, 2219, 2304, 2295, 2314, 2234, 2226, 2314, 2269, 2226, 2226, 2160, 2288, 2219, 2222, 2304, 2296, 2269, 2224, 2160, 2160, 2269, 2302, 2294, 2314, 2224, 2226, 2288, 2220, 2294, 2269, 2290, 2269, 2269, 2293, 2269, 2269, 2269, 2269, 2270, 2221, 2313, 2225, 2227, 2160, 2300, 2269, 2225, 2261, 2309, 2234, 2229, 2223, 2318, 2318, 2318, 2328, 2336, 2340, 2344, 2350, 2637, 2712, 2358, 2362, 2372, 2135, 2378, 2398, 2135, 2135, 2135, 2135, 2136, 2417, 2241, 2135, 2378, 2135, 2135, 2980, 2984, 2135, 3006, 2135, 2135, 2135, 2945, 2931, 2425, 2400, 2135, 2135, 2135, 2954, 2135, 2481, 2433, 2135, 2135, 2988, 2824, 2135, 2135, 2482, 2434, 2135, 2135, 2440, 2445, 2452, 2135, 2135, 2998, 3002, 2961, 2441, 2446, 2453, 2463, 2974, 2135, 2135, 2135, 2140, 2642, 2709, 2459, 2470, 2465, 2135, 2135, 3005, 2135, 2135, 2987, 2823, 2458, 2469, 2464, 2975, 2135, 2135, 2135, 2353, 2488, 2447, 2324, 2974, 2135, 2409, 2459, 2448, 2135, 2961, 2487, 2446, 2476, 2323, 2973, 2135, 2135, 2135, 2354, 2476, 2974, 2135, 2135, 2135, 2957, 2135, 2135, 2960, 2135, 2135, 2135, 2363, 2409, 2459, 2474, 2465, 2487, 2571, 2973, 2135, 2135, 2168, 2973, 2135, 2135, 2135, 2959, 2135, 2135, 2135, 2506, 2135, 2957, 2488, 2170, 2135, 2135, 2135, 2960, 2135, 2818, 2493, 2135, 2135, 3033, 2135, 2135, 2135, 2934, 2819, 2494, 2135, 2135, 2135, 2976, 2780, 2499, 2135, 2135, 2135, 3000, 2968, 2135, 2935, 2135, 2135, 2135, 2364, 2507, 2135, 2135, 2934, 2135, 2135, 2780, 2492, 2507, 2135, 2135, 2506, 2780, 2135, 2135, 2782, 2780, 2135, 2782, 2135, 2783, 2374, 2514, 2135, 2135, 2135, 3007, 2530, 2974, 2135, 2135, 2135, 3008, 2135, 2135, 2134, 2135, 2526, 2531, 2975, 2135, 2135, 3042, 2581, 2575, 2956, 2135, 2135, 2135, 2394, 2135, 2508, 2535, 2840, 2844, 2495, 2135, 2135, 2136, 2684, 2537, 2842, 2846, 2135, 2136, 2561, 2581, 2551, 2536, 2841, 2845, 2975, 3043, 2582, 2843, 2555, 2135, 3040, 3044, 2538, 2844, 2975, 2135, 2135, 2253, 2644, 2672, 2542, 2554, 2135, 2135, 2346, 2873, 2551, 2555, 2135, 2135, 2135, 2381, 2559, 2565, 2538, 2553, 2135, 2560, 2914, 2576, 2590, 2135, 2135, 2135, 2408, 2136, 2596, 2624, 2135, 2135, 2135, 2409, 2135, 2618, 2597, 3008, 2135, 2135, 2380, 2956, 2601, 2135, 2135, 2135, 2410, 2620, 2624, 2135, 2136, 2383, 2135, 2135, 2783, 2623, 2135, 2135, 2393, 2888, 2136, 2621, 3008, 2135, 2618, 2618, 2622, 2135, 2135, 2405, 2414, 2619, 2384, 2624, 2135, 2136, 2950, 2135, 2138, 2135, 2139, 2135, 2604, 2623, 2135, 2140, 2878, 2665, 2957, 2622, 2135, 2135, 2428, 2762, 2606, 2612, 2135, 2135, 2501, 2586, 2604, 3038, 2135, 2604, 3036, 2387, 2958, 2386, 2135, 2141, 2135, 2421, 2387, 2385, 2135, 2385, 2384, 2384, 2135, 2386, 2628, 2384, 2135, 2135, 2501, 2596, 2591, 2135, 2135, 2135, 2400, 2135, 2634, 2135, 2135, 2559, 2580, 2575, 2648, 2135, 2135, 2135, 2429, 2649, 2135, 2135, 2135, 2435, 2654, 2658, 2135, 2135, 2135, 2436, 2649, 2178, 2659, 2135, 2135, 2595, 2601, 2669, 2677, 2135, 2135, 2616, 2957, 2879, 2665, 2691, 2135, 2363, 2367, 2900, 2878, 2664, 2690, 2975, 2877, 2643, 2670, 2974, 2671, 2975, 2135, 2135, 2619, 2608, 2669, 2673, 2135, 2135, 2653, 2177, 2672, 2135, 2135, 2135, 2486, 2168, 2251, 2255, 2695, 2974, 2709, 2135, 2135, 2135, 2487, 2169, 2399, 2716, 2975, 2135, 2363, 2770, 2776, 2640, 2717, 2135, 2135, 2729, 2135, 2135, 2641, 2718, 2135, 2135, 2135, 2505, 2135, 2640, 2257, 2974, 2135, 2727, 2975, 2135, 2365, 2332, 2895, 2957, 2135, 2959, 2135, 2365, 2749, 2754, 2959, 2958, 2958, 2135, 2380, 2793, 2799, 2135, 2735, 2738, 2135, 2381, 2135, 2135, 2940, 2974, 2135, 2744, 2135, 2135, 2739, 2519, 2976, 2745, 2135, 2135, 2135, 2509, 2755, 2135, 2135, 2135, 2510, 2772, 2778, 2135, 2135, 2740, 2520, 2135, 2771, 2777, 2135, 2135, 2759, 2750, 2792, 2798, 2135, 2135, 2781, 2392, 2779, 2135, 2135, 2135, 2521, 2135, 2679, 2248, 2135, 2135, 2681, 2480, 2135, 2135, 2786, 3000, 2135, 2679, 2683, 2135, 2135, 2416, 2135, 2135, 2135, 2525, 2135, 2730, 2135, 2135, 2135, 2560, 2581, 2135, 2805, 2135, 2135, 2804, 2962, 2832, 2974, 2135, 2382, 2135, 2135, 2958, 2135, 2135, 2960, 2135, 2829, 2833, 2975, 2961, 2965, 2969, 2973, 2968, 2972, 2135, 2135, 2135, 2641, 2135, 2515, 2966, 2970, 2851, 2478, 2135, 2135, 2808, 2135, 2809, 2135, 2135, 2135, 2722, 2852, 2479, 2135, 2135, 2815, 2135, 2135, 2766, 2853, 2480, 2135, 2857, 2479, 2135, 2388, 2723, 2135, 2364, 2331, 2894, 2858, 2480, 2135, 2135, 2850, 2478, 2135, 2135, 2135, 2806, 2864, 2135, 2399, 2256, 2974, 2865, 2135, 2135, 2862, 2135, 2135, 2135, 2685, 2807, 2865, 2135, 2135, 2807, 2863, 2135, 2135, 2135, 2686, 2884, 2807, 2135, 2809, 2807, 2135, 2135, 2807, 2806, 2705, 2810, 2808, 2700, 2869, 2702, 2702, 2702, 2704, 2883, 2135, 2135, 2135, 2730, 2884, 2135, 2135, 2135, 2731, 2321, 2546, 2135, 2135, 2876, 2255, 2889, 2322, 2547, 2135, 2401, 2135, 2135, 2135, 2949, 2367, 2893, 2544, 2973, 2906, 2973, 2135, 2135, 2877, 2663, 2368, 2901, 2907, 2974, 2366, 2899, 2905, 2972, 2920, 2974, 2135, 2135, 2911, 2900, 2920, 2363, 2913, 2918, 2465, 2941, 2975, 2135, 2135, 2924, 2928, 2974, 2945, 2931, 2135, 2135, 2135, 2765, 2136, 2955, 2135, 2135, 2939, 2931, 2380, 2135, 2135, 2380, 2135, 2135, 2135, 2780, 2507, 2137, 2135, 2137, 2135, 2139, 2135, 2806, 2810, 2135, 2135, 2135, 2992, 2135, 2135, 2962, 2966, 2970, 2974, 2135, 2135, 2787, 3014, 2135, 2521, 2993, 2135, 2135, 2135, 2803, 2135, 2135, 2135, 2618, 2607, 2997, 3001, 2135, 2135, 2963, 2967, 2971, 2975, 2135, 2135, 2791, 2797, 2135, 3009, 2999, 3003, 2787, 3001, 2135, 2135, 2964, 2968, 2785, 2999, 3003, 2135, 2135, 2135, 2804, 2785, 2999, 3004, 2135, 2135, 2135, 2807, 2135, 2135, 3023, 2135, 2135, 2135, 2811, 2135, 2135, 3027, 2135, 2135, 2135, 2837, 2968, 3028, 2135, 2135, 2135, 2875, 2135, 2784, 3029, 2135, 2408, 2457, 2446, 0, 14, 0, -2120220672, 1610612736, -2074083328, -2002780160, -2111830528, 1073872896, 1342177280, 1075807216, 4096, 16384, 2048, 8192, 0, 8192, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, -2145386496, 8388608, 1073741824, 0, 0x80000000, 0x80000000, 2097152, 2097152, 2097152, 536870912, 0, 0, 134217728, 33554432, 1536, 268435456, 268435456, 268435456, 268435456, 128, 256, 32, 0, 65536, 131072, 524288, 16777216, 268435456, 0x80000000, 1572864, 1835008, 640, 32768, 65536, 262144, 1048576, 2097152, 196608, 196800, 196608, 196608, 0, 131072, 131072, 131072, 196608, 196624, 196608, 196624, 196608, 196608, 128, 4096, 16384, 16384, 2048, 0, 4, 0, 0, 0x80000000, 2097152, 0, 1024, 32, 32, 0, 65536, 1572864, 1048576, 32768, 32768, 32768, 32768, 196608, 196608, 196608, 64, 64, 196608, 196608, 131072, 131072, 131072, 131072, 268435456, 268435456, 64, 196736, 196608, 196608, 196608, 131072, 196608, 196608, 16384, 4, 4, 4, 2, 32, 32, 65536, 1048576, 12582912, 1073741824, 0, 0, 2, 8, 16, 96, 2048, 32768, 0, 0, 131072, 268435456, 268435456, 268435456, 256, 256, 196608, 196672, 196608, 196608, 196608, 196608, 4, 0, 256, 256, 256, 256, 32, 32, 32768, 32, 32, 32, 32, 32768, 268435456, 268435456, 268435456, 196608, 196608, 196608, 196624, 196608, 196608, 196608, 16, 16, 16, 268435456, 196608, 64, 64, 64, 196608, 196608, 196608, 196672, 268435456, 64, 64, 196608, 196608, 16, 196608, 196608, 196608, 268435456, 64, 196608, 131072, 262144, 4194304, 25165824, 33554432, 134217728, 268435456, 268435456, 196608, 262152, 8, 256, 512, 3072, 16384, 200, -1073741816, 8392713, 40, 8392718, 520, 807404072, 40, 520, 100663304, 0, 0, -540651761, -540651761, 257589048, 0, 262144, 0, 0, 3, 8, 256, 0, 4, 6, 4100, 8388612, 0, 0, 0, 3, 4, 8, 256, 512, 1024, 0, 2097152, 0, 0, -537854471, -537854471, 0, 100663296, 0, 0, 1, 2, 0, 0, 0, 16384, 0, 0, 0, 96, 14336, 0, 0, 0, 7, 8, 234881024, 0, 0, 0, 8, 0, 0, 0, 0, 262144, 0, 0, 16, 64, 384, 512, 0, 1, 1, 0, 12582912, 0, 0, 0, 0, 33554432, 67108864, -606084144, -606084144, -606084138, 0, 0, 28, 32, 768, 1966080, -608174080, 0, 0, 0, 14, 35056, 16, 64, 896, 24576, 98304, 98304, 131072, 262144, 524288, 1048576, 4194304, 25165824, 1048576, 62914560, 134217728, -805306368, 0, 384, 512, 16384, 65536, 131072, 262144, 29360128, 33554432, 134217728, 268435456, 1073741824, 0x80000000, 262144, 524288, 1048576, 29360128, 33554432, 524288, 1048576, 16777216, 33554432, 134217728, 268435456, 1073741824, 0, 0, 0, 123856, 1966080, 0, 64, 384, 16384, 65536, 131072, 16384, 65536, 524288, 268435456, 0x80000000, 0, 0, 524288, 0x80000000, 0, 0, 1, 16, 0, 256, 524288, 0, 0, 0, 25, 96, 128, -537854471, 0, 0, 0, 32, 7404800, -545259520, 0, 0, 0, 60, 0, 249, 64768, 1048576, 6291456, 6291456, 25165824, 100663296, 402653184, 1073741824, 96, 128, 1280, 2048, 4096, 57344, 6291456, 57344, 6291456, 8388608, 16777216, 33554432, 201326592, 1342177280, 0x80000000, 0, 57344, 6291456, 8388608, 100663296, 134217728, 0x80000000, 0, 0, 0, 1, 8, 16, 64, 128, 64, 128, 256, 1024, 131072, 131072, 131072, 262144, 524288, 16777216, 57344, 6291456, 8388608, 67108864, 134217728, 64, 256, 1024, 2048, 4096, 57344, 64, 256, 0, 24576, 32768, 6291456, 67108864, 134217728, 0, 1, 64, 256, 24576, 32768, 4194304, 32768, 4194304, 67108864, 0, 0, 64, 256, 0, 0, 24576, 32768, 0, 16384, 4194304, 67108864, 64, 16384, 0, 0, 1, 64, 256, 16384, 4194304, 67108864, 0, 0, 0, 16384, 0, 16384, 16384, 0, -470447874, -470447874, -470447874, 0, 0, 128, 0, 0, 8, 96, 2048, 32768, 262144, 8388608, 35056, 1376256, -471859200, 0, 0, 14, 16, 224, 2048, 32768, 2097152, 4194304, 8388608, -486539264, 0, 96, 128, 2048, 32768, 262144, 2097152, 262144, 2097152, 8388608, 33554432, 536870912, 1073741824, 0x80000000, 0, 1610612736, 0x80000000, 0, 0, 1, 524288, 1048576, 12582912, 0, 0, 0, 151311, 264503296, 2097152, 8388608, 33554432, 1610612736, 0x80000000, 262144, 8388608, 33554432, 536870912, 67108864, 4194304, 0, 4194304, 0, 4194304, 4194304, 0, 0, 524288, 8388608, 536870912, 1073741824, 0x80000000, 1, 4097, 8388609, 96, 2048, 32768, 1073741824, 0x80000000, 0, 96, 2048, 0x80000000, 0, 0, 96, 2048, 0, 0, 1, 12582912, 0, 0, 0, 0, 1641895695, 1641895695, 0, 0, 0, 249, 7404800, 15, 87808, 1835008, 1639972864, 0, 768, 5120, 16384, 65536, 1835008, 1835008, 12582912, 16777216, 1610612736, 0, 3, 4, 8, 768, 4096, 65536, 0, 0, 256, 512, 786432, 8, 256, 512, 4096, 16384, 1835008, 16384, 1835008, 12582912, 1610612736, 0, 0, 0, 256, 0, 0, 0, 4, 8, 16, 32, 1, 2, 8, 256, 16384, 524288, 16384, 524288, 1048576, 12582912, 1610612736, 0, 0, 0, 8388608, 0, 0, 0, 524288, 4194304, 0, 0, 0, 8388608, -548662288, -548662288, -548662288, 0, 0, 256, 16384, 65536, 520093696, -1073741824, 0, 0, 0, 16777216, 0, 16, 32, 960, 4096, 4980736, 520093696, 1073741824, 0, 32, 896, 4096, 57344, 1048576, 6291456, 8388608, 16777216, 100663296, 134217728, 268435456, 0x80000000, 0, 512, 786432, 4194304, 33554432, 134217728, 268435456, 0, 786432, 4194304, 134217728, 268435456, 0, 524288, 4194304, 268435456, 0, 0, 0, 0, 0, 4194304, 4194304, -540651761, 0, 0, 0, 2, 4, 8, 16, 96, 128, 264503296, -805306368, 0, 0, 0, 8, 256, 512, 19456, 131072, 3072, 16384, 131072, 262144, 8388608, 16777216, 512, 1024, 2048, 16384, 131072, 262144, 131072, 262144, 8388608, 33554432, 201326592, 268435456, 0, 3, 4, 256, 1024, 2048, 57344, 16384, 131072, 8388608, 33554432, 134217728, 268435456, 0, 3, 256, 1024, 16384, 131072, 33554432, 134217728, 1073741824, 0x80000000, 0, 0, 256, 524288, 0x80000000, 0, 3, 256, 33554432, 134217728, 1073741824, 0, 1, 2, 33554432, 1, 2, 134217728, 1073741824, 0, 1, 2, 134217728, 0, 0, 0, 64, 0, 0, 0, 16, 32, 896, 4096, 786432, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 0, 0, 0, 15, 0, 4980736, 4980736, 4980736, 70460, 70460, 3478332, 0, 0, 1008, 4984832, 520093696, 60, 4864, 65536, 0, 0, 0, 12, 16, 32, 256, 512, 4096, 65536, 0, 0, 0, 67108864, 0, 0, 0, 12, 0, 256, 512, 65536, 0, 0, 1024, 512, 131072, 131072, 4, 16, 32, 65536, 0, 4, 16, 32, 0, 0, 0, 4, 16, 0, 0, 16384, 67108864, 0, 0, 1, 24, 96, 128, 256, 1024\n];\n\nJSONiqTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"JSONChar\",\n  \"JSONCharRef\",\n  \"JSONPredefinedCharRef\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$$'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar JSONiqTokenizer = _dereq_('./JSONiqTokenizer').JSONiqTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit'.split('|');\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'JSONPredefinedCharRef', token: 'constant.language.escape' },\n        { name: 'JSONCharRef', token: 'constant.language.escape' },\n        { name: 'JSONChar', token: 'string' }\n    ]\n};\n    \nexports.JSONiqLexer = function(){ return new Lexer(JSONiqTokenizer, Rules); };\n},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}]},{},[\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\"]);\n\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\n  var oop = require(\"../../lib/oop\");\n  var Behaviour = require('../behaviour').Behaviour;\n  var CstyleBehaviour = require('./cstyle').CstyleBehaviour;\n  var XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\n  var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nfunction hasType(token, type) {\n    var hasType = true;\n    var typeList = token.type.split('.');\n    var needleList = type.split('.');\n    needleList.forEach(function(needle){\n        if (typeList.indexOf(needle) == -1) {\n            hasType = false;\n            return false;\n        }\n    });\n    return hasType;\n}\n \n  var XQueryBehaviour = function () {\n      \n      this.inherit(CstyleBehaviour, [\"braces\", \"parens\", \"string_dquotes\"]); // Get string behaviour\n      this.inherit(XmlBehaviour); // Get xml behaviour\n      \n      this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken();\n            var atCursor = false;\n            var state = JSON.parse(state).pop();\n            if ((token && token.value === '>') || state !== \"StartTag\") return;\n            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){\n                do {\n                    token = iterator.stepBackward();\n                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));\n            } else {\n                atCursor = true;\n            }\n            var previous = iterator.stepBackward();\n            if (!token || !hasType(token, 'meta.tag') || (previous !== null && previous.value.match('/'))) {\n                return;\n            }\n            var tag = token.value.substring(1);\n            if (atCursor){\n                var tag = tag.substring(0, position.column - token.start);\n            }\n\n            return {\n               text: '>' + '</' + tag + '>',\n               selection: [1, 1]\n            };\n        }\n    });\n\n  };\n  oop.inherits(XQueryBehaviour, Behaviour);\n\n  exports.XQueryBehaviour = XQueryBehaviour;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/jsoniq\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/jsoniq_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JSONiqLexer = require(\"./xquery/jsoniq_lexer\").JSONiqLexer;\nvar Range = require(\"../range\").Range;\nvar XQueryBehaviour = require(\"./behaviour/xquery\").XQueryBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Anchor = require(\"../anchor\").Anchor;\n\nvar Mode = function() {\n    this.$tokenizer   = new JSONiqLexer();\n    this.$behaviour   = new XQueryBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n    this.$highlightRules = new TextHighlightRules();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.completer = {\n        getCompletions: function(editor, session, pos, prefix, callback) {\n            if (!session.$worker)\n                return callback();\n            session.$worker.emit(\"complete\", { data: { pos: pos, prefix: prefix } });\n            session.$worker.on(\"complete\", function(e){\n                callback(null, e.data);\n            });\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var match = line.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);\n        if (match)\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*[\\}\\)]/.test(input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*[\\}\\)])/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(:(.*):\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(:\" + line + \":)\");\n        }\n    };\n    this.createWorker = function(session) {\n        \n      var worker = new WorkerClient([\"ace\"], \"ace/mode/xquery_worker\", \"XQueryWorker\");\n        var that = this;\n\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"ok\", function(e) {\n          session.clearAnnotations();\n        });\n        \n        worker.on(\"markers\", function(e) {\n          session.clearAnnotations();\n          that.addMarkers(e.data, session);\n        });\n \n        return worker;\n    };\n \n    this.removeMarkers = function(session) {\n        var markers = session.getMarkers(false);\n        for (var id in markers) {\n            if (markers[id].clazz.indexOf('language_highlight_') === 0) {\n                session.removeMarker(id);\n            }\n        }\n        for (var i = 0; i < session.markerAnchors.length; i++) {\n            session.markerAnchors[i].detach();\n        }\n        session.markerAnchors = [];\n    };\n\n    this.addMarkers = function(annos, mySession) {\n        var _self = this;\n        \n        if (!mySession.markerAnchors) mySession.markerAnchors = [];\n        this.removeMarkers(mySession);\n        mySession.languageAnnos = [];\n        annos.forEach(function(anno) {\n            var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0);\n            mySession.markerAnchors.push(anchor);\n            var markerId;\n            var colDiff = anno.pos.ec - anno.pos.sc;\n            var rowDiff = anno.pos.el - anno.pos.sl;\n            var gutterAnno = {\n                guttertext: anno.message,\n                type: anno.level || \"warning\",\n                text: anno.message\n            };\n\n            function updateFloat(single) {\n                if (markerId)\n                    mySession.removeMarker(markerId);\n                gutterAnno.row = anchor.row;\n                if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) {\n                    var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec);\n                    markerId = mySession.addMarker(range, \"language_highlight_\" + (anno.type ? anno.type : \"default\"));\n                }\n                if (single) mySession.setAnnotations(mySession.languageAnnos);\n            }\n            updateFloat();\n            anchor.on(\"change\", function() {\n                updateFloat(true);\n            });\n            if (anno.message) mySession.languageAnnos.push(gutterAnno);\n        });\n        mySession.setAnnotations(mySession.languageAnnos);\n    }; \n\n    this.$id = \"ace/mode/jsoniq\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-jsp.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JavaHighlightRules = function() {\n    var keywords = (\n    \"abstract|continue|for|new|switch|\" +\n    \"assert|default|goto|package|synchronized|\" +\n    \"boolean|do|if|private|this|\" +\n    \"break|double|implements|protected|throw|\" +\n    \"byte|else|import|public|throws|\" +\n    \"case|enum|instanceof|return|transient|\" +\n    \"catch|extends|int|short|try|\" +\n    \"char|final|interface|static|void|\" +\n    \"class|finally|long|strictfp|volatile|\" +\n    \"const|float|native|super|while|\" +\n    \"var\"\n    );\n\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                regex: \"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",\n                token: \"keyword\",\n                next: [{\n                    regex: \"{\",\n                    token: \"paren.lparen\",\n                    next: [{\n                        regex: \"}\",\n                        token: \"paren.rparen\",\n                        next: \"start\"\n                    }, {\n                        regex: \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n                        token: \"keyword\" \n                    }]\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    token : \"identifier\",\n                    regex : \"\\\\w+\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \".\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    regex: \"\", // exit if there is anything else\n                    next: \"start\"\n                }]\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(JavaHighlightRules, TextHighlightRules);\n\nexports.JavaHighlightRules = JavaHighlightRules;\n});\n\ndefine(\"ace/mode/jsp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/java_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\n\nvar JspHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var builtinVariables = 'request|response|out|session|' +\n            'application|config|pageContext|page|Exception';\n\n    var keywords = 'page|include|taglib';\n\n    var startRules = [\n        {\n            token : \"comment\",\n            regex : \"<%--\",\n            push : \"jsp-dcomment\"\n        }, {\n            token : \"meta.tag\", // jsp open tag\n            regex : \"<%@?|<%=?|<%!?|<jsp:[^>]+>\",\n            push  : \"jsp-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token : \"meta.tag\", // jsp close tag\n            regex : \"%>|<\\\\/jsp:[^>]+>\",\n            next  : \"pop\"\n        }, {\n            token: \"variable.language\",\n            regex : builtinVariables\n        }, {\n            token: \"keyword\",\n            regex : keywords\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(JavaHighlightRules, \"jsp-\", endRules, [\"start\"]);\n\n    this.addRules({\n        \"jsp-dcomment\" : [{\n            token : \"comment\",\n            regex : \".*?--%>\",\n            next : \"pop\"\n        }]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(JspHighlightRules, HtmlHighlightRules);\n\nexports.JspHighlightRules = JspHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/jsp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JspHighlightRules = require(\"./jsp_highlight_rules\").JspHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JspHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/jsp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-jssm.js",
    "content": "define(\"ace/mode/jssm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JSSMHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"punctuation.definition.comment.mn\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.mn\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.jssm\"\n            }],\n            comment: \"block comment\"\n        }, {\n            token: \"comment.line.jssm\",\n            regex: /\\/\\//,\n            push: [{\n                token: \"comment.line.jssm\",\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.line.jssm\"\n            }],\n            comment: \"block comment\"\n        }, {\n            token: \"entity.name.function\",\n            regex: /\\${/,\n            push: [{\n                token: \"entity.name.function\",\n                regex: /}/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"keyword.other\"\n            }],\n            comment: \"js outcalls\"\n        }, {\n            token: \"constant.numeric\",\n            regex: /[0-9]*\\.[0-9]*\\.[0-9]*/,\n            comment: \"semver\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /graph_layout\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /machine_name\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /machine_version\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /jssm_version\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_legal\",\n            regex: /<->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_none\",\n            regex: /<-/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.none_legal\",\n            regex: /->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_main\",\n            regex: /<=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.none_main\",\n            regex: /=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_none\",\n            regex: /<=/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_forced\",\n            regex: /<~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.none_forced\",\n            regex: /~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_none\",\n            regex: /<~/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_main\",\n            regex: /<-=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_legal\",\n            regex: /<=->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_forced\",\n            regex: /<-~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_legal\",\n            regex: /<~->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_forced\",\n            regex: /<=~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_main\",\n            regex: /<~=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"constant.numeric.jssmProbability\",\n            regex: /[0-9]+%/,\n            comment: \"edge probability annotation\"\n        }, {\n            token: \"constant.character.jssmAction\",\n            regex: /\\'[^']*\\'/,\n            comment: \"action annotation\"\n        }, {\n            token: \"entity.name.tag.jssmLabel.doublequoted\",\n            regex: /\\\"[^\"]*\\\"/,\n            comment: \"jssm label annotation\"\n        }, {\n            token: \"entity.name.tag.jssmLabel.atom\",\n            regex: /[a-zA-Z0-9_.+&()#@!?,]/,\n            comment: \"jssm label annotation\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nJSSMHighlightRules.metaData = {\n    fileTypes: [\"jssm\", \"jssm_state\"],\n    name: \"JSSM\",\n    scopeName: \"source.jssm\"\n};\n\n\noop.inherits(JSSMHighlightRules, TextHighlightRules);\n\nexports.JSSMHighlightRules = JSSMHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/jssm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jssm_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JSSMHighlightRules = require(\"./jssm_highlight_rules\").JSSMHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JSSMHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/jssm\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-jsx.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/jsx_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsxHighlightRules = function() {\n    var keywords = lang.arrayToMap(\n        (\"break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|\" +\n         \"if|throw|\" +\n         \"delete|in|try|\" +\n         \"class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|\" +\n         \"number|int|string|boolean|variant|\" +\n         \"log|assert\").split(\"|\")\n    );\n    \n    var buildinConstants = lang.arrayToMap(\n        (\"null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined\").split(\"|\")\n    );\n    \n    var reserved = lang.arrayToMap(\n        (\"debugger|with|\" +\n         \"const|export|\" +\n         \"let|private|public|yield|protected|\" +\n         \"extern|native|as|operator|__fake__|__readonly__\").split(\"|\")\n    );\n    \n    var identifierRe = \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\";\n    \n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : [\n                    \"storage.type\",\n                    \"text\",\n                    \"entity.name.function\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")\"\n            }, {\n                token : function(value) {\n                    if (value == \"this\")\n                        return \"variable.language\";\n                    else if (value == \"function\")\n                        return \"storage.type\";\n                    else if (keywords.hasOwnProperty(value) || reserved.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (buildinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (/^_?[A-Z][a-zA-Z0-9_]*$/.test(value))\n                        return \"language.support.class\";\n                    else\n                        return \"identifier\";\n                },\n                regex : identifierRe\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({<]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}>]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(JsxHighlightRules, TextHighlightRules);\n\nexports.JsxHighlightRules = JsxHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/jsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsx_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JsxHighlightRules = require(\"./jsx_highlight_rules\").JsxHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nfunction Mode() {\n    this.HighlightRules = JsxHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n}\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/jsx\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-julia.js",
    "content": "define(\"ace/mode/julia_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JuliaHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { include: '#function_decl' },\n         { include: '#function_call' },\n         { include: '#type_decl' },\n         { include: '#keyword' },\n         { include: '#operator' },\n         { include: '#number' },\n         { include: '#string' },\n         { include: '#comment' } ],\n      '#bracket': \n       [ { token: 'keyword.bracket.julia',\n           regex: '\\\\(|\\\\)|\\\\[|\\\\]|\\\\{|\\\\}|,' } ],\n      '#comment': \n       [ { token: \n            [ 'punctuation.definition.comment.julia',\n              'comment.line.number-sign.julia' ],\n           regex: '(#)(?!\\\\{)(.*$)'} ],\n      '#function_call': \n       [ { token: [ 'support.function.julia', 'text' ],\n           regex: '([a-zA-Z0-9_]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*\\\\()'} ],\n      '#function_decl': \n       [ { token: [ 'keyword.other.julia', 'meta.function.julia',\n               'entity.name.function.julia', 'meta.function.julia','text' ],\n           regex: '(function|macro)(\\\\s*)([a-zA-Z0-9_\\\\{]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*)([(\\\\\\\\{])'} ],\n      '#keyword':\n       [ { token: 'keyword.other.julia',\n           regex: '\\\\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\\\\b' },\n         { token: 'keyword.control.julia',\n           regex: '\\\\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\\\\b' },\n         { token: 'storage.modifier.variable.julia',\n           regex: '\\\\b(?:global|local|const|export|import|importall|using)\\\\b' },\n         { token: 'variable.macro.julia', regex: '@[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b' } ],\n      '#number': \n       [ { token: 'constant.numeric.julia',\n           regex: '\\\\b0(?:x|X)[0-9a-fA-F]*|(?:\\\\b[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]*)?(?:im)?|\\\\bInf(?:32)?\\\\b|\\\\bNaN(?:32)?\\\\b|\\\\btrue\\\\b|\\\\bfalse\\\\b' } ],\n      '#operator': \n       [ { token: 'keyword.operator.update.julia',\n           regex: '=|:=|\\\\+=|-=|\\\\*=|/=|//=|\\\\.//=|\\\\.\\\\*=|\\\\\\\\=|\\\\.\\\\\\\\=|^=|\\\\.^=|%=|\\\\|=|&=|\\\\$=|<<=|>>=' },\n         { token: 'keyword.operator.ternary.julia', regex: '\\\\?|:' },\n         { token: 'keyword.operator.boolean.julia',\n           regex: '\\\\|\\\\||&&|!' },\n         { token: 'keyword.operator.arrow.julia', regex: '->|<-|-->' },\n         { token: 'keyword.operator.relation.julia',\n           regex: '>|<|>=|<=|==|!=|\\\\.>|\\\\.<|\\\\.>=|\\\\.>=|\\\\.==|\\\\.!=|\\\\.=|\\\\.!|<:|:>' },\n         { token: 'keyword.operator.range.julia', regex: ':' },\n         { token: 'keyword.operator.shift.julia', regex: '<<|>>' },\n         { token: 'keyword.operator.bitwise.julia', regex: '\\\\||\\\\&|~' },\n         { token: 'keyword.operator.arithmetic.julia',\n           regex: '\\\\+|-|\\\\*|\\\\.\\\\*|/|\\\\./|//|\\\\.//|%|\\\\.%|\\\\\\\\|\\\\.\\\\\\\\|\\\\^|\\\\.\\\\^' },\n         { token: 'keyword.operator.isa.julia', regex: '::' },\n         { token: 'keyword.operator.dots.julia',\n           regex: '\\\\.(?=[a-zA-Z])|\\\\.\\\\.+' },\n         { token: 'keyword.operator.interpolation.julia',\n           regex: '\\\\$#?(?=.)' },\n         { token: [ 'variable', 'keyword.operator.transposed-variable.julia' ],\n           regex: '([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+)((?:\\'|\\\\.\\')*\\\\.?\\')' },\n         { token: 'text',\n           regex: '\\\\[|\\\\('},\n         { token: [ 'text', 'keyword.operator.transposed-matrix.julia' ],\n            regex: \"([\\\\]\\\\)])((?:'|\\\\.')*\\\\.?')\"} ],\n      '#string': \n       [ { token: 'punctuation.definition.string.begin.julia',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#string_escaped_char' },\n              { defaultToken: 'string.quoted.single.julia' } ] },\n         { token: 'punctuation.definition.string.begin.julia',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#string_escaped_char' },\n              { defaultToken: 'string.quoted.double.julia' } ] },\n         { token: 'punctuation.definition.string.begin.julia',\n           regex: '\\\\b[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*',\n                next: 'pop' },\n              { include: '#string_custom_escaped_char' },\n              { defaultToken: 'string.quoted.custom-double.julia' } ] },\n         { token: 'punctuation.definition.string.begin.julia',\n           regex: '`',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '`',\n                next: 'pop' },\n              { include: '#string_escaped_char' },\n              { defaultToken: 'string.quoted.backtick.julia' } ] } ],\n      '#string_custom_escaped_char': [ { token: 'constant.character.escape.julia', regex: '\\\\\\\\\"' } ],\n      '#string_escaped_char': \n       [ { token: 'constant.character.escape.julia',\n           regex: '\\\\\\\\(?:\\\\\\\\|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)' } ],\n      '#type_decl': \n       [ { token: \n            [ 'keyword.control.type.julia',\n              'meta.type.julia',\n              'entity.name.type.julia',\n              'entity.other.inherited-class.julia',\n              'punctuation.separator.inheritance.julia',\n              'entity.other.inherited-class.julia' ],\n           regex: '(type|immutable)(\\\\s+)([a-zA-Z0-9_]+)(?:(\\\\s*)(<:)(\\\\s*[.a-zA-Z0-9_:]+))?' },\n         { token: [ 'other.typed-variable.julia', 'support.type.julia' ],\n           regex: '([a-zA-Z0-9_]+)(::[a-zA-Z0-9_{}]+)' } ] };\n    \n    this.normalizeRules();\n};\n\nJuliaHighlightRules.metaData = { fileTypes: [ 'jl' ],\n      firstLineMatch: '^#!.*\\\\bjulia\\\\s*$',\n      foldingStartMarker: '^\\\\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\\\\b(?!.*\\\\bend\\\\b).*$',\n      foldingStopMarker: '^\\\\s*(?:end)\\\\b.*$',\n      name: 'Julia',\n      scopeName: 'source.julia' };\n\n\noop.inherits(JuliaHighlightRules, TextHighlightRules);\n\nexports.JuliaHighlightRules = JuliaHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/julia\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/julia_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JuliaHighlightRules = require(\"./julia_highlight_rules\").JuliaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JuliaHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.blockComment = \"\";\n    this.$id = \"ace/mode/julia\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-kotlin.js",
    "content": "define(\"ace/mode/kotlin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar KotlinHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            token: [\n                \"text\",\n                \"keyword.other.kotlin\",\n                \"text\",\n                \"entity.name.package.kotlin\",\n                \"text\"\n            ],\n            regex: /^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*))?/\n        }, {\n            include: \"#imports\"\n        }, {\n            include: \"#statements\"\n        }],\n        \"#classes\": [{\n            token: \"text\",\n            regex: /(?=\\s*(?:companion|class|object|interface))/,\n            push: [{\n                token: \"text\",\n                regex: /}|(?=$)/,\n                next: \"pop\"\n            }, {\n                token: [\"keyword.other.kotlin\", \"text\"],\n                regex: /\\b((?:companion\\s*)?)(class|object|interface)\\b/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=<|{|\\(|:)/,\n                    next: \"pop\"\n                }, {\n                    token: \"keyword.other.kotlin\",\n                    regex: /\\bobject\\b/\n                }, {\n                    token: \"entity.name.type.class.kotlin\",\n                    regex: /\\w+/\n                }]\n            }, {\n                token: \"text\",\n                regex: /</,\n                push: [{\n                    token: \"text\",\n                    regex: />/,\n                    next: \"pop\"\n                }, {\n                    include: \"#generics\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\(/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#parameters\"\n                }]\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?={|$)/,\n                    next: \"pop\"\n                }, {\n                    token: \"entity.other.inherited-class.kotlin\",\n                    regex: /\\w+/\n                }, {\n                    token: \"text\",\n                    regex: /\\(/,\n                    push: [{\n                        token: \"text\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#expressions\"\n                    }]\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\}/,\n                    next: \"pop\"\n                }, {\n                    include: \"#statements\"\n                }]\n            }]\n        }],\n        \"#comments\": [{\n            token: \"punctuation.definition.comment.kotlin\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.kotlin\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.kotlin\"\n            }]\n        }, {\n            token: [\n                \"text\",\n                \"punctuation.definition.comment.kotlin\",\n                \"comment.line.double-slash.kotlin\"\n            ],\n            regex: /(\\s*)(\\/\\/)(.*$)/\n        }],\n        \"#constants\": [{\n            token: \"constant.language.kotlin\",\n            regex: /\\b(?:true|false|null|this|super)\\b/\n        }, {\n            token: \"constant.numeric.kotlin\",\n            regex: /\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\b/\n        }, {\n            token: \"constant.other.kotlin\",\n            regex: /\\b[A-Z][A-Z0-9_]+\\b/\n        }],\n        \"#expressions\": [{\n            token: \"text\",\n            regex: /\\(/,\n            push: [{\n                token: \"text\",\n                regex: /\\)/,\n                next: \"pop\"\n            }, {\n                include: \"#expressions\"\n            }]\n        }, {\n            include: \"#types\"\n        }, {\n            include: \"#strings\"\n        }, {\n            include: \"#constants\"\n        }, {\n            include: \"#comments\"\n        }, {\n            include: \"#keywords\"\n        }],\n        \"#functions\": [{\n            token: \"text\",\n            regex: /(?=\\s*fun)/,\n            push: [{\n                token: \"text\",\n                regex: /}|(?=$)/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.other.kotlin\",\n                regex: /\\bfun\\b/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=\\()/,\n                    next: \"pop\"\n                }, {\n                    token: \"text\",\n                    regex: /</,\n                    push: [{\n                        token: \"text\",\n                        regex: />/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#generics\"\n                    }]\n                }, {\n                    token: [\"text\", \"entity.name.function.kotlin\"],\n                    regex: /((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\(/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#parameters\"\n                }]\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?={|=|$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#types\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=\\})/,\n                    next: \"pop\"\n                }, {\n                    include: \"#statements\"\n                }]\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }]\n        }],\n        \"#generics\": [{\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /:/,\n            push: [{\n                token: \"text\",\n                regex: /(?=,|>)/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }]\n        }, {\n            include: \"#keywords\"\n        }, {\n            token: \"storage.type.generic.kotlin\",\n            regex: /\\w+/\n        }],\n        \"#getters-and-setters\": [{\n            token: [\"entity.name.function.kotlin\", \"text\"],\n            regex: /\\b(get)\\b(\\s*\\(\\s*\\))/,\n            push: [{\n                token: \"text\",\n                regex: /\\}|(?=\\bset\\b)|$/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$|\\bset\\b)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\}/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }]\n        }, {\n            token: [\"entity.name.function.kotlin\", \"text\"],\n            regex: /\\b(set)\\b(\\s*)(?=\\()/,\n            push: [{\n                token: \"text\",\n                regex: /\\}|(?=\\bget\\b)|$/,\n                next: \"pop\"\n            }, {\n                token: \"text\",\n                regex: /\\(/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#parameters\"\n                }]\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$|\\bset\\b)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\}/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }]\n        }],\n        \"#imports\": [{\n            token: [\n                \"text\",\n                \"keyword.other.kotlin\",\n                \"text\",\n                \"keyword.other.kotlin\"\n            ],\n            regex: /^(\\s*)(import)(\\s+[^ $]+\\s+)((?:as)?)/\n        }],\n        \"#keywords\": [{\n            token: \"storage.modifier.kotlin\",\n            regex: /\\b(?:var|val|public|private|protected|abstract|final|enum|open|attribute|annotation|override|inline|var|val|vararg|lazy|in|out|internal|data|tailrec|operator|infix|const|yield|typealias|typeof)\\b/\n        }, {\n            token: \"keyword.control.catch-exception.kotlin\",\n            regex: /\\b(?:try|catch|finally|throw)\\b/\n        }, {\n            token: \"keyword.control.kotlin\",\n            regex: /\\b(?:if|else|while|for|do|return|when|where|break|continue)\\b/\n        }, {\n            token: \"keyword.operator.kotlin\",\n            regex: /\\b(?:in|is|as|assert)\\b/\n        }, {\n            token: \"keyword.operator.comparison.kotlin\",\n            regex: /==|!=|===|!==|<=|>=|<|>/\n        }, {\n            token: \"keyword.operator.assignment.kotlin\",\n            regex: /=/\n        }, {\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /:/\n        }, {\n            token: \"keyword.operator.dot.kotlin\",\n            regex: /\\./\n        }, {\n            token: \"keyword.operator.increment-decrement.kotlin\",\n            regex: /\\-\\-|\\+\\+/\n        }, {\n            token: \"keyword.operator.arithmetic.kotlin\",\n            regex: /\\-|\\+|\\*|\\/|%/\n        }, {\n            token: \"keyword.operator.arithmetic.assign.kotlin\",\n            regex: /\\+=|\\-=|\\*=|\\/=/\n        }, {\n            token: \"keyword.operator.logical.kotlin\",\n            regex: /!|&&|\\|\\|/\n        }, {\n            token: \"keyword.operator.range.kotlin\",\n            regex: /\\.\\./\n        }, {\n            token: \"punctuation.terminator.kotlin\",\n            regex: /;/\n        }],\n        \"#namespaces\": [{\n            token: \"keyword.other.kotlin\",\n            regex: /\\bnamespace\\b/\n        }, {\n            token: \"text\",\n            regex: /\\{/,\n            push: [{\n                token: \"text\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                include: \"#statements\"\n            }]\n        }],\n        \"#parameters\": [{\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /:/,\n            push: [{\n                token: \"text\",\n                regex: /(?=,|\\)|=)/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }]\n        }, {\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /=/,\n            push: [{\n                token: \"text\",\n                regex: /(?=,|\\))/,\n                next: \"pop\"\n            }, {\n                include: \"#expressions\"\n            }]\n        }, {\n            include: \"#keywords\"\n        }, {\n            token: \"variable.parameter.function.kotlin\",\n            regex: /\\w+/\n        }],\n        \"#statements\": [{\n            include: \"#namespaces\"\n        }, {\n            include: \"#typedefs\"\n        }, {\n            include: \"#classes\"\n        }, {\n            include: \"#functions\"\n        }, {\n            include: \"#variables\"\n        }, {\n            include: \"#getters-and-setters\"\n        }, {\n            include: \"#expressions\"\n        }],\n        \"#strings\": [{\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /\"\"\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /\"\"\"/,\n                next: \"pop\"\n            }, {\n                token: \"variable.parameter.template.kotlin\",\n                regex: /\\$\\w+|\\$\\{[^\\}]+\\}/\n            }, {\n                token: \"constant.character.escape.kotlin\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.third.kotlin\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"variable.parameter.template.kotlin\",\n                regex: /\\$\\w+|\\$\\{[^\\}]+\\}/\n            }, {\n                token: \"constant.character.escape.kotlin\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.kotlin\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /'/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /'/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.kotlin\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.single.kotlin\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /`/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /`/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.single.kotlin\"\n            }]\n        }],\n        \"#typedefs\": [{\n            token: \"text\",\n            regex: /(?=\\s*type)/,\n            push: [{\n                token: \"text\",\n                regex: /(?=$)/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.other.kotlin\",\n                regex: /\\btype\\b/\n            }, {\n                token: \"text\",\n                regex: /</,\n                push: [{\n                    token: \"text\",\n                    regex: />/,\n                    next: \"pop\"\n                }, {\n                    include: \"#generics\"\n                }]\n            }, {\n                include: \"#expressions\"\n            }]\n        }],\n        \"#types\": [{\n            token: \"storage.type.buildin.kotlin\",\n            regex: /\\b(?:Any|Unit|String|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic)\\b/\n        }, {\n            token: \"storage.type.buildin.array.kotlin\",\n            regex: /\\b(?:IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray)\\b/\n        }, {\n            token: [\n                \"storage.type.buildin.collection.kotlin\",\n                \"text\"\n            ],\n            regex: /\\b(Array|List|Map)(<\\b)/,\n            push: [{\n                token: \"text\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }, {\n                include: \"#keywords\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /\\w+</,\n            push: [{\n                token: \"text\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }, {\n                include: \"#keywords\"\n            }]\n        }, {\n            token: [\"keyword.operator.tuple.kotlin\", \"text\"],\n            regex: /(#)(\\()/,\n            push: [{\n                token: \"text\",\n                regex: /\\)/,\n                next: \"pop\"\n            }, {\n                include: \"#expressions\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /\\{/,\n            push: [{\n                token: \"text\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                include: \"#statements\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /\\(/,\n            push: [{\n                token: \"text\",\n                regex: /\\)/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }]\n        }, {\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /->/\n        }],\n        \"#variables\": [{\n            token: \"text\",\n            regex: /(?=\\s*(?:var|val))/,\n            push: [{\n                token: \"text\",\n                regex: /(?=:|=|$)/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.other.kotlin\",\n                regex: /\\b(?:var|val)\\b/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=:|=|$)/,\n                    next: \"pop\"\n                }, {\n                    token: \"text\",\n                    regex: /</,\n                    push: [{\n                        token: \"text\",\n                        regex: />/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#generics\"\n                    }]\n                }, {\n                    token: [\"text\", \"entity.name.variable.kotlin\"],\n                    regex: /((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/\n                }]\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?==|$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#types\"\n                }, {\n                    include: \"#getters-and-setters\"\n                }]\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }, {\n                    include: \"#getters-and-setters\"\n                }]\n            }]\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nKotlinHighlightRules.metaData = {\n    fileTypes: [\"kt\", \"kts\"],\n    name: \"Kotlin\",\n    scopeName: \"source.Kotlin\"\n};\n\n\noop.inherits(KotlinHighlightRules, TextHighlightRules);\n\nexports.KotlinHighlightRules = KotlinHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/kotlin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/kotlin_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar KotlinHighlightRules = require(\"./kotlin_highlight_rules\").KotlinHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = KotlinHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/kotlin\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-latex.js",
    "content": "define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LatexHighlightRules = function() {  \n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            token : [\"keyword\", \"lparen\", \"variable.parameter\", \"rparen\", \"lparen\", \"storage.type\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"\n        }, {\n            token : [\"keyword\",\"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"\n        }, {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(verbatim)(})\",\n            next : \"verbatim\"\n        },  {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(lstlisting)(})\",\n            next : \"lstlisting\"\n        },  {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"\n        }, {\n            token : \"storage.type\",\n            regex : /\\\\verb\\b\\*?/,\n            next : [{\n                token : [\"keyword.operator\", \"string\", \"keyword.operator\"],\n                regex : \"(.)(.*?)(\\\\1|$)|\",\n                next : \"start\"\n            }]\n        }, {\n            token : \"storage.type\",\n            regex : \"\\\\\\\\[a-zA-Z]+\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\[^a-zA-Z]?\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"equation\"\n        }],\n        \"equation\" : [{\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"start\"\n        }, {\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"\n        }, {\n            token : \"error\", \n            regex : \"^\\\\s*$\", \n            next : \"start\" \n        }, {\n            defaultToken : \"string\"\n        }],\n        \"verbatim\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(verbatim)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }],\n        \"lstlisting\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(lstlisting)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\noop.inherits(LatexHighlightRules, TextHighlightRules);\n\nexports.LatexHighlightRules = LatexHighlightRules;\n\n});\n\ndefine(\"ace/mode/folding/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar keywordLevels = {\n    \"\\\\subparagraph\": 1,\n    \"\\\\paragraph\": 2,\n    \"\\\\subsubsubsection\": 3,\n    \"\\\\subsubsection\": 4,\n    \"\\\\subsection\": 5,\n    \"\\\\section\": 6,\n    \"\\\\chapter\": 7,\n    \"\\\\part\": 8,\n    \"\\\\begin\": 9,\n    \"\\\\end\": 10\n};\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^\\s*\\\\(begin)|\\s*\\\\(part|chapter|(?:sub)*(?:section|paragraph))\\b|{\\s*$/;\n    this.foldingStopMarker = /^\\s*\\\\(end)\\b|^\\s*}/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.latexBlock(session, row, match[0].length - 1);\n            if (match[2])\n                return this.latexSection(session, row, match[0].length - 1);\n\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.latexBlock(session, row, match[0].length - 1);\n\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n\n    this.latexBlock = function(session, row, column, returnRange) {\n        var keywords = {\n            \"\\\\begin\": 1,\n            \"\\\\end\": -1\n        };\n\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || !(token.type == \"storage.type\" || token.type == \"constant.character.escape\"))\n            return;\n\n        var val = token.value;\n        var dir = keywords[val];\n\n        var getType = function() {\n            var token = stream.stepForward();\n            var type = token.type == \"lparen\" ?stream.stepForward().value : \"\";\n            if (dir === -1) {\n                stream.stepBackward();\n                if (type)\n                    stream.stepBackward();\n            }\n            return type;\n        };\n        var stack = [getType()];\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while(token = stream.step()) {\n            if (!token || !(token.type == \"storage.type\" || token.type == \"constant.character.escape\"))\n                continue;\n            var level = keywords[token.value];\n            if (!level)\n                continue;\n            var type = getType();\n            if (level === dir)\n                stack.unshift(type);\n            else if (stack.shift() !== type || !stack.length)\n                break;\n        }\n\n        if (stack.length)\n            return;\n        \n        if (dir == 1) {\n            stream.stepBackward();\n            stream.stepBackward();\n        }\n        \n        if (returnRange)\n            return stream.getCurrentTokenRange();\n\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n\n    this.latexSection = function(session, row, column) {\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"storage.type\")\n            return;\n\n        var startLevel = keywordLevels[token.value] || 0;\n        var stackDepth = 0;\n        var endRow = row;\n\n        while(token = stream.stepForward()) {\n            if (token.type !== \"storage.type\")\n                continue;\n            var level = keywordLevels[token.value] || 0;\n\n            if (level >= 9) {\n                if (!stackDepth)\n                    endRow = stream.getCurrentTokenRow() - 1;\n                stackDepth += level == 9 ? 1 : - 1;\n                if (stackDepth < 0)\n                    break;\n            } else if (level >= startLevel)\n                break;\n        }\n\n        if (!stackDepth)\n            endRow = stream.getCurrentTokenRow() - 1;\n\n        while (endRow > row && !/\\S/.test(session.getLine(endRow)))\n            endRow--;\n\n        return new Range(\n            row, session.getLine(row).length,\n            endRow, session.getLine(endRow).length\n        );\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/latex_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/latex\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LatexHighlightRules = require(\"./latex_highlight_rules\").LatexHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar LatexFoldMode = require(\"./folding/latex\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LatexHighlightRules;\n    this.foldingRules = new LatexFoldMode();\n    this.$behaviour = new CstyleBehaviour({ braces: true });\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    \n    this.lineCommentStart = \"%\";\n\n    this.$id = \"ace/mode/latex\";\n    \n    this.getMatching = function(session, row, column) {\n        if (row == undefined)\n            row = session.selection.lead;\n        if (typeof row == \"object\") {\n            column = row.column;\n            row = row.row;\n        }\n\n        var startToken = session.getTokenAt(row, column);\n        if (!startToken)\n            return;\n        if (startToken.value == \"\\\\begin\" || startToken.value == \"\\\\end\") {\n            return this.foldingRules.latexBlock(session, row, column, true);\n        }\n    };\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-less.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\n\nvar LessHighlightRules = function() {\n\n\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" + \n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n\n    var keywords = keywordList.split('|');\n\n    var properties = CssHighlightRules.supportType.split('|');\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);   \n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : [\"constant.numeric\", \"keyword\"],\n                regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex : \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token : [\"support.function\", \"paren.lparen\"],\n                regex : \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token : function(value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex : \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token : \"variable\",\n                regex : \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token : function(first, second) {\n                    if(properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex : \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token : \"keyword\",\n                regex : \"&\"   // special case - always treat as keyword\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(LessHighlightRules, TextHighlightRules);\n\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LessHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(\"ruleset\", session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/less\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-liquid.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/behaviour/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n    \"use strict\";\n    \n    var oop = require(\"../../lib/oop\");\n    var Behaviour = require(\"../behaviour\").Behaviour;\n    var XmlBehaviour = require(\"./xml\").XmlBehaviour;\n    var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n    var lang = require(\"../../lib/lang\");\n    \n    function is(token, type) {\n        return token && token.type.lastIndexOf(type + \".xml\") > -1;\n    }\n    \n    var LiquidBehaviour = function () {\n        XmlBehaviour.call(this);\n        this.add(\"autoBraceTagClosing\",\"insertion\", function (state, action, editor, session, text) {\n            if (text == '}') {\n                var position = editor.getSelectionRange().start;\n                var iterator = new TokenIterator(session, position.row, position.column);\n                var token = iterator.getCurrentToken() || iterator.stepBackward();\n                if (!token || !( token.value.trim() === '%' || is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                    return;\n                if (is(token, \"reference.attribute-value\"))\n                    return;\n\n                if (is(token, \"attribute-value\")) {\n                    var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                    if (position.column < tokenEndColumn)\n                        return;\n                    if (position.column == tokenEndColumn) {\n                        var nextToken = iterator.stepForward();\n                        if (nextToken && is(nextToken, \"attribute-value\"))\n                            return;\n                        iterator.stepBackward();\n                    }\n                }\n                if (/{%\\s*%/.test(session.getLine(position.row))) return;\n                if (/^\\s*}/.test(session.getLine(position.row).slice(position.column)))\n                    return;\n                while (!token.type != 'keyword.block') {\n                    token = iterator.stepBackward();\n                    if (token.value == '{%') {\n                        while(true) {\n                            token = iterator.stepForward();\n\n                            if (token.type === 'keyword.block') {\n                                break;\n                            } else if (token.value.trim() == '%') {\n                                token = null;\n                                break;\n                            }\n                        }\n                        break; \n                    }\n                }\n                if (!token ) return ;\n                var tokenRow = iterator.getCurrentTokenRow();\n                var tokenColumn = iterator.getCurrentTokenColumn();\n                if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n                \n                var element = token.value;\n                if (tokenRow == position.row)\n                    element = element.substring(0, position.column - tokenColumn);\n    \n                if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                     return;\n                return {\n                   text: \"}\" + \"{% end\" + element + \" %}\",\n                   selection: [1, 1]\n                };\n            }\n        });\n    \n    };\n\n    oop.inherits(LiquidBehaviour, Behaviour);\n    \n    exports.LiquidBehaviour = LiquidBehaviour;\n    });\n\ndefine(\"ace/mode/liquid_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar LiquidHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var functions = (\n        \"date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|\" +\n         \"escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|\" +\n         \"truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split\"\n    );\n\n    var keywords = (\n        \"capture|endcapture|case|endcase|when|comment|endcomment|\" +\n        \"cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|\" +\n        \"style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow\"\n    );\n    var blocks = 'for|if|case|capture|unless|tablerow|marker|comment';\n\n    var builtinVariables = 'forloop|tablerowloop';\n\n    var definitions = (\"assign\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": builtinVariables,\n        \"keyword\": keywords,\n        \"keyword.block\": blocks,\n        \"support.function\": functions,\n        \"keyword.definition\": definitions\n    }, \"identifier\");\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token : \"variable\",\n            regex : \"{%\",\n            push : \"liquid-start\"\n        }, {\n            token : \"variable\",\n            regex : \"{{\",\n            push : \"liquid-start\"\n        });\n    }\n\n    this.addRules({\n        \"liquid-start\" : [{\n            token: \"variable\",\n            regex: \"}}\",\n            next: \"pop\"\n        }, {\n            token: \"variable\",\n            regex: \"%}\",\n            next: \"pop\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"/|\\\\*|\\\\-|\\\\+|=|!=|\\\\?\\\\:\"\n        }, {\n            token : \"paren.lparen\",\n            regex : /[\\[\\({]/\n        }, {\n            token : \"paren.rparen\",\n            regex : /[\\])}]/\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }]\n    });\n\n    this.normalizeRules();\n};\noop.inherits(LiquidHighlightRules, TextHighlightRules);\n\nexports.LiquidHighlightRules = LiquidHighlightRules;\n});\n\ndefine(\"ace/mode/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/html\",\"ace/mode/html_completions\",\"ace/mode/behaviour/liquid\",\"ace/mode/liquid_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar LiquidBehaviour = require(\"./behaviour/liquid\").LiquidBehaviour;\nvar LiquidHighlightRules = require(\"./liquid_highlight_rules\").LiquidHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = LiquidHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new LiquidBehaviour();\n    this.$completer = new HtmlCompletions();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n    this.voidElements = new HtmlMode().voidElements;\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/liquid\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-lisp.js",
    "content": "define(\"ace/mode/lisp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LispHighlightRules = function() {\n    var keywordControl = \"case|do|let|loop|if|else|when\";\n    var keywordOperator = \"eq|neq|and|or\";\n    var constantLanguage = \"null|nil\";\n    var supportFunctions = \"cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control\": keywordControl,\n        \"keyword.operator\": keywordOperator,\n        \"constant.language\": constantLanguage,\n        \"support.function\": supportFunctions\n    }, \"identifier\", true);\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token : \"comment\",\n            regex : \";.*$\"\n        },\n        {\n            token: [\"storage.type.function-type.lisp\", \"text\", \"entity.name.function.lisp\"],\n            regex: \"(?:\\\\b(?:(defun|defmethod|defmacro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"\n        },\n        {\n            token: [\"punctuation.definition.constant.character.lisp\", \"constant.character.lisp\"],\n            regex: \"(#)((?:\\\\w|[\\\\\\\\+-=<>'\\\"&#])+)\"\n        },\n        {\n            token: [\"punctuation.definition.variable.lisp\", \"variable.other.global.lisp\", \"punctuation.definition.variable.lisp\"],\n            regex: \"(\\\\*)(\\\\S*)(\\\\*)\"\n        },\n        {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n        }, \n        {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n        },\n        {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        },\n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        }\n    ],\n    \"qqstring\": [\n        {\n            token: \"constant.character.escape.lisp\",\n            regex: \"\\\\\\\\.\"\n        },\n        {\n            token : \"string\",\n            regex : '[^\"\\\\\\\\]+'\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }\n    ]\n};\n\n};\n\noop.inherits(LispHighlightRules, TextHighlightRules);\n\nexports.LispHighlightRules = LispHighlightRules;\n});\n\ndefine(\"ace/mode/lisp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lisp_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LispHighlightRules = require(\"./lisp_highlight_rules\").LispHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = LispHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = \";\";\n    \n    this.$id = \"ace/mode/lisp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-livescript.js",
    "content": "define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/livescript\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/text\"], function(require, exports, module){\n  var identifier, LiveScriptMode, keywordend, stringfill;\n  identifier = '(?![\\\\d\\\\s])[$\\\\w\\\\xAA-\\\\uFFDC](?:(?!\\\\s)[$\\\\w\\\\xAA-\\\\uFFDC]|-[A-Za-z])*';\n  exports.Mode = LiveScriptMode = (function(superclass){\n    var indenter, prototype = extend$((import$(LiveScriptMode, superclass).displayName = 'LiveScriptMode', LiveScriptMode), superclass).prototype, constructor = LiveScriptMode;\n    function LiveScriptMode(){\n      var that;\n      this.$tokenizer = new (require('../tokenizer')).Tokenizer(LiveScriptMode.Rules);\n      if (that = require('../mode/matching_brace_outdent')) {\n        this.$outdent = new that.MatchingBraceOutdent;\n      }\n      this.$id = \"ace/mode/livescript\";\n      this.$behaviour = new (require(\"./behaviour/cstyle\").CstyleBehaviour)();\n    }\n    indenter = RegExp('(?:[({[=:]|[-~]>|\\\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\\\s*all)?|const|var|let|new|catch(?:\\\\s*' + identifier + ')?))\\\\s*$');\n    prototype.getNextLineIndent = function(state, line, tab){\n      var indent, tokens;\n      indent = this.$getIndent(line);\n      tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n      if (!(tokens.length && tokens[tokens.length - 1].type === 'comment')) {\n        if (state === 'start' && indenter.test(line)) {\n          indent += tab;\n        }\n      }\n      return indent;\n    };\n    prototype.lineCommentStart = \"#\";\n    prototype.blockComment = {start: \"###\", end: \"###\"};\n    prototype.checkOutdent = function(state, line, input){\n      var ref$;\n      return (ref$ = this.$outdent) != null ? ref$.checkOutdent(line, input) : void 8;\n    };\n    prototype.autoOutdent = function(state, doc, row){\n      var ref$;\n      return (ref$ = this.$outdent) != null ? ref$.autoOutdent(doc, row) : void 8;\n    };\n    return LiveScriptMode;\n  }(require('../mode/text').Mode));\n  keywordend = '(?![$\\\\w]|-[A-Za-z]|\\\\s*:(?![:=]))';\n  stringfill = {\n    defaultToken: 'string'\n  };\n  LiveScriptMode.Rules = {\n    start: [\n      {\n        token: 'keyword',\n        regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend\n      }, {\n        token: 'constant.language',\n        regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend\n      }, {\n        token: 'invalid.illegal',\n        regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend\n      }, {\n        token: 'language.support.class',\n        regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend\n      }, {\n        token: 'language.support.function',\n        regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend\n      }, {\n        token: 'variable.language',\n        regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend\n      }, {\n        token: 'identifier',\n        regex: identifier + '\\\\s*:(?![:=])'\n      }, {\n        token: 'variable',\n        regex: identifier\n      }, {\n        token: 'keyword.operator',\n        regex: '(?:\\\\.{3}|\\\\s+\\\\?)'\n      }, {\n        token: 'keyword.variable',\n        regex: '(?:@+|::|\\\\.\\\\.)',\n        next: 'key'\n      }, {\n        token: 'keyword.operator',\n        regex: '\\\\.\\\\s*',\n        next: 'key'\n      }, {\n        token: 'string',\n        regex: '\\\\\\\\\\\\S[^\\\\s,;)}\\\\]]*'\n      }, {\n        token: 'string.doc',\n        regex: '\\'\\'\\'',\n        next: 'qdoc'\n      }, {\n        token: 'string.doc',\n        regex: '\"\"\"',\n        next: 'qqdoc'\n      }, {\n        token: 'string',\n        regex: '\\'',\n        next: 'qstring'\n      }, {\n        token: 'string',\n        regex: '\"',\n        next: 'qqstring'\n      }, {\n        token: 'string',\n        regex: '`',\n        next: 'js'\n      }, {\n        token: 'string',\n        regex: '<\\\\[',\n        next: 'words'\n      }, {\n        token: 'string.regex',\n        regex: '//',\n        next: 'heregex'\n      }, {\n        token: 'comment.doc',\n        regex: '/\\\\*',\n        next: 'comment'\n      }, {\n        token: 'comment',\n        regex: '#.*'\n      }, {\n        token: 'string.regex',\n        regex: '\\\\/(?:[^[\\\\/\\\\n\\\\\\\\]*(?:(?:\\\\\\\\.|\\\\[[^\\\\]\\\\n\\\\\\\\]*(?:\\\\\\\\.[^\\\\]\\\\n\\\\\\\\]*)*\\\\])[^[\\\\/\\\\n\\\\\\\\]*)*)\\\\/[gimy$]{0,4}',\n        next: 'key'\n      }, {\n        token: 'constant.numeric',\n        regex: '(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*|(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*|(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)(?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)'\n      }, {\n        token: 'lparen',\n        regex: '[({[]'\n      }, {\n        token: 'rparen',\n        regex: '[)}\\\\]]',\n        next: 'key'\n      }, {\n        token: 'keyword.operator',\n        regex: '[\\\\^!|&%+\\\\-]+'\n      }, {\n        token: 'text',\n        regex: '\\\\s+'\n      }\n    ],\n    heregex: [\n      {\n        token: 'string.regex',\n        regex: '.*?//[gimy$?]{0,4}',\n        next: 'start'\n      }, {\n        token: 'string.regex',\n        regex: '\\\\s*#{'\n      }, {\n        token: 'comment.regex',\n        regex: '\\\\s+(?:#.*)?'\n      }, {\n        defaultToken: 'string.regex'\n      }\n    ],\n    key: [\n      {\n        token: 'keyword.operator',\n        regex: '[.?@!]+'\n      }, {\n        token: 'identifier',\n        regex: identifier,\n        next: 'start'\n      }, {\n        token: 'text',\n        regex: '',\n        next: 'start'\n      }\n    ],\n    comment: [\n      {\n        token: 'comment.doc',\n        regex: '.*?\\\\*/',\n        next: 'start'\n      }, {\n        defaultToken: 'comment.doc'\n      }\n    ],\n    qdoc: [\n      {\n        token: 'string',\n        regex: \".*?'''\",\n        next: 'key'\n      }, stringfill\n    ],\n    qqdoc: [\n      {\n        token: 'string',\n        regex: '.*?\"\"\"',\n        next: 'key'\n      }, stringfill\n    ],\n    qstring: [\n      {\n        token: 'string',\n        regex: '[^\\\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\\\']*)*\\'',\n        next: 'key'\n      }, stringfill\n    ],\n    qqstring: [\n      {\n        token: 'string',\n        regex: '[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',\n        next: 'key'\n      }, stringfill\n    ],\n    js: [\n      {\n        token: 'string',\n        regex: '[^\\\\\\\\`]*(?:\\\\\\\\.[^\\\\\\\\`]*)*`',\n        next: 'key'\n      }, stringfill\n    ],\n    words: [\n      {\n        token: 'string',\n        regex: '.*?\\\\]>',\n        next: 'key'\n      }, stringfill\n    ]\n  };\nfunction extend$(sub, sup){\n  function fun(){} fun.prototype = (sub.superclass = sup).prototype;\n  (sub.prototype = new fun).constructor = sub;\n  if (typeof sup.extended == 'function') sup.extended(sub);\n  return sub;\n}\nfunction import$(obj, src){\n  var own = {}.hasOwnProperty;\n  for (var key in src) if (own.call(src, key)) obj[key] = src[key];\n  return obj;\n}\n});                (function() {\n                    window.require([\"ace/mode/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-logiql.js",
    "content": "define(\"ace/mode/logiql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LogiQLHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'comment.block',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'comment.block', regex: '\\\\*/', next: 'pop' },\n              { defaultToken: 'comment.block' } ]\n            },\n         { token: 'comment.single',\n           regex: '//.*'\n            },\n         { token: 'constant.numeric',\n           regex: '\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?[fd]?'\n            },\n         { token: 'string',\n           regex: '\"',\n           push: \n            [ { token: 'string', regex: '\"', next: 'pop' },\n              { defaultToken: 'string' } ]\n            },\n         { token: 'constant.language',\n           regex: '\\\\b(true|false)\\\\b'\n            },\n         { token: 'entity.name.type.logicblox',\n           regex: '`[a-zA-Z_:]+(\\\\d|\\\\a)*\\\\b'\n            },\n         { token: 'keyword.start', regex: '->',  comment: 'Constraint' },\n         { token: 'keyword.start', regex: '-->', comment: 'Level 1 Constraint'},\n         { token: 'keyword.start', regex: '<-',  comment: 'Rule' },\n         { token: 'keyword.start', regex: '<--', comment: 'Level 1 Rule' },\n         { token: 'keyword.end',   regex: '\\\\.', comment: 'Terminator' },\n         { token: 'keyword.other', regex: '!',   comment: 'Negation' },\n         { token: 'keyword.other', regex: ',',   comment: 'Conjunction' },\n         { token: 'keyword.other', regex: ';',   comment: 'Disjunction' },\n         { token: 'keyword.operator', regex: '<=|>=|!=|<|>', comment: 'Equality'},\n         { token: 'keyword.other', regex: '@', comment: 'Equality' },\n         { token: 'keyword.operator', regex: '\\\\+|-|\\\\*|/', comment: 'Arithmetic operations'},\n         { token: 'keyword', regex: '::', comment: 'Colon colon' },\n         { token: 'support.function',\n           regex: '\\\\b(agg\\\\s*<<)',\n           push: \n            [ { include: '$self' },\n              { token: 'support.function',\n                regex: '>>',\n                next: 'pop' } ]\n            },\n         { token: 'storage.modifier',\n           regex: '\\\\b(lang:[\\\\w:]*)'\n            },\n         { token: [ 'storage.type', 'text' ],\n           regex: '(export|sealed|clauses|block|alias|alias_all)(\\\\s*\\\\()(?=`)'\n            },\n         { token: 'entity.name',\n           regex: '[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\\\(|\\\\[))'\n            },\n         { token: 'variable.parameter',\n           regex: '([a-zA-Z][a-zA-Z_0-9]*|_)\\\\s*(?=(,|\\\\.|<-|->|\\\\)|\\\\]|=))'\n            } ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LogiQLHighlightRules, TextHighlightRules);\n\nexports.LogiQLHighlightRules = LogiQLHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/logiql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/logiql_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/token_iterator\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LogiQLHighlightRules = require(\"./logiql_highlight_rules\").LogiQLHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = LogiQLHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (/comment|string/.test(endState))  \n            return indent;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment.single\")\n            return indent;\n\n        var match = line.match();\n        if (/(-->|<--|<-|->|{)\\s*$/.test(line))\n            indent += tab;\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (this.$outdent.checkOutdent(line, input))\n            return true;\n\n        if (input !== \"\\n\" && input !== \"\\r\\n\")\n            return false;\n            \n        if (!/^\\s+/.test(line))\n            return false;\n\n        return true;\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        if (this.$outdent.autoOutdent(doc, row))\n            return;\n        var prevLine = doc.getLine(row);\n        var match = prevLine.match(/^\\s+/);\n        var column = prevLine.lastIndexOf(\".\") + 1;\n        if (!match || !row || !column) return 0;\n\n        var line = doc.getLine(row + 1);\n        var startRange = this.getMatching(doc, {row: row, column: column});\n        if (!startRange || startRange.start.row == row) return 0;\n\n        column = match[0].length;\n        var indent = this.$getIndent(doc.getLine(startRange.start.row));\n        doc.replace(new Range(row + 1, 0, row + 1, column), indent);\n    };\n\n    this.getMatching = function(session, row, column) {\n        if (row == undefined)\n            row = session.selection.lead;\n        if (typeof row == \"object\") {\n            column = row.column;\n            row = row.row;\n        }\n\n        var startToken = session.getTokenAt(row, column);\n        var KW_START = \"keyword.start\", KW_END = \"keyword.end\";\n        var tok;\n        if (!startToken)\n            return;\n        if (startToken.type == KW_START) {\n            var it = new TokenIterator(session, row, column);\n            it.step = it.stepForward;\n        } else if (startToken.type == KW_END) {\n            var it = new TokenIterator(session, row, column);\n            it.step = it.stepBackward;\n        } else\n            return;\n\n        while (tok = it.step()) {\n            if (tok.type == KW_START || tok.type == KW_END)\n                break;\n        }\n        if (!tok || tok.type == startToken.type)\n            return;\n\n        var col = it.getCurrentTokenColumn();\n        var row = it.getCurrentTokenRow();\n        return new Range(row, col, row, col + tok.value.length);\n    };\n    this.$id = \"ace/mode/logiql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-logtalk.js",
    "content": "define(\"ace/mode/logtalk_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LogtalkHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'punctuation.definition.comment.logtalk',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.logtalk',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.logtalk' } ] },\n         { todo: 'fix grouping',\n           token: \n            [ 'comment.line.percentage.logtalk',\n              'punctuation.definition.comment.logtalk' ],\n           regex: '%.*$\\\\n?' },\n         { todo: 'fix grouping',\n           token: \n            [ 'storage.type.opening.logtalk',\n              'punctuation.definition.storage.type.logtalk' ],\n           regex: ':-\\\\s(?:object|protocol|category|module)(?=[(])' },\n         { todo: 'fix grouping',\n           token: \n            [ 'storage.type.closing.logtalk',\n              'punctuation.definition.storage.type.logtalk' ],\n           regex: ':-\\\\send_(?:object|protocol|category)(?=[.])' },\n         { caseInsensitive: false,\n           token: 'storage.type.relations.logtalk',\n           regex: '\\\\b(?:complements|extends|i(?:nstantiates|mp(?:orts|lements))|specializes)(?=[(])' },\n         { caseInsensitive: false,\n           todo: 'fix grouping',\n           token: \n            [ 'storage.modifier.others.logtalk',\n              'punctuation.definition.storage.modifier.logtalk' ],\n           regex: ':-\\\\s(?:e(?:lse|ndif)|built_in|dynamic|synchronized|threaded)(?=[.])' },\n         { caseInsensitive: false,\n           todo: 'fix grouping',\n           token: \n            [ 'storage.modifier.others.logtalk',\n              'punctuation.definition.storage.modifier.logtalk' ],\n           regex: ':-\\\\s(?:c(?:alls|oinductive)|e(?:lif|n(?:coding|sure_loaded)|xport)|i(?:f|n(?:clude|itialization|fo))|reexport|set_(?:logtalk|prolog)_flag|uses)(?=[(])' },\n         { caseInsensitive: false,\n           todo: 'fix grouping',\n           token: \n            [ 'storage.modifier.others.logtalk',\n              'punctuation.definition.storage.modifier.logtalk' ],\n           regex: ':-\\\\s(?:alias|info|d(?:ynamic|iscontiguous)|m(?:eta_(?:non_terminal|predicate)|ode|ultifile)|p(?:ublic|r(?:otected|ivate))|op|use(?:s|_module)|synchronized)(?=[(])' },\n         { token: 'keyword.operator.message-sending.logtalk',\n           regex: '(:|::|\\\\^\\\\^)' },\n         { token: 'keyword.operator.external-call.logtalk',\n           regex: '([{}])' },\n         { token: 'keyword.operator.mode.logtalk', regex: '(\\\\?|@)' },\n         { token: 'keyword.operator.comparison.term.logtalk',\n           regex: '(@=<|@<|@>|@>=|==|\\\\\\\\==)' },\n         { token: 'keyword.operator.comparison.arithmetic.logtalk',\n           regex: '(=<|<|>|>=|=:=|=\\\\\\\\=)' },\n         { token: 'keyword.operator.bitwise.logtalk',\n           regex: '(<<|>>|/\\\\\\\\|\\\\\\\\/|\\\\\\\\)' },\n         { token: 'keyword.operator.evaluable.logtalk',\n           regex: '\\\\b(?:e|pi|div|mod|rem)\\\\b(?![-!(^~])' },\n         { token: 'keyword.operator.evaluable.logtalk',\n           regex: '(\\\\*\\\\*|\\\\+|-|\\\\*|/|//)' },\n         { token: 'keyword.operator.misc.logtalk',\n           regex: '(:-|!|\\\\\\\\+|,|;|-->|->|=|\\\\=|\\\\.|=\\\\.\\\\.|\\\\^|\\\\bas\\\\b|\\\\bis\\\\b)' },\n         { caseInsensitive: false,\n           token: 'support.function.evaluable.logtalk',\n           regex: '\\\\b(a(bs|cos|sin|tan|tan2)|c(eiling|os)|div|exp|flo(at(_(integer|fractional)_part)?|or)|log|m(ax|in|od)|r(em|ound)|s(i(n|gn)|qrt)|t(an|runcate)|xor)(?=[(])' },\n         { token: 'support.function.control.logtalk',\n           regex: '\\\\b(?:true|fa(?:il|lse)|repeat|(?:instantiation|system)_error)\\\\b(?![-!(^~])' },\n         { token: 'support.function.control.logtalk',\n           regex: '\\\\b((?:type|domain|existence|permission|representation|evaluation|resource|syntax)_error)(?=[(])' },\n         { token: 'support.function.control.logtalk',\n           regex: '\\\\b(?:ca(?:ll|tch)|ignore|throw|once)(?=[(])' },\n         { token: 'support.function.chars-and-bytes-io.logtalk',\n           regex: '\\\\b(?:(?:get|p(?:eek|ut))_(c(?:har|ode)|byte)|nl)(?=[(])' },\n         { token: 'support.function.chars-and-bytes-io.logtalk',\n           regex: '\\\\bnl\\\\b' },\n         { token: 'support.function.atom-term-processing.logtalk',\n           regex: '\\\\b(?:atom_(?:length|c(?:hars|o(?:ncat|des)))|sub_atom|char_code|number_c(?:har|ode)s)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.term-testing.logtalk',\n           regex: '\\\\b(?:var|atom(ic)?|integer|float|c(?:allable|ompound)|n(?:onvar|umber)|ground|acyclic_term)(?=[(])' },\n         { token: 'support.function.term-comparison.logtalk',\n           regex: '\\\\b(compare)(?=[(])' },\n         { token: 'support.function.term-io.logtalk',\n           regex: '\\\\b(?:read(_term)?|write(?:q|_(?:canonical|term))?|(current_)?(?:char_conversion|op))(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.term-creation-and-decomposition.logtalk',\n           regex: '\\\\b(arg|copy_term|functor|numbervars|term_variables)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.term-unification.logtalk',\n           regex: '\\\\b(subsumes_term|unify_with_occurs_check)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.stream-selection-and-control.logtalk',\n           regex: '\\\\b(?:(?:se|curren)t_(?:in|out)put|open|close|flush_output|stream_property|at_end_of_stream|set_stream_position)(?=[(])' },\n         { token: 'support.function.stream-selection-and-control.logtalk',\n           regex: '\\\\b(?:flush_output|at_end_of_stream)\\\\b' },\n         { token: 'support.function.prolog-flags.logtalk',\n           regex: '\\\\b((?:se|curren)t_prolog_flag)(?=[(])' },\n         { token: 'support.function.compiling-and-loading.logtalk',\n           regex: '\\\\b(logtalk_(?:compile|l(?:ibrary_path|oad|oad_context)|make(_target_action)?))(?=[(])' },\n         { token: 'support.function.compiling-and-loading.logtalk',\n           regex: '\\\\b(logtalk_make)\\\\b' },\n         { caseInsensitive: false,\n           token: 'support.function.event-handling.logtalk',\n           regex: '\\\\b(?:(?:abolish|define)_events|current_event)(?=[(])' },\n         { token: 'support.function.implementation-defined-hooks.logtalk',\n           regex: '\\\\b(?:(?:create|current|set)_logtalk_flag|halt)(?=[(])' },\n         { token: 'support.function.implementation-defined-hooks.logtalk',\n           regex: '\\\\b(halt)\\\\b' },\n         { token: 'support.function.sorting.logtalk',\n           regex: '\\\\b((key)?(sort))(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.entity-creation-and-abolishing.logtalk',\n           regex: '\\\\b((c(?:reate|urrent)|abolish)_(?:object|protocol|category))(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.reflection.logtalk',\n           regex: '\\\\b((object|protocol|category)_property|co(mplements_object|nforms_to_protocol)|extends_(object|protocol|category)|imp(orts_category|lements_protocol)|(instantiat|specializ)es_class)(?=[(])' },\n         { token: 'support.function.logtalk',\n           regex: '\\\\b((?:for|retract)all)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.execution-context.logtalk',\n           regex: '\\\\b(?:context|parameter|se(?:lf|nder)|this)(?=[(])' },\n         { token: 'support.function.database.logtalk',\n           regex: '\\\\b(?:a(?:bolish|ssert(?:a|z))|clause|retract(all)?)(?=[(])' },\n         { token: 'support.function.all-solutions.logtalk',\n           regex: '\\\\b((?:bag|set)of|f(?:ind|or)all)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.multi-threading.logtalk',\n           regex: '\\\\b(threaded(_(call|once|ignore|exit|peek|wait|notify))?)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.engines.logtalk',\n           regex: '\\\\b(threaded_engine(_(create|destroy|self|next(?:_reified)?|yield|post|fetch))?)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.reflection.logtalk',\n           regex: '\\\\b(?:current_predicate|predicate_property)(?=[(])' },\n         { token: 'support.function.event-handler.logtalk',\n           regex: '\\\\b(?:before|after)(?=[(])' },\n         { token: 'support.function.message-forwarding-handler.logtalk',\n           regex: '\\\\b(forward)(?=[(])' },\n         { token: 'support.function.grammar-rule.logtalk',\n           regex: '\\\\b(?:expand_(?:goal|term)|(?:goal|term)_expansion|phrase)(?=[(])' },\n         { token: 'punctuation.definition.string.begin.logtalk',\n           regex: '\\'',\n           push: \n            [ { token: 'constant.character.escape.logtalk',\n                regex: '\\\\\\\\([\\\\\\\\abfnrtv\"\\']|(x[a-fA-F0-9]+|[0-7]+)\\\\\\\\)' },\n              { token: 'punctuation.definition.string.end.logtalk',\n                regex: '\\'',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.single.logtalk' } ] },\n         { token: 'punctuation.definition.string.begin.logtalk',\n           regex: '\"',\n           push: \n            [ { token: 'constant.character.escape.logtalk', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.logtalk',\n                regex: '\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.double.logtalk' } ] },\n         { token: 'constant.numeric.logtalk',\n           regex: '\\\\b(0b[0-1]+|0o[0-7]+|0x[0-9a-fA-F]+)\\\\b' },\n         { token: 'constant.numeric.logtalk',\n           regex: '\\\\b(0\\'\\\\\\\\.|0\\'.|0\\'\\'|0\\'\")' },\n         { token: 'constant.numeric.logtalk',\n           regex: '\\\\b(\\\\d+\\\\.?\\\\d*((e|E)(\\\\+|-)?\\\\d+)?)\\\\b' },\n         { token: 'variable.other.logtalk',\n           regex: '\\\\b([A-Z_][A-Za-z0-9_]*)\\\\b' } ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LogtalkHighlightRules, TextHighlightRules);\n\nexports.LogtalkHighlightRules = LogtalkHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/logtalk\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/logtalk_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar LogtalkHighlightRules = require(\"./logtalk_highlight_rules\").LogtalkHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LogtalkHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"%\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/logtalk\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-lsl.js",
    "content": "define(\"ace/mode/lsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\noop.inherits(LSLHighlightRules, TextHighlightRules);\n\nfunction LSLHighlightRules() {\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.float.lsl\" : \"DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI\",\n        \"constant.language.integer.lsl\": \"ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|CHARACTER_RADIUS|CHARACTER_STAY_WITHIN_PARCEL|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DENSITY|ERR_GENERIC|ERR_MALFORMED_PARAMS|ERR_PARCEL_PERMISSIONS|ERR_RUNTIME_PERMISSIONS|ERR_THROTTLED|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|FALSE|FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_BODY_SHAPE_TYPE|OBJECT_CHARACTER_TIME|OBJECT_CLICK_ACTION|OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_HOVER_HEIGHT|OBJECT_LAST_OWNER_ID|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_PHYSICS_COST|OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_RENDER_WEIGHT|OBJECT_RETURN_PARCEL|OBJECT_RETURN_PARCEL_OWNER|OBJECT_RETURN_REGION|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|OBJECT_TEMP_ON_REZ|OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|PARCEL_DETAILS_SEE_AVATARS|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|PARCEL_FLAG_ALLOW_TERRAFORM|PARCEL_FLAG_LOCAL_SOUND_ONLY|PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|PARCEL_FLAG_USE_LAND_PASS_LIST|PARCEL_MEDIA_COMMAND_AGENT|PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|PARCEL_MEDIA_COMMAND_PAUSE|PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASS_ALWAYS|PASS_IF_NOT_HANDLED|PASS_NEVER|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|PERMISSION_RETURN_OBJECTS|PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_ALPHA_MODE|PRIM_ALPHA_MODE_BLEND|PRIM_ALPHA_MODE_EMISSIVE|PRIM_ALPHA_MODE_MASK|PRIM_ALPHA_MODE_NONE|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CONTROLS_STANDARD|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|PRIM_MEDIA_WIDTH_PIXELS|PRIM_NAME|PRIM_NORMAL|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|PRIM_SLICE|PRIM_SPECULAR|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|PROFILE_SCRIPT_MEMORY|PSYS_PART_BF_DEST_COLOR|PSYS_PART_BF_ONE|PSYS_PART_BF_ONE_MINUS_DEST_COLOR|PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA|PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR|PSYS_PART_BF_SOURCE_ALPHA|PSYS_PART_BF_SOURCE_COLOR|PSYS_PART_BF_ZERO|PSYS_PART_BLEND_FUNC_DEST|PSYS_PART_BLEND_FUNC_SOURCE|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|PSYS_PART_END_COLOR|PSYS_PART_END_GLOW|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_MAX_AGE|PSYS_PART_RIBBON_MASK|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_GLOW|PSYS_PART_START_SCALE|PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|RC_REJECT_TYPES|REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|TRUE|TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|WANDER_PAUSE_AT_WAYPOINTS|XP_ERROR_EXPERIENCES_DISABLED|XP_ERROR_EXPERIENCE_DISABLED|XP_ERROR_EXPERIENCE_SUSPENDED|XP_ERROR_INVALID_EXPERIENCE|XP_ERROR_INVALID_PARAMETERS|XP_ERROR_KEY_NOT_FOUND|XP_ERROR_MATURITY_EXCEEDED|XP_ERROR_NONE|XP_ERROR_NOT_FOUND|XP_ERROR_NOT_PERMITTED|XP_ERROR_NO_EXPERIENCE|XP_ERROR_QUOTA_EXCEEDED|XP_ERROR_RETRY_UPDATE|XP_ERROR_STORAGE_EXCEPTION|XP_ERROR_STORE_DISABLED|XP_ERROR_THROTTLED|XP_ERROR_UNKNOWN_ERROR\",\n        \"constant.language.integer.boolean.lsl\" : \"FALSE|TRUE\",\n        \"constant.language.quaternion.lsl\" : \"ZERO_ROTATION\",\n        \"constant.language.string.lsl\" : \"EOF|JSON_ARRAY|JSON_DELETE|JSON_FALSE|JSON_INVALID|JSON_NULL|JSON_NUMBER|JSON_OBJECT|JSON_STRING|JSON_TRUE|NULL_KEY|TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED\",\n        \"constant.language.vector.lsl\" : \"TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR\",\n        \"invalid.broken.lsl\": \"LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH\",\n        \"invalid.deprecated.lsl\" : \"ATTACH_LPEC|ATTACH_RPEC|DATA_RATING|OBJECT_ATTACHMENT_GEOMETRY_BYTES|OBJECT_ATTACHMENT_SURFACE_AREA|PRIM_CAST_SHADOWS|PRIM_MATERIAL_LIGHT|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP|llClearExperiencePermissions|llCloud|llGetExperienceList|llMakeExplosion|llMakeFire|llMakeFountain|llMakeSmoke|llRemoteDataSetRegion|llSound|llSoundPreload|llXorBase64Strings|llXorBase64StringsCorrect\",\n        \"invalid.illegal.lsl\": \"event\",\n        \"invalid.unimplemented.lsl\": \"CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|PERMISSION_CHANGE_JOINTS|PERMISSION_CHANGE_PERMISSIONS|PERMISSION_EXPERIENCE|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|PRIM_PHYSICS_MATERIAL|PSYS_SRC_OBJ_REL_MASK|llCollisionSprite|llPointAt|llRefreshPrimURL|llReleaseCamera|llRemoteLoadScript|llSetPrimURL|llStopPointAt|llTakeCamera\",\n        \"reserved.godmode.lsl\": \"llGodLikeRezObject|llSetInventoryPermMask|llSetObjectPermMask\",\n        \"reserved.log.lsl\" : \"print\",\n        \"keyword.control.lsl\" : \"do|else|for|if|jump|return|while\",\n        \"storage.type.lsl\" : \"float|integer|key|list|quaternion|rotation|string|vector\",\n        \"support.function.lsl\": \"llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|llAdjustSoundVolume|llAgentInExperience|llAllowInventoryDrop|llAngleBetween|llApplyImpulse|llApplyRotationalImpulse|llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|llAvatarOnLinkSitTarget|llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|llBase64ToInteger|llBase64ToString|llBreakAllLinks|llBreakLink|llCSV2List|llCastRay|llCeil|llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|llCollisionFilter|llCollisionSound|llCos|llCreateCharacter|llCreateKeyValue|llCreateLink|llDataSizeKeyValue|llDeleteCharacter|llDeleteKeyValue|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|llDetectedGrab|llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llEvade|llExecCharacterCmd|llFabs|llFleeFrom|llFloor|llForceMouselook|llFrand|llGenerateKey|llGetAccel|llGetAgentInfo|llGetAgentLanguage|llGetAgentList|llGetAgentSize|llGetAlpha|llGetAndResetTime|llGetAnimation|llGetAnimationList|llGetAnimationOverride|llGetAttached|llGetAttachedList|llGetBoundingBox|llGetCameraPos|llGetCameraRot|llGetCenterOfMass|llGetClosestNavPoint|llGetColor|llGetCreator|llGetDate|llGetDisplayName|llGetEnergy|llGetEnv|llGetExperienceDetails|llGetExperienceErrorMessage|llGetForce|llGetFreeMemory|llGetFreeURLs|llGetGMTclock|llGetGeometricCenter|llGetHTTPHeader|llGetInventoryCreator|llGetInventoryKey|llGetInventoryName|llGetInventoryNumber|llGetInventoryPermMask|llGetInventoryType|llGetKey|llGetLandOwnerAt|llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|llGetListLength|llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|llGetMaxScaleFactor|llGetMemoryLimit|llGetMinScaleFactor|llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|llGetNumberOfPrims|llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|llGetObjectMass|llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|llGetOmega|llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|llGetParcelMaxPrims|llGetParcelMusicURL|llGetParcelPrimCount|llGetParcelPrimOwners|llGetPermissions|llGetPermissionsKey|llGetPhysicsMaterial|llGetPos|llGetPrimMediaParams|llGetPrimitiveParams|llGetRegionAgentCount|llGetRegionCorner|llGetRegionFPS|llGetRegionFlags|llGetRegionName|llGetRegionTimeDilation|llGetRootPosition|llGetRootRotation|llGetRot|llGetSPMaxMemory|llGetScale|llGetScriptName|llGetScriptState|llGetSimStats|llGetSimulatorHostname|llGetStartParameter|llGetStaticPath|llGetStatus|llGetSubString|llGetSunDirection|llGetTexture|llGetTextureOffset|llGetTextureRot|llGetTextureScale|llGetTime|llGetTimeOfDay|llGetTimestamp|llGetTorque|llGetUnixTime|llGetUsedMemory|llGetUsername|llGetVel|llGetWallclock|llGiveInventory|llGiveInventoryList|llGiveMoney|llGround|llGroundContour|llGroundNormal|llGroundRepel|llGroundSlope|llHTTPRequest|llHTTPResponse|llInsertString|llInstantMessage|llIntegerToBase64|llJson2List|llJsonGetValue|llJsonSetValue|llJsonValueType|llKey2Name|llKeyCountKeyValue|llKeysKeyValue|llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|llList2Json|llList2Key|llList2List|llList2ListStrided|llList2Rot|llList2String|llList2Vector|llListFindList|llListInsertList|llListRandomize|llListReplaceList|llListSort|llListStatistics|llListen|llListenControl|llListenRemove|llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|llLoopSoundSlave|llMD5String|llManageEstateAccess|llMapDestination|llMessageLinked|llMinEventDelay|llModPow|llModifyLand|llMoveToTarget|llNavigateTo|llOffsetTexture|llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|llPassCollisions|llPassTouches|llPatrolPoints|llPlaySound|llPlaySoundSlave|llPow|llPreloadSound|llPursue|llPushObject|llReadKeyValue|llRegionSay|llRegionSayTo|llReleaseControls|llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|llRemoveFromLandBanList|llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|llRequestAgentData|llRequestDisplayName|llRequestExperiencePermissions|llRequestInventoryData|llRequestPermissions|llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|llResetScript|llResetTime|llReturnObjectsByID|llReturnObjectsByOwner|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|llRot2Fwd|llRot2Left|llRot2Up|llRotBetween|llRotLookAt|llRotTarget|llRotTargetRemove|llRotateTexture|llRound|llSHA1String|llSameGroup|llSay|llScaleByFactor|llScaleTexture|llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetAnimationOverride|llSetBuoyancy|llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|llSetHoverHeight|llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|llSetLinkColor|llSetLinkMedia|llSetLinkPrimitiveParams|llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|llSetParcelMusicURL|llSetPayPrice|llSetPhysicsMaterial|llSetPos|llSetPrimMediaParams|llSetPrimitiveParams|llSetRegionPos|llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|llSetSitText|llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|llSetTexture|llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|llSetVehicleFlags|llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|llSetVehicleVectorParam|llSetVelocity|llShout|llSin|llSitTarget|llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|llUnSit|llUnescapeURL|llUpdateCharacter|llUpdateKeyValue|llVecDist|llVecMag|llVecNorm|llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64\",\n        \"support.function.event.lsl\" : \"at_rot_target|at_target|attach|changed|collision|collision_end|collision_start|control|dataserver|email|experience_permissions|experience_permissions_denied|http_request|http_response|land_collision|land_collision_end|land_collision_start|link_message|listen|money|moving_end|moving_start|no_sensor|not_at_rot_target|not_at_target|object_rez|on_rez|path_update|remote_data|run_time_permissions|sensor|state_entry|state_exit|timer|touch|touch_end|touch_start|transaction_result\"\n        }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment.line.double-slash.lsl\",\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.block.begin.lsl\",\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.quoted.double.lsl\",\n                start : '\"',\n                end : '\"',\n                next : [{\n                    token : \"constant.character.escape.lsl\",\n                    regex : /\\\\[tn\"\\\\]/\n                }]\n            }, {\n                token : \"constant.numeric.lsl\",\n                regex : \"(0[xX][0-9a-fA-F]+|[+-]?[0-9]+(?:(?:\\\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)?)\\\\b\"\n            }, {\n                token : \"entity.name.state.lsl\",\n                regex : \"\\\\b((state)\\\\s+[A-Za-z_]\\\\w*|default)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token : \"support.function.user-defined.lsl\",\n                regex : /\\b([a-zA-Z_]\\w*)(?=\\(.*?\\))/\n            }, {\n                token : \"keyword.operator.lsl\",\n                regex : \"\\\\+\\\\+|\\\\-\\\\-|<<|>>|&&?|\\\\|\\\\|?|\\\\^|~|[!%<>=*+\\\\-\\\\/]=?\"\n            }, {\n                token : \"invalid.illegal.keyword.operator.lsl\",\n                regex : \":=?\"\n            }, {\n                token : \"punctuation.operator.lsl\",\n                regex : \"\\\\,|\\\\;\"\n            }, {\n                token : \"paren.lparen.lsl\",\n                regex : \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token : \"paren.rparen.lsl\",\n                regex : \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token : \"text.lsl\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.block.end.lsl\",\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment.block.lsl\"\n            }\n        ]\n    };\n    this.normalizeRules();\n}\n\nexports.LSLHighlightRules = LSLHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/lsl\",[\"require\",\"exports\",\"module\",\"ace/mode/lsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/text\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./lsl_highlight_rules\").LSLHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar oop = require(\"../lib/oop\");\n\nvar Mode = function() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = [\"//\"];\n\n    this.blockComment = {\n        start: \"/*\",\n        end: \"*/\"\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type === \"comment.block.lsl\") {\n            return indent;\n        }\n\n        if (state === \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/lsl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-lua.js",
    "content": "define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuaHighlightRules = function() {\n\n    var keywords = (\n        \"break|do|else|elseif|end|for|function|if|in|local|repeat|\"+\n         \"return|then|until|while|or|and|not\"\n    );\n\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n\n    var functions = (\n        \"string|xpcall|package|tostring|print|os|unpack|require|\"+\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\"+\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\"+\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\"+\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\"+\n        \"load|error|loadfile|\"+\n\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\"+\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\"+\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\"+\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\"+\n        \"lines|write|close|flush|open|output|type|read|stderr|\"+\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\"+\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\"+\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\"+\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\"+\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\"+\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\"+\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\"+\n        \"status|wrap|create|running|\"+\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\"+\n         \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\"\n    );\n\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [{\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex : /\\-\\-\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"comment\";\n                    },\n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ]\n        },\n\n        {\n            token : \"comment\",\n            regex : \"\\\\-\\\\-.*$\"\n        },\n        {\n            stateName: \"bracketedString\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length, currentState);\n                return \"string.start\";\n            },\n            regex : /\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"string.end\";\n                    },\n                    \n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        },\n        {\n            token : \"string\",           // \" string\n            regex : '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+|\\\\w+\"\n        } ]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LuaHighlightRules, TextHighlightRules);\n\nexports.LuaHighlightRules = LuaHighlightRules;\n});\n\ndefine(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/;\n    this.foldingStopMarker = /\\bend\\b|^\\s*}|\\]=*\\]/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1] == \"then\" && /\\belseif\\b/.test(line))\n                return;\n            if (match[1]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return \"start\";\n            } else if (match[2]) {\n                var type = session.bgTokenizer.getState(row) || \"\";\n                if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                    return \"start\";\n            } else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n\n        var match = line.match(this.foldingStopMarker);\n        if (match[0] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        } else if (match[0][0] === \"]\") {\n            var type = session.bgTokenizer.getState(row - 1) || \"\";\n            if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                return \"end\";\n        } else\n            return \"end\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.luaBlock(session, row, match.index + 1);\n\n            if (match[2])\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[0] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.luaBlock(session, row, match.index + 1);\n            }\n\n            if (match[0][0] === \"]\")\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n\n    this.luaBlock = function(session, row, column) {\n        var stream = new TokenIterator(session, row, column);\n        var indentKeywords = {\n            \"function\": 1,\n            \"do\": 1,\n            \"then\": 1,\n            \"elseif\": -1,\n            \"end\": -1,\n            \"repeat\": 1,\n            \"until\": -1\n        };\n\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"keyword\")\n            return;\n\n        var val = token.value;\n        var stack = [val];\n        var dir = indentKeywords[val];\n\n        if (!dir)\n            return;\n\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while(token = stream.step()) {\n            if (token.type !== \"keyword\")\n                continue;\n            var level = dir * indentKeywords[token.value];\n\n            if (level > 0) {\n                stack.unshift(token.value);\n            } else if (level <= 0) {\n                stack.shift();\n                if (!stack.length && token.value != \"elseif\")\n                    break;\n                if (level === 0)\n                    stack.unshift(token.value);\n            }\n        }\n\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar LuaFoldMode = require(\"./folding/lua\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n    this.HighlightRules = LuaHighlightRules;\n    \n    this.foldingRules = new LuaFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"--[\", end: \"]--\"};\n    \n    var indentKeywords = {\n        \"function\": 1,\n        \"then\": 1,\n        \"do\": 1,\n        \"else\": 1,\n        \"elseif\": 1,\n        \"repeat\": 1,\n        \"end\": -1,\n        \"until\": -1\n    };\n    var outdentKeywords = [\n        \"else\",\n        \"elseif\",\n        \"end\",\n        \"until\"\n    ];\n\n    function getNetIndentLevel(tokens) {\n        var level = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (token.type == \"keyword\") {\n                if (token.value in indentKeywords) {\n                    level += indentKeywords[token.value];\n                }\n            } else if (token.type == \"paren.lparen\") {\n                level += token.value.length;\n            } else if (token.type == \"paren.rparen\") {\n                level -= token.value.length;\n            }\n        }\n        if (level < 0) {\n            return -1;\n        } else if (level > 0) {\n            return 1;\n        } else {\n            return 0;\n        }\n    }\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var level = 0;\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (state == \"start\") {\n            level = getNetIndentLevel(tokens);\n        }\n        if (level > 0) {\n            return indent + tab;\n        } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {\n            if (!this.checkOutdent(state, line, \"\\n\")) {\n                return indent.substr(0, indent.length - tab.length);\n            }\n        }\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input != \"\\n\" && input != \"\\r\" && input != \"\\r\\n\")\n            return false;\n\n        if (line.match(/^\\s*[\\)\\}\\]]$/))\n            return true;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens || !tokens.length)\n            return false;\n\n        return (tokens[0].type == \"keyword\" && outdentKeywords.indexOf(tokens[0].value) != -1);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine).length;\n        var prevTokens = this.getTokenizer().getLineTokens(prevLine, \"start\").tokens;\n        var tabLength = session.getTabString().length;\n        var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);\n        var curIndent = this.$getIndent(session.getLine(row)).length;\n        if (curIndent <= expectedIndent) {\n            return;\n        }\n        session.outdentRows(new Range(row, 0, row + 2, 0));\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/lua_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/lua\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-luapage.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuaHighlightRules = function() {\n\n    var keywords = (\n        \"break|do|else|elseif|end|for|function|if|in|local|repeat|\"+\n         \"return|then|until|while|or|and|not\"\n    );\n\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n\n    var functions = (\n        \"string|xpcall|package|tostring|print|os|unpack|require|\"+\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\"+\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\"+\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\"+\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\"+\n        \"load|error|loadfile|\"+\n\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\"+\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\"+\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\"+\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\"+\n        \"lines|write|close|flush|open|output|type|read|stderr|\"+\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\"+\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\"+\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\"+\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\"+\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\"+\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\"+\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\"+\n        \"status|wrap|create|running|\"+\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\"+\n         \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\"\n    );\n\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [{\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex : /\\-\\-\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"comment\";\n                    },\n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ]\n        },\n\n        {\n            token : \"comment\",\n            regex : \"\\\\-\\\\-.*$\"\n        },\n        {\n            stateName: \"bracketedString\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length, currentState);\n                return \"string.start\";\n            },\n            regex : /\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"string.end\";\n                    },\n                    \n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        },\n        {\n            token : \"string\",           // \" string\n            regex : '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+|\\\\w+\"\n        } ]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LuaHighlightRules, TextHighlightRules);\n\nexports.LuaHighlightRules = LuaHighlightRules;\n});\n\ndefine(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/;\n    this.foldingStopMarker = /\\bend\\b|^\\s*}|\\]=*\\]/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1] == \"then\" && /\\belseif\\b/.test(line))\n                return;\n            if (match[1]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return \"start\";\n            } else if (match[2]) {\n                var type = session.bgTokenizer.getState(row) || \"\";\n                if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                    return \"start\";\n            } else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n\n        var match = line.match(this.foldingStopMarker);\n        if (match[0] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        } else if (match[0][0] === \"]\") {\n            var type = session.bgTokenizer.getState(row - 1) || \"\";\n            if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                return \"end\";\n        } else\n            return \"end\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.luaBlock(session, row, match.index + 1);\n\n            if (match[2])\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[0] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.luaBlock(session, row, match.index + 1);\n            }\n\n            if (match[0][0] === \"]\")\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n\n    this.luaBlock = function(session, row, column) {\n        var stream = new TokenIterator(session, row, column);\n        var indentKeywords = {\n            \"function\": 1,\n            \"do\": 1,\n            \"then\": 1,\n            \"elseif\": -1,\n            \"end\": -1,\n            \"repeat\": 1,\n            \"until\": -1\n        };\n\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"keyword\")\n            return;\n\n        var val = token.value;\n        var stack = [val];\n        var dir = indentKeywords[val];\n\n        if (!dir)\n            return;\n\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while(token = stream.step()) {\n            if (token.type !== \"keyword\")\n                continue;\n            var level = dir * indentKeywords[token.value];\n\n            if (level > 0) {\n                stack.unshift(token.value);\n            } else if (level <= 0) {\n                stack.shift();\n                if (!stack.length && token.value != \"elseif\")\n                    break;\n                if (level === 0)\n                    stack.unshift(token.value);\n            }\n        }\n\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar LuaFoldMode = require(\"./folding/lua\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n    this.HighlightRules = LuaHighlightRules;\n    \n    this.foldingRules = new LuaFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"--[\", end: \"]--\"};\n    \n    var indentKeywords = {\n        \"function\": 1,\n        \"then\": 1,\n        \"do\": 1,\n        \"else\": 1,\n        \"elseif\": 1,\n        \"repeat\": 1,\n        \"end\": -1,\n        \"until\": -1\n    };\n    var outdentKeywords = [\n        \"else\",\n        \"elseif\",\n        \"end\",\n        \"until\"\n    ];\n\n    function getNetIndentLevel(tokens) {\n        var level = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (token.type == \"keyword\") {\n                if (token.value in indentKeywords) {\n                    level += indentKeywords[token.value];\n                }\n            } else if (token.type == \"paren.lparen\") {\n                level += token.value.length;\n            } else if (token.type == \"paren.rparen\") {\n                level -= token.value.length;\n            }\n        }\n        if (level < 0) {\n            return -1;\n        } else if (level > 0) {\n            return 1;\n        } else {\n            return 0;\n        }\n    }\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var level = 0;\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (state == \"start\") {\n            level = getNetIndentLevel(tokens);\n        }\n        if (level > 0) {\n            return indent + tab;\n        } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {\n            if (!this.checkOutdent(state, line, \"\\n\")) {\n                return indent.substr(0, indent.length - tab.length);\n            }\n        }\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input != \"\\n\" && input != \"\\r\" && input != \"\\r\\n\")\n            return false;\n\n        if (line.match(/^\\s*[\\)\\}\\]]$/))\n            return true;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens || !tokens.length)\n            return false;\n\n        return (tokens[0].type == \"keyword\" && outdentKeywords.indexOf(tokens[0].value) != -1);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine).length;\n        var prevTokens = this.getTokenizer().getLineTokens(prevLine, \"start\").tokens;\n        var tabLength = session.getTabString().length;\n        var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);\n        var curIndent = this.$getIndent(session.getLine(row)).length;\n        if (curIndent <= expectedIndent) {\n            return;\n        }\n        session.outdentRows(new Range(row, 0, row + 2, 0));\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/lua_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/lua\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/luapage_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/lua_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\n\nvar LuaPageHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var startRules = [\n        {\n            token: \"keyword\",\n            regex: \"<\\\\%\\\\=?\",\n            push: \"lua-start\"\n        }, {\n            token: \"keyword\",\n            regex: \"<\\\\?lua\\\\=?\",\n            push: \"lua-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token: \"keyword\",\n            regex: \"\\\\%>\",\n            next: \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"\\\\?>\",\n            next: \"pop\"\n        }\n    ];\n\n    this.embedRules(LuaHighlightRules, \"lua-\", endRules, [\"start\"]);\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.normalizeRules();\n};\n\noop.inherits(LuaPageHighlightRules, HtmlHighlightRules);\n\nexports.LuaPageHighlightRules = LuaPageHighlightRules;\n\n});\n\ndefine(\"ace/mode/luapage\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/lua\",\"ace/mode/luapage_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar LuaMode = require(\"./lua\").Mode;\nvar LuaPageHighlightRules = require(\"./luapage_highlight_rules\").LuaPageHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    \n    this.HighlightRules = LuaPageHighlightRules;\n    this.createModeDelegates({\n        \"lua-\": LuaMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.$id = \"ace/mode/luapage\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-lucene.js",
    "content": "define(\"ace/mode/lucene_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuceneHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\[\\+\\-&\\|!\\(\\)\\{\\}\\[\\]^\"~\\*\\?:\\\\]/\n            }, {\n                token: \"constant.character.negation\",\n                regex: \"\\\\-\"\n            }, {\n                token: \"constant.character.interro\",\n                regex: \"\\\\?\"\n            }, {\n                token: \"constant.character.required\",\n                regex: \"\\\\+\"\n            }, {\n                token: \"constant.character.asterisk\",\n                regex: \"\\\\*\"\n            }, {\n                token: 'constant.character.proximity',\n                regex: '~(?:0\\\\.[0-9]+|[0-9]+)?'\n            }, {\n                token: 'keyword.operator',\n                regex: '(AND|OR|NOT|TO)\\\\b'\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(\\\\{\\\\[]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)\\\\}\\\\]]\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\\\\\\\\.|[^\\\\s:\\\\\\\\])+:\"\n            }, {\n                token: \"string\",           // \" string\n                regex: '\"(?:\\\\\\\\\"|[^\"])*\"'\n            }, {\n                token: \"term\",\n                regex: \"\\\\w+\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ]\n    };\n};\n\noop.inherits(LuceneHighlightRules, TextHighlightRules);\n\nexports.LuceneHighlightRules = LuceneHighlightRules;\n});\n\ndefine(\"ace/mode/lucene\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lucene_highlight_rules\"], function(require, exports, module) {\n'use strict';\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuceneHighlightRules = require(\"./lucene_highlight_rules\").LuceneHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = LuceneHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/lucene\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-makefile.js",
    "content": "define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\ndefine(\"ace/mode/makefile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/sh_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ShHighlightFile = require(\"./sh_highlight_rules\");\n\nvar MakefileHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": ShHighlightFile.reservedKeywords,\n        \"support.function.builtin\": ShHighlightFile.languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"string\");\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token: \"string.interpolated.backtick.makefile\",\n            regex: \"`\",\n            next: \"shell-start\"\n        },\n        {\n            token: \"punctuation.definition.comment.makefile\",\n            regex: /#(?=.)/,\n            next: \"comment\"\n        },\n        {\n            token: [ \"keyword.control.makefile\"],\n            regex: \"^(?:\\\\s*\\\\b)(\\\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\\\b)\"\n        },\n        {// ^([^\\t ]+(\\s[^\\t ]+)*:(?!\\=))\\s*.*\n            token: [\"entity.name.function.makefile\", \"text\"],\n            regex: \"^([^\\\\t ]+(?:\\\\s[^\\\\t ]+)*:)(\\\\s*.*)\"\n        }\n    ],\n    \"comment\": [\n        {\n            token : \"punctuation.definition.comment.makefile\",\n            regex : /.+\\\\/\n        },\n        {\n            token : \"punctuation.definition.comment.makefile\",\n            regex : \".+\",\n            next  : \"start\"\n        }\n    ],\n    \"shell-start\": [\n        {\n            token: keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, \n        {\n            token: \"string\",\n            regex : \"\\\\w+\"\n        }, \n        {\n            token : \"string.interpolated.backtick.makefile\",\n            regex : \"`\",\n            next  : \"start\"\n        }\n    ]\n};\n\n};\n\noop.inherits(MakefileHighlightRules, TextHighlightRules);\n\nexports.MakefileHighlightRules = MakefileHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/makefile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/makefile_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MakefileHighlightRules = require(\"./makefile_highlight_rules\").MakefileHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MakefileHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = \"#\";    \n    this.$indentWithTabs = true;\n    \n    this.$id = \"ace/mode/makefile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-markdown.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token : \"support.function\",\n        regex : /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function(value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next  : \"githubblock\"\n    };\n    var codeBlockRules = [{\n        token : \"support.function\",\n        regex : \".*\",\n        onMatch: function(value, state, stack, line) {\n            var embedState = stack[1];\n            var indent = stack[2][0];\n            var endMarker = stack[2][1];\n            var language = stack[2][2];\n            \n            var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n            if (\n                m && m[1].length < indent.length + 3\n                && m[2].length >= endMarker.length && m[2][0] == endMarker[0]\n            ) {\n                stack.splice(0, 3);\n                this.next = stack.shift();\n                return this.token;\n            }\n            this.next = \"\";\n            if (language && modes[language]) {\n                var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                stack[1] = data.state;\n                return data.tokens;\n            }\n            return this.token;\n        }\n    }];\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s|$)/,\n        next : \"header\"\n    },\n    codeBlockStartRule,\n    { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\!?\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text or alt text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href or image\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        },\n        codeBlockStartRule,\n        {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : codeBlockRules\n    });\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n\ndefine(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /^(?:[=-]+\\s*$|#{1,6} |`{3})/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) == \"start\")\n                return \"end\";\n            return \"start\";\n        }\n\n        return \"start\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) !== \"start\") {\n                while (++row < maxRow) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(startRow, startColumn, row, 0);\n            } else {\n                while (row -- > 0) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(row, line.length, startRow, 0);\n            }\n        }\n\n        var token;\n        function isHeading(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type.lastIndexOf(heading, 0) === 0;\n        }\n\n        var heading = \"markup.heading\";\n        function getLevel() {\n            var ch = token.value[0];\n            if (ch == \"=\") return 6;\n            if (ch == \"-\") return 5;\n            return 7 - token.value.search(/[^#]|$/);\n        }\n\n        if (isHeading(row)) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (!isHeading(row))\n                    continue;\n                var level = getLevel();\n                if (level >= startHeadingLevel)\n                    break;\n            }\n\n            endRow = row - (!token || [\"=\", \"-\"].indexOf(token.value[0]) == -1 ? 1 : 2);\n\n            if (endRow > startRow) {\n                while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                    endRow--;\n            }\n\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\ndefine(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\nvar Mode = function() {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n   \n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/sh\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar XmlMode = require(\"./xml\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar MarkdownFoldMode = require(\"./folding/markdown\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MarkdownHighlightRules;\n\n    this.createModeDelegates({\n        javascript: require(\"./javascript\").Mode,\n        html: require(\"./html\").Mode,\n        bash: require(\"./sh\").Mode,\n        sh: require(\"./sh\").Mode,\n        xml: require(\"./xml\").Mode,\n        css: require(\"./css\").Mode\n    });\n\n    this.foldingRules = new MarkdownFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(line);\n            if (!match)\n                return \"\";\n            var marker = match[2];\n            if (!marker)\n                marker = parseInt(match[3], 10) + 1 + \".\";\n            return match[1] + marker + match[4];\n        } else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/markdown\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-mask.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token : \"support.function\",\n        regex : /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function(value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next  : \"githubblock\"\n    };\n    var codeBlockRules = [{\n        token : \"support.function\",\n        regex : \".*\",\n        onMatch: function(value, state, stack, line) {\n            var embedState = stack[1];\n            var indent = stack[2][0];\n            var endMarker = stack[2][1];\n            var language = stack[2][2];\n            \n            var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n            if (\n                m && m[1].length < indent.length + 3\n                && m[2].length >= endMarker.length && m[2][0] == endMarker[0]\n            ) {\n                stack.splice(0, 3);\n                this.next = stack.shift();\n                return this.token;\n            }\n            this.next = \"\";\n            if (language && modes[language]) {\n                var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                stack[1] = data.state;\n                return data.tokens;\n            }\n            return this.token;\n        }\n    }];\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s|$)/,\n        next : \"header\"\n    },\n    codeBlockStartRule,\n    { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\!?\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text or alt text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href or image\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        },\n        codeBlockStartRule,\n        {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : codeBlockRules\n    });\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n\ndefine(\"ace/mode/mask_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/css_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nexports.MaskHighlightRules = MaskHighlightRules;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextRules   = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JSRules     = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar CssRules    = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MDRules     = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar HTMLRules   = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar token_TAG       = \"keyword.support.constant.language\",\n    token_COMPO     = \"support.function.markup.bold\",\n    token_KEYWORD   = \"keyword\",\n    token_LANG      = \"constant.language\",\n    token_UTIL      = \"keyword.control.markup.italic\",\n    token_ATTR      = \"support.variable.class\",\n    token_PUNKT     = \"keyword.operator\",\n    token_ITALIC    = \"markup.italic\",\n    token_BOLD      = \"markup.bold\",\n    token_LPARE     = \"paren.lparen\",\n    token_RPARE     = \"paren.rparen\";\n\nvar const_FUNCTIONS,\n    const_KEYWORDS,\n    const_CONST,\n    const_TAGS;\n(function(){\n    const_FUNCTIONS = lang.arrayToMap(\n        (\"log\").split(\"|\")\n    );\n    const_CONST = lang.arrayToMap(\n        (\":dualbind|:bind|:import|slot|event|style|html|markdown|md\").split(\"|\")\n    );\n    const_KEYWORDS = lang.arrayToMap(\n        (\"debugger|define|var|if|each|for|of|else|switch|case|with|visible|+if|+each|+for|+switch|+with|+visible|include|import\").split(\"|\")\n    );\n    const_TAGS = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n}());\n\nfunction MaskHighlightRules () {\n\n    this.$rules = {\n        \"start\" : [\n            Token(\"comment\", \"\\\\/\\\\/.*$\"),\n            Token(\"comment\", \"\\\\/\\\\*\", [\n                Token(\"comment\", \".*?\\\\*\\\\/\", \"start\"),\n                Token(\"comment\", \".+\")\n            ]),\n            \n            Blocks.string(\"'''\"),\n            Blocks.string('\"\"\"'),\n            Blocks.string('\"'),\n            Blocks.string(\"'\"),\n            \n            Blocks.syntax(/(markdown|md)\\b/, \"md-multiline\", \"multiline\"),\n            Blocks.syntax(/html\\b/, \"html-multiline\", \"multiline\"),\n            Blocks.syntax(/(slot|event)\\b/, \"js-block\", \"block\"),\n            Blocks.syntax(/style\\b/, \"css-block\", \"block\"),\n            Blocks.syntax(/var\\b/, \"js-statement\", \"attr\"),\n            \n            Blocks.tag(),\n            \n            Token(token_LPARE, \"[[({>]\"),\n            Token(token_RPARE, \"[\\\\])};]\", \"start\"),\n            {\n                caseInsensitive: true\n            }\n        ]\n    };\n    var rules = this;\n    \n    addJavaScript(\"interpolation\", /\\]/, token_RPARE + \".\" + token_ITALIC);\n    addJavaScript(\"statement\", /\\)|}|;/);\n    addJavaScript(\"block\", /\\}/);\n    addCss();\n    addMarkdown();\n    addHtml();\n    \n    function addJavaScript(name, escape, closeType) {\n        var prfx  =  \"js-\" + name + \"-\",\n            rootTokens = name === \"block\" ? [\"start\"] : [\"start\", \"no_regex\"];\n        add(\n            JSRules\n            , prfx\n            , escape\n            , rootTokens\n            , closeType\n        );\n    }\n    function addCss() {\n        add(CssRules, \"css-block-\", /\\}/);\n    }\n    function addMarkdown() {\n        add(MDRules, \"md-multiline-\", /(\"\"\"|''')/, []);\n    }\n    function addHtml() {\n        add(HTMLRules, \"html-multiline-\", /(\"\"\"|''')/);\n    }\n    function add(Rules, strPrfx, rgxEnd, rootTokens, closeType) {\n        var next = \"pop\";\n        var tokens = rootTokens || [ \"start\" ];\n        if (tokens.length === 0) {\n            tokens = null;\n        }\n        if (/block|multiline/.test(strPrfx)) {\n            next = strPrfx + \"end\";\n            rules.$rules[next] = [\n                Token(\"empty\", \"\", \"start\")\n            ];\n        }\n        rules.embedRules(\n            Rules\n            , strPrfx\n            , [ Token(closeType || token_RPARE, rgxEnd, next) ]\n            , tokens\n            , tokens == null ? true : false\n        );\n    }\n\n    this.normalizeRules();\n}\noop.inherits(MaskHighlightRules, TextRules);\n\nvar Blocks = {\n    string: function(str, next){\n        var token = Token(\n            \"string.start\"\n            , str\n            , [\n                Token(token_LPARE + \".\" + token_ITALIC, /~\\[/, Blocks.interpolation()),\n                Token(\"string.end\", str, \"pop\"),\n                {\n                    defaultToken: \"string\"\n                }\n            ]\n            , next\n        );\n        if (str.length === 1){\n            var escaped = Token(\"string.escape\", \"\\\\\\\\\" + str);\n            token.push.unshift(escaped);\n        }\n        return token;\n    },\n    interpolation: function(){\n        return [\n            Token(token_UTIL, /\\s*\\w*\\s*:/),\n            \"js-interpolation-start\"\n        ];\n    },\n    tagHead: function (rgx) {\n      return Token(token_ATTR, rgx, [\n            Token(token_ATTR, /[\\w\\-_]+/),\n            Token(token_LPARE + \".\" + token_ITALIC, /~\\[/, Blocks.interpolation()),\n            Blocks.goUp()\n        ]);\n    },\n    tag: function () {\n        return {\n            token: 'tag',\n            onMatch :  function(value) {\n                if (void 0 !== const_KEYWORDS[value])\n                    return token_KEYWORD;\n                if (void 0 !== const_CONST[value])\n                    return token_LANG;\n                if (void 0 !== const_FUNCTIONS[value])\n                    return \"support.function\";\n                if (void 0 !== const_TAGS[value.toLowerCase()])\n                    return token_TAG;\n                \n                return token_COMPO;\n            },\n            regex : /([@\\w\\-_:+]+)|((^|\\s)(?=\\s*(\\.|#)))/,\n            push: [\n                Blocks.tagHead(/\\./) ,\n                Blocks.tagHead(/#/) ,\n                Blocks.expression(),\n                Blocks.attribute(),\n                \n                Token(token_LPARE, /[;>{]/, \"pop\")\n            ]\n        };\n    },\n    syntax: function(rgx, next, type){\n        return {\n            token: token_LANG,\n            regex : rgx,\n            push: ({\n                \"attr\": [\n                    next + \"-start\",\n                    Token(token_PUNKT, /;/, \"start\")\n                ],\n                \"multiline\": [\n                    Blocks.tagHead(/\\./) ,\n                    Blocks.tagHead(/#/) ,\n                    Blocks.attribute(),\n                    Blocks.expression(),\n                    Token(token_LPARE, /[>\\{]/),\n                    Token(token_PUNKT, /;/, \"start\"),\n                    Token(token_LPARE, /'''|\"\"\"/, [ next + \"-start\" ])\n                ],\n                \"block\": [\n                    Blocks.tagHead(/\\./) ,\n                    Blocks.tagHead(/#/) ,\n                    Blocks.attribute(),\n                    Blocks.expression(),\n                    Token(token_LPARE, /\\{/, [ next + \"-start\" ])\n                ]\n            })[type]\n        };\n    },\n    attribute: function(){\n        return Token(function(value){\n            return  /^x\\-/.test(value)\n                ? token_ATTR + \".\" + token_BOLD\n                : token_ATTR;\n        }, /[\\w_-]+/, [\n            Token(token_PUNKT, /\\s*=\\s*/, [\n                Blocks.string('\"'),\n                Blocks.string(\"'\"),\n                Blocks.word(),\n                Blocks.goUp()\n            ]),\n            Blocks.goUp()\n        ]);\n    },\n    expression: function(){\n        return Token(token_LPARE, /\\(/, [ \"js-statement-start\" ]);\n    },\n    word: function(){\n        return Token(\"string\", /[\\w-_]+/);\n    },\n    goUp: function(){\n        return Token(\"text\", \"\", \"pop\");\n    },\n    goStart: function(){\n        return Token(\"text\", \"\", \"start\");\n    }\n};\n\n\nfunction Token(token, rgx, mix) {\n    var push, next, onMatch;\n    if (arguments.length === 4) {\n        push = mix;\n        next = arguments[3];\n    }\n    else if (typeof mix === \"string\") {\n        next = mix;\n    }\n    else {\n        push = mix;\n    }\n    if (typeof token === \"function\") {\n        onMatch = token;\n        token   = \"empty\";\n    }\n    return {\n        token: token,\n        regex: rgx,\n        push: push,\n        next: next,\n        onMatch: onMatch\n    };\n}\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/mask\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mask_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MaskHighlightRules = require(\"./mask_highlight_rules\").MaskHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MaskHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/mask\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-matlab.js",
    "content": "define(\"ace/mode/matlab_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MatlabHighlightRules = function() {\n\nvar keywords = (\n        \"break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while\"\n    );\n\n    var builtinConstants = (\n        \"true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout\"\n    );\n\n    var builtinFunctions = (\n        \"abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|\"+\n\t\t\"airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|\" +\n\t\t\"audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|\"+\n\t\t\"bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|\"+\n\t\t\"bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|\"+\n\t\t\"camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:.(?:close|closeVar|\"+\n\t\t\"computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|\"+\n\t\t\"getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|\"+\n\t\t\"getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|\"+\n\t\t\"getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|\"+\n\t\t\"getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|\"+\n\t\t\"hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|\"+\n\t\t\"renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|\"+\n\t\t\"setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|\"+\n\t\t\"cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|\"+\n\t\t\"clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|\"+\n\t\t\"commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|\"+\n\t\t\"copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|\"+\n\t\t\"cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|\"+\n\t\t\"dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|\"+\n\t\t\"demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|\"+\n\t\t\"dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|\"+\n\t\t\"erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|\"+\n\t\t\"expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|\"+\n\t\t\"fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|\"+\n\t\t\"findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|\"+\n\t\t\"frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|\"+\n\t\t\"get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|\"+\n\t\t\"guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|\"+\n\t\t\"hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|\"+\n\t\t\"hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|\"+\n\t\t\"ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|\"+\n\t\t\"1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|\"+\n\t\t\"isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|\"+\n\t\t\"isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|\"+\n\t\t\"isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|\"+\n\t\t\"lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|\"+\n\t\t\"linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|\"+\n\t\t\"lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab.io.MatFile|matlab.mixin.(?:Copyable|Heterogeneous(?:.getDefaultScalarElement)?)|matlabrc|\"+\n\t\t\"matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta.(?:class(?:.fromName)?|DynamicProperty|EnumeratedValue|event|\"+\n\t\t\"MetaData|method|package(?:.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|\"+\n\t\t\"minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|\"+\n\t\t\"multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|\"+\n\t\t\"ncwriteschema|ndgrid|ndims|ne|NET(?:.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|\"+\n\t\t\"NetException|setStaticProperty))?|netcdf.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|\"+\n\t\t\"getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|\"+\n\t\t\"inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|\"+\n\t\t\"setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|\"+\n\t\t\"ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|\"+\n\t\t\"orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|\"+\n\t\t\"permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|\"+\n\t\t\"polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|\"+\n\t\t\"PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:.(?:create|\"+\n\t\t\"getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|\"+\n\t\t\"rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|\"+\n\t\t\"restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|\"+\n\t\t\"saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|\"+\n\t\t\"setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|\"+\n\t\t\"spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|\"+\n\t\t\"str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|\"+\n\t\t\"strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|\"+\n\t\t\"support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|\"+\n\t\t\"textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|\"+\n\t\t\"transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|\"+\n\t\t\"uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|\"+\n\t\t\"uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|\"+\n\t\t\"userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:.isPlatformSupported)?|VideoWriter(?:.getProfiles)?|\"+\n\t\t\"view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|\"+\n\t\t\"what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|\"+\n\t\t\"ylabel|ylim|zeros|zip|zlabel|zlim|zoom|addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|\"+\n\t\t\"pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|\"+\n\t\t\"cholcov|Classification(?:BaggedEnsemble|Discriminant(?:.(?:fit|make|template))?|Ensemble|KNN(?:.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|\"+\n\t\t\"template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|\"+\n\t\t\"controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|\"+\n\t\t\"dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|\"+\n\t\t\"fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:.fit)?|geo(?:cdf|inv|mean|\"+\n\t\t\"pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|\"+\n\t\t\"gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|\"+\n\t\t\"jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|\"+\n\t\t\"LinearModel(?:.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|\"+\n\t\t\"mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:.fit)?|nan(?:cov|max|mean|median|min|std|\"+\n\t\t\"sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|\"+\n\t\t\"nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|\"+\n\t\t\"pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|\"+\n\t\t\"Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|\"+\n\t\t\"rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|regstats|relieff|ridge|\"+\n\t\t\"robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|\"+\n\t\t\"statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|\"+\n\t\t\"ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztest\"+\n\t\t\"adapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|\"+\n\t\t\"bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|\"+\n\t\t\"cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|\"+\n\t\t\"entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|\"+\n\t\t\"getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|\"+\n\t\t\"iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|\"+\n\t\t\"imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|\"+\n\t\t\"imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|\"+\n\t\t\"imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|\"+\n\t\t\"imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|\"+\n\t\t\"imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|\"+\n\t\t\"iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|\"+\n\t\t\"isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|\"+\n\t\t\"medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|\"+\n\t\t\"reflect|regionprops|registration.metric.(?:MattesMutualInformation|MeanSquares)|registration.optimizer.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|\"+\n\t\t\"rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|\"+\n\t\t\"warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb|bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|\"+\n\t\t\"linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog\"\n    );\n    var storageType = (\n        \"cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"storage.type\": storageType,\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        start: [{ \n            token : \"string\",\n            regex : \"'\",\n            stateName : \"qstring\",\n            next  : [{\n                token : \"constant.language.escape\",\n                regex : \"''\"\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }, {\n            regex: \"\",\n            next: \"noQstring\"\n        }],        \n        noQstring : [{\n            regex: \"^\\\\s*%{\\\\s*$\",\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            token : \"comment\",\n            regex : \"%[^\\r\\n]*\"\n        }, {\n            token : \"string\",\n            regex : '\"',\n            stateName : \"qqstring\",\n            next  : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\./\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\",\n            next: \"start\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\",\n            next: \"start\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[({\\\\[]\",\n            next: \"start\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]})]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }, {\n            token : \"text\",\n            regex : \"$\",\n            next  : \"start\"\n        }],\n        blockComment: [{\n            regex: \"^\\\\s*%{\\\\s*$\",\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            regex: \"^\\\\s*%}\\\\s*$\",\n            token: \"comment.end\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(MatlabHighlightRules, TextHighlightRules);\n\nexports.MatlabHighlightRules = MatlabHighlightRules;\n});\n\ndefine(\"ace/mode/matlab\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matlab_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MatlabHighlightRules = require(\"./matlab_highlight_rules\").MatlabHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = MatlabHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"%\";\n    this.blockComment = {start: \"%{\", end: \"%}\"};\n\n    this.$id = \"ace/mode/matlab\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-maze.js",
    "content": "define(\"ace/mode/maze_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MazeHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"keyword.control\",\n            regex: /##|``/,\n            comment: \"Wall\"\n        }, {\n            token: \"entity.name.tag\",\n            regex: /\\.\\./,\n            comment: \"Path\"\n        }, {\n            token: \"keyword.control\",\n            regex: /<>/,\n            comment: \"Splitter\"\n        }, {\n            token: \"entity.name.tag\",\n            regex: /\\*[\\*A-Za-z0-9]/,\n            comment: \"Signal\"\n        }, {\n            token: \"constant.numeric\",\n            regex: /[0-9]{2}/,\n            comment: \"Pause\"\n        }, {\n            token: \"keyword.control\",\n            regex: /\\^\\^/,\n            comment: \"Start\"\n        }, {\n            token: \"keyword.control\",\n            regex: /\\(\\)/,\n            comment: \"Hole\"\n        }, {\n            token: \"support.function\",\n            regex: />>/,\n            comment: \"Out\"\n        }, {\n            token: \"support.function\",\n            regex: />\\//,\n            comment: \"Ln Out\"\n        }, {\n            token: \"support.function\",\n            regex: /<</,\n            comment: \"In\"\n        }, {\n            token: \"keyword.control\",\n            regex: /--/,\n            comment: \"One use\"\n        }, {\n            token: \"constant.language\",\n            regex: /%[LRUDNlrudn]/,\n            comment: \"Direction\"\n        }, {\n            token: [\n                \"entity.name.function\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"constant.numeric\",\n                \"keyword.operator\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"constant.numeric\",\n                \"string.quoted.double\",\n                \"string.quoted.single\"\n            ],\n            regex: /([A-Za-z][A-Za-z0-9])( *-> *)(?:([-+*\\/]=)( *)((?:-)?)([0-9]+)|(=)( *)(?:((?:-)?)([0-9]+)|(\"[^\"]*\")|('[^']*')))/,\n            comment: \"Assignment function\"\n        }, {\n            token: [\n                \"entity.name.function\",\n                \"keyword.other\",\n                \"keyword.control\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"constant.numeric\",\n                \"entity.name.tag\",\n                \"keyword.other\",\n                \"keyword.control\",\n                \"keyword.other\",\n                \"constant.language\",\n                \"keyword.other\",\n                \"keyword.control\",\n                \"keyword.other\",\n                \"constant.language\"\n            ],\n            regex: /([A-Za-z][A-Za-z0-9])( *-> *)(IF|if)( *)(?:([<>]=?|==)( *)((?:-)?)([0-9]+)|(\\*[\\*A-Za-z0-9]))( *)(THEN|then)( *)(%[LRUDNlrudn])(?:( *)(ELSE|else)( *)(%[LRUDNlrudn]))?/,\n            comment: \"Equality Function\"\n        }, {\n            token: \"entity.name.function\",\n            regex: /[A-Za-z][A-Za-z0-9]/,\n            comment: \"Function cell\"\n        }, {\n            token: \"comment.line.double-slash\",\n            regex: / *\\/\\/.*/,\n            comment: \"Comment\"\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nMazeHighlightRules.metaData = {\n    fileTypes: [\"mz\"],\n    name: \"Maze\",\n    scopeName: \"source.maze\"\n};\n\n\noop.inherits(MazeHighlightRules, TextHighlightRules);\n\nexports.MazeHighlightRules = MazeHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/maze\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/maze_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MazeHighlightRules = require(\"./maze_highlight_rules\").MazeHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MazeHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/maze\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-mel.js",
    "content": "define(\"ace/mode/mel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MELHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { caseInsensitive: true,\n           token: 'storage.type.mel',\n           regex: '\\\\b(matrix|string|vector|float|int|void)\\\\b' },\n         { caseInsensitive: true,\n           token: 'support.function.mel',\n           regex: '\\\\b((s(h(ow(ManipCtx|S(hadingGroupAttrEditor|electionInTitle)|H(idden|elp)|Window)|el(f(Button|TabLayout|Layout)|lField)|ading(GeometryRelCtx|Node|Connection|LightRelCtx))|y(s(tem|File)|mbol(Button|CheckBox))|nap(shot|Mode|2to2 |TogetherCtx|Key)|c(ulpt|ene(UIReplacement|Editor)|ale(BrushBrightness |Constraint|Key(Ctx)?)?|r(ipt(Node|Ctx|Table|edPanel(Type)?|Job|EditorInfo)|oll(Field|Layout))|mh)|t(itch(Surface(Points)?|AndExplodeShell )|a(ckTrace|rt(sWith |String ))|r(cmp|i(ng(ToStringArray |Array(Remove(Duplicates | )|C(ount |atenate )|ToString |Intersector))|p )|oke))|i(n(gleProfileBirailSurface)?|ze|gn|mplify)|o(u(nd(Control)?|rce)|ft(Mod(Ctx)?)?|rt)|u(perCtx|rface(S(haderList|ampler))?|b(st(itute(Geometry|AllString )?|ring)|d(M(irror|a(tchTopology|p(SewMove|Cut)))|iv(Crease|DisplaySmoothness)?|C(ollapse|leanTopology)|T(o(Blind|Poly)|ransferUVsToCache)|DuplicateAndConnect|EditUV|ListComponentConversion|AutoProjection)))|p(h(ere|rand)|otLight(PreviewPort)?|aceLocator|r(ing|eadSheetEditor))|e(t(s|MenuMode|Sta(te |rtupMessage|mpDensity )|NodeTypeFlag|ConstraintRestPosition |ToolTo|In(putDeviceMapping|finity)|D(ynamic|efaultShadingGroup|rivenKeyframe)|UITemplate|P(ar(ticleAttr|ent)|roject )|E(scapeCtx|dit(or|Ctx))|Key(Ctx|frame|Path)|F(ocus|luidAttr)|Attr(Mapping)?)|parator|ed|l(ect(Mode|ionConnection|Context|Type|edNodes|Pr(iority|ef)|Key(Ctx)?)?|LoadSettings)|archPathArray )|kin(Cluster|Percent)|q(uareSurface|rt)|w(itchTable|atchDisplayPort)|a(ve(Menu|Shelf|ToolSettings|I(nitialState|mage)|Pref(s|Objects)|Fluid|A(ttrPreset |llShelves))|mpleImage)|rtContext|mooth(step|Curve|TangentSurface))|h(sv_to_rgb|yp(ot|er(Graph|Shade|Panel))|i(tTest|de|lite)|ot(Box|key(Check)?)|ud(Button|Slider(Button)?)|e(lp(Line)?|adsUpDisplay|rmite)|wRe(nder(Load)?|flectionMap)|ard(enPointCurve|ware(RenderPanel)?))|n(o(nLinear|ise|de(Type|IconButton|Outliner|Preset)|rmal(ize |Constraint))|urbs(Boolean|S(elect|quare)|C(opyUVSet|ube)|To(Subdiv|Poly(gonsPref)?)|Plane|ViewDirectionVector )|ew(ton|PanelItems)|ame(space(Info)?|Command|Field))|c(h(oice|dir|eck(Box(Grp)?|DefaultRenderGlobals)|a(n(nelBox|geSubdiv(Region|ComponentDisplayLevel))|racter(Map|OutlineEditor)?))|y(cleCheck|linder)|tx(Completion|Traverse|EditMode|Abort)|irc(ularFillet|le)|o(s|n(str(uctionHistory|ain(Value)?)|nect(ionInfo|Control|Dynamic|Joint|Attr)|t(extInfo|rol)|dition|e|vert(SolidTx|Tessellation|Unit|FromOldLayers |Lightmap)|firmDialog)|py(SkinWeights|Key|Flexor|Array )|l(or(Slider(Grp|ButtonGrp)|Index(SliderGrp)?|Editor|AtPoint)?|umnLayout|lision)|arsenSubdivSelectionList|m(p(onentEditor|utePolysetVolume |actHairSystem )|mand(Port|Echo|Line)))|u(tKey|r(ve(MoveEPCtx|SketchCtx|CVCtx|Intersect|OnSurface|E(ditorCtx|PCtx)|AddPtCtx)?|rent(Ctx|Time(Ctx)?|Unit)))|p(GetSolverAttr|Button|S(olver(Types)?|e(t(SolverAttr|Edit)|am))|C(o(nstraint|llision)|ache)|Tool|P(anel|roperty))|eil|l(ip(Schedule(rOutliner)?|TrimBefore |Editor(CurrentTimeCtx)?)?|ose(Surface|Curve)|uster|ear(Cache)?|amp)|a(n(CreateManip|vas)|tch(Quiet)?|pitalizeString |mera(View)?)|r(oss(Product )?|eate(RenderLayer|MotionField |SubdivRegion|N(ode|ewShelf )|D(isplayLayer|rawCtx)|Editor))|md(Shell|FileOutput))|M(R(ender(ShadowData|Callback|Data|Util|View|Line(Array)?)|ampAttribute)|G(eometryData|lobal)|M(odelMessage|essage|a(nipData|t(erial|rix)))|BoundingBox|S(yntax|ceneMessage|t(atus|ring(Array)?)|imple|pace|elect(ion(Mask|List)|Info)|watchRender(Register|Base))|H(ardwareRenderer|WShaderSwatchGenerator)|NodeMessage|C(o(nditionMessage|lor(Array)?|m(putation|mand(Result|Message)))|ursor|loth(Material|S(ystem|olverRegister)|Con(straint|trol)|Triangle|Particle|Edge|Force)|allbackIdArray)|T(ypeId|ime(r(Message)?|Array)?|oolsInfo|esselationParams|r(imBoundaryArray|ansformationMatrix))|I(ntArray|t(Geometry|Mesh(Polygon|Edge|Vertex|FaceVertex)|S(urfaceCV|electionList)|CurveCV|Instancer|eratorType|D(ependency(Graph|Nodes)|ag)|Keyframe)|k(System|HandleGroup)|mage)|3dView|Object(SetMessage|Handle|Array)?|D(G(M(odifier|essage)|Context)|ynSwept(Triangle|Line)|istance|oubleArray|evice(State|Channel)|a(ta(Block|Handle)|g(M(odifier|essage)|Path(Array)?))|raw(Request(Queue)?|Info|Data|ProcedureBase))|U(serEventMessage|i(nt(Array|64Array)|Message))|P(o(int(Array)?|lyMessage)|lug(Array)?|rogressWindow|x(G(eometry(Iterator|Data)|lBuffer)|M(idiInputDevice|odelEditorCommand|anipContainer)|S(urfaceShape(UI)?|pringNode|electionContext)|HwShaderNode|Node|Co(ntext(Command)?|m(ponentShape|mand))|T(oolCommand|ransform(ationMatrix)?)|IkSolver(Node)?|3dModelView|ObjectSet|D(eformerNode|ata|ragAndDropBehavior)|PolyT(weakUVCommand|rg)|EmitterNode|F(i(eldNode|leTranslator)|luidEmitterNode)|LocatorNode))|E(ulerRotation|vent(Message)?)|ayatomr|Vector(Array)?|Quaternion|F(n(R(otateManip|eflectShader|adialField)|G(e(nericAttribute|ometry(Data|Filter))|ravityField)|M(otionPath|es(sageAttribute|h(Data)?)|a(nip3D|trix(Data|Attribute)))|B(l(innShader|endShapeDeformer)|ase)|S(caleManip|t(ateManip|ring(Data|ArrayData))|ingleIndexedComponent|ubd(Names|Data)?|p(hereData|otLight)|et|kinCluster)|HikEffector|N(on(ExtendedLight|AmbientLight)|u(rbs(Surface(Data)?|Curve(Data)?)|meric(Data|Attribute))|ewtonField)|C(haracter|ircleSweepManip|ompo(nent(ListData)?|undAttribute)|urveSegmentManip|lip|amera)|T(ypedAttribute|oggleManip|urbulenceField|r(ipleIndexedComponent|ansform))|I(ntArrayData|k(Solver|Handle|Joint|Effector))|D(ynSweptGeometryData|i(s(cManip|tanceManip)|rection(Manip|alLight))|ouble(IndexedComponent|ArrayData)|ependencyNode|a(ta|gNode)|ragField)|U(ni(tAttribute|formField)|Int64ArrayData)|P(hong(Shader|EShader)|oint(On(SurfaceManip|CurveManip)|Light|ArrayData)|fxGeometry|lugin(Data)?|arti(cleSystem|tion))|E(numAttribute|xpression)|V(o(lume(Light|AxisField)|rtexField)|ectorArrayData)|KeyframeDelta(Move|B(lockAddRemove|reakdown)|Scale|Tangent|InfType|Weighted|AddRemove)?|F(ield|luid|reePointTriadManip)|W(ireDeformer|eightGeometryFilter)|L(ight(DataAttribute)?|a(yeredShader|ttice(D(eformer|ata))?|mbertShader))|A(ni(sotropyShader|mCurve)|ttribute|irField|r(eaLight|rayAttrsData)|mbientLight))?|ile(IO|Object)|eedbackLine|loat(Matrix|Point(Array)?|Vector(Array)?|Array))|L(i(ghtLinks|brary)|ockMessage)|A(n(im(Message|C(ontrol|urveC(hange|lipboard(Item(Array)?)?))|Util)|gle)|ttribute(Spec(Array)?|Index)|r(rayData(Builder|Handle)|g(Database|Parser|List))))|t(hreePointArcCtx|ime(Control|Port|rX)|o(ol(Button|HasOptions|Collection|Dropped|PropertyWindow)|NativePath |upper|kenize(List )?|l(ower|erance)|rus|ggle(WindowVisibility|Axis)?)|u(rbulence|mble(Ctx)?)|ex(RotateContext|M(oveContext|anipContext)|t(ScrollList|Curves|ure(HairColor |DisplacePlane |PlacementContext|Window)|ToShelf |Field(Grp|ButtonGrp)?)?|S(caleContext|electContext|mudgeUVContext)|WinToolCtx)|woPointArcCtx|a(n(gentConstraint)?|bLayout)|r(im|unc(ate(HairCache|FluidCache))?|a(ns(formLimits|lator)|c(e|k(Ctx)?))))|i(s(olateSelect|Connected|True|Dirty|ParentOf |Valid(String |ObjectName |UiName )|AnimCurve )|n(s(tance(r)?|ert(Joint(Ctx)?|K(not(Surface|Curve)|eyCtx)))|heritTransform|t(S(crollBar|lider(Grp)?)|er(sect|nalVar|ToUI )|Field(Grp)?))|conText(Radio(Button|Collection)|Button|StaticLabel|CheckBox)|temFilter(Render|Type|Attr)?|prEngine|k(S(ystem(Info)?|olver|plineHandleCtx)|Handle(Ctx|DisplayScale)?|fkDisplayMethod)|m(portComposerCurves |fPlugins|age))|o(ceanNurbsPreviewPlane |utliner(Panel|Editor)|p(tion(Menu(Grp)?|Var)|en(GLExtension|MayaPref))|verrideModifier|ffset(Surface|Curve(OnSurface)?)|r(ientConstraint|bit(Ctx)?)|b(soleteProc |j(ect(Center|Type(UI)?|Layer )|Exists)))|d(yn(RelEd(itor|Panel)|Globals|C(ontrol|ache)|P(a(intEditor|rticleCtx)|ref)|Exp(ort|ression)|amicLoad)|i(s(connect(Joint|Attr)|tanceDim(Context|ension)|pla(y(RGBColor|S(tats|urface|moothness)|C(olor|ull)|Pref|LevelOfDetail|Affected)|cementToPoly)|kCache|able)|r(name |ect(ionalLight|KeyCtx)|map)|mWhen)|o(cServer|Blur|t(Product )?|ubleProfileBirailSurface|peSheetEditor|lly(Ctx)?)|uplicate(Surface|Curve)?|e(tach(Surface|Curve|DeviceAttr)|vice(Panel|Editor)|f(ine(DataServer|VirtualDevice)|ormer|ault(Navigation|LightListCheckBox))|l(ete(Sh(elfTab |adingGroupsAndMaterials )|U(nusedBrushes |I)|Attr)?|randstr)|g_to_rad)|agPose|r(opoffLocator|ag(gerContext)?)|g(timer|dirty|Info|eval))|CBG |u(serCtx|n(t(angleUV|rim)|i(t|form)|do(Info)?|loadPlugin|assignInputDevice|group)|iTemplate|p(dateAE |Axis)|v(Snapshot|Link))|joint(C(tx|luster)|DisplayScale|Lattice)?|p(sd(ChannelOutliner|TextureFile|E(ditTextureFile|xport))|close|i(c(ture|kWalk)|xelMove)|o(se|int(MatrixMult |C(onstraint|urveConstraint)|On(Surface|Curve)|Position|Light)|p(upMenu|en)|w|l(y(Reduce|GeoSampler|M(irrorFace|ove(UV|Edge|Vertex|Facet(UV)?)|erge(UV|Edge(Ctx)?|Vertex|Facet(Ctx)?)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|l(indData|endColor))|S(traightenUVBorder|oftEdge|u(perCtx|bdivide(Edge|Facet))|p(her(icalProjection|e)|lit(Ring|Ctx|Edge|Vertex)?)|e(tToFaceNormal|parate|wEdge|lect(Constraint(Monitor)?|EditCtx))|mooth)|Normal(izeUV|PerVertex)?|C(hipOff|ylind(er|ricalProjection)|o(ne|pyUV|l(or(BlindData|Set|PerVertex)|lapse(Edge|Facet)))|u(t(Ctx)?|be)|l(ipboard|oseBorder)|acheMonitor|rea(seEdge|teFacet(Ctx)?))|T(o(Subdiv|rus)|r(iangulate|ansfer))|In(stallAction|fo)|Options|D(uplicate(Edge|AndConnect)|el(Edge|Vertex|Facet))|U(nite|VSet)|P(yramid|oke|lan(e|arProjection)|r(ism|ojection))|E(ditUV|valuate|xtrude(Edge|Facet))|Qu(eryBlindData|ad)|F(orceUV|lip(UV|Edge))|WedgeFace|L(istComponentConversion|ayoutUV)|A(utoProjection|ppend(Vertex|FacetCtx)?|verage(Normal|Vertex)))|eVectorConstraint))|utenv|er(cent|formanceOptions)|fxstrokes|wd|l(uginInfo|a(y(b(last|ackOptions))?|n(e|arSrf)))|a(steKey|ne(l(History|Configuration)?|Layout)|thAnimation|irBlend|use|lettePort|r(ti(cle(RenderInfo|Instancer|Exists)?|tion)|ent(Constraint)?|am(Dim(Context|ension)|Locator)))|r(int|o(j(ect(ion(Manip|Context)|Curve|Tangent)|FileViewer)|pMo(dCtx|ve)|gress(Bar|Window)|mptDialog)|eloadRefEd))|e(n(codeString|d(sWith |String )|v|ableDevice)|dit(RenderLayer(Globals|Members)|or(Template)?|DisplayLayer(Globals|Members)|AttrLimits )|v(ent|al(Deferred|Echo)?)|quivalent(Tol | )|ffector|r(f|ror)|x(clusiveLightCheckBox|t(end(Surface|Curve)|rude)|ists|p(ortComposerCurves |ression(EditorListen)?)?|ec(uteForEachObject )?|actWorldBoundingBox)|mit(ter)?)|v(i(sor|ew(Set|HeadOn|2dToolCtx|C(lipPlane|amera)|Place|Fit|LookAt))|o(lumeAxis|rtex)|e(ctorize|rifyCmd )|alidateShelfName )|key(Tangent|frame(Region(MoveKeyCtx|S(caleKeyCtx|e(tKeyCtx|lectKeyCtx))|CurrentTimeCtx|TrackCtx|InsertKeyCtx|D(irectKeyCtx|ollyCtx))|Stats|Outliner)?)|qu(it|erySubdiv)|f(c(heck|lose)|i(nd(RelatedSkinCluster |MenuItem |er|Keyframe|AllIntersections )|tBspline|l(ter(StudioImport|Curve|Expand)?|e(BrowserDialog|test|Info|Dialog|Extension )?|letCurve)|rstParentOf )|o(ntDialog|pen|rmLayout)|print|eof|flush|write|l(o(or|w|at(S(crollBar|lider(Grp|ButtonGrp|2)?)|Eq |Field(Grp)?))|u(shUndo|id(CacheInfo|Emitter|VoxelInfo))|exor)|r(omNativePath |e(eFormFillet|wind|ad)|ameLayout)|get(word|line)|mod)|w(hatIs|i(ndow(Pref)?|re(Context)?)|orkspace|ebBrowser(Prefs)?|a(itCursor|rning)|ri(nkle(Context)?|teTake))|l(s(T(hroughFilter|ype )|UI)?|i(st(Relatives|MenuAnnotation |Sets|History|NodeTypes|C(onnections|ameras)|Transforms |InputDevice(s|Buttons|Axes)|erEditor|DeviceAttachments|Unselected |A(nimatable|ttr))|n(step|eIntersection )|ght(link|List(Panel|Editor)?))|o(ckNode|okThru|ft|ad(NewShelf |P(lugin|refObjects)|Fluid)|g)|a(ssoContext|y(out|er(Button|ed(ShaderPort|TexturePort)))|ttice(DeformKeyCtx)?|unch(ImageEditor)?))|a(ssign(Command|InputDevice)|n(notate|im(C(one|urveEditor)|Display|View)|gle(Between)?)|tt(ach(Surface|Curve|DeviceAttr)|r(ibute(Menu|Info|Exists|Query)|NavigationControlGrp|Co(ntrolGrp|lorSliderGrp|mpatibility)|PresetEditWin|EnumOptionMenu(Grp)?|Field(Grp|SliderGrp)))|i(r|mConstraint)|d(d(NewShelfTab|Dynamic|PP|Attr(ibuteEditorNodeHelp)?)|vanceToNextDrivenKey)|uto(Place|Keyframe)|pp(endStringArray|l(y(Take|AttrPreset)|icationName))|ffect(s|edNet)|l(i(as(Attr)?|gn(Surface|C(tx|urve))?)|lViewFit)|r(c(len|Len(DimContext|gthDimension))|t(BuildPaintMenu|Se(tPaintCtx|lectCtx)|3dPaintCtx|UserPaintCtx|PuttyCtx|FluidAttrCtx|Attr(SkinPaintCtx|Ctx|PaintVertexCtx))|rayMapper)|mbientLight|b(s|out))|r(igid(Body|Solver)|o(t(at(ionInterpolation|e))?|otOf |undConstantRadius|w(ColumnLayout|Layout)|ll(Ctx)?)|un(up|TimeCommand)|e(s(olutionNode|et(Tool|AE )|ampleFluid)|hash|n(der(GlobalsNode|Manip|ThumbnailUpdate|Info|er|Partition|QualityNode|Window(SelectContext|Editor)|LayerButton)?|ame(SelectionList |UI|Attr)?)|cord(Device|Attr)|target|order(Deformers)?|do|v(olve|erse(Surface|Curve))|quires|f(ineSubdivSelectionList|erence(Edit|Query)?|resh(AE )?)|loadImage|adTake|root|move(MultiInstance|Joint)|build(Surface|Curve))|a(n(d(state|omizeFollicles )?|geControl)|d(i(o(MenuItemCollection|Button(Grp)?|Collection)|al)|_to_deg)|mpColorPort)|gb_to_hsv)|g(o(toBindPose |al)|e(t(M(odifiers|ayaPanelTypes )|Classification|InputDeviceRange|pid|env|DefaultBrush|Pa(nel|rticleAttr)|F(ileList|luidAttr)|A(ttr|pplicationVersionAsFloat ))|ometryConstraint)|l(Render(Editor)?|obalStitch)|a(uss|mma)|r(id(Layout)?|oup(ObjectsByName )?|a(dientControl(NoAttr)?|ph(SelectContext|TrackCtx|DollyCtx)|vity|bColor))|match)|x(pmPicker|form|bmLangPathList )|m(i(n(imizeApp)?|rrorJoint)|o(del(CurrentTimeCtx|Panel|Editor)|use|v(In|e(IKtoFK |VertexAlongDirection|KeyCtx)?|Out))|u(te|ltiProfileBirailSurface)|e(ssageLine|nu(BarLayout|Item(ToShelf )?|Editor)?|mory)|a(nip(Rotate(Context|LimitsCtx)|Move(Context|LimitsCtx)|Scale(Context|LimitsCtx)|Options)|tch|ke(Roll |SingleSurface|TubeOn |Identity|Paintable|bot|Live)|rker|g|x))|b(in(Membership|d(Skin|Pose))|o(neLattice|undary|x(ZoomCtx|DollyCtx))|u(tton(Manip)?|ild(BookmarkMenu|KeyframeMenu)|fferCurve)|e(ssel|vel(Plus)?)|l(indDataType|end(Shape(Panel|Editor)?|2|TwoAttr))|a(sename(Ex | )|tchRender|ke(Results|Simulation|Clip|PartialHistory|FluidShading )))))\\\\b' },\n         { caseInsensitive: true,\n           token: 'support.constant.mel',\n           regex: '\\\\b(s(h(ellTessellate|a(d(ing(Map|Engine)|erGlow)|pe))|n(ow|apshot(Shape)?)|c(ulpt|aleConstraint|ript)|t(yleCurve|itch(Srf|AsNurbsShell)|u(cco|dioClearCoat)|encil|roke(Globals)?)|i(ngleShadingSwitch|mpleVolumeShader)|o(ftMod(Manip|Handle)?|lidFractal)|u(rface(Sha(der|pe)|Info|EdManip|VarGroup|Luminance)|b(Surface|d(M(odifier(UV|World)?|ap(SewMove|Cut|pingManip))|B(lindData|ase)|iv(ReverseFaces|SurfaceVarGroup|Co(llapse|mponentId)|To(Nurbs|Poly))?|HierBlind|CleanTopology|Tweak(UV)?|P(lanarProj|rojManip)|LayoutUV|A(ddTopology|utoProj))|Curve))|p(BirailSrf|otLight|ring)|e(tRange|lectionListOperator)|k(inCluster|etchPlane)|quareSrf|ampler(Info)?|m(ooth(Curve|TangentSrf)|ear))|h(svToRgb|yper(GraphInfo|View|Layout)|ik(Solver|Handle|Effector)|oldMatrix|eightField|w(Re(nderGlobals|flectionMap)|Shader)|a(ir(System|Constraint|TubeShader)|rd(enPoint|wareRenderGlobals)))|n(o(n(ExtendedLightShapeNode|Linear|AmbientLightShapeNode)|ise|rmalConstraint)|urbs(Surface|Curve|T(oSubdiv(Proc)?|essellate)|DimShape)|e(twork|wtonField))|c(h(o(ice|oser)|ecker|aracter(Map|Offset)?)|o(n(straint|tr(olPoint|ast)|dition)|py(ColorSet|UVSet))|urve(Range|Shape|Normalizer(Linear|Angle)?|In(tersect|fo)|VarGroup|From(Mesh(CoM|Edge)?|Su(rface(Bnd|CoS|Iso)?|bdiv(Edge|Face)?)))|l(ip(Scheduler|Library)|o(se(stPointOnSurface|Surface|Curve)|th|ud)|uster(Handle)?|amp)|amera(View)?|r(eate(BPManip|ColorSet|UVSet)|ater))|t(ime(ToUnitConversion|Function)?|oo(nLineAttributes|lDrawManip)|urbulenceField|ex(BaseDeformManip|ture(BakeSet|2d|ToGeom|3d|Env)|SmudgeUVManip|LatticeDeformManip)|weak|angentConstraint|r(i(pleShadingSwitch|m(WithBoundaries)?)|ansform(Geometry)?))|i(n(s(tancer|ertKnot(Surface|Curve))|tersectSurface)|k(RPsolver|MCsolver|S(ystem|olver|Csolver|plineSolver)|Handle|PASolver|Effector)|m(plicit(Box|Sphere|Cone)|agePlane))|o(cean(Shader)?|pticalFX|ffset(Surface|C(os|urve))|ldBlindDataBase|rient(Constraint|ationMarker)|bject(RenderFilter|MultiFilter|BinFilter|S(criptFilter|et)|NameFilter|TypeFilter|Filter|AttrFilter))|d(yn(Globals|Base)|i(s(tance(Between|DimShape)|pla(yLayer(Manager)?|cementShader)|kCache)|rect(ionalLight|edDisc)|mensionShape)|o(ubleShadingSwitch|f)|pBirailSrf|e(tach(Surface|Curve)|pendNode|f(orm(Bend|S(ine|quash)|Twist|ableShape|F(unc|lare)|Wave)|ault(RenderUtilityList|ShaderList|TextureList|LightList))|lete(Co(lorSet|mponent)|UVSet))|ag(Node|Pose)|r(opoffLocator|agField))|u(seBackground|n(trim|i(t(Conversion|ToTimeConversion)|formField)|known(Transform|Dag)?)|vChooser)|j(iggle|oint(Cluster|Ffd|Lattice)?)|p(sdFileTex|hong(E)?|o(s(tProcessList|itionMarker)|int(MatrixMult|Constraint|On(SurfaceInfo|CurveInfo)|Emitter|Light)|l(y(Reduce|M(irror|o(difier(UV|World)?|ve(UV|Edge|Vertex|Face(tUV)?))|erge(UV|Edge|Vert|Face)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|lindData|ase)|S(traightenUVBorder|oftEdge|ubd(Edge|Face)|p(h(ere|Proj)|lit(Ring|Edge|Vert)?)|e(parate|wEdge)|mooth(Proxy|Face)?)|Normal(izeUV|PerVertex)?|C(hipOff|yl(inder|Proj)|o(ne|pyUV|l(orPerVertex|lapse(Edge|F)))|u(t(Manip(Container)?)?|be)|loseBorder|rea(seEdge|t(or|eFace)))|T(o(Subdiv|rus)|weak(UV)?|r(iangulate|ansfer))|OptUvs|D(uplicateEdge|el(Edge|Vertex|Facet))|Unite|P(yramid|oke(Manip)?|lan(e|arProj)|r(i(sm|mitive)|oj))|Extrude(Edge|Vertex|Face)|VertexNormalManip|Quad|Flip(UV|Edge)|WedgeFace|LayoutUV|A(utoProj|ppend(Vertex)?|verageVertex))|eVectorConstraint))|fx(Geometry|Hair|Toon)|l(usMinusAverage|a(n(e|arTrimSurface)|ce(2dTexture|3dTexture)))|a(ssMatrix|irBlend|r(ti(cle(SamplerInfo|C(olorMapper|loud)|TranspMapper|IncandMapper|AgeMapper)?|tion)|ent(Constraint|Tessellate)|amDimension))|r(imitive|o(ject(ion|Curve|Tangent)|xyManager)))|e(n(tity|v(Ball|ironmentFog|S(phere|ky)|C(hrome|ube)|Fog))|x(t(end(Surface|Curve)|rude)|p(lodeNurbsShell|ression)))|v(iewManip|o(lume(Shader|Noise|Fog|Light|AxisField)|rtexField)|e(ctor(RenderGlobals|Product)|rtexBakeSet))|quadShadingSwitch|f(i(tBspline|eld|l(ter(Resample|Simplify|ClosestSample|Euler)?|e|letCurve))|o(urByFourMatrix|llicle)|urPointOn(MeshInfo|Subd)|f(BlendSrf(Obsolete)?|d|FilletSrf)|l(ow|uid(S(hape|liceManip)|Texture(2D|3D)|Emitter)|exorShape)|ra(ctal|meCache))|w(tAddMatrix|ire|ood|eightGeometryFilter|ater|rap)|l(ight(Info|Fog|Li(st|nker))?|o(cator|okAt|d(Group|Thresholds)|ft)|uminance|ea(stSquaresModifier|ther)|a(yered(Shader|Texture)|ttice|mbert))|a(n(notationShape|i(sotropic|m(Blend(InOut)?|C(urve(T(T|U|L|A)|U(T|U|L|A))?|lip)))|gleBetween)|tt(ach(Surface|Curve)|rHierarchyTest)|i(rField|mConstraint)|dd(Matrix|DoubleLinear)|udio|vg(SurfacePoints|NurbsSurfacePoints|Curves)|lign(Manip|Surface|Curve)|r(cLengthDimension|tAttrPaintTest|eaLight|rayMapper)|mbientLight|bstractBase(NurbsConversion|Create))|r(igid(Body|Solver|Constraint)|o(ck|undConstantRadius)|e(s(olution|ultCurve(TimeTo(Time|Unitless|Linear|Angular))?)|nder(Rect|Globals(List)?|Box|Sphere|Cone|Quality|L(ight|ayer(Manager)?))|cord|v(olve(dPrimitive)?|erse(Surface|Curve)?)|f(erence|lect)|map(Hsv|Color|Value)|build(Surface|Curve))|a(dialField|mp(Shader)?)|gbToHsv|bfSrf)|g(uide|eo(Connect(or|able)|metry(Shape|Constraint|VarGroup|Filter))|lobal(Stitch|CacheControl)|ammaCorrect|r(id|oup(Id|Parts)|a(nite|vityField)))|Fur(Globals|Description|Feedback|Attractors)|xformManip|m(o(tionPath|untain|vie)|u(te|lt(Matrix|i(plyDivide|listerLight)|DoubleLinear))|pBirailSrf|e(sh(VarGroup)?|ntalray(Texture|IblShape))|a(terialInfo|ke(Group|Nurb(sSquare|Sphere|C(ylinder|ircle|one|ube)|Torus|Plane)|CircularArc|T(hreePointCircularArc|extCurves|woPointCircularArc))|rble))|b(irailSrf|o(neLattice|olean|undary(Base)?)|u(lge|mp(2d|3d))|evel(Plus)?|l(in(n|dDataTemplate)|end(Shape|Color(s|Sets)|TwoAttr|Device|Weighted)?)|a(se(GeometryVarGroup|ShadingSwitch|Lattice)|keSet)|r(ownian|ush)))\\\\b' },\n         { caseInsensitive: true,\n           token: 'keyword.control.mel',\n           regex: '\\\\b(if|in|else|for|while|break|continue|case|default|do|switch|return|switch|case|source|catch|alias)\\\\b' },\n         { token: 'keyword.other.mel', regex: '\\\\b(global)\\\\b' },\n         { caseInsensitive: true,\n           token: 'constant.language.mel',\n           regex: '\\\\b(null|undefined)\\\\b' },\n         { token: 'constant.numeric.mel',\n           regex: '\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\\\\b' },\n         { token: 'punctuation.definition.string.begin.mel',\n           regex: '\"',\n           push: \n            [ { token: 'constant.character.escape.mel', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.mel',\n                regex: '\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.double.mel' } ] },\n         \n         { token: [ 'variable.other.mel', 'punctuation.definition.variable.mel' ],\n           regex: '(\\\\$)([a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*?\\\\b)' },\n           \n         { token: 'punctuation.definition.string.begin.mel',\n           regex: '\\'',\n           push: \n            [ { token: 'constant.character.escape.mel', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.mel',\n                regex: '\\'',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.single.mel' } ] },\n         \n         { token: 'constant.language.mel',\n           regex: '\\\\b(false|true|yes|no|on|off)\\\\b' },\n           \n         { token: 'punctuation.definition.comment.mel',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.mel',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.mel' } ] },\n         \n         { token: [ 'comment.line.double-slash.mel', 'punctuation.definition.comment.mel' ],\n           regex: '(//)(.*$\\\\n?)' },\n           \n         { caseInsensitive: true,\n           token: 'keyword.operator.mel',\n           regex: '\\\\b(instanceof)\\\\b' },\n         { token: 'keyword.operator.symbolic.mel',\n           regex: '[-\\\\!\\\\%\\\\&\\\\*\\\\+\\\\=\\\\/\\\\?\\\\:]' },\n         \n         { token: [ 'meta.preprocessor.mel', 'punctuation.definition.preprocessor.mel' ],\n           regex: '(^[ \\\\t]*)((?:#)[a-zA-Z]+)' },\n         \n         { token: [ 'meta.function.mel', 'keyword.other.mel', 'storage.type.mel', 'entity.name.function.mel', 'punctuation.section.function.mel' ],\n           regex: '(global\\\\s*)?(proc\\\\s*)(\\\\w+\\\\s*\\\\[?\\\\]?\\\\s+|\\\\s+)([A-Za-z_][A-Za-z0-9_\\\\.]*)(\\\\s*\\\\()',\n           push: \n            [ { include: '$self' },\n              { token: 'punctuation.section.function.mel',\n                regex: '\\\\)',\n                next: 'pop' },\n              { defaultToken: 'meta.function.mel' } ] }\n              \n              ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(MELHighlightRules, TextHighlightRules);\n\nexports.MELHighlightRules = MELHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/mel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mel_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MELHighlightRules = require(\"./mel_highlight_rules\").MELHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MELHighlightRules;\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/mel\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-mixal.js",
    "content": "define(\"ace/mode/mixal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MixalHighlightRules = function() {\n    var isValidSymbol = function(string) {\n        return string && string.search(/^[A-Z\\u0394\\u03a0\\u03a30-9]{1,10}$/) > -1 && string.search(/[A-Z\\u0394\\u03a0\\u03a3]/) > -1;\n    };\n\n    var isValidOp = function(op) {\n        return op && [\n            'NOP', 'ADD', 'FADD', 'SUB', 'FSUB', 'MUL', 'FMUL', 'DIV', 'FDIV', 'NUM', 'CHAR', 'HLT',\n            'SLA', 'SRA', 'SLAX', 'SRAX', 'SLC', 'SRC', 'MOVE', 'LDA', 'LD1', 'LD2', 'LD3', 'LD4',\n            'LD5', 'LD6', 'LDX', 'LDAN', 'LD1N', 'LD2N', 'LD3N', 'LD4N', 'LD5N', 'LD6N', 'LDXN',\n            'STA', 'ST1', 'ST2', 'ST3', 'ST4', 'ST5', 'ST6', 'STX', 'STJ', 'STZ', 'JBUS', 'IOC',\n            'IN', 'OUT', 'JRED', 'JMP', 'JSJ', 'JOV', 'JNOV', 'JL', 'JE', 'JG', 'JGE', 'JNE', 'JLE',\n            'JAN', 'JAZ', 'JAP', 'JANN', 'JANZ', 'JANP', 'J1N', 'J1Z', 'J1P', 'J1NN', 'J1NZ',\n            'J1NP', 'J2N', 'J2Z', 'J2P', 'J2NN', 'J2NZ', 'J2NP','J3N', 'J3Z', 'J3P', 'J3NN', 'J3NZ',\n            'J3NP', 'J4N', 'J4Z', 'J4P', 'J4NN', 'J4NZ', 'J4NP', 'J5N', 'J5Z', 'J5P', 'J5NN',\n            'J5NZ', 'J5NP','J6N', 'J6Z', 'J6P', 'J6NN', 'J6NZ', 'J6NP', 'JXAN', 'JXZ', 'JXP',\n            'JXNN', 'JXNZ', 'JXNP', 'INCA', 'DECA', 'ENTA', 'ENNA', 'INC1', 'DEC1', 'ENT1', 'ENN1',\n            'INC2', 'DEC2', 'ENT2', 'ENN2', 'INC3', 'DEC3', 'ENT3', 'ENN3', 'INC4', 'DEC4', 'ENT4',\n            'ENN4', 'INC5', 'DEC5', 'ENT5', 'ENN5', 'INC6', 'DEC6', 'ENT6', 'ENN6', 'INCX', 'DECX',\n            'ENTX', 'ENNX', 'CMPA', 'FCMP', 'CMP1', 'CMP2', 'CMP3', 'CMP4', 'CMP5', 'CMP6', 'CMPX',\n            'EQU', 'ORIG', 'CON', 'ALF', 'END'\n        ].indexOf(op) > -1;\n    };\n\n    var containsOnlySupportedCharacters = function(string) {\n        return string && string.search(/[^ A-Z\\u0394\\u03a0\\u03a30-9.,()+*/=$<>@;:'-]/) == -1;\n    };\n\n    this.$rules = {\n        \"start\" : [{\n            token: \"comment.line.character\",\n            regex: /^ *\\*.*$/\n        }, {\n            token: function(label, space0, keyword, space1, literal, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    \"keyword.control\",\n                    \"text\",\n                    containsOnlySupportedCharacters(literal) ? \"text\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(ALF)(  )(.{5})(\\s+.*)?$/\n        }, {\n            token: function(label, space0, keyword, space1, literal, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    \"keyword.control\",\n                    \"text\",\n                    containsOnlySupportedCharacters(literal) ? \"text\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(ALF)( )(\\S.{4})(\\s+.*)?$/\n        }, {\n            token: function(label, space0, op, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    isValidOp(op) ? \"keyword.control\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(\\S+)(?:\\s*)$/\n        }, {\n            token: function(label, space0, op, space1, address, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    isValidOp(op) ? \"keyword.control\" : \"invalid.illegal\",\n                    \"text\",\n                    containsOnlySupportedCharacters(address) ? \"text\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(\\S+)( +)(\\S+)(\\s+.*)?$/\n        }, {\n            defaultToken: \"text\"\n        }]\n    };\n};\n\noop.inherits(MixalHighlightRules, TextHighlightRules);\n\nexports.MixalHighlightRules = MixalHighlightRules;\n\n});\n\ndefine(\"ace/mode/mixal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mixal_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MixalHighlightRules = require(\"./mixal_highlight_rules\").MixalHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = MixalHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/mixal\";\n    this.lineCommentStart = \"*\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-mushcode.js",
    "content": "define(\"ace/mode/mushcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MushCodeRules = function() {\n\n\n    var keywords = (\n \"@if|\"+\n \"@ifelse|\"+\n \"@switch|\"+\n \"@halt|\"+\n \"@dolist|\"+\n \"@create|\"+\n \"@scent|\"+\n \"@sound|\"+\n \"@touch|\"+\n \"@ataste|\"+\n \"@osound|\"+\n \"@ahear|\"+\n \"@aahear|\"+\n \"@amhear|\"+\n \"@otouch|\"+\n \"@otaste|\"+\n \"@drop|\"+\n \"@odrop|\"+\n \"@adrop|\"+\n \"@dropfail|\"+\n \"@odropfail|\"+\n \"@smell|\"+\n \"@oemit|\"+\n \"@emit|\"+\n \"@pemit|\"+\n \"@parent|\"+\n \"@clone|\"+\n \"@taste|\"+\n \"whisper|\"+\n \"page|\"+\n \"say|\"+\n \"pose|\"+\n \"semipose|\"+\n \"teach|\"+\n \"touch|\"+\n \"taste|\"+\n \"smell|\"+\n \"listen|\"+\n \"look|\"+\n \"move|\"+\n \"go|\"+\n \"home|\"+\n \"follow|\"+\n \"unfollow|\"+\n \"desert|\"+\n \"dismiss|\"+\n \"@tel\"\n    );\n\n    var builtinConstants = (\n        \"=#0\"\n    );\n\n    var builtinFunctions = (\n \"default|\"+\n \"edefault|\"+\n \"eval|\"+\n \"get_eval|\"+\n \"get|\"+\n \"grep|\"+\n \"grepi|\"+\n \"hasattr|\"+\n \"hasattrp|\"+\n \"hasattrval|\"+\n \"hasattrpval|\"+\n \"lattr|\"+\n \"nattr|\"+\n \"poss|\"+\n \"udefault|\"+\n \"ufun|\"+\n \"u|\"+\n \"v|\"+\n \"uldefault|\"+\n \"xget|\"+\n \"zfun|\"+\n \"band|\"+\n \"bnand|\"+\n \"bnot|\"+\n \"bor|\"+\n \"bxor|\"+\n \"shl|\"+\n \"shr|\"+\n \"and|\"+\n \"cand|\"+\n \"cor|\"+\n \"eq|\"+\n \"gt|\"+\n \"gte|\"+\n \"lt|\"+\n \"lte|\"+\n \"nand|\"+\n \"neq|\"+\n \"nor|\"+\n \"not|\"+\n \"or|\"+\n \"t|\"+\n \"xor|\"+\n \"con|\"+\n \"entrances|\"+\n \"exit|\"+\n \"followers|\"+\n \"home|\"+\n \"lcon|\"+\n \"lexits|\"+\n \"loc|\"+\n \"locate|\"+\n \"lparent|\"+\n \"lsearch|\"+\n \"next|\"+\n \"num|\"+\n \"owner|\"+\n \"parent|\"+\n \"pmatch|\"+\n \"rloc|\"+\n \"rnum|\"+\n \"room|\"+\n \"where|\"+\n \"zone|\"+\n \"worn|\"+\n \"held|\"+\n \"carried|\"+\n \"acos|\"+\n \"asin|\"+\n \"atan|\"+\n \"ceil|\"+\n \"cos|\"+\n \"e|\"+\n \"exp|\"+\n \"fdiv|\"+\n \"fmod|\"+\n \"floor|\"+\n \"log|\"+\n \"ln|\"+\n \"pi|\"+\n \"power|\"+\n \"round|\"+\n \"sin|\"+\n \"sqrt|\"+\n \"tan|\"+\n \"aposs|\"+\n \"andflags|\"+\n \"conn|\"+\n \"commandssent|\"+\n \"controls|\"+\n \"doing|\"+\n \"elock|\"+\n \"findable|\"+\n \"flags|\"+\n \"fullname|\"+\n \"hasflag|\"+\n \"haspower|\"+\n \"hastype|\"+\n \"hidden|\"+\n \"idle|\"+\n \"isbaker|\"+\n \"lock|\"+\n \"lstats|\"+\n \"money|\"+\n \"who|\"+\n \"name|\"+\n \"nearby|\"+\n \"obj|\"+\n \"objflags|\"+\n \"photo|\"+\n \"poll|\"+\n \"powers|\"+\n \"pendingtext|\"+\n \"receivedtext|\"+\n \"restarts|\"+\n \"restarttime|\"+\n \"subj|\"+\n \"shortestpath|\"+\n \"tmoney|\"+\n \"type|\"+\n \"visible|\"+\n \"cat|\"+\n \"element|\"+\n \"elements|\"+\n \"extract|\"+\n \"filter|\"+\n \"filterbool|\"+\n \"first|\"+\n \"foreach|\"+\n \"fold|\"+\n \"grab|\"+\n \"graball|\"+\n \"index|\"+\n \"insert|\"+\n \"itemize|\"+\n \"items|\"+\n \"iter|\"+\n \"last|\"+\n \"ldelete|\"+\n \"map|\"+\n \"match|\"+\n \"matchall|\"+\n \"member|\"+\n \"mix|\"+\n \"munge|\"+\n \"pick|\"+\n \"remove|\"+\n \"replace|\"+\n \"rest|\"+\n \"revwords|\"+\n \"setdiff|\"+\n \"setinter|\"+\n \"setunion|\"+\n \"shuffle|\"+\n \"sort|\"+\n \"sortby|\"+\n \"splice|\"+\n \"step|\"+\n \"wordpos|\"+\n \"words|\"+\n \"add|\"+\n \"lmath|\"+\n \"max|\"+\n \"mean|\"+\n \"median|\"+\n \"min|\"+\n \"mul|\"+\n \"percent|\"+\n \"sign|\"+\n \"stddev|\"+\n \"sub|\"+\n \"val|\"+\n \"bound|\"+\n \"abs|\"+\n \"inc|\"+\n \"dec|\"+\n \"dist2d|\"+\n \"dist3d|\"+\n \"div|\"+\n \"floordiv|\"+\n \"mod|\"+\n \"modulo|\"+\n \"remainder|\"+\n \"vadd|\"+\n \"vdim|\"+\n \"vdot|\"+\n \"vmag|\"+\n \"vmax|\"+\n \"vmin|\"+\n \"vmul|\"+\n \"vsub|\"+\n \"vunit|\"+\n \"regedit|\"+\n \"regeditall|\"+\n \"regeditalli|\"+\n \"regediti|\"+\n \"regmatch|\"+\n \"regmatchi|\"+\n \"regrab|\"+\n \"regraball|\"+\n \"regraballi|\"+\n \"regrabi|\"+\n \"regrep|\"+\n \"regrepi|\"+\n \"after|\"+\n \"alphamin|\"+\n \"alphamax|\"+\n \"art|\"+\n \"before|\"+\n \"brackets|\"+\n \"capstr|\"+\n \"case|\"+\n \"caseall|\"+\n \"center|\"+\n \"containsfansi|\"+\n \"comp|\"+\n \"decompose|\"+\n \"decrypt|\"+\n \"delete|\"+\n \"edit|\"+\n \"encrypt|\"+\n \"escape|\"+\n \"if|\"+\n \"ifelse|\"+\n \"lcstr|\"+\n \"left|\"+\n \"lit|\"+\n \"ljust|\"+\n \"merge|\"+\n \"mid|\"+\n \"ostrlen|\"+\n \"pos|\"+\n \"repeat|\"+\n \"reverse|\"+\n \"right|\"+\n \"rjust|\"+\n \"scramble|\"+\n \"secure|\"+\n \"space|\"+\n \"spellnum|\"+\n \"squish|\"+\n \"strcat|\"+\n \"strmatch|\"+\n \"strinsert|\"+\n \"stripansi|\"+\n \"stripfansi|\"+\n \"strlen|\"+\n \"switch|\"+\n \"switchall|\"+\n \"table|\"+\n \"tr|\"+\n \"trim|\"+\n \"ucstr|\"+\n \"unsafe|\"+\n \"wrap|\"+\n \"ctitle|\"+\n \"cwho|\"+\n \"channels|\"+\n \"clock|\"+\n \"cflags|\"+\n \"ilev|\"+\n \"itext|\"+\n \"inum|\"+\n \"convsecs|\"+\n \"convutcsecs|\"+\n \"convtime|\"+\n \"ctime|\"+\n \"etimefmt|\"+\n \"isdaylight|\"+\n \"mtime|\"+\n \"secs|\"+\n \"msecs|\"+\n \"starttime|\"+\n \"time|\"+\n \"timefmt|\"+\n \"timestring|\"+\n \"utctime|\"+\n \"atrlock|\"+\n \"clone|\"+\n \"create|\"+\n \"cook|\"+\n \"dig|\"+\n \"emit|\"+\n \"lemit|\"+\n \"link|\"+\n \"oemit|\"+\n \"open|\"+\n \"pemit|\"+\n \"remit|\"+\n \"set|\"+\n \"tel|\"+\n \"wipe|\"+\n \"zemit|\"+\n \"fbcreate|\"+\n \"fbdestroy|\"+\n \"fbwrite|\"+\n \"fbclear|\"+\n \"fbcopy|\"+\n \"fbcopyto|\"+\n \"fbclip|\"+\n \"fbdump|\"+\n \"fbflush|\"+\n \"fbhset|\"+\n \"fblist|\"+\n \"fbstats|\"+\n \"qentries|\"+\n \"qentry|\"+\n \"play|\"+\n \"ansi|\"+\n \"break|\"+\n \"c|\"+\n \"asc|\"+\n \"die|\"+\n \"isdbref|\"+\n \"isint|\"+\n \"isnum|\"+\n \"isletters|\"+\n \"linecoords|\"+\n \"localize|\"+\n \"lnum|\"+\n \"nameshort|\"+\n \"null|\"+\n \"objeval|\"+\n \"r|\"+\n \"rand|\"+\n \"s|\"+\n \"setq|\"+\n \"setr|\"+\n \"soundex|\"+\n \"soundslike|\"+\n \"valid|\"+\n \"vchart|\"+\n \"vchart2|\"+\n \"vlabel|\"+\n \"@@|\"+\n \"bakerdays|\"+\n \"bodybuild|\"+\n \"box|\"+\n \"capall|\"+\n \"catalog|\"+\n \"children|\"+\n \"ctrailer|\"+\n \"darttime|\"+\n \"debt|\"+\n \"detailbar|\"+\n \"exploredroom|\"+\n \"fansitoansi|\"+\n \"fansitoxansi|\"+\n \"fullbar|\"+\n \"halfbar|\"+\n \"isdarted|\"+\n \"isnewbie|\"+\n \"isword|\"+\n \"lambda|\"+\n \"lobjects|\"+\n \"lplayers|\"+\n \"lthings|\"+\n \"lvexits|\"+\n \"lvobjects|\"+\n \"lvplayers|\"+\n \"lvthings|\"+\n \"newswrap|\"+\n \"numsuffix|\"+\n \"playerson|\"+\n \"playersthisweek|\"+\n \"randomad|\"+\n \"randword|\"+\n \"realrandword|\"+\n \"replacechr|\"+\n \"second|\"+\n \"splitamount|\"+\n \"strlenall|\"+\n \"text|\"+\n \"third|\"+\n \"tofansi|\"+\n \"totalac|\"+\n \"unique|\"+\n \"getaddressroom|\"+\n \"listpropertycomm|\"+\n \"listpropertyres|\"+\n \"lotowner|\"+\n \"lotrating|\"+\n \"lotratingcount|\"+\n \"lotvalue|\"+\n \"boughtproduct|\"+\n \"companyabb|\"+\n \"companyicon|\"+\n \"companylist|\"+\n \"companyname|\"+\n \"companyowners|\"+\n \"companyvalue|\"+\n \"employees|\"+\n \"invested|\"+\n \"productlist|\"+\n \"productname|\"+\n \"productowners|\"+\n \"productrating|\"+\n \"productratingcount|\"+\n \"productsoldat|\"+\n \"producttype|\"+\n \"ratedproduct|\"+\n \"soldproduct|\"+\n \"topproducts|\"+\n \"totalspentonproduct|\"+\n \"totalstock|\"+\n \"transfermoney|\"+\n \"uniquebuyercount|\"+\n \"uniqueproductsbought|\"+\n \"validcompany|\"+\n \"deletepicture|\"+\n \"fbsave|\"+\n \"getpicturesecurity|\"+\n \"haspicture|\"+\n \"listpictures|\"+\n \"picturesize|\"+\n \"replacecolor|\"+\n \"rgbtocolor|\"+\n \"savepicture|\"+\n \"setpicturesecurity|\"+\n \"showpicture|\"+\n \"piechart|\"+\n \"piechartlabel|\"+\n \"createmaze|\"+\n \"drawmaze|\"+\n \"drawwireframe\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [\n         {\n                token : \"variable\", // mush substitution register\n                regex : \"%[0-9]{1}\"\n         },\n         {\n                token : \"variable\", // mush substitution register\n                regex : \"%q[0-9A-Za-z]{1}\"\n         },\n         {\n                token : \"variable\", // mush special character register\n                regex : \"%[a-zA-Z]{1}\"\n         },\n         {\n                token: \"variable.language\",\n                regex: \"%[a-z0-9-_]+\"\n         },\n        {\n            token : \"constant.numeric\", // imaginary\n            regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // long integer\n            regex : integer + \"[lL]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|#|%|<<|>>|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n};\n\noop.inherits(MushCodeRules, TextHighlightRules);\n\nexports.MushCodeRules = MushCodeRules;\n});\n\ndefine(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(markers) {\n    this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, match.index);\n            if (match[2])\n                return this.indentationBlock(session, row, match.index + match[2].length);\n            return this.indentationBlock(session, row);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/mushcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mushcode_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MushCodeRules = require(\"./mushcode_highlight_rules\").MushCodeRules;\nvar PythonFoldMode = require(\"./folding/pythonic\").FoldMode;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = MushCodeRules;\n    this.foldingRules = new PythonFoldMode(\"\\\\:\");\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n   var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/mushcode\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-mysql.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/mysql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MysqlHighlightRules = function() {\n\n    var mySqlKeywords = /*sql*/ \"alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where\" + \"|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat\";\n    var builtins = \"by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl\";\n    var variable = \"charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtins,\n        \"keyword\": mySqlKeywords,\n        \"constant\": \"false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat\",\n        \"variable.language\": variable\n    }, \"identifier\", true);\n\n    \n    function string(rule) {\n        var start = rule.start;\n        var escapeSeq = rule.escape;\n        return {\n            token: \"string.start\",\n            regex: start,\n            next: [\n                {token: \"constant.language.escape\", regex: escapeSeq},\n                {token: \"string.end\", next: \"start\", regex: start},\n                {defaultToken: \"string\"}\n            ]\n        };\n    }\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\", regex : \"(?:-- |#).*$\"\n        },  \n        string({start: '\"', escape: /\\\\[0'\"bnrtZ\\\\%_]?/}),\n        string({start: \"'\", escape: /\\\\[0'\"bnrtZ\\\\%_]?/}),\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next : \"comment\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : /0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"constant.class\",\n            regex : \"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"constant.buildin\",\n            regex : \"`[^`]*`\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ],\n        \"comment\" : [\n            {token : \"comment\", regex : \"\\\\*\\\\/\", next : \"start\"},\n            {defaultToken : \"comment\"}\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(MysqlHighlightRules, TextHighlightRules);\n\nexports.MysqlHighlightRules = MysqlHighlightRules;\n});\n\ndefine(\"ace/mode/mysql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mysql_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar MysqlHighlightRules = require(\"./mysql_highlight_rules\").MysqlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = MysqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {       \n    this.lineCommentStart = [\"--\", \"#\"]; // todo space\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.$id = \"ace/mode/mysql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-nix.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/nix_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var NixHighlightRules = function() {\n\n        var constantLanguage = \"true|false\";\n        var keywordControl = \"with|import|if|else|then|inherit\";\n        var keywordDeclaration = \"let|in|rec\";\n\n        var keywordMapper = this.createKeywordMapper({\n            \"constant.language.nix\": constantLanguage,\n            \"keyword.control.nix\": keywordControl,\n            \"keyword.declaration.nix\": keywordDeclaration\n        }, \"identifier\");\n\n        this.$rules = {\n            \"start\": [{\n                    token: \"comment\",\n                    regex: /#.*$/\n                }, {\n                    token: \"comment\",\n                    regex: /\\/\\*/,\n                    next: \"comment\"\n                }, {\n                    token: \"constant\",\n                    regex: \"<[^>]+>\"\n                }, {\n                    regex: \"(==|!=|<=?|>=?)\",\n                    token: [\"keyword.operator.comparison.nix\"]\n                }, {\n                    regex: \"((?:[+*/%-]|\\\\~)=)\",\n                    token: [\"keyword.operator.assignment.arithmetic.nix\"]\n                }, {\n                    regex: \"=\",\n                    token: \"keyword.operator.assignment.nix\"\n                }, {\n                    token: \"string\",\n                    regex: \"''\",\n                    next: \"qqdoc\"\n                }, {\n                    token: \"string\",\n                    regex: \"'\",\n                    next: \"qstring\"\n                }, {\n                    token: \"string\",\n                    regex: '\"',\n                    push: \"qqstring\"\n                }, {\n                    token: \"constant.numeric\", // hex\n                    regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n                }, {\n                    token: \"constant.numeric\", // float\n                    regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n                }, {\n                    token: keywordMapper,\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }, {\n                    regex: \"}\",\n                    token: function(val, start, stack) {\n                        return stack[1] && stack[1].charAt(0) == \"q\" ? \"constant.language.escape\" : \"text\";\n                    },\n                    next: \"pop\"\n                }],\n            \"comment\": [{\n                token: \"comment\", // closing comment\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }],\n            \"qqdoc\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: /\\$\\{/,\n                    push: \"start\"\n                }, {\n                    token: \"string\",\n                    regex: \"''\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }],\n            \"qqstring\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: /\\$\\{/,\n                    push: \"start\"\n                }, {\n                    token: \"string\",\n                    regex: '\"',\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }],\n            \"qstring\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: /\\$\\{/,\n                    push: \"start\"\n                }, {\n                    token: \"string\",\n                    regex: \"'\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n        };\n\n        this.normalizeRules();\n    };\n\n    oop.inherits(NixHighlightRules, TextHighlightRules);\n\n    exports.NixHighlightRules = NixHighlightRules;\n});\n\ndefine(\"ace/mode/nix\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/nix_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar NixHighlightRules = require(\"./nix_highlight_rules\").NixHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    CMode.call(this);\n    this.HighlightRules = NixHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, CMode);\n\n(function() { \n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/nix\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-nsis.js",
    "content": "define(\"ace/mode/nsis_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar NSISHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"keyword.compiler.nsis\",\n            regex: /^\\s*!(?:include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|pragma|finalize|getdllversion|gettlbversion|system|tempfile|warning|verbose|define|undef|insertmacro|macro|macroend|makensis|searchparse|searchreplace)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.command.nsis\",\n            regex: /^\\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEDllCharacteristics|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.control.nsis\",\n            regex: /^\\s*!(?:ifdef|ifndef|if|ifmacrodef|ifmacrondef|else|endif)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.plugin.nsis\",\n            regex: /^\\s*\\w+::\\w+/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.operator.comparison.nsis\",\n            regex: /[!<>]?=|<>|<|>/\n        }, {\n            token: \"support.function.nsis\",\n            regex: /(?:\\b|^\\s*)(?:Function|FunctionEnd|Section|SectionEnd|SectionGroup|SectionGroupEnd|PageEx|PageExEnd)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"support.library.nsis\",\n            regex: /\\${[\\w\\.:-]+}/\n        }, {\n            token: \"constant.nsis\",\n            regex: /\\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.library.nsis\",\n            regex: /\\${(?:AtLeastServicePack|AtLeastWin7|AtLeastWin8|AtLeastWin10|AtLeastWin95|AtLeastWin98|AtLeastWin2000|AtLeastWin2003|AtLeastWin2008|AtLeastWin2008R2|AtLeastWinME|AtLeastWinNT4|AtLeastWinVista|AtLeastWinXP|AtMostServicePack|AtMostWin7|AtMostWin8|AtMostWin10|AtMostWin95|AtMostWin98|AtMostWin2000|AtMostWin2003|AtMostWin2008|AtMostWin2008R2|AtMostWinME|AtMostWinNT4|AtMostWinVista|AtMostWinXP|IsDomainController|IsNT|IsServer|IsServicePack|IsWin7|IsWin8|IsWin10|IsWin95|IsWin98|IsWin2000|IsWin2003|IsWin2008|IsWin2008R2|IsWinME|IsWinNT4|IsWinVista|IsWinXP)}/\n        }, {\n            token: \"constant.language.boolean.true.nsis\",\n            regex: /\\b(?:true|on)\\b/\n        }, {\n            token: \"constant.language.boolean.false.nsis\",\n            regex: /\\b(?:false|off)\\b/\n        }, {\n            token: \"constant.language.option.nsis\",\n            regex: /(?:\\b|^\\s*)(?:(?:un\\.)?components|(?:un\\.)?custom|(?:un\\.)?directory|(?:un\\.)?instfiles|(?:un\\.)?license|uninstConfirm|admin|all|auto|both|bottom|bzip2|current|force|hide|highest|ifdiff|ifnewer|lastused|leave|left|listonly|lzma|nevershow|none|normal|notset|right|show|silent|silentlog|textonly|top|try|user|Win10|Win7|Win8|WinVista|zlib)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.language.slash-option.nsis\",\n            regex: /\\b\\/(?:a|BRANDING|CENTER|COMPONENTSONLYONCUSTOM|CUSTOMSTRING=|date|e|ENABLECANCEL|FILESONLY|file|FINAL|GLOBAL|gray|ifempty|ifndef|ignorecase|IMGID=|ITALIC|LANG=|NOCUSTOM|noerrors|NONFATAL|nonfatal|oname=|o|REBOOTOK|redef|RESIZETOFIT|r|SHORT|SILENT|SOLID|STRIKE|TRIM|UNDERLINE|utcdate|windows|x)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.numeric.nsis\",\n            regex: /\\b(?:0(?:x|X)[0-9a-fA-F]+|[0-9]+(?:\\.[0-9]+)?)\\b/\n        }, {\n            token: \"entity.name.function.nsis\",\n            regex: /\\$\\([\\w\\.:-]+\\)/\n        }, {\n            token: \"storage.type.function.nsis\",\n            regex: /\\$\\w+/\n        }, {\n            token: \"punctuation.definition.string.begin.nsis\",\n            regex: /`/,\n            push: [{\n                token: \"punctuation.definition.string.end.nsis\",\n                regex: /`/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.nsis\",\n                regex: /\\$\\\\./\n            }, {\n                defaultToken: \"string.quoted.back.nsis\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.nsis\",\n            regex: /\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.nsis\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.nsis\",\n                regex: /\\$\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.nsis\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.nsis\",\n            regex: /'/,\n            push: [{\n                token: \"punctuation.definition.string.end.nsis\",\n                regex: /'/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.nsis\",\n                regex: /\\$\\\\./\n            }, {\n                defaultToken: \"string.quoted.single.nsis\"\n            }]\n        }, {\n            token: [\n                \"punctuation.definition.comment.nsis\",\n                \"comment.line.nsis\"\n            ],\n            regex: /(;|#)(.*$)/\n        }, {\n            token: \"punctuation.definition.comment.nsis\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.nsis\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.nsis\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /(?:!include|!insertmacro)\\b/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nNSISHighlightRules.metaData = {\n    comment: \"\\n\\ttodo: - highlight functions\\n\\t\",\n    fileTypes: [\"nsi\", \"nsh\"],\n    name: \"NSIS\",\n    scopeName: \"source.nsis\"\n};\n\n\noop.inherits(NSISHighlightRules, TextHighlightRules);\n\nexports.NSISHighlightRules = NSISHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/nsis\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/nsis_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar NSISHighlightRules = require(\"./nsis_highlight_rules\").NSISHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = NSISHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = [\";\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/nsis\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-objectivec.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\ndefine(\"ace/mode/objectivec_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/c_cpp_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar C_Highlight_File = require(\"./c_cpp_highlight_rules\");\nvar CHighlightRules = C_Highlight_File.c_cppHighlightRules;\n\nvar ObjectiveCHighlightRules = function() {\n\n    var escapedConstRe = \"\\\\\\\\(?:[abefnrtv'\\\"?\\\\\\\\]|\" + \n                         \"[0-3]\\\\d{1,2}|\" +\n                         \"[4-7]\\\\d?|\" +\n                         \"222|\" +\n                         \"x[a-zA-Z0-9]+)\";\n\n    var specialVariables = [{\n            regex: \"\\\\b_cmd\\\\b\",\n            token: \"variable.other.selector.objc\"\n        }, {\n            regex: \"\\\\b(?:self|super)\\\\b\",\n            token: \"variable.language.objc\"\n        }\n    ];\n\n    var cObj = new CHighlightRules();\n    var cRules = cObj.getRules();\n\n    this.$rules = {\n    \"start\": [ \n        {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/.*$\"\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            next : \"comment\"\n        }, \n        {\n            token: [ \"storage.type.objc\", \"punctuation.definition.storage.type.objc\", \n                       \"entity.name.type.objc\", \"text\", \"entity.other.inherited-class.objc\"\n                     ],\n            regex: \"(@)(interface|protocol)(?!.+;)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*:\\\\s*)([A-Za-z]+)\"\n        },\n        {\n            token: [ \"storage.type.objc\" ],\n            regex: \"(@end)\"\n        },\n        {\n            token: [ \"storage.type.objc\", \"entity.name.type.objc\", \n                        \"entity.other.inherited-class.objc\"\n                     ],\n            regex: \"(@implementation)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*?::\\\\s*(?:[A-Za-z][A-Za-z0-9]*))?\"\n        },\n        {\n            token: \"string.begin.objc\",\n            regex: '@\"',\n            next: \"constant_NSString\"\n        },\n        {\n            token: \"storage.type.objc\",\n            regex: \"\\\\bid\\\\s*<\",\n            next: \"protocol_list\"\n        },\n        {\n            token: \"keyword.control.macro.objc\",\n            regex: \"\\\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\\\b\"\n        },\n        {\n            token: [\"punctuation.definition.keyword.objc\", \"keyword.control.exception.objc\"],\n            regex: \"(@)(try|catch|finally|throw)\\\\b\"\n        },\n        {\n            token: [\"punctuation.definition.keyword.objc\", \"keyword.other.objc\"],\n            regex: \"(@)(defs|encode)\\\\b\"\n        },\n        {\n            token: [\"storage.type.id.objc\", \"text\"],\n            regex: \"(\\\\bid\\\\b)(\\\\s|\\\\n)?\"\n        },\n        {\n            token: \"storage.type.objc\",\n            regex: \"\\\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\\\b\"\n        },\n        {\n            token: [ \"punctuation.definition.storage.type.objc\", \"storage.type.objc\"],\n            regex: \"(@)(class|protocol)\\\\b\"\n        },\n        {\n            token: [ \"punctuation.definition.storage.type.objc\", \"punctuation\"],\n            regex: \"(@selector)(\\\\s*\\\\()\",\n            next: \"selectors\"\n        },\n        {\n            token: [ \"punctuation.definition.storage.modifier.objc\", \"storage.modifier.objc\"],\n            regex: \"(@)(synchronized|public|private|protected|package)\\\\b\"\n        },\n        {\n            token: \"constant.language.objc\",\n            regex: \"\\\\bYES|NO|Nil|nil\\\\b\"\n        },\n        {\n            token:  \"support.variable.foundation\",\n            regex: \"\\\\bNSApp\\\\b\"\n        },\n        {\n            token: [ \"support.function.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.function.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.class.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.class.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.type.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.class.quartz\"],\n            regex: \"(?:\\\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.type.quartz\"],\n            regex: \"(?:\\\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.type.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.notification.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.notification.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\\\b)\"\n        },\n        {\n        token: \"support.function.C99.c\",\n        regex: C_Highlight_File.cFunctions\n        },\n        {\n            token : cObj.getKeywords(),\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        },\n        {\n            token: \"punctuation.section.scope.begin.objc\",\n            regex: \"\\\\[\",\n            next: \"bracketed_content\"\n        },\n        {\n            token: \"meta.function.objc\",\n            regex: \"^(?:-|\\\\+)\\\\s*\"\n        }\n    ],\n    \"constant_NSString\": [\n        {\n            token: \"constant.character.escape.objc\",\n            regex: escapedConstRe\n        },\n        {\n            token: \"invalid.illegal.unknown-escape.objc\",\n            regex: \"\\\\\\\\.\"\n        },\n        {\n            token: \"string\",\n            regex: '[^\"\\\\\\\\]+'\n        },\n        {\n            token: \"punctuation.definition.string.end\",\n            regex: \"\\\"\",\n            next: \"start\"\n        }\n    ],\n    \"protocol_list\": [\n        {\n            token: \"punctuation.section.scope.end.objc\",\n            regex: \">\",\n            next: \"start\"\n        },\n        {\n            token: \"support.other.protocol.objc\",\n            regex: \"\\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\\b\"\n        }\n    ],\n    \"selectors\": [\n        {\n            token: \"support.function.any-method.name-of-parameter.objc\",\n            regex: \"\\\\b(?:[a-zA-Z_:][\\\\w]*)+\"\n        },\n        {\n            token: \"punctuation\",\n            regex: \"\\\\)\",\n            next: \"start\"\n        }\n    ],\n    \"bracketed_content\": [\n        {\n            token: \"punctuation.section.scope.end.objc\",\n            regex: \"]\",\n            next: \"start\"\n        },\n        {\n            token: [\"support.function.any-method.objc\"],\n            regex: \"(?:predicateWithFormat:| NSPredicate predicateWithFormat:)\",\n            next: \"start\"\n        },\n        {\n            token: \"support.function.any-method.objc\",\n            regex: \"\\\\w+(?::|(?=]))\",\n            next: \"start\"\n        }\n    ],\n    \"bracketed_strings\": [\n        {\n            token: \"punctuation.section.scope.end.objc\",\n            regex: \"]\",\n            next: \"start\"\n        },\n        {\n            token: \"keyword.operator.logical.predicate.cocoa\",\n            regex: \"\\\\b(?:AND|OR|NOT|IN)\\\\b\"\n        },\n        {\n            token: [\"invalid.illegal.unknown-method.objc\", \"punctuation.separator.arguments.objc\"],\n            regex: \"\\\\b(\\\\w+)(:)\"\n        },\n        {\n            regex: \"\\\\b(?:ALL|ANY|SOME|NONE)\\\\b\",\n            token: \"constant.language.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\\\b\",\n            token: \"constant.language.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\\\b\",\n            token: \"keyword.operator.comparison.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\bC(?:ASEINSENSITIVE|I)\\\\b\",\n            token: \"keyword.other.modifier.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\\\b\",\n            token: \"keyword.other.predicate.cocoa\"\n        },\n        {\n            regex: escapedConstRe,\n            token: \"constant.character.escape.objc\"\n        },\n        {\n            regex: \"\\\\\\\\.\",\n            token: \"invalid.illegal.unknown-escape.objc\"\n        },\n        {\n            token: \"string\",\n            regex: '[^\"\\\\\\\\]'\n        },\n        {\n            token: \"punctuation.definition.string.end.objc\",\n            regex: \"\\\"\",\n            next: \"predicates\"\n        }\n    ],\n    \"comment\" : [\n        {\n            token : \"comment\", // closing comment\n            regex : \".*?\\\\*\\\\/\",\n            next : \"start\"\n        }, {\n            defaultToken : \"comment\"\n        }\n    ],\n    \"methods\" : [\n        {\n            token : \"meta.function.objc\",\n            regex : \"(?=\\\\{|#)|;\",\n            next : \"start\"\n        }\n    ]\n};\n    for (var r in cRules) {\n        if (this.$rules[r]) {\n            if (this.$rules[r].push)\n                this.$rules[r].push.apply(this.$rules[r], cRules[r]);\n        } else {\n            this.$rules[r] = cRules[r];\n        }\n    }\n    \n    this.$rules.bracketed_content = this.$rules.bracketed_content.concat(\n        this.$rules.start, specialVariables\n    );\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(ObjectiveCHighlightRules, CHighlightRules);\n\nexports.ObjectiveCHighlightRules = ObjectiveCHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/objectivec\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/objectivec_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ObjectiveCHighlightRules = require(\"./objectivec_highlight_rules\").ObjectiveCHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ObjectiveCHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/objectivec\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-ocaml.js",
    "content": "define(\"ace/mode/ocaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar OcamlHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|begin|class|constraint|do|done|downto|else|end|\"  +\n        \"exception|external|for|fun|function|functor|if|in|include|\"     +\n        \"inherit|initializer|lazy|let|match|method|module|mutable|new|\"  +\n        \"object|of|open|or|private|rec|sig|struct|then|to|try|type|val|\" +\n        \"virtual|when|while|with\"\n    );\n\n    var builtinConstants = (\"true|false\");\n\n    var builtinFunctions = (\n        \"abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|\" +\n        \"add_available_units|add_big_int|add_buffer|add_channel|add_char|\" +\n        \"add_initializer|add_int_big_int|add_interfaces|add_num|add_string|\" +\n        \"add_substitute|add_substring|alarm|allocated_bytes|allow_only|\" +\n        \"allow_unsafe_modules|always|append|appname_get|appname_set|\" +\n        \"approx_num_exp|approx_num_fix|arg|argv|arith_status|array|\" +\n        \"array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|\" +\n        \"assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|\" +\n        \"beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|\" +\n        \"bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|\" +\n        \"bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|\" +\n        \"bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|\" +\n        \"cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|\" +\n        \"chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|\" +\n        \"chown|chr|chroot|classify_float|clear|clear_available_units|\" +\n        \"clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|\" +\n        \"close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|\" +\n        \"close_out|close_out_noerr|close_process|close_process|\" +\n        \"close_process_full|close_process_in|close_process_out|close_subwindow|\" +\n        \"close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|\" +\n        \"combine|combine|command|compact|compare|compare_big_int|compare_num|\" +\n        \"complex32|complex64|concat|conj|connect|contains|contains_from|contents|\" +\n        \"copy|cos|cosh|count|count|counters|create|create_alarm|create_image|\" +\n        \"create_matrix|create_matrix|create_matrix|create_object|\" +\n        \"create_object_and_run_initializers|create_object_opt|create_process|\" +\n        \"create_process|create_process_env|create_process_env|create_table|\" +\n        \"current|current_dir_name|current_point|current_x|current_y|curveto|\" +\n        \"custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|\" +\n        \"delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|\" +\n        \"dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|\" +\n        \"double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|\" +\n        \"draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|\" +\n        \"dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|\" +\n        \"environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|\" +\n        \"error_message|escaped|establish_server|executable_name|execv|execve|execvp|\" +\n        \"execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|\" +\n        \"file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|\" +\n        \"filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|\" +\n        \"float|float32|float64|float_of_big_int|float_of_bits|float_of_int|\" +\n        \"float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|\" +\n        \"flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|\" +\n        \"for_all|for_all2|force|force_newline|force_val|foreground|fork|\" +\n        \"format_of_string|formatter_of_buffer|formatter_of_out_channel|\" +\n        \"fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|\" +\n        \"from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|\" +\n        \"full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|\" +\n        \"genarray_of_array1|genarray_of_array2|genarray_of_array3|get|\" +\n        \"get_all_formatter_output_functions|get_approx_printing|get_copy|\" +\n        \"get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|\" +\n        \"get_formatter_output_functions|get_formatter_tag_functions|get_image|\" +\n        \"get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|\" +\n        \"get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|\" +\n        \"get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|\" +\n        \"getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|\" +\n        \"getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|\" +\n        \"getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|\" +\n        \"getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|\" +\n        \"getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|\" +\n        \"global_replace|global_substitute|gmtime|green|grid|group_beginning|\" +\n        \"group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|\" +\n        \"hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|\" +\n        \"incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|\" +\n        \"infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|\" +\n        \"input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|\" +\n        \"int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|\" +\n        \"int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|\" +\n        \"is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|\" +\n        \"is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|\" +\n        \"kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|\" +\n        \"lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|\" +\n        \"lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|\" +\n        \"loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|\" +\n        \"logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|\" +\n        \"lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|\" +\n        \"make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|\" +\n        \"marshal|match_beginning|match_end|matched_group|matched_string|max|\" +\n        \"max_array_length|max_big_int|max_elt|max_float|max_int|max_num|\" +\n        \"max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|\" +\n        \"min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|\" +\n        \"minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|\" +\n        \"mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|\" +\n        \"nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|\" +\n        \"new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|\" +\n        \"nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|\" +\n        \"num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|\" +\n        \"of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|\" +\n        \"of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|\" +\n        \"open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|\" +\n        \"open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|\" +\n        \"open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|\" +\n        \"open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|\" +\n        \"out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|\" +\n        \"output_char|output_string|output_value|over_max_boxes|pack|params|\" +\n        \"parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|\" +\n        \"place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|\" +\n        \"power_big_int_positive_big_int|power_big_int_positive_int|\" +\n        \"power_int_positive_big_int|power_int_positive_int|power_num|\" +\n        \"pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|\" +\n        \"pp_get_all_formatter_output_functions|pp_get_ellipsis_text|\" +\n        \"pp_get_formatter_output_functions|pp_get_formatter_tag_functions|\" +\n        \"pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|\" +\n        \"pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|\" +\n        \"pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|\" +\n        \"pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|\" +\n        \"pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|\" +\n        \"pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|\" +\n        \"pp_set_all_formatter_output_functions|pp_set_ellipsis_text|\" +\n        \"pp_set_formatter_out_channel|pp_set_formatter_output_functions|\" +\n        \"pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|\" +\n        \"pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|\" +\n        \"pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|\" +\n        \"prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|\" +\n        \"print_bool|print_break|print_char|print_cut|print_endline|print_float|\" +\n        \"print_flush|print_if_newline|print_int|print_newline|print_space|\" +\n        \"print_stat|print_string|print_tab|print_tbreak|printf|prohibit|\" +\n        \"public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|\" +\n        \"raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|\" +\n        \"read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|\" +\n        \"recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|\" +\n        \"regexp_string_case_fold|register|register_exception|rem|remember_mode|\" +\n        \"remove|remove_assoc|remove_assq|rename|replace|replace_first|\" +\n        \"replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|\" +\n        \"rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|\" +\n        \"rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|\" +\n        \"run_initializers|run_initializers_opt|scanf|search_backward|\" +\n        \"search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|\" +\n        \"set_all_formatter_output_functions|set_approx_printing|\" +\n        \"set_binary_mode_in|set_binary_mode_out|set_close_on_exec|\" +\n        \"set_close_on_exec|set_color|set_ellipsis_text|\" +\n        \"set_error_when_null_denominator|set_field|set_floating_precision|\" +\n        \"set_font|set_formatter_out_channel|set_formatter_output_functions|\" +\n        \"set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|\" +\n        \"set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|\" +\n        \"set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|\" +\n        \"set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|\" +\n        \"set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|\" +\n        \"setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|\" +\n        \"setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|\" +\n        \"shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|\" +\n        \"shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|\" +\n        \"shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|\" +\n        \"sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|\" +\n        \"sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|\" +\n        \"sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|\" +\n        \"sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|\" +\n        \"sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|\" +\n        \"slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|\" +\n        \"slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|\" +\n        \"split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|\" +\n        \"square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|\" +\n        \"stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|\" +\n        \"stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|\" +\n        \"str_formatter|string|string_after|string_before|string_match|\" +\n        \"string_of_big_int|string_of_bool|string_of_float|string_of_format|\" +\n        \"string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|\" +\n        \"string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|\" +\n        \"sub_right|subset|subset|substitute_first|substring|succ|succ|\" +\n        \"succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|\" +\n        \"symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|\" +\n        \"tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|\" +\n        \"tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|\" +\n        \"temp_file|text_size|time|time|time|timed_read|timed_write|times|times|\" +\n        \"tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|\" +\n        \"to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|\" +\n        \"to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|\" +\n        \"truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|\" +\n        \"uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|\" +\n        \"unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|\" +\n        \"update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|\" +\n        \"wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|\" +\n        \"wait_timed_read|wait_timed_write|wait_write|waitpid|white|\" +\n        \"widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|\" +\n\n        \"Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|\" +\n        \"Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|\" +\n        \"Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|\" +\n        \"Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|\" +\n        \"MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|\" +\n        \"Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|\" +\n        \"Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : '\\\\(\\\\*.*?\\\\*\\\\)\\\\s*?$'\n            },\n            {\n                token : \"comment\",\n                regex : '\\\\(\\\\*.*',\n                next : \"comment\"\n            },\n            {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            },\n            {\n                token : \"string\", // single char\n                regex : \"'.'\"\n            },\n            {\n                token : \"string\", // \" string\n                regex : '\"',\n                next  : \"qstring\"\n            },\n            {\n                token : \"constant.numeric\", // imaginary\n                regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            },\n            {\n                token : \"constant.numeric\", // float\n                regex : floatNumber\n            },\n            {\n                token : \"constant.numeric\", // integer\n                regex : integer + \"\\\\b\"\n            },\n            {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token : \"keyword.operator\",\n                regex : \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=\"\n            },\n            {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            },\n            {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            },\n            {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\)\",\n                next : \"start\"\n            },\n            {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : '\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(OcamlHighlightRules, TextHighlightRules);\n\nexports.OcamlHighlightRules = OcamlHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/ocaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ocaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar OcamlHighlightRules = require(\"./ocaml_highlight_rules\").OcamlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = OcamlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n    \n    this.$outdent   = new MatchingBraceOutdent();\n};\noop.inherits(Mode, TextMode);\n\nvar indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|with))\\s*$/;\n\n(function() {\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(\\*(.*)\\*\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(*\" + line + \"*)\");\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n\n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/ocaml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-pascal.js",
    "content": "define(\"ace/mode/pascal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PascalHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { caseInsensitive: true,\n           token: 'keyword.control.pascal',\n           regex: '\\\\b(?:(absolute|abstract|all|and|and_then|array|as|asm|attribute|begin|bindable|case|class|const|constructor|destructor|div|do|do|else|end|except|export|exports|external|far|file|finalization|finally|for|forward|goto|if|implementation|import|in|inherited|initialization|interface|interrupt|is|label|library|mod|module|name|near|nil|not|object|of|only|operator|or|or_else|otherwise|packed|pow|private|program|property|protected|public|published|qualified|record|repeat|resident|restricted|segment|set|shl|shr|then|to|try|type|unit|until|uses|value|var|view|virtual|while|with|xor))\\\\b' },\n         { caseInsensitive: true,           \n           token: \n            [ 'variable.pascal', \"text\",\n              'storage.type.prototype.pascal',\n              'entity.name.function.prototype.pascal' ],\n           regex: '\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?(?=(?:\\\\(.*?\\\\))?;\\\\s*(?:attribute|forward|external))' },\n         { caseInsensitive: true,\n           token: \n            [ 'variable.pascal', \"text\",\n              'storage.type.function.pascal',\n              'entity.name.function.pascal' ],\n           regex: '\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?' },\n         { token: 'constant.numeric.pascal',\n           regex: '\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b' },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '--.*$',\n           push_: \n            [ { token: 'comment.line.double-dash.pascal.one',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-dash.pascal.one' } ] },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '//.*$',\n           push_: \n            [ { token: 'comment.line.double-slash.pascal.two',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-slash.pascal.two' } ] },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '\\\\(\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.pascal',\n                regex: '\\\\*\\\\)',\n                next: 'pop' },\n              { defaultToken: 'comment.block.pascal.one' } ] },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.definition.comment.pascal',\n                regex: '\\\\}',\n                next: 'pop' },\n              { defaultToken: 'comment.block.pascal.two' } ] },\n         { token: 'punctuation.definition.string.begin.pascal',\n           regex: '\"',\n           push: \n            [ { token: 'constant.character.escape.pascal', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.pascal',\n                regex: '\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.double.pascal' } ]\n            },\n         { token: 'punctuation.definition.string.begin.pascal',\n           regex: '\\'',\n           push: \n            [ { token: 'constant.character.escape.apostrophe.pascal',\n                regex: '\\'\\'' },\n              { token: 'punctuation.definition.string.end.pascal',\n                regex: '\\'',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.single.pascal' } ] },\n          { token: 'keyword.operator',\n           regex: '[+\\\\-;,/*%]|:=|=' } ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(PascalHighlightRules, TextHighlightRules);\n\nexports.PascalHighlightRules = PascalHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/pascal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pascal_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PascalHighlightRules = require(\"./pascal_highlight_rules\").PascalHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PascalHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = [\"--\", \"//\"];\n    this.blockComment = [\n        {start: \"(*\", end: \"*)\"},\n        {start: \"{\", end: \"}\"}\n    ];\n    \n    this.$id = \"ace/mode/pascal\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-perl.js",
    "content": "define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PerlHighlightRules = function() {\n\n    var keywords = (\n        \"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|\" +\n         \"no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\"\n    );\n\n    var buildinConstants = (\"ARGV|ENV|INC|SIG\");\n\n    var builtinFunctions = (\n        \"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|\" +\n         \"gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|\" +\n         \"getpeername|setpriority|getprotoent|setprotoent|getpriority|\" +\n         \"endprotoent|getservent|setservent|endservent|sethostent|socketpair|\" +\n         \"getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|\" +\n         \"localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|\" +\n         \"closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|\" +\n         \"shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|\" +\n         \"dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|\" +\n         \"setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|\" +\n         \"lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|\" +\n         \"waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|\" +\n         \"chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|\" +\n         \"unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|\" +\n         \"length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|\" +\n         \"undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|\" +\n         \"sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|\" +\n         \"BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|\" +\n         \"join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|\" +\n         \"keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|\" +\n         \"eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|\" +\n         \"map|die|uc|lc|do\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment.doc\",\n                regex : \"^=(?:begin|item)\\\\b\",\n                next : \"block_comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0x[0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"block_comment\": [\n            {\n                token: \"comment.doc\", \n                regex: \"^=cut\\\\b\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment.doc\"\n            }\n        ]\n    };\n};\n\noop.inherits(PerlHighlightRules, TextHighlightRules);\n\nexports.PerlHighlightRules = PerlHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/perl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PerlHighlightRules = require(\"./perl_highlight_rules\").PerlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PerlHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode({start: \"^=(begin|item)\\\\b\", end: \"^=(cut)\\\\b\"});\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n    this.blockComment = [\n        {start: \"=begin\", end: \"=cut\", lineStartOnly: true},\n        {start: \"=item\", end: \"=cut\", lineStartOnly: true}\n    ];\n\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/perl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-perl6.js",
    "content": "define(\"ace/mode/perl6_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar Perl6HighlightRules = function() {\n\n    var keywords = (\n        \"my|our|class|role|grammar|is|does|sub|method|submethod|try|\" +\n        \"default|when|if|elsif|else|unless|with|orwith|without|for|given|proceed|\" +\n        \"succeed|loop|while|until|repeat|module|use|need|import|require|unit|\" +\n        \"constant|enum|multi|return|has|token|rule|make|made|proto|state|augment|\" +\n        \"but|anon|supersede|let|subset|gather|returns|return-rw|temp|\" +\n        \"BEGIN|CHECK|INIT|END|CLOSE|ENTER|LEAVE|KEEP|UNDO|PRE|POST|FIRST|NEXT|LAST|CATCH|CONTROL|QUIT|DOC\"\n    );\n\n    var types = (\n        \"Any|Array|Associative|AST|atomicint|Attribute|Backtrace|Backtrace::Frame|\" +\n        \"Bag|Baggy|BagHash|Blob|Block|Bool|Buf|Callable|CallFrame|Cancellation|\" +\n        \"Capture|Channel|Code|compiler|Complex|ComplexStr|Cool|CurrentThreadScheduler|\" +\n        \"Cursor|Date|Dateish|DateTime|Distro|Duration|Encoding|Exception|Failure|\"+\n        \"FatRat|Grammar|Hash|HyperWhatever|Instant|Int|IntStr|IO|IO::ArgFiles|\"+\n        \"IO::CatHandle|IO::Handle|IO::Notification|IO::Path|IO::Path::Cygwin|\"+\n        \"IO::Path::QNX|IO::Path::Unix|IO::Path::Win32|IO::Pipe|IO::Socket|\"+\n        \"IO::Socket::Async|IO::Socket::INET|IO::Spec|IO::Spec::Cygwin|IO::Spec::QNX|\"+\n        \"IO::Spec::Unix|IO::Spec::Win32|IO::Special|Iterable|Iterator|Junction|Kernel|\"+\n        \"Label|List|Lock|Lock::Async|Macro|Map|Match|Metamodel::AttributeContainer|\"+\n        \"Metamodel::C3MRO|Metamodel::ClassHOW|Metamodel::EnumHOW|Metamodel::Finalization|\"+\n        \"Metamodel::MethodContainer|Metamodel::MROBasedMethodDispatch|Metamodel::MultipleInheritance|\"+\n        \"Metamodel::Naming|Metamodel::Primitives|Metamodel::PrivateMethodContainer|\"+\n        \"Metamodel::RoleContainer|Metamodel::Trusting|Method|Mix|MixHash|Mixy|Mu|\"+\n        \"NFC|NFD|NFKC|NFKD|Nil|Num|Numeric|NumStr|ObjAt|Order|Pair|Parameter|Perl|\"+\n        \"Pod::Block|Pod::Block::Code|Pod::Block::Comment|Pod::Block::Declarator|\"+\n        \"Pod::Block::Named|Pod::Block::Para|Pod::Block::Table|Pod::Heading|Pod::Item|\"+\n        \"Positional|PositionalBindFailover|Proc|Proc::Async|Promise|Proxy|PseudoStash|\"+\n        \"QuantHash|Range|Rat|Rational|RatStr|Real|Regex|Routine|Scalar|Scheduler|\"+\n        \"Semaphore|Seq|Set|SetHash|Setty|Signature|Slip|Stash|Str|StrDistance|Stringy|\"+\n        \"Sub|Submethod|Supplier|Supplier::Preserving|Supply|Systemic|Tap|Telemetry|\"+\n        \"Telemetry::Instrument::Thread|Telemetry::Instrument::Usage|Telemetry::Period|\"+\n        \"Telemetry::Sampler|Thread|ThreadPoolScheduler|UInt|Uni|utf8|Variable|Version|\"+\n        \"VM|Whatever|WhateverCode|WrapHandle|int|uint|num|str|\"+\n        \"int8|int16|int32|int64|uint8|uint16|uint32|uint64|long|longlong|num32|num64|size_t|bool|CArray|Pointer|\"+\n\t\t\"Backtrace|Backtrace::Frame|Exception|Failure|X::AdHoc|X::Anon::Augment|X::Anon::Multi|\"+\n\t\t\"X::Assignment::RO|X::Attribute::NoPackage|X::Attribute::Package|X::Attribute::Undeclared|\"+\n\t\t\"X::Augment::NoSuchType|X::Bind|X::Bind::NativeType|X::Bind::Slice|X::Caller::NotDynamic|\"+\n\t\t\"X::Channel::ReceiveOnClosed|X::Channel::SendOnClosed|X::Comp|X::Composition::NotComposable|\"+\n\t\t\"X::Constructor::Positional|X::ControlFlow|X::ControlFlow::Return|X::DateTime::TimezoneClash|\"+\n\t\t\"X::Declaration::Scope|X::Declaration::Scope::Multi|X::Does::TypeObject|X::Eval::NoSuchLang|\"+\n\t\t\"X::Export::NameClash|X::IO|X::IO::Chdir|X::IO::Chmod|X::IO::Copy|X::IO::Cwd|X::IO::Dir|\"+\n\t\t\"X::IO::DoesNotExist|X::IO::Link|X::IO::Mkdir|X::IO::Move|X::IO::Rename|X::IO::Rmdir|X::IO::Symlink|\"+\n\t\t\"X::IO::Unlink|X::Inheritance::NotComposed|X::Inheritance::Unsupported|X::Method::InvalidQualifier|\"+\n\t\t\"X::Method::NotFound|X::Method::Private::Permission|X::Method::Private::Unqualified|\"+\n\t\t\"X::Mixin::NotComposable|X::NYI|X::NoDispatcher|X::Numeric::Real|X::OS|X::Obsolete|X::OutOfRange|\"+\n\t\t\"X::Package::Stubbed|X::Parameter::Default|X::Parameter::MultipleTypeConstraints|\"+\n\t\t\"X::Parameter::Placeholder|X::Parameter::Twigil|X::Parameter::WrongOrder|X::Phaser::Multiple|\"+\n\t\t\"X::Phaser::PrePost|X::Placeholder::Block|X::Placeholder::Mainline|X::Pod|X::Proc::Async|\"+\n\t\t\"X::Proc::Async::AlreadyStarted|X::Proc::Async::CharsOrBytes|X::Proc::Async::MustBeStarted|\"+\n\t\t\"X::Proc::Async::OpenForWriting|X::Proc::Async::TapBeforeSpawn|X::Proc::Unsuccessful|\"+\n\t\t\"X::Promise::CauseOnlyValidOnBroken|X::Promise::Vowed|X::Redeclaration|X::Role::Initialization|\"+\n\t\t\"X::Seq::Consumed|X::Sequence::Deduction|X::Signature::NameClash|X::Signature::Placeholder|\"+\n\t\t\"X::Str::Numeric|X::StubCode|X::Syntax|X::Syntax::Augment::WithoutMonkeyTyping|\"+\n\t\t\"X::Syntax::Comment::Embedded|X::Syntax::Confused|X::Syntax::InfixInTermPosition|\"+\n\t\t\"X::Syntax::Malformed|X::Syntax::Missing|X::Syntax::NegatedPair|X::Syntax::NoSelf|\"+\n\t\t\"X::Syntax::Number::RadixOutOfRange|X::Syntax::P5|X::Syntax::Regex::Adverb|\"+\n\t\t\"X::Syntax::Regex::SolitaryQuantifier|X::Syntax::Reserved|X::Syntax::Self::WithoutObject|\"+\n\t\t\"X::Syntax::Signature::InvocantMarker|X::Syntax::Term::MissingInitializer|X::Syntax::UnlessElse|\"+\n\t\t\"X::Syntax::Variable::Match|X::Syntax::Variable::Numeric|X::Syntax::Variable::Twigil|X::Temporal|\"+\n\t\t\"X::Temporal::InvalidFormat|X::TypeCheck|X::TypeCheck::Assignment|X::TypeCheck::Binding|\"+\n\t\t\"X::TypeCheck::Return|X::TypeCheck::Splice|X::Undeclared\"\n\t\t);\n\n    var builtinFunctions = (\n        \"abs|abs2rel|absolute|accept|ACCEPTS|accessed|acos|acosec|acosech|acosh|\"+\n        \"acotan|acotanh|acquire|act|action|actions|add|add_attribute|add_enum_value|\"+\n        \"add_fallback|add_method|add_parent|add_private_method|add_role|add_trustee|\"+\n        \"adverb|after|all|allocate|allof|allowed|alternative-names|annotations|antipair|\"+\n        \"antipairs|any|anyof|app_lifetime|append|arch|archname|args|arity|asec|asech|\"+\n        \"asin|asinh|ASSIGN-KEY|ASSIGN-POS|assuming|ast|at|atan|atan2|atanh|AT-KEY|\"+\n        \"atomic-assign|atomic-dec-fetch|atomic-fetch|atomic-fetch-add|atomic-fetch-dec|\"+\n        \"atomic-fetch-inc|atomic-fetch-sub|atomic-inc-fetch|AT-POS|attributes|auth|await|\"+\n        \"backtrace|Bag|BagHash|base|basename|base-repeating|batch|BIND-KEY|BIND-POS|\"+\n        \"bind-stderr|bind-stdin|bind-stdout|bind-udp|bits|bless|block|bool-only|\"+\n        \"bounds|break|Bridge|broken|BUILD|build-date|bytes|cache|callframe|calling-package|\"+\n        \"CALL-ME|callsame|callwith|can|cancel|candidates|cando|canonpath|caps|caption|\"+\n        \"Capture|cas|catdir|categorize|categorize-list|catfile|catpath|cause|ceiling|\"+\n        \"cglobal|changed|Channel|chars|chdir|child|child-name|child-typename|chmod|chomp|\"+\n        \"chop|chr|chrs|chunks|cis|classify|classify-list|cleanup|clone|close|closed|\"+\n        \"close-stdin|code|codes|collate|column|comb|combinations|command|comment|\"+\n        \"compiler|Complex|compose|compose_type|composer|condition|config|configure_destroy|\"+\n        \"configure_type_checking|conj|connect|constraints|construct|contains|contents|copy|\"+\n        \"cos|cosec|cosech|cosh|cotan|cotanh|count|count-only|cpu-cores|cpu-usage|CREATE|\"+\n        \"create_type|cross|cue|curdir|curupdir|d|Date|DateTime|day|daycount|day-of-month|\"+\n        \"day-of-week|day-of-year|days-in-month|declaration|decode|decoder|deepmap|\"+\n        \"defined|DEFINITE|delayed|DELETE-KEY|DELETE-POS|denominator|desc|DESTROY|destroyers|\"+\n        \"devnull|did-you-mean|die|dir|dirname|dir-sep|DISTROnames|do|done|duckmap|dynamic|\"+\n        \"e|eager|earlier|elems|emit|enclosing|encode|encoder|encoding|end|ends-with|enum_from_value|\"+\n        \"enum_value_list|enum_values|enums|eof|EVAL|EVALFILE|exception|excludes-max|excludes-min|\"+\n        \"EXISTS-KEY|EXISTS-POS|exit|exitcode|exp|expected|explicitly-manage|expmod|extension|f|\"+\n        \"fail|fc|feature|file|filename|find_method|find_method_qualified|finish|first|flat|flatmap|\"+\n        \"flip|floor|flush|fmt|format|formatter|freeze|from|from-list|from-loop|from-posix|full|\"+\n        \"full-barrier|get|get_value|getc|gist|got|grab|grabpairs|grep|handle|handled|handles|\"+\n        \"hardware|has_accessor|head|headers|hh-mm-ss|hidden|hides|hour|how|hyper|id|illegal|\"+\n        \"im|in|indent|index|indices|indir|infinite|infix|install_method_cache|\"+\n        \"Instant|instead|int-bounds|interval|in-timezone|invalid-str|invert|invocant|IO|\"+\n        \"IO::Notification.watch-path|is_trusted|is_type|isa|is-absolute|is-hidden|is-initial-thread|\"+\n        \"is-int|is-lazy|is-leap-year|isNaN|is-prime|is-relative|is-routine|is-setting|is-win|item|\"+\n        \"iterator|join|keep|kept|KERNELnames|key|keyof|keys|kill|kv|kxxv|l|lang|last|lastcall|later|\"+\n        \"lazy|lc|leading|level|line|lines|link|listen|live|local|lock|log|log10|lookup|lsb|\"+\n        \"MAIN|match|max|maxpairs|merge|message|method_table|methods|migrate|min|minmax|\"+\n        \"minpairs|minute|misplaced|Mix|MixHash|mkdir|mode|modified|month|move|mro|msb|multiness|\"+\n        \"name|named|named_names|narrow|nativecast|native-descriptor|nativesizeof|new|new_type|\"+\n        \"new-from-daycount|new-from-pairs|next|nextcallee|next-handle|nextsame|nextwith|NFC|NFD|\"+\n        \"NFKC|NFKD|nl-in|nl-out|nodemap|none|norm|not|note|now|nude|numerator|Numeric|of|\"+\n        \"offset|offset-in-hours|offset-in-minutes|old|on-close|one|on-switch|open|opened|\"+\n        \"operation|optional|ord|ords|orig|os-error|osname|out-buffer|pack|package|package-kind|\"+\n        \"package-name|packages|pair|pairs|pairup|parameter|params|parent|parent-name|parents|parse|\"+\n        \"parse-base|parsefile|parse-names|parts|path|path-sep|payload|peer-host|peer-port|periods|\"+\n        \"perl|permutations|phaser|pick|pickpairs|pid|placeholder|plus|polar|poll|polymod|pop|pos|\"+\n        \"positional|posix|postfix|postmatch|precomp-ext|precomp-target|pred|prefix|prematch|prepend|\"+\n        \"print|printf|print-nl|print-to|private|private_method_table|proc|produce|Promise|prompt|\"+\n        \"protect|pull-one|push|push-all|push-at-least|push-exactly|push-until-lazy|put|\"+\n        \"qualifier-type|quit|r|race|radix|rand|range|raw|re|read|readchars|readonly|\"+\n        \"ready|Real|reallocate|reals|reason|rebless|receive|recv|redispatcher|redo|reduce|\"+\n        \"rel2abs|relative|release|rename|repeated|replacement|report|reserved|resolve|\"+\n        \"restore|result|resume|rethrow|reverse|right|rindex|rmdir|roles_to_compose|\"+\n        \"rolish|roll|rootdir|roots|rotate|rotor|round|roundrobin|routine-type|run|rwx|s|\"+\n        \"samecase|samemark|samewith|say|schedule-on|scheduler|scope|sec|sech|second|seek|\"+\n        \"self|send|Set|set_hidden|set_name|set_package|set_rw|set_value|SetHash|\"+\n        \"set-instruments|setup_finalization|shape|share|shell|shift|sibling|sigil|\"+\n        \"sign|signal|signals|signature|sin|sinh|sink|sink-all|skip|skip-at-least|\"+\n        \"skip-at-least-pull-one|skip-one|sleep|sleep-timer|sleep-until|Slip|slurp|\"+\n        \"slurp-rest|slurpy|snap|snapper|so|socket-host|socket-port|sort|source|\"+\n        \"source-package|spawn|SPEC|splice|split|splitdir|splitpath|sprintf|spurt|\"+\n        \"sqrt|squish|srand|stable|start|started|starts-with|status|stderr|stdout|\"+\n        \"sub_signature|subbuf|subbuf-rw|subname|subparse|subst|subst-mutate|\"+\n        \"substr|substr-eq|substr-rw|succ|sum|Supply|symlink|t|tail|take|take-rw|\"+\n        \"tan|tanh|tap|target|target-name|tc|tclc|tell|then|throttle|throw|timezone|\"+\n        \"tmpdir|to|today|toggle|to-posix|total|trailing|trans|tree|trim|trim-leading|\"+\n        \"trim-trailing|truncate|truncated-to|trusts|try_acquire|trying|twigil|type|\"+\n        \"type_captures|typename|uc|udp|uncaught_handler|unimatch|uniname|uninames|\"+\n        \"uniparse|uniprop|uniprops|unique|unival|univals|unlink|unlock|unpack|unpolar|\"+\n        \"unshift|unwrap|updir|USAGE|utc|val|value|values|VAR|variable|verbose-config|\"+\n        \"version|VMnames|volume|vow|w|wait|warn|watch|watch-path|week|weekday-of-month|\"+\n        \"week-number|week-year|WHAT|WHERE|WHEREFORE|WHICH|WHO|whole-second|WHY|\"+\n        \"wordcase|words|workaround|wrap|write|write-to|yada|year|yield|yyyy-mm-dd|\"+\n        \"z|zip|zip-latest|\"+\n        \"plan|done-testing|bail-out|todo|skip|skip-rest|diag|subtest|pass|flunk|ok|\"+\n        \"nok|cmp-ok|is-deeply|isnt|is-approx|like|unlike|use-ok|isa-ok|does-ok|\"+\n        \"can-ok|dies-ok|lives-ok|eval-dies-ok|eval-lives-ok|throws-like|fails-like|\"+\n\t\t\"rw|required|native|repr|export|symbol\"\n\t);\n\tvar constants_ascii = (\"pi|Inf|tau|time\");\n\t\n\tvar ops_txt = (\"eq|ne|gt|lt|le|ge|div|gcd|lcm|leg|cmp|ff|fff|\"+\n\t\t\"x|before|after|Z|X|and|or|andthen|notandthen|orelse|xor\"\n\t);\n\n\tvar keywordMapper = this.createKeywordMapper({\n\t\t\"keyword\": keywords,\n\t\t\"storage.type\" : types,\n\t\t\"constant.language\": constants_ascii,\n\t\t\"support.function\": builtinFunctions,\n\t\t\"keyword.operator\": ops_txt\n\t}, \"identifier\");\n\t\n\tvar moduleName = \"[a-zA-Z_][a-zA-Z_0-9:-]*\\\\b\";\n\tvar hex = {\ttoken : \"constant.numeric\", regex : \"0x[0-9a-fA-F]+\\\\b\" };\n\tvar num_rat = { token : \"constant.numeric\", regex : \"[+-.]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\" };\n\tvar num_with_ = { token : \"constant.numeric\", regex : \"(?:\\\\d+_?\\\\d+)+\\\\b\" };\n\tvar complex_numbers = { token : \"constant.numeric\", regex : \"\\\\+?\\\\d+i\\\\b\" };\n\tvar booleans = { token : \"constant.language.boolean\", regex : \"(?:True|False)\\\\b\" };\n\tvar versions = { token : \"constant.other\", regex : \"v[0-9](?:\\\\.[a-zA-Z0-9*])*\\\\b\" };\n\tvar lang_keywords = { token : keywordMapper, regex : \"[a-zA-Z][\\\\:a-zA-Z0-9_-]*\\\\b\" };\n\tvar variables = { token : \"variable.language\", regex : \"[$@%&][?*!.]?[a-zA-Z0-9_-]+\\\\b\" };\n\tvar vars_special = { token: \"variable.language\", regex : \"\\\\$[/|!]?|@\\\\$/\" };\n\tvar ops_char = { token : \"keyword.operator\", regex : \"=|<|>|\\\\+|\\\\*|-|/|~|%|\\\\?|!|\\\\^|\\\\.|\\\\:|\\\\,|\"+\n\t\"»|«|\\\\||\\\\&|⚛|∘\" };\n\tvar constants_unicode = { token : \"constant.language\", regex : \"𝑒|π|τ|∞\" };\n\tvar qstrings = { token : \"string.quoted.single\", regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\" };\n\tvar word_quoting = { token : \"string.quoted.single\", regex : \"[<](?:[a-zA-Z0-9 ])*[>]\"};\n\tvar regexp = {\n\t\t\t\ttoken : \"string.regexp\",\n\t\t\t\tregex : \"[m|rx]?[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\" };\n\t\n\t\n\tthis.$rules = {\n\t\t\"start\" : [\n\t\t\t{\n\t\t\t\ttoken : \"comment.block\", // Embedded Comments - Parentheses\n\t\t\t\tregex : \"#[`|=]\\\\(.*\\\\)\"\n\t\t\t}, {\n\t\t\t\ttoken : \"comment.block\", // Embedded Comments - Brackets\n\t\t\t\tregex : \"#[`|=]\\\\[.*\\\\]\"\n\t\t\t}, {\n\t\t\t\ttoken : \"comment.doc\", // Multiline Comments\n\t\t\t\tregex : \"^=(?:begin)\\\\b\",\n\t\t\t\tnext : \"block_comment\"\n\t\t\t}, {\n\t\t\t\ttoken : \"string.unquoted\", // q Heredocs\n\t\t\t\tregex : \"q[x|w]?\\\\:to/END/;\",\n\t\t\t\tnext : \"qheredoc\"\n\t\t\t}, {\n\t\t\t\ttoken : \"string.unquoted\", // qq Heredocs\n\t\t\t\tregex : \"qq[x|w]?\\\\:to/END/;\",\n\t\t\t\tnext : \"qqheredoc\"\n\t\t\t},\n\t\t\tregexp,\n\t\t\tqstrings\n\t\t\t, {\n\t\t\t\ttoken : \"string.quoted.double\", // Double Quoted String\n\t\t\t\tregex : '\"',\n\t\t\t\tnext : \"qqstring\"\n\t\t\t},\n\t\t\tword_quoting\n\t\t\t, {\n\t\t\t\ttoken: [\"keyword\", \"text\", \"variable.module\"], // use - Module Names, Pragmas, etc.\n\t\t\t\tregex: \"(use)(\\\\s+)((?:\"+moduleName+\"\\\\.?)*)\"\n\t\t\t},\n\t\t\thex,\n\t\t\tnum_rat,\n\t\t\tnum_with_,\n\t\t\tcomplex_numbers,\n\t\t\tbooleans,\n\t\t\tversions,\n\t\t\tlang_keywords,\n\t\t\tvariables,\n\t\t\tvars_special,\n\t\t\tops_char,\n\t\t\tconstants_unicode\n\t\t\t, {\n\t\t\t\ttoken : \"comment\", // Sigle Line Comments\n\t\t\t\tregex : \"#.*$\"\n\t\t\t}, {\n\t\t\t\ttoken : \"lparen\",\n\t\t\t\tregex : \"[[({]\"\n\t\t\t}, {\n\t\t\t\ttoken : \"rparen\",\n\t\t\t\tregex : \"[\\\\])}]\"\n\t\t\t}, {\n\t\t\t\ttoken : \"text\",\n\t\t\t\tregex : \"\\\\s+\"\n\t\t\t}\n\t\t],\n\t\t\"qqstring\" : [\n\t\t\t{\n\t\t\t\ttoken : \"constant.language.escape\",\n\t\t\t\tregex : '\\\\\\\\(?:[nrtef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n\t\t\t}, \n\t\t\tvariables,\n\t\t\tvars_special\n\t\t\t, {\n\t\t\t\ttoken : \"lparen\",\n\t\t\t\tregex : \"{\",\n\t\t\t\tnext : \"qqinterpolation\"\n\t\t\t}, {\n\t\t\t\ttoken : \"string.quoted.double\", \n\t\t\t\tregex : '\"', \n\t\t\t\tnext : \"start\"\n\t\t\t}, {\n\t\t\t\tdefaultToken : \"string.quoted.double\"\n\t\t\t}\n\t\t],\n\t\t\"qqinterpolation\" : [\n\t\t\thex,\n\t\t\tnum_rat,\n\t\t\tnum_with_,\n\t\t\tcomplex_numbers,\n\t\t\tbooleans,\n\t\t\tversions,\n\t\t\tlang_keywords,\n\t\t\tvariables,\n\t\t\tvars_special,\n\t\t\tops_char,\n\t\t\tconstants_unicode,\n\t\t\tqstrings,\n\t\t\tregexp,\n\t\t\t\n\t\t\t{\n\t\t\t\ttoken: \"rparen\",\n\t\t\t\tregex: \"}\",\n\t\t\t\tnext : \"qqstring\"\n\t\t\t}\n\t\t],\n\t\t\"block_comment\": [\n\t\t\t{\n\t\t\t\ttoken: \"comment.doc\",\n\t\t\t\tregex: \"^=end +[a-zA-Z_0-9]*\",\n\t\t\t\tnext: \"start\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tdefaultToken: \"comment.doc\"\n\t\t\t}\n\t\t],\n\t\t\"qheredoc\": [\n\t\t\t{\n\t\t\t\ttoken: \"string.unquoted\",\n\t\t\t\tregex: \"END$\",\n\t\t\t\tnext: \"start\"\n\t\t\t}, {\n\t\t\t\tdefaultToken: \"string.unquoted\"\n\t\t\t}\n\t\t],\n\t\t\"qqheredoc\": [\n\t\t\tvariables,\n\t\t\tvars_special,\n\t\t\t{\n\t\t\t\ttoken : \"lparen\",\n\t\t\t\tregex : \"{\",\n\t\t\t\tnext : \"qqheredocinterpolation\"\n\t\t\t}, {\n\t\t\t\ttoken: \"string.unquoted\",\n\t\t\t\tregex: \"END$\",\n\t\t\t\tnext: \"start\"\n\t\t\t}, {\n\t\t\t\tdefaultToken: \"string.unquoted\"\n\t\t\t}\n\t\t],\n\t\t\"qqheredocinterpolation\" : [\n\t\t\thex,\n\t\t\tnum_rat,\n\t\t\tnum_with_,\n\t\t\tcomplex_numbers,\n\t\t\tbooleans,\n\t\t\tversions,\n\t\t\tlang_keywords,\n\t\t\tvariables,\n\t\t\tvars_special,\n\t\t\tops_char,\n\t\t\tconstants_unicode,\n\t\t\tqstrings,\n\t\t\tregexp,\n\t\t\t{\n\t\t\t\ttoken: \"rparen\",\n\t\t\t\tregex: \"}\",\n\t\t\t\tnext : \"qqheredoc\"\n\t\t\t}\n\t\t]\n\t};\n};\n\noop.inherits(Perl6HighlightRules, TextHighlightRules);\n\nexports.Perl6HighlightRules = Perl6HighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/perl6\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl6_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar Perl6HighlightRules = require(\"./perl6_highlight_rules\").Perl6HighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = Perl6HighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode({start: \"^=(begin)\\\\b\", end: \"^=(end)\\\\b\"});\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n    this.blockComment = [\n        {start: \"=begin\", end: \"=end\", lineStartOnly: true},\n        {start: \"=item\", end: \"=end\", lineStartOnly: true}\n    ];\n\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/perl6\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/perl6\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-pgsql.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PerlHighlightRules = function() {\n\n    var keywords = (\n        \"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|\" +\n         \"no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\"\n    );\n\n    var buildinConstants = (\"ARGV|ENV|INC|SIG\");\n\n    var builtinFunctions = (\n        \"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|\" +\n         \"gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|\" +\n         \"getpeername|setpriority|getprotoent|setprotoent|getpriority|\" +\n         \"endprotoent|getservent|setservent|endservent|sethostent|socketpair|\" +\n         \"getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|\" +\n         \"localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|\" +\n         \"closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|\" +\n         \"shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|\" +\n         \"dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|\" +\n         \"setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|\" +\n         \"lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|\" +\n         \"waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|\" +\n         \"chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|\" +\n         \"unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|\" +\n         \"length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|\" +\n         \"undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|\" +\n         \"sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|\" +\n         \"BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|\" +\n         \"join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|\" +\n         \"keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|\" +\n         \"eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|\" +\n         \"map|die|uc|lc|do\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment.doc\",\n                regex : \"^=(?:begin|item)\\\\b\",\n                next : \"block_comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0x[0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"block_comment\": [\n            {\n                token: \"comment.doc\", \n                regex: \"^=cut\\\\b\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment.doc\"\n            }\n        ]\n    };\n};\n\noop.inherits(PerlHighlightRules, TextHighlightRules);\n\nexports.PerlHighlightRules = PerlHighlightRules;\n});\n\ndefine(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\"\n    );\n\n    var builtinConstants = (\n        \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n    );\n\n    var builtinFunctions = (\n        \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + '\"{3}',\n            next: \"rawqqstring3\"\n        }, {\n            token: \"string\", \n            regex: strRawPre + '\"(?=.)',\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'{3}\",\n            next: \"rawqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'(?=.)\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"{3}',\n            next: \"fqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"(?=.)',\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'{3}\",\n            next: \"fqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'(?=.)\",\n            next: \"fqstring\"\n        },{\n            token: \"string\",\n            regex: strRawFormatPre + '\"{3}',\n            next: \"rfqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + '\"(?=.)',\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'{3}\",\n            next: \"rfqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'(?=.)\",\n            next: \"rfqstring\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }, {\n            include: \"constants\"\n        }],\n        \"qqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring\": [{\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstringParRules\": [{//TODO: nested {}\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)]\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string\",\n            regex: \"'(.)*'\"\n        }, {\n            token: \"string\",\n            regex: '\"(.)*\"'\n        }, {\n            token: \"function.support\",\n            regex: \"(!s|!r|!a)\"\n        }, {\n            include: \"constants\"\n        },{\n            token: 'paren.rparen',\n            regex: \"}\",\n            next: 'pop'\n        },{\n            token: 'paren.lparen',\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }],\n        \"constants\": [{\n            token: \"constant.numeric\", // imaginary\n            regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: floatNumber\n        }, {\n            token: \"constant.numeric\", // long integer\n            regex: integer + \"[lL]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // integer\n            regex: integer + \"\\\\b\"\n        }, {\n            token: [\"punctuation\", \"function.support\"],// method\n            regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n\ndefine(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"variable\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next  : \"string\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"text\", // single quoted strings are not allowed\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"comment\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.start\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\*\",\n                next  : \"comment\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\", // comments are not allowed, but who cares?\n                regex : \"\\\\*\\\\/\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/pgsql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/perl_highlight_rules\",\"ace/mode/python_highlight_rules\",\"ace/mode/json_highlight_rules\",\"ace/mode/javascript_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PerlHighlightRules = require(\"./perl_highlight_rules\").PerlHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar JsonHighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar PgsqlHighlightRules = function() {\n    var keywords = (\n        \"abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|\" +\n        \"analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|anyrange|array|as|asc|\" +\n        \"assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|\" +\n        \"bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|\" +\n        \"catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|\" +\n        \"cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|\" +\n        \"configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|\" +\n        \"create|cross|cstring|csv|current|current_catalog|current_date|current_role|\" +\n        \"current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|\" +\n        \"date|daterange|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|\" +\n        \"definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|\" +\n        \"domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|event|event_trigger|\" +\n        \"except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|\" +\n        \"family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|\" +\n        \"freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|\" +\n        \"having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|\" +\n        \"increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|\" +\n        \"insensitive|insert|instead|int|int2|int2vector|int4|int4range|int8|int8range|integer|\" +\n        \"internal|intersect|interval|into|invoker|is|isnull|isolation|join|json|key|label|language|\" +\n        \"language_handler|large|last|lateral|lc_collate|lc_ctype|leading|leakproof|least|left|level|\" +\n        \"like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|\" +\n        \"mapping|match|materialized|maxvalue|minute|minvalue|mode|money|month|move|name|names|\" +\n        \"national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|\" +\n        \"numeric|numrange|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|\" +\n        \"options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|\" +\n        \"password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|\" +\n        \"pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|\" +\n        \"preserve|primary|prior|privileges|procedural|procedure|program|quote|range|read|real|\" +\n        \"reassign|recheck|record|recursive|ref|refcursor|references|refresh|regclass|regconfig|\" +\n        \"regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|\" +\n        \"reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|\" +\n        \"right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|\" +\n        \"sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|\" +\n        \"simple|smallint|smgr|snapshot|some|stable|standalone|start|statement|statistics|stdin|\" +\n        \"stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|\" +\n        \"template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|\" +\n        \"transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsrange|tstzrange|tsvector|\" +\n        \"txid_snapshot|type|types|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|\" +\n        \"unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|\" +\n        \"varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|\" +\n        \"with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|\" +\n        \"xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone\"\n    );\n\n\n    var builtinFunctions = (\n        \"RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|\" +\n        \"RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|\" +\n        \"RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|\" +\n        \"RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|\" +\n        \"abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|acldefault|\" +\n        \"aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|\" +\n        \"anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|\" +\n        \"anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anyrange_in|anyrange_out|\" +\n        \"anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|\" +\n        \"array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|\" +\n        \"array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|\" +\n        \"array_prepend|array_recv|array_remove|array_replace|array_send|array_smaller|\" +\n        \"array_to_json|array_to_string|array_typanalyze|array_upper|arraycontained|\" +\n        \"arraycontains|arraycontjoinsel|arraycontsel|arrayoverlap|ascii|ascii_to_mic|\" +\n        \"ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|\" +\n        \"bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|\" +\n        \"bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|\" +\n        \"bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|\" +\n        \"boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|\" +\n        \"box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|\" +\n        \"box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|\" +\n        \"box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|\" +\n        \"box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|\" +\n        \"bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|\" +\n        \"bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|\" +\n        \"bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|\" +\n        \"bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|\" +\n        \"btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|\" +\n        \"btbulkdelete|btcanreturn|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|\" +\n        \"btfloat4sortsupport|btfloat84cmp|btfloat8cmp|btfloat8sortsupport|btgetbitmap|\" +\n        \"btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint2sortsupport|btint42cmp|\" +\n        \"btint48cmp|btint4cmp|btint4sortsupport|btint82cmp|btint84cmp|btint8cmp|\" +\n        \"btint8sortsupport|btmarkpos|btnamecmp|btnamesortsupport|btoidcmp|btoidsortsupport|\" +\n        \"btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|\" +\n        \"bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|\" +\n        \"bytea_string_agg_finalfn|bytea_string_agg_transfn|byteacat|byteacmp|byteaeq|byteage|\" +\n        \"byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|\" +\n        \"cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|\" +\n        \"cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|\" +\n        \"cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|\" +\n        \"cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|\" +\n        \"charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|\" +\n        \"cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|\" +\n        \"circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|\" +\n        \"circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|\" +\n        \"circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|\" +\n        \"circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|\" +\n        \"circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|\" +\n        \"close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|\" +\n        \"contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|\" +\n        \"covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|\" +\n        \"current_query|current_schema|current_schemas|current_setting|current_user|currtid|\" +\n        \"currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|\" +\n        \"database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|\" +\n        \"date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|\" +\n        \"date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|\" +\n        \"date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|\" +\n        \"date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|\" +\n        \"date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|\" +\n        \"date_recv|date_send|date_smaller|date_sortsupport|date_trunc|daterange|\" +\n        \"daterange_canonical|daterange_subdiff|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|\" +\n        \"dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|\" +\n        \"dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|\" +\n        \"dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|\" +\n        \"dsynonym_init|dsynonym_lexize|dtrunc|elem_contained_by_range|encode|enum_cmp|enum_eq|\" +\n        \"enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|\" +\n        \"enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|\" +\n        \"euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|\" +\n        \"euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|\" +\n        \"euc_tw_to_mic|euc_tw_to_utf8|event_trigger_in|event_trigger_out|every|exp|factorial|\" +\n        \"family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|\" +\n        \"float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|\" +\n        \"float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|\" +\n        \"float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|\" +\n        \"float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|\" +\n        \"float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|\" +\n        \"float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|\" +\n        \"float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|\" +\n        \"float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|\" +\n        \"float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|\" +\n        \"float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|\" +\n        \"float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|\" +\n        \"fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|\" +\n        \"gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|\" +\n        \"get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|\" +\n        \"gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|\" +\n        \"ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|\" +\n        \"gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|\" +\n        \"ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|\" +\n        \"gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|\" +\n        \"gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|\" +\n        \"gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|\" +\n        \"gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|\" +\n        \"gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|\" +\n        \"gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|\" +\n        \"gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|\" +\n        \"gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|\" +\n        \"gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|\" +\n        \"gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|\" +\n        \"has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|\" +\n        \"has_function_privilege|has_language_privilege|has_schema_privilege|\" +\n        \"has_sequence_privilege|has_server_privilege|has_table_privilege|\" +\n        \"has_tablespace_privilege|has_type_privilege|hash_aclitem|hash_array|hash_numeric|\" +\n        \"hash_range|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|\" +\n        \"hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|\" +\n        \"hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|\" +\n        \"hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|\" +\n        \"hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|\" +\n        \"icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|\" +\n        \"inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|\" +\n        \"inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|\" +\n        \"initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|\" +\n        \"int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|\" +\n        \"int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|\" +\n        \"int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|\" +\n        \"int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|\" +\n        \"int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|\" +\n        \"int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|\" +\n        \"int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|\" +\n        \"int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|\" +\n        \"int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|\" +\n        \"int4range|int4range_canonical|int4range_subdiff|int4recv|int4send|int4shl|int4shr|\" +\n        \"int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|\" +\n        \"int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|\" +\n        \"int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|\" +\n        \"int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|\" +\n        \"int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|\" +\n        \"int8range|int8range_canonical|int8range_subdiff|int8recv|int8send|int8shl|int8shr|\" +\n        \"int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|\" +\n        \"internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|\" +\n        \"interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|\" +\n        \"interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|\" +\n        \"interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|\" +\n        \"interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_transform|\" +\n        \"interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isempty|isfinite|\" +\n        \"ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|\" +\n        \"iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|json_agg|\" +\n        \"json_agg_finalfn|json_agg_transfn|json_array_element|json_array_element_text|\" +\n        \"json_array_elements|json_array_length|json_each|json_each_text|json_extract_path|\" +\n        \"json_extract_path_op|json_extract_path_text|json_extract_path_text_op|json_in|\" +\n        \"json_object_field|json_object_field_text|json_object_keys|json_out|\" +\n        \"json_populate_record|json_populate_recordset|json_recv|json_send|justify_days|\" +\n        \"justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|\" +\n        \"koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|\" +\n        \"language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|\" +\n        \"latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|\" +\n        \"line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|\" +\n        \"line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|\" +\n        \"lo_export|lo_import|lo_lseek|lo_lseek64|lo_open|lo_tell|lo_tell64|lo_truncate|\" +\n        \"lo_truncate64|lo_unlink|log|loread|lower|lower_inc|lower_inf|lowrite|lpad|lseg|lseg_center|\" +\n        \"lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|\" +\n        \"lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|\" +\n        \"lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_and|macaddr_cmp|macaddr_eq|macaddr_ge|\" +\n        \"macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_not|macaddr_or|\" +\n        \"macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|\" +\n        \"mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|\" +\n        \"mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|\" +\n        \"mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|\" +\n        \"name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|\" +\n        \"namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|\" +\n        \"neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|\" +\n        \"network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|\" +\n        \"nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|\" +\n        \"numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|\" +\n        \"numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|\" +\n        \"numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|\" +\n        \"numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|\" +\n        \"numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|\" +\n        \"numeric_transform|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|\" +\n        \"numerictypmodin|numerictypmodout|numnode|numrange|numrange_subdiff|obj_description|\" +\n        \"octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|\" +\n        \"oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|\" +\n        \"oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|\" +\n        \"on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|\" +\n        \"path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|\" +\n        \"path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|\" +\n        \"path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|\" +\n        \"pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|\" +\n        \"pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|\" +\n        \"pg_available_extension_versions|pg_available_extensions|pg_backend_pid|\" +\n        \"pg_backup_start_time|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|\" +\n        \"pg_collation_for|pg_collation_is_visible|pg_column_is_updatable|pg_column_size|\" +\n        \"pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|\" +\n        \"pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|\" +\n        \"pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|\" +\n        \"pg_event_trigger_dropped_objects|pg_export_snapshot|pg_extension_config_dump|\" +\n        \"pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|\" +\n        \"pg_get_function_arguments|pg_get_function_identity_arguments|\" +\n        \"pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|\" +\n        \"pg_get_multixact_members|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|\" +\n        \"pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_identify_object|pg_indexes_size|\" +\n        \"pg_is_in_backup|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|\" +\n        \"pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|\" +\n        \"pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|\" +\n        \"pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|\" +\n        \"pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|\" +\n        \"pg_opfamily_is_visible|pg_options_to_table|pg_postmaster_start_time|\" +\n        \"pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|\" +\n        \"pg_relation_filenode|pg_relation_filepath|pg_relation_is_updatable|pg_relation_size|\" +\n        \"pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|\" +\n        \"pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|\" +\n        \"pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|\" +\n        \"pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|\" +\n        \"pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|\" +\n        \"pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|\" +\n        \"pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|\" +\n        \"pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|\" +\n        \"pg_stat_get_bgwriter_buf_written_checkpoints|\" +\n        \"pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|\" +\n        \"pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|\" +\n        \"pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|\" +\n        \"pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|\" +\n        \"pg_stat_get_buf_written_backend|pg_stat_get_checkpoint_sync_time|\" +\n        \"pg_stat_get_checkpoint_write_time|pg_stat_get_db_blk_read_time|\" +\n        \"pg_stat_get_db_blk_write_time|pg_stat_get_db_blocks_fetched|\" +\n        \"pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|\" +\n        \"pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|\" +\n        \"pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|\" +\n        \"pg_stat_get_db_conflict_tablespace|pg_stat_get_db_deadlocks|\" +\n        \"pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|\" +\n        \"pg_stat_get_db_temp_bytes|pg_stat_get_db_temp_files|pg_stat_get_db_tuples_deleted|\" +\n        \"pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|\" +\n        \"pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|\" +\n        \"pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|\" +\n        \"pg_stat_get_function_calls|pg_stat_get_function_self_time|\" +\n        \"pg_stat_get_function_total_time|pg_stat_get_last_analyze_time|\" +\n        \"pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|\" +\n        \"pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|\" +\n        \"pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|\" +\n        \"pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|\" +\n        \"pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|\" +\n        \"pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|\" +\n        \"pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|\" +\n        \"pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_total_time|\" +\n        \"pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|\" +\n        \"pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|\" +\n        \"pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|\" +\n        \"pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|\" +\n        \"pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|\" +\n        \"pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|\" +\n        \"pg_tablespace_databases|pg_tablespace_location|pg_tablespace_size|\" +\n        \"pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|\" +\n        \"pg_trigger_depth|pg_try_advisory_lock|pg_try_advisory_lock_shared|\" +\n        \"pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|\" +\n        \"pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|\" +\n        \"pg_type_is_visible|pg_typeof|pg_xlog_location_diff|pg_xlog_replay_pause|\" +\n        \"pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|\" +\n        \"plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|\" +\n        \"point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|\" +\n        \"point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|\" +\n        \"poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|\" +\n        \"poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|\" +\n        \"poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|\" +\n        \"polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|\" +\n        \"prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|\" +\n        \"pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|\" +\n        \"querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|range_adjacent|\" +\n        \"range_after|range_before|range_cmp|range_contained_by|range_contains|\" +\n        \"range_contains_elem|range_eq|range_ge|range_gist_compress|range_gist_consistent|\" +\n        \"range_gist_decompress|range_gist_penalty|range_gist_picksplit|range_gist_same|\" +\n        \"range_gist_union|range_gt|range_in|range_intersect|range_le|range_lt|range_minus|\" +\n        \"range_ne|range_out|range_overlaps|range_overleft|range_overright|range_recv|range_send|\" +\n        \"range_typanalyze|range_union|rangesel|rank|record_eq|record_ge|record_gt|record_in|\" +\n        \"record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|\" +\n        \"regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|\" +\n        \"regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|\" +\n        \"regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|\" +\n        \"regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|\" +\n        \"regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|\" +\n        \"regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|\" +\n        \"regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|\" +\n        \"regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|\" +\n        \"reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|\" +\n        \"reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|row_to_json|rpad|\" +\n        \"rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|\" +\n        \"schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|\" +\n        \"set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|\" +\n        \"shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|\" +\n        \"similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|\" +\n        \"smgrout|spg_kd_choose|spg_kd_config|spg_kd_inner_consistent|spg_kd_picksplit|\" +\n        \"spg_quad_choose|spg_quad_config|spg_quad_inner_consistent|spg_quad_leaf_consistent|\" +\n        \"spg_quad_picksplit|spg_range_quad_choose|spg_range_quad_config|\" +\n        \"spg_range_quad_inner_consistent|spg_range_quad_leaf_consistent|\" +\n        \"spg_range_quad_picksplit|spg_text_choose|spg_text_config|spg_text_inner_consistent|\" +\n        \"spg_text_leaf_consistent|spg_text_picksplit|spgbeginscan|spgbuild|spgbuildempty|\" +\n        \"spgbulkdelete|spgcanreturn|spgcostestimate|spgendscan|spggetbitmap|spggettuple|\" +\n        \"spginsert|spgmarkpos|spgoptions|spgrescan|spgrestrpos|spgvacuumcleanup|split_part|sqrt|\" +\n        \"statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|\" +\n        \"string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|\" +\n        \"suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|\" +\n        \"table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|\" +\n        \"text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|\" +\n        \"texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|\" +\n        \"textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|\" +\n        \"thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|\" +\n        \"tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|\" +\n        \"time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|\" +\n        \"time_smaller|time_transform|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|\" +\n        \"timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|\" +\n        \"timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|\" +\n        \"timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|\" +\n        \"timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|\" +\n        \"timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|\" +\n        \"timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|\" +\n        \"timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|\" +\n        \"timestamp_sortsupport|timestamp_transform|timestamptypmodin|timestamptypmodout|\" +\n        \"timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|\" +\n        \"timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|\" +\n        \"timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|\" +\n        \"timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|\" +\n        \"timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|\" +\n        \"timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|\" +\n        \"timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|\" +\n        \"timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|\" +\n        \"timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|\" +\n        \"timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|\" +\n        \"timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|\" +\n        \"timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|\" +\n        \"tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|\" +\n        \"tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|\" +\n        \"tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|\" +\n        \"tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|\" +\n        \"to_json|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|\" +\n        \"trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|\" +\n        \"ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|\" +\n        \"ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|\" +\n        \"tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|\" +\n        \"tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsrange|\" +\n        \"tsrange_subdiff|tstzrange|tstzrange_subdiff|tsvector_cmp|tsvector_concat|tsvector_eq|\" +\n        \"tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|\" +\n        \"tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|\" +\n        \"txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|\" +\n        \"txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|\" +\n        \"txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|\" +\n        \"unknownout|unknownrecv|unknownsend|unnest|upper|upper_inc|upper_inf|utf8_to_ascii|\" +\n        \"utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|\" +\n        \"utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|\" +\n        \"utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|\" +\n        \"utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|\" +\n        \"uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|\" +\n        \"varbit_recv|varbit_send|varbit_transform|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|\" +\n        \"varbitlt|varbitne|varbittypmodin|varbittypmodout|varchar_transform|varcharin|\" +\n        \"varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|\" +\n        \"void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|\" +\n        \"win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|\" +\n        \"win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|\" +\n        \"xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|\" +\n        \"xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|\" +\n        \"xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n\n\n    var sqlRules = [{\n            token : \"string\", // single line string -- assume dollar strings if multi-line for now\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"variable.language\", // pg identifier\n            regex : '\".*?\"'\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\" // TODO - Unicode in identifiers\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\" +\n                    \"\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\" +\n                    \"\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|\" +\n                    \"~=|~>=~|~>~|~~|~~\\\\*\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    ];\n\n\n    this.$rules = {\n        \"start\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            },{\n                token : \"keyword.statementBegin\",\n                regex : \"[a-zA-Z]+\", // Could enumerate starting keywords but this allows things to work when new statements are added.\n                next : \"statement\"\n            },{\n                token : \"support.buildin\", // psql directive\n                regex : \"^\\\\\\\\[\\\\S]+.*$\"\n            }\n        ],\n\n        \"statement\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentStatement\"\n            }, {\n                token : \"statementEnd\",\n                regex : \";\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$perl\\\\$\",\n                next : \"perl-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$python\\\\$\",\n                next : \"python-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$json\\\\$\",\n                next : \"json-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$(js|javascript)\\\\$\",\n                next : \"javascript-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$$\", // dollar quote at the end of a line\n                next : \"dollarSql\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarStatementString\"\n            }\n        ].concat(sqlRules),\n\n        \"dollarSql\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentDollarSql\"\n            }, {\n                token : \"string\", // end quoting with dollar at the start of a line\n                regex : \"^\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSqlString\"\n            }\n        ].concat(sqlRules),\n\n        \"comment\" : [{\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"commentStatement\" : [{\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"statement\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"commentDollarSql\" : [{\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"dollarSql\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"dollarStatementString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"dollarSqlString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSql\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.embedRules(PerlHighlightRules, \"perl-\", [{token : \"string\", regex : \"\\\\$perl\\\\$\", next : \"statement\"}]);\n    this.embedRules(PythonHighlightRules, \"python-\", [{token : \"string\", regex : \"\\\\$python\\\\$\", next : \"statement\"}]);\n    this.embedRules(JsonHighlightRules, \"json-\", [{token : \"string\", regex : \"\\\\$json\\\\$\", next : \"statement\"}]);\n    this.embedRules(JavaScriptHighlightRules, \"javascript-\", [{token : \"string\", regex : \"\\\\$(js|javascript)\\\\$\", next : \"statement\"}]);\n};\n\noop.inherits(PgsqlHighlightRules, TextHighlightRules);\n\nexports.PgsqlHighlightRules = PgsqlHighlightRules;\n});\n\ndefine(\"ace/mode/pgsql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pgsql_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar PgsqlHighlightRules = require(\"./pgsql_highlight_rules\").PgsqlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = PgsqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) { \n        if (state == \"start\" || state == \"keyword.statementEnd\") {\n            return \"\";\n        } else {\n            return this.$getIndent(line); // Keep whatever indent the previous line has\n        }\n    };\n\n    this.$id = \"ace/mode/pgsql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-php.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar PhpLangHighlightRules = function() {\n    var docComment = DocCommentHighlightRules;\n    var builtinFunctions = lang.arrayToMap(\n'abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|\\\naggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|\\\napache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|\\\napache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|\\\napc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|\\\napc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|\\\napd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|\\\napd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|\\\narray_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|\\\narray_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|\\\narray_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|\\\narray_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|\\\narray_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|\\\narray_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|\\\natan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|\\\nbbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|\\\nbcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|\\\nbcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|\\\nbcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|\\\nbindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|\\\ncachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|\\\ncairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|\\\ncairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|\\\ncairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|\\\ncairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|\\\ncairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|\\\ncairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|\\\ncairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|\\\ncairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|\\\ncairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|\\\ncairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|\\\ncairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|\\\ncairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|\\\ncairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|\\\ncairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|\\\ncairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|\\\ncairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|\\\ncairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|\\\ncairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|\\\ncairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|\\\ncairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|\\\ncairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|\\\ncairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|\\\ncairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|\\\ncairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|\\\ncairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|\\\ncairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|\\\ncal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|\\\nchdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|\\\nclass_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|\\\nclasskit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|\\\ncom_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|\\\ncom_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|\\\nconvert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|\\\ncounter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|\\\ncrack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|\\\nctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|\\\ncubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|\\\ncubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|\\\ncubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|\\\ncubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|\\\ncubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|\\\ncubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|\\\ncubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|\\\ncubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|\\\ncubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|\\\ncubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|\\\ncubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|\\\ncurl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|\\\ncurl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|\\\ncurl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|\\\ndate_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|\\\ndate_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|\\\ndate_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|\\\ndateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|\\\ndb2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|\\\ndb2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|\\\ndb2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|\\\ndb2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|\\\ndb2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|\\\ndb2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|\\\ndba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|\\\ndbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|\\\ndbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|\\\ndbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|\\\ndbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|\\\ndbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|\\\ndbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|\\\ndbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|\\\ndbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|\\\ndefine_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|\\\ndio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|\\\ndns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|\\\ndomattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|\\\ndomdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|\\\ndomdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|\\\ndomdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|\\\ndomdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|\\\ndomdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|\\\ndomelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|\\\ndomelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|\\\ndomexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|\\\ndomnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|\\\ndomnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|\\\ndomnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|\\\ndomnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|\\\ndomnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|\\\ndomtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|\\\ndomxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|\\\ndomxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|\\\nenchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|\\\nenchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|\\\nenchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|\\\nenchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|\\\neregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|\\\nevent_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|\\\nevent_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|\\\nevent_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|\\\nevent_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|\\\nexpm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|\\\nfam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|\\\nfbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|\\\nfbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|\\\nfbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|\\\nfbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|\\\nfbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|\\\nfbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|\\\nfbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|\\\nfbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|\\\nfdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|\\\nfdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|\\\nfdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|\\\nfdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|\\\nfile_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|\\\nfilepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|\\\nfiletype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|\\\nfinfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|\\\nforward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|\\\nftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|\\\nftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|\\\nftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|\\\nfunc_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|\\\ngearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|\\\ngeoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|\\\ngeoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|\\\nget_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|\\\nget_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|\\\nget_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|\\\nget_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|\\\ngetcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|\\\ngethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|\\\ngetmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|\\\ngetrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|\\\ngettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|\\\ngmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|\\\ngmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|\\\ngmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|\\\ngnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|\\\ngnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|\\\ngnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|\\\ngrapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|\\\ngupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|\\\ngupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|\\\ngupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|\\\ngupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|\\\ngupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|\\\ngupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|\\\ngupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|\\\ngupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|\\\ngupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|\\\ngzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|\\\nhalt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|\\\nharuannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|\\\nharudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|\\\nharudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|\\\nharudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|\\\nharudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|\\\nharudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|\\\nharudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|\\\nharudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|\\\nharudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|\\\nharuencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|\\\nharufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|\\\nharufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|\\\nharuimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|\\\nharuoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|\\\nharupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|\\\nharupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|\\\nharupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|\\\nharupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|\\\nharupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|\\\nharupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|\\\nharupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|\\\nharupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|\\\nharupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|\\\nharupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|\\\nharupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|\\\nharupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|\\\nharupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|\\\nharupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|\\\nhash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|\\\nheader_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|\\\nhtml_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|\\\nhttp_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|\\\nhttp_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|\\\nhttp_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|\\\nhttp_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|\\\nhttp_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|\\\nhttp_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|\\\nhttp_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|\\\nhttp_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|\\\nhttpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|\\\nhttpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|\\\nhttpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|\\\nhttpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|\\\nhttpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|\\\nhttpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|\\\nhttpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|\\\nhttpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|\\\nhttpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|\\\nhttprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|\\\nhttprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|\\\nhttprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|\\\nhttprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|\\\nhttprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|\\\nhttprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|\\\nhttprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|\\\nhttprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|\\\nhttprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|\\\nhttprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|\\\nhttprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|\\\nhttprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|\\\nhttprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|\\\nhttpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|\\\nhttpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|\\\nhttpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|\\\nhttpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|\\\nhttpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|\\\nhttpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|\\\nhttpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|\\\nhw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|\\\nhw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|\\\nhw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|\\\nhw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|\\\nhw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|\\\nhw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|\\\nhw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|\\\nhwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|\\\nhwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|\\\nhwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|\\\nhwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|\\\nhwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|\\\nhwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|\\\nhwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|\\\nibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|\\\nibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|\\\nibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|\\\nibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|\\\nibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|\\\nibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|\\\nibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|\\\niconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|\\\nid3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|\\\nidn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|\\\nifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|\\\nifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|\\\nifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|\\\nifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|\\\niis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|\\\niis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|\\\niis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|\\\nimagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|\\\nimagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|\\\nimagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|\\\nimagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|\\\nimagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|\\\nimagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|\\\nimagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|\\\nimagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|\\\nimagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|\\\nimagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|\\\nimagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|\\\nimagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|\\\nimagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|\\\nimagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|\\\nimagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|\\\nimagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|\\\nimagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|\\\nimagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|\\\nimagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|\\\nimagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|\\\nimagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|\\\nimagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|\\\nimagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|\\\nimagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|\\\nimagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|\\\nimagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|\\\nimagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|\\\nimagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|\\\nimagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|\\\nimagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|\\\nimagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|\\\nimagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|\\\nimagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|\\\nimagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|\\\nimagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|\\\nimagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|\\\nimagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|\\\nimagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|\\\nimagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|\\\nimagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|\\\nimagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|\\\nimagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|\\\nimagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|\\\nimagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|\\\nimagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|\\\nimagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|\\\nimagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|\\\nimagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|\\\nimagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|\\\nimagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|\\\nimagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|\\\nimagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|\\\nimagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|\\\nimagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|\\\nimagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|\\\nimagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|\\\nimagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|\\\nimagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|\\\nimagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|\\\nimagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|\\\nimagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|\\\nimagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|\\\nimagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|\\\nimagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|\\\nimagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|\\\nimagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|\\\nimagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|\\\nimagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|\\\nimagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|\\\nimagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|\\\nimagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|\\\nimagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|\\\nimagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|\\\nimagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|\\\nimagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|\\\nimagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|\\\nimagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|\\\nimagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|\\\nimagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|\\\nimagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|\\\nimagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|\\\nimagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|\\\nimagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|\\\nimagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|\\\nimagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|\\\nimagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|\\\nimagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|\\\nimagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|\\\nimagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|\\\nimagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|\\\nimagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|\\\nimagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|\\\nimagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|\\\nimagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|\\\nimagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|\\\nimagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|\\\nimagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|\\\nimagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|\\\nimagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|\\\nimagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|\\\nimagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|\\\nimagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|\\\nimap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|\\\nimap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|\\\nimap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|\\\nimap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|\\\nimap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|\\\nimap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|\\\nimap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|\\\nimap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|\\\ninclude_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|\\\ningres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|\\\ningres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|\\\ningres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|\\\ningres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|\\\ningres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|\\\ninotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|\\\nintldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|\\\nis_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|\\\nis_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|\\\niscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|\\\niterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|\\\njddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|\\\njson_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|\\\nkadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|\\\nkadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|\\\nldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|\\\nldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|\\\nldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|\\\nldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|\\\nldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|\\\nlibxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|\\\nlimititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|\\\nlzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|\\\nm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|\\\nm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|\\\nm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|\\\nm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|\\\nmailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|\\\nmailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|\\\nmailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|\\\nmaxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|\\\nmaxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|\\\nmaxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|\\\nmaxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|\\\nmaxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|\\\nmaxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|\\\nmaxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|\\\nmaxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|\\\nmaxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|\\\nmaxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|\\\nmaxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|\\\nmaxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|\\\nmaxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|\\\nmaxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|\\\nmaxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|\\\nmb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|\\\nmb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|\\\nmb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|\\\nmb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|\\\nmb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|\\\nmb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|\\\nmb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|\\\nmcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|\\\nmcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|\\\nmcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|\\\nmcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|\\\nmcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|\\\nmcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|\\\nmdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|\\\nmhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|\\\nming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|\\\nmongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|\\\nmongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|\\\nmongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|\\\nmqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|\\\nmqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|\\\nmsession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|\\\nmsession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|\\\nmsg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|\\\nmsql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|\\\nmsql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|\\\nmsql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|\\\nmsql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|\\\nmssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|\\\nmssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|\\\nmssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|\\\nmssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|\\\nmssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|\\\nmysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|\\\nmysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|\\\nmysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|\\\nmysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|\\\nmysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|\\\nmysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|\\\nmysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|\\\nmysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|\\\nmysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|\\\nmysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|\\\nmysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|\\\nmysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|\\\nmysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|\\\nmysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|\\\nmysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|\\\nmysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|\\\nmysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|\\\nmysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|\\\nmysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|\\\nmysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|\\\nmysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|\\\nmysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|\\\nmysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|\\\nmysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|\\\nmysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|\\\nmysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|\\\nmysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|\\\nncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|\\\nncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|\\\nncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|\\\nncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|\\\nncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|\\\nncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|\\\nncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|\\\nncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|\\\nncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|\\\nncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|\\\nncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|\\\nncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|\\\nncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|\\\nncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|\\\nncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|\\\nncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|\\\nncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|\\\nncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|\\\nncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|\\\nncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|\\\nncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|\\\nncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|\\\nnewt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|\\\nnewt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|\\\nnewt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|\\\nnewt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|\\\nnewt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|\\\nnewt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|\\\nnewt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|\\\nnewt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|\\\nnewt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|\\\nnewt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|\\\nnewt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|\\\nnewt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|\\\nnewt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|\\\nnewt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|\\\nnewt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|\\\nnewt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|\\\nnewt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|\\\nnewt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|\\\nnewt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|\\\nnotes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|\\\nnotes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|\\\nnumberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|\\\nob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|\\\nob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|\\\noci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|\\\noci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|\\\noci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|\\\noci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|\\\noci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|\\\noci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|\\\noci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|\\\noci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|\\\noci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|\\\nocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|\\\nocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|\\\nocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|\\\nociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|\\\nocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|\\\noctdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|\\\nodbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|\\\nodbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|\\\nodbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|\\\nodbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|\\\nodbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|\\\nopenal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|\\\nopenal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|\\\nopenal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|\\\nopenlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|\\\nopenssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|\\\nopenssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|\\\nopenssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|\\\nopenssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|\\\nopenssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|\\\nopenssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|\\\nopenssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|\\\noutofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|\\\novrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|\\\novrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|\\\novrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|\\\nparse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|\\\npcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|\\\npcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|\\\npdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|\\\npdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|\\\npdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|\\\npdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|\\\npdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|\\\npdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|\\\npdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|\\\npdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|\\\npdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|\\\npdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|\\\npdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|\\\npdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|\\\npdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|\\\npdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|\\\npdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|\\\npdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|\\\npdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|\\\npdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|\\\npdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|\\\npdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|\\\npdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|\\\npdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|\\\npdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|\\\npdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|\\\npg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|\\\npg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|\\\npg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|\\\npg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|\\\npg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|\\\npg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|\\\npg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|\\\npg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|\\\npg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|\\\nphp_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|\\\npng2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|\\\nposix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|\\\nposix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|\\\nposix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|\\\npreg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|\\\nprinter_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|\\\nprinter_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|\\\nprinter_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|\\\nprinter_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|\\\nprinter_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|\\\nps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|\\\nps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|\\\nps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|\\\nps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|\\\nps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|\\\nps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|\\\nps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|\\\nps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|\\\nps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|\\\npspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|\\\npspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|\\\npspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|\\\npx_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|\\\npx_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|\\\npx_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|\\\nradius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|\\\nradius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|\\\nradius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|\\\nradius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|\\\nrararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|\\\nreadline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|\\\nreadline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|\\\nreadline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|\\\nrecursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|\\\nrecursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|\\\nreflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|\\\nregexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|\\\nresourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|\\\nrpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|\\\nrrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|\\\nrunkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|\\\nrunkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|\\\nrunkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|\\\nrunkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|\\\nsamconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|\\\nsamconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|\\\nsammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|\\\nsca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|\\\nsdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|\\\nsdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|\\\nsdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|\\\nsdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|\\\nsdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|\\\nsdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|\\\nsdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|\\\nsdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|\\\nsdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|\\\nsdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|\\\nsdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|\\\nsdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|\\\nsdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|\\\nsdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|\\\nsdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|\\\nsdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|\\\nsdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|\\\nsem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|\\\nsession_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|\\\nsession_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|\\\nsession_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|\\\nsession_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|\\\nset_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|\\\nsetstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|\\\nshm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|\\\nsimilar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|\\\nsnmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|\\\nsnmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|\\\nsnmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|\\\nsoapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|\\\nsocket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|\\\nsocket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|\\\nsocket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|\\\nsolrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|\\\nsolrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|\\\nsolrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|\\\nspl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|\\\nsplfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|\\\nsplpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|\\\nsqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|\\\nsqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|\\\nsqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|\\\nsqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|\\\nsqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|\\\nsqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|\\\nssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|\\\nssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|\\\nssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|\\\nssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|\\\nstats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|\\\nstats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|\\\nstats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|\\\nstats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|\\\nstats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|\\\nstats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|\\\nstats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|\\\nstats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|\\\nstats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|\\\nstats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|\\\nstats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|\\\nstats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|\\\nstr_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|\\\nstream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|\\\nstream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|\\\nstream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|\\\nstream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|\\\nstream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|\\\nstream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|\\\nstream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|\\\nstream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|\\\nstripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|\\\nstrstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|\\\nsvn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|\\\nsvn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|\\\nsvn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|\\\nsvn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|\\\nsvn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|\\\nsvn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|\\\nswf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|\\\nswf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|\\\nswf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|\\\nswf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|\\\nswf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|\\\nswf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|\\\nswf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|\\\nswf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|\\\nswfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|\\\nswfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|\\\nswish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|\\\nswishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|\\\nswishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|\\\nsybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|\\\nsybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|\\\nsybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|\\\nsybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|\\\ntcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|\\\ntidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|\\\ntime_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|\\\ntimezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|\\\ntokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|\\\nucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|\\\nudm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|\\\nudm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|\\\nuksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|\\\nurldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|\\\nvariant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|\\\nvariant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|\\\nvariant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|\\\nvpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|\\\nvpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|\\\nvpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|\\\nw32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|\\\nwddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|\\\nwin32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|\\\nwin32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|\\\nwincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|\\\nwincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|\\\nwincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|\\\nwincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|\\\nxattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|\\\nxdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|\\\nxdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|\\\nxhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|\\\nxml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|\\\nxml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|\\\nxml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|\\\nxml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|\\\nxmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|\\\nxmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|\\\nxmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|\\\nxmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|\\\nxmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|\\\nxmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|\\\nxmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|\\\nxmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|\\\nxmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|\\\nxmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|\\\nxmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|\\\nxpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|\\\nxslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|\\\nxslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|\\\nyaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|\\\nyaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|\\\nyaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|\\\nyp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|\\\nzip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|\\\nziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|\\\nziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|\\\nziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|\\\nziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|\\\nziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|\\\nziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type'.split('|')\n    );\n    var keywords = lang.arrayToMap(\n'abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|\\\nendif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|\\\npublic|static|switch|throw|trait|try|use|var|while|xor|yield'.split('|')\n    );\n    var languageConstructs = lang.arrayToMap(\n        ('__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|')\n    );\n\n    var builtinConstants = lang.arrayToMap(\n        ('true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__').split('|')\n    );\n\n    var builtinVariables = lang.arrayToMap(\n'$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|\\\n$http_response_header|$argc|$argv'.split('|')\n    );\n    var builtinFunctionsDeprecated = lang.arrayToMap(\n'key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|\\\ncom_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|\\\ncubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|\\\nhw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|\\\nmaxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|\\\nmysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|\\\nmysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|\\\nmysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|\\\nmysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|\\\nmysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|\\\nmysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|\\\nocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|\\\nocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|\\\nocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|\\\nocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|\\\nociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|\\\nPDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|\\\nPDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|\\\nPDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|\\\nPDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|\\\nPDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|\\\nPDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|\\\nPDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|\\\nPDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|\\\npx_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister\\\nset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|\\\nsql_regcase'.split('|')\n    );\n\n    var keywordsDeprecated = lang.arrayToMap(\n        ('cfunction|old_function').split('|')\n    );\n\n    var futureReserved = lang.arrayToMap([]);\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /(?:#|\\/\\/)(?:[^?]|\\?[^>])*/\n            },\n            docComment.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // \" string start\n                regex : '\"',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // ' string start\n                regex : \"'\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|\" +\n                        \"ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|\" +\n                        \"HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|\" +\n                        \"L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|\" +\n                        \"VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"\n            }, {\n                token : [\"keyword\", \"text\", \"support.class\"],\n                regex : \"\\\\b(new)(\\\\s+)(\\\\w+)\"\n            }, {\n                token : [\"support.class\", \"keyword.operator\"],\n                regex : \"\\\\b(\\\\w+)(::)\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|\" +\n                        \"SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|\" +\n                        \"O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|\" +\n                        \"R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|\" +\n                        \"YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|\" +\n                        \"ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|\" +\n                        \"T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|\" +\n                        \"HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|\" +\n                        \"I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|\" +\n                        \"O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|\" +\n                        \"L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|\" +\n                        \"M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|\" +\n                        \"OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|\" +\n                        \"T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"\n            }, {\n                token : function(value) {\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (builtinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (builtinVariables.hasOwnProperty(value))\n                        return \"variable.language\";\n                    else if (futureReserved.hasOwnProperty(value))\n                        return \"invalid.illegal\";\n                    else if (builtinFunctions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (value == \"debugger\")\n                        return \"invalid.deprecated\";\n                    else\n                        if(value.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/))\n                            return \"variable\";\n                        return \"identifier\";\n                },\n                regex : /[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            }, {\n                onMatch : function(value, currentSate, state) {\n                    value = value.substr(3);\n                    if (value[0] == \"'\" || value[0] == '\"')\n                        value = value.slice(1, -1);\n                    state.unshift(this.next, value);\n                    return \"markup.list\";\n                },\n                regex : /<<<(?:\\w+|'\\w+'|\"\\w+\")$/,\n                next: \"heredoc\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[,;]/\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"heredoc\" : [\n            {\n                onMatch : function(value, currentSate, stack) {\n                    if (stack[1] != value)\n                        return \"string\";\n                    stack.shift();\n                    stack.shift();\n                    return \"markup.list\";\n                },\n                regex : \"^\\\\w+(?=;?$)\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex : \".*\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : '\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n            }, {\n                token : \"variable\",\n                regex : /\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/\n            }, {\n                token : \"variable\",\n                regex : /\\$\\{[^\"\\}]+\\}?/           // this is wrong but ok for now\n            },\n            {token : \"string\", regex : '\"', next : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"qstring\" : [\n            {token : \"constant.language.escape\", regex : /\\\\['\\\\]/},\n            {token : \"string\", regex : \"'\", next : \"start\"},\n            {defaultToken : \"string\"}\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(PhpLangHighlightRules, TextHighlightRules);\n\n\nvar PhpHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var startRules = [\n        {\n            token : \"support.php_tag\", // php open tag\n            regex : \"<\\\\?(?:php|=)?\",\n            push  : \"php-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token : \"support.php_tag\", // php close tag\n            regex : \"\\\\?>\",\n            next  : \"pop\"\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(PhpLangHighlightRules, \"php-\", endRules, [\"start\"]);\n\n    this.normalizeRules();\n};\n\noop.inherits(PhpHighlightRules, HtmlHighlightRules);\n\nexports.PhpHighlightRules = PhpHighlightRules;\nexports.PhpLangHighlightRules = PhpLangHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar functionMap = {\n    \"abs\": [\n        \"int abs(int number)\",\n        \"Return the absolute value of the number\"\n    ],\n    \"acos\": [\n        \"float acos(float number)\",\n        \"Return the arc cosine of the number in radians\"\n    ],\n    \"acosh\": [\n        \"float acosh(float number)\",\n        \"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"\n    ],\n    \"addGlob\": [\n        \"bool addGlob(string pattern[,int flags [, array options]])\",\n        \"Add files matching the glob pattern. See php's glob for the pattern syntax.\"\n    ],\n    \"addPattern\": [\n        \"bool addPattern(string pattern[, string path [, array options]])\",\n        \"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"\n    ],\n    \"addcslashes\": [\n        \"string addcslashes(string str, string charlist)\",\n        \"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"\n    ],\n    \"addslashes\": [\n        \"string addslashes(string str)\",\n        \"Escapes single quote, double quotes and backslash characters in a string with backslashes\"\n    ],\n    \"apache_child_terminate\": [\n        \"bool apache_child_terminate(void)\",\n        \"Terminate apache process after this request\"\n    ],\n    \"apache_get_modules\": [\n        \"array apache_get_modules(void)\",\n        \"Get a list of loaded Apache modules\"\n    ],\n    \"apache_get_version\": [\n        \"string apache_get_version(void)\",\n        \"Fetch Apache version\"\n    ],\n    \"apache_getenv\": [\n        \"bool apache_getenv(string variable [, bool walk_to_top])\",\n        \"Get an Apache subprocess_env variable\"\n    ],\n    \"apache_lookup_uri\": [\n        \"object apache_lookup_uri(string URI)\",\n        \"Perform a partial request of the given URI to obtain information about it\"\n    ],\n    \"apache_note\": [\n        \"string apache_note(string note_name [, string note_value])\",\n        \"Get and set Apache request notes\"\n    ],\n    \"apache_request_auth_name\": [\n        \"string apache_request_auth_name()\",\n        \"\"\n    ],\n    \"apache_request_auth_type\": [\n        \"string apache_request_auth_type()\",\n        \"\"\n    ],\n    \"apache_request_discard_request_body\": [\n        \"long apache_request_discard_request_body()\",\n        \"\"\n    ],\n    \"apache_request_err_headers_out\": [\n        \"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all headers that go out in case of an error or a subrequest\"\n    ],\n    \"apache_request_headers\": [\n        \"array apache_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"apache_request_headers_in\": [\n        \"array apache_request_headers_in()\",\n        \"* fetch all incoming request headers\"\n    ],\n    \"apache_request_headers_out\": [\n        \"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all outgoing request headers\"\n    ],\n    \"apache_request_is_initial_req\": [\n        \"bool apache_request_is_initial_req()\",\n        \"\"\n    ],\n    \"apache_request_log_error\": [\n        \"boolean apache_request_log_error(string message, [long facility])\",\n        \"\"\n    ],\n    \"apache_request_meets_conditions\": [\n        \"long apache_request_meets_conditions()\",\n        \"\"\n    ],\n    \"apache_request_remote_host\": [\n        \"int apache_request_remote_host([int type])\",\n        \"\"\n    ],\n    \"apache_request_run\": [\n        \"long apache_request_run()\",\n        \"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"\n    ],\n    \"apache_request_satisfies\": [\n        \"long apache_request_satisfies()\",\n        \"\"\n    ],\n    \"apache_request_server_port\": [\n        \"int apache_request_server_port()\",\n        \"\"\n    ],\n    \"apache_request_set_etag\": [\n        \"void apache_request_set_etag()\",\n        \"\"\n    ],\n    \"apache_request_set_last_modified\": [\n        \"void apache_request_set_last_modified()\",\n        \"\"\n    ],\n    \"apache_request_some_auth_required\": [\n        \"bool apache_request_some_auth_required()\",\n        \"\"\n    ],\n    \"apache_request_sub_req_lookup_file\": [\n        \"object apache_request_sub_req_lookup_file(string file)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_sub_req_lookup_uri\": [\n        \"object apache_request_sub_req_lookup_uri(string uri)\",\n        \"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"\n    ],\n    \"apache_request_sub_req_method_uri\": [\n        \"object apache_request_sub_req_method_uri(string method, string uri)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_update_mtime\": [\n        \"long apache_request_update_mtime([int dependency_mtime])\",\n        \"\"\n    ],\n    \"apache_reset_timeout\": [\n        \"bool apache_reset_timeout(void)\",\n        \"Reset the Apache write timer\"\n    ],\n    \"apache_response_headers\": [\n        \"array apache_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"apache_setenv\": [\n        \"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\n        \"Set an Apache subprocess_env variable\"\n    ],\n    \"array_change_key_case\": [\n        \"array array_change_key_case(array input [, int case=CASE_LOWER])\",\n        \"Retuns an array with all string keys lowercased [or uppercased]\"\n    ],\n    \"array_chunk\": [\n        \"array array_chunk(array input, int size [, bool preserve_keys])\",\n        \"Split array into chunks\"\n    ],\n    \"array_combine\": [\n        \"array array_combine(array keys, array values)\",\n        \"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"\n    ],\n    \"array_count_values\": [\n        \"array array_count_values(array input)\",\n        \"Return the value as key and the frequency of that value in input as value\"\n    ],\n    \"array_diff\": [\n        \"array array_diff(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"\n    ],\n    \"array_diff_assoc\": [\n        \"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"\n    ],\n    \"array_diff_key\": [\n        \"array array_diff_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_diff_uassoc\": [\n        \"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"\n    ],\n    \"array_diff_ukey\": [\n        \"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_fill\": [\n        \"array array_fill(int start_key, int num, mixed val)\",\n        \"Create an array containing num elements starting with index start_key each initialized to val\"\n    ],\n    \"array_fill_keys\": [\n        \"array array_fill_keys(array keys, mixed val)\",\n        \"Create an array using the elements of the first parameter as keys each initialized to val\"\n    ],\n    \"array_filter\": [\n        \"array array_filter(array input [, mixed callback])\",\n        \"Filters elements from the array via the callback.\"\n    ],\n    \"array_flip\": [\n        \"array array_flip(array input)\",\n        \"Return array with key <-> value flipped\"\n    ],\n    \"array_intersect\": [\n        \"array array_intersect(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments\"\n    ],\n    \"array_intersect_assoc\": [\n        \"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"\n    ],\n    \"array_intersect_key\": [\n        \"array array_intersect_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"\n    ],\n    \"array_intersect_uassoc\": [\n        \"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"\n    ],\n    \"array_intersect_ukey\": [\n        \"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"\n    ],\n    \"array_key_exists\": [\n        \"bool array_key_exists(mixed key, array search)\",\n        \"Checks if the given key or index exists in the array\"\n    ],\n    \"array_keys\": [\n        \"array array_keys(array input [, mixed search_value[, bool strict]])\",\n        \"Return just the keys from the input array, optionally only for the specified search_value\"\n    ],\n    \"array_map\": [\n        \"array array_map(mixed callback, array input1 [, array input2 ,...])\",\n        \"Applies the callback to the elements in given arrays.\"\n    ],\n    \"array_merge\": [\n        \"array array_merge(array arr1, array arr2 [, array ...])\",\n        \"Merges elements from passed arrays into one array\"\n    ],\n    \"array_merge_recursive\": [\n        \"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively merges elements from passed arrays into one array\"\n    ],\n    \"array_multisort\": [\n        \"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\n        \"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"\n    ],\n    \"array_pad\": [\n        \"array array_pad(array input, int pad_size, mixed pad_value)\",\n        \"Returns a copy of input array padded with pad_value to size pad_size\"\n    ],\n    \"array_pop\": [\n        \"mixed array_pop(array stack)\",\n        \"Pops an element off the end of the array\"\n    ],\n    \"array_product\": [\n        \"mixed array_product(array input)\",\n        \"Returns the product of the array entries\"\n    ],\n    \"array_push\": [\n        \"int array_push(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the end of the array\"\n    ],\n    \"array_rand\": [\n        \"mixed array_rand(array input [, int num_req])\",\n        \"Return key/keys for random entry/entries in the array\"\n    ],\n    \"array_reduce\": [\n        \"mixed array_reduce(array input, mixed callback [, mixed initial])\",\n        \"Iteratively reduce the array to a single value via the callback.\"\n    ],\n    \"array_replace\": [\n        \"array array_replace(array arr1, array arr2 [, array ...])\",\n        \"Replaces elements from passed arrays into one array\"\n    ],\n    \"array_replace_recursive\": [\n        \"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively replaces elements from passed arrays into one array\"\n    ],\n    \"array_reverse\": [\n        \"array array_reverse(array input [, bool preserve keys])\",\n        \"Return input as a new array with the order of the entries reversed\"\n    ],\n    \"array_search\": [\n        \"mixed array_search(mixed needle, array haystack [, bool strict])\",\n        \"Searches the array for a given value and returns the corresponding key if successful\"\n    ],\n    \"array_shift\": [\n        \"mixed array_shift(array stack)\",\n        \"Pops an element off the beginning of the array\"\n    ],\n    \"array_slice\": [\n        \"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\n        \"Returns elements specified by offset and length\"\n    ],\n    \"array_splice\": [\n        \"array array_splice(array input, int offset [, int length [, array replacement]])\",\n        \"Removes the elements designated by offset and length and replace them with supplied array\"\n    ],\n    \"array_sum\": [\n        \"mixed array_sum(array input)\",\n        \"Returns the sum of the array entries\"\n    ],\n    \"array_udiff\": [\n        \"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"\n    ],\n    \"array_udiff_assoc\": [\n        \"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"\n    ],\n    \"array_udiff_uassoc\": [\n        \"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"\n    ],\n    \"array_uintersect\": [\n        \"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_assoc\": [\n        \"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_uassoc\": [\n        \"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"\n    ],\n    \"array_unique\": [\n        \"array array_unique(array input [, int sort_flags])\",\n        \"Removes duplicate values from array\"\n    ],\n    \"array_unshift\": [\n        \"int array_unshift(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the beginning of the array\"\n    ],\n    \"array_values\": [\n        \"array array_values(array input)\",\n        \"Return just the values from the input array\"\n    ],\n    \"array_walk\": [\n        \"bool array_walk(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function to every member of an array\"\n    ],\n    \"array_walk_recursive\": [\n        \"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function recursively to every member of an array\"\n    ],\n    \"arsort\": [\n        \"bool arsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order and maintain index association\"\n    ],\n    \"asin\": [\n        \"float asin(float number)\",\n        \"Returns the arc sine of the number in radians\"\n    ],\n    \"asinh\": [\n        \"float asinh(float number)\",\n        \"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"\n    ],\n    \"asort\": [\n        \"bool asort(array &array_arg [, int sort_flags])\",\n        \"Sort an array and maintain index association\"\n    ],\n    \"assert\": [\n        \"int assert(string|bool assertion)\",\n        \"Checks if assertion is false\"\n    ],\n    \"assert_options\": [\n        \"mixed assert_options(int what [, mixed value])\",\n        \"Set/get the various assert flags\"\n    ],\n    \"atan\": [\n        \"float atan(float number)\",\n        \"Returns the arc tangent of the number in radians\"\n    ],\n    \"atan2\": [\n        \"float atan2(float y, float x)\",\n        \"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"\n    ],\n    \"atanh\": [\n        \"float atanh(float number)\",\n        \"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"\n    ],\n    \"attachIterator\": [\n        \"void attachIterator(Iterator iterator[, mixed info])\",\n        \"Attach a new iterator\"\n    ],\n    \"base64_decode\": [\n        \"string base64_decode(string str[, bool strict])\",\n        \"Decodes string using MIME base64 algorithm\"\n    ],\n    \"base64_encode\": [\n        \"string base64_encode(string str)\",\n        \"Encodes string using MIME base64 algorithm\"\n    ],\n    \"base_convert\": [\n        \"string base_convert(string number, int frombase, int tobase)\",\n        \"Converts a number in a string from any base <= 36 to any base <= 36\"\n    ],\n    \"basename\": [\n        \"string basename(string path [, string suffix])\",\n        \"Returns the filename component of the path\"\n    ],\n    \"bcadd\": [\n        \"string bcadd(string left_operand, string right_operand [, int scale])\",\n        \"Returns the sum of two arbitrary precision numbers\"\n    ],\n    \"bccomp\": [\n        \"int bccomp(string left_operand, string right_operand [, int scale])\",\n        \"Compares two arbitrary precision numbers\"\n    ],\n    \"bcdiv\": [\n        \"string bcdiv(string left_operand, string right_operand [, int scale])\",\n        \"Returns the quotient of two arbitrary precision numbers (division)\"\n    ],\n    \"bcmod\": [\n        \"string bcmod(string left_operand, string right_operand)\",\n        \"Returns the modulus of the two arbitrary precision operands\"\n    ],\n    \"bcmul\": [\n        \"string bcmul(string left_operand, string right_operand [, int scale])\",\n        \"Returns the multiplication of two arbitrary precision numbers\"\n    ],\n    \"bcpow\": [\n        \"string bcpow(string x, string y [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another\"\n    ],\n    \"bcpowmod\": [\n        \"string bcpowmod(string x, string y, string mod [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"\n    ],\n    \"bcscale\": [\n        \"bool bcscale(int scale)\",\n        \"Sets default scale parameter for all bc math functions\"\n    ],\n    \"bcsqrt\": [\n        \"string bcsqrt(string operand [, int scale])\",\n        \"Returns the square root of an arbitray precision number\"\n    ],\n    \"bcsub\": [\n        \"string bcsub(string left_operand, string right_operand [, int scale])\",\n        \"Returns the difference between two arbitrary precision numbers\"\n    ],\n    \"bin2hex\": [\n        \"string bin2hex(string data)\",\n        \"Converts the binary representation of data to hex\"\n    ],\n    \"bind_textdomain_codeset\": [\n        \"string bind_textdomain_codeset (string domain, string codeset)\",\n        \"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"\n    ],\n    \"bindec\": [\n        \"int bindec(string binary_number)\",\n        \"Returns the decimal equivalent of the binary number\"\n    ],\n    \"bindtextdomain\": [\n        \"string bindtextdomain(string domain_name, string dir)\",\n        \"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"\n    ],\n    \"birdstep_autocommit\": [\n        \"bool birdstep_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_close\": [\n        \"bool birdstep_close(int id)\",\n        \"\"\n    ],\n    \"birdstep_commit\": [\n        \"bool birdstep_commit(int index)\",\n        \"\"\n    ],\n    \"birdstep_connect\": [\n        \"int birdstep_connect(string server, string user, string pass)\",\n        \"\"\n    ],\n    \"birdstep_exec\": [\n        \"int birdstep_exec(int index, string exec_str)\",\n        \"\"\n    ],\n    \"birdstep_fetch\": [\n        \"bool birdstep_fetch(int index)\",\n        \"\"\n    ],\n    \"birdstep_fieldname\": [\n        \"string birdstep_fieldname(int index, int col)\",\n        \"\"\n    ],\n    \"birdstep_fieldnum\": [\n        \"int birdstep_fieldnum(int index)\",\n        \"\"\n    ],\n    \"birdstep_freeresult\": [\n        \"bool birdstep_freeresult(int index)\",\n        \"\"\n    ],\n    \"birdstep_off_autocommit\": [\n        \"bool birdstep_off_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_result\": [\n        \"mixed birdstep_result(int index, mixed col)\",\n        \"\"\n    ],\n    \"birdstep_rollback\": [\n        \"bool birdstep_rollback(int index)\",\n        \"\"\n    ],\n    \"bzcompress\": [\n        \"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\n        \"Compresses a string into BZip2 encoded data\"\n    ],\n    \"bzdecompress\": [\n        \"string bzdecompress(string source [, int small])\",\n        \"Decompresses BZip2 compressed data\"\n    ],\n    \"bzerrno\": [\n        \"int bzerrno(resource bz)\",\n        \"Returns the error number\"\n    ],\n    \"bzerror\": [\n        \"array bzerror(resource bz)\",\n        \"Returns the error number and error string in an associative array\"\n    ],\n    \"bzerrstr\": [\n        \"string bzerrstr(resource bz)\",\n        \"Returns the error string\"\n    ],\n    \"bzopen\": [\n        \"resource bzopen(string|int file|fp, string mode)\",\n        \"Opens a new BZip2 stream\"\n    ],\n    \"bzread\": [\n        \"string bzread(resource bz[, int length])\",\n        \"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"\n    ],\n    \"cal_days_in_month\": [\n        \"int cal_days_in_month(int calendar, int month, int year)\",\n        \"Returns the number of days in a month for a given year and calendar\"\n    ],\n    \"cal_from_jd\": [\n        \"array cal_from_jd(int jd, int calendar)\",\n        \"Converts from Julian Day Count to a supported calendar and return extended information\"\n    ],\n    \"cal_info\": [\n        \"array cal_info([int calendar])\",\n        \"Returns information about a particular calendar\"\n    ],\n    \"cal_to_jd\": [\n        \"int cal_to_jd(int calendar, int month, int day, int year)\",\n        \"Converts from a supported calendar to Julian Day Count\"\n    ],\n    \"call_user_func\": [\n        \"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"call_user_func_array\": [\n        \"mixed call_user_func_array(string function_name, array parameters)\",\n        \"Call a user function which is the first parameter with the arguments contained in array\"\n    ],\n    \"call_user_method\": [\n        \"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\n        \"Call a user method on a specific object or class\"\n    ],\n    \"call_user_method_array\": [\n        \"mixed call_user_method_array(string method_name, mixed object, array params)\",\n        \"Call a user method on a specific object or class using a parameter array\"\n    ],\n    \"ceil\": [\n        \"float ceil(float number)\",\n        \"Returns the next highest integer value of the number\"\n    ],\n    \"chdir\": [\n        \"bool chdir(string directory)\",\n        \"Change the current directory\"\n    ],\n    \"checkdate\": [\n        \"bool checkdate(int month, int day, int year)\",\n        \"Returns true(1) if it is a valid date in gregorian calendar\"\n    ],\n    \"chgrp\": [\n        \"bool chgrp(string filename, mixed group)\",\n        \"Change file group\"\n    ],\n    \"chmod\": [\n        \"bool chmod(string filename, int mode)\",\n        \"Change file mode\"\n    ],\n    \"chown\": [\n        \"bool chown (string filename, mixed user)\",\n        \"Change file owner\"\n    ],\n    \"chr\": [\n        \"string chr(int ascii)\",\n        \"Converts ASCII code to a character\"\n    ],\n    \"chroot\": [\n        \"bool chroot(string directory)\",\n        \"Change root directory\"\n    ],\n    \"chunk_split\": [\n        \"string chunk_split(string str [, int chunklen [, string ending]])\",\n        \"Returns split line\"\n    ],\n    \"class_alias\": [\n        \"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\n        \"Creates an alias for user defined class\"\n    ],\n    \"class_exists\": [\n        \"bool class_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"class_implements\": [\n        \"array class_implements(mixed what [, bool autoload ])\",\n        \"Return all classes and interfaces implemented by SPL\"\n    ],\n    \"class_parents\": [\n        \"array class_parents(object instance [, boolean autoload = true])\",\n        \"Return an array containing the names of all parent classes\"\n    ],\n    \"clearstatcache\": [\n        \"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\n        \"Clear file stat cache\"\n    ],\n    \"closedir\": [\n        \"void closedir([resource dir_handle])\",\n        \"Close directory connection identified by the dir_handle\"\n    ],\n    \"closelog\": [\n        \"bool closelog(void)\",\n        \"Close connection to system logger\"\n    ],\n    \"collator_asort\": [\n        \"bool collator_asort( Collator $coll, array(string) $arr )\",\n        \"* Sort array using specified collator, maintaining index association.\"\n    ],\n    \"collator_compare\": [\n        \"int collator_compare( Collator $coll, string $str1, string $str2 )\",\n        \"* Compare two strings.\"\n    ],\n    \"collator_create\": [\n        \"Collator collator_create( string $locale )\",\n        \"* Create collator.\"\n    ],\n    \"collator_get_attribute\": [\n        \"int collator_get_attribute( Collator $coll, int $attr )\",\n        \"* Get collation attribute value.\"\n    ],\n    \"collator_get_error_code\": [\n        \"int collator_get_error_code( Collator $coll )\",\n        \"* Get collator's last error code.\"\n    ],\n    \"collator_get_error_message\": [\n        \"string collator_get_error_message( Collator $coll )\",\n        \"* Get text description for collator's last error code.\"\n    ],\n    \"collator_get_locale\": [\n        \"string collator_get_locale( Collator $coll, int $type )\",\n        \"* Gets the locale name of the collator.\"\n    ],\n    \"collator_get_sort_key\": [\n        \"bool collator_get_sort_key( Collator $coll, string $str )\",\n        \"* Get a sort key for a string from a Collator. }}}\"\n    ],\n    \"collator_get_strength\": [\n        \"int collator_get_strength(Collator coll)\",\n        \"* Returns the current collation strength.\"\n    ],\n    \"collator_set_attribute\": [\n        \"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\n        \"* Set collation attribute.\"\n    ],\n    \"collator_set_strength\": [\n        \"bool collator_set_strength(Collator coll, int strength)\",\n        \"* Set the collation strength.\"\n    ],\n    \"collator_sort\": [\n        \"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\n        \"* Sort array using specified collator.\"\n    ],\n    \"collator_sort_with_sort_keys\": [\n        \"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\n        \"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"\n    ],\n    \"com_create_guid\": [\n        \"string com_create_guid()\",\n        \"Generate a globally unique identifier (GUID)\"\n    ],\n    \"com_event_sink\": [\n        \"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\n        \"Connect events from a COM object to a PHP object\"\n    ],\n    \"com_get_active_object\": [\n        \"object com_get_active_object(string progid [, int code_page ])\",\n        \"Returns a handle to an already running instance of a COM object\"\n    ],\n    \"com_load_typelib\": [\n        \"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\n        \"Loads a Typelibrary and registers its constants\"\n    ],\n    \"com_message_pump\": [\n        \"bool com_message_pump([int timeoutms])\",\n        \"Process COM messages, sleeping for up to timeoutms milliseconds\"\n    ],\n    \"com_print_typeinfo\": [\n        \"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\n        \"Print out a PHP class definition for a dispatchable interface\"\n    ],\n    \"compact\": [\n        \"array compact(mixed var_names [, mixed ...])\",\n        \"Creates a hash containing variables and their values\"\n    ],\n    \"compose_locale\": [\n        \"static string compose_locale($array)\",\n        \"* Creates a locale by combining the parts of locale-ID passed  * }}}\"\n    ],\n    \"confirm_extname_compiled\": [\n        \"string confirm_extname_compiled(string arg)\",\n        \"Return a string to confirm that the module is compiled in\"\n    ],\n    \"connection_aborted\": [\n        \"int connection_aborted(void)\",\n        \"Returns true if client disconnected\"\n    ],\n    \"connection_status\": [\n        \"int connection_status(void)\",\n        \"Returns the connection status bitfield\"\n    ],\n    \"constant\": [\n        \"mixed constant(string const_name)\",\n        \"Given the name of a constant this function will return the constant's associated value\"\n    ],\n    \"convert_cyr_string\": [\n        \"string convert_cyr_string(string str, string from, string to)\",\n        \"Convert from one Cyrillic character set to another\"\n    ],\n    \"convert_uudecode\": [\n        \"string convert_uudecode(string data)\",\n        \"decode a uuencoded string\"\n    ],\n    \"convert_uuencode\": [\n        \"string convert_uuencode(string data)\",\n        \"uuencode a string\"\n    ],\n    \"copy\": [\n        \"bool copy(string source_file, string destination_file [, resource context])\",\n        \"Copy a file\"\n    ],\n    \"cos\": [\n        \"float cos(float number)\",\n        \"Returns the cosine of the number in radians\"\n    ],\n    \"cosh\": [\n        \"float cosh(float number)\",\n        \"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"\n    ],\n    \"count\": [\n        \"int count(mixed var [, int mode])\",\n        \"Count the number of elements in a variable (usually an array)\"\n    ],\n    \"count_chars\": [\n        \"mixed count_chars(string input [, int mode])\",\n        \"Returns info about what characters are used in input\"\n    ],\n    \"crc32\": [\n        \"string crc32(string str)\",\n        \"Calculate the crc32 polynomial of a string\"\n    ],\n    \"create_function\": [\n        \"string create_function(string args, string code)\",\n        \"Creates an anonymous function, and returns its name (funny, eh?)\"\n    ],\n    \"crypt\": [\n        \"string crypt(string str [, string salt])\",\n        \"Hash a string\"\n    ],\n    \"ctype_alnum\": [\n        \"bool ctype_alnum(mixed c)\",\n        \"Checks for alphanumeric character(s)\"\n    ],\n    \"ctype_alpha\": [\n        \"bool ctype_alpha(mixed c)\",\n        \"Checks for alphabetic character(s)\"\n    ],\n    \"ctype_cntrl\": [\n        \"bool ctype_cntrl(mixed c)\",\n        \"Checks for control character(s)\"\n    ],\n    \"ctype_digit\": [\n        \"bool ctype_digit(mixed c)\",\n        \"Checks for numeric character(s)\"\n    ],\n    \"ctype_graph\": [\n        \"bool ctype_graph(mixed c)\",\n        \"Checks for any printable character(s) except space\"\n    ],\n    \"ctype_lower\": [\n        \"bool ctype_lower(mixed c)\",\n        \"Checks for lowercase character(s)\"\n    ],\n    \"ctype_print\": [\n        \"bool ctype_print(mixed c)\",\n        \"Checks for printable character(s)\"\n    ],\n    \"ctype_punct\": [\n        \"bool ctype_punct(mixed c)\",\n        \"Checks for any printable character which is not whitespace or an alphanumeric character\"\n    ],\n    \"ctype_space\": [\n        \"bool ctype_space(mixed c)\",\n        \"Checks for whitespace character(s)\"\n    ],\n    \"ctype_upper\": [\n        \"bool ctype_upper(mixed c)\",\n        \"Checks for uppercase character(s)\"\n    ],\n    \"ctype_xdigit\": [\n        \"bool ctype_xdigit(mixed c)\",\n        \"Checks for character(s) representing a hexadecimal digit\"\n    ],\n    \"curl_close\": [\n        \"void curl_close(resource ch)\",\n        \"Close a cURL session\"\n    ],\n    \"curl_copy_handle\": [\n        \"resource curl_copy_handle(resource ch)\",\n        \"Copy a cURL handle along with all of it's preferences\"\n    ],\n    \"curl_errno\": [\n        \"int curl_errno(resource ch)\",\n        \"Return an integer containing the last error number\"\n    ],\n    \"curl_error\": [\n        \"string curl_error(resource ch)\",\n        \"Return a string contain the last error for the current session\"\n    ],\n    \"curl_exec\": [\n        \"bool curl_exec(resource ch)\",\n        \"Perform a cURL session\"\n    ],\n    \"curl_getinfo\": [\n        \"mixed curl_getinfo(resource ch [, int option])\",\n        \"Get information regarding a specific transfer\"\n    ],\n    \"curl_init\": [\n        \"resource curl_init([string url])\",\n        \"Initialize a cURL session\"\n    ],\n    \"curl_multi_add_handle\": [\n        \"int curl_multi_add_handle(resource mh, resource ch)\",\n        \"Add a normal cURL handle to a cURL multi handle\"\n    ],\n    \"curl_multi_close\": [\n        \"void curl_multi_close(resource mh)\",\n        \"Close a set of cURL handles\"\n    ],\n    \"curl_multi_exec\": [\n        \"int curl_multi_exec(resource mh, int &still_running)\",\n        \"Run the sub-connections of the current cURL handle\"\n    ],\n    \"curl_multi_getcontent\": [\n        \"string curl_multi_getcontent(resource ch)\",\n        \"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"\n    ],\n    \"curl_multi_info_read\": [\n        \"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\n        \"Get information about the current transfers\"\n    ],\n    \"curl_multi_init\": [\n        \"resource curl_multi_init(void)\",\n        \"Returns a new cURL multi handle\"\n    ],\n    \"curl_multi_remove_handle\": [\n        \"int curl_multi_remove_handle(resource mh, resource ch)\",\n        \"Remove a multi handle from a set of cURL handles\"\n    ],\n    \"curl_multi_select\": [\n        \"int curl_multi_select(resource mh[, double timeout])\",\n        \"Get all the sockets associated with the cURL extension, which can then be \\\"selected\\\"\"\n    ],\n    \"curl_setopt\": [\n        \"bool curl_setopt(resource ch, int option, mixed value)\",\n        \"Set an option for a cURL transfer\"\n    ],\n    \"curl_setopt_array\": [\n        \"bool curl_setopt_array(resource ch, array options)\",\n        \"Set an array of option for a cURL transfer\"\n    ],\n    \"curl_version\": [\n        \"array curl_version([int version])\",\n        \"Return cURL version information.\"\n    ],\n    \"current\": [\n        \"mixed current(array array_arg)\",\n        \"Return the element currently pointed to by the internal array pointer\"\n    ],\n    \"date\": [\n        \"string date(string format [, long timestamp])\",\n        \"Format a local date/time\"\n    ],\n    \"date_add\": [\n        \"DateTime date_add(DateTime object, DateInterval interval)\",\n        \"Adds an interval to the current date in object.\"\n    ],\n    \"date_create\": [\n        \"DateTime date_create([string time[, DateTimeZone object]])\",\n        \"Returns new DateTime object\"\n    ],\n    \"date_create_from_format\": [\n        \"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\n        \"Returns new DateTime object formatted according to the specified format\"\n    ],\n    \"date_date_set\": [\n        \"DateTime date_date_set(DateTime object, long year, long month, long day)\",\n        \"Sets the date.\"\n    ],\n    \"date_default_timezone_get\": [\n        \"string date_default_timezone_get()\",\n        \"Gets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_default_timezone_set\": [\n        \"bool date_default_timezone_set(string timezone_identifier)\",\n        \"Sets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_diff\": [\n        \"DateInterval date_diff(DateTime object [, bool absolute])\",\n        \"Returns the difference between two DateTime objects.\"\n    ],\n    \"date_format\": [\n        \"string date_format(DateTime object, string format)\",\n        \"Returns date formatted according to given format\"\n    ],\n    \"date_get_last_errors\": [\n        \"array date_get_last_errors()\",\n        \"Returns the warnings and errors found while parsing a date/time string.\"\n    ],\n    \"date_interval_create_from_date_string\": [\n        \"DateInterval date_interval_create_from_date_string(string time)\",\n        \"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"\n    ],\n    \"date_interval_format\": [\n        \"string date_interval_format(DateInterval object, string format)\",\n        \"Formats the interval.\"\n    ],\n    \"date_isodate_set\": [\n        \"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\n        \"Sets the ISO date.\"\n    ],\n    \"date_modify\": [\n        \"DateTime date_modify(DateTime object, string modify)\",\n        \"Alters the timestamp.\"\n    ],\n    \"date_offset_get\": [\n        \"long date_offset_get(DateTime object)\",\n        \"Returns the DST offset.\"\n    ],\n    \"date_parse\": [\n        \"array date_parse(string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_parse_from_format\": [\n        \"array date_parse_from_format(string format, string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_sub\": [\n        \"DateTime date_sub(DateTime object, DateInterval interval)\",\n        \"Subtracts an interval to the current date in object.\"\n    ],\n    \"date_sun_info\": [\n        \"array date_sun_info(long time, float latitude, float longitude)\",\n        \"Returns an array with information about sun set/rise and twilight begin/end\"\n    ],\n    \"date_sunrise\": [\n        \"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunrise for a given day and location\"\n    ],\n    \"date_sunset\": [\n        \"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunset for a given day and location\"\n    ],\n    \"date_time_set\": [\n        \"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\n        \"Sets the time.\"\n    ],\n    \"date_timestamp_get\": [\n        \"long date_timestamp_get(DateTime object)\",\n        \"Gets the Unix timestamp.\"\n    ],\n    \"date_timestamp_set\": [\n        \"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\n        \"Sets the date and time based on an Unix timestamp.\"\n    ],\n    \"date_timezone_get\": [\n        \"DateTimeZone date_timezone_get(DateTime object)\",\n        \"Return new DateTimeZone object relative to give DateTime\"\n    ],\n    \"date_timezone_set\": [\n        \"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\n        \"Sets the timezone for the DateTime object.\"\n    ],\n    \"datefmt_create\": [\n        \"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\n        \"* Create formatter.\"\n    ],\n    \"datefmt_format\": [\n        \"string datefmt_format( [mixed]int $args or array $args )\",\n        \"* Format the time value as a string. }}}\"\n    ],\n    \"datefmt_get_calendar\": [\n        \"string datefmt_get_calendar( IntlDateFormatter $mf )\",\n        \"* Get formatter calendar.\"\n    ],\n    \"datefmt_get_datetype\": [\n        \"string datefmt_get_datetype( IntlDateFormatter $mf )\",\n        \"* Get formatter datetype.\"\n    ],\n    \"datefmt_get_error_code\": [\n        \"int datefmt_get_error_code( IntlDateFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"datefmt_get_error_message\": [\n        \"string datefmt_get_error_message( IntlDateFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"datefmt_get_locale\": [\n        \"string datefmt_get_locale(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_get_pattern\": [\n        \"string datefmt_get_pattern( IntlDateFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"datefmt_get_timetype\": [\n        \"string datefmt_get_timetype( IntlDateFormatter $mf )\",\n        \"* Get formatter timetype.\"\n    ],\n    \"datefmt_get_timezone_id\": [\n        \"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\n        \"* Get formatter timezone_id.\"\n    ],\n    \"datefmt_isLenient\": [\n        \"string datefmt_isLenient(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_localtime\": [\n        \"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\n        \"* Parse the string $value to a localtime array  }}}\"\n    ],\n    \"datefmt_parse\": [\n        \"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\n        \"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"\n    ],\n    \"datefmt_setLenient\": [\n        \"string datefmt_setLenient(IntlDateFormatter $mf)\",\n        \"* Set formatter lenient.\"\n    ],\n    \"datefmt_set_calendar\": [\n        \"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\n        \"* Set formatter calendar.\"\n    ],\n    \"datefmt_set_pattern\": [\n        \"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"datefmt_set_timezone_id\": [\n        \"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\n        \"* Set formatter timezone_id.\"\n    ],\n    \"dba_close\": [\n        \"void dba_close(resource handle)\",\n        \"Closes database\"\n    ],\n    \"dba_delete\": [\n        \"bool dba_delete(string key, resource handle)\",\n        \"Deletes the entry associated with key    If inifile: remove all other key lines\"\n    ],\n    \"dba_exists\": [\n        \"bool dba_exists(string key, resource handle)\",\n        \"Checks, if the specified key exists\"\n    ],\n    \"dba_fetch\": [\n        \"string dba_fetch(string key, [int skip ,] resource handle)\",\n        \"Fetches the data associated with key\"\n    ],\n    \"dba_firstkey\": [\n        \"string dba_firstkey(resource handle)\",\n        \"Resets the internal key pointer and returns the first key\"\n    ],\n    \"dba_handlers\": [\n        \"array dba_handlers([bool full_info])\",\n        \"List configured database handlers\"\n    ],\n    \"dba_insert\": [\n        \"bool dba_insert(string key, string value, resource handle)\",\n        \"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"\n    ],\n    \"dba_key_split\": [\n        \"array|false dba_key_split(string key)\",\n        \"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"\n    ],\n    \"dba_list\": [\n        \"array dba_list()\",\n        \"List opened databases\"\n    ],\n    \"dba_nextkey\": [\n        \"string dba_nextkey(resource handle)\",\n        \"Returns the next key\"\n    ],\n    \"dba_open\": [\n        \"resource dba_open(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode\"\n    ],\n    \"dba_optimize\": [\n        \"bool dba_optimize(resource handle)\",\n        \"Optimizes (e.g. clean up, vacuum) database\"\n    ],\n    \"dba_popen\": [\n        \"resource dba_popen(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode persistently\"\n    ],\n    \"dba_replace\": [\n        \"bool dba_replace(string key, string value, resource handle)\",\n        \"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"\n    ],\n    \"dba_sync\": [\n        \"bool dba_sync(resource handle)\",\n        \"Synchronizes database\"\n    ],\n    \"dcgettext\": [\n        \"string dcgettext(string domain_name, string msgid, long category)\",\n        \"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"\n    ],\n    \"dcngettext\": [\n        \"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\n        \"Plural version of dcgettext()\"\n    ],\n    \"debug_backtrace\": [\n        \"array debug_backtrace([bool provide_object])\",\n        \"Return backtrace as array\"\n    ],\n    \"debug_print_backtrace\": [\n        \"void debug_print_backtrace(void) */\",\n        \"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"\n    ],\n    \"dom_document_relaxNG_validate_xml\": [\n        \"boolean dom_document_relaxNG_validate_xml(string source); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"\n    ],\n    \"dom_document_rename_node\": [\n        \"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"\n    ],\n    \"dom_document_save\": [\n        \"int dom_document_save(string file);\",\n        \"Convenience method to save to file\"\n    ],\n    \"dom_document_save_html\": [\n        \"string dom_document_save_html();\",\n        \"Convenience method to output as html\"\n    ],\n    \"dom_document_save_html_file\": [\n        \"int dom_document_save_html_file(string file);\",\n        \"Convenience method to save to file as html\"\n    ],\n    \"dom_document_savexml\": [\n        \"string dom_document_savexml([node n]);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"\n    ],\n    \"dom_document_schema_validate\": [\n        \"boolean dom_document_schema_validate(string source); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"\n    ],\n    \"dom_document_schema_validate_file\": [\n        \"boolean dom_document_schema_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"\n    ],\n    \"dom_document_validate\": [\n        \"boolean dom_document_validate();\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_xinclude\": [\n        \"int dom_document_xinclude([int options])\",\n        \"Substitutues xincludes in a DomDocument\"\n    ],\n    \"dom_domconfiguration_can_set_parameter\": [\n        \"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"\n    ],\n    \"dom_domconfiguration_get_parameter\": [\n        \"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"\n    ],\n    \"dom_domconfiguration_set_parameter\": [\n        \"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"\n    ],\n    \"dom_domerrorhandler_handle_error\": [\n        \"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"\n    ],\n    \"dom_domimplementation_create_document\": [\n        \"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_create_document_type\": [\n        \"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_get_feature\": [\n        \"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_domimplementation_has_feature\": [\n        \"boolean dom_domimplementation_has_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"\n    ],\n    \"dom_domimplementationlist_item\": [\n        \"domdomimplementation dom_domimplementationlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementation\": [\n        \"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementations\": [\n        \"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"\n    ],\n    \"dom_domstringlist_item\": [\n        \"domstring dom_domstringlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"\n    ],\n    \"dom_element_get_attribute\": [\n        \"string dom_element_get_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"\n    ],\n    \"dom_element_get_attribute_node\": [\n        \"DOMAttr dom_element_get_attribute_node(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"\n    ],\n    \"dom_element_get_attribute_node_ns\": [\n        \"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_attribute_ns\": [\n        \"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"\n    ],\n    \"dom_element_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute\": [\n        \"boolean dom_element_has_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute_ns\": [\n        \"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_remove_attribute\": [\n        \"void dom_element_remove_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"\n    ],\n    \"dom_element_remove_attribute_node\": [\n        \"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"\n    ],\n    \"dom_element_remove_attribute_ns\": [\n        \"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute\": [\n        \"void dom_element_set_attribute(string name, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"\n    ],\n    \"dom_element_set_attribute_node\": [\n        \"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"\n    ],\n    \"dom_element_set_attribute_node_ns\": [\n        \"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute_ns\": [\n        \"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_id_attribute\": [\n        \"void dom_element_set_id_attribute(string name, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_node\": [\n        \"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_ns\": [\n        \"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"\n    ],\n    \"dom_import_simplexml\": [\n        \"somNode dom_import_simplexml(sxeobject node)\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"dom_namednodemap_get_named_item\": [\n        \"DOMNode dom_namednodemap_get_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"\n    ],\n    \"dom_namednodemap_get_named_item_ns\": [\n        \"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_item\": [\n        \"DOMNode dom_namednodemap_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item\": [\n        \"DOMNode dom_namednodemap_remove_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item_ns\": [\n        \"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_set_named_item\": [\n        \"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"\n    ],\n    \"dom_namednodemap_set_named_item_ns\": [\n        \"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namelist_get_name\": [\n        \"string dom_namelist_get_name(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"\n    ],\n    \"dom_namelist_get_namespace_uri\": [\n        \"string dom_namelist_get_namespace_uri(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"\n    ],\n    \"dom_node_append_child\": [\n        \"DomNode dom_node_append_child(DomNode newChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"\n    ],\n    \"dom_node_clone_node\": [\n        \"DomNode dom_node_clone_node(boolean deep);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"\n    ],\n    \"dom_node_compare_document_position\": [\n        \"short dom_node_compare_document_position(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"\n    ],\n    \"dom_node_get_feature\": [\n        \"DomNode dom_node_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_node_get_user_data\": [\n        \"mixed dom_node_get_user_data(string key);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"\n    ],\n    \"dom_node_has_attributes\": [\n        \"boolean dom_node_has_attributes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"\n    ],\n    \"dom_node_has_child_nodes\": [\n        \"boolean dom_node_has_child_nodes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"\n    ],\n    \"dom_node_insert_before\": [\n        \"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"\n    ],\n    \"dom_node_is_default_namespace\": [\n        \"boolean dom_node_is_default_namespace(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"\n    ],\n    \"dom_node_is_equal_node\": [\n        \"boolean dom_node_is_equal_node(DomNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_same_node\": [\n        \"boolean dom_node_is_same_node(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_supported\": [\n        \"boolean dom_node_is_supported(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"\n    ],\n    \"dom_node_lookup_namespace_uri\": [\n        \"string dom_node_lookup_namespace_uri(string prefix);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"\n    ],\n    \"dom_node_lookup_prefix\": [\n        \"string dom_node_lookup_prefix(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"\n    ],\n    \"dom_node_normalize\": [\n        \"void dom_node_normalize();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"\n    ],\n    \"dom_node_remove_child\": [\n        \"DomNode dom_node_remove_child(DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"\n    ],\n    \"dom_node_replace_child\": [\n        \"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"\n    ],\n    \"dom_node_set_user_data\": [\n        \"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"\n    ],\n    \"dom_nodelist_item\": [\n        \"DOMNode dom_nodelist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"\n    ],\n    \"dom_string_extend_find_offset16\": [\n        \"int dom_string_extend_find_offset16(int offset32);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"\n    ],\n    \"dom_string_extend_find_offset32\": [\n        \"int dom_string_extend_find_offset32(int offset16);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"\n    ],\n    \"dom_text_is_whitespace_in_element_content\": [\n        \"boolean dom_text_is_whitespace_in_element_content();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"\n    ],\n    \"dom_text_replace_whole_text\": [\n        \"DOMText dom_text_replace_whole_text(string content);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"\n    ],\n    \"dom_text_split_text\": [\n        \"DOMText dom_text_split_text(int offset);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"\n    ],\n    \"dom_userdatahandler_handle\": [\n        \"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"\n    ],\n    \"dom_xpath_evaluate\": [\n        \"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"\n    ],\n    \"dom_xpath_query\": [\n        \"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"\n    ],\n    \"dom_xpath_register_ns\": [\n        \"boolean dom_xpath_register_ns(string prefix, string uri); */\",\n        \"PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Oss\\\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid XPath Context\\\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}\"\n    ],\n    \"dom_xpath_register_php_functions\": [\n        \"void dom_xpath_register_php_functions() */\",\n        \"PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"a\\\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions\"\n    ],\n    \"each\": [\n        \"array each(array arr)\",\n        \"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"\n    ],\n    \"easter_date\": [\n        \"int easter_date([int year])\",\n        \"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"\n    ],\n    \"easter_days\": [\n        \"int easter_days([int year, [int method]])\",\n        \"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"\n    ],\n    \"echo\": [\n        \"void echo(string arg1 [, string ...])\",\n        \"Output one or more strings\"\n    ],\n    \"empty\": [\n        \"bool empty( mixed var )\",\n        \"Determine whether a variable is empty\"\n    ],\n    \"enchant_broker_describe\": [\n        \"array enchant_broker_describe(resource broker)\",\n        \"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"\n    ],\n    \"enchant_broker_dict_exists\": [\n        \"bool enchant_broker_dict_exists(resource broker, string tag)\",\n        \"Whether a dictionary exists or not. Using non-empty tag\"\n    ],\n    \"enchant_broker_free\": [\n        \"boolean enchant_broker_free(resource broker)\",\n        \"Destroys the broker object and its dictionnaries\"\n    ],\n    \"enchant_broker_free_dict\": [\n        \"resource enchant_broker_free_dict(resource dict)\",\n        \"Free the dictionary resource\"\n    ],\n    \"enchant_broker_get_dict_path\": [\n        \"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\n        \"Get the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_get_error\": [\n        \"string enchant_broker_get_error(resource broker)\",\n        \"Returns the last error of the broker\"\n    ],\n    \"enchant_broker_init\": [\n        \"resource enchant_broker_init()\",\n        \"create a new broker object capable of requesting\"\n    ],\n    \"enchant_broker_list_dicts\": [\n        \"string enchant_broker_list_dicts(resource broker)\",\n        \"Lists the dictionaries available for the given broker\"\n    ],\n    \"enchant_broker_request_dict\": [\n        \"resource enchant_broker_request_dict(resource broker, string tag)\",\n        \"create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\\\"en_US\\\", \\\"de_DE\\\", ...)\"\n    ],\n    \"enchant_broker_request_pwl_dict\": [\n        \"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\n        \"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"\n    ],\n    \"enchant_broker_set_dict_path\": [\n        \"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\n        \"Set the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_set_ordering\": [\n        \"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\n        \"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"\n    ],\n    \"enchant_dict_add_to_personal\": [\n        \"void enchant_dict_add_to_personal(resource dict, string word)\",\n        \"add 'word' to personal word list\"\n    ],\n    \"enchant_dict_add_to_session\": [\n        \"void enchant_dict_add_to_session(resource dict, string word)\",\n        \"add 'word' to this spell-checking session\"\n    ],\n    \"enchant_dict_check\": [\n        \"bool enchant_dict_check(resource dict, string word)\",\n        \"If the word is correctly spelled return true, otherwise return false\"\n    ],\n    \"enchant_dict_describe\": [\n        \"array enchant_dict_describe(resource dict)\",\n        \"Describes an individual dictionary 'dict'\"\n    ],\n    \"enchant_dict_get_error\": [\n        \"string enchant_dict_get_error(resource dict)\",\n        \"Returns the last error of the current spelling-session\"\n    ],\n    \"enchant_dict_is_in_session\": [\n        \"bool enchant_dict_is_in_session(resource dict, string word)\",\n        \"whether or not 'word' exists in this spelling-session\"\n    ],\n    \"enchant_dict_quick_check\": [\n        \"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\n        \"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"\n    ],\n    \"enchant_dict_store_replacement\": [\n        \"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\n        \"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"\n    ],\n    \"enchant_dict_suggest\": [\n        \"array enchant_dict_suggest(resource dict, string word)\",\n        \"Will return a list of values if any of those pre-conditions are not met.\"\n    ],\n    \"end\": [\n        \"mixed end(array array_arg)\",\n        \"Advances array argument's internal pointer to the last element and return it\"\n    ],\n    \"ereg\": [\n        \"int ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match\"\n    ],\n    \"ereg_replace\": [\n        \"string ereg_replace(string pattern, string replacement, string string)\",\n        \"Replace regular expression\"\n    ],\n    \"eregi\": [\n        \"int eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match\"\n    ],\n    \"eregi_replace\": [\n        \"string eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression\"\n    ],\n    \"error_get_last\": [\n        \"array error_get_last()\",\n        \"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"\n    ],\n    \"error_log\": [\n        \"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\n        \"Send an error message somewhere\"\n    ],\n    \"error_reporting\": [\n        \"int error_reporting([int new_error_level])\",\n        \"Return the current error_reporting level, and if an argument was passed - change to the new level\"\n    ],\n    \"escapeshellarg\": [\n        \"string escapeshellarg(string arg)\",\n        \"Quote and escape an argument for use in a shell command\"\n    ],\n    \"escapeshellcmd\": [\n        \"string escapeshellcmd(string command)\",\n        \"Escape shell metacharacters\"\n    ],\n    \"exec\": [\n        \"string exec(string command [, array &output [, int &return_value]])\",\n        \"Execute an external program\"\n    ],\n    \"exif_imagetype\": [\n        \"int exif_imagetype(string imagefile)\",\n        \"Get the type of an image\"\n    ],\n    \"exif_read_data\": [\n        \"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\n        \"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"\n    ],\n    \"exif_tagname\": [\n        \"string exif_tagname(index)\",\n        \"Get headername for index or false if not defined\"\n    ],\n    \"exif_thumbnail\": [\n        \"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\n        \"Reads the embedded thumbnail\"\n    ],\n    \"exit\": [\n        \"void exit([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"exp\": [\n        \"float exp(float number)\",\n        \"Returns e raised to the power of the number\"\n    ],\n    \"explode\": [\n        \"array explode(string separator, string str [, int limit])\",\n        \"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"\n    ],\n    \"expm1\": [\n        \"float expm1(float number)\",\n        \"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"extension_loaded\": [\n        \"bool extension_loaded(string extension_name)\",\n        \"Returns true if the named extension is loaded\"\n    ],\n    \"extract\": [\n        \"int extract(array var_array [, int extract_type [, string prefix]])\",\n        \"Imports variables into symbol table from an array\"\n    ],\n    \"ezmlm_hash\": [\n        \"int ezmlm_hash(string addr)\",\n        \"Calculate EZMLM list hash value.\"\n    ],\n    \"fclose\": [\n        \"bool fclose(resource fp)\",\n        \"Close an open file pointer\"\n    ],\n    \"feof\": [\n        \"bool feof(resource fp)\",\n        \"Test for end-of-file on a file pointer\"\n    ],\n    \"fflush\": [\n        \"bool fflush(resource fp)\",\n        \"Flushes output\"\n    ],\n    \"fgetc\": [\n        \"string fgetc(resource fp)\",\n        \"Get a character from file pointer\"\n    ],\n    \"fgetcsv\": [\n        \"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\n        \"Get line from file pointer and parse for CSV fields\"\n    ],\n    \"fgets\": [\n        \"string fgets(resource fp[, int length])\",\n        \"Get a line from file pointer\"\n    ],\n    \"fgetss\": [\n        \"string fgetss(resource fp [, int length [, string allowable_tags]])\",\n        \"Get a line from file pointer and strip HTML tags\"\n    ],\n    \"file\": [\n        \"array file(string filename [, int flags[, resource context]])\",\n        \"Read entire file into an array\"\n    ],\n    \"file_exists\": [\n        \"bool file_exists(string filename)\",\n        \"Returns true if filename exists\"\n    ],\n    \"file_get_contents\": [\n        \"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\n        \"Read the entire file into a string\"\n    ],\n    \"file_put_contents\": [\n        \"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\n        \"Write/Create a file with contents data and return the number of bytes written\"\n    ],\n    \"fileatime\": [\n        \"int fileatime(string filename)\",\n        \"Get last access time of file\"\n    ],\n    \"filectime\": [\n        \"int filectime(string filename)\",\n        \"Get inode modification time of file\"\n    ],\n    \"filegroup\": [\n        \"int filegroup(string filename)\",\n        \"Get file group\"\n    ],\n    \"fileinode\": [\n        \"int fileinode(string filename)\",\n        \"Get file inode\"\n    ],\n    \"filemtime\": [\n        \"int filemtime(string filename)\",\n        \"Get last modification time of file\"\n    ],\n    \"fileowner\": [\n        \"int fileowner(string filename)\",\n        \"Get file owner\"\n    ],\n    \"fileperms\": [\n        \"int fileperms(string filename)\",\n        \"Get file permissions\"\n    ],\n    \"filesize\": [\n        \"int filesize(string filename)\",\n        \"Get file size\"\n    ],\n    \"filetype\": [\n        \"string filetype(string filename)\",\n        \"Get file type\"\n    ],\n    \"filter_has_var\": [\n        \"mixed filter_has_var(constant type, string variable_name)\",\n        \"* Returns true if the variable with the name 'name' exists in source.\"\n    ],\n    \"filter_input\": [\n        \"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\n        \"* Returns the filtered variable 'name'* from source `type`.\"\n    ],\n    \"filter_input_array\": [\n        \"mixed filter_input_array(constant type, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"filter_var\": [\n        \"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\n        \"* Returns the filtered version of the vriable.\"\n    ],\n    \"filter_var_array\": [\n        \"mixed filter_var_array(array data, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"finfo_buffer\": [\n        \"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\n        \"Return infromation about a string buffer.\"\n    ],\n    \"finfo_close\": [\n        \"resource finfo_close(resource finfo)\",\n        \"Close fileinfo resource.\"\n    ],\n    \"finfo_file\": [\n        \"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\n        \"Return information about a file.\"\n    ],\n    \"finfo_open\": [\n        \"resource finfo_open([int options [, string arg]])\",\n        \"Create a new fileinfo resource.\"\n    ],\n    \"finfo_set_flags\": [\n        \"bool finfo_set_flags(resource finfo, int options)\",\n        \"Set libmagic configuration options.\"\n    ],\n    \"floatval\": [\n        \"float floatval(mixed var)\",\n        \"Get the float value of a variable\"\n    ],\n    \"flock\": [\n        \"bool flock(resource fp, int operation [, int &wouldblock])\",\n        \"Portable file locking\"\n    ],\n    \"floor\": [\n        \"float floor(float number)\",\n        \"Returns the next lowest integer value from the number\"\n    ],\n    \"flush\": [\n        \"void flush(void)\",\n        \"Flush the output buffer\"\n    ],\n    \"fmod\": [\n        \"float fmod(float x, float y)\",\n        \"Returns the remainder of dividing x by y as a float\"\n    ],\n    \"fnmatch\": [\n        \"bool fnmatch(string pattern, string filename [, int flags])\",\n        \"Match filename against pattern\"\n    ],\n    \"fopen\": [\n        \"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\n        \"Open a file or a URL and return a file pointer\"\n    ],\n    \"forward_static_call\": [\n        \"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"fpassthru\": [\n        \"int fpassthru(resource fp)\",\n        \"Output all remaining data from a file pointer\"\n    ],\n    \"fprintf\": [\n        \"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"fputcsv\": [\n        \"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\n        \"Format line as CSV and write to file pointer\"\n    ],\n    \"fread\": [\n        \"string fread(resource fp, int length)\",\n        \"Binary-safe file read\"\n    ],\n    \"frenchtojd\": [\n        \"int frenchtojd(int month, int day, int year)\",\n        \"Converts a french republic calendar date to julian day count\"\n    ],\n    \"fscanf\": [\n        \"mixed fscanf(resource stream, string format [, string ...])\",\n        \"Implements a mostly ANSI compatible fscanf()\"\n    ],\n    \"fseek\": [\n        \"int fseek(resource fp, int offset [, int whence])\",\n        \"Seek on a file pointer\"\n    ],\n    \"fsockopen\": [\n        \"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open Internet or Unix domain socket connection\"\n    ],\n    \"fstat\": [\n        \"array fstat(resource fp)\",\n        \"Stat() on a filehandle\"\n    ],\n    \"ftell\": [\n        \"int ftell(resource fp)\",\n        \"Get file pointer's read/write position\"\n    ],\n    \"ftok\": [\n        \"int ftok(string pathname, string proj)\",\n        \"Convert a pathname and a project identifier to a System V IPC key\"\n    ],\n    \"ftp_alloc\": [\n        \"bool ftp_alloc(resource stream, int size[, &response])\",\n        \"Attempt to allocate space on the remote FTP server\"\n    ],\n    \"ftp_cdup\": [\n        \"bool ftp_cdup(resource stream)\",\n        \"Changes to the parent directory\"\n    ],\n    \"ftp_chdir\": [\n        \"bool ftp_chdir(resource stream, string directory)\",\n        \"Changes directories\"\n    ],\n    \"ftp_chmod\": [\n        \"int ftp_chmod(resource stream, int mode, string filename)\",\n        \"Sets permissions on a file\"\n    ],\n    \"ftp_close\": [\n        \"bool ftp_close(resource stream)\",\n        \"Closes the FTP stream\"\n    ],\n    \"ftp_connect\": [\n        \"resource ftp_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP stream\"\n    ],\n    \"ftp_delete\": [\n        \"bool ftp_delete(resource stream, string file)\",\n        \"Deletes a file\"\n    ],\n    \"ftp_exec\": [\n        \"bool ftp_exec(resource stream, string command)\",\n        \"Requests execution of a program on the FTP server\"\n    ],\n    \"ftp_fget\": [\n        \"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server and writes it to an open file\"\n    ],\n    \"ftp_fput\": [\n        \"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server\"\n    ],\n    \"ftp_get\": [\n        \"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server and writes it to a local file\"\n    ],\n    \"ftp_get_option\": [\n        \"mixed ftp_get_option(resource stream, int option)\",\n        \"Gets an FTP option\"\n    ],\n    \"ftp_login\": [\n        \"bool ftp_login(resource stream, string username, string password)\",\n        \"Logs into the FTP server\"\n    ],\n    \"ftp_mdtm\": [\n        \"int ftp_mdtm(resource stream, string filename)\",\n        \"Returns the last modification time of the file, or -1 on error\"\n    ],\n    \"ftp_mkdir\": [\n        \"string ftp_mkdir(resource stream, string directory)\",\n        \"Creates a directory and returns the absolute path for the new directory or false on error\"\n    ],\n    \"ftp_nb_continue\": [\n        \"int ftp_nb_continue(resource stream)\",\n        \"Continues retrieving/sending a file nbronously\"\n    ],\n    \"ftp_nb_fget\": [\n        \"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server asynchronly and writes it to an open file\"\n    ],\n    \"ftp_nb_fput\": [\n        \"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server nbronly\"\n    ],\n    \"ftp_nb_get\": [\n        \"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server nbhronly and writes it to a local file\"\n    ],\n    \"ftp_nb_put\": [\n        \"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_nlist\": [\n        \"array ftp_nlist(resource stream, string directory)\",\n        \"Returns an array of filenames in the given directory\"\n    ],\n    \"ftp_pasv\": [\n        \"bool ftp_pasv(resource stream, bool pasv)\",\n        \"Turns passive mode on or off\"\n    ],\n    \"ftp_put\": [\n        \"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_pwd\": [\n        \"string ftp_pwd(resource stream)\",\n        \"Returns the present working directory\"\n    ],\n    \"ftp_raw\": [\n        \"array ftp_raw(resource stream, string command)\",\n        \"Sends a literal command to the FTP server\"\n    ],\n    \"ftp_rawlist\": [\n        \"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\n        \"Returns a detailed listing of a directory as an array of output lines\"\n    ],\n    \"ftp_rename\": [\n        \"bool ftp_rename(resource stream, string src, string dest)\",\n        \"Renames the given file to a new path\"\n    ],\n    \"ftp_rmdir\": [\n        \"bool ftp_rmdir(resource stream, string directory)\",\n        \"Removes a directory\"\n    ],\n    \"ftp_set_option\": [\n        \"bool ftp_set_option(resource stream, int option, mixed value)\",\n        \"Sets an FTP option\"\n    ],\n    \"ftp_site\": [\n        \"bool ftp_site(resource stream, string cmd)\",\n        \"Sends a SITE command to the server\"\n    ],\n    \"ftp_size\": [\n        \"int ftp_size(resource stream, string filename)\",\n        \"Returns the size of the file, or -1 on error\"\n    ],\n    \"ftp_ssl_connect\": [\n        \"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP-SSL stream\"\n    ],\n    \"ftp_systype\": [\n        \"string ftp_systype(resource stream)\",\n        \"Returns the system type identifier\"\n    ],\n    \"ftruncate\": [\n        \"bool ftruncate(resource fp, int size)\",\n        \"Truncate file to 'size' length\"\n    ],\n    \"func_get_arg\": [\n        \"mixed func_get_arg(int arg_num)\",\n        \"Get the $arg_num'th argument that was passed to the function\"\n    ],\n    \"func_get_args\": [\n        \"array func_get_args()\",\n        \"Get an array of the arguments that were passed to the function\"\n    ],\n    \"func_num_args\": [\n        \"int func_num_args(void)\",\n        \"Get the number of arguments that were passed to the function\"\n    ],\n    \"function \": [\"\", \"\"],\n    \"foreach \": [\"\", \"\"],\n    \"function_exists\": [\n        \"bool function_exists(string function_name)\",\n        \"Checks if the function exists\"\n    ],\n    \"fwrite\": [\n        \"int fwrite(resource fp, string str [, int length])\",\n        \"Binary-safe file write\"\n    ],\n    \"gc_collect_cycles\": [\n        \"int gc_collect_cycles(void)\",\n        \"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"\n    ],\n    \"gc_disable\": [\n        \"void gc_disable(void)\",\n        \"Deactivates the circular reference collector\"\n    ],\n    \"gc_enable\": [\n        \"void gc_enable(void)\",\n        \"Activates the circular reference collector\"\n    ],\n    \"gc_enabled\": [\n        \"void gc_enabled(void)\",\n        \"Returns status of the circular reference collector\"\n    ],\n    \"gd_info\": [\n        \"array gd_info()\",\n        \"\"\n    ],\n    \"getKeywords\": [\n        \"static array getKeywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"\n    ],\n    \"get_browser\": [\n        \"mixed get_browser([string browser_name [, bool return_array]])\",\n        \"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"\n    ],\n    \"get_called_class\": [\n        \"string get_called_class()\",\n        \"Retrieves the \\\"Late Static Binding\\\" class name\"\n    ],\n    \"get_cfg_var\": [\n        \"mixed get_cfg_var(string option_name)\",\n        \"Get the value of a PHP configuration option\"\n    ],\n    \"get_class\": [\n        \"string get_class([object object])\",\n        \"Retrieves the class name\"\n    ],\n    \"get_class_methods\": [\n        \"array get_class_methods(mixed class)\",\n        \"Returns an array of method names for class or class instance.\"\n    ],\n    \"get_class_vars\": [\n        \"array get_class_vars(string class_name)\",\n        \"Returns an array of default properties of the class.\"\n    ],\n    \"get_current_user\": [\n        \"string get_current_user(void)\",\n        \"Get the name of the owner of the current PHP script\"\n    ],\n    \"get_declared_classes\": [\n        \"array get_declared_classes()\",\n        \"Returns an array of all declared classes.\"\n    ],\n    \"get_declared_interfaces\": [\n        \"array get_declared_interfaces()\",\n        \"Returns an array of all declared interfaces.\"\n    ],\n    \"get_defined_constants\": [\n        \"array get_defined_constants([bool categorize])\",\n        \"Return an array containing the names and values of all defined constants\"\n    ],\n    \"get_defined_functions\": [\n        \"array get_defined_functions(void)\",\n        \"Returns an array of all defined functions\"\n    ],\n    \"get_defined_vars\": [\n        \"array get_defined_vars(void)\",\n        \"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"\n    ],\n    \"get_display_language\": [\n        \"static string get_display_language($locale[, $in_locale = null])\",\n        \"* gets the language for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_name\": [\n        \"static string get_display_name($locale[, $in_locale = null])\",\n        \"* gets the name for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_region\": [\n        \"static string get_display_region($locale, $in_locale = null)\",\n        \"* gets the region for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_script\": [\n        \"static string get_display_script($locale, $in_locale = null)\",\n        \"* gets the script for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_extension_funcs\": [\n        \"array get_extension_funcs(string extension_name)\",\n        \"Returns an array with the names of functions belonging to the named extension\"\n    ],\n    \"get_headers\": [\n        \"array get_headers(string url[, int format])\",\n        \"fetches all the headers sent by the server in response to a HTTP request\"\n    ],\n    \"get_html_translation_table\": [\n        \"array get_html_translation_table([int table [, int quote_style]])\",\n        \"Returns the internal translation table used by htmlspecialchars and htmlentities\"\n    ],\n    \"get_include_path\": [\n        \"string get_include_path()\",\n        \"Get the current include_path configuration option\"\n    ],\n    \"get_included_files\": [\n        \"array get_included_files(void)\",\n        \"Returns an array with the file names that were include_once()'d\"\n    ],\n    \"get_loaded_extensions\": [\n        \"array get_loaded_extensions([bool zend_extensions])\",\n        \"Return an array containing names of loaded extensions\"\n    ],\n    \"get_magic_quotes_gpc\": [\n        \"int get_magic_quotes_gpc(void)\",\n        \"Get the current active configuration setting of magic_quotes_gpc\"\n    ],\n    \"get_magic_quotes_runtime\": [\n        \"int get_magic_quotes_runtime(void)\",\n        \"Get the current active configuration setting of magic_quotes_runtime\"\n    ],\n    \"get_meta_tags\": [\n        \"array get_meta_tags(string filename [, bool use_include_path])\",\n        \"Extracts all meta tag content attributes from a file and returns an array\"\n    ],\n    \"get_object_vars\": [\n        \"array get_object_vars(object obj)\",\n        \"Returns an array of object properties\"\n    ],\n    \"get_parent_class\": [\n        \"string get_parent_class([mixed object])\",\n        \"Retrieves the parent class name for object or class or current scope.\"\n    ],\n    \"get_resource_type\": [\n        \"string get_resource_type(resource res)\",\n        \"Get the resource type name for a given resource\"\n    ],\n    \"getallheaders\": [\n        \"array getallheaders(void)\",\n        \"\"\n    ],\n    \"getcwd\": [\n        \"mixed getcwd(void)\",\n        \"Gets the current directory\"\n    ],\n    \"getdate\": [\n        \"array getdate([int timestamp])\",\n        \"Get date/time information\"\n    ],\n    \"getenv\": [\n        \"string getenv(string varname)\",\n        \"Get the value of an environment variable\"\n    ],\n    \"gethostbyaddr\": [\n        \"string gethostbyaddr(string ip_address)\",\n        \"Get the Internet host name corresponding to a given IP address\"\n    ],\n    \"gethostbyname\": [\n        \"string gethostbyname(string hostname)\",\n        \"Get the IP address corresponding to a given Internet host name\"\n    ],\n    \"gethostbynamel\": [\n        \"array gethostbynamel(string hostname)\",\n        \"Return a list of IP addresses that a given hostname resolves to.\"\n    ],\n    \"gethostname\": [\n        \"string gethostname()\",\n        \"Get the host name of the current machine\"\n    ],\n    \"getimagesize\": [\n        \"array getimagesize(string imagefile [, array info])\",\n        \"Get the size of an image as 4-element array\"\n    ],\n    \"getlastmod\": [\n        \"int getlastmod(void)\",\n        \"Get time of last page modification\"\n    ],\n    \"getmygid\": [\n        \"int getmygid(void)\",\n        \"Get PHP script owner's GID\"\n    ],\n    \"getmyinode\": [\n        \"int getmyinode(void)\",\n        \"Get the inode of the current script being parsed\"\n    ],\n    \"getmypid\": [\n        \"int getmypid(void)\",\n        \"Get current process ID\"\n    ],\n    \"getmyuid\": [\n        \"int getmyuid(void)\",\n        \"Get PHP script owner's UID\"\n    ],\n    \"getopt\": [\n        \"array getopt(string options [, array longopts])\",\n        \"Get options from the command line argument list\"\n    ],\n    \"getprotobyname\": [\n        \"int getprotobyname(string name)\",\n        \"Returns protocol number associated with name as per /etc/protocols\"\n    ],\n    \"getprotobynumber\": [\n        \"string getprotobynumber(int proto)\",\n        \"Returns protocol name associated with protocol number proto\"\n    ],\n    \"getrandmax\": [\n        \"int getrandmax(void)\",\n        \"Returns the maximum value a random number can have\"\n    ],\n    \"getrusage\": [\n        \"array getrusage([int who])\",\n        \"Returns an array of usage statistics\"\n    ],\n    \"getservbyname\": [\n        \"int getservbyname(string service, string protocol)\",\n        \"Returns port associated with service. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"getservbyport\": [\n        \"string getservbyport(int port, string protocol)\",\n        \"Returns service name associated with port. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"gettext\": [\n        \"string gettext(string msgid)\",\n        \"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"\n    ],\n    \"gettimeofday\": [\n        \"array gettimeofday([bool get_as_float])\",\n        \"Returns the current time as array\"\n    ],\n    \"gettype\": [\n        \"string gettype(mixed var)\",\n        \"Returns the type of the variable\"\n    ],\n    \"glob\": [\n        \"array glob(string pattern [, int flags])\",\n        \"Find pathnames matching a pattern\"\n    ],\n    \"gmdate\": [\n        \"string gmdate(string format [, long timestamp])\",\n        \"Format a GMT date/time\"\n    ],\n    \"gmmktime\": [\n        \"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a GMT date\"\n    ],\n    \"gmp_abs\": [\n        \"resource gmp_abs(resource a)\",\n        \"Calculates absolute value\"\n    ],\n    \"gmp_add\": [\n        \"resource gmp_add(resource a, resource b)\",\n        \"Add a and b\"\n    ],\n    \"gmp_and\": [\n        \"resource gmp_and(resource a, resource b)\",\n        \"Calculates logical AND of a and b\"\n    ],\n    \"gmp_clrbit\": [\n        \"void gmp_clrbit(resource &a, int index)\",\n        \"Clears bit in a\"\n    ],\n    \"gmp_cmp\": [\n        \"int gmp_cmp(resource a, resource b)\",\n        \"Compares two numbers\"\n    ],\n    \"gmp_com\": [\n        \"resource gmp_com(resource a)\",\n        \"Calculates one's complement of a\"\n    ],\n    \"gmp_div_q\": [\n        \"resource gmp_div_q(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient only\"\n    ],\n    \"gmp_div_qr\": [\n        \"array gmp_div_qr(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient and reminder\"\n    ],\n    \"gmp_div_r\": [\n        \"resource gmp_div_r(resource a, resource b [, int round])\",\n        \"Divide a by b, returns reminder only\"\n    ],\n    \"gmp_divexact\": [\n        \"resource gmp_divexact(resource a, resource b)\",\n        \"Divide a by b using exact division algorithm\"\n    ],\n    \"gmp_fact\": [\n        \"resource gmp_fact(int a)\",\n        \"Calculates factorial function\"\n    ],\n    \"gmp_gcd\": [\n        \"resource gmp_gcd(resource a, resource b)\",\n        \"Computes greatest common denominator (gcd) of a and b\"\n    ],\n    \"gmp_gcdext\": [\n        \"array gmp_gcdext(resource a, resource b)\",\n        \"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"\n    ],\n    \"gmp_hamdist\": [\n        \"int gmp_hamdist(resource a, resource b)\",\n        \"Calculates hamming distance between a and b\"\n    ],\n    \"gmp_init\": [\n        \"resource gmp_init(mixed number [, int base])\",\n        \"Initializes GMP number\"\n    ],\n    \"gmp_intval\": [\n        \"int gmp_intval(resource gmpnumber)\",\n        \"Gets signed long value of GMP number\"\n    ],\n    \"gmp_invert\": [\n        \"resource gmp_invert(resource a, resource b)\",\n        \"Computes the inverse of a modulo b\"\n    ],\n    \"gmp_jacobi\": [\n        \"int gmp_jacobi(resource a, resource b)\",\n        \"Computes Jacobi symbol\"\n    ],\n    \"gmp_legendre\": [\n        \"int gmp_legendre(resource a, resource b)\",\n        \"Computes Legendre symbol\"\n    ],\n    \"gmp_mod\": [\n        \"resource gmp_mod(resource a, resource b)\",\n        \"Computes a modulo b\"\n    ],\n    \"gmp_mul\": [\n        \"resource gmp_mul(resource a, resource b)\",\n        \"Multiply a and b\"\n    ],\n    \"gmp_neg\": [\n        \"resource gmp_neg(resource a)\",\n        \"Negates a number\"\n    ],\n    \"gmp_nextprime\": [\n        \"resource gmp_nextprime(resource a)\",\n        \"Finds next prime of a\"\n    ],\n    \"gmp_or\": [\n        \"resource gmp_or(resource a, resource b)\",\n        \"Calculates logical OR of a and b\"\n    ],\n    \"gmp_perfect_square\": [\n        \"bool gmp_perfect_square(resource a)\",\n        \"Checks if a is an exact square\"\n    ],\n    \"gmp_popcount\": [\n        \"int gmp_popcount(resource a)\",\n        \"Calculates the population count of a\"\n    ],\n    \"gmp_pow\": [\n        \"resource gmp_pow(resource base, int exp)\",\n        \"Raise base to power exp\"\n    ],\n    \"gmp_powm\": [\n        \"resource gmp_powm(resource base, resource exp, resource mod)\",\n        \"Raise base to power exp and take result modulo mod\"\n    ],\n    \"gmp_prob_prime\": [\n        \"int gmp_prob_prime(resource a[, int reps])\",\n        \"Checks if a is \\\"probably prime\\\"\"\n    ],\n    \"gmp_random\": [\n        \"resource gmp_random([int limiter])\",\n        \"Gets random number\"\n    ],\n    \"gmp_scan0\": [\n        \"int gmp_scan0(resource a, int start)\",\n        \"Finds first zero bit\"\n    ],\n    \"gmp_scan1\": [\n        \"int gmp_scan1(resource a, int start)\",\n        \"Finds first non-zero bit\"\n    ],\n    \"gmp_setbit\": [\n        \"void gmp_setbit(resource &a, int index[, bool set_clear])\",\n        \"Sets or clear bit in a\"\n    ],\n    \"gmp_sign\": [\n        \"int gmp_sign(resource a)\",\n        \"Gets the sign of the number\"\n    ],\n    \"gmp_sqrt\": [\n        \"resource gmp_sqrt(resource a)\",\n        \"Takes integer part of square root of a\"\n    ],\n    \"gmp_sqrtrem\": [\n        \"array gmp_sqrtrem(resource a)\",\n        \"Square root with remainder\"\n    ],\n    \"gmp_strval\": [\n        \"string gmp_strval(resource gmpnumber [, int base])\",\n        \"Gets string representation of GMP number\"\n    ],\n    \"gmp_sub\": [\n        \"resource gmp_sub(resource a, resource b)\",\n        \"Subtract b from a\"\n    ],\n    \"gmp_testbit\": [\n        \"bool gmp_testbit(resource a, int index)\",\n        \"Tests if bit is set in a\"\n    ],\n    \"gmp_xor\": [\n        \"resource gmp_xor(resource a, resource b)\",\n        \"Calculates logical exclusive OR of a and b\"\n    ],\n    \"gmstrftime\": [\n        \"string gmstrftime(string format [, int timestamp])\",\n        \"Format a GMT/UCT time/date according to locale settings\"\n    ],\n    \"grapheme_extract\": [\n        \"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\n        \"Function to extract a sequence of default grapheme clusters\"\n    ],\n    \"grapheme_stripos\": [\n        \"int grapheme_stripos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another, ignoring case differences\"\n    ],\n    \"grapheme_stristr\": [\n        \"string grapheme_stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_strlen\": [\n        \"int grapheme_strlen(string str)\",\n        \"Get number of graphemes in a string\"\n    ],\n    \"grapheme_strpos\": [\n        \"int grapheme_strpos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"grapheme_strripos\": [\n        \"int grapheme_strripos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another, ignoring case\"\n    ],\n    \"grapheme_strrpos\": [\n        \"int grapheme_strrpos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"grapheme_strstr\": [\n        \"string grapheme_strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_substr\": [\n        \"string grapheme_substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"gregoriantojd\": [\n        \"int gregoriantojd(int month, int day, int year)\",\n        \"Converts a gregorian calendar date to julian day count\"\n    ],\n    \"gzcompress\": [\n        \"string gzcompress(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzdeflate\": [\n        \"string gzdeflate(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzencode\": [\n        \"string gzencode(string data [, int level [, int encoding_mode]])\",\n        \"GZ encode a string\"\n    ],\n    \"gzfile\": [\n        \"array gzfile(string filename [, int use_include_path])\",\n        \"Read und uncompress entire .gz-file into an array\"\n    ],\n    \"gzinflate\": [\n        \"string gzinflate(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"gzopen\": [\n        \"resource gzopen(string filename, string mode [, int use_include_path])\",\n        \"Open a .gz-file and return a .gz-file pointer\"\n    ],\n    \"gzuncompress\": [\n        \"string gzuncompress(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"hash\": [\n        \"string hash(string algo, string data[, bool raw_output = false])\",\n        \"Generate a hash of a given input string Returns lowercase hexits by default\"\n    ],\n    \"hash_algos\": [\n        \"array hash_algos(void)\",\n        \"Return a list of registered hashing algorithms\"\n    ],\n    \"hash_copy\": [\n        \"resource hash_copy(resource context)\",\n        \"Copy hash resource\"\n    ],\n    \"hash_file\": [\n        \"string hash_file(string algo, string filename[, bool raw_output = false])\",\n        \"Generate a hash of a given file Returns lowercase hexits by default\"\n    ],\n    \"hash_final\": [\n        \"string hash_final(resource context[, bool raw_output=false])\",\n        \"Output resulting digest\"\n    ],\n    \"hash_hmac\": [\n        \"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_hmac_file\": [\n        \"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_init\": [\n        \"resource hash_init(string algo[, int options, string key])\",\n        \"Initialize a hashing context\"\n    ],\n    \"hash_update\": [\n        \"bool hash_update(resource context, string data)\",\n        \"Pump data into the hashing algorithm\"\n    ],\n    \"hash_update_file\": [\n        \"bool hash_update_file(resource context, string filename[, resource context])\",\n        \"Pump data into the hashing algorithm from a file\"\n    ],\n    \"hash_update_stream\": [\n        \"int hash_update_stream(resource context, resource handle[, integer length])\",\n        \"Pump data into the hashing algorithm from an open stream\"\n    ],\n    \"header\": [\n        \"void header(string header [, bool replace, [int http_response_code]])\",\n        \"Sends a raw HTTP header\"\n    ],\n    \"header_remove\": [\n        \"void header_remove([string name])\",\n        \"Removes an HTTP header previously set using header()\"\n    ],\n    \"headers_list\": [\n        \"array headers_list(void)\",\n        \"Return list of headers to be sent / already sent\"\n    ],\n    \"headers_sent\": [\n        \"bool headers_sent([string &$file [, int &$line]])\",\n        \"Returns true if headers have already been sent, false otherwise\"\n    ],\n    \"hebrev\": [\n        \"string hebrev(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text\"\n    ],\n    \"hebrevc\": [\n        \"string hebrevc(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text with newline conversion\"\n    ],\n    \"hexdec\": [\n        \"int hexdec(string hexadecimal_number)\",\n        \"Returns the decimal equivalent of the hexadecimal number\"\n    ],\n    \"highlight_file\": [\n        \"bool highlight_file(string file_name [, bool return] )\",\n        \"Syntax highlight a source file\"\n    ],\n    \"highlight_string\": [\n        \"bool highlight_string(string string [, bool return] )\",\n        \"Syntax highlight a string or optionally return it\"\n    ],\n    \"html_entity_decode\": [\n        \"string html_entity_decode(string string [, int quote_style][, string charset])\",\n        \"Convert all HTML entities to their applicable characters\"\n    ],\n    \"htmlentities\": [\n        \"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert all applicable characters to HTML entities\"\n    ],\n    \"htmlspecialchars\": [\n        \"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert special characters to HTML entities\"\n    ],\n    \"htmlspecialchars_decode\": [\n        \"string htmlspecialchars_decode(string string [, int quote_style])\",\n        \"Convert special HTML entities back to characters\"\n    ],\n    \"http_build_query\": [\n        \"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\n        \"Generates a form-encoded query string from an associative array or object.\"\n    ],\n    \"hypot\": [\n        \"float hypot(float num1, float num2)\",\n        \"Returns sqrt(num1*num1 + num2*num2)\"\n    ],\n    \"ibase_add_user\": [\n        \"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Add a user to security database\"\n    ],\n    \"ibase_affected_rows\": [\n        \"int ibase_affected_rows( [ resource link_identifier ] )\",\n        \"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"\n    ],\n    \"ibase_backup\": [\n        \"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\n        \"Initiates a backup task in the service manager and returns immediately\"\n    ],\n    \"ibase_blob_add\": [\n        \"bool ibase_blob_add(resource blob_handle, string data)\",\n        \"Add data into created blob\"\n    ],\n    \"ibase_blob_cancel\": [\n        \"bool ibase_blob_cancel(resource blob_handle)\",\n        \"Cancel creating blob\"\n    ],\n    \"ibase_blob_close\": [\n        \"string ibase_blob_close(resource blob_handle)\",\n        \"Close blob\"\n    ],\n    \"ibase_blob_create\": [\n        \"resource ibase_blob_create([resource link_identifier])\",\n        \"Create blob for adding data\"\n    ],\n    \"ibase_blob_echo\": [\n        \"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\n        \"Output blob contents to browser\"\n    ],\n    \"ibase_blob_get\": [\n        \"string ibase_blob_get(resource blob_handle, int len)\",\n        \"Get len bytes data from open blob\"\n    ],\n    \"ibase_blob_import\": [\n        \"string ibase_blob_import([ resource link_identifier, ] resource file)\",\n        \"Create blob, copy file in it, and close it\"\n    ],\n    \"ibase_blob_info\": [\n        \"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\n        \"Return blob length and other useful info\"\n    ],\n    \"ibase_blob_open\": [\n        \"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\n        \"Open blob for retrieving data parts\"\n    ],\n    \"ibase_close\": [\n        \"bool ibase_close([resource link_identifier])\",\n        \"Close an InterBase connection\"\n    ],\n    \"ibase_commit\": [\n        \"bool ibase_commit( resource link_identifier )\",\n        \"Commit transaction\"\n    ],\n    \"ibase_commit_ret\": [\n        \"bool ibase_commit_ret( resource link_identifier )\",\n        \"Commit transaction and retain the transaction context\"\n    ],\n    \"ibase_connect\": [\n        \"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a connection to an InterBase database\"\n    ],\n    \"ibase_db_info\": [\n        \"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\n        \"Request statistics about a database\"\n    ],\n    \"ibase_delete_user\": [\n        \"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Delete a user from security database\"\n    ],\n    \"ibase_drop_db\": [\n        \"bool ibase_drop_db([resource link_identifier])\",\n        \"Drop an InterBase database\"\n    ],\n    \"ibase_errcode\": [\n        \"int ibase_errcode(void)\",\n        \"Return error code\"\n    ],\n    \"ibase_errmsg\": [\n        \"string ibase_errmsg(void)\",\n        \"Return error message\"\n    ],\n    \"ibase_execute\": [\n        \"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a previously prepared query\"\n    ],\n    \"ibase_fetch_assoc\": [\n        \"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_fetch_object\": [\n        \"object ibase_fetch_object(resource result [, int fetch_flags])\",\n        \"Fetch a object from the results of a query\"\n    ],\n    \"ibase_fetch_row\": [\n        \"array ibase_fetch_row(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_field_info\": [\n        \"array ibase_field_info(resource query_result, int field_number)\",\n        \"Get information about a field\"\n    ],\n    \"ibase_free_event_handler\": [\n        \"bool ibase_free_event_handler(resource event)\",\n        \"Frees the event handler set by ibase_set_event_handler()\"\n    ],\n    \"ibase_free_query\": [\n        \"bool ibase_free_query(resource query)\",\n        \"Free memory used by a query\"\n    ],\n    \"ibase_free_result\": [\n        \"bool ibase_free_result(resource result)\",\n        \"Free the memory used by a result\"\n    ],\n    \"ibase_gen_id\": [\n        \"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\n        \"Increments the named generator and returns its new value\"\n    ],\n    \"ibase_maintain_db\": [\n        \"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\n        \"Execute a maintenance command on the database server\"\n    ],\n    \"ibase_modify_user\": [\n        \"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Modify a user in security database\"\n    ],\n    \"ibase_name_result\": [\n        \"bool ibase_name_result(resource result, string name)\",\n        \"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"\n    ],\n    \"ibase_num_fields\": [\n        \"int ibase_num_fields(resource query_result)\",\n        \"Get the number of fields in result\"\n    ],\n    \"ibase_num_params\": [\n        \"int ibase_num_params(resource query)\",\n        \"Get the number of params in a prepared query\"\n    ],\n    \"ibase_num_rows\": [\n        \"int ibase_num_rows( resource result_identifier )\",\n        \"Return the number of rows that are available in a result\"\n    ],\n    \"ibase_param_info\": [\n        \"array ibase_param_info(resource query, int field_number)\",\n        \"Get information about a parameter\"\n    ],\n    \"ibase_pconnect\": [\n        \"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a persistent connection to an InterBase database\"\n    ],\n    \"ibase_prepare\": [\n        \"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\n        \"Prepare a query for later execution\"\n    ],\n    \"ibase_query\": [\n        \"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a query\"\n    ],\n    \"ibase_restore\": [\n        \"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\n        \"Initiates a restore task in the service manager and returns immediately\"\n    ],\n    \"ibase_rollback\": [\n        \"bool ibase_rollback( resource link_identifier )\",\n        \"Rollback transaction\"\n    ],\n    \"ibase_rollback_ret\": [\n        \"bool ibase_rollback_ret( resource link_identifier )\",\n        \"Rollback transaction and retain the transaction context\"\n    ],\n    \"ibase_server_info\": [\n        \"string ibase_server_info(resource service_handle, int action)\",\n        \"Request information about a database server\"\n    ],\n    \"ibase_service_attach\": [\n        \"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\n        \"Connect to the service manager\"\n    ],\n    \"ibase_service_detach\": [\n        \"bool ibase_service_detach(resource service_handle)\",\n        \"Disconnect from the service manager\"\n    ],\n    \"ibase_set_event_handler\": [\n        \"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\n        \"Register the callback for handling each of the named events\"\n    ],\n    \"ibase_trans\": [\n        \"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\n        \"Start a transaction over one or several databases\"\n    ],\n    \"ibase_wait_event\": [\n        \"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\n        \"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"\n    ],\n    \"iconv\": [\n        \"string iconv(string in_charset, string out_charset, string str)\",\n        \"Returns str converted to the out_charset character set\"\n    ],\n    \"iconv_get_encoding\": [\n        \"mixed iconv_get_encoding([string type])\",\n        \"Get internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_mime_decode\": [\n        \"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\n        \"Decodes a mime header field\"\n    ],\n    \"iconv_mime_decode_headers\": [\n        \"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\n        \"Decodes multiple mime header fields\"\n    ],\n    \"iconv_mime_encode\": [\n        \"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\n        \"Composes a mime header field with field_name and field_value in a specified scheme\"\n    ],\n    \"iconv_set_encoding\": [\n        \"bool iconv_set_encoding(string type, string charset)\",\n        \"Sets internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_strlen\": [\n        \"int iconv_strlen(string str [, string charset])\",\n        \"Returns the character count of str\"\n    ],\n    \"iconv_strpos\": [\n        \"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\n        \"Finds position of first occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_strrpos\": [\n        \"int iconv_strrpos(string haystack, string needle [, string charset])\",\n        \"Finds position of last occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_substr\": [\n        \"string iconv_substr(string str, int offset, [int length, string charset])\",\n        \"Returns specified part of a string\"\n    ],\n    \"idate\": [\n        \"int idate(string format [, int timestamp])\",\n        \"Format a local time/date as integer\"\n    ],\n    \"idn_to_ascii\": [\n        \"int idn_to_ascii(string domain[, int options])\",\n        \"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"\n    ],\n    \"idn_to_utf8\": [\n        \"int idn_to_utf8(string domain[, int options])\",\n        \"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"\n    ],\n    \"ignore_user_abort\": [\n        \"int ignore_user_abort([string value])\",\n        \"Set whether we want to ignore a user abort event or not\"\n    ],\n    \"image2wbmp\": [\n        \"bool image2wbmp(resource im [, string filename [, int threshold]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"image_type_to_extension\": [\n        \"string image_type_to_extension(int imagetype [, bool include_dot])\",\n        \"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"image_type_to_mime_type\": [\n        \"string image_type_to_mime_type(int imagetype)\",\n        \"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"imagealphablending\": [\n        \"bool imagealphablending(resource im, bool on)\",\n        \"Turn alpha blending mode on or off for the given image\"\n    ],\n    \"imageantialias\": [\n        \"bool imageantialias(resource im, bool on)\",\n        \"Should antialiased functions used or not\"\n    ],\n    \"imagearc\": [\n        \"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\n        \"Draw a partial ellipse\"\n    ],\n    \"imagechar\": [\n        \"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character\"\n    ],\n    \"imagecharup\": [\n        \"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagecolorallocate\": [\n        \"int imagecolorallocate(resource im, int red, int green, int blue)\",\n        \"Allocate a color for an image\"\n    ],\n    \"imagecolorallocatealpha\": [\n        \"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Allocate a color with an alpha level.  Works for true color and palette based images\"\n    ],\n    \"imagecolorat\": [\n        \"int imagecolorat(resource im, int x, int y)\",\n        \"Get the index of the color of a pixel\"\n    ],\n    \"imagecolorclosest\": [\n        \"int imagecolorclosest(resource im, int red, int green, int blue)\",\n        \"Get the index of the closest color to the specified color\"\n    ],\n    \"imagecolorclosestalpha\": [\n        \"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find the closest matching colour with alpha transparency\"\n    ],\n    \"imagecolorclosesthwb\": [\n        \"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\n        \"Get the index of the color which has the hue, white and blackness nearest to the given color\"\n    ],\n    \"imagecolordeallocate\": [\n        \"bool imagecolordeallocate(resource im, int index)\",\n        \"De-allocate a color for an image\"\n    ],\n    \"imagecolorexact\": [\n        \"int imagecolorexact(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color\"\n    ],\n    \"imagecolorexactalpha\": [\n        \"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find exact match for colour with transparency\"\n    ],\n    \"imagecolormatch\": [\n        \"bool imagecolormatch(resource im1, resource im2)\",\n        \"Makes the colors of the palette version of an image more closely match the true color version\"\n    ],\n    \"imagecolorresolve\": [\n        \"int imagecolorresolve(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color or its closest possible alternative\"\n    ],\n    \"imagecolorresolvealpha\": [\n        \"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"\n    ],\n    \"imagecolorset\": [\n        \"void imagecolorset(resource im, int col, int red, int green, int blue)\",\n        \"Set the color for the specified palette index\"\n    ],\n    \"imagecolorsforindex\": [\n        \"array imagecolorsforindex(resource im, int col)\",\n        \"Get the colors for an index\"\n    ],\n    \"imagecolorstotal\": [\n        \"int imagecolorstotal(resource im)\",\n        \"Find out the number of colors in an image's palette\"\n    ],\n    \"imagecolortransparent\": [\n        \"int imagecolortransparent(resource im [, int col])\",\n        \"Define a color as transparent\"\n    ],\n    \"imageconvolution\": [\n        \"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\n        \"Apply a 3x3 convolution matrix, using coefficient div and offset\"\n    ],\n    \"imagecopy\": [\n        \"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\n        \"Copy part of an image\"\n    ],\n    \"imagecopymerge\": [\n        \"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopymergegray\": [\n        \"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopyresampled\": [\n        \"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image using resampling to help ensure clarity\"\n    ],\n    \"imagecopyresized\": [\n        \"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image\"\n    ],\n    \"imagecreate\": [\n        \"resource imagecreate(int x_size, int y_size)\",\n        \"Create a new image\"\n    ],\n    \"imagecreatefromgd\": [\n        \"resource imagecreatefromgd(string filename)\",\n        \"Create a new image from GD file or URL\"\n    ],\n    \"imagecreatefromgd2\": [\n        \"resource imagecreatefromgd2(string filename)\",\n        \"Create a new image from GD2 file or URL\"\n    ],\n    \"imagecreatefromgd2part\": [\n        \"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\n        \"Create a new image from a given part of GD2 file or URL\"\n    ],\n    \"imagecreatefromgif\": [\n        \"resource imagecreatefromgif(string filename)\",\n        \"Create a new image from GIF file or URL\"\n    ],\n    \"imagecreatefromjpeg\": [\n        \"resource imagecreatefromjpeg(string filename)\",\n        \"Create a new image from JPEG file or URL\"\n    ],\n    \"imagecreatefrompng\": [\n        \"resource imagecreatefrompng(string filename)\",\n        \"Create a new image from PNG file or URL\"\n    ],\n    \"imagecreatefromstring\": [\n        \"resource imagecreatefromstring(string image)\",\n        \"Create a new image from the image stream in the string\"\n    ],\n    \"imagecreatefromwbmp\": [\n        \"resource imagecreatefromwbmp(string filename)\",\n        \"Create a new image from WBMP file or URL\"\n    ],\n    \"imagecreatefromxbm\": [\n        \"resource imagecreatefromxbm(string filename)\",\n        \"Create a new image from XBM file or URL\"\n    ],\n    \"imagecreatefromxpm\": [\n        \"resource imagecreatefromxpm(string filename)\",\n        \"Create a new image from XPM file or URL\"\n    ],\n    \"imagecreatetruecolor\": [\n        \"resource imagecreatetruecolor(int x_size, int y_size)\",\n        \"Create a new true color image\"\n    ],\n    \"imagedashedline\": [\n        \"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a dashed line\"\n    ],\n    \"imagedestroy\": [\n        \"bool imagedestroy(resource im)\",\n        \"Destroy an image\"\n    ],\n    \"imageellipse\": [\n        \"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefill\": [\n        \"bool imagefill(resource im, int x, int y, int col)\",\n        \"Flood fill\"\n    ],\n    \"imagefilledarc\": [\n        \"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\n        \"Draw a filled partial ellipse\"\n    ],\n    \"imagefilledellipse\": [\n        \"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefilledpolygon\": [\n        \"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a filled polygon\"\n    ],\n    \"imagefilledrectangle\": [\n        \"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a filled rectangle\"\n    ],\n    \"imagefilltoborder\": [\n        \"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\n        \"Flood fill to specific color\"\n    ],\n    \"imagefilter\": [\n        \"bool imagefilter(resource src_im, int filtertype, [args] )\",\n        \"Applies Filter an image using a custom angle\"\n    ],\n    \"imagefontheight\": [\n        \"int imagefontheight(int font)\",\n        \"Get font height\"\n    ],\n    \"imagefontwidth\": [\n        \"int imagefontwidth(int font)\",\n        \"Get font width\"\n    ],\n    \"imageftbbox\": [\n        \"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\n        \"Give the bounding box of a text using fonts via freetype2\"\n    ],\n    \"imagefttext\": [\n        \"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\n        \"Write text to the image using fonts via freetype2\"\n    ],\n    \"imagegammacorrect\": [\n        \"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\n        \"Apply a gamma correction to a GD image\"\n    ],\n    \"imagegd\": [\n        \"bool imagegd(resource im [, string filename])\",\n        \"Output GD image to browser or file\"\n    ],\n    \"imagegd2\": [\n        \"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\n        \"Output GD2 image to browser or file\"\n    ],\n    \"imagegif\": [\n        \"bool imagegif(resource im [, string filename])\",\n        \"Output GIF image to browser or file\"\n    ],\n    \"imagegrabscreen\": [\n        \"resource imagegrabscreen()\",\n        \"Grab a screenshot\"\n    ],\n    \"imagegrabwindow\": [\n        \"resource imagegrabwindow(int window_handle [, int client_area])\",\n        \"Grab a window or its client area using a windows handle (HWND property in COM instance)\"\n    ],\n    \"imageinterlace\": [\n        \"int imageinterlace(resource im [, int interlace])\",\n        \"Enable or disable interlace\"\n    ],\n    \"imageistruecolor\": [\n        \"bool imageistruecolor(resource im)\",\n        \"return true if the image uses truecolor\"\n    ],\n    \"imagejpeg\": [\n        \"bool imagejpeg(resource im [, string filename [, int quality]])\",\n        \"Output JPEG image to browser or file\"\n    ],\n    \"imagelayereffect\": [\n        \"bool imagelayereffect(resource im, int effect)\",\n        \"Set the alpha blending flag to use the bundled libgd layering effects\"\n    ],\n    \"imageline\": [\n        \"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a line\"\n    ],\n    \"imageloadfont\": [\n        \"int imageloadfont(string filename)\",\n        \"Load a new font\"\n    ],\n    \"imagepalettecopy\": [\n        \"void imagepalettecopy(resource dst, resource src)\",\n        \"Copy the palette from the src image onto the dst image\"\n    ],\n    \"imagepng\": [\n        \"bool imagepng(resource im [, string filename])\",\n        \"Output PNG image to browser or file\"\n    ],\n    \"imagepolygon\": [\n        \"bool imagepolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a polygon\"\n    ],\n    \"imagepsbbox\": [\n        \"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\n        \"Return the bounding box needed by a string if rasterized\"\n    ],\n    \"imagepscopyfont\": [\n        \"int imagepscopyfont(int font_index)\",\n        \"Make a copy of a font for purposes like extending or reenconding\"\n    ],\n    \"imagepsencodefont\": [\n        \"bool imagepsencodefont(resource font_index, string filename)\",\n        \"To change a fonts character encoding vector\"\n    ],\n    \"imagepsextendfont\": [\n        \"bool imagepsextendfont(resource font_index, float extend)\",\n        \"Extend or or condense (if extend < 1) a font\"\n    ],\n    \"imagepsfreefont\": [\n        \"bool imagepsfreefont(resource font_index)\",\n        \"Free memory used by a font\"\n    ],\n    \"imagepsloadfont\": [\n        \"resource imagepsloadfont(string pathname)\",\n        \"Load a new font from specified file\"\n    ],\n    \"imagepsslantfont\": [\n        \"bool imagepsslantfont(resource font_index, float slant)\",\n        \"Slant a font\"\n    ],\n    \"imagepstext\": [\n        \"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\n        \"Rasterize a string over an image\"\n    ],\n    \"imagerectangle\": [\n        \"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a rectangle\"\n    ],\n    \"imagerotate\": [\n        \"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\n        \"Rotate an image using a custom angle\"\n    ],\n    \"imagesavealpha\": [\n        \"bool imagesavealpha(resource im, bool on)\",\n        \"Include alpha channel to a saved image\"\n    ],\n    \"imagesetbrush\": [\n        \"bool imagesetbrush(resource image, resource brush)\",\n        \"Set the brush image to $brush when filling $image with the \\\"IMG_COLOR_BRUSHED\\\" color\"\n    ],\n    \"imagesetpixel\": [\n        \"bool imagesetpixel(resource im, int x, int y, int col)\",\n        \"Set a single pixel\"\n    ],\n    \"imagesetstyle\": [\n        \"bool imagesetstyle(resource im, array styles)\",\n        \"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"\n    ],\n    \"imagesetthickness\": [\n        \"bool imagesetthickness(resource im, int thickness)\",\n        \"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"\n    ],\n    \"imagesettile\": [\n        \"bool imagesettile(resource image, resource tile)\",\n        \"Set the tile image to $tile when filling $image with the \\\"IMG_COLOR_TILED\\\" color\"\n    ],\n    \"imagestring\": [\n        \"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string horizontally\"\n    ],\n    \"imagestringup\": [\n        \"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string vertically - rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagesx\": [\n        \"int imagesx(resource im)\",\n        \"Get image width\"\n    ],\n    \"imagesy\": [\n        \"int imagesy(resource im)\",\n        \"Get image height\"\n    ],\n    \"imagetruecolortopalette\": [\n        \"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\n        \"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"\n    ],\n    \"imagettfbbox\": [\n        \"array imagettfbbox(float size, float angle, string font_file, string text)\",\n        \"Give the bounding box of a text using TrueType fonts\"\n    ],\n    \"imagettftext\": [\n        \"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\n        \"Write text to the image using a TrueType font\"\n    ],\n    \"imagetypes\": [\n        \"int imagetypes(void)\",\n        \"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"\n    ],\n    \"imagewbmp\": [\n        \"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"imagexbm\": [\n        \"int imagexbm(int im, string filename [, int foreground])\",\n        \"Output XBM image to browser or file\"\n    ],\n    \"imap_8bit\": [\n        \"string imap_8bit(string text)\",\n        \"Convert an 8-bit string to a quoted-printable string\"\n    ],\n    \"imap_alerts\": [\n        \"array imap_alerts(void)\",\n        \"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"\n    ],\n    \"imap_append\": [\n        \"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\n        \"Append a new message to a specified mailbox\"\n    ],\n    \"imap_base64\": [\n        \"string imap_base64(string text)\",\n        \"Decode BASE64 encoded text\"\n    ],\n    \"imap_binary\": [\n        \"string imap_binary(string text)\",\n        \"Convert an 8bit string to a base64 string\"\n    ],\n    \"imap_body\": [\n        \"string imap_body(resource stream_id, int msg_no [, int options])\",\n        \"Read the message body\"\n    ],\n    \"imap_bodystruct\": [\n        \"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\n        \"Read the structure of a specified body section of a specific message\"\n    ],\n    \"imap_check\": [\n        \"object imap_check(resource stream_id)\",\n        \"Get mailbox properties\"\n    ],\n    \"imap_clearflag_full\": [\n        \"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Clears flags on messages\"\n    ],\n    \"imap_close\": [\n        \"bool imap_close(resource stream_id [, int options])\",\n        \"Close an IMAP stream\"\n    ],\n    \"imap_createmailbox\": [\n        \"bool imap_createmailbox(resource stream_id, string mailbox)\",\n        \"Create a new mailbox\"\n    ],\n    \"imap_delete\": [\n        \"bool imap_delete(resource stream_id, int msg_no [, int options])\",\n        \"Mark a message for deletion\"\n    ],\n    \"imap_deletemailbox\": [\n        \"bool imap_deletemailbox(resource stream_id, string mailbox)\",\n        \"Delete a mailbox\"\n    ],\n    \"imap_errors\": [\n        \"array imap_errors(void)\",\n        \"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"\n    ],\n    \"imap_expunge\": [\n        \"bool imap_expunge(resource stream_id)\",\n        \"Permanently delete all messages marked for deletion\"\n    ],\n    \"imap_fetch_overview\": [\n        \"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\n        \"Read an overview of the information in the headers of the given message sequence\"\n    ],\n    \"imap_fetchbody\": [\n        \"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\n        \"Get a specific body section\"\n    ],\n    \"imap_fetchheader\": [\n        \"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\n        \"Get the full unfiltered header for a message\"\n    ],\n    \"imap_fetchstructure\": [\n        \"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\n        \"Read the full structure of a message\"\n    ],\n    \"imap_gc\": [\n        \"bool imap_gc(resource stream_id, int flags)\",\n        \"This function garbage collects (purges) the cache of entries of a specific type.\"\n    ],\n    \"imap_get_quota\": [\n        \"array imap_get_quota(resource stream_id, string qroot)\",\n        \"Returns the quota set to the mailbox account qroot\"\n    ],\n    \"imap_get_quotaroot\": [\n        \"array imap_get_quotaroot(resource stream_id, string mbox)\",\n        \"Returns the quota set to the mailbox account mbox\"\n    ],\n    \"imap_getacl\": [\n        \"array imap_getacl(resource stream_id, string mailbox)\",\n        \"Gets the ACL for a given mailbox\"\n    ],\n    \"imap_getmailboxes\": [\n        \"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\n        \"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"\n    ],\n    \"imap_getsubscribed\": [\n        \"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"\n    ],\n    \"imap_headerinfo\": [\n        \"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\n        \"Read the headers of the message\"\n    ],\n    \"imap_headers\": [\n        \"array imap_headers(resource stream_id)\",\n        \"Returns headers for all messages in a mailbox\"\n    ],\n    \"imap_last_error\": [\n        \"string imap_last_error(void)\",\n        \"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"\n    ],\n    \"imap_list\": [\n        \"array imap_list(resource stream_id, string ref, string pattern)\",\n        \"Read the list of mailboxes\"\n    ],\n    \"imap_listscan\": [\n        \"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\n        \"Read list of mailboxes containing a certain string\"\n    ],\n    \"imap_lsub\": [\n        \"array imap_lsub(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes\"\n    ],\n    \"imap_mail\": [\n        \"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\n        \"Send an email message\"\n    ],\n    \"imap_mail_compose\": [\n        \"string imap_mail_compose(array envelope, array body)\",\n        \"Create a MIME message based on given envelope and body sections\"\n    ],\n    \"imap_mail_copy\": [\n        \"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\n        \"Copy specified message to a mailbox\"\n    ],\n    \"imap_mail_move\": [\n        \"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\n        \"Move specified message to a mailbox\"\n    ],\n    \"imap_mailboxmsginfo\": [\n        \"object imap_mailboxmsginfo(resource stream_id)\",\n        \"Returns info about the current mailbox\"\n    ],\n    \"imap_mime_header_decode\": [\n        \"array imap_mime_header_decode(string str)\",\n        \"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"\n    ],\n    \"imap_msgno\": [\n        \"int imap_msgno(resource stream_id, int unique_msg_id)\",\n        \"Get the sequence number associated with a UID\"\n    ],\n    \"imap_mutf7_to_utf8\": [\n        \"string imap_mutf7_to_utf8(string in)\",\n        \"Decode a modified UTF-7 string to UTF-8\"\n    ],\n    \"imap_num_msg\": [\n        \"int imap_num_msg(resource stream_id)\",\n        \"Gives the number of messages in the current mailbox\"\n    ],\n    \"imap_num_recent\": [\n        \"int imap_num_recent(resource stream_id)\",\n        \"Gives the number of recent messages in current mailbox\"\n    ],\n    \"imap_open\": [\n        \"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\n        \"Open an IMAP stream to a mailbox\"\n    ],\n    \"imap_ping\": [\n        \"bool imap_ping(resource stream_id)\",\n        \"Check if the IMAP stream is still active\"\n    ],\n    \"imap_qprint\": [\n        \"string imap_qprint(string text)\",\n        \"Convert a quoted-printable string to an 8-bit string\"\n    ],\n    \"imap_renamemailbox\": [\n        \"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\n        \"Rename a mailbox\"\n    ],\n    \"imap_reopen\": [\n        \"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\n        \"Reopen an IMAP stream to a new mailbox\"\n    ],\n    \"imap_rfc822_parse_adrlist\": [\n        \"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\n        \"Parses an address string\"\n    ],\n    \"imap_rfc822_parse_headers\": [\n        \"object imap_rfc822_parse_headers(string headers [, string default_host])\",\n        \"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"\n    ],\n    \"imap_rfc822_write_address\": [\n        \"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\n        \"Returns a properly formatted email address given the mailbox, host, and personal info\"\n    ],\n    \"imap_savebody\": [\n        \"bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \\\"\\\"[, int options = 0]])\",\n        \"Save a specific body section to a file\"\n    ],\n    \"imap_search\": [\n        \"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\n        \"Return a list of messages matching the given criteria\"\n    ],\n    \"imap_set_quota\": [\n        \"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\n        \"Will set the quota for qroot mailbox\"\n    ],\n    \"imap_setacl\": [\n        \"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\n        \"Sets the ACL for a given mailbox\"\n    ],\n    \"imap_setflag_full\": [\n        \"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Sets flags on messages\"\n    ],\n    \"imap_sort\": [\n        \"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\n        \"Sort an array of message headers, optionally including only messages that meet specified criteria.\"\n    ],\n    \"imap_status\": [\n        \"object imap_status(resource stream_id, string mailbox, int options)\",\n        \"Get status info from a mailbox\"\n    ],\n    \"imap_subscribe\": [\n        \"bool imap_subscribe(resource stream_id, string mailbox)\",\n        \"Subscribe to a mailbox\"\n    ],\n    \"imap_thread\": [\n        \"array imap_thread(resource stream_id [, int options])\",\n        \"Return threaded by REFERENCES tree\"\n    ],\n    \"imap_timeout\": [\n        \"mixed imap_timeout(int timeout_type [, int timeout])\",\n        \"Set or fetch imap timeout\"\n    ],\n    \"imap_uid\": [\n        \"int imap_uid(resource stream_id, int msg_no)\",\n        \"Get the unique message id associated with a standard sequential message number\"\n    ],\n    \"imap_undelete\": [\n        \"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\n        \"Remove the delete flag from a message\"\n    ],\n    \"imap_unsubscribe\": [\n        \"bool imap_unsubscribe(resource stream_id, string mailbox)\",\n        \"Unsubscribe from a mailbox\"\n    ],\n    \"imap_utf7_decode\": [\n        \"string imap_utf7_decode(string buf)\",\n        \"Decode a modified UTF-7 string\"\n    ],\n    \"imap_utf7_encode\": [\n        \"string imap_utf7_encode(string buf)\",\n        \"Encode a string in modified UTF-7\"\n    ],\n    \"imap_utf8\": [\n        \"string imap_utf8(string mime_encoded_text)\",\n        \"Convert a mime-encoded text to UTF-8\"\n    ],\n    \"imap_utf8_to_mutf7\": [\n        \"string imap_utf8_to_mutf7(string in)\",\n        \"Encode a UTF-8 string to modified UTF-7\"\n    ],\n    \"implode\": [\n        \"string implode([string glue,] array pieces)\",\n        \"Joins array elements placing glue string between items and return one string\"\n    ],\n    \"import_request_variables\": [\n        \"bool import_request_variables(string types [, string prefix])\",\n        \"Import GET/POST/Cookie variables into the global scope\"\n    ],\n    \"in_array\": [\n        \"bool in_array(mixed needle, array haystack [, bool strict])\",\n        \"Checks if the given value exists in the array\"\n    ],\n    \"include\": [\n        \"bool include(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"include_once\": [\n        \"bool include_once(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"inet_ntop\": [\n        \"string inet_ntop(string in_addr)\",\n        \"Converts a packed inet address to a human readable IP address string\"\n    ],\n    \"inet_pton\": [\n        \"string inet_pton(string ip_address)\",\n        \"Converts a human readable IP address to a packed binary string\"\n    ],\n    \"ini_get\": [\n        \"string ini_get(string varname)\",\n        \"Get a configuration option\"\n    ],\n    \"ini_get_all\": [\n        \"array ini_get_all([string extension[, bool details = true]])\",\n        \"Get all configuration options\"\n    ],\n    \"ini_restore\": [\n        \"void ini_restore(string varname)\",\n        \"Restore the value of a configuration option specified by varname\"\n    ],\n    \"ini_set\": [\n        \"string ini_set(string varname, string newvalue)\",\n        \"Set a configuration option, returns false on error and the old value of the configuration option on success\"\n    ],\n    \"interface_exists\": [\n        \"bool interface_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"intl_error_name\": [\n        \"string intl_error_name()\",\n        \"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"\n    ],\n    \"intl_get_error_code\": [\n        \"int intl_get_error_code()\",\n        \"* Get code of the last occured error.\"\n    ],\n    \"intl_get_error_message\": [\n        \"string intl_get_error_message()\",\n        \"* Get text description of the last occured error.\"\n    ],\n    \"intl_is_failure\": [\n        \"bool intl_is_failure()\",\n        \"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"\n    ],\n    \"intval\": [\n        \"int intval(mixed var [, int base])\",\n        \"Get the integer value of a variable using the optional base for the conversion\"\n    ],\n    \"ip2long\": [\n        \"int ip2long(string ip_address)\",\n        \"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"\n    ],\n    \"iptcembed\": [\n        \"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\n        \"Embed binary IPTC data into a JPEG image.\"\n    ],\n    \"iptcparse\": [\n        \"array iptcparse(string iptcdata)\",\n        \"Parse binary IPTC-data into associative array\"\n    ],\n    \"is_a\": [\n        \"bool is_a(object object, string class_name)\",\n        \"Returns true if the object is of this class or has this class as one of its parents\"\n    ],\n    \"is_array\": [\n        \"bool is_array(mixed var)\",\n        \"Returns true if variable is an array\"\n    ],\n    \"is_bool\": [\n        \"bool is_bool(mixed var)\",\n        \"Returns true if variable is a boolean\"\n    ],\n    \"is_callable\": [\n        \"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\n        \"Returns true if var is callable.\"\n    ],\n    \"is_dir\": [\n        \"bool is_dir(string filename)\",\n        \"Returns true if file is directory\"\n    ],\n    \"is_executable\": [\n        \"bool is_executable(string filename)\",\n        \"Returns true if file is executable\"\n    ],\n    \"is_file\": [\n        \"bool is_file(string filename)\",\n        \"Returns true if file is a regular file\"\n    ],\n    \"is_finite\": [\n        \"bool is_finite(float val)\",\n        \"Returns whether argument is finite\"\n    ],\n    \"is_float\": [\n        \"bool is_float(mixed var)\",\n        \"Returns true if variable is float point\"\n    ],\n    \"is_infinite\": [\n        \"bool is_infinite(float val)\",\n        \"Returns whether argument is infinite\"\n    ],\n    \"is_link\": [\n        \"bool is_link(string filename)\",\n        \"Returns true if file is symbolic link\"\n    ],\n    \"is_long\": [\n        \"bool is_long(mixed var)\",\n        \"Returns true if variable is a long (integer)\"\n    ],\n    \"is_nan\": [\n        \"bool is_nan(float val)\",\n        \"Returns whether argument is not a number\"\n    ],\n    \"is_null\": [\n        \"bool is_null(mixed var)\",\n        \"Returns true if variable is null\"\n    ],\n    \"is_numeric\": [\n        \"bool is_numeric(mixed value)\",\n        \"Returns true if value is a number or a numeric string\"\n    ],\n    \"is_object\": [\n        \"bool is_object(mixed var)\",\n        \"Returns true if variable is an object\"\n    ],\n    \"is_readable\": [\n        \"bool is_readable(string filename)\",\n        \"Returns true if file can be read\"\n    ],\n    \"is_resource\": [\n        \"bool is_resource(mixed var)\",\n        \"Returns true if variable is a resource\"\n    ],\n    \"is_scalar\": [\n        \"bool is_scalar(mixed value)\",\n        \"Returns true if value is a scalar\"\n    ],\n    \"is_string\": [\n        \"bool is_string(mixed var)\",\n        \"Returns true if variable is a string\"\n    ],\n    \"is_subclass_of\": [\n        \"bool is_subclass_of(object object, string class_name)\",\n        \"Returns true if the object has this class as one of its parents\"\n    ],\n    \"is_uploaded_file\": [\n        \"bool is_uploaded_file(string path)\",\n        \"Check if file was created by rfc1867 upload\"\n    ],\n    \"is_writable\": [\n        \"bool is_writable(string filename)\",\n        \"Returns true if file can be written\"\n    ],\n    \"isset\": [\n        \"bool isset(mixed var [, mixed var])\",\n        \"Determine whether a variable is set\"\n    ],\n    \"iterator_apply\": [\n        \"int iterator_apply(Traversable it, mixed function [, mixed params])\",\n        \"Calls a function for every element in an iterator\"\n    ],\n    \"iterator_count\": [\n        \"int iterator_count(Traversable it)\",\n        \"Count the elements in an iterator\"\n    ],\n    \"iterator_to_array\": [\n        \"array iterator_to_array(Traversable it [, bool use_keys = true])\",\n        \"Copy the iterator into an array\"\n    ],\n    \"jddayofweek\": [\n        \"mixed jddayofweek(int juliandaycount [, int mode])\",\n        \"Returns name or number of day of week from julian day count\"\n    ],\n    \"jdmonthname\": [\n        \"string jdmonthname(int juliandaycount, int mode)\",\n        \"Returns name of month for julian day count\"\n    ],\n    \"jdtofrench\": [\n        \"string jdtofrench(int juliandaycount)\",\n        \"Converts a julian day count to a french republic calendar date\"\n    ],\n    \"jdtogregorian\": [\n        \"string jdtogregorian(int juliandaycount)\",\n        \"Converts a julian day count to a gregorian calendar date\"\n    ],\n    \"jdtojewish\": [\n        \"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\n        \"Converts a julian day count to a jewish calendar date\"\n    ],\n    \"jdtojulian\": [\n        \"string jdtojulian(int juliandaycount)\",\n        \"Convert a julian day count to a julian calendar date\"\n    ],\n    \"jdtounix\": [\n        \"int jdtounix(int jday)\",\n        \"Convert Julian Day to UNIX timestamp\"\n    ],\n    \"jewishtojd\": [\n        \"int jewishtojd(int month, int day, int year)\",\n        \"Converts a jewish calendar date to a julian day count\"\n    ],\n    \"join\": [\n        \"string join(array src, string glue)\",\n        \"An alias for implode\"\n    ],\n    \"jpeg2wbmp\": [\n        \"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert JPEG image to WBMP image\"\n    ],\n    \"json_decode\": [\n        \"mixed json_decode(string json [, bool assoc [, long depth]])\",\n        \"Decodes the JSON representation into a PHP value\"\n    ],\n    \"json_encode\": [\n        \"string json_encode(mixed data [, int options])\",\n        \"Returns the JSON representation of a value\"\n    ],\n    \"json_last_error\": [\n        \"int json_last_error()\",\n        \"Returns the error code of the last json_decode().\"\n    ],\n    \"juliantojd\": [\n        \"int juliantojd(int month, int day, int year)\",\n        \"Converts a julian calendar date to julian day count\"\n    ],\n    \"key\": [\n        \"mixed key(array array_arg)\",\n        \"Return the key of the element currently pointed to by the internal array pointer\"\n    ],\n    \"krsort\": [\n        \"bool krsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key value in reverse order\"\n    ],\n    \"ksort\": [\n        \"bool ksort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key\"\n    ],\n    \"lcfirst\": [\n        \"string lcfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"lcg_value\": [\n        \"float lcg_value()\",\n        \"Returns a value from the combined linear congruential generator\"\n    ],\n    \"lchgrp\": [\n        \"bool lchgrp(string filename, mixed group)\",\n        \"Change symlink group\"\n    ],\n    \"ldap_8859_to_t61\": [\n        \"string ldap_8859_to_t61(string value)\",\n        \"Translate 8859 characters to t61 characters\"\n    ],\n    \"ldap_add\": [\n        \"bool ldap_add(resource link, string dn, array entry)\",\n        \"Add entries to LDAP directory\"\n    ],\n    \"ldap_bind\": [\n        \"bool ldap_bind(resource link [, string dn [, string password]])\",\n        \"Bind to LDAP directory\"\n    ],\n    \"ldap_compare\": [\n        \"bool ldap_compare(resource link, string dn, string attr, string value)\",\n        \"Determine if an entry has a specific value for one of its attributes\"\n    ],\n    \"ldap_connect\": [\n        \"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\n        \"Connect to an LDAP server\"\n    ],\n    \"ldap_count_entries\": [\n        \"int ldap_count_entries(resource link, resource result)\",\n        \"Count the number of entries in a search result\"\n    ],\n    \"ldap_delete\": [\n        \"bool ldap_delete(resource link, string dn)\",\n        \"Delete an entry from a directory\"\n    ],\n    \"ldap_dn2ufn\": [\n        \"string ldap_dn2ufn(string dn)\",\n        \"Convert DN to User Friendly Naming format\"\n    ],\n    \"ldap_err2str\": [\n        \"string ldap_err2str(int errno)\",\n        \"Convert error number to error string\"\n    ],\n    \"ldap_errno\": [\n        \"int ldap_errno(resource link)\",\n        \"Get the current ldap error number\"\n    ],\n    \"ldap_error\": [\n        \"string ldap_error(resource link)\",\n        \"Get the current ldap error string\"\n    ],\n    \"ldap_explode_dn\": [\n        \"array ldap_explode_dn(string dn, int with_attrib)\",\n        \"Splits DN into its component parts\"\n    ],\n    \"ldap_first_attribute\": [\n        \"string ldap_first_attribute(resource link, resource result_entry)\",\n        \"Return first attribute\"\n    ],\n    \"ldap_first_entry\": [\n        \"resource ldap_first_entry(resource link, resource result)\",\n        \"Return first result id\"\n    ],\n    \"ldap_first_reference\": [\n        \"resource ldap_first_reference(resource link, resource result)\",\n        \"Return first reference\"\n    ],\n    \"ldap_free_result\": [\n        \"bool ldap_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"ldap_get_attributes\": [\n        \"array ldap_get_attributes(resource link, resource result_entry)\",\n        \"Get attributes from a search result entry\"\n    ],\n    \"ldap_get_dn\": [\n        \"string ldap_get_dn(resource link, resource result_entry)\",\n        \"Get the DN of a result entry\"\n    ],\n    \"ldap_get_entries\": [\n        \"array ldap_get_entries(resource link, resource result)\",\n        \"Get all result entries\"\n    ],\n    \"ldap_get_option\": [\n        \"bool ldap_get_option(resource link, int option, mixed retval)\",\n        \"Get the current value of various session-wide parameters\"\n    ],\n    \"ldap_get_values_len\": [\n        \"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\n        \"Get all values with lengths from a result entry\"\n    ],\n    \"ldap_list\": [\n        \"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Single-level search\"\n    ],\n    \"ldap_mod_add\": [\n        \"bool ldap_mod_add(resource link, string dn, array entry)\",\n        \"Add attribute values to current\"\n    ],\n    \"ldap_mod_del\": [\n        \"bool ldap_mod_del(resource link, string dn, array entry)\",\n        \"Delete attribute values\"\n    ],\n    \"ldap_mod_replace\": [\n        \"bool ldap_mod_replace(resource link, string dn, array entry)\",\n        \"Replace attribute values with new ones\"\n    ],\n    \"ldap_next_attribute\": [\n        \"string ldap_next_attribute(resource link, resource result_entry)\",\n        \"Get the next attribute in result\"\n    ],\n    \"ldap_next_entry\": [\n        \"resource ldap_next_entry(resource link, resource result_entry)\",\n        \"Get next result entry\"\n    ],\n    \"ldap_next_reference\": [\n        \"resource ldap_next_reference(resource link, resource reference_entry)\",\n        \"Get next reference\"\n    ],\n    \"ldap_parse_reference\": [\n        \"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\n        \"Extract information from reference entry\"\n    ],\n    \"ldap_parse_result\": [\n        \"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\n        \"Extract information from result\"\n    ],\n    \"ldap_read\": [\n        \"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Read an entry\"\n    ],\n    \"ldap_rename\": [\n        \"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\n        \"Modify the name of an entry\"\n    ],\n    \"ldap_sasl_bind\": [\n        \"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\n        \"Bind to LDAP directory using SASL\"\n    ],\n    \"ldap_search\": [\n        \"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Search LDAP tree under base_dn\"\n    ],\n    \"ldap_set_option\": [\n        \"bool ldap_set_option(resource link, int option, mixed newval)\",\n        \"Set the value of various session-wide parameters\"\n    ],\n    \"ldap_set_rebind_proc\": [\n        \"bool ldap_set_rebind_proc(resource link, string callback)\",\n        \"Set a callback function to do re-binds on referral chasing.\"\n    ],\n    \"ldap_sort\": [\n        \"bool ldap_sort(resource link, resource result, string sortfilter)\",\n        \"Sort LDAP result entries\"\n    ],\n    \"ldap_start_tls\": [\n        \"bool ldap_start_tls(resource link)\",\n        \"Start TLS\"\n    ],\n    \"ldap_t61_to_8859\": [\n        \"string ldap_t61_to_8859(string value)\",\n        \"Translate t61 characters to 8859 characters\"\n    ],\n    \"ldap_unbind\": [\n        \"bool ldap_unbind(resource link)\",\n        \"Unbind from LDAP directory\"\n    ],\n    \"leak\": [\n        \"void leak(int num_bytes=3)\",\n        \"Cause an intentional memory leak, for testing/debugging purposes\"\n    ],\n    \"levenshtein\": [\n        \"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\n        \"Calculate Levenshtein distance between two strings\"\n    ],\n    \"libxml_clear_errors\": [\n        \"void libxml_clear_errors()\",\n        \"Clear last error from libxml\"\n    ],\n    \"libxml_disable_entity_loader\": [\n        \"bool libxml_disable_entity_loader([boolean disable])\",\n        \"Disable/Enable ability to load external entities\"\n    ],\n    \"libxml_get_errors\": [\n        \"object libxml_get_errors()\",\n        \"Retrieve array of errors\"\n    ],\n    \"libxml_get_last_error\": [\n        \"object libxml_get_last_error()\",\n        \"Retrieve last error from libxml\"\n    ],\n    \"libxml_set_streams_context\": [\n        \"void libxml_set_streams_context(resource streams_context)\",\n        \"Set the streams context for the next libxml document load or write\"\n    ],\n    \"libxml_use_internal_errors\": [\n        \"bool libxml_use_internal_errors([boolean use_errors])\",\n        \"Disable libxml errors and allow user to fetch error information as needed\"\n    ],\n    \"link\": [\n        \"int link(string target, string link)\",\n        \"Create a hard link\"\n    ],\n    \"linkinfo\": [\n        \"int linkinfo(string filename)\",\n        \"Returns the st_dev field of the UNIX C stat structure describing the link\"\n    ],\n    \"litespeed_request_headers\": [\n        \"array litespeed_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"litespeed_response_headers\": [\n        \"array litespeed_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"locale_accept_from_http\": [\n        \"string locale_accept_from_http(string $http_accept)\",\n        null\n    ],\n    \"locale_canonicalize\": [\n        \"static string locale_canonicalize(Locale $loc, string $locale)\",\n        \"* @param string $locale The locale string to canonicalize\"\n    ],\n    \"locale_filter_matches\": [\n        \"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\n        \"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"\n    ],\n    \"locale_get_all_variants\": [\n        \"static array locale_get_all_variants($locale)\",\n        \"* gets an array containing the list of variants, or null\"\n    ],\n    \"locale_get_default\": [\n        \"static string locale_get_default( )\",\n        \"Get default locale\"\n    ],\n    \"locale_get_keywords\": [\n        \"static array locale_get_keywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"\n    ],\n    \"locale_get_primary_language\": [\n        \"static string locale_get_primary_language($locale)\",\n        \"* gets the primary language for the $locale\"\n    ],\n    \"locale_get_region\": [\n        \"static string locale_get_region($locale)\",\n        \"* gets the region for the $locale\"\n    ],\n    \"locale_get_script\": [\n        \"static string locale_get_script($locale)\",\n        \"* gets the script for the $locale\"\n    ],\n    \"locale_lookup\": [\n        \"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\n        \"* Searchs the items in $langtag for the best match to the language * range\"\n    ],\n    \"locale_set_default\": [\n        \"static string locale_set_default( string $locale )\",\n        \"Set default locale\"\n    ],\n    \"localeconv\": [\n        \"array localeconv(void)\",\n        \"Returns numeric formatting information based on the current locale\"\n    ],\n    \"localtime\": [\n        \"array localtime([int timestamp [, bool associative_array]])\",\n        \"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"\n    ],\n    \"log\": [\n        \"float log(float number, [float base])\",\n        \"Returns the natural logarithm of the number, or the base log if base is specified\"\n    ],\n    \"log10\": [\n        \"float log10(float number)\",\n        \"Returns the base-10 logarithm of the number\"\n    ],\n    \"log1p\": [\n        \"float log1p(float number)\",\n        \"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"long2ip\": [\n        \"string long2ip(int proper_address)\",\n        \"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"\n    ],\n    \"lstat\": [\n        \"array lstat(string filename)\",\n        \"Give information about a file or symbolic link\"\n    ],\n    \"ltrim\": [\n        \"string ltrim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning of a string\"\n    ],\n    \"mail\": [\n        \"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"Send an email message\"\n    ],\n    \"max\": [\n        \"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the highest value in an array or a series of arguments\"\n    ],\n    \"mb_check_encoding\": [\n        \"bool mb_check_encoding([string var[, string encoding]])\",\n        \"Check if the string is valid for the specified encoding\"\n    ],\n    \"mb_convert_case\": [\n        \"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\n        \"Returns a case-folded version of sourcestring\"\n    ],\n    \"mb_convert_encoding\": [\n        \"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\n        \"Returns converted string in desired encoding\"\n    ],\n    \"mb_convert_kana\": [\n        \"string mb_convert_kana(string str [, string option] [, string encoding])\",\n        \"Conversion between full-width character and half-width character (Japanese)\"\n    ],\n    \"mb_convert_variables\": [\n        \"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\n        \"Converts the string resource in variables to desired encoding\"\n    ],\n    \"mb_decode_mimeheader\": [\n        \"string mb_decode_mimeheader(string string)\",\n        \"Decodes the MIME \\\"encoded-word\\\" in the string\"\n    ],\n    \"mb_decode_numericentity\": [\n        \"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts HTML numeric entities to character code\"\n    ],\n    \"mb_detect_encoding\": [\n        \"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\n        \"Encodings of the given string is returned (as a string)\"\n    ],\n    \"mb_detect_order\": [\n        \"bool|array mb_detect_order([mixed encoding-list])\",\n        \"Sets the current detect_order or Return the current detect_order as a array\"\n    ],\n    \"mb_encode_mimeheader\": [\n        \"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",\n        \"Converts the string to MIME \\\"encoded-word\\\" in the format of =?charset?(B|Q)?encoded_string?=\"\n    ],\n    \"mb_encode_numericentity\": [\n        \"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts specified characters to HTML numeric entities\"\n    ],\n    \"mb_encoding_aliases\": [\n        \"array mb_encoding_aliases(string encoding)\",\n        \"Returns an array of the aliases of a given encoding name\"\n    ],\n    \"mb_ereg\": [\n        \"int mb_ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_match\": [\n        \"bool mb_ereg_match(string pattern, string string [,string option])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_replace\": [\n        \"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\n        \"Replace regular expression for multibyte string\"\n    ],\n    \"mb_ereg_search\": [\n        \"bool mb_ereg_search([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_getpos\": [\n        \"int mb_ereg_search_getpos(void)\",\n        \"Get search start position\"\n    ],\n    \"mb_ereg_search_getregs\": [\n        \"array mb_ereg_search_getregs(void)\",\n        \"Get matched substring of the last time\"\n    ],\n    \"mb_ereg_search_init\": [\n        \"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\n        \"Initialize string and regular expression for search.\"\n    ],\n    \"mb_ereg_search_pos\": [\n        \"array mb_ereg_search_pos([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_regs\": [\n        \"array mb_ereg_search_regs([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_setpos\": [\n        \"bool mb_ereg_search_setpos(int position)\",\n        \"Set search start position\"\n    ],\n    \"mb_eregi\": [\n        \"int mb_eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match for multibyte string\"\n    ],\n    \"mb_eregi_replace\": [\n        \"string mb_eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression for multibyte string\"\n    ],\n    \"mb_get_info\": [\n        \"mixed mb_get_info([string type])\",\n        \"Returns the current settings of mbstring\"\n    ],\n    \"mb_http_input\": [\n        \"mixed mb_http_input([string type])\",\n        \"Returns the input encoding\"\n    ],\n    \"mb_http_output\": [\n        \"string mb_http_output([string encoding])\",\n        \"Sets the current output_encoding or returns the current output_encoding as a string\"\n    ],\n    \"mb_internal_encoding\": [\n        \"string mb_internal_encoding([string encoding])\",\n        \"Sets the current internal encoding or Returns the current internal encoding as a string\"\n    ],\n    \"mb_language\": [\n        \"string mb_language([string language])\",\n        \"Sets the current language or Returns the current language as a string\"\n    ],\n    \"mb_list_encodings\": [\n        \"mixed mb_list_encodings()\",\n        \"Returns an array of all supported entity encodings\"\n    ],\n    \"mb_output_handler\": [\n        \"string mb_output_handler(string contents, int status)\",\n        \"Returns string in output buffer converted to the http_output encoding\"\n    ],\n    \"mb_parse_str\": [\n        \"bool mb_parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"mb_preferred_mime_name\": [\n        \"string mb_preferred_mime_name(string encoding)\",\n        \"Return the preferred MIME name (charset) as a string\"\n    ],\n    \"mb_regex_encoding\": [\n        \"string mb_regex_encoding([string encoding])\",\n        \"Returns the current encoding for regex as a string.\"\n    ],\n    \"mb_regex_set_options\": [\n        \"string mb_regex_set_options([string options])\",\n        \"Set or get the default options for mbregex functions\"\n    ],\n    \"mb_send_mail\": [\n        \"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"*  Sends an email message with MIME scheme\"\n    ],\n    \"mb_split\": [\n        \"array mb_split(string pattern, string string [, int limit])\",\n        \"split multibyte string into array by regular expression\"\n    ],\n    \"mb_strcut\": [\n        \"string mb_strcut(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_strimwidth\": [\n        \"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\n        \"Trim the string in terminal width\"\n    ],\n    \"mb_stripos\": [\n        \"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_stristr\": [\n        \"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strlen\": [\n        \"int mb_strlen(string str [, string encoding])\",\n        \"Get character numbers of a string\"\n    ],\n    \"mb_strpos\": [\n        \"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"mb_strrchr\": [\n        \"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"mb_strrichr\": [\n        \"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another, case insensitive\"\n    ],\n    \"mb_strripos\": [\n        \"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of last occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strrpos\": [\n        \"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"mb_strstr\": [\n        \"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"mb_strtolower\": [\n        \"string mb_strtolower(string sourcestring [, string encoding])\",\n        \"*  Returns a lowercased version of sourcestring\"\n    ],\n    \"mb_strtoupper\": [\n        \"string mb_strtoupper(string sourcestring [, string encoding])\",\n        \"*  Returns a uppercased version of sourcestring\"\n    ],\n    \"mb_strwidth\": [\n        \"int mb_strwidth(string str [, string encoding])\",\n        \"Gets terminal width of a string\"\n    ],\n    \"mb_substitute_character\": [\n        \"mixed mb_substitute_character([mixed substchar])\",\n        \"Sets the current substitute_character or returns the current substitute_character\"\n    ],\n    \"mb_substr\": [\n        \"string mb_substr(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_substr_count\": [\n        \"int mb_substr_count(string haystack, string needle [, string encoding])\",\n        \"Count the number of substring occurrences\"\n    ],\n    \"mcrypt_cbc\": [\n        \"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\n        \"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_cfb\": [\n        \"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\n        \"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_create_iv\": [\n        \"string mcrypt_create_iv(int size, int source)\",\n        \"Create an initialization vector (IV)\"\n    ],\n    \"mcrypt_decrypt\": [\n        \"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_ecb\": [\n        \"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\n        \"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_enc_get_algorithms_name\": [\n        \"string mcrypt_enc_get_algorithms_name(resource td)\",\n        \"Returns the name of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_block_size\": [\n        \"int mcrypt_enc_get_block_size(resource td)\",\n        \"Returns the block size of the cipher specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_iv_size\": [\n        \"int mcrypt_enc_get_iv_size(resource td)\",\n        \"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_key_size\": [\n        \"int mcrypt_enc_get_key_size(resource td)\",\n        \"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_modes_name\": [\n        \"string mcrypt_enc_get_modes_name(resource td)\",\n        \"Returns the name of the mode specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_supported_key_sizes\": [\n        \"array mcrypt_enc_get_supported_key_sizes(resource td)\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_enc_is_block_algorithm\": [\n        \"bool mcrypt_enc_is_block_algorithm(resource td)\",\n        \"Returns TRUE if the alrogithm is a block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_algorithm_mode\": [\n        \"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_mode\": [\n        \"bool mcrypt_enc_is_block_mode(resource td)\",\n        \"Returns TRUE if the mode outputs blocks\"\n    ],\n    \"mcrypt_enc_self_test\": [\n        \"int mcrypt_enc_self_test(resource td)\",\n        \"This function runs the self test on the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_encrypt\": [\n        \"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_generic\": [\n        \"string mcrypt_generic(resource td, string data)\",\n        \"This function encrypts the plaintext\"\n    ],\n    \"mcrypt_generic_deinit\": [\n        \"bool mcrypt_generic_deinit(resource td)\",\n        \"This function terminates encrypt specified by the descriptor td\"\n    ],\n    \"mcrypt_generic_init\": [\n        \"int mcrypt_generic_init(resource td, string key, string iv)\",\n        \"This function initializes all buffers for the specific module\"\n    ],\n    \"mcrypt_get_block_size\": [\n        \"int mcrypt_get_block_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_cipher_name\": [\n        \"string mcrypt_get_cipher_name(string cipher)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_iv_size\": [\n        \"int mcrypt_get_iv_size(string cipher, string module)\",\n        \"Get the IV size of cipher (Usually the same as the blocksize)\"\n    ],\n    \"mcrypt_get_key_size\": [\n        \"int mcrypt_get_key_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_list_algorithms\": [\n        \"array mcrypt_list_algorithms([string lib_dir])\",\n        \"List all algorithms in \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_list_modes\": [\n        \"array mcrypt_list_modes([string lib_dir])\",\n        \"List all modes \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_module_close\": [\n        \"bool mcrypt_module_close(resource td)\",\n        \"Free the descriptor td\"\n    ],\n    \"mcrypt_module_get_algo_block_size\": [\n        \"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\n        \"Returns the block size of the algorithm\"\n    ],\n    \"mcrypt_module_get_algo_key_size\": [\n        \"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\n        \"Returns the maximum supported key size of the algorithm\"\n    ],\n    \"mcrypt_module_get_supported_key_sizes\": [\n        \"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_module_is_block_algorithm\": [\n        \"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\n        \"Returns TRUE if the algorithm is a block algorithm\"\n    ],\n    \"mcrypt_module_is_block_algorithm_mode\": [\n        \"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_module_is_block_mode\": [\n        \"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode outputs blocks of bytes\"\n    ],\n    \"mcrypt_module_open\": [\n        \"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\n        \"Opens the module of the algorithm and the mode to be used\"\n    ],\n    \"mcrypt_module_self_test\": [\n        \"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",\n        \"Does a self test of the module \\\"module\\\"\"\n    ],\n    \"mcrypt_ofb\": [\n        \"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"md5\": [\n        \"string md5(string str, [ bool raw_output])\",\n        \"Calculate the md5 hash of a string\"\n    ],\n    \"md5_file\": [\n        \"string md5_file(string filename [, bool raw_output])\",\n        \"Calculate the md5 hash of given filename\"\n    ],\n    \"mdecrypt_generic\": [\n        \"string mdecrypt_generic(resource td, string data)\",\n        \"This function decrypts the plaintext\"\n    ],\n    \"memory_get_peak_usage\": [\n        \"int memory_get_peak_usage([real_usage])\",\n        \"Returns the peak allocated by PHP memory\"\n    ],\n    \"memory_get_usage\": [\n        \"int memory_get_usage([real_usage])\",\n        \"Returns the allocated by PHP memory\"\n    ],\n    \"metaphone\": [\n        \"string metaphone(string text[, int phones])\",\n        \"Break english phrases down into their phonemes\"\n    ],\n    \"method_exists\": [\n        \"bool method_exists(object object, string method)\",\n        \"Checks if the class method exists\"\n    ],\n    \"mhash\": [\n        \"string mhash(int hash, string data [, string key])\",\n        \"Hash data with hash\"\n    ],\n    \"mhash_count\": [\n        \"int mhash_count(void)\",\n        \"Gets the number of available hashes\"\n    ],\n    \"mhash_get_block_size\": [\n        \"int mhash_get_block_size(int hash)\",\n        \"Gets the block size of hash\"\n    ],\n    \"mhash_get_hash_name\": [\n        \"string mhash_get_hash_name(int hash)\",\n        \"Gets the name of hash\"\n    ],\n    \"mhash_keygen_s2k\": [\n        \"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\n        \"Generates a key using hash functions\"\n    ],\n    \"microtime\": [\n        \"mixed microtime([bool get_as_float])\",\n        \"Returns either a string or a float containing the current time in seconds and microseconds\"\n    ],\n    \"mime_content_type\": [\n        \"string mime_content_type(string filename|resource stream)\",\n        \"Return content-type for file\"\n    ],\n    \"min\": [\n        \"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the lowest value in an array or a series of arguments\"\n    ],\n    \"mkdir\": [\n        \"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\n        \"Create a directory\"\n    ],\n    \"mktime\": [\n        \"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a date\"\n    ],\n    \"money_format\": [\n        \"string money_format(string format , float value)\",\n        \"Convert monetary value(s) to string\"\n    ],\n    \"move_uploaded_file\": [\n        \"bool move_uploaded_file(string path, string new_path)\",\n        \"Move a file if and only if it was created by an upload\"\n    ],\n    \"msg_get_queue\": [\n        \"resource msg_get_queue(int key [, int perms])\",\n        \"Attach to a message queue\"\n    ],\n    \"msg_queue_exists\": [\n        \"bool msg_queue_exists(int key)\",\n        \"Check whether a message queue exists\"\n    ],\n    \"msg_receive\": [\n        \"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_remove_queue\": [\n        \"bool msg_remove_queue(resource queue)\",\n        \"Destroy the queue\"\n    ],\n    \"msg_send\": [\n        \"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_set_queue\": [\n        \"bool msg_set_queue(resource queue, array data)\",\n        \"Set information for a message queue\"\n    ],\n    \"msg_stat_queue\": [\n        \"array msg_stat_queue(resource queue)\",\n        \"Returns information about a message queue\"\n    ],\n    \"msgfmt_create\": [\n        \"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\n        \"* Create formatter.\"\n    ],\n    \"msgfmt_format\": [\n        \"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_format_message\": [\n        \"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_get_error_code\": [\n        \"int msgfmt_get_error_code( MessageFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"msgfmt_get_error_message\": [\n        \"string msgfmt_get_error_message( MessageFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"msgfmt_get_locale\": [\n        \"string msgfmt_get_locale(MessageFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"msgfmt_get_pattern\": [\n        \"string msgfmt_get_pattern( MessageFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"msgfmt_parse\": [\n        \"array msgfmt_parse( MessageFormatter $nf, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"msgfmt_set_pattern\": [\n        \"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"mssql_bind\": [\n        \"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\n        \"Adds a parameter to a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_close\": [\n        \"bool mssql_close([resource conn_id])\",\n        \"Closes a connection to a MS-SQL server\"\n    ],\n    \"mssql_connect\": [\n        \"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a connection to a MS-SQL server\"\n    ],\n    \"mssql_data_seek\": [\n        \"bool mssql_data_seek(resource result_id, int offset)\",\n        \"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"\n    ],\n    \"mssql_execute\": [\n        \"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\n        \"Executes a stored procedure on a MS-SQL server database\"\n    ],\n    \"mssql_fetch_array\": [\n        \"array mssql_fetch_array(resource result_id [, int result_type])\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_assoc\": [\n        \"array mssql_fetch_assoc(resource result_id)\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_batch\": [\n        \"int mssql_fetch_batch(resource result_index)\",\n        \"Returns the next batch of records\"\n    ],\n    \"mssql_fetch_field\": [\n        \"object mssql_fetch_field(resource result_id [, int offset])\",\n        \"Gets information about certain fields in a query result\"\n    ],\n    \"mssql_fetch_object\": [\n        \"object mssql_fetch_object(resource result_id)\",\n        \"Returns a pseudo-object of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_row\": [\n        \"array mssql_fetch_row(resource result_id)\",\n        \"Returns an array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_field_length\": [\n        \"int mssql_field_length(resource result_id [, int offset])\",\n        \"Get the length of a MS-SQL field\"\n    ],\n    \"mssql_field_name\": [\n        \"string mssql_field_name(resource result_id [, int offset])\",\n        \"Returns the name of the field given by offset in the result set given by result_id\"\n    ],\n    \"mssql_field_seek\": [\n        \"bool mssql_field_seek(resource result_id, int offset)\",\n        \"Seeks to the specified field offset\"\n    ],\n    \"mssql_field_type\": [\n        \"string mssql_field_type(resource result_id [, int offset])\",\n        \"Returns the type of a field\"\n    ],\n    \"mssql_free_result\": [\n        \"bool mssql_free_result(resource result_index)\",\n        \"Free a MS-SQL result index\"\n    ],\n    \"mssql_free_statement\": [\n        \"bool mssql_free_statement(resource result_index)\",\n        \"Free a MS-SQL statement index\"\n    ],\n    \"mssql_get_last_message\": [\n        \"string mssql_get_last_message(void)\",\n        \"Gets the last message from the MS-SQL server\"\n    ],\n    \"mssql_guid_string\": [\n        \"string mssql_guid_string(string binary [,bool short_format])\",\n        \"Converts a 16 byte binary GUID to a string\"\n    ],\n    \"mssql_init\": [\n        \"int mssql_init(string sp_name [, resource conn_id])\",\n        \"Initializes a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_min_error_severity\": [\n        \"void mssql_min_error_severity(int severity)\",\n        \"Sets the lower error severity\"\n    ],\n    \"mssql_min_message_severity\": [\n        \"void mssql_min_message_severity(int severity)\",\n        \"Sets the lower message severity\"\n    ],\n    \"mssql_next_result\": [\n        \"bool mssql_next_result(resource result_id)\",\n        \"Move the internal result pointer to the next result\"\n    ],\n    \"mssql_num_fields\": [\n        \"int mssql_num_fields(resource mssql_result_index)\",\n        \"Returns the number of fields fetched in from the result id specified\"\n    ],\n    \"mssql_num_rows\": [\n        \"int mssql_num_rows(resource mssql_result_index)\",\n        \"Returns the number of rows fetched in from the result id specified\"\n    ],\n    \"mssql_pconnect\": [\n        \"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a persistent connection to a MS-SQL server\"\n    ],\n    \"mssql_query\": [\n        \"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\n        \"Perform an SQL query on a MS-SQL server database\"\n    ],\n    \"mssql_result\": [\n        \"string mssql_result(resource result_id, int row, mixed field)\",\n        \"Returns the contents of one cell from a MS-SQL result set\"\n    ],\n    \"mssql_rows_affected\": [\n        \"int mssql_rows_affected(resource conn_id)\",\n        \"Returns the number of records affected by the query\"\n    ],\n    \"mssql_select_db\": [\n        \"bool mssql_select_db(string database_name [, resource conn_id])\",\n        \"Select a MS-SQL database\"\n    ],\n    \"mt_getrandmax\": [\n        \"int mt_getrandmax(void)\",\n        \"Returns the maximum value a random number from Mersenne Twister can have\"\n    ],\n    \"mt_rand\": [\n        \"int mt_rand([int min, int max])\",\n        \"Returns a random number from Mersenne Twister\"\n    ],\n    \"mt_srand\": [\n        \"void mt_srand([int seed])\",\n        \"Seeds Mersenne Twister random number generator\"\n    ],\n    \"mysql_affected_rows\": [\n        \"int mysql_affected_rows([int link_identifier])\",\n        \"Gets number of affected rows in previous MySQL operation\"\n    ],\n    \"mysql_client_encoding\": [\n        \"string mysql_client_encoding([int link_identifier])\",\n        \"Returns the default character set for the current connection\"\n    ],\n    \"mysql_close\": [\n        \"bool mysql_close([int link_identifier])\",\n        \"Close a MySQL connection\"\n    ],\n    \"mysql_connect\": [\n        \"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\n        \"Opens a connection to a MySQL Server\"\n    ],\n    \"mysql_create_db\": [\n        \"bool mysql_create_db(string database_name [, int link_identifier])\",\n        \"Create a MySQL database\"\n    ],\n    \"mysql_data_seek\": [\n        \"bool mysql_data_seek(resource result, int row_number)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysql_db_query\": [\n        \"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_drop_db\": [\n        \"bool mysql_drop_db(string database_name [, int link_identifier])\",\n        \"Drops (delete) a MySQL database\"\n    ],\n    \"mysql_errno\": [\n        \"int mysql_errno([int link_identifier])\",\n        \"Returns the number of the error message from previous MySQL operation\"\n    ],\n    \"mysql_error\": [\n        \"string mysql_error([int link_identifier])\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysql_escape_string\": [\n        \"string mysql_escape_string(string to_be_escaped)\",\n        \"Escape string for mysql query\"\n    ],\n    \"mysql_fetch_array\": [\n        \"array mysql_fetch_array(resource result [, int result_type])\",\n        \"Fetch a result row as an array (associative, numeric or both)\"\n    ],\n    \"mysql_fetch_assoc\": [\n        \"array mysql_fetch_assoc(resource result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysql_fetch_field\": [\n        \"object mysql_fetch_field(resource result [, int field_offset])\",\n        \"Gets column information from a result and return as an object\"\n    ],\n    \"mysql_fetch_lengths\": [\n        \"array mysql_fetch_lengths(resource result)\",\n        \"Gets max data size of each column in a result\"\n    ],\n    \"mysql_fetch_object\": [\n        \"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysql_fetch_row\": [\n        \"array mysql_fetch_row(resource result)\",\n        \"Gets a result row as an enumerated array\"\n    ],\n    \"mysql_field_flags\": [\n        \"string mysql_field_flags(resource result, int field_offset)\",\n        \"Gets the flags associated with the specified field in a result\"\n    ],\n    \"mysql_field_len\": [\n        \"int mysql_field_len(resource result, int field_offset)\",\n        \"Returns the length of the specified field\"\n    ],\n    \"mysql_field_name\": [\n        \"string mysql_field_name(resource result, int field_index)\",\n        \"Gets the name of the specified field in a result\"\n    ],\n    \"mysql_field_seek\": [\n        \"bool mysql_field_seek(resource result, int field_offset)\",\n        \"Sets result pointer to a specific field offset\"\n    ],\n    \"mysql_field_table\": [\n        \"string mysql_field_table(resource result, int field_offset)\",\n        \"Gets name of the table the specified field is in\"\n    ],\n    \"mysql_field_type\": [\n        \"string mysql_field_type(resource result, int field_offset)\",\n        \"Gets the type of the specified field in a result\"\n    ],\n    \"mysql_free_result\": [\n        \"bool mysql_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"mysql_get_client_info\": [\n        \"string mysql_get_client_info(void)\",\n        \"Returns a string that represents the client library version\"\n    ],\n    \"mysql_get_host_info\": [\n        \"string mysql_get_host_info([int link_identifier])\",\n        \"Returns a string describing the type of connection in use, including the server host name\"\n    ],\n    \"mysql_get_proto_info\": [\n        \"int mysql_get_proto_info([int link_identifier])\",\n        \"Returns the protocol version used by current connection\"\n    ],\n    \"mysql_get_server_info\": [\n        \"string mysql_get_server_info([int link_identifier])\",\n        \"Returns a string that represents the server version number\"\n    ],\n    \"mysql_info\": [\n        \"string mysql_info([int link_identifier])\",\n        \"Returns a string containing information about the most recent query\"\n    ],\n    \"mysql_insert_id\": [\n        \"int mysql_insert_id([int link_identifier])\",\n        \"Gets the ID generated from the previous INSERT operation\"\n    ],\n    \"mysql_list_dbs\": [\n        \"resource mysql_list_dbs([int link_identifier])\",\n        \"List databases available on a MySQL server\"\n    ],\n    \"mysql_list_fields\": [\n        \"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\n        \"List MySQL result fields\"\n    ],\n    \"mysql_list_processes\": [\n        \"resource mysql_list_processes([int link_identifier])\",\n        \"Returns a result set describing the current server threads\"\n    ],\n    \"mysql_list_tables\": [\n        \"resource mysql_list_tables(string database_name [, int link_identifier])\",\n        \"List tables in a MySQL database\"\n    ],\n    \"mysql_num_fields\": [\n        \"int mysql_num_fields(resource result)\",\n        \"Gets number of fields in a result\"\n    ],\n    \"mysql_num_rows\": [\n        \"int mysql_num_rows(resource result)\",\n        \"Gets number of rows in a result\"\n    ],\n    \"mysql_pconnect\": [\n        \"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\n        \"Opens a persistent connection to a MySQL Server\"\n    ],\n    \"mysql_ping\": [\n        \"bool mysql_ping([int link_identifier])\",\n        \"Ping a server connection. If no connection then reconnect.\"\n    ],\n    \"mysql_query\": [\n        \"resource mysql_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_real_escape_string\": [\n        \"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\n        \"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysql_result\": [\n        \"mixed mysql_result(resource result, int row [, mixed field])\",\n        \"Gets result data\"\n    ],\n    \"mysql_select_db\": [\n        \"bool mysql_select_db(string database_name [, int link_identifier])\",\n        \"Selects a MySQL database\"\n    ],\n    \"mysql_set_charset\": [\n        \"bool mysql_set_charset(string csname [, int link_identifier])\",\n        \"sets client character set\"\n    ],\n    \"mysql_stat\": [\n        \"string mysql_stat([int link_identifier])\",\n        \"Returns a string containing status information\"\n    ],\n    \"mysql_thread_id\": [\n        \"int mysql_thread_id([int link_identifier])\",\n        \"Returns the thread id of current connection\"\n    ],\n    \"mysql_unbuffered_query\": [\n        \"resource mysql_unbuffered_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL, without fetching and buffering the result rows\"\n    ],\n    \"mysqli_affected_rows\": [\n        \"mixed mysqli_affected_rows(object link)\",\n        \"Get number of affected rows in previous MySQL operation\"\n    ],\n    \"mysqli_autocommit\": [\n        \"bool mysqli_autocommit(object link, bool mode)\",\n        \"Turn auto commit on or of\"\n    ],\n    \"mysqli_cache_stats\": [\n        \"array mysqli_cache_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_change_user\": [\n        \"bool mysqli_change_user(object link, string user, string password, string database)\",\n        \"Change logged-in user of the active connection\"\n    ],\n    \"mysqli_character_set_name\": [\n        \"string mysqli_character_set_name(object link)\",\n        \"Returns the name of the character set used for this connection\"\n    ],\n    \"mysqli_close\": [\n        \"bool mysqli_close(object link)\",\n        \"Close connection\"\n    ],\n    \"mysqli_commit\": [\n        \"bool mysqli_commit(object link)\",\n        \"Commit outstanding actions and close transaction\"\n    ],\n    \"mysqli_connect\": [\n        \"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_connect_errno\": [\n        \"int mysqli_connect_errno(void)\",\n        \"Returns the numerical value of the error message from last connect command\"\n    ],\n    \"mysqli_connect_error\": [\n        \"string mysqli_connect_error(void)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_data_seek\": [\n        \"bool mysqli_data_seek(object result, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_debug\": [\n        \"void mysqli_debug(string debug)\",\n        \"\"\n    ],\n    \"mysqli_dump_debug_info\": [\n        \"bool mysqli_dump_debug_info(object link)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_end\": [\n        \"void mysqli_embedded_server_end(void)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_start\": [\n        \"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\n        \"initialize and start embedded server\"\n    ],\n    \"mysqli_errno\": [\n        \"int mysqli_errno(object link)\",\n        \"Returns the numerical value of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_error\": [\n        \"string mysqli_error(object link)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_fetch_all\": [\n        \"mixed mysqli_fetch_all (object result [,int resulttype])\",\n        \"Fetches all result rows as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_array\": [\n        \"mixed mysqli_fetch_array (object result [,int resulttype])\",\n        \"Fetch a result row as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_assoc\": [\n        \"mixed mysqli_fetch_assoc (object result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysqli_fetch_field\": [\n        \"mixed mysqli_fetch_field (object result)\",\n        \"Get column information from a result and return as an object\"\n    ],\n    \"mysqli_fetch_field_direct\": [\n        \"mixed mysqli_fetch_field_direct (object result, int offset)\",\n        \"Fetch meta-data for a single field\"\n    ],\n    \"mysqli_fetch_fields\": [\n        \"mixed mysqli_fetch_fields (object result)\",\n        \"Return array of objects containing field meta-data\"\n    ],\n    \"mysqli_fetch_lengths\": [\n        \"mixed mysqli_fetch_lengths (object result)\",\n        \"Get the length of each output in a result\"\n    ],\n    \"mysqli_fetch_object\": [\n        \"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysqli_fetch_row\": [\n        \"array mysqli_fetch_row (object result)\",\n        \"Get a result row as an enumerated array\"\n    ],\n    \"mysqli_field_count\": [\n        \"int mysqli_field_count(object link)\",\n        \"Fetch the number of fields returned by the last query for the given link\"\n    ],\n    \"mysqli_field_seek\": [\n        \"int mysqli_field_seek(object result, int fieldnr)\",\n        \"Set result pointer to a specified field offset\"\n    ],\n    \"mysqli_field_tell\": [\n        \"int mysqli_field_tell(object result)\",\n        \"Get current field offset of result pointer\"\n    ],\n    \"mysqli_free_result\": [\n        \"void mysqli_free_result(object result)\",\n        \"Free query result memory for the given result handle\"\n    ],\n    \"mysqli_get_charset\": [\n        \"object mysqli_get_charset(object link)\",\n        \"returns a character set object\"\n    ],\n    \"mysqli_get_client_info\": [\n        \"string mysqli_get_client_info(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_client_stats\": [\n        \"array mysqli_get_client_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_client_version\": [\n        \"int mysqli_get_client_version(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_connection_stats\": [\n        \"array mysqli_get_connection_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_host_info\": [\n        \"string mysqli_get_host_info (object link)\",\n        \"Get MySQL host info\"\n    ],\n    \"mysqli_get_proto_info\": [\n        \"int mysqli_get_proto_info(object link)\",\n        \"Get MySQL protocol information\"\n    ],\n    \"mysqli_get_server_info\": [\n        \"string mysqli_get_server_info(object link)\",\n        \"Get MySQL server info\"\n    ],\n    \"mysqli_get_server_version\": [\n        \"int mysqli_get_server_version(object link)\",\n        \"Return the MySQL version for the server referenced by the given link\"\n    ],\n    \"mysqli_get_warnings\": [\n        \"object mysqli_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}\"\n    ],\n    \"mysqli_info\": [\n        \"string mysqli_info(object link)\",\n        \"Get information about the most recent query\"\n    ],\n    \"mysqli_init\": [\n        \"resource mysqli_init(void)\",\n        \"Initialize mysqli and return a resource for use with mysql_real_connect\"\n    ],\n    \"mysqli_insert_id\": [\n        \"mixed mysqli_insert_id(object link)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_kill\": [\n        \"bool mysqli_kill(object link, int processid)\",\n        \"Kill a mysql process on the server\"\n    ],\n    \"mysqli_link_construct\": [\n        \"object mysqli_link_construct()\",\n        \"\"\n    ],\n    \"mysqli_more_results\": [\n        \"bool mysqli_more_results(object link)\",\n        \"check if there any more query results from a multi query\"\n    ],\n    \"mysqli_multi_query\": [\n        \"bool mysqli_multi_query(object link, string query)\",\n        \"allows to execute multiple queries\"\n    ],\n    \"mysqli_next_result\": [\n        \"bool mysqli_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_num_fields\": [\n        \"int mysqli_num_fields(object result)\",\n        \"Get number of fields in result\"\n    ],\n    \"mysqli_num_rows\": [\n        \"mixed mysqli_num_rows(object result)\",\n        \"Get number of rows in result\"\n    ],\n    \"mysqli_options\": [\n        \"bool mysqli_options(object link, int flags, mixed values)\",\n        \"Set options\"\n    ],\n    \"mysqli_ping\": [\n        \"bool mysqli_ping(object link)\",\n        \"Ping a server connection or reconnect if there is no connection\"\n    ],\n    \"mysqli_poll\": [\n        \"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\n        \"Poll connections\"\n    ],\n    \"mysqli_prepare\": [\n        \"mixed mysqli_prepare(object link, string query)\",\n        \"Prepare a SQL statement for execution\"\n    ],\n    \"mysqli_query\": [\n        \"mixed mysqli_query(object link, string query [,int resultmode]) */\",\n        \"PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Os|l\\\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Empty query\\\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid value for resultmode\\\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT\"\n    ],\n    \"mysqli_real_connect\": [\n        \"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_real_escape_string\": [\n        \"string mysqli_real_escape_string(object link, string escapestr)\",\n        \"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysqli_real_query\": [\n        \"bool mysqli_real_query(object link, string query)\",\n        \"Binary-safe version of mysql_query()\"\n    ],\n    \"mysqli_reap_async_query\": [\n        \"int mysqli_reap_async_query(object link)\",\n        \"Poll connections\"\n    ],\n    \"mysqli_refresh\": [\n        \"bool mysqli_refresh(object link, long options)\",\n        \"Flush tables or caches, or reset replication server information\"\n    ],\n    \"mysqli_report\": [\n        \"bool mysqli_report(int flags)\",\n        \"sets report level\"\n    ],\n    \"mysqli_rollback\": [\n        \"bool mysqli_rollback(object link)\",\n        \"Undo actions from current transaction\"\n    ],\n    \"mysqli_select_db\": [\n        \"bool mysqli_select_db(object link, string dbname)\",\n        \"Select a MySQL database\"\n    ],\n    \"mysqli_set_charset\": [\n        \"bool mysqli_set_charset(object link, string csname)\",\n        \"sets client character set\"\n    ],\n    \"mysqli_set_local_infile_default\": [\n        \"void mysqli_set_local_infile_default(object link)\",\n        \"unsets user defined handler for load local infile command\"\n    ],\n    \"mysqli_set_local_infile_handler\": [\n        \"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\n        \"Set callback functions for LOAD DATA LOCAL INFILE\"\n    ],\n    \"mysqli_sqlstate\": [\n        \"string mysqli_sqlstate(object link)\",\n        \"Returns the SQLSTATE error from previous MySQL operation\"\n    ],\n    \"mysqli_ssl_set\": [\n        \"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\n        \"\"\n    ],\n    \"mysqli_stat\": [\n        \"mixed mysqli_stat(object link)\",\n        \"Get current system status\"\n    ],\n    \"mysqli_stmt_affected_rows\": [\n        \"mixed mysqli_stmt_affected_rows(object stmt)\",\n        \"Return the number of rows affected in the last query for the given link\"\n    ],\n    \"mysqli_stmt_attr_get\": [\n        \"int mysqli_stmt_attr_get(object stmt, long attr)\",\n        \"\"\n    ],\n    \"mysqli_stmt_attr_set\": [\n        \"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\n        \"\"\n    ],\n    \"mysqli_stmt_bind_param\": [\n        \"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\n        \"Bind variables to a prepared statement as parameters\"\n    ],\n    \"mysqli_stmt_bind_result\": [\n        \"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\n        \"Bind variables to a prepared statement for result storage\"\n    ],\n    \"mysqli_stmt_close\": [\n        \"bool mysqli_stmt_close(object stmt)\",\n        \"Close statement\"\n    ],\n    \"mysqli_stmt_data_seek\": [\n        \"void mysqli_stmt_data_seek(object stmt, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_stmt_errno\": [\n        \"int mysqli_stmt_errno(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_error\": [\n        \"string mysqli_stmt_error(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_execute\": [\n        \"bool mysqli_stmt_execute(object stmt)\",\n        \"Execute a prepared statement\"\n    ],\n    \"mysqli_stmt_fetch\": [\n        \"mixed mysqli_stmt_fetch(object stmt)\",\n        \"Fetch results from a prepared statement into the bound variables\"\n    ],\n    \"mysqli_stmt_field_count\": [\n        \"int mysqli_stmt_field_count(object stmt) {\",\n        \"Return the number of result columns for the given statement\"\n    ],\n    \"mysqli_stmt_free_result\": [\n        \"void mysqli_stmt_free_result(object stmt)\",\n        \"Free stored result memory for the given statement handle\"\n    ],\n    \"mysqli_stmt_get_result\": [\n        \"object mysqli_stmt_get_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_stmt_get_warnings\": [\n        \"object mysqli_stmt_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \\\"mysqli_stmt\\\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}\"\n    ],\n    \"mysqli_stmt_init\": [\n        \"mixed mysqli_stmt_init(object link)\",\n        \"Initialize statement object\"\n    ],\n    \"mysqli_stmt_insert_id\": [\n        \"mixed mysqli_stmt_insert_id(object stmt)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_stmt_next_result\": [\n        \"bool mysqli_stmt_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_stmt_num_rows\": [\n        \"mixed mysqli_stmt_num_rows(object stmt)\",\n        \"Return the number of rows in statements result set\"\n    ],\n    \"mysqli_stmt_param_count\": [\n        \"int mysqli_stmt_param_count(object stmt)\",\n        \"Return the number of parameter for the given statement\"\n    ],\n    \"mysqli_stmt_prepare\": [\n        \"bool mysqli_stmt_prepare(object stmt, string query)\",\n        \"prepare server side statement with query\"\n    ],\n    \"mysqli_stmt_reset\": [\n        \"bool mysqli_stmt_reset(object stmt)\",\n        \"reset a prepared statement\"\n    ],\n    \"mysqli_stmt_result_metadata\": [\n        \"mixed mysqli_stmt_result_metadata(object stmt)\",\n        \"return result set from statement\"\n    ],\n    \"mysqli_stmt_send_long_data\": [\n        \"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\n        \"\"\n    ],\n    \"mysqli_stmt_sqlstate\": [\n        \"string mysqli_stmt_sqlstate(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_store_result\": [\n        \"bool mysqli_stmt_store_result(stmt)\",\n        \"\"\n    ],\n    \"mysqli_store_result\": [\n        \"object mysqli_store_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_thread_id\": [\n        \"int mysqli_thread_id(object link)\",\n        \"Return the current thread ID\"\n    ],\n    \"mysqli_thread_safe\": [\n        \"bool mysqli_thread_safe(void)\",\n        \"Return whether thread safety is given or not\"\n    ],\n    \"mysqli_use_result\": [\n        \"mixed mysqli_use_result(object link)\",\n        \"Directly retrieve query results - do not buffer results on client side\"\n    ],\n    \"mysqli_warning_count\": [\n        \"int mysqli_warning_count (object link)\",\n        \"Return number of warnings from the last query for the given link\"\n    ],\n    \"natcasesort\": [\n        \"void natcasesort(array &array_arg)\",\n        \"Sort an array using case-insensitive natural sort\"\n    ],\n    \"natsort\": [\n        \"void natsort(array &array_arg)\",\n        \"Sort an array using natural sort\"\n    ],\n    \"next\": [\n        \"mixed next(array array_arg)\",\n        \"Move array argument's internal pointer to the next element and return it\"\n    ],\n    \"ngettext\": [\n        \"string ngettext(string MSGID1, string MSGID2, int N)\",\n        \"Plural version of gettext()\"\n    ],\n    \"nl2br\": [\n        \"string nl2br(string str [, bool is_xhtml])\",\n        \"Converts newlines to HTML line breaks\"\n    ],\n    \"nl_langinfo\": [\n        \"string nl_langinfo(int item)\",\n        \"Query language and locale information\"\n    ],\n    \"normalizer_is_normalize\": [\n        \"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Test if a string is in a given normalization form.\"\n    ],\n    \"normalizer_normalize\": [\n        \"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Normalize a string.\"\n    ],\n    \"nsapi_request_headers\": [\n        \"array nsapi_request_headers(void)\",\n        \"Get all headers from the request\"\n    ],\n    \"nsapi_response_headers\": [\n        \"array nsapi_response_headers(void)\",\n        \"Get all headers from the response\"\n    ],\n    \"nsapi_virtual\": [\n        \"bool nsapi_virtual(string uri)\",\n        \"Perform an NSAPI sub-request\"\n    ],\n    \"number_format\": [\n        \"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\n        \"Formats a number with grouped thousands\"\n    ],\n    \"numfmt_create\": [\n        \"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\n        \"* Create number formatter.\"\n    ],\n    \"numfmt_format\": [\n        \"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\n        \"* Format a number.\"\n    ],\n    \"numfmt_format_currency\": [\n        \"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\n        \"* Format a number as currency.\"\n    ],\n    \"numfmt_get_attribute\": [\n        \"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_get_error_code\": [\n        \"int numfmt_get_error_code( NumberFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"numfmt_get_error_message\": [\n        \"string numfmt_get_error_message( NumberFormatter $nf )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"numfmt_get_locale\": [\n        \"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\n        \"* Get formatter locale.\"\n    ],\n    \"numfmt_get_pattern\": [\n        \"string numfmt_get_pattern( NumberFormatter $nf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"numfmt_get_symbol\": [\n        \"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter symbol value.\"\n    ],\n    \"numfmt_get_text_attribute\": [\n        \"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_parse\": [\n        \"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\n        \"* Parse a number.\"\n    ],\n    \"numfmt_parse_currency\": [\n        \"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\n        \"* Parse a number as currency.\"\n    ],\n    \"numfmt_parse_message\": [\n        \"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"numfmt_set_attribute\": [\n        \"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_set_pattern\": [\n        \"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"numfmt_set_symbol\": [\n        \"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\n        \"* Set formatter symbol value.\"\n    ],\n    \"numfmt_set_text_attribute\": [\n        \"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"ob_clean\": [\n        \"bool ob_clean(void)\",\n        \"Clean (delete) the current output buffer\"\n    ],\n    \"ob_end_clean\": [\n        \"bool ob_end_clean(void)\",\n        \"Clean the output buffer, and delete current output buffer\"\n    ],\n    \"ob_end_flush\": [\n        \"bool ob_end_flush(void)\",\n        \"Flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_flush\": [\n        \"bool ob_flush(void)\",\n        \"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"\n    ],\n    \"ob_get_clean\": [\n        \"bool ob_get_clean(void)\",\n        \"Get current buffer contents and delete current output buffer\"\n    ],\n    \"ob_get_contents\": [\n        \"string ob_get_contents(void)\",\n        \"Return the contents of the output buffer\"\n    ],\n    \"ob_get_flush\": [\n        \"bool ob_get_flush(void)\",\n        \"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_get_length\": [\n        \"int ob_get_length(void)\",\n        \"Return the length of the output buffer\"\n    ],\n    \"ob_get_level\": [\n        \"int ob_get_level(void)\",\n        \"Return the nesting level of the output buffer\"\n    ],\n    \"ob_get_status\": [\n        \"false|array ob_get_status([bool full_status])\",\n        \"Return the status of the active or all output buffers\"\n    ],\n    \"ob_gzhandler\": [\n        \"string ob_gzhandler(string str, int mode)\",\n        \"Encode str based on accept-encoding setting - designed to be called from ob_start()\"\n    ],\n    \"ob_iconv_handler\": [\n        \"string ob_iconv_handler(string contents, int status)\",\n        \"Returns str in output buffer converted to the iconv.output_encoding character set\"\n    ],\n    \"ob_implicit_flush\": [\n        \"void ob_implicit_flush([int flag])\",\n        \"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"\n    ],\n    \"ob_list_handlers\": [\n        \"false|array ob_list_handlers()\",\n        \"*  List all output_buffers in an array\"\n    ],\n    \"ob_start\": [\n        \"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\n        \"Turn on Output Buffering (specifying an optional output handler).\"\n    ],\n    \"oci_bind_array_by_name\": [\n        \"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\n        \"Bind a PHP array to an Oracle PL/SQL type by name\"\n    ],\n    \"oci_bind_by_name\": [\n        \"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\n        \"Bind a PHP variable to an Oracle placeholder by name\"\n    ],\n    \"oci_cancel\": [\n        \"bool oci_cancel(resource stmt)\",\n        \"Cancel reading from a cursor\"\n    ],\n    \"oci_close\": [\n        \"bool oci_close(resource connection)\",\n        \"Disconnect from database\"\n    ],\n    \"oci_collection_append\": [\n        \"bool oci_collection_append(string value)\",\n        \"Append an object to the collection\"\n    ],\n    \"oci_collection_assign\": [\n        \"bool oci_collection_assign(object from)\",\n        \"Assign a collection from another existing collection\"\n    ],\n    \"oci_collection_element_assign\": [\n        \"bool oci_collection_element_assign(int index, string val)\",\n        \"Assign element val to collection at index ndx\"\n    ],\n    \"oci_collection_element_get\": [\n        \"string oci_collection_element_get(int ndx)\",\n        \"Retrieve the value at collection index ndx\"\n    ],\n    \"oci_collection_max\": [\n        \"int oci_collection_max()\",\n        \"Return the max value of a collection. For a varray this is the maximum length of the array\"\n    ],\n    \"oci_collection_size\": [\n        \"int oci_collection_size()\",\n        \"Return the size of a collection\"\n    ],\n    \"oci_collection_trim\": [\n        \"bool oci_collection_trim(int num)\",\n        \"Trim num elements from the end of a collection\"\n    ],\n    \"oci_commit\": [\n        \"bool oci_commit(resource connection)\",\n        \"Commit the current context\"\n    ],\n    \"oci_connect\": [\n        \"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_define_by_name\": [\n        \"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\n        \"Define a PHP variable to an Oracle column by name\"\n    ],\n    \"oci_error\": [\n        \"array oci_error([resource stmt|connection|global])\",\n        \"Return the last error of stmt|connection|global. If no error happened returns false.\"\n    ],\n    \"oci_execute\": [\n        \"bool oci_execute(resource stmt [, int mode])\",\n        \"Execute a parsed statement\"\n    ],\n    \"oci_fetch\": [\n        \"bool oci_fetch(resource stmt)\",\n        \"Prepare a new row of data for reading\"\n    ],\n    \"oci_fetch_all\": [\n        \"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\n        \"Fetch all rows of result data into an array\"\n    ],\n    \"oci_fetch_array\": [\n        \"array oci_fetch_array( resource stmt [, int mode ])\",\n        \"Fetch a result row as an array\"\n    ],\n    \"oci_fetch_assoc\": [\n        \"array oci_fetch_assoc( resource stmt )\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"oci_fetch_object\": [\n        \"object oci_fetch_object( resource stmt )\",\n        \"Fetch a result row as an object\"\n    ],\n    \"oci_fetch_row\": [\n        \"array oci_fetch_row( resource stmt )\",\n        \"Fetch a result row as an enumerated array\"\n    ],\n    \"oci_field_is_null\": [\n        \"bool oci_field_is_null(resource stmt, int col)\",\n        \"Tell whether a column is NULL\"\n    ],\n    \"oci_field_name\": [\n        \"string oci_field_name(resource stmt, int col)\",\n        \"Tell the name of a column\"\n    ],\n    \"oci_field_precision\": [\n        \"int oci_field_precision(resource stmt, int col)\",\n        \"Tell the precision of a column\"\n    ],\n    \"oci_field_scale\": [\n        \"int oci_field_scale(resource stmt, int col)\",\n        \"Tell the scale of a column\"\n    ],\n    \"oci_field_size\": [\n        \"int oci_field_size(resource stmt, int col)\",\n        \"Tell the maximum data size of a column\"\n    ],\n    \"oci_field_type\": [\n        \"mixed oci_field_type(resource stmt, int col)\",\n        \"Tell the data type of a column\"\n    ],\n    \"oci_field_type_raw\": [\n        \"int oci_field_type_raw(resource stmt, int col)\",\n        \"Tell the raw oracle data type of a column\"\n    ],\n    \"oci_free_collection\": [\n        \"bool oci_free_collection()\",\n        \"Deletes collection object\"\n    ],\n    \"oci_free_descriptor\": [\n        \"bool oci_free_descriptor()\",\n        \"Deletes large object description\"\n    ],\n    \"oci_free_statement\": [\n        \"bool oci_free_statement(resource stmt)\",\n        \"Free all resources associated with a statement\"\n    ],\n    \"oci_internal_debug\": [\n        \"void oci_internal_debug(int onoff)\",\n        \"Toggle internal debugging output for the OCI extension\"\n    ],\n    \"oci_lob_append\": [\n        \"bool oci_lob_append( object lob )\",\n        \"Appends data from a LOB to another LOB\"\n    ],\n    \"oci_lob_close\": [\n        \"bool oci_lob_close()\",\n        \"Closes lob descriptor\"\n    ],\n    \"oci_lob_copy\": [\n        \"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\n        \"Copies data from a LOB to another LOB\"\n    ],\n    \"oci_lob_eof\": [\n        \"bool oci_lob_eof()\",\n        \"Checks if EOF is reached\"\n    ],\n    \"oci_lob_erase\": [\n        \"int oci_lob_erase( [ int offset [, int length ] ] )\",\n        \"Erases a specified portion of the internal LOB, starting at a specified offset\"\n    ],\n    \"oci_lob_export\": [\n        \"bool oci_lob_export([string filename [, int start [, int length]]])\",\n        \"Writes a large object into a file\"\n    ],\n    \"oci_lob_flush\": [\n        \"bool oci_lob_flush( [ int flag ] )\",\n        \"Flushes the LOB buffer\"\n    ],\n    \"oci_lob_import\": [\n        \"bool oci_lob_import( string filename )\",\n        \"Loads file into a LOB\"\n    ],\n    \"oci_lob_is_equal\": [\n        \"bool oci_lob_is_equal( object lob1, object lob2 )\",\n        \"Tests to see if two LOB/FILE locators are equal\"\n    ],\n    \"oci_lob_load\": [\n        \"string oci_lob_load()\",\n        \"Loads a large object\"\n    ],\n    \"oci_lob_read\": [\n        \"string oci_lob_read( int length )\",\n        \"Reads particular part of a large object\"\n    ],\n    \"oci_lob_rewind\": [\n        \"bool oci_lob_rewind()\",\n        \"Rewind pointer of a LOB\"\n    ],\n    \"oci_lob_save\": [\n        \"bool oci_lob_save( string data [, int offset ])\",\n        \"Saves a large object\"\n    ],\n    \"oci_lob_seek\": [\n        \"bool oci_lob_seek( int offset [, int whence ])\",\n        \"Moves the pointer of a LOB\"\n    ],\n    \"oci_lob_size\": [\n        \"int oci_lob_size()\",\n        \"Returns size of a large object\"\n    ],\n    \"oci_lob_tell\": [\n        \"int oci_lob_tell()\",\n        \"Tells LOB pointer position\"\n    ],\n    \"oci_lob_truncate\": [\n        \"bool oci_lob_truncate( [ int length ])\",\n        \"Truncates a LOB\"\n    ],\n    \"oci_lob_write\": [\n        \"int oci_lob_write( string string [, int length ])\",\n        \"Writes data to current position of a LOB\"\n    ],\n    \"oci_lob_write_temporary\": [\n        \"bool oci_lob_write_temporary(string var [, int lob_type])\",\n        \"Writes temporary blob\"\n    ],\n    \"oci_new_collection\": [\n        \"object oci_new_collection(resource connection, string tdo [, string schema])\",\n        \"Initialize a new collection\"\n    ],\n    \"oci_new_connect\": [\n        \"resource oci_new_connect(string user, string pass [, string db])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_new_cursor\": [\n        \"resource oci_new_cursor(resource connection)\",\n        \"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"\n    ],\n    \"oci_new_descriptor\": [\n        \"object oci_new_descriptor(resource connection [, int type])\",\n        \"Initialize a new empty descriptor LOB/FILE (LOB is default)\"\n    ],\n    \"oci_num_fields\": [\n        \"int oci_num_fields(resource stmt)\",\n        \"Return the number of result columns in a statement\"\n    ],\n    \"oci_num_rows\": [\n        \"int oci_num_rows(resource stmt)\",\n        \"Return the row count of an OCI statement\"\n    ],\n    \"oci_parse\": [\n        \"resource oci_parse(resource connection, string query)\",\n        \"Parse a query and return a statement\"\n    ],\n    \"oci_password_change\": [\n        \"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\n        \"Changes the password of an account\"\n    ],\n    \"oci_pconnect\": [\n        \"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\n        \"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"\n    ],\n    \"oci_result\": [\n        \"string oci_result(resource stmt, mixed column)\",\n        \"Return a single column of result data\"\n    ],\n    \"oci_rollback\": [\n        \"bool oci_rollback(resource connection)\",\n        \"Rollback the current context\"\n    ],\n    \"oci_server_version\": [\n        \"string oci_server_version(resource connection)\",\n        \"Return a string containing server version information\"\n    ],\n    \"oci_set_action\": [\n        \"bool oci_set_action(resource connection, string value)\",\n        \"Sets the action attribute on the connection\"\n    ],\n    \"oci_set_client_identifier\": [\n        \"bool oci_set_client_identifier(resource connection, string value)\",\n        \"Sets the client identifier attribute on the connection\"\n    ],\n    \"oci_set_client_info\": [\n        \"bool oci_set_client_info(resource connection, string value)\",\n        \"Sets the client info attribute on the connection\"\n    ],\n    \"oci_set_edition\": [\n        \"bool oci_set_edition(string value)\",\n        \"Sets the edition attribute for all subsequent connections created\"\n    ],\n    \"oci_set_module_name\": [\n        \"bool oci_set_module_name(resource connection, string value)\",\n        \"Sets the module attribute on the connection\"\n    ],\n    \"oci_set_prefetch\": [\n        \"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\n        \"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"\n    ],\n    \"oci_statement_type\": [\n        \"string oci_statement_type(resource stmt)\",\n        \"Return the query type of an OCI statement\"\n    ],\n    \"ocifetchinto\": [\n        \"int ocifetchinto(resource stmt, array &output [, int mode])\",\n        \"Fetch a row of result data into an array\"\n    ],\n    \"ocigetbufferinglob\": [\n        \"bool ocigetbufferinglob()\",\n        \"Returns current state of buffering for a LOB\"\n    ],\n    \"ocisetbufferinglob\": [\n        \"bool ocisetbufferinglob( boolean flag )\",\n        \"Enables/disables buffering for a LOB\"\n    ],\n    \"octdec\": [\n        \"int octdec(string octal_number)\",\n        \"Returns the decimal equivalent of an octal string\"\n    ],\n    \"odbc_autocommit\": [\n        \"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\n        \"Toggle autocommit mode or get status\"\n    ],\n    \"odbc_binmode\": [\n        \"bool odbc_binmode(int result_id, int mode)\",\n        \"Handle binary column data\"\n    ],\n    \"odbc_close\": [\n        \"void odbc_close(resource connection_id)\",\n        \"Close an ODBC connection\"\n    ],\n    \"odbc_close_all\": [\n        \"void odbc_close_all(void)\",\n        \"Close all ODBC connections\"\n    ],\n    \"odbc_columnprivileges\": [\n        \"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\n        \"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"\n    ],\n    \"odbc_columns\": [\n        \"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\n        \"Returns a result identifier that can be used to fetch a list of column names in specified tables\"\n    ],\n    \"odbc_commit\": [\n        \"bool odbc_commit(resource connection_id)\",\n        \"Commit an ODBC transaction\"\n    ],\n    \"odbc_connect\": [\n        \"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\n        \"Connect to a datasource\"\n    ],\n    \"odbc_cursor\": [\n        \"string odbc_cursor(resource result_id)\",\n        \"Get cursor name\"\n    ],\n    \"odbc_data_source\": [\n        \"array odbc_data_source(resource connection_id, int fetch_type)\",\n        \"Return information about the currently connected data source\"\n    ],\n    \"odbc_error\": [\n        \"string odbc_error([resource connection_id])\",\n        \"Get the last error code\"\n    ],\n    \"odbc_errormsg\": [\n        \"string odbc_errormsg([resource connection_id])\",\n        \"Get the last error message\"\n    ],\n    \"odbc_exec\": [\n        \"resource odbc_exec(resource connection_id, string query [, int flags])\",\n        \"Prepare and execute an SQL statement\"\n    ],\n    \"odbc_execute\": [\n        \"bool odbc_execute(resource result_id [, array parameters_array])\",\n        \"Execute a prepared statement\"\n    ],\n    \"odbc_fetch_array\": [\n        \"array odbc_fetch_array(int result [, int rownumber])\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"odbc_fetch_into\": [\n        \"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\n        \"Fetch one result row into an array\"\n    ],\n    \"odbc_fetch_object\": [\n        \"object odbc_fetch_object(int result [, int rownumber])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"odbc_fetch_row\": [\n        \"bool odbc_fetch_row(resource result_id [, int row_number])\",\n        \"Fetch a row\"\n    ],\n    \"odbc_field_len\": [\n        \"int odbc_field_len(resource result_id, int field_number)\",\n        \"Get the length (precision) of a column\"\n    ],\n    \"odbc_field_name\": [\n        \"string odbc_field_name(resource result_id, int field_number)\",\n        \"Get a column name\"\n    ],\n    \"odbc_field_num\": [\n        \"int odbc_field_num(resource result_id, string field_name)\",\n        \"Return column number\"\n    ],\n    \"odbc_field_scale\": [\n        \"int odbc_field_scale(resource result_id, int field_number)\",\n        \"Get the scale of a column\"\n    ],\n    \"odbc_field_type\": [\n        \"string odbc_field_type(resource result_id, int field_number)\",\n        \"Get the datatype of a column\"\n    ],\n    \"odbc_foreignkeys\": [\n        \"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\n        \"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"\n    ],\n    \"odbc_free_result\": [\n        \"bool odbc_free_result(resource result_id)\",\n        \"Free resources associated with a result\"\n    ],\n    \"odbc_gettypeinfo\": [\n        \"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\n        \"Returns a result identifier containing information about data types supported by the data source\"\n    ],\n    \"odbc_longreadlen\": [\n        \"bool odbc_longreadlen(int result_id, int length)\",\n        \"Handle LONG columns\"\n    ],\n    \"odbc_next_result\": [\n        \"bool odbc_next_result(resource result_id)\",\n        \"Checks if multiple results are avaiable\"\n    ],\n    \"odbc_num_fields\": [\n        \"int odbc_num_fields(resource result_id)\",\n        \"Get number of columns in a result\"\n    ],\n    \"odbc_num_rows\": [\n        \"int odbc_num_rows(resource result_id)\",\n        \"Get number of rows in a result\"\n    ],\n    \"odbc_pconnect\": [\n        \"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\n        \"Establish a persistent connection to a datasource\"\n    ],\n    \"odbc_prepare\": [\n        \"resource odbc_prepare(resource connection_id, string query)\",\n        \"Prepares a statement for execution\"\n    ],\n    \"odbc_primarykeys\": [\n        \"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\n        \"Returns a result identifier listing the column names that comprise the primary key for a table\"\n    ],\n    \"odbc_procedurecolumns\": [\n        \"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\n        \"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"\n    ],\n    \"odbc_procedures\": [\n        \"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\n        \"Returns a result identifier containg the list of procedure names in a datasource\"\n    ],\n    \"odbc_result\": [\n        \"mixed odbc_result(resource result_id, mixed field)\",\n        \"Get result data\"\n    ],\n    \"odbc_result_all\": [\n        \"int odbc_result_all(resource result_id [, string format])\",\n        \"Print result as HTML table\"\n    ],\n    \"odbc_rollback\": [\n        \"bool odbc_rollback(resource connection_id)\",\n        \"Rollback a transaction\"\n    ],\n    \"odbc_setoption\": [\n        \"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\n        \"Sets connection or statement options\"\n    ],\n    \"odbc_specialcolumns\": [\n        \"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\n        \"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"\n    ],\n    \"odbc_statistics\": [\n        \"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\n        \"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"\n    ],\n    \"odbc_tableprivileges\": [\n        \"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\n        \"Returns a result identifier containing a list of tables and the privileges associated with each table\"\n    ],\n    \"odbc_tables\": [\n        \"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\n        \"Call the SQLTables function\"\n    ],\n    \"opendir\": [\n        \"mixed opendir(string path[, resource context])\",\n        \"Open a directory and return a dir_handle\"\n    ],\n    \"openlog\": [\n        \"bool openlog(string ident, int option, int facility)\",\n        \"Open connection to system logger\"\n    ],\n    \"openssl_csr_export\": [\n        \"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\n        \"Exports a CSR to file or a var\"\n    ],\n    \"openssl_csr_export_to_file\": [\n        \"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\n        \"Exports a CSR to file\"\n    ],\n    \"openssl_csr_get_public_key\": [\n        \"mixed openssl_csr_get_public_key(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_get_subject\": [\n        \"mixed openssl_csr_get_subject(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_new\": [\n        \"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\n        \"Generates a privkey and CSR\"\n    ],\n    \"openssl_csr_sign\": [\n        \"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\n        \"Signs a cert with another CERT\"\n    ],\n    \"openssl_decrypt\": [\n        \"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\n        \"Takes raw or base64 encoded string and dectupt it using given method and key\"\n    ],\n    \"openssl_dh_compute_key\": [\n        \"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\n        \"Computes shared sicret for public value of remote DH key and local DH key\"\n    ],\n    \"openssl_digest\": [\n        \"string openssl_digest(string data, string method [, bool raw_output=false])\",\n        \"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"\n    ],\n    \"openssl_encrypt\": [\n        \"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\n        \"Encrypts given data with given method and key, returns raw or base64 encoded string\"\n    ],\n    \"openssl_error_string\": [\n        \"mixed openssl_error_string(void)\",\n        \"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"\n    ],\n    \"openssl_get_cipher_methods\": [\n        \"array openssl_get_cipher_methods([bool aliases = false])\",\n        \"Return array of available cipher methods\"\n    ],\n    \"openssl_get_md_methods\": [\n        \"array openssl_get_md_methods([bool aliases = false])\",\n        \"Return array of available digest methods\"\n    ],\n    \"openssl_open\": [\n        \"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\n        \"Opens data\"\n    ],\n    \"openssl_pkcs12_export\": [\n        \"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS12 to a var\"\n    ],\n    \"openssl_pkcs12_export_to_file\": [\n        \"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS to file\"\n    ],\n    \"openssl_pkcs12_read\": [\n        \"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\n        \"Parses a PKCS12 to an array\"\n    ],\n    \"openssl_pkcs7_decrypt\": [\n        \"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\n        \"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"\n    ],\n    \"openssl_pkcs7_encrypt\": [\n        \"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\n        \"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"\n    ],\n    \"openssl_pkcs7_sign\": [\n        \"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\n        \"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"\n    ],\n    \"openssl_pkcs7_verify\": [\n        \"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\n        \"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"\n    ],\n    \"openssl_pkey_export\": [\n        \"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\n        \"Gets an exportable representation of a key into a string or file\"\n    ],\n    \"openssl_pkey_export_to_file\": [\n        \"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\n        \"Gets an exportable representation of a key into a file\"\n    ],\n    \"openssl_pkey_free\": [\n        \"void openssl_pkey_free(int key)\",\n        \"Frees a key\"\n    ],\n    \"openssl_pkey_get_details\": [\n        \"resource openssl_pkey_get_details(resource key)\",\n        \"returns an array with the key details (bits, pkey, type)\"\n    ],\n    \"openssl_pkey_get_private\": [\n        \"int openssl_pkey_get_private(string key [, string passphrase])\",\n        \"Gets private keys\"\n    ],\n    \"openssl_pkey_get_public\": [\n        \"int openssl_pkey_get_public(mixed cert)\",\n        \"Gets public key from X.509 certificate\"\n    ],\n    \"openssl_pkey_new\": [\n        \"resource openssl_pkey_new([array configargs])\",\n        \"Generates a new private key\"\n    ],\n    \"openssl_private_decrypt\": [\n        \"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\n        \"Decrypts data with private key\"\n    ],\n    \"openssl_private_encrypt\": [\n        \"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with private key\"\n    ],\n    \"openssl_public_decrypt\": [\n        \"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\n        \"Decrypts data with public key\"\n    ],\n    \"openssl_public_encrypt\": [\n        \"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with public key\"\n    ],\n    \"openssl_random_pseudo_bytes\": [\n        \"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\n        \"Returns a string of the length specified filled with random pseudo bytes\"\n    ],\n    \"openssl_seal\": [\n        \"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\n        \"Seals data\"\n    ],\n    \"openssl_sign\": [\n        \"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\n        \"Signs data\"\n    ],\n    \"openssl_verify\": [\n        \"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\n        \"Verifys data\"\n    ],\n    \"openssl_x509_check_private_key\": [\n        \"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\n        \"Checks if a private key corresponds to a CERT\"\n    ],\n    \"openssl_x509_checkpurpose\": [\n        \"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\n        \"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"\n    ],\n    \"openssl_x509_export\": [\n        \"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_export_to_file\": [\n        \"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_free\": [\n        \"void openssl_x509_free(resource x509)\",\n        \"Frees X.509 certificates\"\n    ],\n    \"openssl_x509_parse\": [\n        \"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\n        \"Returns an array of the fields/values of the CERT\"\n    ],\n    \"openssl_x509_read\": [\n        \"resource openssl_x509_read(mixed cert)\",\n        \"Reads X.509 certificates\"\n    ],\n    \"ord\": [\n        \"int ord(string character)\",\n        \"Returns ASCII value of character\"\n    ],\n    \"output_add_rewrite_var\": [\n        \"bool output_add_rewrite_var(string name, string value)\",\n        \"Add URL rewriter values\"\n    ],\n    \"output_reset_rewrite_vars\": [\n        \"bool output_reset_rewrite_vars(void)\",\n        \"Reset(clear) URL rewriter values\"\n    ],\n    \"pack\": [\n        \"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Takes one or more arguments and packs them into a binary string according to the format argument\"\n    ],\n    \"parse_ini_file\": [\n        \"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration file\"\n    ],\n    \"parse_ini_string\": [\n        \"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration string\"\n    ],\n    \"parse_locale\": [\n        \"static array parse_locale($locale)\",\n        \"* parses a locale-id into an array the different parts of it\"\n    ],\n    \"parse_str\": [\n        \"void parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"parse_url\": [\n        \"mixed parse_url(string url, [int url_component])\",\n        \"Parse a URL and return its components\"\n    ],\n    \"passthru\": [\n        \"void passthru(string command [, int &return_value])\",\n        \"Execute an external program and display raw output\"\n    ],\n    \"pathinfo\": [\n        \"array pathinfo(string path[, int options])\",\n        \"Returns information about a certain string\"\n    ],\n    \"pclose\": [\n        \"int pclose(resource fp)\",\n        \"Close a file pointer opened by popen()\"\n    ],\n    \"pcnlt_sigwaitinfo\": [\n        \"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\n        \"Synchronously wait for queued signals\"\n    ],\n    \"pcntl_alarm\": [\n        \"int pcntl_alarm(int seconds)\",\n        \"Set an alarm clock for delivery of a signal\"\n    ],\n    \"pcntl_exec\": [\n        \"bool pcntl_exec(string path [, array args [, array envs]])\",\n        \"Executes specified program in current process space as defined by exec(2)\"\n    ],\n    \"pcntl_fork\": [\n        \"int pcntl_fork(void)\",\n        \"Forks the currently running process following the same behavior as the UNIX fork() system call\"\n    ],\n    \"pcntl_getpriority\": [\n        \"int pcntl_getpriority([int pid [, int process_identifier]])\",\n        \"Get the priority of any process\"\n    ],\n    \"pcntl_setpriority\": [\n        \"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\n        \"Change the priority of any process\"\n    ],\n    \"pcntl_signal\": [\n        \"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\n        \"Assigns a system signal handler to a PHP function\"\n    ],\n    \"pcntl_signal_dispatch\": [\n        \"bool pcntl_signal_dispatch()\",\n        \"Dispatch signals to signal handlers\"\n    ],\n    \"pcntl_sigprocmask\": [\n        \"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\n        \"Examine and change blocked signals\"\n    ],\n    \"pcntl_sigtimedwait\": [\n        \"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\n        \"Wait for queued signals\"\n    ],\n    \"pcntl_wait\": [\n        \"int pcntl_wait(int &status)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_waitpid\": [\n        \"int pcntl_waitpid(int pid, int &status, int options)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_wexitstatus\": [\n        \"int pcntl_wexitstatus(int status)\",\n        \"Returns the status code of a child's exit\"\n    ],\n    \"pcntl_wifexited\": [\n        \"bool pcntl_wifexited(int status)\",\n        \"Returns true if the child status code represents a successful exit\"\n    ],\n    \"pcntl_wifsignaled\": [\n        \"bool pcntl_wifsignaled(int status)\",\n        \"Returns true if the child status code represents a process that was terminated due to a signal\"\n    ],\n    \"pcntl_wifstopped\": [\n        \"bool pcntl_wifstopped(int status)\",\n        \"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"\n    ],\n    \"pcntl_wstopsig\": [\n        \"int pcntl_wstopsig(int status)\",\n        \"Returns the number of the signal that caused the process to stop who's status code is passed\"\n    ],\n    \"pcntl_wtermsig\": [\n        \"int pcntl_wtermsig(int status)\",\n        \"Returns the number of the signal that terminated the process who's status code is passed\"\n    ],\n    \"pdo_drivers\": [\n        \"array pdo_drivers()\",\n        \"Return array of available PDO drivers\"\n    ],\n    \"pfsockopen\": [\n        \"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open persistent Internet or Unix domain socket connection\"\n    ],\n    \"pg_affected_rows\": [\n        \"int pg_affected_rows(resource result)\",\n        \"Returns the number of affected tuples\"\n    ],\n    \"pg_cancel_query\": [\n        \"bool pg_cancel_query(resource connection)\",\n        \"Cancel request\"\n    ],\n    \"pg_client_encoding\": [\n        \"string pg_client_encoding([resource connection])\",\n        \"Get the current client encoding\"\n    ],\n    \"pg_close\": [\n        \"bool pg_close([resource connection])\",\n        \"Close a PostgreSQL connection\"\n    ],\n    \"pg_connect\": [\n        \"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a PostgreSQL connection\"\n    ],\n    \"pg_connection_busy\": [\n        \"bool pg_connection_busy(resource connection)\",\n        \"Get connection is busy or not\"\n    ],\n    \"pg_connection_reset\": [\n        \"bool pg_connection_reset(resource connection)\",\n        \"Reset connection (reconnect)\"\n    ],\n    \"pg_connection_status\": [\n        \"int pg_connection_status(resource connnection)\",\n        \"Get connection status\"\n    ],\n    \"pg_convert\": [\n        \"array pg_convert(resource db, string table, array values[, int options])\",\n        \"Check and convert values for PostgreSQL SQL statement\"\n    ],\n    \"pg_copy_from\": [\n        \"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\n        \"Copy table from array\"\n    ],\n    \"pg_copy_to\": [\n        \"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\n        \"Copy table to array\"\n    ],\n    \"pg_dbname\": [\n        \"string pg_dbname([resource connection])\",\n        \"Get the database name\"\n    ],\n    \"pg_delete\": [\n        \"mixed pg_delete(resource db, string table, array ids[, int options])\",\n        \"Delete records has ids (id=>value)\"\n    ],\n    \"pg_end_copy\": [\n        \"bool pg_end_copy([resource connection])\",\n        \"Sync with backend. Completes the Copy command\"\n    ],\n    \"pg_escape_bytea\": [\n        \"string pg_escape_bytea([resource connection,] string data)\",\n        \"Escape binary for bytea type\"\n    ],\n    \"pg_escape_string\": [\n        \"string pg_escape_string([resource connection,] string data)\",\n        \"Escape string for text/char type\"\n    ],\n    \"pg_execute\": [\n        \"resource pg_execute([resource connection,] string stmtname, array params)\",\n        \"Execute a prepared query\"\n    ],\n    \"pg_fetch_all\": [\n        \"array pg_fetch_all(resource result)\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_all_columns\": [\n        \"array pg_fetch_all_columns(resource result [, int column_number])\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_array\": [\n        \"array pg_fetch_array(resource result [, int row [, int result_type]])\",\n        \"Fetch a row as an array\"\n    ],\n    \"pg_fetch_assoc\": [\n        \"array pg_fetch_assoc(resource result [, int row])\",\n        \"Fetch a row as an assoc array\"\n    ],\n    \"pg_fetch_object\": [\n        \"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\n        \"Fetch a row as an object\"\n    ],\n    \"pg_fetch_result\": [\n        \"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\n        \"Returns values from a result identifier\"\n    ],\n    \"pg_fetch_row\": [\n        \"array pg_fetch_row(resource result [, int row [, int result_type]])\",\n        \"Get a row as an enumerated array\"\n    ],\n    \"pg_field_is_null\": [\n        \"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\n        \"Test if a field is NULL\"\n    ],\n    \"pg_field_name\": [\n        \"string pg_field_name(resource result, int field_number)\",\n        \"Returns the name of the field\"\n    ],\n    \"pg_field_num\": [\n        \"int pg_field_num(resource result, string field_name)\",\n        \"Returns the field number of the named field\"\n    ],\n    \"pg_field_prtlen\": [\n        \"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\n        \"Returns the printed length\"\n    ],\n    \"pg_field_size\": [\n        \"int pg_field_size(resource result, int field_number)\",\n        \"Returns the internal size of the field\"\n    ],\n    \"pg_field_table\": [\n        \"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\n        \"Returns the name of the table field belongs to, or table's oid if oid_only is true\"\n    ],\n    \"pg_field_type\": [\n        \"string pg_field_type(resource result, int field_number)\",\n        \"Returns the type name for the given field\"\n    ],\n    \"pg_field_type_oid\": [\n        \"string pg_field_type_oid(resource result, int field_number)\",\n        \"Returns the type oid for the given field\"\n    ],\n    \"pg_free_result\": [\n        \"bool pg_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"pg_get_notify\": [\n        \"array pg_get_notify([resource connection[, result_type]])\",\n        \"Get asynchronous notification\"\n    ],\n    \"pg_get_pid\": [\n        \"int pg_get_pid([resource connection)\",\n        \"Get backend(server) pid\"\n    ],\n    \"pg_get_result\": [\n        \"resource pg_get_result(resource connection)\",\n        \"Get asynchronous query result\"\n    ],\n    \"pg_host\": [\n        \"string pg_host([resource connection])\",\n        \"Returns the host name associated with the connection\"\n    ],\n    \"pg_insert\": [\n        \"mixed pg_insert(resource db, string table, array values[, int options])\",\n        \"Insert values (filed=>value) to table\"\n    ],\n    \"pg_last_error\": [\n        \"string pg_last_error([resource connection])\",\n        \"Get the error message string\"\n    ],\n    \"pg_last_notice\": [\n        \"string pg_last_notice(resource connection)\",\n        \"Returns the last notice set by the backend\"\n    ],\n    \"pg_last_oid\": [\n        \"string pg_last_oid(resource result)\",\n        \"Returns the last object identifier\"\n    ],\n    \"pg_lo_close\": [\n        \"bool pg_lo_close(resource large_object)\",\n        \"Close a large object\"\n    ],\n    \"pg_lo_create\": [\n        \"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\n        \"Create a large object\"\n    ],\n    \"pg_lo_export\": [\n        \"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\n        \"Export large object direct to filesystem\"\n    ],\n    \"pg_lo_import\": [\n        \"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\n        \"Import large object direct from filesystem\"\n    ],\n    \"pg_lo_open\": [\n        \"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\n        \"Open a large object and return fd\"\n    ],\n    \"pg_lo_read\": [\n        \"string pg_lo_read(resource large_object [, int len])\",\n        \"Read a large object\"\n    ],\n    \"pg_lo_read_all\": [\n        \"int pg_lo_read_all(resource large_object)\",\n        \"Read a large object and send straight to browser\"\n    ],\n    \"pg_lo_seek\": [\n        \"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\n        \"Seeks position of large object\"\n    ],\n    \"pg_lo_tell\": [\n        \"int pg_lo_tell(resource large_object)\",\n        \"Returns current position of large object\"\n    ],\n    \"pg_lo_unlink\": [\n        \"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\n        \"Delete a large object\"\n    ],\n    \"pg_lo_write\": [\n        \"int pg_lo_write(resource large_object, string buf [, int len])\",\n        \"Write a large object\"\n    ],\n    \"pg_meta_data\": [\n        \"array pg_meta_data(resource db, string table)\",\n        \"Get meta_data\"\n    ],\n    \"pg_num_fields\": [\n        \"int pg_num_fields(resource result)\",\n        \"Return the number of fields in the result\"\n    ],\n    \"pg_num_rows\": [\n        \"int pg_num_rows(resource result)\",\n        \"Return the number of rows in the result\"\n    ],\n    \"pg_options\": [\n        \"string pg_options([resource connection])\",\n        \"Get the options associated with the connection\"\n    ],\n    \"pg_parameter_status\": [\n        \"string|false pg_parameter_status([resource connection,] string param_name)\",\n        \"Returns the value of a server parameter\"\n    ],\n    \"pg_pconnect\": [\n        \"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a persistent PostgreSQL connection\"\n    ],\n    \"pg_ping\": [\n        \"bool pg_ping([resource connection])\",\n        \"Ping database. If connection is bad, try to reconnect.\"\n    ],\n    \"pg_port\": [\n        \"int pg_port([resource connection])\",\n        \"Return the port number associated with the connection\"\n    ],\n    \"pg_prepare\": [\n        \"resource pg_prepare([resource connection,] string stmtname, string query)\",\n        \"Prepare a query for future execution\"\n    ],\n    \"pg_put_line\": [\n        \"bool pg_put_line([resource connection,] string query)\",\n        \"Send null-terminated string to backend server\"\n    ],\n    \"pg_query\": [\n        \"resource pg_query([resource connection,] string query)\",\n        \"Execute a query\"\n    ],\n    \"pg_query_params\": [\n        \"resource pg_query_params([resource connection,] string query, array params)\",\n        \"Execute a query\"\n    ],\n    \"pg_result_error\": [\n        \"string pg_result_error(resource result)\",\n        \"Get error message associated with result\"\n    ],\n    \"pg_result_error_field\": [\n        \"string pg_result_error_field(resource result, int fieldcode)\",\n        \"Get error message field associated with result\"\n    ],\n    \"pg_result_seek\": [\n        \"bool pg_result_seek(resource result, int offset)\",\n        \"Set internal row offset\"\n    ],\n    \"pg_result_status\": [\n        \"mixed pg_result_status(resource result[, long result_type])\",\n        \"Get status of query result\"\n    ],\n    \"pg_select\": [\n        \"mixed pg_select(resource db, string table, array ids[, int options])\",\n        \"Select records that has ids (id=>value)\"\n    ],\n    \"pg_send_execute\": [\n        \"bool pg_send_execute(resource connection, string stmtname, array params)\",\n        \"Executes prevriously prepared stmtname asynchronously\"\n    ],\n    \"pg_send_prepare\": [\n        \"bool pg_send_prepare(resource connection, string stmtname, string query)\",\n        \"Asynchronously prepare a query for future execution\"\n    ],\n    \"pg_send_query\": [\n        \"bool pg_send_query(resource connection, string query)\",\n        \"Send asynchronous query\"\n    ],\n    \"pg_send_query_params\": [\n        \"bool pg_send_query_params(resource connection, string query, array params)\",\n        \"Send asynchronous parameterized query\"\n    ],\n    \"pg_set_client_encoding\": [\n        \"int pg_set_client_encoding([resource connection,] string encoding)\",\n        \"Set client encoding\"\n    ],\n    \"pg_set_error_verbosity\": [\n        \"int pg_set_error_verbosity([resource connection,] int verbosity)\",\n        \"Set error verbosity\"\n    ],\n    \"pg_trace\": [\n        \"bool pg_trace(string filename [, string mode [, resource connection]])\",\n        \"Enable tracing a PostgreSQL connection\"\n    ],\n    \"pg_transaction_status\": [\n        \"int pg_transaction_status(resource connnection)\",\n        \"Get transaction status\"\n    ],\n    \"pg_tty\": [\n        \"string pg_tty([resource connection])\",\n        \"Return the tty name associated with the connection\"\n    ],\n    \"pg_unescape_bytea\": [\n        \"string pg_unescape_bytea(string data)\",\n        \"Unescape binary for bytea type\"\n    ],\n    \"pg_untrace\": [\n        \"bool pg_untrace([resource connection])\",\n        \"Disable tracing of a PostgreSQL connection\"\n    ],\n    \"pg_update\": [\n        \"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\n        \"Update table using values (field=>value) and ids (id=>value)\"\n    ],\n    \"pg_version\": [\n        \"array pg_version([resource connection])\",\n        \"Returns an array with client, protocol and server version (when available)\"\n    ],\n    \"php_egg_logo_guid\": [\n        \"string php_egg_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_ini_loaded_file\": [\n        \"string php_ini_loaded_file(void)\",\n        \"Return the actual loaded ini filename\"\n    ],\n    \"php_ini_scanned_files\": [\n        \"string php_ini_scanned_files(void)\",\n        \"Return comma-separated string of .ini files parsed from the additional ini dir\"\n    ],\n    \"php_logo_guid\": [\n        \"string php_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_real_logo_guid\": [\n        \"string php_real_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_sapi_name\": [\n        \"string php_sapi_name(void)\",\n        \"Return the current SAPI module name\"\n    ],\n    \"php_snmpv3\": [\n        \"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\n        \"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"\n    ],\n    \"php_strip_whitespace\": [\n        \"string php_strip_whitespace(string file_name)\",\n        \"Return source with stripped comments and whitespace\"\n    ],\n    \"php_uname\": [\n        \"string php_uname(void)\",\n        \"Return information about the system PHP was built on\"\n    ],\n    \"phpcredits\": [\n        \"void phpcredits([int flag])\",\n        \"Prints the list of people who've contributed to the PHP project\"\n    ],\n    \"phpinfo\": [\n        \"void phpinfo([int what])\",\n        \"Output a page of useful information about PHP and the current request\"\n    ],\n    \"phpversion\": [\n        \"string phpversion([string extension])\",\n        \"Return the current PHP version\"\n    ],\n    \"pi\": [\n        \"float pi(void)\",\n        \"Returns an approximation of pi\"\n    ],\n    \"png2wbmp\": [\n        \"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert PNG image to WBMP image\"\n    ],\n    \"popen\": [\n        \"resource popen(string command, string mode)\",\n        \"Execute a command and open either a read or a write pipe to it\"\n    ],\n    \"posix_access\": [\n        \"bool posix_access(string file [, int mode])\",\n        \"Determine accessibility of a file (POSIX.1 5.6.3)\"\n    ],\n    \"posix_ctermid\": [\n        \"string posix_ctermid(void)\",\n        \"Generate terminal path name (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_get_last_error\": [\n        \"int posix_get_last_error(void)\",\n        \"Retrieve the error number set by the last posix function which failed.\"\n    ],\n    \"posix_getcwd\": [\n        \"string posix_getcwd(void)\",\n        \"Get working directory pathname (POSIX.1, 5.2.2)\"\n    ],\n    \"posix_getegid\": [\n        \"int posix_getegid(void)\",\n        \"Get the current effective group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_geteuid\": [\n        \"int posix_geteuid(void)\",\n        \"Get the current effective user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgid\": [\n        \"int posix_getgid(void)\",\n        \"Get the current group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgrgid\": [\n        \"array posix_getgrgid(long gid)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgrnam\": [\n        \"array posix_getgrnam(string groupname)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgroups\": [\n        \"array posix_getgroups(void)\",\n        \"Get supplementary group id's (POSIX.1, 4.2.3)\"\n    ],\n    \"posix_getlogin\": [\n        \"string posix_getlogin(void)\",\n        \"Get user name (POSIX.1, 4.2.4)\"\n    ],\n    \"posix_getpgid\": [\n        \"int posix_getpgid(void)\",\n        \"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"\n    ],\n    \"posix_getpgrp\": [\n        \"int posix_getpgrp(void)\",\n        \"Get current process group id (POSIX.1, 4.3.1)\"\n    ],\n    \"posix_getpid\": [\n        \"int posix_getpid(void)\",\n        \"Get the current process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getppid\": [\n        \"int posix_getppid(void)\",\n        \"Get the parent process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getpwnam\": [\n        \"array posix_getpwnam(string groupname)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getpwuid\": [\n        \"array posix_getpwuid(long uid)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getrlimit\": [\n        \"array posix_getrlimit(void)\",\n        \"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"\n    ],\n    \"posix_getsid\": [\n        \"int posix_getsid(void)\",\n        \"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"\n    ],\n    \"posix_getuid\": [\n        \"int posix_getuid(void)\",\n        \"Get the current user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_initgroups\": [\n        \"bool posix_initgroups(string name, int base_group_id)\",\n        \"Calculate the group access list for the user specified in name.\"\n    ],\n    \"posix_isatty\": [\n        \"bool posix_isatty(int fd)\",\n        \"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_kill\": [\n        \"bool posix_kill(int pid, int sig)\",\n        \"Send a signal to a process (POSIX.1, 3.3.2)\"\n    ],\n    \"posix_mkfifo\": [\n        \"bool posix_mkfifo(string pathname, int mode)\",\n        \"Make a FIFO special file (POSIX.1, 5.4.2)\"\n    ],\n    \"posix_mknod\": [\n        \"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\n        \"Make a special or ordinary file (POSIX.1)\"\n    ],\n    \"posix_setegid\": [\n        \"bool posix_setegid(long uid)\",\n        \"Set effective group id\"\n    ],\n    \"posix_seteuid\": [\n        \"bool posix_seteuid(long uid)\",\n        \"Set effective user id\"\n    ],\n    \"posix_setgid\": [\n        \"bool posix_setgid(int uid)\",\n        \"Set group id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_setpgid\": [\n        \"bool posix_setpgid(int pid, int pgid)\",\n        \"Set process group id for job control (POSIX.1, 4.3.3)\"\n    ],\n    \"posix_setsid\": [\n        \"int posix_setsid(void)\",\n        \"Create session and set process group id (POSIX.1, 4.3.2)\"\n    ],\n    \"posix_setuid\": [\n        \"bool posix_setuid(long uid)\",\n        \"Set user id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_strerror\": [\n        \"string posix_strerror(int errno)\",\n        \"Retrieve the system error message associated with the given errno.\"\n    ],\n    \"posix_times\": [\n        \"array posix_times(void)\",\n        \"Get process times (POSIX.1, 4.5.2)\"\n    ],\n    \"posix_ttyname\": [\n        \"string posix_ttyname(int fd)\",\n        \"Determine terminal device name (POSIX.1, 4.7.2)\"\n    ],\n    \"posix_uname\": [\n        \"array posix_uname(void)\",\n        \"Get system name (POSIX.1, 4.4.1)\"\n    ],\n    \"pow\": [\n        \"number pow(number base, number exponent)\",\n        \"Returns base raised to the power of exponent. Returns integer result when possible\"\n    ],\n    \"preg_filter\": [\n        \"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement and only return matches.\"\n    ],\n    \"preg_grep\": [\n        \"array preg_grep(string regex, array input [, int flags])\",\n        \"Searches array and returns entries which match regex\"\n    ],\n    \"preg_last_error\": [\n        \"int preg_last_error()\",\n        \"Returns the error code of the last regexp execution.\"\n    ],\n    \"preg_match\": [\n        \"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\n        \"Perform a Perl-style regular expression match\"\n    ],\n    \"preg_match_all\": [\n        \"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\n        \"Perform a Perl-style global regular expression match\"\n    ],\n    \"preg_quote\": [\n        \"string preg_quote(string str [, string delim_char])\",\n        \"Quote regular expression characters plus an optional character\"\n    ],\n    \"preg_replace\": [\n        \"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement.\"\n    ],\n    \"preg_replace_callback\": [\n        \"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement using replacement callback.\"\n    ],\n    \"preg_split\": [\n        \"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\n        \"Split string into an array using a perl-style regular expression as a delimiter\"\n    ],\n    \"prev\": [\n        \"mixed prev(array array_arg)\",\n        \"Move array argument's internal pointer to the previous element and return it\"\n    ],\n    \"print\": [\n        \"int print(string arg)\",\n        \"Output a string\"\n    ],\n    \"print_r\": [\n        \"mixed print_r(mixed var [, bool return])\",\n        \"Prints out or returns information about the specified variable\"\n    ],\n    \"printf\": [\n        \"int printf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string\"\n    ],\n    \"proc_close\": [\n        \"int proc_close(resource process)\",\n        \"close a process opened by proc_open\"\n    ],\n    \"proc_get_status\": [\n        \"array proc_get_status(resource process)\",\n        \"get information about a process opened by proc_open\"\n    ],\n    \"proc_nice\": [\n        \"bool proc_nice(int priority)\",\n        \"Change the priority of the current process\"\n    ],\n    \"proc_open\": [\n        \"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\n        \"Run a process with more control over it's file descriptors\"\n    ],\n    \"proc_terminate\": [\n        \"bool proc_terminate(resource process [, long signal])\",\n        \"kill a process opened by proc_open\"\n    ],\n    \"property_exists\": [\n        \"bool property_exists(mixed object_or_class, string property_name)\",\n        \"Checks if the object or class has a property\"\n    ],\n    \"pspell_add_to_personal\": [\n        \"bool pspell_add_to_personal(int pspell, string word)\",\n        \"Adds a word to a personal list\"\n    ],\n    \"pspell_add_to_session\": [\n        \"bool pspell_add_to_session(int pspell, string word)\",\n        \"Adds a word to the current session\"\n    ],\n    \"pspell_check\": [\n        \"bool pspell_check(int pspell, string word)\",\n        \"Returns true if word is valid\"\n    ],\n    \"pspell_clear_session\": [\n        \"bool pspell_clear_session(int pspell)\",\n        \"Clears the current session\"\n    ],\n    \"pspell_config_create\": [\n        \"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\n        \"Create a new config to be used later to create a manager\"\n    ],\n    \"pspell_config_data_dir\": [\n        \"bool pspell_config_data_dir(int conf, string directory)\",\n        \"location of language data files\"\n    ],\n    \"pspell_config_dict_dir\": [\n        \"bool pspell_config_dict_dir(int conf, string directory)\",\n        \"location of the main word list\"\n    ],\n    \"pspell_config_ignore\": [\n        \"bool pspell_config_ignore(int conf, int ignore)\",\n        \"Ignore words <= n chars\"\n    ],\n    \"pspell_config_mode\": [\n        \"bool pspell_config_mode(int conf, long mode)\",\n        \"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"\n    ],\n    \"pspell_config_personal\": [\n        \"bool pspell_config_personal(int conf, string personal)\",\n        \"Use a personal dictionary for this config\"\n    ],\n    \"pspell_config_repl\": [\n        \"bool pspell_config_repl(int conf, string repl)\",\n        \"Use a personal dictionary with replacement pairs for this config\"\n    ],\n    \"pspell_config_runtogether\": [\n        \"bool pspell_config_runtogether(int conf, bool runtogether)\",\n        \"Consider run-together words as valid components\"\n    ],\n    \"pspell_config_save_repl\": [\n        \"bool pspell_config_save_repl(int conf, bool save)\",\n        \"Save replacement pairs when personal list is saved for this config\"\n    ],\n    \"pspell_new\": [\n        \"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary\"\n    ],\n    \"pspell_new_config\": [\n        \"int pspell_new_config(int config)\",\n        \"Load a dictionary based on the given config\"\n    ],\n    \"pspell_new_personal\": [\n        \"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary with a personal wordlist\"\n    ],\n    \"pspell_save_wordlist\": [\n        \"bool pspell_save_wordlist(int pspell)\",\n        \"Saves the current (personal) wordlist\"\n    ],\n    \"pspell_store_replacement\": [\n        \"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\n        \"Notify the dictionary of a user-selected replacement\"\n    ],\n    \"pspell_suggest\": [\n        \"array pspell_suggest(int pspell, string word)\",\n        \"Returns array of suggestions\"\n    ],\n    \"putenv\": [\n        \"bool putenv(string setting)\",\n        \"Set the value of an environment variable\"\n    ],\n    \"quoted_printable_decode\": [\n        \"string quoted_printable_decode(string str)\",\n        \"Convert a quoted-printable string to an 8 bit string\"\n    ],\n    \"quoted_printable_encode\": [\n        \"string quoted_printable_encode(string str) */\",\n        \"PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}\"\n    ],\n    \"quotemeta\": [\n        \"string quotemeta(string str)\",\n        \"Quotes meta characters\"\n    ],\n    \"rad2deg\": [\n        \"float rad2deg(float number)\",\n        \"Converts the radian number to the equivalent number in degrees\"\n    ],\n    \"rand\": [\n        \"int rand([int min, int max])\",\n        \"Returns a random number\"\n    ],\n    \"range\": [\n        \"array range(mixed low, mixed high[, int step])\",\n        \"Create an array containing the range of integers or characters from low to high (inclusive)\"\n    ],\n    \"rawurldecode\": [\n        \"string rawurldecode(string str)\",\n        \"Decodes URL-encodes string\"\n    ],\n    \"rawurlencode\": [\n        \"string rawurlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"readdir\": [\n        \"string readdir([resource dir_handle])\",\n        \"Read directory entry from dir_handle\"\n    ],\n    \"readfile\": [\n        \"int readfile(string filename [, bool use_include_path[, resource context]])\",\n        \"Output a file or a URL\"\n    ],\n    \"readgzfile\": [\n        \"int readgzfile(string filename [, int use_include_path])\",\n        \"Output a .gz-file\"\n    ],\n    \"readline\": [\n        \"string readline([string prompt])\",\n        \"Reads a line\"\n    ],\n    \"readline_add_history\": [\n        \"bool readline_add_history(string prompt)\",\n        \"Adds a line to the history\"\n    ],\n    \"readline_callback_handler_install\": [\n        \"void readline_callback_handler_install(string prompt, mixed callback)\",\n        \"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"\n    ],\n    \"readline_callback_handler_remove\": [\n        \"bool readline_callback_handler_remove()\",\n        \"Removes a previously installed callback handler and restores terminal settings\"\n    ],\n    \"readline_callback_read_char\": [\n        \"void readline_callback_read_char()\",\n        \"Informs the readline callback interface that a character is ready for input\"\n    ],\n    \"readline_clear_history\": [\n        \"bool readline_clear_history(void)\",\n        \"Clears the history\"\n    ],\n    \"readline_completion_function\": [\n        \"bool readline_completion_function(string funcname)\",\n        \"Readline completion function?\"\n    ],\n    \"readline_info\": [\n        \"mixed readline_info([string varname [, string newvalue]])\",\n        \"Gets/sets various internal readline variables.\"\n    ],\n    \"readline_list_history\": [\n        \"array readline_list_history(void)\",\n        \"Lists the history\"\n    ],\n    \"readline_on_new_line\": [\n        \"void readline_on_new_line(void)\",\n        \"Inform readline that the cursor has moved to a new line\"\n    ],\n    \"readline_read_history\": [\n        \"bool readline_read_history([string filename])\",\n        \"Reads the history\"\n    ],\n    \"readline_redisplay\": [\n        \"void readline_redisplay(void)\",\n        \"Ask readline to redraw the display\"\n    ],\n    \"readline_write_history\": [\n        \"bool readline_write_history([string filename])\",\n        \"Writes the history\"\n    ],\n    \"readlink\": [\n        \"string readlink(string filename)\",\n        \"Return the target of a symbolic link\"\n    ],\n    \"realpath\": [\n        \"string realpath(string path)\",\n        \"Return the resolved path\"\n    ],\n    \"realpath_cache_get\": [\n        \"bool realpath_cache_get()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"realpath_cache_size\": [\n        \"bool realpath_cache_size()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"recode_file\": [\n        \"bool recode_file(string request, resource input, resource output)\",\n        \"Recode file input into file output according to request\"\n    ],\n    \"recode_string\": [\n        \"string recode_string(string request, string str)\",\n        \"Recode string str according to request string\"\n    ],\n    \"register_shutdown_function\": [\n        \"void register_shutdown_function(string function_name)\",\n        \"Register a user-level function to be called on request termination\"\n    ],\n    \"register_tick_function\": [\n        \"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\n        \"Registers a tick callback function\"\n    ],\n    \"rename\": [\n        \"bool rename(string old_name, string new_name[, resource context])\",\n        \"Rename a file\"\n    ],\n    \"require\": [\n        \"bool require(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"require_once\": [\n        \"bool require_once(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"reset\": [\n        \"mixed reset(array array_arg)\",\n        \"Set array argument's internal pointer to the first element and return it\"\n    ],\n    \"restore_error_handler\": [\n        \"void restore_error_handler(void)\",\n        \"Restores the previously defined error handler function\"\n    ],\n    \"restore_exception_handler\": [\n        \"void restore_exception_handler(void)\",\n        \"Restores the previously defined exception handler function\"\n    ],\n    \"restore_include_path\": [\n        \"void restore_include_path()\",\n        \"Restore the value of the include_path configuration option\"\n    ],\n    \"rewind\": [\n        \"bool rewind(resource fp)\",\n        \"Rewind the position of a file pointer\"\n    ],\n    \"rewinddir\": [\n        \"void rewinddir([resource dir_handle])\",\n        \"Rewind dir_handle back to the start\"\n    ],\n    \"rmdir\": [\n        \"bool rmdir(string dirname[, resource context])\",\n        \"Remove a directory\"\n    ],\n    \"round\": [\n        \"float round(float number [, int precision [, int mode]])\",\n        \"Returns the number rounded to specified precision\"\n    ],\n    \"rsort\": [\n        \"bool rsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order\"\n    ],\n    \"rtrim\": [\n        \"string rtrim(string str [, string character_mask])\",\n        \"Removes trailing whitespace\"\n    ],\n    \"scandir\": [\n        \"array scandir(string dir [, int sorting_order [, resource context]])\",\n        \"List files & directories inside the specified path\"\n    ],\n    \"sem_acquire\": [\n        \"bool sem_acquire(resource id)\",\n        \"Acquires the semaphore with the given id, blocking if necessary\"\n    ],\n    \"sem_get\": [\n        \"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\n        \"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"\n    ],\n    \"sem_release\": [\n        \"bool sem_release(resource id)\",\n        \"Releases the semaphore with the given id\"\n    ],\n    \"sem_remove\": [\n        \"bool sem_remove(resource id)\",\n        \"Removes semaphore from Unix systems\"\n    ],\n    \"serialize\": [\n        \"string serialize(mixed variable)\",\n        \"Returns a string representation of variable (which can later be unserialized)\"\n    ],\n    \"session_cache_expire\": [\n        \"int session_cache_expire([int new_cache_expire])\",\n        \"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"\n    ],\n    \"session_cache_limiter\": [\n        \"string session_cache_limiter([string new_cache_limiter])\",\n        \"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"\n    ],\n    \"session_decode\": [\n        \"bool session_decode(string data)\",\n        \"Deserializes data and reinitializes the variables\"\n    ],\n    \"session_destroy\": [\n        \"bool session_destroy(void)\",\n        \"Destroy the current session and all data associated with it\"\n    ],\n    \"session_encode\": [\n        \"string session_encode(void)\",\n        \"Serializes the current setup and returns the serialized representation\"\n    ],\n    \"session_get_cookie_params\": [\n        \"array session_get_cookie_params(void)\",\n        \"Return the session cookie parameters\"\n    ],\n    \"session_id\": [\n        \"string session_id([string newid])\",\n        \"Return the current session id. If newid is given, the session id is replaced with newid\"\n    ],\n    \"session_is_registered\": [\n        \"bool session_is_registered(string varname)\",\n        \"Checks if a variable is registered in session\"\n    ],\n    \"session_module_name\": [\n        \"string session_module_name([string newname])\",\n        \"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"\n    ],\n    \"session_name\": [\n        \"string session_name([string newname])\",\n        \"Return the current session name. If newname is given, the session name is replaced with newname\"\n    ],\n    \"session_regenerate_id\": [\n        \"bool session_regenerate_id([bool delete_old_session])\",\n        \"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"\n    ],\n    \"session_register\": [\n        \"bool session_register(mixed var_names [, mixed ...])\",\n        \"Adds varname(s) to the list of variables which are freezed at the session end\"\n    ],\n    \"session_save_path\": [\n        \"string session_save_path([string newname])\",\n        \"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"\n    ],\n    \"session_set_cookie_params\": [\n        \"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\n        \"Set session cookie parameters\"\n    ],\n    \"session_set_save_handler\": [\n        \"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\n        \"Sets user-level functions\"\n    ],\n    \"session_start\": [\n        \"bool session_start(void)\",\n        \"Begin session - reinitializes freezed variables, registers browsers etc\"\n    ],\n    \"session_unregister\": [\n        \"bool session_unregister(string varname)\",\n        \"Removes varname from the list of variables which are freezed at the session end\"\n    ],\n    \"session_unset\": [\n        \"void session_unset(void)\",\n        \"Unset all registered variables\"\n    ],\n    \"session_write_close\": [\n        \"void session_write_close(void)\",\n        \"Write session data and end session\"\n    ],\n    \"set_error_handler\": [\n        \"string set_error_handler(string error_handler [, int error_types])\",\n        \"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"\n    ],\n    \"set_exception_handler\": [\n        \"string set_exception_handler(callable exception_handler)\",\n        \"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"\n    ],\n    \"set_include_path\": [\n        \"string set_include_path(string new_include_path)\",\n        \"Sets the include_path configuration option\"\n    ],\n    \"set_magic_quotes_runtime\": [\n        \"bool set_magic_quotes_runtime(int new_setting)\",\n        \"Set the current active configuration setting of magic_quotes_runtime and return previous\"\n    ],\n    \"set_time_limit\": [\n        \"bool set_time_limit(int seconds)\",\n        \"Sets the maximum time a script can run\"\n    ],\n    \"setcookie\": [\n        \"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie\"\n    ],\n    \"setlocale\": [\n        \"string setlocale(mixed category, string locale [, string ...])\",\n        \"Set locale information\"\n    ],\n    \"setrawcookie\": [\n        \"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie with no url encoding of the value\"\n    ],\n    \"settype\": [\n        \"bool settype(mixed var, string type)\",\n        \"Set the type of the variable\"\n    ],\n    \"sha1\": [\n        \"string sha1(string str [, bool raw_output])\",\n        \"Calculate the sha1 hash of a string\"\n    ],\n    \"sha1_file\": [\n        \"string sha1_file(string filename [, bool raw_output])\",\n        \"Calculate the sha1 hash of given filename\"\n    ],\n    \"shell_exec\": [\n        \"string shell_exec(string cmd)\",\n        \"Execute command via shell and return complete output as string\"\n    ],\n    \"shm_attach\": [\n        \"int shm_attach(int key [, int memsize [, int perm]])\",\n        \"Creates or open a shared memory segment\"\n    ],\n    \"shm_detach\": [\n        \"bool shm_detach(resource shm_identifier)\",\n        \"Disconnects from shared memory segment\"\n    ],\n    \"shm_get_var\": [\n        \"mixed shm_get_var(resource id, int variable_key)\",\n        \"Returns a variable from shared memory\"\n    ],\n    \"shm_has_var\": [\n        \"bool shm_has_var(resource id, int variable_key)\",\n        \"Checks whether a specific entry exists\"\n    ],\n    \"shm_put_var\": [\n        \"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\n        \"Inserts or updates a variable in shared memory\"\n    ],\n    \"shm_remove\": [\n        \"bool shm_remove(resource shm_identifier)\",\n        \"Removes shared memory from Unix systems\"\n    ],\n    \"shm_remove_var\": [\n        \"bool shm_remove_var(resource id, int variable_key)\",\n        \"Removes variable from shared memory\"\n    ],\n    \"shmop_close\": [\n        \"void shmop_close (int shmid)\",\n        \"closes a shared memory segment\"\n    ],\n    \"shmop_delete\": [\n        \"bool shmop_delete (int shmid)\",\n        \"mark segment for deletion\"\n    ],\n    \"shmop_open\": [\n        \"int shmop_open (int key, string flags, int mode, int size)\",\n        \"gets and attaches a shared memory segment\"\n    ],\n    \"shmop_read\": [\n        \"string shmop_read (int shmid, int start, int count)\",\n        \"reads from a shm segment\"\n    ],\n    \"shmop_size\": [\n        \"int shmop_size (int shmid)\",\n        \"returns the shm size\"\n    ],\n    \"shmop_write\": [\n        \"int shmop_write (int shmid, string data, int offset)\",\n        \"writes to a shared memory segment\"\n    ],\n    \"shuffle\": [\n        \"bool shuffle(array array_arg)\",\n        \"Randomly shuffle the contents of an array\"\n    ],\n    \"similar_text\": [\n        \"int similar_text(string str1, string str2 [, float percent])\",\n        \"Calculates the similarity between two strings\"\n    ],\n    \"simplexml_import_dom\": [\n        \"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"simplexml_load_file\": [\n        \"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a filename and return a simplexml_element object to allow for processing\"\n    ],\n    \"simplexml_load_string\": [\n        \"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a string and return a simplexml_element object to allow for processing\"\n    ],\n    \"sin\": [\n        \"float sin(float number)\",\n        \"Returns the sine of the number in radians\"\n    ],\n    \"sinh\": [\n        \"float sinh(float number)\",\n        \"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"\n    ],\n    \"sleep\": [\n        \"void sleep(int seconds)\",\n        \"Delay for a given number of seconds\"\n    ],\n    \"smfi_addheader\": [\n        \"bool smfi_addheader(string headerf, string headerv)\",\n        \"Adds a header to the current message.\"\n    ],\n    \"smfi_addrcpt\": [\n        \"bool smfi_addrcpt(string rcpt)\",\n        \"Add a recipient to the message envelope.\"\n    ],\n    \"smfi_chgheader\": [\n        \"bool smfi_chgheader(string headerf, string headerv)\",\n        \"Changes a header's value for the current message.\"\n    ],\n    \"smfi_delrcpt\": [\n        \"bool smfi_delrcpt(string rcpt)\",\n        \"Removes the named recipient from the current message's envelope.\"\n    ],\n    \"smfi_getsymval\": [\n        \"string smfi_getsymval(string macro)\",\n        \"Returns the value of the given macro or NULL if the macro is not defined.\"\n    ],\n    \"smfi_replacebody\": [\n        \"bool smfi_replacebody(string body)\",\n        \"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"\n    ],\n    \"smfi_setflags\": [\n        \"void smfi_setflags(long flags)\",\n        \"Sets the flags describing the actions the filter may take.\"\n    ],\n    \"smfi_setreply\": [\n        \"bool smfi_setreply(string rcode, string xcode, string message)\",\n        \"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"\n    ],\n    \"smfi_settimeout\": [\n        \"void smfi_settimeout(long timeout)\",\n        \"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"\n    ],\n    \"snmp2_get\": [\n        \"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_getnext\": [\n        \"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_real_walk\": [\n        \"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp2_set\": [\n        \"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmp2_walk\": [\n        \"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"snmp3_get\": [\n        \"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_getnext\": [\n        \"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_real_walk\": [\n        \"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_set\": [\n        \"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_walk\": [\n        \"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp_get_quick_print\": [\n        \"bool snmp_get_quick_print(void)\",\n        \"Return the current status of quick_print\"\n    ],\n    \"snmp_get_valueretrieval\": [\n        \"int snmp_get_valueretrieval()\",\n        \"Return the method how the SNMP values will be returned\"\n    ],\n    \"snmp_read_mib\": [\n        \"int snmp_read_mib(string filename)\",\n        \"Reads and parses a MIB file into the active MIB tree.\"\n    ],\n    \"snmp_set_enum_print\": [\n        \"void snmp_set_enum_print(int enum_print)\",\n        \"Return all values that are enums with their enum value instead of the raw integer\"\n    ],\n    \"snmp_set_oid_output_format\": [\n        \"void snmp_set_oid_output_format(int oid_format)\",\n        \"Set the OID output format.\"\n    ],\n    \"snmp_set_quick_print\": [\n        \"void snmp_set_quick_print(int quick_print)\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp_set_valueretrieval\": [\n        \"void snmp_set_valueretrieval(int method)\",\n        \"Specify the method how the SNMP values will be returned\"\n    ],\n    \"snmpget\": [\n        \"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmpgetnext\": [\n        \"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmprealwalk\": [\n        \"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmpset\": [\n        \"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmpwalk\": [\n        \"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"socket_accept\": [\n        \"resource socket_accept(resource socket)\",\n        \"Accepts a connection on the listening socket fd\"\n    ],\n    \"socket_bind\": [\n        \"bool socket_bind(resource socket, string addr [, int port])\",\n        \"Binds an open socket to a listening port, port is only specified in AF_INET family.\"\n    ],\n    \"socket_clear_error\": [\n        \"void socket_clear_error([resource socket])\",\n        \"Clears the error on the socket or the last error code.\"\n    ],\n    \"socket_close\": [\n        \"void socket_close(resource socket)\",\n        \"Closes a file descriptor\"\n    ],\n    \"socket_connect\": [\n        \"bool socket_connect(resource socket, string addr [, int port])\",\n        \"Opens a connection to addr:port on the socket specified by socket\"\n    ],\n    \"socket_create\": [\n        \"resource socket_create(int domain, int type, int protocol)\",\n        \"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"\n    ],\n    \"socket_create_listen\": [\n        \"resource socket_create_listen(int port[, int backlog])\",\n        \"Opens a socket on port to accept connections\"\n    ],\n    \"socket_create_pair\": [\n        \"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\n        \"Creates a pair of indistinguishable sockets and stores them in fds.\"\n    ],\n    \"socket_get_option\": [\n        \"mixed socket_get_option(resource socket, int level, int optname)\",\n        \"Gets socket options for the socket\"\n    ],\n    \"socket_getpeername\": [\n        \"bool socket_getpeername(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_getsockname\": [\n        \"bool socket_getsockname(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_last_error\": [\n        \"int socket_last_error([resource socket])\",\n        \"Returns the last socket error (either the last used or the provided socket resource)\"\n    ],\n    \"socket_listen\": [\n        \"bool socket_listen(resource socket[, int backlog])\",\n        \"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"\n    ],\n    \"socket_read\": [\n        \"string socket_read(resource socket, int length [, int type])\",\n        \"Reads a maximum of length bytes from socket\"\n    ],\n    \"socket_recv\": [\n        \"int socket_recv(resource socket, string &buf, int len, int flags)\",\n        \"Receives data from a connected socket\"\n    ],\n    \"socket_recvfrom\": [\n        \"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\n        \"Receives data from a socket, connected or not\"\n    ],\n    \"socket_select\": [\n        \"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"socket_send\": [\n        \"int socket_send(resource socket, string buf, int len, int flags)\",\n        \"Sends data to a connected socket\"\n    ],\n    \"socket_sendto\": [\n        \"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\n        \"Sends a message to a socket, whether it is connected or not\"\n    ],\n    \"socket_set_block\": [\n        \"bool socket_set_block(resource socket)\",\n        \"Sets blocking mode on a socket resource\"\n    ],\n    \"socket_set_nonblock\": [\n        \"bool socket_set_nonblock(resource socket)\",\n        \"Sets nonblocking mode on a socket resource\"\n    ],\n    \"socket_set_option\": [\n        \"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\n        \"Sets socket options for the socket\"\n    ],\n    \"socket_shutdown\": [\n        \"bool socket_shutdown(resource socket[, int how])\",\n        \"Shuts down a socket for receiving, sending, or both.\"\n    ],\n    \"socket_strerror\": [\n        \"string socket_strerror(int errno)\",\n        \"Returns a string describing an error\"\n    ],\n    \"socket_write\": [\n        \"int socket_write(resource socket, string buf[, int length])\",\n        \"Writes the buffer to the socket resource, length is optional\"\n    ],\n    \"solid_fetch_prev\": [\n        \"bool solid_fetch_prev(resource result_id)\",\n        \"\"\n    ],\n    \"sort\": [\n        \"bool sort(array &array_arg [, int sort_flags])\",\n        \"Sort an array\"\n    ],\n    \"soundex\": [\n        \"string soundex(string str)\",\n        \"Calculate the soundex key of a string\"\n    ],\n    \"spl_autoload\": [\n        \"void spl_autoload(string class_name [, string file_extensions])\",\n        \"Default implementation for __autoload()\"\n    ],\n    \"spl_autoload_call\": [\n        \"void spl_autoload_call(string class_name)\",\n        \"Try all registerd autoload function to load the requested class\"\n    ],\n    \"spl_autoload_extensions\": [\n        \"string spl_autoload_extensions([string file_extensions])\",\n        \"Register and return default file extensions for spl_autoload\"\n    ],\n    \"spl_autoload_functions\": [\n        \"false|array spl_autoload_functions()\",\n        \"Return all registered __autoload() functionns\"\n    ],\n    \"spl_autoload_register\": [\n        \"bool spl_autoload_register([mixed autoload_function = \\\"spl_autoload\\\" [, throw = true [, prepend]]])\",\n        \"Register given function as __autoload() implementation\"\n    ],\n    \"spl_autoload_unregister\": [\n        \"bool spl_autoload_unregister(mixed autoload_function)\",\n        \"Unregister given function as __autoload() implementation\"\n    ],\n    \"spl_classes\": [\n        \"array spl_classes()\",\n        \"Return an array containing the names of all clsses and interfaces defined in SPL\"\n    ],\n    \"spl_object_hash\": [\n        \"string spl_object_hash(object obj)\",\n        \"Return hash id for given object\"\n    ],\n    \"split\": [\n        \"array split(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression\"\n    ],\n    \"spliti\": [\n        \"array spliti(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression case-insensitive\"\n    ],\n    \"sprintf\": [\n        \"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Return a formatted string\"\n    ],\n    \"sql_regcase\": [\n        \"string sql_regcase(string string)\",\n        \"Make regular expression for case insensitive match\"\n    ],\n    \"sqlite_array_query\": [\n        \"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\n        \"Executes a query against a given database and returns an array of arrays.\"\n    ],\n    \"sqlite_busy_timeout\": [\n        \"void sqlite_busy_timeout(resource db, int ms)\",\n        \"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"\n    ],\n    \"sqlite_changes\": [\n        \"int sqlite_changes(resource db)\",\n        \"Returns the number of rows that were changed by the most recent SQL statement.\"\n    ],\n    \"sqlite_close\": [\n        \"void sqlite_close(resource db)\",\n        \"Closes an open sqlite database.\"\n    ],\n    \"sqlite_column\": [\n        \"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\n        \"Fetches a column from the current row of a result set.\"\n    ],\n    \"sqlite_create_aggregate\": [\n        \"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\n        \"Registers an aggregate function for queries.\"\n    ],\n    \"sqlite_create_function\": [\n        \"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",\n        \"Registers a \\\"regular\\\" function for queries.\"\n    ],\n    \"sqlite_current\": [\n        \"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the current row from a result set as an array.\"\n    ],\n    \"sqlite_error_string\": [\n        \"string sqlite_error_string(int error_code)\",\n        \"Returns the textual description of an error code.\"\n    ],\n    \"sqlite_escape_string\": [\n        \"string sqlite_escape_string(string item)\",\n        \"Escapes a string for use as a query parameter.\"\n    ],\n    \"sqlite_exec\": [\n        \"boolean sqlite_exec(string query, resource db[, string &error_message])\",\n        \"Executes a result-less query against a given database\"\n    ],\n    \"sqlite_factory\": [\n        \"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_fetch_all\": [\n        \"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches all rows from a result set as an array of arrays.\"\n    ],\n    \"sqlite_fetch_array\": [\n        \"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the next row from a result set as an array.\"\n    ],\n    \"sqlite_fetch_column_types\": [\n        \"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\n        \"Return an array of column types from a particular table.\"\n    ],\n    \"sqlite_fetch_object\": [\n        \"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\n        \"Fetches the next row from a result set as an object.\"\n    ],\n    \"sqlite_fetch_single\": [\n        \"string sqlite_fetch_single(resource result [, bool decode_binary])\",\n        \"Fetches the first column of a result set as a string.\"\n    ],\n    \"sqlite_field_name\": [\n        \"string sqlite_field_name(resource result, int field_index)\",\n        \"Returns the name of a particular field of a result set.\"\n    ],\n    \"sqlite_has_prev\": [\n        \"bool sqlite_has_prev(resource result)\",\n        \"* Returns whether a previous row is available.\"\n    ],\n    \"sqlite_key\": [\n        \"int sqlite_key(resource result)\",\n        \"Return the current row index of a buffered result.\"\n    ],\n    \"sqlite_last_error\": [\n        \"int sqlite_last_error(resource db)\",\n        \"Returns the error code of the last error for a database.\"\n    ],\n    \"sqlite_last_insert_rowid\": [\n        \"int sqlite_last_insert_rowid(resource db)\",\n        \"Returns the rowid of the most recently inserted row.\"\n    ],\n    \"sqlite_libencoding\": [\n        \"string sqlite_libencoding()\",\n        \"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"\n    ],\n    \"sqlite_libversion\": [\n        \"string sqlite_libversion()\",\n        \"Returns the version of the linked SQLite library.\"\n    ],\n    \"sqlite_next\": [\n        \"bool sqlite_next(resource result)\",\n        \"Seek to the next row number of a result set.\"\n    ],\n    \"sqlite_num_fields\": [\n        \"int sqlite_num_fields(resource result)\",\n        \"Returns the number of fields in a result set.\"\n    ],\n    \"sqlite_num_rows\": [\n        \"int sqlite_num_rows(resource result)\",\n        \"Returns the number of rows in a buffered result set.\"\n    ],\n    \"sqlite_open\": [\n        \"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_popen\": [\n        \"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\n        \"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_prev\": [\n        \"bool sqlite_prev(resource result)\",\n        \"* Seek to the previous row number of a result set.\"\n    ],\n    \"sqlite_query\": [\n        \"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\n        \"Executes a query against a given database and returns a result handle.\"\n    ],\n    \"sqlite_rewind\": [\n        \"bool sqlite_rewind(resource result)\",\n        \"Seek to the first row number of a buffered result set.\"\n    ],\n    \"sqlite_seek\": [\n        \"bool sqlite_seek(resource result, int row)\",\n        \"Seek to a particular row number of a buffered result set.\"\n    ],\n    \"sqlite_single_query\": [\n        \"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\n        \"Executes a query and returns either an array for one single column or the value of the first row.\"\n    ],\n    \"sqlite_udf_decode_binary\": [\n        \"string sqlite_udf_decode_binary(string data)\",\n        \"Decode binary encoding on a string parameter passed to an UDF.\"\n    ],\n    \"sqlite_udf_encode_binary\": [\n        \"string sqlite_udf_encode_binary(string data)\",\n        \"Apply binary encoding (if required) to a string to return from an UDF.\"\n    ],\n    \"sqlite_unbuffered_query\": [\n        \"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\n        \"Executes a query that does not prefetch and buffer all data.\"\n    ],\n    \"sqlite_valid\": [\n        \"bool sqlite_valid(resource result)\",\n        \"Returns whether more rows are available.\"\n    ],\n    \"sqrt\": [\n        \"float sqrt(float number)\",\n        \"Returns the square root of the number\"\n    ],\n    \"srand\": [\n        \"void srand([int seed])\",\n        \"Seeds random number generator\"\n    ],\n    \"sscanf\": [\n        \"mixed sscanf(string str, string format [, string ...])\",\n        \"Implements an ANSI C compatible sscanf\"\n    ],\n    \"stat\": [\n        \"array stat(string filename)\",\n        \"Give information about a file\"\n    ],\n    \"str_getcsv\": [\n        \"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\n        \"Parse a CSV string into an array\"\n    ],\n    \"str_ireplace\": [\n        \"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace / case-insensitive\"\n    ],\n    \"str_pad\": [\n        \"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\n        \"Returns input string padded on the left or right to specified length with pad_string\"\n    ],\n    \"str_repeat\": [\n        \"string str_repeat(string input, int mult)\",\n        \"Returns the input string repeat mult times\"\n    ],\n    \"str_replace\": [\n        \"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace\"\n    ],\n    \"str_rot13\": [\n        \"string str_rot13(string str)\",\n        \"Perform the rot13 transform on a string\"\n    ],\n    \"str_shuffle\": [\n        \"void str_shuffle(string str)\",\n        \"Shuffles string. One permutation of all possible is created\"\n    ],\n    \"str_split\": [\n        \"array str_split(string str [, int split_length])\",\n        \"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"\n    ],\n    \"str_word_count\": [\n        \"mixed str_word_count(string str, [int format [, string charlist]])\",\n        \"Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, 'word' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \\\"'\\\" and \\\"-\\\" characters.\"\n    ],\n    \"strcasecmp\": [\n        \"int strcasecmp(string str1, string str2)\",\n        \"Binary safe case-insensitive string comparison\"\n    ],\n    \"strchr\": [\n        \"string strchr(string haystack, string needle)\",\n        \"An alias for strstr\"\n    ],\n    \"strcmp\": [\n        \"int strcmp(string str1, string str2)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strcoll\": [\n        \"int strcoll(string str1, string str2)\",\n        \"Compares two strings using the current locale\"\n    ],\n    \"strcspn\": [\n        \"int strcspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"\n    ],\n    \"stream_bucket_append\": [\n        \"void stream_bucket_append(resource brigade, resource bucket)\",\n        \"Append bucket to brigade\"\n    ],\n    \"stream_bucket_make_writeable\": [\n        \"object stream_bucket_make_writeable(resource brigade)\",\n        \"Return a bucket object from the brigade for operating on\"\n    ],\n    \"stream_bucket_new\": [\n        \"resource stream_bucket_new(resource stream, string buffer)\",\n        \"Create a new bucket for use on the current stream\"\n    ],\n    \"stream_bucket_prepend\": [\n        \"void stream_bucket_prepend(resource brigade, resource bucket)\",\n        \"Prepend bucket to brigade\"\n    ],\n    \"stream_context_create\": [\n        \"resource stream_context_create([array options[, array params]])\",\n        \"Create a file context and optionally set parameters\"\n    ],\n    \"stream_context_get_default\": [\n        \"resource stream_context_get_default([array options])\",\n        \"Get a handle on the default file/stream context and optionally set parameters\"\n    ],\n    \"stream_context_get_options\": [\n        \"array stream_context_get_options(resource context|resource stream)\",\n        \"Retrieve options for a stream/wrapper/context\"\n    ],\n    \"stream_context_get_params\": [\n        \"array stream_context_get_params(resource context|resource stream)\",\n        \"Get parameters of a file context\"\n    ],\n    \"stream_context_set_default\": [\n        \"resource stream_context_set_default(array options)\",\n        \"Set default file/stream context, returns the context as a resource\"\n    ],\n    \"stream_context_set_option\": [\n        \"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\n        \"Set an option for a wrapper\"\n    ],\n    \"stream_context_set_params\": [\n        \"bool stream_context_set_params(resource context|resource stream, array options)\",\n        \"Set parameters for a file context\"\n    ],\n    \"stream_copy_to_stream\": [\n        \"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\n        \"Reads up to maxlen bytes from source stream and writes them to dest stream.\"\n    ],\n    \"stream_filter_append\": [\n        \"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Append a filter to a stream\"\n    ],\n    \"stream_filter_prepend\": [\n        \"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Prepend a filter to a stream\"\n    ],\n    \"stream_filter_register\": [\n        \"bool stream_filter_register(string filtername, string classname)\",\n        \"Registers a custom filter handler class\"\n    ],\n    \"stream_filter_remove\": [\n        \"bool stream_filter_remove(resource stream_filter)\",\n        \"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"\n    ],\n    \"stream_get_contents\": [\n        \"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\n        \"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"\n    ],\n    \"stream_get_filters\": [\n        \"array stream_get_filters(void)\",\n        \"Returns a list of registered filters\"\n    ],\n    \"stream_get_line\": [\n        \"string stream_get_line(resource stream, int maxlen [, string ending])\",\n        \"Read up to maxlen bytes from a stream or until the ending string is found\"\n    ],\n    \"stream_get_meta_data\": [\n        \"array stream_get_meta_data(resource fp)\",\n        \"Retrieves header/meta data from streams/file pointers\"\n    ],\n    \"stream_get_transports\": [\n        \"array stream_get_transports()\",\n        \"Retrieves list of registered socket transports\"\n    ],\n    \"stream_get_wrappers\": [\n        \"array stream_get_wrappers()\",\n        \"Retrieves list of registered stream wrappers\"\n    ],\n    \"stream_is_local\": [\n        \"bool stream_is_local(resource stream|string url)\",\n        \"\"\n    ],\n    \"stream_resolve_include_path\": [\n        \"string stream_resolve_include_path(string filename)\",\n        \"Determine what file will be opened by calls to fopen() with a relative path\"\n    ],\n    \"stream_select\": [\n        \"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"stream_set_blocking\": [\n        \"bool stream_set_blocking(resource socket, int mode)\",\n        \"Set blocking/non-blocking mode on a socket or stream\"\n    ],\n    \"stream_set_timeout\": [\n        \"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\n        \"Set timeout on stream read to seconds + microseonds\"\n    ],\n    \"stream_set_write_buffer\": [\n        \"int stream_set_write_buffer(resource fp, int buffer)\",\n        \"Set file write buffer\"\n    ],\n    \"stream_socket_accept\": [\n        \"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\n        \"Accept a client connection from a server socket\"\n    ],\n    \"stream_socket_client\": [\n        \"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\n        \"Open a client connection to a remote address\"\n    ],\n    \"stream_socket_enable_crypto\": [\n        \"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\n        \"Enable or disable a specific kind of crypto on the stream\"\n    ],\n    \"stream_socket_get_name\": [\n        \"string stream_socket_get_name(resource stream, bool want_peer)\",\n        \"Returns either the locally bound or remote name for a socket stream\"\n    ],\n    \"stream_socket_pair\": [\n        \"array stream_socket_pair(int domain, int type, int protocol)\",\n        \"Creates a pair of connected, indistinguishable socket streams\"\n    ],\n    \"stream_socket_recvfrom\": [\n        \"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\n        \"Receives data from a socket stream\"\n    ],\n    \"stream_socket_sendto\": [\n        \"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\n        \"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"\n    ],\n    \"stream_socket_server\": [\n        \"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\n        \"Create a server socket bound to localaddress\"\n    ],\n    \"stream_socket_shutdown\": [\n        \"int stream_socket_shutdown(resource stream, int how)\",\n        \"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"\n    ],\n    \"stream_supports_lock\": [\n        \"bool stream_supports_lock(resource stream)\",\n        \"Tells whether the stream supports locking through flock().\"\n    ],\n    \"stream_wrapper_register\": [\n        \"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\n        \"Registers a custom URL protocol handler class\"\n    ],\n    \"stream_wrapper_restore\": [\n        \"bool stream_wrapper_restore(string protocol)\",\n        \"Restore the original protocol handler, overriding if necessary\"\n    ],\n    \"stream_wrapper_unregister\": [\n        \"bool stream_wrapper_unregister(string protocol)\",\n        \"Unregister a wrapper for the life of the current request.\"\n    ],\n    \"strftime\": [\n        \"string strftime(string format [, int timestamp])\",\n        \"Format a local time/date according to locale settings\"\n    ],\n    \"strip_tags\": [\n        \"string strip_tags(string str [, string allowable_tags])\",\n        \"Strips HTML and PHP tags from a string\"\n    ],\n    \"stripcslashes\": [\n        \"string stripcslashes(string str)\",\n        \"Strips backslashes from a string. Uses C-style conventions\"\n    ],\n    \"stripos\": [\n        \"int stripos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"stripslashes\": [\n        \"string stripslashes(string str)\",\n        \"Strips backslashes from a string\"\n    ],\n    \"stristr\": [\n        \"string stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"strlen\": [\n        \"int strlen(string str)\",\n        \"Get string length\"\n    ],\n    \"strnatcasecmp\": [\n        \"int strnatcasecmp(string s1, string s2)\",\n        \"Returns the result of case-insensitive string comparison using 'natural' algorithm\"\n    ],\n    \"strnatcmp\": [\n        \"int strnatcmp(string s1, string s2)\",\n        \"Returns the result of string comparison using 'natural' algorithm\"\n    ],\n    \"strncasecmp\": [\n        \"int strncasecmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strncmp\": [\n        \"int strncmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strpbrk\": [\n        \"array strpbrk(string haystack, string char_list)\",\n        \"Search a string for any of a set of characters\"\n    ],\n    \"strpos\": [\n        \"int strpos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another\"\n    ],\n    \"strptime\": [\n        \"string strptime(string timestamp, string format)\",\n        \"Parse a time/date generated with strftime()\"\n    ],\n    \"strrchr\": [\n        \"string strrchr(string haystack, string needle)\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"strrev\": [\n        \"string strrev(string str)\",\n        \"Reverse a string\"\n    ],\n    \"strripos\": [\n        \"int strripos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strrpos\": [\n        \"int strrpos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strspn\": [\n        \"int strspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"\n    ],\n    \"strstr\": [\n        \"string strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"strtok\": [\n        \"string strtok([string str,] string token)\",\n        \"Tokenize a string\"\n    ],\n    \"strtolower\": [\n        \"string strtolower(string str)\",\n        \"Makes a string lowercase\"\n    ],\n    \"strtotime\": [\n        \"int strtotime(string time [, int now ])\",\n        \"Convert string representation of date and time to a timestamp\"\n    ],\n    \"strtoupper\": [\n        \"string strtoupper(string str)\",\n        \"Makes a string uppercase\"\n    ],\n    \"strtr\": [\n        \"string strtr(string str, string from[, string to])\",\n        \"Translates characters in str using given translation tables\"\n    ],\n    \"strval\": [\n        \"string strval(mixed var)\",\n        \"Get the string value of a variable\"\n    ],\n    \"substr\": [\n        \"string substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"substr_compare\": [\n        \"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\n        \"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"\n    ],\n    \"substr_count\": [\n        \"int substr_count(string haystack, string needle [, int offset [, int length]])\",\n        \"Returns the number of times a substring occurs in the string\"\n    ],\n    \"substr_replace\": [\n        \"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\n        \"Replaces part of a string with another string\"\n    ],\n    \"sybase_affected_rows\": [\n        \"int sybase_affected_rows([resource link_id])\",\n        \"Get number of affected rows in last query\"\n    ],\n    \"sybase_close\": [\n        \"bool sybase_close([resource link_id])\",\n        \"Close Sybase connection\"\n    ],\n    \"sybase_connect\": [\n        \"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\n        \"Open Sybase server connection\"\n    ],\n    \"sybase_data_seek\": [\n        \"bool sybase_data_seek(resource result, int offset)\",\n        \"Move internal row pointer\"\n    ],\n    \"sybase_deadlock_retry_count\": [\n        \"void sybase_deadlock_retry_count(int retry_count)\",\n        \"Sets deadlock retry count\"\n    ],\n    \"sybase_fetch_array\": [\n        \"array sybase_fetch_array(resource result)\",\n        \"Fetch row as array\"\n    ],\n    \"sybase_fetch_assoc\": [\n        \"array sybase_fetch_assoc(resource result)\",\n        \"Fetch row as array without numberic indices\"\n    ],\n    \"sybase_fetch_field\": [\n        \"object sybase_fetch_field(resource result [, int offset])\",\n        \"Get field information\"\n    ],\n    \"sybase_fetch_object\": [\n        \"object sybase_fetch_object(resource result [, mixed object])\",\n        \"Fetch row as object\"\n    ],\n    \"sybase_fetch_row\": [\n        \"array sybase_fetch_row(resource result)\",\n        \"Get row as enumerated array\"\n    ],\n    \"sybase_field_seek\": [\n        \"bool sybase_field_seek(resource result, int offset)\",\n        \"Set field offset\"\n    ],\n    \"sybase_free_result\": [\n        \"bool sybase_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"sybase_get_last_message\": [\n        \"string sybase_get_last_message(void)\",\n        \"Returns the last message from server (over min_message_severity)\"\n    ],\n    \"sybase_min_client_severity\": [\n        \"void sybase_min_client_severity(int severity)\",\n        \"Sets minimum client severity\"\n    ],\n    \"sybase_min_server_severity\": [\n        \"void sybase_min_server_severity(int severity)\",\n        \"Sets minimum server severity\"\n    ],\n    \"sybase_num_fields\": [\n        \"int sybase_num_fields(resource result)\",\n        \"Get number of fields in result\"\n    ],\n    \"sybase_num_rows\": [\n        \"int sybase_num_rows(resource result)\",\n        \"Get number of rows in result\"\n    ],\n    \"sybase_pconnect\": [\n        \"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\n        \"Open persistent Sybase connection\"\n    ],\n    \"sybase_query\": [\n        \"int sybase_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"sybase_result\": [\n        \"string sybase_result(resource result, int row, mixed field)\",\n        \"Get result data\"\n    ],\n    \"sybase_select_db\": [\n        \"bool sybase_select_db(string database [, resource link_id])\",\n        \"Select Sybase database\"\n    ],\n    \"sybase_set_message_handler\": [\n        \"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\n        \"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"\n    ],\n    \"sybase_unbuffered_query\": [\n        \"int sybase_unbuffered_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"symlink\": [\n        \"int symlink(string target, string link)\",\n        \"Create a symbolic link\"\n    ],\n    \"sys_get_temp_dir\": [\n        \"string sys_get_temp_dir()\",\n        \"Returns directory path used for temporary files\"\n    ],\n    \"sys_getloadavg\": [\n        \"array sys_getloadavg()\",\n        \"\"\n    ],\n    \"syslog\": [\n        \"bool syslog(int priority, string message)\",\n        \"Generate a system log message\"\n    ],\n    \"system\": [\n        \"int system(string command [, int &return_value])\",\n        \"Execute an external program and display output\"\n    ],\n    \"tan\": [\n        \"float tan(float number)\",\n        \"Returns the tangent of the number in radians\"\n    ],\n    \"tanh\": [\n        \"float tanh(float number)\",\n        \"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"\n    ],\n    \"tempnam\": [\n        \"string tempnam(string dir, string prefix)\",\n        \"Create a unique filename in a directory\"\n    ],\n    \"textdomain\": [\n        \"string textdomain(string domain)\",\n        \"Set the textdomain to \\\"domain\\\". Returns the current domain\"\n    ],\n    \"tidy_access_count\": [\n        \"int tidy_access_count()\",\n        \"Returns the Number of Tidy accessibility warnings encountered for specified document.\"\n    ],\n    \"tidy_clean_repair\": [\n        \"boolean tidy_clean_repair()\",\n        \"Execute configured cleanup and repair operations on parsed markup\"\n    ],\n    \"tidy_config_count\": [\n        \"int tidy_config_count()\",\n        \"Returns the Number of Tidy configuration errors encountered for specified document.\"\n    ],\n    \"tidy_diagnose\": [\n        \"boolean tidy_diagnose()\",\n        \"Run configured diagnostics on parsed and repaired markup.\"\n    ],\n    \"tidy_error_count\": [\n        \"int tidy_error_count()\",\n        \"Returns the Number of Tidy errors encountered for specified document.\"\n    ],\n    \"tidy_get_body\": [\n        \"TidyNode tidy_get_body(resource tidy)\",\n        \"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_config\": [\n        \"array tidy_get_config()\",\n        \"Get current Tidy configuarion\"\n    ],\n    \"tidy_get_error_buffer\": [\n        \"string tidy_get_error_buffer([boolean detailed])\",\n        \"Return warnings and errors which occured parsing the specified document\"\n    ],\n    \"tidy_get_head\": [\n        \"TidyNode tidy_get_head()\",\n        \"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html\": [\n        \"TidyNode tidy_get_html()\",\n        \"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html_ver\": [\n        \"int tidy_get_html_ver()\",\n        \"Get the Detected HTML version for the specified document.\"\n    ],\n    \"tidy_get_opt_doc\": [\n        \"string tidy_get_opt_doc(tidy resource, string optname)\",\n        \"Returns the documentation for the given option name\"\n    ],\n    \"tidy_get_output\": [\n        \"string tidy_get_output()\",\n        \"Return a string representing the parsed tidy markup\"\n    ],\n    \"tidy_get_release\": [\n        \"string tidy_get_release()\",\n        \"Get release date (version) for Tidy library\"\n    ],\n    \"tidy_get_root\": [\n        \"TidyNode tidy_get_root()\",\n        \"Returns a TidyNode Object representing the root of the tidy parse tree\"\n    ],\n    \"tidy_get_status\": [\n        \"int tidy_get_status()\",\n        \"Get status of specfied document.\"\n    ],\n    \"tidy_getopt\": [\n        \"mixed tidy_getopt(string option)\",\n        \"Returns the value of the specified configuration option for the tidy document.\"\n    ],\n    \"tidy_is_xhtml\": [\n        \"boolean tidy_is_xhtml()\",\n        \"Indicates if the document is a XHTML document.\"\n    ],\n    \"tidy_is_xml\": [\n        \"boolean tidy_is_xml()\",\n        \"Indicates if the document is a generic (non HTML/XHTML) XML document.\"\n    ],\n    \"tidy_parse_file\": [\n        \"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\n        \"Parse markup in file or URI\"\n    ],\n    \"tidy_parse_string\": [\n        \"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\n        \"Parse a document stored in a string\"\n    ],\n    \"tidy_repair_file\": [\n        \"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\n        \"Repair a file using an optionally provided configuration file\"\n    ],\n    \"tidy_repair_string\": [\n        \"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\n        \"Repair a string using an optionally provided configuration file\"\n    ],\n    \"tidy_warning_count\": [\n        \"int tidy_warning_count()\",\n        \"Returns the Number of Tidy warnings encountered for specified document.\"\n    ],\n    \"time\": [\n        \"int time(void)\",\n        \"Return current UNIX timestamp\"\n    ],\n    \"time_nanosleep\": [\n        \"mixed time_nanosleep(long seconds, long nanoseconds)\",\n        \"Delay for a number of seconds and nano seconds\"\n    ],\n    \"time_sleep_until\": [\n        \"mixed time_sleep_until(float timestamp)\",\n        \"Make the script sleep until the specified time\"\n    ],\n    \"timezone_abbreviations_list\": [\n        \"array timezone_abbreviations_list()\",\n        \"Returns associative array containing dst, offset and the timezone name\"\n    ],\n    \"timezone_identifiers_list\": [\n        \"array timezone_identifiers_list([long what[, string country]])\",\n        \"Returns numerically index array with all timezone identifiers.\"\n    ],\n    \"timezone_location_get\": [\n        \"array timezone_location_get()\",\n        \"Returns location information for a timezone, including country code, latitude/longitude and comments\"\n    ],\n    \"timezone_name_from_abbr\": [\n        \"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\n        \"Returns the timezone name from abbrevation\"\n    ],\n    \"timezone_name_get\": [\n        \"string timezone_name_get(DateTimeZone object)\",\n        \"Returns the name of the timezone.\"\n    ],\n    \"timezone_offset_get\": [\n        \"long timezone_offset_get(DateTimeZone object, DateTime object)\",\n        \"Returns the timezone offset.\"\n    ],\n    \"timezone_open\": [\n        \"DateTimeZone timezone_open(string timezone)\",\n        \"Returns new DateTimeZone object\"\n    ],\n    \"timezone_transitions_get\": [\n        \"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\n        \"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"\n    ],\n    \"timezone_version_get\": [\n        \"array timezone_version_get()\",\n        \"Returns the Olson database version number.\"\n    ],\n    \"tmpfile\": [\n        \"resource tmpfile(void)\",\n        \"Create a temporary file that will be deleted automatically after use\"\n    ],\n    \"token_get_all\": [\n        \"array token_get_all(string source)\",\n        \"\"\n    ],\n    \"token_name\": [\n        \"string token_name(int type)\",\n        \"\"\n    ],\n    \"touch\": [\n        \"bool touch(string filename [, int time [, int atime]])\",\n        \"Set modification time of file\"\n    ],\n    \"trigger_error\": [\n        \"void trigger_error(string messsage [, int error_type])\",\n        \"Generates a user-level error/warning/notice message\"\n    ],\n    \"trim\": [\n        \"string trim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning and end of a string\"\n    ],\n    \"uasort\": [\n        \"bool uasort(array array_arg, string cmp_function)\",\n        \"Sort an array with a user-defined comparison function and maintain index association\"\n    ],\n    \"ucfirst\": [\n        \"string ucfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"ucwords\": [\n        \"string ucwords(string str)\",\n        \"Uppercase the first character of every word in a string\"\n    ],\n    \"uksort\": [\n        \"bool uksort(array array_arg, string cmp_function)\",\n        \"Sort an array by keys using a user-defined comparison function\"\n    ],\n    \"umask\": [\n        \"int umask([int mask])\",\n        \"Return or change the umask\"\n    ],\n    \"uniqid\": [\n        \"string uniqid([string prefix [, bool more_entropy]])\",\n        \"Generates a unique ID\"\n    ],\n    \"unixtojd\": [\n        \"int unixtojd([int timestamp])\",\n        \"Convert UNIX timestamp to Julian Day\"\n    ],\n    \"unlink\": [\n        \"bool unlink(string filename[, context context])\",\n        \"Delete a file\"\n    ],\n    \"unpack\": [\n        \"array unpack(string format, string input)\",\n        \"Unpack binary string into named array elements according to format argument\"\n    ],\n    \"unregister_tick_function\": [\n        \"void unregister_tick_function(string function_name)\",\n        \"Unregisters a tick callback function\"\n    ],\n    \"unserialize\": [\n        \"mixed unserialize(string variable_representation)\",\n        \"Takes a string representation of variable and recreates it\"\n    ],\n    \"unset\": [\n        \"void unset (mixed var [, mixed var])\",\n        \"Unset a given variable\"\n    ],\n    \"urldecode\": [\n        \"string urldecode(string str)\",\n        \"Decodes URL-encoded string\"\n    ],\n    \"urlencode\": [\n        \"string urlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"usleep\": [\n        \"void usleep(int micro_seconds)\",\n        \"Delay for a given number of micro seconds\"\n    ],\n    \"usort\": [\n        \"bool usort(array array_arg, string cmp_function)\",\n        \"Sort an array by values using a user-defined comparison function\"\n    ],\n    \"utf8_decode\": [\n        \"string utf8_decode(string data)\",\n        \"Converts a UTF-8 encoded string to ISO-8859-1\"\n    ],\n    \"utf8_encode\": [\n        \"string utf8_encode(string data)\",\n        \"Encodes an ISO-8859-1 string to UTF-8\"\n    ],\n    \"var_dump\": [\n        \"void var_dump(mixed var)\",\n        \"Dumps a string representation of variable to output\"\n    ],\n    \"var_export\": [\n        \"mixed var_export(mixed var [, bool return])\",\n        \"Outputs or returns a string representation of a variable\"\n    ],\n    \"variant_abs\": [\n        \"mixed variant_abs(mixed left)\",\n        \"Returns the absolute value of a variant\"\n    ],\n    \"variant_add\": [\n        \"mixed variant_add(mixed left, mixed right)\",\n        \"\\\"Adds\\\" two variant values together and returns the result\"\n    ],\n    \"variant_and\": [\n        \"mixed variant_and(mixed left, mixed right)\",\n        \"performs a bitwise AND operation between two variants and returns the result\"\n    ],\n    \"variant_cast\": [\n        \"object variant_cast(object variant, int type)\",\n        \"Convert a variant into a new variant object of another type\"\n    ],\n    \"variant_cat\": [\n        \"mixed variant_cat(mixed left, mixed right)\",\n        \"concatenates two variant values together and returns the result\"\n    ],\n    \"variant_cmp\": [\n        \"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\n        \"Compares two variants\"\n    ],\n    \"variant_date_from_timestamp\": [\n        \"object variant_date_from_timestamp(int timestamp)\",\n        \"Returns a variant date representation of a unix timestamp\"\n    ],\n    \"variant_date_to_timestamp\": [\n        \"int variant_date_to_timestamp(object variant)\",\n        \"Converts a variant date/time value to unix timestamp\"\n    ],\n    \"variant_div\": [\n        \"mixed variant_div(mixed left, mixed right)\",\n        \"Returns the result from dividing two variants\"\n    ],\n    \"variant_eqv\": [\n        \"mixed variant_eqv(mixed left, mixed right)\",\n        \"Performs a bitwise equivalence on two variants\"\n    ],\n    \"variant_fix\": [\n        \"mixed variant_fix(mixed left)\",\n        \"Returns the integer part ? of a variant\"\n    ],\n    \"variant_get_type\": [\n        \"int variant_get_type(object variant)\",\n        \"Returns the VT_XXX type code for a variant\"\n    ],\n    \"variant_idiv\": [\n        \"mixed variant_idiv(mixed left, mixed right)\",\n        \"Converts variants to integers and then returns the result from dividing them\"\n    ],\n    \"variant_imp\": [\n        \"mixed variant_imp(mixed left, mixed right)\",\n        \"Performs a bitwise implication on two variants\"\n    ],\n    \"variant_int\": [\n        \"mixed variant_int(mixed left)\",\n        \"Returns the integer portion of a variant\"\n    ],\n    \"variant_mod\": [\n        \"mixed variant_mod(mixed left, mixed right)\",\n        \"Divides two variants and returns only the remainder\"\n    ],\n    \"variant_mul\": [\n        \"mixed variant_mul(mixed left, mixed right)\",\n        \"multiplies the values of the two variants and returns the result\"\n    ],\n    \"variant_neg\": [\n        \"mixed variant_neg(mixed left)\",\n        \"Performs logical negation on a variant\"\n    ],\n    \"variant_not\": [\n        \"mixed variant_not(mixed left)\",\n        \"Performs bitwise not negation on a variant\"\n    ],\n    \"variant_or\": [\n        \"mixed variant_or(mixed left, mixed right)\",\n        \"Performs a logical disjunction on two variants\"\n    ],\n    \"variant_pow\": [\n        \"mixed variant_pow(mixed left, mixed right)\",\n        \"Returns the result of performing the power function with two variants\"\n    ],\n    \"variant_round\": [\n        \"mixed variant_round(mixed left, int decimals)\",\n        \"Rounds a variant to the specified number of decimal places\"\n    ],\n    \"variant_set\": [\n        \"void variant_set(object variant, mixed value)\",\n        \"Assigns a new value for a variant object\"\n    ],\n    \"variant_set_type\": [\n        \"void variant_set_type(object variant, int type)\",\n        \"Convert a variant into another type.  Variant is modified \\\"in-place\\\"\"\n    ],\n    \"variant_sub\": [\n        \"mixed variant_sub(mixed left, mixed right)\",\n        \"subtracts the value of the right variant from the left variant value and returns the result\"\n    ],\n    \"variant_xor\": [\n        \"mixed variant_xor(mixed left, mixed right)\",\n        \"Performs a logical exclusion on two variants\"\n    ],\n    \"version_compare\": [\n        \"int version_compare(string ver1, string ver2 [, string oper])\",\n        \"Compares two \\\"PHP-standardized\\\" version number strings\"\n    ],\n    \"vfprintf\": [\n        \"int vfprintf(resource stream, string format, array args)\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"virtual\": [\n        \"bool virtual(string filename)\",\n        \"Perform an Apache sub-request\"\n    ],\n    \"vprintf\": [\n        \"int vprintf(string format, array args)\",\n        \"Output a formatted string\"\n    ],\n    \"vsprintf\": [\n        \"string vsprintf(string format, array args)\",\n        \"Return a formatted string\"\n    ],\n    \"wddx_add_vars\": [\n        \"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\n        \"Serializes given variables and adds them to packet given by packet_id\"\n    ],\n    \"wddx_deserialize\": [\n        \"mixed wddx_deserialize(mixed packet)\",\n        \"Deserializes given packet and returns a PHP value\"\n    ],\n    \"wddx_packet_end\": [\n        \"string wddx_packet_end(resource packet_id)\",\n        \"Ends specified WDDX packet and returns the string containing the packet\"\n    ],\n    \"wddx_packet_start\": [\n        \"resource wddx_packet_start([string comment])\",\n        \"Starts a WDDX packet with optional comment and returns the packet id\"\n    ],\n    \"wddx_serialize_value\": [\n        \"string wddx_serialize_value(mixed var [, string comment])\",\n        \"Creates a new packet and serializes the given value\"\n    ],\n    \"wddx_serialize_vars\": [\n        \"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\n        \"Creates a new packet and serializes given variables into a struct\"\n    ],\n    \"wordwrap\": [\n        \"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\n        \"Wraps buffer to selected number of characters using string break char\"\n    ],\n    \"xml_error_string\": [\n        \"string xml_error_string(int code)\",\n        \"Get XML parser error string\"\n    ],\n    \"xml_get_current_byte_index\": [\n        \"int xml_get_current_byte_index(resource parser)\",\n        \"Get current byte index for an XML parser\"\n    ],\n    \"xml_get_current_column_number\": [\n        \"int xml_get_current_column_number(resource parser)\",\n        \"Get current column number for an XML parser\"\n    ],\n    \"xml_get_current_line_number\": [\n        \"int xml_get_current_line_number(resource parser)\",\n        \"Get current line number for an XML parser\"\n    ],\n    \"xml_get_error_code\": [\n        \"int xml_get_error_code(resource parser)\",\n        \"Get XML parser error code\"\n    ],\n    \"xml_parse\": [\n        \"int xml_parse(resource parser, string data [, int isFinal])\",\n        \"Start parsing an XML document\"\n    ],\n    \"xml_parse_into_struct\": [\n        \"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\n        \"Parsing a XML document\"\n    ],\n    \"xml_parser_create\": [\n        \"resource xml_parser_create([string encoding])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_create_ns\": [\n        \"resource xml_parser_create_ns([string encoding [, string sep]])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_free\": [\n        \"int xml_parser_free(resource parser)\",\n        \"Free an XML parser\"\n    ],\n    \"xml_parser_get_option\": [\n        \"int xml_parser_get_option(resource parser, int option)\",\n        \"Get options from an XML parser\"\n    ],\n    \"xml_parser_set_option\": [\n        \"int xml_parser_set_option(resource parser, int option, mixed value)\",\n        \"Set options in an XML parser\"\n    ],\n    \"xml_set_character_data_handler\": [\n        \"int xml_set_character_data_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_default_handler\": [\n        \"int xml_set_default_handler(resource parser, string hdl)\",\n        \"Set up default handler\"\n    ],\n    \"xml_set_element_handler\": [\n        \"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\n        \"Set up start and end element handlers\"\n    ],\n    \"xml_set_end_namespace_decl_handler\": [\n        \"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_external_entity_ref_handler\": [\n        \"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\n        \"Set up external entity reference handler\"\n    ],\n    \"xml_set_notation_decl_handler\": [\n        \"int xml_set_notation_decl_handler(resource parser, string hdl)\",\n        \"Set up notation declaration handler\"\n    ],\n    \"xml_set_object\": [\n        \"int xml_set_object(resource parser, object &obj)\",\n        \"Set up object which should be used for callbacks\"\n    ],\n    \"xml_set_processing_instruction_handler\": [\n        \"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\n        \"Set up processing instruction (PI) handler\"\n    ],\n    \"xml_set_start_namespace_decl_handler\": [\n        \"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_unparsed_entity_decl_handler\": [\n        \"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\n        \"Set up unparsed entity declaration handler\"\n    ],\n    \"xmlrpc_decode\": [\n        \"array xmlrpc_decode(string xml [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_decode_request\": [\n        \"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_encode\": [\n        \"string xmlrpc_encode(mixed value)\",\n        \"Generates XML for a PHP value\"\n    ],\n    \"xmlrpc_encode_request\": [\n        \"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\n        \"Generates XML for a method request\"\n    ],\n    \"xmlrpc_get_type\": [\n        \"string xmlrpc_get_type(mixed value)\",\n        \"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"\n    ],\n    \"xmlrpc_is_fault\": [\n        \"bool xmlrpc_is_fault(array)\",\n        \"Determines if an array value represents an XMLRPC fault.\"\n    ],\n    \"xmlrpc_parse_method_descriptions\": [\n        \"array xmlrpc_parse_method_descriptions(string xml)\",\n        \"Decodes XML into a list of method descriptions\"\n    ],\n    \"xmlrpc_server_add_introspection_data\": [\n        \"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\n        \"Adds introspection documentation\"\n    ],\n    \"xmlrpc_server_call_method\": [\n        \"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\n        \"Parses XML requests and call methods\"\n    ],\n    \"xmlrpc_server_create\": [\n        \"resource xmlrpc_server_create(void)\",\n        \"Creates an xmlrpc server\"\n    ],\n    \"xmlrpc_server_destroy\": [\n        \"int xmlrpc_server_destroy(resource server)\",\n        \"Destroys server resources\"\n    ],\n    \"xmlrpc_server_register_introspection_callback\": [\n        \"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\n        \"Register a PHP function to generate documentation\"\n    ],\n    \"xmlrpc_server_register_method\": [\n        \"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\n        \"Register a PHP function to handle method matching method_name\"\n    ],\n    \"xmlrpc_set_type\": [\n        \"bool xmlrpc_set_type(string value, string type)\",\n        \"Sets xmlrpc type, base64 or datetime, for a PHP string value\"\n    ],\n    \"xmlwriter_end_attribute\": [\n        \"bool xmlwriter_end_attribute(resource xmlwriter)\",\n        \"End attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_cdata\": [\n        \"bool xmlwriter_end_cdata(resource xmlwriter)\",\n        \"End current CDATA - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_comment\": [\n        \"bool xmlwriter_end_comment(resource xmlwriter)\",\n        \"Create end comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_document\": [\n        \"bool xmlwriter_end_document(resource xmlwriter)\",\n        \"End current document - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd\": [\n        \"bool xmlwriter_end_dtd(resource xmlwriter)\",\n        \"End current DTD - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_attlist\": [\n        \"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\n        \"End current DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_element\": [\n        \"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\n        \"End current DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_entity\": [\n        \"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\n        \"End current DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_element\": [\n        \"bool xmlwriter_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_pi\": [\n        \"bool xmlwriter_end_pi(resource xmlwriter)\",\n        \"End current PI - returns FALSE on error\"\n    ],\n    \"xmlwriter_flush\": [\n        \"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\n        \"Output current buffer\"\n    ],\n    \"xmlwriter_full_end_element\": [\n        \"bool xmlwriter_full_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_open_memory\": [\n        \"resource xmlwriter_open_memory()\",\n        \"Create new xmlwriter using memory for string output\"\n    ],\n    \"xmlwriter_open_uri\": [\n        \"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\n        \"Create new xmlwriter using source uri for output\"\n    ],\n    \"xmlwriter_output_memory\": [\n        \"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\n        \"Output current buffer as string\"\n    ],\n    \"xmlwriter_set_indent\": [\n        \"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\n        \"Toggle indentation on/off - returns FALSE on error\"\n    ],\n    \"xmlwriter_set_indent_string\": [\n        \"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\n        \"Set string used for indenting - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute\": [\n        \"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\n        \"Create start attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute_ns\": [\n        \"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_cdata\": [\n        \"bool xmlwriter_start_cdata(resource xmlwriter)\",\n        \"Create start CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_comment\": [\n        \"bool xmlwriter_start_comment(resource xmlwriter)\",\n        \"Create start comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_document\": [\n        \"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\n        \"Create document tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd\": [\n        \"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\n        \"Create start DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_attlist\": [\n        \"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\n        \"Create start DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_element\": [\n        \"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\n        \"Create start DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_entity\": [\n        \"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\n        \"Create start DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element\": [\n        \"bool xmlwriter_start_element(resource xmlwriter, string name)\",\n        \"Create start element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element_ns\": [\n        \"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_pi\": [\n        \"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\n        \"Create start PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_text\": [\n        \"bool xmlwriter_text(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute\": [\n        \"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\n        \"Write full attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute_ns\": [\n        \"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\n        \"Write full namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_cdata\": [\n        \"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\n        \"Write full CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_comment\": [\n        \"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\n        \"Write full comment tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd\": [\n        \"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\n        \"Write full DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_attlist\": [\n        \"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\n        \"Write full DTD AttList tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_element\": [\n        \"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\n        \"Write full DTD element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_entity\": [\n        \"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\n        \"Write full DTD Entity tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element\": [\n        \"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\n        \"Write full element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element_ns\": [\n        \"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\n        \"Write full namesapced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_pi\": [\n        \"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\n        \"Write full PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_raw\": [\n        \"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xsl_xsltprocessor_get_parameter\": [\n        \"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_has_exslt_support\": [\n        \"bool xsl_xsltprocessor_has_exslt_support();\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_import_stylesheet\": [\n        \"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_register_php_functions\": [\n        \"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_remove_parameter\": [\n        \"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_parameter\": [\n        \"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_profiling\": [\n        \"bool xsl_xsltprocessor_set_profiling(string filename) */\",\n        \"PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s!\\\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling\"\n    ],\n    \"xsl_xsltprocessor_transform_to_doc\": [\n        \"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_transform_to_uri\": [\n        \"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_xml\": [\n        \"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\n        \"\"\n    ],\n    \"zend_logo_guid\": [\n        \"string zend_logo_guid(void)\",\n        \"Return the special ID used to request the Zend logo in phpinfo screens\"\n    ],\n    \"zend_version\": [\n        \"string zend_version(void)\",\n        \"Get the version of the Zend Engine\"\n    ],\n    \"zip_close\": [\n        \"void zip_close(resource zip)\",\n        \"Close a Zip archive\"\n    ],\n    \"zip_entry_close\": [\n        \"void zip_entry_close(resource zip_ent)\",\n        \"Close a zip entry\"\n    ],\n    \"zip_entry_compressedsize\": [\n        \"int zip_entry_compressedsize(resource zip_entry)\",\n        \"Return the compressed size of a ZZip entry\"\n    ],\n    \"zip_entry_compressionmethod\": [\n        \"string zip_entry_compressionmethod(resource zip_entry)\",\n        \"Return a string containing the compression method used on a particular entry\"\n    ],\n    \"zip_entry_filesize\": [\n        \"int zip_entry_filesize(resource zip_entry)\",\n        \"Return the actual filesize of a ZZip entry\"\n    ],\n    \"zip_entry_name\": [\n        \"string zip_entry_name(resource zip_entry)\",\n        \"Return the name given a ZZip entry\"\n    ],\n    \"zip_entry_open\": [\n        \"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\n        \"Open a Zip File, pointed by the resource entry\"\n    ],\n    \"zip_entry_read\": [\n        \"mixed zip_entry_read(resource zip_entry [, int len])\",\n        \"Read from an open directory entry\"\n    ],\n    \"zip_open\": [\n        \"resource zip_open(string filename)\",\n        \"Create new zip using source uri for output\"\n    ],\n    \"zip_read\": [\n        \"resource zip_read(resource zip)\",\n        \"Returns the next file in the archive\"\n    ],\n    \"zlib_get_coding_type\": [\n        \"string zlib_get_coding_type(void)\",\n        \"Returns the coding type used for output compression\"\n    ]\n};\n\nvar variableMap = {\n    \"$_COOKIE\": {\n        type: \"array\"\n    },\n    \"$_ENV\": {\n        type: \"array\"\n    },\n    \"$_FILES\": {\n        type: \"array\"\n    },\n    \"$_GET\": {\n        type: \"array\"\n    },\n    \"$_POST\": {\n        type: \"array\"\n    },\n    \"$_REQUEST\": {\n        type: \"array\"\n    },\n    \"$_SERVER\": {\n        type: \"array\",\n        value: {\n            \"DOCUMENT_ROOT\":  1,\n            \"GATEWAY_INTERFACE\":  1,\n            \"HTTP_ACCEPT\":  1,\n            \"HTTP_ACCEPT_CHARSET\":  1,\n            \"HTTP_ACCEPT_ENCODING\":  1 ,\n            \"HTTP_ACCEPT_LANGUAGE\":  1,\n            \"HTTP_CONNECTION\":  1,\n            \"HTTP_HOST\":  1,\n            \"HTTP_REFERER\":  1,\n            \"HTTP_USER_AGENT\":  1,\n            \"PATH_TRANSLATED\":  1,\n            \"PHP_SELF\":  1,\n            \"QUERY_STRING\":  1,\n            \"REMOTE_ADDR\":  1,\n            \"REMOTE_PORT\":  1,\n            \"REQUEST_METHOD\":  1,\n            \"REQUEST_URI\":  1,\n            \"SCRIPT_FILENAME\":  1,\n            \"SCRIPT_NAME\":  1,\n            \"SERVER_ADMIN\":  1,\n            \"SERVER_NAME\":  1,\n            \"SERVER_PORT\":  1,\n            \"SERVER_PROTOCOL\":  1,\n            \"SERVER_SIGNATURE\":  1,\n            \"SERVER_SOFTWARE\":  1\n        }\n    },\n    \"$_SESSION\": {\n        type: \"array\"\n    },\n    \"$GLOBALS\": {\n        type: \"array\"\n    }\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type) > -1;\n}\n\nvar PhpCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        \n        if (token.type==='support.php_tag' && token.value==='<?')\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (token.type==='identifier') {\n            if (token.index > 0) {\n                var prevToken = session.getTokenAt(pos.row, token.start);\n                if (prevToken.type==='support.php_tag') {\n                    return this.getTagCompletions(state, session, pos, prefix);\n                }\n            }\n            return this.getFunctionCompletions(state, session, pos, prefix);\n        }\n        if (is(token, \"variable\"))\n            return this.getVariableCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (token.type==='string' && /(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(line))\n            return this.getArrayKeyCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n    \n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return [{\n            caption: 'php',\n            value: 'php',\n            meta: \"php tag\",\n            score: 1000000\n        }, {\n            caption: '=',\n            value: '=',\n            meta: \"php tag\",\n            score: 1000000\n        }];\n    };\n\n    this.getFunctionCompletions = function(state, session, pos, prefix) {\n        var functions = Object.keys(functionMap);\n        return functions.map(function(func){\n            return {\n                caption: func,\n                snippet: func + '($0)',\n                meta: \"php function\",\n                score: 1000000,\n                docHTML: functionMap[func][1]\n            };\n        });\n    };\n\n    this.getVariableCompletions = function(state, session, pos, prefix) {\n        var variables = Object.keys(variableMap);\n        return variables.map(function(variable){\n            return {\n                caption: variable,\n                value: variable,\n                meta: \"php variable\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getArrayKeyCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var variable = line.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];\n\n        if (!variableMap[variable]) {\n            return [];\n        }\n\n        var keys = [];\n        if (variableMap[variable].type==='array' && variableMap[variable].value)\n            keys = Object.keys(variableMap[variable].value);\n\n        return keys.map(function(key) {\n            return {\n                caption: key,\n                value: key,\n                meta: \"php array key\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(PhpCompletions.prototype);\n\nexports.PhpCompletions = PhpCompletions;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\nvar PhpLangHighlightRules = require(\"./php_highlight_rules\").PhpLangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar PhpCompletions = require(\"./php_completions\").PhpCompletions;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar unicode = require(\"../unicode\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\n\nvar PhpMode = function(opts) {\n    this.HighlightRules = PhpLangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.$completer = new PhpCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(PhpMode, TextMode);\n\n(function() {\n\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"_]|\\\\s])+\", \"g\");\n\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState != \"doc-start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/php-inline\";\n}).call(PhpMode.prototype);\n\nvar Mode = function(opts) {\n    if (opts && opts.inline) {\n        var mode = new PhpMode();\n        mode.createWorker = this.createWorker;\n        mode.inlinePhp = true;\n        return mode;\n    }\n    HtmlMode.call(this);\n    this.HighlightRules = PhpHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"php-\": PhpMode\n    });\n    this.foldingRules.subModes[\"php-\"] = new CStyleFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/php_worker\", \"PhpWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.inlinePhp)\n            worker.call(\"setOptions\", [{inline: true}]);\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/php\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-php_laravel_blade.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar PhpLangHighlightRules = function() {\n    var docComment = DocCommentHighlightRules;\n    var builtinFunctions = lang.arrayToMap(\n'abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|\\\naggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|\\\napache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|\\\napache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|\\\napc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|\\\napc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|\\\napd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|\\\napd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|\\\narray_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|\\\narray_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|\\\narray_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|\\\narray_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|\\\narray_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|\\\narray_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|\\\natan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|\\\nbbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|\\\nbcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|\\\nbcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|\\\nbcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|\\\nbindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|\\\ncachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|\\\ncairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|\\\ncairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|\\\ncairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|\\\ncairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|\\\ncairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|\\\ncairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|\\\ncairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|\\\ncairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|\\\ncairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|\\\ncairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|\\\ncairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|\\\ncairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|\\\ncairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|\\\ncairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|\\\ncairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|\\\ncairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|\\\ncairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|\\\ncairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|\\\ncairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|\\\ncairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|\\\ncairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|\\\ncairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|\\\ncairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|\\\ncairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|\\\ncairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|\\\ncairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|\\\ncal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|\\\nchdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|\\\nclass_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|\\\nclasskit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|\\\ncom_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|\\\ncom_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|\\\nconvert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|\\\ncounter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|\\\ncrack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|\\\nctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|\\\ncubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|\\\ncubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|\\\ncubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|\\\ncubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|\\\ncubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|\\\ncubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|\\\ncubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|\\\ncubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|\\\ncubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|\\\ncubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|\\\ncubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|\\\ncurl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|\\\ncurl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|\\\ncurl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|\\\ndate_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|\\\ndate_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|\\\ndate_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|\\\ndateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|\\\ndb2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|\\\ndb2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|\\\ndb2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|\\\ndb2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|\\\ndb2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|\\\ndb2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|\\\ndba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|\\\ndbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|\\\ndbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|\\\ndbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|\\\ndbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|\\\ndbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|\\\ndbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|\\\ndbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|\\\ndbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|\\\ndefine_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|\\\ndio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|\\\ndns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|\\\ndomattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|\\\ndomdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|\\\ndomdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|\\\ndomdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|\\\ndomdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|\\\ndomdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|\\\ndomelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|\\\ndomelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|\\\ndomexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|\\\ndomnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|\\\ndomnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|\\\ndomnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|\\\ndomnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|\\\ndomnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|\\\ndomtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|\\\ndomxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|\\\ndomxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|\\\nenchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|\\\nenchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|\\\nenchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|\\\nenchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|\\\neregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|\\\nevent_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|\\\nevent_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|\\\nevent_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|\\\nevent_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|\\\nexpm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|\\\nfam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|\\\nfbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|\\\nfbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|\\\nfbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|\\\nfbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|\\\nfbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|\\\nfbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|\\\nfbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|\\\nfbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|\\\nfdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|\\\nfdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|\\\nfdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|\\\nfdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|\\\nfile_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|\\\nfilepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|\\\nfiletype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|\\\nfinfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|\\\nforward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|\\\nftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|\\\nftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|\\\nftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|\\\nfunc_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|\\\ngearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|\\\ngeoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|\\\ngeoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|\\\nget_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|\\\nget_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|\\\nget_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|\\\nget_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|\\\ngetcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|\\\ngethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|\\\ngetmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|\\\ngetrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|\\\ngettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|\\\ngmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|\\\ngmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|\\\ngmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|\\\ngnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|\\\ngnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|\\\ngnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|\\\ngrapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|\\\ngupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|\\\ngupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|\\\ngupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|\\\ngupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|\\\ngupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|\\\ngupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|\\\ngupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|\\\ngupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|\\\ngupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|\\\ngzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|\\\nhalt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|\\\nharuannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|\\\nharudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|\\\nharudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|\\\nharudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|\\\nharudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|\\\nharudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|\\\nharudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|\\\nharudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|\\\nharudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|\\\nharuencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|\\\nharufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|\\\nharufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|\\\nharuimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|\\\nharuoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|\\\nharupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|\\\nharupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|\\\nharupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|\\\nharupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|\\\nharupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|\\\nharupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|\\\nharupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|\\\nharupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|\\\nharupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|\\\nharupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|\\\nharupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|\\\nharupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|\\\nharupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|\\\nharupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|\\\nhash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|\\\nheader_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|\\\nhtml_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|\\\nhttp_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|\\\nhttp_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|\\\nhttp_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|\\\nhttp_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|\\\nhttp_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|\\\nhttp_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|\\\nhttp_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|\\\nhttp_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|\\\nhttpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|\\\nhttpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|\\\nhttpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|\\\nhttpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|\\\nhttpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|\\\nhttpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|\\\nhttpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|\\\nhttpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|\\\nhttpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|\\\nhttprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|\\\nhttprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|\\\nhttprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|\\\nhttprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|\\\nhttprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|\\\nhttprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|\\\nhttprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|\\\nhttprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|\\\nhttprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|\\\nhttprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|\\\nhttprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|\\\nhttprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|\\\nhttprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|\\\nhttpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|\\\nhttpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|\\\nhttpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|\\\nhttpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|\\\nhttpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|\\\nhttpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|\\\nhttpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|\\\nhw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|\\\nhw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|\\\nhw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|\\\nhw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|\\\nhw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|\\\nhw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|\\\nhw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|\\\nhwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|\\\nhwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|\\\nhwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|\\\nhwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|\\\nhwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|\\\nhwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|\\\nhwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|\\\nibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|\\\nibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|\\\nibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|\\\nibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|\\\nibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|\\\nibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|\\\nibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|\\\niconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|\\\nid3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|\\\nidn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|\\\nifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|\\\nifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|\\\nifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|\\\nifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|\\\niis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|\\\niis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|\\\niis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|\\\nimagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|\\\nimagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|\\\nimagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|\\\nimagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|\\\nimagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|\\\nimagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|\\\nimagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|\\\nimagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|\\\nimagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|\\\nimagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|\\\nimagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|\\\nimagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|\\\nimagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|\\\nimagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|\\\nimagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|\\\nimagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|\\\nimagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|\\\nimagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|\\\nimagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|\\\nimagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|\\\nimagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|\\\nimagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|\\\nimagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|\\\nimagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|\\\nimagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|\\\nimagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|\\\nimagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|\\\nimagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|\\\nimagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|\\\nimagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|\\\nimagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|\\\nimagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|\\\nimagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|\\\nimagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|\\\nimagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|\\\nimagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|\\\nimagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|\\\nimagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|\\\nimagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|\\\nimagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|\\\nimagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|\\\nimagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|\\\nimagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|\\\nimagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|\\\nimagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|\\\nimagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|\\\nimagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|\\\nimagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|\\\nimagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|\\\nimagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|\\\nimagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|\\\nimagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|\\\nimagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|\\\nimagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|\\\nimagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|\\\nimagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|\\\nimagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|\\\nimagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|\\\nimagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|\\\nimagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|\\\nimagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|\\\nimagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|\\\nimagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|\\\nimagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|\\\nimagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|\\\nimagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|\\\nimagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|\\\nimagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|\\\nimagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|\\\nimagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|\\\nimagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|\\\nimagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|\\\nimagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|\\\nimagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|\\\nimagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|\\\nimagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|\\\nimagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|\\\nimagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|\\\nimagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|\\\nimagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|\\\nimagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|\\\nimagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|\\\nimagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|\\\nimagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|\\\nimagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|\\\nimagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|\\\nimagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|\\\nimagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|\\\nimagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|\\\nimagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|\\\nimagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|\\\nimagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|\\\nimagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|\\\nimagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|\\\nimagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|\\\nimagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|\\\nimagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|\\\nimagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|\\\nimagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|\\\nimagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|\\\nimagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|\\\nimagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|\\\nimap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|\\\nimap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|\\\nimap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|\\\nimap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|\\\nimap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|\\\nimap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|\\\nimap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|\\\nimap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|\\\ninclude_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|\\\ningres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|\\\ningres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|\\\ningres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|\\\ningres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|\\\ningres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|\\\ninotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|\\\nintldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|\\\nis_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|\\\nis_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|\\\niscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|\\\niterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|\\\njddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|\\\njson_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|\\\nkadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|\\\nkadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|\\\nldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|\\\nldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|\\\nldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|\\\nldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|\\\nldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|\\\nlibxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|\\\nlimititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|\\\nlzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|\\\nm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|\\\nm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|\\\nm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|\\\nm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|\\\nmailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|\\\nmailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|\\\nmailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|\\\nmaxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|\\\nmaxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|\\\nmaxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|\\\nmaxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|\\\nmaxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|\\\nmaxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|\\\nmaxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|\\\nmaxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|\\\nmaxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|\\\nmaxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|\\\nmaxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|\\\nmaxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|\\\nmaxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|\\\nmaxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|\\\nmaxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|\\\nmb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|\\\nmb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|\\\nmb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|\\\nmb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|\\\nmb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|\\\nmb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|\\\nmb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|\\\nmcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|\\\nmcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|\\\nmcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|\\\nmcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|\\\nmcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|\\\nmcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|\\\nmdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|\\\nmhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|\\\nming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|\\\nmongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|\\\nmongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|\\\nmongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|\\\nmqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|\\\nmqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|\\\nmsession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|\\\nmsession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|\\\nmsg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|\\\nmsql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|\\\nmsql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|\\\nmsql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|\\\nmsql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|\\\nmssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|\\\nmssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|\\\nmssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|\\\nmssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|\\\nmssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|\\\nmysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|\\\nmysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|\\\nmysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|\\\nmysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|\\\nmysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|\\\nmysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|\\\nmysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|\\\nmysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|\\\nmysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|\\\nmysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|\\\nmysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|\\\nmysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|\\\nmysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|\\\nmysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|\\\nmysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|\\\nmysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|\\\nmysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|\\\nmysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|\\\nmysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|\\\nmysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|\\\nmysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|\\\nmysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|\\\nmysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|\\\nmysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|\\\nmysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|\\\nmysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|\\\nmysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|\\\nncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|\\\nncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|\\\nncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|\\\nncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|\\\nncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|\\\nncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|\\\nncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|\\\nncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|\\\nncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|\\\nncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|\\\nncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|\\\nncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|\\\nncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|\\\nncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|\\\nncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|\\\nncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|\\\nncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|\\\nncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|\\\nncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|\\\nncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|\\\nncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|\\\nncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|\\\nnewt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|\\\nnewt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|\\\nnewt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|\\\nnewt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|\\\nnewt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|\\\nnewt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|\\\nnewt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|\\\nnewt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|\\\nnewt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|\\\nnewt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|\\\nnewt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|\\\nnewt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|\\\nnewt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|\\\nnewt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|\\\nnewt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|\\\nnewt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|\\\nnewt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|\\\nnewt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|\\\nnewt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|\\\nnotes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|\\\nnotes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|\\\nnumberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|\\\nob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|\\\nob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|\\\noci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|\\\noci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|\\\noci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|\\\noci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|\\\noci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|\\\noci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|\\\noci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|\\\noci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|\\\noci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|\\\nocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|\\\nocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|\\\nocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|\\\nociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|\\\nocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|\\\noctdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|\\\nodbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|\\\nodbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|\\\nodbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|\\\nodbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|\\\nodbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|\\\nopenal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|\\\nopenal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|\\\nopenal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|\\\nopenlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|\\\nopenssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|\\\nopenssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|\\\nopenssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|\\\nopenssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|\\\nopenssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|\\\nopenssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|\\\nopenssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|\\\noutofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|\\\novrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|\\\novrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|\\\novrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|\\\nparse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|\\\npcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|\\\npcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|\\\npdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|\\\npdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|\\\npdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|\\\npdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|\\\npdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|\\\npdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|\\\npdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|\\\npdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|\\\npdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|\\\npdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|\\\npdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|\\\npdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|\\\npdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|\\\npdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|\\\npdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|\\\npdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|\\\npdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|\\\npdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|\\\npdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|\\\npdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|\\\npdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|\\\npdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|\\\npdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|\\\npdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|\\\npg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|\\\npg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|\\\npg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|\\\npg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|\\\npg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|\\\npg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|\\\npg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|\\\npg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|\\\npg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|\\\nphp_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|\\\npng2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|\\\nposix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|\\\nposix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|\\\nposix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|\\\npreg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|\\\nprinter_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|\\\nprinter_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|\\\nprinter_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|\\\nprinter_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|\\\nprinter_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|\\\nps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|\\\nps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|\\\nps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|\\\nps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|\\\nps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|\\\nps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|\\\nps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|\\\nps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|\\\nps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|\\\npspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|\\\npspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|\\\npspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|\\\npx_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|\\\npx_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|\\\npx_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|\\\nradius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|\\\nradius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|\\\nradius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|\\\nradius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|\\\nrararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|\\\nreadline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|\\\nreadline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|\\\nreadline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|\\\nrecursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|\\\nrecursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|\\\nreflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|\\\nregexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|\\\nresourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|\\\nrpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|\\\nrrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|\\\nrunkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|\\\nrunkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|\\\nrunkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|\\\nrunkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|\\\nsamconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|\\\nsamconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|\\\nsammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|\\\nsca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|\\\nsdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|\\\nsdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|\\\nsdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|\\\nsdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|\\\nsdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|\\\nsdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|\\\nsdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|\\\nsdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|\\\nsdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|\\\nsdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|\\\nsdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|\\\nsdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|\\\nsdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|\\\nsdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|\\\nsdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|\\\nsdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|\\\nsdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|\\\nsem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|\\\nsession_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|\\\nsession_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|\\\nsession_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|\\\nsession_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|\\\nset_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|\\\nsetstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|\\\nshm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|\\\nsimilar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|\\\nsnmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|\\\nsnmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|\\\nsnmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|\\\nsoapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|\\\nsocket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|\\\nsocket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|\\\nsocket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|\\\nsolrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|\\\nsolrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|\\\nsolrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|\\\nspl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|\\\nsplfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|\\\nsplpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|\\\nsqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|\\\nsqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|\\\nsqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|\\\nsqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|\\\nsqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|\\\nsqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|\\\nssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|\\\nssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|\\\nssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|\\\nssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|\\\nstats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|\\\nstats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|\\\nstats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|\\\nstats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|\\\nstats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|\\\nstats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|\\\nstats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|\\\nstats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|\\\nstats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|\\\nstats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|\\\nstats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|\\\nstats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|\\\nstr_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|\\\nstream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|\\\nstream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|\\\nstream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|\\\nstream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|\\\nstream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|\\\nstream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|\\\nstream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|\\\nstream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|\\\nstripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|\\\nstrstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|\\\nsvn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|\\\nsvn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|\\\nsvn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|\\\nsvn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|\\\nsvn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|\\\nsvn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|\\\nswf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|\\\nswf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|\\\nswf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|\\\nswf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|\\\nswf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|\\\nswf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|\\\nswf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|\\\nswf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|\\\nswfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|\\\nswfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|\\\nswish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|\\\nswishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|\\\nswishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|\\\nsybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|\\\nsybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|\\\nsybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|\\\nsybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|\\\ntcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|\\\ntidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|\\\ntime_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|\\\ntimezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|\\\ntokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|\\\nucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|\\\nudm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|\\\nudm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|\\\nuksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|\\\nurldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|\\\nvariant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|\\\nvariant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|\\\nvariant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|\\\nvpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|\\\nvpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|\\\nvpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|\\\nw32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|\\\nwddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|\\\nwin32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|\\\nwin32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|\\\nwincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|\\\nwincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|\\\nwincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|\\\nwincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|\\\nxattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|\\\nxdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|\\\nxdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|\\\nxhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|\\\nxml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|\\\nxml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|\\\nxml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|\\\nxml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|\\\nxmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|\\\nxmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|\\\nxmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|\\\nxmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|\\\nxmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|\\\nxmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|\\\nxmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|\\\nxmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|\\\nxmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|\\\nxmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|\\\nxmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|\\\nxpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|\\\nxslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|\\\nxslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|\\\nyaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|\\\nyaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|\\\nyaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|\\\nyp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|\\\nzip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|\\\nziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|\\\nziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|\\\nziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|\\\nziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|\\\nziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|\\\nziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type'.split('|')\n    );\n    var keywords = lang.arrayToMap(\n'abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|\\\nendif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|\\\npublic|static|switch|throw|trait|try|use|var|while|xor|yield'.split('|')\n    );\n    var languageConstructs = lang.arrayToMap(\n        ('__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|')\n    );\n\n    var builtinConstants = lang.arrayToMap(\n        ('true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__').split('|')\n    );\n\n    var builtinVariables = lang.arrayToMap(\n'$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|\\\n$http_response_header|$argc|$argv'.split('|')\n    );\n    var builtinFunctionsDeprecated = lang.arrayToMap(\n'key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|\\\ncom_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|\\\ncubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|\\\nhw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|\\\nmaxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|\\\nmysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|\\\nmysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|\\\nmysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|\\\nmysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|\\\nmysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|\\\nmysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|\\\nocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|\\\nocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|\\\nocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|\\\nocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|\\\nociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|\\\nPDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|\\\nPDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|\\\nPDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|\\\nPDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|\\\nPDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|\\\nPDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|\\\nPDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|\\\nPDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|\\\npx_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister\\\nset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|\\\nsql_regcase'.split('|')\n    );\n\n    var keywordsDeprecated = lang.arrayToMap(\n        ('cfunction|old_function').split('|')\n    );\n\n    var futureReserved = lang.arrayToMap([]);\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /(?:#|\\/\\/)(?:[^?]|\\?[^>])*/\n            },\n            docComment.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // \" string start\n                regex : '\"',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // ' string start\n                regex : \"'\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|\" +\n                        \"ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|\" +\n                        \"HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|\" +\n                        \"L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|\" +\n                        \"VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"\n            }, {\n                token : [\"keyword\", \"text\", \"support.class\"],\n                regex : \"\\\\b(new)(\\\\s+)(\\\\w+)\"\n            }, {\n                token : [\"support.class\", \"keyword.operator\"],\n                regex : \"\\\\b(\\\\w+)(::)\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|\" +\n                        \"SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|\" +\n                        \"O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|\" +\n                        \"R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|\" +\n                        \"YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|\" +\n                        \"ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|\" +\n                        \"T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|\" +\n                        \"HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|\" +\n                        \"I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|\" +\n                        \"O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|\" +\n                        \"L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|\" +\n                        \"M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|\" +\n                        \"OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|\" +\n                        \"T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"\n            }, {\n                token : function(value) {\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (builtinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (builtinVariables.hasOwnProperty(value))\n                        return \"variable.language\";\n                    else if (futureReserved.hasOwnProperty(value))\n                        return \"invalid.illegal\";\n                    else if (builtinFunctions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (value == \"debugger\")\n                        return \"invalid.deprecated\";\n                    else\n                        if(value.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/))\n                            return \"variable\";\n                        return \"identifier\";\n                },\n                regex : /[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            }, {\n                onMatch : function(value, currentSate, state) {\n                    value = value.substr(3);\n                    if (value[0] == \"'\" || value[0] == '\"')\n                        value = value.slice(1, -1);\n                    state.unshift(this.next, value);\n                    return \"markup.list\";\n                },\n                regex : /<<<(?:\\w+|'\\w+'|\"\\w+\")$/,\n                next: \"heredoc\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[,;]/\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"heredoc\" : [\n            {\n                onMatch : function(value, currentSate, stack) {\n                    if (stack[1] != value)\n                        return \"string\";\n                    stack.shift();\n                    stack.shift();\n                    return \"markup.list\";\n                },\n                regex : \"^\\\\w+(?=;?$)\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex : \".*\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : '\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n            }, {\n                token : \"variable\",\n                regex : /\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/\n            }, {\n                token : \"variable\",\n                regex : /\\$\\{[^\"\\}]+\\}?/           // this is wrong but ok for now\n            },\n            {token : \"string\", regex : '\"', next : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"qstring\" : [\n            {token : \"constant.language.escape\", regex : /\\\\['\\\\]/},\n            {token : \"string\", regex : \"'\", next : \"start\"},\n            {defaultToken : \"string\"}\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(PhpLangHighlightRules, TextHighlightRules);\n\n\nvar PhpHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var startRules = [\n        {\n            token : \"support.php_tag\", // php open tag\n            regex : \"<\\\\?(?:php|=)?\",\n            push  : \"php-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token : \"support.php_tag\", // php close tag\n            regex : \"\\\\?>\",\n            next  : \"pop\"\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(PhpLangHighlightRules, \"php-\", endRules, [\"start\"]);\n\n    this.normalizeRules();\n};\n\noop.inherits(PhpHighlightRules, HtmlHighlightRules);\n\nexports.PhpHighlightRules = PhpHighlightRules;\nexports.PhpLangHighlightRules = PhpLangHighlightRules;\n});\n\ndefine(\"ace/mode/php_laravel_blade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\n\nvar PHPLaravelBladeHighlightRules = function() {\n    PhpHighlightRules.call(this);\n\n    var bladeRules = {\n        start: [{\n            include: \"comments\"\n        }, {\n            include: \"directives\"\n        }, {\n            include: \"parenthesis\"\n        }],\n        comments: [{\n            token: \"punctuation.definition.comment.blade\",\n            regex: \"(\\\\/\\\\/(.)*)|(\\\\#(.)*)\",\n            next: \"pop\"\n        }, {\n            token: \"punctuation.definition.comment.begin.php\",\n            regex: \"(?:\\\\/\\\\*)\",\n            push: [{\n                token: \"punctuation.definition.comment.end.php\",\n                regex: \"(?:\\\\*\\\\/)\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.blade\"\n            }]\n        }, {\n            token: \"punctuation.definition.comment.begin.blade\",\n            regex: \"(?:\\\\{\\\\{\\\\-\\\\-)\",\n            push: [{\n                token: \"punctuation.definition.comment.end.blade\",\n                regex: \"(?:\\\\-\\\\-\\\\}\\\\})\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.blade\"\n            }]\n        }],\n        parenthesis: [{\n            token: \"parenthesis.begin.blade\",\n            regex: \"\\\\(\",\n            push: [{\n                token: \"parenthesis.end.blade\",\n                regex: \"\\\\)\",\n                next: \"pop\"\n            }, {\n                include: \"strings\"\n            }, {\n                include: \"variables\"\n            }, {\n                include: \"lang\"\n            }, {\n                include: \"parenthesis\"\n            }, {\n                defaultToken: \"source.blade\"\n            }]\n        }],\n        directives: [{\n                token: [\"directive.declaration.blade\", \"keyword.directives.blade\"],\n                regex: \"(@)(endunless|endisset|endempty|endauth|endguest|endcomponent|endslot|endalert|endverbatim|endsection|show|php|endphp|endpush|endprepend|endenv|endforelse|isset|empty|component|slot|alert|json|verbatim|section|auth|guest|hasSection|forelse|includeIf|includeWhen|includeFirst|each|push|stack|prepend|inject|env|elseenv|unless|yield|extends|parent|include|acfrepeater|block|can|cannot|choice|debug|elsecan|elsecannot|embed|hipchat|lang|layout|macro|macrodef|minify|partial|render|servers|set|slack|story|task|unset|wpposts|acfend|after|append|breakpoint|endafter|endcan|endcannot|endembed|endmacro|endmarkdown|endminify|endpartial|endsetup|endstory|endtask|endunless|markdown|overwrite|setup|stop|wpempty|wpend|wpquery)\"\n\n            }, {\n                token: [\"directive.declaration.blade\", \"keyword.control.blade\"],\n                regex: \"(@)(if|else|elseif|endif|foreach|endforeach|switch|case|break|default|endswitch|for|endfor|while|endwhile|continue)\"\n            }, {\n                token: [\"directive.ignore.blade\", \"injections.begin.blade\"],\n                regex: \"(@?)(\\\\{\\\\{)\",\n                push: [{\n                    token: \"injections.end.blade\",\n                    regex: \"\\\\}\\\\}\",\n                    next: \"pop\"\n                }, {\n                    include: \"strings\"\n                }, {\n                    include: \"variables\"\n                }, {\n                    defaultToken: \"source.blade\"\n                }]\n            }, {\n                token: \"injections.unescaped.begin.blade\",\n                regex: \"\\\\{\\\\!\\\\!\",\n                push: [{\n                    token: \"injections.unescaped.end.blade\",\n                    regex: \"\\\\!\\\\!\\\\}\",\n                    next: \"pop\"\n                }, {\n                    include: \"strings\"\n                }, {\n                    include: \"variables\"\n                }, {\n                    defaultToken: \"source.blade\"\n                }]\n            }\n\n        ],\n\n        lang: [{\n            token: \"keyword.operator.blade\",\n            regex: \"(?:!=|!|<=|>=|<|>|===|==|=|\\\\+\\\\+|\\\\;|\\\\,|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod|as)\\\\b\"\n        }, {\n            token: \"constant.language.blade\",\n            regex: \"\\\\b(?:TRUE|FALSE|true|false)\\\\b\"\n        }],\n        strings: [{\n            token: \"punctuation.definition.string.begin.blade\",\n            regex: \"\\\"\",\n            push: [{\n                token: \"punctuation.definition.string.end.blade\",\n                regex: \"\\\"\",\n                next: \"pop\"\n            }, {\n                token: \"string.character.escape.blade\",\n                regex: \"\\\\\\\\.\"\n            }, {\n                defaultToken: \"string.quoted.single.blade\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.blade\",\n            regex: \"'\",\n            push: [{\n                token: \"punctuation.definition.string.end.blade\",\n                regex: \"'\",\n                next: \"pop\"\n            }, {\n                token: \"string.character.escape.blade\",\n                regex: \"\\\\\\\\.\"\n            }, {\n                defaultToken: \"string.quoted.double.blade\"\n            }]\n        }],\n        variables: [{\n            token: \"variable.blade\",\n            regex: \"\\\\$([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"\n        }, {\n            token: [\"keyword.operator.blade\", \"constant.other.property.blade\"],\n            regex: \"(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"\n        }, {\n            token: [\"keyword.operator.blade\",\n                \"meta.function-call.object.blade\",\n                \"punctuation.definition.variable.blade\",\n                \"variable.blade\",\n                \"punctuation.definition.variable.blade\"\n            ],\n            regex: \"(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))\"\n        }]\n    };\n\n    var bladeStart = bladeRules.start;\n\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift.apply(this.$rules[rule], bladeStart);\n    }\n\n    Object.keys(bladeRules).forEach(function(x) {\n        if (!this.$rules[x])\n            this.$rules[x] = bladeRules[x];\n    }, this);\n\n    this.normalizeRules();\n};\n\n\noop.inherits(PHPLaravelBladeHighlightRules, PhpHighlightRules);\n\nexports.PHPLaravelBladeHighlightRules = PHPLaravelBladeHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar functionMap = {\n    \"abs\": [\n        \"int abs(int number)\",\n        \"Return the absolute value of the number\"\n    ],\n    \"acos\": [\n        \"float acos(float number)\",\n        \"Return the arc cosine of the number in radians\"\n    ],\n    \"acosh\": [\n        \"float acosh(float number)\",\n        \"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"\n    ],\n    \"addGlob\": [\n        \"bool addGlob(string pattern[,int flags [, array options]])\",\n        \"Add files matching the glob pattern. See php's glob for the pattern syntax.\"\n    ],\n    \"addPattern\": [\n        \"bool addPattern(string pattern[, string path [, array options]])\",\n        \"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"\n    ],\n    \"addcslashes\": [\n        \"string addcslashes(string str, string charlist)\",\n        \"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"\n    ],\n    \"addslashes\": [\n        \"string addslashes(string str)\",\n        \"Escapes single quote, double quotes and backslash characters in a string with backslashes\"\n    ],\n    \"apache_child_terminate\": [\n        \"bool apache_child_terminate(void)\",\n        \"Terminate apache process after this request\"\n    ],\n    \"apache_get_modules\": [\n        \"array apache_get_modules(void)\",\n        \"Get a list of loaded Apache modules\"\n    ],\n    \"apache_get_version\": [\n        \"string apache_get_version(void)\",\n        \"Fetch Apache version\"\n    ],\n    \"apache_getenv\": [\n        \"bool apache_getenv(string variable [, bool walk_to_top])\",\n        \"Get an Apache subprocess_env variable\"\n    ],\n    \"apache_lookup_uri\": [\n        \"object apache_lookup_uri(string URI)\",\n        \"Perform a partial request of the given URI to obtain information about it\"\n    ],\n    \"apache_note\": [\n        \"string apache_note(string note_name [, string note_value])\",\n        \"Get and set Apache request notes\"\n    ],\n    \"apache_request_auth_name\": [\n        \"string apache_request_auth_name()\",\n        \"\"\n    ],\n    \"apache_request_auth_type\": [\n        \"string apache_request_auth_type()\",\n        \"\"\n    ],\n    \"apache_request_discard_request_body\": [\n        \"long apache_request_discard_request_body()\",\n        \"\"\n    ],\n    \"apache_request_err_headers_out\": [\n        \"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all headers that go out in case of an error or a subrequest\"\n    ],\n    \"apache_request_headers\": [\n        \"array apache_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"apache_request_headers_in\": [\n        \"array apache_request_headers_in()\",\n        \"* fetch all incoming request headers\"\n    ],\n    \"apache_request_headers_out\": [\n        \"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all outgoing request headers\"\n    ],\n    \"apache_request_is_initial_req\": [\n        \"bool apache_request_is_initial_req()\",\n        \"\"\n    ],\n    \"apache_request_log_error\": [\n        \"boolean apache_request_log_error(string message, [long facility])\",\n        \"\"\n    ],\n    \"apache_request_meets_conditions\": [\n        \"long apache_request_meets_conditions()\",\n        \"\"\n    ],\n    \"apache_request_remote_host\": [\n        \"int apache_request_remote_host([int type])\",\n        \"\"\n    ],\n    \"apache_request_run\": [\n        \"long apache_request_run()\",\n        \"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"\n    ],\n    \"apache_request_satisfies\": [\n        \"long apache_request_satisfies()\",\n        \"\"\n    ],\n    \"apache_request_server_port\": [\n        \"int apache_request_server_port()\",\n        \"\"\n    ],\n    \"apache_request_set_etag\": [\n        \"void apache_request_set_etag()\",\n        \"\"\n    ],\n    \"apache_request_set_last_modified\": [\n        \"void apache_request_set_last_modified()\",\n        \"\"\n    ],\n    \"apache_request_some_auth_required\": [\n        \"bool apache_request_some_auth_required()\",\n        \"\"\n    ],\n    \"apache_request_sub_req_lookup_file\": [\n        \"object apache_request_sub_req_lookup_file(string file)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_sub_req_lookup_uri\": [\n        \"object apache_request_sub_req_lookup_uri(string uri)\",\n        \"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"\n    ],\n    \"apache_request_sub_req_method_uri\": [\n        \"object apache_request_sub_req_method_uri(string method, string uri)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_update_mtime\": [\n        \"long apache_request_update_mtime([int dependency_mtime])\",\n        \"\"\n    ],\n    \"apache_reset_timeout\": [\n        \"bool apache_reset_timeout(void)\",\n        \"Reset the Apache write timer\"\n    ],\n    \"apache_response_headers\": [\n        \"array apache_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"apache_setenv\": [\n        \"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\n        \"Set an Apache subprocess_env variable\"\n    ],\n    \"array_change_key_case\": [\n        \"array array_change_key_case(array input [, int case=CASE_LOWER])\",\n        \"Retuns an array with all string keys lowercased [or uppercased]\"\n    ],\n    \"array_chunk\": [\n        \"array array_chunk(array input, int size [, bool preserve_keys])\",\n        \"Split array into chunks\"\n    ],\n    \"array_combine\": [\n        \"array array_combine(array keys, array values)\",\n        \"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"\n    ],\n    \"array_count_values\": [\n        \"array array_count_values(array input)\",\n        \"Return the value as key and the frequency of that value in input as value\"\n    ],\n    \"array_diff\": [\n        \"array array_diff(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"\n    ],\n    \"array_diff_assoc\": [\n        \"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"\n    ],\n    \"array_diff_key\": [\n        \"array array_diff_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_diff_uassoc\": [\n        \"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"\n    ],\n    \"array_diff_ukey\": [\n        \"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_fill\": [\n        \"array array_fill(int start_key, int num, mixed val)\",\n        \"Create an array containing num elements starting with index start_key each initialized to val\"\n    ],\n    \"array_fill_keys\": [\n        \"array array_fill_keys(array keys, mixed val)\",\n        \"Create an array using the elements of the first parameter as keys each initialized to val\"\n    ],\n    \"array_filter\": [\n        \"array array_filter(array input [, mixed callback])\",\n        \"Filters elements from the array via the callback.\"\n    ],\n    \"array_flip\": [\n        \"array array_flip(array input)\",\n        \"Return array with key <-> value flipped\"\n    ],\n    \"array_intersect\": [\n        \"array array_intersect(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments\"\n    ],\n    \"array_intersect_assoc\": [\n        \"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"\n    ],\n    \"array_intersect_key\": [\n        \"array array_intersect_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"\n    ],\n    \"array_intersect_uassoc\": [\n        \"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"\n    ],\n    \"array_intersect_ukey\": [\n        \"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"\n    ],\n    \"array_key_exists\": [\n        \"bool array_key_exists(mixed key, array search)\",\n        \"Checks if the given key or index exists in the array\"\n    ],\n    \"array_keys\": [\n        \"array array_keys(array input [, mixed search_value[, bool strict]])\",\n        \"Return just the keys from the input array, optionally only for the specified search_value\"\n    ],\n    \"array_map\": [\n        \"array array_map(mixed callback, array input1 [, array input2 ,...])\",\n        \"Applies the callback to the elements in given arrays.\"\n    ],\n    \"array_merge\": [\n        \"array array_merge(array arr1, array arr2 [, array ...])\",\n        \"Merges elements from passed arrays into one array\"\n    ],\n    \"array_merge_recursive\": [\n        \"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively merges elements from passed arrays into one array\"\n    ],\n    \"array_multisort\": [\n        \"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\n        \"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"\n    ],\n    \"array_pad\": [\n        \"array array_pad(array input, int pad_size, mixed pad_value)\",\n        \"Returns a copy of input array padded with pad_value to size pad_size\"\n    ],\n    \"array_pop\": [\n        \"mixed array_pop(array stack)\",\n        \"Pops an element off the end of the array\"\n    ],\n    \"array_product\": [\n        \"mixed array_product(array input)\",\n        \"Returns the product of the array entries\"\n    ],\n    \"array_push\": [\n        \"int array_push(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the end of the array\"\n    ],\n    \"array_rand\": [\n        \"mixed array_rand(array input [, int num_req])\",\n        \"Return key/keys for random entry/entries in the array\"\n    ],\n    \"array_reduce\": [\n        \"mixed array_reduce(array input, mixed callback [, mixed initial])\",\n        \"Iteratively reduce the array to a single value via the callback.\"\n    ],\n    \"array_replace\": [\n        \"array array_replace(array arr1, array arr2 [, array ...])\",\n        \"Replaces elements from passed arrays into one array\"\n    ],\n    \"array_replace_recursive\": [\n        \"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively replaces elements from passed arrays into one array\"\n    ],\n    \"array_reverse\": [\n        \"array array_reverse(array input [, bool preserve keys])\",\n        \"Return input as a new array with the order of the entries reversed\"\n    ],\n    \"array_search\": [\n        \"mixed array_search(mixed needle, array haystack [, bool strict])\",\n        \"Searches the array for a given value and returns the corresponding key if successful\"\n    ],\n    \"array_shift\": [\n        \"mixed array_shift(array stack)\",\n        \"Pops an element off the beginning of the array\"\n    ],\n    \"array_slice\": [\n        \"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\n        \"Returns elements specified by offset and length\"\n    ],\n    \"array_splice\": [\n        \"array array_splice(array input, int offset [, int length [, array replacement]])\",\n        \"Removes the elements designated by offset and length and replace them with supplied array\"\n    ],\n    \"array_sum\": [\n        \"mixed array_sum(array input)\",\n        \"Returns the sum of the array entries\"\n    ],\n    \"array_udiff\": [\n        \"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"\n    ],\n    \"array_udiff_assoc\": [\n        \"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"\n    ],\n    \"array_udiff_uassoc\": [\n        \"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"\n    ],\n    \"array_uintersect\": [\n        \"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_assoc\": [\n        \"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_uassoc\": [\n        \"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"\n    ],\n    \"array_unique\": [\n        \"array array_unique(array input [, int sort_flags])\",\n        \"Removes duplicate values from array\"\n    ],\n    \"array_unshift\": [\n        \"int array_unshift(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the beginning of the array\"\n    ],\n    \"array_values\": [\n        \"array array_values(array input)\",\n        \"Return just the values from the input array\"\n    ],\n    \"array_walk\": [\n        \"bool array_walk(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function to every member of an array\"\n    ],\n    \"array_walk_recursive\": [\n        \"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function recursively to every member of an array\"\n    ],\n    \"arsort\": [\n        \"bool arsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order and maintain index association\"\n    ],\n    \"asin\": [\n        \"float asin(float number)\",\n        \"Returns the arc sine of the number in radians\"\n    ],\n    \"asinh\": [\n        \"float asinh(float number)\",\n        \"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"\n    ],\n    \"asort\": [\n        \"bool asort(array &array_arg [, int sort_flags])\",\n        \"Sort an array and maintain index association\"\n    ],\n    \"assert\": [\n        \"int assert(string|bool assertion)\",\n        \"Checks if assertion is false\"\n    ],\n    \"assert_options\": [\n        \"mixed assert_options(int what [, mixed value])\",\n        \"Set/get the various assert flags\"\n    ],\n    \"atan\": [\n        \"float atan(float number)\",\n        \"Returns the arc tangent of the number in radians\"\n    ],\n    \"atan2\": [\n        \"float atan2(float y, float x)\",\n        \"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"\n    ],\n    \"atanh\": [\n        \"float atanh(float number)\",\n        \"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"\n    ],\n    \"attachIterator\": [\n        \"void attachIterator(Iterator iterator[, mixed info])\",\n        \"Attach a new iterator\"\n    ],\n    \"base64_decode\": [\n        \"string base64_decode(string str[, bool strict])\",\n        \"Decodes string using MIME base64 algorithm\"\n    ],\n    \"base64_encode\": [\n        \"string base64_encode(string str)\",\n        \"Encodes string using MIME base64 algorithm\"\n    ],\n    \"base_convert\": [\n        \"string base_convert(string number, int frombase, int tobase)\",\n        \"Converts a number in a string from any base <= 36 to any base <= 36\"\n    ],\n    \"basename\": [\n        \"string basename(string path [, string suffix])\",\n        \"Returns the filename component of the path\"\n    ],\n    \"bcadd\": [\n        \"string bcadd(string left_operand, string right_operand [, int scale])\",\n        \"Returns the sum of two arbitrary precision numbers\"\n    ],\n    \"bccomp\": [\n        \"int bccomp(string left_operand, string right_operand [, int scale])\",\n        \"Compares two arbitrary precision numbers\"\n    ],\n    \"bcdiv\": [\n        \"string bcdiv(string left_operand, string right_operand [, int scale])\",\n        \"Returns the quotient of two arbitrary precision numbers (division)\"\n    ],\n    \"bcmod\": [\n        \"string bcmod(string left_operand, string right_operand)\",\n        \"Returns the modulus of the two arbitrary precision operands\"\n    ],\n    \"bcmul\": [\n        \"string bcmul(string left_operand, string right_operand [, int scale])\",\n        \"Returns the multiplication of two arbitrary precision numbers\"\n    ],\n    \"bcpow\": [\n        \"string bcpow(string x, string y [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another\"\n    ],\n    \"bcpowmod\": [\n        \"string bcpowmod(string x, string y, string mod [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"\n    ],\n    \"bcscale\": [\n        \"bool bcscale(int scale)\",\n        \"Sets default scale parameter for all bc math functions\"\n    ],\n    \"bcsqrt\": [\n        \"string bcsqrt(string operand [, int scale])\",\n        \"Returns the square root of an arbitray precision number\"\n    ],\n    \"bcsub\": [\n        \"string bcsub(string left_operand, string right_operand [, int scale])\",\n        \"Returns the difference between two arbitrary precision numbers\"\n    ],\n    \"bin2hex\": [\n        \"string bin2hex(string data)\",\n        \"Converts the binary representation of data to hex\"\n    ],\n    \"bind_textdomain_codeset\": [\n        \"string bind_textdomain_codeset (string domain, string codeset)\",\n        \"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"\n    ],\n    \"bindec\": [\n        \"int bindec(string binary_number)\",\n        \"Returns the decimal equivalent of the binary number\"\n    ],\n    \"bindtextdomain\": [\n        \"string bindtextdomain(string domain_name, string dir)\",\n        \"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"\n    ],\n    \"birdstep_autocommit\": [\n        \"bool birdstep_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_close\": [\n        \"bool birdstep_close(int id)\",\n        \"\"\n    ],\n    \"birdstep_commit\": [\n        \"bool birdstep_commit(int index)\",\n        \"\"\n    ],\n    \"birdstep_connect\": [\n        \"int birdstep_connect(string server, string user, string pass)\",\n        \"\"\n    ],\n    \"birdstep_exec\": [\n        \"int birdstep_exec(int index, string exec_str)\",\n        \"\"\n    ],\n    \"birdstep_fetch\": [\n        \"bool birdstep_fetch(int index)\",\n        \"\"\n    ],\n    \"birdstep_fieldname\": [\n        \"string birdstep_fieldname(int index, int col)\",\n        \"\"\n    ],\n    \"birdstep_fieldnum\": [\n        \"int birdstep_fieldnum(int index)\",\n        \"\"\n    ],\n    \"birdstep_freeresult\": [\n        \"bool birdstep_freeresult(int index)\",\n        \"\"\n    ],\n    \"birdstep_off_autocommit\": [\n        \"bool birdstep_off_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_result\": [\n        \"mixed birdstep_result(int index, mixed col)\",\n        \"\"\n    ],\n    \"birdstep_rollback\": [\n        \"bool birdstep_rollback(int index)\",\n        \"\"\n    ],\n    \"bzcompress\": [\n        \"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\n        \"Compresses a string into BZip2 encoded data\"\n    ],\n    \"bzdecompress\": [\n        \"string bzdecompress(string source [, int small])\",\n        \"Decompresses BZip2 compressed data\"\n    ],\n    \"bzerrno\": [\n        \"int bzerrno(resource bz)\",\n        \"Returns the error number\"\n    ],\n    \"bzerror\": [\n        \"array bzerror(resource bz)\",\n        \"Returns the error number and error string in an associative array\"\n    ],\n    \"bzerrstr\": [\n        \"string bzerrstr(resource bz)\",\n        \"Returns the error string\"\n    ],\n    \"bzopen\": [\n        \"resource bzopen(string|int file|fp, string mode)\",\n        \"Opens a new BZip2 stream\"\n    ],\n    \"bzread\": [\n        \"string bzread(resource bz[, int length])\",\n        \"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"\n    ],\n    \"cal_days_in_month\": [\n        \"int cal_days_in_month(int calendar, int month, int year)\",\n        \"Returns the number of days in a month for a given year and calendar\"\n    ],\n    \"cal_from_jd\": [\n        \"array cal_from_jd(int jd, int calendar)\",\n        \"Converts from Julian Day Count to a supported calendar and return extended information\"\n    ],\n    \"cal_info\": [\n        \"array cal_info([int calendar])\",\n        \"Returns information about a particular calendar\"\n    ],\n    \"cal_to_jd\": [\n        \"int cal_to_jd(int calendar, int month, int day, int year)\",\n        \"Converts from a supported calendar to Julian Day Count\"\n    ],\n    \"call_user_func\": [\n        \"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"call_user_func_array\": [\n        \"mixed call_user_func_array(string function_name, array parameters)\",\n        \"Call a user function which is the first parameter with the arguments contained in array\"\n    ],\n    \"call_user_method\": [\n        \"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\n        \"Call a user method on a specific object or class\"\n    ],\n    \"call_user_method_array\": [\n        \"mixed call_user_method_array(string method_name, mixed object, array params)\",\n        \"Call a user method on a specific object or class using a parameter array\"\n    ],\n    \"ceil\": [\n        \"float ceil(float number)\",\n        \"Returns the next highest integer value of the number\"\n    ],\n    \"chdir\": [\n        \"bool chdir(string directory)\",\n        \"Change the current directory\"\n    ],\n    \"checkdate\": [\n        \"bool checkdate(int month, int day, int year)\",\n        \"Returns true(1) if it is a valid date in gregorian calendar\"\n    ],\n    \"chgrp\": [\n        \"bool chgrp(string filename, mixed group)\",\n        \"Change file group\"\n    ],\n    \"chmod\": [\n        \"bool chmod(string filename, int mode)\",\n        \"Change file mode\"\n    ],\n    \"chown\": [\n        \"bool chown (string filename, mixed user)\",\n        \"Change file owner\"\n    ],\n    \"chr\": [\n        \"string chr(int ascii)\",\n        \"Converts ASCII code to a character\"\n    ],\n    \"chroot\": [\n        \"bool chroot(string directory)\",\n        \"Change root directory\"\n    ],\n    \"chunk_split\": [\n        \"string chunk_split(string str [, int chunklen [, string ending]])\",\n        \"Returns split line\"\n    ],\n    \"class_alias\": [\n        \"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\n        \"Creates an alias for user defined class\"\n    ],\n    \"class_exists\": [\n        \"bool class_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"class_implements\": [\n        \"array class_implements(mixed what [, bool autoload ])\",\n        \"Return all classes and interfaces implemented by SPL\"\n    ],\n    \"class_parents\": [\n        \"array class_parents(object instance [, boolean autoload = true])\",\n        \"Return an array containing the names of all parent classes\"\n    ],\n    \"clearstatcache\": [\n        \"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\n        \"Clear file stat cache\"\n    ],\n    \"closedir\": [\n        \"void closedir([resource dir_handle])\",\n        \"Close directory connection identified by the dir_handle\"\n    ],\n    \"closelog\": [\n        \"bool closelog(void)\",\n        \"Close connection to system logger\"\n    ],\n    \"collator_asort\": [\n        \"bool collator_asort( Collator $coll, array(string) $arr )\",\n        \"* Sort array using specified collator, maintaining index association.\"\n    ],\n    \"collator_compare\": [\n        \"int collator_compare( Collator $coll, string $str1, string $str2 )\",\n        \"* Compare two strings.\"\n    ],\n    \"collator_create\": [\n        \"Collator collator_create( string $locale )\",\n        \"* Create collator.\"\n    ],\n    \"collator_get_attribute\": [\n        \"int collator_get_attribute( Collator $coll, int $attr )\",\n        \"* Get collation attribute value.\"\n    ],\n    \"collator_get_error_code\": [\n        \"int collator_get_error_code( Collator $coll )\",\n        \"* Get collator's last error code.\"\n    ],\n    \"collator_get_error_message\": [\n        \"string collator_get_error_message( Collator $coll )\",\n        \"* Get text description for collator's last error code.\"\n    ],\n    \"collator_get_locale\": [\n        \"string collator_get_locale( Collator $coll, int $type )\",\n        \"* Gets the locale name of the collator.\"\n    ],\n    \"collator_get_sort_key\": [\n        \"bool collator_get_sort_key( Collator $coll, string $str )\",\n        \"* Get a sort key for a string from a Collator. }}}\"\n    ],\n    \"collator_get_strength\": [\n        \"int collator_get_strength(Collator coll)\",\n        \"* Returns the current collation strength.\"\n    ],\n    \"collator_set_attribute\": [\n        \"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\n        \"* Set collation attribute.\"\n    ],\n    \"collator_set_strength\": [\n        \"bool collator_set_strength(Collator coll, int strength)\",\n        \"* Set the collation strength.\"\n    ],\n    \"collator_sort\": [\n        \"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\n        \"* Sort array using specified collator.\"\n    ],\n    \"collator_sort_with_sort_keys\": [\n        \"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\n        \"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"\n    ],\n    \"com_create_guid\": [\n        \"string com_create_guid()\",\n        \"Generate a globally unique identifier (GUID)\"\n    ],\n    \"com_event_sink\": [\n        \"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\n        \"Connect events from a COM object to a PHP object\"\n    ],\n    \"com_get_active_object\": [\n        \"object com_get_active_object(string progid [, int code_page ])\",\n        \"Returns a handle to an already running instance of a COM object\"\n    ],\n    \"com_load_typelib\": [\n        \"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\n        \"Loads a Typelibrary and registers its constants\"\n    ],\n    \"com_message_pump\": [\n        \"bool com_message_pump([int timeoutms])\",\n        \"Process COM messages, sleeping for up to timeoutms milliseconds\"\n    ],\n    \"com_print_typeinfo\": [\n        \"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\n        \"Print out a PHP class definition for a dispatchable interface\"\n    ],\n    \"compact\": [\n        \"array compact(mixed var_names [, mixed ...])\",\n        \"Creates a hash containing variables and their values\"\n    ],\n    \"compose_locale\": [\n        \"static string compose_locale($array)\",\n        \"* Creates a locale by combining the parts of locale-ID passed  * }}}\"\n    ],\n    \"confirm_extname_compiled\": [\n        \"string confirm_extname_compiled(string arg)\",\n        \"Return a string to confirm that the module is compiled in\"\n    ],\n    \"connection_aborted\": [\n        \"int connection_aborted(void)\",\n        \"Returns true if client disconnected\"\n    ],\n    \"connection_status\": [\n        \"int connection_status(void)\",\n        \"Returns the connection status bitfield\"\n    ],\n    \"constant\": [\n        \"mixed constant(string const_name)\",\n        \"Given the name of a constant this function will return the constant's associated value\"\n    ],\n    \"convert_cyr_string\": [\n        \"string convert_cyr_string(string str, string from, string to)\",\n        \"Convert from one Cyrillic character set to another\"\n    ],\n    \"convert_uudecode\": [\n        \"string convert_uudecode(string data)\",\n        \"decode a uuencoded string\"\n    ],\n    \"convert_uuencode\": [\n        \"string convert_uuencode(string data)\",\n        \"uuencode a string\"\n    ],\n    \"copy\": [\n        \"bool copy(string source_file, string destination_file [, resource context])\",\n        \"Copy a file\"\n    ],\n    \"cos\": [\n        \"float cos(float number)\",\n        \"Returns the cosine of the number in radians\"\n    ],\n    \"cosh\": [\n        \"float cosh(float number)\",\n        \"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"\n    ],\n    \"count\": [\n        \"int count(mixed var [, int mode])\",\n        \"Count the number of elements in a variable (usually an array)\"\n    ],\n    \"count_chars\": [\n        \"mixed count_chars(string input [, int mode])\",\n        \"Returns info about what characters are used in input\"\n    ],\n    \"crc32\": [\n        \"string crc32(string str)\",\n        \"Calculate the crc32 polynomial of a string\"\n    ],\n    \"create_function\": [\n        \"string create_function(string args, string code)\",\n        \"Creates an anonymous function, and returns its name (funny, eh?)\"\n    ],\n    \"crypt\": [\n        \"string crypt(string str [, string salt])\",\n        \"Hash a string\"\n    ],\n    \"ctype_alnum\": [\n        \"bool ctype_alnum(mixed c)\",\n        \"Checks for alphanumeric character(s)\"\n    ],\n    \"ctype_alpha\": [\n        \"bool ctype_alpha(mixed c)\",\n        \"Checks for alphabetic character(s)\"\n    ],\n    \"ctype_cntrl\": [\n        \"bool ctype_cntrl(mixed c)\",\n        \"Checks for control character(s)\"\n    ],\n    \"ctype_digit\": [\n        \"bool ctype_digit(mixed c)\",\n        \"Checks for numeric character(s)\"\n    ],\n    \"ctype_graph\": [\n        \"bool ctype_graph(mixed c)\",\n        \"Checks for any printable character(s) except space\"\n    ],\n    \"ctype_lower\": [\n        \"bool ctype_lower(mixed c)\",\n        \"Checks for lowercase character(s)\"\n    ],\n    \"ctype_print\": [\n        \"bool ctype_print(mixed c)\",\n        \"Checks for printable character(s)\"\n    ],\n    \"ctype_punct\": [\n        \"bool ctype_punct(mixed c)\",\n        \"Checks for any printable character which is not whitespace or an alphanumeric character\"\n    ],\n    \"ctype_space\": [\n        \"bool ctype_space(mixed c)\",\n        \"Checks for whitespace character(s)\"\n    ],\n    \"ctype_upper\": [\n        \"bool ctype_upper(mixed c)\",\n        \"Checks for uppercase character(s)\"\n    ],\n    \"ctype_xdigit\": [\n        \"bool ctype_xdigit(mixed c)\",\n        \"Checks for character(s) representing a hexadecimal digit\"\n    ],\n    \"curl_close\": [\n        \"void curl_close(resource ch)\",\n        \"Close a cURL session\"\n    ],\n    \"curl_copy_handle\": [\n        \"resource curl_copy_handle(resource ch)\",\n        \"Copy a cURL handle along with all of it's preferences\"\n    ],\n    \"curl_errno\": [\n        \"int curl_errno(resource ch)\",\n        \"Return an integer containing the last error number\"\n    ],\n    \"curl_error\": [\n        \"string curl_error(resource ch)\",\n        \"Return a string contain the last error for the current session\"\n    ],\n    \"curl_exec\": [\n        \"bool curl_exec(resource ch)\",\n        \"Perform a cURL session\"\n    ],\n    \"curl_getinfo\": [\n        \"mixed curl_getinfo(resource ch [, int option])\",\n        \"Get information regarding a specific transfer\"\n    ],\n    \"curl_init\": [\n        \"resource curl_init([string url])\",\n        \"Initialize a cURL session\"\n    ],\n    \"curl_multi_add_handle\": [\n        \"int curl_multi_add_handle(resource mh, resource ch)\",\n        \"Add a normal cURL handle to a cURL multi handle\"\n    ],\n    \"curl_multi_close\": [\n        \"void curl_multi_close(resource mh)\",\n        \"Close a set of cURL handles\"\n    ],\n    \"curl_multi_exec\": [\n        \"int curl_multi_exec(resource mh, int &still_running)\",\n        \"Run the sub-connections of the current cURL handle\"\n    ],\n    \"curl_multi_getcontent\": [\n        \"string curl_multi_getcontent(resource ch)\",\n        \"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"\n    ],\n    \"curl_multi_info_read\": [\n        \"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\n        \"Get information about the current transfers\"\n    ],\n    \"curl_multi_init\": [\n        \"resource curl_multi_init(void)\",\n        \"Returns a new cURL multi handle\"\n    ],\n    \"curl_multi_remove_handle\": [\n        \"int curl_multi_remove_handle(resource mh, resource ch)\",\n        \"Remove a multi handle from a set of cURL handles\"\n    ],\n    \"curl_multi_select\": [\n        \"int curl_multi_select(resource mh[, double timeout])\",\n        \"Get all the sockets associated with the cURL extension, which can then be \\\"selected\\\"\"\n    ],\n    \"curl_setopt\": [\n        \"bool curl_setopt(resource ch, int option, mixed value)\",\n        \"Set an option for a cURL transfer\"\n    ],\n    \"curl_setopt_array\": [\n        \"bool curl_setopt_array(resource ch, array options)\",\n        \"Set an array of option for a cURL transfer\"\n    ],\n    \"curl_version\": [\n        \"array curl_version([int version])\",\n        \"Return cURL version information.\"\n    ],\n    \"current\": [\n        \"mixed current(array array_arg)\",\n        \"Return the element currently pointed to by the internal array pointer\"\n    ],\n    \"date\": [\n        \"string date(string format [, long timestamp])\",\n        \"Format a local date/time\"\n    ],\n    \"date_add\": [\n        \"DateTime date_add(DateTime object, DateInterval interval)\",\n        \"Adds an interval to the current date in object.\"\n    ],\n    \"date_create\": [\n        \"DateTime date_create([string time[, DateTimeZone object]])\",\n        \"Returns new DateTime object\"\n    ],\n    \"date_create_from_format\": [\n        \"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\n        \"Returns new DateTime object formatted according to the specified format\"\n    ],\n    \"date_date_set\": [\n        \"DateTime date_date_set(DateTime object, long year, long month, long day)\",\n        \"Sets the date.\"\n    ],\n    \"date_default_timezone_get\": [\n        \"string date_default_timezone_get()\",\n        \"Gets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_default_timezone_set\": [\n        \"bool date_default_timezone_set(string timezone_identifier)\",\n        \"Sets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_diff\": [\n        \"DateInterval date_diff(DateTime object [, bool absolute])\",\n        \"Returns the difference between two DateTime objects.\"\n    ],\n    \"date_format\": [\n        \"string date_format(DateTime object, string format)\",\n        \"Returns date formatted according to given format\"\n    ],\n    \"date_get_last_errors\": [\n        \"array date_get_last_errors()\",\n        \"Returns the warnings and errors found while parsing a date/time string.\"\n    ],\n    \"date_interval_create_from_date_string\": [\n        \"DateInterval date_interval_create_from_date_string(string time)\",\n        \"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"\n    ],\n    \"date_interval_format\": [\n        \"string date_interval_format(DateInterval object, string format)\",\n        \"Formats the interval.\"\n    ],\n    \"date_isodate_set\": [\n        \"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\n        \"Sets the ISO date.\"\n    ],\n    \"date_modify\": [\n        \"DateTime date_modify(DateTime object, string modify)\",\n        \"Alters the timestamp.\"\n    ],\n    \"date_offset_get\": [\n        \"long date_offset_get(DateTime object)\",\n        \"Returns the DST offset.\"\n    ],\n    \"date_parse\": [\n        \"array date_parse(string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_parse_from_format\": [\n        \"array date_parse_from_format(string format, string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_sub\": [\n        \"DateTime date_sub(DateTime object, DateInterval interval)\",\n        \"Subtracts an interval to the current date in object.\"\n    ],\n    \"date_sun_info\": [\n        \"array date_sun_info(long time, float latitude, float longitude)\",\n        \"Returns an array with information about sun set/rise and twilight begin/end\"\n    ],\n    \"date_sunrise\": [\n        \"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunrise for a given day and location\"\n    ],\n    \"date_sunset\": [\n        \"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunset for a given day and location\"\n    ],\n    \"date_time_set\": [\n        \"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\n        \"Sets the time.\"\n    ],\n    \"date_timestamp_get\": [\n        \"long date_timestamp_get(DateTime object)\",\n        \"Gets the Unix timestamp.\"\n    ],\n    \"date_timestamp_set\": [\n        \"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\n        \"Sets the date and time based on an Unix timestamp.\"\n    ],\n    \"date_timezone_get\": [\n        \"DateTimeZone date_timezone_get(DateTime object)\",\n        \"Return new DateTimeZone object relative to give DateTime\"\n    ],\n    \"date_timezone_set\": [\n        \"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\n        \"Sets the timezone for the DateTime object.\"\n    ],\n    \"datefmt_create\": [\n        \"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\n        \"* Create formatter.\"\n    ],\n    \"datefmt_format\": [\n        \"string datefmt_format( [mixed]int $args or array $args )\",\n        \"* Format the time value as a string. }}}\"\n    ],\n    \"datefmt_get_calendar\": [\n        \"string datefmt_get_calendar( IntlDateFormatter $mf )\",\n        \"* Get formatter calendar.\"\n    ],\n    \"datefmt_get_datetype\": [\n        \"string datefmt_get_datetype( IntlDateFormatter $mf )\",\n        \"* Get formatter datetype.\"\n    ],\n    \"datefmt_get_error_code\": [\n        \"int datefmt_get_error_code( IntlDateFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"datefmt_get_error_message\": [\n        \"string datefmt_get_error_message( IntlDateFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"datefmt_get_locale\": [\n        \"string datefmt_get_locale(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_get_pattern\": [\n        \"string datefmt_get_pattern( IntlDateFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"datefmt_get_timetype\": [\n        \"string datefmt_get_timetype( IntlDateFormatter $mf )\",\n        \"* Get formatter timetype.\"\n    ],\n    \"datefmt_get_timezone_id\": [\n        \"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\n        \"* Get formatter timezone_id.\"\n    ],\n    \"datefmt_isLenient\": [\n        \"string datefmt_isLenient(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_localtime\": [\n        \"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\n        \"* Parse the string $value to a localtime array  }}}\"\n    ],\n    \"datefmt_parse\": [\n        \"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\n        \"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"\n    ],\n    \"datefmt_setLenient\": [\n        \"string datefmt_setLenient(IntlDateFormatter $mf)\",\n        \"* Set formatter lenient.\"\n    ],\n    \"datefmt_set_calendar\": [\n        \"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\n        \"* Set formatter calendar.\"\n    ],\n    \"datefmt_set_pattern\": [\n        \"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"datefmt_set_timezone_id\": [\n        \"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\n        \"* Set formatter timezone_id.\"\n    ],\n    \"dba_close\": [\n        \"void dba_close(resource handle)\",\n        \"Closes database\"\n    ],\n    \"dba_delete\": [\n        \"bool dba_delete(string key, resource handle)\",\n        \"Deletes the entry associated with key    If inifile: remove all other key lines\"\n    ],\n    \"dba_exists\": [\n        \"bool dba_exists(string key, resource handle)\",\n        \"Checks, if the specified key exists\"\n    ],\n    \"dba_fetch\": [\n        \"string dba_fetch(string key, [int skip ,] resource handle)\",\n        \"Fetches the data associated with key\"\n    ],\n    \"dba_firstkey\": [\n        \"string dba_firstkey(resource handle)\",\n        \"Resets the internal key pointer and returns the first key\"\n    ],\n    \"dba_handlers\": [\n        \"array dba_handlers([bool full_info])\",\n        \"List configured database handlers\"\n    ],\n    \"dba_insert\": [\n        \"bool dba_insert(string key, string value, resource handle)\",\n        \"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"\n    ],\n    \"dba_key_split\": [\n        \"array|false dba_key_split(string key)\",\n        \"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"\n    ],\n    \"dba_list\": [\n        \"array dba_list()\",\n        \"List opened databases\"\n    ],\n    \"dba_nextkey\": [\n        \"string dba_nextkey(resource handle)\",\n        \"Returns the next key\"\n    ],\n    \"dba_open\": [\n        \"resource dba_open(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode\"\n    ],\n    \"dba_optimize\": [\n        \"bool dba_optimize(resource handle)\",\n        \"Optimizes (e.g. clean up, vacuum) database\"\n    ],\n    \"dba_popen\": [\n        \"resource dba_popen(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode persistently\"\n    ],\n    \"dba_replace\": [\n        \"bool dba_replace(string key, string value, resource handle)\",\n        \"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"\n    ],\n    \"dba_sync\": [\n        \"bool dba_sync(resource handle)\",\n        \"Synchronizes database\"\n    ],\n    \"dcgettext\": [\n        \"string dcgettext(string domain_name, string msgid, long category)\",\n        \"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"\n    ],\n    \"dcngettext\": [\n        \"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\n        \"Plural version of dcgettext()\"\n    ],\n    \"debug_backtrace\": [\n        \"array debug_backtrace([bool provide_object])\",\n        \"Return backtrace as array\"\n    ],\n    \"debug_print_backtrace\": [\n        \"void debug_print_backtrace(void) */\",\n        \"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"\n    ],\n    \"dom_document_relaxNG_validate_xml\": [\n        \"boolean dom_document_relaxNG_validate_xml(string source); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"\n    ],\n    \"dom_document_rename_node\": [\n        \"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"\n    ],\n    \"dom_document_save\": [\n        \"int dom_document_save(string file);\",\n        \"Convenience method to save to file\"\n    ],\n    \"dom_document_save_html\": [\n        \"string dom_document_save_html();\",\n        \"Convenience method to output as html\"\n    ],\n    \"dom_document_save_html_file\": [\n        \"int dom_document_save_html_file(string file);\",\n        \"Convenience method to save to file as html\"\n    ],\n    \"dom_document_savexml\": [\n        \"string dom_document_savexml([node n]);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"\n    ],\n    \"dom_document_schema_validate\": [\n        \"boolean dom_document_schema_validate(string source); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"\n    ],\n    \"dom_document_schema_validate_file\": [\n        \"boolean dom_document_schema_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"\n    ],\n    \"dom_document_validate\": [\n        \"boolean dom_document_validate();\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_xinclude\": [\n        \"int dom_document_xinclude([int options])\",\n        \"Substitutues xincludes in a DomDocument\"\n    ],\n    \"dom_domconfiguration_can_set_parameter\": [\n        \"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"\n    ],\n    \"dom_domconfiguration_get_parameter\": [\n        \"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"\n    ],\n    \"dom_domconfiguration_set_parameter\": [\n        \"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"\n    ],\n    \"dom_domerrorhandler_handle_error\": [\n        \"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"\n    ],\n    \"dom_domimplementation_create_document\": [\n        \"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_create_document_type\": [\n        \"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_get_feature\": [\n        \"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_domimplementation_has_feature\": [\n        \"boolean dom_domimplementation_has_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"\n    ],\n    \"dom_domimplementationlist_item\": [\n        \"domdomimplementation dom_domimplementationlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementation\": [\n        \"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementations\": [\n        \"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"\n    ],\n    \"dom_domstringlist_item\": [\n        \"domstring dom_domstringlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"\n    ],\n    \"dom_element_get_attribute\": [\n        \"string dom_element_get_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"\n    ],\n    \"dom_element_get_attribute_node\": [\n        \"DOMAttr dom_element_get_attribute_node(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"\n    ],\n    \"dom_element_get_attribute_node_ns\": [\n        \"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_attribute_ns\": [\n        \"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"\n    ],\n    \"dom_element_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute\": [\n        \"boolean dom_element_has_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute_ns\": [\n        \"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_remove_attribute\": [\n        \"void dom_element_remove_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"\n    ],\n    \"dom_element_remove_attribute_node\": [\n        \"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"\n    ],\n    \"dom_element_remove_attribute_ns\": [\n        \"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute\": [\n        \"void dom_element_set_attribute(string name, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"\n    ],\n    \"dom_element_set_attribute_node\": [\n        \"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"\n    ],\n    \"dom_element_set_attribute_node_ns\": [\n        \"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute_ns\": [\n        \"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_id_attribute\": [\n        \"void dom_element_set_id_attribute(string name, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_node\": [\n        \"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_ns\": [\n        \"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"\n    ],\n    \"dom_import_simplexml\": [\n        \"somNode dom_import_simplexml(sxeobject node)\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"dom_namednodemap_get_named_item\": [\n        \"DOMNode dom_namednodemap_get_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"\n    ],\n    \"dom_namednodemap_get_named_item_ns\": [\n        \"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_item\": [\n        \"DOMNode dom_namednodemap_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item\": [\n        \"DOMNode dom_namednodemap_remove_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item_ns\": [\n        \"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_set_named_item\": [\n        \"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"\n    ],\n    \"dom_namednodemap_set_named_item_ns\": [\n        \"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namelist_get_name\": [\n        \"string dom_namelist_get_name(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"\n    ],\n    \"dom_namelist_get_namespace_uri\": [\n        \"string dom_namelist_get_namespace_uri(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"\n    ],\n    \"dom_node_append_child\": [\n        \"DomNode dom_node_append_child(DomNode newChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"\n    ],\n    \"dom_node_clone_node\": [\n        \"DomNode dom_node_clone_node(boolean deep);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"\n    ],\n    \"dom_node_compare_document_position\": [\n        \"short dom_node_compare_document_position(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"\n    ],\n    \"dom_node_get_feature\": [\n        \"DomNode dom_node_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_node_get_user_data\": [\n        \"mixed dom_node_get_user_data(string key);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"\n    ],\n    \"dom_node_has_attributes\": [\n        \"boolean dom_node_has_attributes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"\n    ],\n    \"dom_node_has_child_nodes\": [\n        \"boolean dom_node_has_child_nodes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"\n    ],\n    \"dom_node_insert_before\": [\n        \"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"\n    ],\n    \"dom_node_is_default_namespace\": [\n        \"boolean dom_node_is_default_namespace(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"\n    ],\n    \"dom_node_is_equal_node\": [\n        \"boolean dom_node_is_equal_node(DomNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_same_node\": [\n        \"boolean dom_node_is_same_node(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_supported\": [\n        \"boolean dom_node_is_supported(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"\n    ],\n    \"dom_node_lookup_namespace_uri\": [\n        \"string dom_node_lookup_namespace_uri(string prefix);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"\n    ],\n    \"dom_node_lookup_prefix\": [\n        \"string dom_node_lookup_prefix(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"\n    ],\n    \"dom_node_normalize\": [\n        \"void dom_node_normalize();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"\n    ],\n    \"dom_node_remove_child\": [\n        \"DomNode dom_node_remove_child(DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"\n    ],\n    \"dom_node_replace_child\": [\n        \"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"\n    ],\n    \"dom_node_set_user_data\": [\n        \"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"\n    ],\n    \"dom_nodelist_item\": [\n        \"DOMNode dom_nodelist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"\n    ],\n    \"dom_string_extend_find_offset16\": [\n        \"int dom_string_extend_find_offset16(int offset32);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"\n    ],\n    \"dom_string_extend_find_offset32\": [\n        \"int dom_string_extend_find_offset32(int offset16);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"\n    ],\n    \"dom_text_is_whitespace_in_element_content\": [\n        \"boolean dom_text_is_whitespace_in_element_content();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"\n    ],\n    \"dom_text_replace_whole_text\": [\n        \"DOMText dom_text_replace_whole_text(string content);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"\n    ],\n    \"dom_text_split_text\": [\n        \"DOMText dom_text_split_text(int offset);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"\n    ],\n    \"dom_userdatahandler_handle\": [\n        \"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"\n    ],\n    \"dom_xpath_evaluate\": [\n        \"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"\n    ],\n    \"dom_xpath_query\": [\n        \"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"\n    ],\n    \"dom_xpath_register_ns\": [\n        \"boolean dom_xpath_register_ns(string prefix, string uri); */\",\n        \"PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Oss\\\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid XPath Context\\\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}\"\n    ],\n    \"dom_xpath_register_php_functions\": [\n        \"void dom_xpath_register_php_functions() */\",\n        \"PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"a\\\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions\"\n    ],\n    \"each\": [\n        \"array each(array arr)\",\n        \"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"\n    ],\n    \"easter_date\": [\n        \"int easter_date([int year])\",\n        \"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"\n    ],\n    \"easter_days\": [\n        \"int easter_days([int year, [int method]])\",\n        \"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"\n    ],\n    \"echo\": [\n        \"void echo(string arg1 [, string ...])\",\n        \"Output one or more strings\"\n    ],\n    \"empty\": [\n        \"bool empty( mixed var )\",\n        \"Determine whether a variable is empty\"\n    ],\n    \"enchant_broker_describe\": [\n        \"array enchant_broker_describe(resource broker)\",\n        \"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"\n    ],\n    \"enchant_broker_dict_exists\": [\n        \"bool enchant_broker_dict_exists(resource broker, string tag)\",\n        \"Whether a dictionary exists or not. Using non-empty tag\"\n    ],\n    \"enchant_broker_free\": [\n        \"boolean enchant_broker_free(resource broker)\",\n        \"Destroys the broker object and its dictionnaries\"\n    ],\n    \"enchant_broker_free_dict\": [\n        \"resource enchant_broker_free_dict(resource dict)\",\n        \"Free the dictionary resource\"\n    ],\n    \"enchant_broker_get_dict_path\": [\n        \"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\n        \"Get the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_get_error\": [\n        \"string enchant_broker_get_error(resource broker)\",\n        \"Returns the last error of the broker\"\n    ],\n    \"enchant_broker_init\": [\n        \"resource enchant_broker_init()\",\n        \"create a new broker object capable of requesting\"\n    ],\n    \"enchant_broker_list_dicts\": [\n        \"string enchant_broker_list_dicts(resource broker)\",\n        \"Lists the dictionaries available for the given broker\"\n    ],\n    \"enchant_broker_request_dict\": [\n        \"resource enchant_broker_request_dict(resource broker, string tag)\",\n        \"create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\\\"en_US\\\", \\\"de_DE\\\", ...)\"\n    ],\n    \"enchant_broker_request_pwl_dict\": [\n        \"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\n        \"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"\n    ],\n    \"enchant_broker_set_dict_path\": [\n        \"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\n        \"Set the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_set_ordering\": [\n        \"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\n        \"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"\n    ],\n    \"enchant_dict_add_to_personal\": [\n        \"void enchant_dict_add_to_personal(resource dict, string word)\",\n        \"add 'word' to personal word list\"\n    ],\n    \"enchant_dict_add_to_session\": [\n        \"void enchant_dict_add_to_session(resource dict, string word)\",\n        \"add 'word' to this spell-checking session\"\n    ],\n    \"enchant_dict_check\": [\n        \"bool enchant_dict_check(resource dict, string word)\",\n        \"If the word is correctly spelled return true, otherwise return false\"\n    ],\n    \"enchant_dict_describe\": [\n        \"array enchant_dict_describe(resource dict)\",\n        \"Describes an individual dictionary 'dict'\"\n    ],\n    \"enchant_dict_get_error\": [\n        \"string enchant_dict_get_error(resource dict)\",\n        \"Returns the last error of the current spelling-session\"\n    ],\n    \"enchant_dict_is_in_session\": [\n        \"bool enchant_dict_is_in_session(resource dict, string word)\",\n        \"whether or not 'word' exists in this spelling-session\"\n    ],\n    \"enchant_dict_quick_check\": [\n        \"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\n        \"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"\n    ],\n    \"enchant_dict_store_replacement\": [\n        \"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\n        \"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"\n    ],\n    \"enchant_dict_suggest\": [\n        \"array enchant_dict_suggest(resource dict, string word)\",\n        \"Will return a list of values if any of those pre-conditions are not met.\"\n    ],\n    \"end\": [\n        \"mixed end(array array_arg)\",\n        \"Advances array argument's internal pointer to the last element and return it\"\n    ],\n    \"ereg\": [\n        \"int ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match\"\n    ],\n    \"ereg_replace\": [\n        \"string ereg_replace(string pattern, string replacement, string string)\",\n        \"Replace regular expression\"\n    ],\n    \"eregi\": [\n        \"int eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match\"\n    ],\n    \"eregi_replace\": [\n        \"string eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression\"\n    ],\n    \"error_get_last\": [\n        \"array error_get_last()\",\n        \"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"\n    ],\n    \"error_log\": [\n        \"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\n        \"Send an error message somewhere\"\n    ],\n    \"error_reporting\": [\n        \"int error_reporting([int new_error_level])\",\n        \"Return the current error_reporting level, and if an argument was passed - change to the new level\"\n    ],\n    \"escapeshellarg\": [\n        \"string escapeshellarg(string arg)\",\n        \"Quote and escape an argument for use in a shell command\"\n    ],\n    \"escapeshellcmd\": [\n        \"string escapeshellcmd(string command)\",\n        \"Escape shell metacharacters\"\n    ],\n    \"exec\": [\n        \"string exec(string command [, array &output [, int &return_value]])\",\n        \"Execute an external program\"\n    ],\n    \"exif_imagetype\": [\n        \"int exif_imagetype(string imagefile)\",\n        \"Get the type of an image\"\n    ],\n    \"exif_read_data\": [\n        \"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\n        \"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"\n    ],\n    \"exif_tagname\": [\n        \"string exif_tagname(index)\",\n        \"Get headername for index or false if not defined\"\n    ],\n    \"exif_thumbnail\": [\n        \"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\n        \"Reads the embedded thumbnail\"\n    ],\n    \"exit\": [\n        \"void exit([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"exp\": [\n        \"float exp(float number)\",\n        \"Returns e raised to the power of the number\"\n    ],\n    \"explode\": [\n        \"array explode(string separator, string str [, int limit])\",\n        \"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"\n    ],\n    \"expm1\": [\n        \"float expm1(float number)\",\n        \"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"extension_loaded\": [\n        \"bool extension_loaded(string extension_name)\",\n        \"Returns true if the named extension is loaded\"\n    ],\n    \"extract\": [\n        \"int extract(array var_array [, int extract_type [, string prefix]])\",\n        \"Imports variables into symbol table from an array\"\n    ],\n    \"ezmlm_hash\": [\n        \"int ezmlm_hash(string addr)\",\n        \"Calculate EZMLM list hash value.\"\n    ],\n    \"fclose\": [\n        \"bool fclose(resource fp)\",\n        \"Close an open file pointer\"\n    ],\n    \"feof\": [\n        \"bool feof(resource fp)\",\n        \"Test for end-of-file on a file pointer\"\n    ],\n    \"fflush\": [\n        \"bool fflush(resource fp)\",\n        \"Flushes output\"\n    ],\n    \"fgetc\": [\n        \"string fgetc(resource fp)\",\n        \"Get a character from file pointer\"\n    ],\n    \"fgetcsv\": [\n        \"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\n        \"Get line from file pointer and parse for CSV fields\"\n    ],\n    \"fgets\": [\n        \"string fgets(resource fp[, int length])\",\n        \"Get a line from file pointer\"\n    ],\n    \"fgetss\": [\n        \"string fgetss(resource fp [, int length [, string allowable_tags]])\",\n        \"Get a line from file pointer and strip HTML tags\"\n    ],\n    \"file\": [\n        \"array file(string filename [, int flags[, resource context]])\",\n        \"Read entire file into an array\"\n    ],\n    \"file_exists\": [\n        \"bool file_exists(string filename)\",\n        \"Returns true if filename exists\"\n    ],\n    \"file_get_contents\": [\n        \"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\n        \"Read the entire file into a string\"\n    ],\n    \"file_put_contents\": [\n        \"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\n        \"Write/Create a file with contents data and return the number of bytes written\"\n    ],\n    \"fileatime\": [\n        \"int fileatime(string filename)\",\n        \"Get last access time of file\"\n    ],\n    \"filectime\": [\n        \"int filectime(string filename)\",\n        \"Get inode modification time of file\"\n    ],\n    \"filegroup\": [\n        \"int filegroup(string filename)\",\n        \"Get file group\"\n    ],\n    \"fileinode\": [\n        \"int fileinode(string filename)\",\n        \"Get file inode\"\n    ],\n    \"filemtime\": [\n        \"int filemtime(string filename)\",\n        \"Get last modification time of file\"\n    ],\n    \"fileowner\": [\n        \"int fileowner(string filename)\",\n        \"Get file owner\"\n    ],\n    \"fileperms\": [\n        \"int fileperms(string filename)\",\n        \"Get file permissions\"\n    ],\n    \"filesize\": [\n        \"int filesize(string filename)\",\n        \"Get file size\"\n    ],\n    \"filetype\": [\n        \"string filetype(string filename)\",\n        \"Get file type\"\n    ],\n    \"filter_has_var\": [\n        \"mixed filter_has_var(constant type, string variable_name)\",\n        \"* Returns true if the variable with the name 'name' exists in source.\"\n    ],\n    \"filter_input\": [\n        \"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\n        \"* Returns the filtered variable 'name'* from source `type`.\"\n    ],\n    \"filter_input_array\": [\n        \"mixed filter_input_array(constant type, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"filter_var\": [\n        \"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\n        \"* Returns the filtered version of the vriable.\"\n    ],\n    \"filter_var_array\": [\n        \"mixed filter_var_array(array data, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"finfo_buffer\": [\n        \"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\n        \"Return infromation about a string buffer.\"\n    ],\n    \"finfo_close\": [\n        \"resource finfo_close(resource finfo)\",\n        \"Close fileinfo resource.\"\n    ],\n    \"finfo_file\": [\n        \"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\n        \"Return information about a file.\"\n    ],\n    \"finfo_open\": [\n        \"resource finfo_open([int options [, string arg]])\",\n        \"Create a new fileinfo resource.\"\n    ],\n    \"finfo_set_flags\": [\n        \"bool finfo_set_flags(resource finfo, int options)\",\n        \"Set libmagic configuration options.\"\n    ],\n    \"floatval\": [\n        \"float floatval(mixed var)\",\n        \"Get the float value of a variable\"\n    ],\n    \"flock\": [\n        \"bool flock(resource fp, int operation [, int &wouldblock])\",\n        \"Portable file locking\"\n    ],\n    \"floor\": [\n        \"float floor(float number)\",\n        \"Returns the next lowest integer value from the number\"\n    ],\n    \"flush\": [\n        \"void flush(void)\",\n        \"Flush the output buffer\"\n    ],\n    \"fmod\": [\n        \"float fmod(float x, float y)\",\n        \"Returns the remainder of dividing x by y as a float\"\n    ],\n    \"fnmatch\": [\n        \"bool fnmatch(string pattern, string filename [, int flags])\",\n        \"Match filename against pattern\"\n    ],\n    \"fopen\": [\n        \"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\n        \"Open a file or a URL and return a file pointer\"\n    ],\n    \"forward_static_call\": [\n        \"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"fpassthru\": [\n        \"int fpassthru(resource fp)\",\n        \"Output all remaining data from a file pointer\"\n    ],\n    \"fprintf\": [\n        \"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"fputcsv\": [\n        \"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\n        \"Format line as CSV and write to file pointer\"\n    ],\n    \"fread\": [\n        \"string fread(resource fp, int length)\",\n        \"Binary-safe file read\"\n    ],\n    \"frenchtojd\": [\n        \"int frenchtojd(int month, int day, int year)\",\n        \"Converts a french republic calendar date to julian day count\"\n    ],\n    \"fscanf\": [\n        \"mixed fscanf(resource stream, string format [, string ...])\",\n        \"Implements a mostly ANSI compatible fscanf()\"\n    ],\n    \"fseek\": [\n        \"int fseek(resource fp, int offset [, int whence])\",\n        \"Seek on a file pointer\"\n    ],\n    \"fsockopen\": [\n        \"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open Internet or Unix domain socket connection\"\n    ],\n    \"fstat\": [\n        \"array fstat(resource fp)\",\n        \"Stat() on a filehandle\"\n    ],\n    \"ftell\": [\n        \"int ftell(resource fp)\",\n        \"Get file pointer's read/write position\"\n    ],\n    \"ftok\": [\n        \"int ftok(string pathname, string proj)\",\n        \"Convert a pathname and a project identifier to a System V IPC key\"\n    ],\n    \"ftp_alloc\": [\n        \"bool ftp_alloc(resource stream, int size[, &response])\",\n        \"Attempt to allocate space on the remote FTP server\"\n    ],\n    \"ftp_cdup\": [\n        \"bool ftp_cdup(resource stream)\",\n        \"Changes to the parent directory\"\n    ],\n    \"ftp_chdir\": [\n        \"bool ftp_chdir(resource stream, string directory)\",\n        \"Changes directories\"\n    ],\n    \"ftp_chmod\": [\n        \"int ftp_chmod(resource stream, int mode, string filename)\",\n        \"Sets permissions on a file\"\n    ],\n    \"ftp_close\": [\n        \"bool ftp_close(resource stream)\",\n        \"Closes the FTP stream\"\n    ],\n    \"ftp_connect\": [\n        \"resource ftp_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP stream\"\n    ],\n    \"ftp_delete\": [\n        \"bool ftp_delete(resource stream, string file)\",\n        \"Deletes a file\"\n    ],\n    \"ftp_exec\": [\n        \"bool ftp_exec(resource stream, string command)\",\n        \"Requests execution of a program on the FTP server\"\n    ],\n    \"ftp_fget\": [\n        \"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server and writes it to an open file\"\n    ],\n    \"ftp_fput\": [\n        \"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server\"\n    ],\n    \"ftp_get\": [\n        \"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server and writes it to a local file\"\n    ],\n    \"ftp_get_option\": [\n        \"mixed ftp_get_option(resource stream, int option)\",\n        \"Gets an FTP option\"\n    ],\n    \"ftp_login\": [\n        \"bool ftp_login(resource stream, string username, string password)\",\n        \"Logs into the FTP server\"\n    ],\n    \"ftp_mdtm\": [\n        \"int ftp_mdtm(resource stream, string filename)\",\n        \"Returns the last modification time of the file, or -1 on error\"\n    ],\n    \"ftp_mkdir\": [\n        \"string ftp_mkdir(resource stream, string directory)\",\n        \"Creates a directory and returns the absolute path for the new directory or false on error\"\n    ],\n    \"ftp_nb_continue\": [\n        \"int ftp_nb_continue(resource stream)\",\n        \"Continues retrieving/sending a file nbronously\"\n    ],\n    \"ftp_nb_fget\": [\n        \"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server asynchronly and writes it to an open file\"\n    ],\n    \"ftp_nb_fput\": [\n        \"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server nbronly\"\n    ],\n    \"ftp_nb_get\": [\n        \"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server nbhronly and writes it to a local file\"\n    ],\n    \"ftp_nb_put\": [\n        \"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_nlist\": [\n        \"array ftp_nlist(resource stream, string directory)\",\n        \"Returns an array of filenames in the given directory\"\n    ],\n    \"ftp_pasv\": [\n        \"bool ftp_pasv(resource stream, bool pasv)\",\n        \"Turns passive mode on or off\"\n    ],\n    \"ftp_put\": [\n        \"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_pwd\": [\n        \"string ftp_pwd(resource stream)\",\n        \"Returns the present working directory\"\n    ],\n    \"ftp_raw\": [\n        \"array ftp_raw(resource stream, string command)\",\n        \"Sends a literal command to the FTP server\"\n    ],\n    \"ftp_rawlist\": [\n        \"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\n        \"Returns a detailed listing of a directory as an array of output lines\"\n    ],\n    \"ftp_rename\": [\n        \"bool ftp_rename(resource stream, string src, string dest)\",\n        \"Renames the given file to a new path\"\n    ],\n    \"ftp_rmdir\": [\n        \"bool ftp_rmdir(resource stream, string directory)\",\n        \"Removes a directory\"\n    ],\n    \"ftp_set_option\": [\n        \"bool ftp_set_option(resource stream, int option, mixed value)\",\n        \"Sets an FTP option\"\n    ],\n    \"ftp_site\": [\n        \"bool ftp_site(resource stream, string cmd)\",\n        \"Sends a SITE command to the server\"\n    ],\n    \"ftp_size\": [\n        \"int ftp_size(resource stream, string filename)\",\n        \"Returns the size of the file, or -1 on error\"\n    ],\n    \"ftp_ssl_connect\": [\n        \"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP-SSL stream\"\n    ],\n    \"ftp_systype\": [\n        \"string ftp_systype(resource stream)\",\n        \"Returns the system type identifier\"\n    ],\n    \"ftruncate\": [\n        \"bool ftruncate(resource fp, int size)\",\n        \"Truncate file to 'size' length\"\n    ],\n    \"func_get_arg\": [\n        \"mixed func_get_arg(int arg_num)\",\n        \"Get the $arg_num'th argument that was passed to the function\"\n    ],\n    \"func_get_args\": [\n        \"array func_get_args()\",\n        \"Get an array of the arguments that were passed to the function\"\n    ],\n    \"func_num_args\": [\n        \"int func_num_args(void)\",\n        \"Get the number of arguments that were passed to the function\"\n    ],\n    \"function \": [\"\", \"\"],\n    \"foreach \": [\"\", \"\"],\n    \"function_exists\": [\n        \"bool function_exists(string function_name)\",\n        \"Checks if the function exists\"\n    ],\n    \"fwrite\": [\n        \"int fwrite(resource fp, string str [, int length])\",\n        \"Binary-safe file write\"\n    ],\n    \"gc_collect_cycles\": [\n        \"int gc_collect_cycles(void)\",\n        \"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"\n    ],\n    \"gc_disable\": [\n        \"void gc_disable(void)\",\n        \"Deactivates the circular reference collector\"\n    ],\n    \"gc_enable\": [\n        \"void gc_enable(void)\",\n        \"Activates the circular reference collector\"\n    ],\n    \"gc_enabled\": [\n        \"void gc_enabled(void)\",\n        \"Returns status of the circular reference collector\"\n    ],\n    \"gd_info\": [\n        \"array gd_info()\",\n        \"\"\n    ],\n    \"getKeywords\": [\n        \"static array getKeywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"\n    ],\n    \"get_browser\": [\n        \"mixed get_browser([string browser_name [, bool return_array]])\",\n        \"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"\n    ],\n    \"get_called_class\": [\n        \"string get_called_class()\",\n        \"Retrieves the \\\"Late Static Binding\\\" class name\"\n    ],\n    \"get_cfg_var\": [\n        \"mixed get_cfg_var(string option_name)\",\n        \"Get the value of a PHP configuration option\"\n    ],\n    \"get_class\": [\n        \"string get_class([object object])\",\n        \"Retrieves the class name\"\n    ],\n    \"get_class_methods\": [\n        \"array get_class_methods(mixed class)\",\n        \"Returns an array of method names for class or class instance.\"\n    ],\n    \"get_class_vars\": [\n        \"array get_class_vars(string class_name)\",\n        \"Returns an array of default properties of the class.\"\n    ],\n    \"get_current_user\": [\n        \"string get_current_user(void)\",\n        \"Get the name of the owner of the current PHP script\"\n    ],\n    \"get_declared_classes\": [\n        \"array get_declared_classes()\",\n        \"Returns an array of all declared classes.\"\n    ],\n    \"get_declared_interfaces\": [\n        \"array get_declared_interfaces()\",\n        \"Returns an array of all declared interfaces.\"\n    ],\n    \"get_defined_constants\": [\n        \"array get_defined_constants([bool categorize])\",\n        \"Return an array containing the names and values of all defined constants\"\n    ],\n    \"get_defined_functions\": [\n        \"array get_defined_functions(void)\",\n        \"Returns an array of all defined functions\"\n    ],\n    \"get_defined_vars\": [\n        \"array get_defined_vars(void)\",\n        \"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"\n    ],\n    \"get_display_language\": [\n        \"static string get_display_language($locale[, $in_locale = null])\",\n        \"* gets the language for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_name\": [\n        \"static string get_display_name($locale[, $in_locale = null])\",\n        \"* gets the name for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_region\": [\n        \"static string get_display_region($locale, $in_locale = null)\",\n        \"* gets the region for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_script\": [\n        \"static string get_display_script($locale, $in_locale = null)\",\n        \"* gets the script for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_extension_funcs\": [\n        \"array get_extension_funcs(string extension_name)\",\n        \"Returns an array with the names of functions belonging to the named extension\"\n    ],\n    \"get_headers\": [\n        \"array get_headers(string url[, int format])\",\n        \"fetches all the headers sent by the server in response to a HTTP request\"\n    ],\n    \"get_html_translation_table\": [\n        \"array get_html_translation_table([int table [, int quote_style]])\",\n        \"Returns the internal translation table used by htmlspecialchars and htmlentities\"\n    ],\n    \"get_include_path\": [\n        \"string get_include_path()\",\n        \"Get the current include_path configuration option\"\n    ],\n    \"get_included_files\": [\n        \"array get_included_files(void)\",\n        \"Returns an array with the file names that were include_once()'d\"\n    ],\n    \"get_loaded_extensions\": [\n        \"array get_loaded_extensions([bool zend_extensions])\",\n        \"Return an array containing names of loaded extensions\"\n    ],\n    \"get_magic_quotes_gpc\": [\n        \"int get_magic_quotes_gpc(void)\",\n        \"Get the current active configuration setting of magic_quotes_gpc\"\n    ],\n    \"get_magic_quotes_runtime\": [\n        \"int get_magic_quotes_runtime(void)\",\n        \"Get the current active configuration setting of magic_quotes_runtime\"\n    ],\n    \"get_meta_tags\": [\n        \"array get_meta_tags(string filename [, bool use_include_path])\",\n        \"Extracts all meta tag content attributes from a file and returns an array\"\n    ],\n    \"get_object_vars\": [\n        \"array get_object_vars(object obj)\",\n        \"Returns an array of object properties\"\n    ],\n    \"get_parent_class\": [\n        \"string get_parent_class([mixed object])\",\n        \"Retrieves the parent class name for object or class or current scope.\"\n    ],\n    \"get_resource_type\": [\n        \"string get_resource_type(resource res)\",\n        \"Get the resource type name for a given resource\"\n    ],\n    \"getallheaders\": [\n        \"array getallheaders(void)\",\n        \"\"\n    ],\n    \"getcwd\": [\n        \"mixed getcwd(void)\",\n        \"Gets the current directory\"\n    ],\n    \"getdate\": [\n        \"array getdate([int timestamp])\",\n        \"Get date/time information\"\n    ],\n    \"getenv\": [\n        \"string getenv(string varname)\",\n        \"Get the value of an environment variable\"\n    ],\n    \"gethostbyaddr\": [\n        \"string gethostbyaddr(string ip_address)\",\n        \"Get the Internet host name corresponding to a given IP address\"\n    ],\n    \"gethostbyname\": [\n        \"string gethostbyname(string hostname)\",\n        \"Get the IP address corresponding to a given Internet host name\"\n    ],\n    \"gethostbynamel\": [\n        \"array gethostbynamel(string hostname)\",\n        \"Return a list of IP addresses that a given hostname resolves to.\"\n    ],\n    \"gethostname\": [\n        \"string gethostname()\",\n        \"Get the host name of the current machine\"\n    ],\n    \"getimagesize\": [\n        \"array getimagesize(string imagefile [, array info])\",\n        \"Get the size of an image as 4-element array\"\n    ],\n    \"getlastmod\": [\n        \"int getlastmod(void)\",\n        \"Get time of last page modification\"\n    ],\n    \"getmygid\": [\n        \"int getmygid(void)\",\n        \"Get PHP script owner's GID\"\n    ],\n    \"getmyinode\": [\n        \"int getmyinode(void)\",\n        \"Get the inode of the current script being parsed\"\n    ],\n    \"getmypid\": [\n        \"int getmypid(void)\",\n        \"Get current process ID\"\n    ],\n    \"getmyuid\": [\n        \"int getmyuid(void)\",\n        \"Get PHP script owner's UID\"\n    ],\n    \"getopt\": [\n        \"array getopt(string options [, array longopts])\",\n        \"Get options from the command line argument list\"\n    ],\n    \"getprotobyname\": [\n        \"int getprotobyname(string name)\",\n        \"Returns protocol number associated with name as per /etc/protocols\"\n    ],\n    \"getprotobynumber\": [\n        \"string getprotobynumber(int proto)\",\n        \"Returns protocol name associated with protocol number proto\"\n    ],\n    \"getrandmax\": [\n        \"int getrandmax(void)\",\n        \"Returns the maximum value a random number can have\"\n    ],\n    \"getrusage\": [\n        \"array getrusage([int who])\",\n        \"Returns an array of usage statistics\"\n    ],\n    \"getservbyname\": [\n        \"int getservbyname(string service, string protocol)\",\n        \"Returns port associated with service. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"getservbyport\": [\n        \"string getservbyport(int port, string protocol)\",\n        \"Returns service name associated with port. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"gettext\": [\n        \"string gettext(string msgid)\",\n        \"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"\n    ],\n    \"gettimeofday\": [\n        \"array gettimeofday([bool get_as_float])\",\n        \"Returns the current time as array\"\n    ],\n    \"gettype\": [\n        \"string gettype(mixed var)\",\n        \"Returns the type of the variable\"\n    ],\n    \"glob\": [\n        \"array glob(string pattern [, int flags])\",\n        \"Find pathnames matching a pattern\"\n    ],\n    \"gmdate\": [\n        \"string gmdate(string format [, long timestamp])\",\n        \"Format a GMT date/time\"\n    ],\n    \"gmmktime\": [\n        \"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a GMT date\"\n    ],\n    \"gmp_abs\": [\n        \"resource gmp_abs(resource a)\",\n        \"Calculates absolute value\"\n    ],\n    \"gmp_add\": [\n        \"resource gmp_add(resource a, resource b)\",\n        \"Add a and b\"\n    ],\n    \"gmp_and\": [\n        \"resource gmp_and(resource a, resource b)\",\n        \"Calculates logical AND of a and b\"\n    ],\n    \"gmp_clrbit\": [\n        \"void gmp_clrbit(resource &a, int index)\",\n        \"Clears bit in a\"\n    ],\n    \"gmp_cmp\": [\n        \"int gmp_cmp(resource a, resource b)\",\n        \"Compares two numbers\"\n    ],\n    \"gmp_com\": [\n        \"resource gmp_com(resource a)\",\n        \"Calculates one's complement of a\"\n    ],\n    \"gmp_div_q\": [\n        \"resource gmp_div_q(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient only\"\n    ],\n    \"gmp_div_qr\": [\n        \"array gmp_div_qr(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient and reminder\"\n    ],\n    \"gmp_div_r\": [\n        \"resource gmp_div_r(resource a, resource b [, int round])\",\n        \"Divide a by b, returns reminder only\"\n    ],\n    \"gmp_divexact\": [\n        \"resource gmp_divexact(resource a, resource b)\",\n        \"Divide a by b using exact division algorithm\"\n    ],\n    \"gmp_fact\": [\n        \"resource gmp_fact(int a)\",\n        \"Calculates factorial function\"\n    ],\n    \"gmp_gcd\": [\n        \"resource gmp_gcd(resource a, resource b)\",\n        \"Computes greatest common denominator (gcd) of a and b\"\n    ],\n    \"gmp_gcdext\": [\n        \"array gmp_gcdext(resource a, resource b)\",\n        \"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"\n    ],\n    \"gmp_hamdist\": [\n        \"int gmp_hamdist(resource a, resource b)\",\n        \"Calculates hamming distance between a and b\"\n    ],\n    \"gmp_init\": [\n        \"resource gmp_init(mixed number [, int base])\",\n        \"Initializes GMP number\"\n    ],\n    \"gmp_intval\": [\n        \"int gmp_intval(resource gmpnumber)\",\n        \"Gets signed long value of GMP number\"\n    ],\n    \"gmp_invert\": [\n        \"resource gmp_invert(resource a, resource b)\",\n        \"Computes the inverse of a modulo b\"\n    ],\n    \"gmp_jacobi\": [\n        \"int gmp_jacobi(resource a, resource b)\",\n        \"Computes Jacobi symbol\"\n    ],\n    \"gmp_legendre\": [\n        \"int gmp_legendre(resource a, resource b)\",\n        \"Computes Legendre symbol\"\n    ],\n    \"gmp_mod\": [\n        \"resource gmp_mod(resource a, resource b)\",\n        \"Computes a modulo b\"\n    ],\n    \"gmp_mul\": [\n        \"resource gmp_mul(resource a, resource b)\",\n        \"Multiply a and b\"\n    ],\n    \"gmp_neg\": [\n        \"resource gmp_neg(resource a)\",\n        \"Negates a number\"\n    ],\n    \"gmp_nextprime\": [\n        \"resource gmp_nextprime(resource a)\",\n        \"Finds next prime of a\"\n    ],\n    \"gmp_or\": [\n        \"resource gmp_or(resource a, resource b)\",\n        \"Calculates logical OR of a and b\"\n    ],\n    \"gmp_perfect_square\": [\n        \"bool gmp_perfect_square(resource a)\",\n        \"Checks if a is an exact square\"\n    ],\n    \"gmp_popcount\": [\n        \"int gmp_popcount(resource a)\",\n        \"Calculates the population count of a\"\n    ],\n    \"gmp_pow\": [\n        \"resource gmp_pow(resource base, int exp)\",\n        \"Raise base to power exp\"\n    ],\n    \"gmp_powm\": [\n        \"resource gmp_powm(resource base, resource exp, resource mod)\",\n        \"Raise base to power exp and take result modulo mod\"\n    ],\n    \"gmp_prob_prime\": [\n        \"int gmp_prob_prime(resource a[, int reps])\",\n        \"Checks if a is \\\"probably prime\\\"\"\n    ],\n    \"gmp_random\": [\n        \"resource gmp_random([int limiter])\",\n        \"Gets random number\"\n    ],\n    \"gmp_scan0\": [\n        \"int gmp_scan0(resource a, int start)\",\n        \"Finds first zero bit\"\n    ],\n    \"gmp_scan1\": [\n        \"int gmp_scan1(resource a, int start)\",\n        \"Finds first non-zero bit\"\n    ],\n    \"gmp_setbit\": [\n        \"void gmp_setbit(resource &a, int index[, bool set_clear])\",\n        \"Sets or clear bit in a\"\n    ],\n    \"gmp_sign\": [\n        \"int gmp_sign(resource a)\",\n        \"Gets the sign of the number\"\n    ],\n    \"gmp_sqrt\": [\n        \"resource gmp_sqrt(resource a)\",\n        \"Takes integer part of square root of a\"\n    ],\n    \"gmp_sqrtrem\": [\n        \"array gmp_sqrtrem(resource a)\",\n        \"Square root with remainder\"\n    ],\n    \"gmp_strval\": [\n        \"string gmp_strval(resource gmpnumber [, int base])\",\n        \"Gets string representation of GMP number\"\n    ],\n    \"gmp_sub\": [\n        \"resource gmp_sub(resource a, resource b)\",\n        \"Subtract b from a\"\n    ],\n    \"gmp_testbit\": [\n        \"bool gmp_testbit(resource a, int index)\",\n        \"Tests if bit is set in a\"\n    ],\n    \"gmp_xor\": [\n        \"resource gmp_xor(resource a, resource b)\",\n        \"Calculates logical exclusive OR of a and b\"\n    ],\n    \"gmstrftime\": [\n        \"string gmstrftime(string format [, int timestamp])\",\n        \"Format a GMT/UCT time/date according to locale settings\"\n    ],\n    \"grapheme_extract\": [\n        \"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\n        \"Function to extract a sequence of default grapheme clusters\"\n    ],\n    \"grapheme_stripos\": [\n        \"int grapheme_stripos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another, ignoring case differences\"\n    ],\n    \"grapheme_stristr\": [\n        \"string grapheme_stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_strlen\": [\n        \"int grapheme_strlen(string str)\",\n        \"Get number of graphemes in a string\"\n    ],\n    \"grapheme_strpos\": [\n        \"int grapheme_strpos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"grapheme_strripos\": [\n        \"int grapheme_strripos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another, ignoring case\"\n    ],\n    \"grapheme_strrpos\": [\n        \"int grapheme_strrpos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"grapheme_strstr\": [\n        \"string grapheme_strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_substr\": [\n        \"string grapheme_substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"gregoriantojd\": [\n        \"int gregoriantojd(int month, int day, int year)\",\n        \"Converts a gregorian calendar date to julian day count\"\n    ],\n    \"gzcompress\": [\n        \"string gzcompress(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzdeflate\": [\n        \"string gzdeflate(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzencode\": [\n        \"string gzencode(string data [, int level [, int encoding_mode]])\",\n        \"GZ encode a string\"\n    ],\n    \"gzfile\": [\n        \"array gzfile(string filename [, int use_include_path])\",\n        \"Read und uncompress entire .gz-file into an array\"\n    ],\n    \"gzinflate\": [\n        \"string gzinflate(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"gzopen\": [\n        \"resource gzopen(string filename, string mode [, int use_include_path])\",\n        \"Open a .gz-file and return a .gz-file pointer\"\n    ],\n    \"gzuncompress\": [\n        \"string gzuncompress(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"hash\": [\n        \"string hash(string algo, string data[, bool raw_output = false])\",\n        \"Generate a hash of a given input string Returns lowercase hexits by default\"\n    ],\n    \"hash_algos\": [\n        \"array hash_algos(void)\",\n        \"Return a list of registered hashing algorithms\"\n    ],\n    \"hash_copy\": [\n        \"resource hash_copy(resource context)\",\n        \"Copy hash resource\"\n    ],\n    \"hash_file\": [\n        \"string hash_file(string algo, string filename[, bool raw_output = false])\",\n        \"Generate a hash of a given file Returns lowercase hexits by default\"\n    ],\n    \"hash_final\": [\n        \"string hash_final(resource context[, bool raw_output=false])\",\n        \"Output resulting digest\"\n    ],\n    \"hash_hmac\": [\n        \"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_hmac_file\": [\n        \"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_init\": [\n        \"resource hash_init(string algo[, int options, string key])\",\n        \"Initialize a hashing context\"\n    ],\n    \"hash_update\": [\n        \"bool hash_update(resource context, string data)\",\n        \"Pump data into the hashing algorithm\"\n    ],\n    \"hash_update_file\": [\n        \"bool hash_update_file(resource context, string filename[, resource context])\",\n        \"Pump data into the hashing algorithm from a file\"\n    ],\n    \"hash_update_stream\": [\n        \"int hash_update_stream(resource context, resource handle[, integer length])\",\n        \"Pump data into the hashing algorithm from an open stream\"\n    ],\n    \"header\": [\n        \"void header(string header [, bool replace, [int http_response_code]])\",\n        \"Sends a raw HTTP header\"\n    ],\n    \"header_remove\": [\n        \"void header_remove([string name])\",\n        \"Removes an HTTP header previously set using header()\"\n    ],\n    \"headers_list\": [\n        \"array headers_list(void)\",\n        \"Return list of headers to be sent / already sent\"\n    ],\n    \"headers_sent\": [\n        \"bool headers_sent([string &$file [, int &$line]])\",\n        \"Returns true if headers have already been sent, false otherwise\"\n    ],\n    \"hebrev\": [\n        \"string hebrev(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text\"\n    ],\n    \"hebrevc\": [\n        \"string hebrevc(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text with newline conversion\"\n    ],\n    \"hexdec\": [\n        \"int hexdec(string hexadecimal_number)\",\n        \"Returns the decimal equivalent of the hexadecimal number\"\n    ],\n    \"highlight_file\": [\n        \"bool highlight_file(string file_name [, bool return] )\",\n        \"Syntax highlight a source file\"\n    ],\n    \"highlight_string\": [\n        \"bool highlight_string(string string [, bool return] )\",\n        \"Syntax highlight a string or optionally return it\"\n    ],\n    \"html_entity_decode\": [\n        \"string html_entity_decode(string string [, int quote_style][, string charset])\",\n        \"Convert all HTML entities to their applicable characters\"\n    ],\n    \"htmlentities\": [\n        \"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert all applicable characters to HTML entities\"\n    ],\n    \"htmlspecialchars\": [\n        \"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert special characters to HTML entities\"\n    ],\n    \"htmlspecialchars_decode\": [\n        \"string htmlspecialchars_decode(string string [, int quote_style])\",\n        \"Convert special HTML entities back to characters\"\n    ],\n    \"http_build_query\": [\n        \"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\n        \"Generates a form-encoded query string from an associative array or object.\"\n    ],\n    \"hypot\": [\n        \"float hypot(float num1, float num2)\",\n        \"Returns sqrt(num1*num1 + num2*num2)\"\n    ],\n    \"ibase_add_user\": [\n        \"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Add a user to security database\"\n    ],\n    \"ibase_affected_rows\": [\n        \"int ibase_affected_rows( [ resource link_identifier ] )\",\n        \"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"\n    ],\n    \"ibase_backup\": [\n        \"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\n        \"Initiates a backup task in the service manager and returns immediately\"\n    ],\n    \"ibase_blob_add\": [\n        \"bool ibase_blob_add(resource blob_handle, string data)\",\n        \"Add data into created blob\"\n    ],\n    \"ibase_blob_cancel\": [\n        \"bool ibase_blob_cancel(resource blob_handle)\",\n        \"Cancel creating blob\"\n    ],\n    \"ibase_blob_close\": [\n        \"string ibase_blob_close(resource blob_handle)\",\n        \"Close blob\"\n    ],\n    \"ibase_blob_create\": [\n        \"resource ibase_blob_create([resource link_identifier])\",\n        \"Create blob for adding data\"\n    ],\n    \"ibase_blob_echo\": [\n        \"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\n        \"Output blob contents to browser\"\n    ],\n    \"ibase_blob_get\": [\n        \"string ibase_blob_get(resource blob_handle, int len)\",\n        \"Get len bytes data from open blob\"\n    ],\n    \"ibase_blob_import\": [\n        \"string ibase_blob_import([ resource link_identifier, ] resource file)\",\n        \"Create blob, copy file in it, and close it\"\n    ],\n    \"ibase_blob_info\": [\n        \"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\n        \"Return blob length and other useful info\"\n    ],\n    \"ibase_blob_open\": [\n        \"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\n        \"Open blob for retrieving data parts\"\n    ],\n    \"ibase_close\": [\n        \"bool ibase_close([resource link_identifier])\",\n        \"Close an InterBase connection\"\n    ],\n    \"ibase_commit\": [\n        \"bool ibase_commit( resource link_identifier )\",\n        \"Commit transaction\"\n    ],\n    \"ibase_commit_ret\": [\n        \"bool ibase_commit_ret( resource link_identifier )\",\n        \"Commit transaction and retain the transaction context\"\n    ],\n    \"ibase_connect\": [\n        \"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a connection to an InterBase database\"\n    ],\n    \"ibase_db_info\": [\n        \"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\n        \"Request statistics about a database\"\n    ],\n    \"ibase_delete_user\": [\n        \"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Delete a user from security database\"\n    ],\n    \"ibase_drop_db\": [\n        \"bool ibase_drop_db([resource link_identifier])\",\n        \"Drop an InterBase database\"\n    ],\n    \"ibase_errcode\": [\n        \"int ibase_errcode(void)\",\n        \"Return error code\"\n    ],\n    \"ibase_errmsg\": [\n        \"string ibase_errmsg(void)\",\n        \"Return error message\"\n    ],\n    \"ibase_execute\": [\n        \"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a previously prepared query\"\n    ],\n    \"ibase_fetch_assoc\": [\n        \"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_fetch_object\": [\n        \"object ibase_fetch_object(resource result [, int fetch_flags])\",\n        \"Fetch a object from the results of a query\"\n    ],\n    \"ibase_fetch_row\": [\n        \"array ibase_fetch_row(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_field_info\": [\n        \"array ibase_field_info(resource query_result, int field_number)\",\n        \"Get information about a field\"\n    ],\n    \"ibase_free_event_handler\": [\n        \"bool ibase_free_event_handler(resource event)\",\n        \"Frees the event handler set by ibase_set_event_handler()\"\n    ],\n    \"ibase_free_query\": [\n        \"bool ibase_free_query(resource query)\",\n        \"Free memory used by a query\"\n    ],\n    \"ibase_free_result\": [\n        \"bool ibase_free_result(resource result)\",\n        \"Free the memory used by a result\"\n    ],\n    \"ibase_gen_id\": [\n        \"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\n        \"Increments the named generator and returns its new value\"\n    ],\n    \"ibase_maintain_db\": [\n        \"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\n        \"Execute a maintenance command on the database server\"\n    ],\n    \"ibase_modify_user\": [\n        \"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Modify a user in security database\"\n    ],\n    \"ibase_name_result\": [\n        \"bool ibase_name_result(resource result, string name)\",\n        \"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"\n    ],\n    \"ibase_num_fields\": [\n        \"int ibase_num_fields(resource query_result)\",\n        \"Get the number of fields in result\"\n    ],\n    \"ibase_num_params\": [\n        \"int ibase_num_params(resource query)\",\n        \"Get the number of params in a prepared query\"\n    ],\n    \"ibase_num_rows\": [\n        \"int ibase_num_rows( resource result_identifier )\",\n        \"Return the number of rows that are available in a result\"\n    ],\n    \"ibase_param_info\": [\n        \"array ibase_param_info(resource query, int field_number)\",\n        \"Get information about a parameter\"\n    ],\n    \"ibase_pconnect\": [\n        \"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a persistent connection to an InterBase database\"\n    ],\n    \"ibase_prepare\": [\n        \"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\n        \"Prepare a query for later execution\"\n    ],\n    \"ibase_query\": [\n        \"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a query\"\n    ],\n    \"ibase_restore\": [\n        \"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\n        \"Initiates a restore task in the service manager and returns immediately\"\n    ],\n    \"ibase_rollback\": [\n        \"bool ibase_rollback( resource link_identifier )\",\n        \"Rollback transaction\"\n    ],\n    \"ibase_rollback_ret\": [\n        \"bool ibase_rollback_ret( resource link_identifier )\",\n        \"Rollback transaction and retain the transaction context\"\n    ],\n    \"ibase_server_info\": [\n        \"string ibase_server_info(resource service_handle, int action)\",\n        \"Request information about a database server\"\n    ],\n    \"ibase_service_attach\": [\n        \"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\n        \"Connect to the service manager\"\n    ],\n    \"ibase_service_detach\": [\n        \"bool ibase_service_detach(resource service_handle)\",\n        \"Disconnect from the service manager\"\n    ],\n    \"ibase_set_event_handler\": [\n        \"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\n        \"Register the callback for handling each of the named events\"\n    ],\n    \"ibase_trans\": [\n        \"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\n        \"Start a transaction over one or several databases\"\n    ],\n    \"ibase_wait_event\": [\n        \"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\n        \"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"\n    ],\n    \"iconv\": [\n        \"string iconv(string in_charset, string out_charset, string str)\",\n        \"Returns str converted to the out_charset character set\"\n    ],\n    \"iconv_get_encoding\": [\n        \"mixed iconv_get_encoding([string type])\",\n        \"Get internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_mime_decode\": [\n        \"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\n        \"Decodes a mime header field\"\n    ],\n    \"iconv_mime_decode_headers\": [\n        \"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\n        \"Decodes multiple mime header fields\"\n    ],\n    \"iconv_mime_encode\": [\n        \"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\n        \"Composes a mime header field with field_name and field_value in a specified scheme\"\n    ],\n    \"iconv_set_encoding\": [\n        \"bool iconv_set_encoding(string type, string charset)\",\n        \"Sets internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_strlen\": [\n        \"int iconv_strlen(string str [, string charset])\",\n        \"Returns the character count of str\"\n    ],\n    \"iconv_strpos\": [\n        \"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\n        \"Finds position of first occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_strrpos\": [\n        \"int iconv_strrpos(string haystack, string needle [, string charset])\",\n        \"Finds position of last occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_substr\": [\n        \"string iconv_substr(string str, int offset, [int length, string charset])\",\n        \"Returns specified part of a string\"\n    ],\n    \"idate\": [\n        \"int idate(string format [, int timestamp])\",\n        \"Format a local time/date as integer\"\n    ],\n    \"idn_to_ascii\": [\n        \"int idn_to_ascii(string domain[, int options])\",\n        \"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"\n    ],\n    \"idn_to_utf8\": [\n        \"int idn_to_utf8(string domain[, int options])\",\n        \"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"\n    ],\n    \"ignore_user_abort\": [\n        \"int ignore_user_abort([string value])\",\n        \"Set whether we want to ignore a user abort event or not\"\n    ],\n    \"image2wbmp\": [\n        \"bool image2wbmp(resource im [, string filename [, int threshold]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"image_type_to_extension\": [\n        \"string image_type_to_extension(int imagetype [, bool include_dot])\",\n        \"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"image_type_to_mime_type\": [\n        \"string image_type_to_mime_type(int imagetype)\",\n        \"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"imagealphablending\": [\n        \"bool imagealphablending(resource im, bool on)\",\n        \"Turn alpha blending mode on or off for the given image\"\n    ],\n    \"imageantialias\": [\n        \"bool imageantialias(resource im, bool on)\",\n        \"Should antialiased functions used or not\"\n    ],\n    \"imagearc\": [\n        \"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\n        \"Draw a partial ellipse\"\n    ],\n    \"imagechar\": [\n        \"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character\"\n    ],\n    \"imagecharup\": [\n        \"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagecolorallocate\": [\n        \"int imagecolorallocate(resource im, int red, int green, int blue)\",\n        \"Allocate a color for an image\"\n    ],\n    \"imagecolorallocatealpha\": [\n        \"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Allocate a color with an alpha level.  Works for true color and palette based images\"\n    ],\n    \"imagecolorat\": [\n        \"int imagecolorat(resource im, int x, int y)\",\n        \"Get the index of the color of a pixel\"\n    ],\n    \"imagecolorclosest\": [\n        \"int imagecolorclosest(resource im, int red, int green, int blue)\",\n        \"Get the index of the closest color to the specified color\"\n    ],\n    \"imagecolorclosestalpha\": [\n        \"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find the closest matching colour with alpha transparency\"\n    ],\n    \"imagecolorclosesthwb\": [\n        \"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\n        \"Get the index of the color which has the hue, white and blackness nearest to the given color\"\n    ],\n    \"imagecolordeallocate\": [\n        \"bool imagecolordeallocate(resource im, int index)\",\n        \"De-allocate a color for an image\"\n    ],\n    \"imagecolorexact\": [\n        \"int imagecolorexact(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color\"\n    ],\n    \"imagecolorexactalpha\": [\n        \"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find exact match for colour with transparency\"\n    ],\n    \"imagecolormatch\": [\n        \"bool imagecolormatch(resource im1, resource im2)\",\n        \"Makes the colors of the palette version of an image more closely match the true color version\"\n    ],\n    \"imagecolorresolve\": [\n        \"int imagecolorresolve(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color or its closest possible alternative\"\n    ],\n    \"imagecolorresolvealpha\": [\n        \"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"\n    ],\n    \"imagecolorset\": [\n        \"void imagecolorset(resource im, int col, int red, int green, int blue)\",\n        \"Set the color for the specified palette index\"\n    ],\n    \"imagecolorsforindex\": [\n        \"array imagecolorsforindex(resource im, int col)\",\n        \"Get the colors for an index\"\n    ],\n    \"imagecolorstotal\": [\n        \"int imagecolorstotal(resource im)\",\n        \"Find out the number of colors in an image's palette\"\n    ],\n    \"imagecolortransparent\": [\n        \"int imagecolortransparent(resource im [, int col])\",\n        \"Define a color as transparent\"\n    ],\n    \"imageconvolution\": [\n        \"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\n        \"Apply a 3x3 convolution matrix, using coefficient div and offset\"\n    ],\n    \"imagecopy\": [\n        \"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\n        \"Copy part of an image\"\n    ],\n    \"imagecopymerge\": [\n        \"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopymergegray\": [\n        \"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopyresampled\": [\n        \"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image using resampling to help ensure clarity\"\n    ],\n    \"imagecopyresized\": [\n        \"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image\"\n    ],\n    \"imagecreate\": [\n        \"resource imagecreate(int x_size, int y_size)\",\n        \"Create a new image\"\n    ],\n    \"imagecreatefromgd\": [\n        \"resource imagecreatefromgd(string filename)\",\n        \"Create a new image from GD file or URL\"\n    ],\n    \"imagecreatefromgd2\": [\n        \"resource imagecreatefromgd2(string filename)\",\n        \"Create a new image from GD2 file or URL\"\n    ],\n    \"imagecreatefromgd2part\": [\n        \"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\n        \"Create a new image from a given part of GD2 file or URL\"\n    ],\n    \"imagecreatefromgif\": [\n        \"resource imagecreatefromgif(string filename)\",\n        \"Create a new image from GIF file or URL\"\n    ],\n    \"imagecreatefromjpeg\": [\n        \"resource imagecreatefromjpeg(string filename)\",\n        \"Create a new image from JPEG file or URL\"\n    ],\n    \"imagecreatefrompng\": [\n        \"resource imagecreatefrompng(string filename)\",\n        \"Create a new image from PNG file or URL\"\n    ],\n    \"imagecreatefromstring\": [\n        \"resource imagecreatefromstring(string image)\",\n        \"Create a new image from the image stream in the string\"\n    ],\n    \"imagecreatefromwbmp\": [\n        \"resource imagecreatefromwbmp(string filename)\",\n        \"Create a new image from WBMP file or URL\"\n    ],\n    \"imagecreatefromxbm\": [\n        \"resource imagecreatefromxbm(string filename)\",\n        \"Create a new image from XBM file or URL\"\n    ],\n    \"imagecreatefromxpm\": [\n        \"resource imagecreatefromxpm(string filename)\",\n        \"Create a new image from XPM file or URL\"\n    ],\n    \"imagecreatetruecolor\": [\n        \"resource imagecreatetruecolor(int x_size, int y_size)\",\n        \"Create a new true color image\"\n    ],\n    \"imagedashedline\": [\n        \"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a dashed line\"\n    ],\n    \"imagedestroy\": [\n        \"bool imagedestroy(resource im)\",\n        \"Destroy an image\"\n    ],\n    \"imageellipse\": [\n        \"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefill\": [\n        \"bool imagefill(resource im, int x, int y, int col)\",\n        \"Flood fill\"\n    ],\n    \"imagefilledarc\": [\n        \"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\n        \"Draw a filled partial ellipse\"\n    ],\n    \"imagefilledellipse\": [\n        \"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefilledpolygon\": [\n        \"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a filled polygon\"\n    ],\n    \"imagefilledrectangle\": [\n        \"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a filled rectangle\"\n    ],\n    \"imagefilltoborder\": [\n        \"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\n        \"Flood fill to specific color\"\n    ],\n    \"imagefilter\": [\n        \"bool imagefilter(resource src_im, int filtertype, [args] )\",\n        \"Applies Filter an image using a custom angle\"\n    ],\n    \"imagefontheight\": [\n        \"int imagefontheight(int font)\",\n        \"Get font height\"\n    ],\n    \"imagefontwidth\": [\n        \"int imagefontwidth(int font)\",\n        \"Get font width\"\n    ],\n    \"imageftbbox\": [\n        \"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\n        \"Give the bounding box of a text using fonts via freetype2\"\n    ],\n    \"imagefttext\": [\n        \"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\n        \"Write text to the image using fonts via freetype2\"\n    ],\n    \"imagegammacorrect\": [\n        \"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\n        \"Apply a gamma correction to a GD image\"\n    ],\n    \"imagegd\": [\n        \"bool imagegd(resource im [, string filename])\",\n        \"Output GD image to browser or file\"\n    ],\n    \"imagegd2\": [\n        \"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\n        \"Output GD2 image to browser or file\"\n    ],\n    \"imagegif\": [\n        \"bool imagegif(resource im [, string filename])\",\n        \"Output GIF image to browser or file\"\n    ],\n    \"imagegrabscreen\": [\n        \"resource imagegrabscreen()\",\n        \"Grab a screenshot\"\n    ],\n    \"imagegrabwindow\": [\n        \"resource imagegrabwindow(int window_handle [, int client_area])\",\n        \"Grab a window or its client area using a windows handle (HWND property in COM instance)\"\n    ],\n    \"imageinterlace\": [\n        \"int imageinterlace(resource im [, int interlace])\",\n        \"Enable or disable interlace\"\n    ],\n    \"imageistruecolor\": [\n        \"bool imageistruecolor(resource im)\",\n        \"return true if the image uses truecolor\"\n    ],\n    \"imagejpeg\": [\n        \"bool imagejpeg(resource im [, string filename [, int quality]])\",\n        \"Output JPEG image to browser or file\"\n    ],\n    \"imagelayereffect\": [\n        \"bool imagelayereffect(resource im, int effect)\",\n        \"Set the alpha blending flag to use the bundled libgd layering effects\"\n    ],\n    \"imageline\": [\n        \"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a line\"\n    ],\n    \"imageloadfont\": [\n        \"int imageloadfont(string filename)\",\n        \"Load a new font\"\n    ],\n    \"imagepalettecopy\": [\n        \"void imagepalettecopy(resource dst, resource src)\",\n        \"Copy the palette from the src image onto the dst image\"\n    ],\n    \"imagepng\": [\n        \"bool imagepng(resource im [, string filename])\",\n        \"Output PNG image to browser or file\"\n    ],\n    \"imagepolygon\": [\n        \"bool imagepolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a polygon\"\n    ],\n    \"imagepsbbox\": [\n        \"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\n        \"Return the bounding box needed by a string if rasterized\"\n    ],\n    \"imagepscopyfont\": [\n        \"int imagepscopyfont(int font_index)\",\n        \"Make a copy of a font for purposes like extending or reenconding\"\n    ],\n    \"imagepsencodefont\": [\n        \"bool imagepsencodefont(resource font_index, string filename)\",\n        \"To change a fonts character encoding vector\"\n    ],\n    \"imagepsextendfont\": [\n        \"bool imagepsextendfont(resource font_index, float extend)\",\n        \"Extend or or condense (if extend < 1) a font\"\n    ],\n    \"imagepsfreefont\": [\n        \"bool imagepsfreefont(resource font_index)\",\n        \"Free memory used by a font\"\n    ],\n    \"imagepsloadfont\": [\n        \"resource imagepsloadfont(string pathname)\",\n        \"Load a new font from specified file\"\n    ],\n    \"imagepsslantfont\": [\n        \"bool imagepsslantfont(resource font_index, float slant)\",\n        \"Slant a font\"\n    ],\n    \"imagepstext\": [\n        \"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\n        \"Rasterize a string over an image\"\n    ],\n    \"imagerectangle\": [\n        \"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a rectangle\"\n    ],\n    \"imagerotate\": [\n        \"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\n        \"Rotate an image using a custom angle\"\n    ],\n    \"imagesavealpha\": [\n        \"bool imagesavealpha(resource im, bool on)\",\n        \"Include alpha channel to a saved image\"\n    ],\n    \"imagesetbrush\": [\n        \"bool imagesetbrush(resource image, resource brush)\",\n        \"Set the brush image to $brush when filling $image with the \\\"IMG_COLOR_BRUSHED\\\" color\"\n    ],\n    \"imagesetpixel\": [\n        \"bool imagesetpixel(resource im, int x, int y, int col)\",\n        \"Set a single pixel\"\n    ],\n    \"imagesetstyle\": [\n        \"bool imagesetstyle(resource im, array styles)\",\n        \"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"\n    ],\n    \"imagesetthickness\": [\n        \"bool imagesetthickness(resource im, int thickness)\",\n        \"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"\n    ],\n    \"imagesettile\": [\n        \"bool imagesettile(resource image, resource tile)\",\n        \"Set the tile image to $tile when filling $image with the \\\"IMG_COLOR_TILED\\\" color\"\n    ],\n    \"imagestring\": [\n        \"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string horizontally\"\n    ],\n    \"imagestringup\": [\n        \"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string vertically - rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagesx\": [\n        \"int imagesx(resource im)\",\n        \"Get image width\"\n    ],\n    \"imagesy\": [\n        \"int imagesy(resource im)\",\n        \"Get image height\"\n    ],\n    \"imagetruecolortopalette\": [\n        \"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\n        \"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"\n    ],\n    \"imagettfbbox\": [\n        \"array imagettfbbox(float size, float angle, string font_file, string text)\",\n        \"Give the bounding box of a text using TrueType fonts\"\n    ],\n    \"imagettftext\": [\n        \"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\n        \"Write text to the image using a TrueType font\"\n    ],\n    \"imagetypes\": [\n        \"int imagetypes(void)\",\n        \"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"\n    ],\n    \"imagewbmp\": [\n        \"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"imagexbm\": [\n        \"int imagexbm(int im, string filename [, int foreground])\",\n        \"Output XBM image to browser or file\"\n    ],\n    \"imap_8bit\": [\n        \"string imap_8bit(string text)\",\n        \"Convert an 8-bit string to a quoted-printable string\"\n    ],\n    \"imap_alerts\": [\n        \"array imap_alerts(void)\",\n        \"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"\n    ],\n    \"imap_append\": [\n        \"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\n        \"Append a new message to a specified mailbox\"\n    ],\n    \"imap_base64\": [\n        \"string imap_base64(string text)\",\n        \"Decode BASE64 encoded text\"\n    ],\n    \"imap_binary\": [\n        \"string imap_binary(string text)\",\n        \"Convert an 8bit string to a base64 string\"\n    ],\n    \"imap_body\": [\n        \"string imap_body(resource stream_id, int msg_no [, int options])\",\n        \"Read the message body\"\n    ],\n    \"imap_bodystruct\": [\n        \"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\n        \"Read the structure of a specified body section of a specific message\"\n    ],\n    \"imap_check\": [\n        \"object imap_check(resource stream_id)\",\n        \"Get mailbox properties\"\n    ],\n    \"imap_clearflag_full\": [\n        \"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Clears flags on messages\"\n    ],\n    \"imap_close\": [\n        \"bool imap_close(resource stream_id [, int options])\",\n        \"Close an IMAP stream\"\n    ],\n    \"imap_createmailbox\": [\n        \"bool imap_createmailbox(resource stream_id, string mailbox)\",\n        \"Create a new mailbox\"\n    ],\n    \"imap_delete\": [\n        \"bool imap_delete(resource stream_id, int msg_no [, int options])\",\n        \"Mark a message for deletion\"\n    ],\n    \"imap_deletemailbox\": [\n        \"bool imap_deletemailbox(resource stream_id, string mailbox)\",\n        \"Delete a mailbox\"\n    ],\n    \"imap_errors\": [\n        \"array imap_errors(void)\",\n        \"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"\n    ],\n    \"imap_expunge\": [\n        \"bool imap_expunge(resource stream_id)\",\n        \"Permanently delete all messages marked for deletion\"\n    ],\n    \"imap_fetch_overview\": [\n        \"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\n        \"Read an overview of the information in the headers of the given message sequence\"\n    ],\n    \"imap_fetchbody\": [\n        \"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\n        \"Get a specific body section\"\n    ],\n    \"imap_fetchheader\": [\n        \"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\n        \"Get the full unfiltered header for a message\"\n    ],\n    \"imap_fetchstructure\": [\n        \"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\n        \"Read the full structure of a message\"\n    ],\n    \"imap_gc\": [\n        \"bool imap_gc(resource stream_id, int flags)\",\n        \"This function garbage collects (purges) the cache of entries of a specific type.\"\n    ],\n    \"imap_get_quota\": [\n        \"array imap_get_quota(resource stream_id, string qroot)\",\n        \"Returns the quota set to the mailbox account qroot\"\n    ],\n    \"imap_get_quotaroot\": [\n        \"array imap_get_quotaroot(resource stream_id, string mbox)\",\n        \"Returns the quota set to the mailbox account mbox\"\n    ],\n    \"imap_getacl\": [\n        \"array imap_getacl(resource stream_id, string mailbox)\",\n        \"Gets the ACL for a given mailbox\"\n    ],\n    \"imap_getmailboxes\": [\n        \"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\n        \"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"\n    ],\n    \"imap_getsubscribed\": [\n        \"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"\n    ],\n    \"imap_headerinfo\": [\n        \"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\n        \"Read the headers of the message\"\n    ],\n    \"imap_headers\": [\n        \"array imap_headers(resource stream_id)\",\n        \"Returns headers for all messages in a mailbox\"\n    ],\n    \"imap_last_error\": [\n        \"string imap_last_error(void)\",\n        \"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"\n    ],\n    \"imap_list\": [\n        \"array imap_list(resource stream_id, string ref, string pattern)\",\n        \"Read the list of mailboxes\"\n    ],\n    \"imap_listscan\": [\n        \"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\n        \"Read list of mailboxes containing a certain string\"\n    ],\n    \"imap_lsub\": [\n        \"array imap_lsub(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes\"\n    ],\n    \"imap_mail\": [\n        \"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\n        \"Send an email message\"\n    ],\n    \"imap_mail_compose\": [\n        \"string imap_mail_compose(array envelope, array body)\",\n        \"Create a MIME message based on given envelope and body sections\"\n    ],\n    \"imap_mail_copy\": [\n        \"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\n        \"Copy specified message to a mailbox\"\n    ],\n    \"imap_mail_move\": [\n        \"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\n        \"Move specified message to a mailbox\"\n    ],\n    \"imap_mailboxmsginfo\": [\n        \"object imap_mailboxmsginfo(resource stream_id)\",\n        \"Returns info about the current mailbox\"\n    ],\n    \"imap_mime_header_decode\": [\n        \"array imap_mime_header_decode(string str)\",\n        \"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"\n    ],\n    \"imap_msgno\": [\n        \"int imap_msgno(resource stream_id, int unique_msg_id)\",\n        \"Get the sequence number associated with a UID\"\n    ],\n    \"imap_mutf7_to_utf8\": [\n        \"string imap_mutf7_to_utf8(string in)\",\n        \"Decode a modified UTF-7 string to UTF-8\"\n    ],\n    \"imap_num_msg\": [\n        \"int imap_num_msg(resource stream_id)\",\n        \"Gives the number of messages in the current mailbox\"\n    ],\n    \"imap_num_recent\": [\n        \"int imap_num_recent(resource stream_id)\",\n        \"Gives the number of recent messages in current mailbox\"\n    ],\n    \"imap_open\": [\n        \"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\n        \"Open an IMAP stream to a mailbox\"\n    ],\n    \"imap_ping\": [\n        \"bool imap_ping(resource stream_id)\",\n        \"Check if the IMAP stream is still active\"\n    ],\n    \"imap_qprint\": [\n        \"string imap_qprint(string text)\",\n        \"Convert a quoted-printable string to an 8-bit string\"\n    ],\n    \"imap_renamemailbox\": [\n        \"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\n        \"Rename a mailbox\"\n    ],\n    \"imap_reopen\": [\n        \"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\n        \"Reopen an IMAP stream to a new mailbox\"\n    ],\n    \"imap_rfc822_parse_adrlist\": [\n        \"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\n        \"Parses an address string\"\n    ],\n    \"imap_rfc822_parse_headers\": [\n        \"object imap_rfc822_parse_headers(string headers [, string default_host])\",\n        \"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"\n    ],\n    \"imap_rfc822_write_address\": [\n        \"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\n        \"Returns a properly formatted email address given the mailbox, host, and personal info\"\n    ],\n    \"imap_savebody\": [\n        \"bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \\\"\\\"[, int options = 0]])\",\n        \"Save a specific body section to a file\"\n    ],\n    \"imap_search\": [\n        \"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\n        \"Return a list of messages matching the given criteria\"\n    ],\n    \"imap_set_quota\": [\n        \"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\n        \"Will set the quota for qroot mailbox\"\n    ],\n    \"imap_setacl\": [\n        \"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\n        \"Sets the ACL for a given mailbox\"\n    ],\n    \"imap_setflag_full\": [\n        \"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Sets flags on messages\"\n    ],\n    \"imap_sort\": [\n        \"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\n        \"Sort an array of message headers, optionally including only messages that meet specified criteria.\"\n    ],\n    \"imap_status\": [\n        \"object imap_status(resource stream_id, string mailbox, int options)\",\n        \"Get status info from a mailbox\"\n    ],\n    \"imap_subscribe\": [\n        \"bool imap_subscribe(resource stream_id, string mailbox)\",\n        \"Subscribe to a mailbox\"\n    ],\n    \"imap_thread\": [\n        \"array imap_thread(resource stream_id [, int options])\",\n        \"Return threaded by REFERENCES tree\"\n    ],\n    \"imap_timeout\": [\n        \"mixed imap_timeout(int timeout_type [, int timeout])\",\n        \"Set or fetch imap timeout\"\n    ],\n    \"imap_uid\": [\n        \"int imap_uid(resource stream_id, int msg_no)\",\n        \"Get the unique message id associated with a standard sequential message number\"\n    ],\n    \"imap_undelete\": [\n        \"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\n        \"Remove the delete flag from a message\"\n    ],\n    \"imap_unsubscribe\": [\n        \"bool imap_unsubscribe(resource stream_id, string mailbox)\",\n        \"Unsubscribe from a mailbox\"\n    ],\n    \"imap_utf7_decode\": [\n        \"string imap_utf7_decode(string buf)\",\n        \"Decode a modified UTF-7 string\"\n    ],\n    \"imap_utf7_encode\": [\n        \"string imap_utf7_encode(string buf)\",\n        \"Encode a string in modified UTF-7\"\n    ],\n    \"imap_utf8\": [\n        \"string imap_utf8(string mime_encoded_text)\",\n        \"Convert a mime-encoded text to UTF-8\"\n    ],\n    \"imap_utf8_to_mutf7\": [\n        \"string imap_utf8_to_mutf7(string in)\",\n        \"Encode a UTF-8 string to modified UTF-7\"\n    ],\n    \"implode\": [\n        \"string implode([string glue,] array pieces)\",\n        \"Joins array elements placing glue string between items and return one string\"\n    ],\n    \"import_request_variables\": [\n        \"bool import_request_variables(string types [, string prefix])\",\n        \"Import GET/POST/Cookie variables into the global scope\"\n    ],\n    \"in_array\": [\n        \"bool in_array(mixed needle, array haystack [, bool strict])\",\n        \"Checks if the given value exists in the array\"\n    ],\n    \"include\": [\n        \"bool include(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"include_once\": [\n        \"bool include_once(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"inet_ntop\": [\n        \"string inet_ntop(string in_addr)\",\n        \"Converts a packed inet address to a human readable IP address string\"\n    ],\n    \"inet_pton\": [\n        \"string inet_pton(string ip_address)\",\n        \"Converts a human readable IP address to a packed binary string\"\n    ],\n    \"ini_get\": [\n        \"string ini_get(string varname)\",\n        \"Get a configuration option\"\n    ],\n    \"ini_get_all\": [\n        \"array ini_get_all([string extension[, bool details = true]])\",\n        \"Get all configuration options\"\n    ],\n    \"ini_restore\": [\n        \"void ini_restore(string varname)\",\n        \"Restore the value of a configuration option specified by varname\"\n    ],\n    \"ini_set\": [\n        \"string ini_set(string varname, string newvalue)\",\n        \"Set a configuration option, returns false on error and the old value of the configuration option on success\"\n    ],\n    \"interface_exists\": [\n        \"bool interface_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"intl_error_name\": [\n        \"string intl_error_name()\",\n        \"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"\n    ],\n    \"intl_get_error_code\": [\n        \"int intl_get_error_code()\",\n        \"* Get code of the last occured error.\"\n    ],\n    \"intl_get_error_message\": [\n        \"string intl_get_error_message()\",\n        \"* Get text description of the last occured error.\"\n    ],\n    \"intl_is_failure\": [\n        \"bool intl_is_failure()\",\n        \"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"\n    ],\n    \"intval\": [\n        \"int intval(mixed var [, int base])\",\n        \"Get the integer value of a variable using the optional base for the conversion\"\n    ],\n    \"ip2long\": [\n        \"int ip2long(string ip_address)\",\n        \"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"\n    ],\n    \"iptcembed\": [\n        \"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\n        \"Embed binary IPTC data into a JPEG image.\"\n    ],\n    \"iptcparse\": [\n        \"array iptcparse(string iptcdata)\",\n        \"Parse binary IPTC-data into associative array\"\n    ],\n    \"is_a\": [\n        \"bool is_a(object object, string class_name)\",\n        \"Returns true if the object is of this class or has this class as one of its parents\"\n    ],\n    \"is_array\": [\n        \"bool is_array(mixed var)\",\n        \"Returns true if variable is an array\"\n    ],\n    \"is_bool\": [\n        \"bool is_bool(mixed var)\",\n        \"Returns true if variable is a boolean\"\n    ],\n    \"is_callable\": [\n        \"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\n        \"Returns true if var is callable.\"\n    ],\n    \"is_dir\": [\n        \"bool is_dir(string filename)\",\n        \"Returns true if file is directory\"\n    ],\n    \"is_executable\": [\n        \"bool is_executable(string filename)\",\n        \"Returns true if file is executable\"\n    ],\n    \"is_file\": [\n        \"bool is_file(string filename)\",\n        \"Returns true if file is a regular file\"\n    ],\n    \"is_finite\": [\n        \"bool is_finite(float val)\",\n        \"Returns whether argument is finite\"\n    ],\n    \"is_float\": [\n        \"bool is_float(mixed var)\",\n        \"Returns true if variable is float point\"\n    ],\n    \"is_infinite\": [\n        \"bool is_infinite(float val)\",\n        \"Returns whether argument is infinite\"\n    ],\n    \"is_link\": [\n        \"bool is_link(string filename)\",\n        \"Returns true if file is symbolic link\"\n    ],\n    \"is_long\": [\n        \"bool is_long(mixed var)\",\n        \"Returns true if variable is a long (integer)\"\n    ],\n    \"is_nan\": [\n        \"bool is_nan(float val)\",\n        \"Returns whether argument is not a number\"\n    ],\n    \"is_null\": [\n        \"bool is_null(mixed var)\",\n        \"Returns true if variable is null\"\n    ],\n    \"is_numeric\": [\n        \"bool is_numeric(mixed value)\",\n        \"Returns true if value is a number or a numeric string\"\n    ],\n    \"is_object\": [\n        \"bool is_object(mixed var)\",\n        \"Returns true if variable is an object\"\n    ],\n    \"is_readable\": [\n        \"bool is_readable(string filename)\",\n        \"Returns true if file can be read\"\n    ],\n    \"is_resource\": [\n        \"bool is_resource(mixed var)\",\n        \"Returns true if variable is a resource\"\n    ],\n    \"is_scalar\": [\n        \"bool is_scalar(mixed value)\",\n        \"Returns true if value is a scalar\"\n    ],\n    \"is_string\": [\n        \"bool is_string(mixed var)\",\n        \"Returns true if variable is a string\"\n    ],\n    \"is_subclass_of\": [\n        \"bool is_subclass_of(object object, string class_name)\",\n        \"Returns true if the object has this class as one of its parents\"\n    ],\n    \"is_uploaded_file\": [\n        \"bool is_uploaded_file(string path)\",\n        \"Check if file was created by rfc1867 upload\"\n    ],\n    \"is_writable\": [\n        \"bool is_writable(string filename)\",\n        \"Returns true if file can be written\"\n    ],\n    \"isset\": [\n        \"bool isset(mixed var [, mixed var])\",\n        \"Determine whether a variable is set\"\n    ],\n    \"iterator_apply\": [\n        \"int iterator_apply(Traversable it, mixed function [, mixed params])\",\n        \"Calls a function for every element in an iterator\"\n    ],\n    \"iterator_count\": [\n        \"int iterator_count(Traversable it)\",\n        \"Count the elements in an iterator\"\n    ],\n    \"iterator_to_array\": [\n        \"array iterator_to_array(Traversable it [, bool use_keys = true])\",\n        \"Copy the iterator into an array\"\n    ],\n    \"jddayofweek\": [\n        \"mixed jddayofweek(int juliandaycount [, int mode])\",\n        \"Returns name or number of day of week from julian day count\"\n    ],\n    \"jdmonthname\": [\n        \"string jdmonthname(int juliandaycount, int mode)\",\n        \"Returns name of month for julian day count\"\n    ],\n    \"jdtofrench\": [\n        \"string jdtofrench(int juliandaycount)\",\n        \"Converts a julian day count to a french republic calendar date\"\n    ],\n    \"jdtogregorian\": [\n        \"string jdtogregorian(int juliandaycount)\",\n        \"Converts a julian day count to a gregorian calendar date\"\n    ],\n    \"jdtojewish\": [\n        \"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\n        \"Converts a julian day count to a jewish calendar date\"\n    ],\n    \"jdtojulian\": [\n        \"string jdtojulian(int juliandaycount)\",\n        \"Convert a julian day count to a julian calendar date\"\n    ],\n    \"jdtounix\": [\n        \"int jdtounix(int jday)\",\n        \"Convert Julian Day to UNIX timestamp\"\n    ],\n    \"jewishtojd\": [\n        \"int jewishtojd(int month, int day, int year)\",\n        \"Converts a jewish calendar date to a julian day count\"\n    ],\n    \"join\": [\n        \"string join(array src, string glue)\",\n        \"An alias for implode\"\n    ],\n    \"jpeg2wbmp\": [\n        \"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert JPEG image to WBMP image\"\n    ],\n    \"json_decode\": [\n        \"mixed json_decode(string json [, bool assoc [, long depth]])\",\n        \"Decodes the JSON representation into a PHP value\"\n    ],\n    \"json_encode\": [\n        \"string json_encode(mixed data [, int options])\",\n        \"Returns the JSON representation of a value\"\n    ],\n    \"json_last_error\": [\n        \"int json_last_error()\",\n        \"Returns the error code of the last json_decode().\"\n    ],\n    \"juliantojd\": [\n        \"int juliantojd(int month, int day, int year)\",\n        \"Converts a julian calendar date to julian day count\"\n    ],\n    \"key\": [\n        \"mixed key(array array_arg)\",\n        \"Return the key of the element currently pointed to by the internal array pointer\"\n    ],\n    \"krsort\": [\n        \"bool krsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key value in reverse order\"\n    ],\n    \"ksort\": [\n        \"bool ksort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key\"\n    ],\n    \"lcfirst\": [\n        \"string lcfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"lcg_value\": [\n        \"float lcg_value()\",\n        \"Returns a value from the combined linear congruential generator\"\n    ],\n    \"lchgrp\": [\n        \"bool lchgrp(string filename, mixed group)\",\n        \"Change symlink group\"\n    ],\n    \"ldap_8859_to_t61\": [\n        \"string ldap_8859_to_t61(string value)\",\n        \"Translate 8859 characters to t61 characters\"\n    ],\n    \"ldap_add\": [\n        \"bool ldap_add(resource link, string dn, array entry)\",\n        \"Add entries to LDAP directory\"\n    ],\n    \"ldap_bind\": [\n        \"bool ldap_bind(resource link [, string dn [, string password]])\",\n        \"Bind to LDAP directory\"\n    ],\n    \"ldap_compare\": [\n        \"bool ldap_compare(resource link, string dn, string attr, string value)\",\n        \"Determine if an entry has a specific value for one of its attributes\"\n    ],\n    \"ldap_connect\": [\n        \"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\n        \"Connect to an LDAP server\"\n    ],\n    \"ldap_count_entries\": [\n        \"int ldap_count_entries(resource link, resource result)\",\n        \"Count the number of entries in a search result\"\n    ],\n    \"ldap_delete\": [\n        \"bool ldap_delete(resource link, string dn)\",\n        \"Delete an entry from a directory\"\n    ],\n    \"ldap_dn2ufn\": [\n        \"string ldap_dn2ufn(string dn)\",\n        \"Convert DN to User Friendly Naming format\"\n    ],\n    \"ldap_err2str\": [\n        \"string ldap_err2str(int errno)\",\n        \"Convert error number to error string\"\n    ],\n    \"ldap_errno\": [\n        \"int ldap_errno(resource link)\",\n        \"Get the current ldap error number\"\n    ],\n    \"ldap_error\": [\n        \"string ldap_error(resource link)\",\n        \"Get the current ldap error string\"\n    ],\n    \"ldap_explode_dn\": [\n        \"array ldap_explode_dn(string dn, int with_attrib)\",\n        \"Splits DN into its component parts\"\n    ],\n    \"ldap_first_attribute\": [\n        \"string ldap_first_attribute(resource link, resource result_entry)\",\n        \"Return first attribute\"\n    ],\n    \"ldap_first_entry\": [\n        \"resource ldap_first_entry(resource link, resource result)\",\n        \"Return first result id\"\n    ],\n    \"ldap_first_reference\": [\n        \"resource ldap_first_reference(resource link, resource result)\",\n        \"Return first reference\"\n    ],\n    \"ldap_free_result\": [\n        \"bool ldap_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"ldap_get_attributes\": [\n        \"array ldap_get_attributes(resource link, resource result_entry)\",\n        \"Get attributes from a search result entry\"\n    ],\n    \"ldap_get_dn\": [\n        \"string ldap_get_dn(resource link, resource result_entry)\",\n        \"Get the DN of a result entry\"\n    ],\n    \"ldap_get_entries\": [\n        \"array ldap_get_entries(resource link, resource result)\",\n        \"Get all result entries\"\n    ],\n    \"ldap_get_option\": [\n        \"bool ldap_get_option(resource link, int option, mixed retval)\",\n        \"Get the current value of various session-wide parameters\"\n    ],\n    \"ldap_get_values_len\": [\n        \"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\n        \"Get all values with lengths from a result entry\"\n    ],\n    \"ldap_list\": [\n        \"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Single-level search\"\n    ],\n    \"ldap_mod_add\": [\n        \"bool ldap_mod_add(resource link, string dn, array entry)\",\n        \"Add attribute values to current\"\n    ],\n    \"ldap_mod_del\": [\n        \"bool ldap_mod_del(resource link, string dn, array entry)\",\n        \"Delete attribute values\"\n    ],\n    \"ldap_mod_replace\": [\n        \"bool ldap_mod_replace(resource link, string dn, array entry)\",\n        \"Replace attribute values with new ones\"\n    ],\n    \"ldap_next_attribute\": [\n        \"string ldap_next_attribute(resource link, resource result_entry)\",\n        \"Get the next attribute in result\"\n    ],\n    \"ldap_next_entry\": [\n        \"resource ldap_next_entry(resource link, resource result_entry)\",\n        \"Get next result entry\"\n    ],\n    \"ldap_next_reference\": [\n        \"resource ldap_next_reference(resource link, resource reference_entry)\",\n        \"Get next reference\"\n    ],\n    \"ldap_parse_reference\": [\n        \"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\n        \"Extract information from reference entry\"\n    ],\n    \"ldap_parse_result\": [\n        \"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\n        \"Extract information from result\"\n    ],\n    \"ldap_read\": [\n        \"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Read an entry\"\n    ],\n    \"ldap_rename\": [\n        \"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\n        \"Modify the name of an entry\"\n    ],\n    \"ldap_sasl_bind\": [\n        \"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\n        \"Bind to LDAP directory using SASL\"\n    ],\n    \"ldap_search\": [\n        \"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Search LDAP tree under base_dn\"\n    ],\n    \"ldap_set_option\": [\n        \"bool ldap_set_option(resource link, int option, mixed newval)\",\n        \"Set the value of various session-wide parameters\"\n    ],\n    \"ldap_set_rebind_proc\": [\n        \"bool ldap_set_rebind_proc(resource link, string callback)\",\n        \"Set a callback function to do re-binds on referral chasing.\"\n    ],\n    \"ldap_sort\": [\n        \"bool ldap_sort(resource link, resource result, string sortfilter)\",\n        \"Sort LDAP result entries\"\n    ],\n    \"ldap_start_tls\": [\n        \"bool ldap_start_tls(resource link)\",\n        \"Start TLS\"\n    ],\n    \"ldap_t61_to_8859\": [\n        \"string ldap_t61_to_8859(string value)\",\n        \"Translate t61 characters to 8859 characters\"\n    ],\n    \"ldap_unbind\": [\n        \"bool ldap_unbind(resource link)\",\n        \"Unbind from LDAP directory\"\n    ],\n    \"leak\": [\n        \"void leak(int num_bytes=3)\",\n        \"Cause an intentional memory leak, for testing/debugging purposes\"\n    ],\n    \"levenshtein\": [\n        \"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\n        \"Calculate Levenshtein distance between two strings\"\n    ],\n    \"libxml_clear_errors\": [\n        \"void libxml_clear_errors()\",\n        \"Clear last error from libxml\"\n    ],\n    \"libxml_disable_entity_loader\": [\n        \"bool libxml_disable_entity_loader([boolean disable])\",\n        \"Disable/Enable ability to load external entities\"\n    ],\n    \"libxml_get_errors\": [\n        \"object libxml_get_errors()\",\n        \"Retrieve array of errors\"\n    ],\n    \"libxml_get_last_error\": [\n        \"object libxml_get_last_error()\",\n        \"Retrieve last error from libxml\"\n    ],\n    \"libxml_set_streams_context\": [\n        \"void libxml_set_streams_context(resource streams_context)\",\n        \"Set the streams context for the next libxml document load or write\"\n    ],\n    \"libxml_use_internal_errors\": [\n        \"bool libxml_use_internal_errors([boolean use_errors])\",\n        \"Disable libxml errors and allow user to fetch error information as needed\"\n    ],\n    \"link\": [\n        \"int link(string target, string link)\",\n        \"Create a hard link\"\n    ],\n    \"linkinfo\": [\n        \"int linkinfo(string filename)\",\n        \"Returns the st_dev field of the UNIX C stat structure describing the link\"\n    ],\n    \"litespeed_request_headers\": [\n        \"array litespeed_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"litespeed_response_headers\": [\n        \"array litespeed_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"locale_accept_from_http\": [\n        \"string locale_accept_from_http(string $http_accept)\",\n        null\n    ],\n    \"locale_canonicalize\": [\n        \"static string locale_canonicalize(Locale $loc, string $locale)\",\n        \"* @param string $locale The locale string to canonicalize\"\n    ],\n    \"locale_filter_matches\": [\n        \"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\n        \"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"\n    ],\n    \"locale_get_all_variants\": [\n        \"static array locale_get_all_variants($locale)\",\n        \"* gets an array containing the list of variants, or null\"\n    ],\n    \"locale_get_default\": [\n        \"static string locale_get_default( )\",\n        \"Get default locale\"\n    ],\n    \"locale_get_keywords\": [\n        \"static array locale_get_keywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"\n    ],\n    \"locale_get_primary_language\": [\n        \"static string locale_get_primary_language($locale)\",\n        \"* gets the primary language for the $locale\"\n    ],\n    \"locale_get_region\": [\n        \"static string locale_get_region($locale)\",\n        \"* gets the region for the $locale\"\n    ],\n    \"locale_get_script\": [\n        \"static string locale_get_script($locale)\",\n        \"* gets the script for the $locale\"\n    ],\n    \"locale_lookup\": [\n        \"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\n        \"* Searchs the items in $langtag for the best match to the language * range\"\n    ],\n    \"locale_set_default\": [\n        \"static string locale_set_default( string $locale )\",\n        \"Set default locale\"\n    ],\n    \"localeconv\": [\n        \"array localeconv(void)\",\n        \"Returns numeric formatting information based on the current locale\"\n    ],\n    \"localtime\": [\n        \"array localtime([int timestamp [, bool associative_array]])\",\n        \"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"\n    ],\n    \"log\": [\n        \"float log(float number, [float base])\",\n        \"Returns the natural logarithm of the number, or the base log if base is specified\"\n    ],\n    \"log10\": [\n        \"float log10(float number)\",\n        \"Returns the base-10 logarithm of the number\"\n    ],\n    \"log1p\": [\n        \"float log1p(float number)\",\n        \"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"long2ip\": [\n        \"string long2ip(int proper_address)\",\n        \"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"\n    ],\n    \"lstat\": [\n        \"array lstat(string filename)\",\n        \"Give information about a file or symbolic link\"\n    ],\n    \"ltrim\": [\n        \"string ltrim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning of a string\"\n    ],\n    \"mail\": [\n        \"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"Send an email message\"\n    ],\n    \"max\": [\n        \"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the highest value in an array or a series of arguments\"\n    ],\n    \"mb_check_encoding\": [\n        \"bool mb_check_encoding([string var[, string encoding]])\",\n        \"Check if the string is valid for the specified encoding\"\n    ],\n    \"mb_convert_case\": [\n        \"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\n        \"Returns a case-folded version of sourcestring\"\n    ],\n    \"mb_convert_encoding\": [\n        \"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\n        \"Returns converted string in desired encoding\"\n    ],\n    \"mb_convert_kana\": [\n        \"string mb_convert_kana(string str [, string option] [, string encoding])\",\n        \"Conversion between full-width character and half-width character (Japanese)\"\n    ],\n    \"mb_convert_variables\": [\n        \"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\n        \"Converts the string resource in variables to desired encoding\"\n    ],\n    \"mb_decode_mimeheader\": [\n        \"string mb_decode_mimeheader(string string)\",\n        \"Decodes the MIME \\\"encoded-word\\\" in the string\"\n    ],\n    \"mb_decode_numericentity\": [\n        \"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts HTML numeric entities to character code\"\n    ],\n    \"mb_detect_encoding\": [\n        \"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\n        \"Encodings of the given string is returned (as a string)\"\n    ],\n    \"mb_detect_order\": [\n        \"bool|array mb_detect_order([mixed encoding-list])\",\n        \"Sets the current detect_order or Return the current detect_order as a array\"\n    ],\n    \"mb_encode_mimeheader\": [\n        \"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",\n        \"Converts the string to MIME \\\"encoded-word\\\" in the format of =?charset?(B|Q)?encoded_string?=\"\n    ],\n    \"mb_encode_numericentity\": [\n        \"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts specified characters to HTML numeric entities\"\n    ],\n    \"mb_encoding_aliases\": [\n        \"array mb_encoding_aliases(string encoding)\",\n        \"Returns an array of the aliases of a given encoding name\"\n    ],\n    \"mb_ereg\": [\n        \"int mb_ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_match\": [\n        \"bool mb_ereg_match(string pattern, string string [,string option])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_replace\": [\n        \"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\n        \"Replace regular expression for multibyte string\"\n    ],\n    \"mb_ereg_search\": [\n        \"bool mb_ereg_search([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_getpos\": [\n        \"int mb_ereg_search_getpos(void)\",\n        \"Get search start position\"\n    ],\n    \"mb_ereg_search_getregs\": [\n        \"array mb_ereg_search_getregs(void)\",\n        \"Get matched substring of the last time\"\n    ],\n    \"mb_ereg_search_init\": [\n        \"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\n        \"Initialize string and regular expression for search.\"\n    ],\n    \"mb_ereg_search_pos\": [\n        \"array mb_ereg_search_pos([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_regs\": [\n        \"array mb_ereg_search_regs([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_setpos\": [\n        \"bool mb_ereg_search_setpos(int position)\",\n        \"Set search start position\"\n    ],\n    \"mb_eregi\": [\n        \"int mb_eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match for multibyte string\"\n    ],\n    \"mb_eregi_replace\": [\n        \"string mb_eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression for multibyte string\"\n    ],\n    \"mb_get_info\": [\n        \"mixed mb_get_info([string type])\",\n        \"Returns the current settings of mbstring\"\n    ],\n    \"mb_http_input\": [\n        \"mixed mb_http_input([string type])\",\n        \"Returns the input encoding\"\n    ],\n    \"mb_http_output\": [\n        \"string mb_http_output([string encoding])\",\n        \"Sets the current output_encoding or returns the current output_encoding as a string\"\n    ],\n    \"mb_internal_encoding\": [\n        \"string mb_internal_encoding([string encoding])\",\n        \"Sets the current internal encoding or Returns the current internal encoding as a string\"\n    ],\n    \"mb_language\": [\n        \"string mb_language([string language])\",\n        \"Sets the current language or Returns the current language as a string\"\n    ],\n    \"mb_list_encodings\": [\n        \"mixed mb_list_encodings()\",\n        \"Returns an array of all supported entity encodings\"\n    ],\n    \"mb_output_handler\": [\n        \"string mb_output_handler(string contents, int status)\",\n        \"Returns string in output buffer converted to the http_output encoding\"\n    ],\n    \"mb_parse_str\": [\n        \"bool mb_parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"mb_preferred_mime_name\": [\n        \"string mb_preferred_mime_name(string encoding)\",\n        \"Return the preferred MIME name (charset) as a string\"\n    ],\n    \"mb_regex_encoding\": [\n        \"string mb_regex_encoding([string encoding])\",\n        \"Returns the current encoding for regex as a string.\"\n    ],\n    \"mb_regex_set_options\": [\n        \"string mb_regex_set_options([string options])\",\n        \"Set or get the default options for mbregex functions\"\n    ],\n    \"mb_send_mail\": [\n        \"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"*  Sends an email message with MIME scheme\"\n    ],\n    \"mb_split\": [\n        \"array mb_split(string pattern, string string [, int limit])\",\n        \"split multibyte string into array by regular expression\"\n    ],\n    \"mb_strcut\": [\n        \"string mb_strcut(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_strimwidth\": [\n        \"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\n        \"Trim the string in terminal width\"\n    ],\n    \"mb_stripos\": [\n        \"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_stristr\": [\n        \"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strlen\": [\n        \"int mb_strlen(string str [, string encoding])\",\n        \"Get character numbers of a string\"\n    ],\n    \"mb_strpos\": [\n        \"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"mb_strrchr\": [\n        \"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"mb_strrichr\": [\n        \"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another, case insensitive\"\n    ],\n    \"mb_strripos\": [\n        \"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of last occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strrpos\": [\n        \"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"mb_strstr\": [\n        \"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"mb_strtolower\": [\n        \"string mb_strtolower(string sourcestring [, string encoding])\",\n        \"*  Returns a lowercased version of sourcestring\"\n    ],\n    \"mb_strtoupper\": [\n        \"string mb_strtoupper(string sourcestring [, string encoding])\",\n        \"*  Returns a uppercased version of sourcestring\"\n    ],\n    \"mb_strwidth\": [\n        \"int mb_strwidth(string str [, string encoding])\",\n        \"Gets terminal width of a string\"\n    ],\n    \"mb_substitute_character\": [\n        \"mixed mb_substitute_character([mixed substchar])\",\n        \"Sets the current substitute_character or returns the current substitute_character\"\n    ],\n    \"mb_substr\": [\n        \"string mb_substr(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_substr_count\": [\n        \"int mb_substr_count(string haystack, string needle [, string encoding])\",\n        \"Count the number of substring occurrences\"\n    ],\n    \"mcrypt_cbc\": [\n        \"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\n        \"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_cfb\": [\n        \"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\n        \"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_create_iv\": [\n        \"string mcrypt_create_iv(int size, int source)\",\n        \"Create an initialization vector (IV)\"\n    ],\n    \"mcrypt_decrypt\": [\n        \"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_ecb\": [\n        \"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\n        \"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_enc_get_algorithms_name\": [\n        \"string mcrypt_enc_get_algorithms_name(resource td)\",\n        \"Returns the name of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_block_size\": [\n        \"int mcrypt_enc_get_block_size(resource td)\",\n        \"Returns the block size of the cipher specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_iv_size\": [\n        \"int mcrypt_enc_get_iv_size(resource td)\",\n        \"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_key_size\": [\n        \"int mcrypt_enc_get_key_size(resource td)\",\n        \"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_modes_name\": [\n        \"string mcrypt_enc_get_modes_name(resource td)\",\n        \"Returns the name of the mode specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_supported_key_sizes\": [\n        \"array mcrypt_enc_get_supported_key_sizes(resource td)\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_enc_is_block_algorithm\": [\n        \"bool mcrypt_enc_is_block_algorithm(resource td)\",\n        \"Returns TRUE if the alrogithm is a block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_algorithm_mode\": [\n        \"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_mode\": [\n        \"bool mcrypt_enc_is_block_mode(resource td)\",\n        \"Returns TRUE if the mode outputs blocks\"\n    ],\n    \"mcrypt_enc_self_test\": [\n        \"int mcrypt_enc_self_test(resource td)\",\n        \"This function runs the self test on the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_encrypt\": [\n        \"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_generic\": [\n        \"string mcrypt_generic(resource td, string data)\",\n        \"This function encrypts the plaintext\"\n    ],\n    \"mcrypt_generic_deinit\": [\n        \"bool mcrypt_generic_deinit(resource td)\",\n        \"This function terminates encrypt specified by the descriptor td\"\n    ],\n    \"mcrypt_generic_init\": [\n        \"int mcrypt_generic_init(resource td, string key, string iv)\",\n        \"This function initializes all buffers for the specific module\"\n    ],\n    \"mcrypt_get_block_size\": [\n        \"int mcrypt_get_block_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_cipher_name\": [\n        \"string mcrypt_get_cipher_name(string cipher)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_iv_size\": [\n        \"int mcrypt_get_iv_size(string cipher, string module)\",\n        \"Get the IV size of cipher (Usually the same as the blocksize)\"\n    ],\n    \"mcrypt_get_key_size\": [\n        \"int mcrypt_get_key_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_list_algorithms\": [\n        \"array mcrypt_list_algorithms([string lib_dir])\",\n        \"List all algorithms in \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_list_modes\": [\n        \"array mcrypt_list_modes([string lib_dir])\",\n        \"List all modes \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_module_close\": [\n        \"bool mcrypt_module_close(resource td)\",\n        \"Free the descriptor td\"\n    ],\n    \"mcrypt_module_get_algo_block_size\": [\n        \"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\n        \"Returns the block size of the algorithm\"\n    ],\n    \"mcrypt_module_get_algo_key_size\": [\n        \"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\n        \"Returns the maximum supported key size of the algorithm\"\n    ],\n    \"mcrypt_module_get_supported_key_sizes\": [\n        \"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_module_is_block_algorithm\": [\n        \"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\n        \"Returns TRUE if the algorithm is a block algorithm\"\n    ],\n    \"mcrypt_module_is_block_algorithm_mode\": [\n        \"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_module_is_block_mode\": [\n        \"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode outputs blocks of bytes\"\n    ],\n    \"mcrypt_module_open\": [\n        \"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\n        \"Opens the module of the algorithm and the mode to be used\"\n    ],\n    \"mcrypt_module_self_test\": [\n        \"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",\n        \"Does a self test of the module \\\"module\\\"\"\n    ],\n    \"mcrypt_ofb\": [\n        \"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"md5\": [\n        \"string md5(string str, [ bool raw_output])\",\n        \"Calculate the md5 hash of a string\"\n    ],\n    \"md5_file\": [\n        \"string md5_file(string filename [, bool raw_output])\",\n        \"Calculate the md5 hash of given filename\"\n    ],\n    \"mdecrypt_generic\": [\n        \"string mdecrypt_generic(resource td, string data)\",\n        \"This function decrypts the plaintext\"\n    ],\n    \"memory_get_peak_usage\": [\n        \"int memory_get_peak_usage([real_usage])\",\n        \"Returns the peak allocated by PHP memory\"\n    ],\n    \"memory_get_usage\": [\n        \"int memory_get_usage([real_usage])\",\n        \"Returns the allocated by PHP memory\"\n    ],\n    \"metaphone\": [\n        \"string metaphone(string text[, int phones])\",\n        \"Break english phrases down into their phonemes\"\n    ],\n    \"method_exists\": [\n        \"bool method_exists(object object, string method)\",\n        \"Checks if the class method exists\"\n    ],\n    \"mhash\": [\n        \"string mhash(int hash, string data [, string key])\",\n        \"Hash data with hash\"\n    ],\n    \"mhash_count\": [\n        \"int mhash_count(void)\",\n        \"Gets the number of available hashes\"\n    ],\n    \"mhash_get_block_size\": [\n        \"int mhash_get_block_size(int hash)\",\n        \"Gets the block size of hash\"\n    ],\n    \"mhash_get_hash_name\": [\n        \"string mhash_get_hash_name(int hash)\",\n        \"Gets the name of hash\"\n    ],\n    \"mhash_keygen_s2k\": [\n        \"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\n        \"Generates a key using hash functions\"\n    ],\n    \"microtime\": [\n        \"mixed microtime([bool get_as_float])\",\n        \"Returns either a string or a float containing the current time in seconds and microseconds\"\n    ],\n    \"mime_content_type\": [\n        \"string mime_content_type(string filename|resource stream)\",\n        \"Return content-type for file\"\n    ],\n    \"min\": [\n        \"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the lowest value in an array or a series of arguments\"\n    ],\n    \"mkdir\": [\n        \"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\n        \"Create a directory\"\n    ],\n    \"mktime\": [\n        \"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a date\"\n    ],\n    \"money_format\": [\n        \"string money_format(string format , float value)\",\n        \"Convert monetary value(s) to string\"\n    ],\n    \"move_uploaded_file\": [\n        \"bool move_uploaded_file(string path, string new_path)\",\n        \"Move a file if and only if it was created by an upload\"\n    ],\n    \"msg_get_queue\": [\n        \"resource msg_get_queue(int key [, int perms])\",\n        \"Attach to a message queue\"\n    ],\n    \"msg_queue_exists\": [\n        \"bool msg_queue_exists(int key)\",\n        \"Check whether a message queue exists\"\n    ],\n    \"msg_receive\": [\n        \"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_remove_queue\": [\n        \"bool msg_remove_queue(resource queue)\",\n        \"Destroy the queue\"\n    ],\n    \"msg_send\": [\n        \"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_set_queue\": [\n        \"bool msg_set_queue(resource queue, array data)\",\n        \"Set information for a message queue\"\n    ],\n    \"msg_stat_queue\": [\n        \"array msg_stat_queue(resource queue)\",\n        \"Returns information about a message queue\"\n    ],\n    \"msgfmt_create\": [\n        \"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\n        \"* Create formatter.\"\n    ],\n    \"msgfmt_format\": [\n        \"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_format_message\": [\n        \"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_get_error_code\": [\n        \"int msgfmt_get_error_code( MessageFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"msgfmt_get_error_message\": [\n        \"string msgfmt_get_error_message( MessageFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"msgfmt_get_locale\": [\n        \"string msgfmt_get_locale(MessageFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"msgfmt_get_pattern\": [\n        \"string msgfmt_get_pattern( MessageFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"msgfmt_parse\": [\n        \"array msgfmt_parse( MessageFormatter $nf, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"msgfmt_set_pattern\": [\n        \"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"mssql_bind\": [\n        \"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\n        \"Adds a parameter to a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_close\": [\n        \"bool mssql_close([resource conn_id])\",\n        \"Closes a connection to a MS-SQL server\"\n    ],\n    \"mssql_connect\": [\n        \"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a connection to a MS-SQL server\"\n    ],\n    \"mssql_data_seek\": [\n        \"bool mssql_data_seek(resource result_id, int offset)\",\n        \"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"\n    ],\n    \"mssql_execute\": [\n        \"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\n        \"Executes a stored procedure on a MS-SQL server database\"\n    ],\n    \"mssql_fetch_array\": [\n        \"array mssql_fetch_array(resource result_id [, int result_type])\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_assoc\": [\n        \"array mssql_fetch_assoc(resource result_id)\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_batch\": [\n        \"int mssql_fetch_batch(resource result_index)\",\n        \"Returns the next batch of records\"\n    ],\n    \"mssql_fetch_field\": [\n        \"object mssql_fetch_field(resource result_id [, int offset])\",\n        \"Gets information about certain fields in a query result\"\n    ],\n    \"mssql_fetch_object\": [\n        \"object mssql_fetch_object(resource result_id)\",\n        \"Returns a pseudo-object of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_row\": [\n        \"array mssql_fetch_row(resource result_id)\",\n        \"Returns an array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_field_length\": [\n        \"int mssql_field_length(resource result_id [, int offset])\",\n        \"Get the length of a MS-SQL field\"\n    ],\n    \"mssql_field_name\": [\n        \"string mssql_field_name(resource result_id [, int offset])\",\n        \"Returns the name of the field given by offset in the result set given by result_id\"\n    ],\n    \"mssql_field_seek\": [\n        \"bool mssql_field_seek(resource result_id, int offset)\",\n        \"Seeks to the specified field offset\"\n    ],\n    \"mssql_field_type\": [\n        \"string mssql_field_type(resource result_id [, int offset])\",\n        \"Returns the type of a field\"\n    ],\n    \"mssql_free_result\": [\n        \"bool mssql_free_result(resource result_index)\",\n        \"Free a MS-SQL result index\"\n    ],\n    \"mssql_free_statement\": [\n        \"bool mssql_free_statement(resource result_index)\",\n        \"Free a MS-SQL statement index\"\n    ],\n    \"mssql_get_last_message\": [\n        \"string mssql_get_last_message(void)\",\n        \"Gets the last message from the MS-SQL server\"\n    ],\n    \"mssql_guid_string\": [\n        \"string mssql_guid_string(string binary [,bool short_format])\",\n        \"Converts a 16 byte binary GUID to a string\"\n    ],\n    \"mssql_init\": [\n        \"int mssql_init(string sp_name [, resource conn_id])\",\n        \"Initializes a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_min_error_severity\": [\n        \"void mssql_min_error_severity(int severity)\",\n        \"Sets the lower error severity\"\n    ],\n    \"mssql_min_message_severity\": [\n        \"void mssql_min_message_severity(int severity)\",\n        \"Sets the lower message severity\"\n    ],\n    \"mssql_next_result\": [\n        \"bool mssql_next_result(resource result_id)\",\n        \"Move the internal result pointer to the next result\"\n    ],\n    \"mssql_num_fields\": [\n        \"int mssql_num_fields(resource mssql_result_index)\",\n        \"Returns the number of fields fetched in from the result id specified\"\n    ],\n    \"mssql_num_rows\": [\n        \"int mssql_num_rows(resource mssql_result_index)\",\n        \"Returns the number of rows fetched in from the result id specified\"\n    ],\n    \"mssql_pconnect\": [\n        \"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a persistent connection to a MS-SQL server\"\n    ],\n    \"mssql_query\": [\n        \"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\n        \"Perform an SQL query on a MS-SQL server database\"\n    ],\n    \"mssql_result\": [\n        \"string mssql_result(resource result_id, int row, mixed field)\",\n        \"Returns the contents of one cell from a MS-SQL result set\"\n    ],\n    \"mssql_rows_affected\": [\n        \"int mssql_rows_affected(resource conn_id)\",\n        \"Returns the number of records affected by the query\"\n    ],\n    \"mssql_select_db\": [\n        \"bool mssql_select_db(string database_name [, resource conn_id])\",\n        \"Select a MS-SQL database\"\n    ],\n    \"mt_getrandmax\": [\n        \"int mt_getrandmax(void)\",\n        \"Returns the maximum value a random number from Mersenne Twister can have\"\n    ],\n    \"mt_rand\": [\n        \"int mt_rand([int min, int max])\",\n        \"Returns a random number from Mersenne Twister\"\n    ],\n    \"mt_srand\": [\n        \"void mt_srand([int seed])\",\n        \"Seeds Mersenne Twister random number generator\"\n    ],\n    \"mysql_affected_rows\": [\n        \"int mysql_affected_rows([int link_identifier])\",\n        \"Gets number of affected rows in previous MySQL operation\"\n    ],\n    \"mysql_client_encoding\": [\n        \"string mysql_client_encoding([int link_identifier])\",\n        \"Returns the default character set for the current connection\"\n    ],\n    \"mysql_close\": [\n        \"bool mysql_close([int link_identifier])\",\n        \"Close a MySQL connection\"\n    ],\n    \"mysql_connect\": [\n        \"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\n        \"Opens a connection to a MySQL Server\"\n    ],\n    \"mysql_create_db\": [\n        \"bool mysql_create_db(string database_name [, int link_identifier])\",\n        \"Create a MySQL database\"\n    ],\n    \"mysql_data_seek\": [\n        \"bool mysql_data_seek(resource result, int row_number)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysql_db_query\": [\n        \"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_drop_db\": [\n        \"bool mysql_drop_db(string database_name [, int link_identifier])\",\n        \"Drops (delete) a MySQL database\"\n    ],\n    \"mysql_errno\": [\n        \"int mysql_errno([int link_identifier])\",\n        \"Returns the number of the error message from previous MySQL operation\"\n    ],\n    \"mysql_error\": [\n        \"string mysql_error([int link_identifier])\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysql_escape_string\": [\n        \"string mysql_escape_string(string to_be_escaped)\",\n        \"Escape string for mysql query\"\n    ],\n    \"mysql_fetch_array\": [\n        \"array mysql_fetch_array(resource result [, int result_type])\",\n        \"Fetch a result row as an array (associative, numeric or both)\"\n    ],\n    \"mysql_fetch_assoc\": [\n        \"array mysql_fetch_assoc(resource result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysql_fetch_field\": [\n        \"object mysql_fetch_field(resource result [, int field_offset])\",\n        \"Gets column information from a result and return as an object\"\n    ],\n    \"mysql_fetch_lengths\": [\n        \"array mysql_fetch_lengths(resource result)\",\n        \"Gets max data size of each column in a result\"\n    ],\n    \"mysql_fetch_object\": [\n        \"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysql_fetch_row\": [\n        \"array mysql_fetch_row(resource result)\",\n        \"Gets a result row as an enumerated array\"\n    ],\n    \"mysql_field_flags\": [\n        \"string mysql_field_flags(resource result, int field_offset)\",\n        \"Gets the flags associated with the specified field in a result\"\n    ],\n    \"mysql_field_len\": [\n        \"int mysql_field_len(resource result, int field_offset)\",\n        \"Returns the length of the specified field\"\n    ],\n    \"mysql_field_name\": [\n        \"string mysql_field_name(resource result, int field_index)\",\n        \"Gets the name of the specified field in a result\"\n    ],\n    \"mysql_field_seek\": [\n        \"bool mysql_field_seek(resource result, int field_offset)\",\n        \"Sets result pointer to a specific field offset\"\n    ],\n    \"mysql_field_table\": [\n        \"string mysql_field_table(resource result, int field_offset)\",\n        \"Gets name of the table the specified field is in\"\n    ],\n    \"mysql_field_type\": [\n        \"string mysql_field_type(resource result, int field_offset)\",\n        \"Gets the type of the specified field in a result\"\n    ],\n    \"mysql_free_result\": [\n        \"bool mysql_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"mysql_get_client_info\": [\n        \"string mysql_get_client_info(void)\",\n        \"Returns a string that represents the client library version\"\n    ],\n    \"mysql_get_host_info\": [\n        \"string mysql_get_host_info([int link_identifier])\",\n        \"Returns a string describing the type of connection in use, including the server host name\"\n    ],\n    \"mysql_get_proto_info\": [\n        \"int mysql_get_proto_info([int link_identifier])\",\n        \"Returns the protocol version used by current connection\"\n    ],\n    \"mysql_get_server_info\": [\n        \"string mysql_get_server_info([int link_identifier])\",\n        \"Returns a string that represents the server version number\"\n    ],\n    \"mysql_info\": [\n        \"string mysql_info([int link_identifier])\",\n        \"Returns a string containing information about the most recent query\"\n    ],\n    \"mysql_insert_id\": [\n        \"int mysql_insert_id([int link_identifier])\",\n        \"Gets the ID generated from the previous INSERT operation\"\n    ],\n    \"mysql_list_dbs\": [\n        \"resource mysql_list_dbs([int link_identifier])\",\n        \"List databases available on a MySQL server\"\n    ],\n    \"mysql_list_fields\": [\n        \"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\n        \"List MySQL result fields\"\n    ],\n    \"mysql_list_processes\": [\n        \"resource mysql_list_processes([int link_identifier])\",\n        \"Returns a result set describing the current server threads\"\n    ],\n    \"mysql_list_tables\": [\n        \"resource mysql_list_tables(string database_name [, int link_identifier])\",\n        \"List tables in a MySQL database\"\n    ],\n    \"mysql_num_fields\": [\n        \"int mysql_num_fields(resource result)\",\n        \"Gets number of fields in a result\"\n    ],\n    \"mysql_num_rows\": [\n        \"int mysql_num_rows(resource result)\",\n        \"Gets number of rows in a result\"\n    ],\n    \"mysql_pconnect\": [\n        \"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\n        \"Opens a persistent connection to a MySQL Server\"\n    ],\n    \"mysql_ping\": [\n        \"bool mysql_ping([int link_identifier])\",\n        \"Ping a server connection. If no connection then reconnect.\"\n    ],\n    \"mysql_query\": [\n        \"resource mysql_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_real_escape_string\": [\n        \"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\n        \"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysql_result\": [\n        \"mixed mysql_result(resource result, int row [, mixed field])\",\n        \"Gets result data\"\n    ],\n    \"mysql_select_db\": [\n        \"bool mysql_select_db(string database_name [, int link_identifier])\",\n        \"Selects a MySQL database\"\n    ],\n    \"mysql_set_charset\": [\n        \"bool mysql_set_charset(string csname [, int link_identifier])\",\n        \"sets client character set\"\n    ],\n    \"mysql_stat\": [\n        \"string mysql_stat([int link_identifier])\",\n        \"Returns a string containing status information\"\n    ],\n    \"mysql_thread_id\": [\n        \"int mysql_thread_id([int link_identifier])\",\n        \"Returns the thread id of current connection\"\n    ],\n    \"mysql_unbuffered_query\": [\n        \"resource mysql_unbuffered_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL, without fetching and buffering the result rows\"\n    ],\n    \"mysqli_affected_rows\": [\n        \"mixed mysqli_affected_rows(object link)\",\n        \"Get number of affected rows in previous MySQL operation\"\n    ],\n    \"mysqli_autocommit\": [\n        \"bool mysqli_autocommit(object link, bool mode)\",\n        \"Turn auto commit on or of\"\n    ],\n    \"mysqli_cache_stats\": [\n        \"array mysqli_cache_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_change_user\": [\n        \"bool mysqli_change_user(object link, string user, string password, string database)\",\n        \"Change logged-in user of the active connection\"\n    ],\n    \"mysqli_character_set_name\": [\n        \"string mysqli_character_set_name(object link)\",\n        \"Returns the name of the character set used for this connection\"\n    ],\n    \"mysqli_close\": [\n        \"bool mysqli_close(object link)\",\n        \"Close connection\"\n    ],\n    \"mysqli_commit\": [\n        \"bool mysqli_commit(object link)\",\n        \"Commit outstanding actions and close transaction\"\n    ],\n    \"mysqli_connect\": [\n        \"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_connect_errno\": [\n        \"int mysqli_connect_errno(void)\",\n        \"Returns the numerical value of the error message from last connect command\"\n    ],\n    \"mysqli_connect_error\": [\n        \"string mysqli_connect_error(void)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_data_seek\": [\n        \"bool mysqli_data_seek(object result, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_debug\": [\n        \"void mysqli_debug(string debug)\",\n        \"\"\n    ],\n    \"mysqli_dump_debug_info\": [\n        \"bool mysqli_dump_debug_info(object link)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_end\": [\n        \"void mysqli_embedded_server_end(void)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_start\": [\n        \"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\n        \"initialize and start embedded server\"\n    ],\n    \"mysqli_errno\": [\n        \"int mysqli_errno(object link)\",\n        \"Returns the numerical value of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_error\": [\n        \"string mysqli_error(object link)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_fetch_all\": [\n        \"mixed mysqli_fetch_all (object result [,int resulttype])\",\n        \"Fetches all result rows as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_array\": [\n        \"mixed mysqli_fetch_array (object result [,int resulttype])\",\n        \"Fetch a result row as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_assoc\": [\n        \"mixed mysqli_fetch_assoc (object result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysqli_fetch_field\": [\n        \"mixed mysqli_fetch_field (object result)\",\n        \"Get column information from a result and return as an object\"\n    ],\n    \"mysqli_fetch_field_direct\": [\n        \"mixed mysqli_fetch_field_direct (object result, int offset)\",\n        \"Fetch meta-data for a single field\"\n    ],\n    \"mysqli_fetch_fields\": [\n        \"mixed mysqli_fetch_fields (object result)\",\n        \"Return array of objects containing field meta-data\"\n    ],\n    \"mysqli_fetch_lengths\": [\n        \"mixed mysqli_fetch_lengths (object result)\",\n        \"Get the length of each output in a result\"\n    ],\n    \"mysqli_fetch_object\": [\n        \"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysqli_fetch_row\": [\n        \"array mysqli_fetch_row (object result)\",\n        \"Get a result row as an enumerated array\"\n    ],\n    \"mysqli_field_count\": [\n        \"int mysqli_field_count(object link)\",\n        \"Fetch the number of fields returned by the last query for the given link\"\n    ],\n    \"mysqli_field_seek\": [\n        \"int mysqli_field_seek(object result, int fieldnr)\",\n        \"Set result pointer to a specified field offset\"\n    ],\n    \"mysqli_field_tell\": [\n        \"int mysqli_field_tell(object result)\",\n        \"Get current field offset of result pointer\"\n    ],\n    \"mysqli_free_result\": [\n        \"void mysqli_free_result(object result)\",\n        \"Free query result memory for the given result handle\"\n    ],\n    \"mysqli_get_charset\": [\n        \"object mysqli_get_charset(object link)\",\n        \"returns a character set object\"\n    ],\n    \"mysqli_get_client_info\": [\n        \"string mysqli_get_client_info(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_client_stats\": [\n        \"array mysqli_get_client_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_client_version\": [\n        \"int mysqli_get_client_version(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_connection_stats\": [\n        \"array mysqli_get_connection_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_host_info\": [\n        \"string mysqli_get_host_info (object link)\",\n        \"Get MySQL host info\"\n    ],\n    \"mysqli_get_proto_info\": [\n        \"int mysqli_get_proto_info(object link)\",\n        \"Get MySQL protocol information\"\n    ],\n    \"mysqli_get_server_info\": [\n        \"string mysqli_get_server_info(object link)\",\n        \"Get MySQL server info\"\n    ],\n    \"mysqli_get_server_version\": [\n        \"int mysqli_get_server_version(object link)\",\n        \"Return the MySQL version for the server referenced by the given link\"\n    ],\n    \"mysqli_get_warnings\": [\n        \"object mysqli_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}\"\n    ],\n    \"mysqli_info\": [\n        \"string mysqli_info(object link)\",\n        \"Get information about the most recent query\"\n    ],\n    \"mysqli_init\": [\n        \"resource mysqli_init(void)\",\n        \"Initialize mysqli and return a resource for use with mysql_real_connect\"\n    ],\n    \"mysqli_insert_id\": [\n        \"mixed mysqli_insert_id(object link)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_kill\": [\n        \"bool mysqli_kill(object link, int processid)\",\n        \"Kill a mysql process on the server\"\n    ],\n    \"mysqli_link_construct\": [\n        \"object mysqli_link_construct()\",\n        \"\"\n    ],\n    \"mysqli_more_results\": [\n        \"bool mysqli_more_results(object link)\",\n        \"check if there any more query results from a multi query\"\n    ],\n    \"mysqli_multi_query\": [\n        \"bool mysqli_multi_query(object link, string query)\",\n        \"allows to execute multiple queries\"\n    ],\n    \"mysqli_next_result\": [\n        \"bool mysqli_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_num_fields\": [\n        \"int mysqli_num_fields(object result)\",\n        \"Get number of fields in result\"\n    ],\n    \"mysqli_num_rows\": [\n        \"mixed mysqli_num_rows(object result)\",\n        \"Get number of rows in result\"\n    ],\n    \"mysqli_options\": [\n        \"bool mysqli_options(object link, int flags, mixed values)\",\n        \"Set options\"\n    ],\n    \"mysqli_ping\": [\n        \"bool mysqli_ping(object link)\",\n        \"Ping a server connection or reconnect if there is no connection\"\n    ],\n    \"mysqli_poll\": [\n        \"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\n        \"Poll connections\"\n    ],\n    \"mysqli_prepare\": [\n        \"mixed mysqli_prepare(object link, string query)\",\n        \"Prepare a SQL statement for execution\"\n    ],\n    \"mysqli_query\": [\n        \"mixed mysqli_query(object link, string query [,int resultmode]) */\",\n        \"PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Os|l\\\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Empty query\\\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid value for resultmode\\\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT\"\n    ],\n    \"mysqli_real_connect\": [\n        \"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_real_escape_string\": [\n        \"string mysqli_real_escape_string(object link, string escapestr)\",\n        \"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysqli_real_query\": [\n        \"bool mysqli_real_query(object link, string query)\",\n        \"Binary-safe version of mysql_query()\"\n    ],\n    \"mysqli_reap_async_query\": [\n        \"int mysqli_reap_async_query(object link)\",\n        \"Poll connections\"\n    ],\n    \"mysqli_refresh\": [\n        \"bool mysqli_refresh(object link, long options)\",\n        \"Flush tables or caches, or reset replication server information\"\n    ],\n    \"mysqli_report\": [\n        \"bool mysqli_report(int flags)\",\n        \"sets report level\"\n    ],\n    \"mysqli_rollback\": [\n        \"bool mysqli_rollback(object link)\",\n        \"Undo actions from current transaction\"\n    ],\n    \"mysqli_select_db\": [\n        \"bool mysqli_select_db(object link, string dbname)\",\n        \"Select a MySQL database\"\n    ],\n    \"mysqli_set_charset\": [\n        \"bool mysqli_set_charset(object link, string csname)\",\n        \"sets client character set\"\n    ],\n    \"mysqli_set_local_infile_default\": [\n        \"void mysqli_set_local_infile_default(object link)\",\n        \"unsets user defined handler for load local infile command\"\n    ],\n    \"mysqli_set_local_infile_handler\": [\n        \"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\n        \"Set callback functions for LOAD DATA LOCAL INFILE\"\n    ],\n    \"mysqli_sqlstate\": [\n        \"string mysqli_sqlstate(object link)\",\n        \"Returns the SQLSTATE error from previous MySQL operation\"\n    ],\n    \"mysqli_ssl_set\": [\n        \"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\n        \"\"\n    ],\n    \"mysqli_stat\": [\n        \"mixed mysqli_stat(object link)\",\n        \"Get current system status\"\n    ],\n    \"mysqli_stmt_affected_rows\": [\n        \"mixed mysqli_stmt_affected_rows(object stmt)\",\n        \"Return the number of rows affected in the last query for the given link\"\n    ],\n    \"mysqli_stmt_attr_get\": [\n        \"int mysqli_stmt_attr_get(object stmt, long attr)\",\n        \"\"\n    ],\n    \"mysqli_stmt_attr_set\": [\n        \"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\n        \"\"\n    ],\n    \"mysqli_stmt_bind_param\": [\n        \"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\n        \"Bind variables to a prepared statement as parameters\"\n    ],\n    \"mysqli_stmt_bind_result\": [\n        \"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\n        \"Bind variables to a prepared statement for result storage\"\n    ],\n    \"mysqli_stmt_close\": [\n        \"bool mysqli_stmt_close(object stmt)\",\n        \"Close statement\"\n    ],\n    \"mysqli_stmt_data_seek\": [\n        \"void mysqli_stmt_data_seek(object stmt, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_stmt_errno\": [\n        \"int mysqli_stmt_errno(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_error\": [\n        \"string mysqli_stmt_error(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_execute\": [\n        \"bool mysqli_stmt_execute(object stmt)\",\n        \"Execute a prepared statement\"\n    ],\n    \"mysqli_stmt_fetch\": [\n        \"mixed mysqli_stmt_fetch(object stmt)\",\n        \"Fetch results from a prepared statement into the bound variables\"\n    ],\n    \"mysqli_stmt_field_count\": [\n        \"int mysqli_stmt_field_count(object stmt) {\",\n        \"Return the number of result columns for the given statement\"\n    ],\n    \"mysqli_stmt_free_result\": [\n        \"void mysqli_stmt_free_result(object stmt)\",\n        \"Free stored result memory for the given statement handle\"\n    ],\n    \"mysqli_stmt_get_result\": [\n        \"object mysqli_stmt_get_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_stmt_get_warnings\": [\n        \"object mysqli_stmt_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \\\"mysqli_stmt\\\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}\"\n    ],\n    \"mysqli_stmt_init\": [\n        \"mixed mysqli_stmt_init(object link)\",\n        \"Initialize statement object\"\n    ],\n    \"mysqli_stmt_insert_id\": [\n        \"mixed mysqli_stmt_insert_id(object stmt)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_stmt_next_result\": [\n        \"bool mysqli_stmt_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_stmt_num_rows\": [\n        \"mixed mysqli_stmt_num_rows(object stmt)\",\n        \"Return the number of rows in statements result set\"\n    ],\n    \"mysqli_stmt_param_count\": [\n        \"int mysqli_stmt_param_count(object stmt)\",\n        \"Return the number of parameter for the given statement\"\n    ],\n    \"mysqli_stmt_prepare\": [\n        \"bool mysqli_stmt_prepare(object stmt, string query)\",\n        \"prepare server side statement with query\"\n    ],\n    \"mysqli_stmt_reset\": [\n        \"bool mysqli_stmt_reset(object stmt)\",\n        \"reset a prepared statement\"\n    ],\n    \"mysqli_stmt_result_metadata\": [\n        \"mixed mysqli_stmt_result_metadata(object stmt)\",\n        \"return result set from statement\"\n    ],\n    \"mysqli_stmt_send_long_data\": [\n        \"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\n        \"\"\n    ],\n    \"mysqli_stmt_sqlstate\": [\n        \"string mysqli_stmt_sqlstate(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_store_result\": [\n        \"bool mysqli_stmt_store_result(stmt)\",\n        \"\"\n    ],\n    \"mysqli_store_result\": [\n        \"object mysqli_store_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_thread_id\": [\n        \"int mysqli_thread_id(object link)\",\n        \"Return the current thread ID\"\n    ],\n    \"mysqli_thread_safe\": [\n        \"bool mysqli_thread_safe(void)\",\n        \"Return whether thread safety is given or not\"\n    ],\n    \"mysqli_use_result\": [\n        \"mixed mysqli_use_result(object link)\",\n        \"Directly retrieve query results - do not buffer results on client side\"\n    ],\n    \"mysqli_warning_count\": [\n        \"int mysqli_warning_count (object link)\",\n        \"Return number of warnings from the last query for the given link\"\n    ],\n    \"natcasesort\": [\n        \"void natcasesort(array &array_arg)\",\n        \"Sort an array using case-insensitive natural sort\"\n    ],\n    \"natsort\": [\n        \"void natsort(array &array_arg)\",\n        \"Sort an array using natural sort\"\n    ],\n    \"next\": [\n        \"mixed next(array array_arg)\",\n        \"Move array argument's internal pointer to the next element and return it\"\n    ],\n    \"ngettext\": [\n        \"string ngettext(string MSGID1, string MSGID2, int N)\",\n        \"Plural version of gettext()\"\n    ],\n    \"nl2br\": [\n        \"string nl2br(string str [, bool is_xhtml])\",\n        \"Converts newlines to HTML line breaks\"\n    ],\n    \"nl_langinfo\": [\n        \"string nl_langinfo(int item)\",\n        \"Query language and locale information\"\n    ],\n    \"normalizer_is_normalize\": [\n        \"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Test if a string is in a given normalization form.\"\n    ],\n    \"normalizer_normalize\": [\n        \"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Normalize a string.\"\n    ],\n    \"nsapi_request_headers\": [\n        \"array nsapi_request_headers(void)\",\n        \"Get all headers from the request\"\n    ],\n    \"nsapi_response_headers\": [\n        \"array nsapi_response_headers(void)\",\n        \"Get all headers from the response\"\n    ],\n    \"nsapi_virtual\": [\n        \"bool nsapi_virtual(string uri)\",\n        \"Perform an NSAPI sub-request\"\n    ],\n    \"number_format\": [\n        \"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\n        \"Formats a number with grouped thousands\"\n    ],\n    \"numfmt_create\": [\n        \"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\n        \"* Create number formatter.\"\n    ],\n    \"numfmt_format\": [\n        \"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\n        \"* Format a number.\"\n    ],\n    \"numfmt_format_currency\": [\n        \"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\n        \"* Format a number as currency.\"\n    ],\n    \"numfmt_get_attribute\": [\n        \"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_get_error_code\": [\n        \"int numfmt_get_error_code( NumberFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"numfmt_get_error_message\": [\n        \"string numfmt_get_error_message( NumberFormatter $nf )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"numfmt_get_locale\": [\n        \"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\n        \"* Get formatter locale.\"\n    ],\n    \"numfmt_get_pattern\": [\n        \"string numfmt_get_pattern( NumberFormatter $nf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"numfmt_get_symbol\": [\n        \"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter symbol value.\"\n    ],\n    \"numfmt_get_text_attribute\": [\n        \"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_parse\": [\n        \"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\n        \"* Parse a number.\"\n    ],\n    \"numfmt_parse_currency\": [\n        \"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\n        \"* Parse a number as currency.\"\n    ],\n    \"numfmt_parse_message\": [\n        \"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"numfmt_set_attribute\": [\n        \"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_set_pattern\": [\n        \"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"numfmt_set_symbol\": [\n        \"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\n        \"* Set formatter symbol value.\"\n    ],\n    \"numfmt_set_text_attribute\": [\n        \"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"ob_clean\": [\n        \"bool ob_clean(void)\",\n        \"Clean (delete) the current output buffer\"\n    ],\n    \"ob_end_clean\": [\n        \"bool ob_end_clean(void)\",\n        \"Clean the output buffer, and delete current output buffer\"\n    ],\n    \"ob_end_flush\": [\n        \"bool ob_end_flush(void)\",\n        \"Flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_flush\": [\n        \"bool ob_flush(void)\",\n        \"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"\n    ],\n    \"ob_get_clean\": [\n        \"bool ob_get_clean(void)\",\n        \"Get current buffer contents and delete current output buffer\"\n    ],\n    \"ob_get_contents\": [\n        \"string ob_get_contents(void)\",\n        \"Return the contents of the output buffer\"\n    ],\n    \"ob_get_flush\": [\n        \"bool ob_get_flush(void)\",\n        \"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_get_length\": [\n        \"int ob_get_length(void)\",\n        \"Return the length of the output buffer\"\n    ],\n    \"ob_get_level\": [\n        \"int ob_get_level(void)\",\n        \"Return the nesting level of the output buffer\"\n    ],\n    \"ob_get_status\": [\n        \"false|array ob_get_status([bool full_status])\",\n        \"Return the status of the active or all output buffers\"\n    ],\n    \"ob_gzhandler\": [\n        \"string ob_gzhandler(string str, int mode)\",\n        \"Encode str based on accept-encoding setting - designed to be called from ob_start()\"\n    ],\n    \"ob_iconv_handler\": [\n        \"string ob_iconv_handler(string contents, int status)\",\n        \"Returns str in output buffer converted to the iconv.output_encoding character set\"\n    ],\n    \"ob_implicit_flush\": [\n        \"void ob_implicit_flush([int flag])\",\n        \"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"\n    ],\n    \"ob_list_handlers\": [\n        \"false|array ob_list_handlers()\",\n        \"*  List all output_buffers in an array\"\n    ],\n    \"ob_start\": [\n        \"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\n        \"Turn on Output Buffering (specifying an optional output handler).\"\n    ],\n    \"oci_bind_array_by_name\": [\n        \"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\n        \"Bind a PHP array to an Oracle PL/SQL type by name\"\n    ],\n    \"oci_bind_by_name\": [\n        \"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\n        \"Bind a PHP variable to an Oracle placeholder by name\"\n    ],\n    \"oci_cancel\": [\n        \"bool oci_cancel(resource stmt)\",\n        \"Cancel reading from a cursor\"\n    ],\n    \"oci_close\": [\n        \"bool oci_close(resource connection)\",\n        \"Disconnect from database\"\n    ],\n    \"oci_collection_append\": [\n        \"bool oci_collection_append(string value)\",\n        \"Append an object to the collection\"\n    ],\n    \"oci_collection_assign\": [\n        \"bool oci_collection_assign(object from)\",\n        \"Assign a collection from another existing collection\"\n    ],\n    \"oci_collection_element_assign\": [\n        \"bool oci_collection_element_assign(int index, string val)\",\n        \"Assign element val to collection at index ndx\"\n    ],\n    \"oci_collection_element_get\": [\n        \"string oci_collection_element_get(int ndx)\",\n        \"Retrieve the value at collection index ndx\"\n    ],\n    \"oci_collection_max\": [\n        \"int oci_collection_max()\",\n        \"Return the max value of a collection. For a varray this is the maximum length of the array\"\n    ],\n    \"oci_collection_size\": [\n        \"int oci_collection_size()\",\n        \"Return the size of a collection\"\n    ],\n    \"oci_collection_trim\": [\n        \"bool oci_collection_trim(int num)\",\n        \"Trim num elements from the end of a collection\"\n    ],\n    \"oci_commit\": [\n        \"bool oci_commit(resource connection)\",\n        \"Commit the current context\"\n    ],\n    \"oci_connect\": [\n        \"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_define_by_name\": [\n        \"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\n        \"Define a PHP variable to an Oracle column by name\"\n    ],\n    \"oci_error\": [\n        \"array oci_error([resource stmt|connection|global])\",\n        \"Return the last error of stmt|connection|global. If no error happened returns false.\"\n    ],\n    \"oci_execute\": [\n        \"bool oci_execute(resource stmt [, int mode])\",\n        \"Execute a parsed statement\"\n    ],\n    \"oci_fetch\": [\n        \"bool oci_fetch(resource stmt)\",\n        \"Prepare a new row of data for reading\"\n    ],\n    \"oci_fetch_all\": [\n        \"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\n        \"Fetch all rows of result data into an array\"\n    ],\n    \"oci_fetch_array\": [\n        \"array oci_fetch_array( resource stmt [, int mode ])\",\n        \"Fetch a result row as an array\"\n    ],\n    \"oci_fetch_assoc\": [\n        \"array oci_fetch_assoc( resource stmt )\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"oci_fetch_object\": [\n        \"object oci_fetch_object( resource stmt )\",\n        \"Fetch a result row as an object\"\n    ],\n    \"oci_fetch_row\": [\n        \"array oci_fetch_row( resource stmt )\",\n        \"Fetch a result row as an enumerated array\"\n    ],\n    \"oci_field_is_null\": [\n        \"bool oci_field_is_null(resource stmt, int col)\",\n        \"Tell whether a column is NULL\"\n    ],\n    \"oci_field_name\": [\n        \"string oci_field_name(resource stmt, int col)\",\n        \"Tell the name of a column\"\n    ],\n    \"oci_field_precision\": [\n        \"int oci_field_precision(resource stmt, int col)\",\n        \"Tell the precision of a column\"\n    ],\n    \"oci_field_scale\": [\n        \"int oci_field_scale(resource stmt, int col)\",\n        \"Tell the scale of a column\"\n    ],\n    \"oci_field_size\": [\n        \"int oci_field_size(resource stmt, int col)\",\n        \"Tell the maximum data size of a column\"\n    ],\n    \"oci_field_type\": [\n        \"mixed oci_field_type(resource stmt, int col)\",\n        \"Tell the data type of a column\"\n    ],\n    \"oci_field_type_raw\": [\n        \"int oci_field_type_raw(resource stmt, int col)\",\n        \"Tell the raw oracle data type of a column\"\n    ],\n    \"oci_free_collection\": [\n        \"bool oci_free_collection()\",\n        \"Deletes collection object\"\n    ],\n    \"oci_free_descriptor\": [\n        \"bool oci_free_descriptor()\",\n        \"Deletes large object description\"\n    ],\n    \"oci_free_statement\": [\n        \"bool oci_free_statement(resource stmt)\",\n        \"Free all resources associated with a statement\"\n    ],\n    \"oci_internal_debug\": [\n        \"void oci_internal_debug(int onoff)\",\n        \"Toggle internal debugging output for the OCI extension\"\n    ],\n    \"oci_lob_append\": [\n        \"bool oci_lob_append( object lob )\",\n        \"Appends data from a LOB to another LOB\"\n    ],\n    \"oci_lob_close\": [\n        \"bool oci_lob_close()\",\n        \"Closes lob descriptor\"\n    ],\n    \"oci_lob_copy\": [\n        \"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\n        \"Copies data from a LOB to another LOB\"\n    ],\n    \"oci_lob_eof\": [\n        \"bool oci_lob_eof()\",\n        \"Checks if EOF is reached\"\n    ],\n    \"oci_lob_erase\": [\n        \"int oci_lob_erase( [ int offset [, int length ] ] )\",\n        \"Erases a specified portion of the internal LOB, starting at a specified offset\"\n    ],\n    \"oci_lob_export\": [\n        \"bool oci_lob_export([string filename [, int start [, int length]]])\",\n        \"Writes a large object into a file\"\n    ],\n    \"oci_lob_flush\": [\n        \"bool oci_lob_flush( [ int flag ] )\",\n        \"Flushes the LOB buffer\"\n    ],\n    \"oci_lob_import\": [\n        \"bool oci_lob_import( string filename )\",\n        \"Loads file into a LOB\"\n    ],\n    \"oci_lob_is_equal\": [\n        \"bool oci_lob_is_equal( object lob1, object lob2 )\",\n        \"Tests to see if two LOB/FILE locators are equal\"\n    ],\n    \"oci_lob_load\": [\n        \"string oci_lob_load()\",\n        \"Loads a large object\"\n    ],\n    \"oci_lob_read\": [\n        \"string oci_lob_read( int length )\",\n        \"Reads particular part of a large object\"\n    ],\n    \"oci_lob_rewind\": [\n        \"bool oci_lob_rewind()\",\n        \"Rewind pointer of a LOB\"\n    ],\n    \"oci_lob_save\": [\n        \"bool oci_lob_save( string data [, int offset ])\",\n        \"Saves a large object\"\n    ],\n    \"oci_lob_seek\": [\n        \"bool oci_lob_seek( int offset [, int whence ])\",\n        \"Moves the pointer of a LOB\"\n    ],\n    \"oci_lob_size\": [\n        \"int oci_lob_size()\",\n        \"Returns size of a large object\"\n    ],\n    \"oci_lob_tell\": [\n        \"int oci_lob_tell()\",\n        \"Tells LOB pointer position\"\n    ],\n    \"oci_lob_truncate\": [\n        \"bool oci_lob_truncate( [ int length ])\",\n        \"Truncates a LOB\"\n    ],\n    \"oci_lob_write\": [\n        \"int oci_lob_write( string string [, int length ])\",\n        \"Writes data to current position of a LOB\"\n    ],\n    \"oci_lob_write_temporary\": [\n        \"bool oci_lob_write_temporary(string var [, int lob_type])\",\n        \"Writes temporary blob\"\n    ],\n    \"oci_new_collection\": [\n        \"object oci_new_collection(resource connection, string tdo [, string schema])\",\n        \"Initialize a new collection\"\n    ],\n    \"oci_new_connect\": [\n        \"resource oci_new_connect(string user, string pass [, string db])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_new_cursor\": [\n        \"resource oci_new_cursor(resource connection)\",\n        \"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"\n    ],\n    \"oci_new_descriptor\": [\n        \"object oci_new_descriptor(resource connection [, int type])\",\n        \"Initialize a new empty descriptor LOB/FILE (LOB is default)\"\n    ],\n    \"oci_num_fields\": [\n        \"int oci_num_fields(resource stmt)\",\n        \"Return the number of result columns in a statement\"\n    ],\n    \"oci_num_rows\": [\n        \"int oci_num_rows(resource stmt)\",\n        \"Return the row count of an OCI statement\"\n    ],\n    \"oci_parse\": [\n        \"resource oci_parse(resource connection, string query)\",\n        \"Parse a query and return a statement\"\n    ],\n    \"oci_password_change\": [\n        \"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\n        \"Changes the password of an account\"\n    ],\n    \"oci_pconnect\": [\n        \"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\n        \"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"\n    ],\n    \"oci_result\": [\n        \"string oci_result(resource stmt, mixed column)\",\n        \"Return a single column of result data\"\n    ],\n    \"oci_rollback\": [\n        \"bool oci_rollback(resource connection)\",\n        \"Rollback the current context\"\n    ],\n    \"oci_server_version\": [\n        \"string oci_server_version(resource connection)\",\n        \"Return a string containing server version information\"\n    ],\n    \"oci_set_action\": [\n        \"bool oci_set_action(resource connection, string value)\",\n        \"Sets the action attribute on the connection\"\n    ],\n    \"oci_set_client_identifier\": [\n        \"bool oci_set_client_identifier(resource connection, string value)\",\n        \"Sets the client identifier attribute on the connection\"\n    ],\n    \"oci_set_client_info\": [\n        \"bool oci_set_client_info(resource connection, string value)\",\n        \"Sets the client info attribute on the connection\"\n    ],\n    \"oci_set_edition\": [\n        \"bool oci_set_edition(string value)\",\n        \"Sets the edition attribute for all subsequent connections created\"\n    ],\n    \"oci_set_module_name\": [\n        \"bool oci_set_module_name(resource connection, string value)\",\n        \"Sets the module attribute on the connection\"\n    ],\n    \"oci_set_prefetch\": [\n        \"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\n        \"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"\n    ],\n    \"oci_statement_type\": [\n        \"string oci_statement_type(resource stmt)\",\n        \"Return the query type of an OCI statement\"\n    ],\n    \"ocifetchinto\": [\n        \"int ocifetchinto(resource stmt, array &output [, int mode])\",\n        \"Fetch a row of result data into an array\"\n    ],\n    \"ocigetbufferinglob\": [\n        \"bool ocigetbufferinglob()\",\n        \"Returns current state of buffering for a LOB\"\n    ],\n    \"ocisetbufferinglob\": [\n        \"bool ocisetbufferinglob( boolean flag )\",\n        \"Enables/disables buffering for a LOB\"\n    ],\n    \"octdec\": [\n        \"int octdec(string octal_number)\",\n        \"Returns the decimal equivalent of an octal string\"\n    ],\n    \"odbc_autocommit\": [\n        \"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\n        \"Toggle autocommit mode or get status\"\n    ],\n    \"odbc_binmode\": [\n        \"bool odbc_binmode(int result_id, int mode)\",\n        \"Handle binary column data\"\n    ],\n    \"odbc_close\": [\n        \"void odbc_close(resource connection_id)\",\n        \"Close an ODBC connection\"\n    ],\n    \"odbc_close_all\": [\n        \"void odbc_close_all(void)\",\n        \"Close all ODBC connections\"\n    ],\n    \"odbc_columnprivileges\": [\n        \"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\n        \"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"\n    ],\n    \"odbc_columns\": [\n        \"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\n        \"Returns a result identifier that can be used to fetch a list of column names in specified tables\"\n    ],\n    \"odbc_commit\": [\n        \"bool odbc_commit(resource connection_id)\",\n        \"Commit an ODBC transaction\"\n    ],\n    \"odbc_connect\": [\n        \"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\n        \"Connect to a datasource\"\n    ],\n    \"odbc_cursor\": [\n        \"string odbc_cursor(resource result_id)\",\n        \"Get cursor name\"\n    ],\n    \"odbc_data_source\": [\n        \"array odbc_data_source(resource connection_id, int fetch_type)\",\n        \"Return information about the currently connected data source\"\n    ],\n    \"odbc_error\": [\n        \"string odbc_error([resource connection_id])\",\n        \"Get the last error code\"\n    ],\n    \"odbc_errormsg\": [\n        \"string odbc_errormsg([resource connection_id])\",\n        \"Get the last error message\"\n    ],\n    \"odbc_exec\": [\n        \"resource odbc_exec(resource connection_id, string query [, int flags])\",\n        \"Prepare and execute an SQL statement\"\n    ],\n    \"odbc_execute\": [\n        \"bool odbc_execute(resource result_id [, array parameters_array])\",\n        \"Execute a prepared statement\"\n    ],\n    \"odbc_fetch_array\": [\n        \"array odbc_fetch_array(int result [, int rownumber])\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"odbc_fetch_into\": [\n        \"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\n        \"Fetch one result row into an array\"\n    ],\n    \"odbc_fetch_object\": [\n        \"object odbc_fetch_object(int result [, int rownumber])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"odbc_fetch_row\": [\n        \"bool odbc_fetch_row(resource result_id [, int row_number])\",\n        \"Fetch a row\"\n    ],\n    \"odbc_field_len\": [\n        \"int odbc_field_len(resource result_id, int field_number)\",\n        \"Get the length (precision) of a column\"\n    ],\n    \"odbc_field_name\": [\n        \"string odbc_field_name(resource result_id, int field_number)\",\n        \"Get a column name\"\n    ],\n    \"odbc_field_num\": [\n        \"int odbc_field_num(resource result_id, string field_name)\",\n        \"Return column number\"\n    ],\n    \"odbc_field_scale\": [\n        \"int odbc_field_scale(resource result_id, int field_number)\",\n        \"Get the scale of a column\"\n    ],\n    \"odbc_field_type\": [\n        \"string odbc_field_type(resource result_id, int field_number)\",\n        \"Get the datatype of a column\"\n    ],\n    \"odbc_foreignkeys\": [\n        \"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\n        \"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"\n    ],\n    \"odbc_free_result\": [\n        \"bool odbc_free_result(resource result_id)\",\n        \"Free resources associated with a result\"\n    ],\n    \"odbc_gettypeinfo\": [\n        \"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\n        \"Returns a result identifier containing information about data types supported by the data source\"\n    ],\n    \"odbc_longreadlen\": [\n        \"bool odbc_longreadlen(int result_id, int length)\",\n        \"Handle LONG columns\"\n    ],\n    \"odbc_next_result\": [\n        \"bool odbc_next_result(resource result_id)\",\n        \"Checks if multiple results are avaiable\"\n    ],\n    \"odbc_num_fields\": [\n        \"int odbc_num_fields(resource result_id)\",\n        \"Get number of columns in a result\"\n    ],\n    \"odbc_num_rows\": [\n        \"int odbc_num_rows(resource result_id)\",\n        \"Get number of rows in a result\"\n    ],\n    \"odbc_pconnect\": [\n        \"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\n        \"Establish a persistent connection to a datasource\"\n    ],\n    \"odbc_prepare\": [\n        \"resource odbc_prepare(resource connection_id, string query)\",\n        \"Prepares a statement for execution\"\n    ],\n    \"odbc_primarykeys\": [\n        \"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\n        \"Returns a result identifier listing the column names that comprise the primary key for a table\"\n    ],\n    \"odbc_procedurecolumns\": [\n        \"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\n        \"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"\n    ],\n    \"odbc_procedures\": [\n        \"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\n        \"Returns a result identifier containg the list of procedure names in a datasource\"\n    ],\n    \"odbc_result\": [\n        \"mixed odbc_result(resource result_id, mixed field)\",\n        \"Get result data\"\n    ],\n    \"odbc_result_all\": [\n        \"int odbc_result_all(resource result_id [, string format])\",\n        \"Print result as HTML table\"\n    ],\n    \"odbc_rollback\": [\n        \"bool odbc_rollback(resource connection_id)\",\n        \"Rollback a transaction\"\n    ],\n    \"odbc_setoption\": [\n        \"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\n        \"Sets connection or statement options\"\n    ],\n    \"odbc_specialcolumns\": [\n        \"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\n        \"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"\n    ],\n    \"odbc_statistics\": [\n        \"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\n        \"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"\n    ],\n    \"odbc_tableprivileges\": [\n        \"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\n        \"Returns a result identifier containing a list of tables and the privileges associated with each table\"\n    ],\n    \"odbc_tables\": [\n        \"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\n        \"Call the SQLTables function\"\n    ],\n    \"opendir\": [\n        \"mixed opendir(string path[, resource context])\",\n        \"Open a directory and return a dir_handle\"\n    ],\n    \"openlog\": [\n        \"bool openlog(string ident, int option, int facility)\",\n        \"Open connection to system logger\"\n    ],\n    \"openssl_csr_export\": [\n        \"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\n        \"Exports a CSR to file or a var\"\n    ],\n    \"openssl_csr_export_to_file\": [\n        \"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\n        \"Exports a CSR to file\"\n    ],\n    \"openssl_csr_get_public_key\": [\n        \"mixed openssl_csr_get_public_key(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_get_subject\": [\n        \"mixed openssl_csr_get_subject(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_new\": [\n        \"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\n        \"Generates a privkey and CSR\"\n    ],\n    \"openssl_csr_sign\": [\n        \"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\n        \"Signs a cert with another CERT\"\n    ],\n    \"openssl_decrypt\": [\n        \"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\n        \"Takes raw or base64 encoded string and dectupt it using given method and key\"\n    ],\n    \"openssl_dh_compute_key\": [\n        \"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\n        \"Computes shared sicret for public value of remote DH key and local DH key\"\n    ],\n    \"openssl_digest\": [\n        \"string openssl_digest(string data, string method [, bool raw_output=false])\",\n        \"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"\n    ],\n    \"openssl_encrypt\": [\n        \"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\n        \"Encrypts given data with given method and key, returns raw or base64 encoded string\"\n    ],\n    \"openssl_error_string\": [\n        \"mixed openssl_error_string(void)\",\n        \"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"\n    ],\n    \"openssl_get_cipher_methods\": [\n        \"array openssl_get_cipher_methods([bool aliases = false])\",\n        \"Return array of available cipher methods\"\n    ],\n    \"openssl_get_md_methods\": [\n        \"array openssl_get_md_methods([bool aliases = false])\",\n        \"Return array of available digest methods\"\n    ],\n    \"openssl_open\": [\n        \"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\n        \"Opens data\"\n    ],\n    \"openssl_pkcs12_export\": [\n        \"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS12 to a var\"\n    ],\n    \"openssl_pkcs12_export_to_file\": [\n        \"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS to file\"\n    ],\n    \"openssl_pkcs12_read\": [\n        \"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\n        \"Parses a PKCS12 to an array\"\n    ],\n    \"openssl_pkcs7_decrypt\": [\n        \"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\n        \"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"\n    ],\n    \"openssl_pkcs7_encrypt\": [\n        \"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\n        \"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"\n    ],\n    \"openssl_pkcs7_sign\": [\n        \"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\n        \"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"\n    ],\n    \"openssl_pkcs7_verify\": [\n        \"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\n        \"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"\n    ],\n    \"openssl_pkey_export\": [\n        \"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\n        \"Gets an exportable representation of a key into a string or file\"\n    ],\n    \"openssl_pkey_export_to_file\": [\n        \"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\n        \"Gets an exportable representation of a key into a file\"\n    ],\n    \"openssl_pkey_free\": [\n        \"void openssl_pkey_free(int key)\",\n        \"Frees a key\"\n    ],\n    \"openssl_pkey_get_details\": [\n        \"resource openssl_pkey_get_details(resource key)\",\n        \"returns an array with the key details (bits, pkey, type)\"\n    ],\n    \"openssl_pkey_get_private\": [\n        \"int openssl_pkey_get_private(string key [, string passphrase])\",\n        \"Gets private keys\"\n    ],\n    \"openssl_pkey_get_public\": [\n        \"int openssl_pkey_get_public(mixed cert)\",\n        \"Gets public key from X.509 certificate\"\n    ],\n    \"openssl_pkey_new\": [\n        \"resource openssl_pkey_new([array configargs])\",\n        \"Generates a new private key\"\n    ],\n    \"openssl_private_decrypt\": [\n        \"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\n        \"Decrypts data with private key\"\n    ],\n    \"openssl_private_encrypt\": [\n        \"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with private key\"\n    ],\n    \"openssl_public_decrypt\": [\n        \"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\n        \"Decrypts data with public key\"\n    ],\n    \"openssl_public_encrypt\": [\n        \"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with public key\"\n    ],\n    \"openssl_random_pseudo_bytes\": [\n        \"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\n        \"Returns a string of the length specified filled with random pseudo bytes\"\n    ],\n    \"openssl_seal\": [\n        \"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\n        \"Seals data\"\n    ],\n    \"openssl_sign\": [\n        \"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\n        \"Signs data\"\n    ],\n    \"openssl_verify\": [\n        \"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\n        \"Verifys data\"\n    ],\n    \"openssl_x509_check_private_key\": [\n        \"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\n        \"Checks if a private key corresponds to a CERT\"\n    ],\n    \"openssl_x509_checkpurpose\": [\n        \"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\n        \"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"\n    ],\n    \"openssl_x509_export\": [\n        \"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_export_to_file\": [\n        \"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_free\": [\n        \"void openssl_x509_free(resource x509)\",\n        \"Frees X.509 certificates\"\n    ],\n    \"openssl_x509_parse\": [\n        \"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\n        \"Returns an array of the fields/values of the CERT\"\n    ],\n    \"openssl_x509_read\": [\n        \"resource openssl_x509_read(mixed cert)\",\n        \"Reads X.509 certificates\"\n    ],\n    \"ord\": [\n        \"int ord(string character)\",\n        \"Returns ASCII value of character\"\n    ],\n    \"output_add_rewrite_var\": [\n        \"bool output_add_rewrite_var(string name, string value)\",\n        \"Add URL rewriter values\"\n    ],\n    \"output_reset_rewrite_vars\": [\n        \"bool output_reset_rewrite_vars(void)\",\n        \"Reset(clear) URL rewriter values\"\n    ],\n    \"pack\": [\n        \"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Takes one or more arguments and packs them into a binary string according to the format argument\"\n    ],\n    \"parse_ini_file\": [\n        \"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration file\"\n    ],\n    \"parse_ini_string\": [\n        \"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration string\"\n    ],\n    \"parse_locale\": [\n        \"static array parse_locale($locale)\",\n        \"* parses a locale-id into an array the different parts of it\"\n    ],\n    \"parse_str\": [\n        \"void parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"parse_url\": [\n        \"mixed parse_url(string url, [int url_component])\",\n        \"Parse a URL and return its components\"\n    ],\n    \"passthru\": [\n        \"void passthru(string command [, int &return_value])\",\n        \"Execute an external program and display raw output\"\n    ],\n    \"pathinfo\": [\n        \"array pathinfo(string path[, int options])\",\n        \"Returns information about a certain string\"\n    ],\n    \"pclose\": [\n        \"int pclose(resource fp)\",\n        \"Close a file pointer opened by popen()\"\n    ],\n    \"pcnlt_sigwaitinfo\": [\n        \"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\n        \"Synchronously wait for queued signals\"\n    ],\n    \"pcntl_alarm\": [\n        \"int pcntl_alarm(int seconds)\",\n        \"Set an alarm clock for delivery of a signal\"\n    ],\n    \"pcntl_exec\": [\n        \"bool pcntl_exec(string path [, array args [, array envs]])\",\n        \"Executes specified program in current process space as defined by exec(2)\"\n    ],\n    \"pcntl_fork\": [\n        \"int pcntl_fork(void)\",\n        \"Forks the currently running process following the same behavior as the UNIX fork() system call\"\n    ],\n    \"pcntl_getpriority\": [\n        \"int pcntl_getpriority([int pid [, int process_identifier]])\",\n        \"Get the priority of any process\"\n    ],\n    \"pcntl_setpriority\": [\n        \"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\n        \"Change the priority of any process\"\n    ],\n    \"pcntl_signal\": [\n        \"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\n        \"Assigns a system signal handler to a PHP function\"\n    ],\n    \"pcntl_signal_dispatch\": [\n        \"bool pcntl_signal_dispatch()\",\n        \"Dispatch signals to signal handlers\"\n    ],\n    \"pcntl_sigprocmask\": [\n        \"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\n        \"Examine and change blocked signals\"\n    ],\n    \"pcntl_sigtimedwait\": [\n        \"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\n        \"Wait for queued signals\"\n    ],\n    \"pcntl_wait\": [\n        \"int pcntl_wait(int &status)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_waitpid\": [\n        \"int pcntl_waitpid(int pid, int &status, int options)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_wexitstatus\": [\n        \"int pcntl_wexitstatus(int status)\",\n        \"Returns the status code of a child's exit\"\n    ],\n    \"pcntl_wifexited\": [\n        \"bool pcntl_wifexited(int status)\",\n        \"Returns true if the child status code represents a successful exit\"\n    ],\n    \"pcntl_wifsignaled\": [\n        \"bool pcntl_wifsignaled(int status)\",\n        \"Returns true if the child status code represents a process that was terminated due to a signal\"\n    ],\n    \"pcntl_wifstopped\": [\n        \"bool pcntl_wifstopped(int status)\",\n        \"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"\n    ],\n    \"pcntl_wstopsig\": [\n        \"int pcntl_wstopsig(int status)\",\n        \"Returns the number of the signal that caused the process to stop who's status code is passed\"\n    ],\n    \"pcntl_wtermsig\": [\n        \"int pcntl_wtermsig(int status)\",\n        \"Returns the number of the signal that terminated the process who's status code is passed\"\n    ],\n    \"pdo_drivers\": [\n        \"array pdo_drivers()\",\n        \"Return array of available PDO drivers\"\n    ],\n    \"pfsockopen\": [\n        \"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open persistent Internet or Unix domain socket connection\"\n    ],\n    \"pg_affected_rows\": [\n        \"int pg_affected_rows(resource result)\",\n        \"Returns the number of affected tuples\"\n    ],\n    \"pg_cancel_query\": [\n        \"bool pg_cancel_query(resource connection)\",\n        \"Cancel request\"\n    ],\n    \"pg_client_encoding\": [\n        \"string pg_client_encoding([resource connection])\",\n        \"Get the current client encoding\"\n    ],\n    \"pg_close\": [\n        \"bool pg_close([resource connection])\",\n        \"Close a PostgreSQL connection\"\n    ],\n    \"pg_connect\": [\n        \"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a PostgreSQL connection\"\n    ],\n    \"pg_connection_busy\": [\n        \"bool pg_connection_busy(resource connection)\",\n        \"Get connection is busy or not\"\n    ],\n    \"pg_connection_reset\": [\n        \"bool pg_connection_reset(resource connection)\",\n        \"Reset connection (reconnect)\"\n    ],\n    \"pg_connection_status\": [\n        \"int pg_connection_status(resource connnection)\",\n        \"Get connection status\"\n    ],\n    \"pg_convert\": [\n        \"array pg_convert(resource db, string table, array values[, int options])\",\n        \"Check and convert values for PostgreSQL SQL statement\"\n    ],\n    \"pg_copy_from\": [\n        \"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\n        \"Copy table from array\"\n    ],\n    \"pg_copy_to\": [\n        \"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\n        \"Copy table to array\"\n    ],\n    \"pg_dbname\": [\n        \"string pg_dbname([resource connection])\",\n        \"Get the database name\"\n    ],\n    \"pg_delete\": [\n        \"mixed pg_delete(resource db, string table, array ids[, int options])\",\n        \"Delete records has ids (id=>value)\"\n    ],\n    \"pg_end_copy\": [\n        \"bool pg_end_copy([resource connection])\",\n        \"Sync with backend. Completes the Copy command\"\n    ],\n    \"pg_escape_bytea\": [\n        \"string pg_escape_bytea([resource connection,] string data)\",\n        \"Escape binary for bytea type\"\n    ],\n    \"pg_escape_string\": [\n        \"string pg_escape_string([resource connection,] string data)\",\n        \"Escape string for text/char type\"\n    ],\n    \"pg_execute\": [\n        \"resource pg_execute([resource connection,] string stmtname, array params)\",\n        \"Execute a prepared query\"\n    ],\n    \"pg_fetch_all\": [\n        \"array pg_fetch_all(resource result)\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_all_columns\": [\n        \"array pg_fetch_all_columns(resource result [, int column_number])\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_array\": [\n        \"array pg_fetch_array(resource result [, int row [, int result_type]])\",\n        \"Fetch a row as an array\"\n    ],\n    \"pg_fetch_assoc\": [\n        \"array pg_fetch_assoc(resource result [, int row])\",\n        \"Fetch a row as an assoc array\"\n    ],\n    \"pg_fetch_object\": [\n        \"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\n        \"Fetch a row as an object\"\n    ],\n    \"pg_fetch_result\": [\n        \"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\n        \"Returns values from a result identifier\"\n    ],\n    \"pg_fetch_row\": [\n        \"array pg_fetch_row(resource result [, int row [, int result_type]])\",\n        \"Get a row as an enumerated array\"\n    ],\n    \"pg_field_is_null\": [\n        \"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\n        \"Test if a field is NULL\"\n    ],\n    \"pg_field_name\": [\n        \"string pg_field_name(resource result, int field_number)\",\n        \"Returns the name of the field\"\n    ],\n    \"pg_field_num\": [\n        \"int pg_field_num(resource result, string field_name)\",\n        \"Returns the field number of the named field\"\n    ],\n    \"pg_field_prtlen\": [\n        \"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\n        \"Returns the printed length\"\n    ],\n    \"pg_field_size\": [\n        \"int pg_field_size(resource result, int field_number)\",\n        \"Returns the internal size of the field\"\n    ],\n    \"pg_field_table\": [\n        \"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\n        \"Returns the name of the table field belongs to, or table's oid if oid_only is true\"\n    ],\n    \"pg_field_type\": [\n        \"string pg_field_type(resource result, int field_number)\",\n        \"Returns the type name for the given field\"\n    ],\n    \"pg_field_type_oid\": [\n        \"string pg_field_type_oid(resource result, int field_number)\",\n        \"Returns the type oid for the given field\"\n    ],\n    \"pg_free_result\": [\n        \"bool pg_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"pg_get_notify\": [\n        \"array pg_get_notify([resource connection[, result_type]])\",\n        \"Get asynchronous notification\"\n    ],\n    \"pg_get_pid\": [\n        \"int pg_get_pid([resource connection)\",\n        \"Get backend(server) pid\"\n    ],\n    \"pg_get_result\": [\n        \"resource pg_get_result(resource connection)\",\n        \"Get asynchronous query result\"\n    ],\n    \"pg_host\": [\n        \"string pg_host([resource connection])\",\n        \"Returns the host name associated with the connection\"\n    ],\n    \"pg_insert\": [\n        \"mixed pg_insert(resource db, string table, array values[, int options])\",\n        \"Insert values (filed=>value) to table\"\n    ],\n    \"pg_last_error\": [\n        \"string pg_last_error([resource connection])\",\n        \"Get the error message string\"\n    ],\n    \"pg_last_notice\": [\n        \"string pg_last_notice(resource connection)\",\n        \"Returns the last notice set by the backend\"\n    ],\n    \"pg_last_oid\": [\n        \"string pg_last_oid(resource result)\",\n        \"Returns the last object identifier\"\n    ],\n    \"pg_lo_close\": [\n        \"bool pg_lo_close(resource large_object)\",\n        \"Close a large object\"\n    ],\n    \"pg_lo_create\": [\n        \"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\n        \"Create a large object\"\n    ],\n    \"pg_lo_export\": [\n        \"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\n        \"Export large object direct to filesystem\"\n    ],\n    \"pg_lo_import\": [\n        \"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\n        \"Import large object direct from filesystem\"\n    ],\n    \"pg_lo_open\": [\n        \"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\n        \"Open a large object and return fd\"\n    ],\n    \"pg_lo_read\": [\n        \"string pg_lo_read(resource large_object [, int len])\",\n        \"Read a large object\"\n    ],\n    \"pg_lo_read_all\": [\n        \"int pg_lo_read_all(resource large_object)\",\n        \"Read a large object and send straight to browser\"\n    ],\n    \"pg_lo_seek\": [\n        \"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\n        \"Seeks position of large object\"\n    ],\n    \"pg_lo_tell\": [\n        \"int pg_lo_tell(resource large_object)\",\n        \"Returns current position of large object\"\n    ],\n    \"pg_lo_unlink\": [\n        \"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\n        \"Delete a large object\"\n    ],\n    \"pg_lo_write\": [\n        \"int pg_lo_write(resource large_object, string buf [, int len])\",\n        \"Write a large object\"\n    ],\n    \"pg_meta_data\": [\n        \"array pg_meta_data(resource db, string table)\",\n        \"Get meta_data\"\n    ],\n    \"pg_num_fields\": [\n        \"int pg_num_fields(resource result)\",\n        \"Return the number of fields in the result\"\n    ],\n    \"pg_num_rows\": [\n        \"int pg_num_rows(resource result)\",\n        \"Return the number of rows in the result\"\n    ],\n    \"pg_options\": [\n        \"string pg_options([resource connection])\",\n        \"Get the options associated with the connection\"\n    ],\n    \"pg_parameter_status\": [\n        \"string|false pg_parameter_status([resource connection,] string param_name)\",\n        \"Returns the value of a server parameter\"\n    ],\n    \"pg_pconnect\": [\n        \"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a persistent PostgreSQL connection\"\n    ],\n    \"pg_ping\": [\n        \"bool pg_ping([resource connection])\",\n        \"Ping database. If connection is bad, try to reconnect.\"\n    ],\n    \"pg_port\": [\n        \"int pg_port([resource connection])\",\n        \"Return the port number associated with the connection\"\n    ],\n    \"pg_prepare\": [\n        \"resource pg_prepare([resource connection,] string stmtname, string query)\",\n        \"Prepare a query for future execution\"\n    ],\n    \"pg_put_line\": [\n        \"bool pg_put_line([resource connection,] string query)\",\n        \"Send null-terminated string to backend server\"\n    ],\n    \"pg_query\": [\n        \"resource pg_query([resource connection,] string query)\",\n        \"Execute a query\"\n    ],\n    \"pg_query_params\": [\n        \"resource pg_query_params([resource connection,] string query, array params)\",\n        \"Execute a query\"\n    ],\n    \"pg_result_error\": [\n        \"string pg_result_error(resource result)\",\n        \"Get error message associated with result\"\n    ],\n    \"pg_result_error_field\": [\n        \"string pg_result_error_field(resource result, int fieldcode)\",\n        \"Get error message field associated with result\"\n    ],\n    \"pg_result_seek\": [\n        \"bool pg_result_seek(resource result, int offset)\",\n        \"Set internal row offset\"\n    ],\n    \"pg_result_status\": [\n        \"mixed pg_result_status(resource result[, long result_type])\",\n        \"Get status of query result\"\n    ],\n    \"pg_select\": [\n        \"mixed pg_select(resource db, string table, array ids[, int options])\",\n        \"Select records that has ids (id=>value)\"\n    ],\n    \"pg_send_execute\": [\n        \"bool pg_send_execute(resource connection, string stmtname, array params)\",\n        \"Executes prevriously prepared stmtname asynchronously\"\n    ],\n    \"pg_send_prepare\": [\n        \"bool pg_send_prepare(resource connection, string stmtname, string query)\",\n        \"Asynchronously prepare a query for future execution\"\n    ],\n    \"pg_send_query\": [\n        \"bool pg_send_query(resource connection, string query)\",\n        \"Send asynchronous query\"\n    ],\n    \"pg_send_query_params\": [\n        \"bool pg_send_query_params(resource connection, string query, array params)\",\n        \"Send asynchronous parameterized query\"\n    ],\n    \"pg_set_client_encoding\": [\n        \"int pg_set_client_encoding([resource connection,] string encoding)\",\n        \"Set client encoding\"\n    ],\n    \"pg_set_error_verbosity\": [\n        \"int pg_set_error_verbosity([resource connection,] int verbosity)\",\n        \"Set error verbosity\"\n    ],\n    \"pg_trace\": [\n        \"bool pg_trace(string filename [, string mode [, resource connection]])\",\n        \"Enable tracing a PostgreSQL connection\"\n    ],\n    \"pg_transaction_status\": [\n        \"int pg_transaction_status(resource connnection)\",\n        \"Get transaction status\"\n    ],\n    \"pg_tty\": [\n        \"string pg_tty([resource connection])\",\n        \"Return the tty name associated with the connection\"\n    ],\n    \"pg_unescape_bytea\": [\n        \"string pg_unescape_bytea(string data)\",\n        \"Unescape binary for bytea type\"\n    ],\n    \"pg_untrace\": [\n        \"bool pg_untrace([resource connection])\",\n        \"Disable tracing of a PostgreSQL connection\"\n    ],\n    \"pg_update\": [\n        \"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\n        \"Update table using values (field=>value) and ids (id=>value)\"\n    ],\n    \"pg_version\": [\n        \"array pg_version([resource connection])\",\n        \"Returns an array with client, protocol and server version (when available)\"\n    ],\n    \"php_egg_logo_guid\": [\n        \"string php_egg_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_ini_loaded_file\": [\n        \"string php_ini_loaded_file(void)\",\n        \"Return the actual loaded ini filename\"\n    ],\n    \"php_ini_scanned_files\": [\n        \"string php_ini_scanned_files(void)\",\n        \"Return comma-separated string of .ini files parsed from the additional ini dir\"\n    ],\n    \"php_logo_guid\": [\n        \"string php_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_real_logo_guid\": [\n        \"string php_real_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_sapi_name\": [\n        \"string php_sapi_name(void)\",\n        \"Return the current SAPI module name\"\n    ],\n    \"php_snmpv3\": [\n        \"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\n        \"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"\n    ],\n    \"php_strip_whitespace\": [\n        \"string php_strip_whitespace(string file_name)\",\n        \"Return source with stripped comments and whitespace\"\n    ],\n    \"php_uname\": [\n        \"string php_uname(void)\",\n        \"Return information about the system PHP was built on\"\n    ],\n    \"phpcredits\": [\n        \"void phpcredits([int flag])\",\n        \"Prints the list of people who've contributed to the PHP project\"\n    ],\n    \"phpinfo\": [\n        \"void phpinfo([int what])\",\n        \"Output a page of useful information about PHP and the current request\"\n    ],\n    \"phpversion\": [\n        \"string phpversion([string extension])\",\n        \"Return the current PHP version\"\n    ],\n    \"pi\": [\n        \"float pi(void)\",\n        \"Returns an approximation of pi\"\n    ],\n    \"png2wbmp\": [\n        \"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert PNG image to WBMP image\"\n    ],\n    \"popen\": [\n        \"resource popen(string command, string mode)\",\n        \"Execute a command and open either a read or a write pipe to it\"\n    ],\n    \"posix_access\": [\n        \"bool posix_access(string file [, int mode])\",\n        \"Determine accessibility of a file (POSIX.1 5.6.3)\"\n    ],\n    \"posix_ctermid\": [\n        \"string posix_ctermid(void)\",\n        \"Generate terminal path name (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_get_last_error\": [\n        \"int posix_get_last_error(void)\",\n        \"Retrieve the error number set by the last posix function which failed.\"\n    ],\n    \"posix_getcwd\": [\n        \"string posix_getcwd(void)\",\n        \"Get working directory pathname (POSIX.1, 5.2.2)\"\n    ],\n    \"posix_getegid\": [\n        \"int posix_getegid(void)\",\n        \"Get the current effective group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_geteuid\": [\n        \"int posix_geteuid(void)\",\n        \"Get the current effective user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgid\": [\n        \"int posix_getgid(void)\",\n        \"Get the current group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgrgid\": [\n        \"array posix_getgrgid(long gid)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgrnam\": [\n        \"array posix_getgrnam(string groupname)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgroups\": [\n        \"array posix_getgroups(void)\",\n        \"Get supplementary group id's (POSIX.1, 4.2.3)\"\n    ],\n    \"posix_getlogin\": [\n        \"string posix_getlogin(void)\",\n        \"Get user name (POSIX.1, 4.2.4)\"\n    ],\n    \"posix_getpgid\": [\n        \"int posix_getpgid(void)\",\n        \"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"\n    ],\n    \"posix_getpgrp\": [\n        \"int posix_getpgrp(void)\",\n        \"Get current process group id (POSIX.1, 4.3.1)\"\n    ],\n    \"posix_getpid\": [\n        \"int posix_getpid(void)\",\n        \"Get the current process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getppid\": [\n        \"int posix_getppid(void)\",\n        \"Get the parent process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getpwnam\": [\n        \"array posix_getpwnam(string groupname)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getpwuid\": [\n        \"array posix_getpwuid(long uid)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getrlimit\": [\n        \"array posix_getrlimit(void)\",\n        \"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"\n    ],\n    \"posix_getsid\": [\n        \"int posix_getsid(void)\",\n        \"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"\n    ],\n    \"posix_getuid\": [\n        \"int posix_getuid(void)\",\n        \"Get the current user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_initgroups\": [\n        \"bool posix_initgroups(string name, int base_group_id)\",\n        \"Calculate the group access list for the user specified in name.\"\n    ],\n    \"posix_isatty\": [\n        \"bool posix_isatty(int fd)\",\n        \"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_kill\": [\n        \"bool posix_kill(int pid, int sig)\",\n        \"Send a signal to a process (POSIX.1, 3.3.2)\"\n    ],\n    \"posix_mkfifo\": [\n        \"bool posix_mkfifo(string pathname, int mode)\",\n        \"Make a FIFO special file (POSIX.1, 5.4.2)\"\n    ],\n    \"posix_mknod\": [\n        \"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\n        \"Make a special or ordinary file (POSIX.1)\"\n    ],\n    \"posix_setegid\": [\n        \"bool posix_setegid(long uid)\",\n        \"Set effective group id\"\n    ],\n    \"posix_seteuid\": [\n        \"bool posix_seteuid(long uid)\",\n        \"Set effective user id\"\n    ],\n    \"posix_setgid\": [\n        \"bool posix_setgid(int uid)\",\n        \"Set group id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_setpgid\": [\n        \"bool posix_setpgid(int pid, int pgid)\",\n        \"Set process group id for job control (POSIX.1, 4.3.3)\"\n    ],\n    \"posix_setsid\": [\n        \"int posix_setsid(void)\",\n        \"Create session and set process group id (POSIX.1, 4.3.2)\"\n    ],\n    \"posix_setuid\": [\n        \"bool posix_setuid(long uid)\",\n        \"Set user id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_strerror\": [\n        \"string posix_strerror(int errno)\",\n        \"Retrieve the system error message associated with the given errno.\"\n    ],\n    \"posix_times\": [\n        \"array posix_times(void)\",\n        \"Get process times (POSIX.1, 4.5.2)\"\n    ],\n    \"posix_ttyname\": [\n        \"string posix_ttyname(int fd)\",\n        \"Determine terminal device name (POSIX.1, 4.7.2)\"\n    ],\n    \"posix_uname\": [\n        \"array posix_uname(void)\",\n        \"Get system name (POSIX.1, 4.4.1)\"\n    ],\n    \"pow\": [\n        \"number pow(number base, number exponent)\",\n        \"Returns base raised to the power of exponent. Returns integer result when possible\"\n    ],\n    \"preg_filter\": [\n        \"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement and only return matches.\"\n    ],\n    \"preg_grep\": [\n        \"array preg_grep(string regex, array input [, int flags])\",\n        \"Searches array and returns entries which match regex\"\n    ],\n    \"preg_last_error\": [\n        \"int preg_last_error()\",\n        \"Returns the error code of the last regexp execution.\"\n    ],\n    \"preg_match\": [\n        \"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\n        \"Perform a Perl-style regular expression match\"\n    ],\n    \"preg_match_all\": [\n        \"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\n        \"Perform a Perl-style global regular expression match\"\n    ],\n    \"preg_quote\": [\n        \"string preg_quote(string str [, string delim_char])\",\n        \"Quote regular expression characters plus an optional character\"\n    ],\n    \"preg_replace\": [\n        \"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement.\"\n    ],\n    \"preg_replace_callback\": [\n        \"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement using replacement callback.\"\n    ],\n    \"preg_split\": [\n        \"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\n        \"Split string into an array using a perl-style regular expression as a delimiter\"\n    ],\n    \"prev\": [\n        \"mixed prev(array array_arg)\",\n        \"Move array argument's internal pointer to the previous element and return it\"\n    ],\n    \"print\": [\n        \"int print(string arg)\",\n        \"Output a string\"\n    ],\n    \"print_r\": [\n        \"mixed print_r(mixed var [, bool return])\",\n        \"Prints out or returns information about the specified variable\"\n    ],\n    \"printf\": [\n        \"int printf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string\"\n    ],\n    \"proc_close\": [\n        \"int proc_close(resource process)\",\n        \"close a process opened by proc_open\"\n    ],\n    \"proc_get_status\": [\n        \"array proc_get_status(resource process)\",\n        \"get information about a process opened by proc_open\"\n    ],\n    \"proc_nice\": [\n        \"bool proc_nice(int priority)\",\n        \"Change the priority of the current process\"\n    ],\n    \"proc_open\": [\n        \"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\n        \"Run a process with more control over it's file descriptors\"\n    ],\n    \"proc_terminate\": [\n        \"bool proc_terminate(resource process [, long signal])\",\n        \"kill a process opened by proc_open\"\n    ],\n    \"property_exists\": [\n        \"bool property_exists(mixed object_or_class, string property_name)\",\n        \"Checks if the object or class has a property\"\n    ],\n    \"pspell_add_to_personal\": [\n        \"bool pspell_add_to_personal(int pspell, string word)\",\n        \"Adds a word to a personal list\"\n    ],\n    \"pspell_add_to_session\": [\n        \"bool pspell_add_to_session(int pspell, string word)\",\n        \"Adds a word to the current session\"\n    ],\n    \"pspell_check\": [\n        \"bool pspell_check(int pspell, string word)\",\n        \"Returns true if word is valid\"\n    ],\n    \"pspell_clear_session\": [\n        \"bool pspell_clear_session(int pspell)\",\n        \"Clears the current session\"\n    ],\n    \"pspell_config_create\": [\n        \"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\n        \"Create a new config to be used later to create a manager\"\n    ],\n    \"pspell_config_data_dir\": [\n        \"bool pspell_config_data_dir(int conf, string directory)\",\n        \"location of language data files\"\n    ],\n    \"pspell_config_dict_dir\": [\n        \"bool pspell_config_dict_dir(int conf, string directory)\",\n        \"location of the main word list\"\n    ],\n    \"pspell_config_ignore\": [\n        \"bool pspell_config_ignore(int conf, int ignore)\",\n        \"Ignore words <= n chars\"\n    ],\n    \"pspell_config_mode\": [\n        \"bool pspell_config_mode(int conf, long mode)\",\n        \"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"\n    ],\n    \"pspell_config_personal\": [\n        \"bool pspell_config_personal(int conf, string personal)\",\n        \"Use a personal dictionary for this config\"\n    ],\n    \"pspell_config_repl\": [\n        \"bool pspell_config_repl(int conf, string repl)\",\n        \"Use a personal dictionary with replacement pairs for this config\"\n    ],\n    \"pspell_config_runtogether\": [\n        \"bool pspell_config_runtogether(int conf, bool runtogether)\",\n        \"Consider run-together words as valid components\"\n    ],\n    \"pspell_config_save_repl\": [\n        \"bool pspell_config_save_repl(int conf, bool save)\",\n        \"Save replacement pairs when personal list is saved for this config\"\n    ],\n    \"pspell_new\": [\n        \"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary\"\n    ],\n    \"pspell_new_config\": [\n        \"int pspell_new_config(int config)\",\n        \"Load a dictionary based on the given config\"\n    ],\n    \"pspell_new_personal\": [\n        \"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary with a personal wordlist\"\n    ],\n    \"pspell_save_wordlist\": [\n        \"bool pspell_save_wordlist(int pspell)\",\n        \"Saves the current (personal) wordlist\"\n    ],\n    \"pspell_store_replacement\": [\n        \"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\n        \"Notify the dictionary of a user-selected replacement\"\n    ],\n    \"pspell_suggest\": [\n        \"array pspell_suggest(int pspell, string word)\",\n        \"Returns array of suggestions\"\n    ],\n    \"putenv\": [\n        \"bool putenv(string setting)\",\n        \"Set the value of an environment variable\"\n    ],\n    \"quoted_printable_decode\": [\n        \"string quoted_printable_decode(string str)\",\n        \"Convert a quoted-printable string to an 8 bit string\"\n    ],\n    \"quoted_printable_encode\": [\n        \"string quoted_printable_encode(string str) */\",\n        \"PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}\"\n    ],\n    \"quotemeta\": [\n        \"string quotemeta(string str)\",\n        \"Quotes meta characters\"\n    ],\n    \"rad2deg\": [\n        \"float rad2deg(float number)\",\n        \"Converts the radian number to the equivalent number in degrees\"\n    ],\n    \"rand\": [\n        \"int rand([int min, int max])\",\n        \"Returns a random number\"\n    ],\n    \"range\": [\n        \"array range(mixed low, mixed high[, int step])\",\n        \"Create an array containing the range of integers or characters from low to high (inclusive)\"\n    ],\n    \"rawurldecode\": [\n        \"string rawurldecode(string str)\",\n        \"Decodes URL-encodes string\"\n    ],\n    \"rawurlencode\": [\n        \"string rawurlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"readdir\": [\n        \"string readdir([resource dir_handle])\",\n        \"Read directory entry from dir_handle\"\n    ],\n    \"readfile\": [\n        \"int readfile(string filename [, bool use_include_path[, resource context]])\",\n        \"Output a file or a URL\"\n    ],\n    \"readgzfile\": [\n        \"int readgzfile(string filename [, int use_include_path])\",\n        \"Output a .gz-file\"\n    ],\n    \"readline\": [\n        \"string readline([string prompt])\",\n        \"Reads a line\"\n    ],\n    \"readline_add_history\": [\n        \"bool readline_add_history(string prompt)\",\n        \"Adds a line to the history\"\n    ],\n    \"readline_callback_handler_install\": [\n        \"void readline_callback_handler_install(string prompt, mixed callback)\",\n        \"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"\n    ],\n    \"readline_callback_handler_remove\": [\n        \"bool readline_callback_handler_remove()\",\n        \"Removes a previously installed callback handler and restores terminal settings\"\n    ],\n    \"readline_callback_read_char\": [\n        \"void readline_callback_read_char()\",\n        \"Informs the readline callback interface that a character is ready for input\"\n    ],\n    \"readline_clear_history\": [\n        \"bool readline_clear_history(void)\",\n        \"Clears the history\"\n    ],\n    \"readline_completion_function\": [\n        \"bool readline_completion_function(string funcname)\",\n        \"Readline completion function?\"\n    ],\n    \"readline_info\": [\n        \"mixed readline_info([string varname [, string newvalue]])\",\n        \"Gets/sets various internal readline variables.\"\n    ],\n    \"readline_list_history\": [\n        \"array readline_list_history(void)\",\n        \"Lists the history\"\n    ],\n    \"readline_on_new_line\": [\n        \"void readline_on_new_line(void)\",\n        \"Inform readline that the cursor has moved to a new line\"\n    ],\n    \"readline_read_history\": [\n        \"bool readline_read_history([string filename])\",\n        \"Reads the history\"\n    ],\n    \"readline_redisplay\": [\n        \"void readline_redisplay(void)\",\n        \"Ask readline to redraw the display\"\n    ],\n    \"readline_write_history\": [\n        \"bool readline_write_history([string filename])\",\n        \"Writes the history\"\n    ],\n    \"readlink\": [\n        \"string readlink(string filename)\",\n        \"Return the target of a symbolic link\"\n    ],\n    \"realpath\": [\n        \"string realpath(string path)\",\n        \"Return the resolved path\"\n    ],\n    \"realpath_cache_get\": [\n        \"bool realpath_cache_get()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"realpath_cache_size\": [\n        \"bool realpath_cache_size()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"recode_file\": [\n        \"bool recode_file(string request, resource input, resource output)\",\n        \"Recode file input into file output according to request\"\n    ],\n    \"recode_string\": [\n        \"string recode_string(string request, string str)\",\n        \"Recode string str according to request string\"\n    ],\n    \"register_shutdown_function\": [\n        \"void register_shutdown_function(string function_name)\",\n        \"Register a user-level function to be called on request termination\"\n    ],\n    \"register_tick_function\": [\n        \"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\n        \"Registers a tick callback function\"\n    ],\n    \"rename\": [\n        \"bool rename(string old_name, string new_name[, resource context])\",\n        \"Rename a file\"\n    ],\n    \"require\": [\n        \"bool require(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"require_once\": [\n        \"bool require_once(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"reset\": [\n        \"mixed reset(array array_arg)\",\n        \"Set array argument's internal pointer to the first element and return it\"\n    ],\n    \"restore_error_handler\": [\n        \"void restore_error_handler(void)\",\n        \"Restores the previously defined error handler function\"\n    ],\n    \"restore_exception_handler\": [\n        \"void restore_exception_handler(void)\",\n        \"Restores the previously defined exception handler function\"\n    ],\n    \"restore_include_path\": [\n        \"void restore_include_path()\",\n        \"Restore the value of the include_path configuration option\"\n    ],\n    \"rewind\": [\n        \"bool rewind(resource fp)\",\n        \"Rewind the position of a file pointer\"\n    ],\n    \"rewinddir\": [\n        \"void rewinddir([resource dir_handle])\",\n        \"Rewind dir_handle back to the start\"\n    ],\n    \"rmdir\": [\n        \"bool rmdir(string dirname[, resource context])\",\n        \"Remove a directory\"\n    ],\n    \"round\": [\n        \"float round(float number [, int precision [, int mode]])\",\n        \"Returns the number rounded to specified precision\"\n    ],\n    \"rsort\": [\n        \"bool rsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order\"\n    ],\n    \"rtrim\": [\n        \"string rtrim(string str [, string character_mask])\",\n        \"Removes trailing whitespace\"\n    ],\n    \"scandir\": [\n        \"array scandir(string dir [, int sorting_order [, resource context]])\",\n        \"List files & directories inside the specified path\"\n    ],\n    \"sem_acquire\": [\n        \"bool sem_acquire(resource id)\",\n        \"Acquires the semaphore with the given id, blocking if necessary\"\n    ],\n    \"sem_get\": [\n        \"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\n        \"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"\n    ],\n    \"sem_release\": [\n        \"bool sem_release(resource id)\",\n        \"Releases the semaphore with the given id\"\n    ],\n    \"sem_remove\": [\n        \"bool sem_remove(resource id)\",\n        \"Removes semaphore from Unix systems\"\n    ],\n    \"serialize\": [\n        \"string serialize(mixed variable)\",\n        \"Returns a string representation of variable (which can later be unserialized)\"\n    ],\n    \"session_cache_expire\": [\n        \"int session_cache_expire([int new_cache_expire])\",\n        \"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"\n    ],\n    \"session_cache_limiter\": [\n        \"string session_cache_limiter([string new_cache_limiter])\",\n        \"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"\n    ],\n    \"session_decode\": [\n        \"bool session_decode(string data)\",\n        \"Deserializes data and reinitializes the variables\"\n    ],\n    \"session_destroy\": [\n        \"bool session_destroy(void)\",\n        \"Destroy the current session and all data associated with it\"\n    ],\n    \"session_encode\": [\n        \"string session_encode(void)\",\n        \"Serializes the current setup and returns the serialized representation\"\n    ],\n    \"session_get_cookie_params\": [\n        \"array session_get_cookie_params(void)\",\n        \"Return the session cookie parameters\"\n    ],\n    \"session_id\": [\n        \"string session_id([string newid])\",\n        \"Return the current session id. If newid is given, the session id is replaced with newid\"\n    ],\n    \"session_is_registered\": [\n        \"bool session_is_registered(string varname)\",\n        \"Checks if a variable is registered in session\"\n    ],\n    \"session_module_name\": [\n        \"string session_module_name([string newname])\",\n        \"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"\n    ],\n    \"session_name\": [\n        \"string session_name([string newname])\",\n        \"Return the current session name. If newname is given, the session name is replaced with newname\"\n    ],\n    \"session_regenerate_id\": [\n        \"bool session_regenerate_id([bool delete_old_session])\",\n        \"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"\n    ],\n    \"session_register\": [\n        \"bool session_register(mixed var_names [, mixed ...])\",\n        \"Adds varname(s) to the list of variables which are freezed at the session end\"\n    ],\n    \"session_save_path\": [\n        \"string session_save_path([string newname])\",\n        \"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"\n    ],\n    \"session_set_cookie_params\": [\n        \"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\n        \"Set session cookie parameters\"\n    ],\n    \"session_set_save_handler\": [\n        \"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\n        \"Sets user-level functions\"\n    ],\n    \"session_start\": [\n        \"bool session_start(void)\",\n        \"Begin session - reinitializes freezed variables, registers browsers etc\"\n    ],\n    \"session_unregister\": [\n        \"bool session_unregister(string varname)\",\n        \"Removes varname from the list of variables which are freezed at the session end\"\n    ],\n    \"session_unset\": [\n        \"void session_unset(void)\",\n        \"Unset all registered variables\"\n    ],\n    \"session_write_close\": [\n        \"void session_write_close(void)\",\n        \"Write session data and end session\"\n    ],\n    \"set_error_handler\": [\n        \"string set_error_handler(string error_handler [, int error_types])\",\n        \"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"\n    ],\n    \"set_exception_handler\": [\n        \"string set_exception_handler(callable exception_handler)\",\n        \"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"\n    ],\n    \"set_include_path\": [\n        \"string set_include_path(string new_include_path)\",\n        \"Sets the include_path configuration option\"\n    ],\n    \"set_magic_quotes_runtime\": [\n        \"bool set_magic_quotes_runtime(int new_setting)\",\n        \"Set the current active configuration setting of magic_quotes_runtime and return previous\"\n    ],\n    \"set_time_limit\": [\n        \"bool set_time_limit(int seconds)\",\n        \"Sets the maximum time a script can run\"\n    ],\n    \"setcookie\": [\n        \"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie\"\n    ],\n    \"setlocale\": [\n        \"string setlocale(mixed category, string locale [, string ...])\",\n        \"Set locale information\"\n    ],\n    \"setrawcookie\": [\n        \"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie with no url encoding of the value\"\n    ],\n    \"settype\": [\n        \"bool settype(mixed var, string type)\",\n        \"Set the type of the variable\"\n    ],\n    \"sha1\": [\n        \"string sha1(string str [, bool raw_output])\",\n        \"Calculate the sha1 hash of a string\"\n    ],\n    \"sha1_file\": [\n        \"string sha1_file(string filename [, bool raw_output])\",\n        \"Calculate the sha1 hash of given filename\"\n    ],\n    \"shell_exec\": [\n        \"string shell_exec(string cmd)\",\n        \"Execute command via shell and return complete output as string\"\n    ],\n    \"shm_attach\": [\n        \"int shm_attach(int key [, int memsize [, int perm]])\",\n        \"Creates or open a shared memory segment\"\n    ],\n    \"shm_detach\": [\n        \"bool shm_detach(resource shm_identifier)\",\n        \"Disconnects from shared memory segment\"\n    ],\n    \"shm_get_var\": [\n        \"mixed shm_get_var(resource id, int variable_key)\",\n        \"Returns a variable from shared memory\"\n    ],\n    \"shm_has_var\": [\n        \"bool shm_has_var(resource id, int variable_key)\",\n        \"Checks whether a specific entry exists\"\n    ],\n    \"shm_put_var\": [\n        \"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\n        \"Inserts or updates a variable in shared memory\"\n    ],\n    \"shm_remove\": [\n        \"bool shm_remove(resource shm_identifier)\",\n        \"Removes shared memory from Unix systems\"\n    ],\n    \"shm_remove_var\": [\n        \"bool shm_remove_var(resource id, int variable_key)\",\n        \"Removes variable from shared memory\"\n    ],\n    \"shmop_close\": [\n        \"void shmop_close (int shmid)\",\n        \"closes a shared memory segment\"\n    ],\n    \"shmop_delete\": [\n        \"bool shmop_delete (int shmid)\",\n        \"mark segment for deletion\"\n    ],\n    \"shmop_open\": [\n        \"int shmop_open (int key, string flags, int mode, int size)\",\n        \"gets and attaches a shared memory segment\"\n    ],\n    \"shmop_read\": [\n        \"string shmop_read (int shmid, int start, int count)\",\n        \"reads from a shm segment\"\n    ],\n    \"shmop_size\": [\n        \"int shmop_size (int shmid)\",\n        \"returns the shm size\"\n    ],\n    \"shmop_write\": [\n        \"int shmop_write (int shmid, string data, int offset)\",\n        \"writes to a shared memory segment\"\n    ],\n    \"shuffle\": [\n        \"bool shuffle(array array_arg)\",\n        \"Randomly shuffle the contents of an array\"\n    ],\n    \"similar_text\": [\n        \"int similar_text(string str1, string str2 [, float percent])\",\n        \"Calculates the similarity between two strings\"\n    ],\n    \"simplexml_import_dom\": [\n        \"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"simplexml_load_file\": [\n        \"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a filename and return a simplexml_element object to allow for processing\"\n    ],\n    \"simplexml_load_string\": [\n        \"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a string and return a simplexml_element object to allow for processing\"\n    ],\n    \"sin\": [\n        \"float sin(float number)\",\n        \"Returns the sine of the number in radians\"\n    ],\n    \"sinh\": [\n        \"float sinh(float number)\",\n        \"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"\n    ],\n    \"sleep\": [\n        \"void sleep(int seconds)\",\n        \"Delay for a given number of seconds\"\n    ],\n    \"smfi_addheader\": [\n        \"bool smfi_addheader(string headerf, string headerv)\",\n        \"Adds a header to the current message.\"\n    ],\n    \"smfi_addrcpt\": [\n        \"bool smfi_addrcpt(string rcpt)\",\n        \"Add a recipient to the message envelope.\"\n    ],\n    \"smfi_chgheader\": [\n        \"bool smfi_chgheader(string headerf, string headerv)\",\n        \"Changes a header's value for the current message.\"\n    ],\n    \"smfi_delrcpt\": [\n        \"bool smfi_delrcpt(string rcpt)\",\n        \"Removes the named recipient from the current message's envelope.\"\n    ],\n    \"smfi_getsymval\": [\n        \"string smfi_getsymval(string macro)\",\n        \"Returns the value of the given macro or NULL if the macro is not defined.\"\n    ],\n    \"smfi_replacebody\": [\n        \"bool smfi_replacebody(string body)\",\n        \"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"\n    ],\n    \"smfi_setflags\": [\n        \"void smfi_setflags(long flags)\",\n        \"Sets the flags describing the actions the filter may take.\"\n    ],\n    \"smfi_setreply\": [\n        \"bool smfi_setreply(string rcode, string xcode, string message)\",\n        \"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"\n    ],\n    \"smfi_settimeout\": [\n        \"void smfi_settimeout(long timeout)\",\n        \"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"\n    ],\n    \"snmp2_get\": [\n        \"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_getnext\": [\n        \"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_real_walk\": [\n        \"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp2_set\": [\n        \"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmp2_walk\": [\n        \"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"snmp3_get\": [\n        \"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_getnext\": [\n        \"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_real_walk\": [\n        \"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_set\": [\n        \"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_walk\": [\n        \"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp_get_quick_print\": [\n        \"bool snmp_get_quick_print(void)\",\n        \"Return the current status of quick_print\"\n    ],\n    \"snmp_get_valueretrieval\": [\n        \"int snmp_get_valueretrieval()\",\n        \"Return the method how the SNMP values will be returned\"\n    ],\n    \"snmp_read_mib\": [\n        \"int snmp_read_mib(string filename)\",\n        \"Reads and parses a MIB file into the active MIB tree.\"\n    ],\n    \"snmp_set_enum_print\": [\n        \"void snmp_set_enum_print(int enum_print)\",\n        \"Return all values that are enums with their enum value instead of the raw integer\"\n    ],\n    \"snmp_set_oid_output_format\": [\n        \"void snmp_set_oid_output_format(int oid_format)\",\n        \"Set the OID output format.\"\n    ],\n    \"snmp_set_quick_print\": [\n        \"void snmp_set_quick_print(int quick_print)\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp_set_valueretrieval\": [\n        \"void snmp_set_valueretrieval(int method)\",\n        \"Specify the method how the SNMP values will be returned\"\n    ],\n    \"snmpget\": [\n        \"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmpgetnext\": [\n        \"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmprealwalk\": [\n        \"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmpset\": [\n        \"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmpwalk\": [\n        \"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"socket_accept\": [\n        \"resource socket_accept(resource socket)\",\n        \"Accepts a connection on the listening socket fd\"\n    ],\n    \"socket_bind\": [\n        \"bool socket_bind(resource socket, string addr [, int port])\",\n        \"Binds an open socket to a listening port, port is only specified in AF_INET family.\"\n    ],\n    \"socket_clear_error\": [\n        \"void socket_clear_error([resource socket])\",\n        \"Clears the error on the socket or the last error code.\"\n    ],\n    \"socket_close\": [\n        \"void socket_close(resource socket)\",\n        \"Closes a file descriptor\"\n    ],\n    \"socket_connect\": [\n        \"bool socket_connect(resource socket, string addr [, int port])\",\n        \"Opens a connection to addr:port on the socket specified by socket\"\n    ],\n    \"socket_create\": [\n        \"resource socket_create(int domain, int type, int protocol)\",\n        \"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"\n    ],\n    \"socket_create_listen\": [\n        \"resource socket_create_listen(int port[, int backlog])\",\n        \"Opens a socket on port to accept connections\"\n    ],\n    \"socket_create_pair\": [\n        \"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\n        \"Creates a pair of indistinguishable sockets and stores them in fds.\"\n    ],\n    \"socket_get_option\": [\n        \"mixed socket_get_option(resource socket, int level, int optname)\",\n        \"Gets socket options for the socket\"\n    ],\n    \"socket_getpeername\": [\n        \"bool socket_getpeername(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_getsockname\": [\n        \"bool socket_getsockname(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_last_error\": [\n        \"int socket_last_error([resource socket])\",\n        \"Returns the last socket error (either the last used or the provided socket resource)\"\n    ],\n    \"socket_listen\": [\n        \"bool socket_listen(resource socket[, int backlog])\",\n        \"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"\n    ],\n    \"socket_read\": [\n        \"string socket_read(resource socket, int length [, int type])\",\n        \"Reads a maximum of length bytes from socket\"\n    ],\n    \"socket_recv\": [\n        \"int socket_recv(resource socket, string &buf, int len, int flags)\",\n        \"Receives data from a connected socket\"\n    ],\n    \"socket_recvfrom\": [\n        \"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\n        \"Receives data from a socket, connected or not\"\n    ],\n    \"socket_select\": [\n        \"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"socket_send\": [\n        \"int socket_send(resource socket, string buf, int len, int flags)\",\n        \"Sends data to a connected socket\"\n    ],\n    \"socket_sendto\": [\n        \"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\n        \"Sends a message to a socket, whether it is connected or not\"\n    ],\n    \"socket_set_block\": [\n        \"bool socket_set_block(resource socket)\",\n        \"Sets blocking mode on a socket resource\"\n    ],\n    \"socket_set_nonblock\": [\n        \"bool socket_set_nonblock(resource socket)\",\n        \"Sets nonblocking mode on a socket resource\"\n    ],\n    \"socket_set_option\": [\n        \"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\n        \"Sets socket options for the socket\"\n    ],\n    \"socket_shutdown\": [\n        \"bool socket_shutdown(resource socket[, int how])\",\n        \"Shuts down a socket for receiving, sending, or both.\"\n    ],\n    \"socket_strerror\": [\n        \"string socket_strerror(int errno)\",\n        \"Returns a string describing an error\"\n    ],\n    \"socket_write\": [\n        \"int socket_write(resource socket, string buf[, int length])\",\n        \"Writes the buffer to the socket resource, length is optional\"\n    ],\n    \"solid_fetch_prev\": [\n        \"bool solid_fetch_prev(resource result_id)\",\n        \"\"\n    ],\n    \"sort\": [\n        \"bool sort(array &array_arg [, int sort_flags])\",\n        \"Sort an array\"\n    ],\n    \"soundex\": [\n        \"string soundex(string str)\",\n        \"Calculate the soundex key of a string\"\n    ],\n    \"spl_autoload\": [\n        \"void spl_autoload(string class_name [, string file_extensions])\",\n        \"Default implementation for __autoload()\"\n    ],\n    \"spl_autoload_call\": [\n        \"void spl_autoload_call(string class_name)\",\n        \"Try all registerd autoload function to load the requested class\"\n    ],\n    \"spl_autoload_extensions\": [\n        \"string spl_autoload_extensions([string file_extensions])\",\n        \"Register and return default file extensions for spl_autoload\"\n    ],\n    \"spl_autoload_functions\": [\n        \"false|array spl_autoload_functions()\",\n        \"Return all registered __autoload() functionns\"\n    ],\n    \"spl_autoload_register\": [\n        \"bool spl_autoload_register([mixed autoload_function = \\\"spl_autoload\\\" [, throw = true [, prepend]]])\",\n        \"Register given function as __autoload() implementation\"\n    ],\n    \"spl_autoload_unregister\": [\n        \"bool spl_autoload_unregister(mixed autoload_function)\",\n        \"Unregister given function as __autoload() implementation\"\n    ],\n    \"spl_classes\": [\n        \"array spl_classes()\",\n        \"Return an array containing the names of all clsses and interfaces defined in SPL\"\n    ],\n    \"spl_object_hash\": [\n        \"string spl_object_hash(object obj)\",\n        \"Return hash id for given object\"\n    ],\n    \"split\": [\n        \"array split(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression\"\n    ],\n    \"spliti\": [\n        \"array spliti(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression case-insensitive\"\n    ],\n    \"sprintf\": [\n        \"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Return a formatted string\"\n    ],\n    \"sql_regcase\": [\n        \"string sql_regcase(string string)\",\n        \"Make regular expression for case insensitive match\"\n    ],\n    \"sqlite_array_query\": [\n        \"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\n        \"Executes a query against a given database and returns an array of arrays.\"\n    ],\n    \"sqlite_busy_timeout\": [\n        \"void sqlite_busy_timeout(resource db, int ms)\",\n        \"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"\n    ],\n    \"sqlite_changes\": [\n        \"int sqlite_changes(resource db)\",\n        \"Returns the number of rows that were changed by the most recent SQL statement.\"\n    ],\n    \"sqlite_close\": [\n        \"void sqlite_close(resource db)\",\n        \"Closes an open sqlite database.\"\n    ],\n    \"sqlite_column\": [\n        \"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\n        \"Fetches a column from the current row of a result set.\"\n    ],\n    \"sqlite_create_aggregate\": [\n        \"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\n        \"Registers an aggregate function for queries.\"\n    ],\n    \"sqlite_create_function\": [\n        \"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",\n        \"Registers a \\\"regular\\\" function for queries.\"\n    ],\n    \"sqlite_current\": [\n        \"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the current row from a result set as an array.\"\n    ],\n    \"sqlite_error_string\": [\n        \"string sqlite_error_string(int error_code)\",\n        \"Returns the textual description of an error code.\"\n    ],\n    \"sqlite_escape_string\": [\n        \"string sqlite_escape_string(string item)\",\n        \"Escapes a string for use as a query parameter.\"\n    ],\n    \"sqlite_exec\": [\n        \"boolean sqlite_exec(string query, resource db[, string &error_message])\",\n        \"Executes a result-less query against a given database\"\n    ],\n    \"sqlite_factory\": [\n        \"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_fetch_all\": [\n        \"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches all rows from a result set as an array of arrays.\"\n    ],\n    \"sqlite_fetch_array\": [\n        \"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the next row from a result set as an array.\"\n    ],\n    \"sqlite_fetch_column_types\": [\n        \"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\n        \"Return an array of column types from a particular table.\"\n    ],\n    \"sqlite_fetch_object\": [\n        \"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\n        \"Fetches the next row from a result set as an object.\"\n    ],\n    \"sqlite_fetch_single\": [\n        \"string sqlite_fetch_single(resource result [, bool decode_binary])\",\n        \"Fetches the first column of a result set as a string.\"\n    ],\n    \"sqlite_field_name\": [\n        \"string sqlite_field_name(resource result, int field_index)\",\n        \"Returns the name of a particular field of a result set.\"\n    ],\n    \"sqlite_has_prev\": [\n        \"bool sqlite_has_prev(resource result)\",\n        \"* Returns whether a previous row is available.\"\n    ],\n    \"sqlite_key\": [\n        \"int sqlite_key(resource result)\",\n        \"Return the current row index of a buffered result.\"\n    ],\n    \"sqlite_last_error\": [\n        \"int sqlite_last_error(resource db)\",\n        \"Returns the error code of the last error for a database.\"\n    ],\n    \"sqlite_last_insert_rowid\": [\n        \"int sqlite_last_insert_rowid(resource db)\",\n        \"Returns the rowid of the most recently inserted row.\"\n    ],\n    \"sqlite_libencoding\": [\n        \"string sqlite_libencoding()\",\n        \"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"\n    ],\n    \"sqlite_libversion\": [\n        \"string sqlite_libversion()\",\n        \"Returns the version of the linked SQLite library.\"\n    ],\n    \"sqlite_next\": [\n        \"bool sqlite_next(resource result)\",\n        \"Seek to the next row number of a result set.\"\n    ],\n    \"sqlite_num_fields\": [\n        \"int sqlite_num_fields(resource result)\",\n        \"Returns the number of fields in a result set.\"\n    ],\n    \"sqlite_num_rows\": [\n        \"int sqlite_num_rows(resource result)\",\n        \"Returns the number of rows in a buffered result set.\"\n    ],\n    \"sqlite_open\": [\n        \"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_popen\": [\n        \"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\n        \"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_prev\": [\n        \"bool sqlite_prev(resource result)\",\n        \"* Seek to the previous row number of a result set.\"\n    ],\n    \"sqlite_query\": [\n        \"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\n        \"Executes a query against a given database and returns a result handle.\"\n    ],\n    \"sqlite_rewind\": [\n        \"bool sqlite_rewind(resource result)\",\n        \"Seek to the first row number of a buffered result set.\"\n    ],\n    \"sqlite_seek\": [\n        \"bool sqlite_seek(resource result, int row)\",\n        \"Seek to a particular row number of a buffered result set.\"\n    ],\n    \"sqlite_single_query\": [\n        \"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\n        \"Executes a query and returns either an array for one single column or the value of the first row.\"\n    ],\n    \"sqlite_udf_decode_binary\": [\n        \"string sqlite_udf_decode_binary(string data)\",\n        \"Decode binary encoding on a string parameter passed to an UDF.\"\n    ],\n    \"sqlite_udf_encode_binary\": [\n        \"string sqlite_udf_encode_binary(string data)\",\n        \"Apply binary encoding (if required) to a string to return from an UDF.\"\n    ],\n    \"sqlite_unbuffered_query\": [\n        \"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\n        \"Executes a query that does not prefetch and buffer all data.\"\n    ],\n    \"sqlite_valid\": [\n        \"bool sqlite_valid(resource result)\",\n        \"Returns whether more rows are available.\"\n    ],\n    \"sqrt\": [\n        \"float sqrt(float number)\",\n        \"Returns the square root of the number\"\n    ],\n    \"srand\": [\n        \"void srand([int seed])\",\n        \"Seeds random number generator\"\n    ],\n    \"sscanf\": [\n        \"mixed sscanf(string str, string format [, string ...])\",\n        \"Implements an ANSI C compatible sscanf\"\n    ],\n    \"stat\": [\n        \"array stat(string filename)\",\n        \"Give information about a file\"\n    ],\n    \"str_getcsv\": [\n        \"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\n        \"Parse a CSV string into an array\"\n    ],\n    \"str_ireplace\": [\n        \"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace / case-insensitive\"\n    ],\n    \"str_pad\": [\n        \"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\n        \"Returns input string padded on the left or right to specified length with pad_string\"\n    ],\n    \"str_repeat\": [\n        \"string str_repeat(string input, int mult)\",\n        \"Returns the input string repeat mult times\"\n    ],\n    \"str_replace\": [\n        \"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace\"\n    ],\n    \"str_rot13\": [\n        \"string str_rot13(string str)\",\n        \"Perform the rot13 transform on a string\"\n    ],\n    \"str_shuffle\": [\n        \"void str_shuffle(string str)\",\n        \"Shuffles string. One permutation of all possible is created\"\n    ],\n    \"str_split\": [\n        \"array str_split(string str [, int split_length])\",\n        \"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"\n    ],\n    \"str_word_count\": [\n        \"mixed str_word_count(string str, [int format [, string charlist]])\",\n        \"Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, 'word' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \\\"'\\\" and \\\"-\\\" characters.\"\n    ],\n    \"strcasecmp\": [\n        \"int strcasecmp(string str1, string str2)\",\n        \"Binary safe case-insensitive string comparison\"\n    ],\n    \"strchr\": [\n        \"string strchr(string haystack, string needle)\",\n        \"An alias for strstr\"\n    ],\n    \"strcmp\": [\n        \"int strcmp(string str1, string str2)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strcoll\": [\n        \"int strcoll(string str1, string str2)\",\n        \"Compares two strings using the current locale\"\n    ],\n    \"strcspn\": [\n        \"int strcspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"\n    ],\n    \"stream_bucket_append\": [\n        \"void stream_bucket_append(resource brigade, resource bucket)\",\n        \"Append bucket to brigade\"\n    ],\n    \"stream_bucket_make_writeable\": [\n        \"object stream_bucket_make_writeable(resource brigade)\",\n        \"Return a bucket object from the brigade for operating on\"\n    ],\n    \"stream_bucket_new\": [\n        \"resource stream_bucket_new(resource stream, string buffer)\",\n        \"Create a new bucket for use on the current stream\"\n    ],\n    \"stream_bucket_prepend\": [\n        \"void stream_bucket_prepend(resource brigade, resource bucket)\",\n        \"Prepend bucket to brigade\"\n    ],\n    \"stream_context_create\": [\n        \"resource stream_context_create([array options[, array params]])\",\n        \"Create a file context and optionally set parameters\"\n    ],\n    \"stream_context_get_default\": [\n        \"resource stream_context_get_default([array options])\",\n        \"Get a handle on the default file/stream context and optionally set parameters\"\n    ],\n    \"stream_context_get_options\": [\n        \"array stream_context_get_options(resource context|resource stream)\",\n        \"Retrieve options for a stream/wrapper/context\"\n    ],\n    \"stream_context_get_params\": [\n        \"array stream_context_get_params(resource context|resource stream)\",\n        \"Get parameters of a file context\"\n    ],\n    \"stream_context_set_default\": [\n        \"resource stream_context_set_default(array options)\",\n        \"Set default file/stream context, returns the context as a resource\"\n    ],\n    \"stream_context_set_option\": [\n        \"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\n        \"Set an option for a wrapper\"\n    ],\n    \"stream_context_set_params\": [\n        \"bool stream_context_set_params(resource context|resource stream, array options)\",\n        \"Set parameters for a file context\"\n    ],\n    \"stream_copy_to_stream\": [\n        \"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\n        \"Reads up to maxlen bytes from source stream and writes them to dest stream.\"\n    ],\n    \"stream_filter_append\": [\n        \"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Append a filter to a stream\"\n    ],\n    \"stream_filter_prepend\": [\n        \"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Prepend a filter to a stream\"\n    ],\n    \"stream_filter_register\": [\n        \"bool stream_filter_register(string filtername, string classname)\",\n        \"Registers a custom filter handler class\"\n    ],\n    \"stream_filter_remove\": [\n        \"bool stream_filter_remove(resource stream_filter)\",\n        \"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"\n    ],\n    \"stream_get_contents\": [\n        \"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\n        \"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"\n    ],\n    \"stream_get_filters\": [\n        \"array stream_get_filters(void)\",\n        \"Returns a list of registered filters\"\n    ],\n    \"stream_get_line\": [\n        \"string stream_get_line(resource stream, int maxlen [, string ending])\",\n        \"Read up to maxlen bytes from a stream or until the ending string is found\"\n    ],\n    \"stream_get_meta_data\": [\n        \"array stream_get_meta_data(resource fp)\",\n        \"Retrieves header/meta data from streams/file pointers\"\n    ],\n    \"stream_get_transports\": [\n        \"array stream_get_transports()\",\n        \"Retrieves list of registered socket transports\"\n    ],\n    \"stream_get_wrappers\": [\n        \"array stream_get_wrappers()\",\n        \"Retrieves list of registered stream wrappers\"\n    ],\n    \"stream_is_local\": [\n        \"bool stream_is_local(resource stream|string url)\",\n        \"\"\n    ],\n    \"stream_resolve_include_path\": [\n        \"string stream_resolve_include_path(string filename)\",\n        \"Determine what file will be opened by calls to fopen() with a relative path\"\n    ],\n    \"stream_select\": [\n        \"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"stream_set_blocking\": [\n        \"bool stream_set_blocking(resource socket, int mode)\",\n        \"Set blocking/non-blocking mode on a socket or stream\"\n    ],\n    \"stream_set_timeout\": [\n        \"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\n        \"Set timeout on stream read to seconds + microseonds\"\n    ],\n    \"stream_set_write_buffer\": [\n        \"int stream_set_write_buffer(resource fp, int buffer)\",\n        \"Set file write buffer\"\n    ],\n    \"stream_socket_accept\": [\n        \"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\n        \"Accept a client connection from a server socket\"\n    ],\n    \"stream_socket_client\": [\n        \"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\n        \"Open a client connection to a remote address\"\n    ],\n    \"stream_socket_enable_crypto\": [\n        \"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\n        \"Enable or disable a specific kind of crypto on the stream\"\n    ],\n    \"stream_socket_get_name\": [\n        \"string stream_socket_get_name(resource stream, bool want_peer)\",\n        \"Returns either the locally bound or remote name for a socket stream\"\n    ],\n    \"stream_socket_pair\": [\n        \"array stream_socket_pair(int domain, int type, int protocol)\",\n        \"Creates a pair of connected, indistinguishable socket streams\"\n    ],\n    \"stream_socket_recvfrom\": [\n        \"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\n        \"Receives data from a socket stream\"\n    ],\n    \"stream_socket_sendto\": [\n        \"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\n        \"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"\n    ],\n    \"stream_socket_server\": [\n        \"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\n        \"Create a server socket bound to localaddress\"\n    ],\n    \"stream_socket_shutdown\": [\n        \"int stream_socket_shutdown(resource stream, int how)\",\n        \"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"\n    ],\n    \"stream_supports_lock\": [\n        \"bool stream_supports_lock(resource stream)\",\n        \"Tells whether the stream supports locking through flock().\"\n    ],\n    \"stream_wrapper_register\": [\n        \"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\n        \"Registers a custom URL protocol handler class\"\n    ],\n    \"stream_wrapper_restore\": [\n        \"bool stream_wrapper_restore(string protocol)\",\n        \"Restore the original protocol handler, overriding if necessary\"\n    ],\n    \"stream_wrapper_unregister\": [\n        \"bool stream_wrapper_unregister(string protocol)\",\n        \"Unregister a wrapper for the life of the current request.\"\n    ],\n    \"strftime\": [\n        \"string strftime(string format [, int timestamp])\",\n        \"Format a local time/date according to locale settings\"\n    ],\n    \"strip_tags\": [\n        \"string strip_tags(string str [, string allowable_tags])\",\n        \"Strips HTML and PHP tags from a string\"\n    ],\n    \"stripcslashes\": [\n        \"string stripcslashes(string str)\",\n        \"Strips backslashes from a string. Uses C-style conventions\"\n    ],\n    \"stripos\": [\n        \"int stripos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"stripslashes\": [\n        \"string stripslashes(string str)\",\n        \"Strips backslashes from a string\"\n    ],\n    \"stristr\": [\n        \"string stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"strlen\": [\n        \"int strlen(string str)\",\n        \"Get string length\"\n    ],\n    \"strnatcasecmp\": [\n        \"int strnatcasecmp(string s1, string s2)\",\n        \"Returns the result of case-insensitive string comparison using 'natural' algorithm\"\n    ],\n    \"strnatcmp\": [\n        \"int strnatcmp(string s1, string s2)\",\n        \"Returns the result of string comparison using 'natural' algorithm\"\n    ],\n    \"strncasecmp\": [\n        \"int strncasecmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strncmp\": [\n        \"int strncmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strpbrk\": [\n        \"array strpbrk(string haystack, string char_list)\",\n        \"Search a string for any of a set of characters\"\n    ],\n    \"strpos\": [\n        \"int strpos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another\"\n    ],\n    \"strptime\": [\n        \"string strptime(string timestamp, string format)\",\n        \"Parse a time/date generated with strftime()\"\n    ],\n    \"strrchr\": [\n        \"string strrchr(string haystack, string needle)\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"strrev\": [\n        \"string strrev(string str)\",\n        \"Reverse a string\"\n    ],\n    \"strripos\": [\n        \"int strripos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strrpos\": [\n        \"int strrpos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strspn\": [\n        \"int strspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"\n    ],\n    \"strstr\": [\n        \"string strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"strtok\": [\n        \"string strtok([string str,] string token)\",\n        \"Tokenize a string\"\n    ],\n    \"strtolower\": [\n        \"string strtolower(string str)\",\n        \"Makes a string lowercase\"\n    ],\n    \"strtotime\": [\n        \"int strtotime(string time [, int now ])\",\n        \"Convert string representation of date and time to a timestamp\"\n    ],\n    \"strtoupper\": [\n        \"string strtoupper(string str)\",\n        \"Makes a string uppercase\"\n    ],\n    \"strtr\": [\n        \"string strtr(string str, string from[, string to])\",\n        \"Translates characters in str using given translation tables\"\n    ],\n    \"strval\": [\n        \"string strval(mixed var)\",\n        \"Get the string value of a variable\"\n    ],\n    \"substr\": [\n        \"string substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"substr_compare\": [\n        \"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\n        \"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"\n    ],\n    \"substr_count\": [\n        \"int substr_count(string haystack, string needle [, int offset [, int length]])\",\n        \"Returns the number of times a substring occurs in the string\"\n    ],\n    \"substr_replace\": [\n        \"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\n        \"Replaces part of a string with another string\"\n    ],\n    \"sybase_affected_rows\": [\n        \"int sybase_affected_rows([resource link_id])\",\n        \"Get number of affected rows in last query\"\n    ],\n    \"sybase_close\": [\n        \"bool sybase_close([resource link_id])\",\n        \"Close Sybase connection\"\n    ],\n    \"sybase_connect\": [\n        \"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\n        \"Open Sybase server connection\"\n    ],\n    \"sybase_data_seek\": [\n        \"bool sybase_data_seek(resource result, int offset)\",\n        \"Move internal row pointer\"\n    ],\n    \"sybase_deadlock_retry_count\": [\n        \"void sybase_deadlock_retry_count(int retry_count)\",\n        \"Sets deadlock retry count\"\n    ],\n    \"sybase_fetch_array\": [\n        \"array sybase_fetch_array(resource result)\",\n        \"Fetch row as array\"\n    ],\n    \"sybase_fetch_assoc\": [\n        \"array sybase_fetch_assoc(resource result)\",\n        \"Fetch row as array without numberic indices\"\n    ],\n    \"sybase_fetch_field\": [\n        \"object sybase_fetch_field(resource result [, int offset])\",\n        \"Get field information\"\n    ],\n    \"sybase_fetch_object\": [\n        \"object sybase_fetch_object(resource result [, mixed object])\",\n        \"Fetch row as object\"\n    ],\n    \"sybase_fetch_row\": [\n        \"array sybase_fetch_row(resource result)\",\n        \"Get row as enumerated array\"\n    ],\n    \"sybase_field_seek\": [\n        \"bool sybase_field_seek(resource result, int offset)\",\n        \"Set field offset\"\n    ],\n    \"sybase_free_result\": [\n        \"bool sybase_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"sybase_get_last_message\": [\n        \"string sybase_get_last_message(void)\",\n        \"Returns the last message from server (over min_message_severity)\"\n    ],\n    \"sybase_min_client_severity\": [\n        \"void sybase_min_client_severity(int severity)\",\n        \"Sets minimum client severity\"\n    ],\n    \"sybase_min_server_severity\": [\n        \"void sybase_min_server_severity(int severity)\",\n        \"Sets minimum server severity\"\n    ],\n    \"sybase_num_fields\": [\n        \"int sybase_num_fields(resource result)\",\n        \"Get number of fields in result\"\n    ],\n    \"sybase_num_rows\": [\n        \"int sybase_num_rows(resource result)\",\n        \"Get number of rows in result\"\n    ],\n    \"sybase_pconnect\": [\n        \"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\n        \"Open persistent Sybase connection\"\n    ],\n    \"sybase_query\": [\n        \"int sybase_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"sybase_result\": [\n        \"string sybase_result(resource result, int row, mixed field)\",\n        \"Get result data\"\n    ],\n    \"sybase_select_db\": [\n        \"bool sybase_select_db(string database [, resource link_id])\",\n        \"Select Sybase database\"\n    ],\n    \"sybase_set_message_handler\": [\n        \"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\n        \"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"\n    ],\n    \"sybase_unbuffered_query\": [\n        \"int sybase_unbuffered_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"symlink\": [\n        \"int symlink(string target, string link)\",\n        \"Create a symbolic link\"\n    ],\n    \"sys_get_temp_dir\": [\n        \"string sys_get_temp_dir()\",\n        \"Returns directory path used for temporary files\"\n    ],\n    \"sys_getloadavg\": [\n        \"array sys_getloadavg()\",\n        \"\"\n    ],\n    \"syslog\": [\n        \"bool syslog(int priority, string message)\",\n        \"Generate a system log message\"\n    ],\n    \"system\": [\n        \"int system(string command [, int &return_value])\",\n        \"Execute an external program and display output\"\n    ],\n    \"tan\": [\n        \"float tan(float number)\",\n        \"Returns the tangent of the number in radians\"\n    ],\n    \"tanh\": [\n        \"float tanh(float number)\",\n        \"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"\n    ],\n    \"tempnam\": [\n        \"string tempnam(string dir, string prefix)\",\n        \"Create a unique filename in a directory\"\n    ],\n    \"textdomain\": [\n        \"string textdomain(string domain)\",\n        \"Set the textdomain to \\\"domain\\\". Returns the current domain\"\n    ],\n    \"tidy_access_count\": [\n        \"int tidy_access_count()\",\n        \"Returns the Number of Tidy accessibility warnings encountered for specified document.\"\n    ],\n    \"tidy_clean_repair\": [\n        \"boolean tidy_clean_repair()\",\n        \"Execute configured cleanup and repair operations on parsed markup\"\n    ],\n    \"tidy_config_count\": [\n        \"int tidy_config_count()\",\n        \"Returns the Number of Tidy configuration errors encountered for specified document.\"\n    ],\n    \"tidy_diagnose\": [\n        \"boolean tidy_diagnose()\",\n        \"Run configured diagnostics on parsed and repaired markup.\"\n    ],\n    \"tidy_error_count\": [\n        \"int tidy_error_count()\",\n        \"Returns the Number of Tidy errors encountered for specified document.\"\n    ],\n    \"tidy_get_body\": [\n        \"TidyNode tidy_get_body(resource tidy)\",\n        \"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_config\": [\n        \"array tidy_get_config()\",\n        \"Get current Tidy configuarion\"\n    ],\n    \"tidy_get_error_buffer\": [\n        \"string tidy_get_error_buffer([boolean detailed])\",\n        \"Return warnings and errors which occured parsing the specified document\"\n    ],\n    \"tidy_get_head\": [\n        \"TidyNode tidy_get_head()\",\n        \"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html\": [\n        \"TidyNode tidy_get_html()\",\n        \"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html_ver\": [\n        \"int tidy_get_html_ver()\",\n        \"Get the Detected HTML version for the specified document.\"\n    ],\n    \"tidy_get_opt_doc\": [\n        \"string tidy_get_opt_doc(tidy resource, string optname)\",\n        \"Returns the documentation for the given option name\"\n    ],\n    \"tidy_get_output\": [\n        \"string tidy_get_output()\",\n        \"Return a string representing the parsed tidy markup\"\n    ],\n    \"tidy_get_release\": [\n        \"string tidy_get_release()\",\n        \"Get release date (version) for Tidy library\"\n    ],\n    \"tidy_get_root\": [\n        \"TidyNode tidy_get_root()\",\n        \"Returns a TidyNode Object representing the root of the tidy parse tree\"\n    ],\n    \"tidy_get_status\": [\n        \"int tidy_get_status()\",\n        \"Get status of specfied document.\"\n    ],\n    \"tidy_getopt\": [\n        \"mixed tidy_getopt(string option)\",\n        \"Returns the value of the specified configuration option for the tidy document.\"\n    ],\n    \"tidy_is_xhtml\": [\n        \"boolean tidy_is_xhtml()\",\n        \"Indicates if the document is a XHTML document.\"\n    ],\n    \"tidy_is_xml\": [\n        \"boolean tidy_is_xml()\",\n        \"Indicates if the document is a generic (non HTML/XHTML) XML document.\"\n    ],\n    \"tidy_parse_file\": [\n        \"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\n        \"Parse markup in file or URI\"\n    ],\n    \"tidy_parse_string\": [\n        \"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\n        \"Parse a document stored in a string\"\n    ],\n    \"tidy_repair_file\": [\n        \"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\n        \"Repair a file using an optionally provided configuration file\"\n    ],\n    \"tidy_repair_string\": [\n        \"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\n        \"Repair a string using an optionally provided configuration file\"\n    ],\n    \"tidy_warning_count\": [\n        \"int tidy_warning_count()\",\n        \"Returns the Number of Tidy warnings encountered for specified document.\"\n    ],\n    \"time\": [\n        \"int time(void)\",\n        \"Return current UNIX timestamp\"\n    ],\n    \"time_nanosleep\": [\n        \"mixed time_nanosleep(long seconds, long nanoseconds)\",\n        \"Delay for a number of seconds and nano seconds\"\n    ],\n    \"time_sleep_until\": [\n        \"mixed time_sleep_until(float timestamp)\",\n        \"Make the script sleep until the specified time\"\n    ],\n    \"timezone_abbreviations_list\": [\n        \"array timezone_abbreviations_list()\",\n        \"Returns associative array containing dst, offset and the timezone name\"\n    ],\n    \"timezone_identifiers_list\": [\n        \"array timezone_identifiers_list([long what[, string country]])\",\n        \"Returns numerically index array with all timezone identifiers.\"\n    ],\n    \"timezone_location_get\": [\n        \"array timezone_location_get()\",\n        \"Returns location information for a timezone, including country code, latitude/longitude and comments\"\n    ],\n    \"timezone_name_from_abbr\": [\n        \"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\n        \"Returns the timezone name from abbrevation\"\n    ],\n    \"timezone_name_get\": [\n        \"string timezone_name_get(DateTimeZone object)\",\n        \"Returns the name of the timezone.\"\n    ],\n    \"timezone_offset_get\": [\n        \"long timezone_offset_get(DateTimeZone object, DateTime object)\",\n        \"Returns the timezone offset.\"\n    ],\n    \"timezone_open\": [\n        \"DateTimeZone timezone_open(string timezone)\",\n        \"Returns new DateTimeZone object\"\n    ],\n    \"timezone_transitions_get\": [\n        \"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\n        \"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"\n    ],\n    \"timezone_version_get\": [\n        \"array timezone_version_get()\",\n        \"Returns the Olson database version number.\"\n    ],\n    \"tmpfile\": [\n        \"resource tmpfile(void)\",\n        \"Create a temporary file that will be deleted automatically after use\"\n    ],\n    \"token_get_all\": [\n        \"array token_get_all(string source)\",\n        \"\"\n    ],\n    \"token_name\": [\n        \"string token_name(int type)\",\n        \"\"\n    ],\n    \"touch\": [\n        \"bool touch(string filename [, int time [, int atime]])\",\n        \"Set modification time of file\"\n    ],\n    \"trigger_error\": [\n        \"void trigger_error(string messsage [, int error_type])\",\n        \"Generates a user-level error/warning/notice message\"\n    ],\n    \"trim\": [\n        \"string trim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning and end of a string\"\n    ],\n    \"uasort\": [\n        \"bool uasort(array array_arg, string cmp_function)\",\n        \"Sort an array with a user-defined comparison function and maintain index association\"\n    ],\n    \"ucfirst\": [\n        \"string ucfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"ucwords\": [\n        \"string ucwords(string str)\",\n        \"Uppercase the first character of every word in a string\"\n    ],\n    \"uksort\": [\n        \"bool uksort(array array_arg, string cmp_function)\",\n        \"Sort an array by keys using a user-defined comparison function\"\n    ],\n    \"umask\": [\n        \"int umask([int mask])\",\n        \"Return or change the umask\"\n    ],\n    \"uniqid\": [\n        \"string uniqid([string prefix [, bool more_entropy]])\",\n        \"Generates a unique ID\"\n    ],\n    \"unixtojd\": [\n        \"int unixtojd([int timestamp])\",\n        \"Convert UNIX timestamp to Julian Day\"\n    ],\n    \"unlink\": [\n        \"bool unlink(string filename[, context context])\",\n        \"Delete a file\"\n    ],\n    \"unpack\": [\n        \"array unpack(string format, string input)\",\n        \"Unpack binary string into named array elements according to format argument\"\n    ],\n    \"unregister_tick_function\": [\n        \"void unregister_tick_function(string function_name)\",\n        \"Unregisters a tick callback function\"\n    ],\n    \"unserialize\": [\n        \"mixed unserialize(string variable_representation)\",\n        \"Takes a string representation of variable and recreates it\"\n    ],\n    \"unset\": [\n        \"void unset (mixed var [, mixed var])\",\n        \"Unset a given variable\"\n    ],\n    \"urldecode\": [\n        \"string urldecode(string str)\",\n        \"Decodes URL-encoded string\"\n    ],\n    \"urlencode\": [\n        \"string urlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"usleep\": [\n        \"void usleep(int micro_seconds)\",\n        \"Delay for a given number of micro seconds\"\n    ],\n    \"usort\": [\n        \"bool usort(array array_arg, string cmp_function)\",\n        \"Sort an array by values using a user-defined comparison function\"\n    ],\n    \"utf8_decode\": [\n        \"string utf8_decode(string data)\",\n        \"Converts a UTF-8 encoded string to ISO-8859-1\"\n    ],\n    \"utf8_encode\": [\n        \"string utf8_encode(string data)\",\n        \"Encodes an ISO-8859-1 string to UTF-8\"\n    ],\n    \"var_dump\": [\n        \"void var_dump(mixed var)\",\n        \"Dumps a string representation of variable to output\"\n    ],\n    \"var_export\": [\n        \"mixed var_export(mixed var [, bool return])\",\n        \"Outputs or returns a string representation of a variable\"\n    ],\n    \"variant_abs\": [\n        \"mixed variant_abs(mixed left)\",\n        \"Returns the absolute value of a variant\"\n    ],\n    \"variant_add\": [\n        \"mixed variant_add(mixed left, mixed right)\",\n        \"\\\"Adds\\\" two variant values together and returns the result\"\n    ],\n    \"variant_and\": [\n        \"mixed variant_and(mixed left, mixed right)\",\n        \"performs a bitwise AND operation between two variants and returns the result\"\n    ],\n    \"variant_cast\": [\n        \"object variant_cast(object variant, int type)\",\n        \"Convert a variant into a new variant object of another type\"\n    ],\n    \"variant_cat\": [\n        \"mixed variant_cat(mixed left, mixed right)\",\n        \"concatenates two variant values together and returns the result\"\n    ],\n    \"variant_cmp\": [\n        \"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\n        \"Compares two variants\"\n    ],\n    \"variant_date_from_timestamp\": [\n        \"object variant_date_from_timestamp(int timestamp)\",\n        \"Returns a variant date representation of a unix timestamp\"\n    ],\n    \"variant_date_to_timestamp\": [\n        \"int variant_date_to_timestamp(object variant)\",\n        \"Converts a variant date/time value to unix timestamp\"\n    ],\n    \"variant_div\": [\n        \"mixed variant_div(mixed left, mixed right)\",\n        \"Returns the result from dividing two variants\"\n    ],\n    \"variant_eqv\": [\n        \"mixed variant_eqv(mixed left, mixed right)\",\n        \"Performs a bitwise equivalence on two variants\"\n    ],\n    \"variant_fix\": [\n        \"mixed variant_fix(mixed left)\",\n        \"Returns the integer part ? of a variant\"\n    ],\n    \"variant_get_type\": [\n        \"int variant_get_type(object variant)\",\n        \"Returns the VT_XXX type code for a variant\"\n    ],\n    \"variant_idiv\": [\n        \"mixed variant_idiv(mixed left, mixed right)\",\n        \"Converts variants to integers and then returns the result from dividing them\"\n    ],\n    \"variant_imp\": [\n        \"mixed variant_imp(mixed left, mixed right)\",\n        \"Performs a bitwise implication on two variants\"\n    ],\n    \"variant_int\": [\n        \"mixed variant_int(mixed left)\",\n        \"Returns the integer portion of a variant\"\n    ],\n    \"variant_mod\": [\n        \"mixed variant_mod(mixed left, mixed right)\",\n        \"Divides two variants and returns only the remainder\"\n    ],\n    \"variant_mul\": [\n        \"mixed variant_mul(mixed left, mixed right)\",\n        \"multiplies the values of the two variants and returns the result\"\n    ],\n    \"variant_neg\": [\n        \"mixed variant_neg(mixed left)\",\n        \"Performs logical negation on a variant\"\n    ],\n    \"variant_not\": [\n        \"mixed variant_not(mixed left)\",\n        \"Performs bitwise not negation on a variant\"\n    ],\n    \"variant_or\": [\n        \"mixed variant_or(mixed left, mixed right)\",\n        \"Performs a logical disjunction on two variants\"\n    ],\n    \"variant_pow\": [\n        \"mixed variant_pow(mixed left, mixed right)\",\n        \"Returns the result of performing the power function with two variants\"\n    ],\n    \"variant_round\": [\n        \"mixed variant_round(mixed left, int decimals)\",\n        \"Rounds a variant to the specified number of decimal places\"\n    ],\n    \"variant_set\": [\n        \"void variant_set(object variant, mixed value)\",\n        \"Assigns a new value for a variant object\"\n    ],\n    \"variant_set_type\": [\n        \"void variant_set_type(object variant, int type)\",\n        \"Convert a variant into another type.  Variant is modified \\\"in-place\\\"\"\n    ],\n    \"variant_sub\": [\n        \"mixed variant_sub(mixed left, mixed right)\",\n        \"subtracts the value of the right variant from the left variant value and returns the result\"\n    ],\n    \"variant_xor\": [\n        \"mixed variant_xor(mixed left, mixed right)\",\n        \"Performs a logical exclusion on two variants\"\n    ],\n    \"version_compare\": [\n        \"int version_compare(string ver1, string ver2 [, string oper])\",\n        \"Compares two \\\"PHP-standardized\\\" version number strings\"\n    ],\n    \"vfprintf\": [\n        \"int vfprintf(resource stream, string format, array args)\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"virtual\": [\n        \"bool virtual(string filename)\",\n        \"Perform an Apache sub-request\"\n    ],\n    \"vprintf\": [\n        \"int vprintf(string format, array args)\",\n        \"Output a formatted string\"\n    ],\n    \"vsprintf\": [\n        \"string vsprintf(string format, array args)\",\n        \"Return a formatted string\"\n    ],\n    \"wddx_add_vars\": [\n        \"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\n        \"Serializes given variables and adds them to packet given by packet_id\"\n    ],\n    \"wddx_deserialize\": [\n        \"mixed wddx_deserialize(mixed packet)\",\n        \"Deserializes given packet and returns a PHP value\"\n    ],\n    \"wddx_packet_end\": [\n        \"string wddx_packet_end(resource packet_id)\",\n        \"Ends specified WDDX packet and returns the string containing the packet\"\n    ],\n    \"wddx_packet_start\": [\n        \"resource wddx_packet_start([string comment])\",\n        \"Starts a WDDX packet with optional comment and returns the packet id\"\n    ],\n    \"wddx_serialize_value\": [\n        \"string wddx_serialize_value(mixed var [, string comment])\",\n        \"Creates a new packet and serializes the given value\"\n    ],\n    \"wddx_serialize_vars\": [\n        \"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\n        \"Creates a new packet and serializes given variables into a struct\"\n    ],\n    \"wordwrap\": [\n        \"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\n        \"Wraps buffer to selected number of characters using string break char\"\n    ],\n    \"xml_error_string\": [\n        \"string xml_error_string(int code)\",\n        \"Get XML parser error string\"\n    ],\n    \"xml_get_current_byte_index\": [\n        \"int xml_get_current_byte_index(resource parser)\",\n        \"Get current byte index for an XML parser\"\n    ],\n    \"xml_get_current_column_number\": [\n        \"int xml_get_current_column_number(resource parser)\",\n        \"Get current column number for an XML parser\"\n    ],\n    \"xml_get_current_line_number\": [\n        \"int xml_get_current_line_number(resource parser)\",\n        \"Get current line number for an XML parser\"\n    ],\n    \"xml_get_error_code\": [\n        \"int xml_get_error_code(resource parser)\",\n        \"Get XML parser error code\"\n    ],\n    \"xml_parse\": [\n        \"int xml_parse(resource parser, string data [, int isFinal])\",\n        \"Start parsing an XML document\"\n    ],\n    \"xml_parse_into_struct\": [\n        \"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\n        \"Parsing a XML document\"\n    ],\n    \"xml_parser_create\": [\n        \"resource xml_parser_create([string encoding])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_create_ns\": [\n        \"resource xml_parser_create_ns([string encoding [, string sep]])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_free\": [\n        \"int xml_parser_free(resource parser)\",\n        \"Free an XML parser\"\n    ],\n    \"xml_parser_get_option\": [\n        \"int xml_parser_get_option(resource parser, int option)\",\n        \"Get options from an XML parser\"\n    ],\n    \"xml_parser_set_option\": [\n        \"int xml_parser_set_option(resource parser, int option, mixed value)\",\n        \"Set options in an XML parser\"\n    ],\n    \"xml_set_character_data_handler\": [\n        \"int xml_set_character_data_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_default_handler\": [\n        \"int xml_set_default_handler(resource parser, string hdl)\",\n        \"Set up default handler\"\n    ],\n    \"xml_set_element_handler\": [\n        \"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\n        \"Set up start and end element handlers\"\n    ],\n    \"xml_set_end_namespace_decl_handler\": [\n        \"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_external_entity_ref_handler\": [\n        \"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\n        \"Set up external entity reference handler\"\n    ],\n    \"xml_set_notation_decl_handler\": [\n        \"int xml_set_notation_decl_handler(resource parser, string hdl)\",\n        \"Set up notation declaration handler\"\n    ],\n    \"xml_set_object\": [\n        \"int xml_set_object(resource parser, object &obj)\",\n        \"Set up object which should be used for callbacks\"\n    ],\n    \"xml_set_processing_instruction_handler\": [\n        \"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\n        \"Set up processing instruction (PI) handler\"\n    ],\n    \"xml_set_start_namespace_decl_handler\": [\n        \"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_unparsed_entity_decl_handler\": [\n        \"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\n        \"Set up unparsed entity declaration handler\"\n    ],\n    \"xmlrpc_decode\": [\n        \"array xmlrpc_decode(string xml [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_decode_request\": [\n        \"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_encode\": [\n        \"string xmlrpc_encode(mixed value)\",\n        \"Generates XML for a PHP value\"\n    ],\n    \"xmlrpc_encode_request\": [\n        \"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\n        \"Generates XML for a method request\"\n    ],\n    \"xmlrpc_get_type\": [\n        \"string xmlrpc_get_type(mixed value)\",\n        \"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"\n    ],\n    \"xmlrpc_is_fault\": [\n        \"bool xmlrpc_is_fault(array)\",\n        \"Determines if an array value represents an XMLRPC fault.\"\n    ],\n    \"xmlrpc_parse_method_descriptions\": [\n        \"array xmlrpc_parse_method_descriptions(string xml)\",\n        \"Decodes XML into a list of method descriptions\"\n    ],\n    \"xmlrpc_server_add_introspection_data\": [\n        \"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\n        \"Adds introspection documentation\"\n    ],\n    \"xmlrpc_server_call_method\": [\n        \"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\n        \"Parses XML requests and call methods\"\n    ],\n    \"xmlrpc_server_create\": [\n        \"resource xmlrpc_server_create(void)\",\n        \"Creates an xmlrpc server\"\n    ],\n    \"xmlrpc_server_destroy\": [\n        \"int xmlrpc_server_destroy(resource server)\",\n        \"Destroys server resources\"\n    ],\n    \"xmlrpc_server_register_introspection_callback\": [\n        \"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\n        \"Register a PHP function to generate documentation\"\n    ],\n    \"xmlrpc_server_register_method\": [\n        \"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\n        \"Register a PHP function to handle method matching method_name\"\n    ],\n    \"xmlrpc_set_type\": [\n        \"bool xmlrpc_set_type(string value, string type)\",\n        \"Sets xmlrpc type, base64 or datetime, for a PHP string value\"\n    ],\n    \"xmlwriter_end_attribute\": [\n        \"bool xmlwriter_end_attribute(resource xmlwriter)\",\n        \"End attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_cdata\": [\n        \"bool xmlwriter_end_cdata(resource xmlwriter)\",\n        \"End current CDATA - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_comment\": [\n        \"bool xmlwriter_end_comment(resource xmlwriter)\",\n        \"Create end comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_document\": [\n        \"bool xmlwriter_end_document(resource xmlwriter)\",\n        \"End current document - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd\": [\n        \"bool xmlwriter_end_dtd(resource xmlwriter)\",\n        \"End current DTD - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_attlist\": [\n        \"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\n        \"End current DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_element\": [\n        \"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\n        \"End current DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_entity\": [\n        \"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\n        \"End current DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_element\": [\n        \"bool xmlwriter_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_pi\": [\n        \"bool xmlwriter_end_pi(resource xmlwriter)\",\n        \"End current PI - returns FALSE on error\"\n    ],\n    \"xmlwriter_flush\": [\n        \"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\n        \"Output current buffer\"\n    ],\n    \"xmlwriter_full_end_element\": [\n        \"bool xmlwriter_full_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_open_memory\": [\n        \"resource xmlwriter_open_memory()\",\n        \"Create new xmlwriter using memory for string output\"\n    ],\n    \"xmlwriter_open_uri\": [\n        \"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\n        \"Create new xmlwriter using source uri for output\"\n    ],\n    \"xmlwriter_output_memory\": [\n        \"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\n        \"Output current buffer as string\"\n    ],\n    \"xmlwriter_set_indent\": [\n        \"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\n        \"Toggle indentation on/off - returns FALSE on error\"\n    ],\n    \"xmlwriter_set_indent_string\": [\n        \"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\n        \"Set string used for indenting - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute\": [\n        \"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\n        \"Create start attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute_ns\": [\n        \"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_cdata\": [\n        \"bool xmlwriter_start_cdata(resource xmlwriter)\",\n        \"Create start CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_comment\": [\n        \"bool xmlwriter_start_comment(resource xmlwriter)\",\n        \"Create start comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_document\": [\n        \"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\n        \"Create document tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd\": [\n        \"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\n        \"Create start DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_attlist\": [\n        \"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\n        \"Create start DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_element\": [\n        \"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\n        \"Create start DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_entity\": [\n        \"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\n        \"Create start DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element\": [\n        \"bool xmlwriter_start_element(resource xmlwriter, string name)\",\n        \"Create start element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element_ns\": [\n        \"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_pi\": [\n        \"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\n        \"Create start PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_text\": [\n        \"bool xmlwriter_text(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute\": [\n        \"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\n        \"Write full attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute_ns\": [\n        \"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\n        \"Write full namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_cdata\": [\n        \"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\n        \"Write full CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_comment\": [\n        \"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\n        \"Write full comment tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd\": [\n        \"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\n        \"Write full DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_attlist\": [\n        \"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\n        \"Write full DTD AttList tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_element\": [\n        \"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\n        \"Write full DTD element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_entity\": [\n        \"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\n        \"Write full DTD Entity tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element\": [\n        \"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\n        \"Write full element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element_ns\": [\n        \"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\n        \"Write full namesapced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_pi\": [\n        \"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\n        \"Write full PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_raw\": [\n        \"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xsl_xsltprocessor_get_parameter\": [\n        \"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_has_exslt_support\": [\n        \"bool xsl_xsltprocessor_has_exslt_support();\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_import_stylesheet\": [\n        \"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_register_php_functions\": [\n        \"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_remove_parameter\": [\n        \"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_parameter\": [\n        \"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_profiling\": [\n        \"bool xsl_xsltprocessor_set_profiling(string filename) */\",\n        \"PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s!\\\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling\"\n    ],\n    \"xsl_xsltprocessor_transform_to_doc\": [\n        \"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_transform_to_uri\": [\n        \"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_xml\": [\n        \"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\n        \"\"\n    ],\n    \"zend_logo_guid\": [\n        \"string zend_logo_guid(void)\",\n        \"Return the special ID used to request the Zend logo in phpinfo screens\"\n    ],\n    \"zend_version\": [\n        \"string zend_version(void)\",\n        \"Get the version of the Zend Engine\"\n    ],\n    \"zip_close\": [\n        \"void zip_close(resource zip)\",\n        \"Close a Zip archive\"\n    ],\n    \"zip_entry_close\": [\n        \"void zip_entry_close(resource zip_ent)\",\n        \"Close a zip entry\"\n    ],\n    \"zip_entry_compressedsize\": [\n        \"int zip_entry_compressedsize(resource zip_entry)\",\n        \"Return the compressed size of a ZZip entry\"\n    ],\n    \"zip_entry_compressionmethod\": [\n        \"string zip_entry_compressionmethod(resource zip_entry)\",\n        \"Return a string containing the compression method used on a particular entry\"\n    ],\n    \"zip_entry_filesize\": [\n        \"int zip_entry_filesize(resource zip_entry)\",\n        \"Return the actual filesize of a ZZip entry\"\n    ],\n    \"zip_entry_name\": [\n        \"string zip_entry_name(resource zip_entry)\",\n        \"Return the name given a ZZip entry\"\n    ],\n    \"zip_entry_open\": [\n        \"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\n        \"Open a Zip File, pointed by the resource entry\"\n    ],\n    \"zip_entry_read\": [\n        \"mixed zip_entry_read(resource zip_entry [, int len])\",\n        \"Read from an open directory entry\"\n    ],\n    \"zip_open\": [\n        \"resource zip_open(string filename)\",\n        \"Create new zip using source uri for output\"\n    ],\n    \"zip_read\": [\n        \"resource zip_read(resource zip)\",\n        \"Returns the next file in the archive\"\n    ],\n    \"zlib_get_coding_type\": [\n        \"string zlib_get_coding_type(void)\",\n        \"Returns the coding type used for output compression\"\n    ]\n};\n\nvar variableMap = {\n    \"$_COOKIE\": {\n        type: \"array\"\n    },\n    \"$_ENV\": {\n        type: \"array\"\n    },\n    \"$_FILES\": {\n        type: \"array\"\n    },\n    \"$_GET\": {\n        type: \"array\"\n    },\n    \"$_POST\": {\n        type: \"array\"\n    },\n    \"$_REQUEST\": {\n        type: \"array\"\n    },\n    \"$_SERVER\": {\n        type: \"array\",\n        value: {\n            \"DOCUMENT_ROOT\":  1,\n            \"GATEWAY_INTERFACE\":  1,\n            \"HTTP_ACCEPT\":  1,\n            \"HTTP_ACCEPT_CHARSET\":  1,\n            \"HTTP_ACCEPT_ENCODING\":  1 ,\n            \"HTTP_ACCEPT_LANGUAGE\":  1,\n            \"HTTP_CONNECTION\":  1,\n            \"HTTP_HOST\":  1,\n            \"HTTP_REFERER\":  1,\n            \"HTTP_USER_AGENT\":  1,\n            \"PATH_TRANSLATED\":  1,\n            \"PHP_SELF\":  1,\n            \"QUERY_STRING\":  1,\n            \"REMOTE_ADDR\":  1,\n            \"REMOTE_PORT\":  1,\n            \"REQUEST_METHOD\":  1,\n            \"REQUEST_URI\":  1,\n            \"SCRIPT_FILENAME\":  1,\n            \"SCRIPT_NAME\":  1,\n            \"SERVER_ADMIN\":  1,\n            \"SERVER_NAME\":  1,\n            \"SERVER_PORT\":  1,\n            \"SERVER_PROTOCOL\":  1,\n            \"SERVER_SIGNATURE\":  1,\n            \"SERVER_SOFTWARE\":  1\n        }\n    },\n    \"$_SESSION\": {\n        type: \"array\"\n    },\n    \"$GLOBALS\": {\n        type: \"array\"\n    }\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type) > -1;\n}\n\nvar PhpCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        \n        if (token.type==='support.php_tag' && token.value==='<?')\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (token.type==='identifier') {\n            if (token.index > 0) {\n                var prevToken = session.getTokenAt(pos.row, token.start);\n                if (prevToken.type==='support.php_tag') {\n                    return this.getTagCompletions(state, session, pos, prefix);\n                }\n            }\n            return this.getFunctionCompletions(state, session, pos, prefix);\n        }\n        if (is(token, \"variable\"))\n            return this.getVariableCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (token.type==='string' && /(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(line))\n            return this.getArrayKeyCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n    \n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return [{\n            caption: 'php',\n            value: 'php',\n            meta: \"php tag\",\n            score: 1000000\n        }, {\n            caption: '=',\n            value: '=',\n            meta: \"php tag\",\n            score: 1000000\n        }];\n    };\n\n    this.getFunctionCompletions = function(state, session, pos, prefix) {\n        var functions = Object.keys(functionMap);\n        return functions.map(function(func){\n            return {\n                caption: func,\n                snippet: func + '($0)',\n                meta: \"php function\",\n                score: 1000000,\n                docHTML: functionMap[func][1]\n            };\n        });\n    };\n\n    this.getVariableCompletions = function(state, session, pos, prefix) {\n        var variables = Object.keys(variableMap);\n        return variables.map(function(variable){\n            return {\n                caption: variable,\n                value: variable,\n                meta: \"php variable\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getArrayKeyCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var variable = line.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];\n\n        if (!variableMap[variable]) {\n            return [];\n        }\n\n        var keys = [];\n        if (variableMap[variable].type==='array' && variableMap[variable].value)\n            keys = Object.keys(variableMap[variable].value);\n\n        return keys.map(function(key) {\n            return {\n                caption: key,\n                value: key,\n                meta: \"php array key\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(PhpCompletions.prototype);\n\nexports.PhpCompletions = PhpCompletions;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\nvar PhpLangHighlightRules = require(\"./php_highlight_rules\").PhpLangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar PhpCompletions = require(\"./php_completions\").PhpCompletions;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar unicode = require(\"../unicode\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\n\nvar PhpMode = function(opts) {\n    this.HighlightRules = PhpLangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.$completer = new PhpCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(PhpMode, TextMode);\n\n(function() {\n\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"_]|\\\\s])+\", \"g\");\n\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState != \"doc-start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/php-inline\";\n}).call(PhpMode.prototype);\n\nvar Mode = function(opts) {\n    if (opts && opts.inline) {\n        var mode = new PhpMode();\n        mode.createWorker = this.createWorker;\n        mode.inlinePhp = true;\n        return mode;\n    }\n    HtmlMode.call(this);\n    this.HighlightRules = PhpHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"php-\": PhpMode\n    });\n    this.foldingRules.subModes[\"php-\"] = new CStyleFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/php_worker\", \"PhpWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.inlinePhp)\n            worker.call(\"setOptions\", [{inline: true}]);\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/php\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/php_laravel_blade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_laravel_blade_highlight_rules\",\"ace/mode/php\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var PHPLaravelBladeHighlightRules = require(\"./php_laravel_blade_highlight_rules\").PHPLaravelBladeHighlightRules;\n    var PHPMode = require(\"./php\").Mode;\n    var JavaScriptMode = require(\"./javascript\").Mode;\n    var CssMode = require(\"./css\").Mode;\n    var HtmlMode = require(\"./html\").Mode;\n\n    var Mode = function() {\n        PHPMode.call(this);\n\n        this.HighlightRules = PHPLaravelBladeHighlightRules;\n        this.createModeDelegates({\n            \"js-\": JavaScriptMode,\n            \"css-\": CssMode,\n            \"html-\": HtmlMode\n        });\n    };\n    oop.inherits(Mode, PHPMode);\n\n    (function() {\n\n        this.$id = \"ace/mode/php_laravel_blade\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-pig.js",
    "content": "define(\"ace/mode/pig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PigHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"comment.block.pig\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"comment.block.pig\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.pig\"\n            }]\n        }, {\n            token: \"comment.line.double-dash.asciidoc\",\n            regex: /--.*$/\n        }, {\n            token: \"keyword.control.pig\",\n            regex: /\\b(?:ASSERT|LOAD|STORE|DUMP|FILTER|DISTINCT|FOREACH|GENERATE|STREAM|JOIN|COGROUP|GROUP|CROSS|ORDER|LIMIT|UNION|SPLIT|DESCRIBE|EXPLAIN|ILLUSTRATE|AS|BY|INTO|USING|LIMIT|PARALLEL|OUTER|INNER|DEFAULT|LEFT|SAMPLE|RANK|CUBE|ALL|KILL|QUIT|MAPREDUCE|ASC|DESC|THROUGH|SHIP|CACHE|DECLARE|CASE|WHEN|THEN|END|IN|PARTITION|FULL|IMPORT|IF|ONSCHEMA|INPUT|OUTPUT)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"storage.datatypes.pig\",\n            regex: /\\b(?:int|long|float|double|chararray|bytearray|boolean|datetime|biginteger|bigdecimal|tuple|bag|map)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"support.function.storage.pig\",\n            regex: /\\b(?:PigStorage|BinStorage|BinaryStorage|PigDump|HBaseStorage|JsonLoader|JsonStorage|AvroStorage|TextLoader|PigStreaming|TrevniStorage|AccumuloStorage)\\b/\n        }, {\n            token: \"support.function.udf.pig\",\n            regex: /\\b(?:DIFF|TOBAG|TOMAP|TOP|TOTUPLE|RANDOM|FLATTEN|flatten|CUBE|ROLLUP|IsEmpty|ARITY|PluckTuple|SUBTRACT|BagToString)\\b/\n        }, {\n            token: \"support.function.udf.math.pig\",\n            regex: /\\b(?:ABS|ACOS|ASIN|ATAN|CBRT|CEIL|COS|COSH|EXP|FLOOR|LOG|LOG10|ROUND|ROUND_TO|SIN|SINH|SQRT|TAN|TANH|AVG|COUNT|COUNT_STAR|MAX|MIN|SUM|COR|COV)\\b/\n        }, {\n            token: \"support.function.udf.string.pig\",\n            regex: /\\b(?:CONCAT|INDEXOF|LAST_INDEX_OF|LCFIRST|LOWER|REGEX_EXTRACT|REGEX_EXTRACT_ALL|REPLACE|SIZE|STRSPLIT|SUBSTRING|TOKENIZE|TRIM|UCFIRST|UPPER|LTRIM|RTRIM|ENDSWITH|STARTSWITH|TRIM)\\b/\n        }, {\n            token: \"support.function.udf.datetime.pig\",\n            regex: /\\b(?:AddDuration|CurrentTime|DaysBetween|GetDay|GetHour|GetMilliSecond|GetMinute|GetMonth|GetSecond|GetWeek|GetWeekYear|GetYear|HoursBetween|MilliSecondsBetween|MinutesBetween|MonthsBetween|SecondsBetween|SubtractDuration|ToDate|WeeksBetween|YearsBetween|ToMilliSeconds|ToString|ToUnixTime)\\b/\n        }, {\n            token: \"support.function.command.pig\",\n            regex: /\\b(?:cat|cd|copyFromLocal|copyToLocal|cp|ls|mkdir|mv|pwd|rm)\\b/\n        }, {\n            token: \"variable.pig\",\n            regex: /\\$[a_zA-Z0-9_]+/\n        }, {\n            token: \"constant.language.pig\",\n            regex: /\\b(?:NULL|true|false|stdin|stdout|stderr)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.numeric.pig\",\n            regex: /\\b\\d+(?:\\.\\d+)?\\b/\n        }, {\n            token: \"keyword.operator.comparison.pig\",\n            regex: /!=|==|<|>|<=|>=|\\b(?:MATCHES|IS|OR|AND|NOT)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.operator.arithmetic.pig\",\n            regex: /\\+|\\-|\\*|\\/|\\%|\\?|:|::|\\.\\.|#/\n        }, {\n            token: \"string.quoted.double.pig\",\n            regex: /\"/,\n            push: [{\n                token: \"string.quoted.double.pig\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.pig\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.pig\"\n            }]\n        }, {\n            token: \"string.quoted.single.pig\",\n            regex: /'/,\n            push: [{\n                token: \"string.quoted.single.pig\",\n                regex: /'/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.pig\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.single.pig\"\n            }]\n        }, {\n            todo: {\n                token: [\n                    \"text\",\n                    \"keyword.parameter.pig\",\n                    \"text\",\n                    \"storage.type.parameter.pig\"\n                ],\n                regex: /^(\\s*)(set)(\\s+)(\\S+)/,\n                caseInsensitive: true,\n                push: [{\n                    token: \"text\",\n                    regex: /$/,\n                    next: \"pop\"\n                }, {\n                    include: \"$self\"\n                }]\n            }\n        }, {\n            token: [\n                \"text\",\n                \"keyword.alias.pig\",\n                \"text\",\n                \"storage.type.alias.pig\"\n            ],\n            regex: /(\\s*)(DEFINE|DECLARE|REGISTER)(\\s+)(\\S+)/,\n            caseInsensitive: true,\n            push: [{\n                token: \"text\",\n                regex: /;?$/,\n                next: \"pop\"\n            }]\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nPigHighlightRules.metaData = {\n    fileTypes: [\"pig\"],\n    name: \"Pig\",\n    scopeName: \"source.pig\"\n};\n\n\noop.inherits(PigHighlightRules, TextHighlightRules);\n\nexports.PigHighlightRules = PigHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/pig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pig_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PigHighlightRules = require(\"./pig_highlight_rules\").PigHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PigHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/pig\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-plain_text.js",
    "content": "define(\"ace/mode/plain_text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar Behaviour = require(\"./behaviour\").Behaviour;\n\nvar Mode = function() {\n    this.HighlightRules = TextHighlightRules;\n    this.$behaviour = new Behaviour();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        return '';\n    };\n    this.$id = \"ace/mode/plain_text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-powershell.js",
    "content": "define(\"ace/mode/powershell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PowershellHighlightRules = function() {\n    var keywords = (\n        \"begin|break|catch|continue|data|do|dynamicparam|else|elseif|end|exit|filter|\" +\n        \"finally|for|foreach|from|function|if|in|inlinescript|hidden|parallel|param|\" +\n        \"process|return|sequence|switch|throw|trap|try|until|while|workflow\"\n    );\n    var builtinFunctions = (\n        \"Get-AppBackgroundTask|Start-AppBackgroundTask|Unregister-AppBackgroundTask|Disable-AppBackgroundTaskDiagnosticLog|Enable-AppBackgroundTaskDiagnosticLog|Set-AppBackgroundTaskResourcePolicy|\" +\n        \"Get-AppLockerFileInformation|Get-AppLockerPolicy|New-AppLockerPolicy|Set-AppLockerPolicy|Test-AppLockerPolicy|\" +\n        \"Get-AppxLastError|Get-AppxLog|Add-AppxPackage|Add-AppxVolume|Dismount-AppxVolume|Get-AppxDefaultVolume|Get-AppxPackage|Get-AppxPackageManifest|Get-AppxVolume|Mount-AppxVolume|Move-AppxPackage|Remove-AppxPackage|Remove-AppxVolume|Set-AppxDefaultVolume|\" +\n        \"Clear-AssignedAccess|Get-AssignedAccess|Set-AssignedAccess|\" +\n        \"Add-BitLockerKeyProtector|Backup-BitLockerKeyProtector|Clear-BitLockerAutoUnlock|Disable-BitLocker|Disable-BitLockerAutoUnlock|Enable-BitLocker|Enable-BitLockerAutoUnlock|Get-BitLockerVolume|Lock-BitLocker|Remove-BitLockerKeyProtector|Resume-BitLocker|Suspend-BitLocker|Unlock-BitLocker|\" +\n        \"Add-BitsFile|Complete-BitsTransfer|Get-BitsTransfer|Remove-BitsTransfer|Resume-BitsTransfer|Set-BitsTransfer|Start-BitsTransfer|Suspend-BitsTransfer|\" +\n        \"Add-BCDataCacheExtension|Clear-BCCache|Disable-BC|Disable-BCDowngrading|Disable-BCServeOnBattery|Enable-BCDistributed|Enable-BCDowngrading|Enable-BCHostedClient|Enable-BCHostedServer|Enable-BCLocal|Enable-BCServeOnBattery|Export-BCCachePackage|Export-BCSecretKey|Get-BCClientConfiguration|Get-BCContentServerConfiguration|Get-BCDataCache|Get-BCDataCacheExtension|Get-BCHashCache|Get-BCHostedCacheServerConfiguration|Get-BCNetworkConfiguration|Get-BCStatus|Import-BCCachePackage|Import-BCSecretKey|Publish-BCFileContent|Publish-BCWebContent|Remove-BCDataCacheExtension|Reset-BC|Set-BCAuthentication|Set-BCCache|Set-BCDataCacheEntryMaxAge|Set-BCMinSMBLatency|Set-BCSecretKey|\" +\n        \"Export-BinaryMiLog|Get-CimAssociatedInstance|Get-CimClass|Get-CimInstance|Get-CimSession|Import-BinaryMiLog|Invoke-CimMethod|New-CimInstance|New-CimSession|New-CimSessionOption|Register-CimIndicationEvent|Remove-CimInstance|Remove-CimSession|Set-CimInstance|\" +\n        \"ConvertFrom-CIPolicy|\" +\n        \"Add-SignerRule|Edit-CIPolicyRule|Get-CIPolicy|Get-CIPolicyInfo|Get-SystemDriver|Merge-CIPolicy|New-CIPolicy|New-CIPolicyRule|Remove-CIPolicyRule|Set-CIPolicyVersion|Set-HVCIOptions|Set-RuleOption|\" +\n        \"Add-MpPreference|Get-MpComputerStatus|Get-MpPreference|Get-MpThreat|Get-MpThreatCatalog|Get-MpThreatDetection|Remove-MpPreference|Remove-MpThreat|Set-MpPreference|Start-MpScan|Start-MpWDOScan|Update-MpSignature|\" +\n        \"Disable-DAManualEntryPointSelection|Enable-DAManualEntryPointSelection|Get-DAClientExperienceConfiguration|Get-DAEntryPointTableItem|New-DAEntryPointTableItem|Remove-DAEntryPointTableItem|Rename-DAEntryPointTableItem|Reset-DAClientExperienceConfiguration|Reset-DAEntryPointTableItem|Set-DAClientExperienceConfiguration|Set-DAEntryPointTableItem|\" +\n        \"Add-ProvisionedAppxPackage|Apply-WindowsUnattend|Get-ProvisionedAppxPackage|Remove-ProvisionedAppxPackage|Add-AppxProvisionedPackage|Add-WindowsCapability|Add-WindowsDriver|Add-WindowsImage|Add-WindowsPackage|Clear-WindowsCorruptMountPoint|Disable-WindowsOptionalFeature|Dismount-WindowsImage|Enable-WindowsOptionalFeature|Expand-WindowsCustomDataImage|Expand-WindowsImage|Export-WindowsDriver|Export-WindowsImage|Get-AppxProvisionedPackage|Get-WIMBootEntry|Get-WindowsCapability|Get-WindowsDriver|Get-WindowsEdition|Get-WindowsImage|Get-WindowsImageContent|Get-WindowsOptionalFeature|Get-WindowsPackage|Mount-WindowsImage|New-WindowsCustomImage|New-WindowsImage|Optimize-WindowsImage|Remove-AppxProvisionedPackage|Remove-WindowsCapability|Remove-WindowsDriver|Remove-WindowsImage|Remove-WindowsPackage|Repair-WindowsImage|Save-WindowsImage|Set-AppXProvisionedDataFile|Set-WindowsEdition|Set-WindowsProductKey|Split-WindowsImage|Update-WIMBootEntry|Use-WindowsUnattend|\" +\n        \"Add-DnsClientNrptRule|Clear-DnsClientCache|Get-DnsClient|Get-DnsClientCache|Get-DnsClientGlobalSetting|Get-DnsClientNrptGlobal|Get-DnsClientNrptPolicy|Get-DnsClientNrptRule|Get-DnsClientServerAddress|Register-DnsClient|Remove-DnsClientNrptRule|Set-DnsClient|Set-DnsClientGlobalSetting|Set-DnsClientNrptGlobal|Set-DnsClientNrptRule|Set-DnsClientServerAddress|Resolve-DnsName|\" +\n        \"Add-EtwTraceProvider|Get-AutologgerConfig|Get-EtwTraceProvider|Get-EtwTraceSession|New-AutologgerConfig|New-EtwTraceSession|Remove-AutologgerConfig|Remove-EtwTraceProvider|Remove-EtwTraceSession|Send-EtwTraceSession|Set-AutologgerConfig|Set-EtwTraceProvider|Set-EtwTraceSession|\" +\n        \"Get-WinAcceptLanguageFromLanguageListOptOut|Get-WinCultureFromLanguageListOptOut|Get-WinDefaultInputMethodOverride|Get-WinHomeLocation|Get-WinLanguageBarOption|Get-WinSystemLocale|Get-WinUILanguageOverride|Get-WinUserLanguageList|New-WinUserLanguageList|Set-Culture|Set-WinAcceptLanguageFromLanguageListOptOut|Set-WinCultureFromLanguageListOptOut|Set-WinDefaultInputMethodOverride|Set-WinHomeLocation|Set-WinLanguageBarOption|Set-WinSystemLocale|Set-WinUILanguageOverride|Set-WinUserLanguageList|\" +\n        \"Connect-IscsiTarget|Disconnect-IscsiTarget|Get-IscsiConnection|Get-IscsiSession|Get-IscsiTarget|Get-IscsiTargetPortal|New-IscsiTargetPortal|Register-IscsiSession|Remove-IscsiTargetPortal|Set-IscsiChapSecret|Unregister-IscsiSession|Update-IscsiTarget|Update-IscsiTargetPortal|\" +\n        \"Get-IseSnippet|Import-IseSnippet|New-IseSnippet|\" +\n        \"Add-KdsRootKey|Clear-KdsCache|Get-KdsConfiguration|Get-KdsRootKey|Set-KdsConfiguration|Test-KdsRootKey|\" +\n        \"Compress-Archive|Expand-Archive|\" +\n        \"Export-Counter|Get-Counter|Get-WinEvent|Import-Counter|New-WinEvent|\" +\n        \"Start-Transcript|Stop-Transcript|\" +\n        \"Add-Computer|Add-Content|Checkpoint-Computer|Clear-Content|Clear-EventLog|Clear-Item|Clear-ItemProperty|Clear-RecycleBin|Complete-Transaction|Convert-Path|Copy-Item|Copy-ItemProperty|Debug-Process|Disable-ComputerRestore|Enable-ComputerRestore|Get-ChildItem|Get-Clipboard|Get-ComputerRestorePoint|Get-Content|Get-ControlPanelItem|Get-EventLog|Get-HotFix|Get-Item|Get-ItemProperty|Get-ItemPropertyValue|Get-Location|Get-Process|Get-PSDrive|Get-PSProvider|Get-Service|Get-Transaction|Get-WmiObject|Invoke-Item|Invoke-WmiMethod|Join-Path|Limit-EventLog|Move-Item|Move-ItemProperty|New-EventLog|New-Item|New-ItemProperty|New-PSDrive|New-Service|New-WebServiceProxy|Pop-Location|Push-Location|Register-WmiEvent|Remove-Computer|Remove-EventLog|Remove-Item|Remove-ItemProperty|Remove-PSDrive|Remove-WmiObject|Rename-Computer|Rename-Item|Rename-ItemProperty|Reset-ComputerMachinePassword|Resolve-Path|Restart-Computer|Restart-Service|Restore-Computer|Resume-Service|Set-Clipboard|Set-Content|Set-Item|Set-ItemProperty|Set-Location|Set-Service|Set-WmiInstance|Show-ControlPanelItem|Show-EventLog|Split-Path|Start-Process|Start-Service|Start-Transaction|Stop-Computer|Stop-Process|Stop-Service|Suspend-Service|Test-ComputerSecureChannel|Test-Connection|Test-Path|Undo-Transaction|Use-Transaction|Wait-Process|Write-EventLog|\" +\n        \"Export-ODataEndpointProxy|\" +\n        \"ConvertFrom-SecureString|ConvertTo-SecureString|Get-Acl|Get-AuthenticodeSignature|Get-CmsMessage|Get-Credential|Get-ExecutionPolicy|Get-PfxCertificate|Protect-CmsMessage|Set-Acl|Set-AuthenticodeSignature|Set-ExecutionPolicy|Unprotect-CmsMessage|\" +\n        \"ConvertFrom-SddlString|Format-Hex|Get-FileHash|Import-PowerShellDataFile|New-Guid|New-TemporaryFile|Add-Member|Add-Type|Clear-Variable|Compare-Object|ConvertFrom-Csv|ConvertFrom-Json|ConvertFrom-String|ConvertFrom-StringData|Convert-String|ConvertTo-Csv|ConvertTo-Html|ConvertTo-Json|ConvertTo-Xml|Debug-Runspace|Disable-PSBreakpoint|Disable-RunspaceDebug|Enable-PSBreakpoint|Enable-RunspaceDebug|Export-Alias|Export-Clixml|Export-Csv|Export-FormatData|Export-PSSession|Format-Custom|Format-List|Format-Table|Format-Wide|Get-Alias|Get-Culture|Get-Date|Get-Event|Get-EventSubscriber|Get-FormatData|Get-Host|Get-Member|Get-PSBreakpoint|Get-PSCallStack|Get-Random|Get-Runspace|Get-RunspaceDebug|Get-TraceSource|Get-TypeData|Get-UICulture|Get-Unique|Get-Variable|Group-Object|Import-Alias|Import-Clixml|Import-Csv|Import-LocalizedData|Import-PSSession|Invoke-Expression|Invoke-RestMethod|Invoke-WebRequest|Measure-Command|Measure-Object|New-Alias|New-Event|New-Object|New-TimeSpan|New-Variable|Out-File|Out-GridView|Out-Printer|Out-String|Read-Host|Register-EngineEvent|Register-ObjectEvent|Remove-Event|Remove-PSBreakpoint|Remove-TypeData|Remove-Variable|Select-Object|Select-String|Select-Xml|Send-MailMessage|Set-Alias|Set-Date|Set-PSBreakpoint|Set-TraceSource|Set-Variable|Show-Command|Sort-Object|Start-Sleep|Tee-Object|Trace-Command|Unblock-File|Unregister-Event|Update-FormatData|Update-List|Update-TypeData|Wait-Debugger|Wait-Event|Write-Debug|Write-Error|Write-Host|Write-Information|Write-Output|Write-Progress|Write-Verbose|Write-Warning|\" +\n        \"Connect-WSMan|Disable-WSManCredSSP|Disconnect-WSMan|Enable-WSManCredSSP|Get-WSManCredSSP|Get-WSManInstance|Invoke-WSManAction|New-WSManInstance|New-WSManSessionOption|Remove-WSManInstance|Set-WSManInstance|Set-WSManQuickConfig|Test-WSMan|\" +\n        \"Debug-MMAppPrelaunch|Disable-MMAgent|Enable-MMAgent|Get-MMAgent|Set-MMAgent|\" +\n        \"Add-DtcClusterTMMapping|Get-Dtc|Get-DtcAdvancedHostSetting|Get-DtcAdvancedSetting|Get-DtcClusterDefault|Get-DtcClusterTMMapping|Get-DtcDefault|Get-DtcLog|Get-DtcNetworkSetting|Get-DtcTransaction|Get-DtcTransactionsStatistics|Get-DtcTransactionsTraceSession|Get-DtcTransactionsTraceSetting|Install-Dtc|Remove-DtcClusterTMMapping|Reset-DtcLog|Set-DtcAdvancedHostSetting|Set-DtcAdvancedSetting|Set-DtcClusterDefault|Set-DtcClusterTMMapping|Set-DtcDefault|Set-DtcLog|Set-DtcNetworkSetting|Set-DtcTransaction|Set-DtcTransactionsTraceSession|Set-DtcTransactionsTraceSetting|Start-Dtc|Start-DtcTransactionsTraceSession|Stop-Dtc|Stop-DtcTransactionsTraceSession|Test-Dtc|Uninstall-Dtc|Write-DtcTransactionsTraceSession|Complete-DtcDiagnosticTransaction|Join-DtcDiagnosticResourceManager|New-DtcDiagnosticTransaction|Receive-DtcDiagnosticTransaction|Send-DtcDiagnosticTransaction|Start-DtcDiagnosticResourceManager|Stop-DtcDiagnosticResourceManager|Undo-DtcDiagnosticTransaction|\" +\n        \"Disable-NetAdapter|Disable-NetAdapterBinding|Disable-NetAdapterChecksumOffload|Disable-NetAdapterEncapsulatedPacketTaskOffload|Disable-NetAdapterIPsecOffload|Disable-NetAdapterLso|Disable-NetAdapterPacketDirect|Disable-NetAdapterPowerManagement|Disable-NetAdapterQos|Disable-NetAdapterRdma|Disable-NetAdapterRsc|Disable-NetAdapterRss|Disable-NetAdapterSriov|Disable-NetAdapterVmq|Enable-NetAdapter|Enable-NetAdapterBinding|Enable-NetAdapterChecksumOffload|Enable-NetAdapterEncapsulatedPacketTaskOffload|Enable-NetAdapterIPsecOffload|Enable-NetAdapterLso|Enable-NetAdapterPacketDirect|Enable-NetAdapterPowerManagement|Enable-NetAdapterQos|Enable-NetAdapterRdma|Enable-NetAdapterRsc|Enable-NetAdapterRss|Enable-NetAdapterSriov|Enable-NetAdapterVmq|Get-NetAdapter|Get-NetAdapterAdvancedProperty|Get-NetAdapterBinding|Get-NetAdapterChecksumOffload|Get-NetAdapterEncapsulatedPacketTaskOffload|Get-NetAdapterHardwareInfo|Get-NetAdapterIPsecOffload|Get-NetAdapterLso|Get-NetAdapterPacketDirect|Get-NetAdapterPowerManagement|Get-NetAdapterQos|Get-NetAdapterRdma|Get-NetAdapterRsc|Get-NetAdapterRss|Get-NetAdapterSriov|Get-NetAdapterSriovVf|Get-NetAdapterStatistics|Get-NetAdapterVmq|Get-NetAdapterVmqQueue|Get-NetAdapterVPort|New-NetAdapterAdvancedProperty|Remove-NetAdapterAdvancedProperty|Rename-NetAdapter|Reset-NetAdapterAdvancedProperty|Restart-NetAdapter|Set-NetAdapter|Set-NetAdapterAdvancedProperty|Set-NetAdapterBinding|Set-NetAdapterChecksumOffload|Set-NetAdapterEncapsulatedPacketTaskOffload|Set-NetAdapterIPsecOffload|Set-NetAdapterLso|Set-NetAdapterPacketDirect|Set-NetAdapterPowerManagement|Set-NetAdapterQos|Set-NetAdapterRdma|Set-NetAdapterRsc|Set-NetAdapterRss|Set-NetAdapterSriov|Set-NetAdapterVmq|\" +\n        \"Get-NetConnectionProfile|Set-NetConnectionProfile|\" +\n        \"Add-NetEventNetworkAdapter|Add-NetEventPacketCaptureProvider|Add-NetEventProvider|Add-NetEventVmNetworkAdapter|Add-NetEventVmSwitch|Add-NetEventWFPCaptureProvider|Get-NetEventNetworkAdapter|Get-NetEventPacketCaptureProvider|Get-NetEventProvider|Get-NetEventSession|Get-NetEventVmNetworkAdapter|Get-NetEventVmSwitch|Get-NetEventWFPCaptureProvider|New-NetEventSession|Remove-NetEventNetworkAdapter|Remove-NetEventPacketCaptureProvider|Remove-NetEventProvider|Remove-NetEventSession|Remove-NetEventVmNetworkAdapter|Remove-NetEventVmSwitch|Remove-NetEventWFPCaptureProvider|Set-NetEventPacketCaptureProvider|Set-NetEventProvider|Set-NetEventSession|Set-NetEventWFPCaptureProvider|Start-NetEventSession|Stop-NetEventSession|\" +\n        \"Add-NetLbfoTeamMember|Add-NetLbfoTeamNic|Get-NetLbfoTeam|Get-NetLbfoTeamMember|Get-NetLbfoTeamNic|New-NetLbfoTeam|Remove-NetLbfoTeam|Remove-NetLbfoTeamMember|Remove-NetLbfoTeamNic|Rename-NetLbfoTeam|Set-NetLbfoTeam|Set-NetLbfoTeamMember|Set-NetLbfoTeamNic|\" +\n        \"Add-NetNatExternalAddress|Add-NetNatStaticMapping|Get-NetNat|Get-NetNatExternalAddress|Get-NetNatGlobal|Get-NetNatSession|Get-NetNatStaticMapping|New-NetNat|Remove-NetNat|Remove-NetNatExternalAddress|Remove-NetNatStaticMapping|Set-NetNat|Set-NetNatGlobal|\" +\n        \"Get-NetQosPolicy|New-NetQosPolicy|Remove-NetQosPolicy|Set-NetQosPolicy|\" +\n        \"Copy-NetFirewallRule|Copy-NetIPsecMainModeCryptoSet|Copy-NetIPsecMainModeRule|Copy-NetIPsecPhase1AuthSet|Copy-NetIPsecPhase2AuthSet|Copy-NetIPsecQuickModeCryptoSet|Copy-NetIPsecRule|Disable-NetFirewallRule|Disable-NetIPsecMainModeRule|Disable-NetIPsecRule|Enable-NetFirewallRule|Enable-NetIPsecMainModeRule|Enable-NetIPsecRule|Find-NetIPsecRule|Get-NetFirewallAddressFilter|Get-NetFirewallApplicationFilter|Get-NetFirewallInterfaceFilter|Get-NetFirewallInterfaceTypeFilter|Get-NetFirewallPortFilter|Get-NetFirewallProfile|Get-NetFirewallRule|Get-NetFirewallSecurityFilter|Get-NetFirewallServiceFilter|Get-NetFirewallSetting|Get-NetIPsecDospSetting|Get-NetIPsecMainModeCryptoSet|Get-NetIPsecMainModeRule|Get-NetIPsecMainModeSA|Get-NetIPsecPhase1AuthSet|Get-NetIPsecPhase2AuthSet|Get-NetIPsecQuickModeCryptoSet|Get-NetIPsecQuickModeSA|Get-NetIPsecRule|New-NetFirewallRule|New-NetIPsecDospSetting|New-NetIPsecMainModeCryptoSet|New-NetIPsecMainModeRule|New-NetIPsecPhase1AuthSet|New-NetIPsecPhase2AuthSet|New-NetIPsecQuickModeCryptoSet|New-NetIPsecRule|Open-NetGPO|Remove-NetFirewallRule|Remove-NetIPsecDospSetting|Remove-NetIPsecMainModeCryptoSet|Remove-NetIPsecMainModeRule|Remove-NetIPsecMainModeSA|Remove-NetIPsecPhase1AuthSet|Remove-NetIPsecPhase2AuthSet|Remove-NetIPsecQuickModeCryptoSet|Remove-NetIPsecQuickModeSA|Remove-NetIPsecRule|Rename-NetFirewallRule|Rename-NetIPsecMainModeCryptoSet|Rename-NetIPsecMainModeRule|Rename-NetIPsecPhase1AuthSet|Rename-NetIPsecPhase2AuthSet|Rename-NetIPsecQuickModeCryptoSet|Rename-NetIPsecRule|Save-NetGPO|Set-NetFirewallAddressFilter|Set-NetFirewallApplicationFilter|Set-NetFirewallInterfaceFilter|Set-NetFirewallInterfaceTypeFilter|Set-NetFirewallPortFilter|Set-NetFirewallProfile|Set-NetFirewallRule|Set-NetFirewallSecurityFilter|Set-NetFirewallServiceFilter|Set-NetFirewallSetting|Set-NetIPsecDospSetting|Set-NetIPsecMainModeCryptoSet|Set-NetIPsecMainModeRule|Set-NetIPsecPhase1AuthSet|Set-NetIPsecPhase2AuthSet|Set-NetIPsecQuickModeCryptoSet|Set-NetIPsecRule|Show-NetFirewallRule|Show-NetIPsecRule|Sync-NetIPsecRule|Update-NetIPsecRule|Get-DAPolicyChange|New-NetIPsecAuthProposal|New-NetIPsecMainModeCryptoProposal|New-NetIPsecQuickModeCryptoProposal|\" +\n        \"Add-NetSwitchTeamMember|Get-NetSwitchTeam|Get-NetSwitchTeamMember|New-NetSwitchTeam|Remove-NetSwitchTeam|Remove-NetSwitchTeamMember|Rename-NetSwitchTeam|\" +\n        \"Find-NetRoute|Get-NetCompartment|Get-NetIPAddress|Get-NetIPConfiguration|Get-NetIPInterface|Get-NetIPv4Protocol|Get-NetIPv6Protocol|Get-NetNeighbor|Get-NetOffloadGlobalSetting|Get-NetPrefixPolicy|Get-NetRoute|Get-NetTCPConnection|Get-NetTCPSetting|Get-NetTransportFilter|Get-NetUDPEndpoint|Get-NetUDPSetting|New-NetIPAddress|New-NetNeighbor|New-NetRoute|New-NetTransportFilter|Remove-NetIPAddress|Remove-NetNeighbor|Remove-NetRoute|Remove-NetTransportFilter|Set-NetIPAddress|Set-NetIPInterface|Set-NetIPv4Protocol|Set-NetIPv6Protocol|Set-NetNeighbor|Set-NetOffloadGlobalSetting|Set-NetRoute|Set-NetTCPSetting|Set-NetUDPSetting|Test-NetConnection|\" +\n        \"Get-DAConnectionStatus|Get-NCSIPolicyConfiguration|Reset-NCSIPolicyConfiguration|Set-NCSIPolicyConfiguration|\" +\n        \"Disable-NetworkSwitchEthernetPort|Disable-NetworkSwitchFeature|Disable-NetworkSwitchVlan|Enable-NetworkSwitchEthernetPort|Enable-NetworkSwitchFeature|Enable-NetworkSwitchVlan|Get-NetworkSwitchEthernetPort|Get-NetworkSwitchFeature|Get-NetworkSwitchGlobalData|Get-NetworkSwitchVlan|New-NetworkSwitchVlan|Remove-NetworkSwitchEthernetPortIPAddress|Remove-NetworkSwitchVlan|Restore-NetworkSwitchConfiguration|Save-NetworkSwitchConfiguration|Set-NetworkSwitchEthernetPortIPAddress|Set-NetworkSwitchPortMode|Set-NetworkSwitchPortProperty|Set-NetworkSwitchVlanProperty|\" +\n        \"Add-NetIPHttpsCertBinding|Disable-NetDnsTransitionConfiguration|Disable-NetIPHttpsProfile|Disable-NetNatTransitionConfiguration|Enable-NetDnsTransitionConfiguration|Enable-NetIPHttpsProfile|Enable-NetNatTransitionConfiguration|Get-Net6to4Configuration|Get-NetDnsTransitionConfiguration|Get-NetDnsTransitionMonitoring|Get-NetIPHttpsConfiguration|Get-NetIPHttpsState|Get-NetIsatapConfiguration|Get-NetNatTransitionConfiguration|Get-NetNatTransitionMonitoring|Get-NetTeredoConfiguration|Get-NetTeredoState|New-NetIPHttpsConfiguration|New-NetNatTransitionConfiguration|Remove-NetIPHttpsCertBinding|Remove-NetIPHttpsConfiguration|Remove-NetNatTransitionConfiguration|Rename-NetIPHttpsConfiguration|Reset-Net6to4Configuration|Reset-NetDnsTransitionConfiguration|Reset-NetIPHttpsConfiguration|Reset-NetIsatapConfiguration|Reset-NetTeredoConfiguration|Set-Net6to4Configuration|Set-NetDnsTransitionConfiguration|Set-NetIPHttpsConfiguration|Set-NetIsatapConfiguration|Set-NetNatTransitionConfiguration|Set-NetTeredoConfiguration|\" +\n        \"Find-Package|Find-PackageProvider|Get-Package|Get-PackageProvider|Get-PackageSource|Import-PackageProvider|Install-Package|Install-PackageProvider|Register-PackageSource|Save-Package|Set-PackageSource|Uninstall-Package|Unregister-PackageSource|\" +\n        \"Clear-PcsvDeviceLog|Get-PcsvDevice|Get-PcsvDeviceLog|Restart-PcsvDevice|Set-PcsvDeviceBootConfiguration|Set-PcsvDeviceNetworkConfiguration|Set-PcsvDeviceUserPassword|Start-PcsvDevice|Stop-PcsvDevice|\" +\n        \"AfterAll|AfterEach|Assert-MockCalled|Assert-VerifiableMocks|BeforeAll|BeforeEach|Context|Describe|Get-MockDynamicParameters|Get-TestDriveItem|In|InModuleScope|Invoke-Mock|Invoke-Pester|It|Mock|New-Fixture|Set-DynamicParameterVariables|Setup|Should|\" +\n        \"Add-CertificateEnrollmentPolicyServer|Export-Certificate|Export-PfxCertificate|Get-Certificate|Get-CertificateAutoEnrollmentPolicy|Get-CertificateEnrollmentPolicyServer|Get-CertificateNotificationTask|Get-PfxData|Import-Certificate|Import-PfxCertificate|New-CertificateNotificationTask|New-SelfSignedCertificate|Remove-CertificateEnrollmentPolicyServer|Remove-CertificateNotificationTask|Set-CertificateAutoEnrollmentPolicy|Switch-Certificate|Test-Certificate|\" +\n        \"Disable-PnpDevice|Enable-PnpDevice|Get-PnpDevice|Get-PnpDeviceProperty|\" +\n        \"Find-DscResource|Find-Module|Find-Script|Get-InstalledModule|Get-InstalledScript|Get-PSRepository|Install-Module|Install-Script|New-ScriptFileInfo|Publish-Module|Publish-Script|Register-PSRepository|Save-Module|Save-Script|Set-PSRepository|Test-ScriptFileInfo|Uninstall-Module|Uninstall-Script|Unregister-PSRepository|Update-Module|Update-ModuleManifest|Update-Script|Update-ScriptFileInfo|\" +\n        \"Add-Printer|Add-PrinterDriver|Add-PrinterPort|Get-PrintConfiguration|Get-Printer|Get-PrinterDriver|Get-PrinterPort|Get-PrinterProperty|Get-PrintJob|Read-PrinterNfcTag|Remove-Printer|Remove-PrinterDriver|Remove-PrinterPort|Remove-PrintJob|Rename-Printer|Restart-PrintJob|Resume-PrintJob|Set-PrintConfiguration|Set-Printer|Set-PrinterProperty|Suspend-PrintJob|Write-PrinterNfcTag|\" +\n        \"Configuration|Disable-DscDebug|Enable-DscDebug|Get-DscConfiguration|Get-DscConfigurationStatus|Get-DscLocalConfigurationManager|Get-DscResource|New-DscChecksum|Remove-DscConfigurationDocument|Restore-DscConfiguration|Stop-DscConfiguration|Invoke-DscResource|Publish-DscConfiguration|Set-DscLocalConfigurationManager|Start-DscConfiguration|Test-DscConfiguration|Update-DscConfiguration|\" +\n        \"Disable-PSTrace|Disable-PSWSManCombinedTrace|Disable-WSManTrace|Enable-PSTrace|Enable-PSWSManCombinedTrace|Enable-WSManTrace|Get-LogProperties|Set-LogProperties|Start-Trace|Stop-Trace|\" +\n        \"PSConsoleHostReadline|Get-PSReadlineKeyHandler|Get-PSReadlineOption|Remove-PSReadlineKeyHandler|Set-PSReadlineKeyHandler|Set-PSReadlineOption|\" +\n        \"Add-JobTrigger|Disable-JobTrigger|Disable-ScheduledJob|Enable-JobTrigger|Enable-ScheduledJob|Get-JobTrigger|Get-ScheduledJob|Get-ScheduledJobOption|New-JobTrigger|New-ScheduledJobOption|Register-ScheduledJob|Remove-JobTrigger|Set-JobTrigger|Set-ScheduledJob|Set-ScheduledJobOption|Unregister-ScheduledJob|\" +\n        \"New-PSWorkflowSession|New-PSWorkflowExecutionOption|\" +\n        \"Invoke-AsWorkflow|\" +\n        \"Disable-ScheduledTask|Enable-ScheduledTask|Export-ScheduledTask|Get-ClusteredScheduledTask|Get-ScheduledTask|Get-ScheduledTaskInfo|New-ScheduledTask|New-ScheduledTaskAction|New-ScheduledTaskPrincipal|New-ScheduledTaskSettingsSet|New-ScheduledTaskTrigger|Register-ClusteredScheduledTask|Register-ScheduledTask|Set-ClusteredScheduledTask|Set-ScheduledTask|Start-ScheduledTask|Stop-ScheduledTask|Unregister-ClusteredScheduledTask|Unregister-ScheduledTask|\" +\n        \"Confirm-SecureBootUEFI|Format-SecureBootUEFI|Get-SecureBootPolicy|Get-SecureBootUEFI|Set-SecureBootUEFI|\" +\n        \"Block-SmbShareAccess|Close-SmbOpenFile|Close-SmbSession|Disable-SmbDelegation|Enable-SmbDelegation|Get-SmbBandwidthLimit|Get-SmbClientConfiguration|Get-SmbClientNetworkInterface|Get-SmbConnection|Get-SmbDelegation|Get-SmbMapping|Get-SmbMultichannelConnection|Get-SmbMultichannelConstraint|Get-SmbOpenFile|Get-SmbServerConfiguration|Get-SmbServerNetworkInterface|Get-SmbSession|Get-SmbShare|Get-SmbShareAccess|Grant-SmbShareAccess|New-SmbMapping|New-SmbMultichannelConstraint|New-SmbShare|Remove-SmbBandwidthLimit|Remove-SmbMapping|Remove-SmbMultichannelConstraint|Remove-SmbShare|Revoke-SmbShareAccess|Set-SmbBandwidthLimit|Set-SmbClientConfiguration|Set-SmbPathAcl|Set-SmbServerConfiguration|Set-SmbShare|Unblock-SmbShareAccess|Update-SmbMultichannelConnection|\" +\n        \"Move-SmbClient|Get-SmbWitnessClient|Move-SmbWitnessClient|\" +\n        \"Get-StartApps|Export-StartLayout|Import-StartLayout|\" +\n        \"Disable-PhysicalDiskIndication|Disable-StorageDiagnosticLog|Enable-PhysicalDiskIndication|Enable-StorageDiagnosticLog|Flush-Volume|Get-DiskSNV|Get-PhysicalDiskSNV|Get-StorageEnclosureSNV|Initialize-Volume|Write-FileSystemCache|Add-InitiatorIdToMaskingSet|Add-PartitionAccessPath|Add-PhysicalDisk|Add-TargetPortToMaskingSet|Add-VirtualDiskToMaskingSet|Block-FileShareAccess|Clear-Disk|Clear-FileStorageTier|Clear-StorageDiagnosticInfo|Connect-VirtualDisk|Debug-FileShare|Debug-StorageSubSystem|Debug-Volume|Disable-PhysicalDiskIdentification|Disable-StorageEnclosureIdentification|Disable-StorageHighAvailability|Disconnect-VirtualDisk|Dismount-DiskImage|Enable-PhysicalDiskIdentification|Enable-StorageEnclosureIdentification|Enable-StorageHighAvailability|Format-Volume|Get-DedupProperties|Get-Disk|Get-DiskImage|Get-DiskStorageNodeView|Get-FileIntegrity|Get-FileShare|Get-FileShareAccessControlEntry|Get-FileStorageTier|Get-InitiatorId|Get-InitiatorPort|Get-MaskingSet|Get-OffloadDataTransferSetting|Get-Partition|Get-PartitionSupportedSize|Get-PhysicalDisk|Get-PhysicalDiskStorageNodeView|Get-ResiliencySetting|Get-StorageAdvancedProperty|Get-StorageDiagnosticInfo|Get-StorageEnclosure|Get-StorageEnclosureStorageNodeView|Get-StorageEnclosureVendorData|Get-StorageFaultDomain|Get-StorageFileServer|Get-StorageFirmwareInformation|Get-StorageHealthAction|Get-StorageHealthReport|Get-StorageHealthSetting|Get-StorageJob|Get-StorageNode|Get-StoragePool|Get-StorageProvider|Get-StorageReliabilityCounter|Get-StorageSetting|Get-StorageSubSystem|Get-StorageTier|Get-StorageTierSupportedSize|Get-SupportedClusterSizes|Get-SupportedFileSystems|Get-TargetPort|Get-TargetPortal|Get-VirtualDisk|Get-VirtualDiskSupportedSize|Get-Volume|Get-VolumeCorruptionCount|Get-VolumeScrubPolicy|Grant-FileShareAccess|Hide-VirtualDisk|Initialize-Disk|Mount-DiskImage|New-FileShare|New-MaskingSet|New-Partition|New-StorageFileServer|New-StoragePool|New-StorageSubsystemVirtualDisk|New-StorageTier|New-VirtualDisk|New-VirtualDiskClone|New-VirtualDiskSnapshot|New-Volume|Optimize-StoragePool|Optimize-Volume|Register-StorageSubsystem|Remove-FileShare|Remove-InitiatorId|Remove-InitiatorIdFromMaskingSet|Remove-MaskingSet|Remove-Partition|Remove-PartitionAccessPath|Remove-PhysicalDisk|Remove-StorageFileServer|Remove-StorageHealthSetting|Remove-StoragePool|Remove-StorageTier|Remove-TargetPortFromMaskingSet|Remove-VirtualDisk|Remove-VirtualDiskFromMaskingSet|Rename-MaskingSet|Repair-FileIntegrity|Repair-VirtualDisk|Repair-Volume|Reset-PhysicalDisk|Reset-StorageReliabilityCounter|Resize-Partition|Resize-StorageTier|Resize-VirtualDisk|Revoke-FileShareAccess|Set-Disk|Set-FileIntegrity|Set-FileShare|Set-FileStorageTier|Set-InitiatorPort|Set-Partition|Set-PhysicalDisk|Set-ResiliencySetting|Set-StorageFileServer|Set-StorageHealthSetting|Set-StoragePool|Set-StorageProvider|Set-StorageSetting|Set-StorageSubSystem|Set-StorageTier|Set-VirtualDisk|Set-Volume|Set-VolumeScrubPolicy|Show-VirtualDisk|Start-StorageDiagnosticLog|Stop-StorageDiagnosticLog|Stop-StorageJob|Unblock-FileShareAccess|Unregister-StorageSubsystem|Update-Disk|Update-HostStorageCache|Update-StorageFirmware|Update-StoragePool|Update-StorageProviderCache|Write-VolumeCache|\" +\n        \"Disable-TlsCipherSuite|Disable-TlsSessionTicketKey|Enable-TlsCipherSuite|Enable-TlsSessionTicketKey|Export-TlsSessionTicketKey|Get-TlsCipherSuite|New-TlsSessionTicketKey|\" +\n        \"Get-TroubleshootingPack|Invoke-TroubleshootingPack|\" +\n        \"Clear-Tpm|ConvertTo-TpmOwnerAuth|Disable-TpmAutoProvisioning|Enable-TpmAutoProvisioning|Get-Tpm|Get-TpmEndorsementKeyInfo|Get-TpmSupportedFeature|Import-TpmOwnerAuth|Initialize-Tpm|Set-TpmOwnerAuth|Unblock-Tpm|\" +\n        \"Add-VpnConnection|Add-VpnConnectionRoute|Add-VpnConnectionTriggerApplication|Add-VpnConnectionTriggerDnsConfiguration|Add-VpnConnectionTriggerTrustedNetwork|Get-VpnConnection|Get-VpnConnectionTrigger|New-EapConfiguration|New-VpnServerAddress|Remove-VpnConnection|Remove-VpnConnectionRoute|Remove-VpnConnectionTriggerApplication|Remove-VpnConnectionTriggerDnsConfiguration|Remove-VpnConnectionTriggerTrustedNetwork|Set-VpnConnection|Set-VpnConnectionIPsecConfiguration|Set-VpnConnectionProxy|Set-VpnConnectionTriggerDnsConfiguration|Set-VpnConnectionTriggerTrustedNetwork|\" +\n        \"Add-OdbcDsn|Disable-OdbcPerfCounter|Disable-WdacBidTrace|Enable-OdbcPerfCounter|Enable-WdacBidTrace|Get-OdbcDriver|Get-OdbcDsn|Get-OdbcPerfCounter|Get-WdacBidTrace|Remove-OdbcDsn|Set-OdbcDriver|Set-OdbcDsn|\" +\n        \"Get-WindowsDeveloperLicense|Show-WindowsDeveloperLicenseRegistration|Unregister-WindowsDeveloperLicense|\" +\n        \"Disable-WindowsErrorReporting|Enable-WindowsErrorReporting|Get-WindowsErrorReporting|\" +\n        \"Get-WindowsSearchSetting|Set-WindowsSearchSetting|\" +\n        \"Get-WindowsUpdateLog\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\");\n    var binaryOperatorsRe = (\n        \"eq|ne|gt|lt|le|ge|like|notlike|match|notmatch|contains|notcontains|in|notin|band|bor|bxor|bnot|\" + \n        \"ceq|cne|cgt|clt|cle|cge|clike|cnotlike|cmatch|cnotmatch|ccontains|cnotcontains|cin|cnotin|\" + \n        \"ieq|ine|igt|ilt|ile|ige|ilike|inotlike|imatch|inotmatch|icontains|inotcontains|iin|inotin|\" +\n        \"and|or|xor|not|\" +\n        \"split|join|replace|f|\" +\n        \"csplit|creplace|\" +\n        \"isplit|ireplace|\" +\n        \"is|isnot|as|\" +\n        \"shl|shr\"\n    );\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment.start\",\n                regex : \"<#\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"[$](?:[Tt]rue|[Ff]alse)\\\\b\"\n            }, {\n                token : \"constant.language\",\n                regex : \"[$][Nn]ull\\\\b\"\n            }, {\n                token : \"variable.instance\",\n                regex : \"[$][a-zA-Z][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"\\\\-(?:\" + binaryOperatorsRe + \")\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"&|\\\\+|\\\\-|\\\\*|\\\\/|\\\\%|\\\\=|\\\\>|\\\\&|\\\\!|\\\\|\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\",\n                regex : \"#>\",\n                next : \"start\"\n            }, {\n                token : \"doc.comment.tag\",\n                regex : \"^\\\\.\\\\w+\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n};\n\noop.inherits(PowershellHighlightRules, TextHighlightRules);\n\nexports.PowershellHighlightRules = PowershellHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/powershell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/powershell_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PowershellHighlightRules = require(\"./powershell_highlight_rules\").PowershellHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PowershellHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode({start: \"^\\\\s*(<#)\", end: \"^[#\\\\s]>\\\\s*$\"});\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"<#\", end: \"#>\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n      \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/powershell\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-praat.js",
    "content": "define(\"ace/mode/praat_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PraatHighlightRules = function() {\n\n    var keywords = (\n        \"if|then|else|elsif|elif|endif|fi|\" +\n        \"endfor|endproc|\" + // related keywords specified below\n        \"while|endwhile|\" +\n        \"repeat|until|\" +\n        \"select|plus|minus|\" +\n        \"assert|asserterror\"\n    );\n\n    var predefinedVariables = (\n        \"macintosh|windows|unix|\" +\n        \"praatVersion|praatVersion\\\\$\" +\n        \"pi|undefined|\" +\n        \"newline\\\\$|tab\\\\$|\" +\n        \"shellDirectory\\\\$|homeDirectory\\\\$|preferencesDirectory\\\\$|\" +\n        \"temporaryDirectory\\\\$|defaultDirectory\\\\$\"\n    );\n    var directives = (\n        \"clearinfo|endSendPraat\"\n    );\n\n    var functions = (\n        \"writeInfo|writeInfoLine|appendInfo|appendInfoLine|info\\\\$|\" +\n        \"writeFile|writeFileLine|appendFile|appendFileLine|\" +\n        \"abs|round|floor|ceiling|min|max|imin|imax|\" +\n        \"sqrt|sin|cos|tan|arcsin|arccos|arctan|arctan2|sinc|sincpi|\" +\n        \"exp|ln|lnBeta|lnGamma|log10|log2|\" +\n        \"sinh|cosh|tanh|arcsinh|arccosh|arctanh|\" +\n        \"sigmoid|invSigmoid|erf|erfc|\" +\n        \"random(?:Uniform|Integer|Gauss|Poisson|Binomial)|\" +\n        \"gaussP|gaussQ|invGaussQ|incompleteGammaP|incompleteBeta|\" +\n        \"chiSquareP|chiSquareQ|invChiSquareQ|studentP|studentQ|invStudentQ|\" +\n        \"fisherP|fisherQ|invFisherQ|\" +\n        \"binomialP|binomialQ|invBinomialP|invBinomialQ|\" +\n        \"hertzToBark|barkToHerz|\" +\n        \"hertzToMel|melToHertz|\" +\n        \"hertzToSemitones|semitonesToHerz|\" +\n        \"erb|hertzToErb|erbToHertz|\" +\n        \"phonToDifferenceLimens|differenceLimensToPhon|\" +\n        \"soundPressureToPhon|\" +\n        \"beta|beta2|besselI|besselK|\" +\n        \"numberOfColumns|numberOfRows|\" +\n        \"selected|selected\\\\$|numberOfSelected|variableExists|\"+\n        \"index|rindex|startsWith|endsWith|\"+\n        \"index_regex|rindex_regex|replace_regex\\\\$|\"+\n        \"length|extractWord\\\\$|extractLine\\\\$|extractNumber|\" +\n        \"left\\\\$|right\\\\$|mid\\\\$|replace\\\\$|\" +\n        \"date\\\\$|fixed\\\\$|percent\\\\$|\" +\n        \"zero#|linear#|randomUniform#|randomInteger#|randomGauss#|\" +\n        \"beginPause|endPause|\" +\n        \"demoShow|demoWindowTitle|demoInput|demoWaitForInput|\" +\n        \"demoClicked|demoClickedIn|demoX|demoY|\" +\n        \"demoKeyPressed|demoKey\\\\$|\" +\n        \"demoExtraControlKeyPressed|demoShiftKeyPressed|\"+\n        \"demoCommandKeyPressed|demoOptionKeyPressed|\" +\n        \"environment\\\\$|chooseReadFile\\\\$|\" +\n        \"chooseDirectory\\\\$|createDirectory|fileReadable|deleteFile|\" +\n        \"selectObject|removeObject|plusObject|minusObject|\" +\n        \"runScript|exitScript|\" +\n        \"beginSendPraat|endSendPraat|\" +\n        \"objectsAreIdentical\"\n    );\n\n    var objectTypes = (\n        \"Activation|AffineTransform|AmplitudeTier|Art|Artword|Autosegment|\"  +\n        \"BarkFilter|CCA|Categories|Cepstrum|Cepstrumc|ChebyshevSeries|\"      +\n        \"ClassificationTable|Cochleagram|Collection|Configuration|\"          +\n        \"Confusion|ContingencyTable|Corpus|Correlation|Covariance|\"          +\n        \"CrossCorrelationTable|CrossCorrelationTables|DTW|Diagonalizer|\"     +\n        \"Discriminant|Dissimilarity|Distance|Distributions|DurationTier|\"    +\n        \"EEG|ERP|ERPTier|Eigen|Excitation|Excitations|ExperimentMFC|FFNet|\"  +\n        \"FeatureWeights|Formant|FormantFilter|FormantGrid|FormantPoint|\"     +\n        \"FormantTier|GaussianMixture|HMM|HMM_Observation|\"                   +\n        \"HMM_ObservationSequence|HMM_State|HMM_StateSequence|Harmonicity|\"   +\n        \"ISpline|Index|Intensity|IntensityTier|IntervalTier|KNN|KlattGrid|\"  +\n        \"KlattTable|LFCC|LPC|Label|LegendreSeries|LinearRegression|\"         +\n        \"LogisticRegression|LongSound|Ltas|MFCC|MSpline|ManPages|\"           +\n        \"Manipulation|Matrix|MelFilter|MixingMatrix|Movie|Network|\"          +\n        \"OTGrammar|OTHistory|OTMulti|PCA|PairDistribution|ParamCurve|\"       +\n        \"Pattern|Permutation|Pitch|PitchTier|PointProcess|Polygon|\"          +\n        \"Polynomial|Procrustes|RealPoint|RealTier|ResultsMFC|Roots|SPINET|\"  +\n        \"SSCP|SVD|Salience|ScalarProduct|Similarity|SimpleString|\"           +\n        \"SortedSetOfString|Sound|Speaker|Spectrogram|Spectrum|SpectrumTier|\" +\n        \"SpeechSynthesizer|SpellingChecker|Strings|StringsIndex|Table|\"      +\n        \"TableOfReal|TextGrid|TextInterval|TextPoint|TextTier|Tier|\"         +\n        \"Transition|VocalTract|Weight|WordList\"\n    );\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"string.interpolated\",\n                regex : /'((?:\\.?[a-z][a-zA-Z0-9_.]*)(?:\\$|#|:[0-9]+)?)'/\n            }, {\n                token : [\"text\", \"text\", \"keyword.operator\", \"text\", \"keyword\"],\n                regex : /(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(stopwatch)/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"string\"],\n                regex : /(^\\s*)(print(?:line|tab)?|echo|exit|pause|send(?:praat|socket)|include|execute|system(?:_nocheck)?)(\\s+)(.*)/\n            }, {\n                token : [\"text\", \"keyword\"],\n                regex : \"(^\\\\s*)(\" + directives + \")$\"\n            }, {\n                token : [\"text\", \"keyword.operator\", \"text\"],\n                regex : /(\\s+)((?:\\+|-|\\/|\\*|<|>)=?|==?|!=|%|\\^|\\||and|or|not)(\\s+)/\n            }, {\n                token : [\"text\", \"text\", \"keyword.operator\", \"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(?:((?:no)?warn|(?:unix_)?nocheck|noprogress)(\\s+))?((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /(^\\s*)((?:no(?:warn|check))?)(\\s*)(\\b(?:editor(?::?)|endeditor)\\b)/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /(^\\s*)(?:(demo)?(\\s+))((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /^(\\s*)(?:(demo)(\\s+))?(10|12|14|16|24)$/\n            }, {\n                token : [\"text\", \"support.function\", \"text\"],\n                regex : /(\\s*)(do\\$?)(\\s*:\\s*|\\s*\\(\\s*)/\n            }, {\n                token : \"entity.name.type\",\n                regex : \"(\" + objectTypes + \")\"\n            }, {\n                token : \"variable.language\",\n                regex : \"(\" + predefinedVariables + \")\"\n            }, {\n                token : [\"support.function\", \"text\"],\n                regex : \"((?:\" + functions + \")\\\\$?)(\\\\s*(?::|\\\\())\"\n            }, {\n                token : \"keyword\",\n                regex : /(\\bfor\\b)/,\n                next : \"for\"\n            }, {\n                token : \"keyword\",\n                regex : \"(\\\\b(?:\" + keywords + \")\\\\b)\"\n            }, {\n                token : \"string\",\n                regex : /\"[^\"]*\"/\n            }, {\n                token : \"string\",\n                regex : /\"[^\"]*$/,\n                next : \"brokenstring\"\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"entity.name.section\"],\n                regex : /(^\\s*)(\\bform\\b)(\\s+)(.*)/,\n                next : \"form\"\n            }, {\n                token : \"constant.numeric\",\n                regex : /\\b[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n            }, {\n                token : [\"keyword\", \"text\", \"entity.name.function\"],\n                regex : /(procedure)(\\s+)([^:\\s]+)/\n            }, {\n                token : [\"entity.name.function\", \"text\"],\n                regex : /(@\\S+)(:|\\s*\\()/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"entity.name.function\"],\n                regex : /(^\\s*)(call)(\\s+)(\\S+)/\n            }, {\n                token : \"comment\",\n                regex : /(^\\s*#|;).*$/\n            }, {\n                token : \"text\",\n                regex : /\\s+/\n            }\n        ],\n        \"form\" : [\n            {\n                token : [\"keyword\", \"text\", \"constant.numeric\"],\n                regex : /((?:optionmenu|choice)\\s+)(\\S+:\\s+)([0-9]+)/\n            }, {\n                token : [\"keyword\", \"constant.numeric\"],\n                regex : /((?:option|button)\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/\n            }, {\n                token : [\"keyword\", \"string\"],\n                regex : /((?:option|button)\\s+)(.*)/\n            }, {\n                token : [\"keyword\", \"text\", \"string\"],\n                regex : /((?:sentence|text)\\s+)(\\S+\\s*)(.*)/\n            }, {\n                token : [\"keyword\", \"text\", \"string\", \"invalid.illegal\"],\n                regex : /(word\\s+)(\\S+\\s*)(\\S+)?(\\s.*)?/\n            }, {\n                token : [\"keyword\", \"text\", \"constant.language\"],\n                regex : /(boolean\\s+)(\\S+\\s*)(0|1|\"?(?:yes|no)\"?)/\n            }, {\n                token : [\"keyword\", \"text\", \"constant.numeric\"],\n                regex : /((?:real|natural|positive|integer)\\s+)(\\S+\\s*)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/\n            }, {\n                token : [\"keyword\", \"string\"],\n                regex : /(comment\\s+)(.*)/\n            }, {\n                token : \"keyword\",\n                regex : 'endform',\n                next : \"start\"\n            }\n        ],\n        \"for\" : [\n            {\n                token : [\"keyword\", \"text\", \"constant.numeric\", \"text\"],\n                regex : /(from|to)(\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?)(\\s*)/\n            }, {\n                token : [\"keyword\", \"text\"],\n                regex : /(from|to)(\\s+\\S+\\s*)/\n            }, {\n                token : \"text\",\n                regex : /$/,\n                next : \"start\"\n            }\n        ],\n        \"brokenstring\" : [\n            {\n                token : [\"text\", \"string\"],\n                regex : /(\\s*\\.{3})([^\"]*)/\n            }, {\n                token : \"string\",\n                regex : /\"/,\n                next : \"start\"\n            }\n        ]\n    };\n};\n\noop.inherits(PraatHighlightRules, TextHighlightRules);\n\nexports.PraatHighlightRules = PraatHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/praat\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/praat_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PraatHighlightRules = require(\"./praat_highlight_rules\").PraatHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PraatHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/praat\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-prolog.js",
    "content": "define(\"ace/mode/prolog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PrologHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { include: '#comment' },\n         { include: '#basic_fact' },\n         { include: '#rule' },\n         { include: '#directive' },\n         { include: '#fact' } ],\n      '#atom': \n       [ { token: 'constant.other.atom.prolog',\n           regex: '\\\\b[a-z][a-zA-Z0-9_]*\\\\b' },\n         { token: 'constant.numeric.prolog',\n           regex: '-?\\\\d+(?:\\\\.\\\\d+)?' },\n         { include: '#string' } ],\n      '#basic_elem': \n       [ { include: '#comment' },\n         { include: '#statement' },\n         { include: '#constants' },\n         { include: '#operators' },\n         { include: '#builtins' },\n         { include: '#list' },\n         { include: '#atom' },\n         { include: '#variable' } ],\n      '#basic_fact': \n       [ { token: \n            [ 'entity.name.function.fact.basic.prolog',\n              'punctuation.end.fact.basic.prolog' ],\n           regex: '([a-z]\\\\w*)(\\\\.)' } ],\n      '#builtins': \n       [ { token: 'support.function.builtin.prolog',\n           regex: '\\\\b(?:abolish|abort|ancestors|arg|ascii|assert[az]|atom(?:ic)?|body|char|close|conc|concat|consult|define|definition|dynamic|dump|fail|file|free|free_proc|functor|getc|goal|halt|head|head|integer|length|listing|match_args|member|next_clause|nl|nonvar|nth|number|cvars|nvars|offset|op|print?|prompt|putc|quoted|ratom|read|redefine|rename|retract(?:all)?|see|seeing|seen|skip|spy|statistics|system|tab|tell|telling|term|time|told|univ|unlink_clause|unspy_predicate|var|write)\\\\b' } ],\n      '#comment': \n       [ { token: \n            [ 'punctuation.definition.comment.prolog',\n              'comment.line.percentage.prolog' ],\n           regex: '(%)(.*$)' },\n         { token: 'punctuation.definition.comment.prolog',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.prolog',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.prolog' } ] } ],\n      '#constants': \n       [ { token: 'constant.language.prolog',\n           regex: '\\\\b(?:true|false|yes|no)\\\\b' } ],\n      '#directive': \n       [ { token: 'keyword.operator.directive.prolog',\n           regex: ':-',\n           push: \n            [ { token: 'meta.directive.prolog', regex: '\\\\.', next: 'pop' },\n              { include: '#comment' },\n              { include: '#statement' },\n              { defaultToken: 'meta.directive.prolog' } ] } ],\n      '#expr': \n       [ { include: '#comments' },\n         { token: 'meta.expression.prolog',\n           regex: '\\\\(',\n           push: \n            [ { token: 'meta.expression.prolog', regex: '\\\\)', next: 'pop' },\n              { include: '#expr' },\n              { defaultToken: 'meta.expression.prolog' } ] },\n         { token: 'keyword.control.cutoff.prolog', regex: '!' },\n         { token: 'punctuation.control.and.prolog', regex: ',' },\n         { token: 'punctuation.control.or.prolog', regex: ';' },\n         { include: '#basic_elem' } ],\n      '#fact': \n       [ { token: \n            [ 'entity.name.function.fact.prolog',\n              'punctuation.begin.fact.parameters.prolog' ],\n           regex: '([a-z]\\\\w*)(\\\\()(?!.*:-)',\n           push: \n            [ { token: \n                 [ 'punctuation.end.fact.parameters.prolog',\n                   'punctuation.end.fact.prolog' ],\n                regex: '(\\\\))(\\\\.?)',\n                next: 'pop' },\n              { include: '#parameter' },\n              { defaultToken: 'meta.fact.prolog' } ] } ],\n      '#list': \n       [ { token: 'punctuation.begin.list.prolog',\n           regex: '\\\\[(?=.*\\\\])',\n           push: \n            [ { token: 'punctuation.end.list.prolog',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#comment' },\n              { token: 'punctuation.separator.list.prolog', regex: ',' },\n              { token: 'punctuation.concat.list.prolog',\n                regex: '\\\\|',\n                push: \n                 [ { token: 'meta.list.concat.prolog',\n                     regex: '(?=\\\\s*\\\\])',\n                     next: 'pop' },\n                   { include: '#basic_elem' },\n                   { defaultToken: 'meta.list.concat.prolog' } ] },\n              { include: '#basic_elem' },\n              { defaultToken: 'meta.list.prolog' } ] } ],\n      '#operators': \n       [ { token: 'keyword.operator.prolog',\n           regex: '\\\\\\\\\\\\+|\\\\bnot\\\\b|\\\\bis\\\\b|->|[><]|[><\\\\\\\\:=]?=|(?:=\\\\\\\\|\\\\\\\\=)=' } ],\n      '#parameter': \n       [ { token: 'variable.language.anonymous.prolog',\n           regex: '\\\\b_\\\\b' },\n         { token: 'variable.parameter.prolog',\n           regex: '\\\\b[A-Z_]\\\\w*\\\\b' },\n         { token: 'punctuation.separator.parameters.prolog', regex: ',' },\n         { include: '#basic_elem' },\n         { token: 'text', regex: '[^\\\\s]' } ],\n      '#rule': \n       [ { token: 'meta.rule.prolog',\n           regex: '(?=[a-z]\\\\w*.*:-)',\n           push: \n            [ { token: 'punctuation.rule.end.prolog',\n                regex: '\\\\.',\n                next: 'pop' },\n              { token: 'meta.rule.signature.prolog',\n                regex: '(?=[a-z]\\\\w*.*:-)',\n                push: \n                 [ { token: 'meta.rule.signature.prolog',\n                     regex: '(?=:-)',\n                     next: 'pop' },\n                   { token: 'entity.name.function.rule.prolog',\n                     regex: '[a-z]\\\\w*(?=\\\\(|\\\\s*:-)' },\n                   { token: 'punctuation.rule.parameters.begin.prolog',\n                     regex: '\\\\(',\n                     push: \n                      [ { token: 'punctuation.rule.parameters.end.prolog',\n                          regex: '\\\\)',\n                          next: 'pop' },\n                        { include: '#parameter' },\n                        { defaultToken: 'meta.rule.parameters.prolog' } ] },\n                   { defaultToken: 'meta.rule.signature.prolog' } ] },\n              { token: 'keyword.operator.definition.prolog',\n                regex: ':-',\n                push: \n                 [ { token: 'meta.rule.definition.prolog',\n                     regex: '(?=\\\\.)',\n                     next: 'pop' },\n                   { include: '#comment' },\n                   { include: '#expr' },\n                   { defaultToken: 'meta.rule.definition.prolog' } ] },\n              { defaultToken: 'meta.rule.prolog' } ] } ],\n      '#statement': \n       [ { token: 'meta.statement.prolog',\n           regex: '(?=[a-z]\\\\w*\\\\()',\n           push: \n            [ { token: 'punctuation.end.statement.parameters.prolog',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#builtins' },\n              { include: '#atom' },\n              { token: 'punctuation.begin.statement.parameters.prolog',\n                regex: '\\\\(',\n                push: \n                 [ { token: 'meta.statement.parameters.prolog',\n                     regex: '(?=\\\\))',\n                     next: 'pop' },\n                   { token: 'punctuation.separator.statement.prolog', regex: ',' },\n                   { include: '#basic_elem' },\n                   { defaultToken: 'meta.statement.parameters.prolog' } ] },\n              { defaultToken: 'meta.statement.prolog' } ] } ],\n      '#string': \n       [ { token: 'punctuation.definition.string.begin.prolog',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.prolog',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.prolog', regex: '\\\\\\\\.' },\n              { token: 'constant.character.escape.quote.prolog',\n                regex: '\\'\\'' },\n              { defaultToken: 'string.quoted.single.prolog' } ] } ],\n      '#variable': \n       [ { token: 'variable.language.anonymous.prolog',\n           regex: '\\\\b_\\\\b' },\n         { token: 'variable.other.prolog',\n           regex: '\\\\b[A-Z_][a-zA-Z0-9_]*\\\\b' } ] };\n    \n    this.normalizeRules();\n};\n\nPrologHighlightRules.metaData = { fileTypes: [ 'plg', 'prolog' ],\n      foldingStartMarker: '(%\\\\s*region \\\\w*)|([a-z]\\\\w*.*:- ?)',\n      foldingStopMarker: '(%\\\\s*end(\\\\s*region)?)|(?=\\\\.)',\n      keyEquivalent: '^~P',\n      name: 'Prolog',\n      scopeName: 'source.prolog' };\n\n\noop.inherits(PrologHighlightRules, TextHighlightRules);\n\nexports.PrologHighlightRules = PrologHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/prolog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/prolog_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PrologHighlightRules = require(\"./prolog_highlight_rules\").PrologHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PrologHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"%\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/prolog\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-properties.js",
    "content": "define(\"ace/mode/properties_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PropertiesHighlightRules = function() {\n\n    var escapeRe = /\\\\u[0-9a-fA-F]{4}|\\\\/;\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /[!#].*$/\n            }, {\n                token : \"keyword\",\n                regex : /[=:]$/\n            }, {\n                token : \"keyword\",\n                regex : /[=:]/,\n                next  : \"value\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : escapeRe\n            }, {\n                defaultToken: \"variable\"\n            }\n        ],\n        \"value\" : [\n            {\n                regex : /\\\\$/,\n                token : \"string\",\n                next : \"value\"\n            }, {\n                regex : /$/,\n                token : \"string\",\n                next : \"start\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : escapeRe\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n};\n\noop.inherits(PropertiesHighlightRules, TextHighlightRules);\n\nexports.PropertiesHighlightRules = PropertiesHighlightRules;\n});\n\ndefine(\"ace/mode/properties\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/properties_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PropertiesHighlightRules = require(\"./properties_highlight_rules\").PropertiesHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = PropertiesHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/properties\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-protobuf.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/protobuf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var ProtobufHighlightRules = function() {\n\n        var builtinTypes = \"double|float|int32|int64|uint32|uint64|sint32|\" +\n                           \"sint64|fixed32|fixed64|sfixed32|sfixed64|bool|\" +\n                           \"string|bytes\";\n        var keywordDeclaration = \"message|required|optional|repeated|package|\" +\n                                 \"import|option|enum\";\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword.declaration.protobuf\": keywordDeclaration,\n            \"support.type\": builtinTypes\n        }, \"identifier\");\n\n        this.$rules = {\n            \"start\": [{\n                    token: \"comment\",\n                    regex: /\\/\\/.*$/\n                }, {\n                    token: \"comment\",\n                    regex: /\\/\\*/,\n                    next: \"comment\"\n                }, {\n                    token: \"constant\",\n                    regex: \"<[^>]+>\"\n                }, {\n                    regex: \"=\",\n                    token: \"keyword.operator.assignment.protobuf\"\n                }, {\n                    token : \"string\", // single line\n                    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n                }, {\n                    token : \"string\", // single line\n                    regex : '[\\'](?:(?:\\\\\\\\.)|(?:[^\\'\\\\\\\\]))*?[\\']'\n                }, {\n                    token: \"constant.numeric\", // hex\n                    regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n                }, {\n                    token: \"constant.numeric\", // float\n                    regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n                }, {\n                    token: keywordMapper,\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }],\n            \"comment\": [{\n                    token : \"comment\", // closing comment\n                    regex : \"\\\\*\\\\/\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }]\n        };\n\n        this.normalizeRules();\n    };\n\n    oop.inherits(ProtobufHighlightRules, TextHighlightRules);\n\n    exports.ProtobufHighlightRules = ProtobufHighlightRules;\n});\n\ndefine(\"ace/mode/protobuf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/protobuf_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar ProtobufHighlightRules = require(\"./protobuf_highlight_rules\").ProtobufHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    CMode.call(this);\n    this.foldingRules = new CStyleFoldMode();\n    this.HighlightRules = ProtobufHighlightRules;\n};\noop.inherits(Mode, CMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/protobuf\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-puppet.js",
    "content": "define(\"ace/mode/puppet_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PuppetHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: ['keyword.type.puppet', 'constant.class.puppet', 'keyword.inherits.puppet', 'constant.class.puppet'],\n                regex: \"^\\\\s*(class)(\\\\s+(?:[-_A-Za-z0-9\\\".]+::)*[-_A-Za-z0-9\\\".]+\\\\s*)(?:(inherits\\\\s*)(\\\\s+(?:[-_A-Za-z0-9\\\".]+::)*[-_A-Za-z0-9\\\".]+\\\\s*))?\"\n            },\n            {\n                token: ['storage.function.puppet', 'name.function.puppet', 'punctuation.lpar'],\n                regex: \"(^\\\\s*define)(\\\\s+[a-zA-Z0-9_:]+\\\\s*)(\\\\()\",\n                push:\n                    [{\n                        token: 'punctuation.rpar.puppet',\n                        regex: \"\\\\)\",\n                        next: 'pop'\n                    },\n                        {include: \"constants\"},\n                        {include: \"variable\"},\n                        {include: \"strings\"},\n                        {include: \"operators\"},\n                        {defaultToken: 'string'}]\n            },\n            {\n                token: [\"language.support.class\", \"keyword.operator\"],\n                regex: \"\\\\b([a-zA-Z_]+)(\\\\s+=>)\"\n            },\n            {\n                token: [\"exported.resource.puppet\", \"keyword.name.resource.puppet\", \"paren.lpar\"],\n                regex: \"(\\\\@\\\\@)?(\\\\s*[a-zA-Z_]*)(\\\\s*\\\\{)\"\n            },\n            {\n                token: \"qualified.variable.puppet\",\n                regex: \"(\\\\$([a-z][a-z0-9_]*)?(::[a-z][a-z0-9_]*)*::[a-z0-9_][a-zA-Z0-9_]*)\"\n            },\n\n            {\n                token: \"singleline.comment.puppet\",\n                regex: '#(.)*$'\n            },\n            {\n                token: \"multiline.comment.begin.puppet\",\n                regex: '^\\\\s*\\\\/\\\\*\\\\s*$',\n                push: \"blockComment\"\n            },\n            {\n                token: \"keyword.control.puppet\",\n                regex: \"\\\\b(case|if|unless|else|elsif|in|default:|and|or)\\\\s+(?!::)\"\n            },\n            {\n                token: \"keyword.control.puppet\",\n                regex: \"\\\\b(import|default|inherits|include|require|contain|node|application|consumes|environment|site|function|produces)\\\\b\"\n            },\n            {\n                token: \"support.function.puppet\",\n                regex: \"\\\\b(lest|str2bool|escape|gsub|Timestamp|Timespan|with|alert|crit|debug|notice|sprintf|split|step|strftime|slice|shellquote|type|sha1|defined|scanf|reverse_each|regsubst|return|emerg|reduce|err|failed|fail|versioncmp|file|generate|then|info|realize|search|tag|tagged|template|epp|warning|hiera_include|each|assert_type|binary_file|create_resources|dig|digest|filter|lookup|find_file|fqdn_rand|hiera_array|hiera_hash|inline_epp|inline_template|map|match|md5|new|next)\\\\b\"\n            },\n            {\n                token: \"constant.types.puppet\",\n                regex: \"\\\\b(String|File|Package|Service|Class|Integer|Array|Catalogentry|Variant|Boolean|Undef|Number|Hash|Float|Numeric|NotUndef|Callable|Optional|Any|Regexp|Sensitive|Sensitive.new|Type|Resource|Default|Enum|Scalar|Collection|Data|Pattern|Tuple|Struct)\\\\b\"\n            },\n\n            {\n                token: \"paren.lpar\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.rpar\",\n                regex: \"[\\\\])}]\"\n            },\n            {include: \"variable\"},\n            {include: \"constants\"},\n            {include: \"strings\"},\n            {include: \"operators\"},\n            {\n                token: \"regexp.begin.string.puppet\",\n                regex: \"\\\\s*(\\\\/(\\\\S)+)\\\\/\"\n            }\n        ],\n        blockComment: [{\n            regex: \"^\\\\s*\\\\/\\\\*\\\\s*$\",\n            token: \"multiline.comment.begin.puppet\",\n            push: \"blockComment\"\n        }, {\n            regex: \"^\\\\s*\\\\*\\\\/\\\\s*$\",\n            token: \"multiline.comment.end.puppet\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }],\n        \"constants\": [\n            {\n                token: \"constant.language.puppet\",\n                regex: \"\\\\b(false|true|running|stopped|installed|purged|latest|file|directory|held|undef|present|absent|link|mounted|unmounted)\\\\b\"\n            }\n        ],\n        \"variable\": [\n            {\n                token: \"variable.puppet\",\n                regex: \"(\\\\$[a-z0-9_\\{][a-zA-Z0-9_]*)\"\n            }\n        ],\n        \"strings\": [\n            {\n                token: \"punctuation.quote.puppet\",\n                regex: \"'\",\n                push:\n                    [{\n                        token: 'punctuation.quote.puppet',\n                        regex: \"'\",\n                        next: 'pop'\n                    },\n                        {include: \"escaped_chars\"},\n                        {defaultToken: 'string'}]\n            },\n            {\n                token: \"punctuation.quote.puppet\",\n                regex: '\"',\n                push:\n                    [{\n                        token: 'punctuation.quote.puppet',\n                        regex: '\"',\n                        next: 'pop'\n                    },\n                        {include: \"escaped_chars\"},\n                        {include: \"variable\"},\n                        {defaultToken: 'string'}]\n            }\n        ],\n        \"escaped_chars\": [\n            {\n                token: \"constant.escaped_char.puppet\",\n                regex: \"\\\\\\\\.\"\n            }\n        ],\n        \"operators\": [\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|::|,\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\n\noop.inherits(PuppetHighlightRules, TextHighlightRules);\n\nexports.PuppetHighlightRules = PuppetHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/puppet\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/puppet_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PuppetHighlightRules = require(\"./puppet_highlight_rules\").PuppetHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = PuppetHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n\n(function () {\n    this.$id = \"ace/mode/puppet\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-python.js",
    "content": "define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\"\n    );\n\n    var builtinConstants = (\n        \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n    );\n\n    var builtinFunctions = (\n        \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + '\"{3}',\n            next: \"rawqqstring3\"\n        }, {\n            token: \"string\", \n            regex: strRawPre + '\"(?=.)',\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'{3}\",\n            next: \"rawqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'(?=.)\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"{3}',\n            next: \"fqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"(?=.)',\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'{3}\",\n            next: \"fqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'(?=.)\",\n            next: \"fqstring\"\n        },{\n            token: \"string\",\n            regex: strRawFormatPre + '\"{3}',\n            next: \"rfqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + '\"(?=.)',\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'{3}\",\n            next: \"rfqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'(?=.)\",\n            next: \"rfqstring\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }, {\n            include: \"constants\"\n        }],\n        \"qqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring\": [{\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstringParRules\": [{//TODO: nested {}\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)]\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string\",\n            regex: \"'(.)*'\"\n        }, {\n            token: \"string\",\n            regex: '\"(.)*\"'\n        }, {\n            token: \"function.support\",\n            regex: \"(!s|!r|!a)\"\n        }, {\n            include: \"constants\"\n        },{\n            token: 'paren.rparen',\n            regex: \"}\",\n            next: 'pop'\n        },{\n            token: 'paren.lparen',\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }],\n        \"constants\": [{\n            token: \"constant.numeric\", // imaginary\n            regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: floatNumber\n        }, {\n            token: \"constant.numeric\", // long integer\n            regex: integer + \"[lL]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // integer\n            regex: integer + \"\\\\b\"\n        }, {\n            token: [\"punctuation\", \"function.support\"],// method\n            regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n\ndefine(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(markers) {\n    this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, match.index);\n            if (match[2])\n                return this.indentationBlock(session, row, match.index + match[2].length);\n            return this.indentationBlock(session, row);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/python\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/python_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar PythonFoldMode = require(\"./folding/pythonic\").FoldMode;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = PythonHighlightRules;\n    this.foldingRules = new PythonFoldMode(\"\\\\:\");\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        \n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        \n        if (!last)\n            return false;\n        \n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        \n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/python\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-r.js",
    "content": "define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TexHighlightRules = function(textClass) {\n\n    if (!textClass)\n        textClass = \"text\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : textClass, // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : textClass,\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass, // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(TexHighlightRules, TextHighlightRules);\n\nexports.TexHighlightRules = TexHighlightRules;\n});\n\ndefine(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"], function(require, exports, module)\n{\n\n   var oop = require(\"../lib/oop\");\n   var lang = require(\"../lib/lang\");\n   var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n   var TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\n\n   var RHighlightRules = function()\n   {\n\n      var keywords = lang.arrayToMap(\n            (\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\")\n                  .split(\"|\")\n            );\n\n      var buildinConstants = lang.arrayToMap(\n            (\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|\" +\n             \"NA_complex_\").split(\"|\")\n            );\n\n      this.$rules = {\n         \"start\" : [\n            {\n               token : \"comment.sectionhead\",\n               regex : \"#+(?!').*(?:----|====|####)\\\\s*$\"\n            },\n            {\n               token : \"comment\",\n               regex : \"#+'\",\n               next : \"rd-start\"\n            },\n            {\n               token : \"comment\",\n               regex : \"#.*$\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : '[\"]',\n               next : \"qqstring\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : \"[']\",\n               next : \"qstring\"\n            },\n            {\n               token : \"constant.numeric\", // hex\n               regex : \"0[xX][0-9a-fA-F]+[Li]?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // explicit integer\n               regex : \"\\\\d+L\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number\n               regex : \"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number with leading decimal\n               regex : \"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.language.boolean\",\n               regex : \"(?:TRUE|FALSE|T|F)\\\\b\"\n            },\n            {\n               token : \"identifier\",\n               regex : \"`.*?`\"\n            },\n            {\n               onMatch : function(value) {\n                  if (keywords[value])\n                     return \"keyword\";\n                  else if (buildinConstants[value])\n                     return \"constant.language\";\n                  else if (value == '...' || value.match(/^\\.\\.\\d+$/))\n                     return \"variable.language\";\n                  else\n                     return \"identifier\";\n               },\n               regex : \"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"\n            },\n            {\n               token : \"keyword.operator\",\n               regex : \"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"\n            },\n            {\n               token : \"keyword.operator\", // infix operators\n               regex : \"%.*?%\"\n            },\n            {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n            },\n            {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])}]\"\n            },\n            {\n               token : \"text\",\n               regex : \"\\\\s+\"\n            }\n         ],\n         \"qqstring\" : [\n            {\n               token : \"string\",\n               regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ],\n         \"qstring\" : [\n            {\n               token : \"string\",\n               regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ]\n      };\n\n      var rdRules = new TexHighlightRules(\"comment\").getRules();\n      for (var i = 0; i < rdRules[\"start\"].length; i++) {\n         rdRules[\"start\"][i].token += \".virtual-comment\";\n      }\n\n      this.addRules(rdRules, \"rd-\");\n      this.$rules[\"rd-start\"].unshift({\n          token: \"text\",\n          regex: \"^\",\n          next: \"start\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"keyword\",\n         regex : \"@(?!@)[^ ]*\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"comment\",\n         regex : \"@@\"\n      });\n      this.$rules[\"rd-start\"].push({\n         token : \"comment\",\n         regex : \"[^%\\\\\\\\[({\\\\])}]+\"\n      });\n   };\n\n   oop.inherits(RHighlightRules, TextHighlightRules);\n\n   exports.RHighlightRules = RHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/r\",[\"require\",\"exports\",\"module\",\"ace/unicode\",\"ace/range\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/r_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n   \"use strict\";\n\n   var unicode = require(\"../unicode\");\n   var Range = require(\"../range\").Range;\n   var oop = require(\"../lib/oop\");\n   var TextMode = require(\"./text\").Mode;\n   var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n   var RHighlightRules = require(\"./r_highlight_rules\").RHighlightRules;\n   var MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\n   var Mode = function(){\n      this.HighlightRules = RHighlightRules;\n      this.$outdent = new MatchingBraceOutdent();\n      this.$behaviour = this.$defaultBehaviour;\n   };\n   oop.inherits(Mode, TextMode);\n\n   (function() {\n      this.lineCommentStart = \"#\";\n      this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"._]+\", \"g\");\n\n      this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"._]|\\s])+\", \"g\");\n       this.$id = \"ace/mode/r\";\n   }).call(Mode.prototype);\n   exports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-razor.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CSharpHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\n        \"constant.language\": \"null|true|false\"\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : /'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/\n            }, {\n                token : \"string\", start : '\"', end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"string\", start : '@\"', end : '\"', next:[\n                    {token: \"constant.language.escape\", regex: '\"\"'}\n                ]\n            }, {\n                token : \"string\", start : /\\$\"/, end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?$)|{{/},\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"keyword\",\n                regex : \"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(CSharpHighlightRules, TextHighlightRules);\n\nexports.CSharpHighlightRules = CSharpHighlightRules;\n});\n\ndefine(\"ace/mode/razor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/csharp_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar CSharpHighlightRules = require(\"./csharp_highlight_rules\").CSharpHighlightRules;\n\nvar blockPrefix = 'razor-block-';\nvar RazorLangHighlightRules = function() {\n    CSharpHighlightRules.call(this);\n\n    var processPotentialCallback = function(value, stackItem) {\n        if (typeof stackItem === \"function\")\n            return stackItem(value);\n\n        return stackItem;\n    };\n\n    var inBraces = 'in-braces';\n    this.$rules.start.unshift({\n        regex: '[\\\\[({]',\n        onMatch: function(value, state, stack) {\n            var prefix = /razor-[^\\-]+-/.exec(state)[0];\n\n            stack.unshift(value);\n            stack.unshift(prefix + inBraces);\n            this.next = prefix + inBraces;\n            return 'paren.lparen';\n        }\n    }, {\n        start: \"@\\\\*\",\n        end: \"\\\\*@\",\n        token: \"comment\"\n    });\n\n    var parentCloseMap = {\n        '{': '}',\n        '[': ']',\n        '(': ')'\n    };\n\n    this.$rules[inBraces] = lang.deepCopy(this.$rules.start);\n    this.$rules[inBraces].unshift({\n        regex: '[\\\\])}]',\n        onMatch: function(value, state, stack) {\n            var open = stack[1];\n            if (parentCloseMap[open] !== value)\n                return 'invalid.illegal';\n\n            stack.shift(); // exit in-braces block\n            stack.shift(); // exit brace marker\n            this.next = processPotentialCallback(value, stack[0]) || 'start';\n            return 'paren.rparen';\n        }\n    });\n};\n\noop.inherits(RazorLangHighlightRules, CSharpHighlightRules);\n\nvar RazorHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var blockStartRule = {\n        regex: '@[({]|@functions{',\n        onMatch: function(value, state, stack) {\n            stack.unshift(value);\n            stack.unshift('razor-block-start');\n            this.next = 'razor-block-start';\n            return 'punctuation.block.razor';\n        }\n    };\n\n    var blockEndMap = {\n        '@{': '}',\n        '@(': ')',\n        '@functions{':'}'\n    };\n\n    var blockEndRule = {\n        regex: '[})]',\n        onMatch: function(value, state, stack) {\n            var blockStart = stack[1];\n            if (blockEndMap[blockStart] !== value)\n                return 'invalid.illegal';\n\n            stack.shift(); // exit razor block\n            stack.shift(); // remove block type marker\n            this.next = stack.shift() || 'start';\n            return 'punctuation.block.razor';\n        }\n    };\n\n    var shortStartRule = {\n        regex: \"@(?![{(])\",\n        onMatch: function(value, state, stack) {\n            stack.unshift(\"razor-short-start\");\n            this.next = \"razor-short-start\";\n            return 'punctuation.short.razor';\n        }\n    };\n\n    var shortEndRule = {\n        token: \"\",\n        regex: \"(?=[^A-Za-z_\\\\.()\\\\[\\\\]])\",\n        next: 'pop'\n    };\n\n    var ifStartRule = {\n        regex: \"@(?=if)\",\n        onMatch: function(value, state, stack) {\n            stack.unshift(function(value) {\n                if (value !== '}')\n                    return 'start';\n\n                return stack.shift() || 'start';\n            });\n            this.next = 'razor-block-start';\n            return 'punctuation.control.razor';\n        }\n    };\n\n    var razorStartRules = [\n        {\n            start: \"@\\\\*\",\n            end: \"\\\\*@\",\n            token: \"comment\"\n        },\n        {\n            token: [\"meta.directive.razor\", \"text\", \"identifier\"],\n            regex: \"^(\\\\s*@model)(\\\\s+)(.+)$\"\n        },\n        blockStartRule,\n        shortStartRule\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], razorStartRules);\n\n    this.embedRules(RazorLangHighlightRules, \"razor-block-\", [blockEndRule], [\"start\"]);\n    this.embedRules(RazorLangHighlightRules, \"razor-short-\", [shortEndRule], [\"start\"]);\n\n    this.normalizeRules();\n};\n\noop.inherits(RazorHighlightRules, HtmlHighlightRules);\n\nexports.RazorHighlightRules = RazorHighlightRules;\nexports.RazorLangHighlightRules = RazorLangHighlightRules;\n});\n\ndefine(\"ace/mode/razor_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar keywords = [\n    \"abstract\", \"as\", \"base\", \"bool\",\n    \"break\", \"byte\", \"case\", \"catch\",\n    \"char\", \"checked\", \"class\", \"const\",\n    \"continue\", \"decimal\", \"default\", \"delegate\",\n    \"do\", \"double\",\"else\",\"enum\",\n    \"event\", \"explicit\", \"extern\", \"false\",\n    \"finally\", \"fixed\", \"float\", \"for\",\n    \"foreach\", \"goto\", \"if\", \"implicit\",\n    \"in\", \"int\", \"interface\", \"internal\",\n    \"is\", \"lock\", \"long\", \"namespace\",\n    \"new\", \"null\", \"object\", \"operator\",\n    \"out\", \"override\", \"params\", \"private\",\n    \"protected\", \"public\", \"readonly\", \"ref\",\n    \"return\", \"sbyte\", \"sealed\", \"short\",\n    \"sizeof\", \"stackalloc\", \"static\", \"string\",\n    \"struct\", \"switch\", \"this\", \"throw\",\n    \"true\", \"try\", \"typeof\", \"uint\",\n    \"ulong\", \"unchecked\", \"unsafe\", \"ushort\",\n    \"using\", \"var\", \"virtual\", \"void\",\n    \"volatile\", \"while\"];\n\nvar shortHands  = [\n    \"Html\", \"Model\", \"Url\", \"Layout\"\n];\n    \nvar RazorCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        \n        if(state.lastIndexOf(\"razor-short-start\") == -1 && state.lastIndexOf(\"razor-block-start\") == -1)\n            return [];\n        \n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        \n        if(state.lastIndexOf(\"razor-short-start\") != -1) {\n            return this.getShortStartCompletions(state, session, pos, prefix);\n        }\n        \n        if(state.lastIndexOf(\"razor-block-start\") != -1) {\n            return this.getKeywordCompletions(state, session, pos, prefix);\n        }\n\n        \n    };\n    \n    this.getShortStartCompletions = function(state, session, pos, prefix) {\n        return shortHands.map(function(element){\n            return {\n                value: element,\n                meta: \"keyword\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getKeywordCompletions = function(state, session, pos, prefix) {\n        return shortHands.concat(keywords).map(function(element){\n            return {\n                value: element,\n                meta: \"keyword\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(RazorCompletions.prototype);\n\nexports.RazorCompletions = RazorCompletions;\n\n});\n\ndefine(\"ace/mode/razor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/razor_highlight_rules\",\"ace/mode/razor_completions\",\"ace/mode/html_completions\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar RazorHighlightRules = require(\"./razor_highlight_rules\").RazorHighlightRules;\nvar RazorCompletions = require(\"./razor_completions\").RazorCompletions;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.$highlightRules = new RazorHighlightRules();\n    this.$completer = new RazorCompletions();\n    this.$htmlCompleter = new HtmlCompletions();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.getCompletions = function(state, session, pos, prefix) {\n        var razorToken = this.$completer.getCompletions(state, session, pos, prefix);\n        var htmlToken = this.$htmlCompleter.getCompletions(state, session, pos, prefix);\n        return razorToken.concat(htmlToken);\n    };\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/razor\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-rdoc.js",
    "content": "define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LatexHighlightRules = function() {  \n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            token : [\"keyword\", \"lparen\", \"variable.parameter\", \"rparen\", \"lparen\", \"storage.type\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"\n        }, {\n            token : [\"keyword\",\"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"\n        }, {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(verbatim)(})\",\n            next : \"verbatim\"\n        },  {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(lstlisting)(})\",\n            next : \"lstlisting\"\n        },  {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"\n        }, {\n            token : \"storage.type\",\n            regex : /\\\\verb\\b\\*?/,\n            next : [{\n                token : [\"keyword.operator\", \"string\", \"keyword.operator\"],\n                regex : \"(.)(.*?)(\\\\1|$)|\",\n                next : \"start\"\n            }]\n        }, {\n            token : \"storage.type\",\n            regex : \"\\\\\\\\[a-zA-Z]+\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\[^a-zA-Z]?\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"equation\"\n        }],\n        \"equation\" : [{\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"start\"\n        }, {\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"\n        }, {\n            token : \"error\", \n            regex : \"^\\\\s*$\", \n            next : \"start\" \n        }, {\n            defaultToken : \"string\"\n        }],\n        \"verbatim\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(verbatim)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }],\n        \"lstlisting\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(lstlisting)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\noop.inherits(LatexHighlightRules, TextHighlightRules);\n\nexports.LatexHighlightRules = LatexHighlightRules;\n\n});\n\ndefine(\"ace/mode/rdoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/latex_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LaTeXHighlightRules = require(\"./latex_highlight_rules\");\n\nvar RDocHighlightRules = function() {\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : \"text\", // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.text\", // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.text\",\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.text\",\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(RDocHighlightRules, TextHighlightRules);\n\nexports.RDocHighlightRules = RDocHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/rdoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rdoc_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RDocHighlightRules = require(\"./rdoc_highlight_rules\").RDocHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function(suppressHighlighting) {\n\tthis.HighlightRules = RDocHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.$id = \"ace/mode/rdoc\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-red.js",
    "content": "define(\"ace/mode/red_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar RedHighlightRules = function() {\n\n    var compoundKeywords = \"\";        \n\n    this.$rules = {\n        \"start\" : [\n            {token : \"keyword.operator\", \n                regex: /\\s([\\-+%/=<>*]|(?:\\*\\*\\|\\/\\/|==|>>>?|<>|<<|=>|<=|=\\?))(\\s|(?=:))/},\n            {token : \"string.email\", regex : /\\w[-\\w._]*\\@\\w[-\\w._]*/},\n            {token : \"value.time\", regex : /\\b\\d+:\\d+(:\\d+)?/},\n            {token : \"string.url\", regex : /\\w[-\\w_]*\\:(\\/\\/)?\\w[-\\w._]*(:\\d+)?/},\n            {token : \"value.date\", regex : /(\\b\\d{1,4}[-/]\\d{1,2}[-/]\\d{1,2}|\\d{1,2}[-/]\\d{1,2}[-/]\\d{1,4})\\b/},\n            {token : \"value.tuple\", regex : /\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(\\.\\d{1,3}){0,9}/},\n            {token : \"value.pair\", regex: /[+-]?\\d+x[-+]?\\d+/},\n            {token : \"value.binary\", regex : /\\b2#{([01]{8})+}/},\n            {token : \"value.binary\", regex : /\\b64#{([\\w/=+])+}/},\n            {token : \"value.binary\", regex : /(16)?#{([\\dabcdefABCDEF][\\dabcdefABCDEF])*}/},\n            {token : \"value.issue\", regex : /#\\w[-\\w'*.]*/},\n            {token : \"value.numeric\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?e[-+]?\\d{1,3}\\%?(?!\\w)/},\n            {token : \"invalid.illegal\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?[a-zA-Z]/},\n            {token : \"value.numeric\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?(?![a-zA-Z])/},\n            {token : \"value.character\", regex : /#\"(\\^[-@/_~^\"HKLM\\[]|.)\"/},\n            {token : \"string.file\", regex : /%[-\\w\\.\\/]+/},\n            {token : \"string.tag\", regex : /</, next : \"tag\"},\n            {token : \"string\", regex : /\"/, next  : \"string\"},\n            {token : \"string.other\", regex : \"{\", next  : \"string.other\"},\n            {token : \"comment\", regex : \"comment [{]\", next : \"comment\"},\n            {token : \"comment\",  regex : /;.+$/},\n            {token : \"paren.map-start\", regex : \"#\\\\(\"},\n            {token : \"paren.block-start\", regex : \"[\\\\[]\"},\n            {token : \"paren.block-end\", regex : \"[\\\\]]\"},\n            {token : \"paren.parens-start\", regex : \"[(]\"},\n            {token : \"paren.parens-end\", regex : \"\\\\)\"},\n            {token : \"keyword\", regex : \"/local|/external\"},\n            {token : \"keyword.preprocessor\", regex : \"#(if|either|\" +\n                \"switch|case|include|do|macrolocal|reset|process|trace)\"},\n            {token : \"constant.datatype!\", regex : \n                \"(?:datatype|unset|none|logic|block|paren|string|\" +\n                \"file|url|char|integer|float|word|set-word|lit-word|\" +\n                \"get-word|refinement|issue|native|action|op|function|\" +\n                \"path|lit-path|set-path|get-path|routine|bitset|point|\" + \n                \"object|typeset|error|vector|hash|pair|percent|tuple|\" +\n                \"map|binary|time|tag|email|handle|date|image|event|\" +\n                \"series|any-type|number|any-object|scalar|\" +\n                \"any-string|any-word|any-function|any-block|any-list|\" +\n                \"any-path|immediate|all-word|internal|external|default)!(?![-!?\\\\w~])\"},\n            {token : \"keyword.function\", regex : \n                \"\\\\b(?:collect|quote|on-parse-event|math|last|source|expand|\" +\n                \"show|context|object|input|quit|dir|make-dir|cause-error|\" +\n                \"error\\\\?|none\\\\?|block\\\\?|any-list\\\\?|word\\\\?|char\\\\?|\" +\n                \"any-string\\\\?|series\\\\?|binary\\\\?|attempt|url\\\\?|\" +\n                \"string\\\\?|suffix\\\\?|file\\\\?|object\\\\?|body-of|first|\" +\n                \"second|third|mod|clean-path|dir\\\\?|to-red-file|\" +\n                \"normalize-dir|list-dir|pad|empty\\\\?|dirize|offset\\\\?|\" +\n                \"what-dir|expand-directives|load|split-path|change-dir|\" +\n                \"to-file|path-thru|save|load-thru|View|float\\\\?|to-float|\" +\n                \"charset|\\\\?|probe|set-word\\\\?|q|words-of|replace|repend|\" +\n                \"react|function\\\\?|spec-of|unset\\\\?|halt|op\\\\?|\" +\n                \"any-function\\\\?|to-paren|tag\\\\?|routine|class-of|\" +\n                \"size-text|draw|handle\\\\?|link-tabs-to-parent|\" +\n                \"link-sub-to-parent|on-face-deep-change*|\" +\n                \"update-font-faces|do-actor|do-safe|do-events|pair\\\\?|\" +\n                \"foreach-face|hex-to-rgb|issue\\\\?|alter|path\\\\?|\" +\n                \"typeset\\\\?|datatype\\\\?|set-flag|layout|extract|image\\\\?|\" +\n                \"get-word\\\\?|to-logic|to-set-word|to-block|center-face|\" +\n                \"dump-face|request-font|request-file|request-dir|rejoin|\" +\n                \"ellipsize-at|any-block\\\\?|any-object\\\\?|map\\\\?|keys-of|\" +\n                \"a-an|also|parse-func-spec|help-string|what|routine\\\\?|\" +\n                \"action\\\\?|native\\\\?|refinement\\\\?|common-substr|\" +\n                \"red-complete-file|red-complete-path|unview|comment|\\\\?\\\\?|\" +\n                \"fourth|fifth|values-of|bitset\\\\?|email\\\\?|get-path\\\\?|\" +\n                \"hash\\\\?|integer\\\\?|lit-path\\\\?|lit-word\\\\?|logic\\\\?|\" +\n                \"paren\\\\?|percent\\\\?|set-path\\\\?|time\\\\?|tuple\\\\?|date\\\\?|\" +\n                \"vector\\\\?|any-path\\\\?|any-word\\\\?|number\\\\?|immediate\\\\?|\" +\n                \"scalar\\\\?|all-word\\\\?|to-bitset|to-binary|to-char|to-email|\" +\n                \"to-get-path|to-get-word|to-hash|to-integer|to-issue|\" +\n                \"to-lit-path|to-lit-word|to-map|to-none|to-pair|to-path|\" +\n                \"to-percent|to-refinement|to-set-path|to-string|to-tag|\" +\n                \"to-time|to-typeset|to-tuple|to-unset|to-url|to-word|\" +\n                \"to-image|to-date|parse-trace|modulo|eval-set-path|\" +\n                \"extract-boot-args|flip-exe-flag|split|do-file|\" +\n                \"exists-thru\\\\?|read-thru|do-thru|cos|sin|tan|acos|asin|\" +\n                \"atan|atan2|sqrt|clear-reactions|dump-reactions|react\\\\?|\" +\n                \"within\\\\?|overlap\\\\?|distance\\\\?|face\\\\?|metrics\\\\?|\" +\n                \"get-scroller|insert-event-func|remove-event-func|\" +\n                \"set-focus|help|fetch-help|about|ls|ll|pwd|cd|\" +\n                \"red-complete-input|matrix)(?![-!?\\\\w~])\"},\n            {token : \"keyword.action\", regex : \n                \"\\\\b(?:to|remove|copy|insert|change|clear|move|poke|put|\" +\n                \"random|reverse|sort|swap|take|trim|add|subtract|\" +\n                \"divide|multiply|make|reflect|form|mold|modify|\" +\n                \"absolute|negate|power|remainder|round|even\\\\?|odd\\\\?|\" +\n                \"and~|complement|or~|xor~|append|at|back|find|skip|\" +\n                \"tail|head|head\\\\?|index\\\\?|length\\\\?|next|pick|\" +\n                \"select|tail\\\\?|delete|read|write)(?![-_!?\\\\w~])\"\n            },\n            {token : \"keyword.native\", regex : \n                \"\\\\b(?:not|any|set|uppercase|lowercase|checksum|\" +\n                \"try|catch|browse|throw|all|as|\" +\n                \"remove-each|func|function|does|has|do|reduce|\" +\n                \"compose|get|print|prin|equal\\\\?|not-equal\\\\?|\" +\n                \"strict-equal\\\\?|lesser\\\\?|greater\\\\?|lesser-or-equal\\\\?|\" +\n                \"greater-or-equal\\\\?|same\\\\?|type\\\\?|stats|bind|in|parse|\" +\n                \"union|unique|intersect|difference|exclude|\" +\n                \"complement\\\\?|dehex|negative\\\\?|positive\\\\?|max|min|\" +\n                \"shift|to-hex|sine|cosine|tangent|arcsine|arccosine|\" +\n                \"arctangent|arctangent2|NaN\\\\?|zero\\\\?|log-2|log-10|log-e|\" +\n                \"exp|square-root|construct|value\\\\?|as-pair|\" +\n                \"extend|debase|enbase|to-local-file|\" +\n                \"wait|unset|new-line|new-line\\\\?|context\\\\?|set-env|\" +\n                \"get-env|list-env|now|sign\\\\?|call|size\\\\?)(?![-!?\\\\w~])\"\n            },\n            {token : \"keyword\", regex : \n                \"\\\\b(?:Red(?=\\\\s+\\\\[)|object|context|make|self|keep)(?![-!?\\\\w~])\"\n            },\n            {token: \"variable.language\", regex : \"this\"},\n            {token: \"keyword.control\", regex : \n                \"(?:while|if|return|case|unless|either|until|loop|repeat|\" +\n                \"forever|foreach|forall|switch|break|continue|exit)(?![-!?\\\\w~])\"},\n            {token: \"constant.language\", regex : \n                \"\\\\b(?:true|false|on|off|yes|none|no)(?![-!?\\\\w~])\"},\n            {token: \"constant.numeric\", regex : /\\bpi(?![^-_])/},\n            {token: \"constant.character\", regex : \"\\\\b(space|tab|newline|cr|lf)(?![-!?\\\\w~])\"},\n            {token: \"keyword.operator\", regex : \"\\s(or|and|xor|is)\\s\"},\n            {token : \"variable.get-path\", regex : /:\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},\n            {token : \"variable.set-path\", regex : /\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*:/},\n            {token : \"variable.lit-path\", regex : /'\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},\n            {token : \"variable.path\", regex : /\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},\n            {token : \"variable.refinement\", regex : /\\/\\w[-\\w'*.?!]*/}, \n            {token : \"keyword.view.style\", regex : \n                \"\\\\b(?:window|base|button|text|field|area|check|\" +\n                \"radio|progress|slider|camera|text-list|\" +\n                \"drop-list|drop-down|panel|group-box|\" +\n                \"tab-panel|h1|h2|h3|h4|h5|box|image|init)(?![-!?\\\\w~])\"},\n            {token : \"keyword.view.event\", regex : \n                \"\\\\b(?:detect|on-detect|time|on-time|drawing|on-drawing|\" +\n                \"scroll|on-scroll|down|on-down|up|on-up|mid-down|\" +\n                \"on-mid-down|mid-up|on-mid-up|alt-down|on-alt-down|\" +\n                \"alt-up|on-alt-up|aux-down|on-aux-down|aux-up|\" +\n                \"on-aux-up|wheel|on-wheel|drag-start|on-drag-start|\" +\n                \"drag|on-drag|drop|on-drop|click|on-click|dbl-click|\" +\n                \"on-dbl-click|over|on-over|key|on-key|key-down|\" +\n                \"on-key-down|key-up|on-key-up|ime|on-ime|focus|\" +\n                \"on-focus|unfocus|on-unfocus|select|on-select|\" +\n                \"change|on-change|enter|on-enter|menu|on-menu|close|\" +\n                \"on-close|move|on-move|resize|on-resize|moving|\" +\n                \"on-moving|resizing|on-resizing|zoom|on-zoom|pan|\" +\n                \"on-pan|rotate|on-rotate|two-tap|on-two-tap|\" +\n                \"press-tap|on-press-tap|create|on-create|created|on-created)(?![-!?\\\\w~])\"},\n            {token : \"keyword.view.option\", regex : \n                \"\\\\b(?:all-over|center|color|default|disabled|down|\" +\n                \"flags|focus|font|font-color|font-name|\" +\n                \"font-size|hidden|hint|left|loose|name|\" +\n                \"no-border|now|rate|react|select|size|space)(?![-!?\\\\w~])\"},\n            {token : \"constant.other.colour\", regex : \"\\\\b(?:Red|white|transparent|\" +\n                \"black|gray|aqua|beige|blue|brick|brown|coal|coffee|\" +\n                \"crimson|cyan|forest|gold|green|ivory|khaki|leaf|linen|\" +\n                \"magenta|maroon|mint|navy|oldrab|olive|orange|papaya|\" +\n                \"pewter|pink|purple|reblue|rebolor|sienna|silver|sky|\" +\n                \"snow|tanned|teal|violet|water|wheat|yello|yellow|glass)(?![-!?\\\\w~])\"},\n            {token : \"variable.get-word\", regex : /\\:\\w[-\\w'*.?!]*/}, \n            {token : \"variable.set-word\", regex : /\\w[-\\w'*.?!]*\\:/}, \n            {token : \"variable.lit-word\", regex : /'\\w[-\\w'*.?!]*/},\n            {token : \"variable.word\", regex : /\\b\\w+[-\\w'*.!?]*/},\n            {caseInsensitive: true}\n        ],\n        \"string\" : [\n            {token : \"string\", regex : /\"/, next : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"string.other\" : [\n            {token : \"string.other\", regex : /}/, next : \"start\"},\n            {defaultToken : \"string.other\"}\n        ],\n        \"tag\" : [\n            {token : \"string.tag\", regex : />/, next : \"start\"},\n            {defaultToken : \"string.tag\"}\n        ],\n        \"comment\" : [\n            {token : \"comment\", regex : /}/, next : \"start\"},\n            {defaultToken : \"comment\"}\n        ]\n    };\n};\noop.inherits(RedHighlightRules, TextHighlightRules);\n\nexports.RedHighlightRules = RedHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/red\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/red_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RedHighlightRules = require(\"./red_highlight_rules\").RedHighlightRules;\nvar RedFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = RedHighlightRules;\n    this.foldingRules = new RedFoldMode();\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.blockComment = { start: \"comment {\", end: \"}\" };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\[\\(]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/red\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-redshift.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"variable\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next  : \"string\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"text\", // single quoted strings are not allowed\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"comment\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.start\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\*\",\n                next  : \"comment\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\", // comments are not allowed, but who cares?\n                regex : \"\\\\*\\\\/\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\ndefine(\"ace/mode/redshift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/json_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\n\nvar RedshiftHighlightRules = function() {\n    var keywords = (\n        \"aes128|aes256|all|allowoverwrite|analyse|analyze|and|any|array|as|asc|authorization|backup|\" + \n        \"between|binary|blanksasnull|both|bytedict|bzip2|case|cast|check|collate|column|constraint|create|credentials|\" + \n        \"cross|current_date|current_time|current_timestamp|current_user|current_user_id|default|deferrable|deflate|defrag|delta|\" + \n        \"delta32k|desc|disable|distinct|do|else|emptyasnull|enable|encode|encrypt|encryption|end|except|explicit|false|for|foreign|\" + \n        \"freeze|from|full|globaldict256|globaldict64k|grant|group|gzip|having|identity|ignore|ilike|in|initially|inner|intersect|into|is|\" + \n        \"isnull|join|leading|left|like|limit|localtime|localtimestamp|lun|luns|lzo|lzop|minus|mostly13|mostly32|mostly8|natural|new|not|notnull|\" + \n        \"null|nulls|off|offline|offset|old|on|only|open|or|order|outer|overlaps|parallel|partition|percent|permissions|placing|primary|raw|readratio|\" +\n        \"recover|references|rejectlog|resort|restore|right|select|session_user|similar|some|sysdate|system|table|tag|tdes|text255|text32k|then|timestamp|\" + \n        \"to|top|trailing|true|truncatecolumns|union|unique|user|using|verbose|wallet|when|where|with|without\"\n    );\n\n\n    var builtinFunctions = (\n        \"current_schema|current_schemas|has_database_privilege|has_schema_privilege|has_table_privilege|age|current_time|current_timestamp|localtime|\" + \n        \"isfinite|now|ascii|get_bit|get_byte|octet_length|set_bit|set_byte|to_ascii|avg|count|listagg|max|min|stddev_samp|stddev_pop|sum|var_samp|var_pop|\" + \n        \"bit_and|bit_or|bool_and|bool_or|avg|count|cume_dist|dense_rank|first_value|last_value|lag|lead|listagg|max|median|min|nth_value|ntile|percent_rank|\" + \n        \"percentile_cont|percentile_disc|rank|ratio_to_report|row_number|case|coalesce|decode|greatest|least|nvl|nvl2|nullif|add_months|age|convert_timezone|\" +\n        \"current_date|timeofday|current_time|current_timestamp|date_cmp|date_cmp_timestamp|date_part_year|dateadd|datediff|date_part|date_trunc|extract|getdate|\" +\n        \"interval_cmp|isfinite|last_day|localtime|localtimestamp|months_between|next_day|now|sysdate|timestamp_cmp|timestamp_cmp_date|trunc|abs|acos|asin|atan|\" +\n        \"atan2|cbrt|ceiling|ceil|checksum|cos|cot|degrees|dexp|dlog1|dlog10|exp|floor|ln|log|mod|pi|power|radians|random|round|sin|sign|sqrt|tan|trunc|ascii|\" +\n        \"bpcharcmp|btrim|bttext_pattern_cmp|char_length|character_length|charindex|chr|concat|crc32|func_sha1|get_bit|get_byte|initcap|left|right|len|length|\" +\n        \"lower|lpad|rpad|ltrim|md5|octet_length|position|quote_ident|quote_literal|regexp_count|regexp_instr|regexp_replace|regexp_substr|repeat|replace|replicate|\" +\n        \"reverse|rtrim|set_bit|set_byte|split_part|strpos|strtol|substring|textlen|to_ascii|to_hex|translate|trim|upper|json_array_length|json_extract_array_element_text|\" +\n        \"json_extract_path_text|cast|convert|to_char|to_date|to_number|current_database|current_schema|current_schemas|current_user|current_user_id|has_database_privilege|\" +\n        \"has_schema_privilege|has_table_privilege|pg_backend_pid|pg_last_copy_count|pg_last_copy_id|pg_last_query_id|pg_last_unload_count|session_user|slice_num|user|version\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n\n\n    var sqlRules = [{\n            token : \"string\", // single line string -- assume dollar strings if multi-line for now\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"variable.language\", // pg identifier\n            regex : '\".*?\"'\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\" // TODO - Unicode in identifiers\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\" +\n                    \"\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\" +\n                    \"\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|\" +\n                    \"~=|~>=~|~>~|~~|~~\\\\*\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    ];\n\n\n    this.$rules = {\n        \"start\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            },{\n                token : \"keyword.statementBegin\",\n                regex : \"^[a-zA-Z]+\", // Could enumerate starting keywords but this allows things to work when new statements are added.\n                next : \"statement\"\n            },{\n                token : \"support.buildin\", // psql directive\n                regex : \"^\\\\\\\\[\\\\S]+.*$\"\n            }\n        ],\n\n        \"statement\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentStatement\"\n            }, {\n                token : \"statementEnd\",\n                regex : \";\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$json\\\\$\",\n                next : \"json-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$$\", // dollar quote at the end of a line\n                next : \"dollarSql\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarStatementString\"\n            }\n        ].concat(sqlRules),\n\n        \"dollarSql\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentDollarSql\"\n            }, {\n                token : \"string\", // end quoting with dollar at the start of a line\n                regex : \"^\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSqlString\"\n            }\n        ].concat(sqlRules),\n\n        \"comment\" : [{\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"commentStatement\" : [{\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"statement\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"commentDollarSql\" : [{\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"dollarSql\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"dollarStatementString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"dollarSqlString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSql\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.embedRules(JsonHighlightRules, \"json-\", [{token : \"string\", regex : \"\\\\$json\\\\$\", next : \"statement\"}]);\n};\n\noop.inherits(RedshiftHighlightRules, TextHighlightRules);\n\nexports.RedshiftHighlightRules = RedshiftHighlightRules;\n});\n\ndefine(\"ace/mode/redshift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/redshift_highlight_rules\",\"ace/range\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar RedshiftHighlightRules = require(\"./redshift_highlight_rules\").RedshiftHighlightRules;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = RedshiftHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) { \n        if (state == \"start\" || state == \"keyword.statementEnd\") {\n            return \"\";\n        } else {\n            return this.$getIndent(line); // Keep whatever indent the previous line has\n        }\n    };\n\n    this.$id = \"ace/mode/redshift\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-rhtml.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TexHighlightRules = function(textClass) {\n\n    if (!textClass)\n        textClass = \"text\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : textClass, // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : textClass,\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass, // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(TexHighlightRules, TextHighlightRules);\n\nexports.TexHighlightRules = TexHighlightRules;\n});\n\ndefine(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"], function(require, exports, module)\n{\n\n   var oop = require(\"../lib/oop\");\n   var lang = require(\"../lib/lang\");\n   var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n   var TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\n\n   var RHighlightRules = function()\n   {\n\n      var keywords = lang.arrayToMap(\n            (\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\")\n                  .split(\"|\")\n            );\n\n      var buildinConstants = lang.arrayToMap(\n            (\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|\" +\n             \"NA_complex_\").split(\"|\")\n            );\n\n      this.$rules = {\n         \"start\" : [\n            {\n               token : \"comment.sectionhead\",\n               regex : \"#+(?!').*(?:----|====|####)\\\\s*$\"\n            },\n            {\n               token : \"comment\",\n               regex : \"#+'\",\n               next : \"rd-start\"\n            },\n            {\n               token : \"comment\",\n               regex : \"#.*$\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : '[\"]',\n               next : \"qqstring\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : \"[']\",\n               next : \"qstring\"\n            },\n            {\n               token : \"constant.numeric\", // hex\n               regex : \"0[xX][0-9a-fA-F]+[Li]?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // explicit integer\n               regex : \"\\\\d+L\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number\n               regex : \"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number with leading decimal\n               regex : \"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.language.boolean\",\n               regex : \"(?:TRUE|FALSE|T|F)\\\\b\"\n            },\n            {\n               token : \"identifier\",\n               regex : \"`.*?`\"\n            },\n            {\n               onMatch : function(value) {\n                  if (keywords[value])\n                     return \"keyword\";\n                  else if (buildinConstants[value])\n                     return \"constant.language\";\n                  else if (value == '...' || value.match(/^\\.\\.\\d+$/))\n                     return \"variable.language\";\n                  else\n                     return \"identifier\";\n               },\n               regex : \"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"\n            },\n            {\n               token : \"keyword.operator\",\n               regex : \"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"\n            },\n            {\n               token : \"keyword.operator\", // infix operators\n               regex : \"%.*?%\"\n            },\n            {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n            },\n            {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])}]\"\n            },\n            {\n               token : \"text\",\n               regex : \"\\\\s+\"\n            }\n         ],\n         \"qqstring\" : [\n            {\n               token : \"string\",\n               regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ],\n         \"qstring\" : [\n            {\n               token : \"string\",\n               regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ]\n      };\n\n      var rdRules = new TexHighlightRules(\"comment\").getRules();\n      for (var i = 0; i < rdRules[\"start\"].length; i++) {\n         rdRules[\"start\"][i].token += \".virtual-comment\";\n      }\n\n      this.addRules(rdRules, \"rd-\");\n      this.$rules[\"rd-start\"].unshift({\n          token: \"text\",\n          regex: \"^\",\n          next: \"start\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"keyword\",\n         regex : \"@(?!@)[^ ]*\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"comment\",\n         regex : \"@@\"\n      });\n      this.$rules[\"rd-start\"].push({\n         token : \"comment\",\n         regex : \"[^%\\\\\\\\[({\\\\])}]+\"\n      });\n   };\n\n   oop.inherits(RHighlightRules, TextHighlightRules);\n\n   exports.RHighlightRules = RHighlightRules;\n});\n\ndefine(\"ace/mode/rhtml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/r_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar RHighlightRules = require(\"./r_highlight_rules\").RHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar RHtmlHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    this.$rules[\"start\"].unshift({\n        token: \"support.function.codebegin\",\n        regex: \"^<\" + \"!--\\\\s*begin.rcode\\\\s*(?:.*)\",\n        next: \"r-start\"\n    });\n\n    this.embedRules(RHighlightRules, \"r-\", [{\n        token: \"support.function.codeend\",\n        regex: \"^\\\\s*end.rcode\\\\s*-->\",\n        next: \"start\"\n    }], [\"start\"]);\n\n    this.normalizeRules();\n};\noop.inherits(RHtmlHighlightRules, TextHighlightRules);\n\nexports.RHtmlHighlightRules = RHtmlHighlightRules;\n});\n\ndefine(\"ace/mode/rhtml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/rhtml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\n\nvar RHtmlHighlightRules = require(\"./rhtml_highlight_rules\").RHtmlHighlightRules;\n\nvar Mode = function(doc, session) {\n   HtmlMode.call(this);\n   this.$session = session;\n   this.HighlightRules = RHtmlHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n   this.insertChunkInfo = {\n      value: \"<!--begin.rcode\\n\\nend.rcode-->\\n\",\n      position: {row: 0, column: 15}\n   };\n    \n   this.getLanguageMode = function(position)\n   {\n      return this.$session.getState(position.row).match(/^r-/) ? 'R' : 'HTML';\n   };\n\n    this.$id = \"ace/mode/rhtml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-rst.js",
    "content": "define(\"ace/mode/rst_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar RSTHighlightRules = function() {\n\n  var tokens = {\n    title: \"markup.heading\",\n    list: \"markup.heading\",\n    table: \"constant\",\n    directive: \"keyword.operator\",\n    entity: \"string\",\n    link: \"markup.underline.list\",\n    bold: \"markup.bold\",\n    italic: \"markup.italic\",\n    literal: \"support.function\",\n    comment: \"comment\"\n  };\n\n  var startStringPrefix = \"(^|\\\\s|[\\\"'(<\\\\[{\\\\-/:])\";\n  var endStringSuffix = \"(?:$|(?=\\\\s|[\\\\\\\\.,;!?\\\\-/:\\\"')>\\\\]}]))\";\n\n  this.$rules = {\n    \"start\": [\n      {\n        token : tokens.title,\n        regex : \"(^)([\\\\=\\\\-`:\\\\.'\\\"~\\\\^_\\\\*\\\\+#])(\\\\2{2,}\\\\s*$)\"\n      },\n      {\n        token : [\"text\", tokens.directive, tokens.literal],\n        regex : \"(^\\\\s*\\\\.\\\\. )([^: ]+::)(.*$)\",\n        next  : \"codeblock\"\n      },\n      {\n        token : tokens.directive,\n        regex : \"::$\",\n        next  : \"codeblock\"\n      },\n      {\n        token : [tokens.entity, tokens.link],\n        regex : \"(^\\\\.\\\\. _[^:]+:)(.*$)\"\n      },\n      {\n        token : [tokens.entity, tokens.link],\n        regex : \"(^__ )(https?://.*$)\"\n      },\n      {\n        token : tokens.entity,\n        regex : \"^\\\\.\\\\. \\\\[[^\\\\]]+\\\\] \"\n      },\n      {\n        token : tokens.comment,\n        regex : \"^\\\\.\\\\. .*$\",\n        next  : \"comment\"\n      },\n      {\n        token : tokens.list,\n        regex : \"^\\\\s*[\\\\*\\\\+-] \"\n      },\n      {\n        token : tokens.list,\n        regex : \"^\\\\s*(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\. \"\n      },\n      {\n        token : tokens.list,\n        regex : \"^\\\\s*\\\\(?(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\) \"\n      },\n      {\n        token : tokens.table,\n        regex : \"^={2,}(?: +={2,})+$\"\n      },\n      {\n        token : tokens.table,\n        regex : \"^\\\\+-{2,}(?:\\\\+-{2,})+\\\\+$\"\n      },\n      {\n        token : tokens.table,\n        regex : \"^\\\\+={2,}(?:\\\\+={2,})+\\\\+$\"\n      },\n      {\n        token : [\"text\", tokens.literal],\n        regex : startStringPrefix + \"(``)(?=\\\\S)\",\n        next  : \"code\"\n      },\n      {\n        token : [\"text\", tokens.bold],\n        regex : startStringPrefix + \"(\\\\*\\\\*)(?=\\\\S)\",\n        next  : \"bold\"\n      },\n      {\n        token : [\"text\", tokens.italic],\n        regex : startStringPrefix + \"(\\\\*)(?=\\\\S)\",\n        next  : \"italic\"\n      },\n      {\n        token : tokens.entity,\n        regex : \"\\\\|[\\\\w\\\\-]+?\\\\|\"\n      },\n      {\n        token : tokens.entity,\n        regex : \":[\\\\w-:]+:`\\\\S\",\n        next  : \"entity\"\n      },\n      {\n        token : [\"text\", tokens.entity],\n        regex : startStringPrefix + \"(_`)(?=\\\\S)\",\n        next  : \"entity\"\n      },\n      {\n        token : tokens.entity,\n        regex : \"_[A-Za-z0-9\\\\-]+?\"\n      },\n      {\n        token : [\"text\", tokens.link],\n        regex : startStringPrefix + \"(`)(?=\\\\S)\",\n        next  : \"link\"\n      },\n      {\n        token : tokens.link,\n        regex : \"[A-Za-z0-9\\\\-]+?__?\"\n      },\n      {\n        token : tokens.link,\n        regex : \"\\\\[[^\\\\]]+?\\\\]_\"\n      },\n      {\n        token : tokens.link,\n        regex : \"https?://\\\\S+\"\n      },\n      {\n        token : tokens.table,\n        regex : \"\\\\|\"\n      }\n    ],\n    \"codeblock\": [\n      {\n        token : tokens.literal,\n        regex : \"^ +.+$\",\n        next : \"codeblock\"\n      },\n      {\n        token : tokens.literal,\n        regex : '^$',\n        next: \"codeblock\"\n      },\n      {\n        token : \"empty\",\n        regex : \"\",\n        next : \"start\"\n      }\n    ],\n    \"code\": [\n      {\n        token : tokens.literal,\n        regex : \"\\\\S``\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.literal\n      }\n    ],\n    \"bold\": [\n      {\n        token : tokens.bold,\n        regex : \"\\\\S\\\\*\\\\*\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.bold\n      }\n    ],\n    \"italic\": [\n      {\n        token : tokens.italic,\n        regex : \"\\\\S\\\\*\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.italic\n      }\n    ],\n    \"entity\": [\n      {\n        token : tokens.entity,\n        regex : \"\\\\S`\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.entity\n      }\n    ],\n    \"link\": [\n      {\n        token : tokens.link,\n        regex : \"\\\\S`__?\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.link\n      }\n    ],\n    \"comment\": [\n      {\n        token : tokens.comment,\n        regex : \"^ +.+$\",\n        next : \"comment\"\n      },\n      {\n        token : tokens.comment,\n        regex : '^$',\n        next: \"comment\"\n      },\n      {\n        token : \"empty\",\n        regex : \"\",\n        next : \"start\"\n      }\n    ]\n  };\n};\noop.inherits(RSTHighlightRules, TextHighlightRules);\n\nexports.RSTHighlightRules = RSTHighlightRules;\n});\n\ndefine(\"ace/mode/rst\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rst_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RSTHighlightRules = require(\"./rst_highlight_rules\").RSTHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = RSTHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n\n    this.$id = \"ace/mode/rst\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-ruby.js",
    "content": "define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length-tab.length, row, indent.length));\n        }\n    };\n\n    this.$id = \"ace/mode/ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-rust.js",
    "content": "define(\"ace/mode/rust_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar stringEscape = /\\\\(?:[nrt0'\"\\\\]|x[\\da-fA-F]{2}|u\\{[\\da-fA-F]{6}\\})/.source;\nvar RustHighlightRules = function() {\n\n    this.$rules = { start:\n       [ { token: 'variable.other.source.rust',\n           regex: '\\'[a-zA-Z_][a-zA-Z0-9_]*(?![\\\\\\'])' },\n         { token: 'string.quoted.single.source.rust',\n           regex: \"'(?:[^'\\\\\\\\]|\" + stringEscape + \")'\" },\n         { token: 'identifier',\n           regex:  /r#[a-zA-Z_][a-zA-Z0-9_]*\\b/ },\n         {\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 1, currentState);\n                return \"string.quoted.raw.source.rust\";\n            },\n            regex : /r#*\"/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        var token = \"string.quoted.raw.source.rust\";\n                        if (value.length >= stack[1]) {\n                            if (value.length > stack[1])\n                                token = \"invalid\";\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return token;\n                    },\n                    regex : /\"#*/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string.quoted.raw.source.rust\"\n                }\n            ]\n         },\n         { token: 'string.quoted.double.source.rust',\n           regex: '\"',\n           push: \n            [ { token: 'string.quoted.double.source.rust',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.source.rust',\n                regex: stringEscape },\n              { defaultToken: 'string.quoted.double.source.rust' } ] },\n         { token: [ 'keyword.source.rust', 'text', 'entity.name.function.source.rust' ],\n           regex: '\\\\b(fn)(\\\\s+)((?:r#)?[a-zA-Z_][a-zA-Z0-9_]*)' },\n         { token: 'support.constant', regex: '\\\\b[a-zA-Z_][\\\\w\\\\d]*::' },\n         { token: 'keyword.source.rust',\n           regex: '\\\\b(?:abstract|alignof|as|become|box|break|catch|continue|const|crate|default|do|dyn|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\\\b' },\n         { token: 'storage.type.source.rust',\n           regex: '\\\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|u128|f16|f32|f64|i8|i16|i32|i64|i128|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\\\b' },\n         { token: 'variable.language.source.rust', regex: '\\\\bself\\\\b' },\n         \n         { token: 'comment.line.doc.source.rust',\n           regex: '//!.*$' },\n         { token: 'comment.line.double-dash.source.rust',\n           regex: '//.*$' },\n         { token: 'comment.start.block.source.rust',\n           regex: '/\\\\*',\n           stateName: 'comment',\n           push: \n            [ { token: 'comment.start.block.source.rust',\n                regex: '/\\\\*',\n                push: 'comment' },\n              { token: 'comment.end.block.source.rust',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.source.rust' } ] },\n         \n         { token: 'keyword.operator',\n           regex: /\\$|[-=]>|[-+%^=!&|<>]=?|[*/](?![*/])=?/ },\n         { token : \"punctuation.operator\", regex : /[?:,;.]/ },\n         { token : \"paren.lparen\", regex : /[\\[({]/ },\n         { token : \"paren.rparen\", regex : /[\\])}]/ },\n         { token: 'constant.language.source.rust',\n           regex: '\\\\b(?:true|false|Some|None|Ok|Err)\\\\b' },\n         { token: 'support.constant.source.rust',\n           regex: '\\\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\\\b' },\n         { token: 'meta.preprocessor.source.rust',\n           regex: '\\\\b\\\\w\\\\(\\\\w\\\\)*!|#\\\\[[\\\\w=\\\\(\\\\)_]+\\\\]\\\\b' },\n         { token: 'constant.numeric.source.rust',\n           regex: /\\b(?:0x[a-fA-F0-9_]+|0o[0-7_]+|0b[01_]+|[0-9][0-9_]*(?!\\.))(?:[iu](?:size|8|16|32|64|128))?\\b/ },\n         { token: 'constant.numeric.source.rust',\n           regex: /\\b(?:[0-9][0-9_]*)(?:\\.[0-9][0-9_]*)?(?:[Ee][+-][0-9][0-9_]*)?(?:f32|f64)?\\b/ } ] };\n    \n    this.normalizeRules();\n};\n\nRustHighlightRules.metaData = { fileTypes: [ 'rs', 'rc' ],\n      foldingStartMarker: '^.*\\\\bfn\\\\s*(\\\\w+\\\\s*)?\\\\([^\\\\)]*\\\\)(\\\\s*\\\\{[^\\\\}]*)?\\\\s*$',\n      foldingStopMarker: '^\\\\s*\\\\}',\n      name: 'Rust',\n      scopeName: 'source.rust' };\n\n\noop.inherits(RustHighlightRules, TextHighlightRules);\n\nexports.RustHighlightRules = RustHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/rust\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rust_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RustHighlightRules = require(\"./rust_highlight_rules\").RustHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RustHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\", nestable: true};\n    this.$quotes = { '\"': '\"' };\n    this.$id = \"ace/mode/rust\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-sass.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    );\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\ndefine(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\n\nvar SassHighlightRules = function() {\n    ScssHighlightRules.call(this);\n    var start = this.$rules.start;\n    if (start[1].token == \"comment\") {\n        start.splice(1, 1, {\n            onMatch: function(value, currentState, stack) {\n                stack.unshift(this.next, -1, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\*/,\n            next: \"comment\"\n        }, {\n            token: \"error.invalid\",\n            regex: \"/\\\\*|[{;}]\"\n        }, {\n            token: \"support.type\",\n            regex: /^\\s*:[\\w\\-]+\\s/\n        });\n        \n        this.$rules.comment = [\n            {regex: /^\\s*/, onMatch: function(value, currentState, stack) {\n                if (stack[1] === -1)\n                    stack[1] = Math.max(stack[2], value.length - 1);\n                if (value.length <= stack[1]) {stack.shift();stack.shift();stack.shift();\n                    this.next = stack.shift();\n                    return \"text\";\n                } else {\n                    this.next = \"\";\n                    return \"comment\";\n                }\n            }, next: \"start\"},\n            {defaultToken: \"comment\"}\n        ];\n    }\n};\n\noop.inherits(SassHighlightRules, ScssHighlightRules);\n\nexports.SassHighlightRules = SassHighlightRules;\n\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SassHighlightRules = require(\"./sass_highlight_rules\").SassHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SassHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {   \n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/sass\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-scad.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/scad_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar scadHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"module|if|else|for\",\n        \"constant.language\": \"NULL\"\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n              token : \"constant\", // <CONSTANT>\n              regex : \"<[a-zA-Z0-9.]+>\"\n            }, {\n              token : \"keyword\", // pre-compiler directivs\n              regex : \"(?:use|include)\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(scadHighlightRules, TextHighlightRules);\n\nexports.scadHighlightRules = scadHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/scad\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scad_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar scadHighlightRules = require(\"./scad_highlight_rules\").scadHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = scadHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/scad\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-scala.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/scala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ScalaHighlightRules = function() {\n\n    var keywords = (\n            \"case|default|do|else|for|if|match|while|throw|return|try|trye|catch|finally|yield|\" +\n            \"abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|null|\" +\n            \"override|package|private|protected|sealed|super|this|trait|type|val|var|with|\" +\n            \"assert|assume|require|print|println|printf|readLine|readBoolean|readByte|readShort|\" + // package scala\n            \"readChar|readInt|readLong|readFloat|readDouble\" // package scala\n    );\n\n    var buildinConstants = (\"true|false\");\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object|\" +\n        \"Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|\" +\n        \"Option|Array|Char|Byte|Int|Long|Nothing|\" +\n\n        \"App|Application|BufferedIterator|BigDecimal|BigInt|Console|Either|\" +\n        \"Enumeration|Equiv|Fractional|Function|IndexedSeq|Integral|Iterator|\" +\n        \"Map|Numeric|Nil|NotNull|Ordered|Ordering|PartialFunction|PartialOrdering|\" +\n        \"Product|Proxy|Range|Responder|Seq|Serializable|Set|Specializable|Stream|\" +\n        \"StringContext|Symbol|Traversable|TraversableOnce|Tuple|Vector|Pair|Triple\"\n\n\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"support.function\": langClasses,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\",\n                regex : '\"\"\"',\n                next : \"tstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)', // \" strings can't span multiple lines\n                next : \"string\"\n            }, {\n                token : \"symbol.constant\", // single line\n                regex : \"'[\\\\w\\\\d_]+\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"escape\",\n                regex : '\\\\\\\\\"'\n            }, {\n                token : \"string\",\n                regex : '\"',\n                next : \"start\"\n            }, {\n                token : \"string.invalid\",\n                regex : '[^\"\\\\\\\\]*$',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+'\n            }\n        ],\n        \"tstring\" : [\n            {\n                token : \"string\",\n                regex : '\"{3,5}',\n                next : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(ScalaHighlightRules, TextHighlightRules);\n\nexports.ScalaHighlightRules = ScalaHighlightRules;\n});\n\ndefine(\"ace/mode/scala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/scala_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar ScalaHighlightRules = require(\"./scala_highlight_rules\").ScalaHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = ScalaHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/scala\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-scheme.js",
    "content": "define(\"ace/mode/scheme_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SchemeHighlightRules = function() {\n    var keywordControl = \"case|do|let|loop|if|else|when\";\n    var keywordOperator = \"eq?|eqv?|equal?|and|or|not|null?\";\n    var constantLanguage = \"#t|#f\";\n    var supportFunctions = \"cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control\": keywordControl,\n        \"keyword.operator\": keywordOperator,\n        \"constant.language\": constantLanguage,\n        \"support.function\": supportFunctions\n    }, \"identifier\", true);\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token : \"comment\",\n            regex : \";.*$\"\n        },\n        {\n            \"token\": [\"storage.type.function-type.scheme\", \"text\", \"entity.name.function.scheme\"],\n            \"regex\": \"(?:\\\\b(?:(define|define-syntax|define-macro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"\n        },\n        {\n            \"token\": \"punctuation.definition.constant.character.scheme\",\n            \"regex\": \"#:\\\\S+\"\n        },\n        {\n            \"token\": [\"punctuation.definition.variable.scheme\", \"variable.other.global.scheme\", \"punctuation.definition.variable.scheme\"],\n            \"regex\": \"(\\\\*)(\\\\S*)(\\\\*)\"\n        },\n        {\n            \"token\" : \"constant.numeric\", // hex\n            \"regex\" : \"#[xXoObB][0-9a-fA-F]+\"\n        }, \n        {\n            \"token\" : \"constant.numeric\", // float\n            \"regex\" : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\"\n        },\n        {\n                \"token\" : keywordMapper,\n                \"regex\" : \"[a-zA-Z_#][a-zA-Z0-9_\\\\-\\\\?\\\\!\\\\*]*\"\n        },\n        {\n            \"token\" : \"string\",\n            \"regex\" : '\"(?=.)',\n            \"next\"  : \"qqstring\"\n        }\n    ],\n    \"qqstring\": [\n        {\n            \"token\": \"constant.character.escape.scheme\",\n            \"regex\": \"\\\\\\\\.\"\n        },\n        {\n            \"token\" : \"string\",\n            \"regex\" : '[^\"\\\\\\\\]+',\n            \"merge\" : true\n        }, {\n            \"token\" : \"string\",\n            \"regex\" : \"\\\\\\\\$\",\n            \"next\"  : \"qqstring\",\n            \"merge\" : true\n        }, {\n            \"token\" : \"string\",\n            \"regex\" : '\"|$',\n            \"next\"  : \"start\",\n            \"merge\" : true\n        }\n    ]\n};\n\n};\n\noop.inherits(SchemeHighlightRules, TextHighlightRules);\n\nexports.SchemeHighlightRules = SchemeHighlightRules;\n});\n\ndefine(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingParensOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\)/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\))/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        var match = line.match(/^(\\s+)/);\n        if (match) {\n            return match[1];\n        }\n\n        return \"\";\n    };\n\n}).call(MatchingParensOutdent.prototype);\n\nexports.MatchingParensOutdent = MatchingParensOutdent;\n});\n\ndefine(\"ace/mode/scheme\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scheme_highlight_rules\",\"ace/mode/matching_parens_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SchemeHighlightRules = require(\"./scheme_highlight_rules\").SchemeHighlightRules;\nvar MatchingParensOutdent = require(\"./matching_parens_outdent\").MatchingParensOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = SchemeHighlightRules;\n\tthis.$outdent = new MatchingParensOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = \";\";\n    this.minorIndentFunctions = [\"define\", \"lambda\", \"define-macro\", \"define-syntax\", \"syntax-rules\", \"define-record-type\", \"define-structure\"];\n\n    this.$toIndent = function(str) {\n        return str.split('').map(function(ch) {\n            if (/\\s/.exec(ch)) {\n                return ch;\n            } else {\n                return ' ';\n            }\n        }).join('');\n    };\n\n    this.$calculateIndent = function(line, tab) {\n        var baseIndent = this.$getIndent(line);\n        var delta = 0;\n        var isParen, ch;\n        for (var i = line.length - 1; i >= 0; i--) {\n            ch = line[i];\n            if (ch === '(') {\n                delta--;\n                isParen = true;\n            } else if (ch === '(' || ch === '[' || ch === '{') {\n                delta--;\n                isParen = false;\n            } else if (ch === ')' || ch === ']' || ch === '}') {\n                delta++;\n            }\n            if (delta < 0) {\n                break;\n            }\n        }\n        if (delta < 0 && isParen) {\n            i += 1;\n            var iBefore = i;\n            var fn = '';\n            while (true) {\n                ch = line[i];\n                if (ch === ' ' || ch === '\\t') {\n                    if(this.minorIndentFunctions.indexOf(fn) !== -1) {\n                        return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                    } else {\n                        return this.$toIndent(line.substring(0, i + 1));\n                    }\n                } else if (ch === undefined) {\n                    return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                }\n                fn += line[i];\n                i++;\n            }\n        } else if(delta < 0 && !isParen) {\n            return this.$toIndent(line.substring(0, i+1));\n        } else if(delta > 0) {\n            baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);\n            return baseIndent;\n        } else {\n            return baseIndent;\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$calculateIndent(line, tab);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.$id = \"ace/mode/scheme\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-scss.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    );\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\n\nvar Mode = function() {\n    this.HighlightRules = ScssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n\n    this.$id = \"ace/mode/scss\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-sh.js",
    "content": "define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\nvar Mode = function() {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n   \n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/sh\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-sjs.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/sjs_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SJSHighlightRules = function() {\n    var parent = new JavaScriptHighlightRules({noES6: true});\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-6][0-7]?|\" + // oct\n        \"37[0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    var contextAware = function(f) {\n        f.isContextAware = true;\n        return f;\n    };\n\n    var ctxBegin = function(opts) {\n        return {\n            token: opts.token,\n            regex: opts.regex,\n            next: contextAware(function(currentState, stack) {\n                if (stack.length === 0)\n                    stack.unshift(currentState);\n                stack.unshift(opts.next);\n                return opts.next;\n            })\n        };\n    };\n\n    var ctxEnd = function(opts) {\n        return {\n            token: opts.token,\n            regex: opts.regex,\n            next: contextAware(function(currentState, stack) {\n                stack.shift();\n                return stack[0] || \"start\";\n            })\n        };\n    };\n\n    this.$rules = parent.$rules;\n    this.$rules.no_regex = [\n        {\n            token: \"keyword\",\n            regex: \"(waitfor|or|and|collapse|spawn|retract)\\\\b\"\n        },\n        {\n            token: \"keyword.operator\",\n            regex: \"(->|=>|\\\\.\\\\.)\"\n        },\n        {\n            token: \"variable.language\",\n            regex: \"(hold|default)\\\\b\"\n        },\n        ctxBegin({\n            token: \"string\",\n            regex: \"`\",\n            next: \"bstring\"\n        }),\n        ctxBegin({\n            token: \"string\",\n            regex: '\"',\n            next: \"qqstring\"\n        }),\n        ctxBegin({\n            token: \"string\",\n            regex: '\"',\n            next: \"qqstring\"\n        }),\n        {\n            token: [\"paren.lparen\", \"text\", \"paren.rparen\"],\n            regex: \"(\\\\{)(\\\\s*)(\\\\|)\",\n            next: \"block_arguments\"\n        }\n\n    ].concat(this.$rules.no_regex);\n\n    this.$rules.block_arguments = [\n        {\n            token: \"paren.rparen\",\n            regex: \"\\\\|\",\n            next: \"no_regex\"\n        }\n    ].concat(this.$rules.function_arguments);\n\n    this.$rules.bstring = [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        },\n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next: \"bstring\"\n        },\n        ctxBegin({\n            token : \"paren.lparen\",\n            regex : \"\\\\$\\\\{\",\n            next: \"string_interp\"\n        }),\n        ctxBegin({\n            token : \"paren.lparen\",\n            regex : \"\\\\$\",\n            next: \"bstring_interp_single\"\n        }),\n        ctxEnd({\n            token : \"string\",\n            regex : \"`\"\n        }),\n        {\n            defaultToken: \"string\"\n        }\n    ];\n    \n    this.$rules.qqstring = [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        },\n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next: \"qqstring\"\n        },\n        ctxBegin({\n            token : \"paren.lparen\",\n            regex : \"#\\\\{\",\n            next: \"string_interp\"\n        }),\n        ctxEnd({\n            token : \"string\",\n            regex : '\"'\n        }),\n        {\n            defaultToken: \"string\"\n        }\n    ];\n    var embeddableRules = [];\n    for (var i=0; i < this.$rules.no_regex.length; i++) {\n        var rule = this.$rules.no_regex[i];\n        var token = String(rule.token);\n        if (token.indexOf('paren') == -1 && (!rule.next || rule.next.isContextAware)) {\n            embeddableRules.push(rule);\n        }\n    }\n\n    this.$rules.string_interp = [\n        ctxEnd({\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }),\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: '{',\n            next: \"string_interp\"\n        })\n    ].concat(embeddableRules);\n    this.$rules.bstring_interp_single = [\n        {\n            token: [\"identifier\", \"paren.lparen\"],\n            regex: '(\\\\w+)(\\\\()',\n            next: 'bstring_interp_single_call'\n        },\n        ctxEnd({\n            token : \"identifier\",\n            regex : \"\\\\w*\"\n        })\n    ];\n    this.$rules.bstring_interp_single_call = [\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: \"\\\\(\",\n            next: \"bstring_interp_single_call\"\n        }),\n        ctxEnd({\n            token: \"paren.rparen\",\n            regex: \"\\\\)\"\n        })\n    ].concat(embeddableRules);\n};\noop.inherits(SJSHighlightRules, TextHighlightRules);\n\nexports.SJSHighlightRules = SJSHighlightRules;\n});\n\ndefine(\"ace/mode/sjs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/sjs_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JSMode = require(\"./javascript\").Mode;\nvar SJSHighlightRules = require(\"./sjs_highlight_rules\").SJSHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SJSHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, JSMode);\n(function() {\n    this.createWorker = function(session) {\n        return null;\n    };\n    this.$id = \"ace/mode/sjs\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-slim.js",
    "content": "define(\"ace/mode/slim_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SlimHighlightRules = function() {\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"keyword\",\n                regex: /^(\\s*)(\\w+):\\s*/,\n                onMatch: function(value, state, stack, line) {\n                    var indent = /^\\s*/.exec(line)[0];\n                    var m = value.match(/^(\\s*)(\\w+):/);\n                    var language = m[2];\n                    if (!/^(javascript|ruby|coffee|markdown|css|scss|sass|less)$/.test(language))\n                        language = \"\";\n                    stack.unshift(\"language-embed\", [], [indent, language], state);\n                    return this.token;\n                },\n                stateName: \"language-embed\",\n                next: [{\n                    token: \"string\",\n                    regex: /^(\\s*)/,\n                    onMatch: function(value, state, stack, line) {\n                        var indent = stack[2][0];\n                        if (indent.length >= value.length) {\n                            stack.splice(0, 3);\n                            this.next = stack.shift();\n                            return this.token;\n                        }\n                        this.next = \"\";\n                        return [{type: \"text\", value: indent}];\n                    },\n                    next: \"\"\n                }, {\n                    token: \"string\",\n                    regex: /.+/,\n                    onMatch: function(value, state, stack, line) {\n                        var indent = stack[2][0];\n                        var language = stack[2][1];\n                        var embedState = stack[1];\n                        \n                        if (modes[language]) {\n                            var data = modes[language].getTokenizer().getLineTokens(line.slice(indent.length), embedState.slice(0));\n                            stack[1] = data.state;\n                            return data.tokens;\n                        }\n                        return this.token;\n                    }\n                }]\n            },\n            {\n                token: 'constant.begin.javascript.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(ruby):$'\n            }, {\n                token: 'constant.begin.coffeescript.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(markdown):$'\n            }, {\n                token: 'constant.begin.css.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin.scss.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(sass):$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(less):$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(erb):$'\n            }, {\n                token: 'keyword.html.tags.slim',\n                regex: '^(\\\\s*)((:?\\\\*(\\\\w)+)|doctype html|abbr|acronym|address|applet|area|article|aside|audio|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dialog|dfn|dir|div|dl|dt|embed|fieldset|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|link|li|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|source|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video|xmp|b|u|s|em|a)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)?\\\\b'\n\n            }, {\n                token: 'keyword.slim',\n                regex: '^(\\\\s*)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)'\n            }, {\n                token: \"string\",\n                regex: /^(\\s*)('|\\||\\/|(\\/!))\\s*/,\n                onMatch: function(val, state, stack, line) {\n                    var indent = /^\\s*/.exec(line)[0];\n                    if (stack.length < 1) {\n                        stack.push(this.next);\n                    }\n                    else {\n                        stack[0] = \"mlString\";\n                    }\n\n                    if (stack.length < 2) {\n                        stack.push(indent.length);\n                    }\n                    else {\n                        stack[1] = indent.length;\n                    }\n                    return this.token;\n                },\n                next: \"mlString\"\n            }, {\n                token: 'keyword.control.slim',\n                regex: '^(\\\\s*)(\\\\-|==|=)',\n                push: [{\n                    token: 'control.end.slim',\n                    regex: '$',\n                    next: \"pop\"\n                }, {\n                    include: \"rubyline\"\n                }, {\n                    include: \"misc\"\n                }]\n\n            }, {\n                token: 'paren',\n                regex: '\\\\(',\n                push: [{\n                    token: 'paren',\n                    regex: '\\\\)',\n                    next: \"pop\"\n                }, {\n                    include: \"misc\"\n                }]\n\n            }, {\n                token: 'paren',\n                regex: '\\\\[',\n                push: [{\n                    token: 'paren',\n                    regex: '\\\\]',\n                    next: \"pop\"\n                }, {\n                    include: \"misc\"\n                }]\n            }, {\n                include: \"misc\"\n            }\n        ],\n        \"mlString\": [{\n            token: \"indent\",\n            regex: /^\\s*/,\n            onMatch: function(val, state, stack) {\n                var curIndent = stack[1];\n\n                if (curIndent >= val.length) {\n                    this.next = \"start\";\n                    stack.splice(0);\n                }\n                else {\n                    this.next = \"mlString\";\n                }\n                return this.token;\n            },\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rubyline\": [{\n            token: \"keyword.operator.ruby.embedded.slim\",\n            regex: \"(==|=)(<>|><|<'|'<|<|>)?|-\"\n        }, {\n            token: \"list.ruby.operators.slim\",\n            regex: \"(\\\\b)(for|in|do|if|else|elsif|unless|while|yield|not|and|or)\\\\b\"\n        }, {\n            token: \"string\",\n            regex: \"['](.)*?[']\"\n        }, {\n            token: \"string\",\n            regex: \"[\\\"](.)*?[\\\"]\"\n        }],\n        \"misc\": [{\n            token: 'class.variable.slim',\n            regex: '\\\\@([a-zA-Z_][a-zA-Z0-9_]*)\\\\b'\n        }, {\n            token: \"list.meta.slim\",\n            regex: \"(\\\\b)(true|false|nil)(\\\\b)\"\n        }, {\n            token: 'keyword.operator.equals.slim',\n            regex: '='\n        }, {\n            token: \"string\",\n            regex: \"['](.)*?[']\"\n        }, {\n            token: \"string\",\n            regex: \"[\\\"](.)*?[\\\"]\"\n        }]\n    };\n    this.normalizeRules();\n};\n\n\noop.inherits(SlimHighlightRules, TextHighlightRules);\n\nexports.SlimHighlightRules = SlimHighlightRules;\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token : \"support.function\",\n        regex : /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function(value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next  : \"githubblock\"\n    };\n    var codeBlockRules = [{\n        token : \"support.function\",\n        regex : \".*\",\n        onMatch: function(value, state, stack, line) {\n            var embedState = stack[1];\n            var indent = stack[2][0];\n            var endMarker = stack[2][1];\n            var language = stack[2][2];\n            \n            var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n            if (\n                m && m[1].length < indent.length + 3\n                && m[2].length >= endMarker.length && m[2][0] == endMarker[0]\n            ) {\n                stack.splice(0, 3);\n                this.next = stack.shift();\n                return this.token;\n            }\n            this.next = \"\";\n            if (language && modes[language]) {\n                var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                stack[1] = data.state;\n                return data.tokens;\n            }\n            return this.token;\n        }\n    }];\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s|$)/,\n        next : \"header\"\n    },\n    codeBlockStartRule,\n    { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\!?\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text or alt text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href or image\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        },\n        codeBlockStartRule,\n        {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : codeBlockRules\n    });\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n\ndefine(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /^(?:[=-]+\\s*$|#{1,6} |`{3})/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) == \"start\")\n                return \"end\";\n            return \"start\";\n        }\n\n        return \"start\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) !== \"start\") {\n                while (++row < maxRow) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(startRow, startColumn, row, 0);\n            } else {\n                while (row -- > 0) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(row, line.length, startRow, 0);\n            }\n        }\n\n        var token;\n        function isHeading(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type.lastIndexOf(heading, 0) === 0;\n        }\n\n        var heading = \"markup.heading\";\n        function getLevel() {\n            var ch = token.value[0];\n            if (ch == \"=\") return 6;\n            if (ch == \"-\") return 5;\n            return 7 - token.value.search(/[^#]|$/);\n        }\n\n        if (isHeading(row)) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (!isHeading(row))\n                    continue;\n                var level = getLevel();\n                if (level >= startHeadingLevel)\n                    break;\n            }\n\n            endRow = row - (!token || [\"=\", \"-\"].indexOf(token.value[0]) == -1 ? 1 : 2);\n\n            if (endRow > startRow) {\n                while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                    endRow--;\n            }\n\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\ndefine(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\nvar Mode = function() {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n   \n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/sh\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar XmlMode = require(\"./xml\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar MarkdownFoldMode = require(\"./folding/markdown\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MarkdownHighlightRules;\n\n    this.createModeDelegates({\n        javascript: require(\"./javascript\").Mode,\n        html: require(\"./html\").Mode,\n        bash: require(\"./sh\").Mode,\n        sh: require(\"./sh\").Mode,\n        xml: require(\"./xml\").Mode,\n        css: require(\"./css\").Mode\n    });\n\n    this.foldingRules = new MarkdownFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(line);\n            if (!match)\n                return \"\";\n            var marker = match[2];\n            if (!marker)\n                marker = parseInt(match[3], 10) + 1 + \".\";\n            return match[1] + marker + match[4];\n        } else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/markdown\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    oop.inherits(CoffeeHighlightRules, TextHighlightRules);\n\n    function CoffeeHighlightRules() {\n        var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n\n        var keywords = (\n            \"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n            \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n            \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n            \"or|on|unless|until|and|yes|yield|export|import|default\"\n        );\n\n        var langConstant = (\n            \"true|false|null|undefined|NaN|Infinity\"\n        );\n\n        var illegal = (\n            \"case|const|function|var|void|with|enum|implements|\" +\n            \"interface|let|package|private|protected|public|static\"\n        );\n\n        var supportClass = (\n            \"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n            \"SyntaxError|TypeError|URIError|\"  +\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\"\n        );\n\n        var supportFunction = (\n            \"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n            \"encodeURIComponent|decodeURI|decodeURIComponent|String|\"\n        );\n\n        var variableLanguage = (\n            \"window|arguments|prototype|document\"\n        );\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": langConstant,\n            \"invalid.illegal\": illegal,\n            \"language.support.class\": supportClass,\n            \"language.support.function\": supportFunction,\n            \"variable.language\": variableLanguage\n        }, \"identifier\");\n\n        var functionRule = {\n            token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n            regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n        };\n\n        var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n\n        this.$rules = {\n            start : [\n                {\n                    token : \"constant.numeric\",\n                    regex : \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n                }, {\n                    stateName: \"qdoc\",\n                    token : \"string\", regex : \"'''\", next : [\n                        {token : \"string\", regex : \"'''\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqdoc\",\n                    token : \"string\",\n                    regex : '\"\"\"',\n                    next : [\n                        {token : \"string\", regex : '\"\"\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qstring\",\n                    token : \"string\", regex : \"'\", next : [\n                        {token : \"string\", regex : \"'\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqstring\",\n                    token : \"string.start\", regex : '\"', next : [\n                        {token : \"string.end\", regex : '\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"js\",\n                    token : \"string\", regex : \"`\", next : [\n                        {token : \"string\", regex : \"`\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    regex: \"[{}]\", onMatch: function(val, state, stack) {\n                        this.next = \"\";\n                        if (val == \"{\" && stack.length) {\n                            stack.unshift(\"start\", state);\n                            return \"paren\";\n                        }\n                        if (val == \"}\" && stack.length) {\n                            stack.shift();\n                            this.next = stack.shift() || \"\";\n                            if (this.next.indexOf(\"string\") != -1)\n                                return \"paren.string\";\n                        }\n                        return \"paren\";\n                    }\n                }, {\n                    token : \"string.regex\",\n                    regex : \"///\",\n                    next : \"heregex\"\n                }, {\n                    token : \"string.regex\",\n                    regex : /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n                }, {\n                    token : \"comment\",\n                    regex : \"###(?!#)\",\n                    next : \"comment\"\n                }, {\n                    token : \"comment\",\n                    regex : \"#.*\"\n                }, {\n                    token : [\"punctuation.operator\", \"text\", \"identifier\"],\n                    regex : \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\.{1,3}\"\n                }, {\n                    token : [\"keyword\", \"text\", \"language.support.class\",\n                     \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                    regex : \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n                }, {\n                    token : [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                    regex : \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n                }, \n                functionRule, \n                {\n                    token : \"variable\",\n                    regex : \"@(?:\" + identifier + \")?\"\n                }, {\n                    token: keywordMapper,\n                    regex : identifier\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\,|\\\\.\"\n                }, {\n                    token : \"storage.type\",\n                    regex : \"[\\\\-=]>\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[({[]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\]})]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }],\n\n\n            heregex : [{\n                token : \"string.regex\",\n                regex : '.*?///[imgy]{0,4}',\n                next : \"start\"\n            }, {\n                token : \"comment.regex\",\n                regex : \"\\\\s+(?:#.*)?\"\n            }, {\n                token : \"string.regex\",\n                regex : \"\\\\S+\"\n            }],\n\n            comment : [{\n                token : \"comment\",\n                regex : '###',\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        };\n        this.normalizeRules();\n    }\n\n    exports.CoffeeHighlightRules = CoffeeHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\n\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.foldingRules = new FoldMode();\n}\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    var indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;\n    \n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"###\", end: \"###\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n    \n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/coffee_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/coffee\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    );\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\ndefine(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\n\nvar Mode = function() {\n    this.HighlightRules = ScssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n\n    this.$id = \"ace/mode/scss\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\n\nvar SassHighlightRules = function() {\n    ScssHighlightRules.call(this);\n    var start = this.$rules.start;\n    if (start[1].token == \"comment\") {\n        start.splice(1, 1, {\n            onMatch: function(value, currentState, stack) {\n                stack.unshift(this.next, -1, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\*/,\n            next: \"comment\"\n        }, {\n            token: \"error.invalid\",\n            regex: \"/\\\\*|[{;}]\"\n        }, {\n            token: \"support.type\",\n            regex: /^\\s*:[\\w\\-]+\\s/\n        });\n        \n        this.$rules.comment = [\n            {regex: /^\\s*/, onMatch: function(value, currentState, stack) {\n                if (stack[1] === -1)\n                    stack[1] = Math.max(stack[2], value.length - 1);\n                if (value.length <= stack[1]) {stack.shift();stack.shift();stack.shift();\n                    this.next = stack.shift();\n                    return \"text\";\n                } else {\n                    this.next = \"\";\n                    return \"comment\";\n                }\n            }, next: \"start\"},\n            {defaultToken: \"comment\"}\n        ];\n    }\n};\n\noop.inherits(SassHighlightRules, ScssHighlightRules);\n\nexports.SassHighlightRules = SassHighlightRules;\n\n});\n\ndefine(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SassHighlightRules = require(\"./sass_highlight_rules\").SassHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SassHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {   \n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/sass\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\n\nvar LessHighlightRules = function() {\n\n\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" + \n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n\n    var keywords = keywordList.split('|');\n\n    var properties = CssHighlightRules.supportType.split('|');\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);   \n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : [\"constant.numeric\", \"keyword\"],\n                regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex : \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token : [\"support.function\", \"paren.lparen\"],\n                regex : \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token : function(value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex : \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token : \"variable\",\n                regex : \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token : function(first, second) {\n                    if(properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex : \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token : \"keyword\",\n                regex : \"&\"   // special case - always treat as keyword\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(LessHighlightRules, TextHighlightRules);\n\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\ndefine(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LessHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(\"ruleset\", session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/less\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\ndefine(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length-tab.length, row, indent.length));\n        }\n    };\n\n    this.$id = \"ace/mode/ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/slim\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/slim_highlight_rules\",\"ace/mode/javascript\",\"ace/mode/markdown\",\"ace/mode/coffee\",\"ace/mode/scss\",\"ace/mode/sass\",\"ace/mode/less\",\"ace/mode/ruby\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SlimHighlightRules = require(\"./slim_highlight_rules\").SlimHighlightRules;\n\nvar Mode = function() {\n    TextMode.call(this);\n    this.HighlightRules = SlimHighlightRules;\n    this.createModeDelegates({\n        javascript: require(\"./javascript\").Mode,\n        markdown: require(\"./markdown\").Mode,\n        coffee: require(\"./coffee\").Mode,\n        scss: require(\"./scss\").Mode,\n        sass: require(\"./sass\").Mode,\n        less: require(\"./less\").Mode,\n        ruby: require(\"./ruby\").Mode,\n        css: require(\"./css\").Mode\n    });\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/slim\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-smarty.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/smarty_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar SmartyHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var smartyRules = { start: \n       [ { include: '#comments' },\n         { include: '#blocks' } ],\n      '#blocks': \n       [ { token: 'punctuation.section.embedded.begin.smarty',\n           regex: '\\\\{%?',\n           push: \n            [ { token: 'punctuation.section.embedded.end.smarty',\n                regex: '%?\\\\}',\n                next: 'pop' },\n              { include: '#strings' },\n              { include: '#variables' },\n              { include: '#lang' },\n              { defaultToken: 'source.smarty' } ] } ],\n      '#comments': \n       [ { token: \n            [ 'punctuation.definition.comment.smarty',\n              'comment.block.smarty' ],\n           regex: '(\\\\{%?)(\\\\*)',\n           push: \n            [ { token: 'comment.block.smarty', regex: '\\\\*%?\\\\}', next: 'pop' },\n              { defaultToken: 'comment.block.smarty' } ] } ],\n      '#lang': \n       [ { token: 'keyword.operator.smarty',\n           regex: '(?:!=|!|<=|>=|<|>|===|==|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod)\\\\b' },\n         { token: 'constant.language.smarty',\n           regex: '\\\\b(?:TRUE|FALSE|true|false)\\\\b' },\n         { token: 'keyword.control.smarty',\n           regex: '\\\\b(?:if|else|elseif|foreach|foreachelse|section|switch|case|break|default)\\\\b' },\n         { token: 'variable.parameter.smarty', regex: '\\\\b[a-zA-Z]+=' },\n         { token: 'support.function.built-in.smarty',\n           regex: '\\\\b(?:capture|config_load|counter|cycle|debug|eval|fetch|include_php|include|insert|literal|math|strip|rdelim|ldelim|assign|constant|block|html_[a-z_]*)\\\\b' },\n         { token: 'support.function.variable-modifier.smarty',\n           regex: '\\\\|(?:capitalize|cat|count_characters|count_paragraphs|count_sentences|count_words|date_format|default|escape|indent|lower|nl2br|regex_replace|replace|spacify|string_format|strip_tags|strip|truncate|upper|wordwrap)' } ],\n      '#strings': \n       [ { token: 'punctuation.definition.string.begin.smarty',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.smarty',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.smarty', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.single.smarty' } ] },\n         { token: 'punctuation.definition.string.begin.smarty',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.smarty',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.smarty', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.double.smarty' } ] } ],\n      '#variables': \n       [ { token: \n            [ 'punctuation.definition.variable.smarty',\n              'variable.other.global.smarty' ],\n           regex: '\\\\b(\\\\$)(Smarty\\\\.)' },\n         { token: \n            [ 'punctuation.definition.variable.smarty',\n              'variable.other.smarty' ],\n           regex: '(\\\\$)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b' },\n         { token: [ 'keyword.operator.smarty', 'variable.other.property.smarty' ],\n           regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b' },\n         { token: \n            [ 'keyword.operator.smarty',\n              'meta.function-call.object.smarty',\n              'punctuation.definition.variable.smarty',\n              'variable.other.smarty',\n              'punctuation.definition.variable.smarty' ],\n           regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))' } ] };\n    \n    var smartyStart = smartyRules.start;\n    \n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift.apply(this.$rules[rule], smartyStart);\n    }\n    \n    Object.keys(smartyRules).forEach(function(x) {\n        if (!this.$rules[x])\n            this.$rules[x] = smartyRules[x];\n    }, this);\n    \n    this.normalizeRules();\n};\n\nSmartyHighlightRules.metaData = { fileTypes: [ 'tpl' ],\n      foldingStartMarker: '\\\\{%?',\n      foldingStopMarker: '%?\\\\}',\n      name: 'Smarty',\n      scopeName: 'text.html.smarty' };\n\n\noop.inherits(SmartyHighlightRules, HtmlHighlightRules);\n\nexports.SmartyHighlightRules = SmartyHighlightRules;\n});\n\ndefine(\"ace/mode/smarty\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/smarty_highlight_rules\"], function(require, exports, module) {\n  \"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar SmartyHighlightRules = require(\"./smarty_highlight_rules\").SmartyHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = SmartyHighlightRules;\n};\n\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    \n    this.$id = \"ace/mode/smarty\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-snippets.js",
    "content": "define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SnippetHighlightRules = function() {\n\n    var builtins = \"SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|\" +\n        \"LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME\";\n\n    this.$rules = {\n        \"start\" : [\n            {token:\"constant.language.escape\", regex: /\\\\[\\$}`\\\\]/},\n            {token:\"keyword\", regex: \"\\\\$(?:TM_)?(?:\" + builtins + \")\\\\b\"},\n            {token:\"variable\", regex: \"\\\\$\\\\w+\"},\n            {onMatch: function(value, state, stack) {\n                if (stack[1])\n                    stack[1]++;\n                else\n                    stack.unshift(state, 1);\n                return this.tokenName;\n            }, tokenName: \"markup.list\", regex: \"\\\\${\", next: \"varDecl\"},\n            {onMatch: function(value, state, stack) {\n                if (!stack[1])\n                    return \"text\";\n                stack[1]--;\n                if (!stack[1])\n                    stack.splice(0,2);\n                return this.tokenName;\n            }, tokenName: \"markup.list\", regex: \"}\"},\n            {token: \"doc.comment\", regex:/^\\${2}-{5,}$/}\n        ],\n        \"varDecl\" : [\n            {regex: /\\d+\\b/, token: \"constant.numeric\"},\n            {token:\"keyword\", regex: \"(?:TM_)?(?:\" + builtins + \")\\\\b\"},\n            {token:\"variable\", regex: \"\\\\w+\"},\n            {regex: /:/, token: \"punctuation.operator\", next: \"start\"},\n            {regex: /\\//, token: \"string.regex\", next: \"regexp\"},\n            {regex: \"\", next: \"start\"}\n        ],\n        \"regexp\" : [\n            {regex: /\\\\./, token: \"escape\"},\n            {regex: /\\[/, token: \"regex.start\", next: \"charClass\"},\n            {regex: \"/\", token: \"string.regex\", next: \"format\"},\n            {\"token\": \"string.regex\", regex:\".\"}\n        ],\n        charClass : [\n            {regex: \"\\\\.\", token: \"escape\"},\n            {regex: \"\\\\]\", token: \"regex.end\", next: \"regexp\"},\n            {\"token\": \"string.regex\", regex:\".\"}\n        ],\n        \"format\" : [\n            {regex: /\\\\[ulULE]/, token: \"keyword\"},\n            {regex: /\\$\\d+/, token: \"variable\"},\n            {regex: \"/[gim]*:?\", token: \"string.regex\", next: \"start\"},\n            {\"token\": \"string\", regex:\".\"}\n        ]\n    };\n};\noop.inherits(SnippetHighlightRules, TextHighlightRules);\n\nexports.SnippetHighlightRules = SnippetHighlightRules;\n\nvar SnippetGroupHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {token: \"text\", regex: \"^\\\\t\", next: \"sn-start\"},\n            {token:\"invalid\", regex: /^ \\s*/},\n            {token:\"comment\", regex: /^#.*/},\n            {token:\"constant.language.escape\", regex: \"^regex \", next: \"regex\"},\n            {token:\"constant.language.escape\", regex: \"^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\\\b\"}\n        ],\n        \"regex\" : [\n            {token:\"text\", regex: \"\\\\.\"},\n            {token:\"keyword\", regex: \"/\"},\n            {token:\"empty\", regex: \"$\", next: \"start\"}\n        ]\n    };\n    this.embedRules(SnippetHighlightRules, \"sn-\", [\n        {token: \"text\", regex: \"^\\\\t\", next: \"sn-start\"},\n        {onMatch: function(value, state, stack) {\n            stack.splice(stack.length);\n            return this.tokenName;\n        }, tokenName: \"text\", regex: \"^(?!\\t)\", next: \"start\"}\n    ]);\n    \n};\n\noop.inherits(SnippetGroupHighlightRules, TextHighlightRules);\n\nexports.SnippetGroupHighlightRules = SnippetGroupHighlightRules;\n\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SnippetGroupHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$indentWithTabs = true;\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/snippets\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n\n});                (function() {\n                    window.require([\"ace/mode/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-soy_template.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/soy_template_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar SoyTemplateHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var soyRules = { start: \n       [ { include: '#template' },\n         { include: '#if' },\n         { include: '#comment-line' },\n         { include: '#comment-block' },\n         { include: '#comment-doc' },\n         { include: '#call' },\n         { include: '#css' },\n         { include: '#param' },\n         { include: '#print' },\n         { include: '#msg' },\n         { include: '#for' },\n         { include: '#foreach' },\n         { include: '#switch' },\n         { include: '#tag' },\n         { include: 'text.html.basic' } ],\n      '#call': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.call.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(?=call|delcall)',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { token: ['entity.name.tag.soy', 'variable.parameter.soy'],\n                regex: '(call|delcall)(\\\\s+[\\\\.\\\\w]+)'},\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy' ],\n                regex: '\\\\b(data)(\\\\s*)(=)' },\n              { defaultToken: 'meta.tag.call.soy' } ] } ],\n      '#comment-line': \n       [ { token: \n            [ 'comment.line.double-slash.soy',\n              'comment.line.double-slash.soy' ],\n           regex: '(//)(.*$)' } ],\n      '#comment-block': \n       [ { token: 'punctuation.definition.comment.begin.soy',\n           regex: '/\\\\*(?!\\\\*)',\n           push: \n            [ { token: 'punctuation.definition.comment.end.soy',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.soy' } ] } ],\n      '#comment-doc': \n       [ { token: 'punctuation.definition.comment.begin.soy',\n           regex: '/\\\\*\\\\*(?!/)',\n           push: \n            [ { token: 'punctuation.definition.comment.end.soy',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { token: [ 'support.type.soy', 'text', 'variable.parameter.soy' ],\n                regex: '(@param|@param\\\\?)(\\\\s+)(\\\\w+)' },\n              { defaultToken: 'comment.block.documentation.soy' } ] } ],\n      '#css': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.css.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(css)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'support.constant.soy',\n                regex: '\\\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\\\b' },\n              { defaultToken: 'meta.tag.css.soy' } ] } ],\n      '#for': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.for.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(for)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'keyword.operator.soy', regex: '\\\\bin\\\\b' },\n              { token: 'support.function.soy', regex: '\\\\brange\\\\b' },\n              { include: '#variable' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { defaultToken: 'meta.tag.for.soy' } ] } ],\n      '#foreach': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.foreach.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(foreach)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'keyword.operator.soy', regex: '\\\\bin\\\\b' },\n              { include: '#variable' },\n              { defaultToken: 'meta.tag.foreach.soy' } ] } ],\n      '#function': \n       [ { token: 'support.function.soy',\n           regex: '\\\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\\\b' } ],\n      '#if': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.if.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(if|elseif)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#operator' },\n              { include: '#function' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { defaultToken: 'meta.tag.if.soy' } ] } ],\n      '#namespace': \n       [ { token: [ 'entity.name.tag.soy', 'text', 'variable.parameter.soy' ],\n           regex: '(namespace|delpackage)(\\\\s+)([\\\\w\\\\.]+)' } ],\n      '#number': [ { token: 'constant.numeric', regex: '[\\\\d]+' } ],\n      '#operator': \n       [ { token: 'keyword.operator.soy',\n           regex: '==|!=|\\\\band\\\\b|\\\\bor\\\\b|\\\\bnot\\\\b|-|\\\\+|/|\\\\?:' } ],\n      '#param': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.param.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(param)',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy' ],\n                regex: '\\\\b([\\\\w]+)(\\\\s*)((?::)?)' },\n              { defaultToken: 'meta.tag.param.soy' } ] } ],\n      '#primitive': \n       [ { token: 'constant.language.soy',\n           regex: '\\\\b(?:null|false|true)\\\\b' } ],\n      '#msg': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.msg.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(msg)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy' ],\n                regex: '\\\\b(meaning|desc)(\\\\s*)(=)' },\n              { defaultToken: 'meta.tag.msg.soy' } ] } ],\n      '#print': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.print.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(print)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#print-parameter' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { include: '#attribute-lookup' },\n              { defaultToken: 'meta.tag.print.soy' } ] } ],\n      '#print-parameter': \n       [ { token: 'keyword.operator.soy', regex: '\\\\|' },\n         { token: 'variable.parameter.soy',\n           regex: 'noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate' } ],\n      '#special-character': \n       [ { token: 'support.constant.soy',\n           regex: '\\\\bsp\\\\b|\\\\bnil\\\\b|\\\\\\\\r|\\\\\\\\n|\\\\\\\\t|\\\\blb\\\\b|\\\\brb\\\\b' } ],\n      '#string-quoted-double': [ { token: 'string.quoted.double', regex: '\"[^\"]*\"' } ],\n      '#string-quoted-single': [ { token: 'string.quoted.single', regex: '\\'[^\\']*\\'' } ],\n      '#switch': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.switch.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(switch|case)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#function' },\n              { include: '#number' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { defaultToken: 'meta.tag.switch.soy' } ] } ],\n      '#attribute-lookup': \n       [ { token: 'punctuation.definition.attribute-lookup.begin.soy',\n           regex: '\\\\[',\n           push: \n            [ { token: 'punctuation.definition.attribute-lookup.end.soy',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#function' },\n              { include: '#operator' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' } ] } ],\n      '#tag': \n       [ { token: 'punctuation.definition.tag.begin.soy',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#namespace' },\n              { include: '#variable' },\n              { include: '#special-character' },\n              { include: '#tag-simple' },\n              { include: '#function' },\n              { include: '#operator' },\n              { include: '#attribute-lookup' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { include: '#print-parameter' } ] } ],\n      '#tag-simple': \n       [ { token: 'entity.name.tag.soy',\n           regex: '{{\\\\s*(?:literal|else|ifempty|default)\\\\s*(?=\\\\})'} ],\n      '#template': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.template.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(?=template|deltemplate)',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: ['entity.name.tag.soy', 'text', 'entity.name.function.soy' ],\n                regex: '(template|deltemplate)(\\\\s+)([\\\\.\\\\w]+)',\n                originalRegex: '(?<=template|deltemplate)\\\\s+([\\\\.\\\\w]+)' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.double.soy' ],\n                regex: '\\\\b(private)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\")' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.single.soy' ],\n                regex: '\\\\b(private)(\\\\s*)(=)(\\\\s*)(\\'true\\'|\\'false\\')' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.double.soy' ],\n                regex: '\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\"|\"contextual\")' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.single.soy' ],\n                regex: '\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\\'true\\'|\\'false\\'|\\'contextual\\')' },\n              { defaultToken: 'meta.tag.template.soy' } ] } ],\n      '#variable': [ { token: 'variable.other.soy', regex: '\\\\$[\\\\w\\\\.]+' } ] };\n    \n    \n    for (var i in soyRules) {\n        if (this.$rules[i]) {\n            this.$rules[i].unshift.apply(this.$rules[i], soyRules[i]);\n        } else {\n            this.$rules[i] = soyRules[i];\n        }\n    }\n    \n    this.normalizeRules();\n};\n\nSoyTemplateHighlightRules.metaData = { comment: 'SoyTemplate',\n      fileTypes: [ 'soy' ],\n      firstLineMatch: '\\\\{\\\\s*namespace\\\\b',\n      foldingStartMarker: '\\\\{\\\\s*template\\\\s+[^\\\\}]*\\\\}',\n      foldingStopMarker: '\\\\{\\\\s*/\\\\s*template\\\\s*\\\\}',\n      name: 'SoyTemplate',\n      scopeName: 'source.soy' };\n\n\noop.inherits(SoyTemplateHighlightRules, HtmlHighlightRules);\n\nexports.SoyTemplateHighlightRules = SoyTemplateHighlightRules;\n});\n\ndefine(\"ace/mode/soy_template\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/soy_template_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar SoyTemplateHighlightRules = require(\"./soy_template_highlight_rules\").SoyTemplateHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = SoyTemplateHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/soy_template\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-space.js",
    "content": "define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/space_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SpaceHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"empty_line\",\n                regex : / */,\n                next : \"key\"\n            },\n            {\n                token : \"empty_line\",\n                regex : /$/,\n                next : \"key\"\n            }\n        ],\n        \"key\" : [\n            {\n                token : \"variable\",\n                regex : /\\S+/\n            },\n            {\n                token : \"empty_line\",\n                regex : /$/,\n                next : \"start\"\n            },{\n                token : \"keyword.operator\",\n                regex : / /,\n                next  : \"value\"\n            }\n        ],\n        \"value\" : [\n            {\n                token : \"keyword.operator\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            {\n                token : \"string\",\n                regex : /[^$]/\n            }\n        ]\n    };\n    \n};\n\noop.inherits(SpaceHighlightRules, TextHighlightRules);\n\nexports.SpaceHighlightRules = SpaceHighlightRules;\n});\n\ndefine(\"ace/mode/space\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/coffee\",\"ace/mode/space_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar SpaceHighlightRules = require(\"./space_highlight_rules\").SpaceHighlightRules;\nvar Mode = function() {\n    this.HighlightRules = SpaceHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function() {\n    \n    this.$id = \"ace/mode/space\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-sparql.js",
    "content": "define(\"ace/mode/sparql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SPARQLHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            include: \"#strings\"\n        }, {\n            include: \"#string-language-suffixes\"\n        }, {\n            include: \"#string-datatype-suffixes\"\n        }, {\n            include: \"#logic-operators\"\n        }, {\n            include: \"#relative-urls\"\n        }, {\n            include: \"#xml-schema-types\"\n        }, {\n            include: \"#rdf-schema-types\"\n        }, {\n            include: \"#owl-types\"\n        }, {\n            include: \"#qnames\"\n        }, {\n            include: \"#keywords\"\n        }, {\n            include: \"#built-in-functions\"\n        }, {\n            include: \"#variables\"\n        }, {\n            include: \"#boolean-literal\"\n        }, {\n            include: \"#punctuation-operators\"\n        }],\n        \"#boolean-literal\": [{\n            token: \"constant.language.boolean.sparql\",\n            regex: /true|false/\n        }],\n        \"#built-in-functions\": [{\n            token: \"support.function.sparql\",\n            regex: /[Aa][Bb][Ss]|[Aa][Vv][Gg]|[Bb][Nn][Oo][Dd][Ee]|[Bb][Oo][Uu][Nn][Dd]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Aa][Ll][Ee][Ss][Cc][Ee]|[Cc][Oo][Nn][Cc][Aa][Tt]|[Cc][Oo][Nn][Tt][Aa][Ii][Nn][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Dd][Aa][Tt][Aa][Tt][Yy][Pp][Ee]|[Dd][Aa][Yy]|[Ee][Nn][Cc][Oo][Dd][Ee]_[Ff][Oo][Rr]_[Uu][Rr][Ii]|[Ee][Xx][Ii][Ss][Tt][Ss]|[Ff][Ll][Oo][Oo][Rr]|[Gg][Rr][Oo][Uu][Pp]_[Cc][Oo][Nn][Cc][Aa][Tt]|[Hh][Oo][Uu][Rr][Ss]|[Ii][Ff]|[Ii][Rr][Ii]|[Ii][Ss][Bb][Ll][Aa][Nn][Kk]|[Ii][Ss][Ii][Rr][Ii]|[Ii][Ss][Ll][Ii][Tt][Ee][Rr][Aa][Ll]|[Ii][Ss][Nn][Uu][Mm][Ee][Rr][Ii][Cc]|[Ii][Ss][Uu][Rr][Ii]|[Ll][Aa][Nn][Gg]|[Ll][Aa][Nn][Gg][Mm][Aa][Tt][Cc][Hh][Ee][Ss]|[Ll][Cc][Aa][Ss][Ee]|[Mm][Aa][Xx]|[Mm][Dd]5|[Mm][Ii][Nn]|[Mm][Ii][Nn][Uu][Tt][Ee][Ss]|[Mm][Oo][Nn][Tt][Hh]|[Nn][Oo][Ww]|[Rr][Aa][Nn][Dd]|[Rr][Ee][Gg][Ee][Xx]|[Rr][Ee][Pp][Ll][Aa][Cc][Ee]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Aa][Mm][Ee][Tt][Ee][Rr][Mm]|[Ss][Aa][Mm][Pp][Ll][Ee]|[Ss][Ee][Cc][Oo][Nn][Dd][Ss]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Hh][Aa](?:1|256|384|512)|[Ss][Tt][Rr]|[Ss][Tt][Rr][Aa][Ff][Tt][Ee][Rr]|[Ss][Tt][Rr][Bb][Ee][Ff][Oo][Rr][Ee]|[Ss][Tt][Rr][Dd][Tt]|[Ss][Tt][Rr][Ee][Nn][Dd][Ss]|[Ss][Tt][Rr][Ll][Aa][Nn][Gg]|[Ss][Tt][Rr][Ll][Ee][Nn]|[Ss][Tt][Rr][Ss][Tt][Aa][Rr][Tt][Ss]|[Ss][Tt][Rr][Uu][Uu][Ii][Dd]|[Ss][Uu][Bb][Ss][Tt][Rr]|[Ss][Uu][Mm]|[Tt][Ii][Mm][Ee][Zz][Oo][Nn][Ee]|[Tt][Zz]|[Uu][Cc][Aa][Ss][Ee]|[Uu][Rr][Ii]|[Uu][Uu][Ii][Dd]|[Yy][Ee][Aa][Rr]/\n        }],\n        \"#comments\": [{\n            token: [\n                \"punctuation.definition.comment.sparql\",\n                \"comment.line.hash.sparql\"\n            ],\n            regex: /(#)(.*$)/\n        }],\n        \"#keywords\": [{\n            token: \"keyword.other.sparql\",\n            regex: /[Aa][Dd][Dd]|[Aa][Ll][Ll]|[Aa][Ss]|[As][Ss][Cc]|[Aa][Ss][Kk]|[Bb][Aa][Ss][Ee]|[Bb][Ii][Nn][Dd]|[Bb][Yy]|[Cc][Ll][Ee][Aa][Rr]|[Cc][Oo][Nn][Ss][Tt][Rr][Uu][Cc][Tt]|[Cc][Oo][Pp][Yy]|[Cc][Rr][Ee][Aa][Tt][Ee]|[Dd][Aa][Tt][Aa]|[Dd][Ee][Ff][Aa][Uu][Ll][Tt]|[Dd][Ee][Ll][Ee][Tt][Ee]|[Dd][Ee][Sc][Cc]|[Dd][Ee][Ss][Cc][Rr][Ii][Bb][Ee]|[Dd][Ii][Ss][Tt][Ii][Nn][Cc][Tt]|[Dd][Rr][Oo][Pp]|[Ff][Ii][Ll][Tt][Ee][Rr]|[Ff][Rr][Oo][Mm]|[Gg][Rr][Aa][Pp][Hh]|[Gg][Rr][Oo][Uu][Pp]|[Hh][Aa][Vv][Ii][Nn][Gg]|[Ii][Nn][Ss][Ee][Rr][Tt]|[Ll][Ii][Mm][Ii][Tt]|[Ll][Oo][Aa][Dd]|[Mm][Ii][Nn][Uu][Ss]|[Mm][Oo][Vv][Ee]|[Nn][Aa][Mm][Ee][Dd]|[Oo][Ff][Ff][Ss][Ee][Tt]|[Oo][Pp][Tt][Ii][Oo][Nn][Aa][Ll]|[Oo][Rr][Dd][Ee][Rr]|[Pp][Rr][Ee][Ff][Ii][Xx]|[Rr][Ee][Dd][Uu][Cc][Ee][Dd]|[Ss][Ee][Ll][Ee][Cc][Tt]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Ee][Rr][Vv][Ii][Cc][Ee]|[Ss][Ii][Ll][Ee][Nn][Tt]|[Tt][Oo]|[Uu][Nn][Dd][Ee][Ff]|[Uu][Nn][Ii][Oo][Nn]|[Uu][Ss][Ii][Nn][Gg]|[Vv][Aa][Ll][Uu][Ee][Ss]|[Ww][He][Ee][Rr][Ee]|[Ww][Ii][Tt][Hh]/\n        }],\n        \"#logic-operators\": [{\n            token: \"keyword.operator.logical.sparql\",\n            regex: /\\|\\||&&|=|!=|<|>|<=|>=|(?:^|!?\\s)IN(?:!?\\s|$)|(?:^|!?\\s)NOT(?:!?\\s|$)|-|\\+|\\*|\\/|\\!/\n        }],\n        \"#owl-types\": [{\n            token: \"support.type.datatype.owl.sparql\",\n            regex: /owl:[a-zA-Z]+/\n        }],\n        \"#punctuation-operators\": [{\n            token: \"keyword.operator.punctuation.sparql\",\n            regex: /;|,|\\.|\\(|\\)|\\{|\\}|\\|/\n        }],\n        \"#qnames\": [{\n            token: \"entity.name.other.qname.sparql\",\n            regex: /(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/\n        }],\n        \"#rdf-schema-types\": [{\n            token: \"support.type.datatype.rdf.schema.sparql\",\n            regex: /rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/\n        }],\n        \"#relative-urls\": [{\n            token: \"string.quoted.other.relative.url.sparql\",\n            regex: /</,\n            push: [{\n                token: \"string.quoted.other.relative.url.sparql\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.other.relative.url.sparql\"\n            }]\n        }],\n        \"#string-datatype-suffixes\": [{\n            token: \"keyword.operator.datatype.suffix.sparql\",\n            regex: /\\^\\^/\n        }],\n        \"#string-language-suffixes\": [{\n            token: [\n                \"keyword.operator.language.suffix.sparql\",\n                \"constant.language.suffix.sparql\"\n            ],\n            regex: /(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/\n        }],\n        \"#strings\": [{\n            token: \"string.quoted.triple.sparql\",\n            regex: /\"\"\"/,\n            push: [{\n                token: \"string.quoted.triple.sparql\",\n                regex: /\"\"\"/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.triple.sparql\"\n            }]\n        }, {\n            token: \"string.quoted.double.sparql\",\n            regex: /\"/,\n            push: [{\n                token: \"string.quoted.double.sparql\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"invalid.string.newline\",\n                regex: /$/\n            }, {\n                token: \"constant.character.escape.sparql\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.sparql\"\n            }]\n        }],\n        \"#variables\": [{\n            token: \"variable.other.sparql\",\n            regex: /(?:\\?|\\$)[-_a-zA-Z0-9]+/\n        }],\n        \"#xml-schema-types\": [{\n            token: \"support.type.datatype.schema.sparql\",\n            regex: /xsd?:[a-z][a-zA-Z]+/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nSPARQLHighlightRules.metaData = {\n    fileTypes: [\"rq\", \"sparql\"],\n    name: \"SPARQL\",\n    scopeName: \"source.sparql\"\n};\n\n\noop.inherits(SPARQLHighlightRules, TextHighlightRules);\n\nexports.SPARQLHighlightRules = SPARQLHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/sparql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sparql_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SPARQLHighlightRules = require(\"./sparql_highlight_rules\").SPARQLHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SPARQLHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/sparql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-sql.js",
    "content": "define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SqlHighlightRules = function() {\n\n    var keywords = (\n        \"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|\" +\n        \"when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|\" +\n        \"foreign|not|references|default|null|inner|cross|natural|database|drop|grant\"\n    );\n\n    var builtinConstants = (\n        \"true|false\"\n    );\n\n    var builtinFunctions = (\n        \"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|\" + \n        \"coalesce|ifnull|isnull|nvl\"\n    );\n\n    var dataTypes = (\n        \"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|\" +\n        \"money|real|number|integer\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"storage.type\": dataTypes\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"--.*$\"\n        },  {\n            token : \"comment\",\n            start : \"/\\\\*\",\n            end : \"\\\\*/\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"string\",           // ` string (apache drill)\n            regex : \"`.*?`\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(SqlHighlightRules, TextHighlightRules);\n\nexports.SqlHighlightRules = SqlHighlightRules;\n});\n\ndefine(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlHighlightRules = require(\"./sql_highlight_rules\").SqlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = SqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.$id = \"ace/mode/sql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-sqlserver.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/sqlserver_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SqlServerHighlightRules = function() {\n    var logicalOperators = \"ALL|AND|ANY|BETWEEN|EXISTS|IN|LIKE|NOT|OR|SOME\";\n    logicalOperators += \"|NULL|IS|APPLY|INNER|OUTER|LEFT|RIGHT|JOIN|CROSS\"; //SSMS colors these gray too\n    \n\n    var builtinFunctions = (\n        \"OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|\" +\n        \"AVG|CHECKSUM_AGG|COUNT|COUNT_BIG|GROUPING|GROUPING_ID|MAX|MIN|STDEV|STDEVP|SUM|VAR|VARP|\" +\n        \"DENSE_RANK|NTILE|RANK|ROW_NUMBER\" +\n        \"@@DATEFIRST|@@DBTS|@@LANGID|@@LANGUAGE|@@LOCK_TIMEOUT|@@MAX_CONNECTIONS|@@MAX_PRECISION|@@NESTLEVEL|@@OPTIONS|@@REMSERVER|@@SERVERNAME|@@SERVICENAME|@@SPID|@@TEXTSIZE|@@VERSION|\" +\n        \"CAST|CONVERT|PARSE|TRY_CAST|TRY_CONVERT|TRY_PARSE\" +\n        \"@@CURSOR_ROWS|@@FETCH_STATUS|CURSOR_STATUS|\" +\n        \"@@DATEFIRST|@@LANGUAGE|CURRENT_TIMESTAMP|DATEADD|DATEDIFF|DATEFROMPARTS|DATENAME|DATEPART|DATETIME2FROMPARTS|DATETIMEFROMPARTS|DATETIMEOFFSETFROMPARTS|DAY|EOMONTH|GETDATE|GETUTCDATE|ISDATE|MONTH|SET DATEFIRST|SET DATEFORMAT|SET LANGUAGE|SMALLDATETIMEFROMPARTS|SP_HELPLANGUAGE|SWITCHOFFSET|SYSDATETIME|SYSDATETIMEOFFSET|SYSUTCDATETIME|TIMEFROMPARTS|TODATETIMEOFFSET|YEAR|\" +\n        \"CHOOSE|IIF|\" +\n        \"ABS|ACOS|ASIN|ATAN|ATN2|CEILING|COS|COT|DEGREES|EXP|FLOOR|LOG|LOG10|PI|POWER|RADIANS|RAND|ROUND|SIGN|SIN|SQRT|SQUARE|TAN|\" +\n        \"@@PROCID|APPLOCK_MODE|APPLOCK_TEST|APP_NAME|ASSEMBLYPROPERTY|COLUMNPROPERTY|COL_LENGTH|COL_NAME|DATABASEPROPERTYEX|DATABASE_PRINCIPAL_ID|DB_ID|DB_NAME|FILEGROUPPROPERTY|FILEGROUP_ID|FILEGROUP_NAME|FILEPROPERTY|FILE_ID|FILE_IDEX|FILE_NAME|FULLTEXTCATALOGPROPERTY|FULLTEXTSERVICEPROPERTY|INDEXKEY_PROPERTY|INDEXPROPERTY|INDEX_COL|OBJECTPROPERTY|OBJECTPROPERTYEX|OBJECT_DEFINITION|OBJECT_ID|OBJECT_NAME|OBJECT_SCHEMA_NAME|ORIGINAL_DB_NAME|PARSENAME|SCHEMA_ID|SCHEMA_NAME|SCOPE_IDENTITY|SERVERPROPERTY|STATS_DATE|TYPEPROPERTY|TYPE_ID|TYPE_NAME|\" +\n        \"CERTENCODED|CERTPRIVATEKEY|CURRENT_USER|DATABASE_PRINCIPAL_ID|HAS_PERMS_BY_NAME|IS_MEMBER|IS_ROLEMEMBER|IS_SRVROLEMEMBER|ORIGINAL_LOGIN|PERMISSIONS|PWDCOMPARE|PWDENCRYPT|SCHEMA_ID|SCHEMA_NAME|SESSION_USER|SUSER_ID|SUSER_NAME|SUSER_SID|SUSER_SNAME|SYS.FN_BUILTIN_PERMISSIONS|SYS.FN_GET_AUDIT_FILE|SYS.FN_MY_PERMISSIONS|SYSTEM_USER|USER_ID|USER_NAME|\" +\n        \"ASCII|CHAR|CHARINDEX|CONCAT|DIFFERENCE|FORMAT|LEN|LOWER|LTRIM|NCHAR|PATINDEX|QUOTENAME|REPLACE|REPLICATE|REVERSE|RTRIM|SOUNDEX|SPACE|STR|STUFF|SUBSTRING|UNICODE|UPPER|\" +\n        \"$PARTITION|@@ERROR|@@IDENTITY|@@PACK_RECEIVED|@@ROWCOUNT|@@TRANCOUNT|BINARY_CHECKSUM|CHECKSUM|CONNECTIONPROPERTY|CONTEXT_INFO|CURRENT_REQUEST_ID|ERROR_LINE|ERROR_MESSAGE|ERROR_NUMBER|ERROR_PROCEDURE|ERROR_SEVERITY|ERROR_STATE|FORMATMESSAGE|GETANSINULL|GET_FILESTREAM_TRANSACTION_CONTEXT|HOST_ID|HOST_NAME|ISNULL|ISNUMERIC|MIN_ACTIVE_ROWVERSION|NEWID|NEWSEQUENTIALID|ROWCOUNT_BIG|XACT_STATE|\" +\n        \"@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|\" +\n        \"PATINDEX|TEXTPTR|TEXTVALID|\" +\n        \"COALESCE|NULLIF\"\n    );\n    var dataTypes = (\"BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML\");\n    var builtInStoredProcedures = \"sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool\";\n    var keywords = \"ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE\";\n    keywords += \"|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT\";\n    keywords += \"|LOOP|HASH|MERGE|REMOTE\";\n    keywords += \"|TRY|CATCH|THROW\";\n    keywords += \"|TYPE\";\n    keywords = keywords.split('|');\n    keywords = keywords.filter(function(value, index, self) {\n        return logicalOperators.split('|').indexOf(value) === -1 && builtinFunctions.split('|').indexOf(value) === -1 && dataTypes.split('|').indexOf(value) === -1;\n    });\n    keywords = keywords.sort().join('|');\n    \n    \n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language\": logicalOperators,\n        \"storage.type\": dataTypes,\n        \"support.function\": builtinFunctions,\n        \"support.storedprocedure\": builtInStoredProcedures,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n    var setStatements = \"SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT\".split('|');\n    var isolationLevels = \"READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE\".split('|');\n    for (var i = 0; i < isolationLevels.length; i++) {\n        setStatements.push('SET TRANSACTION ISOLATION LEVEL ' + isolationLevels[i]);\n    }\n    \n    \n    this.$rules = {\n        start: [{\n            token: \"string.start\",\n            regex: \"'\",\n            next: [{\n                token: \"constant.language.escape\",\n                regex: /''/\n            }, {\n                token: \"string.end\",\n                next: \"start\",\n                regex: \"'\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"), {\n            token: \"comment\",\n            regex: \"--.*$\"\n        }, {\n            token: \"comment\",\n            start: \"/\\\\*\",\n            end: \"\\\\*/\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b(?!])\" //up to 2 @symbols for some built in functions\n        }, {\n            token: \"constant.class\",\n            regex: \"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=|\\\\*\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\)]\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|;\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }],\n        comment: [\n        DocCommentHighlightRules.getTagRule(), {\n            token: \"comment\",\n            regex: \"\\\\*\\\\/\",\n            next: \"no_regex\"\n        }, {\n            defaultToken: \"comment\",\n            caseInsensitive: true\n        }]\n    };\n    for (var i = 0; i < setStatements.length; i++) {\n        this.$rules.start.unshift({\n            token: \"set.statement\",\n            regex: setStatements[i]\n        });\n    }\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n    var completions = [];\n    var addCompletions = function(arr, meta) {\n        arr.forEach(function(v) {\n            completions.push({\n                name: v,\n                value: v,\n                score: 0,\n                meta: meta\n            });\n        });\n    };\n    addCompletions(builtInStoredProcedures.split('|'), 'procedure');\n    addCompletions(logicalOperators.split('|'), 'operator');\n    addCompletions(builtinFunctions.split('|'), 'function');\n    addCompletions(dataTypes.split('|'), 'type');\n    addCompletions(setStatements, 'statement');\n    addCompletions(keywords.split('|'), 'keyword');\n    \n    this.completions = completions;\n};\n\noop.inherits(SqlServerHighlightRules, TextHighlightRules);\n\nexports.SqlHighlightRules = SqlServerHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\bCASE\\b|\\bBEGIN\\b)|^\\s*(\\/\\*)/i;\n    this.startRegionRe = /^\\s*(\\/\\*|--)#?region\\b/;\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n    \n        if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row);\n    \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1]) return this.getBeginEndBlock(session, row, i, match[1]);\n    \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\") range = null;\n            }\n    \n            return range;\n        }\n    \n        if (foldStyle === \"markbegin\") return;\n        return;\n    };\n    this.getBeginEndBlock = function(session, row, column, matchSequence) {\n        var start = {\n            row: row,\n            column: column + matchSequence.length\n        };\n        var maxRow = session.getLength();\n        var line;\n    \n        var depth = 1;\n        var re = /(\\bCASE\\b|\\bBEGIN\\b)|(\\bEND\\b)/i;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth++;\n            else depth--;\n    \n            if (!depth) break;\n        }\n        var endRow = row;\n        if (endRow > start.row) {\n            return new Range(start.row, start.column, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sqlserver_highlight_rules\",\"ace/mode/folding/sqlserver\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlServerHighlightRules = require(\"./sqlserver_highlight_rules\").SqlHighlightRules;\nvar SqlServerFoldMode = require(\"./folding/sqlserver\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SqlServerHighlightRules;\n    this.foldingRules = new SqlServerFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.getCompletions = function(state, session, pos, prefix) {\n        return session.$mode.$highlightRules.completions;\n    };\n    \n    this.$id = \"ace/mode/sql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-stylus.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/stylus_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar StylusHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.type\": CssHighlightRules.supportType,\n        \"support.function\": CssHighlightRules.supportFunction,\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n    start: [\n        {\n            token : \"comment\",\n            regex : /\\/\\/.*$/\n        },\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next : \"comment\"\n        },\n        {\n            token: [\"entity.name.function.stylus\", \"text\"],\n            regex: \"^([-a-zA-Z_][-\\\\w]*)?(\\\\()\"\n        },\n        {\n            token: [\"entity.other.attribute-name.class.stylus\"],\n            regex: \"\\\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*\"\n        },\n        {\n            token: [\"entity.language.stylus\"],\n            regex: \"^ *&\"\n        },\n        {\n            token: [\"variable.language.stylus\"],\n            regex: \"(arguments)\"\n        },\n        {\n            token: [\"keyword.stylus\"],\n            regex: \"@[-\\\\w]+\"\n        },\n        {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : CssHighlightRules.pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : CssHighlightRules.pseudoClasses\n        }, \n        {\n            token: [\"entity.name.tag.stylus\"],\n            regex: \"(?:\\\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\\\b)\"\n        },\n        {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, \n        {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, \n        {\n            token: [\"punctuation.definition.entity.stylus\", \"entity.other.attribute-name.id.stylus\"],\n            regex: \"(#)([a-zA-Z][a-zA-Z0-9_-]*)\"\n        },\n        {\n            token: \"meta.vendor-prefix.stylus\",\n            regex: \"-webkit-|-moz\\\\-|-ms-|-o-\"\n        },\n        {\n            token: \"keyword.control.stylus\",\n            regex: \"(?:!important|for|in|return|true|false|null|if|else|unless|return)\\\\b\"\n        },\n        {\n            token: \"keyword.operator.stylus\",\n            regex: \"!|~|\\\\+|-|(?:\\\\*)?\\\\*|\\\\/|%|(?:\\\\.)\\\\.\\\\.|<|>|(?:=|:|\\\\?|\\\\+|-|\\\\*|\\\\/|%|<|>)?=|!=\"\n        },\n        {\n            token: \"keyword.operator.stylus\",\n            regex: \"(?:in|is(?:nt)?|not)\\\\b\"\n        },\n        {\n            token : \"string\",\n            regex : \"'(?=.)\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        }, \n        {\n            token : \"constant.numeric\",\n            regex : CssHighlightRules.numRe\n        }, \n        {\n            token : \"keyword\",\n            regex : \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\\\\b\"\n        }, \n        {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }\n    ],\n    \"comment\" : [\n        {\n            token : \"comment\", // closing comment\n            regex : \"\\\\*\\\\/\",\n            next : \"start\"\n        }, {\n            defaultToken : \"comment\"\n        }\n    ],\n    \"qqstring\" : [\n        {\n            token : \"string\",\n            regex : '[^\"\\\\\\\\]+'\n        }, \n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }\n    ],\n    \"qstring\" : [\n        {\n            token : \"string\",\n            regex : \"[^'\\\\\\\\]+\"\n        }, \n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"start\"\n        }\n    ]\n};\n\n};\n\noop.inherits(StylusHighlightRules, TextHighlightRules);\n\nexports.StylusHighlightRules = StylusHighlightRules;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/stylus\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/stylus_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar StylusHighlightRules = require(\"./stylus_highlight_rules\").StylusHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = StylusHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.$id = \"ace/mode/stylus\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-svg.js",
    "content": "define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/svg_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar SvgHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.embedTagRules(JavaScriptHighlightRules, \"js-\", \"script\");\n\n    this.normalizeRules();\n};\n\noop.inherits(SvgHighlightRules, XmlHighlightRules);\n\nexports.SvgHighlightRules = SvgHighlightRules;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/svg\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/xml\",\"ace/mode/javascript\",\"ace/mode/svg_highlight_rules\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar XmlMode = require(\"./xml\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar SvgHighlightRules = require(\"./svg_highlight_rules\").SvgHighlightRules;\nvar MixedFoldMode = require(\"./folding/mixed\").FoldMode;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    XmlMode.call(this);\n    \n    this.HighlightRules = SvgHighlightRules;\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode\n    });\n    \n    this.foldingRules = new MixedFoldMode(new XmlFoldMode(), {\n        \"js-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(Mode, XmlMode);\n\n(function() {\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n    \n\n    this.$id = \"ace/mode/svg\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-swift.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/swift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SwiftHighlightRules = function() {\n   var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"\",\n        \"keyword\": \"__COLUMN__|__FILE__|__FUNCTION__|__LINE__\"\n            + \"|as|associativity|break|case|class|continue|default|deinit|didSet\"\n            + \"|do|dynamicType|else|enum|extension|fallthrough|for|func|get|if|import\"\n            + \"|in|infix|init|inout|is|left|let|let|mutating|new|none|nonmutating\"\n            + \"|operator|override|postfix|precedence|prefix|protocol|return|right\"\n            + \"|safe|Self|self|set|struct|subscript|switch|Type|typealias\"\n            + \"|unowned|unsafe|var|weak|where|while|willSet\"\n            + \"|convenience|dynamic|final|infix|lazy|mutating|nonmutating|optional|override|postfix\"\n            + \"|prefix|required|static|guard|defer\",\n        \"storage.type\": \"bool|double|Double\"\n            + \"|extension|float|Float|int|Int|open|internal|fileprivate|private|public|string|String\",\n        \"constant.language\":\n            \"false|Infinity|NaN|nil|no|null|null|off|on|super|this|true|undefined|yes\",\n        \"support.function\":\n            \"\"\n    }, \"identifier\");\n    \n    function string(start, options) {\n        var nestable = options.nestable || options.interpolation;\n        var interpStart = options.interpolation && options.interpolation.nextState || \"start\";\n        var mainRule = {\n            regex: start + (options.multiline ? \"\" : \"(?=.)\"),\n            token: \"string.start\"\n        };\n        var nextState = [\n            options.escape && {\n                regex: options.escape,\n                token: \"character.escape\"\n            },\n            options.interpolation && {\n                token : \"paren.quasi.start\",\n                regex : lang.escapeRegExp(options.interpolation.lead + options.interpolation.open),\n                push  : interpStart\n            },\n            options.error && {\n                regex: options.error,\n                token: \"error.invalid\"\n            }, \n            {\n                regex: start + (options.multiline ? \"\" : \"|$\"),\n                token: \"string.end\",\n                next: nestable ? \"pop\" : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ].filter(Boolean);\n        \n        if (nestable)\n            mainRule.push = nextState;\n        else\n            mainRule.next = nextState;\n        \n        if (!options.interpolation)\n            return mainRule;\n        \n        var open = options.interpolation.open;\n        var close = options.interpolation.close;\n        var counter = {\n            regex: \"[\" + lang.escapeRegExp(open + close) + \"]\",\n            onMatch: function(val, state, stack) {\n                this.next = val == open ? this.nextState : \"\";\n                if (val == open && stack.length) {\n                    stack.unshift(\"start\", state);\n                    return \"paren\";\n                }\n                if (val == close && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == open ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: interpStart\n        }; \n        return [counter, mainRule];\n    }\n    \n    function comments() {\n        return [{\n                token : \"comment\",\n                regex : \"\\\\/\\\\/(?=.)\",\n                next : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment\", regex : \"$|^\", next: \"start\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment.start\",\n                regex : /\\/\\*/,\n                stateName: \"nested_comment\",\n                push : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment.start\", regex : /\\/\\*/, push: \"nested_comment\"},\n                    {token : \"comment.end\", regex : \"\\\\*\\\\/\", next : \"pop\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            }\n        ];\n    }\n    \n\n    this.$rules = {\n        start: [\n            string('\"', {\n                escape: /\\\\(?:[0\\\\tnr\"']|u{[a-fA-F1-9]{0,8}})/,\n                interpolation: {lead: \"\\\\\", open: \"(\", close: \")\"},\n                error: /\\\\./,\n                multiline: false\n            }),\n            comments(),\n            {\n                 regex: /@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                 token: \"variable.parameter\"\n            },\n            {\n                regex: /[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                token: keywordMapper\n            },  \n            {\n                token : \"constant.numeric\", \n                regex : /[+-]?(?:0(?:b[01]+|o[0-7]+|x[\\da-fA-F])|\\d+(?:(?:\\.\\d*)?(?:[PpEe][+-]?\\d+)?)\\b)/\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            } \n            \n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    \n    this.normalizeRules();\n};\n\n\noop.inherits(SwiftHighlightRules, TextHighlightRules);\n\nexports.HighlightRules = SwiftHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/swift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/swift_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./swift_highlight_rules\").HighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\", nestable: true};\n    \n    this.$id = \"ace/mode/swift\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-tcl.js",
    "content": "define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/tcl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TclHighlightRules = function() {\n\n    this.$rules = {\n        \"start\" : [\n           {\n                token : \"comment\",\n                regex : \"#.*\\\\\\\\$\",\n                next  : \"commentfollow\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"support.function\",\n                regex : '[\\\\\\\\]$',\n                next  : \"splitlineStart\"\n            }, {\n                token : \"text\",\n                regex : /\\\\(?:[\"{}\\[\\]$\\\\])/\n            }, {\n                token : \"text\", // last value before command\n                regex : '^|[^{][;][^}]|[/\\r/]',\n                next  : \"commandItem\"\n            }, {\n                token : \"string\", // single line\n                regex : '[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line \"\"\" string start\n                regex : '[ ]*[\"]',\n                next  : \"qqstring\"\n            }, {\n                token : \"variable.instance\",\n                regex : \"[$]\",\n                next  : \"variable\"\n            }, {\n                token : \"support.function\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"\n            }, {\n                token : \"identifier\",\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[{]\",\n                next  : \"commandItem\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[(]\"\n            },  {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"commandItem\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*\\\\\\\\$\",\n                next  : \"commentfollow\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\",\n                next  : \"start\"\n            }, {\n                token : \"string\", // single line\n                regex : '[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"variable.instance\", \n                regex : \"[$]\",\n                next  : \"variable\"\n            }, {\n                token : \"support.function\",\n                regex : \"(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])\",\n                next  : \"commandItem\"\n            }, {\n                token : \"support.function\",\n                regex : \"[a-zA-Z0-9_/]+(?:[:][:])\",\n                next  : \"commandItem\"\n            }, {\n                token : \"support.function\",\n                regex : \"(?:[:][:])\",\n                next  : \"commandItem\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"support.function\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"\n            }, {\n                token : \"keyword\",\n                regex : \"[a-zA-Z0-9_/]+\",\n                next  : \"start\"\n            } ],\n        \"commentfollow\" : [ \n            {\n                token : \"comment\",\n                regex : \".*\\\\\\\\$\",\n                next  : \"commentfollow\"\n            }, {\n                token : \"comment\",\n                regex : '.+',\n                next  : \"start\"\n        } ],\n        \"splitlineStart\" : [ \n            {\n                token : \"text\",\n                regex : \"^.\",\n                next  : \"start\"\n            }],\n        \"variable\" : [ \n            {\n                token : \"variable.instance\", // variable tcl\n                regex : \"[a-zA-Z_\\\\d]+(?:[(][a-zA-Z_\\\\d]+[)])?\",\n                next  : \"start\"\n            }, {\n                token : \"variable.instance\", // variable tcl with braces\n                regex : \"{?[a-zA-Z_\\\\d]+}?\",\n                next  : \"start\"\n            }],  \n        \"qqstring\" : [ {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '(?:[^\\\\\\\\]|\\\\\\\\.)*?[\"]',\n            next : \"start\"\n        }, {\n            token : \"string\",\n            regex : '.+'\n        } ]\n    };\n};\n\noop.inherits(TclHighlightRules, TextHighlightRules);\n\nexports.TclHighlightRules = TclHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/tcl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/cstyle\",\"ace/mode/tcl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar TclHighlightRules = require(\"./tcl_highlight_rules\").TclHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = TclHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/tcl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-terraform.js",
    "content": "define(\"ace/mode/terraform_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TerraformHighlightRules = function () {\n\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: ['storage.function.terraform'],\n                regex: '\\\\b(output|resource|data|variable|module|export)\\\\b'\n            },\n            {\n                token: \"variable.terraform\",\n                regex: \"\\\\$\\\\s\",\n                push: [\n                    {\n                        token: \"keyword.terraform\",\n                        regex: \"(-var-file|-var)\"\n                    },\n                    {\n                        token: \"variable.terraform\",\n                        regex: \"\\\\n|$\",\n                        next: \"pop\"\n                    },\n\n                    {include: \"strings\"},\n                    {include: \"variables\"},\n                    {include: \"operators\"},\n\n                    {defaultToken: \"text\"}\n                ]\n            },\n            {\n                token: \"language.support.class\",\n                regex: \"\\\\b(timeouts|provider|connection|provisioner|lifecycleprovider|atlas)\\\\b\"\n            },\n\n            {\n                token: \"singleline.comment.terraform\",\n                regex: '#(.)*$'\n            },\n            {\n                token: \"multiline.comment.begin.terraform\",\n                regex: '^\\\\s*\\\\/\\\\*',\n                push: \"blockComment\"\n            },\n            {\n                token: \"storage.function.terraform\",\n                regex: \"^\\\\s*(locals|terraform)\\\\s*{\"\n            },\n            {\n                token: \"paren.lpar\",\n                regex: \"[[({]\"\n            },\n\n            {\n                token: \"paren.rpar\",\n                regex: \"[\\\\])}]\"\n            },\n            {include: \"constants\"},\n            {include: \"strings\"},\n            {include: \"operators\"},\n            {include: \"variables\"}\n        ],\n        blockComment: [{\n            regex: \"^\\\\s*\\\\/\\\\*\",\n            token: \"multiline.comment.begin.terraform\",\n            push: \"blockComment\"\n        }, {\n            regex: \"\\\\*\\\\/\\\\s*$\",\n            token: \"multiline.comment.end.terraform\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }],\n        \"constants\": [\n            {\n                token: \"constant.language.terraform\",\n                regex: \"\\\\b(true|false|yes|no|on|off|EOF)\\\\b\"\n            },\n            {\n                token: \"constant.numeric.terraform\",\n                regex: \"(\\\\b([0-9]+)([kKmMgG]b?)?\\\\b)|(\\\\b(0x[0-9A-Fa-f]+)([kKmMgG]b?)?\\\\b)\"\n            }\n        ],\n        \"variables\": [\n            {\n                token: [\"variable.assignment.terraform\", \"keyword.operator\"],\n                regex: \"\\\\b([a-zA-Z_]+)(\\\\s*=)\"\n            }\n        ],\n        \"interpolated_variables\": [\n            {\n                token: \"variable.terraform\",\n                regex: \"\\\\b(var|self|count|path|local)\\\\b(?:\\\\.*[a-zA-Z_-]*)?\"\n            }\n        ],\n        \"strings\": [\n            {\n                token: \"punctuation.quote.terraform\",\n                regex: \"'\",\n                push:\n                    [{\n                        token: 'punctuation.quote.terraform',\n                        regex: \"'\",\n                        next: 'pop'\n                    },\n                        {include: \"escaped_chars\"},\n                        {defaultToken: 'string'}]\n            },\n            {\n                token: \"punctuation.quote.terraform\",\n                regex: '\"',\n                push:\n                    [{\n                        token: 'punctuation.quote.terraform',\n                        regex: '\"',\n                        next: 'pop'\n                    },\n                        {include: \"interpolation\"},\n                        {include: \"escaped_chars\"},\n                        {defaultToken: 'string'}]\n            }\n        ],\n        \"escaped_chars\": [\n            {\n                token: \"constant.escaped_char.terraform\",\n                regex: \"\\\\\\\\.\"\n            }\n        ],\n        \"operators\": [\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\?|:|==|!=|>|<|>=|<=|&&|\\\\|\\\\\\||!|%|&|\\\\*|\\\\+|\\\\-|/|=\"\n            }\n        ],\n        \"interpolation\": [\n            {// TODO: double $\n                token: \"punctuation.interpolated.begin.terraform\",\n                regex: \"\\\\$?\\\\$\\\\{\",\n                push: [{\n                    token: \"punctuation.interpolated.end.terraform\",\n                    regex: \"\\\\}\",\n                    next: \"pop\"\n                },\n                    {include: \"interpolated_variables\"},\n                    {include: \"operators\"},\n                    {include: \"constants\"},\n                    {include: \"strings\"},\n                    {include: \"functions\"},\n                    {include: \"parenthesis\"},\n                    {defaultToken: \"punctuation\"}\n                ]\n            }\n        ],\n        \"functions\": [\n            {\n                token: \"keyword.function.terraform\",\n                regex: \"\\\\b(abs|basename|base64decode|base64encode|base64gzip|base64sha256|base64sha512|bcrypt|ceil|chomp|chunklist|cidrhost|cidrnetmask|cidrsubnet|coalesce|coalescelist|compact|concat|contains|dirname|distinct|element|file|floor|flatten|format|formatlist|indent|index|join|jsonencode|keys|length|list|log|lookup|lower|map|matchkeys|max|merge|min|md5|pathexpand|pow|replace|rsadecrypt|sha1|sha256|sha512|signum|slice|sort|split|substr|timestamp|timeadd|title|transpose|trimspace|upper|urlencode|uuid|values|zipmap)\\\\b\"\n            }\n        ],\n        \"parenthesis\": [\n            {\n                token: \"paren.lpar\",\n                regex: \"\\\\[\"\n            },\n            {\n                token: \"paren.rpar\",\n                regex: \"\\\\]\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(TerraformHighlightRules, TextHighlightRules);\n\nexports.TerraformHighlightRules = TerraformHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/terraform\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/terraform_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TerraformHighlightRules = require(\"./terraform_highlight_rules\").TerraformHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = TerraformHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n\n(function () {\n    this.$id = \"ace/mode/terraform\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-tex.js",
    "content": "define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TexHighlightRules = function(textClass) {\n\n    if (!textClass)\n        textClass = \"text\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : textClass, // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : textClass,\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass, // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(TexHighlightRules, TextHighlightRules);\n\nexports.TexHighlightRules = TexHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/tex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function(suppressHighlighting) {\n    if (suppressHighlighting)\n        this.HighlightRules = TextHighlightRules;\n    else\n        this.HighlightRules = TexHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   this.lineCommentStart = \"%\";\n   this.getNextLineIndent = function(state, line, tab) {\n      return this.$getIndent(line);\n   };\n\n   this.allowAutoInsert = function() {\n      return false;\n   };\n    this.$id = \"ace/mode/tex\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-text.js",
    "content": "\n;                (function() {\n                    window.require([\"ace/mode/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-textile.js",
    "content": "define(\"ace/mode/textile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TextileHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : function(value) {\n                    if (value.charAt(0) == \"h\")\n                        return \"markup.heading.\" + value.charAt(1);\n                    else\n                        return \"markup.heading\";\n                },\n                regex : \"h1|h2|h3|h4|h5|h6|bq|p|bc|pre\",\n                next  : \"blocktag\"\n            },\n            {\n                token : \"keyword\",\n                regex : \"[\\\\*]+|[#]+\"\n            },\n            {\n                token : \"text\",\n                regex : \".+\"\n            }\n        ],\n        \"blocktag\" : [\n            {\n                token : \"keyword\",\n                regex : \"\\\\. \",\n                next  : \"start\"\n            },\n            {\n                token : \"keyword\",\n                regex : \"\\\\(\",\n                next  : \"blocktagproperties\"\n            }\n        ],\n        \"blocktagproperties\" : [\n            {\n                token : \"keyword\",\n                regex : \"\\\\)\",\n                next  : \"blocktag\"\n            },\n            {\n                token : \"string\",\n                regex : \"[a-zA-Z0-9\\\\-_]+\"\n            },\n            {\n                token : \"keyword\",\n                regex : \"#\"\n            }\n        ]\n    };\n};\n\noop.inherits(TextileHighlightRules, TextHighlightRules);\n\nexports.TextileHighlightRules = TextileHighlightRules;\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/textile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/textile_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextileHighlightRules = require(\"./textile_highlight_rules\").TextileHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = TextileHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"intag\")\n            return tab;\n        \n        return \"\";\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.$id = \"ace/mode/textile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-toml.js",
    "content": "define(\"ace/mode/toml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TomlHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n\n    this.$rules = {\n    \"start\": [\n        {\n            token: \"comment.toml\",\n            regex: /#.*$/\n        },\n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        },\n        {\n            token: [\"variable.keygroup.toml\"],\n            regex: \"(?:^\\\\s*)(\\\\[\\\\[([^\\\\]]+)\\\\]\\\\])\"\n        },\n        {\n            token: [\"variable.keygroup.toml\"],\n            regex: \"(?:^\\\\s*)(\\\\[([^\\\\]]+)\\\\])\"\n        },\n        {\n            token : keywordMapper,\n            regex : identifierRe\n        },\n        {\n           token : \"support.date.toml\",\n           regex: \"\\\\d{4}-\\\\d{2}-\\\\d{2}(T)\\\\d{2}:\\\\d{2}:\\\\d{2}(Z)\"\n        },\n        {\n           token: \"constant.numeric.toml\",\n           regex: \"-?\\\\d+(\\\\.?\\\\d+)?\"\n        }\n    ],\n    \"qqstring\" : [\n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        },\n        {\n            token : \"constant.language.escape\",\n            regex : '\\\\\\\\[0tnr\"\\\\\\\\]'\n        },\n        {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        },\n        {\n            defaultToken: \"string\"\n        }\n    ]\n    };\n\n};\n\noop.inherits(TomlHighlightRules, TextHighlightRules);\n\nexports.TomlHighlightRules = TomlHighlightRules;\n});\n\ndefine(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var re = this.foldingStartMarker;\n        var line = session.getLine(row);\n        \n        var m = line.match(re);\n        \n        if (!m) return;\n        \n        var startName = m[1] + \".\";\n        \n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            m = line.match(re);\n            if (m && m[1].lastIndexOf(startName, 0) !== 0)\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/toml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/toml_highlight_rules\",\"ace/mode/folding/ini\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TomlHighlightRules = require(\"./toml_highlight_rules\").TomlHighlightRules;\nvar FoldMode = require(\"./folding/ini\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = TomlHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/toml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-tsx.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar TypeScriptHighlightRules = function (options) {\n\n    var tsRules = [\n        {\n            token: [\"storage.type\", \"text\", \"entity.name.function.ts\"],\n            regex: \"(function)(\\\\s+)([a-zA-Z0-9\\$_\\u00a1-\\uffff][a-zA-Z0-9\\d\\$_\\u00a1-\\uffff]*)\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"\n        },\n        {\n            token: [\"keyword\", \"storage.type.variable.ts\"],\n            regex: \"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"\n         },\n        {\n            token: \"keyword\",\n            regex: \"\\\\b(?:super|export|import|keyof|infer)\\\\b\"\n        }, \n        {\n            token: [\"storage.type.variable.ts\"],\n            regex: \"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"\n        }\n    ];\n\n    var JSRules = new JavaScriptHighlightRules({jsx: (options && options.jsx) == true}).getRules();\n    \n    JSRules.no_regex = tsRules.concat(JSRules.no_regex);\n    this.$rules = JSRules;\n};\n\noop.inherits(TypeScriptHighlightRules, JavaScriptHighlightRules);\n\nexports.TypeScriptHighlightRules = TypeScriptHighlightRules;\n});\n\ndefine(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar jsMode = require(\"./javascript\").Mode;\nvar TypeScriptHighlightRules = require(\"./typescript_highlight_rules\").TypeScriptHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = TypeScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, jsMode);\n\n(function() {\n    this.createWorker = function(session) {\n        return null;\n    };\n    this.$id = \"ace/mode/typescript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/tsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/typescript\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar tsMode = require(\"./typescript\").Mode;\n\nvar Mode = function() {\n    tsMode.call(this);\n    this.$highlightRuleConfig = {jsx: true};\n};\noop.inherits(Mode, tsMode);\n\n(function() {\n    this.$id = \"ace/mode/tsx\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-turtle.js",
    "content": "define(\"ace/mode/turtle_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TurtleHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            include: \"#strings\"\n        }, {\n            include: \"#base-prefix-declarations\"\n        }, {\n            include: \"#string-language-suffixes\"\n        }, {\n            include: \"#string-datatype-suffixes\"\n        }, {\n            include: \"#relative-urls\"\n        }, {\n            include: \"#xml-schema-types\"\n        }, {\n            include: \"#rdf-schema-types\"\n        }, {\n            include: \"#owl-types\"\n        }, {\n            include: \"#qnames\"\n        }, {\n            include: \"#punctuation-operators\"\n        }],\n        \"#base-prefix-declarations\": [{\n            token: \"keyword.other.prefix.turtle\",\n            regex: /@(?:base|prefix)/\n        }],\n        \"#comments\": [{\n            token: [\n                \"punctuation.definition.comment.turtle\",\n                \"comment.line.hash.turtle\"\n            ],\n            regex: /(#)(.*$)/\n        }],\n        \"#owl-types\": [{\n            token: \"support.type.datatype.owl.turtle\",\n            regex: /owl:[a-zA-Z]+/\n        }],\n        \"#punctuation-operators\": [{\n            token: \"keyword.operator.punctuation.turtle\",\n            regex: /;|,|\\.|\\(|\\)|\\[|\\]/\n        }],\n        \"#qnames\": [{\n            token: \"entity.name.other.qname.turtle\",\n            regex: /(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/\n        }],\n        \"#rdf-schema-types\": [{\n            token: \"support.type.datatype.rdf.schema.turtle\",\n            regex: /rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/\n        }],\n        \"#relative-urls\": [{\n            token: \"string.quoted.other.relative.url.turtle\",\n            regex: /</,\n            push: [{\n                token: \"string.quoted.other.relative.url.turtle\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.other.relative.url.turtle\"\n            }]\n        }],\n        \"#string-datatype-suffixes\": [{\n            token: \"keyword.operator.datatype.suffix.turtle\",\n            regex: /\\^\\^/\n        }],\n        \"#string-language-suffixes\": [{\n            token: [\n                \"keyword.operator.language.suffix.turtle\",\n                \"constant.language.suffix.turtle\"\n            ],\n            regex: /(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/\n        }],\n        \"#strings\": [{\n            token: \"string.quoted.triple.turtle\",\n            regex: /\"\"\"/,\n            push: [{\n                token: \"string.quoted.triple.turtle\",\n                regex: /\"\"\"/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.triple.turtle\"\n            }]\n        }, {\n            token: \"string.quoted.double.turtle\",\n            regex: /\"/,\n            push: [{\n                token: \"string.quoted.double.turtle\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"invalid.string.newline\",\n                regex: /$/\n            }, {\n                token: \"constant.character.escape.turtle\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.turtle\"\n            }]\n        }],\n        \"#xml-schema-types\": [{\n            token: \"support.type.datatype.xml.schema.turtle\",\n            regex: /xsd?:[a-z][a-zA-Z]+/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nTurtleHighlightRules.metaData = {\n    fileTypes: [\"ttl\", \"nt\"],\n    name: \"Turtle\",\n    scopeName: \"source.turtle\"\n};\n\n\noop.inherits(TurtleHighlightRules, TextHighlightRules);\n\nexports.TurtleHighlightRules = TurtleHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/turtle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/turtle_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TurtleHighlightRules = require(\"./turtle_highlight_rules\").TurtleHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = TurtleHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/turtle\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-twig.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/twig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TwigHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var tags = \"autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim\";\n    tags = tags + \"|end\" + tags.replace(/\\|/g, \"|end\");\n    var filters = \"abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode\";\n    var functions = \"attribute|constant|cycle|date|dump|parent|random|range|template_from_string\";\n    var tests = \"constant|divisibleby|sameas|defined|empty|even|iterable|odd\";\n    var constants = \"null|none|true|false\";\n    var operators = \"b-and|b-xor|b-or|in|is|and|or|not\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control.twig\": tags,\n        \"support.function.twig\": [filters, functions, tests].join(\"|\"),\n        \"keyword.operator.twig\":  operators,\n        \"constant.language.twig\": constants\n    }, \"identifier\");\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token : \"variable.other.readwrite.local.twig\",\n            regex : \"\\\\{\\\\{-?\",\n            push : \"twig-start\"\n        }, {\n            token : \"meta.tag.twig\",\n            regex : \"\\\\{%-?\",\n            push : \"twig-start\"\n        }, {\n            token : \"comment.block.twig\",\n            regex : \"\\\\{#-?\",\n            push : \"twig-comment\"\n        });\n    }\n    this.$rules[\"twig-comment\"] = [{\n        token : \"comment.block.twig\",\n        regex : \".*-?#\\\\}\",\n        next : \"pop\"\n    }];\n\n    this.$rules[\"twig-start\"] = [{\n        token : \"variable.other.readwrite.local.twig\",\n        regex : \"-?\\\\}\\\\}\",\n        next : \"pop\"\n    }, {\n        token : \"meta.tag.twig\",\n        regex : \"-?%\\\\}\",\n        next : \"pop\"\n    }, {\n        token : \"string\",\n        regex : \"'\",\n        next  : \"twig-qstring\"\n    }, {\n        token : \"string\",\n        regex : '\"',\n        next  : \"twig-qqstring\"\n    }, {\n        token : \"constant.numeric\", // hex\n        regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n    }, {\n        token : \"constant.numeric\", // float\n        regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n    }, {\n        token : \"constant.language.boolean\",\n        regex : \"(?:true|false)\\\\b\"\n    }, {\n        token : keywordMapper,\n        regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n    }, {\n        token : \"keyword.operator.assignment\",\n        regex : \"=|~\"\n    }, {\n        token : \"keyword.operator.comparison\",\n        regex : \"==|!=|<|>|>=|<=|===\"\n    }, {\n        token : \"keyword.operator.arithmetic\",\n        regex : \"\\\\+|-|/|%|//|\\\\*|\\\\*\\\\*\"\n    }, {\n        token : \"keyword.operator.other\",\n        regex : \"\\\\.\\\\.|\\\\|\"\n    }, {\n        token : \"punctuation.operator\",\n        regex : /\\?|:|,|;|\\./\n    }, {\n        token : \"paren.lparen\",\n        regex : /[\\[\\({]/\n    }, {\n        token : \"paren.rparen\",\n        regex : /[\\])}]/\n    }, {\n        token : \"text\",\n        regex : \"\\\\s+\"\n    } ];\n\n    this.$rules[\"twig-qqstring\"] = [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\\"$#ntr]|#{[^\"}]*}/\n        }, {\n            token : \"string\",\n            regex : '\"',\n            next  : \"twig-start\"\n        }, {\n            defaultToken : \"string\"\n        }\n    ];\n\n    this.$rules[\"twig-qstring\"] = [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\'ntr]}/\n        }, {\n            token : \"string\",\n            regex : \"'\",\n            next  : \"twig-start\"\n        }, {\n            defaultToken : \"string\"\n        }\n    ];\n\n    this.normalizeRules();\n};\n\noop.inherits(TwigHighlightRules, TextHighlightRules);\n\nexports.TwigHighlightRules = TwigHighlightRules;\n});\n\ndefine(\"ace/mode/twig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/twig_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar TwigHighlightRules = require(\"./twig_highlight_rules\").TwigHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = TwigHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.blockComment = {start: \"{#\", end: \"#}\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/twig\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-typescript.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar TypeScriptHighlightRules = function (options) {\n\n    var tsRules = [\n        {\n            token: [\"storage.type\", \"text\", \"entity.name.function.ts\"],\n            regex: \"(function)(\\\\s+)([a-zA-Z0-9\\$_\\u00a1-\\uffff][a-zA-Z0-9\\d\\$_\\u00a1-\\uffff]*)\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"\n        },\n        {\n            token: [\"keyword\", \"storage.type.variable.ts\"],\n            regex: \"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"\n         },\n        {\n            token: \"keyword\",\n            regex: \"\\\\b(?:super|export|import|keyof|infer)\\\\b\"\n        }, \n        {\n            token: [\"storage.type.variable.ts\"],\n            regex: \"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"\n        }\n    ];\n\n    var JSRules = new JavaScriptHighlightRules({jsx: (options && options.jsx) == true}).getRules();\n    \n    JSRules.no_regex = tsRules.concat(JSRules.no_regex);\n    this.$rules = JSRules;\n};\n\noop.inherits(TypeScriptHighlightRules, JavaScriptHighlightRules);\n\nexports.TypeScriptHighlightRules = TypeScriptHighlightRules;\n});\n\ndefine(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar jsMode = require(\"./javascript\").Mode;\nvar TypeScriptHighlightRules = require(\"./typescript_highlight_rules\").TypeScriptHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = TypeScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, jsMode);\n\n(function() {\n    this.createWorker = function(session) {\n        return null;\n    };\n    this.$id = \"ace/mode/typescript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-vala.js",
    "content": "define(\"ace/mode/vala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ValaHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: \n            [ 'meta.using.vala',\n              'keyword.other.using.vala',\n              'meta.using.vala',\n              'storage.modifier.using.vala',\n              'meta.using.vala',\n              'punctuation.terminator.vala' ],\n           regex: '^(\\\\s*)(using)\\\\b(?:(\\\\s*)([^ ;$]+)(\\\\s*)((?:;)?))?' },\n         { include: '#code' } ],\n      '#all-types': \n       [ { include: '#primitive-arrays' },\n         { include: '#primitive-types' },\n         { include: '#object-types' } ],\n      '#annotations': \n       [ { token: \n            [ 'storage.type.annotation.vala',\n              'punctuation.definition.annotation-arguments.begin.vala' ],\n           regex: '(@[^ (]+)(\\\\()',\n           push: \n            [ { token: 'punctuation.definition.annotation-arguments.end.vala',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: \n                 [ 'constant.other.key.vala',\n                   'text',\n                   'keyword.operator.assignment.vala' ],\n                regex: '(\\\\w*)(\\\\s*)(=)' },\n              { include: '#code' },\n              { token: 'punctuation.seperator.property.vala', regex: ',' },\n              { defaultToken: 'meta.declaration.annotation.vala' } ] },\n         { token: 'storage.type.annotation.vala', regex: '@\\\\w*' } ],\n      '#anonymous-classes-and-new': \n       [ { token: 'keyword.control.new.vala',\n           regex: '\\\\bnew\\\\b',\n           push_disabled: \n            [ { token: 'text',\n                regex: '(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)',\n                next: 'pop' },\n              { token: [ 'storage.type.vala', 'text' ],\n                regex: '(\\\\w+)(\\\\s*)(?=\\\\[)',\n                push: \n                 [ { token: 'text', regex: '}|(?=;|\\\\))', next: 'pop' },\n                   { token: 'text',\n                     regex: '\\\\[',\n                     push: \n                      [ { token: 'text', regex: '\\\\]', next: 'pop' },\n                        { include: '#code' } ] },\n                   { token: 'text',\n                     regex: '{',\n                     push: \n                      [ { token: 'text', regex: '(?=})', next: 'pop' },\n                        { include: '#code' } ] } ] },\n              { token: 'text',\n                regex: '(?=\\\\w.*\\\\()',\n                push: \n                 [ { token: 'text',\n                     regex: '(?<=\\\\))',\n                     TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                     originalRegex: '(?<=\\\\))',\n                     next: 'pop' },\n                   { include: '#object-types' },\n                   { token: 'text',\n                     regex: '\\\\(',\n                     push: \n                      [ { token: 'text', regex: '\\\\)', next: 'pop' },\n                        { include: '#code' } ] } ] },\n              { token: 'meta.inner-class.vala',\n                regex: '{',\n                push: \n                 [ { token: 'meta.inner-class.vala', regex: '}', next: 'pop' },\n                   { include: '#class-body' },\n                   { defaultToken: 'meta.inner-class.vala' } ] } ] } ],\n      '#assertions': \n       [ { token: \n            [ 'keyword.control.assert.vala',\n              'meta.declaration.assertion.vala' ],\n           regex: '\\\\b(assert|requires|ensures)(\\\\s)',\n           push: \n            [ { token: 'meta.declaration.assertion.vala',\n                regex: '$',\n                next: 'pop' },\n              { token: 'keyword.operator.assert.expression-seperator.vala',\n                regex: ':' },\n              { include: '#code' },\n              { defaultToken: 'meta.declaration.assertion.vala' } ] } ],\n      '#class': \n       [ { token: 'meta.class.vala',\n           regex: '(?=\\\\w?[\\\\w\\\\s]*(?:class|(?:@)?interface|enum|struct|namespace)\\\\s+\\\\w+)',\n           push: \n            [ { token: 'paren.vala',\n                regex: '}',\n                next: 'pop' },\n              { include: '#storage-modifiers' },\n              { include: '#comments' },\n              { token: \n                 [ 'storage.modifier.vala',\n                   'meta.class.identifier.vala',\n                   'entity.name.type.class.vala' ],\n                regex: '(class|(?:@)?interface|enum|struct|namespace)(\\\\s+)([\\\\w\\\\.]+)' },\n              { token: 'storage.modifier.extends.vala',\n                regex: ':',\n                push: \n                 [ { token: 'meta.definition.class.inherited.classes.vala',\n                     regex: '(?={|,)',\n                     next: 'pop' },\n                   { include: '#object-types-inherited' },\n                   { include: '#comments' },\n                   { defaultToken: 'meta.definition.class.inherited.classes.vala' } ] },\n              { token: \n                 [ 'storage.modifier.implements.vala',\n                   'meta.definition.class.implemented.interfaces.vala' ],\n                regex: '(,)(\\\\s)',\n                push: \n                 [ { token: 'meta.definition.class.implemented.interfaces.vala',\n                     regex: '(?=\\\\{)',\n                     next: 'pop' },\n                   { include: '#object-types-inherited' },\n                   { include: '#comments' },\n                   { defaultToken: 'meta.definition.class.implemented.interfaces.vala' } ] },\n              { token: 'paren.vala',\n                regex: '{',\n                push: \n                 [ { token: 'paren.vala', regex: '(?=})', next: 'pop' },\n                   { include: '#class-body' },\n                   { defaultToken: 'meta.class.body.vala' } ] },\n              { defaultToken: 'meta.class.vala' } ],\n           comment: 'attempting to put namespace in here.' } ],\n      '#class-body': \n       [ { include: '#comments' },\n         { include: '#class' },\n         { include: '#enums' },\n         { include: '#methods' },\n         { include: '#annotations' },\n         { include: '#storage-modifiers' },\n         { include: '#code' } ],\n      '#code': \n       [ { include: '#comments' },\n         { include: '#class' },\n         { token: 'text',\n           regex: '{',\n           push: \n            [ { token: 'text', regex: '}', next: 'pop' },\n              { include: '#code' } ] },\n         { include: '#assertions' },\n         { include: '#parens' },\n         { include: '#constants-and-special-vars' },\n         { include: '#anonymous-classes-and-new' },\n         { include: '#keywords' },\n         { include: '#storage-modifiers' },\n         { include: '#strings' },\n         { include: '#all-types' } ],\n      '#comments': \n       [ { token: 'punctuation.definition.comment.vala',\n           regex: '/\\\\*\\\\*/' },\n         { include: 'text.html.javadoc' },\n         { include: '#comments-inline' } ],\n      '#comments-inline': \n       [ { token: 'punctuation.definition.comment.vala',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.vala',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.vala' } ] },\n         { token: \n            [ 'text',\n              'punctuation.definition.comment.vala',\n              'comment.line.double-slash.vala' ],\n           regex: '(\\\\s*)(//)(.*$)' } ],\n      '#constants-and-special-vars': \n       [ { token: 'constant.language.vala',\n           regex: '\\\\b(?:true|false|null)\\\\b' },\n         { token: 'variable.language.vala',\n           regex: '\\\\b(?:this|base)\\\\b' },\n         { token: 'constant.numeric.vala',\n           regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\\\b' },\n         { token: [ 'keyword.operator.dereference.vala', 'constant.other.vala' ],\n           regex: '((?:\\\\.)?)\\\\b([A-Z][A-Z0-9_]+)(?!<|\\\\.class|\\\\s*\\\\w+\\\\s*=)\\\\b' } ],\n      '#enums': \n       [ { token: 'text',\n           regex: '^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))',\n           push: \n            [ { token: 'text', regex: '(?=;|})', next: 'pop' },\n              { token: 'constant.other.enum.vala',\n                regex: '\\\\w+',\n                push: \n                 [ { token: 'meta.enum.vala', regex: '(?=,|;|})', next: 'pop' },\n                   { include: '#parens' },\n                   { token: 'text',\n                     regex: '{',\n                     push: \n                      [ { token: 'text', regex: '}', next: 'pop' },\n                        { include: '#class-body' } ] },\n                   { defaultToken: 'meta.enum.vala' } ] } ] } ],\n      '#keywords': \n       [ { token: 'keyword.control.catch-exception.vala',\n           regex: '\\\\b(?:try|catch|finally|throw)\\\\b' },\n         { token: 'keyword.control.vala', regex: '\\\\?|:|\\\\?\\\\?' },\n         { token: 'keyword.control.vala',\n           regex: '\\\\b(?:return|break|case|continue|default|do|while|for|foreach|switch|if|else|in|yield|get|set|value)\\\\b' },\n         { token: 'keyword.operator.vala',\n           regex: '\\\\b(?:typeof|is|as)\\\\b' },\n         { token: 'keyword.operator.comparison.vala',\n           regex: '==|!=|<=|>=|<>|<|>' },\n         { token: 'keyword.operator.assignment.vala', regex: '=' },\n         { token: 'keyword.operator.increment-decrement.vala',\n           regex: '\\\\-\\\\-|\\\\+\\\\+' },\n         { token: 'keyword.operator.arithmetic.vala',\n           regex: '\\\\-|\\\\+|\\\\*|\\\\/|%' },\n         { token: 'keyword.operator.logical.vala', regex: '!|&&|\\\\|\\\\|' },\n         { token: 'keyword.operator.dereference.vala',\n           regex: '\\\\.(?=\\\\S)',\n           originalRegex: '(?<=\\\\S)\\\\.(?=\\\\S)' },\n         { token: 'punctuation.terminator.vala', regex: ';' },\n         { token: 'keyword.operator.ownership', regex: 'owned|unowned' } ],\n      '#methods': \n       [ { token: 'meta.method.vala',\n           regex: '(?!new)(?=\\\\w.*\\\\s+)(?=[^=]+\\\\()',\n           push: \n            [ { token: 'paren.vala', regex: '}|(?=;)', next: 'pop' },\n              { include: '#storage-modifiers' },\n              { token: [ 'entity.name.function.vala', 'meta.method.identifier.vala' ],\n                regex: '([\\\\~\\\\w\\\\.]+)(\\\\s*\\\\()',\n                push: \n                 [ { token: 'meta.method.identifier.vala',\n                     regex: '\\\\)',\n                     next: 'pop' },\n                   { include: '#parameters' },\n                   { defaultToken: 'meta.method.identifier.vala' } ] },\n              { token: 'meta.method.return-type.vala',\n                regex: '(?=\\\\w.*\\\\s+\\\\w+\\\\s*\\\\()',\n                push: \n                 [ { token: 'meta.method.return-type.vala',\n                     regex: '(?=\\\\w+\\\\s*\\\\()',\n                     next: 'pop' },\n                   { include: '#all-types' },\n                   { defaultToken: 'meta.method.return-type.vala' } ] },\n              { include: '#throws' },\n              { token: 'paren.vala',\n                regex: '{',\n                push: \n                 [ { token: 'paren.vala', regex: '(?=})', next: 'pop' },\n                   { include: '#code' },\n                   { defaultToken: 'meta.method.body.vala' } ] },\n              { defaultToken: 'meta.method.vala' } ] } ],\n      '#namespace': \n       [ { token: 'text',\n           regex: '^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))',\n           push: \n            [ { token: 'text', regex: '(?=;|})', next: 'pop' },\n              { token: 'constant.other.namespace.vala',\n                regex: '\\\\w+',\n                push: \n                 [ { token: 'meta.namespace.vala', regex: '(?=,|;|})', next: 'pop' },\n                   { include: '#parens' },\n                   { token: 'text',\n                     regex: '{',\n                     push: \n                      [ { token: 'text', regex: '}', next: 'pop' },\n                        { include: '#code' } ] },\n                   { defaultToken: 'meta.namespace.vala' } ] } ],\n           comment: 'This is not quite right. See the class grammar right now' } ],\n      '#object-types': \n       [ { token: 'storage.type.generic.vala',\n           regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<',\n           push: \n            [ { token: 'storage.type.generic.vala',\n                regex: '>|[^\\\\w\\\\s,\\\\?<\\\\[()\\\\]]',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '>|[^\\\\w\\\\s,\\\\?<\\\\[(?:[,]+)\\\\]]',\n                next: 'pop' },\n              { include: '#object-types' },\n              { token: 'storage.type.generic.vala',\n                regex: '<',\n                push: \n                 [ { token: 'storage.type.generic.vala',\n                     regex: '>|[^\\\\w\\\\s,\\\\[\\\\]<]',\n                     next: 'pop' },\n                   { defaultToken: 'storage.type.generic.vala' } ],\n                comment: 'This is just to support <>\\'s with no actual type prefix' },\n              { defaultToken: 'storage.type.generic.vala' } ] },\n         { token: 'storage.type.object.array.vala',\n           regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*(?=\\\\[)',\n           push: \n            [ { token: 'storage.type.object.array.vala',\n                regex: '(?=[^\\\\]\\\\s])',\n                next: 'pop' },\n              { token: 'text',\n                regex: '\\\\[',\n                push: \n                 [ { token: 'text', regex: '\\\\]', next: 'pop' },\n                   { include: '#code' } ] },\n              { defaultToken: 'storage.type.object.array.vala' } ] },\n         { token: \n            [ 'storage.type.vala',\n              'keyword.operator.dereference.vala',\n              'storage.type.vala' ],\n           regex: '\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*\\\\b)' } ],\n      '#object-types-inherited': \n       [ { token: 'entity.other.inherited-class.vala',\n           regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<',\n           push: \n            [ { token: 'entity.other.inherited-class.vala',\n                regex: '>|[^\\\\w\\\\s,<]',\n                next: 'pop' },\n              { include: '#object-types' },\n              { token: 'storage.type.generic.vala',\n                regex: '<',\n                push: \n                 [ { token: 'storage.type.generic.vala',\n                     regex: '>|[^\\\\w\\\\s,<]',\n                     next: 'pop' },\n                   { defaultToken: 'storage.type.generic.vala' } ],\n                comment: 'This is just to support <>\\'s with no actual type prefix' },\n              { defaultToken: 'entity.other.inherited-class.vala' } ] },\n         { token: \n            [ 'entity.other.inherited-class.vala',\n              'keyword.operator.dereference.vala',\n              'entity.other.inherited-class.vala' ],\n           regex: '\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*)' } ],\n      '#parameters': \n       [ { token: 'storage.modifier.vala', regex: 'final' },\n         { include: '#primitive-arrays' },\n         { include: '#primitive-types' },\n         { include: '#object-types' },\n         { token: 'variable.parameter.vala', regex: '\\\\w+' } ],\n      '#parens': \n       [ { token: 'text',\n           regex: '\\\\(',\n           push: \n            [ { token: 'text', regex: '\\\\)', next: 'pop' },\n              { include: '#code' } ] } ],\n      '#primitive-arrays': \n       [ { token: 'storage.type.primitive.array.vala',\n           regex: '\\\\b(?:bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|int8|int16|int32|int64|uint8|uint16|uint32|uint64)(?:\\\\[\\\\])*\\\\b' } ],\n      '#primitive-types': \n       [ { token: 'storage.type.primitive.vala',\n           regex: '\\\\b(?:var|bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\\\\b',\n           comment: 'var is not really a primitive, but acts like one in most cases' } ],\n      '#storage-modifiers': \n       [ { token: 'storage.modifier.vala',\n           regex: '\\\\b(?:public|private|protected|internal|static|final|sealed|virtual|override|abstract|readonly|volatile|dynamic|async|unsafe|out|ref|weak|owned|unowned|const)\\\\b',\n           comment: 'Not sure about unsafe and readonly' } ],\n      '#strings': \n       [ { token: 'punctuation.definition.string.begin.vala',\n           regex: '@\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala',\n                regex: '\\\\\\\\.|%[\\\\w\\\\.\\\\-]+|\\\\$(?:\\\\w+|\\\\([\\\\w\\\\s\\\\+\\\\-\\\\*\\\\/]+\\\\))' },\n              { defaultToken: 'string.quoted.interpolated.vala' } ] },\n         { token: 'punctuation.definition.string.begin.vala',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala', regex: '\\\\\\\\.' },\n              { token: 'constant.character.escape.vala',\n                regex: '%[\\\\w\\\\.\\\\-]+' },\n              { defaultToken: 'string.quoted.double.vala' } ] },\n         { token: 'punctuation.definition.string.begin.vala',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.single.vala' } ] },\n         { token: 'punctuation.definition.string.begin.vala',\n           regex: '\"\"\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\"\"\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala',\n                regex: '%[\\\\w\\\\.\\\\-]+' },\n              { defaultToken: 'string.quoted.triple.vala' } ] } ],\n      '#throws': \n       [ { token: 'storage.modifier.vala',\n           regex: 'throws',\n           push: \n            [ { token: 'meta.throwables.vala', regex: '(?={|;)', next: 'pop' },\n              { include: '#object-types' },\n              { defaultToken: 'meta.throwables.vala' } ] } ],\n      '#values': \n       [ { include: '#strings' },\n         { include: '#object-types' },\n         { include: '#constants-and-special-vars' } ] };\n    \n    this.normalizeRules();\n};\n\nValaHighlightRules.metaData = { \n    comment: 'Based heavily on the Java bundle\\'s language syntax. TODO:\\n* Closures\\n* Delegates\\n* Properties: Better support for properties.\\n* Annotations\\n* Error domains\\n* Named arguments\\n* Array slicing, negative indexes, multidimensional\\n* construct blocks\\n* lock blocks?\\n* regex literals\\n* DocBlock syntax highlighting. (Currently importing javadoc)\\n* Folding rule for comments.\\n',\n      fileTypes: [ 'vala' ],\n      foldingStartMarker: '(\\\\{\\\\s*(//.*)?$|^\\\\s*// \\\\{\\\\{\\\\{)',\n      foldingStopMarker: '^\\\\s*(\\\\}|// \\\\}\\\\}\\\\}$)',\n      name: 'Vala',\n      scopeName: 'source.vala' };\n\n\noop.inherits(ValaHighlightRules, TextHighlightRules);\n\nexports.ValaHighlightRules = ValaHighlightRules;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/vala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/vala_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar ValaHighlightRules = require(\"./vala_highlight_rules\").ValaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = ValaHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/vala\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-vbscript.js",
    "content": "define(\"ace/mode/vbscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar VBScriptHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control.asp\":  \"If|Then|Else|ElseIf|End|While|Wend|For|To|Each|Case|Select|Return\"\n            + \"|Continue|Do|Until|Loop|Next|With|Exit|Function|Property|Type|Enum|Sub|IIf\",\n        \"storage.type.asp\": \"Dim|Call|Class|Const|Dim|Redim|Set|Let|Get|New|Randomize|Option|Explicit\",\n        \"storage.modifier.asp\": \"Private|Public|Default\",\n        \"keyword.operator.asp\": \"Mod|And|Not|Or|Xor|as\",\n        \"constant.language.asp\": \"Empty|False|Nothing|Null|True\",\n        \"support.class.asp\": \"Application|ObjectContext|Request|Response|Server|Session\",\n        \"support.class.collection.asp\": \"Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables\",\n        \"support.constant.asp\": \"TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute\"\n            + \"|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout\",\n        \"support.function.asp\": \"Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog\"\n            + \"|BinaryWrite|Clear|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex\",\n        \"support.function.event.asp\": \"Application_OnEnd|Application_OnStart\"\n            + \"|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart\",\n        \"support.function.vb.asp\": \"Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng\"\n            + \"|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial\"\n            + \"|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency\"\n            + \"|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex\"\n            + \"|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric\"\n            + \"|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim\"\n            + \"|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace\"\n            + \"|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion\"\n            + \"|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse\"\n            + \"|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year\",\n        \"support.type.vb.asp\": \"vbtrue|vbfalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|\"\n            + \"int32|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday\"\n            + \"|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek\"\n            + \"|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger\"\n            + \"|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant\"\n            + \"|vbDataObject|vbDecimal|vbByte|vbArray\"\n    }, \"identifier\", true);\n\n    this.$rules = {\n    \"start\": [\n        {\n            token: [\n                \"meta.ending-space\"\n            ],\n            regex: \"$\"\n        },\n        {\n            token: [null],\n            regex: \"^(?=\\\\t)\",\n            next: \"state_3\"\n        },\n        {\n            token: [null],\n            regex: \"^(?= )\",\n            next: \"state_4\"\n        },\n        {\n            token: [\n                \"text\",\n                \"storage.type.function.asp\",\n                \"text\",\n                \"entity.name.function.asp\",\n                \"text\",\n                \"punctuation.definition.parameters.asp\",\n                \"variable.parameter.function.asp\",\n                \"punctuation.definition.parameters.asp\"\n            ],\n            regex: \"^(\\\\s*)(Function|Sub)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()([^)]*)(\\\\))\"\n        },\n        {\n            token: \"punctuation.definition.comment.asp\",\n            regex: \"'|REM(?=\\\\s|$)\",\n            next: \"comment\",\n            caseInsensitive: true\n        },\n        {\n            token: \"storage.type.asp\",\n            regex: \"On Error Resume Next|On Error GoTo\",\n            caseInsensitive: true\n        },\n        {\n            token: \"punctuation.definition.string.begin.asp\",\n            regex: '\"',\n            next: \"string\"\n        },\n        {\n            token: [\n                \"punctuation.definition.variable.asp\"\n            ],\n            regex: \"(\\\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b\\\\s*\"\n        },\n        {\n            token: \"constant.numeric.asp\",\n            regex: \"-?\\\\b(?:(?:0(?:x|X)[0-9a-fA-F]*)|(?:(?:[0-9]+\\\\.?[0-9]*)|(?:\\\\.[0-9]+))(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"\n        },\n        {\n            regex: \"\\\\w+\",\n            token: keywordMapper\n        },\n        {\n            token: [\"entity.name.function.asp\"],\n            regex: \"(?:(\\\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b)(?=\\\\(\\\\)?))\"\n        },\n        {\n            token: [\"keyword.operator.asp\"],\n            regex: \"\\\\-|\\\\+|\\\\*\\\\/|\\\\>|\\\\<|\\\\=|\\\\&\"\n        }\n    ],\n    \"state_3\": [\n        {\n            token: [\n                \"meta.odd-tab.tabs\",\n                \"meta.even-tab.tabs\"\n            ],\n            regex: \"(\\\\t)(\\\\t)?\"\n        },\n        {\n            token: \"meta.leading-space\",\n            regex: \"(?=[^\\\\t])\",\n            next: \"start\"\n        },\n        {\n            token: \"meta.leading-space\",\n            regex: \".\",\n            next: \"state_3\"\n        }\n    ],\n    \"state_4\": [\n        {\n            token: [\"meta.odd-tab.spaces\", \"meta.even-tab.spaces\"],\n            regex: \"(  )(  )?\"\n        },\n        {\n            token: \"meta.leading-space\",\n            regex: \"(?=[^ ])\",\n            next: \"start\"\n        },\n        {\n            defaultToken: \"meta.leading-space\"\n        }\n    ],\n    \"comment\": [\n        {\n            token: \"comment.line.apostrophe.asp\",\n            regex: \"$|(?=(?:%>))\",\n            next: \"start\"\n        },\n        {\n            defaultToken: \"comment.line.apostrophe.asp\"\n        }\n    ],\n    \"string\": [\n        {\n            token: \"constant.character.escape.apostrophe.asp\",\n            regex: '\"\"'\n        },\n        {\n            token: \"string.quoted.double.asp\",\n            regex: '\"',\n            next: \"start\"\n        },\n        {\n            defaultToken: \"string.quoted.double.asp\"\n        }\n    ]\n};\n\n};\n\noop.inherits(VBScriptHighlightRules, TextHighlightRules);\n\nexports.VBScriptHighlightRules = VBScriptHighlightRules;\n});\n\ndefine(\"ace/mode/vbscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vbscript_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VBScriptHighlightRules = require(\"./vbscript_highlight_rules\").VBScriptHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = VBScriptHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = [\"'\", \"REM\"];\n    \n    this.$id = \"ace/mode/vbscript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-velocity.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/velocity_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar VelocityHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var builtinConstants = lang.arrayToMap(\n        ('true|false|null').split('|')\n    );\n\n    var builtinFunctions = lang.arrayToMap(\n        (\"_DateTool|_DisplayTool|_EscapeTool|_FieldTool|_MathTool|_NumberTool|_SerializerTool|_SortTool|_StringTool|_XPathTool\").split('|')\n    );\n\n    var builtinVariables = lang.arrayToMap(\n        ('$contentRoot|$foreach').split('|')\n    );\n\n    var keywords = lang.arrayToMap(\n        (\"#set|#macro|#include|#parse|\" +\n        \"#if|#elseif|#else|#foreach|\" +\n        \"#break|#end|#stop\"\n        ).split('|')\n    );\n\n    this.$rules.start.push(\n        {\n            token : \"comment\",\n            regex : \"##.*$\"\n        },{\n            token : \"comment.block\", // multi line comment\n            regex : \"#\\\\*\",\n            next : \"vm_comment\"\n        }, {\n            token : \"string.regexp\",\n            regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n        }, {\n            token : function(value) {\n                if (keywords.hasOwnProperty(value))\n                    return \"keyword\";\n                else if (builtinConstants.hasOwnProperty(value))\n                    return \"constant.language\";\n                else if (builtinVariables.hasOwnProperty(value))\n                    return \"variable.language\";\n                else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n                    return \"support.function\";\n                else if (value == \"debugger\")\n                    return \"invalid.deprecated\";\n                else\n                    if(value.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*)$/))\n                        return \"variable\";\n                    return \"identifier\";\n            },\n            regex : \"[a-zA-Z$#][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    );\n\n    this.$rules[\"vm_comment\"] = [\n        {\n            token : \"comment\", // closing comment\n            regex : \"\\\\*#|-->\",\n            next : \"start\"\n        }, {\n            defaultToken: \"comment\"\n        }\n    ];\n\n    this.$rules[\"vm_start\"] = [\n        {\n            token: \"variable\",\n            regex: \"}\",\n            next: \"pop\"\n        }, {\n            token : \"string.regexp\",\n            regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n        }, {\n            token : function(value) {\n                if (keywords.hasOwnProperty(value))\n                    return \"keyword\";\n                else if (builtinConstants.hasOwnProperty(value))\n                    return \"constant.language\";\n                else if (builtinVariables.hasOwnProperty(value))\n                    return \"variable.language\";\n                else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n                    return \"support.function\";\n                else if (value == \"debugger\")\n                    return \"invalid.deprecated\";\n                else\n                    if(value.match(/^(\\$[a-zA-Z_$][a-zA-Z0-9_]*)$/))\n                        return \"variable\";\n                    return \"identifier\";\n            },\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    ];\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"variable\",\n            regex: \"\\\\${\",\n            push: \"vm_start\"\n        });\n    }\n\n    this.normalizeRules();\n};\n\noop.inherits(VelocityHighlightRules, TextHighlightRules);\n\nexports.VelocityHighlightRules = VelocityHighlightRules;\n});\n\ndefine(\"ace/mode/folding/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"##\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"##\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"##\" && next[indent] == \"##\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"##\" && prev[indent] == \"##\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/velocity_highlight_rules\",\"ace/mode/folding/velocity\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar VelocityHighlightRules = require(\"./velocity_highlight_rules\").VelocityHighlightRules;\nvar FoldMode = require(\"./folding/velocity\").FoldMode;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = VelocityHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.lineCommentStart = \"##\";\n    this.blockComment = {start: \"#*\", end: \"*#\"};\n    this.$id = \"ace/mode/velocity\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-verilog.js",
    "content": "define(\"ace/mode/verilog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar VerilogHighlightRules = function() {\nvar keywords = \"always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|\" +\n    \"deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|\" +\n    \"endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|\" +\n    \"highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|\" +\n    \"macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|\" +\n    \"posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|\" +\n    \"reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|\" +\n    \"strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|\" +\n    \"unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xor\" +\n    \"begin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|\" +\n    \"endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|\" +\n    \"macromodule|module|primitive|repeat|specify|table|task|while\";\n\n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n    var builtinFunctions = (\n        \"count|min|max|avg|sum|rank|now|coalesce|main\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"//.*$\"\n        }, {\n            token : \"comment.start\",\n            regex : \"/\\\\*\",\n            next : [\n                { token : \"comment.end\", regex : \"\\\\*/\", next: \"start\" },\n                { defaultToken : \"comment\" }\n            ]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            next : [\n                { token : \"constant.language.escape\", regex : /\\\\(?:[ntvfa\\\\\"]|[0-7]{1,3}|\\x[a-fA-F\\d]{1,2}|)/, consumeLineEnd : true },\n                { token : \"string.end\", regex : '\"|$', next: \"start\" },\n                { defaultToken : \"string\" }\n            ]\n        }, {\n            token : \"string\",\n            regex : \"'^[']'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(VerilogHighlightRules, TextHighlightRules);\n\nexports.VerilogHighlightRules = VerilogHighlightRules;\n});\n\ndefine(\"ace/mode/verilog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/verilog_highlight_rules\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VerilogHighlightRules = require(\"./verilog_highlight_rules\").VerilogHighlightRules;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = VerilogHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = { '\"': '\"' };\n\n\n    this.$id = \"ace/mode/verilog\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-vhdl.js",
    "content": "define(\"ace/mode/vhdl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar VHDLHighlightRules = function() {\n\n\n    \n    var keywords = \"access|after|ailas|all|architecture|assert|attribute|\"+\n                   \"begin|block|buffer|bus|case|component|configuration|\"+\n                   \"disconnect|downto|else|elsif|end|entity|file|for|function|\"+\n                   \"generate|generic|guarded|if|impure|in|inertial|inout|is|\"+\n                   \"label|linkage|literal|loop|mapnew|next|of|on|open|\"+\n                   \"others|out|port|process|pure|range|record|reject|\"+\n                   \"report|return|select|shared|subtype|then|to|transport|\"+\n                   \"type|unaffected|united|until|wait|when|while|with\";\n    \n    var storageType = \"bit|bit_vector|boolean|character|integer|line|natural|\"+\n                      \"positive|real|register|severity|signal|signed|\"+\n                      \"std_logic|std_logic_vector|string||text|time|unsigned|\"+\n                      \"variable\";\n    \n    var storageModifiers = \"array|constant\";\n    \n    var keywordOperators = \"abs|and|mod|nand|nor|not|rem|rol|ror|sla|sll|sra\"+\n                           \"srl|xnor|xor\";\n    \n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.operator\": keywordOperators,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"storage.modifier\": storageModifiers,\n        \"storage.type\": storageType\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"--.*$\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"keyword\", // pre-compiler directives\n            regex : \"\\\\s*(?:library|package|use)\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"&|\\\\*|\\\\+|\\\\-|\\\\/|<|=|>|\\\\||=>|\\\\*\\\\*|:=|\\\\/=|>=|<=|<>\" \n        }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\'|\\\\:|\\\\,|\\\\;|\\\\.\"\n        },{\n            token : \"paren.lparen\",\n            regex : \"[[(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\])]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n\n       \n    };\n};\n\noop.inherits(VHDLHighlightRules, TextHighlightRules);\n\nexports.VHDLHighlightRules = VHDLHighlightRules;\n});\n\ndefine(\"ace/mode/vhdl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vhdl_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VHDLHighlightRules = require(\"./vhdl_highlight_rules\").VHDLHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = VHDLHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.$id = \"ace/mode/vhdl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-visualforce.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\ndefine(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\ndefine(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\ndefine(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\ndefine(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\ndefine(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\ndefine(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/visualforce_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"../mode/html_highlight_rules\").HtmlHighlightRules;\n\nfunction string(options) {\n    return {\n        token: options.token + \".start\",\n        regex: options.start,\n        push: [{\n            token : \"constant.language.escape\",\n            regex : options.escape\n        }, {\n            token: options.token + \".end\",\n            regex: options.start,\n            next: \"pop\"\n        }, {\n            defaultToken: options.token\n        }]\n    };\n}\nvar VisualforceHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"$Action|$Api|$Component|$ComponentLabel|$CurrentPage|$FieldSet|$Label|$Label|\" +\n            \"$ObjectType|$Organization|$Page|$Permission|$Profile|$Resource|$SControl|\" +\n            \"$Setup|$Site|$System.OriginDateTime|$User|$UserRole|\" +\n            \"Site|UITheme|UIThemeDisplayed\",\n        \"keyword\":\n            \"\",\n        \"storage.type\":\n            \"\",\n        \"constant.language\":\n            \"true|false|null|TRUE|FALSE|NULL\",\n        \"support.function\":\n            \"DATE|DATEVALUE|DATETIMEVALUE|DAY|MONTH|NOW|TODAY|YEAR|BLANKVALUE|ISBLANK|\" +\n            \"NULLVALUE|PRIORVALUE|AND|CASE|IF|ISCHANGED|ISNEW|ISNUMBER|NOT|OR|ABS|\" +\n            \"CEILING|EXP|FLOOR|LN|LOG|MAX|MIN|MOD|ROUND|SQRT|BEGINS|BR|CASESAFEID|\" +\n            \"CONTAINS|FIND|GETSESSIONID|HTMLENCODE|ISPICKVAL|JSENCODE|JSINHTMLENCODE|\" +\n            \"LEFT|LEN|LOWER|LPAD|MID|RIGHT|RPAD|SUBSTITUTE|TEXT|TRIM|UPPER|URLENCODE|VALUE|\" +\n            \"GETRECORDIDS|INCLUDE|LINKTO|REGEX|REQUIRESCRIPT|URLFOR|VLOOKUP|HTMLENCODE|JSENCODE|\" +\n            \"JSINHTMLENCODE|URLENCODE\"\n    }, \"identifier\");\n\n    HtmlHighlightRules.call(this);\n    var hbs = {\n        token : \"keyword.start\",\n        regex : \"{!\",\n        push : \"Visualforce\"\n    };\n    for (var key in this.$rules) {\n        this.$rules[key].unshift(hbs);\n    }\n    this.$rules.Visualforce = [\n        string({\n            start: '\"',\n            escape: /\\\\[btnfr\"'\\\\]/,\n            token: \"string\",\n            multiline: true\n        }),\n        string({\n            start: \"'\",\n            escape: /\\\\[btnfr\"'\\\\]/,\n            token: \"string\",\n            multiline: true\n        }),\n        {\n            token: \"comment.start\",\n            regex : \"\\\\/\\\\*\",\n            push: [\n                {token : \"comment.end\", regex : \"\\\\*\\\\/|(?=})\", next : \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"keyword.end\",\n            regex : \"}\",\n            next : \"pop\"\n        }, {\n            token : keywordMapper,\n            regex : /[a-zA-Z$_\\u00a1-\\uffff][a-zA-Z\\d$_\\u00a1-\\uffff]*\\b/\n        }, {\n            token : \"keyword.operator\",\n            regex : /==|<>|!=|<=|>=|&&|\\|\\||[+\\-*/^()=<>&]/\n        }, {\n            token : \"punctuation.operator\",\n            regex : /[?:,;.]/\n        }, {\n            token : \"paren.lparen\",\n            regex : /[\\[({]/\n        }, {\n            token : \"paren.rparen\",\n            regex : /[\\])}]/\n        }\n    ];\n\n    this.normalizeRules();\n};\n\noop.inherits(VisualforceHighlightRules, HtmlHighlightRules);\n\nexports.VisualforceHighlightRules = VisualforceHighlightRules;\n});\n\ndefine(\"ace/mode/visualforce\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/visualforce_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar VisualforceHighlightRules = require(\"./visualforce_highlight_rules\").VisualforceHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\n\nfunction VisualforceMode() {\n    HtmlMode.call(this);\n\n    this.HighlightRules = VisualforceHighlightRules;\n    this.foldingRules = new HtmlFoldMode();\n    this.$behaviour = new XmlBehaviour();\n}\n\noop.inherits(VisualforceMode, HtmlMode);\n\nVisualforceMode.prototype.emmetConfig = {\n    profile: \"xhtml\"\n};\n\nexports.Mode = VisualforceMode;\n\n});                (function() {\n                    window.require([\"ace/mode/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-wollok.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\ndefine(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\ndefine(\"ace/mode/wollok_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar WollokHighlightRules = function() {\n    var keywords = (\n    \"test|describe|package|inherits|false|import|else|or|class|and|not|native|override|program|self|try|const|var|catch|object|super|throw|if|null|return|true|new|constructor|method|mixin\"\n    );\n\n    var buildinConstants = (\"null|assert|console\");\n\n    var langClasses = (\n        \"Object|Pair|String|Boolean|Number|Integer|Double|Collection|Set|List|Exception|Range\" +\n        \"|StackTraceElement\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"self\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"===|&&|\\\\*=|\\\\.\\\\.|\\\\*\\\\*|#|!|%|\\\\*|\\\\?:|\\\\+|\\\\/|,|\\\\+=|\\\\-|\\\\.\\\\.<|!==|:|\\\\/=|\\\\?\\\\.|\\\\+\\\\+|>|=|<|>=|=>|==|\\\\]|\\\\[|\\\\-=|\\\\->|\\\\||\\\\-\\\\-|<>|!=|%=|\\\\|\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(WollokHighlightRules, TextHighlightRules);\n\nexports.WollokHighlightRules = WollokHighlightRules;\n});\n\ndefine(\"ace/mode/wollok\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/wollok_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar WollokHighlightRules = require(\"./wollok_highlight_rules\").WollokHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = WollokHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/wollok\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-xml.js",
    "content": "define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-xquery.js",
    "content": "define(\"ace/mode/xquery/xquery_lexer\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var XQueryTokenizer = exports.XQueryTokenizer = function XQueryTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 56:                        // '<?'\n      shift(56);                    // '<?'\n      break;\n    case 40:                        // '(#'\n      shift(40);                    // '(#'\n      break;\n    case 42:                        // '(:~'\n      shift(42);                    // '(:~'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    case 274:                       // '}'\n      shift(274);                   // '}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 39:                        // '('\n      shift(39);                    // '('\n      break;\n    case 43:                        // ')'\n      shift(43);                    // ')'\n      break;\n    case 49:                        // '/'\n      shift(49);                    // '/'\n      break;\n    case 62:                        // '['\n      shift(62);                    // '['\n      break;\n    case 63:                        // ']'\n      shift(63);                    // ']'\n      break;\n    case 46:                        // ','\n      shift(46);                    // ','\n      break;\n    case 48:                        // '.'\n      shift(48);                    // '.'\n      break;\n    case 53:                        // ';'\n      shift(53);                    // ';'\n      break;\n    case 51:                        // ':'\n      shift(51);                    // ':'\n      break;\n    case 34:                        // '!'\n      shift(34);                    // '!'\n      break;\n    case 273:                       // '|'\n      shift(273);                   // '|'\n      break;\n    case 2:                         // Annotation\n      shift(2);                     // Annotation\n      break;\n    case 1:                         // ModuleDecl\n      shift(1);                     // ModuleDecl\n      break;\n    case 3:                         // OptionDecl\n      shift(3);                     // OptionDecl\n      break;\n    case 12:                        // AttrTest\n      shift(12);                    // AttrTest\n      break;\n    case 13:                        // Wildcard\n      shift(13);                    // Wildcard\n      break;\n    case 15:                        // IntegerLiteral\n      shift(15);                    // IntegerLiteral\n      break;\n    case 16:                        // DecimalLiteral\n      shift(16);                    // DecimalLiteral\n      break;\n    case 17:                        // DoubleLiteral\n      shift(17);                    // DoubleLiteral\n      break;\n    case 5:                         // Variable\n      shift(5);                     // Variable\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 4:                         // Operator\n      shift(4);                     // Operator\n      break;\n    case 33:                        // EOF\n      shift(33);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 58:                        // '>'\n      shift(58);                    // '>'\n      break;\n    case 50:                        // '/>'\n      shift(50);                    // '/>'\n      break;\n    case 27:                        // QName\n      shift(27);                    // QName\n      break;\n    case 57:                        // '='\n      shift(57);                    // '='\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 23:                        // ElementContentChar\n      shift(23);                    // ElementContentChar\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 7:                         // EndTag\n      shift(7);                     // EndTag\n      break;\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 25:                        // AposAttrContentChar\n      shift(25);                    // AposAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 24:                        // QuotAttrContentChar\n      shift(24);                    // QuotAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 11:                        // CDataSectionContents\n      shift(11);                    // CDataSectionContents\n      break;\n    case 64:                        // ']]>'\n      shift(64);                    // ']]>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 9:                         // DirCommentContents\n      shift(9);                     // DirCommentContents\n      break;\n    case 47:                        // '-->'\n      shift(47);                    // '-->'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 10:                        // DirPIContents\n      shift(10);                    // DirPIContents\n      break;\n    case 59:                        // '?'\n      shift(59);                    // '?'\n      break;\n    case 60:                        // '?>'\n      shift(60);                    // '?>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 8:                         // PragmaContents\n      shift(8);                     // PragmaContents\n      break;\n    case 36:                        // '#'\n      shift(36);                    // '#'\n      break;\n    case 37:                        // '#)'\n      shift(37);                    // '#)'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 30:                        // CommentContents\n      shift(30);                    // CommentContents\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(5);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 31:                        // DocTag\n      shift(31);                    // DocTag\n      break;\n    case 32:                        // DocCommentContents\n      shift(32);                    // DocCommentContents\n      break;\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(6);                  // PredefinedEntityRef | EscapeQuot | QuotChar | CharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 21:                        // QuotChar\n      shift(21);                    // QuotChar\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 22:                        // AposChar\n      shift(22);                    // AposChar\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 14:                        // EQName^Token\n      shift(14);                    // EQName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 26:                        // NCName^Token\n      shift(26);                    // NCName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 28)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryTokenizer.MAP1[(c0 & 15) + XQueryTokenizer.MAP1[(c1 & 31) + XQueryTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryTokenizer.TRANSITION[(i0 & 15) + XQueryTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 276; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2062 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryTokenizer.EXPECTED[(i0 & 3) + XQueryTokenizer.EXPECTED[(i1 & 3) + XQueryTokenizer.EXPECTED[(i2 & 3) + XQueryTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryTokenizer.MAP0 =\n[ 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35\n];\n\nXQueryTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n];\n\nXQueryTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 35, 31, 35, 31, 31, 35\n];\n\nXQueryTokenizer.INITIAL =\n[ 1, 2, 36867, 45060, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nXQueryTokenizer.TRANSITION =\n[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008, 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233, 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008, 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987, 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370, 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888, 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855, 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888, 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518, 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694, 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701, 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401, 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505, 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654, 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964, 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279, 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711, 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831, 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935, 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222, 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946, 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008, 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233, 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067, 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386, 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401, 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193, 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552, 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851, 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224, 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659, 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401, 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211, 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185, 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401, 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358, 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418, 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540, 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211, 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659, 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419, 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982, 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462, 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164, 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211, 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211, 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607, 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086, 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057, 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613, 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344, 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211, 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799, 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930, 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085, 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729, 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189, 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568, 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121, 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619, 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211, 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086, 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836, 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211, 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986, 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500, 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356, 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989, 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211, 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890, 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211, 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601, 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260, 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261, 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488, 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248, 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490, 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274, 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782, 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888, 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261, 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888, 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888, 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628, 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401, 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895, 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738, 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678, 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888, 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217, 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473, 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783, 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837, 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888, 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523, 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938, 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574, 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016, 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835, 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181, 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888, 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334, 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437, 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497, 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401, 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401, 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851, 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000, 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888, 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401, 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058, 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144, 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856, 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889, 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367, 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572, 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764, 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942, 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211, 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590, 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123, 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963, 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097, 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442, 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775, 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284, 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679, 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211, 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659, 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853, 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113, 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413, 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164, 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211, 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890, 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211, 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123, 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086, 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105, 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782, 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154, 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666, 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211, 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739, 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778, 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447, 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008, 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059, 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121, 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211, 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836, 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211, 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888, 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893, 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064, 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890, 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888, 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211, 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100, 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888, 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888, 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346, 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n];\n\nXQueryTokenizer.EXPECTED =\n[ 290, 300, 304, 353, 296, 309, 305, 319, 315, 324, 328, 352, 354, 334, 338, 330, 320, 345, 349, 293, 358, 362, 341, 366, 312, 370, 374, 378, 382, 386, 390, 394, 398, 737, 402, 634, 439, 604, 634, 634, 634, 634, 408, 634, 634, 634, 404, 634, 634, 634, 457, 634, 634, 963, 634, 634, 413, 634, 634, 634, 634, 634, 634, 634, 663, 418, 422, 903, 902, 426, 431, 548, 634, 437, 521, 919, 443, 615, 409, 449, 455, 624, 731, 751, 634, 461, 465, 672, 470, 469, 474, 481, 485, 477, 489, 493, 629, 542, 497, 505, 603, 602, 991, 648, 510, 804, 634, 515, 958, 526, 525, 530, 768, 634, 546, 552, 711, 710, 593, 558, 562, 618, 566, 570, 574, 578, 582, 586, 590, 608, 612, 660, 822, 821, 634, 622, 596, 444, 628, 533, 724, 633, 640, 653, 647, 652, 536, 1008, 451, 450, 445, 657, 670, 676, 685, 689, 693, 697, 701, 704, 707, 715, 719, 798, 815, 634, 723, 762, 996, 634, 728, 969, 730, 735, 908, 634, 741, 679, 889, 511, 747, 634, 750, 755, 499, 666, 499, 501, 759, 772, 776, 780, 634, 787, 784, 797, 802, 809, 808, 427, 814, 1006, 517, 634, 519, 853, 634, 813, 850, 793, 634, 819, 826, 833, 832, 837, 843, 847, 857, 861, 863, 867, 871, 875, 879, 883, 643, 887, 539, 980, 979, 634, 893, 944, 634, 900, 896, 634, 907, 933, 506, 912, 917, 828, 433, 636, 635, 554, 961, 923, 930, 927, 937, 941, 634, 634, 634, 974, 948, 952, 985, 913, 968, 967, 743, 634, 973, 839, 634, 978, 599, 634, 984, 989, 765, 444, 995, 1000, 634, 1003, 790, 955, 1012, 681, 634, 634, 634, 634, 634, 414, 1016, 1020, 1024, 1085, 1027, 1090, 1090, 1046, 1080, 1137, 1108, 1215, 1049, 1032, 1039, 1085, 1085, 1085, 1085, 1058, 1062, 1068, 1085, 1086, 1090, 1090, 1091, 1072, 1064, 1107, 1090, 1090, 1090, 1118, 1123, 1138, 1078, 1074, 1084, 1085, 1085, 1085, 1087, 1090, 1062, 1052, 1060, 1114, 1062, 1104, 1085, 1085, 1090, 1090, 1028, 1122, 1063, 1128, 1139, 1127, 1158, 1085, 1085, 1151, 1090, 1090, 1090, 1095, 1090, 1132, 1073, 1136, 1143, 1061, 1150, 1085, 1155, 1098, 1101, 1146, 1162, 1169, 1101, 1185, 1151, 1090, 1110, 1173, 1054, 1087, 1109, 1177, 1165, 1089, 1204, 1184, 1107, 1189, 1193, 1088, 1197, 1180, 1201, 1208, 1042, 1212, 1219, 1223, 1227, 1231, 1235, 1245, 1777, 1527, 1686, 1686, 1238, 1686, 1254, 1686, 1686, 1686, 1294, 1669, 1686, 1686, 1686, 1322, 1625, 1534, 1268, 1624, 1275, 1281, 1443, 1292, 1300, 1686, 1686, 1686, 1350, 1826, 1306, 1686, 1686, 1240, 2032, 1317, 1321, 1686, 1686, 1253, 1686, 1326, 1686, 1686, 1686, 1418, 1709, 1446, 1686, 1686, 1686, 1492, 1686, 1295, 1447, 1686, 1686, 1258, 1686, 1736, 1686, 1686, 1520, 1355, 1686, 1288, 1348, 1361, 1686, 1359, 1686, 1364, 1498, 1368, 1302, 1362, 1381, 1389, 1395, 1486, 1686, 1371, 1377, 1370, 1686, 1375, 1382, 1384, 1402, 1408, 1385, 1383, 1619, 1413, 1423, 1428, 1433, 1686, 1686, 1270, 1686, 1338, 1686, 1440, 1686, 1686, 1686, 1499, 1465, 1686, 1686, 1686, 1639, 1473, 1884, 1686, 1686, 1293, 1864, 1686, 1686, 1296, 1321, 1483, 1686, 1686, 1686, 1646, 1686, 1748, 1496, 1686, 1418, 1675, 1686, 1418, 1702, 1686, 1418, 1981, 1686, 1429, 1409, 1427, 1504, 1692, 1686, 1686, 1313, 1448, 1651, 1508, 1686, 1686, 1340, 1686, 1903, 1686, 1686, 1435, 1513, 1686, 1283, 1287, 1519, 1686, 1524, 1363, 1568, 1938, 1539, 1566, 1579, 1479, 1533, 1538, 1553, 1544, 1552, 1557, 1563, 1574, 1557, 1583, 1589, 1590, 1759, 1594, 1603, 1607, 1611, 1686, 1436, 1514, 1686, 1434, 1656, 1686, 1434, 1680, 1686, 1453, 1686, 1686, 1686, 1559, 1617, 1686, 1770, 1418, 1623, 1769, 1629, 1686, 1515, 1335, 1686, 1285, 1686, 1671, 1921, 1650, 1686, 1686, 1344, 1308, 1666, 1686, 1686, 1686, 1659, 1685, 1686, 1686, 1686, 1686, 1241, 1686, 1686, 1844, 1691, 1686, 1630, 1977, 1970, 1362, 1686, 1686, 1686, 1693, 1698, 1686, 1686, 1686, 1697, 1686, 1764, 1715, 1686, 1634, 1638, 1686, 1599, 1585, 1686, 1271, 1686, 1269, 1686, 1721, 1686, 1686, 1354, 1686, 1801, 1686, 1799, 1686, 1640, 1686, 1686, 1461, 1686, 1686, 1732, 1686, 1944, 1686, 1740, 1686, 1746, 1415, 1396, 1686, 1598, 1547, 1417, 1597, 1416, 1577, 1546, 1397, 1577, 1547, 1548, 1570, 1398, 1753, 1686, 1652, 1509, 1686, 1686, 1686, 1757, 1686, 1419, 1686, 1763, 1418, 1768, 1781, 1686, 1686, 1686, 1705, 1686, 2048, 1792, 1686, 1686, 1686, 1735, 1686, 1797, 1686, 1686, 1404, 1686, 1639, 1815, 1686, 1686, 1418, 2017, 1820, 1686, 1686, 1803, 1686, 1686, 1686, 1736, 1489, 1686, 1686, 1825, 1338, 1260, 1263, 1686, 1686, 1785, 1686, 1686, 1728, 1686, 1686, 1749, 1497, 1830, 1830, 1262, 1248, 1261, 1329, 1260, 1264, 1329, 1248, 1249, 1259, 1540, 1849, 1842, 1686, 1686, 1835, 1686, 1686, 1816, 1686, 1686, 1831, 1882, 1848, 1686, 1686, 1686, 1774, 2071, 1854, 1686, 1686, 1469, 1884, 1686, 1821, 1859, 1686, 1686, 1350, 1883, 1686, 1686, 1686, 1781, 1391, 1875, 1686, 1686, 1613, 1644, 1686, 1686, 1889, 1686, 1686, 1662, 1884, 1686, 1885, 1890, 1686, 1686, 1686, 1894, 1686, 1686, 1678, 1686, 1907, 1686, 1686, 1529, 1914, 1686, 1838, 1686, 1686, 1881, 1686, 1686, 1872, 1876, 1836, 1919, 1686, 1837, 1692, 1910, 1686, 1925, 1928, 1742, 1686, 1811, 1811, 1930, 1810, 1929, 1935, 1928, 1900, 1942, 1867, 1868, 1931, 1035, 1788, 1948, 1952, 1956, 1960, 1964, 1686, 1976, 1686, 1686, 1686, 2065, 1686, 1992, 2037, 1686, 1686, 1998, 2009, 1972, 2002, 1686, 1686, 1686, 2077, 1300, 2023, 1686, 1686, 1686, 1807, 2031, 1686, 1686, 1686, 1860, 1500, 2032, 1686, 1686, 1686, 2083, 1686, 2036, 1686, 1277, 1276, 2042, 1877, 1686, 1686, 2041, 1686, 1686, 2027, 2037, 2012, 1686, 2012, 1855, 1850, 1686, 2046, 1686, 1686, 2054, 1996, 1686, 1897, 1309, 2059, 2052, 1686, 2058, 1686, 1686, 2081, 1686, 1717, 1477, 1686, 1331, 1686, 1686, 1687, 1686, 1860, 1681, 1686, 1686, 1686, 1966, 1724, 1686, 1686, 1686, 1984, 2015, 1686, 1686, 1686, 1988, 1686, 2063, 1686, 1686, 1686, 2005, 1686, 1727, 1686, 1686, 1711, 1457, 2069, 1686, 1686, 1686, 2019, 2075, 1686, 1686, 1915, 1686, 1686, 1793, 1874, 1686, 1686, 1491, 1362, 1449, 1686, 1686, 1460, 2098, 2087, 2091, 2095, 2184, 2102, 2113, 2780, 2117, 2134, 2142, 2281, 2146, 2146, 2146, 2304, 2296, 2181, 2639, 2591, 2872, 2592, 2873, 2313, 2195, 2200, 2281, 2146, 2273, 2226, 2204, 2152, 2219, 2276, 2167, 2177, 2276, 2235, 2276, 2276, 2230, 2281, 2276, 2296, 2276, 2293, 2276, 2276, 2276, 2276, 2234, 2276, 2311, 2314, 2210, 2199, 2217, 2222, 2276, 2276, 2276, 2240, 2276, 2294, 2276, 2276, 2173, 2276, 2198, 2281, 2281, 2281, 2281, 2282, 2146, 2146, 2146, 2146, 2205, 2146, 2204, 2248, 2276, 2235, 2276, 2297, 2276, 2276, 2276, 2277, 2256, 2281, 2283, 2146, 2146, 2146, 2275, 2276, 2295, 2276, 2276, 2293, 2146, 2304, 2264, 2269, 2221, 2276, 2276, 2276, 2293, 2295, 2276, 2276, 2276, 2295, 2263, 2205, 2268, 2220, 2172, 2276, 2276, 2276, 2296, 2276, 2276, 2296, 2294, 2276, 2276, 2278, 2281, 2281, 2280, 2281, 2281, 2281, 2283, 2206, 2223, 2276, 2276, 2279, 2281, 2281, 2146, 2273, 2276, 2276, 2281, 2281, 2281, 2276, 2292, 2276, 2298, 2225, 2276, 2298, 2169, 2224, 2292, 2298, 2171, 2229, 2281, 2281, 2171, 2236, 2281, 2281, 2281, 2146, 2275, 2225, 2292, 2299, 2276, 2229, 2281, 2146, 2276, 2290, 2297, 2283, 2146, 2146, 2274, 2224, 2227, 2298, 2225, 2297, 2276, 2230, 2170, 2230, 2282, 2146, 2147, 2151, 2156, 2288, 2276, 2230, 2303, 2308, 2236, 2284, 2228, 2318, 2318, 2318, 2326, 2335, 2339, 2343, 2349, 2416, 2693, 2357, 2592, 2109, 2592, 2592, 2162, 2943, 2823, 2646, 2592, 2361, 2592, 2122, 2592, 2592, 2122, 2470, 2592, 2592, 2592, 2109, 2107, 2592, 2592, 2592, 2123, 2592, 2592, 2592, 2125, 2592, 2413, 2592, 2592, 2592, 2127, 2592, 2592, 2414, 2592, 2592, 2592, 2130, 2952, 2592, 2594, 2592, 2592, 2212, 2609, 2252, 2592, 2592, 2592, 2446, 2434, 2592, 2592, 2592, 2212, 2446, 2450, 2456, 2431, 2435, 2592, 2592, 2243, 2478, 2448, 2439, 2946, 2592, 2592, 2592, 2368, 2809, 2813, 2450, 2441, 2212, 2812, 2449, 2440, 2947, 2592, 2592, 2592, 2345, 2451, 2457, 2948, 2592, 2124, 2592, 2592, 2650, 2823, 2449, 2455, 2946, 2592, 2128, 2592, 2592, 2649, 2952, 2592, 2810, 2448, 2461, 2991, 2467, 2592, 2592, 2329, 2817, 2474, 2990, 2466, 2592, 2592, 2373, 2447, 2992, 2469, 2592, 2592, 2592, 2373, 2447, 2477, 2468, 2592, 2592, 2353, 2469, 2592, 2495, 2592, 2592, 2415, 2483, 2592, 2415, 2496, 2592, 2592, 2352, 2592, 2592, 2352, 2352, 2469, 2592, 2592, 2363, 2331, 2494, 2592, 2592, 2592, 2375, 2592, 2375, 2415, 2504, 2592, 2592, 2367, 2372, 2503, 2592, 2592, 2592, 2389, 2418, 2415, 2592, 2592, 2373, 2592, 2592, 2592, 2593, 2732, 2417, 2415, 2592, 2417, 2520, 2592, 2592, 2592, 2390, 2521, 2521, 2592, 2592, 2592, 2401, 2599, 2585, 2526, 2531, 2120, 2592, 2212, 2426, 2450, 2463, 2948, 2592, 2592, 2592, 2213, 2389, 2527, 2532, 2121, 2542, 2551, 2105, 2592, 2213, 2592, 2592, 2592, 2558, 2538, 2544, 2553, 2557, 2537, 2543, 2552, 2421, 2572, 2576, 2546, 2543, 2547, 2592, 2592, 2373, 2615, 2575, 2545, 2105, 2592, 2244, 2479, 2592, 2129, 2592, 2592, 2628, 2690, 2469, 2562, 2566, 2592, 2592, 2592, 2415, 2928, 2934, 2401, 2570, 2574, 2564, 2572, 2585, 2590, 2592, 2592, 2585, 2965, 2592, 2592, 2592, 2445, 2251, 2592, 2592, 2592, 2474, 2592, 2609, 2892, 2592, 2362, 2592, 2592, 2138, 2851, 2159, 2592, 2592, 2592, 2509, 2888, 2892, 2592, 2592, 2592, 2490, 2418, 2891, 2592, 2592, 2376, 2592, 2592, 2374, 2592, 2889, 2388, 2592, 2373, 2373, 2890, 2592, 2592, 2387, 2592, 2887, 2505, 2892, 2592, 2373, 2610, 2388, 2592, 2592, 2376, 2373, 2592, 2887, 2891, 2592, 2374, 2592, 2592, 2608, 2159, 2614, 2620, 2592, 2592, 2394, 2594, 2887, 2399, 2592, 2887, 2397, 2508, 2374, 2507, 2592, 2375, 2592, 2592, 2592, 2595, 2508, 2506, 2592, 2506, 2505, 2505, 2592, 2507, 2637, 2505, 2592, 2592, 2401, 2661, 2592, 2643, 2592, 2592, 2417, 2592, 2655, 2592, 2592, 2592, 2510, 2414, 2656, 2592, 2592, 2592, 2516, 2592, 2593, 2660, 2665, 2880, 2592, 2592, 2592, 2522, 2767, 2666, 2881, 2592, 2592, 2420, 2571, 2696, 2592, 2592, 2592, 2580, 2572, 2686, 2632, 2698, 2592, 2383, 2514, 2592, 2163, 2932, 2465, 2685, 2631, 2697, 2592, 2388, 2592, 2592, 2212, 2604, 2671, 2632, 2678, 2592, 2401, 2405, 2409, 2592, 2592, 2592, 2679, 2592, 2592, 2592, 2592, 2108, 2677, 2591, 2592, 2592, 2592, 2419, 2592, 2683, 2187, 2191, 2469, 2671, 2189, 2467, 2592, 2401, 2629, 2633, 2702, 2468, 2592, 2592, 2421, 2536, 2703, 2469, 2592, 2592, 2422, 2573, 2593, 2672, 2467, 2592, 2402, 2406, 2592, 2402, 2979, 2592, 2592, 2626, 2673, 2467, 2592, 2446, 2259, 2947, 2592, 2377, 2709, 2592, 2592, 2522, 2862, 2713, 2468, 2592, 2592, 2581, 2572, 2562, 2374, 2374, 2592, 2376, 2721, 2724, 2592, 2592, 2624, 2373, 2731, 2592, 2592, 2592, 2626, 2732, 2592, 2592, 2592, 2755, 2656, 2726, 2736, 2741, 2592, 2486, 2593, 2381, 2592, 2727, 2737, 2742, 2715, 2747, 2753, 2592, 2498, 2469, 2873, 2743, 2592, 2592, 2592, 2791, 2759, 2763, 2592, 2592, 2627, 2704, 2592, 2592, 2522, 2789, 2593, 2761, 2753, 2592, 2498, 2863, 2592, 2592, 2767, 2592, 2592, 2592, 2792, 2789, 2592, 2592, 2592, 2803, 2126, 2592, 2592, 2592, 2811, 2122, 2592, 2592, 2592, 2834, 2777, 2592, 2592, 2592, 2848, 2936, 2591, 2489, 2797, 2592, 2592, 2670, 2631, 2490, 2798, 2592, 2592, 2592, 2963, 2807, 2592, 2592, 2592, 2965, 2838, 2592, 2592, 2592, 2975, 2330, 2818, 2829, 2592, 2498, 2939, 2592, 2498, 2592, 2791, 2331, 2819, 2830, 2592, 2592, 2592, 2982, 2834, 2817, 2828, 2106, 2592, 2592, 2592, 2405, 2405, 2817, 2828, 2592, 2592, 2415, 2849, 2842, 2592, 2522, 2773, 2592, 2522, 2868, 2592, 2580, 2600, 2586, 2137, 2850, 2843, 2592, 2592, 2855, 2937, 2844, 2592, 2592, 2592, 2987, 2936, 2591, 2592, 2592, 2684, 2630, 2592, 2856, 2938, 2592, 2592, 2860, 2939, 2592, 2592, 2872, 2592, 2861, 2591, 2592, 2592, 2887, 2616, 2592, 2867, 2592, 2592, 2708, 2592, 2498, 2469, 2498, 2497, 2785, 2773, 2499, 2783, 2770, 2877, 2877, 2877, 2772, 2592, 2592, 2345, 2885, 2592, 2592, 2592, 2715, 2762, 2515, 2896, 2592, 2592, 2715, 2917, 2516, 2897, 2592, 2592, 2592, 2901, 2906, 2911, 2592, 2592, 2956, 2960, 2715, 2902, 2907, 2912, 2593, 2916, 2920, 2820, 2922, 2822, 2592, 2592, 2715, 2927, 2921, 2821, 2106, 2592, 2592, 2974, 2408, 2321, 2821, 2106, 2592, 2592, 2983, 2592, 2593, 2404, 2408, 2592, 2592, 2717, 2749, 2716, 2928, 2322, 2822, 2593, 2926, 2919, 2820, 2934, 2823, 2592, 2592, 2592, 2651, 2824, 2592, 2592, 2592, 2130, 2952, 2592, 2592, 2592, 2592, 2964, 2592, 2592, 2716, 2748, 2592, 2969, 2592, 2592, 2716, 2918, 2368, 2970, 2592, 2592, 2592, 2403, 2407, 2592, 2592, 2787, 2211, 2404, 2409, 2592, 2592, 2802, 2837, 2987, 2592, 2592, 2592, 2809, 2427, 2592, 2793, 2592, 2592, 2809, 2447, 1073741824, 0x80000000, 539754496, 542375936, 402653184, 554434560, 571736064, 545521856, 268451840, 335544320, 268693630, 512, 2048, 256, 1024, 0, 1024, 0, 1073741824, 0x80000000, 0, 0, 0, 8388608, 0, 0, 1073741824, 1073741824, 0, 0x80000000, 537133056, 4194304, 1048576, 268435456, -1073741824, 0, 0, 0, 1048576, 0, 0, 0, 1572864, 0, 0, 0, 4194304, 0, 134217728, 16777216, 0, 0, 32, 64, 98304, 0, 33554432, 8388608, 192, 67108864, 67108864, 67108864, 67108864, 16, 32, 4, 0, 8192, 196608, 196608, 229376, 80, 4096, 524288, 8388608, 0, 0, 32, 128, 256, 24576, 24600, 24576, 24576, 2, 24576, 24576, 24576, 24584, 24592, 24576, 24578, 24576, 24578, 24576, 24576, 16, 512, 2048, 2048, 256, 4096, 32768, 1048576, 4194304, 67108864, 134217728, 268435456, 262144, 134217728, 0, 128, 128, 64, 16384, 16384, 16384, 67108864, 32, 32, 4, 4, 4096, 262144, 134217728, 0, 0, 0, 2, 0, 8192, 131072, 131072, 4096, 4096, 4096, 4096, 24576, 24576, 24576, 8, 8, 24576, 24576, 16384, 16384, 16384, 24576, 24584, 24576, 24576, 24576, 16384, 24576, 536870912, 262144, 0, 0, 32, 2048, 8192, 4, 4096, 4096, 4096, 786432, 8388608, 16777216, 0, 128, 16384, 16384, 16384, 32768, 65536, 2097152, 32, 32, 32, 32, 4, 4, 4, 4, 4, 4096, 67108864, 67108864, 67108864, 24576, 24576, 24576, 24576, 0, 16384, 16384, 16384, 16384, 67108864, 67108864, 8, 67108864, 24576, 8, 8, 8, 24576, 24576, 24576, 24578, 24576, 24576, 24576, 2, 2, 2, 16384, 67108864, 67108864, 67108864, 32, 67108864, 8, 8, 24576, 2048, 0x80000000, 536870912, 262144, 262144, 262144, 67108864, 8, 24576, 16384, 32768, 1048576, 4194304, 25165824, 67108864, 24576, 32770, 2, 4, 112, 512, 98304, 524288, 50, 402653186, 1049090, 1049091, 10, 66, 100925514, 10, 66, 12582914, 0, 0, -1678194207, -1678194207, -1041543218, 0, 32768, 0, 0, 32, 65536, 268435456, 1, 1, 513, 1048577, 0, 12582912, 0, 0, 0, 4, 1792, 0, 0, 0, 7, 29360128, 0, 0, 0, 8, 0, 0, 0, 12, 1, 1, 0, 0, -604102721, -604102721, 4194304, 8388608, 0, 0, 0, 31, 925600, 997981306, 997981306, 997981306, 0, 0, 2048, 8388608, 0, 0, 1, 2, 4, 32, 64, 512, 8192, 0, 0, 0, 245760, 997720064, 0, 0, 0, 32, 0, 0, 0, 3, 12, 16, 32, 8, 112, 3072, 12288, 16384, 32768, 65536, 131072, 7864320, 16777216, 973078528, 0, 0, 65536, 131072, 3670016, 4194304, 16777216, 33554432, 2, 8, 48, 2048, 8192, 16384, 32768, 65536, 131072, 524288, 131072, 524288, 3145728, 4194304, 16777216, 33554432, 65536, 131072, 2097152, 4194304, 16777216, 33554432, 134217728, 268435456, 536870912, 0, 0, 0, 1024, 0, 8, 48, 2048, 8192, 65536, 33554432, 268435456, 536870912, 65536, 268435456, 536870912, 0, 0, 32768, 0, 0, 126, 623104, 65011712, 0, 32, 65536, 536870912, 0, 0, 65536, 524288, 0, 32, 65536, 0, 0, 0, 2048, 0, 0, 0, 15482, 245760, -604102721, 0, 0, 0, 18913, 33062912, 925600, -605028352, 0, 0, 0, 65536, 31, 8096, 131072, 786432, 3145728, 3145728, 12582912, 50331648, 134217728, 268435456, 160, 256, 512, 7168, 131072, 786432, 131072, 786432, 1048576, 2097152, 12582912, 16777216, 268435456, 1073741824, 0x80000000, 12582912, 16777216, 33554432, 268435456, 1073741824, 0x80000000, 3, 12, 16, 160, 256, 7168, 786432, 1048576, 12582912, 16777216, 268435456, 1073741824, 0, 8, 16, 32, 128, 256, 512, 7168, 786432, 1048576, 2097152, 0, 1, 2, 8, 16, 7168, 786432, 1048576, 8388608, 16777216, 16777216, 1073741824, 0, 0, 0, 0, 1, 0, 0, 8, 32, 128, 256, 7168, 8, 32, 0, 3072, 0, 8, 32, 3072, 4096, 524288, 8, 32, 0, 0, 3072, 4096, 0, 2048, 524288, 8388608, 8, 2048, 0, 0, 1, 12, 256, 4096, 32768, 262144, 1048576, 4194304, 67108864, 0, 2048, 0, 2048, 2048, 1073741824, -58805985, -58805985, -58805985, 0, 0, 262144, 0, 0, 32, 4194304, 16777216, 134217728, 4382, 172032, -58982400, 0, 0, 2, 28, 256, 4096, 8192, 8192, 32768, 131072, 262144, 524288, 1, 2, 12, 256, 4096, 0, 0, 4194304, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1, 2, 12, 16, 256, 4096, 1048576, 67108864, 134217728, 268435456, 0, 512, 1048576, 4194304, 201326592, 1879048192, 0, 0, 12, 256, 4096, 134217728, 268435456, 536870912, 12, 256, 268435456, 536870912, 0, 12, 256, 0, 0, 1, 32, 64, 512, 0, 0, 205236961, 205236961, 0, 0, 0, 1, 96, 640, 1, 10976, 229376, 204996608, 0, 640, 2048, 8192, 229376, 1572864, 1572864, 2097152, 201326592, 0, 0, 0, 64, 512, 2048, 229376, 1572864, 201326592, 1572864, 201326592, 0, 0, 1, 4382, 0, 1, 32, 2048, 65536, 131072, 1572864, 201326592, 131072, 1572864, 134217728, 0, 0, 524288, 524288, 0, 0, 0, -68582786, -68582786, -68582786, 0, 0, 2097152, 524288, 0, 524288, 0, 0, 65536, 131072, 1572864, 0, 0, 2, 4, 0, 0, 65011712, -134217728, 0, 0, 0, 0, 2, 4, 120, 512, -268435456, 0, 0, 0, 2, 8, 48, 64, 2048, 8192, 98304, 524288, 2097152, 4194304, 25165824, 33554432, 134217728, 268435456, 0x80000000, 0, 0, 25165824, 33554432, 134217728, 1879048192, 0x80000000, 0, 0, 4, 112, 512, 622592, 65011712, 134217728, -268435456, 16777216, 33554432, 134217728, 1610612736, 0, 0, 0, 64, 98304, 524288, 4194304, 16777216, 33554432, 0, 98304, 524288, 16777216, 33554432, 0, 65536, 524288, 33554432, 536870912, 1073741824, 0, 65536, 524288, 536870912, 1073741824, 0, 0, 65536, 524288, 536870912, 0, 524288, 0, 524288, 524288, 1048576, 2086666240, 0x80000000, 0, -1678194207, 0, 0, 0, 8, 32, 2048, 524288, 8388608, 0, 0, 33062912, 436207616, 0x80000000, 0, 0, 32, 64, 2432, 16384, 32768, 32768, 524288, 3145728, 4194304, 25165824, 25165824, 167772160, 268435456, 0x80000000, 0, 32, 64, 384, 2048, 16384, 32768, 1048576, 2097152, 4194304, 25165824, 32, 64, 128, 256, 2048, 16384, 2048, 16384, 1048576, 4194304, 16777216, 33554432, 134217728, 536870912, 1073741824, 0, 0, 2048, 16384, 4194304, 16777216, 33554432, 134217728, 805306368, 0, 0, 16777216, 134217728, 268435456, 0x80000000, 0, 622592, 622592, 622592, 8807, 8807, 434791, 0, 0, 16777216, 0, 0, 0, 7, 608, 8192, 0, 0, 0, 3, 4, 96, 512, 32, 64, 8192, 0, 0, 16777216, 134217728, 0, 0, 2, 4, 8192, 16384, 65536, 2097152, 33554432, 268435456\n];\n\nXQueryTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"QuotChar\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar XQueryTokenizer = _dereq_('./XQueryTokenizer').XQueryTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict'.split('|');\n\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotChar', token: 'string' }\n    ]\n};\n    \nexports.XQueryLexer = function(){ return new Lexer(XQueryTokenizer, Rules); };\n},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}]},{},[\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\"]);\n\n});\n\ndefine(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\ndefine(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\n  var oop = require(\"../../lib/oop\");\n  var Behaviour = require('../behaviour').Behaviour;\n  var CstyleBehaviour = require('./cstyle').CstyleBehaviour;\n  var XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\n  var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nfunction hasType(token, type) {\n    var hasType = true;\n    var typeList = token.type.split('.');\n    var needleList = type.split('.');\n    needleList.forEach(function(needle){\n        if (typeList.indexOf(needle) == -1) {\n            hasType = false;\n            return false;\n        }\n    });\n    return hasType;\n}\n \n  var XQueryBehaviour = function () {\n      \n      this.inherit(CstyleBehaviour, [\"braces\", \"parens\", \"string_dquotes\"]); // Get string behaviour\n      this.inherit(XmlBehaviour); // Get xml behaviour\n      \n      this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken();\n            var atCursor = false;\n            var state = JSON.parse(state).pop();\n            if ((token && token.value === '>') || state !== \"StartTag\") return;\n            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){\n                do {\n                    token = iterator.stepBackward();\n                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));\n            } else {\n                atCursor = true;\n            }\n            var previous = iterator.stepBackward();\n            if (!token || !hasType(token, 'meta.tag') || (previous !== null && previous.value.match('/'))) {\n                return;\n            }\n            var tag = token.value.substring(1);\n            if (atCursor){\n                var tag = tag.substring(0, position.column - token.start);\n            }\n\n            return {\n               text: '>' + '</' + tag + '>',\n               selection: [1, 1]\n            };\n        }\n    });\n\n  };\n  oop.inherits(XQueryBehaviour, Behaviour);\n\n  exports.XQueryBehaviour = XQueryBehaviour;\n});\n\ndefine(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/xquery\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/xquery_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XQueryLexer = require(\"./xquery/xquery_lexer\").XQueryLexer;\nvar Range = require(\"../range\").Range;\nvar XQueryBehaviour = require(\"./behaviour/xquery\").XQueryBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Anchor = require(\"../anchor\").Anchor;\n\nvar Mode = function() {\n    this.$tokenizer   = new XQueryLexer();\n    this.$behaviour   = new XQueryBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n    this.$highlightRules = new TextHighlightRules();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.completer = {\n        getCompletions: function(editor, session, pos, prefix, callback) {\n            if (!session.$worker)\n                return callback();\n            session.$worker.emit(\"complete\", { data: { pos: pos, prefix: prefix } });\n            session.$worker.on(\"complete\", function(e){\n                callback(null, e.data);\n            });\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var match = line.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);\n        if (match)\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return (/^\\s*[\\}\\)]/).test(input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*[\\}\\)])/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(:(.*):\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(:\" + line + \":)\");\n        }\n    };\n    \n    this.createWorker = function(session) {\n        \n      var worker = new WorkerClient([\"ace\"], \"ace/mode/xquery_worker\", \"XQueryWorker\");\n        var that = this;\n\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"ok\", function(e) {\n          session.clearAnnotations();\n        });\n        \n        worker.on(\"markers\", function(e) {\n          session.clearAnnotations();\n          that.addMarkers(e.data, session);\n        });\n \n        worker.on(\"highlight\", function(tokens) {\n          that.$tokenizer.tokens = tokens.data.tokens;\n          that.$tokenizer.lines  = session.getDocument().getAllLines();\n          \n          var rows = Object.keys(that.$tokenizer.tokens);\n          for(var i=0; i < rows.length; i++) {\n            var row = parseInt(rows[i]);\n            delete session.bgTokenizer.lines[row];\n            delete session.bgTokenizer.states[row];\n            session.bgTokenizer.fireUpdateEvent(row, row);\n          }\n        });\n        \n        return worker;\n    };\n\n    this.removeMarkers = function(session) {\n        var markers = session.getMarkers(false);\n        for (var id in markers) {\n            if (markers[id].clazz.indexOf('language_highlight_') === 0) {\n                session.removeMarker(id);\n            }\n        }\n        for (var i = 0; i < session.markerAnchors.length; i++) {\n            session.markerAnchors[i].detach();\n        }\n        session.markerAnchors = [];\n    };\n\n    this.addMarkers = function(annos, mySession) {\n        var _self = this;\n        \n        if (!mySession.markerAnchors) mySession.markerAnchors = [];\n        this.removeMarkers(mySession);\n        mySession.languageAnnos = [];\n        annos.forEach(function(anno) {\n            var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0);\n            mySession.markerAnchors.push(anchor);\n            var markerId;\n            var colDiff = anno.pos.ec - anno.pos.sc;\n            var rowDiff = anno.pos.el - anno.pos.sl;\n            var gutterAnno = {\n                guttertext: anno.message,\n                type: anno.level || \"warning\",\n                text: anno.message\n            };\n\n            function updateFloat(single) {\n                if (markerId)\n                    mySession.removeMarker(markerId);\n                gutterAnno.row = anchor.row;\n                if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) {\n                    var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec);\n                    markerId = mySession.addMarker(range, \"language_highlight_\" + (anno.type ? anno.type : \"default\"));\n                }\n                if (single) mySession.setAnnotations(mySession.languageAnnos);\n            }\n            updateFloat();\n            anchor.on(\"change\", function() {\n                updateFloat(true);\n            });\n            if (anno.message) mySession.languageAnnos.push(gutterAnno);\n        });\n        mySession.setAnnotations(mySession.languageAnnos);\n    };    \n        \n    this.$id = \"ace/mode/xquery\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    window.require([\"ace/mode/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/mode-yaml.js",
    "content": "define(\"ace/mode/yaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar YamlHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"list.markup\",\n                regex : /^(?:-{3}|\\.{3})\\s*(?=#|$)/\n            },  {\n                token : \"list.markup\",\n                regex : /^\\s*[\\-?](?:$|\\s)/\n            }, {\n                token: \"constant\",\n                regex: \"!![\\\\w//]+\"\n            }, {\n                token: \"constant.language\",\n                regex: \"[&\\\\*][a-zA-Z0-9-_]+\"\n            }, {\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /^(\\s*\\w.*?)(:(?=\\s|$))/\n            },{\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /(\\w+?)(\\s*:(?=\\s|$))/\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<<\\\\w*:\\\\w*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"-\\\\s*(?=[{])\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : /[|>][-+\\d\\s]*$/,\n                onMatch: function(val, state, stack, line) {\n                    var indent = /^\\s*/.exec(line)[0];\n                    if (stack.length < 1) {\n                        stack.push(this.next);\n                    } else {\n                        stack[0] = \"mlString\";\n                    }\n\n                    if (stack.length < 2) {\n                        stack.push(indent.length);\n                    }\n                    else {\n                        stack[1] = indent.length;\n                    }\n                    return this.token;\n                },\n                next : \"mlString\"\n            }, {\n                token : \"string\", // single quoted string\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)(?=[^\\d-\\w]|$)/\n            }, {\n                token : \"constant.numeric\", // other number\n                regex : /[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"\\\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : /[^\\s,:\\[\\]\\{\\}]+/\n            }\n        ],\n        \"mlString\" : [\n            {\n                token : \"indent\",\n                regex : /^\\s*$/\n            }, {\n                token : \"indent\",\n                regex : /^\\s*/,\n                onMatch: function(val, state, stack) {\n                    var curIndent = stack[1];\n\n                    if (curIndent >= val.length) {\n                        this.next = \"start\";\n                        stack.splice(0);\n                    }\n                    else {\n                        this.next = \"mlString\";\n                    }\n                    return this.token;\n                },\n                next : \"mlString\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]};\n    this.normalizeRules();\n\n};\n\noop.inherits(YamlHighlightRules, TextHighlightRules);\n\nexports.YamlHighlightRules = YamlHighlightRules;\n});\n\ndefine(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\ndefine(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\ndefine(\"ace/mode/yaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/yaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar YamlHighlightRules = require(\"./yaml_highlight_rules\").YamlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = YamlHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = [\"#\"];\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.$id = \"ace/mode/yaml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    window.require([\"ace/mode/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/abap.js",
    "content": "define(\"ace/snippets/abap\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"abap\";\n\n});                (function() {\n                    window.require([\"ace/snippets/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/abc.js",
    "content": "define(\"ace/snippets/abc\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"\\n\\\nsnippet zupfnoter.print\\n\\\n\t%%%%hn.print {\\\"startpos\\\": ${1:pos_y}, \\\"t\\\":\\\"${2:title}\\\", \\\"v\\\":[${3:voices}], \\\"s\\\":[[${4:syncvoices}1,2]], \\\"f\\\":[${5:flowlines}],  \\\"sf\\\":[${6:subflowlines}], \\\"j\\\":[${7:jumplines}]}\\n\\\n\\n\\\nsnippet zupfnoter.note\\n\\\n\t%%%%hn.note {\\\"pos\\\": [${1:pos_x},${2:pos_y}], \\\"text\\\": \\\"${3:text}\\\", \\\"style\\\": \\\"${4:style}\\\"}\\n\\\n\\n\\\nsnippet zupfnoter.annotation\\n\\\n\t%%%%hn.annotation {\\\"id\\\": \\\"${1:id}\\\", \\\"pos\\\": [${2:pos}], \\\"text\\\": \\\"${3:text}\\\"}\\n\\\n\\n\\\nsnippet zupfnoter.lyrics\\n\\\n\t%%%%hn.lyrics {\\\"pos\\\": [${1:x_pos},${2:y_pos}]}\\n\\\n\\n\\\nsnippet zupfnoter.legend\\n\\\n\t%%%%hn.legend {\\\"pos\\\": [${1:x_pos},${2:y_pos}]}\\n\\\n\\n\\\n\\n\\\n\\n\\\nsnippet zupfnoter.target\\n\\\n\t\\\"^:${1:target}\\\"\\n\\\n\\n\\\nsnippet zupfnoter.goto\\n\\\n\t\\\"^@${1:target}@${2:distance}\\\"\\n\\\n\\n\\\nsnippet zupfnoter.annotationref\\n\\\n\t\\\"^#${1:target}\\\"\\n\\\n\\n\\\nsnippet zupfnoter.annotation\\n\\\n\t\\\"^!${1:text}@${2:x_offset},${3:y_offset}\\\"\\n\\\n\\n\\\n\\n\\\n\";\nexports.scope = \"abc\";\n\n});                (function() {\n                    window.require([\"ace/snippets/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/actionscript.js",
    "content": "define(\"ace/snippets/actionscript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet main\\n\\\n\tpackage {\\n\\\n\t\timport flash.display.*;\\n\\\n\t\timport flash.Events.*;\\n\\\n\t\\n\\\n\t\tpublic class Main extends Sprite {\\n\\\n\t\t\tpublic function Main (\t) {\\n\\\n\t\t\t\ttrace(\\\"start\\\");\\n\\\n\t\t\t\tstage.scaleMode = StageScaleMode.NO_SCALE;\\n\\\n\t\t\t\tstage.addEventListener(Event.RESIZE, resizeListener);\\n\\\n\t\t\t}\\n\\\n\t\\n\\\n\t\t\tprivate function resizeListener (e:Event):void {\\n\\\n\t\t\t\ttrace(\\\"The application window changed size!\\\");\\n\\\n\t\t\t\ttrace(\\\"New width:  \\\" + stage.stageWidth);\\n\\\n\t\t\t\ttrace(\\\"New height: \\\" + stage.stageHeight);\\n\\\n\t\t\t}\\n\\\n\t\\n\\\n\t\t}\\n\\\n\t\\n\\\n\t}\\n\\\nsnippet class\\n\\\n\t${1:public|internal} class ${2:name} ${3:extends } {\\n\\\n\t\tpublic function $2 (\t) {\\n\\\n\t\t\t(\\\"start\\\");\\n\\\n\t\t}\\n\\\n\t}\\n\\\nsnippet all\\n\\\n\tpackage name {\\n\\\n\\n\\\n\t\t${1:public|internal|final} class ${2:name} ${3:extends } {\\n\\\n\t\t\tprivate|public| static const FOO = \\\"abc\\\";\\n\\\n\t\t\tprivate|public| static var BAR = \\\"abc\\\";\\n\\\n\\n\\\n\t\t\t// class initializer - no JIT !! one time setup\\n\\\n\t\t\tif Cababilities.os == \\\"Linux|MacOS\\\" {\\n\\\n\t\t\t\tFOO = \\\"other\\\";\\n\\\n\t\t\t}\\n\\\n\\n\\\n\t\t\t// constructor:\\n\\\n\t\t\tpublic function $2 (\t){\\n\\\n\t\t\t\tsuper2();\\n\\\n\t\t\t\ttrace(\\\"start\\\");\\n\\\n\t\t\t}\\n\\\n\t\t\tpublic function name (a, b...){\\n\\\n\t\t\t\tsuper.name(..);\\n\\\n\t\t\t\tlable:break\\n\\\n\t\t\t}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n\\n\\\n\tfunction A(){\\n\\\n\t\t// A can only be accessed within this file\\n\\\n\t}\\n\\\nsnippet switch\\n\\\n\tswitch(${1}){\\n\\\n\t\tcase ${2}:\\n\\\n\t\t\t${3}\\n\\\n\t\tbreak;\\n\\\n\t\tdefault:\\n\\\n\t}\\n\\\nsnippet case\\n\\\n\t\tcase ${1}:\\n\\\n\t\t\t${2}\\n\\\n\t\tbreak;\\n\\\nsnippet package\\n\\\n\tpackage ${1:package}{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet wh\\n\\\n\twhile ${1:cond}{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet do\\n\\\n\tdo {\\n\\\n\t\t${2}\\n\\\n\t} while (${1:cond})\\n\\\nsnippet while\\n\\\n\twhile ${1:cond}{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet for enumerate names\\n\\\n\tfor (${1:var} in ${2:object}){\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet for enumerate values\\n\\\n\tfor each (${1:var} in ${2:object}){\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet get_set\\n\\\n\tfunction get ${1:name} {\\n\\\n\t\treturn ${2}\\n\\\n\t}\\n\\\n\tfunction set $1 (newValue) {\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet interface\\n\\\n\tinterface name {\\n\\\n\t\tfunction method(${1}):${2:returntype};\\n\\\n\t}\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${1}\\n\\\n\t} catch (error:ErrorType) {\\n\\\n\t\t${2}\\n\\\n\t} finally {\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\n# For Loop (same as c.snippet)\\n\\\nsnippet for for (..) {..}\\n\\\n\tfor (${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\\\n\t\t${4:/* code */}\\n\\\n\t}\\n\\\n# Custom For Loop\\n\\\nsnippet forr\\n\\\n\tfor (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {\\n\\\n\t\t${5:/* code */}\\n\\\n\t}\\n\\\n# If Condition\\n\\\nsnippet if\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:/* code */}\\n\\\n\t}\\n\\\nsnippet el\\n\\\n\telse {\\n\\\n\t\t${1}\\n\\\n\t}\\n\\\n# Ternary conditional\\n\\\nsnippet t\\n\\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\n\\\nsnippet fun\\n\\\n\tfunction ${1:function_name}(${2})${3}\\n\\\n\t{\\n\\\n\t\t${4:/* code */}\\n\\\n\t}\\n\\\n# FlxSprite (usefull when using the flixel library)\\n\\\nsnippet FlxSprite\\n\\\n\tpackage\\n\\\n\t{\\n\\\n\t\timport org.flixel.*\\n\\\n\\n\\\n\t\tpublic class ${1:ClassName} extends ${2:FlxSprite}\\n\\\n\t\t{\\n\\\n\t\t\tpublic function $1(${3: X:Number, Y:Number}):void\\n\\\n\t\t\t{\\n\\\n\t\t\t\tsuper(X,Y);\\n\\\n\t\t\t\t${4: //code...}\\n\\\n\t\t\t}\\n\\\n\\n\\\n\t\t\toverride public function update():void\\n\\\n\t\t\t{\\n\\\n\t\t\t\tsuper.update();\\n\\\n\t\t\t\t${5: //code...}\\n\\\n\t\t\t}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n\\n\\\n\";\nexports.scope = \"actionscript\";\n\n});                (function() {\n                    window.require([\"ace/snippets/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/ada.js",
    "content": "define(\"ace/snippets/ada\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ada\";\n\n});                (function() {\n                    window.require([\"ace/snippets/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/apache_conf.js",
    "content": "define(\"ace/snippets/apache_conf\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"apache_conf\";\n\n});                (function() {\n                    window.require([\"ace/snippets/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/apex.js",
    "content": "define(\"ace/snippets/apex\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"apex\";\n\n});                (function() {\n                    window.require([\"ace/snippets/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/applescript.js",
    "content": "define(\"ace/snippets/applescript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"applescript\";\n\n});                (function() {\n                    window.require([\"ace/snippets/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/asciidoc.js",
    "content": "define(\"ace/snippets/asciidoc\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"asciidoc\";\n\n});                (function() {\n                    window.require([\"ace/snippets/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/asl.js",
    "content": "define(\"ace/snippets/asl\",[\"require\",\"exports\",\"module\"], function (require, exports, module) {\n    \"use strict\";\n\n    exports.snippetText =undefined;\n    exports.scope = \"asl\";\n});                (function() {\n                    window.require([\"ace/snippets/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/assembly_x86.js",
    "content": "define(\"ace/snippets/assembly_x86\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"assembly_x86\";\n\n});                (function() {\n                    window.require([\"ace/snippets/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/autohotkey.js",
    "content": "define(\"ace/snippets/autohotkey\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"autohotkey\";\n\n});                (function() {\n                    window.require([\"ace/snippets/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/batchfile.js",
    "content": "define(\"ace/snippets/batchfile\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"batchfile\";\n\n});                (function() {\n                    window.require([\"ace/snippets/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/bro.js",
    "content": "define(\"ace/snippets/bro\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/bro\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/c9search.js",
    "content": "define(\"ace/snippets/c9search\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"c9search\";\n\n});                (function() {\n                    window.require([\"ace/snippets/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/c_cpp.js",
    "content": "define(\"ace/snippets/c_cpp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"## STL Collections\\n\\\n# std::array\\n\\\nsnippet array\\n\\\n\tstd::array<${1:T}, ${2:N}> ${3};${4}\\n\\\n# std::vector\\n\\\nsnippet vector\\n\\\n\tstd::vector<${1:T}> ${2};${3}\\n\\\n# std::deque\\n\\\nsnippet deque\\n\\\n\tstd::deque<${1:T}> ${2};${3}\\n\\\n# std::forward_list\\n\\\nsnippet flist\\n\\\n\tstd::forward_list<${1:T}> ${2};${3}\\n\\\n# std::list\\n\\\nsnippet list\\n\\\n\tstd::list<${1:T}> ${2};${3}\\n\\\n# std::set\\n\\\nsnippet set\\n\\\n\tstd::set<${1:T}> ${2};${3}\\n\\\n# std::map\\n\\\nsnippet map\\n\\\n\tstd::map<${1:Key}, ${2:T}> ${3};${4}\\n\\\n# std::multiset\\n\\\nsnippet mset\\n\\\n\tstd::multiset<${1:T}> ${2};${3}\\n\\\n# std::multimap\\n\\\nsnippet mmap\\n\\\n\tstd::multimap<${1:Key}, ${2:T}> ${3};${4}\\n\\\n# std::unordered_set\\n\\\nsnippet uset\\n\\\n\tstd::unordered_set<${1:T}> ${2};${3}\\n\\\n# std::unordered_map\\n\\\nsnippet umap\\n\\\n\tstd::unordered_map<${1:Key}, ${2:T}> ${3};${4}\\n\\\n# std::unordered_multiset\\n\\\nsnippet umset\\n\\\n\tstd::unordered_multiset<${1:T}> ${2};${3}\\n\\\n# std::unordered_multimap\\n\\\nsnippet ummap\\n\\\n\tstd::unordered_multimap<${1:Key}, ${2:T}> ${3};${4}\\n\\\n# std::stack\\n\\\nsnippet stack\\n\\\n\tstd::stack<${1:T}> ${2};${3}\\n\\\n# std::queue\\n\\\nsnippet queue\\n\\\n\tstd::queue<${1:T}> ${2};${3}\\n\\\n# std::priority_queue\\n\\\nsnippet pqueue\\n\\\n\tstd::priority_queue<${1:T}> ${2};${3}\\n\\\n##\\n\\\n## Access Modifiers\\n\\\n# private\\n\\\nsnippet pri\\n\\\n\tprivate\\n\\\n# protected\\n\\\nsnippet pro\\n\\\n\tprotected\\n\\\n# public\\n\\\nsnippet pub\\n\\\n\tpublic\\n\\\n# friend\\n\\\nsnippet fr\\n\\\n\tfriend\\n\\\n# mutable\\n\\\nsnippet mu\\n\\\n\tmutable\\n\\\n## \\n\\\n## Class\\n\\\n# class\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename('$1', 'name')`} \\n\\\n\t{\\n\\\n\tpublic:\\n\\\n\t\t$1(${2});\\n\\\n\t\t~$1();\\n\\\n\\n\\\n\tprivate:\\n\\\n\t\t${3:/* data */}\\n\\\n\t};\\n\\\n# member function implementation\\n\\\nsnippet mfun\\n\\\n\t${4:void} ${1:`Filename('$1', 'ClassName')`}::${2:memberFunction}(${3}) {\\n\\\n\t\t${5:/* code */}\\n\\\n\t}\\n\\\n# namespace\\n\\\nsnippet ns\\n\\\n\tnamespace ${1:`Filename('', 'my')`} {\\n\\\n\t\t${2}\\n\\\n\t} /* namespace $1 */\\n\\\n##\\n\\\n## Input/Output\\n\\\n# std::cout\\n\\\nsnippet cout\\n\\\n\tstd::cout << ${1} << std::endl;${2}\\n\\\n# std::cin\\n\\\nsnippet cin\\n\\\n\tstd::cin >> ${1};${2}\\n\\\n##\\n\\\n## Iteration\\n\\\n# for i \\n\\\nsnippet fori\\n\\\n\tfor (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\\\n\t\t${4:/* code */}\\n\\\n\t}${5}\\n\\\n\\n\\\n# foreach\\n\\\nsnippet fore\\n\\\n\tfor (${1:auto} ${2:i} : ${3:container}) {\\n\\\n\t\t${4:/* code */}\\n\\\n\t}${5}\\n\\\n# iterator\\n\\\nsnippet iter\\n\\\n\tfor (${1:std::vector}<${2:type}>::${3:const_iterator} ${4:i} = ${5:container}.begin(); $4 != $5.end(); ++$4) {\\n\\\n\t\t${6}\\n\\\n\t}${7}\\n\\\n\\n\\\n# auto iterator\\n\\\nsnippet itera\\n\\\n\tfor (auto ${1:i} = $1.begin(); $1 != $1.end(); ++$1) {\\n\\\n\t\t${2:std::cout << *$1 << std::endl;}\\n\\\n\t}${3}\\n\\\n##\\n\\\n## Lambdas\\n\\\n# lamda (one line)\\n\\\nsnippet ld\\n\\\n\t[${1}](${2}){${3:/* code */}}${4}\\n\\\n# lambda (multi-line)\\n\\\nsnippet lld\\n\\\n\t[${1}](${2}){\\n\\\n\t\t${3:/* code */}\\n\\\n\t}${4}\\n\\\n\";\nexports.scope = \"c_cpp\";\n\n});                (function() {\n                    window.require([\"ace/snippets/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/cirru.js",
    "content": "define(\"ace/snippets/cirru\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"cirru\";\n\n});                (function() {\n                    window.require([\"ace/snippets/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/clojure.js",
    "content": "define(\"ace/snippets/clojure\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet comm\\n\\\n\t(comment\\n\\\n\t  ${1}\\n\\\n\t  )\\n\\\nsnippet condp\\n\\\n\t(condp ${1:pred} ${2:expr}\\n\\\n\t  ${3})\\n\\\nsnippet def\\n\\\n\t(def ${1})\\n\\\nsnippet defm\\n\\\n\t(defmethod ${1:multifn} \\\"${2:doc-string}\\\" ${3:dispatch-val} [${4:args}]\\n\\\n\t  ${5})\\n\\\nsnippet defmm\\n\\\n\t(defmulti ${1:name} \\\"${2:doc-string}\\\" ${3:dispatch-fn})\\n\\\nsnippet defma\\n\\\n\t(defmacro ${1:name} \\\"${2:doc-string}\\\" ${3:dispatch-fn})\\n\\\nsnippet defn\\n\\\n\t(defn ${1:name} \\\"${2:doc-string}\\\" [${3:arg-list}]\\n\\\n\t  ${4})\\n\\\nsnippet defp\\n\\\n\t(defprotocol ${1:name}\\n\\\n\t  ${2})\\n\\\nsnippet defr\\n\\\n\t(defrecord ${1:name} [${2:fields}]\\n\\\n\t  ${3:protocol}\\n\\\n\t  ${4})\\n\\\nsnippet deft\\n\\\n\t(deftest ${1:name}\\n\\\n\t    (is (= ${2:assertion})))\\n\\\n\t  ${3})\\n\\\nsnippet is\\n\\\n\t(is (= ${1} ${2}))\\n\\\nsnippet defty\\n\\\n\t(deftype ${1:Name} [${2:fields}]\\n\\\n\t  ${3:Protocol}\\n\\\n\t  ${4})\\n\\\nsnippet doseq\\n\\\n\t(doseq [${1:elem} ${2:coll}]\\n\\\n\t  ${3})\\n\\\nsnippet fn\\n\\\n\t(fn [${1:arg-list}] ${2})\\n\\\nsnippet if\\n\\\n\t(if ${1:test-expr}\\n\\\n\t  ${2:then-expr}\\n\\\n\t  ${3:else-expr})\\n\\\nsnippet if-let \\n\\\n\t(if-let [${1:result} ${2:test-expr}]\\n\\\n\t\t(${3:then-expr} $1)\\n\\\n\t\t(${4:else-expr}))\\n\\\nsnippet imp\\n\\\n\t(:import [${1:package}])\\n\\\n\t& {:keys [${1:keys}] :or {${2:defaults}}}\\n\\\nsnippet let\\n\\\n\t(let [${1:name} ${2:expr}]\\n\\\n\t\t${3})\\n\\\nsnippet letfn\\n\\\n\t(letfn [(${1:name) [${2:args}]\\n\\\n\t          ${3})])\\n\\\nsnippet map\\n\\\n\t(map ${1:func} ${2:coll})\\n\\\nsnippet mapl\\n\\\n\t(map #(${1:lambda}) ${2:coll})\\n\\\nsnippet met\\n\\\n\t(${1:name} [${2:this} ${3:args}]\\n\\\n\t  ${4})\\n\\\nsnippet ns\\n\\\n\t(ns ${1:name}\\n\\\n\t  ${2})\\n\\\nsnippet dotimes\\n\\\n\t(dotimes [_ 10]\\n\\\n\t  (time\\n\\\n\t    (dotimes [_ ${1:times}]\\n\\\n\t      ${2})))\\n\\\nsnippet pmethod\\n\\\n\t(${1:name} [${2:this} ${3:args}])\\n\\\nsnippet refer\\n\\\n\t(:refer-clojure :exclude [${1}])\\n\\\nsnippet require\\n\\\n\t(:require [${1:namespace} :as [${2}]])\\n\\\nsnippet use\\n\\\n\t(:use [${1:namespace} :only [${2}]])\\n\\\nsnippet print\\n\\\n\t(println ${1})\\n\\\nsnippet reduce\\n\\\n\t(reduce ${1:(fn [p n] ${3})} ${2})\\n\\\nsnippet when\\n\\\n\t(when ${1:test} ${2:body})\\n\\\nsnippet when-let\\n\\\n\t(when-let [${1:result} ${2:test}]\\n\\\n\t\t${3:body})\\n\\\n\";\nexports.scope = \"clojure\";\n\n});                (function() {\n                    window.require([\"ace/snippets/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/cobol.js",
    "content": "define(\"ace/snippets/cobol\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"cobol\";\n\n});                (function() {\n                    window.require([\"ace/snippets/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/coffee.js",
    "content": "define(\"ace/snippets/coffee\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Closure loop\\n\\\nsnippet forindo\\n\\\n\tfor ${1:name} in ${2:array}\\n\\\n\t\tdo ($1) ->\\n\\\n\t\t\t${3:// body}\\n\\\n# Array comprehension\\n\\\nsnippet fora\\n\\\n\tfor ${1:name} in ${2:array}\\n\\\n\t\t${3:// body...}\\n\\\n# Object comprehension\\n\\\nsnippet foro\\n\\\n\tfor ${1:key}, ${2:value} of ${3:object}\\n\\\n\t\t${4:// body...}\\n\\\n# Range comprehension (inclusive)\\n\\\nsnippet forr\\n\\\n\tfor ${1:name} in [${2:start}..${3:finish}]\\n\\\n\t\t${4:// body...}\\n\\\nsnippet forrb\\n\\\n\tfor ${1:name} in [${2:start}..${3:finish}] by ${4:step}\\n\\\n\t\t${5:// body...}\\n\\\n# Range comprehension (exclusive)\\n\\\nsnippet forrex\\n\\\n\tfor ${1:name} in [${2:start}...${3:finish}]\\n\\\n\t\t${4:// body...}\\n\\\nsnippet forrexb\\n\\\n\tfor ${1:name} in [${2:start}...${3:finish}] by ${4:step}\\n\\\n\t\t${5:// body...}\\n\\\n# Function\\n\\\nsnippet fun\\n\\\n\t(${1:args}) ->\\n\\\n\t\t${2:// body...}\\n\\\n# Function (bound)\\n\\\nsnippet bfun\\n\\\n\t(${1:args}) =>\\n\\\n\t\t${2:// body...}\\n\\\n# Class\\n\\\nsnippet cla class ..\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\t${2}\\n\\\nsnippet cla class .. constructor: ..\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\tconstructor: (${2:args}) ->\\n\\\n\t\t\t${3}\\n\\\n\\n\\\n\t\t${4}\\n\\\nsnippet cla class .. extends ..\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\\\n\t\t${3}\\n\\\nsnippet cla class .. extends .. constructor: ..\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\\\n\t\tconstructor: (${3:args}) ->\\n\\\n\t\t\t${4}\\n\\\n\\n\\\n\t\t${5}\\n\\\n# If\\n\\\nsnippet if\\n\\\n\tif ${1:condition}\\n\\\n\t\t${2:// body...}\\n\\\n# If __ Else\\n\\\nsnippet ife\\n\\\n\tif ${1:condition}\\n\\\n\t\t${2:// body...}\\n\\\n\telse\\n\\\n\t\t${3:// body...}\\n\\\n# Else if\\n\\\nsnippet elif\\n\\\n\telse if ${1:condition}\\n\\\n\t\t${2:// body...}\\n\\\n# Ternary If\\n\\\nsnippet ifte\\n\\\n\tif ${1:condition} then ${2:value} else ${3:other}\\n\\\n# Unless\\n\\\nsnippet unl\\n\\\n\t${1:action} unless ${2:condition}\\n\\\n# Switch\\n\\\nsnippet swi\\n\\\n\tswitch ${1:object}\\n\\\n\t\twhen ${2:value}\\n\\\n\t\t\t${3:// body...}\\n\\\n\\n\\\n# Log\\n\\\nsnippet log\\n\\\n\tconsole.log ${1}\\n\\\n# Try __ Catch\\n\\\nsnippet try\\n\\\n\ttry\\n\\\n\t\t${1}\\n\\\n\tcatch ${2:error}\\n\\\n\t\t${3}\\n\\\n# Require\\n\\\nsnippet req\\n\\\n\t${2:$1} = require '${1:sys}'${3}\\n\\\n# Export\\n\\\nsnippet exp\\n\\\n\t${1:root} = exports ? this\\n\\\n\";\nexports.scope = \"coffee\";\n\n});                (function() {\n                    window.require([\"ace/snippets/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/coldfusion.js",
    "content": "define(\"ace/snippets/coldfusion\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"coldfusion\";\n\n});                (function() {\n                    window.require([\"ace/snippets/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/csharp.js",
    "content": "define(\"ace/snippets/csharp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"csharp\";\n\n});                (function() {\n                    window.require([\"ace/snippets/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/csound_document.js",
    "content": "define(\"ace/snippets/csound_document\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# <CsoundSynthesizer>\\n\\\nsnippet synth\\n\\\n\t<CsoundSynthesizer>\\n\\\n\t<CsInstruments>\\n\\\n\t${1}\\n\\\n\t</CsInstruments>\\n\\\n\t<CsScore>\\n\\\n\te\\n\\\n\t</CsScore>\\n\\\n\t</CsoundSynthesizer>\\n\\\n\";\nexports.scope = \"csound_document\";\n\n});                (function() {\n                    window.require([\"ace/snippets/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/csound_orchestra.js",
    "content": "define(\"ace/snippets/csound_orchestra\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# else\\n\\\nsnippet else\\n\\\n\telse\\n\\\n\t\t${1:/* statements */}\\n\\\n# elseif\\n\\\nsnippet elseif\\n\\\n\telseif ${1:/* condition */} then\\n\\\n\t\t${2:/* statements */}\\n\\\n# if\\n\\\nsnippet if\\n\\\n\tif ${1:/* condition */} then\\n\\\n\t\t${2:/* statements */}\\n\\\n\tendif\\n\\\n# instrument block\\n\\\nsnippet instr\\n\\\n\tinstr ${1:name}\\n\\\n\t\t${2:/* statements */}\\n\\\n\tendin\\n\\\n# i-time while loop\\n\\\nsnippet iwhile\\n\\\n\ti${1:Index} = ${2:0}\\n\\\n\twhile i${1:Index} < ${3:/* count */} do\\n\\\n\t\t${4:/* statements */}\\n\\\n\t\ti${1:Index} += 1\\n\\\n\tod\\n\\\n# k-rate while loop\\n\\\nsnippet kwhile\\n\\\n\tk${1:Index} = ${2:0}\\n\\\n\twhile k${1:Index} < ${3:/* count */} do\\n\\\n\t\t${4:/* statements */}\\n\\\n\t\tk${1:Index} += 1\\n\\\n\tod\\n\\\n# opcode\\n\\\nsnippet opcode\\n\\\n\topcode ${1:name}, ${2:/* output types */ 0}, ${3:/* input types */ 0}\\n\\\n\t\t${4:/* statements */}\\n\\\n\tendop\\n\\\n# until loop\\n\\\nsnippet until\\n\\\n\tuntil ${1:/* condition */} do\\n\\\n\t\t${2:/* statements */}\\n\\\n\tod\\n\\\n# while loop\\n\\\nsnippet while\\n\\\n\twhile ${1:/* condition */} do\\n\\\n\t\t${2:/* statements */}\\n\\\n\tod\\n\\\n\";\nexports.scope = \"csound_orchestra\";\n\n});                (function() {\n                    window.require([\"ace/snippets/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/csound_score.js",
    "content": "define(\"ace/snippets/csound_score\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"csound_score\";\n\n});                (function() {\n                    window.require([\"ace/snippets/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/csp.js",
    "content": "define(\"ace/snippets/csp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/css.js",
    "content": "define(\"ace/snippets/css\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet .\\n\\\n\t${1} {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet !\\n\\\n\t !important\\n\\\nsnippet bdi:m+\\n\\\n\t-moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\n\\\nsnippet bdi:m\\n\\\n\t-moz-border-image: ${1};\\n\\\nsnippet bdrz:m\\n\\\n\t-moz-border-radius: ${1};\\n\\\nsnippet bxsh:m+\\n\\\n\t-moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet bxsh:m\\n\\\n\t-moz-box-shadow: ${1};\\n\\\nsnippet bdi:w+\\n\\\n\t-webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\n\\\nsnippet bdi:w\\n\\\n\t-webkit-border-image: ${1};\\n\\\nsnippet bdrz:w\\n\\\n\t-webkit-border-radius: ${1};\\n\\\nsnippet bxsh:w+\\n\\\n\t-webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet bxsh:w\\n\\\n\t-webkit-box-shadow: ${1};\\n\\\nsnippet @f\\n\\\n\t@font-face {\\n\\\n\t\tfont-family: ${1};\\n\\\n\t\tsrc: url(${2});\\n\\\n\t}\\n\\\nsnippet @i\\n\\\n\t@import url(${1});\\n\\\nsnippet @m\\n\\\n\t@media ${1:print} {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet bg+\\n\\\n\tbackground: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\\n\\\nsnippet bga\\n\\\n\tbackground-attachment: ${1};\\n\\\nsnippet bga:f\\n\\\n\tbackground-attachment: fixed;\\n\\\nsnippet bga:s\\n\\\n\tbackground-attachment: scroll;\\n\\\nsnippet bgbk\\n\\\n\tbackground-break: ${1};\\n\\\nsnippet bgbk:bb\\n\\\n\tbackground-break: bounding-box;\\n\\\nsnippet bgbk:c\\n\\\n\tbackground-break: continuous;\\n\\\nsnippet bgbk:eb\\n\\\n\tbackground-break: each-box;\\n\\\nsnippet bgcp\\n\\\n\tbackground-clip: ${1};\\n\\\nsnippet bgcp:bb\\n\\\n\tbackground-clip: border-box;\\n\\\nsnippet bgcp:cb\\n\\\n\tbackground-clip: content-box;\\n\\\nsnippet bgcp:nc\\n\\\n\tbackground-clip: no-clip;\\n\\\nsnippet bgcp:pb\\n\\\n\tbackground-clip: padding-box;\\n\\\nsnippet bgc\\n\\\n\tbackground-color: #${1:FFF};\\n\\\nsnippet bgc:t\\n\\\n\tbackground-color: transparent;\\n\\\nsnippet bgi\\n\\\n\tbackground-image: url(${1});\\n\\\nsnippet bgi:n\\n\\\n\tbackground-image: none;\\n\\\nsnippet bgo\\n\\\n\tbackground-origin: ${1};\\n\\\nsnippet bgo:bb\\n\\\n\tbackground-origin: border-box;\\n\\\nsnippet bgo:cb\\n\\\n\tbackground-origin: content-box;\\n\\\nsnippet bgo:pb\\n\\\n\tbackground-origin: padding-box;\\n\\\nsnippet bgpx\\n\\\n\tbackground-position-x: ${1};\\n\\\nsnippet bgpy\\n\\\n\tbackground-position-y: ${1};\\n\\\nsnippet bgp\\n\\\n\tbackground-position: ${1:0} ${2:0};\\n\\\nsnippet bgr\\n\\\n\tbackground-repeat: ${1};\\n\\\nsnippet bgr:n\\n\\\n\tbackground-repeat: no-repeat;\\n\\\nsnippet bgr:x\\n\\\n\tbackground-repeat: repeat-x;\\n\\\nsnippet bgr:y\\n\\\n\tbackground-repeat: repeat-y;\\n\\\nsnippet bgr:r\\n\\\n\tbackground-repeat: repeat;\\n\\\nsnippet bgz\\n\\\n\tbackground-size: ${1};\\n\\\nsnippet bgz:a\\n\\\n\tbackground-size: auto;\\n\\\nsnippet bgz:ct\\n\\\n\tbackground-size: contain;\\n\\\nsnippet bgz:cv\\n\\\n\tbackground-size: cover;\\n\\\nsnippet bg\\n\\\n\tbackground: ${1};\\n\\\nsnippet bg:ie\\n\\\n\tfilter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\\n\\\nsnippet bg:n\\n\\\n\tbackground: none;\\n\\\nsnippet bd+\\n\\\n\tborder: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdb+\\n\\\n\tborder-bottom: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdbc\\n\\\n\tborder-bottom-color: #${1:000};\\n\\\nsnippet bdbi\\n\\\n\tborder-bottom-image: url(${1});\\n\\\nsnippet bdbi:n\\n\\\n\tborder-bottom-image: none;\\n\\\nsnippet bdbli\\n\\\n\tborder-bottom-left-image: url(${1});\\n\\\nsnippet bdbli:c\\n\\\n\tborder-bottom-left-image: continue;\\n\\\nsnippet bdbli:n\\n\\\n\tborder-bottom-left-image: none;\\n\\\nsnippet bdblrz\\n\\\n\tborder-bottom-left-radius: ${1};\\n\\\nsnippet bdbri\\n\\\n\tborder-bottom-right-image: url(${1});\\n\\\nsnippet bdbri:c\\n\\\n\tborder-bottom-right-image: continue;\\n\\\nsnippet bdbri:n\\n\\\n\tborder-bottom-right-image: none;\\n\\\nsnippet bdbrrz\\n\\\n\tborder-bottom-right-radius: ${1};\\n\\\nsnippet bdbs\\n\\\n\tborder-bottom-style: ${1};\\n\\\nsnippet bdbs:n\\n\\\n\tborder-bottom-style: none;\\n\\\nsnippet bdbw\\n\\\n\tborder-bottom-width: ${1};\\n\\\nsnippet bdb\\n\\\n\tborder-bottom: ${1};\\n\\\nsnippet bdb:n\\n\\\n\tborder-bottom: none;\\n\\\nsnippet bdbk\\n\\\n\tborder-break: ${1};\\n\\\nsnippet bdbk:c\\n\\\n\tborder-break: close;\\n\\\nsnippet bdcl\\n\\\n\tborder-collapse: ${1};\\n\\\nsnippet bdcl:c\\n\\\n\tborder-collapse: collapse;\\n\\\nsnippet bdcl:s\\n\\\n\tborder-collapse: separate;\\n\\\nsnippet bdc\\n\\\n\tborder-color: #${1:000};\\n\\\nsnippet bdci\\n\\\n\tborder-corner-image: url(${1});\\n\\\nsnippet bdci:c\\n\\\n\tborder-corner-image: continue;\\n\\\nsnippet bdci:n\\n\\\n\tborder-corner-image: none;\\n\\\nsnippet bdf\\n\\\n\tborder-fit: ${1};\\n\\\nsnippet bdf:c\\n\\\n\tborder-fit: clip;\\n\\\nsnippet bdf:of\\n\\\n\tborder-fit: overwrite;\\n\\\nsnippet bdf:ow\\n\\\n\tborder-fit: overwrite;\\n\\\nsnippet bdf:r\\n\\\n\tborder-fit: repeat;\\n\\\nsnippet bdf:sc\\n\\\n\tborder-fit: scale;\\n\\\nsnippet bdf:sp\\n\\\n\tborder-fit: space;\\n\\\nsnippet bdf:st\\n\\\n\tborder-fit: stretch;\\n\\\nsnippet bdi\\n\\\n\tborder-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\n\\\nsnippet bdi:n\\n\\\n\tborder-image: none;\\n\\\nsnippet bdl+\\n\\\n\tborder-left: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdlc\\n\\\n\tborder-left-color: #${1:000};\\n\\\nsnippet bdli\\n\\\n\tborder-left-image: url(${1});\\n\\\nsnippet bdli:n\\n\\\n\tborder-left-image: none;\\n\\\nsnippet bdls\\n\\\n\tborder-left-style: ${1};\\n\\\nsnippet bdls:n\\n\\\n\tborder-left-style: none;\\n\\\nsnippet bdlw\\n\\\n\tborder-left-width: ${1};\\n\\\nsnippet bdl\\n\\\n\tborder-left: ${1};\\n\\\nsnippet bdl:n\\n\\\n\tborder-left: none;\\n\\\nsnippet bdlt\\n\\\n\tborder-length: ${1};\\n\\\nsnippet bdlt:a\\n\\\n\tborder-length: auto;\\n\\\nsnippet bdrz\\n\\\n\tborder-radius: ${1};\\n\\\nsnippet bdr+\\n\\\n\tborder-right: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdrc\\n\\\n\tborder-right-color: #${1:000};\\n\\\nsnippet bdri\\n\\\n\tborder-right-image: url(${1});\\n\\\nsnippet bdri:n\\n\\\n\tborder-right-image: none;\\n\\\nsnippet bdrs\\n\\\n\tborder-right-style: ${1};\\n\\\nsnippet bdrs:n\\n\\\n\tborder-right-style: none;\\n\\\nsnippet bdrw\\n\\\n\tborder-right-width: ${1};\\n\\\nsnippet bdr\\n\\\n\tborder-right: ${1};\\n\\\nsnippet bdr:n\\n\\\n\tborder-right: none;\\n\\\nsnippet bdsp\\n\\\n\tborder-spacing: ${1};\\n\\\nsnippet bds\\n\\\n\tborder-style: ${1};\\n\\\nsnippet bds:ds\\n\\\n\tborder-style: dashed;\\n\\\nsnippet bds:dtds\\n\\\n\tborder-style: dot-dash;\\n\\\nsnippet bds:dtdtds\\n\\\n\tborder-style: dot-dot-dash;\\n\\\nsnippet bds:dt\\n\\\n\tborder-style: dotted;\\n\\\nsnippet bds:db\\n\\\n\tborder-style: double;\\n\\\nsnippet bds:g\\n\\\n\tborder-style: groove;\\n\\\nsnippet bds:h\\n\\\n\tborder-style: hidden;\\n\\\nsnippet bds:i\\n\\\n\tborder-style: inset;\\n\\\nsnippet bds:n\\n\\\n\tborder-style: none;\\n\\\nsnippet bds:o\\n\\\n\tborder-style: outset;\\n\\\nsnippet bds:r\\n\\\n\tborder-style: ridge;\\n\\\nsnippet bds:s\\n\\\n\tborder-style: solid;\\n\\\nsnippet bds:w\\n\\\n\tborder-style: wave;\\n\\\nsnippet bdt+\\n\\\n\tborder-top: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdtc\\n\\\n\tborder-top-color: #${1:000};\\n\\\nsnippet bdti\\n\\\n\tborder-top-image: url(${1});\\n\\\nsnippet bdti:n\\n\\\n\tborder-top-image: none;\\n\\\nsnippet bdtli\\n\\\n\tborder-top-left-image: url(${1});\\n\\\nsnippet bdtli:c\\n\\\n\tborder-corner-image: continue;\\n\\\nsnippet bdtli:n\\n\\\n\tborder-corner-image: none;\\n\\\nsnippet bdtlrz\\n\\\n\tborder-top-left-radius: ${1};\\n\\\nsnippet bdtri\\n\\\n\tborder-top-right-image: url(${1});\\n\\\nsnippet bdtri:c\\n\\\n\tborder-top-right-image: continue;\\n\\\nsnippet bdtri:n\\n\\\n\tborder-top-right-image: none;\\n\\\nsnippet bdtrrz\\n\\\n\tborder-top-right-radius: ${1};\\n\\\nsnippet bdts\\n\\\n\tborder-top-style: ${1};\\n\\\nsnippet bdts:n\\n\\\n\tborder-top-style: none;\\n\\\nsnippet bdtw\\n\\\n\tborder-top-width: ${1};\\n\\\nsnippet bdt\\n\\\n\tborder-top: ${1};\\n\\\nsnippet bdt:n\\n\\\n\tborder-top: none;\\n\\\nsnippet bdw\\n\\\n\tborder-width: ${1};\\n\\\nsnippet bd\\n\\\n\tborder: ${1};\\n\\\nsnippet bd:n\\n\\\n\tborder: none;\\n\\\nsnippet b\\n\\\n\tbottom: ${1};\\n\\\nsnippet b:a\\n\\\n\tbottom: auto;\\n\\\nsnippet bxsh+\\n\\\n\tbox-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet bxsh\\n\\\n\tbox-shadow: ${1};\\n\\\nsnippet bxsh:n\\n\\\n\tbox-shadow: none;\\n\\\nsnippet bxz\\n\\\n\tbox-sizing: ${1};\\n\\\nsnippet bxz:bb\\n\\\n\tbox-sizing: border-box;\\n\\\nsnippet bxz:cb\\n\\\n\tbox-sizing: content-box;\\n\\\nsnippet cps\\n\\\n\tcaption-side: ${1};\\n\\\nsnippet cps:b\\n\\\n\tcaption-side: bottom;\\n\\\nsnippet cps:t\\n\\\n\tcaption-side: top;\\n\\\nsnippet cl\\n\\\n\tclear: ${1};\\n\\\nsnippet cl:b\\n\\\n\tclear: both;\\n\\\nsnippet cl:l\\n\\\n\tclear: left;\\n\\\nsnippet cl:n\\n\\\n\tclear: none;\\n\\\nsnippet cl:r\\n\\\n\tclear: right;\\n\\\nsnippet cp\\n\\\n\tclip: ${1};\\n\\\nsnippet cp:a\\n\\\n\tclip: auto;\\n\\\nsnippet cp:r\\n\\\n\tclip: rect(${1:0} ${2:0} ${3:0} ${4:0});\\n\\\nsnippet c\\n\\\n\tcolor: #${1:000};\\n\\\nsnippet ct\\n\\\n\tcontent: ${1};\\n\\\nsnippet ct:a\\n\\\n\tcontent: attr(${1});\\n\\\nsnippet ct:cq\\n\\\n\tcontent: close-quote;\\n\\\nsnippet ct:c\\n\\\n\tcontent: counter(${1});\\n\\\nsnippet ct:cs\\n\\\n\tcontent: counters(${1});\\n\\\nsnippet ct:ncq\\n\\\n\tcontent: no-close-quote;\\n\\\nsnippet ct:noq\\n\\\n\tcontent: no-open-quote;\\n\\\nsnippet ct:n\\n\\\n\tcontent: normal;\\n\\\nsnippet ct:oq\\n\\\n\tcontent: open-quote;\\n\\\nsnippet coi\\n\\\n\tcounter-increment: ${1};\\n\\\nsnippet cor\\n\\\n\tcounter-reset: ${1};\\n\\\nsnippet cur\\n\\\n\tcursor: ${1};\\n\\\nsnippet cur:a\\n\\\n\tcursor: auto;\\n\\\nsnippet cur:c\\n\\\n\tcursor: crosshair;\\n\\\nsnippet cur:d\\n\\\n\tcursor: default;\\n\\\nsnippet cur:ha\\n\\\n\tcursor: hand;\\n\\\nsnippet cur:he\\n\\\n\tcursor: help;\\n\\\nsnippet cur:m\\n\\\n\tcursor: move;\\n\\\nsnippet cur:p\\n\\\n\tcursor: pointer;\\n\\\nsnippet cur:t\\n\\\n\tcursor: text;\\n\\\nsnippet d\\n\\\n\tdisplay: ${1};\\n\\\nsnippet d:mib\\n\\\n\tdisplay: -moz-inline-box;\\n\\\nsnippet d:mis\\n\\\n\tdisplay: -moz-inline-stack;\\n\\\nsnippet d:b\\n\\\n\tdisplay: block;\\n\\\nsnippet d:cp\\n\\\n\tdisplay: compact;\\n\\\nsnippet d:ib\\n\\\n\tdisplay: inline-block;\\n\\\nsnippet d:itb\\n\\\n\tdisplay: inline-table;\\n\\\nsnippet d:i\\n\\\n\tdisplay: inline;\\n\\\nsnippet d:li\\n\\\n\tdisplay: list-item;\\n\\\nsnippet d:n\\n\\\n\tdisplay: none;\\n\\\nsnippet d:ri\\n\\\n\tdisplay: run-in;\\n\\\nsnippet d:tbcp\\n\\\n\tdisplay: table-caption;\\n\\\nsnippet d:tbc\\n\\\n\tdisplay: table-cell;\\n\\\nsnippet d:tbclg\\n\\\n\tdisplay: table-column-group;\\n\\\nsnippet d:tbcl\\n\\\n\tdisplay: table-column;\\n\\\nsnippet d:tbfg\\n\\\n\tdisplay: table-footer-group;\\n\\\nsnippet d:tbhg\\n\\\n\tdisplay: table-header-group;\\n\\\nsnippet d:tbrg\\n\\\n\tdisplay: table-row-group;\\n\\\nsnippet d:tbr\\n\\\n\tdisplay: table-row;\\n\\\nsnippet d:tb\\n\\\n\tdisplay: table;\\n\\\nsnippet ec\\n\\\n\tempty-cells: ${1};\\n\\\nsnippet ec:h\\n\\\n\tempty-cells: hide;\\n\\\nsnippet ec:s\\n\\\n\tempty-cells: show;\\n\\\nsnippet exp\\n\\\n\texpression()\\n\\\nsnippet fl\\n\\\n\tfloat: ${1};\\n\\\nsnippet fl:l\\n\\\n\tfloat: left;\\n\\\nsnippet fl:n\\n\\\n\tfloat: none;\\n\\\nsnippet fl:r\\n\\\n\tfloat: right;\\n\\\nsnippet f+\\n\\\n\tfont: ${1:1em} ${2:Arial},${3:sans-serif};\\n\\\nsnippet fef\\n\\\n\tfont-effect: ${1};\\n\\\nsnippet fef:eb\\n\\\n\tfont-effect: emboss;\\n\\\nsnippet fef:eg\\n\\\n\tfont-effect: engrave;\\n\\\nsnippet fef:n\\n\\\n\tfont-effect: none;\\n\\\nsnippet fef:o\\n\\\n\tfont-effect: outline;\\n\\\nsnippet femp\\n\\\n\tfont-emphasize-position: ${1};\\n\\\nsnippet femp:a\\n\\\n\tfont-emphasize-position: after;\\n\\\nsnippet femp:b\\n\\\n\tfont-emphasize-position: before;\\n\\\nsnippet fems\\n\\\n\tfont-emphasize-style: ${1};\\n\\\nsnippet fems:ac\\n\\\n\tfont-emphasize-style: accent;\\n\\\nsnippet fems:c\\n\\\n\tfont-emphasize-style: circle;\\n\\\nsnippet fems:ds\\n\\\n\tfont-emphasize-style: disc;\\n\\\nsnippet fems:dt\\n\\\n\tfont-emphasize-style: dot;\\n\\\nsnippet fems:n\\n\\\n\tfont-emphasize-style: none;\\n\\\nsnippet fem\\n\\\n\tfont-emphasize: ${1};\\n\\\nsnippet ff\\n\\\n\tfont-family: ${1};\\n\\\nsnippet ff:c\\n\\\n\tfont-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\\n\\\nsnippet ff:f\\n\\\n\tfont-family: ${1:Capitals,Impact},fantasy;\\n\\\nsnippet ff:m\\n\\\n\tfont-family: ${1:Monaco,'Courier New'},monospace;\\n\\\nsnippet ff:ss\\n\\\n\tfont-family: ${1:Helvetica,Arial},sans-serif;\\n\\\nsnippet ff:s\\n\\\n\tfont-family: ${1:Georgia,'Times New Roman'},serif;\\n\\\nsnippet fza\\n\\\n\tfont-size-adjust: ${1};\\n\\\nsnippet fza:n\\n\\\n\tfont-size-adjust: none;\\n\\\nsnippet fz\\n\\\n\tfont-size: ${1};\\n\\\nsnippet fsm\\n\\\n\tfont-smooth: ${1};\\n\\\nsnippet fsm:aw\\n\\\n\tfont-smooth: always;\\n\\\nsnippet fsm:a\\n\\\n\tfont-smooth: auto;\\n\\\nsnippet fsm:n\\n\\\n\tfont-smooth: never;\\n\\\nsnippet fst\\n\\\n\tfont-stretch: ${1};\\n\\\nsnippet fst:c\\n\\\n\tfont-stretch: condensed;\\n\\\nsnippet fst:e\\n\\\n\tfont-stretch: expanded;\\n\\\nsnippet fst:ec\\n\\\n\tfont-stretch: extra-condensed;\\n\\\nsnippet fst:ee\\n\\\n\tfont-stretch: extra-expanded;\\n\\\nsnippet fst:n\\n\\\n\tfont-stretch: normal;\\n\\\nsnippet fst:sc\\n\\\n\tfont-stretch: semi-condensed;\\n\\\nsnippet fst:se\\n\\\n\tfont-stretch: semi-expanded;\\n\\\nsnippet fst:uc\\n\\\n\tfont-stretch: ultra-condensed;\\n\\\nsnippet fst:ue\\n\\\n\tfont-stretch: ultra-expanded;\\n\\\nsnippet fs\\n\\\n\tfont-style: ${1};\\n\\\nsnippet fs:i\\n\\\n\tfont-style: italic;\\n\\\nsnippet fs:n\\n\\\n\tfont-style: normal;\\n\\\nsnippet fs:o\\n\\\n\tfont-style: oblique;\\n\\\nsnippet fv\\n\\\n\tfont-variant: ${1};\\n\\\nsnippet fv:n\\n\\\n\tfont-variant: normal;\\n\\\nsnippet fv:sc\\n\\\n\tfont-variant: small-caps;\\n\\\nsnippet fw\\n\\\n\tfont-weight: ${1};\\n\\\nsnippet fw:b\\n\\\n\tfont-weight: bold;\\n\\\nsnippet fw:br\\n\\\n\tfont-weight: bolder;\\n\\\nsnippet fw:lr\\n\\\n\tfont-weight: lighter;\\n\\\nsnippet fw:n\\n\\\n\tfont-weight: normal;\\n\\\nsnippet f\\n\\\n\tfont: ${1};\\n\\\nsnippet h\\n\\\n\theight: ${1};\\n\\\nsnippet h:a\\n\\\n\theight: auto;\\n\\\nsnippet l\\n\\\n\tleft: ${1};\\n\\\nsnippet l:a\\n\\\n\tleft: auto;\\n\\\nsnippet lts\\n\\\n\tletter-spacing: ${1};\\n\\\nsnippet lh\\n\\\n\tline-height: ${1};\\n\\\nsnippet lisi\\n\\\n\tlist-style-image: url(${1});\\n\\\nsnippet lisi:n\\n\\\n\tlist-style-image: none;\\n\\\nsnippet lisp\\n\\\n\tlist-style-position: ${1};\\n\\\nsnippet lisp:i\\n\\\n\tlist-style-position: inside;\\n\\\nsnippet lisp:o\\n\\\n\tlist-style-position: outside;\\n\\\nsnippet list\\n\\\n\tlist-style-type: ${1};\\n\\\nsnippet list:c\\n\\\n\tlist-style-type: circle;\\n\\\nsnippet list:dclz\\n\\\n\tlist-style-type: decimal-leading-zero;\\n\\\nsnippet list:dc\\n\\\n\tlist-style-type: decimal;\\n\\\nsnippet list:d\\n\\\n\tlist-style-type: disc;\\n\\\nsnippet list:lr\\n\\\n\tlist-style-type: lower-roman;\\n\\\nsnippet list:n\\n\\\n\tlist-style-type: none;\\n\\\nsnippet list:s\\n\\\n\tlist-style-type: square;\\n\\\nsnippet list:ur\\n\\\n\tlist-style-type: upper-roman;\\n\\\nsnippet lis\\n\\\n\tlist-style: ${1};\\n\\\nsnippet lis:n\\n\\\n\tlist-style: none;\\n\\\nsnippet mb\\n\\\n\tmargin-bottom: ${1};\\n\\\nsnippet mb:a\\n\\\n\tmargin-bottom: auto;\\n\\\nsnippet ml\\n\\\n\tmargin-left: ${1};\\n\\\nsnippet ml:a\\n\\\n\tmargin-left: auto;\\n\\\nsnippet mr\\n\\\n\tmargin-right: ${1};\\n\\\nsnippet mr:a\\n\\\n\tmargin-right: auto;\\n\\\nsnippet mt\\n\\\n\tmargin-top: ${1};\\n\\\nsnippet mt:a\\n\\\n\tmargin-top: auto;\\n\\\nsnippet m\\n\\\n\tmargin: ${1};\\n\\\nsnippet m:4\\n\\\n\tmargin: ${1:0} ${2:0} ${3:0} ${4:0};\\n\\\nsnippet m:3\\n\\\n\tmargin: ${1:0} ${2:0} ${3:0};\\n\\\nsnippet m:2\\n\\\n\tmargin: ${1:0} ${2:0};\\n\\\nsnippet m:0\\n\\\n\tmargin: 0;\\n\\\nsnippet m:a\\n\\\n\tmargin: auto;\\n\\\nsnippet mah\\n\\\n\tmax-height: ${1};\\n\\\nsnippet mah:n\\n\\\n\tmax-height: none;\\n\\\nsnippet maw\\n\\\n\tmax-width: ${1};\\n\\\nsnippet maw:n\\n\\\n\tmax-width: none;\\n\\\nsnippet mih\\n\\\n\tmin-height: ${1};\\n\\\nsnippet miw\\n\\\n\tmin-width: ${1};\\n\\\nsnippet op\\n\\\n\topacity: ${1};\\n\\\nsnippet op:ie\\n\\\n\tfilter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\\n\\\nsnippet op:ms\\n\\\n\t-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\\n\\\nsnippet orp\\n\\\n\torphans: ${1};\\n\\\nsnippet o+\\n\\\n\toutline: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet oc\\n\\\n\toutline-color: ${1:#000};\\n\\\nsnippet oc:i\\n\\\n\toutline-color: invert;\\n\\\nsnippet oo\\n\\\n\toutline-offset: ${1};\\n\\\nsnippet os\\n\\\n\toutline-style: ${1};\\n\\\nsnippet ow\\n\\\n\toutline-width: ${1};\\n\\\nsnippet o\\n\\\n\toutline: ${1};\\n\\\nsnippet o:n\\n\\\n\toutline: none;\\n\\\nsnippet ovs\\n\\\n\toverflow-style: ${1};\\n\\\nsnippet ovs:a\\n\\\n\toverflow-style: auto;\\n\\\nsnippet ovs:mq\\n\\\n\toverflow-style: marquee;\\n\\\nsnippet ovs:mv\\n\\\n\toverflow-style: move;\\n\\\nsnippet ovs:p\\n\\\n\toverflow-style: panner;\\n\\\nsnippet ovs:s\\n\\\n\toverflow-style: scrollbar;\\n\\\nsnippet ovx\\n\\\n\toverflow-x: ${1};\\n\\\nsnippet ovx:a\\n\\\n\toverflow-x: auto;\\n\\\nsnippet ovx:h\\n\\\n\toverflow-x: hidden;\\n\\\nsnippet ovx:s\\n\\\n\toverflow-x: scroll;\\n\\\nsnippet ovx:v\\n\\\n\toverflow-x: visible;\\n\\\nsnippet ovy\\n\\\n\toverflow-y: ${1};\\n\\\nsnippet ovy:a\\n\\\n\toverflow-y: auto;\\n\\\nsnippet ovy:h\\n\\\n\toverflow-y: hidden;\\n\\\nsnippet ovy:s\\n\\\n\toverflow-y: scroll;\\n\\\nsnippet ovy:v\\n\\\n\toverflow-y: visible;\\n\\\nsnippet ov\\n\\\n\toverflow: ${1};\\n\\\nsnippet ov:a\\n\\\n\toverflow: auto;\\n\\\nsnippet ov:h\\n\\\n\toverflow: hidden;\\n\\\nsnippet ov:s\\n\\\n\toverflow: scroll;\\n\\\nsnippet ov:v\\n\\\n\toverflow: visible;\\n\\\nsnippet pb\\n\\\n\tpadding-bottom: ${1};\\n\\\nsnippet pl\\n\\\n\tpadding-left: ${1};\\n\\\nsnippet pr\\n\\\n\tpadding-right: ${1};\\n\\\nsnippet pt\\n\\\n\tpadding-top: ${1};\\n\\\nsnippet p\\n\\\n\tpadding: ${1};\\n\\\nsnippet p:4\\n\\\n\tpadding: ${1:0} ${2:0} ${3:0} ${4:0};\\n\\\nsnippet p:3\\n\\\n\tpadding: ${1:0} ${2:0} ${3:0};\\n\\\nsnippet p:2\\n\\\n\tpadding: ${1:0} ${2:0};\\n\\\nsnippet p:0\\n\\\n\tpadding: 0;\\n\\\nsnippet pgba\\n\\\n\tpage-break-after: ${1};\\n\\\nsnippet pgba:aw\\n\\\n\tpage-break-after: always;\\n\\\nsnippet pgba:a\\n\\\n\tpage-break-after: auto;\\n\\\nsnippet pgba:l\\n\\\n\tpage-break-after: left;\\n\\\nsnippet pgba:r\\n\\\n\tpage-break-after: right;\\n\\\nsnippet pgbb\\n\\\n\tpage-break-before: ${1};\\n\\\nsnippet pgbb:aw\\n\\\n\tpage-break-before: always;\\n\\\nsnippet pgbb:a\\n\\\n\tpage-break-before: auto;\\n\\\nsnippet pgbb:l\\n\\\n\tpage-break-before: left;\\n\\\nsnippet pgbb:r\\n\\\n\tpage-break-before: right;\\n\\\nsnippet pgbi\\n\\\n\tpage-break-inside: ${1};\\n\\\nsnippet pgbi:a\\n\\\n\tpage-break-inside: auto;\\n\\\nsnippet pgbi:av\\n\\\n\tpage-break-inside: avoid;\\n\\\nsnippet pos\\n\\\n\tposition: ${1};\\n\\\nsnippet pos:a\\n\\\n\tposition: absolute;\\n\\\nsnippet pos:f\\n\\\n\tposition: fixed;\\n\\\nsnippet pos:r\\n\\\n\tposition: relative;\\n\\\nsnippet pos:s\\n\\\n\tposition: static;\\n\\\nsnippet q\\n\\\n\tquotes: ${1};\\n\\\nsnippet q:en\\n\\\n\tquotes: '\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019';\\n\\\nsnippet q:n\\n\\\n\tquotes: none;\\n\\\nsnippet q:ru\\n\\\n\tquotes: '\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C';\\n\\\nsnippet rz\\n\\\n\tresize: ${1};\\n\\\nsnippet rz:b\\n\\\n\tresize: both;\\n\\\nsnippet rz:h\\n\\\n\tresize: horizontal;\\n\\\nsnippet rz:n\\n\\\n\tresize: none;\\n\\\nsnippet rz:v\\n\\\n\tresize: vertical;\\n\\\nsnippet r\\n\\\n\tright: ${1};\\n\\\nsnippet r:a\\n\\\n\tright: auto;\\n\\\nsnippet tbl\\n\\\n\ttable-layout: ${1};\\n\\\nsnippet tbl:a\\n\\\n\ttable-layout: auto;\\n\\\nsnippet tbl:f\\n\\\n\ttable-layout: fixed;\\n\\\nsnippet tal\\n\\\n\ttext-align-last: ${1};\\n\\\nsnippet tal:a\\n\\\n\ttext-align-last: auto;\\n\\\nsnippet tal:c\\n\\\n\ttext-align-last: center;\\n\\\nsnippet tal:l\\n\\\n\ttext-align-last: left;\\n\\\nsnippet tal:r\\n\\\n\ttext-align-last: right;\\n\\\nsnippet ta\\n\\\n\ttext-align: ${1};\\n\\\nsnippet ta:c\\n\\\n\ttext-align: center;\\n\\\nsnippet ta:l\\n\\\n\ttext-align: left;\\n\\\nsnippet ta:r\\n\\\n\ttext-align: right;\\n\\\nsnippet td\\n\\\n\ttext-decoration: ${1};\\n\\\nsnippet td:l\\n\\\n\ttext-decoration: line-through;\\n\\\nsnippet td:n\\n\\\n\ttext-decoration: none;\\n\\\nsnippet td:o\\n\\\n\ttext-decoration: overline;\\n\\\nsnippet td:u\\n\\\n\ttext-decoration: underline;\\n\\\nsnippet te\\n\\\n\ttext-emphasis: ${1};\\n\\\nsnippet te:ac\\n\\\n\ttext-emphasis: accent;\\n\\\nsnippet te:a\\n\\\n\ttext-emphasis: after;\\n\\\nsnippet te:b\\n\\\n\ttext-emphasis: before;\\n\\\nsnippet te:c\\n\\\n\ttext-emphasis: circle;\\n\\\nsnippet te:ds\\n\\\n\ttext-emphasis: disc;\\n\\\nsnippet te:dt\\n\\\n\ttext-emphasis: dot;\\n\\\nsnippet te:n\\n\\\n\ttext-emphasis: none;\\n\\\nsnippet th\\n\\\n\ttext-height: ${1};\\n\\\nsnippet th:a\\n\\\n\ttext-height: auto;\\n\\\nsnippet th:f\\n\\\n\ttext-height: font-size;\\n\\\nsnippet th:m\\n\\\n\ttext-height: max-size;\\n\\\nsnippet th:t\\n\\\n\ttext-height: text-size;\\n\\\nsnippet ti\\n\\\n\ttext-indent: ${1};\\n\\\nsnippet ti:-\\n\\\n\ttext-indent: -9999px;\\n\\\nsnippet tj\\n\\\n\ttext-justify: ${1};\\n\\\nsnippet tj:a\\n\\\n\ttext-justify: auto;\\n\\\nsnippet tj:d\\n\\\n\ttext-justify: distribute;\\n\\\nsnippet tj:ic\\n\\\n\ttext-justify: inter-cluster;\\n\\\nsnippet tj:ii\\n\\\n\ttext-justify: inter-ideograph;\\n\\\nsnippet tj:iw\\n\\\n\ttext-justify: inter-word;\\n\\\nsnippet tj:k\\n\\\n\ttext-justify: kashida;\\n\\\nsnippet tj:t\\n\\\n\ttext-justify: tibetan;\\n\\\nsnippet to+\\n\\\n\ttext-outline: ${1:0} ${2:0} #${3:000};\\n\\\nsnippet to\\n\\\n\ttext-outline: ${1};\\n\\\nsnippet to:n\\n\\\n\ttext-outline: none;\\n\\\nsnippet tr\\n\\\n\ttext-replace: ${1};\\n\\\nsnippet tr:n\\n\\\n\ttext-replace: none;\\n\\\nsnippet tsh+\\n\\\n\ttext-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet tsh\\n\\\n\ttext-shadow: ${1};\\n\\\nsnippet tsh:n\\n\\\n\ttext-shadow: none;\\n\\\nsnippet tt\\n\\\n\ttext-transform: ${1};\\n\\\nsnippet tt:c\\n\\\n\ttext-transform: capitalize;\\n\\\nsnippet tt:l\\n\\\n\ttext-transform: lowercase;\\n\\\nsnippet tt:n\\n\\\n\ttext-transform: none;\\n\\\nsnippet tt:u\\n\\\n\ttext-transform: uppercase;\\n\\\nsnippet tw\\n\\\n\ttext-wrap: ${1};\\n\\\nsnippet tw:no\\n\\\n\ttext-wrap: none;\\n\\\nsnippet tw:n\\n\\\n\ttext-wrap: normal;\\n\\\nsnippet tw:s\\n\\\n\ttext-wrap: suppress;\\n\\\nsnippet tw:u\\n\\\n\ttext-wrap: unrestricted;\\n\\\nsnippet t\\n\\\n\ttop: ${1};\\n\\\nsnippet t:a\\n\\\n\ttop: auto;\\n\\\nsnippet va\\n\\\n\tvertical-align: ${1};\\n\\\nsnippet va:bl\\n\\\n\tvertical-align: baseline;\\n\\\nsnippet va:b\\n\\\n\tvertical-align: bottom;\\n\\\nsnippet va:m\\n\\\n\tvertical-align: middle;\\n\\\nsnippet va:sub\\n\\\n\tvertical-align: sub;\\n\\\nsnippet va:sup\\n\\\n\tvertical-align: super;\\n\\\nsnippet va:tb\\n\\\n\tvertical-align: text-bottom;\\n\\\nsnippet va:tt\\n\\\n\tvertical-align: text-top;\\n\\\nsnippet va:t\\n\\\n\tvertical-align: top;\\n\\\nsnippet v\\n\\\n\tvisibility: ${1};\\n\\\nsnippet v:c\\n\\\n\tvisibility: collapse;\\n\\\nsnippet v:h\\n\\\n\tvisibility: hidden;\\n\\\nsnippet v:v\\n\\\n\tvisibility: visible;\\n\\\nsnippet whsc\\n\\\n\twhite-space-collapse: ${1};\\n\\\nsnippet whsc:ba\\n\\\n\twhite-space-collapse: break-all;\\n\\\nsnippet whsc:bs\\n\\\n\twhite-space-collapse: break-strict;\\n\\\nsnippet whsc:k\\n\\\n\twhite-space-collapse: keep-all;\\n\\\nsnippet whsc:l\\n\\\n\twhite-space-collapse: loose;\\n\\\nsnippet whsc:n\\n\\\n\twhite-space-collapse: normal;\\n\\\nsnippet whs\\n\\\n\twhite-space: ${1};\\n\\\nsnippet whs:n\\n\\\n\twhite-space: normal;\\n\\\nsnippet whs:nw\\n\\\n\twhite-space: nowrap;\\n\\\nsnippet whs:pl\\n\\\n\twhite-space: pre-line;\\n\\\nsnippet whs:pw\\n\\\n\twhite-space: pre-wrap;\\n\\\nsnippet whs:p\\n\\\n\twhite-space: pre;\\n\\\nsnippet wid\\n\\\n\twidows: ${1};\\n\\\nsnippet w\\n\\\n\twidth: ${1};\\n\\\nsnippet w:a\\n\\\n\twidth: auto;\\n\\\nsnippet wob\\n\\\n\tword-break: ${1};\\n\\\nsnippet wob:ba\\n\\\n\tword-break: break-all;\\n\\\nsnippet wob:bs\\n\\\n\tword-break: break-strict;\\n\\\nsnippet wob:k\\n\\\n\tword-break: keep-all;\\n\\\nsnippet wob:l\\n\\\n\tword-break: loose;\\n\\\nsnippet wob:n\\n\\\n\tword-break: normal;\\n\\\nsnippet wos\\n\\\n\tword-spacing: ${1};\\n\\\nsnippet wow\\n\\\n\tword-wrap: ${1};\\n\\\nsnippet wow:no\\n\\\n\tword-wrap: none;\\n\\\nsnippet wow:n\\n\\\n\tword-wrap: normal;\\n\\\nsnippet wow:s\\n\\\n\tword-wrap: suppress;\\n\\\nsnippet wow:u\\n\\\n\tword-wrap: unrestricted;\\n\\\nsnippet z\\n\\\n\tz-index: ${1};\\n\\\nsnippet z:a\\n\\\n\tz-index: auto;\\n\\\nsnippet zoo\\n\\\n\tzoom: 1;\\n\\\n\";\nexports.scope = \"css\";\n\n});                (function() {\n                    window.require([\"ace/snippets/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/curly.js",
    "content": "define(\"ace/snippets/curly\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"curly\";\n\n});                (function() {\n                    window.require([\"ace/snippets/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/d.js",
    "content": "define(\"ace/snippets/d\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"d\";\n\n});                (function() {\n                    window.require([\"ace/snippets/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/dart.js",
    "content": "define(\"ace/snippets/dart\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet lib\\n\\\n\tlibrary ${1};\\n\\\n\t${2}\\n\\\nsnippet im\\n\\\n\timport '${1}';\\n\\\n\t${2}\\n\\\nsnippet pa\\n\\\n\tpart '${1}';\\n\\\n\t${2}\\n\\\nsnippet pao\\n\\\n\tpart of ${1};\\n\\\n\t${2}\\n\\\nsnippet main\\n\\\n\tvoid main() {\\n\\\n\t  ${1:/* code */}\\n\\\n\t}\\n\\\nsnippet st\\n\\\n\tstatic ${1}\\n\\\nsnippet fi\\n\\\n\tfinal ${1}\\n\\\nsnippet re\\n\\\n\treturn ${1}\\n\\\nsnippet br\\n\\\n\tbreak;\\n\\\nsnippet th\\n\\\n\tthrow ${1}\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\n\\\nsnippet imp\\n\\\n\timplements ${1}\\n\\\nsnippet ext\\n\\\n\textends ${1}\\n\\\nsnippet if\\n\\\n\tif (${1:true}) {\\n\\\n\t  ${2}\\n\\\n\t}\\n\\\nsnippet ife\\n\\\n\tif (${1:true}) {\\n\\\n\t  ${2}\\n\\\n\t} else {\\n\\\n\t  ${3}\\n\\\n\t}\\n\\\nsnippet el\\n\\\n\telse\\n\\\nsnippet sw\\n\\\n\tswitch (${1}) {\\n\\\n\t  ${2}\\n\\\n\t}\\n\\\nsnippet cs\\n\\\n\tcase ${1}:\\n\\\n\t  ${2}\\n\\\nsnippet de\\n\\\n\tdefault:\\n\\\n\t  ${1}\\n\\\nsnippet for\\n\\\n\tfor (var ${2:i} = 0, len = ${1:things}.length; $2 < len; ${3:++}$2) {\\n\\\n\t  ${4:$1[$2]}\\n\\\n\t}\\n\\\nsnippet fore\\n\\\n\tfor (final ${2:item} in ${1:itemList}) {\\n\\\n\t  ${3:/* code */}\\n\\\n\t}\\n\\\nsnippet wh\\n\\\n\twhile (${1:/* condition */}) {\\n\\\n\t  ${2:/* code */}\\n\\\n\t}\\n\\\nsnippet dowh\\n\\\n\tdo {\\n\\\n\t  ${2:/* code */}\\n\\\n\t} while (${1:/* condition */});\\n\\\nsnippet as\\n\\\n\tassert(${1:/* condition */});\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t  ${2}\\n\\\n\t} catch (${1:Exception e}) {\\n\\\n\t}\\n\\\nsnippet tryf\\n\\\n\ttry {\\n\\\n\t  ${2}\\n\\\n\t} catch (${1:Exception e}) {\\n\\\n\t} finally {\\n\\\n\t}\\n\\\n\";\nexports.scope = \"dart\";\n\n});                (function() {\n                    window.require([\"ace/snippets/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/diff.js",
    "content": "define(\"ace/snippets/diff\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# DEP-3 (http://dep.debian.net/deps/dep3/) style patch header\\n\\\nsnippet header DEP-3 style header\\n\\\n\tDescription: ${1}\\n\\\n\tOrigin: ${2:vendor|upstream|other}, ${3:url of the original patch}\\n\\\n\tBug: ${4:url in upstream bugtracker}\\n\\\n\tForwarded: ${5:no|not-needed|url}\\n\\\n\tAuthor: ${6:`g:snips_author`}\\n\\\n\tReviewed-by: ${7:name and email}\\n\\\n\tLast-Update: ${8:`strftime(\\\"%Y-%m-%d\\\")`}\\n\\\n\tApplied-Upstream: ${9:upstream version|url|commit}\\n\\\n\\n\\\n\";\nexports.scope = \"diff\";\n\n});                (function() {\n                    window.require([\"ace/snippets/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/django.js",
    "content": "define(\"ace/snippets/django\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Model Fields\\n\\\n\\n\\\n# Note: Optional arguments are using defaults that match what Django will use\\n\\\n# as a default, e.g. with max_length fields.  Doing this as a form of self\\n\\\n# documentation and to make it easy to know whether you should override the\\n\\\n# default or not.\\n\\\n\\n\\\n# Note: Optional arguments that are booleans will use the opposite since you\\n\\\n# can either not specify them, or override them, e.g. auto_now_add=False.\\n\\\n\\n\\\nsnippet auto\\n\\\n\t${1:FIELDNAME} = models.AutoField(${2})\\n\\\nsnippet bool\\n\\\n\t${1:FIELDNAME} = models.BooleanField(${2:default=True})\\n\\\nsnippet char\\n\\\n\t${1:FIELDNAME} = models.CharField(max_length=${2}${3:, blank=True})\\n\\\nsnippet comma\\n\\\n\t${1:FIELDNAME} = models.CommaSeparatedIntegerField(max_length=${2}${3:, blank=True})\\n\\\nsnippet date\\n\\\n\t${1:FIELDNAME} = models.DateField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\n\\\nsnippet datetime\\n\\\n\t${1:FIELDNAME} = models.DateTimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\n\\\nsnippet decimal\\n\\\n\t${1:FIELDNAME} = models.DecimalField(max_digits=${2}, decimal_places=${3})\\n\\\nsnippet email\\n\\\n\t${1:FIELDNAME} = models.EmailField(max_length=${2:75}${3:, blank=True})\\n\\\nsnippet file\\n\\\n\t${1:FIELDNAME} = models.FileField(upload_to=${2:path/for/upload}${3:, max_length=100})\\n\\\nsnippet filepath\\n\\\n\t${1:FIELDNAME} = models.FilePathField(path=${2:\\\"/abs/path/to/dir\\\"}${3:, max_length=100}${4:, match=\\\"*.ext\\\"}${5:, recursive=True}${6:, blank=True, })\\n\\\nsnippet float\\n\\\n\t${1:FIELDNAME} = models.FloatField(${2})\\n\\\nsnippet image\\n\\\n\t${1:FIELDNAME} = models.ImageField(upload_to=${2:path/for/upload}${3:, height_field=height, width_field=width}${4:, max_length=100})\\n\\\nsnippet int\\n\\\n\t${1:FIELDNAME} = models.IntegerField(${2})\\n\\\nsnippet ip\\n\\\n\t${1:FIELDNAME} = models.IPAddressField(${2})\\n\\\nsnippet nullbool\\n\\\n\t${1:FIELDNAME} = models.NullBooleanField(${2})\\n\\\nsnippet posint\\n\\\n\t${1:FIELDNAME} = models.PositiveIntegerField(${2})\\n\\\nsnippet possmallint\\n\\\n\t${1:FIELDNAME} = models.PositiveSmallIntegerField(${2})\\n\\\nsnippet slug\\n\\\n\t${1:FIELDNAME} = models.SlugField(max_length=${2:50}${3:, blank=True})\\n\\\nsnippet smallint\\n\\\n\t${1:FIELDNAME} = models.SmallIntegerField(${2})\\n\\\nsnippet text\\n\\\n\t${1:FIELDNAME} = models.TextField(${2:blank=True})\\n\\\nsnippet time\\n\\\n\t${1:FIELDNAME} = models.TimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\n\\\nsnippet url\\n\\\n\t${1:FIELDNAME} = models.URLField(${2:verify_exists=False}${3:, max_length=200}${4:, blank=True})\\n\\\nsnippet xml\\n\\\n\t${1:FIELDNAME} = models.XMLField(schema_path=${2:None}${3:, blank=True})\\n\\\n# Relational Fields\\n\\\nsnippet fk\\n\\\n\t${1:FIELDNAME} = models.ForeignKey(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, to_field=''})\\n\\\nsnippet m2m\\n\\\n\t${1:FIELDNAME} = models.ManyToManyField(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, symmetrical=False}${6:, through=''}${7:, db_table=''})\\n\\\nsnippet o2o\\n\\\n\t${1:FIELDNAME} = models.OneToOneField(${2:OtherModel}${3:, parent_link=True}${4:, related_name=''}${5:, limit_choices_to=}${6:, to_field=''})\\n\\\n\\n\\\n# Code Skeletons\\n\\\n\\n\\\nsnippet form\\n\\\n\tclass ${1:FormName}(forms.Form):\\n\\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\\\n\t\t${3}\\n\\\n\\n\\\nsnippet model\\n\\\n\tclass ${1:ModelName}(models.Model):\\n\\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\\\n\t\t${3}\\n\\\n\t\t\\n\\\n\t\tclass Meta:\\n\\\n\t\t\t${4}\\n\\\n\t\t\\n\\\n\t\tdef __unicode__(self):\\n\\\n\t\t\t${5}\\n\\\n\t\t\\n\\\n\t\tdef save(self, force_insert=False, force_update=False):\\n\\\n\t\t\t${6}\\n\\\n\t\t\\n\\\n\t\t@models.permalink\\n\\\n\t\tdef get_absolute_url(self):\\n\\\n\t\t\treturn ('${7:view_or_url_name}' ${8})\\n\\\n\\n\\\nsnippet modeladmin\\n\\\n\tclass ${1:ModelName}Admin(admin.ModelAdmin):\\n\\\n\t\t${2}\\n\\\n\t\\n\\\n\tadmin.site.register($1, $1Admin)\\n\\\n\t\\n\\\nsnippet tabularinline\\n\\\n\tclass ${1:ModelName}Inline(admin.TabularInline):\\n\\\n\t\tmodel = $1\\n\\\n\\n\\\nsnippet stackedinline\\n\\\n\tclass ${1:ModelName}Inline(admin.StackedInline):\\n\\\n\t\tmodel = $1\\n\\\n\\n\\\nsnippet r2r\\n\\\n\treturn render_to_response('${1:template.html}', {\\n\\\n\t\t\t${2}\\n\\\n\t\t}${3:, context_instance=RequestContext(request)}\\n\\\n\t)\\n\\\n\";\nexports.scope = \"django\";\n\n});                (function() {\n                    window.require([\"ace/snippets/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/dockerfile.js",
    "content": "define(\"ace/snippets/dockerfile\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"dockerfile\";\n\n});                (function() {\n                    window.require([\"ace/snippets/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/dot.js",
    "content": "define(\"ace/snippets/dot\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"dot\";\n\n});                (function() {\n                    window.require([\"ace/snippets/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/drools.js",
    "content": "define(\"ace/snippets/drools\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"\\n\\\nsnippet rule\\n\\\n\trule \\\"${1?:rule_name}\\\"\\n\\\n\twhen\\n\\\n\t\t${2:// when...} \\n\\\n\tthen\\n\\\n\t\t${3:// then...}\\n\\\n\tend\\n\\\n\\n\\\nsnippet query\\n\\\n\tquery ${1?:query_name}\\n\\\n\t\t${2:// find} \\n\\\n\tend\\n\\\n\t\\n\\\nsnippet declare\\n\\\n\tdeclare ${1?:type_name}\\n\\\n\t\t${2:// attributes} \\n\\\n\tend\\n\\\n\\n\\\n\";\nexports.scope = \"drools\";\n\n});                (function() {\n                    window.require([\"ace/snippets/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/edifact.js",
    "content": "define(\"ace/snippets/edifact\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n    \"use strict\";\n    \n    exports.snippetText = \"## Access Modifiers\\n\\\nsnippet u\\n\\\n\tUN\\n\\\nsnippet un\\n\\\n\tUNB\\n\\\nsnippet pr\\n\\\n\tprivate\\n\\\n##\\n\\\n## Annotations\\n\\\nsnippet before\\n\\\n\t@Before\\n\\\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\\n\\\nsnippet mm\\n\\\n\t@ManyToMany\\n\\\n\t${1}\\n\\\nsnippet mo\\n\\\n\t@ManyToOne\\n\\\n\t${1}\\n\\\nsnippet om\\n\\\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\\\n\t${2}\\n\\\nsnippet oo\\n\\\n\t@OneToOne\\n\\\n\t${1}\\n\\\n##\\n\\\n## Basic Java packages and import\\n\\\nsnippet im\\n\\\n\timport\\n\\\nsnippet j.b\\n\\\n\tjava.beans.\\n\\\nsnippet j.i\\n\\\n\tjava.io.\\n\\\nsnippet j.m\\n\\\n\tjava.math.\\n\\\nsnippet j.n\\n\\\n\tjava.net.\\n\\\nsnippet j.u\\n\\\n\tjava.util.\\n\\\n##\\n\\\n## Class\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\n\\\nsnippet in\\n\\\n\tinterface ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2:extends Parent}${3}\\n\\\nsnippet tc\\n\\\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n\\\n##\\n\\\n## Class Enhancements\\n\\\nsnippet ext\\n\\\n\textends \\n\\\nsnippet imp\\n\\\n\timplements\\n\\\n##\\n\\\n## Comments\\n\\\nsnippet /*\\n\\\n\t/*\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n##\\n\\\n## Constants\\n\\\nsnippet co\\n\\\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\\n\\\nsnippet cos\\n\\\n\tstatic public final String ${1:var} = \\\"${2}\\\";${3}\\n\\\n##\\n\\\n## Control Statements\\n\\\nsnippet case\\n\\\n\tcase ${1}:\\n\\\n\t\t${2}\\n\\\nsnippet def\\n\\\n\tdefault:\\n\\\n\t\t${2}\\n\\\nsnippet el\\n\\\n\telse\\n\\\nsnippet elif\\n\\\n\telse if (${1}) ${2}\\n\\\nsnippet if\\n\\\n\tif (${1}) ${2}\\n\\\nsnippet sw\\n\\\n\tswitch (${1}) {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\n##\\n\\\n## Create a Method\\n\\\nsnippet m\\n\\\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n\\\n##\\n\\\n## Create a Variable\\n\\\nsnippet v\\n\\\n\t${1:String} ${2:var}${3: = null}${4};${5}\\n\\\n##\\n\\\n## Enhancements to Methods, variables, classes, etc.\\n\\\nsnippet ab\\n\\\n\tabstract\\n\\\nsnippet fi\\n\\\n\tfinal\\n\\\nsnippet st\\n\\\n\tstatic\\n\\\nsnippet sy\\n\\\n\tsynchronized\\n\\\n##\\n\\\n## Error Methods\\n\\\nsnippet err\\n\\\n\tSystem.err.print(\\\"${1:Message}\\\");\\n\\\nsnippet errf\\n\\\n\tSystem.err.printf(\\\"${1:Message}\\\", ${2:exception});\\n\\\nsnippet errln\\n\\\n\tSystem.err.println(\\\"${1:Message}\\\");\\n\\\n##\\n\\\n## Exception Handling\\n\\\nsnippet as\\n\\\n\tassert ${1:test} : \\\"${2:Failure message}\\\";${3}\\n\\\nsnippet ca\\n\\\n\tcatch(${1:Exception} ${2:e}) ${3}\\n\\\nsnippet thr\\n\\\n\tthrow\\n\\\nsnippet ths\\n\\\n\tthrows\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch(${1:Exception} ${2:e}) {\\n\\\n\t}\\n\\\nsnippet tryf\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch(${1:Exception} ${2:e}) {\\n\\\n\t} finally {\\n\\\n\t}\\n\\\n##\\n\\\n## Find Methods\\n\\\nsnippet findall\\n\\\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\n\\\nsnippet findbyid\\n\\\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n\\\n##\\n\\\n## Javadocs\\n\\\nsnippet /**\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\nsnippet @au\\n\\\n\t@author `system(\\\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\\\":\\\\\\\" -f5 | cut -d \\\\\\\",\\\\\\\" -f1\\\")`\\n\\\nsnippet @br\\n\\\n\t@brief ${1:Description}\\n\\\nsnippet @fi\\n\\\n\t@file ${1:`Filename()`}.java\\n\\\nsnippet @pa\\n\\\n\t@param ${1:param}\\n\\\nsnippet @re\\n\\\n\t@return ${1:param}\\n\\\n##\\n\\\n## Logger Methods\\n\\\nsnippet debug\\n\\\n\tLogger.debug(${1:param});${2}\\n\\\nsnippet error\\n\\\n\tLogger.error(${1:param});${2}\\n\\\nsnippet info\\n\\\n\tLogger.info(${1:param});${2}\\n\\\nsnippet warn\\n\\\n\tLogger.warn(${1:param});${2}\\n\\\n##\\n\\\n## Loops\\n\\\nsnippet enfor\\n\\\n\tfor (${1} : ${2}) ${3}\\n\\\nsnippet for\\n\\\n\tfor (${1}; ${2}; ${3}) ${4}\\n\\\nsnippet wh\\n\\\n\twhile (${1}) ${2}\\n\\\n##\\n\\\n## Main method\\n\\\nsnippet main\\n\\\n\tpublic static void main (String[] args) {\\n\\\n\t\t${1:/* code */}\\n\\\n\t}\\n\\\n##\\n\\\n## Print Methods\\n\\\nsnippet print\\n\\\n\tSystem.out.print(\\\"${1:Message}\\\");\\n\\\nsnippet printf\\n\\\n\tSystem.out.printf(\\\"${1:Message}\\\", ${2:args});\\n\\\nsnippet println\\n\\\n\tSystem.out.println(${1});\\n\\\n##\\n\\\n## Render Methods\\n\\\nsnippet ren\\n\\\n\trender(${1:param});${2}\\n\\\nsnippet rena\\n\\\n\trenderArgs.put(\\\"${1}\\\", ${2});${3}\\n\\\nsnippet renb\\n\\\n\trenderBinary(${1:param});${2}\\n\\\nsnippet renj\\n\\\n\trenderJSON(${1:param});${2}\\n\\\nsnippet renx\\n\\\n\trenderXml(${1:param});${2}\\n\\\n##\\n\\\n## Setter and Getter Methods\\n\\\nsnippet set\\n\\\n\t${1:public} void set${3:}(${2:String} ${4:}){\\n\\\n\t\tthis.$4 = $4;\\n\\\n\t}\\n\\\nsnippet get\\n\\\n\t${1:public} ${2:String} get${3:}(){\\n\\\n\t\treturn this.${4:};\\n\\\n\t}\\n\\\n##\\n\\\n## Terminate Methods or Loops\\n\\\nsnippet re\\n\\\n\treturn\\n\\\nsnippet br\\n\\\n\tbreak;\\n\\\n##\\n\\\n## Test Methods\\n\\\nsnippet t\\n\\\n\tpublic void test${1:Name}() throws Exception {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet test\\n\\\n\t@Test\\n\\\n\tpublic void test${1:Name}() throws Exception {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\n##\\n\\\n## Utils\\n\\\nsnippet Sc\\n\\\n\tScanner\\n\\\n##\\n\\\n## Miscellaneous\\n\\\nsnippet action\\n\\\n\tpublic static void ${1:index}(${2:args}) { ${3} }\\n\\\nsnippet rnf\\n\\\n\tnotFound(${1:param});${2}\\n\\\nsnippet rnfin\\n\\\n\tnotFoundIfNull(${1:param});${2}\\n\\\nsnippet rr\\n\\\n\tredirect(${1:param});${2}\\n\\\nsnippet ru\\n\\\n\tunauthorized(${1:param});${2}\\n\\\nsnippet unless\\n\\\n\t(unless=${1:param});${2}\\n\\\n\";\n    exports.scope = \"edifact\";\n    \n});                (function() {\n                    window.require([\"ace/snippets/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/eiffel.js",
    "content": "define(\"ace/snippets/eiffel\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"eiffel\";\n\n});                (function() {\n                    window.require([\"ace/snippets/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/ejs.js",
    "content": "define(\"ace/snippets/ejs\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ejs\";\n\n});                (function() {\n                    window.require([\"ace/snippets/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/elixir.js",
    "content": "define(\"ace/snippets/elixir\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/elm.js",
    "content": "define(\"ace/snippets/elm\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"elm\";\n\n});                (function() {\n                    window.require([\"ace/snippets/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/erlang.js",
    "content": "define(\"ace/snippets/erlang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# module and export all\\n\\\nsnippet mod\\n\\\n\t-module(${1:`Filename('', 'my')`}).\\n\\\n\t\\n\\\n\t-compile([export_all]).\\n\\\n\t\\n\\\n\tstart() ->\\n\\\n\t    ${2}\\n\\\n\t\\n\\\n\tstop() ->\\n\\\n\t    ok.\\n\\\n# define directive\\n\\\nsnippet def\\n\\\n\t-define(${1:macro}, ${2:body}).${3}\\n\\\n# export directive\\n\\\nsnippet exp\\n\\\n\t-export([${1:function}/${2:arity}]).\\n\\\n# include directive\\n\\\nsnippet inc\\n\\\n\t-include(\\\"${1:file}\\\").${2}\\n\\\n# behavior directive\\n\\\nsnippet beh\\n\\\n\t-behaviour(${1:behaviour}).${2}\\n\\\n# if expression\\n\\\nsnippet if\\n\\\n\tif\\n\\\n\t    ${1:guard} ->\\n\\\n\t        ${2:body}\\n\\\n\tend\\n\\\n# case expression\\n\\\nsnippet case\\n\\\n\tcase ${1:expression} of\\n\\\n\t    ${2:pattern} ->\\n\\\n\t        ${3:body};\\n\\\n\tend\\n\\\n# anonymous function\\n\\\nsnippet fun\\n\\\n\tfun (${1:Parameters}) -> ${2:body} end${3}\\n\\\n# try...catch\\n\\\nsnippet try\\n\\\n\ttry\\n\\\n\t    ${1}\\n\\\n\tcatch\\n\\\n\t    ${2:_:_} -> ${3:got_some_exception}\\n\\\n\tend\\n\\\n# record directive\\n\\\nsnippet rec\\n\\\n\t-record(${1:record}, {\\n\\\n\t    ${2:field}=${3:value}}).${4}\\n\\\n# todo comment\\n\\\nsnippet todo\\n\\\n\t%% TODO: ${1}\\n\\\n## Snippets below (starting with '%') are in EDoc format.\\n\\\n## See http://www.erlang.org/doc/apps/edoc/chapter.html#id56887 for more details\\n\\\n# doc comment\\n\\\nsnippet %d\\n\\\n\t%% @doc ${1}\\n\\\n# end of doc comment\\n\\\nsnippet %e\\n\\\n\t%% @end\\n\\\n# specification comment\\n\\\nsnippet %s\\n\\\n\t%% @spec ${1}\\n\\\n# private function marker\\n\\\nsnippet %p\\n\\\n\t%% @private\\n\\\n# OTP application\\n\\\nsnippet application\\n\\\n\t-module(${1:`Filename('', 'my')`}).\\n\\\n\\n\\\n\t-behaviour(application).\\n\\\n\\n\\\n\t-export([start/2, stop/1]).\\n\\\n\\n\\\n\tstart(_Type, _StartArgs) ->\\n\\\n\t    case ${2:root_supervisor}:start_link() of\\n\\\n\t        {ok, Pid} ->\\n\\\n\t            {ok, Pid};\\n\\\n\t        Other ->\\n\\\n\t\t          {error, Other}\\n\\\n\t    end.\\n\\\n\\n\\\n\tstop(_State) ->\\n\\\n\t    ok.\t\\n\\\n# OTP supervisor\\n\\\nsnippet supervisor\\n\\\n\t-module(${1:`Filename('', 'my')`}).\\n\\\n\\n\\\n\t-behaviour(supervisor).\\n\\\n\\n\\\n\t%% API\\n\\\n\t-export([start_link/0]).\\n\\\n\\n\\\n\t%% Supervisor callbacks\\n\\\n\t-export([init/1]).\\n\\\n\\n\\\n\t-define(SERVER, ?MODULE).\\n\\\n\\n\\\n\tstart_link() ->\\n\\\n\t    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\\n\\\n\\n\\\n\tinit([]) ->\\n\\\n\t    Server = {${2:my_server}, {$2, start_link, []},\\n\\\n\t      permanent, 2000, worker, [$2]},\\n\\\n\t    Children = [Server],\\n\\\n\t    RestartStrategy = {one_for_one, 0, 1},\\n\\\n\t    {ok, {RestartStrategy, Children}}.\\n\\\n# OTP gen_server\\n\\\nsnippet gen_server\\n\\\n\t-module(${1:`Filename('', 'my')`}).\\n\\\n\\n\\\n\t-behaviour(gen_server).\\n\\\n\\n\\\n\t%% API\\n\\\n\t-export([\\n\\\n\t         start_link/0\\n\\\n\t        ]).\\n\\\n\\n\\\n\t%% gen_server callbacks\\n\\\n\t-export([init/1, handle_call/3, handle_cast/2, handle_info/2,\\n\\\n\t         terminate/2, code_change/3]).\\n\\\n\\n\\\n\t-define(SERVER, ?MODULE).\\n\\\n\\n\\\n\t-record(state, {}).\\n\\\n\\n\\\n\t%%%===================================================================\\n\\\n\t%%% API\\n\\\n\t%%%===================================================================\\n\\\n\\n\\\n\tstart_link() ->\\n\\\n\t    gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).\\n\\\n\\n\\\n\t%%%===================================================================\\n\\\n\t%%% gen_server callbacks\\n\\\n\t%%%===================================================================\\n\\\n\\n\\\n\tinit([]) ->\\n\\\n\t    {ok, #state{}}.\\n\\\n\\n\\\n\thandle_call(_Request, _From, State) ->\\n\\\n\t    Reply = ok,\\n\\\n\t    {reply, Reply, State}.\\n\\\n\\n\\\n\thandle_cast(_Msg, State) ->\\n\\\n\t    {noreply, State}.\\n\\\n\\n\\\n\thandle_info(_Info, State) ->\\n\\\n\t    {noreply, State}.\\n\\\n\\n\\\n\tterminate(_Reason, _State) ->\\n\\\n\t    ok.\\n\\\n\\n\\\n\tcode_change(_OldVsn, State, _Extra) ->\\n\\\n\t    {ok, State}.\\n\\\n\\n\\\n\t%%%===================================================================\\n\\\n\t%%% Internal functions\\n\\\n\t%%%===================================================================\\n\\\n\\n\\\n\";\nexports.scope = \"erlang\";\n\n});                (function() {\n                    window.require([\"ace/snippets/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/forth.js",
    "content": "define(\"ace/snippets/forth\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"forth\";\n\n});                (function() {\n                    window.require([\"ace/snippets/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/fortran.js",
    "content": "define(\"ace/snippets/fortran\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"fortran\";\n\n});                (function() {\n                    window.require([\"ace/snippets/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/fsharp.js",
    "content": "define(\"ace/snippets/fsharp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n    \"use strict\";\n\n    exports.snippetText =undefined;\n    exports.scope = \"fsharp\";\n\n});                (function() {\n                    window.require([\"ace/snippets/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/fsl.js",
    "content": "define(\"ace/snippets/fsl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/ftl.js",
    "content": "define(\"ace/snippets/ftl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ftl\";\n\n});                (function() {\n                    window.require([\"ace/snippets/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/gcode.js",
    "content": "define(\"ace/snippets/gcode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"gcode\";\n\n});                (function() {\n                    window.require([\"ace/snippets/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/gherkin.js",
    "content": "define(\"ace/snippets/gherkin\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"gherkin\";\n\n});                (function() {\n                    window.require([\"ace/snippets/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/gitignore.js",
    "content": "define(\"ace/snippets/gitignore\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"gitignore\";\n\n});                (function() {\n                    window.require([\"ace/snippets/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/glsl.js",
    "content": "define(\"ace/snippets/glsl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"glsl\";\n\n});                (function() {\n                    window.require([\"ace/snippets/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/gobstones.js",
    "content": "define(\"ace/snippets/gobstones\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Procedure\\n\\\nsnippet proc\\n\\\n\tprocedure ${1?:name}(${2:argument}) {\\n\\\n\t\t${3:// body...}\\n\\\n\t}\\n\\\n\\n\\\n# Function\\n\\\nsnippet fun\\n\\\n\tfunction ${1?:name}(${2:argument}) {\\n\\\n\t\treturn ${3:// body...}\\n\\\n\t}\\n\\\n\\n\\\n# Repeat\\n\\\nsnippet rep\\n\\\n\trepeat ${1?:times} {\\n\\\n\t\t${2:// body...}\\n\\\n\t}\\n\\\n\\n\\\n# For\\n\\\nsnippet for\\n\\\n\tforeach ${1?:e} in ${2?:list} {\\n\\\n\t\t${3:// body...}\t\\n\\\n\t}\\n\\\n\\n\\\n# If\\n\\\nsnippet if\\n\\\n\tif (${1?:condition}) {\\n\\\n\t\t${3:// body...}\t\\n\\\n\t}\\n\\\n\\n\\\n# While\\n\\\n  while (${1?:condition}) {\\n\\\n    ${2:// body...}\t\\n\\\n  }\\n\\\n\";\nexports.scope = \"gobstones\";\n\n});                (function() {\n                    window.require([\"ace/snippets/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/golang.js",
    "content": "define(\"ace/snippets/golang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"golang\";\n\n});                (function() {\n                    window.require([\"ace/snippets/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/graphqlschema.js",
    "content": "define(\"ace/snippets/graphqlschema\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Type Snippet\\n\\\ntrigger type\\n\\\nsnippet type\\n\\\n\ttype ${1:type_name} {\\n\\\n\t\t${2:type_siblings}\\n\\\n\t}\\n\\\n\\n\\\n# Input Snippet\\n\\\ntrigger input\\n\\\nsnippet input\\n\\\n\tinput ${1:input_name} {\\n\\\n\t\t${2:input_siblings}\\n\\\n\t}\\n\\\n\\n\\\n# Interface Snippet\\n\\\ntrigger interface\\n\\\nsnippet interface\\n\\\n\tinterface ${1:interface_name} {\\n\\\n\t\t${2:interface_siblings}\\n\\\n\t}\\n\\\n\\n\\\n# Interface Snippet\\n\\\ntrigger union\\n\\\nsnippet union\\n\\\n\tunion ${1:union_name} = ${2:type} | ${3: type}\\n\\\n\\n\\\n# Enum Snippet\\n\\\ntrigger enum\\n\\\nsnippet enum\\n\\\n\tenum ${1:enum_name} {\\n\\\n\t\t${2:enum_siblings}\\n\\\n\t}\\n\\\n\";\nexports.scope = \"graphqlschema\";\n\n});                (function() {\n                    window.require([\"ace/snippets/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/groovy.js",
    "content": "define(\"ace/snippets/groovy\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"groovy\";\n\n});                (function() {\n                    window.require([\"ace/snippets/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/haml.js",
    "content": "define(\"ace/snippets/haml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet t\\n\\\n\t%table\\n\\\n\t\t%tr\\n\\\n\t\t\t%th\\n\\\n\t\t\t\t${1:headers}\\n\\\n\t\t%tr\\n\\\n\t\t\t%td\\n\\\n\t\t\t\t${2:headers}\\n\\\nsnippet ul\\n\\\n\t%ul\\n\\\n\t\t%li\\n\\\n\t\t\t${1:item}\\n\\\n\t\t%li\\n\\\nsnippet =rp\\n\\\n\t= render :partial => '${1:partial}'\\n\\\nsnippet =rpl\\n\\\n\t= render :partial => '${1:partial}', :locals => {}\\n\\\nsnippet =rpc\\n\\\n\t= render :partial => '${1:partial}', :collection => @$1\\n\\\n\\n\\\n\";\nexports.scope = \"haml\";\n\n});                (function() {\n                    window.require([\"ace/snippets/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/handlebars.js",
    "content": "define(\"ace/snippets/handlebars\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"handlebars\";\n\n});                (function() {\n                    window.require([\"ace/snippets/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/haskell.js",
    "content": "define(\"ace/snippets/haskell\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet lang\\n\\\n\t{-# LANGUAGE ${1:OverloadedStrings} #-}\\n\\\nsnippet info\\n\\\n\t-- |\\n\\\n\t-- Module      :  ${1:Module.Namespace}\\n\\\n\t-- Copyright   :  ${2:Author} ${3:2011-2012}\\n\\\n\t-- License     :  ${4:BSD3}\\n\\\n\t--\\n\\\n\t-- Maintainer  :  ${5:email@something.com}\\n\\\n\t-- Stability   :  ${6:experimental}\\n\\\n\t-- Portability :  ${7:unknown}\\n\\\n\t--\\n\\\n\t-- ${8:Description}\\n\\\n\t--\\n\\\nsnippet import\\n\\\n\timport           ${1:Data.Text}\\n\\\nsnippet import2\\n\\\n\timport           ${1:Data.Text} (${2:head})\\n\\\nsnippet importq\\n\\\n\timport qualified ${1:Data.Text} as ${2:T}\\n\\\nsnippet inst\\n\\\n\tinstance ${1:Monoid} ${2:Type} where\\n\\\n\t\t${3}\\n\\\nsnippet type\\n\\\n\ttype ${1:Type} = ${2:Type}\\n\\\nsnippet data\\n\\\n\tdata ${1:Type} = ${2:$1} ${3:Int}\\n\\\nsnippet newtype\\n\\\n\tnewtype ${1:Type} = ${2:$1} ${3:Int}\\n\\\nsnippet class\\n\\\n\tclass ${1:Class} a where\\n\\\n\t\t${2}\\n\\\nsnippet module\\n\\\n\tmodule `substitute(substitute(expand('%:r'), '[/\\\\\\\\]','.','g'),'^\\\\%(\\\\l*\\\\.\\\\)\\\\?','','')` (\\n\\\n\t)\twhere\\n\\\n\t`expand('%') =~ 'Main' ? \\\"\\\\n\\\\nmain = do\\\\n  print \\\\\\\"hello world\\\\\\\"\\\" : \\\"\\\"`\\n\\\n\\n\\\nsnippet const\\n\\\n\t${1:name} :: ${2:a}\\n\\\n\t$1 = ${3:undefined}\\n\\\nsnippet fn\\n\\\n\t${1:fn} :: ${2:a} -> ${3:a}\\n\\\n\t$1 ${4} = ${5:undefined}\\n\\\nsnippet fn2\\n\\\n\t${1:fn} :: ${2:a} -> ${3:a} -> ${4:a}\\n\\\n\t$1 ${5} = ${6:undefined}\\n\\\nsnippet ap\\n\\\n\t${1:map} ${2:fn} ${3:list}\\n\\\nsnippet do\\n\\\n\tdo\\n\\\n\t\t\\n\\\nsnippet λ\\n\\\n\t\\\\${1:x} -> ${2}\\n\\\nsnippet \\\\\\n\\\n\t\\\\${1:x} -> ${2}\\n\\\nsnippet <-\\n\\\n\t${1:a} <- ${2:m a}\\n\\\nsnippet ←\\n\\\n\t${1:a} <- ${2:m a}\\n\\\nsnippet ->\\n\\\n\t${1:m a} -> ${2:a}\\n\\\nsnippet →\\n\\\n\t${1:m a} -> ${2:a}\\n\\\nsnippet tup\\n\\\n\t(${1:a}, ${2:b})\\n\\\nsnippet tup2\\n\\\n\t(${1:a}, ${2:b}, ${3:c})\\n\\\nsnippet tup3\\n\\\n\t(${1:a}, ${2:b}, ${3:c}, ${4:d})\\n\\\nsnippet rec\\n\\\n\t${1:Record} { ${2:recFieldA} = ${3:undefined}\\n\\\n\t\t\t\t, ${4:recFieldB} = ${5:undefined}\\n\\\n\t\t\t\t}\\n\\\nsnippet case\\n\\\n\tcase ${1:something} of\\n\\\n\t\t${2} -> ${3}\\n\\\nsnippet let\\n\\\n\tlet ${1} = ${2}\\n\\\n\tin ${3}\\n\\\nsnippet where\\n\\\n\twhere\\n\\\n\t\t${1:fn} = ${2:undefined}\\n\\\n\";\nexports.scope = \"haskell\";\n\n});                (function() {\n                    window.require([\"ace/snippets/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/haskell_cabal.js",
    "content": "define(\"ace/snippets/haskell_cabal\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"haskell_cabal\";\n\n});                (function() {\n                    window.require([\"ace/snippets/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/haxe.js",
    "content": "define(\"ace/snippets/haxe\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"haxe\";\n\n});                (function() {\n                    window.require([\"ace/snippets/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/hjson.js",
    "content": "define(\"ace/snippets/hjson\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/html.js",
    "content": "define(\"ace/snippets/html\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Some useful Unicode entities\\n\\\n# Non-Breaking Space\\n\\\nsnippet nbs\\n\\\n\t&nbsp;\\n\\\n# ←\\n\\\nsnippet left\\n\\\n\t&#x2190;\\n\\\n# →\\n\\\nsnippet right\\n\\\n\t&#x2192;\\n\\\n# ↑\\n\\\nsnippet up\\n\\\n\t&#x2191;\\n\\\n# ↓\\n\\\nsnippet down\\n\\\n\t&#x2193;\\n\\\n# ↩\\n\\\nsnippet return\\n\\\n\t&#x21A9;\\n\\\n# ⇤\\n\\\nsnippet backtab\\n\\\n\t&#x21E4;\\n\\\n# ⇥\\n\\\nsnippet tab\\n\\\n\t&#x21E5;\\n\\\n# ⇧\\n\\\nsnippet shift\\n\\\n\t&#x21E7;\\n\\\n# ⌃\\n\\\nsnippet ctrl\\n\\\n\t&#x2303;\\n\\\n# ⌅\\n\\\nsnippet enter\\n\\\n\t&#x2305;\\n\\\n# ⌘\\n\\\nsnippet cmd\\n\\\n\t&#x2318;\\n\\\n# ⌥\\n\\\nsnippet option\\n\\\n\t&#x2325;\\n\\\n# ⌦\\n\\\nsnippet delete\\n\\\n\t&#x2326;\\n\\\n# ⌫\\n\\\nsnippet backspace\\n\\\n\t&#x232B;\\n\\\n# ⎋\\n\\\nsnippet esc\\n\\\n\t&#x238B;\\n\\\n# Generic Doctype\\n\\\nsnippet doctype HTML 4.01 Strict\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\nsnippet doctype HTML 4.01 Transitional\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\nsnippet doctype HTML 5\\n\\\n\t<!DOCTYPE HTML>\\n\\\nsnippet doctype XHTML 1.0 Frameset\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Strict\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Transitional\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\nsnippet doctype XHTML 1.1\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# HTML Doctype 4.01 Strict\\n\\\nsnippet docts\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\n# HTML Doctype 4.01 Transitional\\n\\\nsnippet doct\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\n# HTML Doctype 5\\n\\\nsnippet doct5\\n\\\n\t<!DOCTYPE html>\\n\\\n# XHTML Doctype 1.0 Frameset\\n\\\nsnippet docxf\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Frameset//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Strict\\n\\\nsnippet docxs\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Transitional\\n\\\nsnippet docxt\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\n# XHTML Doctype 1.1\\n\\\nsnippet docx\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# html5shiv\\n\\\nsnippet html5shiv\\n\\\n\t<!--[if lte IE 8]>\\n\\\n\t\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\\\"></script>\\n\\\n\t<![endif]-->\\n\\\nsnippet html5printshiv\\n\\\n\t<!--[if lte IE 8]>\\n\\\n\t\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\\\"></script>\\n\\\n\t<![endif]-->\\n\\\n# Attributes\\n\\\nsnippet attr\\n\\\n\t${1:attribute}=\\\"${2:property}\\\"\\n\\\nsnippet attr+\\n\\\n\t${1:attribute}=\\\"${2:property}\\\" attr+${3}\\n\\\nsnippet .\\n\\\n\tclass=\\\"${1}\\\"${2}\\n\\\nsnippet #\\n\\\n\tid=\\\"${1}\\\"${2}\\n\\\nsnippet alt\\n\\\n\talt=\\\"${1}\\\"${2}\\n\\\nsnippet charset\\n\\\n\tcharset=\\\"${1:utf-8}\\\"${2}\\n\\\nsnippet data\\n\\\n\tdata-${1}=\\\"${2:$1}\\\"${3}\\n\\\nsnippet for\\n\\\n\tfor=\\\"${1}\\\"${2}\\n\\\nsnippet height\\n\\\n\theight=\\\"${1}\\\"${2}\\n\\\nsnippet href\\n\\\n\thref=\\\"${1:#}\\\"${2}\\n\\\nsnippet lang\\n\\\n\tlang=\\\"${1:en}\\\"${2}\\n\\\nsnippet media\\n\\\n\tmedia=\\\"${1}\\\"${2}\\n\\\nsnippet name\\n\\\n\tname=\\\"${1}\\\"${2}\\n\\\nsnippet rel\\n\\\n\trel=\\\"${1}\\\"${2}\\n\\\nsnippet scope\\n\\\n\tscope=\\\"${1:row}\\\"${2}\\n\\\nsnippet src\\n\\\n\tsrc=\\\"${1}\\\"${2}\\n\\\nsnippet title=\\n\\\n\ttitle=\\\"${1}\\\"${2}\\n\\\nsnippet type\\n\\\n\ttype=\\\"${1}\\\"${2}\\n\\\nsnippet value\\n\\\n\tvalue=\\\"${1}\\\"${2}\\n\\\nsnippet width\\n\\\n\twidth=\\\"${1}\\\"${2}\\n\\\n# Elements\\n\\\nsnippet a\\n\\\n\t<a href=\\\"${1:#}\\\">${2:$1}</a>\\n\\\nsnippet a.\\n\\\n\t<a class=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a#\\n\\\n\t<a id=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a:ext\\n\\\n\t<a href=\\\"http://${1:example.com}\\\">${2:$1}</a>\\n\\\nsnippet a:mail\\n\\\n\t<a href=\\\"mailto:${1:joe@example.com}?subject=${2:feedback}\\\">${3:email me}</a>\\n\\\nsnippet abbr\\n\\\n\t<abbr title=\\\"${1}\\\">${2}</abbr>\\n\\\nsnippet address\\n\\\n\t<address>\\n\\\n\t\t${1}\\n\\\n\t</address>\\n\\\nsnippet area\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\nsnippet area+\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\n\tarea+${5}\\n\\\nsnippet area:c\\n\\\n\t<area shape=\\\"circle\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:d\\n\\\n\t<area shape=\\\"default\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:p\\n\\\n\t<area shape=\\\"poly\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:r\\n\\\n\t<area shape=\\\"rect\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet article\\n\\\n\t<article>\\n\\\n\t\t${1}\\n\\\n\t</article>\\n\\\nsnippet article.\\n\\\n\t<article class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet article#\\n\\\n\t<article id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet aside\\n\\\n\t<aside>\\n\\\n\t\t${1}\\n\\\n\t</aside>\\n\\\nsnippet aside.\\n\\\n\t<aside class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet aside#\\n\\\n\t<aside id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet audio\\n\\\n\t<audio src=\\\"${1}>${2}</audio>\\n\\\nsnippet b\\n\\\n\t<b>${1}</b>\\n\\\nsnippet base\\n\\\n\t<base href=\\\"${1}\\\" target=\\\"${2}\\\" />\\n\\\nsnippet bdi\\n\\\n\t<bdi>${1}</bdo>\\n\\\nsnippet bdo\\n\\\n\t<bdo dir=\\\"${1}\\\">${2}</bdo>\\n\\\nsnippet bdo:l\\n\\\n\t<bdo dir=\\\"ltr\\\">${1}</bdo>\\n\\\nsnippet bdo:r\\n\\\n\t<bdo dir=\\\"rtl\\\">${1}</bdo>\\n\\\nsnippet blockquote\\n\\\n\t<blockquote>\\n\\\n\t\t${1}\\n\\\n\t</blockquote>\\n\\\nsnippet body\\n\\\n\t<body>\\n\\\n\t\t${1}\\n\\\n\t</body>\\n\\\nsnippet br\\n\\\n\t<br />${1}\\n\\\nsnippet button\\n\\\n\t<button type=\\\"${1:submit}\\\">${2}</button>\\n\\\nsnippet button.\\n\\\n\t<button class=\\\"${1:button}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button#\\n\\\n\t<button id=\\\"${1}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button:s\\n\\\n\t<button type=\\\"submit\\\">${1}</button>\\n\\\nsnippet button:r\\n\\\n\t<button type=\\\"reset\\\">${1}</button>\\n\\\nsnippet canvas\\n\\\n\t<canvas>\\n\\\n\t\t${1}\\n\\\n\t</canvas>\\n\\\nsnippet caption\\n\\\n\t<caption>${1}</caption>\\n\\\nsnippet cite\\n\\\n\t<cite>${1}</cite>\\n\\\nsnippet code\\n\\\n\t<code>${1}</code>\\n\\\nsnippet col\\n\\\n\t<col />${1}\\n\\\nsnippet col+\\n\\\n\t<col />\\n\\\n\tcol+${1}\\n\\\nsnippet colgroup\\n\\\n\t<colgroup>\\n\\\n\t\t${1}\\n\\\n\t</colgroup>\\n\\\nsnippet colgroup+\\n\\\n\t<colgroup>\\n\\\n\t\t<col />\\n\\\n\t\tcol+${1}\\n\\\n\t</colgroup>\\n\\\nsnippet command\\n\\\n\t<command type=\\\"command\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:c\\n\\\n\t<command type=\\\"checkbox\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:r\\n\\\n\t<command type=\\\"radio\\\" radiogroup=\\\"${1}\\\" label=\\\"${2}\\\" icon=\\\"${3}\\\" />\\n\\\nsnippet datagrid\\n\\\n\t<datagrid>\\n\\\n\t\t${1}\\n\\\n\t</datagrid>\\n\\\nsnippet datalist\\n\\\n\t<datalist>\\n\\\n\t\t${1}\\n\\\n\t</datalist>\\n\\\nsnippet datatemplate\\n\\\n\t<datatemplate>\\n\\\n\t\t${1}\\n\\\n\t</datatemplate>\\n\\\nsnippet dd\\n\\\n\t<dd>${1}</dd>\\n\\\nsnippet dd.\\n\\\n\t<dd class=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet dd#\\n\\\n\t<dd id=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet del\\n\\\n\t<del>${1}</del>\\n\\\nsnippet details\\n\\\n\t<details>${1}</details>\\n\\\nsnippet dfn\\n\\\n\t<dfn>${1}</dfn>\\n\\\nsnippet dialog\\n\\\n\t<dialog>\\n\\\n\t\t${1}\\n\\\n\t</dialog>\\n\\\nsnippet div\\n\\\n\t<div>\\n\\\n\t\t${1}\\n\\\n\t</div>\\n\\\nsnippet div.\\n\\\n\t<div class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet div#\\n\\\n\t<div id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet dl\\n\\\n\t<dl>\\n\\\n\t\t${1}\\n\\\n\t</dl>\\n\\\nsnippet dl.\\n\\\n\t<dl class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl#\\n\\\n\t<dl id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl+\\n\\\n\t<dl>\\n\\\n\t\t<dt>${1}</dt>\\n\\\n\t\t<dd>${2}</dd>\\n\\\n\t\tdt+${3}\\n\\\n\t</dl>\\n\\\nsnippet dt\\n\\\n\t<dt>${1}</dt>\\n\\\nsnippet dt.\\n\\\n\t<dt class=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt#\\n\\\n\t<dt id=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt+\\n\\\n\t<dt>${1}</dt>\\n\\\n\t<dd>${2}</dd>\\n\\\n\tdt+${3}\\n\\\nsnippet em\\n\\\n\t<em>${1}</em>\\n\\\nsnippet embed\\n\\\n\t<embed src=${1} type=\\\"${2} />\\n\\\nsnippet fieldset\\n\\\n\t<fieldset>\\n\\\n\t\t${1}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset.\\n\\\n\t<fieldset class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset#\\n\\\n\t<fieldset id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset+\\n\\\n\t<fieldset>\\n\\\n\t\t<legend><span>${1}</span></legend>\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\n\tfieldset+${3}\\n\\\nsnippet figcaption\\n\\\n\t<figcaption>${1}</figcaption>\\n\\\nsnippet figure\\n\\\n\t<figure>${1}</figure>\\n\\\nsnippet footer\\n\\\n\t<footer>\\n\\\n\t\t${1}\\n\\\n\t</footer>\\n\\\nsnippet footer.\\n\\\n\t<footer class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet footer#\\n\\\n\t<footer id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet form\\n\\\n\t<form action=\\\"${1}\\\" method=\\\"${2:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${3}\\n\\\n\t</form>\\n\\\nsnippet form.\\n\\\n\t<form class=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet form#\\n\\\n\t<form id=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet h1\\n\\\n\t<h1>${1}</h1>\\n\\\nsnippet h1.\\n\\\n\t<h1 class=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h1#\\n\\\n\t<h1 id=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h2\\n\\\n\t<h2>${1}</h2>\\n\\\nsnippet h2.\\n\\\n\t<h2 class=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h2#\\n\\\n\t<h2 id=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h3\\n\\\n\t<h3>${1}</h3>\\n\\\nsnippet h3.\\n\\\n\t<h3 class=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h3#\\n\\\n\t<h3 id=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h4\\n\\\n\t<h4>${1}</h4>\\n\\\nsnippet h4.\\n\\\n\t<h4 class=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h4#\\n\\\n\t<h4 id=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h5\\n\\\n\t<h5>${1}</h5>\\n\\\nsnippet h5.\\n\\\n\t<h5 class=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h5#\\n\\\n\t<h5 id=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h6\\n\\\n\t<h6>${1}</h6>\\n\\\nsnippet h6.\\n\\\n\t<h6 class=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet h6#\\n\\\n\t<h6 id=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet head\\n\\\n\t<head>\\n\\\n\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\\n\\\n\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t${2}\\n\\\n\t</head>\\n\\\nsnippet header\\n\\\n\t<header>\\n\\\n\t\t${1}\\n\\\n\t</header>\\n\\\nsnippet header.\\n\\\n\t<header class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet header#\\n\\\n\t<header id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet hgroup\\n\\\n\t<hgroup>\\n\\\n\t\t${1}\\n\\\n\t</hgroup>\\n\\\nsnippet hgroup.\\n\\\n\t<hgroup class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</hgroup>\\n\\\nsnippet hr\\n\\\n\t<hr />${1}\\n\\\nsnippet html\\n\\\n\t<html>\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet xhtml\\n\\\n\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet html5\\n\\\n\t<!DOCTYPE html>\\n\\\n\t<html>\\n\\\n\t\t<head>\\n\\\n\t\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t\t${2:meta}\\n\\\n\t\t</head>\\n\\\n\t\t<body>\\n\\\n\t\t\t${3:body}\\n\\\n\t\t</body>\\n\\\n\t</html>\\n\\\nsnippet xhtml5\\n\\\n\t<!DOCTYPE html>\\n\\\n\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\\n\t\t<head>\\n\\\n\t\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"application/xhtml+xml; charset=utf-8\\\" />\\n\\\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t\t${2:meta}\\n\\\n\t\t</head>\\n\\\n\t\t<body>\\n\\\n\t\t\t${3:body}\\n\\\n\t\t</body>\\n\\\n\t</html>\\n\\\nsnippet i\\n\\\n\t<i>${1}</i>\\n\\\nsnippet iframe\\n\\\n\t<iframe src=\\\"${1}\\\" frameborder=\\\"0\\\"></iframe>${2}\\n\\\nsnippet iframe.\\n\\\n\t<iframe class=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet iframe#\\n\\\n\t<iframe id=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet img\\n\\\n\t<img src=\\\"${1}\\\" alt=\\\"${2}\\\" />${3}\\n\\\nsnippet img.\\n\\\n\t<img class=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet img#\\n\\\n\t<img id=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet input\\n\\\n\t<input type=\\\"${1:text/submit/hidden/button/image}\\\" name=\\\"${2}\\\" id=\\\"${3:$2}\\\" value=\\\"${4}\\\" />${5}\\n\\\nsnippet input.\\n\\\n\t<input class=\\\"${1}\\\" type=\\\"${2:text/submit/hidden/button/image}\\\" name=\\\"${3}\\\" id=\\\"${4:$3}\\\" value=\\\"${5}\\\" />${6}\\n\\\nsnippet input:text\\n\\\n\t<input type=\\\"text\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:submit\\n\\\n\t<input type=\\\"submit\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:hidden\\n\\\n\t<input type=\\\"hidden\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:button\\n\\\n\t<input type=\\\"button\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:image\\n\\\n\t<input type=\\\"image\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" src=\\\"${3}\\\" alt=\\\"${4}\\\" />${5}\\n\\\nsnippet input:checkbox\\n\\\n\t<input type=\\\"checkbox\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:radio\\n\\\n\t<input type=\\\"radio\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:color\\n\\\n\t<input type=\\\"color\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:date\\n\\\n\t<input type=\\\"date\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime\\n\\\n\t<input type=\\\"datetime\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime-local\\n\\\n\t<input type=\\\"datetime-local\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:email\\n\\\n\t<input type=\\\"email\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:file\\n\\\n\t<input type=\\\"file\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:month\\n\\\n\t<input type=\\\"month\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:number\\n\\\n\t<input type=\\\"number\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:password\\n\\\n\t<input type=\\\"password\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:range\\n\\\n\t<input type=\\\"range\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:reset\\n\\\n\t<input type=\\\"reset\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:search\\n\\\n\t<input type=\\\"search\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:time\\n\\\n\t<input type=\\\"time\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:url\\n\\\n\t<input type=\\\"url\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:week\\n\\\n\t<input type=\\\"week\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet ins\\n\\\n\t<ins>${1}</ins>\\n\\\nsnippet kbd\\n\\\n\t<kbd>${1}</kbd>\\n\\\nsnippet keygen\\n\\\n\t<keygen>${1}</keygen>\\n\\\nsnippet label\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\nsnippet label:i\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<input type=\\\"${3:text/submit/hidden/button}\\\" name=\\\"${4:$2}\\\" id=\\\"${5:$2}\\\" value=\\\"${6}\\\" />${7}\\n\\\nsnippet label:s\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<select name=\\\"${3:$2}\\\" id=\\\"${4:$2}\\\">\\n\\\n\t\t<option value=\\\"${5}\\\">${6:$5}</option>\\n\\\n\t</select>\\n\\\nsnippet legend\\n\\\n\t<legend>${1}</legend>\\n\\\nsnippet legend+\\n\\\n\t<legend><span>${1}</span></legend>\\n\\\nsnippet li\\n\\\n\t<li>${1}</li>\\n\\\nsnippet li.\\n\\\n\t<li class=\\\"${1}\\\">${2}</li>\\n\\\nsnippet li+\\n\\\n\t<li>${1}</li>\\n\\\n\tli+${2}\\n\\\nsnippet lia\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\nsnippet lia+\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\n\tlia+${3}\\n\\\nsnippet link\\n\\\n\t<link rel=\\\"${1}\\\" href=\\\"${2}\\\" title=\\\"${3}\\\" type=\\\"${4}\\\" />${5}\\n\\\nsnippet link:atom\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:atom.xml}\\\" title=\\\"Atom\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:css\\n\\\n\t<link rel=\\\"stylesheet\\\" href=\\\"${2:style.css}\\\" type=\\\"text/css\\\" media=\\\"${3:all}\\\" />${4}\\n\\\nsnippet link:favicon\\n\\\n\t<link rel=\\\"shortcut icon\\\" href=\\\"${1:favicon.ico}\\\" type=\\\"image/x-icon\\\" />${2}\\n\\\nsnippet link:rss\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:rss.xml}\\\" title=\\\"RSS\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:touch\\n\\\n\t<link rel=\\\"apple-touch-icon\\\" href=\\\"${1:favicon.png}\\\" />${2}\\n\\\nsnippet map\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</map>\\n\\\nsnippet map.\\n\\\n\t<map class=\\\"${1}\\\" name=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map#\\n\\\n\t<map name=\\\"${1}\\\" id=\\\"${2:$1}>\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map+\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t<area shape=\\\"${2}\\\" coords=\\\"${3}\\\" href=\\\"${4}\\\" alt=\\\"${5}\\\" />${6}\\n\\\n\t</map>${7}\\n\\\nsnippet mark\\n\\\n\t<mark>${1}</mark>\\n\\\nsnippet menu\\n\\\n\t<menu>\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:c\\n\\\n\t<menu type=\\\"context\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:t\\n\\\n\t<menu type=\\\"toolbar\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet meta\\n\\\n\t<meta http-equiv=\\\"${1}\\\" content=\\\"${2}\\\" />${3}\\n\\\nsnippet meta:compat\\n\\\n\t<meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=${1:7,8,edge}\\\" />${3}\\n\\\nsnippet meta:refresh\\n\\\n\t<meta http-equiv=\\\"refresh\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meta:utf\\n\\\n\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meter\\n\\\n\t<meter>${1}</meter>\\n\\\nsnippet nav\\n\\\n\t<nav>\\n\\\n\t\t${1}\\n\\\n\t</nav>\\n\\\nsnippet nav.\\n\\\n\t<nav class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet nav#\\n\\\n\t<nav id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet noscript\\n\\\n\t<noscript>\\n\\\n\t\t${1}\\n\\\n\t</noscript>\\n\\\nsnippet object\\n\\\n\t<object data=\\\"${1}\\\" type=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</object>${4}\\n\\\n# Embed QT Movie\\n\\\nsnippet movie\\n\\\n\t<object width=\\\"$2\\\" height=\\\"$3\\\" classid=\\\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\\\"\\n\\\n\t codebase=\\\"http://www.apple.com/qtactivex/qtplugin.cab\\\">\\n\\\n\t\t<param name=\\\"src\\\" value=\\\"$1\\\" />\\n\\\n\t\t<param name=\\\"controller\\\" value=\\\"$4\\\" />\\n\\\n\t\t<param name=\\\"autoplay\\\" value=\\\"$5\\\" />\\n\\\n\t\t<embed src=\\\"${1:movie.mov}\\\"\\n\\\n\t\t\twidth=\\\"${2:320}\\\" height=\\\"${3:240}\\\"\\n\\\n\t\t\tcontroller=\\\"${4:true}\\\" autoplay=\\\"${5:true}\\\"\\n\\\n\t\t\tscale=\\\"tofit\\\" cache=\\\"true\\\"\\n\\\n\t\t\tpluginspage=\\\"http://www.apple.com/quicktime/download/\\\" />\\n\\\n\t</object>${6}\\n\\\nsnippet ol\\n\\\n\t<ol>\\n\\\n\t\t${1}\\n\\\n\t</ol>\\n\\\nsnippet ol.\\n\\\n\t<ol class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol#\\n\\\n\t<ol id=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol+\\n\\\n\t<ol>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ol>\\n\\\nsnippet opt\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\nsnippet opt+\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\topt+${3}\\n\\\nsnippet optt\\n\\\n\t<option>${1}</option>\\n\\\nsnippet optgroup\\n\\\n\t<optgroup>\\n\\\n\t\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\t\topt+${3}\\n\\\n\t</optgroup>\\n\\\nsnippet output\\n\\\n\t<output>${1}</output>\\n\\\nsnippet p\\n\\\n\t<p>${1}</p>\\n\\\nsnippet param\\n\\\n\t<param name=\\\"${1}\\\" value=\\\"${2}\\\" />${3}\\n\\\nsnippet pre\\n\\\n\t<pre>\\n\\\n\t\t${1}\\n\\\n\t</pre>\\n\\\nsnippet progress\\n\\\n\t<progress>${1}</progress>\\n\\\nsnippet q\\n\\\n\t<q>${1}</q>\\n\\\nsnippet rp\\n\\\n\t<rp>${1}</rp>\\n\\\nsnippet rt\\n\\\n\t<rt>${1}</rt>\\n\\\nsnippet ruby\\n\\\n\t<ruby>\\n\\\n\t\t<rp><rt>${1}</rt></rp>\\n\\\n\t</ruby>\\n\\\nsnippet s\\n\\\n\t<s>${1}</s>\\n\\\nsnippet samp\\n\\\n\t<samp>\\n\\\n\t\t${1}\\n\\\n\t</samp>\\n\\\nsnippet script\\n\\\n\t<script type=\\\"text/javascript\\\" charset=\\\"utf-8\\\">\\n\\\n\t\t${1}\\n\\\n\t</script>\\n\\\nsnippet scriptsrc\\n\\\n\t<script src=\\\"${1}.js\\\" type=\\\"text/javascript\\\" charset=\\\"utf-8\\\"></script>\\n\\\nsnippet newscript\\n\\\n\t<script type=\\\"application/javascript\\\" charset=\\\"utf-8\\\">\\n\\\n\t\t${1}\\n\\\n\t</script>\\n\\\nsnippet newscriptsrc\\n\\\n\t<script src=\\\"${1}.js\\\" type=\\\"application/javascript\\\" charset=\\\"utf-8\\\"></script>\\n\\\nsnippet section\\n\\\n\t<section>\\n\\\n\t\t${1}\\n\\\n\t</section>\\n\\\nsnippet section.\\n\\\n\t<section class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet section#\\n\\\n\t<section id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet select\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t${3}\\n\\\n\t</select>\\n\\\nsnippet select.\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\" class=\\\"${3}>\\n\\\n\t\t${4}\\n\\\n\t</select>\\n\\\nsnippet select+\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t<option value=\\\"${3}\\\">${4:$3}</option>\\n\\\n\t\topt+${5}\\n\\\n\t</select>\\n\\\nsnippet small\\n\\\n\t<small>${1}</small>\\n\\\nsnippet source\\n\\\n\t<source src=\\\"${1}\\\" type=\\\"${2}\\\" media=\\\"${3}\\\" />\\n\\\nsnippet span\\n\\\n\t<span>${1}</span>\\n\\\nsnippet strong\\n\\\n\t<strong>${1}</strong>\\n\\\nsnippet style\\n\\\n\t<style type=\\\"text/css\\\" media=\\\"${1:all}\\\">\\n\\\n\t\t${2}\\n\\\n\t</style>\\n\\\nsnippet sub\\n\\\n\t<sub>${1}</sub>\\n\\\nsnippet summary\\n\\\n\t<summary>\\n\\\n\t\t${1}\\n\\\n\t</summary>\\n\\\nsnippet sup\\n\\\n\t<sup>${1}</sup>\\n\\\nsnippet table\\n\\\n\t<table border=\\\"${1:0}\\\">\\n\\\n\t\t${2}\\n\\\n\t</table>\\n\\\nsnippet table.\\n\\\n\t<table class=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet table#\\n\\\n\t<table id=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet tbody\\n\\\n\t<tbody>\\n\\\n\t\t${1}\\n\\\n\t</tbody>\\n\\\nsnippet td\\n\\\n\t<td>${1}</td>\\n\\\nsnippet td.\\n\\\n\t<td class=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td#\\n\\\n\t<td id=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td+\\n\\\n\t<td>${1}</td>\\n\\\n\ttd+${2}\\n\\\nsnippet textarea\\n\\\n\t<textarea name=\\\"${1}\\\" id=${2:$1} rows=\\\"${3:8}\\\" cols=\\\"${4:40}\\\">${5}</textarea>${6}\\n\\\nsnippet tfoot\\n\\\n\t<tfoot>\\n\\\n\t\t${1}\\n\\\n\t</tfoot>\\n\\\nsnippet th\\n\\\n\t<th>${1}</th>\\n\\\nsnippet th.\\n\\\n\t<th class=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th#\\n\\\n\t<th id=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th+\\n\\\n\t<th>${1}</th>\\n\\\n\tth+${2}\\n\\\nsnippet thead\\n\\\n\t<thead>\\n\\\n\t\t${1}\\n\\\n\t</thead>\\n\\\nsnippet time\\n\\\n\t<time datetime=\\\"${1}\\\" pubdate=\\\"${2:$1}>${3:$1}</time>\\n\\\nsnippet title\\n\\\n\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\nsnippet tr\\n\\\n\t<tr>\\n\\\n\t\t${1}\\n\\\n\t</tr>\\n\\\nsnippet tr+\\n\\\n\t<tr>\\n\\\n\t\t<td>${1}</td>\\n\\\n\t\ttd+${2}\\n\\\n\t</tr>\\n\\\nsnippet track\\n\\\n\t<track src=\\\"${1}\\\" srclang=\\\"${2}\\\" label=\\\"${3}\\\" default=\\\"${4:default}>${5}</track>${6}\\n\\\nsnippet ul\\n\\\n\t<ul>\\n\\\n\t\t${1}\\n\\\n\t</ul>\\n\\\nsnippet ul.\\n\\\n\t<ul class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul#\\n\\\n\t<ul id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul+\\n\\\n\t<ul>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ul>\\n\\\nsnippet var\\n\\\n\t<var>${1}</var>\\n\\\nsnippet video\\n\\\n\t<video src=\\\"${1} height=\\\"${2}\\\" width=\\\"${3}\\\" preload=\\\"${5:none}\\\" autoplay=\\\"${6:autoplay}>${7}</video>${8}\\n\\\nsnippet wbr\\n\\\n\t<wbr />${1}\\n\\\n\";\nexports.scope = \"html\";\n\n});                (function() {\n                    window.require([\"ace/snippets/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/html_elixir.js",
    "content": "define(\"ace/snippets/html_elixir\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"html_elixir\";\n\n});                (function() {\n                    window.require([\"ace/snippets/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/html_ruby.js",
    "content": "define(\"ace/snippets/html_ruby\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"html_ruby\";\n\n});                (function() {\n                    window.require([\"ace/snippets/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/ini.js",
    "content": "define(\"ace/snippets/ini\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ini\";\n\n});                (function() {\n                    window.require([\"ace/snippets/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/io.js",
    "content": "define(\"ace/snippets/io\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippets = [\n    {\n        \"content\": \"assertEquals(${1:expected}, ${2:expr})\",\n        \"name\": \"assertEquals\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ae\"\n    },\n    {\n        \"content\": \"${1:${2:newValue} := ${3:Object} }clone do(\\n\\t$0\\n)\",\n        \"name\": \"clone do\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"cdo\"\n    },\n    {\n        \"content\": \"docSlot(\\\"${1:slotName}\\\", \\\"${2:documentation}\\\")\",\n        \"name\": \"docSlot\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ds\"\n    },\n    {\n        \"content\": \"(${1:header,}\\n\\t${2:body}\\n)$0\",\n        \"keyEquivalent\": \"@(\",\n        \"name\": \"Indented Bracketed Line\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"(\"\n    },\n    {\n        \"content\": \"\\n\\t$0\\n\",\n        \"keyEquivalent\": \"\\r\",\n        \"name\": \"Special: Return Inside Empty Parenthesis\",\n        \"scope\": \"io meta.empty-parenthesis.io, io meta.comma-parenthesis.io\"\n    },\n    {\n        \"content\": \"${1:methodName} := method(${2:args,}\\n\\t$0\\n)\",\n        \"name\": \"method\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"m\"\n    },\n    {\n        \"content\": \"newSlot(\\\"${1:slotName}\\\", ${2:defaultValue}, \\\"${3:docString}\\\")$0\",\n        \"name\": \"newSlot\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ns\"\n    },\n    {\n        \"content\": \"${1:name} := Object clone do(\\n\\t$0\\n)\",\n        \"name\": \"Object clone do\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ocdo\"\n    },\n    {\n        \"content\": \"test${1:SomeFeature} := method(\\n\\t$0\\n)\",\n        \"name\": \"testMethod\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ts\"\n    },\n    {\n        \"content\": \"${1:Something}Test := ${2:UnitTest} clone do(\\n\\t$0\\n)\",\n        \"name\": \"UnitTest\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ut\"\n    }\n];\nexports.scope = \"io\";\n\n});                (function() {\n                    window.require([\"ace/snippets/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/jack.js",
    "content": "define(\"ace/snippets/jack\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"jack\";\n\n});                (function() {\n                    window.require([\"ace/snippets/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/jade.js",
    "content": "define(\"ace/snippets/jade\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"jade\";\n\n});                (function() {\n                    window.require([\"ace/snippets/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/java.js",
    "content": "define(\"ace/snippets/java\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"## Access Modifiers\\n\\\nsnippet po\\n\\\n\tprotected\\n\\\nsnippet pu\\n\\\n\tpublic\\n\\\nsnippet pr\\n\\\n\tprivate\\n\\\n##\\n\\\n## Annotations\\n\\\nsnippet before\\n\\\n\t@Before\\n\\\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\\n\\\nsnippet mm\\n\\\n\t@ManyToMany\\n\\\n\t${1}\\n\\\nsnippet mo\\n\\\n\t@ManyToOne\\n\\\n\t${1}\\n\\\nsnippet om\\n\\\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\\\n\t${2}\\n\\\nsnippet oo\\n\\\n\t@OneToOne\\n\\\n\t${1}\\n\\\n##\\n\\\n## Basic Java packages and import\\n\\\nsnippet im\\n\\\n\timport\\n\\\nsnippet j.b\\n\\\n\tjava.beans.\\n\\\nsnippet j.i\\n\\\n\tjava.io.\\n\\\nsnippet j.m\\n\\\n\tjava.math.\\n\\\nsnippet j.n\\n\\\n\tjava.net.\\n\\\nsnippet j.u\\n\\\n\tjava.util.\\n\\\n##\\n\\\n## Class\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\n\\\nsnippet in\\n\\\n\tinterface ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2:extends Parent}${3}\\n\\\nsnippet tc\\n\\\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n\\\n##\\n\\\n## Class Enhancements\\n\\\nsnippet ext\\n\\\n\textends \\n\\\nsnippet imp\\n\\\n\timplements\\n\\\n##\\n\\\n## Comments\\n\\\nsnippet /*\\n\\\n\t/*\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n##\\n\\\n## Constants\\n\\\nsnippet co\\n\\\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\\n\\\nsnippet cos\\n\\\n\tstatic public final String ${1:var} = \\\"${2}\\\";${3}\\n\\\n##\\n\\\n## Control Statements\\n\\\nsnippet case\\n\\\n\tcase ${1}:\\n\\\n\t\t${2}\\n\\\nsnippet def\\n\\\n\tdefault:\\n\\\n\t\t${2}\\n\\\nsnippet el\\n\\\n\telse\\n\\\nsnippet elif\\n\\\n\telse if (${1}) ${2}\\n\\\nsnippet if\\n\\\n\tif (${1}) ${2}\\n\\\nsnippet sw\\n\\\n\tswitch (${1}) {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\n##\\n\\\n## Create a Method\\n\\\nsnippet m\\n\\\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n\\\n##\\n\\\n## Create a Variable\\n\\\nsnippet v\\n\\\n\t${1:String} ${2:var}${3: = null}${4};${5}\\n\\\n##\\n\\\n## Enhancements to Methods, variables, classes, etc.\\n\\\nsnippet ab\\n\\\n\tabstract\\n\\\nsnippet fi\\n\\\n\tfinal\\n\\\nsnippet st\\n\\\n\tstatic\\n\\\nsnippet sy\\n\\\n\tsynchronized\\n\\\n##\\n\\\n## Error Methods\\n\\\nsnippet err\\n\\\n\tSystem.err.print(\\\"${1:Message}\\\");\\n\\\nsnippet errf\\n\\\n\tSystem.err.printf(\\\"${1:Message}\\\", ${2:exception});\\n\\\nsnippet errln\\n\\\n\tSystem.err.println(\\\"${1:Message}\\\");\\n\\\n##\\n\\\n## Exception Handling\\n\\\nsnippet as\\n\\\n\tassert ${1:test} : \\\"${2:Failure message}\\\";${3}\\n\\\nsnippet ca\\n\\\n\tcatch(${1:Exception} ${2:e}) ${3}\\n\\\nsnippet thr\\n\\\n\tthrow\\n\\\nsnippet ths\\n\\\n\tthrows\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch(${1:Exception} ${2:e}) {\\n\\\n\t}\\n\\\nsnippet tryf\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch(${1:Exception} ${2:e}) {\\n\\\n\t} finally {\\n\\\n\t}\\n\\\n##\\n\\\n## Find Methods\\n\\\nsnippet findall\\n\\\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\n\\\nsnippet findbyid\\n\\\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n\\\n##\\n\\\n## Javadocs\\n\\\nsnippet /**\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\nsnippet @au\\n\\\n\t@author `system(\\\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\\\":\\\\\\\" -f5 | cut -d \\\\\\\",\\\\\\\" -f1\\\")`\\n\\\nsnippet @br\\n\\\n\t@brief ${1:Description}\\n\\\nsnippet @fi\\n\\\n\t@file ${1:`Filename()`}.java\\n\\\nsnippet @pa\\n\\\n\t@param ${1:param}\\n\\\nsnippet @re\\n\\\n\t@return ${1:param}\\n\\\n##\\n\\\n## Logger Methods\\n\\\nsnippet debug\\n\\\n\tLogger.debug(${1:param});${2}\\n\\\nsnippet error\\n\\\n\tLogger.error(${1:param});${2}\\n\\\nsnippet info\\n\\\n\tLogger.info(${1:param});${2}\\n\\\nsnippet warn\\n\\\n\tLogger.warn(${1:param});${2}\\n\\\n##\\n\\\n## Loops\\n\\\nsnippet enfor\\n\\\n\tfor (${1} : ${2}) ${3}\\n\\\nsnippet for\\n\\\n\tfor (${1}; ${2}; ${3}) ${4}\\n\\\nsnippet wh\\n\\\n\twhile (${1}) ${2}\\n\\\n##\\n\\\n## Main method\\n\\\nsnippet main\\n\\\n\tpublic static void main (String[] args) {\\n\\\n\t\t${1:/* code */}\\n\\\n\t}\\n\\\n##\\n\\\n## Print Methods\\n\\\nsnippet print\\n\\\n\tSystem.out.print(\\\"${1:Message}\\\");\\n\\\nsnippet printf\\n\\\n\tSystem.out.printf(\\\"${1:Message}\\\", ${2:args});\\n\\\nsnippet println\\n\\\n\tSystem.out.println(${1});\\n\\\n##\\n\\\n## Render Methods\\n\\\nsnippet ren\\n\\\n\trender(${1:param});${2}\\n\\\nsnippet rena\\n\\\n\trenderArgs.put(\\\"${1}\\\", ${2});${3}\\n\\\nsnippet renb\\n\\\n\trenderBinary(${1:param});${2}\\n\\\nsnippet renj\\n\\\n\trenderJSON(${1:param});${2}\\n\\\nsnippet renx\\n\\\n\trenderXml(${1:param});${2}\\n\\\n##\\n\\\n## Setter and Getter Methods\\n\\\nsnippet set\\n\\\n\t${1:public} void set${3:}(${2:String} ${4:}){\\n\\\n\t\tthis.$4 = $4;\\n\\\n\t}\\n\\\nsnippet get\\n\\\n\t${1:public} ${2:String} get${3:}(){\\n\\\n\t\treturn this.${4:};\\n\\\n\t}\\n\\\n##\\n\\\n## Terminate Methods or Loops\\n\\\nsnippet re\\n\\\n\treturn\\n\\\nsnippet br\\n\\\n\tbreak;\\n\\\n##\\n\\\n## Test Methods\\n\\\nsnippet t\\n\\\n\tpublic void test${1:Name}() throws Exception {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet test\\n\\\n\t@Test\\n\\\n\tpublic void test${1:Name}() throws Exception {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\n##\\n\\\n## Utils\\n\\\nsnippet Sc\\n\\\n\tScanner\\n\\\n##\\n\\\n## Miscellaneous\\n\\\nsnippet action\\n\\\n\tpublic static void ${1:index}(${2:args}) { ${3} }\\n\\\nsnippet rnf\\n\\\n\tnotFound(${1:param});${2}\\n\\\nsnippet rnfin\\n\\\n\tnotFoundIfNull(${1:param});${2}\\n\\\nsnippet rr\\n\\\n\tredirect(${1:param});${2}\\n\\\nsnippet ru\\n\\\n\tunauthorized(${1:param});${2}\\n\\\nsnippet unless\\n\\\n\t(unless=${1:param});${2}\\n\\\n\";\nexports.scope = \"java\";\n\n});                (function() {\n                    window.require([\"ace/snippets/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/javascript.js",
    "content": "define(\"ace/snippets/javascript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Prototype\\n\\\nsnippet proto\\n\\\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\\n\\\n\t\t${4:// body...}\\n\\\n\t};\\n\\\n# Function\\n\\\nsnippet fun\\n\\\n\tfunction ${1?:function_name}(${2:argument}) {\\n\\\n\t\t${3:// body...}\\n\\\n\t}\\n\\\n# Anonymous Function\\n\\\nregex /((=)\\\\s*|(:)\\\\s*|(\\\\()|\\\\b)/f/(\\\\))?/\\n\\\nsnippet f\\n\\\n\tfunction${M1?: ${1:functionName}}($2) {\\n\\\n\t\t${0:$TM_SELECTED_TEXT}\\n\\\n\t}${M2?;}${M3?,}${M4?)}\\n\\\n# Immediate function\\n\\\ntrigger \\\\(?f\\\\(\\n\\\nendTrigger \\\\)?\\n\\\nsnippet f(\\n\\\n\t(function(${1}) {\\n\\\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\\n\\\n\t}(${1}));\\n\\\n# if\\n\\\nsnippet if\\n\\\n\tif (${1:true}) {\\n\\\n\t\t${0}\\n\\\n\t}\\n\\\n# if ... else\\n\\\nsnippet ife\\n\\\n\tif (${1:true}) {\\n\\\n\t\t${2}\\n\\\n\t} else {\\n\\\n\t\t${0}\\n\\\n\t}\\n\\\n# tertiary conditional\\n\\\nsnippet ter\\n\\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\n\\\n# switch\\n\\\nsnippet switch\\n\\\n\tswitch (${1:expression}) {\\n\\\n\t\tcase '${3:case}':\\n\\\n\t\t\t${4:// code}\\n\\\n\t\t\tbreak;\\n\\\n\t\t${5}\\n\\\n\t\tdefault:\\n\\\n\t\t\t${2:// code}\\n\\\n\t}\\n\\\n# case\\n\\\nsnippet case\\n\\\n\tcase '${1:case}':\\n\\\n\t\t${2:// code}\\n\\\n\t\tbreak;\\n\\\n\t${3}\\n\\\n\\n\\\n# while (...) {...}\\n\\\nsnippet wh\\n\\\n\twhile (${1:/* condition */}) {\\n\\\n\t\t${0:/* code */}\\n\\\n\t}\\n\\\n# try\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${0:/* code */}\\n\\\n\t} catch (e) {}\\n\\\n# do...while\\n\\\nsnippet do\\n\\\n\tdo {\\n\\\n\t\t${2:/* code */}\\n\\\n\t} while (${1:/* condition */});\\n\\\n# Object Method\\n\\\nsnippet :f\\n\\\nregex /([,{[])|^\\\\s*/:f/\\n\\\n\t${1:method_name}: function(${2:attribute}) {\\n\\\n\t\t${0}\\n\\\n\t}${3:,}\\n\\\n# setTimeout function\\n\\\nsnippet setTimeout\\n\\\nregex /\\\\b/st|timeout|setTimeo?u?t?/\\n\\\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\\n\\\n# Get Elements\\n\\\nsnippet gett\\n\\\n\tgetElementsBy${1:TagName}('${2}')${3}\\n\\\n# Get Element\\n\\\nsnippet get\\n\\\n\tgetElementBy${1:Id}('${2}')${3}\\n\\\n# console.log (Firebug)\\n\\\nsnippet cl\\n\\\n\tconsole.log(${1});\\n\\\n# return\\n\\\nsnippet ret\\n\\\n\treturn ${1:result}\\n\\\n# for (property in object ) { ... }\\n\\\nsnippet fori\\n\\\n\tfor (var ${1:prop} in ${2:Things}) {\\n\\\n\t\t${0:$2[$1]}\\n\\\n\t}\\n\\\n# hasOwnProperty\\n\\\nsnippet has\\n\\\n\thasOwnProperty(${1})\\n\\\n# docstring\\n\\\nsnippet /**\\n\\\n\t/**\\n\\\n\t * ${1:description}\\n\\\n\t *\\n\\\n\t */\\n\\\nsnippet @par\\n\\\nregex /^\\\\s*\\\\*\\\\s*/@(para?m?)?/\\n\\\n\t@param {${1:type}} ${2:name} ${3:description}\\n\\\nsnippet @ret\\n\\\n\t@return {${1:type}} ${2:description}\\n\\\n# JSON.parse\\n\\\nsnippet jsonp\\n\\\n\tJSON.parse(${1:jstr});\\n\\\n# JSON.stringify\\n\\\nsnippet jsons\\n\\\n\tJSON.stringify(${1:object});\\n\\\n# self-defining function\\n\\\nsnippet sdf\\n\\\n\tvar ${1:function_name} = function(${2:argument}) {\\n\\\n\t\t${3:// initial code ...}\\n\\\n\\n\\\n\t\t$1 = function($2) {\\n\\\n\t\t\t${4:// main code}\\n\\\n\t\t};\\n\\\n\t}\\n\\\n# singleton\\n\\\nsnippet sing\\n\\\n\tfunction ${1:Singleton} (${2:argument}) {\\n\\\n\t\t// the cached instance\\n\\\n\t\tvar instance;\\n\\\n\\n\\\n\t\t// rewrite the constructor\\n\\\n\t\t$1 = function $1($2) {\\n\\\n\t\t\treturn instance;\\n\\\n\t\t};\\n\\\n\t\t\\n\\\n\t\t// carry over the prototype properties\\n\\\n\t\t$1.prototype = this;\\n\\\n\\n\\\n\t\t// the instance\\n\\\n\t\tinstance = new $1();\\n\\\n\\n\\\n\t\t// reset the constructor pointer\\n\\\n\t\tinstance.constructor = $1;\\n\\\n\\n\\\n\t\t${3:// code ...}\\n\\\n\\n\\\n\t\treturn instance;\\n\\\n\t}\\n\\\n# class\\n\\\nsnippet class\\n\\\nregex /^\\\\s*/clas{0,2}/\\n\\\n\tvar ${1:class} = function(${20}) {\\n\\\n\t\t$40$0\\n\\\n\t};\\n\\\n\t\\n\\\n\t(function() {\\n\\\n\t\t${60:this.prop = \\\"\\\"}\\n\\\n\t}).call(${1:class}.prototype);\\n\\\n\t\\n\\\n\texports.${1:class} = ${1:class};\\n\\\n# \\n\\\nsnippet for-\\n\\\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\\n\\\n\t\t${0:${2:Things}[${1:i}];}\\n\\\n\t}\\n\\\n# for (...) {...}\\n\\\nsnippet for\\n\\\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\\n\\\n\t\t${3:$2[$1]}$0\\n\\\n\t}\\n\\\n# for (...) {...} (Improved Native For-Loop)\\n\\\nsnippet forr\\n\\\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\\n\\\n\t\t${3:$2[$1]}$0\\n\\\n\t}\\n\\\n\\n\\\n\\n\\\n#modules\\n\\\nsnippet def\\n\\\n\tdefine(function(require, exports, module) {\\n\\\n\t\\\"use strict\\\";\\n\\\n\tvar ${1/.*\\\\///} = require(\\\"${1}\\\");\\n\\\n\t\\n\\\n\t$TM_SELECTED_TEXT\\n\\\n\t});\\n\\\nsnippet req\\n\\\nguard ^\\\\s*\\n\\\n\tvar ${1/.*\\\\///} = require(\\\"${1}\\\");\\n\\\n\t$0\\n\\\nsnippet requ\\n\\\nguard ^\\\\s*\\n\\\n\tvar ${1/.*\\\\/(.)/\\\\u$1/} = require(\\\"${1}\\\").${1/.*\\\\/(.)/\\\\u$1/};\\n\\\n\t$0\\n\\\n\";\nexports.scope = \"javascript\";\n\n});                (function() {\n                    window.require([\"ace/snippets/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/json.js",
    "content": "define(\"ace/snippets/json\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"json\";\n\n});                (function() {\n                    window.require([\"ace/snippets/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/jsoniq.js",
    "content": "define(\"ace/snippets/jsoniq\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet for\\n\\\n\tfor $${1:item} in ${2:expr}\\n\\\nsnippet return\\n\\\n\treturn ${1:expr}\\n\\\nsnippet import\\n\\\n\timport module namespace ${1:ns} = \\\"${2:http://www.example.com/}\\\";\\n\\\nsnippet some\\n\\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\n\\\nsnippet every\\n\\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\n\\\nsnippet if\\n\\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\n\\\nsnippet switch\\n\\\n\tswitch(${1:\\\"foo\\\"})\\n\\\n\tcase ${2:\\\"foo\\\"}\\n\\\n\treturn ${3:true}\\n\\\n\tdefault return ${4:false}\\n\\\nsnippet try\\n\\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\n\\\nsnippet tumbling\\n\\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\\\n\tstart at $${3:start} when ${4:expr}\\n\\\n\tend at $${5:end} when ${6:expr}\\n\\\n\treturn ${7:expr}\\n\\\nsnippet sliding\\n\\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\\\n\tstart at $${3:start} when ${4:expr}\\n\\\n\tend at $${5:end} when ${6:expr}\\n\\\n\treturn ${7:expr}\\n\\\nsnippet let\\n\\\n\tlet $${1:varname} := ${2:expr}\\n\\\nsnippet group\\n\\\n\tgroup by $${1:varname} := ${2:expr}\\n\\\nsnippet order\\n\\\n\torder by ${1:expr} ${2:descending}\\n\\\nsnippet stable\\n\\\n\tstable order by ${1:expr}\\n\\\nsnippet count\\n\\\n\tcount $${1:varname}\\n\\\nsnippet ordered\\n\\\n\tordered { ${1:expr} }\\n\\\nsnippet unordered\\n\\\n\tunordered { ${1:expr} }\\n\\\nsnippet treat \\n\\\n\ttreat as ${1:expr}\\n\\\nsnippet castable\\n\\\n\tcastable as ${1:atomicType}\\n\\\nsnippet cast\\n\\\n\tcast as ${1:atomicType}\\n\\\nsnippet typeswitch\\n\\\n\ttypeswitch(${1:expr})\\n\\\n\tcase ${2:type}  return ${3:expr}\\n\\\n\tdefault return ${4:expr}\\n\\\nsnippet var\\n\\\n\tdeclare variable $${1:varname} := ${2:expr};\\n\\\nsnippet fn\\n\\\n\tdeclare function ${1:ns}:${2:name}(){\\n\\\n\t${3:expr}\\n\\\n\t};\\n\\\nsnippet module\\n\\\n\tmodule namespace ${1:ns} = \\\"${2:http://www.example.com}\\\";\\n\\\n\";\nexports.scope = \"jsoniq\";\n\n});                (function() {\n                    window.require([\"ace/snippets/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/jsp.js",
    "content": "define(\"ace/snippets/jsp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet @page\\n\\\n\t<%@page contentType=\\\"text/html\\\" pageEncoding=\\\"UTF-8\\\"%>\\n\\\nsnippet jstl\\n\\\n\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/core\\\" prefix=\\\"c\\\" %>\\n\\\n\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/functions\\\" prefix=\\\"fn\\\" %>\\n\\\nsnippet jstl:c\\n\\\n\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/core\\\" prefix=\\\"c\\\" %>\\n\\\nsnippet jstl:fn\\n\\\n\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/functions\\\" prefix=\\\"fn\\\" %>\\n\\\nsnippet cpath\\n\\\n\t${pageContext.request.contextPath}\\n\\\nsnippet cout\\n\\\n\t<c:out value=\\\"${1}\\\" default=\\\"${2}\\\" />\\n\\\nsnippet cset\\n\\\n\t<c:set var=\\\"${1}\\\" value=\\\"${2}\\\" />\\n\\\nsnippet cremove\\n\\\n\t<c:remove var=\\\"${1}\\\" scope=\\\"${2:page}\\\" />\\n\\\nsnippet ccatch\\n\\\n\t<c:catch var=\\\"${1}\\\" />\\n\\\nsnippet cif\\n\\\n\t<c:if test=\\\"${${1}}\\\">\\n\\\n\t\t${2}\\n\\\n\t</c:if>\\n\\\nsnippet cchoose\\n\\\n\t<c:choose>\\n\\\n\t\t${1}\\n\\\n\t</c:choose>\\n\\\nsnippet cwhen\\n\\\n\t<c:when test=\\\"${${1}}\\\">\\n\\\n\t\t${2}\\n\\\n\t</c:when>\\n\\\nsnippet cother\\n\\\n\t<c:otherwise>\\n\\\n\t\t${1}\\n\\\n\t</c:otherwise>\\n\\\nsnippet cfore\\n\\\n\t<c:forEach items=\\\"${${1}}\\\" var=\\\"${2}\\\" varStatus=\\\"${3}\\\">\\n\\\n\t\t${4:<c:out value=\\\"$2\\\" />}\\n\\\n\t</c:forEach>\\n\\\nsnippet cfort\\n\\\n\t<c:set var=\\\"${1}\\\">${2:item1,item2,item3}</c:set>\\n\\\n\t<c:forTokens var=\\\"${3}\\\" items=\\\"${$1}\\\" delims=\\\"${4:,}\\\">\\n\\\n\t\t${5:<c:out value=\\\"$3\\\" />}\\n\\\n\t</c:forTokens>\\n\\\nsnippet cparam\\n\\\n\t<c:param name=\\\"${1}\\\" value=\\\"${2}\\\" />\\n\\\nsnippet cparam+\\n\\\n\t<c:param name=\\\"${1}\\\" value=\\\"${2}\\\" />\\n\\\n\tcparam+${3}\\n\\\nsnippet cimport\\n\\\n\t<c:import url=\\\"${1}\\\" />\\n\\\nsnippet cimport+\\n\\\n\t<c:import url=\\\"${1}\\\">\\n\\\n\t\t<c:param name=\\\"${2}\\\" value=\\\"${3}\\\" />\\n\\\n\t\tcparam+${4}\\n\\\n\t</c:import>\\n\\\nsnippet curl\\n\\\n\t<c:url value=\\\"${1}\\\" var=\\\"${2}\\\" />\\n\\\n\t<a href=\\\"${$2}\\\">${3}</a>\\n\\\nsnippet curl+\\n\\\n\t<c:url value=\\\"${1}\\\" var=\\\"${2}\\\">\\n\\\n\t\t<c:param name=\\\"${4}\\\" value=\\\"${5}\\\" />\\n\\\n\t\tcparam+${6}\\n\\\n\t</c:url>\\n\\\n\t<a href=\\\"${$2}\\\">${3}</a>\\n\\\nsnippet credirect\\n\\\n\t<c:redirect url=\\\"${1}\\\" />\\n\\\nsnippet contains\\n\\\n\t${fn:contains(${1:string}, ${2:substr})}\\n\\\nsnippet contains:i\\n\\\n\t${fn:containsIgnoreCase(${1:string}, ${2:substr})}\\n\\\nsnippet endswith\\n\\\n\t${fn:endsWith(${1:string}, ${2:suffix})}\\n\\\nsnippet escape\\n\\\n\t${fn:escapeXml(${1:string})}\\n\\\nsnippet indexof\\n\\\n\t${fn:indexOf(${1:string}, ${2:substr})}\\n\\\nsnippet join\\n\\\n\t${fn:join(${1:collection}, ${2:delims})}\\n\\\nsnippet length\\n\\\n\t${fn:length(${1:collection_or_string})}\\n\\\nsnippet replace\\n\\\n\t${fn:replace(${1:string}, ${2:substr}, ${3:replace})}\\n\\\nsnippet split\\n\\\n\t${fn:split(${1:string}, ${2:delims})}\\n\\\nsnippet startswith\\n\\\n\t${fn:startsWith(${1:string}, ${2:prefix})}\\n\\\nsnippet substr\\n\\\n\t${fn:substring(${1:string}, ${2:begin}, ${3:end})}\\n\\\nsnippet substr:a\\n\\\n\t${fn:substringAfter(${1:string}, ${2:substr})}\\n\\\nsnippet substr:b\\n\\\n\t${fn:substringBefore(${1:string}, ${2:substr})}\\n\\\nsnippet lc\\n\\\n\t${fn:toLowerCase(${1:string})}\\n\\\nsnippet uc\\n\\\n\t${fn:toUpperCase(${1:string})}\\n\\\nsnippet trim\\n\\\n\t${fn:trim(${1:string})}\\n\\\n\";\nexports.scope = \"jsp\";\n\n});                (function() {\n                    window.require([\"ace/snippets/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/jssm.js",
    "content": "define(\"ace/snippets/jssm\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/jsx.js",
    "content": "define(\"ace/snippets/jsx\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"jsx\";\n\n});                (function() {\n                    window.require([\"ace/snippets/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/julia.js",
    "content": "define(\"ace/snippets/julia\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"julia\";\n\n});                (function() {\n                    window.require([\"ace/snippets/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/kotlin.js",
    "content": "define(\"ace/snippets/kotlin\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/latex.js",
    "content": "define(\"ace/snippets/latex\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"latex\";\n\n});                (function() {\n                    window.require([\"ace/snippets/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/less.js",
    "content": "define(\"ace/snippets/less\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"less\";\n\n});                (function() {\n                    window.require([\"ace/snippets/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/liquid.js",
    "content": "define(\"ace/snippets/liquid\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"\\n\\\n# liquid specific snippets\\n\\\nsnippet ife\\n\\\n\t{% if ${1:condition} %}\\n\\\n\\n\\\n\t{% else %}\\n\\\n\\n\\\n\t{% endif %}\\n\\\nsnippet if\\n\\\n\t{% if ${1:condition} %}\\n\\\n\t\t\\n\\\n\t{% endif %}\\n\\\nsnippet for\\n\\\n\t{% for in ${1:iterator} %}\\n\\\n\\n\\\n\t{% endfor %}\\n\\\nsnippet capture\\n\\\n\t{% capture ${1} %}\\n\\\n\\n\\\n\t{% endcapture %}\\n\\\nsnippet comment\\n\\\n\t{% comment %}\\n\\\n\t  ${1:comment}\\n\\\n\t{% endcomment %}\\n\\\n\\n\\\n# Include html.snippets\\n\\\n# Some useful Unicode entities\\n\\\n# Non-Breaking Space\\n\\\nsnippet nbs\\n\\\n\t&nbsp;\\n\\\n# ←\\n\\\nsnippet left\\n\\\n\t&#x2190;\\n\\\n# →\\n\\\nsnippet right\\n\\\n\t&#x2192;\\n\\\n# ↑\\n\\\nsnippet up\\n\\\n\t&#x2191;\\n\\\n# ↓\\n\\\nsnippet down\\n\\\n\t&#x2193;\\n\\\n# ↩\\n\\\nsnippet return\\n\\\n\t&#x21A9;\\n\\\n# ⇤\\n\\\nsnippet backtab\\n\\\n\t&#x21E4;\\n\\\n# ⇥\\n\\\nsnippet tab\\n\\\n\t&#x21E5;\\n\\\n# ⇧\\n\\\nsnippet shift\\n\\\n\t&#x21E7;\\n\\\n# ⌃\\n\\\nsnippet ctrl\\n\\\n\t&#x2303;\\n\\\n# ⌅\\n\\\nsnippet enter\\n\\\n\t&#x2305;\\n\\\n# ⌘\\n\\\nsnippet cmd\\n\\\n\t&#x2318;\\n\\\n# ⌥\\n\\\nsnippet option\\n\\\n\t&#x2325;\\n\\\n# ⌦\\n\\\nsnippet delete\\n\\\n\t&#x2326;\\n\\\n# ⌫\\n\\\nsnippet backspace\\n\\\n\t&#x232B;\\n\\\n# ⎋\\n\\\nsnippet esc\\n\\\n\t&#x238B;\\n\\\n# Generic Doctype\\n\\\nsnippet doctype HTML 4.01 Strict\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\nsnippet doctype HTML 4.01 Transitional\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\nsnippet doctype HTML 5\\n\\\n\t<!DOCTYPE HTML>\\n\\\nsnippet doctype XHTML 1.0 Frameset\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Strict\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Transitional\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\nsnippet doctype XHTML 1.1\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# HTML Doctype 4.01 Strict\\n\\\nsnippet docts\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\n# HTML Doctype 4.01 Transitional\\n\\\nsnippet doct\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\n# HTML Doctype 5\\n\\\nsnippet doct5\\n\\\n\t<!DOCTYPE html>\\n\\\n# XHTML Doctype 1.0 Frameset\\n\\\nsnippet docxf\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Frameset//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Strict\\n\\\nsnippet docxs\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Transitional\\n\\\nsnippet docxt\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\n# XHTML Doctype 1.1\\n\\\nsnippet docx\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# html5shiv\\n\\\nsnippet html5shiv\\n\\\n\t<!--[if lte IE 8]>\\n\\\n\t\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\\\"></script>\\n\\\n\t<![endif]-->\\n\\\nsnippet html5printshiv\\n\\\n\t<!--[if lte IE 8]>\\n\\\n\t\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\\\"></script>\\n\\\n\t<![endif]-->\\n\\\n# Attributes\\n\\\nsnippet attr\\n\\\n\t${1:attribute}=\\\"${2:property}\\\"\\n\\\nsnippet attr+\\n\\\n\t${1:attribute}=\\\"${2:property}\\\" attr+${3}\\n\\\nsnippet .\\n\\\n\tclass=\\\"${1}\\\"${2}\\n\\\nsnippet #\\n\\\n\tid=\\\"${1}\\\"${2}\\n\\\nsnippet alt\\n\\\n\talt=\\\"${1}\\\"${2}\\n\\\nsnippet charset\\n\\\n\tcharset=\\\"${1:utf-8}\\\"${2}\\n\\\nsnippet data\\n\\\n\tdata-${1}=\\\"${2:$1}\\\"${3}\\n\\\nsnippet for\\n\\\n\tfor=\\\"${1}\\\"${2}\\n\\\nsnippet height\\n\\\n\theight=\\\"${1}\\\"${2}\\n\\\nsnippet href\\n\\\n\thref=\\\"${1:#}\\\"${2}\\n\\\nsnippet lang\\n\\\n\tlang=\\\"${1:en}\\\"${2}\\n\\\nsnippet media\\n\\\n\tmedia=\\\"${1}\\\"${2}\\n\\\nsnippet name\\n\\\n\tname=\\\"${1}\\\"${2}\\n\\\nsnippet rel\\n\\\n\trel=\\\"${1}\\\"${2}\\n\\\nsnippet scope\\n\\\n\tscope=\\\"${1:row}\\\"${2}\\n\\\nsnippet src\\n\\\n\tsrc=\\\"${1}\\\"${2}\\n\\\nsnippet title=\\n\\\n\ttitle=\\\"${1}\\\"${2}\\n\\\nsnippet type\\n\\\n\ttype=\\\"${1}\\\"${2}\\n\\\nsnippet value\\n\\\n\tvalue=\\\"${1}\\\"${2}\\n\\\nsnippet width\\n\\\n\twidth=\\\"${1}\\\"${2}\\n\\\n# Elements\\n\\\nsnippet a\\n\\\n\t<a href=\\\"${1:#}\\\">${2:$1}</a>\\n\\\nsnippet a.\\n\\\n\t<a class=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a#\\n\\\n\t<a id=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a:ext\\n\\\n\t<a href=\\\"http://${1:example.com}\\\">${2:$1}</a>\\n\\\nsnippet a:mail\\n\\\n\t<a href=\\\"mailto:${1:joe@example.com}?subject=${2:feedback}\\\">${3:email me}</a>\\n\\\nsnippet abbr\\n\\\n\t<abbr title=\\\"${1}\\\">${2}</abbr>\\n\\\nsnippet address\\n\\\n\t<address>\\n\\\n\t\t${1}\\n\\\n\t</address>\\n\\\nsnippet area\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\nsnippet area+\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\n\tarea+${5}\\n\\\nsnippet area:c\\n\\\n\t<area shape=\\\"circle\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:d\\n\\\n\t<area shape=\\\"default\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:p\\n\\\n\t<area shape=\\\"poly\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:r\\n\\\n\t<area shape=\\\"rect\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet article\\n\\\n\t<article>\\n\\\n\t\t${1}\\n\\\n\t</article>\\n\\\nsnippet article.\\n\\\n\t<article class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet article#\\n\\\n\t<article id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet aside\\n\\\n\t<aside>\\n\\\n\t\t${1}\\n\\\n\t</aside>\\n\\\nsnippet aside.\\n\\\n\t<aside class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet aside#\\n\\\n\t<aside id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet audio\\n\\\n\t<audio src=\\\"${1}>${2}</audio>\\n\\\nsnippet b\\n\\\n\t<b>${1}</b>\\n\\\nsnippet base\\n\\\n\t<base href=\\\"${1}\\\" target=\\\"${2}\\\" />\\n\\\nsnippet bdi\\n\\\n\t<bdi>${1}</bdo>\\n\\\nsnippet bdo\\n\\\n\t<bdo dir=\\\"${1}\\\">${2}</bdo>\\n\\\nsnippet bdo:l\\n\\\n\t<bdo dir=\\\"ltr\\\">${1}</bdo>\\n\\\nsnippet bdo:r\\n\\\n\t<bdo dir=\\\"rtl\\\">${1}</bdo>\\n\\\nsnippet blockquote\\n\\\n\t<blockquote>\\n\\\n\t\t${1}\\n\\\n\t</blockquote>\\n\\\nsnippet body\\n\\\n\t<body>\\n\\\n\t\t${1}\\n\\\n\t</body>\\n\\\nsnippet br\\n\\\n\t<br />${1}\\n\\\nsnippet button\\n\\\n\t<button type=\\\"${1:submit}\\\">${2}</button>\\n\\\nsnippet button.\\n\\\n\t<button class=\\\"${1:button}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button#\\n\\\n\t<button id=\\\"${1}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button:s\\n\\\n\t<button type=\\\"submit\\\">${1}</button>\\n\\\nsnippet button:r\\n\\\n\t<button type=\\\"reset\\\">${1}</button>\\n\\\nsnippet canvas\\n\\\n\t<canvas>\\n\\\n\t\t${1}\\n\\\n\t</canvas>\\n\\\nsnippet caption\\n\\\n\t<caption>${1}</caption>\\n\\\nsnippet cite\\n\\\n\t<cite>${1}</cite>\\n\\\nsnippet code\\n\\\n\t<code>${1}</code>\\n\\\nsnippet col\\n\\\n\t<col />${1}\\n\\\nsnippet col+\\n\\\n\t<col />\\n\\\n\tcol+${1}\\n\\\nsnippet colgroup\\n\\\n\t<colgroup>\\n\\\n\t\t${1}\\n\\\n\t</colgroup>\\n\\\nsnippet colgroup+\\n\\\n\t<colgroup>\\n\\\n\t\t<col />\\n\\\n\t\tcol+${1}\\n\\\n\t</colgroup>\\n\\\nsnippet command\\n\\\n\t<command type=\\\"command\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:c\\n\\\n\t<command type=\\\"checkbox\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:r\\n\\\n\t<command type=\\\"radio\\\" radiogroup=\\\"${1}\\\" label=\\\"${2}\\\" icon=\\\"${3}\\\" />\\n\\\nsnippet datagrid\\n\\\n\t<datagrid>\\n\\\n\t\t${1}\\n\\\n\t</datagrid>\\n\\\nsnippet datalist\\n\\\n\t<datalist>\\n\\\n\t\t${1}\\n\\\n\t</datalist>\\n\\\nsnippet datatemplate\\n\\\n\t<datatemplate>\\n\\\n\t\t${1}\\n\\\n\t</datatemplate>\\n\\\nsnippet dd\\n\\\n\t<dd>${1}</dd>\\n\\\nsnippet dd.\\n\\\n\t<dd class=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet dd#\\n\\\n\t<dd id=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet del\\n\\\n\t<del>${1}</del>\\n\\\nsnippet details\\n\\\n\t<details>${1}</details>\\n\\\nsnippet dfn\\n\\\n\t<dfn>${1}</dfn>\\n\\\nsnippet dialog\\n\\\n\t<dialog>\\n\\\n\t\t${1}\\n\\\n\t</dialog>\\n\\\nsnippet div\\n\\\n\t<div>\\n\\\n\t\t${1}\\n\\\n\t</div>\\n\\\nsnippet div.\\n\\\n\t<div class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet div#\\n\\\n\t<div id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet dl\\n\\\n\t<dl>\\n\\\n\t\t${1}\\n\\\n\t</dl>\\n\\\nsnippet dl.\\n\\\n\t<dl class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl#\\n\\\n\t<dl id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl+\\n\\\n\t<dl>\\n\\\n\t\t<dt>${1}</dt>\\n\\\n\t\t<dd>${2}</dd>\\n\\\n\t\tdt+${3}\\n\\\n\t</dl>\\n\\\nsnippet dt\\n\\\n\t<dt>${1}</dt>\\n\\\nsnippet dt.\\n\\\n\t<dt class=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt#\\n\\\n\t<dt id=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt+\\n\\\n\t<dt>${1}</dt>\\n\\\n\t<dd>${2}</dd>\\n\\\n\tdt+${3}\\n\\\nsnippet em\\n\\\n\t<em>${1}</em>\\n\\\nsnippet embed\\n\\\n\t<embed src=${1} type=\\\"${2} />\\n\\\nsnippet fieldset\\n\\\n\t<fieldset>\\n\\\n\t\t${1}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset.\\n\\\n\t<fieldset class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset#\\n\\\n\t<fieldset id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset+\\n\\\n\t<fieldset>\\n\\\n\t\t<legend><span>${1}</span></legend>\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\n\tfieldset+${3}\\n\\\nsnippet figcaption\\n\\\n\t<figcaption>${1}</figcaption>\\n\\\nsnippet figure\\n\\\n\t<figure>${1}</figure>\\n\\\nsnippet footer\\n\\\n\t<footer>\\n\\\n\t\t${1}\\n\\\n\t</footer>\\n\\\nsnippet footer.\\n\\\n\t<footer class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet footer#\\n\\\n\t<footer id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet form\\n\\\n\t<form action=\\\"${1}\\\" method=\\\"${2:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${3}\\n\\\n\t</form>\\n\\\nsnippet form.\\n\\\n\t<form class=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet form#\\n\\\n\t<form id=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet h1\\n\\\n\t<h1>${1}</h1>\\n\\\nsnippet h1.\\n\\\n\t<h1 class=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h1#\\n\\\n\t<h1 id=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h2\\n\\\n\t<h2>${1}</h2>\\n\\\nsnippet h2.\\n\\\n\t<h2 class=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h2#\\n\\\n\t<h2 id=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h3\\n\\\n\t<h3>${1}</h3>\\n\\\nsnippet h3.\\n\\\n\t<h3 class=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h3#\\n\\\n\t<h3 id=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h4\\n\\\n\t<h4>${1}</h4>\\n\\\nsnippet h4.\\n\\\n\t<h4 class=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h4#\\n\\\n\t<h4 id=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h5\\n\\\n\t<h5>${1}</h5>\\n\\\nsnippet h5.\\n\\\n\t<h5 class=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h5#\\n\\\n\t<h5 id=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h6\\n\\\n\t<h6>${1}</h6>\\n\\\nsnippet h6.\\n\\\n\t<h6 class=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet h6#\\n\\\n\t<h6 id=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet head\\n\\\n\t<head>\\n\\\n\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\\n\\\n\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t${2}\\n\\\n\t</head>\\n\\\nsnippet header\\n\\\n\t<header>\\n\\\n\t\t${1}\\n\\\n\t</header>\\n\\\nsnippet header.\\n\\\n\t<header class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet header#\\n\\\n\t<header id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet hgroup\\n\\\n\t<hgroup>\\n\\\n\t\t${1}\\n\\\n\t</hgroup>\\n\\\nsnippet hgroup.\\n\\\n\t<hgroup class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</hgroup>\\n\\\nsnippet hr\\n\\\n\t<hr />${1}\\n\\\nsnippet html\\n\\\n\t<html>\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet xhtml\\n\\\n\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet html5\\n\\\n\t<!DOCTYPE html>\\n\\\n\t<html>\\n\\\n\t\t<head>\\n\\\n\t\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t\t${2:meta}\\n\\\n\t\t</head>\\n\\\n\t\t<body>\\n\\\n\t\t\t${3:body}\\n\\\n\t\t</body>\\n\\\n\t</html>\\n\\\nsnippet xhtml5\\n\\\n\t<!DOCTYPE html>\\n\\\n\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\\n\t\t<head>\\n\\\n\t\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"application/xhtml+xml; charset=utf-8\\\" />\\n\\\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t\t${2:meta}\\n\\\n\t\t</head>\\n\\\n\t\t<body>\\n\\\n\t\t\t${3:body}\\n\\\n\t\t</body>\\n\\\n\t</html>\\n\\\nsnippet i\\n\\\n\t<i>${1}</i>\\n\\\nsnippet iframe\\n\\\n\t<iframe src=\\\"${1}\\\" frameborder=\\\"0\\\"></iframe>${2}\\n\\\nsnippet iframe.\\n\\\n\t<iframe class=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet iframe#\\n\\\n\t<iframe id=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet img\\n\\\n\t<img src=\\\"${1}\\\" alt=\\\"${2}\\\" />${3}\\n\\\nsnippet img.\\n\\\n\t<img class=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet img#\\n\\\n\t<img id=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet input\\n\\\n\t<input type=\\\"${1:text/submit/hidden/button/image}\\\" name=\\\"${2}\\\" id=\\\"${3:$2}\\\" value=\\\"${4}\\\" />${5}\\n\\\nsnippet input.\\n\\\n\t<input class=\\\"${1}\\\" type=\\\"${2:text/submit/hidden/button/image}\\\" name=\\\"${3}\\\" id=\\\"${4:$3}\\\" value=\\\"${5}\\\" />${6}\\n\\\nsnippet input:text\\n\\\n\t<input type=\\\"text\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:submit\\n\\\n\t<input type=\\\"submit\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:hidden\\n\\\n\t<input type=\\\"hidden\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:button\\n\\\n\t<input type=\\\"button\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:image\\n\\\n\t<input type=\\\"image\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" src=\\\"${3}\\\" alt=\\\"${4}\\\" />${5}\\n\\\nsnippet input:checkbox\\n\\\n\t<input type=\\\"checkbox\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:radio\\n\\\n\t<input type=\\\"radio\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:color\\n\\\n\t<input type=\\\"color\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:date\\n\\\n\t<input type=\\\"date\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime\\n\\\n\t<input type=\\\"datetime\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime-local\\n\\\n\t<input type=\\\"datetime-local\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:email\\n\\\n\t<input type=\\\"email\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:file\\n\\\n\t<input type=\\\"file\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:month\\n\\\n\t<input type=\\\"month\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:number\\n\\\n\t<input type=\\\"number\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:password\\n\\\n\t<input type=\\\"password\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:range\\n\\\n\t<input type=\\\"range\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:reset\\n\\\n\t<input type=\\\"reset\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:search\\n\\\n\t<input type=\\\"search\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:time\\n\\\n\t<input type=\\\"time\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:url\\n\\\n\t<input type=\\\"url\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:week\\n\\\n\t<input type=\\\"week\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet ins\\n\\\n\t<ins>${1}</ins>\\n\\\nsnippet kbd\\n\\\n\t<kbd>${1}</kbd>\\n\\\nsnippet keygen\\n\\\n\t<keygen>${1}</keygen>\\n\\\nsnippet label\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\nsnippet label:i\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<input type=\\\"${3:text/submit/hidden/button}\\\" name=\\\"${4:$2}\\\" id=\\\"${5:$2}\\\" value=\\\"${6}\\\" />${7}\\n\\\nsnippet label:s\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<select name=\\\"${3:$2}\\\" id=\\\"${4:$2}\\\">\\n\\\n\t\t<option value=\\\"${5}\\\">${6:$5}</option>\\n\\\n\t</select>\\n\\\nsnippet legend\\n\\\n\t<legend>${1}</legend>\\n\\\nsnippet legend+\\n\\\n\t<legend><span>${1}</span></legend>\\n\\\nsnippet li\\n\\\n\t<li>${1}</li>\\n\\\nsnippet li.\\n\\\n\t<li class=\\\"${1}\\\">${2}</li>\\n\\\nsnippet li+\\n\\\n\t<li>${1}</li>\\n\\\n\tli+${2}\\n\\\nsnippet lia\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\nsnippet lia+\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\n\tlia+${3}\\n\\\nsnippet link\\n\\\n\t<link rel=\\\"${1}\\\" href=\\\"${2}\\\" title=\\\"${3}\\\" type=\\\"${4}\\\" />${5}\\n\\\nsnippet link:atom\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:atom.xml}\\\" title=\\\"Atom\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:css\\n\\\n\t<link rel=\\\"stylesheet\\\" href=\\\"${2:style.css}\\\" type=\\\"text/css\\\" media=\\\"${3:all}\\\" />${4}\\n\\\nsnippet link:favicon\\n\\\n\t<link rel=\\\"shortcut icon\\\" href=\\\"${1:favicon.ico}\\\" type=\\\"image/x-icon\\\" />${2}\\n\\\nsnippet link:rss\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:rss.xml}\\\" title=\\\"RSS\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:touch\\n\\\n\t<link rel=\\\"apple-touch-icon\\\" href=\\\"${1:favicon.png}\\\" />${2}\\n\\\nsnippet map\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</map>\\n\\\nsnippet map.\\n\\\n\t<map class=\\\"${1}\\\" name=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map#\\n\\\n\t<map name=\\\"${1}\\\" id=\\\"${2:$1}>\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map+\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t<area shape=\\\"${2}\\\" coords=\\\"${3}\\\" href=\\\"${4}\\\" alt=\\\"${5}\\\" />${6}\\n\\\n\t</map>${7}\\n\\\nsnippet mark\\n\\\n\t<mark>${1}</mark>\\n\\\nsnippet menu\\n\\\n\t<menu>\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:c\\n\\\n\t<menu type=\\\"context\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:t\\n\\\n\t<menu type=\\\"toolbar\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet meta\\n\\\n\t<meta http-equiv=\\\"${1}\\\" content=\\\"${2}\\\" />${3}\\n\\\nsnippet meta:compat\\n\\\n\t<meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=${1:7,8,edge}\\\" />${3}\\n\\\nsnippet meta:refresh\\n\\\n\t<meta http-equiv=\\\"refresh\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meta:utf\\n\\\n\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meter\\n\\\n\t<meter>${1}</meter>\\n\\\nsnippet nav\\n\\\n\t<nav>\\n\\\n\t\t${1}\\n\\\n\t</nav>\\n\\\nsnippet nav.\\n\\\n\t<nav class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet nav#\\n\\\n\t<nav id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet noscript\\n\\\n\t<noscript>\\n\\\n\t\t${1}\\n\\\n\t</noscript>\\n\\\nsnippet object\\n\\\n\t<object data=\\\"${1}\\\" type=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</object>${4}\\n\\\n# Embed QT Movie\\n\\\nsnippet movie\\n\\\n\t<object width=\\\"$2\\\" height=\\\"$3\\\" classid=\\\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\\\"\\n\\\n\t codebase=\\\"http://www.apple.com/qtactivex/qtplugin.cab\\\">\\n\\\n\t\t<param name=\\\"src\\\" value=\\\"$1\\\" />\\n\\\n\t\t<param name=\\\"controller\\\" value=\\\"$4\\\" />\\n\\\n\t\t<param name=\\\"autoplay\\\" value=\\\"$5\\\" />\\n\\\n\t\t<embed src=\\\"${1:movie.mov}\\\"\\n\\\n\t\t\twidth=\\\"${2:320}\\\" height=\\\"${3:240}\\\"\\n\\\n\t\t\tcontroller=\\\"${4:true}\\\" autoplay=\\\"${5:true}\\\"\\n\\\n\t\t\tscale=\\\"tofit\\\" cache=\\\"true\\\"\\n\\\n\t\t\tpluginspage=\\\"http://www.apple.com/quicktime/download/\\\" />\\n\\\n\t</object>${6}\\n\\\nsnippet ol\\n\\\n\t<ol>\\n\\\n\t\t${1}\\n\\\n\t</ol>\\n\\\nsnippet ol.\\n\\\n\t<ol class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol#\\n\\\n\t<ol id=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol+\\n\\\n\t<ol>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ol>\\n\\\nsnippet opt\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\nsnippet opt+\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\topt+${3}\\n\\\nsnippet optt\\n\\\n\t<option>${1}</option>\\n\\\nsnippet optgroup\\n\\\n\t<optgroup>\\n\\\n\t\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\t\topt+${3}\\n\\\n\t</optgroup>\\n\\\nsnippet output\\n\\\n\t<output>${1}</output>\\n\\\nsnippet p\\n\\\n\t<p>${1}</p>\\n\\\nsnippet param\\n\\\n\t<param name=\\\"${1}\\\" value=\\\"${2}\\\" />${3}\\n\\\nsnippet pre\\n\\\n\t<pre>\\n\\\n\t\t${1}\\n\\\n\t</pre>\\n\\\nsnippet progress\\n\\\n\t<progress>${1}</progress>\\n\\\nsnippet q\\n\\\n\t<q>${1}</q>\\n\\\nsnippet rp\\n\\\n\t<rp>${1}</rp>\\n\\\nsnippet rt\\n\\\n\t<rt>${1}</rt>\\n\\\nsnippet ruby\\n\\\n\t<ruby>\\n\\\n\t\t<rp><rt>${1}</rt></rp>\\n\\\n\t</ruby>\\n\\\nsnippet s\\n\\\n\t<s>${1}</s>\\n\\\nsnippet samp\\n\\\n\t<samp>\\n\\\n\t\t${1}\\n\\\n\t</samp>\\n\\\nsnippet script\\n\\\n\t<script type=\\\"text/javascript\\\" charset=\\\"utf-8\\\">\\n\\\n\t\t${1}\\n\\\n\t</script>\\n\\\nsnippet scriptsrc\\n\\\n\t<script src=\\\"${1}.js\\\" type=\\\"text/javascript\\\" charset=\\\"utf-8\\\"></script>\\n\\\nsnippet newscript\\n\\\n\t<script type=\\\"application/javascript\\\" charset=\\\"utf-8\\\">\\n\\\n\t\t${1}\\n\\\n\t</script>\\n\\\nsnippet newscriptsrc\\n\\\n\t<script src=\\\"${1}.js\\\" type=\\\"application/javascript\\\" charset=\\\"utf-8\\\"></script>\\n\\\nsnippet section\\n\\\n\t<section>\\n\\\n\t\t${1}\\n\\\n\t</section>\\n\\\nsnippet section.\\n\\\n\t<section class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet section#\\n\\\n\t<section id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet select\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t${3}\\n\\\n\t</select>\\n\\\nsnippet select.\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\" class=\\\"${3}>\\n\\\n\t\t${4}\\n\\\n\t</select>\\n\\\nsnippet select+\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t<option value=\\\"${3}\\\">${4:$3}</option>\\n\\\n\t\topt+${5}\\n\\\n\t</select>\\n\\\nsnippet small\\n\\\n\t<small>${1}</small>\\n\\\nsnippet source\\n\\\n\t<source src=\\\"${1}\\\" type=\\\"${2}\\\" media=\\\"${3}\\\" />\\n\\\nsnippet span\\n\\\n\t<span>${1}</span>\\n\\\nsnippet strong\\n\\\n\t<strong>${1}</strong>\\n\\\nsnippet style\\n\\\n\t<style type=\\\"text/css\\\" media=\\\"${1:all}\\\">\\n\\\n\t\t${2}\\n\\\n\t</style>\\n\\\nsnippet sub\\n\\\n\t<sub>${1}</sub>\\n\\\nsnippet summary\\n\\\n\t<summary>\\n\\\n\t\t${1}\\n\\\n\t</summary>\\n\\\nsnippet sup\\n\\\n\t<sup>${1}</sup>\\n\\\nsnippet table\\n\\\n\t<table border=\\\"${1:0}\\\">\\n\\\n\t\t${2}\\n\\\n\t</table>\\n\\\nsnippet table.\\n\\\n\t<table class=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet table#\\n\\\n\t<table id=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet tbody\\n\\\n\t<tbody>\\n\\\n\t\t${1}\\n\\\n\t</tbody>\\n\\\nsnippet td\\n\\\n\t<td>${1}</td>\\n\\\nsnippet td.\\n\\\n\t<td class=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td#\\n\\\n\t<td id=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td+\\n\\\n\t<td>${1}</td>\\n\\\n\ttd+${2}\\n\\\nsnippet textarea\\n\\\n\t<textarea name=\\\"${1}\\\" id=${2:$1} rows=\\\"${3:8}\\\" cols=\\\"${4:40}\\\">${5}</textarea>${6}\\n\\\nsnippet tfoot\\n\\\n\t<tfoot>\\n\\\n\t\t${1}\\n\\\n\t</tfoot>\\n\\\nsnippet th\\n\\\n\t<th>${1}</th>\\n\\\nsnippet th.\\n\\\n\t<th class=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th#\\n\\\n\t<th id=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th+\\n\\\n\t<th>${1}</th>\\n\\\n\tth+${2}\\n\\\nsnippet thead\\n\\\n\t<thead>\\n\\\n\t\t${1}\\n\\\n\t</thead>\\n\\\nsnippet time\\n\\\n\t<time datetime=\\\"${1}\\\" pubdate=\\\"${2:$1}>${3:$1}</time>\\n\\\nsnippet title\\n\\\n\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\nsnippet tr\\n\\\n\t<tr>\\n\\\n\t\t${1}\\n\\\n\t</tr>\\n\\\nsnippet tr+\\n\\\n\t<tr>\\n\\\n\t\t<td>${1}</td>\\n\\\n\t\ttd+${2}\\n\\\n\t</tr>\\n\\\nsnippet track\\n\\\n\t<track src=\\\"${1}\\\" srclang=\\\"${2}\\\" label=\\\"${3}\\\" default=\\\"${4:default}>${5}</track>${6}\\n\\\nsnippet ul\\n\\\n\t<ul>\\n\\\n\t\t${1}\\n\\\n\t</ul>\\n\\\nsnippet ul.\\n\\\n\t<ul class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul#\\n\\\n\t<ul id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul+\\n\\\n\t<ul>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ul>\\n\\\nsnippet var\\n\\\n\t<var>${1}</var>\\n\\\nsnippet video\\n\\\n\t<video src=\\\"${1} height=\\\"${2}\\\" width=\\\"${3}\\\" preload=\\\"${5:none}\\\" autoplay=\\\"${6:autoplay}>${7}</video>${8}\\n\\\nsnippet wbr\\n\\\n\t<wbr />${1}\\n\\\n\";\nexports.scope = \"liquid\";\n\n});                (function() {\n                    window.require([\"ace/snippets/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/lisp.js",
    "content": "define(\"ace/snippets/lisp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"lisp\";\n\n});                (function() {\n                    window.require([\"ace/snippets/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/livescript.js",
    "content": "define(\"ace/snippets/livescript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"livescript\";\n\n});                (function() {\n                    window.require([\"ace/snippets/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/logiql.js",
    "content": "define(\"ace/snippets/logiql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"logiql\";\n\n});                (function() {\n                    window.require([\"ace/snippets/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/logtalk.js",
    "content": "define(\"ace/snippets/logtalk\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"logtalk\";\n\n});                (function() {\n                    window.require([\"ace/snippets/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/lsl.js",
    "content": "define(\"ace/snippets/lsl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet @\\n\\\n\t@${1:label};\\n\\\nsnippet CAMERA_ACTIVE\\n\\\n\tCAMERA_ACTIVE, ${1:integer isActive}, $0\\n\\\nsnippet CAMERA_BEHINDNESS_ANGLE\\n\\\n\tCAMERA_BEHINDNESS_ANGLE, ${1:float degrees}, $0\\n\\\nsnippet CAMERA_BEHINDNESS_LAG\\n\\\n\tCAMERA_BEHINDNESS_LAG, ${1:float seconds}, $0\\n\\\nsnippet CAMERA_DISTANCE\\n\\\n\tCAMERA_DISTANCE, ${1:float meters}, $0\\n\\\nsnippet CAMERA_FOCUS\\n\\\n\tCAMERA_FOCUS, ${1:vector position}, $0\\n\\\nsnippet CAMERA_FOCUS_LAG\\n\\\n\tCAMERA_FOCUS_LAG, ${1:float seconds}, $0\\n\\\nsnippet CAMERA_FOCUS_LOCKED\\n\\\n\tCAMERA_FOCUS_LOCKED, ${1:integer isLocked}, $0\\n\\\nsnippet CAMERA_FOCUS_OFFSET\\n\\\n\tCAMERA_FOCUS_OFFSET, ${1:vector meters}, $0\\n\\\nsnippet CAMERA_FOCUS_THRESHOLD\\n\\\n\tCAMERA_FOCUS_THRESHOLD, ${1:float meters}, $0\\n\\\nsnippet CAMERA_PITCH\\n\\\n\tCAMERA_PITCH, ${1:float degrees}, $0\\n\\\nsnippet CAMERA_POSITION\\n\\\n\tCAMERA_POSITION, ${1:vector position}, $0\\n\\\nsnippet CAMERA_POSITION_LAG\\n\\\n\tCAMERA_POSITION_LAG, ${1:float seconds}, $0\\n\\\nsnippet CAMERA_POSITION_LOCKED\\n\\\n\tCAMERA_POSITION_LOCKED, ${1:integer isLocked}, $0\\n\\\nsnippet CAMERA_POSITION_THRESHOLD\\n\\\n\tCAMERA_POSITION_THRESHOLD, ${1:float meters}, $0\\n\\\nsnippet CHARACTER_AVOIDANCE_MODE\\n\\\n\tCHARACTER_AVOIDANCE_MODE, ${1:integer flags}, $0\\n\\\nsnippet CHARACTER_DESIRED_SPEED\\n\\\n\tCHARACTER_DESIRED_SPEED, ${1:float speed}, $0\\n\\\nsnippet CHARACTER_DESIRED_TURN_SPEED\\n\\\n\tCHARACTER_DESIRED_TURN_SPEED, ${1:float speed}, $0\\n\\\nsnippet CHARACTER_LENGTH\\n\\\n\tCHARACTER_LENGTH, ${1:float length}, $0\\n\\\nsnippet CHARACTER_MAX_TURN_RADIUS\\n\\\n\tCHARACTER_MAX_TURN_RADIUS, ${1:float radius}, $0\\n\\\nsnippet CHARACTER_ORIENTATION\\n\\\n\tCHARACTER_ORIENTATION, ${1:integer orientation}, $0\\n\\\nsnippet CHARACTER_RADIUS\\n\\\n\tCHARACTER_RADIUS, ${1:float radius}, $0\\n\\\nsnippet CHARACTER_STAY_WITHIN_PARCEL\\n\\\n\tCHARACTER_STAY_WITHIN_PARCEL, ${1:boolean stay}, $0\\n\\\nsnippet CHARACTER_TYPE\\n\\\n\tCHARACTER_TYPE, ${1:integer type}, $0\\n\\\nsnippet HTTP_BODY_MAXLENGTH\\n\\\n\tHTTP_BODY_MAXLENGTH, ${1:integer length}, $0\\n\\\nsnippet HTTP_CUSTOM_HEADER\\n\\\n\tHTTP_CUSTOM_HEADER, ${1:string name}, ${2:string value}, $0\\n\\\nsnippet HTTP_METHOD\\n\\\n\tHTTP_METHOD, ${1:string method}, $0\\n\\\nsnippet HTTP_MIMETYPE\\n\\\n\tHTTP_MIMETYPE, ${1:string mimeType}, $0\\n\\\nsnippet HTTP_PRAGMA_NO_CACHE\\n\\\n\tHTTP_PRAGMA_NO_CACHE, ${1:integer send_header}, $0\\n\\\nsnippet HTTP_VERBOSE_THROTTLE\\n\\\n\tHTTP_VERBOSE_THROTTLE, ${1:integer noisy}, $0\\n\\\nsnippet HTTP_VERIFY_CERT\\n\\\n\tHTTP_VERIFY_CERT, ${1:integer verify}, $0\\n\\\nsnippet RC_DATA_FLAGS\\n\\\n\tRC_DATA_FLAGS, ${1:integer flags}, $0\\n\\\nsnippet RC_DETECT_PHANTOM\\n\\\n\tRC_DETECT_PHANTOM, ${1:integer dectedPhantom}, $0\\n\\\nsnippet RC_MAX_HITS\\n\\\n\tRC_MAX_HITS, ${1:integer maxHits}, $0\\n\\\nsnippet RC_REJECT_TYPES\\n\\\n\tRC_REJECT_TYPES, ${1:integer filterMask}, $0\\n\\\nsnippet at_rot_target\\n\\\n\tat_rot_target(${1:integer handle}, ${2:rotation targetrot}, ${3:rotation ourrot})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet at_target\\n\\\n\tat_target(${1:integer tnum}, ${2:vector targetpos}, ${3:vector ourpos})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet attach\\n\\\n\tattach(${1:key id})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet changed\\n\\\n\tchanged(${1:integer change})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet collision\\n\\\n\tcollision(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet collision_end\\n\\\n\tcollision_end(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet collision_start\\n\\\n\tcollision_start(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet control\\n\\\n\tcontrol(${1:key id}, ${2:integer level}, ${3:integer edge})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet dataserver\\n\\\n\tdataserver(${1:key query_id}, ${2:string data})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet do\\n\\\n\tdo\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\n\twhile (${1:condition});\\n\\\nsnippet else\\n\\\n\telse\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet email\\n\\\n\temail(${1:string time}, ${2:string address}, ${3:string subject}, ${4:string message}, ${5:integer num_left})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet experience_permissions\\n\\\n\texperience_permissions(${1:key agent_id})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet experience_permissions_denied\\n\\\n\texperience_permissions_denied(${1:key agent_id}, ${2:integer reason})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet for\\n\\\n\tfor (${1:start}; ${3:condition}; ${3:step})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet http_request\\n\\\n\thttp_request(${1:key request_id}, ${2:string method}, ${3:string body})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet http_response\\n\\\n\thttp_response(${1:key request_id}, ${2:integer status}, ${3:list metadata}, ${4:string body})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet if\\n\\\n\tif (${1:condition})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet jump\\n\\\n\tjump ${1:label};\\n\\\nsnippet land_collision\\n\\\n\tland_collision(${1:vector pos})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet land_collision_end\\n\\\n\tland_collision_end(${1:vector pos})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet land_collision_start\\n\\\n\tland_collision_start(${1:vector pos})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet link_message\\n\\\n\tlink_message(${1:integer sender_num}, ${2:integer num}, ${3:string str}, ${4:key id})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet listen\\n\\\n\tlisten(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string message})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet llAbs\\n\\\n\tllAbs(${1:integer val})\\n\\\nsnippet llAcos\\n\\\n\tllAcos(${1:float val})\\n\\\nsnippet llAddToLandBanList\\n\\\n\tllAddToLandBanList(${1:key agent}, ${2:float hours});\\n\\\n\t$0\\n\\\nsnippet llAddToLandPassList\\n\\\n\tllAddToLandPassList(${1:key agent}, ${2:float hours});\\n\\\n\t$0\\n\\\nsnippet llAdjustSoundVolume\\n\\\n\tllAdjustSoundVolume(${1:float volume});\\n\\\n\t$0\\n\\\nsnippet llAgentInExperience\\n\\\n\tllAgentInExperience(${1:key agent})\\n\\\nsnippet llAllowInventoryDrop\\n\\\n\tllAllowInventoryDrop(${1:integer add});\\n\\\n\t$0\\n\\\nsnippet llAngleBetween\\n\\\n\tllAngleBetween(${1:rotation a}, ${2:rotation b})\\n\\\nsnippet llApplyImpulse\\n\\\n\tllApplyImpulse(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llApplyRotationalImpulse\\n\\\n\tllApplyRotationalImpulse(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llAsin\\n\\\n\tllAsin(${1:float val})\\n\\\nsnippet llAtan2\\n\\\n\tllAtan2(${1:float y}, ${2:float x})\\n\\\nsnippet llAttachToAvatar\\n\\\n\tllAttachToAvatar(${1:integer attach_point});\\n\\\n\t$0\\n\\\nsnippet llAttachToAvatarTemp\\n\\\n\tllAttachToAvatarTemp(${1:integer attach_point});\\n\\\n\t$0\\n\\\nsnippet llAvatarOnLinkSitTarget\\n\\\n\tllAvatarOnLinkSitTarget(${1:integer link})\\n\\\nsnippet llAvatarOnSitTarget\\n\\\n\tllAvatarOnSitTarget()\\n\\\nsnippet llAxes2Rot\\n\\\n\tllAxes2Rot(${1:vector fwd}, ${2:vector left}, ${3:vector up})\\n\\\nsnippet llAxisAngle2Rot\\n\\\n\tllAxisAngle2Rot(${1:vector axis}, ${2:float angle})\\n\\\nsnippet llBase64ToInteger\\n\\\n\tllBase64ToInteger(${1:string str})\\n\\\nsnippet llBase64ToString\\n\\\n\tllBase64ToString(${1:string str})\\n\\\nsnippet llBreakAllLinks\\n\\\n\tllBreakAllLinks();\\n\\\n\t$0\\n\\\nsnippet llBreakLink\\n\\\n\tllBreakLink(${1:integer link});\\n\\\n\t$0\\n\\\nsnippet llCastRay\\n\\\n\tllCastRay(${1:vector start}, ${2:vector end}, ${3:list options});\\n\\\n\t$0\\n\\\nsnippet llCeil\\n\\\n\tllCeil(${1:float val})\\n\\\nsnippet llClearCameraParams\\n\\\n\tllClearCameraParams();\\n\\\n\t$0\\n\\\nsnippet llClearLinkMedia\\n\\\n\tllClearLinkMedia(${1:integer link}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llClearPrimMedia\\n\\\n\tllClearPrimMedia(${1:integer face});\\n\\\n\t$0\\n\\\nsnippet llCloseRemoteDataChannel\\n\\\n\tllCloseRemoteDataChannel(${1:key channel});\\n\\\n\t$0\\n\\\nsnippet llCollisionFilter\\n\\\n\tllCollisionFilter(${1:string name}, ${2:key id}, ${3:integer accept});\\n\\\n\t$0\\n\\\nsnippet llCollisionSound\\n\\\n\tllCollisionSound(${1:string impact_sound}, ${2:float impact_volume});\\n\\\n\t$0\\n\\\nsnippet llCos\\n\\\n\tllCos(${1:float theta})\\n\\\nsnippet llCreateCharacter\\n\\\n\tllCreateCharacter(${1:list options});\\n\\\n\t$0\\n\\\nsnippet llCreateKeyValue\\n\\\n\tllCreateKeyValue(${1:string k})\\n\\\nsnippet llCreateLink\\n\\\n\tllCreateLink(${1:key target}, ${2:integer parent});\\n\\\n\t$0\\n\\\nsnippet llCSV2List\\n\\\n\tllCSV2List(${1:string src})\\n\\\nsnippet llDataSizeKeyValue\\n\\\n\tllDataSizeKeyValue()\\n\\\nsnippet llDeleteCharacter\\n\\\n\tllDeleteCharacter();\\n\\\n\t$0\\n\\\nsnippet llDeleteKeyValue\\n\\\n\tllDeleteKeyValue(${1:string k})\\n\\\nsnippet llDeleteSubList\\n\\\n\tllDeleteSubList(${1:list src}, ${2:integer start}, ${3:integer end})\\n\\\nsnippet llDeleteSubString\\n\\\n\tllDeleteSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\n\\\nsnippet llDetachFromAvatar\\n\\\n\tllDetachFromAvatar();\\n\\\n\t$0\\n\\\nsnippet llDetectedGrab\\n\\\n\tllDetectedGrab(${1:integer number})\\n\\\nsnippet llDetectedGroup\\n\\\n\tllDetectedGroup(${1:integer number})\\n\\\nsnippet llDetectedKey\\n\\\n\tllDetectedKey(${1:integer number})\\n\\\nsnippet llDetectedLinkNumber\\n\\\n\tllDetectedLinkNumber(${1:integer number})\\n\\\nsnippet llDetectedName\\n\\\n\tllDetectedName(${1:integer number})\\n\\\nsnippet llDetectedOwner\\n\\\n\tllDetectedOwner(${1:integer number})\\n\\\nsnippet llDetectedPos\\n\\\n\tllDetectedPosl(${1:integer number})\\n\\\nsnippet llDetectedRot\\n\\\n\tllDetectedRot(${1:integer number})\\n\\\nsnippet llDetectedTouchBinormal\\n\\\n\tllDetectedTouchBinormal(${1:integer number})\\n\\\nsnippet llDetectedTouchFace\\n\\\n\tllDetectedTouchFace(${1:integer number})\\n\\\nsnippet llDetectedTouchNormal\\n\\\n\tllDetectedTouchNormal(${1:integer number})\\n\\\nsnippet llDetectedTouchPos\\n\\\n\tllDetectedTouchPos(${1:integer number})\\n\\\nsnippet llDetectedTouchST\\n\\\n\tllDetectedTouchST(${1:integer number})\\n\\\nsnippet llDetectedTouchUV\\n\\\n\tllDetectedTouchUV(${1:integer number})\\n\\\nsnippet llDetectedType\\n\\\n\tllDetectedType(${1:integer number})\\n\\\nsnippet llDetectedVel\\n\\\n\tllDetectedVel(${1:integer number})\\n\\\nsnippet llDialog\\n\\\n\tllDialog(${1:key agent}, ${2:string message}, ${3:list buttons}, ${4:integer channel});\\n\\\n\t$0\\n\\\nsnippet llDie\\n\\\n\tllDie();\\n\\\n\t$0\\n\\\nsnippet llDumpList2String\\n\\\n\tllDumpList2String(${1:list src}, ${2:string separator})\\n\\\nsnippet llEdgeOfWorld\\n\\\n\tllEdgeOfWorld(${1:vector pos}, ${2:vector dir})\\n\\\nsnippet llEjectFromLand\\n\\\n\tllEjectFromLand(${1:key agent});\\n\\\n\t$0\\n\\\nsnippet llEmail\\n\\\n\tllEmail(${1:string address}, ${2:string subject}, ${3:string message});\\n\\\n\t$0\\n\\\nsnippet llEscapeURL\\n\\\n\tllEscapeURL(${1:string url})\\n\\\nsnippet llEuler2Rot\\n\\\n\tllEuler2Rot(${1:vector v})\\n\\\nsnippet llExecCharacterCmd\\n\\\n\tllExecCharacterCmd(${1:integer command}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llEvade\\n\\\n\tllEvade(${1:key target}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llFabs\\n\\\n\tllFabs(${1:float val})\\n\\\nsnippet llFleeFrom\\n\\\n\tllFleeFrom(${1:vector position}, ${2:float distance}, ${3:list options});\\n\\\n\t$0\\n\\\nsnippet llFloor\\n\\\n\tllFloor(${1:float val})\\n\\\nsnippet llForceMouselook\\n\\\n\tllForceMouselook(${1:integer mouselook});\\n\\\n\t$0\\n\\\nsnippet llFrand\\n\\\n\tllFrand(${1:float mag})\\n\\\nsnippet llGenerateKey\\n\\\n\tllGenerateKey()\\n\\\nsnippet llGetAccel\\n\\\n\tllGetAccel()\\n\\\nsnippet llGetAgentInfo\\n\\\n\tllGetAgentInfo(${1:key id})\\n\\\nsnippet llGetAgentLanguage\\n\\\n\tllGetAgentLanguage(${1:key agent})\\n\\\nsnippet llGetAgentList\\n\\\n\tllGetAgentList(${1:integer scope}, ${2:list options})\\n\\\nsnippet llGetAgentSize\\n\\\n\tllGetAgentSize(${1:key agent})\\n\\\nsnippet llGetAlpha\\n\\\n\tllGetAlpha(${1:integer face})\\n\\\nsnippet llGetAndResetTime\\n\\\n\tllGetAndResetTime()\\n\\\nsnippet llGetAnimation\\n\\\n\tllGetAnimation(${1:key id})\\n\\\nsnippet llGetAnimationList\\n\\\n\tllGetAnimationList(${1:key agent})\\n\\\nsnippet llGetAnimationOverride\\n\\\n\tllGetAnimationOverride(${1:string anim_state})\\n\\\nsnippet llGetAttached\\n\\\n\tllGetAttached()\\n\\\nsnippet llGetAttachedList\\n\\\n\tllGetAttachedList(${1:key id})\\n\\\nsnippet llGetBoundingBox\\n\\\n\tllGetBoundingBox(${1:key object})\\n\\\nsnippet llGetCameraPos\\n\\\n\tllGetCameraPos()\\n\\\nsnippet llGetCameraRot\\n\\\n\tllGetCameraRot()\\n\\\nsnippet llGetCenterOfMass\\n\\\n\tllGetCenterOfMass()\\n\\\nsnippet llGetClosestNavPoint\\n\\\n\tllGetClosestNavPoint(${1:vector point}, ${2:list options})\\n\\\nsnippet llGetColor\\n\\\n\tllGetColor(${1:integer face})\\n\\\nsnippet llGetCreator\\n\\\n\tllGetCreator()\\n\\\nsnippet llGetDate\\n\\\n\tllGetDate()\\n\\\nsnippet llGetDisplayName\\n\\\n\tllGetDisplayName(${1:key id})\\n\\\nsnippet llGetEnergy\\n\\\n\tllGetEnergy()\\n\\\nsnippet llGetEnv\\n\\\n\tllGetEnv(${1:string name})\\n\\\nsnippet llGetExperienceDetails\\n\\\n\tllGetExperienceDetails(${1:key experience_id})\\n\\\nsnippet llGetExperienceErrorMessage\\n\\\n\tllGetExperienceErrorMessage(${1:integer error})\\n\\\nsnippet llGetForce\\n\\\n\tllGetForce()\\n\\\nsnippet llGetFreeMemory\\n\\\n\tllGetFreeMemory()\\n\\\nsnippet llGetFreeURLs\\n\\\n\tllGetFreeURLs()\\n\\\nsnippet llGetGeometricCenter\\n\\\n\tllGetGeometricCenter()\\n\\\nsnippet llGetGMTclock\\n\\\n\tllGetGMTclock()\\n\\\nsnippet llGetHTTPHeader\\n\\\n\tllGetHTTPHeader(${1:key request_id}, ${2:string header})\\n\\\nsnippet llGetInventoryCreator\\n\\\n\tllGetInventoryCreator(${1:string item})\\n\\\nsnippet llGetInventoryKey\\n\\\n\tllGetInventoryKey(${1:string name})\\n\\\nsnippet llGetInventoryName\\n\\\n\tllGetInventoryName(${1:integer type}, ${2:integer number})\\n\\\nsnippet llGetInventoryNumber\\n\\\n\tllGetInventoryNumber(${1:integer type})\\n\\\nsnippet llGetInventoryPermMask\\n\\\n\tllGetInventoryPermMask(${1:string item}, ${2:integer mask})\\n\\\nsnippet llGetInventoryType\\n\\\n\tllGetInventoryType(${1:string name})\\n\\\nsnippet llGetKey\\n\\\n\tllGetKey()\\n\\\nsnippet llGetLandOwnerAt\\n\\\n\tllGetLandOwnerAt(${1:vector pos})\\n\\\nsnippet llGetLinkKey\\n\\\n\tllGetLinkKey(${1:integer link})\\n\\\nsnippet llGetLinkMedia\\n\\\n\tllGetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params})\\n\\\nsnippet llGetLinkName\\n\\\n\tllGetLinkName(${1:integer link})\\n\\\nsnippet llGetLinkNumber\\n\\\n\tllGetLinkNumber()\\n\\\nsnippet llGetLinkNumberOfSides\\n\\\n\tllGetLinkNumberOfSides(${1:integer link})\\n\\\nsnippet llGetLinkPrimitiveParams\\n\\\n\tllGetLinkPrimitiveParams(${1:integer link}, ${2:list params})\\n\\\nsnippet llGetListEntryType\\n\\\n\tllGetListEntryType(${1:list src}, ${2:integer index})\\n\\\nsnippet llGetListLength\\n\\\n\tllGetListLength(${1:list src})\\n\\\nsnippet llGetLocalPos\\n\\\n\tllGetLocalPos()\\n\\\nsnippet llGetLocalRot\\n\\\n\tllGetLocalRot()\\n\\\nsnippet llGetMass\\n\\\n\tllGetMass()\\n\\\nsnippet llGetMassMKS\\n\\\n\tllGetMassMKS()\\n\\\nsnippet llGetMaxScaleFactor\\n\\\n\tllGetMaxScaleFactor()\\n\\\nsnippet llGetMemoryLimit\\n\\\n\tllGetMemoryLimit()\\n\\\nsnippet llGetMinScaleFactor\\n\\\n\tllGetMinScaleFactor()\\n\\\nsnippet llGetNextEmail\\n\\\n\tllGetNextEmail(${1:string address}, ${2:string subject});\\n\\\n\t$0\\n\\\nsnippet llGetNotecardLine\\n\\\n\tllGetNotecardLine(${1:string name}, ${2:integer line})\\n\\\nsnippet llGetNumberOfNotecardLines\\n\\\n\tllGetNumberOfNotecardLines(${1:string name})\\n\\\nsnippet llGetNumberOfPrims\\n\\\n\tllGetNumberOfPrims()\\n\\\nsnippet llGetNumberOfSides\\n\\\n\tllGetNumberOfSides()\\n\\\nsnippet llGetObjectDesc\\n\\\n\tllGetObjectDesc()\\n\\\nsnippet llGetObjectDetails\\n\\\n\tllGetObjectDetails(${1:key id}, ${2:list params})\\n\\\nsnippet llGetObjectMass\\n\\\n\tllGetObjectMass(${1:key id})\\n\\\nsnippet llGetObjectName\\n\\\n\tllGetObjectName()\\n\\\nsnippet llGetObjectPermMask\\n\\\n\tllGetObjectPermMask(${1:integer mask})\\n\\\nsnippet llGetObjectPrimCount\\n\\\n\tllGetObjectPrimCount(${1:key prim})\\n\\\nsnippet llGetOmega\\n\\\n\tllGetOmega()\\n\\\nsnippet llGetOwner\\n\\\n\tllGetOwner()\\n\\\nsnippet llGetOwnerKey\\n\\\n\tllGetOwnerKey(${1:key id})\\n\\\nsnippet llGetParcelDetails\\n\\\n\tllGetParcelDetails(${1:vector pos}, ${2:list params})\\n\\\nsnippet llGetParcelFlags\\n\\\n\tllGetParcelFlags(${1:vector pos})\\n\\\nsnippet llGetParcelMaxPrims\\n\\\n\tllGetParcelMaxPrims(${1:vector pos}, ${2:integer sim_wide})\\n\\\nsnippet llGetParcelMusicURL\\n\\\n\tllGetParcelMusicURL()\\n\\\nsnippet llGetParcelPrimCount\\n\\\n\tllGetParcelPrimCount(${1:vector pos}, ${2:integer category}, ${3:integer sim_wide})\\n\\\nsnippet llGetParcelPrimOwners\\n\\\n\tllGetParcelPrimOwners(${1:vector pos})\\n\\\nsnippet llGetPermissions\\n\\\n\tllGetPermissions()\\n\\\nsnippet llGetPermissionsKey\\n\\\n\tllGetPermissionsKey()\\n\\\nsnippet llGetPhysicsMaterial\\n\\\n\tllGetPhysicsMaterial()\\n\\\nsnippet llGetPos\\n\\\n\tllGetPos()\\n\\\nsnippet llGetPrimitiveParams\\n\\\n\tllGetPrimitiveParams(${1:list params})\\n\\\nsnippet llGetPrimMediaParams\\n\\\n\tllGetPrimMediaParams(${1:integer face}, ${2:list params})\\n\\\nsnippet llGetRegionAgentCount\\n\\\n\tllGetRegionAgentCount()\\n\\\nsnippet llGetRegionCorner\\n\\\n\tllGetRegionCorner()\\n\\\nsnippet llGetRegionFlags\\n\\\n\tllGetRegionFlags()\\n\\\nsnippet llGetRegionFPS\\n\\\n\tllGetRegionFPS()\\n\\\nsnippet llGetRegionName\\n\\\n\tllGetRegionName()\\n\\\nsnippet llGetRegionTimeDilation\\n\\\n\tllGetRegionTimeDilation()\\n\\\nsnippet llGetRootPosition\\n\\\n\tllGetRootPosition()\\n\\\nsnippet llGetRootRotation\\n\\\n\tllGetRootRotation()\\n\\\nsnippet llGetRot\\n\\\n\tllGetRot()\\n\\\nsnippet llGetScale\\n\\\n\tllGetScale()\\n\\\nsnippet llGetScriptName\\n\\\n\tllGetScriptName()\\n\\\nsnippet llGetScriptState\\n\\\n\tllGetScriptState(${1:string script})\\n\\\nsnippet llGetSimStats\\n\\\n\tllGetSimStats(${1:integer stat_type})\\n\\\nsnippet llGetSimulatorHostname\\n\\\n\tllGetSimulatorHostname()\\n\\\nsnippet llGetSPMaxMemory\\n\\\n\tllGetSPMaxMemory()\\n\\\nsnippet llGetStartParameter\\n\\\n\tllGetStartParameter()\\n\\\nsnippet llGetStaticPath\\n\\\n\tllGetStaticPath(${1:vector start}, ${2:vector end}, ${3:float radius}, ${4:list params})\\n\\\nsnippet llGetStatus\\n\\\n\tllGetStatus(${1:integer status})\\n\\\nsnippet llGetSubString\\n\\\n\tllGetSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\n\\\nsnippet llGetSunDirection\\n\\\n\tllGetSunDirection()\\n\\\nsnippet llGetTexture\\n\\\n\tllGetTexture(${1:integer face})\\n\\\nsnippet llGetTextureOffset\\n\\\n\tllGetTextureOffset(${1:integer face})\\n\\\nsnippet llGetTextureRot\\n\\\n\tllGetTextureRot(${1:integer face})\\n\\\nsnippet llGetTextureScale\\n\\\n\tllGetTextureScale(${1:integer face})\\n\\\nsnippet llGetTime\\n\\\n\tllGetTime()\\n\\\nsnippet llGetTimeOfDay\\n\\\n\tllGetTimeOfDay()\\n\\\nsnippet llGetTimestamp\\n\\\n\tllGetTimestamp()\\n\\\nsnippet llGetTorque\\n\\\n\tllGetTorque()\\n\\\nsnippet llGetUnixTime\\n\\\n\tllGetUnixTime()\\n\\\nsnippet llGetUsedMemory\\n\\\n\tllGetUsedMemory()\\n\\\nsnippet llGetUsername\\n\\\n\tllGetUsername(${1:key id})\\n\\\nsnippet llGetVel\\n\\\n\tllGetVel()\\n\\\nsnippet llGetWallclock\\n\\\n\tllGetWallclock()\\n\\\nsnippet llGiveInventory\\n\\\n\tllGiveInventory(${1:key destination}, ${2:string inventory});\\n\\\n\t$0\\n\\\nsnippet llGiveInventoryList\\n\\\n\tllGiveInventoryList(${1:key target}, ${2:string folder}, ${3:list inventory});\\n\\\n\t$0\\n\\\nsnippet llGiveMoney\\n\\\n\tllGiveMoney(${1:key destination}, ${2:integer amount})\\n\\\nsnippet llGround\\n\\\n\tllGround(${1:vector offset})\\n\\\nsnippet llGroundContour\\n\\\n\tllGroundContour(${1:vector offset})\\n\\\nsnippet llGroundNormal\\n\\\n\tllGroundNormal(${1:vector offset})\\n\\\nsnippet llGroundRepel\\n\\\n\tllGroundRepel(${1:float height}, ${2:integer water}, ${3:float tau});\\n\\\n\t$0\\n\\\nsnippet llGroundSlope\\n\\\n\tllGroundSlope(${1:vector offset})\\n\\\nsnippet llHTTPRequest\\n\\\n\tllHTTPRequest(${1:string url}, ${2:list parameters}, ${3:string body})\\n\\\nsnippet llHTTPResponse\\n\\\n\tllHTTPResponse(${1:key request_id}, ${2:integer status}, ${3:string body});\\n\\\n\t$0\\n\\\nsnippet llInsertString\\n\\\n\tllInsertString(${1:string dst}, ${2:integer pos}, ${3:string src})\\n\\\nsnippet llInstantMessage\\n\\\n\tllInstantMessage(${1:key user}, ${2:string message});\\n\\\n\t$0\\n\\\nsnippet llIntegerToBase64\\n\\\n\tllIntegerToBase64(${1:integer number})\\n\\\nsnippet llJson2List\\n\\\n\tllJson2List(${1:string json})\\n\\\nsnippet llJsonGetValue\\n\\\n\tllJsonGetValue(${1:string json}, ${2:list specifiers})\\n\\\nsnippet llJsonSetValue\\n\\\n\tllJsonSetValue(${1:string json}, ${2:list specifiers}, ${3:string newValue})\\n\\\nsnippet llJsonValueType\\n\\\n\tllJsonValueType(${1:string json}, ${2:list specifiers})\\n\\\nsnippet llKey2Name\\n\\\n\tllKey2Name(${1:key id})\\n\\\nsnippet llKeyCountKeyValue\\n\\\n\tllKeyCountKeyValue()\\n\\\nsnippet llKeysKeyValue\\n\\\n\tllKeysKeyValue(${1:integer first}, ${2:integer count})\\n\\\nsnippet llLinkParticleSystem\\n\\\n\tllLinkParticleSystem(${1:integer link}, ${2:list rules});\\n\\\n\t$0\\n\\\nsnippet llLinkSitTarget\\n\\\n\tllLinkSitTarget(${1:integer link}, ${2:vector offset}, ${3:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llList2CSV\\n\\\n\tllList2CSV(${1:list src})\\n\\\nsnippet llList2Float\\n\\\n\tllList2Float(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2Integer\\n\\\n\tllList2Integer(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2Json\\n\\\n\tllList2Json(${1:string type}, ${2:list values})\\n\\\nsnippet llList2Key\\n\\\n\tllList2Key(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2List\\n\\\n\tllList2List(${1:list src}, ${2:integer start}, ${3:integer end})\\n\\\nsnippet llList2ListStrided\\n\\\n\tllList2ListStrided(${1:list src}, ${2:integer start}, ${3:integer end}, ${4:integer stride})\\n\\\nsnippet llList2Rot\\n\\\n\tllList2Rot(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2String\\n\\\n\tllList2String(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2Vector\\n\\\n\tllList2Vector(${1:list src}, ${2:integer index})\\n\\\nsnippet llListen\\n\\\n\tllListen(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string msg})\\n\\\nsnippet llListenControl\\n\\\n\tllListenControl(${1:integer handle}, ${2:integer active});\\n\\\n\t$0\\n\\\nsnippet llListenRemove\\n\\\n\tllListenRemove(${1:integer handle});\\n\\\n\t$0\\n\\\nsnippet llListFindList\\n\\\n\tllListFindList(${1:list src}, ${2:list test})\\n\\\nsnippet llListInsertList\\n\\\n\tllListInsertList(${1:list dest}, ${2:list src}, ${3:integer start})\\n\\\nsnippet llListRandomize\\n\\\n\tllListRandomize(${1:list src}, ${2:integer stride})\\n\\\nsnippet llListReplaceList\\n\\\n\tllListReplaceList(${1:list dest}, ${2:list src}, ${3:integer start}, ${4:integer end})\\n\\\nsnippet llListSort\\n\\\n\tllListSort(${1:list src}, ${2:integer stride}, ${3:integer ascending})\\n\\\nsnippet llListStatistics\\n\\\n\tllListStatistics(${1:integer operation}, ${2:list src})\\n\\\nsnippet llLoadURL\\n\\\n\tllLoadURL(${1:key agent}, ${2:string message}, ${3:string url});\\n\\\n\t$0\\n\\\nsnippet llLog\\n\\\n\tllLog(${1:float val})\\n\\\nsnippet llLog10\\n\\\n\tllLog10(${1:float val})\\n\\\nsnippet llLookAt\\n\\\n\tllLookAt(${1:vector target}, ${2:float strength}, ${3:float damping});\\n\\\n\t$0\\n\\\nsnippet llLoopSound\\n\\\n\tllLoopSound(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llLoopSoundMaster\\n\\\n\tllLoopSoundMaster(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llLoopSoundSlave\\n\\\n\tllLoopSoundSlave(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llManageEstateAccess\\n\\\n\tllManageEstateAccess(${1:integer action}, ${2:key agent})\\n\\\nsnippet llMapDestination\\n\\\n\tllMapDestination(${1:string simname}, ${2:vector pos}, ${3:vector look_at});\\n\\\n\t$0\\n\\\nsnippet llMD5String\\n\\\n\tllMD5String(${1:string src}, ${2:integer nonce})\\n\\\nsnippet llMessageLinked\\n\\\n\tllMessageLinked(${1:integer link}, ${2:integer num}, ${3:string str}, ${4:key id});\\n\\\n\t$0\\n\\\nsnippet llMinEventDelay\\n\\\n\tllMinEventDelay(${1:float delay});\\n\\\n\t$0\\n\\\nsnippet llModifyLand\\n\\\n\tllModifyLand(${1:integer action}, ${2:integer brush});\\n\\\n\t$0\\n\\\nsnippet llModPow\\n\\\n\tllModPow(${1:integer a}, ${2:integer b}, ${3:integer c})\\n\\\nsnippet llMoveToTarget\\n\\\n\tllMoveToTarget(${1:vector target}, ${2:float tau});\\n\\\n\t$0\\n\\\nsnippet llNavigateTo\\n\\\n\tllNavigateTo(${1:vector pos}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llOffsetTexture\\n\\\n\tllOffsetTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llOpenRemoteDataChannel\\n\\\n\tllOpenRemoteDataChannel();\\n\\\n\t$0\\n\\\nsnippet llOverMyLand\\n\\\n\tllOverMyLand(${1:key id})\\n\\\nsnippet llOwnerSay\\n\\\n\tllOwnerSay(${1:string msg});\\n\\\n\t$0\\n\\\nsnippet llParcelMediaCommandList\\n\\\n\tllParcelMediaCommandList(${1:list commandList});\\n\\\n\t$0\\n\\\nsnippet llParcelMediaQuery\\n\\\n\tllParcelMediaQuery(${1:list query})\\n\\\nsnippet llParseString2List\\n\\\n\tllParseString2List(${1:string src}, ${2:list separators}, ${3:list spacers})\\n\\\nsnippet llParseStringKeepNulls\\n\\\n\tllParseStringKeepNulls(${1:string src}, ${2:list separators}, ${3:list spacers})\\n\\\nsnippet llParticleSystem\\n\\\n\tllParticleSystem(${1:list rules});\\n\\\n\t$0\\n\\\nsnippet llPassCollisions\\n\\\n\tllPassCollisions(${1:integer pass});\\n\\\n\t$0\\n\\\nsnippet llPassTouches\\n\\\n\tllPassTouches(${1:integer pass});\\n\\\n\t$0\\n\\\nsnippet llPatrolPoints\\n\\\n\tllPatrolPoints(${1:list patrolPoints}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llPlaySound\\n\\\n\tllPlaySound(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llPlaySoundSlave\\n\\\n\tllPlaySoundSlave(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llPow\\n\\\n\tllPow(${1:float base}, ${2:float exponent})\\n\\\nsnippet llPreloadSound\\n\\\n\tllPreloadSound(${1:string sound});\\n\\\n\t$0\\n\\\nsnippet llPursue\\n\\\n\tllPursue(${1:key target}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llPushObject\\n\\\n\tllPushObject(${1:key target}, ${2:vector impulse}, ${3:vector ang_impulse}, ${4:integer local});\\n\\\n\t$0\\n\\\nsnippet llReadKeyValue\\n\\\n\tllReadKeyValue(${1:string k})\\n\\\nsnippet llRegionSay\\n\\\n\tllRegionSay(${1:integer channel}, ${2:string msg});\\n\\\n\t$0\\n\\\nsnippet llRegionSayTo\\n\\\n\tllRegionSayTo(${1:key target}, ${2:integer channel}, ${3:string msg});\\n\\\n\t$0\\n\\\nsnippet llReleaseControls\\n\\\n\tllReleaseControls();\\n\\\n\t$0\\n\\\nsnippet llReleaseURL\\n\\\n\tllReleaseURL(${1:string url});\\n\\\n\t$0\\n\\\nsnippet llRemoteDataReply\\n\\\n\tllRemoteDataReply(${1:key channel}, ${2:key message_id}, ${3:string sdata}, ${4:integer idata});\\n\\\n\t$0\\n\\\nsnippet llRemoteLoadScriptPin\\n\\\n\tllRemoteLoadScriptPin(${1:key target}, ${2:string name}, ${3:integer pin}, ${4:integer running}, ${5:integer start_param});\\n\\\n\t$0\\n\\\nsnippet llRemoveFromLandBanList\\n\\\n\tllRemoveFromLandBanList(${1:key agent});\\n\\\n\t$0\\n\\\nsnippet llRemoveFromLandPassList\\n\\\n\tllRemoveFromLandPassList(${1:key agent});\\n\\\n\t$0\\n\\\nsnippet llRemoveInventory\\n\\\n\tllRemoveInventory(${1:string item});\\n\\\n\t$0\\n\\\nsnippet llRemoveVehicleFlags\\n\\\n\tllRemoveVehicleFlags(${1:integer flags});\\n\\\n\t$0\\n\\\nsnippet llRequestAgentData\\n\\\n\tllRequestAgentData(${1:key id}, ${2:integer data})\\n\\\nsnippet llRequestDisplayName\\n\\\n\tllRequestDisplayName(${1:key id})\\n\\\nsnippet llRequestExperiencePermissions\\n\\\n\tllRequestExperiencePermissions(${1:key agent}, ${2:string name})\\n\\\nsnippet llRequestInventoryData\\n\\\n\tllRequestInventoryData(${1:string name})\\n\\\nsnippet llRequestPermissions\\n\\\n\tllRequestPermissions(${1:key agent}, ${2:integer permissions})\\n\\\nsnippet llRequestSecureURL\\n\\\n\tllRequestSecureURL()\\n\\\nsnippet llRequestSimulatorData\\n\\\n\tllRequestSimulatorData(${1:string region}, ${2:integer data})\\n\\\nsnippet llRequestURL\\n\\\n\tllRequestURL()\\n\\\nsnippet llRequestUsername\\n\\\n\tllRequestUsername(${1:key id})\\n\\\nsnippet llResetAnimationOverride\\n\\\n\tllResetAnimationOverride(${1:string anim_state});\\n\\\n\t$0\\n\\\nsnippet llResetLandBanList\\n\\\n\tllResetLandBanList();\\n\\\n\t$0\\n\\\nsnippet llResetLandPassList\\n\\\n\tllResetLandPassList();\\n\\\n\t$0\\n\\\nsnippet llResetOtherScript\\n\\\n\tllResetOtherScript(${1:string name});\\n\\\n\t$0\\n\\\nsnippet llResetScript\\n\\\n\tllResetScript();\\n\\\n\t$0\\n\\\nsnippet llResetTime\\n\\\n\tllResetTime();\\n\\\n\t$0\\n\\\nsnippet llReturnObjectsByID\\n\\\n\tllReturnObjectsByID(${1:list objects})\\n\\\nsnippet llReturnObjectsByOwner\\n\\\n\tllReturnObjectsByOwner(${1:key owner}, ${2:integer scope})\\n\\\nsnippet llRezAtRoot\\n\\\n\tllRezAtRoot(${1:string inventory}, ${2:vector position}, ${3:vector velocity}, ${4:rotation rot}, ${5:integer param});\\n\\\n\t$0\\n\\\nsnippet llRezObject\\n\\\n\tllRezObject(${1:string inventory}, ${2:vector pos}, ${3:vector vel}, ${4:rotation rot}, ${5:integer param});\\n\\\n\t$0\\n\\\nsnippet llRot2Angle\\n\\\n\tllRot2Angle(${1:rotation rot})\\n\\\nsnippet llRot2Axis\\n\\\n\tllRot2Axis(${1:rotation rot})\\n\\\nsnippet llRot2Euler\\n\\\n\tllRot2Euler(${1:rotation quat})\\n\\\nsnippet llRot2Fwd\\n\\\n\tllRot2Fwd(${1:rotation q})\\n\\\nsnippet llRot2Left\\n\\\n\tllRot2Left(${1:rotation q})\\n\\\nsnippet llRot2Up\\n\\\n\tllRot2Up(${1:rotation q})\\n\\\nsnippet llRotateTexture\\n\\\n\tllRotateTexture(${1:float angle}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llRotBetween\\n\\\n\tllRotBetween(${1:vector start}, ${2:vector end})\\n\\\nsnippet llRotLookAt\\n\\\n\tllRotLookAt(${1:rotation target_direction}, ${2:float strength}, ${3:float damping});\\n\\\n\t$0\\n\\\nsnippet llRotTarget\\n\\\n\tllRotTarget(${1:rotation rot}, ${2:float error})\\n\\\nsnippet llRotTargetRemove\\n\\\n\tllRotTargetRemove(${1:integer handle});\\n\\\n\t$0\\n\\\nsnippet llRound\\n\\\n\tllRound(${1:float val})\\n\\\nsnippet llSameGroup\\n\\\n\tllSameGroup(${1:key group})\\n\\\nsnippet llSay\\n\\\n\tllSay(${1:integer channel}, ${2:string msg});\\n\\\n\t$0\\n\\\nsnippet llScaleByFactor\\n\\\n\tllScaleByFactor(${1:float scaling_factor})\\n\\\nsnippet llScaleTexture\\n\\\n\tllScaleTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llScriptDanger\\n\\\n\tllScriptDanger(${1:vector pos})\\n\\\nsnippet llScriptProfiler\\n\\\n\tllScriptProfiler(${1:integer flags});\\n\\\n\t$0\\n\\\nsnippet llSendRemoteData\\n\\\n\tllSendRemoteData(${1:key channel}, ${2:string dest}, ${3:integer idata}, ${4:string sdata})\\n\\\nsnippet llSensor\\n\\\n\tllSensor(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc});\\n\\\n\t$0\\n\\\nsnippet llSensorRepeat\\n\\\n\tllSensorRepeat(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc}, ${6:float rate});\\n\\\n\t$0\\n\\\nsnippet llSetAlpha\\n\\\n\tllSetAlpha(${1:float alpha}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetAngularVelocity\\n\\\n\tllSetAngularVelocity(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llSetAnimationOverride\\n\\\n\tllSetAnimationOverride(${1:string anim_state}, ${2:string anim})\\n\\\nsnippet llSetBuoyancy\\n\\\n\tllSetBuoyancy(${1:float buoyancy});\\n\\\n\t$0\\n\\\nsnippet llSetCameraAtOffset\\n\\\n\tllSetCameraAtOffset(${1:vector offset});\\n\\\n\t$0\\n\\\nsnippet llSetCameraEyeOffset\\n\\\n\tllSetCameraEyeOffset(${1:vector offset});\\n\\\n\t$0\\n\\\nsnippet llSetCameraParams\\n\\\n\tllSetCameraParams(${1:list rules});\\n\\\n\t$0\\n\\\nsnippet llSetClickAction\\n\\\n\tllSetClickAction(${1:integer action});\\n\\\n\t$0\\n\\\nsnippet llSetColor\\n\\\n\tllSetColor(${1:vector color}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetContentType\\n\\\n\tllSetContentType(${1:key request_id}, ${2:integer content_type});\\n\\\n\t$0\\n\\\nsnippet llSetDamage\\n\\\n\tllSetDamage(${1:float damage});\\n\\\n\t$0\\n\\\nsnippet llSetForce\\n\\\n\tllSetForce(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llSetForceAndTorque\\n\\\n\tllSetForceAndTorque(${1:vector force}, ${2:vector torque}, ${3:integer local});\\n\\\n\t$0\\n\\\nsnippet llSetHoverHeight\\n\\\n\tllSetHoverHeight(${1:float height}, ${2:integer water}, ${3:float tau});\\n\\\n\t$0\\n\\\nsnippet llSetKeyframedMotion\\n\\\n\tllSetKeyframedMotion(${1:list keyframes}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llSetLinkAlpha\\n\\\n\tllSetLinkAlpha(${1:integer link}, ${2:float alpha}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetLinkCamera\\n\\\n\tllSetLinkCamera(${1:integer link}, ${2:vector eye}, ${3:vector at});\\n\\\n\t$0\\n\\\nsnippet llSetLinkColor\\n\\\n\tllSetLinkColor(${1:integer link}, ${2:vector color}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetLinkMedia\\n\\\n\tllSetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params});\\n\\\n\t$0\\n\\\nsnippet llSetLinkPrimitiveParams\\n\\\n\tllSetLinkPrimitiveParams(${1:integer link}, ${2:list rules});\\n\\\n\t$0\\n\\\nsnippet llSetLinkPrimitiveParamsFast\\n\\\n\tllSetLinkPrimitiveParamsFast(${1:integer link}, ${2:list rules});\\n\\\n\t$0\\n\\\nsnippet llSetLinkTexture\\n\\\n\tllSetLinkTexture(${1:integer link}, ${2:string texture}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetLinkTextureAnim\\n\\\n\tllSetLinkTextureAnim(${1:integer link}, ${2:integer mode}, ${3:integer face}, ${4:integer sizex}, ${5:integer sizey}, ${6:float start}, ${7:float length}, ${8:float rate});\\n\\\n\t$0\\n\\\nsnippet llSetLocalRot\\n\\\n\tllSetLocalRot(${1:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llSetMemoryLimit\\n\\\n\tllSetMemoryLimit(${1:integer limit})\\n\\\nsnippet llSetObjectDesc\\n\\\n\tllSetObjectDesc(${1:string description});\\n\\\n\t$0\\n\\\nsnippet llSetObjectName\\n\\\n\tllSetObjectName(${1:string name});\\n\\\n\t$0\\n\\\nsnippet llSetParcelMusicURL\\n\\\n\tllSetParcelMusicURL(${1:string url});\\n\\\n\t$0\\n\\\nsnippet llSetPayPrice\\n\\\n\tllSetPayPrice(${1:integer price}, [${2:integer price_button_a}, ${3:integer price_button_b}, ${4:integer price_button_c}, ${5:integer price_button_d}]);\\n\\\n\t$0\\n\\\nsnippet llSetPhysicsMaterial\\n\\\n\tllSetPhysicsMaterial(${1:integer mask}, ${2:float gravity_multiplier}, ${3:float restitution}, ${4:float friction}, ${5:float density});\\n\\\n\t$0\\n\\\nsnippet llSetPos\\n\\\n\tllSetPos(${1:vector pos});\\n\\\n\t$0\\n\\\nsnippet llSetPrimitiveParams\\n\\\n\tllSetPrimitiveParams(${1:list rules});\\n\\\n\t$0\\n\\\nsnippet llSetPrimMediaParams\\n\\\n\tllSetPrimMediaParams(${1:integer face}, ${2:list params});\\n\\\n\t$0\\n\\\nsnippet llSetRegionPos\\n\\\n\tllSetRegionPos(${1:vector position})\\n\\\nsnippet llSetRemoteScriptAccessPin\\n\\\n\tllSetRemoteScriptAccessPin(${1:integer pin});\\n\\\n\t$0\\n\\\nsnippet llSetRot\\n\\\n\tllSetRot(${1:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llSetScale\\n\\\n\tllSetScale(${1:vector size});\\n\\\n\t$0\\n\\\nsnippet llSetScriptState\\n\\\n\tllSetScriptState(${1:string name}, ${2:integer run});\\n\\\n\t$0\\n\\\nsnippet llSetSitText\\n\\\n\tllSetSitText(${1:string text});\\n\\\n\t$0\\n\\\nsnippet llSetSoundQueueing\\n\\\n\tllSetSoundQueueing(${1:integer queue});\\n\\\n\t$0\\n\\\nsnippet llSetSoundRadius\\n\\\n\tllSetSoundRadius(${1:float radius});\\n\\\n\t$0\\n\\\nsnippet llSetStatus\\n\\\n\tllSetStatus(${1:integer status}, ${2:integer value});\\n\\\n\t$0\\n\\\nsnippet llSetText\\n\\\n\tllSetText(${1:string text}, ${2:vector color}, ${3:float alpha});\\n\\\n\t$0\\n\\\nsnippet llSetTexture\\n\\\n\tllSetTexture(${1:string texture}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetTextureAnim\\n\\\n\tllSetTextureAnim(${1:integer mode}, ${2:integer face}, ${3:integer sizex}, ${4:integer sizey}, ${5:float start}, ${6:float length}, ${7:float rate});\\n\\\n\t$0\\n\\\nsnippet llSetTimerEvent\\n\\\n\tllSetTimerEvent(${1:float sec});\\n\\\n\t$0\\n\\\nsnippet llSetTorque\\n\\\n\tllSetTorque(${1:vector torque}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llSetTouchText\\n\\\n\tllSetTouchText(${1:string text});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleFlags\\n\\\n\tllSetVehicleFlags(${1:integer flags});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleFloatParam\\n\\\n\tllSetVehicleFloatParam(${1:integer param}, ${2:float value});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleRotationParam\\n\\\n\tllSetVehicleRotationParam(${1:integer param}, ${2:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleType\\n\\\n\tllSetVehicleType(${1:integer type});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleVectorParam\\n\\\n\tllSetVehicleVectorParam(${1:integer param}, ${2:vector vec});\\n\\\n\t$0\\n\\\nsnippet llSetVelocity\\n\\\n\tllSetVelocity(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llSHA1String\\n\\\n\tllSHA1String(${1:string src})\\n\\\nsnippet llShout\\n\\\n\tllShout(${1:integer channel}, ${2:string msg});\\n\\\n\t$0\\n\\\nsnippet llSin\\n\\\n\tllSin(${1:float theta})\\n\\\nsnippet llSitTarget\\n\\\n\tllSitTarget(${1:vector offset}, ${2:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llSleep\\n\\\n\tllSleep(${1:float sec});\\n\\\n\t$0\\n\\\nsnippet llSqrt\\n\\\n\tllSqrt(${1:float val})\\n\\\nsnippet llStartAnimation\\n\\\n\tllStartAnimation(${1:string anim});\\n\\\n\t$0\\n\\\nsnippet llStopAnimation\\n\\\n\tllStopAnimation(${1:string anim});\\n\\\n\t$0\\n\\\nsnippet llStopHover\\n\\\n\tllStopHover();\\n\\\n\t$0\\n\\\nsnippet llStopLookAt\\n\\\n\tllStopLookAt();\\n\\\n\t$0\\n\\\nsnippet llStopMoveToTarget\\n\\\n\tllStopMoveToTarget();\\n\\\n\t$0\\n\\\nsnippet llStopSound\\n\\\n\tllStopSound();\\n\\\n\t$0\\n\\\nsnippet llStringLength\\n\\\n\tllStringLength(${1:string str})\\n\\\nsnippet llStringToBase64\\n\\\n\tllStringToBase64(${1:string str})\\n\\\nsnippet llStringTrim\\n\\\n\tllStringTrim(${1:string src}, ${2:integer type})\\n\\\nsnippet llSubStringIndex\\n\\\n\tllSubStringIndex(${1:string source}, ${2:string pattern})\\n\\\nsnippet llTakeControls\\n\\\n\tllTakeControls(${1:integer controls}, ${2:integer accept}, ${3:integer pass_on});\\n\\\n\t$0\\n\\\nsnippet llTan\\n\\\n\tllTan(${1:float theta})\\n\\\nsnippet llTarget\\n\\\n\tllTarget(${1:vector position}, ${2:float range})\\n\\\nsnippet llTargetOmega\\n\\\n\tllTargetOmega(${1:vector axis}, ${2:float spinrate}, ${3:float gain});\\n\\\n\t$0\\n\\\nsnippet llTargetRemove\\n\\\n\tllTargetRemove(${1:integer handle});\\n\\\n\t$0\\n\\\nsnippet llTeleportAgent\\n\\\n\tllTeleportAgent(${1:key agent}, ${2:string landmark}, ${3:vector position}, ${4:vector look_at});\\n\\\n\t$0\\n\\\nsnippet llTeleportAgentGlobalCoords\\n\\\n\tllTeleportAgentGlobalCoords(${1:key agent}, ${2:vector global_coordinates}, ${3:vector region_coordinates}, ${4:vector look_at});\\n\\\n\t$0\\n\\\nsnippet llTeleportAgentHome\\n\\\n\tllTeleportAgentHome(${1:key agent});\\n\\\n\t$0\\n\\\nsnippet llTextBox\\n\\\n\tllTextBox(${1:key agent}, ${2:string message}, ${3:integer channel});\\n\\\n\t$0\\n\\\nsnippet llToLower\\n\\\n\tllToLower(${1:string src})\\n\\\nsnippet llToUpper\\n\\\n\tllToUpper(${1:string src})\\n\\\nsnippet llTransferLindenDollars\\n\\\n\tllTransferLindenDollars(${1:key destination}, ${2:integer amount})\\n\\\nsnippet llTriggerSound\\n\\\n\tllTriggerSound(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llTriggerSoundLimited\\n\\\n\tllTriggerSoundLimited(${1:string sound}, ${2:float volume}, ${3:vector top_north_east}, ${4:vector bottom_south_west});\\n\\\n\t$0\\n\\\nsnippet llUnescapeURL\\n\\\n\tllUnescapeURL(${1:string url})\\n\\\nsnippet llUnSit\\n\\\n\tllUnSit(${1:key id});\\n\\\n\t$0\\n\\\nsnippet llUpdateCharacter\\n\\\n\tllUpdateCharacter(${1:list options})\\n\\\nsnippet llUpdateKeyValue\\n\\\n\tllUpdateKeyValue(${1:string k}, ${2:string v}, ${3:integer checked}, ${4:string ov})\\n\\\nsnippet llVecDist\\n\\\n\tllVecDist(${1:vector vec_a}, ${2:vector vec_b})\\n\\\nsnippet llVecMag\\n\\\n\tllVecMag(${1:vector vec})\\n\\\nsnippet llVecNorm\\n\\\n\tllVecNorm(${1:vector vec})\\n\\\nsnippet llVolumeDetect\\n\\\n\tllVolumeDetect(${1:integer detect});\\n\\\n\t$0\\n\\\nsnippet llWanderWithin\\n\\\n\tllWanderWithin(${1:vector origin}, ${2:vector dist}, ${3:list options});\\n\\\n\t$0\\n\\\nsnippet llWater\\n\\\n\tllWater(${1:vector offset});\\n\\\n\t$0\\n\\\nsnippet llWhisper\\n\\\n\tllWhisper(${1:integer channel}, ${2:string msg});\\n\\\n\t$0\\n\\\nsnippet llWind\\n\\\n\tllWind(${1:vector offset});\\n\\\n\t$0\\n\\\nsnippet llXorBase64\\n\\\n\tllXorBase64(${1:string str1}, ${2:string str2})\\n\\\nsnippet money\\n\\\n\tmoney(${1:key id}, ${2:integer amount})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet object_rez\\n\\\n\tobject_rez(${1:key id})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet on_rez\\n\\\n\ton_rez(${1:integer start_param})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet path_update\\n\\\n\tpath_update(${1:integer type}, ${2:list reserved})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet remote_data\\n\\\n\tremote_data(${1:integer event_type}, ${2:key channel}, ${3:key message_id}, ${4:string sender}, ${5:integer idata}, ${6:string sdata})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet run_time_permissions\\n\\\n\trun_time_permissions(${1:integer perm})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet sensor\\n\\\n\tsensor(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet state\\n\\\n\tstate ${1:name}\\n\\\nsnippet touch\\n\\\n\ttouch(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet touch_end\\n\\\n\ttouch_end(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet touch_start\\n\\\n\ttouch_start(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet transaction_result\\n\\\n\ttransaction_result(${1:key id}, ${2:integer success}, ${3:string data})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet while\\n\\\n\twhile (${1:condition})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\n\";\nexports.scope = \"lsl\";\n\n});                (function() {\n                    window.require([\"ace/snippets/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/lua.js",
    "content": "define(\"ace/snippets/lua\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet #!\\n\\\n\t#!/usr/bin/env lua\\n\\\n\t$1\\n\\\nsnippet local\\n\\\n\tlocal ${1:x} = ${2:1}\\n\\\nsnippet fun\\n\\\n\tfunction ${1:fname}(${2:...})\\n\\\n\t\t${3:-- body}\\n\\\n\tend\\n\\\nsnippet for\\n\\\n\tfor ${1:i}=${2:1},${3:10} do\\n\\\n\t\t${4:print(i)}\\n\\\n\tend\\n\\\nsnippet forp\\n\\\n\tfor ${1:i},${2:v} in pairs(${3:table_name}) do\\n\\\n\t   ${4:-- body}\\n\\\n\tend\\n\\\nsnippet fori\\n\\\n\tfor ${1:i},${2:v} in ipairs(${3:table_name}) do\\n\\\n\t   ${4:-- body}\\n\\\n\tend\\n\\\n\";\nexports.scope = \"lua\";\n\n});                (function() {\n                    window.require([\"ace/snippets/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/luapage.js",
    "content": "define(\"ace/snippets/luapage\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"luapage\";\n\n});                (function() {\n                    window.require([\"ace/snippets/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/lucene.js",
    "content": "define(\"ace/snippets/lucene\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"lucene\";\n\n});                (function() {\n                    window.require([\"ace/snippets/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/makefile.js",
    "content": "define(\"ace/snippets/makefile\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet ifeq\\n\\\n\tifeq (${1:cond0},${2:cond1})\\n\\\n\t\t${3:code}\\n\\\n\tendif\\n\\\n\";\nexports.scope = \"makefile\";\n\n});                (function() {\n                    window.require([\"ace/snippets/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/markdown.js",
    "content": "define(\"ace/snippets/markdown\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Markdown\\n\\\n\\n\\\n# Includes octopress (http://octopress.org/) snippets\\n\\\n\\n\\\nsnippet [\\n\\\n\t[${1:text}](http://${2:address} \\\"${3:title}\\\")\\n\\\nsnippet [*\\n\\\n\t[${1:link}](${2:`@*`} \\\"${3:title}\\\")${4}\\n\\\n\\n\\\nsnippet [:\\n\\\n\t[${1:id}]: http://${2:url} \\\"${3:title}\\\"\\n\\\nsnippet [:*\\n\\\n\t[${1:id}]: ${2:`@*`} \\\"${3:title}\\\"\\n\\\n\\n\\\nsnippet ![\\n\\\n\t![${1:alttext}](${2:/images/image.jpg} \\\"${3:title}\\\")\\n\\\nsnippet ![*\\n\\\n\t![${1:alt}](${2:`@*`} \\\"${3:title}\\\")${4}\\n\\\n\\n\\\nsnippet ![:\\n\\\n\t![${1:id}]: ${2:url} \\\"${3:title}\\\"\\n\\\nsnippet ![:*\\n\\\n\t![${1:id}]: ${2:`@*`} \\\"${3:title}\\\"\\n\\\n\\n\\\nsnippet ===\\n\\\nregex /^/=+/=*//\\n\\\n\t${PREV_LINE/./=/g}\\n\\\n\t\\n\\\n\t${0}\\n\\\nsnippet ---\\n\\\nregex /^/-+/-*//\\n\\\n\t${PREV_LINE/./-/g}\\n\\\n\t\\n\\\n\t${0}\\n\\\nsnippet blockquote\\n\\\n\t{% blockquote %}\\n\\\n\t${1:quote}\\n\\\n\t{% endblockquote %}\\n\\\n\\n\\\nsnippet blockquote-author\\n\\\n\t{% blockquote ${1:author}, ${2:title} %}\\n\\\n\t${3:quote}\\n\\\n\t{% endblockquote %}\\n\\\n\\n\\\nsnippet blockquote-link\\n\\\n\t{% blockquote ${1:author} ${2:URL} ${3:link_text} %}\\n\\\n\t${4:quote}\\n\\\n\t{% endblockquote %}\\n\\\n\\n\\\nsnippet bt-codeblock-short\\n\\\n\t```\\n\\\n\t${1:code_snippet}\\n\\\n\t```\\n\\\n\\n\\\nsnippet bt-codeblock-full\\n\\\n\t``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\\n\\\n\t${5:code_snippet}\\n\\\n\t```\\n\\\n\\n\\\nsnippet codeblock-short\\n\\\n\t{% codeblock %}\\n\\\n\t${1:code_snippet}\\n\\\n\t{% endcodeblock %}\\n\\\n\\n\\\nsnippet codeblock-full\\n\\\n\t{% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\\n\\\n\t${5:code_snippet}\\n\\\n\t{% endcodeblock %}\\n\\\n\\n\\\nsnippet gist-full\\n\\\n\t{% gist ${1:gist_id} ${2:filename} %}\\n\\\n\\n\\\nsnippet gist-short\\n\\\n\t{% gist ${1:gist_id} %}\\n\\\n\\n\\\nsnippet img\\n\\\n\t{% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\\n\\\n\\n\\\nsnippet youtube\\n\\\n\t{% youtube ${1:video_id} %}\\n\\\n\\n\\\n# The quote should appear only once in the text. It is inherently part of it.\\n\\\n# See http://octopress.org/docs/plugins/pullquote/ for more info.\\n\\\n\\n\\\nsnippet pullquote\\n\\\n\t{% pullquote %}\\n\\\n\t${1:text} {\\\" ${2:quote} \\\"} ${3:text}\\n\\\n\t{% endpullquote %}\\n\\\n\";\nexports.scope = \"markdown\";\n\n});                (function() {\n                    window.require([\"ace/snippets/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/mask.js",
    "content": "define(\"ace/snippets/mask\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mask\";\n\n});                (function() {\n                    window.require([\"ace/snippets/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/matlab.js",
    "content": "define(\"ace/snippets/matlab\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"matlab\";\n\n});                (function() {\n                    window.require([\"ace/snippets/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/maze.js",
    "content": "define(\"ace/snippets/maze\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet >\\n\\\ndescription assignment\\n\\\nscope maze\\n\\\n\t-> ${1}= ${2}\\n\\\n\\n\\\nsnippet >\\n\\\ndescription if\\n\\\nscope maze\\n\\\n\t-> IF ${2:**} THEN %${3:L} ELSE %${4:R}\\n\\\n\";\nexports.scope = \"maze\";\n\n});                (function() {\n                    window.require([\"ace/snippets/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/mel.js",
    "content": "define(\"ace/snippets/mel\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mel\";\n\n});                (function() {\n                    window.require([\"ace/snippets/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/mixal.js",
    "content": "define(\"ace/snippets/mixal\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mixal\";\n\n});                (function() {\n                    window.require([\"ace/snippets/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/mushcode.js",
    "content": "define(\"ace/snippets/mushcode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mushcode\";\n\n});                (function() {\n                    window.require([\"ace/snippets/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/mysql.js",
    "content": "define(\"ace/snippets/mysql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mysql\";\n\n});                (function() {\n                    window.require([\"ace/snippets/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/nix.js",
    "content": "define(\"ace/snippets/nix\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"nix\";\n\n});                (function() {\n                    window.require([\"ace/snippets/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/nsis.js",
    "content": "define(\"ace/snippets/nsis\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/objectivec.js",
    "content": "define(\"ace/snippets/objectivec\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"objectivec\";\n\n});                (function() {\n                    window.require([\"ace/snippets/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/ocaml.js",
    "content": "define(\"ace/snippets/ocaml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ocaml\";\n\n});                (function() {\n                    window.require([\"ace/snippets/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/pascal.js",
    "content": "define(\"ace/snippets/pascal\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"pascal\";\n\n});                (function() {\n                    window.require([\"ace/snippets/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/perl.js",
    "content": "define(\"ace/snippets/perl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# #!/usr/bin/perl\\n\\\nsnippet #!\\n\\\n\t#!/usr/bin/env perl\\n\\\n\\n\\\n# Hash Pointer\\n\\\nsnippet .\\n\\\n\t =>\\n\\\n# Function\\n\\\nsnippet sub\\n\\\n\tsub ${1:function_name} {\\n\\\n\t\t${2:#body ...}\\n\\\n\t}\\n\\\n# Conditional\\n\\\nsnippet if\\n\\\n\tif (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# Conditional if..else\\n\\\nsnippet ife\\n\\\n\tif (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n\telse {\\n\\\n\t\t${3:# else...}\\n\\\n\t}\\n\\\n# Conditional if..elsif..else\\n\\\nsnippet ifee\\n\\\n\tif (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n\telsif (${3}) {\\n\\\n\t\t${4:# elsif...}\\n\\\n\t}\\n\\\n\telse {\\n\\\n\t\t${5:# else...}\\n\\\n\t}\\n\\\n# Conditional One-line\\n\\\nsnippet xif\\n\\\n\t${1:expression} if ${2:condition};${3}\\n\\\n# Unless conditional\\n\\\nsnippet unless\\n\\\n\tunless (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# Unless conditional One-line\\n\\\nsnippet xunless\\n\\\n\t${1:expression} unless ${2:condition};${3}\\n\\\n# Try/Except\\n\\\nsnippet eval\\n\\\n\tlocal $@;\\n\\\n\teval {\\n\\\n\t\t${1:# do something risky...}\\n\\\n\t};\\n\\\n\tif (my $e = $@) {\\n\\\n\t\t${2:# handle failure...}\\n\\\n\t}\\n\\\n# While Loop\\n\\\nsnippet wh\\n\\\n\twhile (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# While Loop One-line\\n\\\nsnippet xwh\\n\\\n\t${1:expression} while ${2:condition};${3}\\n\\\n# C-style For Loop\\n\\\nsnippet cfor\\n\\\n\tfor (my $${2:var} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\\\n\t\t${4:# body...}\\n\\\n\t}\\n\\\n# For loop one-line\\n\\\nsnippet xfor\\n\\\n\t${1:expression} for @${2:array};${3}\\n\\\n# Foreach Loop\\n\\\nsnippet for\\n\\\n\tforeach my $${1:x} (@${2:array}) {\\n\\\n\t\t${3:# body...}\\n\\\n\t}\\n\\\n# Foreach Loop One-line\\n\\\nsnippet fore\\n\\\n\t${1:expression} foreach @${2:array};${3}\\n\\\n# Package\\n\\\nsnippet package\\n\\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`};\\n\\\n\\n\\\n\t${2}\\n\\\n\\n\\\n\t1;\\n\\\n\\n\\\n\t__END__\\n\\\n# Package syntax perl >= 5.14\\n\\\nsnippet packagev514\\n\\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`} ${2:0.99};\\n\\\n\\n\\\n\t${3}\\n\\\n\\n\\\n\t1;\\n\\\n\\n\\\n\t__END__\\n\\\n#moose\\n\\\nsnippet moose\\n\\\n\tuse Moose;\\n\\\n\tuse namespace::autoclean;\\n\\\n\t${1:#}BEGIN {extends '${2:ParentClass}'};\\n\\\n\\n\\\n\t${3}\\n\\\n# parent\\n\\\nsnippet parent\\n\\\n\tuse parent qw(${1:Parent Class});\\n\\\n# Read File\\n\\\nsnippet slurp\\n\\\n\tmy $${1:var} = do { local $/; open my $file, '<', \\\"${2:file}\\\"; <$file> };\\n\\\n\t${3}\\n\\\n# strict warnings\\n\\\nsnippet strwar\\n\\\n\tuse strict;\\n\\\n\tuse warnings;\\n\\\n# older versioning with perlcritic bypass\\n\\\nsnippet vers\\n\\\n\t## no critic\\n\\\n\tour $VERSION = '${1:version}';\\n\\\n\teval $VERSION;\\n\\\n\t## use critic\\n\\\n# new 'switch' like feature\\n\\\nsnippet switch\\n\\\n\tuse feature 'switch';\\n\\\n\\n\\\n# Anonymous subroutine\\n\\\nsnippet asub\\n\\\n\tsub {\\n\\\n\t \t${1:# body }\\n\\\n\t}\\n\\\n\\n\\\n\\n\\\n\\n\\\n# Begin block\\n\\\nsnippet begin\\n\\\n\tBEGIN {\\n\\\n\t\t${1:# begin body}\\n\\\n\t}\\n\\\n\\n\\\n# call package function with some parameter\\n\\\nsnippet pkgmv\\n\\\n\t__PACKAGE__->${1:package_method}(${2:var})\\n\\\n\\n\\\n# call package function without a parameter\\n\\\nsnippet pkgm\\n\\\n\t__PACKAGE__->${1:package_method}()\\n\\\n\\n\\\n# call package \\\"get_\\\" function without a parameter\\n\\\nsnippet pkget\\n\\\n\t__PACKAGE__->get_${1:package_method}()\\n\\\n\\n\\\n# call package function with a parameter\\n\\\nsnippet pkgetv\\n\\\n\t__PACKAGE__->get_${1:package_method}(${2:var})\\n\\\n\\n\\\n# complex regex\\n\\\nsnippet qrx\\n\\\n\tqr/\\n\\\n\t     ${1:regex}\\n\\\n\t/xms\\n\\\n\\n\\\n#simpler regex\\n\\\nsnippet qr/\\n\\\n\tqr/${1:regex}/x\\n\\\n\\n\\\n#given\\n\\\nsnippet given\\n\\\n\tgiven ($${1:var}) {\\n\\\n\t\t${2:# cases}\\n\\\n\t\t${3:# default}\\n\\\n\t}\\n\\\n\\n\\\n# switch-like case\\n\\\nsnippet when\\n\\\n\twhen (${1:case}) {\\n\\\n\t\t${2:# body}\\n\\\n\t}\\n\\\n\\n\\\n# hash slice\\n\\\nsnippet hslice\\n\\\n\t@{ ${1:hash}  }{ ${2:array} }\\n\\\n\\n\\\n\\n\\\n# map\\n\\\nsnippet map\\n\\\n\tmap {  ${2: body }    }  ${1: @array } ;\\n\\\n\\n\\\n\\n\\\n\\n\\\n# Pod stub\\n\\\nsnippet ppod\\n\\\n\t=head1 NAME\\n\\\n\\n\\\n\t${1:ClassName} - ${2:ShortDesc}\\n\\\n\\n\\\n\t=head1 SYNOPSIS\\n\\\n\\n\\\n\t  use $1;\\n\\\n\\n\\\n\t  ${3:# synopsis...}\\n\\\n\\n\\\n\t=head1 DESCRIPTION\\n\\\n\\n\\\n\t${4:# longer description...}\\n\\\n\\n\\\n\\n\\\n\t=head1 INTERFACE\\n\\\n\\n\\\n\\n\\\n\t=head1 DEPENDENCIES\\n\\\n\\n\\\n\\n\\\n\t=head1 SEE ALSO\\n\\\n\\n\\\n\\n\\\n# Heading for a subroutine stub\\n\\\nsnippet psub\\n\\\n\t=head2 ${1:MethodName}\\n\\\n\\n\\\n\t${2:Summary....}\\n\\\n\\n\\\n# Heading for inline subroutine pod\\n\\\nsnippet psubi\\n\\\n\t=head2 ${1:MethodName}\\n\\\n\\n\\\n\t${2:Summary...}\\n\\\n\\n\\\n\\n\\\n\t=cut\\n\\\n# inline documented subroutine\\n\\\nsnippet subpod\\n\\\n\t=head2 $1\\n\\\n\\n\\\n\tSummary of $1\\n\\\n\\n\\\n\t=cut\\n\\\n\\n\\\n\tsub ${1:subroutine_name} {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# Subroutine signature\\n\\\nsnippet parg\\n\\\n\t=over 2\\n\\\n\\n\\\n\t=item\\n\\\n\tArguments\\n\\\n\\n\\\n\\n\\\n\t=over 3\\n\\\n\\n\\\n\t=item\\n\\\n\tC<${1:DataStructure}>\\n\\\n\\n\\\n\t  ${2:Sample}\\n\\\n\\n\\\n\\n\\\n\t=back\\n\\\n\\n\\\n\\n\\\n\t=item\\n\\\n\tReturn\\n\\\n\\n\\\n\t=over 3\\n\\\n\\n\\\n\\n\\\n\t=item\\n\\\n\tC<${3:...return data}>\\n\\\n\\n\\\n\\n\\\n\t=back\\n\\\n\\n\\\n\\n\\\n\t=back\\n\\\n\\n\\\n\\n\\\n\\n\\\n# Moose has\\n\\\nsnippet has\\n\\\n\thas ${1:attribute} => (\\n\\\n\t\tis\t    => '${2:ro|rw}',\\n\\\n\t\tisa \t=> '${3:Str|Int|HashRef|ArrayRef|etc}',\\n\\\n\t\tdefault => sub {\\n\\\n\t\t\t${4:defaultvalue}\\n\\\n\t\t},\\n\\\n\t\t${5:# other attributes}\\n\\\n\t);\\n\\\n\\n\\\n\\n\\\n# override\\n\\\nsnippet override\\n\\\n\toverride ${1:attribute} => sub {\\n\\\n\t\t${2:# my $self = shift;};\\n\\\n\t\t${3:# my ($self, $args) = @_;};\\n\\\n\t};\\n\\\n\\n\\\n\\n\\\n# use test classes\\n\\\nsnippet tuse\\n\\\n\tuse Test::More;\\n\\\n\tuse Test::Deep; # (); # uncomment to stop prototype errors\\n\\\n\tuse Test::Exception;\\n\\\n\\n\\\n# local test lib\\n\\\nsnippet tlib\\n\\\n\tuse lib qw{ ./t/lib };\\n\\\n\\n\\\n#test methods\\n\\\nsnippet tmeths\\n\\\n\t$ENV{TEST_METHOD} = '${1:regex}';\\n\\\n\\n\\\n# runtestclass\\n\\\nsnippet trunner\\n\\\n\tuse ${1:test_class};\\n\\\n\t$1->runtests();\\n\\\n\\n\\\n# Test::Class-style test\\n\\\nsnippet tsub\\n\\\n\tsub t${1:number}_${2:test_case} :Test(${3:num_of_tests}) {\\n\\\n\t\tmy $self = shift;\\n\\\n\t\t${4:#  body}\\n\\\n\\n\\\n\t}\\n\\\n\\n\\\n# Test::Routine-style test\\n\\\nsnippet trsub\\n\\\n\ttest ${1:test_name} => { description => '${2:Description of test.}'} => sub {\\n\\\n\t\tmy ($self) = @_;\\n\\\n\t\t${3:# test code}\\n\\\n\t};\\n\\\n\\n\\\n#prep test method\\n\\\nsnippet tprep\\n\\\n\tsub prep${1:number}_${2:test_case} :Test(startup) {\\n\\\n\t\tmy $self = shift;\\n\\\n\t\t${4:#  body}\\n\\\n\t}\\n\\\n\\n\\\n# cause failures to print stack trace\\n\\\nsnippet debug_trace\\n\\\n\tuse Carp; # 'verbose';\\n\\\n\t# cloak \\\"die\\\"\\n\\\n\t# warn \\\"warning\\\"\\n\\\n\t$SIG{'__DIE__'} = sub {\\n\\\n\t\trequire Carp; Carp::confess\\n\\\n\t};\\n\\\n\\n\\\n\";\nexports.scope = \"perl\";\n\n});                (function() {\n                    window.require([\"ace/snippets/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/perl6.js",
    "content": "define(\"ace/snippets/perl6\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"perl6\";\n\n});                (function() {\n                    window.require([\"ace/snippets/perl6\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/pgsql.js",
    "content": "define(\"ace/snippets/pgsql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"pgsql\";\n\n});                (function() {\n                    window.require([\"ace/snippets/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/php.js",
    "content": "define(\"ace/snippets/php\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet ec\\n\\\n\techo ${1};\\n\\\nsnippet ns\\n\\\n\tnamespace ${1:Foo\\\\Bar\\\\Baz};\\n\\\n\t${2}\\n\\\nsnippet use\\n\\\n\tuse ${1:Foo\\\\Bar\\\\Baz};\\n\\\n\t${2}\\n\\\nsnippet c\\n\\\n\t${1:abstract }class ${2:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet i\\n\\\n\tinterface ${1:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet t.\\n\\\n\t$this->${1}\\n\\\nsnippet f\\n\\\n\tfunction ${1:foo}(${2:array }${3:$bar})\\n\\\n\t{\\n\\\n\t\t${4}\\n\\\n\t}\\n\\\n# method\\n\\\nsnippet m\\n\\\n\t${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\\n\\\n\t{\\n\\\n\t\t${7}\\n\\\n\t}\\n\\\n# setter method\\n\\\nsnippet sm\\n\\\n\t/**\\n\\\n\t * Sets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @param ${2:$1} $$1 ${3:description}\\n\\\n\t *\\n\\\n\t * @return ${4:$FILENAME}\\n\\\n\t */\\n\\\n\t${5:public} function set${6:$2}(${7:$2 }$$1)\\n\\\n\t{\\n\\\n\t\t$this->${8:$1} = $$1;\\n\\\n\t\treturn $this;\\n\\\n\t}${9}\\n\\\n# getter method\\n\\\nsnippet gm\\n\\\n\t/**\\n\\\n\t * Gets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @return ${2:$1}\\n\\\n\t */\\n\\\n\t${3:public} function get${4:$2}()\\n\\\n\t{\\n\\\n\t\treturn $this->${5:$1};\\n\\\n\t}${6}\\n\\\n#setter\\n\\\nsnippet $s\\n\\\n\t${1:$foo}->set${2:Bar}(${3});\\n\\\n#getter\\n\\\nsnippet $g\\n\\\n\t${1:$foo}->get${2:Bar}();\\n\\\n\\n\\\n# Tertiary conditional\\n\\\nsnippet =?:\\n\\\n\t$${1:foo} = ${2:true} ? ${3:a} : ${4};\\n\\\nsnippet ?:\\n\\\n\t${1:true} ? ${2:a} : ${3}\\n\\\n\\n\\\nsnippet C\\n\\\n\t$_COOKIE['${1:variable}']${2}\\n\\\nsnippet E\\n\\\n\t$_ENV['${1:variable}']${2}\\n\\\nsnippet F\\n\\\n\t$_FILES['${1:variable}']${2}\\n\\\nsnippet G\\n\\\n\t$_GET['${1:variable}']${2}\\n\\\nsnippet P\\n\\\n\t$_POST['${1:variable}']${2}\\n\\\nsnippet R\\n\\\n\t$_REQUEST['${1:variable}']${2}\\n\\\nsnippet S\\n\\\n\t$_SERVER['${1:variable}']${2}\\n\\\nsnippet SS\\n\\\n\t$_SESSION['${1:variable}']${2}\\n\\\n\\n\\\n# the following are old ones\\n\\\nsnippet inc\\n\\\n\tinclude '${1:file}';${2}\\n\\\nsnippet inc1\\n\\\n\tinclude_once '${1:file}';${2}\\n\\\nsnippet req\\n\\\n\trequire '${1:file}';${2}\\n\\\nsnippet req1\\n\\\n\trequire_once '${1:file}';${2}\\n\\\n# Start Docblock\\n\\\nsnippet /*\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n# Class - post doc\\n\\\nsnippet doc_cp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${2:default}\\n\\\n\t * @subpackage ${3:default}\\n\\\n\t * @author ${4:`g:snips_author`}\\n\\\n\t */${5}\\n\\\n# Class Variable - post doc\\n\\\nsnippet doc_vp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented class variable}\\n\\\n\t *\\n\\\n\t * @var ${2:string}\\n\\\n\t */${3}\\n\\\n# Class Variable\\n\\\nsnippet doc_v\\n\\\n\t/**\\n\\\n\t * ${3:undocumented class variable}\\n\\\n\t *\\n\\\n\t * @var ${4:string}\\n\\\n\t */\\n\\\n\t${1:var} $${2};${5}\\n\\\n# Class\\n\\\nsnippet doc_c\\n\\\n\t/**\\n\\\n\t * ${3:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${4:default}\\n\\\n\t * @subpackage ${5:default}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1:}class ${2:}\\n\\\n\t{\\n\\\n\t\t${7}\\n\\\n\t} // END $1class $2\\n\\\n# Constant Definition - post doc\\n\\\nsnippet doc_dp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented constant}\\n\\\n\t */${2}\\n\\\n# Constant Definition\\n\\\nsnippet doc_d\\n\\\n\t/**\\n\\\n\t * ${3:undocumented constant}\\n\\\n\t */\\n\\\n\tdefine(${1}, ${2});${4}\\n\\\n# Function - post doc\\n\\\nsnippet doc_fp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${2:void}\\n\\\n\t * @author ${3:`g:snips_author`}\\n\\\n\t */${4}\\n\\\n# Function signature\\n\\\nsnippet doc_s\\n\\\n\t/**\\n\\\n\t * ${4:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${5:void}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1}function ${2}(${3});${7}\\n\\\n# Function\\n\\\nsnippet doc_f\\n\\\n\t/**\\n\\\n\t * ${4:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${5:void}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1}function ${2}(${3})\\n\\\n\t{${7}\\n\\\n\t}\\n\\\n# Header\\n\\\nsnippet doc_h\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t *\\n\\\n\t * @author ${2:`g:snips_author`}\\n\\\n\t * @version ${3:$Id$}\\n\\\n\t * @copyright ${4:$2}, `strftime('%d %B, %Y')`\\n\\\n\t * @package ${5:default}\\n\\\n\t */\\n\\\n\\n\\\n# Interface\\n\\\nsnippet interface\\n\\\n\t/**\\n\\\n\t * ${2:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${3:default}\\n\\\n\t * @author ${4:`g:snips_author`}\\n\\\n\t */\\n\\\n\tinterface ${1:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${5}\\n\\\n\t}\\n\\\n# class ...\\n\\\nsnippet class\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n\tclass ${2:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${3}\\n\\\n\t\t/**\\n\\\n\t\t * ${4}\\n\\\n\t\t */\\n\\\n\t\t${5:public} function ${6:__construct}(${7:argument})\\n\\\n\t\t{\\n\\\n\t\t\t${8:// code...}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n# define(...)\\n\\\nsnippet def\\n\\\n\tdefine('${1}'${2});${3}\\n\\\n# defined(...)\\n\\\nsnippet def?\\n\\\n\t${1}defined('${2}')${3}\\n\\\nsnippet wh\\n\\\n\twhile (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\n# do ... while\\n\\\nsnippet do\\n\\\n\tdo {\\n\\\n\t\t${2:// code... }\\n\\\n\t} while (${1:/* condition */});\\n\\\nsnippet if\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\nsnippet ife\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t} else {\\n\\\n\t\t${3:// code...}\\n\\\n\t}\\n\\\n\t${4}\\n\\\nsnippet else\\n\\\n\telse {\\n\\\n\t\t${1:// code...}\\n\\\n\t}\\n\\\nsnippet elseif\\n\\\n\telseif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\nsnippet switch\\n\\\n\tswitch ($${1:variable}) {\\n\\\n\t\tcase '${2:value}':\\n\\\n\t\t\t${3:// code...}\\n\\\n\t\t\tbreak;\\n\\\n\t\t${5}\\n\\\n\t\tdefault:\\n\\\n\t\t\t${4:// code...}\\n\\\n\t\t\tbreak;\\n\\\n\t}\\n\\\nsnippet case\\n\\\n\tcase '${1:value}':\\n\\\n\t\t${2:// code...}\\n\\\n\t\tbreak;${3}\\n\\\nsnippet for\\n\\\n\tfor ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\\\n\t\t${4: // code...}\\n\\\n\t}\\n\\\nsnippet foreach\\n\\\n\tforeach ($${1:variable} as $${2:value}) {\\n\\\n\t\t${3:// code...}\\n\\\n\t}\\n\\\nsnippet foreachk\\n\\\n\tforeach ($${1:variable} as $${2:key} => $${3:value}) {\\n\\\n\t\t${4:// code...}\\n\\\n\t}\\n\\\n# $... = array (...)\\n\\\nsnippet array\\n\\\n\t$${1:arrayName} = array('${2}' => ${3});${4}\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${2}\\n\\\n\t} catch (${1:Exception} $e) {\\n\\\n\t}\\n\\\n# lambda with closure\\n\\\nsnippet lambda\\n\\\n\t${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\\n\\\n\t\t${4}\\n\\\n\t};\\n\\\n# pre_dump();\\n\\\nsnippet pd\\n\\\n\techo '<pre>'; var_dump(${1}); echo '</pre>';\\n\\\n# pre_dump(); die();\\n\\\nsnippet pdd\\n\\\n\techo '<pre>'; var_dump(${1}); echo '</pre>'; die(${2:});\\n\\\nsnippet vd\\n\\\n\tvar_dump(${1});\\n\\\nsnippet vdd\\n\\\n\tvar_dump(${1}); die(${2:});\\n\\\nsnippet http_redirect\\n\\\n\theader (\\\"HTTP/1.1 301 Moved Permanently\\\");\\n\\\n\theader (\\\"Location: \\\".URL);\\n\\\n\texit();\\n\\\n# Getters & Setters\\n\\\nsnippet gs\\n\\\n\t/**\\n\\\n\t * Gets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @return ${2:$1}\\n\\\n\t */\\n\\\n\tpublic function get${3:$2}()\\n\\\n\t{\\n\\\n\t\treturn $this->${4:$1};\\n\\\n\t}\\n\\\n\\n\\\n\t/**\\n\\\n\t * Sets the value of $1\\n\\\n\t *\\n\\\n\t * @param $2 $$1 ${5:description}\\n\\\n\t *\\n\\\n\t * @return ${6:$FILENAME}\\n\\\n\t */\\n\\\n\tpublic function set$3(${7:$2 }$$1)\\n\\\n\t{\\n\\\n\t\t$this->$4 = $$1;\\n\\\n\t\treturn $this;\\n\\\n\t}${8}\\n\\\n# anotation, get, and set, useful for doctrine\\n\\\nsnippet ags\\n\\\n\t/**\\n\\\n\t * ${1:description}\\n\\\n\t *\\n\\\n\t * @${7}\\n\\\n\t */\\n\\\n\t${2:protected} $${3:foo};\\n\\\n\\n\\\n\tpublic function get${4:$3}()\\n\\\n\t{\\n\\\n\t\treturn $this->$3;\\n\\\n\t}\\n\\\n\\n\\\n\tpublic function set$4(${5:$4 }$${6:$3})\\n\\\n\t{\\n\\\n\t\t$this->$3 = $$6;\\n\\\n\t\treturn $this;\\n\\\n\t}\\n\\\nsnippet rett\\n\\\n\treturn true;\\n\\\nsnippet retf\\n\\\n\treturn false;\\n\\\nscope html\\n\\\nsnippet <?\\n\\\n\t<?php\\n\\\n\\n\\\n\t${1}\\n\\\nsnippet <?e\\n\\\n\t<?php echo ${1} ?>\\n\\\n# this one is for php5.4\\n\\\nsnippet <?=\\n\\\n\t<?=${1}?>\\n\\\nsnippet ifil\\n\\\n\t<?php if (${1:/* condition */}): ?>\\n\\\n\t\t${2:<!-- code... -->}\\n\\\n\t<?php endif; ?>\\n\\\nsnippet ifeil\\n\\\n\t<?php if (${1:/* condition */}): ?>\\n\\\n\t\t${2:<!-- html... -->}\\n\\\n\t<?php else: ?>\\n\\\n\t\t${3:<!-- html... -->}\\n\\\n\t<?php endif; ?>\\n\\\n\t${4}\\n\\\nsnippet foreachil\\n\\\n\t<?php foreach ($${1:variable} as $${2:value}): ?>\\n\\\n\t\t${3:<!-- html... -->}\\n\\\n\t<?php endforeach; ?>\\n\\\nsnippet foreachkil\\n\\\n\t<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?>\\n\\\n\t\t${4:<!-- html... -->}\\n\\\n\t<?php endforeach; ?>\\n\\\nscope html-tag\\n\\\nsnippet ifil\\\\n\\\\\\n\\\n\t<?php if (${1:true}): ?>${2:code}<?php endif; ?>\\n\\\nsnippet ifeil\\\\n\\\\\\n\\\n\t<?php if (${1:true}): ?>${2:code}<?php else: ?>${3:code}<?php endif; ?>${4}\\n\\\n\";\nexports.scope = \"php\";\n\n});                (function() {\n                    window.require([\"ace/snippets/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/php_laravel_blade.js",
    "content": "define(\"ace/snippets/php_laravel_blade\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n    \"use strict\";\n\n    exports.snippetText =undefined;\n    exports.scope = \"php\";\n\n});                (function() {\n                    window.require([\"ace/snippets/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/pig.js",
    "content": "define(\"ace/snippets/pig\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"pig\";\n\n});                (function() {\n                    window.require([\"ace/snippets/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/plain_text.js",
    "content": "define(\"ace/snippets/plain_text\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"plain_text\";\n\n});                (function() {\n                    window.require([\"ace/snippets/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/powershell.js",
    "content": "define(\"ace/snippets/powershell\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"powershell\";\n\n});                (function() {\n                    window.require([\"ace/snippets/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/praat.js",
    "content": "define(\"ace/snippets/praat\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"praat\";\n\n});                (function() {\n                    window.require([\"ace/snippets/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/prolog.js",
    "content": "define(\"ace/snippets/prolog\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"prolog\";\n\n});                (function() {\n                    window.require([\"ace/snippets/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/properties.js",
    "content": "define(\"ace/snippets/properties\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"properties\";\n\n});                (function() {\n                    window.require([\"ace/snippets/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/protobuf.js",
    "content": "define(\"ace/snippets/protobuf\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"\";\nexports.scope = \"protobuf\";\n\n});                (function() {\n                    window.require([\"ace/snippets/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/puppet.js",
    "content": "define(\"ace/snippets/puppet\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"puppet\";\n\n});                (function() {\n                    window.require([\"ace/snippets/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/python.js",
    "content": "define(\"ace/snippets/python\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet #!\\n\\\n\t#!/usr/bin/env python\\n\\\nsnippet imp\\n\\\n\timport ${1:module}\\n\\\nsnippet from\\n\\\n\tfrom ${1:package} import ${2:module}\\n\\\n# Module Docstring\\n\\\nsnippet docs\\n\\\n\t'''\\n\\\n\tFile: ${1:FILENAME:file_name}\\n\\\n\tAuthor: ${2:author}\\n\\\n\tDescription: ${3}\\n\\\n\t'''\\n\\\nsnippet wh\\n\\\n\twhile ${1:condition}:\\n\\\n\t\t${2:# TODO: write code...}\\n\\\n# dowh - does the same as do...while in other languages\\n\\\nsnippet dowh\\n\\\n\twhile True:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\t\tif ${2:condition}:\\n\\\n\t\t\tbreak\\n\\\nsnippet with\\n\\\n\twith ${1:expr} as ${2:var}:\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# New Class\\n\\\nsnippet cl\\n\\\n\tclass ${1:ClassName}(${2:object}):\\n\\\n\t\t\\\"\\\"\\\"${3:docstring for $1}\\\"\\\"\\\"\\n\\\n\t\tdef __init__(self, ${4:arg}):\\n\\\n\t\t\t${5:super($1, self).__init__()}\\n\\\n\t\t\tself.$4 = $4\\n\\\n\t\t\t${6}\\n\\\n# New Function\\n\\\nsnippet def\\n\\\n\tdef ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\\n\\\n\t\t\\\"\\\"\\\"${3:docstring for $1}\\\"\\\"\\\"\\n\\\n\t\t${4:# TODO: write code...}\\n\\\nsnippet deff\\n\\\n\tdef ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# New Method\\n\\\nsnippet defs\\n\\\n\tdef ${1:mname}(self, ${2:arg}):\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# New Property\\n\\\nsnippet property\\n\\\n\tdef ${1:foo}():\\n\\\n\t\tdoc = \\\"${2:The $1 property.}\\\"\\n\\\n\t\tdef fget(self):\\n\\\n\t\t\t${3:return self._$1}\\n\\\n\t\tdef fset(self, value):\\n\\\n\t\t\t${4:self._$1 = value}\\n\\\n# Ifs\\n\\\nsnippet if\\n\\\n\tif ${1:condition}:\\n\\\n\t\t${2:# TODO: write code...}\\n\\\nsnippet el\\n\\\n\telse:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\nsnippet ei\\n\\\n\telif ${1:condition}:\\n\\\n\t\t${2:# TODO: write code...}\\n\\\n# For\\n\\\nsnippet for\\n\\\n\tfor ${1:item} in ${2:items}:\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# Encodes\\n\\\nsnippet cutf8\\n\\\n\t# -*- coding: utf-8 -*-\\n\\\nsnippet clatin1\\n\\\n\t# -*- coding: latin-1 -*-\\n\\\nsnippet cascii\\n\\\n\t# -*- coding: ascii -*-\\n\\\n# Lambda\\n\\\nsnippet ld\\n\\\n\t${1:var} = lambda ${2:vars} : ${3:action}\\n\\\nsnippet .\\n\\\n\tself.\\n\\\nsnippet try Try/Except\\n\\\n\ttry:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\texcept ${2:Exception}, ${3:e}:\\n\\\n\t\t${4:raise $3}\\n\\\nsnippet try Try/Except/Else\\n\\\n\ttry:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\texcept ${2:Exception}, ${3:e}:\\n\\\n\t\t${4:raise $3}\\n\\\n\telse:\\n\\\n\t\t${5:# TODO: write code...}\\n\\\nsnippet try Try/Except/Finally\\n\\\n\ttry:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\texcept ${2:Exception}, ${3:e}:\\n\\\n\t\t${4:raise $3}\\n\\\n\tfinally:\\n\\\n\t\t${5:# TODO: write code...}\\n\\\nsnippet try Try/Except/Else/Finally\\n\\\n\ttry:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\texcept ${2:Exception}, ${3:e}:\\n\\\n\t\t${4:raise $3}\\n\\\n\telse:\\n\\\n\t\t${5:# TODO: write code...}\\n\\\n\tfinally:\\n\\\n\t\t${6:# TODO: write code...}\\n\\\n# if __name__ == '__main__':\\n\\\nsnippet ifmain\\n\\\n\tif __name__ == '__main__':\\n\\\n\t\t${1:main()}\\n\\\n# __magic__\\n\\\nsnippet _\\n\\\n\t__${1:init}__${2}\\n\\\n# python debugger (pdb)\\n\\\nsnippet pdb\\n\\\n\timport pdb; pdb.set_trace()\\n\\\n# ipython debugger (ipdb)\\n\\\nsnippet ipdb\\n\\\n\timport ipdb; ipdb.set_trace()\\n\\\n# ipython debugger (pdbbb)\\n\\\nsnippet pdbbb\\n\\\n\timport pdbpp; pdbpp.set_trace()\\n\\\nsnippet pprint\\n\\\n\timport pprint; pprint.pprint(${1})${2}\\n\\\nsnippet \\\"\\n\\\n\t\\\"\\\"\\\"\\n\\\n\t${1:doc}\\n\\\n\t\\\"\\\"\\\"\\n\\\n# test function/method\\n\\\nsnippet test\\n\\\n\tdef test_${1:description}(${2:self}):\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# test case\\n\\\nsnippet testcase\\n\\\n\tclass ${1:ExampleCase}(unittest.TestCase):\\n\\\n\t\t\\n\\\n\t\tdef test_${2:description}(self):\\n\\\n\t\t\t${3:# TODO: write code...}\\n\\\nsnippet fut\\n\\\n\tfrom __future__ import ${1}\\n\\\n#getopt\\n\\\nsnippet getopt\\n\\\n\ttry:\\n\\\n\t\t# Short option syntax: \\\"hv:\\\"\\n\\\n\t\t# Long option syntax: \\\"help\\\" or \\\"verbose=\\\"\\n\\\n\t\topts, args = getopt.getopt(sys.argv[1:], \\\"${1:short_options}\\\", [${2:long_options}])\\n\\\n\t\\n\\\n\texcept getopt.GetoptError, err:\\n\\\n\t\t# Print debug info\\n\\\n\t\tprint str(err)\\n\\\n\t\t${3:error_action}\\n\\\n\\n\\\n\tfor option, argument in opts:\\n\\\n\t\tif option in (\\\"-h\\\", \\\"--help\\\"):\\n\\\n\t\t\t${4}\\n\\\n\t\telif option in (\\\"-v\\\", \\\"--verbose\\\"):\\n\\\n\t\t\tverbose = argument\\n\\\n\";\nexports.scope = \"python\";\n\n});                (function() {\n                    window.require([\"ace/snippets/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/r.js",
    "content": "define(\"ace/snippets/r\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet #!\\n\\\n\t#!/usr/bin/env Rscript\\n\\\n\\n\\\n# includes\\n\\\nsnippet lib\\n\\\n\tlibrary(${1:package})\\n\\\nsnippet req\\n\\\n\trequire(${1:package})\\n\\\nsnippet source\\n\\\n\tsource('${1:file}')\\n\\\n\\n\\\n# conditionals\\n\\\nsnippet if\\n\\\n\tif (${1:condition}) {\\n\\\n\t\t${2:code}\\n\\\n\t}\\n\\\nsnippet el\\n\\\n\telse {\\n\\\n\t\t${1:code}\\n\\\n\t}\\n\\\nsnippet ei\\n\\\n\telse if (${1:condition}) {\\n\\\n\t\t${2:code}\\n\\\n\t}\\n\\\n\\n\\\n# functions\\n\\\nsnippet fun\\n\\\n\t${1:name} = function (${2:variables}) {\\n\\\n\t\t${3:code}\\n\\\n\t}\\n\\\nsnippet ret\\n\\\n\treturn(${1:code})\\n\\\n\\n\\\n# dataframes, lists, etc\\n\\\nsnippet df\\n\\\n\t${1:name}[${2:rows}, ${3:cols}]\\n\\\nsnippet c\\n\\\n\tc(${1:items})\\n\\\nsnippet li\\n\\\n\tlist(${1:items})\\n\\\nsnippet mat\\n\\\n\tmatrix(${1:data}, nrow=${2:rows}, ncol=${3:cols})\\n\\\n\\n\\\n# apply functions\\n\\\nsnippet apply\\n\\\n\tapply(${1:array}, ${2:margin}, ${3:function})\\n\\\nsnippet lapply\\n\\\n\tlapply(${1:list}, ${2:function})\\n\\\nsnippet sapply\\n\\\n\tsapply(${1:list}, ${2:function})\\n\\\nsnippet vapply\\n\\\n\tvapply(${1:list}, ${2:function}, ${3:type})\\n\\\nsnippet mapply\\n\\\n\tmapply(${1:function}, ${2:...})\\n\\\nsnippet tapply\\n\\\n\ttapply(${1:vector}, ${2:index}, ${3:function})\\n\\\nsnippet rapply\\n\\\n\trapply(${1:list}, ${2:function})\\n\\\n\\n\\\n# plyr functions\\n\\\nsnippet dd\\n\\\n\tddply(${1:frame}, ${2:variables}, ${3:function})\\n\\\nsnippet dl\\n\\\n\tdlply(${1:frame}, ${2:variables}, ${3:function})\\n\\\nsnippet da\\n\\\n\tdaply(${1:frame}, ${2:variables}, ${3:function})\\n\\\nsnippet d_\\n\\\n\td_ply(${1:frame}, ${2:variables}, ${3:function})\\n\\\n\\n\\\nsnippet ad\\n\\\n\tadply(${1:array}, ${2:margin}, ${3:function})\\n\\\nsnippet al\\n\\\n\talply(${1:array}, ${2:margin}, ${3:function})\\n\\\nsnippet aa\\n\\\n\taaply(${1:array}, ${2:margin}, ${3:function})\\n\\\nsnippet a_\\n\\\n\ta_ply(${1:array}, ${2:margin}, ${3:function})\\n\\\n\\n\\\nsnippet ld\\n\\\n\tldply(${1:list}, ${2:function})\\n\\\nsnippet ll\\n\\\n\tllply(${1:list}, ${2:function})\\n\\\nsnippet la\\n\\\n\tlaply(${1:list}, ${2:function})\\n\\\nsnippet l_\\n\\\n\tl_ply(${1:list}, ${2:function})\\n\\\n\\n\\\nsnippet md\\n\\\n\tmdply(${1:matrix}, ${2:function})\\n\\\nsnippet ml\\n\\\n\tmlply(${1:matrix}, ${2:function})\\n\\\nsnippet ma\\n\\\n\tmaply(${1:matrix}, ${2:function})\\n\\\nsnippet m_\\n\\\n\tm_ply(${1:matrix}, ${2:function})\\n\\\n\\n\\\n# plot functions\\n\\\nsnippet pl\\n\\\n\tplot(${1:x}, ${2:y})\\n\\\nsnippet ggp\\n\\\n\tggplot(${1:data}, aes(${2:aesthetics}))\\n\\\nsnippet img\\n\\\n\t${1:(jpeg,bmp,png,tiff)}(filename=\\\"${2:filename}\\\", width=${3}, height=${4}, unit=\\\"${5}\\\")\\n\\\n\t${6:plot}\\n\\\n\tdev.off()\\n\\\n\\n\\\n# statistical test functions\\n\\\nsnippet fis\\n\\\n\tfisher.test(${1:x}, ${2:y})\\n\\\nsnippet chi\\n\\\n\tchisq.test(${1:x}, ${2:y})\\n\\\nsnippet tt\\n\\\n\tt.test(${1:x}, ${2:y})\\n\\\nsnippet wil\\n\\\n\twilcox.test(${1:x}, ${2:y})\\n\\\nsnippet cor\\n\\\n\tcor.test(${1:x}, ${2:y})\\n\\\nsnippet fte\\n\\\n\tvar.test(${1:x}, ${2:y})\\n\\\nsnippet kvt \\n\\\n\tkv.test(${1:x}, ${2:y})\\n\\\n\";\nexports.scope = \"r\";\n\n});                (function() {\n                    window.require([\"ace/snippets/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/razor.js",
    "content": "define(\"ace/snippets/razor\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet if\\n\\\n(${1} == ${2}) {\\n\\\n\t${3}\\n\\\n}\";\nexports.scope = \"razor\";\n\n});                (function() {\n                    window.require([\"ace/snippets/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/rdoc.js",
    "content": "define(\"ace/snippets/rdoc\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"rdoc\";\n\n});                (function() {\n                    window.require([\"ace/snippets/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/red.js",
    "content": "define(\"ace/snippets/red\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \" \";\nexports.scope = \"red\";\n\n});                (function() {\n                    window.require([\"ace/snippets/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/redshift.js",
    "content": "define(\"ace/snippets/redshift\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"redshift\";\n\n});                (function() {\n                    window.require([\"ace/snippets/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/rhtml.js",
    "content": "define(\"ace/snippets/rhtml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"rhtml\";\n\n});                (function() {\n                    window.require([\"ace/snippets/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/rst.js",
    "content": "define(\"ace/snippets/rst\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# rst\\n\\\n\\n\\\nsnippet :\\n\\\n\t:${1:field name}: ${2:field body}\\n\\\nsnippet *\\n\\\n\t*${1:Emphasis}*\\n\\\nsnippet **\\n\\\n\t**${1:Strong emphasis}**\\n\\\nsnippet _\\n\\\n\t\\\\`${1:hyperlink-name}\\\\`_\\n\\\n\t.. _\\\\`$1\\\\`: ${2:link-block}\\n\\\nsnippet =\\n\\\n\t${1:Title}\\n\\\n\t=====${2:=}\\n\\\n\t${3}\\n\\\nsnippet -\\n\\\n\t${1:Title}\\n\\\n\t-----${2:-}\\n\\\n\t${3}\\n\\\nsnippet cont:\\n\\\n\t.. contents::\\n\\\n\t\\n\\\n\";\nexports.scope = \"rst\";\n\n});                (function() {\n                    window.require([\"ace/snippets/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/ruby.js",
    "content": "define(\"ace/snippets/ruby\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"########################################\\n\\\n# Ruby snippets - for Rails, see below #\\n\\\n########################################\\n\\\n\\n\\\n# encoding for Ruby 1.9\\n\\\nsnippet enc\\n\\\n\t# encoding: utf-8\\n\\\n\\n\\\n# #!/usr/bin/env ruby\\n\\\nsnippet #!\\n\\\n\t#!/usr/bin/env ruby\\n\\\n\t# encoding: utf-8\\n\\\n\\n\\\n# New Block\\n\\\nsnippet =b\\n\\\n\t=begin rdoc\\n\\\n\t\t${1}\\n\\\n\t=end\\n\\\nsnippet y\\n\\\n\t:yields: ${1:arguments}\\n\\\nsnippet rb\\n\\\n\t#!/usr/bin/env ruby -wKU\\n\\\nsnippet beg\\n\\\n\tbegin\\n\\\n\t\t${3}\\n\\\n\trescue ${1:Exception} => ${2:e}\\n\\\n\tend\\n\\\n\\n\\\nsnippet req require\\n\\\n\trequire \\\"${1}\\\"${2}\\n\\\nsnippet #\\n\\\n\t# =>\\n\\\nsnippet end\\n\\\n\t__END__\\n\\\nsnippet case\\n\\\n\tcase ${1:object}\\n\\\n\twhen ${2:condition}\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet when\\n\\\n\twhen ${1:condition}\\n\\\n\t\t${2}\\n\\\nsnippet def\\n\\\n\tdef ${1:method_name}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet deft\\n\\\n\tdef test_${1:case_name}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet if\\n\\\n\tif ${1:condition}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet ife\\n\\\n\tif ${1:condition}\\n\\\n\t\t${2}\\n\\\n\telse\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet elsif\\n\\\n\telsif ${1:condition}\\n\\\n\t\t${2}\\n\\\nsnippet unless\\n\\\n\tunless ${1:condition}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet while\\n\\\n\twhile ${1:condition}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet for\\n\\\n\tfor ${1:e} in ${2:c}\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet until\\n\\\n\tuntil ${1:condition}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet cla class .. end\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet cla class .. initialize .. end\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\tdef initialize(${2:args})\\n\\\n\t\t\t${3}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet cla class .. < ParentClass .. initialize .. end\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} < ${2:ParentClass}\\n\\\n\t\tdef initialize(${3:args})\\n\\\n\t\t\t${4}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet cla ClassName = Struct .. do .. end\\n\\\n\t${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} = Struct.new(:${2:attr_names}) do\\n\\\n\t\tdef ${3:method_name}\\n\\\n\t\t\t${4}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet cla class BlankSlate .. initialize .. end\\n\\\n\tclass ${1:BlankSlate}\\n\\\n\t\tinstance_methods.each { |meth| undef_method(meth) unless meth =~ /\\\\A__/ }\\n\\\n\tend\\n\\\nsnippet cla class << self .. end\\n\\\n\tclass << ${1:self}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\n# class .. < DelegateClass .. initialize .. end\\n\\\nsnippet cla-\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} < DelegateClass(${2:ParentClass})\\n\\\n\t\tdef initialize(${3:args})\\n\\\n\t\t\tsuper(${4:del_obj})\\n\\\n\\n\\\n\t\t\t${5}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet mod module .. end\\n\\\n\tmodule ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet mod module .. module_function .. end\\n\\\n\tmodule ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\tmodule_function\\n\\\n\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet mod module .. ClassMethods .. end\\n\\\n\tmodule ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\tmodule ClassMethods\\n\\\n\t\t\t${2}\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tmodule InstanceMethods\\n\\\n\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tdef self.included(receiver)\\n\\\n\t\t\treceiver.extend         ClassMethods\\n\\\n\t\t\treceiver.send :include, InstanceMethods\\n\\\n\t\tend\\n\\\n\tend\\n\\\n# attr_reader\\n\\\nsnippet r\\n\\\n\tattr_reader :${1:attr_names}\\n\\\n# attr_writer\\n\\\nsnippet w\\n\\\n\tattr_writer :${1:attr_names}\\n\\\n# attr_accessor\\n\\\nsnippet rw\\n\\\n\tattr_accessor :${1:attr_names}\\n\\\nsnippet atp\\n\\\n\tattr_protected :${1:attr_names}\\n\\\nsnippet ata\\n\\\n\tattr_accessible :${1:attr_names}\\n\\\n# include Enumerable\\n\\\nsnippet Enum\\n\\\n\tinclude Enumerable\\n\\\n\\n\\\n\tdef each(&block)\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\n# include Comparable\\n\\\nsnippet Comp\\n\\\n\tinclude Comparable\\n\\\n\\n\\\n\tdef <=>(other)\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\n# extend Forwardable\\n\\\nsnippet Forw-\\n\\\n\textend Forwardable\\n\\\n# def self\\n\\\nsnippet defs\\n\\\n\tdef self.${1:class_method_name}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\n# def method_missing\\n\\\nsnippet defmm\\n\\\n\tdef method_missing(meth, *args, &blk)\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\nsnippet defd\\n\\\n\tdef_delegator :${1:@del_obj}, :${2:del_meth}, :${3:new_name}\\n\\\nsnippet defds\\n\\\n\tdef_delegators :${1:@del_obj}, :${2:del_methods}\\n\\\nsnippet am\\n\\\n\talias_method :${1:new_name}, :${2:old_name}\\n\\\nsnippet app\\n\\\n\tif __FILE__ == $PROGRAM_NAME\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\n# usage_if()\\n\\\nsnippet usai\\n\\\n\tif ARGV.${1}\\n\\\n\t\tabort \\\"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\\\"${3}\\n\\\n\tend\\n\\\n# usage_unless()\\n\\\nsnippet usau\\n\\\n\tunless ARGV.${1}\\n\\\n\t\tabort \\\"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\\\"${3}\\n\\\n\tend\\n\\\nsnippet array\\n\\\n\tArray.new(${1:10}) { |${2:i}| ${3} }\\n\\\nsnippet hash\\n\\\n\tHash.new { |${1:hash}, ${2:key}| $1[$2] = ${3} }\\n\\\nsnippet file File.foreach() { |line| .. }\\n\\\n\tFile.foreach(${1:\\\"path/to/file\\\"}) { |${2:line}| ${3} }\\n\\\nsnippet file File.read()\\n\\\n\tFile.read(${1:\\\"path/to/file\\\"})${2}\\n\\\nsnippet Dir Dir.global() { |file| .. }\\n\\\n\tDir.glob(${1:\\\"dir/glob/*\\\"}) { |${2:file}| ${3} }\\n\\\nsnippet Dir Dir[\\\"..\\\"]\\n\\\n\tDir[${1:\\\"glob/**/*.rb\\\"}]${2}\\n\\\nsnippet dir\\n\\\n\tFilename.dirname(__FILE__)\\n\\\nsnippet deli\\n\\\n\tdelete_if { |${1:e}| ${2} }\\n\\\nsnippet fil\\n\\\n\tfill(${1:range}) { |${2:i}| ${3} }\\n\\\n# flatten_once()\\n\\\nsnippet flao\\n\\\n\tinject(Array.new) { |${1:arr}, ${2:a}| $1.push(*$2)}${3}\\n\\\nsnippet zip\\n\\\n\tzip(${1:enums}) { |${2:row}| ${3} }\\n\\\n# downto(0) { |n| .. }\\n\\\nsnippet dow\\n\\\n\tdownto(${1:0}) { |${2:n}| ${3} }\\n\\\nsnippet ste\\n\\\n\tstep(${1:2}) { |${2:n}| ${3} }\\n\\\nsnippet tim\\n\\\n\ttimes { |${1:n}| ${2} }\\n\\\nsnippet upt\\n\\\n\tupto(${1:1.0/0.0}) { |${2:n}| ${3} }\\n\\\nsnippet loo\\n\\\n\tloop { ${1} }\\n\\\nsnippet ea\\n\\\n\teach { |${1:e}| ${2} }\\n\\\nsnippet ead\\n\\\n\teach do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eab\\n\\\n\teach_byte { |${1:byte}| ${2} }\\n\\\nsnippet eac- each_char { |chr| .. }\\n\\\n\teach_char { |${1:chr}| ${2} }\\n\\\nsnippet eac- each_cons(..) { |group| .. }\\n\\\n\teach_cons(${1:2}) { |${2:group}| ${3} }\\n\\\nsnippet eai\\n\\\n\teach_index { |${1:i}| ${2} }\\n\\\nsnippet eaid\\n\\\n\teach_index do |${1:i}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eak\\n\\\n\teach_key { |${1:key}| ${2} }\\n\\\nsnippet eakd\\n\\\n\teach_key do |${1:key}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eal\\n\\\n\teach_line { |${1:line}| ${2} }\\n\\\nsnippet eald\\n\\\n\teach_line do |${1:line}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eap\\n\\\n\teach_pair { |${1:name}, ${2:val}| ${3} }\\n\\\nsnippet eapd\\n\\\n\teach_pair do |${1:name}, ${2:val}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet eas-\\n\\\n\teach_slice(${1:2}) { |${2:group}| ${3} }\\n\\\nsnippet easd-\\n\\\n\teach_slice(${1:2}) do |${2:group}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet eav\\n\\\n\teach_value { |${1:val}| ${2} }\\n\\\nsnippet eavd\\n\\\n\teach_value do |${1:val}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eawi\\n\\\n\teach_with_index { |${1:e}, ${2:i}| ${3} }\\n\\\nsnippet eawid\\n\\\n\teach_with_index do |${1:e},${2:i}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet reve\\n\\\n\treverse_each { |${1:e}| ${2} }\\n\\\nsnippet reved\\n\\\n\treverse_each do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet inj\\n\\\n\tinject(${1:init}) { |${2:mem}, ${3:var}| ${4} }\\n\\\nsnippet injd\\n\\\n\tinject(${1:init}) do |${2:mem}, ${3:var}|\\n\\\n\t\t${4}\\n\\\n\tend\\n\\\nsnippet map\\n\\\n\tmap { |${1:e}| ${2} }\\n\\\nsnippet mapd\\n\\\n\tmap do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet mapwi-\\n\\\n\tenum_with_index.map { |${1:e}, ${2:i}| ${3} }\\n\\\nsnippet sor\\n\\\n\tsort { |a, b| ${1} }\\n\\\nsnippet sorb\\n\\\n\tsort_by { |${1:e}| ${2} }\\n\\\nsnippet ran\\n\\\n\tsort_by { rand }\\n\\\nsnippet all\\n\\\n\tall? { |${1:e}| ${2} }\\n\\\nsnippet any\\n\\\n\tany? { |${1:e}| ${2} }\\n\\\nsnippet cl\\n\\\n\tclassify { |${1:e}| ${2} }\\n\\\nsnippet col\\n\\\n\tcollect { |${1:e}| ${2} }\\n\\\nsnippet cold\\n\\\n\tcollect do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet det\\n\\\n\tdetect { |${1:e}| ${2} }\\n\\\nsnippet detd\\n\\\n\tdetect do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet fet\\n\\\n\tfetch(${1:name}) { |${2:key}| ${3} }\\n\\\nsnippet fin\\n\\\n\tfind { |${1:e}| ${2} }\\n\\\nsnippet find\\n\\\n\tfind do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet fina\\n\\\n\tfind_all { |${1:e}| ${2} }\\n\\\nsnippet finad\\n\\\n\tfind_all do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet gre\\n\\\n\tgrep(${1:/pattern/}) { |${2:match}| ${3} }\\n\\\nsnippet sub\\n\\\n\t${1:g}sub(${2:/pattern/}) { |${3:match}| ${4} }\\n\\\nsnippet sca\\n\\\n\tscan(${1:/pattern/}) { |${2:match}| ${3} }\\n\\\nsnippet scad\\n\\\n\tscan(${1:/pattern/}) do |${2:match}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet max\\n\\\n\tmax { |a, b| ${1} }\\n\\\nsnippet min\\n\\\n\tmin { |a, b| ${1} }\\n\\\nsnippet par\\n\\\n\tpartition { |${1:e}| ${2} }\\n\\\nsnippet pard\\n\\\n\tpartition do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet rej\\n\\\n\treject { |${1:e}| ${2} }\\n\\\nsnippet rejd\\n\\\n\treject do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet sel\\n\\\n\tselect { |${1:e}| ${2} }\\n\\\nsnippet seld\\n\\\n\tselect do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet lam\\n\\\n\tlambda { |${1:args}| ${2} }\\n\\\nsnippet doo\\n\\\n\tdo\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\nsnippet dov\\n\\\n\tdo |${1:variable}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet :\\n\\\n\t:${1:key} => ${2:\\\"value\\\"}${3}\\n\\\nsnippet ope\\n\\\n\topen(${1:\\\"path/or/url/or/pipe\\\"}, \\\"${2:w}\\\") { |${3:io}| ${4} }\\n\\\n# path_from_here()\\n\\\nsnippet fpath\\n\\\n\tFile.join(File.dirname(__FILE__), *%2[${1:rel path here}])${2}\\n\\\n# unix_filter {}\\n\\\nsnippet unif\\n\\\n\tARGF.each_line${1} do |${2:line}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\n# option_parse {}\\n\\\nsnippet optp\\n\\\n\trequire \\\"optparse\\\"\\n\\\n\\n\\\n\toptions = {${1:default => \\\"args\\\"}}\\n\\\n\\n\\\n\tARGV.options do |opts|\\n\\\n\t\topts.banner = \\\"Usage: #{File.basename($PROGRAM_NAME)}\\n\\\nsnippet opt\\n\\\n\topts.on( \\\"-${1:o}\\\", \\\"--${2:long-option-name}\\\", ${3:String},\\n\\\n\t         \\\"${4:Option description.}\\\") do |${5:opt}|\\n\\\n\t\t${6}\\n\\\n\tend\\n\\\nsnippet tc\\n\\\n\trequire \\\"test/unit\\\"\\n\\\n\\n\\\n\trequire \\\"${1:library_file_name}\\\"\\n\\\n\\n\\\n\tclass Test${2:$1} < Test::Unit::TestCase\\n\\\n\t\tdef test_${3:case_name}\\n\\\n\t\t\t${4}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet ts\\n\\\n\trequire \\\"test/unit\\\"\\n\\\n\\n\\\n\trequire \\\"tc_${1:test_case_file}\\\"\\n\\\n\trequire \\\"tc_${2:test_case_file}\\\"${3}\\n\\\nsnippet as\\n\\\n\tassert ${1:test}, \\\"${2:Failure message.}\\\"${3}\\n\\\nsnippet ase\\n\\\n\tassert_equal ${1:expected}, ${2:actual}${3}\\n\\\nsnippet asne\\n\\\n\tassert_not_equal ${1:unexpected}, ${2:actual}${3}\\n\\\nsnippet asid\\n\\\n\tassert_in_delta ${1:expected_float}, ${2:actual_float}, ${3:2 ** -20}${4}\\n\\\nsnippet asio\\n\\\n\tassert_instance_of ${1:ExpectedClass}, ${2:actual_instance}${3}\\n\\\nsnippet asko\\n\\\n\tassert_kind_of ${1:ExpectedKind}, ${2:actual_instance}${3}\\n\\\nsnippet asn\\n\\\n\tassert_nil ${1:instance}${2}\\n\\\nsnippet asnn\\n\\\n\tassert_not_nil ${1:instance}${2}\\n\\\nsnippet asm\\n\\\n\tassert_match /${1:expected_pattern}/, ${2:actual_string}${3}\\n\\\nsnippet asnm\\n\\\n\tassert_no_match /${1:unexpected_pattern}/, ${2:actual_string}${3}\\n\\\nsnippet aso\\n\\\n\tassert_operator ${1:left}, :${2:operator}, ${3:right}${4}\\n\\\nsnippet asr\\n\\\n\tassert_raise ${1:Exception} { ${2} }\\n\\\nsnippet asrd\\n\\\n\tassert_raise ${1:Exception} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet asnr\\n\\\n\tassert_nothing_raised ${1:Exception} { ${2} }\\n\\\nsnippet asnrd\\n\\\n\tassert_nothing_raised ${1:Exception} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet asrt\\n\\\n\tassert_respond_to ${1:object}, :${2:method}${3}\\n\\\nsnippet ass assert_same(..)\\n\\\n\tassert_same ${1:expected}, ${2:actual}${3}\\n\\\nsnippet ass assert_send(..)\\n\\\n\tassert_send [${1:object}, :${2:message}, ${3:args}]${4}\\n\\\nsnippet asns\\n\\\n\tassert_not_same ${1:unexpected}, ${2:actual}${3}\\n\\\nsnippet ast\\n\\\n\tassert_throws :${1:expected} { ${2} }\\n\\\nsnippet astd\\n\\\n\tassert_throws :${1:expected} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet asnt\\n\\\n\tassert_nothing_thrown { ${1} }\\n\\\nsnippet asntd\\n\\\n\tassert_nothing_thrown do\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\nsnippet fl\\n\\\n\tflunk \\\"${1:Failure message.}\\\"${2}\\n\\\n# Benchmark.bmbm do .. end\\n\\\nsnippet bm-\\n\\\n\tTESTS = ${1:10_000}\\n\\\n\tBenchmark.bmbm do |results|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet rep\\n\\\n\tresults.report(\\\"${1:name}:\\\") { TESTS.times { ${2} }}\\n\\\n# Marshal.dump(.., file)\\n\\\nsnippet Md\\n\\\n\tFile.open(${1:\\\"path/to/file.dump\\\"}, \\\"wb\\\") { |${2:file}| Marshal.dump(${3:obj}, $2) }${4}\\n\\\n# Mashal.load(obj)\\n\\\nsnippet Ml\\n\\\n\tFile.open(${1:\\\"path/to/file.dump\\\"}, \\\"rb\\\") { |${2:file}| Marshal.load($2) }${3}\\n\\\n# deep_copy(..)\\n\\\nsnippet deec\\n\\\n\tMarshal.load(Marshal.dump(${1:obj_to_copy}))${2}\\n\\\nsnippet Pn-\\n\\\n\tPStore.new(${1:\\\"file_name.pstore\\\"})${2}\\n\\\nsnippet tra\\n\\\n\ttransaction(${1:true}) { ${2} }\\n\\\n# xmlread(..)\\n\\\nsnippet xml-\\n\\\n\tREXML::Document.new(File.read(${1:\\\"path/to/file\\\"}))${2}\\n\\\n# xpath(..) { .. }\\n\\\nsnippet xpa\\n\\\n\telements.each(${1:\\\"//Xpath\\\"}) do |${2:node}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\n# class_from_name()\\n\\\nsnippet clafn\\n\\\n\tsplit(\\\"::\\\").inject(Object) { |par, const| par.const_get(const) }\\n\\\n# singleton_class()\\n\\\nsnippet sinc\\n\\\n\tclass << self; self end\\n\\\nsnippet nam\\n\\\n\tnamespace :${1:`Filename()`} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet tas\\n\\\n\tdesc \\\"${1:Task description}\\\"\\n\\\n\ttask :${2:task_name => [:dependent, :tasks]} do\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\n# block\\n\\\nsnippet b\\n\\\n\t{ |${1:var}| ${2} }\\n\\\nsnippet begin\\n\\\n\tbegin\\n\\\n\t\traise 'A test exception.'\\n\\\n\trescue Exception => e\\n\\\n\t\tputs e.message\\n\\\n\t\tputs e.backtrace.inspect\\n\\\n\telse\\n\\\n\t\t# other exception\\n\\\n\tensure\\n\\\n\t\t# always executed\\n\\\n\tend\\n\\\n\\n\\\n#debugging\\n\\\nsnippet debug\\n\\\n\trequire 'ruby-debug'; debugger; true;\\n\\\nsnippet pry\\n\\\n\trequire 'pry'; binding.pry\\n\\\n\\n\\\n#############################################\\n\\\n# Rails snippets - for pure Ruby, see above #\\n\\\n#############################################\\n\\\nsnippet art\\n\\\n\tassert_redirected_to ${1::action => \\\"${2:index}\\\"}\\n\\\nsnippet artnp\\n\\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1}, ${4:@$2})\\n\\\nsnippet artnpp\\n\\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1})\\n\\\nsnippet artp\\n\\\n\tassert_redirected_to ${1:model}_path(${2:@$1})\\n\\\nsnippet artpp\\n\\\n\tassert_redirected_to ${1:model}s_path\\n\\\nsnippet asd\\n\\\n\tassert_difference \\\"${1:Model}.${2:count}\\\", $1 do\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet asnd\\n\\\n\tassert_no_difference \\\"${1:Model}.${2:count}\\\" do\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet asre\\n\\\n\tassert_response :${1:success}, @response.body${2}\\n\\\nsnippet asrj\\n\\\n\tassert_rjs :${1:replace}, \\\"${2:dom id}\\\"\\n\\\nsnippet ass assert_select(..)\\n\\\n\tassert_select '${1:path}', :${2:text} => '${3:inner_html' ${4:do}\\n\\\nsnippet bf\\n\\\n\tbefore_filter :${1:method}\\n\\\nsnippet bt\\n\\\n\tbelongs_to :${1:association}\\n\\\nsnippet crw\\n\\\n\tcattr_accessor :${1:attr_names}\\n\\\nsnippet defcreate\\n\\\n\tdef create\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new(params[:$1])\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\tif @$1.save\\n\\\n\t\t\t\tflash[:notice] = '$2 was successfully created.'\\n\\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\\\n\t\t\t\twants.xml  { render :xml => @$1, :status => :created, :location => @$1 }\\n\\\n\t\t\telse\\n\\\n\t\t\t\twants.html { render :action => \\\"new\\\" }\\n\\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\\\n\t\t\tend\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defdestroy\\n\\\n\tdef destroy\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\\n\t\t@$1.destroy\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\twants.html { redirect_to($1s_url) }\\n\\\n\t\t\twants.xml  { head :ok }\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defedit\\n\\\n\tdef edit\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\\n\tend\\n\\\nsnippet defindex\\n\\\n\tdef index\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.all\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\twants.html # index.html.erb\\n\\\n\t\t\twants.xml  { render :xml => @$1s }\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defnew\\n\\\n\tdef new\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\twants.html # new.html.erb\\n\\\n\t\t\twants.xml  { render :xml => @$1 }\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defshow\\n\\\n\tdef show\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\twants.html # show.html.erb\\n\\\n\t\t\twants.xml  { render :xml => @$1 }\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defupdate\\n\\\n\tdef update\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\tif @$1.update_attributes(params[:$1])\\n\\\n\t\t\t\tflash[:notice] = '$2 was successfully updated.'\\n\\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\\\n\t\t\t\twants.xml  { head :ok }\\n\\\n\t\t\telse\\n\\\n\t\t\t\twants.html { render :action => \\\"edit\\\" }\\n\\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\\\n\t\t\tend\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet flash\\n\\\n\tflash[:${1:notice}] = \\\"${2}\\\"\\n\\\nsnippet habtm\\n\\\n\thas_and_belongs_to_many :${1:object}, :join_table => \\\"${2:table_name}\\\", :foreign_key => \\\"${3}_id\\\"${4}\\n\\\nsnippet hm\\n\\\n\thas_many :${1:object}\\n\\\nsnippet hmd\\n\\\n\thas_many :${1:other}s, :class_name => \\\"${2:$1}\\\", :foreign_key => \\\"${3:$1}_id\\\", :dependent => :destroy${4}\\n\\\nsnippet hmt\\n\\\n\thas_many :${1:object}, :through => :${2:object}\\n\\\nsnippet ho\\n\\\n\thas_one :${1:object}\\n\\\nsnippet i18\\n\\\n\tI18n.t('${1:type.key}')${2}\\n\\\nsnippet ist\\n\\\n\t<%= image_submit_tag(\\\"${1:agree.png}\\\", :id => \\\"${2:id}\\\"${3} %>\\n\\\nsnippet log\\n\\\n\tRails.logger.${1:debug} ${2}\\n\\\nsnippet log2\\n\\\n\tRAILS_DEFAULT_LOGGER.${1:debug} ${2}\\n\\\nsnippet logd\\n\\\n\tlogger.debug { \\\"${1:message}\\\" }${2}\\n\\\nsnippet loge\\n\\\n\tlogger.error { \\\"${1:message}\\\" }${2}\\n\\\nsnippet logf\\n\\\n\tlogger.fatal { \\\"${1:message}\\\" }${2}\\n\\\nsnippet logi\\n\\\n\tlogger.info { \\\"${1:message}\\\" }${2}\\n\\\nsnippet logw\\n\\\n\tlogger.warn { \\\"${1:message}\\\" }${2}\\n\\\nsnippet mapc\\n\\\n\t${1:map}.${2:connect} '${3:controller/:action/:id}'\\n\\\nsnippet mapca\\n\\\n\t${1:map}.catch_all \\\"*${2:anything}\\\", :controller => \\\"${3:default}\\\", :action => \\\"${4:error}\\\"${5}\\n\\\nsnippet mapr\\n\\\n\t${1:map}.resource :${2:resource}\\n\\\nsnippet maprs\\n\\\n\t${1:map}.resources :${2:resource}\\n\\\nsnippet mapwo\\n\\\n\t${1:map}.with_options :${2:controller} => '${3:thing}' do |$3|\\n\\\n\t\t${4}\\n\\\n\tend\\n\\\nsnippet mbs\\n\\\n\tbefore_save :${1:method}\\n\\\nsnippet mcht\\n\\\n\tchange_table :${1:table_name} do |t|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet mp\\n\\\n\tmap(&:${1:id})\\n\\\nsnippet mrw\\n\\\n\tmattr_accessor :${1:attr_names}\\n\\\nsnippet oa\\n\\\n\torder(\\\"${1:field}\\\")\\n\\\nsnippet od\\n\\\n\torder(\\\"${1:field} DESC\\\")\\n\\\nsnippet pa\\n\\\n\tparams[:${1:id}]${2}\\n\\\nsnippet ra\\n\\\n\trender :action => \\\"${1:action}\\\"\\n\\\nsnippet ral\\n\\\n\trender :action => \\\"${1:action}\\\", :layout => \\\"${2:layoutname}\\\"\\n\\\nsnippet rest\\n\\\n\trespond_to do |wants|\\n\\\n\t\twants.${1:html} { ${2} }\\n\\\n\tend\\n\\\nsnippet rf\\n\\\n\trender :file => \\\"${1:filepath}\\\"\\n\\\nsnippet rfu\\n\\\n\trender :file => \\\"${1:filepath}\\\", :use_full_path => ${2:false}\\n\\\nsnippet ri\\n\\\n\trender :inline => \\\"${1:<%= 'hello' %>}\\\"\\n\\\nsnippet ril\\n\\\n\trender :inline => \\\"${1:<%= 'hello' %>}\\\", :locals => { ${2::name} => \\\"${3:value}\\\"${4} }\\n\\\nsnippet rit\\n\\\n\trender :inline => \\\"${1:<%= 'hello' %>}\\\", :type => ${2::rxml}\\n\\\nsnippet rjson\\n\\\n\trender :json => ${1:text to render}\\n\\\nsnippet rl\\n\\\n\trender :layout => \\\"${1:layoutname}\\\"\\n\\\nsnippet rn\\n\\\n\trender :nothing => ${1:true}\\n\\\nsnippet rns\\n\\\n\trender :nothing => ${1:true}, :status => ${2:401}\\n\\\nsnippet rp\\n\\\n\trender :partial => \\\"${1:item}\\\"\\n\\\nsnippet rpc\\n\\\n\trender :partial => \\\"${1:item}\\\", :collection => ${2:@$1s}\\n\\\nsnippet rpl\\n\\\n\trender :partial => \\\"${1:item}\\\", :locals => { :${2:$1} => ${3:@$1}\\n\\\nsnippet rpo\\n\\\n\trender :partial => \\\"${1:item}\\\", :object => ${2:@$1}\\n\\\nsnippet rps\\n\\\n\trender :partial => \\\"${1:item}\\\", :status => ${2:500}\\n\\\nsnippet rt\\n\\\n\trender :text => \\\"${1:text to render}\\\"\\n\\\nsnippet rtl\\n\\\n\trender :text => \\\"${1:text to render}\\\", :layout => \\\"${2:layoutname}\\\"\\n\\\nsnippet rtlt\\n\\\n\trender :text => \\\"${1:text to render}\\\", :layout => ${2:true}\\n\\\nsnippet rts\\n\\\n\trender :text => \\\"${1:text to render}\\\", :status => ${2:401}\\n\\\nsnippet ru\\n\\\n\trender :update do |${1:page}|\\n\\\n\t\t$1.${2}\\n\\\n\tend\\n\\\nsnippet rxml\\n\\\n\trender :xml => ${1:text to render}\\n\\\nsnippet sc\\n\\\n\tscope :${1:name}, :where(:@${2:field} => ${3:value})\\n\\\nsnippet sl\\n\\\n\tscope :${1:name}, lambda do |${2:value}|\\n\\\n\t\twhere(\\\"${3:field = ?}\\\", ${4:bind var})\\n\\\n\tend\\n\\\nsnippet sha1\\n\\\n\tDigest::SHA1.hexdigest(${1:string})\\n\\\nsnippet sweeper\\n\\\n\tclass ${1:ModelClassName}Sweeper < ActionController::Caching::Sweeper\\n\\\n\t\tobserve $1\\n\\\n\\n\\\n\t\tdef after_save(${2:model_class_name})\\n\\\n\t\t\texpire_cache($2)\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tdef after_destroy($2)\\n\\\n\t\t\texpire_cache($2)\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tdef expire_cache($2)\\n\\\n\t\t\texpire_page\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet tcb\\n\\\n\tt.boolean :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcbi\\n\\\n\tt.binary :${1:title}, :limit => ${2:2}.megabytes\\n\\\n\t${3}\\n\\\nsnippet tcd\\n\\\n\tt.decimal :${1:title}, :precision => ${2:10}, :scale => ${3:2}\\n\\\n\t${4}\\n\\\nsnippet tcda\\n\\\n\tt.date :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcdt\\n\\\n\tt.datetime :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcf\\n\\\n\tt.float :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tch\\n\\\n\tt.change :${1:name}, :${2:string}, :${3:limit} => ${4:80}\\n\\\n\t${5}\\n\\\nsnippet tci\\n\\\n\tt.integer :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcl\\n\\\n\tt.integer :lock_version, :null => false, :default => 0\\n\\\n\t${1}\\n\\\nsnippet tcr\\n\\\n\tt.references :${1:taggable}, :polymorphic => { :default => '${2:Photo}' }\\n\\\n\t${3}\\n\\\nsnippet tcs\\n\\\n\tt.string :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tct\\n\\\n\tt.text :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcti\\n\\\n\tt.time :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcts\\n\\\n\tt.timestamp :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tctss\\n\\\n\tt.timestamps\\n\\\n\t${1}\\n\\\nsnippet va\\n\\\n\tvalidates_associated :${1:attribute}\\n\\\nsnippet vao\\n\\\n\tvalidates_acceptance_of :${1:terms}\\n\\\nsnippet vc\\n\\\n\tvalidates_confirmation_of :${1:attribute}\\n\\\nsnippet ve\\n\\\n\tvalidates_exclusion_of :${1:attribute}, :in => ${2:%w( mov avi )}\\n\\\nsnippet vf\\n\\\n\tvalidates_format_of :${1:attribute}, :with => /${2:regex}/\\n\\\nsnippet vi\\n\\\n\tvalidates_inclusion_of :${1:attribute}, :in => %w(${2: mov avi })\\n\\\nsnippet vl\\n\\\n\tvalidates_length_of :${1:attribute}, :within => ${2:3}..${3:20}\\n\\\nsnippet vn\\n\\\n\tvalidates_numericality_of :${1:attribute}\\n\\\nsnippet vpo\\n\\\n\tvalidates_presence_of :${1:attribute}\\n\\\nsnippet vu\\n\\\n\tvalidates_uniqueness_of :${1:attribute}\\n\\\nsnippet wants\\n\\\n\twants.${1:js|xml|html} { ${2} }\\n\\\nsnippet wc\\n\\\n\twhere(${1:\\\"conditions\\\"}${2:, bind_var})\\n\\\nsnippet wh\\n\\\n\twhere(${1:field} => ${2:value})\\n\\\nsnippet xdelete\\n\\\n\txhr :delete, :${1:destroy}, :id => ${2:1}${3}\\n\\\nsnippet xget\\n\\\n\txhr :get, :${1:show}, :id => ${2:1}${3}\\n\\\nsnippet xpost\\n\\\n\txhr :post, :${1:create}, :${2:object} => { ${3} }\\n\\\nsnippet xput\\n\\\n\txhr :put, :${1:update}, :id => ${2:1}, :${3:object} => { ${4} }${5}\\n\\\nsnippet test\\n\\\n\ttest \\\"should ${1:do something}\\\" do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\n#migrations\\n\\\nsnippet mac\\n\\\n\tadd_column :${1:table_name}, :${2:column_name}, :${3:data_type}\\n\\\nsnippet mrc\\n\\\n\tremove_column :${1:table_name}, :${2:column_name}\\n\\\nsnippet mrnc\\n\\\n\trename_column :${1:table_name}, :${2:old_column_name}, :${3:new_column_name}\\n\\\nsnippet mcc\\n\\\n\tchange_column :${1:table}, :${2:column}, :${3:type}\\n\\\nsnippet mccc\\n\\\n\tt.column :${1:title}, :${2:string}\\n\\\nsnippet mct\\n\\\n\tcreate_table :${1:table_name} do |t|\\n\\\n\t\tt.column :${2:name}, :${3:type}\\n\\\n\tend\\n\\\nsnippet migration\\n\\\n\tclass ${1:class_name} < ActiveRecord::Migration\\n\\\n\t\tdef self.up\\n\\\n\t\t\t${2}\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tdef self.down\\n\\\n\t\tend\\n\\\n\tend\\n\\\n\\n\\\nsnippet trc\\n\\\n\tt.remove :${1:column}\\n\\\nsnippet tre\\n\\\n\tt.rename :${1:old_column_name}, :${2:new_column_name}\\n\\\n\t${3}\\n\\\nsnippet tref\\n\\\n\tt.references :${1:model}\\n\\\n\\n\\\n#rspec\\n\\\nsnippet it\\n\\\n\tit \\\"${1:spec_name}\\\" do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet itp\\n\\\n\tit \\\"${1:spec_name}\\\"\\n\\\n\t${2}\\n\\\nsnippet desc\\n\\\n\tdescribe ${1:class_name} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet cont\\n\\\n\tcontext \\\"${1:message}\\\" do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet bef\\n\\\n\tbefore :${1:each} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet aft\\n\\\n\tafter :${1:each} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\n\";\nexports.scope = \"ruby\";\n\n});                (function() {\n                    window.require([\"ace/snippets/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/rust.js",
    "content": "define(\"ace/snippets/rust\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"rust\";\n\n});                (function() {\n                    window.require([\"ace/snippets/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/sass.js",
    "content": "define(\"ace/snippets/sass\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"sass\";\n\n});                (function() {\n                    window.require([\"ace/snippets/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/scad.js",
    "content": "define(\"ace/snippets/scad\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"scad\";\n\n});                (function() {\n                    window.require([\"ace/snippets/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/scala.js",
    "content": "define(\"ace/snippets/scala\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"scala\";\n\n});                (function() {\n                    window.require([\"ace/snippets/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/scheme.js",
    "content": "define(\"ace/snippets/scheme\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"scheme\";\n\n});                (function() {\n                    window.require([\"ace/snippets/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/scss.js",
    "content": "define(\"ace/snippets/scss\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"scss\";\n\n});                (function() {\n                    window.require([\"ace/snippets/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/sh.js",
    "content": "define(\"ace/snippets/sh\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Shebang. Executing bash via /usr/bin/env makes scripts more portable.\\n\\\nsnippet #!\\n\\\n\t#!/usr/bin/env bash\\n\\\n\t\\n\\\nsnippet if\\n\\\n\tif [[ ${1:condition} ]]; then\\n\\\n\t\t${2:#statements}\\n\\\n\tfi\\n\\\nsnippet elif\\n\\\n\telif [[ ${1:condition} ]]; then\\n\\\n\t\t${2:#statements}\\n\\\nsnippet for\\n\\\n\tfor (( ${2:i} = 0; $2 < ${1:count}; $2++ )); do\\n\\\n\t\t${3:#statements}\\n\\\n\tdone\\n\\\nsnippet fori\\n\\\n\tfor ${1:needle} in ${2:haystack} ; do\\n\\\n\t\t${3:#statements}\\n\\\n\tdone\\n\\\nsnippet wh\\n\\\n\twhile [[ ${1:condition} ]]; do\\n\\\n\t\t${2:#statements}\\n\\\n\tdone\\n\\\nsnippet until\\n\\\n\tuntil [[ ${1:condition} ]]; do\\n\\\n\t\t${2:#statements}\\n\\\n\tdone\\n\\\nsnippet case\\n\\\n\tcase ${1:word} in\\n\\\n\t\t${2:pattern})\\n\\\n\t\t\t${3};;\\n\\\n\tesac\\n\\\nsnippet go \\n\\\n\twhile getopts '${1:o}' ${2:opts} \\n\\\n\tdo \\n\\\n\t\tcase $$2 in\\n\\\n\t\t${3:o0})\\n\\\n\t\t\t${4:#staments};;\\n\\\n\t\tesac\\n\\\n\tdone\\n\\\n# Set SCRIPT_DIR variable to directory script is located.\\n\\\nsnippet sdir\\n\\\n\tSCRIPT_DIR=\\\"$( cd \\\"$( dirname \\\"${BASH_SOURCE[0]}\\\" )\\\" && pwd )\\\"\\n\\\n# getopt\\n\\\nsnippet getopt\\n\\\n\t__ScriptVersion=\\\"${1:version}\\\"\\n\\\n\\n\\\n\t#===  FUNCTION  ================================================================\\n\\\n\t#         NAME:  usage\\n\\\n\t#  DESCRIPTION:  Display usage information.\\n\\\n\t#===============================================================================\\n\\\n\tfunction usage ()\\n\\\n\t{\\n\\\n\t\t\tcat <<- EOT\\n\\\n\\n\\\n\t  Usage :  $${0:0} [options] [--] \\n\\\n\\n\\\n\t  Options: \\n\\\n\t  -h|help       Display this message\\n\\\n\t  -v|version    Display script version\\n\\\n\\n\\\n\tEOT\\n\\\n\t}    # ----------  end of function usage  ----------\\n\\\n\\n\\\n\t#-----------------------------------------------------------------------\\n\\\n\t#  Handle command line arguments\\n\\\n\t#-----------------------------------------------------------------------\\n\\\n\\n\\\n\twhile getopts \\\":hv\\\" opt\\n\\\n\tdo\\n\\\n\t  case $opt in\\n\\\n\\n\\\n\t\th|help     )  usage; exit 0   ;;\\n\\\n\\n\\\n\t\tv|version  )  echo \\\"$${0:0} -- Version $__ScriptVersion\\\"; exit 0   ;;\\n\\\n\\n\\\n\t\t\\\\? )  echo -e \\\"\\\\n  Option does not exist : $OPTARG\\\\n\\\"\\n\\\n\t\t\t  usage; exit 1   ;;\\n\\\n\\n\\\n\t  esac    # --- end of case ---\\n\\\n\tdone\\n\\\n\tshift $(($OPTIND-1))\\n\\\n\\n\\\n\";\nexports.scope = \"sh\";\n\n});                (function() {\n                    window.require([\"ace/snippets/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/sjs.js",
    "content": "define(\"ace/snippets/sjs\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"sjs\";\n\n});                (function() {\n                    window.require([\"ace/snippets/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/slim.js",
    "content": "define(\"ace/snippets/slim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n    \"use strict\";\n\n    exports.snippetText =undefined;\n    exports.scope = \"slim\";\n\n});                (function() {\n                    window.require([\"ace/snippets/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/smarty.js",
    "content": "define(\"ace/snippets/smarty\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"smarty\";\n\n});                (function() {\n                    window.require([\"ace/snippets/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/snippets.js",
    "content": "define(\"ace/snippets/snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# snippets for making snippets :)\\n\\\nsnippet snip\\n\\\n\tsnippet ${1:trigger}\\n\\\n\t\t${2}\\n\\\nsnippet msnip\\n\\\n\tsnippet ${1:trigger} ${2:description}\\n\\\n\t\t${3}\\n\\\nsnippet v\\n\\\n\t{VISUAL}\\n\\\n\";\nexports.scope = \"snippets\";\n\n});                (function() {\n                    window.require([\"ace/snippets/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/soy_template.js",
    "content": "define(\"ace/snippets/soy_template\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"soy_template\";\n\n});                (function() {\n                    window.require([\"ace/snippets/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/space.js",
    "content": "define(\"ace/snippets/space\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"space\";\n\n});                (function() {\n                    window.require([\"ace/snippets/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/sparql.js",
    "content": "define(\"ace/snippets/sparql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/sql.js",
    "content": "define(\"ace/snippets/sql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet tbl\\n\\\n\tcreate table ${1:table} (\\n\\\n\t\t${2:columns}\\n\\\n\t);\\n\\\nsnippet col\\n\\\n\t${1:name}\t${2:type}\t${3:default ''}\t${4:not null}\\n\\\nsnippet ccol\\n\\\n\t${1:name}\tvarchar2(${2:size})\t${3:default ''}\t${4:not null}\\n\\\nsnippet ncol\\n\\\n\t${1:name}\tnumber\t${3:default 0}\t${4:not null}\\n\\\nsnippet dcol\\n\\\n\t${1:name}\tdate\t${3:default sysdate}\t${4:not null}\\n\\\nsnippet ind\\n\\\n\tcreate index ${3:$1_$2} on ${1:table}(${2:column});\\n\\\nsnippet uind\\n\\\n\tcreate unique index ${1:name} on ${2:table}(${3:column});\\n\\\nsnippet tblcom\\n\\\n\tcomment on table ${1:table} is '${2:comment}';\\n\\\nsnippet colcom\\n\\\n\tcomment on column ${1:table}.${2:column} is '${3:comment}';\\n\\\nsnippet addcol\\n\\\n\talter table ${1:table} add (${2:column} ${3:type});\\n\\\nsnippet seq\\n\\\n\tcreate sequence ${1:name} start with ${2:1} increment by ${3:1} minvalue ${4:1};\\n\\\nsnippet s*\\n\\\n\tselect * from ${1:table}\\n\\\n\";\nexports.scope = \"sql\";\n\n});                (function() {\n                    window.require([\"ace/snippets/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/sqlserver.js",
    "content": "define(\"ace/snippets/sqlserver\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# ISNULL\\n\\\nsnippet isnull\\n\\\n\tISNULL(${1:check_expression}, ${2:replacement_value})\\n\\\n# FORMAT\\n\\\nsnippet format\\n\\\n\tFORMAT(${1:value}, ${2:format})\\n\\\n# CAST\\n\\\nsnippet cast\\n\\\n\tCAST(${1:expression} AS ${2:data_type})\\n\\\n# CONVERT\\n\\\nsnippet convert\\n\\\n\tCONVERT(${1:data_type}, ${2:expression})\\n\\\n# DATEPART\\n\\\nsnippet datepart\\n\\\n\tDATEPART(${1:datepart}, ${2:date})\\n\\\n# DATEDIFF\\n\\\nsnippet datediff\\n\\\n\tDATEDIFF(${1:datepart}, ${2:startdate}, ${3:enddate})\\n\\\n# DATEADD\\n\\\nsnippet dateadd\\n\\\n\tDATEADD(${1:datepart}, ${2:number}, ${3:date})\\n\\\n# DATEFROMPARTS \\n\\\nsnippet datefromparts\\n\\\n\tDATEFROMPARTS(${1:year}, ${2:month}, ${3:day})\\n\\\n# OBJECT_DEFINITION\\n\\\nsnippet objectdef\\n\\\n\tSELECT OBJECT_DEFINITION(OBJECT_ID('${1:sys.server_permissions /*object name*/}'))\\n\\\n# STUFF XML\\n\\\nsnippet stuffxml\\n\\\n\tSTUFF((SELECT ', ' + ${1:ColumnName}\\n\\\n\t\tFROM ${2:TableName}\\n\\\n\t\tWHERE ${3:WhereClause}\\n\\\n\t\tFOR XML PATH('')), 1, 1, '') AS ${4:Alias}\\n\\\n\t${5:/*https://msdn.microsoft.com/en-us/library/ms188043.aspx*/}\\n\\\n# Create Procedure\\n\\\nsnippet createproc\\n\\\n\t-- =============================================\\n\\\n\t-- Author:\t\t${1:Author}\\n\\\n\t-- Create date: ${2:Date}\\n\\\n\t-- Description:\t${3:Description}\\n\\\n\t-- =============================================\\n\\\n\tCREATE PROCEDURE ${4:Procedure_Name}\\n\\\n\t\t${5:/*Add the parameters for the stored procedure here*/}\\n\\\n\tAS\\n\\\n\tBEGIN\\n\\\n\t\t-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.\\n\\\n\t\tSET NOCOUNT ON;\\n\\\n\t\t\\n\\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\\\n\t\t\\n\\\n\tEND\\n\\\n\tGO\\n\\\n# Create Scalar Function\\n\\\nsnippet createfn\\n\\\n\t-- =============================================\\n\\\n\t-- Author:\t\t${1:Author}\\n\\\n\t-- Create date: ${2:Date}\\n\\\n\t-- Description:\t${3:Description}\\n\\\n\t-- =============================================\\n\\\n\tCREATE FUNCTION ${4:Scalar_Function_Name}\\n\\\n\t\t-- Add the parameters for the function here\\n\\\n\tRETURNS ${5:Function_Data_Type}\\n\\\n\tAS\\n\\\n\tBEGIN\\n\\\n\t\tDECLARE @Result ${5:Function_Data_Type}\\n\\\n\t\t\\n\\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\\\n\t\t\\n\\\n\tEND\\n\\\n\tGO\";\nexports.scope = \"sqlserver\";\n\n});                (function() {\n                    window.require([\"ace/snippets/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/stylus.js",
    "content": "define(\"ace/snippets/stylus\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"stylus\";\n\n});                (function() {\n                    window.require([\"ace/snippets/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/svg.js",
    "content": "define(\"ace/snippets/svg\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"svg\";\n\n});                (function() {\n                    window.require([\"ace/snippets/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/swift.js",
    "content": "define(\"ace/snippets/swift\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"swift\";\n\n});                (function() {\n                    window.require([\"ace/snippets/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/tcl.js",
    "content": "define(\"ace/snippets/tcl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# #!/usr/bin/env tclsh\\n\\\nsnippet #!\\n\\\n\t#!/usr/bin/env tclsh\\n\\\n\t\\n\\\n# Process\\n\\\nsnippet pro\\n\\\n\tproc ${1:function_name} {${2:args}} {\\n\\\n\t\t${3:#body ...}\\n\\\n\t}\\n\\\n#xif\\n\\\nsnippet xif\\n\\\n\t${1:expr}? ${2:true} : ${3:false}\\n\\\n# Conditional\\n\\\nsnippet if\\n\\\n\tif {${1}} {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# Conditional if..else\\n\\\nsnippet ife\\n\\\n\tif {${1}} {\\n\\\n\t\t${2:# body...}\\n\\\n\t} else {\\n\\\n\t\t${3:# else...}\\n\\\n\t}\\n\\\n# Conditional if..elsif..else\\n\\\nsnippet ifee\\n\\\n\tif {${1}} {\\n\\\n\t\t${2:# body...}\\n\\\n\t} elseif {${3}} {\\n\\\n\t\t${4:# elsif...}\\n\\\n\t} else {\\n\\\n\t\t${5:# else...}\\n\\\n\t}\\n\\\n# If catch then\\n\\\nsnippet ifc\\n\\\n\tif { [catch {${1:#do something...}} ${2:err}] } {\\n\\\n\t\t${3:# handle failure...}\\n\\\n\t}\\n\\\n# Catch\\n\\\nsnippet catch\\n\\\n\tcatch {${1}} ${2:err} ${3:options}\\n\\\n# While Loop\\n\\\nsnippet wh\\n\\\n\twhile {${1}} {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# For Loop\\n\\\nsnippet for\\n\\\n\tfor {set ${2:var} 0} {$$2 < ${1:count}} {${3:incr} $2} {\\n\\\n\t\t${4:# body...}\\n\\\n\t}\\n\\\n# Foreach Loop\\n\\\nsnippet fore\\n\\\n\tforeach ${1:x} {${2:#list}} {\\n\\\n\t\t${3:# body...}\\n\\\n\t}\\n\\\n# after ms script...\\n\\\nsnippet af\\n\\\n\tafter ${1:ms} ${2:#do something}\\n\\\n# after cancel id\\n\\\nsnippet afc\\n\\\n\tafter cancel ${1:id or script}\\n\\\n# after idle\\n\\\nsnippet afi\\n\\\n\tafter idle ${1:script}\\n\\\n# after info id\\n\\\nsnippet afin\\n\\\n\tafter info ${1:id}\\n\\\n# Expr\\n\\\nsnippet exp\\n\\\n\texpr {${1:#expression here}}\\n\\\n# Switch\\n\\\nsnippet sw\\n\\\n\tswitch ${1:var} {\\n\\\n\t\t${3:pattern 1} {\\n\\\n\t\t\t${4:#do something}\\n\\\n\t\t}\\n\\\n\t\tdefault {\\n\\\n\t\t\t${2:#do something}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n# Case\\n\\\nsnippet ca\\n\\\n\t${1:pattern} {\\n\\\n\t\t${2:#do something}\\n\\\n\t}${3}\\n\\\n# Namespace eval\\n\\\nsnippet ns\\n\\\n\tnamespace eval ${1:path} {${2:#script...}}\\n\\\n# Namespace current\\n\\\nsnippet nsc\\n\\\n\tnamespace current\\n\\\n\";\nexports.scope = \"tcl\";\n\n});                (function() {\n                    window.require([\"ace/snippets/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/terraform.js",
    "content": "define(\"ace/snippets/terraform\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"terraform\";\n\n});                (function() {\n                    window.require([\"ace/snippets/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/tex.js",
    "content": "define(\"ace/snippets/tex\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"#PREAMBLE\\n\\\n#newcommand\\n\\\nsnippet nc\\n\\\n\t\\\\newcommand{\\\\${1:cmd}}[${2:opt}]{${3:realcmd}}${4}\\n\\\n#usepackage\\n\\\nsnippet up\\n\\\n\t\\\\usepackage[${1:[options}]{${2:package}}\\n\\\n#newunicodechar\\n\\\nsnippet nuc\\n\\\n\t\\\\newunicodechar{${1}}{${2:\\\\ensuremath}${3:tex-substitute}}}\\n\\\n#DeclareMathOperator\\n\\\nsnippet dmo\\n\\\n\t\\\\DeclareMathOperator{${1}}{${2}}\\n\\\n\\n\\\n#DOCUMENT\\n\\\n# \\\\begin{}...\\\\end{}\\n\\\nsnippet begin\\n\\\n\t\\\\begin{${1:env}}\\n\\\n\t\t${2}\\n\\\n\t\\\\end{$1}\\n\\\n# Tabular\\n\\\nsnippet tab\\n\\\n\t\\\\begin{${1:tabular}}{${2:c}}\\n\\\n\t${3}\\n\\\n\t\\\\end{$1}\\n\\\nsnippet thm\\n\\\n\t\\\\begin[${1:author}]{${2:thm}}\\n\\\n\t${3}\\n\\\n\t\\\\end{$1}\\n\\\nsnippet center\\n\\\n\t\\\\begin{center}\\n\\\n\t\t${1}\\n\\\n\t\\\\end{center}\\n\\\n# Align(ed)\\n\\\nsnippet ali\\n\\\n\t\\\\begin{align${1:ed}}\\n\\\n\t\t${2}\\n\\\n\t\\\\end{align$1}\\n\\\n# Gather(ed)\\n\\\nsnippet gat\\n\\\n\t\\\\begin{gather${1:ed}}\\n\\\n\t\t${2}\\n\\\n\t\\\\end{gather$1}\\n\\\n# Equation\\n\\\nsnippet eq\\n\\\n\t\\\\begin{equation}\\n\\\n\t\t${1}\\n\\\n\t\\\\end{equation}\\n\\\n# Equation\\n\\\nsnippet eq*\\n\\\n\t\\\\begin{equation*}\\n\\\n\t\t${1}\\n\\\n\t\\\\end{equation*}\\n\\\n# Unnumbered Equation\\n\\\nsnippet \\\\\\n\\\n\t\\\\[\\n\\\n\t\t${1}\\n\\\n\t\\\\]\\n\\\n# Enumerate\\n\\\nsnippet enum\\n\\\n\t\\\\begin{enumerate}\\n\\\n\t\t\\\\item ${1}\\n\\\n\t\\\\end{enumerate}\\n\\\n# Itemize\\n\\\nsnippet itemize\\n\\\n\t\\\\begin{itemize}\\n\\\n\t\t\\\\item ${1}\\n\\\n\t\\\\end{itemize}\\n\\\n# Description\\n\\\nsnippet desc\\n\\\n\t\\\\begin{description}\\n\\\n\t\t\\\\item[${1}] ${2}\\n\\\n\t\\\\end{description}\\n\\\n# Matrix\\n\\\nsnippet mat\\n\\\n\t\\\\begin{${1:p/b/v/V/B/small}matrix}\\n\\\n\t\t${2}\\n\\\n\t\\\\end{$1matrix}\\n\\\n# Cases\\n\\\nsnippet cas\\n\\\n\t\\\\begin{cases}\\n\\\n\t\t${1:equation}, &\\\\text{ if }${2:case}\\\\\\\\\\n\\\n\t\t${3}\\n\\\n\t\\\\end{cases}\\n\\\n# Split\\n\\\nsnippet spl\\n\\\n\t\\\\begin{split}\\n\\\n\t\t${1}\\n\\\n\t\\\\end{split}\\n\\\n# Part\\n\\\nsnippet part\\n\\\n\t\\\\part{${1:part name}} % (fold)\\n\\\n\t\\\\label{prt:${2:$1}}\\n\\\n\t${3}\\n\\\n\t% part $2 (end)\\n\\\n# Chapter\\n\\\nsnippet cha\\n\\\n\t\\\\chapter{${1:chapter name}}\\n\\\n\t\\\\label{cha:${2:$1}}\\n\\\n\t${3}\\n\\\n# Section\\n\\\nsnippet sec\\n\\\n\t\\\\section{${1:section name}}\\n\\\n\t\\\\label{sec:${2:$1}}\\n\\\n\t${3}\\n\\\n# Sub Section\\n\\\nsnippet sub\\n\\\n\t\\\\subsection{${1:subsection name}}\\n\\\n\t\\\\label{sub:${2:$1}}\\n\\\n\t${3}\\n\\\n# Sub Sub Section\\n\\\nsnippet subs\\n\\\n\t\\\\subsubsection{${1:subsubsection name}}\\n\\\n\t\\\\label{ssub:${2:$1}}\\n\\\n\t${3}\\n\\\n# Paragraph\\n\\\nsnippet par\\n\\\n\t\\\\paragraph{${1:paragraph name}}\\n\\\n\t\\\\label{par:${2:$1}}\\n\\\n\t${3}\\n\\\n# Sub Paragraph\\n\\\nsnippet subp\\n\\\n\t\\\\subparagraph{${1:subparagraph name}}\\n\\\n\t\\\\label{subp:${2:$1}}\\n\\\n\t${3}\\n\\\n#References\\n\\\nsnippet itd\\n\\\n\t\\\\item[${1:description}] ${2:item}\\n\\\nsnippet figure\\n\\\n\t${1:Figure}~\\\\ref{${2:fig:}}${3}\\n\\\nsnippet table\\n\\\n\t${1:Table}~\\\\ref{${2:tab:}}${3}\\n\\\nsnippet listing\\n\\\n\t${1:Listing}~\\\\ref{${2:list}}${3}\\n\\\nsnippet section\\n\\\n\t${1:Section}~\\\\ref{${2:sec:}}${3}\\n\\\nsnippet page\\n\\\n\t${1:page}~\\\\pageref{${2}}${3}\\n\\\nsnippet index\\n\\\n\t\\\\index{${1:index}}${2}\\n\\\n#Citations\\n\\\nsnippet cite\\n\\\n\t\\\\cite[${1}]{${2}}${3}\\n\\\nsnippet fcite\\n\\\n\t\\\\footcite[${1}]{${2}}${3}\\n\\\n#Formating text: italic, bold, underline, small capital, emphase ..\\n\\\nsnippet it\\n\\\n\t\\\\textit{${1:text}}\\n\\\nsnippet bf\\n\\\n\t\\\\textbf{${1:text}}\\n\\\nsnippet under\\n\\\n\t\\\\underline{${1:text}}\\n\\\nsnippet emp\\n\\\n\t\\\\emph{${1:text}}\\n\\\nsnippet sc\\n\\\n\t\\\\textsc{${1:text}}\\n\\\n#Choosing font\\n\\\nsnippet sf\\n\\\n\t\\\\textsf{${1:text}}\\n\\\nsnippet rm\\n\\\n\t\\\\textrm{${1:text}}\\n\\\nsnippet tt\\n\\\n\t\\\\texttt{${1:text}}\\n\\\n#misc\\n\\\nsnippet ft\\n\\\n\t\\\\footnote{${1:text}}\\n\\\nsnippet fig\\n\\\n\t\\\\begin{figure}\\n\\\n\t\\\\begin{center}\\n\\\n\t    \\\\includegraphics[scale=${1}]{Figures/${2}}\\n\\\n\t\\\\end{center}\\n\\\n\t\\\\caption{${3}}\\n\\\n\t\\\\label{fig:${4}}\\n\\\n\t\\\\end{figure}\\n\\\nsnippet tikz\\n\\\n\t\\\\begin{figure}\\n\\\n\t\\\\begin{center}\\n\\\n\t\\\\begin{tikzpicture}[scale=${1:1}]\\n\\\n\t\t${2}\\n\\\n\t\\\\end{tikzpicture}\\n\\\n\t\\\\end{center}\\n\\\n\t\\\\caption{${3}}\\n\\\n\t\\\\label{fig:${4}}\\n\\\n\t\\\\end{figure}\\n\\\n#math\\n\\\nsnippet stackrel\\n\\\n\t\\\\stackrel{${1:above}}{${2:below}} ${3}\\n\\\nsnippet frac\\n\\\n\t\\\\frac{${1:num}}{${2:denom}}\\n\\\nsnippet sum\\n\\\n\t\\\\sum^{${1:n}}_{${2:i=1}}{${3}}\";\nexports.scope = \"tex\";\n\n});                (function() {\n                    window.require([\"ace/snippets/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/text.js",
    "content": "define(\"ace/snippets/text\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"text\";\n\n});                (function() {\n                    window.require([\"ace/snippets/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/textile.js",
    "content": "define(\"ace/snippets/textile\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Jekyll post header\\n\\\nsnippet header\\n\\\n\t---\\n\\\n\ttitle: ${1:title}\\n\\\n\tlayout: post\\n\\\n\tdate: ${2:date} ${3:hour:minute:second} -05:00\\n\\\n\t---\\n\\\n\\n\\\n# Image\\n\\\nsnippet img\\n\\\n\t!${1:url}(${2:title}):${3:link}!\\n\\\n\\n\\\n# Table\\n\\\nsnippet |\\n\\\n\t|${1}|${2}\\n\\\n\\n\\\n# Link\\n\\\nsnippet link\\n\\\n\t\\\"${1:link text}\\\":${2:url}\\n\\\n\\n\\\n# Acronym\\n\\\nsnippet (\\n\\\n\t(${1:Expand acronym})${2}\\n\\\n\\n\\\n# Footnote\\n\\\nsnippet fn\\n\\\n\t[${1:ref number}] ${3}\\n\\\n\\n\\\n\tfn$1. ${2:footnote}\\n\\\n\t\\n\\\n\";\nexports.scope = \"textile\";\n\n});                (function() {\n                    window.require([\"ace/snippets/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/toml.js",
    "content": "define(\"ace/snippets/toml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"toml\";\n\n});                (function() {\n                    window.require([\"ace/snippets/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/tsx.js",
    "content": "define(\"ace/snippets/tsx\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"tsx\";\n\n});                (function() {\n                    window.require([\"ace/snippets/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/turtle.js",
    "content": "define(\"ace/snippets/turtle\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/twig.js",
    "content": "define(\"ace/snippets/twig\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"twig\";\n\n});                (function() {\n                    window.require([\"ace/snippets/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/typescript.js",
    "content": "define(\"ace/snippets/typescript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"typescript\";\n\n});                (function() {\n                    window.require([\"ace/snippets/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/vala.js",
    "content": "define(\"ace/snippets/vala\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nexports.snippets = [\n    {\n        \"content\": \"case ${1:condition}:\\n\\t$0\\n\\tbreak;\\n\",\n        \"name\": \"case\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"case\"\n    },\n    {\n        \"content\": \"/**\\n * ${6}\\n */\\n${1:public} class ${2:MethodName}${3: : GLib.Object} {\\n\\n\\t/**\\n\\t * ${7}\\n\\t */\\n\\tpublic ${2}(${4}) {\\n\\t\\t${5}\\n\\t}\\n\\n\\t$0\\n}\",\n        \"name\": \"class\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"class\"\n    },\n    {\n        \"content\": \"(${1}) => {\\n\\t${0}\\n}\\n\",\n        \"name\": \"closure\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"=>\"\n    },\n    {\n        \"content\": \"/*\\n * $0\\n */\",\n        \"name\": \"Comment (multiline)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"/*\"\n    },\n    {\n        \"content\": \"Console.WriteLine($1);\\n$0\",\n        \"name\": \"Console.WriteLine (writeline)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"writeline\"\n    },\n    {\n        \"content\": \"[DBus(name = \\\"$0\\\")]\",\n        \"name\": \"DBus annotation\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"[DBus\"\n    },\n    {\n        \"content\": \"delegate ${1:void} ${2:DelegateName}($0);\",\n        \"name\": \"delegate\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"delegate\"\n    },\n    {\n        \"content\": \"do {\\n\\t$0\\n} while ($1);\\n\",\n        \"name\": \"do while\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"dowhile\"\n    },\n    {\n        \"content\": \"/**\\n * $0\\n */\",\n        \"name\": \"DocBlock\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"/**\"\n    },\n    {\n        \"content\": \"else if ($1) {\\n\\t$0\\n}\\n\",\n        \"name\": \"else if (elseif)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"elseif\"\n    },\n    {\n        \"content\": \"else {\\n\\t$0\\n}\",\n        \"name\": \"else\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"else\"\n    },\n    {\n        \"content\": \"enum {$1:EnumName} {\\n\\t$0\\n}\",\n        \"name\": \"enum\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"enum\"\n    },\n    {\n        \"content\": \"public errordomain ${1:Error} {\\n\\t$0\\n}\",\n        \"name\": \"error domain\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"errordomain\"\n    },\n    {\n        \"content\": \"for ($1;$2;$3) {\\n\\t$0\\n}\",\n        \"name\": \"for\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"for\"\n    },\n    {\n        \"content\": \"foreach ($1 in $2) {\\n\\t$0\\n}\",\n        \"name\": \"foreach\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"foreach\"\n    },\n    {\n        \"content\": \"Gee.ArrayList<${1:G}>($0);\",\n        \"name\": \"Gee.ArrayList\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"ArrayList\"\n    },\n    {\n        \"content\": \"Gee.HashMap<${1:K},${2:V}>($0);\",\n        \"name\": \"Gee.HashMap\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"HashMap\"\n    },\n    {\n        \"content\": \"Gee.HashSet<${1:G}>($0);\",\n        \"name\": \"Gee.HashSet\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"HashSet\"\n    },\n    {\n        \"content\": \"if ($1) {\\n\\t$0\\n}\",\n        \"name\": \"if\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"if\"\n    },\n    {\n        \"content\": \"interface ${1:InterfaceName}{$2: : SuperInterface} {\\n\\t$0\\n}\",\n        \"name\": \"interface\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"interface\"\n    },\n    {\n        \"content\": \"public static int main(string [] argv) {\\n\\t${0}\\n\\treturn 0;\\n}\",\n        \"name\": \"Main function\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"main\"\n    },\n    {\n        \"content\": \"namespace $1 {\\n\\t$0\\n}\\n\",\n        \"name\": \"namespace (ns)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"ns\"\n    },\n    {\n        \"content\": \"stdout.printf($0);\",\n        \"name\": \"printf\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"printf\"\n    },\n    {\n        \"content\": \"${1:public} ${2:Type} ${3:Name} {\\n\\tset {\\n\\t\\t$0\\n\\t}\\n\\tget {\\n\\n\\t}\\n}\",\n        \"name\": \"property (prop)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"prop\"\n    },\n    {\n        \"content\": \"${1:public} ${2:Type} ${3:Name} {\\n\\tget {\\n\\t\\t$0\\n\\t}\\n}\",\n        \"name\": \"read-only property (roprop)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"roprop\"\n    },\n    {\n        \"content\": \"@\\\"${1:\\\\$var}\\\"\",\n        \"name\": \"String template (@)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"@\"\n    },\n    {\n        \"content\": \"struct ${1:StructName} {\\n\\t$0\\n}\",\n        \"name\": \"struct\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"struct\"\n    },\n    {\n        \"content\": \"switch ($1) {\\n\\t$0\\n}\",\n        \"name\": \"switch\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"switch\"\n    },\n    {\n        \"content\": \"try {\\n\\t$2\\n} catch (${1:Error} e) {\\n\\t$0\\n}\",\n        \"name\": \"try/catch\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"try\"\n    },\n    {\n        \"content\": \"\\\"\\\"\\\"$0\\\"\\\"\\\";\",\n        \"name\": \"Verbatim string (\\\"\\\"\\\")\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"verbatim\"\n    },\n    {\n        \"content\": \"while ($1) {\\n\\t$0\\n}\",\n        \"name\": \"while\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"while\"\n    }\n];\nexports.scope = \"\";\n\n});                (function() {\n                    window.require([\"ace/snippets/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/vbscript.js",
    "content": "define(\"ace/snippets/vbscript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"vbscript\";\n\n});                (function() {\n                    window.require([\"ace/snippets/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/velocity.js",
    "content": "define(\"ace/snippets/velocity\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# macro\\n\\\nsnippet #macro\\n\\\n\t#macro ( ${1:macroName} ${2:\\\\$var1, [\\\\$var2, ...]} )\\n\\\n\t\t${3:## macro code}\\n\\\n\t#end\\n\\\n# foreach\\n\\\nsnippet #foreach\\n\\\n\t#foreach ( ${1:\\\\$item} in ${2:\\\\$collection} )\\n\\\n\t\t${3:## foreach code}\\n\\\n\t#end\\n\\\n# if\\n\\\nsnippet #if\\n\\\n\t#if ( ${1:true} )\\n\\\n\t\t${0}\\n\\\n\t#end\\n\\\n# if ... else\\n\\\nsnippet #ife\\n\\\n\t#if ( ${1:true} )\\n\\\n\t\t${2}\\n\\\n\t#else\\n\\\n\t\t${0}\\n\\\n\t#end\\n\\\n#import\\n\\\nsnippet #import\\n\\\n\t#import ( \\\"${1:path/to/velocity/format}\\\" )\\n\\\n# set\\n\\\nsnippet #set\\n\\\n\t#set ( $${1:var} = ${0} )\\n\\\n\";\nexports.scope = \"velocity\";\nexports.includeScopes = [\"html\", \"javascript\", \"css\"];\n\n});                (function() {\n                    window.require([\"ace/snippets/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/verilog.js",
    "content": "define(\"ace/snippets/verilog\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"verilog\";\n\n});                (function() {\n                    window.require([\"ace/snippets/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/vhdl.js",
    "content": "define(\"ace/snippets/vhdl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"vhdl\";\n\n});                (function() {\n                    window.require([\"ace/snippets/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/visualforce.js",
    "content": "define(\"ace/snippets/visualforce\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"visualforce\";\n\n});                (function() {\n                    window.require([\"ace/snippets/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/wollok.js",
    "content": "define(\"ace/snippets/wollok\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"##\\n\\\n## Basic Java packages and import\\n\\\nsnippet im\\n\\\n\timport\\n\\\nsnippet w.l\\n\\\n\twollok.lang\\n\\\nsnippet w.i\\n\\\n\twollok.lib\\n\\\n\\n\\\n## Class and object\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\n\\\nsnippet obj\\n\\\n\tobject ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2:inherits Parent}${3}\\n\\\nsnippet te\\n\\\n\ttest ${1:`Filename(\\\"\\\", \\\"untitled\\\")`}\\n\\\n\\n\\\n##\\n\\\n## Enhancements\\n\\\nsnippet inh\\n\\\n\tinherits\\n\\\n\\n\\\n##\\n\\\n## Comments\\n\\\nsnippet /*\\n\\\n\t/*\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n\\n\\\n##\\n\\\n## Control Statements\\n\\\nsnippet el\\n\\\n\telse\\n\\\nsnippet if\\n\\\n\tif (${1}) ${2}\\n\\\n\\n\\\n##\\n\\\n## Create a Method\\n\\\nsnippet m\\n\\\n\tmethod ${1:method}(${2}) ${5}\\n\\\n\\n\\\n##  \\n\\\n## Tests\\n\\\nsnippet as\\n\\\n\tassert.equals(${1:expected}, ${2:actual})\\n\\\n\\n\\\n##\\n\\\n## Exceptions\\n\\\nsnippet ca\\n\\\n\tcatch ${1:e} : (${2:Exception} ) ${3}\\n\\\nsnippet thr\\n\\\n\tthrow\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch ${1:e} : ${2:Exception} {\\n\\\n\t}\\n\\\n\\n\\\n##\\n\\\n## Javadocs\\n\\\nsnippet /**\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n\\n\\\n##\\n\\\n## Print Methods\\n\\\nsnippet print\\n\\\n\tconsole.println(\\\"${1:Message}\\\")\\n\\\n\\n\\\n##\\n\\\n## Setter and Getter Methods\\n\\\nsnippet set\\n\\\n\tmethod set${1:}(${2:}) {\\n\\\n\t\t$1 = $2\\n\\\n\t}\\n\\\nsnippet get\\n\\\n\tmethod get${1:}() {\\n\\\n\t\treturn ${1:};\\n\\\n\t}\\n\\\n\\n\\\n##\\n\\\n## Terminate Methods or Loops\\n\\\nsnippet re\\n\\\n\treturn\";\nexports.scope = \"wollok\";\n\n});                (function() {\n                    window.require([\"ace/snippets/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/xml.js",
    "content": "define(\"ace/snippets/xml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"xml\";\n\n});                (function() {\n                    window.require([\"ace/snippets/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/xquery.js",
    "content": "define(\"ace/snippets/xquery\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet for\\n\\\n\tfor $${1:item} in ${2:expr}\\n\\\nsnippet return\\n\\\n\treturn ${1:expr}\\n\\\nsnippet import\\n\\\n\timport module namespace ${1:ns} = \\\"${2:http://www.example.com/}\\\";\\n\\\nsnippet some\\n\\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\n\\\nsnippet every\\n\\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\n\\\nsnippet if\\n\\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\n\\\nsnippet switch\\n\\\n\tswitch(${1:\\\"foo\\\"})\\n\\\n\tcase ${2:\\\"foo\\\"}\\n\\\n\treturn ${3:true}\\n\\\n\tdefault return ${4:false}\\n\\\nsnippet try\\n\\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\n\\\nsnippet tumbling\\n\\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\\\n\tstart at $${3:start} when ${4:expr}\\n\\\n\tend at $${5:end} when ${6:expr}\\n\\\n\treturn ${7:expr}\\n\\\nsnippet sliding\\n\\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\\\n\tstart at $${3:start} when ${4:expr}\\n\\\n\tend at $${5:end} when ${6:expr}\\n\\\n\treturn ${7:expr}\\n\\\nsnippet let\\n\\\n\tlet $${1:varname} := ${2:expr}\\n\\\nsnippet group\\n\\\n\tgroup by $${1:varname} := ${2:expr}\\n\\\nsnippet order\\n\\\n\torder by ${1:expr} ${2:descending}\\n\\\nsnippet stable\\n\\\n\tstable order by ${1:expr}\\n\\\nsnippet count\\n\\\n\tcount $${1:varname}\\n\\\nsnippet ordered\\n\\\n\tordered { ${1:expr} }\\n\\\nsnippet unordered\\n\\\n\tunordered { ${1:expr} }\\n\\\nsnippet treat \\n\\\n\ttreat as ${1:expr}\\n\\\nsnippet castable\\n\\\n\tcastable as ${1:atomicType}\\n\\\nsnippet cast\\n\\\n\tcast as ${1:atomicType}\\n\\\nsnippet typeswitch\\n\\\n\ttypeswitch(${1:expr})\\n\\\n\tcase ${2:type}  return ${3:expr}\\n\\\n\tdefault return ${4:expr}\\n\\\nsnippet var\\n\\\n\tdeclare variable $${1:varname} := ${2:expr};\\n\\\nsnippet fn\\n\\\n\tdeclare function ${1:ns}:${2:name}(){\\n\\\n\t${3:expr}\\n\\\n\t};\\n\\\nsnippet module\\n\\\n\tmodule namespace ${1:ns} = \\\"${2:http://www.example.com}\\\";\\n\\\n\";\nexports.scope = \"xquery\";\n\n});                (function() {\n                    window.require([\"ace/snippets/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/snippets/yaml.js",
    "content": "define(\"ace/snippets/yaml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"yaml\";\n\n});                (function() {\n                    window.require([\"ace/snippets/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-ambiance.js",
    "content": "define(\"ace/theme/ambiance\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-ambiance\";\nexports.cssText = \".ace-ambiance .ace_gutter {\\\nbackground-color: #3d3d3d;\\\nbackground-image: linear-gradient(left, #3D3D3D, #333);\\\nbackground-repeat: repeat-x;\\\nborder-right: 1px solid #4d4d4d;\\\ntext-shadow: 0px 1px 1px #4d4d4d;\\\ncolor: #222;\\\n}\\\n.ace-ambiance .ace_gutter-layer {\\\nbackground: repeat left top;\\\n}\\\n.ace-ambiance .ace_gutter-active-line {\\\nbackground-color: #3F3F3F;\\\n}\\\n.ace-ambiance .ace_fold-widget {\\\ntext-align: center;\\\n}\\\n.ace-ambiance .ace_fold-widget:hover {\\\ncolor: #777;\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_start,\\\n.ace-ambiance .ace_fold-widget.ace_end,\\\n.ace-ambiance .ace_fold-widget.ace_closed{\\\nbackground: none;\\\nborder: none;\\\nbox-shadow: none;\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_start:after {\\\ncontent: '▾'\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_end:after {\\\ncontent: '▴'\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_closed:after {\\\ncontent: '‣'\\\n}\\\n.ace-ambiance .ace_print-margin {\\\nborder-left: 1px dotted #2D2D2D;\\\nright: 0;\\\nbackground: #262626;\\\n}\\\n.ace-ambiance .ace_scroller {\\\n-webkit-box-shadow: inset 0 0 10px black;\\\n-moz-box-shadow: inset 0 0 10px black;\\\n-o-box-shadow: inset 0 0 10px black;\\\nbox-shadow: inset 0 0 10px black;\\\n}\\\n.ace-ambiance {\\\ncolor: #E6E1DC;\\\nbackground-color: #202020;\\\n}\\\n.ace-ambiance .ace_cursor {\\\nborder-left: 1px solid #7991E8;\\\n}\\\n.ace-ambiance .ace_overwrite-cursors .ace_cursor {\\\nborder: 1px solid #FFE300;\\\nbackground: #766B13;\\\n}\\\n.ace-ambiance.normal-mode .ace_cursor-layer {\\\nz-index: 0;\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_selected-word {\\\nborder-radius: 4px;\\\nborder: 8px solid #3f475d;\\\nbox-shadow: 0 0 4px black;\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031);\\\n}\\\n.ace-ambiance .ace_invisible {\\\ncolor: #333;\\\n}\\\n.ace-ambiance .ace_paren {\\\ncolor: #24C2C7;\\\n}\\\n.ace-ambiance .ace_keyword {\\\ncolor: #cda869;\\\n}\\\n.ace-ambiance .ace_keyword.ace_operator {\\\ncolor: #fa8d6a;\\\n}\\\n.ace-ambiance .ace_punctuation.ace_operator {\\\ncolor: #fa8d6a;\\\n}\\\n.ace-ambiance .ace_identifier {\\\n}\\\n.ace-ambiance .ace-statement {\\\ncolor: #cda869;\\\n}\\\n.ace-ambiance .ace_constant {\\\ncolor: #CF7EA9;\\\n}\\\n.ace-ambiance .ace_constant.ace_language {\\\ncolor: #CF7EA9;\\\n}\\\n.ace-ambiance .ace_constant.ace_library {\\\n}\\\n.ace-ambiance .ace_constant.ace_numeric {\\\ncolor: #78CF8A;\\\n}\\\n.ace-ambiance .ace_invalid {\\\ntext-decoration: underline;\\\n}\\\n.ace-ambiance .ace_invalid.ace_illegal {\\\ncolor:#F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75);\\\n}\\\n.ace-ambiance .ace_invalid,\\\n.ace-ambiance .ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1;\\\n}\\\n.ace-ambiance .ace_support {\\\ncolor: #9B859D;\\\n}\\\n.ace-ambiance .ace_support.ace_function {\\\ncolor: #DAD085;\\\n}\\\n.ace-ambiance .ace_function.ace_buildin {\\\ncolor: #9b859d;\\\n}\\\n.ace-ambiance .ace_string {\\\ncolor: #8f9d6a;\\\n}\\\n.ace-ambiance .ace_string.ace_regexp {\\\ncolor: #DAD085;\\\n}\\\n.ace-ambiance .ace_comment {\\\nfont-style: italic;\\\ncolor: #555;\\\n}\\\n.ace-ambiance .ace_comment.ace_doc {\\\n}\\\n.ace-ambiance .ace_comment.ace_doc.ace_tag {\\\ncolor: #666;\\\nfont-style: normal;\\\n}\\\n.ace-ambiance .ace_definition,\\\n.ace-ambiance .ace_type {\\\ncolor: #aac6e3;\\\n}\\\n.ace-ambiance .ace_variable {\\\ncolor: #9999cc;\\\n}\\\n.ace-ambiance .ace_variable.ace_language {\\\ncolor: #9b859d;\\\n}\\\n.ace-ambiance .ace_xml-pe {\\\ncolor: #494949;\\\n}\\\n.ace-ambiance .ace_gutter-layer,\\\n.ace-ambiance .ace_text-layer {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace-ambiance .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    window.require([\"ace/theme/ambiance\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-chaos.js",
    "content": "define(\"ace/theme/chaos\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-chaos\";\nexports.cssText = \".ace-chaos .ace_gutter {\\\nbackground: #141414;\\\ncolor: #595959;\\\nborder-right: 1px solid #282828;\\\n}\\\n.ace-chaos .ace_gutter-cell.ace_warning {\\\nbackground-image: none;\\\nbackground: #FC0;\\\nborder-left: none;\\\npadding-left: 0;\\\ncolor: #000;\\\n}\\\n.ace-chaos .ace_gutter-cell.ace_error {\\\nbackground-position: -6px center;\\\nbackground-image: none;\\\nbackground: #F10;\\\nborder-left: none;\\\npadding-left: 0;\\\ncolor: #000;\\\n}\\\n.ace-chaos .ace_print-margin {\\\nborder-left: 1px solid #555;\\\nright: 0;\\\nbackground: #1D1D1D;\\\n}\\\n.ace-chaos {\\\nbackground-color: #161616;\\\ncolor: #E6E1DC;\\\n}\\\n.ace-chaos .ace_cursor {\\\nborder-left: 2px solid #FFFFFF;\\\n}\\\n.ace-chaos .ace_cursor.ace_overwrite {\\\nborder-left: 0px;\\\nborder-bottom: 1px solid #FFFFFF;\\\n}\\\n.ace-chaos .ace_marker-layer .ace_selection {\\\nbackground: #494836;\\\n}\\\n.ace-chaos .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-chaos .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #FCE94F;\\\n}\\\n.ace-chaos .ace_marker-layer .ace_active-line {\\\nbackground: #333;\\\n}\\\n.ace-chaos .ace_gutter-active-line {\\\nbackground-color: #222;\\\n}\\\n.ace-chaos .ace_invisible {\\\ncolor: #404040;\\\n}\\\n.ace-chaos .ace_keyword {\\\ncolor:#00698F;\\\n}\\\n.ace-chaos .ace_keyword.ace_operator {\\\ncolor:#FF308F;\\\n}\\\n.ace-chaos .ace_constant {\\\ncolor:#1EDAFB;\\\n}\\\n.ace-chaos .ace_constant.ace_language {\\\ncolor:#FDC251;\\\n}\\\n.ace-chaos .ace_constant.ace_library {\\\ncolor:#8DFF0A;\\\n}\\\n.ace-chaos .ace_constant.ace_numeric {\\\ncolor:#58C554;\\\n}\\\n.ace-chaos .ace_invalid {\\\ncolor:#FFFFFF;\\\nbackground-color:#990000;\\\n}\\\n.ace-chaos .ace_invalid.ace_deprecated {\\\ncolor:#FFFFFF;\\\nbackground-color:#990000;\\\n}\\\n.ace-chaos .ace_support {\\\ncolor: #999;\\\n}\\\n.ace-chaos .ace_support.ace_function {\\\ncolor:#00AEEF;\\\n}\\\n.ace-chaos .ace_function {\\\ncolor:#00AEEF;\\\n}\\\n.ace-chaos .ace_string {\\\ncolor:#58C554;\\\n}\\\n.ace-chaos .ace_comment {\\\ncolor:#555;\\\nfont-style:italic;\\\npadding-bottom: 0px;\\\n}\\\n.ace-chaos .ace_variable {\\\ncolor:#997744;\\\n}\\\n.ace-chaos .ace_meta.ace_tag {\\\ncolor:#BE53E6;\\\n}\\\n.ace-chaos .ace_entity.ace_other.ace_attribute-name {\\\ncolor:#FFFF89;\\\n}\\\n.ace-chaos .ace_markup.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace-chaos .ace_fold-widget {\\\ntext-align: center;\\\n}\\\n.ace-chaos .ace_fold-widget:hover {\\\ncolor: #777;\\\n}\\\n.ace-chaos .ace_fold-widget.ace_start,\\\n.ace-chaos .ace_fold-widget.ace_end,\\\n.ace-chaos .ace_fold-widget.ace_closed{\\\nbackground: none;\\\nborder: none;\\\nbox-shadow: none;\\\n}\\\n.ace-chaos .ace_fold-widget.ace_start:after {\\\ncontent: '▾'\\\n}\\\n.ace-chaos .ace_fold-widget.ace_end:after {\\\ncontent: '▴'\\\n}\\\n.ace-chaos .ace_fold-widget.ace_closed:after {\\\ncontent: '‣'\\\n}\\\n.ace-chaos .ace_indent-guide {\\\nborder-right:1px dotted #333;\\\nmargin-right:-1px;\\\n}\\\n.ace-chaos .ace_fold { \\\nbackground: #222; \\\nborder-radius: 3px; \\\ncolor: #7AF; \\\nborder: none; \\\n}\\\n.ace-chaos .ace_fold:hover {\\\nbackground: #CCC; \\\ncolor: #000;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    window.require([\"ace/theme/chaos\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-chrome.js",
    "content": "define(\"ace/theme/chrome\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-chrome\";\nexports.cssText = \".ace-chrome .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333;\\\noverflow : hidden;\\\n}\\\n.ace-chrome .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-chrome {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-chrome .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-chrome .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-chrome .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-chrome .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-chrome .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-chrome .ace_invalid {\\\nbackground-color: rgb(153, 0, 0);\\\ncolor: white;\\\n}\\\n.ace-chrome .ace_fold {\\\n}\\\n.ace-chrome .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-chrome .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-chrome .ace_support.ace_type,\\\n.ace-chrome .ace_support.ace_class\\\n.ace-chrome .ace_support.ace_other {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-chrome .ace_variable.ace_parameter {\\\nfont-style:italic;\\\ncolor:#FD971F;\\\n}\\\n.ace-chrome .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-chrome .ace_comment {\\\ncolor: #236e24;\\\n}\\\n.ace-chrome .ace_comment.ace_doc {\\\ncolor: #236e24;\\\n}\\\n.ace-chrome .ace_comment.ace_doc.ace_tag {\\\ncolor: #236e24;\\\n}\\\n.ace-chrome .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-chrome .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-chrome .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-chrome .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-chrome .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-chrome .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-chrome .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-chrome .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-chrome .ace_storage,\\\n.ace-chrome .ace_keyword,\\\n.ace-chrome .ace_meta.ace_tag {\\\ncolor: rgb(147, 15, 128);\\\n}\\\n.ace-chrome .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-chrome .ace_string {\\\ncolor: #1A1AA6;\\\n}\\\n.ace-chrome .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #994409;\\\n}\\\n.ace-chrome .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/chrome\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-clouds.js",
    "content": "define(\"ace/theme/clouds\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-clouds\";\nexports.cssText = \".ace-clouds .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333\\\n}\\\n.ace-clouds .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-clouds {\\\nbackground-color: #FFFFFF;\\\ncolor: #000000\\\n}\\\n.ace-clouds .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-clouds .ace_marker-layer .ace_selection {\\\nbackground: #BDD5FC\\\n}\\\n.ace-clouds.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-clouds .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-clouds .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #BFBFBF\\\n}\\\n.ace-clouds .ace_marker-layer .ace_active-line {\\\nbackground: #FFFBD1\\\n}\\\n.ace-clouds .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-clouds .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #BDD5FC\\\n}\\\n.ace-clouds .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-clouds .ace_keyword,\\\n.ace-clouds .ace_meta,\\\n.ace-clouds .ace_support.ace_constant.ace_property-value {\\\ncolor: #AF956F\\\n}\\\n.ace-clouds .ace_keyword.ace_operator {\\\ncolor: #484848\\\n}\\\n.ace-clouds .ace_keyword.ace_other.ace_unit {\\\ncolor: #96DC5F\\\n}\\\n.ace-clouds .ace_constant.ace_language {\\\ncolor: #39946A\\\n}\\\n.ace-clouds .ace_constant.ace_numeric {\\\ncolor: #46A609\\\n}\\\n.ace-clouds .ace_constant.ace_character.ace_entity {\\\ncolor: #BF78CC\\\n}\\\n.ace-clouds .ace_invalid {\\\nbackground-color: #FF002A\\\n}\\\n.ace-clouds .ace_fold {\\\nbackground-color: #AF956F;\\\nborder-color: #000000\\\n}\\\n.ace-clouds .ace_storage,\\\n.ace-clouds .ace_support.ace_class,\\\n.ace-clouds .ace_support.ace_function,\\\n.ace-clouds .ace_support.ace_other,\\\n.ace-clouds .ace_support.ace_type {\\\ncolor: #C52727\\\n}\\\n.ace-clouds .ace_string {\\\ncolor: #5D90CD\\\n}\\\n.ace-clouds .ace_comment {\\\ncolor: #BCC8BA\\\n}\\\n.ace-clouds .ace_entity.ace_name.ace_tag,\\\n.ace-clouds .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #606060\\\n}\\\n.ace-clouds .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/clouds\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-clouds_midnight.js",
    "content": "define(\"ace/theme/clouds_midnight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-clouds-midnight\";\nexports.cssText = \".ace-clouds-midnight .ace_gutter {\\\nbackground: #232323;\\\ncolor: #929292\\\n}\\\n.ace-clouds-midnight .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #232323\\\n}\\\n.ace-clouds-midnight {\\\nbackground-color: #191919;\\\ncolor: #929292\\\n}\\\n.ace-clouds-midnight .ace_cursor {\\\ncolor: #7DA5DC\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_selection {\\\nbackground: #000000\\\n}\\\n.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #191919;\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #BFBFBF\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_active-line {\\\nbackground: rgba(215, 215, 215, 0.031)\\\n}\\\n.ace-clouds-midnight .ace_gutter-active-line {\\\nbackground-color: rgba(215, 215, 215, 0.031)\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #000000\\\n}\\\n.ace-clouds-midnight .ace_invisible {\\\ncolor: #666\\\n}\\\n.ace-clouds-midnight .ace_keyword,\\\n.ace-clouds-midnight .ace_meta,\\\n.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {\\\ncolor: #927C5D\\\n}\\\n.ace-clouds-midnight .ace_keyword.ace_operator {\\\ncolor: #4B4B4B\\\n}\\\n.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {\\\ncolor: #366F1A\\\n}\\\n.ace-clouds-midnight .ace_constant.ace_language {\\\ncolor: #39946A\\\n}\\\n.ace-clouds-midnight .ace_constant.ace_numeric {\\\ncolor: #46A609\\\n}\\\n.ace-clouds-midnight .ace_constant.ace_character.ace_entity {\\\ncolor: #A165AC\\\n}\\\n.ace-clouds-midnight .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #E92E2E\\\n}\\\n.ace-clouds-midnight .ace_fold {\\\nbackground-color: #927C5D;\\\nborder-color: #929292\\\n}\\\n.ace-clouds-midnight .ace_storage,\\\n.ace-clouds-midnight .ace_support.ace_class,\\\n.ace-clouds-midnight .ace_support.ace_function,\\\n.ace-clouds-midnight .ace_support.ace_other,\\\n.ace-clouds-midnight .ace_support.ace_type {\\\ncolor: #E92E2E\\\n}\\\n.ace-clouds-midnight .ace_string {\\\ncolor: #5D90CD\\\n}\\\n.ace-clouds-midnight .ace_comment {\\\ncolor: #3C403B\\\n}\\\n.ace-clouds-midnight .ace_entity.ace_name.ace_tag,\\\n.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #606060\\\n}\\\n.ace-clouds-midnight .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/clouds_midnight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-cobalt.js",
    "content": "define(\"ace/theme/cobalt\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-cobalt\";\nexports.cssText = \".ace-cobalt .ace_gutter {\\\nbackground: #011e3a;\\\ncolor: rgb(128,145,160)\\\n}\\\n.ace-cobalt .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555555\\\n}\\\n.ace-cobalt {\\\nbackground-color: #002240;\\\ncolor: #FFFFFF\\\n}\\\n.ace-cobalt .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_selection {\\\nbackground: rgba(179, 101, 57, 0.75)\\\n}\\\n.ace-cobalt.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002240;\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_step {\\\nbackground: rgb(127, 111, 19)\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.15)\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.35)\\\n}\\\n.ace-cobalt .ace_gutter-active-line {\\\nbackground-color: rgba(0, 0, 0, 0.35)\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(179, 101, 57, 0.75)\\\n}\\\n.ace-cobalt .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.15)\\\n}\\\n.ace-cobalt .ace_keyword,\\\n.ace-cobalt .ace_meta {\\\ncolor: #FF9D00\\\n}\\\n.ace-cobalt .ace_constant,\\\n.ace-cobalt .ace_constant.ace_character,\\\n.ace-cobalt .ace_constant.ace_character.ace_escape,\\\n.ace-cobalt .ace_constant.ace_other {\\\ncolor: #FF628C\\\n}\\\n.ace-cobalt .ace_invalid {\\\ncolor: #F8F8F8;\\\nbackground-color: #800F00\\\n}\\\n.ace-cobalt .ace_support {\\\ncolor: #80FFBB\\\n}\\\n.ace-cobalt .ace_support.ace_constant {\\\ncolor: #EB939A\\\n}\\\n.ace-cobalt .ace_fold {\\\nbackground-color: #FF9D00;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-cobalt .ace_support.ace_function {\\\ncolor: #FFB054\\\n}\\\n.ace-cobalt .ace_storage {\\\ncolor: #FFEE80\\\n}\\\n.ace-cobalt .ace_entity {\\\ncolor: #FFDD00\\\n}\\\n.ace-cobalt .ace_string {\\\ncolor: #3AD900\\\n}\\\n.ace-cobalt .ace_string.ace_regexp {\\\ncolor: #80FFC2\\\n}\\\n.ace-cobalt .ace_comment {\\\nfont-style: italic;\\\ncolor: #0088FF\\\n}\\\n.ace-cobalt .ace_heading,\\\n.ace-cobalt .ace_markup.ace_heading {\\\ncolor: #C8E4FD;\\\nbackground-color: #001221\\\n}\\\n.ace-cobalt .ace_list,\\\n.ace-cobalt .ace_markup.ace_list {\\\nbackground-color: #130D26\\\n}\\\n.ace-cobalt .ace_variable {\\\ncolor: #CCCCCC\\\n}\\\n.ace-cobalt .ace_variable.ace_language {\\\ncolor: #FF80E1\\\n}\\\n.ace-cobalt .ace_meta.ace_tag {\\\ncolor: #9EFFFF\\\n}\\\n.ace-cobalt .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/cobalt\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-crimson_editor.js",
    "content": "define(\"ace/theme/crimson_editor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\nexports.isDark = false;\nexports.cssText = \".ace-crimson-editor .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333;\\\noverflow : hidden;\\\n}\\\n.ace-crimson-editor .ace_gutter-layer {\\\nwidth: 100%;\\\ntext-align: right;\\\n}\\\n.ace-crimson-editor .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-crimson-editor {\\\nbackground-color: #FFFFFF;\\\ncolor: rgb(64, 64, 64);\\\n}\\\n.ace-crimson-editor .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-crimson-editor .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-crimson-editor .ace_identifier {\\\ncolor: black;\\\n}\\\n.ace-crimson-editor .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-crimson-editor .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-crimson-editor .ace_constant.ace_language {\\\ncolor: rgb(255, 156, 0);\\\n}\\\n.ace-crimson-editor .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-crimson-editor .ace_invalid {\\\ntext-decoration: line-through;\\\ncolor: rgb(224, 0, 0);\\\n}\\\n.ace-crimson-editor .ace_fold {\\\n}\\\n.ace-crimson-editor .ace_support.ace_function {\\\ncolor: rgb(192, 0, 0);\\\n}\\\n.ace-crimson-editor .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-crimson-editor .ace_support.ace_type,\\\n.ace-crimson-editor .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-crimson-editor .ace_keyword.ace_operator {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-crimson-editor .ace_string {\\\ncolor: rgb(128, 0, 128);\\\n}\\\n.ace-crimson-editor .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-crimson-editor .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-crimson-editor .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-crimson-editor .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 64);\\\n}\\\n.ace-crimson-editor .ace_variable {\\\ncolor: rgb(0, 64, 128);\\\n}\\\n.ace-crimson-editor .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_active-line {\\\nbackground: rgb(232, 242, 254);\\\n}\\\n.ace-crimson-editor .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-crimson-editor .ace_meta.ace_tag {\\\ncolor:rgb(28, 2, 255);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-crimson-editor .ace_string.ace_regex {\\\ncolor: rgb(192, 0, 192);\\\n}\\\n.ace-crimson-editor .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\nexports.cssClass = \"ace-crimson-editor\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/crimson_editor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-dawn.js",
    "content": "define(\"ace/theme/dawn\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-dawn\";\nexports.cssText = \".ace-dawn .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333\\\n}\\\n.ace-dawn .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-dawn {\\\nbackground-color: #F9F9F9;\\\ncolor: #080808\\\n}\\\n.ace-dawn .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-dawn .ace_marker-layer .ace_selection {\\\nbackground: rgba(39, 95, 255, 0.30)\\\n}\\\n.ace-dawn.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #F9F9F9;\\\n}\\\n.ace-dawn .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-dawn .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(75, 75, 126, 0.50)\\\n}\\\n.ace-dawn .ace_marker-layer .ace_active-line {\\\nbackground: rgba(36, 99, 180, 0.12)\\\n}\\\n.ace-dawn .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-dawn .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(39, 95, 255, 0.30)\\\n}\\\n.ace-dawn .ace_invisible {\\\ncolor: rgba(75, 75, 126, 0.50)\\\n}\\\n.ace-dawn .ace_keyword,\\\n.ace-dawn .ace_meta {\\\ncolor: #794938\\\n}\\\n.ace-dawn .ace_constant,\\\n.ace-dawn .ace_constant.ace_character,\\\n.ace-dawn .ace_constant.ace_character.ace_escape,\\\n.ace-dawn .ace_constant.ace_other {\\\ncolor: #811F24\\\n}\\\n.ace-dawn .ace_invalid.ace_illegal {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #F8F8F8;\\\nbackground-color: #B52A1D\\\n}\\\n.ace-dawn .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #B52A1D\\\n}\\\n.ace-dawn .ace_support {\\\ncolor: #691C97\\\n}\\\n.ace-dawn .ace_support.ace_constant {\\\ncolor: #B4371F\\\n}\\\n.ace-dawn .ace_fold {\\\nbackground-color: #794938;\\\nborder-color: #080808\\\n}\\\n.ace-dawn .ace_list,\\\n.ace-dawn .ace_markup.ace_list,\\\n.ace-dawn .ace_support.ace_function {\\\ncolor: #693A17\\\n}\\\n.ace-dawn .ace_storage {\\\nfont-style: italic;\\\ncolor: #A71D5D\\\n}\\\n.ace-dawn .ace_string {\\\ncolor: #0B6125\\\n}\\\n.ace-dawn .ace_string.ace_regexp {\\\ncolor: #CF5628\\\n}\\\n.ace-dawn .ace_comment {\\\nfont-style: italic;\\\ncolor: #5A525F\\\n}\\\n.ace-dawn .ace_heading,\\\n.ace-dawn .ace_markup.ace_heading {\\\ncolor: #19356D\\\n}\\\n.ace-dawn .ace_variable {\\\ncolor: #234A97\\\n}\\\n.ace-dawn .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/dawn\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-dracula.js",
    "content": "define(\"ace/theme/dracula\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-dracula\";\nexports.cssText = \"\\\n.ace-dracula .ace_gutter {\\\nbackground: #282a36;\\\ncolor: rgb(144,145,148)\\\n}\\\n.ace-dracula .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #44475a\\\n}\\\n.ace-dracula {\\\nbackground-color: #282a36;\\\ncolor: #f8f8f2\\\n}\\\n.ace-dracula .ace_cursor {\\\ncolor: #f8f8f0\\\n}\\\n.ace-dracula .ace_marker-layer .ace_selection {\\\nbackground: #44475a\\\n}\\\n.ace-dracula.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #282a36;\\\nborder-radius: 2px\\\n}\\\n.ace-dracula .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174)\\\n}\\\n.ace-dracula .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #a29709\\\n}\\\n.ace-dracula .ace_marker-layer .ace_active-line {\\\nbackground: #44475a\\\n}\\\n.ace-dracula .ace_gutter-active-line {\\\nbackground-color: #44475a\\\n}\\\n.ace-dracula .ace_marker-layer .ace_selected-word {\\\nbox-shadow: 0px 0px 0px 1px #a29709;\\\nborder-radius: 3px;\\\n}\\\n.ace-dracula .ace_fold {\\\nbackground-color: #50fa7b;\\\nborder-color: #f8f8f2\\\n}\\\n.ace-dracula .ace_keyword {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_constant.ace_language {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_constant.ace_numeric {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_constant.ace_character {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_constant.ace_character.ace_escape {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_constant.ace_other {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_support.ace_function {\\\ncolor: #8be9fd\\\n}\\\n.ace-dracula .ace_support.ace_constant {\\\ncolor: #6be5fd\\\n}\\\n.ace-dracula .ace_support.ace_class {\\\nfont-style: italic;\\\ncolor: #66d9ef\\\n}\\\n.ace-dracula .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66d9ef\\\n}\\\n.ace-dracula .ace_storage {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_storage.ace_type {\\\nfont-style: italic;\\\ncolor: #8be9fd\\\n}\\\n.ace-dracula .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #ff79c6\\\n}\\\n.ace-dracula .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #bd93f9\\\n}\\\n.ace-dracula .ace_string {\\\ncolor: #f1fa8c\\\n}\\\n.ace-dracula .ace_comment {\\\ncolor: #6272a4\\\n}\\\n.ace-dracula .ace_variable {\\\ncolor: #50fa7b\\\n}\\\n.ace-dracula .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #ffb86c\\\n}\\\n.ace-dracula .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #50fa7b\\\n}\\\n.ace-dracula .ace_entity.ace_name.ace_function {\\\ncolor: #50fa7b\\\n}\\\n.ace-dracula .ace_entity.ace_name.ace_tag {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_invisible {\\\ncolor: #626680;\\\n}\\\n.ace-dracula .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\nexports.$selectionColorConflict = true;\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/dracula\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-dreamweaver.js",
    "content": "define(\"ace/theme/dreamweaver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\nexports.isDark = false;\nexports.cssClass = \"ace-dreamweaver\";\nexports.cssText = \".ace-dreamweaver .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333;\\\n}\\\n.ace-dreamweaver .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-dreamweaver {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-dreamweaver .ace_fold {\\\nbackground-color: #757AD8;\\\n}\\\n.ace-dreamweaver .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-dreamweaver .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-dreamweaver .ace_storage,\\\n.ace-dreamweaver .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-dreamweaver .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-dreamweaver .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-dreamweaver .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-dreamweaver .ace_invalid {\\\nbackground-color: rgb(153, 0, 0);\\\ncolor: white;\\\n}\\\n.ace-dreamweaver .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-dreamweaver .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-dreamweaver .ace_support.ace_type,\\\n.ace-dreamweaver .ace_support.ace_class {\\\ncolor: #009;\\\n}\\\n.ace-dreamweaver .ace_support.ace_php_tag {\\\ncolor: #f00;\\\n}\\\n.ace-dreamweaver .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-dreamweaver .ace_string {\\\ncolor: #00F;\\\n}\\\n.ace-dreamweaver .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-dreamweaver .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-dreamweaver .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-dreamweaver .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-dreamweaver .ace_variable {\\\ncolor: #06F\\\n}\\\n.ace-dreamweaver .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-dreamweaver .ace_entity.ace_name.ace_function {\\\ncolor: #00F;\\\n}\\\n.ace-dreamweaver .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-dreamweaver .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-dreamweaver .ace_gutter-active-line {\\\nbackground-color : #DCDCDC;\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag {\\\ncolor:#009;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\\\ncolor:#060;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_form {\\\ncolor:#F90;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_image {\\\ncolor:#909;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_script {\\\ncolor:#900;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_style {\\\ncolor:#909;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_table {\\\ncolor:#099;\\\n}\\\n.ace-dreamweaver .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-dreamweaver .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/dreamweaver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-eclipse.js",
    "content": "define(\"ace/theme/eclipse\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssText = \".ace-eclipse .ace_gutter {\\\nbackground: #ebebeb;\\\nborder-right: 1px solid rgb(159, 159, 159);\\\ncolor: rgb(136, 136, 136);\\\n}\\\n.ace-eclipse .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #ebebeb;\\\n}\\\n.ace-eclipse {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-eclipse .ace_fold {\\\nbackground-color: rgb(60, 76, 114);\\\n}\\\n.ace-eclipse .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-eclipse .ace_storage,\\\n.ace-eclipse .ace_keyword,\\\n.ace-eclipse .ace_variable {\\\ncolor: rgb(127, 0, 85);\\\n}\\\n.ace-eclipse .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-eclipse .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-eclipse .ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-eclipse .ace_string {\\\ncolor: rgb(42, 0, 255);\\\n}\\\n.ace-eclipse .ace_comment {\\\ncolor: rgb(113, 150, 130);\\\n}\\\n.ace-eclipse .ace_comment.ace_doc {\\\ncolor: rgb(63, 95, 191);\\\n}\\\n.ace-eclipse .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(127, 159, 191);\\\n}\\\n.ace-eclipse .ace_constant.ace_numeric {\\\ncolor: darkblue;\\\n}\\\n.ace-eclipse .ace_tag {\\\ncolor: rgb(25, 118, 116);\\\n}\\\n.ace-eclipse .ace_type {\\\ncolor: rgb(127, 0, 127);\\\n}\\\n.ace-eclipse .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-eclipse .ace_meta.ace_tag {\\\ncolor:rgb(25, 118, 116);\\\n}\\\n.ace-eclipse .ace_invisible {\\\ncolor: #ddd;\\\n}\\\n.ace-eclipse .ace_entity.ace_other.ace_attribute-name {\\\ncolor:rgb(127, 0, 127);\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0);\\\n}\\\n.ace-eclipse .ace_active-line {\\\nbackground: rgb(232, 242, 254);\\\n}\\\n.ace-eclipse .ace_gutter-active-line {\\\nbackground-color : #DADADA;\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgb(181, 213, 255);\\\n}\\\n.ace-eclipse .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\nexports.cssClass = \"ace-eclipse\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/eclipse\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-github.js",
    "content": "define(\"ace/theme/github\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-github\";\nexports.cssText = \"\\\n.ace-github .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #AAA;\\\n}\\\n.ace-github  {\\\nbackground: #fff;\\\ncolor: #000;\\\n}\\\n.ace-github .ace_keyword {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_string {\\\ncolor: #D14;\\\n}\\\n.ace-github .ace_variable.ace_class {\\\ncolor: teal;\\\n}\\\n.ace-github .ace_constant.ace_numeric {\\\ncolor: #099;\\\n}\\\n.ace-github .ace_constant.ace_buildin {\\\ncolor: #0086B3;\\\n}\\\n.ace-github .ace_support.ace_function {\\\ncolor: #0086B3;\\\n}\\\n.ace-github .ace_comment {\\\ncolor: #998;\\\nfont-style: italic;\\\n}\\\n.ace-github .ace_variable.ace_language  {\\\ncolor: #0086B3;\\\n}\\\n.ace-github .ace_paren {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_boolean {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_string.ace_regexp {\\\ncolor: #009926;\\\nfont-weight: normal;\\\n}\\\n.ace-github .ace_variable.ace_instance {\\\ncolor: teal;\\\n}\\\n.ace-github .ace_constant.ace_language {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-github.ace_focus .ace_marker-layer .ace_active-line {\\\nbackground: rgb(255, 255, 204);\\\n}\\\n.ace-github .ace_marker-layer .ace_active-line {\\\nbackground: rgb(245, 245, 245);\\\n}\\\n.ace-github .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-github.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-github.ace_nobold .ace_line > span {\\\nfont-weight: normal !important;\\\n}\\\n.ace-github .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-github .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-github .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-github .ace_gutter-active-line {\\\nbackground-color : rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-github .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-github .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-github .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-github .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\n    var dom = require(\"../lib/dom\");\n    dom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/github\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-gob.js",
    "content": "define(\"ace/theme/gob\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-gob\";\nexports.cssText = \".ace-gob .ace_gutter {\\\nbackground: #0B1818;\\\ncolor: #03EE03\\\n}\\\n.ace-gob .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #131313\\\n}\\\n.ace-gob {\\\nbackground-color: #0B0B0B;\\\ncolor: #00FF00\\\n}\\\n.ace-gob .ace_cursor {\\\nborder-color: rgba(16, 248, 255, 0.90);\\\nbackground-color: rgba(16, 240, 248, 0.70);\\\nopacity: 0.4;\\\n}\\\n.ace-gob .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-gob.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #141414;\\\n}\\\n.ace-gob .ace_marker-layer .ace_step {\\\nbackground: rgb(16, 128, 0)\\\n}\\\n.ace-gob .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(64, 255, 255, 0.25)\\\n}\\\n.ace-gob .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.04)\\\n}\\\n.ace-gob .ace_gutter-active-line {\\\nbackground-color: rgba(255, 255, 255, 0.04)\\\n}\\\n.ace-gob .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(192, 240, 255, 0.20)\\\n}\\\n.ace-gob .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-gob .ace_keyword,\\\n.ace-gob .ace_meta {\\\ncolor: #10D8E8\\\n}\\\n.ace-gob .ace_constant,\\\n.ace-gob .ace_constant.ace_character,\\\n.ace-gob .ace_constant.ace_character.ace_escape,\\\n.ace-gob .ace_constant.ace_other,\\\n.ace-gob .ace_heading,\\\n.ace-gob .ace_markup.ace_heading,\\\n.ace-gob .ace_support.ace_constant {\\\ncolor: #10F0A0\\\n}\\\n.ace-gob .ace_invalid.ace_illegal {\\\ncolor: #F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75)\\\n}\\\n.ace-gob .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #20F8C0\\\n}\\\n.ace-gob .ace_support {\\\ncolor: #20E8B0\\\n}\\\n.ace-gob .ace_fold {\\\nbackground-color: #50B8B8;\\\nborder-color: #70F8F8\\\n}\\\n.ace-gob .ace_support.ace_function {\\\ncolor: #00F800\\\n}\\\n.ace-gob .ace_list,\\\n.ace-gob .ace_markup.ace_list,\\\n.ace-gob .ace_storage {\\\ncolor: #10FF98\\\n}\\\n.ace-gob .ace_entity.ace_name.ace_function,\\\n.ace-gob .ace_meta.ace_tag,\\\n.ace-gob .ace_variable {\\\ncolor: #00F868\\\n}\\\n.ace-gob .ace_string {\\\ncolor: #10F060\\\n}\\\n.ace-gob .ace_string.ace_regexp {\\\ncolor: #20F090;\\\n}\\\n.ace-gob .ace_comment {\\\nfont-style: italic;\\\ncolor: #00E060;\\\n}\\\n.ace-gob .ace_variable {\\\ncolor: #00F888;\\\n}\\\n.ace-gob .ace_xml-pe {\\\ncolor: #488858;\\\n}\\\n.ace-gob .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/gob\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-gruvbox.js",
    "content": "define(\"ace/theme/gruvbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-gruvbox\";\nexports.cssText = \".ace-gruvbox .ace_gutter-active-line {\\\nbackground-color: #3C3836;\\\n}\\\n.ace-gruvbox {\\\ncolor: #EBDAB4;\\\nbackground-color: #1D2021;\\\n}\\\n.ace-gruvbox .ace_invisible {\\\ncolor: #504945;\\\n}\\\n.ace-gruvbox .ace_marker-layer .ace_selection {\\\nbackground: rgba(179, 101, 57, 0.75)\\\n}\\\n.ace-gruvbox.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002240;\\\n}\\\n.ace-gruvbox .ace_keyword {\\\ncolor: #8ec07c;\\\n}\\\n.ace-gruvbox .ace_comment {\\\nfont-style: italic;\\\ncolor: #928375;\\\n}\\\n.ace-gruvbox .ace-statement {\\\ncolor: red;\\\n}\\\n.ace-gruvbox .ace_variable {\\\ncolor: #84A598;\\\n}\\\n.ace-gruvbox .ace_variable.ace_language {\\\ncolor: #D2879B;\\\n}\\\n.ace-gruvbox .ace_constant {\\\ncolor: #C2859A;\\\n}\\\n.ace-gruvbox .ace_constant.ace_language {\\\ncolor: #C2859A;\\\n}\\\n.ace-gruvbox .ace_constant.ace_numeric {\\\ncolor: #C2859A;\\\n}\\\n.ace-gruvbox .ace_string {\\\ncolor: #B8BA37;\\\n}\\\n.ace-gruvbox .ace_support {\\\ncolor: #F9BC41;\\\n}\\\n.ace-gruvbox .ace_support.ace_function {\\\ncolor: #F84B3C;\\\n}\\\n.ace-gruvbox .ace_storage {\\\ncolor: #8FBF7F;\\\n}\\\n.ace-gruvbox .ace_keyword.ace_operator {\\\ncolor: #EBDAB4;\\\n}\\\n.ace-gruvbox .ace_punctuation.ace_operator {\\\ncolor: yellow;\\\n}\\\n.ace-gruvbox .ace_marker-layer .ace_active-line {\\\nbackground: #3C3836;\\\n}\\\n.ace-gruvbox .ace_marker-layer .ace_selected-word {\\\nborder-radius: 4px;\\\nborder: 8px solid #3f475d;\\\n}\\\n.ace-gruvbox .ace_print-margin {\\\nwidth: 5px;\\\nbackground: #3C3836;\\\n}\\\n.ace-gruvbox .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    window.require([\"ace/theme/gruvbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-idle_fingers.js",
    "content": "define(\"ace/theme/idle_fingers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-idle-fingers\";\nexports.cssText = \".ace-idle-fingers .ace_gutter {\\\nbackground: #3b3b3b;\\\ncolor: rgb(153,153,153)\\\n}\\\n.ace-idle-fingers .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #3b3b3b\\\n}\\\n.ace-idle-fingers {\\\nbackground-color: #323232;\\\ncolor: #FFFFFF\\\n}\\\n.ace-idle-fingers .ace_cursor {\\\ncolor: #91FF00\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_selection {\\\nbackground: rgba(90, 100, 126, 0.88)\\\n}\\\n.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #323232;\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_active-line {\\\nbackground: #353637\\\n}\\\n.ace-idle-fingers .ace_gutter-active-line {\\\nbackground-color: #353637\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(90, 100, 126, 0.88)\\\n}\\\n.ace-idle-fingers .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-idle-fingers .ace_keyword,\\\n.ace-idle-fingers .ace_meta {\\\ncolor: #CC7833\\\n}\\\n.ace-idle-fingers .ace_constant,\\\n.ace-idle-fingers .ace_constant.ace_character,\\\n.ace-idle-fingers .ace_constant.ace_character.ace_escape,\\\n.ace-idle-fingers .ace_constant.ace_other,\\\n.ace-idle-fingers .ace_support.ace_constant {\\\ncolor: #6C99BB\\\n}\\\n.ace-idle-fingers .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #FF0000\\\n}\\\n.ace-idle-fingers .ace_fold {\\\nbackground-color: #CC7833;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-idle-fingers .ace_support.ace_function {\\\ncolor: #B83426\\\n}\\\n.ace-idle-fingers .ace_variable.ace_parameter {\\\nfont-style: italic\\\n}\\\n.ace-idle-fingers .ace_string {\\\ncolor: #A5C261\\\n}\\\n.ace-idle-fingers .ace_string.ace_regexp {\\\ncolor: #CCCC33\\\n}\\\n.ace-idle-fingers .ace_comment {\\\nfont-style: italic;\\\ncolor: #BC9458\\\n}\\\n.ace-idle-fingers .ace_meta.ace_tag {\\\ncolor: #FFE5BB\\\n}\\\n.ace-idle-fingers .ace_entity.ace_name {\\\ncolor: #FFC66D\\\n}\\\n.ace-idle-fingers .ace_collab.ace_user1 {\\\ncolor: #323232;\\\nbackground-color: #FFF980\\\n}\\\n.ace-idle-fingers .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/idle_fingers\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-iplastic.js",
    "content": "define(\"ace/theme/iplastic\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-iplastic\";\nexports.cssText = \".ace-iplastic .ace_gutter {\\\nbackground: #dddddd;\\\ncolor: #666666\\\n}\\\n.ace-iplastic .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #bbbbbb\\\n}\\\n.ace-iplastic {\\\nbackground-color: #eeeeee;\\\ncolor: #333333\\\n}\\\n.ace-iplastic .ace_cursor {\\\ncolor: #333\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_selection {\\\nbackground: #BAD6FD;\\\n}\\\n.ace-iplastic.ace_multiselect .ace_selection.ace_start {\\\nborder-radius: 4px\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_step {\\\nbackground: #444444\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E;\\\nbackground: #FFF799\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_active-line {\\\nbackground: #e5e5e5\\\n}\\\n.ace-iplastic .ace_gutter-active-line {\\\nbackground-color: #eeeeee\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #555555;\\\nborder-radius:4px\\\n}\\\n.ace-iplastic .ace_invisible {\\\ncolor: #999999\\\n}\\\n.ace-iplastic .ace_entity.ace_name.ace_tag,\\\n.ace-iplastic .ace_keyword,\\\n.ace-iplastic .ace_meta.ace_tag,\\\n.ace-iplastic .ace_storage {\\\ncolor: #0000FF\\\n}\\\n.ace-iplastic .ace_punctuation,\\\n.ace-iplastic .ace_punctuation.ace_tag {\\\ncolor: #000\\\n}\\\n.ace-iplastic .ace_constant {\\\ncolor: #333333;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_constant.ace_character,\\\n.ace-iplastic .ace_constant.ace_language,\\\n.ace-iplastic .ace_constant.ace_numeric,\\\n.ace-iplastic .ace_constant.ace_other {\\\ncolor: #0066FF;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_constant.ace_numeric{\\\nfont-weight: 100\\\n}\\\n.ace-iplastic .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-iplastic .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-iplastic .ace_support.ace_constant,\\\n.ace-iplastic .ace_support.ace_function {\\\ncolor: #333333;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_fold {\\\nbackground-color: #464646;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-iplastic .ace_storage.ace_type,\\\n.ace-iplastic .ace_support.ace_class,\\\n.ace-iplastic .ace_support.ace_type {\\\ncolor: #3333fc;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_entity.ace_name.ace_function,\\\n.ace-iplastic .ace_entity.ace_other,\\\n.ace-iplastic .ace_entity.ace_other.ace_attribute-name,\\\n.ace-iplastic .ace_variable {\\\ncolor: #3366cc;\\\nfont-style: italic\\\n}\\\n.ace-iplastic .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #2469E0\\\n}\\\n.ace-iplastic .ace_string {\\\ncolor: #a55f03\\\n}\\\n.ace-iplastic .ace_comment {\\\ncolor: #777777;\\\nfont-style: italic\\\n}\\\n.ace-iplastic .ace_fold-widget {\\\nbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);\\\n}\\\n.ace-iplastic .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAABlJREFUeNpi+P//PwMzMzPzfwAAAAD//wMAGRsECSML/RIAAAAASUVORK5CYII=) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/iplastic\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-katzenmilch.js",
    "content": "define(\"ace/theme/katzenmilch\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-katzenmilch\";\nexports.cssText = \".ace-katzenmilch .ace_gutter,\\\n.ace-katzenmilch .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333\\\n}\\\n.ace-katzenmilch .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-katzenmilch {\\\nbackground-color: #f3f2f3;\\\ncolor: rgba(15, 0, 9, 1.0)\\\n}\\\n.ace-katzenmilch .ace_cursor {\\\nborder-left: 2px solid #100011\\\n}\\\n.ace-katzenmilch .ace_overwrite-cursors .ace_cursor {\\\nborder-left: 0px;\\\nborder-bottom: 1px solid #100011\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_selection {\\\nbackground: rgba(100, 5, 208, 0.27)\\\n}\\\n.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #f3f2f3;\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174)\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(0, 0, 0, 0.33);\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_active-line {\\\nbackground: rgb(232, 242, 254)\\\n}\\\n.ace-katzenmilch .ace_gutter-active-line {\\\nbackground-color: rgb(232, 242, 254)\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(100, 5, 208, 0.27)\\\n}\\\n.ace-katzenmilch .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-katzenmilch .ace_fold {\\\nbackground-color: rgba(2, 95, 73, 0.97);\\\nborder-color: rgba(15, 0, 9, 1.0)\\\n}\\\n.ace-katzenmilch .ace_keyword {\\\ncolor: #674Aa8;\\\nrbackground-color: rgba(163, 170, 216, 0.055)\\\n}\\\n.ace-katzenmilch .ace_constant.ace_language {\\\ncolor: #7D7e52;\\\nrbackground-color: rgba(189, 190, 130, 0.059)\\\n}\\\n.ace-katzenmilch .ace_constant.ace_numeric {\\\ncolor: rgba(79, 130, 123, 0.93);\\\nrbackground-color: rgba(119, 194, 187, 0.059)\\\n}\\\n.ace-katzenmilch .ace_constant.ace_character,\\\n.ace-katzenmilch .ace_constant.ace_other {\\\ncolor: rgba(2, 95, 105, 1.0);\\\nrbackground-color: rgba(127, 34, 153, 0.063)\\\n}\\\n.ace-katzenmilch .ace_support.ace_function {\\\ncolor: #9D7e62;\\\nrbackground-color: rgba(189, 190, 130, 0.039)\\\n}\\\n.ace-katzenmilch .ace_support.ace_class {\\\ncolor: rgba(239, 106, 167, 1.0);\\\nrbackground-color: rgba(239, 106, 167, 0.063)\\\n}\\\n.ace-katzenmilch .ace_storage {\\\ncolor: rgba(123, 92, 191, 1.0);\\\nrbackground-color: rgba(139, 93, 223, 0.051)\\\n}\\\n.ace-katzenmilch .ace_invalid {\\\ncolor: #DFDFD5;\\\nrbackground-color: #CC1B27\\\n}\\\n.ace-katzenmilch .ace_string {\\\ncolor: #5a5f9b;\\\nrbackground-color: rgba(170, 175, 219, 0.035)\\\n}\\\n.ace-katzenmilch .ace_comment {\\\nfont-style: italic;\\\ncolor: rgba(64, 79, 80, 0.67);\\\nrbackground-color: rgba(95, 15, 255, 0.0078)\\\n}\\\n.ace-katzenmilch .ace_entity.ace_name.ace_function,\\\n.ace-katzenmilch .ace_variable {\\\ncolor: rgba(2, 95, 73, 0.97);\\\nrbackground-color: rgba(34, 255, 73, 0.12)\\\n}\\\n.ace-katzenmilch .ace_variable.ace_language {\\\ncolor: #316fcf;\\\nrbackground-color: rgba(58, 175, 255, 0.039)\\\n}\\\n.ace-katzenmilch .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: rgba(51, 150, 159, 0.87);\\\nrbackground-color: rgba(5, 214, 249, 0.043)\\\n}\\\n.ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {\\\ncolor: rgba(73, 70, 194, 0.93);\\\nrbackground-color: rgba(73, 134, 194, 0.035)\\\n}\\\n.ace-katzenmilch .ace_entity.ace_name.ace_tag {\\\ncolor: #3976a2;\\\nrbackground-color: rgba(73, 166, 210, 0.039)\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/katzenmilch\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-kr_theme.js",
    "content": "define(\"ace/theme/kr_theme\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-kr-theme\";\nexports.cssText = \".ace-kr-theme .ace_gutter {\\\nbackground: #1c1917;\\\ncolor: #FCFFE0\\\n}\\\n.ace-kr-theme .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1c1917\\\n}\\\n.ace-kr-theme {\\\nbackground-color: #0B0A09;\\\ncolor: #FCFFE0\\\n}\\\n.ace-kr-theme .ace_cursor {\\\ncolor: #FF9900\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_selection {\\\nbackground: rgba(170, 0, 255, 0.45)\\\n}\\\n.ace-kr-theme.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #0B0A09;\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 177, 111, 0.32)\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_active-line {\\\nbackground: #38403D\\\n}\\\n.ace-kr-theme .ace_gutter-active-line {\\\nbackground-color : #38403D\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(170, 0, 255, 0.45)\\\n}\\\n.ace-kr-theme .ace_invisible {\\\ncolor: rgba(255, 177, 111, 0.32)\\\n}\\\n.ace-kr-theme .ace_keyword,\\\n.ace-kr-theme .ace_meta {\\\ncolor: #949C8B\\\n}\\\n.ace-kr-theme .ace_constant,\\\n.ace-kr-theme .ace_constant.ace_character,\\\n.ace-kr-theme .ace_constant.ace_character.ace_escape,\\\n.ace-kr-theme .ace_constant.ace_other {\\\ncolor: rgba(210, 117, 24, 0.76)\\\n}\\\n.ace-kr-theme .ace_invalid {\\\ncolor: #F8F8F8;\\\nbackground-color: #A41300\\\n}\\\n.ace-kr-theme .ace_support {\\\ncolor: #9FC28A\\\n}\\\n.ace-kr-theme .ace_support.ace_constant {\\\ncolor: #C27E66\\\n}\\\n.ace-kr-theme .ace_fold {\\\nbackground-color: #949C8B;\\\nborder-color: #FCFFE0\\\n}\\\n.ace-kr-theme .ace_support.ace_function {\\\ncolor: #85873A\\\n}\\\n.ace-kr-theme .ace_storage {\\\ncolor: #FFEE80\\\n}\\\n.ace-kr-theme .ace_string {\\\ncolor: rgba(164, 161, 181, 0.8)\\\n}\\\n.ace-kr-theme .ace_string.ace_regexp {\\\ncolor: rgba(125, 255, 192, 0.65)\\\n}\\\n.ace-kr-theme .ace_comment {\\\nfont-style: italic;\\\ncolor: #706D5B\\\n}\\\n.ace-kr-theme .ace_variable {\\\ncolor: #D1A796\\\n}\\\n.ace-kr-theme .ace_list,\\\n.ace-kr-theme .ace_markup.ace_list {\\\nbackground-color: #0F0040\\\n}\\\n.ace-kr-theme .ace_variable.ace_language {\\\ncolor: #FF80E1\\\n}\\\n.ace-kr-theme .ace_meta.ace_tag {\\\ncolor: #BABD9C\\\n}\\\n.ace-kr-theme .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/kr_theme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-kuroir.js",
    "content": "define(\"ace/theme/kuroir\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-kuroir\";\nexports.cssText = \"\\\n.ace-kuroir .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333;\\\n}\\\n.ace-kuroir .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-kuroir {\\\nbackground-color: #E8E9E8;\\\ncolor: #363636;\\\n}\\\n.ace-kuroir .ace_cursor {\\\ncolor: #202020;\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_selection {\\\nbackground: rgba(245, 170, 0, 0.57);\\\n}\\\n.ace-kuroir.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #E8E9E8;\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(0, 0, 0, 0.29);\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_active-line {\\\nbackground: rgba(203, 220, 47, 0.22);\\\n}\\\n.ace-kuroir .ace_gutter-active-line {\\\nbackground-color: rgba(203, 220, 47, 0.22);\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(245, 170, 0, 0.57);\\\n}\\\n.ace-kuroir .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-kuroir .ace_fold {\\\nborder-color: #363636;\\\n}\\\n.ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;\\\nbackground-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;\\\nfont-style:italic;\\\ncolor:#FD1732;\\\nbackground-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;\\\nbackground-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);\\\nbackground-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;\\\nbackground-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/kuroir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-merbivore.js",
    "content": "define(\"ace/theme/merbivore\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-merbivore\";\nexports.cssText = \".ace-merbivore .ace_gutter {\\\nbackground: #202020;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-merbivore {\\\nbackground-color: #161616;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_selection {\\\nbackground: #454545\\\n}\\\n.ace-merbivore.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #161616;\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_active-line {\\\nbackground: #333435\\\n}\\\n.ace-merbivore .ace_gutter-active-line {\\\nbackground-color: #333435\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #454545\\\n}\\\n.ace-merbivore .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-merbivore .ace_entity.ace_name.ace_tag,\\\n.ace-merbivore .ace_keyword,\\\n.ace-merbivore .ace_meta,\\\n.ace-merbivore .ace_meta.ace_tag,\\\n.ace-merbivore .ace_storage,\\\n.ace-merbivore .ace_support.ace_function {\\\ncolor: #FC6F09\\\n}\\\n.ace-merbivore .ace_constant,\\\n.ace-merbivore .ace_constant.ace_character,\\\n.ace-merbivore .ace_constant.ace_character.ace_escape,\\\n.ace-merbivore .ace_constant.ace_other,\\\n.ace-merbivore .ace_support.ace_type {\\\ncolor: #1EDAFB\\\n}\\\n.ace-merbivore .ace_constant.ace_character.ace_escape {\\\ncolor: #519F50\\\n}\\\n.ace-merbivore .ace_constant.ace_language {\\\ncolor: #FDC251\\\n}\\\n.ace-merbivore .ace_constant.ace_library,\\\n.ace-merbivore .ace_string,\\\n.ace-merbivore .ace_support.ace_constant {\\\ncolor: #8DFF0A\\\n}\\\n.ace-merbivore .ace_constant.ace_numeric {\\\ncolor: #58C554\\\n}\\\n.ace-merbivore .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #990000\\\n}\\\n.ace-merbivore .ace_fold {\\\nbackground-color: #FC6F09;\\\nborder-color: #E6E1DC\\\n}\\\n.ace-merbivore .ace_comment {\\\nfont-style: italic;\\\ncolor: #AD2EA4\\\n}\\\n.ace-merbivore .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #FFFF89\\\n}\\\n.ace-merbivore .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/merbivore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-merbivore_soft.js",
    "content": "define(\"ace/theme/merbivore_soft\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-merbivore-soft\";\nexports.cssText = \".ace-merbivore-soft .ace_gutter {\\\nbackground: #262424;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore-soft .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #262424\\\n}\\\n.ace-merbivore-soft {\\\nbackground-color: #1C1C1C;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore-soft .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_selection {\\\nbackground: #494949\\\n}\\\n.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #1C1C1C;\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_active-line {\\\nbackground: #333435\\\n}\\\n.ace-merbivore-soft .ace_gutter-active-line {\\\nbackground-color: #333435\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #494949\\\n}\\\n.ace-merbivore-soft .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-merbivore-soft .ace_entity.ace_name.ace_tag,\\\n.ace-merbivore-soft .ace_keyword,\\\n.ace-merbivore-soft .ace_meta,\\\n.ace-merbivore-soft .ace_meta.ace_tag,\\\n.ace-merbivore-soft .ace_storage {\\\ncolor: #FC803A\\\n}\\\n.ace-merbivore-soft .ace_constant,\\\n.ace-merbivore-soft .ace_constant.ace_character,\\\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape,\\\n.ace-merbivore-soft .ace_constant.ace_other,\\\n.ace-merbivore-soft .ace_support.ace_type {\\\ncolor: #68C1D8\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape {\\\ncolor: #B3E5B4\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_language {\\\ncolor: #E1C582\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_library,\\\n.ace-merbivore-soft .ace_string,\\\n.ace-merbivore-soft .ace_support.ace_constant {\\\ncolor: #8EC65F\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_numeric {\\\ncolor: #7FC578\\\n}\\\n.ace-merbivore-soft .ace_invalid,\\\n.ace-merbivore-soft .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #FE3838\\\n}\\\n.ace-merbivore-soft .ace_fold {\\\nbackground-color: #FC803A;\\\nborder-color: #E6E1DC\\\n}\\\n.ace-merbivore-soft .ace_comment,\\\n.ace-merbivore-soft .ace_meta {\\\nfont-style: italic;\\\ncolor: #AC4BB8\\\n}\\\n.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #EAF1A3\\\n}\\\n.ace-merbivore-soft .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/merbivore_soft\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-mono_industrial.js",
    "content": "define(\"ace/theme/mono_industrial\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-mono-industrial\";\nexports.cssText = \".ace-mono-industrial .ace_gutter {\\\nbackground: #1d2521;\\\ncolor: #C5C9C9\\\n}\\\n.ace-mono-industrial .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-mono-industrial {\\\nbackground-color: #222C28;\\\ncolor: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_selection {\\\nbackground: rgba(145, 153, 148, 0.40)\\\n}\\\n.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #222C28;\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(102, 108, 104, 0.50)\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_active-line {\\\nbackground: rgba(12, 13, 12, 0.25)\\\n}\\\n.ace-mono-industrial .ace_gutter-active-line {\\\nbackground-color: rgba(12, 13, 12, 0.25)\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(145, 153, 148, 0.40)\\\n}\\\n.ace-mono-industrial .ace_invisible {\\\ncolor: rgba(102, 108, 104, 0.50)\\\n}\\\n.ace-mono-industrial .ace_string {\\\nbackground-color: #151C19;\\\ncolor: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_keyword,\\\n.ace-mono-industrial .ace_meta {\\\ncolor: #A39E64\\\n}\\\n.ace-mono-industrial .ace_constant,\\\n.ace-mono-industrial .ace_constant.ace_character,\\\n.ace-mono-industrial .ace_constant.ace_character.ace_escape,\\\n.ace-mono-industrial .ace_constant.ace_numeric,\\\n.ace-mono-industrial .ace_constant.ace_other {\\\ncolor: #E98800\\\n}\\\n.ace-mono-industrial .ace_entity.ace_name.ace_function,\\\n.ace-mono-industrial .ace_keyword.ace_operator,\\\n.ace-mono-industrial .ace_variable {\\\ncolor: #A8B3AB\\\n}\\\n.ace-mono-industrial .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: rgba(153, 0, 0, 0.68)\\\n}\\\n.ace-mono-industrial .ace_support.ace_constant {\\\ncolor: #C87500\\\n}\\\n.ace-mono-industrial .ace_fold {\\\nbackground-color: #A8B3AB;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_support.ace_function {\\\ncolor: #588E60\\\n}\\\n.ace-mono-industrial .ace_entity.ace_name,\\\n.ace-mono-industrial .ace_support.ace_class,\\\n.ace-mono-industrial .ace_support.ace_type {\\\ncolor: #5778B6\\\n}\\\n.ace-mono-industrial .ace_storage {\\\ncolor: #C23B00\\\n}\\\n.ace-mono-industrial .ace_variable.ace_language,\\\n.ace-mono-industrial .ace_variable.ace_parameter {\\\ncolor: #648BD2\\\n}\\\n.ace-mono-industrial .ace_comment {\\\ncolor: #666C68;\\\nbackground-color: #151C19\\\n}\\\n.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #909993\\\n}\\\n.ace-mono-industrial .ace_entity.ace_name.ace_tag {\\\ncolor: #A65EFF\\\n}\\\n.ace-mono-industrial .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/mono_industrial\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-monokai.js",
    "content": "define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-monokai\";\nexports.cssText = \".ace-monokai .ace_gutter {\\\nbackground: #2F3129;\\\ncolor: #8F908A\\\n}\\\n.ace-monokai .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-monokai {\\\nbackground-color: #272822;\\\ncolor: #F8F8F2\\\n}\\\n.ace-monokai .ace_cursor {\\\ncolor: #F8F8F0\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selection {\\\nbackground: #49483E\\\n}\\\n.ace-monokai.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #272822;\\\n}\\\n.ace-monokai .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-monokai .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_marker-layer .ace_active-line {\\\nbackground: #202020\\\n}\\\n.ace-monokai .ace_gutter-active-line {\\\nbackground-color: #272727\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_invisible {\\\ncolor: #52524d\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_tag,\\\n.ace-monokai .ace_keyword,\\\n.ace-monokai .ace_meta.ace_tag,\\\n.ace-monokai .ace_storage {\\\ncolor: #F92672\\\n}\\\n.ace-monokai .ace_punctuation,\\\n.ace-monokai .ace_punctuation.ace_tag {\\\ncolor: #fff\\\n}\\\n.ace-monokai .ace_constant.ace_character,\\\n.ace-monokai .ace_constant.ace_language,\\\n.ace-monokai .ace_constant.ace_numeric,\\\n.ace-monokai .ace_constant.ace_other {\\\ncolor: #AE81FF\\\n}\\\n.ace-monokai .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-monokai .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-monokai .ace_support.ace_constant,\\\n.ace-monokai .ace_support.ace_function {\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_fold {\\\nbackground-color: #A6E22E;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-monokai .ace_storage.ace_type,\\\n.ace-monokai .ace_support.ace_class,\\\n.ace-monokai .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_function,\\\n.ace-monokai .ace_entity.ace_other,\\\n.ace-monokai .ace_entity.ace_other.ace_attribute-name,\\\n.ace-monokai .ace_variable {\\\ncolor: #A6E22E\\\n}\\\n.ace-monokai .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F\\\n}\\\n.ace-monokai .ace_string {\\\ncolor: #E6DB74\\\n}\\\n.ace-monokai .ace_comment {\\\ncolor: #75715E\\\n}\\\n.ace-monokai .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/monokai\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-pastel_on_dark.js",
    "content": "define(\"ace/theme/pastel_on_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-pastel-on-dark\";\nexports.cssText = \".ace-pastel-on-dark .ace_gutter {\\\nbackground: #353030;\\\ncolor: #8F938F\\\n}\\\n.ace-pastel-on-dark .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #353030\\\n}\\\n.ace-pastel-on-dark {\\\nbackground-color: #2C2828;\\\ncolor: #8F938F\\\n}\\\n.ace-pastel-on-dark .ace_cursor {\\\ncolor: #A7A7A7\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #2C2828;\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-pastel-on-dark .ace_gutter-active-line {\\\nbackground-color: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-pastel-on-dark .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-pastel-on-dark .ace_keyword,\\\n.ace-pastel-on-dark .ace_meta {\\\ncolor: #757aD8\\\n}\\\n.ace-pastel-on-dark .ace_constant,\\\n.ace-pastel-on-dark .ace_constant.ace_character,\\\n.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,\\\n.ace-pastel-on-dark .ace_constant.ace_other {\\\ncolor: #4FB7C5\\\n}\\\n.ace-pastel-on-dark .ace_keyword.ace_operator {\\\ncolor: #797878\\\n}\\\n.ace-pastel-on-dark .ace_constant.ace_character {\\\ncolor: #AFA472\\\n}\\\n.ace-pastel-on-dark .ace_constant.ace_language {\\\ncolor: #DE8E30\\\n}\\\n.ace-pastel-on-dark .ace_constant.ace_numeric {\\\ncolor: #CCCCCC\\\n}\\\n.ace-pastel-on-dark .ace_invalid,\\\n.ace-pastel-on-dark .ace_invalid.ace_illegal {\\\ncolor: #F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75)\\\n}\\\n.ace-pastel-on-dark .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1\\\n}\\\n.ace-pastel-on-dark .ace_fold {\\\nbackground-color: #757aD8;\\\nborder-color: #8F938F\\\n}\\\n.ace-pastel-on-dark .ace_support.ace_function {\\\ncolor: #AEB2F8\\\n}\\\n.ace-pastel-on-dark .ace_string {\\\ncolor: #66A968\\\n}\\\n.ace-pastel-on-dark .ace_string.ace_regexp {\\\ncolor: #E9C062\\\n}\\\n.ace-pastel-on-dark .ace_comment {\\\ncolor: #A6C6FF\\\n}\\\n.ace-pastel-on-dark .ace_variable {\\\ncolor: #BEBF55\\\n}\\\n.ace-pastel-on-dark .ace_variable.ace_language {\\\ncolor: #C1C144\\\n}\\\n.ace-pastel-on-dark .ace_xml-pe {\\\ncolor: #494949\\\n}\\\n.ace-pastel-on-dark .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/pastel_on_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-solarized_dark.js",
    "content": "define(\"ace/theme/solarized_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-solarized-dark\";\nexports.cssText = \".ace-solarized-dark .ace_gutter {\\\nbackground: #01313f;\\\ncolor: #d0edf7\\\n}\\\n.ace-solarized-dark .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #33555E\\\n}\\\n.ace-solarized-dark {\\\nbackground-color: #002B36;\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,\\\n.ace-solarized-dark .ace_storage {\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-dark .ace_cursor,\\\n.ace-solarized-dark .ace_string.ace_regexp {\\\ncolor: #D30102\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_active-line,\\\n.ace-solarized-dark .ace_marker-layer .ace_selection {\\\nbackground: rgba(255, 255, 255, 0.1)\\\n}\\\n.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002B36;\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-dark .ace_gutter-active-line {\\\nbackground-color: #0d3440\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #073642\\\n}\\\n.ace-solarized-dark .ace_invisible {\\\ncolor: rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-dark .ace_keyword,\\\n.ace-solarized-dark .ace_meta,\\\n.ace-solarized-dark .ace_support.ace_class,\\\n.ace-solarized-dark .ace_support.ace_type {\\\ncolor: #859900\\\n}\\\n.ace-solarized-dark .ace_constant.ace_character,\\\n.ace-solarized-dark .ace_constant.ace_other {\\\ncolor: #CB4B16\\\n}\\\n.ace-solarized-dark .ace_constant.ace_language {\\\ncolor: #B58900\\\n}\\\n.ace-solarized-dark .ace_constant.ace_numeric {\\\ncolor: #D33682\\\n}\\\n.ace-solarized-dark .ace_fold {\\\nbackground-color: #268BD2;\\\nborder-color: #93A1A1\\\n}\\\n.ace-solarized-dark .ace_entity.ace_name.ace_function,\\\n.ace-solarized-dark .ace_entity.ace_name.ace_tag,\\\n.ace-solarized-dark .ace_support.ace_function,\\\n.ace-solarized-dark .ace_variable,\\\n.ace-solarized-dark .ace_variable.ace_language {\\\ncolor: #268BD2\\\n}\\\n.ace-solarized-dark .ace_string {\\\ncolor: #2AA198\\\n}\\\n.ace-solarized-dark .ace_comment {\\\nfont-style: italic;\\\ncolor: #657B83\\\n}\\\n.ace-solarized-dark .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/solarized_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-solarized_light.js",
    "content": "define(\"ace/theme/solarized_light\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-solarized-light\";\nexports.cssText = \".ace-solarized-light .ace_gutter {\\\nbackground: #fbf1d3;\\\ncolor: #333\\\n}\\\n.ace-solarized-light .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-solarized-light {\\\nbackground-color: #FDF6E3;\\\ncolor: #586E75\\\n}\\\n.ace-solarized-light .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_selection {\\\nbackground: rgba(7, 54, 67, 0.09)\\\n}\\\n.ace-solarized-light.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FDF6E3;\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_active-line {\\\nbackground: #EEE8D5\\\n}\\\n.ace-solarized-light .ace_gutter-active-line {\\\nbackground-color : #EDE5C1\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #7f9390\\\n}\\\n.ace-solarized-light .ace_invisible {\\\ncolor: rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-light .ace_keyword,\\\n.ace-solarized-light .ace_meta,\\\n.ace-solarized-light .ace_support.ace_class,\\\n.ace-solarized-light .ace_support.ace_type {\\\ncolor: #859900\\\n}\\\n.ace-solarized-light .ace_constant.ace_character,\\\n.ace-solarized-light .ace_constant.ace_other {\\\ncolor: #CB4B16\\\n}\\\n.ace-solarized-light .ace_constant.ace_language {\\\ncolor: #B58900\\\n}\\\n.ace-solarized-light .ace_constant.ace_numeric {\\\ncolor: #D33682\\\n}\\\n.ace-solarized-light .ace_fold {\\\nbackground-color: #268BD2;\\\nborder-color: #586E75\\\n}\\\n.ace-solarized-light .ace_entity.ace_name.ace_function,\\\n.ace-solarized-light .ace_entity.ace_name.ace_tag,\\\n.ace-solarized-light .ace_support.ace_function,\\\n.ace-solarized-light .ace_variable,\\\n.ace-solarized-light .ace_variable.ace_language {\\\ncolor: #268BD2\\\n}\\\n.ace-solarized-light .ace_storage {\\\ncolor: #073642\\\n}\\\n.ace-solarized-light .ace_string {\\\ncolor: #2AA198\\\n}\\\n.ace-solarized-light .ace_string.ace_regexp {\\\ncolor: #D30102\\\n}\\\n.ace-solarized-light .ace_comment,\\\n.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-light .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/solarized_light\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-sqlserver.js",
    "content": "define(\"ace/theme/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-sqlserver\";\nexports.cssText = \".ace-sqlserver .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333;\\\noverflow: hidden;\\\n}\\\n.ace-sqlserver .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-sqlserver {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_identifier {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_keyword {\\\ncolor: #0000FF;\\\n}\\\n.ace-sqlserver .ace_numeric {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_storage {\\\ncolor: #11B7BE;\\\n}\\\n.ace-sqlserver .ace_keyword.ace_operator,\\\n.ace-sqlserver .ace_lparen,\\\n.ace-sqlserver .ace_rparen,\\\n.ace-sqlserver .ace_punctuation {\\\ncolor: #808080;\\\n}\\\n.ace-sqlserver .ace_set.ace_statement {\\\ncolor: #0000FF;\\\ntext-decoration: underline;\\\n}\\\n.ace-sqlserver .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-sqlserver .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-sqlserver .ace_constant.ace_language {\\\ncolor: #979797;\\\n}\\\n.ace-sqlserver .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-sqlserver .ace_invalid {\\\nbackground-color: rgb(153, 0, 0);\\\ncolor: white;\\\n}\\\n.ace-sqlserver .ace_support.ace_function {\\\ncolor: #FF00FF;\\\n}\\\n.ace-sqlserver .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-sqlserver .ace_class {\\\ncolor: #008080;\\\n}\\\n.ace-sqlserver .ace_support.ace_other {\\\ncolor: #6D79DE;\\\n}\\\n.ace-sqlserver .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F;\\\n}\\\n.ace-sqlserver .ace_comment {\\\ncolor: #008000;\\\n}\\\n.ace-sqlserver .ace_constant.ace_numeric {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-sqlserver .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-sqlserver .ace_support.ace_storedprocedure {\\\ncolor: #800000;\\\n}\\\n.ace-sqlserver .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-sqlserver .ace_list {\\\ncolor: rgb(185, 6, 144);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-sqlserver .ace_gutter-active-line {\\\nbackground-color: #dcdcdc;\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-sqlserver .ace_meta.ace_tag {\\\ncolor: #0000FF;\\\n}\\\n.ace-sqlserver .ace_string.ace_regex {\\\ncolor: #FF0000;\\\n}\\\n.ace-sqlserver .ace_string {\\\ncolor: #FF0000;\\\n}\\\n.ace-sqlserver .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #994409;\\\n}\\\n.ace-sqlserver .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-terminal.js",
    "content": "define(\"ace/theme/terminal\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-terminal-theme\";\nexports.cssText = \".ace-terminal-theme .ace_gutter {\\\nbackground: #1a0005;\\\ncolor: steelblue\\\n}\\\n.ace-terminal-theme .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1a1a1a\\\n}\\\n.ace-terminal-theme {\\\nbackground-color: black;\\\ncolor: #DEDEDE\\\n}\\\n.ace-terminal-theme .ace_cursor {\\\ncolor: #9F9F9F\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_selection {\\\nbackground: #424242\\\n}\\\n.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px black;\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_step {\\\nbackground: rgb(0, 0, 0)\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_bracket {\\\nbackground: #090;\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_bracket-start {\\\nbackground: #090;\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #900\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_active-line {\\\nbackground: #2A2A2A\\\n}\\\n.ace-terminal-theme .ace_gutter-active-line {\\\nbackground-color: #2A112A\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #424242\\\n}\\\n.ace-terminal-theme .ace_invisible {\\\ncolor: #343434\\\n}\\\n.ace-terminal-theme .ace_keyword,\\\n.ace-terminal-theme .ace_meta,\\\n.ace-terminal-theme .ace_storage,\\\n.ace-terminal-theme .ace_storage.ace_type,\\\n.ace-terminal-theme .ace_support.ace_type {\\\ncolor: tomato\\\n}\\\n.ace-terminal-theme .ace_keyword.ace_operator {\\\ncolor: deeppink\\\n}\\\n.ace-terminal-theme .ace_constant.ace_character,\\\n.ace-terminal-theme .ace_constant.ace_language,\\\n.ace-terminal-theme .ace_constant.ace_numeric,\\\n.ace-terminal-theme .ace_keyword.ace_other.ace_unit,\\\n.ace-terminal-theme .ace_support.ace_constant,\\\n.ace-terminal-theme .ace_variable.ace_parameter {\\\ncolor: #E78C45\\\n}\\\n.ace-terminal-theme .ace_constant.ace_other {\\\ncolor: gold\\\n}\\\n.ace-terminal-theme .ace_invalid {\\\ncolor: yellow;\\\nbackground-color: red\\\n}\\\n.ace-terminal-theme .ace_invalid.ace_deprecated {\\\ncolor: #CED2CF;\\\nbackground-color: #B798BF\\\n}\\\n.ace-terminal-theme .ace_fold {\\\nbackground-color: #7AA6DA;\\\nborder-color: #DEDEDE\\\n}\\\n.ace-terminal-theme .ace_entity.ace_name.ace_function,\\\n.ace-terminal-theme .ace_support.ace_function,\\\n.ace-terminal-theme .ace_variable {\\\ncolor: #7AA6DA\\\n}\\\n.ace-terminal-theme .ace_support.ace_class,\\\n.ace-terminal-theme .ace_support.ace_type {\\\ncolor: #E7C547\\\n}\\\n.ace-terminal-theme .ace_heading,\\\n.ace-terminal-theme .ace_string {\\\ncolor: #B9CA4A\\\n}\\\n.ace-terminal-theme .ace_entity.ace_name.ace_tag,\\\n.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,\\\n.ace-terminal-theme .ace_meta.ace_tag,\\\n.ace-terminal-theme .ace_string.ace_regexp,\\\n.ace-terminal-theme .ace_variable {\\\ncolor: #D54E53\\\n}\\\n.ace-terminal-theme .ace_comment {\\\ncolor: orangered\\\n}\\\n.ace-terminal-theme .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/terminal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-textmate.js",
    "content": "define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/textmate\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-tomorrow.js",
    "content": "define(\"ace/theme/tomorrow\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-tomorrow\";\nexports.cssText = \".ace-tomorrow .ace_gutter {\\\nbackground: #f6f6f6;\\\ncolor: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #f6f6f6\\\n}\\\n.ace-tomorrow {\\\nbackground-color: #FFFFFF;\\\ncolor: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_cursor {\\\ncolor: #AEAFAD\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_selection {\\\nbackground: #D6D6D6\\\n}\\\n.ace-tomorrow.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #D1D1D1\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_active-line {\\\nbackground: #EFEFEF\\\n}\\\n.ace-tomorrow .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #D6D6D6\\\n}\\\n.ace-tomorrow .ace_invisible {\\\ncolor: #D1D1D1\\\n}\\\n.ace-tomorrow .ace_keyword,\\\n.ace-tomorrow .ace_meta,\\\n.ace-tomorrow .ace_storage,\\\n.ace-tomorrow .ace_storage.ace_type,\\\n.ace-tomorrow .ace_support.ace_type {\\\ncolor: #8959A8\\\n}\\\n.ace-tomorrow .ace_keyword.ace_operator {\\\ncolor: #3E999F\\\n}\\\n.ace-tomorrow .ace_constant.ace_character,\\\n.ace-tomorrow .ace_constant.ace_language,\\\n.ace-tomorrow .ace_constant.ace_numeric,\\\n.ace-tomorrow .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow .ace_support.ace_constant,\\\n.ace-tomorrow .ace_variable.ace_parameter {\\\ncolor: #F5871F\\\n}\\\n.ace-tomorrow .ace_constant.ace_other {\\\ncolor: #666969\\\n}\\\n.ace-tomorrow .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #C82829\\\n}\\\n.ace-tomorrow .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #8959A8\\\n}\\\n.ace-tomorrow .ace_fold {\\\nbackground-color: #4271AE;\\\nborder-color: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow .ace_support.ace_function,\\\n.ace-tomorrow .ace_variable {\\\ncolor: #4271AE\\\n}\\\n.ace-tomorrow .ace_support.ace_class,\\\n.ace-tomorrow .ace_support.ace_type {\\\ncolor: #C99E00\\\n}\\\n.ace-tomorrow .ace_heading,\\\n.ace-tomorrow .ace_markup.ace_heading,\\\n.ace-tomorrow .ace_string {\\\ncolor: #718C00\\\n}\\\n.ace-tomorrow .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow .ace_meta.ace_tag,\\\n.ace-tomorrow .ace_string.ace_regexp,\\\n.ace-tomorrow .ace_variable {\\\ncolor: #C82829\\\n}\\\n.ace-tomorrow .ace_comment {\\\ncolor: #8E908C\\\n}\\\n.ace-tomorrow .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/tomorrow\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-tomorrow_night.js",
    "content": "define(\"ace/theme/tomorrow_night\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night\";\nexports.cssText = \".ace-tomorrow-night .ace_gutter {\\\nbackground: #25282c;\\\ncolor: #C5C8C6\\\n}\\\n.ace-tomorrow-night .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #25282c\\\n}\\\n.ace-tomorrow-night {\\\nbackground-color: #1D1F21;\\\ncolor: #C5C8C6\\\n}\\\n.ace-tomorrow-night .ace_cursor {\\\ncolor: #AEAFAD\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_selection {\\\nbackground: #373B41\\\n}\\\n.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #1D1F21;\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #4B4E55\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_active-line {\\\nbackground: #282A2E\\\n}\\\n.ace-tomorrow-night .ace_gutter-active-line {\\\nbackground-color: #282A2E\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #373B41\\\n}\\\n.ace-tomorrow-night .ace_invisible {\\\ncolor: #4B4E55\\\n}\\\n.ace-tomorrow-night .ace_keyword,\\\n.ace-tomorrow-night .ace_meta,\\\n.ace-tomorrow-night .ace_storage,\\\n.ace-tomorrow-night .ace_storage.ace_type,\\\n.ace-tomorrow-night .ace_support.ace_type {\\\ncolor: #B294BB\\\n}\\\n.ace-tomorrow-night .ace_keyword.ace_operator {\\\ncolor: #8ABEB7\\\n}\\\n.ace-tomorrow-night .ace_constant.ace_character,\\\n.ace-tomorrow-night .ace_constant.ace_language,\\\n.ace-tomorrow-night .ace_constant.ace_numeric,\\\n.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night .ace_support.ace_constant,\\\n.ace-tomorrow-night .ace_variable.ace_parameter {\\\ncolor: #DE935F\\\n}\\\n.ace-tomorrow-night .ace_constant.ace_other {\\\ncolor: #CED1CF\\\n}\\\n.ace-tomorrow-night .ace_invalid {\\\ncolor: #CED2CF;\\\nbackground-color: #DF5F5F\\\n}\\\n.ace-tomorrow-night .ace_invalid.ace_deprecated {\\\ncolor: #CED2CF;\\\nbackground-color: #B798BF\\\n}\\\n.ace-tomorrow-night .ace_fold {\\\nbackground-color: #81A2BE;\\\nborder-color: #C5C8C6\\\n}\\\n.ace-tomorrow-night .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night .ace_support.ace_function,\\\n.ace-tomorrow-night .ace_variable {\\\ncolor: #81A2BE\\\n}\\\n.ace-tomorrow-night .ace_support.ace_class,\\\n.ace-tomorrow-night .ace_support.ace_type {\\\ncolor: #F0C674\\\n}\\\n.ace-tomorrow-night .ace_heading,\\\n.ace-tomorrow-night .ace_markup.ace_heading,\\\n.ace-tomorrow-night .ace_string {\\\ncolor: #B5BD68\\\n}\\\n.ace-tomorrow-night .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night .ace_meta.ace_tag,\\\n.ace-tomorrow-night .ace_string.ace_regexp,\\\n.ace-tomorrow-night .ace_variable {\\\ncolor: #CC6666\\\n}\\\n.ace-tomorrow-night .ace_comment {\\\ncolor: #969896\\\n}\\\n.ace-tomorrow-night .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/tomorrow_night\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-tomorrow_night_blue.js",
    "content": "define(\"ace/theme/tomorrow_night_blue\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-blue\";\nexports.cssText = \".ace-tomorrow-night-blue .ace_gutter {\\\nbackground: #00204b;\\\ncolor: #7388b5\\\n}\\\n.ace-tomorrow-night-blue .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #00204b\\\n}\\\n.ace-tomorrow-night-blue {\\\nbackground-color: #002451;\\\ncolor: #FFFFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_constant.ace_other,\\\n.ace-tomorrow-night-blue .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\\\nbackground: #003F8E\\\n}\\\n.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002451;\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_step {\\\nbackground: rgb(127, 111, 19)\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404F7D\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {\\\nbackground: #00346E\\\n}\\\n.ace-tomorrow-night-blue .ace_gutter-active-line {\\\nbackground-color: #022040\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #003F8E\\\n}\\\n.ace-tomorrow-night-blue .ace_invisible {\\\ncolor: #404F7D\\\n}\\\n.ace-tomorrow-night-blue .ace_keyword,\\\n.ace-tomorrow-night-blue .ace_meta,\\\n.ace-tomorrow-night-blue .ace_storage,\\\n.ace-tomorrow-night-blue .ace_storage.ace_type,\\\n.ace-tomorrow-night-blue .ace_support.ace_type {\\\ncolor: #EBBBFF\\\n}\\\n.ace-tomorrow-night-blue .ace_keyword.ace_operator {\\\ncolor: #99FFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_constant.ace_character,\\\n.ace-tomorrow-night-blue .ace_constant.ace_language,\\\n.ace-tomorrow-night-blue .ace_constant.ace_numeric,\\\n.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night-blue .ace_support.ace_constant,\\\n.ace-tomorrow-night-blue .ace_variable.ace_parameter {\\\ncolor: #FFC58F\\\n}\\\n.ace-tomorrow-night-blue .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #F99DA5\\\n}\\\n.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #EBBBFF\\\n}\\\n.ace-tomorrow-night-blue .ace_fold {\\\nbackground-color: #BBDAFF;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night-blue .ace_support.ace_function,\\\n.ace-tomorrow-night-blue .ace_variable {\\\ncolor: #BBDAFF\\\n}\\\n.ace-tomorrow-night-blue .ace_support.ace_class,\\\n.ace-tomorrow-night-blue .ace_support.ace_type {\\\ncolor: #FFEEAD\\\n}\\\n.ace-tomorrow-night-blue .ace_heading,\\\n.ace-tomorrow-night-blue .ace_markup.ace_heading,\\\n.ace-tomorrow-night-blue .ace_string {\\\ncolor: #D1F1A9\\\n}\\\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night-blue .ace_meta.ace_tag,\\\n.ace-tomorrow-night-blue .ace_string.ace_regexp,\\\n.ace-tomorrow-night-blue .ace_variable {\\\ncolor: #FF9DA4\\\n}\\\n.ace-tomorrow-night-blue .ace_comment {\\\ncolor: #7285B7\\\n}\\\n.ace-tomorrow-night-blue .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/tomorrow_night_blue\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-tomorrow_night_bright.js",
    "content": "define(\"ace/theme/tomorrow_night_bright\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-bright\";\nexports.cssText = \".ace-tomorrow-night-bright .ace_gutter {\\\nbackground: #1a1a1a;\\\ncolor: #DEDEDE\\\n}\\\n.ace-tomorrow-night-bright .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1a1a1a\\\n}\\\n.ace-tomorrow-night-bright {\\\nbackground-color: #000000;\\\ncolor: #DEDEDE\\\n}\\\n.ace-tomorrow-night-bright .ace_cursor {\\\ncolor: #9F9F9F\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\\\nbackground: #424242\\\n}\\\n.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #000000;\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #888888\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {\\\nborder: 1px solid rgb(110, 119, 0);\\\nborder-bottom: 0;\\\nbox-shadow: inset 0 -1px rgb(110, 119, 0);\\\nmargin: -1px 0 0 -1px;\\\nbackground: rgba(255, 235, 0, 0.1)\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {\\\nbackground: #2A2A2A\\\n}\\\n.ace-tomorrow-night-bright .ace_gutter-active-line {\\\nbackground-color: #2A2A2A\\\n}\\\n.ace-tomorrow-night-bright .ace_stack {\\\nbackground-color: rgb(66, 90, 44)\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #888888\\\n}\\\n.ace-tomorrow-night-bright .ace_invisible {\\\ncolor: #343434\\\n}\\\n.ace-tomorrow-night-bright .ace_keyword,\\\n.ace-tomorrow-night-bright .ace_meta,\\\n.ace-tomorrow-night-bright .ace_storage,\\\n.ace-tomorrow-night-bright .ace_storage.ace_type,\\\n.ace-tomorrow-night-bright .ace_support.ace_type {\\\ncolor: #C397D8\\\n}\\\n.ace-tomorrow-night-bright .ace_keyword.ace_operator {\\\ncolor: #70C0B1\\\n}\\\n.ace-tomorrow-night-bright .ace_constant.ace_character,\\\n.ace-tomorrow-night-bright .ace_constant.ace_language,\\\n.ace-tomorrow-night-bright .ace_constant.ace_numeric,\\\n.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night-bright .ace_support.ace_constant,\\\n.ace-tomorrow-night-bright .ace_variable.ace_parameter {\\\ncolor: #E78C45\\\n}\\\n.ace-tomorrow-night-bright .ace_constant.ace_other {\\\ncolor: #EEEEEE\\\n}\\\n.ace-tomorrow-night-bright .ace_invalid {\\\ncolor: #CED2CF;\\\nbackground-color: #DF5F5F\\\n}\\\n.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\\\ncolor: #CED2CF;\\\nbackground-color: #B798BF\\\n}\\\n.ace-tomorrow-night-bright .ace_fold {\\\nbackground-color: #7AA6DA;\\\nborder-color: #DEDEDE\\\n}\\\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night-bright .ace_support.ace_function,\\\n.ace-tomorrow-night-bright .ace_variable {\\\ncolor: #7AA6DA\\\n}\\\n.ace-tomorrow-night-bright .ace_support.ace_class,\\\n.ace-tomorrow-night-bright .ace_support.ace_type {\\\ncolor: #E7C547\\\n}\\\n.ace-tomorrow-night-bright .ace_heading,\\\n.ace-tomorrow-night-bright .ace_markup.ace_heading,\\\n.ace-tomorrow-night-bright .ace_string {\\\ncolor: #B9CA4A\\\n}\\\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night-bright .ace_meta.ace_tag,\\\n.ace-tomorrow-night-bright .ace_string.ace_regexp,\\\n.ace-tomorrow-night-bright .ace_variable {\\\ncolor: #D54E53\\\n}\\\n.ace-tomorrow-night-bright .ace_comment {\\\ncolor: #969896\\\n}\\\n.ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {\\\ncolor: #C2C280\\\n}\\\n.ace-tomorrow-night-bright .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/tomorrow_night_bright\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-tomorrow_night_eighties.js",
    "content": "define(\"ace/theme/tomorrow_night_eighties\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-eighties\";\nexports.cssText = \".ace-tomorrow-night-eighties .ace_gutter {\\\nbackground: #272727;\\\ncolor: #CCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #272727\\\n}\\\n.ace-tomorrow-night-eighties {\\\nbackground-color: #2D2D2D;\\\ncolor: #CCCCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_constant.ace_other,\\\n.ace-tomorrow-night-eighties .ace_cursor {\\\ncolor: #CCCCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\\\nbackground: #515151\\\n}\\\n.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #2D2D2D;\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #6A6A6A\\\n}\\\n.ace-tomorrow-night-bright .ace_stack {\\\nbackground: rgb(66, 90, 44)\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {\\\nbackground: #393939\\\n}\\\n.ace-tomorrow-night-eighties .ace_gutter-active-line {\\\nbackground-color: #393939\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #515151\\\n}\\\n.ace-tomorrow-night-eighties .ace_invisible {\\\ncolor: #6A6A6A\\\n}\\\n.ace-tomorrow-night-eighties .ace_keyword,\\\n.ace-tomorrow-night-eighties .ace_meta,\\\n.ace-tomorrow-night-eighties .ace_storage,\\\n.ace-tomorrow-night-eighties .ace_storage.ace_type,\\\n.ace-tomorrow-night-eighties .ace_support.ace_type {\\\ncolor: #CC99CC\\\n}\\\n.ace-tomorrow-night-eighties .ace_keyword.ace_operator {\\\ncolor: #66CCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_constant.ace_character,\\\n.ace-tomorrow-night-eighties .ace_constant.ace_language,\\\n.ace-tomorrow-night-eighties .ace_constant.ace_numeric,\\\n.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night-eighties .ace_support.ace_constant,\\\n.ace-tomorrow-night-eighties .ace_variable.ace_parameter {\\\ncolor: #F99157\\\n}\\\n.ace-tomorrow-night-eighties .ace_invalid {\\\ncolor: #CDCDCD;\\\nbackground-color: #F2777A\\\n}\\\n.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\\\ncolor: #CDCDCD;\\\nbackground-color: #CC99CC\\\n}\\\n.ace-tomorrow-night-eighties .ace_fold {\\\nbackground-color: #6699CC;\\\nborder-color: #CCCCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night-eighties .ace_support.ace_function,\\\n.ace-tomorrow-night-eighties .ace_variable {\\\ncolor: #6699CC\\\n}\\\n.ace-tomorrow-night-eighties .ace_support.ace_class,\\\n.ace-tomorrow-night-eighties .ace_support.ace_type {\\\ncolor: #FFCC66\\\n}\\\n.ace-tomorrow-night-eighties .ace_heading,\\\n.ace-tomorrow-night-eighties .ace_markup.ace_heading,\\\n.ace-tomorrow-night-eighties .ace_string {\\\ncolor: #99CC99\\\n}\\\n.ace-tomorrow-night-eighties .ace_comment {\\\ncolor: #999999\\\n}\\\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night-eighties .ace_meta.ace_tag,\\\n.ace-tomorrow-night-eighties .ace_variable {\\\ncolor: #F2777A\\\n}\\\n.ace-tomorrow-night-eighties .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/tomorrow_night_eighties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-twilight.js",
    "content": "define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-twilight\";\nexports.cssText = \".ace-twilight .ace_gutter {\\\nbackground: #232323;\\\ncolor: #E2E2E2\\\n}\\\n.ace-twilight .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #232323\\\n}\\\n.ace-twilight {\\\nbackground-color: #141414;\\\ncolor: #F8F8F8\\\n}\\\n.ace-twilight .ace_cursor {\\\ncolor: #A7A7A7\\\n}\\\n.ace-twilight .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-twilight.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #141414;\\\n}\\\n.ace-twilight .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-twilight .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-twilight .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-twilight .ace_gutter-active-line {\\\nbackground-color: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-twilight .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-twilight .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-twilight .ace_keyword,\\\n.ace-twilight .ace_meta {\\\ncolor: #CDA869\\\n}\\\n.ace-twilight .ace_constant,\\\n.ace-twilight .ace_constant.ace_character,\\\n.ace-twilight .ace_constant.ace_character.ace_escape,\\\n.ace-twilight .ace_constant.ace_other,\\\n.ace-twilight .ace_heading,\\\n.ace-twilight .ace_markup.ace_heading,\\\n.ace-twilight .ace_support.ace_constant {\\\ncolor: #CF6A4C\\\n}\\\n.ace-twilight .ace_invalid.ace_illegal {\\\ncolor: #F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75)\\\n}\\\n.ace-twilight .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1\\\n}\\\n.ace-twilight .ace_support {\\\ncolor: #9B859D\\\n}\\\n.ace-twilight .ace_fold {\\\nbackground-color: #AC885B;\\\nborder-color: #F8F8F8\\\n}\\\n.ace-twilight .ace_support.ace_function {\\\ncolor: #DAD085\\\n}\\\n.ace-twilight .ace_list,\\\n.ace-twilight .ace_markup.ace_list,\\\n.ace-twilight .ace_storage {\\\ncolor: #F9EE98\\\n}\\\n.ace-twilight .ace_entity.ace_name.ace_function,\\\n.ace-twilight .ace_meta.ace_tag,\\\n.ace-twilight .ace_variable {\\\ncolor: #AC885B\\\n}\\\n.ace-twilight .ace_string {\\\ncolor: #8F9D6A\\\n}\\\n.ace-twilight .ace_string.ace_regexp {\\\ncolor: #E9C062\\\n}\\\n.ace-twilight .ace_comment {\\\nfont-style: italic;\\\ncolor: #5F5A60\\\n}\\\n.ace-twilight .ace_variable {\\\ncolor: #7587A6\\\n}\\\n.ace-twilight .ace_xml-pe {\\\ncolor: #494949\\\n}\\\n.ace-twilight .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/twilight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-vibrant_ink.js",
    "content": "define(\"ace/theme/vibrant_ink\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-vibrant-ink\";\nexports.cssText = \".ace-vibrant-ink .ace_gutter {\\\nbackground: #1a1a1a;\\\ncolor: #BEBEBE\\\n}\\\n.ace-vibrant-ink .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1a1a1a\\\n}\\\n.ace-vibrant-ink {\\\nbackground-color: #0F0F0F;\\\ncolor: #FFFFFF\\\n}\\\n.ace-vibrant-ink .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_selection {\\\nbackground: #6699CC\\\n}\\\n.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #0F0F0F;\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_active-line {\\\nbackground: #333333\\\n}\\\n.ace-vibrant-ink .ace_gutter-active-line {\\\nbackground-color: #333333\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #6699CC\\\n}\\\n.ace-vibrant-ink .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-vibrant-ink .ace_keyword,\\\n.ace-vibrant-ink .ace_meta {\\\ncolor: #FF6600\\\n}\\\n.ace-vibrant-ink .ace_constant,\\\n.ace-vibrant-ink .ace_constant.ace_character,\\\n.ace-vibrant-ink .ace_constant.ace_character.ace_escape,\\\n.ace-vibrant-ink .ace_constant.ace_other {\\\ncolor: #339999\\\n}\\\n.ace-vibrant-ink .ace_constant.ace_numeric {\\\ncolor: #99CC99\\\n}\\\n.ace-vibrant-ink .ace_invalid,\\\n.ace-vibrant-ink .ace_invalid.ace_deprecated {\\\ncolor: #CCFF33;\\\nbackground-color: #000000\\\n}\\\n.ace-vibrant-ink .ace_fold {\\\nbackground-color: #FFCC00;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-vibrant-ink .ace_entity.ace_name.ace_function,\\\n.ace-vibrant-ink .ace_support.ace_function,\\\n.ace-vibrant-ink .ace_variable {\\\ncolor: #FFCC00\\\n}\\\n.ace-vibrant-ink .ace_variable.ace_parameter {\\\nfont-style: italic\\\n}\\\n.ace-vibrant-ink .ace_string {\\\ncolor: #66FF00\\\n}\\\n.ace-vibrant-ink .ace_string.ace_regexp {\\\ncolor: #44B4CC\\\n}\\\n.ace-vibrant-ink .ace_comment {\\\ncolor: #9933CC\\\n}\\\n.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\\\nfont-style: italic;\\\ncolor: #99CC99\\\n}\\\n.ace-vibrant-ink .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/vibrant_ink\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/theme-xcode.js",
    "content": "define(\"ace/theme/xcode\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-xcode\";\nexports.cssText = \"\\\n.ace-xcode .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333\\\n}\\\n.ace-xcode .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-xcode {\\\nbackground-color: #FFFFFF;\\\ncolor: #000000\\\n}\\\n.ace-xcode .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-xcode .ace_marker-layer .ace_selection {\\\nbackground: #B5D5FF\\\n}\\\n.ace-xcode.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-xcode .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174)\\\n}\\\n.ace-xcode .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #BFBFBF\\\n}\\\n.ace-xcode .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.071)\\\n}\\\n.ace-xcode .ace_gutter-active-line {\\\nbackground-color: rgba(0, 0, 0, 0.071)\\\n}\\\n.ace-xcode .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #B5D5FF\\\n}\\\n.ace-xcode .ace_constant.ace_language,\\\n.ace-xcode .ace_keyword,\\\n.ace-xcode .ace_meta,\\\n.ace-xcode .ace_variable.ace_language {\\\ncolor: #C800A4\\\n}\\\n.ace-xcode .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-xcode .ace_constant.ace_character,\\\n.ace-xcode .ace_constant.ace_other {\\\ncolor: #275A5E\\\n}\\\n.ace-xcode .ace_constant.ace_numeric {\\\ncolor: #3A00DC\\\n}\\\n.ace-xcode .ace_entity.ace_other.ace_attribute-name,\\\n.ace-xcode .ace_support.ace_constant,\\\n.ace-xcode .ace_support.ace_function {\\\ncolor: #450084\\\n}\\\n.ace-xcode .ace_fold {\\\nbackground-color: #C800A4;\\\nborder-color: #000000\\\n}\\\n.ace-xcode .ace_entity.ace_name.ace_tag,\\\n.ace-xcode .ace_support.ace_class,\\\n.ace-xcode .ace_support.ace_type {\\\ncolor: #790EAD\\\n}\\\n.ace-xcode .ace_storage {\\\ncolor: #C900A4\\\n}\\\n.ace-xcode .ace_string {\\\ncolor: #DF0002\\\n}\\\n.ace-xcode .ace_comment {\\\ncolor: #008E00\\\n}\\\n.ace-xcode .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    window.require([\"ace/theme/xcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src/worker-coffee.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\ndefine(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\ndefine(\"ace/mode/coffee/coffee\",[], function(require, exports, module) {\nfunction define(f) { module.exports = f() }; define.amd = {};\nvar _typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},_get=function e(a,t,o){null===a&&(a=Function.prototype);var n=Object.getOwnPropertyDescriptor(a,t);if(n===void 0){var r=Object.getPrototypeOf(a);return null===r?void 0:e(r,t,o)}if(\"value\"in n)return n.value;var l=n.get;return void 0===l?void 0:l.call(o)},_slicedToArray=function(){function e(e,a){var t=[],o=!0,n=!1,r=void 0;try{for(var l=e[Symbol.iterator](),s;!(o=(s=l.next()).done)&&(t.push(s.value),!(a&&t.length===a));o=!0);}catch(e){n=!0,r=e}finally{try{!o&&l[\"return\"]&&l[\"return\"]()}finally{if(n)throw r}}return t}return function(a,t){if(Array.isArray(a))return a;if(Symbol.iterator in Object(a))return e(a,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),_createClass=function(){function e(e,a){for(var t=0,o;t<a.length;t++)o=a[t],o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(a,t,o){return t&&e(a.prototype,t),o&&e(a,o),a}}();function _toArray(e){return Array.isArray(e)?e:Array.from(e)}function _possibleConstructorReturn(e,a){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return a&&(\"object\"==typeof a||\"function\"==typeof a)?a:e}function _inherits(e,a){if(\"function\"!=typeof a&&null!==a)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof a);e.prototype=Object.create(a&&a.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),a&&(Object.setPrototypeOf?Object.setPrototypeOf(e,a):e.__proto__=a)}function _classCallCheck(e,a){if(!(e instanceof a))throw new TypeError(\"Cannot call a class as a function\")}function _toConsumableArray(e){if(Array.isArray(e)){for(var a=0,t=Array(e.length);a<e.length;a++)t[a]=e[a];return t}return Array.from(e)}(function(root){var CoffeeScript=function(){function require(e){return require[e]}var _Mathabs=Math.abs,_StringfromCharCode=String.fromCharCode,_Mathfloor=Math.floor;return require[\"../../package.json\"]=function(){return{name:\"coffeescript\",description:\"Unfancy JavaScript\",keywords:[\"javascript\",\"language\",\"coffeescript\",\"compiler\"],author:\"Jeremy Ashkenas\",version:\"2.2.1\",license:\"MIT\",engines:{node:\">=6\"},directories:{lib:\"./lib/coffeescript\"},main:\"./lib/coffeescript/index\",browser:\"./lib/coffeescript/browser\",bin:{coffee:\"./bin/coffee\",cake:\"./bin/cake\"},files:[\"bin\",\"lib\",\"register.js\",\"repl.js\"],scripts:{test:\"node ./bin/cake test\",\"test-harmony\":\"node --harmony ./bin/cake test\"},homepage:\"http://coffeescript.org\",bugs:\"https://github.com/jashkenas/coffeescript/issues\",repository:{type:\"git\",url:\"git://github.com/jashkenas/coffeescript.git\"},devDependencies:{\"babel-core\":\"~6.26.0\",\"babel-preset-babili\":\"~0.1.4\",\"babel-preset-env\":\"~1.6.1\",\"babel-preset-minify\":\"^0.3.0\",codemirror:\"^5.32.0\",docco:\"~0.8.0\",\"highlight.js\":\"~9.12.0\",jison:\">=0.4.18\",\"markdown-it\":\"~8.4.0\",underscore:\"~1.8.3\",webpack:\"~3.10.0\"},dependencies:{}}}(),require[\"./helpers\"]=function(){var e={};return function(){var a,t,o,n,r,l,s,i;e.starts=function(e,a,t){return a===e.substr(t,a.length)},e.ends=function(e,a,t){var o;return o=a.length,a===e.substr(e.length-o-(t||0),o)},e.repeat=s=function(e,a){var t;for(t=\"\";0<a;)1&a&&(t+=e),a>>>=1,e+=e;return t},e.compact=function(e){var a,t,o,n;for(n=[],a=0,o=e.length;a<o;a++)t=e[a],t&&n.push(t);return n},e.count=function(e,a){var t,o;if(t=o=0,!a.length)return 1/0;for(;o=1+e.indexOf(a,o);)t++;return t},e.merge=function(e,a){return n(n({},e),a)},n=e.extend=function(e,a){var t,o;for(t in a)o=a[t],e[t]=o;return e},e.flatten=r=function flatten(e){var a,t,o,n;for(t=[],o=0,n=e.length;o<n;o++)a=e[o],\"[object Array]\"===Object.prototype.toString.call(a)?t=t.concat(r(a)):t.push(a);return t},e.del=function(e,a){var t;return t=e[a],delete e[a],t},e.some=null==(l=Array.prototype.some)?function(a){var t,e,o,n;for(n=this,e=0,o=n.length;e<o;e++)if(t=n[e],a(t))return!0;return!1}:l,e.invertLiterate=function(e){var a,t,o,n,r,l,s,i,d;for(i=[],a=/^\\s*$/,o=/^[\\t ]/,s=/^(?:\\t?| {0,3})(?:[\\*\\-\\+]|[0-9]{1,9}\\.)[ \\t]/,n=!1,d=e.split(\"\\n\"),t=0,r=d.length;t<r;t++)l=d[t],a.test(l)?(n=!1,i.push(l)):n||s.test(l)?(n=!0,i.push(\"# \"+l)):!n&&o.test(l)?i.push(l):(n=!0,i.push(\"# \"+l));return i.join(\"\\n\")},t=function(e,a){return a?{first_line:e.first_line,first_column:e.first_column,last_line:a.last_line,last_column:a.last_column}:e},o=function(e){return e.first_line+\"x\"+e.first_column+\"-\"+e.last_line+\"x\"+e.last_column},e.addDataToNode=function(e,n,r){return function(l){var s,i,d,c,p,u;if(null!=(null==l?void 0:l.updateLocationDataIfMissing)&&null!=n&&l.updateLocationDataIfMissing(t(n,r)),!e.tokenComments)for(e.tokenComments={},c=e.parser.tokens,s=0,i=c.length;s<i;s++)if(p=c[s],!!p.comments)if(u=o(p[2]),null==e.tokenComments[u])e.tokenComments[u]=p.comments;else{var m;(m=e.tokenComments[u]).push.apply(m,_toConsumableArray(p.comments))}return null!=l.locationData&&(d=o(l.locationData),null!=e.tokenComments[d]&&a(e.tokenComments[d],l)),l}},e.attachCommentsToNode=a=function(e,a){var t;if(null!=e&&0!==e.length)return null==a.comments&&(a.comments=[]),(t=a.comments).push.apply(t,_toConsumableArray(e))},e.locationDataToString=function(e){var a;return\"2\"in e&&\"first_line\"in e[2]?a=e[2]:\"first_line\"in e&&(a=e),a?a.first_line+1+\":\"+(a.first_column+1)+\"-\"+(a.last_line+1+\":\"+(a.last_column+1)):\"No location data\"},e.baseFileName=function(e){var a=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],t=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],o,n;return(n=t?/\\\\|\\//:/\\//,o=e.split(n),e=o[o.length-1],!(a&&0<=e.indexOf(\".\")))?e:(o=e.split(\".\"),o.pop(),\"coffee\"===o[o.length-1]&&1<o.length&&o.pop(),o.join(\".\"))},e.isCoffee=function(e){return/\\.((lit)?coffee|coffee\\.md)$/.test(e)},e.isLiterate=function(e){return/\\.(litcoffee|coffee\\.md)$/.test(e)},e.throwSyntaxError=function(e,a){var t;throw t=new SyntaxError(e),t.location=a,t.toString=i,t.stack=t.toString(),t},e.updateSyntaxError=function(e,a,t){return e.toString===i&&(e.code||(e.code=a),e.filename||(e.filename=t),e.stack=e.toString()),e},i=function(){var e,a,t,o,n,r,l,i,d,c,p,u,m,h;if(!(this.code&&this.location))return Error.prototype.toString.call(this);var g=this.location;return l=g.first_line,r=g.first_column,d=g.last_line,i=g.last_column,null==d&&(d=l),null==i&&(i=r),n=this.filename||\"[stdin]\",e=this.code.split(\"\\n\")[l],h=r,o=l===d?i+1:e.length,c=e.slice(0,h).replace(/[^\\s]/g,\" \")+s(\"^\",o-h),\"undefined\"!=typeof process&&null!==process&&(t=(null==(p=process.stdout)?void 0:p.isTTY)&&(null==(u=process.env)||!u.NODE_DISABLE_COLORS)),(null==(m=this.colorful)?t:m)&&(a=function(e){return\"\u001b[1;31m\"+e+\"\u001b[0m\"},e=e.slice(0,h)+a(e.slice(h,o))+e.slice(o),c=a(c)),n+\":\"+(l+1)+\":\"+(r+1)+\": error: \"+this.message+\"\\n\"+e+\"\\n\"+c},e.nameWhitespaceCharacter=function(e){return\" \"===e?\"space\":\"\\n\"===e?\"newline\":\"\\r\"===e?\"carriage return\":\"\\t\"===e?\"tab\":e}}.call(this),{exports:e}.exports}(),require[\"./rewriter\"]=function(){var e={};return function(){var a=[].indexOf,t=require(\"./helpers\"),o,n,r,l,s,d,c,p,u,m,h,i,g,f,y,T,N,v,k,b,$,_,C;for(C=t.throwSyntaxError,$=function(e,a){var t,o,n,r,l;if(e.comments){if(a.comments&&0!==a.comments.length){for(l=[],r=e.comments,o=0,n=r.length;o<n;o++)t=r[o],t.unshift?l.push(t):a.comments.push(t);a.comments=l.concat(a.comments)}else a.comments=e.comments;return delete e.comments}},N=function(e,a,t,o){var n;return n=[e,a],n.generated=!0,t&&(n.origin=t),o&&$(o,n),n},e.Rewriter=f=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"rewrite\",value:function rewrite(e){var a,o,n;return this.tokens=e,(\"undefined\"!=typeof process&&null!==process?null==(a=process.env)?void 0:a.DEBUG_TOKEN_STREAM:void 0)&&(process.env.DEBUG_REWRITTEN_TOKEN_STREAM&&console.log(\"Initial token stream:\"),console.log(function(){var e,a,t,o;for(t=this.tokens,o=[],e=0,a=t.length;e<a;e++)n=t[e],o.push(n[0]+\"/\"+n[1]+(n.comments?\"*\":\"\"));return o}.call(this).join(\" \"))),this.removeLeadingNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.normalizeLines(),this.tagPostfixConditionals(),this.addImplicitBracesAndParens(),this.addParensToChainedDoIife(),this.rescueStowawayComments(),this.addLocationDataToGeneratedTokens(),this.enforceValidCSXAttributes(),this.fixOutdentLocationData(),(\"undefined\"!=typeof process&&null!==process?null==(o=process.env)?void 0:o.DEBUG_REWRITTEN_TOKEN_STREAM:void 0)&&(process.env.DEBUG_TOKEN_STREAM&&console.log(\"Rewritten token stream:\"),console.log(function(){var e,a,t,o;for(t=this.tokens,o=[],e=0,a=t.length;e<a;e++)n=t[e],o.push(n[0]+\"/\"+n[1]+(n.comments?\"*\":\"\"));return o}.call(this).join(\" \"))),this.tokens}},{key:\"scanTokens\",value:function scanTokens(e){var a,t,o;for(o=this.tokens,a=0;t=o[a];)a+=e.call(this,t,a,o);return!0}},{key:\"detectEnd\",value:function detectEnd(e,t,o){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{},r,l,s,i,p;for(p=this.tokens,r=0;i=p[e];){if(0===r&&t.call(this,i,e))return o.call(this,i,e);if((l=i[0],0<=a.call(c,l))?r+=1:(s=i[0],0<=a.call(d,s))&&(r-=1),0>r)return n.returnOnNegativeLevel?void 0:o.call(this,i,e);e+=1}return e-1}},{key:\"removeLeadingNewlines\",value:function removeLeadingNewlines(){var e,a,t,o,n,r,l,s,i;for(l=this.tokens,e=a=0,n=l.length;a<n;e=++a){var d=_slicedToArray(l[e],1);if(i=d[0],\"TERMINATOR\"!==i)break}if(0!==e){for(s=this.tokens.slice(0,e),t=0,r=s.length;t<r;t++)o=s[t],$(o,this.tokens[e]);return this.tokens.splice(0,e)}}},{key:\"closeOpenCalls\",value:function closeOpenCalls(){var e,a;return a=function(e){var a;return\")\"===(a=e[0])||\"CALL_END\"===a},e=function(e){return e[0]=\"CALL_END\"},this.scanTokens(function(t,o){return\"CALL_START\"===t[0]&&this.detectEnd(o+1,a,e),1})}},{key:\"closeOpenIndexes\",value:function closeOpenIndexes(){var e,a;return a=function(e){var a;return\"]\"===(a=e[0])||\"INDEX_END\"===a},e=function(e){return e[0]=\"INDEX_END\"},this.scanTokens(function(t,o){return\"INDEX_START\"===t[0]&&this.detectEnd(o+1,a,e),1})}},{key:\"indexOfTag\",value:function indexOfTag(e){var t,o,n,r,l;t=0;for(var s=arguments.length,i=Array(1<s?s-1:0),d=1;d<s;d++)i[d-1]=arguments[d];for(o=n=0,r=i.length;0<=r?0<=n&&n<r:0>=n&&n>r;o=0<=r?++n:--n)if(null!=i[o]&&(\"string\"==typeof i[o]&&(i[o]=[i[o]]),l=this.tag(e+o+t),0>a.call(i[o],l)))return-1;return e+o+t-1}},{key:\"looksObjectish\",value:function looksObjectish(e){var t,o;return-1!==this.indexOfTag(e,\"@\",null,\":\")||-1!==this.indexOfTag(e,null,\":\")||(o=this.indexOfTag(e,c),!!(-1!==o&&(t=null,this.detectEnd(o+1,function(e){var t;return t=e[0],0<=a.call(d,t)},function(e,a){return t=a}),\":\"===this.tag(t+1))))}},{key:\"findTagsBackwards\",value:function findTagsBackwards(e,t){var o,n,r,l,s,i,p;for(o=[];0<=e&&(o.length||(l=this.tag(e),0>a.call(t,l))&&((s=this.tag(e),0>a.call(c,s))||this.tokens[e].generated)&&(i=this.tag(e),0>a.call(g,i)));)(n=this.tag(e),0<=a.call(d,n))&&o.push(this.tag(e)),(r=this.tag(e),0<=a.call(c,r))&&o.length&&o.pop(),e-=1;return p=this.tag(e),0<=a.call(t,p)}},{key:\"addImplicitBracesAndParens\",value:function addImplicitBracesAndParens(){var e,t;return e=[],t=null,this.scanTokens(function(o,l,f){var i=this,y=_slicedToArray(o,1),T,v,b,$,_,C,D,E,x,I,S,A,R,k,O,L,F,w,P,j,M,U,V,s,B,G,H,W,X,Y,q,z,J;J=y[0];var K=P=0<l?f[l-1]:[],Z=_slicedToArray(K,1);w=Z[0];var Q=L=l<f.length-1?f[l+1]:[],ee=_slicedToArray(Q,1);if(O=ee[0],W=function(){return e[e.length-1]},X=l,b=function(e){return l-X+e},I=function(e){var a;return null==e||null==(a=e[2])?void 0:a.ours},A=function(e){return I(e)&&\"{\"===(null==e?void 0:e[0])},S=function(e){return I(e)&&\"(\"===(null==e?void 0:e[0])},C=function(){return I(W())},D=function(){return S(W())},x=function(){return A(W())},E=function(){var e;return C()&&\"CONTROL\"===(null==(e=W())?void 0:e[0])},Y=function(a){return e.push([\"(\",a,{ours:!0}]),f.splice(a,0,N(\"CALL_START\",\"(\",[\"\",\"implicit function call\",o[2]],P))},T=function(){return e.pop(),f.splice(l,0,N(\"CALL_END\",\")\",[\"\",\"end of input\",o[2]],P)),l+=1},q=function(a){var t=!(1<arguments.length&&void 0!==arguments[1])||arguments[1],n;return e.push([\"{\",a,{sameLine:!0,startsLine:t,ours:!0}]),n=new String(\"{\"),n.generated=!0,f.splice(a,0,N(\"{\",n,o,P))},v=function(a){return a=null==a?l:a,e.pop(),f.splice(a,0,N(\"}\",\"}\",o,P)),l+=1},$=function(e){var a;return a=null,i.detectEnd(e,function(e){return\"TERMINATOR\"===e[0]},function(e,t){return a=t},{returnOnNegativeLevel:!0}),null!=a&&i.looksObjectish(a+1)},(D()||x())&&0<=a.call(r,J)||x()&&\":\"===w&&\"FOR\"===J)return e.push([\"CONTROL\",l,{ours:!0}]),b(1);if(\"INDENT\"===J&&C()){if(\"=>\"!==w&&\"->\"!==w&&\"[\"!==w&&\"(\"!==w&&\",\"!==w&&\"{\"!==w&&\"ELSE\"!==w&&\"=\"!==w)for(;D()||x()&&\":\"!==w;)D()?T():v();return E()&&e.pop(),e.push([J,l]),b(1)}if(0<=a.call(c,J))return e.push([J,l]),b(1);if(0<=a.call(d,J)){for(;C();)D()?T():x()?v():e.pop();t=e.pop()}if(_=function(){var e,t,n,r;return(n=i.findTagsBackwards(l,[\"FOR\"])&&i.findTagsBackwards(l,[\"FORIN\",\"FOROF\",\"FORFROM\"]),e=n||i.findTagsBackwards(l,[\"WHILE\",\"UNTIL\",\"LOOP\",\"LEADING_WHEN\"]),!!e)&&(t=!1,r=o[2].first_line,i.detectEnd(l,function(e){var t;return t=e[0],0<=a.call(g,t)},function(e,a){var o=f[a-1]||[],n=_slicedToArray(o,3),l;return w=n[0],l=n[2].first_line,t=r===l&&(\"->\"===w||\"=>\"===w)},{returnOnNegativeLevel:!0}),t)},(0<=a.call(m,J)&&o.spaced||\"?\"===J&&0<l&&!f[l-1].spaced)&&(0<=a.call(p,O)||\"...\"===O&&(j=this.tag(l+2),0<=a.call(p,j))&&!this.findTagsBackwards(l,[\"INDEX_START\",\"[\"])||0<=a.call(h,O)&&!L.spaced&&!L.newLine)&&!_())return\"?\"===J&&(J=o[0]=\"FUNC_EXIST\"),Y(l+1),b(2);if(0<=a.call(m,J)&&-1<this.indexOfTag(l+1,\"INDENT\")&&this.looksObjectish(l+2)&&!this.findTagsBackwards(l,[\"CLASS\",\"EXTENDS\",\"IF\",\"CATCH\",\"SWITCH\",\"LEADING_WHEN\",\"FOR\",\"WHILE\",\"UNTIL\"]))return Y(l+1),e.push([\"INDENT\",l+2]),b(3);if(\":\"===J){if(V=function(){var e;switch(!1){case e=this.tag(l-1),0>a.call(d,e):return t[1];case\"@\"!==this.tag(l-2):return l-2;default:return l-1}}.call(this),z=0>=V||(M=this.tag(V-1),0<=a.call(g,M))||f[V-1].newLine,W()){var ae=W(),te=_slicedToArray(ae,2);if(H=te[0],B=te[1],(\"{\"===H||\"INDENT\"===H&&\"{\"===this.tag(B-1))&&(z||\",\"===this.tag(V-1)||\"{\"===this.tag(V-1)))return b(1)}return q(V,!!z),b(2)}if(0<=a.call(g,J))for(R=e.length-1;0<=R&&(G=e[R],!!I(G));R+=-1)A(G)&&(G[2].sameLine=!1);if(k=\"OUTDENT\"===w||P.newLine,0<=a.call(u,J)||0<=a.call(n,J)&&k||(\"..\"===J||\"...\"===J)&&this.findTagsBackwards(l,[\"INDEX_START\"]))for(;C();){var oe=W(),ne=_slicedToArray(oe,3);H=ne[0],B=ne[1];var re=ne[2];if(s=re.sameLine,z=re.startsLine,D()&&\",\"!==w||\",\"===w&&\"TERMINATOR\"===J&&null==O)T();else if(x()&&s&&\"TERMINATOR\"!==J&&\":\"!==w&&!((\"POST_IF\"===J||\"FOR\"===J||\"WHILE\"===J||\"UNTIL\"===J)&&z&&$(l+1)))v();else if(x()&&\"TERMINATOR\"===J&&\",\"!==w&&!(z&&this.looksObjectish(l+1)))v();else break}if(\",\"===J&&!this.looksObjectish(l+1)&&x()&&\"FOROF\"!==(U=this.tag(l+2))&&\"FORIN\"!==U&&(\"TERMINATOR\"!==O||!this.looksObjectish(l+2)))for(F=\"OUTDENT\"===O?1:0;x();)v(l+F);return b(1)})}},{key:\"enforceValidCSXAttributes\",value:function enforceValidCSXAttributes(){return this.scanTokens(function(e,a,t){var o,n;return e.csxColon&&(o=t[a+1],\"STRING_START\"!==(n=o[0])&&\"STRING\"!==n&&\"(\"!==n&&C(\"expected wrapped or quoted JSX attribute\",o[2])),1})}},{key:\"rescueStowawayComments\",value:function rescueStowawayComments(){var e,t,o;return e=function(e,a,t,o){return\"TERMINATOR\"!==t[a][0]&&t[o](N(\"TERMINATOR\",\"\\n\",t[a])),t[o](N(\"JS\",\"\",t[a],e))},o=function(t,o,n){var r,s,i,d,c,p,u;for(s=o;s!==n.length&&(c=n[s][0],0<=a.call(l,c));)s++;if(!(s===n.length||(p=n[s][0],0<=a.call(l,p)))){for(u=t.comments,i=0,d=u.length;i<d;i++)r=u[i],r.unshift=!0;return $(t,n[s]),1}return s=n.length-1,e(t,s,n,\"push\"),1},t=function(t,o,n){var r,s,i;for(r=o;-1!==r&&(s=n[r][0],0<=a.call(l,s));)r--;return-1===r||(i=n[r][0],0<=a.call(l,i))?(e(t,0,n,\"unshift\"),3):($(t,n[r]),1)},this.scanTokens(function(e,n,r){var s,i,d,c,p;if(!e.comments)return 1;if(p=1,d=e[0],0<=a.call(l,d)){for(s={comments:[]},i=e.comments.length-1;-1!==i;)!1===e.comments[i].newLine&&!1===e.comments[i].here&&(s.comments.unshift(e.comments[i]),e.comments.splice(i,1)),i--;0!==s.comments.length&&(p=t(s,n-1,r)),0!==e.comments.length&&o(e,n,r)}else{for(s={comments:[]},i=e.comments.length-1;-1!==i;)!e.comments[i].newLine||e.comments[i].unshift||\"JS\"===e[0]&&e.generated||(s.comments.unshift(e.comments[i]),e.comments.splice(i,1)),i--;0!==s.comments.length&&(p=o(s,n+1,r))}return 0===(null==(c=e.comments)?void 0:c.length)&&delete e.comments,p})}},{key:\"addLocationDataToGeneratedTokens\",value:function addLocationDataToGeneratedTokens(){return this.scanTokens(function(e,a,t){var o,n,r,l,s,i;if(e[2])return 1;if(!(e.generated||e.explicit))return 1;if(\"{\"===e[0]&&(r=null==(s=t[a+1])?void 0:s[2])){var d=r;n=d.first_line,o=d.first_column}else if(l=null==(i=t[a-1])?void 0:i[2]){var c=l;n=c.last_line,o=c.last_column}else n=o=0;return e[2]={first_line:n,first_column:o,last_line:n,last_column:o},1})}},{key:\"fixOutdentLocationData\",value:function fixOutdentLocationData(){return this.scanTokens(function(e,a,t){var o;return\"OUTDENT\"===e[0]||e.generated&&\"CALL_END\"===e[0]||e.generated&&\"}\"===e[0]?(o=t[a-1][2],e[2]={first_line:o.last_line,first_column:o.last_column,last_line:o.last_line,last_column:o.last_column},1):1})}},{key:\"addParensToChainedDoIife\",value:function addParensToChainedDoIife(){var e,t,o;return t=function(e,a){return\"OUTDENT\"===this.tag(a-1)},e=function(e,t){var r;if(r=e[0],!(0>a.call(n,r)))return this.tokens.splice(o,0,N(\"(\",\"(\",this.tokens[o])),this.tokens.splice(t+1,0,N(\")\",\")\",this.tokens[t]))},o=null,this.scanTokens(function(a,n){var r,l;return\"do\"===a[1]?(o=n,r=n+1,\"PARAM_START\"===this.tag(n+1)&&(r=null,this.detectEnd(n+1,function(e,a){return\"PARAM_END\"===this.tag(a-1)},function(e,a){return r=a})),null==r||\"->\"!==(l=this.tag(r))&&\"=>\"!==l||\"INDENT\"!==this.tag(r+1))?1:(this.detectEnd(r+1,t,e),2):1})}},{key:\"normalizeLines\",value:function normalizeLines(){var e=this,t,o,r,l,d,c,p,u,m;return m=d=u=null,p=null,c=null,l=[],r=function(e,t){var o,r,l,i;return\";\"!==e[1]&&(o=e[0],0<=a.call(y,o))&&!(\"TERMINATOR\"===e[0]&&(r=this.tag(t+1),0<=a.call(s,r)))&&!(\"ELSE\"===e[0]&&(\"THEN\"!==m||c||p))&&(\"CATCH\"!==(l=e[0])&&\"FINALLY\"!==l||\"->\"!==m&&\"=>\"!==m)||(i=e[0],0<=a.call(n,i))&&(this.tokens[t-1].newLine||\"OUTDENT\"===this.tokens[t-1][0])},t=function(e,a){return\"ELSE\"===e[0]&&\"THEN\"===m&&l.pop(),this.tokens.splice(\",\"===this.tag(a-1)?a-1:a,0,u)},o=function(a,t){var o,n,r;if(r=l.length,!(0<r))return t;o=l.pop();var s=e.indentation(a[o]),i=_slicedToArray(s,2);return n=i[1],n[1]=2*r,a.splice(t,0,n),n[1]=2,a.splice(t+1,0,n),e.detectEnd(t+2,function(e){var a;return\"OUTDENT\"===(a=e[0])||\"TERMINATOR\"===a},function(e,t){if(\"OUTDENT\"===this.tag(t)&&\"OUTDENT\"===this.tag(t+1))return a.splice(t,2)}),t+2},this.scanTokens(function(e,n,i){var h=_slicedToArray(e,1),g,f,y,k,N,v;if(v=h[0],g=(\"->\"===v||\"=>\"===v)&&this.findTagsBackwards(n,[\"IF\",\"WHILE\",\"FOR\",\"UNTIL\",\"SWITCH\",\"WHEN\",\"LEADING_WHEN\",\"[\",\"INDEX_START\"])&&!this.findTagsBackwards(n,[\"THEN\",\"..\",\"...\"]),\"TERMINATOR\"===v){if(\"ELSE\"===this.tag(n+1)&&\"OUTDENT\"!==this.tag(n-1))return i.splice.apply(i,[n,1].concat(_toConsumableArray(this.indentation()))),1;if(k=this.tag(n+1),0<=a.call(s,k))return i.splice(n,1),0}if(\"CATCH\"===v)for(f=y=1;2>=y;f=++y)if(\"OUTDENT\"===(N=this.tag(n+f))||\"TERMINATOR\"===N||\"FINALLY\"===N)return i.splice.apply(i,[n+f,0].concat(_toConsumableArray(this.indentation()))),2+f;if((\"->\"===v||\"=>\"===v)&&(\",\"===this.tag(n+1)||\".\"===this.tag(n+1)&&e.newLine)){var b=this.indentation(i[n]),$=_slicedToArray(b,2);return d=$[0],u=$[1],i.splice(n+1,0,d,u),1}if(0<=a.call(T,v)&&\"INDENT\"!==this.tag(n+1)&&(\"ELSE\"!==v||\"IF\"!==this.tag(n+1))&&!g){m=v;var _=this.indentation(i[n]),C=_slicedToArray(_,2);return d=C[0],u=C[1],\"THEN\"===m&&(d.fromThen=!0),\"THEN\"===v&&(p=this.findTagsBackwards(n,[\"LEADING_WHEN\"])&&\"IF\"===this.tag(n+1),c=this.findTagsBackwards(n,[\"IF\"])&&\"IF\"===this.tag(n+1)),\"THEN\"===v&&this.findTagsBackwards(n,[\"IF\"])&&l.push(n),\"ELSE\"===v&&\"OUTDENT\"!==this.tag(n-1)&&(n=o(i,n)),i.splice(n+1,0,d),this.detectEnd(n+2,r,t),\"THEN\"===v&&i.splice(n,1),1}return 1})}},{key:\"tagPostfixConditionals\",value:function tagPostfixConditionals(){var e,t,o;return o=null,t=function(e,t){var o=_slicedToArray(e,1),n,r;r=o[0];var l=_slicedToArray(this.tokens[t-1],1);return n=l[0],\"TERMINATOR\"===r||\"INDENT\"===r&&0>a.call(T,n)},e=function(e){if(\"INDENT\"!==e[0]||e.generated&&!e.fromThen)return o[0]=\"POST_\"+o[0]},this.scanTokens(function(a,n){return\"IF\"===a[0]?(o=a,this.detectEnd(n+1,t,e),1):1})}},{key:\"indentation\",value:function indentation(e){var a,t;return a=[\"INDENT\",2],t=[\"OUTDENT\",2],e?(a.generated=t.generated=!0,a.origin=t.origin=e):a.explicit=t.explicit=!0,[a,t]}},{key:\"tag\",value:function tag(e){var a;return null==(a=this.tokens[e])?void 0:a[0]}}]),e}();return e.prototype.generate=N,e}.call(this),o=[[\"(\",\")\"],[\"[\",\"]\"],[\"{\",\"}\"],[\"INDENT\",\"OUTDENT\"],[\"CALL_START\",\"CALL_END\"],[\"PARAM_START\",\"PARAM_END\"],[\"INDEX_START\",\"INDEX_END\"],[\"STRING_START\",\"STRING_END\"],[\"REGEX_START\",\"REGEX_END\"]],e.INVERSES=i={},c=[],d=[],v=0,b=o.length;v<b;v++){var D=_slicedToArray(o[v],2);k=D[0],_=D[1],c.push(i[_]=k),d.push(i[k]=_)}s=[\"CATCH\",\"THEN\",\"ELSE\",\"FINALLY\"].concat(d),m=[\"IDENTIFIER\",\"PROPERTY\",\"SUPER\",\")\",\"CALL_END\",\"]\",\"INDEX_END\",\"@\",\"THIS\"],p=[\"IDENTIFIER\",\"CSX_TAG\",\"PROPERTY\",\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_START\",\"REGEX\",\"REGEX_START\",\"JS\",\"NEW\",\"PARAM_START\",\"CLASS\",\"IF\",\"TRY\",\"SWITCH\",\"THIS\",\"UNDEFINED\",\"NULL\",\"BOOL\",\"UNARY\",\"YIELD\",\"AWAIT\",\"UNARY_MATH\",\"SUPER\",\"THROW\",\"@\",\"->\",\"=>\",\"[\",\"(\",\"{\",\"--\",\"++\"],h=[\"+\",\"-\"],u=[\"POST_IF\",\"FOR\",\"WHILE\",\"UNTIL\",\"WHEN\",\"BY\",\"LOOP\",\"TERMINATOR\"],T=[\"ELSE\",\"->\",\"=>\",\"TRY\",\"FINALLY\",\"THEN\"],y=[\"TERMINATOR\",\"CATCH\",\"FINALLY\",\"ELSE\",\"OUTDENT\",\"LEADING_WHEN\"],g=[\"TERMINATOR\",\"INDENT\",\"OUTDENT\"],n=[\".\",\"?.\",\"::\",\"?::\"],r=[\"IF\",\"TRY\",\"FINALLY\",\"CATCH\",\"CLASS\",\"SWITCH\"],l=[\"(\",\")\",\"[\",\"]\",\"{\",\"}\",\".\",\"..\",\"...\",\",\",\"=\",\"++\",\"--\",\"?\",\"AS\",\"AWAIT\",\"CALL_START\",\"CALL_END\",\"DEFAULT\",\"ELSE\",\"EXTENDS\",\"EXPORT\",\"FORIN\",\"FOROF\",\"FORFROM\",\"IMPORT\",\"INDENT\",\"INDEX_SOAK\",\"LEADING_WHEN\",\"OUTDENT\",\"PARAM_END\",\"REGEX_START\",\"REGEX_END\",\"RETURN\",\"STRING_END\",\"THROW\",\"UNARY\",\"YIELD\"].concat(h.concat(u.concat(n.concat(r))))}.call(this),{exports:e}.exports}(),require[\"./lexer\"]=function(){var e={};return function(){var a=[].indexOf,t=[].slice,o=require(\"./rewriter\"),n,r,l,s,i,d,c,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E,x,I,S,A,R,O,L,F,w,P,j,M,U,V,B,G,H,W,X,Y,q,z,J,K,Z,Q,ee,ae,te,oe,ne,re,le,se,ie,de,ce,pe,ue,me,he,ge,fe,ye,ke,Te,Ne,ve,be,$e;z=o.Rewriter,S=o.INVERSES;var _e=require(\"./helpers\");he=_e.count,be=_e.starts,me=_e.compact,ve=_e.repeat,ge=_e.invertLiterate,Ne=_e.merge,ue=_e.attachCommentsToNode,Te=_e.locationDataToString,$e=_e.throwSyntaxError,e.Lexer=w=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"tokenize\",value:function tokenize(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,r;for(this.literate=a.literate,this.indent=0,this.baseIndent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.indentLiteral=\"\",this.ends=[],this.tokens=[],this.seenFor=!1,this.seenImport=!1,this.seenExport=!1,this.importSpecifierList=!1,this.exportSpecifierList=!1,this.csxDepth=0,this.csxObjAttribute={},this.chunkLine=a.line||0,this.chunkColumn=a.column||0,e=this.clean(e),n=0;this.chunk=e.slice(n);){t=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.stringToken()||this.numberToken()||this.csxToken()||this.regexToken()||this.jsToken()||this.literalToken();var l=this.getLineAndColumnFromChunk(t),s=_slicedToArray(l,2);if(this.chunkLine=s[0],this.chunkColumn=s[1],n+=t,a.untilBalanced&&0===this.ends.length)return{tokens:this.tokens,index:n}}return this.closeIndentation(),(o=this.ends.pop())&&this.error(\"missing \"+o.tag,(null==(r=o.origin)?o:r)[2]),!1===a.rewrite?this.tokens:(new z).rewrite(this.tokens)}},{key:\"clean\",value:function clean(e){return e.charCodeAt(0)===n&&(e=e.slice(1)),e=e.replace(/\\r/g,\"\").replace(re,\"\"),pe.test(e)&&(e=\"\\n\"+e,this.chunkLine--),this.literate&&(e=ge(e)),e}},{key:\"identifierToken\",value:function identifierToken(){var e,t,o,n,r,s,p,u,m,h,f,y,k,T,N,v,b,$,_,C,E,x,I,S,A,O,F,w;if(p=this.atCSXTag(),A=p?g:D,!(m=A.exec(this.chunk)))return 0;var P=m,j=_slicedToArray(P,3);if(u=j[0],r=j[1],t=j[2],s=r.length,h=void 0,\"own\"===r&&\"FOR\"===this.tag())return this.token(\"OWN\",r),r.length;if(\"from\"===r&&\"YIELD\"===this.tag())return this.token(\"FROM\",r),r.length;if(\"as\"===r&&this.seenImport){if(\"*\"===this.value())this.tokens[this.tokens.length-1][0]=\"IMPORT_ALL\";else if(k=this.value(!0),0<=a.call(c,k)){f=this.prev();var M=[\"IDENTIFIER\",this.value(!0)];f[0]=M[0],f[1]=M[1]}if(\"DEFAULT\"===(T=this.tag())||\"IMPORT_ALL\"===T||\"IDENTIFIER\"===T)return this.token(\"AS\",r),r.length}if(\"as\"===r&&this.seenExport){if(\"IDENTIFIER\"===(v=this.tag())||\"DEFAULT\"===v)return this.token(\"AS\",r),r.length;if(b=this.value(!0),0<=a.call(c,b)){f=this.prev();var U=[\"IDENTIFIER\",this.value(!0)];return f[0]=U[0],f[1]=U[1],this.token(\"AS\",r),r.length}}if(\"default\"===r&&this.seenExport&&(\"EXPORT\"===($=this.tag())||\"AS\"===$))return this.token(\"DEFAULT\",r),r.length;if(\"do\"===r&&(S=/^(\\s*super)(?!\\(\\))/.exec(this.chunk.slice(3)))){this.token(\"SUPER\",\"super\"),this.token(\"CALL_START\",\"(\"),this.token(\"CALL_END\",\")\");var V=S,B=_slicedToArray(V,2);return u=B[0],O=B[1],O.length+3}if(f=this.prev(),F=t||null!=f&&(\".\"===(_=f[0])||\"?.\"===_||\"::\"===_||\"?::\"===_||!f.spaced&&\"@\"===f[0])?\"PROPERTY\":\"IDENTIFIER\",\"IDENTIFIER\"===F&&(0<=a.call(R,r)||0<=a.call(c,r))&&!(this.exportSpecifierList&&0<=a.call(c,r))?(F=r.toUpperCase(),\"WHEN\"===F&&(C=this.tag(),0<=a.call(L,C))?F=\"LEADING_WHEN\":\"FOR\"===F?this.seenFor=!0:\"UNLESS\"===F?F=\"IF\":\"IMPORT\"===F?this.seenImport=!0:\"EXPORT\"===F?this.seenExport=!0:0<=a.call(le,F)?F=\"UNARY\":0<=a.call(Y,F)&&(\"INSTANCEOF\"!==F&&this.seenFor?(F=\"FOR\"+F,this.seenFor=!1):(F=\"RELATION\",\"!\"===this.value()&&(h=this.tokens.pop(),r=\"!\"+r)))):\"IDENTIFIER\"===F&&this.seenFor&&\"from\"===r&&fe(f)?(F=\"FORFROM\",this.seenFor=!1):\"PROPERTY\"===F&&f&&(f.spaced&&(E=f[0],0<=a.call(l,E))&&/^[gs]et$/.test(f[1])&&1<this.tokens.length&&\".\"!==(x=this.tokens[this.tokens.length-2][0])&&\"?.\"!==x&&\"@\"!==x?this.error(\"'\"+f[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",f[2]):2<this.tokens.length&&(y=this.tokens[this.tokens.length-2],(\"@\"===(I=f[0])||\"THIS\"===I)&&y&&y.spaced&&/^[gs]et$/.test(y[1])&&\".\"!==(N=this.tokens[this.tokens.length-3][0])&&\"?.\"!==N&&\"@\"!==N&&this.error(\"'\"+y[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",y[2]))),\"IDENTIFIER\"===F&&0<=a.call(q,r)&&this.error(\"reserved word '\"+r+\"'\",{length:r.length}),\"PROPERTY\"===F||this.exportSpecifierList||(0<=a.call(i,r)&&(e=r,r=d[r]),F=function(){return\"!\"===r?\"UNARY\":\"==\"===r||\"!=\"===r?\"COMPARE\":\"true\"===r||\"false\"===r?\"BOOL\":\"break\"===r||\"continue\"===r||\"debugger\"===r?\"STATEMENT\":\"&&\"===r||\"||\"===r?r:F}()),w=this.token(F,r,0,s),e&&(w.origin=[F,e,w[2]]),h){var G=[h[2].first_line,h[2].first_column];w[2].first_line=G[0],w[2].first_column=G[1]}return t&&(o=u.lastIndexOf(p?\"=\":\":\"),n=this.token(\":\",\":\",o,t.length),p&&(n.csxColon=!0)),p&&\"IDENTIFIER\"===F&&\":\"!==f[0]&&this.token(\",\",\",\",0,0,w),u.length}},{key:\"numberToken\",value:function numberToken(){var e,a,t,o,n,r;if(!(t=U.exec(this.chunk)))return 0;switch(o=t[0],a=o.length,!1){case!/^0[BOX]/.test(o):this.error(\"radix prefix in '\"+o+\"' must be lowercase\",{offset:1});break;case!/^(?!0x).*E/.test(o):this.error(\"exponential notation in '\"+o+\"' must be indicated with a lowercase 'e'\",{offset:o.indexOf(\"E\")});break;case!/^0\\d*[89]/.test(o):this.error(\"decimal literal '\"+o+\"' must not be prefixed with '0'\",{length:a});break;case!/^0\\d+/.test(o):this.error(\"octal literal '\"+o+\"' must be prefixed with '0o'\",{length:a})}return e=function(){switch(o.charAt(1)){case\"b\":return 2;case\"o\":return 8;case\"x\":return 16;default:return null}}(),n=null==e?parseFloat(o):parseInt(o.slice(2),e),r=Infinity===n?\"INFINITY\":\"NUMBER\",this.token(r,o,0,a),a}},{key:\"stringToken\",value:function stringToken(){var e=this,a=oe.exec(this.chunk)||[],t=_slicedToArray(a,1),o,n,r,l,s,d,c,i,p,u,m,h,g,f,y,k;if(h=t[0],!h)return 0;m=this.prev(),m&&\"from\"===this.value()&&(this.seenImport||this.seenExport)&&(m[0]=\"FROM\"),f=function(){return\"'\"===h?te:'\"'===h?Q:\"'''\"===h?b:'\"\"\"'===h?N:void 0}(),d=3===h.length;var T=this.matchWithInterpolations(f,h);if(k=T.tokens,s=T.index,o=k.length-1,r=h.charAt(0),d){for(i=null,l=function(){var e,a,t;for(t=[],c=e=0,a=k.length;e<a;c=++e)y=k[c],\"NEOSTRING\"===y[0]&&t.push(y[1]);return t}().join(\"#{}\");u=v.exec(l);)n=u[1],(null===i||0<(g=n.length)&&g<i.length)&&(i=n);i&&(p=RegExp(\"\\\\n\"+i,\"g\")),this.mergeInterpolationTokens(k,{delimiter:r},function(a,t){return a=e.formatString(a,{delimiter:h}),p&&(a=a.replace(p,\"\\n\")),0===t&&(a=a.replace(O,\"\")),t===o&&(a=a.replace(ne,\"\")),a})}else this.mergeInterpolationTokens(k,{delimiter:r},function(a,t){return a=e.formatString(a,{delimiter:h}),a=a.replace(K,function(e,n){return 0===t&&0===n||t===o&&n+e.length===a.length?\"\":\" \"}),a});return this.atCSXTag()&&this.token(\",\",\",\",0,0,this.prev),s}},{key:\"commentToken\",value:function commentToken(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,t,o,n,r,l,s,i,d,c,u,m;if(!(i=e.match(p)))return 0;var h=i,g=_slicedToArray(h,2);return t=g[0],l=g[1],r=null,c=/^\\s*\\n+\\s*#/.test(t),l?(d=T.exec(t),d&&this.error(\"block comments cannot contain \"+d[0],{offset:d.index,length:d[0].length}),e=e.replace(\"###\"+l+\"###\",\"\"),e=e.replace(/^\\n+/,\"\"),this.lineToken(e),n=l,0<=a.call(n,\"\\n\")&&(n=n.replace(RegExp(\"\\\\n\"+ve(\" \",this.indent),\"g\"),\"\\n\")),r=[n]):(n=t.replace(/^(\\n*)/,\"\"),n=n.replace(/^([ |\\t]*)#/gm,\"\"),r=n.split(\"\\n\")),o=function(){var e,a,t;for(t=[],s=e=0,a=r.length;e<a;s=++e)n=r[s],t.push({content:n,here:null!=l,newLine:c||0!==s});return t}(),m=this.prev(),m?ue(o,m):(o[0].newLine=!0,this.lineToken(this.chunk.slice(t.length)),u=this.makeToken(\"JS\",\"\"),u.generated=!0,u.comments=o,this.tokens.push(u),this.newlineToken(0)),t.length}},{key:\"jsToken\",value:function jsToken(){var e,a;return\"`\"===this.chunk.charAt(0)&&(e=C.exec(this.chunk)||A.exec(this.chunk))?(a=e[1].replace(/\\\\+(`|$)/g,function(e){return e.slice(-Math.ceil(e.length/2))}),this.token(\"JS\",a,0,e[0].length),e[0].length):0}},{key:\"regexToken\",value:function regexToken(){var e=this,t,o,n,r,s,i,d,c,p,u,m,h,g,f,y,k;switch(!1){case!(u=W.exec(this.chunk)):this.error(\"regular expressions cannot begin with \"+u[2],{offset:u.index+u[1].length});break;case!(u=this.matchWithInterpolations($,\"///\")):var T=u;if(k=T.tokens,d=T.index,r=this.chunk.slice(0,d).match(/\\s+(#(?!{).*)/g),r)for(c=0,p=r.length;c<p;c++)n=r[c],this.commentToken(n);break;case!(u=G.exec(this.chunk)):var N=u,v=_slicedToArray(N,3);if(y=v[0],t=v[1],o=v[2],this.validateEscapes(t,{isRegex:!0,offsetInChunk:1}),d=y.length,h=this.prev(),h)if(h.spaced&&(g=h[0],0<=a.call(l,g))){if(!o||B.test(y))return 0}else if(f=h[0],0<=a.call(M,f))return 0;o||this.error(\"missing / (unclosed regex)\");break;default:return 0}var b=H.exec(this.chunk.slice(d)),_=_slicedToArray(b,1);switch(i=_[0],s=d+i.length,m=this.makeToken(\"REGEX\",null,0,s),!1){case!!ce.test(i):this.error(\"invalid regular expression flags \"+i,{offset:d,length:i.length});break;case!(y||1===k.length):t=t?this.formatRegex(t,{flags:i,delimiter:\"/\"}):this.formatHeregex(k[0][1],{flags:i}),this.token(\"REGEX\",\"\"+this.makeDelimitedLiteral(t,{delimiter:\"/\"})+i,0,s,m);break;default:this.token(\"REGEX_START\",\"(\",0,0,m),this.token(\"IDENTIFIER\",\"RegExp\",0,0),this.token(\"CALL_START\",\"(\",0,0),this.mergeInterpolationTokens(k,{delimiter:'\"',double:!0},function(a){return e.formatHeregex(a,{flags:i})}),i&&(this.token(\",\",\",\",d-1,0),this.token(\"STRING\",'\"'+i+'\"',d-1,i.length)),this.token(\")\",\")\",s-1,0),this.token(\"REGEX_END\",\")\",s-1,0)}return s}},{key:\"lineToken\",value:function lineToken(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,a,t,o,n,r,l,s,i,d;if(!(n=j.exec(e)))return 0;if(o=n[0],i=this.prev(),a=null!=i&&\"\\\\\"===i[0],a&&this.seenFor||(this.seenFor=!1),this.importSpecifierList||(this.seenImport=!1),this.exportSpecifierList||(this.seenExport=!1),d=o.length-1-o.lastIndexOf(\"\\n\"),s=this.unfinished(),l=0<d?o.slice(-d):\"\",!/^(.?)\\1*$/.exec(l))return this.error(\"mixed indentation\",{offset:o.length}),o.length;if(r=Math.min(l.length,this.indentLiteral.length),l.slice(0,r)!==this.indentLiteral.slice(0,r))return this.error(\"indentation mismatch\",{offset:o.length}),o.length;if(d-this.indebt===this.indent)return s?this.suppressNewlines():this.newlineToken(0),o.length;if(d>this.indent){if(s)return this.indebt=d-this.indent,this.suppressNewlines(),o.length;if(!this.tokens.length)return this.baseIndent=this.indent=d,this.indentLiteral=l,o.length;t=d-this.indent+this.outdebt,this.token(\"INDENT\",t,o.length-d,d),this.indents.push(t),this.ends.push({tag:\"OUTDENT\"}),this.outdebt=this.indebt=0,this.indent=d,this.indentLiteral=l}else d<this.baseIndent?this.error(\"missing indentation\",{offset:o.length}):(this.indebt=0,this.outdentToken(this.indent-d,s,o.length));return o.length}},{key:\"outdentToken\",value:function outdentToken(e,t,o){var n,r,l,s;for(n=this.indent-e;0<e;)l=this.indents[this.indents.length-1],l?this.outdebt&&e<=this.outdebt?(this.outdebt-=e,e=0):(r=this.indents.pop()+this.outdebt,o&&(s=this.chunk[o],0<=a.call(E,s))&&(n-=r-e,e=r),this.outdebt=0,this.pair(\"OUTDENT\"),this.token(\"OUTDENT\",e,0,o),e-=r):this.outdebt=e=0;return r&&(this.outdebt-=e),this.suppressSemicolons(),\"TERMINATOR\"===this.tag()||t||this.token(\"TERMINATOR\",\"\\n\",o,0),this.indent=n,this.indentLiteral=this.indentLiteral.slice(0,n),this}},{key:\"whitespaceToken\",value:function whitespaceToken(){var e,a,t;return(e=pe.exec(this.chunk))||(a=\"\\n\"===this.chunk.charAt(0))?(t=this.prev(),t&&(t[e?\"spaced\":\"newLine\"]=!0),e?e[0].length:0):0}},{key:\"newlineToken\",value:function newlineToken(e){return this.suppressSemicolons(),\"TERMINATOR\"!==this.tag()&&this.token(\"TERMINATOR\",\"\\n\",e,0),this}},{key:\"suppressNewlines\",value:function suppressNewlines(){var e;return e=this.prev(),\"\\\\\"===e[1]&&(e.comments&&1<this.tokens.length&&ue(e.comments,this.tokens[this.tokens.length-2]),this.tokens.pop()),this}},{key:\"csxToken\",value:function csxToken(){var e=this,t,o,n,r,l,s,i,d,c,p,m,h,g,T;if(l=this.chunk[0],m=0<this.tokens.length?this.tokens[this.tokens.length-1][0]:\"\",\"<\"===l){if(d=y.exec(this.chunk.slice(1))||f.exec(this.chunk.slice(1)),!(d&&(0<this.csxDepth||!(p=this.prev())||p.spaced||(h=p[0],0>a.call(u,h)))))return 0;var N=d,v=_slicedToArray(N,3);return i=v[0],s=v[1],o=v[2],c=this.token(\"CSX_TAG\",s,1,s.length),this.token(\"CALL_START\",\"(\"),this.token(\"[\",\"[\"),this.ends.push({tag:\"/>\",origin:c,name:s}),this.csxDepth++,s.length+1}if(n=this.atCSXTag()){if(\"/>\"===this.chunk.slice(0,2))return this.pair(\"/>\"),this.token(\"]\",\"]\",0,2),this.token(\"CALL_END\",\")\",0,2),this.csxDepth--,2;if(\"{\"===l)return\":\"===m?(g=this.token(\"(\",\"(\"),this.csxObjAttribute[this.csxDepth]=!1):(g=this.token(\"{\",\"{\"),this.csxObjAttribute[this.csxDepth]=!0),this.ends.push({tag:\"}\",origin:g}),1;if(\">\"===l){this.pair(\"/>\"),c=this.token(\"]\",\"]\"),this.token(\",\",\",\");var b=this.matchWithInterpolations(I,\">\",\"</\",k);return T=b.tokens,r=b.index,this.mergeInterpolationTokens(T,{delimiter:'\"'},function(a){return e.formatString(a,{delimiter:\">\"})}),d=y.exec(this.chunk.slice(r))||f.exec(this.chunk.slice(r)),d&&d[1]===n.name||this.error(\"expected corresponding CSX closing tag for \"+n.name,n.origin[2]),t=r+n.name.length,\">\"!==this.chunk[t]&&this.error(\"missing closing > after tag name\",{offset:t,length:1}),this.token(\"CALL_END\",\")\",r,n.name.length+1),this.csxDepth--,t+1}return 0}return this.atCSXTag(1)?\"}\"===l?(this.pair(l),this.csxObjAttribute[this.csxDepth]?(this.token(\"}\",\"}\"),this.csxObjAttribute[this.csxDepth]=!1):this.token(\")\",\")\"),this.token(\",\",\",\"),1):0:0}},{key:\"atCSXTag\",value:function atCSXTag(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,a,t,o;if(0===this.csxDepth)return!1;for(a=this.ends.length-1;\"OUTDENT\"===(null==(o=this.ends[a])?void 0:o.tag)||0<e--;)a--;return t=this.ends[a],\"/>\"===(null==t?void 0:t.tag)&&t}},{key:\"literalToken\",value:function literalToken(){var e,t,o,n,r,i,d,c,p,u,g,f,y;if(e=V.exec(this.chunk)){var k=e,T=_slicedToArray(k,1);y=T[0],s.test(y)&&this.tagParameters()}else y=this.chunk.charAt(0);if(g=y,n=this.prev(),n&&0<=a.call([\"=\"].concat(_toConsumableArray(h)),y)&&(u=!1,\"=\"!==y||\"||\"!==(r=n[1])&&\"&&\"!==r||n.spaced||(n[0]=\"COMPOUND_ASSIGN\",n[1]+=\"=\",n=this.tokens[this.tokens.length-2],u=!0),n&&\"PROPERTY\"!==n[0]&&(o=null==(i=n.origin)?n:i,t=ye(n[1],o[1]),t&&this.error(t,o[2])),u))return y.length;if(\"{\"===y&&this.seenImport?this.importSpecifierList=!0:this.importSpecifierList&&\"}\"===y?this.importSpecifierList=!1:\"{\"===y&&\"EXPORT\"===(null==n?void 0:n[0])?this.exportSpecifierList=!0:this.exportSpecifierList&&\"}\"===y&&(this.exportSpecifierList=!1),\";\"===y)(d=null==n?void 0:n[0],0<=a.call([\"=\"].concat(_toConsumableArray(ie)),d))&&this.error(\"unexpected ;\"),this.seenFor=this.seenImport=this.seenExport=!1,g=\"TERMINATOR\";else if(\"*\"===y&&\"EXPORT\"===(null==n?void 0:n[0]))g=\"EXPORT_ALL\";else if(0<=a.call(P,y))g=\"MATH\";else if(0<=a.call(m,y))g=\"COMPARE\";else if(0<=a.call(h,y))g=\"COMPOUND_ASSIGN\";else if(0<=a.call(le,y))g=\"UNARY\";else if(0<=a.call(se,y))g=\"UNARY_MATH\";else if(0<=a.call(J,y))g=\"SHIFT\";else if(\"?\"===y&&(null==n?void 0:n.spaced))g=\"BIN?\";else if(n)if(\"(\"===y&&!n.spaced&&(c=n[0],0<=a.call(l,c)))\"?\"===n[0]&&(n[0]=\"FUNC_EXIST\"),g=\"CALL_START\";else if(\"[\"===y&&((p=n[0],0<=a.call(x,p))&&!n.spaced||\"::\"===n[0]))switch(g=\"INDEX_START\",n[0]){case\"?\":n[0]=\"INDEX_SOAK\"}return f=this.makeToken(g,y),\"(\"===y||\"{\"===y||\"[\"===y?this.ends.push({tag:S[y],origin:f}):\")\"===y||\"}\"===y||\"]\"===y?this.pair(y):void 0,this.tokens.push(this.makeToken(g,y)),y.length}},{key:\"tagParameters\",value:function tagParameters(){var e,a,t,o,n;if(\")\"!==this.tag())return this;for(t=[],n=this.tokens,e=n.length,a=n[--e],a[0]=\"PARAM_END\";o=n[--e];)switch(o[0]){case\")\":t.push(o);break;case\"(\":case\"CALL_START\":if(t.length)t.pop();else return\"(\"===o[0]?(o[0]=\"PARAM_START\",this):(a[0]=\"CALL_END\",this)}return this}},{key:\"closeIndentation\",value:function closeIndentation(){return this.outdentToken(this.indent)}},{key:\"matchWithInterpolations\",value:function matchWithInterpolations(a,o,n,r){var l,s,i,d,c,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E;if(null==n&&(n=o),null==r&&(r=/^#\\{/),E=[],v=o.length,this.chunk.slice(0,v)!==o)return null;for(C=this.chunk.slice(v);;){var x=a.exec(C),I=_slicedToArray(x,1);if(D=I[0],this.validateEscapes(D,{isRegex:\"/\"===o.charAt(0),offsetInChunk:v}),E.push(this.makeToken(\"NEOSTRING\",D,v)),C=C.slice(D.length),v+=D.length,!(T=r.exec(C)))break;var S=T,A=_slicedToArray(S,1);f=A[0],g=f.length-1;var R=this.getLineAndColumnFromChunk(v+g),O=_slicedToArray(R,2);k=O[0],u=O[1],_=C.slice(g);var L=(new e).tokenize(_,{line:k,column:u,untilBalanced:!0});if(N=L.tokens,h=L.index,h+=g,c=\"}\"===C[h-1],c){var F,w,P,j;F=N,w=_slicedToArray(F,1),b=w[0],F,P=t.call(N,-1),j=_slicedToArray(P,1),p=j[0],P,b[0]=b[1]=\"(\",p[0]=p[1]=\")\",p.origin=[\"\",\"end of interpolation\",p[2]]}\"TERMINATOR\"===(null==($=N[1])?void 0:$[0])&&N.splice(1,1),c||(b=this.makeToken(\"(\",\"(\",v,0),p=this.makeToken(\")\",\")\",v+h,0),N=[b].concat(_toConsumableArray(N),[p])),E.push([\"TOKENS\",N]),C=C.slice(h),v+=h}return C.slice(0,n.length)!==n&&this.error(\"missing \"+n,{length:o.length}),l=E,s=_slicedToArray(l,1),m=s[0],l,i=t.call(E,-1),d=_slicedToArray(i,1),y=d[0],i,m[2].first_column-=o.length,\"\\n\"===y[1].substr(-1)?(y[2].last_line+=1,y[2].last_column=n.length-1):y[2].last_column+=n.length,0===y[1].length&&(y[2].last_column-=1),{tokens:E,index:v+n.length}}},{key:\"mergeInterpolationTokens\",value:function mergeInterpolationTokens(e,a,o){var n,r,l,s,i,d,c,p,u,m,h,g,f,y,k,T,N,v,b;for(1<e.length&&(h=this.token(\"STRING_START\",\"(\",0,0)),l=this.tokens.length,s=i=0,p=e.length;i<p;s=++i){var $;T=e[s];var _=T,C=_slicedToArray(_,2);switch(k=C[0],b=C[1],k){case\"TOKENS\":if(2===b.length){if(!(b[0].comments||b[1].comments))continue;for(g=0===this.csxDepth?this.makeToken(\"STRING\",\"''\"):this.makeToken(\"JS\",\"\"),g[2]=b[0][2],d=0,u=b.length;d<u;d++){var D;(v=b[d],!!v.comments)&&(null==g.comments&&(g.comments=[]),(D=g.comments).push.apply(D,_toConsumableArray(v.comments)))}b.splice(1,0,g)}m=b[0],N=b;break;case\"NEOSTRING\":if(n=o.call(this,T[1],s),0===n.length)if(0===s)r=this.tokens.length;else continue;2===s&&null!=r&&this.tokens.splice(r,2),T[0]=\"STRING\",T[1]=this.makeDelimitedLiteral(n,a),m=T,N=[T]}this.tokens.length>l&&(f=this.token(\"+\",\"+\"),f[2]={first_line:m[2].first_line,first_column:m[2].first_column,last_line:m[2].first_line,last_column:m[2].first_column}),($=this.tokens).push.apply($,_toConsumableArray(N))}if(h){var E=t.call(e,-1),x=_slicedToArray(E,1);return c=x[0],h.origin=[\"STRING\",null,{first_line:h[2].first_line,first_column:h[2].first_column,last_line:c[2].last_line,last_column:c[2].last_column}],h[2]=h.origin[2],y=this.token(\"STRING_END\",\")\"),y[2]={first_line:c[2].last_line,first_column:c[2].last_column,last_line:c[2].last_line,last_column:c[2].last_column}}}},{key:\"pair\",value:function pair(e){var a,o,n,r,l,s,i;if(l=this.ends,a=t.call(l,-1),o=_slicedToArray(a,1),r=o[0],a,e!==(i=null==r?void 0:r.tag)){var d,c;return\"OUTDENT\"!==i&&this.error(\"unmatched \"+e),s=this.indents,d=t.call(s,-1),c=_slicedToArray(d,1),n=c[0],d,this.outdentToken(n,!0),this.pair(e)}return this.ends.pop()}},{key:\"getLineAndColumnFromChunk\",value:function getLineAndColumnFromChunk(e){var a,o,n,r,l;if(0===e)return[this.chunkLine,this.chunkColumn];if(l=e>=this.chunk.length?this.chunk:this.chunk.slice(0,+(e-1)+1||9e9),n=he(l,\"\\n\"),a=this.chunkColumn,0<n){var s,i;r=l.split(\"\\n\"),s=t.call(r,-1),i=_slicedToArray(s,1),o=i[0],s,a=o.length}else a+=l.length;return[this.chunkLine+n,a]}},{key:\"makeToken\",value:function makeToken(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:a.length,n,r,l;r={};var s=this.getLineAndColumnFromChunk(t),i=_slicedToArray(s,2);r.first_line=i[0],r.first_column=i[1],n=0<o?o-1:0;var d=this.getLineAndColumnFromChunk(t+n),c=_slicedToArray(d,2);return r.last_line=c[0],r.last_column=c[1],l=[e,a,r],l}},{key:\"token\",value:function(e,a,t,o,n){var r;return r=this.makeToken(e,a,t,o),n&&(r.origin=n),this.tokens.push(r),r}},{key:\"tag\",value:function tag(){var e,a,o,n;return o=this.tokens,e=t.call(o,-1),a=_slicedToArray(e,1),n=a[0],e,null==n?void 0:n[0]}},{key:\"value\",value:function value(){var e=!!(0<arguments.length&&void 0!==arguments[0])&&arguments[0],a,o,n,r,l;return n=this.tokens,a=t.call(n,-1),o=_slicedToArray(a,1),l=o[0],a,e&&null!=(null==l?void 0:l.origin)?null==(r=l.origin)?void 0:r[1]:null==l?void 0:l[1]}},{key:\"prev\",value:function prev(){return this.tokens[this.tokens.length-1]}},{key:\"unfinished\",value:function unfinished(){var e;return F.test(this.chunk)||(e=this.tag(),0<=a.call(ie,e))}},{key:\"formatString\",value:function formatString(e,a){return this.replaceUnicodeCodePointEscapes(e.replace(ae,\"$1\"),a)}},{key:\"formatHeregex\",value:function formatHeregex(e,a){return this.formatRegex(e.replace(_,\"$1$2\"),Ne(a,{delimiter:\"///\"}))}},{key:\"formatRegex\",value:function formatRegex(e,a){return this.replaceUnicodeCodePointEscapes(e,a)}},{key:\"unicodeCodePointToUnicodeEscapes\",value:function unicodeCodePointToUnicodeEscapes(e){var a,t,o;return(o=function(e){var a;return a=e.toString(16),\"\\\\u\"+ve(\"0\",4-a.length)+a},65536>e)?o(e):(a=_Mathfloor((e-65536)/1024)+55296,t=(e-65536)%1024+56320,\"\"+o(a)+o(t))}},{key:\"replaceUnicodeCodePointEscapes\",value:function replaceUnicodeCodePointEscapes(e,t){var o=this,n;return n=null!=t.flags&&0>a.call(t.flags,\"u\"),e.replace(de,function(e,a,r,l){var s;return a?a:(s=parseInt(r,16),1114111<s&&o.error(\"unicode code point escapes greater than \\\\u{10ffff} are not allowed\",{offset:l+t.delimiter.length,length:r.length+4}),n?o.unicodeCodePointToUnicodeEscapes(s):e)})}},{key:\"validateEscapes\",value:function validateEscapes(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,r,l,s,i,d,c,p;if(r=a.isRegex?X:ee,l=r.exec(e),!!l)return l[0],t=l[1],i=l[2],o=l[3],p=l[4],c=l[5],s=i?\"octal escape sequences are not allowed\":\"invalid escape sequence\",n=\"\\\\\"+(i||o||p||c),this.error(s+\" \"+n,{offset:(null==(d=a.offsetInChunk)?0:d)+l.index+t.length,length:n.length})}},{key:\"makeDelimitedLiteral\",value:function makeDelimitedLiteral(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t;return\"\"===e&&\"/\"===a.delimiter&&(e=\"(?:)\"),t=RegExp(\"(\\\\\\\\\\\\\\\\)|(\\\\\\\\0(?=[1-7]))|\\\\\\\\?(\"+a.delimiter+\")|\\\\\\\\?(?:(\\\\n)|(\\\\r)|(\\\\u2028)|(\\\\u2029))|(\\\\\\\\.)\",\"g\"),e=e.replace(t,function(e,t,o,n,r,l,s,i,d){switch(!1){case!t:return a.double?t+t:t;case!o:return\"\\\\x00\";case!n:return\"\\\\\"+n;case!r:return\"\\\\n\";case!l:return\"\\\\r\";case!s:return\"\\\\u2028\";case!i:return\"\\\\u2029\";case!d:return a.double?\"\\\\\"+d:d}}),\"\"+a.delimiter+e+a.delimiter}},{key:\"suppressSemicolons\",value:function suppressSemicolons(){var e,t,o;for(o=[];\";\"===this.value();)this.tokens.pop(),(e=null==(t=this.prev())?void 0:t[0],0<=a.call([\"=\"].concat(_toConsumableArray(ie)),e))?o.push(this.error(\"unexpected ;\")):o.push(void 0);return o}},{key:\"error\",value:function error(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,r,l,s,i;return l=\"first_line\"in a?a:(t=this.getLineAndColumnFromChunk(null==(s=a.offset)?0:s),o=_slicedToArray(t,2),r=o[0],n=o[1],t,{first_line:r,first_column:n,last_column:n+(null==(i=a.length)?1:i)-1}),$e(e,l)}}]),e}(),ye=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:e;switch(!1){case 0>a.call([].concat(_toConsumableArray(R),_toConsumableArray(c)),e):return\"keyword '\"+t+\"' can't be assigned\";case 0>a.call(Z,e):return\"'\"+t+\"' can't be assigned\";case 0>a.call(q,e):return\"reserved word '\"+t+\"' can't be assigned\";default:return!1}},e.isUnassignable=ye,fe=function(e){var a;return\"IDENTIFIER\"===e[0]?(\"from\"===e[1]&&(e[1][0]=\"IDENTIFIER\",!0),!0):\"FOR\"!==e[0]&&\"{\"!==(a=e[1])&&\"[\"!==a&&\",\"!==a&&\":\"!==a},R=[\"true\",\"false\",\"null\",\"this\",\"new\",\"delete\",\"typeof\",\"in\",\"instanceof\",\"return\",\"throw\",\"break\",\"continue\",\"debugger\",\"yield\",\"await\",\"if\",\"else\",\"switch\",\"for\",\"while\",\"do\",\"try\",\"catch\",\"finally\",\"class\",\"extends\",\"super\",\"import\",\"export\",\"default\"],c=[\"undefined\",\"Infinity\",\"NaN\",\"then\",\"unless\",\"until\",\"loop\",\"of\",\"by\",\"when\"],d={and:\"&&\",or:\"||\",is:\"==\",isnt:\"!=\",not:\"!\",yes:\"true\",no:\"false\",on:\"true\",off:\"false\"},i=function(){var e;for(ke in e=[],d)e.push(ke);return e}(),c=c.concat(i),q=[\"case\",\"function\",\"var\",\"void\",\"with\",\"const\",\"let\",\"enum\",\"native\",\"implements\",\"interface\",\"package\",\"private\",\"protected\",\"public\",\"static\"],Z=[\"arguments\",\"eval\"],e.JS_FORBIDDEN=R.concat(q).concat(Z),n=65279,D=/^(?!\\d)((?:(?!\\s)[$\\w\\x7f-\\uffff])+)([^\\n\\S]*:(?!:))?/,y=/^(?![\\d<])((?:(?!\\s)[\\.\\-$\\w\\x7f-\\uffff])+)/,f=/^()>/,g=/^(?!\\d)((?:(?!\\s)[\\-$\\w\\x7f-\\uffff])+)([^\\S]*=(?!=))?/,U=/^0b[01]+|^0o[0-7]+|^0x[\\da-f]+|^\\d*\\.?\\d+(?:e[+-]?\\d+)?/i,V=/^(?:[-=]>|[-+*\\/%<>&|^!?=]=|>>>=?|([-+:])\\1|([&|<>*\\/%])\\2=?|\\?(\\.|::)|\\.{2,3})/,pe=/^[^\\n\\S]+/,p=/^\\s*###([^#][\\s\\S]*?)(?:###[^\\n\\S]*|###$)|^(?:\\s*#(?!##[^#]).*)+/,s=/^[-=]>/,j=/^(?:\\n[^\\n\\S]*)+/,A=/^`(?!``)((?:[^`\\\\]|\\\\[\\s\\S])*)`/,C=/^```((?:[^`\\\\]|\\\\[\\s\\S]|`(?!``))*)```/,oe=/^(?:'''|\"\"\"|'|\")/,te=/^(?:[^\\\\']|\\\\[\\s\\S])*/,Q=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\\#(?!\\{))*/,b=/^(?:[^\\\\']|\\\\[\\s\\S]|'(?!''))*/,N=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\"(?!\"\")|\\#(?!\\{))*/,I=/^(?:[^\\{<])*/,k=/^(?:\\{|<(?!\\/))/,ae=/((?:\\\\\\\\)+)|\\\\[^\\S\\n]*\\n\\s*/g,K=/\\s*\\n\\s*/g,v=/\\n+([^\\n\\S]*)(?=\\S)/g,G=/^\\/(?!\\/)((?:[^[\\/\\n\\\\]|\\\\[^\\n]|\\[(?:\\\\[^\\n]|[^\\]\\n\\\\])*\\])*)(\\/)?/,H=/^\\w*/,ce=/^(?!.*(.).*\\1)[imguy]*$/,$=/^(?:[^\\\\\\/#\\s]|\\\\[\\s\\S]|\\/(?!\\/\\/)|\\#(?!\\{)|\\s+(?:#(?!\\{).*)?)*/,_=/((?:\\\\\\\\)+)|\\\\(\\s)|\\s+(?:#.*)?/g,W=/^(\\/|\\/{3}\\s*)(\\*)/,B=/^\\/=?\\s/,T=/\\*\\//,F=/^\\s*(?:,|\\??\\.(?![.\\d])|::)/,ee=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7]|[1-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,X=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,de=/(\\\\\\\\)|\\\\u\\{([\\da-fA-F]+)\\}/g,O=/^[^\\n\\S]*\\n/,ne=/\\n[^\\n\\S]*$/,re=/\\s+$/,h=[\"-=\",\"+=\",\"/=\",\"*=\",\"%=\",\"||=\",\"&&=\",\"?=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"^=\",\"|=\",\"**=\",\"//=\",\"%%=\"],le=[\"NEW\",\"TYPEOF\",\"DELETE\",\"DO\"],se=[\"!\",\"~\"],J=[\"<<\",\">>\",\">>>\"],m=[\"==\",\"!=\",\"<\",\">\",\"<=\",\">=\"],P=[\"*\",\"/\",\"%\",\"//\",\"%%\"],Y=[\"IN\",\"OF\",\"INSTANCEOF\"],r=[\"TRUE\",\"FALSE\"],l=[\"IDENTIFIER\",\"PROPERTY\",\")\",\"]\",\"?\",\"@\",\"THIS\",\"SUPER\"],x=l.concat([\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_END\",\"REGEX\",\"REGEX_END\",\"BOOL\",\"NULL\",\"UNDEFINED\",\"}\",\"::\"]),u=[\"IDENTIFIER\",\")\",\"]\",\"NUMBER\"],M=x.concat([\"++\",\"--\"]),L=[\"INDENT\",\"OUTDENT\",\"TERMINATOR\"],E=[\")\",\"}\",\"]\"],ie=[\"\\\\\",\".\",\"?.\",\"?::\",\"UNARY\",\"MATH\",\"UNARY_MATH\",\"+\",\"-\",\"**\",\"SHIFT\",\"RELATION\",\"COMPARE\",\"&\",\"^\",\"|\",\"&&\",\"||\",\"BIN?\",\"EXTENDS\"]}.call(this),{exports:e}.exports}(),require[\"./parser\"]=function(){var e={},a={exports:e},t=function(){function e(){this.yy={}}var a=function(e,a,t,o){for(t=t||{},o=e.length;o--;t[e[o]]=a);return t},t=[1,24],o=[1,56],n=[1,91],r=[1,92],l=[1,87],s=[1,93],i=[1,94],d=[1,89],c=[1,90],p=[1,64],u=[1,66],m=[1,67],h=[1,68],g=[1,69],f=[1,70],y=[1,72],k=[1,73],T=[1,58],N=[1,42],v=[1,36],b=[1,76],$=[1,77],_=[1,86],C=[1,54],D=[1,59],E=[1,60],x=[1,74],I=[1,75],S=[1,47],A=[1,55],R=[1,71],O=[1,81],L=[1,82],F=[1,83],w=[1,84],P=[1,53],j=[1,80],M=[1,38],U=[1,39],V=[1,40],B=[1,41],G=[1,43],H=[1,44],W=[1,95],X=[1,6,36,47,146],Y=[1,6,35,36,47,69,70,93,127,135,146,149,157],q=[1,113],z=[1,114],J=[1,115],K=[1,110],Z=[1,98],Q=[1,97],ee=[1,96],ae=[1,99],te=[1,100],oe=[1,101],ne=[1,102],re=[1,103],le=[1,104],se=[1,105],ie=[1,106],de=[1,107],ce=[1,108],pe=[1,109],ue=[1,117],me=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],he=[2,196],ge=[1,123],fe=[1,128],ye=[1,124],ke=[1,125],Te=[1,126],Ne=[1,129],ve=[1,122],be=[1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174],$e=[1,6,35,36,45,46,47,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],_e=[2,122],Ce=[2,126],De=[6,35,88,93],Ee=[2,99],xe=[1,141],Ie=[1,135],Se=[1,140],Ae=[1,144],Re=[1,149],Oe=[1,147],Le=[1,151],Fe=[1,155],we=[1,153],Pe=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],je=[2,119],Me=[1,6,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Ue=[2,31],Ve=[1,183],Be=[2,86],Ge=[1,187],He=[1,193],We=[1,208],Xe=[1,203],Ye=[1,212],qe=[1,209],ze=[1,214],Je=[1,215],Ke=[1,217],Ze=[14,32,35,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Qe=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],ea=[1,228],aa=[2,142],ta=[1,250],oa=[1,245],na=[1,256],ra=[1,6,35,36,45,46,47,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],la=[1,6,33,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,117,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],sa=[1,6,35,36,45,46,47,52,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],ia=[1,286],da=[45,46,126],ca=[1,297],pa=[1,296],ua=[6,35],ma=[2,97],ha=[1,303],ga=[6,35,36,88,93],fa=[6,35,36,61,70,88,93],ya=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],ka=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,184,185,186,187,188,189,190,191,192,193],Ta=[2,347],Na=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,185,186,187,188,189,190,191,192,193],va=[45,46,80,81,101,102,103,105,125,126],ba=[1,330],$a=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174],_a=[2,84],Ca=[1,346],Da=[1,348],Ea=[1,353],xa=[1,355],Ia=[6,35,69,93],Sa=[2,221],Aa=[2,222],Ra=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Oa=[1,369],La=[6,14,32,35,36,38,39,43,45,46,49,50,54,55,56,57,58,59,68,69,70,77,84,85,86,90,91,93,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Fa=[6,35,36,69,93],wa=[6,35,36,69,93,127],Pa=[1,6,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],ja=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,157,174],Ma=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,149,157,174],Ua=[2,273],Va=[164,165,166],Ba=[93,164,165,166],Ga=[6,35,109],Ha=[1,393],Wa=[6,35,36,93,109],Xa=[6,35,36,65,93,109],Ya=[1,399],qa=[1,400],za=[6,35,36,61,65,70,80,81,93,109,126],Ja=[6,35,36,70,80,81,93,109,126],Ka=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,185,186,187,188,189,190,191,192,193],Za=[2,339],Qa=[2,338],et=[1,6,35,36,45,46,47,52,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],at=[1,422],tt=[14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,83,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ot=[2,207],nt=[6,35,36],rt=[2,98],lt=[1,431],st=[1,432],it=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,142,143,146,148,149,150,156,157,169,171,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],dt=[1,312],ct=[36,169,171],pt=[1,6,36,47,69,70,83,88,93,109,127,135,146,149,157,174],ut=[1,467],mt=[1,473],ht=[1,6,35,36,47,69,70,93,127,135,146,149,157,174],gt=[2,113],ft=[1,486],yt=[1,487],kt=[6,35,36,69],Tt=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,169,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Nt=[1,6,35,36,47,69,70,93,127,135,146,149,157,169],vt=[2,286],bt=[2,287],$t=[2,302],_t=[1,510],Ct=[1,511],Dt=[6,35,36,109],Et=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,157,174],xt=[1,532],It=[6,35,36,93,127],St=[6,35,36,93],At=[1,6,35,36,47,69,70,83,88,93,109,127,135,142,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Rt=[35,93],Ot=[1,560],Lt=[1,561],Ft=[1,567],wt=[1,568],Pt=[2,258],jt=[2,261],Mt=[2,274],Ut=[1,617],Vt=[1,618],Bt=[2,288],Gt=[2,292],Ht=[2,289],Wt=[2,293],Xt=[2,290],Yt=[2,291],qt=[2,303],zt=[2,304],Jt=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174],Kt=[2,294],Zt=[2,296],Qt=[2,298],eo=[2,300],ao=[2,295],to=[2,297],oo=[2,299],no=[2,301],ro={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Line:5,TERMINATOR:6,Expression:7,ExpressionLine:8,Statement:9,FuncDirective:10,YieldReturn:11,AwaitReturn:12,Return:13,STATEMENT:14,Import:15,Export:16,Value:17,Code:18,Operation:19,Assign:20,If:21,Try:22,While:23,For:24,Switch:25,Class:26,Throw:27,Yield:28,CodeLine:29,IfLine:30,OperationLine:31,YIELD:32,FROM:33,Block:34,INDENT:35,OUTDENT:36,Identifier:37,IDENTIFIER:38,CSX_TAG:39,Property:40,PROPERTY:41,AlphaNumeric:42,NUMBER:43,String:44,STRING:45,STRING_START:46,STRING_END:47,Regex:48,REGEX:49,REGEX_START:50,Invocation:51,REGEX_END:52,Literal:53,JS:54,UNDEFINED:55,NULL:56,BOOL:57,INFINITY:58,NAN:59,Assignable:60,\"=\":61,AssignObj:62,ObjAssignable:63,ObjRestValue:64,\":\":65,SimpleObjAssignable:66,ThisProperty:67,\"[\":68,\"]\":69,\"...\":70,ObjSpreadExpr:71,ObjSpreadIdentifier:72,Object:73,Parenthetical:74,Super:75,This:76,SUPER:77,Arguments:78,ObjSpreadAccessor:79,\".\":80,INDEX_START:81,IndexValue:82,INDEX_END:83,RETURN:84,AWAIT:85,PARAM_START:86,ParamList:87,PARAM_END:88,FuncGlyph:89,\"->\":90,\"=>\":91,OptComma:92,\",\":93,Param:94,ParamVar:95,Array:96,Splat:97,SimpleAssignable:98,Accessor:99,Range:100,\"?.\":101,\"::\":102,\"?::\":103,Index:104,INDEX_SOAK:105,Slice:106,\"{\":107,AssignList:108,\"}\":109,CLASS:110,EXTENDS:111,IMPORT:112,ImportDefaultSpecifier:113,ImportNamespaceSpecifier:114,ImportSpecifierList:115,ImportSpecifier:116,AS:117,DEFAULT:118,IMPORT_ALL:119,EXPORT:120,ExportSpecifierList:121,EXPORT_ALL:122,ExportSpecifier:123,OptFuncExist:124,FUNC_EXIST:125,CALL_START:126,CALL_END:127,ArgList:128,THIS:129,\"@\":130,Elisions:131,ArgElisionList:132,OptElisions:133,RangeDots:134,\"..\":135,Arg:136,ArgElision:137,Elision:138,SimpleArgs:139,TRY:140,Catch:141,FINALLY:142,CATCH:143,THROW:144,\"(\":145,\")\":146,WhileLineSource:147,WHILE:148,WHEN:149,UNTIL:150,WhileSource:151,Loop:152,LOOP:153,ForBody:154,ForLineBody:155,FOR:156,BY:157,ForStart:158,ForSource:159,ForLineSource:160,ForVariables:161,OWN:162,ForValue:163,FORIN:164,FOROF:165,FORFROM:166,SWITCH:167,Whens:168,ELSE:169,When:170,LEADING_WHEN:171,IfBlock:172,IF:173,POST_IF:174,IfBlockLine:175,UNARY:176,UNARY_MATH:177,\"-\":178,\"+\":179,\"--\":180,\"++\":181,\"?\":182,MATH:183,\"**\":184,SHIFT:185,COMPARE:186,\"&\":187,\"^\":188,\"|\":189,\"&&\":190,\"||\":191,\"BIN?\":192,RELATION:193,COMPOUND_ASSIGN:194,$accept:0,$end:1},terminals_:{2:\"error\",6:\"TERMINATOR\",14:\"STATEMENT\",32:\"YIELD\",33:\"FROM\",35:\"INDENT\",36:\"OUTDENT\",38:\"IDENTIFIER\",39:\"CSX_TAG\",41:\"PROPERTY\",43:\"NUMBER\",45:\"STRING\",46:\"STRING_START\",47:\"STRING_END\",49:\"REGEX\",50:\"REGEX_START\",52:\"REGEX_END\",54:\"JS\",55:\"UNDEFINED\",56:\"NULL\",57:\"BOOL\",58:\"INFINITY\",59:\"NAN\",61:\"=\",65:\":\",68:\"[\",69:\"]\",70:\"...\",77:\"SUPER\",80:\".\",81:\"INDEX_START\",83:\"INDEX_END\",84:\"RETURN\",85:\"AWAIT\",86:\"PARAM_START\",88:\"PARAM_END\",90:\"->\",91:\"=>\",93:\",\",101:\"?.\",102:\"::\",103:\"?::\",105:\"INDEX_SOAK\",107:\"{\",109:\"}\",110:\"CLASS\",111:\"EXTENDS\",112:\"IMPORT\",117:\"AS\",118:\"DEFAULT\",119:\"IMPORT_ALL\",120:\"EXPORT\",122:\"EXPORT_ALL\",125:\"FUNC_EXIST\",126:\"CALL_START\",127:\"CALL_END\",129:\"THIS\",130:\"@\",135:\"..\",140:\"TRY\",142:\"FINALLY\",143:\"CATCH\",144:\"THROW\",145:\"(\",146:\")\",148:\"WHILE\",149:\"WHEN\",150:\"UNTIL\",153:\"LOOP\",156:\"FOR\",157:\"BY\",162:\"OWN\",164:\"FORIN\",165:\"FOROF\",166:\"FORFROM\",167:\"SWITCH\",169:\"ELSE\",171:\"LEADING_WHEN\",173:\"IF\",174:\"POST_IF\",176:\"UNARY\",177:\"UNARY_MATH\",178:\"-\",179:\"+\",180:\"--\",181:\"++\",182:\"?\",183:\"MATH\",184:\"**\",185:\"SHIFT\",186:\"COMPARE\",187:\"&\",188:\"^\",189:\"|\",190:\"&&\",191:\"||\",192:\"BIN?\",193:\"RELATION\",194:\"COMPOUND_ASSIGN\"},productions_:[0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[5,1],[5,1],[10,1],[10,1],[9,1],[9,1],[9,1],[9,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[8,1],[8,1],[8,1],[28,1],[28,2],[28,3],[34,2],[34,3],[37,1],[37,1],[40,1],[42,1],[42,1],[44,1],[44,3],[48,1],[48,3],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[20,3],[20,4],[20,5],[62,1],[62,1],[62,3],[62,5],[62,3],[62,5],[66,1],[66,1],[66,1],[66,3],[63,1],[63,1],[64,2],[64,2],[64,2],[64,2],[71,1],[71,1],[71,1],[71,1],[71,1],[71,2],[71,2],[71,2],[72,2],[72,2],[79,2],[79,3],[13,2],[13,4],[13,1],[11,3],[11,2],[12,3],[12,2],[18,5],[18,2],[29,5],[29,2],[89,1],[89,1],[92,0],[92,1],[87,0],[87,1],[87,3],[87,4],[87,6],[94,1],[94,2],[94,2],[94,3],[94,1],[95,1],[95,1],[95,1],[95,1],[97,2],[97,2],[98,1],[98,2],[98,2],[98,1],[60,1],[60,1],[60,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[75,3],[75,4],[99,2],[99,2],[99,2],[99,2],[99,1],[99,1],[104,3],[104,2],[82,1],[82,1],[73,4],[108,0],[108,1],[108,3],[108,4],[108,6],[26,1],[26,2],[26,3],[26,4],[26,2],[26,3],[26,4],[26,5],[15,2],[15,4],[15,4],[15,5],[15,7],[15,6],[15,9],[115,1],[115,3],[115,4],[115,4],[115,6],[116,1],[116,3],[116,1],[116,3],[113,1],[114,3],[16,3],[16,5],[16,2],[16,4],[16,5],[16,6],[16,3],[16,5],[16,4],[16,7],[121,1],[121,3],[121,4],[121,4],[121,6],[123,1],[123,3],[123,3],[123,1],[123,3],[51,3],[51,3],[51,3],[124,0],[124,1],[78,2],[78,4],[76,1],[76,1],[67,2],[96,2],[96,3],[96,4],[134,1],[134,1],[100,5],[100,5],[106,3],[106,2],[106,3],[106,2],[106,2],[106,1],[128,1],[128,3],[128,4],[128,4],[128,6],[136,1],[136,1],[136,1],[136,1],[132,1],[132,3],[132,4],[132,4],[132,6],[137,1],[137,2],[133,1],[133,2],[131,1],[131,2],[138,1],[139,1],[139,1],[139,3],[139,3],[22,2],[22,3],[22,4],[22,5],[141,3],[141,3],[141,2],[27,2],[27,4],[74,3],[74,5],[147,2],[147,4],[147,2],[147,4],[151,2],[151,4],[151,4],[151,2],[151,4],[151,4],[23,2],[23,2],[23,2],[23,2],[23,1],[152,2],[152,2],[24,2],[24,2],[24,2],[24,2],[154,2],[154,4],[154,2],[155,4],[155,2],[158,2],[158,3],[163,1],[163,1],[163,1],[163,1],[161,1],[161,3],[159,2],[159,2],[159,4],[159,4],[159,4],[159,4],[159,4],[159,4],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,2],[159,4],[159,4],[160,2],[160,2],[160,4],[160,4],[160,4],[160,4],[160,4],[160,4],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,2],[160,4],[160,4],[25,5],[25,5],[25,7],[25,7],[25,4],[25,6],[168,1],[168,2],[170,3],[170,4],[172,3],[172,5],[21,1],[21,3],[21,3],[21,3],[175,3],[175,5],[30,1],[30,3],[30,3],[30,3],[31,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,5],[19,4]],performAction:function(e,a,t,o,n,r,l){var s=r.length-1;switch(n){case 1:return this.$=o.addDataToNode(o,l[s],l[s])(new o.Block);break;case 2:return this.$=r[s];break;case 3:this.$=o.addDataToNode(o,l[s],l[s])(o.Block.wrap([r[s]]));break;case 4:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-2].push(r[s]));break;case 5:this.$=r[s-1];break;case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 40:case 45:case 47:case 57:case 62:case 63:case 64:case 66:case 67:case 72:case 73:case 74:case 75:case 76:case 97:case 98:case 109:case 110:case 111:case 112:case 118:case 119:case 122:case 127:case 136:case 221:case 222:case 223:case 225:case 237:case 238:case 280:case 281:case 330:case 336:case 342:this.$=r[s];break;case 13:this.$=o.addDataToNode(o,l[s],l[s])(new o.StatementLiteral(r[s]));break;case 31:this.$=o.addDataToNode(o,l[s],l[s])(new o.Op(r[s],new o.Value(new o.Literal(\"\"))));break;case 32:case 346:case 347:case 348:case 351:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(r[s-1],r[s]));break;case 33:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(r[s-2].concat(r[s-1]),r[s]));break;case 34:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Block);break;case 35:case 83:case 137:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-1]);break;case 36:this.$=o.addDataToNode(o,l[s],l[s])(new o.IdentifierLiteral(r[s]));break;case 37:this.$=o.addDataToNode(o,l[s],l[s])(new o.CSXTag(r[s]));break;case 38:this.$=o.addDataToNode(o,l[s],l[s])(new o.PropertyName(r[s]));break;case 39:this.$=o.addDataToNode(o,l[s],l[s])(new o.NumberLiteral(r[s]));break;case 41:this.$=o.addDataToNode(o,l[s],l[s])(new o.StringLiteral(r[s]));break;case 42:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.StringWithInterpolations(r[s-1]));break;case 43:this.$=o.addDataToNode(o,l[s],l[s])(new o.RegexLiteral(r[s]));break;case 44:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.RegexWithInterpolations(r[s-1].args));break;case 46:this.$=o.addDataToNode(o,l[s],l[s])(new o.PassthroughLiteral(r[s]));break;case 48:this.$=o.addDataToNode(o,l[s],l[s])(new o.UndefinedLiteral(r[s]));break;case 49:this.$=o.addDataToNode(o,l[s],l[s])(new o.NullLiteral(r[s]));break;case 50:this.$=o.addDataToNode(o,l[s],l[s])(new o.BooleanLiteral(r[s]));break;case 51:this.$=o.addDataToNode(o,l[s],l[s])(new o.InfinityLiteral(r[s]));break;case 52:this.$=o.addDataToNode(o,l[s],l[s])(new o.NaNLiteral(r[s]));break;case 53:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(r[s-2],r[s]));break;case 54:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Assign(r[s-3],r[s]));break;case 55:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(r[s-4],r[s-1]));break;case 56:case 115:case 120:case 121:case 123:case 124:case 125:case 126:case 128:case 282:case 283:this.$=o.addDataToNode(o,l[s],l[s])(new o.Value(r[s]));break;case 58:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(o.addDataToNode(o,l[s-2])(new o.Value(r[s-2])),r[s],\"object\",{operatorToken:o.addDataToNode(o,l[s-1])(new o.Literal(r[s-1]))}));break;case 59:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(o.addDataToNode(o,l[s-4])(new o.Value(r[s-4])),r[s-1],\"object\",{operatorToken:o.addDataToNode(o,l[s-3])(new o.Literal(r[s-3]))}));break;case 60:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(o.addDataToNode(o,l[s-2])(new o.Value(r[s-2])),r[s],null,{operatorToken:o.addDataToNode(o,l[s-1])(new o.Literal(r[s-1]))}));break;case 61:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(o.addDataToNode(o,l[s-4])(new o.Value(r[s-4])),r[s-1],null,{operatorToken:o.addDataToNode(o,l[s-3])(new o.Literal(r[s-3]))}));break;case 65:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Value(new o.ComputedPropertyName(r[s-1])));break;case 68:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(new o.Value(r[s-1])));break;case 69:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(new o.Value(r[s])));break;case 70:case 113:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(r[s-1]));break;case 71:case 114:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(r[s]));break;case 77:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.SuperCall(o.addDataToNode(o,l[s-1])(new o.Super),r[s],!1,r[s-1]));break;case 78:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Call(new o.Value(r[s-1]),r[s]));break;case 79:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Call(r[s-1],r[s]));break;case 80:case 81:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Value(r[s-1]).add(r[s]));break;case 82:case 131:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Access(r[s]));break;case 84:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Return(r[s]));break;case 85:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Return(new o.Value(r[s-1])));break;case 86:this.$=o.addDataToNode(o,l[s],l[s])(new o.Return);break;case 87:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.YieldReturn(r[s]));break;case 88:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.YieldReturn);break;case 89:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.AwaitReturn(r[s]));break;case 90:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.AwaitReturn);break;case 91:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Code(r[s-3],r[s],r[s-1],o.addDataToNode(o,l[s-4])(new o.Literal(r[s-4]))));break;case 92:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Code([],r[s],r[s-1]));break;case 93:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Code(r[s-3],o.addDataToNode(o,l[s])(o.Block.wrap([r[s]])),r[s-1],o.addDataToNode(o,l[s-4])(new o.Literal(r[s-4]))));break;case 94:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Code([],o.addDataToNode(o,l[s])(o.Block.wrap([r[s]])),r[s-1]));break;case 95:case 96:this.$=o.addDataToNode(o,l[s],l[s])(new o.FuncGlyph(r[s]));break;case 99:case 142:case 232:this.$=o.addDataToNode(o,l[s],l[s])([]);break;case 100:case 143:case 162:case 183:case 216:case 230:case 234:case 284:this.$=o.addDataToNode(o,l[s],l[s])([r[s]]);break;case 101:case 144:case 163:case 184:case 217:case 226:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-2].concat(r[s]));break;case 102:case 145:case 164:case 185:case 218:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-3].concat(r[s]));break;case 103:case 146:case 166:case 187:case 220:this.$=o.addDataToNode(o,l[s-5],l[s])(r[s-5].concat(r[s-2]));break;case 104:this.$=o.addDataToNode(o,l[s],l[s])(new o.Param(r[s]));break;case 105:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Param(r[s-1],null,!0));break;case 106:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Param(r[s],null,!0));break;case 107:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Param(r[s-2],r[s]));break;case 108:case 224:this.$=o.addDataToNode(o,l[s],l[s])(new o.Expansion);break;case 116:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s-1].add(r[s]));break;case 117:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Value(r[s-1]).add(r[s]));break;case 129:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Super(o.addDataToNode(o,l[s])(new o.Access(r[s])),[],!1,r[s-2]));break;case 130:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Super(o.addDataToNode(o,l[s-1])(new o.Index(r[s-1])),[],!1,r[s-3]));break;case 132:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Access(r[s],\"soak\"));break;case 133:this.$=o.addDataToNode(o,l[s-1],l[s])([o.addDataToNode(o,l[s-1])(new o.Access(new o.PropertyName(\"prototype\"))),o.addDataToNode(o,l[s])(new o.Access(r[s]))]);break;case 134:this.$=o.addDataToNode(o,l[s-1],l[s])([o.addDataToNode(o,l[s-1])(new o.Access(new o.PropertyName(\"prototype\"),\"soak\")),o.addDataToNode(o,l[s])(new o.Access(r[s]))]);break;case 135:this.$=o.addDataToNode(o,l[s],l[s])(new o.Access(new o.PropertyName(\"prototype\")));break;case 138:this.$=o.addDataToNode(o,l[s-1],l[s])(o.extend(r[s],{soak:!0}));break;case 139:this.$=o.addDataToNode(o,l[s],l[s])(new o.Index(r[s]));break;case 140:this.$=o.addDataToNode(o,l[s],l[s])(new o.Slice(r[s]));break;case 141:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Obj(r[s-2],r[s-3].generated));break;case 147:this.$=o.addDataToNode(o,l[s],l[s])(new o.Class);break;case 148:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Class(null,null,r[s]));break;case 149:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Class(null,r[s]));break;case 150:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Class(null,r[s-1],r[s]));break;case 151:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Class(r[s]));break;case 152:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Class(r[s-1],null,r[s]));break;case 153:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Class(r[s-2],r[s]));break;case 154:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Class(r[s-3],r[s-1],r[s]));break;case 155:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.ImportDeclaration(null,r[s]));break;case 156:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ImportDeclaration(new o.ImportClause(r[s-2],null),r[s]));break;case 157:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ImportDeclaration(new o.ImportClause(null,r[s-2]),r[s]));break;case 158:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ImportDeclaration(new o.ImportClause(null,new o.ImportSpecifierList([])),r[s]));break;case 159:this.$=o.addDataToNode(o,l[s-6],l[s])(new o.ImportDeclaration(new o.ImportClause(null,new o.ImportSpecifierList(r[s-4])),r[s]));break;case 160:this.$=o.addDataToNode(o,l[s-5],l[s])(new o.ImportDeclaration(new o.ImportClause(r[s-4],r[s-2]),r[s]));break;case 161:this.$=o.addDataToNode(o,l[s-8],l[s])(new o.ImportDeclaration(new o.ImportClause(r[s-7],new o.ImportSpecifierList(r[s-4])),r[s]));break;case 165:case 186:case 199:case 219:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-2]);break;case 167:this.$=o.addDataToNode(o,l[s],l[s])(new o.ImportSpecifier(r[s]));break;case 168:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ImportSpecifier(r[s-2],r[s]));break;case 169:this.$=o.addDataToNode(o,l[s],l[s])(new o.ImportSpecifier(new o.Literal(r[s])));break;case 170:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ImportSpecifier(new o.Literal(r[s-2]),r[s]));break;case 171:this.$=o.addDataToNode(o,l[s],l[s])(new o.ImportDefaultSpecifier(r[s]));break;case 172:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ImportNamespaceSpecifier(new o.Literal(r[s-2]),r[s]));break;case 173:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportNamedDeclaration(new o.ExportSpecifierList([])));break;case 174:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ExportNamedDeclaration(new o.ExportSpecifierList(r[s-2])));break;case 175:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.ExportNamedDeclaration(r[s]));break;case 176:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ExportNamedDeclaration(new o.Assign(r[s-2],r[s],null,{moduleDeclaration:\"export\"})));break;case 177:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ExportNamedDeclaration(new o.Assign(r[s-3],r[s],null,{moduleDeclaration:\"export\"})));break;case 178:this.$=o.addDataToNode(o,l[s-5],l[s])(new o.ExportNamedDeclaration(new o.Assign(r[s-4],r[s-1],null,{moduleDeclaration:\"export\"})));break;case 179:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportDefaultDeclaration(r[s]));break;case 180:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ExportDefaultDeclaration(new o.Value(r[s-1])));break;case 181:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ExportAllDeclaration(new o.Literal(r[s-2]),r[s]));break;case 182:this.$=o.addDataToNode(o,l[s-6],l[s])(new o.ExportNamedDeclaration(new o.ExportSpecifierList(r[s-4]),r[s]));break;case 188:this.$=o.addDataToNode(o,l[s],l[s])(new o.ExportSpecifier(r[s]));break;case 189:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportSpecifier(r[s-2],r[s]));break;case 190:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportSpecifier(r[s-2],new o.Literal(r[s])));break;case 191:this.$=o.addDataToNode(o,l[s],l[s])(new o.ExportSpecifier(new o.Literal(r[s])));break;case 192:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportSpecifier(new o.Literal(r[s-2]),r[s]));break;case 193:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.TaggedTemplateCall(r[s-2],r[s],r[s-1]));break;case 194:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Call(r[s-2],r[s],r[s-1]));break;case 195:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.SuperCall(o.addDataToNode(o,l[s-2])(new o.Super),r[s],r[s-1],r[s-2]));break;case 196:this.$=o.addDataToNode(o,l[s],l[s])(!1);break;case 197:this.$=o.addDataToNode(o,l[s],l[s])(!0);break;case 198:this.$=o.addDataToNode(o,l[s-1],l[s])([]);break;case 200:case 201:this.$=o.addDataToNode(o,l[s],l[s])(new o.Value(new o.ThisLiteral(r[s])));break;case 202:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Value(o.addDataToNode(o,l[s-1])(new o.ThisLiteral(r[s-1])),[o.addDataToNode(o,l[s])(new o.Access(r[s]))],\"this\"));break;case 203:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Arr([]));break;case 204:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Arr(r[s-1]));break;case 205:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Arr([].concat(r[s-2],r[s-1])));break;case 206:this.$=o.addDataToNode(o,l[s],l[s])(\"inclusive\");break;case 207:this.$=o.addDataToNode(o,l[s],l[s])(\"exclusive\");break;case 208:case 209:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Range(r[s-3],r[s-1],r[s-2]));break;case 210:case 212:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Range(r[s-2],r[s],r[s-1]));break;case 211:case 213:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Range(r[s-1],null,r[s]));break;case 214:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Range(null,r[s],r[s-1]));break;case 215:this.$=o.addDataToNode(o,l[s],l[s])(new o.Range(null,null,r[s]));break;case 227:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-3].concat(r[s-2],r[s]));break;case 228:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-2].concat(r[s-1]));break;case 229:this.$=o.addDataToNode(o,l[s-5],l[s])(r[s-5].concat(r[s-4],r[s-2],r[s-1]));break;case 231:case 235:case 331:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s-1].concat(r[s]));break;case 233:this.$=o.addDataToNode(o,l[s-1],l[s])([].concat(r[s]));break;case 236:this.$=o.addDataToNode(o,l[s],l[s])(new o.Elision);break;case 239:case 240:this.$=o.addDataToNode(o,l[s-2],l[s])([].concat(r[s-2],r[s]));break;case 241:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Try(r[s]));break;case 242:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Try(r[s-1],r[s][0],r[s][1]));break;case 243:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Try(r[s-2],null,null,r[s]));break;case 244:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Try(r[s-3],r[s-2][0],r[s-2][1],r[s]));break;case 245:this.$=o.addDataToNode(o,l[s-2],l[s])([r[s-1],r[s]]);break;case 246:this.$=o.addDataToNode(o,l[s-2],l[s])([o.addDataToNode(o,l[s-1])(new o.Value(r[s-1])),r[s]]);break;case 247:this.$=o.addDataToNode(o,l[s-1],l[s])([null,r[s]]);break;case 248:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Throw(r[s]));break;case 249:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Throw(new o.Value(r[s-1])));break;case 250:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Parens(r[s-1]));break;case 251:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Parens(r[s-2]));break;case 252:case 256:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(r[s]));break;case 253:case 257:case 258:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.While(r[s-2],{guard:r[s]}));break;case 254:case 259:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(r[s],{invert:!0}));break;case 255:case 260:case 261:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.While(r[s-2],{invert:!0,guard:r[s]}));break;case 262:case 263:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s-1].addBody(r[s]));break;case 264:case 265:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s].addBody(o.addDataToNode(o,l[s-1])(o.Block.wrap([r[s-1]]))));break;case 266:this.$=o.addDataToNode(o,l[s],l[s])(r[s]);break;case 267:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(o.addDataToNode(o,l[s-1])(new o.BooleanLiteral(\"true\"))).addBody(r[s]));break;case 268:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(o.addDataToNode(o,l[s-1])(new o.BooleanLiteral(\"true\"))).addBody(o.addDataToNode(o,l[s])(o.Block.wrap([r[s]]))));break;case 269:case 270:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.For(r[s-1],r[s]));break;case 271:case 272:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.For(r[s],r[s-1]));break;case 273:this.$=o.addDataToNode(o,l[s-1],l[s])({source:o.addDataToNode(o,l[s])(new o.Value(r[s]))});break;case 274:case 276:this.$=o.addDataToNode(o,l[s-3],l[s])({source:o.addDataToNode(o,l[s-2])(new o.Value(r[s-2])),step:r[s]});break;case 275:case 277:this.$=o.addDataToNode(o,l[s-1],l[s])(function(){return r[s].own=r[s-1].own,r[s].ownTag=r[s-1].ownTag,r[s].name=r[s-1][0],r[s].index=r[s-1][1],r[s]}());break;case 278:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s]);break;case 279:this.$=o.addDataToNode(o,l[s-2],l[s])(function(){return r[s].own=!0,r[s].ownTag=o.addDataToNode(o,l[s-1])(new o.Literal(r[s-1])),r[s]}());break;case 285:this.$=o.addDataToNode(o,l[s-2],l[s])([r[s-2],r[s]]);break;case 286:case 305:this.$=o.addDataToNode(o,l[s-1],l[s])({source:r[s]});break;case 287:case 306:this.$=o.addDataToNode(o,l[s-1],l[s])({source:r[s],object:!0});break;case 288:case 289:case 307:case 308:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],guard:r[s]});break;case 290:case 291:case 309:case 310:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],guard:r[s],object:!0});break;case 292:case 293:case 311:case 312:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],step:r[s]});break;case 294:case 295:case 296:case 297:case 313:case 314:case 315:case 316:this.$=o.addDataToNode(o,l[s-5],l[s])({source:r[s-4],guard:r[s-2],step:r[s]});break;case 298:case 299:case 300:case 301:case 317:case 318:case 319:case 320:this.$=o.addDataToNode(o,l[s-5],l[s])({source:r[s-4],step:r[s-2],guard:r[s]});break;case 302:case 321:this.$=o.addDataToNode(o,l[s-1],l[s])({source:r[s],from:!0});break;case 303:case 304:case 322:case 323:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],guard:r[s],from:!0});break;case 324:case 325:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Switch(r[s-3],r[s-1]));break;case 326:case 327:this.$=o.addDataToNode(o,l[s-6],l[s])(new o.Switch(r[s-5],r[s-3],r[s-1]));break;case 328:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Switch(null,r[s-1]));break;case 329:this.$=o.addDataToNode(o,l[s-5],l[s])(new o.Switch(null,r[s-3],r[s-1]));break;case 332:this.$=o.addDataToNode(o,l[s-2],l[s])([[r[s-1],r[s]]]);break;case 333:this.$=o.addDataToNode(o,l[s-3],l[s])([[r[s-2],r[s-1]]]);break;case 334:case 340:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.If(r[s-1],r[s],{type:r[s-2]}));break;case 335:case 341:this.$=o.addDataToNode(o,l[s-4],l[s])(r[s-4].addElse(o.addDataToNode(o,l[s-2],l[s])(new o.If(r[s-1],r[s],{type:r[s-2]}))));break;case 337:case 343:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-2].addElse(r[s]));break;case 338:case 339:case 344:case 345:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.If(r[s],o.addDataToNode(o,l[s-2])(o.Block.wrap([r[s-2]])),{type:r[s-1],statement:!0}));break;case 349:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"-\",r[s]));break;case 350:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"+\",r[s]));break;case 352:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"--\",r[s]));break;case 353:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"++\",r[s]));break;case 354:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"--\",r[s-1],null,!0));break;case 355:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"++\",r[s-1],null,!0));break;case 356:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Existence(r[s-1]));break;case 357:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(\"+\",r[s-2],r[s]));break;case 358:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(\"-\",r[s-2],r[s]));break;case 359:case 360:case 361:case 362:case 363:case 364:case 365:case 366:case 367:case 368:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(r[s-1],r[s-2],r[s]));break;case 369:this.$=o.addDataToNode(o,l[s-2],l[s])(function(){return\"!\"===r[s-1].charAt(0)?new o.Op(r[s-1].slice(1),r[s-2],r[s]).invert():new o.Op(r[s-1],r[s-2],r[s])}());break;case 370:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(r[s-2],r[s],r[s-1]));break;case 371:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(r[s-4],r[s-1],r[s-3]));break;case 372:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Assign(r[s-3],r[s],r[s-2]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{1:[3]},{1:[2,2],6:W},a(X,[2,3]),a(Y,[2,6],{151:111,154:112,158:116,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,7]),a(Y,[2,8],{158:116,151:118,154:119,148:q,150:z,156:J,174:ue}),a(Y,[2,9]),a(me,[2,16],{124:120,99:121,104:127,45:he,46:he,126:he,80:ge,81:fe,101:ye,102:ke,103:Te,105:Ne,125:ve}),a(me,[2,17],{104:127,99:130,80:ge,81:fe,101:ye,102:ke,103:Te,105:Ne}),a(me,[2,18]),a(me,[2,19]),a(me,[2,20]),a(me,[2,21]),a(me,[2,22]),a(me,[2,23]),a(me,[2,24]),a(me,[2,25]),a(me,[2,26]),a(me,[2,27]),a(Y,[2,28]),a(Y,[2,29]),a(Y,[2,30]),a(be,[2,12]),a(be,[2,13]),a(be,[2,14]),a(be,[2,15]),a(Y,[2,10]),a(Y,[2,11]),a($e,_e,{61:[1,131]}),a($e,[2,123]),a($e,[2,124]),a($e,[2,125]),a($e,Ce),a($e,[2,127]),a($e,[2,128]),a(De,Ee,{87:132,94:133,95:134,37:136,67:137,96:138,73:139,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),{5:143,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,34:142,35:Ae,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:145,8:146,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:150,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:156,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:157,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:158,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:[1,159],85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{17:161,18:162,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:163,67:79,68:y,73:62,74:31,75:35,76:34,77:k,86:Le,89:152,90:b,91:$,96:61,98:160,100:32,107:_,129:x,130:I,145:R},{17:161,18:162,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:163,67:79,68:y,73:62,74:31,75:35,76:34,77:k,86:Le,89:152,90:b,91:$,96:61,98:164,100:32,107:_,129:x,130:I,145:R},a(Pe,je,{180:[1,165],181:[1,166],194:[1,167]}),a(me,[2,336],{169:[1,168]}),{34:169,35:Ae},{34:170,35:Ae},{34:171,35:Ae},a(me,[2,266]),{34:172,35:Ae},{34:173,35:Ae},{7:174,8:175,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:[1,176],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Me,[2,147],{53:30,74:31,100:32,51:33,76:34,75:35,96:61,73:62,42:63,48:65,37:78,67:79,44:88,89:152,17:161,18:162,60:163,34:177,98:179,35:Ae,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,86:Le,90:b,91:$,107:_,111:[1,178],129:x,130:I,145:R}),{7:180,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,181],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],Ue,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:t,32:Re,33:Ve,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:[1,184],85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),a(Y,[2,342],{169:[1,185]}),a([1,6,36,47,69,70,93,127,135,146,148,149,150,156,157,174],Be,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:186,14:t,32:Re,35:Ge,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),{37:192,38:n,39:r,44:188,45:s,46:i,107:[1,191],113:189,114:190,119:He},{26:195,37:196,38:n,39:r,107:[1,194],110:C,118:[1,197],122:[1,198]},a(Pe,[2,120]),a(Pe,[2,121]),a($e,[2,45]),a($e,[2,46]),a($e,[2,47]),a($e,[2,48]),a($e,[2,49]),a($e,[2,50]),a($e,[2,51]),a($e,[2,52]),{4:199,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,35:[1,200],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:201,8:202,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,69:Xe,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:204,132:205,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{80:ze,81:Je,124:213,125:ve,126:he},a($e,[2,200]),a($e,[2,201],{40:216,41:Ke}),a(Ze,[2,95]),a(Ze,[2,96]),a(Qe,[2,115]),a(Qe,[2,118]),{7:218,8:219,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:220,8:221,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:222,8:223,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:225,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,34:224,35:Ae,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{37:230,38:n,39:r,67:231,68:y,73:233,96:232,100:226,107:_,130:Se,161:227,162:ea,163:229},{159:234,160:235,164:[1,236],165:[1,237],166:[1,238]},a([6,35,93,109],aa,{44:88,108:239,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,38:n,39:r,41:Ke,43:l,45:s,46:i,68:ta,70:oa,77:na,107:_,129:x,130:I,145:R}),a(ra,[2,39]),a(ra,[2,40]),a($e,[2,43]),{17:161,18:162,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:257,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:163,67:79,68:y,73:62,74:31,75:35,76:34,77:k,86:Le,89:152,90:b,91:$,96:61,98:258,100:32,107:_,129:x,130:I,145:R},a(la,[2,36]),a(la,[2,37]),a(sa,[2,41]),{4:259,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(X,[2,5],{7:4,8:5,9:6,10:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,11:27,12:28,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,5:260,14:t,32:o,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:N,86:v,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),a(me,[2,356]),{7:261,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:262,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:263,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:264,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:265,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:266,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:267,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:268,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:269,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:270,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:271,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:272,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:273,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:274,8:275,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(me,[2,265]),a(me,[2,270]),{7:220,8:276,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:222,8:277,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{37:230,38:n,39:r,67:231,68:y,73:233,96:232,100:278,107:_,130:Se,161:227,162:ea,163:229},{159:234,164:[1,279],165:[1,280],166:[1,281]},{7:282,8:283,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(me,[2,264]),a(me,[2,269]),{44:284,45:s,46:i,78:285,126:ia},a(Qe,[2,116]),a(da,[2,197]),{40:287,41:Ke},{40:288,41:Ke},a(Qe,[2,135],{40:289,41:Ke}),{40:290,41:Ke},a(Qe,[2,136]),{7:292,8:294,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:ca,73:62,74:31,75:35,76:34,77:k,82:291,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,106:293,107:_,110:C,112:D,120:E,129:x,130:I,134:295,135:pa,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{81:fe,104:298,105:Ne},a(Qe,[2,117]),{6:[1,300],7:299,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,301],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ua,ma,{92:304,88:[1,302],93:ha}),a(ga,[2,100]),a(ga,[2,104],{61:[1,306],70:[1,305]}),a(ga,[2,108],{37:136,67:137,96:138,73:139,95:307,38:n,39:r,68:xe,107:_,130:Se}),a(fa,[2,109]),a(fa,[2,110]),a(fa,[2,111]),a(fa,[2,112]),{40:216,41:Ke},{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,69:Xe,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:204,132:205,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(ya,[2,92]),a(Y,[2,94]),{4:311,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,36:[1,310],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(ka,Ta,{151:111,154:112,158:116,182:ee}),a(Y,[2,346]),{7:158,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{148:q,150:z,151:118,154:119,156:J,158:116,174:ue},a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],Ue,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:t,32:Re,33:Ve,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),a(Na,[2,348],{151:111,154:112,158:116,182:ee,184:te}),a(De,Ee,{94:133,95:134,37:136,67:137,96:138,73:139,87:313,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),{34:142,35:Ae},{7:314,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{148:q,150:z,151:118,154:119,156:J,158:116,174:[1,315]},{7:316,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Na,[2,349],{151:111,154:112,158:116,182:ee,184:te}),a(Na,[2,350],{151:111,154:112,158:116,182:ee,184:te}),a(ka,[2,351],{151:111,154:112,158:116,182:ee}),a(Y,[2,90],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:317,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:Be,150:Be,156:Be,174:Be,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),a(me,[2,352],{45:je,46:je,80:je,81:je,101:je,102:je,103:je,105:je,125:je,126:je}),a(da,he,{124:120,99:121,104:127,80:ge,81:fe,101:ye,102:ke,103:Te,105:Ne,125:ve}),{80:ge,81:fe,99:130,101:ye,102:ke,103:Te,104:127,105:Ne},a(va,_e),a(me,[2,353],{45:je,46:je,80:je,81:je,101:je,102:je,103:je,105:je,125:je,126:je}),a(me,[2,354]),a(me,[2,355]),{6:[1,320],7:318,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,319],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{34:321,35:Ae,173:[1,322]},a(me,[2,241],{141:323,142:[1,324],143:[1,325]}),a(me,[2,262]),a(me,[2,263]),a(me,[2,271]),a(me,[2,272]),{35:[1,326],148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[1,327]},{168:328,170:329,171:ba},a(me,[2,148]),{7:331,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Me,[2,151],{34:332,35:Ae,45:je,46:je,80:je,81:je,101:je,102:je,103:je,105:je,125:je,126:je,111:[1,333]}),a($a,[2,248],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{73:334,107:_},a($a,[2,32],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:335,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([1,6,36,47,69,70,93,127,135,146,149,157],[2,88],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:336,14:t,32:Re,35:Ge,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:Be,150:Be,156:Be,174:Be,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),{34:337,35:Ae,173:[1,338]},a(be,_a,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{73:339,107:_},a(be,[2,155]),{33:[1,340],93:[1,341]},{33:[1,342]},{35:Ca,37:347,38:n,39:r,109:[1,343],115:344,116:345,118:Da},a([33,93],[2,171]),{117:[1,349]},{35:Ea,37:354,38:n,39:r,109:[1,350],118:xa,121:351,123:352},a(be,[2,175]),{61:[1,356]},{7:357,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,358],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{33:[1,359]},{6:W,146:[1,360]},{4:361,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ia,Sa,{151:111,154:112,158:116,134:362,70:[1,363],135:pa,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Ia,Aa,{134:364,70:ca,135:pa}),a(Ra,[2,203]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,69:[1,365],70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,136:367,138:366,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a([6,35,69],ma,{133:368,92:370,93:Oa}),a(La,[2,234]),a(Fa,[2,225]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:372,132:371,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(La,[2,236]),a(Fa,[2,230]),a(wa,[2,223]),a(wa,[2,224],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:373,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),{78:374,126:ia},{40:375,41:Ke},{7:376,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Pa,[2,202]),a(Pa,[2,38]),{34:377,35:Ae,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{34:378,35:Ae},a(ja,[2,256],{151:111,154:112,158:116,148:q,149:[1,379],150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:[2,252],149:[1,380]},a(ja,[2,259],{151:111,154:112,158:116,148:q,149:[1,381],150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:[2,254],149:[1,382]},a(me,[2,267]),a(Ma,[2,268],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:Ua,157:[1,383]},a(Va,[2,278]),{37:230,38:n,39:r,67:231,68:xe,73:233,96:232,107:_,130:Se,161:384,163:229},a(Va,[2,284],{93:[1,385]}),a(Ba,[2,280]),a(Ba,[2,281]),a(Ba,[2,282]),a(Ba,[2,283]),a(me,[2,275]),{35:[2,277]},{7:386,8:387,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:388,8:389,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:390,8:391,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ga,ma,{92:392,93:Ha}),a(Wa,[2,143]),a(Wa,[2,56],{65:[1,394]}),a(Wa,[2,57]),a(Xa,[2,66],{78:397,79:398,61:[1,395],70:[1,396],80:Ya,81:qa,126:ia}),a(Xa,[2,67]),{37:247,38:n,39:r,40:248,41:Ke,66:401,67:249,68:ta,71:402,72:251,73:252,74:253,75:254,76:255,77:na,107:_,129:x,130:I,145:R},{70:[1,403],78:404,79:405,80:Ya,81:qa,126:ia},a(za,[2,62]),a(za,[2,63]),a(za,[2,64]),{7:406,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Ja,[2,72]),a(Ja,[2,73]),a(Ja,[2,74]),a(Ja,[2,75]),a(Ja,[2,76]),{78:407,80:ze,81:Je,126:ia},a(va,Ce,{52:[1,408]}),a(va,je),{6:W,47:[1,409]},a(X,[2,4]),a(Ka,[2,357],{151:111,154:112,158:116,182:ee,183:ae,184:te}),a(Ka,[2,358],{151:111,154:112,158:116,182:ee,183:ae,184:te}),a(Na,[2,359],{151:111,154:112,158:116,182:ee,184:te}),a(Na,[2,360],{151:111,154:112,158:116,182:ee,184:te}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,185,186,187,188,189,190,191,192,193],[2,361],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192],[2,362],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,187,188,189,190,191,192],[2,363],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,188,189,190,191,192],[2,364],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,189,190,191,192],[2,365],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,190,191,192],[2,366],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,191,192],[2,367],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,192],[2,368],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192,193],[2,369],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe}),a(Ma,Za,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,345]),{149:[1,410]},{149:[1,411]},a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Ua,{157:[1,412]}),{7:413,8:414,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:415,8:416,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:417,8:418,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ma,Qa,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,344]),a(et,[2,193]),a(et,[2,194]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:at,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,127:[1,419],128:420,129:x,130:I,136:421,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Qe,[2,131]),a(Qe,[2,132]),a(Qe,[2,133]),a(Qe,[2,134]),{83:[1,423]},{70:ca,83:[2,139],134:424,135:pa,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{83:[2,140]},{70:ca,134:425,135:pa},{7:426,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,83:[2,215],84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(tt,[2,206]),a(tt,ot),a(Qe,[2,138]),a($a,[2,53],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:427,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:428,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{89:429,90:b,91:$},a(nt,rt,{95:134,37:136,67:137,96:138,73:139,94:430,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),{6:lt,35:st},a(ga,[2,105]),{7:433,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ga,[2,106]),a(wa,Sa,{151:111,154:112,158:116,70:[1,434],148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(wa,Aa),a(it,[2,34]),{6:W,36:[1,435]},{7:436,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ua,ma,{92:304,88:[1,437],93:ha}),a(ka,Ta,{151:111,154:112,158:116,182:ee}),{7:438,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{34:377,35:Ae,148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Y,[2,89],{151:111,154:112,158:116,148:_a,150:_a,156:_a,174:_a,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,[2,370],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:439,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:440,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(me,[2,337]),{7:441,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(me,[2,242],{142:[1,442]}),{34:443,35:Ae},{34:446,35:Ae,37:444,38:n,39:r,73:445,107:_},{168:447,170:329,171:ba},{168:448,170:329,171:ba},{36:[1,449],169:[1,450],170:451,171:ba},a(ct,[2,330]),{7:453,8:454,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,139:452,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(pt,[2,149],{151:111,154:112,158:116,34:455,35:Ae,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(me,[2,152]),{7:456,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{36:[1,457]},a($a,[2,33],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,87],{151:111,154:112,158:116,148:_a,150:_a,156:_a,174:_a,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,343]),{7:459,8:458,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{36:[1,460]},{44:461,45:s,46:i},{107:[1,463],114:462,119:He},{44:464,45:s,46:i},{33:[1,465]},a(Ga,ma,{92:466,93:ut}),a(Wa,[2,162]),{35:Ca,37:347,38:n,39:r,115:468,116:345,118:Da},a(Wa,[2,167],{117:[1,469]}),a(Wa,[2,169],{117:[1,470]}),{37:471,38:n,39:r},a(be,[2,173]),a(Ga,ma,{92:472,93:mt}),a(Wa,[2,183]),{35:Ea,37:354,38:n,39:r,118:xa,121:474,123:352},a(Wa,[2,188],{117:[1,475]}),a(Wa,[2,191],{117:[1,476]}),{6:[1,478],7:477,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,479],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ht,[2,179],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{73:480,107:_},{44:481,45:s,46:i},a($e,[2,250]),{6:W,36:[1,482]},{7:483,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ot,{6:gt,35:gt,69:gt,93:gt}),{7:484,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Ra,[2,204]),a(La,[2,235]),a(Fa,[2,231]),{6:ft,35:yt,69:[1,485]},a(kt,rt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,138:206,136:210,97:211,7:308,8:309,137:488,131:489,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,70:Ye,77:k,84:T,85:Oe,86:v,90:b,91:$,93:qe,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),a(kt,[2,232]),a(nt,ma,{92:370,133:490,93:Oa}),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,136:367,138:366,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(wa,[2,114],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(et,[2,195]),a($e,[2,129]),{83:[1,491],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Tt,[2,334]),a(Nt,[2,340]),{7:492,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:493,8:494,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:495,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:496,8:497,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:498,8:499,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Va,[2,279]),{37:230,38:n,39:r,67:231,68:xe,73:233,96:232,107:_,130:Se,163:500},{35:vt,148:q,149:[1,501],150:z,151:111,154:112,156:J,157:[1,502],158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,305],149:[1,503],157:[1,504]},{35:bt,148:q,149:[1,505],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,306],149:[1,506]},{35:$t,148:q,149:[1,507],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,321],149:[1,508]},{6:_t,35:Ct,109:[1,509]},a(Dt,rt,{44:88,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,62:512,38:n,39:r,41:Ke,43:l,45:s,46:i,68:ta,70:oa,77:na,107:_,129:x,130:I,145:R}),{7:513,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,514],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:515,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,516],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Wa,[2,68]),a(Ja,[2,78]),a(Ja,[2,80]),{40:517,41:Ke},{7:292,8:294,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:ca,73:62,74:31,75:35,76:34,77:k,82:518,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,106:293,107:_,110:C,112:D,120:E,129:x,130:I,134:295,135:pa,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Wa,[2,69],{78:397,79:398,80:Ya,81:qa,126:ia}),a(Wa,[2,71],{78:404,79:405,80:Ya,81:qa,126:ia}),a(Wa,[2,70]),a(Ja,[2,79]),a(Ja,[2,81]),{69:[1,519],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Ja,[2,77]),a($e,[2,44]),a(sa,[2,42]),{7:520,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:521,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:522,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,174],vt,{151:111,154:112,158:116,149:[1,523],157:[1,524],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,525],157:[1,526]},a(Et,bt,{151:111,154:112,158:116,149:[1,527],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,528]},a(Et,$t,{151:111,154:112,158:116,149:[1,529],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,530]},a(et,[2,198]),a([6,35,127],ma,{92:531,93:xt}),a(It,[2,216]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:at,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,128:533,129:x,130:I,136:421,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Qe,[2,137]),{7:534,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,83:[2,211],84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:535,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,83:[2,213],84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{83:[2,214],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a($a,[2,54],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{36:[1,536],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{5:538,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,34:537,35:Ae,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(ga,[2,101]),{37:136,38:n,39:r,67:137,68:xe,70:Ie,73:139,94:539,95:134,96:138,107:_,130:Se},a(St,Ee,{94:133,95:134,37:136,67:137,96:138,73:139,87:540,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),a(ga,[2,107],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(wa,gt),a(it,[2,35]),a(Ma,Za,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{89:541,90:b,91:$},a(Ma,Qa,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{36:[1,542],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a($a,[2,372],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{34:543,35:Ae,148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{34:544,35:Ae},a(me,[2,243]),{34:545,35:Ae},{34:546,35:Ae},a(At,[2,247]),{36:[1,547],169:[1,548],170:451,171:ba},{36:[1,549],169:[1,550],170:451,171:ba},a(me,[2,328]),{34:551,35:Ae},a(ct,[2,331]),{34:552,35:Ae,93:[1,553]},a(Rt,[2,237],{151:111,154:112,158:116,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Rt,[2,238]),a(me,[2,150]),a(pt,[2,153],{151:111,154:112,158:116,34:554,35:Ae,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(me,[2,249]),{34:555,35:Ae},{148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(be,[2,85]),a(be,[2,156]),{33:[1,556]},{35:Ca,37:347,38:n,39:r,115:557,116:345,118:Da},a(be,[2,157]),{44:558,45:s,46:i},{6:Ot,35:Lt,109:[1,559]},a(Dt,rt,{37:347,116:562,38:n,39:r,118:Da}),a(nt,ma,{92:563,93:ut}),{37:564,38:n,39:r},{37:565,38:n,39:r},{33:[2,172]},{6:Ft,35:wt,109:[1,566]},a(Dt,rt,{37:354,123:569,38:n,39:r,118:xa}),a(nt,ma,{92:570,93:mt}),{37:571,38:n,39:r,118:[1,572]},{37:573,38:n,39:r},a(ht,[2,176],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:574,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:575,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{36:[1,576]},a(be,[2,181]),{146:[1,577]},{69:[1,578],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{69:[1,579],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Ra,[2,205]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:372,136:210,137:580,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:372,132:581,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Fa,[2,226]),a(kt,[2,233],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,138:366,136:367,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,70:Ye,77:k,84:T,85:Oe,86:v,90:b,91:$,93:qe,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),{6:ft,35:yt,36:[1,582]},a($e,[2,130]),a(Ma,[2,257],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:Pt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,253]},a(Ma,[2,260],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:jt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,255]},{35:Mt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,276]},a(Va,[2,285]),{7:583,8:584,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:585,8:586,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:587,8:588,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:589,8:590,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:591,8:592,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:593,8:594,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:595,8:596,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:597,8:598,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ra,[2,141]),{37:247,38:n,39:r,40:248,41:Ke,42:244,43:l,44:88,45:s,46:i,62:599,63:241,64:242,66:243,67:249,68:ta,70:oa,71:246,72:251,73:252,74:253,75:254,76:255,77:na,107:_,129:x,130:I,145:R},a(St,aa,{44:88,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,108:600,38:n,39:r,41:Ke,43:l,45:s,46:i,68:ta,70:oa,77:na,107:_,129:x,130:I,145:R}),a(Wa,[2,144]),a(Wa,[2,58],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:601,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Wa,[2,60],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:602,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Ja,[2,82]),{83:[1,603]},a(za,[2,65]),a(Ma,Pt,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Ma,jt,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Ma,Mt,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:604,8:605,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:606,8:607,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:608,8:609,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:610,8:611,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:612,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:613,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:614,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:615,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{6:Ut,35:Vt,127:[1,616]},a([6,35,36,127],rt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,136:619,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,70:Ye,77:k,84:T,85:Oe,86:v,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),a(nt,ma,{92:620,93:xt}),{83:[2,210],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{83:[2,212],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(me,[2,55]),a(ya,[2,91]),a(Y,[2,93]),a(ga,[2,102]),a(nt,ma,{92:621,93:ha}),{34:537,35:Ae},a(me,[2,371]),a(Tt,[2,335]),a(me,[2,244]),a(At,[2,245]),a(At,[2,246]),a(me,[2,324]),{34:622,35:Ae},a(me,[2,325]),{34:623,35:Ae},{36:[1,624]},a(ct,[2,332],{6:[1,625]}),{7:626,8:627,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(me,[2,154]),a(Nt,[2,341]),{44:628,45:s,46:i},a(Ga,ma,{92:629,93:ut}),a(be,[2,158]),{33:[1,630]},{37:347,38:n,39:r,116:631,118:Da},{35:Ca,37:347,38:n,39:r,115:632,116:345,118:Da},a(Wa,[2,163]),{6:Ot,35:Lt,36:[1,633]},a(Wa,[2,168]),a(Wa,[2,170]),a(be,[2,174],{33:[1,634]}),{37:354,38:n,39:r,118:xa,123:635},{35:Ea,37:354,38:n,39:r,118:xa,121:636,123:352},a(Wa,[2,184]),{6:Ft,35:wt,36:[1,637]},a(Wa,[2,189]),a(Wa,[2,190]),a(Wa,[2,192]),a(ht,[2,177],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{36:[1,638],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(be,[2,180]),a($e,[2,251]),a($e,[2,208]),a($e,[2,209]),a(Fa,[2,227]),a(nt,ma,{92:370,133:639,93:Oa}),a(Fa,[2,228]),{35:Bt,148:q,150:z,151:111,154:112,156:J,157:[1,640],158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,307],157:[1,641]},{35:Gt,148:q,149:[1,642],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,311],149:[1,643]},{35:Ht,148:q,150:z,151:111,154:112,156:J,157:[1,644],158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,308],157:[1,645]},{35:Wt,148:q,149:[1,646],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,312],149:[1,647]},{35:Xt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,309]},{35:Yt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,310]},{35:qt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,322]},{35:zt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,323]},a(Wa,[2,145]),a(nt,ma,{92:648,93:Ha}),{36:[1,649],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{36:[1,650],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Ja,[2,83]),a(Jt,Bt,{151:111,154:112,158:116,157:[1,651],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{157:[1,652]},a(Et,Gt,{151:111,154:112,158:116,149:[1,653],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,654]},a(Jt,Ht,{151:111,154:112,158:116,157:[1,655],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{157:[1,656]},a(Et,Wt,{151:111,154:112,158:116,149:[1,657],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,658]},a($a,Xt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,Yt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,qt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,zt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(et,[2,199]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,136:659,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:at,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,128:660,129:x,130:I,136:421,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(It,[2,217]),{6:Ut,35:Vt,36:[1,661]},{6:lt,35:st,36:[1,662]},{36:[1,663]},{36:[1,664]},a(me,[2,329]),a(ct,[2,333]),a(Rt,[2,239],{151:111,154:112,158:116,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Rt,[2,240]),a(be,[2,160]),{6:Ot,35:Lt,109:[1,665]},{44:666,45:s,46:i},a(Wa,[2,164]),a(nt,ma,{92:667,93:ut}),a(Wa,[2,165]),{44:668,45:s,46:i},a(Wa,[2,185]),a(nt,ma,{92:669,93:mt}),a(Wa,[2,186]),a(be,[2,178]),{6:ft,35:yt,36:[1,670]},{7:671,8:672,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:673,8:674,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:675,8:676,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:677,8:678,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:679,8:680,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:681,8:682,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:683,8:684,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:685,8:686,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{6:_t,35:Ct,36:[1,687]},a(Wa,[2,59]),a(Wa,[2,61]),{7:688,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:689,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:690,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:691,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:692,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:693,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:694,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:695,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(It,[2,218]),a(nt,ma,{92:696,93:xt}),a(It,[2,219]),a(ga,[2,103]),a(me,[2,326]),a(me,[2,327]),{33:[1,697]},a(be,[2,159]),{6:Ot,35:Lt,36:[1,698]},a(be,[2,182]),{6:Ft,35:wt,36:[1,699]},a(Fa,[2,229]),{35:Kt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,313]},{35:Zt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,315]},{35:Qt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,317]},{35:eo,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,319]},{35:ao,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,314]},{35:to,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,316]},{35:oo,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,318]},{35:no,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,320]},a(Wa,[2,146]),a($a,Kt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,Zt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,Qt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,eo,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,ao,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,to,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,oo,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,no,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{6:Ut,35:Vt,36:[1,700]},{44:701,45:s,46:i},a(Wa,[2,166]),a(Wa,[2,187]),a(It,[2,220]),a(be,[2,161])],defaultActions:{235:[2,277],293:[2,140],471:[2,172],494:[2,253],497:[2,255],499:[2,276],592:[2,309],594:[2,310],596:[2,322],598:[2,323],672:[2,313],674:[2,315],676:[2,317],678:[2,319],680:[2,314],682:[2,316],684:[2,318],686:[2,320]},parseError:function(e,a){if(a.recoverable)this.trace(e);else{var t=new Error(e);throw t.hash=a,t}},parse:function(e){var a=this,t=[0],o=[null],n=[],l=this.table,s=\"\",i=0,d=0,c=0,u=1,m=n.slice.call(arguments,1),h=Object.create(this.lexer),g={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(g.yy[f]=this.yy[f]);h.setInput(e,g.yy),g.yy.lexer=h,g.yy.parser=this,\"undefined\"==typeof h.yylloc&&(h.yylloc={});var y=h.yylloc;n.push(y);var k=h.options&&h.options.ranges;this.parseError=\"function\"==typeof g.yy.parseError?g.yy.parseError:Object.getPrototypeOf(this).parseError;_token_stack:var T=function(){var e;return e=h.lex()||u,\"number\"!=typeof e&&(e=a.symbols_[e]||e),e};for(var N={},v,b,$,_,C,D,p,E,x;;){if($=t[t.length-1],this.defaultActions[$]?_=this.defaultActions[$]:((null===v||\"undefined\"==typeof v)&&(v=T()),_=l[$]&&l[$][v]),\"undefined\"==typeof _||!_.length||!_[0]){var I=\"\";for(D in x=[],l[$])this.terminals_[D]&&D>2&&x.push(\"'\"+this.terminals_[D]+\"'\");I=h.showPosition?\"Parse error on line \"+(i+1)+\":\\n\"+h.showPosition()+\"\\nExpecting \"+x.join(\", \")+\", got '\"+(this.terminals_[v]||v)+\"'\":\"Parse error on line \"+(i+1)+\": Unexpected \"+(v==u?\"end of input\":\"'\"+(this.terminals_[v]||v)+\"'\"),this.parseError(I,{text:h.match,token:this.terminals_[v]||v,line:h.yylineno,loc:y,expected:x})}if(_[0]instanceof Array&&1<_.length)throw new Error(\"Parse Error: multiple actions possible at state: \"+$+\", token: \"+v);switch(_[0]){case 1:t.push(v),o.push(h.yytext),n.push(h.yylloc),t.push(_[1]),v=null,b?(v=b,b=null):(d=h.yyleng,s=h.yytext,i=h.yylineno,y=h.yylloc,0<c&&c--);break;case 2:if(p=this.productions_[_[1]][1],N.$=o[o.length-p],N._$={first_line:n[n.length-(p||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(p||1)].first_column,last_column:n[n.length-1].last_column},k&&(N._$.range=[n[n.length-(p||1)].range[0],n[n.length-1].range[1]]),C=this.performAction.apply(N,[s,d,i,g.yy,_[1],o,n].concat(m)),\"undefined\"!=typeof C)return C;p&&(t=t.slice(0,2*(-1*p)),o=o.slice(0,-1*p),n=n.slice(0,-1*p)),t.push(this.productions_[_[1]][0]),o.push(N.$),n.push(N._$),E=l[t[t.length-2]][t[t.length-1]],t.push(E);break;case 3:return!0}}return!0}};return e.prototype=ro,ro.Parser=e,new e}();return\"undefined\"!=typeof require&&\"undefined\"!=typeof e&&(e.parser=t,e.Parser=t.Parser,e.parse=function(){return t.parse.apply(t,arguments)},e.main=function(){},require.main===a&&e.main(process.argv.slice(1))),a.exports}(),require[\"./scope\"]=function(){var e={};return function(){var a=[].indexOf,t;e.Scope=t=function(){function e(a,t,o,n){_classCallCheck(this,e);var r,l;this.parent=a,this.expressions=t,this.method=o,this.referencedVars=n,this.variables=[{name:\"arguments\",type:\"arguments\"}],this.comments={},this.positions={},this.parent||(this.utilities={}),this.root=null==(r=null==(l=this.parent)?void 0:l.root)?this:r}return _createClass(e,[{key:\"add\",value:function add(e,a,t){return this.shared&&!t?this.parent.add(e,a,t):Object.prototype.hasOwnProperty.call(this.positions,e)?this.variables[this.positions[e]].type=a:this.positions[e]=this.variables.push({name:e,type:a})-1}},{key:\"namedMethod\",value:function namedMethod(){var e;return(null==(e=this.method)?void 0:e.name)||!this.parent?this.method:this.parent.namedMethod()}},{key:\"find\",value:function find(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:\"var\";return!!this.check(e)||(this.add(e,a),!1)}},{key:\"parameter\",value:function parameter(e){return this.shared&&this.parent.check(e,!0)?void 0:this.add(e,\"param\")}},{key:\"check\",value:function check(e){var a;return!!(this.type(e)||(null==(a=this.parent)?void 0:a.check(e)))}},{key:\"temporary\",value:function temporary(e,a){var t=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],o,n,r,l,s,i;return t?(i=e.charCodeAt(0),n=122,o=n-i,l=i+a%(o+1),r=_StringfromCharCode(l),s=_Mathfloor(a/(o+1)),\"\"+r+(s||\"\")):\"\"+e+(a||\"\")}},{key:\"type\",value:function type(e){var a,t,o,n;for(o=this.variables,a=0,t=o.length;a<t;a++)if(n=o[a],n.name===e)return n.type;return null}},{key:\"freeVariable\",value:function freeVariable(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},o,n,r;for(o=0;r=this.temporary(e,o,t.single),!!(this.check(r)||0<=a.call(this.root.referencedVars,r));)o++;return(null==(n=t.reserve)||n)&&this.add(r,\"var\",!0),r}},{key:\"assign\",value:function assign(e,a){return this.add(e,{value:a,assigned:!0},!0),this.hasAssignments=!0}},{key:\"hasDeclarations\",value:function hasDeclarations(){return!!this.declaredVariables().length}},{key:\"declaredVariables\",value:function declaredVariables(){var e;return function(){var a,t,o,n;for(o=this.variables,n=[],a=0,t=o.length;a<t;a++)e=o[a],\"var\"===e.type&&n.push(e.name);return n}.call(this).sort()}},{key:\"assignedVariables\",value:function assignedVariables(){var e,a,t,o,n;for(t=this.variables,o=[],e=0,a=t.length;e<a;e++)n=t[e],n.type.assigned&&o.push(n.name+\" = \"+n.type.value);return o}}]),e}()}.call(this),{exports:e}.exports}(),require[\"./nodes\"]=function(){var e={};return function(){var a=[].indexOf,t=[].splice,n=[].slice,r,s,d,o,l,c,i,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E,x,I,S,A,R,O,L,F,w,P,j,M,U,V,B,G,H,W,X,Y,q,z,J,K,Z,Q,ee,ae,te,oe,ne,re,le,se,ie,de,ce,pe,ue,me,he,ge,fe,ye,ke,Te,Ne,ve,be,$e,_e,Ce,De,Ee,xe,Ie,Se,Ae,Re,Oe,Le,Fe,we,Pe,je,Me,Ue,Ve,Be,Ge,He,We,Xe,Ye,qe,ze,Je,Ke,Ze,Qe,ea,aa,ta,oa,na,ra,la,sa;Error.stackTraceLimit=Infinity;var ia=require(\"./scope\");ye=ia.Scope;var da=require(\"./lexer\");Je=da.isUnassignable,G=da.JS_FORBIDDEN;var ca=require(\"./helpers\");Ue=ca.compact,He=ca.flatten,Ge=ca.extend,Ze=ca.merge,Ve=ca.del,oa=ca.starts,Be=ca.ends,ta=ca.some,je=ca.addDataToNode,Me=ca.attachCommentsToNode,Ke=ca.locationDataToString,na=ca.throwSyntaxError,e.extend=Ge,e.addDataToNode=je,we=function(){return!0},te=function(){return!1},Ee=function(){return this},ae=function(){return this.negated=!this.negated,this},e.CodeFragment=g=function(){function e(a,t){_classCallCheck(this,e);var o;this.code=\"\"+t,this.type=(null==a||null==(o=a.constructor)?void 0:o.name)||\"unknown\",this.locationData=null==a?void 0:a.locationData,this.comments=null==a?void 0:a.comments}return _createClass(e,[{key:\"toString\",value:function toString(){return\"\"+this.code+(this.locationData?\": \"+Ke(this.locationData):\"\")}}]),e}(),We=function(e){var a;return function(){var t,o,n;for(n=[],t=0,o=e.length;t<o;t++)a=e[t],n.push(a.code);return n}().join(\"\")},e.Base=l=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"compile\",value:function compile(e,a){return We(this.compileToFragments(e,a))}},{key:\"compileWithoutComments\",value:function compileWithoutComments(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:\"compile\",o,n;return this.comments&&(this.ignoreTheseCommentsTemporarily=this.comments,delete this.comments),n=this.unwrapAll(),n.comments&&(n.ignoreTheseCommentsTemporarily=n.comments,delete n.comments),o=this[t](e,a),this.ignoreTheseCommentsTemporarily&&(this.comments=this.ignoreTheseCommentsTemporarily,delete this.ignoreTheseCommentsTemporarily),n.ignoreTheseCommentsTemporarily&&(n.comments=n.ignoreTheseCommentsTemporarily,delete n.ignoreTheseCommentsTemporarily),o}},{key:\"compileNodeWithoutComments\",value:function compileNodeWithoutComments(e,a){return this.compileWithoutComments(e,a,\"compileNode\")}},{key:\"compileToFragments\",value:function compileToFragments(e,a){var t,o;return e=Ge({},e),a&&(e.level=a),o=this.unfoldSoak(e)||this,o.tab=e.indent,t=e.level!==z&&o.isStatement(e)?o.compileClosure(e):o.compileNode(e),this.compileCommentFragments(e,o,t),t}},{key:\"compileToFragmentsWithoutComments\",value:function compileToFragmentsWithoutComments(e,a){return this.compileWithoutComments(e,a,\"compileToFragments\")}},{key:\"compileClosure\",value:function compileClosure(e){var a,t,o,n,l,s,i,d;switch((n=this.jumps())&&n.error(\"cannot use a pure statement in an expression\"),e.sharedScope=!0,o=new h([],c.wrap([this])),a=[],this.contains(function(e){return e instanceof _e})?o.bound=!0:((t=this.contains(qe))||this.contains(ze))&&(a=[new Ie],t?(l=\"apply\",a.push(new R(\"arguments\"))):l=\"call\",o=new Le(o,[new r(new pe(l))])),s=new u(o,a).compileNode(e),!1){case!(o.isGenerator||(null==(i=o.base)?void 0:i.isGenerator)):s.unshift(this.makeCode(\"(yield* \")),s.push(this.makeCode(\")\"));break;case!(o.isAsync||(null==(d=o.base)?void 0:d.isAsync)):s.unshift(this.makeCode(\"(await \")),s.push(this.makeCode(\")\"))}return s}},{key:\"compileCommentFragments\",value:function compileCommentFragments(e,t,o){var n,r,l,s,i,d,c,p;if(!t.comments)return o;for(p=function(e){var a;return e.unshift?la(o,e):(0!==o.length&&(a=o[o.length-1],e.newLine&&\"\"!==a.code&&!/\\n\\s*$/.test(a.code)&&(e.code=\"\\n\"+e.code)),o.push(e))},c=t.comments,i=0,d=c.length;i<d;i++)(l=c[i],!!(0>a.call(this.compiledComments,l)))&&(this.compiledComments.push(l),s=l.here?new S(l).compileNode(e):new J(l).compileNode(e),s.isHereComment&&!s.newLine||t.includeCommentFragments()?p(s):(0===o.length&&o.push(this.makeCode(\"\")),s.unshift?(null==(n=o[0]).precedingComments&&(n.precedingComments=[]),o[0].precedingComments.push(s)):(null==(r=o[o.length-1]).followingComments&&(r.followingComments=[]),o[o.length-1].followingComments.push(s))));return o}},{key:\"cache\",value:function cache(e,a,t){var o,n,r;return o=null==t?this.shouldCache():t(this),o?(n=new R(e.scope.freeVariable(\"ref\")),r=new d(n,this),a?[r.compileToFragments(e,a),[this.makeCode(n.value)]]:[r,n]):(n=a?this.compileToFragments(e,a):this,[n,n])}},{key:\"hoist\",value:function hoist(){var e,a,t;return this.hoisted=!0,t=new A(this),e=this.compileNode,a=this.compileToFragments,this.compileNode=function(a){return t.update(e,a)},this.compileToFragments=function(e){return t.update(a,e)},t}},{key:\"cacheToCodeFragments\",value:function cacheToCodeFragments(e){return[We(e[0]),We(e[1])]}},{key:\"makeReturn\",value:function makeReturn(e){var a;return a=this.unwrapAll(),e?new u(new K(e+\".push\"),[a]):new ge(a)}},{key:\"contains\",value:function contains(e){var a;return a=void 0,this.traverseChildren(!1,function(t){if(e(t))return a=t,!1}),a}},{key:\"lastNode\",value:function lastNode(e){return 0===e.length?null:e[e.length-1]}},{key:\"toString\",value:function toString(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:\"\",a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.constructor.name,t;return t=\"\\n\"+e+a,this.soak&&(t+=\"?\"),this.eachChild(function(a){return t+=a.toString(e+De)}),t}},{key:\"eachChild\",value:function eachChild(e){var a,t,o,n,r,l,s,i;if(!this.children)return this;for(s=this.children,o=0,r=s.length;o<r;o++)if(a=s[o],this[a])for(i=He([this[a]]),n=0,l=i.length;n<l;n++)if(t=i[n],!1===e(t))return this;return this}},{key:\"traverseChildren\",value:function traverseChildren(e,a){return this.eachChild(function(t){var o;if(o=a(t),!1!==o)return t.traverseChildren(e,a)})}},{key:\"replaceInContext\",value:function replaceInContext(e,a){var o,n,r,l,s,i,d,c,p,u;if(!this.children)return!1;for(p=this.children,s=0,d=p.length;s<d;s++)if(o=p[s],r=this[o])if(Array.isArray(r))for(l=i=0,c=r.length;i<c;l=++i){if(n=r[l],e(n))return t.apply(r,[l,l-l+1].concat(u=a(n,this))),u,!0;if(n.replaceInContext(e,a))return!0}else{if(e(r))return this[o]=a(r,this),!0;if(r.replaceInContext(e,a))return!0}}},{key:\"invert\",value:function invert(){return new se(\"!\",this)}},{key:\"unwrapAll\",value:function unwrapAll(){var e;for(e=this;e!==(e=e.unwrap());)continue;return e}},{key:\"updateLocationDataIfMissing\",value:function updateLocationDataIfMissing(e){return this.locationData&&!this.forceUpdateLocation?this:(delete this.forceUpdateLocation,this.locationData=e,this.eachChild(function(a){return a.updateLocationDataIfMissing(e)}))}},{key:\"error\",value:function error(e){return na(e,this.locationData)}},{key:\"makeCode\",value:function makeCode(e){return new g(this,e)}},{key:\"wrapInParentheses\",value:function wrapInParentheses(e){return[this.makeCode(\"(\")].concat(_toConsumableArray(e),[this.makeCode(\")\")])}},{key:\"wrapInBraces\",value:function wrapInBraces(e){return[this.makeCode(\"{\")].concat(_toConsumableArray(e),[this.makeCode(\"}\")])}},{key:\"joinFragmentArrays\",value:function joinFragmentArrays(e,a){var t,o,n,r,l;for(t=[],n=r=0,l=e.length;r<l;n=++r)o=e[n],n&&t.push(this.makeCode(a)),t=t.concat(o);return t}}]),e}();return e.prototype.children=[],e.prototype.isStatement=te,e.prototype.compiledComments=[],e.prototype.includeCommentFragments=te,e.prototype.jumps=te,e.prototype.shouldCache=we,e.prototype.isChainable=te,e.prototype.isAssignable=te,e.prototype.isNumber=te,e.prototype.unwrap=Ee,e.prototype.unfoldSoak=te,e.prototype.assigns=te,e}.call(this),e.HoistTarget=A=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.source=e,t.options={},t.targetFragments={fragments:[]},t}return _inherits(a,e),_createClass(a,null,[{key:\"expand\",value:function expand(e){var a,o,n,r;for(o=n=e.length-1;0<=n;o=n+=-1)a=e[o],a.fragments&&(t.apply(e,[o,o-o+1].concat(r=this.expand(a.fragments))),r);return e}}]),_createClass(a,[{key:\"isStatement\",value:function isStatement(e){return this.source.isStatement(e)}},{key:\"update\",value:function update(e,a){return this.targetFragments.fragments=e.call(this.source,Ze(a,this.options))}},{key:\"compileToFragments\",value:function compileToFragments(e,a){return this.options.indent=e.indent,this.options.level=null==a?e.level:a,[this.targetFragments]}},{key:\"compileNode\",value:function compileNode(e){return this.compileToFragments(e)}},{key:\"compileClosure\",value:function compileClosure(e){return this.compileToFragments(e)}}]),a}(l),e.Block=c=function(){var e=function(e){function t(e){_classCallCheck(this,t);var a=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return a.expressions=Ue(He(e||[])),a}return _inherits(t,e),_createClass(t,[{key:\"push\",value:function push(e){return this.expressions.push(e),this}},{key:\"pop\",value:function pop(){return this.expressions.pop()}},{key:\"unshift\",value:function unshift(e){return this.expressions.unshift(e),this}},{key:\"unwrap\",value:function unwrap(){return 1===this.expressions.length?this.expressions[0]:this}},{key:\"isEmpty\",value:function isEmpty(){return!this.expressions.length}},{key:\"isStatement\",value:function isStatement(e){var a,t,o,n;for(n=this.expressions,t=0,o=n.length;t<o;t++)if(a=n[t],a.isStatement(e))return!0;return!1}},{key:\"jumps\",value:function jumps(e){var a,t,o,n,r;for(r=this.expressions,t=0,n=r.length;t<n;t++)if(a=r[t],o=a.jumps(e))return o}},{key:\"makeReturn\",value:function makeReturn(e){var a,t;for(t=this.expressions.length;t--;){a=this.expressions[t],this.expressions[t]=a.makeReturn(e),a instanceof ge&&!a.expression&&this.expressions.splice(t,1);break}return this}},{key:\"compileToFragments\",value:function compileToFragments(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},a=arguments[1];return e.scope?_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileToFragments\",this).call(this,e,a):this.compileRoot(e)}},{key:\"compileNode\",value:function compileNode(e){var a,o,r,l,s,i,d,c,p,u;for(this.tab=e.indent,u=e.level===z,o=[],p=this.expressions,l=s=0,d=p.length;s<d;l=++s){if(c=p[l],c.hoisted){c.compileToFragments(e);continue}if(c=c.unfoldSoak(e)||c,c instanceof t)o.push(c.compileNode(e));else if(u){if(c.front=!0,r=c.compileToFragments(e),!c.isStatement(e)){r=Ye(r,this);var m=n.call(r,-1),h=_slicedToArray(m,1);i=h[0],\"\"===i.code||i.isComment||r.push(this.makeCode(\";\"))}o.push(r)}else o.push(c.compileToFragments(e,X))}return u?this.spaced?[].concat(this.joinFragmentArrays(o,\"\\n\\n\"),this.makeCode(\"\\n\")):this.joinFragmentArrays(o,\"\\n\"):(a=o.length?this.joinFragmentArrays(o,\", \"):[this.makeCode(\"void 0\")],1<o.length&&e.level>=X?this.wrapInParentheses(a):a)}},{key:\"compileRoot\",value:function compileRoot(e){var a,t,o,n,r,l;for(e.indent=e.bare?\"\":De,e.level=z,this.spaced=!0,e.scope=new ye(null,this,null,null==(r=e.referencedVars)?[]:r),l=e.locals||[],t=0,o=l.length;t<o;t++)n=l[t],e.scope.parameter(n);return a=this.compileWithDeclarations(e),A.expand(a),a=this.compileComments(a),e.bare?a:[].concat(this.makeCode(\"(function() {\\n\"),a,this.makeCode(\"\\n}).call(this);\\n\"))}},{key:\"compileWithDeclarations\",value:function compileWithDeclarations(e){var a,t,o,n,r,l,s,d,i,c,p,u,m,h,g,f,y;for(s=[],m=[],h=this.expressions,d=i=0,p=h.length;i<p&&(l=h[d],l=l.unwrap(),!!(l instanceof K));d=++i);if(e=Ze(e,{level:z}),d){g=this.expressions.splice(d,9e9);var k=[this.spaced,!1];y=k[0],this.spaced=k[1];var T=[this.compileNode(e),y];s=T[0],this.spaced=T[1],this.expressions=g}m=this.compileNode(e);var N=e;if(f=N.scope,f.expressions===this)if(r=e.scope.hasDeclarations(),a=f.hasAssignments,r||a){if(d&&s.push(this.makeCode(\"\\n\")),s.push(this.makeCode(this.tab+\"var \")),r)for(o=f.declaredVariables(),n=c=0,u=o.length;c<u;n=++c){if(t=o[n],s.push(this.makeCode(t)),Object.prototype.hasOwnProperty.call(e.scope.comments,t)){var v;(v=s).push.apply(v,_toConsumableArray(e.scope.comments[t]))}n!==o.length-1&&s.push(this.makeCode(\", \"))}a&&(r&&s.push(this.makeCode(\",\\n\"+(this.tab+De))),s.push(this.makeCode(f.assignedVariables().join(\",\\n\"+(this.tab+De))))),s.push(this.makeCode(\";\\n\"+(this.spaced?\"\\n\":\"\")))}else s.length&&m.length&&s.push(this.makeCode(\"\\n\"));return s.concat(m)}},{key:\"compileComments\",value:function compileComments(e){var t,o,n,s,i,d,c,p,u,l,m,h,g,f,y,k,T,N,r,v,b,$,_,C,D;for(i=c=0,l=e.length;c<l;i=++c){if(n=e[i],n.precedingComments){for(s=\"\",r=e.slice(0,i+1),p=r.length-1;0<=p;p+=-1)if(y=r[p],d=/^ {2,}/m.exec(y.code),d){s=d[0];break}else if(0<=a.call(y.code,\"\\n\"))break;for(t=\"\\n\"+s+function(){var e,a,t,r;for(t=n.precedingComments,r=[],e=0,a=t.length;e<a;e++)o=t[e],o.isHereComment&&o.multiline?r.push(ea(o.code,s,!1)):r.push(o.code);return r}().join(\"\\n\"+s).replace(/^(\\s*)$/gm,\"\"),v=e.slice(0,i+1),k=u=v.length-1;0<=u;k=u+=-1){if(y=v[k],g=y.code.lastIndexOf(\"\\n\"),-1===g)if(0===k)y.code=\"\\n\"+y.code,g=0;else if(y.isStringWithInterpolations&&\"{\"===y.code)t=t.slice(1)+\"\\n\",g=1;else continue;delete n.precedingComments,y.code=y.code.slice(0,g)+t+y.code.slice(g);break}}if(n.followingComments){if(_=n.followingComments[0].trail,s=\"\",!(_&&1===n.followingComments.length))for(f=!1,b=e.slice(i),T=0,m=b.length;T<m;T++)if(C=b[T],!f){if(0<=a.call(C.code,\"\\n\"))f=!0;else continue}else if(d=/^ {2,}/m.exec(C.code),d){s=d[0];break}else if(0<=a.call(C.code,\"\\n\"))break;for(t=1===i&&/^\\s+$/.test(e[0].code)?\"\":_?\" \":\"\\n\"+s,t+=function(){var e,a,t,r;for(t=n.followingComments,r=[],a=0,e=t.length;a<e;a++)o=t[a],o.isHereComment&&o.multiline?r.push(ea(o.code,s,!1)):r.push(o.code);return r}().join(\"\\n\"+s).replace(/^(\\s*)$/gm,\"\"),$=e.slice(i),D=N=0,h=$.length;N<h;D=++N){if(C=$[D],g=C.code.indexOf(\"\\n\"),-1===g)if(D===e.length-1)C.code+=\"\\n\",g=C.code.length;else if(C.isStringWithInterpolations&&\"}\"===C.code)t+=\"\\n\",g=0;else continue;delete n.followingComments,\"\\n\"===C.code&&(t=t.replace(/^\\n/,\"\")),C.code=C.code.slice(0,g)+t+C.code.slice(g);break}}}return e}}],[{key:\"wrap\",value:function wrap(e){return 1===e.length&&e[0]instanceof t?e[0]:new t(e)}}]),t}(l);return e.prototype.children=[\"expressions\"],e}.call(this),e.Literal=K=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.value=e,t}return _inherits(a,e),_createClass(a,[{key:\"assigns\",value:function assigns(e){return e===this.value}},{key:\"compileNode\",value:function compileNode(){return[this.makeCode(this.value)]}},{key:\"toString\",value:function toString(){return\" \"+(this.isStatement()?_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"toString\",this).call(this):this.constructor.name)+\": \"+this.value}}]),a}(l);return e.prototype.shouldCache=te,e}.call(this),e.NumberLiteral=re=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.InfinityLiteral=B=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){return[this.makeCode(\"2e308\")]}}]),a}(re),e.NaNLiteral=oe=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"NaN\"))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;return a=[this.makeCode(\"0/0\")],e.level>=Y?this.wrapInParentheses(a):a}}]),a}(re),e.StringLiteral=ve=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){var e;return e=this.csx?[this.makeCode(this.unquote(!0,!0))]:_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this)}},{key:\"unquote\",value:function unquote(){var e=!!(0<arguments.length&&void 0!==arguments[0])&&arguments[0],a=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],t;return t=this.value.slice(1,-1),e&&(t=t.replace(/\\\\\"/g,'\"')),a&&(t=t.replace(/\\\\n/g,\"\\n\")),t}}]),a}(K),e.RegexLiteral=me=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.PassthroughLiteral=ce=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.IdentifierLiteral=R=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"eachName\",value:function eachName(e){return e(this)}}]),a}(K);return e.prototype.isAssignable=we,e}.call(this),e.CSXTag=p=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(R),e.PropertyName=pe=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K);return e.prototype.isAssignable=we,e}.call(this),e.ComputedPropertyName=f=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return[this.makeCode(\"[\")].concat(_toConsumableArray(this.value.compileToFragments(e,X)),[this.makeCode(\"]\")])}}]),a}(pe),e.StatementLiteral=Ne=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"jumps\",value:function jumps(e){return\"break\"!==this.value||(null==e?void 0:e.loop)||(null==e?void 0:e.block)?\"continue\"!==this.value||null!=e&&e.loop?void 0:this:this}},{key:\"compileNode\",value:function compileNode(){return[this.makeCode(\"\"+this.tab+this.value+\";\")]}}]),a}(K);return e.prototype.isStatement=we,e.prototype.makeReturn=Ee,e}.call(this),e.ThisLiteral=Ie=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"this\"))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t;return a=(null==(t=e.scope.method)?void 0:t.bound)?e.scope.method.context:this.value,[this.makeCode(a)]}}]),a}(K),e.UndefinedLiteral=Oe=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"undefined\"))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return[this.makeCode(e.level>=H?\"(void 0)\":\"void 0\")]}}]),a}(K),e.NullLiteral=ne=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"null\"))}return _inherits(a,e),a}(K),e.BooleanLiteral=i=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.Return=ge=function(){var e=function(e){function t(e){_classCallCheck(this,t);var a=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return a.expression=e,a}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function compileToFragments(e,a){var o,n;return o=null==(n=this.expression)?void 0:n.makeReturn(),o&&!(o instanceof t)?o.compileToFragments(e,a):_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileToFragments\",this).call(this,e,a)}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r;if(t=[],this.expression){for(t=this.expression.compileToFragments(e,q),la(t,this.makeCode(this.tab+\"return \")),n=0,r=t.length;n<r;n++)if(o=t[n],o.isHereComment&&0<=a.call(o.code,\"\\n\"))o.code=ea(o.code,this.tab);else if(o.isLineComment)o.code=\"\"+this.tab+o.code;else break}else t.push(this.makeCode(this.tab+\"return\"));return t.push(this.makeCode(\";\")),t}}]),t}(l);return e.prototype.children=[\"expression\"],e.prototype.isStatement=we,e.prototype.makeReturn=Ee,e.prototype.jumps=Ee,e}.call(this),e.YieldReturn=Pe=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return null==e.scope.parent&&this.error(\"yield can only occur inside functions\"),_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e)}}]),a}(ge),e.AwaitReturn=o=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return null==e.scope.parent&&this.error(\"await can only occur inside functions\"),_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e)}}]),a}(ge),e.Value=Le=function(){var e=function(e){function a(e,t,o){var n=!!(3<arguments.length&&void 0!==arguments[3])&&arguments[3];_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),l,s;if(!t&&e instanceof a){var i;return i=e,_possibleConstructorReturn(r,i)}if(e instanceof de&&e.contains(function(e){return e instanceof Ne})){var d;return d=e.unwrap(),_possibleConstructorReturn(r,d)}return r.base=e,r.properties=t||[],o&&(r[o]=!0),r.isDefaultValue=n,(null==(l=r.base)?void 0:l.comments)&&r.base instanceof Ie&&null!=(null==(s=r.properties[0])?void 0:s.name)&&Qe(r.base,r.properties[0].name),r}return _inherits(a,e),_createClass(a,[{key:\"add\",value:function add(e){return this.properties=this.properties.concat(e),this.forceUpdateLocation=!0,this}},{key:\"hasProperties\",value:function hasProperties(){return 0!==this.properties.length}},{key:\"bareLiteral\",value:function bareLiteral(e){return!this.properties.length&&this.base instanceof e}},{key:\"isArray\",value:function isArray(){return this.bareLiteral(s)}},{key:\"isRange\",value:function isRange(){return this.bareLiteral(ue)}},{key:\"shouldCache\",value:function shouldCache(){return this.hasProperties()||this.base.shouldCache()}},{key:\"isAssignable\",value:function isAssignable(){return this.hasProperties()||this.base.isAssignable()}},{key:\"isNumber\",value:function isNumber(){return this.bareLiteral(re)}},{key:\"isString\",value:function isString(){return this.bareLiteral(ve)}},{key:\"isRegex\",value:function isRegex(){return this.bareLiteral(me)}},{key:\"isUndefined\",value:function isUndefined(){return this.bareLiteral(Oe)}},{key:\"isNull\",value:function isNull(){return this.bareLiteral(ne)}},{key:\"isBoolean\",value:function isBoolean(){return this.bareLiteral(i)}},{key:\"isAtomic\",value:function isAtomic(){var e,a,t,o;for(o=this.properties.concat(this.base),e=0,a=o.length;e<a;e++)if(t=o[e],t.soak||t instanceof u)return!1;return!0}},{key:\"isNotCallable\",value:function isNotCallable(){return this.isNumber()||this.isString()||this.isRegex()||this.isArray()||this.isRange()||this.isSplice()||this.isObject()||this.isUndefined()||this.isNull()||this.isBoolean()}},{key:\"isStatement\",value:function isStatement(e){return!this.properties.length&&this.base.isStatement(e)}},{key:\"assigns\",value:function assigns(e){return!this.properties.length&&this.base.assigns(e)}},{key:\"jumps\",value:function jumps(e){return!this.properties.length&&this.base.jumps(e)}},{key:\"isObject\",value:function isObject(e){return!this.properties.length&&this.base instanceof le&&(!e||this.base.generated)}},{key:\"isElision\",value:function isElision(){return!!(this.base instanceof s)&&this.base.hasElision()}},{key:\"isSplice\",value:function isSplice(){var e,a,t,o;return o=this.properties,e=n.call(o,-1),a=_slicedToArray(e,1),t=a[0],e,t instanceof ke}},{key:\"looksStatic\",value:function looksStatic(e){var a;return(this.this||this.base instanceof Ie||this.base.value===e)&&1===this.properties.length&&\"prototype\"!==(null==(a=this.properties[0].name)?void 0:a.value)}},{key:\"unwrap\",value:function unwrap(){return this.properties.length?this:this.base}},{key:\"cacheReference\",value:function cacheReference(e){var t,o,r,l,s,i,c;return(c=this.properties,t=n.call(c,-1),o=_slicedToArray(t,1),s=o[0],t,2>this.properties.length&&!this.base.shouldCache()&&(null==s||!s.shouldCache()))?[this,this]:(r=new a(this.base,this.properties.slice(0,-1)),r.shouldCache()&&(l=new R(e.scope.freeVariable(\"base\")),r=new a(new de(new d(l,r)))),!s)?[r,l]:(s.shouldCache()&&(i=new R(e.scope.freeVariable(\"name\")),s=new V(new d(i,s.index)),i=new V(i)),[r.add(s),new a(l||r.base,[i||s])])}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r;for(this.base.front=this.front,r=this.properties,a=r.length&&null!=this.base.cached?this.base.cached:this.base.compileToFragments(e,r.length?H:null),r.length&&fe.test(We(a))&&a.push(this.makeCode(\".\")),t=0,o=r.length;t<o;t++){var l;n=r[t],(l=a).push.apply(l,_toConsumableArray(n.compileToFragments(e)))}return a}},{key:\"unfoldSoak\",value:function unfoldSoak(e){var t=this;return null==this.unfoldedSoak?this.unfoldedSoak=function(){var o,n,r,l,s,i,c,p,u;if(r=t.base.unfoldSoak(e),r){var m;return(m=r.body.properties).push.apply(m,_toConsumableArray(t.properties)),r}for(p=t.properties,n=l=0,s=p.length;l<s;n=++l)if(i=p[n],!!i.soak)return i.soak=!1,o=new a(t.base,t.properties.slice(0,n)),u=new a(t.base,t.properties.slice(n)),o.shouldCache()&&(c=new R(e.scope.freeVariable(\"ref\")),o=new de(new d(c,o)),u.base=c),new O(new T(o),u,{soak:!0});return!1}():this.unfoldedSoak}},{key:\"eachName\",value:function eachName(e){return this.hasProperties()?e(this):this.base.isAssignable()?this.base.eachName(e):this.error(\"tried to assign to unassignable value\")}}]),a}(l);return e.prototype.children=[\"base\",\"properties\"],e}.call(this),e.HereComment=S=function(e){function t(e){var a=e.content,o=e.newLine,n=e.unshift;_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.content=a,r.newLine=o,r.unshift=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function compileNode(){var e,t,o,n,r,l,s,i,d;if(i=0<=a.call(this.content,\"\\n\"),t=/\\n\\s*[#|\\*]/.test(this.content),t&&(this.content=this.content.replace(/^([ \\t]*)#(?=\\s)/gm,\" *\")),i){for(n=\"\",d=this.content.split(\"\\n\"),o=0,l=d.length;o<l;o++)s=d[o],r=/^\\s*/.exec(s)[0],r.length>n.length&&(n=r);this.content=this.content.replace(RegExp(\"^(\"+r+\")\",\"gm\"),\"\")}return this.content=\"/*\"+this.content+(t?\" \":\"\")+\"*/\",e=this.makeCode(this.content),e.newLine=this.newLine,e.unshift=this.unshift,e.multiline=i,e.isComment=e.isHereComment=!0,e}}]),t}(l),e.LineComment=J=function(e){function a(e){var t=e.content,o=e.newLine,n=e.unshift;_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return r.content=t,r.newLine=o,r.unshift=n,r}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){var e;return e=this.makeCode(/^\\s*$/.test(this.content)?\"\":\"//\"+this.content),e.newLine=this.newLine,e.unshift=this.unshift,e.trail=!this.newLine&&!this.unshift,e.isComment=e.isLineComment=!0,e}}]),a}(l),e.Call=u=function(){var e=function(e){function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],o=arguments[2],n=arguments[3];_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),l;return r.variable=e,r.args=t,r.soak=o,r.token=n,r.isNew=!1,r.variable instanceof Le&&r.variable.isNotCallable()&&r.variable.error(\"literal is not a function\"),r.csx=r.variable.base instanceof p,\"RegExp\"===(null==(l=r.variable.base)?void 0:l.value)&&0!==r.args.length&&Qe(r.variable,r.args[0]),r}return _inherits(a,e),_createClass(a,[{key:\"updateLocationDataIfMissing\",value:function updateLocationDataIfMissing(e){var t,o;return this.locationData&&this.needsUpdatedStartLocation&&(this.locationData.first_line=e.first_line,this.locationData.first_column=e.first_column,t=(null==(o=this.variable)?void 0:o.base)||this.variable,t.needsUpdatedStartLocation&&(this.variable.locationData.first_line=e.first_line,this.variable.locationData.first_column=e.first_column,t.updateLocationDataIfMissing(e)),delete this.needsUpdatedStartLocation),_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"updateLocationDataIfMissing\",this).call(this,e)}},{key:\"newInstance\",value:function newInstance(){var e,t;return e=(null==(t=this.variable)?void 0:t.base)||this.variable,e instanceof a&&!e.isNew?e.newInstance():this.isNew=!0,this.needsUpdatedStartLocation=!0,this}},{key:\"unfoldSoak\",value:function unfoldSoak(e){var t,o,n,r,l,s,i,d;if(this.soak){if(this.variable instanceof $e)r=new K(this.variable.compile(e)),d=new Le(r),null==this.variable.accessor&&this.variable.error(\"Unsupported reference to 'super'\");else{if(o=ra(e,this,\"variable\"))return o;var c=new Le(this.variable).cacheReference(e),p=_slicedToArray(c,2);r=p[0],d=p[1]}return d=new a(d,this.args),d.isNew=this.isNew,r=new K(\"typeof \"+r.compile(e)+' === \"function\"'),new O(r,new Le(d),{soak:!0})}for(t=this,s=[];;){if(t.variable instanceof a){s.push(t),t=t.variable;continue}if(!(t.variable instanceof Le))break;if(s.push(t),!((t=t.variable.base)instanceof a))break}for(i=s.reverse(),n=0,l=i.length;n<l;n++)t=i[n],o&&(t.variable instanceof a?t.variable=o:t.variable.base=o),o=ra(e,t,\"variable\");return o}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,l,s,i,d,c,p,u,m,g,f,y;if(this.csx)return this.compileCSX(e);if(null!=(u=this.variable)&&(u.front=this.front),i=[],y=(null==(m=this.variable)||null==(g=m.properties)?void 0:g[0])instanceof r,n=function(){var e,a,t,n;for(t=this.args||[],n=[],e=0,a=t.length;e<a;e++)o=t[e],o instanceof h&&n.push(o);return n}.call(this),0<n.length&&y&&!this.variable.base.cached){var k=this.variable.base.cache(e,H,function(){return!1}),T=_slicedToArray(k,1);s=T[0],this.variable.base.cached=s}for(f=this.args,l=c=0,p=f.length;c<p;l=++c){var N;o=f[l],l&&i.push(this.makeCode(\", \")),(N=i).push.apply(N,_toConsumableArray(o.compileToFragments(e,X)))}return d=[],this.isNew&&(this.variable instanceof $e&&this.variable.error(\"Unsupported reference to 'super'\"),d.push(this.makeCode(\"new \"))),(a=d).push.apply(a,_toConsumableArray(this.variable.compileToFragments(e,H))),(t=d).push.apply(t,[this.makeCode(\"(\")].concat(_toConsumableArray(i),[this.makeCode(\")\")])),d}},{key:\"compileCSX\",value:function compileCSX(e){var a=_slicedToArray(this.args,2),t,o,n,r,l,i,d,c,p,u,m;if(r=a[0],l=a[1],r.base.csx=!0,null!=l&&(l.base.csx=!0),i=[this.makeCode(\"<\")],(t=i).push.apply(t,_toConsumableArray(m=this.variable.compileToFragments(e,H))),r.base instanceof s)for(u=r.base.objects,d=0,c=u.length;d<c;d++){var h;p=u[d],o=p.base,n=(null==o?void 0:o.properties)||[],(o instanceof le||o instanceof R)&&(!(o instanceof le)||o.generated||!(1<n.length)&&n[0]instanceof Te)||p.error('Unexpected token. Allowed CSX attributes are: id=\"val\", src={source}, {props...} or attribute.'),p.base instanceof le&&(p.base.csx=!0),i.push(this.makeCode(\" \")),(h=i).push.apply(h,_toConsumableArray(p.compileToFragments(e,q)))}if(l){var g,f;i.push(this.makeCode(\">\")),(g=i).push.apply(g,_toConsumableArray(l.compileNode(e,X))),(f=i).push.apply(f,[this.makeCode(\"</\")].concat(_toConsumableArray(m),[this.makeCode(\">\")]))}else i.push(this.makeCode(\" />\"));return i}}]),a}(l);return e.prototype.children=[\"variable\",\"args\"],e}.call(this),e.SuperCall=_e=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"isStatement\",value:function isStatement(e){var a;return(null==(a=this.expressions)?void 0:a.length)&&e.level===z}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r;if(null==(o=this.expressions)||!o.length)return _get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e);if(r=new K(We(_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e))),n=new c(this.expressions.slice()),e.level>z){var l=r.cache(e,null,we),s=_slicedToArray(l,2);r=s[0],t=s[1],n.push(t)}return n.unshift(r),n.compileToFragments(e,e.level===z?e.level:X)}}]),a}(u);return e.prototype.children=u.prototype.children.concat([\"expressions\"]),e}.call(this),e.Super=$e=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.accessor=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s,i;if(t=e.scope.namedMethod(),(null==t?void 0:t.isMethod)||this.error(\"cannot use super outside of an instance method\"),null==t.ctor&&null==this.accessor){var c=t;o=c.name,i=c.variable,(o.shouldCache()||o instanceof V&&o.index.isAssignable())&&(n=new R(e.scope.parent.freeVariable(\"name\")),o.index=new d(n,o.index)),this.accessor=null==n?o:new V(n)}return(null==(r=this.accessor)||null==(l=r.name)?void 0:l.comments)&&(s=this.accessor.name.comments,delete this.accessor.name.comments),a=new Le(new K(\"super\"),this.accessor?[this.accessor]:[]).compileToFragments(e),s&&Me(s,this.accessor.name),a}}]),a}(l);return e.prototype.children=[\"accessor\"],e}.call(this),e.RegexWithInterpolations=he=function(e){function a(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,new Le(new R(\"RegExp\")),e,!1))}return _inherits(a,e),a}(u),e.TaggedTemplateCall=xe=function(e){function a(e,t,o){return _classCallCheck(this,a),t instanceof ve&&(t=new be(c.wrap([new Le(t)]))),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,e,[t],o))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return this.variable.compileToFragments(e,H).concat(this.args[0].compileToFragments(e,X))}}]),a}(u),e.Extends=E=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.child=e,o.parent=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e){return new u(new Le(new K(sa(\"extend\",e))),[this.child,this.parent]).compileToFragments(e)}}]),a}(l);return e.prototype.children=[\"child\",\"parent\"],e}.call(this),e.Access=r=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.name=e,o.soak=\"soak\"===t,o}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e){var a,t;return a=this.name.compileToFragments(e),t=this.name.unwrap(),t instanceof pe?[this.makeCode(\".\")].concat(_toConsumableArray(a)):[this.makeCode(\"[\")].concat(_toConsumableArray(a),[this.makeCode(\"]\")])}}]),a}(l);return e.prototype.children=[\"name\"],e.prototype.shouldCache=te,e}.call(this),e.Index=V=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.index=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e){return[].concat(this.makeCode(\"[\"),this.index.compileToFragments(e,q),this.makeCode(\"]\"))}},{key:\"shouldCache\",value:function shouldCache(){return this.index.shouldCache()}}]),a}(l);return e.prototype.children=[\"index\"],e}.call(this),e.Range=ue=function(){var e=function(e){function a(e,t,o){_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.from=e,n.to=t,n.exclusive=\"exclusive\"===o,n.equals=n.exclusive?\"\":\"=\",n}return _inherits(a,e),_createClass(a,[{key:\"compileVariables\",value:function compileVariables(e){var a,t;e=Ze(e,{top:!0}),a=Ve(e,\"shouldCache\");var o=this.cacheToCodeFragments(this.from.cache(e,X,a)),n=_slicedToArray(o,2);this.fromC=n[0],this.fromVar=n[1];var r=this.cacheToCodeFragments(this.to.cache(e,X,a)),l=_slicedToArray(r,2);if(this.toC=l[0],this.toVar=l[1],t=Ve(e,\"step\")){var s=this.cacheToCodeFragments(t.cache(e,X,a)),i=_slicedToArray(s,2);this.step=i[0],this.stepVar=i[1]}return this.fromNum=this.from.isNumber()?+this.fromVar:null,this.toNum=this.to.isNumber()?+this.toVar:null,this.stepNum=(null==t?void 0:t.isNumber())?+this.stepVar:null}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s,i,d,c,p,u,m,h,g;if(this.fromVar||this.compileVariables(e),!e.index)return this.compileArray(e);s=null!=this.fromNum&&null!=this.toNum,r=Ve(e,\"index\"),l=Ve(e,\"name\"),c=l&&l!==r,g=s&&!c?\"var \"+r+\" = \"+this.fromC:r+\" = \"+this.fromC,this.toC!==this.toVar&&(g+=\", \"+this.toC),this.step!==this.stepVar&&(g+=\", \"+this.step),d=r+\" <\"+this.equals,n=r+\" >\"+this.equals;var f=[this.fromNum,this.toNum];return o=f[0],m=f[1],p=this.stepNum?this.stepNum+\" !== 0\":this.stepVar+\" !== 0\",t=s?null==this.step?o<=m?d+\" \"+m:n+\" \"+m:(i=o+\" <= \"+r+\" && \"+d+\" \"+m,h=o+\" >= \"+r+\" && \"+n+\" \"+m,o<=m?p+\" && \"+i:p+\" && \"+h):(i=this.fromVar+\" <= \"+r+\" && \"+d+\" \"+this.toVar,h=this.fromVar+\" >= \"+r+\" && \"+n+\" \"+this.toVar,p+\" && (\"+this.fromVar+\" <= \"+this.toVar+\" ? \"+i+\" : \"+h+\")\"),a=this.stepVar?this.stepVar+\" > 0\":this.fromVar+\" <= \"+this.toVar,u=this.stepVar?r+\" += \"+this.stepVar:s?c?o<=m?\"++\"+r:\"--\"+r:o<=m?r+\"++\":r+\"--\":c?a+\" ? ++\"+r+\" : --\"+r:a+\" ? \"+r+\"++ : \"+r+\"--\",c&&(g=l+\" = \"+g),c&&(u=l+\" = \"+u),[this.makeCode(g+\"; \"+t+\"; \"+u)]}},{key:\"compileArray\",value:function compileArray(e){var a,t,o,n,r,l,s,i,d,c,p,u,m;return(s=null!=this.fromNum&&null!=this.toNum,s&&20>=_Mathabs(this.fromNum-this.toNum))?(c=function(){for(var e=[],a=p=this.fromNum,t=this.toNum;p<=t?a<=t:a>=t;p<=t?a++:a--)e.push(a);return e}.apply(this),this.exclusive&&c.pop(),[this.makeCode(\"[\"+c.join(\", \")+\"]\")]):(l=this.tab+De,r=e.scope.freeVariable(\"i\",{single:!0,reserve:!1}),u=e.scope.freeVariable(\"results\",{reserve:!1}),d=\"\\n\"+l+\"var \"+u+\" = [];\",s?(e.index=r,t=We(this.compileNode(e))):(m=r+\" = \"+this.fromC+(this.toC===this.toVar?\"\":\", \"+this.toC),o=this.fromVar+\" <= \"+this.toVar,t=\"var \"+m+\"; \"+o+\" ? \"+r+\" <\"+this.equals+\" \"+this.toVar+\" : \"+r+\" >\"+this.equals+\" \"+this.toVar+\"; \"+o+\" ? \"+r+\"++ : \"+r+\"--\"),i=\"{ \"+u+\".push(\"+r+\"); }\\n\"+l+\"return \"+u+\";\\n\"+e.indent,n=function(e){return null==e?void 0:e.contains(qe)},(n(this.from)||n(this.to))&&(a=\", arguments\"),[this.makeCode(\"(function() {\"+d+\"\\n\"+l+\"for (\"+t+\")\"+i+\"}).apply(this\"+(null==a?\"\":a)+\")\")])}}]),a}(l);return e.prototype.children=[\"from\",\"to\"],e}.call(this),e.Slice=ke=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.range=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a=this.range,t,o,n,r,l,s;return l=a.to,n=a.from,(null==n?void 0:n.shouldCache())&&(n=new Le(new de(n))),(null==l?void 0:l.shouldCache())&&(l=new Le(new de(l))),r=(null==n?void 0:n.compileToFragments(e,q))||[this.makeCode(\"0\")],l&&(t=l.compileToFragments(e,q),o=We(t),(this.range.exclusive||-1!=+o)&&(s=\", \"+(this.range.exclusive?o:l.isNumber()?\"\"+(+o+1):(t=l.compileToFragments(e,H),\"+\"+We(t)+\" + 1 || 9e9\")))),[this.makeCode(\".slice(\"+We(r)+(s||\"\")+\")\")]}}]),a}(l);return e.prototype.children=[\"range\"],e}.call(this),e.Obj=le=function(){var e=function(e){function a(e){var t=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],o=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2];_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.generated=t,n.lhs=o,n.objects=n.properties=e||[],n}return _inherits(a,e),_createClass(a,[{key:\"isAssignable\",value:function isAssignable(){var e,a,t,o,n;for(n=this.properties,e=0,a=n.length;e<a;e++)if(o=n[e],t=Je(o.unwrapAll().value),t&&o.error(t),o instanceof d&&\"object\"===o.context&&(o=o.value),!o.isAssignable())return!1;return!0}},{key:\"shouldCache\",value:function shouldCache(){return!this.isAssignable()}},{key:\"hasSplat\",value:function hasSplat(){var e,a,t,o;for(o=this.properties,e=0,a=o.length;e<a;e++)if(t=o[e],t instanceof Te)return!0;return!1}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r,i,c,p,u,m,h,l,g,y,k,T,N,v,b,$,_,C,D;if(b=this.properties,this.generated)for(c=0,g=b.length;c<g;c++)N=b[c],N instanceof Le&&N.error(\"cannot have an implicit value in an implicit object\");if(this.hasSplat()&&!this.csx)return this.compileSpread(e);if(n=e.indent+=De,l=this.lastNode(this.properties),this.csx)return this.compileCSXAttributes(e);if(this.lhs)for(u=0,y=b.length;u<y;u++)if(v=b[u],!!(v instanceof d)){var E=v;D=E.value,C=D.unwrapAll(),C instanceof s||C instanceof a?C.lhs=!0:C instanceof d&&(C.nestedLhs=!0)}for(i=!0,_=this.properties,h=0,k=_.length;h<k;h++)v=_[h],v instanceof d&&\"object\"===v.context&&(i=!1);for(t=[],t.push(this.makeCode(i?\"\":\"\\n\")),o=$=0,T=b.length;$<T;o=++$){var x;if(v=b[o],p=o===b.length-1?\"\":i?\", \":v===l?\"\\n\":\",\\n\",r=i?\"\":n,m=v instanceof d&&\"object\"===v.context?v.variable:v instanceof d?(this.lhs?void 0:v.operatorToken.error(\"unexpected \"+v.operatorToken.value),v.variable):v,m instanceof Le&&m.hasProperties()&&((\"object\"===v.context||!m.this)&&m.error(\"invalid object key\"),m=m.properties[0].name,v=new d(m,v,\"object\")),m===v)if(v.shouldCache()){var I=v.base.cache(e),S=_slicedToArray(I,2);m=S[0],D=S[1],m instanceof R&&(m=new pe(m.value)),v=new d(m,D,\"object\")}else if(!(m instanceof Le&&m.base instanceof f))\"function\"==typeof v.bareLiteral&&v.bareLiteral(R)||(v=new d(v,v,\"object\"));else if(v.base.value.shouldCache()){var A=v.base.value.cache(e),O=_slicedToArray(A,2);m=O[0],D=O[1],m instanceof R&&(m=new f(m.value)),v=new d(m,D,\"object\")}else v=new d(m,v.base.value,\"object\");r&&t.push(this.makeCode(r)),(x=t).push.apply(x,_toConsumableArray(v.compileToFragments(e,z))),p&&t.push(this.makeCode(p))}return t.push(this.makeCode(i?\"\":\"\\n\"+this.tab)),t=this.wrapInBraces(t),this.front?this.wrapInParentheses(t):t}},{key:\"assigns\",value:function assigns(e){var a,t,o,n;for(n=this.properties,a=0,t=n.length;a<t;a++)if(o=n[a],o.assigns(e))return!0;return!1}},{key:\"eachName\",value:function eachName(e){var a,t,o,n,r;for(n=this.properties,r=[],a=0,t=n.length;a<t;a++)o=n[a],o instanceof d&&\"object\"===o.context&&(o=o.value),o=o.unwrapAll(),null==o.eachName?r.push(void 0):r.push(o.eachName(e));return r}},{key:\"compileSpread\",value:function compileSpread(e){var t,o,n,r,l,s,i,d,c;for(i=this.properties,c=[],s=[],d=[],o=function(){if(s.length&&d.push(new a(s)),c.length){var e;(e=d).push.apply(e,_toConsumableArray(c))}return c=[],s=[]},n=0,r=i.length;n<r;n++)l=i[n],l instanceof Te?(c.push(new Le(l.name)),o()):s.push(l);return o(),d[0]instanceof a||d.unshift(new a),t=new Le(new K(sa(\"_extends\",e))),new u(t,d).compileToFragments(e)}},{key:\"compileCSXAttributes\",value:function compileCSXAttributes(e){var a,t,o,n,r,l,s;for(s=this.properties,a=[],t=o=0,r=s.length;o<r;t=++o){var i;l=s[t],l.csx=!0,n=t===s.length-1?\"\":\" \",l instanceof Te&&(l=new K(\"{\"+l.compile(e)+\"}\")),(i=a).push.apply(i,_toConsumableArray(l.compileToFragments(e,z))),a.push(this.makeCode(n))}return this.front?this.wrapInParentheses(a):a}}]),a}(l);return e.prototype.children=[\"properties\"],e}.call(this),e.Arr=s=function(){var e=function(e){function t(e){var a=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1];_classCallCheck(this,t);var o=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return o.lhs=a,o.objects=e||[],o}return _inherits(t,e),_createClass(t,[{key:\"hasElision\",value:function hasElision(){var e,a,t,o;for(o=this.objects,e=0,a=o.length;e<a;e++)if(t=o[e],t instanceof y)return!0;return!1}},{key:\"isAssignable\",value:function isAssignable(){var e,a,t,o,n;if(!this.objects.length)return!1;for(n=this.objects,e=a=0,t=n.length;a<t;e=++a){if(o=n[e],o instanceof Te&&e+1!==this.objects.length)return!1;if(!(o.isAssignable()&&(!o.isAtomic||o.isAtomic())))return!1}return!0}},{key:\"shouldCache\",value:function shouldCache(){return!this.isAssignable()}},{key:\"compileNode\",value:function compileNode(e){var o,n,s,i,d,c,p,u,m,h,g,l,f,y,k,T,N,v,b,$,_,C,r,D;if(!this.objects.length)return[this.makeCode(\"[]\")];for(e.indent+=De,d=function(e){return\",\"===We(e).trim()},$=!1,o=[],r=this.objects,v=m=0,l=r.length;m<l;v=++m)N=r[v],D=N.unwrapAll(),D.comments&&0===D.comments.filter(function(e){return!e.here}).length&&(D.includeCommentFragments=we),this.lhs&&(D instanceof t||D instanceof le)&&(D.lhs=!0);for(n=function(){var a,t,o,n;for(o=this.objects,n=[],a=0,t=o.length;a<t;a++)N=o[a],n.push(N.compileToFragments(e,X));return n}.call(this),b=n.length,p=!1,u=h=0,f=n.length;h<f;u=++h){var E;for(c=n[u],g=0,y=c.length;g<y;g++)s=c[g],s.isHereComment?s.code=s.code.trim():0!==u&&!1===p&&Xe(s)&&(p=!0);0!==u&&$&&(!d(c)||u===b-1)&&o.push(this.makeCode(\", \")),$=$||!d(c),(E=o).push.apply(E,_toConsumableArray(c))}if(p||0<=a.call(We(o),\"\\n\")){for(i=_=0,k=o.length;_<k;i=++_)s=o[i],s.isHereComment?s.code=ea(s.code,e.indent,!1)+\"\\n\"+e.indent:\", \"===s.code&&(null==s||!s.isElision)&&(s.code=\",\\n\"+e.indent);o.unshift(this.makeCode(\"[\\n\"+e.indent)),o.push(this.makeCode(\"\\n\"+this.tab+\"]\"))}else{for(C=0,T=o.length;C<T;C++)s=o[C],s.isHereComment&&(s.code+=\" \");o.unshift(this.makeCode(\"[\")),o.push(this.makeCode(\"]\"))}return o}},{key:\"assigns\",value:function assigns(e){var a,t,o,n;for(n=this.objects,a=0,t=n.length;a<t;a++)if(o=n[a],o.assigns(e))return!0;return!1}},{key:\"eachName\",value:function eachName(e){var a,t,o,n,r;for(n=this.objects,r=[],a=0,t=n.length;a<t;a++)o=n[a],o=o.unwrapAll(),r.push(o.eachName(e));return r}}]),t}(l);return e.prototype.children=[\"objects\"],e}.call(this),e.Class=m=function(){var e=function(e){function o(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:new c;_classCallCheck(this,o);var n=_possibleConstructorReturn(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));return n.variable=e,n.parent=a,n.body=t,n}return _inherits(o,e),_createClass(o,[{key:\"compileNode\",value:function compileNode(e){var a,t,o;if(this.name=this.determineName(),a=this.walkBody(),this.parent instanceof Le&&!this.parent.hasProperties()&&(o=this.parent.base.value),this.hasNameClash=null!=this.name&&this.name===o,t=this,a||this.hasNameClash?t=new k(t,a):null==this.name&&e.level===z&&(t=new de(t)),this.boundMethods.length&&this.parent&&(null==this.variable&&(this.variable=new R(e.scope.freeVariable(\"_class\"))),null==this.variableRef)){var n=this.variable.cache(e),r=_slicedToArray(n,2);this.variable=r[0],this.variableRef=r[1]}this.variable&&(t=new d(this.variable,t,null,{moduleDeclaration:this.moduleDeclaration})),this.compileNode=this.compileClassDeclaration;try{return t.compileToFragments(e)}finally{delete this.compileNode}}},{key:\"compileClassDeclaration\",value:function compileClassDeclaration(e){var a,t,o;if((this.externalCtor||this.boundMethods.length)&&null==this.ctor&&(this.ctor=this.makeDefaultConstructor()),null!=(a=this.ctor)&&(a.noReturn=!0),this.boundMethods.length&&this.proxyBoundMethods(),e.indent+=De,o=[],o.push(this.makeCode(\"class \")),this.name&&o.push(this.makeCode(this.name)),null!=(null==(t=this.variable)?void 0:t.comments)&&this.compileCommentFragments(e,this.variable,o),this.name&&o.push(this.makeCode(\" \")),this.parent){var n;(n=o).push.apply(n,[this.makeCode(\"extends \")].concat(_toConsumableArray(this.parent.compileToFragments(e)),[this.makeCode(\" \")]))}if(o.push(this.makeCode(\"{\")),!this.body.isEmpty()){var r;this.body.spaced=!0,o.push(this.makeCode(\"\\n\")),(r=o).push.apply(r,_toConsumableArray(this.body.compileToFragments(e,z))),o.push(this.makeCode(\"\\n\"+this.tab))}return o.push(this.makeCode(\"}\")),o}},{key:\"determineName\",value:function determineName(){var e,t,o,l,s,i,d;return this.variable?(i=this.variable.properties,e=n.call(i,-1),t=_slicedToArray(e,1),d=t[0],e,s=d?d instanceof r&&d.name:this.variable.base,!(s instanceof R||s instanceof pe))?null:(l=s.value,d||(o=Je(l),o&&this.variable.error(o)),0<=a.call(G,l)?\"_\"+l:l):null}},{key:\"walkBody\",value:function walkBody(){var e,a,o,n,r,l,s,i,d,p,u,m,g,f,y,k,T,N;for(this.ctor=null,this.boundMethods=[],o=null,i=[],r=this.body.expressions,s=0,T=r.slice(),p=0,m=T.length;p<m;p++)if(n=T[p],n instanceof Le&&n.isObject(!0)){for(y=n.base.properties,l=[],a=0,N=0,k=function(){if(a>N)return l.push(new Le(new le(y.slice(N,a),!0)))};e=y[a];)(d=this.addInitializerExpression(e))&&(k(),l.push(d),i.push(d),N=a+1),a++;k(),t.apply(r,[s,s-s+1].concat(l)),l,s+=l.length}else(d=this.addInitializerExpression(n))&&(i.push(d),r[s]=d),s+=1;for(u=0,g=i.length;u<g;u++)f=i[u],f instanceof h&&(f.ctor?(this.ctor&&f.error(\"Cannot define more than one constructor in a class\"),this.ctor=f):f.isStatic&&f.bound?f.context=this.name:f.bound&&this.boundMethods.push(f));if(i.length!==r.length)return this.body.expressions=function(){var e,a,t;for(t=[],e=0,a=i.length;e<a;e++)n=i[e],t.push(n.hoist());return t}(),new c(r)}},{key:\"addInitializerExpression\",value:function addInitializerExpression(e){return e.unwrapAll()instanceof ce?e:this.validInitializerMethod(e)?this.addInitializerMethod(e):null}},{key:\"validInitializerMethod\",value:function validInitializerMethod(e){return!!(e instanceof d&&e.value instanceof h)&&(!(\"object\"!==e.context||e.variable.hasProperties())||e.variable.looksStatic(this.name)&&(this.name||!e.value.bound))}},{key:\"addInitializerMethod\",value:function addInitializerMethod(e){var a,t,o;return o=e.variable,a=e.value,a.isMethod=!0,a.isStatic=o.looksStatic(this.name),a.isStatic?a.name=o.properties[0]:(t=o.base,a.name=new(t.shouldCache()?V:r)(t),a.name.updateLocationDataIfMissing(t.locationData),\"constructor\"===t.value&&(a.ctor=this.parent?\"derived\":\"base\"),a.bound&&a.ctor&&a.error(\"Cannot define a constructor as a bound (fat arrow) function\")),a}},{key:\"makeDefaultConstructor\",value:function makeDefaultConstructor(){var e,a,t;return t=this.addInitializerMethod(new d(new Le(new pe(\"constructor\")),new h)),this.body.unshift(t),this.parent&&t.body.push(new _e(new $e,[new Te(new R(\"arguments\"))])),this.externalCtor&&(a=new Le(this.externalCtor,[new r(new pe(\"apply\"))]),e=[new Ie,new R(\"arguments\")],t.body.push(new u(a,e)),t.body.makeReturn()),t}},{key:\"proxyBoundMethods\",value:function proxyBoundMethods(){var e,a;return this.ctor.thisAssignments=function(){var t,o,n,l;for(n=this.boundMethods,l=[],t=0,o=n.length;t<o;t++)e=n[t],this.parent&&(e.classVariable=this.variableRef),a=new Le(new Ie,[e.name]),l.push(new d(a,new u(new Le(a,[new r(new pe(\"bind\"))]),[new Ie])));return l}.call(this),null}}]),o}(l);return e.prototype.children=[\"variable\",\"parent\",\"body\"],e}.call(this),e.ExecutableClassBody=k=function(){var e=function(e){function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:new c;_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.class=e,o.body=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,l,s,i,c,p,m,g,f;return(i=this.body.jumps())&&i.error(\"Class bodies cannot contain pure statements\"),(o=this.body.contains(qe))&&o.error(\"Class bodies shouldn't reference arguments\"),p=[],t=[new Ie],f=new h(p,this.body),c=new de(new u(new Le(f,[new r(new pe(\"call\"))]),t)),this.body.spaced=!0,e.classScope=f.makeScope(e.scope),this.name=null==(g=this.class.name)?e.classScope.freeVariable(this.defaultClassVariableName):g,s=new R(this.name),n=this.walkBody(),this.setContext(),this.class.hasNameClash&&(m=new R(e.classScope.freeVariable(\"superClass\")),f.params.push(new ie(m)),t.push(this.class.parent),this.class.parent=m),this.externalCtor&&(l=new R(e.classScope.freeVariable(\"ctor\",{reserve:!1})),this.class.externalCtor=l,this.externalCtor.variable.base=l),this.name===this.class.name?this.body.expressions.unshift(this.class):this.body.expressions.unshift(new d(new R(this.name),this.class)),(a=this.body.expressions).unshift.apply(a,_toConsumableArray(n)),this.body.push(s),c.compileToFragments(e)}},{key:\"walkBody\",value:function walkBody(){var e=this,a,t,o;for(a=[],o=0;(t=this.body.expressions[o])&&!!(t instanceof Le&&t.isString());)if(t.hoisted)o++;else{var n;(n=a).push.apply(n,_toConsumableArray(this.body.expressions.splice(o,1)))}return this.traverseChildren(!1,function(a){var t,o,n,r,l,s;if(a instanceof m||a instanceof A)return!1;if(t=!0,a instanceof c){for(s=a.expressions,o=n=0,r=s.length;n<r;o=++n)l=s[o],l instanceof Le&&l.isObject(!0)?(t=!1,a.expressions[o]=e.addProperties(l.base.properties)):l instanceof d&&l.variable.looksStatic(e.name)&&(l.value.isStatic=!0);a.expressions=He(a.expressions)}return t}),a}},{key:\"setContext\",value:function setContext(){var e=this;return this.body.traverseChildren(!1,function(a){return a instanceof Ie?a.value=e.name:a instanceof h&&a.bound&&a.isStatic?a.context=e.name:void 0})}},{key:\"addProperties\",value:function addProperties(e){var a,t,o,n,l,s,i;return l=function(){var l,c,p;for(p=[],l=0,c=e.length;l<c;l++)a=e[l],i=a.variable,t=null==i?void 0:i.base,s=a.value,delete a.context,\"constructor\"===t.value?(s instanceof h&&t.error(\"constructors must be defined at the top level of a class body\"),a=this.externalCtor=new d(new Le,s)):a.variable.this?a.value instanceof h&&(a.value.isStatic=!0):(o=new(t.shouldCache()?V:r)(t),n=new r(new pe(\"prototype\")),i=new Le(new Ie,[n,o]),a.variable=i),p.push(a);return p}.call(this),Ue(l)}}]),a}(l);return e.prototype.children=[\"class\",\"body\"],e.prototype.defaultClassVariableName=\"_Class\",e}.call(this),e.ModuleDeclaration=Z=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.clause=e,o.source=t,o.checkSource(),o}return _inherits(a,e),_createClass(a,[{key:\"checkSource\",value:function checkSource(){if(null!=this.source&&this.source instanceof be)return this.source.error(\"the name of the module to be imported from must be an uninterpolated string\")}},{key:\"checkScope\",value:function checkScope(e,a){if(0!==e.indent.length)return this.error(a+\" statements must be at top-level scope\")}}]),a}(l);return e.prototype.children=[\"clause\",\"source\"],e.prototype.isStatement=we,e.prototype.jumps=Ee,e.prototype.makeReturn=Ee,e}.call(this),e.ImportDeclaration=F=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t;if(this.checkScope(e,\"import\"),e.importedSymbols=[],a=[],a.push(this.makeCode(this.tab+\"import \")),null!=this.clause){var o;(o=a).push.apply(o,_toConsumableArray(this.clause.compileNode(e)))}return null!=(null==(t=this.source)?void 0:t.value)&&(null!==this.clause&&a.push(this.makeCode(\" from \")),a.push(this.makeCode(this.source.value))),a.push(this.makeCode(\";\")),a}}]),a}(Z),e.ImportClause=L=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.defaultBinding=e,o.namedImports=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;if(a=[],null!=this.defaultBinding){var t;(t=a).push.apply(t,_toConsumableArray(this.defaultBinding.compileNode(e))),null!=this.namedImports&&a.push(this.makeCode(\", \"))}if(null!=this.namedImports){var o;(o=a).push.apply(o,_toConsumableArray(this.namedImports.compileNode(e)))}return a}}]),a}(l);return e.prototype.children=[\"defaultBinding\",\"namedImports\"],e}.call(this),e.ExportDeclaration=b=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t;return this.checkScope(e,\"export\"),a=[],a.push(this.makeCode(this.tab+\"export \")),this instanceof $&&a.push(this.makeCode(\"default \")),!(this instanceof $)&&(this.clause instanceof d||this.clause instanceof m)&&(this.clause instanceof m&&!this.clause.variable&&this.clause.error(\"anonymous classes cannot be exported\"),a.push(this.makeCode(\"var \")),this.clause.moduleDeclaration=\"export\"),a=null!=this.clause.body&&this.clause.body instanceof c?a.concat(this.clause.compileToFragments(e,z)):a.concat(this.clause.compileNode(e)),null!=(null==(t=this.source)?void 0:t.value)&&a.push(this.makeCode(\" from \"+this.source.value)),a.push(this.makeCode(\";\")),a}}]),a}(Z),e.ExportNamedDeclaration=_=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(b),e.ExportDefaultDeclaration=$=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(b),e.ExportAllDeclaration=v=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(b),e.ModuleSpecifierList=ee=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.specifiers=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s;if(a=[],e.indent+=De,t=function(){var a,t,o,n;for(o=this.specifiers,n=[],a=0,t=o.length;a<t;a++)s=o[a],n.push(s.compileToFragments(e,X));return n}.call(this),0!==this.specifiers.length){for(a.push(this.makeCode(\"{\\n\"+e.indent)),n=r=0,l=t.length;r<l;n=++r){var i;o=t[n],n&&a.push(this.makeCode(\",\\n\"+e.indent)),(i=a).push.apply(i,_toConsumableArray(o))}a.push(this.makeCode(\"\\n}\"))}else a.push(this.makeCode(\"{}\"));return a}}]),a}(l);return e.prototype.children=[\"specifiers\"],e}.call(this),e.ImportSpecifierList=M=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(ee),e.ExportSpecifierList=D=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(ee),e.ModuleSpecifier=Q=function(){var e=function(e){function a(e,t,o){_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),r,l;if(n.original=e,n.alias=t,n.moduleDeclarationType=o,n.original.comments||(null==(r=n.alias)?void 0:r.comments)){if(n.comments=[],n.original.comments){var s;(s=n.comments).push.apply(s,_toConsumableArray(n.original.comments))}if(null==(l=n.alias)?void 0:l.comments){var i;(i=n.comments).push.apply(i,_toConsumableArray(n.alias.comments))}}return n.identifier=null==n.alias?n.original.value:n.alias.value,n}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;return e.scope.find(this.identifier,this.moduleDeclarationType),a=[],a.push(this.makeCode(this.original.value)),null!=this.alias&&a.push(this.makeCode(\" as \"+this.alias.value)),a}}]),a}(l);return e.prototype.children=[\"original\",\"alias\"],e}.call(this),e.ImportSpecifier=j=function(e){function t(e,a){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a,\"import\"))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function compileNode(e){var o;return(o=this.identifier,0<=a.call(e.importedSymbols,o))||e.scope.check(this.identifier)?this.error(\"'\"+this.identifier+\"' has already been declared\"):e.importedSymbols.push(this.identifier),_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,e)}}]),t}(Q),e.ImportDefaultSpecifier=w=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(j),e.ImportNamespaceSpecifier=P=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(j),e.ExportSpecifier=C=function(e){function a(e,t){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,e,t,\"export\"))}return _inherits(a,e),a}(Q),e.Assign=d=function(){var e=function(e){function n(e,a,t){var o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};_classCallCheck(this,n);var r=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.variable=e,r.value=a,r.context=t,r.param=o.param,r.subpattern=o.subpattern,r.operatorToken=o.operatorToken,r.moduleDeclaration=o.moduleDeclaration,r}return _inherits(n,e),_createClass(n,[{key:\"isStatement\",value:function isStatement(e){return(null==e?void 0:e.level)===z&&null!=this.context&&(this.moduleDeclaration||0<=a.call(this.context,\"?\"))}},{key:\"checkAssignability\",value:function checkAssignability(e,a){if(Object.prototype.hasOwnProperty.call(e.scope.positions,a.value)&&\"import\"===e.scope.variables[e.scope.positions[a.value]].type)return a.error(\"'\"+a.value+\"' is read-only\")}},{key:\"assigns\",value:function assigns(e){return this[\"object\"===this.context?\"value\":\"variable\"].assigns(e)}},{key:\"unfoldSoak\",value:function unfoldSoak(e){return ra(e,this,\"variable\")}},{key:\"compileNode\",value:function compileNode(e){var a=this,o,n,r,l,s,i,d,c,p,u,g,f,y,k,T;if(l=this.variable instanceof Le,l){if(this.variable.param=this.param,this.variable.isArray()||this.variable.isObject()){if(this.variable.base.lhs=!0,r=this.variable.contains(function(e){return e instanceof le&&e.hasSplat()}),!this.variable.isAssignable()||this.variable.isArray()&&r)return this.compileDestructuring(e);if(this.variable.isObject()&&r&&(i=this.compileObjectDestruct(e)),i)return i}if(this.variable.isSplice())return this.compileSplice(e);if(\"||=\"===(p=this.context)||\"&&=\"===p||\"?=\"===p)return this.compileConditional(e);if(\"**=\"===(u=this.context)||\"//=\"===u||\"%%=\"===u)return this.compileSpecialMath(e)}if(this.context||(T=this.variable.unwrapAll(),!T.isAssignable()&&this.variable.error(\"'\"+this.variable.compile(e)+\"' can't be assigned\"),T.eachName(function(t){var o,n,r;if(\"function\"!=typeof t.hasProperties||!t.hasProperties())return(r=Je(t.value),r&&t.error(r),a.checkAssignability(e,t),a.moduleDeclaration)?e.scope.add(t.value,a.moduleDeclaration):a.param?e.scope.add(t.value,\"alwaysDeclare\"===a.param?\"var\":\"param\"):(e.scope.find(t.value),t.comments&&!e.scope.comments[t.value]&&!(a.value instanceof m)&&t.comments.every(function(e){return e.here&&!e.multiline}))?(n=new R(t.value),n.comments=t.comments,o=[],a.compileCommentFragments(e,n,o),e.scope.comments[t.value]=o):void 0})),this.value instanceof h)if(this.value.isStatic)this.value.name=this.variable.properties[0];else if(2<=(null==(g=this.variable.properties)?void 0:g.length)){var N,v,b,$;f=this.variable.properties,N=f,v=_toArray(N),d=v.slice(0),N,b=t.call(d,-2),$=_slicedToArray(b,2),c=$[0],s=$[1],b,\"prototype\"===(null==(y=c.name)?void 0:y.value)&&(this.value.name=s)}return(this.csx&&(this.value.base.csxAttribute=!0),k=this.value.compileToFragments(e,X),n=this.variable.compileToFragments(e,X),\"object\"===this.context)?(this.variable.shouldCache()&&(n.unshift(this.makeCode(\"[\")),n.push(this.makeCode(\"]\"))),n.concat(this.makeCode(this.csx?\"=\":\": \"),k)):(o=n.concat(this.makeCode(\" \"+(this.context||\"=\")+\" \"),k),e.level>X||l&&this.variable.base instanceof le&&!this.nestedLhs&&!0!==this.param?this.wrapInParentheses(o):o)}},{key:\"compileObjectDestruct\",value:function compileObjectDestruct(e){var a,t,o,l,i,d,p,m,h,g,f,y;if(t=function(a){var t;if(a instanceof n){var o=a.variable.cache(e),r=_slicedToArray(o,2);return a.variable=r[0],t=r[1],t}return a},o=function(a){var o,r;return r=t(a),o=a instanceof n&&a.variable!==r,o||!r.isAssignable()?r:new K(\"'\"+r.compileWithoutComments(e)+\"'\")},h=function traverseRest(a,l){var i,d,c,u,m,g,f,y,p,k,T;for(k=[],T=void 0,null==l.properties&&(l=new Le(l)),d=c=0,u=a.length;c<u;d=++c)if(p=a[d],f=g=m=null,p instanceof n){if(\"function\"==typeof(i=p.value).isObject?i.isObject():void 0){if(\"object\"!==p.context)continue;m=p.value.base.properties}else if(p.value instanceof n&&p.value.variable.isObject()){m=p.value.variable.base.properties;var N=p.value.value.cache(e),v=_slicedToArray(N,2);p.value.value=v[0],f=v[1]}if(m){var b;g=new Le(l.base,l.properties.concat([new r(t(p))])),f&&(g=new Le(new se(\"?\",g,f))),(b=k).push.apply(b,_toConsumableArray(h(m,g)))}}else p instanceof Te&&(null!=T&&p.error(\"multiple rest elements are disallowed in object destructuring\"),T=d,k.push({name:p.name.unwrapAll(),source:l,excludeProps:new s(function(){var e,t,n;for(n=[],e=0,t=a.length;e<t;e++)y=a[e],y!==p&&n.push(o(y));return n}())}));return null!=T&&a.splice(T,1),k},y=this.value.shouldCache()?new R(e.scope.freeVariable(\"ref\",{reserve:!1})):this.value.base,p=h(this.variable.base.properties,y),!(p&&0<p.length))return!1;var k=this.value.cache(e),T=_slicedToArray(k,2);for(this.value=T[0],f=T[1],m=new c([this]),l=0,i=p.length;l<i;l++)d=p[l],g=new u(new Le(new K(sa(\"objectWithoutKeys\",e))),[d.source,d.excludeProps]),m.push(new n(new Le(d.name),g,null,{param:this.param?\"alwaysDeclare\":null}));return a=m.compileToFragments(e),e.level===z&&(a.shift(),a.pop()),a}},{key:\"compileDestructuring\",value:function compileDestructuring(e){var t=this,o,l,d,c,p,m,h,g,f,k,T,v,i,b,$,_,C,D,E,x,I,S,A,O,L,F,w,P,j,M,U,B,G,H;if(U=e.level===z,B=this.value,I=this.variable.base.objects,S=I.length,0===S)return d=B.compileToFragments(e),e.level>=Y?this.wrapInParentheses(d):d;var W=I,q=_slicedToArray(W,1);return E=q[0],1===S&&E instanceof N&&E.error(\"Destructuring assignment has no target\"),j=function(){var e,a,t;for(t=[],v=e=0,a=I.length;e<a;v=++e)E=I[v],E instanceof Te&&t.push(v);return t}(),g=function(){var e,a,t;for(t=[],v=e=0,a=I.length;e<a;v=++e)E=I[v],E instanceof N&&t.push(v);return t}(),M=[].concat(_toConsumableArray(j),_toConsumableArray(g)),1<M.length&&I[M.sort()[1]].error(\"multiple splats/expansions are disallowed in an assignment\"),_=0<(null==j?void 0:j.length),b=0<(null==g?void 0:g.length),$=this.variable.isObject(),i=this.variable.isArray(),G=B.compileToFragments(e,X),H=We(G),l=[],(!(B.unwrap()instanceof R)||this.variable.assigns(H))&&(O=e.scope.freeVariable(\"ref\"),l.push([this.makeCode(O+\" = \")].concat(_toConsumableArray(G))),G=[this.makeCode(O)],H=O),P=function(a){return function(t,o){var n=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],l,s;return l=[new R(t),new re(o)],n&&l.push(new re(n)),s=new Le(new R(sa(a,e)),[new r(new pe(\"call\"))]),new Le(new u(s,l))}},c=P(\"slice\"),p=P(\"splice\"),T=function(e){var a,t,o;for(o=[],v=a=0,t=e.length;a<t;v=++a)E=e[v],E.base instanceof le&&E.base.hasSplat()&&o.push(v);return o},k=function(e){var a,t,o;for(o=[],v=a=0,t=e.length;a<t;v=++a)E=e[v],E instanceof n&&\"object\"===E.context&&o.push(v);return o},x=function(e){var a,t;for(a=0,t=e.length;a<t;a++)if(E=e[a],!E.isAssignable())return!0;return!1},m=function(e){return T(e).length||k(e).length||x(e)||1===S},D=function(o,s,i){var d,p,u,m,h,g,f,k;for(g=T(o),f=[],v=u=0,m=o.length;u<m;v=++u)if(E=o[v],!(E instanceof y)){if(E instanceof n&&\"object\"===E.context){var N=E;if(p=N.variable.base,s=N.value,s instanceof n){var b=s;s=b.variable}p=s.this?s.properties[0].name:new pe(s.unwrap().value),d=p.unwrap()instanceof pe,k=new Le(B,[new(d?r:V)(p)])}else s=function(){switch(!1){case!(E instanceof Te):return new Le(E.name);case 0>a.call(g,v):return new Le(E.base);default:return E}}(),k=function(){switch(!1){case!(E instanceof Te):return c(i,v);default:return new Le(new K(i),[new V(new re(v))])}}();h=Je(s.unwrap().value),h&&s.error(h),f.push(l.push(new n(s,k,null,{param:t.param,subpattern:!0}).compileToFragments(e,X)))}return f},o=function(a,o,r){var i;return o=new Le(new s(a,!0)),i=r instanceof Le?r:new Le(new K(r)),l.push(new n(o,i,null,{param:t.param,subpattern:!0}).compileToFragments(e,X))},A=function(e,a,t){return m(e)?D(e,a,t):o(e,a,t)},M.length?(h=M[0],C=I.slice(0,h+(_?1:0)),w=I.slice(h+1),0!==C.length&&A(C,G,H),0!==w.length&&(L=function(){switch(!1){case!_:return p(I[h].unwrapAll().value,-1*w.length);case!b:return c(H,-1*w.length)}}(),m(w)&&(F=L,L=e.scope.freeVariable(\"ref\"),l.push([this.makeCode(L+\" = \")].concat(_toConsumableArray(F.compileToFragments(e,X))))),A(w,G,L))):A(I,G,H),U||this.subpattern||l.push(G),f=this.joinFragmentArrays(l,\", \"),e.level<X?f:this.wrapInParentheses(f)}},{key:\"compileConditional\",value:function compileConditional(e){var t=this.variable.cacheReference(e),o=_slicedToArray(t,2),r,l,s;return l=o[0],s=o[1],l.properties.length||!(l.base instanceof K)||l.base instanceof Ie||e.scope.check(l.base.value)||this.variable.error('the variable \"'+l.base.value+\"\\\" can't be assigned with \"+this.context+\" because it has not been declared before\"),0<=a.call(this.context,\"?\")?(e.isExistentialEquals=!0,new O(new T(l),s,{type:\"if\"}).addElse(new n(s,this.value,\"=\")).compileToFragments(e)):(r=new se(this.context.slice(0,-1),l,new n(s,this.value,\"=\")).compileToFragments(e),e.level<=X?r:this.wrapInParentheses(r))}},{key:\"compileSpecialMath\",value:function compileSpecialMath(e){var a=this.variable.cacheReference(e),t=_slicedToArray(a,2),o,r;return o=t[0],r=t[1],new n(o,new se(this.context.slice(0,-1),r,this.value)).compileToFragments(e)}},{key:\"compileSplice\",value:function compileSplice(e){var a=this.variable.properties.pop(),t=a.range,o,n,r,l,s,i,d,c,p,u;if(r=t.from,d=t.to,n=t.exclusive,c=this.variable.unwrapAll(),c.comments&&(Qe(c,this),delete this.variable.comments),i=this.variable.compile(e),r){var m=this.cacheToCodeFragments(r.cache(e,Y)),h=_slicedToArray(m,2);l=h[0],s=h[1]}else l=s=\"0\";d?(null==r?void 0:r.isNumber())&&d.isNumber()?(d=d.compile(e)-s,!n&&(d+=1)):(d=d.compile(e,H)+\" - \"+s,!n&&(d+=\" + 1\")):d=\"9e9\";var g=this.value.cache(e,X),f=_slicedToArray(g,2);return p=f[0],u=f[1],o=[].concat(this.makeCode(sa(\"splice\",e)+\".apply(\"+i+\", [\"+l+\", \"+d+\"].concat(\"),p,this.makeCode(\")), \"),u),e.level>z?this.wrapInParentheses(o):o}},{key:\"eachName\",value:function eachName(e){return this.variable.unwrapAll().eachName(e)}}]),n}(l);return e.prototype.children=[\"variable\",\"value\"],e.prototype.isAssignable=we,e}.call(this),e.FuncGlyph=I=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.glyph=e,t}return _inherits(a,e),a}(l),e.Code=h=function(){var e=function(e){function t(e,a,n,r){_classCallCheck(this,t);var l=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),s;return l.funcGlyph=n,l.paramStart=r,l.params=e||[],l.body=a||new c,l.bound=\"=>\"===(null==(s=l.funcGlyph)?void 0:s.glyph),l.isGenerator=!1,l.isAsync=!1,l.isMethod=!1,l.body.traverseChildren(!1,function(e){if((e instanceof se&&e.isYield()||e instanceof Pe)&&(l.isGenerator=!0),(e instanceof se&&e.isAwait()||e instanceof o)&&(l.isAsync=!0),l.isGenerator&&l.isAsync)return e.error(\"function can't contain both yield and await\")}),l}return _inherits(t,e),_createClass(t,[{key:\"isStatement\",value:function isStatement(){return this.isMethod}},{key:\"makeScope\",value:function makeScope(e){return new ye(e,this.body,this)}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r,c,p,h,g,f,y,T,v,i,b,$,k,l,_,C,D,m,E,x,I,S,A,L,F,w,P,j,M,U,V,B,W,X,Y,q,z,J,Z,Q;for(this.ctor&&(this.isAsync&&this.name.error(\"Class constructor may not be async\"),this.isGenerator&&this.name.error(\"Class constructor may not be a generator\")),this.bound&&((null==(P=e.scope.method)?void 0:P.bound)&&(this.context=e.scope.method.context),!this.context&&(this.context=\"this\")),e.scope=Ve(e,\"classScope\")||this.makeScope(e.scope),e.scope.shared=Ve(e,\"sharedScope\"),e.indent+=De,delete e.bare,delete e.isExistentialEquals,L=[],g=[],J=null==(j=null==(M=this.thisAssignments)?void 0:M.slice())?[]:j,F=[],T=!1,y=!1,S=[],this.eachParamName(function(t,o,n,r){var l,s;if(0<=a.call(S,t)&&o.error(\"multiple parameters named '\"+t+\"'\"),S.push(t),o.this)return t=o.properties[0].name.value,0<=a.call(G,t)&&(t=\"_\"+t),s=new R(e.scope.freeVariable(t,{reserve:!1})),l=n.name instanceof le&&r instanceof d&&\"=\"===r.operatorToken.value?new d(new R(t),s,\"object\"):s,n.renameParam(o,l),J.push(new d(o,s))}),U=this.params,v=b=0,l=U.length;b<l;v=++b)I=U[v],I.splat||I instanceof N?(T?I.error(\"only one splat or expansion parameter is allowed per function definition\"):I instanceof N&&1===this.params.length&&I.error(\"an expansion parameter cannot be the only parameter in a function definition\"),T=!0,I.splat?(I.name instanceof s?(z=e.scope.freeVariable(\"arg\"),L.push(w=new Le(new R(z))),g.push(new d(new Le(I.name),w))):(L.push(w=I.asReference(e)),z=We(w.compileNodeWithoutComments(e))),I.shouldCache()&&g.push(new d(new Le(I.name),w))):(z=e.scope.freeVariable(\"args\"),L.push(new Le(new R(z)))),e.scope.parameter(z)):((I.shouldCache()||y)&&(I.assignedInBody=!0,y=!0,null==I.value?g.push(new d(new Le(I.name),I.asReference(e),null,{param:\"alwaysDeclare\"})):(h=new se(\"===\",I,new Oe),i=new d(new Le(I.name),I.value),g.push(new O(h,i)))),T?(F.push(I),null!=I.value&&!I.shouldCache()&&(h=new se(\"===\",I,new Oe),i=new d(new Le(I.name),I.value),g.push(new O(h,i))),null!=(null==(V=I.name)?void 0:V.value)&&e.scope.add(I.name.value,\"var\",!0)):(w=I.shouldCache()?I.asReference(e):null==I.value||I.assignedInBody?I:new d(new Le(I.name),I.value,null,{param:!0}),I.name instanceof s||I.name instanceof le?(I.name.lhs=!0,I.name instanceof le&&I.name.hasSplat()?(z=e.scope.freeVariable(\"arg\"),e.scope.parameter(z),w=new Le(new R(z)),g.push(new d(new Le(I.name),w,null,{param:\"alwaysDeclare\"})),null!=I.value&&!I.assignedInBody&&(w=new d(w,I.value,null,{param:!0}))):!I.shouldCache()&&I.name.eachName(function(a){return e.scope.parameter(a.value)})):(A=null==I.value?w:I,e.scope.parameter(We(A.compileToFragmentsWithoutComments(e)))),L.push(w)));if(0!==F.length&&g.unshift(new d(new Le(new s([new Te(new R(z))].concat(_toConsumableArray(function(){var a,t,o;for(o=[],a=0,t=F.length;a<t;a++)I=F[a],o.push(I.asReference(e));return o}())))),new Le(new R(z)))),Z=this.body.isEmpty(),!this.expandCtorSuper(J)){var ee;(ee=this.body.expressions).unshift.apply(ee,_toConsumableArray(J))}for((t=this.body.expressions).unshift.apply(t,_toConsumableArray(g)),this.isMethod&&this.bound&&!this.isStatic&&this.classVariable&&(c=new Le(new K(sa(\"boundMethodCheck\",e))),this.body.expressions.unshift(new u(c,[new Le(new Ie),this.classVariable]))),Z||this.noReturn||this.body.makeReturn(),this.bound&&this.isGenerator&&(Q=this.body.contains(function(e){return e instanceof se&&\"yield\"===e.operator}),(Q||this).error(\"yield cannot occur inside bound (fat arrow) functions\")),E=[],this.isMethod&&this.isStatic&&E.push(\"static\"),this.isAsync&&E.push(\"async\"),this.isMethod||this.bound?this.isGenerator&&E.push(\"*\"):E.push(\"function\"+(this.isGenerator?\"*\":\"\")),q=[this.makeCode(\"(\")],null!=(null==(B=this.paramStart)?void 0:B.comments)&&this.compileCommentFragments(e,this.paramStart,q),v=$=0,_=L.length;$<_;v=++$){var ae;if(I=L[v],0!==v&&q.push(this.makeCode(\", \")),T&&v===L.length-1&&q.push(this.makeCode(\"...\")),Y=e.scope.variables.length,(ae=q).push.apply(ae,_toConsumableArray(I.compileToFragments(e))),Y!==e.scope.variables.length){var te;f=e.scope.variables.splice(Y),(te=e.scope.parent.variables).push.apply(te,_toConsumableArray(f))}}if(q.push(this.makeCode(\")\")),null!=(null==(W=this.funcGlyph)?void 0:W.comments)){for(X=this.funcGlyph.comments,k=0,C=X.length;k<C;k++)p=X[k],p.unshift=!1;this.compileCommentFragments(e,this.funcGlyph,q)}if(this.body.isEmpty()||(r=this.body.compileWithDeclarations(e)),this.isMethod){var oe=[e.scope,e.scope.parent];m=oe[0],e.scope=oe[1],x=this.name.compileToFragments(e),\".\"===x[0].code&&x.shift(),e.scope=m}if(n=this.joinFragmentArrays(function(){var e,a,t;for(t=[],a=0,e=E.length;a<e;a++)D=E[a],t.push(this.makeCode(D));return t}.call(this),\" \"),E.length&&x&&n.push(this.makeCode(\" \")),x){var ne;(ne=n).push.apply(ne,_toConsumableArray(x))}if((o=n).push.apply(o,_toConsumableArray(q)),this.bound&&!this.isMethod&&n.push(this.makeCode(\" =>\")),n.push(this.makeCode(\" {\")),null==r?void 0:r.length){var re;(re=n).push.apply(re,[this.makeCode(\"\\n\")].concat(_toConsumableArray(r),[this.makeCode(\"\\n\"+this.tab)]))}return n.push(this.makeCode(\"}\")),this.isMethod?Ye(n,this):this.front||e.level>=H?this.wrapInParentheses(n):n}},{key:\"eachParamName\",value:function eachParamName(e){var a,t,o,n,r;for(n=this.params,r=[],a=0,t=n.length;a<t;a++)o=n[a],r.push(o.eachName(e));return r}},{key:\"traverseChildren\",value:function traverseChildren(e,a){if(e)return _get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"traverseChildren\",this).call(this,e,a)}},{key:\"replaceInContext\",value:function replaceInContext(e,a){return!!this.bound&&_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"replaceInContext\",this).call(this,e,a)}},{key:\"expandCtorSuper\",value:function expandCtorSuper(e){var a=this,t,o,n,r;return!!this.ctor&&(this.eachSuperCall(c.wrap(this.params),function(e){return e.error(\"'super' is not allowed in constructor parameter defaults\")}),r=this.eachSuperCall(this.body,function(t){return\"base\"===a.ctor&&t.error(\"'super' is only allowed in derived class constructors\"),t.expressions=e}),t=e.length&&e.length!==(null==(n=this.thisAssignments)?void 0:n.length),\"derived\"===this.ctor&&!r&&t&&(o=e[0].variable,o.error(\"Can't use @params in derived class constructors without calling super\")),r)}},{key:\"eachSuperCall\",value:function eachSuperCall(e,a){var o=this,n;return n=!1,e.traverseChildren(!0,function(e){var r;return e instanceof _e?(!e.variable.accessor&&(r=e.args.filter(function(e){return!(e instanceof m)&&(!(e instanceof t)||e.bound)}),c.wrap(r).traverseChildren(!0,function(e){if(e.this)return e.error(\"Can't call super with @params in derived class constructors\")})),n=!0,a(e)):e instanceof Ie&&\"derived\"===o.ctor&&!n&&e.error(\"Can't reference 'this' before calling super in derived class constructors\"),!(e instanceof _e)&&(!(e instanceof t)||e.bound)}),n}}]),t}(l);return e.prototype.children=[\"params\",\"body\"],e.prototype.jumps=te,e}.call(this),e.Param=ie=function(){var e=function(e){function t(e,a,o){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),r,l;return n.name=e,n.value=a,n.splat=o,r=Je(n.name.unwrapAll().value),r&&n.name.error(r),n.name instanceof le&&n.name.generated&&(l=n.name.objects[0].operatorToken,l.error(\"unexpected \"+l.value)),n}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function compileToFragments(e){return this.name.compileToFragments(e,X)}},{key:\"compileToFragmentsWithoutComments\",value:function compileToFragmentsWithoutComments(e){return this.name.compileToFragmentsWithoutComments(e,X)}},{key:\"asReference\",value:function asReference(e){var t,o;return this.reference?this.reference:(o=this.name,o.this?(t=o.properties[0].name.value,0<=a.call(G,t)&&(t=\"_\"+t),o=new R(e.scope.freeVariable(t))):o.shouldCache()&&(o=new R(e.scope.freeVariable(\"arg\"))),o=new Le(o),o.updateLocationDataIfMissing(this.locationData),this.reference=o)}},{key:\"shouldCache\",value:function shouldCache(){return this.name.shouldCache()}},{key:\"eachName\",value:function eachName(e){var a=this,t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.name,o,n,r,l,s,i,c,p;if(o=function(t){var o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;return e(\"@\"+t.properties[0].name.value,t,a,o)},t instanceof K)return e(t.value,t,this);if(t instanceof Le)return o(t);for(p=null==(c=t.objects)?[]:c,n=0,r=p.length;n<r;n++)i=p[n],l=i,i instanceof d&&null==i.context&&(i=i.variable),i instanceof d?(i=i.value instanceof d?i.value.variable:i.value,this.eachName(e,i.unwrap())):i instanceof Te?(s=i.name.unwrap(),e(s.value,s,this)):i instanceof Le?i.isArray()||i.isObject()?this.eachName(e,i.base):i.this?o(i,l):e(i.base.value,i.base,this):i instanceof y?i:!(i instanceof N)&&i.error(\"illegal parameter \"+i.compile())}},{key:\"renameParam\",value:function renameParam(e,a){var t,o;return t=function(a){return a===e},o=function(e,t){var o;return t instanceof le?(o=e,e.this&&(o=e.properties[0].name),e.this&&o.value===a.value?new Le(a):new d(new Le(o),a,\"object\")):a},this.replaceInContext(t,o)}}]),t}(l);return e.prototype.children=[\"name\",\"value\"],e}.call(this),e.Splat=Te=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.name=e.compile?e:new K(e),t}return _inherits(a,e),_createClass(a,[{key:\"isAssignable\",value:function isAssignable(){return this.name.isAssignable()&&(!this.name.isAtomic||this.name.isAtomic())}},{key:\"assigns\",value:function assigns(e){return this.name.assigns(e)}},{key:\"compileNode\",value:function compileNode(e){return[this.makeCode(\"...\")].concat(_toConsumableArray(this.name.compileToFragments(e,Y)))}},{key:\"unwrap\",value:function unwrap(){return this.name}}]),a}(l);return e.prototype.children=[\"name\"],e}.call(this),e.Expansion=N=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){return this.error(\"Expansion must be used inside a destructuring assignment or parameter list\")}},{key:\"asReference\",value:function asReference(){return this}},{key:\"eachName\",value:function eachName(){}}]),a}(l);return e.prototype.shouldCache=te,e}.call(this),e.Elision=y=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e,t){var o;return o=_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileToFragments\",this).call(this,e,t),o.isElision=!0,o}},{key:\"compileNode\",value:function compileNode(){return[this.makeCode(\", \")]}},{key:\"asReference\",value:function asReference(){return this}},{key:\"eachName\",value:function eachName(){}}]),a}(l);return e.prototype.isAssignable=we,e.prototype.shouldCache=te,e}.call(this),e.While=Fe=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.condition=(null==t?void 0:t.invert)?e.invert():e,o.guard=null==t?void 0:t.guard,o}return _inherits(a,e),_createClass(a,[{key:\"makeReturn\",value:function makeReturn(e){return e?_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"makeReturn\",this).call(this,e):(this.returns=!this.jumps(),this)}},{key:\"addBody\",value:function addBody(e){return this.body=e,this}},{key:\"jumps\",value:function jumps(){var e,a,t,o,n;if(e=this.body.expressions,!e.length)return!1;for(a=0,o=e.length;a<o;a++)if(n=e[a],t=n.jumps({loop:!0}))return t;return!1}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n;return e.indent+=De,n=\"\",t=this.body,t.isEmpty()?t=this.makeCode(\"\"):(this.returns&&(t.makeReturn(o=e.scope.freeVariable(\"results\")),n=\"\"+this.tab+o+\" = [];\\n\"),this.guard&&(1<t.expressions.length?t.expressions.unshift(new O(new de(this.guard).invert(),new Ne(\"continue\"))):this.guard&&(t=c.wrap([new O(this.guard,t)]))),t=[].concat(this.makeCode(\"\\n\"),t.compileToFragments(e,z),this.makeCode(\"\\n\"+this.tab))),a=[].concat(this.makeCode(n+this.tab+\"while (\"),this.condition.compileToFragments(e,q),this.makeCode(\") {\"),t,this.makeCode(\"}\")),this.returns&&a.push(this.makeCode(\"\\n\"+this.tab+\"return \"+o+\";\")),a}}]),a}(l);return e.prototype.children=[\"condition\",\"guard\",\"body\"],e.prototype.isStatement=we,e}.call(this),e.Op=se=function(){var e=function(e){function n(e,a,o,r){var l;_classCallCheck(this,n);var s=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),i;if(\"in\"===e){var d;return d=new U(a,o),_possibleConstructorReturn(s,d)}if(\"do\"===e){var c;return c=n.prototype.generateDo(a),_possibleConstructorReturn(s,c)}if(\"new\"===e){if((i=a.unwrap())instanceof u&&!i.do&&!i.isNew){var p;return p=i.newInstance(),_possibleConstructorReturn(s,p)}(a instanceof h&&a.bound||a.do)&&(a=new de(a))}return s.operator=t[e]||e,s.first=a,s.second=o,s.flip=!!r,l=s,_possibleConstructorReturn(s,l)}return _inherits(n,e),_createClass(n,[{key:\"isNumber\",value:function isNumber(){var e;return this.isUnary()&&(\"+\"===(e=this.operator)||\"-\"===e)&&this.first instanceof Le&&this.first.isNumber()}},{key:\"isAwait\",value:function isAwait(){return\"await\"===this.operator}},{key:\"isYield\",value:function isYield(){var e;return\"yield\"===(e=this.operator)||\"yield*\"===e}},{key:\"isUnary\",value:function isUnary(){return!this.second}},{key:\"shouldCache\",value:function shouldCache(){return!this.isNumber()}},{key:\"isChainable\",value:function isChainable(){var e;return\"<\"===(e=this.operator)||\">\"===e||\">=\"===e||\"<=\"===e||\"===\"===e||\"!==\"===e}},{key:\"invert\",value:function invert(){var e,a,t,r,l;if(this.isChainable()&&this.first.isChainable()){for(e=!0,a=this;a&&a.operator;)e&&(e=a.operator in o),a=a.first;if(!e)return new de(this).invert();for(a=this;a&&a.operator;)a.invert=!a.invert,a.operator=o[a.operator],a=a.first;return this}return(r=o[this.operator])?(this.operator=r,this.first.unwrap()instanceof n&&this.first.invert(),this):this.second?new de(this).invert():\"!\"===this.operator&&(t=this.first.unwrap())instanceof n&&(\"!\"===(l=t.operator)||\"in\"===l||\"instanceof\"===l)?t:new n(\"!\",this)}},{key:\"unfoldSoak\",value:function unfoldSoak(e){var a;return(\"++\"===(a=this.operator)||\"--\"===a||\"delete\"===a)&&ra(e,this,\"first\")}},{key:\"generateDo\",value:function generateDo(e){var a,t,o,n,r,l,s,i;for(l=[],t=e instanceof d&&(s=e.value.unwrap())instanceof h?s:e,i=t.params||[],o=0,n=i.length;o<n;o++)r=i[o],r.value?(l.push(r.value),delete r.value):l.push(r);return a=new u(e,l),a.do=!0,a}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l;if(t=this.isChainable()&&this.first.isChainable(),t||(this.first.front=this.front),\"delete\"===this.operator&&e.scope.check(this.first.unwrapAll().value)&&this.error(\"delete operand may not be argument or var\"),(\"--\"===(r=this.operator)||\"++\"===r)&&(n=Je(this.first.unwrapAll().value),n&&this.first.error(n)),this.isYield()||this.isAwait())return this.compileContinuation(e);if(this.isUnary())return this.compileUnary(e);if(t)return this.compileChain(e);switch(this.operator){case\"?\":return this.compileExistence(e,this.second.isDefaultValue);case\"**\":return this.compilePower(e);case\"//\":return this.compileFloorDivision(e);case\"%%\":return this.compileModulo(e);default:return o=this.first.compileToFragments(e,Y),l=this.second.compileToFragments(e,Y),a=[].concat(o,this.makeCode(\" \"+this.operator+\" \"),l),e.level<=Y?a:this.wrapInParentheses(a)}}},{key:\"compileChain\",value:function compileChain(e){var a=this.first.second.cache(e),t=_slicedToArray(a,2),o,n,r;return this.first.second=t[0],r=t[1],n=this.first.compileToFragments(e,Y),o=n.concat(this.makeCode(\" \"+(this.invert?\"&&\":\"||\")+\" \"),r.compileToFragments(e),this.makeCode(\" \"+this.operator+\" \"),this.second.compileToFragments(e,Y)),this.wrapInParentheses(o)}},{key:\"compileExistence\",value:function compileExistence(e,a){var t,o;return this.first.shouldCache()?(o=new R(e.scope.freeVariable(\"ref\")),t=new de(new d(o,this.first))):(t=this.first,o=t),new O(new T(t,a),o,{type:\"if\"}).addElse(this.second).compileToFragments(e)}},{key:\"compileUnary\",value:function compileUnary(e){var a,t,o;return(t=[],a=this.operator,t.push([this.makeCode(a)]),\"!\"===a&&this.first instanceof T)?(this.first.negated=!this.first.negated,this.first.compileToFragments(e)):e.level>=H?new de(this).compileToFragments(e):(o=\"+\"===a||\"-\"===a,(\"new\"===a||\"typeof\"===a||\"delete\"===a||o&&this.first instanceof n&&this.first.operator===a)&&t.push([this.makeCode(\" \")]),(o&&this.first instanceof n||\"new\"===a&&this.first.isStatement(e))&&(this.first=new de(this.first)),t.push(this.first.compileToFragments(e,Y)),this.flip&&t.reverse(),this.joinFragmentArrays(t,\"\"))}},{key:\"compileContinuation\",value:function compileContinuation(e){var t,o,n,r;return o=[],t=this.operator,null==e.scope.parent&&this.error(this.operator+\" can only occur inside functions\"),(null==(n=e.scope.method)?void 0:n.bound)&&e.scope.method.isGenerator&&this.error(\"yield cannot occur inside bound (fat arrow) functions\"),0<=a.call(Object.keys(this.first),\"expression\")&&!(this.first instanceof Se)?null!=this.first.expression&&o.push(this.first.expression.compileToFragments(e,Y)):(e.level>=q&&o.push([this.makeCode(\"(\")]),o.push([this.makeCode(t)]),\"\"!==(null==(r=this.first.base)?void 0:r.value)&&o.push([this.makeCode(\" \")]),o.push(this.first.compileToFragments(e,Y)),e.level>=q&&o.push([this.makeCode(\")\")])),this.joinFragmentArrays(o,\"\")}},{key:\"compilePower\",value:function compilePower(e){var a;return a=new Le(new R(\"Math\"),[new r(new pe(\"pow\"))]),new u(a,[this.first,this.second]).compileToFragments(e)}},{key:\"compileFloorDivision\",value:function compileFloorDivision(e){var a,t,o;return t=new Le(new R(\"Math\"),[new r(new pe(\"floor\"))]),o=this.second.shouldCache()?new de(this.second):this.second,a=new n(\"/\",this.first,o),new u(t,[a]).compileToFragments(e)}},{key:\"compileModulo\",value:function compileModulo(e){var a;return a=new Le(new K(sa(\"modulo\",e))),new u(a,[this.first,this.second]).compileToFragments(e)}},{key:\"toString\",value:function toString(e){return _get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"toString\",this).call(this,e,this.constructor.name+\" \"+this.operator)}}]),n}(l),t,o;return t={\"==\":\"===\",\"!=\":\"!==\",of:\"in\",yieldfrom:\"yield*\"},o={\"!==\":\"===\",\"===\":\"!==\"},e.prototype.children=[\"first\",\"second\"],e}.call(this),e.In=U=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.object=e,o.array=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r;if(this.array instanceof Le&&this.array.isArray()&&this.array.base.objects.length){for(r=this.array.base.objects,t=0,o=r.length;t<o;t++)if(n=r[t],!!(n instanceof Te)){a=!0;break}if(!a)return this.compileOrTest(e)}return this.compileLoopTest(e)}},{key:\"compileOrTest\",value:function compileOrTest(e){var a=this.object.cache(e,Y),t=_slicedToArray(a,2),o,n,r,l,s,i,d,c,p,u;p=t[0],d=t[1];var m=this.negated?[\" !== \",\" && \"]:[\" === \",\" || \"],h=_slicedToArray(m,2);for(o=h[0],n=h[1],u=[],c=this.array.base.objects,r=s=0,i=c.length;s<i;r=++s)l=c[r],r&&u.push(this.makeCode(n)),u=u.concat(r?d:p,this.makeCode(o),l.compileToFragments(e,H));return e.level<Y?u:this.wrapInParentheses(u)}},{key:\"compileLoopTest\",value:function compileLoopTest(e){var a=this.object.cache(e,X),t=_slicedToArray(a,2),o,n,r;return(r=t[0],n=t[1],o=[].concat(this.makeCode(sa(\"indexOf\",e)+\".call(\"),this.array.compileToFragments(e,X),this.makeCode(\", \"),n,this.makeCode(\") \"+(this.negated?\"< 0\":\">= 0\"))),We(r)===We(n))?o:(o=r.concat(this.makeCode(\", \"),o),e.level<X?o:this.wrapInParentheses(o))}},{key:\"toString\",value:function toString(e){return _get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"toString\",this).call(this,e,this.constructor.name+(this.negated?\"!\":\"\"))}}]),a}(l);return e.prototype.children=[\"object\",\"array\"],e.prototype.invert=ae,e}.call(this),e.Try=Ae=function(){var e=function(e){function a(e,t,o,n){_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return r.attempt=e,r.errorVariable=t,r.recovery=o,r.ensure=n,r}return _inherits(a,e),_createClass(a,[{key:\"jumps\",value:function jumps(e){var a;return this.attempt.jumps(e)||(null==(a=this.recovery)?void 0:a.jumps(e))}},{key:\"makeReturn\",value:function makeReturn(e){return this.attempt&&(this.attempt=this.attempt.makeReturn(e)),this.recovery&&(this.recovery=this.recovery.makeReturn(e)),this}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l;return e.indent+=De,l=this.attempt.compileToFragments(e,z),a=this.recovery?(o=e.scope.freeVariable(\"error\",{reserve:!1}),r=new R(o),this.errorVariable?(n=Je(this.errorVariable.unwrapAll().value),n?this.errorVariable.error(n):void 0,this.recovery.unshift(new d(this.errorVariable,r))):void 0,[].concat(this.makeCode(\" catch (\"),r.compileToFragments(e),this.makeCode(\") {\\n\"),this.recovery.compileToFragments(e,z),this.makeCode(\"\\n\"+this.tab+\"}\"))):this.ensure||this.recovery?[]:(o=e.scope.freeVariable(\"error\",{reserve:!1}),[this.makeCode(\" catch (\"+o+\") {}\")]),t=this.ensure?[].concat(this.makeCode(\" finally {\\n\"),this.ensure.compileToFragments(e,z),this.makeCode(\"\\n\"+this.tab+\"}\")):[],[].concat(this.makeCode(this.tab+\"try {\\n\"),l,this.makeCode(\"\\n\"+this.tab+\"}\"),a,t)}}]),a}(l);return e.prototype.children=[\"attempt\",\"recovery\",\"ensure\"],e.prototype.isStatement=we,e}.call(this),e.Throw=Se=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.expression=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;return a=this.expression.compileToFragments(e,X),la(a,this.makeCode(\"throw \")),a.unshift(this.makeCode(this.tab)),a.push(this.makeCode(\";\")),a}}]),a}(l);return e.prototype.children=[\"expression\"],e.prototype.isStatement=we,e.prototype.jumps=te,e.prototype.makeReturn=Ee,e}.call(this),e.Existence=T=function(){var e=function(e){function t(e){var o=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1];_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),r;return n.expression=e,n.comparisonTarget=o?\"undefined\":\"null\",r=[],n.expression.traverseChildren(!0,function(e){var t,o,n,l;if(e.comments){for(l=e.comments,o=0,n=l.length;o<n;o++)t=l[o],0>a.call(r,t)&&r.push(t);return delete e.comments}}),Me(r,n),Qe(n.expression,n),n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function compileNode(e){var a,t,o;if(this.expression.front=this.front,o=this.expression.compile(e,Y),this.expression.unwrap()instanceof R&&!e.scope.check(o)){var n=this.negated?[\"===\",\"||\"]:[\"!==\",\"&&\"],r=_slicedToArray(n,2);a=r[0],t=r[1],o=\"typeof \"+o+\" \"+a+' \"undefined\"'+(\"undefined\"===this.comparisonTarget?\"\":\" \"+t+\" \"+o+\" \"+a+\" \"+this.comparisonTarget)}else a=\"null\"===this.comparisonTarget?this.negated?\"==\":\"!=\":this.negated?\"===\":\"!==\",o=o+\" \"+a+\" \"+this.comparisonTarget;return[this.makeCode(e.level<=W?o:\"(\"+o+\")\")]}}]),t}(l);return e.prototype.children=[\"expression\"],e.prototype.invert=ae,e}.call(this),e.Parens=de=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.body=e,t}return _inherits(a,e),_createClass(a,[{key:\"unwrap\",value:function unwrap(){return this.body}},{key:\"shouldCache\",value:function shouldCache(){return this.body.shouldCache()}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r;return(t=this.body.unwrap(),r=null==(n=t.comments)?void 0:n.some(function(e){return e.here&&!e.unshift&&!e.newLine}),t instanceof Le&&t.isAtomic()&&!this.csxAttribute&&!r)?(t.front=this.front,t.compileToFragments(e)):(o=t.compileToFragments(e,q),a=e.level<Y&&!r&&(t instanceof se||t.unwrap()instanceof u||t instanceof x&&t.returns)&&(e.level<W||3>=o.length),this.csxAttribute?this.wrapInBraces(o):a?o:this.wrapInParentheses(o))}}]),a}(l);return e.prototype.children=[\"body\"],e}.call(this),e.StringWithInterpolations=be=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.body=e,t}return _inherits(a,e),_createClass(a,[{key:\"unwrap\",value:function unwrap(){return this}},{key:\"shouldCache\",value:function shouldCache(){return this.body.shouldCache()}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r,l,s,i,d,c;if(this.csxAttribute)return c=new de(new a(this.body)),c.csxAttribute=!0,c.compileNode(e);for(r=this.body.unwrap(),n=[],d=[],r.traverseChildren(!1,function(e){var a,t,o,r,l,s;if(e instanceof ve){if(e.comments){var i;(i=d).push.apply(i,_toConsumableArray(e.comments)),delete e.comments}return n.push(e),!0}if(e instanceof de){if(0!==d.length){for(t=0,r=d.length;t<r;t++)a=d[t],a.unshift=!0,a.newLine=!0;Me(d,e)}return n.push(e),!1}if(e.comments){if(0!==n.length&&!(n[n.length-1]instanceof ve)){for(s=e.comments,o=0,l=s.length;o<l;o++)a=s[o],a.unshift=!1,a.newLine=!0;Me(e.comments,n[n.length-1])}else{var c;(c=d).push.apply(c,_toConsumableArray(e.comments))}delete e.comments}return!0}),l=[],this.csx||l.push(this.makeCode(\"`\")),s=0,i=n.length;s<i;s++)if(o=n[s],o instanceof ve){var p;o.value=o.unquote(!0,this.csx),this.csx||(o.value=o.value.replace(/(\\\\*)(`|\\$\\{)/g,function(e,a,t){return 0==a.length%2?a+\"\\\\\"+t:e})),(p=l).push.apply(p,_toConsumableArray(o.compileToFragments(e)))}else{var u;this.csx||l.push(this.makeCode(\"$\")),t=o.compileToFragments(e,q),(!this.isNestedTag(o)||t.some(function(e){return null!=e.comments}))&&(t=this.wrapInBraces(t),t[0].isStringWithInterpolations=!0,t[t.length-1].isStringWithInterpolations=!0),(u=l).push.apply(u,_toConsumableArray(t))}return this.csx||l.push(this.makeCode(\"`\")),l}},{key:\"isNestedTag\",value:function isNestedTag(e){var a,t,o;return t=null==(o=e.body)?void 0:o.expressions,a=null==t?void 0:t[0].unwrap(),this.csx&&t&&1===t.length&&a instanceof u&&a.csx}}]),a}(l);return e.prototype.children=[\"body\"],e}.call(this),e.For=x=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),n,r,l,s,i,d;if(o.source=t.source,o.guard=t.guard,o.step=t.step,o.name=t.name,o.index=t.index,o.body=c.wrap([e]),o.own=null!=t.own,o.object=null!=t.object,o.from=null!=t.from,o.from&&o.index&&o.index.error(\"cannot use index with for-from\"),o.own&&!o.object&&t.ownTag.error(\"cannot use own with for-\"+(o.from?\"from\":\"in\")),o.object){var p=[o.index,o.name];o.name=p[0],o.index=p[1]}for(((null==(s=o.index)?void 0:\"function\"==typeof s.isArray?s.isArray():void 0)||(null==(i=o.index)?void 0:\"function\"==typeof i.isObject?i.isObject():void 0))&&o.index.error(\"index cannot be a pattern matching expression\"),o.range=o.source instanceof Le&&o.source.base instanceof ue&&!o.source.properties.length&&!o.from,o.pattern=o.name instanceof Le,o.range&&o.index&&o.index.error(\"indexes do not apply to range loops\"),o.range&&o.pattern&&o.name.error(\"cannot pattern match over range loops\"),o.returns=!1,d=[\"source\",\"guard\",\"step\",\"name\",\"index\"],r=0,l=d.length;r<l;r++)(n=d[r],!!o[n])&&(o[n].traverseChildren(!0,function(e){var a,t,r,l;if(e.comments){for(l=e.comments,t=0,r=l.length;t<r;t++)a=l[t],a.newLine=a.unshift=!0;return Qe(e,o[n])}}),Qe(o[n],o));return o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,r,l,s,i,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E,x,I,S,A,L,F,w,P,j,M,U;if(o=c.wrap([this.body]),x=o.expressions,a=n.call(x,-1),t=_slicedToArray(a,1),$=t[0],a,(null==$?void 0:$.jumps())instanceof ge&&(this.returns=!1),F=this.range?this.source.base:this.source,L=e.scope,this.pattern||(C=this.name&&this.name.compile(e,X)),T=this.index&&this.index.compile(e,X),C&&!this.pattern&&L.find(C),T&&!(this.index instanceof Le)&&L.find(T),this.returns&&(A=L.freeVariable(\"results\")),this.from?this.pattern&&(N=L.freeVariable(\"x\",{single:!0})):N=this.object&&T||L.freeVariable(\"i\",{single:!0}),v=(this.range||this.from)&&C||T||N,b=v===N?\"\":v+\" = \",this.step&&!this.range){var V=this.cacheToCodeFragments(this.step.cache(e,X,aa)),B=_slicedToArray(V,2);w=B[0],j=B[1],this.step.isNumber()&&(P=+j)}return this.pattern&&(C=N),U=\"\",f=\"\",u=\"\",y=this.tab+De,this.range?h=F.compileToFragments(Ze(e,{index:N,name:C,step:this.step,shouldCache:aa})):(M=this.source.compile(e,X),(C||this.own)&&!(this.source.unwrap()instanceof R)&&(u+=\"\"+this.tab+(E=L.freeVariable(\"ref\"))+\" = \"+M+\";\\n\",M=E),C&&!this.pattern&&!this.from&&(D=C+\" = \"+M+\"[\"+v+\"]\"),!this.object&&!this.from&&(w!==j&&(u+=\"\"+this.tab+w+\";\\n\"),m=0>P,!(this.step&&null!=P&&m)&&(_=L.freeVariable(\"len\")),i=\"\"+b+N+\" = 0, \"+_+\" = \"+M+\".length\",p=\"\"+b+N+\" = \"+M+\".length - 1\",l=N+\" < \"+_,s=N+\" >= 0\",this.step?(null==P?(l=j+\" > 0 ? \"+l+\" : \"+s,i=\"(\"+j+\" > 0 ? (\"+i+\") : \"+p+\")\"):m&&(l=s,i=p),k=N+\" += \"+j):k=\"\"+(v===N?N+\"++\":\"++\"+N),h=[this.makeCode(i+\"; \"+l+\"; \"+b+k)])),this.returns&&(I=\"\"+this.tab+A+\" = [];\\n\",S=\"\\n\"+this.tab+\"return \"+A+\";\",o.makeReturn(A)),this.guard&&(1<o.expressions.length?o.expressions.unshift(new O(new de(this.guard).invert(),new Ne(\"continue\"))):this.guard&&(o=c.wrap([new O(this.guard,o)]))),this.pattern&&o.expressions.unshift(new d(this.name,this.from?new R(v):new K(M+\"[\"+v+\"]\"))),D&&(U=\"\\n\"+y+D+\";\"),this.object?(h=[this.makeCode(v+\" in \"+M)],this.own&&(f=\"\\n\"+y+\"if (!\"+sa(\"hasProp\",e)+\".call(\"+M+\", \"+v+\")) continue;\")):this.from&&(h=[this.makeCode(v+\" of \"+M)]),r=o.compileToFragments(Ze(e,{indent:y}),z),r&&0<r.length&&(r=[].concat(this.makeCode(\"\\n\"),r,this.makeCode(\"\\n\"))),g=[this.makeCode(u)],I&&g.push(this.makeCode(I)),g=g.concat(this.makeCode(this.tab),this.makeCode(\"for (\"),h,this.makeCode(\") {\"+f+U),r,this.makeCode(this.tab),this.makeCode(\"}\")),S&&g.push(this.makeCode(S)),g}}]),a}(Fe);return e.prototype.children=[\"body\",\"source\",\"guard\",\"step\"],e}.call(this),e.Switch=Ce=function(){var e=function(e){function a(e,t,o){_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.subject=e,n.cases=t,n.otherwise=o,n}return _inherits(a,e),_createClass(a,[{key:\"jumps\",value:function jumps(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{block:!0},a,t,o,n,r,l,s;for(l=this.cases,o=0,r=l.length;o<r;o++){var i=_slicedToArray(l[o],2);if(t=i[0],a=i[1],n=a.jumps(e))return n}return null==(s=this.otherwise)?void 0:s.jumps(e)}},{key:\"makeReturn\",value:function makeReturn(e){var a,t,o,n,r;for(n=this.cases,a=0,t=n.length;a<t;a++)o=n[a],o[1].makeReturn(e);return e&&(this.otherwise||(this.otherwise=new c([new K(\"void 0\")]))),null!=(r=this.otherwise)&&r.makeReturn(e),this}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s,i,d,c,p,u,m,h,g;for(i=e.indent+De,d=e.indent=i+De,l=[].concat(this.makeCode(this.tab+\"switch (\"),this.subject?this.subject.compileToFragments(e,q):this.makeCode(\"false\"),this.makeCode(\") {\\n\")),h=this.cases,s=c=0,u=h.length;c<u;s=++c){var f=_slicedToArray(h[s],2);for(n=f[0],a=f[1],g=He([n]),p=0,m=g.length;p<m;p++)o=g[p],this.subject||(o=o.invert()),l=l.concat(this.makeCode(i+\"case \"),o.compileToFragments(e,q),this.makeCode(\":\\n\"));if(0<(t=a.compileToFragments(e,z)).length&&(l=l.concat(t,this.makeCode(\"\\n\"))),s===this.cases.length-1&&!this.otherwise)break;(r=this.lastNode(a.expressions),!(r instanceof ge||r instanceof Se||r instanceof K&&r.jumps()&&\"debugger\"!==r.value))&&l.push(o.makeCode(d+\"break;\\n\"))}if(this.otherwise&&this.otherwise.expressions.length){var y;(y=l).push.apply(y,[this.makeCode(i+\"default:\\n\")].concat(_toConsumableArray(this.otherwise.compileToFragments(e,z)),[this.makeCode(\"\\n\")]))}return l.push(this.makeCode(this.tab+\"}\")),l}}]),a}(l);return e.prototype.children=[\"subject\",\"cases\",\"otherwise\"],e.prototype.isStatement=we,e}.call(this),e.If=O=function(){var e=function(e){function a(e,t){var o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.body=t,n.condition=\"unless\"===o.type?e.invert():e,n.elseBody=null,n.isChain=!1,n.soak=o.soak,n.condition.comments&&Qe(n.condition,n),n}return _inherits(a,e),_createClass(a,[{key:\"bodyNode\",value:function bodyNode(){var e;return null==(e=this.body)?void 0:e.unwrap()}},{key:\"elseBodyNode\",value:function elseBodyNode(){var e;return null==(e=this.elseBody)?void 0:e.unwrap()}},{key:\"addElse\",value:function addElse(e){return this.isChain?this.elseBodyNode().addElse(e):(this.isChain=e instanceof a,this.elseBody=this.ensureBlock(e),this.elseBody.updateLocationDataIfMissing(e.locationData)),this}},{key:\"isStatement\",value:function isStatement(e){var a;return(null==e?void 0:e.level)===z||this.bodyNode().isStatement(e)||(null==(a=this.elseBodyNode())?void 0:a.isStatement(e))}},{key:\"jumps\",value:function jumps(e){var a;return this.body.jumps(e)||(null==(a=this.elseBody)?void 0:a.jumps(e))}},{key:\"compileNode\",value:function compileNode(e){return this.isStatement(e)?this.compileStatement(e):this.compileExpression(e)}},{key:\"makeReturn\",value:function makeReturn(e){return e&&(this.elseBody||(this.elseBody=new c([new K(\"void 0\")]))),this.body&&(this.body=new c([this.body.makeReturn(e)])),this.elseBody&&(this.elseBody=new c([this.elseBody.makeReturn(e)])),this}},{key:\"ensureBlock\",value:function ensureBlock(e){return e instanceof c?e:new c([e])}},{key:\"compileStatement\",value:function compileStatement(e){var t,o,n,r,l,s,i;return(n=Ve(e,\"chainChild\"),l=Ve(e,\"isExistentialEquals\"),l)?new a(this.condition.invert(),this.elseBodyNode(),{type:\"if\"}).compileToFragments(e):(i=e.indent+De,r=this.condition.compileToFragments(e,q),o=this.ensureBlock(this.body).compileToFragments(Ze(e,{indent:i})),s=[].concat(this.makeCode(\"if (\"),r,this.makeCode(\") {\\n\"),o,this.makeCode(\"\\n\"+this.tab+\"}\")),n||s.unshift(this.makeCode(this.tab)),!this.elseBody)?s:(t=s.concat(this.makeCode(\" else \")),this.isChain?(e.chainChild=!0,t=t.concat(this.elseBody.unwrap().compileToFragments(e,z))):t=t.concat(this.makeCode(\"{\\n\"),this.elseBody.compileToFragments(Ze(e,{indent:i}),z),this.makeCode(\"\\n\"+this.tab+\"}\")),t)}},{key:\"compileExpression\",value:function compileExpression(e){var a,t,o,n;return o=this.condition.compileToFragments(e,W),t=this.bodyNode().compileToFragments(e,X),a=this.elseBodyNode()?this.elseBodyNode().compileToFragments(e,X):[this.makeCode(\"void 0\")],n=o.concat(this.makeCode(\" ? \"),t,this.makeCode(\" : \"),a),e.level>=W?this.wrapInParentheses(n):n}},{key:\"unfoldSoak\",value:function unfoldSoak(){return this.soak&&this}}]),a}(l);return e.prototype.children=[\"condition\",\"body\",\"elseBody\"],e}.call(this),Re={modulo:function modulo(){return\"function(a, b) { return (+a % (b = +b) + b) % b; }\"},objectWithoutKeys:function objectWithoutKeys(){return\"function(o, ks) { var res = {}; for (var k in o) ([].indexOf.call(ks, k) < 0 && {}.hasOwnProperty.call(o, k)) && (res[k] = o[k]); return res; }\"},boundMethodCheck:function boundMethodCheck(){return\"function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } }\"},_extends:function _extends(){return\"Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }\"},hasProp:function hasProp(){return\"{}.hasOwnProperty\"},indexOf:function(){return\"[].indexOf\"},slice:function slice(){return\"[].slice\"},splice:function(){return\"[].splice\"}},z=1,q=2,X=3,W=4,Y=5,H=6,De=\"  \",fe=/^[+-]?\\d+$/,sa=function(e,a){var t,o;return o=a.scope.root,e in o.utilities?o.utilities[e]:(t=o.freeVariable(e),o.assign(t,Re[e](a)),o.utilities[e]=t)},ea=function(e,a){var t=!(2<arguments.length&&void 0!==arguments[2])||arguments[2],o;return o=\"\\n\"===e[e.length-1],e=(t?a:\"\")+e.replace(/\\n/g,\"$&\"+a),e=e.replace(/\\s+$/,\"\"),o&&(e+=\"\\n\"),e},Ye=function(e,a){var t,o,n,r;for(o=n=0,r=e.length;n<r;o=++n)if(t=e[o],t.isHereComment)t.code=ea(t.code,a.tab);else{e.splice(o,0,a.makeCode(\"\"+a.tab));break}return e},Xe=function(e){var a,t,o,n;if(!e.comments)return!1;for(n=e.comments,t=0,o=n.length;t<o;t++)if(a=n[t],!1===a.here)return!0;return!1},Qe=function(e,a){if(null!=e&&e.comments)return Me(e.comments,a),delete e.comments},la=function(e,a){var t,o,n,r,l;for(n=!1,o=r=0,l=e.length;r<l;o=++r)if(t=e[o],!!!t.isComment){e.splice(o,0,a),n=!0;break}return n||e.push(a),e},qe=function(e){return e instanceof R&&\"arguments\"===e.value},ze=function(e){return e instanceof Ie||e instanceof h&&e.bound},aa=function(e){return e.shouldCache()||(\"function\"==typeof e.isAssignable?e.isAssignable():void 0)},ra=function(e,a,t){var o;if(o=a[t].unfoldSoak(e))return a[t]=o.body,o.body=new Le(a),o}}.call(this),{exports:e}.exports}(),require[\"./sourcemap\"]=function(){var e={exports:{}};return function(){var a,t;a=function(){function e(a){_classCallCheck(this,e),this.line=a,this.columns=[]}return _createClass(e,[{key:\"add\",value:function add(e,a){var t=_slicedToArray(a,2),o=t[0],n=t[1],r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return this.columns[e]&&r.noReplace?void 0:this.columns[e]={line:this.line,column:e,sourceLine:o,sourceColumn:n}}},{key:\"sourceLocation\",value:function sourceLocation(e){for(var a;!((a=this.columns[e])||0>=e);)e--;return a&&[a.sourceLine,a.sourceColumn]}}]),e}(),t=function(){var e=function(){function e(){_classCallCheck(this,e),this.lines=[]}return _createClass(e,[{key:\"add\",value:function add(e,t){var o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},n=_slicedToArray(t,2),r,l,s,i;return s=n[0],l=n[1],i=(r=this.lines)[s]||(r[s]=new a(s)),i.add(l,e,o)}},{key:\"sourceLocation\",value:function sourceLocation(e){for(var a=_slicedToArray(e,2),t=a[0],o=a[1],n;!((n=this.lines[t])||0>=t);)t--;return n&&n.sourceLocation(o)}},{key:\"generate\",value:function generate(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,t,o,n,r,l,s,i,d,c,p,u,m,h,g,f,y,k;for(k=0,r=0,s=0,l=0,m=!1,t=\"\",h=this.lines,p=o=0,i=h.length;o<i;p=++o)if(c=h[p],c)for(g=c.columns,n=0,d=g.length;n<d;n++)if(u=g[n],!!u){for(;k<u.line;)r=0,m=!1,t+=\";\",k++;m&&(t+=\",\",m=!1),t+=this.encodeVlq(u.column-r),r=u.column,t+=this.encodeVlq(0),t+=this.encodeVlq(u.sourceLine-s),s=u.sourceLine,t+=this.encodeVlq(u.sourceColumn-l),l=u.sourceColumn,m=!0}return f=e.sourceFiles?e.sourceFiles:e.filename?[e.filename]:[\"<anonymous>\"],y={version:3,file:e.generatedFile||\"\",sourceRoot:e.sourceRoot||\"\",sources:f,names:[],mappings:t},(e.sourceMap||e.inlineMap)&&(y.sourcesContent=[a]),y}},{key:\"encodeVlq\",value:function encodeVlq(e){var a,t,l,s;for(a=\"\",l=0>e?1:0,s=(_Mathabs(e)<<1)+l;s||!a;)t=s&r,s>>=n,s&&(t|=o),a+=this.encodeBase64(t);return a}},{key:\"encodeBase64\",value:function encodeBase64(e){return t[e]||function(){throw new Error(\"Cannot Base64 encode value: \"+e)}()}}]),e}(),t,o,n,r;return n=5,o=1<<n,r=o-1,t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",e}.call(this),e.exports=t}.call(this),e.exports}(),require[\"./coffeescript\"]=function(){var e={};return function(){var a=[].indexOf,t=require(\"./lexer\"),o,n,r,l,s,d,c,i,p,u,m,h,g,f,y;n=t.Lexer;var k=require(\"./parser\");h=k.parser,p=require(\"./helpers\"),r=require(\"./sourcemap\"),m=require(\"../../package.json\"),e.VERSION=m.version,e.FILE_EXTENSIONS=o=[\".coffee\",\".litcoffee\",\".coffee.md\"],e.helpers=p,l=function(e){switch(!1){case\"function\"!=typeof Buffer:return Buffer.from(e).toString(\"base64\");case\"function\"!=typeof btoa:return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(e,a){return _StringfromCharCode(\"0x\"+a)}));default:throw new Error(\"Unable to base64 encode inline sourcemap.\")}},y=function(e){return function(a){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},o;try{return e.call(this,a,t)}catch(e){if(o=e,\"string\"!=typeof a)throw o;throw p.updateSyntaxError(o,a,t.filename)}}},f={},g={},e.compile=d=y(function(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,d,c,m,y,k,T,i,N,v,b,$,_,C,D,E,x,I,S,A,R,O,L;if(a=Object.assign({},a),y=a.sourceMap||a.inlineMap||null==a.filename,d=a.filename||\"<anonymous>\",s(d,e),null==f[d]&&(f[d]=[]),f[d].push(e),y&&($=new r),S=u.tokenize(e,a),a.referencedVars=function(){var e,a,t;for(t=[],e=0,a=S.length;e<a;e++)I=S[e],\"IDENTIFIER\"===I[0]&&t.push(I[1]);return t}(),null==a.bare||!0!==a.bare)for(T=0,v=S.length;T<v;T++)if(I=S[T],\"IMPORT\"===(C=I[0])||\"EXPORT\"===C){a.bare=!0;break}for(m=h.parse(S).compileToFragments(a),o=0,a.header&&(o+=1),a.shiftLine&&(o+=1),t=0,N=\"\",i=0,b=m.length;i<b;i++)c=m[i],y&&(c.locationData&&!/^[;\\s]*$/.test(c.code)&&$.add([c.locationData.first_line,c.locationData.first_column],[o,t],{noReplace:!0}),_=p.count(c.code,\"\\n\"),o+=_,_?t=c.code.length-(c.code.lastIndexOf(\"\\n\")+1):t+=c.code.length),N+=c.code;if(a.header&&(k=\"Generated by CoffeeScript \"+this.VERSION,N=\"// \"+k+\"\\n\"+N),y&&(L=$.generate(a,e),null==g[d]&&(g[d]=[]),g[d].push($)),a.transpile){if(\"object\"!==_typeof(a.transpile))throw new Error(\"The transpile option must be given an object with options to pass to Babel\");A=a.transpile.transpile,delete a.transpile.transpile,R=Object.assign({},a.transpile),L&&null==R.inputSourceMap&&(R.inputSourceMap=L),O=A(N,R),N=O.code,L&&O.map&&(L=O.map)}return a.inlineMap&&(n=l(JSON.stringify(L)),E=\"//# sourceMappingURL=data:application/json;base64,\"+n,x=\"//# sourceURL=\"+(null==(D=a.filename)?\"coffeescript\":D),N=N+\"\\n\"+E+\"\\n\"+x),a.sourceMap?{js:N,sourceMap:$,v3SourceMap:JSON.stringify(L,null,2)}:N}),e.tokens=y(function(e,a){return u.tokenize(e,a)}),e.nodes=y(function(e,a){return\"string\"==typeof e?h.parse(u.tokenize(e,a)):h.parse(e)}),e.run=e.eval=e.register=function(){throw new Error(\"require index.coffee, not this file\")},u=new n,h.lexer={lex:function lex(){var e,a;if(a=h.tokens[this.pos++],a){var t=a,o=_slicedToArray(t,3);e=o[0],this.yytext=o[1],this.yylloc=o[2],h.errorToken=a.origin||a,this.yylineno=this.yylloc.first_line}else e=\"\";return e},setInput:function setInput(e){return h.tokens=e,this.pos=0},upcomingInput:function upcomingInput(){return\"\"}},h.yy=require(\"./nodes\"),h.yy.parseError=function(e,a){var t=a.token,o=h,n,r,l,s,i;s=o.errorToken,i=o.tokens;var d=s,c=_slicedToArray(d,3);return r=c[0],l=c[1],n=c[2],l=function(){switch(!1){case s!==i[i.length-1]:return\"end of input\";case\"INDENT\"!==r&&\"OUTDENT\"!==r:return\"indentation\";case\"IDENTIFIER\"!==r&&\"NUMBER\"!==r&&\"INFINITY\"!==r&&\"STRING\"!==r&&\"STRING_START\"!==r&&\"REGEX\"!==r&&\"REGEX_START\"!==r:return r.replace(/_START$/,\"\").toLowerCase();default:return p.nameWhitespaceCharacter(l)}}(),p.throwSyntaxError(\"unexpected \"+l,n)},c=function(e,a){var t,o,n,r,l,s,i,d,c,p,u,m;return r=void 0,n=\"\",e.isNative()?n=\"native\":(e.isEval()?(r=e.getScriptNameOrSourceURL(),!r&&(n=e.getEvalOrigin()+\", \")):r=e.getFileName(),r||(r=\"<anonymous>\"),d=e.getLineNumber(),o=e.getColumnNumber(),p=a(r,d,o),n=p?r+\":\"+p[0]+\":\"+p[1]:r+\":\"+d+\":\"+o),l=e.getFunctionName(),s=e.isConstructor(),i=!(e.isToplevel()||s),i?(c=e.getMethodName(),m=e.getTypeName(),l?(u=t=\"\",m&&l.indexOf(m)&&(u=m+\".\"),c&&l.indexOf(\".\"+c)!==l.length-c.length-1&&(t=\" [as \"+c+\"]\"),\"\"+u+l+t+\" (\"+n+\")\"):m+\".\"+(c||\"<anonymous>\")+\" (\"+n+\")\"):s?\"new \"+(l||\"<anonymous>\")+\" (\"+n+\")\":l?l+\" (\"+n+\")\":n},i=function(e,t,n){var r,l,s,i,c,u;if(!(\"<anonymous>\"===e||(i=e.slice(e.lastIndexOf(\".\")),0<=a.call(o,i))))return null;if(\"<anonymous>\"!==e&&null!=g[e])return g[e][g[e].length-1];if(null!=g[\"<anonymous>\"])for(c=g[\"<anonymous>\"],l=c.length-1;0<=l;l+=-1)if(s=c[l],u=s.sourceLocation([t-1,n-1]),null!=(null==u?void 0:u[0])&&null!=u[1])return s;return null==f[e]?null:(r=d(f[e][f[e].length-1],{filename:e,sourceMap:!0,literate:p.isLiterate(e)}),r.sourceMap)},Error.prepareStackTrace=function(a,t){var o,n,r;return r=function(e,a,t){var o,n;return n=i(e,a,t),null!=n&&(o=n.sourceLocation([a-1,t-1])),null==o?null:[o[0]+1,o[1]+1]},n=function(){var a,n,l;for(l=[],a=0,n=t.length;a<n&&(o=t[a],o.getFunction()!==e.run);a++)l.push(\"    at \"+c(o,r));return l}(),a.toString()+\"\\n\"+n.join(\"\\n\")+\"\\n\"},s=function(e,a){var t,o,n,r;if(o=a.split(/$/m)[0],r=null==o?void 0:o.match(/^#!\\s*([^\\s]+\\s*)(.*)/),t=null==r||null==(n=r[2])?void 0:n.split(/\\s/).filter(function(e){return\"\"!==e}),1<(null==t?void 0:t.length))return console.error(\"The script to be run begins with a shebang line with more than one\\nargument. This script will fail on platforms such as Linux which only\\nallow a single argument.\"),console.error(\"The shebang line was: '\"+o+\"' in file '\"+e+\"'\"),console.error(\"The arguments were: \"+JSON.stringify(t))}}.call(this),{exports:e}.exports}(),require[\"./browser\"]=function(){var exports={},module={exports:exports};return function(){var indexOf=[].indexOf,CoffeeScript,compile,runScripts;CoffeeScript=require(\"./coffeescript\"),compile=CoffeeScript.compile,CoffeeScript.eval=function(code){var options=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return null==options.bare&&(options.bare=!0),eval(compile(code,options))},CoffeeScript.run=function(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return a.bare=!0,a.shiftLine=!0,Function(compile(e,a))()},module.exports=CoffeeScript,\"undefined\"==typeof window||null===window||(\"undefined\"!=typeof btoa&&null!==btoa&&\"undefined\"!=typeof JSON&&null!==JSON&&(compile=function(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return a.inlineMap=!0,CoffeeScript.compile(e,a)}),CoffeeScript.load=function(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},o=!!(3<arguments.length&&void 0!==arguments[3])&&arguments[3],n;return t.sourceFiles=[e],n=window.ActiveXObject?new window.ActiveXObject(\"Microsoft.XMLHTTP\"):new window.XMLHttpRequest,n.open(\"GET\",e,!0),\"overrideMimeType\"in n&&n.overrideMimeType(\"text/plain\"),n.onreadystatechange=function(){var r,l;if(4===n.readyState){if(0!==(l=n.status)&&200!==l)throw new Error(\"Could not load \"+e);else if(r=[n.responseText,t],!o){var s;(s=CoffeeScript).run.apply(s,_toConsumableArray(r))}if(a)return a(r)}},n.send(null)},runScripts=function(){var e,a,t,o,n,r,l,i,s,d;for(d=window.document.getElementsByTagName(\"script\"),a=[\"text/coffeescript\",\"text/literate-coffeescript\"],e=function(){var e,t,o,n;for(n=[],e=0,t=d.length;e<t;e++)i=d[e],(o=i.type,0<=indexOf.call(a,o))&&n.push(i);return n}(),n=0,t=function execute(){var a;if(a=e[n],a instanceof Array){var o;return(o=CoffeeScript).run.apply(o,_toConsumableArray(a)),n++,t()}},o=r=0,l=e.length;r<l;o=++r)s=e[o],function(o,n){var r,l;return r={literate:o.type===a[1]},l=o.src||o.getAttribute(\"data-src\"),l?(r.filename=l,CoffeeScript.load(l,function(a){return e[n]=a,t()},r,!0)):(r.filename=o.id&&\"\"!==o.id?o.id:\"coffeescript\"+(0===n?\"\":n),r.sourceFiles=[\"embedded\"],e[n]=[o.innerHTML,r])}(s,o);return t()},window.addEventListener?window.addEventListener(\"DOMContentLoaded\",runScripts,!1):window.attachEvent(\"onload\",runScripts))}.call(this),module.exports}(),require[\"./browser\"]}();\"function\"==typeof define&&define.amd?define(function(){return CoffeeScript}):root.CoffeeScript=CoffeeScript})(this);\n});\n\ndefine(\"ace/mode/coffee_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar coffee = require(\"../mode/coffee/coffee\");\n\nwindow.addEventListener = function() {};\n\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(250);\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            coffee.compile(value);\n        } catch(e) {\n            var loc = e.location;\n            if (loc) {\n                errors.push({\n                    row: loc.first_line,\n                    column: loc.first_column,\n                    endRow: loc.last_line,\n                    endColumn: loc.last_column,\n                    text: e.message,\n                    type: \"error\"\n                });\n            }\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n\ndefine(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src/worker-css.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\ndefine(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\ndefine(\"ace/mode/css/csslint\",[], function(require, exports, module) {\nvar parserlib = {};\n(function(){\nfunction EventTarget(){\n    this._listeners = {};\n}\n\nEventTarget.prototype = {\n    constructor: EventTarget,\n    addListener: function(type, listener){\n        if (!this._listeners[type]){\n            this._listeners[type] = [];\n        }\n\n        this._listeners[type].push(listener);\n    },\n    fire: function(event){\n        if (typeof event == \"string\"){\n            event = { type: event };\n        }\n        if (typeof event.target != \"undefined\"){\n            event.target = this;\n        }\n\n        if (typeof event.type == \"undefined\"){\n            throw new Error(\"Event object missing 'type' property.\");\n        }\n\n        if (this._listeners[event.type]){\n            var listeners = this._listeners[event.type].concat();\n            for (var i=0, len=listeners.length; i < len; i++){\n                listeners[i].call(this, event);\n            }\n        }\n    },\n    removeListener: function(type, listener){\n        if (this._listeners[type]){\n            var listeners = this._listeners[type];\n            for (var i=0, len=listeners.length; i < len; i++){\n                if (listeners[i] === listener){\n                    listeners.splice(i, 1);\n                    break;\n                }\n            }\n\n\n        }\n    }\n};\nfunction StringReader(text){\n    this._input = text.replace(/\\n\\r?/g, \"\\n\");\n    this._line = 1;\n    this._col = 1;\n    this._cursor = 0;\n}\n\nStringReader.prototype = {\n    constructor: StringReader,\n    getCol: function(){\n        return this._col;\n    },\n    getLine: function(){\n        return this._line ;\n    },\n    eof: function(){\n        return (this._cursor == this._input.length);\n    },\n    peek: function(count){\n        var c = null;\n        count = (typeof count == \"undefined\" ? 1 : count);\n        if (this._cursor < this._input.length){\n            c = this._input.charAt(this._cursor + count - 1);\n        }\n\n        return c;\n    },\n    read: function(){\n        var c = null;\n        if (this._cursor < this._input.length){\n            if (this._input.charAt(this._cursor) == \"\\n\"){\n                this._line++;\n                this._col=1;\n            } else {\n                this._col++;\n            }\n            c = this._input.charAt(this._cursor++);\n        }\n\n        return c;\n    },\n    mark: function(){\n        this._bookmark = {\n            cursor: this._cursor,\n            line:   this._line,\n            col:    this._col\n        };\n    },\n\n    reset: function(){\n        if (this._bookmark){\n            this._cursor = this._bookmark.cursor;\n            this._line = this._bookmark.line;\n            this._col = this._bookmark.col;\n            delete this._bookmark;\n        }\n    },\n    readTo: function(pattern){\n\n        var buffer = \"\",\n            c;\n        while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) != buffer.length - pattern.length){\n            c = this.read();\n            if (c){\n                buffer += c;\n            } else {\n                throw new Error(\"Expected \\\"\" + pattern + \"\\\" at line \" + this._line  + \", col \" + this._col + \".\");\n            }\n        }\n\n        return buffer;\n\n    },\n    readWhile: function(filter){\n\n        var buffer = \"\",\n            c = this.read();\n\n        while(c !== null && filter(c)){\n            buffer += c;\n            c = this.read();\n        }\n\n        return buffer;\n\n    },\n    readMatch: function(matcher){\n\n        var source = this._input.substring(this._cursor),\n            value = null;\n        if (typeof matcher == \"string\"){\n            if (source.indexOf(matcher) === 0){\n                value = this.readCount(matcher.length);\n            }\n        } else if (matcher instanceof RegExp){\n            if (matcher.test(source)){\n                value = this.readCount(RegExp.lastMatch.length);\n            }\n        }\n\n        return value;\n    },\n    readCount: function(count){\n        var buffer = \"\";\n\n        while(count--){\n            buffer += this.read();\n        }\n\n        return buffer;\n    }\n\n};\nfunction SyntaxError(message, line, col){\n    this.col = col;\n    this.line = line;\n    this.message = message;\n\n}\nSyntaxError.prototype = new Error();\nfunction SyntaxUnit(text, line, col, type){\n    this.col = col;\n    this.line = line;\n    this.text = text;\n    this.type = type;\n}\nSyntaxUnit.fromToken = function(token){\n    return new SyntaxUnit(token.value, token.startLine, token.startCol);\n};\n\nSyntaxUnit.prototype = {\n    constructor: SyntaxUnit,\n    valueOf: function(){\n        return this.text;\n    },\n    toString: function(){\n        return this.text;\n    }\n\n};\nfunction TokenStreamBase(input, tokenData){\n    this._reader = input ? new StringReader(input.toString()) : null;\n    this._token = null;\n    this._tokenData = tokenData;\n    this._lt = [];\n    this._ltIndex = 0;\n\n    this._ltIndexCache = [];\n}\nTokenStreamBase.createTokenData = function(tokens){\n\n    var nameMap     = [],\n        typeMap     = {},\n        tokenData     = tokens.concat([]),\n        i            = 0,\n        len            = tokenData.length+1;\n\n    tokenData.UNKNOWN = -1;\n    tokenData.unshift({name:\"EOF\"});\n\n    for (; i < len; i++){\n        nameMap.push(tokenData[i].name);\n        tokenData[tokenData[i].name] = i;\n        if (tokenData[i].text){\n            typeMap[tokenData[i].text] = i;\n        }\n    }\n\n    tokenData.name = function(tt){\n        return nameMap[tt];\n    };\n\n    tokenData.type = function(c){\n        return typeMap[c];\n    };\n\n    return tokenData;\n};\n\nTokenStreamBase.prototype = {\n    constructor: TokenStreamBase,\n    match: function(tokenTypes, channel){\n        if (!(tokenTypes instanceof Array)){\n            tokenTypes = [tokenTypes];\n        }\n\n        var tt  = this.get(channel),\n            i   = 0,\n            len = tokenTypes.length;\n\n        while(i < len){\n            if (tt == tokenTypes[i++]){\n                return true;\n            }\n        }\n        this.unget();\n        return false;\n    },\n    mustMatch: function(tokenTypes, channel){\n\n        var token;\n        if (!(tokenTypes instanceof Array)){\n            tokenTypes = [tokenTypes];\n        }\n\n        if (!this.match.apply(this, arguments)){\n            token = this.LT(1);\n            throw new SyntaxError(\"Expected \" + this._tokenData[tokenTypes[0]].name +\n                \" at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n        }\n    },\n    advance: function(tokenTypes, channel){\n\n        while(this.LA(0) !== 0 && !this.match(tokenTypes, channel)){\n            this.get();\n        }\n\n        return this.LA(0);\n    },\n    get: function(channel){\n\n        var tokenInfo   = this._tokenData,\n            reader      = this._reader,\n            value,\n            i           =0,\n            len         = tokenInfo.length,\n            found       = false,\n            token,\n            info;\n        if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length){\n\n            i++;\n            this._token = this._lt[this._ltIndex++];\n            info = tokenInfo[this._token.type];\n            while((info.channel !== undefined && channel !== info.channel) &&\n                    this._ltIndex < this._lt.length){\n                this._token = this._lt[this._ltIndex++];\n                info = tokenInfo[this._token.type];\n                i++;\n            }\n            if ((info.channel === undefined || channel === info.channel) &&\n                    this._ltIndex <= this._lt.length){\n                this._ltIndexCache.push(i);\n                return this._token.type;\n            }\n        }\n        token = this._getToken();\n        if (token.type > -1 && !tokenInfo[token.type].hide){\n            token.channel = tokenInfo[token.type].channel;\n            this._token = token;\n            this._lt.push(token);\n            this._ltIndexCache.push(this._lt.length - this._ltIndex + i);\n            if (this._lt.length > 5){\n                this._lt.shift();\n            }\n            if (this._ltIndexCache.length > 5){\n                this._ltIndexCache.shift();\n            }\n            this._ltIndex = this._lt.length;\n        }\n        info = tokenInfo[token.type];\n        if (info &&\n                (info.hide ||\n                (info.channel !== undefined && channel !== info.channel))){\n            return this.get(channel);\n        } else {\n            return token.type;\n        }\n    },\n    LA: function(index){\n        var total = index,\n            tt;\n        if (index > 0){\n            if (index > 5){\n                throw new Error(\"Too much lookahead.\");\n            }\n            while(total){\n                tt = this.get();\n                total--;\n            }\n            while(total < index){\n                this.unget();\n                total++;\n            }\n        } else if (index < 0){\n\n            if(this._lt[this._ltIndex+index]){\n                tt = this._lt[this._ltIndex+index].type;\n            } else {\n                throw new Error(\"Too much lookbehind.\");\n            }\n\n        } else {\n            tt = this._token.type;\n        }\n\n        return tt;\n\n    },\n    LT: function(index){\n        this.LA(index);\n        return this._lt[this._ltIndex+index-1];\n    },\n    peek: function(){\n        return this.LA(1);\n    },\n    token: function(){\n        return this._token;\n    },\n    tokenName: function(tokenType){\n        if (tokenType < 0 || tokenType > this._tokenData.length){\n            return \"UNKNOWN_TOKEN\";\n        } else {\n            return this._tokenData[tokenType].name;\n        }\n    },\n    tokenType: function(tokenName){\n        return this._tokenData[tokenName] || -1;\n    },\n    unget: function(){\n        if (this._ltIndexCache.length){\n            this._ltIndex -= this._ltIndexCache.pop();//--;\n            this._token = this._lt[this._ltIndex - 1];\n        } else {\n            throw new Error(\"Too much lookahead.\");\n        }\n    }\n\n};\n\n\nparserlib.util = {\nStringReader: StringReader,\nSyntaxError : SyntaxError,\nSyntaxUnit  : SyntaxUnit,\nEventTarget : EventTarget,\nTokenStreamBase : TokenStreamBase\n};\n})();\n(function(){\nvar EventTarget = parserlib.util.EventTarget,\nTokenStreamBase = parserlib.util.TokenStreamBase,\nStringReader = parserlib.util.StringReader,\nSyntaxError = parserlib.util.SyntaxError,\nSyntaxUnit  = parserlib.util.SyntaxUnit;\n\nvar Colors = {\n    aliceblue       :\"#f0f8ff\",\n    antiquewhite    :\"#faebd7\",\n    aqua            :\"#00ffff\",\n    aquamarine      :\"#7fffd4\",\n    azure           :\"#f0ffff\",\n    beige           :\"#f5f5dc\",\n    bisque          :\"#ffe4c4\",\n    black           :\"#000000\",\n    blanchedalmond  :\"#ffebcd\",\n    blue            :\"#0000ff\",\n    blueviolet      :\"#8a2be2\",\n    brown           :\"#a52a2a\",\n    burlywood       :\"#deb887\",\n    cadetblue       :\"#5f9ea0\",\n    chartreuse      :\"#7fff00\",\n    chocolate       :\"#d2691e\",\n    coral           :\"#ff7f50\",\n    cornflowerblue  :\"#6495ed\",\n    cornsilk        :\"#fff8dc\",\n    crimson         :\"#dc143c\",\n    cyan            :\"#00ffff\",\n    darkblue        :\"#00008b\",\n    darkcyan        :\"#008b8b\",\n    darkgoldenrod   :\"#b8860b\",\n    darkgray        :\"#a9a9a9\",\n    darkgrey        :\"#a9a9a9\",\n    darkgreen       :\"#006400\",\n    darkkhaki       :\"#bdb76b\",\n    darkmagenta     :\"#8b008b\",\n    darkolivegreen  :\"#556b2f\",\n    darkorange      :\"#ff8c00\",\n    darkorchid      :\"#9932cc\",\n    darkred         :\"#8b0000\",\n    darksalmon      :\"#e9967a\",\n    darkseagreen    :\"#8fbc8f\",\n    darkslateblue   :\"#483d8b\",\n    darkslategray   :\"#2f4f4f\",\n    darkslategrey   :\"#2f4f4f\",\n    darkturquoise   :\"#00ced1\",\n    darkviolet      :\"#9400d3\",\n    deeppink        :\"#ff1493\",\n    deepskyblue     :\"#00bfff\",\n    dimgray         :\"#696969\",\n    dimgrey         :\"#696969\",\n    dodgerblue      :\"#1e90ff\",\n    firebrick       :\"#b22222\",\n    floralwhite     :\"#fffaf0\",\n    forestgreen     :\"#228b22\",\n    fuchsia         :\"#ff00ff\",\n    gainsboro       :\"#dcdcdc\",\n    ghostwhite      :\"#f8f8ff\",\n    gold            :\"#ffd700\",\n    goldenrod       :\"#daa520\",\n    gray            :\"#808080\",\n    grey            :\"#808080\",\n    green           :\"#008000\",\n    greenyellow     :\"#adff2f\",\n    honeydew        :\"#f0fff0\",\n    hotpink         :\"#ff69b4\",\n    indianred       :\"#cd5c5c\",\n    indigo          :\"#4b0082\",\n    ivory           :\"#fffff0\",\n    khaki           :\"#f0e68c\",\n    lavender        :\"#e6e6fa\",\n    lavenderblush   :\"#fff0f5\",\n    lawngreen       :\"#7cfc00\",\n    lemonchiffon    :\"#fffacd\",\n    lightblue       :\"#add8e6\",\n    lightcoral      :\"#f08080\",\n    lightcyan       :\"#e0ffff\",\n    lightgoldenrodyellow  :\"#fafad2\",\n    lightgray       :\"#d3d3d3\",\n    lightgrey       :\"#d3d3d3\",\n    lightgreen      :\"#90ee90\",\n    lightpink       :\"#ffb6c1\",\n    lightsalmon     :\"#ffa07a\",\n    lightseagreen   :\"#20b2aa\",\n    lightskyblue    :\"#87cefa\",\n    lightslategray  :\"#778899\",\n    lightslategrey  :\"#778899\",\n    lightsteelblue  :\"#b0c4de\",\n    lightyellow     :\"#ffffe0\",\n    lime            :\"#00ff00\",\n    limegreen       :\"#32cd32\",\n    linen           :\"#faf0e6\",\n    magenta         :\"#ff00ff\",\n    maroon          :\"#800000\",\n    mediumaquamarine:\"#66cdaa\",\n    mediumblue      :\"#0000cd\",\n    mediumorchid    :\"#ba55d3\",\n    mediumpurple    :\"#9370d8\",\n    mediumseagreen  :\"#3cb371\",\n    mediumslateblue :\"#7b68ee\",\n    mediumspringgreen   :\"#00fa9a\",\n    mediumturquoise :\"#48d1cc\",\n    mediumvioletred :\"#c71585\",\n    midnightblue    :\"#191970\",\n    mintcream       :\"#f5fffa\",\n    mistyrose       :\"#ffe4e1\",\n    moccasin        :\"#ffe4b5\",\n    navajowhite     :\"#ffdead\",\n    navy            :\"#000080\",\n    oldlace         :\"#fdf5e6\",\n    olive           :\"#808000\",\n    olivedrab       :\"#6b8e23\",\n    orange          :\"#ffa500\",\n    orangered       :\"#ff4500\",\n    orchid          :\"#da70d6\",\n    palegoldenrod   :\"#eee8aa\",\n    palegreen       :\"#98fb98\",\n    paleturquoise   :\"#afeeee\",\n    palevioletred   :\"#d87093\",\n    papayawhip      :\"#ffefd5\",\n    peachpuff       :\"#ffdab9\",\n    peru            :\"#cd853f\",\n    pink            :\"#ffc0cb\",\n    plum            :\"#dda0dd\",\n    powderblue      :\"#b0e0e6\",\n    purple          :\"#800080\",\n    red             :\"#ff0000\",\n    rosybrown       :\"#bc8f8f\",\n    royalblue       :\"#4169e1\",\n    saddlebrown     :\"#8b4513\",\n    salmon          :\"#fa8072\",\n    sandybrown      :\"#f4a460\",\n    seagreen        :\"#2e8b57\",\n    seashell        :\"#fff5ee\",\n    sienna          :\"#a0522d\",\n    silver          :\"#c0c0c0\",\n    skyblue         :\"#87ceeb\",\n    slateblue       :\"#6a5acd\",\n    slategray       :\"#708090\",\n    slategrey       :\"#708090\",\n    snow            :\"#fffafa\",\n    springgreen     :\"#00ff7f\",\n    steelblue       :\"#4682b4\",\n    tan             :\"#d2b48c\",\n    teal            :\"#008080\",\n    thistle         :\"#d8bfd8\",\n    tomato          :\"#ff6347\",\n    turquoise       :\"#40e0d0\",\n    violet          :\"#ee82ee\",\n    wheat           :\"#f5deb3\",\n    white           :\"#ffffff\",\n    whitesmoke      :\"#f5f5f5\",\n    yellow          :\"#ffff00\",\n    yellowgreen     :\"#9acd32\",\n    activeBorder        :\"Active window border.\",\n    activecaption       :\"Active window caption.\",\n    appworkspace        :\"Background color of multiple document interface.\",\n    background          :\"Desktop background.\",\n    buttonface          :\"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonhighlight     :\"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonshadow        :\"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttontext          :\"Text on push buttons.\",\n    captiontext         :\"Text in caption, size box, and scrollbar arrow box.\",\n    graytext            :\"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.\",\n    greytext            :\"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.\",\n    highlight           :\"Item(s) selected in a control.\",\n    highlighttext       :\"Text of item(s) selected in a control.\",\n    inactiveborder      :\"Inactive window border.\",\n    inactivecaption     :\"Inactive window caption.\",\n    inactivecaptiontext :\"Color of text in an inactive caption.\",\n    infobackground      :\"Background color for tooltip controls.\",\n    infotext            :\"Text color for tooltip controls.\",\n    menu                :\"Menu background.\",\n    menutext            :\"Text in menus.\",\n    scrollbar           :\"Scroll bar gray area.\",\n    threeddarkshadow    :\"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedface          :\"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedhighlight     :\"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedlightshadow   :\"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedshadow        :\"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    window              :\"Window background.\",\n    windowframe         :\"Window frame.\",\n    windowtext          :\"Text in windows.\"\n};\nfunction Combinator(text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.COMBINATOR_TYPE);\n    this.type = \"unknown\";\n    if (/^\\s+$/.test(text)){\n        this.type = \"descendant\";\n    } else if (text == \">\"){\n        this.type = \"child\";\n    } else if (text == \"+\"){\n        this.type = \"adjacent-sibling\";\n    } else if (text == \"~\"){\n        this.type = \"sibling\";\n    }\n\n}\n\nCombinator.prototype = new SyntaxUnit();\nCombinator.prototype.constructor = Combinator;\nfunction MediaFeature(name, value){\n\n    SyntaxUnit.call(this, \"(\" + name + (value !== null ? \":\" + value : \"\") + \")\", name.startLine, name.startCol, Parser.MEDIA_FEATURE_TYPE);\n    this.name = name;\n    this.value = value;\n}\n\nMediaFeature.prototype = new SyntaxUnit();\nMediaFeature.prototype.constructor = MediaFeature;\nfunction MediaQuery(modifier, mediaType, features, line, col){\n\n    SyntaxUnit.call(this, (modifier ? modifier + \" \": \"\") + (mediaType ? mediaType : \"\") + (mediaType && features.length > 0 ? \" and \" : \"\") + features.join(\" and \"), line, col, Parser.MEDIA_QUERY_TYPE);\n    this.modifier = modifier;\n    this.mediaType = mediaType;\n    this.features = features;\n\n}\n\nMediaQuery.prototype = new SyntaxUnit();\nMediaQuery.prototype.constructor = MediaQuery;\nfunction Parser(options){\n    EventTarget.call(this);\n\n\n    this.options = options || {};\n\n    this._tokenStream = null;\n}\nParser.DEFAULT_TYPE = 0;\nParser.COMBINATOR_TYPE = 1;\nParser.MEDIA_FEATURE_TYPE = 2;\nParser.MEDIA_QUERY_TYPE = 3;\nParser.PROPERTY_NAME_TYPE = 4;\nParser.PROPERTY_VALUE_TYPE = 5;\nParser.PROPERTY_VALUE_PART_TYPE = 6;\nParser.SELECTOR_TYPE = 7;\nParser.SELECTOR_PART_TYPE = 8;\nParser.SELECTOR_SUB_PART_TYPE = 9;\n\nParser.prototype = function(){\n\n    var proto = new EventTarget(),  //new prototype\n        prop,\n        additions =  {\n            constructor: Parser,\n            DEFAULT_TYPE : 0,\n            COMBINATOR_TYPE : 1,\n            MEDIA_FEATURE_TYPE : 2,\n            MEDIA_QUERY_TYPE : 3,\n            PROPERTY_NAME_TYPE : 4,\n            PROPERTY_VALUE_TYPE : 5,\n            PROPERTY_VALUE_PART_TYPE : 6,\n            SELECTOR_TYPE : 7,\n            SELECTOR_PART_TYPE : 8,\n            SELECTOR_SUB_PART_TYPE : 9,\n\n            _stylesheet: function(){\n\n                var tokenStream = this._tokenStream,\n                    charset     = null,\n                    count,\n                    token,\n                    tt;\n\n                this.fire(\"startstylesheet\");\n                this._charset();\n\n                this._skipCruft();\n                while (tokenStream.peek() == Tokens.IMPORT_SYM){\n                    this._import();\n                    this._skipCruft();\n                }\n                while (tokenStream.peek() == Tokens.NAMESPACE_SYM){\n                    this._namespace();\n                    this._skipCruft();\n                }\n                tt = tokenStream.peek();\n                while(tt > Tokens.EOF){\n\n                    try {\n\n                        switch(tt){\n                            case Tokens.MEDIA_SYM:\n                                this._media();\n                                this._skipCruft();\n                                break;\n                            case Tokens.PAGE_SYM:\n                                this._page();\n                                this._skipCruft();\n                                break;\n                            case Tokens.FONT_FACE_SYM:\n                                this._font_face();\n                                this._skipCruft();\n                                break;\n                            case Tokens.KEYFRAMES_SYM:\n                                this._keyframes();\n                                this._skipCruft();\n                                break;\n                            case Tokens.VIEWPORT_SYM:\n                                this._viewport();\n                                this._skipCruft();\n                                break;\n                            case Tokens.UNKNOWN_SYM:  //unknown @ rule\n                                tokenStream.get();\n                                if (!this.options.strict){\n                                    this.fire({\n                                        type:       \"error\",\n                                        error:      null,\n                                        message:    \"Unknown @ rule: \" + tokenStream.LT(0).value + \".\",\n                                        line:       tokenStream.LT(0).startLine,\n                                        col:        tokenStream.LT(0).startCol\n                                    });\n                                    count=0;\n                                    while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE){\n                                        count++;    //keep track of nesting depth\n                                    }\n\n                                    while(count){\n                                        tokenStream.advance([Tokens.RBRACE]);\n                                        count--;\n                                    }\n\n                                } else {\n                                    throw new SyntaxError(\"Unknown @ rule.\", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol);\n                                }\n                                break;\n                            case Tokens.S:\n                                this._readWhitespace();\n                                break;\n                            default:\n                                if(!this._ruleset()){\n                                    switch(tt){\n                                        case Tokens.CHARSET_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._charset(false);\n                                            throw new SyntaxError(\"@charset not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.IMPORT_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._import(false);\n                                            throw new SyntaxError(\"@import not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.NAMESPACE_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._namespace(false);\n                                            throw new SyntaxError(\"@namespace not allowed here.\", token.startLine, token.startCol);\n                                        default:\n                                            tokenStream.get();  //get the last token\n                                            this._unexpectedToken(tokenStream.token());\n                                    }\n\n                                }\n                        }\n                    } catch(ex) {\n                        if (ex instanceof SyntaxError && !this.options.strict){\n                            this.fire({\n                                type:       \"error\",\n                                error:      ex,\n                                message:    ex.message,\n                                line:       ex.line,\n                                col:        ex.col\n                            });\n                        } else {\n                            throw ex;\n                        }\n                    }\n\n                    tt = tokenStream.peek();\n                }\n\n                if (tt != Tokens.EOF){\n                    this._unexpectedToken(tokenStream.token());\n                }\n\n                this.fire(\"endstylesheet\");\n            },\n\n            _charset: function(emit){\n                var tokenStream = this._tokenStream,\n                    charset,\n                    token,\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.CHARSET_SYM)){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.STRING);\n\n                    token = tokenStream.token();\n                    charset = token.value;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.SEMICOLON);\n\n                    if (emit !== false){\n                        this.fire({\n                            type:   \"charset\",\n                            charset:charset,\n                            line:   line,\n                            col:    col\n                        });\n                    }\n                }\n            },\n\n            _import: function(emit){\n\n                var tokenStream = this._tokenStream,\n                    tt,\n                    uri,\n                    importToken,\n                    mediaList   = [];\n                tokenStream.mustMatch(Tokens.IMPORT_SYM);\n                importToken = tokenStream.token();\n                this._readWhitespace();\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n                uri = tokenStream.token().value.replace(/^(?:url\\()?[\"']?([^\"']+?)[\"']?\\)?$/, \"$1\");\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false){\n                    this.fire({\n                        type:   \"import\",\n                        uri:    uri,\n                        media:  mediaList,\n                        line:   importToken.startLine,\n                        col:    importToken.startCol\n                    });\n                }\n\n            },\n\n            _namespace: function(emit){\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    prefix,\n                    uri;\n                tokenStream.mustMatch(Tokens.NAMESPACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n                this._readWhitespace();\n                if (tokenStream.match(Tokens.IDENT)){\n                    prefix = tokenStream.token().value;\n                    this._readWhitespace();\n                }\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n                uri = tokenStream.token().value.replace(/(?:url\\()?[\"']([^\"']+)[\"']\\)?/, \"$1\");\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false){\n                    this.fire({\n                        type:   \"namespace\",\n                        prefix: prefix,\n                        uri:    uri,\n                        line:   line,\n                        col:    col\n                    });\n                }\n\n            },\n\n            _media: function(){\n                var tokenStream     = this._tokenStream,\n                    line,\n                    col,\n                    mediaList;//       = [];\n                tokenStream.mustMatch(Tokens.MEDIA_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n\n                tokenStream.mustMatch(Tokens.LBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n\n                while(true) {\n                    if (tokenStream.peek() == Tokens.PAGE_SYM){\n                        this._page();\n                    } else if (tokenStream.peek() == Tokens.FONT_FACE_SYM){\n                        this._font_face();\n                    } else if (tokenStream.peek() == Tokens.VIEWPORT_SYM){\n                        this._viewport();\n                    } else if (!this._ruleset()){\n                        break;\n                    }\n                }\n\n                tokenStream.mustMatch(Tokens.RBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"endmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n            },\n            _media_query_list: function(){\n                var tokenStream = this._tokenStream,\n                    mediaList   = [];\n\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() == Tokens.IDENT || tokenStream.peek() == Tokens.LPAREN){\n                    mediaList.push(this._media_query());\n                }\n\n                while(tokenStream.match(Tokens.COMMA)){\n                    this._readWhitespace();\n                    mediaList.push(this._media_query());\n                }\n\n                return mediaList;\n            },\n            _media_query: function(){\n                var tokenStream = this._tokenStream,\n                    type        = null,\n                    ident       = null,\n                    token       = null,\n                    expressions = [];\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    ident = tokenStream.token().value.toLowerCase();\n                    if (ident != \"only\" && ident != \"not\"){\n                        tokenStream.unget();\n                        ident = null;\n                    } else {\n                        token = tokenStream.token();\n                    }\n                }\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() == Tokens.IDENT){\n                    type = this._media_type();\n                    if (token === null){\n                        token = tokenStream.token();\n                    }\n                } else if (tokenStream.peek() == Tokens.LPAREN){\n                    if (token === null){\n                        token = tokenStream.LT(1);\n                    }\n                    expressions.push(this._media_expression());\n                }\n\n                if (type === null && expressions.length === 0){\n                    return null;\n                } else {\n                    this._readWhitespace();\n                    while (tokenStream.match(Tokens.IDENT)){\n                        if (tokenStream.token().value.toLowerCase() != \"and\"){\n                            this._unexpectedToken(tokenStream.token());\n                        }\n\n                        this._readWhitespace();\n                        expressions.push(this._media_expression());\n                    }\n                }\n\n                return new MediaQuery(ident, type, expressions, token.startLine, token.startCol);\n            },\n            _media_type: function(){\n                return this._media_feature();\n            },\n            _media_expression: function(){\n                var tokenStream = this._tokenStream,\n                    feature     = null,\n                    token,\n                    expression  = null;\n\n                tokenStream.mustMatch(Tokens.LPAREN);\n                this._readWhitespace();\n\n                feature = this._media_feature();\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.COLON)){\n                    this._readWhitespace();\n                    token = tokenStream.LT(1);\n                    expression = this._expression();\n                }\n\n                tokenStream.mustMatch(Tokens.RPAREN);\n                this._readWhitespace();\n\n                return new MediaFeature(feature, (expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null));\n            },\n            _media_feature: function(){\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n            _page: function(){\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    identifier  = null,\n                    pseudoPage  = null;\n                tokenStream.mustMatch(Tokens.PAGE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    identifier = tokenStream.token().value;\n                    if (identifier.toLowerCase() === \"auto\"){\n                        this._unexpectedToken(tokenStream.token());\n                    }\n                }\n                if (tokenStream.peek() == Tokens.COLON){\n                    pseudoPage = this._pseudo_page();\n                }\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true, true);\n\n                this.fire({\n                    type:   \"endpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n            },\n            _margin: function(){\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    marginSym   = this._margin_sym();\n\n                if (marginSym){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this.fire({\n                        type: \"startpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type: \"endpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n            _margin_sym: function(){\n\n                var tokenStream = this._tokenStream;\n\n                if(tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM,\n                        Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM,\n                        Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM,\n                        Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM,\n                        Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM,\n                        Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM,\n                        Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM]))\n                {\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else {\n                    return null;\n                }\n\n            },\n\n            _pseudo_page: function(){\n\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch(Tokens.COLON);\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                return tokenStream.token().value;\n            },\n\n            _font_face: function(){\n                var tokenStream = this._tokenStream,\n                    line,\n                    col;\n                tokenStream.mustMatch(Tokens.FONT_FACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startfontface\",\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endfontface\",\n                    line:   line,\n                    col:    col\n                });\n            },\n\n            _viewport: function(){\n                 var tokenStream = this._tokenStream,\n                    line,\n                    col;\n\n                    tokenStream.mustMatch(Tokens.VIEWPORT_SYM);\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n\n                    this.fire({\n                        type:   \"startviewport\",\n                        line:   line,\n                        col:    col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type:   \"endviewport\",\n                        line:   line,\n                        col:    col\n                    });\n\n            },\n\n            _operator: function(inFunction){\n\n                var tokenStream = this._tokenStream,\n                    token       = null;\n\n                if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) ||\n                    (inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))){\n                    token =  tokenStream.token();\n                    this._readWhitespace();\n                }\n                return token ? PropertyValuePart.fromToken(token) : null;\n\n            },\n\n            _combinator: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    token;\n\n                if(tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])){\n                    token = tokenStream.token();\n                    value = new Combinator(token.value, token.startLine, token.startCol);\n                    this._readWhitespace();\n                }\n\n                return value;\n            },\n\n            _unary_operator: function(){\n\n                var tokenStream = this._tokenStream;\n\n                if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])){\n                    return tokenStream.token().value;\n                } else {\n                    return null;\n                }\n            },\n\n            _property: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    hack        = null,\n                    tokenValue,\n                    token,\n                    line,\n                    col;\n                if (tokenStream.peek() == Tokens.STAR && this.options.starHack){\n                    tokenStream.get();\n                    token = tokenStream.token();\n                    hack = token.value;\n                    line = token.startLine;\n                    col = token.startCol;\n                }\n\n                if(tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n                    tokenValue = token.value;\n                    if (tokenValue.charAt(0) == \"_\" && this.options.underscoreHack){\n                        hack = \"_\";\n                        tokenValue = tokenValue.substring(1);\n                    }\n\n                    value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol));\n                    this._readWhitespace();\n                }\n\n                return value;\n            },\n            _ruleset: function(){\n\n                var tokenStream = this._tokenStream,\n                    tt,\n                    selectors;\n                try {\n                    selectors = this._selectors_group();\n                } catch (ex){\n                    if (ex instanceof SyntaxError && !this.options.strict){\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n                        tt = tokenStream.advance([Tokens.RBRACE]);\n                        if (tt == Tokens.RBRACE){\n                        } else {\n                            throw ex;\n                        }\n\n                    } else {\n                        throw ex;\n                    }\n                    return true;\n                }\n                if (selectors){\n\n                    this.fire({\n                        type:       \"startrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type:       \"endrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                }\n\n                return selectors;\n\n            },\n            _selectors_group: function(){\n                var tokenStream = this._tokenStream,\n                    selectors   = [],\n                    selector;\n\n                selector = this._selector();\n                if (selector !== null){\n\n                    selectors.push(selector);\n                    while(tokenStream.match(Tokens.COMMA)){\n                        this._readWhitespace();\n                        selector = this._selector();\n                        if (selector !== null){\n                            selectors.push(selector);\n                        } else {\n                            this._unexpectedToken(tokenStream.LT(1));\n                        }\n                    }\n                }\n\n                return selectors.length ? selectors : null;\n            },\n            _selector: function(){\n\n                var tokenStream = this._tokenStream,\n                    selector    = [],\n                    nextSelector = null,\n                    combinator  = null,\n                    ws          = null;\n                nextSelector = this._simple_selector_sequence();\n                if (nextSelector === null){\n                    return null;\n                }\n\n                selector.push(nextSelector);\n\n                do {\n                    combinator = this._combinator();\n\n                    if (combinator !== null){\n                        selector.push(combinator);\n                        nextSelector = this._simple_selector_sequence();\n                        if (nextSelector === null){\n                            this._unexpectedToken(tokenStream.LT(1));\n                        } else {\n                            selector.push(nextSelector);\n                        }\n                    } else {\n                        if (this._readWhitespace()){\n                            ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol);\n                            combinator = this._combinator();\n                            nextSelector = this._simple_selector_sequence();\n                            if (nextSelector === null){\n                                if (combinator !== null){\n                                    this._unexpectedToken(tokenStream.LT(1));\n                                }\n                            } else {\n\n                                if (combinator !== null){\n                                    selector.push(combinator);\n                                } else {\n                                    selector.push(ws);\n                                }\n\n                                selector.push(nextSelector);\n                            }\n                        } else {\n                            break;\n                        }\n\n                    }\n                } while(true);\n\n                return new Selector(selector, selector[0].line, selector[0].col);\n            },\n            _simple_selector_sequence: function(){\n\n                var tokenStream = this._tokenStream,\n                    elementName = null,\n                    modifiers   = [],\n                    selectorText= \"\",\n                    components  = [\n                        function(){\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo,\n                        this._negation\n                    ],\n                    i           = 0,\n                    len         = components.length,\n                    component   = null,\n                    found       = false,\n                    line,\n                    col;\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                elementName = this._type_selector();\n                if (!elementName){\n                    elementName = this._universal();\n                }\n\n                if (elementName !== null){\n                    selectorText += elementName;\n                }\n\n                while(true){\n                    if (tokenStream.peek() === Tokens.S){\n                        break;\n                    }\n                    while(i < len && component === null){\n                        component = components[i++].call(this);\n                    }\n\n                    if (component === null){\n                        if (selectorText === \"\"){\n                            return null;\n                        } else {\n                            break;\n                        }\n                    } else {\n                        i = 0;\n                        modifiers.push(component);\n                        selectorText += component.toString();\n                        component = null;\n                    }\n                }\n\n\n                return selectorText !== \"\" ?\n                        new SelectorPart(elementName, modifiers, selectorText, line, col) :\n                        null;\n            },\n            _type_selector: function(){\n\n                var tokenStream = this._tokenStream,\n                    ns          = this._namespace_prefix(),\n                    elementName = this._element_name();\n\n                if (!elementName){\n                    if (ns){\n                        tokenStream.unget();\n                        if (ns.length > 1){\n                            tokenStream.unget();\n                        }\n                    }\n\n                    return null;\n                } else {\n                    if (ns){\n                        elementName.text = ns + elementName.text;\n                        elementName.col -= ns.length;\n                    }\n                    return elementName;\n                }\n            },\n            _class: function(){\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.DOT)){\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    token = tokenStream.token();\n                    return new SelectorSubPart(\".\" + token.value, \"class\", token.startLine, token.startCol - 1);\n                } else {\n                    return null;\n                }\n\n            },\n            _element_name: function(){\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n                    return new SelectorSubPart(token.value, \"elementName\", token.startLine, token.startCol);\n\n                } else {\n                    return null;\n                }\n            },\n            _namespace_prefix: function(){\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n                if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE){\n\n                    if(tokenStream.match([Tokens.IDENT, Tokens.STAR])){\n                        value += tokenStream.token().value;\n                    }\n\n                    tokenStream.mustMatch(Tokens.PIPE);\n                    value += \"|\";\n\n                }\n\n                return value.length ? value : null;\n            },\n            _universal: function(){\n                var tokenStream = this._tokenStream,\n                    value       = \"\",\n                    ns;\n\n                ns = this._namespace_prefix();\n                if(ns){\n                    value += ns;\n                }\n\n                if(tokenStream.match(Tokens.STAR)){\n                    value += \"*\";\n                }\n\n                return value.length ? value : null;\n\n           },\n            _attrib: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    ns,\n                    token;\n\n                if (tokenStream.match(Tokens.LBRACKET)){\n                    token = tokenStream.token();\n                    value = token.value;\n                    value += this._readWhitespace();\n\n                    ns = this._namespace_prefix();\n\n                    if (ns){\n                        value += ns;\n                    }\n\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n\n                    if(tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH,\n                            Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])){\n\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n\n                        tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACKET);\n\n                    return new SelectorSubPart(value + \"]\", \"attribute\", token.startLine, token.startCol);\n                } else {\n                    return null;\n                }\n            },\n            _pseudo: function(){\n\n                var tokenStream = this._tokenStream,\n                    pseudo      = null,\n                    colons      = \":\",\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.COLON)){\n\n                    if (tokenStream.match(Tokens.COLON)){\n                        colons += \":\";\n                    }\n\n                    if (tokenStream.match(Tokens.IDENT)){\n                        pseudo = tokenStream.token().value;\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol - colons.length;\n                    } else if (tokenStream.peek() == Tokens.FUNCTION){\n                        line = tokenStream.LT(1).startLine;\n                        col = tokenStream.LT(1).startCol - colons.length;\n                        pseudo = this._functional_pseudo();\n                    }\n\n                    if (pseudo){\n                        pseudo = new SelectorSubPart(colons + pseudo, \"pseudo\", line, col);\n                    }\n                }\n\n                return pseudo;\n            },\n            _functional_pseudo: function(){\n\n                var tokenStream = this._tokenStream,\n                    value = null;\n\n                if(tokenStream.match(Tokens.FUNCTION)){\n                    value = tokenStream.token().value;\n                    value += this._readWhitespace();\n                    value += this._expression();\n                    tokenStream.mustMatch(Tokens.RPAREN);\n                    value += \")\";\n                }\n\n                return value;\n            },\n            _expression: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n\n                while(tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION,\n                        Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH,\n                        Tokens.FREQ, Tokens.ANGLE, Tokens.TIME,\n                        Tokens.RESOLUTION, Tokens.SLASH])){\n\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n                }\n\n                return value.length ? value : null;\n\n            },\n            _negation: function(){\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    value       = \"\",\n                    arg,\n                    subpart     = null;\n\n                if (tokenStream.match(Tokens.NOT)){\n                    value = tokenStream.token().value;\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                    value += this._readWhitespace();\n                    arg = this._negation_arg();\n                    value += arg;\n                    value += this._readWhitespace();\n                    tokenStream.match(Tokens.RPAREN);\n                    value += tokenStream.token().value;\n\n                    subpart = new SelectorSubPart(value, \"not\", line, col);\n                    subpart.args.push(arg);\n                }\n\n                return subpart;\n            },\n            _negation_arg: function(){\n\n                var tokenStream = this._tokenStream,\n                    args        = [\n                        this._type_selector,\n                        this._universal,\n                        function(){\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo\n                    ],\n                    arg         = null,\n                    i           = 0,\n                    len         = args.length,\n                    elementName,\n                    line,\n                    col,\n                    part;\n\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                while(i < len && arg === null){\n\n                    arg = args[i].call(this);\n                    i++;\n                }\n                if (arg === null){\n                    this._unexpectedToken(tokenStream.LT(1));\n                }\n                if (arg.type == \"elementName\"){\n                    part = new SelectorPart(arg, [], arg.toString(), line, col);\n                } else {\n                    part = new SelectorPart(null, [arg], arg.toString(), line, col);\n                }\n\n                return part;\n            },\n\n            _declaration: function(){\n\n                var tokenStream = this._tokenStream,\n                    property    = null,\n                    expr        = null,\n                    prio        = null,\n                    error       = null,\n                    invalid     = null,\n                    propertyName= \"\";\n\n                property = this._property();\n                if (property !== null){\n\n                    tokenStream.mustMatch(Tokens.COLON);\n                    this._readWhitespace();\n\n                    expr = this._expr();\n                    if (!expr || expr.length === 0){\n                        this._unexpectedToken(tokenStream.LT(1));\n                    }\n\n                    prio = this._prio();\n                    propertyName = property.toString();\n                    if (this.options.starHack && property.hack == \"*\" ||\n                            this.options.underscoreHack && property.hack == \"_\") {\n\n                        propertyName = property.text;\n                    }\n\n                    try {\n                        this._validateProperty(propertyName, expr);\n                    } catch (ex) {\n                        invalid = ex;\n                    }\n\n                    this.fire({\n                        type:       \"property\",\n                        property:   property,\n                        value:      expr,\n                        important:  prio,\n                        line:       property.line,\n                        col:        property.col,\n                        invalid:    invalid\n                    });\n\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n\n            _prio: function(){\n\n                var tokenStream = this._tokenStream,\n                    result      = tokenStream.match(Tokens.IMPORTANT_SYM);\n\n                this._readWhitespace();\n                return result;\n            },\n\n            _expr: function(inFunction){\n\n                var tokenStream = this._tokenStream,\n                    values      = [],\n                    value       = null,\n                    operator    = null;\n\n                value = this._term(inFunction);\n                if (value !== null){\n\n                    values.push(value);\n\n                    do {\n                        operator = this._operator(inFunction);\n                        if (operator){\n                            values.push(operator);\n                        } /*else {\n                            values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col));\n                            valueParts = [];\n                        }*/\n\n                        value = this._term(inFunction);\n\n                        if (value === null){\n                            break;\n                        } else {\n                            values.push(value);\n                        }\n                    } while(true);\n                }\n\n                return values.length > 0 ? new PropertyValue(values, values[0].line, values[0].col) : null;\n            },\n\n            _term: function(inFunction){\n\n                var tokenStream = this._tokenStream,\n                    unary       = null,\n                    value       = null,\n                    endChar     = null,\n                    token,\n                    line,\n                    col;\n                unary = this._unary_operator();\n                if (unary !== null){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                }\n                if (tokenStream.peek() == Tokens.IE_FUNCTION && this.options.ieFilters){\n\n                    value = this._ie_function();\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                } else if (inFunction && tokenStream.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET])){\n\n                    token = tokenStream.token();\n                    endChar = token.endChar;\n                    value = token.value + this._expr(inFunction).text;\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                    tokenStream.mustMatch(Tokens.type(endChar));\n                    value += endChar;\n                    this._readWhitespace();\n                } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH,\n                        Tokens.ANGLE, Tokens.TIME,\n                        Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])){\n\n                    value = tokenStream.token().value;\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                    this._readWhitespace();\n                } else {\n                    token = this._hexcolor();\n                    if (token === null){\n                        if (unary === null){\n                            line = tokenStream.LT(1).startLine;\n                            col = tokenStream.LT(1).startCol;\n                        }\n                        if (value === null){\n                            if (tokenStream.LA(3) == Tokens.EQUALS && this.options.ieFilters){\n                                value = this._ie_function();\n                            } else {\n                                value = this._function();\n                            }\n                        }\n\n                    } else {\n                        value = token.value;\n                        if (unary === null){\n                            line = token.startLine;\n                            col = token.startCol;\n                        }\n                    }\n\n                }\n\n                return value !== null ?\n                        new PropertyValuePart(unary !== null ? unary + value : value, line, col) :\n                        null;\n\n            },\n\n            _function: function(){\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    expr        = null,\n                    lt;\n\n                if (tokenStream.match(Tokens.FUNCTION)){\n                    functionText = tokenStream.token().value;\n                    this._readWhitespace();\n                    expr = this._expr(true);\n                    functionText += expr;\n                    if (this.options.ieFilters && tokenStream.peek() == Tokens.EQUALS){\n                        do {\n\n                            if (this._readWhitespace()){\n                                functionText += tokenStream.token().value;\n                            }\n                            if (tokenStream.LA(0) == Tokens.COMMA){\n                                functionText += tokenStream.token().value;\n                            }\n\n                            tokenStream.match(Tokens.IDENT);\n                            functionText += tokenStream.token().value;\n\n                            tokenStream.match(Tokens.EQUALS);\n                            functionText += tokenStream.token().value;\n                            lt = tokenStream.peek();\n                            while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){\n                                tokenStream.get();\n                                functionText += tokenStream.token().value;\n                                lt = tokenStream.peek();\n                            }\n                        } while(tokenStream.match([Tokens.COMMA, Tokens.S]));\n                    }\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _ie_function: function(){\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    expr        = null,\n                    lt;\n                if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])){\n                    functionText = tokenStream.token().value;\n\n                    do {\n\n                        if (this._readWhitespace()){\n                            functionText += tokenStream.token().value;\n                        }\n                        if (tokenStream.LA(0) == Tokens.COMMA){\n                            functionText += tokenStream.token().value;\n                        }\n\n                        tokenStream.match(Tokens.IDENT);\n                        functionText += tokenStream.token().value;\n\n                        tokenStream.match(Tokens.EQUALS);\n                        functionText += tokenStream.token().value;\n                        lt = tokenStream.peek();\n                        while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){\n                            tokenStream.get();\n                            functionText += tokenStream.token().value;\n                            lt = tokenStream.peek();\n                        }\n                    } while(tokenStream.match([Tokens.COMMA, Tokens.S]));\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _hexcolor: function(){\n\n                var tokenStream = this._tokenStream,\n                    token = null,\n                    color;\n\n                if(tokenStream.match(Tokens.HASH)){\n\n                    token = tokenStream.token();\n                    color = token.value;\n                    if (!/#[a-f0-9]{3,6}/i.test(color)){\n                        throw new SyntaxError(\"Expected a hex color but found '\" + color + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n                    }\n                    this._readWhitespace();\n                }\n\n                return token;\n            },\n\n            _keyframes: function(){\n                var tokenStream = this._tokenStream,\n                    token,\n                    tt,\n                    name,\n                    prefix = \"\";\n\n                tokenStream.mustMatch(Tokens.KEYFRAMES_SYM);\n                token = tokenStream.token();\n                if (/^@\\-([^\\-]+)\\-/.test(token.value)) {\n                    prefix = RegExp.$1;\n                }\n\n                this._readWhitespace();\n                name = this._keyframe_name();\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.LBRACE);\n\n                this.fire({\n                    type:   \"startkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tt = tokenStream.peek();\n                while(tt == Tokens.IDENT || tt == Tokens.PERCENTAGE) {\n                    this._keyframe_rule();\n                    this._readWhitespace();\n                    tt = tokenStream.peek();\n                }\n\n                this.fire({\n                    type:   \"endkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.RBRACE);\n\n            },\n\n            _keyframe_name: function(){\n                var tokenStream = this._tokenStream,\n                    token;\n\n                tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n\n            _keyframe_rule: function(){\n                var tokenStream = this._tokenStream,\n                    token,\n                    keyList = this._key_list();\n\n                this.fire({\n                    type:   \"startkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n            },\n\n            _key_list: function(){\n                var tokenStream = this._tokenStream,\n                    token,\n                    key,\n                    keyList = [];\n                keyList.push(this._key());\n\n                this._readWhitespace();\n\n                while(tokenStream.match(Tokens.COMMA)){\n                    this._readWhitespace();\n                    keyList.push(this._key());\n                    this._readWhitespace();\n                }\n\n                return keyList;\n            },\n\n            _key: function(){\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.PERCENTAGE)){\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else if (tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n\n                    if (/from|to/i.test(token.value)){\n                        return SyntaxUnit.fromToken(token);\n                    }\n\n                    tokenStream.unget();\n                }\n                this._unexpectedToken(tokenStream.LT(1));\n            },\n            _skipCruft: function(){\n                while(this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])){\n                }\n            },\n            _readDeclarations: function(checkStart, readMargins){\n                var tokenStream = this._tokenStream,\n                    tt;\n\n\n                this._readWhitespace();\n\n                if (checkStart){\n                    tokenStream.mustMatch(Tokens.LBRACE);\n                }\n\n                this._readWhitespace();\n\n                try {\n\n                    while(true){\n\n                        if (tokenStream.match(Tokens.SEMICOLON) || (readMargins && this._margin())){\n                        } else if (this._declaration()){\n                            if (!tokenStream.match(Tokens.SEMICOLON)){\n                                break;\n                            }\n                        } else {\n                            break;\n                        }\n                        this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACE);\n                    this._readWhitespace();\n\n                } catch (ex) {\n                    if (ex instanceof SyntaxError && !this.options.strict){\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n                        tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]);\n                        if (tt == Tokens.SEMICOLON){\n                            this._readDeclarations(false, readMargins);\n                        } else if (tt != Tokens.RBRACE){\n                            throw ex;\n                        }\n\n                    } else {\n                        throw ex;\n                    }\n                }\n\n            },\n            _readWhitespace: function(){\n\n                var tokenStream = this._tokenStream,\n                    ws = \"\";\n\n                while(tokenStream.match(Tokens.S)){\n                    ws += tokenStream.token().value;\n                }\n\n                return ws;\n            },\n            _unexpectedToken: function(token){\n                throw new SyntaxError(\"Unexpected token '\" + token.value + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n            },\n            _verifyEnd: function(){\n                if (this._tokenStream.LA(1) != Tokens.EOF){\n                    this._unexpectedToken(this._tokenStream.LT(1));\n                }\n            },\n            _validateProperty: function(property, value){\n                Validation.validate(property, value);\n            },\n\n            parse: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._stylesheet();\n            },\n\n            parseStyleSheet: function(input){\n                return this.parse(input);\n            },\n\n            parseMediaQuery: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                var result = this._media_query();\n                this._verifyEnd();\n                return result;\n            },\n            parsePropertyValue: function(input){\n\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._expr();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseRule: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._ruleset();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseSelector: function(input){\n\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._selector();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseStyleAttribute: function(input){\n                input += \"}\"; // for error recovery in _readDeclarations()\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readDeclarations();\n            }\n        };\n    for (prop in additions){\n        if (additions.hasOwnProperty(prop)){\n            proto[prop] = additions[prop];\n        }\n    }\n\n    return proto;\n}();\nvar Properties = {\n    \"align-items\"                   : \"flex-start | flex-end | center | baseline | stretch\",\n    \"align-content\"                 : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"align-self\"                    : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"-webkit-align-items\"           : \"flex-start | flex-end | center | baseline | stretch\",\n    \"-webkit-align-content\"         : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"-webkit-align-self\"            : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"alignment-adjust\"              : \"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>\",\n    \"alignment-baseline\"            : \"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"animation\"                     : 1,\n    \"animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"animation-fill-mode\"           : { multi: \"none | forwards | backwards | both\", comma: true },\n    \"animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"animation-play-state\"          : { multi: \"running | paused\", comma: true },\n    \"animation-timing-function\"     : 1,\n    \"-moz-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-moz-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-moz-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-moz-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-moz-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-moz-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-ms-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-ms-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-ms-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-ms-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-ms-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-ms-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-webkit-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-webkit-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-webkit-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-webkit-animation-fill-mode\"           : { multi: \"none | forwards | backwards | both\", comma: true },\n    \"-webkit-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-webkit-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-webkit-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-o-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-o-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-o-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-o-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-o-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-o-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"appearance\"                    : \"icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | none | inherit\",\n    \"azimuth\"                       : function (expression) {\n        var simple      = \"<angle> | leftwards | rightwards | inherit\",\n            direction   = \"left-side | far-left | left | center-left | center | center-right | right | far-right | right-side\",\n            behind      = false,\n            valid       = false,\n            part;\n\n        if (!ValidationTypes.isAny(expression, simple)) {\n            if (ValidationTypes.isAny(expression, \"behind\")) {\n                behind = true;\n                valid = true;\n            }\n\n            if (ValidationTypes.isAny(expression, direction)) {\n                valid = true;\n                if (!behind) {\n                    ValidationTypes.isAny(expression, \"behind\");\n                }\n            }\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (<'azimuth'>) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"backface-visibility\"           : \"visible | hidden\",\n    \"background\"                    : 1,\n    \"background-attachment\"         : { multi: \"<attachment>\", comma: true },\n    \"background-clip\"               : { multi: \"<box>\", comma: true },\n    \"background-color\"              : \"<color> | inherit\",\n    \"background-image\"              : { multi: \"<bg-image>\", comma: true },\n    \"background-origin\"             : { multi: \"<box>\", comma: true },\n    \"background-position\"           : { multi: \"<bg-position>\", comma: true },\n    \"background-repeat\"             : { multi: \"<repeat-style>\" },\n    \"background-size\"               : { multi: \"<bg-size>\", comma: true },\n    \"baseline-shift\"                : \"baseline | sub | super | <percentage> | <length>\",\n    \"behavior\"                      : 1,\n    \"binding\"                       : 1,\n    \"bleed\"                         : \"<length>\",\n    \"bookmark-label\"                : \"<content> | <attr> | <string>\",\n    \"bookmark-level\"                : \"none | <integer>\",\n    \"bookmark-state\"                : \"open | closed\",\n    \"bookmark-target\"               : \"none | <uri> | <attr>\",\n    \"border\"                        : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom\"                 : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom-color\"           : \"<color> | inherit\",\n    \"border-bottom-left-radius\"     :  \"<x-one-radius>\",\n    \"border-bottom-right-radius\"    :  \"<x-one-radius>\",\n    \"border-bottom-style\"           : \"<border-style>\",\n    \"border-bottom-width\"           : \"<border-width>\",\n    \"border-collapse\"               : \"collapse | separate | inherit\",\n    \"border-color\"                  : { multi: \"<color> | inherit\", max: 4 },\n    \"border-image\"                  : 1,\n    \"border-image-outset\"           : { multi: \"<length> | <number>\", max: 4 },\n    \"border-image-repeat\"           : { multi: \"stretch | repeat | round\", max: 2 },\n    \"border-image-slice\"            : function(expression) {\n\n        var valid   = false,\n            numeric = \"<number> | <percentage>\",\n            fill    = false,\n            count   = 0,\n            max     = 4,\n            part;\n\n        if (ValidationTypes.isAny(expression, \"fill\")) {\n            fill = true;\n            valid = true;\n        }\n\n        while (expression.hasNext() && count < max) {\n            valid = ValidationTypes.isAny(expression, numeric);\n            if (!valid) {\n                break;\n            }\n            count++;\n        }\n\n\n        if (!fill) {\n            ValidationTypes.isAny(expression, \"fill\");\n        } else {\n            valid = true;\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected ([<number> | <percentage>]{1,4} && fill?) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"border-image-source\"           : \"<image> | none\",\n    \"border-image-width\"            : { multi: \"<length> | <percentage> | <number> | auto\", max: 4 },\n    \"border-left\"                   : \"<border-width> || <border-style> || <color>\",\n    \"border-left-color\"             : \"<color> | inherit\",\n    \"border-left-style\"             : \"<border-style>\",\n    \"border-left-width\"             : \"<border-width>\",\n    \"border-radius\"                 : function(expression) {\n\n        var valid   = false,\n            simple = \"<length> | <percentage> | inherit\",\n            slash   = false,\n            fill    = false,\n            count   = 0,\n            max     = 8,\n            part;\n\n        while (expression.hasNext() && count < max) {\n            valid = ValidationTypes.isAny(expression, simple);\n            if (!valid) {\n\n                if (expression.peek() == \"/\" && count > 0 && !slash) {\n                    slash = true;\n                    max = count + 5;\n                    expression.next();\n                } else {\n                    break;\n                }\n            }\n            count++;\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (<'border-radius'>) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"border-right\"                  : \"<border-width> || <border-style> || <color>\",\n    \"border-right-color\"            : \"<color> | inherit\",\n    \"border-right-style\"            : \"<border-style>\",\n    \"border-right-width\"            : \"<border-width>\",\n    \"border-spacing\"                : { multi: \"<length> | inherit\", max: 2 },\n    \"border-style\"                  : { multi: \"<border-style>\", max: 4 },\n    \"border-top\"                    : \"<border-width> || <border-style> || <color>\",\n    \"border-top-color\"              : \"<color> | inherit\",\n    \"border-top-left-radius\"        : \"<x-one-radius>\",\n    \"border-top-right-radius\"       : \"<x-one-radius>\",\n    \"border-top-style\"              : \"<border-style>\",\n    \"border-top-width\"              : \"<border-width>\",\n    \"border-width\"                  : { multi: \"<border-width>\", max: 4 },\n    \"bottom\"                        : \"<margin-width> | inherit\",\n    \"-moz-box-align\"                : \"start | end | center | baseline | stretch\",\n    \"-moz-box-decoration-break\"     : \"slice |clone\",\n    \"-moz-box-direction\"            : \"normal | reverse | inherit\",\n    \"-moz-box-flex\"                 : \"<number>\",\n    \"-moz-box-flex-group\"           : \"<integer>\",\n    \"-moz-box-lines\"                : \"single | multiple\",\n    \"-moz-box-ordinal-group\"        : \"<integer>\",\n    \"-moz-box-orient\"               : \"horizontal | vertical | inline-axis | block-axis | inherit\",\n    \"-moz-box-pack\"                 : \"start | end | center | justify\",\n    \"-webkit-box-align\"             : \"start | end | center | baseline | stretch\",\n    \"-webkit-box-decoration-break\"  : \"slice |clone\",\n    \"-webkit-box-direction\"         : \"normal | reverse | inherit\",\n    \"-webkit-box-flex\"              : \"<number>\",\n    \"-webkit-box-flex-group\"        : \"<integer>\",\n    \"-webkit-box-lines\"             : \"single | multiple\",\n    \"-webkit-box-ordinal-group\"     : \"<integer>\",\n    \"-webkit-box-orient\"            : \"horizontal | vertical | inline-axis | block-axis | inherit\",\n    \"-webkit-box-pack\"              : \"start | end | center | justify\",\n    \"box-shadow\"                    : function (expression) {\n        var result      = false,\n            part;\n\n        if (!ValidationTypes.isAny(expression, \"none\")) {\n            Validation.multiProperty(\"<shadow>\", expression, true, Infinity);\n        } else {\n            if (expression.hasNext()) {\n                part = expression.next();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"box-sizing\"                    : \"content-box | border-box | inherit\",\n    \"break-after\"                   : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-before\"                  : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-inside\"                  : \"auto | avoid | avoid-page | avoid-column\",\n    \"caption-side\"                  : \"top | bottom | inherit\",\n    \"clear\"                         : \"none | right | left | both | inherit\",\n    \"clip\"                          : 1,\n    \"color\"                         : \"<color> | inherit\",\n    \"color-profile\"                 : 1,\n    \"column-count\"                  : \"<integer> | auto\",                      //http://www.w3.org/TR/css3-multicol/\n    \"column-fill\"                   : \"auto | balance\",\n    \"column-gap\"                    : \"<length> | normal\",\n    \"column-rule\"                   : \"<border-width> || <border-style> || <color>\",\n    \"column-rule-color\"             : \"<color>\",\n    \"column-rule-style\"             : \"<border-style>\",\n    \"column-rule-width\"             : \"<border-width>\",\n    \"column-span\"                   : \"none | all\",\n    \"column-width\"                  : \"<length> | auto\",\n    \"columns\"                       : 1,\n    \"content\"                       : 1,\n    \"counter-increment\"             : 1,\n    \"counter-reset\"                 : 1,\n    \"crop\"                          : \"<shape> | auto\",\n    \"cue\"                           : \"cue-after | cue-before | inherit\",\n    \"cue-after\"                     : 1,\n    \"cue-before\"                    : 1,\n    \"cursor\"                        : 1,\n    \"direction\"                     : \"ltr | rtl | inherit\",\n    \"display\"                       : \"inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | none | inherit | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex\",\n    \"dominant-baseline\"             : 1,\n    \"drop-initial-after-adjust\"     : \"central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>\",\n    \"drop-initial-after-align\"      : \"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-before-adjust\"    : \"before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>\",\n    \"drop-initial-before-align\"     : \"caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-size\"             : \"auto | line | <length> | <percentage>\",\n    \"drop-initial-value\"            : \"initial | <integer>\",\n    \"elevation\"                     : \"<angle> | below | level | above | higher | lower | inherit\",\n    \"empty-cells\"                   : \"show | hide | inherit\",\n    \"filter\"                        : 1,\n    \"fit\"                           : \"fill | hidden | meet | slice\",\n    \"fit-position\"                  : 1,\n    \"flex\"                          : \"<flex>\",\n    \"flex-basis\"                    : \"<width>\",\n    \"flex-direction\"                : \"row | row-reverse | column | column-reverse\",\n    \"flex-flow\"                     : \"<flex-direction> || <flex-wrap>\",\n    \"flex-grow\"                     : \"<number>\",\n    \"flex-shrink\"                   : \"<number>\",\n    \"flex-wrap\"                     : \"nowrap | wrap | wrap-reverse\",\n    \"-webkit-flex\"                  : \"<flex>\",\n    \"-webkit-flex-basis\"            : \"<width>\",\n    \"-webkit-flex-direction\"        : \"row | row-reverse | column | column-reverse\",\n    \"-webkit-flex-flow\"             : \"<flex-direction> || <flex-wrap>\",\n    \"-webkit-flex-grow\"             : \"<number>\",\n    \"-webkit-flex-shrink\"           : \"<number>\",\n    \"-webkit-flex-wrap\"             : \"nowrap | wrap | wrap-reverse\",\n    \"-ms-flex\"                      : \"<flex>\",\n    \"-ms-flex-align\"                : \"start | end | center | stretch | baseline\",\n    \"-ms-flex-direction\"            : \"row | row-reverse | column | column-reverse | inherit\",\n    \"-ms-flex-order\"                : \"<number>\",\n    \"-ms-flex-pack\"                 : \"start | end | center | justify\",\n    \"-ms-flex-wrap\"                 : \"nowrap | wrap | wrap-reverse\",\n    \"float\"                         : \"left | right | none | inherit\",\n    \"float-offset\"                  : 1,\n    \"font\"                          : 1,\n    \"font-family\"                   : 1,\n    \"font-size\"                     : \"<absolute-size> | <relative-size> | <length> | <percentage> | inherit\",\n    \"font-size-adjust\"              : \"<number> | none | inherit\",\n    \"font-stretch\"                  : \"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit\",\n    \"font-style\"                    : \"normal | italic | oblique | inherit\",\n    \"font-variant\"                  : \"normal | small-caps | inherit\",\n    \"font-weight\"                   : \"normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit\",\n    \"grid-cell-stacking\"            : \"columns | rows | layer\",\n    \"grid-column\"                   : 1,\n    \"grid-columns\"                  : 1,\n    \"grid-column-align\"             : \"start | end | center | stretch\",\n    \"grid-column-sizing\"            : 1,\n    \"grid-column-span\"              : \"<integer>\",\n    \"grid-flow\"                     : \"none | rows | columns\",\n    \"grid-layer\"                    : \"<integer>\",\n    \"grid-row\"                      : 1,\n    \"grid-rows\"                     : 1,\n    \"grid-row-align\"                : \"start | end | center | stretch\",\n    \"grid-row-span\"                 : \"<integer>\",\n    \"grid-row-sizing\"               : 1,\n    \"hanging-punctuation\"           : 1,\n    \"height\"                        : \"<margin-width> | <content-sizing> | inherit\",\n    \"hyphenate-after\"               : \"<integer> | auto\",\n    \"hyphenate-before\"              : \"<integer> | auto\",\n    \"hyphenate-character\"           : \"<string> | auto\",\n    \"hyphenate-lines\"               : \"no-limit | <integer>\",\n    \"hyphenate-resource\"            : 1,\n    \"hyphens\"                       : \"none | manual | auto\",\n    \"icon\"                          : 1,\n    \"image-orientation\"             : \"angle | auto\",\n    \"image-rendering\"               : 1,\n    \"image-resolution\"              : 1,\n    \"inline-box-align\"              : \"initial | last | <integer>\",\n    \"justify-content\"               : \"flex-start | flex-end | center | space-between | space-around\",\n    \"-webkit-justify-content\"       : \"flex-start | flex-end | center | space-between | space-around\",\n    \"left\"                          : \"<margin-width> | inherit\",\n    \"letter-spacing\"                : \"<length> | normal | inherit\",\n    \"line-height\"                   : \"<number> | <length> | <percentage> | normal | inherit\",\n    \"line-break\"                    : \"auto | loose | normal | strict\",\n    \"line-stacking\"                 : 1,\n    \"line-stacking-ruby\"            : \"exclude-ruby | include-ruby\",\n    \"line-stacking-shift\"           : \"consider-shifts | disregard-shifts\",\n    \"line-stacking-strategy\"        : \"inline-line-height | block-line-height | max-height | grid-height\",\n    \"list-style\"                    : 1,\n    \"list-style-image\"              : \"<uri> | none | inherit\",\n    \"list-style-position\"           : \"inside | outside | inherit\",\n    \"list-style-type\"               : \"disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit\",\n    \"margin\"                        : { multi: \"<margin-width> | inherit\", max: 4 },\n    \"margin-bottom\"                 : \"<margin-width> | inherit\",\n    \"margin-left\"                   : \"<margin-width> | inherit\",\n    \"margin-right\"                  : \"<margin-width> | inherit\",\n    \"margin-top\"                    : \"<margin-width> | inherit\",\n    \"mark\"                          : 1,\n    \"mark-after\"                    : 1,\n    \"mark-before\"                   : 1,\n    \"marks\"                         : 1,\n    \"marquee-direction\"             : 1,\n    \"marquee-play-count\"            : 1,\n    \"marquee-speed\"                 : 1,\n    \"marquee-style\"                 : 1,\n    \"max-height\"                    : \"<length> | <percentage> | <content-sizing> | none | inherit\",\n    \"max-width\"                     : \"<length> | <percentage> | <content-sizing> | none | inherit\",\n    \"max-zoom\"                      : \"<number> | <percentage> | auto\",\n    \"min-height\"                    : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\n    \"min-width\"                     : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\n    \"min-zoom\"                      : \"<number> | <percentage> | auto\",\n    \"move-to\"                       : 1,\n    \"nav-down\"                      : 1,\n    \"nav-index\"                     : 1,\n    \"nav-left\"                      : 1,\n    \"nav-right\"                     : 1,\n    \"nav-up\"                        : 1,\n    \"opacity\"                       : \"<number> | inherit\",\n    \"order\"                         : \"<integer>\",\n    \"-webkit-order\"                 : \"<integer>\",\n    \"orphans\"                       : \"<integer> | inherit\",\n    \"outline\"                       : 1,\n    \"outline-color\"                 : \"<color> | invert | inherit\",\n    \"outline-offset\"                : 1,\n    \"outline-style\"                 : \"<border-style> | inherit\",\n    \"outline-width\"                 : \"<border-width> | inherit\",\n    \"overflow\"                      : \"visible | hidden | scroll | auto | inherit\",\n    \"overflow-style\"                : 1,\n    \"overflow-wrap\"                 : \"normal | break-word\",\n    \"overflow-x\"                    : 1,\n    \"overflow-y\"                    : 1,\n    \"padding\"                       : { multi: \"<padding-width> | inherit\", max: 4 },\n    \"padding-bottom\"                : \"<padding-width> | inherit\",\n    \"padding-left\"                  : \"<padding-width> | inherit\",\n    \"padding-right\"                 : \"<padding-width> | inherit\",\n    \"padding-top\"                   : \"<padding-width> | inherit\",\n    \"page\"                          : 1,\n    \"page-break-after\"              : \"auto | always | avoid | left | right | inherit\",\n    \"page-break-before\"             : \"auto | always | avoid | left | right | inherit\",\n    \"page-break-inside\"             : \"auto | avoid | inherit\",\n    \"page-policy\"                   : 1,\n    \"pause\"                         : 1,\n    \"pause-after\"                   : 1,\n    \"pause-before\"                  : 1,\n    \"perspective\"                   : 1,\n    \"perspective-origin\"            : 1,\n    \"phonemes\"                      : 1,\n    \"pitch\"                         : 1,\n    \"pitch-range\"                   : 1,\n    \"play-during\"                   : 1,\n    \"pointer-events\"                : \"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit\",\n    \"position\"                      : \"static | relative | absolute | fixed | inherit\",\n    \"presentation-level\"            : 1,\n    \"punctuation-trim\"              : 1,\n    \"quotes\"                        : 1,\n    \"rendering-intent\"              : 1,\n    \"resize\"                        : 1,\n    \"rest\"                          : 1,\n    \"rest-after\"                    : 1,\n    \"rest-before\"                   : 1,\n    \"richness\"                      : 1,\n    \"right\"                         : \"<margin-width> | inherit\",\n    \"rotation\"                      : 1,\n    \"rotation-point\"                : 1,\n    \"ruby-align\"                    : 1,\n    \"ruby-overhang\"                 : 1,\n    \"ruby-position\"                 : 1,\n    \"ruby-span\"                     : 1,\n    \"size\"                          : 1,\n    \"speak\"                         : \"normal | none | spell-out | inherit\",\n    \"speak-header\"                  : \"once | always | inherit\",\n    \"speak-numeral\"                 : \"digits | continuous | inherit\",\n    \"speak-punctuation\"             : \"code | none | inherit\",\n    \"speech-rate\"                   : 1,\n    \"src\"                           : 1,\n    \"stress\"                        : 1,\n    \"string-set\"                    : 1,\n\n    \"table-layout\"                  : \"auto | fixed | inherit\",\n    \"tab-size\"                      : \"<integer> | <length>\",\n    \"target\"                        : 1,\n    \"target-name\"                   : 1,\n    \"target-new\"                    : 1,\n    \"target-position\"               : 1,\n    \"text-align\"                    : \"left | right | center | justify | inherit\" ,\n    \"text-align-last\"               : 1,\n    \"text-decoration\"               : 1,\n    \"text-emphasis\"                 : 1,\n    \"text-height\"                   : 1,\n    \"text-indent\"                   : \"<length> | <percentage> | inherit\",\n    \"text-justify\"                  : \"auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida\",\n    \"text-outline\"                  : 1,\n    \"text-overflow\"                 : 1,\n    \"text-rendering\"                : \"auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit\",\n    \"text-shadow\"                   : 1,\n    \"text-transform\"                : \"capitalize | uppercase | lowercase | none | inherit\",\n    \"text-wrap\"                     : \"normal | none | avoid\",\n    \"top\"                           : \"<margin-width> | inherit\",\n    \"-ms-touch-action\"              : \"auto | none | pan-x | pan-y\",\n    \"touch-action\"                  : \"auto | none | pan-x | pan-y\",\n    \"transform\"                     : 1,\n    \"transform-origin\"              : 1,\n    \"transform-style\"               : 1,\n    \"transition\"                    : 1,\n    \"transition-delay\"              : 1,\n    \"transition-duration\"           : 1,\n    \"transition-property\"           : 1,\n    \"transition-timing-function\"    : 1,\n    \"unicode-bidi\"                  : \"normal | embed | isolate | bidi-override | isolate-override | plaintext | inherit\",\n    \"user-modify\"                   : \"read-only | read-write | write-only | inherit\",\n    \"user-select\"                   : \"none | text | toggle | element | elements | all | inherit\",\n    \"user-zoom\"                     : \"zoom | fixed\",\n    \"vertical-align\"                : \"auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>\",\n    \"visibility\"                    : \"visible | hidden | collapse | inherit\",\n    \"voice-balance\"                 : 1,\n    \"voice-duration\"                : 1,\n    \"voice-family\"                  : 1,\n    \"voice-pitch\"                   : 1,\n    \"voice-pitch-range\"             : 1,\n    \"voice-rate\"                    : 1,\n    \"voice-stress\"                  : 1,\n    \"voice-volume\"                  : 1,\n    \"volume\"                        : 1,\n    \"white-space\"                   : \"normal | pre | nowrap | pre-wrap | pre-line | inherit | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap\", //http://perishablepress.com/wrapping-content/\n    \"white-space-collapse\"          : 1,\n    \"widows\"                        : \"<integer> | inherit\",\n    \"width\"                         : \"<length> | <percentage> | <content-sizing> | auto | inherit\",\n    \"word-break\"                    : \"normal | keep-all | break-all\",\n    \"word-spacing\"                  : \"<length> | normal | inherit\",\n    \"word-wrap\"                     : \"normal | break-word\",\n    \"writing-mode\"                  : \"horizontal-tb | vertical-rl | vertical-lr | lr-tb | rl-tb | tb-rl | bt-rl | tb-lr | bt-lr | lr-bt | rl-bt | lr | rl | tb | inherit\",\n    \"z-index\"                       : \"<integer> | auto | inherit\",\n    \"zoom\"                          : \"<number> | <percentage> | normal\"\n};\nfunction PropertyName(text, hack, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_NAME_TYPE);\n    this.hack = hack;\n\n}\n\nPropertyName.prototype = new SyntaxUnit();\nPropertyName.prototype.constructor = PropertyName;\nPropertyName.prototype.toString = function(){\n    return (this.hack ? this.hack : \"\") + this.text;\n};\nfunction PropertyValue(parts, line, col){\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.PROPERTY_VALUE_TYPE);\n    this.parts = parts;\n\n}\n\nPropertyValue.prototype = new SyntaxUnit();\nPropertyValue.prototype.constructor = PropertyValue;\nfunction PropertyValueIterator(value){\n    this._i = 0;\n    this._parts = value.parts;\n    this._marks = [];\n    this.value = value;\n\n}\nPropertyValueIterator.prototype.count = function(){\n    return this._parts.length;\n};\nPropertyValueIterator.prototype.isFirst = function(){\n    return this._i === 0;\n};\nPropertyValueIterator.prototype.hasNext = function(){\n    return (this._i < this._parts.length);\n};\nPropertyValueIterator.prototype.mark = function(){\n    this._marks.push(this._i);\n};\nPropertyValueIterator.prototype.peek = function(count){\n    return this.hasNext() ? this._parts[this._i + (count || 0)] : null;\n};\nPropertyValueIterator.prototype.next = function(){\n    return this.hasNext() ? this._parts[this._i++] : null;\n};\nPropertyValueIterator.prototype.previous = function(){\n    return this._i > 0 ? this._parts[--this._i] : null;\n};\nPropertyValueIterator.prototype.restore = function(){\n    if (this._marks.length){\n        this._i = this._marks.pop();\n    }\n};\nfunction PropertyValuePart(text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_VALUE_PART_TYPE);\n    this.type = \"unknown\";\n\n    var temp;\n    if (/^([+\\-]?[\\d\\.]+)([a-z]+)$/i.test(text)){  //dimension\n        this.type = \"dimension\";\n        this.value = +RegExp.$1;\n        this.units = RegExp.$2;\n        switch(this.units.toLowerCase()){\n\n            case \"em\":\n            case \"rem\":\n            case \"ex\":\n            case \"px\":\n            case \"cm\":\n            case \"mm\":\n            case \"in\":\n            case \"pt\":\n            case \"pc\":\n            case \"ch\":\n            case \"vh\":\n            case \"vw\":\n            case \"vmax\":\n            case \"vmin\":\n                this.type = \"length\";\n                break;\n\n            case \"deg\":\n            case \"rad\":\n            case \"grad\":\n                this.type = \"angle\";\n                break;\n\n            case \"ms\":\n            case \"s\":\n                this.type = \"time\";\n                break;\n\n            case \"hz\":\n            case \"khz\":\n                this.type = \"frequency\";\n                break;\n\n            case \"dpi\":\n            case \"dpcm\":\n                this.type = \"resolution\";\n                break;\n\n        }\n\n    } else if (/^([+\\-]?[\\d\\.]+)%$/i.test(text)){  //percentage\n        this.type = \"percentage\";\n        this.value = +RegExp.$1;\n    } else if (/^([+\\-]?\\d+)$/i.test(text)){  //integer\n        this.type = \"integer\";\n        this.value = +RegExp.$1;\n    } else if (/^([+\\-]?[\\d\\.]+)$/i.test(text)){  //number\n        this.type = \"number\";\n        this.value = +RegExp.$1;\n\n    } else if (/^#([a-f0-9]{3,6})/i.test(text)){  //hexcolor\n        this.type = \"color\";\n        temp = RegExp.$1;\n        if (temp.length == 3){\n            this.red    = parseInt(temp.charAt(0)+temp.charAt(0),16);\n            this.green  = parseInt(temp.charAt(1)+temp.charAt(1),16);\n            this.blue   = parseInt(temp.charAt(2)+temp.charAt(2),16);\n        } else {\n            this.red    = parseInt(temp.substring(0,2),16);\n            this.green  = parseInt(temp.substring(2,4),16);\n            this.blue   = parseInt(temp.substring(4,6),16);\n        }\n    } else if (/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i.test(text)){ //rgb() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = +RegExp.$1;\n        this.green  = +RegExp.$2;\n        this.blue   = +RegExp.$3;\n    } else if (/^rgb\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)){ //rgb() color with percentages\n        this.type   = \"color\";\n        this.red    = +RegExp.$1 * 255 / 100;\n        this.green  = +RegExp.$2 * 255 / 100;\n        this.blue   = +RegExp.$3 * 255 / 100;\n    } else if (/^rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //rgba() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = +RegExp.$1;\n        this.green  = +RegExp.$2;\n        this.blue   = +RegExp.$3;\n        this.alpha  = +RegExp.$4;\n    } else if (/^rgba\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //rgba() color with percentages\n        this.type   = \"color\";\n        this.red    = +RegExp.$1 * 255 / 100;\n        this.green  = +RegExp.$2 * 255 / 100;\n        this.blue   = +RegExp.$3 * 255 / 100;\n        this.alpha  = +RegExp.$4;\n    } else if (/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)){ //hsl()\n        this.type   = \"color\";\n        this.hue    = +RegExp.$1;\n        this.saturation = +RegExp.$2 / 100;\n        this.lightness  = +RegExp.$3 / 100;\n    } else if (/^hsla\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //hsla() color with percentages\n        this.type   = \"color\";\n        this.hue    = +RegExp.$1;\n        this.saturation = +RegExp.$2 / 100;\n        this.lightness  = +RegExp.$3 / 100;\n        this.alpha  = +RegExp.$4;\n    } else if (/^url\\([\"']?([^\\)\"']+)[\"']?\\)/i.test(text)){ //URI\n        this.type   = \"uri\";\n        this.uri    = RegExp.$1;\n    } else if (/^([^\\(]+)\\(/i.test(text)){\n        this.type   = \"function\";\n        this.name   = RegExp.$1;\n        this.value  = text;\n    } else if (/^[\"'][^\"']*[\"']/.test(text)){    //string\n        this.type   = \"string\";\n        this.value  = eval(text);\n    } else if (Colors[text.toLowerCase()]){  //named color\n        this.type   = \"color\";\n        temp        = Colors[text.toLowerCase()].substring(1);\n        this.red    = parseInt(temp.substring(0,2),16);\n        this.green  = parseInt(temp.substring(2,4),16);\n        this.blue   = parseInt(temp.substring(4,6),16);\n    } else if (/^[\\,\\/]$/.test(text)){\n        this.type   = \"operator\";\n        this.value  = text;\n    } else if (/^[a-z\\-_\\u0080-\\uFFFF][a-z0-9\\-_\\u0080-\\uFFFF]*$/i.test(text)){\n        this.type   = \"identifier\";\n        this.value  = text;\n    }\n\n}\n\nPropertyValuePart.prototype = new SyntaxUnit();\nPropertyValuePart.prototype.constructor = PropertyValuePart;\nPropertyValuePart.fromToken = function(token){\n    return new PropertyValuePart(token.value, token.startLine, token.startCol);\n};\nvar Pseudos = {\n    \":first-letter\": 1,\n    \":first-line\":   1,\n    \":before\":       1,\n    \":after\":        1\n};\n\nPseudos.ELEMENT = 1;\nPseudos.CLASS = 2;\n\nPseudos.isElement = function(pseudo){\n    return pseudo.indexOf(\"::\") === 0 || Pseudos[pseudo.toLowerCase()] == Pseudos.ELEMENT;\n};\nfunction Selector(parts, line, col){\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.SELECTOR_TYPE);\n    this.parts = parts;\n    this.specificity = Specificity.calculate(this);\n\n}\n\nSelector.prototype = new SyntaxUnit();\nSelector.prototype.constructor = Selector;\nfunction SelectorPart(elementName, modifiers, text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_PART_TYPE);\n    this.elementName = elementName;\n    this.modifiers = modifiers;\n\n}\n\nSelectorPart.prototype = new SyntaxUnit();\nSelectorPart.prototype.constructor = SelectorPart;\nfunction SelectorSubPart(text, type, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_SUB_PART_TYPE);\n    this.type = type;\n    this.args = [];\n\n}\n\nSelectorSubPart.prototype = new SyntaxUnit();\nSelectorSubPart.prototype.constructor = SelectorSubPart;\nfunction Specificity(a, b, c, d){\n    this.a = a;\n    this.b = b;\n    this.c = c;\n    this.d = d;\n}\n\nSpecificity.prototype = {\n    constructor: Specificity,\n    compare: function(other){\n        var comps = [\"a\", \"b\", \"c\", \"d\"],\n            i, len;\n\n        for (i=0, len=comps.length; i < len; i++){\n            if (this[comps[i]] < other[comps[i]]){\n                return -1;\n            } else if (this[comps[i]] > other[comps[i]]){\n                return 1;\n            }\n        }\n\n        return 0;\n    },\n    valueOf: function(){\n        return (this.a * 1000) + (this.b * 100) + (this.c * 10) + this.d;\n    },\n    toString: function(){\n        return this.a + \",\" + this.b + \",\" + this.c + \",\" + this.d;\n    }\n\n};\nSpecificity.calculate = function(selector){\n\n    var i, len,\n        part,\n        b=0, c=0, d=0;\n\n    function updateValues(part){\n\n        var i, j, len, num,\n            elementName = part.elementName ? part.elementName.text : \"\",\n            modifier;\n\n        if (elementName && elementName.charAt(elementName.length-1) != \"*\") {\n            d++;\n        }\n\n        for (i=0, len=part.modifiers.length; i < len; i++){\n            modifier = part.modifiers[i];\n            switch(modifier.type){\n                case \"class\":\n                case \"attribute\":\n                    c++;\n                    break;\n\n                case \"id\":\n                    b++;\n                    break;\n\n                case \"pseudo\":\n                    if (Pseudos.isElement(modifier.text)){\n                        d++;\n                    } else {\n                        c++;\n                    }\n                    break;\n\n                case \"not\":\n                    for (j=0, num=modifier.args.length; j < num; j++){\n                        updateValues(modifier.args[j]);\n                    }\n            }\n         }\n    }\n\n    for (i=0, len=selector.parts.length; i < len; i++){\n        part = selector.parts[i];\n\n        if (part instanceof SelectorPart){\n            updateValues(part);\n        }\n    }\n\n    return new Specificity(0, b, c, d);\n};\n\nvar h = /^[0-9a-fA-F]$/,\n    nonascii = /^[\\u0080-\\uFFFF]$/,\n    nl = /\\n|\\r\\n|\\r|\\f/;\n\n\nfunction isHexDigit(c){\n    return c !== null && h.test(c);\n}\n\nfunction isDigit(c){\n    return c !== null && /\\d/.test(c);\n}\n\nfunction isWhitespace(c){\n    return c !== null && /\\s/.test(c);\n}\n\nfunction isNewLine(c){\n    return c !== null && nl.test(c);\n}\n\nfunction isNameStart(c){\n    return c !== null && (/[a-z_\\u0080-\\uFFFF\\\\]/i.test(c));\n}\n\nfunction isNameChar(c){\n    return c !== null && (isNameStart(c) || /[0-9\\-\\\\]/.test(c));\n}\n\nfunction isIdentStart(c){\n    return c !== null && (isNameStart(c) || /\\-\\\\/.test(c));\n}\n\nfunction mix(receiver, supplier){\n    for (var prop in supplier){\n        if (supplier.hasOwnProperty(prop)){\n            receiver[prop] = supplier[prop];\n        }\n    }\n    return receiver;\n}\nfunction TokenStream(input){\n    TokenStreamBase.call(this, input, Tokens);\n}\n\nTokenStream.prototype = mix(new TokenStreamBase(), {\n    _getToken: function(channel){\n\n        var c,\n            reader = this._reader,\n            token   = null,\n            startLine   = reader.getLine(),\n            startCol    = reader.getCol();\n\n        c = reader.read();\n\n\n        while(c){\n            switch(c){\n                case \"/\":\n\n                    if(reader.peek() == \"*\"){\n                        token = this.commentToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"|\":\n                case \"~\":\n                case \"^\":\n                case \"$\":\n                case \"*\":\n                    if(reader.peek() == \"=\"){\n                        token = this.comparisonToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"\\\"\":\n                case \"'\":\n                    token = this.stringToken(c, startLine, startCol);\n                    break;\n                case \"#\":\n                    if (isNameChar(reader.peek())){\n                        token = this.hashToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \".\":\n                    if (isDigit(reader.peek())){\n                        token = this.numberToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"-\":\n                    if (reader.peek() == \"-\"){  //could be closing HTML-style comment\n                        token = this.htmlCommentEndToken(c, startLine, startCol);\n                    } else if (isNameStart(reader.peek())){\n                        token = this.identOrFunctionToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"!\":\n                    token = this.importantToken(c, startLine, startCol);\n                    break;\n                case \"@\":\n                    token = this.atRuleToken(c, startLine, startCol);\n                    break;\n                case \":\":\n                    token = this.notToken(c, startLine, startCol);\n                    break;\n                case \"<\":\n                    token = this.htmlCommentStartToken(c, startLine, startCol);\n                    break;\n                case \"U\":\n                case \"u\":\n                    if (reader.peek() == \"+\"){\n                        token = this.unicodeRangeToken(c, startLine, startCol);\n                        break;\n                    }\n                default:\n                    if (isDigit(c)){\n                        token = this.numberToken(c, startLine, startCol);\n                    } else\n                    if (isWhitespace(c)){\n                        token = this.whitespaceToken(c, startLine, startCol);\n                    } else\n                    if (isIdentStart(c)){\n                        token = this.identOrFunctionToken(c, startLine, startCol);\n                    } else\n                    {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n\n\n\n\n\n\n            }\n            break;\n        }\n\n        if (!token && c === null){\n            token = this.createToken(Tokens.EOF,null,startLine,startCol);\n        }\n\n        return token;\n    },\n    createToken: function(tt, value, startLine, startCol, options){\n        var reader = this._reader;\n        options = options || {};\n\n        return {\n            value:      value,\n            type:       tt,\n            channel:    options.channel,\n            endChar:    options.endChar,\n            hide:       options.hide || false,\n            startLine:  startLine,\n            startCol:   startCol,\n            endLine:    reader.getLine(),\n            endCol:     reader.getCol()\n        };\n    },\n    atRuleToken: function(first, startLine, startCol){\n        var rule    = first,\n            reader  = this._reader,\n            tt      = Tokens.CHAR,\n            valid   = false,\n            ident,\n            c;\n        reader.mark();\n        ident = this.readName();\n        rule = first + ident;\n        tt = Tokens.type(rule.toLowerCase());\n        if (tt == Tokens.CHAR || tt == Tokens.UNKNOWN){\n            if (rule.length > 1){\n                tt = Tokens.UNKNOWN_SYM;\n            } else {\n                tt = Tokens.CHAR;\n                rule = first;\n                reader.reset();\n            }\n        }\n\n        return this.createToken(tt, rule, startLine, startCol);\n    },\n    charToken: function(c, startLine, startCol){\n        var tt = Tokens.type(c);\n        var opts = {};\n\n        if (tt == -1){\n            tt = Tokens.CHAR;\n        } else {\n            opts.endChar = Tokens[tt].endChar;\n        }\n\n        return this.createToken(tt, c, startLine, startCol, opts);\n    },\n    commentToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            comment = this.readComment(first);\n\n        return this.createToken(Tokens.COMMENT, comment, startLine, startCol);\n    },\n    comparisonToken: function(c, startLine, startCol){\n        var reader  = this._reader,\n            comparison  = c + reader.read(),\n            tt      = Tokens.type(comparison) || Tokens.CHAR;\n\n        return this.createToken(tt, comparison, startLine, startCol);\n    },\n    hashToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            name    = this.readName(first);\n\n        return this.createToken(Tokens.HASH, name, startLine, startCol);\n    },\n    htmlCommentStartToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(3);\n\n        if (text == \"<!--\"){\n            return this.createToken(Tokens.CDO, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    htmlCommentEndToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(2);\n\n        if (text == \"-->\"){\n            return this.createToken(Tokens.CDC, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    identOrFunctionToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            ident   = this.readName(first),\n            tt      = Tokens.IDENT;\n        if (reader.peek() == \"(\"){\n            ident += reader.read();\n            if (ident.toLowerCase() == \"url(\"){\n                tt = Tokens.URI;\n                ident = this.readURI(ident);\n                if (ident.toLowerCase() == \"url(\"){\n                    tt = Tokens.FUNCTION;\n                }\n            } else {\n                tt = Tokens.FUNCTION;\n            }\n        } else if (reader.peek() == \":\"){  //might be an IE function\n            if (ident.toLowerCase() == \"progid\"){\n                ident += reader.readTo(\"(\");\n                tt = Tokens.IE_FUNCTION;\n            }\n        }\n\n        return this.createToken(tt, ident, startLine, startCol);\n    },\n    importantToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            important   = first,\n            tt          = Tokens.CHAR,\n            temp,\n            c;\n\n        reader.mark();\n        c = reader.read();\n\n        while(c){\n            if (c == \"/\"){\n                if (reader.peek() != \"*\"){\n                    break;\n                } else {\n                    temp = this.readComment(c);\n                    if (temp === \"\"){    //broken!\n                        break;\n                    }\n                }\n            } else if (isWhitespace(c)){\n                important += c + this.readWhitespace();\n            } else if (/i/i.test(c)){\n                temp = reader.readCount(8);\n                if (/mportant/i.test(temp)){\n                    important += c + temp;\n                    tt = Tokens.IMPORTANT_SYM;\n\n                }\n                break;  //we're done\n            } else {\n                break;\n            }\n\n            c = reader.read();\n        }\n\n        if (tt == Tokens.CHAR){\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        } else {\n            return this.createToken(tt, important, startLine, startCol);\n        }\n\n\n    },\n    notToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(4);\n\n        if (text.toLowerCase() == \":not(\"){\n            return this.createToken(Tokens.NOT, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    numberToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = this.readNumber(first),\n            ident,\n            tt      = Tokens.NUMBER,\n            c       = reader.peek();\n\n        if (isIdentStart(c)){\n            ident = this.readName(reader.read());\n            value += ident;\n\n            if (/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(ident)){\n                tt = Tokens.LENGTH;\n            } else if (/^deg|^rad$|^grad$/i.test(ident)){\n                tt = Tokens.ANGLE;\n            } else if (/^ms$|^s$/i.test(ident)){\n                tt = Tokens.TIME;\n            } else if (/^hz$|^khz$/i.test(ident)){\n                tt = Tokens.FREQ;\n            } else if (/^dpi$|^dpcm$/i.test(ident)){\n                tt = Tokens.RESOLUTION;\n            } else {\n                tt = Tokens.DIMENSION;\n            }\n\n        } else if (c == \"%\"){\n            value += reader.read();\n            tt = Tokens.PERCENTAGE;\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n    stringToken: function(first, startLine, startCol){\n        var delim   = first,\n            string  = first,\n            reader  = this._reader,\n            prev    = first,\n            tt      = Tokens.STRING,\n            c       = reader.read();\n\n        while(c){\n            string += c;\n            if (c == delim && prev != \"\\\\\"){\n                break;\n            }\n            if (isNewLine(reader.peek()) && c != \"\\\\\"){\n                tt = Tokens.INVALID;\n                break;\n            }\n            prev = c;\n            c = reader.read();\n        }\n        if (c === null){\n            tt = Tokens.INVALID;\n        }\n\n        return this.createToken(tt, string, startLine, startCol);\n    },\n\n    unicodeRangeToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = first,\n            temp,\n            tt      = Tokens.CHAR;\n        if (reader.peek() == \"+\"){\n            reader.mark();\n            value += reader.read();\n            value += this.readUnicodeRangePart(true);\n            if (value.length == 2){\n                reader.reset();\n            } else {\n\n                tt = Tokens.UNICODE_RANGE;\n                if (value.indexOf(\"?\") == -1){\n\n                    if (reader.peek() == \"-\"){\n                        reader.mark();\n                        temp = reader.read();\n                        temp += this.readUnicodeRangePart(false);\n                        if (temp.length == 1){\n                            reader.reset();\n                        } else {\n                            value += temp;\n                        }\n                    }\n\n                }\n            }\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n    whitespaceToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = first + this.readWhitespace();\n        return this.createToken(Tokens.S, value, startLine, startCol);\n    },\n\n    readUnicodeRangePart: function(allowQuestionMark){\n        var reader  = this._reader,\n            part = \"\",\n            c       = reader.peek();\n        while(isHexDigit(c) && part.length < 6){\n            reader.read();\n            part += c;\n            c = reader.peek();\n        }\n        if (allowQuestionMark){\n            while(c == \"?\" && part.length < 6){\n                reader.read();\n                part += c;\n                c = reader.peek();\n            }\n        }\n\n        return part;\n    },\n\n    readWhitespace: function(){\n        var reader  = this._reader,\n            whitespace = \"\",\n            c       = reader.peek();\n\n        while(isWhitespace(c)){\n            reader.read();\n            whitespace += c;\n            c = reader.peek();\n        }\n\n        return whitespace;\n    },\n    readNumber: function(first){\n        var reader  = this._reader,\n            number  = first,\n            hasDot  = (first == \".\"),\n            c       = reader.peek();\n\n\n        while(c){\n            if (isDigit(c)){\n                number += reader.read();\n            } else if (c == \".\"){\n                if (hasDot){\n                    break;\n                } else {\n                    hasDot = true;\n                    number += reader.read();\n                }\n            } else {\n                break;\n            }\n\n            c = reader.peek();\n        }\n\n        return number;\n    },\n    readString: function(){\n        var reader  = this._reader,\n            delim   = reader.read(),\n            string  = delim,\n            prev    = delim,\n            c       = reader.peek();\n\n        while(c){\n            c = reader.read();\n            string += c;\n            if (c == delim && prev != \"\\\\\"){\n                break;\n            }\n            if (isNewLine(reader.peek()) && c != \"\\\\\"){\n                string = \"\";\n                break;\n            }\n            prev = c;\n            c = reader.peek();\n        }\n        if (c === null){\n            string = \"\";\n        }\n\n        return string;\n    },\n    readURI: function(first){\n        var reader  = this._reader,\n            uri     = first,\n            inner   = \"\",\n            c       = reader.peek();\n\n        reader.mark();\n        while(c && isWhitespace(c)){\n            reader.read();\n            c = reader.peek();\n        }\n        if (c == \"'\" || c == \"\\\"\"){\n            inner = this.readString();\n        } else {\n            inner = this.readURL();\n        }\n\n        c = reader.peek();\n        while(c && isWhitespace(c)){\n            reader.read();\n            c = reader.peek();\n        }\n        if (inner === \"\" || c != \")\"){\n            uri = first;\n            reader.reset();\n        } else {\n            uri += inner + reader.read();\n        }\n\n        return uri;\n    },\n    readURL: function(){\n        var reader  = this._reader,\n            url     = \"\",\n            c       = reader.peek();\n        while (/^[!#$%&\\\\*-~]$/.test(c)){\n            url += reader.read();\n            c = reader.peek();\n        }\n\n        return url;\n\n    },\n    readName: function(first){\n        var reader  = this._reader,\n            ident   = first || \"\",\n            c       = reader.peek();\n\n        while(true){\n            if (c == \"\\\\\"){\n                ident += this.readEscape(reader.read());\n                c = reader.peek();\n            } else if(c && isNameChar(c)){\n                ident += reader.read();\n                c = reader.peek();\n            } else {\n                break;\n            }\n        }\n\n        return ident;\n    },\n\n    readEscape: function(first){\n        var reader  = this._reader,\n            cssEscape = first || \"\",\n            i       = 0,\n            c       = reader.peek();\n\n        if (isHexDigit(c)){\n            do {\n                cssEscape += reader.read();\n                c = reader.peek();\n            } while(c && isHexDigit(c) && ++i < 6);\n        }\n\n        if (cssEscape.length == 3 && /\\s/.test(c) ||\n            cssEscape.length == 7 || cssEscape.length == 1){\n                reader.read();\n        } else {\n            c = \"\";\n        }\n\n        return cssEscape + c;\n    },\n\n    readComment: function(first){\n        var reader  = this._reader,\n            comment = first || \"\",\n            c       = reader.read();\n\n        if (c == \"*\"){\n            while(c){\n                comment += c;\n                if (comment.length > 2 && c == \"*\" && reader.peek() == \"/\"){\n                    comment += reader.read();\n                    break;\n                }\n\n                c = reader.read();\n            }\n\n            return comment;\n        } else {\n            return \"\";\n        }\n\n    }\n});\n\nvar Tokens  = [\n    { name: \"CDO\"},\n    { name: \"CDC\"},\n    { name: \"S\", whitespace: true/*, channel: \"ws\"*/},\n    { name: \"COMMENT\", comment: true, hide: true, channel: \"comment\" },\n    { name: \"INCLUDES\", text: \"~=\"},\n    { name: \"DASHMATCH\", text: \"|=\"},\n    { name: \"PREFIXMATCH\", text: \"^=\"},\n    { name: \"SUFFIXMATCH\", text: \"$=\"},\n    { name: \"SUBSTRINGMATCH\", text: \"*=\"},\n    { name: \"STRING\"},\n    { name: \"IDENT\"},\n    { name: \"HASH\"},\n    { name: \"IMPORT_SYM\", text: \"@import\"},\n    { name: \"PAGE_SYM\", text: \"@page\"},\n    { name: \"MEDIA_SYM\", text: \"@media\"},\n    { name: \"FONT_FACE_SYM\", text: \"@font-face\"},\n    { name: \"CHARSET_SYM\", text: \"@charset\"},\n    { name: \"NAMESPACE_SYM\", text: \"@namespace\"},\n    { name: \"VIEWPORT_SYM\", text: [\"@viewport\", \"@-ms-viewport\"]},\n    { name: \"UNKNOWN_SYM\" },\n    { name: \"KEYFRAMES_SYM\", text: [ \"@keyframes\", \"@-webkit-keyframes\", \"@-moz-keyframes\", \"@-o-keyframes\" ] },\n    { name: \"IMPORTANT_SYM\"},\n    { name: \"LENGTH\"},\n    { name: \"ANGLE\"},\n    { name: \"TIME\"},\n    { name: \"FREQ\"},\n    { name: \"DIMENSION\"},\n    { name: \"PERCENTAGE\"},\n    { name: \"NUMBER\"},\n    { name: \"URI\"},\n    { name: \"FUNCTION\"},\n    { name: \"UNICODE_RANGE\"},\n    { name: \"INVALID\"},\n    { name: \"PLUS\", text: \"+\" },\n    { name: \"GREATER\", text: \">\"},\n    { name: \"COMMA\", text: \",\"},\n    { name: \"TILDE\", text: \"~\"},\n    { name: \"NOT\"},\n    { name: \"TOPLEFTCORNER_SYM\", text: \"@top-left-corner\"},\n    { name: \"TOPLEFT_SYM\", text: \"@top-left\"},\n    { name: \"TOPCENTER_SYM\", text: \"@top-center\"},\n    { name: \"TOPRIGHT_SYM\", text: \"@top-right\"},\n    { name: \"TOPRIGHTCORNER_SYM\", text: \"@top-right-corner\"},\n    { name: \"BOTTOMLEFTCORNER_SYM\", text: \"@bottom-left-corner\"},\n    { name: \"BOTTOMLEFT_SYM\", text: \"@bottom-left\"},\n    { name: \"BOTTOMCENTER_SYM\", text: \"@bottom-center\"},\n    { name: \"BOTTOMRIGHT_SYM\", text: \"@bottom-right\"},\n    { name: \"BOTTOMRIGHTCORNER_SYM\", text: \"@bottom-right-corner\"},\n    { name: \"LEFTTOP_SYM\", text: \"@left-top\"},\n    { name: \"LEFTMIDDLE_SYM\", text: \"@left-middle\"},\n    { name: \"LEFTBOTTOM_SYM\", text: \"@left-bottom\"},\n    { name: \"RIGHTTOP_SYM\", text: \"@right-top\"},\n    { name: \"RIGHTMIDDLE_SYM\", text: \"@right-middle\"},\n    { name: \"RIGHTBOTTOM_SYM\", text: \"@right-bottom\"},\n    { name: \"RESOLUTION\", state: \"media\"},\n    { name: \"IE_FUNCTION\" },\n    { name: \"CHAR\" },\n    {\n        name: \"PIPE\",\n        text: \"|\"\n    },\n    {\n        name: \"SLASH\",\n        text: \"/\"\n    },\n    {\n        name: \"MINUS\",\n        text: \"-\"\n    },\n    {\n        name: \"STAR\",\n        text: \"*\"\n    },\n\n    {\n        name: \"LBRACE\",\n        endChar: \"}\",\n        text: \"{\"\n    },\n    {\n        name: \"RBRACE\",\n        text: \"}\"\n    },\n    {\n        name: \"LBRACKET\",\n        endChar: \"]\",\n        text: \"[\"\n    },\n    {\n        name: \"RBRACKET\",\n        text: \"]\"\n    },\n    {\n        name: \"EQUALS\",\n        text: \"=\"\n    },\n    {\n        name: \"COLON\",\n        text: \":\"\n    },\n    {\n        name: \"SEMICOLON\",\n        text: \";\"\n    },\n\n    {\n        name: \"LPAREN\",\n        endChar: \")\",\n        text: \"(\"\n    },\n    {\n        name: \"RPAREN\",\n        text: \")\"\n    },\n    {\n        name: \"DOT\",\n        text: \".\"\n    }\n];\n\n(function(){\n\n    var nameMap = [],\n        typeMap = {};\n\n    Tokens.UNKNOWN = -1;\n    Tokens.unshift({name:\"EOF\"});\n    for (var i=0, len = Tokens.length; i < len; i++){\n        nameMap.push(Tokens[i].name);\n        Tokens[Tokens[i].name] = i;\n        if (Tokens[i].text){\n            if (Tokens[i].text instanceof Array){\n                for (var j=0; j < Tokens[i].text.length; j++){\n                    typeMap[Tokens[i].text[j]] = i;\n                }\n            } else {\n                typeMap[Tokens[i].text] = i;\n            }\n        }\n    }\n\n    Tokens.name = function(tt){\n        return nameMap[tt];\n    };\n\n    Tokens.type = function(c){\n        return typeMap[c] || -1;\n    };\n\n})();\nvar Validation = {\n\n    validate: function(property, value){\n        var name        = property.toString().toLowerCase(),\n            parts       = value.parts,\n            expression  = new PropertyValueIterator(value),\n            spec        = Properties[name],\n            part,\n            valid,\n            j, count,\n            msg,\n            types,\n            last,\n            literals,\n            max, multi, group;\n\n        if (!spec) {\n            if (name.indexOf(\"-\") !== 0){    //vendor prefixed are ok\n                throw new ValidationError(\"Unknown property '\" + property + \"'.\", property.line, property.col);\n            }\n        } else if (typeof spec != \"number\"){\n            if (typeof spec == \"string\"){\n                if (spec.indexOf(\"||\") > -1) {\n                    this.groupProperty(spec, expression);\n                } else {\n                    this.singleProperty(spec, expression, 1);\n                }\n\n            } else if (spec.multi) {\n                this.multiProperty(spec.multi, expression, spec.comma, spec.max || Infinity);\n            } else if (typeof spec == \"function\") {\n                spec(expression);\n            }\n\n        }\n\n    },\n\n    singleProperty: function(types, expression, max, partial) {\n\n        var result      = false,\n            value       = expression.value,\n            count       = 0,\n            part;\n\n        while (expression.hasNext() && count < max) {\n            result = ValidationTypes.isAny(expression, types);\n            if (!result) {\n                break;\n            }\n            count++;\n        }\n\n        if (!result) {\n            if (expression.hasNext() && !expression.isFirst()) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                 throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n            }\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n\n    },\n\n    multiProperty: function (types, expression, comma, max) {\n\n        var result      = false,\n            value       = expression.value,\n            count       = 0,\n            sep         = false,\n            part;\n\n        while(expression.hasNext() && !result && count < max) {\n            if (ValidationTypes.isAny(expression, types)) {\n                count++;\n                if (!expression.hasNext()) {\n                    result = true;\n\n                } else if (comma) {\n                    if (expression.peek() == \",\") {\n                        part = expression.next();\n                    } else {\n                        break;\n                    }\n                }\n            } else {\n                break;\n\n            }\n        }\n\n        if (!result) {\n            if (expression.hasNext() && !expression.isFirst()) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                part = expression.previous();\n                if (comma && part == \",\") {\n                    throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n                } else {\n                    throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n                }\n            }\n\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n\n    },\n\n    groupProperty: function (types, expression, comma) {\n\n        var result      = false,\n            value       = expression.value,\n            typeCount   = types.split(\"||\").length,\n            groups      = { count: 0 },\n            partial     = false,\n            name,\n            part;\n\n        while(expression.hasNext() && !result) {\n            name = ValidationTypes.isAnyOfGroup(expression, types);\n            if (name) {\n                if (groups[name]) {\n                    break;\n                } else {\n                    groups[name] = 1;\n                    groups.count++;\n                    partial = true;\n\n                    if (groups.count == typeCount || !expression.hasNext()) {\n                        result = true;\n                    }\n                }\n            } else {\n                break;\n            }\n        }\n\n        if (!result) {\n            if (partial && expression.hasNext()) {\n                    part = expression.peek();\n                    throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n            }\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n    }\n\n\n\n};\nfunction ValidationError(message, line, col){\n    this.col = col;\n    this.line = line;\n    this.message = message;\n\n}\nValidationError.prototype = new Error();\nvar ValidationTypes = {\n\n    isLiteral: function (part, literals) {\n        var text = part.text.toString().toLowerCase(),\n            args = literals.split(\" | \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found; i++){\n            if (text == args[i].toLowerCase()){\n                found = true;\n            }\n        }\n\n        return found;\n    },\n\n    isSimple: function(type) {\n        return !!this.simple[type];\n    },\n\n    isComplex: function(type) {\n        return !!this.complex[type];\n    },\n    isAny: function (expression, types) {\n        var args = types.split(\" | \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found && expression.hasNext(); i++){\n            found = this.isType(expression, args[i]);\n        }\n\n        return found;\n    },\n    isAnyOfGroup: function(expression, types) {\n        var args = types.split(\" || \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found; i++){\n            found = this.isType(expression, args[i]);\n        }\n\n        return found ? args[i-1] : false;\n    },\n    isType: function (expression, type) {\n        var part = expression.peek(),\n            result = false;\n\n        if (type.charAt(0) != \"<\") {\n            result = this.isLiteral(part, type);\n            if (result) {\n                expression.next();\n            }\n        } else if (this.simple[type]) {\n            result = this.simple[type](part);\n            if (result) {\n                expression.next();\n            }\n        } else {\n            result = this.complex[type](expression);\n        }\n\n        return result;\n    },\n\n\n\n    simple: {\n\n        \"<absolute-size>\": function(part){\n            return ValidationTypes.isLiteral(part, \"xx-small | x-small | small | medium | large | x-large | xx-large\");\n        },\n\n        \"<attachment>\": function(part){\n            return ValidationTypes.isLiteral(part, \"scroll | fixed | local\");\n        },\n\n        \"<attr>\": function(part){\n            return part.type == \"function\" && part.name == \"attr\";\n        },\n\n        \"<bg-image>\": function(part){\n            return this[\"<image>\"](part) || this[\"<gradient>\"](part) ||  part == \"none\";\n        },\n\n        \"<gradient>\": function(part) {\n            return part.type == \"function\" && /^(?:\\-(?:ms|moz|o|webkit)\\-)?(?:repeating\\-)?(?:radial\\-|linear\\-)?gradient/i.test(part);\n        },\n\n        \"<box>\": function(part){\n            return ValidationTypes.isLiteral(part, \"padding-box | border-box | content-box\");\n        },\n\n        \"<content>\": function(part){\n            return part.type == \"function\" && part.name == \"content\";\n        },\n\n        \"<relative-size>\": function(part){\n            return ValidationTypes.isLiteral(part, \"smaller | larger\");\n        },\n        \"<ident>\": function(part){\n            return part.type == \"identifier\";\n        },\n\n        \"<length>\": function(part){\n            if (part.type == \"function\" && /^(?:\\-(?:ms|moz|o|webkit)\\-)?calc/i.test(part)){\n                return true;\n            }else{\n                return part.type == \"length\" || part.type == \"number\" || part.type == \"integer\" || part == \"0\";\n            }\n        },\n\n        \"<color>\": function(part){\n            return part.type == \"color\" || part == \"transparent\";\n        },\n\n        \"<number>\": function(part){\n            return part.type == \"number\" || this[\"<integer>\"](part);\n        },\n\n        \"<integer>\": function(part){\n            return part.type == \"integer\";\n        },\n\n        \"<line>\": function(part){\n            return part.type == \"integer\";\n        },\n\n        \"<angle>\": function(part){\n            return part.type == \"angle\";\n        },\n\n        \"<uri>\": function(part){\n            return part.type == \"uri\";\n        },\n\n        \"<image>\": function(part){\n            return this[\"<uri>\"](part);\n        },\n\n        \"<percentage>\": function(part){\n            return part.type == \"percentage\" || part == \"0\";\n        },\n\n        \"<border-width>\": function(part){\n            return this[\"<length>\"](part) || ValidationTypes.isLiteral(part, \"thin | medium | thick\");\n        },\n\n        \"<border-style>\": function(part){\n            return ValidationTypes.isLiteral(part, \"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset\");\n        },\n\n        \"<content-sizing>\": function(part){ // http://www.w3.org/TR/css3-sizing/#width-height-keywords\n            return ValidationTypes.isLiteral(part, \"fill-available | -moz-available | -webkit-fill-available | max-content | -moz-max-content | -webkit-max-content | min-content | -moz-min-content | -webkit-min-content | fit-content | -moz-fit-content | -webkit-fit-content\");\n        },\n\n        \"<margin-width>\": function(part){\n            return this[\"<length>\"](part) || this[\"<percentage>\"](part) || ValidationTypes.isLiteral(part, \"auto\");\n        },\n\n        \"<padding-width>\": function(part){\n            return this[\"<length>\"](part) || this[\"<percentage>\"](part);\n        },\n\n        \"<shape>\": function(part){\n            return part.type == \"function\" && (part.name == \"rect\" || part.name == \"inset-rect\");\n        },\n\n        \"<time>\": function(part) {\n            return part.type == \"time\";\n        },\n\n        \"<flex-grow>\": function(part){\n            return this[\"<number>\"](part);\n        },\n\n        \"<flex-shrink>\": function(part){\n            return this[\"<number>\"](part);\n        },\n\n        \"<width>\": function(part){\n            return this[\"<margin-width>\"](part);\n        },\n\n        \"<flex-basis>\": function(part){\n            return this[\"<width>\"](part);\n        },\n\n        \"<flex-direction>\": function(part){\n            return ValidationTypes.isLiteral(part, \"row | row-reverse | column | column-reverse\");\n        },\n\n        \"<flex-wrap>\": function(part){\n            return ValidationTypes.isLiteral(part, \"nowrap | wrap | wrap-reverse\");\n        }\n    },\n\n    complex: {\n\n        \"<bg-position>\": function(expression){\n            var types   = this,\n                result  = false,\n                numeric = \"<percentage> | <length>\",\n                xDir    = \"left | right\",\n                yDir    = \"top | bottom\",\n                count = 0,\n                hasNext = function() {\n                    return expression.hasNext() && expression.peek() != \",\";\n                };\n\n            while (expression.peek(count) && expression.peek(count) != \",\") {\n                count++;\n            }\n\n            if (count < 3) {\n                if (ValidationTypes.isAny(expression, xDir + \" | center | \" + numeric)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, yDir + \" | center | \" + numeric);\n                } else if (ValidationTypes.isAny(expression, yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, xDir + \" | center\");\n                }\n            } else {\n                if (ValidationTypes.isAny(expression, xDir)) {\n                    if (ValidationTypes.isAny(expression, yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    } else if (ValidationTypes.isAny(expression, numeric)) {\n                        if (ValidationTypes.isAny(expression, yDir)) {\n                            result = true;\n                            ValidationTypes.isAny(expression, numeric);\n                        } else if (ValidationTypes.isAny(expression, \"center\")) {\n                            result = true;\n                        }\n                    }\n                } else if (ValidationTypes.isAny(expression, yDir)) {\n                    if (ValidationTypes.isAny(expression, xDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    } else if (ValidationTypes.isAny(expression, numeric)) {\n                        if (ValidationTypes.isAny(expression, xDir)) {\n                                result = true;\n                                ValidationTypes.isAny(expression, numeric);\n                        } else if (ValidationTypes.isAny(expression, \"center\")) {\n                            result = true;\n                        }\n                    }\n                } else if (ValidationTypes.isAny(expression, \"center\")) {\n                    if (ValidationTypes.isAny(expression, xDir + \" | \" + yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    }\n                }\n            }\n\n            return result;\n        },\n\n        \"<bg-size>\": function(expression){\n            var types   = this,\n                result  = false,\n                numeric = \"<percentage> | <length> | auto\",\n                part,\n                i, len;\n\n            if (ValidationTypes.isAny(expression, \"cover | contain\")) {\n                result = true;\n            } else if (ValidationTypes.isAny(expression, numeric)) {\n                result = true;\n                ValidationTypes.isAny(expression, numeric);\n            }\n\n            return result;\n        },\n\n        \"<repeat-style>\": function(expression){\n            var result  = false,\n                values  = \"repeat | space | round | no-repeat\",\n                part;\n\n            if (expression.hasNext()){\n                part = expression.next();\n\n                if (ValidationTypes.isLiteral(part, \"repeat-x | repeat-y\")) {\n                    result = true;\n                } else if (ValidationTypes.isLiteral(part, values)) {\n                    result = true;\n\n                    if (expression.hasNext() && ValidationTypes.isLiteral(expression.peek(), values)) {\n                        expression.next();\n                    }\n                }\n            }\n\n            return result;\n\n        },\n\n        \"<shadow>\": function(expression) {\n            var result  = false,\n                count   = 0,\n                inset   = false,\n                color   = false,\n                part;\n\n            if (expression.hasNext()) {\n\n                if (ValidationTypes.isAny(expression, \"inset\")){\n                    inset = true;\n                }\n\n                if (ValidationTypes.isAny(expression, \"<color>\")) {\n                    color = true;\n                }\n\n                while (ValidationTypes.isAny(expression, \"<length>\") && count < 4) {\n                    count++;\n                }\n\n\n                if (expression.hasNext()) {\n                    if (!color) {\n                        ValidationTypes.isAny(expression, \"<color>\");\n                    }\n\n                    if (!inset) {\n                        ValidationTypes.isAny(expression, \"inset\");\n                    }\n\n                }\n\n                result = (count >= 2 && count <= 4);\n\n            }\n\n            return result;\n        },\n\n        \"<x-one-radius>\": function(expression) {\n            var result  = false,\n                simple = \"<length> | <percentage> | inherit\";\n\n            if (ValidationTypes.isAny(expression, simple)){\n                result = true;\n                ValidationTypes.isAny(expression, simple);\n            }\n\n            return result;\n        },\n\n        \"<flex>\": function(expression) {\n            var part,\n                result = false;\n            if (ValidationTypes.isAny(expression, \"none | inherit\")) {\n                result = true;\n            } else {\n                if (ValidationTypes.isType(expression, \"<flex-grow>\")) {\n                    if (expression.peek()) {\n                        if (ValidationTypes.isType(expression, \"<flex-shrink>\")) {\n                            if (expression.peek()) {\n                                result = ValidationTypes.isType(expression, \"<flex-basis>\");\n                            } else {\n                                result = true;\n                            }\n                        } else if (ValidationTypes.isType(expression, \"<flex-basis>\")) {\n                            result = expression.peek() === null;\n                        }\n                    } else {\n                        result = true;\n                    }\n                } else if (ValidationTypes.isType(expression, \"<flex-basis>\")) {\n                    result = true;\n                }\n            }\n\n            if (!result) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected (none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]) but found '\" + expression.value.text + \"'.\", part.line, part.col);\n            }\n\n            return result;\n        }\n    }\n};\n\nparserlib.css = {\nColors              :Colors,\nCombinator          :Combinator,\nParser              :Parser,\nPropertyName        :PropertyName,\nPropertyValue       :PropertyValue,\nPropertyValuePart   :PropertyValuePart,\nMediaFeature        :MediaFeature,\nMediaQuery          :MediaQuery,\nSelector            :Selector,\nSelectorPart        :SelectorPart,\nSelectorSubPart     :SelectorSubPart,\nSpecificity         :Specificity,\nTokenStream         :TokenStream,\nTokens              :Tokens,\nValidationError     :ValidationError\n};\n})();\n\n(function(){\nfor(var prop in parserlib){\nexports[prop] = parserlib[prop];\n}\n})();\n\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\nvar util = {\n  isArray: function (ar) {\n    return Array.isArray(ar) || (typeof ar === 'object' && objectToString(ar) === '[object Array]');\n  },\n  isDate: function (d) {\n    return typeof d === 'object' && objectToString(d) === '[object Date]';\n  },\n  isRegExp: function (re) {\n    return typeof re === 'object' && objectToString(re) === '[object RegExp]';\n  },\n  getRegExpFlags: function (re) {\n    var flags = '';\n    re.global && (flags += 'g');\n    re.ignoreCase && (flags += 'i');\n    re.multiline && (flags += 'm');\n    return flags;\n  }\n};\n\n\nif (typeof module === 'object')\n  module.exports = clone;\n\nfunction clone(parent, circular, depth, prototype) {\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n  function _clone(parent, depth) {\n    if (parent === null)\n      return null;\n\n    if (depth == 0)\n      return parent;\n\n    var child;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (util.isArray(parent)) {\n      child = [];\n    } else if (util.isRegExp(parent)) {\n      child = new RegExp(parent.source, util.getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (util.isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      child = new Buffer(parent.length);\n      parent.copy(child);\n      return child;\n    } else {\n      if (typeof prototype == 'undefined') child = Object.create(Object.getPrototypeOf(parent));\n      else child = Object.create(prototype);\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    for (var i in parent) {\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\nclone.clonePrototype = function(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\nvar CSSLint = (function(){\n\n    var rules           = [],\n        formatters      = [],\n        embeddedRuleset = /\\/\\*csslint([^\\*]*)\\*\\//,\n        api             = new parserlib.util.EventTarget();\n\n    api.version = \"@VERSION@\";\n    api.addRule = function(rule){\n        rules.push(rule);\n        rules[rule.id] = rule;\n    };\n    api.clearRules = function(){\n        rules = [];\n    };\n    api.getRules = function(){\n        return [].concat(rules).sort(function(a,b){\n            return a.id > b.id ? 1 : 0;\n        });\n    };\n    api.getRuleset = function() {\n        var ruleset = {},\n            i = 0,\n            len = rules.length;\n\n        while (i < len){\n            ruleset[rules[i++].id] = 1;    //by default, everything is a warning\n        }\n\n        return ruleset;\n    };\n    function applyEmbeddedRuleset(text, ruleset){\n        var valueMap,\n            embedded = text && text.match(embeddedRuleset),\n            rules = embedded && embedded[1];\n\n        if (rules) {\n            valueMap = {\n                \"true\": 2,  // true is error\n                \"\": 1,      // blank is warning\n                \"false\": 0, // false is ignore\n\n                \"2\": 2,     // explicit error\n                \"1\": 1,     // explicit warning\n                \"0\": 0      // explicit ignore\n            };\n\n            rules.toLowerCase().split(\",\").forEach(function(rule){\n                var pair = rule.split(\":\"),\n                    property = pair[0] || \"\",\n                    value = pair[1] || \"\";\n\n                ruleset[property.trim()] = valueMap[value.trim()];\n            });\n        }\n\n        return ruleset;\n    }\n    api.addFormatter = function(formatter) {\n        formatters[formatter.id] = formatter;\n    };\n    api.getFormatter = function(formatId){\n        return formatters[formatId];\n    };\n    api.format = function(results, filename, formatId, options) {\n        var formatter = this.getFormatter(formatId),\n            result = null;\n\n        if (formatter){\n            result = formatter.startFormat();\n            result += formatter.formatResults(results, filename, options || {});\n            result += formatter.endFormat();\n        }\n\n        return result;\n    };\n    api.hasFormat = function(formatId){\n        return formatters.hasOwnProperty(formatId);\n    };\n    api.verify = function(text, ruleset){\n\n        var i = 0,\n            reporter,\n            lines,\n            report,\n            parser = new parserlib.css.Parser({ starHack: true, ieFilters: true,\n                                                underscoreHack: true, strict: false });\n        lines = text.replace(/\\n\\r?/g, \"$split$\").split(\"$split$\");\n\n        if (!ruleset){\n            ruleset = this.getRuleset();\n        }\n\n        if (embeddedRuleset.test(text)){\n            ruleset = clone(ruleset);\n            ruleset = applyEmbeddedRuleset(text, ruleset);\n        }\n\n        reporter = new Reporter(lines, ruleset);\n\n        ruleset.errors = 2;       //always report parsing errors as errors\n        for (i in ruleset){\n            if(ruleset.hasOwnProperty(i) && ruleset[i]){\n                if (rules[i]){\n                    rules[i].init(parser, reporter);\n                }\n            }\n        }\n        try {\n            parser.parse(text);\n        } catch (ex) {\n            reporter.error(\"Fatal error, cannot continue: \" + ex.message, ex.line, ex.col, {});\n        }\n\n        report = {\n            messages    : reporter.messages,\n            stats       : reporter.stats,\n            ruleset     : reporter.ruleset\n        };\n        report.messages.sort(function (a, b){\n            if (a.rollup && !b.rollup){\n                return 1;\n            } else if (!a.rollup && b.rollup){\n                return -1;\n            } else {\n                return a.line - b.line;\n            }\n        });\n\n        return report;\n    };\n\n    return api;\n\n})();\nfunction Reporter(lines, ruleset){\n    this.messages = [];\n    this.stats = [];\n    this.lines = lines;\n    this.ruleset = ruleset;\n}\n\nReporter.prototype = {\n    constructor: Reporter,\n    error: function(message, line, col, rule){\n        this.messages.push({\n            type    : \"error\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule || {}\n        });\n    },\n    warn: function(message, line, col, rule){\n        this.report(message, line, col, rule);\n    },\n    report: function(message, line, col, rule){\n        this.messages.push({\n            type    : this.ruleset[rule.id] === 2 ? \"error\" : \"warning\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n    info: function(message, line, col, rule){\n        this.messages.push({\n            type    : \"info\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n    rollupError: function(message, rule){\n        this.messages.push({\n            type    : \"error\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n    rollupWarn: function(message, rule){\n        this.messages.push({\n            type    : \"warning\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n    stat: function(name, value){\n        this.stats[name] = value;\n    }\n};\nCSSLint._Reporter = Reporter;\nCSSLint.Util = {\n    mix: function(receiver, supplier){\n        var prop;\n\n        for (prop in supplier){\n            if (supplier.hasOwnProperty(prop)){\n                receiver[prop] = supplier[prop];\n            }\n        }\n\n        return prop;\n    },\n    indexOf: function(values, value){\n        if (values.indexOf){\n            return values.indexOf(value);\n        } else {\n            for (var i=0, len=values.length; i < len; i++){\n                if (values[i] === value){\n                    return i;\n                }\n            }\n            return -1;\n        }\n    },\n    forEach: function(values, func) {\n        if (values.forEach){\n            return values.forEach(func);\n        } else {\n            for (var i=0, len=values.length; i < len; i++){\n                func(values[i], i, values);\n            }\n        }\n    }\n};\n\nCSSLint.addRule({\n    id: \"adjoining-classes\",\n    name: \"Disallow adjoining classes\",\n    desc: \"Don't use adjoining classes.\",\n    browsers: \"IE6\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                classCount,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        classCount = 0;\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"class\"){\n                                classCount++;\n                            }\n                            if (classCount > 1){\n                                reporter.report(\"Don't use adjoining classes.\", part.line, part.col, rule);\n                            }\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\nCSSLint.addRule({\n    id: \"box-model\",\n    name: \"Beware of broken box size\",\n    desc: \"Don't use width or height when using padding or border.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            widthProperties = {\n                border: 1,\n                \"border-left\": 1,\n                \"border-right\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1\n            },\n            heightProperties = {\n                border: 1,\n                \"border-bottom\": 1,\n                \"border-top\": 1,\n                padding: 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1\n            },\n            properties,\n            boxSizing = false;\n\n        function startRule(){\n            properties = {};\n            boxSizing = false;\n        }\n\n        function endRule(){\n            var prop, value;\n\n            if (!boxSizing) {\n                if (properties.height){\n                    for (prop in heightProperties){\n                        if (heightProperties.hasOwnProperty(prop) && properties[prop]){\n                            value = properties[prop].value;\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[0].value === 0)){\n                                reporter.report(\"Using height with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n\n                if (properties.width){\n                    for (prop in widthProperties){\n                        if (widthProperties.hasOwnProperty(prop) && properties[prop]){\n                            value = properties[prop].value;\n\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[1].value === 0)){\n                                reporter.report(\"Using width with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (heightProperties[name] || widthProperties[name]){\n                if (!/^0\\S*$/.test(event.value) && !(name === \"border\" && event.value.toString() === \"none\")){\n                    properties[name] = { line: event.property.line, col: event.property.col, value: event.value };\n                }\n            } else {\n                if (/^(width|height)/i.test(name) && /^(length|percentage)/.test(event.value.parts[0].type)){\n                    properties[name] = 1;\n                } else if (name === \"box-sizing\") {\n                    boxSizing = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"box-sizing\",\n    name: \"Disallow use of box-sizing\",\n    desc: \"The box-sizing properties isn't supported in IE6 and IE7.\",\n    browsers: \"IE6, IE7\",\n    tags: [\"Compatibility\"],\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (name === \"box-sizing\"){\n                reporter.report(\"The box-sizing property isn't supported in IE6 and IE7.\", event.line, event.col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"bulletproof-font-face\",\n    name: \"Use the bulletproof @font-face syntax\",\n    desc: \"Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            fontFaceRule = false,\n            firstSrc     = true,\n            ruleFailed    = false,\n            line, col;\n        parser.addListener(\"startfontface\", function(){\n            fontFaceRule = true;\n        });\n\n        parser.addListener(\"property\", function(event){\n            if (!fontFaceRule) {\n                return;\n            }\n\n            var propertyName = event.property.toString().toLowerCase(),\n                value        = event.value.toString();\n            line = event.line;\n            col  = event.col;\n            if (propertyName === \"src\") {\n                var regex = /^\\s?url\\(['\"].+\\.eot\\?.*['\"]\\)\\s*format\\(['\"]embedded-opentype['\"]\\).*$/i;\n                if (!value.match(regex) && firstSrc) {\n                    ruleFailed = true;\n                    firstSrc = false;\n                } else if (value.match(regex) && !firstSrc) {\n                    ruleFailed = false;\n                }\n            }\n\n\n        });\n        parser.addListener(\"endfontface\", function(){\n            fontFaceRule = false;\n\n            if (ruleFailed) {\n                reporter.report(\"@font-face declaration doesn't follow the fontspring bulletproof syntax.\", line, col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"compatible-vendor-prefixes\",\n    name: \"Require compatible vendor prefixes\",\n    desc: \"Include all compatible vendor prefixes to reach a wider range of users.\",\n    browsers: \"All\",\n    init: function (parser, reporter) {\n        var rule = this,\n            compatiblePrefixes,\n            properties,\n            prop,\n            variations,\n            prefixed,\n            i,\n            len,\n            inKeyFrame = false,\n            arrayPush = Array.prototype.push,\n            applyTo = [];\n        compatiblePrefixes = {\n            \"animation\"                  : \"webkit moz\",\n            \"animation-delay\"            : \"webkit moz\",\n            \"animation-direction\"        : \"webkit moz\",\n            \"animation-duration\"         : \"webkit moz\",\n            \"animation-fill-mode\"        : \"webkit moz\",\n            \"animation-iteration-count\"  : \"webkit moz\",\n            \"animation-name\"             : \"webkit moz\",\n            \"animation-play-state\"       : \"webkit moz\",\n            \"animation-timing-function\"  : \"webkit moz\",\n            \"appearance\"                 : \"webkit moz\",\n            \"border-end\"                 : \"webkit moz\",\n            \"border-end-color\"           : \"webkit moz\",\n            \"border-end-style\"           : \"webkit moz\",\n            \"border-end-width\"           : \"webkit moz\",\n            \"border-image\"               : \"webkit moz o\",\n            \"border-radius\"              : \"webkit\",\n            \"border-start\"               : \"webkit moz\",\n            \"border-start-color\"         : \"webkit moz\",\n            \"border-start-style\"         : \"webkit moz\",\n            \"border-start-width\"         : \"webkit moz\",\n            \"box-align\"                  : \"webkit moz ms\",\n            \"box-direction\"              : \"webkit moz ms\",\n            \"box-flex\"                   : \"webkit moz ms\",\n            \"box-lines\"                  : \"webkit ms\",\n            \"box-ordinal-group\"          : \"webkit moz ms\",\n            \"box-orient\"                 : \"webkit moz ms\",\n            \"box-pack\"                   : \"webkit moz ms\",\n            \"box-sizing\"                 : \"webkit moz\",\n            \"box-shadow\"                 : \"webkit moz\",\n            \"column-count\"               : \"webkit moz ms\",\n            \"column-gap\"                 : \"webkit moz ms\",\n            \"column-rule\"                : \"webkit moz ms\",\n            \"column-rule-color\"          : \"webkit moz ms\",\n            \"column-rule-style\"          : \"webkit moz ms\",\n            \"column-rule-width\"          : \"webkit moz ms\",\n            \"column-width\"               : \"webkit moz ms\",\n            \"hyphens\"                    : \"epub moz\",\n            \"line-break\"                 : \"webkit ms\",\n            \"margin-end\"                 : \"webkit moz\",\n            \"margin-start\"               : \"webkit moz\",\n            \"marquee-speed\"              : \"webkit wap\",\n            \"marquee-style\"              : \"webkit wap\",\n            \"padding-end\"                : \"webkit moz\",\n            \"padding-start\"              : \"webkit moz\",\n            \"tab-size\"                   : \"moz o\",\n            \"text-size-adjust\"           : \"webkit ms\",\n            \"transform\"                  : \"webkit moz ms o\",\n            \"transform-origin\"           : \"webkit moz ms o\",\n            \"transition\"                 : \"webkit moz o\",\n            \"transition-delay\"           : \"webkit moz o\",\n            \"transition-duration\"        : \"webkit moz o\",\n            \"transition-property\"        : \"webkit moz o\",\n            \"transition-timing-function\" : \"webkit moz o\",\n            \"user-modify\"                : \"webkit moz\",\n            \"user-select\"                : \"webkit moz ms\",\n            \"word-break\"                 : \"epub ms\",\n            \"writing-mode\"               : \"epub ms\"\n        };\n\n\n        for (prop in compatiblePrefixes) {\n            if (compatiblePrefixes.hasOwnProperty(prop)) {\n                variations = [];\n                prefixed = compatiblePrefixes[prop].split(\" \");\n                for (i = 0, len = prefixed.length; i < len; i++) {\n                    variations.push(\"-\" + prefixed[i] + \"-\" + prop);\n                }\n                compatiblePrefixes[prop] = variations;\n                arrayPush.apply(applyTo, variations);\n            }\n        }\n\n        parser.addListener(\"startrule\", function () {\n            properties = [];\n        });\n\n        parser.addListener(\"startkeyframes\", function (event) {\n            inKeyFrame = event.prefix || true;\n        });\n\n        parser.addListener(\"endkeyframes\", function () {\n            inKeyFrame = false;\n        });\n\n        parser.addListener(\"property\", function (event) {\n            var name = event.property;\n            if (CSSLint.Util.indexOf(applyTo, name.text) > -1) {\n                if (!inKeyFrame || typeof inKeyFrame !== \"string\" ||\n                        name.text.indexOf(\"-\" + inKeyFrame + \"-\") !== 0) {\n                    properties.push(name);\n                }\n            }\n        });\n\n        parser.addListener(\"endrule\", function () {\n            if (!properties.length) {\n                return;\n            }\n\n            var propertyGroups = {},\n                i,\n                len,\n                name,\n                prop,\n                variations,\n                value,\n                full,\n                actual,\n                item,\n                propertiesSpecified;\n\n            for (i = 0, len = properties.length; i < len; i++) {\n                name = properties[i];\n\n                for (prop in compatiblePrefixes) {\n                    if (compatiblePrefixes.hasOwnProperty(prop)) {\n                        variations = compatiblePrefixes[prop];\n                        if (CSSLint.Util.indexOf(variations, name.text) > -1) {\n                            if (!propertyGroups[prop]) {\n                                propertyGroups[prop] = {\n                                    full : variations.slice(0),\n                                    actual : [],\n                                    actualNodes: []\n                                };\n                            }\n                            if (CSSLint.Util.indexOf(propertyGroups[prop].actual, name.text) === -1) {\n                                propertyGroups[prop].actual.push(name.text);\n                                propertyGroups[prop].actualNodes.push(name);\n                            }\n                        }\n                    }\n                }\n            }\n\n            for (prop in propertyGroups) {\n                if (propertyGroups.hasOwnProperty(prop)) {\n                    value = propertyGroups[prop];\n                    full = value.full;\n                    actual = value.actual;\n\n                    if (full.length > actual.length) {\n                        for (i = 0, len = full.length; i < len; i++) {\n                            item = full[i];\n                            if (CSSLint.Util.indexOf(actual, item) === -1) {\n                                propertiesSpecified = (actual.length === 1) ? actual[0] : (actual.length === 2) ? actual.join(\" and \") : actual.join(\", \");\n                                reporter.report(\"The property \" + item + \" is compatible with \" + propertiesSpecified + \" and should be included as well.\", value.actualNodes[0].line, value.actualNodes[0].col, rule);\n                            }\n                        }\n\n                    }\n                }\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"display-property-grouping\",\n    name: \"Require properties appropriate for display\",\n    desc: \"Certain properties shouldn't be used with certain display property values.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        var propertiesToCheck = {\n                display: 1,\n                \"float\": \"none\",\n                height: 1,\n                width: 1,\n                margin: 1,\n                \"margin-left\": 1,\n                \"margin-right\": 1,\n                \"margin-bottom\": 1,\n                \"margin-top\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1,\n                \"vertical-align\": 1\n            },\n            properties;\n\n        function reportProperty(name, display, msg){\n            if (properties[name]){\n                if (typeof propertiesToCheck[name] !== \"string\" || properties[name].value.toLowerCase() !== propertiesToCheck[name]){\n                    reporter.report(msg || name + \" can't be used with display: \" + display + \".\", properties[name].line, properties[name].col, rule);\n                }\n            }\n        }\n\n        function startRule(){\n            properties = {};\n        }\n\n        function endRule(){\n\n            var display = properties.display ? properties.display.value : null;\n            if (display){\n                switch(display){\n\n                    case \"inline\":\n                        reportProperty(\"height\", display);\n                        reportProperty(\"width\", display);\n                        reportProperty(\"margin\", display);\n                        reportProperty(\"margin-top\", display);\n                        reportProperty(\"margin-bottom\", display);\n                        reportProperty(\"float\", display, \"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).\");\n                        break;\n\n                    case \"block\":\n                        reportProperty(\"vertical-align\", display);\n                        break;\n\n                    case \"inline-block\":\n                        reportProperty(\"float\", display);\n                        break;\n\n                    default:\n                        if (display.indexOf(\"table-\") === 0){\n                            reportProperty(\"margin\", display);\n                            reportProperty(\"margin-left\", display);\n                            reportProperty(\"margin-right\", display);\n                            reportProperty(\"margin-top\", display);\n                            reportProperty(\"margin-bottom\", display);\n                            reportProperty(\"float\", display);\n                        }\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startpage\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (propertiesToCheck[name]){\n                properties[name] = { value: event.value.text, line: event.property.line, col: event.property.col };\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endpage\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"duplicate-background-images\",\n    name: \"Disallow duplicate background images\",\n    desc: \"Every background-image should be unique. Use a common class for e.g. sprites.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            stack = {};\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text,\n                value = event.value,\n                i, len;\n\n            if (name.match(/background/i)) {\n                for (i=0, len=value.parts.length; i < len; i++) {\n                    if (value.parts[i].type === \"uri\") {\n                        if (typeof stack[value.parts[i].uri] === \"undefined\") {\n                            stack[value.parts[i].uri] = event;\n                        }\n                        else {\n                            reporter.report(\"Background image '\" + value.parts[i].uri + \"' was used multiple times, first declared at line \" + stack[value.parts[i].uri].line + \", col \" + stack[value.parts[i].uri].col + \".\", event.line, event.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"duplicate-properties\",\n    name: \"Disallow duplicate properties\",\n    desc: \"Duplicate properties must appear one after the other.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            properties,\n            lastProperty;\n\n        function startRule(){\n            properties = {};\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var property = event.property,\n                name = property.text.toLowerCase();\n\n            if (properties[name] && (lastProperty !== name || properties[name] === event.value.text)){\n                reporter.report(\"Duplicate property '\" + event.property + \"' found.\", event.line, event.col, rule);\n            }\n\n            properties[name] = event.value.text;\n            lastProperty = name;\n\n        });\n\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"empty-rules\",\n    name: \"Disallow empty rules\",\n    desc: \"Rules without any properties specified should be removed.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n        parser.addListener(\"startrule\", function(){\n            count=0;\n        });\n\n        parser.addListener(\"property\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var selectors = event.selectors;\n            if (count === 0){\n                reporter.report(\"Rule is empty.\", selectors[0].line, selectors[0].col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"errors\",\n    name: \"Parsing Errors\",\n    desc: \"This rule looks for recoverable syntax errors.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"error\", function(event){\n            reporter.error(event.message, event.line, event.col, rule);\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"fallback-colors\",\n    name: \"Require fallback colors\",\n    desc: \"For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.\",\n    browsers: \"IE6,IE7,IE8\",\n    init: function(parser, reporter){\n        var rule = this,\n            lastProperty,\n            propertiesToCheck = {\n                color: 1,\n                background: 1,\n                \"border-color\": 1,\n                \"border-top-color\": 1,\n                \"border-right-color\": 1,\n                \"border-bottom-color\": 1,\n                \"border-left-color\": 1,\n                border: 1,\n                \"border-top\": 1,\n                \"border-right\": 1,\n                \"border-bottom\": 1,\n                \"border-left\": 1,\n                \"background-color\": 1\n            },\n            properties;\n\n        function startRule(){\n            properties = {};\n            lastProperty = null;\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var property = event.property,\n                name = property.text.toLowerCase(),\n                parts = event.value.parts,\n                i = 0,\n                colorType = \"\",\n                len = parts.length;\n\n            if(propertiesToCheck[name]){\n                while(i < len){\n                    if (parts[i].type === \"color\"){\n                        if (\"alpha\" in parts[i] || \"hue\" in parts[i]){\n\n                            if (/([^\\)]+)\\(/.test(parts[i])){\n                                colorType = RegExp.$1.toUpperCase();\n                            }\n\n                            if (!lastProperty || (lastProperty.property.text.toLowerCase() !== name || lastProperty.colorType !== \"compat\")){\n                                reporter.report(\"Fallback \" + name + \" (hex or RGB) should precede \" + colorType + \" \" + name + \".\", event.line, event.col, rule);\n                            }\n                        } else {\n                            event.colorType = \"compat\";\n                        }\n                    }\n\n                    i++;\n                }\n            }\n\n            lastProperty = event;\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"floats\",\n    name: \"Disallow too many floats\",\n    desc: \"This rule tests if the float property is used too many times\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        var count = 0;\n        parser.addListener(\"property\", function(event){\n            if (event.property.text.toLowerCase() === \"float\" &&\n                    event.value.text.toLowerCase() !== \"none\"){\n                count++;\n            }\n        });\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"floats\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many floats (\" + count + \"), you're probably using them for layout. Consider using a grid system instead.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"font-faces\",\n    name: \"Don't use too many web fonts\",\n    desc: \"Too many different web fonts in the same stylesheet.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n\n        parser.addListener(\"startfontface\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            if (count > 5){\n                reporter.rollupWarn(\"Too many @font-face declarations (\" + count + \").\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"font-sizes\",\n    name: \"Disallow too many font sizes\",\n    desc: \"Checks the number of font-size declarations.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n        parser.addListener(\"property\", function(event){\n            if (event.property.toString() === \"font-size\"){\n                count++;\n            }\n        });\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"font-sizes\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many font-size declarations (\" + count + \"), abstraction needed.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"gradients\",\n    name: \"Require all gradient definitions\",\n    desc: \"When using a vendor-prefixed gradient, make sure to use them all.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            gradients;\n\n        parser.addListener(\"startrule\", function(){\n            gradients = {\n                moz: 0,\n                webkit: 0,\n                oldWebkit: 0,\n                o: 0\n            };\n        });\n\n        parser.addListener(\"property\", function(event){\n\n            if (/\\-(moz|o|webkit)(?:\\-(?:linear|radial))\\-gradient/i.test(event.value)){\n                gradients[RegExp.$1] = 1;\n            } else if (/\\-webkit\\-gradient/i.test(event.value)){\n                gradients.oldWebkit = 1;\n            }\n\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var missing = [];\n\n            if (!gradients.moz){\n                missing.push(\"Firefox 3.6+\");\n            }\n\n            if (!gradients.webkit){\n                missing.push(\"Webkit (Safari 5+, Chrome)\");\n            }\n\n            if (!gradients.oldWebkit){\n                missing.push(\"Old Webkit (Safari 4+, Chrome)\");\n            }\n\n            if (!gradients.o){\n                missing.push(\"Opera 11.1+\");\n            }\n\n            if (missing.length && missing.length < 4){\n                reporter.report(\"Missing vendor-prefixed CSS gradients for \" + missing.join(\", \") + \".\", event.selectors[0].line, event.selectors[0].col, rule);\n            }\n\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"ids\",\n    name: \"Disallow IDs in selectors\",\n    desc: \"Selectors should not contain IDs.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                idCount,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                idCount = 0;\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"id\"){\n                                idCount++;\n                            }\n                        }\n                    }\n                }\n\n                if (idCount === 1){\n                    reporter.report(\"Don't use IDs in selectors.\", selector.line, selector.col, rule);\n                } else if (idCount > 1){\n                    reporter.report(idCount + \" IDs in the selector, really?\", selector.line, selector.col, rule);\n                }\n            }\n\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"import\",\n    name: \"Disallow @import\",\n    desc: \"Don't use @import, use <link> instead.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"import\", function(event){\n            reporter.report(\"@import prevents parallel downloads, use <link> instead.\", event.line, event.col, rule);\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"important\",\n    name: \"Disallow !important\",\n    desc: \"Be careful when using !important declaration\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n        parser.addListener(\"property\", function(event){\n            if (event.important === true){\n                count++;\n                reporter.report(\"Use of !important\", event.line, event.col, rule);\n            }\n        });\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"important\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many !important declarations (\" + count + \"), try to use less than 10 to avoid specificity issues.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"known-properties\",\n    name: \"Require use of known properties\",\n    desc: \"Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"property\", function(event){\n            if (event.invalid) {\n                reporter.report(event.invalid.message, event.line, event.col, rule);\n            }\n\n        });\n    }\n\n});\nCSSLint.addRule({\n    id: \"order-alphabetical\",\n    name: \"Alphabetical order\",\n    desc: \"Assure properties are in alphabetical order\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            properties;\n\n        var startRule = function () {\n            properties = [];\n        };\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text,\n                lowerCasePrefixLessName = name.toLowerCase().replace(/^-.*?-/, \"\");\n\n            properties.push(lowerCasePrefixLessName);\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var currentProperties = properties.join(\",\"),\n                expectedProperties = properties.sort().join(\",\");\n\n            if (currentProperties !== expectedProperties){\n                reporter.report(\"Rule doesn't have all its properties in alphabetical ordered.\", event.line, event.col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"outline-none\",\n    name: \"Disallow outline: none\",\n    desc: \"Use of outline: none or outline: 0 should be limited to :focus rules.\",\n    browsers: \"All\",\n    tags: [\"Accessibility\"],\n    init: function(parser, reporter){\n        var rule = this,\n            lastRule;\n\n        function startRule(event){\n            if (event.selectors){\n                lastRule = {\n                    line: event.line,\n                    col: event.col,\n                    selectors: event.selectors,\n                    propCount: 0,\n                    outline: false\n                };\n            } else {\n                lastRule = null;\n            }\n        }\n\n        function endRule(){\n            if (lastRule){\n                if (lastRule.outline){\n                    if (lastRule.selectors.toString().toLowerCase().indexOf(\":focus\") === -1){\n                        reporter.report(\"Outlines should only be modified using :focus.\", lastRule.line, lastRule.col, rule);\n                    } else if (lastRule.propCount === 1) {\n                        reporter.report(\"Outlines shouldn't be hidden unless other visual changes are made.\", lastRule.line, lastRule.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase(),\n                value = event.value;\n\n            if (lastRule){\n                lastRule.propCount++;\n                if (name === \"outline\" && (value.toString() === \"none\" || value.toString() === \"0\")){\n                    lastRule.outline = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"overqualified-elements\",\n    name: \"Disallow overqualified elements\",\n    desc: \"Don't use classes or IDs with elements (a.foo or a#foo).\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            classes = {};\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (part.elementName && modifier.type === \"id\"){\n                                reporter.report(\"Element (\" + part + \") is overqualified, just use \" + modifier + \" without element name.\", part.line, part.col, rule);\n                            } else if (modifier.type === \"class\"){\n\n                                if (!classes[modifier]){\n                                    classes[modifier] = [];\n                                }\n                                classes[modifier].push({ modifier: modifier, part: part });\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n\n            var prop;\n            for (prop in classes){\n                if (classes.hasOwnProperty(prop)){\n                    if (classes[prop].length === 1 && classes[prop][0].part.elementName){\n                        reporter.report(\"Element (\" + classes[prop][0].part + \") is overqualified, just use \" + classes[prop][0].modifier + \" without element name.\", classes[prop][0].part.line, classes[prop][0].part.col, rule);\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"qualified-headings\",\n    name: \"Disallow qualified headings\",\n    desc: \"Headings should not be qualified (namespaced).\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                i, j;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        if (part.elementName && /h[1-6]/.test(part.elementName.toString()) && j > 0){\n                            reporter.report(\"Heading (\" + part.elementName + \") should not be qualified.\", part.line, part.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"regex-selectors\",\n    name: \"Disallow selectors that look like regexs\",\n    desc: \"Selectors that look like regular expressions are slow and should be avoided.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"attribute\"){\n                                if (/([\\~\\|\\^\\$\\*]=)/.test(modifier)){\n                                    reporter.report(\"Attribute selectors with \" + RegExp.$1 + \" are slow!\", modifier.line, modifier.col, rule);\n                                }\n                            }\n\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"rules-count\",\n    name: \"Rules Count\",\n    desc: \"Track how many rules there are.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var count = 0;\n        parser.addListener(\"startrule\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"rule-count\", count);\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-max-approaching\",\n    name: \"Warn when approaching the 4095 selector limit for IE\",\n    desc: \"Will warn when selector count is >= 3800 selectors.\",\n    browsers: \"IE\",\n    init: function(parser, reporter) {\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count >= 3800) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-max\",\n    name: \"Error when past the 4095 selector limit for IE\",\n    desc: \"Will error when selector count is > 4095.\",\n    browsers: \"IE\",\n    init: function(parser, reporter){\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count > 4095) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-newline\",\n    name: \"Disallow new-line characters in selectors\",\n    desc: \"New-line characters in selectors are usually a forgotten comma and not a descendant combinator.\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        var rule = this;\n\n        function startRule(event) {\n            var i, len, selector, p, n, pLen, part, part2, type, currentLine, nextLine,\n                selectors = event.selectors;\n\n            for (i = 0, len = selectors.length; i < len; i++) {\n                selector = selectors[i];\n                for (p = 0, pLen = selector.parts.length; p < pLen; p++) {\n                    for (n = p + 1; n < pLen; n++) {\n                        part = selector.parts[p];\n                        part2 = selector.parts[n];\n                        type = part.type;\n                        currentLine = part.line;\n                        nextLine = part2.line;\n\n                        if (type === \"descendant\" && nextLine > currentLine) {\n                            reporter.report(\"newline character found in selector (forgot a comma?)\", currentLine, selectors[i].parts[0].col, rule);\n                        }\n                    }\n                }\n\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n\n    }\n});\n\nCSSLint.addRule({\n    id: \"shorthand\",\n    name: \"Require shorthand properties\",\n    desc: \"Use shorthand properties where possible.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            prop, i, len,\n            propertiesToCheck = {},\n            properties,\n            mapping = {\n                \"margin\": [\n                    \"margin-top\",\n                    \"margin-bottom\",\n                    \"margin-left\",\n                    \"margin-right\"\n                ],\n                \"padding\": [\n                    \"padding-top\",\n                    \"padding-bottom\",\n                    \"padding-left\",\n                    \"padding-right\"\n                ]\n            };\n        for (prop in mapping){\n            if (mapping.hasOwnProperty(prop)){\n                for (i=0, len=mapping[prop].length; i < len; i++){\n                    propertiesToCheck[mapping[prop][i]] = prop;\n                }\n            }\n        }\n\n        function startRule(){\n            properties = {};\n        }\n        function endRule(event){\n\n            var prop, i, len, total;\n            for (prop in mapping){\n                if (mapping.hasOwnProperty(prop)){\n                    total=0;\n\n                    for (i=0, len=mapping[prop].length; i < len; i++){\n                        total += properties[mapping[prop][i]] ? 1 : 0;\n                    }\n\n                    if (total === mapping[prop].length){\n                        reporter.report(\"The properties \" + mapping[prop].join(\", \") + \" can be replaced by \" + prop + \".\", event.line, event.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"property\", function(event){\n            var name = event.property.toString().toLowerCase();\n\n            if (propertiesToCheck[name]){\n                properties[name] = 1;\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"star-property-hack\",\n    name: \"Disallow properties with a star prefix\",\n    desc: \"Checks for the star property hack (targets IE6/7)\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"property\", function(event){\n            var property = event.property;\n\n            if (property.hack === \"*\") {\n                reporter.report(\"Property with star prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"text-indent\",\n    name: \"Disallow negative text-indent\",\n    desc: \"Checks for text indent less than -99px\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            textIndent,\n            direction;\n\n\n        function startRule(){\n            textIndent = false;\n            direction = \"inherit\";\n        }\n        function endRule(){\n            if (textIndent && direction !== \"ltr\"){\n                reporter.report(\"Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.\", textIndent.line, textIndent.col, rule);\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"property\", function(event){\n            var name = event.property.toString().toLowerCase(),\n                value = event.value;\n\n            if (name === \"text-indent\" && value.parts[0].value < -99){\n                textIndent = event.property;\n            } else if (name === \"direction\" && value.toString() === \"ltr\"){\n                direction = \"ltr\";\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"underscore-property-hack\",\n    name: \"Disallow properties with an underscore prefix\",\n    desc: \"Checks for the underscore property hack (targets IE6)\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"property\", function(event){\n            var property = event.property;\n\n            if (property.hack === \"_\") {\n                reporter.report(\"Property with underscore prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"unique-headings\",\n    name: \"Headings should only be defined once\",\n    desc: \"Headings should be defined only once.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        var headings = {\n                h1: 0,\n                h2: 0,\n                h3: 0,\n                h4: 0,\n                h5: 0,\n                h6: 0\n            };\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                pseudo,\n                i, j;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                part = selector.parts[selector.parts.length-1];\n\n                if (part.elementName && /(h[1-6])/i.test(part.elementName.toString())){\n\n                    for (j=0; j < part.modifiers.length; j++){\n                        if (part.modifiers[j].type === \"pseudo\"){\n                            pseudo = true;\n                            break;\n                        }\n                    }\n\n                    if (!pseudo){\n                        headings[RegExp.$1]++;\n                        if (headings[RegExp.$1] > 1) {\n                            reporter.report(\"Heading (\" + part.elementName + \") has already been defined.\", part.line, part.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            var prop,\n                messages = [];\n\n            for (prop in headings){\n                if (headings.hasOwnProperty(prop)){\n                    if (headings[prop] > 1){\n                        messages.push(headings[prop] + \" \" + prop + \"s\");\n                    }\n                }\n            }\n\n            if (messages.length){\n                reporter.rollupWarn(\"You have \" + messages.join(\", \") + \" defined in this stylesheet.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"universal-selector\",\n    name: \"Disallow universal selector\",\n    desc: \"The universal selector (*) is known to be slow.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                i;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.elementName === \"*\"){\n                    reporter.report(rule.desc, part.line, part.col, rule);\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"unqualified-attributes\",\n    name: \"Disallow unqualified attribute selectors\",\n    desc: \"Unqualified attribute selectors are known to be slow.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.type === parser.SELECTOR_PART_TYPE){\n                    for (k=0; k < part.modifiers.length; k++){\n                        modifier = part.modifiers[k];\n                        if (modifier.type === \"attribute\" && (!part.elementName || part.elementName === \"*\")){\n                            reporter.report(rule.desc, part.line, part.col, rule);\n                        }\n                    }\n                }\n\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"vendor-prefix\",\n    name: \"Require standard property with vendor prefix\",\n    desc: \"When using a vendor-prefixed property, make sure to include the standard one.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            properties,\n            num,\n            propertiesToCheck = {\n                \"-webkit-border-radius\": \"border-radius\",\n                \"-webkit-border-top-left-radius\": \"border-top-left-radius\",\n                \"-webkit-border-top-right-radius\": \"border-top-right-radius\",\n                \"-webkit-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-webkit-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-o-border-radius\": \"border-radius\",\n                \"-o-border-top-left-radius\": \"border-top-left-radius\",\n                \"-o-border-top-right-radius\": \"border-top-right-radius\",\n                \"-o-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-o-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-moz-border-radius\": \"border-radius\",\n                \"-moz-border-radius-topleft\": \"border-top-left-radius\",\n                \"-moz-border-radius-topright\": \"border-top-right-radius\",\n                \"-moz-border-radius-bottomleft\": \"border-bottom-left-radius\",\n                \"-moz-border-radius-bottomright\": \"border-bottom-right-radius\",\n\n                \"-moz-column-count\": \"column-count\",\n                \"-webkit-column-count\": \"column-count\",\n\n                \"-moz-column-gap\": \"column-gap\",\n                \"-webkit-column-gap\": \"column-gap\",\n\n                \"-moz-column-rule\": \"column-rule\",\n                \"-webkit-column-rule\": \"column-rule\",\n\n                \"-moz-column-rule-style\": \"column-rule-style\",\n                \"-webkit-column-rule-style\": \"column-rule-style\",\n\n                \"-moz-column-rule-color\": \"column-rule-color\",\n                \"-webkit-column-rule-color\": \"column-rule-color\",\n\n                \"-moz-column-rule-width\": \"column-rule-width\",\n                \"-webkit-column-rule-width\": \"column-rule-width\",\n\n                \"-moz-column-width\": \"column-width\",\n                \"-webkit-column-width\": \"column-width\",\n\n                \"-webkit-column-span\": \"column-span\",\n                \"-webkit-columns\": \"columns\",\n\n                \"-moz-box-shadow\": \"box-shadow\",\n                \"-webkit-box-shadow\": \"box-shadow\",\n\n                \"-moz-transform\" : \"transform\",\n                \"-webkit-transform\" : \"transform\",\n                \"-o-transform\" : \"transform\",\n                \"-ms-transform\" : \"transform\",\n\n                \"-moz-transform-origin\" : \"transform-origin\",\n                \"-webkit-transform-origin\" : \"transform-origin\",\n                \"-o-transform-origin\" : \"transform-origin\",\n                \"-ms-transform-origin\" : \"transform-origin\",\n\n                \"-moz-box-sizing\" : \"box-sizing\",\n                \"-webkit-box-sizing\" : \"box-sizing\"\n            };\n        function startRule(){\n            properties = {};\n            num = 1;\n        }\n        function endRule(){\n            var prop,\n                i,\n                len,\n                needed,\n                actual,\n                needsStandard = [];\n\n            for (prop in properties){\n                if (propertiesToCheck[prop]){\n                    needsStandard.push({ actual: prop, needed: propertiesToCheck[prop]});\n                }\n            }\n\n            for (i=0, len=needsStandard.length; i < len; i++){\n                needed = needsStandard[i].needed;\n                actual = needsStandard[i].actual;\n\n                if (!properties[needed]){\n                    reporter.report(\"Missing standard property '\" + needed + \"' to go along with '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                } else {\n                    if (properties[needed][0].pos < properties[actual][0].pos){\n                        reporter.report(\"Standard property '\" + needed + \"' should come after vendor-prefixed property '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                    }\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (!properties[name]){\n                properties[name] = [];\n            }\n\n            properties[name].push({ name: event.property, value : event.value, pos:num++ });\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"zero-units\",\n    name: \"Disallow units for 0 values\",\n    desc: \"You don't need to specify units when a value is 0.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"property\", function(event){\n            var parts = event.value.parts,\n                i = 0,\n                len = parts.length;\n\n            while(i < len){\n                if ((parts[i].units || parts[i].type === \"percentage\") && parts[i].value === 0 && parts[i].type !== \"time\"){\n                    reporter.report(\"Values of 0 shouldn't have units specified.\", parts[i].line, parts[i].col, rule);\n                }\n                i++;\n            }\n\n        });\n\n    }\n\n});\n\n(function() {\n    var xmlEscape = function(str) {\n        if (!str || str.constructor !== String) {\n            return \"\";\n        }\n\n        return str.replace(/[\\\"&><]/g, function(match) {\n            switch (match) {\n                case \"\\\"\":\n                    return \"&quot;\";\n                case \"&\":\n                    return \"&amp;\";\n                case \"<\":\n                    return \"&lt;\";\n                case \">\":\n                    return \"&gt;\";\n            }\n        });\n    };\n\n    CSSLint.addFormatter({\n        id: \"checkstyle-xml\",\n        name: \"Checkstyle XML format\",\n        startFormat: function(){\n            return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><checkstyle>\";\n        },\n        endFormat: function(){\n            return \"</checkstyle>\";\n        },\n        readError: function(filename, message) {\n            return \"<file name=\\\"\" + xmlEscape(filename) + \"\\\"><error line=\\\"0\\\" column=\\\"0\\\" severty=\\\"error\\\" message=\\\"\" + xmlEscape(message) + \"\\\"></error></file>\";\n        },\n        formatResults: function(results, filename/*, options*/) {\n            var messages = results.messages,\n                output = [];\n            var generateSource = function(rule) {\n                if (!rule || !(\"name\" in rule)) {\n                    return \"\";\n                }\n                return \"net.csslint.\" + rule.name.replace(/\\s/g,\"\");\n            };\n\n\n\n            if (messages.length > 0) {\n                output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n                CSSLint.Util.forEach(messages, function (message) {\n                    if (!message.rollup) {\n                        output.push(\"<error line=\\\"\" + message.line + \"\\\" column=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                          \" message=\\\"\" + xmlEscape(message.message) + \"\\\" source=\\\"\" + generateSource(message.rule) +\"\\\"/>\");\n                    }\n                });\n                output.push(\"</file>\");\n            }\n\n            return output.join(\"\");\n        }\n    });\n\n}());\n\nCSSLint.addFormatter({\n    id: \"compact\",\n    name: \"Compact, 'porcelain' format\",\n    startFormat: function() {\n        return \"\";\n    },\n    endFormat: function() {\n        return \"\";\n    },\n    formatResults: function(results, filename, options) {\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n        var capitalize = function(str) {\n            return str.charAt(0).toUpperCase() + str.slice(1);\n        };\n\n        if (messages.length === 0) {\n              return options.quiet ? \"\" : filename + \": Lint Free!\";\n        }\n\n        CSSLint.Util.forEach(messages, function(message) {\n            if (message.rollup) {\n                output += filename + \": \" + capitalize(message.type) + \" - \" + message.message + \"\\n\";\n            } else {\n                output += filename + \": \" + \"line \" + message.line +\n                    \", col \" + message.col + \", \" + capitalize(message.type) + \" - \" + message.message + \" (\" + message.rule.id + \")\\n\";\n            }\n        });\n\n        return output;\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"csslint-xml\",\n    name: \"CSSLint XML format\",\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><csslint>\";\n    },\n    endFormat: function(){\n        return \"</csslint>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n        var messages = results.messages,\n            output = [];\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\\\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    output.push(\"<issue line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"junit-xml\",\n    name: \"JUNIT XML format\",\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><testsuites>\";\n    },\n    endFormat: function() {\n        return \"</testsuites>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n\n        var messages = results.messages,\n            output = [],\n            tests = {\n                \"error\": 0,\n                \"failure\": 0\n            };\n        var generateSource = function(rule) {\n            if (!rule || !(\"name\" in rule)) {\n                return \"\";\n            }\n            return \"net.csslint.\" + rule.name.replace(/\\s/g,\"\");\n        };\n        var escapeSpecialCharacters = function(str) {\n\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n\n            return str.replace(/\\\"/g, \"'\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\n        };\n\n        if (messages.length > 0) {\n\n            messages.forEach(function (message) {\n                var type = message.type === \"warning\" ? \"error\" : message.type;\n                if (!message.rollup) {\n                    output.push(\"<testcase time=\\\"0\\\" name=\\\"\" + generateSource(message.rule) + \"\\\">\");\n                    output.push(\"<\" + type + \" message=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\"><![CDATA[\" + message.line + \":\" + message.col + \":\" + escapeSpecialCharacters(message.evidence)  + \"]]></\" + type + \">\");\n                    output.push(\"</testcase>\");\n\n                    tests[type] += 1;\n\n                }\n\n            });\n\n            output.unshift(\"<testsuite time=\\\"0\\\" tests=\\\"\" + messages.length + \"\\\" skipped=\\\"0\\\" errors=\\\"\" + tests.error + \"\\\" failures=\\\"\" + tests.failure + \"\\\" package=\\\"net.csslint\\\" name=\\\"\" + filename + \"\\\">\");\n            output.push(\"</testsuite>\");\n\n        }\n\n        return output.join(\"\");\n\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"lint-xml\",\n    name: \"Lint XML format\",\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><lint>\";\n    },\n    endFormat: function(){\n        return \"</lint>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n        var messages = results.messages,\n            output = [];\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\\\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    output.push(\"<issue line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"text\",\n    name: \"Plain Text\",\n    startFormat: function() {\n        return \"\";\n    },\n    endFormat: function() {\n        return \"\";\n    },\n    formatResults: function(results, filename, options) {\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n\n        if (messages.length === 0) {\n            return options.quiet ? \"\" : \"\\n\\ncsslint: No errors in \" + filename + \".\";\n        }\n\n        output = \"\\n\\ncsslint: There \";\n        if (messages.length === 1) {\n            output += \"is 1 problem\";\n        } else {\n            output += \"are \" + messages.length  +  \" problems\";\n        }\n        output += \" in \" + filename + \".\";\n\n        var pos = filename.lastIndexOf(\"/\"),\n            shortFilename = filename;\n\n        if (pos === -1){\n            pos = filename.lastIndexOf(\"\\\\\");\n        }\n        if (pos > -1){\n            shortFilename = filename.substring(pos+1);\n        }\n\n        CSSLint.Util.forEach(messages, function (message, i) {\n            output = output + \"\\n\\n\" + shortFilename;\n            if (message.rollup) {\n                output += \"\\n\" + (i+1) + \": \" + message.type;\n                output += \"\\n\" + message.message;\n            } else {\n                output += \"\\n\" + (i+1) + \": \" + message.type + \" at line \" + message.line + \", col \" + message.col;\n                output += \"\\n\" + message.message;\n                output += \"\\n\" + message.evidence;\n            }\n        });\n\n        return output;\n    }\n});\n\nmodule.exports.CSSLint = CSSLint;\n\n});\n\ndefine(\"ace/mode/css_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar CSSLint = require(\"./css/csslint\").CSSLint;\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.ruleset = null;\n    this.setDisabledRules(\"ids|order-alphabetical\");\n    this.setInfoRules(\n      \"adjoining-classes|qualified-headings|zero-units|gradients|\" +\n      \"import|outline-none|vendor-prefix\"\n    );\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n    this.setInfoRules = function(ruleNames) {\n        if (typeof ruleNames == \"string\")\n            ruleNames = ruleNames.split(\"|\");\n        this.infoRules = lang.arrayToMap(ruleNames);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.setDisabledRules = function(ruleNames) {\n        if (!ruleNames) {\n            this.ruleset = null;\n        } else {\n            if (typeof ruleNames == \"string\")\n                ruleNames = ruleNames.split(\"|\");\n            var all = {};\n\n            CSSLint.getRules().forEach(function(x){\n                all[x.id] = true;\n            });\n            ruleNames.forEach(function(x) {\n                delete all[x];\n            });\n            \n            this.ruleset = all;\n        }\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n        var infoRules = this.infoRules;\n\n        var result = CSSLint.verify(value, this.ruleset);\n        this.sender.emit(\"annotate\", result.messages.map(function(msg) {\n            return {\n                row: msg.line - 1,\n                column: msg.col - 1,\n                text: msg.message,\n                type: infoRules[msg.rule.id] ? \"info\" : msg.type,\n                rule: msg.rule.name\n            };\n        }));\n    };\n\n}).call(Worker.prototype);\n\n});\n\ndefine(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src/worker-html.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\ndefine(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\ndefine(\"ace/mode/html/saxparser\",[], function(require, exports, module) {\nmodule.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({\n1:[function(_dereq_,module,exports){\nfunction isScopeMarker(node) {\n\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn node.localName === \"applet\"\n\t\t\t|| node.localName === \"caption\"\n\t\t\t|| node.localName === \"marquee\"\n\t\t\t|| node.localName === \"object\"\n\t\t\t|| node.localName === \"table\"\n\t\t\t|| node.localName === \"td\"\n\t\t\t|| node.localName === \"th\";\n\t}\n\tif (node.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\treturn node.localName === \"mi\"\n\t\t\t|| node.localName === \"mo\"\n\t\t\t|| node.localName === \"mn\"\n\t\t\t|| node.localName === \"ms\"\n\t\t\t|| node.localName === \"mtext\"\n\t\t\t|| node.localName === \"annotation-xml\";\n\t}\n\tif (node.namespaceURI === \"http://www.w3.org/2000/svg\") {\n\t\treturn node.localName === \"foreignObject\"\n\t\t\t|| node.localName === \"desc\"\n\t\t\t|| node.localName === \"title\";\n\t}\n}\n\nfunction isListItemScopeMarker(node) {\n\treturn isScopeMarker(node)\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ol')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ul');\n}\n\nfunction isTableScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'table')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isTableBodyScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tbody')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tfoot')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'thead')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isTableRowScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tr')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isButtonScopeMarker(node) {\n\treturn isScopeMarker(node)\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'button');\n}\n\nfunction isSelectScopeMarker(node) {\n\treturn !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'optgroup')\n\t\t&& !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'option');\n}\nfunction ElementStack() {\n\tthis.elements = [];\n\tthis.rootNode = null;\n\tthis.headElement = null;\n\tthis.bodyElement = null;\n}\nElementStack.prototype._inScope = function(localName, isMarker) {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.localName === localName)\n\t\t\treturn true;\n\t\tif (isMarker(node))\n\t\t\treturn false;\n\t}\n};\nElementStack.prototype.push = function(item) {\n\tthis.elements.push(item);\n};\nElementStack.prototype.pushHtmlElement = function(item) {\n\tthis.rootNode = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pushHeadElement = function(item) {\n\tthis.headElement = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pushBodyElement = function(item) {\n\tthis.bodyElement = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pop = function() {\n\treturn this.elements.pop();\n};\nElementStack.prototype.remove = function(item) {\n\tthis.elements.splice(this.elements.indexOf(item), 1);\n};\nElementStack.prototype.popUntilPopped = function(localName) {\n\tvar element;\n\tdo {\n\t\telement = this.pop();\n\t} while (element.localName != localName);\n};\n\nElementStack.prototype.popUntilTableScopeMarker = function() {\n\twhile (!isTableScopeMarker(this.top))\n\t\tthis.pop();\n};\n\nElementStack.prototype.popUntilTableBodyScopeMarker = function() {\n\twhile (!isTableBodyScopeMarker(this.top))\n\t\tthis.pop();\n};\n\nElementStack.prototype.popUntilTableRowScopeMarker = function() {\n\twhile (!isTableRowScopeMarker(this.top))\n\t\tthis.pop();\n};\nElementStack.prototype.item = function(index) {\n\treturn this.elements[index];\n};\nElementStack.prototype.contains = function(element) {\n\treturn this.elements.indexOf(element) !== -1;\n};\nElementStack.prototype.inScope = function(localName) {\n\treturn this._inScope(localName, isScopeMarker);\n};\nElementStack.prototype.inListItemScope = function(localName) {\n\treturn this._inScope(localName, isListItemScopeMarker);\n};\nElementStack.prototype.inTableScope = function(localName) {\n\treturn this._inScope(localName, isTableScopeMarker);\n};\nElementStack.prototype.inButtonScope = function(localName) {\n\treturn this._inScope(localName, isButtonScopeMarker);\n};\nElementStack.prototype.inSelectScope = function(localName) {\n\treturn this._inScope(localName, isSelectScopeMarker);\n};\nElementStack.prototype.hasNumberedHeaderElementInScope = function() {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.isNumberedHeader())\n\t\t\treturn true;\n\t\tif (isScopeMarker(node))\n\t\t\treturn false;\n\t}\n};\nElementStack.prototype.furthestBlockForFormattingElement = function(element) {\n\tvar furthestBlock = null;\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.node === element)\n\t\t\tbreak;\n\t\tif (node.isSpecial())\n\t\t\tfurthestBlock = node;\n\t}\n    return furthestBlock;\n};\nElementStack.prototype.findIndex = function(localName) {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tif (this.elements[i].localName == localName)\n\t\t\treturn i;\n\t}\n    return -1;\n};\n\nElementStack.prototype.remove_openElements_until = function(callback) {\n\tvar finished = false;\n\tvar element;\n\twhile (!finished) {\n\t\telement = this.elements.pop();\n\t\tfinished = callback(element);\n\t}\n\treturn element;\n};\n\nObject.defineProperty(ElementStack.prototype, 'top', {\n\tget: function() {\n\t\treturn this.elements[this.elements.length - 1];\n\t}\n});\n\nObject.defineProperty(ElementStack.prototype, 'length', {\n\tget: function() {\n\t\treturn this.elements.length;\n\t}\n});\n\nexports.ElementStack = ElementStack;\n\n},\n{}],\n2:[function(_dereq_,module,exports){\nvar entities  = _dereq_('html5-entities');\nvar InputStream = _dereq_('./InputStream').InputStream;\n\nvar namedEntityPrefixes = {};\nObject.keys(entities).forEach(function (entityKey) {\n\tfor (var i = 0; i < entityKey.length; i++) {\n\t\tnamedEntityPrefixes[entityKey.substring(0, i + 1)] = true;\n\t}\n});\n\nfunction isAlphaNumeric(c) {\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n}\n\nfunction isHexDigit(c) {\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');\n}\n\nfunction isDecimalDigit(c) {\n\treturn (c >= '0' && c <= '9');\n}\n\nvar EntityParser = {};\n\nEntityParser.consumeEntity = function(buffer, tokenizer, additionalAllowedCharacter) {\n\tvar decodedCharacter = '';\n\tvar consumedCharacters = '';\n\tvar ch = buffer.char();\n\tif (ch === InputStream.EOF)\n\t\treturn false;\n\tconsumedCharacters += ch;\n\tif (ch == '\\t' || ch == '\\n' || ch == '\\v' || ch == ' ' || ch == '<' || ch == '&') {\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n\tif (additionalAllowedCharacter === ch) {\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n\tif (ch == '#') {\n\t\tch = buffer.shift(1);\n\t\tif (ch === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\n\t\t\tbuffer.unget(consumedCharacters);\n\t\t\treturn false;\n\t\t}\n\t\tconsumedCharacters += ch;\n\t\tvar radix = 10;\n\t\tvar isDigit = isDecimalDigit;\n\t\tif (ch == 'x' || ch == 'X') {\n\t\t\tradix = 16;\n\t\t\tisDigit = isHexDigit;\n\t\t\tch = buffer.shift(1);\n\t\t\tif (ch === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\n\t\t\t\tbuffer.unget(consumedCharacters);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconsumedCharacters += ch;\n\t\t}\n\t\tif (isDigit(ch)) {\n\t\t\tvar code = '';\n\t\t\twhile (ch !== InputStream.EOF && isDigit(ch)) {\n\t\t\t\tcode += ch;\n\t\t\t\tch = buffer.char();\n\t\t\t}\n\t\t\tcode = parseInt(code, radix);\n\t\t\tvar replacement = this.replaceEntityNumbers(code);\n\t\t\tif (replacement) {\n\t\t\t\ttokenizer._parseError(\"invalid-numeric-entity-replaced\");\n\t\t\t\tcode = replacement;\n\t\t\t}\n\t\t\tif (code > 0xFFFF && code <= 0x10FFFF) {\n\t\t        code -= 0x10000;\n\t\t        var first = ((0xffc00 & code) >> 10) + 0xD800;\n\t\t        var second = (0x3ff & code) + 0xDC00;\n\t\t\t\tdecodedCharacter = String.fromCharCode(first, second);\n\t\t\t} else\n\t\t\t\tdecodedCharacter = String.fromCharCode(code);\n\t\t\tif (ch !== ';') {\n\t\t\t\ttokenizer._parseError(\"numeric-entity-without-semicolon\");\n\t\t\t\tbuffer.unget(ch);\n\t\t\t}\n\t\t\treturn decodedCharacter;\n\t\t}\n\t\tbuffer.unget(consumedCharacters);\n\t\ttokenizer._parseError(\"expected-numeric-entity\");\n\t\treturn false;\n\t}\n\tif ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {\n\t\tvar mostRecentMatch = '';\n\t\twhile (namedEntityPrefixes[consumedCharacters]) {\n\t\t\tif (entities[consumedCharacters]) {\n\t\t\t\tmostRecentMatch = consumedCharacters;\n\t\t\t}\n\t\t\tif (ch == ';')\n\t\t\t\tbreak;\n\t\t\tch = buffer.char();\n\t\t\tif (ch === InputStream.EOF)\n\t\t\t\tbreak;\n\t\t\tconsumedCharacters += ch;\n\t\t}\n\t\tif (!mostRecentMatch) {\n\t\t\ttokenizer._parseError(\"expected-named-entity\");\n\t\t\tbuffer.unget(consumedCharacters);\n\t\t\treturn false;\n\t\t}\n\t\tdecodedCharacter = entities[mostRecentMatch];\n\t\tif (ch === ';' || !additionalAllowedCharacter || !(isAlphaNumeric(ch) || ch === '=')) {\n\t\t\tif (consumedCharacters.length > mostRecentMatch.length) {\n\t\t\t\tbuffer.unget(consumedCharacters.substring(mostRecentMatch.length));\n\t\t\t}\n\t\t\tif (ch !== ';') {\n\t\t\t\ttokenizer._parseError(\"named-entity-without-semicolon\");\n\t\t\t}\n\t\t\treturn decodedCharacter;\n\t\t}\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n};\n\nEntityParser.replaceEntityNumbers = function(c) {\n\tswitch(c) {\n\t\tcase 0x00: return 0xFFFD; // REPLACEMENT CHARACTER\n\t\tcase 0x13: return 0x0010; // Carriage return\n\t\tcase 0x80: return 0x20AC; // EURO SIGN\n\t\tcase 0x81: return 0x0081; // <control>\n\t\tcase 0x82: return 0x201A; // SINGLE LOW-9 QUOTATION MARK\n\t\tcase 0x83: return 0x0192; // LATIN SMALL LETTER F WITH HOOK\n\t\tcase 0x84: return 0x201E; // DOUBLE LOW-9 QUOTATION MARK\n\t\tcase 0x85: return 0x2026; // HORIZONTAL ELLIPSIS\n\t\tcase 0x86: return 0x2020; // DAGGER\n\t\tcase 0x87: return 0x2021; // DOUBLE DAGGER\n\t\tcase 0x88: return 0x02C6; // MODIFIER LETTER CIRCUMFLEX ACCENT\n\t\tcase 0x89: return 0x2030; // PER MILLE SIGN\n\t\tcase 0x8A: return 0x0160; // LATIN CAPITAL LETTER S WITH CARON\n\t\tcase 0x8B: return 0x2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n\t\tcase 0x8C: return 0x0152; // LATIN CAPITAL LIGATURE OE\n\t\tcase 0x8D: return 0x008D; // <control>\n\t\tcase 0x8E: return 0x017D; // LATIN CAPITAL LETTER Z WITH CARON\n\t\tcase 0x8F: return 0x008F; // <control>\n\t\tcase 0x90: return 0x0090; // <control>\n\t\tcase 0x91: return 0x2018; // LEFT SINGLE QUOTATION MARK\n\t\tcase 0x92: return 0x2019; // RIGHT SINGLE QUOTATION MARK\n\t\tcase 0x93: return 0x201C; // LEFT DOUBLE QUOTATION MARK\n\t\tcase 0x94: return 0x201D; // RIGHT DOUBLE QUOTATION MARK\n\t\tcase 0x95: return 0x2022; // BULLET\n\t\tcase 0x96: return 0x2013; // EN DASH\n\t\tcase 0x97: return 0x2014; // EM DASH\n\t\tcase 0x98: return 0x02DC; // SMALL TILDE\n\t\tcase 0x99: return 0x2122; // TRADE MARK SIGN\n\t\tcase 0x9A: return 0x0161; // LATIN SMALL LETTER S WITH CARON\n\t\tcase 0x9B: return 0x203A; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n\t\tcase 0x9C: return 0x0153; // LATIN SMALL LIGATURE OE\n\t\tcase 0x9D: return 0x009D; // <control>\n\t\tcase 0x9E: return 0x017E; // LATIN SMALL LETTER Z WITH CARON\n\t\tcase 0x9F: return 0x0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS\n\t\tdefault:\n\t\t\tif ((c >= 0xD800 && c <= 0xDFFF) || c > 0x10FFFF) {\n\t\t\t\treturn 0xFFFD;\n\t\t\t} else if ((c >= 0x0001 && c <= 0x0008) || (c >= 0x000E && c <= 0x001F) ||\n\t\t\t\t(c >= 0x007F && c <= 0x009F) || (c >= 0xFDD0 && c <= 0xFDEF) ||\n\t\t\t\tc == 0x000B || c == 0xFFFE || c == 0x1FFFE || c == 0x2FFFFE ||\n\t\t\t\tc == 0x2FFFF || c == 0x3FFFE || c == 0x3FFFF || c == 0x4FFFE ||\n\t\t\t\tc == 0x4FFFF || c == 0x5FFFE || c == 0x5FFFF || c == 0x6FFFE ||\n\t\t\t\tc == 0x6FFFF || c == 0x7FFFE || c == 0x7FFFF || c == 0x8FFFE ||\n\t\t\t\tc == 0x8FFFF || c == 0x9FFFE || c == 0x9FFFF || c == 0xAFFFE ||\n\t\t\t\tc == 0xAFFFF || c == 0xBFFFE || c == 0xBFFFF || c == 0xCFFFE ||\n\t\t\t\tc == 0xCFFFF || c == 0xDFFFE || c == 0xDFFFF || c == 0xEFFFE ||\n\t\t\t\tc == 0xEFFFF || c == 0xFFFFE || c == 0xFFFFF || c == 0x10FFFE ||\n\t\t\t\tc == 0x10FFFF) {\n\t\t\t\treturn c;\n\t\t\t}\n\t}\n};\n\nexports.EntityParser = EntityParser;\n\n},\n{\"./InputStream\":3,\"html5-entities\":12}],\n3:[function(_dereq_,module,exports){\nfunction InputStream() {\n\tthis.data = '';\n\tthis.start = 0;\n\tthis.committed = 0;\n\tthis.eof = false;\n\tthis.lastLocation = {line: 0, column: 0};\n}\n\nInputStream.EOF = -1;\n\nInputStream.DRAIN = -2;\n\nInputStream.prototype = {\n\tslice: function() {\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\treturn this.data.slice(this.start, this.data.length);\n\t},\n\tchar: function() {\n\t\tif(!this.eof && this.start >= this.data.length - 1) throw InputStream.DRAIN;\n\t\tif(this.start >= this.data.length) {\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\tvar ch = this.data[this.start++];\n\t\tif (ch === '\\r')\n\t\t\tch = '\\n';\n\t\treturn ch;\n\t},\n\tadvance: function(amount) {\n\t\tthis.start += amount;\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t} else {\n\t\t\tif(this.committed > this.data.length / 2) {\n\t\t\t\tthis.lastLocation = this.location();\n\t\t\t\tthis.data = this.data.slice(this.committed);\n\t\t\t\tthis.start = this.start - this.committed;\n\t\t\t\tthis.committed = 0;\n\t\t\t}\n\t\t}\n\t},\n\tmatchWhile: function(re) {\n\t\tif(this.eof && this.start >= this.data.length ) return '';\n\t\tvar r = new RegExp(\"^\"+re+\"+\");\n\t\tvar m = r.exec(this.slice());\n\t\tif(m) {\n\t\t\tif(!this.eof && m[0].length == this.data.length - this.start) throw InputStream.DRAIN;\n\t\t\tthis.advance(m[0].length);\n\t\t\treturn m[0];\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t},\n\tmatchUntil: function(re) {\n\t\tvar m, s;\n\t\ts = this.slice();\n\t\tif(s === InputStream.EOF) {\n\t\t\treturn '';\n\t\t} else if(m = new RegExp(re + (this.eof ? \"|$\" : \"\")).exec(s)) {\n\t\t\tvar t = this.data.slice(this.start, this.start + m.index);\n\t\t\tthis.advance(m.index);\n\t\t\treturn t.replace(/\\r/g, '\\n').replace(/\\n{2,}/g, '\\n');\n\t\t} else {\n\t\t\tthrow InputStream.DRAIN;\n\t\t}\n\t},\n\tappend: function(data) {\n\t\tthis.data += data;\n\t},\n\tshift: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\tvar d = this.data.slice(this.start, this.start + n).toString();\n\t\tthis.advance(Math.min(n, this.data.length - this.start));\n\t\treturn d;\n\t},\n\tpeek: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\treturn this.data.slice(this.start, Math.min(this.start + n, this.data.length)).toString();\n\t},\n\tlength: function() {\n\t\treturn this.data.length - this.start - 1;\n\t},\n\tunget: function(d) {\n\t\tif(d === InputStream.EOF) return;\n\t\tthis.start -= (d.length);\n\t},\n\tundo: function() {\n\t\tthis.start = this.committed;\n\t},\n\tcommit: function() {\n\t\tthis.committed = this.start;\n\t},\n\tlocation: function() {\n\t\tvar lastLine = this.lastLocation.line;\n\t\tvar lastColumn = this.lastLocation.column;\n\t\tvar read = this.data.slice(0, this.committed);\n\t\tvar newlines = read.match(/\\n/g);\n\t\tvar line = newlines ? lastLine + newlines.length : lastLine;\n\t\tvar column = newlines ? read.length - read.lastIndexOf('\\n') - 1 : lastColumn + read.length;\n\t\treturn {line: line, column: column};\n\t}\n};\n\nexports.InputStream = InputStream;\n\n},\n{}],\n4:[function(_dereq_,module,exports){\nvar SpecialElements = {\n\t\"http://www.w3.org/1999/xhtml\": [\n\t\t'address',\n\t\t'applet',\n\t\t'area',\n\t\t'article',\n\t\t'aside',\n\t\t'base',\n\t\t'basefont',\n\t\t'bgsound',\n\t\t'blockquote',\n\t\t'body',\n\t\t'br',\n\t\t'button',\n\t\t'caption',\n\t\t'center',\n\t\t'col',\n\t\t'colgroup',\n\t\t'dd',\n\t\t'details',\n\t\t'dir',\n\t\t'div',\n\t\t'dl',\n\t\t'dt',\n\t\t'embed',\n\t\t'fieldset',\n\t\t'figcaption',\n\t\t'figure',\n\t\t'footer',\n\t\t'form',\n\t\t'frame',\n\t\t'frameset',\n\t\t'h1',\n\t\t'h2',\n\t\t'h3',\n\t\t'h4',\n\t\t'h5',\n\t\t'h6',\n\t\t'head',\n\t\t'header',\n\t\t'hgroup',\n\t\t'hr',\n\t\t'html',\n\t\t'iframe',\n\t\t'img',\n\t\t'input',\n\t\t'isindex',\n\t\t'li',\n\t\t'link',\n\t\t'listing',\n\t\t'main',\n\t\t'marquee',\n\t\t'menu',\n\t\t'menuitem',\n\t\t'meta',\n\t\t'nav',\n\t\t'noembed',\n\t\t'noframes',\n\t\t'noscript',\n\t\t'object',\n\t\t'ol',\n\t\t'p',\n\t\t'param',\n\t\t'plaintext',\n\t\t'pre',\n\t\t'script',\n\t\t'section',\n\t\t'select',\n\t\t'source',\n\t\t'style',\n\t\t'summary',\n\t\t'table',\n\t\t'tbody',\n\t\t'td',\n\t\t'textarea',\n\t\t'tfoot',\n\t\t'th',\n\t\t'thead',\n\t\t'title',\n\t\t'tr',\n\t\t'track',\n\t\t'ul',\n\t\t'wbr',\n\t\t'xmp'\n\t],\n\t\"http://www.w3.org/1998/Math/MathML\": [\n\t\t'mi',\n\t\t'mo',\n\t\t'mn',\n\t\t'ms',\n\t\t'mtext',\n\t\t'annotation-xml'\n\t],\n\t\"http://www.w3.org/2000/svg\": [\n\t\t'foreignObject',\n\t\t'desc',\n\t\t'title'\n\t]\n};\n\n\nfunction StackItem(namespaceURI, localName, attributes, node) {\n\tthis.localName = localName;\n\tthis.namespaceURI = namespaceURI;\n\tthis.attributes = attributes;\n\tthis.node = node;\n}\nStackItem.prototype.isSpecial = function() {\n\treturn this.namespaceURI in SpecialElements &&\n\t\tSpecialElements[this.namespaceURI].indexOf(this.localName) > -1;\n};\n\nStackItem.prototype.isFosterParenting = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn this.localName === 'table' ||\n\t\t\tthis.localName === 'tbody' ||\n\t\t\tthis.localName === 'tfoot' ||\n\t\t\tthis.localName === 'thead' ||\n\t\t\tthis.localName === 'tr';\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isNumberedHeader = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn this.localName === 'h1' ||\n\t\t\tthis.localName === 'h2' ||\n\t\t\tthis.localName === 'h3' ||\n\t\t\tthis.localName === 'h4' ||\n\t\t\tthis.localName === 'h5' ||\n\t\t\tthis.localName === 'h6';\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isForeign = function() {\n\treturn this.namespaceURI != \"http://www.w3.org/1999/xhtml\";\n};\n\nfunction getAttribute(item, name) {\n\tfor (var i = 0; i < item.attributes.length; i++) {\n\t\tif (item.attributes[i].nodeName == name)\n\t\t\treturn item.attributes[i].nodeValue;\n\t}\n\treturn null;\n}\n\nStackItem.prototype.isHtmlIntegrationPoint = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\tif (this.localName !== \"annotation-xml\")\n\t\t\treturn false;\n\t\tvar encoding = getAttribute(this, 'encoding');\n\t\tif (!encoding)\n\t\t\treturn false;\n\t\tencoding = encoding.toLowerCase();\n\t\treturn encoding === \"text/html\" || encoding === \"application/xhtml+xml\";\n\t}\n\tif (this.namespaceURI === \"http://www.w3.org/2000/svg\") {\n\t\treturn this.localName === \"foreignObject\"\n\t\t\t|| this.localName === \"desc\"\n\t\t\t|| this.localName === \"title\";\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isMathMLTextIntegrationPoint = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\treturn this.localName === \"mi\"\n\t\t\t|| this.localName === \"mo\"\n\t\t\t|| this.localName === \"mn\"\n\t\t\t|| this.localName === \"ms\"\n\t\t\t|| this.localName === \"mtext\";\n\t}\n\treturn false;\n};\n\nexports.StackItem = StackItem;\n\n},\n{}],\n5:[function(_dereq_,module,exports){\nvar InputStream = _dereq_('./InputStream').InputStream;\nvar EntityParser = _dereq_('./EntityParser').EntityParser;\n\nfunction isWhitespace(c){\n\treturn c === \" \" || c === \"\\n\" || c === \"\\t\" || c === \"\\r\" || c === \"\\f\";\n}\n\nfunction isAlpha(c) {\n\treturn (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');\n}\nfunction Tokenizer(tokenHandler) {\n\tthis._tokenHandler = tokenHandler;\n\tthis._state = Tokenizer.DATA;\n\tthis._inputStream = new InputStream();\n\tthis._currentToken = null;\n\tthis._temporaryBuffer = '';\n\tthis._additionalAllowedCharacter = '';\n}\n\nTokenizer.prototype._parseError = function(code, args) {\n\tthis._tokenHandler.parseError(code, args);\n};\n\nTokenizer.prototype._emitToken = function(token) {\n\tif (token.type === 'StartTag') {\n\t\tfor (var i = 1; i < token.data.length; i++) {\n\t\t\tif (!token.data[i].nodeName)\n\t\t\t\ttoken.data.splice(i--, 1);\n\t\t}\n\t} else if (token.type === 'EndTag') {\n\t\tif (token.selfClosing) {\n\t\t\tthis._parseError('self-closing-flag-on-end-tag');\n\t\t}\n\t\tif (token.data.length !== 0) {\n\t\t\tthis._parseError('attributes-in-end-tag');\n\t\t}\n\t}\n\tthis._tokenHandler.processToken(token);\n\tif (token.type === 'StartTag' && token.selfClosing && !this._tokenHandler.isSelfClosingFlagAcknowledged()) {\n\t\tthis._parseError('non-void-element-with-trailing-solidus', {name: token.name});\n\t}\n};\n\nTokenizer.prototype._emitCurrentToken = function() {\n\tthis._state = Tokenizer.DATA;\n\tthis._emitToken(this._currentToken);\n};\n\nTokenizer.prototype._currentAttribute = function() {\n\treturn this._currentToken.data[this._currentToken.data.length - 1];\n};\n\nTokenizer.prototype.setState = function(state) {\n\tthis._state = state;\n};\n\nTokenizer.prototype.tokenize = function(source) {\n\tTokenizer.DATA = data_state;\n\tTokenizer.RCDATA = rcdata_state;\n\tTokenizer.RAWTEXT = rawtext_state;\n\tTokenizer.SCRIPT_DATA = script_data_state;\n\tTokenizer.PLAINTEXT = plaintext_state;\n\n\n\tthis._state = Tokenizer.DATA;\n\n\tthis._inputStream.append(source);\n\n\tthis._tokenHandler.startTokenization(this);\n\n\tthis._inputStream.eof = true;\n\n\tvar tokenizer = this;\n\n\twhile (this._state.call(this, this._inputStream));\n\n\n\tfunction data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(tag_open_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_data_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(data_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rcdata_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_rcdata_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rcdata_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_rcdata_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(rcdata_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rawtext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rawtext_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction plaintext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\n\tfunction script_data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rcdata_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rcdata_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rawtext_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rawtext_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_end_tag_open_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<!'});\n\t\t\ttokenizer.setState(script_data_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(script_data_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escape_start_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil('<|-|\\u0000');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_less_then_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_open_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<' + data});\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_double_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' &&  appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\tbuffer.commit();\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '/'});\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_double_escape_end_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"bare-less-than-sign-at-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'StartTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer.setState(markup_declaration_open_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(close_tag_open_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-right-bracket\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<>\"});\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '?') {\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-question-mark\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"expected-tag-name\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<\"});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction close_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-right-bracket\");\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-char\", {data: data}); // param 1 is datavars:\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-tag-name');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.name += data.toLowerCase();\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.name += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.name += data;\n\t\t}\n\t\tbuffer.commit();\n\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-name-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data.toLowerCase(), nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '=' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tvar leavingThisState = true;\n\t\tvar shouldEmit = false;\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-name\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\tshouldEmit = true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentAttribute().nodeName += data.toLowerCase();\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '>') {\n\t\t\tshouldEmit = true;\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeName += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t}\n\n\t\tif (leavingThisState) {\n\t\t\tvar attributes = tokenizer._currentToken.data;\n\t\t\tvar currentAttribute = attributes[attributes.length - 1];\n\t\t\tfor (var i = attributes.length - 2; i >= 0; i--) {\n\t\t\t\tif (currentAttribute.nodeName === attributes[i].nodeName) {\n\t\t\t\t\ttokenizer._parseError(\"duplicate-attribute\", {name: currentAttribute.nodeName});\n\t\t\t\t\tcurrentAttribute.nodeName = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldEmit)\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-end-of-tag-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-after-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t\tbuffer.unget(data);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-right-bracket\");\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '=' || data === '<' || data === '`') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-double-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = '\"';\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar s = buffer.matchUntil('[\\0\"&]');\n\t\t\tdata = data + s;\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-single-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \"'\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data + buffer.matchUntil(\"\\u0000|['&]\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_unquoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \">\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"' || data === \"'\" || data === '=' || data === '`' || data === '<') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\tbuffer.commit();\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar o = buffer.matchUntil(\"\\u0000|[\"+ \"\\t\\n\\v\\f\\x20\\r\" + \"&<>\\\"'=`\" +\"]\");\n\t\t\tif (o === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-attribute-value-no-quotes\");\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t}\n\t\t\tbuffer.commit();\n\t\t\ttokenizer._currentAttribute().nodeValue += data + o;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_attribute_value_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer, this._additionalAllowedCharacter);\n\t\tthis._currentAttribute().nodeValue += character || '&';\n\t\tif (this._additionalAllowedCharacter === '\"')\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '\\'')\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '>')\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction self_closing_tag_state(buffer) {\n\t\tvar c = buffer.char();\n\t\tif (c === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"unexpected-eof-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (c === '>') {\n\t\t\ttokenizer._currentToken.selfClosing = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_comment_state(buffer) {\n\t\tvar data = buffer.matchUntil('>');\n\t\tdata = data.replace(/\\u0000/g, \"\\uFFFD\");\n\t\tbuffer.char();\n\t\ttokenizer._emitToken({type: 'Comment', data: data});\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction markup_declaration_open_state(buffer) {\n\t\tvar chars = buffer.shift(2);\n\t\tif (chars === '--') {\n\t\t\ttokenizer._currentToken = {type: 'Comment', data: ''};\n\t\t\ttokenizer.setState(comment_start_state);\n\t\t} else {\n\t\t\tvar newchars = buffer.shift(5);\n\t\t\tif (newchars === InputStream.EOF || chars === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tchars += newchars;\n\t\t\tif (chars.toUpperCase() === 'DOCTYPE') {\n\t\t\t\ttokenizer._currentToken = {type: 'Doctype', name: '', publicId: null, systemId: null, forceQuirks: false};\n\t\t\t\ttokenizer.setState(doctype_state);\n\t\t\t} else if (tokenizer._tokenHandler.isCdataSectionAllowed() && chars === '[CDATA[') {\n\t\t\t\ttokenizer.setState(cdata_section_state);\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction cdata_section_state(buffer) {\n\t\tvar data = buffer.matchUntil(']]>');\n\t\tbuffer.shift(3);\n\t\tif (data) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t}\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction comment_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_start_dash_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"-\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data + buffer.matchUntil('\\u0000|-');\n\t\t\tbuffer.char();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-double-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._parseError(\"unexpected-bang-after-double-dash-in-comment\");\n\t\t\ttokenizer.setState(comment_end_bang_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._parseError(\"unexpected-dash-after-double-dash-in-comment\");\n\t\t\ttokenizer._currentToken.data += data;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"--\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-comment\");\n\t\t\ttokenizer._currentToken.data += '--' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_bang_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-bang-state\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._currentToken.data += '--!';\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '--!' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"need-space-after-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-right-bracket\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name = data;\n\t\t\ttokenizer.setState(doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype-name\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_doctype_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (['p', 'P'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['u', 'U'], ['b', 'B'], ['l', 'L'], ['i', 'I'], ['c', 'C']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_public_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (['s', 'S'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['y', 'Y'], ['s', 'S'], ['t', 'T'], ['e', 'E'], ['m', 'M']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_system_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\n\t\t\tif (data === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\t\tbuffer.unget(data);\n\t\t\t\ttokenizer.setState(data_state);\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-space-or-right-bracket-in-doctype\", {data: data});\n\t\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(between_doctype_public_and_system_identifiers_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction between_doctype_public_and_system_identifiers_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n};\n\nObject.defineProperty(Tokenizer.prototype, 'lineNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().line;\n\t}\n});\n\nObject.defineProperty(Tokenizer.prototype, 'columnNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().column;\n\t}\n});\n\nexports.Tokenizer = Tokenizer;\n\n},\n{\"./EntityParser\":2,\"./InputStream\":3}],\n6:[function(_dereq_,module,exports){\nvar assert = _dereq_('assert');\n\nvar messages = _dereq_('./messages.json');\nvar constants = _dereq_('./constants');\n\nvar EventEmitter = _dereq_('events').EventEmitter;\n\nvar Tokenizer = _dereq_('./Tokenizer').Tokenizer;\nvar ElementStack = _dereq_('./ElementStack').ElementStack;\nvar StackItem = _dereq_('./StackItem').StackItem;\n\nvar Marker = {};\n\nfunction isWhitespace(ch) {\n\treturn ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\" || ch === \"\\f\";\n}\n\nfunction isWhitespaceOrReplacementCharacter(ch) {\n\treturn isWhitespace(ch) || ch === '\\uFFFD';\n}\n\nfunction isAllWhitespace(characters) {\n\tfor (var i = 0; i < characters.length; i++) {\n\t\tvar ch = characters[i];\n\t\tif (!isWhitespace(ch))\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isAllWhitespaceOrReplacementCharacters(characters) {\n\tfor (var i = 0; i < characters.length; i++) {\n\t\tvar ch = characters[i];\n\t\tif (!isWhitespaceOrReplacementCharacter(ch))\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction getAttribute(node, name) {\n\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\tvar attribute = node.attributes[i];\n\t\tif (attribute.nodeName === name) {\n\t\t\treturn attribute;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction CharacterBuffer(characters) {\n\tthis.characters = characters;\n\tthis.current = 0;\n\tthis.end = this.characters.length;\n}\n\nCharacterBuffer.prototype.skipAtMostOneLeadingNewline = function() {\n\tif (this.characters[this.current] === '\\n')\n\t\tthis.current++;\n};\n\nCharacterBuffer.prototype.skipLeadingWhitespace = function() {\n\twhile (isWhitespace(this.characters[this.current])) {\n\t\tif (++this.current == this.end)\n\t\t\treturn;\n\t}\n};\n\nCharacterBuffer.prototype.skipLeadingNonWhitespace = function() {\n\twhile (!isWhitespace(this.characters[this.current])) {\n\t\tif (++this.current == this.end)\n\t\t\treturn;\n\t}\n};\n\nCharacterBuffer.prototype.takeRemaining = function() {\n\treturn this.characters.substring(this.current);\n};\n\nCharacterBuffer.prototype.takeLeadingWhitespace = function() {\n\tvar start = this.current;\n\tthis.skipLeadingWhitespace();\n\tif (start === this.current)\n\t\treturn \"\";\n\treturn this.characters.substring(start, this.current - start);\n};\n\nObject.defineProperty(CharacterBuffer.prototype, 'length', {\n\tget: function(){\n\t\treturn this.end - this.current;\n\t}\n});\nfunction TreeBuilder() {\n\tthis.tokenizer = null;\n\tthis.errorHandler = null;\n\tthis.scriptingEnabled = false;\n\tthis.document = null;\n\tthis.head = null;\n\tthis.form = null;\n\tthis.openElements = new ElementStack();\n\tthis.activeFormattingElements = [];\n\tthis.insertionMode = null;\n\tthis.insertionModeName = \"\";\n\tthis.originalInsertionMode = \"\";\n\tthis.inQuirksMode = false; // TODO quirks mode\n\tthis.compatMode = \"no quirks\";\n\tthis.framesetOk = true;\n\tthis.redirectAttachToFosterParent = false;\n\tthis.selfClosingFlagAcknowledged = false;\n\tthis.context = \"\";\n\tthis.pendingTableCharacters = [];\n\tthis.shouldSkipLeadingNewline = false;\n\n\tvar tree = this;\n\tvar modes = this.insertionModes = {};\n\tmodes.base = {\n\t\tend_tag_handlers: {\"-default\": 'endTagOther'},\n\t\tstart_tag_handlers: {\"-default\": 'startTagOther'},\n\t\tprocessEOF: function() {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.openElements.length > 2) {\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\n\t\t\t} else if (tree.openElements.length == 2 &&\n\t\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\n\t\t\t} else if (tree.context && tree.openElements.length > 1) {\n\t\t\t}\n\t\t},\n\t\tprocessComment: function(data) {\n\t\t\ttree.insertComment(data, tree.currentStackItem().node);\n\t\t},\n\t\tprocessDoctype: function(name, publicId, systemId, forceQuirks) {\n\t\t\ttree.parseError('unexpected-doctype');\n\t\t},\n\t\tprocessStartTag: function(name, attributes, selfClosing) {\n\t\t\tif (this[this.start_tag_handlers[name]]) {\n\t\t\t\tthis[this.start_tag_handlers[name]](name, attributes, selfClosing);\n\t\t\t} else if (this[this.start_tag_handlers[\"-default\"]]) {\n\t\t\t\tthis[this.start_tag_handlers[\"-default\"]](name, attributes, selfClosing);\n\t\t\t} else {\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\n\t\t\t}\n\t\t},\n\t\tprocessEndTag: function(name) {\n\t\t\tif (this[this.end_tag_handlers[name]]) {\n\t\t\t\tthis[this.end_tag_handlers[name]](name);\n\t\t\t} else if (this[this.end_tag_handlers[\"-default\"]]) {\n\t\t\t\tthis[this.end_tag_handlers[\"-default\"]](name);\n\t\t\t} else {\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\n\t\t\t}\n\t\t},\n\t\tstartTagHtml: function(name, attributes) {\n\t\t\tmodes.inBody.startTagHtml(name, attributes);\n\t\t}\n\t};\n\n\tmodes.initial = Object.create(modes.base);\n\n\tmodes.initial.processEOF = function() {\n\t\ttree.parseError(\"expected-doctype-but-got-eof\");\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.initial.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.initial.processDoctype = function(name, publicId, systemId, forceQuirks) {\n\t\ttree.insertDoctype(name || '', publicId || '', systemId || '');\n\n\t\tif (forceQuirks || name != 'html' || (publicId != null && ([\n\t\t\t\t\t\"+//silmaril//dtd html pro v0r11 19970101//\",\n\t\t\t\t\t\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//\",\n\t\t\t\t\t\"-//as//dtd html 3.0 aswedit + extensions//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.1e//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.2 final//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.2//\",\n\t\t\t\t\t\"-//ietf//dtd html 3//\",\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//metrius//dtd metrius presentational//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html strict//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 tables//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html strict//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 tables//\",\n\t\t\t\t\t\"-//netscape comm. corp.//dtd html//\",\n\t\t\t\t\t\"-//netscape comm. corp.//dtd strict html//\",\n\t\t\t\t\t\"-//o'reilly and associates//dtd html 2.0//\",\n\t\t\t\t\t\"-//o'reilly and associates//dtd html extended 1.0//\",\n\t\t\t\t\t\"-//spyglass//dtd html 2.0 extended//\",\n\t\t\t\t\t\"-//sq//dtd html 2.0 hotmetal + extensions//\",\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava html//\",\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava strict html//\",\n\t\t\t\t\t\"-//w3c//dtd html 3 1995-03-24//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2 draft//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2 final//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2s draft//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.0 frameset//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.0 transitional//\",\n\t\t\t\t\t\"-//w3c//dtd html experimental 19960712//\",\n\t\t\t\t\t\"-//w3c//dtd html experimental 970421//\",\n\t\t\t\t\t\"-//w3c//dtd w3 html//\",\n\t\t\t\t\t\"-//w3o//dtd w3 html 3.0//\",\n\t\t\t\t\t\"-//webtechs//dtd mozilla html 2.0//\",\n\t\t\t\t\t\"-//webtechs//dtd mozilla html//\",\n\t\t\t\t\t\"html\"\n\t\t\t\t].some(publicIdStartsWith)\n\t\t\t\t|| [\n\t\t\t\t\t\"-//w3o//dtd w3 html strict 3.0//en//\",\n\t\t\t\t\t\"-/w3c/dtd html 4.0 transitional/en\",\n\t\t\t\t\t\"html\"\n\t\t\t\t].indexOf(publicId.toLowerCase()) > -1\n\t\t\t\t|| (systemId == null && [\n\t\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\n\t\t\t\t].some(publicIdStartsWith)))\n\t\t\t)\n\t\t\t|| (systemId != null && (systemId.toLowerCase() == \"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\"))\n\t\t) {\n\t\t\ttree.compatMode = \"quirks\";\n\t\t\ttree.parseError(\"quirky-doctype\");\n\t\t} else if (publicId != null && ([\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 transitional//\",\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 frameset//\"\n\t\t\t].some(publicIdStartsWith)\n\t\t\t|| (systemId != null && [\n\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\n\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\n\t\t\t].indexOf(publicId.toLowerCase()) > -1))\n\t\t) {\n\t\t\ttree.compatMode = \"limited quirks\";\n\t\t\ttree.parseError(\"almost-standards-doctype\");\n\t\t} else {\n\t\t\tif ((publicId == \"-//W3C//DTD HTML 4.0//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/REC-html40/strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD HTML 4.01//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/html4/strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.0 Strict//EN\" && (systemId == \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.1//EN\" && (systemId == \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"))\n\t\t\t) {\n\t\t\t} else if (!((systemId == null || systemId == \"about:legacy-compat\") && publicId == null)) {\n\t\t\t\ttree.parseError(\"unknown-doctype\");\n\t\t\t}\n\t\t}\n\t\ttree.setInsertionMode('beforeHTML');\n\t\tfunction publicIdStartsWith(string) {\n\t\t\treturn publicId.toLowerCase().indexOf(string) === 0;\n\t\t}\n\t};\n\n\tmodes.initial.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\ttree.parseError('expected-doctype-but-got-chars');\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.initial.processStartTag = function(name, attributes, selfClosing) {\n\t\ttree.parseError('expected-doctype-but-got-start-tag', {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.initial.processEndTag = function(name) {\n\t\ttree.parseError('expected-doctype-but-got-end-tag', {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.initial.anythingElse = function() {\n\t\ttree.compatMode = 'quirks';\n\t\ttree.setInsertionMode('beforeHTML');\n\t};\n\n\tmodes.beforeHTML = Object.create(modes.base);\n\n\tmodes.beforeHTML.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.beforeHTML.processEOF = function() {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.beforeHTML.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.beforeHTML.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.beforeHTML.startTagHtml = function(name, attributes, selfClosing) {\n\t\ttree.insertHtmlElement(attributes);\n\t\ttree.setInsertionMode('beforeHead');\n\t};\n\n\tmodes.beforeHTML.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.beforeHTML.processEndTag = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.beforeHTML.anythingElse = function() {\n\t\ttree.insertHtmlElement();\n\t\ttree.setInsertionMode('beforeHead');\n\t};\n\n\tmodes.afterAfterBody = Object.create(modes.base);\n\n\tmodes.afterAfterBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterAfterBody.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.afterAfterBody.processDoctype = function(data) {\n\t\tmodes.inBody.processDoctype(data);\n\t};\n\n\tmodes.afterAfterBody.startTagHtml = function(data, attributes) {\n\t\tmodes.inBody.startTagHtml(data, attributes);\n\t};\n\n\tmodes.afterAfterBody.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterAfterBody.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterAfterBody.processCharacters = function(data) {\n\t\tif (!isAllWhitespace(data.characters)) {\n\t\t\ttree.parseError('unexpected-char-after-body');\n\t\t\ttree.setInsertionMode('inBody');\n\t\t\treturn tree.insertionMode.processCharacters(data);\n\t\t}\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.afterBody = Object.create(modes.base);\n\n\tmodes.afterBody.end_tag_handlers = {\n\t\thtml: 'endTagHtml',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.afterBody.processComment = function(data) {\n\t\ttree.insertComment(data, tree.openElements.rootNode);\n\t};\n\n\tmodes.afterBody.processCharacters = function(data) {\n\t\tif (!isAllWhitespace(data.characters)) {\n\t\t\ttree.parseError('unexpected-char-after-body');\n\t\t\ttree.setInsertionMode('inBody');\n\t\t\treturn tree.insertionMode.processCharacters(data);\n\t\t}\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.afterBody.processStartTag = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag-after-body', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterBody.endTagHtml = function(name) {\n\t\tif (tree.context) {\n\t\t\ttree.parseError('end-html-in-innerhtml');\n\t\t} else {\n\t\t\ttree.setInsertionMode('afterAfterBody');\n\t\t}\n\t};\n\n\tmodes.afterBody.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag-after-body', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterFrameset = Object.create(modes.base);\n\n\tmodes.afterFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tnoframes: 'startTagNoframes',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterFrameset.end_tag_handlers = {\n\t\thtml: 'endTagHtml',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.afterFrameset.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tvar whitespace = \"\";\n\t\tfor (var i = 0; i < characters.length; i++) {\n\t\t\tvar ch = characters[i];\n\t\t\tif (isWhitespace(ch))\n\t\t\t\twhitespace += ch;\n\t\t}\n\t\tif (whitespace) {\n\t\t\ttree.insertText(whitespace);\n\t\t}\n\t\tif (whitespace.length < characters.length)\n\t\t\ttree.parseError('expected-eof-but-got-char');\n\t};\n\n\tmodes.afterFrameset.startTagNoframes = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterFrameset.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-after-frameset\", {name: name});\n\t};\n\n\tmodes.afterFrameset.endTagHtml = function(name) {\n\t\ttree.setInsertionMode('afterAfterFrameset');\n\t};\n\n\tmodes.afterFrameset.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-after-frameset\", {name: name});\n\t};\n\n\tmodes.beforeHead = Object.create(modes.base);\n\n\tmodes.beforeHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.beforeHead.end_tag_handlers = {\n\t\thtml: 'endTagImplyHead',\n\t\thead: 'endTagImplyHead',\n\t\tbody: 'endTagImplyHead',\n\t\tbr: 'endTagImplyHead',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.beforeHead.processEOF = function() {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.beforeHead.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.beforeHead.startTagHead = function(name, attributes) {\n\t\ttree.insertHeadElement(attributes);\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\tmodes.beforeHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.beforeHead.endTagImplyHead = function(name) {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.beforeHead.endTagOther = function(name) {\n\t\ttree.parseError('end-tag-after-implied-root', {name: name});\n\t};\n\n\tmodes.inHead = Object.create(modes.base);\n\n\tmodes.inHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\ttitle: 'startTagTitle',\n\t\tscript: 'startTagScript',\n\t\tstyle: 'startTagNoFramesStyle',\n\t\tnoscript: 'startTagNoScript',\n\t\tnoframes: 'startTagNoFramesStyle',\n\t\tbase: 'startTagBaseBasefontBgsoundLink',\n\t\tbasefont: 'startTagBaseBasefontBgsoundLink',\n\t\tbgsound: 'startTagBaseBasefontBgsoundLink',\n\t\tlink: 'startTagBaseBasefontBgsoundLink',\n\t\tmeta: 'startTagMeta',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inHead.end_tag_handlers = {\n\t\thead: 'endTagHead',\n\t\thtml: 'endTagHtmlBodyBr',\n\t\tbody: 'endTagHtmlBodyBr',\n\t\tbr: 'endTagHtmlBodyBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.inHead.processEOF = function() {\n\t\tvar name = tree.currentStackItem().localName;\n\t\tif (['title', 'style', 'script'].indexOf(name) != -1) {\n\t\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\", {name: name});\n\t\t\ttree.popElement();\n\t\t}\n\n\t\tthis.anythingElse();\n\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.inHead.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inHead.startTagHtml = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagHead = function(name, attributes) {\n\t\ttree.parseError('two-heads-are-not-better-than-one');\n\t};\n\n\tmodes.inHead.startTagTitle = function(name, attributes) {\n\t\ttree.processGenericRCDATAStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagNoScript = function(name, attributes) {\n\t\tif (tree.scriptingEnabled)\n\t\t\treturn tree.processGenericRawTextStartTag(name, attributes);\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inHeadNoscript');\n\t};\n\n\tmodes.inHead.startTagNoFramesStyle = function(name, attributes) {\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagScript = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.SCRIPT_DATA);\n\t\ttree.originalInsertionMode = tree.insertionModeName;\n\t\ttree.setInsertionMode('text');\n\t};\n\n\tmodes.inHead.startTagBaseBasefontBgsoundLink = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inHead.startTagMeta = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inHead.endTagHead = function(name) {\n\t\tif (tree.openElements.item(tree.openElements.length - 1).localName == 'head') {\n\t\t\ttree.openElements.pop();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'head'});\n\t\t}\n\t\ttree.setInsertionMode('afterHead');\n\t};\n\n\tmodes.inHead.endTagHtmlBodyBr = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inHead.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inHead.anythingElse = function() {\n\t\tthis.endTagHead('head');\n\t};\n\n\tmodes.afterHead = Object.create(modes.base);\n\n\tmodes.afterHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\tbody: 'startTagBody',\n\t\tframeset: 'startTagFrameset',\n\t\tbase: 'startTagFromHead',\n\t\tlink: 'startTagFromHead',\n\t\tmeta: 'startTagFromHead',\n\t\tscript: 'startTagFromHead',\n\t\tstyle: 'startTagFromHead',\n\t\ttitle: 'startTagFromHead',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.afterHead.end_tag_handlers = {\n\t\tbody: 'endTagBodyHtmlBr',\n\t\thtml: 'endTagBodyHtmlBr',\n\t\tbr: 'endTagBodyHtmlBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.afterHead.processEOF = function() {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.afterHead.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.afterHead.startTagHtml = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterHead.startTagBody = function(name, attributes) {\n\t\ttree.framesetOk = false;\n\t\ttree.insertBodyElement(attributes);\n\t\ttree.setInsertionMode('inBody');\n\t};\n\n\tmodes.afterHead.startTagFrameset = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inFrameset');\n\t};\n\n\tmodes.afterHead.startTagFromHead = function(name, attributes, selfClosing) {\n\t\ttree.parseError(\"unexpected-start-tag-out-of-my-head\", {name: name});\n\t\ttree.openElements.push(tree.head);\n\t\tmodes.inHead.processStartTag(name, attributes, selfClosing);\n\t\ttree.openElements.remove(tree.head);\n\t};\n\n\tmodes.afterHead.startTagHead = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t};\n\n\tmodes.afterHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterHead.endTagBodyHtmlBr = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterHead.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.afterHead.anythingElse = function() {\n\t\ttree.insertBodyElement([]);\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.framesetOk = true;\n\t}\n\n\tmodes.inBody = Object.create(modes.base);\n\n\tmodes.inBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagMisplaced',\n\t\tbase: 'startTagProcessInHead',\n\t\tbasefont: 'startTagProcessInHead',\n\t\tbgsound: 'startTagProcessInHead',\n\t\tlink: 'startTagProcessInHead',\n\t\tmeta: 'startTagProcessInHead',\n\t\tnoframes: 'startTagProcessInHead',\n\t\tscript: 'startTagProcessInHead',\n\t\tstyle: 'startTagProcessInHead',\n\t\ttitle: 'startTagProcessInHead',\n\t\tbody: 'startTagBody',\n\t\tform: 'startTagForm',\n\t\tplaintext: 'startTagPlaintext',\n\t\ta: 'startTagA',\n\t\tbutton: 'startTagButton',\n\t\txmp: 'startTagXmp',\n\t\ttable: 'startTagTable',\n\t\thr: 'startTagHr',\n\t\timage: 'startTagImage',\n\t\tinput: 'startTagInput',\n\t\ttextarea: 'startTagTextarea',\n\t\tselect: 'startTagSelect',\n\t\tisindex: 'startTagIsindex',\n\t\tapplet:\t'startTagAppletMarqueeObject',\n\t\tmarquee:\t'startTagAppletMarqueeObject',\n\t\tobject:\t'startTagAppletMarqueeObject',\n\t\tli: 'startTagListItem',\n\t\tdd: 'startTagListItem',\n\t\tdt: 'startTagListItem',\n\t\taddress: 'startTagCloseP',\n\t\tarticle: 'startTagCloseP',\n\t\taside: 'startTagCloseP',\n\t\tblockquote: 'startTagCloseP',\n\t\tcenter: 'startTagCloseP',\n\t\tdetails: 'startTagCloseP',\n\t\tdir: 'startTagCloseP',\n\t\tdiv: 'startTagCloseP',\n\t\tdl: 'startTagCloseP',\n\t\tfieldset: 'startTagCloseP',\n\t\tfigcaption: 'startTagCloseP',\n\t\tfigure: 'startTagCloseP',\n\t\tfooter: 'startTagCloseP',\n\t\theader: 'startTagCloseP',\n\t\thgroup: 'startTagCloseP',\n\t\tmain: 'startTagCloseP',\n\t\tmenu: 'startTagCloseP',\n\t\tnav: 'startTagCloseP',\n\t\tol: 'startTagCloseP',\n\t\tp: 'startTagCloseP',\n\t\tsection: 'startTagCloseP',\n\t\tsummary: 'startTagCloseP',\n\t\tul: 'startTagCloseP',\n\t\tlisting: 'startTagPreListing',\n\t\tpre: 'startTagPreListing',\n\t\tb: 'startTagFormatting',\n\t\tbig: 'startTagFormatting',\n\t\tcode: 'startTagFormatting',\n\t\tem: 'startTagFormatting',\n\t\tfont: 'startTagFormatting',\n\t\ti: 'startTagFormatting',\n\t\ts: 'startTagFormatting',\n\t\tsmall: 'startTagFormatting',\n\t\tstrike: 'startTagFormatting',\n\t\tstrong: 'startTagFormatting',\n\t\ttt: 'startTagFormatting',\n\t\tu: 'startTagFormatting',\n\t\tnobr: 'startTagNobr',\n\t\tarea: 'startTagVoidFormatting',\n\t\tbr: 'startTagVoidFormatting',\n\t\tembed: 'startTagVoidFormatting',\n\t\timg: 'startTagVoidFormatting',\n\t\tkeygen: 'startTagVoidFormatting',\n\t\twbr: 'startTagVoidFormatting',\n\t\tparam: 'startTagParamSourceTrack',\n\t\tsource: 'startTagParamSourceTrack',\n\t\ttrack: 'startTagParamSourceTrack',\n\t\tiframe: 'startTagIFrame',\n\t\tnoembed: 'startTagRawText',\n\t\tnoscript: 'startTagRawText',\n\t\th1: 'startTagHeading',\n\t\th2: 'startTagHeading',\n\t\th3: 'startTagHeading',\n\t\th4: 'startTagHeading',\n\t\th5: 'startTagHeading',\n\t\th6: 'startTagHeading',\n\t\tcaption: 'startTagMisplaced',\n\t\tcol: 'startTagMisplaced',\n\t\tcolgroup: 'startTagMisplaced',\n\t\tframe: 'startTagMisplaced',\n\t\tframeset: 'startTagFrameset',\n\t\ttbody: 'startTagMisplaced',\n\t\ttd: 'startTagMisplaced',\n\t\ttfoot: 'startTagMisplaced',\n\t\tth: 'startTagMisplaced',\n\t\tthead: 'startTagMisplaced',\n\t\ttr: 'startTagMisplaced',\n\t\toption: 'startTagOptionOptgroup',\n\t\toptgroup: 'startTagOptionOptgroup',\n\t\tmath: 'startTagMath',\n\t\tsvg: 'startTagSVG',\n\t\trt: 'startTagRpRt',\n\t\trp: 'startTagRpRt',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inBody.end_tag_handlers = {\n\t\tp: 'endTagP',\n\t\tbody: 'endTagBody',\n\t\thtml: 'endTagHtml',\n\t\taddress: 'endTagBlock',\n\t\tarticle: 'endTagBlock',\n\t\taside: 'endTagBlock',\n\t\tblockquote: 'endTagBlock',\n\t\tbutton: 'endTagBlock',\n\t\tcenter: 'endTagBlock',\n\t\tdetails: 'endTagBlock',\n\t\tdir: 'endTagBlock',\n\t\tdiv: 'endTagBlock',\n\t\tdl: 'endTagBlock',\n\t\tfieldset: 'endTagBlock',\n\t\tfigcaption: 'endTagBlock',\n\t\tfigure: 'endTagBlock',\n\t\tfooter: 'endTagBlock',\n\t\theader: 'endTagBlock',\n\t\thgroup: 'endTagBlock',\n\t\tlisting: 'endTagBlock',\n\t\tmain: 'endTagBlock',\n\t\tmenu: 'endTagBlock',\n\t\tnav: 'endTagBlock',\n\t\tol: 'endTagBlock',\n\t\tpre: 'endTagBlock',\n\t\tsection: 'endTagBlock',\n\t\tsummary: 'endTagBlock',\n\t\tul: 'endTagBlock',\n\t\tform: 'endTagForm',\n\t\tapplet: 'endTagAppletMarqueeObject',\n\t\tmarquee: 'endTagAppletMarqueeObject',\n\t\tobject: 'endTagAppletMarqueeObject',\n\t\tdd: 'endTagListItem',\n\t\tdt: 'endTagListItem',\n\t\tli: 'endTagListItem',\n\t\th1: 'endTagHeading',\n\t\th2: 'endTagHeading',\n\t\th3: 'endTagHeading',\n\t\th4: 'endTagHeading',\n\t\th5: 'endTagHeading',\n\t\th6: 'endTagHeading',\n\t\ta: 'endTagFormatting',\n\t\tb: 'endTagFormatting',\n\t\tbig: 'endTagFormatting',\n\t\tcode: 'endTagFormatting',\n\t\tem: 'endTagFormatting',\n\t\tfont: 'endTagFormatting',\n\t\ti: 'endTagFormatting',\n\t\tnobr: 'endTagFormatting',\n\t\ts: 'endTagFormatting',\n\t\tsmall: 'endTagFormatting',\n\t\tstrike: 'endTagFormatting',\n\t\tstrong: 'endTagFormatting',\n\t\ttt: 'endTagFormatting',\n\t\tu: 'endTagFormatting',\n\t\tbr: 'endTagBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.inBody.processCharacters = function(buffer) {\n\t\tif (tree.shouldSkipLeadingNewline) {\n\t\t\ttree.shouldSkipLeadingNewline = false;\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\n\t\t}\n\t\ttree.reconstructActiveFormattingElements();\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!characters)\n\t\t\treturn;\n\t\ttree.insertText(characters);\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\n\t\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagHtml = function(name, attributes) {\n\t\ttree.parseError('non-html-root');\n\t\ttree.addAttributesToElement(tree.openElements.rootNode, attributes);\n\t};\n\n\tmodes.inBody.startTagProcessInHead = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inBody.startTagBody = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag', {name: 'body'});\n\t\tif (tree.openElements.length == 1 ||\n\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\tassert.ok(tree.context);\n\t\t} else {\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.addAttributesToElement(tree.openElements.bodyElement, attributes);\n\t\t}\n\t};\n\n\tmodes.inBody.startTagFrameset = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag', {name: 'frameset'});\n\t\tif (tree.openElements.length == 1 ||\n\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\tassert.ok(tree.context);\n\t\t} else if (tree.framesetOk) {\n\t\t\ttree.detachFromParent(tree.openElements.bodyElement);\n\t\t\twhile (tree.openElements.length > 1)\n\t\t\t\ttree.openElements.pop();\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.setInsertionMode('inFrameset');\n\t\t}\n\t};\n\n\tmodes.inBody.startTagCloseP = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagPreListing = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t\ttree.shouldSkipLeadingNewline = true;\n\t};\n\n\tmodes.inBody.startTagForm = function(name, attributes) {\n\t\tif (tree.form) {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t} else {\n\t\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\t\tthis.endTagP('p');\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.form = tree.currentStackItem();\n\t\t}\n\t};\n\n\tmodes.inBody.startTagRpRt = function(name, attributes) {\n\t\tif (tree.openElements.inScope('ruby')) {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != 'ruby') {\n\t\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t\t}\n\t\t}\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagListItem = function(name, attributes) {\n\t\tvar stopNames = {li: ['li'], dd: ['dd', 'dt'], dt: ['dd', 'dt']};\n\t\tvar stopName = stopNames[name];\n\n\t\tvar els = tree.openElements;\n\t\tfor (var i = els.length - 1; i >= 0; i--) {\n\t\t\tvar node = els.item(i);\n\t\t\tif (stopName.indexOf(node.localName) != -1) {\n\t\t\t\ttree.insertionMode.processEndTag(node.localName);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (node.isSpecial() && node.localName !== 'p' && node.localName !== 'address' && node.localName !== 'div')\n\t\t\t\tbreak;\n\t\t}\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagPlaintext = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.PLAINTEXT);\n\t};\n\n\tmodes.inBody.startTagHeading = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\tif (tree.currentStackItem().isNumberedHeader()) {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t\ttree.popElement();\n\t\t}\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagA = function(name, attributes) {\n\t\tvar activeA = tree.elementInActiveFormattingElements('a');\n\t\tif (activeA) {\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: \"a\", endName: \"a\"});\n\t\t\ttree.adoptionAgencyEndTag('a');\n\t\t\tif (tree.openElements.contains(activeA))\n\t\t\t\ttree.openElements.remove(activeA);\n\t\t\ttree.removeElementFromActiveFormattingElements(activeA);\n\t\t}\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagFormatting = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagNobr = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tif (tree.openElements.inScope('nobr')) {\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: 'nobr', endName: 'nobr'});\n\t\t\tthis.processEndTag('nobr');\n\t\t\t\ttree.reconstructActiveFormattingElements();\n\t\t}\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagButton = function(name, attributes) {\n\t\tif (tree.openElements.inScope('button')) {\n\t\t\ttree.parseError('unexpected-start-tag-implies-end-tag', {startName: 'button', endName: 'button'});\n\t\t\tthis.processEndTag('button');\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t} else {\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertElement(name, attributes);\n\t\t}\n\t};\n\n\tmodes.inBody.startTagAppletMarqueeObject = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.activeFormattingElements.push(Marker);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.endTagAppletMarqueeObject = function(name) {\n\t\tif (!tree.openElements.inScope(name)) {\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t\ttree.clearActiveFormattingElements();\n\t\t}\n\t};\n\n\tmodes.inBody.startTagXmp = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.processEndTag('p');\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagTable = function(name, attributes) {\n\t\tif (tree.compatMode !== \"quirks\")\n\t\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\t\tthis.processEndTag('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inTable');\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagVoidFormatting = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagParamSourceTrack = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagHr = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagImage = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag-treated-as', {originalName: 'image', newName: 'img'});\n\t\tthis.processStartTag('img', attributes);\n\t};\n\n\tmodes.inBody.startTagInput = function(name, attributes) {\n\t\tvar currentFramesetOk = tree.framesetOk;\n\t\tthis.startTagVoidFormatting(name, attributes);\n\t\tfor (var key in attributes) {\n\t\t\tif (attributes[key].nodeName == 'type') {\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden')\n\t\t\t\t\ttree.framesetOk = currentFramesetOk;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inBody.startTagIsindex = function(name, attributes) {\n\t\ttree.parseError('deprecated-tag', {name: 'isindex'});\n\t\ttree.selfClosingFlagAcknowledged = true;\n\t\tif (tree.form)\n\t\t\treturn;\n\t\tvar formAttributes = [];\n\t\tvar inputAttributes = [];\n\t\tvar prompt = \"This is a searchable index. Enter search keywords: \";\n\t\tfor (var key in attributes) {\n\t\t\tswitch (attributes[key].nodeName) {\n\t\t\t\tcase 'action':\n\t\t\t\t\tformAttributes.push({nodeName: 'action',\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'prompt':\n\t\t\t\t\tprompt = attributes[key].nodeValue;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'name':\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tinputAttributes.push({nodeName: attributes[key].nodeName,\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\n\t\t\t}\n\t\t}\n\t\tinputAttributes.push({nodeName: 'name', nodeValue: 'isindex'});\n\t\tthis.processStartTag('form', formAttributes);\n\t\tthis.processStartTag('hr');\n\t\tthis.processStartTag('label');\n\t\tthis.processCharacters(new CharacterBuffer(prompt));\n\t\tthis.processStartTag('input', inputAttributes);\n\t\tthis.processEndTag('label');\n\t\tthis.processStartTag('hr');\n\t\tthis.processEndTag('form');\n\t};\n\n\tmodes.inBody.startTagTextarea = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.RCDATA);\n\t\ttree.originalInsertionMode = tree.insertionModeName;\n\t\ttree.shouldSkipLeadingNewline = true;\n\t\ttree.framesetOk = false;\n\t\ttree.setInsertionMode('text');\n\t};\n\n\tmodes.inBody.startTagIFrame = function(name, attributes) {\n\t\ttree.framesetOk = false;\n\t\tthis.startTagRawText(name, attributes);\n\t};\n\n\tmodes.inBody.startTagRawText = function(name, attributes) {\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t};\n\n\tmodes.inBody.startTagSelect = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t\tvar insertionModeName = tree.insertionModeName;\n\t\tif (insertionModeName == 'inTable' ||\n\t\t\tinsertionModeName == 'inCaption' ||\n\t\t\tinsertionModeName == 'inColumnGroup' ||\n\t\t\tinsertionModeName == 'inTableBody' ||\n\t\t\tinsertionModeName == 'inRow' ||\n\t\t\tinsertionModeName == 'inCell') {\n\t\t\ttree.setInsertionMode('inSelectInTable');\n\t\t} else {\n\t\t\ttree.setInsertionMode('inSelect');\n\t\t}\n\t};\n\n\tmodes.inBody.startTagMisplaced = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag-ignored', {name: name});\n\t};\n\n\tmodes.inBody.endTagMisplaced = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t};\n\n\tmodes.inBody.endTagBr = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-treated-as\", {originalName: \"br\", newName: \"br element\"});\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, []);\n\t\ttree.popElement();\n\t};\n\n\tmodes.inBody.startTagOptionOptgroup = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagOther = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.endTagOther = function(name) {\n\t\tvar node;\n\t\tfor (var i = tree.openElements.length - 1; i > 0; i--) {\n\t\t\tnode = tree.openElements.item(i);\n\t\t\tif (node.localName == name) {\n\t\t\t\ttree.generateImpliedEndTags(name);\n\t\t\t\tif (tree.currentStackItem().localName != name)\n\t\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\t\ttree.openElements.remove_openElements_until(function(x) {return x === node;});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (node.isSpecial()) {\n\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inBody.startTagMath = function(name, attributes, selfClosing) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tattributes = tree.adjustMathMLAttributes(attributes);\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/1998/Math/MathML\", selfClosing);\n\t};\n\n\tmodes.inBody.startTagSVG = function(name, attributes, selfClosing) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tattributes = tree.adjustSVGAttributes(attributes);\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/2000/svg\", selfClosing);\n\t};\n\n\tmodes.inBody.endTagP = function(name) {\n\t\tif (!tree.openElements.inButtonScope('p')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'p'});\n\t\t\tthis.startTagCloseP('p', []);\n\t\t\tthis.endTagP('p');\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags('p');\n\t\t\tif (tree.currentStackItem().localName != 'p')\n\t\t\t\ttree.parseError('unexpected-implied-end-tag', {name: 'p'});\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagBody = function(name) {\n\t\tif (!tree.openElements.inScope('body')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().localName != 'body') {\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\texpectedName: tree.currentStackItem().localName,\n\t\t\t\tgotName: name\n\t\t\t});\n\t\t}\n\t\ttree.setInsertionMode('afterBody');\n\t};\n\n\tmodes.inBody.endTagHtml = function(name) {\n\t\tif (!tree.openElements.inScope('body')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().localName != 'body') {\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\texpectedName: tree.currentStackItem().localName,\n\t\t\t\tgotName: name\n\t\t\t});\n\t\t}\n\t\ttree.setInsertionMode('afterBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inBody.endTagBlock = function(name) {\n\t\tif (!tree.openElements.inScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagForm = function(name)  {\n\t\tvar node = tree.form;\n\t\ttree.form = null;\n\t\tif (!node || !tree.openElements.inScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem() != node) {\n\t\t\t\ttree.parseError('end-tag-too-early-ignored', {name: 'form'});\n\t\t\t}\n\t\t\ttree.openElements.remove(node);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagListItem = function(name) {\n\t\tif (!tree.openElements.inListItemScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags(name);\n\t\t\tif (tree.currentStackItem().localName != name)\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagHeading = function(name) {\n\t\tif (!tree.openElements.hasNumberedHeaderElementInScope()) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\ttree.generateImpliedEndTags();\n\t\tif (tree.currentStackItem().localName != name)\n\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\n\t\ttree.openElements.remove_openElements_until(function(e) {\n\t\t\treturn e.isNumberedHeader();\n\t\t});\n\t};\n\n\tmodes.inBody.endTagFormatting = function(name, attributes) {\n\t\tif (!tree.adoptionAgencyEndTag(name))\n\t\t\tthis.endTagOther(name, attributes);\n\t};\n\n\tmodes.inCaption = Object.create(modes.base);\n\n\tmodes.inCaption.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagTableElement',\n\t\tcol: 'startTagTableElement',\n\t\tcolgroup: 'startTagTableElement',\n\t\ttbody: 'startTagTableElement',\n\t\ttd: 'startTagTableElement',\n\t\ttfoot: 'startTagTableElement',\n\t\tthead: 'startTagTableElement',\n\t\ttr: 'startTagTableElement',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inCaption.end_tag_handlers = {\n\t\tcaption: 'endTagCaption',\n\t\ttable: 'endTagTable',\n\t\tbody: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttbody: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\ttfood: 'endTagIgnore',\n\t\tthead: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inCaption.processCharacters = function(data) {\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.inCaption.startTagTableElement = function(name, attributes) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\n\t\ttree.insertionMode.processEndTag('caption');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inCaption.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inCaption.endTagCaption = function(name) {\n\t\tif (!tree.openElements.inTableScope('caption')) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != 'caption') {\n\t\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\t\tgotName: \"caption\",\n\t\t\t\t\texpectedName: tree.currentStackItem().localName\n\t\t\t\t});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped('caption');\n\t\t\ttree.clearActiveFormattingElements();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t}\n\t};\n\n\tmodes.inCaption.endTagTable = function(name) {\n\t\ttree.parseError(\"unexpected-end-table-in-caption\");\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\n\t\ttree.insertionMode.processEndTag('caption');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inCaption.endTagIgnore = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inCaption.endTagOther = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inCell = Object.create(modes.base);\n\n\tmodes.inCell.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttd: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tth: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\ttr: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inCell.end_tag_handlers = {\n\t\ttd: 'endTagTableCell',\n\t\tth: 'endTagTableCell',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttable: 'endTagImply',\n\t\ttbody: 'endTagImply',\n\t\ttfoot: 'endTagImply',\n\t\tthead: 'endTagImply',\n\t\ttr: 'endTagImply',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inCell.processCharacters = function(data) {\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.inCell.startTagTableOther = function(name, attributes, selfClosing) {\n\t\tif (tree.openElements.inTableScope('td') || tree.openElements.inTableScope('th')) {\n\t\t\tthis.closeCell();\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inCell.endTagTableCell = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.generateImpliedEndTags(name);\n\t\t\tif (tree.currentStackItem().localName != name.toLowerCase()) {\n\t\t\t\ttree.parseError('unexpected-cell-end-tag', {name: name});\n\t\t\t\ttree.openElements.popUntilPopped(name);\n\t\t\t} else {\n\t\t\t\ttree.popElement();\n\t\t\t}\n\t\t\ttree.clearActiveFormattingElements();\n\t\t\ttree.setInsertionMode('inRow');\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.endTagIgnore = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inCell.endTagImply = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.closeCell();\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.endTagOther = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inCell.closeCell = function() {\n\t\tif (tree.openElements.inTableScope('td')) {\n\t\t\tthis.endTagTableCell('td');\n\t\t} else if (tree.openElements.inTableScope('th')) {\n\t\t\tthis.endTagTableCell('th');\n\t\t}\n\t};\n\n\n\tmodes.inColumnGroup = Object.create(modes.base);\n\n\tmodes.inColumnGroup.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcol: 'startTagCol',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inColumnGroup.end_tag_handlers = {\n\t\tcolgroup: 'endTagColgroup',\n\t\tcol: 'endTagCol',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inColumnGroup.ignoreEndTagColgroup = function() {\n\t\treturn tree.currentStackItem().localName == 'html';\n\t};\n\n\tmodes.inColumnGroup.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inColumnGroup.startTagCol = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inColumnGroup.startTagOther = function(name, attributes, selfClosing) {\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inColumnGroup.endTagColgroup = function(name) {\n\t\tif (this.ignoreEndTagColgroup()) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t}\n\t};\n\n\tmodes.inColumnGroup.endTagCol = function(name) {\n\t\ttree.parseError(\"no-end-tag\", {name: 'col'});\n\t};\n\n\tmodes.inColumnGroup.endTagOther = function(name) {\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name) ;\n\t};\n\n\tmodes.inForeignContent = Object.create(modes.base);\n\n\tmodes.inForeignContent.processStartTag = function(name, attributes, selfClosing) {\n\t\tif (['b', 'big', 'blockquote', 'body', 'br', 'center', 'code', 'dd', 'div', 'dl', 'dt', 'em', 'embed', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'i', 'img', 'li', 'listing', 'menu', 'meta', 'nobr', 'ol', 'p', 'pre', 'ruby', 's', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'table', 'tt', 'u', 'ul', 'var'].indexOf(name) != -1\n\t\t\t\t|| (name == 'font' && attributes.some(function(attr){ return ['color', 'face', 'size'].indexOf(attr.nodeName) >= 0 }))) {\n\t\t\ttree.parseError('unexpected-html-element-in-foreign-content', {name: name});\n\t\t\twhile (tree.currentStackItem().isForeign()\n\t\t\t\t&& !tree.currentStackItem().isHtmlIntegrationPoint()\n\t\t\t\t&& !tree.currentStackItem().isMathMLTextIntegrationPoint()) {\n\t\t\t\ttree.openElements.pop();\n\t\t\t}\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/1998/Math/MathML\") {\n\t\t\tattributes = tree.adjustMathMLAttributes(attributes);\n\t\t}\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/2000/svg\") {\n\t\t\tname = tree.adjustSVGTagNameCase(name);\n\t\t\tattributes = tree.adjustSVGAttributes(attributes);\n\t\t}\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, tree.currentStackItem().namespaceURI, selfClosing);\n\t};\n\n\tmodes.inForeignContent.processEndTag = function(name) {\n\t\tvar node = tree.currentStackItem();\n\t\tvar index = tree.openElements.length - 1;\n\t\tif (node.localName.toLowerCase() != name)\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\n\t\twhile (true) {\n\t\t\tif (index === 0)\n\t\t\t\tbreak;\n\t\t\tif (node.localName.toLowerCase() == name) {\n\t\t\t\twhile (tree.openElements.pop() != node);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tindex -= 1;\n\t\t\tnode = tree.openElements.item(index);\n\t\t\tif (node.isForeign()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\ttree.insertionMode.processEndTag(name);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inForeignContent.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError('invalid-codepoint');\n\t\t\treturn '\\uFFFD';\n\t\t});\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\n\t\t\ttree.framesetOk = false;\n\t\ttree.insertText(characters);\n\t};\n\n\tmodes.inHeadNoscript = Object.create(modes.base);\n\n\tmodes.inHeadNoscript.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tbasefont: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tbgsound: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tlink: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tmeta: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tnoframes: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tstyle: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\thead: 'startTagHeadNoscript',\n\t\tnoscript: 'startTagHeadNoscript',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inHeadNoscript.end_tag_handlers = {\n\t\tnoscript: 'endTagNoscript',\n\t\tbr: 'endTagBr',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inHeadNoscript.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inHeadNoscript.processComment = function(data) {\n\t\tmodes.inHead.processComment(data);\n\t};\n\n\tmodes.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.startTagHeadNoscript = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inHeadNoscript.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.endTagBr = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.endTagNoscript = function(name, attributes) {\n\t\ttree.popElement();\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\tmodes.inHeadNoscript.endTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inHeadNoscript.anythingElse = function() {\n\t\ttree.popElement();\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\n\tmodes.inFrameset = Object.create(modes.base);\n\n\tmodes.inFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tframeset: 'startTagFrameset',\n\t\tframe: 'startTagFrame',\n\t\tnoframes: 'startTagNoframes',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inFrameset.end_tag_handlers = {\n\t\tframeset: 'endTagFrameset',\n\t\tnoframes: 'endTagNoframes',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inFrameset.processCharacters = function(data) {\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\n\t};\n\n\tmodes.inFrameset.startTagFrameset = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagFrame = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagNoframes = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inFrameset.endTagFrameset = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'html') {\n\t\t\ttree.parseError(\"unexpected-frameset-in-frameset-innerhtml\");\n\t\t} else {\n\t\t\ttree.popElement();\n\t\t}\n\n\t\tif (!tree.context && tree.currentStackItem().localName != 'frameset') {\n\t\t\ttree.setInsertionMode('afterFrameset');\n\t\t}\n\t};\n\n\tmodes.inFrameset.endTagNoframes = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inFrameset.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inTable = Object.create(modes.base);\n\n\tmodes.inTable.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagCaption',\n\t\tcolgroup: 'startTagColgroup',\n\t\tcol: 'startTagCol',\n\t\ttable: 'startTagTable',\n\t\ttbody: 'startTagRowGroup',\n\t\ttfoot: 'startTagRowGroup',\n\t\tthead: 'startTagRowGroup',\n\t\ttd: 'startTagImplyTbody',\n\t\tth: 'startTagImplyTbody',\n\t\ttr: 'startTagImplyTbody',\n\t\tstyle: 'startTagStyleScript',\n\t\tscript: 'startTagStyleScript',\n\t\tinput: 'startTagInput',\n\t\tform: 'startTagForm',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inTable.end_tag_handlers = {\n\t\ttable: 'endTagTable',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttbody: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\ttfoot: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\tthead: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inTable.processCharacters =  function(data) {\n\t\tif (tree.currentStackItem().isFosterParenting()) {\n\t\t\tvar originalInsertionMode = tree.insertionModeName;\n\t\t\ttree.setInsertionMode('inTableText');\n\t\t\ttree.originalInsertionMode = originalInsertionMode;\n\t\t\ttree.insertionMode.processCharacters(data);\n\t\t} else {\n\t\t\ttree.redirectAttachToFosterParent = true;\n\t\t\tmodes.inBody.processCharacters(data);\n\t\t\ttree.redirectAttachToFosterParent = false;\n\t\t}\n\t};\n\n\tmodes.inTable.startTagCaption = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.activeFormattingElements.push(Marker);\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inCaption');\n\t};\n\n\tmodes.inTable.startTagColgroup = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inColumnGroup');\n\t};\n\n\tmodes.inTable.startTagCol = function(name, attributes) {\n\t\tthis.startTagColgroup('colgroup', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagRowGroup = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inTableBody');\n\t};\n\n\tmodes.inTable.startTagImplyTbody = function(name, attributes) {\n\t\tthis.startTagRowGroup('tbody', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagTable = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\",\n\t\t\t\t{startName: \"table\", endName: \"table\"});\n\t\ttree.insertionMode.processEndTag('table');\n\t\tif (!tree.context) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagStyleScript = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagInput = function(name, attributes) {\n\t\tfor (var key in attributes) {\n\t\t\tif (attributes[key].nodeName.toLowerCase() == 'type') {\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden') {\n\t\t\t\t\ttree.parseError(\"unexpected-hidden-input-in-table\");\n\t\t\t\t\ttree.insertElement(name, attributes);\n\t\t\t\t\ttree.openElements.pop();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.startTagOther(name, attributes);\n\t};\n\n\tmodes.inTable.startTagForm = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-form-in-table\");\n\t\tif (!tree.form) {\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.form = tree.currentStackItem();\n\t\t\ttree.openElements.pop();\n\t\t}\n\t};\n\n\tmodes.inTable.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError(\"unexpected-start-tag-implies-table-voodoo\", {name: name});\n\t\ttree.redirectAttachToFosterParent = true;\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t\ttree.redirectAttachToFosterParent = false;\n\t};\n\n\tmodes.inTable.endTagTable = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError(\"end-tag-too-early-named\", {gotName: 'table', expectedName: tree.currentStackItem().localName});\n\t\t\t}\n\n\t\t\ttree.openElements.popUntilPopped('table');\n\t\t\ttree.resetInsertionMode();\n\t\t} else {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTable.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t};\n\n\tmodes.inTable.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-implies-table-voodoo\", {name: name});\n\t\ttree.redirectAttachToFosterParent = true;\n\t\tmodes.inBody.processEndTag(name);\n\t\ttree.redirectAttachToFosterParent = false;\n\t};\n\n\tmodes.inTableText = Object.create(modes.base);\n\n\tmodes.inTableText.flushCharacters = function() {\n\t\tvar characters = tree.pendingTableCharacters.join('');\n\t\tif (!isAllWhitespace(characters)) {\n\t\t\ttree.redirectAttachToFosterParent = true;\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertText(characters);\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.redirectAttachToFosterParent = false;\n\t\t} else {\n\t\t\ttree.insertText(characters);\n\t\t}\n\t\ttree.pendingTableCharacters = [];\n\t};\n\n\tmodes.inTableText.processComment = function(data) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processComment(data);\n\t};\n\n\tmodes.inTableText.processEOF = function(data) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.inTableText.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!characters)\n\t\t\treturn;\n\t\ttree.pendingTableCharacters.push(characters);\n\t};\n\n\tmodes.inTableText.processStartTag = function(name, attributes, selfClosing) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inTableText.processEndTag = function(name, attributes) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEndTag(name, attributes);\n\t};\n\n\tmodes.inTableBody = Object.create(modes.base);\n\n\tmodes.inTableBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\ttr: 'startTagTr',\n\t\ttd: 'startTagTableCell',\n\t\tth: 'startTagTableCell',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inTableBody.end_tag_handlers = {\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTableRowGroup',\n\t\ttfoot: 'endTagTableRowGroup',\n\t\tthead: 'endTagTableRowGroup',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inTableBody.processCharacters = function(data) {\n\t\tmodes.inTable.processCharacters(data);\n\t};\n\n\tmodes.inTableBody.startTagTr = function(name, attributes) {\n\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inRow');\n\t};\n\n\tmodes.inTableBody.startTagTableCell = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-cell-in-table-body\", {name: name});\n\t\tthis.startTagTr('tr', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTableBody.startTagTableOther = function(name, attributes) {\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.startTagOther = function(name, attributes) {\n\t\tmodes.inTable.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTableBody.endTagTableRowGroup = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag-in-table-body', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.endTagTable = function(name) {\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-table-body\", {name: name});\n\t};\n\n\tmodes.inTableBody.endTagOther = function(name) {\n\t\tmodes.inTable.processEndTag(name);\n\t};\n\n\tmodes.inSelect = Object.create(modes.base);\n\n\tmodes.inSelect.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\toption: 'startTagOption',\n\t\toptgroup: 'startTagOptgroup',\n\t\tselect: 'startTagSelect',\n\t\tinput: 'startTagInput',\n\t\tkeygen: 'startTagInput',\n\t\ttextarea: 'startTagInput',\n\t\tscript: 'startTagScript',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inSelect.end_tag_handlers = {\n\t\toption: 'endTagOption',\n\t\toptgroup: 'endTagOptgroup',\n\t\tselect: 'endTagSelect',\n\t\tcaption: 'endTagTableElements',\n\t\ttable: 'endTagTableElements',\n\t\ttbody: 'endTagTableElements',\n\t\ttfoot: 'endTagTableElements',\n\t\tthead: 'endTagTableElements',\n\t\ttr: 'endTagTableElements',\n\t\ttd: 'endTagTableElements',\n\t\tth: 'endTagTableElements',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inSelect.processCharacters = function(buffer) {\n\t\tvar data = buffer.takeRemaining();\n\t\tdata = data.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!data)\n\t\t\treturn;\n\t\ttree.insertText(data);\n\t};\n\n\tmodes.inSelect.startTagOption = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inSelect.startTagOptgroup = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\tif (tree.currentStackItem().localName == 'optgroup')\n\t\t\ttree.popElement();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inSelect.endTagOption = function(name) {\n\t\tif (tree.currentStackItem().localName !== 'option') {\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t\t\treturn;\n\t\t}\n\t\ttree.popElement();\n\t};\n\n\tmodes.inSelect.endTagOptgroup = function(name) {\n\t\tif (tree.currentStackItem().localName == 'option' && tree.openElements.item(tree.openElements.length - 2).localName == 'optgroup') {\n\t\t\ttree.popElement();\n\t\t}\n\t\tif (tree.currentStackItem().localName == 'optgroup') {\n\t\t\ttree.popElement();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: 'optgroup'});\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagSelect = function(name) {\n\t\ttree.parseError(\"unexpected-select-in-select\");\n\t\tthis.endTagSelect('select');\n\t};\n\n\tmodes.inSelect.endTagSelect = function(name) {\n\t\tif (tree.openElements.inTableScope('select')) {\n\t\t\ttree.openElements.popUntilPopped('select');\n\t\t\ttree.resetInsertionMode();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagInput = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-input-in-select\");\n\t\tif (tree.openElements.inSelectScope('select')) {\n\t\t\tthis.endTagSelect('select');\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagScript = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inSelect.endTagTableElements = function(name) {\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagSelect('select');\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-select\", {name: name});\n\t};\n\n\tmodes.inSelect.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t};\n\n\tmodes.inSelectInTable = Object.create(modes.base);\n\n\tmodes.inSelectInTable.start_tag_handlers = {\n\t\tcaption: 'startTagTable',\n\t\ttable: 'startTagTable',\n\t\ttbody: 'startTagTable',\n\t\ttfoot: 'startTagTable',\n\t\tthead: 'startTagTable',\n\t\ttr: 'startTagTable',\n\t\ttd: 'startTagTable',\n\t\tth: 'startTagTable',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inSelectInTable.end_tag_handlers = {\n\t\tcaption: 'endTagTable',\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTable',\n\t\ttfoot: 'endTagTable',\n\t\tthead: 'endTagTable',\n\t\ttr: 'endTagTable',\n\t\ttd: 'endTagTable',\n\t\tth: 'endTagTable',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inSelectInTable.processCharacters = function(data) {\n\t\tmodes.inSelect.processCharacters(data);\n\t};\n\n\tmodes.inSelectInTable.startTagTable = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-table-element-start-tag-in-select-in-table\", {name: name});\n\t\tthis.endTagOther(\"select\");\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inSelectInTable.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inSelect.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inSelectInTable.endTagTable = function(name) {\n\t\ttree.parseError(\"unexpected-table-element-end-tag-in-select-in-table\", {name: name});\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagOther(\"select\");\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t}\n\t};\n\n\tmodes.inSelectInTable.endTagOther = function(name) {\n\t\tmodes.inSelect.processEndTag(name);\n\t};\n\n\tmodes.inRow = Object.create(modes.base);\n\n\tmodes.inRow.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\ttd: 'startTagTableCell',\n\t\tth: 'startTagTableCell',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\ttr: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inRow.end_tag_handlers = {\n\t\ttr: 'endTagTr',\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTableRowGroup',\n\t\ttfoot: 'endTagTableRowGroup',\n\t\tthead: 'endTagTableRowGroup',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inRow.processCharacters = function(data) {\n\t\tmodes.inTable.processCharacters(data);\n\t};\n\n\tmodes.inRow.startTagTableCell = function(name, attributes) {\n\t\ttree.openElements.popUntilTableRowScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inCell');\n\t\ttree.activeFormattingElements.push(Marker);\n\t};\n\n\tmodes.inRow.startTagTableOther = function(name, attributes) {\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\n\t\tthis.endTagTr('tr');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inRow.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inTable.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inRow.endTagTr = function(name) {\n\t\tif (this.ignoreEndTagTr()) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.openElements.popUntilTableRowScopeMarker();\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTableBody');\n\t\t}\n\t};\n\n\tmodes.inRow.endTagTable = function(name) {\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\n\t\tthis.endTagTr('tr');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inRow.endTagTableRowGroup = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagTr('tr');\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inRow.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-table-row\", {name: name});\n\t};\n\n\tmodes.inRow.endTagOther = function(name) {\n\t\tmodes.inTable.processEndTag(name);\n\t};\n\n\tmodes.inRow.ignoreEndTagTr = function() {\n\t\treturn !tree.openElements.inTableScope('tr');\n\t};\n\n\tmodes.afterAfterFrameset = Object.create(modes.base);\n\n\tmodes.afterAfterFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tnoframes: 'startTagNoFrames',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterAfterFrameset.processEOF = function() {};\n\n\tmodes.afterAfterFrameset.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.afterAfterFrameset.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tvar whitespace = \"\";\n\t\tfor (var i = 0; i < characters.length; i++) {\n\t\t\tvar ch = characters[i];\n\t\t\tif (isWhitespace(ch))\n\t\t\t\twhitespace += ch;\n\t\t}\n\t\tif (whitespace) {\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertText(whitespace);\n\t\t}\n\t\tif (whitespace.length < characters.length)\n\t\t\ttree.parseError('expected-eof-but-got-char');\n\t};\n\n\tmodes.afterAfterFrameset.startTagNoFrames = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterAfterFrameset.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError('expected-eof-but-got-start-tag', {name: name});\n\t};\n\n\tmodes.afterAfterFrameset.processEndTag = function(name, attributes) {\n\t\ttree.parseError('expected-eof-but-got-end-tag', {name: name});\n\t};\n\n\tmodes.text = Object.create(modes.base);\n\n\tmodes.text.start_tag_handlers = {\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.text.end_tag_handlers = {\n\t\tscript: 'endTagScript',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.text.processCharacters = function(buffer) {\n\t\tif (tree.shouldSkipLeadingNewline) {\n\t\t\ttree.shouldSkipLeadingNewline = false;\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\n\t\t}\n\t\tvar data = buffer.takeRemaining();\n\t\tif (!data)\n\t\t\treturn;\n\t\ttree.insertText(data);\n\t};\n\n\tmodes.text.processEOF = function() {\n\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\",\n\t\t\t{name: tree.currentStackItem().localName});\n\t\ttree.openElements.pop();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.text.startTagOther = function(name) {\n\t\tthrow \"Tried to process start tag \" + name + \" in RCDATA/RAWTEXT mode\";\n\t};\n\n\tmodes.text.endTagScript = function(name) {\n\t\tvar node = tree.openElements.pop();\n\t\tassert.ok(node.localName == 'script');\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t};\n\n\tmodes.text.endTagOther = function(name) {\n\t\ttree.openElements.pop();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t};\n}\n\nTreeBuilder.prototype.setInsertionMode = function(name) {\n\tthis.insertionMode = this.insertionModes[name];\n\tthis.insertionModeName = name;\n};\nTreeBuilder.prototype.adoptionAgencyEndTag = function(name) {\n\tvar outerIterationLimit = 8;\n\tvar innerIterationLimit = 3;\n\tvar formattingElement;\n\n\tfunction isActiveFormattingElement(el) {\n\t\treturn el === formattingElement;\n\t}\n\n\tvar outerLoopCounter = 0;\n\n\twhile (outerLoopCounter++ < outerIterationLimit) {\n\t\tformattingElement = this.elementInActiveFormattingElements(name);\n\n\t\tif (!formattingElement || (this.openElements.contains(formattingElement) && !this.openElements.inScope(formattingElement.localName))) {\n\t\t\tthis.parseError('adoption-agency-1.1', {name: name});\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.openElements.contains(formattingElement)) {\n\t\t\tthis.parseError('adoption-agency-1.2', {name: name});\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\t\treturn true;\n\t\t}\n\t\tif (!this.openElements.inScope(formattingElement.localName)) {\n\t\t\tthis.parseError('adoption-agency-4.4', {name: name});\n\t\t}\n\n\t\tif (formattingElement != this.currentStackItem()) {\n\t\t\tthis.parseError('adoption-agency-1.3', {name: name});\n\t\t}\n\t\tvar furthestBlock = this.openElements.furthestBlockForFormattingElement(formattingElement.node);\n\n\t\tif (!furthestBlock) {\n\t\t\tthis.openElements.remove_openElements_until(isActiveFormattingElement);\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\t\treturn true;\n\t\t}\n\n\t\tvar afeIndex = this.openElements.elements.indexOf(formattingElement);\n\t\tvar commonAncestor = this.openElements.item(afeIndex - 1);\n\n\t\tvar bookmark = this.activeFormattingElements.indexOf(formattingElement);\n\n\t\tvar node = furthestBlock;\n\t\tvar lastNode = furthestBlock;\n\t\tvar index = this.openElements.elements.indexOf(node);\n\n\t\tvar innerLoopCounter = 0;\n\t\twhile (innerLoopCounter++ < innerIterationLimit) {\n\t\t\tindex -= 1;\n\t\t\tnode = this.openElements.item(index);\n\t\t\tif (this.activeFormattingElements.indexOf(node) < 0) {\n\t\t\t\tthis.openElements.elements.splice(index, 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (node == formattingElement)\n\t\t\t\tbreak;\n\n\t\t\tif (lastNode == furthestBlock)\n\t\t\t\tbookmark = this.activeFormattingElements.indexOf(node) + 1;\n\n\t\t\tvar clone = this.createElement(node.namespaceURI, node.localName, node.attributes);\n\t\t\tvar newNode = new StackItem(node.namespaceURI, node.localName, node.attributes, clone);\n\n\t\t\tthis.activeFormattingElements[this.activeFormattingElements.indexOf(node)] = newNode;\n\t\t\tthis.openElements.elements[this.openElements.elements.indexOf(node)] = newNode;\n\n\t\t\tnode = newNode;\n\t\t\tthis.detachFromParent(lastNode.node);\n\t\t\tthis.attachNode(lastNode.node, node.node);\n\t\t\tlastNode = node;\n\t\t}\n\n\t\tthis.detachFromParent(lastNode.node);\n\t\tif (commonAncestor.isFosterParenting()) {\n\t\t\tthis.insertIntoFosterParent(lastNode.node);\n\t\t} else {\n\t\t\tthis.attachNode(lastNode.node, commonAncestor.node);\n\t\t}\n\n\t\tvar clone = this.createElement(\"http://www.w3.org/1999/xhtml\", formattingElement.localName, formattingElement.attributes);\n\t\tvar formattingClone = new StackItem(formattingElement.namespaceURI, formattingElement.localName, formattingElement.attributes, clone);\n\n\t\tthis.reparentChildren(furthestBlock.node, clone);\n\t\tthis.attachNode(clone, furthestBlock.node);\n\n\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\tthis.activeFormattingElements.splice(Math.min(bookmark, this.activeFormattingElements.length), 0, formattingClone);\n\n\t\tthis.openElements.remove(formattingElement);\n\t\tthis.openElements.elements.splice(this.openElements.elements.indexOf(furthestBlock) + 1, 0, formattingClone);\n\t}\n\n\treturn true;\n};\n\nTreeBuilder.prototype.start = function() {\n\tthrow \"Not mplemented\";\n};\n\nTreeBuilder.prototype.startTokenization = function(tokenizer) {\n\tthis.tokenizer = tokenizer;\n\tthis.compatMode = \"no quirks\";\n\tthis.originalInsertionMode = \"initial\";\n\tthis.framesetOk = true;\n\tthis.openElements = new ElementStack();\n\tthis.activeFormattingElements = [];\n\tthis.start();\n\tif (this.context) {\n\t\tswitch(this.context) {\n\t\tcase 'title':\n\t\tcase 'textarea':\n\t\t\tthis.tokenizer.setState(Tokenizer.RCDATA);\n\t\t\tbreak;\n\t\tcase 'style':\n\t\tcase 'xmp':\n\t\tcase 'iframe':\n\t\tcase 'noembed':\n\t\tcase 'noframes':\n\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\t\t\tbreak;\n\t\tcase 'script':\n\t\t\tthis.tokenizer.setState(Tokenizer.SCRIPT_DATA);\n\t\t\tbreak;\n\t\tcase 'noscript':\n\t\t\tif (this.scriptingEnabled)\n\t\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\t\t\tbreak;\n\t\tcase 'plaintext':\n\t\t\tthis.tokenizer.setState(Tokenizer.PLAINTEXT);\n\t\t\tbreak;\n\t\t}\n\t\tthis.insertHtmlElement();\n\t\tthis.resetInsertionMode();\n\t} else {\n\t\tthis.setInsertionMode('initial');\n\t}\n};\n\nTreeBuilder.prototype.processToken = function(token) {\n\tthis.selfClosingFlagAcknowledged = false;\n\n\tvar currentNode = this.openElements.top || null;\n\tvar insertionMode;\n\tif (!currentNode || !currentNode.isForeign() ||\n\t\t(currentNode.isMathMLTextIntegrationPoint() &&\n\t\t\t((token.type == 'StartTag' &&\n\t\t\t\t\t!(token.name in {mglyph:0, malignmark:0})) ||\n\t\t\t\t(token.type === 'Characters'))\n\t\t) ||\n\t\t(currentNode.namespaceURI == \"http://www.w3.org/1998/Math/MathML\" &&\n\t\t\tcurrentNode.localName == 'annotation-xml' &&\n\t\t\ttoken.type == 'StartTag' && token.name == 'svg'\n\t\t) ||\n\t\t(currentNode.isHtmlIntegrationPoint() &&\n\t\t\ttoken.type in {StartTag:0, Characters:0}\n\t\t) ||\n\t\ttoken.type == 'EOF'\n\t) {\n\t\tinsertionMode = this.insertionMode;\n\t} else {\n\t\tinsertionMode = this.insertionModes.inForeignContent;\n\t}\n\tswitch(token.type) {\n\tcase 'Characters':\n\t\tvar buffer = new CharacterBuffer(token.data);\n\t\tinsertionMode.processCharacters(buffer);\n\t\tbreak;\n\tcase 'Comment':\n\t\tinsertionMode.processComment(token.data);\n\t\tbreak;\n\tcase 'StartTag':\n\t\tinsertionMode.processStartTag(token.name, token.data, token.selfClosing);\n\t\tbreak;\n\tcase 'EndTag':\n\t\tinsertionMode.processEndTag(token.name);\n\t\tbreak;\n\tcase 'Doctype':\n\t\tinsertionMode.processDoctype(token.name, token.publicId, token.systemId, token.forceQuirks);\n\t\tbreak;\n\tcase 'EOF':\n\t\tinsertionMode.processEOF();\n\t\tbreak;\n\t}\n};\nTreeBuilder.prototype.isCdataSectionAllowed = function() {\n\treturn this.openElements.length > 0 && this.currentStackItem().isForeign();\n};\nTreeBuilder.prototype.isSelfClosingFlagAcknowledged = function() {\n\treturn this.selfClosingFlagAcknowledged;\n};\n\nTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.attachNode = function(child, parent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.detachFromParent = function(node) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertHtmlElement = function(attributes) {\n\tvar root = this.createElement(\"http://www.w3.org/1999/xhtml\", 'html', attributes);\n\tthis.attachNode(root, this.document);\n\tthis.openElements.pushHtmlElement(new StackItem(\"http://www.w3.org/1999/xhtml\", 'html', attributes, root));\n\treturn root;\n};\n\nTreeBuilder.prototype.insertHeadElement = function(attributes) {\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"head\", attributes);\n\tthis.head = new StackItem(\"http://www.w3.org/1999/xhtml\", \"head\", attributes, element);\n\tthis.attachNode(element, this.openElements.top.node);\n\tthis.openElements.pushHeadElement(this.head);\n\treturn element;\n};\n\nTreeBuilder.prototype.insertBodyElement = function(attributes) {\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"body\", attributes);\n\tthis.attachNode(element, this.openElements.top.node);\n\tthis.openElements.pushBodyElement(new StackItem(\"http://www.w3.org/1999/xhtml\", \"body\", attributes, element));\n\treturn element;\n};\n\nTreeBuilder.prototype.insertIntoFosterParent = function(node) {\n\tvar tableIndex = this.openElements.findIndex('table');\n\tvar tableElement = this.openElements.item(tableIndex).node;\n\tif (tableIndex === 0)\n\t\treturn this.attachNode(node, tableElement);\n\tthis.attachNodeToFosterParent(node, tableElement, this.openElements.item(tableIndex - 1).node);\n};\n\nTreeBuilder.prototype.insertElement = function(name, attributes, namespaceURI, selfClosing) {\n\tif (!namespaceURI)\n\t\tnamespaceURI = \"http://www.w3.org/1999/xhtml\";\n\tvar element = this.createElement(namespaceURI, name, attributes);\n\tif (this.shouldFosterParent())\n\t\tthis.insertIntoFosterParent(element);\n\telse\n\t\tthis.attachNode(element, this.openElements.top.node);\n\tif (!selfClosing)\n\t\tthis.openElements.push(new StackItem(namespaceURI, name, attributes, element));\n};\n\nTreeBuilder.prototype.insertFormattingElement = function(name, attributes) {\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\");\n\tthis.appendElementToActiveFormattingElements(this.currentStackItem());\n};\n\nTreeBuilder.prototype.insertSelfClosingElement = function(name, attributes) {\n\tthis.selfClosingFlagAcknowledged = true;\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\", true);\n};\n\nTreeBuilder.prototype.insertForeignElement = function(name, attributes, namespaceURI, selfClosing) {\n\tif (selfClosing)\n\t\tthis.selfClosingFlagAcknowledged = true;\n\tthis.insertElement(name, attributes, namespaceURI, selfClosing);\n};\n\nTreeBuilder.prototype.insertComment = function(data, parent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertText = function(data) {\n\tthrow new Error(\"Not implemented\");\n};\nTreeBuilder.prototype.currentStackItem = function() {\n\treturn this.openElements.top;\n};\nTreeBuilder.prototype.popElement = function() {\n\treturn this.openElements.pop();\n};\nTreeBuilder.prototype.shouldFosterParent = function() {\n\treturn this.redirectAttachToFosterParent && this.currentStackItem().isFosterParenting();\n};\nTreeBuilder.prototype.generateImpliedEndTags = function(exclude) {\n\tvar name = this.openElements.top.localName;\n\tif (['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'].indexOf(name) != -1 && name != exclude) {\n\t\tthis.popElement();\n\t\tthis.generateImpliedEndTags(exclude);\n\t}\n};\nTreeBuilder.prototype.reconstructActiveFormattingElements = function() {\n\tif (this.activeFormattingElements.length === 0)\n\t\treturn;\n\tvar i = this.activeFormattingElements.length - 1;\n\tvar entry = this.activeFormattingElements[i];\n\tif (entry == Marker || this.openElements.contains(entry))\n\t\treturn;\n\n\twhile (entry != Marker && !this.openElements.contains(entry)) {\n\t\ti -= 1;\n\t\tentry = this.activeFormattingElements[i];\n\t\tif (!entry)\n\t\t\tbreak;\n\t}\n\n\twhile (true) {\n\t\ti += 1;\n\t\tentry = this.activeFormattingElements[i];\n\t\tthis.insertElement(entry.localName, entry.attributes);\n\t\tvar element = this.currentStackItem();\n\t\tthis.activeFormattingElements[i] = element;\n\t\tif (element == this.activeFormattingElements[this.activeFormattingElements.length -1])\n\t\t\tbreak;\n\t}\n\n};\nTreeBuilder.prototype.ensureNoahsArkCondition = function(item) {\n\tvar kNoahsArkCapacity = 3;\n\tif (this.activeFormattingElements.length < kNoahsArkCapacity)\n\t\treturn;\n\tvar candidates = [];\n\tvar newItemAttributeCount = item.attributes.length;\n\tfor (var i = this.activeFormattingElements.length - 1; i >= 0; i--) {\n\t\tvar candidate = this.activeFormattingElements[i];\n\t\tif (candidate === Marker)\n\t\t\tbreak;\n\t\tif (item.localName !== candidate.localName || item.namespaceURI !== candidate.namespaceURI)\n\t\t\tcontinue;\n\t\tif (candidate.attributes.length != newItemAttributeCount)\n\t\t\tcontinue;\n\t\tcandidates.push(candidate);\n\t}\n\tif (candidates.length < kNoahsArkCapacity)\n\t\treturn;\n\n\tvar remainingCandidates = [];\n\tvar attributes = item.attributes;\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\n\t\tfor (var j = 0; j < candidates.length; j++) {\n\t\t\tvar candidate = candidates[j];\n\t\t\tvar candidateAttribute = getAttribute(candidate, attribute.nodeName);\n\t\t\tif (candidateAttribute && candidateAttribute.nodeValue === attribute.nodeValue)\n\t\t\t\tremainingCandidates.push(candidate);\n\t\t}\n\t\tif (remainingCandidates.length < kNoahsArkCapacity)\n\t\t\treturn;\n\t\tcandidates = remainingCandidates;\n\t\tremainingCandidates = [];\n\t}\n\tfor (var i = kNoahsArkCapacity - 1; i < candidates.length; i++)\n\t\tthis.removeElementFromActiveFormattingElements(candidates[i]);\n};\nTreeBuilder.prototype.appendElementToActiveFormattingElements = function(item) {\n\tthis.ensureNoahsArkCondition(item);\n\tthis.activeFormattingElements.push(item);\n};\nTreeBuilder.prototype.removeElementFromActiveFormattingElements = function(item) {\n\tvar index = this.activeFormattingElements.indexOf(item);\n\tif (index >= 0)\n\t\tthis.activeFormattingElements.splice(index, 1);\n};\n\nTreeBuilder.prototype.elementInActiveFormattingElements = function(name) {\n\tvar els = this.activeFormattingElements;\n\tfor (var i = els.length - 1; i >= 0; i--) {\n\t\tif (els[i] == Marker) break;\n\t\tif (els[i].localName == name) return els[i];\n\t}\n\treturn false;\n};\n\nTreeBuilder.prototype.clearActiveFormattingElements = function() {\n    while (!(this.activeFormattingElements.length === 0 || this.activeFormattingElements.pop() == Marker));\n};\n\nTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\n\tthrow new Error(\"Not implemented\");\n};\nTreeBuilder.prototype.setFragmentContext = function(context) {\n\tthis.context = context;\n};\nTreeBuilder.prototype.parseError = function(code, args) {\n\tif (!this.errorHandler)\n\t\treturn;\n\tvar message = formatMessage(messages[code], args);\n\tthis.errorHandler.error(message, this.tokenizer._inputStream.location(), code);\n};\nTreeBuilder.prototype.resetInsertionMode = function() {\n\tvar last = false;\n\tvar node = null;\n\tfor (var i = this.openElements.length - 1; i >= 0; i--) {\n\t\tnode = this.openElements.item(i);\n\t\tif (i === 0) {\n\t\t\tassert.ok(this.context);\n\t\t\tlast = true;\n\t\t\tnode = new StackItem(\"http://www.w3.org/1999/xhtml\", this.context, [], null);\n\t\t}\n\n\t\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\t\tif (node.localName === 'select')\n\t\t\t\treturn this.setInsertionMode('inSelect');\n\t\t\tif (node.localName === 'td' || node.localName === 'th')\n\t\t\t\treturn this.setInsertionMode('inCell');\n\t\t\tif (node.localName === 'tr')\n\t\t\t\treturn this.setInsertionMode('inRow');\n\t\t\tif (node.localName === 'tbody' || node.localName === 'thead' || node.localName === 'tfoot')\n\t\t\t\treturn this.setInsertionMode('inTableBody');\n\t\t\tif (node.localName === 'caption')\n\t\t\t\treturn this.setInsertionMode('inCaption');\n\t\t\tif (node.localName === 'colgroup')\n\t\t\t\treturn this.setInsertionMode('inColumnGroup');\n\t\t\tif (node.localName === 'table')\n\t\t\t\treturn this.setInsertionMode('inTable');\n\t\t\tif (node.localName === 'head' && !last)\n\t\t\t\treturn this.setInsertionMode('inHead');\n\t\t\tif (node.localName === 'body')\n\t\t\t\treturn this.setInsertionMode('inBody');\n\t\t\tif (node.localName === 'frameset')\n\t\t\t\treturn this.setInsertionMode('inFrameset');\n\t\t\tif (node.localName === 'html')\n\t\t\t\tif (!this.openElements.headElement)\n\t\t\t\t\treturn this.setInsertionMode('beforeHead');\n\t\t\t\telse\n\t\t\t\t\treturn this.setInsertionMode('afterHead');\n\t\t}\n\n\t\tif (last)\n\t\t\treturn this.setInsertionMode('inBody');\n\t}\n};\n\nTreeBuilder.prototype.processGenericRCDATAStartTag = function(name, attributes) {\n\tthis.insertElement(name, attributes);\n\tthis.tokenizer.setState(Tokenizer.RCDATA);\n\tthis.originalInsertionMode = this.insertionModeName;\n\tthis.setInsertionMode('text');\n};\n\nTreeBuilder.prototype.processGenericRawTextStartTag = function(name, attributes) {\n\tthis.insertElement(name, attributes);\n\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\tthis.originalInsertionMode = this.insertionModeName;\n\tthis.setInsertionMode('text');\n};\n\nTreeBuilder.prototype.adjustMathMLAttributes = function(attributes) {\n\tattributes.forEach(function(a) {\n\t\ta.namespaceURI = \"http://www.w3.org/1998/Math/MathML\";\n\t\tif (constants.MATHMLAttributeMap[a.nodeName])\n\t\t\ta.nodeName = constants.MATHMLAttributeMap[a.nodeName];\n\t});\n\treturn attributes;\n};\n\nTreeBuilder.prototype.adjustSVGTagNameCase = function(name) {\n\treturn constants.SVGTagMap[name] || name;\n};\n\nTreeBuilder.prototype.adjustSVGAttributes = function(attributes) {\n\tattributes.forEach(function(a) {\n\t\ta.namespaceURI = \"http://www.w3.org/2000/svg\";\n\t\tif (constants.SVGAttributeMap[a.nodeName])\n\t\t\ta.nodeName = constants.SVGAttributeMap[a.nodeName];\n\t});\n\treturn attributes;\n};\n\nTreeBuilder.prototype.adjustForeignAttributes = function(attributes) {\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\t\tvar adjusted = constants.ForeignAttributeMap[attribute.nodeName];\n\t\tif (adjusted) {\n\t\t\tattribute.nodeName = adjusted.localName;\n\t\t\tattribute.prefix = adjusted.prefix;\n\t\t\tattribute.namespaceURI = adjusted.namespaceURI;\n\t\t}\n\t}\n\treturn attributes;\n};\n\nfunction formatMessage(format, args) {\n\treturn format.replace(new RegExp('{[0-9a-z-]+}', 'gi'), function(match) {\n\t\treturn args[match.slice(1, -1)] || match;\n\t});\n}\n\nexports.TreeBuilder = TreeBuilder;\n\n},\n{\"./ElementStack\":1,\"./StackItem\":4,\"./Tokenizer\":5,\"./constants\":7,\"./messages.json\":8,\"assert\":13,\"events\":16}],\n7:[function(_dereq_,module,exports){\nexports.SVGTagMap = {\n\t\"altglyph\": \"altGlyph\",\n\t\"altglyphdef\": \"altGlyphDef\",\n\t\"altglyphitem\": \"altGlyphItem\",\n\t\"animatecolor\": \"animateColor\",\n\t\"animatemotion\": \"animateMotion\",\n\t\"animatetransform\": \"animateTransform\",\n\t\"clippath\": \"clipPath\",\n\t\"feblend\": \"feBlend\",\n\t\"fecolormatrix\": \"feColorMatrix\",\n\t\"fecomponenttransfer\": \"feComponentTransfer\",\n\t\"fecomposite\": \"feComposite\",\n\t\"feconvolvematrix\": \"feConvolveMatrix\",\n\t\"fediffuselighting\": \"feDiffuseLighting\",\n\t\"fedisplacementmap\": \"feDisplacementMap\",\n\t\"fedistantlight\": \"feDistantLight\",\n\t\"feflood\": \"feFlood\",\n\t\"fefunca\": \"feFuncA\",\n\t\"fefuncb\": \"feFuncB\",\n\t\"fefuncg\": \"feFuncG\",\n\t\"fefuncr\": \"feFuncR\",\n\t\"fegaussianblur\": \"feGaussianBlur\",\n\t\"feimage\": \"feImage\",\n\t\"femerge\": \"feMerge\",\n\t\"femergenode\": \"feMergeNode\",\n\t\"femorphology\": \"feMorphology\",\n\t\"feoffset\": \"feOffset\",\n\t\"fepointlight\": \"fePointLight\",\n\t\"fespecularlighting\": \"feSpecularLighting\",\n\t\"fespotlight\": \"feSpotLight\",\n\t\"fetile\": \"feTile\",\n\t\"feturbulence\": \"feTurbulence\",\n\t\"foreignobject\": \"foreignObject\",\n\t\"glyphref\": \"glyphRef\",\n\t\"lineargradient\": \"linearGradient\",\n\t\"radialgradient\": \"radialGradient\",\n\t\"textpath\": \"textPath\"\n};\n\nexports.MATHMLAttributeMap = {\n\tdefinitionurl: 'definitionURL'\n};\n\nexports.SVGAttributeMap = {\n\tattributename:\t'attributeName',\n\tattributetype:\t'attributeType',\n\tbasefrequency:\t'baseFrequency',\n\tbaseprofile:\t'baseProfile',\n\tcalcmode:\t'calcMode',\n\tclippathunits:\t'clipPathUnits',\n\tcontentscripttype:\t'contentScriptType',\n\tcontentstyletype:\t'contentStyleType',\n\tdiffuseconstant:\t'diffuseConstant',\n\tedgemode:\t'edgeMode',\n\texternalresourcesrequired:\t'externalResourcesRequired',\n\tfilterres:\t'filterRes',\n\tfilterunits:\t'filterUnits',\n\tglyphref:\t'glyphRef',\n\tgradienttransform:\t'gradientTransform',\n\tgradientunits:\t'gradientUnits',\n\tkernelmatrix:\t'kernelMatrix',\n\tkernelunitlength:\t'kernelUnitLength',\n\tkeypoints:\t'keyPoints',\n\tkeysplines:\t'keySplines',\n\tkeytimes:\t'keyTimes',\n\tlengthadjust:\t'lengthAdjust',\n\tlimitingconeangle:\t'limitingConeAngle',\n\tmarkerheight:\t'markerHeight',\n\tmarkerunits:\t'markerUnits',\n\tmarkerwidth:\t'markerWidth',\n\tmaskcontentunits:\t'maskContentUnits',\n\tmaskunits:\t'maskUnits',\n\tnumoctaves:\t'numOctaves',\n\tpathlength:\t'pathLength',\n\tpatterncontentunits:\t'patternContentUnits',\n\tpatterntransform:\t'patternTransform',\n\tpatternunits:\t'patternUnits',\n\tpointsatx:\t'pointsAtX',\n\tpointsaty:\t'pointsAtY',\n\tpointsatz:\t'pointsAtZ',\n\tpreservealpha:\t'preserveAlpha',\n\tpreserveaspectratio:\t'preserveAspectRatio',\n\tprimitiveunits:\t'primitiveUnits',\n\trefx:\t'refX',\n\trefy:\t'refY',\n\trepeatcount:\t'repeatCount',\n\trepeatdur:\t'repeatDur',\n\trequiredextensions:\t'requiredExtensions',\n\trequiredfeatures:\t'requiredFeatures',\n\tspecularconstant:\t'specularConstant',\n\tspecularexponent:\t'specularExponent',\n\tspreadmethod:\t'spreadMethod',\n\tstartoffset:\t'startOffset',\n\tstddeviation:\t'stdDeviation',\n\tstitchtiles:\t'stitchTiles',\n\tsurfacescale:\t'surfaceScale',\n\tsystemlanguage:\t'systemLanguage',\n\ttablevalues:\t'tableValues',\n\ttargetx:\t'targetX',\n\ttargety:\t'targetY',\n\ttextlength:\t'textLength',\n\tviewbox:\t'viewBox',\n\tviewtarget:\t'viewTarget',\n\txchannelselector:\t'xChannelSelector',\n\tychannelselector:\t'yChannelSelector',\n\tzoomandpan:\t'zoomAndPan'\n};\n\nexports.ForeignAttributeMap = {\n\t\"xlink:actuate\": {prefix: \"xlink\", localName: \"actuate\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:arcrole\": {prefix: \"xlink\", localName: \"arcrole\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:href\": {prefix: \"xlink\", localName: \"href\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:role\": {prefix: \"xlink\", localName: \"role\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:show\": {prefix: \"xlink\", localName: \"show\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:title\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:type\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xml:base\": {prefix: \"xml\", localName: \"base\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:lang\": {prefix: \"xml\", localName: \"lang\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:space\": {prefix: \"xml\", localName: \"space\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xmlns\": {prefix: null, localName: \"xmlns\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n\t\"xmlns:xlink\": {prefix: \"xmlns\", localName: \"xlink\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n};\n},\n{}],\n8:[function(_dereq_,module,exports){\nmodule.exports={\n\t\"null-character\":\n\t\t\"Null character in input stream, replaced with U+FFFD.\",\n\t\"invalid-codepoint\":\n\t\t\"Invalid codepoint in stream\",\n\t\"incorrectly-placed-solidus\":\n\t\t\"Solidus (/) incorrectly placed in tag.\",\n\t\"incorrect-cr-newline-entity\":\n\t\t\"Incorrect CR newline entity, replaced with LF.\",\n\t\"illegal-windows-1252-entity\":\n\t\t\"Entity used with illegal number (windows-1252 reference).\",\n\t\"cant-convert-numeric-entity\":\n\t\t\"Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).\",\n\t\"invalid-numeric-entity-replaced\":\n\t\t\"Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.\",\n\t\"numeric-entity-without-semicolon\":\n\t\t\"Numeric entity didn't end with ';'.\",\n\t\"expected-numeric-entity-but-got-eof\":\n\t\t\"Numeric entity expected. Got end of file instead.\",\n\t\"expected-numeric-entity\":\n\t\t\"Numeric entity expected but none found.\",\n\t\"named-entity-without-semicolon\":\n\t\t\"Named entity didn't end with ';'.\",\n\t\"expected-named-entity\":\n\t\t\"Named entity expected. Got none.\",\n\t\"attributes-in-end-tag\":\n\t\t\"End tag contains unexpected attributes.\",\n\t\"self-closing-flag-on-end-tag\":\n\t\t\"End tag contains unexpected self-closing flag.\",\n\t\"bare-less-than-sign-at-eof\":\n\t\t\"End of file after <.\",\n\t\"expected-tag-name-but-got-right-bracket\":\n\t\t\"Expected tag name. Got '>' instead.\",\n\t\"expected-tag-name-but-got-question-mark\":\n\t\t\"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)\",\n\t\"expected-tag-name\":\n\t\t\"Expected tag name. Got something else instead.\",\n\t\"expected-closing-tag-but-got-right-bracket\":\n\t\t\"Expected closing tag. Got '>' instead. Ignoring '</>'.\",\n\t\"expected-closing-tag-but-got-eof\":\n\t\t\"Expected closing tag. Unexpected end of file.\",\n\t\"expected-closing-tag-but-got-char\":\n\t\t\"Expected closing tag. Unexpected character '{data}' found.\",\n\t\"eof-in-tag-name\":\n\t\t\"Unexpected end of file in the tag name.\",\n\t\"expected-attribute-name-but-got-eof\":\n\t\t\"Unexpected end of file. Expected attribute name instead.\",\n\t\"eof-in-attribute-name\":\n\t\t\"Unexpected end of file in attribute name.\",\n\t\"invalid-character-in-attribute-name\":\n\t\t\"Invalid character in attribute name.\",\n\t\"duplicate-attribute\":\n\t\t\"Dropped duplicate attribute '{name}' on tag.\",\n\t\"expected-end-of-tag-but-got-eof\":\n\t\t\"Unexpected end of file. Expected = or end of tag.\",\n\t\"expected-attribute-value-but-got-eof\":\n\t\t\"Unexpected end of file. Expected attribute value.\",\n\t\"expected-attribute-value-but-got-right-bracket\":\n\t\t\"Expected attribute value. Got '>' instead.\",\n\t\"unexpected-character-in-unquoted-attribute-value\":\n\t\t\"Unexpected character in unquoted attribute\",\n\t\"invalid-character-after-attribute-name\":\n\t\t\"Unexpected character after attribute name.\",\n\t\"unexpected-character-after-attribute-value\":\n\t\t\"Unexpected character after attribute value.\",\n\t\"eof-in-attribute-value-double-quote\":\n\t\t\"Unexpected end of file in attribute value (\\\").\",\n\t\"eof-in-attribute-value-single-quote\":\n\t\t\"Unexpected end of file in attribute value (').\",\n\t\"eof-in-attribute-value-no-quotes\":\n\t\t\"Unexpected end of file in attribute value.\",\n\t\"eof-after-attribute-value\":\n\t\t\"Unexpected end of file after attribute value.\",\n\t\"unexpected-eof-after-solidus-in-tag\":\n\t\t\"Unexpected end of file in tag. Expected >.\",\n\t\"unexpected-character-after-solidus-in-tag\":\n\t\t\"Unexpected character after / in tag. Expected >.\",\n\t\"expected-dashes-or-doctype\":\n\t\t\"Expected '--' or 'DOCTYPE'. Not found.\",\n\t\"unexpected-bang-after-double-dash-in-comment\":\n\t\t\"Unexpected ! after -- in comment.\",\n\t\"incorrect-comment\":\n\t\t\"Incorrect comment.\",\n\t\"eof-in-comment\":\n\t\t\"Unexpected end of file in comment.\",\n\t\"eof-in-comment-end-dash\":\n\t\t\"Unexpected end of file in comment (-).\",\n\t\"unexpected-dash-after-double-dash-in-comment\":\n\t\t\"Unexpected '-' after '--' found in comment.\",\n\t\"eof-in-comment-double-dash\":\n\t\t\"Unexpected end of file in comment (--).\",\n\t\"eof-in-comment-end-bang-state\":\n\t\t\"Unexpected end of file in comment.\",\n\t\"unexpected-char-in-comment\":\n\t\t\"Unexpected character in comment found.\",\n\t\"need-space-after-doctype\":\n\t\t\"No space after literal string 'DOCTYPE'.\",\n\t\"expected-doctype-name-but-got-right-bracket\":\n\t\t\"Unexpected > character. Expected DOCTYPE name.\",\n\t\"expected-doctype-name-but-got-eof\":\n\t\t\"Unexpected end of file. Expected DOCTYPE name.\",\n\t\"eof-in-doctype-name\":\n\t\t\"Unexpected end of file in DOCTYPE name.\",\n\t\"eof-in-doctype\":\n\t\t\"Unexpected end of file in DOCTYPE.\",\n\t\"expected-space-or-right-bracket-in-doctype\":\n\t\t\"Expected space or '>'. Got '{data}'.\",\n\t\"unexpected-end-of-doctype\":\n\t\t\"Unexpected end of DOCTYPE.\",\n\t\"unexpected-char-in-doctype\":\n\t\t\"Unexpected character in DOCTYPE.\",\n\t\"eof-in-bogus-doctype\":\n\t\t\"Unexpected end of file in bogus doctype.\",\n\t\"eof-in-innerhtml\":\n\t\t\"Unexpected EOF in inner html mode.\",\n\t\"unexpected-doctype\":\n\t\t\"Unexpected DOCTYPE. Ignored.\",\n\t\"non-html-root\":\n\t\t\"html needs to be the first start tag.\",\n\t\"expected-doctype-but-got-eof\":\n\t\t\"Unexpected End of file. Expected DOCTYPE.\",\n\t\"unknown-doctype\":\n\t\t\"Erroneous DOCTYPE. Expected <!DOCTYPE html>.\",\n\t\"quirky-doctype\":\n\t\t\"Quirky doctype. Expected <!DOCTYPE html>.\",\n\t\"almost-standards-doctype\":\n\t\t\"Almost standards mode doctype. Expected <!DOCTYPE html>.\",\n\t\"obsolete-doctype\":\n\t\t\"Obsolete doctype. Expected <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-chars\":\n\t\t\"Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-start-tag\":\n\t\t\"Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-end-tag\":\n\t\t\"End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"end-tag-after-implied-root\":\n\t\t\"Unexpected end tag ({name}) after the (implied) root element.\",\n\t\"expected-named-closing-tag-but-got-eof\":\n\t\t\"Unexpected end of file. Expected end tag ({name}).\",\n\t\"two-heads-are-not-better-than-one\":\n\t\t\"Unexpected start tag head in existing head. Ignored.\",\n\t\"unexpected-end-tag\":\n\t\t\"Unexpected end tag ({name}). Ignored.\",\n\t\"unexpected-implied-end-tag\":\n\t\t\"End tag {name} implied, but there were open elements.\",\n\t\"unexpected-start-tag-out-of-my-head\":\n\t\t\"Unexpected start tag ({name}) that can be in head. Moved.\",\n\t\"unexpected-start-tag\":\n\t\t\"Unexpected start tag ({name}).\",\n\t\"missing-end-tag\":\n\t\t\"Missing end tag ({name}).\",\n\t\"missing-end-tags\":\n\t\t\"Missing end tags ({name}).\",\n\t\"unexpected-start-tag-implies-end-tag\":\n\t\t\"Unexpected start tag ({startName}) implies end tag ({endName}).\",\n\t\"unexpected-start-tag-treated-as\":\n\t\t\"Unexpected start tag ({originalName}). Treated as {newName}.\",\n\t\"deprecated-tag\":\n\t\t\"Unexpected start tag {name}. Don't use it!\",\n\t\"unexpected-start-tag-ignored\":\n\t\t\"Unexpected start tag {name}. Ignored.\",\n\t\"expected-one-end-tag-but-got-another\":\n\t\t\"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).\",\n\t\"end-tag-too-early\":\n\t\t\"End tag ({name}) seen too early. Expected other end tag.\",\n\t\"end-tag-too-early-named\":\n\t\t\"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.\",\n\t\"end-tag-too-early-ignored\":\n\t\t\"End tag ({name}) seen too early. Ignored.\",\n\t\"adoption-agency-1.1\":\n\t\t\"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.\",\n\t\"adoption-agency-1.2\":\n\t\t\"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.\",\n\t\"adoption-agency-1.3\":\n\t\t\"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.\",\n\t\"adoption-agency-4.4\":\n\t\t\"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.\",\n\t\"unexpected-end-tag-treated-as\":\n\t\t\"Unexpected end tag ({originalName}). Treated as {newName}.\",\n\t\"no-end-tag\":\n\t\t\"This element ({name}) has no end tag.\",\n\t\"unexpected-implied-end-tag-in-table\":\n\t\t\"Unexpected implied end tag ({name}) in the table phase.\",\n\t\"unexpected-implied-end-tag-in-table-body\":\n\t\t\"Unexpected implied end tag ({name}) in the table body phase.\",\n\t\"unexpected-char-implies-table-voodoo\":\n\t\t\"Unexpected non-space characters in table context caused voodoo mode.\",\n\t\"unexpected-hidden-input-in-table\":\n\t\t\"Unexpected input with type hidden in table context.\",\n\t\"unexpected-form-in-table\":\n\t\t\"Unexpected form in table context.\",\n\t\"unexpected-start-tag-implies-table-voodoo\":\n\t\t\"Unexpected start tag ({name}) in table context caused voodoo mode.\",\n\t\"unexpected-end-tag-implies-table-voodoo\":\n\t\t\"Unexpected end tag ({name}) in table context caused voodoo mode.\",\n\t\"unexpected-cell-in-table-body\":\n\t\t\"Unexpected table cell start tag ({name}) in the table body phase.\",\n\t\"unexpected-cell-end-tag\":\n\t\t\"Got table cell end tag ({name}) while required end tags are missing.\",\n\t\"unexpected-end-tag-in-table-body\":\n\t\t\"Unexpected end tag ({name}) in the table body phase. Ignored.\",\n\t\"unexpected-implied-end-tag-in-table-row\":\n\t\t\"Unexpected implied end tag ({name}) in the table row phase.\",\n\t\"unexpected-end-tag-in-table-row\":\n\t\t\"Unexpected end tag ({name}) in the table row phase. Ignored.\",\n\t\"unexpected-select-in-select\":\n\t\t\"Unexpected select start tag in the select phase treated as select end tag.\",\n\t\"unexpected-input-in-select\":\n\t\t\"Unexpected input start tag in the select phase.\",\n\t\"unexpected-start-tag-in-select\":\n\t\t\"Unexpected start tag token ({name}) in the select phase. Ignored.\",\n\t\"unexpected-end-tag-in-select\":\n\t\t\"Unexpected end tag ({name}) in the select phase. Ignored.\",\n\t\"unexpected-table-element-start-tag-in-select-in-table\":\n\t\t\"Unexpected table element start tag ({name}) in the select in table phase.\",\n\t\"unexpected-table-element-end-tag-in-select-in-table\":\n\t\t\"Unexpected table element end tag ({name}) in the select in table phase.\",\n\t\"unexpected-char-after-body\":\n\t\t\"Unexpected non-space characters in the after body phase.\",\n\t\"unexpected-start-tag-after-body\":\n\t\t\"Unexpected start tag token ({name}) in the after body phase.\",\n\t\"unexpected-end-tag-after-body\":\n\t\t\"Unexpected end tag token ({name}) in the after body phase.\",\n\t\"unexpected-char-in-frameset\":\n\t\t\"Unepxected characters in the frameset phase. Characters ignored.\",\n\t\"unexpected-start-tag-in-frameset\":\n\t\t\"Unexpected start tag token ({name}) in the frameset phase. Ignored.\",\n\t\"unexpected-frameset-in-frameset-innerhtml\":\n\t\t\"Unexpected end tag token (frameset in the frameset phase (innerHTML).\",\n\t\"unexpected-end-tag-in-frameset\":\n\t\t\"Unexpected end tag token ({name}) in the frameset phase. Ignored.\",\n\t\"unexpected-char-after-frameset\":\n\t\t\"Unexpected non-space characters in the after frameset phase. Ignored.\",\n\t\"unexpected-start-tag-after-frameset\":\n\t\t\"Unexpected start tag ({name}) in the after frameset phase. Ignored.\",\n\t\"unexpected-end-tag-after-frameset\":\n\t\t\"Unexpected end tag ({name}) in the after frameset phase. Ignored.\",\n\t\"expected-eof-but-got-char\":\n\t\t\"Unexpected non-space characters. Expected end of file.\",\n\t\"expected-eof-but-got-start-tag\":\n\t\t\"Unexpected start tag ({name}). Expected end of file.\",\n\t\"expected-eof-but-got-end-tag\":\n\t\t\"Unexpected end tag ({name}). Expected end of file.\",\n\t\"unexpected-end-table-in-caption\":\n\t\t\"Unexpected end table tag in caption. Generates implied end caption.\",\n\t\"end-html-in-innerhtml\": \n\t\t\"Unexpected html end tag in inner html mode.\",\n\t\"eof-in-table\":\n\t\t\"Unexpected end of file. Expected table content.\",\n\t\"eof-in-script\":\n\t\t\"Unexpected end of file. Expected script content.\",\n\t\"non-void-element-with-trailing-solidus\":\n\t\t\"Trailing solidus not allowed on element {name}.\",\n\t\"unexpected-html-element-in-foreign-content\":\n\t\t\"HTML start tag \\\"{name}\\\" in a foreign namespace context.\",\n\t\"unexpected-start-tag-in-table\":\n\t\t\"Unexpected {name}. Expected table content.\"\n}\n},\n{}],\n9:[function(_dereq_,module,exports){\nvar SAXTreeBuilder = _dereq_('./SAXTreeBuilder').SAXTreeBuilder;\nvar Tokenizer = _dereq_('../Tokenizer').Tokenizer;\nvar TreeParser = _dereq_('./TreeParser').TreeParser;\n\nfunction SAXParser() {\n\tthis.contentHandler = null;\n\tthis._errorHandler = null;\n\tthis._treeBuilder = new SAXTreeBuilder();\n\tthis._tokenizer = new Tokenizer(this._treeBuilder);\n\tthis._scriptingEnabled = false;\n}\n\nSAXParser.prototype.parse = function(source) {\n\tthis._tokenizer.tokenize(source);\n\tvar document = this._treeBuilder.document;\n\tif (document) {\n\t\tnew TreeParser(this.contentHandler).parse(document);\n\t}\n};\n\nSAXParser.prototype.parseFragment = function(source, context) {\n\tthis._treeBuilder.setFragmentContext(context);\n\tthis._tokenizer.tokenize(source);\n\tvar fragment = this._treeBuilder.getFragment();\n\tif (fragment) {\n\t\tnew TreeParser(this.contentHandler).parse(fragment);\n\t}\n};\n\nObject.defineProperty(SAXParser.prototype, 'scriptingEnabled', {\n\tget: function() {\n\t\treturn this._scriptingEnabled;\n\t},\n\tset: function(value) {\n\t\tthis._scriptingEnabled = value;\n\t\tthis._treeBuilder.scriptingEnabled = value;\n\t}\n});\n\nObject.defineProperty(SAXParser.prototype, 'errorHandler', {\n\tget: function() {\n\t\treturn this._errorHandler;\n\t},\n\tset: function(value) {\n\t\tthis._errorHandler = value;\n\t\tthis._treeBuilder.errorHandler = value;\n\t}\n});\n\nexports.SAXParser = SAXParser;\n\n},\n{\"../Tokenizer\":5,\"./SAXTreeBuilder\":10,\"./TreeParser\":11}],\n10:[function(_dereq_,module,exports){\nvar util = _dereq_('util');\nvar TreeBuilder = _dereq_('../TreeBuilder').TreeBuilder;\n\nfunction SAXTreeBuilder() {\n\tTreeBuilder.call(this);\n}\n\nutil.inherits(SAXTreeBuilder, TreeBuilder);\n\nSAXTreeBuilder.prototype.start = function(tokenizer) {\n\tthis.document = new Document(this.tokenizer);\n};\n\nSAXTreeBuilder.prototype.end = function() {\n\tthis.document.endLocator = this.tokenizer;\n};\n\nSAXTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\n\tvar doctype = new DTD(this.tokenizer, name, publicId, systemId);\n\tdoctype.endLocator = this.tokenizer;\n\tthis.document.appendChild(doctype);\n};\n\nSAXTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\n\tvar element = new Element(this.tokenizer, namespaceURI, localName, localName, attributes || []);\n\treturn element;\n};\n\nSAXTreeBuilder.prototype.insertComment = function(data, parent) {\n\tif (!parent)\n\t\tparent = this.currentStackItem();\n\tvar comment = new Comment(this.tokenizer, data);\n\tparent.appendChild(comment);\n};\n\nSAXTreeBuilder.prototype.appendCharacters = function(parent, data) {\n\tvar text = new Characters(this.tokenizer, data);\n\tparent.appendChild(text);\n};\n\nSAXTreeBuilder.prototype.insertText = function(data) {\n\tif (this.redirectAttachToFosterParent && this.openElements.top.isFosterParenting()) {\n\t\tvar tableIndex = this.openElements.findIndex('table');\n\t\tvar tableItem = this.openElements.item(tableIndex);\n\t\tvar table = tableItem.node;\n\t\tif (tableIndex === 0) {\n\t\t\treturn this.appendCharacters(table, data);\n\t\t}\n\t\tvar text = new Characters(this.tokenizer, data);\n\t\tvar parent = table.parentNode;\n\t\tif (parent) {\n\t\t\tparent.insertBetween(text, table.previousSibling, table);\n\t\t\treturn;\n\t\t}\n\t\tvar stackParent = this.openElements.item(tableIndex - 1).node;\n\t\tstackParent.appendChild(text);\n\t\treturn;\n\t}\n\tthis.appendCharacters(this.currentStackItem().node, data);\n};\n\nSAXTreeBuilder.prototype.attachNode = function(node, parent) {\n\tparent.appendChild(node);\n};\n\nSAXTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\n\tvar parent = table.parentNode;\n\tif (parent)\n\t\tparent.insertBetween(child, table.previousSibling, table);\n\telse\n\t\tstackParent.appendChild(child);\n};\n\nSAXTreeBuilder.prototype.detachFromParent = function(element) {\n\telement.detach();\n};\n\nSAXTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\n\tnewParent.appendChildren(oldParent.firstChild);\n};\n\nSAXTreeBuilder.prototype.getFragment = function() {\n\tvar fragment = new DocumentFragment();\n\tthis.reparentChildren(this.openElements.rootNode, fragment);\n\treturn fragment;\n};\n\nfunction getAttribute(node, name) {\n\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\tvar attribute = node.attributes[i];\n\t\tif (attribute.nodeName === name)\n\t\t\treturn attribute.nodeValue;\n\t}\n}\n\nSAXTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\t\tif (!getAttribute(element, attribute.nodeName))\n\t\t\telement.attributes.push(attribute);\n\t}\n};\n\nvar NodeType = {\n\tCDATA: 1,\n\tCHARACTERS: 2,\n\tCOMMENT: 3,\n\tDOCUMENT: 4,\n\tDOCUMENT_FRAGMENT: 5,\n\tDTD: 6,\n\tELEMENT: 7,\n\tENTITY: 8,\n\tIGNORABLE_WHITESPACE: 9,\n\tPROCESSING_INSTRUCTION: 10,\n\tSKIPPED_ENTITY: 11\n};\nfunction Node(locator) {\n\tif (!locator) {\n\t\tthis.columnNumber = -1;\n\t\tthis.lineNumber = -1;\n\t} else {\n\t\tthis.columnNumber = locator.columnNumber;\n\t\tthis.lineNumber = locator.lineNumber;\n\t}\n\tthis.parentNode = null;\n\tthis.nextSibling = null;\n\tthis.firstChild = null;\n}\nNode.prototype.visit = function(treeParser) {\n\tthrow new Error(\"Not Implemented\");\n};\nNode.prototype.revisit = function(treeParser) {\n\treturn;\n};\nNode.prototype.detach = function() {\n\tif (this.parentNode !== null) {\n\t\tthis.parentNode.removeChild(this);\n\t\tthis.parentNode = null;\n\t}\n};\n\nObject.defineProperty(Node.prototype, 'previousSibling', {\n\tget: function() {\n\t\tvar prev = null;\n\t\tvar next = this.parentNode.firstChild;\n\t\tfor(;;) {\n\t\t\tif (this == next) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t}\n});\n\n\nfunction ParentNode(locator) {\n\tNode.call(this, locator);\n\tthis.lastChild = null;\n\tthis._endLocator = null;\n}\n\nParentNode.prototype = Object.create(Node.prototype);\nParentNode.prototype.insertBefore = function(child, sibling) {\n\tif (!sibling) {\n\t\treturn this.appendChild(child);\n\t}\n\tchild.detach();\n\tchild.parentNode = this;\n\tif (this.firstChild == sibling) {\n\t\tchild.nextSibling = sibling;\n\t\tthis.firstChild = child;\n\t} else {\n\t\tvar prev = this.firstChild;\n\t\tvar next = this.firstChild.nextSibling;\n\t\twhile (next != sibling) {\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t\tprev.nextSibling = child;\n\t\tchild.nextSibling = next;\n\t}\n\treturn child;\n};\n\nParentNode.prototype.insertBetween = function(child, prev, next) {\n\tif (!next) {\n\t\treturn this.appendChild(child);\n\t}\n\tchild.detach();\n\tchild.parentNode = this;\n\tchild.nextSibling = next;\n\tif (!prev) {\n\t\tfirstChild = child;\n\t} else {\n\t\tprev.nextSibling = child;\n\t}\n\treturn child;\n};\nParentNode.prototype.appendChild = function(child) {\n\tchild.detach();\n\tchild.parentNode = this;\n\tif (!this.firstChild) {\n\t\tthis.firstChild = child;\n\t} else {\n\t\tthis.lastChild.nextSibling = child;\n\t}\n\tthis.lastChild = child;\n\treturn child;\n};\nParentNode.prototype.appendChildren = function(parent) {\n\tvar child = parent.firstChild;\n\tif (!child) {\n\t\treturn;\n\t}\n\tvar another = parent;\n\tif (!this.firstChild) {\n\t\tthis.firstChild = child;\n\t} else {\n\t\tthis.lastChild.nextSibling = child;\n\t}\n\tthis.lastChild = another.lastChild;\n\tdo {\n\t\tchild.parentNode = this;\n\t} while ((child = child.nextSibling));\n\tanother.firstChild = null;\n\tanother.lastChild = null;\n};\nParentNode.prototype.removeChild = function(node) {\n\tif (this.firstChild == node) {\n\t\tthis.firstChild = node.nextSibling;\n\t\tif (this.lastChild == node) {\n\t\t\tthis.lastChild = null;\n\t\t}\n\t} else {\n\t\tvar prev = this.firstChild;\n\t\tvar next = this.firstChild.nextSibling;\n\t\twhile (next != node) {\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t\tprev.nextSibling = node.nextSibling;\n\t\tif (this.lastChild == node) {\n\t\t\tthis.lastChild = prev;\n\t\t}\n\t}\n\tnode.parentNode = null;\n\treturn node;\n};\n\nObject.defineProperty(ParentNode.prototype, 'endLocator', {\n\tget: function() {\n\t\treturn this._endLocator;\n\t},\n\tset: function(endLocator) {\n\t\tthis._endLocator = {\n\t\t\tlineNumber: endLocator.lineNumber,\n\t\t\tcolumnNumber: endLocator.columnNumber\n\t\t};\n\t}\n});\nfunction Document (locator) {\n\tParentNode.call(this, locator);\n\tthis.nodeType = NodeType.DOCUMENT;\n}\n\nDocument.prototype = Object.create(ParentNode.prototype);\nDocument.prototype.visit = function(treeParser) {\n\ttreeParser.startDocument(this);\n};\nDocument.prototype.revisit = function(treeParser) {\n\ttreeParser.endDocument(this.endLocator);\n};\nfunction DocumentFragment() {\n\tParentNode.call(this, new Locator());\n\tthis.nodeType = NodeType.DOCUMENT_FRAGMENT;\n}\n\nDocumentFragment.prototype = Object.create(ParentNode.prototype);\nDocumentFragment.prototype.visit = function(treeParser) {\n};\nfunction Element(locator, uri, localName, qName, atts, prefixMappings) {\n\tParentNode.call(this, locator);\n\tthis.uri = uri;\n\tthis.localName = localName;\n\tthis.qName = qName;\n\tthis.attributes = atts;\n\tthis.prefixMappings = prefixMappings;\n\tthis.nodeType = NodeType.ELEMENT;\n}\n\nElement.prototype = Object.create(ParentNode.prototype);\nElement.prototype.visit = function(treeParser) {\n\tif (this.prefixMappings) {\n\t\tfor (var key in prefixMappings) {\n\t\t\tvar mapping = prefixMappings[key];\n\t\t\ttreeParser.startPrefixMapping(mapping.getPrefix(),\n\t\t\t\t\tmapping.getUri(), this);\n\t\t}\n\t}\n\ttreeParser.startElement(this.uri, this.localName, this.qName, this.attributes, this);\n};\nElement.prototype.revisit = function(treeParser) {\n\ttreeParser.endElement(this.uri, this.localName, this.qName, this.endLocator);\n\tif (this.prefixMappings) {\n\t\tfor (var key in prefixMappings) {\n\t\t\tvar mapping = prefixMappings[key];\n\t\t\ttreeParser.endPrefixMapping(mapping.getPrefix(), this.endLocator);\n\t\t}\n\t}\n};\nfunction Characters(locator, data){\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.CHARACTERS;\n}\n\nCharacters.prototype = Object.create(Node.prototype);\nCharacters.prototype.visit = function (treeParser) {\n\ttreeParser.characters(this.data, 0, this.data.length, this);\n};\nfunction IgnorableWhitespace(locator, data) {\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.IGNORABLE_WHITESPACE;\n}\n\nIgnorableWhitespace.prototype = Object.create(Node.prototype);\nIgnorableWhitespace.prototype.visit = function(treeParser) {\n\ttreeParser.ignorableWhitespace(this.data, 0, this.data.length, this);\n};\nfunction Comment(locator, data) {\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.COMMENT;\n}\n\nComment.prototype = Object.create(Node.prototype);\nComment.prototype.visit = function(treeParser) {\n\ttreeParser.comment(this.data, 0, this.data.length, this);\n};\nfunction CDATA(locator) {\n\tParentNode.call(this, locator);\n\tthis.nodeType = NodeType.CDATA;\n}\n\nCDATA.prototype = Object.create(ParentNode.prototype);\nCDATA.prototype.visit = function(treeParser) {\n\ttreeParser.startCDATA(this);\n};\nCDATA.prototype.revisit = function(treeParser) {\n\ttreeParser.endCDATA(this.endLocator);\n};\nfunction Entity(name) {\n\tParentNode.call(this);\n\tthis.name = name;\n\tthis.nodeType = NodeType.ENTITY;\n}\n\nEntity.prototype = Object.create(ParentNode.prototype);\nEntity.prototype.visit = function(treeParser) {\n\ttreeParser.startEntity(this.name, this);\n};\nEntity.prototype.revisit = function(treeParser) {\n\ttreeParser.endEntity(this.name);\n};\n\nfunction SkippedEntity(name) {\n\tNode.call(this);\n\tthis.name = name;\n\tthis.nodeType = NodeType.SKIPPED_ENTITY;\n}\n\nSkippedEntity.prototype = Object.create(Node.prototype);\nSkippedEntity.prototype.visit = function(treeParser) {\n\ttreeParser.skippedEntity(this.name, this);\n};\nfunction ProcessingInstruction(target, data) {\n\tNode.call(this);\n\tthis.target = target;\n\tthis.data = data;\n}\n\nProcessingInstruction.prototype = Object.create(Node.prototype);\nProcessingInstruction.prototype.visit = function(treeParser) {\n\ttreeParser.processingInstruction(this.target, this.data, this);\n};\nProcessingInstruction.prototype.getNodeType = function() {\n\treturn NodeType.PROCESSING_INSTRUCTION;\n};\nfunction DTD(name, publicIdentifier, systemIdentifier) {\n\tParentNode.call(this);\n\tthis.name = name;\n\tthis.publicIdentifier = publicIdentifier;\n\tthis.systemIdentifier = systemIdentifier;\n\tthis.nodeType = NodeType.DTD;\n}\n\nDTD.prototype = Object.create(ParentNode.prototype);\nDTD.prototype.visit = function(treeParser) {\n\ttreeParser.startDTD(this.name, this.publicIdentifier, this.systemIdentifier, this);\n};\nDTD.prototype.revisit = function(treeParser) {\n\ttreeParser.endDTD();\n};\n\nexports.SAXTreeBuilder = SAXTreeBuilder;\n\n},\n{\"../TreeBuilder\":6,\"util\":20}],\n11:[function(_dereq_,module,exports){\nfunction TreeParser(contentHandler, lexicalHandler){\n\tthis.contentHandler;\n\tthis.lexicalHandler;\n\tthis.locatorDelegate;\n\n\tif (!contentHandler) {\n\t\tthrow new IllegalArgumentException(\"contentHandler was null.\");\n\t}\n\tthis.contentHandler = contentHandler;\n\tif (!lexicalHandler) {\n\t\tthis.lexicalHandler = new NullLexicalHandler();\n\t} else {\n\t\tthis.lexicalHandler = lexicalHandler;\n\t}\n}\nTreeParser.prototype.parse = function(node) {\n\tthis.contentHandler.documentLocator = this;\n\tvar current = node;\n\tvar next;\n\tfor (;;) {\n\t\tcurrent.visit(this);\n\t\tif (next = current.firstChild) {\n\t\t\tcurrent = next;\n\t\t\tcontinue;\n\t\t}\n\t\tfor (;;) {\n\t\t\tcurrent.revisit(this);\n\t\t\tif (current == node) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (next = current.nextSibling) {\n\t\t\t\tcurrent = next;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent = current.parentNode;\n\t\t}\n\t}\n};\nTreeParser.prototype.characters = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.characters(ch, start, length);\n};\nTreeParser.prototype.endDocument = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endDocument();\n};\nTreeParser.prototype.endElement = function(uri, localName, qName, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endElement(uri, localName, qName);\n};\nTreeParser.prototype.endPrefixMapping = function(prefix, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endPrefixMapping(prefix);\n};\nTreeParser.prototype.ignorableWhitespace = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.ignorableWhitespace(ch, start, length);\n};\nTreeParser.prototype.processingInstruction = function(target, data, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.processingInstruction(target, data);\n};\nTreeParser.prototype.skippedEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.skippedEntity(name);\n};\nTreeParser.prototype.startDocument = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startDocument();\n};\nTreeParser.prototype.startElement = function(uri, localName, qName, atts, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startElement(uri, localName, qName, atts);\n};\nTreeParser.prototype.startPrefixMapping = function(prefix, uri, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startPrefixMapping(prefix, uri);\n};\nTreeParser.prototype.comment = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.comment(ch, start, length);\n};\nTreeParser.prototype.endCDATA = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endCDATA();\n};\nTreeParser.prototype.endDTD = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endDTD();\n};\nTreeParser.prototype.endEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endEntity(name);\n};\nTreeParser.prototype.startCDATA = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startCDATA();\n};\nTreeParser.prototype.startDTD = function(name, publicId, systemId, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startDTD(name, publicId, systemId);\n};\nTreeParser.prototype.startEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startEntity(name);\n};\n\nObject.defineProperty(TreeParser.prototype, 'columnNumber', {\n\tget: function() {\n\t\tif (!this.locatorDelegate)\n\t\t\treturn -1;\n\t\telse\n\t\t\treturn this.locatorDelegate.columnNumber;\n\t}\n});\n\nObject.defineProperty(TreeParser.prototype, 'lineNumber', {\n\tget: function() {\n\t\tif (!this.locatorDelegate)\n\t\t\treturn -1;\n\t\telse\n\t\t\treturn this.locatorDelegate.lineNumber;\n\t}\n});\nfunction NullLexicalHandler() {\n\n}\n\nNullLexicalHandler.prototype.comment = function() {};\nNullLexicalHandler.prototype.endCDATA = function() {};\nNullLexicalHandler.prototype.endDTD = function() {};\nNullLexicalHandler.prototype.endEntity = function() {};\nNullLexicalHandler.prototype.startCDATA = function() {};\nNullLexicalHandler.prototype.startDTD = function() {};\nNullLexicalHandler.prototype.startEntity = function() {};\n\nexports.TreeParser = TreeParser;\n\n},\n{}],\n12:[function(_dereq_,module,exports){\nmodule.exports = {\n\t\"Aacute;\": \"\\u00C1\",\n\t\"Aacute\": \"\\u00C1\",\n\t\"aacute;\": \"\\u00E1\",\n\t\"aacute\": \"\\u00E1\",\n\t\"Abreve;\": \"\\u0102\",\n\t\"abreve;\": \"\\u0103\",\n\t\"ac;\": \"\\u223E\",\n\t\"acd;\": \"\\u223F\",\n\t\"acE;\": \"\\u223E\\u0333\",\n\t\"Acirc;\": \"\\u00C2\",\n\t\"Acirc\": \"\\u00C2\",\n\t\"acirc;\": \"\\u00E2\",\n\t\"acirc\": \"\\u00E2\",\n\t\"acute;\": \"\\u00B4\",\n\t\"acute\": \"\\u00B4\",\n\t\"Acy;\": \"\\u0410\",\n\t\"acy;\": \"\\u0430\",\n\t\"AElig;\": \"\\u00C6\",\n\t\"AElig\": \"\\u00C6\",\n\t\"aelig;\": \"\\u00E6\",\n\t\"aelig\": \"\\u00E6\",\n\t\"af;\": \"\\u2061\",\n\t\"Afr;\": \"\\uD835\\uDD04\",\n\t\"afr;\": \"\\uD835\\uDD1E\",\n\t\"Agrave;\": \"\\u00C0\",\n\t\"Agrave\": \"\\u00C0\",\n\t\"agrave;\": \"\\u00E0\",\n\t\"agrave\": \"\\u00E0\",\n\t\"alefsym;\": \"\\u2135\",\n\t\"aleph;\": \"\\u2135\",\n\t\"Alpha;\": \"\\u0391\",\n\t\"alpha;\": \"\\u03B1\",\n\t\"Amacr;\": \"\\u0100\",\n\t\"amacr;\": \"\\u0101\",\n\t\"amalg;\": \"\\u2A3F\",\n\t\"amp;\": \"\\u0026\",\n\t\"amp\": \"\\u0026\",\n\t\"AMP;\": \"\\u0026\",\n\t\"AMP\": \"\\u0026\",\n\t\"andand;\": \"\\u2A55\",\n\t\"And;\": \"\\u2A53\",\n\t\"and;\": \"\\u2227\",\n\t\"andd;\": \"\\u2A5C\",\n\t\"andslope;\": \"\\u2A58\",\n\t\"andv;\": \"\\u2A5A\",\n\t\"ang;\": \"\\u2220\",\n\t\"ange;\": \"\\u29A4\",\n\t\"angle;\": \"\\u2220\",\n\t\"angmsdaa;\": \"\\u29A8\",\n\t\"angmsdab;\": \"\\u29A9\",\n\t\"angmsdac;\": \"\\u29AA\",\n\t\"angmsdad;\": \"\\u29AB\",\n\t\"angmsdae;\": \"\\u29AC\",\n\t\"angmsdaf;\": \"\\u29AD\",\n\t\"angmsdag;\": \"\\u29AE\",\n\t\"angmsdah;\": \"\\u29AF\",\n\t\"angmsd;\": \"\\u2221\",\n\t\"angrt;\": \"\\u221F\",\n\t\"angrtvb;\": \"\\u22BE\",\n\t\"angrtvbd;\": \"\\u299D\",\n\t\"angsph;\": \"\\u2222\",\n\t\"angst;\": \"\\u00C5\",\n\t\"angzarr;\": \"\\u237C\",\n\t\"Aogon;\": \"\\u0104\",\n\t\"aogon;\": \"\\u0105\",\n\t\"Aopf;\": \"\\uD835\\uDD38\",\n\t\"aopf;\": \"\\uD835\\uDD52\",\n\t\"apacir;\": \"\\u2A6F\",\n\t\"ap;\": \"\\u2248\",\n\t\"apE;\": \"\\u2A70\",\n\t\"ape;\": \"\\u224A\",\n\t\"apid;\": \"\\u224B\",\n\t\"apos;\": \"\\u0027\",\n\t\"ApplyFunction;\": \"\\u2061\",\n\t\"approx;\": \"\\u2248\",\n\t\"approxeq;\": \"\\u224A\",\n\t\"Aring;\": \"\\u00C5\",\n\t\"Aring\": \"\\u00C5\",\n\t\"aring;\": \"\\u00E5\",\n\t\"aring\": \"\\u00E5\",\n\t\"Ascr;\": \"\\uD835\\uDC9C\",\n\t\"ascr;\": \"\\uD835\\uDCB6\",\n\t\"Assign;\": \"\\u2254\",\n\t\"ast;\": \"\\u002A\",\n\t\"asymp;\": \"\\u2248\",\n\t\"asympeq;\": \"\\u224D\",\n\t\"Atilde;\": \"\\u00C3\",\n\t\"Atilde\": \"\\u00C3\",\n\t\"atilde;\": \"\\u00E3\",\n\t\"atilde\": \"\\u00E3\",\n\t\"Auml;\": \"\\u00C4\",\n\t\"Auml\": \"\\u00C4\",\n\t\"auml;\": \"\\u00E4\",\n\t\"auml\": \"\\u00E4\",\n\t\"awconint;\": \"\\u2233\",\n\t\"awint;\": \"\\u2A11\",\n\t\"backcong;\": \"\\u224C\",\n\t\"backepsilon;\": \"\\u03F6\",\n\t\"backprime;\": \"\\u2035\",\n\t\"backsim;\": \"\\u223D\",\n\t\"backsimeq;\": \"\\u22CD\",\n\t\"Backslash;\": \"\\u2216\",\n\t\"Barv;\": \"\\u2AE7\",\n\t\"barvee;\": \"\\u22BD\",\n\t\"barwed;\": \"\\u2305\",\n\t\"Barwed;\": \"\\u2306\",\n\t\"barwedge;\": \"\\u2305\",\n\t\"bbrk;\": \"\\u23B5\",\n\t\"bbrktbrk;\": \"\\u23B6\",\n\t\"bcong;\": \"\\u224C\",\n\t\"Bcy;\": \"\\u0411\",\n\t\"bcy;\": \"\\u0431\",\n\t\"bdquo;\": \"\\u201E\",\n\t\"becaus;\": \"\\u2235\",\n\t\"because;\": \"\\u2235\",\n\t\"Because;\": \"\\u2235\",\n\t\"bemptyv;\": \"\\u29B0\",\n\t\"bepsi;\": \"\\u03F6\",\n\t\"bernou;\": \"\\u212C\",\n\t\"Bernoullis;\": \"\\u212C\",\n\t\"Beta;\": \"\\u0392\",\n\t\"beta;\": \"\\u03B2\",\n\t\"beth;\": \"\\u2136\",\n\t\"between;\": \"\\u226C\",\n\t\"Bfr;\": \"\\uD835\\uDD05\",\n\t\"bfr;\": \"\\uD835\\uDD1F\",\n\t\"bigcap;\": \"\\u22C2\",\n\t\"bigcirc;\": \"\\u25EF\",\n\t\"bigcup;\": \"\\u22C3\",\n\t\"bigodot;\": \"\\u2A00\",\n\t\"bigoplus;\": \"\\u2A01\",\n\t\"bigotimes;\": \"\\u2A02\",\n\t\"bigsqcup;\": \"\\u2A06\",\n\t\"bigstar;\": \"\\u2605\",\n\t\"bigtriangledown;\": \"\\u25BD\",\n\t\"bigtriangleup;\": \"\\u25B3\",\n\t\"biguplus;\": \"\\u2A04\",\n\t\"bigvee;\": \"\\u22C1\",\n\t\"bigwedge;\": \"\\u22C0\",\n\t\"bkarow;\": \"\\u290D\",\n\t\"blacklozenge;\": \"\\u29EB\",\n\t\"blacksquare;\": \"\\u25AA\",\n\t\"blacktriangle;\": \"\\u25B4\",\n\t\"blacktriangledown;\": \"\\u25BE\",\n\t\"blacktriangleleft;\": \"\\u25C2\",\n\t\"blacktriangleright;\": \"\\u25B8\",\n\t\"blank;\": \"\\u2423\",\n\t\"blk12;\": \"\\u2592\",\n\t\"blk14;\": \"\\u2591\",\n\t\"blk34;\": \"\\u2593\",\n\t\"block;\": \"\\u2588\",\n\t\"bne;\": \"\\u003D\\u20E5\",\n\t\"bnequiv;\": \"\\u2261\\u20E5\",\n\t\"bNot;\": \"\\u2AED\",\n\t\"bnot;\": \"\\u2310\",\n\t\"Bopf;\": \"\\uD835\\uDD39\",\n\t\"bopf;\": \"\\uD835\\uDD53\",\n\t\"bot;\": \"\\u22A5\",\n\t\"bottom;\": \"\\u22A5\",\n\t\"bowtie;\": \"\\u22C8\",\n\t\"boxbox;\": \"\\u29C9\",\n\t\"boxdl;\": \"\\u2510\",\n\t\"boxdL;\": \"\\u2555\",\n\t\"boxDl;\": \"\\u2556\",\n\t\"boxDL;\": \"\\u2557\",\n\t\"boxdr;\": \"\\u250C\",\n\t\"boxdR;\": \"\\u2552\",\n\t\"boxDr;\": \"\\u2553\",\n\t\"boxDR;\": \"\\u2554\",\n\t\"boxh;\": \"\\u2500\",\n\t\"boxH;\": \"\\u2550\",\n\t\"boxhd;\": \"\\u252C\",\n\t\"boxHd;\": \"\\u2564\",\n\t\"boxhD;\": \"\\u2565\",\n\t\"boxHD;\": \"\\u2566\",\n\t\"boxhu;\": \"\\u2534\",\n\t\"boxHu;\": \"\\u2567\",\n\t\"boxhU;\": \"\\u2568\",\n\t\"boxHU;\": \"\\u2569\",\n\t\"boxminus;\": \"\\u229F\",\n\t\"boxplus;\": \"\\u229E\",\n\t\"boxtimes;\": \"\\u22A0\",\n\t\"boxul;\": \"\\u2518\",\n\t\"boxuL;\": \"\\u255B\",\n\t\"boxUl;\": \"\\u255C\",\n\t\"boxUL;\": \"\\u255D\",\n\t\"boxur;\": \"\\u2514\",\n\t\"boxuR;\": \"\\u2558\",\n\t\"boxUr;\": \"\\u2559\",\n\t\"boxUR;\": \"\\u255A\",\n\t\"boxv;\": \"\\u2502\",\n\t\"boxV;\": \"\\u2551\",\n\t\"boxvh;\": \"\\u253C\",\n\t\"boxvH;\": \"\\u256A\",\n\t\"boxVh;\": \"\\u256B\",\n\t\"boxVH;\": \"\\u256C\",\n\t\"boxvl;\": \"\\u2524\",\n\t\"boxvL;\": \"\\u2561\",\n\t\"boxVl;\": \"\\u2562\",\n\t\"boxVL;\": \"\\u2563\",\n\t\"boxvr;\": \"\\u251C\",\n\t\"boxvR;\": \"\\u255E\",\n\t\"boxVr;\": \"\\u255F\",\n\t\"boxVR;\": \"\\u2560\",\n\t\"bprime;\": \"\\u2035\",\n\t\"breve;\": \"\\u02D8\",\n\t\"Breve;\": \"\\u02D8\",\n\t\"brvbar;\": \"\\u00A6\",\n\t\"brvbar\": \"\\u00A6\",\n\t\"bscr;\": \"\\uD835\\uDCB7\",\n\t\"Bscr;\": \"\\u212C\",\n\t\"bsemi;\": \"\\u204F\",\n\t\"bsim;\": \"\\u223D\",\n\t\"bsime;\": \"\\u22CD\",\n\t\"bsolb;\": \"\\u29C5\",\n\t\"bsol;\": \"\\u005C\",\n\t\"bsolhsub;\": \"\\u27C8\",\n\t\"bull;\": \"\\u2022\",\n\t\"bullet;\": \"\\u2022\",\n\t\"bump;\": \"\\u224E\",\n\t\"bumpE;\": \"\\u2AAE\",\n\t\"bumpe;\": \"\\u224F\",\n\t\"Bumpeq;\": \"\\u224E\",\n\t\"bumpeq;\": \"\\u224F\",\n\t\"Cacute;\": \"\\u0106\",\n\t\"cacute;\": \"\\u0107\",\n\t\"capand;\": \"\\u2A44\",\n\t\"capbrcup;\": \"\\u2A49\",\n\t\"capcap;\": \"\\u2A4B\",\n\t\"cap;\": \"\\u2229\",\n\t\"Cap;\": \"\\u22D2\",\n\t\"capcup;\": \"\\u2A47\",\n\t\"capdot;\": \"\\u2A40\",\n\t\"CapitalDifferentialD;\": \"\\u2145\",\n\t\"caps;\": \"\\u2229\\uFE00\",\n\t\"caret;\": \"\\u2041\",\n\t\"caron;\": \"\\u02C7\",\n\t\"Cayleys;\": \"\\u212D\",\n\t\"ccaps;\": \"\\u2A4D\",\n\t\"Ccaron;\": \"\\u010C\",\n\t\"ccaron;\": \"\\u010D\",\n\t\"Ccedil;\": \"\\u00C7\",\n\t\"Ccedil\": \"\\u00C7\",\n\t\"ccedil;\": \"\\u00E7\",\n\t\"ccedil\": \"\\u00E7\",\n\t\"Ccirc;\": \"\\u0108\",\n\t\"ccirc;\": \"\\u0109\",\n\t\"Cconint;\": \"\\u2230\",\n\t\"ccups;\": \"\\u2A4C\",\n\t\"ccupssm;\": \"\\u2A50\",\n\t\"Cdot;\": \"\\u010A\",\n\t\"cdot;\": \"\\u010B\",\n\t\"cedil;\": \"\\u00B8\",\n\t\"cedil\": \"\\u00B8\",\n\t\"Cedilla;\": \"\\u00B8\",\n\t\"cemptyv;\": \"\\u29B2\",\n\t\"cent;\": \"\\u00A2\",\n\t\"cent\": \"\\u00A2\",\n\t\"centerdot;\": \"\\u00B7\",\n\t\"CenterDot;\": \"\\u00B7\",\n\t\"cfr;\": \"\\uD835\\uDD20\",\n\t\"Cfr;\": \"\\u212D\",\n\t\"CHcy;\": \"\\u0427\",\n\t\"chcy;\": \"\\u0447\",\n\t\"check;\": \"\\u2713\",\n\t\"checkmark;\": \"\\u2713\",\n\t\"Chi;\": \"\\u03A7\",\n\t\"chi;\": \"\\u03C7\",\n\t\"circ;\": \"\\u02C6\",\n\t\"circeq;\": \"\\u2257\",\n\t\"circlearrowleft;\": \"\\u21BA\",\n\t\"circlearrowright;\": \"\\u21BB\",\n\t\"circledast;\": \"\\u229B\",\n\t\"circledcirc;\": \"\\u229A\",\n\t\"circleddash;\": \"\\u229D\",\n\t\"CircleDot;\": \"\\u2299\",\n\t\"circledR;\": \"\\u00AE\",\n\t\"circledS;\": \"\\u24C8\",\n\t\"CircleMinus;\": \"\\u2296\",\n\t\"CirclePlus;\": \"\\u2295\",\n\t\"CircleTimes;\": \"\\u2297\",\n\t\"cir;\": \"\\u25CB\",\n\t\"cirE;\": \"\\u29C3\",\n\t\"cire;\": \"\\u2257\",\n\t\"cirfnint;\": \"\\u2A10\",\n\t\"cirmid;\": \"\\u2AEF\",\n\t\"cirscir;\": \"\\u29C2\",\n\t\"ClockwiseContourIntegral;\": \"\\u2232\",\n\t\"CloseCurlyDoubleQuote;\": \"\\u201D\",\n\t\"CloseCurlyQuote;\": \"\\u2019\",\n\t\"clubs;\": \"\\u2663\",\n\t\"clubsuit;\": \"\\u2663\",\n\t\"colon;\": \"\\u003A\",\n\t\"Colon;\": \"\\u2237\",\n\t\"Colone;\": \"\\u2A74\",\n\t\"colone;\": \"\\u2254\",\n\t\"coloneq;\": \"\\u2254\",\n\t\"comma;\": \"\\u002C\",\n\t\"commat;\": \"\\u0040\",\n\t\"comp;\": \"\\u2201\",\n\t\"compfn;\": \"\\u2218\",\n\t\"complement;\": \"\\u2201\",\n\t\"complexes;\": \"\\u2102\",\n\t\"cong;\": \"\\u2245\",\n\t\"congdot;\": \"\\u2A6D\",\n\t\"Congruent;\": \"\\u2261\",\n\t\"conint;\": \"\\u222E\",\n\t\"Conint;\": \"\\u222F\",\n\t\"ContourIntegral;\": \"\\u222E\",\n\t\"copf;\": \"\\uD835\\uDD54\",\n\t\"Copf;\": \"\\u2102\",\n\t\"coprod;\": \"\\u2210\",\n\t\"Coproduct;\": \"\\u2210\",\n\t\"copy;\": \"\\u00A9\",\n\t\"copy\": \"\\u00A9\",\n\t\"COPY;\": \"\\u00A9\",\n\t\"COPY\": \"\\u00A9\",\n\t\"copysr;\": \"\\u2117\",\n\t\"CounterClockwiseContourIntegral;\": \"\\u2233\",\n\t\"crarr;\": \"\\u21B5\",\n\t\"cross;\": \"\\u2717\",\n\t\"Cross;\": \"\\u2A2F\",\n\t\"Cscr;\": \"\\uD835\\uDC9E\",\n\t\"cscr;\": \"\\uD835\\uDCB8\",\n\t\"csub;\": \"\\u2ACF\",\n\t\"csube;\": \"\\u2AD1\",\n\t\"csup;\": \"\\u2AD0\",\n\t\"csupe;\": \"\\u2AD2\",\n\t\"ctdot;\": \"\\u22EF\",\n\t\"cudarrl;\": \"\\u2938\",\n\t\"cudarrr;\": \"\\u2935\",\n\t\"cuepr;\": \"\\u22DE\",\n\t\"cuesc;\": \"\\u22DF\",\n\t\"cularr;\": \"\\u21B6\",\n\t\"cularrp;\": \"\\u293D\",\n\t\"cupbrcap;\": \"\\u2A48\",\n\t\"cupcap;\": \"\\u2A46\",\n\t\"CupCap;\": \"\\u224D\",\n\t\"cup;\": \"\\u222A\",\n\t\"Cup;\": \"\\u22D3\",\n\t\"cupcup;\": \"\\u2A4A\",\n\t\"cupdot;\": \"\\u228D\",\n\t\"cupor;\": \"\\u2A45\",\n\t\"cups;\": \"\\u222A\\uFE00\",\n\t\"curarr;\": \"\\u21B7\",\n\t\"curarrm;\": \"\\u293C\",\n\t\"curlyeqprec;\": \"\\u22DE\",\n\t\"curlyeqsucc;\": \"\\u22DF\",\n\t\"curlyvee;\": \"\\u22CE\",\n\t\"curlywedge;\": \"\\u22CF\",\n\t\"curren;\": \"\\u00A4\",\n\t\"curren\": \"\\u00A4\",\n\t\"curvearrowleft;\": \"\\u21B6\",\n\t\"curvearrowright;\": \"\\u21B7\",\n\t\"cuvee;\": \"\\u22CE\",\n\t\"cuwed;\": \"\\u22CF\",\n\t\"cwconint;\": \"\\u2232\",\n\t\"cwint;\": \"\\u2231\",\n\t\"cylcty;\": \"\\u232D\",\n\t\"dagger;\": \"\\u2020\",\n\t\"Dagger;\": \"\\u2021\",\n\t\"daleth;\": \"\\u2138\",\n\t\"darr;\": \"\\u2193\",\n\t\"Darr;\": \"\\u21A1\",\n\t\"dArr;\": \"\\u21D3\",\n\t\"dash;\": \"\\u2010\",\n\t\"Dashv;\": \"\\u2AE4\",\n\t\"dashv;\": \"\\u22A3\",\n\t\"dbkarow;\": \"\\u290F\",\n\t\"dblac;\": \"\\u02DD\",\n\t\"Dcaron;\": \"\\u010E\",\n\t\"dcaron;\": \"\\u010F\",\n\t\"Dcy;\": \"\\u0414\",\n\t\"dcy;\": \"\\u0434\",\n\t\"ddagger;\": \"\\u2021\",\n\t\"ddarr;\": \"\\u21CA\",\n\t\"DD;\": \"\\u2145\",\n\t\"dd;\": \"\\u2146\",\n\t\"DDotrahd;\": \"\\u2911\",\n\t\"ddotseq;\": \"\\u2A77\",\n\t\"deg;\": \"\\u00B0\",\n\t\"deg\": \"\\u00B0\",\n\t\"Del;\": \"\\u2207\",\n\t\"Delta;\": \"\\u0394\",\n\t\"delta;\": \"\\u03B4\",\n\t\"demptyv;\": \"\\u29B1\",\n\t\"dfisht;\": \"\\u297F\",\n\t\"Dfr;\": \"\\uD835\\uDD07\",\n\t\"dfr;\": \"\\uD835\\uDD21\",\n\t\"dHar;\": \"\\u2965\",\n\t\"dharl;\": \"\\u21C3\",\n\t\"dharr;\": \"\\u21C2\",\n\t\"DiacriticalAcute;\": \"\\u00B4\",\n\t\"DiacriticalDot;\": \"\\u02D9\",\n\t\"DiacriticalDoubleAcute;\": \"\\u02DD\",\n\t\"DiacriticalGrave;\": \"\\u0060\",\n\t\"DiacriticalTilde;\": \"\\u02DC\",\n\t\"diam;\": \"\\u22C4\",\n\t\"diamond;\": \"\\u22C4\",\n\t\"Diamond;\": \"\\u22C4\",\n\t\"diamondsuit;\": \"\\u2666\",\n\t\"diams;\": \"\\u2666\",\n\t\"die;\": \"\\u00A8\",\n\t\"DifferentialD;\": \"\\u2146\",\n\t\"digamma;\": \"\\u03DD\",\n\t\"disin;\": \"\\u22F2\",\n\t\"div;\": \"\\u00F7\",\n\t\"divide;\": \"\\u00F7\",\n\t\"divide\": \"\\u00F7\",\n\t\"divideontimes;\": \"\\u22C7\",\n\t\"divonx;\": \"\\u22C7\",\n\t\"DJcy;\": \"\\u0402\",\n\t\"djcy;\": \"\\u0452\",\n\t\"dlcorn;\": \"\\u231E\",\n\t\"dlcrop;\": \"\\u230D\",\n\t\"dollar;\": \"\\u0024\",\n\t\"Dopf;\": \"\\uD835\\uDD3B\",\n\t\"dopf;\": \"\\uD835\\uDD55\",\n\t\"Dot;\": \"\\u00A8\",\n\t\"dot;\": \"\\u02D9\",\n\t\"DotDot;\": \"\\u20DC\",\n\t\"doteq;\": \"\\u2250\",\n\t\"doteqdot;\": \"\\u2251\",\n\t\"DotEqual;\": \"\\u2250\",\n\t\"dotminus;\": \"\\u2238\",\n\t\"dotplus;\": \"\\u2214\",\n\t\"dotsquare;\": \"\\u22A1\",\n\t\"doublebarwedge;\": \"\\u2306\",\n\t\"DoubleContourIntegral;\": \"\\u222F\",\n\t\"DoubleDot;\": \"\\u00A8\",\n\t\"DoubleDownArrow;\": \"\\u21D3\",\n\t\"DoubleLeftArrow;\": \"\\u21D0\",\n\t\"DoubleLeftRightArrow;\": \"\\u21D4\",\n\t\"DoubleLeftTee;\": \"\\u2AE4\",\n\t\"DoubleLongLeftArrow;\": \"\\u27F8\",\n\t\"DoubleLongLeftRightArrow;\": \"\\u27FA\",\n\t\"DoubleLongRightArrow;\": \"\\u27F9\",\n\t\"DoubleRightArrow;\": \"\\u21D2\",\n\t\"DoubleRightTee;\": \"\\u22A8\",\n\t\"DoubleUpArrow;\": \"\\u21D1\",\n\t\"DoubleUpDownArrow;\": \"\\u21D5\",\n\t\"DoubleVerticalBar;\": \"\\u2225\",\n\t\"DownArrowBar;\": \"\\u2913\",\n\t\"downarrow;\": \"\\u2193\",\n\t\"DownArrow;\": \"\\u2193\",\n\t\"Downarrow;\": \"\\u21D3\",\n\t\"DownArrowUpArrow;\": \"\\u21F5\",\n\t\"DownBreve;\": \"\\u0311\",\n\t\"downdownarrows;\": \"\\u21CA\",\n\t\"downharpoonleft;\": \"\\u21C3\",\n\t\"downharpoonright;\": \"\\u21C2\",\n\t\"DownLeftRightVector;\": \"\\u2950\",\n\t\"DownLeftTeeVector;\": \"\\u295E\",\n\t\"DownLeftVectorBar;\": \"\\u2956\",\n\t\"DownLeftVector;\": \"\\u21BD\",\n\t\"DownRightTeeVector;\": \"\\u295F\",\n\t\"DownRightVectorBar;\": \"\\u2957\",\n\t\"DownRightVector;\": \"\\u21C1\",\n\t\"DownTeeArrow;\": \"\\u21A7\",\n\t\"DownTee;\": \"\\u22A4\",\n\t\"drbkarow;\": \"\\u2910\",\n\t\"drcorn;\": \"\\u231F\",\n\t\"drcrop;\": \"\\u230C\",\n\t\"Dscr;\": \"\\uD835\\uDC9F\",\n\t\"dscr;\": \"\\uD835\\uDCB9\",\n\t\"DScy;\": \"\\u0405\",\n\t\"dscy;\": \"\\u0455\",\n\t\"dsol;\": \"\\u29F6\",\n\t\"Dstrok;\": \"\\u0110\",\n\t\"dstrok;\": \"\\u0111\",\n\t\"dtdot;\": \"\\u22F1\",\n\t\"dtri;\": \"\\u25BF\",\n\t\"dtrif;\": \"\\u25BE\",\n\t\"duarr;\": \"\\u21F5\",\n\t\"duhar;\": \"\\u296F\",\n\t\"dwangle;\": \"\\u29A6\",\n\t\"DZcy;\": \"\\u040F\",\n\t\"dzcy;\": \"\\u045F\",\n\t\"dzigrarr;\": \"\\u27FF\",\n\t\"Eacute;\": \"\\u00C9\",\n\t\"Eacute\": \"\\u00C9\",\n\t\"eacute;\": \"\\u00E9\",\n\t\"eacute\": \"\\u00E9\",\n\t\"easter;\": \"\\u2A6E\",\n\t\"Ecaron;\": \"\\u011A\",\n\t\"ecaron;\": \"\\u011B\",\n\t\"Ecirc;\": \"\\u00CA\",\n\t\"Ecirc\": \"\\u00CA\",\n\t\"ecirc;\": \"\\u00EA\",\n\t\"ecirc\": \"\\u00EA\",\n\t\"ecir;\": \"\\u2256\",\n\t\"ecolon;\": \"\\u2255\",\n\t\"Ecy;\": \"\\u042D\",\n\t\"ecy;\": \"\\u044D\",\n\t\"eDDot;\": \"\\u2A77\",\n\t\"Edot;\": \"\\u0116\",\n\t\"edot;\": \"\\u0117\",\n\t\"eDot;\": \"\\u2251\",\n\t\"ee;\": \"\\u2147\",\n\t\"efDot;\": \"\\u2252\",\n\t\"Efr;\": \"\\uD835\\uDD08\",\n\t\"efr;\": \"\\uD835\\uDD22\",\n\t\"eg;\": \"\\u2A9A\",\n\t\"Egrave;\": \"\\u00C8\",\n\t\"Egrave\": \"\\u00C8\",\n\t\"egrave;\": \"\\u00E8\",\n\t\"egrave\": \"\\u00E8\",\n\t\"egs;\": \"\\u2A96\",\n\t\"egsdot;\": \"\\u2A98\",\n\t\"el;\": \"\\u2A99\",\n\t\"Element;\": \"\\u2208\",\n\t\"elinters;\": \"\\u23E7\",\n\t\"ell;\": \"\\u2113\",\n\t\"els;\": \"\\u2A95\",\n\t\"elsdot;\": \"\\u2A97\",\n\t\"Emacr;\": \"\\u0112\",\n\t\"emacr;\": \"\\u0113\",\n\t\"empty;\": \"\\u2205\",\n\t\"emptyset;\": \"\\u2205\",\n\t\"EmptySmallSquare;\": \"\\u25FB\",\n\t\"emptyv;\": \"\\u2205\",\n\t\"EmptyVerySmallSquare;\": \"\\u25AB\",\n\t\"emsp13;\": \"\\u2004\",\n\t\"emsp14;\": \"\\u2005\",\n\t\"emsp;\": \"\\u2003\",\n\t\"ENG;\": \"\\u014A\",\n\t\"eng;\": \"\\u014B\",\n\t\"ensp;\": \"\\u2002\",\n\t\"Eogon;\": \"\\u0118\",\n\t\"eogon;\": \"\\u0119\",\n\t\"Eopf;\": \"\\uD835\\uDD3C\",\n\t\"eopf;\": \"\\uD835\\uDD56\",\n\t\"epar;\": \"\\u22D5\",\n\t\"eparsl;\": \"\\u29E3\",\n\t\"eplus;\": \"\\u2A71\",\n\t\"epsi;\": \"\\u03B5\",\n\t\"Epsilon;\": \"\\u0395\",\n\t\"epsilon;\": \"\\u03B5\",\n\t\"epsiv;\": \"\\u03F5\",\n\t\"eqcirc;\": \"\\u2256\",\n\t\"eqcolon;\": \"\\u2255\",\n\t\"eqsim;\": \"\\u2242\",\n\t\"eqslantgtr;\": \"\\u2A96\",\n\t\"eqslantless;\": \"\\u2A95\",\n\t\"Equal;\": \"\\u2A75\",\n\t\"equals;\": \"\\u003D\",\n\t\"EqualTilde;\": \"\\u2242\",\n\t\"equest;\": \"\\u225F\",\n\t\"Equilibrium;\": \"\\u21CC\",\n\t\"equiv;\": \"\\u2261\",\n\t\"equivDD;\": \"\\u2A78\",\n\t\"eqvparsl;\": \"\\u29E5\",\n\t\"erarr;\": \"\\u2971\",\n\t\"erDot;\": \"\\u2253\",\n\t\"escr;\": \"\\u212F\",\n\t\"Escr;\": \"\\u2130\",\n\t\"esdot;\": \"\\u2250\",\n\t\"Esim;\": \"\\u2A73\",\n\t\"esim;\": \"\\u2242\",\n\t\"Eta;\": \"\\u0397\",\n\t\"eta;\": \"\\u03B7\",\n\t\"ETH;\": \"\\u00D0\",\n\t\"ETH\": \"\\u00D0\",\n\t\"eth;\": \"\\u00F0\",\n\t\"eth\": \"\\u00F0\",\n\t\"Euml;\": \"\\u00CB\",\n\t\"Euml\": \"\\u00CB\",\n\t\"euml;\": \"\\u00EB\",\n\t\"euml\": \"\\u00EB\",\n\t\"euro;\": \"\\u20AC\",\n\t\"excl;\": \"\\u0021\",\n\t\"exist;\": \"\\u2203\",\n\t\"Exists;\": \"\\u2203\",\n\t\"expectation;\": \"\\u2130\",\n\t\"exponentiale;\": \"\\u2147\",\n\t\"ExponentialE;\": \"\\u2147\",\n\t\"fallingdotseq;\": \"\\u2252\",\n\t\"Fcy;\": \"\\u0424\",\n\t\"fcy;\": \"\\u0444\",\n\t\"female;\": \"\\u2640\",\n\t\"ffilig;\": \"\\uFB03\",\n\t\"fflig;\": \"\\uFB00\",\n\t\"ffllig;\": \"\\uFB04\",\n\t\"Ffr;\": \"\\uD835\\uDD09\",\n\t\"ffr;\": \"\\uD835\\uDD23\",\n\t\"filig;\": \"\\uFB01\",\n\t\"FilledSmallSquare;\": \"\\u25FC\",\n\t\"FilledVerySmallSquare;\": \"\\u25AA\",\n\t\"fjlig;\": \"\\u0066\\u006A\",\n\t\"flat;\": \"\\u266D\",\n\t\"fllig;\": \"\\uFB02\",\n\t\"fltns;\": \"\\u25B1\",\n\t\"fnof;\": \"\\u0192\",\n\t\"Fopf;\": \"\\uD835\\uDD3D\",\n\t\"fopf;\": \"\\uD835\\uDD57\",\n\t\"forall;\": \"\\u2200\",\n\t\"ForAll;\": \"\\u2200\",\n\t\"fork;\": \"\\u22D4\",\n\t\"forkv;\": \"\\u2AD9\",\n\t\"Fouriertrf;\": \"\\u2131\",\n\t\"fpartint;\": \"\\u2A0D\",\n\t\"frac12;\": \"\\u00BD\",\n\t\"frac12\": \"\\u00BD\",\n\t\"frac13;\": \"\\u2153\",\n\t\"frac14;\": \"\\u00BC\",\n\t\"frac14\": \"\\u00BC\",\n\t\"frac15;\": \"\\u2155\",\n\t\"frac16;\": \"\\u2159\",\n\t\"frac18;\": \"\\u215B\",\n\t\"frac23;\": \"\\u2154\",\n\t\"frac25;\": \"\\u2156\",\n\t\"frac34;\": \"\\u00BE\",\n\t\"frac34\": \"\\u00BE\",\n\t\"frac35;\": \"\\u2157\",\n\t\"frac38;\": \"\\u215C\",\n\t\"frac45;\": \"\\u2158\",\n\t\"frac56;\": \"\\u215A\",\n\t\"frac58;\": \"\\u215D\",\n\t\"frac78;\": \"\\u215E\",\n\t\"frasl;\": \"\\u2044\",\n\t\"frown;\": \"\\u2322\",\n\t\"fscr;\": \"\\uD835\\uDCBB\",\n\t\"Fscr;\": \"\\u2131\",\n\t\"gacute;\": \"\\u01F5\",\n\t\"Gamma;\": \"\\u0393\",\n\t\"gamma;\": \"\\u03B3\",\n\t\"Gammad;\": \"\\u03DC\",\n\t\"gammad;\": \"\\u03DD\",\n\t\"gap;\": \"\\u2A86\",\n\t\"Gbreve;\": \"\\u011E\",\n\t\"gbreve;\": \"\\u011F\",\n\t\"Gcedil;\": \"\\u0122\",\n\t\"Gcirc;\": \"\\u011C\",\n\t\"gcirc;\": \"\\u011D\",\n\t\"Gcy;\": \"\\u0413\",\n\t\"gcy;\": \"\\u0433\",\n\t\"Gdot;\": \"\\u0120\",\n\t\"gdot;\": \"\\u0121\",\n\t\"ge;\": \"\\u2265\",\n\t\"gE;\": \"\\u2267\",\n\t\"gEl;\": \"\\u2A8C\",\n\t\"gel;\": \"\\u22DB\",\n\t\"geq;\": \"\\u2265\",\n\t\"geqq;\": \"\\u2267\",\n\t\"geqslant;\": \"\\u2A7E\",\n\t\"gescc;\": \"\\u2AA9\",\n\t\"ges;\": \"\\u2A7E\",\n\t\"gesdot;\": \"\\u2A80\",\n\t\"gesdoto;\": \"\\u2A82\",\n\t\"gesdotol;\": \"\\u2A84\",\n\t\"gesl;\": \"\\u22DB\\uFE00\",\n\t\"gesles;\": \"\\u2A94\",\n\t\"Gfr;\": \"\\uD835\\uDD0A\",\n\t\"gfr;\": \"\\uD835\\uDD24\",\n\t\"gg;\": \"\\u226B\",\n\t\"Gg;\": \"\\u22D9\",\n\t\"ggg;\": \"\\u22D9\",\n\t\"gimel;\": \"\\u2137\",\n\t\"GJcy;\": \"\\u0403\",\n\t\"gjcy;\": \"\\u0453\",\n\t\"gla;\": \"\\u2AA5\",\n\t\"gl;\": \"\\u2277\",\n\t\"glE;\": \"\\u2A92\",\n\t\"glj;\": \"\\u2AA4\",\n\t\"gnap;\": \"\\u2A8A\",\n\t\"gnapprox;\": \"\\u2A8A\",\n\t\"gne;\": \"\\u2A88\",\n\t\"gnE;\": \"\\u2269\",\n\t\"gneq;\": \"\\u2A88\",\n\t\"gneqq;\": \"\\u2269\",\n\t\"gnsim;\": \"\\u22E7\",\n\t\"Gopf;\": \"\\uD835\\uDD3E\",\n\t\"gopf;\": \"\\uD835\\uDD58\",\n\t\"grave;\": \"\\u0060\",\n\t\"GreaterEqual;\": \"\\u2265\",\n\t\"GreaterEqualLess;\": \"\\u22DB\",\n\t\"GreaterFullEqual;\": \"\\u2267\",\n\t\"GreaterGreater;\": \"\\u2AA2\",\n\t\"GreaterLess;\": \"\\u2277\",\n\t\"GreaterSlantEqual;\": \"\\u2A7E\",\n\t\"GreaterTilde;\": \"\\u2273\",\n\t\"Gscr;\": \"\\uD835\\uDCA2\",\n\t\"gscr;\": \"\\u210A\",\n\t\"gsim;\": \"\\u2273\",\n\t\"gsime;\": \"\\u2A8E\",\n\t\"gsiml;\": \"\\u2A90\",\n\t\"gtcc;\": \"\\u2AA7\",\n\t\"gtcir;\": \"\\u2A7A\",\n\t\"gt;\": \"\\u003E\",\n\t\"gt\": \"\\u003E\",\n\t\"GT;\": \"\\u003E\",\n\t\"GT\": \"\\u003E\",\n\t\"Gt;\": \"\\u226B\",\n\t\"gtdot;\": \"\\u22D7\",\n\t\"gtlPar;\": \"\\u2995\",\n\t\"gtquest;\": \"\\u2A7C\",\n\t\"gtrapprox;\": \"\\u2A86\",\n\t\"gtrarr;\": \"\\u2978\",\n\t\"gtrdot;\": \"\\u22D7\",\n\t\"gtreqless;\": \"\\u22DB\",\n\t\"gtreqqless;\": \"\\u2A8C\",\n\t\"gtrless;\": \"\\u2277\",\n\t\"gtrsim;\": \"\\u2273\",\n\t\"gvertneqq;\": \"\\u2269\\uFE00\",\n\t\"gvnE;\": \"\\u2269\\uFE00\",\n\t\"Hacek;\": \"\\u02C7\",\n\t\"hairsp;\": \"\\u200A\",\n\t\"half;\": \"\\u00BD\",\n\t\"hamilt;\": \"\\u210B\",\n\t\"HARDcy;\": \"\\u042A\",\n\t\"hardcy;\": \"\\u044A\",\n\t\"harrcir;\": \"\\u2948\",\n\t\"harr;\": \"\\u2194\",\n\t\"hArr;\": \"\\u21D4\",\n\t\"harrw;\": \"\\u21AD\",\n\t\"Hat;\": \"\\u005E\",\n\t\"hbar;\": \"\\u210F\",\n\t\"Hcirc;\": \"\\u0124\",\n\t\"hcirc;\": \"\\u0125\",\n\t\"hearts;\": \"\\u2665\",\n\t\"heartsuit;\": \"\\u2665\",\n\t\"hellip;\": \"\\u2026\",\n\t\"hercon;\": \"\\u22B9\",\n\t\"hfr;\": \"\\uD835\\uDD25\",\n\t\"Hfr;\": \"\\u210C\",\n\t\"HilbertSpace;\": \"\\u210B\",\n\t\"hksearow;\": \"\\u2925\",\n\t\"hkswarow;\": \"\\u2926\",\n\t\"hoarr;\": \"\\u21FF\",\n\t\"homtht;\": \"\\u223B\",\n\t\"hookleftarrow;\": \"\\u21A9\",\n\t\"hookrightarrow;\": \"\\u21AA\",\n\t\"hopf;\": \"\\uD835\\uDD59\",\n\t\"Hopf;\": \"\\u210D\",\n\t\"horbar;\": \"\\u2015\",\n\t\"HorizontalLine;\": \"\\u2500\",\n\t\"hscr;\": \"\\uD835\\uDCBD\",\n\t\"Hscr;\": \"\\u210B\",\n\t\"hslash;\": \"\\u210F\",\n\t\"Hstrok;\": \"\\u0126\",\n\t\"hstrok;\": \"\\u0127\",\n\t\"HumpDownHump;\": \"\\u224E\",\n\t\"HumpEqual;\": \"\\u224F\",\n\t\"hybull;\": \"\\u2043\",\n\t\"hyphen;\": \"\\u2010\",\n\t\"Iacute;\": \"\\u00CD\",\n\t\"Iacute\": \"\\u00CD\",\n\t\"iacute;\": \"\\u00ED\",\n\t\"iacute\": \"\\u00ED\",\n\t\"ic;\": \"\\u2063\",\n\t\"Icirc;\": \"\\u00CE\",\n\t\"Icirc\": \"\\u00CE\",\n\t\"icirc;\": \"\\u00EE\",\n\t\"icirc\": \"\\u00EE\",\n\t\"Icy;\": \"\\u0418\",\n\t\"icy;\": \"\\u0438\",\n\t\"Idot;\": \"\\u0130\",\n\t\"IEcy;\": \"\\u0415\",\n\t\"iecy;\": \"\\u0435\",\n\t\"iexcl;\": \"\\u00A1\",\n\t\"iexcl\": \"\\u00A1\",\n\t\"iff;\": \"\\u21D4\",\n\t\"ifr;\": \"\\uD835\\uDD26\",\n\t\"Ifr;\": \"\\u2111\",\n\t\"Igrave;\": \"\\u00CC\",\n\t\"Igrave\": \"\\u00CC\",\n\t\"igrave;\": \"\\u00EC\",\n\t\"igrave\": \"\\u00EC\",\n\t\"ii;\": \"\\u2148\",\n\t\"iiiint;\": \"\\u2A0C\",\n\t\"iiint;\": \"\\u222D\",\n\t\"iinfin;\": \"\\u29DC\",\n\t\"iiota;\": \"\\u2129\",\n\t\"IJlig;\": \"\\u0132\",\n\t\"ijlig;\": \"\\u0133\",\n\t\"Imacr;\": \"\\u012A\",\n\t\"imacr;\": \"\\u012B\",\n\t\"image;\": \"\\u2111\",\n\t\"ImaginaryI;\": \"\\u2148\",\n\t\"imagline;\": \"\\u2110\",\n\t\"imagpart;\": \"\\u2111\",\n\t\"imath;\": \"\\u0131\",\n\t\"Im;\": \"\\u2111\",\n\t\"imof;\": \"\\u22B7\",\n\t\"imped;\": \"\\u01B5\",\n\t\"Implies;\": \"\\u21D2\",\n\t\"incare;\": \"\\u2105\",\n\t\"in;\": \"\\u2208\",\n\t\"infin;\": \"\\u221E\",\n\t\"infintie;\": \"\\u29DD\",\n\t\"inodot;\": \"\\u0131\",\n\t\"intcal;\": \"\\u22BA\",\n\t\"int;\": \"\\u222B\",\n\t\"Int;\": \"\\u222C\",\n\t\"integers;\": \"\\u2124\",\n\t\"Integral;\": \"\\u222B\",\n\t\"intercal;\": \"\\u22BA\",\n\t\"Intersection;\": \"\\u22C2\",\n\t\"intlarhk;\": \"\\u2A17\",\n\t\"intprod;\": \"\\u2A3C\",\n\t\"InvisibleComma;\": \"\\u2063\",\n\t\"InvisibleTimes;\": \"\\u2062\",\n\t\"IOcy;\": \"\\u0401\",\n\t\"iocy;\": \"\\u0451\",\n\t\"Iogon;\": \"\\u012E\",\n\t\"iogon;\": \"\\u012F\",\n\t\"Iopf;\": \"\\uD835\\uDD40\",\n\t\"iopf;\": \"\\uD835\\uDD5A\",\n\t\"Iota;\": \"\\u0399\",\n\t\"iota;\": \"\\u03B9\",\n\t\"iprod;\": \"\\u2A3C\",\n\t\"iquest;\": \"\\u00BF\",\n\t\"iquest\": \"\\u00BF\",\n\t\"iscr;\": \"\\uD835\\uDCBE\",\n\t\"Iscr;\": \"\\u2110\",\n\t\"isin;\": \"\\u2208\",\n\t\"isindot;\": \"\\u22F5\",\n\t\"isinE;\": \"\\u22F9\",\n\t\"isins;\": \"\\u22F4\",\n\t\"isinsv;\": \"\\u22F3\",\n\t\"isinv;\": \"\\u2208\",\n\t\"it;\": \"\\u2062\",\n\t\"Itilde;\": \"\\u0128\",\n\t\"itilde;\": \"\\u0129\",\n\t\"Iukcy;\": \"\\u0406\",\n\t\"iukcy;\": \"\\u0456\",\n\t\"Iuml;\": \"\\u00CF\",\n\t\"Iuml\": \"\\u00CF\",\n\t\"iuml;\": \"\\u00EF\",\n\t\"iuml\": \"\\u00EF\",\n\t\"Jcirc;\": \"\\u0134\",\n\t\"jcirc;\": \"\\u0135\",\n\t\"Jcy;\": \"\\u0419\",\n\t\"jcy;\": \"\\u0439\",\n\t\"Jfr;\": \"\\uD835\\uDD0D\",\n\t\"jfr;\": \"\\uD835\\uDD27\",\n\t\"jmath;\": \"\\u0237\",\n\t\"Jopf;\": \"\\uD835\\uDD41\",\n\t\"jopf;\": \"\\uD835\\uDD5B\",\n\t\"Jscr;\": \"\\uD835\\uDCA5\",\n\t\"jscr;\": \"\\uD835\\uDCBF\",\n\t\"Jsercy;\": \"\\u0408\",\n\t\"jsercy;\": \"\\u0458\",\n\t\"Jukcy;\": \"\\u0404\",\n\t\"jukcy;\": \"\\u0454\",\n\t\"Kappa;\": \"\\u039A\",\n\t\"kappa;\": \"\\u03BA\",\n\t\"kappav;\": \"\\u03F0\",\n\t\"Kcedil;\": \"\\u0136\",\n\t\"kcedil;\": \"\\u0137\",\n\t\"Kcy;\": \"\\u041A\",\n\t\"kcy;\": \"\\u043A\",\n\t\"Kfr;\": \"\\uD835\\uDD0E\",\n\t\"kfr;\": \"\\uD835\\uDD28\",\n\t\"kgreen;\": \"\\u0138\",\n\t\"KHcy;\": \"\\u0425\",\n\t\"khcy;\": \"\\u0445\",\n\t\"KJcy;\": \"\\u040C\",\n\t\"kjcy;\": \"\\u045C\",\n\t\"Kopf;\": \"\\uD835\\uDD42\",\n\t\"kopf;\": \"\\uD835\\uDD5C\",\n\t\"Kscr;\": \"\\uD835\\uDCA6\",\n\t\"kscr;\": \"\\uD835\\uDCC0\",\n\t\"lAarr;\": \"\\u21DA\",\n\t\"Lacute;\": \"\\u0139\",\n\t\"lacute;\": \"\\u013A\",\n\t\"laemptyv;\": \"\\u29B4\",\n\t\"lagran;\": \"\\u2112\",\n\t\"Lambda;\": \"\\u039B\",\n\t\"lambda;\": \"\\u03BB\",\n\t\"lang;\": \"\\u27E8\",\n\t\"Lang;\": \"\\u27EA\",\n\t\"langd;\": \"\\u2991\",\n\t\"langle;\": \"\\u27E8\",\n\t\"lap;\": \"\\u2A85\",\n\t\"Laplacetrf;\": \"\\u2112\",\n\t\"laquo;\": \"\\u00AB\",\n\t\"laquo\": \"\\u00AB\",\n\t\"larrb;\": \"\\u21E4\",\n\t\"larrbfs;\": \"\\u291F\",\n\t\"larr;\": \"\\u2190\",\n\t\"Larr;\": \"\\u219E\",\n\t\"lArr;\": \"\\u21D0\",\n\t\"larrfs;\": \"\\u291D\",\n\t\"larrhk;\": \"\\u21A9\",\n\t\"larrlp;\": \"\\u21AB\",\n\t\"larrpl;\": \"\\u2939\",\n\t\"larrsim;\": \"\\u2973\",\n\t\"larrtl;\": \"\\u21A2\",\n\t\"latail;\": \"\\u2919\",\n\t\"lAtail;\": \"\\u291B\",\n\t\"lat;\": \"\\u2AAB\",\n\t\"late;\": \"\\u2AAD\",\n\t\"lates;\": \"\\u2AAD\\uFE00\",\n\t\"lbarr;\": \"\\u290C\",\n\t\"lBarr;\": \"\\u290E\",\n\t\"lbbrk;\": \"\\u2772\",\n\t\"lbrace;\": \"\\u007B\",\n\t\"lbrack;\": \"\\u005B\",\n\t\"lbrke;\": \"\\u298B\",\n\t\"lbrksld;\": \"\\u298F\",\n\t\"lbrkslu;\": \"\\u298D\",\n\t\"Lcaron;\": \"\\u013D\",\n\t\"lcaron;\": \"\\u013E\",\n\t\"Lcedil;\": \"\\u013B\",\n\t\"lcedil;\": \"\\u013C\",\n\t\"lceil;\": \"\\u2308\",\n\t\"lcub;\": \"\\u007B\",\n\t\"Lcy;\": \"\\u041B\",\n\t\"lcy;\": \"\\u043B\",\n\t\"ldca;\": \"\\u2936\",\n\t\"ldquo;\": \"\\u201C\",\n\t\"ldquor;\": \"\\u201E\",\n\t\"ldrdhar;\": \"\\u2967\",\n\t\"ldrushar;\": \"\\u294B\",\n\t\"ldsh;\": \"\\u21B2\",\n\t\"le;\": \"\\u2264\",\n\t\"lE;\": \"\\u2266\",\n\t\"LeftAngleBracket;\": \"\\u27E8\",\n\t\"LeftArrowBar;\": \"\\u21E4\",\n\t\"leftarrow;\": \"\\u2190\",\n\t\"LeftArrow;\": \"\\u2190\",\n\t\"Leftarrow;\": \"\\u21D0\",\n\t\"LeftArrowRightArrow;\": \"\\u21C6\",\n\t\"leftarrowtail;\": \"\\u21A2\",\n\t\"LeftCeiling;\": \"\\u2308\",\n\t\"LeftDoubleBracket;\": \"\\u27E6\",\n\t\"LeftDownTeeVector;\": \"\\u2961\",\n\t\"LeftDownVectorBar;\": \"\\u2959\",\n\t\"LeftDownVector;\": \"\\u21C3\",\n\t\"LeftFloor;\": \"\\u230A\",\n\t\"leftharpoondown;\": \"\\u21BD\",\n\t\"leftharpoonup;\": \"\\u21BC\",\n\t\"leftleftarrows;\": \"\\u21C7\",\n\t\"leftrightarrow;\": \"\\u2194\",\n\t\"LeftRightArrow;\": \"\\u2194\",\n\t\"Leftrightarrow;\": \"\\u21D4\",\n\t\"leftrightarrows;\": \"\\u21C6\",\n\t\"leftrightharpoons;\": \"\\u21CB\",\n\t\"leftrightsquigarrow;\": \"\\u21AD\",\n\t\"LeftRightVector;\": \"\\u294E\",\n\t\"LeftTeeArrow;\": \"\\u21A4\",\n\t\"LeftTee;\": \"\\u22A3\",\n\t\"LeftTeeVector;\": \"\\u295A\",\n\t\"leftthreetimes;\": \"\\u22CB\",\n\t\"LeftTriangleBar;\": \"\\u29CF\",\n\t\"LeftTriangle;\": \"\\u22B2\",\n\t\"LeftTriangleEqual;\": \"\\u22B4\",\n\t\"LeftUpDownVector;\": \"\\u2951\",\n\t\"LeftUpTeeVector;\": \"\\u2960\",\n\t\"LeftUpVectorBar;\": \"\\u2958\",\n\t\"LeftUpVector;\": \"\\u21BF\",\n\t\"LeftVectorBar;\": \"\\u2952\",\n\t\"LeftVector;\": \"\\u21BC\",\n\t\"lEg;\": \"\\u2A8B\",\n\t\"leg;\": \"\\u22DA\",\n\t\"leq;\": \"\\u2264\",\n\t\"leqq;\": \"\\u2266\",\n\t\"leqslant;\": \"\\u2A7D\",\n\t\"lescc;\": \"\\u2AA8\",\n\t\"les;\": \"\\u2A7D\",\n\t\"lesdot;\": \"\\u2A7F\",\n\t\"lesdoto;\": \"\\u2A81\",\n\t\"lesdotor;\": \"\\u2A83\",\n\t\"lesg;\": \"\\u22DA\\uFE00\",\n\t\"lesges;\": \"\\u2A93\",\n\t\"lessapprox;\": \"\\u2A85\",\n\t\"lessdot;\": \"\\u22D6\",\n\t\"lesseqgtr;\": \"\\u22DA\",\n\t\"lesseqqgtr;\": \"\\u2A8B\",\n\t\"LessEqualGreater;\": \"\\u22DA\",\n\t\"LessFullEqual;\": \"\\u2266\",\n\t\"LessGreater;\": \"\\u2276\",\n\t\"lessgtr;\": \"\\u2276\",\n\t\"LessLess;\": \"\\u2AA1\",\n\t\"lesssim;\": \"\\u2272\",\n\t\"LessSlantEqual;\": \"\\u2A7D\",\n\t\"LessTilde;\": \"\\u2272\",\n\t\"lfisht;\": \"\\u297C\",\n\t\"lfloor;\": \"\\u230A\",\n\t\"Lfr;\": \"\\uD835\\uDD0F\",\n\t\"lfr;\": \"\\uD835\\uDD29\",\n\t\"lg;\": \"\\u2276\",\n\t\"lgE;\": \"\\u2A91\",\n\t\"lHar;\": \"\\u2962\",\n\t\"lhard;\": \"\\u21BD\",\n\t\"lharu;\": \"\\u21BC\",\n\t\"lharul;\": \"\\u296A\",\n\t\"lhblk;\": \"\\u2584\",\n\t\"LJcy;\": \"\\u0409\",\n\t\"ljcy;\": \"\\u0459\",\n\t\"llarr;\": \"\\u21C7\",\n\t\"ll;\": \"\\u226A\",\n\t\"Ll;\": \"\\u22D8\",\n\t\"llcorner;\": \"\\u231E\",\n\t\"Lleftarrow;\": \"\\u21DA\",\n\t\"llhard;\": \"\\u296B\",\n\t\"lltri;\": \"\\u25FA\",\n\t\"Lmidot;\": \"\\u013F\",\n\t\"lmidot;\": \"\\u0140\",\n\t\"lmoustache;\": \"\\u23B0\",\n\t\"lmoust;\": \"\\u23B0\",\n\t\"lnap;\": \"\\u2A89\",\n\t\"lnapprox;\": \"\\u2A89\",\n\t\"lne;\": \"\\u2A87\",\n\t\"lnE;\": \"\\u2268\",\n\t\"lneq;\": \"\\u2A87\",\n\t\"lneqq;\": \"\\u2268\",\n\t\"lnsim;\": \"\\u22E6\",\n\t\"loang;\": \"\\u27EC\",\n\t\"loarr;\": \"\\u21FD\",\n\t\"lobrk;\": \"\\u27E6\",\n\t\"longleftarrow;\": \"\\u27F5\",\n\t\"LongLeftArrow;\": \"\\u27F5\",\n\t\"Longleftarrow;\": \"\\u27F8\",\n\t\"longleftrightarrow;\": \"\\u27F7\",\n\t\"LongLeftRightArrow;\": \"\\u27F7\",\n\t\"Longleftrightarrow;\": \"\\u27FA\",\n\t\"longmapsto;\": \"\\u27FC\",\n\t\"longrightarrow;\": \"\\u27F6\",\n\t\"LongRightArrow;\": \"\\u27F6\",\n\t\"Longrightarrow;\": \"\\u27F9\",\n\t\"looparrowleft;\": \"\\u21AB\",\n\t\"looparrowright;\": \"\\u21AC\",\n\t\"lopar;\": \"\\u2985\",\n\t\"Lopf;\": \"\\uD835\\uDD43\",\n\t\"lopf;\": \"\\uD835\\uDD5D\",\n\t\"loplus;\": \"\\u2A2D\",\n\t\"lotimes;\": \"\\u2A34\",\n\t\"lowast;\": \"\\u2217\",\n\t\"lowbar;\": \"\\u005F\",\n\t\"LowerLeftArrow;\": \"\\u2199\",\n\t\"LowerRightArrow;\": \"\\u2198\",\n\t\"loz;\": \"\\u25CA\",\n\t\"lozenge;\": \"\\u25CA\",\n\t\"lozf;\": \"\\u29EB\",\n\t\"lpar;\": \"\\u0028\",\n\t\"lparlt;\": \"\\u2993\",\n\t\"lrarr;\": \"\\u21C6\",\n\t\"lrcorner;\": \"\\u231F\",\n\t\"lrhar;\": \"\\u21CB\",\n\t\"lrhard;\": \"\\u296D\",\n\t\"lrm;\": \"\\u200E\",\n\t\"lrtri;\": \"\\u22BF\",\n\t\"lsaquo;\": \"\\u2039\",\n\t\"lscr;\": \"\\uD835\\uDCC1\",\n\t\"Lscr;\": \"\\u2112\",\n\t\"lsh;\": \"\\u21B0\",\n\t\"Lsh;\": \"\\u21B0\",\n\t\"lsim;\": \"\\u2272\",\n\t\"lsime;\": \"\\u2A8D\",\n\t\"lsimg;\": \"\\u2A8F\",\n\t\"lsqb;\": \"\\u005B\",\n\t\"lsquo;\": \"\\u2018\",\n\t\"lsquor;\": \"\\u201A\",\n\t\"Lstrok;\": \"\\u0141\",\n\t\"lstrok;\": \"\\u0142\",\n\t\"ltcc;\": \"\\u2AA6\",\n\t\"ltcir;\": \"\\u2A79\",\n\t\"lt;\": \"\\u003C\",\n\t\"lt\": \"\\u003C\",\n\t\"LT;\": \"\\u003C\",\n\t\"LT\": \"\\u003C\",\n\t\"Lt;\": \"\\u226A\",\n\t\"ltdot;\": \"\\u22D6\",\n\t\"lthree;\": \"\\u22CB\",\n\t\"ltimes;\": \"\\u22C9\",\n\t\"ltlarr;\": \"\\u2976\",\n\t\"ltquest;\": \"\\u2A7B\",\n\t\"ltri;\": \"\\u25C3\",\n\t\"ltrie;\": \"\\u22B4\",\n\t\"ltrif;\": \"\\u25C2\",\n\t\"ltrPar;\": \"\\u2996\",\n\t\"lurdshar;\": \"\\u294A\",\n\t\"luruhar;\": \"\\u2966\",\n\t\"lvertneqq;\": \"\\u2268\\uFE00\",\n\t\"lvnE;\": \"\\u2268\\uFE00\",\n\t\"macr;\": \"\\u00AF\",\n\t\"macr\": \"\\u00AF\",\n\t\"male;\": \"\\u2642\",\n\t\"malt;\": \"\\u2720\",\n\t\"maltese;\": \"\\u2720\",\n\t\"Map;\": \"\\u2905\",\n\t\"map;\": \"\\u21A6\",\n\t\"mapsto;\": \"\\u21A6\",\n\t\"mapstodown;\": \"\\u21A7\",\n\t\"mapstoleft;\": \"\\u21A4\",\n\t\"mapstoup;\": \"\\u21A5\",\n\t\"marker;\": \"\\u25AE\",\n\t\"mcomma;\": \"\\u2A29\",\n\t\"Mcy;\": \"\\u041C\",\n\t\"mcy;\": \"\\u043C\",\n\t\"mdash;\": \"\\u2014\",\n\t\"mDDot;\": \"\\u223A\",\n\t\"measuredangle;\": \"\\u2221\",\n\t\"MediumSpace;\": \"\\u205F\",\n\t\"Mellintrf;\": \"\\u2133\",\n\t\"Mfr;\": \"\\uD835\\uDD10\",\n\t\"mfr;\": \"\\uD835\\uDD2A\",\n\t\"mho;\": \"\\u2127\",\n\t\"micro;\": \"\\u00B5\",\n\t\"micro\": \"\\u00B5\",\n\t\"midast;\": \"\\u002A\",\n\t\"midcir;\": \"\\u2AF0\",\n\t\"mid;\": \"\\u2223\",\n\t\"middot;\": \"\\u00B7\",\n\t\"middot\": \"\\u00B7\",\n\t\"minusb;\": \"\\u229F\",\n\t\"minus;\": \"\\u2212\",\n\t\"minusd;\": \"\\u2238\",\n\t\"minusdu;\": \"\\u2A2A\",\n\t\"MinusPlus;\": \"\\u2213\",\n\t\"mlcp;\": \"\\u2ADB\",\n\t\"mldr;\": \"\\u2026\",\n\t\"mnplus;\": \"\\u2213\",\n\t\"models;\": \"\\u22A7\",\n\t\"Mopf;\": \"\\uD835\\uDD44\",\n\t\"mopf;\": \"\\uD835\\uDD5E\",\n\t\"mp;\": \"\\u2213\",\n\t\"mscr;\": \"\\uD835\\uDCC2\",\n\t\"Mscr;\": \"\\u2133\",\n\t\"mstpos;\": \"\\u223E\",\n\t\"Mu;\": \"\\u039C\",\n\t\"mu;\": \"\\u03BC\",\n\t\"multimap;\": \"\\u22B8\",\n\t\"mumap;\": \"\\u22B8\",\n\t\"nabla;\": \"\\u2207\",\n\t\"Nacute;\": \"\\u0143\",\n\t\"nacute;\": \"\\u0144\",\n\t\"nang;\": \"\\u2220\\u20D2\",\n\t\"nap;\": \"\\u2249\",\n\t\"napE;\": \"\\u2A70\\u0338\",\n\t\"napid;\": \"\\u224B\\u0338\",\n\t\"napos;\": \"\\u0149\",\n\t\"napprox;\": \"\\u2249\",\n\t\"natural;\": \"\\u266E\",\n\t\"naturals;\": \"\\u2115\",\n\t\"natur;\": \"\\u266E\",\n\t\"nbsp;\": \"\\u00A0\",\n\t\"nbsp\": \"\\u00A0\",\n\t\"nbump;\": \"\\u224E\\u0338\",\n\t\"nbumpe;\": \"\\u224F\\u0338\",\n\t\"ncap;\": \"\\u2A43\",\n\t\"Ncaron;\": \"\\u0147\",\n\t\"ncaron;\": \"\\u0148\",\n\t\"Ncedil;\": \"\\u0145\",\n\t\"ncedil;\": \"\\u0146\",\n\t\"ncong;\": \"\\u2247\",\n\t\"ncongdot;\": \"\\u2A6D\\u0338\",\n\t\"ncup;\": \"\\u2A42\",\n\t\"Ncy;\": \"\\u041D\",\n\t\"ncy;\": \"\\u043D\",\n\t\"ndash;\": \"\\u2013\",\n\t\"nearhk;\": \"\\u2924\",\n\t\"nearr;\": \"\\u2197\",\n\t\"neArr;\": \"\\u21D7\",\n\t\"nearrow;\": \"\\u2197\",\n\t\"ne;\": \"\\u2260\",\n\t\"nedot;\": \"\\u2250\\u0338\",\n\t\"NegativeMediumSpace;\": \"\\u200B\",\n\t\"NegativeThickSpace;\": \"\\u200B\",\n\t\"NegativeThinSpace;\": \"\\u200B\",\n\t\"NegativeVeryThinSpace;\": \"\\u200B\",\n\t\"nequiv;\": \"\\u2262\",\n\t\"nesear;\": \"\\u2928\",\n\t\"nesim;\": \"\\u2242\\u0338\",\n\t\"NestedGreaterGreater;\": \"\\u226B\",\n\t\"NestedLessLess;\": \"\\u226A\",\n\t\"NewLine;\": \"\\u000A\",\n\t\"nexist;\": \"\\u2204\",\n\t\"nexists;\": \"\\u2204\",\n\t\"Nfr;\": \"\\uD835\\uDD11\",\n\t\"nfr;\": \"\\uD835\\uDD2B\",\n\t\"ngE;\": \"\\u2267\\u0338\",\n\t\"nge;\": \"\\u2271\",\n\t\"ngeq;\": \"\\u2271\",\n\t\"ngeqq;\": \"\\u2267\\u0338\",\n\t\"ngeqslant;\": \"\\u2A7E\\u0338\",\n\t\"nges;\": \"\\u2A7E\\u0338\",\n\t\"nGg;\": \"\\u22D9\\u0338\",\n\t\"ngsim;\": \"\\u2275\",\n\t\"nGt;\": \"\\u226B\\u20D2\",\n\t\"ngt;\": \"\\u226F\",\n\t\"ngtr;\": \"\\u226F\",\n\t\"nGtv;\": \"\\u226B\\u0338\",\n\t\"nharr;\": \"\\u21AE\",\n\t\"nhArr;\": \"\\u21CE\",\n\t\"nhpar;\": \"\\u2AF2\",\n\t\"ni;\": \"\\u220B\",\n\t\"nis;\": \"\\u22FC\",\n\t\"nisd;\": \"\\u22FA\",\n\t\"niv;\": \"\\u220B\",\n\t\"NJcy;\": \"\\u040A\",\n\t\"njcy;\": \"\\u045A\",\n\t\"nlarr;\": \"\\u219A\",\n\t\"nlArr;\": \"\\u21CD\",\n\t\"nldr;\": \"\\u2025\",\n\t\"nlE;\": \"\\u2266\\u0338\",\n\t\"nle;\": \"\\u2270\",\n\t\"nleftarrow;\": \"\\u219A\",\n\t\"nLeftarrow;\": \"\\u21CD\",\n\t\"nleftrightarrow;\": \"\\u21AE\",\n\t\"nLeftrightarrow;\": \"\\u21CE\",\n\t\"nleq;\": \"\\u2270\",\n\t\"nleqq;\": \"\\u2266\\u0338\",\n\t\"nleqslant;\": \"\\u2A7D\\u0338\",\n\t\"nles;\": \"\\u2A7D\\u0338\",\n\t\"nless;\": \"\\u226E\",\n\t\"nLl;\": \"\\u22D8\\u0338\",\n\t\"nlsim;\": \"\\u2274\",\n\t\"nLt;\": \"\\u226A\\u20D2\",\n\t\"nlt;\": \"\\u226E\",\n\t\"nltri;\": \"\\u22EA\",\n\t\"nltrie;\": \"\\u22EC\",\n\t\"nLtv;\": \"\\u226A\\u0338\",\n\t\"nmid;\": \"\\u2224\",\n\t\"NoBreak;\": \"\\u2060\",\n\t\"NonBreakingSpace;\": \"\\u00A0\",\n\t\"nopf;\": \"\\uD835\\uDD5F\",\n\t\"Nopf;\": \"\\u2115\",\n\t\"Not;\": \"\\u2AEC\",\n\t\"not;\": \"\\u00AC\",\n\t\"not\": \"\\u00AC\",\n\t\"NotCongruent;\": \"\\u2262\",\n\t\"NotCupCap;\": \"\\u226D\",\n\t\"NotDoubleVerticalBar;\": \"\\u2226\",\n\t\"NotElement;\": \"\\u2209\",\n\t\"NotEqual;\": \"\\u2260\",\n\t\"NotEqualTilde;\": \"\\u2242\\u0338\",\n\t\"NotExists;\": \"\\u2204\",\n\t\"NotGreater;\": \"\\u226F\",\n\t\"NotGreaterEqual;\": \"\\u2271\",\n\t\"NotGreaterFullEqual;\": \"\\u2267\\u0338\",\n\t\"NotGreaterGreater;\": \"\\u226B\\u0338\",\n\t\"NotGreaterLess;\": \"\\u2279\",\n\t\"NotGreaterSlantEqual;\": \"\\u2A7E\\u0338\",\n\t\"NotGreaterTilde;\": \"\\u2275\",\n\t\"NotHumpDownHump;\": \"\\u224E\\u0338\",\n\t\"NotHumpEqual;\": \"\\u224F\\u0338\",\n\t\"notin;\": \"\\u2209\",\n\t\"notindot;\": \"\\u22F5\\u0338\",\n\t\"notinE;\": \"\\u22F9\\u0338\",\n\t\"notinva;\": \"\\u2209\",\n\t\"notinvb;\": \"\\u22F7\",\n\t\"notinvc;\": \"\\u22F6\",\n\t\"NotLeftTriangleBar;\": \"\\u29CF\\u0338\",\n\t\"NotLeftTriangle;\": \"\\u22EA\",\n\t\"NotLeftTriangleEqual;\": \"\\u22EC\",\n\t\"NotLess;\": \"\\u226E\",\n\t\"NotLessEqual;\": \"\\u2270\",\n\t\"NotLessGreater;\": \"\\u2278\",\n\t\"NotLessLess;\": \"\\u226A\\u0338\",\n\t\"NotLessSlantEqual;\": \"\\u2A7D\\u0338\",\n\t\"NotLessTilde;\": \"\\u2274\",\n\t\"NotNestedGreaterGreater;\": \"\\u2AA2\\u0338\",\n\t\"NotNestedLessLess;\": \"\\u2AA1\\u0338\",\n\t\"notni;\": \"\\u220C\",\n\t\"notniva;\": \"\\u220C\",\n\t\"notnivb;\": \"\\u22FE\",\n\t\"notnivc;\": \"\\u22FD\",\n\t\"NotPrecedes;\": \"\\u2280\",\n\t\"NotPrecedesEqual;\": \"\\u2AAF\\u0338\",\n\t\"NotPrecedesSlantEqual;\": \"\\u22E0\",\n\t\"NotReverseElement;\": \"\\u220C\",\n\t\"NotRightTriangleBar;\": \"\\u29D0\\u0338\",\n\t\"NotRightTriangle;\": \"\\u22EB\",\n\t\"NotRightTriangleEqual;\": \"\\u22ED\",\n\t\"NotSquareSubset;\": \"\\u228F\\u0338\",\n\t\"NotSquareSubsetEqual;\": \"\\u22E2\",\n\t\"NotSquareSuperset;\": \"\\u2290\\u0338\",\n\t\"NotSquareSupersetEqual;\": \"\\u22E3\",\n\t\"NotSubset;\": \"\\u2282\\u20D2\",\n\t\"NotSubsetEqual;\": \"\\u2288\",\n\t\"NotSucceeds;\": \"\\u2281\",\n\t\"NotSucceedsEqual;\": \"\\u2AB0\\u0338\",\n\t\"NotSucceedsSlantEqual;\": \"\\u22E1\",\n\t\"NotSucceedsTilde;\": \"\\u227F\\u0338\",\n\t\"NotSuperset;\": \"\\u2283\\u20D2\",\n\t\"NotSupersetEqual;\": \"\\u2289\",\n\t\"NotTilde;\": \"\\u2241\",\n\t\"NotTildeEqual;\": \"\\u2244\",\n\t\"NotTildeFullEqual;\": \"\\u2247\",\n\t\"NotTildeTilde;\": \"\\u2249\",\n\t\"NotVerticalBar;\": \"\\u2224\",\n\t\"nparallel;\": \"\\u2226\",\n\t\"npar;\": \"\\u2226\",\n\t\"nparsl;\": \"\\u2AFD\\u20E5\",\n\t\"npart;\": \"\\u2202\\u0338\",\n\t\"npolint;\": \"\\u2A14\",\n\t\"npr;\": \"\\u2280\",\n\t\"nprcue;\": \"\\u22E0\",\n\t\"nprec;\": \"\\u2280\",\n\t\"npreceq;\": \"\\u2AAF\\u0338\",\n\t\"npre;\": \"\\u2AAF\\u0338\",\n\t\"nrarrc;\": \"\\u2933\\u0338\",\n\t\"nrarr;\": \"\\u219B\",\n\t\"nrArr;\": \"\\u21CF\",\n\t\"nrarrw;\": \"\\u219D\\u0338\",\n\t\"nrightarrow;\": \"\\u219B\",\n\t\"nRightarrow;\": \"\\u21CF\",\n\t\"nrtri;\": \"\\u22EB\",\n\t\"nrtrie;\": \"\\u22ED\",\n\t\"nsc;\": \"\\u2281\",\n\t\"nsccue;\": \"\\u22E1\",\n\t\"nsce;\": \"\\u2AB0\\u0338\",\n\t\"Nscr;\": \"\\uD835\\uDCA9\",\n\t\"nscr;\": \"\\uD835\\uDCC3\",\n\t\"nshortmid;\": \"\\u2224\",\n\t\"nshortparallel;\": \"\\u2226\",\n\t\"nsim;\": \"\\u2241\",\n\t\"nsime;\": \"\\u2244\",\n\t\"nsimeq;\": \"\\u2244\",\n\t\"nsmid;\": \"\\u2224\",\n\t\"nspar;\": \"\\u2226\",\n\t\"nsqsube;\": \"\\u22E2\",\n\t\"nsqsupe;\": \"\\u22E3\",\n\t\"nsub;\": \"\\u2284\",\n\t\"nsubE;\": \"\\u2AC5\\u0338\",\n\t\"nsube;\": \"\\u2288\",\n\t\"nsubset;\": \"\\u2282\\u20D2\",\n\t\"nsubseteq;\": \"\\u2288\",\n\t\"nsubseteqq;\": \"\\u2AC5\\u0338\",\n\t\"nsucc;\": \"\\u2281\",\n\t\"nsucceq;\": \"\\u2AB0\\u0338\",\n\t\"nsup;\": \"\\u2285\",\n\t\"nsupE;\": \"\\u2AC6\\u0338\",\n\t\"nsupe;\": \"\\u2289\",\n\t\"nsupset;\": \"\\u2283\\u20D2\",\n\t\"nsupseteq;\": \"\\u2289\",\n\t\"nsupseteqq;\": \"\\u2AC6\\u0338\",\n\t\"ntgl;\": \"\\u2279\",\n\t\"Ntilde;\": \"\\u00D1\",\n\t\"Ntilde\": \"\\u00D1\",\n\t\"ntilde;\": \"\\u00F1\",\n\t\"ntilde\": \"\\u00F1\",\n\t\"ntlg;\": \"\\u2278\",\n\t\"ntriangleleft;\": \"\\u22EA\",\n\t\"ntrianglelefteq;\": \"\\u22EC\",\n\t\"ntriangleright;\": \"\\u22EB\",\n\t\"ntrianglerighteq;\": \"\\u22ED\",\n\t\"Nu;\": \"\\u039D\",\n\t\"nu;\": \"\\u03BD\",\n\t\"num;\": \"\\u0023\",\n\t\"numero;\": \"\\u2116\",\n\t\"numsp;\": \"\\u2007\",\n\t\"nvap;\": \"\\u224D\\u20D2\",\n\t\"nvdash;\": \"\\u22AC\",\n\t\"nvDash;\": \"\\u22AD\",\n\t\"nVdash;\": \"\\u22AE\",\n\t\"nVDash;\": \"\\u22AF\",\n\t\"nvge;\": \"\\u2265\\u20D2\",\n\t\"nvgt;\": \"\\u003E\\u20D2\",\n\t\"nvHarr;\": \"\\u2904\",\n\t\"nvinfin;\": \"\\u29DE\",\n\t\"nvlArr;\": \"\\u2902\",\n\t\"nvle;\": \"\\u2264\\u20D2\",\n\t\"nvlt;\": \"\\u003C\\u20D2\",\n\t\"nvltrie;\": \"\\u22B4\\u20D2\",\n\t\"nvrArr;\": \"\\u2903\",\n\t\"nvrtrie;\": \"\\u22B5\\u20D2\",\n\t\"nvsim;\": \"\\u223C\\u20D2\",\n\t\"nwarhk;\": \"\\u2923\",\n\t\"nwarr;\": \"\\u2196\",\n\t\"nwArr;\": \"\\u21D6\",\n\t\"nwarrow;\": \"\\u2196\",\n\t\"nwnear;\": \"\\u2927\",\n\t\"Oacute;\": \"\\u00D3\",\n\t\"Oacute\": \"\\u00D3\",\n\t\"oacute;\": \"\\u00F3\",\n\t\"oacute\": \"\\u00F3\",\n\t\"oast;\": \"\\u229B\",\n\t\"Ocirc;\": \"\\u00D4\",\n\t\"Ocirc\": \"\\u00D4\",\n\t\"ocirc;\": \"\\u00F4\",\n\t\"ocirc\": \"\\u00F4\",\n\t\"ocir;\": \"\\u229A\",\n\t\"Ocy;\": \"\\u041E\",\n\t\"ocy;\": \"\\u043E\",\n\t\"odash;\": \"\\u229D\",\n\t\"Odblac;\": \"\\u0150\",\n\t\"odblac;\": \"\\u0151\",\n\t\"odiv;\": \"\\u2A38\",\n\t\"odot;\": \"\\u2299\",\n\t\"odsold;\": \"\\u29BC\",\n\t\"OElig;\": \"\\u0152\",\n\t\"oelig;\": \"\\u0153\",\n\t\"ofcir;\": \"\\u29BF\",\n\t\"Ofr;\": \"\\uD835\\uDD12\",\n\t\"ofr;\": \"\\uD835\\uDD2C\",\n\t\"ogon;\": \"\\u02DB\",\n\t\"Ograve;\": \"\\u00D2\",\n\t\"Ograve\": \"\\u00D2\",\n\t\"ograve;\": \"\\u00F2\",\n\t\"ograve\": \"\\u00F2\",\n\t\"ogt;\": \"\\u29C1\",\n\t\"ohbar;\": \"\\u29B5\",\n\t\"ohm;\": \"\\u03A9\",\n\t\"oint;\": \"\\u222E\",\n\t\"olarr;\": \"\\u21BA\",\n\t\"olcir;\": \"\\u29BE\",\n\t\"olcross;\": \"\\u29BB\",\n\t\"oline;\": \"\\u203E\",\n\t\"olt;\": \"\\u29C0\",\n\t\"Omacr;\": \"\\u014C\",\n\t\"omacr;\": \"\\u014D\",\n\t\"Omega;\": \"\\u03A9\",\n\t\"omega;\": \"\\u03C9\",\n\t\"Omicron;\": \"\\u039F\",\n\t\"omicron;\": \"\\u03BF\",\n\t\"omid;\": \"\\u29B6\",\n\t\"ominus;\": \"\\u2296\",\n\t\"Oopf;\": \"\\uD835\\uDD46\",\n\t\"oopf;\": \"\\uD835\\uDD60\",\n\t\"opar;\": \"\\u29B7\",\n\t\"OpenCurlyDoubleQuote;\": \"\\u201C\",\n\t\"OpenCurlyQuote;\": \"\\u2018\",\n\t\"operp;\": \"\\u29B9\",\n\t\"oplus;\": \"\\u2295\",\n\t\"orarr;\": \"\\u21BB\",\n\t\"Or;\": \"\\u2A54\",\n\t\"or;\": \"\\u2228\",\n\t\"ord;\": \"\\u2A5D\",\n\t\"order;\": \"\\u2134\",\n\t\"orderof;\": \"\\u2134\",\n\t\"ordf;\": \"\\u00AA\",\n\t\"ordf\": \"\\u00AA\",\n\t\"ordm;\": \"\\u00BA\",\n\t\"ordm\": \"\\u00BA\",\n\t\"origof;\": \"\\u22B6\",\n\t\"oror;\": \"\\u2A56\",\n\t\"orslope;\": \"\\u2A57\",\n\t\"orv;\": \"\\u2A5B\",\n\t\"oS;\": \"\\u24C8\",\n\t\"Oscr;\": \"\\uD835\\uDCAA\",\n\t\"oscr;\": \"\\u2134\",\n\t\"Oslash;\": \"\\u00D8\",\n\t\"Oslash\": \"\\u00D8\",\n\t\"oslash;\": \"\\u00F8\",\n\t\"oslash\": \"\\u00F8\",\n\t\"osol;\": \"\\u2298\",\n\t\"Otilde;\": \"\\u00D5\",\n\t\"Otilde\": \"\\u00D5\",\n\t\"otilde;\": \"\\u00F5\",\n\t\"otilde\": \"\\u00F5\",\n\t\"otimesas;\": \"\\u2A36\",\n\t\"Otimes;\": \"\\u2A37\",\n\t\"otimes;\": \"\\u2297\",\n\t\"Ouml;\": \"\\u00D6\",\n\t\"Ouml\": \"\\u00D6\",\n\t\"ouml;\": \"\\u00F6\",\n\t\"ouml\": \"\\u00F6\",\n\t\"ovbar;\": \"\\u233D\",\n\t\"OverBar;\": \"\\u203E\",\n\t\"OverBrace;\": \"\\u23DE\",\n\t\"OverBracket;\": \"\\u23B4\",\n\t\"OverParenthesis;\": \"\\u23DC\",\n\t\"para;\": \"\\u00B6\",\n\t\"para\": \"\\u00B6\",\n\t\"parallel;\": \"\\u2225\",\n\t\"par;\": \"\\u2225\",\n\t\"parsim;\": \"\\u2AF3\",\n\t\"parsl;\": \"\\u2AFD\",\n\t\"part;\": \"\\u2202\",\n\t\"PartialD;\": \"\\u2202\",\n\t\"Pcy;\": \"\\u041F\",\n\t\"pcy;\": \"\\u043F\",\n\t\"percnt;\": \"\\u0025\",\n\t\"period;\": \"\\u002E\",\n\t\"permil;\": \"\\u2030\",\n\t\"perp;\": \"\\u22A5\",\n\t\"pertenk;\": \"\\u2031\",\n\t\"Pfr;\": \"\\uD835\\uDD13\",\n\t\"pfr;\": \"\\uD835\\uDD2D\",\n\t\"Phi;\": \"\\u03A6\",\n\t\"phi;\": \"\\u03C6\",\n\t\"phiv;\": \"\\u03D5\",\n\t\"phmmat;\": \"\\u2133\",\n\t\"phone;\": \"\\u260E\",\n\t\"Pi;\": \"\\u03A0\",\n\t\"pi;\": \"\\u03C0\",\n\t\"pitchfork;\": \"\\u22D4\",\n\t\"piv;\": \"\\u03D6\",\n\t\"planck;\": \"\\u210F\",\n\t\"planckh;\": \"\\u210E\",\n\t\"plankv;\": \"\\u210F\",\n\t\"plusacir;\": \"\\u2A23\",\n\t\"plusb;\": \"\\u229E\",\n\t\"pluscir;\": \"\\u2A22\",\n\t\"plus;\": \"\\u002B\",\n\t\"plusdo;\": \"\\u2214\",\n\t\"plusdu;\": \"\\u2A25\",\n\t\"pluse;\": \"\\u2A72\",\n\t\"PlusMinus;\": \"\\u00B1\",\n\t\"plusmn;\": \"\\u00B1\",\n\t\"plusmn\": \"\\u00B1\",\n\t\"plussim;\": \"\\u2A26\",\n\t\"plustwo;\": \"\\u2A27\",\n\t\"pm;\": \"\\u00B1\",\n\t\"Poincareplane;\": \"\\u210C\",\n\t\"pointint;\": \"\\u2A15\",\n\t\"popf;\": \"\\uD835\\uDD61\",\n\t\"Popf;\": \"\\u2119\",\n\t\"pound;\": \"\\u00A3\",\n\t\"pound\": \"\\u00A3\",\n\t\"prap;\": \"\\u2AB7\",\n\t\"Pr;\": \"\\u2ABB\",\n\t\"pr;\": \"\\u227A\",\n\t\"prcue;\": \"\\u227C\",\n\t\"precapprox;\": \"\\u2AB7\",\n\t\"prec;\": \"\\u227A\",\n\t\"preccurlyeq;\": \"\\u227C\",\n\t\"Precedes;\": \"\\u227A\",\n\t\"PrecedesEqual;\": \"\\u2AAF\",\n\t\"PrecedesSlantEqual;\": \"\\u227C\",\n\t\"PrecedesTilde;\": \"\\u227E\",\n\t\"preceq;\": \"\\u2AAF\",\n\t\"precnapprox;\": \"\\u2AB9\",\n\t\"precneqq;\": \"\\u2AB5\",\n\t\"precnsim;\": \"\\u22E8\",\n\t\"pre;\": \"\\u2AAF\",\n\t\"prE;\": \"\\u2AB3\",\n\t\"precsim;\": \"\\u227E\",\n\t\"prime;\": \"\\u2032\",\n\t\"Prime;\": \"\\u2033\",\n\t\"primes;\": \"\\u2119\",\n\t\"prnap;\": \"\\u2AB9\",\n\t\"prnE;\": \"\\u2AB5\",\n\t\"prnsim;\": \"\\u22E8\",\n\t\"prod;\": \"\\u220F\",\n\t\"Product;\": \"\\u220F\",\n\t\"profalar;\": \"\\u232E\",\n\t\"profline;\": \"\\u2312\",\n\t\"profsurf;\": \"\\u2313\",\n\t\"prop;\": \"\\u221D\",\n\t\"Proportional;\": \"\\u221D\",\n\t\"Proportion;\": \"\\u2237\",\n\t\"propto;\": \"\\u221D\",\n\t\"prsim;\": \"\\u227E\",\n\t\"prurel;\": \"\\u22B0\",\n\t\"Pscr;\": \"\\uD835\\uDCAB\",\n\t\"pscr;\": \"\\uD835\\uDCC5\",\n\t\"Psi;\": \"\\u03A8\",\n\t\"psi;\": \"\\u03C8\",\n\t\"puncsp;\": \"\\u2008\",\n\t\"Qfr;\": \"\\uD835\\uDD14\",\n\t\"qfr;\": \"\\uD835\\uDD2E\",\n\t\"qint;\": \"\\u2A0C\",\n\t\"qopf;\": \"\\uD835\\uDD62\",\n\t\"Qopf;\": \"\\u211A\",\n\t\"qprime;\": \"\\u2057\",\n\t\"Qscr;\": \"\\uD835\\uDCAC\",\n\t\"qscr;\": \"\\uD835\\uDCC6\",\n\t\"quaternions;\": \"\\u210D\",\n\t\"quatint;\": \"\\u2A16\",\n\t\"quest;\": \"\\u003F\",\n\t\"questeq;\": \"\\u225F\",\n\t\"quot;\": \"\\u0022\",\n\t\"quot\": \"\\u0022\",\n\t\"QUOT;\": \"\\u0022\",\n\t\"QUOT\": \"\\u0022\",\n\t\"rAarr;\": \"\\u21DB\",\n\t\"race;\": \"\\u223D\\u0331\",\n\t\"Racute;\": \"\\u0154\",\n\t\"racute;\": \"\\u0155\",\n\t\"radic;\": \"\\u221A\",\n\t\"raemptyv;\": \"\\u29B3\",\n\t\"rang;\": \"\\u27E9\",\n\t\"Rang;\": \"\\u27EB\",\n\t\"rangd;\": \"\\u2992\",\n\t\"range;\": \"\\u29A5\",\n\t\"rangle;\": \"\\u27E9\",\n\t\"raquo;\": \"\\u00BB\",\n\t\"raquo\": \"\\u00BB\",\n\t\"rarrap;\": \"\\u2975\",\n\t\"rarrb;\": \"\\u21E5\",\n\t\"rarrbfs;\": \"\\u2920\",\n\t\"rarrc;\": \"\\u2933\",\n\t\"rarr;\": \"\\u2192\",\n\t\"Rarr;\": \"\\u21A0\",\n\t\"rArr;\": \"\\u21D2\",\n\t\"rarrfs;\": \"\\u291E\",\n\t\"rarrhk;\": \"\\u21AA\",\n\t\"rarrlp;\": \"\\u21AC\",\n\t\"rarrpl;\": \"\\u2945\",\n\t\"rarrsim;\": \"\\u2974\",\n\t\"Rarrtl;\": \"\\u2916\",\n\t\"rarrtl;\": \"\\u21A3\",\n\t\"rarrw;\": \"\\u219D\",\n\t\"ratail;\": \"\\u291A\",\n\t\"rAtail;\": \"\\u291C\",\n\t\"ratio;\": \"\\u2236\",\n\t\"rationals;\": \"\\u211A\",\n\t\"rbarr;\": \"\\u290D\",\n\t\"rBarr;\": \"\\u290F\",\n\t\"RBarr;\": \"\\u2910\",\n\t\"rbbrk;\": \"\\u2773\",\n\t\"rbrace;\": \"\\u007D\",\n\t\"rbrack;\": \"\\u005D\",\n\t\"rbrke;\": \"\\u298C\",\n\t\"rbrksld;\": \"\\u298E\",\n\t\"rbrkslu;\": \"\\u2990\",\n\t\"Rcaron;\": \"\\u0158\",\n\t\"rcaron;\": \"\\u0159\",\n\t\"Rcedil;\": \"\\u0156\",\n\t\"rcedil;\": \"\\u0157\",\n\t\"rceil;\": \"\\u2309\",\n\t\"rcub;\": \"\\u007D\",\n\t\"Rcy;\": \"\\u0420\",\n\t\"rcy;\": \"\\u0440\",\n\t\"rdca;\": \"\\u2937\",\n\t\"rdldhar;\": \"\\u2969\",\n\t\"rdquo;\": \"\\u201D\",\n\t\"rdquor;\": \"\\u201D\",\n\t\"rdsh;\": \"\\u21B3\",\n\t\"real;\": \"\\u211C\",\n\t\"realine;\": \"\\u211B\",\n\t\"realpart;\": \"\\u211C\",\n\t\"reals;\": \"\\u211D\",\n\t\"Re;\": \"\\u211C\",\n\t\"rect;\": \"\\u25AD\",\n\t\"reg;\": \"\\u00AE\",\n\t\"reg\": \"\\u00AE\",\n\t\"REG;\": \"\\u00AE\",\n\t\"REG\": \"\\u00AE\",\n\t\"ReverseElement;\": \"\\u220B\",\n\t\"ReverseEquilibrium;\": \"\\u21CB\",\n\t\"ReverseUpEquilibrium;\": \"\\u296F\",\n\t\"rfisht;\": \"\\u297D\",\n\t\"rfloor;\": \"\\u230B\",\n\t\"rfr;\": \"\\uD835\\uDD2F\",\n\t\"Rfr;\": \"\\u211C\",\n\t\"rHar;\": \"\\u2964\",\n\t\"rhard;\": \"\\u21C1\",\n\t\"rharu;\": \"\\u21C0\",\n\t\"rharul;\": \"\\u296C\",\n\t\"Rho;\": \"\\u03A1\",\n\t\"rho;\": \"\\u03C1\",\n\t\"rhov;\": \"\\u03F1\",\n\t\"RightAngleBracket;\": \"\\u27E9\",\n\t\"RightArrowBar;\": \"\\u21E5\",\n\t\"rightarrow;\": \"\\u2192\",\n\t\"RightArrow;\": \"\\u2192\",\n\t\"Rightarrow;\": \"\\u21D2\",\n\t\"RightArrowLeftArrow;\": \"\\u21C4\",\n\t\"rightarrowtail;\": \"\\u21A3\",\n\t\"RightCeiling;\": \"\\u2309\",\n\t\"RightDoubleBracket;\": \"\\u27E7\",\n\t\"RightDownTeeVector;\": \"\\u295D\",\n\t\"RightDownVectorBar;\": \"\\u2955\",\n\t\"RightDownVector;\": \"\\u21C2\",\n\t\"RightFloor;\": \"\\u230B\",\n\t\"rightharpoondown;\": \"\\u21C1\",\n\t\"rightharpoonup;\": \"\\u21C0\",\n\t\"rightleftarrows;\": \"\\u21C4\",\n\t\"rightleftharpoons;\": \"\\u21CC\",\n\t\"rightrightarrows;\": \"\\u21C9\",\n\t\"rightsquigarrow;\": \"\\u219D\",\n\t\"RightTeeArrow;\": \"\\u21A6\",\n\t\"RightTee;\": \"\\u22A2\",\n\t\"RightTeeVector;\": \"\\u295B\",\n\t\"rightthreetimes;\": \"\\u22CC\",\n\t\"RightTriangleBar;\": \"\\u29D0\",\n\t\"RightTriangle;\": \"\\u22B3\",\n\t\"RightTriangleEqual;\": \"\\u22B5\",\n\t\"RightUpDownVector;\": \"\\u294F\",\n\t\"RightUpTeeVector;\": \"\\u295C\",\n\t\"RightUpVectorBar;\": \"\\u2954\",\n\t\"RightUpVector;\": \"\\u21BE\",\n\t\"RightVectorBar;\": \"\\u2953\",\n\t\"RightVector;\": \"\\u21C0\",\n\t\"ring;\": \"\\u02DA\",\n\t\"risingdotseq;\": \"\\u2253\",\n\t\"rlarr;\": \"\\u21C4\",\n\t\"rlhar;\": \"\\u21CC\",\n\t\"rlm;\": \"\\u200F\",\n\t\"rmoustache;\": \"\\u23B1\",\n\t\"rmoust;\": \"\\u23B1\",\n\t\"rnmid;\": \"\\u2AEE\",\n\t\"roang;\": \"\\u27ED\",\n\t\"roarr;\": \"\\u21FE\",\n\t\"robrk;\": \"\\u27E7\",\n\t\"ropar;\": \"\\u2986\",\n\t\"ropf;\": \"\\uD835\\uDD63\",\n\t\"Ropf;\": \"\\u211D\",\n\t\"roplus;\": \"\\u2A2E\",\n\t\"rotimes;\": \"\\u2A35\",\n\t\"RoundImplies;\": \"\\u2970\",\n\t\"rpar;\": \"\\u0029\",\n\t\"rpargt;\": \"\\u2994\",\n\t\"rppolint;\": \"\\u2A12\",\n\t\"rrarr;\": \"\\u21C9\",\n\t\"Rrightarrow;\": \"\\u21DB\",\n\t\"rsaquo;\": \"\\u203A\",\n\t\"rscr;\": \"\\uD835\\uDCC7\",\n\t\"Rscr;\": \"\\u211B\",\n\t\"rsh;\": \"\\u21B1\",\n\t\"Rsh;\": \"\\u21B1\",\n\t\"rsqb;\": \"\\u005D\",\n\t\"rsquo;\": \"\\u2019\",\n\t\"rsquor;\": \"\\u2019\",\n\t\"rthree;\": \"\\u22CC\",\n\t\"rtimes;\": \"\\u22CA\",\n\t\"rtri;\": \"\\u25B9\",\n\t\"rtrie;\": \"\\u22B5\",\n\t\"rtrif;\": \"\\u25B8\",\n\t\"rtriltri;\": \"\\u29CE\",\n\t\"RuleDelayed;\": \"\\u29F4\",\n\t\"ruluhar;\": \"\\u2968\",\n\t\"rx;\": \"\\u211E\",\n\t\"Sacute;\": \"\\u015A\",\n\t\"sacute;\": \"\\u015B\",\n\t\"sbquo;\": \"\\u201A\",\n\t\"scap;\": \"\\u2AB8\",\n\t\"Scaron;\": \"\\u0160\",\n\t\"scaron;\": \"\\u0161\",\n\t\"Sc;\": \"\\u2ABC\",\n\t\"sc;\": \"\\u227B\",\n\t\"sccue;\": \"\\u227D\",\n\t\"sce;\": \"\\u2AB0\",\n\t\"scE;\": \"\\u2AB4\",\n\t\"Scedil;\": \"\\u015E\",\n\t\"scedil;\": \"\\u015F\",\n\t\"Scirc;\": \"\\u015C\",\n\t\"scirc;\": \"\\u015D\",\n\t\"scnap;\": \"\\u2ABA\",\n\t\"scnE;\": \"\\u2AB6\",\n\t\"scnsim;\": \"\\u22E9\",\n\t\"scpolint;\": \"\\u2A13\",\n\t\"scsim;\": \"\\u227F\",\n\t\"Scy;\": \"\\u0421\",\n\t\"scy;\": \"\\u0441\",\n\t\"sdotb;\": \"\\u22A1\",\n\t\"sdot;\": \"\\u22C5\",\n\t\"sdote;\": \"\\u2A66\",\n\t\"searhk;\": \"\\u2925\",\n\t\"searr;\": \"\\u2198\",\n\t\"seArr;\": \"\\u21D8\",\n\t\"searrow;\": \"\\u2198\",\n\t\"sect;\": \"\\u00A7\",\n\t\"sect\": \"\\u00A7\",\n\t\"semi;\": \"\\u003B\",\n\t\"seswar;\": \"\\u2929\",\n\t\"setminus;\": \"\\u2216\",\n\t\"setmn;\": \"\\u2216\",\n\t\"sext;\": \"\\u2736\",\n\t\"Sfr;\": \"\\uD835\\uDD16\",\n\t\"sfr;\": \"\\uD835\\uDD30\",\n\t\"sfrown;\": \"\\u2322\",\n\t\"sharp;\": \"\\u266F\",\n\t\"SHCHcy;\": \"\\u0429\",\n\t\"shchcy;\": \"\\u0449\",\n\t\"SHcy;\": \"\\u0428\",\n\t\"shcy;\": \"\\u0448\",\n\t\"ShortDownArrow;\": \"\\u2193\",\n\t\"ShortLeftArrow;\": \"\\u2190\",\n\t\"shortmid;\": \"\\u2223\",\n\t\"shortparallel;\": \"\\u2225\",\n\t\"ShortRightArrow;\": \"\\u2192\",\n\t\"ShortUpArrow;\": \"\\u2191\",\n\t\"shy;\": \"\\u00AD\",\n\t\"shy\": \"\\u00AD\",\n\t\"Sigma;\": \"\\u03A3\",\n\t\"sigma;\": \"\\u03C3\",\n\t\"sigmaf;\": \"\\u03C2\",\n\t\"sigmav;\": \"\\u03C2\",\n\t\"sim;\": \"\\u223C\",\n\t\"simdot;\": \"\\u2A6A\",\n\t\"sime;\": \"\\u2243\",\n\t\"simeq;\": \"\\u2243\",\n\t\"simg;\": \"\\u2A9E\",\n\t\"simgE;\": \"\\u2AA0\",\n\t\"siml;\": \"\\u2A9D\",\n\t\"simlE;\": \"\\u2A9F\",\n\t\"simne;\": \"\\u2246\",\n\t\"simplus;\": \"\\u2A24\",\n\t\"simrarr;\": \"\\u2972\",\n\t\"slarr;\": \"\\u2190\",\n\t\"SmallCircle;\": \"\\u2218\",\n\t\"smallsetminus;\": \"\\u2216\",\n\t\"smashp;\": \"\\u2A33\",\n\t\"smeparsl;\": \"\\u29E4\",\n\t\"smid;\": \"\\u2223\",\n\t\"smile;\": \"\\u2323\",\n\t\"smt;\": \"\\u2AAA\",\n\t\"smte;\": \"\\u2AAC\",\n\t\"smtes;\": \"\\u2AAC\\uFE00\",\n\t\"SOFTcy;\": \"\\u042C\",\n\t\"softcy;\": \"\\u044C\",\n\t\"solbar;\": \"\\u233F\",\n\t\"solb;\": \"\\u29C4\",\n\t\"sol;\": \"\\u002F\",\n\t\"Sopf;\": \"\\uD835\\uDD4A\",\n\t\"sopf;\": \"\\uD835\\uDD64\",\n\t\"spades;\": \"\\u2660\",\n\t\"spadesuit;\": \"\\u2660\",\n\t\"spar;\": \"\\u2225\",\n\t\"sqcap;\": \"\\u2293\",\n\t\"sqcaps;\": \"\\u2293\\uFE00\",\n\t\"sqcup;\": \"\\u2294\",\n\t\"sqcups;\": \"\\u2294\\uFE00\",\n\t\"Sqrt;\": \"\\u221A\",\n\t\"sqsub;\": \"\\u228F\",\n\t\"sqsube;\": \"\\u2291\",\n\t\"sqsubset;\": \"\\u228F\",\n\t\"sqsubseteq;\": \"\\u2291\",\n\t\"sqsup;\": \"\\u2290\",\n\t\"sqsupe;\": \"\\u2292\",\n\t\"sqsupset;\": \"\\u2290\",\n\t\"sqsupseteq;\": \"\\u2292\",\n\t\"square;\": \"\\u25A1\",\n\t\"Square;\": \"\\u25A1\",\n\t\"SquareIntersection;\": \"\\u2293\",\n\t\"SquareSubset;\": \"\\u228F\",\n\t\"SquareSubsetEqual;\": \"\\u2291\",\n\t\"SquareSuperset;\": \"\\u2290\",\n\t\"SquareSupersetEqual;\": \"\\u2292\",\n\t\"SquareUnion;\": \"\\u2294\",\n\t\"squarf;\": \"\\u25AA\",\n\t\"squ;\": \"\\u25A1\",\n\t\"squf;\": \"\\u25AA\",\n\t\"srarr;\": \"\\u2192\",\n\t\"Sscr;\": \"\\uD835\\uDCAE\",\n\t\"sscr;\": \"\\uD835\\uDCC8\",\n\t\"ssetmn;\": \"\\u2216\",\n\t\"ssmile;\": \"\\u2323\",\n\t\"sstarf;\": \"\\u22C6\",\n\t\"Star;\": \"\\u22C6\",\n\t\"star;\": \"\\u2606\",\n\t\"starf;\": \"\\u2605\",\n\t\"straightepsilon;\": \"\\u03F5\",\n\t\"straightphi;\": \"\\u03D5\",\n\t\"strns;\": \"\\u00AF\",\n\t\"sub;\": \"\\u2282\",\n\t\"Sub;\": \"\\u22D0\",\n\t\"subdot;\": \"\\u2ABD\",\n\t\"subE;\": \"\\u2AC5\",\n\t\"sube;\": \"\\u2286\",\n\t\"subedot;\": \"\\u2AC3\",\n\t\"submult;\": \"\\u2AC1\",\n\t\"subnE;\": \"\\u2ACB\",\n\t\"subne;\": \"\\u228A\",\n\t\"subplus;\": \"\\u2ABF\",\n\t\"subrarr;\": \"\\u2979\",\n\t\"subset;\": \"\\u2282\",\n\t\"Subset;\": \"\\u22D0\",\n\t\"subseteq;\": \"\\u2286\",\n\t\"subseteqq;\": \"\\u2AC5\",\n\t\"SubsetEqual;\": \"\\u2286\",\n\t\"subsetneq;\": \"\\u228A\",\n\t\"subsetneqq;\": \"\\u2ACB\",\n\t\"subsim;\": \"\\u2AC7\",\n\t\"subsub;\": \"\\u2AD5\",\n\t\"subsup;\": \"\\u2AD3\",\n\t\"succapprox;\": \"\\u2AB8\",\n\t\"succ;\": \"\\u227B\",\n\t\"succcurlyeq;\": \"\\u227D\",\n\t\"Succeeds;\": \"\\u227B\",\n\t\"SucceedsEqual;\": \"\\u2AB0\",\n\t\"SucceedsSlantEqual;\": \"\\u227D\",\n\t\"SucceedsTilde;\": \"\\u227F\",\n\t\"succeq;\": \"\\u2AB0\",\n\t\"succnapprox;\": \"\\u2ABA\",\n\t\"succneqq;\": \"\\u2AB6\",\n\t\"succnsim;\": \"\\u22E9\",\n\t\"succsim;\": \"\\u227F\",\n\t\"SuchThat;\": \"\\u220B\",\n\t\"sum;\": \"\\u2211\",\n\t\"Sum;\": \"\\u2211\",\n\t\"sung;\": \"\\u266A\",\n\t\"sup1;\": \"\\u00B9\",\n\t\"sup1\": \"\\u00B9\",\n\t\"sup2;\": \"\\u00B2\",\n\t\"sup2\": \"\\u00B2\",\n\t\"sup3;\": \"\\u00B3\",\n\t\"sup3\": \"\\u00B3\",\n\t\"sup;\": \"\\u2283\",\n\t\"Sup;\": \"\\u22D1\",\n\t\"supdot;\": \"\\u2ABE\",\n\t\"supdsub;\": \"\\u2AD8\",\n\t\"supE;\": \"\\u2AC6\",\n\t\"supe;\": \"\\u2287\",\n\t\"supedot;\": \"\\u2AC4\",\n\t\"Superset;\": \"\\u2283\",\n\t\"SupersetEqual;\": \"\\u2287\",\n\t\"suphsol;\": \"\\u27C9\",\n\t\"suphsub;\": \"\\u2AD7\",\n\t\"suplarr;\": \"\\u297B\",\n\t\"supmult;\": \"\\u2AC2\",\n\t\"supnE;\": \"\\u2ACC\",\n\t\"supne;\": \"\\u228B\",\n\t\"supplus;\": \"\\u2AC0\",\n\t\"supset;\": \"\\u2283\",\n\t\"Supset;\": \"\\u22D1\",\n\t\"supseteq;\": \"\\u2287\",\n\t\"supseteqq;\": \"\\u2AC6\",\n\t\"supsetneq;\": \"\\u228B\",\n\t\"supsetneqq;\": \"\\u2ACC\",\n\t\"supsim;\": \"\\u2AC8\",\n\t\"supsub;\": \"\\u2AD4\",\n\t\"supsup;\": \"\\u2AD6\",\n\t\"swarhk;\": \"\\u2926\",\n\t\"swarr;\": \"\\u2199\",\n\t\"swArr;\": \"\\u21D9\",\n\t\"swarrow;\": \"\\u2199\",\n\t\"swnwar;\": \"\\u292A\",\n\t\"szlig;\": \"\\u00DF\",\n\t\"szlig\": \"\\u00DF\",\n\t\"Tab;\": \"\\u0009\",\n\t\"target;\": \"\\u2316\",\n\t\"Tau;\": \"\\u03A4\",\n\t\"tau;\": \"\\u03C4\",\n\t\"tbrk;\": \"\\u23B4\",\n\t\"Tcaron;\": \"\\u0164\",\n\t\"tcaron;\": \"\\u0165\",\n\t\"Tcedil;\": \"\\u0162\",\n\t\"tcedil;\": \"\\u0163\",\n\t\"Tcy;\": \"\\u0422\",\n\t\"tcy;\": \"\\u0442\",\n\t\"tdot;\": \"\\u20DB\",\n\t\"telrec;\": \"\\u2315\",\n\t\"Tfr;\": \"\\uD835\\uDD17\",\n\t\"tfr;\": \"\\uD835\\uDD31\",\n\t\"there4;\": \"\\u2234\",\n\t\"therefore;\": \"\\u2234\",\n\t\"Therefore;\": \"\\u2234\",\n\t\"Theta;\": \"\\u0398\",\n\t\"theta;\": \"\\u03B8\",\n\t\"thetasym;\": \"\\u03D1\",\n\t\"thetav;\": \"\\u03D1\",\n\t\"thickapprox;\": \"\\u2248\",\n\t\"thicksim;\": \"\\u223C\",\n\t\"ThickSpace;\": \"\\u205F\\u200A\",\n\t\"ThinSpace;\": \"\\u2009\",\n\t\"thinsp;\": \"\\u2009\",\n\t\"thkap;\": \"\\u2248\",\n\t\"thksim;\": \"\\u223C\",\n\t\"THORN;\": \"\\u00DE\",\n\t\"THORN\": \"\\u00DE\",\n\t\"thorn;\": \"\\u00FE\",\n\t\"thorn\": \"\\u00FE\",\n\t\"tilde;\": \"\\u02DC\",\n\t\"Tilde;\": \"\\u223C\",\n\t\"TildeEqual;\": \"\\u2243\",\n\t\"TildeFullEqual;\": \"\\u2245\",\n\t\"TildeTilde;\": \"\\u2248\",\n\t\"timesbar;\": \"\\u2A31\",\n\t\"timesb;\": \"\\u22A0\",\n\t\"times;\": \"\\u00D7\",\n\t\"times\": \"\\u00D7\",\n\t\"timesd;\": \"\\u2A30\",\n\t\"tint;\": \"\\u222D\",\n\t\"toea;\": \"\\u2928\",\n\t\"topbot;\": \"\\u2336\",\n\t\"topcir;\": \"\\u2AF1\",\n\t\"top;\": \"\\u22A4\",\n\t\"Topf;\": \"\\uD835\\uDD4B\",\n\t\"topf;\": \"\\uD835\\uDD65\",\n\t\"topfork;\": \"\\u2ADA\",\n\t\"tosa;\": \"\\u2929\",\n\t\"tprime;\": \"\\u2034\",\n\t\"trade;\": \"\\u2122\",\n\t\"TRADE;\": \"\\u2122\",\n\t\"triangle;\": \"\\u25B5\",\n\t\"triangledown;\": \"\\u25BF\",\n\t\"triangleleft;\": \"\\u25C3\",\n\t\"trianglelefteq;\": \"\\u22B4\",\n\t\"triangleq;\": \"\\u225C\",\n\t\"triangleright;\": \"\\u25B9\",\n\t\"trianglerighteq;\": \"\\u22B5\",\n\t\"tridot;\": \"\\u25EC\",\n\t\"trie;\": \"\\u225C\",\n\t\"triminus;\": \"\\u2A3A\",\n\t\"TripleDot;\": \"\\u20DB\",\n\t\"triplus;\": \"\\u2A39\",\n\t\"trisb;\": \"\\u29CD\",\n\t\"tritime;\": \"\\u2A3B\",\n\t\"trpezium;\": \"\\u23E2\",\n\t\"Tscr;\": \"\\uD835\\uDCAF\",\n\t\"tscr;\": \"\\uD835\\uDCC9\",\n\t\"TScy;\": \"\\u0426\",\n\t\"tscy;\": \"\\u0446\",\n\t\"TSHcy;\": \"\\u040B\",\n\t\"tshcy;\": \"\\u045B\",\n\t\"Tstrok;\": \"\\u0166\",\n\t\"tstrok;\": \"\\u0167\",\n\t\"twixt;\": \"\\u226C\",\n\t\"twoheadleftarrow;\": \"\\u219E\",\n\t\"twoheadrightarrow;\": \"\\u21A0\",\n\t\"Uacute;\": \"\\u00DA\",\n\t\"Uacute\": \"\\u00DA\",\n\t\"uacute;\": \"\\u00FA\",\n\t\"uacute\": \"\\u00FA\",\n\t\"uarr;\": \"\\u2191\",\n\t\"Uarr;\": \"\\u219F\",\n\t\"uArr;\": \"\\u21D1\",\n\t\"Uarrocir;\": \"\\u2949\",\n\t\"Ubrcy;\": \"\\u040E\",\n\t\"ubrcy;\": \"\\u045E\",\n\t\"Ubreve;\": \"\\u016C\",\n\t\"ubreve;\": \"\\u016D\",\n\t\"Ucirc;\": \"\\u00DB\",\n\t\"Ucirc\": \"\\u00DB\",\n\t\"ucirc;\": \"\\u00FB\",\n\t\"ucirc\": \"\\u00FB\",\n\t\"Ucy;\": \"\\u0423\",\n\t\"ucy;\": \"\\u0443\",\n\t\"udarr;\": \"\\u21C5\",\n\t\"Udblac;\": \"\\u0170\",\n\t\"udblac;\": \"\\u0171\",\n\t\"udhar;\": \"\\u296E\",\n\t\"ufisht;\": \"\\u297E\",\n\t\"Ufr;\": \"\\uD835\\uDD18\",\n\t\"ufr;\": \"\\uD835\\uDD32\",\n\t\"Ugrave;\": \"\\u00D9\",\n\t\"Ugrave\": \"\\u00D9\",\n\t\"ugrave;\": \"\\u00F9\",\n\t\"ugrave\": \"\\u00F9\",\n\t\"uHar;\": \"\\u2963\",\n\t\"uharl;\": \"\\u21BF\",\n\t\"uharr;\": \"\\u21BE\",\n\t\"uhblk;\": \"\\u2580\",\n\t\"ulcorn;\": \"\\u231C\",\n\t\"ulcorner;\": \"\\u231C\",\n\t\"ulcrop;\": \"\\u230F\",\n\t\"ultri;\": \"\\u25F8\",\n\t\"Umacr;\": \"\\u016A\",\n\t\"umacr;\": \"\\u016B\",\n\t\"uml;\": \"\\u00A8\",\n\t\"uml\": \"\\u00A8\",\n\t\"UnderBar;\": \"\\u005F\",\n\t\"UnderBrace;\": \"\\u23DF\",\n\t\"UnderBracket;\": \"\\u23B5\",\n\t\"UnderParenthesis;\": \"\\u23DD\",\n\t\"Union;\": \"\\u22C3\",\n\t\"UnionPlus;\": \"\\u228E\",\n\t\"Uogon;\": \"\\u0172\",\n\t\"uogon;\": \"\\u0173\",\n\t\"Uopf;\": \"\\uD835\\uDD4C\",\n\t\"uopf;\": \"\\uD835\\uDD66\",\n\t\"UpArrowBar;\": \"\\u2912\",\n\t\"uparrow;\": \"\\u2191\",\n\t\"UpArrow;\": \"\\u2191\",\n\t\"Uparrow;\": \"\\u21D1\",\n\t\"UpArrowDownArrow;\": \"\\u21C5\",\n\t\"updownarrow;\": \"\\u2195\",\n\t\"UpDownArrow;\": \"\\u2195\",\n\t\"Updownarrow;\": \"\\u21D5\",\n\t\"UpEquilibrium;\": \"\\u296E\",\n\t\"upharpoonleft;\": \"\\u21BF\",\n\t\"upharpoonright;\": \"\\u21BE\",\n\t\"uplus;\": \"\\u228E\",\n\t\"UpperLeftArrow;\": \"\\u2196\",\n\t\"UpperRightArrow;\": \"\\u2197\",\n\t\"upsi;\": \"\\u03C5\",\n\t\"Upsi;\": \"\\u03D2\",\n\t\"upsih;\": \"\\u03D2\",\n\t\"Upsilon;\": \"\\u03A5\",\n\t\"upsilon;\": \"\\u03C5\",\n\t\"UpTeeArrow;\": \"\\u21A5\",\n\t\"UpTee;\": \"\\u22A5\",\n\t\"upuparrows;\": \"\\u21C8\",\n\t\"urcorn;\": \"\\u231D\",\n\t\"urcorner;\": \"\\u231D\",\n\t\"urcrop;\": \"\\u230E\",\n\t\"Uring;\": \"\\u016E\",\n\t\"uring;\": \"\\u016F\",\n\t\"urtri;\": \"\\u25F9\",\n\t\"Uscr;\": \"\\uD835\\uDCB0\",\n\t\"uscr;\": \"\\uD835\\uDCCA\",\n\t\"utdot;\": \"\\u22F0\",\n\t\"Utilde;\": \"\\u0168\",\n\t\"utilde;\": \"\\u0169\",\n\t\"utri;\": \"\\u25B5\",\n\t\"utrif;\": \"\\u25B4\",\n\t\"uuarr;\": \"\\u21C8\",\n\t\"Uuml;\": \"\\u00DC\",\n\t\"Uuml\": \"\\u00DC\",\n\t\"uuml;\": \"\\u00FC\",\n\t\"uuml\": \"\\u00FC\",\n\t\"uwangle;\": \"\\u29A7\",\n\t\"vangrt;\": \"\\u299C\",\n\t\"varepsilon;\": \"\\u03F5\",\n\t\"varkappa;\": \"\\u03F0\",\n\t\"varnothing;\": \"\\u2205\",\n\t\"varphi;\": \"\\u03D5\",\n\t\"varpi;\": \"\\u03D6\",\n\t\"varpropto;\": \"\\u221D\",\n\t\"varr;\": \"\\u2195\",\n\t\"vArr;\": \"\\u21D5\",\n\t\"varrho;\": \"\\u03F1\",\n\t\"varsigma;\": \"\\u03C2\",\n\t\"varsubsetneq;\": \"\\u228A\\uFE00\",\n\t\"varsubsetneqq;\": \"\\u2ACB\\uFE00\",\n\t\"varsupsetneq;\": \"\\u228B\\uFE00\",\n\t\"varsupsetneqq;\": \"\\u2ACC\\uFE00\",\n\t\"vartheta;\": \"\\u03D1\",\n\t\"vartriangleleft;\": \"\\u22B2\",\n\t\"vartriangleright;\": \"\\u22B3\",\n\t\"vBar;\": \"\\u2AE8\",\n\t\"Vbar;\": \"\\u2AEB\",\n\t\"vBarv;\": \"\\u2AE9\",\n\t\"Vcy;\": \"\\u0412\",\n\t\"vcy;\": \"\\u0432\",\n\t\"vdash;\": \"\\u22A2\",\n\t\"vDash;\": \"\\u22A8\",\n\t\"Vdash;\": \"\\u22A9\",\n\t\"VDash;\": \"\\u22AB\",\n\t\"Vdashl;\": \"\\u2AE6\",\n\t\"veebar;\": \"\\u22BB\",\n\t\"vee;\": \"\\u2228\",\n\t\"Vee;\": \"\\u22C1\",\n\t\"veeeq;\": \"\\u225A\",\n\t\"vellip;\": \"\\u22EE\",\n\t\"verbar;\": \"\\u007C\",\n\t\"Verbar;\": \"\\u2016\",\n\t\"vert;\": \"\\u007C\",\n\t\"Vert;\": \"\\u2016\",\n\t\"VerticalBar;\": \"\\u2223\",\n\t\"VerticalLine;\": \"\\u007C\",\n\t\"VerticalSeparator;\": \"\\u2758\",\n\t\"VerticalTilde;\": \"\\u2240\",\n\t\"VeryThinSpace;\": \"\\u200A\",\n\t\"Vfr;\": \"\\uD835\\uDD19\",\n\t\"vfr;\": \"\\uD835\\uDD33\",\n\t\"vltri;\": \"\\u22B2\",\n\t\"vnsub;\": \"\\u2282\\u20D2\",\n\t\"vnsup;\": \"\\u2283\\u20D2\",\n\t\"Vopf;\": \"\\uD835\\uDD4D\",\n\t\"vopf;\": \"\\uD835\\uDD67\",\n\t\"vprop;\": \"\\u221D\",\n\t\"vrtri;\": \"\\u22B3\",\n\t\"Vscr;\": \"\\uD835\\uDCB1\",\n\t\"vscr;\": \"\\uD835\\uDCCB\",\n\t\"vsubnE;\": \"\\u2ACB\\uFE00\",\n\t\"vsubne;\": \"\\u228A\\uFE00\",\n\t\"vsupnE;\": \"\\u2ACC\\uFE00\",\n\t\"vsupne;\": \"\\u228B\\uFE00\",\n\t\"Vvdash;\": \"\\u22AA\",\n\t\"vzigzag;\": \"\\u299A\",\n\t\"Wcirc;\": \"\\u0174\",\n\t\"wcirc;\": \"\\u0175\",\n\t\"wedbar;\": \"\\u2A5F\",\n\t\"wedge;\": \"\\u2227\",\n\t\"Wedge;\": \"\\u22C0\",\n\t\"wedgeq;\": \"\\u2259\",\n\t\"weierp;\": \"\\u2118\",\n\t\"Wfr;\": \"\\uD835\\uDD1A\",\n\t\"wfr;\": \"\\uD835\\uDD34\",\n\t\"Wopf;\": \"\\uD835\\uDD4E\",\n\t\"wopf;\": \"\\uD835\\uDD68\",\n\t\"wp;\": \"\\u2118\",\n\t\"wr;\": \"\\u2240\",\n\t\"wreath;\": \"\\u2240\",\n\t\"Wscr;\": \"\\uD835\\uDCB2\",\n\t\"wscr;\": \"\\uD835\\uDCCC\",\n\t\"xcap;\": \"\\u22C2\",\n\t\"xcirc;\": \"\\u25EF\",\n\t\"xcup;\": \"\\u22C3\",\n\t\"xdtri;\": \"\\u25BD\",\n\t\"Xfr;\": \"\\uD835\\uDD1B\",\n\t\"xfr;\": \"\\uD835\\uDD35\",\n\t\"xharr;\": \"\\u27F7\",\n\t\"xhArr;\": \"\\u27FA\",\n\t\"Xi;\": \"\\u039E\",\n\t\"xi;\": \"\\u03BE\",\n\t\"xlarr;\": \"\\u27F5\",\n\t\"xlArr;\": \"\\u27F8\",\n\t\"xmap;\": \"\\u27FC\",\n\t\"xnis;\": \"\\u22FB\",\n\t\"xodot;\": \"\\u2A00\",\n\t\"Xopf;\": \"\\uD835\\uDD4F\",\n\t\"xopf;\": \"\\uD835\\uDD69\",\n\t\"xoplus;\": \"\\u2A01\",\n\t\"xotime;\": \"\\u2A02\",\n\t\"xrarr;\": \"\\u27F6\",\n\t\"xrArr;\": \"\\u27F9\",\n\t\"Xscr;\": \"\\uD835\\uDCB3\",\n\t\"xscr;\": \"\\uD835\\uDCCD\",\n\t\"xsqcup;\": \"\\u2A06\",\n\t\"xuplus;\": \"\\u2A04\",\n\t\"xutri;\": \"\\u25B3\",\n\t\"xvee;\": \"\\u22C1\",\n\t\"xwedge;\": \"\\u22C0\",\n\t\"Yacute;\": \"\\u00DD\",\n\t\"Yacute\": \"\\u00DD\",\n\t\"yacute;\": \"\\u00FD\",\n\t\"yacute\": \"\\u00FD\",\n\t\"YAcy;\": \"\\u042F\",\n\t\"yacy;\": \"\\u044F\",\n\t\"Ycirc;\": \"\\u0176\",\n\t\"ycirc;\": \"\\u0177\",\n\t\"Ycy;\": \"\\u042B\",\n\t\"ycy;\": \"\\u044B\",\n\t\"yen;\": \"\\u00A5\",\n\t\"yen\": \"\\u00A5\",\n\t\"Yfr;\": \"\\uD835\\uDD1C\",\n\t\"yfr;\": \"\\uD835\\uDD36\",\n\t\"YIcy;\": \"\\u0407\",\n\t\"yicy;\": \"\\u0457\",\n\t\"Yopf;\": \"\\uD835\\uDD50\",\n\t\"yopf;\": \"\\uD835\\uDD6A\",\n\t\"Yscr;\": \"\\uD835\\uDCB4\",\n\t\"yscr;\": \"\\uD835\\uDCCE\",\n\t\"YUcy;\": \"\\u042E\",\n\t\"yucy;\": \"\\u044E\",\n\t\"yuml;\": \"\\u00FF\",\n\t\"yuml\": \"\\u00FF\",\n\t\"Yuml;\": \"\\u0178\",\n\t\"Zacute;\": \"\\u0179\",\n\t\"zacute;\": \"\\u017A\",\n\t\"Zcaron;\": \"\\u017D\",\n\t\"zcaron;\": \"\\u017E\",\n\t\"Zcy;\": \"\\u0417\",\n\t\"zcy;\": \"\\u0437\",\n\t\"Zdot;\": \"\\u017B\",\n\t\"zdot;\": \"\\u017C\",\n\t\"zeetrf;\": \"\\u2128\",\n\t\"ZeroWidthSpace;\": \"\\u200B\",\n\t\"Zeta;\": \"\\u0396\",\n\t\"zeta;\": \"\\u03B6\",\n\t\"zfr;\": \"\\uD835\\uDD37\",\n\t\"Zfr;\": \"\\u2128\",\n\t\"ZHcy;\": \"\\u0416\",\n\t\"zhcy;\": \"\\u0436\",\n\t\"zigrarr;\": \"\\u21DD\",\n\t\"zopf;\": \"\\uD835\\uDD6B\",\n\t\"Zopf;\": \"\\u2124\",\n\t\"Zscr;\": \"\\uD835\\uDCB5\",\n\t\"zscr;\": \"\\uD835\\uDCCF\",\n\t\"zwj;\": \"\\u200D\",\n\t\"zwnj;\": \"\\u200C\"\n};\n\n},\n{}],\n13:[function(_dereq_,module,exports){\nvar util = _dereq_('util/');\n\nvar pSlice = Array.prototype.slice;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nvar assert = module.exports = ok;\n\nassert.AssertionError = function AssertionError(options) {\n  this.name = 'AssertionError';\n  this.actual = options.actual;\n  this.expected = options.expected;\n  this.operator = options.operator;\n  if (options.message) {\n    this.message = options.message;\n    this.generatedMessage = false;\n  } else {\n    this.message = getMessage(this);\n    this.generatedMessage = true;\n  }\n  var stackStartFunction = options.stackStartFunction || fail;\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, stackStartFunction);\n  }\n  else {\n    var err = new Error();\n    if (err.stack) {\n      var out = err.stack;\n      var fn_name = stackStartFunction.name;\n      var idx = out.indexOf('\\n' + fn_name);\n      if (idx >= 0) {\n        var next_line = out.indexOf('\\n', idx + 1);\n        out = out.substring(next_line + 1);\n      }\n\n      this.stack = out;\n    }\n  }\n};\nutil.inherits(assert.AssertionError, Error);\n\nfunction replacer(key, value) {\n  if (util.isUndefined(value)) {\n    return '' + value;\n  }\n  if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {\n    return value.toString();\n  }\n  if (util.isFunction(value) || util.isRegExp(value)) {\n    return value.toString();\n  }\n  return value;\n}\n\nfunction truncate(s, n) {\n  if (util.isString(s)) {\n    return s.length < n ? s : s.slice(0, n);\n  } else {\n    return s;\n  }\n}\n\nfunction getMessage(self) {\n  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +\n         self.operator + ' ' +\n         truncate(JSON.stringify(self.expected, replacer), 128);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n  throw new assert.AssertionError({\n    message: message,\n    actual: actual,\n    expected: expected,\n    operator: operator,\n    stackStartFunction: stackStartFunction\n  });\n}\nassert.fail = fail;\n\nfunction ok(value, message) {\n  if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\nassert.equal = function equal(actual, expected, message) {\n  if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (actual == expected) {\n    fail(actual, expected, message, '!=', assert.notEqual);\n  }\n};\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (!_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n  }\n};\n\nfunction _deepEqual(actual, expected) {\n  if (actual === expected) {\n    return true;\n\n  } else if (util.isBuffer(actual) && util.isBuffer(expected)) {\n    if (actual.length != expected.length) return false;\n\n    for (var i = 0; i < actual.length; i++) {\n      if (actual[i] !== expected[i]) return false;\n    }\n\n    return true;\n  } else if (util.isDate(actual) && util.isDate(expected)) {\n    return actual.getTime() === expected.getTime();\n  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n    return actual.source === expected.source &&\n           actual.global === expected.global &&\n           actual.multiline === expected.multiline &&\n           actual.lastIndex === expected.lastIndex &&\n           actual.ignoreCase === expected.ignoreCase;\n  } else if (!util.isObject(actual) && !util.isObject(expected)) {\n    return actual == expected;\n  } else {\n    return objEquiv(actual, expected);\n  }\n}\n\nfunction isArguments(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))\n    return false;\n  if (a.prototype !== b.prototype) return false;\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return _deepEqual(a, b);\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b),\n        key, i;\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  if (ka.length != kb.length)\n    return false;\n  ka.sort();\n  kb.sort();\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!_deepEqual(a[key], b[key])) return false;\n  }\n  return true;\n}\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n  }\n};\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (actual !== expected) {\n    fail(actual, expected, message, '===', assert.strictEqual);\n  }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (actual === expected) {\n    fail(actual, expected, message, '!==', assert.notStrictEqual);\n  }\n};\n\nfunction expectedException(actual, expected) {\n  if (!actual || !expected) {\n    return false;\n  }\n\n  if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n    return expected.test(actual);\n  } else if (actual instanceof expected) {\n    return true;\n  } else if (expected.call({}, actual) === true) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n  var actual;\n\n  if (util.isString(expected)) {\n    message = expected;\n    expected = null;\n  }\n\n  try {\n    block();\n  } catch (e) {\n    actual = e;\n  }\n\n  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n            (message ? ' ' + message : '.');\n\n  if (shouldThrow && !actual) {\n    fail(actual, expected, 'Missing expected exception' + message);\n  }\n\n  if (!shouldThrow && expectedException(actual, expected)) {\n    fail(actual, expected, 'Got unwanted exception' + message);\n  }\n\n  if ((shouldThrow && actual && expected &&\n      !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n    throw actual;\n  }\n}\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\nassert.doesNotThrow = function(block, /*optional*/message) {\n  _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (hasOwn.call(obj, key)) keys.push(key);\n  }\n  return keys;\n};\n\n},\n{\"util/\":15}],\n14:[function(_dereq_,module,exports){\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n},\n{}],\n15:[function(_dereq_,module,exports){\n(function (process,global){\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\nexports.deprecate = function(fn, msg) {\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\nfunction inspect(obj, opts) {\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    ctx.showHidden = opts;\n  } else if (opts) {\n    exports._extend(ctx, opts);\n  }\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      value.inspect !== exports.inspect &&\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = _dereq_('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\nexports.inherits = _dereq_('inherits');\n\nexports._extend = function(origin, add) {\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,_dereq_(\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\"),typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},\n{\"./support/isBuffer\":14,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}],\n16:[function(_dereq_,module,exports){\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\nEventEmitter.defaultMaxListeners = 10;\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        throw TypeError('Uncaught, unspecified \"error\" event.');\n      }\n      return false;\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    this._events[type].push(listener);\n  else\n    this._events[type] = [this._events[type], listener];\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      console.trace();\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},\n{}],\n17:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},\n{}],\n18:[function(_dereq_,module,exports){\n\nvar process = module.exports = {};\n\nprocess.nextTick = (function () {\n    var canSetImmediate = typeof window !== 'undefined'\n    && window.setImmediate;\n    var canPost = typeof window !== 'undefined'\n    && window.postMessage && window.addEventListener\n    ;\n\n    if (canSetImmediate) {\n        return function (f) { return window.setImmediate(f) };\n    }\n\n    if (canPost) {\n        var queue = [];\n        window.addEventListener('message', function (ev) {\n            var source = ev.source;\n            if ((source === window || source === null) && ev.data === 'process-tick') {\n                ev.stopPropagation();\n                if (queue.length > 0) {\n                    var fn = queue.shift();\n                    fn();\n                }\n            }\n        }, true);\n\n        return function nextTick(fn) {\n            queue.push(fn);\n            window.postMessage('process-tick', '*');\n        };\n    }\n\n    return function nextTick(fn) {\n        setTimeout(fn, 0);\n    };\n})();\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n}\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\n\n},\n{}],\n19:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(14)\n},\n{}],\n20:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(15)\n},\n{\"./support/isBuffer\":19,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}]},{},[9])\n(9)\n\n});\n\ndefine(\"ace/mode/html_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar SAXParser = require(\"./html/saxparser\").SAXParser;\n\nvar errorTypes = {\n    \"expected-doctype-but-got-start-tag\": \"info\",\n    \"expected-doctype-but-got-chars\": \"info\",\n    \"non-html-root\": \"info\"\n};\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.context = null;\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.setOptions = function(options) {\n        this.context = options.context;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return;\n        var parser = new SAXParser();\n        var errors = [];\n        var noop = function(){};\n        parser.contentHandler = {\n           startDocument: noop,\n           endDocument: noop,\n           startElement: noop,\n           endElement: noop,\n           characters: noop\n        };\n        parser.errorHandler = {\n            error: function(message, location, code) {\n                errors.push({\n                    row: location.line,\n                    column: location.column,\n                    text: message,\n                    type: errorTypes[code] || \"error\"\n                });\n            }\n        };\n        if (this.context)\n            parser.parseFragment(value, this.context);\n        else\n            parser.parse(value);\n        this.sender.emit(\"error\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n\ndefine(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src/worker-javascript.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\ndefine(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\ndefine(\"ace/mode/javascript/jshint\",[], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/browserify/node_modules/events/events.js\":[function(_dereq_,module,exports){\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\nEventEmitter.defaultMaxListeners = 10;\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      }\n      throw TypeError('Uncaught, unspecified \"error\" event.');\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    this._events[type].push(listener);\n  else\n    this._events[type] = [this._events[type], listener];\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],\"/node_modules/jshint/data/ascii-identifier-data.js\":[function(_dereq_,module,exports){\nvar identifierStartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierStartTable[i] =\n    i === 36 ||           // $\n    i >= 65 && i <= 90 || // A-Z\n    i === 95 ||           // _\n    i >= 97 && i <= 122;  // a-z\n}\n\nvar identifierPartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierPartTable[i] =\n    identifierStartTable[i] || // $, _, A-Z, a-z\n    i >= 48 && i <= 57;        // 0-9\n}\n\nmodule.exports = {\n  asciiIdentifierStartTable: identifierStartTable,\n  asciiIdentifierPartTable: identifierPartTable\n};\n\n},{}],\"/node_modules/jshint/lodash.js\":[function(_dereq_,module,exports){\n(function (global){\n;(function() {\n\n  var undefined;\n\n  var VERSION = '3.7.0';\n\n  var FUNC_ERROR_TEXT = 'Expected a function';\n\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      objectTag = '[object Object]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      weakMapTag = '[object WeakMap]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]+|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?)\\1\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n  var reRegExpChars = /[.*+?^${}()|[\\]\\/\\\\]/g,\n      reHasRegExpChars = RegExp(reRegExpChars.source);\n\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  var reFlags = /\\w*$/;\n\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[mapTag] = cloneableTags[setTag] =\n  cloneableTags[weakMapTag] = false;\n\n  var objectTypes = {\n    'function': true,\n    'object': true\n  };\n\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\n\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\n\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\n\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\n\n  function baseFindIndex(array, predicate, fromRight) {\n    var length = array.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function baseIndexOf(array, value, fromIndex) {\n    if (value !== value) {\n      return indexOfNaN(array, fromIndex);\n    }\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function baseIsFunction(value) {\n    return typeof value == 'function' || false;\n  }\n\n  function baseToString(value) {\n    if (typeof value == 'string') {\n      return value;\n    }\n    return value == null ? '' : (value + '');\n  }\n\n  function indexOfNaN(array, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 0 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var other = array[index];\n      if (other !== other) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function isObjectLike(value) {\n    return !!value && typeof value == 'object';\n  }\n\n  var arrayProto = Array.prototype,\n      objectProto = Object.prototype;\n\n  var fnToString = Function.prototype.toString;\n\n  var hasOwnProperty = objectProto.hasOwnProperty;\n\n  var objToString = objectProto.toString;\n\n  var reIsNative = RegExp('^' +\n    escapeRegExp(objToString)\n    .replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n  );\n\n  var ArrayBuffer = isNative(ArrayBuffer = root.ArrayBuffer) && ArrayBuffer,\n      bufferSlice = isNative(bufferSlice = ArrayBuffer && new ArrayBuffer(0).slice) && bufferSlice,\n      floor = Math.floor,\n      getOwnPropertySymbols = isNative(getOwnPropertySymbols = Object.getOwnPropertySymbols) && getOwnPropertySymbols,\n      getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,\n      push = arrayProto.push,\n      preventExtensions = isNative(Object.preventExtensions = Object.preventExtensions) && preventExtensions,\n      propertyIsEnumerable = objectProto.propertyIsEnumerable,\n      Uint8Array = isNative(Uint8Array = root.Uint8Array) && Uint8Array;\n\n  var Float64Array = (function() {\n    try {\n      var func = isNative(func = root.Float64Array) && func,\n          result = new func(new ArrayBuffer(10), 0, 1) && func;\n    } catch(e) {}\n    return result;\n  }());\n\n  var nativeAssign = (function() {\n    var object = { '1': 0 },\n        func = preventExtensions && isNative(func = Object.assign) && func;\n\n    try { func(preventExtensions(object), 'xo'); } catch(e) {}\n    return !object[1] && func;\n  }());\n\n  var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,\n      nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,\n      nativeMax = Math.max,\n      nativeMin = Math.min;\n\n  var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;\n\n  var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1,\n      MAX_ARRAY_INDEX =  MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0;\n\n  var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n  function lodash() {\n  }\n\n  var support = lodash.support = {};\n\n  (function(x) {\n    var Ctor = function() { this.x = x; },\n        object = { '0': x, 'length': x },\n        props = [];\n\n    Ctor.prototype = { 'valueOf': x, 'y': x };\n    for (var key in new Ctor) { props.push(key); }\n\n    support.funcDecomp = /\\bthis\\b/.test(function() { return this; });\n\n    support.funcNames = typeof Function.name == 'string';\n\n    try {\n      support.nonEnumArgs = !propertyIsEnumerable.call(arguments, 1);\n    } catch(e) {\n      support.nonEnumArgs = true;\n    }\n  }(1, 0));\n\n  function arrayCopy(source, array) {\n    var index = -1,\n        length = source.length;\n\n    array || (array = Array(length));\n    while (++index < length) {\n      array[index] = source[index];\n    }\n    return array;\n  }\n\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[++resIndex] = value;\n      }\n    }\n    return result;\n  }\n\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  function arrayMax(array) {\n    var index = -1,\n        length = array.length,\n        result = NEGATIVE_INFINITY;\n\n    while (++index < length) {\n      var value = array[index];\n      if (value > result) {\n        result = value;\n      }\n    }\n    return result;\n  }\n\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function assignWith(object, source, customizer) {\n    var props = keys(source);\n    push.apply(props, getSymbols(source));\n\n    var index = -1,\n        length = props.length;\n\n    while (++index < length) {\n      var key = props[index],\n          value = object[key],\n          result = customizer(value, source[key], key, object, source);\n\n      if ((result === result ? (result !== value) : (value === value)) ||\n          (value === undefined && !(key in object))) {\n        object[key] = result;\n      }\n    }\n    return object;\n  }\n\n  var baseAssign = nativeAssign || function(object, source) {\n    return source == null\n      ? object\n      : baseCopy(source, getSymbols(source), baseCopy(source, keys(source), object));\n  };\n\n  function baseCopy(source, props, object) {\n    object || (object = {});\n\n    var index = -1,\n        length = props.length;\n\n    while (++index < length) {\n      var key = props[index];\n      object[key] = source[key];\n    }\n    return object;\n  }\n\n  function baseCallback(func, thisArg, argCount) {\n    var type = typeof func;\n    if (type == 'function') {\n      return thisArg === undefined\n        ? func\n        : bindCallback(func, thisArg, argCount);\n    }\n    if (func == null) {\n      return identity;\n    }\n    if (type == 'object') {\n      return baseMatches(func);\n    }\n    return thisArg === undefined\n      ? property(func)\n      : baseMatchesProperty(func, thisArg);\n  }\n\n  function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n    var result;\n    if (customizer) {\n      result = object ? customizer(value, key, object) : customizer(value);\n    }\n    if (result !== undefined) {\n      return result;\n    }\n    if (!isObject(value)) {\n      return value;\n    }\n    var isArr = isArray(value);\n    if (isArr) {\n      result = initCloneArray(value);\n      if (!isDeep) {\n        return arrayCopy(value, result);\n      }\n    } else {\n      var tag = objToString.call(value),\n          isFunc = tag == funcTag;\n\n      if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n        result = initCloneObject(isFunc ? {} : value);\n        if (!isDeep) {\n          return baseAssign(result, value);\n        }\n      } else {\n        return cloneableTags[tag]\n          ? initCloneByTag(value, tag, isDeep)\n          : (object ? value : {});\n      }\n    }\n    stackA || (stackA = []);\n    stackB || (stackB = []);\n\n    var length = stackA.length;\n    while (length--) {\n      if (stackA[length] == value) {\n        return stackB[length];\n      }\n    }\n    stackA.push(value);\n    stackB.push(result);\n\n    (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n      result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n    });\n    return result;\n  }\n\n  var baseEach = createBaseEach(baseForOwn);\n\n  function baseFilter(collection, predicate) {\n    var result = [];\n    baseEach(collection, function(value, index, collection) {\n      if (predicate(value, index, collection)) {\n        result.push(value);\n      }\n    });\n    return result;\n  }\n\n  var baseFor = createBaseFor();\n\n  function baseForIn(object, iteratee) {\n    return baseFor(object, iteratee, keysIn);\n  }\n\n  function baseForOwn(object, iteratee) {\n    return baseFor(object, iteratee, keys);\n  }\n\n  function baseGet(object, path, pathKey) {\n    if (object == null) {\n      return;\n    }\n    if (pathKey !== undefined && pathKey in toObject(object)) {\n      path = [pathKey];\n    }\n    var index = -1,\n        length = path.length;\n\n    while (object != null && ++index < length) {\n      var result = object = object[path[index]];\n    }\n    return result;\n  }\n\n  function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n    if (value === other) {\n      return value !== 0 || (1 / value == 1 / other);\n    }\n    var valType = typeof value,\n        othType = typeof other;\n\n    if ((valType != 'function' && valType != 'object' && othType != 'function' && othType != 'object') ||\n        value == null || other == null) {\n      return value !== value && other !== other;\n    }\n    return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n  }\n\n  function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var objIsArr = isArray(object),\n        othIsArr = isArray(other),\n        objTag = arrayTag,\n        othTag = arrayTag;\n\n    if (!objIsArr) {\n      objTag = objToString.call(object);\n      if (objTag == argsTag) {\n        objTag = objectTag;\n      } else if (objTag != objectTag) {\n        objIsArr = isTypedArray(object);\n      }\n    }\n    if (!othIsArr) {\n      othTag = objToString.call(other);\n      if (othTag == argsTag) {\n        othTag = objectTag;\n      } else if (othTag != objectTag) {\n        othIsArr = isTypedArray(other);\n      }\n    }\n    var objIsObj = objTag == objectTag,\n        othIsObj = othTag == objectTag,\n        isSameTag = objTag == othTag;\n\n    if (isSameTag && !(objIsArr || objIsObj)) {\n      return equalByTag(object, other, objTag);\n    }\n    if (!isLoose) {\n      var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n          othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n      if (valWrapped || othWrapped) {\n        return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n      }\n    }\n    if (!isSameTag) {\n      return false;\n    }\n    stackA || (stackA = []);\n    stackB || (stackB = []);\n\n    var length = stackA.length;\n    while (length--) {\n      if (stackA[length] == object) {\n        return stackB[length] == other;\n      }\n    }\n    stackA.push(object);\n    stackB.push(other);\n\n    var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n    stackA.pop();\n    stackB.pop();\n\n    return result;\n  }\n\n  function baseIsMatch(object, props, values, strictCompareFlags, customizer) {\n    var index = -1,\n        length = props.length,\n        noCustomizer = !customizer;\n\n    while (++index < length) {\n      if ((noCustomizer && strictCompareFlags[index])\n            ? values[index] !== object[props[index]]\n            : !(props[index] in object)\n          ) {\n        return false;\n      }\n    }\n    index = -1;\n    while (++index < length) {\n      var key = props[index],\n          objValue = object[key],\n          srcValue = values[index];\n\n      if (noCustomizer && strictCompareFlags[index]) {\n        var result = objValue !== undefined || (key in object);\n      } else {\n        result = customizer ? customizer(objValue, srcValue, key) : undefined;\n        if (result === undefined) {\n          result = baseIsEqual(srcValue, objValue, customizer, true);\n        }\n      }\n      if (!result) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function baseMatches(source) {\n    var props = keys(source),\n        length = props.length;\n\n    if (!length) {\n      return constant(true);\n    }\n    if (length == 1) {\n      var key = props[0],\n          value = source[key];\n\n      if (isStrictComparable(value)) {\n        return function(object) {\n          if (object == null) {\n            return false;\n          }\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\n        };\n      }\n    }\n    var values = Array(length),\n        strictCompareFlags = Array(length);\n\n    while (length--) {\n      value = source[props[length]];\n      values[length] = value;\n      strictCompareFlags[length] = isStrictComparable(value);\n    }\n    return function(object) {\n      return object != null && baseIsMatch(toObject(object), props, values, strictCompareFlags);\n    };\n  }\n\n  function baseMatchesProperty(path, value) {\n    var isArr = isArray(path),\n        isCommon = isKey(path) && isStrictComparable(value),\n        pathKey = (path + '');\n\n    path = toPath(path);\n    return function(object) {\n      if (object == null) {\n        return false;\n      }\n      var key = pathKey;\n      object = toObject(object);\n      if ((isArr || !isCommon) && !(key in object)) {\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        if (object == null) {\n          return false;\n        }\n        key = last(path);\n        object = toObject(object);\n      }\n      return object[key] === value\n        ? (value !== undefined || (key in object))\n        : baseIsEqual(value, object[key], null, true);\n    };\n  }\n\n  function baseMerge(object, source, customizer, stackA, stackB) {\n    if (!isObject(object)) {\n      return object;\n    }\n    var isSrcArr = isLength(source.length) && (isArray(source) || isTypedArray(source));\n    if (!isSrcArr) {\n      var props = keys(source);\n      push.apply(props, getSymbols(source));\n    }\n    arrayEach(props || source, function(srcValue, key) {\n      if (props) {\n        key = srcValue;\n        srcValue = source[key];\n      }\n      if (isObjectLike(srcValue)) {\n        stackA || (stackA = []);\n        stackB || (stackB = []);\n        baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n      }\n      else {\n        var value = object[key],\n            result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n            isCommon = result === undefined;\n\n        if (isCommon) {\n          result = srcValue;\n        }\n        if ((isSrcArr || result !== undefined) &&\n            (isCommon || (result === result ? (result !== value) : (value === value)))) {\n          object[key] = result;\n        }\n      }\n    });\n    return object;\n  }\n\n  function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n    var length = stackA.length,\n        srcValue = source[key];\n\n    while (length--) {\n      if (stackA[length] == srcValue) {\n        object[key] = stackB[length];\n        return;\n      }\n    }\n    var value = object[key],\n        result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n        isCommon = result === undefined;\n\n    if (isCommon) {\n      result = srcValue;\n      if (isLength(srcValue.length) && (isArray(srcValue) || isTypedArray(srcValue))) {\n        result = isArray(value)\n          ? value\n          : (getLength(value) ? arrayCopy(value) : []);\n      }\n      else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n        result = isArguments(value)\n          ? toPlainObject(value)\n          : (isPlainObject(value) ? value : {});\n      }\n      else {\n        isCommon = false;\n      }\n    }\n    stackA.push(srcValue);\n    stackB.push(result);\n\n    if (isCommon) {\n      object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n    } else if (result === result ? (result !== value) : (value === value)) {\n      object[key] = result;\n    }\n  }\n\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  function basePropertyDeep(path) {\n    var pathKey = (path + '');\n    path = toPath(path);\n    return function(object) {\n      return baseGet(object, path, pathKey);\n    };\n  }\n\n  function baseSlice(array, start, end) {\n    var index = -1,\n        length = array.length;\n\n    start = start == null ? 0 : (+start || 0);\n    if (start < 0) {\n      start = -start > length ? 0 : (length + start);\n    }\n    end = (end === undefined || end > length) ? length : (+end || 0);\n    if (end < 0) {\n      end += length;\n    }\n    length = start > end ? 0 : ((end - start) >>> 0);\n    start >>>= 0;\n\n    var result = Array(length);\n    while (++index < length) {\n      result[index] = array[index + start];\n    }\n    return result;\n  }\n\n  function baseSome(collection, predicate) {\n    var result;\n\n    baseEach(collection, function(value, index, collection) {\n      result = predicate(value, index, collection);\n      return !result;\n    });\n    return !!result;\n  }\n\n  function baseValues(object, props) {\n    var index = -1,\n        length = props.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = object[props[index]];\n    }\n    return result;\n  }\n\n  function binaryIndex(array, value, retHighest) {\n    var low = 0,\n        high = array ? array.length : low;\n\n    if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n      while (low < high) {\n        var mid = (low + high) >>> 1,\n            computed = array[mid];\n\n        if (retHighest ? (computed <= value) : (computed < value)) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return high;\n    }\n    return binaryIndexBy(array, value, identity, retHighest);\n  }\n\n  function binaryIndexBy(array, value, iteratee, retHighest) {\n    value = iteratee(value);\n\n    var low = 0,\n        high = array ? array.length : 0,\n        valIsNaN = value !== value,\n        valIsUndef = value === undefined;\n\n    while (low < high) {\n      var mid = floor((low + high) / 2),\n          computed = iteratee(array[mid]),\n          isReflexive = computed === computed;\n\n      if (valIsNaN) {\n        var setLow = isReflexive || retHighest;\n      } else if (valIsUndef) {\n        setLow = isReflexive && (retHighest || computed !== undefined);\n      } else {\n        setLow = retHighest ? (computed <= value) : (computed < value);\n      }\n      if (setLow) {\n        low = mid + 1;\n      } else {\n        high = mid;\n      }\n    }\n    return nativeMin(high, MAX_ARRAY_INDEX);\n  }\n\n  function bindCallback(func, thisArg, argCount) {\n    if (typeof func != 'function') {\n      return identity;\n    }\n    if (thisArg === undefined) {\n      return func;\n    }\n    switch (argCount) {\n      case 1: return function(value) {\n        return func.call(thisArg, value);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(thisArg, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(thisArg, accumulator, value, index, collection);\n      };\n      case 5: return function(value, other, key, object, source) {\n        return func.call(thisArg, value, other, key, object, source);\n      };\n    }\n    return function() {\n      return func.apply(thisArg, arguments);\n    };\n  }\n\n  function bufferClone(buffer) {\n    return bufferSlice.call(buffer, 0);\n  }\n  if (!bufferSlice) {\n    bufferClone = !(ArrayBuffer && Uint8Array) ? constant(null) : function(buffer) {\n      var byteLength = buffer.byteLength,\n          floatLength = Float64Array ? floor(byteLength / FLOAT64_BYTES_PER_ELEMENT) : 0,\n          offset = floatLength * FLOAT64_BYTES_PER_ELEMENT,\n          result = new ArrayBuffer(byteLength);\n\n      if (floatLength) {\n        var view = new Float64Array(result, 0, floatLength);\n        view.set(new Float64Array(buffer, 0, floatLength));\n      }\n      if (byteLength != offset) {\n        view = new Uint8Array(result, offset);\n        view.set(new Uint8Array(buffer, offset));\n      }\n      return result;\n    };\n  }\n\n  function createAssigner(assigner) {\n    return restParam(function(object, sources) {\n      var index = -1,\n          length = object == null ? 0 : sources.length,\n          customizer = length > 2 && sources[length - 2],\n          guard = length > 2 && sources[2],\n          thisArg = length > 1 && sources[length - 1];\n\n      if (typeof customizer == 'function') {\n        customizer = bindCallback(customizer, thisArg, 5);\n        length -= 2;\n      } else {\n        customizer = typeof thisArg == 'function' ? thisArg : null;\n        length -= (customizer ? 1 : 0);\n      }\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        customizer = length < 3 ? null : customizer;\n        length = 1;\n      }\n      while (++index < length) {\n        var source = sources[index];\n        if (source) {\n          assigner(object, source, customizer);\n        }\n      }\n      return object;\n    });\n  }\n\n  function createBaseEach(eachFunc, fromRight) {\n    return function(collection, iteratee) {\n      var length = collection ? getLength(collection) : 0;\n      if (!isLength(length)) {\n        return eachFunc(collection, iteratee);\n      }\n      var index = fromRight ? length : -1,\n          iterable = toObject(collection);\n\n      while ((fromRight ? index-- : ++index < length)) {\n        if (iteratee(iterable[index], index, iterable) === false) {\n          break;\n        }\n      }\n      return collection;\n    };\n  }\n\n  function createBaseFor(fromRight) {\n    return function(object, iteratee, keysFunc) {\n      var iterable = toObject(object),\n          props = keysFunc(object),\n          length = props.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length)) {\n        var key = props[index];\n        if (iteratee(iterable[key], key, iterable) === false) {\n          break;\n        }\n      }\n      return object;\n    };\n  }\n\n  function createFindIndex(fromRight) {\n    return function(array, predicate, thisArg) {\n      if (!(array && array.length)) {\n        return -1;\n      }\n      predicate = getCallback(predicate, thisArg, 3);\n      return baseFindIndex(array, predicate, fromRight);\n    };\n  }\n\n  function createForEach(arrayFunc, eachFunc) {\n    return function(collection, iteratee, thisArg) {\n      return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n        ? arrayFunc(collection, iteratee)\n        : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n    };\n  }\n\n  function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var index = -1,\n        arrLength = array.length,\n        othLength = other.length,\n        result = true;\n\n    if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n      return false;\n    }\n    while (result && ++index < arrLength) {\n      var arrValue = array[index],\n          othValue = other[index];\n\n      result = undefined;\n      if (customizer) {\n        result = isLoose\n          ? customizer(othValue, arrValue, index)\n          : customizer(arrValue, othValue, index);\n      }\n      if (result === undefined) {\n        if (isLoose) {\n          var othIndex = othLength;\n          while (othIndex--) {\n            othValue = other[othIndex];\n            result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n            if (result) {\n              break;\n            }\n          }\n        } else {\n          result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n        }\n      }\n    }\n    return !!result;\n  }\n\n  function equalByTag(object, other, tag) {\n    switch (tag) {\n      case boolTag:\n      case dateTag:\n        return +object == +other;\n\n      case errorTag:\n        return object.name == other.name && object.message == other.message;\n\n      case numberTag:\n        return (object != +object)\n          ? other != +other\n          : (object == 0 ? ((1 / object) == (1 / other)) : object == +other);\n\n      case regexpTag:\n      case stringTag:\n        return object == (other + '');\n    }\n    return false;\n  }\n\n  function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var objProps = keys(object),\n        objLength = objProps.length,\n        othProps = keys(other),\n        othLength = othProps.length;\n\n    if (objLength != othLength && !isLoose) {\n      return false;\n    }\n    var skipCtor = isLoose,\n        index = -1;\n\n    while (++index < objLength) {\n      var key = objProps[index],\n          result = isLoose ? key in other : hasOwnProperty.call(other, key);\n\n      if (result) {\n        var objValue = object[key],\n            othValue = other[key];\n\n        result = undefined;\n        if (customizer) {\n          result = isLoose\n            ? customizer(othValue, objValue, key)\n            : customizer(objValue, othValue, key);\n        }\n        if (result === undefined) {\n          result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB);\n        }\n      }\n      if (!result) {\n        return false;\n      }\n      skipCtor || (skipCtor = key == 'constructor');\n    }\n    if (!skipCtor) {\n      var objCtor = object.constructor,\n          othCtor = other.constructor;\n\n      if (objCtor != othCtor &&\n          ('constructor' in object && 'constructor' in other) &&\n          !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n            typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function getCallback(func, thisArg, argCount) {\n    var result = lodash.callback || callback;\n    result = result === callback ? baseCallback : result;\n    return argCount ? result(func, thisArg, argCount) : result;\n  }\n\n  function getIndexOf(collection, target, fromIndex) {\n    var result = lodash.indexOf || indexOf;\n    result = result === indexOf ? baseIndexOf : result;\n    return collection ? result(collection, target, fromIndex) : result;\n  }\n\n  var getLength = baseProperty('length');\n\n  var getSymbols = !getOwnPropertySymbols ? constant([]) : function(object) {\n    return getOwnPropertySymbols(toObject(object));\n  };\n\n  function initCloneArray(array) {\n    var length = array.length,\n        result = new array.constructor(length);\n\n    if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n      result.index = array.index;\n      result.input = array.input;\n    }\n    return result;\n  }\n\n  function initCloneObject(object) {\n    var Ctor = object.constructor;\n    if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n      Ctor = Object;\n    }\n    return new Ctor;\n  }\n\n  function initCloneByTag(object, tag, isDeep) {\n    var Ctor = object.constructor;\n    switch (tag) {\n      case arrayBufferTag:\n        return bufferClone(object);\n\n      case boolTag:\n      case dateTag:\n        return new Ctor(+object);\n\n      case float32Tag: case float64Tag:\n      case int8Tag: case int16Tag: case int32Tag:\n      case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n        var buffer = object.buffer;\n        return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n      case numberTag:\n      case stringTag:\n        return new Ctor(object);\n\n      case regexpTag:\n        var result = new Ctor(object.source, reFlags.exec(object));\n        result.lastIndex = object.lastIndex;\n    }\n    return result;\n  }\n\n  function isIndex(value, length) {\n    value = +value;\n    length = length == null ? MAX_SAFE_INTEGER : length;\n    return value > -1 && value % 1 == 0 && value < length;\n  }\n\n  function isIterateeCall(value, index, object) {\n    if (!isObject(object)) {\n      return false;\n    }\n    var type = typeof index;\n    if (type == 'number') {\n      var length = getLength(object),\n          prereq = isLength(length) && isIndex(index, length);\n    } else {\n      prereq = type == 'string' && index in object;\n    }\n    if (prereq) {\n      var other = object[index];\n      return value === value ? (value === other) : (other !== other);\n    }\n    return false;\n  }\n\n  function isKey(value, object) {\n    var type = typeof value;\n    if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n      return true;\n    }\n    if (isArray(value)) {\n      return false;\n    }\n    var result = !reIsDeepProp.test(value);\n    return result || (object != null && value in toObject(object));\n  }\n\n  function isLength(value) {\n    return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n  }\n\n  function isStrictComparable(value) {\n    return value === value && (value === 0 ? ((1 / value) > 0) : !isObject(value));\n  }\n\n  function shimIsPlainObject(value) {\n    var Ctor,\n        support = lodash.support;\n\n    if (!(isObjectLike(value) && objToString.call(value) == objectTag) ||\n        (!hasOwnProperty.call(value, 'constructor') &&\n          (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n      return false;\n    }\n    var result;\n    baseForIn(value, function(subValue, key) {\n      result = key;\n    });\n    return result === undefined || hasOwnProperty.call(value, result);\n  }\n\n  function shimKeys(object) {\n    var props = keysIn(object),\n        propsLength = props.length,\n        length = propsLength && object.length,\n        support = lodash.support;\n\n    var allowIndexes = length && isLength(length) &&\n      (isArray(object) || (support.nonEnumArgs && isArguments(object)));\n\n    var index = -1,\n        result = [];\n\n    while (++index < propsLength) {\n      var key = props[index];\n      if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n        result.push(key);\n      }\n    }\n    return result;\n  }\n\n  function toObject(value) {\n    return isObject(value) ? value : Object(value);\n  }\n\n  function toPath(value) {\n    if (isArray(value)) {\n      return value;\n    }\n    var result = [];\n    baseToString(value).replace(rePropName, function(match, number, quote, string) {\n      result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n    });\n    return result;\n  }\n\n  var findLastIndex = createFindIndex(true);\n\n  function indexOf(array, value, fromIndex) {\n    var length = array ? array.length : 0;\n    if (!length) {\n      return -1;\n    }\n    if (typeof fromIndex == 'number') {\n      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\n    } else if (fromIndex) {\n      var index = binaryIndex(array, value),\n          other = array[index];\n\n      if (value === value ? (value === other) : (other !== other)) {\n        return index;\n      }\n      return -1;\n    }\n    return baseIndexOf(array, value, fromIndex || 0);\n  }\n\n  function last(array) {\n    var length = array ? array.length : 0;\n    return length ? array[length - 1] : undefined;\n  }\n\n  function slice(array, start, end) {\n    var length = array ? array.length : 0;\n    if (!length) {\n      return [];\n    }\n    if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n      start = 0;\n      end = length;\n    }\n    return baseSlice(array, start, end);\n  }\n\n  function unzip(array) {\n    var index = -1,\n        length = (array && array.length && arrayMax(arrayMap(array, getLength))) >>> 0,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = arrayMap(array, baseProperty(index));\n    }\n    return result;\n  }\n\n  var zip = restParam(unzip);\n\n  var forEach = createForEach(arrayEach, baseEach);\n\n  function includes(collection, target, fromIndex, guard) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      collection = values(collection);\n      length = collection.length;\n    }\n    if (!length) {\n      return false;\n    }\n    if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\n      fromIndex = 0;\n    } else {\n      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n    }\n    return (typeof collection == 'string' || !isArray(collection) && isString(collection))\n      ? (fromIndex < length && collection.indexOf(target, fromIndex) > -1)\n      : (getIndexOf(collection, target, fromIndex) > -1);\n  }\n\n  function reject(collection, predicate, thisArg) {\n    var func = isArray(collection) ? arrayFilter : baseFilter;\n    predicate = getCallback(predicate, thisArg, 3);\n    return func(collection, function(value, index, collection) {\n      return !predicate(value, index, collection);\n    });\n  }\n\n  function some(collection, predicate, thisArg) {\n    var func = isArray(collection) ? arraySome : baseSome;\n    if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n      predicate = null;\n    }\n    if (typeof predicate != 'function' || thisArg !== undefined) {\n      predicate = getCallback(predicate, thisArg, 3);\n    }\n    return func(collection, predicate);\n  }\n\n  function restParam(func, start) {\n    if (typeof func != 'function') {\n      throw new TypeError(FUNC_ERROR_TEXT);\n    }\n    start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n    return function() {\n      var args = arguments,\n          index = -1,\n          length = nativeMax(args.length - start, 0),\n          rest = Array(length);\n\n      while (++index < length) {\n        rest[index] = args[start + index];\n      }\n      switch (start) {\n        case 0: return func.call(this, rest);\n        case 1: return func.call(this, args[0], rest);\n        case 2: return func.call(this, args[0], args[1], rest);\n      }\n      var otherArgs = Array(start + 1);\n      index = -1;\n      while (++index < start) {\n        otherArgs[index] = args[index];\n      }\n      otherArgs[start] = rest;\n      return func.apply(this, otherArgs);\n    };\n  }\n\n  function clone(value, isDeep, customizer, thisArg) {\n    if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\n      isDeep = false;\n    }\n    else if (typeof isDeep == 'function') {\n      thisArg = customizer;\n      customizer = isDeep;\n      isDeep = false;\n    }\n    customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 1);\n    return baseClone(value, isDeep, customizer);\n  }\n\n  function isArguments(value) {\n    var length = isObjectLike(value) ? value.length : undefined;\n    return isLength(length) && objToString.call(value) == argsTag;\n  }\n\n  var isArray = nativeIsArray || function(value) {\n    return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n  };\n\n  function isEmpty(value) {\n    if (value == null) {\n      return true;\n    }\n    var length = getLength(value);\n    if (isLength(length) && (isArray(value) || isString(value) || isArguments(value) ||\n        (isObjectLike(value) && isFunction(value.splice)))) {\n      return !length;\n    }\n    return !keys(value).length;\n  }\n\n  var isFunction = !(baseIsFunction(/x/) || (Uint8Array && !baseIsFunction(Uint8Array))) ? baseIsFunction : function(value) {\n    return objToString.call(value) == funcTag;\n  };\n\n  function isObject(value) {\n    var type = typeof value;\n    return type == 'function' || (!!value && type == 'object');\n  }\n\n  function isNative(value) {\n    if (value == null) {\n      return false;\n    }\n    if (objToString.call(value) == funcTag) {\n      return reIsNative.test(fnToString.call(value));\n    }\n    return isObjectLike(value) && reIsHostCtor.test(value);\n  }\n\n  function isNumber(value) {\n    return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\n  }\n\n  var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {\n    if (!(value && objToString.call(value) == objectTag)) {\n      return false;\n    }\n    var valueOf = value.valueOf,\n        objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);\n\n    return objProto\n      ? (value == objProto || getPrototypeOf(value) == objProto)\n      : shimIsPlainObject(value);\n  };\n\n  function isString(value) {\n    return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n  }\n\n  function isTypedArray(value) {\n    return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n  }\n\n  function toPlainObject(value) {\n    return baseCopy(value, keysIn(value));\n  }\n\n  var assign = createAssigner(function(object, source, customizer) {\n    return customizer\n      ? assignWith(object, source, customizer)\n      : baseAssign(object, source);\n  });\n\n  function has(object, path) {\n    if (object == null) {\n      return false;\n    }\n    var result = hasOwnProperty.call(object, path);\n    if (!result && !isKey(path)) {\n      path = toPath(path);\n      object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n      path = last(path);\n      result = object != null && hasOwnProperty.call(object, path);\n    }\n    return result;\n  }\n\n  var keys = !nativeKeys ? shimKeys : function(object) {\n    if (object) {\n      var Ctor = object.constructor,\n          length = object.length;\n    }\n    if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n        (typeof object != 'function' && isLength(length))) {\n      return shimKeys(object);\n    }\n    return isObject(object) ? nativeKeys(object) : [];\n  };\n\n  function keysIn(object) {\n    if (object == null) {\n      return [];\n    }\n    if (!isObject(object)) {\n      object = Object(object);\n    }\n    var length = object.length;\n    length = (length && isLength(length) &&\n      (isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0;\n\n    var Ctor = object.constructor,\n        index = -1,\n        isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n        result = Array(length),\n        skipIndexes = length > 0;\n\n    while (++index < length) {\n      result[index] = (index + '');\n    }\n    for (var key in object) {\n      if (!(skipIndexes && isIndex(key, length)) &&\n          !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n        result.push(key);\n      }\n    }\n    return result;\n  }\n\n  var merge = createAssigner(baseMerge);\n\n  function values(object) {\n    return baseValues(object, keys(object));\n  }\n\n  function escapeRegExp(string) {\n    string = baseToString(string);\n    return (string && reHasRegExpChars.test(string))\n      ? string.replace(reRegExpChars, '\\\\$&')\n      : string;\n  }\n\n  function callback(func, thisArg, guard) {\n    if (guard && isIterateeCall(func, thisArg, guard)) {\n      thisArg = null;\n    }\n    return baseCallback(func, thisArg);\n  }\n\n  function constant(value) {\n    return function() {\n      return value;\n    };\n  }\n\n  function identity(value) {\n    return value;\n  }\n\n  function property(path) {\n    return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n  }\n  lodash.assign = assign;\n  lodash.callback = callback;\n  lodash.constant = constant;\n  lodash.forEach = forEach;\n  lodash.keys = keys;\n  lodash.keysIn = keysIn;\n  lodash.merge = merge;\n  lodash.property = property;\n  lodash.reject = reject;\n  lodash.restParam = restParam;\n  lodash.slice = slice;\n  lodash.toPlainObject = toPlainObject;\n  lodash.unzip = unzip;\n  lodash.values = values;\n  lodash.zip = zip;\n\n  lodash.each = forEach;\n  lodash.extend = assign;\n  lodash.iteratee = callback;\n  lodash.clone = clone;\n  lodash.escapeRegExp = escapeRegExp;\n  lodash.findLastIndex = findLastIndex;\n  lodash.has = has;\n  lodash.identity = identity;\n  lodash.includes = includes;\n  lodash.indexOf = indexOf;\n  lodash.isArguments = isArguments;\n  lodash.isArray = isArray;\n  lodash.isEmpty = isEmpty;\n  lodash.isFunction = isFunction;\n  lodash.isNative = isNative;\n  lodash.isNumber = isNumber;\n  lodash.isObject = isObject;\n  lodash.isPlainObject = isPlainObject;\n  lodash.isString = isString;\n  lodash.isTypedArray = isTypedArray;\n  lodash.last = last;\n  lodash.some = some;\n\n  lodash.any = some;\n  lodash.contains = includes;\n  lodash.include = includes;\n\n  lodash.VERSION = VERSION;\n  if (freeExports && freeModule) {\n    if (moduleExports) {\n      (freeModule.exports = lodash)._ = lodash;\n    }\n    else {\n      freeExports._ = lodash;\n    }\n  }\n  else {\n    root._ = lodash;\n  }\n}.call(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],\"/node_modules/jshint/src/jshint.js\":[function(_dereq_,module,exports){\n\nvar _            = _dereq_(\"../lodash\");\nvar events       = _dereq_(\"events\");\nvar vars         = _dereq_(\"./vars.js\");\nvar messages     = _dereq_(\"./messages.js\");\nvar Lexer        = _dereq_(\"./lex.js\").Lexer;\nvar reg          = _dereq_(\"./reg.js\");\nvar state        = _dereq_(\"./state.js\").state;\nvar style        = _dereq_(\"./style.js\");\nvar options      = _dereq_(\"./options.js\");\nvar scopeManager = _dereq_(\"./scope-manager.js\");\n\nvar JSHINT = (function() {\n  \"use strict\";\n\n  var api, // Extension API\n    bang = {\n      \"<\"  : true,\n      \"<=\" : true,\n      \"==\" : true,\n      \"===\": true,\n      \"!==\": true,\n      \"!=\" : true,\n      \">\"  : true,\n      \">=\" : true,\n      \"+\"  : true,\n      \"-\"  : true,\n      \"*\"  : true,\n      \"/\"  : true,\n      \"%\"  : true\n    },\n\n    declared, // Globals that were declared using /*global ... */ syntax.\n\n    functionicity = [\n      \"closure\", \"exception\", \"global\", \"label\",\n      \"outer\", \"unused\", \"var\"\n    ],\n\n    functions, // All of the functions\n\n    inblock,\n    indent,\n    lookahead,\n    lex,\n    member,\n    membersOnly,\n    predefined,    // Global variables defined by option\n\n    stack,\n    urls,\n\n    extraModules = [],\n    emitter = new events.EventEmitter();\n\n  function checkOption(name, t) {\n    name = name.trim();\n\n    if (/^[+-]W\\d{3}$/g.test(name)) {\n      return true;\n    }\n\n    if (options.validNames.indexOf(name) === -1) {\n      if (t.type !== \"jslint\" && !_.has(options.removed, name)) {\n        error(\"E001\", t, name);\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function isString(obj) {\n    return Object.prototype.toString.call(obj) === \"[object String]\";\n  }\n\n  function isIdentifier(tkn, value) {\n    if (!tkn)\n      return false;\n\n    if (!tkn.identifier || tkn.value !== value)\n      return false;\n\n    return true;\n  }\n\n  function isReserved(token) {\n    if (!token.reserved) {\n      return false;\n    }\n    var meta = token.meta;\n\n    if (meta && meta.isFutureReservedWord && state.inES5()) {\n      if (!meta.es5) {\n        return false;\n      }\n      if (meta.strictOnly) {\n        if (!state.option.strict && !state.isStrict()) {\n          return false;\n        }\n      }\n\n      if (token.isProperty) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function supplant(str, data) {\n    return str.replace(/\\{([^{}]*)\\}/g, function(a, b) {\n      var r = data[b];\n      return typeof r === \"string\" || typeof r === \"number\" ? r : a;\n    });\n  }\n\n  function combine(dest, src) {\n    Object.keys(src).forEach(function(name) {\n      if (_.has(JSHINT.blacklist, name)) return;\n      dest[name] = src[name];\n    });\n  }\n\n  function processenforceall() {\n    if (state.option.enforceall) {\n      for (var enforceopt in options.bool.enforcing) {\n        if (state.option[enforceopt] === undefined &&\n            !options.noenforceall[enforceopt]) {\n          state.option[enforceopt] = true;\n        }\n      }\n      for (var relaxopt in options.bool.relaxing) {\n        if (state.option[relaxopt] === undefined) {\n          state.option[relaxopt] = false;\n        }\n      }\n    }\n  }\n\n  function assume() {\n    processenforceall();\n    if (!state.option.esversion && !state.option.moz) {\n      if (state.option.es3) {\n        state.option.esversion = 3;\n      } else if (state.option.esnext) {\n        state.option.esversion = 6;\n      } else {\n        state.option.esversion = 5;\n      }\n    }\n\n    if (state.inES5()) {\n      combine(predefined, vars.ecmaIdentifiers[5]);\n    }\n\n    if (state.inES6()) {\n      combine(predefined, vars.ecmaIdentifiers[6]);\n    }\n\n    if (state.option.module) {\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n      if (!state.inES6()) {\n        warning(\"W134\", state.tokens.next, \"module\", 6);\n      }\n    }\n\n    if (state.option.couch) {\n      combine(predefined, vars.couch);\n    }\n\n    if (state.option.qunit) {\n      combine(predefined, vars.qunit);\n    }\n\n    if (state.option.rhino) {\n      combine(predefined, vars.rhino);\n    }\n\n    if (state.option.shelljs) {\n      combine(predefined, vars.shelljs);\n      combine(predefined, vars.node);\n    }\n    if (state.option.typed) {\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.phantom) {\n      combine(predefined, vars.phantom);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.prototypejs) {\n      combine(predefined, vars.prototypejs);\n    }\n\n    if (state.option.node) {\n      combine(predefined, vars.node);\n      combine(predefined, vars.typed);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.devel) {\n      combine(predefined, vars.devel);\n    }\n\n    if (state.option.dojo) {\n      combine(predefined, vars.dojo);\n    }\n\n    if (state.option.browser) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.browserify) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n      combine(predefined, vars.browserify);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.nonstandard) {\n      combine(predefined, vars.nonstandard);\n    }\n\n    if (state.option.jasmine) {\n      combine(predefined, vars.jasmine);\n    }\n\n    if (state.option.jquery) {\n      combine(predefined, vars.jquery);\n    }\n\n    if (state.option.mootools) {\n      combine(predefined, vars.mootools);\n    }\n\n    if (state.option.worker) {\n      combine(predefined, vars.worker);\n    }\n\n    if (state.option.wsh) {\n      combine(predefined, vars.wsh);\n    }\n\n    if (state.option.globalstrict && state.option.strict !== false) {\n      state.option.strict = \"global\";\n    }\n\n    if (state.option.yui) {\n      combine(predefined, vars.yui);\n    }\n\n    if (state.option.mocha) {\n      combine(predefined, vars.mocha);\n    }\n  }\n  function quit(code, line, chr) {\n    var percentage = Math.floor((line / state.lines.length) * 100);\n    var message = messages.errors[code].desc;\n\n    throw {\n      name: \"JSHintError\",\n      line: line,\n      character: chr,\n      message: message + \" (\" + percentage + \"% scanned).\",\n      raw: message,\n      code: code\n    };\n  }\n\n  function removeIgnoredMessages() {\n    var ignored = state.ignoredLines;\n\n    if (_.isEmpty(ignored)) return;\n    JSHINT.errors = _.reject(JSHINT.errors, function(err) { return ignored[err.line] });\n  }\n\n  function warning(code, t, a, b, c, d) {\n    var ch, l, w, msg;\n\n    if (/^W\\d{3}$/.test(code)) {\n      if (state.ignored[code])\n        return;\n\n      msg = messages.warnings[code];\n    } else if (/E\\d{3}/.test(code)) {\n      msg = messages.errors[code];\n    } else if (/I\\d{3}/.test(code)) {\n      msg = messages.info[code];\n    }\n\n    t = t || state.tokens.next || {};\n    if (t.id === \"(end)\") {  // `~\n      t = state.tokens.curr;\n    }\n\n    l = t.line || 0;\n    ch = t.from || 0;\n\n    w = {\n      id: \"(error)\",\n      raw: msg.desc,\n      code: msg.code,\n      evidence: state.lines[l - 1] || \"\",\n      line: l,\n      character: ch,\n      scope: JSHINT.scope,\n      a: a,\n      b: b,\n      c: c,\n      d: d\n    };\n\n    w.reason = supplant(msg.desc, w);\n    JSHINT.errors.push(w);\n\n    removeIgnoredMessages();\n\n    if (JSHINT.errors.length >= state.option.maxerr)\n      quit(\"E043\", l, ch);\n\n    return w;\n  }\n\n  function warningAt(m, l, ch, a, b, c, d) {\n    return warning(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n\n  function error(m, t, a, b, c, d) {\n    warning(m, t, a, b, c, d);\n  }\n\n  function errorAt(m, l, ch, a, b, c, d) {\n    return error(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n  function addInternalSrc(elem, src) {\n    var i;\n    i = {\n      id: \"(internal)\",\n      elem: elem,\n      value: src\n    };\n    JSHINT.internals.push(i);\n    return i;\n  }\n\n  function doOption() {\n    var nt = state.tokens.next;\n    var body = nt.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g) || [];\n\n    var predef = {};\n    if (nt.type === \"globals\") {\n      body.forEach(function(g, idx) {\n        g = g.split(\":\");\n        var key = (g[0] || \"\").trim();\n        var val = (g[1] || \"\").trim();\n\n        if (key === \"-\" || !key.length) {\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", nt);\n          return;\n        }\n\n        if (key.charAt(0) === \"-\") {\n          key = key.slice(1);\n          val = false;\n\n          JSHINT.blacklist[key] = key;\n          delete predefined[key];\n        } else {\n          predef[key] = (val === \"true\");\n        }\n      });\n\n      combine(predefined, predef);\n\n      for (var key in predef) {\n        if (_.has(predef, key)) {\n          declared[key] = nt;\n        }\n      }\n    }\n\n    if (nt.type === \"exported\") {\n      body.forEach(function(e, idx) {\n        if (!e.length) {\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", nt);\n          return;\n        }\n\n        state.funct[\"(scope)\"].addExported(e);\n      });\n    }\n\n    if (nt.type === \"members\") {\n      membersOnly = membersOnly || {};\n\n      body.forEach(function(m) {\n        var ch1 = m.charAt(0);\n        var ch2 = m.charAt(m.length - 1);\n\n        if (ch1 === ch2 && (ch1 === \"\\\"\" || ch1 === \"'\")) {\n          m = m\n            .substr(1, m.length - 2)\n            .replace(\"\\\\\\\"\", \"\\\"\");\n        }\n\n        membersOnly[m] = false;\n      });\n    }\n\n    var numvals = [\n      \"maxstatements\",\n      \"maxparams\",\n      \"maxdepth\",\n      \"maxcomplexity\",\n      \"maxerr\",\n      \"maxlen\",\n      \"indent\"\n    ];\n\n    if (nt.type === \"jshint\" || nt.type === \"jslint\") {\n      body.forEach(function(g) {\n        g = g.split(\":\");\n        var key = (g[0] || \"\").trim();\n        var val = (g[1] || \"\").trim();\n\n        if (!checkOption(key, nt)) {\n          return;\n        }\n\n        if (numvals.indexOf(key) >= 0) {\n          if (val !== \"false\") {\n            val = +val;\n\n            if (typeof val !== \"number\" || !isFinite(val) || val <= 0 || Math.floor(val) !== val) {\n              error(\"E032\", nt, g[1].trim());\n              return;\n            }\n\n            state.option[key] = val;\n          } else {\n            state.option[key] = key === \"indent\" ? 4 : false;\n          }\n\n          return;\n        }\n\n        if (key === \"validthis\") {\n\n          if (state.funct[\"(global)\"])\n            return void error(\"E009\");\n\n          if (val !== \"true\" && val !== \"false\")\n            return void error(\"E002\", nt);\n\n          state.option.validthis = (val === \"true\");\n          return;\n        }\n\n        if (key === \"quotmark\") {\n          switch (val) {\n          case \"true\":\n          case \"false\":\n            state.option.quotmark = (val === \"true\");\n            break;\n          case \"double\":\n          case \"single\":\n            state.option.quotmark = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"shadow\") {\n          switch (val) {\n          case \"true\":\n            state.option.shadow = true;\n            break;\n          case \"outer\":\n            state.option.shadow = \"outer\";\n            break;\n          case \"false\":\n          case \"inner\":\n            state.option.shadow = \"inner\";\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"unused\") {\n          switch (val) {\n          case \"true\":\n            state.option.unused = true;\n            break;\n          case \"false\":\n            state.option.unused = false;\n            break;\n          case \"vars\":\n          case \"strict\":\n            state.option.unused = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"latedef\") {\n          switch (val) {\n          case \"true\":\n            state.option.latedef = true;\n            break;\n          case \"false\":\n            state.option.latedef = false;\n            break;\n          case \"nofunc\":\n            state.option.latedef = \"nofunc\";\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"ignore\") {\n          switch (val) {\n          case \"line\":\n            state.ignoredLines[nt.line] = true;\n            removeIgnoredMessages();\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"strict\") {\n          switch (val) {\n          case \"true\":\n            state.option.strict = true;\n            break;\n          case \"false\":\n            state.option.strict = false;\n            break;\n          case \"func\":\n          case \"global\":\n          case \"implied\":\n            state.option.strict = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"module\") {\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", state.tokens.next, \"module\");\n          }\n        }\n        var esversions = {\n          es3   : 3,\n          es5   : 5,\n          esnext: 6\n        };\n        if (_.has(esversions, key)) {\n          switch (val) {\n          case \"true\":\n            state.option.moz = false;\n            state.option.esversion = esversions[key];\n            break;\n          case \"false\":\n            if (!state.option.moz) {\n              state.option.esversion = 5;\n            }\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"esversion\") {\n          switch (val) {\n          case \"5\":\n            if (state.inES5(true)) {\n              warning(\"I003\");\n            }\n          case \"3\":\n          case \"6\":\n            state.option.moz = false;\n            state.option.esversion = +val;\n            break;\n          case \"2015\":\n            state.option.moz = false;\n            state.option.esversion = 6;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", state.tokens.next, \"esversion\");\n          }\n          return;\n        }\n\n        var match = /^([+-])(W\\d{3})$/g.exec(key);\n        if (match) {\n          state.ignored[match[2]] = (match[1] === \"-\");\n          return;\n        }\n\n        var tn;\n        if (val === \"true\" || val === \"false\") {\n          if (nt.type === \"jslint\") {\n            tn = options.renamed[key] || key;\n            state.option[tn] = (val === \"true\");\n\n            if (options.inverted[tn] !== undefined) {\n              state.option[tn] = !state.option[tn];\n            }\n          } else {\n            state.option[key] = (val === \"true\");\n          }\n\n          if (key === \"newcap\") {\n            state.option[\"(explicitNewcap)\"] = true;\n          }\n          return;\n        }\n\n        error(\"E002\", nt);\n      });\n\n      assume();\n    }\n  }\n\n  function peek(p) {\n    var i = p || 0, j = lookahead.length, t;\n\n    if (i < j) {\n      return lookahead[i];\n    }\n\n    while (j <= i) {\n      t = lookahead[j];\n      if (!t) {\n        t = lookahead[j] = lex.token();\n      }\n      j += 1;\n    }\n    if (!t && state.tokens.next.id === \"(end)\") {\n      return state.tokens.next;\n    }\n\n    return t;\n  }\n\n  function peekIgnoreEOL() {\n    var i = 0;\n    var t;\n    do {\n      t = peek(i++);\n    } while (t.id === \"(endline)\");\n    return t;\n  }\n\n  function advance(id, t) {\n\n    switch (state.tokens.curr.id) {\n    case \"(number)\":\n      if (state.tokens.next.id === \".\") {\n        warning(\"W005\", state.tokens.curr);\n      }\n      break;\n    case \"-\":\n      if (state.tokens.next.id === \"-\" || state.tokens.next.id === \"--\") {\n        warning(\"W006\");\n      }\n      break;\n    case \"+\":\n      if (state.tokens.next.id === \"+\" || state.tokens.next.id === \"++\") {\n        warning(\"W007\");\n      }\n      break;\n    }\n\n    if (id && state.tokens.next.id !== id) {\n      if (t) {\n        if (state.tokens.next.id === \"(end)\") {\n          error(\"E019\", t, t.id);\n        } else {\n          error(\"E020\", state.tokens.next, id, t.id, t.line, state.tokens.next.value);\n        }\n      } else if (state.tokens.next.type !== \"(identifier)\" || state.tokens.next.value !== id) {\n        warning(\"W116\", state.tokens.next, id, state.tokens.next.value);\n      }\n    }\n\n    state.tokens.prev = state.tokens.curr;\n    state.tokens.curr = state.tokens.next;\n    for (;;) {\n      state.tokens.next = lookahead.shift() || lex.token();\n\n      if (!state.tokens.next) { // No more tokens left, give up\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      if (state.tokens.next.id === \"(end)\" || state.tokens.next.id === \"(error)\") {\n        return;\n      }\n\n      if (state.tokens.next.check) {\n        state.tokens.next.check();\n      }\n\n      if (state.tokens.next.isSpecial) {\n        if (state.tokens.next.type === \"falls through\") {\n          state.tokens.curr.caseFallsThrough = true;\n        } else {\n          doOption();\n        }\n      } else {\n        if (state.tokens.next.id !== \"(endline)\") {\n          break;\n        }\n      }\n    }\n  }\n\n  function isInfix(token) {\n    return token.infix || (!token.identifier && !token.template && !!token.led);\n  }\n\n  function isEndOfExpr() {\n    var curr = state.tokens.curr;\n    var next = state.tokens.next;\n    if (next.id === \";\" || next.id === \"}\" || next.id === \":\") {\n      return true;\n    }\n    if (isInfix(next) === isInfix(curr) || (curr.id === \"yield\" && state.inMoz())) {\n      return curr.line !== startLine(next);\n    }\n    return false;\n  }\n\n  function isBeginOfExpr(prev) {\n    return !prev.left && prev.arity !== \"unary\";\n  }\n\n  function expression(rbp, initial) {\n    var left, isArray = false, isObject = false, isLetExpr = false;\n\n    state.nameStack.push();\n    if (!initial && state.tokens.next.value === \"let\" && peek(0).value === \"(\") {\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.next, \"let expressions\");\n      }\n      isLetExpr = true;\n      state.funct[\"(scope)\"].stack();\n      advance(\"let\");\n      advance(\"(\");\n      state.tokens.prev.fud();\n      advance(\")\");\n    }\n\n    if (state.tokens.next.id === \"(end)\")\n      error(\"E006\", state.tokens.curr);\n\n    var isDangerous =\n      state.option.asi &&\n      state.tokens.prev.line !== startLine(state.tokens.curr) &&\n      _.contains([\"]\", \")\"], state.tokens.prev.id) &&\n      _.contains([\"[\", \"(\"], state.tokens.curr.id);\n\n    if (isDangerous)\n      warning(\"W014\", state.tokens.curr, state.tokens.curr.id);\n\n    advance();\n\n    if (initial) {\n      state.funct[\"(verb)\"] = state.tokens.curr.value;\n      state.tokens.curr.beginsStmt = true;\n    }\n\n    if (initial === true && state.tokens.curr.fud) {\n      left = state.tokens.curr.fud();\n    } else {\n      if (state.tokens.curr.nud) {\n        left = state.tokens.curr.nud();\n      } else {\n        error(\"E030\", state.tokens.curr, state.tokens.curr.id);\n      }\n      while ((rbp < state.tokens.next.lbp || state.tokens.next.type === \"(template)\") &&\n              !isEndOfExpr()) {\n        isArray = state.tokens.curr.value === \"Array\";\n        isObject = state.tokens.curr.value === \"Object\";\n        if (left && (left.value || (left.first && left.first.value))) {\n          if (left.value !== \"new\" ||\n            (left.first && left.first.value && left.first.value === \".\")) {\n            isArray = false;\n            if (left.value !== state.tokens.curr.value) {\n              isObject = false;\n            }\n          }\n        }\n\n        advance();\n\n        if (isArray && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W009\", state.tokens.curr);\n        }\n\n        if (isObject && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W010\", state.tokens.curr);\n        }\n\n        if (left && state.tokens.curr.led) {\n          left = state.tokens.curr.led(left);\n        } else {\n          error(\"E033\", state.tokens.curr, state.tokens.curr.id);\n        }\n      }\n    }\n    if (isLetExpr) {\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    state.nameStack.pop();\n\n    return left;\n  }\n\n  function startLine(token) {\n    return token.startLine || token.line;\n  }\n\n  function nobreaknonadjacent(left, right) {\n    left = left || state.tokens.curr;\n    right = right || state.tokens.next;\n    if (!state.option.laxbreak && left.line !== startLine(right)) {\n      warning(\"W014\", right, right.value);\n    }\n  }\n\n  function nolinebreak(t) {\n    t = t || state.tokens.curr;\n    if (t.line !== startLine(state.tokens.next)) {\n      warning(\"E022\", t, t.value);\n    }\n  }\n\n  function nobreakcomma(left, right) {\n    if (left.line !== startLine(right)) {\n      if (!state.option.laxcomma) {\n        if (comma.first) {\n          warning(\"I001\");\n          comma.first = false;\n        }\n        warning(\"W014\", left, right.value);\n      }\n    }\n  }\n\n  function comma(opts) {\n    opts = opts || {};\n\n    if (!opts.peek) {\n      nobreakcomma(state.tokens.curr, state.tokens.next);\n      advance(\",\");\n    } else {\n      nobreakcomma(state.tokens.prev, state.tokens.curr);\n    }\n\n    if (state.tokens.next.identifier && !(opts.property && state.inES5())) {\n      switch (state.tokens.next.value) {\n      case \"break\":\n      case \"case\":\n      case \"catch\":\n      case \"continue\":\n      case \"default\":\n      case \"do\":\n      case \"else\":\n      case \"finally\":\n      case \"for\":\n      case \"if\":\n      case \"in\":\n      case \"instanceof\":\n      case \"return\":\n      case \"switch\":\n      case \"throw\":\n      case \"try\":\n      case \"var\":\n      case \"let\":\n      case \"while\":\n      case \"with\":\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n\n    if (state.tokens.next.type === \"(punctuator)\") {\n      switch (state.tokens.next.value) {\n      case \"}\":\n      case \"]\":\n      case \",\":\n        if (opts.allowTrailing) {\n          return true;\n        }\n      case \")\":\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function symbol(s, p) {\n    var x = state.syntax[s];\n    if (!x || typeof x !== \"object\") {\n      state.syntax[s] = x = {\n        id: s,\n        lbp: p,\n        value: s\n      };\n    }\n    return x;\n  }\n\n  function delim(s) {\n    var x = symbol(s, 0);\n    x.delim = true;\n    return x;\n  }\n\n  function stmt(s, f) {\n    var x = delim(s);\n    x.identifier = x.reserved = true;\n    x.fud = f;\n    return x;\n  }\n\n  function blockstmt(s, f) {\n    var x = stmt(s, f);\n    x.block = true;\n    return x;\n  }\n\n  function reserveName(x) {\n    var c = x.id.charAt(0);\n    if ((c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\")) {\n      x.identifier = x.reserved = true;\n    }\n    return x;\n  }\n\n  function prefix(s, f) {\n    var x = symbol(s, 150);\n    reserveName(x);\n\n    x.nud = (typeof f === \"function\") ? f : function() {\n      this.arity = \"unary\";\n      this.right = expression(150);\n\n      if (this.id === \"++\" || this.id === \"--\") {\n        if (state.option.plusplus) {\n          warning(\"W016\", this, this.id);\n        } else if (this.right && (!this.right.identifier || isReserved(this.right)) &&\n            this.right.id !== \".\" && this.right.id !== \"[\") {\n          warning(\"W017\", this);\n        }\n\n        if (this.right && this.right.isMetaProperty) {\n          error(\"E031\", this);\n        } else if (this.right && this.right.identifier) {\n          state.funct[\"(scope)\"].block.modify(this.right.value, this);\n        }\n      }\n\n      return this;\n    };\n\n    return x;\n  }\n\n  function type(s, f) {\n    var x = delim(s);\n    x.type = s;\n    x.nud = f;\n    return x;\n  }\n\n  function reserve(name, func) {\n    var x = type(name, func);\n    x.identifier = true;\n    x.reserved = true;\n    return x;\n  }\n\n  function FutureReservedWord(name, meta) {\n    var x = type(name, (meta && meta.nud) || function() {\n      return this;\n    });\n\n    meta = meta || {};\n    meta.isFutureReservedWord = true;\n\n    x.value = name;\n    x.identifier = true;\n    x.reserved = true;\n    x.meta = meta;\n\n    return x;\n  }\n\n  function reservevar(s, v) {\n    return reserve(s, function() {\n      if (typeof v === \"function\") {\n        v(this);\n      }\n      return this;\n    });\n  }\n\n  function infix(s, f, p, w) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.infix = true;\n    x.led = function(left) {\n      if (!w) {\n        nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      }\n      if ((s === \"in\" || s === \"instanceof\") && left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n      if (typeof f === \"function\") {\n        return f(left, this);\n      } else {\n        this.left = left;\n        this.right = expression(p);\n        return this;\n      }\n    };\n    return x;\n  }\n\n  function application(s) {\n    var x = symbol(s, 42);\n\n    x.led = function(left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n\n      this.left = left;\n      this.right = doFunction({ type: \"arrow\", loneArg: left });\n      return this;\n    };\n    return x;\n  }\n\n  function relation(s, f) {\n    var x = symbol(s, 100);\n\n    x.led = function(left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      this.left = left;\n      var right = this.right = expression(100);\n\n      if (isIdentifier(left, \"NaN\") || isIdentifier(right, \"NaN\")) {\n        warning(\"W019\", this);\n      } else if (f) {\n        f.apply(this, [left, right]);\n      }\n\n      if (!left || !right) {\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      if (left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n\n      if (right.id === \"!\") {\n        warning(\"W018\", right, \"!\");\n      }\n\n      return this;\n    };\n    return x;\n  }\n\n  function isPoorRelation(node) {\n    return node &&\n        ((node.type === \"(number)\" && +node.value === 0) ||\n         (node.type === \"(string)\" && node.value === \"\") ||\n         (node.type === \"null\" && !state.option.eqnull) ||\n        node.type === \"true\" ||\n        node.type === \"false\" ||\n        node.type === \"undefined\");\n  }\n\n  var typeofValues = {};\n  typeofValues.legacy = [\n    \"xml\",\n    \"unknown\"\n  ];\n  typeofValues.es3 = [\n    \"undefined\", \"boolean\", \"number\", \"string\", \"function\", \"object\",\n  ];\n  typeofValues.es3 = typeofValues.es3.concat(typeofValues.legacy);\n  typeofValues.es6 = typeofValues.es3.concat(\"symbol\");\n  function isTypoTypeof(left, right, state) {\n    var values;\n\n    if (state.option.notypeof)\n      return false;\n\n    if (!left || !right)\n      return false;\n\n    values = state.inES6() ? typeofValues.es6 : typeofValues.es3;\n\n    if (right.type === \"(identifier)\" && right.value === \"typeof\" && left.type === \"(string)\")\n      return !_.contains(values, left.value);\n\n    return false;\n  }\n\n  function isGlobalEval(left, state) {\n    var isGlobal = false;\n    if (left.type === \"this\" && state.funct[\"(context)\"] === null) {\n      isGlobal = true;\n    }\n    else if (left.type === \"(identifier)\") {\n      if (state.option.node && left.value === \"global\") {\n        isGlobal = true;\n      }\n\n      else if (state.option.browser && (left.value === \"window\" || left.value === \"document\")) {\n        isGlobal = true;\n      }\n    }\n\n    return isGlobal;\n  }\n\n  function findNativePrototype(left) {\n    var natives = [\n      \"Array\", \"ArrayBuffer\", \"Boolean\", \"Collator\", \"DataView\", \"Date\",\n      \"DateTimeFormat\", \"Error\", \"EvalError\", \"Float32Array\", \"Float64Array\",\n      \"Function\", \"Infinity\", \"Intl\", \"Int16Array\", \"Int32Array\", \"Int8Array\",\n      \"Iterator\", \"Number\", \"NumberFormat\", \"Object\", \"RangeError\",\n      \"ReferenceError\", \"RegExp\", \"StopIteration\", \"String\", \"SyntaxError\",\n      \"TypeError\", \"Uint16Array\", \"Uint32Array\", \"Uint8Array\", \"Uint8ClampedArray\",\n      \"URIError\"\n    ];\n\n    function walkPrototype(obj) {\n      if (typeof obj !== \"object\") return;\n      return obj.right === \"prototype\" ? obj : walkPrototype(obj.left);\n    }\n\n    function walkNative(obj) {\n      while (!obj.identifier && typeof obj.left === \"object\")\n        obj = obj.left;\n\n      if (obj.identifier && natives.indexOf(obj.value) >= 0)\n        return obj.value;\n    }\n\n    var prototype = walkPrototype(left);\n    if (prototype) return walkNative(prototype);\n  }\n  function checkLeftSideAssign(left, assignToken, options) {\n\n    var allowDestructuring = options && options.allowDestructuring;\n\n    assignToken = assignToken || left;\n\n    if (state.option.freeze) {\n      var nativeObject = findNativePrototype(left);\n      if (nativeObject)\n        warning(\"W121\", left, nativeObject);\n    }\n\n    if (left.identifier && !left.isMetaProperty) {\n      state.funct[\"(scope)\"].block.reassign(left.value, left);\n    }\n\n    if (left.id === \".\") {\n      if (!left.left || left.left.value === \"arguments\" && !state.isStrict()) {\n        warning(\"E031\", assignToken);\n      }\n\n      state.nameStack.set(state.tokens.prev);\n      return true;\n    } else if (left.id === \"{\" || left.id === \"[\") {\n      if (allowDestructuring && state.tokens.curr.left.destructAssign) {\n        state.tokens.curr.left.destructAssign.forEach(function(t) {\n          if (t.id) {\n            state.funct[\"(scope)\"].block.modify(t.id, t.token);\n          }\n        });\n      } else {\n        if (left.id === \"{\" || !left.left) {\n          warning(\"E031\", assignToken);\n        } else if (left.left.value === \"arguments\" && !state.isStrict()) {\n          warning(\"E031\", assignToken);\n        }\n      }\n\n      if (left.id === \"[\") {\n        state.nameStack.set(left.right);\n      }\n\n      return true;\n    } else if (left.isMetaProperty) {\n      error(\"E031\", assignToken);\n      return true;\n    } else if (left.identifier && !isReserved(left)) {\n      if (state.funct[\"(scope)\"].labeltype(left.value) === \"exception\") {\n        warning(\"W022\", left);\n      }\n      state.nameStack.set(left);\n      return true;\n    }\n\n    if (left === state.syntax[\"function\"]) {\n      warning(\"W023\", state.tokens.curr);\n    }\n\n    return false;\n  }\n\n  function assignop(s, f, p) {\n    var x = infix(s, typeof f === \"function\" ? f : function(left, that) {\n      that.left = left;\n\n      if (left && checkLeftSideAssign(left, that, { allowDestructuring: true })) {\n        that.right = expression(10);\n        return that;\n      }\n\n      error(\"E031\", that);\n    }, p);\n\n    x.exps = true;\n    x.assign = true;\n    return x;\n  }\n\n\n  function bitwise(s, f, p) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.led = (typeof f === \"function\") ? f : function(left) {\n      if (state.option.bitwise) {\n        warning(\"W016\", this, this.id);\n      }\n      this.left = left;\n      this.right = expression(p);\n      return this;\n    };\n    return x;\n  }\n\n  function bitwiseassignop(s) {\n    return assignop(s, function(left, that) {\n      if (state.option.bitwise) {\n        warning(\"W016\", that, that.id);\n      }\n\n      if (left && checkLeftSideAssign(left, that)) {\n        that.right = expression(10);\n        return that;\n      }\n      error(\"E031\", that);\n    }, 20);\n  }\n\n  function suffix(s) {\n    var x = symbol(s, 150);\n\n    x.led = function(left) {\n      if (state.option.plusplus) {\n        warning(\"W016\", this, this.id);\n      } else if ((!left.identifier || isReserved(left)) && left.id !== \".\" && left.id !== \"[\") {\n        warning(\"W017\", this);\n      }\n\n      if (left.isMetaProperty) {\n        error(\"E031\", this);\n      } else if (left && left.identifier) {\n        state.funct[\"(scope)\"].block.modify(left.value, left);\n      }\n\n      this.left = left;\n      return this;\n    };\n    return x;\n  }\n\n  function optionalidentifier(fnparam, prop, preserve) {\n    if (!state.tokens.next.identifier) {\n      return;\n    }\n\n    if (!preserve) {\n      advance();\n    }\n\n    var curr = state.tokens.curr;\n    var val  = state.tokens.curr.value;\n\n    if (!isReserved(curr)) {\n      return val;\n    }\n\n    if (prop) {\n      if (state.inES5()) {\n        return val;\n      }\n    }\n\n    if (fnparam && val === \"undefined\") {\n      return val;\n    }\n\n    warning(\"W024\", state.tokens.curr, state.tokens.curr.id);\n    return val;\n  }\n  function identifier(fnparam, prop) {\n    var i = optionalidentifier(fnparam, prop, false);\n    if (i) {\n      return i;\n    }\n    if (state.tokens.next.value === \"...\") {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.next, \"spread/rest operator\", \"6\");\n      }\n      advance();\n\n      if (checkPunctuator(state.tokens.next, \"...\")) {\n        warning(\"E024\", state.tokens.next, \"...\");\n        while (checkPunctuator(state.tokens.next, \"...\")) {\n          advance();\n        }\n      }\n\n      if (!state.tokens.next.identifier) {\n        warning(\"E024\", state.tokens.curr, \"...\");\n        return;\n      }\n\n      return identifier(fnparam, prop);\n    } else {\n      error(\"E030\", state.tokens.next, state.tokens.next.value);\n      if (state.tokens.next.id !== \";\") {\n        advance();\n      }\n    }\n  }\n\n\n  function reachable(controlToken) {\n    var i = 0, t;\n    if (state.tokens.next.id !== \";\" || controlToken.inBracelessBlock) {\n      return;\n    }\n    for (;;) {\n      do {\n        t = peek(i);\n        i += 1;\n      } while (t.id !== \"(end)\" && t.id === \"(comment)\");\n\n      if (t.reach) {\n        return;\n      }\n      if (t.id !== \"(endline)\") {\n        if (t.id === \"function\") {\n          if (state.option.latedef === true) {\n            warning(\"W026\", t);\n          }\n          break;\n        }\n\n        warning(\"W027\", t, t.value, controlToken.value);\n        break;\n      }\n    }\n  }\n\n  function parseFinalSemicolon() {\n    if (state.tokens.next.id !== \";\") {\n      if (state.tokens.next.isUnclosed) return advance();\n\n      var sameLine = startLine(state.tokens.next) === state.tokens.curr.line &&\n                     state.tokens.next.id !== \"(end)\";\n      var blockEnd = checkPunctuator(state.tokens.next, \"}\");\n\n      if (sameLine && !blockEnd) {\n        errorAt(\"E058\", state.tokens.curr.line, state.tokens.curr.character);\n      } else if (!state.option.asi) {\n        if ((blockEnd && !state.option.lastsemic) || !sameLine) {\n          warningAt(\"W033\", state.tokens.curr.line, state.tokens.curr.character);\n        }\n      }\n    } else {\n      advance(\";\");\n    }\n  }\n\n  function statement() {\n    var i = indent, r, t = state.tokens.next, hasOwnScope = false;\n\n    if (t.id === \";\") {\n      advance(\";\");\n      return;\n    }\n    var res = isReserved(t);\n\n    if (res && t.meta && t.meta.isFutureReservedWord && peek().id === \":\") {\n      warning(\"W024\", t, t.id);\n      res = false;\n    }\n\n    if (t.identifier && !res && peek().id === \":\") {\n      advance();\n      advance(\":\");\n\n      hasOwnScope = true;\n      state.funct[\"(scope)\"].stack();\n      state.funct[\"(scope)\"].block.addBreakLabel(t.value, { token: state.tokens.curr });\n\n      if (!state.tokens.next.labelled && state.tokens.next.value !== \"{\") {\n        warning(\"W028\", state.tokens.next, t.value, state.tokens.next.value);\n      }\n\n      state.tokens.next.label = t.value;\n      t = state.tokens.next;\n    }\n\n    if (t.id === \"{\") {\n      var iscase = (state.funct[\"(verb)\"] === \"case\" && state.tokens.curr.value === \":\");\n      block(true, true, false, false, iscase);\n      return;\n    }\n\n    r = expression(0, true);\n\n    if (r && !(r.identifier && r.value === \"function\") &&\n        !(r.type === \"(punctuator)\" && r.left &&\n          r.left.identifier && r.left.value === \"function\")) {\n      if (!state.isStrict() &&\n          state.option.strict === \"global\") {\n        warning(\"E007\");\n      }\n    }\n\n    if (!t.block) {\n      if (!state.option.expr && (!r || !r.exps)) {\n        warning(\"W030\", state.tokens.curr);\n      } else if (state.option.nonew && r && r.left && r.id === \"(\" && r.left.id === \"new\") {\n        warning(\"W031\", t);\n      }\n      parseFinalSemicolon();\n    }\n\n    indent = i;\n    if (hasOwnScope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return r;\n  }\n\n\n  function statements() {\n    var a = [], p;\n\n    while (!state.tokens.next.reach && state.tokens.next.id !== \"(end)\") {\n      if (state.tokens.next.id === \";\") {\n        p = peek();\n\n        if (!p || (p.id !== \"(\" && p.id !== \"[\")) {\n          warning(\"W032\");\n        }\n\n        advance(\";\");\n      } else {\n        a.push(statement());\n      }\n    }\n    return a;\n  }\n  function directives() {\n    var i, p, pn;\n\n    while (state.tokens.next.id === \"(string)\") {\n      p = peek(0);\n      if (p.id === \"(endline)\") {\n        i = 1;\n        do {\n          pn = peek(i++);\n        } while (pn.id === \"(endline)\");\n        if (pn.id === \";\") {\n          p = pn;\n        } else if (pn.value === \"[\" || pn.value === \".\") {\n          break;\n        } else if (!state.option.asi || pn.value === \"(\") {\n          warning(\"W033\", state.tokens.next);\n        }\n      } else if (p.id === \".\" || p.id === \"[\") {\n        break;\n      } else if (p.id !== \";\") {\n        warning(\"W033\", p);\n      }\n\n      advance();\n      var directive = state.tokens.curr.value;\n      if (state.directive[directive] ||\n          (directive === \"use strict\" && state.option.strict === \"implied\")) {\n        warning(\"W034\", state.tokens.curr, directive);\n      }\n      state.directive[directive] = true;\n\n      if (p.id === \";\") {\n        advance(\";\");\n      }\n    }\n\n    if (state.isStrict()) {\n      if (!state.option[\"(explicitNewcap)\"]) {\n        state.option.newcap = true;\n      }\n      state.option.undef = true;\n    }\n  }\n  function block(ordinary, stmt, isfunc, isfatarrow, iscase) {\n    var a,\n      b = inblock,\n      old_indent = indent,\n      m,\n      t,\n      line,\n      d;\n\n    inblock = ordinary;\n\n    t = state.tokens.next;\n\n    var metrics = state.funct[\"(metrics)\"];\n    metrics.nestedBlockDepth += 1;\n    metrics.verifyMaxNestedBlockDepthPerFunction();\n\n    if (state.tokens.next.id === \"{\") {\n      advance(\"{\");\n      state.funct[\"(scope)\"].stack();\n\n      line = state.tokens.curr.line;\n      if (state.tokens.next.id !== \"}\") {\n        indent += state.option.indent;\n        while (!ordinary && state.tokens.next.from > indent) {\n          indent += state.option.indent;\n        }\n\n        if (isfunc) {\n          m = {};\n          for (d in state.directive) {\n            if (_.has(state.directive, d)) {\n              m[d] = state.directive[d];\n            }\n          }\n          directives();\n\n          if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n            if (!m[\"use strict\"] && !state.isStrict()) {\n              warning(\"E007\");\n            }\n          }\n        }\n\n        a = statements();\n\n        metrics.statementCount += a.length;\n\n        indent -= state.option.indent;\n      }\n\n      advance(\"}\", t);\n\n      if (isfunc) {\n        state.funct[\"(scope)\"].validateParams();\n        if (m) {\n          state.directive = m;\n        }\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n      indent = old_indent;\n    } else if (!ordinary) {\n      if (isfunc) {\n        state.funct[\"(scope)\"].stack();\n\n        m = {};\n        if (stmt && !isfatarrow && !state.inMoz()) {\n          error(\"W118\", state.tokens.curr, \"function closure expressions\");\n        }\n\n        if (!stmt) {\n          for (d in state.directive) {\n            if (_.has(state.directive, d)) {\n              m[d] = state.directive[d];\n            }\n          }\n        }\n        expression(10);\n\n        if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n          if (!m[\"use strict\"] && !state.isStrict()) {\n            warning(\"E007\");\n          }\n        }\n\n        state.funct[\"(scope)\"].unstack();\n      } else {\n        error(\"E021\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n    } else {\n      state.funct[\"(noblockscopedvar)\"] = state.tokens.next.id !== \"for\";\n      state.funct[\"(scope)\"].stack();\n\n      if (!stmt || state.option.curly) {\n        warning(\"W116\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n\n      state.tokens.next.inBracelessBlock = true;\n      indent += state.option.indent;\n      a = [statement()];\n      indent -= state.option.indent;\n\n      state.funct[\"(scope)\"].unstack();\n      delete state.funct[\"(noblockscopedvar)\"];\n    }\n    switch (state.funct[\"(verb)\"]) {\n    case \"break\":\n    case \"continue\":\n    case \"return\":\n    case \"throw\":\n      if (iscase) {\n        break;\n      }\n    default:\n      state.funct[\"(verb)\"] = null;\n    }\n\n    inblock = b;\n    if (ordinary && state.option.noempty && (!a || a.length === 0)) {\n      warning(\"W035\", state.tokens.prev);\n    }\n    metrics.nestedBlockDepth -= 1;\n    return a;\n  }\n\n\n  function countMember(m) {\n    if (membersOnly && typeof membersOnly[m] !== \"boolean\") {\n      warning(\"W036\", state.tokens.curr, m);\n    }\n    if (typeof member[m] === \"number\") {\n      member[m] += 1;\n    } else {\n      member[m] = 1;\n    }\n  }\n\n  type(\"(number)\", function() {\n    return this;\n  });\n\n  type(\"(string)\", function() {\n    return this;\n  });\n\n  state.syntax[\"(identifier)\"] = {\n    type: \"(identifier)\",\n    lbp: 0,\n    identifier: true,\n\n    nud: function() {\n      var v = this.value;\n      if (state.tokens.next.id === \"=>\") {\n        return this;\n      }\n\n      if (!state.funct[\"(comparray)\"].check(v)) {\n        state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n      }\n      return this;\n    },\n\n    led: function() {\n      error(\"E033\", state.tokens.next, state.tokens.next.value);\n    }\n  };\n\n  var baseTemplateSyntax = {\n    lbp: 0,\n    identifier: false,\n    template: true,\n  };\n  state.syntax[\"(template)\"] = _.extend({\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template middle)\"] = _.extend({\n    type: \"(template middle)\",\n    middle: true,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template tail)\"] = _.extend({\n    type: \"(template tail)\",\n    tail: true,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(no subst template)\"] = _.extend({\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: true,\n    tail: true // mark as tail, since it's always the last component\n  }, baseTemplateSyntax);\n\n  type(\"(regexp)\", function() {\n    return this;\n  });\n\n  delim(\"(endline)\");\n  delim(\"(begin)\");\n  delim(\"(end)\").reach = true;\n  delim(\"(error)\").reach = true;\n  delim(\"}\").reach = true;\n  delim(\")\");\n  delim(\"]\");\n  delim(\"\\\"\").reach = true;\n  delim(\"'\").reach = true;\n  delim(\";\");\n  delim(\":\").reach = true;\n  delim(\"#\");\n\n  reserve(\"else\");\n  reserve(\"case\").reach = true;\n  reserve(\"catch\");\n  reserve(\"default\").reach = true;\n  reserve(\"finally\");\n  reservevar(\"arguments\", function(x) {\n    if (state.isStrict() && state.funct[\"(global)\"]) {\n      warning(\"E008\", x);\n    }\n  });\n  reservevar(\"eval\");\n  reservevar(\"false\");\n  reservevar(\"Infinity\");\n  reservevar(\"null\");\n  reservevar(\"this\", function(x) {\n    if (state.isStrict() && !isMethod() &&\n        !state.option.validthis && ((state.funct[\"(statement)\"] &&\n        state.funct[\"(name)\"].charAt(0) > \"Z\") || state.funct[\"(global)\"])) {\n      warning(\"W040\", x);\n    }\n  });\n  reservevar(\"true\");\n  reservevar(\"undefined\");\n\n  assignop(\"=\", \"assign\", 20);\n  assignop(\"+=\", \"assignadd\", 20);\n  assignop(\"-=\", \"assignsub\", 20);\n  assignop(\"*=\", \"assignmult\", 20);\n  assignop(\"/=\", \"assigndiv\", 20).nud = function() {\n    error(\"E014\");\n  };\n  assignop(\"%=\", \"assignmod\", 20);\n\n  bitwiseassignop(\"&=\");\n  bitwiseassignop(\"|=\");\n  bitwiseassignop(\"^=\");\n  bitwiseassignop(\"<<=\");\n  bitwiseassignop(\">>=\");\n  bitwiseassignop(\">>>=\");\n  infix(\",\", function(left, that) {\n    var expr;\n    that.exprs = [left];\n\n    if (state.option.nocomma) {\n      warning(\"W127\");\n    }\n\n    if (!comma({ peek: true })) {\n      return that;\n    }\n    while (true) {\n      if (!(expr = expression(10))) {\n        break;\n      }\n      that.exprs.push(expr);\n      if (state.tokens.next.value !== \",\" || !comma()) {\n        break;\n      }\n    }\n    return that;\n  }, 10, true);\n\n  infix(\"?\", function(left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(10);\n    advance(\":\");\n    that[\"else\"] = expression(10);\n    return that;\n  }, 30);\n\n  var orPrecendence = 40;\n  infix(\"||\", function(left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(orPrecendence);\n    return that;\n  }, orPrecendence);\n  infix(\"&&\", \"and\", 50);\n  bitwise(\"|\", \"bitor\", 70);\n  bitwise(\"^\", \"bitxor\", 80);\n  bitwise(\"&\", \"bitand\", 90);\n  relation(\"==\", function(left, right) {\n    var eqnull = state.option.eqnull &&\n      ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    switch (true) {\n      case !eqnull && state.option.eqeqeq:\n        this.from = this.character;\n        warning(\"W116\", this, \"===\", \"==\");\n        break;\n      case isPoorRelation(left):\n        warning(\"W041\", this, \"===\", left.value);\n        break;\n      case isPoorRelation(right):\n        warning(\"W041\", this, \"===\", right.value);\n        break;\n      case isTypoTypeof(right, left, state):\n        warning(\"W122\", this, right.value);\n        break;\n      case isTypoTypeof(left, right, state):\n        warning(\"W122\", this, left.value);\n        break;\n    }\n\n    return this;\n  });\n  relation(\"===\", function(left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!=\", function(left, right) {\n    var eqnull = state.option.eqnull &&\n        ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    if (!eqnull && state.option.eqeqeq) {\n      this.from = this.character;\n      warning(\"W116\", this, \"!==\", \"!=\");\n    } else if (isPoorRelation(left)) {\n      warning(\"W041\", this, \"!==\", left.value);\n    } else if (isPoorRelation(right)) {\n      warning(\"W041\", this, \"!==\", right.value);\n    } else if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!==\", function(left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"<\");\n  relation(\">\");\n  relation(\"<=\");\n  relation(\">=\");\n  bitwise(\"<<\", \"shiftleft\", 120);\n  bitwise(\">>\", \"shiftright\", 120);\n  bitwise(\">>>\", \"shiftrightunsigned\", 120);\n  infix(\"in\", \"in\", 120);\n  infix(\"instanceof\", \"instanceof\", 120);\n  infix(\"+\", function(left, that) {\n    var right;\n    that.left = left;\n    that.right = right = expression(130);\n\n    if (left && right && left.id === \"(string)\" && right.id === \"(string)\") {\n      left.value += right.value;\n      left.character = right.character;\n      if (!state.option.scripturl && reg.javascriptURL.test(left.value)) {\n        warning(\"W050\", left);\n      }\n      return left;\n    }\n\n    return that;\n  }, 130);\n  prefix(\"+\", \"num\");\n  prefix(\"+++\", function() {\n    warning(\"W007\");\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n  infix(\"+++\", function(left) {\n    warning(\"W007\");\n    this.left = left;\n    this.right = expression(130);\n    return this;\n  }, 130);\n  infix(\"-\", \"sub\", 130);\n  prefix(\"-\", \"neg\");\n  prefix(\"---\", function() {\n    warning(\"W006\");\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n  infix(\"---\", function(left) {\n    warning(\"W006\");\n    this.left = left;\n    this.right = expression(130);\n    return this;\n  }, 130);\n  infix(\"*\", \"mult\", 140);\n  infix(\"/\", \"div\", 140);\n  infix(\"%\", \"mod\", 140);\n\n  suffix(\"++\");\n  prefix(\"++\", \"preinc\");\n  state.syntax[\"++\"].exps = true;\n\n  suffix(\"--\");\n  prefix(\"--\", \"predec\");\n  state.syntax[\"--\"].exps = true;\n  prefix(\"delete\", function() {\n    var p = expression(10);\n    if (!p) {\n      return this;\n    }\n\n    if (p.id !== \".\" && p.id !== \"[\") {\n      warning(\"W051\");\n    }\n    this.first = p;\n    if (p.identifier && !state.isStrict()) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  }).exps = true;\n\n  prefix(\"~\", function() {\n    if (state.option.bitwise) {\n      warning(\"W016\", this, \"~\");\n    }\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n\n  prefix(\"...\", function() {\n    if (!state.inES6(true)) {\n      warning(\"W119\", this, \"spread/rest operator\", \"6\");\n    }\n    if (!state.tokens.next.identifier &&\n        state.tokens.next.type !== \"(string)\" &&\n          !checkPunctuators(state.tokens.next, [\"[\", \"(\"])) {\n\n      error(\"E030\", state.tokens.next, state.tokens.next.value);\n    }\n    expression(150);\n    return this;\n  });\n\n  prefix(\"!\", function() {\n    this.arity = \"unary\";\n    this.right = expression(150);\n\n    if (!this.right) { // '!' followed by nothing? Give up.\n      quit(\"E041\", this.line || 0);\n    }\n\n    if (bang[this.right.id] === true) {\n      warning(\"W018\", this, \"!\");\n    }\n    return this;\n  });\n\n  prefix(\"typeof\", (function() {\n    var p = expression(150);\n    this.first = this.right = p;\n\n    if (!p) { // 'typeof' followed by nothing? Give up.\n      quit(\"E041\", this.line || 0, this.character || 0);\n    }\n    if (p.identifier) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  }));\n  prefix(\"new\", function() {\n    var mp = metaProperty(\"target\", function() {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.prev, \"new.target\", \"6\");\n      }\n      var inFunction, c = state.funct;\n      while (c) {\n        inFunction = !c[\"(global)\"];\n        if (!c[\"(arrow)\"]) { break; }\n        c = c[\"(context)\"];\n      }\n      if (!inFunction) {\n        warning(\"W136\", state.tokens.prev, \"new.target\");\n      }\n    });\n    if (mp) { return mp; }\n\n    var c = expression(155), i;\n    if (c && c.id !== \"function\") {\n      if (c.identifier) {\n        c[\"new\"] = true;\n        switch (c.value) {\n        case \"Number\":\n        case \"String\":\n        case \"Boolean\":\n        case \"Math\":\n        case \"JSON\":\n          warning(\"W053\", state.tokens.prev, c.value);\n          break;\n        case \"Symbol\":\n          if (state.inES6()) {\n            warning(\"W053\", state.tokens.prev, c.value);\n          }\n          break;\n        case \"Function\":\n          if (!state.option.evil) {\n            warning(\"W054\");\n          }\n          break;\n        case \"Date\":\n        case \"RegExp\":\n        case \"this\":\n          break;\n        default:\n          if (c.id !== \"function\") {\n            i = c.value.substr(0, 1);\n            if (state.option.newcap && (i < \"A\" || i > \"Z\") &&\n              !state.funct[\"(scope)\"].isPredefined(c.value)) {\n              warning(\"W055\", state.tokens.curr);\n            }\n          }\n        }\n      } else {\n        if (c.id !== \".\" && c.id !== \"[\" && c.id !== \"(\") {\n          warning(\"W056\", state.tokens.curr);\n        }\n      }\n    } else {\n      if (!state.option.supernew)\n        warning(\"W057\", this);\n    }\n    if (state.tokens.next.id !== \"(\" && !state.option.supernew) {\n      warning(\"W058\", state.tokens.curr, state.tokens.curr.value);\n    }\n    this.first = this.right = c;\n    return this;\n  });\n  state.syntax[\"new\"].exps = true;\n\n  prefix(\"void\").exps = true;\n\n  infix(\".\", function(left, that) {\n    var m = identifier(false, true);\n\n    if (typeof m === \"string\") {\n      countMember(m);\n    }\n\n    that.left = left;\n    that.right = m;\n\n    if (m && m === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    if (left && left.value === \"arguments\" && (m === \"callee\" || m === \"caller\")) {\n      if (state.option.noarg)\n        warning(\"W059\", left, m);\n      else if (state.isStrict())\n        error(\"E008\");\n    } else if (!state.option.evil && left && left.value === \"document\" &&\n        (m === \"write\" || m === \"writeln\")) {\n      warning(\"W060\", left);\n    }\n\n    if (!state.option.evil && (m === \"eval\" || m === \"execScript\")) {\n      if (isGlobalEval(left, state)) {\n        warning(\"W061\");\n      }\n    }\n\n    return that;\n  }, 160, true);\n\n  infix(\"(\", function(left, that) {\n    if (state.option.immed && left && !left.immed && left.id === \"function\") {\n      warning(\"W062\");\n    }\n\n    var n = 0;\n    var p = [];\n\n    if (left) {\n      if (left.type === \"(identifier)\") {\n        if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {\n          if (\"Array Number String Boolean Date Object Error Symbol\".indexOf(left.value) === -1) {\n            if (left.value === \"Math\") {\n              warning(\"W063\", left);\n            } else if (state.option.newcap) {\n              warning(\"W064\", left);\n            }\n          }\n        }\n      }\n    }\n\n    if (state.tokens.next.id !== \")\") {\n      for (;;) {\n        p[p.length] = expression(10);\n        n += 1;\n        if (state.tokens.next.id !== \",\") {\n          break;\n        }\n        comma();\n      }\n    }\n\n    advance(\")\");\n\n    if (typeof left === \"object\") {\n      if (!state.inES5() && left.value === \"parseInt\" && n === 1) {\n        warning(\"W065\", state.tokens.curr);\n      }\n      if (!state.option.evil) {\n        if (left.value === \"eval\" || left.value === \"Function\" ||\n            left.value === \"execScript\") {\n          warning(\"W061\", left);\n\n          if (p[0] && [0].id === \"(string)\") {\n            addInternalSrc(left, p[0].value);\n          }\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             (left.value === \"setTimeout\" ||\n            left.value === \"setInterval\")) {\n          warning(\"W066\", left);\n          addInternalSrc(left, p[0].value);\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             left.value === \".\" &&\n             left.left.value === \"window\" &&\n             (left.right === \"setTimeout\" ||\n            left.right === \"setInterval\")) {\n          warning(\"W066\", left);\n          addInternalSrc(left, p[0].value);\n        }\n      }\n      if (!left.identifier && left.id !== \".\" && left.id !== \"[\" && left.id !== \"=>\" &&\n          left.id !== \"(\" && left.id !== \"&&\" && left.id !== \"||\" && left.id !== \"?\" &&\n          !(state.inES6() && left[\"(name)\"])) {\n        warning(\"W067\", that);\n      }\n    }\n\n    that.left = left;\n    return that;\n  }, 155, true).exps = true;\n\n  prefix(\"(\", function() {\n    var pn = state.tokens.next, pn1, i = -1;\n    var ret, triggerFnExpr, first, last;\n    var parens = 1;\n    var opening = state.tokens.curr;\n    var preceeding = state.tokens.prev;\n    var isNecessary = !state.option.singleGroups;\n\n    do {\n      if (pn.value === \"(\") {\n        parens += 1;\n      } else if (pn.value === \")\") {\n        parens -= 1;\n      }\n\n      i += 1;\n      pn1 = pn;\n      pn = peek(i);\n    } while (!(parens === 0 && pn1.value === \")\") && pn.value !== \";\" && pn.type !== \"(end)\");\n\n    if (state.tokens.next.id === \"function\") {\n      triggerFnExpr = state.tokens.next.immed = true;\n    }\n    if (pn.value === \"=>\") {\n      return doFunction({ type: \"arrow\", parsedOpening: true });\n    }\n\n    var exprs = [];\n\n    if (state.tokens.next.id !== \")\") {\n      for (;;) {\n        exprs.push(expression(10));\n\n        if (state.tokens.next.id !== \",\") {\n          break;\n        }\n\n        if (state.option.nocomma) {\n          warning(\"W127\");\n        }\n\n        comma();\n      }\n    }\n\n    advance(\")\", this);\n    if (state.option.immed && exprs[0] && exprs[0].id === \"function\") {\n      if (state.tokens.next.id !== \"(\" &&\n        state.tokens.next.id !== \".\" && state.tokens.next.id !== \"[\") {\n        warning(\"W068\", this);\n      }\n    }\n\n    if (!exprs.length) {\n      return;\n    }\n    if (exprs.length > 1) {\n      ret = Object.create(state.syntax[\",\"]);\n      ret.exprs = exprs;\n\n      first = exprs[0];\n      last = exprs[exprs.length - 1];\n\n      if (!isNecessary) {\n        isNecessary = preceeding.assign || preceeding.delim;\n      }\n    } else {\n      ret = first = last = exprs[0];\n\n      if (!isNecessary) {\n        isNecessary =\n          (opening.beginsStmt && (ret.id === \"{\" || triggerFnExpr || isFunctor(ret))) ||\n          (triggerFnExpr &&\n            (!isEndOfExpr() || state.tokens.prev.id !== \"}\")) ||\n          (isFunctor(ret) && !isEndOfExpr()) ||\n          (ret.id === \"{\" && preceeding.id === \"=>\") ||\n          (ret.type === \"(number)\" &&\n            checkPunctuator(pn, \".\") && /^\\d+$/.test(ret.value));\n      }\n    }\n\n    if (ret) {\n      if (!isNecessary && (first.left || first.right || ret.exprs)) {\n        isNecessary =\n          (!isBeginOfExpr(preceeding) && first.lbp <= preceeding.lbp) ||\n          (!isEndOfExpr() && last.lbp < state.tokens.next.lbp);\n      }\n\n      if (!isNecessary) {\n        warning(\"W126\", opening);\n      }\n\n      ret.paren = true;\n    }\n\n    return ret;\n  });\n\n  application(\"=>\");\n\n  infix(\"[\", function(left, that) {\n    var e = expression(10), s;\n    if (e && e.type === \"(string)\") {\n      if (!state.option.evil && (e.value === \"eval\" || e.value === \"execScript\")) {\n        if (isGlobalEval(left, state)) {\n          warning(\"W061\");\n        }\n      }\n\n      countMember(e.value);\n      if (!state.option.sub && reg.identifier.test(e.value)) {\n        s = state.syntax[e.value];\n        if (!s || !isReserved(s)) {\n          warning(\"W069\", state.tokens.prev, e.value);\n        }\n      }\n    }\n    advance(\"]\", that);\n\n    if (e && e.value === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    that.left = left;\n    that.right = e;\n    return that;\n  }, 160, true);\n\n  function comprehensiveArrayExpression() {\n    var res = {};\n    res.exps = true;\n    state.funct[\"(comparray)\"].stack();\n    var reversed = false;\n    if (state.tokens.next.value !== \"for\") {\n      reversed = true;\n      if (!state.inMoz()) {\n        warning(\"W116\", state.tokens.next, \"for\", state.tokens.next.value);\n      }\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(10);\n    }\n\n    advance(\"for\");\n    if (state.tokens.next.value === \"each\") {\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n    advance(\"(\");\n    state.funct[\"(comparray)\"].setState(\"define\");\n    res.left = expression(130);\n    if (_.contains([\"in\", \"of\"], state.tokens.next.value)) {\n      advance();\n    } else {\n      error(\"E045\", state.tokens.curr);\n    }\n    state.funct[\"(comparray)\"].setState(\"generate\");\n    expression(10);\n\n    advance(\")\");\n    if (state.tokens.next.value === \"if\") {\n      advance(\"if\");\n      advance(\"(\");\n      state.funct[\"(comparray)\"].setState(\"filter\");\n      res.filter = expression(10);\n      advance(\")\");\n    }\n\n    if (!reversed) {\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(10);\n    }\n\n    advance(\"]\");\n    state.funct[\"(comparray)\"].unstack();\n    return res;\n  }\n\n  prefix(\"[\", function() {\n    var blocktype = lookupBlockType();\n    if (blocktype.isCompArray) {\n      if (!state.option.esnext && !state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"array comprehension\");\n      }\n      return comprehensiveArrayExpression();\n    } else if (blocktype.isDestAssign) {\n      this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true });\n      return this;\n    }\n    var b = state.tokens.curr.line !== startLine(state.tokens.next);\n    this.first = [];\n    if (b) {\n      indent += state.option.indent;\n      if (state.tokens.next.from === indent + state.option.indent) {\n        indent += state.option.indent;\n      }\n    }\n    while (state.tokens.next.id !== \"(end)\") {\n      while (state.tokens.next.id === \",\") {\n        if (!state.option.elision) {\n          if (!state.inES5()) {\n            warning(\"W070\");\n          } else {\n            warning(\"W128\");\n            do {\n              advance(\",\");\n            } while (state.tokens.next.id === \",\");\n            continue;\n          }\n        }\n        advance(\",\");\n      }\n\n      if (state.tokens.next.id === \"]\") {\n        break;\n      }\n\n      this.first.push(expression(10));\n      if (state.tokens.next.id === \",\") {\n        comma({ allowTrailing: true });\n        if (state.tokens.next.id === \"]\" && !state.inES5()) {\n          warning(\"W070\", state.tokens.curr);\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    if (b) {\n      indent -= state.option.indent;\n    }\n    advance(\"]\", this);\n    return this;\n  });\n\n\n  function isMethod() {\n    return state.funct[\"(statement)\"] && state.funct[\"(statement)\"].type === \"class\" ||\n           state.funct[\"(context)\"] && state.funct[\"(context)\"][\"(verb)\"] === \"class\";\n  }\n\n\n  function isPropertyName(token) {\n    return token.identifier || token.id === \"(string)\" || token.id === \"(number)\";\n  }\n\n\n  function propertyName(preserveOrToken) {\n    var id;\n    var preserve = true;\n    if (typeof preserveOrToken === \"object\") {\n      id = preserveOrToken;\n    } else {\n      preserve = preserveOrToken;\n      id = optionalidentifier(false, true, preserve);\n    }\n\n    if (!id) {\n      if (state.tokens.next.id === \"(string)\") {\n        id = state.tokens.next.value;\n        if (!preserve) {\n          advance();\n        }\n      } else if (state.tokens.next.id === \"(number)\") {\n        id = state.tokens.next.value.toString();\n        if (!preserve) {\n          advance();\n        }\n      }\n    } else if (typeof id === \"object\") {\n      if (id.id === \"(string)\" || id.id === \"(identifier)\") id = id.value;\n      else if (id.id === \"(number)\") id = id.value.toString();\n    }\n\n    if (id === \"hasOwnProperty\") {\n      warning(\"W001\");\n    }\n\n    return id;\n  }\n  function functionparams(options) {\n    var next;\n    var paramsIds = [];\n    var ident;\n    var tokens = [];\n    var t;\n    var pastDefault = false;\n    var pastRest = false;\n    var arity = 0;\n    var loneArg = options && options.loneArg;\n\n    if (loneArg && loneArg.identifier === true) {\n      state.funct[\"(scope)\"].addParam(loneArg.value, loneArg);\n      return { arity: 1, params: [ loneArg.value ] };\n    }\n\n    next = state.tokens.next;\n\n    if (!options || !options.parsedOpening) {\n      advance(\"(\");\n    }\n\n    if (state.tokens.next.id === \")\") {\n      advance(\")\");\n      return;\n    }\n\n    function addParam(addParamArgs) {\n      state.funct[\"(scope)\"].addParam.apply(state.funct[\"(scope)\"], addParamArgs);\n    }\n\n    for (;;) {\n      arity++;\n      var currentParams = [];\n\n      if (_.contains([\"{\", \"[\"], state.tokens.next.id)) {\n        tokens = destructuringPattern();\n        for (t in tokens) {\n          t = tokens[t];\n          if (t.id) {\n            paramsIds.push(t.id);\n            currentParams.push([t.id, t.token]);\n          }\n        }\n      } else {\n        if (checkPunctuator(state.tokens.next, \"...\")) pastRest = true;\n        ident = identifier(true);\n        if (ident) {\n          paramsIds.push(ident);\n          currentParams.push([ident, state.tokens.curr]);\n        } else {\n          while (!checkPunctuators(state.tokens.next, [\",\", \")\"])) advance();\n        }\n      }\n      if (pastDefault) {\n        if (state.tokens.next.id !== \"=\") {\n          error(\"W138\", state.tokens.current);\n        }\n      }\n      if (state.tokens.next.id === \"=\") {\n        if (!state.inES6()) {\n          warning(\"W119\", state.tokens.next, \"default parameters\", \"6\");\n        }\n        advance(\"=\");\n        pastDefault = true;\n        expression(10);\n      }\n      currentParams.forEach(addParam);\n\n      if (state.tokens.next.id === \",\") {\n        if (pastRest) {\n          warning(\"W131\", state.tokens.next);\n        }\n        comma();\n      } else {\n        advance(\")\", next);\n        return { arity: arity, params: paramsIds };\n      }\n    }\n  }\n\n  function functor(name, token, overwrites) {\n    var funct = {\n      \"(name)\"      : name,\n      \"(breakage)\"  : 0,\n      \"(loopage)\"   : 0,\n      \"(tokens)\"    : {},\n      \"(properties)\": {},\n\n      \"(catch)\"     : false,\n      \"(global)\"    : false,\n\n      \"(line)\"      : null,\n      \"(character)\" : null,\n      \"(metrics)\"   : null,\n      \"(statement)\" : null,\n      \"(context)\"   : null,\n      \"(scope)\"     : null,\n      \"(comparray)\" : null,\n      \"(generator)\" : null,\n      \"(arrow)\"     : null,\n      \"(params)\"    : null\n    };\n\n    if (token) {\n      _.extend(funct, {\n        \"(line)\"     : token.line,\n        \"(character)\": token.character,\n        \"(metrics)\"  : createMetrics(token)\n      });\n    }\n\n    _.extend(funct, overwrites);\n\n    if (funct[\"(context)\"]) {\n      funct[\"(scope)\"] = funct[\"(context)\"][\"(scope)\"];\n      funct[\"(comparray)\"]  = funct[\"(context)\"][\"(comparray)\"];\n    }\n\n    return funct;\n  }\n\n  function isFunctor(token) {\n    return \"(scope)\" in token;\n  }\n  function hasParsedCode(funct) {\n    return funct[\"(global)\"] && !funct[\"(verb)\"];\n  }\n\n  function doTemplateLiteral(left) {\n    var ctx = this.context;\n    var noSubst = this.noSubst;\n    var depth = this.depth;\n\n    if (!noSubst) {\n      while (!end()) {\n        if (!state.tokens.next.template || state.tokens.next.depth > depth) {\n          expression(0); // should probably have different rbp?\n        } else {\n          advance();\n        }\n      }\n    }\n\n    return {\n      id: \"(template)\",\n      type: \"(template)\",\n      tag: left\n    };\n\n    function end() {\n      if (state.tokens.curr.template && state.tokens.curr.tail &&\n          state.tokens.curr.context === ctx) return true;\n      var complete = (state.tokens.next.template && state.tokens.next.tail &&\n                      state.tokens.next.context === ctx);\n      if (complete) advance();\n      return complete || state.tokens.next.isUnclosed;\n    }\n  }\n  function doFunction(options) {\n    var f, token, name, statement, classExprBinding, isGenerator, isArrow, ignoreLoopFunc;\n    var oldOption = state.option;\n    var oldIgnored = state.ignored;\n\n    if (options) {\n      name = options.name;\n      statement = options.statement;\n      classExprBinding = options.classExprBinding;\n      isGenerator = options.type === \"generator\";\n      isArrow = options.type === \"arrow\";\n      ignoreLoopFunc = options.ignoreLoopFunc;\n    }\n\n    state.option = Object.create(state.option);\n    state.ignored = Object.create(state.ignored);\n\n    state.funct = functor(name || state.nameStack.infer(), state.tokens.next, {\n      \"(statement)\": statement,\n      \"(context)\":   state.funct,\n      \"(arrow)\":     isArrow,\n      \"(generator)\": isGenerator\n    });\n\n    f = state.funct;\n    token = state.tokens.curr;\n    token.funct = state.funct;\n\n    functions.push(state.funct);\n    state.funct[\"(scope)\"].stack(\"functionouter\");\n    var internallyAccessibleName = name || classExprBinding;\n    if (internallyAccessibleName) {\n      state.funct[\"(scope)\"].block.add(internallyAccessibleName,\n        classExprBinding ? \"class\" : \"function\", state.tokens.curr, false);\n    }\n    state.funct[\"(scope)\"].stack(\"functionparams\");\n\n    var paramsInfo = functionparams(options);\n\n    if (paramsInfo) {\n      state.funct[\"(params)\"] = paramsInfo.params;\n      state.funct[\"(metrics)\"].arity = paramsInfo.arity;\n      state.funct[\"(metrics)\"].verifyMaxParametersPerFunction();\n    } else {\n      state.funct[\"(metrics)\"].arity = 0;\n    }\n\n    if (isArrow) {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.curr, \"arrow function syntax (=>)\", \"6\");\n      }\n\n      if (!options.loneArg) {\n        advance(\"=>\");\n      }\n    }\n\n    block(false, true, true, isArrow);\n\n    if (!state.option.noyield && isGenerator &&\n        state.funct[\"(generator)\"] !== \"yielded\") {\n      warning(\"W124\", state.tokens.curr);\n    }\n\n    state.funct[\"(metrics)\"].verifyMaxStatementsPerFunction();\n    state.funct[\"(metrics)\"].verifyMaxComplexityPerFunction();\n    state.funct[\"(unusedOption)\"] = state.option.unused;\n    state.option = oldOption;\n    state.ignored = oldIgnored;\n    state.funct[\"(last)\"] = state.tokens.curr.line;\n    state.funct[\"(lastcharacter)\"] = state.tokens.curr.character;\n    state.funct[\"(scope)\"].unstack(); // also does usage and label checks\n    state.funct[\"(scope)\"].unstack();\n\n    state.funct = state.funct[\"(context)\"];\n\n    if (!ignoreLoopFunc && !state.option.loopfunc && state.funct[\"(loopage)\"]) {\n      if (f[\"(isCapturing)\"]) {\n        warning(\"W083\", token);\n      }\n    }\n\n    return f;\n  }\n\n  function createMetrics(functionStartToken) {\n    return {\n      statementCount: 0,\n      nestedBlockDepth: -1,\n      ComplexityCount: 1,\n      arity: 0,\n\n      verifyMaxStatementsPerFunction: function() {\n        if (state.option.maxstatements &&\n          this.statementCount > state.option.maxstatements) {\n          warning(\"W071\", functionStartToken, this.statementCount);\n        }\n      },\n\n      verifyMaxParametersPerFunction: function() {\n        if (_.isNumber(state.option.maxparams) &&\n          this.arity > state.option.maxparams) {\n          warning(\"W072\", functionStartToken, this.arity);\n        }\n      },\n\n      verifyMaxNestedBlockDepthPerFunction: function() {\n        if (state.option.maxdepth &&\n          this.nestedBlockDepth > 0 &&\n          this.nestedBlockDepth === state.option.maxdepth + 1) {\n          warning(\"W073\", null, this.nestedBlockDepth);\n        }\n      },\n\n      verifyMaxComplexityPerFunction: function() {\n        var max = state.option.maxcomplexity;\n        var cc = this.ComplexityCount;\n        if (max && cc > max) {\n          warning(\"W074\", functionStartToken, cc);\n        }\n      }\n    };\n  }\n\n  function increaseComplexityCount() {\n    state.funct[\"(metrics)\"].ComplexityCount += 1;\n  }\n\n  function checkCondAssignment(expr) {\n    var id, paren;\n    if (expr) {\n      id = expr.id;\n      paren = expr.paren;\n      if (id === \",\" && (expr = expr.exprs[expr.exprs.length - 1])) {\n        id = expr.id;\n        paren = paren || expr.paren;\n      }\n    }\n    switch (id) {\n    case \"=\":\n    case \"+=\":\n    case \"-=\":\n    case \"*=\":\n    case \"%=\":\n    case \"&=\":\n    case \"|=\":\n    case \"^=\":\n    case \"/=\":\n      if (!paren && !state.option.boss) {\n        warning(\"W084\");\n      }\n    }\n  }\n  function checkProperties(props) {\n    if (state.inES5()) {\n      for (var name in props) {\n        if (props[name] && props[name].setterToken && !props[name].getterToken) {\n          warning(\"W078\", props[name].setterToken);\n        }\n      }\n    }\n  }\n\n  function metaProperty(name, c) {\n    if (checkPunctuator(state.tokens.next, \".\")) {\n      var left = state.tokens.curr.id;\n      advance(\".\");\n      var id = identifier();\n      state.tokens.curr.isMetaProperty = true;\n      if (name !== id) {\n        error(\"E057\", state.tokens.prev, left, id);\n      } else {\n        c();\n      }\n      return state.tokens.curr;\n    }\n  }\n\n  (function(x) {\n    x.nud = function() {\n      var b, f, i, p, t, isGeneratorMethod = false, nextVal;\n      var props = Object.create(null); // All properties, including accessors\n\n      b = state.tokens.curr.line !== startLine(state.tokens.next);\n      if (b) {\n        indent += state.option.indent;\n        if (state.tokens.next.from === indent + state.option.indent) {\n          indent += state.option.indent;\n        }\n      }\n\n      var blocktype = lookupBlockType();\n      if (blocktype.isDestAssign) {\n        this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true });\n        return this;\n      }\n\n      for (;;) {\n        if (state.tokens.next.id === \"}\") {\n          break;\n        }\n\n        nextVal = state.tokens.next.value;\n        if (state.tokens.next.identifier &&\n            (peekIgnoreEOL().id === \",\" || peekIgnoreEOL().id === \"}\")) {\n          if (!state.inES6()) {\n            warning(\"W104\", state.tokens.next, \"object short notation\", \"6\");\n          }\n          i = propertyName(true);\n          saveProperty(props, i, state.tokens.next);\n\n          expression(10);\n\n        } else if (peek().id !== \":\" && (nextVal === \"get\" || nextVal === \"set\")) {\n          advance(nextVal);\n\n          if (!state.inES5()) {\n            error(\"E034\");\n          }\n\n          i = propertyName();\n          if (!i && !state.inES6()) {\n            error(\"E035\");\n          }\n          if (i) {\n            saveAccessor(nextVal, props, i, state.tokens.curr);\n          }\n\n          t = state.tokens.next;\n          f = doFunction();\n          p = f[\"(params)\"];\n          if (nextVal === \"get\" && i && p) {\n            warning(\"W076\", t, p[0], i);\n          } else if (nextVal === \"set\" && i && (!p || p.length !== 1)) {\n            warning(\"W077\", t, i);\n          }\n        } else {\n          if (state.tokens.next.value === \"*\" && state.tokens.next.type === \"(punctuator)\") {\n            if (!state.inES6()) {\n              warning(\"W104\", state.tokens.next, \"generator functions\", \"6\");\n            }\n            advance(\"*\");\n            isGeneratorMethod = true;\n          } else {\n            isGeneratorMethod = false;\n          }\n\n          if (state.tokens.next.id === \"[\") {\n            i = computedPropertyName();\n            state.nameStack.set(i);\n          } else {\n            state.nameStack.set(state.tokens.next);\n            i = propertyName();\n            saveProperty(props, i, state.tokens.next);\n\n            if (typeof i !== \"string\") {\n              break;\n            }\n          }\n\n          if (state.tokens.next.value === \"(\") {\n            if (!state.inES6()) {\n              warning(\"W104\", state.tokens.curr, \"concise methods\", \"6\");\n            }\n            doFunction({ type: isGeneratorMethod ? \"generator\" : null });\n          } else {\n            advance(\":\");\n            expression(10);\n          }\n        }\n\n        countMember(i);\n\n        if (state.tokens.next.id === \",\") {\n          comma({ allowTrailing: true, property: true });\n          if (state.tokens.next.id === \",\") {\n            warning(\"W070\", state.tokens.curr);\n          } else if (state.tokens.next.id === \"}\" && !state.inES5()) {\n            warning(\"W070\", state.tokens.curr);\n          }\n        } else {\n          break;\n        }\n      }\n      if (b) {\n        indent -= state.option.indent;\n      }\n      advance(\"}\", this);\n\n      checkProperties(props);\n\n      return this;\n    };\n    x.fud = function() {\n      error(\"E036\", state.tokens.curr);\n    };\n  }(delim(\"{\")));\n\n  function destructuringPattern(options) {\n    var isAssignment = options && options.assignment;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr,\n        isAssignment ? \"destructuring assignment\" : \"destructuring binding\", \"6\");\n    }\n\n    return destructuringPatternRecursive(options);\n  }\n\n  function destructuringPatternRecursive(options) {\n    var ids;\n    var identifiers = [];\n    var openingParsed = options && options.openingParsed;\n    var isAssignment = options && options.assignment;\n    var recursiveOptions = isAssignment ? { assignment: isAssignment } : null;\n    var firstToken = openingParsed ? state.tokens.curr : state.tokens.next;\n\n    var nextInnerDE = function() {\n      var ident;\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        ids = destructuringPatternRecursive(recursiveOptions);\n        for (var id in ids) {\n          id = ids[id];\n          identifiers.push({ id: id.id, token: id.token });\n        }\n      } else if (checkPunctuator(state.tokens.next, \",\")) {\n        identifiers.push({ id: null, token: state.tokens.curr });\n      } else if (checkPunctuator(state.tokens.next, \"(\")) {\n        advance(\"(\");\n        nextInnerDE();\n        advance(\")\");\n      } else {\n        var is_rest = checkPunctuator(state.tokens.next, \"...\");\n\n        if (isAssignment) {\n          var identifierToken = is_rest ? peek(0) : state.tokens.next;\n          if (!identifierToken.identifier) {\n            warning(\"E030\", identifierToken, identifierToken.value);\n          }\n          var assignTarget = expression(155);\n          if (assignTarget) {\n            checkLeftSideAssign(assignTarget);\n            if (assignTarget.identifier) {\n              ident = assignTarget.value;\n            }\n          }\n        } else {\n          ident = identifier();\n        }\n        if (ident) {\n          identifiers.push({ id: ident, token: state.tokens.curr });\n        }\n        return is_rest;\n      }\n      return false;\n    };\n    var assignmentProperty = function() {\n      var id;\n      if (checkPunctuator(state.tokens.next, \"[\")) {\n        advance(\"[\");\n        expression(10);\n        advance(\"]\");\n        advance(\":\");\n        nextInnerDE();\n      } else if (state.tokens.next.id === \"(string)\" ||\n                 state.tokens.next.id === \"(number)\") {\n        advance();\n        advance(\":\");\n        nextInnerDE();\n      } else {\n        id = identifier();\n        if (checkPunctuator(state.tokens.next, \":\")) {\n          advance(\":\");\n          nextInnerDE();\n        } else if (id) {\n          if (isAssignment) {\n            checkLeftSideAssign(state.tokens.curr);\n          }\n          identifiers.push({ id: id, token: state.tokens.curr });\n        }\n      }\n    };\n    if (checkPunctuator(firstToken, \"[\")) {\n      if (!openingParsed) {\n        advance(\"[\");\n      }\n      if (checkPunctuator(state.tokens.next, \"]\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      var element_after_rest = false;\n      while (!checkPunctuator(state.tokens.next, \"]\")) {\n        if (nextInnerDE() && !element_after_rest &&\n            checkPunctuator(state.tokens.next, \",\")) {\n          warning(\"W130\", state.tokens.next);\n          element_after_rest = true;\n        }\n        if (checkPunctuator(state.tokens.next, \"=\")) {\n          if (checkPunctuator(state.tokens.prev, \"...\")) {\n            advance(\"]\");\n          } else {\n            advance(\"=\");\n          }\n          if (state.tokens.next.id === \"undefined\") {\n            warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n          }\n          expression(10);\n        }\n        if (!checkPunctuator(state.tokens.next, \"]\")) {\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    } else if (checkPunctuator(firstToken, \"{\")) {\n\n      if (!openingParsed) {\n        advance(\"{\");\n      }\n      if (checkPunctuator(state.tokens.next, \"}\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      while (!checkPunctuator(state.tokens.next, \"}\")) {\n        assignmentProperty();\n        if (checkPunctuator(state.tokens.next, \"=\")) {\n          advance(\"=\");\n          if (state.tokens.next.id === \"undefined\") {\n            warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n          }\n          expression(10);\n        }\n        if (!checkPunctuator(state.tokens.next, \"}\")) {\n          advance(\",\");\n          if (checkPunctuator(state.tokens.next, \"}\")) {\n            break;\n          }\n        }\n      }\n      advance(\"}\");\n    }\n    return identifiers;\n  }\n\n  function destructuringPatternMatch(tokens, value) {\n    var first = value.first;\n\n    if (!first)\n      return;\n\n    _.zip(tokens, Array.isArray(first) ? first : [ first ]).forEach(function(val) {\n      var token = val[0];\n      var value = val[1];\n\n      if (token && value)\n        token.first = value;\n      else if (token && token.first && !value)\n        warning(\"W080\", token.first, token.first.value);\n    });\n  }\n\n  function blockVariableStatement(type, statement, context) {\n\n    var prefix = context && context.prefix;\n    var inexport = context && context.inexport;\n    var isLet = type === \"let\";\n    var isConst = type === \"const\";\n    var tokens, lone, value, letblock;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, type, \"6\");\n    }\n\n    if (isLet && state.tokens.next.value === \"(\") {\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.next, \"let block\");\n      }\n      advance(\"(\");\n      state.funct[\"(scope)\"].stack();\n      letblock = true;\n    } else if (state.funct[\"(noblockscopedvar)\"]) {\n      error(\"E048\", state.tokens.curr, isConst ? \"Const\" : \"Let\");\n    }\n\n    statement.first = [];\n    for (;;) {\n      var names = [];\n      if (_.contains([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern();\n        lone = false;\n      } else {\n        tokens = [ { id: identifier(), token: state.tokens.curr } ];\n        lone = true;\n      }\n\n      if (!prefix && isConst && state.tokens.next.id !== \"=\") {\n        warning(\"E012\", state.tokens.curr, state.tokens.curr.value);\n      }\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (state.funct[\"(scope)\"].block.isGlobal()) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            }\n          }\n          if (t.id && !state.funct[\"(noblockscopedvar)\"]) {\n            state.funct[\"(scope)\"].addlabel(t.id, {\n              type: type,\n              token: t.token });\n            names.push(t.token);\n\n            if (lone && inexport) {\n              state.funct[\"(scope)\"].setExported(t.token.value, t.token);\n            }\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        advance(\"=\");\n        if (!prefix && state.tokens.next.id === \"undefined\") {\n          warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n        }\n        if (!prefix && peek(0).id === \"=\" && state.tokens.next.identifier) {\n          warning(\"W120\", state.tokens.next, state.tokens.next.value);\n        }\n        value = expression(prefix ? 120 : 10);\n        if (lone) {\n          tokens[0].first = value;\n        } else {\n          destructuringPatternMatch(names, value);\n        }\n      }\n\n      statement.first = statement.first.concat(names);\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n      comma();\n    }\n    if (letblock) {\n      advance(\")\");\n      block(true, true);\n      statement.block = true;\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    return statement;\n  }\n\n  var conststatement = stmt(\"const\", function(context) {\n    return blockVariableStatement(\"const\", this, context);\n  });\n  conststatement.exps = true;\n\n  var letstatement = stmt(\"let\", function(context) {\n    return blockVariableStatement(\"let\", this, context);\n  });\n  letstatement.exps = true;\n\n  var varstatement = stmt(\"var\", function(context) {\n    var prefix = context && context.prefix;\n    var inexport = context && context.inexport;\n    var tokens, lone, value;\n    var implied = context && context.implied;\n    var report = !(context && context.ignore);\n\n    this.first = [];\n    for (;;) {\n      var names = [];\n      if (_.contains([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern();\n        lone = false;\n      } else {\n        tokens = [ { id: identifier(), token: state.tokens.curr } ];\n        lone = true;\n      }\n\n      if (!(prefix && implied) && report && state.option.varstmt) {\n        warning(\"W132\", this);\n      }\n\n      this.first = this.first.concat(names);\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (!implied && state.funct[\"(global)\"]) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            } else if (state.option.futurehostile === false) {\n              if ((!state.inES5() && vars.ecmaIdentifiers[5][t.id] === false) ||\n                (!state.inES6() && vars.ecmaIdentifiers[6][t.id] === false)) {\n                warning(\"W129\", t.token, t.id);\n              }\n            }\n          }\n          if (t.id) {\n            if (implied === \"for\") {\n\n              if (!state.funct[\"(scope)\"].has(t.id)) {\n                if (report) warning(\"W088\", t.token, t.id);\n              }\n              state.funct[\"(scope)\"].block.use(t.id, t.token);\n            } else {\n              state.funct[\"(scope)\"].addlabel(t.id, {\n                type: \"var\",\n                token: t.token });\n\n              if (lone && inexport) {\n                state.funct[\"(scope)\"].setExported(t.id, t.token);\n              }\n            }\n            names.push(t.token);\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        state.nameStack.set(state.tokens.curr);\n\n        advance(\"=\");\n        if (!prefix && report && !state.funct[\"(loopage)\"] &&\n          state.tokens.next.id === \"undefined\") {\n          warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n        }\n        if (peek(0).id === \"=\" && state.tokens.next.identifier) {\n          if (!prefix && report &&\n              !state.funct[\"(params)\"] ||\n              state.funct[\"(params)\"].indexOf(state.tokens.next.value) === -1) {\n            warning(\"W120\", state.tokens.next, state.tokens.next.value);\n          }\n        }\n        value = expression(prefix ? 120 : 10);\n        if (lone) {\n          tokens[0].first = value;\n        } else {\n          destructuringPatternMatch(names, value);\n        }\n      }\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n      comma();\n    }\n\n    return this;\n  });\n  varstatement.exps = true;\n\n  blockstmt(\"class\", function() {\n    return classdef.call(this, true);\n  });\n\n  function classdef(isStatement) {\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"class\", \"6\");\n    }\n    if (isStatement) {\n      this.name = identifier();\n\n      state.funct[\"(scope)\"].addlabel(this.name, {\n        type: \"class\",\n        token: state.tokens.curr });\n    } else if (state.tokens.next.identifier && state.tokens.next.value !== \"extends\") {\n      this.name = identifier();\n      this.namedExpr = true;\n    } else {\n      this.name = state.nameStack.infer();\n    }\n    classtail(this);\n    return this;\n  }\n\n  function classtail(c) {\n    var wasInClassBody = state.inClassBody;\n    if (state.tokens.next.value === \"extends\") {\n      advance(\"extends\");\n      c.heritage = expression(10);\n    }\n\n    state.inClassBody = true;\n    advance(\"{\");\n    c.body = classbody(c);\n    advance(\"}\");\n    state.inClassBody = wasInClassBody;\n  }\n\n  function classbody(c) {\n    var name;\n    var isStatic;\n    var isGenerator;\n    var getset;\n    var props = Object.create(null);\n    var staticProps = Object.create(null);\n    var computed;\n    for (var i = 0; state.tokens.next.id !== \"}\"; ++i) {\n      name = state.tokens.next;\n      isStatic = false;\n      isGenerator = false;\n      getset = null;\n      if (name.id === \";\") {\n        warning(\"W032\");\n        advance(\";\");\n        continue;\n      }\n\n      if (name.id === \"*\") {\n        isGenerator = true;\n        advance(\"*\");\n        name = state.tokens.next;\n      }\n      if (name.id === \"[\") {\n        name = computedPropertyName();\n        computed = true;\n      } else if (isPropertyName(name)) {\n        advance();\n        computed = false;\n        if (name.identifier && name.value === \"static\") {\n          if (checkPunctuator(state.tokens.next, \"*\")) {\n            isGenerator = true;\n            advance(\"*\");\n          }\n          if (isPropertyName(state.tokens.next) || state.tokens.next.id === \"[\") {\n            computed = state.tokens.next.id === \"[\";\n            isStatic = true;\n            name = state.tokens.next;\n            if (state.tokens.next.id === \"[\") {\n              name = computedPropertyName();\n            } else advance();\n          }\n        }\n\n        if (name.identifier && (name.value === \"get\" || name.value === \"set\")) {\n          if (isPropertyName(state.tokens.next) || state.tokens.next.id === \"[\") {\n            computed = state.tokens.next.id === \"[\";\n            getset = name;\n            name = state.tokens.next;\n            if (state.tokens.next.id === \"[\") {\n              name = computedPropertyName();\n            } else advance();\n          }\n        }\n      } else {\n        warning(\"W052\", state.tokens.next, state.tokens.next.value || state.tokens.next.type);\n        advance();\n        continue;\n      }\n\n      if (!checkPunctuator(state.tokens.next, \"(\")) {\n        error(\"E054\", state.tokens.next, state.tokens.next.value);\n        while (state.tokens.next.id !== \"}\" &&\n               !checkPunctuator(state.tokens.next, \"(\")) {\n          advance();\n        }\n        if (state.tokens.next.value !== \"(\") {\n          doFunction({ statement: c });\n        }\n      }\n\n      if (!computed) {\n        if (getset) {\n          saveAccessor(\n            getset.value, isStatic ? staticProps : props, name.value, name, true, isStatic);\n        } else {\n          if (name.value === \"constructor\") {\n            state.nameStack.set(c);\n          } else {\n            state.nameStack.set(name);\n          }\n          saveProperty(isStatic ? staticProps : props, name.value, name, true, isStatic);\n        }\n      }\n\n      if (getset && name.value === \"constructor\") {\n        var propDesc = getset.value === \"get\" ? \"class getter method\" : \"class setter method\";\n        error(\"E049\", name, propDesc, \"constructor\");\n      } else if (name.value === \"prototype\") {\n        error(\"E049\", name, \"class method\", \"prototype\");\n      }\n\n      propertyName(name);\n\n      doFunction({\n        statement: c,\n        type: isGenerator ? \"generator\" : null,\n        classExprBinding: c.namedExpr ? c.name : null\n      });\n    }\n\n    checkProperties(props);\n  }\n\n  blockstmt(\"function\", function(context) {\n    var inexport = context && context.inexport;\n    var generator = false;\n    if (state.tokens.next.value === \"*\") {\n      advance(\"*\");\n      if (state.inES6({ strict: true })) {\n        generator = true;\n      } else {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n    }\n    if (inblock) {\n      warning(\"W082\", state.tokens.curr);\n    }\n    var i = optionalidentifier();\n\n    state.funct[\"(scope)\"].addlabel(i, {\n      type: \"function\",\n      token: state.tokens.curr });\n\n    if (i === undefined) {\n      warning(\"W025\");\n    } else if (inexport) {\n      state.funct[\"(scope)\"].setExported(i, state.tokens.prev);\n    }\n\n    doFunction({\n      name: i,\n      statement: this,\n      type: generator ? \"generator\" : null,\n      ignoreLoopFunc: inblock // a declaration may already have warned\n    });\n    if (state.tokens.next.id === \"(\" && state.tokens.next.line === state.tokens.curr.line) {\n      error(\"E039\");\n    }\n    return this;\n  });\n\n  prefix(\"function\", function() {\n    var generator = false;\n\n    if (state.tokens.next.value === \"*\") {\n      if (!state.inES6()) {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n      advance(\"*\");\n      generator = true;\n    }\n\n    var i = optionalidentifier();\n    doFunction({ name: i, type: generator ? \"generator\" : null });\n    return this;\n  });\n\n  blockstmt(\"if\", function() {\n    var t = state.tokens.next;\n    increaseComplexityCount();\n    state.condition = true;\n    advance(\"(\");\n    var expr = expression(0);\n    checkCondAssignment(expr);\n    var forinifcheck = null;\n    if (state.option.forin && state.forinifcheckneeded) {\n      state.forinifcheckneeded = false; // We only need to analyze the first if inside the loop\n      forinifcheck = state.forinifchecks[state.forinifchecks.length - 1];\n      if (expr.type === \"(punctuator)\" && expr.value === \"!\") {\n        forinifcheck.type = \"(negative)\";\n      } else {\n        forinifcheck.type = \"(positive)\";\n      }\n    }\n\n    advance(\")\", t);\n    state.condition = false;\n    var s = block(true, true);\n    if (forinifcheck && forinifcheck.type === \"(negative)\") {\n      if (s && s[0] && s[0].type === \"(identifier)\" && s[0].value === \"continue\") {\n        forinifcheck.type = \"(negative-with-continue)\";\n      }\n    }\n\n    if (state.tokens.next.id === \"else\") {\n      advance(\"else\");\n      if (state.tokens.next.id === \"if\" || state.tokens.next.id === \"switch\") {\n        statement();\n      } else {\n        block(true, true);\n      }\n    }\n    return this;\n  });\n\n  blockstmt(\"try\", function() {\n    var b;\n\n    function doCatch() {\n      advance(\"catch\");\n      advance(\"(\");\n\n      state.funct[\"(scope)\"].stack(\"catchparams\");\n\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        var tokens = destructuringPattern();\n        _.each(tokens, function(token) {\n          if (token.id) {\n            state.funct[\"(scope)\"].addParam(token.id, token, \"exception\");\n          }\n        });\n      } else if (state.tokens.next.type !== \"(identifier)\") {\n        warning(\"E030\", state.tokens.next, state.tokens.next.value);\n      } else {\n        state.funct[\"(scope)\"].addParam(identifier(), state.tokens.curr, \"exception\");\n      }\n\n      if (state.tokens.next.value === \"if\") {\n        if (!state.inMoz()) {\n          warning(\"W118\", state.tokens.curr, \"catch filter\");\n        }\n        advance(\"if\");\n        expression(0);\n      }\n\n      advance(\")\");\n\n      block(false);\n\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    block(true);\n\n    while (state.tokens.next.id === \"catch\") {\n      increaseComplexityCount();\n      if (b && (!state.inMoz())) {\n        warning(\"W118\", state.tokens.next, \"multiple catch blocks\");\n      }\n      doCatch();\n      b = true;\n    }\n\n    if (state.tokens.next.id === \"finally\") {\n      advance(\"finally\");\n      block(true);\n      return;\n    }\n\n    if (!b) {\n      error(\"E021\", state.tokens.next, \"catch\", state.tokens.next.value);\n    }\n\n    return this;\n  });\n\n  blockstmt(\"while\", function() {\n    var t = state.tokens.next;\n    state.funct[\"(breakage)\"] += 1;\n    state.funct[\"(loopage)\"] += 1;\n    increaseComplexityCount();\n    advance(\"(\");\n    checkCondAssignment(expression(0));\n    advance(\")\", t);\n    block(true, true);\n    state.funct[\"(breakage)\"] -= 1;\n    state.funct[\"(loopage)\"] -= 1;\n    return this;\n  }).labelled = true;\n\n  blockstmt(\"with\", function() {\n    var t = state.tokens.next;\n    if (state.isStrict()) {\n      error(\"E010\", state.tokens.curr);\n    } else if (!state.option.withstmt) {\n      warning(\"W085\", state.tokens.curr);\n    }\n\n    advance(\"(\");\n    expression(0);\n    advance(\")\", t);\n    block(true, true);\n\n    return this;\n  });\n\n  blockstmt(\"switch\", function() {\n    var t = state.tokens.next;\n    var g = false;\n    var noindent = false;\n\n    state.funct[\"(breakage)\"] += 1;\n    advance(\"(\");\n    checkCondAssignment(expression(0));\n    advance(\")\", t);\n    t = state.tokens.next;\n    advance(\"{\");\n\n    if (state.tokens.next.from === indent)\n      noindent = true;\n\n    if (!noindent)\n      indent += state.option.indent;\n\n    this.cases = [];\n\n    for (;;) {\n      switch (state.tokens.next.id) {\n      case \"case\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"case\":\n        case \"continue\":\n        case \"return\":\n        case \"switch\":\n        case \"throw\":\n          break;\n        default:\n          if (!state.tokens.curr.caseFallsThrough) {\n            warning(\"W086\", state.tokens.curr, \"case\");\n          }\n        }\n\n        advance(\"case\");\n        this.cases.push(expression(0));\n        increaseComplexityCount();\n        g = true;\n        advance(\":\");\n        state.funct[\"(verb)\"] = \"case\";\n        break;\n      case \"default\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"continue\":\n        case \"return\":\n        case \"throw\":\n          break;\n        default:\n          if (this.cases.length) {\n            if (!state.tokens.curr.caseFallsThrough) {\n              warning(\"W086\", state.tokens.curr, \"default\");\n            }\n          }\n        }\n\n        advance(\"default\");\n        g = true;\n        advance(\":\");\n        break;\n      case \"}\":\n        if (!noindent)\n          indent -= state.option.indent;\n\n        advance(\"}\", t);\n        state.funct[\"(breakage)\"] -= 1;\n        state.funct[\"(verb)\"] = undefined;\n        return;\n      case \"(end)\":\n        error(\"E023\", state.tokens.next, \"}\");\n        return;\n      default:\n        indent += state.option.indent;\n        if (g) {\n          switch (state.tokens.curr.id) {\n          case \",\":\n            error(\"E040\");\n            return;\n          case \":\":\n            g = false;\n            statements();\n            break;\n          default:\n            error(\"E025\", state.tokens.curr);\n            return;\n          }\n        } else {\n          if (state.tokens.curr.id === \":\") {\n            advance(\":\");\n            error(\"E024\", state.tokens.curr, \":\");\n            statements();\n          } else {\n            error(\"E021\", state.tokens.next, \"case\", state.tokens.next.value);\n            return;\n          }\n        }\n        indent -= state.option.indent;\n      }\n    }\n    return this;\n  }).labelled = true;\n\n  stmt(\"debugger\", function() {\n    if (!state.option.debug) {\n      warning(\"W087\", this);\n    }\n    return this;\n  }).exps = true;\n\n  (function() {\n    var x = stmt(\"do\", function() {\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n      increaseComplexityCount();\n\n      this.first = block(true, true);\n      advance(\"while\");\n      var t = state.tokens.next;\n      advance(\"(\");\n      checkCondAssignment(expression(0));\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n      return this;\n    });\n    x.labelled = true;\n    x.exps = true;\n  }());\n\n  blockstmt(\"for\", function() {\n    var s, t = state.tokens.next;\n    var letscope = false;\n    var foreachtok = null;\n\n    if (t.value === \"each\") {\n      foreachtok = t;\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n\n    increaseComplexityCount();\n    advance(\"(\");\n    var nextop; // contains the token of the \"in\" or \"of\" operator\n    var i = 0;\n    var inof = [\"in\", \"of\"];\n    var level = 0; // BindingPattern \"level\" --- level 0 === no BindingPattern\n    var comma; // First comma punctuator at level 0\n    var initializer; // First initializer at level 0\n    if (checkPunctuators(state.tokens.next, [\"{\", \"[\"])) ++level;\n    do {\n      nextop = peek(i);\n      ++i;\n      if (checkPunctuators(nextop, [\"{\", \"[\"])) ++level;\n      else if (checkPunctuators(nextop, [\"}\", \"]\"])) --level;\n      if (level < 0) break;\n      if (level === 0) {\n        if (!comma && checkPunctuator(nextop, \",\")) comma = nextop;\n        else if (!initializer && checkPunctuator(nextop, \"=\")) initializer = nextop;\n      }\n    } while (level > 0 || !_.contains(inof, nextop.value) && nextop.value !== \";\" &&\n    nextop.type !== \"(end)\"); // Is this a JSCS bug? This looks really weird.\n    if (_.contains(inof, nextop.value)) {\n      if (!state.inES6() && nextop.value === \"of\") {\n        warning(\"W104\", nextop, \"for of\", \"6\");\n      }\n\n      var ok = !(initializer || comma);\n      if (initializer) {\n        error(\"W133\", comma, nextop.value, \"initializer is forbidden\");\n      }\n\n      if (comma) {\n        error(\"W133\", comma, nextop.value, \"more than one ForBinding\");\n      }\n\n      if (state.tokens.next.id === \"var\") {\n        advance(\"var\");\n        state.tokens.curr.fud({ prefix: true });\n      } else if (state.tokens.next.id === \"let\" || state.tokens.next.id === \"const\") {\n        advance(state.tokens.next.id);\n        letscope = true;\n        state.funct[\"(scope)\"].stack();\n        state.tokens.curr.fud({ prefix: true });\n      } else {\n        Object.create(varstatement).fud({ prefix: true, implied: \"for\", ignore: !ok });\n      }\n      advance(nextop.value);\n      expression(20);\n      advance(\")\", t);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        state.forinifcheckneeded = true;\n\n        if (state.forinifchecks === undefined) {\n          state.forinifchecks = [];\n        }\n        state.forinifchecks.push({\n          type: \"(none)\"\n        });\n      }\n\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n\n      s = block(true, true);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        if (state.forinifchecks && state.forinifchecks.length > 0) {\n          var check = state.forinifchecks.pop();\n\n          if (// No if statement or not the first statement in loop body\n              s && s.length > 0 && (typeof s[0] !== \"object\" || s[0].value !== \"if\") ||\n              check.type === \"(positive)\" && s.length > 1 ||\n              check.type === \"(negative)\") {\n            warning(\"W089\", this);\n          }\n        }\n        state.forinifcheckneeded = false;\n      }\n\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n    } else {\n      if (foreachtok) {\n        error(\"E045\", foreachtok);\n      }\n      if (state.tokens.next.id !== \";\") {\n        if (state.tokens.next.id === \"var\") {\n          advance(\"var\");\n          state.tokens.curr.fud();\n        } else if (state.tokens.next.id === \"let\") {\n          advance(\"let\");\n          letscope = true;\n          state.funct[\"(scope)\"].stack();\n          state.tokens.curr.fud();\n        } else {\n          for (;;) {\n            expression(0, \"for\");\n            if (state.tokens.next.id !== \",\") {\n              break;\n            }\n            comma();\n          }\n        }\n      }\n      nolinebreak(state.tokens.curr);\n      advance(\";\");\n      state.funct[\"(loopage)\"] += 1;\n      if (state.tokens.next.id !== \";\") {\n        checkCondAssignment(expression(0));\n      }\n      nolinebreak(state.tokens.curr);\n      advance(\";\");\n      if (state.tokens.next.id === \";\") {\n        error(\"E021\", state.tokens.next, \")\", \";\");\n      }\n      if (state.tokens.next.id !== \")\") {\n        for (;;) {\n          expression(0, \"for\");\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          comma();\n        }\n      }\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] += 1;\n      block(true, true);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n\n    }\n    if (letscope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return this;\n  }).labelled = true;\n\n\n  stmt(\"break\", function() {\n    var v = state.tokens.next.value;\n\n    if (!state.option.asi)\n      nolinebreak(this);\n\n    if (state.tokens.next.id !== \";\" && !state.tokens.next.reach &&\n        state.tokens.curr.line === startLine(state.tokens.next)) {\n      if (!state.funct[\"(scope)\"].funct.hasBreakLabel(v)) {\n        warning(\"W090\", state.tokens.next, v);\n      }\n      this.first = state.tokens.next;\n      advance();\n    } else {\n      if (state.funct[\"(breakage)\"] === 0)\n        warning(\"W052\", state.tokens.next, this.value);\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"continue\", function() {\n    var v = state.tokens.next.value;\n\n    if (state.funct[\"(breakage)\"] === 0)\n      warning(\"W052\", state.tokens.next, this.value);\n    if (!state.funct[\"(loopage)\"])\n      warning(\"W052\", state.tokens.next, this.value);\n\n    if (!state.option.asi)\n      nolinebreak(this);\n\n    if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n      if (state.tokens.curr.line === startLine(state.tokens.next)) {\n        if (!state.funct[\"(scope)\"].funct.hasBreakLabel(v)) {\n          warning(\"W090\", state.tokens.next, v);\n        }\n        this.first = state.tokens.next;\n        advance();\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"return\", function() {\n    if (this.line === startLine(state.tokens.next)) {\n      if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n        this.first = expression(0);\n\n        if (this.first &&\n            this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warningAt(\"W093\", this.first.line, this.first.character);\n        }\n      }\n    } else {\n      if (state.tokens.next.type === \"(punctuator)\" &&\n        [\"[\", \"{\", \"+\", \"-\"].indexOf(state.tokens.next.value) > -1) {\n        nolinebreak(this); // always warn (Line breaking error)\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  (function(x) {\n    x.exps = true;\n    x.lbp = 25;\n  }(prefix(\"yield\", function() {\n    var prev = state.tokens.prev;\n    if (state.inES6(true) && !state.funct[\"(generator)\"]) {\n      if (!(\"(catch)\" === state.funct[\"(name)\"] && state.funct[\"(context)\"][\"(generator)\"])) {\n        error(\"E046\", state.tokens.curr, \"yield\");\n      }\n    } else if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"yield\", \"6\");\n    }\n    state.funct[\"(generator)\"] = \"yielded\";\n    var delegatingYield = false;\n\n    if (state.tokens.next.value === \"*\") {\n      delegatingYield = true;\n      advance(\"*\");\n    }\n\n    if (this.line === startLine(state.tokens.next) || !state.inMoz()) {\n      if (delegatingYield ||\n          (state.tokens.next.id !== \";\" && !state.option.asi &&\n           !state.tokens.next.reach && state.tokens.next.nud)) {\n\n        nobreaknonadjacent(state.tokens.curr, state.tokens.next);\n        this.first = expression(10);\n\n        if (this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warningAt(\"W093\", this.first.line, this.first.character);\n        }\n      }\n\n      if (state.inMoz() && state.tokens.next.id !== \")\" &&\n          (prev.lbp > 30 || (!prev.assign && !isEndOfExpr()) || prev.id === \"yield\")) {\n        error(\"E050\", this);\n      }\n    } else if (!state.option.asi) {\n      nolinebreak(this); // always warn (Line breaking error)\n    }\n    return this;\n  })));\n\n\n  stmt(\"throw\", function() {\n    nolinebreak(this);\n    this.first = expression(20);\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  stmt(\"import\", function() {\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"import\", \"6\");\n    }\n\n    if (state.tokens.next.type === \"(string)\") {\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.identifier) {\n      this.name = identifier();\n      state.funct[\"(scope)\"].addlabel(this.name, {\n        type: \"const\",\n        token: state.tokens.curr });\n\n      if (state.tokens.next.value === \",\") {\n        advance(\",\");\n      } else {\n        advance(\"from\");\n        advance(\"(string)\");\n        return this;\n      }\n    }\n\n    if (state.tokens.next.id === \"*\") {\n      advance(\"*\");\n      advance(\"as\");\n      if (state.tokens.next.identifier) {\n        this.name = identifier();\n        state.funct[\"(scope)\"].addlabel(this.name, {\n          type: \"const\",\n          token: state.tokens.curr });\n      }\n    } else {\n      advance(\"{\");\n      for (;;) {\n        if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        }\n        var importName;\n        if (state.tokens.next.type === \"default\") {\n          importName = \"default\";\n          advance(\"default\");\n        } else {\n          importName = identifier();\n        }\n        if (state.tokens.next.value === \"as\") {\n          advance(\"as\");\n          importName = identifier();\n        }\n        state.funct[\"(scope)\"].addlabel(importName, {\n          type: \"const\",\n          token: state.tokens.curr });\n\n        if (state.tokens.next.value === \",\") {\n          advance(\",\");\n        } else if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        } else {\n          error(\"E024\", state.tokens.next, state.tokens.next.value);\n          break;\n        }\n      }\n    }\n    advance(\"from\");\n    advance(\"(string)\");\n    return this;\n  }).exps = true;\n\n  stmt(\"export\", function() {\n    var ok = true;\n    var token;\n    var identifier;\n\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"export\", \"6\");\n      ok = false;\n    }\n\n    if (!state.funct[\"(scope)\"].block.isGlobal()) {\n      error(\"E053\", state.tokens.curr);\n      ok = false;\n    }\n\n    if (state.tokens.next.value === \"*\") {\n      advance(\"*\");\n      advance(\"from\");\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.type === \"default\") {\n      state.nameStack.set(state.tokens.next);\n      advance(\"default\");\n      var exportType = state.tokens.next.id;\n      if (exportType === \"function\" || exportType === \"class\") {\n        this.block = true;\n      }\n\n      token = peek();\n\n      expression(10);\n\n      identifier = token.value;\n\n      if (this.block) {\n        state.funct[\"(scope)\"].addlabel(identifier, {\n          type: exportType,\n          token: token });\n\n        state.funct[\"(scope)\"].setExported(identifier, token);\n      }\n\n      return this;\n    }\n\n    if (state.tokens.next.value === \"{\") {\n      advance(\"{\");\n      var exportedTokens = [];\n      for (;;) {\n        if (!state.tokens.next.identifier) {\n          error(\"E030\", state.tokens.next, state.tokens.next.value);\n        }\n        advance();\n\n        exportedTokens.push(state.tokens.curr);\n\n        if (state.tokens.next.value === \"as\") {\n          advance(\"as\");\n          if (!state.tokens.next.identifier) {\n            error(\"E030\", state.tokens.next, state.tokens.next.value);\n          }\n          advance();\n        }\n\n        if (state.tokens.next.value === \",\") {\n          advance(\",\");\n        } else if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        } else {\n          error(\"E024\", state.tokens.next, state.tokens.next.value);\n          break;\n        }\n      }\n      if (state.tokens.next.value === \"from\") {\n        advance(\"from\");\n        advance(\"(string)\");\n      } else if (ok) {\n        exportedTokens.forEach(function(token) {\n          state.funct[\"(scope)\"].setExported(token.value, token);\n        });\n      }\n      return this;\n    }\n\n    if (state.tokens.next.id === \"var\") {\n      advance(\"var\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"let\") {\n      advance(\"let\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"const\") {\n      advance(\"const\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"function\") {\n      this.block = true;\n      advance(\"function\");\n      state.syntax[\"function\"].fud({ inexport:true });\n    } else if (state.tokens.next.id === \"class\") {\n      this.block = true;\n      advance(\"class\");\n      var classNameToken = state.tokens.next;\n      state.syntax[\"class\"].fud();\n      state.funct[\"(scope)\"].setExported(classNameToken.value, classNameToken);\n    } else {\n      error(\"E024\", state.tokens.next, state.tokens.next.value);\n    }\n\n    return this;\n  }).exps = true;\n\n  FutureReservedWord(\"abstract\");\n  FutureReservedWord(\"boolean\");\n  FutureReservedWord(\"byte\");\n  FutureReservedWord(\"char\");\n  FutureReservedWord(\"class\", { es5: true, nud: classdef });\n  FutureReservedWord(\"double\");\n  FutureReservedWord(\"enum\", { es5: true });\n  FutureReservedWord(\"export\", { es5: true });\n  FutureReservedWord(\"extends\", { es5: true });\n  FutureReservedWord(\"final\");\n  FutureReservedWord(\"float\");\n  FutureReservedWord(\"goto\");\n  FutureReservedWord(\"implements\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"import\", { es5: true });\n  FutureReservedWord(\"int\");\n  FutureReservedWord(\"interface\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"long\");\n  FutureReservedWord(\"native\");\n  FutureReservedWord(\"package\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"private\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"protected\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"public\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"short\");\n  FutureReservedWord(\"static\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"super\", { es5: true });\n  FutureReservedWord(\"synchronized\");\n  FutureReservedWord(\"transient\");\n  FutureReservedWord(\"volatile\");\n\n  var lookupBlockType = function() {\n    var pn, pn1, prev;\n    var i = -1;\n    var bracketStack = 0;\n    var ret = {};\n    if (checkPunctuators(state.tokens.curr, [\"[\", \"{\"])) {\n      bracketStack += 1;\n    }\n    do {\n      prev = i === -1 ? state.tokens.curr : pn;\n      pn = i === -1 ? state.tokens.next : peek(i);\n      pn1 = peek(i + 1);\n      i = i + 1;\n      if (checkPunctuators(pn, [\"[\", \"{\"])) {\n        bracketStack += 1;\n      } else if (checkPunctuators(pn, [\"]\", \"}\"])) {\n        bracketStack -= 1;\n      }\n      if (bracketStack === 1 && pn.identifier && pn.value === \"for\" &&\n          !checkPunctuator(prev, \".\")) {\n        ret.isCompArray = true;\n        ret.notJson = true;\n        break;\n      }\n      if (bracketStack === 0 && checkPunctuators(pn, [\"}\", \"]\"])) {\n        if (pn1.value === \"=\") {\n          ret.isDestAssign = true;\n          ret.notJson = true;\n          break;\n        } else if (pn1.value === \".\") {\n          ret.notJson = true;\n          break;\n        }\n      }\n      if (checkPunctuator(pn, \";\")) {\n        ret.isBlock = true;\n        ret.notJson = true;\n      }\n    } while (bracketStack > 0 && pn.id !== \"(end)\");\n    return ret;\n  };\n\n  function saveProperty(props, name, tkn, isClass, isStatic) {\n    var msg = [\"key\", \"class method\", \"static class method\"];\n    msg = msg[(isClass || false) + (isStatic || false)];\n    if (tkn.identifier) {\n      name = tkn.value;\n    }\n\n    if (props[name] && name !== \"__proto__\") {\n      warning(\"W075\", state.tokens.next, msg, name);\n    } else {\n      props[name] = Object.create(null);\n    }\n\n    props[name].basic = true;\n    props[name].basictkn = tkn;\n  }\n  function saveAccessor(accessorType, props, name, tkn, isClass, isStatic) {\n    var flagName = accessorType === \"get\" ? \"getterToken\" : \"setterToken\";\n    var msg = \"\";\n\n    if (isClass) {\n      if (isStatic) {\n        msg += \"static \";\n      }\n      msg += accessorType + \"ter method\";\n    } else {\n      msg = \"key\";\n    }\n\n    state.tokens.curr.accessorType = accessorType;\n    state.nameStack.set(tkn);\n\n    if (props[name]) {\n      if ((props[name].basic || props[name][flagName]) && name !== \"__proto__\") {\n        warning(\"W075\", state.tokens.next, msg, name);\n      }\n    } else {\n      props[name] = Object.create(null);\n    }\n\n    props[name][flagName] = tkn;\n  }\n\n  function computedPropertyName() {\n    advance(\"[\");\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"computed property names\", \"6\");\n    }\n    var value = expression(10);\n    advance(\"]\");\n    return value;\n  }\n  function checkPunctuators(token, values) {\n    if (token.type === \"(punctuator)\") {\n      return _.contains(values, token.value);\n    }\n    return false;\n  }\n  function checkPunctuator(token, value) {\n    return token.type === \"(punctuator)\" && token.value === value;\n  }\n  function destructuringAssignOrJsonValue() {\n\n    var block = lookupBlockType();\n    if (block.notJson) {\n      if (!state.inES6() && block.isDestAssign) {\n        warning(\"W104\", state.tokens.curr, \"destructuring assignment\", \"6\");\n      }\n      statements();\n    } else {\n      state.option.laxbreak = true;\n      state.jsonMode = true;\n      jsonValue();\n    }\n  }\n\n  var arrayComprehension = function() {\n    var CompArray = function() {\n      this.mode = \"use\";\n      this.variables = [];\n    };\n    var _carrays = [];\n    var _current;\n    function declare(v) {\n      var l = _current.variables.filter(function(elt) {\n        if (elt.value === v) {\n          elt.undef = false;\n          return v;\n        }\n      }).length;\n      return l !== 0;\n    }\n    function use(v) {\n      var l = _current.variables.filter(function(elt) {\n        if (elt.value === v && !elt.undef) {\n          if (elt.unused === true) {\n            elt.unused = false;\n          }\n          return v;\n        }\n      }).length;\n      return (l === 0);\n    }\n    return { stack: function() {\n          _current = new CompArray();\n          _carrays.push(_current);\n        },\n        unstack: function() {\n          _current.variables.filter(function(v) {\n            if (v.unused)\n              warning(\"W098\", v.token, v.raw_text || v.value);\n            if (v.undef)\n              state.funct[\"(scope)\"].block.use(v.value, v.token);\n          });\n          _carrays.splice(-1, 1);\n          _current = _carrays[_carrays.length - 1];\n        },\n        setState: function(s) {\n          if (_.contains([\"use\", \"define\", \"generate\", \"filter\"], s))\n            _current.mode = s;\n        },\n        check: function(v) {\n          if (!_current) {\n            return;\n          }\n          if (_current && _current.mode === \"use\") {\n            if (use(v)) {\n              _current.variables.push({\n                funct: state.funct,\n                token: state.tokens.curr,\n                value: v,\n                undef: true,\n                unused: false\n              });\n            }\n            return true;\n          } else if (_current && _current.mode === \"define\") {\n            if (!declare(v)) {\n              _current.variables.push({\n                funct: state.funct,\n                token: state.tokens.curr,\n                value: v,\n                undef: false,\n                unused: true\n              });\n            }\n            return true;\n          } else if (_current && _current.mode === \"generate\") {\n            state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            return true;\n          } else if (_current && _current.mode === \"filter\") {\n            if (use(v)) {\n              state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            }\n            return true;\n          }\n          return false;\n        }\n        };\n  };\n\n  function jsonValue() {\n    function jsonObject() {\n      var o = {}, t = state.tokens.next;\n      advance(\"{\");\n      if (state.tokens.next.id !== \"}\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E026\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"}\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          } else if (state.tokens.next.id !== \"(string)\") {\n            warning(\"W095\", state.tokens.next, state.tokens.next.value);\n          }\n          if (o[state.tokens.next.value] === true) {\n            warning(\"W075\", state.tokens.next, \"key\", state.tokens.next.value);\n          } else if ((state.tokens.next.value === \"__proto__\" &&\n            !state.option.proto) || (state.tokens.next.value === \"__iterator__\" &&\n            !state.option.iterator)) {\n            warning(\"W096\", state.tokens.next, state.tokens.next.value);\n          } else {\n            o[state.tokens.next.value] = true;\n          }\n          advance();\n          advance(\":\");\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"}\");\n    }\n\n    function jsonArray() {\n      var t = state.tokens.next;\n      advance(\"[\");\n      if (state.tokens.next.id !== \"]\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E027\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"]\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          }\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    }\n\n    switch (state.tokens.next.id) {\n    case \"{\":\n      jsonObject();\n      break;\n    case \"[\":\n      jsonArray();\n      break;\n    case \"true\":\n    case \"false\":\n    case \"null\":\n    case \"(number)\":\n    case \"(string)\":\n      advance();\n      break;\n    case \"-\":\n      advance(\"-\");\n      advance(\"(number)\");\n      break;\n    default:\n      error(\"E003\", state.tokens.next);\n    }\n  }\n\n  var escapeRegex = function(str) {\n    return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n  };\n  var itself = function(s, o, g) {\n    var i, k, x, reIgnoreStr, reIgnore;\n    var optionKeys;\n    var newOptionObj = {};\n    var newIgnoredObj = {};\n\n    o = _.clone(o);\n    state.reset();\n\n    if (o && o.scope) {\n      JSHINT.scope = o.scope;\n    } else {\n      JSHINT.errors = [];\n      JSHINT.undefs = [];\n      JSHINT.internals = [];\n      JSHINT.blacklist = {};\n      JSHINT.scope = \"(main)\";\n    }\n\n    predefined = Object.create(null);\n    combine(predefined, vars.ecmaIdentifiers[3]);\n    combine(predefined, vars.reservedVars);\n\n    combine(predefined, g || {});\n\n    declared = Object.create(null);\n    var exported = Object.create(null); // Variables that live outside the current file\n\n    function each(obj, cb) {\n      if (!obj)\n        return;\n\n      if (!Array.isArray(obj) && typeof obj === \"object\")\n        obj = Object.keys(obj);\n\n      obj.forEach(cb);\n    }\n\n    if (o) {\n      each(o.predef || null, function(item) {\n        var slice, prop;\n\n        if (item[0] === \"-\") {\n          slice = item.slice(1);\n          JSHINT.blacklist[slice] = slice;\n          delete predefined[slice];\n        } else {\n          prop = Object.getOwnPropertyDescriptor(o.predef, item);\n          predefined[item] = prop ? prop.value : false;\n        }\n      });\n\n      each(o.exported || null, function(item) {\n        exported[item] = true;\n      });\n\n      delete o.predef;\n      delete o.exported;\n\n      optionKeys = Object.keys(o);\n      for (x = 0; x < optionKeys.length; x++) {\n        if (/^-W\\d{3}$/g.test(optionKeys[x])) {\n          newIgnoredObj[optionKeys[x].slice(1)] = true;\n        } else {\n          var optionKey = optionKeys[x];\n          newOptionObj[optionKey] = o[optionKey];\n          if ((optionKey === \"esversion\" && o[optionKey] === 5) ||\n              (optionKey === \"es5\" && o[optionKey])) {\n            warning(\"I003\");\n          }\n\n          if (optionKeys[x] === \"newcap\" && o[optionKey] === false)\n            newOptionObj[\"(explicitNewcap)\"] = true;\n        }\n      }\n    }\n\n    state.option = newOptionObj;\n    state.ignored = newIgnoredObj;\n\n    state.option.indent = state.option.indent || 4;\n    state.option.maxerr = state.option.maxerr || 50;\n\n    indent = 1;\n\n    var scopeManagerInst = scopeManager(state, predefined, exported, declared);\n    scopeManagerInst.on(\"warning\", function(ev) {\n      warning.apply(null, [ ev.code, ev.token].concat(ev.data));\n    });\n\n    scopeManagerInst.on(\"error\", function(ev) {\n      error.apply(null, [ ev.code, ev.token ].concat(ev.data));\n    });\n\n    state.funct = functor(\"(global)\", null, {\n      \"(global)\"    : true,\n      \"(scope)\"     : scopeManagerInst,\n      \"(comparray)\" : arrayComprehension(),\n      \"(metrics)\"   : createMetrics(state.tokens.next)\n    });\n\n    functions = [state.funct];\n    urls = [];\n    stack = null;\n    member = {};\n    membersOnly = null;\n    inblock = false;\n    lookahead = [];\n\n    if (!isString(s) && !Array.isArray(s)) {\n      errorAt(\"E004\", 0);\n      return false;\n    }\n\n    api = {\n      get isJSON() {\n        return state.jsonMode;\n      },\n\n      getOption: function(name) {\n        return state.option[name] || null;\n      },\n\n      getCache: function(name) {\n        return state.cache[name];\n      },\n\n      setCache: function(name, value) {\n        state.cache[name] = value;\n      },\n\n      warn: function(code, data) {\n        warningAt.apply(null, [ code, data.line, data.char ].concat(data.data));\n      },\n\n      on: function(names, listener) {\n        names.split(\" \").forEach(function(name) {\n          emitter.on(name, listener);\n        }.bind(this));\n      }\n    };\n\n    emitter.removeAllListeners();\n    (extraModules || []).forEach(function(func) {\n      func(api);\n    });\n\n    state.tokens.prev = state.tokens.curr = state.tokens.next = state.syntax[\"(begin)\"];\n\n    if (o && o.ignoreDelimiters) {\n\n      if (!Array.isArray(o.ignoreDelimiters)) {\n        o.ignoreDelimiters = [o.ignoreDelimiters];\n      }\n\n      o.ignoreDelimiters.forEach(function(delimiterPair) {\n        if (!delimiterPair.start || !delimiterPair.end)\n            return;\n\n        reIgnoreStr = escapeRegex(delimiterPair.start) +\n                      \"[\\\\s\\\\S]*?\" +\n                      escapeRegex(delimiterPair.end);\n\n        reIgnore = new RegExp(reIgnoreStr, \"ig\");\n\n        s = s.replace(reIgnore, function(match) {\n          return match.replace(/./g, \" \");\n        });\n      });\n    }\n\n    lex = new Lexer(s);\n\n    lex.on(\"warning\", function(ev) {\n      warningAt.apply(null, [ ev.code, ev.line, ev.character].concat(ev.data));\n    });\n\n    lex.on(\"error\", function(ev) {\n      errorAt.apply(null, [ ev.code, ev.line, ev.character ].concat(ev.data));\n    });\n\n    lex.on(\"fatal\", function(ev) {\n      quit(\"E041\", ev.line, ev.from);\n    });\n\n    lex.on(\"Identifier\", function(ev) {\n      emitter.emit(\"Identifier\", ev);\n    });\n\n    lex.on(\"String\", function(ev) {\n      emitter.emit(\"String\", ev);\n    });\n\n    lex.on(\"Number\", function(ev) {\n      emitter.emit(\"Number\", ev);\n    });\n\n    lex.start();\n    for (var name in o) {\n      if (_.has(o, name)) {\n        checkOption(name, state.tokens.curr);\n      }\n    }\n\n    assume();\n    combine(predefined, g || {});\n    comma.first = true;\n\n    try {\n      advance();\n      switch (state.tokens.next.id) {\n      case \"{\":\n      case \"[\":\n        destructuringAssignOrJsonValue();\n        break;\n      default:\n        directives();\n\n        if (state.directive[\"use strict\"]) {\n          if (state.option.strict !== \"global\") {\n            warning(\"W097\", state.tokens.prev);\n          }\n        }\n\n        statements();\n      }\n\n      if (state.tokens.next.id !== \"(end)\") {\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n    } catch (err) {\n      if (err && err.name === \"JSHintError\") {\n        var nt = state.tokens.next || {};\n        JSHINT.errors.push({\n          scope     : \"(main)\",\n          raw       : err.raw,\n          code      : err.code,\n          reason    : err.message,\n          line      : err.line || nt.line,\n          character : err.character || nt.from\n        }, null);\n      } else {\n        throw err;\n      }\n    }\n\n    if (JSHINT.scope === \"(main)\") {\n      o = o || {};\n\n      for (i = 0; i < JSHINT.internals.length; i += 1) {\n        k = JSHINT.internals[i];\n        o.scope = k.elem;\n        itself(k.value, o, g);\n      }\n    }\n\n    return JSHINT.errors.length === 0;\n  };\n  itself.addModule = function(func) {\n    extraModules.push(func);\n  };\n\n  itself.addModule(style.register);\n  itself.data = function() {\n    var data = {\n      functions: [],\n      options: state.option\n    };\n\n    var fu, f, i, j, n, globals;\n\n    if (itself.errors.length) {\n      data.errors = itself.errors;\n    }\n\n    if (state.jsonMode) {\n      data.json = true;\n    }\n\n    var impliedGlobals = state.funct[\"(scope)\"].getImpliedGlobals();\n    if (impliedGlobals.length > 0) {\n      data.implieds = impliedGlobals;\n    }\n\n    if (urls.length > 0) {\n      data.urls = urls;\n    }\n\n    globals = state.funct[\"(scope)\"].getUsedOrDefinedGlobals();\n    if (globals.length > 0) {\n      data.globals = globals;\n    }\n\n    for (i = 1; i < functions.length; i += 1) {\n      f = functions[i];\n      fu = {};\n\n      for (j = 0; j < functionicity.length; j += 1) {\n        fu[functionicity[j]] = [];\n      }\n\n      for (j = 0; j < functionicity.length; j += 1) {\n        if (fu[functionicity[j]].length === 0) {\n          delete fu[functionicity[j]];\n        }\n      }\n\n      fu.name = f[\"(name)\"];\n      fu.param = f[\"(params)\"];\n      fu.line = f[\"(line)\"];\n      fu.character = f[\"(character)\"];\n      fu.last = f[\"(last)\"];\n      fu.lastcharacter = f[\"(lastcharacter)\"];\n\n      fu.metrics = {\n        complexity: f[\"(metrics)\"].ComplexityCount,\n        parameters: f[\"(metrics)\"].arity,\n        statements: f[\"(metrics)\"].statementCount\n      };\n\n      data.functions.push(fu);\n    }\n\n    var unuseds = state.funct[\"(scope)\"].getUnuseds();\n    if (unuseds.length > 0) {\n      data.unused = unuseds;\n    }\n\n    for (n in member) {\n      if (typeof member[n] === \"number\") {\n        data.member = member;\n        break;\n      }\n    }\n\n    return data;\n  };\n\n  itself.jshint = itself;\n\n  return itself;\n}());\nif (typeof exports === \"object\" && exports) {\n  exports.JSHINT = JSHINT;\n}\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./lex.js\":\"/node_modules/jshint/src/lex.js\",\"./messages.js\":\"/node_modules/jshint/src/messages.js\",\"./options.js\":\"/node_modules/jshint/src/options.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./scope-manager.js\":\"/node_modules/jshint/src/scope-manager.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"./style.js\":\"/node_modules/jshint/src/style.js\",\"./vars.js\":\"/node_modules/jshint/src/vars.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/lex.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nvar _      = _dereq_(\"../lodash\");\nvar events = _dereq_(\"events\");\nvar reg    = _dereq_(\"./reg.js\");\nvar state  = _dereq_(\"./state.js\").state;\n\nvar unicodeData = _dereq_(\"../data/ascii-identifier-data.js\");\nvar asciiIdentifierStartTable = unicodeData.asciiIdentifierStartTable;\nvar asciiIdentifierPartTable = unicodeData.asciiIdentifierPartTable;\n\nvar Token = {\n  Identifier: 1,\n  Punctuator: 2,\n  NumericLiteral: 3,\n  StringLiteral: 4,\n  Comment: 5,\n  Keyword: 6,\n  NullLiteral: 7,\n  BooleanLiteral: 8,\n  RegExp: 9,\n  TemplateHead: 10,\n  TemplateMiddle: 11,\n  TemplateTail: 12,\n  NoSubstTemplate: 13\n};\n\nvar Context = {\n  Block: 1,\n  Template: 2\n};\n\nfunction asyncTrigger() {\n  var _checks = [];\n\n  return {\n    push: function(fn) {\n      _checks.push(fn);\n    },\n\n    check: function() {\n      for (var check = 0; check < _checks.length; ++check) {\n        _checks[check]();\n      }\n\n      _checks.splice(0, _checks.length);\n    }\n  };\n}\nfunction Lexer(source) {\n  var lines = source;\n\n  if (typeof lines === \"string\") {\n    lines = lines\n      .replace(/\\r\\n/g, \"\\n\")\n      .replace(/\\r/g, \"\\n\")\n      .split(\"\\n\");\n  }\n\n  if (lines[0] && lines[0].substr(0, 2) === \"#!\") {\n    if (lines[0].indexOf(\"node\") !== -1) {\n      state.option.node = true;\n    }\n    lines[0] = \"\";\n  }\n\n  this.emitter = new events.EventEmitter();\n  this.source = source;\n  this.setLines(lines);\n  this.prereg = true;\n\n  this.line = 0;\n  this.char = 1;\n  this.from = 1;\n  this.input = \"\";\n  this.inComment = false;\n  this.context = [];\n  this.templateStarts = [];\n\n  for (var i = 0; i < state.option.indent; i += 1) {\n    state.tab += \" \";\n  }\n  this.ignoreLinterErrors = false;\n}\n\nLexer.prototype = {\n  _lines: [],\n\n  inContext: function(ctxType) {\n    return this.context.length > 0 && this.context[this.context.length - 1].type === ctxType;\n  },\n\n  pushContext: function(ctxType) {\n    this.context.push({ type: ctxType });\n  },\n\n  popContext: function() {\n    return this.context.pop();\n  },\n\n  isContext: function(context) {\n    return this.context.length > 0 && this.context[this.context.length - 1] === context;\n  },\n\n  currentContext: function() {\n    return this.context.length > 0 && this.context[this.context.length - 1];\n  },\n\n  getLines: function() {\n    this._lines = state.lines;\n    return this._lines;\n  },\n\n  setLines: function(val) {\n    this._lines = val;\n    state.lines = this._lines;\n  },\n  peek: function(i) {\n    return this.input.charAt(i || 0);\n  },\n  skip: function(i) {\n    i = i || 1;\n    this.char += i;\n    this.input = this.input.slice(i);\n  },\n  on: function(names, listener) {\n    names.split(\" \").forEach(function(name) {\n      this.emitter.on(name, listener);\n    }.bind(this));\n  },\n  trigger: function() {\n    this.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments));\n  },\n  triggerAsync: function(type, args, checks, fn) {\n    checks.push(function() {\n      if (fn()) {\n        this.trigger(type, args);\n      }\n    }.bind(this));\n  },\n  scanPunctuator: function() {\n    var ch1 = this.peek();\n    var ch2, ch3, ch4;\n\n    switch (ch1) {\n    case \".\":\n      if ((/^[0-9]$/).test(this.peek(1))) {\n        return null;\n      }\n      if (this.peek(1) === \".\" && this.peek(2) === \".\") {\n        return {\n          type: Token.Punctuator,\n          value: \"...\"\n        };\n      }\n    case \"(\":\n    case \")\":\n    case \";\":\n    case \",\":\n    case \"[\":\n    case \"]\":\n    case \":\":\n    case \"~\":\n    case \"?\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"{\":\n      this.pushContext(Context.Block);\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"}\":\n      if (this.inContext(Context.Block)) {\n        this.popContext();\n      }\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"#\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"\":\n      return null;\n    }\n\n    ch2 = this.peek(1);\n    ch3 = this.peek(2);\n    ch4 = this.peek(3);\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\" && ch4 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>=\"\n      };\n    }\n\n    if (ch1 === \"=\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"===\"\n      };\n    }\n\n    if (ch1 === \"!\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"!==\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>\"\n      };\n    }\n\n    if (ch1 === \"<\" && ch2 === \"<\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"<<=\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>=\"\n      };\n    }\n    if (ch1 === \"=\" && ch2 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n    if (ch1 === ch2 && (\"+-<>&|\".indexOf(ch1) >= 0)) {\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n\n    if (\"<>=!+-*%&|^\".indexOf(ch1) >= 0) {\n      if (ch2 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: ch1 + ch2\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    }\n\n    if (ch1 === \"/\") {\n      if (ch2 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: \"/=\"\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: \"/\"\n      };\n    }\n\n    return null;\n  },\n  scanComments: function() {\n    var ch1 = this.peek();\n    var ch2 = this.peek(1);\n    var rest = this.input.substr(2);\n    var startLine = this.line;\n    var startChar = this.char;\n    var self = this;\n\n    function commentToken(label, body, opt) {\n      var special = [\"jshint\", \"jslint\", \"members\", \"member\", \"globals\", \"global\", \"exported\"];\n      var isSpecial = false;\n      var value = label + body;\n      var commentType = \"plain\";\n      opt = opt || {};\n\n      if (opt.isMultiline) {\n        value += \"*/\";\n      }\n\n      body = body.replace(/\\n/g, \" \");\n\n      if (label === \"/*\" && reg.fallsThrough.test(body)) {\n        isSpecial = true;\n        commentType = \"falls through\";\n      }\n\n      special.forEach(function(str) {\n        if (isSpecial) {\n          return;\n        }\n        if (label === \"//\" && str !== \"jshint\") {\n          return;\n        }\n\n        if (body.charAt(str.length) === \" \" && body.substr(0, str.length) === str) {\n          isSpecial = true;\n          label = label + str;\n          body = body.substr(str.length);\n        }\n\n        if (!isSpecial && body.charAt(0) === \" \" && body.charAt(str.length + 1) === \" \" &&\n          body.substr(1, str.length) === str) {\n          isSpecial = true;\n          label = label + \" \" + str;\n          body = body.substr(str.length + 1);\n        }\n\n        if (!isSpecial) {\n          return;\n        }\n\n        switch (str) {\n        case \"member\":\n          commentType = \"members\";\n          break;\n        case \"global\":\n          commentType = \"globals\";\n          break;\n        default:\n          var options = body.split(\":\").map(function(v) {\n            return v.replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n          });\n\n          if (options.length === 2) {\n            switch (options[0]) {\n            case \"ignore\":\n              switch (options[1]) {\n              case \"start\":\n                self.ignoringLinterErrors = true;\n                isSpecial = false;\n                break;\n              case \"end\":\n                self.ignoringLinterErrors = false;\n                isSpecial = false;\n                break;\n              }\n            }\n          }\n\n          commentType = str;\n        }\n      });\n\n      return {\n        type: Token.Comment,\n        commentType: commentType,\n        value: value,\n        body: body,\n        isSpecial: isSpecial,\n        isMultiline: opt.isMultiline || false,\n        isMalformed: opt.isMalformed || false\n      };\n    }\n    if (ch1 === \"*\" && ch2 === \"/\") {\n      this.trigger(\"error\", {\n        code: \"E018\",\n        line: startLine,\n        character: startChar\n      });\n\n      this.skip(2);\n      return null;\n    }\n    if (ch1 !== \"/\" || (ch2 !== \"*\" && ch2 !== \"/\")) {\n      return null;\n    }\n    if (ch2 === \"/\") {\n      this.skip(this.input.length); // Skip to the EOL.\n      return commentToken(\"//\", rest);\n    }\n\n    var body = \"\";\n    if (ch2 === \"*\") {\n      this.inComment = true;\n      this.skip(2);\n\n      while (this.peek() !== \"*\" || this.peek(1) !== \"/\") {\n        if (this.peek() === \"\") { // End of Line\n          body += \"\\n\";\n          if (!this.nextLine()) {\n            this.trigger(\"error\", {\n              code: \"E017\",\n              line: startLine,\n              character: startChar\n            });\n\n            this.inComment = false;\n            return commentToken(\"/*\", body, {\n              isMultiline: true,\n              isMalformed: true\n            });\n          }\n        } else {\n          body += this.peek();\n          this.skip();\n        }\n      }\n\n      this.skip(2);\n      this.inComment = false;\n      return commentToken(\"/*\", body, { isMultiline: true });\n    }\n  },\n  scanKeyword: function() {\n    var result = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input);\n    var keywords = [\n      \"if\", \"in\", \"do\", \"var\", \"for\", \"new\",\n      \"try\", \"let\", \"this\", \"else\", \"case\",\n      \"void\", \"with\", \"enum\", \"while\", \"break\",\n      \"catch\", \"throw\", \"const\", \"yield\", \"class\",\n      \"super\", \"return\", \"typeof\", \"delete\",\n      \"switch\", \"export\", \"import\", \"default\",\n      \"finally\", \"extends\", \"function\", \"continue\",\n      \"debugger\", \"instanceof\"\n    ];\n\n    if (result && keywords.indexOf(result[0]) >= 0) {\n      return {\n        type: Token.Keyword,\n        value: result[0]\n      };\n    }\n\n    return null;\n  },\n  scanIdentifier: function() {\n    var id = \"\";\n    var index = 0;\n    var type, char;\n\n    function isNonAsciiIdentifierStart(code) {\n      return code > 256;\n    }\n\n    function isNonAsciiIdentifierPart(code) {\n      return code > 256;\n    }\n\n    function isHexDigit(str) {\n      return (/^[0-9a-fA-F]$/).test(str);\n    }\n\n    var readUnicodeEscapeSequence = function() {\n      index += 1;\n\n      if (this.peek(index) !== \"u\") {\n        return null;\n      }\n\n      var ch1 = this.peek(index + 1);\n      var ch2 = this.peek(index + 2);\n      var ch3 = this.peek(index + 3);\n      var ch4 = this.peek(index + 4);\n      var code;\n\n      if (isHexDigit(ch1) && isHexDigit(ch2) && isHexDigit(ch3) && isHexDigit(ch4)) {\n        code = parseInt(ch1 + ch2 + ch3 + ch4, 16);\n\n        if (asciiIdentifierPartTable[code] || isNonAsciiIdentifierPart(code)) {\n          index += 5;\n          return \"\\\\u\" + ch1 + ch2 + ch3 + ch4;\n        }\n\n        return null;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierStart = function() {\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierStartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierStart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierPart = function() {\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierPartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierPart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    function removeEscapeSequences(id) {\n      return id.replace(/\\\\u([0-9a-fA-F]{4})/g, function(m0, codepoint) {\n        return String.fromCharCode(parseInt(codepoint, 16));\n      });\n    }\n\n    char = getIdentifierStart();\n    if (char === null) {\n      return null;\n    }\n\n    id = char;\n    for (;;) {\n      char = getIdentifierPart();\n\n      if (char === null) {\n        break;\n      }\n\n      id += char;\n    }\n\n    switch (id) {\n    case \"true\":\n    case \"false\":\n      type = Token.BooleanLiteral;\n      break;\n    case \"null\":\n      type = Token.NullLiteral;\n      break;\n    default:\n      type = Token.Identifier;\n    }\n\n    return {\n      type: type,\n      value: removeEscapeSequences(id),\n      text: id,\n      tokenLength: id.length\n    };\n  },\n  scanNumericLiteral: function() {\n    var index = 0;\n    var value = \"\";\n    var length = this.input.length;\n    var char = this.peek(index);\n    var bad;\n    var isAllowedDigit = isDecimalDigit;\n    var base = 10;\n    var isLegacy = false;\n\n    function isDecimalDigit(str) {\n      return (/^[0-9]$/).test(str);\n    }\n\n    function isOctalDigit(str) {\n      return (/^[0-7]$/).test(str);\n    }\n\n    function isBinaryDigit(str) {\n      return (/^[01]$/).test(str);\n    }\n\n    function isHexDigit(str) {\n      return (/^[0-9a-fA-F]$/).test(str);\n    }\n\n    function isIdentifierStart(ch) {\n      return (ch === \"$\") || (ch === \"_\") || (ch === \"\\\\\") ||\n        (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\");\n    }\n\n    if (char !== \".\" && !isDecimalDigit(char)) {\n      return null;\n    }\n\n    if (char !== \".\") {\n      value = this.peek(index);\n      index += 1;\n      char = this.peek(index);\n\n      if (value === \"0\") {\n        if (char === \"x\" || char === \"X\") {\n          isAllowedDigit = isHexDigit;\n          base = 16;\n\n          index += 1;\n          value += char;\n        }\n        if (char === \"o\" || char === \"O\") {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n\n          if (!state.inES6(true)) {\n            this.trigger(\"warning\", {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Octal integer literal\", \"6\" ]\n            });\n          }\n\n          index += 1;\n          value += char;\n        }\n        if (char === \"b\" || char === \"B\") {\n          isAllowedDigit = isBinaryDigit;\n          base = 2;\n\n          if (!state.inES6(true)) {\n            this.trigger(\"warning\", {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Binary integer literal\", \"6\" ]\n            });\n          }\n\n          index += 1;\n          value += char;\n        }\n        if (isOctalDigit(char)) {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n          isLegacy = true;\n          bad = false;\n\n          index += 1;\n          value += char;\n        }\n\n        if (!isOctalDigit(char) && isDecimalDigit(char)) {\n          index += 1;\n          value += char;\n        }\n      }\n\n      while (index < length) {\n        char = this.peek(index);\n\n        if (isLegacy && isDecimalDigit(char)) {\n          bad = true;\n        } else if (!isAllowedDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n\n      if (isAllowedDigit !== isDecimalDigit) {\n        if (!isLegacy && value.length <= 2) { // 0x\n          return {\n            type: Token.NumericLiteral,\n            value: value,\n            isMalformed: true\n          };\n        }\n\n        if (index < length) {\n          char = this.peek(index);\n          if (isIdentifierStart(char)) {\n            return null;\n          }\n        }\n\n        return {\n          type: Token.NumericLiteral,\n          value: value,\n          base: base,\n          isLegacy: isLegacy,\n          isMalformed: false\n        };\n      }\n    }\n\n    if (char === \".\") {\n      value += char;\n      index += 1;\n\n      while (index < length) {\n        char = this.peek(index);\n        if (!isDecimalDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n    }\n\n    if (char === \"e\" || char === \"E\") {\n      value += char;\n      index += 1;\n      char = this.peek(index);\n\n      if (char === \"+\" || char === \"-\") {\n        value += this.peek(index);\n        index += 1;\n      }\n\n      char = this.peek(index);\n      if (isDecimalDigit(char)) {\n        value += char;\n        index += 1;\n\n        while (index < length) {\n          char = this.peek(index);\n          if (!isDecimalDigit(char)) {\n            break;\n          }\n          value += char;\n          index += 1;\n        }\n      } else {\n        return null;\n      }\n    }\n\n    if (index < length) {\n      char = this.peek(index);\n      if (isIdentifierStart(char)) {\n        return null;\n      }\n    }\n\n    return {\n      type: Token.NumericLiteral,\n      value: value,\n      base: base,\n      isMalformed: !isFinite(value)\n    };\n  },\n  scanEscapeSequence: function(checks) {\n    var allowNewLine = false;\n    var jump = 1;\n    this.skip();\n    var char = this.peek();\n\n    switch (char) {\n    case \"'\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\'\" ]\n      }, checks, function() {return state.jsonMode; });\n      break;\n    case \"b\":\n      char = \"\\\\b\";\n      break;\n    case \"f\":\n      char = \"\\\\f\";\n      break;\n    case \"n\":\n      char = \"\\\\n\";\n      break;\n    case \"r\":\n      char = \"\\\\r\";\n      break;\n    case \"t\":\n      char = \"\\\\t\";\n      break;\n    case \"0\":\n      char = \"\\\\0\";\n      var n = parseInt(this.peek(1), 10);\n      this.triggerAsync(\"warning\", {\n        code: \"W115\",\n        line: this.line,\n        character: this.char\n      }, checks,\n      function() { return n >= 0 && n <= 7 && state.isStrict(); });\n      break;\n    case \"u\":\n      var hexCode = this.input.substr(1, 4);\n      var code = parseInt(hexCode, 16);\n      if (isNaN(code)) {\n        this.trigger(\"warning\", {\n          code: \"W052\",\n          line: this.line,\n          character: this.char,\n          data: [ \"u\" + hexCode ]\n        });\n      }\n      char = String.fromCharCode(code);\n      jump = 5;\n      break;\n    case \"v\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\v\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = \"\\v\";\n      break;\n    case \"x\":\n      var  x = parseInt(this.input.substr(1, 2), 16);\n\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\x-\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = String.fromCharCode(x);\n      jump = 3;\n      break;\n    case \"\\\\\":\n      char = \"\\\\\\\\\";\n      break;\n    case \"\\\"\":\n      char = \"\\\\\\\"\";\n      break;\n    case \"/\":\n      break;\n    case \"\":\n      allowNewLine = true;\n      char = \"\";\n      break;\n    }\n\n    return { char: char, jump: jump, allowNewLine: allowNewLine };\n  },\n  scanTemplateLiteral: function(checks) {\n    var tokenType;\n    var value = \"\";\n    var ch;\n    var startLine = this.line;\n    var startChar = this.char;\n    var depth = this.templateStarts.length;\n\n    if (!state.inES6(true)) {\n      return null;\n    } else if (this.peek() === \"`\") {\n      tokenType = Token.TemplateHead;\n      this.templateStarts.push({ line: this.line, char: this.char });\n      depth = this.templateStarts.length;\n      this.skip(1);\n      this.pushContext(Context.Template);\n    } else if (this.inContext(Context.Template) && this.peek() === \"}\") {\n      tokenType = Token.TemplateMiddle;\n    } else {\n      return null;\n    }\n\n    while (this.peek() !== \"`\") {\n      while ((ch = this.peek()) === \"\") {\n        value += \"\\n\";\n        if (!this.nextLine()) {\n          var startPos = this.templateStarts.pop();\n          this.trigger(\"error\", {\n            code: \"E052\",\n            line: startPos.line,\n            character: startPos.char\n          });\n          return {\n            type: tokenType,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            depth: depth,\n            context: this.popContext()\n          };\n        }\n      }\n\n      if (ch === '$' && this.peek(1) === '{') {\n        value += '${';\n        this.skip(2);\n        return {\n          type: tokenType,\n          value: value,\n          startLine: startLine,\n          startChar: startChar,\n          isUnclosed: false,\n          depth: depth,\n          context: this.currentContext()\n        };\n      } else if (ch === '\\\\') {\n        var escape = this.scanEscapeSequence(checks);\n        value += escape.char;\n        this.skip(escape.jump);\n      } else if (ch !== '`') {\n        value += ch;\n        this.skip(1);\n      }\n    }\n    tokenType = tokenType === Token.TemplateHead ? Token.NoSubstTemplate : Token.TemplateTail;\n    this.skip(1);\n    this.templateStarts.pop();\n\n    return {\n      type: tokenType,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      depth: depth,\n      context: this.popContext()\n    };\n  },\n  scanStringLiteral: function(checks) {\n    var quote = this.peek();\n    if (quote !== \"\\\"\" && quote !== \"'\") {\n      return null;\n    }\n    this.triggerAsync(\"warning\", {\n      code: \"W108\",\n      line: this.line,\n      character: this.char // +1?\n    }, checks, function() { return state.jsonMode && quote !== \"\\\"\"; });\n\n    var value = \"\";\n    var startLine = this.line;\n    var startChar = this.char;\n    var allowNewLine = false;\n\n    this.skip();\n\n    while (this.peek() !== quote) {\n      if (this.peek() === \"\") { // End Of Line\n\n        if (!allowNewLine) {\n          this.trigger(\"warning\", {\n            code: \"W112\",\n            line: this.line,\n            character: this.char\n          });\n        } else {\n          allowNewLine = false;\n\n          this.triggerAsync(\"warning\", {\n            code: \"W043\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return !state.option.multistr; });\n\n          this.triggerAsync(\"warning\", {\n            code: \"W042\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return state.jsonMode && state.option.multistr; });\n        }\n\n        if (!this.nextLine()) {\n          this.trigger(\"error\", {\n            code: \"E029\",\n            line: startLine,\n            character: startChar\n          });\n\n          return {\n            type: Token.StringLiteral,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            quote: quote\n          };\n        }\n\n      } else { // Any character other than End Of Line\n\n        allowNewLine = false;\n        var char = this.peek();\n        var jump = 1; // A length of a jump, after we're done\n\n        if (char < \" \") {\n          this.trigger(\"warning\", {\n            code: \"W113\",\n            line: this.line,\n            character: this.char,\n            data: [ \"<non-printable>\" ]\n          });\n        }\n        if (char === \"\\\\\") {\n          var parsed = this.scanEscapeSequence(checks);\n          char = parsed.char;\n          jump = parsed.jump;\n          allowNewLine = parsed.allowNewLine;\n        }\n\n        value += char;\n        this.skip(jump);\n      }\n    }\n\n    this.skip();\n    return {\n      type: Token.StringLiteral,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      quote: quote\n    };\n  },\n  scanRegExp: function() {\n    var index = 0;\n    var length = this.input.length;\n    var char = this.peek();\n    var value = char;\n    var body = \"\";\n    var flags = [];\n    var malformed = false;\n    var isCharSet = false;\n    var terminated;\n\n    var scanUnexpectedChars = function() {\n      if (char < \" \") {\n        malformed = true;\n        this.trigger(\"warning\", {\n          code: \"W048\",\n          line: this.line,\n          character: this.char\n        });\n      }\n      if (char === \"<\") {\n        malformed = true;\n        this.trigger(\"warning\", {\n          code: \"W049\",\n          line: this.line,\n          character: this.char,\n          data: [ char ]\n        });\n      }\n    }.bind(this);\n    if (!this.prereg || char !== \"/\") {\n      return null;\n    }\n\n    index += 1;\n    terminated = false;\n\n    while (index < length) {\n      char = this.peek(index);\n      value += char;\n      body += char;\n\n      if (isCharSet) {\n        if (char === \"]\") {\n          if (this.peek(index - 1) !== \"\\\\\" || this.peek(index - 2) === \"\\\\\") {\n            isCharSet = false;\n          }\n        }\n\n        if (char === \"\\\\\") {\n          index += 1;\n          char = this.peek(index);\n          body += char;\n          value += char;\n\n          scanUnexpectedChars();\n        }\n\n        index += 1;\n        continue;\n      }\n\n      if (char === \"\\\\\") {\n        index += 1;\n        char = this.peek(index);\n        body += char;\n        value += char;\n\n        scanUnexpectedChars();\n\n        if (char === \"/\") {\n          index += 1;\n          continue;\n        }\n\n        if (char === \"[\") {\n          index += 1;\n          continue;\n        }\n      }\n\n      if (char === \"[\") {\n        isCharSet = true;\n        index += 1;\n        continue;\n      }\n\n      if (char === \"/\") {\n        body = body.substr(0, body.length - 1);\n        terminated = true;\n        index += 1;\n        break;\n      }\n\n      index += 1;\n    }\n\n    if (!terminated) {\n      this.trigger(\"error\", {\n        code: \"E015\",\n        line: this.line,\n        character: this.from\n      });\n\n      return void this.trigger(\"fatal\", {\n        line: this.line,\n        from: this.from\n      });\n    }\n\n    while (index < length) {\n      char = this.peek(index);\n      if (!/[gim]/.test(char)) {\n        break;\n      }\n      flags.push(char);\n      value += char;\n      index += 1;\n    }\n\n    try {\n      new RegExp(body, flags.join(\"\"));\n    } catch (err) {\n      malformed = true;\n      this.trigger(\"error\", {\n        code: \"E016\",\n        line: this.line,\n        character: this.char,\n        data: [ err.message ] // Platform dependent!\n      });\n    }\n\n    return {\n      type: Token.RegExp,\n      value: value,\n      flags: flags,\n      isMalformed: malformed\n    };\n  },\n  scanNonBreakingSpaces: function() {\n    return state.option.nonbsp ?\n      this.input.search(/(\\u00A0)/) : -1;\n  },\n  scanUnsafeChars: function() {\n    return this.input.search(reg.unsafeChars);\n  },\n  next: function(checks) {\n    this.from = this.char;\n    var start;\n    if (/\\s/.test(this.peek())) {\n      start = this.char;\n\n      while (/\\s/.test(this.peek())) {\n        this.from += 1;\n        this.skip();\n      }\n    }\n\n    var match = this.scanComments() ||\n      this.scanStringLiteral(checks) ||\n      this.scanTemplateLiteral(checks);\n\n    if (match) {\n      return match;\n    }\n\n    match =\n      this.scanRegExp() ||\n      this.scanPunctuator() ||\n      this.scanKeyword() ||\n      this.scanIdentifier() ||\n      this.scanNumericLiteral();\n\n    if (match) {\n      this.skip(match.tokenLength || match.value.length);\n      return match;\n    }\n\n    return null;\n  },\n  nextLine: function() {\n    var char;\n\n    if (this.line >= this.getLines().length) {\n      return false;\n    }\n\n    this.input = this.getLines()[this.line];\n    this.line += 1;\n    this.char = 1;\n    this.from = 1;\n\n    var inputTrimmed = this.input.trim();\n\n    var startsWith = function() {\n      return _.some(arguments, function(prefix) {\n        return inputTrimmed.indexOf(prefix) === 0;\n      });\n    };\n\n    var endsWith = function() {\n      return _.some(arguments, function(suffix) {\n        return inputTrimmed.indexOf(suffix, inputTrimmed.length - suffix.length) !== -1;\n      });\n    };\n    if (this.ignoringLinterErrors === true) {\n      if (!startsWith(\"/*\", \"//\") && !(this.inComment && endsWith(\"*/\"))) {\n        this.input = \"\";\n      }\n    }\n\n    char = this.scanNonBreakingSpaces();\n    if (char >= 0) {\n      this.trigger(\"warning\", { code: \"W125\", line: this.line, character: char + 1 });\n    }\n\n    this.input = this.input.replace(/\\t/g, state.tab);\n    char = this.scanUnsafeChars();\n\n    if (char >= 0) {\n      this.trigger(\"warning\", { code: \"W100\", line: this.line, character: char });\n    }\n\n    if (!this.ignoringLinterErrors && state.option.maxlen &&\n      state.option.maxlen < this.input.length) {\n      var inComment = this.inComment ||\n        startsWith.call(inputTrimmed, \"//\") ||\n        startsWith.call(inputTrimmed, \"/*\");\n\n      var shouldTriggerError = !inComment || !reg.maxlenException.test(inputTrimmed);\n\n      if (shouldTriggerError) {\n        this.trigger(\"warning\", { code: \"W101\", line: this.line, character: this.input.length });\n      }\n    }\n\n    return true;\n  },\n  start: function() {\n    this.nextLine();\n  },\n  token: function() {\n    var checks = asyncTrigger();\n    var token;\n\n\n    function isReserved(token, isProperty) {\n      if (!token.reserved) {\n        return false;\n      }\n      var meta = token.meta;\n\n      if (meta && meta.isFutureReservedWord && state.inES5()) {\n        if (!meta.es5) {\n          return false;\n        }\n        if (meta.strictOnly) {\n          if (!state.option.strict && !state.isStrict()) {\n            return false;\n          }\n        }\n\n        if (isProperty) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n    var create = function(type, value, isProperty, token) {\n      var obj;\n\n      if (type !== \"(endline)\" && type !== \"(end)\") {\n        this.prereg = false;\n      }\n\n      if (type === \"(punctuator)\") {\n        switch (value) {\n        case \".\":\n        case \")\":\n        case \"~\":\n        case \"#\":\n        case \"]\":\n        case \"++\":\n        case \"--\":\n          this.prereg = false;\n          break;\n        default:\n          this.prereg = true;\n        }\n\n        obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n      }\n\n      if (type === \"(identifier)\") {\n        if (value === \"return\" || value === \"case\" || value === \"typeof\") {\n          this.prereg = true;\n        }\n\n        if (_.has(state.syntax, value)) {\n          obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n          if (!isReserved(obj, isProperty && type === \"(identifier)\")) {\n            obj = null;\n          }\n        }\n      }\n\n      if (!obj) {\n        obj = Object.create(state.syntax[type]);\n      }\n\n      obj.identifier = (type === \"(identifier)\");\n      obj.type = obj.type || type;\n      obj.value = value;\n      obj.line = this.line;\n      obj.character = this.char;\n      obj.from = this.from;\n      if (obj.identifier && token) obj.raw_text = token.text || token.value;\n      if (token && token.startLine && token.startLine !== this.line) {\n        obj.startLine = token.startLine;\n      }\n      if (token && token.context) {\n        obj.context = token.context;\n      }\n      if (token && token.depth) {\n        obj.depth = token.depth;\n      }\n      if (token && token.isUnclosed) {\n        obj.isUnclosed = token.isUnclosed;\n      }\n\n      if (isProperty && obj.identifier) {\n        obj.isProperty = isProperty;\n      }\n\n      obj.check = checks.check;\n\n      return obj;\n    }.bind(this);\n\n    for (;;) {\n      if (!this.input.length) {\n        if (this.nextLine()) {\n          return create(\"(endline)\", \"\");\n        }\n\n        if (this.exhausted) {\n          return null;\n        }\n\n        this.exhausted = true;\n        return create(\"(end)\", \"\");\n      }\n\n      token = this.next(checks);\n\n      if (!token) {\n        if (this.input.length) {\n          this.trigger(\"error\", {\n            code: \"E024\",\n            line: this.line,\n            character: this.char,\n            data: [ this.peek() ]\n          });\n\n          this.input = \"\";\n        }\n\n        continue;\n      }\n\n      switch (token.type) {\n      case Token.StringLiteral:\n        this.triggerAsync(\"String\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value,\n          quote: token.quote\n        }, checks, function() { return true; });\n\n        return create(\"(string)\", token.value, null, token);\n\n      case Token.TemplateHead:\n        this.trigger(\"TemplateHead\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template)\", token.value, null, token);\n\n      case Token.TemplateMiddle:\n        this.trigger(\"TemplateMiddle\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template middle)\", token.value, null, token);\n\n      case Token.TemplateTail:\n        this.trigger(\"TemplateTail\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template tail)\", token.value, null, token);\n\n      case Token.NoSubstTemplate:\n        this.trigger(\"NoSubstTemplate\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(no subst template)\", token.value, null, token);\n\n      case Token.Identifier:\n        this.triggerAsync(\"Identifier\", {\n          line: this.line,\n          char: this.char,\n          from: this.form,\n          name: token.value,\n          raw_name: token.text,\n          isProperty: state.tokens.curr.id === \".\"\n        }, checks, function() { return true; });\n      case Token.Keyword:\n      case Token.NullLiteral:\n      case Token.BooleanLiteral:\n        return create(\"(identifier)\", token.value, state.tokens.curr.id === \".\", token);\n\n      case Token.NumericLiteral:\n        if (token.isMalformed) {\n          this.trigger(\"warning\", {\n            code: \"W045\",\n            line: this.line,\n            character: this.char,\n            data: [ token.value ]\n          });\n        }\n\n        this.triggerAsync(\"warning\", {\n          code: \"W114\",\n          line: this.line,\n          character: this.char,\n          data: [ \"0x-\" ]\n        }, checks, function() { return token.base === 16 && state.jsonMode; });\n\n        this.triggerAsync(\"warning\", {\n          code: \"W115\",\n          line: this.line,\n          character: this.char\n        }, checks, function() {\n          return state.isStrict() && token.base === 8 && token.isLegacy;\n        });\n\n        this.trigger(\"Number\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          value: token.value,\n          base: token.base,\n          isMalformed: token.malformed\n        });\n\n        return create(\"(number)\", token.value);\n\n      case Token.RegExp:\n        return create(\"(regexp)\", token.value);\n\n      case Token.Comment:\n        state.tokens.curr.comment = true;\n\n        if (token.isSpecial) {\n          return {\n            id: '(comment)',\n            value: token.value,\n            body: token.body,\n            type: token.commentType,\n            isSpecial: token.isSpecial,\n            line: this.line,\n            character: this.char,\n            from: this.from\n          };\n        }\n\n        break;\n\n      case \"\":\n        break;\n\n      default:\n        return create(\"(punctuator)\", token.value);\n      }\n    }\n  }\n};\n\nexports.Lexer = Lexer;\nexports.Context = Context;\n\n},{\"../data/ascii-identifier-data.js\":\"/node_modules/jshint/data/ascii-identifier-data.js\",\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/messages.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _ = _dereq_(\"../lodash\");\n\nvar errors = {\n  E001: \"Bad option: '{a}'.\",\n  E002: \"Bad option value.\",\n  E003: \"Expected a JSON value.\",\n  E004: \"Input is neither a string nor an array of strings.\",\n  E005: \"Input is empty.\",\n  E006: \"Unexpected early end of program.\",\n  E007: \"Missing \\\"use strict\\\" statement.\",\n  E008: \"Strict violation.\",\n  E009: \"Option 'validthis' can't be used in a global scope.\",\n  E010: \"'with' is not allowed in strict mode.\",\n  E011: \"'{a}' has already been declared.\",\n  E012: \"const '{a}' is initialized to 'undefined'.\",\n  E013: \"Attempting to override '{a}' which is a constant.\",\n  E014: \"A regular expression literal can be confused with '/='.\",\n  E015: \"Unclosed regular expression.\",\n  E016: \"Invalid regular expression.\",\n  E017: \"Unclosed comment.\",\n  E018: \"Unbegun comment.\",\n  E019: \"Unmatched '{a}'.\",\n  E020: \"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.\",\n  E021: \"Expected '{a}' and instead saw '{b}'.\",\n  E022: \"Line breaking error '{a}'.\",\n  E023: \"Missing '{a}'.\",\n  E024: \"Unexpected '{a}'.\",\n  E025: \"Missing ':' on a case clause.\",\n  E026: \"Missing '}' to match '{' from line {a}.\",\n  E027: \"Missing ']' to match '[' from line {a}.\",\n  E028: \"Illegal comma.\",\n  E029: \"Unclosed string.\",\n  E030: \"Expected an identifier and instead saw '{a}'.\",\n  E031: \"Bad assignment.\", // FIXME: Rephrase\n  E032: \"Expected a small integer or 'false' and instead saw '{a}'.\",\n  E033: \"Expected an operator and instead saw '{a}'.\",\n  E034: \"get/set are ES5 features.\",\n  E035: \"Missing property name.\",\n  E036: \"Expected to see a statement and instead saw a block.\",\n  E037: null,\n  E038: null,\n  E039: \"Function declarations are not invocable. Wrap the whole function invocation in parens.\",\n  E040: \"Each value should have its own case label.\",\n  E041: \"Unrecoverable syntax error.\",\n  E042: \"Stopping.\",\n  E043: \"Too many errors.\",\n  E044: null,\n  E045: \"Invalid for each loop.\",\n  E046: \"A yield statement shall be within a generator function (with syntax: `function*`)\",\n  E047: null,\n  E048: \"{a} declaration not directly within block.\",\n  E049: \"A {a} cannot be named '{b}'.\",\n  E050: \"Mozilla requires the yield expression to be parenthesized here.\",\n  E051: null,\n  E052: \"Unclosed template literal.\",\n  E053: \"Export declaration must be in global scope.\",\n  E054: \"Class properties must be methods. Expected '(' but instead saw '{a}'.\",\n  E055: \"The '{a}' option cannot be set after any executable code.\",\n  E056: \"'{a}' was used before it was declared, which is illegal for '{b}' variables.\",\n  E057: \"Invalid meta property: '{a}.{b}'.\",\n  E058: \"Missing semicolon.\"\n};\n\nvar warnings = {\n  W001: \"'hasOwnProperty' is a really bad name.\",\n  W002: \"Value of '{a}' may be overwritten in IE 8 and earlier.\",\n  W003: \"'{a}' was used before it was defined.\",\n  W004: \"'{a}' is already defined.\",\n  W005: \"A dot following a number can be confused with a decimal point.\",\n  W006: \"Confusing minuses.\",\n  W007: \"Confusing plusses.\",\n  W008: \"A leading decimal point can be confused with a dot: '{a}'.\",\n  W009: \"The array literal notation [] is preferable.\",\n  W010: \"The object literal notation {} is preferable.\",\n  W011: null,\n  W012: null,\n  W013: null,\n  W014: \"Bad line breaking before '{a}'.\",\n  W015: null,\n  W016: \"Unexpected use of '{a}'.\",\n  W017: \"Bad operand.\",\n  W018: \"Confusing use of '{a}'.\",\n  W019: \"Use the isNaN function to compare with NaN.\",\n  W020: \"Read only.\",\n  W021: \"Reassignment of '{a}', which is is a {b}. \" +\n    \"Use 'var' or 'let' to declare bindings that may change.\",\n  W022: \"Do not assign to the exception parameter.\",\n  W023: \"Expected an identifier in an assignment and instead saw a function invocation.\",\n  W024: \"Expected an identifier and instead saw '{a}' (a reserved word).\",\n  W025: \"Missing name in function declaration.\",\n  W026: \"Inner functions should be listed at the top of the outer function.\",\n  W027: \"Unreachable '{a}' after '{b}'.\",\n  W028: \"Label '{a}' on {b} statement.\",\n  W030: \"Expected an assignment or function call and instead saw an expression.\",\n  W031: \"Do not use 'new' for side effects.\",\n  W032: \"Unnecessary semicolon.\",\n  W033: \"Missing semicolon.\",\n  W034: \"Unnecessary directive \\\"{a}\\\".\",\n  W035: \"Empty block.\",\n  W036: \"Unexpected /*member '{a}'.\",\n  W037: \"'{a}' is a statement label.\",\n  W038: \"'{a}' used out of scope.\",\n  W039: \"'{a}' is not allowed.\",\n  W040: \"Possible strict violation.\",\n  W041: \"Use '{a}' to compare with '{b}'.\",\n  W042: \"Avoid EOL escaping.\",\n  W043: \"Bad escaping of EOL. Use option multistr if needed.\",\n  W044: \"Bad or unnecessary escaping.\", /* TODO(caitp): remove W044 */\n  W045: \"Bad number '{a}'.\",\n  W046: \"Don't use extra leading zeros '{a}'.\",\n  W047: \"A trailing decimal point can be confused with a dot: '{a}'.\",\n  W048: \"Unexpected control character in regular expression.\",\n  W049: \"Unexpected escaped character '{a}' in regular expression.\",\n  W050: \"JavaScript URL.\",\n  W051: \"Variables should not be deleted.\",\n  W052: \"Unexpected '{a}'.\",\n  W053: \"Do not use {a} as a constructor.\",\n  W054: \"The Function constructor is a form of eval.\",\n  W055: \"A constructor name should start with an uppercase letter.\",\n  W056: \"Bad constructor.\",\n  W057: \"Weird construction. Is 'new' necessary?\",\n  W058: \"Missing '()' invoking a constructor.\",\n  W059: \"Avoid arguments.{a}.\",\n  W060: \"document.write can be a form of eval.\",\n  W061: \"eval can be harmful.\",\n  W062: \"Wrap an immediate function invocation in parens \" +\n    \"to assist the reader in understanding that the expression \" +\n    \"is the result of a function, and not the function itself.\",\n  W063: \"Math is not a function.\",\n  W064: \"Missing 'new' prefix when invoking a constructor.\",\n  W065: \"Missing radix parameter.\",\n  W066: \"Implied eval. Consider passing a function instead of a string.\",\n  W067: \"Bad invocation.\",\n  W068: \"Wrapping non-IIFE function literals in parens is unnecessary.\",\n  W069: \"['{a}'] is better written in dot notation.\",\n  W070: \"Extra comma. (it breaks older versions of IE)\",\n  W071: \"This function has too many statements. ({a})\",\n  W072: \"This function has too many parameters. ({a})\",\n  W073: \"Blocks are nested too deeply. ({a})\",\n  W074: \"This function's cyclomatic complexity is too high. ({a})\",\n  W075: \"Duplicate {a} '{b}'.\",\n  W076: \"Unexpected parameter '{a}' in get {b} function.\",\n  W077: \"Expected a single parameter in set {a} function.\",\n  W078: \"Setter is defined without getter.\",\n  W079: \"Redefinition of '{a}'.\",\n  W080: \"It's not necessary to initialize '{a}' to 'undefined'.\",\n  W081: null,\n  W082: \"Function declarations should not be placed in blocks. \" +\n    \"Use a function expression or move the statement to the top of \" +\n    \"the outer function.\",\n  W083: \"Don't make functions within a loop.\",\n  W084: \"Assignment in conditional expression\",\n  W085: \"Don't use 'with'.\",\n  W086: \"Expected a 'break' statement before '{a}'.\",\n  W087: \"Forgotten 'debugger' statement?\",\n  W088: \"Creating global 'for' variable. Should be 'for (var {a} ...'.\",\n  W089: \"The body of a for in should be wrapped in an if statement to filter \" +\n    \"unwanted properties from the prototype.\",\n  W090: \"'{a}' is not a statement label.\",\n  W091: null,\n  W093: \"Did you mean to return a conditional instead of an assignment?\",\n  W094: \"Unexpected comma.\",\n  W095: \"Expected a string and instead saw {a}.\",\n  W096: \"The '{a}' key may produce unexpected results.\",\n  W097: \"Use the function form of \\\"use strict\\\".\",\n  W098: \"'{a}' is defined but never used.\",\n  W099: null,\n  W100: \"This character may get silently deleted by one or more browsers.\",\n  W101: \"Line is too long.\",\n  W102: null,\n  W103: \"The '{a}' property is deprecated.\",\n  W104: \"'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).\",\n  W105: \"Unexpected {a} in '{b}'.\",\n  W106: \"Identifier '{a}' is not in camel case.\",\n  W107: \"Script URL.\",\n  W108: \"Strings must use doublequote.\",\n  W109: \"Strings must use singlequote.\",\n  W110: \"Mixed double and single quotes.\",\n  W112: \"Unclosed string.\",\n  W113: \"Control character in string: {a}.\",\n  W114: \"Avoid {a}.\",\n  W115: \"Octal literals are not allowed in strict mode.\",\n  W116: \"Expected '{a}' and instead saw '{b}'.\",\n  W117: \"'{a}' is not defined.\",\n  W118: \"'{a}' is only available in Mozilla JavaScript extensions (use moz option).\",\n  W119: \"'{a}' is only available in ES{b} (use 'esversion: {b}').\",\n  W120: \"You might be leaking a variable ({a}) here.\",\n  W121: \"Extending prototype of native object: '{a}'.\",\n  W122: \"Invalid typeof value '{a}'\",\n  W123: \"'{a}' is already defined in outer scope.\",\n  W124: \"A generator function shall contain a yield statement.\",\n  W125: \"This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp\",\n  W126: \"Unnecessary grouping operator.\",\n  W127: \"Unexpected use of a comma operator.\",\n  W128: \"Empty array elements require elision=true.\",\n  W129: \"'{a}' is defined in a future version of JavaScript. Use a \" +\n    \"different variable name to avoid migration issues.\",\n  W130: \"Invalid element after rest element.\",\n  W131: \"Invalid parameter after rest parameter.\",\n  W132: \"`var` declarations are forbidden. Use `let` or `const` instead.\",\n  W133: \"Invalid for-{a} loop left-hand-side: {b}.\",\n  W134: \"The '{a}' option is only available when linting ECMAScript {b} code.\",\n  W135: \"{a} may not be supported by non-browser environments.\",\n  W136: \"'{a}' must be in function scope.\",\n  W137: \"Empty destructuring.\",\n  W138: \"Regular parameters should not come after default parameters.\"\n};\n\nvar info = {\n  I001: \"Comma warnings can be turned off with 'laxcomma'.\",\n  I002: null,\n  I003: \"ES5 option is now set per default\"\n};\n\nexports.errors = {};\nexports.warnings = {};\nexports.info = {};\n\n_.each(errors, function(desc, code) {\n  exports.errors[code] = { code: code, desc: desc };\n});\n\n_.each(warnings, function(desc, code) {\n  exports.warnings[code] = { code: code, desc: desc };\n});\n\n_.each(info, function(desc, code) {\n  exports.info[code] = { code: code, desc: desc };\n});\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\"}],\"/node_modules/jshint/src/name-stack.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction NameStack() {\n  this._stack = [];\n}\n\nObject.defineProperty(NameStack.prototype, \"length\", {\n  get: function() {\n    return this._stack.length;\n  }\n});\nNameStack.prototype.push = function() {\n  this._stack.push(null);\n};\nNameStack.prototype.pop = function() {\n  this._stack.pop();\n};\nNameStack.prototype.set = function(token) {\n  this._stack[this.length - 1] = token;\n};\nNameStack.prototype.infer = function() {\n  var nameToken = this._stack[this.length - 1];\n  var prefix = \"\";\n  var type;\n  if (!nameToken || nameToken.type === \"class\") {\n    nameToken = this._stack[this.length - 2];\n  }\n\n  if (!nameToken) {\n    return \"(empty)\";\n  }\n\n  type = nameToken.type;\n\n  if (type !== \"(string)\" && type !== \"(number)\" && type !== \"(identifier)\" && type !== \"default\") {\n    return \"(expression)\";\n  }\n\n  if (nameToken.accessorType) {\n    prefix = nameToken.accessorType + \" \";\n  }\n\n  return prefix + nameToken.value;\n};\n\nmodule.exports = NameStack;\n\n},{}],\"/node_modules/jshint/src/options.js\":[function(_dereq_,module,exports){\n\"use strict\";\nexports.bool = {\n  enforcing: {\n    bitwise     : true,\n    freeze      : true,\n    camelcase   : true,\n    curly       : true,\n    eqeqeq      : true,\n    futurehostile: true,\n    notypeof    : true,\n    es3         : true,\n    es5         : true,\n    forin       : true,\n    funcscope   : true,\n    immed       : true,\n    iterator    : true,\n    newcap      : true,\n    noarg       : true,\n    nocomma     : true,\n    noempty     : true,\n    nonbsp      : true,\n    nonew       : true,\n    undef       : true,\n    singleGroups: false,\n    varstmt: false,\n    enforceall : false\n  },\n  relaxing: {\n    asi         : true,\n    multistr    : true,\n    debug       : true,\n    boss        : true,\n    evil        : true,\n    globalstrict: true,\n    plusplus    : true,\n    proto       : true,\n    scripturl   : true,\n    sub         : true,\n    supernew    : true,\n    laxbreak    : true,\n    laxcomma    : true,\n    validthis   : true,\n    withstmt    : true,\n    moz         : true,\n    noyield     : true,\n    eqnull      : true,\n    lastsemic   : true,\n    loopfunc    : true,\n    expr        : true,\n    esnext      : true,\n    elision     : true,\n  },\n  environments: {\n    mootools    : true,\n    couch       : true,\n    jasmine     : true,\n    jquery      : true,\n    node        : true,\n    qunit       : true,\n    rhino       : true,\n    shelljs     : true,\n    prototypejs : true,\n    yui         : true,\n    mocha       : true,\n    module      : true,\n    wsh         : true,\n    worker      : true,\n    nonstandard : true,\n    browser     : true,\n    browserify  : true,\n    devel       : true,\n    dojo        : true,\n    typed       : true,\n    phantom     : true\n  },\n  obsolete: {\n    onecase     : true, // if one case switch statements should be allowed\n    regexp      : true, // if the . should not be allowed in regexp literals\n    regexdash   : true  // if unescaped first/last dash (-) inside brackets\n  }\n};\nexports.val = {\n  maxlen       : false,\n  indent       : false,\n  maxerr       : false,\n  predef       : false,\n  globals      : false,\n  quotmark     : false,\n\n  scope        : false,\n  maxstatements: false,\n  maxdepth     : false,\n  maxparams    : false,\n  maxcomplexity: false,\n  shadow       : false,\n  strict      : true,\n  unused       : true,\n  latedef      : false,\n\n  ignore       : false, // start/end ignoring lines of code, bypassing the lexer\n\n  ignoreDelimiters: false, // array of start/end delimiters used to ignore\n  esversion: 5\n};\nexports.inverted = {\n  bitwise : true,\n  forin   : true,\n  newcap  : true,\n  plusplus: true,\n  regexp  : true,\n  undef   : true,\n  eqeqeq  : true,\n  strict  : true\n};\n\nexports.validNames = Object.keys(exports.val)\n  .concat(Object.keys(exports.bool.relaxing))\n  .concat(Object.keys(exports.bool.enforcing))\n  .concat(Object.keys(exports.bool.obsolete))\n  .concat(Object.keys(exports.bool.environments));\nexports.renamed = {\n  eqeq   : \"eqeqeq\",\n  windows: \"wsh\",\n  sloppy : \"strict\"\n};\n\nexports.removed = {\n  nomen: true,\n  onevar: true,\n  passfail: true,\n  white: true,\n  gcl: true,\n  smarttabs: true,\n  trailing: true\n};\nexports.noenforceall = {\n  varstmt: true,\n  strict: true\n};\n\n},{}],\"/node_modules/jshint/src/reg.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\nexports.unsafeString =\n  /@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|&lt/i;\nexports.unsafeChars =\n  /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\nexports.needEsc =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n\nexports.needEscGlobal =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\nexports.starSlash = /\\*\\//;\nexports.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;\nexports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\nexports.fallsThrough = /^\\s*falls?\\sthrough\\s*$/;\nexports.maxlenException = /^(?:(?:\\/\\/|\\/\\*|\\*) ?)?[^ ]+$/;\n\n},{}],\"/node_modules/jshint/src/scope-manager.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _      = _dereq_(\"../lodash\");\nvar events = _dereq_(\"events\");\nvar marker = {};\nvar scopeManager = function(state, predefined, exported, declared) {\n\n  var _current;\n  var _scopeStack = [];\n\n  function _newScope(type) {\n    _current = {\n      \"(labels)\": Object.create(null),\n      \"(usages)\": Object.create(null),\n      \"(breakLabels)\": Object.create(null),\n      \"(parent)\": _current,\n      \"(type)\": type,\n      \"(params)\": (type === \"functionparams\" || type === \"catchparams\") ? [] : null\n    };\n    _scopeStack.push(_current);\n  }\n\n  _newScope(\"global\");\n  _current[\"(predefined)\"] = predefined;\n\n  var _currentFunctBody = _current; // this is the block after the params = function\n\n  var usedPredefinedAndGlobals = Object.create(null);\n  var impliedGlobals = Object.create(null);\n  var unuseds = [];\n  var emitter = new events.EventEmitter();\n\n  function warning(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function error(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function _setupUsages(labelName) {\n    if (!_current[\"(usages)\"][labelName]) {\n      _current[\"(usages)\"][labelName] = {\n        \"(modified)\": [],\n        \"(reassigned)\": [],\n        \"(tokens)\": []\n      };\n    }\n  }\n\n  var _getUnusedOption = function(unused_opt) {\n    if (unused_opt === undefined) {\n      unused_opt = state.option.unused;\n    }\n\n    if (unused_opt === true) {\n      unused_opt = \"last-param\";\n    }\n\n    return unused_opt;\n  };\n\n  var _warnUnused = function(name, tkn, type, unused_opt) {\n    var line = tkn.line;\n    var chr  = tkn.from;\n    var raw_name = tkn.raw_text || name;\n\n    unused_opt = _getUnusedOption(unused_opt);\n\n    var warnable_types = {\n      \"vars\": [\"var\"],\n      \"last-param\": [\"var\", \"param\"],\n      \"strict\": [\"var\", \"param\", \"last-param\"]\n    };\n\n    if (unused_opt) {\n      if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) {\n        warning(\"W098\", { line: line, from: chr }, raw_name);\n      }\n    }\n    if (unused_opt || type === \"var\") {\n      unuseds.push({\n        name: name,\n        line: line,\n        character: chr\n      });\n    }\n  };\n  function _checkForUnused() {\n    if (_current[\"(type)\"] === \"functionparams\") {\n      _checkParams();\n      return;\n    }\n    var curentLabels = _current[\"(labels)\"];\n    for (var labelName in curentLabels) {\n      if (curentLabels[labelName]) {\n        if (curentLabels[labelName][\"(type)\"] !== \"exception\" &&\n          curentLabels[labelName][\"(unused)\"]) {\n          _warnUnused(labelName, curentLabels[labelName][\"(token)\"], \"var\");\n        }\n      }\n    }\n  }\n  function _checkParams() {\n    var params = _current[\"(params)\"];\n\n    if (!params) {\n      return;\n    }\n\n    var param = params.pop();\n    var unused_opt;\n\n    while (param) {\n      var label = _current[\"(labels)\"][param];\n\n      unused_opt = _getUnusedOption(state.funct[\"(unusedOption)\"]);\n      if (param === \"undefined\")\n        return;\n\n      if (label[\"(unused)\"]) {\n        _warnUnused(param, label[\"(token)\"], \"param\", state.funct[\"(unusedOption)\"]);\n      } else if (unused_opt === \"last-param\") {\n        return;\n      }\n\n      param = params.pop();\n    }\n  }\n  function _getLabel(labelName) {\n    for (var i = _scopeStack.length - 1 ; i >= 0; --i) {\n      var scopeLabels = _scopeStack[i][\"(labels)\"];\n      if (scopeLabels[labelName]) {\n        return scopeLabels;\n      }\n    }\n  }\n\n  function usedSoFarInCurrentFunction(labelName) {\n    for (var i = _scopeStack.length - 1; i >= 0; i--) {\n      var current = _scopeStack[i];\n      if (current[\"(usages)\"][labelName]) {\n        return current[\"(usages)\"][labelName];\n      }\n      if (current === _currentFunctBody) {\n        break;\n      }\n    }\n    return false;\n  }\n\n  function _checkOuterShadow(labelName, token) {\n    if (state.option.shadow !== \"outer\") {\n      return;\n    }\n\n    var isGlobal = _currentFunctBody[\"(type)\"] === \"global\",\n      isNewFunction = _current[\"(type)\"] === \"functionparams\";\n\n    var outsideCurrentFunction = !isGlobal;\n    for (var i = 0; i < _scopeStack.length; i++) {\n      var stackItem = _scopeStack[i];\n\n      if (!isNewFunction && _scopeStack[i + 1] === _currentFunctBody) {\n        outsideCurrentFunction = false;\n      }\n      if (outsideCurrentFunction && stackItem[\"(labels)\"][labelName]) {\n        warning(\"W123\", token, labelName);\n      }\n      if (stackItem[\"(breakLabels)\"][labelName]) {\n        warning(\"W123\", token, labelName);\n      }\n    }\n  }\n\n  function _latedefWarning(type, labelName, token) {\n    if (state.option.latedef) {\n      if ((state.option.latedef === true && type === \"function\") ||\n        type !== \"function\") {\n        warning(\"W003\", token, labelName);\n      }\n    }\n  }\n\n  var scopeManagerInst = {\n\n    on: function(names, listener) {\n      names.split(\" \").forEach(function(name) {\n        emitter.on(name, listener);\n      });\n    },\n\n    isPredefined: function(labelName) {\n      return !this.has(labelName) && _.has(_scopeStack[0][\"(predefined)\"], labelName);\n    },\n    stack: function(type) {\n      var previousScope = _current;\n      _newScope(type);\n\n      if (!type && previousScope[\"(type)\"] === \"functionparams\") {\n\n        _current[\"(isFuncBody)\"] = true;\n        _current[\"(context)\"] = _currentFunctBody;\n        _currentFunctBody = _current;\n      }\n    },\n\n    unstack: function() {\n      var subScope = _scopeStack.length > 1 ? _scopeStack[_scopeStack.length - 2] : null;\n      var isUnstackingFunctionBody = _current === _currentFunctBody,\n        isUnstackingFunctionParams = _current[\"(type)\"] === \"functionparams\",\n        isUnstackingFunctionOuter = _current[\"(type)\"] === \"functionouter\";\n\n      var i, j;\n      var currentUsages = _current[\"(usages)\"];\n      var currentLabels = _current[\"(labels)\"];\n      var usedLabelNameList = Object.keys(currentUsages);\n\n      if (currentUsages.__proto__ && usedLabelNameList.indexOf(\"__proto__\") === -1) {\n        usedLabelNameList.push(\"__proto__\");\n      }\n\n      for (i = 0; i < usedLabelNameList.length; i++) {\n        var usedLabelName = usedLabelNameList[i];\n\n        var usage = currentUsages[usedLabelName];\n        var usedLabel = currentLabels[usedLabelName];\n        if (usedLabel) {\n          var usedLabelType = usedLabel[\"(type)\"];\n\n          if (usedLabel[\"(useOutsideOfScope)\"] && !state.option.funcscope) {\n            var usedTokens = usage[\"(tokens)\"];\n            if (usedTokens) {\n              for (j = 0; j < usedTokens.length; j++) {\n                if (usedLabel[\"(function)\"] === usedTokens[j][\"(function)\"]) {\n                  error(\"W038\", usedTokens[j], usedLabelName);\n                }\n              }\n            }\n          }\n          _current[\"(labels)\"][usedLabelName][\"(unused)\"] = false;\n          if (usedLabelType === \"const\" && usage[\"(modified)\"]) {\n            for (j = 0; j < usage[\"(modified)\"].length; j++) {\n              error(\"E013\", usage[\"(modified)\"][j], usedLabelName);\n            }\n          }\n          if ((usedLabelType === \"function\" || usedLabelType === \"class\") &&\n              usage[\"(reassigned)\"]) {\n            for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n              error(\"W021\", usage[\"(reassigned)\"][j], usedLabelName, usedLabelType);\n            }\n          }\n          continue;\n        }\n\n        if (isUnstackingFunctionOuter) {\n          state.funct[\"(isCapturing)\"] = true;\n        }\n\n        if (subScope) {\n          if (!subScope[\"(usages)\"][usedLabelName]) {\n            subScope[\"(usages)\"][usedLabelName] = usage;\n            if (isUnstackingFunctionBody) {\n              subScope[\"(usages)\"][usedLabelName][\"(onlyUsedSubFunction)\"] = true;\n            }\n          } else {\n            var subScopeUsage = subScope[\"(usages)\"][usedLabelName];\n            subScopeUsage[\"(modified)\"] = subScopeUsage[\"(modified)\"].concat(usage[\"(modified)\"]);\n            subScopeUsage[\"(tokens)\"] = subScopeUsage[\"(tokens)\"].concat(usage[\"(tokens)\"]);\n            subScopeUsage[\"(reassigned)\"] =\n              subScopeUsage[\"(reassigned)\"].concat(usage[\"(reassigned)\"]);\n            subScopeUsage[\"(onlyUsedSubFunction)\"] = false;\n          }\n        } else {\n          if (typeof _current[\"(predefined)\"][usedLabelName] === \"boolean\") {\n            delete declared[usedLabelName];\n            usedPredefinedAndGlobals[usedLabelName] = marker;\n            if (_current[\"(predefined)\"][usedLabelName] === false && usage[\"(reassigned)\"]) {\n              for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n                warning(\"W020\", usage[\"(reassigned)\"][j]);\n              }\n            }\n          }\n          else {\n            if (usage[\"(tokens)\"]) {\n              for (j = 0; j < usage[\"(tokens)\"].length; j++) {\n                var undefinedToken = usage[\"(tokens)\"][j];\n                if (!undefinedToken.forgiveUndef) {\n                  if (state.option.undef && !undefinedToken.ignoreUndef) {\n                    warning(\"W117\", undefinedToken, usedLabelName);\n                  }\n                  if (impliedGlobals[usedLabelName]) {\n                    impliedGlobals[usedLabelName].line.push(undefinedToken.line);\n                  } else {\n                    impliedGlobals[usedLabelName] = {\n                      name: usedLabelName,\n                      line: [undefinedToken.line]\n                    };\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n      if (!subScope) {\n        Object.keys(declared)\n          .forEach(function(labelNotUsed) {\n            _warnUnused(labelNotUsed, declared[labelNotUsed], \"var\");\n          });\n      }\n      if (subScope && !isUnstackingFunctionBody &&\n        !isUnstackingFunctionParams && !isUnstackingFunctionOuter) {\n        var labelNames = Object.keys(currentLabels);\n        for (i = 0; i < labelNames.length; i++) {\n\n          var defLabelName = labelNames[i];\n          if (!currentLabels[defLabelName][\"(blockscoped)\"] &&\n            currentLabels[defLabelName][\"(type)\"] !== \"exception\" &&\n            !this.funct.has(defLabelName, { excludeCurrent: true })) {\n            subScope[\"(labels)\"][defLabelName] = currentLabels[defLabelName];\n            if (_currentFunctBody[\"(type)\"] !== \"global\") {\n              subScope[\"(labels)\"][defLabelName][\"(useOutsideOfScope)\"] = true;\n            }\n            delete currentLabels[defLabelName];\n          }\n        }\n      }\n\n      _checkForUnused();\n\n      _scopeStack.pop();\n      if (isUnstackingFunctionBody) {\n        _currentFunctBody = _scopeStack[_.findLastIndex(_scopeStack, function(scope) {\n          return scope[\"(isFuncBody)\"] || scope[\"(type)\"] === \"global\";\n        })];\n      }\n\n      _current = subScope;\n    },\n    addParam: function(labelName, token, type) {\n      type = type || \"param\";\n\n      if (type === \"exception\") {\n        var previouslyDefinedLabelType = this.funct.labeltype(labelName);\n        if (previouslyDefinedLabelType && previouslyDefinedLabelType !== \"exception\") {\n          if (!state.option.node) {\n            warning(\"W002\", state.tokens.next, labelName);\n          }\n        }\n      }\n      if (_.has(_current[\"(labels)\"], labelName)) {\n        _current[\"(labels)\"][labelName].duplicated = true;\n      } else {\n        _checkOuterShadow(labelName, token, type);\n\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": token,\n          \"(unused)\": true };\n\n        _current[\"(params)\"].push(labelName);\n      }\n\n      if (_.has(_current[\"(usages)\"], labelName)) {\n        var usage = _current[\"(usages)\"][labelName];\n        if (usage[\"(onlyUsedSubFunction)\"]) {\n          _latedefWarning(type, labelName, token);\n        } else {\n          warning(\"E056\", token, labelName, type);\n        }\n      }\n    },\n\n    validateParams: function() {\n      if (_currentFunctBody[\"(type)\"] === \"global\") {\n        return;\n      }\n\n      var isStrict = state.isStrict();\n      var currentFunctParamScope = _currentFunctBody[\"(parent)\"];\n\n      if (!currentFunctParamScope[\"(params)\"]) {\n        return;\n      }\n\n      currentFunctParamScope[\"(params)\"].forEach(function(labelName) {\n        var label = currentFunctParamScope[\"(labels)\"][labelName];\n\n        if (label && label.duplicated) {\n          if (isStrict) {\n            warning(\"E011\", label[\"(token)\"], labelName);\n          } else if (state.option.shadow !== true) {\n            warning(\"W004\", label[\"(token)\"], labelName);\n          }\n        }\n      });\n    },\n\n    getUsedOrDefinedGlobals: function() {\n      var list = Object.keys(usedPredefinedAndGlobals);\n      if (usedPredefinedAndGlobals.__proto__ === marker &&\n        list.indexOf(\"__proto__\") === -1) {\n        list.push(\"__proto__\");\n      }\n\n      return list;\n    },\n    getImpliedGlobals: function() {\n      var values = _.values(impliedGlobals);\n      var hasProto = false;\n      if (impliedGlobals.__proto__) {\n        hasProto = values.some(function(value) {\n          return value.name === \"__proto__\";\n        });\n\n        if (!hasProto) {\n          values.push(impliedGlobals.__proto__);\n        }\n      }\n\n      return values;\n    },\n    getUnuseds: function() {\n      return unuseds;\n    },\n\n    has: function(labelName) {\n      return Boolean(_getLabel(labelName));\n    },\n\n    labeltype: function(labelName) {\n      var scopeLabels = _getLabel(labelName);\n      if (scopeLabels) {\n        return scopeLabels[labelName][\"(type)\"];\n      }\n      return null;\n    },\n    addExported: function(labelName) {\n      var globalLabels = _scopeStack[0][\"(labels)\"];\n      if (_.has(declared, labelName)) {\n        delete declared[labelName];\n      } else if (_.has(globalLabels, labelName)) {\n        globalLabels[labelName][\"(unused)\"] = false;\n      } else {\n        for (var i = 1; i < _scopeStack.length; i++) {\n          var scope = _scopeStack[i];\n          if (!scope[\"(type)\"]) {\n            if (_.has(scope[\"(labels)\"], labelName) &&\n                !scope[\"(labels)\"][labelName][\"(blockscoped)\"]) {\n              scope[\"(labels)\"][labelName][\"(unused)\"] = false;\n              return;\n            }\n          } else {\n            break;\n          }\n        }\n        exported[labelName] = true;\n      }\n    },\n    setExported: function(labelName, token) {\n      this.block.use(labelName, token);\n    },\n    addlabel: function(labelName, opts) {\n\n      var type  = opts.type;\n      var token = opts.token;\n      var isblockscoped = type === \"let\" || type === \"const\" || type === \"class\";\n      var isexported    = (isblockscoped ? _current : _currentFunctBody)[\"(type)\"] === \"global\" &&\n                          _.has(exported, labelName);\n      _checkOuterShadow(labelName, token, type);\n      if (isblockscoped) {\n\n        var declaredInCurrentScope = _current[\"(labels)\"][labelName];\n        if (!declaredInCurrentScope && _current === _currentFunctBody &&\n          _current[\"(type)\"] !== \"global\") {\n          declaredInCurrentScope = !!_currentFunctBody[\"(parent)\"][\"(labels)\"][labelName];\n        }\n        if (!declaredInCurrentScope && _current[\"(usages)\"][labelName]) {\n          var usage = _current[\"(usages)\"][labelName];\n          if (usage[\"(onlyUsedSubFunction)\"]) {\n            _latedefWarning(type, labelName, token);\n          } else {\n            warning(\"E056\", token, labelName, type);\n          }\n        }\n        if (declaredInCurrentScope) {\n          warning(\"E011\", token, labelName);\n        }\n        else if (state.option.shadow === \"outer\") {\n          if (scopeManagerInst.funct.has(labelName)) {\n            warning(\"W004\", token, labelName);\n          }\n        }\n\n        scopeManagerInst.block.add(labelName, type, token, !isexported);\n\n      } else {\n\n        var declaredInCurrentFunctionScope = scopeManagerInst.funct.has(labelName);\n        if (!declaredInCurrentFunctionScope && usedSoFarInCurrentFunction(labelName)) {\n          _latedefWarning(type, labelName, token);\n        }\n        if (scopeManagerInst.funct.has(labelName, { onlyBlockscoped: true })) {\n          warning(\"E011\", token, labelName);\n        } else if (state.option.shadow !== true) {\n          if (declaredInCurrentFunctionScope && labelName !== \"__proto__\") {\n            if (_currentFunctBody[\"(type)\"] !== \"global\") {\n              warning(\"W004\", token, labelName);\n            }\n          }\n        }\n\n        scopeManagerInst.funct.add(labelName, type, token, !isexported);\n\n        if (_currentFunctBody[\"(type)\"] === \"global\") {\n          usedPredefinedAndGlobals[labelName] = marker;\n        }\n      }\n    },\n\n    funct: {\n      labeltype: function(labelName, options) {\n        var onlyBlockscoped = options && options.onlyBlockscoped;\n        var excludeParams = options && options.excludeParams;\n        var currentScopeIndex = _scopeStack.length - (options && options.excludeCurrent ? 2 : 1);\n        for (var i = currentScopeIndex; i >= 0; i--) {\n          var current = _scopeStack[i];\n          if (current[\"(labels)\"][labelName] &&\n            (!onlyBlockscoped || current[\"(labels)\"][labelName][\"(blockscoped)\"])) {\n            return current[\"(labels)\"][labelName][\"(type)\"];\n          }\n          var scopeCheck = excludeParams ? _scopeStack[ i - 1 ] : current;\n          if (scopeCheck && scopeCheck[\"(type)\"] === \"functionparams\") {\n            return null;\n          }\n        }\n        return null;\n      },\n      hasBreakLabel: function(labelName) {\n        for (var i = _scopeStack.length - 1; i >= 0; i--) {\n          var current = _scopeStack[i];\n\n          if (current[\"(breakLabels)\"][labelName]) {\n            return true;\n          }\n          if (current[\"(type)\"] === \"functionparams\") {\n            return false;\n          }\n        }\n        return false;\n      },\n      has: function(labelName, options) {\n        return Boolean(this.labeltype(labelName, options));\n      },\n      add: function(labelName, type, tok, unused) {\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(blockscoped)\": false,\n          \"(function)\": _currentFunctBody,\n          \"(unused)\": unused };\n      }\n    },\n\n    block: {\n      isGlobal: function() {\n        return _current[\"(type)\"] === \"global\";\n      },\n\n      use: function(labelName, token) {\n        var paramScope = _currentFunctBody[\"(parent)\"];\n        if (paramScope && paramScope[\"(labels)\"][labelName] &&\n          paramScope[\"(labels)\"][labelName][\"(type)\"] === \"param\") {\n          if (!scopeManagerInst.funct.has(labelName,\n                { excludeParams: true, onlyBlockscoped: true })) {\n            paramScope[\"(labels)\"][labelName][\"(unused)\"] = false;\n          }\n        }\n\n        if (token && (state.ignored.W117 || state.option.undef === false)) {\n          token.ignoreUndef = true;\n        }\n\n        _setupUsages(labelName);\n\n        if (token) {\n          token[\"(function)\"] = _currentFunctBody;\n          _current[\"(usages)\"][labelName][\"(tokens)\"].push(token);\n        }\n      },\n\n      reassign: function(labelName, token) {\n\n        this.modify(labelName, token);\n\n        _current[\"(usages)\"][labelName][\"(reassigned)\"].push(token);\n      },\n\n      modify: function(labelName, token) {\n\n        _setupUsages(labelName);\n\n        _current[\"(usages)\"][labelName][\"(modified)\"].push(token);\n      },\n      add: function(labelName, type, tok, unused) {\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(blockscoped)\": true,\n          \"(unused)\": unused };\n      },\n\n      addBreakLabel: function(labelName, opts) {\n        var token = opts.token;\n        if (scopeManagerInst.funct.hasBreakLabel(labelName)) {\n          warning(\"E011\", token, labelName);\n        }\n        else if (state.option.shadow === \"outer\") {\n          if (scopeManagerInst.funct.has(labelName)) {\n            warning(\"W004\", token, labelName);\n          } else {\n            _checkOuterShadow(labelName, token);\n          }\n        }\n        _current[\"(breakLabels)\"][labelName] = token;\n      }\n    }\n  };\n  return scopeManagerInst;\n};\n\nmodule.exports = scopeManager;\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/state.js\":[function(_dereq_,module,exports){\n\"use strict\";\nvar NameStack = _dereq_(\"./name-stack.js\");\n\nvar state = {\n  syntax: {},\n  isStrict: function() {\n    return this.directive[\"use strict\"] || this.inClassBody ||\n      this.option.module || this.option.strict === \"implied\";\n  },\n\n  inMoz: function() {\n    return this.option.moz;\n  },\n  inES6: function() {\n    return this.option.moz || this.option.esversion >= 6;\n  },\n  inES5: function(strict) {\n    if (strict) {\n      return (!this.option.esversion || this.option.esversion === 5) && !this.option.moz;\n    }\n    return !this.option.esversion || this.option.esversion >= 5 || this.option.moz;\n  },\n\n\n  reset: function() {\n    this.tokens = {\n      prev: null,\n      next: null,\n      curr: null\n    };\n\n    this.option = {};\n    this.funct = null;\n    this.ignored = {};\n    this.directive = {};\n    this.jsonMode = false;\n    this.jsonWarnings = [];\n    this.lines = [];\n    this.tab = \"\";\n    this.cache = {}; // Node.JS doesn't have Map. Sniff.\n    this.ignoredLines = {};\n    this.forinifcheckneeded = false;\n    this.nameStack = new NameStack();\n    this.inClassBody = false;\n  }\n};\n\nexports.state = state;\n\n},{\"./name-stack.js\":\"/node_modules/jshint/src/name-stack.js\"}],\"/node_modules/jshint/src/style.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.register = function(linter) {\n\n  linter.on(\"Identifier\", function style_scanProto(data) {\n    if (linter.getOption(\"proto\")) {\n      return;\n    }\n\n    if (data.name === \"__proto__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name, \"6\" ]\n      });\n    }\n  });\n\n  linter.on(\"Identifier\", function style_scanIterator(data) {\n    if (linter.getOption(\"iterator\")) {\n      return;\n    }\n\n    if (data.name === \"__iterator__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  linter.on(\"Identifier\", function style_scanCamelCase(data) {\n    if (!linter.getOption(\"camelcase\")) {\n      return;\n    }\n\n    if (data.name.replace(/^_+|_+$/g, \"\").indexOf(\"_\") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) {\n      linter.warn(\"W106\", {\n        line: data.line,\n        char: data.from,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  linter.on(\"String\", function style_scanQuotes(data) {\n    var quotmark = linter.getOption(\"quotmark\");\n    var code;\n\n    if (!quotmark) {\n      return;\n    }\n\n    if (quotmark === \"single\" && data.quote !== \"'\") {\n      code = \"W109\";\n    }\n\n    if (quotmark === \"double\" && data.quote !== \"\\\"\") {\n      code = \"W108\";\n    }\n\n    if (quotmark === true) {\n      if (!linter.getCache(\"quotmark\")) {\n        linter.setCache(\"quotmark\", data.quote);\n      }\n\n      if (linter.getCache(\"quotmark\") !== data.quote) {\n        code = \"W110\";\n      }\n    }\n\n    if (code) {\n      linter.warn(code, {\n        line: data.line,\n        char: data.char,\n      });\n    }\n  });\n\n  linter.on(\"Number\", function style_scanNumbers(data) {\n    if (data.value.charAt(0) === \".\") {\n      linter.warn(\"W008\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (data.value.substr(data.value.length - 1) === \".\") {\n      linter.warn(\"W047\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (/^00+/.test(data.value)) {\n      linter.warn(\"W046\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n  });\n\n  linter.on(\"String\", function style_scanJavaScriptURLs(data) {\n    var re = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\n\n    if (linter.getOption(\"scripturl\")) {\n      return;\n    }\n\n    if (re.test(data.value)) {\n      linter.warn(\"W107\", {\n        line: data.line,\n        char: data.char\n      });\n    }\n  });\n};\n\n},{}],\"/node_modules/jshint/src/vars.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nexports.reservedVars = {\n  arguments : false,\n  NaN       : false\n};\n\nexports.ecmaIdentifiers = {\n  3: {\n    Array              : false,\n    Boolean            : false,\n    Date               : false,\n    decodeURI          : false,\n    decodeURIComponent : false,\n    encodeURI          : false,\n    encodeURIComponent : false,\n    Error              : false,\n    \"eval\"             : false,\n    EvalError          : false,\n    Function           : false,\n    hasOwnProperty     : false,\n    isFinite           : false,\n    isNaN              : false,\n    Math               : false,\n    Number             : false,\n    Object             : false,\n    parseInt           : false,\n    parseFloat         : false,\n    RangeError         : false,\n    ReferenceError     : false,\n    RegExp             : false,\n    String             : false,\n    SyntaxError        : false,\n    TypeError          : false,\n    URIError           : false\n  },\n  5: {\n    JSON               : false\n  },\n  6: {\n    Map                : false,\n    Promise            : false,\n    Proxy              : false,\n    Reflect            : false,\n    Set                : false,\n    Symbol             : false,\n    WeakMap            : false,\n    WeakSet            : false\n  }\n};\n\nexports.browser = {\n  Audio                : false,\n  Blob                 : false,\n  addEventListener     : false,\n  applicationCache     : false,\n  atob                 : false,\n  blur                 : false,\n  btoa                 : false,\n  cancelAnimationFrame : false,\n  CanvasGradient       : false,\n  CanvasPattern        : false,\n  CanvasRenderingContext2D: false,\n  CSS                  : false,\n  clearInterval        : false,\n  clearTimeout         : false,\n  close                : false,\n  closed               : false,\n  Comment              : false,\n  CustomEvent          : false,\n  DOMParser            : false,\n  defaultStatus        : false,\n  Document             : false,\n  document             : false,\n  DocumentFragment     : false,\n  Element              : false,\n  ElementTimeControl   : false,\n  Event                : false,\n  event                : false,\n  fetch                : false,\n  FileReader           : false,\n  FormData             : false,\n  focus                : false,\n  frames               : false,\n  getComputedStyle     : false,\n  HTMLElement          : false,\n  HTMLAnchorElement    : false,\n  HTMLBaseElement      : false,\n  HTMLBlockquoteElement: false,\n  HTMLBodyElement      : false,\n  HTMLBRElement        : false,\n  HTMLButtonElement    : false,\n  HTMLCanvasElement    : false,\n  HTMLCollection       : false,\n  HTMLDirectoryElement : false,\n  HTMLDivElement       : false,\n  HTMLDListElement     : false,\n  HTMLFieldSetElement  : false,\n  HTMLFontElement      : false,\n  HTMLFormElement      : false,\n  HTMLFrameElement     : false,\n  HTMLFrameSetElement  : false,\n  HTMLHeadElement      : false,\n  HTMLHeadingElement   : false,\n  HTMLHRElement        : false,\n  HTMLHtmlElement      : false,\n  HTMLIFrameElement    : false,\n  HTMLImageElement     : false,\n  HTMLInputElement     : false,\n  HTMLIsIndexElement   : false,\n  HTMLLabelElement     : false,\n  HTMLLayerElement     : false,\n  HTMLLegendElement    : false,\n  HTMLLIElement        : false,\n  HTMLLinkElement      : false,\n  HTMLMapElement       : false,\n  HTMLMenuElement      : false,\n  HTMLMetaElement      : false,\n  HTMLModElement       : false,\n  HTMLObjectElement    : false,\n  HTMLOListElement     : false,\n  HTMLOptGroupElement  : false,\n  HTMLOptionElement    : false,\n  HTMLParagraphElement : false,\n  HTMLParamElement     : false,\n  HTMLPreElement       : false,\n  HTMLQuoteElement     : false,\n  HTMLScriptElement    : false,\n  HTMLSelectElement    : false,\n  HTMLStyleElement     : false,\n  HTMLTableCaptionElement: false,\n  HTMLTableCellElement : false,\n  HTMLTableColElement  : false,\n  HTMLTableElement     : false,\n  HTMLTableRowElement  : false,\n  HTMLTableSectionElement: false,\n  HTMLTemplateElement  : false,\n  HTMLTextAreaElement  : false,\n  HTMLTitleElement     : false,\n  HTMLUListElement     : false,\n  HTMLVideoElement     : false,\n  history              : false,\n  Image                : false,\n  Intl                 : false,\n  length               : false,\n  localStorage         : false,\n  location             : false,\n  matchMedia           : false,\n  MessageChannel       : false,\n  MessageEvent         : false,\n  MessagePort          : false,\n  MouseEvent           : false,\n  moveBy               : false,\n  moveTo               : false,\n  MutationObserver     : false,\n  name                 : false,\n  Node                 : false,\n  NodeFilter           : false,\n  NodeList             : false,\n  Notification         : false,\n  navigator            : false,\n  onbeforeunload       : true,\n  onblur               : true,\n  onerror              : true,\n  onfocus              : true,\n  onload               : true,\n  onresize             : true,\n  onunload             : true,\n  open                 : false,\n  openDatabase         : false,\n  opener               : false,\n  Option               : false,\n  parent               : false,\n  performance          : false,\n  print                : false,\n  Range                : false,\n  requestAnimationFrame : false,\n  removeEventListener  : false,\n  resizeBy             : false,\n  resizeTo             : false,\n  screen               : false,\n  scroll               : false,\n  scrollBy             : false,\n  scrollTo             : false,\n  sessionStorage       : false,\n  setInterval          : false,\n  setTimeout           : false,\n  SharedWorker         : false,\n  status               : false,\n  SVGAElement          : false,\n  SVGAltGlyphDefElement: false,\n  SVGAltGlyphElement   : false,\n  SVGAltGlyphItemElement: false,\n  SVGAngle             : false,\n  SVGAnimateColorElement: false,\n  SVGAnimateElement    : false,\n  SVGAnimateMotionElement: false,\n  SVGAnimateTransformElement: false,\n  SVGAnimatedAngle     : false,\n  SVGAnimatedBoolean   : false,\n  SVGAnimatedEnumeration: false,\n  SVGAnimatedInteger   : false,\n  SVGAnimatedLength    : false,\n  SVGAnimatedLengthList: false,\n  SVGAnimatedNumber    : false,\n  SVGAnimatedNumberList: false,\n  SVGAnimatedPathData  : false,\n  SVGAnimatedPoints    : false,\n  SVGAnimatedPreserveAspectRatio: false,\n  SVGAnimatedRect      : false,\n  SVGAnimatedString    : false,\n  SVGAnimatedTransformList: false,\n  SVGAnimationElement  : false,\n  SVGCSSRule           : false,\n  SVGCircleElement     : false,\n  SVGClipPathElement   : false,\n  SVGColor             : false,\n  SVGColorProfileElement: false,\n  SVGColorProfileRule  : false,\n  SVGComponentTransferFunctionElement: false,\n  SVGCursorElement     : false,\n  SVGDefsElement       : false,\n  SVGDescElement       : false,\n  SVGDocument          : false,\n  SVGElement           : false,\n  SVGElementInstance   : false,\n  SVGElementInstanceList: false,\n  SVGEllipseElement    : false,\n  SVGExternalResourcesRequired: false,\n  SVGFEBlendElement    : false,\n  SVGFEColorMatrixElement: false,\n  SVGFEComponentTransferElement: false,\n  SVGFECompositeElement: false,\n  SVGFEConvolveMatrixElement: false,\n  SVGFEDiffuseLightingElement: false,\n  SVGFEDisplacementMapElement: false,\n  SVGFEDistantLightElement: false,\n  SVGFEFloodElement    : false,\n  SVGFEFuncAElement    : false,\n  SVGFEFuncBElement    : false,\n  SVGFEFuncGElement    : false,\n  SVGFEFuncRElement    : false,\n  SVGFEGaussianBlurElement: false,\n  SVGFEImageElement    : false,\n  SVGFEMergeElement    : false,\n  SVGFEMergeNodeElement: false,\n  SVGFEMorphologyElement: false,\n  SVGFEOffsetElement   : false,\n  SVGFEPointLightElement: false,\n  SVGFESpecularLightingElement: false,\n  SVGFESpotLightElement: false,\n  SVGFETileElement     : false,\n  SVGFETurbulenceElement: false,\n  SVGFilterElement     : false,\n  SVGFilterPrimitiveStandardAttributes: false,\n  SVGFitToViewBox      : false,\n  SVGFontElement       : false,\n  SVGFontFaceElement   : false,\n  SVGFontFaceFormatElement: false,\n  SVGFontFaceNameElement: false,\n  SVGFontFaceSrcElement: false,\n  SVGFontFaceUriElement: false,\n  SVGForeignObjectElement: false,\n  SVGGElement          : false,\n  SVGGlyphElement      : false,\n  SVGGlyphRefElement   : false,\n  SVGGradientElement   : false,\n  SVGHKernElement      : false,\n  SVGICCColor          : false,\n  SVGImageElement      : false,\n  SVGLangSpace         : false,\n  SVGLength            : false,\n  SVGLengthList        : false,\n  SVGLineElement       : false,\n  SVGLinearGradientElement: false,\n  SVGLocatable         : false,\n  SVGMPathElement      : false,\n  SVGMarkerElement     : false,\n  SVGMaskElement       : false,\n  SVGMatrix            : false,\n  SVGMetadataElement   : false,\n  SVGMissingGlyphElement: false,\n  SVGNumber            : false,\n  SVGNumberList        : false,\n  SVGPaint             : false,\n  SVGPathElement       : false,\n  SVGPathSeg           : false,\n  SVGPathSegArcAbs     : false,\n  SVGPathSegArcRel     : false,\n  SVGPathSegClosePath  : false,\n  SVGPathSegCurvetoCubicAbs: false,\n  SVGPathSegCurvetoCubicRel: false,\n  SVGPathSegCurvetoCubicSmoothAbs: false,\n  SVGPathSegCurvetoCubicSmoothRel: false,\n  SVGPathSegCurvetoQuadraticAbs: false,\n  SVGPathSegCurvetoQuadraticRel: false,\n  SVGPathSegCurvetoQuadraticSmoothAbs: false,\n  SVGPathSegCurvetoQuadraticSmoothRel: false,\n  SVGPathSegLinetoAbs  : false,\n  SVGPathSegLinetoHorizontalAbs: false,\n  SVGPathSegLinetoHorizontalRel: false,\n  SVGPathSegLinetoRel  : false,\n  SVGPathSegLinetoVerticalAbs: false,\n  SVGPathSegLinetoVerticalRel: false,\n  SVGPathSegList       : false,\n  SVGPathSegMovetoAbs  : false,\n  SVGPathSegMovetoRel  : false,\n  SVGPatternElement    : false,\n  SVGPoint             : false,\n  SVGPointList         : false,\n  SVGPolygonElement    : false,\n  SVGPolylineElement   : false,\n  SVGPreserveAspectRatio: false,\n  SVGRadialGradientElement: false,\n  SVGRect              : false,\n  SVGRectElement       : false,\n  SVGRenderingIntent   : false,\n  SVGSVGElement        : false,\n  SVGScriptElement     : false,\n  SVGSetElement        : false,\n  SVGStopElement       : false,\n  SVGStringList        : false,\n  SVGStylable          : false,\n  SVGStyleElement      : false,\n  SVGSwitchElement     : false,\n  SVGSymbolElement     : false,\n  SVGTRefElement       : false,\n  SVGTSpanElement      : false,\n  SVGTests             : false,\n  SVGTextContentElement: false,\n  SVGTextElement       : false,\n  SVGTextPathElement   : false,\n  SVGTextPositioningElement: false,\n  SVGTitleElement      : false,\n  SVGTransform         : false,\n  SVGTransformList     : false,\n  SVGTransformable     : false,\n  SVGURIReference      : false,\n  SVGUnitTypes         : false,\n  SVGUseElement        : false,\n  SVGVKernElement      : false,\n  SVGViewElement       : false,\n  SVGViewSpec          : false,\n  SVGZoomAndPan        : false,\n  Text                 : false,\n  TextDecoder          : false,\n  TextEncoder          : false,\n  TimeEvent            : false,\n  top                  : false,\n  URL                  : false,\n  WebGLActiveInfo      : false,\n  WebGLBuffer          : false,\n  WebGLContextEvent    : false,\n  WebGLFramebuffer     : false,\n  WebGLProgram         : false,\n  WebGLRenderbuffer    : false,\n  WebGLRenderingContext: false,\n  WebGLShader          : false,\n  WebGLShaderPrecisionFormat: false,\n  WebGLTexture         : false,\n  WebGLUniformLocation : false,\n  WebSocket            : false,\n  window               : false,\n  Window               : false,\n  Worker               : false,\n  XDomainRequest       : false,\n  XMLHttpRequest       : false,\n  XMLSerializer        : false,\n  XPathEvaluator       : false,\n  XPathException       : false,\n  XPathExpression      : false,\n  XPathNamespace       : false,\n  XPathNSResolver      : false,\n  XPathResult          : false\n};\n\nexports.devel = {\n  alert  : false,\n  confirm: false,\n  console: false,\n  Debug  : false,\n  opera  : false,\n  prompt : false\n};\n\nexports.worker = {\n  importScripts  : true,\n  postMessage    : true,\n  self           : true,\n  FileReaderSync : true\n};\nexports.nonstandard = {\n  escape  : false,\n  unescape: false\n};\n\nexports.couch = {\n  \"require\" : false,\n  respond   : false,\n  getRow    : false,\n  emit      : false,\n  send      : false,\n  start     : false,\n  sum       : false,\n  log       : false,\n  exports   : false,\n  module    : false,\n  provides  : false\n};\n\nexports.node = {\n  __filename    : false,\n  __dirname     : false,\n  GLOBAL        : false,\n  global        : false,\n  module        : false,\n  require       : false,\n\n  Buffer        : true,\n  console       : true,\n  exports       : true,\n  process       : true,\n  setTimeout    : true,\n  clearTimeout  : true,\n  setInterval   : true,\n  clearInterval : true,\n  setImmediate  : true, // v0.9.1+\n  clearImmediate: true  // v0.9.1+\n};\n\nexports.browserify = {\n  __filename    : false,\n  __dirname     : false,\n  global        : false,\n  module        : false,\n  require       : false,\n  Buffer        : true,\n  exports       : true,\n  process       : true\n};\n\nexports.phantom = {\n  phantom      : true,\n  require      : true,\n  WebPage      : true,\n  console      : true, // in examples, but undocumented\n  exports      : true  // v1.7+\n};\n\nexports.qunit = {\n  asyncTest      : false,\n  deepEqual      : false,\n  equal          : false,\n  expect         : false,\n  module         : false,\n  notDeepEqual   : false,\n  notEqual       : false,\n  notPropEqual   : false,\n  notStrictEqual : false,\n  ok             : false,\n  propEqual      : false,\n  QUnit          : false,\n  raises         : false,\n  start          : false,\n  stop           : false,\n  strictEqual    : false,\n  test           : false,\n  \"throws\"       : false\n};\n\nexports.rhino = {\n  defineClass  : false,\n  deserialize  : false,\n  gc           : false,\n  help         : false,\n  importClass  : false,\n  importPackage: false,\n  \"java\"       : false,\n  load         : false,\n  loadClass    : false,\n  Packages     : false,\n  print        : false,\n  quit         : false,\n  readFile     : false,\n  readUrl      : false,\n  runCommand   : false,\n  seal         : false,\n  serialize    : false,\n  spawn        : false,\n  sync         : false,\n  toint32      : false,\n  version      : false\n};\n\nexports.shelljs = {\n  target       : false,\n  echo         : false,\n  exit         : false,\n  cd           : false,\n  pwd          : false,\n  ls           : false,\n  find         : false,\n  cp           : false,\n  rm           : false,\n  mv           : false,\n  mkdir        : false,\n  test         : false,\n  cat          : false,\n  sed          : false,\n  grep         : false,\n  which        : false,\n  dirs         : false,\n  pushd        : false,\n  popd         : false,\n  env          : false,\n  exec         : false,\n  chmod        : false,\n  config       : false,\n  error        : false,\n  tempdir      : false\n};\n\nexports.typed = {\n  ArrayBuffer         : false,\n  ArrayBufferView     : false,\n  DataView            : false,\n  Float32Array        : false,\n  Float64Array        : false,\n  Int16Array          : false,\n  Int32Array          : false,\n  Int8Array           : false,\n  Uint16Array         : false,\n  Uint32Array         : false,\n  Uint8Array          : false,\n  Uint8ClampedArray   : false\n};\n\nexports.wsh = {\n  ActiveXObject            : true,\n  Enumerator               : true,\n  GetObject                : true,\n  ScriptEngine             : true,\n  ScriptEngineBuildVersion : true,\n  ScriptEngineMajorVersion : true,\n  ScriptEngineMinorVersion : true,\n  VBArray                  : true,\n  WSH                      : true,\n  WScript                  : true,\n  XDomainRequest           : true\n};\n\nexports.dojo = {\n  dojo     : false,\n  dijit    : false,\n  dojox    : false,\n  define   : false,\n  \"require\": false\n};\n\nexports.jquery = {\n  \"$\"    : false,\n  jQuery : false\n};\n\nexports.mootools = {\n  \"$\"           : false,\n  \"$$\"          : false,\n  Asset         : false,\n  Browser       : false,\n  Chain         : false,\n  Class         : false,\n  Color         : false,\n  Cookie        : false,\n  Core          : false,\n  Document      : false,\n  DomReady      : false,\n  DOMEvent      : false,\n  DOMReady      : false,\n  Drag          : false,\n  Element       : false,\n  Elements      : false,\n  Event         : false,\n  Events        : false,\n  Fx            : false,\n  Group         : false,\n  Hash          : false,\n  HtmlTable     : false,\n  IFrame        : false,\n  IframeShim    : false,\n  InputValidator: false,\n  instanceOf    : false,\n  Keyboard      : false,\n  Locale        : false,\n  Mask          : false,\n  MooTools      : false,\n  Native        : false,\n  Options       : false,\n  OverText      : false,\n  Request       : false,\n  Scroller      : false,\n  Slick         : false,\n  Slider        : false,\n  Sortables     : false,\n  Spinner       : false,\n  Swiff         : false,\n  Tips          : false,\n  Type          : false,\n  typeOf        : false,\n  URI           : false,\n  Window        : false\n};\n\nexports.prototypejs = {\n  \"$\"               : false,\n  \"$$\"              : false,\n  \"$A\"              : false,\n  \"$F\"              : false,\n  \"$H\"              : false,\n  \"$R\"              : false,\n  \"$break\"          : false,\n  \"$continue\"       : false,\n  \"$w\"              : false,\n  Abstract          : false,\n  Ajax              : false,\n  Class             : false,\n  Enumerable        : false,\n  Element           : false,\n  Event             : false,\n  Field             : false,\n  Form              : false,\n  Hash              : false,\n  Insertion         : false,\n  ObjectRange       : false,\n  PeriodicalExecuter: false,\n  Position          : false,\n  Prototype         : false,\n  Selector          : false,\n  Template          : false,\n  Toggle            : false,\n  Try               : false,\n  Autocompleter     : false,\n  Builder           : false,\n  Control           : false,\n  Draggable         : false,\n  Draggables        : false,\n  Droppables        : false,\n  Effect            : false,\n  Sortable          : false,\n  SortableObserver  : false,\n  Sound             : false,\n  Scriptaculous     : false\n};\n\nexports.yui = {\n  YUI       : false,\n  Y         : false,\n  YUI_config: false\n};\n\nexports.mocha = {\n  mocha       : false,\n  describe    : false,\n  xdescribe   : false,\n  it          : false,\n  xit         : false,\n  context     : false,\n  xcontext    : false,\n  before      : false,\n  after       : false,\n  beforeEach  : false,\n  afterEach   : false,\n  suite         : false,\n  test          : false,\n  setup         : false,\n  teardown      : false,\n  suiteSetup    : false,\n  suiteTeardown : false\n};\n\nexports.jasmine = {\n  jasmine     : false,\n  describe    : false,\n  xdescribe   : false,\n  it          : false,\n  xit         : false,\n  beforeEach  : false,\n  afterEach   : false,\n  setFixtures : false,\n  loadFixtures: false,\n  spyOn       : false,\n  expect      : false,\n  runs        : false,\n  waitsFor    : false,\n  waits       : false,\n  beforeAll   : false,\n  afterAll    : false,\n  fail        : false,\n  fdescribe   : false,\n  fit         : false,\n  pending     : false\n};\n\n},{}]},{},[\"/node_modules/jshint/src/jshint.js\"]);\n\n});\n\ndefine(\"ace/mode/javascript_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar lint = require(\"./javascript/jshint\").JSHINT;\n\nfunction startRegex(arr) {\n    return RegExp(\"^(\" + arr.join(\"|\") + \")\");\n}\n\nvar disabledWarningsRe = startRegex([\n    \"Bad for in variable '(.+)'.\",\n    'Missing \"use strict\"'\n]);\nvar errorsRe = startRegex([\n    \"Unexpected\",\n    \"Expected \",\n    \"Confusing (plus|minus)\",\n    \"\\\\{a\\\\} unterminated regular expression\",\n    \"Unclosed \",\n    \"Unmatched \",\n    \"Unbegun comment\",\n    \"Bad invocation\",\n    \"Missing space after\",\n    \"Missing operator at\"\n]);\nvar infoRe = startRegex([\n    \"Expected an assignment\",\n    \"Bad escapement of EOL\",\n    \"Unexpected comma\",\n    \"Unexpected space\",\n    \"Missing radix parameter.\",\n    \"A leading decimal point can\",\n    \"\\\\['{a}'\\\\] is better written in dot notation.\",\n    \"'{a}' used out of scope\"\n]);\n\nvar JavaScriptWorker = exports.JavaScriptWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n    this.setOptions();\n};\n\noop.inherits(JavaScriptWorker, Mirror);\n\n(function() {\n    this.setOptions = function(options) {\n        this.options = options || {\n            esnext: true,\n            moz: true,\n            devel: true,\n            browser: true,\n            node: true,\n            laxcomma: true,\n            laxbreak: true,\n            lastsemic: true,\n            onevar: false,\n            passfail: false,\n            maxerr: 100,\n            expr: true,\n            multistr: true,\n            globalstrict: true\n        };\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.changeOptions = function(newOptions) {\n        oop.mixin(this.options, newOptions);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.isValidJS = function(str) {\n        try {\n            eval(\"throw 0;\" + str);\n        } catch(e) {\n            if (e === 0)\n                return true;\n        }\n        return false;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        value = value.replace(/^#!.*\\n/, \"\\n\");\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n\n        var errors = [];\n        var maxErrorLevel = this.isValidJS(value) ? \"warning\" : \"error\";\n        lint(value, this.options, this.options.globals);\n        var results = lint.errors;\n\n        var errorAdded = false;\n        for (var i = 0; i < results.length; i++) {\n            var error = results[i];\n            if (!error)\n                continue;\n            var raw = error.raw;\n            var type = \"warning\";\n\n            if (raw == \"Missing semicolon.\") {\n                var str = error.evidence.substr(error.character);\n                str = str.charAt(str.search(/\\S/));\n                if (maxErrorLevel == \"error\" && str && /[\\w\\d{(['\"]/.test(str)) {\n                    error.reason = 'Missing \";\" before statement';\n                    type = \"error\";\n                } else {\n                    type = \"info\";\n                }\n            }\n            else if (disabledWarningsRe.test(raw)) {\n                continue;\n            }\n            else if (infoRe.test(raw)) {\n                type = \"info\";\n            }\n            else if (errorsRe.test(raw)) {\n                errorAdded  = true;\n                type = maxErrorLevel;\n            }\n            else if (raw == \"'{a}' is not defined.\") {\n                type = \"warning\";\n            }\n            else if (raw == \"'{a}' is defined but never used.\") {\n                type = \"info\";\n            }\n\n            errors.push({\n                row: error.line-1,\n                column: error.character-1,\n                text: error.reason,\n                type: type,\n                raw: raw\n            });\n\n            if (errorAdded) {\n            }\n        }\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(JavaScriptWorker.prototype);\n\n});\n\ndefine(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src/worker-json.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\ndefine(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\ndefine(\"ace/mode/json/json_parse\",[], function(require, exports, module) {\n\"use strict\";\n\n    var at,     // The index of the current character\n        ch,     // The current character\n        escapee = {\n            '\"':  '\"',\n            '\\\\': '\\\\',\n            '/':  '/',\n            b:    '\\b',\n            f:    '\\f',\n            n:    '\\n',\n            r:    '\\r',\n            t:    '\\t'\n        },\n        text,\n\n        error = function (m) {\n\n            throw {\n                name:    'SyntaxError',\n                message: m,\n                at:      at,\n                text:    text\n            };\n        },\n\n        next = function (c) {\n\n            if (c && c !== ch) {\n                error(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\n            }\n\n            ch = text.charAt(at);\n            at += 1;\n            return ch;\n        },\n\n        number = function () {\n\n            var number,\n                string = '';\n\n            if (ch === '-') {\n                string = '-';\n                next('-');\n            }\n            while (ch >= '0' && ch <= '9') {\n                string += ch;\n                next();\n            }\n            if (ch === '.') {\n                string += '.';\n                while (next() && ch >= '0' && ch <= '9') {\n                    string += ch;\n                }\n            }\n            if (ch === 'e' || ch === 'E') {\n                string += ch;\n                next();\n                if (ch === '-' || ch === '+') {\n                    string += ch;\n                    next();\n                }\n                while (ch >= '0' && ch <= '9') {\n                    string += ch;\n                    next();\n                }\n            }\n            number = +string;\n            if (isNaN(number)) {\n                error(\"Bad number\");\n            } else {\n                return number;\n            }\n        },\n\n        string = function () {\n\n            var hex,\n                i,\n                string = '',\n                uffff;\n\n            if (ch === '\"') {\n                while (next()) {\n                    if (ch === '\"') {\n                        next();\n                        return string;\n                    } else if (ch === '\\\\') {\n                        next();\n                        if (ch === 'u') {\n                            uffff = 0;\n                            for (i = 0; i < 4; i += 1) {\n                                hex = parseInt(next(), 16);\n                                if (!isFinite(hex)) {\n                                    break;\n                                }\n                                uffff = uffff * 16 + hex;\n                            }\n                            string += String.fromCharCode(uffff);\n                        } else if (typeof escapee[ch] === 'string') {\n                            string += escapee[ch];\n                        } else {\n                            break;\n                        }\n                    } else if (ch == \"\\n\" || ch == \"\\r\") {\n                        break;\n                    } else {\n                        string += ch;\n                    }\n                }\n            }\n            error(\"Bad string\");\n        },\n\n        white = function () {\n\n            while (ch && ch <= ' ') {\n                next();\n            }\n        },\n\n        word = function () {\n\n            switch (ch) {\n            case 't':\n                next('t');\n                next('r');\n                next('u');\n                next('e');\n                return true;\n            case 'f':\n                next('f');\n                next('a');\n                next('l');\n                next('s');\n                next('e');\n                return false;\n            case 'n':\n                next('n');\n                next('u');\n                next('l');\n                next('l');\n                return null;\n            }\n            error(\"Unexpected '\" + ch + \"'\");\n        },\n\n        value,  // Place holder for the value function.\n\n        array = function () {\n\n            var array = [];\n\n            if (ch === '[') {\n                next('[');\n                white();\n                if (ch === ']') {\n                    next(']');\n                    return array;   // empty array\n                }\n                while (ch) {\n                    array.push(value());\n                    white();\n                    if (ch === ']') {\n                        next(']');\n                        return array;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error(\"Bad array\");\n        },\n\n        object = function () {\n\n            var key,\n                object = {};\n\n            if (ch === '{') {\n                next('{');\n                white();\n                if (ch === '}') {\n                    next('}');\n                    return object;   // empty object\n                }\n                while (ch) {\n                    key = string();\n                    white();\n                    next(':');\n                    if (Object.hasOwnProperty.call(object, key)) {\n                        error('Duplicate key \"' + key + '\"');\n                    }\n                    object[key] = value();\n                    white();\n                    if (ch === '}') {\n                        next('}');\n                        return object;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error(\"Bad object\");\n        };\n\n    value = function () {\n\n        white();\n        switch (ch) {\n        case '{':\n            return object();\n        case '[':\n            return array();\n        case '\"':\n            return string();\n        case '-':\n            return number();\n        default:\n            return ch >= '0' && ch <= '9' ? number() : word();\n        }\n    };\n\n    return function (source, reviver) {\n        var result;\n\n        text = source;\n        at = 0;\n        ch = ' ';\n        result = value();\n        white();\n        if (ch) {\n            error(\"Syntax error\");\n        }\n\n        return typeof reviver === 'function' ? function walk(holder, key) {\n            var k, v, value = holder[key];\n            if (value && typeof value === 'object') {\n                for (k in value) {\n                    if (Object.hasOwnProperty.call(value, k)) {\n                        v = walk(value, k);\n                        if (v !== undefined) {\n                            value[k] = v;\n                        } else {\n                            delete value[k];\n                        }\n                    }\n                }\n            }\n            return reviver.call(holder, key, value);\n        }({'': result}, '') : result;\n    };\n});\n\ndefine(\"ace/mode/json_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar parse = require(\"./json/json_parse\");\n\nvar JsonWorker = exports.JsonWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(200);\n};\n\noop.inherits(JsonWorker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            if (value)\n                parse(value);\n        } catch (e) {\n            var pos = this.doc.indexToPosition(e.at-1);\n            errors.push({\n                row: pos.row,\n                column: pos.column,\n                text: e.message,\n                type: \"error\"\n            });\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(JsonWorker.prototype);\n\n});\n\ndefine(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src/worker-lua.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\ndefine(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\ndefine(\"ace/mode/lua/luaparse\",[], function(require, exports, module) {\n\n(function (root, name, factory) {\n   factory(exports)\n}(this, 'luaparse', function (exports) {\n  'use strict';\n\n  exports.version = '0.1.4';\n\n  var input, options, length;\n  var defaultOptions = exports.defaultOptions = {\n      wait: false\n    , comments: true\n    , scope: false\n    , locations: false\n    , ranges: false\n  };\n\n  var EOF = 1, StringLiteral = 2, Keyword = 4, Identifier = 8\n    , NumericLiteral = 16, Punctuator = 32, BooleanLiteral = 64\n    , NilLiteral = 128, VarargLiteral = 256;\n\n  exports.tokenTypes = { EOF: EOF, StringLiteral: StringLiteral\n    , Keyword: Keyword, Identifier: Identifier, NumericLiteral: NumericLiteral\n    , Punctuator: Punctuator, BooleanLiteral: BooleanLiteral\n    , NilLiteral: NilLiteral, VarargLiteral: VarargLiteral\n  };\n\n  var errors = exports.errors = {\n      unexpected: 'Unexpected %1 \\'%2\\' near \\'%3\\''\n    , expected: '\\'%1\\' expected near \\'%2\\''\n    , expectedToken: '%1 expected near \\'%2\\''\n    , unfinishedString: 'unfinished string near \\'%1\\''\n    , malformedNumber: 'malformed number near \\'%1\\''\n  };\n\n  var ast = exports.ast = {\n      labelStatement: function(label) {\n      return {\n          type: 'LabelStatement'\n        , label: label\n      };\n    }\n\n    , breakStatement: function() {\n      return {\n          type: 'BreakStatement'\n      };\n    }\n\n    , gotoStatement: function(label) {\n      return {\n          type: 'GotoStatement'\n        , label: label\n      };\n    }\n\n    , returnStatement: function(args) {\n      return {\n          type: 'ReturnStatement'\n        , 'arguments': args\n      };\n    }\n\n    , ifStatement: function(clauses) {\n      return {\n          type: 'IfStatement'\n        , clauses: clauses\n      };\n    }\n    , ifClause: function(condition, body) {\n      return {\n          type: 'IfClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseifClause: function(condition, body) {\n      return {\n          type: 'ElseifClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseClause: function(body) {\n      return {\n          type: 'ElseClause'\n        , body: body\n      };\n    }\n\n    , whileStatement: function(condition, body) {\n      return {\n          type: 'WhileStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , doStatement: function(body) {\n      return {\n          type: 'DoStatement'\n        , body: body\n      };\n    }\n\n    , repeatStatement: function(condition, body) {\n      return {\n          type: 'RepeatStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , localStatement: function(variables, init) {\n      return {\n          type: 'LocalStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , assignmentStatement: function(variables, init) {\n      return {\n          type: 'AssignmentStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , callStatement: function(expression) {\n      return {\n          type: 'CallStatement'\n        , expression: expression\n      };\n    }\n\n    , functionStatement: function(identifier, parameters, isLocal, body) {\n      return {\n          type: 'FunctionDeclaration'\n        , identifier: identifier\n        , isLocal: isLocal\n        , parameters: parameters\n        , body: body\n      };\n    }\n\n    , forNumericStatement: function(variable, start, end, step, body) {\n      return {\n          type: 'ForNumericStatement'\n        , variable: variable\n        , start: start\n        , end: end\n        , step: step\n        , body: body\n      };\n    }\n\n    , forGenericStatement: function(variables, iterators, body) {\n      return {\n          type: 'ForGenericStatement'\n        , variables: variables\n        , iterators: iterators\n        , body: body\n      };\n    }\n\n    , chunk: function(body) {\n      return {\n          type: 'Chunk'\n        , body: body\n      };\n    }\n\n    , identifier: function(name) {\n      return {\n          type: 'Identifier'\n        , name: name\n      };\n    }\n\n    , literal: function(type, value, raw) {\n      type = (type === StringLiteral) ? 'StringLiteral'\n        : (type === NumericLiteral) ? 'NumericLiteral'\n        : (type === BooleanLiteral) ? 'BooleanLiteral'\n        : (type === NilLiteral) ? 'NilLiteral'\n        : 'VarargLiteral';\n\n      return {\n          type: type\n        , value: value\n        , raw: raw\n      };\n    }\n\n    , tableKey: function(key, value) {\n      return {\n          type: 'TableKey'\n        , key: key\n        , value: value\n      };\n    }\n    , tableKeyString: function(key, value) {\n      return {\n          type: 'TableKeyString'\n        , key: key\n        , value: value\n      };\n    }\n    , tableValue: function(value) {\n      return {\n          type: 'TableValue'\n        , value: value\n      };\n    }\n\n\n    , tableConstructorExpression: function(fields) {\n      return {\n          type: 'TableConstructorExpression'\n        , fields: fields\n      };\n    }\n    , binaryExpression: function(operator, left, right) {\n      var type = ('and' === operator || 'or' === operator) ?\n        'LogicalExpression' :\n        'BinaryExpression';\n\n      return {\n          type: type\n        , operator: operator\n        , left: left\n        , right: right\n      };\n    }\n    , unaryExpression: function(operator, argument) {\n      return {\n          type: 'UnaryExpression'\n        , operator: operator\n        , argument: argument\n      };\n    }\n    , memberExpression: function(base, indexer, identifier) {\n      return {\n          type: 'MemberExpression'\n        , indexer: indexer\n        , identifier: identifier\n        , base: base\n      };\n    }\n\n    , indexExpression: function(base, index) {\n      return {\n          type: 'IndexExpression'\n        , base: base\n        , index: index\n      };\n    }\n\n    , callExpression: function(base, args) {\n      return {\n          type: 'CallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , tableCallExpression: function(base, args) {\n      return {\n          type: 'TableCallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , stringCallExpression: function(base, argument) {\n      return {\n          type: 'StringCallExpression'\n        , base: base\n        , argument: argument\n      };\n    }\n\n    , comment: function(value, raw) {\n      return {\n          type: 'Comment'\n        , value: value\n        , raw: raw\n      };\n    }\n  };\n\n  function finishNode(node) {\n    if (trackLocations) {\n      var location = locations.pop();\n      location.complete();\n      if (options.locations) node.loc = location.loc;\n      if (options.ranges) node.range = location.range;\n    }\n    return node;\n  }\n\n  var slice = Array.prototype.slice\n    , toString = Object.prototype.toString\n    , indexOf = function indexOf(array, element) {\n      for (var i = 0, length = array.length; i < length; i++) {\n        if (array[i] === element) return i;\n      }\n      return -1;\n    };\n\n  function indexOfObject(array, property, element) {\n    for (var i = 0, length = array.length; i < length; i++) {\n      if (array[i][property] === element) return i;\n    }\n    return -1;\n  }\n\n  function sprintf(format) {\n    var args = slice.call(arguments, 1);\n    format = format.replace(/%(\\d)/g, function (match, index) {\n      return '' + args[index - 1] || '';\n    });\n    return format;\n  }\n\n  function extend() {\n    var args = slice.call(arguments)\n      , dest = {}\n      , src, prop;\n\n    for (var i = 0, length = args.length; i < length; i++) {\n      src = args[i];\n      for (prop in src) if (src.hasOwnProperty(prop)) {\n        dest[prop] = src[prop];\n      }\n    }\n    return dest;\n  }\n\n  function raise(token) {\n    var message = sprintf.apply(null, slice.call(arguments, 1))\n      , error, col;\n\n    if ('undefined' !== typeof token.line) {\n      col = token.range[0] - token.lineStart;\n      error = new SyntaxError(sprintf('[%1:%2] %3', token.line, col, message));\n      error.line = token.line;\n      error.index = token.range[0];\n      error.column = col;\n    } else {\n      col = index - lineStart + 1;\n      error = new SyntaxError(sprintf('[%1:%2] %3', line, col, message));\n      error.index = index;\n      error.line = line;\n      error.column = col;\n    }\n    throw error;\n  }\n\n  function raiseUnexpectedToken(type, token) {\n    raise(token, errors.expectedToken, type, token.value);\n  }\n\n  function unexpected(found, near) {\n    if ('undefined' === typeof near) near = lookahead.value;\n    if ('undefined' !== typeof found.type) {\n      var type;\n      switch (found.type) {\n        case StringLiteral:   type = 'string';      break;\n        case Keyword:         type = 'keyword';     break;\n        case Identifier:      type = 'identifier';  break;\n        case NumericLiteral:  type = 'number';      break;\n        case Punctuator:      type = 'symbol';      break;\n        case BooleanLiteral:  type = 'boolean';     break;\n        case NilLiteral:\n          return raise(found, errors.unexpected, 'symbol', 'nil', near);\n      }\n      return raise(found, errors.unexpected, type, found.value, near);\n    }\n    return raise(found, errors.unexpected, 'symbol', found, near);\n  }\n\n  var index\n    , token\n    , previousToken\n    , lookahead\n    , comments\n    , tokenStart\n    , line\n    , lineStart;\n\n  exports.lex = lex;\n\n  function lex() {\n    skipWhiteSpace();\n    while (45 === input.charCodeAt(index) &&\n           45 === input.charCodeAt(index + 1)) {\n      scanComment();\n      skipWhiteSpace();\n    }\n    if (index >= length) return {\n        type : EOF\n      , value: '<eof>'\n      , line: line\n      , lineStart: lineStart\n      , range: [index, index]\n    };\n\n    var charCode = input.charCodeAt(index)\n      , next = input.charCodeAt(index + 1);\n    tokenStart = index;\n    if (isIdentifierStart(charCode)) return scanIdentifierOrKeyword();\n\n    switch (charCode) {\n      case 39: case 34: // '\"\n        return scanStringLiteral();\n      case 48: case 49: case 50: case 51: case 52: case 53:\n      case 54: case 55: case 56: case 57:\n        return scanNumericLiteral();\n\n      case 46: // .\n        if (isDecDigit(next)) return scanNumericLiteral();\n        if (46 === next) {\n          if (46 === input.charCodeAt(index + 2)) return scanVarargLiteral();\n          return scanPunctuator('..');\n        }\n        return scanPunctuator('.');\n\n      case 61: // =\n        if (61 === next) return scanPunctuator('==');\n        return scanPunctuator('=');\n\n      case 62: // >\n        if (61 === next) return scanPunctuator('>=');\n        return scanPunctuator('>');\n\n      case 60: // <\n        if (61 === next) return scanPunctuator('<=');\n        return scanPunctuator('<');\n\n      case 126: // ~\n        if (61 === next) return scanPunctuator('~=');\n        return scanPunctuator('~');\n\n      case 58: // :\n        if (58 === next) return scanPunctuator('::');\n        return scanPunctuator(':');\n\n      case 91: // [\n        if (91 === next || 61 === next) return scanLongStringLiteral();\n        return scanPunctuator('[');\n      case 42: case 47: case 94: case 37: case 44: case 123: case 125:\n      case 93: case 40: case 41: case 59: case 35: case 45: case 43: case 38: case 124:\n        return scanPunctuator(input.charAt(index));\n    }\n\n    return unexpected(input.charAt(index));\n  }\n\n  function skipWhiteSpace() {\n    while (index < length) {\n      var charCode = input.charCodeAt(index);\n      if (isWhiteSpace(charCode)) {\n        index++;\n      } else if (isLineTerminator(charCode)) {\n        line++;\n        lineStart = ++index;\n      } else {\n        break;\n      }\n    }\n  }\n\n  function scanIdentifierOrKeyword() {\n    var value, type;\n    while (isIdentifierPart(input.charCodeAt(++index)));\n    value = input.slice(tokenStart, index);\n    if (isKeyword(value)) {\n      type = Keyword;\n    } else if ('true' === value || 'false' === value) {\n      type = BooleanLiteral;\n      value = ('true' === value);\n    } else if ('nil' === value) {\n      type = NilLiteral;\n      value = null;\n    } else {\n      type = Identifier;\n    }\n\n    return {\n        type: type\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanPunctuator(value) {\n    index += value.length;\n    return {\n        type: Punctuator\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanVarargLiteral() {\n    index += 3;\n    return {\n        type: VarargLiteral\n      , value: '...'\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanStringLiteral() {\n    var delimiter = input.charCodeAt(index++)\n      , stringStart = index\n      , string = ''\n      , charCode;\n\n    while (index < length) {\n      charCode = input.charCodeAt(index++);\n      if (delimiter === charCode) break;\n      if (92 === charCode) { // \\\n        string += input.slice(stringStart, index - 1) + readEscapeSequence();\n        stringStart = index;\n      }\n      else if (index >= length || isLineTerminator(charCode)) {\n        string += input.slice(stringStart, index - 1);\n        raise({}, errors.unfinishedString, string + String.fromCharCode(charCode));\n      }\n    }\n    string += input.slice(stringStart, index - 1);\n\n    return {\n        type: StringLiteral\n      , value: string\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanLongStringLiteral() {\n    var string = readLongString();\n    if (false === string) raise(token, errors.expected, '[', token.value);\n\n    return {\n        type: StringLiteral\n      , value: string\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanNumericLiteral() {\n    var character = input.charAt(index)\n      , next = input.charAt(index + 1);\n\n    var value = ('0' === character && 'xX'.indexOf(next || null) >= 0) ?\n      readHexLiteral() : readDecLiteral();\n\n    return {\n        type: NumericLiteral\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function readHexLiteral() {\n    var fraction = 0 // defaults to 0 as it gets summed\n      , binaryExponent = 1 // defaults to 1 as it gets multiplied\n      , binarySign = 1 // positive\n      , digit, fractionStart, exponentStart, digitStart;\n\n    digitStart = index += 2; // Skip 0x part\n    if (!isHexDigit(input.charCodeAt(index)))\n      raise({}, errors.malformedNumber, input.slice(tokenStart, index));\n\n    while (isHexDigit(input.charCodeAt(index))) index++;\n    digit = parseInt(input.slice(digitStart, index), 16);\n    if ('.' === input.charAt(index)) {\n      fractionStart = ++index;\n\n      while (isHexDigit(input.charCodeAt(index))) index++;\n      fraction = input.slice(fractionStart, index);\n      fraction = (fractionStart === index) ? 0\n        : parseInt(fraction, 16) / Math.pow(16, index - fractionStart);\n    }\n    if ('pP'.indexOf(input.charAt(index) || null) >= 0) {\n      index++;\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0)\n        binarySign = ('+' === input.charAt(index++)) ? 1 : -1;\n\n      exponentStart = index;\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise({}, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) index++;\n      binaryExponent = input.slice(exponentStart, index);\n      binaryExponent = Math.pow(2, binaryExponent * binarySign);\n    }\n\n    return (digit + fraction) * binaryExponent;\n  }\n\n  function readDecLiteral() {\n    while (isDecDigit(input.charCodeAt(index))) index++;\n    if ('.' === input.charAt(index)) {\n      index++;\n      while (isDecDigit(input.charCodeAt(index))) index++;\n    }\n    if ('eE'.indexOf(input.charAt(index) || null) >= 0) {\n      index++;\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0) index++;\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise({}, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) index++;\n    }\n\n    return parseFloat(input.slice(tokenStart, index));\n  }\n\n  function readEscapeSequence() {\n    var sequenceStart = index;\n    switch (input.charAt(index)) {\n      case 'n': index++; return '\\n';\n      case 'r': index++; return '\\r';\n      case 't': index++; return '\\t';\n      case 'v': index++; return '\\x0B';\n      case 'b': index++; return '\\b';\n      case 'f': index++; return '\\f';\n      case 'z': index++; skipWhiteSpace(); return '';\n      case 'x':\n        if (isHexDigit(input.charCodeAt(index + 1)) &&\n            isHexDigit(input.charCodeAt(index + 2))) {\n          index += 3;\n          return '\\\\' + input.slice(sequenceStart, index);\n        }\n        return '\\\\' + input.charAt(index++);\n      default:\n        if (isDecDigit(input.charCodeAt(index))) {\n          while (isDecDigit(input.charCodeAt(++index)));\n          return '\\\\' + input.slice(sequenceStart, index);\n        }\n        return input.charAt(index++);\n    }\n  }\n\n  function scanComment() {\n    tokenStart = index;\n    index += 2; // --\n\n    var character = input.charAt(index)\n      , content = ''\n      , isLong = false\n      , commentStart = index\n      , lineStartComment = lineStart\n      , lineComment = line;\n\n    if ('[' === character) {\n      content = readLongString();\n      if (false === content) content = character;\n      else isLong = true;\n    }\n    if (!isLong) {\n      while (index < length) {\n        if (isLineTerminator(input.charCodeAt(index))) break;\n        index++;\n      }\n      if (options.comments) content = input.slice(commentStart, index);\n    }\n\n    if (options.comments) {\n      var node = ast.comment(content, input.slice(tokenStart, index));\n      if (options.locations) {\n        node.loc = {\n            start: { line: lineComment, column: tokenStart - lineStartComment }\n          , end: { line: line, column: index - lineStart }\n        };\n      }\n      if (options.ranges) {\n        node.range = [tokenStart, index];\n      }\n      comments.push(node);\n    }\n  }\n\n  function readLongString() {\n    var level = 0\n      , content = ''\n      , terminator = false\n      , character, stringStart;\n\n    index++; // [\n    while ('=' === input.charAt(index + level)) level++;\n    if ('[' !== input.charAt(index + level)) return false;\n\n    index += level + 1;\n    if (isLineTerminator(input.charCodeAt(index))) {\n      line++;\n      lineStart = index++;\n    }\n\n    stringStart = index;\n    while (index < length) {\n      character = input.charAt(index++);\n      if (isLineTerminator(character.charCodeAt(0))) {\n        line++;\n        lineStart = index;\n      }\n      if (']' === character) {\n        terminator = true;\n        for (var i = 0; i < level; i++) {\n          if ('=' !== input.charAt(index + i)) terminator = false;\n        }\n        if (']' !== input.charAt(index + level)) terminator = false;\n      }\n      if (terminator) break;\n    }\n    content += input.slice(stringStart, index - 1);\n    index += level + 1;\n\n    return content;\n  }\n\n  function next() {\n    previousToken = token;\n    token = lookahead;\n    lookahead = lex();\n  }\n\n  function consume(value) {\n    if (value === token.value) {\n      next();\n      return true;\n    }\n    return false;\n  }\n\n  function expect(value) {\n    if (value === token.value) next();\n    else raise(token, errors.expected, value, token.value);\n  }\n\n  function isWhiteSpace(charCode) {\n    return 9 === charCode || 32 === charCode || 0xB === charCode || 0xC === charCode;\n  }\n\n  function isLineTerminator(charCode) {\n    return 10 === charCode || 13 === charCode;\n  }\n\n  function isDecDigit(charCode) {\n    return charCode >= 48 && charCode <= 57;\n  }\n\n  function isHexDigit(charCode) {\n    return (charCode >= 48 && charCode <= 57) || (charCode >= 97 && charCode <= 102) || (charCode >= 65 && charCode <= 70);\n  }\n\n  function isIdentifierStart(charCode) {\n    return (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode;\n  }\n\n  function isIdentifierPart(charCode) {\n    return (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode || (charCode >= 48 && charCode <= 57);\n  }\n\n  function isKeyword(id) {\n    switch (id.length) {\n      case 2:\n        return 'do' === id || 'if' === id || 'in' === id || 'or' === id;\n      case 3:\n        return 'and' === id || 'end' === id || 'for' === id || 'not' === id;\n      case 4:\n        return 'else' === id || 'goto' === id || 'then' === id;\n      case 5:\n        return 'break' === id || 'local' === id || 'until' === id || 'while' === id;\n      case 6:\n        return 'elseif' === id || 'repeat' === id || 'return' === id;\n      case 8:\n        return 'function' === id;\n    }\n    return false;\n  }\n\n  function isUnary(token) {\n    if (Punctuator === token.type) return '#-~'.indexOf(token.value) >= 0;\n    if (Keyword === token.type) return 'not' === token.value;\n    return false;\n  }\n  function isCallExpression(expression) {\n    switch (expression.type) {\n      case 'CallExpression':\n      case 'TableCallExpression':\n      case 'StringCallExpression':\n        return true;\n    }\n    return false;\n  }\n\n  function isBlockFollow(token) {\n    if (EOF === token.type) return true;\n    if (Keyword !== token.type) return false;\n    switch (token.value) {\n      case 'else': case 'elseif':\n      case 'end': case 'until':\n        return true;\n      default:\n        return false;\n    }\n  }\n  var scopes\n    , scopeDepth\n    , globals;\n  function createScope() {\n    scopes.push(Array.apply(null, scopes[scopeDepth++]));\n  }\n  function exitScope() {\n    scopes.pop();\n    scopeDepth--;\n  }\n  function scopeIdentifierName(name) {\n    if (-1 !== indexOf(scopes[scopeDepth], name)) return;\n    scopes[scopeDepth].push(name);\n  }\n  function scopeIdentifier(node) {\n    scopeIdentifierName(node.name);\n    attachScope(node, true);\n  }\n  function attachScope(node, isLocal) {\n    if (!isLocal && -1 === indexOfObject(globals, 'name', node.name))\n      globals.push(node);\n\n    node.isLocal = isLocal;\n  }\n  function scopeHasName(name) {\n    return (-1 !== indexOf(scopes[scopeDepth], name));\n  }\n\n  var locations = []\n    , trackLocations;\n\n  function createLocationMarker() {\n    return new Marker(token);\n  }\n\n  function Marker(token) {\n    if (options.locations) {\n      this.loc = {\n          start: {\n            line: token.line\n          , column: token.range[0] - token.lineStart\n        }\n        , end: {\n            line: 0\n          , column: 0\n        }\n      };\n    }\n    if (options.ranges) this.range = [token.range[0], 0];\n  }\n  Marker.prototype.complete = function() {\n    if (options.locations) {\n      this.loc.end.line = previousToken.line;\n      this.loc.end.column = previousToken.range[1] - previousToken.lineStart;\n    }\n    if (options.ranges) {\n      this.range[1] = previousToken.range[1];\n    }\n  };\n  function markLocation() {\n    if (trackLocations) locations.push(createLocationMarker());\n  }\n  function pushLocation(marker) {\n    if (trackLocations) locations.push(marker);\n  }\n\n  function parseChunk() {\n    next();\n    markLocation();\n    var body = parseBlock();\n    if (EOF !== token.type) unexpected(token);\n    if (trackLocations && !body.length) previousToken = token;\n    return finishNode(ast.chunk(body));\n  }\n\n  function parseBlock(terminator) {\n    var block = []\n      , statement;\n    if (options.scope) createScope();\n\n    while (!isBlockFollow(token)) {\n      if ('return' === token.value) {\n        block.push(parseStatement());\n        break;\n      }\n      statement = parseStatement();\n      if (statement) block.push(statement);\n    }\n\n    if (options.scope) exitScope();\n    return block;\n  }\n\n  function parseStatement() {\n    markLocation();\n    if (Keyword === token.type) {\n      switch (token.value) {\n        case 'local':    next(); return parseLocalStatement();\n        case 'if':       next(); return parseIfStatement();\n        case 'return':   next(); return parseReturnStatement();\n        case 'function': next();\n          var name = parseFunctionName();\n          return parseFunctionDeclaration(name);\n        case 'while':    next(); return parseWhileStatement();\n        case 'for':      next(); return parseForStatement();\n        case 'repeat':   next(); return parseRepeatStatement();\n        case 'break':    next(); return parseBreakStatement();\n        case 'do':       next(); return parseDoStatement();\n        case 'goto':     next(); return parseGotoStatement();\n      }\n    }\n\n    if (Punctuator === token.type) {\n      if (consume('::')) return parseLabelStatement();\n    }\n    if (trackLocations) locations.pop();\n    if (consume(';')) return;\n\n    return parseAssignmentOrCallStatement();\n  }\n\n  function parseLabelStatement() {\n    var name = token.value\n      , label = parseIdentifier();\n\n    if (options.scope) {\n      scopeIdentifierName('::' + name + '::');\n      attachScope(label, true);\n    }\n\n    expect('::');\n    return finishNode(ast.labelStatement(label));\n  }\n\n  function parseBreakStatement() {\n    return finishNode(ast.breakStatement());\n  }\n\n  function parseGotoStatement() {\n    var name = token.value\n      , label = parseIdentifier();\n\n    if (options.scope) label.isLabel = scopeHasName('::' + name + '::');\n    return finishNode(ast.gotoStatement(label));\n  }\n\n  function parseDoStatement() {\n    var body = parseBlock();\n    expect('end');\n    return finishNode(ast.doStatement(body));\n  }\n\n  function parseWhileStatement() {\n    var condition = parseExpectedExpression();\n    expect('do');\n    var body = parseBlock();\n    expect('end');\n    return finishNode(ast.whileStatement(condition, body));\n  }\n\n  function parseRepeatStatement() {\n    var body = parseBlock();\n    expect('until');\n    var condition = parseExpectedExpression();\n    return finishNode(ast.repeatStatement(condition, body));\n  }\n\n  function parseReturnStatement() {\n    var expressions = [];\n\n    if ('end' !== token.value) {\n      var expression = parseExpression();\n      if (null != expression) expressions.push(expression);\n      while (consume(',')) {\n        expression = parseExpectedExpression();\n        expressions.push(expression);\n      }\n      consume(';'); // grammar tells us ; is optional here.\n    }\n    return finishNode(ast.returnStatement(expressions));\n  }\n\n  function parseIfStatement() {\n    var clauses = []\n      , condition\n      , body\n      , marker;\n    if (trackLocations) {\n      marker = locations[locations.length - 1];\n      locations.push(marker);\n    }\n    condition = parseExpectedExpression();\n    expect('then');\n    body = parseBlock();\n    clauses.push(finishNode(ast.ifClause(condition, body)));\n\n    if (trackLocations) marker = createLocationMarker();\n    while (consume('elseif')) {\n      pushLocation(marker);\n      condition = parseExpectedExpression();\n      expect('then');\n      body = parseBlock();\n      clauses.push(finishNode(ast.elseifClause(condition, body)));\n      if (trackLocations) marker = createLocationMarker();\n    }\n\n    if (consume('else')) {\n      if (trackLocations) {\n        marker = new Marker(previousToken);\n        locations.push(marker);\n      }\n      body = parseBlock();\n      clauses.push(finishNode(ast.elseClause(body)));\n    }\n\n    expect('end');\n    return finishNode(ast.ifStatement(clauses));\n  }\n\n  function parseForStatement() {\n    var variable = parseIdentifier()\n      , body;\n    if (options.scope) scopeIdentifier(variable);\n    if (consume('=')) {\n      var start = parseExpectedExpression();\n      expect(',');\n      var end = parseExpectedExpression();\n      var step = consume(',') ? parseExpectedExpression() : null;\n\n      expect('do');\n      body = parseBlock();\n      expect('end');\n\n      return finishNode(ast.forNumericStatement(variable, start, end, step, body));\n    }\n    else {\n      var variables = [variable];\n      while (consume(',')) {\n        variable = parseIdentifier();\n        if (options.scope) scopeIdentifier(variable);\n        variables.push(variable);\n      }\n      expect('in');\n      var iterators = [];\n      do {\n        var expression = parseExpectedExpression();\n        iterators.push(expression);\n      } while (consume(','));\n\n      expect('do');\n      body = parseBlock();\n      expect('end');\n\n      return finishNode(ast.forGenericStatement(variables, iterators, body));\n    }\n  }\n\n  function parseLocalStatement() {\n    var name;\n\n    if (Identifier === token.type) {\n      var variables = []\n        , init = [];\n\n      do {\n        name = parseIdentifier();\n\n        variables.push(name);\n      } while (consume(','));\n\n      if (consume('=')) {\n        do {\n          var expression = parseExpectedExpression();\n          init.push(expression);\n        } while (consume(','));\n      }\n      if (options.scope) {\n        for (var i = 0, l = variables.length; i < l; i++) {\n          scopeIdentifier(variables[i]);\n        }\n      }\n\n      return finishNode(ast.localStatement(variables, init));\n    }\n    if (consume('function')) {\n      name = parseIdentifier();\n      if (options.scope) scopeIdentifier(name);\n      return parseFunctionDeclaration(name, true);\n    } else {\n      raiseUnexpectedToken('<name>', token);\n    }\n  }\n\n  function parseAssignmentOrCallStatement() {\n    var previous = token\n      , expression, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    expression = parsePrefixExpression();\n\n    if (null == expression) return unexpected(token);\n    if (',='.indexOf(token.value) >= 0) {\n      var variables = [expression]\n        , init = []\n        , exp;\n\n      while (consume(',')) {\n        exp = parsePrefixExpression();\n        if (null == exp) raiseUnexpectedToken('<expression>', token);\n        variables.push(exp);\n      }\n      expect('=');\n      do {\n        exp = parseExpectedExpression();\n        init.push(exp);\n      } while (consume(','));\n\n      pushLocation(marker);\n      return finishNode(ast.assignmentStatement(variables, init));\n    }\n    if (isCallExpression(expression)) {\n      pushLocation(marker);\n      return finishNode(ast.callStatement(expression));\n    }\n    return unexpected(previous);\n  }\n\n  function parseIdentifier() {\n    markLocation();\n    var identifier = token.value;\n    if (Identifier !== token.type) raiseUnexpectedToken('<name>', token);\n    next();\n    return finishNode(ast.identifier(identifier));\n  }\n\n  function parseFunctionDeclaration(name, isLocal) {\n    var parameters = [];\n    expect('(');\n    if (!consume(')')) {\n      while (true) {\n        if (Identifier === token.type) {\n          var parameter = parseIdentifier();\n          if (options.scope) scopeIdentifier(parameter);\n\n          parameters.push(parameter);\n\n          if (consume(',')) continue;\n          else if (consume(')')) break;\n        }\n        else if (VarargLiteral === token.type) {\n          parameters.push(parsePrimaryExpression());\n          expect(')');\n          break;\n        } else {\n          raiseUnexpectedToken('<name> or \\'...\\'', token);\n        }\n      }\n    }\n\n    var body = parseBlock();\n    expect('end');\n\n    isLocal = isLocal || false;\n    return finishNode(ast.functionStatement(name, parameters, isLocal, body));\n  }\n\n  function parseFunctionName() {\n    var base, name, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    base = parseIdentifier();\n\n    if (options.scope) attachScope(base, false);\n\n    while (consume('.')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      if (options.scope) attachScope(name, false);\n      base = finishNode(ast.memberExpression(base, '.', name));\n    }\n\n    if (consume(':')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      if (options.scope) attachScope(name, false);\n      base = finishNode(ast.memberExpression(base, ':', name));\n    }\n\n    return base;\n  }\n\n  function parseTableConstructor() {\n    var fields = []\n      , key, value;\n\n    while (true) {\n      markLocation();\n      if (Punctuator === token.type && consume('[')) {\n        key = parseExpectedExpression();\n        expect(']');\n        expect('=');\n        value = parseExpectedExpression();\n        fields.push(finishNode(ast.tableKey(key, value)));\n      } else if (Identifier === token.type) {\n        key = parseExpectedExpression();\n        if (consume('=')) {\n          value = parseExpectedExpression();\n          fields.push(finishNode(ast.tableKeyString(key, value)));\n        } else {\n          fields.push(finishNode(ast.tableValue(key)));\n        }\n      } else {\n        if (null == (value = parseExpression())) {\n          locations.pop();\n          break;\n        }\n        fields.push(finishNode(ast.tableValue(value)));\n      }\n      if (',;'.indexOf(token.value) >= 0) {\n        next();\n        continue;\n      }\n      if ('}' === token.value) break;\n    }\n    expect('}');\n    return finishNode(ast.tableConstructorExpression(fields));\n  }\n\n  function parseExpression() {\n    var expression = parseSubExpression(0);\n    return expression;\n  }\n\n  function parseExpectedExpression() {\n    var expression = parseExpression();\n    if (null == expression) raiseUnexpectedToken('<expression>', token);\n    else return expression;\n  }\n\n  function binaryPrecedence(operator) {\n    var charCode = operator.charCodeAt(0)\n      , length = operator.length;\n\n    if (1 === length) {\n      switch (charCode) {\n        case 94: return 10; // ^\n        case 42: case 47: case 37: return 7; // * / %\n        case 43: case 45: return 6; // + -\n        case 60: case 62: return 3; // < >\n        case 38: case 124: return 7; // & |\n      }\n    } else if (2 === length) {\n      switch (charCode) {\n        case 46: return 5; // ..\n        case 60: case 62: case 61: case 126: return 3; // <= >= == ~=\n        case 111: return 1; // or\n      }\n    } else if (97 === charCode && 'and' === operator) return 2;\n    return 0;\n  }\n\n  function parseSubExpression(minPrecedence) {\n    var operator = token.value\n      , expression, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    if (isUnary(token)) {\n      markLocation();\n      next();\n      var argument = parseSubExpression(8);\n      if (argument == null) raiseUnexpectedToken('<expression>', token);\n      expression = finishNode(ast.unaryExpression(operator, argument));\n    }\n    if (null == expression) {\n      expression = parsePrimaryExpression();\n      if (null == expression) {\n        expression = parsePrefixExpression();\n      }\n    }\n    if (null == expression) return null;\n\n    var precedence;\n    while (true) {\n      operator = token.value;\n\n      precedence = (Punctuator === token.type || Keyword === token.type) ?\n        binaryPrecedence(operator) : 0;\n\n      if (precedence === 0 || precedence <= minPrecedence) break;\n      if ('^' === operator || '..' === operator) precedence--;\n      next();\n      var right = parseSubExpression(precedence);\n      if (null == right) raiseUnexpectedToken('<expression>', token);\n      if (trackLocations) locations.push(marker);\n      expression = finishNode(ast.binaryExpression(operator, expression, right));\n\n    }\n    return expression;\n  }\n\n  function parsePrefixExpression() {\n    var base, name, marker\n      , isLocal;\n\n    if (trackLocations) marker = createLocationMarker();\n    if (Identifier === token.type) {\n      name = token.value;\n      base = parseIdentifier();\n      if (options.scope) attachScope(base, isLocal = scopeHasName(name));\n    } else if (consume('(')) {\n      base = parseExpectedExpression();\n      expect(')');\n      if (options.scope) isLocal = base.isLocal;\n    } else {\n      return null;\n    }\n    var expression, identifier;\n    while (true) {\n      if (Punctuator === token.type) {\n        switch (token.value) {\n          case '[':\n            pushLocation(marker);\n            next();\n            expression = parseExpectedExpression();\n            base = finishNode(ast.indexExpression(base, expression));\n            expect(']');\n            break;\n          case '.':\n            pushLocation(marker);\n            next();\n            identifier = parseIdentifier();\n            if (options.scope) attachScope(identifier, isLocal);\n            base = finishNode(ast.memberExpression(base, '.', identifier));\n            break;\n          case ':':\n            pushLocation(marker);\n            next();\n            identifier = parseIdentifier();\n            if (options.scope) attachScope(identifier, isLocal);\n            base = finishNode(ast.memberExpression(base, ':', identifier));\n            pushLocation(marker);\n            base = parseCallExpression(base);\n            break;\n          case '(': case '{': // args\n            pushLocation(marker);\n            base = parseCallExpression(base);\n            break;\n          default:\n            return base;\n        }\n      } else if (StringLiteral === token.type) {\n        pushLocation(marker);\n        base = parseCallExpression(base);\n      } else {\n        break;\n      }\n    }\n\n    return base;\n  }\n\n  function parseCallExpression(base) {\n    if (Punctuator === token.type) {\n      switch (token.value) {\n        case '(':\n          next();\n          var expressions = [];\n          var expression = parseExpression();\n          if (null != expression) expressions.push(expression);\n          while (consume(',')) {\n            expression = parseExpectedExpression();\n            expressions.push(expression);\n          }\n\n          expect(')');\n          return finishNode(ast.callExpression(base, expressions));\n\n        case '{':\n          markLocation();\n          next();\n          var table = parseTableConstructor();\n          return finishNode(ast.tableCallExpression(base, table));\n      }\n    } else if (StringLiteral === token.type) {\n      return finishNode(ast.stringCallExpression(base, parsePrimaryExpression()));\n    }\n\n    raiseUnexpectedToken('function arguments', token);\n  }\n\n  function parsePrimaryExpression() {\n    var literals = StringLiteral | NumericLiteral | BooleanLiteral | NilLiteral | VarargLiteral\n      , value = token.value\n      , type = token.type\n      , marker;\n\n    if (trackLocations) marker = createLocationMarker();\n\n    if (type & literals) {\n      pushLocation(marker);\n      var raw = input.slice(token.range[0], token.range[1]);\n      next();\n      return finishNode(ast.literal(type, value, raw));\n    } else if (Keyword === type && 'function' === value) {\n      pushLocation(marker);\n      next();\n      return parseFunctionDeclaration(null);\n    } else if (consume('{')) {\n      pushLocation(marker);\n      return parseTableConstructor();\n    }\n  }\n\n  exports.parse = parse;\n\n  function parse(_input, _options) {\n    if ('undefined' === typeof _options && 'object' === typeof _input) {\n      _options = _input;\n      _input = undefined;\n    }\n    if (!_options) _options = {};\n\n    input = _input || '';\n    options = extend(defaultOptions, _options);\n    index = 0;\n    line = 1;\n    lineStart = 0;\n    length = input.length;\n    scopes = [[]];\n    scopeDepth = 0;\n    globals = [];\n    locations = [];\n\n    if (options.comments) comments = [];\n    if (!options.wait) return end();\n    return exports;\n  }\n  exports.write = write;\n\n  function write(_input) {\n    input += String(_input);\n    length = input.length;\n    return exports;\n  }\n  exports.end = end;\n\n  function end(_input) {\n    if ('undefined' !== typeof _input) write(_input);\n\n    length = input.length;\n    trackLocations = options.locations || options.ranges;\n    lookahead = lex();\n\n    var chunk = parseChunk();\n    if (options.comments) chunk.comments = comments;\n    if (options.scope) chunk.globals = globals;\n\n    if (locations.length > 0)\n      throw new Error('Location tracking failed. This is most likely a bug in luaparse');\n\n    return chunk;\n  }\n\n}));\n\n});\n\ndefine(\"ace/mode/lua_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar luaparse = require(\"../mode/lua/luaparse\");\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            luaparse.parse(value);\n        } catch(e) {\n            if (e instanceof SyntaxError) {\n                errors.push({\n                    row: e.line - 1,\n                    column: e.column,\n                    text: e.message,\n                    type: \"error\"\n                });\n            }\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n\ndefine(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src/worker-php.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\ndefine(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\ndefine(\"ace/mode/php/php\",[], function(require, exports, module) {\n\nvar PHP = {Constants:{}};\n\nPHP.Constants.T_INCLUDE = 257;\nPHP.Constants.T_INCLUDE_ONCE = 258;\nPHP.Constants.T_EVAL = 259;\nPHP.Constants.T_REQUIRE = 260;\nPHP.Constants.T_REQUIRE_ONCE = 261;\nPHP.Constants.T_LOGICAL_OR = 262;\nPHP.Constants.T_LOGICAL_XOR = 263;\nPHP.Constants.T_LOGICAL_AND = 264;\nPHP.Constants.T_PRINT = 265;\nPHP.Constants.T_YIELD = 266;\nPHP.Constants.T_DOUBLE_ARROW = 267;\nPHP.Constants.T_YIELD_FROM = 268;\nPHP.Constants.T_PLUS_EQUAL = 269;\nPHP.Constants.T_MINUS_EQUAL = 270;\nPHP.Constants.T_MUL_EQUAL = 271;\nPHP.Constants.T_DIV_EQUAL = 272;\nPHP.Constants.T_CONCAT_EQUAL = 273;\nPHP.Constants.T_MOD_EQUAL = 274;\nPHP.Constants.T_AND_EQUAL = 275;\nPHP.Constants.T_OR_EQUAL = 276;\nPHP.Constants.T_XOR_EQUAL = 277;\nPHP.Constants.T_SL_EQUAL = 278;\nPHP.Constants.T_SR_EQUAL = 279;\nPHP.Constants.T_POW_EQUAL = 280;\nPHP.Constants.T_COALESCE = 281;\nPHP.Constants.T_BOOLEAN_OR = 282;\nPHP.Constants.T_BOOLEAN_AND = 283;\nPHP.Constants.T_IS_EQUAL = 284;\nPHP.Constants.T_IS_NOT_EQUAL = 285;\nPHP.Constants.T_IS_IDENTICAL = 286;\nPHP.Constants.T_IS_NOT_IDENTICAL = 287;\nPHP.Constants.T_SPACESHIP = 288;\nPHP.Constants.T_IS_SMALLER_OR_EQUAL = 289;\nPHP.Constants.T_IS_GREATER_OR_EQUAL = 290;\nPHP.Constants.T_SL = 291;\nPHP.Constants.T_SR = 292;\nPHP.Constants.T_INSTANCEOF = 293;\nPHP.Constants.T_INC = 294;\nPHP.Constants.T_DEC = 295;\nPHP.Constants.T_INT_CAST = 296;\nPHP.Constants.T_DOUBLE_CAST = 297;\nPHP.Constants.T_STRING_CAST = 298;\nPHP.Constants.T_ARRAY_CAST = 299;\nPHP.Constants.T_OBJECT_CAST = 300;\nPHP.Constants.T_BOOL_CAST = 301;\nPHP.Constants.T_UNSET_CAST = 302;\nPHP.Constants.T_POW = 303;\nPHP.Constants.T_NEW = 304;\nPHP.Constants.T_CLONE = 305;\nPHP.Constants.T_EXIT = 306;\nPHP.Constants.T_IF = 307;\nPHP.Constants.T_ELSEIF = 308;\nPHP.Constants.T_ELSE = 309;\nPHP.Constants.T_ENDIF = 310;\nPHP.Constants.T_LNUMBER = 311;\nPHP.Constants.T_DNUMBER = 312;\nPHP.Constants.T_STRING = 313;\nPHP.Constants.T_STRING_VARNAME = 314;\nPHP.Constants.T_VARIABLE = 315;\nPHP.Constants.T_NUM_STRING = 316;\nPHP.Constants.T_INLINE_HTML = 317;\nPHP.Constants.T_CHARACTER = 318;\nPHP.Constants.T_BAD_CHARACTER = 319;\nPHP.Constants.T_ENCAPSED_AND_WHITESPACE = 320;\nPHP.Constants.T_CONSTANT_ENCAPSED_STRING = 321;\nPHP.Constants.T_ECHO = 322;\nPHP.Constants.T_DO = 323;\nPHP.Constants.T_WHILE = 324;\nPHP.Constants.T_ENDWHILE = 325;\nPHP.Constants.T_FOR = 326;\nPHP.Constants.T_ENDFOR = 327;\nPHP.Constants.T_FOREACH = 328;\nPHP.Constants.T_ENDFOREACH = 329;\nPHP.Constants.T_DECLARE = 330;\nPHP.Constants.T_ENDDECLARE = 331;\nPHP.Constants.T_AS = 332;\nPHP.Constants.T_SWITCH = 333;\nPHP.Constants.T_ENDSWITCH = 334;\nPHP.Constants.T_CASE = 335;\nPHP.Constants.T_DEFAULT = 336;\nPHP.Constants.T_BREAK = 337;\nPHP.Constants.T_CONTINUE = 338;\nPHP.Constants.T_GOTO = 339;\nPHP.Constants.T_FUNCTION = 340;\nPHP.Constants.T_CONST = 341;\nPHP.Constants.T_RETURN = 342;\nPHP.Constants.T_TRY = 343;\nPHP.Constants.T_CATCH = 344;\nPHP.Constants.T_FINALLY = 345;\nPHP.Constants.T_THROW = 346;\nPHP.Constants.T_USE = 347;\nPHP.Constants.T_INSTEADOF = 348;\nPHP.Constants.T_GLOBAL = 349;\nPHP.Constants.T_STATIC = 350;\nPHP.Constants.T_ABSTRACT = 351;\nPHP.Constants.T_FINAL = 352;\nPHP.Constants.T_PRIVATE = 353;\nPHP.Constants.T_PROTECTED = 354;\nPHP.Constants.T_PUBLIC = 355;\nPHP.Constants.T_VAR = 356;\nPHP.Constants.T_UNSET = 357;\nPHP.Constants.T_ISSET = 358;\nPHP.Constants.T_EMPTY = 359;\nPHP.Constants.T_HALT_COMPILER = 360;\nPHP.Constants.T_CLASS = 361;\nPHP.Constants.T_TRAIT = 362;\nPHP.Constants.T_INTERFACE = 363;\nPHP.Constants.T_EXTENDS = 364;\nPHP.Constants.T_IMPLEMENTS = 365;\nPHP.Constants.T_OBJECT_OPERATOR = 366;\nPHP.Constants.T_LIST = 367;\nPHP.Constants.T_ARRAY = 368;\nPHP.Constants.T_CALLABLE = 369;\nPHP.Constants.T_CLASS_C = 370;\nPHP.Constants.T_TRAIT_C = 371;\nPHP.Constants.T_METHOD_C = 372;\nPHP.Constants.T_FUNC_C = 373;\nPHP.Constants.T_LINE = 374;\nPHP.Constants.T_FILE = 375;\nPHP.Constants.T_COMMENT = 376;\nPHP.Constants.T_DOC_COMMENT = 377;\nPHP.Constants.T_OPEN_TAG = 378;\nPHP.Constants.T_OPEN_TAG_WITH_ECHO = 379;\nPHP.Constants.T_CLOSE_TAG = 380;\nPHP.Constants.T_WHITESPACE = 381;\nPHP.Constants.T_START_HEREDOC = 382;\nPHP.Constants.T_END_HEREDOC = 383;\nPHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES = 384;\nPHP.Constants.T_CURLY_OPEN = 385;\nPHP.Constants.T_PAAMAYIM_NEKUDOTAYIM = 386;\nPHP.Constants.T_NAMESPACE = 387;\nPHP.Constants.T_NS_C = 388;\nPHP.Constants.T_DIR = 389;\nPHP.Constants.T_NS_SEPARATOR = 390;\nPHP.Constants.T_ELLIPSIS = 391;\n\nPHP.Lexer = function(src, ini) {\n    var heredoc, heredocEndAllowed,\n\n    stateStack = ['INITIAL'], stackPos = 0,\n    swapState = function(state) {\n        stateStack[stackPos] = state;\n    },\n    pushState = function(state) {\n        stateStack[++stackPos] = state;\n    },\n    popState = function() {\n        --stackPos;\n    },\n\n    shortOpenTag = ini === undefined || /^(on|true|1)$/i.test(ini.short_open_tag),\n    openTag = shortOpenTag\n        ? /^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|<\\?|\\<script language\\=('|\")?php('|\")?\\>)/i\n        : /^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|\\<script language\\=('|\")?php('|\")?\\>)/i,\n    inlineHtml = shortOpenTag\n        ? /[^<]*(?:<(?!\\?|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i\n        : /[^<]*(?:<(?!\\?=|\\?php[ \\t\\r\\n]|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i,\n    labelRegexPart = '[a-zA-Z_\\\\x7f-\\\\uffff][a-zA-Z0-9_\\\\x7f-\\\\uffff]*',\n    stringRegexPart = function(quote) {\n        return '[^' + quote + '\\\\\\\\${]*(?:(?:\\\\\\\\[\\\\s\\\\S]|\\\\$(?!\\\\{|[a-zA-Z_\\\\x7f-\\\\uffff])|\\\\{(?!\\\\$))[^' + quote + '\\\\\\\\${]*)*';\n    },\n\n    sharedStringTokens = [\n        {\n            value: PHP.Constants.T_VARIABLE,\n            re: new RegExp('^\\\\$' + labelRegexPart + '(?=\\\\[)'),\n            func: function() {\n                pushState('VAR_OFFSET');\n            }\n        },\n        {\n            value: PHP.Constants.T_VARIABLE,\n            re: new RegExp('^\\\\$' + labelRegexPart + '(?=->' + labelRegexPart + ')'),\n            func: function() {\n                pushState('LOOKING_FOR_PROPERTY');\n            }\n        },\n        {\n            value: PHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES,\n            re: new RegExp('^\\\\$\\\\{(?=' + labelRegexPart + '[\\\\[}])'),\n            func: function() {\n                pushState('LOOKING_FOR_VARNAME');\n            }\n        },\n        {\n            value: PHP.Constants.T_VARIABLE,\n            re: new RegExp('^\\\\$' + labelRegexPart)\n        },\n        {\n            value: PHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES,\n            re: /^\\$\\{/,\n            func: function() {\n                pushState('IN_SCRIPTING');\n            }\n        },\n        {\n            value: PHP.Constants.T_CURLY_OPEN,\n            re: /^\\{(?=\\$)/,\n            func: function() {\n                pushState('IN_SCRIPTING');\n            }\n        }\n    ],\n    data = {\n        'INITIAL': [\n            {\n                value: PHP.Constants.T_OPEN_TAG_WITH_ECHO,\n                re: /^<\\?=/i,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_OPEN_TAG,\n                re: openTag,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_INLINE_HTML,\n                re: inlineHtml\n            },\n        ],\n        'IN_SCRIPTING': [\n            {\n                value: PHP.Constants.T_WHITESPACE,\n                re: /^[ \\n\\r\\t]+/\n            },\n            {\n                value: PHP.Constants.T_ABSTRACT,\n                re: /^abstract\\b/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_AND,\n                re: /^and\\b/i\n            },\n            {\n                value: PHP.Constants.T_ARRAY,\n                re: /^array\\b/i\n            },\n            {\n                value: PHP.Constants.T_AS,\n                re: /^as\\b/i\n            },\n            {\n                value: PHP.Constants.T_BREAK,\n                re: /^break\\b/i\n            },\n            {\n                value: PHP.Constants.T_CALLABLE,\n                re: /^callable\\b/i\n            },\n            {\n                value: PHP.Constants.T_CASE,\n                re: /^case\\b/i\n            },\n            {\n                value: PHP.Constants.T_CATCH,\n                re: /^catch\\b/i\n            },\n            {\n                value: PHP.Constants.T_CLASS,\n                re: /^class\\b/i,\n            },\n            {\n                value: PHP.Constants.T_CLONE,\n                re: /^clone\\b/i\n            },\n            {\n                value: PHP.Constants.T_CONST,\n                re: /^const\\b/i\n            },\n            {\n                value: PHP.Constants.T_CONTINUE,\n                re: /^continue\\b/i\n            },\n            {\n                value: PHP.Constants.T_DECLARE,\n                re: /^declare\\b/i\n            },\n            {\n                value: PHP.Constants.T_DEFAULT,\n                re: /^default\\b/i\n            },\n            {\n                value: PHP.Constants.T_DO,\n                re: /^do\\b/i\n            },\n            {\n                value: PHP.Constants.T_ECHO,\n                re: /^echo\\b/i\n            },\n            {\n                value: PHP.Constants.T_ELSE,\n                re: /^else\\b/i\n            },\n            {\n                value: PHP.Constants.T_ELSEIF,\n                re: /^elseif\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDDECLARE,\n                re: /^enddeclare\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDFOR,\n                re: /^endfor\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDFOREACH,\n                re: /^endforeach\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDIF,\n                re: /^endif\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDSWITCH,\n                re: /^endswitch\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDWHILE,\n                re: /^endwhile\\b/i\n            },\n            {\n                value: PHP.Constants.T_EMPTY,\n                re: /^empty\\b/i\n            },\n            {\n                value: PHP.Constants.T_EVAL,\n                re: /^eval\\b/i\n            },\n            {\n                value: PHP.Constants.T_EXIT,\n                re: /^(?:exit|die)\\b/i\n            },\n            {\n                value: PHP.Constants.T_EXTENDS,\n                re: /^extends\\b/i\n            },\n            {\n                value: PHP.Constants.T_FINAL,\n                re: /^final\\b/i\n            },\n            {\n                value: PHP.Constants.T_FINALLY,\n                re: /^finally\\b/i\n            },\n            {\n                value: PHP.Constants.T_FOR,\n                re: /^for\\b/i\n            },\n            {\n                value: PHP.Constants.T_FOREACH,\n                re: /^foreach\\b/i\n            },\n            {\n                value: PHP.Constants.T_FUNCTION,\n                re: /^function\\b/i\n            },\n            {\n                value: PHP.Constants.T_GLOBAL,\n                re: /^global\\b/i\n            },\n            {\n                value: PHP.Constants.T_GOTO,\n                re: /^goto\\b/i\n            },\n            {\n                value: PHP.Constants.T_IF,\n                re: /^if\\b/i\n            },\n            {\n                value: PHP.Constants.T_IMPLEMENTS,\n                re: /^implements\\b/i\n            },\n            {\n                value: PHP.Constants.T_INCLUDE,\n                re: /^include\\b/i\n            },\n            {\n                value: PHP.Constants.T_INCLUDE_ONCE,\n                re: /^include_once\\b/i\n            },\n            {\n                value: PHP.Constants.T_INSTANCEOF,\n                re: /^instanceof\\b/i\n            },\n            {\n                value: PHP.Constants.T_INSTEADOF,\n                re: /^insteadof\\b/i\n            },\n            {\n                value: PHP.Constants.T_INTERFACE,\n                re: /^interface\\b/i\n            },\n            {\n                value: PHP.Constants.T_ISSET,\n                re: /^isset\\b/i\n            },\n            {\n                value: PHP.Constants.T_LIST,\n                re: /^list\\b/i\n            },\n            {\n                value: PHP.Constants.T_NAMESPACE,\n                re: /^namespace\\b/i\n            },\n            {\n                value: PHP.Constants.T_NEW,\n                re: /^new\\b/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_OR,\n                re: /^or\\b/i\n            },\n            {\n                value: PHP.Constants.T_PRINT,\n                re: /^print\\b/i\n            },\n            {\n                value: PHP.Constants.T_PRIVATE,\n                re: /^private\\b/i\n            },\n            {\n                value: PHP.Constants.T_PROTECTED,\n                re: /^protected\\b/i\n            },\n            {\n                value: PHP.Constants.T_PUBLIC,\n                re: /^public\\b/i\n            },\n            {\n                value: PHP.Constants.T_REQUIRE,\n                re: /^require\\b/i\n            },\n            {\n                value: PHP.Constants.T_REQUIRE_ONCE,\n                re: /^require_once\\b/i\n            },\n            {\n                value: PHP.Constants.T_STATIC,\n                re: /^static\\b/i\n            },\n            {\n                value: PHP.Constants.T_SWITCH,\n                re: /^switch\\b/i\n            },\n            {\n                value: PHP.Constants.T_THROW,\n                re: /^throw\\b/i\n            },\n            {\n                value: PHP.Constants.T_TRAIT,\n                re: /^trait\\b/i,\n            },\n            {\n                value: PHP.Constants.T_TRY,\n                re: /^try\\b/i\n            },\n            {\n                value: PHP.Constants.T_UNSET,\n                re: /^unset\\b/i\n            },\n            {\n                value: PHP.Constants.T_USE,\n                re: /^use\\b/i\n            },\n            {\n                value: PHP.Constants.T_VAR,\n                re: /^var\\b/i\n            },\n            {\n                value: PHP.Constants.T_WHILE,\n                re: /^while\\b/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_XOR,\n                re: /^xor\\b/i\n            },\n            {\n                value: PHP.Constants.T_YIELD_FROM,\n                re: /^yield\\s+from\\b/i\n            },\n            {\n                value: PHP.Constants.T_YIELD,\n                re: /^yield\\b/i\n            },\n            {\n                value: PHP.Constants.T_RETURN,\n                re: /^return\\b/i\n            },\n            {\n                value: PHP.Constants.T_METHOD_C,\n                re: /^__METHOD__\\b/i\n            },\n            {\n                value: PHP.Constants.T_LINE,\n                re: /^__LINE__\\b/i\n            },\n            {\n                value: PHP.Constants.T_FILE,\n                re: /^__FILE__\\b/i\n            },\n            {\n                value: PHP.Constants.T_FUNC_C,\n                re: /^__FUNCTION__\\b/i\n            },\n            {\n                value: PHP.Constants.T_NS_C,\n                re: /^__NAMESPACE__\\b/i\n            },\n            {\n                value: PHP.Constants.T_TRAIT_C,\n                re: /^__TRAIT__\\b/i\n            },\n            {\n                value: PHP.Constants.T_DIR,\n                re: /^__DIR__\\b/i\n            },\n            {\n                value: PHP.Constants.T_CLASS_C,\n                re: /^__CLASS__\\b/i\n            },\n            {\n                value: PHP.Constants.T_AND_EQUAL,\n                re: /^&=/\n            },\n            {\n                value: PHP.Constants.T_ARRAY_CAST,\n                re: /^\\([ \\t]*array[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_BOOL_CAST,\n                re: /^\\([ \\t]*(?:bool|boolean)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_DOUBLE_CAST,\n                re: /^\\([ \\t]*(?:real|float|double)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_INT_CAST,\n                re: /^\\([ \\t]*(?:int|integer)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_OBJECT_CAST,\n                re: /^\\([ \\t]*object[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_STRING_CAST,\n                re: /^\\([ \\t]*(?:binary|string)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_UNSET_CAST,\n                re: /^\\([ \\t]*unset[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_BOOLEAN_AND,\n                re: /^&&/\n            },\n            {\n                value: PHP.Constants.T_BOOLEAN_OR,\n                re: /^\\|\\|/\n            },\n            {\n                value: PHP.Constants.T_CLOSE_TAG,\n                re: /^(?:\\?>|<\\/script>)(\\r\\n|\\r|\\n)?/i,\n                func: function() {\n                    swapState('INITIAL');\n                }\n            },\n            {\n                value: PHP.Constants.T_DOUBLE_ARROW,\n                re: /^=>/\n            },\n            {\n                value: PHP.Constants.T_PAAMAYIM_NEKUDOTAYIM,\n                re: /^::/\n            },\n            {\n                value: PHP.Constants.T_INC,\n                re: /^\\+\\+/\n            },\n            {\n                value: PHP.Constants.T_DEC,\n                re: /^--/\n            },\n            {\n                value: PHP.Constants.T_CONCAT_EQUAL,\n                re: /^\\.=/\n            },\n            {\n                value: PHP.Constants.T_DIV_EQUAL,\n                re: /^\\/=/\n            },\n            {\n                value: PHP.Constants.T_XOR_EQUAL,\n                re: /^\\^=/\n            },\n            {\n                value: PHP.Constants.T_MUL_EQUAL,\n                re: /^\\*=/\n            },\n            {\n                value: PHP.Constants.T_MOD_EQUAL,\n                re: /^%=/\n            },\n            {\n                value: PHP.Constants.T_SL_EQUAL,\n                re: /^<<=/\n            },\n            {\n                value: PHP.Constants.T_START_HEREDOC,\n                re: new RegExp('^[bB]?<<<[ \\\\t]*\\'(' + labelRegexPart + ')\\'(?:\\\\r\\\\n|\\\\r|\\\\n)'),\n                func: function(result) {\n                    heredoc = result[1];\n                    swapState('NOWDOC');\n                }\n            },\n            {\n                value: PHP.Constants.T_START_HEREDOC,\n                re: new RegExp('^[bB]?<<<[ \\\\t]*(\"?)(' + labelRegexPart + ')\\\\1(?:\\\\r\\\\n|\\\\r|\\\\n)'),\n                func: function(result) {\n                    heredoc = result[2];\n                    heredocEndAllowed = true;\n                    swapState('HEREDOC');\n                }\n            },\n            {\n                value: PHP.Constants.T_SL,\n                re: /^<</\n            },\n            {\n                value: PHP.Constants.T_SPACESHIP,\n                re: /^<=>/\n            },\n            {\n                value: PHP.Constants.T_IS_SMALLER_OR_EQUAL,\n                re: /^<=/\n            },\n            {\n                value: PHP.Constants.T_SR_EQUAL,\n                re: /^>>=/\n            },\n            {\n                value: PHP.Constants.T_SR,\n                re: /^>>/\n            },\n            {\n                value: PHP.Constants.T_IS_GREATER_OR_EQUAL,\n                re: /^>=/\n            },\n            {\n                value: PHP.Constants.T_OR_EQUAL,\n                re: /^\\|=/\n            },\n            {\n                value: PHP.Constants.T_PLUS_EQUAL,\n                re: /^\\+=/\n            },\n            {\n                value: PHP.Constants.T_MINUS_EQUAL,\n                re: /^-=/\n            },\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: new RegExp('^->(?=[ \\n\\r\\t]*' + labelRegexPart + ')'),\n                func: function() {\n                    pushState('LOOKING_FOR_PROPERTY');\n                }\n            },\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: /^->/i\n            },\n            {\n                value: PHP.Constants.T_ELLIPSIS,\n                re: /^\\.\\.\\./\n            },\n            {\n                value: PHP.Constants.T_POW_EQUAL,\n                re: /^\\*\\*=/\n            },\n            {\n                value: PHP.Constants.T_POW,\n                re: /^\\*\\*/\n            },\n            {\n                value: PHP.Constants.T_COALESCE,\n                re: /^\\?\\?/\n            },\n            {\n                value: PHP.Constants.T_COMMENT,\n                re: /^\\/\\*([\\S\\s]*?)(?:\\*\\/|$)/\n            },\n            {\n                value: PHP.Constants.T_COMMENT,\n                re: /^(?:\\/\\/|#)[^\\r\\n?]*(?:\\?(?!>)[^\\r\\n?]*)*(?:\\r\\n|\\r|\\n)?/\n            },\n            {\n                value: PHP.Constants.T_IS_IDENTICAL,\n                re: /^===/\n            },\n            {\n                value: PHP.Constants.T_IS_EQUAL,\n                re: /^==/\n            },\n            {\n                value: PHP.Constants.T_IS_NOT_IDENTICAL,\n                re: /^!==/\n            },\n            {\n                value: PHP.Constants.T_IS_NOT_EQUAL,\n                re: /^(!=|<>)/\n            },\n            {\n                value: PHP.Constants.T_DNUMBER,\n                re: /^(?:[0-9]+\\.[0-9]*|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?/\n            },\n            {\n                value: PHP.Constants.T_DNUMBER,\n                re: /^[0-9]+[eE][+-]?[0-9]+/\n            },\n            {\n                value: PHP.Constants.T_LNUMBER,\n                re: /^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i\n            },\n            {\n                value: PHP.Constants.T_VARIABLE,\n                re: new RegExp('^\\\\$' + labelRegexPart)\n            },\n            {\n                value: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,\n                re: /^[bB]?'[^'\\\\]*(?:\\\\[\\s\\S][^'\\\\]*)*'/,\n            },\n            {\n                value: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,\n                re: new RegExp('^[bB]?\"' + stringRegexPart('\"') + '\"')\n            },\n            {\n                value: -1,\n                re: /^[bB]?\"/,\n                func: function() {\n                    swapState('DOUBLE_QUOTES');\n                }\n            },\n            {\n                value: -1,\n                re: /^`/,\n                func: function() {\n                    swapState('BACKTICKS');\n                }\n            },\n            {\n                value: PHP.Constants.T_NS_SEPARATOR,\n                re: /^\\\\/\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: /^[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            },\n            {\n                value: -1,\n                re: /^\\{/,\n                func: function() {\n                    pushState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: -1,\n                re: /^\\}/,\n                func: function() {\n                    if (stackPos > 0) {\n                        popState();\n                    }\n                }\n            },\n            {\n                value: -1,\n                re: /^[\\[\\];:?()!.,><=+-/*|&@^%\"'$~]/\n            }\n        ],\n        'DOUBLE_QUOTES': sharedStringTokens.concat([\n            {\n                value: -1,\n                re: /^\"/,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                re: new RegExp('^' + stringRegexPart('\"'))\n            }\n        ]),\n        'BACKTICKS': sharedStringTokens.concat([\n            {\n                value: -1,\n                re: /^`/,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                re: new RegExp('^' + stringRegexPart('`'))\n            }\n        ]),\n        'VAR_OFFSET': [\n            {\n                value: -1,\n                re: /^\\]/,\n                func: function() {\n                    popState();\n                }\n            },\n            {\n                value: PHP.Constants.T_NUM_STRING,\n                re: /^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i\n            },\n            {\n                value: PHP.Constants.T_VARIABLE,\n                re: new RegExp('^\\\\$' + labelRegexPart)\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: new RegExp('^' + labelRegexPart)\n            },\n            {\n                value: -1,\n                re: /^[;:,.\\[()|^&+-/*=%!~$<>?@{}\"`]/\n            }\n        ],\n        'LOOKING_FOR_PROPERTY': [\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: /^->/\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: new RegExp('^' + labelRegexPart),\n                func: function() {\n                    popState();\n                }\n            },\n            {\n                value: PHP.Constants.T_WHITESPACE,\n                re: /^[ \\n\\r\\t]+/\n            }\n        ],\n        'LOOKING_FOR_VARNAME': [\n            {\n                value: PHP.Constants.T_STRING_VARNAME,\n                re: new RegExp('^' + labelRegexPart + '(?=[\\\\[}])'),\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            }\n        ],\n        'NOWDOC': [\n            {\n                value: PHP.Constants.T_END_HEREDOC,\n                matchFunc: function(src) {\n                    var re = new RegExp('^' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    if (src.match(re)) {\n                        return [src.substr(0, heredoc.length)];\n                    } else {\n                        return null;\n                    }\n                },\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                matchFunc: function(src) {\n                    var re = new RegExp('[\\\\r\\\\n]' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    var result = re.exec(src);\n                    var end = result ? result.index + 1 : src.length;\n                    return [src.substring(0, end)];\n                }\n            }\n        ],\n        'HEREDOC': sharedStringTokens.concat([\n            {\n                value: PHP.Constants.T_END_HEREDOC,\n                matchFunc: function(src) {\n                    if (!heredocEndAllowed) {\n                        return null;\n                    }\n                    var re = new RegExp('^' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    if (src.match(re)) {\n                        return [src.substr(0, heredoc.length)];\n                    } else {\n                        return null;\n                    }\n                },\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                matchFunc: function(src) {\n                    var end = src.length;\n                    var re = new RegExp('^' + stringRegexPart(''));\n                    var result = re.exec(src);\n                    if (result) {\n                        end = result[0].length;\n                    }\n                    re = new RegExp('([\\\\r\\\\n])' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    result = re.exec(src.substring(0, end));\n                    if (result) {\n                        end = result.index + 1;\n                        heredocEndAllowed = true;\n                    } else {\n                        heredocEndAllowed = false;\n                    }\n                    if (end == 0) {\n                        return null;\n                    }\n                    return [src.substring(0, end)];\n                }\n            }\n        ])\n    };\n\n    var results = [],\n    line = 1,\n    cancel = true;\n\n    if (src === null) {\n        return results;\n    }\n\n    if (typeof src !== \"string\") {\n        src = src.toString();\n    }\n\n    while (src.length > 0 && cancel === true) {\n        var state = stateStack[stackPos];\n        var tokens = data[state];\n        cancel = tokens.some(function(token){\n            var result = token.matchFunc !== undefined\n                ? token.matchFunc(src)\n                : src.match(token.re);\n            if (result !== null) {\n                if (result[0].length == 0) {\n                    throw new Error(\"empty match\");\n                }\n\n                if (token.func !== undefined) {\n                    token.func(result);\n                }\n\n                if (token.value === -1) {\n                    results.push(result[0]);\n                } else {\n                    var resultString = result[0];\n                    results.push([\n                        parseInt(token.value, 10),\n                        resultString,\n                        line\n                        ]);\n                    line += resultString.split('\\n').length - 1;\n                }\n\n                src = src.substring(result[0].length);\n\n                return true;\n            }\n            return false;\n        });\n    }\n\n    return results;\n};\n\n\nPHP.Parser = function ( preprocessedTokens, eval ) {\n\n    var yybase = this.yybase,\n    yydefault = this.yydefault,\n    yycheck = this.yycheck,\n    yyaction = this.yyaction,\n    yylen = this.yylen,\n    yygbase = this.yygbase,\n    yygcheck = this.yygcheck,\n    yyp = this.yyp,\n    yygoto = this.yygoto,\n    yylhs = this.yylhs,\n    terminals = this.terminals,\n    translate = this.translate,\n    yygdefault = this.yygdefault;\n\n\n    this.pos = -1;\n    this.line = 1;\n\n    this.tokenMap = this.createTokenMap( );\n\n    this.dropTokens = {};\n    this.dropTokens[ PHP.Constants.T_WHITESPACE ] = 1;\n    this.dropTokens[ PHP.Constants.T_OPEN_TAG ] = 1;\n    var tokens = [];\n    preprocessedTokens.forEach( function( token, index ) {\n        if ( typeof token === \"object\" && token[ 0 ] === PHP.Constants.T_OPEN_TAG_WITH_ECHO) {\n            tokens.push([\n                PHP.Constants.T_OPEN_TAG,\n                token[ 1 ],\n                token[ 2 ]\n                ]);\n            tokens.push([\n                PHP.Constants.T_ECHO,\n                token[ 1 ],\n                token[ 2 ]\n                ]);\n        } else {\n            tokens.push( token );\n        }\n    });\n    this.tokens = tokens;\n    var tokenId = this.TOKEN_NONE;\n    this.startAttributes = {\n        'startLine': 1\n    };\n\n    this.endAttributes = {};\n    var attributeStack = [ this.startAttributes ];\n    var state = 0;\n    var stateStack = [ state ];\n    this.yyastk = [];\n    this.stackPos  = 0;\n\n    var yyn;\n\n    var origTokenId;\n\n\n    for (;;) {\n\n        if ( yybase[ state ] === 0 ) {\n            yyn = yydefault[ state ];\n        } else {\n            if (tokenId === this.TOKEN_NONE ) {\n                origTokenId = this.getNextToken( );\n                tokenId = (origTokenId >= 0 && origTokenId < this.TOKEN_MAP_SIZE) ? translate[ origTokenId ] : this.TOKEN_INVALID;\n\n                attributeStack[ this.stackPos ] = this.startAttributes;\n            }\n\n            if (((yyn = yybase[ state ] + tokenId) >= 0\n                && yyn < this.YYLAST && yycheck[ yyn ] === tokenId\n                || (state < this.YY2TBLSTATE\n                    && (yyn = yybase[state + this.YYNLSTATES] + tokenId) >= 0\n                    && yyn < this.YYLAST\n                    && yycheck[ yyn ] === tokenId))\n            && (yyn = yyaction[ yyn ]) !== this.YYDEFAULT ) {\n                if (yyn > 0) {\n                    ++this.stackPos;\n\n                    stateStack[ this.stackPos ] = state = yyn;\n                    this.yyastk[ this.stackPos ] = this.tokenValue;\n                    attributeStack[ this.stackPos ] = this.startAttributes;\n                    tokenId = this.TOKEN_NONE;\n\n                    if (yyn < this.YYNLSTATES)\n                        continue;\n                    yyn -= this.YYNLSTATES;\n                } else {\n                    yyn = -yyn;\n                }\n            } else {\n                yyn = yydefault[ state ];\n            }\n        }\n\n        for (;;) {\n\n            if ( yyn === 0 ) {\n                return this.yyval;\n            } else if (yyn !== this.YYUNEXPECTED ) {\n                for (var attr in this.endAttributes) {\n                    attributeStack[ this.stackPos - yylen[ yyn ] ][ attr ] = this.endAttributes[ attr ];\n                }\n                this.stackPos -= yylen[ yyn ];\n                yyn = yylhs[ yyn ];\n                if ((yyp = yygbase[ yyn ] + stateStack[ this.stackPos ]) >= 0\n                    && yyp < this.YYGLAST\n                    && yygcheck[ yyp ] === yyn) {\n                    state = yygoto[ yyp ];\n                } else {\n                    state = yygdefault[ yyn ];\n                }\n\n                ++this.stackPos;\n\n                stateStack[ this.stackPos ] = state;\n                this.yyastk[ this.stackPos ] = this.yyval;\n                attributeStack[ this.stackPos ] = this.startAttributes;\n            } else {\n                if (eval !== true) {\n\n                    var expected = [];\n\n                    for (var i = 0; i < this.TOKEN_MAP_SIZE; ++i) {\n                        if ((yyn = yybase[ state ] + i) >= 0 && yyn < this.YYLAST && yycheck[ yyn ] == i\n                         || state < this.YY2TBLSTATE\n                            && (yyn = yybase[ state + this.YYNLSTATES] + i)\n                            && yyn < this.YYLAST && yycheck[ yyn ] == i\n                        ) {\n                            if (yyaction[ yyn ] != this.YYUNEXPECTED) {\n                                if (expected.length == 4) {\n                                    expected = [];\n                                    break;\n                                }\n\n                                expected.push( this.terminals[ i ] );\n                            }\n                        }\n                    }\n\n                    var expectedString = '';\n                    if (expected.length) {\n                        expectedString = ', expecting ' + expected.join(' or ');\n                    }\n                    throw new PHP.ParseError('syntax error, unexpected ' + terminals[ tokenId ] + expectedString, this.startAttributes['startLine']);\n                } else {\n                    return this.startAttributes['startLine'];\n                }\n\n            }\n\n            if (state < this.YYNLSTATES)\n                break;\n            yyn = state - this.YYNLSTATES;\n        }\n    }\n};\n\nPHP.ParseError = function( msg, line ) {\n    this.message = msg;\n    this.line = line;\n};\n\nPHP.Parser.prototype.getNextToken = function( ) {\n\n    this.startAttributes = {};\n    this.endAttributes = {};\n\n    var token,\n    tmp;\n\n    while (this.tokens[++this.pos] !== undefined) {\n        token = this.tokens[this.pos];\n\n        if (typeof token === \"string\") {\n            this.startAttributes['startLine'] = this.line;\n            this.endAttributes['endLine'] = this.line;\n            if ('b\"' === token) {\n                this.tokenValue = 'b\"';\n                return '\"'.charCodeAt(0);\n            } else {\n                this.tokenValue = token;\n                return token.charCodeAt(0);\n            }\n        } else {\n\n\n\n            this.line += ((tmp = token[ 1 ].match(/\\n/g)) === null) ? 0 : tmp.length;\n\n            if (PHP.Constants.T_COMMENT === token[0]) {\n\n                if (!Array.isArray(this.startAttributes['comments'])) {\n                    this.startAttributes['comments'] = [];\n                }\n\n                this.startAttributes['comments'].push( {\n                    type: \"comment\",\n                    comment: token[1],\n                    line: token[2]\n                });\n\n            } else if (PHP.Constants.T_DOC_COMMENT === token[0]) {\n                this.startAttributes['comments'].push( new PHPParser_Comment_Doc(token[1], token[2]) );\n            } else if (this.dropTokens[token[0]] === undefined) {\n                this.tokenValue = token[1];\n                this.startAttributes['startLine'] = token[2];\n                this.endAttributes['endLine'] = this.line;\n\n                return this.tokenMap[token[0]];\n            }\n        }\n    }\n\n    this.startAttributes['startLine'] = this.line;\n    return 0;\n};\n\nPHP.Parser.prototype.tokenName = function( token ) {\n    var constants = [\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_YIELD\",\"T_DOUBLE_ARROW\",\"T_YIELD_FROM\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_POW_EQUAL\",\"T_COALESCE\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_SPACESHIP\",\"T_IS_SMALLER_OR_EQUAL\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"T_INSTANCEOF\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"T_POW\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_CHARACTER\",\"T_BAD_CHARACTER\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_FINALLY\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_DOUBLE_ARROW\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_COMMENT\",\"T_DOC_COMMENT\",\"T_OPEN_TAG\",\"T_OPEN_TAG_WITH_ECHO\",\"T_CLOSE_TAG\",\"T_WHITESPACE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\",\"T_ELLIPSIS\"];\n    var current = \"UNKNOWN\";\n    constants.some(function( constant ) {\n        if (PHP.Constants[ constant ] === token) {\n            current = constant;\n            return true;\n        } else {\n            return false;\n        }\n    });\n\n    return current;\n};\n\nPHP.Parser.prototype.createTokenMap = function() {\n    var tokenMap = {},\n    name,\n    i;\n    for ( i = 256; i < 1000; ++i ) {\n        if( PHP.Constants.T_OPEN_TAG_WITH_ECHO === i ) {\n            tokenMap[ i ] = PHP.Constants.T_ECHO;\n        } else if( PHP.Constants.T_CLOSE_TAG === i ) {\n            tokenMap[ i ] = 59;\n        } else if ( 'UNKNOWN' !== (name = this.tokenName( i ) ) ) { \n            tokenMap[ i ] =  this[name];\n        }\n    }\n    return tokenMap;\n};\n\nPHP.Parser.prototype.TOKEN_NONE    = -1;\nPHP.Parser.prototype.TOKEN_INVALID = 157;\n\nPHP.Parser.prototype.TOKEN_MAP_SIZE = 392;\n\nPHP.Parser.prototype.YYLAST       = 889;\nPHP.Parser.prototype.YY2TBLSTATE  = 337;\nPHP.Parser.prototype.YYGLAST      = 410;\nPHP.Parser.prototype.YYNLSTATES   = 564;\nPHP.Parser.prototype.YYUNEXPECTED = 32767;\nPHP.Parser.prototype.YYDEFAULT    = -32766;\nPHP.Parser.prototype.YYERRTOK = 256;\nPHP.Parser.prototype.T_INCLUDE = 257;\nPHP.Parser.prototype.T_INCLUDE_ONCE = 258;\nPHP.Parser.prototype.T_EVAL = 259;\nPHP.Parser.prototype.T_REQUIRE = 260;\nPHP.Parser.prototype.T_REQUIRE_ONCE = 261;\nPHP.Parser.prototype.T_LOGICAL_OR = 262;\nPHP.Parser.prototype.T_LOGICAL_XOR = 263;\nPHP.Parser.prototype.T_LOGICAL_AND = 264;\nPHP.Parser.prototype.T_PRINT = 265;\nPHP.Parser.prototype.T_YIELD = 266;\nPHP.Parser.prototype.T_DOUBLE_ARROW = 267;\nPHP.Parser.prototype.T_YIELD_FROM = 268;\nPHP.Parser.prototype.T_PLUS_EQUAL = 269;\nPHP.Parser.prototype.T_MINUS_EQUAL = 270;\nPHP.Parser.prototype.T_MUL_EQUAL = 271;\nPHP.Parser.prototype.T_DIV_EQUAL = 272;\nPHP.Parser.prototype.T_CONCAT_EQUAL = 273;\nPHP.Parser.prototype.T_MOD_EQUAL = 274;\nPHP.Parser.prototype.T_AND_EQUAL = 275;\nPHP.Parser.prototype.T_OR_EQUAL = 276;\nPHP.Parser.prototype.T_XOR_EQUAL = 277;\nPHP.Parser.prototype.T_SL_EQUAL = 278;\nPHP.Parser.prototype.T_SR_EQUAL = 279;\nPHP.Parser.prototype.T_POW_EQUAL = 280;\nPHP.Parser.prototype.T_COALESCE = 281;\nPHP.Parser.prototype.T_BOOLEAN_OR = 282;\nPHP.Parser.prototype.T_BOOLEAN_AND = 283;\nPHP.Parser.prototype.T_IS_EQUAL = 284;\nPHP.Parser.prototype.T_IS_NOT_EQUAL = 285;\nPHP.Parser.prototype.T_IS_IDENTICAL = 286;\nPHP.Parser.prototype.T_IS_NOT_IDENTICAL = 287;\nPHP.Parser.prototype.T_SPACESHIP = 288;\nPHP.Parser.prototype.T_IS_SMALLER_OR_EQUAL = 289;\nPHP.Parser.prototype.T_IS_GREATER_OR_EQUAL = 290;\nPHP.Parser.prototype.T_SL = 291;\nPHP.Parser.prototype.T_SR = 292;\nPHP.Parser.prototype.T_INSTANCEOF = 293;\nPHP.Parser.prototype.T_INC = 294;\nPHP.Parser.prototype.T_DEC = 295;\nPHP.Parser.prototype.T_INT_CAST = 296;\nPHP.Parser.prototype.T_DOUBLE_CAST = 297;\nPHP.Parser.prototype.T_STRING_CAST = 298;\nPHP.Parser.prototype.T_ARRAY_CAST = 299;\nPHP.Parser.prototype.T_OBJECT_CAST = 300;\nPHP.Parser.prototype.T_BOOL_CAST = 301;\nPHP.Parser.prototype.T_UNSET_CAST = 302;\nPHP.Parser.prototype.T_POW = 303;\nPHP.Parser.prototype.T_NEW = 304;\nPHP.Parser.prototype.T_CLONE = 305;\nPHP.Parser.prototype.T_EXIT = 306;\nPHP.Parser.prototype.T_IF = 307;\nPHP.Parser.prototype.T_ELSEIF = 308;\nPHP.Parser.prototype.T_ELSE = 309;\nPHP.Parser.prototype.T_ENDIF = 310;\nPHP.Parser.prototype.T_LNUMBER = 311;\nPHP.Parser.prototype.T_DNUMBER = 312;\nPHP.Parser.prototype.T_STRING = 313;\nPHP.Parser.prototype.T_STRING_VARNAME = 314;\nPHP.Parser.prototype.T_VARIABLE = 315;\nPHP.Parser.prototype.T_NUM_STRING = 316;\nPHP.Parser.prototype.T_INLINE_HTML = 317;\nPHP.Parser.prototype.T_CHARACTER = 318;\nPHP.Parser.prototype.T_BAD_CHARACTER = 319;\nPHP.Parser.prototype.T_ENCAPSED_AND_WHITESPACE = 320;\nPHP.Parser.prototype.T_CONSTANT_ENCAPSED_STRING = 321;\nPHP.Parser.prototype.T_ECHO = 322;\nPHP.Parser.prototype.T_DO = 323;\nPHP.Parser.prototype.T_WHILE = 324;\nPHP.Parser.prototype.T_ENDWHILE = 325;\nPHP.Parser.prototype.T_FOR = 326;\nPHP.Parser.prototype.T_ENDFOR = 327;\nPHP.Parser.prototype.T_FOREACH = 328;\nPHP.Parser.prototype.T_ENDFOREACH = 329;\nPHP.Parser.prototype.T_DECLARE = 330;\nPHP.Parser.prototype.T_ENDDECLARE = 331;\nPHP.Parser.prototype.T_AS = 332;\nPHP.Parser.prototype.T_SWITCH = 333;\nPHP.Parser.prototype.T_ENDSWITCH = 334;\nPHP.Parser.prototype.T_CASE = 335;\nPHP.Parser.prototype.T_DEFAULT = 336;\nPHP.Parser.prototype.T_BREAK = 337;\nPHP.Parser.prototype.T_CONTINUE = 338;\nPHP.Parser.prototype.T_GOTO = 339;\nPHP.Parser.prototype.T_FUNCTION = 340;\nPHP.Parser.prototype.T_CONST = 341;\nPHP.Parser.prototype.T_RETURN = 342;\nPHP.Parser.prototype.T_TRY = 343;\nPHP.Parser.prototype.T_CATCH = 344;\nPHP.Parser.prototype.T_FINALLY = 345;\nPHP.Parser.prototype.T_THROW = 346;\nPHP.Parser.prototype.T_USE = 347;\nPHP.Parser.prototype.T_INSTEADOF = 348;\nPHP.Parser.prototype.T_GLOBAL = 349;\nPHP.Parser.prototype.T_STATIC = 350;\nPHP.Parser.prototype.T_ABSTRACT = 351;\nPHP.Parser.prototype.T_FINAL = 352;\nPHP.Parser.prototype.T_PRIVATE = 353;\nPHP.Parser.prototype.T_PROTECTED = 354;\nPHP.Parser.prototype.T_PUBLIC = 355;\nPHP.Parser.prototype.T_VAR = 356;\nPHP.Parser.prototype.T_UNSET = 357;\nPHP.Parser.prototype.T_ISSET = 358;\nPHP.Parser.prototype.T_EMPTY = 359;\nPHP.Parser.prototype.T_HALT_COMPILER = 360;\nPHP.Parser.prototype.T_CLASS = 361;\nPHP.Parser.prototype.T_TRAIT = 362;\nPHP.Parser.prototype.T_INTERFACE = 363;\nPHP.Parser.prototype.T_EXTENDS = 364;\nPHP.Parser.prototype.T_IMPLEMENTS = 365;\nPHP.Parser.prototype.T_OBJECT_OPERATOR = 366;\nPHP.Parser.prototype.T_LIST = 367;\nPHP.Parser.prototype.T_ARRAY = 368;\nPHP.Parser.prototype.T_CALLABLE = 369;\nPHP.Parser.prototype.T_CLASS_C = 370;\nPHP.Parser.prototype.T_TRAIT_C = 371;\nPHP.Parser.prototype.T_METHOD_C = 372;\nPHP.Parser.prototype.T_FUNC_C = 373;\nPHP.Parser.prototype.T_LINE = 374;\nPHP.Parser.prototype.T_FILE = 375;\nPHP.Parser.prototype.T_COMMENT = 376;\nPHP.Parser.prototype.T_DOC_COMMENT = 377;\nPHP.Parser.prototype.T_OPEN_TAG = 378;\nPHP.Parser.prototype.T_OPEN_TAG_WITH_ECHO = 379;\nPHP.Parser.prototype.T_CLOSE_TAG = 380;\nPHP.Parser.prototype.T_WHITESPACE = 381;\nPHP.Parser.prototype.T_START_HEREDOC = 382;\nPHP.Parser.prototype.T_END_HEREDOC = 383;\nPHP.Parser.prototype.T_DOLLAR_OPEN_CURLY_BRACES = 384;\nPHP.Parser.prototype.T_CURLY_OPEN = 385;\nPHP.Parser.prototype.T_PAAMAYIM_NEKUDOTAYIM = 386;\nPHP.Parser.prototype.T_NAMESPACE = 387;\nPHP.Parser.prototype.T_NS_C = 388;\nPHP.Parser.prototype.T_DIR = 389;\nPHP.Parser.prototype.T_NS_SEPARATOR = 390;\nPHP.Parser.prototype.T_ELLIPSIS = 391;\nPHP.Parser.prototype.terminals = [\n    \"$EOF\",\n    \"error\",\n    \"T_INCLUDE\",\n    \"T_INCLUDE_ONCE\",\n    \"T_EVAL\",\n    \"T_REQUIRE\",\n    \"T_REQUIRE_ONCE\",\n    \"','\",\n    \"T_LOGICAL_OR\",\n    \"T_LOGICAL_XOR\",\n    \"T_LOGICAL_AND\",\n    \"T_PRINT\",\n    \"T_YIELD\",\n    \"T_DOUBLE_ARROW\",\n    \"T_YIELD_FROM\",\n    \"'='\",\n    \"T_PLUS_EQUAL\",\n    \"T_MINUS_EQUAL\",\n    \"T_MUL_EQUAL\",\n    \"T_DIV_EQUAL\",\n    \"T_CONCAT_EQUAL\",\n    \"T_MOD_EQUAL\",\n    \"T_AND_EQUAL\",\n    \"T_OR_EQUAL\",\n    \"T_XOR_EQUAL\",\n    \"T_SL_EQUAL\",\n    \"T_SR_EQUAL\",\n    \"T_POW_EQUAL\",\n    \"'?'\",\n    \"':'\",\n    \"T_COALESCE\",\n    \"T_BOOLEAN_OR\",\n    \"T_BOOLEAN_AND\",\n    \"'|'\",\n    \"'^'\",\n    \"'&'\",\n    \"T_IS_EQUAL\",\n    \"T_IS_NOT_EQUAL\",\n    \"T_IS_IDENTICAL\",\n    \"T_IS_NOT_IDENTICAL\",\n    \"T_SPACESHIP\",\n    \"'<'\",\n    \"T_IS_SMALLER_OR_EQUAL\",\n    \"'>'\",\n    \"T_IS_GREATER_OR_EQUAL\",\n    \"T_SL\",\n    \"T_SR\",\n    \"'+'\",\n    \"'-'\",\n    \"'.'\",\n    \"'*'\",\n    \"'/'\",\n    \"'%'\",\n    \"'!'\",\n    \"T_INSTANCEOF\",\n    \"'~'\",\n    \"T_INC\",\n    \"T_DEC\",\n    \"T_INT_CAST\",\n    \"T_DOUBLE_CAST\",\n    \"T_STRING_CAST\",\n    \"T_ARRAY_CAST\",\n    \"T_OBJECT_CAST\",\n    \"T_BOOL_CAST\",\n    \"T_UNSET_CAST\",\n    \"'@'\",\n    \"T_POW\",\n    \"'['\",\n    \"T_NEW\",\n    \"T_CLONE\",\n    \"T_EXIT\",\n    \"T_IF\",\n    \"T_ELSEIF\",\n    \"T_ELSE\",\n    \"T_ENDIF\",\n    \"T_LNUMBER\",\n    \"T_DNUMBER\",\n    \"T_STRING\",\n    \"T_STRING_VARNAME\",\n    \"T_VARIABLE\",\n    \"T_NUM_STRING\",\n    \"T_INLINE_HTML\",\n    \"T_ENCAPSED_AND_WHITESPACE\",\n    \"T_CONSTANT_ENCAPSED_STRING\",\n    \"T_ECHO\",\n    \"T_DO\",\n    \"T_WHILE\",\n    \"T_ENDWHILE\",\n    \"T_FOR\",\n    \"T_ENDFOR\",\n    \"T_FOREACH\",\n    \"T_ENDFOREACH\",\n    \"T_DECLARE\",\n    \"T_ENDDECLARE\",\n    \"T_AS\",\n    \"T_SWITCH\",\n    \"T_ENDSWITCH\",\n    \"T_CASE\",\n    \"T_DEFAULT\",\n    \"T_BREAK\",\n    \"T_CONTINUE\",\n    \"T_GOTO\",\n    \"T_FUNCTION\",\n    \"T_CONST\",\n    \"T_RETURN\",\n    \"T_TRY\",\n    \"T_CATCH\",\n    \"T_FINALLY\",\n    \"T_THROW\",\n    \"T_USE\",\n    \"T_INSTEADOF\",\n    \"T_GLOBAL\",\n    \"T_STATIC\",\n    \"T_ABSTRACT\",\n    \"T_FINAL\",\n    \"T_PRIVATE\",\n    \"T_PROTECTED\",\n    \"T_PUBLIC\",\n    \"T_VAR\",\n    \"T_UNSET\",\n    \"T_ISSET\",\n    \"T_EMPTY\",\n    \"T_HALT_COMPILER\",\n    \"T_CLASS\",\n    \"T_TRAIT\",\n    \"T_INTERFACE\",\n    \"T_EXTENDS\",\n    \"T_IMPLEMENTS\",\n    \"T_OBJECT_OPERATOR\",\n    \"T_LIST\",\n    \"T_ARRAY\",\n    \"T_CALLABLE\",\n    \"T_CLASS_C\",\n    \"T_TRAIT_C\",\n    \"T_METHOD_C\",\n    \"T_FUNC_C\",\n    \"T_LINE\",\n    \"T_FILE\",\n    \"T_START_HEREDOC\",\n    \"T_END_HEREDOC\",\n    \"T_DOLLAR_OPEN_CURLY_BRACES\",\n    \"T_CURLY_OPEN\",\n    \"T_PAAMAYIM_NEKUDOTAYIM\",\n    \"T_NAMESPACE\",\n    \"T_NS_C\",\n    \"T_DIR\",\n    \"T_NS_SEPARATOR\",\n    \"T_ELLIPSIS\",\n    \"';'\",\n    \"'{'\",\n    \"'}'\",\n    \"'('\",\n    \"')'\",\n    \"'`'\",\n    \"']'\",\n    \"'\\\"'\",\n    \"'$'\"\n    , \"???\"\n];\nPHP.Parser.prototype.translate = [\n        0,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,   53,  155,  157,  156,   52,   35,  157,\n      151,  152,   50,   47,    7,   48,   49,   51,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,   29,  148,\n       41,   15,   43,   28,   65,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,   67,  157,  154,   34,  157,  153,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  149,   33,  150,   55,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,    1,    2,    3,    4,\n        5,    6,    8,    9,   10,   11,   12,   13,   14,   16,\n       17,   18,   19,   20,   21,   22,   23,   24,   25,   26,\n       27,   30,   31,   32,   36,   37,   38,   39,   40,   42,\n       44,   45,   46,   54,   56,   57,   58,   59,   60,   61,\n       62,   63,   64,   66,   68,   69,   70,   71,   72,   73,\n       74,   75,   76,   77,   78,   79,   80,   81,  157,  157,\n       82,   83,   84,   85,   86,   87,   88,   89,   90,   91,\n       92,   93,   94,   95,   96,   97,   98,   99,  100,  101,\n      102,  103,  104,  105,  106,  107,  108,  109,  110,  111,\n      112,  113,  114,  115,  116,  117,  118,  119,  120,  121,\n      122,  123,  124,  125,  126,  127,  128,  129,  130,  131,\n      132,  133,  134,  135,  136,  137,  157,  157,  157,  157,\n      157,  157,  138,  139,  140,  141,  142,  143,  144,  145,\n      146,  147\n];\n\nPHP.Parser.prototype.yyaction = [\n      569,  570,  571,  572,  573,  215,  574,  575,  576,  612,\n      613,    0,   27,   99,  100,  101,  102,  103,  104,  105,\n      106,  107,  108,  109,  110,-32766,-32766,-32766,   95,   96,\n       97,   24,  240,  226, -267,-32766,-32766,-32766,-32766,-32766,\n    -32766,  530,  344,  114,   98,-32766,  286,-32766,-32766,-32766,\n    -32766,-32766,  577,  870,  872,-32766,-32766,-32766,-32766,-32766,\n    -32766,-32766,-32766,  224,-32766,  714,  578,  579,  580,  581,\n      582,  583,  584,-32766,  264,  644,  840,  841,  842,  839,\n      838,  837,  585,  586,  587,  588,  589,  590,  591,  592,\n      593,  594,  595,  615,  616,  617,  618,  619,  607,  608,\n      609,  610,  611,  596,  597,  598,  599,  600,  601,  602,\n      638,  639,  640,  641,  642,  643,  603,  604,  605,  606,\n      636,  627,  625,  626,  622,  623,  116,  614,  620,  621,\n      628,  629,  631,  630,  632,  633,   42,   43,  381,   44,\n       45,  624,  635,  634, -214,   46,   47,  289,   48,-32767,\n    -32767,-32767,-32767,   90,   91,   92,   93,   94,  267,  241,\n       22,  840,  841,  842,  839,  838,  837,  832,-32766,-32766,\n    -32766,  306, 1000, 1000, 1037,  120,  966,  436, -423,  244,\n      797,   49,   50,  660,  661,  272,  362,   51,-32766,   52,\n      219,  220,   53,   54,   55,   56,   57,   58,   59,   60,\n     1016,   22,  238,   61,  351,  945,-32766,-32766,-32766,  967,\n      968,  646,  705, 1000,   28, -456,  125,  966,-32766,-32766,\n    -32766,  715,  398,  399,  216, 1000,-32766,  339,-32766,-32766,\n    -32766,-32766,   25,  222,  980,  552,  355,  378,-32766, -423,\n    -32766,-32766,-32766,  121,   65, 1045,  408, 1047, 1046,  274,\n      274,  131,  244, -423,  394,  395,  358,  519,  945,  537,\n     -423,  111, -426,  398,  399,  130,  972,  973,  974,  975,\n      969,  970,  243,  128, -422, -421, 1013,  409,  976,  971,\n      353,  791,  792,    7, -162,   63,  124,  255,  701,  256,\n      274,  382, -122, -122, -122,   -4,  715,  383,  646, 1042,\n     -421,  704,  274, -219,   33,   17,  384, -122,  385, -122,\n      386, -122,  387, -122,  369,  388, -122, -122, -122,   34,\n       35,  389,  352,  520,   36,  390,  353,  702,   62,  112,\n      818,  287,  288,  391,  392, -422, -421, -161,  350,  393,\n       40,   38,  690,  735,  396,  397,  361,   22,  122, -422,\n     -421,-32766,-32766,-32766,  791,  792, -422, -421, -425, 1000,\n     -456, -421, -238,  966,  409,   41,  382,  353,  717,  535,\n     -122,-32766,  383,-32766,-32766, -421,  704,   21,  813,   33,\n       17,  384, -421,  385, -466,  386,  224,  387, -467,  273,\n      388,  367,  945, -458,   34,   35,  389,  352,  345,   36,\n      390,  248,  247,   62,  254,  715,  287,  288,  391,  392,\n      399,-32766,-32766,-32766,  393,  295, 1000,  652,  735,  396,\n      397,  117,  115,  113,  814,  119,   72,   73,   74, -162,\n      764,   65,  240,  541,  370,  518,  274,  118,  270,   92,\n       93,   94,  242,  717,  535,   -4,   26, 1000,   75,   76,\n       77,   78,   79,   80,   81,   82,   83,   84,   85,   86,\n       87,   88,   89,   90,   91,   92,   93,   94,   95,   96,\n       97,  547,  240,  713,  715,  382,  276,-32766,-32766,  126,\n      945,  383, -161,  938,   98,  704,  225,  659,   33,   17,\n      384,  346,  385,  274,  386,  728,  387,  221,  120,  388,\n      505,  506,  540,   34,   35,  389,  715, -238,   36,  390,\n     1017,  223,   62,  494,   18,  287,  288,  127,  297,  376,\n        6,   98,  798,  393,  274,  660,  661,  490,  491, -466,\n       39, -466,  514, -467,  539, -467,   16,  458, -458,  315,\n      791,  792,  829,  553,  382,  817,  563,  653,  538,  765,\n      383,  449,  751,  535,  704,  448,  435,   33,   17,  384,\n      430,  385,  646,  386,  359,  387,  357,  647,  388,  673,\n      429, 1040,   34,   35,  389,  715,  382,   36,  390,  941,\n      492,   62,  383,  503,  287,  288,  704,  434,  440,   33,\n       17,  384,  393,  385,-32766,  386,  445,  387,  495,  509,\n      388,   10,  529,  542,   34,   35,  389,  715,  515,   36,\n      390,  499,  500,   62,  214,  -80,  287,  288,  452,  269,\n      736,  717,  535,  488,  393,  356,  266,  979,  265,  730,\n      982,  722,  358,  338,  493,  548,    0,  294,  737,    0,\n        3,    0,  309,    0,    0,  382,    0,    0,  271,    0,\n        0,  383,    0,  717,  535,  704,  227,    0,   33,   17,\n      384,    9,  385,    0,  386,    0,  387, -382,    0,  388,\n        0,    0,  325,   34,   35,  389,  715,  382,   36,  390,\n      321,  341,   62,  383,  340,  287,  288,  704,   22,  320,\n       33,   17,  384,  393,  385,  442,  386,  337,  387,  562,\n     1000,  388,   32,   31,  966,   34,   35,  389,  823,  657,\n       36,  390,  656,  821,   62,  703,  711,  287,  288,  561,\n      822,  825,  717,  535,  695,  393,  747,  749,  693,  759,\n      758,  752,  767,  945,  824,  706,  700,  712,  699,  698,\n      658,    0,  263,  262,  559,  558,  382,  556,  554,  551,\n      398,  399,  383,  550,  717,  535,  704,  546,  545,   33,\n       17,  384,  543,  385,  536,  386,   71,  387,  933,  932,\n      388,   30,   65,  731,   34,   35,  389,  274,  724,   36,\n      390,  830,  734,   62,  663,  662,  287,  288,-32766,-32766,\n    -32766,  733,  732,  934,  393,  665,  664,  756,  555,  691,\n     1041, 1001,  994, 1006, 1011, 1014,  757, 1043,-32766,  654,\n    -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,\n    -32767,  655, 1044,  717,  535, -446,  926,  348,  343,  268,\n      237,  236,  235,  234,  218,  217,  132,  129, -426, -425,\n     -424,  123,   20,   23,   70,   69,   29,   37,   64,   68,\n       66,   67, -448,    0,   15,   19,  250,  910,  296, -217,\n      467,  484,  909,  472,  528,  913,   11,  964,  955, -215,\n      525,  379,  375,  373,  371,   14,   13,   12, -214,    0,\n     -393,    0, 1005, 1039,  992,  993,  963,    0,  981\n];\n\nPHP.Parser.prototype.yycheck = [\n        2,    3,    4,    5,    6,   13,    8,    9,   10,   11,\n       12,    0,   15,   16,   17,   18,   19,   20,   21,   22,\n       23,   24,   25,   26,   27,    8,    9,   10,   50,   51,\n       52,    7,   54,    7,   79,    8,    9,   10,    8,    9,\n       10,   77,    7,   13,   66,   28,    7,   30,   31,   32,\n       33,   34,   54,   56,   57,   28,    8,   30,   31,   32,\n       33,   34,   35,   35,  109,    1,   68,   69,   70,   71,\n       72,   73,   74,  118,    7,   77,  112,  113,  114,  115,\n      116,  117,   84,   85,   86,   87,   88,   89,   90,   91,\n       92,   93,   94,   95,   96,   97,   98,   99,  100,  101,\n      102,  103,  104,  105,  106,  107,  108,  109,  110,  111,\n      112,  113,  114,  115,  116,  117,  118,  119,  120,  121,\n      122,  123,  124,  125,  126,  127,    7,  129,  130,  131,\n      132,  133,  134,  135,  136,  137,    2,    3,    4,    5,\n        6,  143,  144,  145,  152,   11,   12,    7,   14,   41,\n       42,   43,   44,   45,   46,   47,   48,   49,  109,    7,\n       67,  112,  113,  114,  115,  116,  117,  118,    8,    9,\n       10,   79,   79,   79,   82,  147,   83,   82,   67,   28,\n      152,   47,   48,  102,  103,    7,    7,   53,   28,   55,\n       56,   57,   58,   59,   60,   61,   62,   63,   64,   65,\n        1,   67,   68,   69,   70,  112,    8,    9,   10,   75,\n       76,   77,  148,   79,   13,    7,   67,   83,    8,    9,\n       10,    1,  129,  130,   13,   79,   28,  146,   30,   31,\n       32,   33,  140,  141,  139,   29,  102,    7,   28,  128,\n       30,   31,   32,  149,  151,   77,  112,   79,   80,  156,\n      156,   15,   28,  142,  120,  121,  146,   77,  112,  149,\n      149,   15,  151,  129,  130,   15,  132,  133,  134,  135,\n      136,  137,  138,   15,   67,   67,   77,  143,  144,  145,\n      146,  130,  131,    7,    7,  151,   15,  153,  148,  155,\n      156,   71,   72,   73,   74,    0,    1,   77,   77,  150,\n       67,   81,  156,  152,   84,   85,   86,   87,   88,   89,\n       90,   91,   92,   93,   29,   95,   96,   97,   98,   99,\n      100,  101,  102,  143,  104,  105,  146,  148,  108,   15,\n      150,  111,  112,  113,  114,  128,  128,    7,    7,  119,\n       67,   67,  122,  123,  124,  125,    7,   67,  149,  142,\n      142,    8,    9,   10,  130,  131,  149,  149,  151,   79,\n      152,  128,    7,   83,  143,    7,   71,  146,  148,  149,\n      150,   28,   77,   30,   31,  142,   81,    7,  148,   84,\n       85,   86,  149,   88,    7,   90,   35,   92,    7,   33,\n       95,    7,  112,    7,   99,  100,  101,  102,  103,  104,\n      105,  128,  128,  108,  109,    1,  111,  112,  113,  114,\n      130,    8,    9,   10,  119,  142,   79,  122,  123,  124,\n      125,   15,  149,  149,  148,   29,    8,    9,   10,  152,\n       29,  151,   54,   29,  149,   79,  156,   15,  143,   47,\n       48,   49,   29,  148,  149,  150,   28,   79,   30,   31,\n       32,   33,   34,   35,   36,   37,   38,   39,   40,   41,\n       42,   43,   44,   45,   46,   47,   48,   49,   50,   51,\n       52,   29,   54,   29,    1,   71,   67,    8,    9,   29,\n      112,   77,  152,  152,   66,   81,   35,  148,   84,   85,\n       86,  123,   88,  156,   90,   35,   92,   35,  147,   95,\n       72,   73,   29,   99,  100,  101,    1,  152,  104,  105,\n      152,   35,  108,   72,   73,  111,  112,   97,   98,  102,\n      103,   66,  152,  119,  156,  102,  103,  106,  107,  152,\n       67,  154,   74,  152,   29,  154,  152,  128,  152,   78,\n      130,  131,  148,  149,   71,  148,  149,  148,  149,  148,\n       77,   77,  148,  149,   81,   77,   77,   84,   85,   86,\n       77,   88,   77,   90,   77,   92,   77,   77,   95,   77,\n       77,   77,   99,  100,  101,    1,   71,  104,  105,   79,\n       79,  108,   77,   79,  111,  112,   81,   79,   82,   84,\n       85,   86,  119,   88,   82,   90,   86,   92,   87,   96,\n       95,   94,   89,   29,   99,  100,  101,    1,   91,  104,\n      105,   93,   96,  108,   94,   94,  111,  112,   94,  110,\n      123,  148,  149,  109,  119,  102,  127,  139,  126,  147,\n      139,  150,  146,  149,  154,   29,   -1,  142,  123,   -1,\n      142,   -1,  146,   -1,   -1,   71,   -1,   -1,  126,   -1,\n       -1,   77,   -1,  148,  149,   81,   35,   -1,   84,   85,\n       86,  142,   88,   -1,   90,   -1,   92,  142,   -1,   95,\n       -1,   -1,  146,   99,  100,  101,    1,   71,  104,  105,\n      146,  146,  108,   77,  146,  111,  112,   81,   67,  146,\n       84,   85,   86,  119,   88,  146,   90,  149,   92,  148,\n       79,   95,  148,  148,   83,   99,  100,  101,  148,  148,\n      104,  105,  148,  148,  108,  148,  148,  111,  112,  148,\n      148,  148,  148,  149,  148,  119,  148,  148,  148,  148,\n      148,  148,  148,  112,  148,  148,  148,  148,  148,  148,\n      148,   -1,  149,  149,  149,  149,   71,  149,  149,  149,\n      129,  130,   77,  149,  148,  149,   81,  149,  149,   84,\n       85,   86,  149,   88,  149,   90,  149,   92,  150,  150,\n       95,  151,  151,  150,   99,  100,  101,  156,  150,  104,\n      105,  150,  150,  108,  150,  150,  111,  112,    8,    9,\n       10,  150,  150,  150,  119,  150,  150,  150,  150,  150,\n      150,  150,  150,  150,  150,  150,  150,  150,   28,  150,\n       30,   31,   32,   33,   34,   35,   36,   37,   38,   39,\n       40,  150,  150,  148,  149,  151,  153,  151,  151,  151,\n      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,\n      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,\n      151,  151,  151,   -1,  152,  152,  152,  152,  152,  152,\n      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,\n      152,  152,  152,  152,  152,  152,  152,  152,  152,   -1,\n      153,   -1,  154,  154,  154,  154,  154,   -1,  155\n];\n\nPHP.Parser.prototype.yybase = [\n        0,  220,  295,   94,  180,  560,   -2,   -2,   -2,   -2,\n      -36,  473,  574,  606,  574,  505,  404,  675,  675,  675,\n       28,  351,  462,  462,  462,  461,  396,  476,  451,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  401,   64,  201,  568,  704,  713,  708,\n      702,  714,  520,  706,  705,  211,  650,  651,  450,  652,\n      653,  654,  655,  709,  480,  703,  712,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,   48,   30,  469,  403,  403,  403,  403,\n      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,\n      403,  403,  403,  403,  403,  160,  160,  160,  343,  210,\n      208,  198,   17,  233,   27,  780,  780,  780,  780,  780,\n      108,  108,  108,  108,  621,  621,   93,  280,  280,  280,\n      280,  280,  280,  280,  280,  280,  280,  280,  632,  641,\n      642,  643,  392,  392,  151,  151,  151,  151,  368,  -45,\n      146,  224,  224,   95,  410,  491,  733,  199,  199,  111,\n      207,  -22,  -22,  -22,   81,  506,   92,   92,  233,  233,\n      273,  233,  423,  423,  423,  221,  221,  221,  221,  221,\n      110,  221,  221,  221,  617,  512,  168,  516,  647,  397,\n      503,  656,  274,  381,  377,  538,  535,  337,  523,  337,\n      421,  441,  428,  525,  337,  337,  285,  401,  394,  378,\n      567,  474,  339,  564,  140,  179,  409,  399,  384,  594,\n      561,  711,  330,  710,  358,  149,  378,  378,  378,  370,\n      593,  548,  355,   -8,  646,  484,  277,  417,  386,  645,\n      635,  230,  634,  276,  331,  356,  565,  485,  485,  485,\n      485,  485,  485,  460,  485,  483,  691,  691,  478,  501,\n      460,  696,  460,  485,  691,  460,  460,  502,  485,  522,\n      522,  483,  508,  499,  691,  691,  499,  478,  460,  571,\n      551,  514,  482,  413,  413,  514,  460,  413,  501,  413,\n       11,  697,  699,  444,  700,  695,  698,  676,  694,  493,\n      615,  497,  515,  684,  683,  693,  479,  489,  620,  692,\n      549,  592,  487,  246,  314,  498,  463,  689,  523,  486,\n      455,  455,  455,  463,  687,  455,  455,  455,  455,  455,\n      455,  455,  455,  732,   24,  495,  510,  591,  590,  589,\n      406,  588,  496,  524,  422,  599,  488,  549,  549,  649,\n      727,  673,  490,  682,  716,  690,  555,  119,  271,  681,\n      648,  543,  492,  534,  680,  598,  246,  715,  494,  672,\n      549,  671,  455,  674,  701,  730,  731,  688,  728,  722,\n      152,  526,  587,  178,  729,  659,  596,  595,  554,  725,\n      707,  721,  720,  178,  576,  511,  717,  518,  677,  504,\n      678,  613,  258,  657,  686,  584,  724,  723,  726,  583,\n      582,  609,  608,  250,  236,  685,  442,  458,  517,  581,\n      500,  628,  604,  679,  580,  579,  623,  619,  718,  521,\n      486,  519,  509,  507,  513,  600,  618,  719,  206,  578,\n      586,  573,  481,  572,  631,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,  134,  134,   -2,   -2,   -2,\n        0,    0,    0,    0,   -2,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,  418,   -3,  418,  418,   -3,  418,  418,\n      418,  418,  418,  418,  -22,  -22,  -22,  -22,  221,  221,\n      221,  221,  221,  221,  221,  221,  221,  221,  221,  221,\n      221,  221,   49,   49,   49,   49,  -22,  -22,  221,  221,\n      221,  221,  221,   49,  221,  221,  221,   92,  221,   92,\n       92,  337,  337,    0,    0,    0,    0,    0,  485,   92,\n        0,    0,    0,    0,    0,    0,  485,  485,  485,    0,\n        0,    0,    0,    0,  485,    0,    0,    0,  337,   92,\n        0,  420,  420,  178,  420,  420,    0,    0,    0,  485,\n      485,    0,  508,    0,    0,    0,    0,  691,    0,    0,\n        0,    0,    0,  455,  119,  682,    0,   39,    0,    0,\n        0,    0,    0,  490,   39,   26,    0,   26,    0,    0,\n      455,  455,  455,    0,  490,  490,    0,    0,   67,  490,\n        0,    0,    0,   67,   35,    0,   35,    0,    0,    0,\n      178\n];\n\nPHP.Parser.prototype.yydefault = [\n        3,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,  468,  468,  468,32767,32767,32767,32767,  285,\n      460,  285,  285,32767,  419,  419,  419,  419,  419,  419,\n      419,  460,32767,32767,32767,32767,32767,  364,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,  465,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,  347,  348,  350,\n      351,  284,  420,  237,  464,  283,  116,  246,  239,  191,\n      282,  223,  119,  312,  365,  314,  363,  367,  313,  290,\n      294,  295,  296,  297,  298,  299,  300,  301,  302,  303,\n      304,  305,  288,  289,  366,  344,  343,  342,  310,  311,\n      287,  315,  317,  287,  316,  333,  334,  331,  332,  335,\n      336,  337,  338,  339,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,  269,  269,\n      269,  269,  324,  325,  229,  229,  229,  229,32767,  270,\n    32767,  229,32767,32767,32767,32767,32767,32767,32767,  413,\n      341,  319,  320,  318,32767,  392,32767,  394,  307,  309,\n      387,  291,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,  389,  421,  421,32767,32767,32767,  381,32767,\n      159,  210,  212,  397,32767,32767,32767,32767,32767,  329,\n    32767,32767,32767,32767,32767,32767,  474,32767,32767,32767,\n    32767,32767,  421,32767,32767,32767,  321,  322,  323,32767,\n    32767,32767,  421,  421,32767,32767,  421,32767,  421,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,  163,32767,32767,  395,  395,32767,32767,\n      163,  390,  163,32767,32767,  163,  163,  176,32767,  174,\n      174,32767,32767,  178,32767,  435,  178,32767,  163,  196,\n      196,  373,  165,  231,  231,  373,  163,  231,32767,  231,\n    32767,32767,32767,   82,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n      383,32767,32767,32767,  401,32767,  414,  433,  381,32767,\n      327,  328,  330,32767,  423,  352,  353,  354,  355,  356,\n      357,  358,  360,32767,  461,  386,32767,32767,32767,32767,\n    32767,32767,   84,  108,  245,32767,  473,   84,  384,32767,\n      473,32767,32767,32767,32767,32767,32767,  286,32767,32767,\n    32767,   84,32767,   84,32767,32767,  457,32767,32767,  421,\n      385,32767,  326,  398,  439,32767,32767,  422,32767,32767,\n      218,   84,32767,  177,32767,32767,32767,32767,32767,32767,\n      401,32767,32767,  179,32767,32767,  421,32767,32767,32767,\n    32767,32767,  281,32767,32767,32767,32767,32767,  421,32767,\n    32767,32767,32767,  222,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,   82,\n       60,32767,  263,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,  121,  121,    3,    3,  121,\n      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,\n      121,  121,  121,  121,  248,  154,  248,  204,  248,  248,\n      207,  196,  196,  255\n];\n\nPHP.Parser.prototype.yygoto = [\n      163,  163,  135,  135,  135,  146,  148,  179,  164,  161,\n      145,  161,  161,  161,  162,  162,  162,  162,  162,  162,\n      162,  145,  157,  158,  159,  160,  176,  174,  177,  410,\n      411,  299,  412,  415,  416,  417,  418,  419,  420,  421,\n      422,  857,  136,  137,  138,  139,  140,  141,  142,  143,\n      144,  147,  173,  175,  178,  195,  198,  199,  201,  202,\n      204,  205,  206,  207,  208,  209,  210,  211,  212,  213,\n      232,  233,  251,  252,  253,  316,  317,  318,  462,  180,\n      181,  182,  183,  184,  185,  186,  187,  188,  189,  190,\n      191,  192,  193,  149,  194,  150,  165,  166,  167,  196,\n      168,  151,  152,  153,  169,  154,  197,  133,  170,  155,\n      171,  172,  156,  521,  200,  257,  246,  464,  432,  687,\n      649,  278,  481,  482,  527,  200,  437,  437,  437,  766,\n        5,  746,  650,  557,  437,  426,  775,  770,  428,  431,\n      444,  465,  466,  468,  483,  279,  651,  336,  450,  453,\n      437,  560,  485,  487,  508,  511,  763,  516,  517,  777,\n      524,  762,  526,  532,  773,  534,  480,  480,  965,  965,\n      965,  965,  965,  965,  965,  965,  965,  965,  965,  965,\n      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,\n      413,  413,  413,  413,  942,  502,  478,  496,  512,  456,\n      298,  437,  437,  451,  471,  437,  437,  674,  437,  229,\n      456,  230,  231,  463,  828,  533,  681,  438,  513,  826,\n      461,  475,  460,  414,  414,  414,  414,  414,  414,  414,\n      414,  414,  414,  414,  414,  414,  414,  301,  674,  674,\n      443,  454, 1033, 1033, 1034, 1034,  425,  531,  425,  708,\n      750,  800,  457,  372, 1033,  943, 1034, 1026,  300, 1018,\n      497,    8,  313,  904,  796,  944,  996,  785,  789, 1007,\n      285,  670, 1036,  329,  307,  310,  804,  668,  544,  332,\n      935,  940,  366,  807,  678,  477,  377,  754,  844,    0,\n      667,  667,  675,  675,  675,  677,    0,  666,  323,  498,\n      328,  312,  312,  258,  259,  283,  459,  261,  322,  284,\n      326,  486,  280,  281,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,  790,  790,  790,  790,  946,    0,  946,\n      790,  790, 1004,  790, 1004,    0,    0,    0,    0,  836,\n        0, 1015, 1015,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,  744,  744,  744,  720,  744,    0,\n      739,  745,  721,  780,  780, 1023,    0,    0, 1002,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,  806,    0,  806,    0,    0,    0,    0, 1008, 1009\n];\n\nPHP.Parser.prototype.yygcheck = [\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   52,   45,  112,  112,   80,    8,   10,\n       10,   64,   55,   55,   55,   45,    8,    8,    8,   10,\n       92,   10,   11,   10,    8,   10,   10,   10,   38,   38,\n       38,   38,   38,   38,   62,   62,   12,   62,   28,    8,\n        8,   28,   28,   28,   28,   28,   28,   28,   28,   28,\n       28,   28,   28,   28,   28,   28,   70,   70,   70,   70,\n       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,\n      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,\n      113,  113,  113,  113,   76,   56,   35,   35,   56,   69,\n       56,    8,    8,    8,    8,    8,    8,   19,    8,   60,\n       69,   60,   60,    7,    7,    7,   25,    8,    7,    7,\n        2,    2,    8,  115,  115,  115,  115,  115,  115,  115,\n      115,  115,  115,  115,  115,  115,  115,   53,   19,   19,\n       53,   53,  123,  123,  124,  124,  109,    5,  109,   44,\n       29,   78,  114,   53,  123,   76,  124,  122,   41,  120,\n       43,   53,   42,   96,   74,   76,   76,   72,   75,  117,\n       14,   21,  123,   18,    9,   13,   79,   20,   66,   17,\n      102,  104,   58,   81,   22,   59,  100,   63,   94,   -1,\n       19,   19,   19,   19,   19,   19,   -1,   19,   45,   45,\n       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,\n       45,   45,   64,   64,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   52,   52,   52,   52,   52,   -1,   52,\n       52,   52,   80,   52,   80,   -1,   -1,   -1,   -1,   92,\n       -1,   80,   80,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   52,   52,   52,   52,   52,   -1,\n       52,   52,   52,   69,   69,   69,   -1,   -1,   80,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   80,   -1,   80,   -1,   -1,   -1,   -1,   80,   80\n];\n\nPHP.Parser.prototype.yygbase = [\n        0,    0, -317,    0,    0,  237,    0,  210, -136,    4,\n      118,  130,  144,  -10,   16,    0,    0,  -59,   10,  -47,\n       -9,    7,  -77,  -20,    0,  209,    0,    0, -388,  234,\n        0,    0,    0,    0,    0,  165,    0,    0,  103,    0,\n        0,  225,   44,   45,  235,   84,    0,    0,    0,    0,\n        0,    0,  109, -115,    0, -113, -179,    0,  -78,  -81,\n     -347,    0, -122,  -80, -249,    0,  -19,    0,    0,  169,\n      -48,    0,   26,    0,   22,   24,  -99,    0,  230,  -13,\n      114,  -79,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,  120,    0,  -90,    0,   23,    0,    0,    0,\n      -89,    0,  -67,    0,  -69,    0,    0,    0,    0,    8,\n        0,    0, -140,  -34,  229,    9,    0,   21,    0,    0,\n      218,    0,  233,   -3,   -1,    0\n];\n\nPHP.Parser.prototype.yygdefault = [\n    -32768,  380,  565,    2,  566,  637,  645,  504,  400,  433,\n      748,  688,  689,  303,  342,  401,  302,  330,  324,  676,\n      669,  671,  679,  134,  333,  682,    1,  684,  439,  716,\n      291,  692,  292,  507,  694,  446,  696,  697,  427,  304,\n      305,  447,  311,  479,  707,  203,  308,  709,  290,  710,\n      719,  335,  293,  510,  489,  469,  501,  402,  363,  476,\n      228,  455,  473,  753,  277,  761,  549,  769,  772,  403,\n      404,  470,  784,  368,  794,  788,  960,  319,  799,  805,\n      991,  808,  811,  349,  331,  327,  815,  816,    4,  820,\n      522,  523,  835,  239,  843,  856,  347,  923,  925,  441,\n      374,  936,  360,  334,  939,  995,  354,  405,  364,  952,\n      260,  282,  245,  406,  423,  249,  407,  365,  998,  314,\n     1019,  424, 1027, 1035,  275,  474\n];\n\nPHP.Parser.prototype.yylhs = [\n        0,    1,    3,    3,    2,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    6,    6,    6,    6,    6,    6,    6,\n        7,    7,    8,    8,    9,    4,    4,    4,    4,    4,\n        4,    4,    4,    4,    4,    4,   14,   14,   15,   15,\n       15,   15,   17,   17,   13,   13,   18,   18,   19,   19,\n       20,   20,   21,   21,   16,   16,   22,   24,   24,   25,\n       26,   26,   28,   27,   27,   27,   27,   29,   29,   29,\n       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,\n       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,\n       29,   29,   10,   10,   48,   48,   51,   51,   50,   49,\n       49,   42,   42,   53,   53,   54,   54,   11,   12,   12,\n       12,   57,   57,   57,   58,   58,   61,   61,   59,   59,\n       62,   62,   36,   36,   44,   44,   47,   47,   47,   46,\n       46,   63,   37,   37,   37,   37,   64,   64,   65,   65,\n       66,   66,   34,   34,   30,   30,   67,   32,   32,   68,\n       31,   31,   33,   33,   43,   43,   43,   43,   55,   55,\n       71,   71,   72,   72,   74,   74,   75,   75,   75,   73,\n       73,   56,   56,   76,   76,   77,   77,   78,   78,   78,\n       39,   39,   79,   40,   40,   81,   81,   60,   60,   82,\n       82,   82,   82,   87,   87,   88,   88,   89,   89,   89,\n       89,   89,   90,   91,   91,   86,   86,   83,   83,   85,\n       85,   93,   93,   92,   92,   92,   92,   92,   92,   84,\n       84,   94,   94,   41,   41,   35,   35,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n      101,   95,   95,  100,  100,  103,  103,  104,  105,  105,\n      105,  109,  109,   52,   52,   52,   96,   96,  107,  107,\n       97,   97,   99,   99,   99,  102,  102,  113,  113,   70,\n      115,  115,  115,   98,   98,   98,   98,   98,   98,   98,\n       98,   98,   98,   98,   98,   98,   98,   98,   98,   38,\n       38,  111,  111,  111,  106,  106,  106,  116,  116,  116,\n      116,  116,  116,   45,   45,   45,   80,   80,   80,  118,\n      110,  110,  110,  110,  110,  110,  108,  108,  108,  117,\n      117,  117,  117,   69,  119,  119,  120,  120,  120,  120,\n      120,  114,  121,  121,  122,  122,  122,  122,  122,  112,\n      112,  112,  112,  124,  123,  123,  123,  123,  123,  123,\n      123,  125,  125,  125\n];\n\nPHP.Parser.prototype.yylen = [\n        1,    1,    2,    0,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    3,    1,    1,    1,    1,    1,    3,\n        5,    4,    3,    4,    2,    3,    1,    1,    7,    8,\n        6,    7,    3,    1,    3,    1,    3,    1,    1,    3,\n        1,    2,    1,    2,    3,    1,    3,    3,    1,    3,\n        2,    0,    1,    1,    1,    1,    1,    3,    7,   10,\n        5,    7,    9,    5,    3,    3,    3,    3,    3,    3,\n        1,    2,    5,    7,    9,    5,    6,    3,    3,    2,\n        2,    1,    1,    1,    0,    2,    1,    3,    8,    0,\n        4,    1,    3,    0,    1,    0,    1,   10,    7,    6,\n        5,    1,    2,    2,    0,    2,    0,    2,    0,    2,\n        1,    3,    1,    4,    1,    4,    1,    1,    4,    1,\n        3,    3,    3,    4,    4,    5,    0,    2,    4,    3,\n        1,    1,    1,    4,    0,    2,    5,    0,    2,    6,\n        0,    2,    0,    3,    1,    2,    1,    1,    1,    0,\n        1,    3,    4,    6,    1,    2,    1,    1,    1,    0,\n        1,    0,    2,    2,    3,    1,    3,    1,    2,    2,\n        3,    1,    1,    3,    1,    1,    3,    2,    0,    3,\n        4,    9,    3,    1,    3,    0,    2,    4,    5,    4,\n        4,    4,    3,    1,    1,    1,    3,    1,    1,    0,\n        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,\n        3,    1,    3,    3,    1,    0,    1,    1,    3,    3,\n        3,    4,    1,    2,    3,    3,    3,    3,    3,    3,\n        3,    3,    3,    3,    3,    3,    2,    2,    2,    2,\n        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,\n        3,    3,    3,    3,    3,    3,    3,    2,    2,    2,\n        2,    3,    3,    3,    3,    3,    3,    3,    3,    3,\n        3,    3,    5,    4,    3,    4,    4,    2,    2,    4,\n        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,\n        2,    1,    3,    2,    1,    2,    4,    2,   10,   11,\n        7,    3,    2,    0,    4,    1,    3,    2,    2,    2,\n        4,    1,    1,    1,    2,    3,    1,    1,    1,    1,\n        0,    3,    0,    1,    1,    0,    1,    1,    3,    3,\n        4,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    3,    2,    3,    3,    0,\n        1,    1,    3,    1,    1,    3,    1,    1,    4,    4,\n        4,    1,    4,    1,    1,    3,    1,    4,    2,    3,\n        1,    4,    4,    3,    3,    3,    1,    3,    1,    1,\n        3,    1,    1,    4,    3,    1,    1,    1,    3,    3,\n        0,    1,    3,    1,    3,    1,    4,    2,    0,    2,\n        2,    1,    2,    1,    1,    4,    3,    3,    3,    6,\n        3,    1,    1,    1\n];\n\n\n\nexports.PHP = PHP;\n});\n\ndefine(\"ace/mode/php_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar PHP = require(\"./php/php\").PHP;\n\nvar PhpWorker = exports.PhpWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(PhpWorker, Mirror);\n\n(function() {\n    this.setOptions = function(opts) {\n        this.inlinePhp = opts && opts.inline;\n    };\n    \n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        if (this.inlinePhp)\n            value = \"<?\" + value + \"?>\";\n\n        var tokens = PHP.Lexer(value, {short_open_tag: 1});\n        try {\n            new PHP.Parser(tokens);\n        } catch(e) {\n            errors.push({\n                row: e.line - 1,\n                column: null,\n                text: e.message.charAt(0).toUpperCase() + e.message.substring(1),\n                type: \"error\"\n            });\n        }\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(PhpWorker.prototype);\n\n});\n\ndefine(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src/worker-xml.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\ndefine(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\ndefine(\"ace/mode/xml/sax\",[], function(require, exports, module) {\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\u00B7\\u0300-\\u036F\\\\ux203F-\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring \nvar S_ATTR_S=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_V = 4;//attr value(no quot value only)\nvar S_E = 5;//attr value end and no space(quot end)\nvar S_S = 6;//(attr value end || tag end ) && (space offer)\nvar S_C = 7;//closed el<el />\n\nfunction XMLReader(){\n\t\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n  function fixedFromCharCode(code) {\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif(k in entityMap){\n\t\t\treturn entityMap[k]; \n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\tlocator&&position(start);\n\t\tdomBuilder.characters(xt,0,end-start);\n\t\tstart = end\n\t}\n\tfunction position(start,m){\n\t\twhile(start>=endPos && (m = linePattern.exec(source))){\n\t\t\tstartPos = m.index;\n\t\t\tendPos = startPos + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t}\n\t\tlocator.columnNumber = start-startPos+1;\n\t}\n\tvar startPos = 0;\n\tvar endPos = 0;\n\tvar linePattern = /.+(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\t\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\tvar i = source.indexOf('<',start);\n\t\tif(i<0){\n\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\tvar doc = domBuilder.document;\n    \t\t\tvar text = doc.createTextNode(source.substr(start));\n    \t\t\tdoc.appendChild(text);\n    \t\t\tdomBuilder.currentElement = text;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(i>start){\n\t\t\tappendText(i);\n\t\t}\n\t\tswitch(source.charAt(i+1)){\n\t\tcase '/':\n\t\t\tvar end = source.indexOf('>',i+3);\n\t\t\tvar tagName = source.substring(i+2,end);\n\t\t\tvar config;\n\t\t\tif (parseStack.length > 1) {\n\t\t\t\tconfig = parseStack.pop();\n\t\t\t} else {\n\t\t\t\terrorHandler.fatalError(\"end tag name not found for: \"+tagName);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\n\t        if(config.tagName != tagName){\n\t            errorHandler.fatalError(\"end tag name: \" + tagName + \" does not match the current start tagName: \"+config.tagName );\n\t        }\n\t\t\tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\tif(localNSMap){\n\t\t\t\tfor(var prefix in localNSMap){\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix) ;\n\t\t\t\t}\n\t\t\t}\n\t\t\tend++;\n\t\t\tbreak;\n\t\tcase '?':// <?...?>\n\t\t\tlocator&&position(i);\n\t\t\tend = parseInstruction(source,i,domBuilder);\n\t\t\tbreak;\n\t\tcase '!':// <!doctype,<![CDATA,<!--\n\t\t\tlocator&&position(i);\n\t\t\tend = parseDCC(source,i,domBuilder,errorHandler);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ttry{\n\t\t\t\tlocator&&position(i);\n\t\t\t\t\n\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\tvar end = parseElementStartPart(source,i,el,entityReplacer,errorHandler);\n\t\t\t\tvar len = el.length;\n\t\t\t\tif(len && locator){\n\t\t\t\t\tvar backup = copyLocator(locator,{});\n\t\t\t\t\tfor(var i = 0;i<len;i++){\n\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\ta.offset = copyLocator(locator,{});\n\t\t\t\t\t}\n\t\t\t\t\tcopyLocator(backup,locator);\n\t\t\t\t}\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tif(!entityMap.nbsp){\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tappendElement(el,domBuilder,parseStack);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\n\t\t\t\t}else{\n\t\t\t\t\tend++;\n\t\t\t\t}\n\t\t\t}catch(e){\n\t\t\t\terrorHandler.error('element parse error: '+e);\n\t\t\t\tend = -1;\n\t\t\t}\n\n\t\t}\n\t\tif(end<0){\n\t\t\tappendText(i+1);\n\t\t}else{\n\t\t\tstart = end;\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n\t\n}\nfunction parseElementStartPart(source,start,el,entityReplacer,errorHandler){\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_S){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\tthrow new Error('attribute equal must after attrName');\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ){//equal\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\tel.add(attrName,value,start-1);\n\t\t\t\t\ts = S_E;\n\t\t\t\t}else{\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_V){\n\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tel.add(attrName,value,start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_E\n\t\t\t}else{\n\t\t\t\tthrow new Error('attribute value must after \"=\"');\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_E:\n\t\t\tcase S_S:\n\t\t\tcase S_C:\n\t\t\t\ts = S_C;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_V:\n\t\t\tcase S_ATTR:\n\t\t\tcase S_ATTR_S:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\")\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_E:\n\t\t\tcase S_S:\n\t\t\tcase S_C:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_V://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed  = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_S:\n\t\t\t\tif(s === S_ATTR_S){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_V){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\tel.add(attrName,value.replace(/&#?\\w+;/g,entityReplacer),start)\n\t\t\t\t}else{\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\tel.add(value,value,start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_S;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_S;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_V:\n\t\t\t\t\tvar value = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\tel.add(attrName,value,start)\n\t\t\t\tcase S_E:\n\t\t\t\t\ts = S_S;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{//not space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_ATTR_S:\n\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead!!')\n\t\t\t\t\tel.add(attrName,attrName,start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_E:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_S:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_V;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_C:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tp++;\n\t}\n}\nfunction appendElement(el,domBuilder,parseStack){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\ta.localName = localName ;\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = 'http://www.w3.org/2000/xmlns/'\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value) \n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = 'http://www.w3.org/XML/1998/namespace';\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix]\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor(prefix in localNSMap){\n\t\t\t\tdomBuilder.endPrefixMapping(prefix) \n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\tparseStack.push(el);\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\treturn elEndStart;\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\tpos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>')\n\t}\n\treturn pos<elStartEnd;\n}\nfunction _copy(source,target){\n\tfor(var n in source){target[n] = source[n]}\n}\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\n\tvar next= source.charAt(start+2)\n\tswitch(next){\n\tcase '-':\n\t\tif(source.charAt(start + 3) === '-'){\n\t\t\tvar end = source.indexOf('-->',start+4);\n\t\t\tif(end>start){\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\n\t\t\t\treturn end+3;\n\t\t\t}else{\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}else{\n\t\t\treturn -1;\n\t\t}\n\tdefault:\n\t\tif(source.substr(start+3,6) == 'CDATA['){\n\t\t\tvar end = source.indexOf(']]>',start+9);\n\t\t\tdomBuilder.startCDATA();\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\n\t\t\tdomBuilder.endCDATA() \n\t\t\treturn end+3;\n\t\t}\n\t\tvar matchs = split(source,start);\n\t\tvar len = matchs.length;\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\n\t\t\tvar name = matchs[1][0];\n\t\t\tvar pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]\n\t\t\tvar sysid = len>4 && matchs[4][0];\n\t\t\tvar lastMatch = matchs[len-1]\n\t\t\tdomBuilder.startDTD(name,pubid && pubid.replace(/^(['\"])(.*?)\\1$/,'$2'),\n\t\t\t\t\tsysid && sysid.replace(/^(['\"])(.*?)\\1$/,'$2'));\n\t\t\tdomBuilder.endDTD();\n\t\t\t\n\t\t\treturn lastMatch.index+lastMatch[0].length\n\t\t}\n\t}\n\treturn -1;\n}\n\n\n\nfunction parseInstruction(source,start,domBuilder){\n\tvar end = source.indexOf('?>',start);\n\tif(end){\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\n\t\tif(match){\n\t\t\tvar len = match[0].length;\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\n\t\t\treturn end+2;\n\t\t}else{//error\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn -1;\n}\nfunction ElementAttributes(source){\n\t\n}\nElementAttributes.prototype = {\n\tsetTagName:function(tagName){\n\t\tif(!tagNamePattern.test(tagName)){\n\t\t\tthrow new Error('invalid tagName:'+tagName)\n\t\t}\n\t\tthis.tagName = tagName\n\t},\n\tadd:function(qName,value,offset){\n\t\tif(!tagNamePattern.test(qName)){\n\t\t\tthrow new Error('invalid attribute:'+qName)\n\t\t}\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\n\t},\n\tlength:0,\n\tgetLocalName:function(i){return this[i].localName},\n\tgetOffset:function(i){return this[i].offset},\n\tgetQName:function(i){return this[i].qName},\n\tgetURI:function(i){return this[i].uri},\n\tgetValue:function(i){return this[i].value}\n}\n\n\n\n\nfunction _set_proto_(thiz,parent){\n\tthiz.__proto__ = parent;\n\treturn thiz;\n}\nif(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){\n\t_set_proto_ = function(thiz,parent){\n\t\tfunction p(){};\n\t\tp.prototype = parent;\n\t\tp = new p();\n\t\tfor(parent in thiz){\n\t\t\tp[parent] = thiz[parent];\n\t\t}\n\t\treturn p;\n\t}\n}\n\nfunction split(source,start){\n\tvar match;\n\tvar buf = [];\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\n\treg.lastIndex = start;\n\treg.exec(source);//skip <\n\twhile(match = reg.exec(source)){\n\t\tbuf.push(match);\n\t\tif(match[1])return buf;\n\t}\n}\n\nreturn XMLReader;\n});\n\ndefine(\"ace/mode/xml/dom\",[], function(require, exports, module) {\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tdest[p] = src[p];\n\t}\n}\nfunction _extends(Class,Super){\n\tvar t = function(){};\n\tvar pt = Class.prototype;\n\tif(Object.create){\n\t\tvar ppt = Object.create(Super.prototype);\n\t\tpt.__proto__ = ppt;\n\t}\n\tif(!(pt instanceof Super)){\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class);\n\t\t}\n\t\tpt.constructor = Class;\n\t}\n}\nvar htmlns = 'http://www.w3.org/1999/xhtml' ;\nvar NodeType = {};\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\nvar ExceptionCode = {};\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\nfunction NodeList() {\n};\nNodeList.prototype = {\n\tlength:0,\n\titem: function(index) {\n\t\treturn this[index] || null;\n\t}\n};\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh;\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif(list._inc != inc){\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list,'length',ls.length);\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i];\n}\n\n_extends(LiveNodeList,NodeList);\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1;\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i];\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow new DOMException(NOT_FOUND_ERR,new Error());\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\nfunction DOMImplementation(/* Object */ features) {\n\tthis._features = {};\n\tif (features) {\n\t\tfor (var feature in features) {\n\t\t\t this._features = features[feature];\n\t\t}\n\t}\n};\n\nDOMImplementation.prototype = {\n\thasFeature: function(/* string */ feature, /* string */ version) {\n\t\tvar versions = this._features[feature.toLowerCase()];\n\t\tif (versions && (!version || version in versions)) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t},\n\tcreateDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype;\n\t\tif(doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif(qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI,qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\tcreateDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId;\n\t\tnode.systemId = systemId;\n\t\treturn node;\n\t}\n};\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\tthis.insertBefore(newChild,oldChild);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n    \t\t\t\tif(map[n] == namespaceURI){\n    \t\t\t\t\treturn n;\n    \t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == 2?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\tif(map){\n    \t\t\tif(prefix in map){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == 2?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';';\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n        }while(node=node.nextSibling)\n    }\n}\n\n\n\nfunction Document(){\n}\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:''];\n\t}\n}\nfunction _onUpdateChild(doc,el,newChild){\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\tvar cs = el.childNodes;\n\t\tif(newChild){\n\t\t\tcs[cs.length++] = newChild;\n\t\t}else{\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile(child){\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild =child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t}\n\t}\n}\nfunction _removeChild(parentNode,child){\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif(previous){\n\t\tprevious.nextSibling = next;\n\t}else{\n\t\tparentNode.firstChild = next\n\t}\n\tif(next){\n\t\tnext.previousSibling = previous;\n\t}else{\n\t\tparentNode.lastChild = previous;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument,parentNode);\n\treturn child;\n}\nfunction _insertBefore(parentNode,newChild,nextChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tcp.removeChild(newChild);//remove and update\n\t}\n\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = newChild.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn newChild;\n\t\t}\n\t\tvar newLast = newChild.lastChild;\n\t}else{\n\t\tnewFirst = newLast = newChild;\n\t}\n\tvar pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = nextChild;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparentNode.firstChild = newFirst;\n\t}\n\tif(nextChild == null){\n\t\tparentNode.lastChild = newLast;\n\t}else{\n\t\tnextChild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parentNode;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);\n\tif (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnewChild.firstChild = newChild.lastChild = null;\n\t}\n\treturn newChild;\n}\nfunction _appendSingleChild(parentNode,newChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tvar pre = parentNode.lastChild;\n\t\tcp.removeChild(newChild);//remove and update\n\t\tvar pre = parentNode.lastChild;\n\t}\n\tvar pre = parentNode.lastChild;\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = pre;\n\tnewChild.nextSibling = null;\n\tif(pre){\n\t\tpre.nextSibling = newChild;\n\t}else{\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);\n\treturn newChild;\n}\nDocument.prototype = {\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\n\tinsertBefore :  function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\tif(this.documentElement == null && newChild.nodeType == 1){\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == 1){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn rtv;\n\t},\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.target = target;\n\t\tnode.nodeValue= node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr);\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr);\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\t},\n\tappendChild:function(newChild){\n\t\t\tthrow new Error(ExceptionMessage[3]);\n\t\treturn Node.prototype.appendChild.apply(this,arguments);\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n}\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n}\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n}\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n}\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n}\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node){\n\tvar buf = [];\n\tserializeToString(node,buf);\n\treturn buf.join('');\n}\nNode.prototype.toString =function(){\n\treturn XMLSerializer.prototype.serializeToString(this);\n}\nfunction serializeToString(node,buf){\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\t\tvar isHTML = htmlns === node.namespaceURI;\n\t\tbuf.push('<',nodeName);\n\t\tfor(var i=0;i<len;i++){\n\t\t\tserializeToString(attrs.item(i),buf);\n\t\t}\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\tif(child){\n\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child,buf);\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',nodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child,buf);\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn buf.push(' ',node.name,'=\"',node.value.replace(/[<&\"]/g,_xmlEncoder),'\"');\n\tcase TEXT_NODE:\n\t\treturn buf.push(node.data.replace(/[<&]/g,_xmlEncoder));\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC \"',pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push( '\" \"',sysid);\n\t\t\t}\n\t\t\tbuf.push('\">');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM \"',sysid,'\">');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor(var n in node){\n\t\tvar v = node[n];\n\t\tif(typeof v != 'object' ){\n\t\t\tif(v != node2[n]){\n\t\t\t\tnode2[n] = v;\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length;\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value;\n}\nfunction getTextContent(node){\n\tswitch(node.nodeType){\n\tcase 1:\n\tcase 11:\n\t\tvar buf = [];\n\t\tnode = node.firstChild;\n\t\twhile(node){\n\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t}\n\t\t\tnode = node.nextSibling;\n\t\t}\n\t\treturn buf.join('');\n\tdefault:\n\t\treturn node.nodeValue;\n\t}\n}\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase 1:\n\t\t\t\tcase 11:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = value;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t__set__ = function(object,key,value){\n\t\t\tobject['$$'+key] = value;\n\t\t};\n\t}\n}catch(e){//ie8\n}\n\nreturn DOMImplementation;\n});\n\ndefine(\"ace/mode/xml/dom-parser\",[], function(require, exports, module) {\n\t'use strict';\n\n\tvar XMLReader = require('./sax'),\n\t\tDOMImplementation = require('./dom');\n\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n\t\n}\nDOMParser.prototype.parseFromString = function(source,mimeType){\t\n\tvar options = this.options;\n\tvar sax =  new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar entityMap = {'lt':'<','gt':'>','amp':'&','quot':'\"','apos':\"'\"}\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\t\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(/\\/x?html?$/.test(mimeType)){\n\t\tentityMap.nbsp = '\\xa0';\n\t\tentityMap.copy = '\\xa9';\n\t\tdefaultNSMap['']= 'http://www.w3.org/1999/xhtml';\n\t}\n\tif(source){\n\t\tsax.parse(source,defaultNSMap,entityMap);\n\t}else{\n\t\tsax.errorHandler.error(\"invalid document source\");\n\t}\n\treturn domBuilder.document;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn){\n\t\t\tif(isCallback){\n\t\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t\t}else{\n\t\t\t\tvar i=arguments.length;\n\t\t\t\twhile(--i){\n\t\t\t\t\tif(fn = errorImpl[arguments[i]]){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn(msg+_locator(locator), msg, locator);\n\t\t}||function(){};\n\t}\n\tbuild('warning','warn');\n\tbuild('error','warn','warning');\n\tbuild('fatalError','warn','warning','error');\n\treturn errorHandler;\n}\nfunction DOMHandler() {\n    this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n} \nDOMHandler.prototype = {\n\tstartDocument : function() {\n    \tthis.document = new DOMImplementation().createDocument(null, null, null);\n    \tif (this.locator) {\n        \tthis.document.documentURI = this.locator.systemId;\n    \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.document;\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\n\t    var len = attrs.length;\n\t    appendElement(this, el);\n\t    this.currentElement = el;\n\t    \n\t\tthis.locator && position(this.locator,el)\n\t    for (var i = 0 ; i < len; i++) {\n\t        var namespaceURI = attrs.getURI(i);\n\t        var value = attrs.getValue(i);\n\t        var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tif( attr.getOffset){\n\t\t\t\tposition(attr.getOffset(1),attr)\n\t\t\t}\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t    }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t    var tagName = current.tagName;\n\t    this.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t    var ins = this.document.createProcessingInstruction(target, data);\n\t    this.locator && position(this.locator,ins)\n\t    appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\tif(this.currentElement && chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.document.createCDATASection(chars);\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.document.createTextNode(chars);\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.document.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\n\t    \tlocator.lineNumber = 0;\n\t    }\n\t},\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t    var comm = this.document.createComment(chars);\n\t    this.locator && position(this.locator,comm)\n\t    appendElement(this, comm);\n\t},\n\t\n\tstartCDATA:function() {\n\t    this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t    this.cdata = false;\n\t},\n\t\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.document.implementation;\n\t    if (impl && impl.createDocumentType) {\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\n\t        this.locator && position(this.locator,dt)\n\t        appendElement(this, dt);\n\t    }\n\t},\n\twarning:function(error) {\n\t\tconsole.warn(error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error(error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tconsole.error(error,_locator(this.locator));\n\t    throw error;\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\nfunction appendElement (hander,node) {\n    if (!hander.currentElement) {\n        hander.document.appendChild(node);\n    } else {\n        hander.currentElement.appendChild(node);\n    }\n}//appendChild and setAttributeNS are preformance key\n\nreturn {\n\t\tDOMParser: DOMParser\n\t };\n});\n\ndefine(\"ace/mode/xml_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar DOMParser = require(\"./xml/dom-parser\").DOMParser;\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.context = null;\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.setOptions = function(options) {\n        this.context = options.context;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return;\n        var parser = new DOMParser();\n        var errors = [];\n        parser.options.errorHandler = {\n            fatalError: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"error\"\n                });\n            },\n            error: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"error\"\n                });\n            },\n            warning: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"warning\"\n                });\n            }\n        };\n        \n        parser.parseFromString(value);\n        this.sender.emit(\"error\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n\ndefine(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src/worker-xquery.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\ndefine(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\ndefine(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\ndefine(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\ndefine(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\ndefine(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\ndefine(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\ndefine(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\ndefine(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\ndefine(\"ace/mode/xquery/xqlint\",[], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/compiler/errors.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar init = function(that, code, message, pos, type){\n    if(!code) {\n        throw new Error(type + ' code is missing.');\n    }\n    \n    if(!message) {\n        throw new Error(type + ' message is missing.');\n    }\n    \n    if(!pos) {\n        throw new Error(type + ' position is missing.');\n    }\n\n    that.getCode = function(){\n        return code;\n    };\n    \n    that.getMessage = function(){\n        return message;\n    };\n\n    that.getPos = function(){\n        return pos;\n    };\n};\n\nvar StaticError = {};\nvar StaticWarning = {};\nStaticError.prototype = new Error();\nStaticWarning.prototype = new Error();\n\nexports.StaticError = StaticError.prototype.constructor = function(code, message, pos) {\n    init(this, code, message, pos, 'Error');\n};\n\nexports.StaticWarning = StaticWarning.prototype.constructor = function(code, message, pos) {\n    init(this, code, message, pos, 'Warning');\n};\n},{}],\"/node_modules/xqlint/lib/compiler/handlers.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TreeOps = _dereq_('../tree_ops').TreeOps;\nvar Errors = _dereq_('./errors');\nvar StaticWarning = Errors.StaticWarning;\nexports.ModuleDecl = function(translator, rootSctx, node){\n    var prefix = '';\n    return {\n        NCName: function(ncname){\n            prefix = TreeOps.flatten(ncname);\n        },\n\n        URILiteral: function(uri) {\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            translator.apply(function(){\n                rootSctx.moduleNamespace = uri;\n                rootSctx.addNamespace(uri, prefix, node.pos, 'moduleDecl');\n            });\n        }\n    };\n};\n\nexports.ModuleImport = function(translator, rootSctx, node) {\n    var prefix = '';\n    var moduleURI;\n\n    return {\n        NCName: function(ncname){\n            prefix = TreeOps.flatten(ncname);\n        },\n\n        URILiteral: function(uri) {\n            if(moduleURI !== undefined) {\n                return;\n            }\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            moduleURI = uri;\n            translator.apply(function(){\n                rootSctx.importModule(uri, prefix, node.pos);\n            });\n        }\n    };\n};\n\nexports.SchemaImport = function(translator, rootSctx, node) {\n    var prefix = '';\n    var schemaURI;\n    \n    return {\n        SchemaPrefix: function(schemaPrefix) {\n            var SchemaPrefixHandler = function () {\n                this.NCName = function (ncname) {\n                    prefix = TreeOps.flatten(ncname);\n                };\n            };\n            translator.visitChildren(schemaPrefix, new SchemaPrefixHandler());\n        },\n\n        URILiteral: function(uri) {\n            if(schemaURI !== undefined) {\n                return;\n            }\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            schemaURI = uri;\n            translator.apply(function(){\n                rootSctx.addNamespace(uri, prefix, node.pos, 'schema');\n            });\n        }\n    };\n};\n\nexports.DefaultNamespaceDecl = function(translator, rootSctx, node) {\n    var fn = false;\n    var ns = '';\n\n    return {\n        TOKEN: function(token){\n            fn = fn ? true : (token.value === 'function');\n        },\n        URILiteral: function(uri){\n            ns = TreeOps.flatten(uri);\n            ns = ns.substring(1, ns.length - 1);\n            if(!fn) {\n                translator.apply(function(){\n                    throw new StaticWarning('W06', 'Avoid default element namespace declarations.', node.pos);\n                });\n                rootSctx.defaultElementNamespace = ns;\n            } else {\n                rootSctx.defaultFunctionNamespace = ns;\n            }\n        }\n    };\n};\n\nexports.NamespaceDecl = function(translator, rootSctx, node) {\n    var prefix = '';\n    return {\n        NCName: function(ncname) {\n            prefix = TreeOps.flatten(ncname);\n        },\n        URILiteral: function(uri) {\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            translator.apply(function(){\n                rootSctx.addNamespace(uri, prefix, node.pos, 'declare');\n            });\n        }\n    };\n};\nexports.VarHandler = function(translator, sctx, node){\n    var EQNameHandler = function(eqname){\n        var value = TreeOps.flatten(eqname);\n        translator.apply(function(){\n            var qname = sctx.resolveQName(value, eqname.pos);\n            sctx.addVariable(qname, node.name, eqname.pos);\n        });\n    };\n    return {\n        ExprSingle: function(){ return true; },\n        VarValue: function(){ return true; },\n        VarDefaultValue: function(){ return true; },\n        VarName: EQNameHandler,\n        EQName: EQNameHandler\n    };\n};\n\nexports.VarRefHandler = function(translator, sctx, node){\n    return {\n        VarName: function(eqname){\n            var value = TreeOps.flatten(eqname);\n            translator.apply(function(){\n                var qname = sctx.resolveQName(value, node.pos);\n                if(qname.uri !== '') {\n                    sctx.root.namespaces[qname.uri].used = true;\n                }\n                sctx.addVarRef(qname, eqname.pos);\n            });\n        }\n    };\n};\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\"}],\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\":[function(_dereq_,module,exports){\n'use strict';\nexports.getSchemaBuiltinTypes = function(){\n    var ns = 'http://www.w3.org/2001/XMLSchema';\n    var SchemaBuiltinTypes = {};\n    SchemaBuiltinTypes[ns] = {\n        variables: {},\n        functions: {}\n    };\n    SchemaBuiltinTypes[ns].functions[ns + '#string#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'string', arity: 1, eqname: { uri: ns, name: 'string' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#boolean#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'boolean', arity: 1, eqname: { uri: ns, name: 'boolean' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#decimal#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'decimal', arity: 1, eqname: { uri: ns, name: 'decimal' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#float#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'float', arity: 1, eqname: { uri: ns, name: 'float' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#double#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'double', arity: 1, eqname: { uri: ns, name: 'double' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#duration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'duration', arity: 1, eqname: { uri: ns, name: 'duration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#dateTime#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'dateTime', arity: 1, eqname: { uri: ns, name: 'dateTime' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#time#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'time', arity: 1, eqname: { uri: ns, name: 'time' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#date#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'date', arity: 1, eqname: { uri: ns, name: 'date' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gYearMonth#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gYearMonth', arity: 1, eqname: { uri: ns, name: 'gYearMonth' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gYear#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gYear', arity: 1, eqname: { uri: ns, name: 'gYear' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gMonthDay#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gMonthDay', arity: 1, eqname: { uri: ns, name: 'gMonthDay' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gDay#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gDay', arity: 1, eqname: { uri: ns, name: 'gDay' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gMonth#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gMonth', arity: 1, eqname: { uri: ns, name: 'gMonth' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#hexBinary#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'hexBinary', arity: 1, eqname: { uri: ns, name: 'hexBinary' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#base64Binary#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'base64Binary', arity: 1, eqname: { uri: ns, name: 'base64Binary' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#anyURI#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'anyURI', arity: 1, eqname: { uri: ns, name: 'anyURI' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#QName#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'QName', arity: 1, eqname: { uri: ns, name: 'QName' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#normalizedString#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'normalizedString', arity: 1, eqname: { uri: ns, name: 'normalizedString' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#token#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'token', arity: 1, eqname: { uri: ns, name: 'token' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#language#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'language', arity: 1, eqname: { uri: ns, name: 'language' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#NMTOKEN#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'NMTOKEN', arity: 1, eqname: { uri: ns, name: 'NMTOKEN' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#Name#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'Name', arity: 1, eqname: { uri: ns, name: 'Name' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#NCName#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'NCName', arity: 1, eqname: { uri: ns, name: 'NCName' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#ID#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'ID', arity: 1, eqname: { uri: ns, name: 'ID' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#IDREF#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'IDREF', arity: 1, eqname: { uri: ns, name: 'IDREF' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#ENTITY#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'ENTITY', arity: 1, eqname: { uri: ns, name: 'ENTITY' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#integer#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'integer', arity: 1, eqname: { uri: ns, name: 'integer' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#nonPositiveInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'nonPositiveInteger', arity: 1, eqname: { uri: ns, name: 'nonPositiveInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#negativeInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'negativeInteger', arity: 1, eqname: { uri: ns, name: 'negativeInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#long#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'long', arity: 1, eqname: { uri: ns, name: 'long' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#int#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'int', arity: 1, eqname: { uri: ns, name: 'int' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#short#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'short', arity: 1, eqname: { uri: ns, name: 'short' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#byte#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'byte', arity: 1, eqname: { uri: ns, name: 'byte' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#nonNegativeInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'nonNegativeInteger', arity: 1, eqname: { uri: ns, name: 'nonNegativeInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedLong#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedLong', arity: 1, eqname: { uri: ns, name: 'unsignedLong' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedInt#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedInt', arity: 1, eqname: { uri: ns, name: 'unsignedInt' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedShort#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedShort', arity: 1, eqname: { uri: ns, name: 'unsignedShort' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedByte#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedByte', arity: 1, eqname: { uri: ns, name: 'unsignedByte' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#positiveInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'positiveInteger', arity: 1, eqname: { uri: ns, name: 'positiveInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#yearMonthDuration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'yearMonthDuration', arity: 1, eqname: { uri: ns, name: 'yearMonthDuration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#dayTimeDuration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'dayTimeDuration', arity: 1, eqname: { uri: ns, name: 'dayTimeDuration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#untypedAtomic#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'untypedAtomic', arity: 1, eqname: { uri: ns, name: 'untypedAtomic' } };\n    return SchemaBuiltinTypes;\n};\n},{}],\"/node_modules/xqlint/lib/compiler/static_context.js\":[function(_dereq_,module,exports){\nexports.StaticContext = function (parent, pos) {\n    'use strict';\n    \n    var TreeOps = _dereq_('../tree_ops').TreeOps;\n    \n    var Errors = _dereq_('./errors');\n    var StaticError = Errors.StaticError;\n    var StaticWarning = Errors.StaticWarning;\n    \n    var getSchemaBuiltinTypes = _dereq_('./schema_built-in_types').getSchemaBuiltinTypes;\n    \n    var emptyPos = { sl:0, sc: 0, el: 0, ec: 0 };\n    var namespaces = {};\n    \n    var getVarKey = function(qname) {\n        return qname.uri + '#' + qname.name;\n    };\n\n    var getFnKey = function(qname, arity) {\n        return getVarKey(qname) + '#' + arity;\n    };\n\n    if(!parent) {\n        namespaces['http://jsoniq.org/functions'] = {\n            prefixes: ['jn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.28msec.com/modules/collections'] = {\n            prefixes: ['db'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.28msec.com/modules/store'] = {\n            prefixes: ['store'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://jsoniq.org/function-library'] = {\n            prefixes: ['libjn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xpath-functions'] = {\n            prefixes: ['fn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xquery-local-functions'] = {\n            prefixes: ['local'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.w3.org/2001/XMLSchema-instance'] = {\n            prefixes: ['xsi'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://www.w3.org/2001/XMLSchema'] = {\n            prefixes: ['xs'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://www.w3.org/XML/1998/namespace'] = {\n            prefixes: ['xml'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://zorba.io/annotations'] = {\n            prefixes: ['an'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.28msec.com/annotations/rest'] = {\n            prefixes: ['rest'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xqt-errors'] = {\n            prefixes: ['err'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://zorba.io/errors'] = {\n            prefixes: ['zerr'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n    }\n\n    var s = {\n        parent: parent,\n        children: [],\n        pos: pos,\n        setModuleResolver: function(resolver){\n            this.root.moduleResolver = resolver;\n            return this;\n        },\n        setModules: function(index){\n            if(this !== this.root){\n                throw new Error('setModules() not invoked from the root static context.');\n            }\n            this.moduleResolver = function(uri){\n                return index[uri];\n            };\n            var that = this;\n            Object.keys(this.namespaces).forEach(function(uri){\n                var ns = that.namespaces[uri];\n                if(ns.type === 'module') {\n                    var mod = that.moduleResolver(uri);\n                    if(mod.variables) {\n                        TreeOps.concat(that.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(that.functions, mod.functions);\n                    }\n                }\n            });\n            return this;\n        },\n        setModulesFromXQDoc: function(xqdoc){\n            if(this !== this.root){\n                throw new Error('setModulesFromXQDoc() not invoked from the root static context.');\n            }\n            var index = {};\n            Object.keys(xqdoc).forEach(function(uri) {\n                var mod = xqdoc[uri];\n                var variables = {};\n                var functions = {};\n                mod.functions.forEach(function(fn){\n                    functions[uri + '#' + fn.name + '#' + fn.arity] = {\n                        params: [],\n                        annotations: [],\n                        name: fn.name,\n                        arity: fn.arity,\n                        eqname: { uri: uri, name: fn.name }\n                    };\n                    fn.parameters.forEach(function(param){\n                        functions[uri + '#' + fn.name + '#' + fn.arity].params.push('$' + param.name);\n                    });\n                });\n                mod.variables.forEach(function(variable){\n                    var name = variable.name.substring(variable.name.indexOf(':') + 1);\n                    variables[uri + '#' + name] = { type: 'VarDecl', annotations: [], eqname: { uri: uri, name: name } };\n                });\n                index[uri] = {\n                    variables: variables,\n                    functions: functions\n                };\n            });\n            this.root.moduleResolver = function(uri){\n                return index[uri];\n            };\n            var that = this;\n            Object.keys(this.namespaces).forEach(function(uri){\n                var ns = that.namespaces[uri];\n                if(ns.type === 'module') {\n                    var mod = that.moduleResolver(uri);\n                    if(mod.variables) {\n                        TreeOps.concat(that.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(that.functions, mod.functions);\n                    }\n                }\n            });\n            return this;\n        },\n        moduleNamespace: '',\n        description: '',\n        defaultFunctionNamespace: 'http://www.w3.org/2005/xpath-functions',\n        defaultFunctionNamespaces: [\n            'http://www.28msec.com/modules/collections',\n            'http://www.28msec.com/modules/store',\n            'http://jsoniq.org/functions',\n            'http://jsoniq.org/function-library',\n            'http://www.w3.org/2001/XMLSchema' //Built-in type constructors\n        ],\n        defaultElementNamespace: '',\n        namespaces: namespaces,\n        availableModuleNamespaces: [],\n        importModule: function(uri, prefix, pos) {\n            if(this !== this.root){\n                throw new Error('Function not invoked from the root static context.');\n            }\n            this.addNamespace(uri, prefix, pos, 'module');\n            if(this.moduleResolver) {\n                try {\n                    var mod = this.moduleResolver(uri, []);\n                    if(mod.variables) {\n                        TreeOps.concat(this.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(this.functions, mod.functions);\n                    }\n                } catch(e) {\n                    throw new StaticError('XQST0059', 'module \"' + uri + '\" not found', pos);\n                }\n            }\n            return this;\n        },\n\n        getAvailableModuleNamespaces: function(){\n            return this.root.availableModuleNamespaces;\n        },\n\n        getPrefixesByNamespace: function(uri){\n            return this.root.namespaces[uri].prefixes;\n        },\n\n        addNamespace: function (uri, prefix, pos, type) {\n            if(prefix === '' && type === 'module') {\n                throw new StaticWarning('W01', 'Avoid this type of import. Use import module namespace instead', pos);\n            }\n            if (uri === '') {\n                throw new StaticError('XQST0088', 'empty target namespace in module import or module declaration', pos);\n            }\n            var namespace = this.getNamespace(uri);\n            if (namespace && namespace.type === type && type !== 'declare' && !namespace.override) {\n                throw new StaticError('XQST0047', '\"' + uri + '\": duplicate target namespace', pos);\n            }\n            namespace = this.getNamespaceByPrefix(prefix);\n            if (namespace && !namespace.override) {\n                throw new StaticError('XQST0033', '\"' + prefix + '\": namespace prefix already bound to \"' + namespace.uri + '\"', pos);\n            }\n\n            namespace = this.namespaces[uri];\n            var prefixes = [prefix];\n            if(namespace) {\n                prefixes = prefixes.concat(this.namespaces[uri].prefixes);\n            }\n            this.namespaces[uri] = {\n                prefixes: prefixes,\n                pos: pos,\n                type: type\n            };\n\n            if (namespace) {\n                throw new StaticWarning('W02', '\"' + uri + '\" already bound to the \"' + namespace.prefixes.join(', ') + '\" prefix', pos);\n            }\n\n        },\n\n        getNamespaces: function(){\n            return this.root.namespaces;\n        },\n        \n        getNamespace: function (uri) {\n            var that = this;\n            while (that) {\n                var namespace = that.namespaces[uri];\n                if (namespace) {\n                    return namespace;\n                }\n                that = that.parent;\n            }\n\n        },\n\n        getNamespaceByPrefix: function (prefix) {\n            var found = [];\n            var handler = function (uri) {\n                var namespace = that.namespaces[uri];\n                if (namespace.prefixes.indexOf(prefix) !== -1) {\n                    namespace.uri = uri;\n                    found.push(namespace);\n                }\n            };\n            var that = this;\n            while (that) {\n                Object.keys(that.namespaces).forEach(handler);\n                that = that.parent;\n            }\n            var result;\n            found.forEach(function(ns){\n                if(ns.type === 'moduleDecl') {\n                    result = ns;\n                }\n            });\n            if(result) {\n                return result;\n            } else {\n                return found[0];\n            }\n        },\n        \n        resolveQName: function(value, pos){\n            var qname = {\n                uri: '',\n                prefix: '',\n                name: ''\n            };\n            var idx;\n            if (value.substring(0, 2) === 'Q{') {\n                idx = value.indexOf('}');\n                qname.uri = value.substring(2, idx);\n                qname.name = value.substring(idx + 1);\n            } else {\n                idx = value.indexOf(':');\n                qname.prefix = value.substring(0, idx);\n                var namespace = this.getNamespaceByPrefix(qname.prefix);\n                if(!namespace && qname.prefix !== '' && ['fn', 'jn'].indexOf(qname.prefix) === -1) {\n                    throw new StaticError('XPST0081', '\"' + qname.prefix + '\": can not expand prefix of lexical QName to namespace URI', pos);\n                }\n                if(namespace) {\n                    qname.uri = namespace.uri;\n                }\n                qname.name = value.substring(idx + 1);\n            }\n            return qname;\n        },\n        \n        variables: {},\n        varRefs: {},\n        functionCalls: {},\n    \n        addVariable: function(qname, type, pos){\n            if(\n                type === 'VarDecl' && this.moduleNamespace !== '' &&\n                !(this.moduleNamespace === qname.uri || qname.uri === '')\n            ) {\n                throw new StaticError('XQST0048', '\"' + qname.prefix + ':' + qname.name + '\": Qname not library namespace', pos);\n            }\n            var key = getVarKey(qname);\n            if(type === 'VarDecl' && this.variables[key]) {\n                throw new StaticError('XQST0049', '\"' + qname.name + '\": duplicate variable declaration', pos);\n            }\n            this.variables[key] = {\n                type: type,\n                pos: pos,\n                qname: qname,\n                annotations: {}\n            };\n            return this;\n        },\n        \n        getVariables: function(){\n            var variables = {};\n            var that = this;\n            var handler = function(key){\n                if(!variables[key]){\n                    variables[key] = that.variables[key];\n                }\n            };\n            while(that){\n                Object.keys(that.variables).forEach(handler);\n                that = that.parent;\n            }\n            return variables;\n        },\n        \n        getVariable: function(qname) {\n            var key = getVarKey(qname);\n            var that = this;\n            while(that) {\n                if(that.variables[key]) {\n                    return that.variables[key];\n                }\n                that = that.parent;\n            }\n        },\n        \n        addVarRef: function(qname, pos){\n            var varDecl = this.getVariable(qname);\n            if(!varDecl && (qname.uri === '' || this.root.moduleResolver)) {\n                throw new StaticError('XPST0008', '\"' + qname.name + '\": undeclared variable', pos);\n            }\n            var key = getVarKey(qname);\n            this.varRefs[key] = true;\n        },\n        \n        addFunctionCall: function(qname, arity, pos){\n            var fn = this.getFunction(qname, arity);\n            if(!fn && (qname.uri === 'http://www.w3.org/2005/xquery-local-functions' || this.root.moduleResolver)){\n                if((qname.uri === 'http://www.w3.org/2005/xpath-functions' ||\n                    (qname.uri === '' && this.root.defaultFunctionNamespaces.concat(this.root.defaultFunctionNamespace).indexOf('http://www.w3.org/2005/xpath-functions') !== -1)) && qname.name === 'concat') {\n                } else if(!fn){\n                    throw new StaticError('XPST0008', '\"' + qname.name + '#' + arity + '\": undeclared function', pos);\n                }\n            }\n            var key = getFnKey(qname, arity);\n            this.functionCalls[key] = true;\n        },\n        \n        functions: getSchemaBuiltinTypes()['http://www.w3.org/2001/XMLSchema'].functions,\n\n        getFunctions: function(){\n            return this.root.functions;\n        },\n        \n        getFunction: function(qname, arity){\n            var key = getFnKey(qname, arity);\n            var fn;\n            if(qname.uri === '') {\n                var that = this;\n                this.root.defaultFunctionNamespaces.concat([this.root.defaultFunctionNamespace]).forEach(function(defaultFunctionNamespace){\n                    if(!fn){\n                        fn = that.getFunction({ uri: defaultFunctionNamespace, prefix: qname.prefix, name: qname.name }, arity);\n                    } else {\n                        return false;\n                    }\n                });\n                return fn;\n            } else {\n                return this.root.functions[key];\n            }\n        },\n        \n        addFunction: function(qname, pos, params) {\n            if(this !== this.root){\n                throw new Error('addFunction() not invoked from the root static context.');\n            }\n            var arity = params.length;\n            if(\n                this.moduleNamespace !== '' &&\n                !(this.moduleNamespace === qname.uri || (qname.uri === '' && this.defaultFunctionNamespace === this.moduleNamespace))\n            ) {\n                throw new StaticError('XQST0048', '\"' + qname.prefix + ':' + qname.name + '\": Qname not library namespace', pos);\n            }\n            var key = getFnKey(qname, arity);\n            if(this.functions[key]) {\n                throw new StaticError('XQST0034', '\"' + qname.name + '\": duplicate function declaration', pos);\n            }\n            this.functions[key] = {\n                pos: pos,\n                params: params\n            };\n            return this;\n        }\n        \n    };\n    s.root = parent ? parent.root : s;\n    return s;\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./schema_built-in_types\":\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\"}],\"/node_modules/xqlint/lib/compiler/translator.js\":[function(_dereq_,module,exports){\nexports.Translator = function(rootStcx, ast){\n    'use strict';\n\n    var Errors = _dereq_('./errors');\n    var StaticError = Errors.StaticError;\n    var StaticWarning = Errors.StaticWarning;\n    \n    var TreeOps = _dereq_('../tree_ops').TreeOps;\n    var StaticContext = _dereq_('./static_context').StaticContext;\n    var Handlers = _dereq_('./handlers');\n    \n    var get = function(node, path){\n        var result = [];\n        if(path.length === 0){\n            return node;\n        }\n        node.children.forEach(function(child){\n            if(child.name === path[0] && path.length > 1) {\n                result = get(child, path.slice(1));\n            } else if(child.name === path[0]) {\n                result.push(child);\n            }\n        });\n        return result;\n    };\n    \n    var markers = [];\n    this.apply = function(fn) {\n        try {\n            fn();\n        } catch(e) {\n            if(e instanceof StaticError) {\n                addStaticError(e);\n            } else if(e instanceof StaticWarning) {\n                addWarning(e.getCode(), e.getMessage(), e.getPos());\n            } else {\n                throw e;\n            }\n        }\n    };\n\n    var addStaticError = function(e){\n        markers.push({\n            pos: e.getPos(),\n            type: 'error',\n            level: 'error',\n            message: '[' + e.getCode() + '] ' + e.getMessage()\n        });\n    };\n    \n    var addWarning = function(code, message, pos) {\n        markers.push({\n            pos: pos,\n            type: 'warning',\n            level: 'warning',\n            message: '[' + code + '] ' + message\n        });\n    };\n    \n    this.getMarkers = function(){\n        return markers;\n    };\n\n    var translator = this;\n\n    rootStcx.pos = ast.pos;\n    var sctx = rootStcx;\n    var pushSctx = function(pos){\n        sctx = new StaticContext(sctx, pos);\n        sctx.parent.children.push(sctx);\n    };\n    \n    var popSctx = function(pos){\n        if (pos !== undefined) {\n            sctx.pos.el = pos.el;\n            sctx.pos.ec = pos.ec;\n        }\n\n        Object.keys(sctx.varRefs).forEach(function(key){\n            if(!sctx.variables[key]) {\n                sctx.parent.varRefs[key] = true;\n            }\n        });\n        Object.keys(sctx.variables).forEach(function(key){\n            if(!sctx.varRefs[key] && sctx.variables[key].type !== 'GroupingVariable' && sctx.variables[key].type !== 'CatchVar') {\n                addWarning('W03', 'Unused variable \"$' + sctx.variables[key].qname.name + '\"', sctx.variables[key].pos);\n            }\n        });\n        \n        sctx = sctx.parent;\n    };\n    \n    this.visitOnly = function(node, names) {\n        node.children.forEach(function(child){\n            if (names.indexOf(child.name) !== -1){\n                translator.visit(child);\n            }\n        });\n    };\n    \n    this.getFirstChild = function(node, name) {\n        var result;\n        node.children.forEach(function(child){\n            if(child.name === name && result === undefined){\n                result = child;\n            }\n        });\n        return result;\n    };\n\n    this.XQuery = function(node) {\n        rootStcx.description = node.comment ? node.comment.description : undefined;\n    };\n    \n    this.ModuleDecl = function(node){\n        this.visitChildren(node, Handlers.ModuleDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.Prolog = function(node){\n        this.visitOnly(node, ['DefaultNamespaceDecl', 'Setter', 'NamespaceDecl', 'Import']);\n        ast.index.forEach(function(node){\n            if(node.name === 'VarDecl') {\n                node.children.forEach(function(child){\n                    if(child.name === 'VarName') {\n                        translator.apply(function(){\n                            var value = TreeOps.flatten(child);\n                            var qname = rootStcx.resolveQName(value, child.pos);\n                            rootStcx.addVariable(qname, node.name, child.pos);\n                        });\n                    }\n                });\n            } else if(node.name === 'FunctionDecl') {\n                var qname, pos, params = [];\n                node.children.forEach(function(child){\n                    if(child.name === 'EQName') {\n                        qname = child;\n                        pos = child.pos;\n                    } else if(child.name === 'ParamList'){\n                        child.children.forEach(function(c){\n                            if(c.name === 'Param') {\n                                params.push(TreeOps.flatten(c));\n                            }\n                        });\n                    }\n                });\n                translator.apply(function(){\n                    qname = TreeOps.flatten(qname);\n                    qname = rootStcx.resolveQName(qname, pos);\n                    rootStcx.addFunction(qname, pos, params);\n                });\n            }\n        });\n        this.visitOnly(node, ['ContextItemDecl', 'AnnotatedDecl', 'OptionDecl']);\n        return true;\n    };\n    \n    this.ModuleImport = function (node) {\n        this.visitChildren(node, Handlers.ModuleImport(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.SchemaImport = function (node) {\n        this.visitChildren(node, Handlers.SchemaImport(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.DefaultNamespaceDecl = function(node){\n        this.visitChildren(node, Handlers.DefaultNamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.NamespaceDecl = function (node) {\n        this.visitChildren(node, Handlers.NamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    var annotations = {};\n    this.AnnotatedDecl = function(node) {\n        annotations = {};\n        this.visitChildren(node, Handlers.NamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.CompatibilityAnnotation = function(){\n        annotations['http://www.w3.org/2012/xquery#updating'] = [];\n        return true;\n    };\n    \n    this.Annotation = function(node){\n        this.visitChildren(node, {\n            EQName: function(eqname){\n                var value = TreeOps.flatten(eqname);\n                translator.apply(function(){\n                    var qname = sctx.resolveQName(value, eqname.pos);\n                    annotations[qname.uri + '#' + qname.name] = [];\n                });\n            }\n        });\n        return true;\n    };\n    \n    this.VarDecl = function(node){\n        try {\n            var varname = translator.getFirstChild(node, 'VarName');\n            var value = TreeOps.flatten(varname);\n            var qname = sctx.resolveQName(value, varname.pos);\n            var variable = rootStcx.getVariable(qname);\n            if(variable) {\n                variable.annotations = annotations;\n                variable.description = node.getParent.comment ? node.getParent.comment.description : undefined;\n                variable.type = TreeOps.flatten(get(node, ['TypeDeclaration'])[0]).substring(2).trim();\n                var last = variable.type.substring(variable.type.length - 1);\n                if(last === '?') {\n                    variable.occurrence = 0;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else if(last === '*') {\n                    variable.occurrence = -1;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else if(last === '+') {\n                    variable.occurrence = 2;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else {\n                    variable.occurrence = 1;\n                }\n            }\n        } catch(e) {\n        }\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        return true;\n    };\n    \n    this.FunctionDecl = function(node) {\n        var isUpdating = annotations['http://www.w3.org/2012/xquery#updating'] !== undefined;\n        var typeDecl = get(node, ['ReturnType'])[0];\n        var name = get(node, ['EQName'])[0];\n        if(!typeDecl && !isUpdating){\n            addWarning('W05', 'Untyped return value', name.pos);\n        }\n        var isExternal = false;\n        node.children.forEach(function(child){\n            if(child.name === 'TOKEN' && child.value === 'external') {\n                isExternal = true;\n                return false;\n            }\n        });\n        if(!isExternal) {\n            pushSctx(node.pos);\n            this.visitChildren(node);\n            popSctx();\n        }\n        return true;\n    };\n    \n    this.VarRef = function(node) {\n        this.visitChildren(node, Handlers.VarRefHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.Param = function(node){\n        var typeDecl = get(node, ['TypeDeclaration'])[0];\n        if(!typeDecl){\n            addWarning('W05', 'Untyped function parameter', node.pos);\n        }\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.InlineFunctionExpr\t= function(node) {\n        pushSctx(node.pos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n    var statementCount = [];\n    var handleStatements = function(node) {\n        pushSctx(node.pos);\n        statementCount.push(0);\n        translator.visitChildren(node);\n        for (var i = 1; i <= statementCount[statementCount.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        statementCount.pop();\n        popSctx();\n    };\n\n    this.StatementsAndOptionalExpr = function (node) {\n        handleStatements(node);\n        return true;\n    };\n\n    this.StatementsAndExpr = function (node) {\n        handleStatements(node);\n        return true;\n    };\n\n    this.BlockStatement = function (node) {\n        handleStatements(node);\n        return true;\n    };\n    \n    this.VarDeclStatement = function(node){\n        pushSctx(node.pos);\n        statementCount[statementCount.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n    };\n    var clauses = [];\n    this.FLWORExpr = this.FLWORStatement = function (node) {\n        pushSctx(node.pos);\n        clauses.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= clauses[clauses.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        clauses.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.ForBinding = function (node) {\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.LetBinding = function(node){\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.GroupingSpec = function(node){\n        var isVarDecl = false;\n        node.children.forEach(function(child){\n            if(child.value === ':=') {\n                isVarDecl = true;\n                return false;\n            }\n        });\n        if(isVarDecl) {\n            var groupingVariable = node.children[0];\n            this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n            pushSctx(node.pos);\n            clauses[clauses.length - 1]++;\n            this.visitChildren(groupingVariable, Handlers.VarHandler(translator, sctx, groupingVariable));\n            return true;\n        } else {\n            \n        }\n    };\n    \n    this.TumblingWindowClause = function (node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['WindowStartCondition', 'WindowEndCondition']);\n        return true;\n    };\n\n    this.WindowVars = function (node) {\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.SlidingWindowClause = function (node) {\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['WindowStartCondition', 'WindowEndCondition']);\n        return true;\n    };\n\n    this.PositionalVar = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.PositionalVar = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CurrentItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.PreviousItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.NextItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CountClause = function (node) {\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CaseClause = function(node) {\n        pushSctx(node.pos);\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['ExprSingle']);\n        popSctx();\n        return true;\n    };\n    var copies = [];\n    this.TransformExpr = function (node) {\n        pushSctx(node.pos);\n        copies.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= copies[copies.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        copies.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.TransformSpec = function(node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        copies[copies.length-1] += 1;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    var quantifiedDecls = [];\n    this.QuantifiedExpr = function (node) {\n        pushSctx(node.pos);\n        quantifiedDecls.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= quantifiedDecls[quantifiedDecls.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        quantifiedDecls.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.QuantifiedVarDecl = function(node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        quantifiedDecls[quantifiedDecls.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.FunctionCall = function(node){\n        this.visitOnly(node, ['ArgumentList']);\n        var name = translator.getFirstChild(node, 'EQName');\n        var eqname = TreeOps.flatten(name);\n        var arity = get(node, ['ArgumentList', 'Argument']).length;\n        translator.apply(function(){\n            var qname = sctx.resolveQName(eqname, node.pos);\n            try {\n                if(qname.uri !== '') {\n                    sctx.root.namespaces[qname.uri].used = true;\n                }\n            } catch(e){\n            }\n            sctx.addFunctionCall(qname, arity, name.pos);\n        });\n        return true;\n    };\n    \n    this.TryClause = function(node){\n        pushSctx(node.pos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n    \n    this.CatchClause = function(node){\n        pushSctx(node.pos);\n        var prefix = 'err';\n        var uri = 'http://www.w3.org/2005/xqt-errors';\n        var emptyPos = { sl: 0, sc: 0, el: 0, ec: 0 };\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'code' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'description' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'value' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'module' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'line-number' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'column-number' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'additional' }, 'CatchVar', emptyPos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n\n    this.Pragma = function(node){\n        var qname = TreeOps.flatten(get(node, ['EQName'])[0]);\n        qname = rootStcx.resolveQName(qname, node);\n        var value = TreeOps.flatten(get(node, ['PragmaContents'])[0]);\n        if (qname.name === 'xqlint' && qname.uri === 'http://xqlint.io') {\n            pushSctx(node.pos);\n            var commands = value.match(/[a-zA-Z]+\\(([^)]+)\\)/g);\n            commands.forEach(function (command) {\n                var name = command.substring(0, command.indexOf('('));\n                var args = command.substring(0, command.length - 1).substring(command.indexOf('(') + 1).split(',').map(function (val) {\n                    return val.trim();\n                });\n                if (name === 'varrefs') {\n                    args.forEach(function (arg) {\n                        var qname = sctx.resolveQName(arg.substring(1), node.pos);\n                        if (qname.uri !== '') {\n                            sctx.root.namespaces[qname.uri].used = true;\n                        }\n                        sctx.addVarRef(qname, node.pos);\n                    });\n                }\n            });\n            this.visitChildren(node);\n            popSctx();\n            return true;\n        }\n    };\n\n    this.visit = function (node) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    this.visit(ast);\n    Object.keys(rootStcx.variables).forEach(function(key){\n        if(!rootStcx.varRefs[key] && (rootStcx.variables[key].annotations['http://www.w3.org/2005/xpath-functions#private'] || rootStcx.moduleNamespace === '') && rootStcx.variables[key].pos) {\n            addWarning('W03', 'Unused variable \"' + rootStcx.variables[key].qname.name + '\"', rootStcx.variables[key].pos);\n        }\n    });\n    Object.keys(rootStcx.namespaces).forEach(function(uri){\n        var namespace = rootStcx.namespaces[uri];\n        if(namespace.used === undefined && !namespace.override && namespace.type === 'module') {\n            addWarning('W04', 'Unused module \"' + uri + '\"', namespace.pos);\n        }\n    });\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./handlers\":\"/node_modules/xqlint/lib/compiler/handlers.js\",\"./static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\"}],\"/node_modules/xqlint/lib/completion/completer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TreeOps = _dereq_('../tree_ops').TreeOps;\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$]/;\n\nfunction retrievePrecedingIdentifier(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos-1; i >= 0; i--) {\n        if (regex.test(text[i])) {\n            buf.push(text[i]);\n        } else {\n            break;\n        }\n    }\n    return buf.reverse().join('');\n}\n\nfunction prefixBinarySearch(items, prefix) {\n    var startIndex = 0;\n    var stopIndex = items.length - 1;\n    var middle = Math.floor((stopIndex + startIndex) / 2);\n    \n    while (stopIndex > startIndex && middle >= 0 && items[middle].indexOf(prefix) !== 0) {\n        if (prefix < items[middle]) {\n            stopIndex = middle - 1;\n        } else if (prefix > items[middle]) {\n            startIndex = middle + 1;\n        }\n        middle = Math.floor((stopIndex + startIndex) / 2);\n    }\n    while (middle > 0 && items[middle-1].indexOf(prefix) === 0) {\n        middle--;\n    }\n    return middle >= 0 ? middle : 0; // ensure we're not returning a negative index\n}\n\nvar uriRegex = /[a-zA-Z_0-9\\/\\.:\\-#]/;\nvar char = '-._A-Za-z0-9:\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0300-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203f\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';\nvar nameChar = '[' + char + ']';\nvar varChar = '[' + char + '\\\\$]';\nvar nameCharRegExp = new RegExp(nameChar);\nvar varCharRegExp = new RegExp(varChar);\n\nvar varDeclLabels = {\n    'LetBinding': 'Let binding',\n    'Param': 'Function parameter',\n    'QuantifiedExpr': 'Quantified expression binding',\n    'VarDeclStatement': 'Local variable',\n    'ForBinding': 'For binding',\n    'TumblingWindowClause': 'Tumbling window binding',\n    'WindowVars': 'Window variable',\n    'SlidingWindowClause': 'Sliding window binding',\n    'PositionalVar': 'Positional variable',\n    'CurrentItem': 'Current item',\n    'PreviousItem': 'Previous item',\n    'NextItem': 'Next item',\n    'CountClause': 'Count binding',\n    'GroupingVariable': 'Grouping variable',\n    'VarDecl': 'Module variable'\n};\n\nvar findCompletions = function(prefix, allIdentifiers) {\n    allIdentifiers.sort();\n    var startIdx = prefixBinarySearch(allIdentifiers, prefix);\n    var matches = [];\n    for (var i = startIdx; i < allIdentifiers.length && allIdentifiers[i].indexOf(prefix) === 0; i++) {\n        matches.push(allIdentifiers[i]);\n    }\n    return matches;\n};\n\n\nvar completePrefix = function(identifier, pos, sctx){\n    var idx = identifier.indexOf(':');\n    if(idx === -1) {\n        var prefixes = [];\n        var namespaces = sctx.getNamespaces();\n        Object.keys(namespaces).forEach(function(key){\n            if(namespaces[key].type === 'module' || key === 'http://www.w3.org/2005/xquery-local-functions') {\n                prefixes.push(namespaces[key].prefixes[0]);\n            }\n        });\n        var matches = findCompletions(identifier, prefixes);\n        var match = function(name) {\n            return {\n                name: name + ':',\n                value: name + ':',\n                meta: 'prefix'\n            };\n        };\n        return matches.map(match);\n    } else {\n        return [];\n    }\n};\n\nvar completeFunction = function(identifier, pos, sctx){\n    var names = [];\n    var snippets = {};\n    var functions = sctx.getFunctions();\n    var uri = '';\n    var prefix = '';\n    var name = identifier;\n    var idx = identifier.indexOf(':');\n    var defaultNamespace = false;\n    if(idx !== -1){\n        prefix = identifier.substring(0, idx);\n        name = identifier.substring(idx + 1);\n        var ns = sctx.getNamespaceByPrefix(prefix);\n        if(ns){\n            uri = sctx.getNamespaceByPrefix(prefix).uri;\n        }\n    } else {\n        defaultNamespace = true;\n        uri = sctx.root.defaultFunctionNamespace;\n    }\n    Object.keys(functions).forEach(function(key){\n        var fn = functions[key];\n        var ns = key.substring(0, key.indexOf('#'));\n        var name = key.substring(key.indexOf('#') + 1);\n        name = name.substring(0, name.indexOf('#'));\n        if(ns !== uri) {\n            return;\n        }\n        if(!defaultNamespace){\n            name = sctx.getNamespaces()[ns].prefixes[0] + ':' + name;\n        }\n        name += '(';\n        var snippet = name;\n        snippet += fn.params.map(function(param, index){\n            return '${' + (index + 1) + ':\\\\' + param.split(' ')[0] + '}';\n        }).join(', ');\n        name += fn.params.join(', ');\n        name += ')';\n        snippet += ')';\n        names.push(name);\n        snippets[name] = snippet;\n    });\n    var matches = findCompletions(identifier, names);\n    var match = function(name) {\n        return {\n            name: name,\n            value: name,\n            meta: 'function',\n            priority: 4,\n            identifierRegex: nameCharRegExp,\n            snippet: snippets[name]\n        };\n    };\n    return matches.map(match);\n};\n\nvar completeVariable = function(identifier, pos, sctx){\n    var uri = '';\n    var prefix = '';\n    var idx = identifier.indexOf(':');\n    if(idx !== -1){\n        prefix = identifier.substring(0, idx);\n        uri = sctx.getNamespaceByPrefix(prefix).uri;\n    }\n    var decls = sctx.getVariables();\n    var names = [];\n    var types = {};\n    Object.keys(decls).forEach(function(key){\n        var i = key.indexOf('#');\n        var ns = key.substring(0, i);\n        var name = key.substring(i+1);\n        if(ns !== ''){\n            names.push(sctx.getPrefixesByNamespace(ns)[0] + ':' + name);\n            types[sctx.getPrefixesByNamespace(ns)[0] + ':' + name] = decls[key].type;\n        } else {\n            names.push(name);\n            types[name] = decls[key].type;\n        }\n    });\n    \n    var matches = findCompletions(identifier, names);\n    var match = function(name) {\n        return {\n            name: '$' + name,\n            value: '$' + name,\n            meta: varDeclLabels[types[name]],\n            priority: 4,\n            identifierRegex: varCharRegExp\n        };\n    };\n    return matches.map(match);\n};\n\nvar completeExpr = function(line, pos, sctx){\n    var identifier = retrievePrecedingIdentifier(line, pos.col, nameCharRegExp);\n    var before = line.substring(0, pos.col - (identifier.length === 0 ? 0 : identifier.length));\n    var isVar = before[before.length - 1] === '$';\n    if(isVar) {\n        return completeVariable(identifier, pos, sctx);\n    } else if(identifier !== '') {\n        return completeFunction(identifier, pos, sctx).concat(completePrefix(identifier, pos, sctx));\n    } else {\n        return completeVariable(identifier, pos, sctx).concat(completeFunction(identifier, pos, sctx)).concat(completePrefix(identifier, pos, sctx));\n    }\n};\n\nvar completeModuleUri = function(line, pos, sctx){\n    var identifier = retrievePrecedingIdentifier(line, pos.col, uriRegex);\n    var matches = findCompletions(identifier, sctx.getAvailableModuleNamespaces());\n    var match = function(uri) {\n        return {\n            name: uri,\n            value: uri,\n            meta: 'module',\n            priority: 4,\n            identifierRegex: uriRegex\n        };\n    };\n    return matches.map(match);\n};\n\nexports.complete = function(source, ast, rootSctx, pos){\n    var line = source.split('\\n')[pos.line];\n    var node = TreeOps.findNode(ast, pos);\n    var sctx = TreeOps.findNode(rootSctx, pos);\n    sctx = sctx ? sctx : rootSctx;\n    if(node && node.name === 'URILiteral' && node.getParent && node.getParent.name === 'ModuleImport'){\n        return completeModuleUri(line, pos, sctx);\n    } else {\n        return completeExpr(line, pos, sctx);\n    }\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\"}],\"/node_modules/xqlint/lib/formatter/style_checker.js\":[function(_dereq_,module,exports){\nexports.StyleChecker = function (ast, source) {\n    'use strict';\n\n    var tab = '    ';\n    var markers = [];\n    \n    this.getMarkers = function(){\n        return markers;\n    };\n\n    this.WS = function(node) {\n        var lines = node.value.split('\\n');\n        lines.forEach(function(line, index){\n            var isFirst = index === 0;\n            var isLast  = index === (lines.length - 1);\n\n            if(/\\r$/.test(line)) {\n                markers.push({\n                    pos: {\n                        sl: node.pos.sl + index,\n                        el: node.pos.sl + index,\n                        sc: line.length - 1,\n                        ec: line.length\n                    },\n                    type: 'warning',\n                    level: 'warning',\n                    message: '[SW01] Detected CRLF'\n                });\n            }\n            \n            var match = line.match(/\\t+/);\n            if(match !== null){\n                markers.push({\n                    pos: {\n                        sl: node.pos.sl + index,\n                        el: node.pos.sl + index,\n                        sc: match.index,\n                        ec: match.index + match[0].length\n                    },\n                    type: 'warning',\n                    level: 'warning',\n                    message: '[SW02] Tabs detected'\n                });\n            }\n\n            if((!isFirst) && isLast){\n                match = line.match(/^\\ +/);\n                if(match !== null) {\n                    var mod = match[0].length % tab.length;\n                    if(mod !== 0) {\n                        markers.push({\n                            pos: {\n                                sl: node.pos.sl + index,\n                                el: node.pos.sl + index,\n                                sc: match.index,\n                                ec: match.index + match[0].length\n                            },\n                            type: 'warning',\n                            level: 'warning',\n                            message: '[SW03] Unexcepted indentation of ' + match[0].length\n                        });\n                    }\n                }\n            }\n        });\n        return true;\n    };\n    \n    this.visit = function (node, index) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node, index) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    source.split('\\n').forEach(function(line, index){\n        var match = line.match(/\\ +$/);\n        if(match){\n            markers.push({\n                pos: {\n                    sl: index,\n                    el: index,\n                    sc: match.index,\n                    ec: match.index + match[0].length\n                },\n                type: 'warning',\n                level: 'warning',\n                message: '[SW04] Trailing whitespace'\n            });\n        }\n    });\n    this.visit(ast);\n};\n},{}],\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var JSONiqTokenizer = exports.JSONiqTokenizer = function JSONiqTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 59:                        // '<?'\n      shift(59);                    // '<?'\n      break;\n    case 43:                        // '(#'\n      shift(43);                    // '(#'\n      break;\n    case 45:                        // '(:~'\n      shift(45);                    // '(:~'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    case 277:                       // '}'\n      shift(277);                   // '}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 42:                        // '('\n      shift(42);                    // '('\n      break;\n    case 46:                        // ')'\n      shift(46);                    // ')'\n      break;\n    case 52:                        // '/'\n      shift(52);                    // '/'\n      break;\n    case 65:                        // '['\n      shift(65);                    // '['\n      break;\n    case 66:                        // ']'\n      shift(66);                    // ']'\n      break;\n    case 49:                        // ','\n      shift(49);                    // ','\n      break;\n    case 51:                        // '.'\n      shift(51);                    // '.'\n      break;\n    case 56:                        // ';'\n      shift(56);                    // ';'\n      break;\n    case 54:                        // ':'\n      shift(54);                    // ':'\n      break;\n    case 36:                        // '!'\n      shift(36);                    // '!'\n      break;\n    case 276:                       // '|'\n      shift(276);                   // '|'\n      break;\n    case 40:                        // '$$'\n      shift(40);                    // '$$'\n      break;\n    case 5:                         // Annotation\n      shift(5);                     // Annotation\n      break;\n    case 4:                         // ModuleDecl\n      shift(4);                     // ModuleDecl\n      break;\n    case 6:                         // OptionDecl\n      shift(6);                     // OptionDecl\n      break;\n    case 15:                        // AttrTest\n      shift(15);                    // AttrTest\n      break;\n    case 16:                        // Wildcard\n      shift(16);                    // Wildcard\n      break;\n    case 18:                        // IntegerLiteral\n      shift(18);                    // IntegerLiteral\n      break;\n    case 19:                        // DecimalLiteral\n      shift(19);                    // DecimalLiteral\n      break;\n    case 20:                        // DoubleLiteral\n      shift(20);                    // DoubleLiteral\n      break;\n    case 8:                         // Variable\n      shift(8);                     // Variable\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 7:                         // Operator\n      shift(7);                     // Operator\n      break;\n    case 35:                        // EOF\n      shift(35);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    case 53:                        // '/>'\n      shift(53);                    // '/>'\n      break;\n    case 29:                        // QName\n      shift(29);                    // QName\n      break;\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 25:                        // ElementContentChar\n      shift(25);                    // ElementContentChar\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 10:                        // EndTag\n      shift(10);                    // EndTag\n      break;\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 27:                        // AposAttrContentChar\n      shift(27);                    // AposAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 22:                        // EscapeQuot\n      shift(22);                    // EscapeQuot\n      break;\n    case 26:                        // QuotAttrContentChar\n      shift(26);                    // QuotAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 14:                        // CDataSectionContents\n      shift(14);                    // CDataSectionContents\n      break;\n    case 67:                        // ']]>'\n      shift(67);                    // ']]>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 12:                        // DirCommentContents\n      shift(12);                    // DirCommentContents\n      break;\n    case 50:                        // '-->'\n      shift(50);                    // '-->'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 13:                        // DirPIContents\n      shift(13);                    // DirPIContents\n      break;\n    case 62:                        // '?'\n      shift(62);                    // '?'\n      break;\n    case 63:                        // '?>'\n      shift(63);                    // '?>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 11:                        // PragmaContents\n      shift(11);                    // PragmaContents\n      break;\n    case 38:                        // '#'\n      shift(38);                    // '#'\n      break;\n    case 39:                        // '#)'\n      shift(39);                    // '#)'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 32:                        // CommentContents\n      shift(32);                    // CommentContents\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(6);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 33:                        // DocTag\n      shift(33);                    // DocTag\n      break;\n    case 34:                        // DocCommentContents\n      shift(34);                    // DocCommentContents\n      break;\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(5);                  // JSONChar | JSONCharRef | JSONPredefinedCharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 3:                         // JSONPredefinedCharRef\n      shift(3);                     // JSONPredefinedCharRef\n      break;\n    case 2:                         // JSONCharRef\n      shift(2);                     // JSONCharRef\n      break;\n    case 1:                         // JSONChar\n      shift(1);                     // JSONChar\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 24:                        // AposChar\n      shift(24);                    // AposChar\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 17:                        // EQName^Token\n      shift(17);                    // EQName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 28:                        // NCName^Token\n      shift(28);                    // NCName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 30)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqTokenizer.MAP1[(c0 & 15) + JSONiqTokenizer.MAP1[(c1 & 31) + JSONiqTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = JSONiqTokenizer.TRANSITION[(i0 & 15) + JSONiqTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 279; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2066 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqTokenizer.EXPECTED[(i0 & 3) + JSONiqTokenizer.EXPECTED[(i1 & 3) + JSONiqTokenizer.EXPECTED[(i2 & 3) + JSONiqTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqTokenizer.MAP0 =\n[ 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37\n];\n\nJSONiqTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 31, 31, 37, 37, 37, 37, 37, 37, 37, 66, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66\n];\n\nJSONiqTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 37, 31, 37, 31, 31, 37\n];\n\nJSONiqTokenizer.INITIAL =\n[ 1, 2, 49155, 57348, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nJSONiqTokenizer.TRANSITION =\n[ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 17408, 19288, 17439, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19074, 36169, 17439, 36866, 17466, 36890, 36866, 22314, 19105, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22182, 19288, 19121, 36866, 17466, 18345, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19273, 19552, 19304, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19332, 17423, 19363, 36866, 17466, 17537, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 18614, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19391, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19427, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36154, 19288, 19457, 36866, 17466, 17740, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22780, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22375, 22197, 18469, 36866, 17466, 36890, 36866, 21991, 24018, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21331, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 19485, 19501, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19537, 22390, 19568, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19596, 19611, 19457, 36866, 17466, 36890, 36866, 18246, 19627, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22242, 20553, 19457, 36866, 17466, 36890, 36866, 18648, 30477, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36472, 19288, 19457, 36866, 17466, 17809, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21770, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19643, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19672, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20538, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17975, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22345, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19726, 19742, 21529, 24035, 23112, 26225, 23511, 27749, 27397, 24035, 34360, 24035, 24036, 23114, 35166, 23114, 23114, 19758, 23511, 35247, 23511, 23511, 28447, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 19821, 23511, 23511, 23511, 23511, 23512, 19441, 36539, 24035, 24035, 24035, 24035, 19846, 19869, 23114, 23114, 23114, 28618, 32187, 19892, 23511, 23511, 23511, 34585, 20402, 36647, 24035, 24035, 24036, 23114, 33757, 23114, 23114, 23029, 20271, 23511, 27070, 23511, 23511, 30562, 24035, 24035, 29274, 26576, 23114, 23114, 31118, 23036, 29695, 23511, 23511, 32431, 23634, 30821, 24035, 23110, 19913, 23114, 23467, 31261, 23261, 34299, 19932, 24035, 32609, 19965, 35389, 19984, 27689, 19830, 29391, 29337, 20041, 22643, 35619, 33728, 20062, 20121, 20166, 35100, 26145, 20211, 23008, 19876, 20208, 20227, 25670, 20132, 26578, 27685, 20141, 20243, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36094, 19288, 19457, 36866, 17466, 21724, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22735, 19552, 20287, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22750, 19288, 21529, 24035, 23112, 28056, 23511, 29483, 28756, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 20327, 23511, 23511, 23511, 23511, 31156, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 20371, 23511, 23511, 23511, 23511, 27443, 20395, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 29457, 29700, 23511, 23511, 23511, 23511, 33444, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 28350, 20421, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 20447, 20475, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20523, 22257, 20569, 20783, 21715, 17603, 20699, 20837, 20614, 20630, 21149, 20670, 21405, 17486, 17509, 17525, 18373, 19179, 20695, 20716, 20732, 20755, 19194, 18042, 21641, 20592, 20779, 20598, 21412, 17470, 17591, 20896, 17468, 17619, 20799, 20700, 21031, 20744, 20699, 20828, 18075, 21259, 20581, 20853, 18048, 20868, 20884, 17756, 17784, 17800, 17825, 17854, 21171, 21200, 20931, 20947, 21378, 20955, 20971, 18086, 20645, 21002, 20986, 18178, 17960, 18012, 18381, 18064, 29176, 21044, 21438, 21018, 21122, 21393, 21060, 21844, 21094, 20654, 17493, 18150, 18166, 18214, 25967, 20763, 21799, 21110, 21830, 21138, 21246, 21301, 18336, 18361, 21165, 21187, 20812, 21216, 21232, 21287, 21317, 18553, 21347, 21363, 21428, 21454, 21271, 21483, 21499, 21515, 21575, 21467, 18712, 21591, 21633, 21078, 18189, 18198, 20679, 21657, 21701, 21074, 21687, 21740, 21756, 21786, 21815, 21860, 21876, 21892, 21946, 21962, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36457, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 36813, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 21981, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 22151, 22007, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 27898, 17884, 18890, 17906, 17928, 22042, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 22070, 22112, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 22142, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36109, 19288, 18469, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22167, 19288, 19457, 36866, 17466, 17768, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22227, 36487, 22273, 36866, 17466, 36890, 36866, 19316, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18749, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 22304, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19580, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22330, 19089, 19457, 36866, 17466, 18721, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22765, 19347, 19457, 36866, 17466, 36890, 36866, 18114, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34541, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 22540, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29908, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22561, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 23837, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22584, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36442, 19288, 21605, 24035, 23112, 28137, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 31568, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22690, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 27584, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 22659, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22360, 19552, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22675, 22811, 19457, 36866, 17466, 36890, 36866, 19133, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22827, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36064, 19288, 22865, 22881, 32031, 22897, 22913, 22956, 29939, 24035, 24035, 24035, 23003, 23114, 23114, 23114, 23024, 22420, 23511, 23511, 23511, 23052, 29116, 23073, 29268, 24035, 25563, 26915, 23106, 23131, 23114, 23114, 23159, 23181, 23197, 23248, 23511, 23511, 23282, 23305, 22493, 32364, 24035, 33472, 30138, 26325, 31770, 33508, 27345, 33667, 23114, 23321, 23473, 23351, 35793, 36576, 23511, 23375, 22500, 24145, 24035, 29197, 20192, 24533, 23440, 23114, 19017, 23459, 22839, 23489, 23510, 23511, 33563, 23528, 32076, 25389, 24035, 26576, 23561, 23583, 23114, 32683, 22516, 23622, 23655, 23511, 23634, 35456, 37144, 23110, 23683, 34153, 20499, 32513, 25824, 23705, 24035, 24035, 23111, 23114, 19874, 27078, 33263, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 20507, 32241, 20150, 31862, 27464, 35108, 23727, 23007, 35895, 34953, 26578, 27685, 20141, 24569, 31691, 19787, 33967, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36427, 19552, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 27027, 26576, 23114, 23114, 23114, 31471, 23756, 22468, 23511, 23511, 23511, 34687, 23772, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 23788, 24035, 24035, 24035, 21559, 23828, 23114, 23114, 23114, 25086, 22839, 23853, 23511, 23511, 23511, 23876, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 31761, 23909, 23953, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36049, 19288, 21605, 30825, 23112, 23987, 23511, 24003, 31001, 27617, 24034, 24035, 24036, 24052, 24089, 23114, 23114, 22420, 24109, 24168, 23511, 23511, 29116, 24188, 27609, 20017, 29516, 24035, 26576, 24222, 19968, 23114, 24252, 33811, 22468, 24270, 33587, 23511, 24320, 27443, 22493, 24035, 24035, 24035, 24035, 24339, 23113, 23114, 23114, 23114, 28128, 28618, 29700, 23511, 23511, 23511, 28276, 34564, 20402, 24035, 24035, 32929, 24036, 23114, 23114, 23114, 24357, 23029, 22839, 23511, 23511, 23511, 24377, 25645, 24035, 34112, 24035, 26576, 23114, 26643, 23114, 32683, 22516, 23511, 25638, 23511, 23711, 24035, 24395, 27809, 23114, 24414, 20499, 24432, 30917, 23628, 24035, 30680, 23111, 23114, 30233, 27078, 25748, 24452, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 24475, 19829, 26577, 26597, 26154, 24519, 24556, 24596, 23007, 20046, 20132, 26578, 24634, 20141, 24569, 31691, 24679, 24727, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36412, 19288, 21605, 19943, 34861, 32618, 26027, 29483, 32016, 32050, 36233, 24776, 35574, 24801, 24819, 32671, 31289, 22420, 24868, 24886, 20087, 26849, 29116, 19803, 24035, 24035, 24035, 36228, 26576, 23114, 23114, 23114, 24981, 33811, 22468, 23511, 23511, 23511, 29028, 27443, 22493, 24923, 27965, 24035, 24035, 32797, 24946, 23443, 23114, 23114, 29636, 24997, 22849, 28252, 23511, 23511, 23511, 25042, 25110, 24035, 24035, 34085, 24036, 25133, 23114, 23114, 25152, 23029, 22839, 25169, 23511, 36764, 23511, 25645, 30403, 24035, 25186, 26576, 31806, 24093, 25212, 32683, 22516, 32713, 26245, 34293, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 32406, 23111, 23114, 28676, 30944, 27689, 25234, 24035, 23112, 19872, 37063, 23266, 24036, 23114, 30243, 20379, 26100, 29218, 20211, 30105, 25257, 25284, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 24834, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36034, 19288, 21671, 25314, 25072, 25330, 25346, 25362, 29939, 29951, 35288, 29984, 23812, 27216, 25405, 25424, 30456, 22584, 26292, 25461, 25480, 31592, 29116, 25516, 34963, 25545, 27007, 25579, 33937, 25614, 25661, 25686, 34872, 25702, 25718, 25734, 25769, 25795, 25811, 25840, 22493, 26533, 25856, 24035, 25876, 30763, 27481, 25909, 23114, 28987, 25936, 25954, 29700, 25983, 23511, 31412, 26043, 26063, 22568, 29241, 29592, 26116, 31216, 35383, 26170, 34783, 26194, 26221, 22839, 26241, 26261, 22477, 26283, 26308, 27306, 31035, 24655, 26576, 29854, 33386, 26341, 32683, 22516, 32153, 30926, 26361, 19996, 26381, 35463, 26397, 26424, 34646, 26478, 35605, 31386, 26494, 35567, 31964, 22940, 23689, 25218, 30309, 32289, 19830, 33605, 23112, 32109, 27733, 27084, 24496, 35886, 35221, 26525, 36602, 26549, 26558, 26574, 26594, 26613, 26629, 26666, 26700, 26578, 27685, 23740, 24285, 31691, 26733, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36397, 19552, 18991, 25887, 28117, 32618, 26776, 29483, 29939, 26802, 24035, 24035, 24036, 28664, 23114, 23114, 23114, 22420, 30297, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 25559, 26576, 23114, 23114, 23114, 30525, 33811, 22468, 23511, 23511, 23511, 28725, 27443, 22493, 24035, 24035, 27249, 24035, 24035, 23113, 23114, 23114, 26827, 23114, 28618, 29700, 23511, 23511, 26845, 23511, 34564, 20402, 24035, 24035, 26979, 24036, 23114, 23114, 23114, 24974, 23029, 22839, 23511, 23511, 23511, 26865, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 33305, 24035, 25598, 23114, 19874, 34253, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 26886, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 26931, 24569, 26439, 26947, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36019, 19288, 26995, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 27043, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 27061, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 29978, 24035, 24035, 23113, 23114, 33114, 23114, 23114, 30010, 29700, 23511, 35913, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 27155, 26576, 23114, 23114, 30447, 23036, 29695, 23511, 23511, 30935, 20099, 24152, 25529, 27100, 34461, 27121, 22625, 29156, 26009, 27137, 30422, 31903, 31655, 28870, 27171, 32439, 31731, 19830, 27232, 22612, 27265, 26786, 25494, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 20342, 27288, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 27322, 27339, 28020, 27361, 27382, 29939, 24035, 24035, 32581, 24036, 23114, 23114, 23114, 27425, 22420, 23511, 23511, 23511, 27442, 28306, 19803, 24035, 24035, 24035, 24035, 26710, 23114, 23114, 23114, 23114, 32261, 22468, 23511, 23511, 23511, 23511, 35719, 24694, 29510, 24035, 24035, 24035, 24035, 26717, 23114, 23114, 23114, 23114, 28618, 32217, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 27459, 23114, 23114, 23114, 36252, 23029, 20271, 23511, 23511, 23511, 28840, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 27480, 34483, 28401, 29761, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36382, 19288, 21605, 27497, 27517, 28504, 28898, 27569, 29939, 29401, 27600, 27323, 27633, 19025, 27662, 23114, 27705, 22420, 20483, 27721, 23511, 27765, 28306, 19803, 23540, 24035, 24610, 27781, 27805, 26650, 23114, 28573, 32990, 25920, 22468, 26870, 23511, 26684, 34262, 34737, 25057, 34622, 24035, 24035, 23971, 24206, 27825, 27847, 23114, 23114, 27865, 27885, 35766, 27914, 23511, 23511, 32766, 32844, 27934, 28795, 26909, 27955, 26092, 27988, 25445, 28005, 28036, 28052, 21965, 23511, 32196, 19897, 28072, 28102, 36534, 21541, 23801, 28153, 28180, 28197, 28221, 23036, 32695, 28251, 28268, 28292, 23667, 34825, 23930, 24580, 28322, 28344, 31627, 28366, 25996, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 35625, 33477, 33359, 27674, 28393, 33992, 24036, 23114, 30243, 19829, 28417, 28433, 28463, 23008, 19876, 20208, 23007, 20046, 20132, 28489, 28520, 20141, 24569, 31691, 19787, 28550, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 28589, 24035, 24035, 24035, 24035, 28608, 23114, 23114, 23114, 23114, 28618, 20431, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36004, 19288, 28634, 31951, 28565, 28702, 28718, 28741, 32544, 20175, 28792, 32086, 20105, 28811, 29059, 29862, 28856, 22420, 28886, 30354, 23359, 28922, 28306, 28952, 23888, 26320, 36506, 24035, 29331, 28968, 36609, 23114, 29003, 31661, 27061, 30649, 27366, 23511, 29023, 27918, 24694, 24035, 24035, 23893, 33094, 30867, 23113, 23114, 23114, 29044, 34184, 30010, 29700, 23511, 23511, 29081, 29102, 34585, 20402, 27789, 24035, 24035, 24036, 23114, 29132, 23114, 23114, 23029, 20271, 23511, 29153, 23511, 23511, 30562, 30174, 24035, 24035, 27409, 25438, 23114, 23114, 29172, 36668, 31332, 23511, 23511, 29192, 30144, 24035, 23110, 30203, 23114, 23467, 31544, 23261, 23628, 24035, 22545, 23111, 23114, 29213, 27078, 27689, 29234, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 29257, 23008, 19876, 20208, 28768, 29290, 29320, 34776, 29353, 20141, 22435, 29378, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36367, 19288, 21605, 34616, 19006, 32618, 31497, 31507, 36216, 20184, 24035, 34393, 29424, 34668, 23114, 34900, 29447, 22420, 30360, 23511, 37089, 29473, 28306, 19803, 29499, 24398, 24035, 24035, 26576, 31799, 29532, 29550, 23114, 33811, 22468, 32298, 29571, 31184, 23511, 23512, 37127, 36628, 29589, 24035, 24135, 24035, 23113, 29608, 23114, 27831, 29634, 28618, 29652, 30037, 23511, 24172, 29671, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 29555, 29690, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 29719, 24035, 23110, 29738, 23114, 23467, 34035, 29756, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 29777, 34364, 28181, 30243, 29799, 31920, 27272, 27185, 23008, 31126, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29828, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35989, 19552, 19687, 35139, 28649, 29878, 29894, 29924, 29939, 23224, 23085, 31969, 24036, 35173, 24752, 24803, 23114, 22420, 31190, 30318, 24870, 23511, 28306, 29967, 23967, 24035, 24035, 24035, 26576, 30000, 23114, 23114, 23114, 33811, 22468, 30026, 23511, 23511, 23511, 23512, 26078, 24035, 24035, 24035, 30053, 37137, 30071, 23114, 23114, 33368, 25136, 28618, 30723, 23511, 23511, 37096, 31356, 34585, 20402, 30092, 30127, 30160, 24036, 35740, 30219, 24960, 30259, 23029, 20271, 34042, 30285, 30342, 30376, 23289, 30055, 30400, 30419, 30438, 32640, 33532, 33514, 30472, 18792, 26267, 24323, 23057, 30493, 23639, 20008, 30196, 33188, 30517, 20075, 23511, 30541, 23628, 30578, 33928, 28776, 30594, 19874, 30610, 30637, 19830, 30677, 27646, 19872, 25779, 23266, 23232, 35016, 30243, 30696, 29812, 30712, 30746, 27206, 30779, 30807, 23007, 33395, 20132, 26578, 27685, 31703, 22928, 31691, 19787, 31079, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36352, 19288, 23335, 30841, 26131, 30888, 30904, 30986, 29939, 24035, 24704, 31017, 20025, 23114, 26178, 31051, 31095, 22420, 23511, 22524, 31142, 31172, 28534, 31206, 35497, 25196, 24035, 28592, 24503, 23114, 31239, 31285, 23114, 31305, 31321, 31355, 31372, 31407, 23511, 30556, 24694, 24035, 27501, 19805, 24035, 24035, 23113, 23114, 31428, 24066, 23114, 28618, 29700, 23511, 31837, 18809, 23511, 34585, 31448, 24035, 24035, 24035, 23090, 23114, 23114, 23114, 23114, 31619, 35038, 23511, 23511, 23511, 23511, 33714, 24035, 33085, 24035, 29431, 23114, 31467, 23114, 23143, 31487, 23511, 31523, 23511, 35195, 36783, 24035, 30111, 23567, 23114, 23467, 31543, 31560, 23628, 24035, 24035, 23111, 23114, 19874, 30953, 31584, 34508, 24035, 31608, 26345, 37055, 23266, 31643, 31677, 31719, 31747, 31786, 31822, 26898, 23008, 19876, 31859, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 31878, 31936, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35974, 19288, 21605, 27972, 35663, 31985, 29655, 32001, 36715, 24785, 25893, 23545, 31912, 19853, 19916, 25938, 24540, 22420, 31843, 29674, 29573, 32735, 28936, 19803, 24035, 24035, 32047, 24035, 26576, 23114, 23114, 27544, 23114, 33811, 22468, 23511, 23511, 32161, 23511, 23512, 32066, 24035, 33313, 24035, 24035, 24035, 23113, 27426, 32102, 23114, 23114, 28618, 32125, 23511, 32144, 23511, 23511, 33569, 20402, 24035, 27045, 24035, 24036, 23114, 23114, 28328, 23114, 30076, 32177, 23511, 23511, 30384, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23595, 32212, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 22635, 25753, 32233, 32257, 32277, 19829, 26577, 26597, 20211, 23008, 19876, 32322, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 32352, 35285, 32380, 34196, 33016, 30661, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 32404, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 32422, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 30269, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 19949, 24035, 23111, 32455, 19874, 31269, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36337, 19552, 19209, 21617, 26509, 32475, 32491, 32529, 29939, 24035, 32578, 25241, 32597, 23114, 32634, 29007, 32656, 22420, 23511, 32729, 26365, 32751, 28306, 32788, 32882, 24035, 24035, 32813, 36727, 23114, 33182, 23114, 27553, 33235, 32829, 23511, 32706, 23511, 28906, 28377, 26962, 32881, 32904, 32898, 32920, 24035, 32953, 23114, 32977, 26408, 23114, 28164, 33006, 23511, 33039, 35774, 23511, 32306, 20402, 33076, 30872, 24035, 24036, 25408, 33110, 28979, 23114, 23029, 20271, 35835, 33130, 33054, 23511, 30562, 33148, 24035, 24035, 33167, 23114, 23114, 33775, 23036, 20459, 23511, 23511, 25464, 24646, 24035, 24035, 22446, 23114, 23114, 25627, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 31391, 33204, 33220, 33251, 33287, 26577, 26597, 20211, 33329, 19876, 33345, 23007, 20046, 20132, 26578, 27685, 28473, 22599, 31691, 33411, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35959, 19288, 21907, 27243, 29843, 32618, 33427, 31507, 29939, 33460, 34090, 24035, 24036, 33493, 24416, 33530, 23114, 22420, 33548, 24379, 33585, 23511, 28306, 19803, 33603, 24202, 24035, 24035, 25593, 33749, 28205, 23114, 23114, 32388, 22468, 33853, 33060, 23511, 23511, 31339, 33621, 24035, 24035, 34397, 24618, 30757, 33663, 23114, 23114, 33683, 35684, 28618, 26678, 23511, 23511, 32506, 33699, 34585, 20402, 24035, 32562, 26973, 24036, 23114, 23114, 33377, 33773, 23029, 20271, 23511, 23511, 30621, 23511, 23860, 24035, 33791, 21553, 26576, 36558, 23114, 33809, 23036, 32857, 26047, 23511, 33827, 23634, 24035, 24035, 23110, 23114, 23114, 31252, 23511, 33845, 23628, 24035, 24459, 23111, 23114, 33869, 27078, 30791, 29783, 24035, 24742, 19872, 33895, 23266, 26462, 19710, 33879, 33919, 26577, 26597, 24123, 24930, 21930, 20208, 30501, 33953, 25268, 20252, 33983, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36322, 19552, 23390, 33634, 35154, 34008, 34024, 34058, 35544, 34106, 34128, 26811, 33151, 34144, 34169, 34212, 23114, 34228, 34244, 34278, 34315, 23511, 34331, 34347, 34380, 34413, 24035, 24663, 26576, 34429, 34453, 34477, 29534, 33811, 22468, 34499, 34524, 34557, 25170, 34580, 35436, 23937, 34601, 24035, 24341, 26453, 23113, 34638, 34662, 23114, 24236, 28618, 34684, 34703, 34729, 23511, 35352, 34753, 34799, 24035, 34815, 32558, 34848, 34888, 35814, 34923, 23165, 29137, 23606, 30326, 30730, 34939, 33023, 30562, 36848, 34979, 24035, 24847, 34996, 23114, 23114, 35032, 29695, 35054, 23511, 23511, 35091, 33296, 35124, 24296, 28235, 24361, 36276, 32772, 35067, 35189, 27301, 30855, 24852, 22452, 35211, 35237, 35316, 25500, 35270, 23405, 24304, 35304, 29362, 24036, 23114, 35332, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 35368, 28823, 23920, 32336, 35405, 20141, 24569, 31691, 35421, 35479, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35944, 22795, 21605, 33647, 35877, 35513, 30962, 35529, 34073, 35557, 24035, 24035, 20405, 31107, 23114, 23114, 23114, 35590, 34713, 23511, 23511, 23511, 35641, 19803, 29408, 32937, 25298, 24035, 35657, 23115, 27849, 24760, 35679, 26205, 22468, 23511, 35700, 24907, 24901, 35075, 31893, 34980, 24035, 24035, 24035, 24035, 23113, 35009, 23114, 23114, 23114, 28618, 35716, 30970, 23511, 23511, 23511, 34585, 23215, 24035, 24035, 24035, 24036, 35735, 23114, 23114, 23114, 27105, 35756, 35790, 23511, 23511, 23511, 35254, 35446, 24035, 24035, 31223, 35809, 23114, 23114, 23036, 36825, 35830, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 31031, 20355, 19872, 33903, 23266, 24036, 23114, 28686, 19829, 26577, 26597, 20211, 23008, 23424, 20208, 24711, 31065, 24486, 26578, 27685, 20141, 19773, 35851, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36307, 19288, 21605, 35494, 19702, 32618, 33437, 31507, 29939, 25117, 24035, 27939, 24036, 27869, 23114, 26829, 23114, 22420, 23494, 23511, 33132, 23511, 28306, 19803, 24035, 34832, 24035, 24035, 26576, 23114, 25153, 23114, 23114, 33811, 22468, 23511, 23511, 35911, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35929, 19288, 21605, 25860, 23112, 36185, 23511, 36201, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 26748, 24035, 24035, 24035, 24035, 24035, 36249, 23114, 23114, 23114, 23114, 28618, 28835, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 27151, 24035, 26760, 23114, 27989, 23114, 23114, 36268, 20271, 23511, 24436, 23511, 29703, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36292, 19288, 21605, 36503, 21922, 32618, 34534, 31507, 36522, 24035, 33793, 24035, 35864, 23114, 23114, 36555, 23417, 22420, 23511, 23511, 36574, 26020, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 36592, 24035, 24035, 36625, 24035, 24035, 23113, 23114, 32961, 23114, 23114, 29618, 29700, 23511, 29086, 23511, 23511, 34585, 20402, 36644, 24035, 24035, 24036, 29740, 23114, 23114, 23114, 29065, 36663, 31527, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 31451, 23112, 36684, 23511, 36700, 29939, 24035, 24035, 24035, 30185, 23114, 23114, 23114, 27526, 22420, 23511, 23511, 23511, 32865, 28306, 19803, 36743, 24035, 27017, 24035, 26576, 27535, 23114, 31432, 23114, 33811, 22468, 33271, 23511, 32128, 23511, 23512, 24694, 24035, 27196, 24035, 24035, 24035, 23113, 32459, 23114, 23114, 23114, 28618, 29700, 33829, 36762, 23511, 23511, 34585, 20402, 24035, 36746, 24035, 29722, 23114, 23114, 34437, 23114, 34907, 20271, 23511, 23511, 18801, 23511, 23206, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 36837, 24035, 24035, 33739, 23114, 23114, 25094, 23511, 23261, 23628, 24035, 36780, 23111, 24073, 19874, 27078, 35344, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22720, 19288, 36799, 36866, 17466, 36890, 36864, 21991, 22211, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17631, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22705, 19288, 19457, 36866, 17466, 36890, 36866, 19375, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36124, 19288, 36951, 36866, 17466, 36890, 36866, 21991, 22404, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18567, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36979, 36995, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18027, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 21529, 24035, 23112, 23033, 23511, 31507, 25377, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 37040, 23511, 23511, 23511, 23511, 28086, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 37079, 23511, 23511, 23511, 23511, 23512, 34766, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 37112, 37160, 18469, 36866, 17466, 36890, 36866, 17656, 37174, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18537, 22984, 17553, 17572, 22285, 18780, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 0, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 127011, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2576384, 2215936, 2215936, 2215936, 2416640, 2424832, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2543616, 2215936, 2215936, 2215936, 2215936, 2215936, 2629632, 2215936, 2617344, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2691072, 2215936, 2707456, 2215936, 2715648, 2215936, 2723840, 2764800, 2215936, 2215936, 2797568, 2215936, 2822144, 2215936, 2215936, 2854912, 2215936, 2215936, 2215936, 2912256, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 180224, 0, 0, 2174976, 0, 0, 2170880, 2617344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2691072, 2170880, 2707456, 2170880, 2715648, 2170880, 2723840, 2764800, 2170880, 2170880, 2797568, 2170880, 2170880, 2797568, 2170880, 2822144, 2170880, 2170880, 2854912, 2170880, 2170880, 2170880, 2912256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2609152, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2654208, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 184599, 280, 0, 2174976, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 544, 0, 546, 0, 0, 2179072, 0, 0, 0, 552, 0, 0, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2158592, 2158592, 2232320, 2232320, 0, 2240512, 2240512, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 2768896, 2789376, 2813952, 2170880, 2170880, 2170880, 2875392, 2904064, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 167936, 0, 0, 0, 0, 2174976, 0, 0, 2215936, 2215936, 2514944, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2592768, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 32768, 0, 0, 0, 0, 0, 2174976, 32768, 0, 2633728, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2711552, 2215936, 2215936, 2215936, 2215936, 2215936, 2760704, 2768896, 2789376, 2813952, 2215936, 2215936, 2215936, 2875392, 2904064, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 65819, 2215936, 2215936, 3031040, 2215936, 3055616, 2215936, 2215936, 2215936, 2215936, 3092480, 2215936, 2215936, 3125248, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2170880, 2170880, 2494464, 2170880, 2170880, 0, 0, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 2699264, 2170880, 2727936, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3026944, 2170880, 2170880, 3063808, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 2379776, 2215936, 2523136, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2596864, 2215936, 2621440, 2215936, 2215936, 2641920, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 548, 0, 0, 0, 0, 287, 2170880, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2699264, 2215936, 2727936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2879488, 2215936, 2916352, 2215936, 2215936, 0, 0, 0, 0, 188416, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 0, 2171019, 2171019, 2171019, 2400395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3031179, 2171019, 3055755, 2171019, 2171019, 2215936, 3133440, 2215936, 2215936, 2215936, 3162112, 2215936, 2215936, 3182592, 3186688, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2523275, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2597003, 2171019, 2621579, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 4337664, 28, 2170880, 2170880, 2170880, 2629632, 2170880, 2170880, 2170880, 2170880, 2719744, 2744320, 2170880, 2170880, 2170880, 2834432, 2838528, 2170880, 2908160, 2170880, 2170880, 2936832, 2215936, 2215936, 2215936, 2215936, 2719744, 2744320, 2215936, 2215936, 2215936, 2834432, 2838528, 2215936, 2908160, 2215936, 2215936, 2936832, 2215936, 2215936, 2985984, 2215936, 2994176, 2215936, 2215936, 3014656, 2215936, 3059712, 3076096, 3088384, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2445312, 2215936, 2465792, 2473984, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2171019, 2494603, 2171019, 2171019, 2215936, 2215936, 2215936, 3215360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3016168, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 124, 124, 0, 128, 128, 2170880, 2170880, 2170880, 3215360, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2535424, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 0, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2170880, 2170880, 3170304, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 2215936, 2215936, 2215936, 2535424, 2539520, 2215936, 2215936, 2588672, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 136, 0, 2215936, 2215936, 2920448, 2215936, 2215936, 2215936, 2990080, 2215936, 2215936, 2215936, 2215936, 3051520, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3108864, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3026944, 2215936, 2215936, 3063808, 2215936, 2215936, 3112960, 2215936, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2537049, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 1508, 2170880, 2170880, 2170880, 1512, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2686976, 2748416, 2170880, 2170880, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3121152, 2170880, 2170880, 3145728, 3158016, 3166208, 2170880, 2420736, 2428928, 2170880, 2478080, 2170880, 2170880, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 0, 0, 3145728, 3158016, 3166208, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 0, 2170880, 2215936, 2215936, 2580480, 2215936, 2605056, 2637824, 2215936, 2215936, 2686976, 2748416, 2215936, 2215936, 2215936, 2924544, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 286, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 1625, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 647, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2686976, 0, 0, 2748416, 2170880, 2170880, 0, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 0, 0, 28, 28, 2170880, 3141632, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2170880, 2420736, 2428928, 2752512, 2756608, 0, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2170880, 3141632, 2170880, 2170880, 2490368, 2215936, 2490368, 2215936, 2215936, 2215936, 2547712, 2555904, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 245760, 0, 3129344, 2170880, 2170880, 2490368, 2170880, 2170880, 2170880, 0, 0, 2547712, 2555904, 2170880, 2170880, 2170880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 45056, 0, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1482, 97, 97, 97, 97, 97, 97, 97, 1354, 97, 97, 97, 97, 97, 97, 97, 97, 1148, 97, 97, 97, 97, 97, 97, 97, 2584576, 2170880, 2170880, 1512, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2170880, 2850816, 2170880, 2170880, 2170880, 3022848, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 2215936, 3022848, 2170880, 2441216, 2170880, 2527232, 0, 0, 2170880, 2600960, 2170880, 0, 2850816, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2596864, 2170880, 2621440, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 3022848, 2170880, 2519040, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2514944, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2519040, 0, 2024, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 2024, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 2170880, 2215936, 2650112, 2965504, 2215936, 0, 0, 2170880, 2650112, 2965504, 2170880, 2551808, 2170880, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 141, 45, 45, 67, 67, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 0, 2551808, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2977792, 2977792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 29, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 49172, 0, 0, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 4256099, 4256099, 24, 24, 0, 28, 28, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 0, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 2170880, 2547712, 2555904, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2215936, 2215936, 543, 543, 545, 545, 0, 0, 2179072, 0, 550, 551, 551, 0, 287, 2171166, 2171166, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 645, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 149, 2584576, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2519040, 0, 0, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 0, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 53264, 18, 49172, 57366, 24, 155648, 28, 102432, 155648, 155687, 114730, 106539, 0, 0, 155648, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 0, 0, 2220032, 0, 94208, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 208896, 18, 278528, 24, 24, 0, 28, 28, 53264, 18, 159765, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 139394, 28, 28, 102432, 131, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 32768, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 546, 0, 0, 2183168, 0, 0, 552, 832, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2654208, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 1084, 0, 1088, 0, 1092, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 937, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 644, 0, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 826, 0, 828, 0, 0, 2183168, 0, 0, 830, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2170880, 2170880, 2633728, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 53264, 18, 49172, 57366, 24, 8192, 28, 172066, 172032, 110630, 172066, 106539, 0, 0, 172032, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 102432, 0, 98304, 0, 0, 2220032, 110630, 0, 0, 0, 0, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 45056, 0, 0, 0, 53264, 18, 49172, 57366, 25, 8192, 30, 102432, 0, 110630, 114730, 106539, 0, 0, 176219, 53264, 18, 18, 49172, 0, 57366, 0, 124, 124, 124, 0, 128, 128, 128, 128, 102432, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 546, 0, 0, 2183168, 0, 65536, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 143, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1824, 67, 1826, 67, 67, 67, 67, 17, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 120, 121, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 2179072, 548, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2033, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 978, 0, 546, 70179, 0, 2183168, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1013, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 67, 67, 67, 483, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1359, 97, 97, 97, 67, 67, 1584, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 45, 45, 45, 45, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 774, 67, 67, 1713, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1723, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 45, 1559, 45, 45, 1561, 45, 45, 45, 45, 45, 45, 45, 687, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1771, 1772, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 1827, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 1614, 97, 97, 97, 97, 97, 603, 97, 97, 605, 97, 97, 608, 97, 97, 97, 97, 0, 1532, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 450, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 1839, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 1883, 97, 1885, 97, 0, 1888, 0, 97, 97, 0, 97, 97, 1848, 97, 97, 97, 97, 1852, 45, 45, 45, 45, 45, 45, 45, 384, 391, 45, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 45, 45, 45, 45, 1237, 45, 45, 45, 45, 45, 45, 67, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1951, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1963, 97, 2023, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 1994, 67, 1995, 67, 67, 67, 67, 67, 67, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 137, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2793472, 2805760, 2170880, 2830336, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 281, 549, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2031, 2032, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 0, 546, 70179, 549, 549, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1858, 45, 641, 0, 0, 0, 0, 41606, 926, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 456, 67, 0, 0, 0, 1313, 0, 0, 0, 1096, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1110, 97, 97, 97, 97, 67, 67, 67, 67, 1301, 1476, 0, 0, 0, 0, 1307, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1486, 97, 1487, 97, 1313, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 97, 45, 1853, 45, 1855, 45, 45, 45, 45, 53264, 18, 49172, 57366, 26, 8192, 31, 102432, 0, 110630, 114730, 106539, 0, 0, 225368, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 18, 49172, 163840, 57366, 0, 24, 24, 229376, 0, 28, 28, 28, 229376, 102432, 0, 0, 0, 0, 2220167, 110630, 0, 0, 0, 114730, 106539, 0, 2171019, 2171019, 2171019, 2171019, 2592907, 2171019, 2171019, 2171019, 2171019, 2633867, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2654347, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3117195, 2171019, 2171019, 2171019, 2171019, 2240641, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 140, 2171019, 2171019, 2171019, 2416779, 2424971, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2617483, 2171019, 2171019, 2642059, 2171019, 2171019, 2171019, 2699403, 2171019, 2728075, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3215499, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2171019, 2822283, 2171019, 2171019, 2855051, 2171019, 2171019, 2171019, 2912395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3002507, 2171019, 2171019, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2171166, 2171166, 2416926, 2425118, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2576670, 2171166, 2617630, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2691358, 2171166, 2707742, 2171166, 2715934, 2171166, 2724126, 2765086, 2171166, 2171166, 2797854, 2171166, 2822430, 2171166, 2171166, 2855198, 2171166, 2171166, 2171166, 2912542, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2793758, 2806046, 2171166, 2830622, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3109150, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2543902, 2171166, 2171166, 2171166, 2171166, 2171166, 2629918, 2793611, 2805899, 2171019, 2830475, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2171166, 2171166, 2171166, 2400542, 2171166, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 0, 2171166, 2920734, 2171166, 2171166, 2171166, 2990366, 2171166, 2171166, 2171166, 2171166, 3117342, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 53264, 0, 18, 18, 4329472, 2232445, 0, 2240641, 4337664, 2711691, 2171019, 2171019, 2171019, 2171019, 2171019, 2760843, 2769035, 2789515, 2814091, 2171019, 2171019, 2171019, 2875531, 2904203, 2171019, 2171019, 3092619, 2171019, 2171019, 3125387, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3199115, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2793472, 2805760, 2215936, 2830336, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2494464, 2170880, 2170880, 2171166, 2171166, 2634014, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2711838, 2171166, 2171166, 2171166, 2171166, 2171166, 2760990, 2769182, 2789662, 2814238, 2171166, 2171166, 2171166, 2875678, 2904350, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3199262, 2171166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379915, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2445451, 2171019, 2465931, 2474123, 2171019, 2171019, 3113099, 2171019, 2171019, 3133579, 2171019, 2171019, 2171019, 3162251, 2171019, 2171019, 3182731, 3186827, 2171019, 2379776, 2879627, 2171019, 2916491, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3027083, 2171019, 2171019, 3063947, 2699550, 2171166, 2728222, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2879774, 2171166, 2916638, 2171166, 2171166, 2171166, 2171166, 2171166, 2609438, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2654494, 2171166, 2171166, 2171166, 2171166, 2171166, 2445598, 2171166, 2466078, 2474270, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2523422, 2171019, 2437259, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2543755, 2171019, 2171019, 2171019, 2584715, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2908299, 2171019, 2171019, 2936971, 2171019, 2171019, 2986123, 2171019, 2994315, 2171019, 2171019, 3014795, 2171019, 3059851, 3076235, 3088523, 2171166, 2171166, 2986270, 2171166, 2994462, 2171166, 2171166, 3014942, 2171166, 3059998, 3076382, 3088670, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3027230, 2171166, 2171166, 3064094, 2171166, 2171166, 3113246, 2171166, 2171166, 3133726, 2506891, 2171019, 2171019, 2171019, 2535563, 2539659, 2171019, 2171019, 2588811, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2691211, 2171019, 2707595, 2171019, 2715787, 2171019, 2723979, 2764939, 2171019, 2171019, 2797707, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2453790, 2457886, 2171166, 2171166, 2171166, 2486558, 2171166, 2171166, 2507038, 2171166, 2171166, 2171166, 2535710, 2539806, 2171166, 2171166, 2588958, 2171166, 2171166, 2171166, 2171166, 2515230, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2593054, 2171166, 2171166, 2171166, 2171166, 3051806, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3170590, 0, 2388107, 2392203, 2171019, 2171019, 2433163, 2171019, 2461835, 2171019, 2171019, 2171019, 2510987, 2171019, 2171019, 2171019, 2171019, 2580619, 2171019, 2605195, 2637963, 2171019, 2171019, 2171019, 2920587, 2171019, 2171019, 2171019, 2990219, 2171019, 2171019, 2171019, 2171019, 3051659, 2171019, 2171019, 2171019, 2453643, 2457739, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2515083, 2171019, 2171019, 2171019, 2171019, 2646155, 2670731, 2752651, 2756747, 2846859, 2961547, 2171019, 2998411, 2171019, 3010699, 2171019, 2171019, 2687115, 2748555, 2171019, 2171019, 2171019, 2924683, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3121291, 2171019, 2171019, 2171019, 3170443, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 3145867, 3158155, 3166347, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 553, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2388254, 2392350, 2171166, 2171166, 2433310, 2171166, 2461982, 2171166, 2171166, 2171166, 2511134, 2171166, 2171166, 0, 2171166, 2171166, 2580766, 2171166, 2605342, 2638110, 2171166, 2171166, 2171166, 2171166, 3031326, 2171166, 3055902, 2171166, 2171166, 2171166, 2171166, 3092766, 2171166, 2171166, 3125534, 2171166, 2171166, 2171166, 3162398, 2171166, 2171166, 3182878, 3186974, 2171166, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 3109003, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2171166, 2687262, 0, 0, 2748702, 2171166, 2171166, 0, 2171166, 2924830, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2597150, 2171166, 2621726, 2171166, 2171166, 2642206, 2171166, 2171166, 2171166, 2171166, 3121438, 2171166, 2171166, 3146014, 3158302, 3166494, 2171019, 2420875, 2429067, 2171019, 2478219, 2171019, 2171019, 2171019, 2171019, 2547851, 2556043, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3129483, 2215936, 2171019, 3141771, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2171166, 2421022, 2429214, 2171166, 2478366, 2171166, 2171166, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2646302, 2670878, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 0, 45, 45, 45, 45, 45, 1405, 1406, 45, 45, 45, 45, 1409, 45, 45, 45, 45, 45, 1415, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1238, 45, 45, 45, 45, 67, 2752798, 2756894, 0, 2847006, 2961694, 2171166, 2998558, 2171166, 3010846, 2171166, 2171166, 2171166, 3141918, 2171019, 2171019, 2490507, 3129344, 2171166, 2171166, 2490654, 2171166, 2171166, 2171166, 0, 0, 2547998, 2556190, 2171166, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 167, 45, 45, 45, 45, 185, 187, 45, 45, 198, 45, 45, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3129630, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2576523, 2171019, 2171019, 2171019, 2171019, 2171019, 2609291, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2171166, 2171166, 2494750, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 147, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 3002654, 2171166, 2171166, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2175257, 0, 0, 2584862, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2441355, 2171019, 2527371, 2171019, 2601099, 2171019, 2850955, 2171019, 2171019, 2171019, 3022987, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 69632, 287, 2170880, 2215936, 3022848, 2171166, 2441502, 2171166, 2527518, 0, 0, 2171166, 2601246, 2171166, 0, 2851102, 2171166, 2171166, 2171166, 2171166, 2720030, 2744606, 2171166, 2171166, 2171166, 2834718, 2838814, 2171166, 2908446, 2171166, 2171166, 2937118, 3023134, 2171019, 2519179, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 3215646, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2486411, 2171019, 2171019, 2171019, 2629771, 2171019, 2171019, 2171019, 2171019, 2719883, 2744459, 2171019, 2171019, 2171019, 2834571, 2838667, 2171019, 2519326, 0, 0, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 2396299, 2171019, 2171019, 2171019, 2171019, 3018891, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396446, 0, 0, 2171166, 2171166, 2171166, 2171166, 3019038, 2171019, 2650251, 2965643, 2171019, 2215936, 2650112, 2965504, 2215936, 0, 0, 2171166, 2650398, 2965790, 2171166, 2551947, 2171019, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 144, 45, 45, 67, 67, 67, 67, 67, 228, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1929, 97, 97, 97, 97, 0, 0, 0, 2552094, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2977931, 2977792, 2978078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1321, 97, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 140, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2584576, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 140, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3215360, 544, 0, 0, 0, 544, 0, 546, 0, 0, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 0, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 552, 0, 0, 0, 552, 0, 287, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 644, 0, 2215936, 2215936, 3170304, 544, 0, 546, 0, 552, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 140, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 249856, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 151640, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 253952, 110630, 114730, 106539, 0, 0, 32856, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 192512, 53264, 18, 18, 49172, 0, 57366, 0, 2232445, 184320, 2232445, 0, 2240641, 2240641, 184320, 2240641, 102432, 0, 0, 0, 221184, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3108864, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 0, 0, 0, 45056, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 127, 127, 53264, 18, 49172, 258071, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 204800, 53264, 18, 49172, 57366, 24, 27, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 33, 0, 33, 33, 33, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2170880, 2170880, 2170880, 2416640, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2030, 45, 45, 45, 45, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1699, 67, 67, 67, 67, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 1358, 97, 97, 97, 641, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 45, 45, 45, 0, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1680, 45, 45, 45, 641, 0, 924, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 45, 45, 45, 45, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 282, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 2028, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1767, 67, 67, 67, 0, 0, 0, 0, 0, 0, 1612, 97, 97, 97, 97, 97, 97, 0, 1785, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1790, 97, 0, 0, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 241664, 2387968, 2392064, 2170880, 2170880, 2433024, 53264, 19, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 274432, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 270336, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 1134711, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 1126440, 1126440, 1126440, 0, 0, 1126400, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 36, 110630, 114730, 106539, 0, 0, 217088, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 94, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 96, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 24666, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 126, 28, 28, 28, 28, 102432, 53264, 122, 123, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 2170880, 2170880, 4256099, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1109, 97, 97, 97, 97, 1113, 132, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 146, 150, 45, 45, 45, 45, 45, 175, 45, 180, 45, 186, 45, 189, 45, 45, 203, 67, 256, 67, 67, 270, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 293, 297, 97, 97, 97, 97, 97, 322, 97, 327, 97, 333, 97, 0, 0, 97, 2026, 0, 2027, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 336, 97, 97, 350, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 2424832, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2617344, 2170880, 45, 439, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 525, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 622, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 1527, 369, 648, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1239, 45, 45, 45, 67, 729, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 762, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 0, 0, 0, 1477, 0, 1086, 0, 0, 0, 1479, 0, 1090, 67, 67, 796, 67, 67, 799, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 67, 67, 811, 67, 67, 67, 67, 67, 816, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 833, 97, 97, 97, 97, 97, 97, 97, 97, 1380, 0, 0, 0, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 45, 45, 45, 45, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 97, 97, 97, 894, 97, 97, 897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1382, 45, 45, 45, 97, 909, 97, 97, 97, 97, 97, 914, 97, 97, 97, 97, 97, 97, 97, 923, 67, 67, 1079, 67, 67, 67, 67, 67, 37689, 1085, 25403, 1089, 66365, 1093, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 148, 1114, 97, 97, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 97, 97, 606, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1173, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 145, 45, 45, 67, 67, 67, 67, 67, 1762, 67, 67, 67, 1766, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1934, 67, 67, 1255, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 67, 67, 67, 67, 1297, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 33344, 97, 97, 97, 1335, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1377, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 670, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 67, 67, 1438, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 0, 0, 0, 1311, 0, 0, 0, 1317, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1322, 97, 97, 1491, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 1553, 45, 1504, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 97, 97, 0, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 1540, 45, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1700, 67, 67, 67, 97, 1648, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1541, 0, 97, 97, 97, 97, 0, 1940, 0, 97, 97, 97, 97, 97, 97, 45, 45, 2011, 45, 45, 45, 2015, 67, 67, 2017, 67, 67, 67, 2021, 97, 67, 67, 812, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 97, 97, 910, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 0, 0, 0, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 1188, 45, 45, 45, 45, 1414, 45, 45, 45, 1417, 45, 1419, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 453, 45, 45, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 1324, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 930, 45, 45, 45, 45, 97, 97, 97, 97, 1378, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 45, 67, 67, 1923, 67, 1925, 67, 67, 1927, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1985, 45, 45, 45, 45, 45, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 45, 946, 45, 45, 950, 45, 45, 45, 0, 97, 97, 97, 1939, 0, 0, 0, 97, 1943, 97, 97, 1945, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 990, 45, 45, 45, 67, 257, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 337, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 2170880, 2170880, 2170880, 2416640, 401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 459, 461, 67, 67, 67, 67, 67, 67, 67, 67, 475, 67, 480, 67, 67, 67, 67, 67, 67, 1054, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 484, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 67, 67, 97, 556, 558, 97, 97, 97, 97, 97, 97, 97, 97, 572, 97, 577, 97, 97, 0, 0, 1896, 97, 97, 97, 97, 97, 97, 1903, 45, 45, 45, 45, 983, 45, 45, 45, 45, 988, 45, 45, 45, 45, 45, 45, 1195, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1549, 45, 45, 45, 45, 45, 581, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1004, 45, 45, 45, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 761, 67, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 1071, 67, 67, 67, 67, 1076, 794, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 544, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 859, 97, 0, 0, 2025, 97, 20480, 97, 97, 2029, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1775, 67, 67, 67, 97, 97, 97, 97, 892, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1515, 97, 993, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 992, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1607, 67, 67, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 97, 45, 1556, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 696, 45, 1596, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 67, 97, 97, 97, 1621, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1346, 97, 97, 97, 97, 1740, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 45, 45, 67, 97, 97, 97, 97, 97, 97, 1836, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1984, 97, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 45, 45, 45, 45, 67, 739, 67, 67, 67, 67, 67, 744, 45, 45, 1909, 45, 45, 45, 45, 45, 45, 45, 67, 1917, 67, 1918, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 67, 67, 67, 67, 67, 97, 1930, 97, 1931, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 1580, 67, 67, 0, 97, 97, 1938, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 699, 45, 45, 45, 704, 45, 45, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 2006, 97, 97, 97, 97, 0, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 722, 723, 45, 45, 45, 45, 45, 45, 2045, 67, 67, 67, 2047, 0, 0, 97, 97, 97, 2051, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1957, 45, 67, 67, 67, 67, 67, 1836, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 67, 67, 1761, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 45, 45, 420, 45, 45, 422, 45, 45, 425, 45, 45, 45, 45, 45, 45, 45, 387, 45, 45, 45, 45, 397, 45, 45, 45, 67, 460, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 515, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 97, 0, 2039, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1426, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1689, 67, 67, 67, 97, 557, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 612, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 896, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 97, 45, 939, 45, 45, 45, 45, 943, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1916, 67, 67, 67, 67, 67, 45, 67, 67, 67, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 1019, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 804, 67, 67, 67, 67, 67, 1077, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2543616, 2170880, 2170880, 2170880, 2170880, 2170880, 2629632, 1169, 97, 1171, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 936, 45, 45, 67, 67, 214, 67, 220, 67, 67, 233, 67, 243, 67, 248, 67, 67, 67, 67, 67, 67, 1298, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1617, 97, 0, 0, 0, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 45, 45, 45, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 1281, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 776, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 907, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 690, 45, 45, 695, 45, 45, 67, 67, 67, 67, 67, 1465, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1712, 97, 97, 97, 97, 1741, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1924, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1983, 97, 97, 45, 45, 1987, 45, 1988, 45, 0, 97, 97, 97, 97, 0, 0, 0, 1942, 97, 97, 97, 97, 97, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 711, 45, 45, 153, 45, 45, 166, 45, 176, 45, 181, 45, 45, 188, 191, 196, 45, 204, 255, 258, 263, 67, 271, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 97, 97, 294, 97, 300, 97, 97, 313, 97, 323, 97, 328, 97, 97, 335, 338, 343, 97, 351, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1411, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 67, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1263, 67, 67, 67, 67, 67, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1526, 97, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 0, 97, 97, 1796, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1744, 45, 45, 45, 369, 0, 651, 45, 653, 45, 654, 45, 656, 45, 45, 45, 660, 45, 45, 45, 45, 1558, 45, 45, 45, 45, 45, 45, 45, 45, 1566, 45, 45, 681, 45, 683, 45, 45, 45, 45, 45, 45, 45, 45, 691, 692, 694, 45, 45, 45, 716, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 709, 45, 45, 712, 45, 714, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 726, 45, 45, 45, 733, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 747, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 1613, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 67, 764, 67, 67, 67, 67, 768, 67, 770, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1977, 67, 778, 779, 781, 67, 67, 67, 67, 67, 67, 788, 789, 67, 67, 792, 793, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 67, 67, 824, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 836, 97, 838, 97, 839, 97, 841, 97, 97, 97, 845, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 97, 97, 0, 1728, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1802, 45, 97, 97, 862, 97, 97, 97, 97, 866, 97, 868, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1788, 97, 97, 97, 0, 0, 97, 97, 876, 877, 879, 97, 97, 97, 97, 97, 97, 886, 887, 97, 97, 890, 891, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1646, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 97, 97, 922, 923, 45, 955, 45, 957, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 195, 45, 45, 45, 45, 45, 981, 982, 45, 45, 45, 45, 45, 45, 989, 45, 45, 45, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 67, 67, 1031, 67, 1033, 67, 67, 67, 67, 67, 67, 67, 817, 819, 67, 67, 67, 67, 67, 37689, 544, 67, 1065, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 1078, 67, 67, 1081, 1082, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2437406, 2171166, 2171166, 97, 1115, 97, 1117, 97, 97, 97, 97, 97, 97, 1125, 97, 1127, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 1644, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 1642, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1159, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1502, 97, 97, 97, 97, 97, 1172, 97, 97, 1175, 1176, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 935, 45, 45, 45, 1233, 45, 45, 45, 1236, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1873, 67, 67, 45, 45, 1218, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 1230, 45, 45, 67, 67, 215, 219, 222, 67, 230, 67, 67, 244, 246, 249, 67, 67, 67, 67, 67, 67, 1882, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1904, 45, 1905, 45, 67, 67, 67, 67, 67, 1258, 67, 1260, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 67, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 67, 818, 67, 67, 67, 67, 67, 67, 37689, 544, 67, 67, 1295, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 97, 97, 97, 1326, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 97, 97, 97, 97, 97, 1338, 97, 1340, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 1503, 97, 1363, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 578, 97, 1375, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 45, 45, 45, 45, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1778, 97, 97, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 97, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 1554, 45, 1570, 1571, 45, 67, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 67, 1061, 67, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 1594, 67, 67, 67, 67, 67, 97, 2038, 0, 97, 97, 97, 97, 97, 2044, 45, 45, 45, 995, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 45, 45, 45, 1809, 45, 1811, 45, 45, 45, 45, 45, 67, 1610, 1611, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 1618, 1647, 1649, 97, 97, 97, 1652, 97, 1654, 1655, 97, 0, 45, 45, 45, 1658, 45, 45, 67, 67, 216, 67, 67, 67, 67, 234, 67, 67, 67, 67, 252, 254, 1845, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 947, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1881, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1902, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1921, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 0, 97, 1937, 97, 97, 1940, 0, 0, 97, 97, 97, 97, 97, 97, 1947, 1948, 1949, 45, 45, 45, 1952, 45, 1954, 45, 45, 45, 45, 1959, 1960, 1961, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 67, 67, 1964, 67, 1966, 67, 67, 67, 67, 1971, 1972, 1973, 97, 0, 0, 0, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 884, 97, 97, 97, 889, 97, 97, 1978, 97, 0, 0, 1981, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 736, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 45, 67, 67, 67, 67, 0, 2049, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 933, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 97, 97, 288, 97, 97, 97, 97, 97, 97, 317, 97, 97, 97, 97, 97, 97, 0, 0, 97, 1787, 97, 97, 97, 97, 0, 0, 45, 45, 378, 45, 45, 45, 45, 45, 390, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 431, 433, 45, 45, 45, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 67, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 632, 97, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 67, 97, 97, 97, 97, 97, 97, 1837, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1897, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 97, 2010, 45, 45, 45, 45, 45, 45, 2016, 67, 67, 67, 67, 67, 67, 2022, 45, 2046, 67, 67, 67, 0, 0, 2050, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 932, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 45, 45, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 701, 702, 45, 45, 705, 706, 45, 45, 45, 45, 45, 45, 703, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 45, 45, 45, 45, 45, 725, 45, 45, 45, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 834, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1799, 97, 97, 45, 45, 45, 1569, 45, 45, 45, 1572, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1306, 0, 67, 67, 67, 1598, 67, 67, 67, 67, 67, 67, 67, 67, 1606, 67, 67, 1609, 97, 97, 97, 1650, 97, 97, 1653, 97, 97, 97, 0, 45, 45, 1657, 45, 45, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1421, 45, 45, 45, 1703, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1711, 97, 97, 0, 1895, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 958, 45, 960, 45, 45, 45, 45, 45, 45, 45, 45, 1913, 45, 45, 1915, 67, 67, 67, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 481, 67, 45, 1749, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 45, 45, 45, 45, 173, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1773, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1886, 0, 0, 0, 97, 97, 67, 2035, 2036, 67, 67, 97, 0, 0, 97, 2041, 2042, 97, 97, 45, 45, 45, 45, 1662, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1397, 45, 45, 45, 45, 151, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 437, 205, 45, 67, 67, 67, 218, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 67, 97, 97, 97, 97, 298, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 97, 97, 97, 97, 97, 97, 352, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 365, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1427, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1435, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1037, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1919, 67, 1759, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 45, 154, 45, 162, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 964, 45, 45, 45, 206, 45, 67, 67, 67, 67, 221, 67, 229, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 67, 785, 67, 67, 67, 67, 67, 67, 67, 67, 802, 67, 67, 67, 807, 67, 67, 67, 97, 97, 97, 97, 353, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 402, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 45, 45, 674, 45, 45, 45, 45, 45, 45, 45, 45, 389, 45, 394, 45, 45, 398, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 447, 45, 45, 45, 454, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 488, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 67, 67, 67, 67, 67, 1774, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 67, 67, 523, 67, 67, 527, 67, 67, 67, 67, 67, 533, 67, 67, 67, 540, 97, 97, 97, 585, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 97, 97, 97, 97, 1784, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 620, 97, 97, 624, 97, 97, 97, 97, 97, 630, 97, 97, 97, 637, 713, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 45, 45, 45, 1197, 45, 45, 45, 45, 45, 45, 45, 45, 730, 732, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1581, 67, 45, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 775, 67, 67, 67, 67, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 67, 67, 67, 1080, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 287, 0, 2379776, 2170880, 2170880, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 920, 97, 97, 0, 0, 0, 0, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 45, 959, 45, 45, 45, 45, 45, 45, 45, 45, 45, 184, 45, 45, 45, 45, 202, 45, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1266, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1279, 67, 67, 67, 67, 67, 272, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1293, 67, 67, 67, 1296, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 281, 94, 0, 0, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 0, 97, 1376, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1384, 45, 45, 67, 208, 67, 67, 67, 67, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1069, 1070, 67, 67, 67, 67, 67, 67, 67, 0, 37140, 24854, 0, 0, 0, 0, 41098, 65821, 45, 1423, 45, 45, 45, 45, 45, 45, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1083, 37689, 0, 25403, 0, 66365, 0, 0, 0, 1436, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1830, 67, 1452, 1453, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 67, 67, 1461, 67, 67, 67, 1464, 67, 1466, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 1587, 67, 67, 67, 67, 67, 67, 67, 67, 1595, 1489, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 1505, 1506, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 1164, 97, 97, 97, 97, 97, 1516, 97, 97, 97, 1519, 97, 1521, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1301, 0, 0, 0, 1307, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 919, 97, 97, 97, 0, 97, 97, 97, 1781, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1792, 1860, 45, 1862, 1863, 45, 1865, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1875, 67, 1877, 1878, 67, 1880, 67, 97, 97, 97, 97, 97, 1887, 0, 1889, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 237568, 0, 367, 0, 97, 1893, 0, 0, 0, 97, 1898, 1899, 97, 1901, 97, 45, 45, 45, 45, 45, 2014, 45, 67, 67, 67, 67, 67, 2020, 67, 97, 1989, 45, 1990, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1996, 67, 1997, 67, 67, 67, 67, 67, 273, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 2005, 0, 97, 2007, 97, 97, 18, 0, 139621, 0, 0, 0, 642, 0, 133, 364, 0, 0, 367, 41606, 0, 97, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 209, 67, 67, 67, 223, 67, 67, 67, 67, 67, 67, 67, 67, 67, 786, 67, 67, 67, 791, 67, 67, 45, 45, 940, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1016, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 142, 45, 45, 67, 210, 67, 67, 67, 225, 67, 67, 239, 67, 67, 67, 250, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 476, 67, 67, 67, 67, 67, 67, 67, 1709, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1843, 0, 67, 259, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 289, 97, 97, 97, 303, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 97, 339, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 358, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1953, 45, 1955, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1687, 1688, 67, 67, 67, 67, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1203, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 477, 67, 67, 67, 67, 67, 67, 67, 1970, 97, 97, 97, 1974, 0, 0, 0, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1372, 97, 97, 97, 97, 67, 522, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 536, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 574, 97, 97, 97, 97, 97, 301, 97, 309, 97, 97, 97, 97, 97, 97, 97, 97, 97, 900, 97, 97, 97, 905, 97, 97, 97, 619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 633, 97, 97, 18, 0, 139621, 0, 0, 362, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 664, 67, 67, 67, 67, 750, 751, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1057, 1058, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 67, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 902, 97, 97, 97, 97, 67, 67, 1051, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1302, 0, 0, 0, 1308, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1139, 97, 97, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 1161, 97, 97, 97, 97, 97, 1166, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 1257, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 97, 97, 1337, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1630, 97, 67, 1474, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380062, 2171166, 2171166, 97, 1529, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 45, 45, 67, 67, 67, 67, 1707, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1891, 1739, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 1200, 45, 45, 45, 45, 97, 97, 1894, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 45, 45, 45, 67, 67, 1965, 67, 1967, 67, 67, 67, 97, 97, 97, 97, 0, 1976, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 97, 97, 1979, 0, 0, 97, 1982, 97, 97, 97, 1986, 45, 45, 45, 45, 45, 735, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 2000, 97, 97, 97, 2002, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1798, 97, 97, 97, 45, 45, 45, 2034, 67, 67, 67, 67, 97, 0, 0, 2040, 97, 97, 97, 97, 45, 45, 45, 45, 1752, 45, 45, 45, 1753, 1754, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 45, 45, 438, 45, 45, 45, 45, 45, 445, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1430, 67, 67, 67, 67, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 531, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1096, 97, 97, 97, 621, 97, 97, 97, 97, 97, 628, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 45, 942, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 708, 45, 45, 45, 45, 763, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 809, 810, 67, 67, 67, 67, 783, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1303, 0, 0, 0, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 45, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 67, 67, 67, 67, 1027, 67, 67, 67, 67, 1032, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1097, 1064, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 67, 1098, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 331, 97, 97, 97, 97, 1158, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 1309, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1374, 97, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1240, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1252, 67, 97, 97, 97, 1635, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1800, 97, 45, 45, 45, 97, 97, 1793, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1743, 45, 45, 45, 1746, 45, 0, 97, 97, 97, 97, 97, 1851, 97, 45, 45, 45, 45, 1856, 45, 45, 45, 45, 1864, 45, 45, 67, 67, 1869, 67, 67, 67, 67, 1874, 67, 0, 97, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 211, 67, 67, 67, 67, 67, 67, 240, 67, 67, 67, 67, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 67, 67, 268, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 290, 97, 97, 97, 305, 97, 97, 319, 97, 97, 97, 330, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 643, 367, 41606, 97, 97, 348, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 395, 45, 45, 45, 400, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 45, 972, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1086, 25403, 1090, 66365, 1094, 0, 0, 97, 843, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 1121, 97, 97, 97, 97, 1126, 97, 97, 97, 97, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1400, 45, 67, 67, 67, 1011, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1304, 0, 0, 0, 1190, 45, 45, 1193, 1194, 45, 45, 45, 45, 45, 1199, 45, 1201, 45, 45, 45, 45, 1911, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 67, 67, 45, 1205, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1217, 45, 45, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 1229, 45, 45, 45, 1388, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1574, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 1254, 67, 67, 67, 67, 67, 1259, 67, 1261, 67, 67, 67, 67, 1265, 67, 67, 67, 67, 67, 67, 1708, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 1289, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1087, 25403, 1091, 66365, 1095, 0, 0, 97, 97, 97, 97, 1339, 97, 1341, 97, 97, 97, 97, 1345, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 573, 97, 97, 97, 97, 97, 97, 1717, 97, 0, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1329, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 97, 97, 97, 1365, 97, 97, 97, 97, 1369, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1399, 45, 45, 45, 1413, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1669, 45, 1422, 45, 45, 1425, 45, 45, 1428, 45, 1429, 67, 67, 67, 67, 67, 67, 67, 67, 1468, 67, 67, 67, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 539, 67, 67, 1475, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 97, 97, 1530, 97, 0, 45, 45, 1534, 45, 45, 45, 45, 45, 45, 45, 45, 1956, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 67, 67, 1601, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 67, 1632, 97, 1634, 0, 97, 97, 97, 1640, 97, 97, 97, 1643, 97, 97, 1645, 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1660, 1661, 45, 45, 45, 45, 1665, 1666, 45, 45, 45, 45, 45, 1670, 1692, 1693, 67, 67, 67, 67, 67, 1697, 67, 67, 67, 67, 67, 67, 67, 1702, 97, 97, 1714, 1715, 97, 97, 97, 97, 0, 1721, 1722, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 97, 97, 1362, 1726, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 1734, 97, 97, 97, 97, 97, 848, 849, 97, 97, 97, 97, 856, 97, 97, 97, 97, 97, 354, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 45, 45, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1681, 45, 0, 1846, 97, 97, 97, 97, 97, 97, 45, 45, 1854, 45, 45, 45, 45, 1859, 67, 67, 67, 1879, 67, 67, 97, 97, 1884, 97, 97, 0, 0, 0, 97, 97, 97, 1105, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 1347, 97, 1892, 97, 0, 0, 0, 97, 97, 97, 1900, 97, 97, 45, 45, 45, 45, 45, 997, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1002, 45, 45, 1005, 1006, 45, 67, 67, 67, 67, 67, 1926, 67, 67, 1928, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1737, 97, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1944, 97, 97, 1946, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 190, 45, 45, 45, 152, 155, 45, 163, 45, 45, 177, 179, 182, 45, 45, 45, 193, 197, 45, 45, 45, 1672, 45, 45, 45, 45, 45, 1677, 45, 1679, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 67, 260, 264, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 295, 299, 302, 97, 310, 97, 97, 324, 326, 329, 97, 97, 97, 0, 97, 97, 1639, 0, 1641, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 97, 1523, 97, 97, 97, 97, 97, 97, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 97, 97, 312, 97, 97, 97, 97, 97, 97, 97, 97, 1123, 97, 97, 97, 97, 97, 97, 97, 340, 344, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 373, 375, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 435, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1410, 45, 45, 45, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 67, 67, 67, 67, 1969, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 2064, 2065, 0, 2066, 45, 521, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 465, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1933, 0, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 18, 640, 139621, 358, 641, 0, 0, 0, 0, 364, 0, 0, 367, 0, 618, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 97, 97, 881, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 569, 97, 97, 97, 97, 97, 369, 0, 45, 652, 45, 45, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1432, 67, 67, 67, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 67, 0, 1305, 0, 1311, 0, 1317, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 1724, 97, 97, 97, 777, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 535, 67, 67, 67, 67, 67, 67, 67, 814, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 837, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 97, 97, 97, 0, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1168, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 97, 97, 0, 1637, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1801, 45, 45, 97, 875, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1151, 1152, 97, 97, 97, 67, 67, 67, 1040, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 790, 67, 67, 67, 1180, 0, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 200, 45, 45, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 67, 67, 67, 0, 0, 0, 1481, 0, 1094, 0, 0, 97, 1483, 97, 97, 97, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 1633, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1381, 0, 0, 45, 45, 45, 45, 97, 97, 1727, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 636, 45, 45, 1760, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 67, 67, 1299, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1616, 97, 97, 1803, 45, 45, 45, 45, 1807, 45, 45, 45, 45, 45, 1813, 45, 45, 45, 67, 67, 1684, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 822, 67, 67, 37689, 544, 67, 67, 1818, 67, 67, 67, 67, 1822, 67, 67, 67, 67, 67, 1828, 67, 67, 67, 67, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2012, 2013, 45, 45, 67, 67, 67, 2018, 2019, 67, 67, 97, 67, 97, 97, 97, 1833, 97, 97, 0, 0, 97, 97, 1840, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 1733, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 1849, 97, 97, 97, 45, 45, 45, 45, 45, 1857, 45, 45, 45, 1910, 45, 1912, 45, 45, 1914, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 67, 1020, 67, 45, 1861, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1446, 67, 67, 67, 67, 67, 1876, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1890, 97, 97, 97, 97, 97, 1134, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 97, 97, 97, 580, 1935, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1906, 45, 67, 67, 67, 67, 2048, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 931, 45, 45, 45, 45, 45, 45, 1674, 45, 1676, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1871, 67, 67, 67, 67, 0, 97, 97, 45, 67, 0, 97, 2060, 2061, 0, 2063, 45, 67, 0, 97, 45, 45, 156, 45, 45, 45, 45, 45, 45, 45, 45, 45, 192, 45, 45, 45, 45, 1673, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 429, 45, 45, 45, 45, 67, 67, 67, 269, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 349, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 374, 45, 45, 67, 67, 213, 217, 67, 67, 67, 67, 67, 242, 67, 247, 67, 253, 45, 45, 698, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 399, 45, 45, 0, 0, 0, 0, 925, 41606, 0, 929, 0, 0, 45, 45, 45, 45, 45, 45, 1391, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 436, 45, 67, 67, 67, 67, 1041, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1776, 67, 67, 97, 97, 97, 1099, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 888, 97, 97, 97, 1131, 97, 97, 97, 97, 1135, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 883, 97, 97, 97, 97, 97, 97, 1310, 0, 0, 0, 1316, 0, 0, 0, 0, 1100, 0, 0, 0, 97, 97, 97, 97, 97, 1107, 97, 97, 97, 97, 97, 97, 97, 97, 1343, 97, 97, 97, 97, 97, 97, 1348, 0, 0, 1317, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1868, 67, 1870, 67, 67, 67, 67, 67, 1817, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 823, 67, 37689, 544, 67, 97, 1832, 97, 97, 1834, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 1732, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1177, 0, 0, 925, 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 1941, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1991, 1992, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1998, 134, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 941, 45, 45, 944, 45, 45, 45, 45, 45, 45, 952, 45, 45, 207, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 67, 67, 67, 37689, 544, 369, 650, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1682, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 835, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1725, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 1036, 67, 67, 67, 265, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 296, 97, 97, 97, 97, 314, 97, 97, 97, 97, 332, 334, 97, 97, 97, 97, 97, 1146, 1147, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 97, 97, 345, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 372, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 45, 45, 404, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 451, 452, 45, 45, 45, 67, 1683, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 490, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 1450, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 537, 538, 67, 67, 67, 67, 67, 506, 67, 67, 508, 67, 67, 511, 67, 67, 67, 67, 0, 1476, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1484, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1499, 97, 97, 97, 97, 97, 97, 97, 97, 97, 587, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 634, 635, 97, 97, 97, 97, 97, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 97, 97, 97, 369, 0, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 1001, 45, 45, 45, 45, 45, 45, 45, 45, 715, 45, 45, 45, 720, 45, 45, 45, 45, 45, 45, 45, 45, 728, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 840, 97, 97, 97, 97, 97, 1174, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 97, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 680, 45, 968, 45, 970, 45, 973, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 962, 45, 45, 45, 45, 45, 979, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 688, 45, 45, 45, 45, 45, 45, 45, 1007, 1008, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 1044, 67, 1046, 67, 1049, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 808, 67, 67, 0, 0, 0, 1102, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 97, 97, 97, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 1138, 97, 1140, 97, 1143, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 45, 1191, 45, 45, 45, 45, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 991, 45, 67, 67, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1048, 67, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 97, 1386, 45, 1387, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 455, 45, 457, 45, 45, 1424, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1433, 67, 1434, 67, 67, 67, 67, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 1593, 67, 67, 45, 45, 1805, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1814, 45, 45, 1816, 67, 67, 67, 67, 1820, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1829, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 821, 67, 67, 67, 37689, 544, 67, 1831, 97, 97, 97, 97, 1835, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1850, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 961, 45, 45, 45, 45, 965, 45, 967, 1907, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1920, 0, 1936, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 28672, 97, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2054, 97, 97, 291, 97, 97, 97, 97, 97, 97, 320, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 926, 1179, 0, 45, 377, 45, 45, 45, 381, 45, 45, 392, 45, 45, 396, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 45, 45, 45, 67, 67, 67, 67, 463, 67, 67, 67, 467, 67, 67, 478, 67, 67, 482, 67, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 1472, 67, 502, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1460, 67, 97, 97, 97, 97, 560, 97, 97, 97, 564, 97, 97, 575, 97, 97, 579, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 930, 97, 599, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 872, 97, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1758, 0, 362, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 934, 45, 45, 45, 164, 168, 174, 178, 45, 45, 45, 45, 45, 194, 45, 45, 45, 165, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 45, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1060, 67, 67, 67, 67, 67, 67, 1052, 1053, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1063, 97, 1157, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1167, 97, 97, 97, 97, 97, 1379, 97, 97, 97, 0, 0, 0, 45, 1383, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 1812, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1471, 67, 45, 1402, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 67, 1462, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 1517, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 1636, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1705, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1842, 0, 0, 1779, 97, 97, 97, 1782, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1789, 97, 97, 0, 0, 0, 97, 1847, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 45, 737, 738, 67, 740, 67, 741, 67, 743, 67, 67, 67, 67, 67, 67, 1968, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 2062, 97, 45, 67, 0, 97, 45, 67, 67, 97, 97, 2001, 97, 0, 0, 2004, 97, 97, 0, 97, 97, 97, 97, 1797, 97, 97, 97, 97, 97, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 292, 97, 97, 97, 97, 311, 315, 321, 325, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1330, 97, 97, 1333, 1334, 97, 341, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 363, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 416, 45, 376, 45, 45, 45, 45, 382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 45, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 414, 45, 45, 45, 418, 67, 67, 67, 462, 67, 67, 67, 67, 468, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 1604, 67, 67, 67, 67, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 1067, 67, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 274, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 504, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 517, 519, 541, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 554, 97, 97, 97, 559, 97, 97, 97, 97, 565, 97, 97, 97, 97, 97, 97, 97, 1718, 0, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 906, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 597, 97, 97, 97, 97, 97, 1520, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 1656, 45, 45, 45, 97, 97, 601, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 614, 616, 638, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 661, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1815, 45, 67, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 678, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 977, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 697, 67, 67, 748, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1274, 67, 67, 67, 67, 67, 67, 67, 67, 765, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 780, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1777, 67, 97, 97, 97, 97, 97, 97, 846, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 97, 1742, 45, 45, 45, 45, 45, 45, 45, 1747, 97, 97, 97, 863, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 1178, 925, 0, 1179, 0, 97, 97, 97, 878, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 954, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 963, 45, 45, 966, 45, 45, 157, 45, 45, 171, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 1022, 67, 67, 1026, 67, 67, 67, 1030, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 1605, 67, 67, 67, 1608, 67, 67, 67, 1039, 67, 67, 1042, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 67, 0, 1100, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 97, 97, 97, 97, 1116, 97, 97, 1120, 97, 97, 97, 1124, 97, 97, 97, 97, 97, 97, 562, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1133, 97, 97, 1136, 97, 97, 97, 97, 97, 97, 97, 97, 915, 917, 97, 97, 97, 97, 97, 0, 97, 1170, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1993, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 1278, 67, 0, 0, 0, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1189, 1204, 45, 45, 45, 1207, 45, 45, 1209, 45, 1210, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 45, 689, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 805, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1249, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1300, 0, 0, 0, 0, 0, 1267, 67, 67, 1269, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 97, 1349, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 97, 0, 1980, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 677, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 953, 67, 1437, 67, 1440, 67, 67, 67, 67, 1445, 67, 67, 67, 1448, 67, 67, 67, 67, 67, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 67, 67, 67, 1473, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 834, 97, 97, 97, 97, 1490, 97, 1493, 97, 97, 97, 97, 1498, 97, 97, 97, 1501, 97, 97, 97, 0, 97, 1638, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 916, 97, 97, 97, 97, 97, 97, 0, 1528, 97, 97, 97, 0, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1932, 0, 0, 1555, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1567, 45, 45, 158, 45, 45, 172, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 67, 212, 67, 67, 67, 67, 231, 235, 241, 245, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 472, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1651, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 45, 67, 1704, 67, 1706, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1841, 97, 0, 1844, 97, 97, 97, 97, 1716, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1385, 1748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1757, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 97, 97, 1780, 97, 97, 97, 0, 0, 1786, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1730, 0, 97, 97, 97, 97, 97, 1736, 97, 1738, 67, 97, 97, 97, 97, 97, 97, 0, 1838, 97, 97, 97, 97, 97, 0, 0, 97, 1729, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 1165, 97, 97, 97, 45, 1950, 45, 45, 45, 45, 45, 45, 45, 45, 1958, 67, 67, 67, 1962, 67, 67, 67, 67, 67, 1246, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1710, 97, 97, 97, 1999, 67, 97, 97, 97, 97, 0, 2003, 97, 97, 97, 0, 97, 97, 2008, 2009, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 2052, 67, 2053, 0, 0, 0, 0, 925, 41606, 0, 0, 930, 0, 45, 45, 45, 45, 45, 45, 1392, 45, 1394, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 1565, 45, 45, 45, 1568, 0, 97, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 28672, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 679, 45, 45, 67, 67, 266, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 346, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 362, 0, 364, 0, 367, 41098, 369, 140, 371, 45, 45, 45, 379, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 449, 45, 45, 45, 45, 45, 67, 67, 542, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 97, 0, 1794, 1795, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 97, 639, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 45, 731, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 251, 67, 67, 67, 67, 67, 798, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1073, 67, 67, 67, 860, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 873, 0, 0, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 921, 97, 0, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1250, 67, 67, 1253, 0, 0, 1312, 0, 0, 0, 1318, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 97, 1155, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1141, 97, 97, 67, 67, 1439, 67, 1441, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 97, 97, 1492, 97, 1494, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 97, 67, 67, 67, 2037, 67, 97, 0, 0, 97, 97, 97, 2043, 97, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 232, 67, 67, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1975, 0, 0, 97, 874, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1142, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 65, 86, 117, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 63, 84, 115, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 61, 82, 113, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 59, 80, 111, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 57, 78, 109, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 55, 76, 107, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 53, 74, 105, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 51, 72, 103, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 49, 70, 101, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 47, 68, 99, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 45, 67, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 213085, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 0, 0, 44, 0, 0, 32863, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 41, 41, 41, 0, 0, 1138688, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 89, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 127, 127, 127, 127, 102432, 67, 262, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 342, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 360, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 45, 45, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1292, 67, 67, 1294, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1615, 97, 97, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 66, 87, 118, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 64, 85, 116, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 62, 83, 114, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 60, 81, 112, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 58, 79, 110, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 56, 77, 108, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 54, 75, 106, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 52, 73, 104, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 50, 71, 102, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 48, 69, 100, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 46, 67, 98, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 233472, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 69724, 53264, 18, 18, 49172, 0, 57366, 262144, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 45, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 28, 139621, 359, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1389, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 45, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1449, 67, 67, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1154, 97, 0, 0, 0, 0, 925, 41606, 927, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 67, 67, 45, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 951, 45, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 45, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1488, 67, 67, 267, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 347, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 361, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 734, 45, 45, 45, 67, 67, 67, 67, 67, 742, 67, 67, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1214, 45, 45, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1361, 97, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 45, 45, 0, 0, 0, 0, 2220032, 0, 0, 1130496, 0, 0, 0, 0, 2170880, 2171020, 2170880, 2170880, 18, 0, 0, 131072, 0, 0, 0, 90112, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1485, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1390, 45, 1393, 45, 45, 45, 45, 1398, 45, 45, 45, 2170880, 2171167, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2721252, 2744320, 2170880, 2170880, 2170880, 2834432, 2840040, 2170880, 2908160, 2170880, 2170880, 2936832, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3014656, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 0, 2220032, 0, 0, 0, 1142784, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3215360, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 543, 0, 545, 0, 0, 2183168, 0, 0, 831, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 2170880, 2170880, 3092480, 2170880, 2170880, 3125248, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 0, 0, 0, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 0, 0, 0, 65820, 65820, 0, 287, 97, 97, 97, 97, 97, 1783, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1791, 0, 0, 546, 70179, 0, 0, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 97, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 0, 0, 147456, 0, 0, 0, 0, 925, 41606, 0, 928, 0, 0, 45, 45, 45, 45, 45, 45, 998, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 1564, 45, 45, 45, 45, 0, 2158592, 2158592, 0, 0, 0, 0, 2232320, 2232320, 2232320, 0, 2240512, 2240512, 2240512, 2240512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640\n];\n\nJSONiqTokenizer.EXPECTED =\n[ 291, 300, 304, 341, 315, 309, 305, 295, 319, 323, 327, 329, 296, 333, 337, 339, 342, 346, 350, 294, 356, 360, 312, 367, 352, 371, 363, 375, 379, 383, 387, 391, 395, 726, 399, 405, 518, 684, 405, 405, 405, 405, 808, 405, 405, 405, 512, 405, 405, 405, 431, 405, 405, 406, 405, 405, 404, 405, 405, 405, 405, 405, 405, 405, 908, 631, 410, 415, 405, 414, 419, 608, 405, 429, 602, 405, 435, 443, 405, 441, 641, 478, 405, 447, 451, 450, 456, 643, 461, 460, 762, 679, 465, 469, 741, 473, 477, 482, 486, 492, 932, 931, 523, 498, 504, 720, 405, 510, 596, 405, 516, 941, 580, 522, 929, 527, 590, 589, 897, 939, 534, 538, 547, 551, 555, 559, 563, 567, 571, 969, 575, 708, 690, 689, 579, 584, 634, 405, 594, 731, 405, 600, 882, 405, 606, 895, 786, 452, 612, 405, 615, 620, 876, 624, 628, 638, 647, 651, 655, 659, 663, 667, 676, 683, 688, 695, 694, 791, 405, 699, 437, 405, 706, 714, 405, 712, 825, 870, 405, 718, 724, 769, 768, 823, 730, 735, 745, 751, 422, 755, 759, 425, 766, 902, 810, 587, 775, 888, 887, 405, 773, 992, 405, 779, 962, 405, 785, 781, 986, 790, 795, 797, 506, 500, 499, 801, 805, 814, 820, 829, 833, 837, 841, 845, 849, 853, 857, 861, 616, 865, 869, 868, 488, 405, 874, 816, 405, 880, 738, 405, 886, 892, 543, 405, 901, 906, 913, 912, 918, 494, 541, 922, 926, 936, 945, 949, 953, 957, 530, 966, 973, 960, 702, 701, 405, 979, 981, 405, 985, 747, 405, 990, 998, 914, 405, 996, 1004, 672, 975, 974, 1014, 1002, 1008, 670, 1012, 405, 405, 405, 405, 405, 401, 1018, 1022, 1026, 1106, 1071, 1111, 1111, 1111, 1082, 1145, 1030, 1101, 1034, 1038, 1106, 1106, 1106, 1106, 1046, 1206, 1052, 1106, 1072, 1111, 1111, 1042, 1134, 1065, 1111, 1112, 1056, 1160, 1207, 1062, 1204, 1208, 1069, 1106, 1106, 1106, 1076, 1111, 1207, 1161, 1122, 1205, 1064, 1094, 1106, 1106, 1107, 1111, 1111, 1111, 1078, 1086, 1207, 1092, 1098, 1046, 1058, 1106, 1106, 1110, 1111, 1111, 1116, 1120, 1161, 1126, 1202, 1104, 1106, 1145, 1146, 1129, 1138, 1088, 1151, 1048, 1157, 1153, 1132, 1141, 1165, 1107, 1111, 1172, 1179, 1109, 1183, 1175, 1143, 1147, 1187, 1108, 1191, 1195, 1144, 1199, 1168, 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1557, 1247, 1241, 1241, 1038, 1434, 1241, 1241, 1241, 1241, 1254, 1275, 1617, 1241, 1280, 1287, 1241, 1241, 1241, 1287, 1241, 2114, 1291, 1241, 1243, 1241, 2049, 1824, 2094, 2095, 1520, 1309, 1241, 1241, 1302, 1241, 1321, 1311, 1241, 1241, 1313, 1778, 1325, 1336, 1241, 1241, 1325, 1330, 1353, 1241, 1241, 1695, 1354, 1241, 1241, 1241, 1294, 1686, 1331, 1241, 1696, 1368, 1241, 1338, 1370, 1241, 1392, 1399, 1364, 2017, 1406, 2016, 1405, 1716, 1406, 1407, 1422, 1417, 1421, 1241, 1241, 1241, 1349, 1426, 1241, 1774, 1756, 1241, 1773, 1241, 1241, 1345, 1964, 1812, 1432, 1241, 1241, 1345, 1993, 1459, 1241, 1241, 1241, 1395, 1848, 1767, 1465, 1241, 1241, 1394, 1847, 1242, 1477, 1241, 1241, 1428, 1241, 1445, 1492, 1241, 1241, 1438, 1241, 1499, 1241, 1241, 1241, 1455, 1241, 1818, 1448, 1241, 1250, 1241, 2026, 1623, 1449, 1241, 1612, 1616, 1241, 1614, 1241, 1257, 1241, 1241, 1985, 1292, 1586, 1512, 1241, 1517, 2050, 1526, 1674, 1519, 1524, 1647, 2051, 1532, 1537, 1551, 1544, 1550, 1555, 1561, 1571, 1578, 1584, 1590, 1591, 1653, 1595, 1602, 1606, 1610, 1634, 1628, 1640, 1633, 1645, 1241, 1241, 1241, 1469, 1241, 1970, 1651, 1241, 1270, 1241, 1241, 1819, 1449, 1241, 1293, 1664, 1241, 1241, 1481, 1485, 1574, 1672, 1241, 1241, 1513, 1317, 1487, 1684, 1241, 1241, 1533, 1299, 1694, 1241, 1241, 1295, 1241, 1241, 1241, 1546, 1700, 1241, 1241, 1707, 1241, 1713, 1241, 1849, 1715, 1241, 1720, 1241, 1276, 1267, 1241, 1241, 2107, 1657, 1864, 1241, 1881, 1241, 1326, 1292, 1241, 1685, 1358, 1724, 1338, 1241, 1363, 1362, 1342, 1340, 1361, 1339, 1833, 1372, 1360, 1833, 1833, 1342, 1343, 1835, 1341, 1731, 1738, 1344, 1241, 1745, 1241, 1379, 1241, 1241, 2092, 1241, 1388, 1761, 1754, 1241, 1386, 1241, 1400, 1760, 1241, 1241, 1241, 1598, 1734, 1241, 1241, 1241, 1635, 1645, 1241, 1780, 1766, 1241, 1241, 1332, 1771, 1241, 1241, 1629, 2079, 1241, 1242, 1784, 1241, 1241, 1680, 1639, 2063, 1790, 1241, 1241, 1741, 1241, 1241, 1800, 1241, 1241, 1762, 1473, 1241, 1806, 1241, 1241, 1786, 1240, 1709, 1241, 1241, 1241, 1668, 1811, 1241, 1940, 1241, 1401, 1974, 1241, 1408, 1413, 1382, 1241, 1816, 1241, 1241, 1802, 2086, 1811, 1241, 1817, 1945, 1823, 2095, 2095, 2047, 2094, 2046, 2080, 1241, 1409, 1312, 1376, 2096, 2048, 1241, 1241, 1807, 1241, 1241, 1241, 2035, 1241, 1241, 1828, 1241, 2057, 2061, 1241, 1241, 1843, 1241, 2059, 1241, 1241, 1241, 1690, 1847, 1241, 1241, 1241, 1703, 2102, 1848, 1241, 1241, 1853, 1292, 1848, 1241, 2016, 1857, 1241, 2002, 1868, 1241, 1436, 1241, 1241, 1271, 1305, 1241, 1874, 1241, 1241, 1884, 2037, 1892, 1241, 1890, 1241, 1461, 1241, 1241, 1795, 1241, 1241, 1891, 1241, 1878, 1241, 1888, 1241, 1888, 1905, 1896, 2087, 1912, 1903, 1241, 1911, 1906, 1916, 1905, 2027, 1863, 1925, 2088, 1859, 1861, 1922, 1927, 1931, 1935, 1494, 1241, 1241, 1918, 1907, 1939, 1917, 1944, 1949, 1241, 1241, 1451, 1955, 1241, 1241, 1241, 1796, 1727, 2061, 1241, 1241, 1899, 1241, 1660, 1968, 1241, 1241, 1951, 1678, 1978, 1241, 1241, 1241, 1839, 1241, 1241, 1984, 1982, 1241, 1488, 1241, 1241, 1624, 1450, 1989, 1241, 1241, 1241, 1870, 1995, 1292, 1241, 1241, 1958, 1261, 1241, 1996, 1241, 1241, 1241, 2039, 2008, 1241, 1241, 1750, 2000, 1241, 1256, 2001, 1960, 1241, 1564, 1241, 1504, 1241, 1241, 1442, 1241, 1241, 1564, 1528, 1263, 1241, 1508, 1241, 1241, 1468, 1498, 2006, 1540, 2015, 1539, 2014, 1748, 2013, 1539, 1831, 2014, 2012, 1500, 1567, 2022, 2021, 1241, 1580, 1241, 1241, 2033, 2037, 1791, 2045, 2031, 1241, 1621, 1241, 1641, 2044, 1241, 1241, 1241, 2093, 1241, 1241, 2055, 1241, 1241, 2067, 1241, 1283, 1241, 1241, 1241, 2101, 2071, 1241, 1241, 1241, 2073, 1848, 2040, 1241, 1241, 1241, 2077, 1241, 1241, 2106, 1241, 1241, 2084, 1241, 2111, 1241, 1241, 1381, 1380, 1241, 1241, 1241, 2100, 1241, 2129, 2118, 2122, 2126, 2197, 2133, 3010, 2825, 2145, 2698, 2156, 2226, 2160, 2161, 2165, 2174, 2293, 2194, 2630, 2201, 2203, 2152, 3019, 2226, 2263, 2209, 2213, 2218, 2269, 2292, 2269, 2269, 2184, 2226, 2238, 2148, 2151, 3017, 2245, 2214, 2269, 2269, 2185, 2226, 2292, 2269, 2291, 2269, 2269, 2269, 2292, 2205, 3019, 2226, 2226, 2160, 2160, 2160, 2261, 2160, 2160, 2160, 2262, 2276, 2160, 2160, 2277, 2216, 2283, 2216, 2269, 2269, 2268, 2269, 2267, 2269, 2269, 2269, 2271, 2568, 2292, 2269, 2293, 2269, 2182, 2190, 2269, 2186, 2226, 2226, 2226, 2226, 2227, 2160, 2160, 2160, 2160, 2263, 2160, 2275, 2277, 2282, 2215, 2217, 2269, 2269, 2291, 2269, 2269, 2293, 2291, 2269, 2220, 2269, 2295, 2294, 2269, 2269, 2305, 2233, 2262, 2278, 2218, 2269, 2234, 2226, 2226, 2228, 2160, 2160, 2160, 2289, 2220, 2294, 2294, 2269, 2269, 2304, 2269, 2160, 2160, 2287, 2269, 2269, 2305, 2269, 2269, 2312, 2269, 2269, 2225, 2226, 2160, 2287, 2289, 2219, 2304, 2295, 2314, 2234, 2226, 2314, 2269, 2226, 2226, 2160, 2288, 2219, 2222, 2304, 2296, 2269, 2224, 2160, 2160, 2269, 2302, 2294, 2314, 2224, 2226, 2288, 2220, 2294, 2269, 2290, 2269, 2269, 2293, 2269, 2269, 2269, 2269, 2270, 2221, 2313, 2225, 2227, 2160, 2300, 2269, 2225, 2261, 2309, 2234, 2229, 2223, 2318, 2318, 2318, 2328, 2336, 2340, 2344, 2350, 2637, 2712, 2358, 2362, 2372, 2135, 2378, 2398, 2135, 2135, 2135, 2135, 2136, 2417, 2241, 2135, 2378, 2135, 2135, 2980, 2984, 2135, 3006, 2135, 2135, 2135, 2945, 2931, 2425, 2400, 2135, 2135, 2135, 2954, 2135, 2481, 2433, 2135, 2135, 2988, 2824, 2135, 2135, 2482, 2434, 2135, 2135, 2440, 2445, 2452, 2135, 2135, 2998, 3002, 2961, 2441, 2446, 2453, 2463, 2974, 2135, 2135, 2135, 2140, 2642, 2709, 2459, 2470, 2465, 2135, 2135, 3005, 2135, 2135, 2987, 2823, 2458, 2469, 2464, 2975, 2135, 2135, 2135, 2353, 2488, 2447, 2324, 2974, 2135, 2409, 2459, 2448, 2135, 2961, 2487, 2446, 2476, 2323, 2973, 2135, 2135, 2135, 2354, 2476, 2974, 2135, 2135, 2135, 2957, 2135, 2135, 2960, 2135, 2135, 2135, 2363, 2409, 2459, 2474, 2465, 2487, 2571, 2973, 2135, 2135, 2168, 2973, 2135, 2135, 2135, 2959, 2135, 2135, 2135, 2506, 2135, 2957, 2488, 2170, 2135, 2135, 2135, 2960, 2135, 2818, 2493, 2135, 2135, 3033, 2135, 2135, 2135, 2934, 2819, 2494, 2135, 2135, 2135, 2976, 2780, 2499, 2135, 2135, 2135, 3000, 2968, 2135, 2935, 2135, 2135, 2135, 2364, 2507, 2135, 2135, 2934, 2135, 2135, 2780, 2492, 2507, 2135, 2135, 2506, 2780, 2135, 2135, 2782, 2780, 2135, 2782, 2135, 2783, 2374, 2514, 2135, 2135, 2135, 3007, 2530, 2974, 2135, 2135, 2135, 3008, 2135, 2135, 2134, 2135, 2526, 2531, 2975, 2135, 2135, 3042, 2581, 2575, 2956, 2135, 2135, 2135, 2394, 2135, 2508, 2535, 2840, 2844, 2495, 2135, 2135, 2136, 2684, 2537, 2842, 2846, 2135, 2136, 2561, 2581, 2551, 2536, 2841, 2845, 2975, 3043, 2582, 2843, 2555, 2135, 3040, 3044, 2538, 2844, 2975, 2135, 2135, 2253, 2644, 2672, 2542, 2554, 2135, 2135, 2346, 2873, 2551, 2555, 2135, 2135, 2135, 2381, 2559, 2565, 2538, 2553, 2135, 2560, 2914, 2576, 2590, 2135, 2135, 2135, 2408, 2136, 2596, 2624, 2135, 2135, 2135, 2409, 2135, 2618, 2597, 3008, 2135, 2135, 2380, 2956, 2601, 2135, 2135, 2135, 2410, 2620, 2624, 2135, 2136, 2383, 2135, 2135, 2783, 2623, 2135, 2135, 2393, 2888, 2136, 2621, 3008, 2135, 2618, 2618, 2622, 2135, 2135, 2405, 2414, 2619, 2384, 2624, 2135, 2136, 2950, 2135, 2138, 2135, 2139, 2135, 2604, 2623, 2135, 2140, 2878, 2665, 2957, 2622, 2135, 2135, 2428, 2762, 2606, 2612, 2135, 2135, 2501, 2586, 2604, 3038, 2135, 2604, 3036, 2387, 2958, 2386, 2135, 2141, 2135, 2421, 2387, 2385, 2135, 2385, 2384, 2384, 2135, 2386, 2628, 2384, 2135, 2135, 2501, 2596, 2591, 2135, 2135, 2135, 2400, 2135, 2634, 2135, 2135, 2559, 2580, 2575, 2648, 2135, 2135, 2135, 2429, 2649, 2135, 2135, 2135, 2435, 2654, 2658, 2135, 2135, 2135, 2436, 2649, 2178, 2659, 2135, 2135, 2595, 2601, 2669, 2677, 2135, 2135, 2616, 2957, 2879, 2665, 2691, 2135, 2363, 2367, 2900, 2878, 2664, 2690, 2975, 2877, 2643, 2670, 2974, 2671, 2975, 2135, 2135, 2619, 2608, 2669, 2673, 2135, 2135, 2653, 2177, 2672, 2135, 2135, 2135, 2486, 2168, 2251, 2255, 2695, 2974, 2709, 2135, 2135, 2135, 2487, 2169, 2399, 2716, 2975, 2135, 2363, 2770, 2776, 2640, 2717, 2135, 2135, 2729, 2135, 2135, 2641, 2718, 2135, 2135, 2135, 2505, 2135, 2640, 2257, 2974, 2135, 2727, 2975, 2135, 2365, 2332, 2895, 2957, 2135, 2959, 2135, 2365, 2749, 2754, 2959, 2958, 2958, 2135, 2380, 2793, 2799, 2135, 2735, 2738, 2135, 2381, 2135, 2135, 2940, 2974, 2135, 2744, 2135, 2135, 2739, 2519, 2976, 2745, 2135, 2135, 2135, 2509, 2755, 2135, 2135, 2135, 2510, 2772, 2778, 2135, 2135, 2740, 2520, 2135, 2771, 2777, 2135, 2135, 2759, 2750, 2792, 2798, 2135, 2135, 2781, 2392, 2779, 2135, 2135, 2135, 2521, 2135, 2679, 2248, 2135, 2135, 2681, 2480, 2135, 2135, 2786, 3000, 2135, 2679, 2683, 2135, 2135, 2416, 2135, 2135, 2135, 2525, 2135, 2730, 2135, 2135, 2135, 2560, 2581, 2135, 2805, 2135, 2135, 2804, 2962, 2832, 2974, 2135, 2382, 2135, 2135, 2958, 2135, 2135, 2960, 2135, 2829, 2833, 2975, 2961, 2965, 2969, 2973, 2968, 2972, 2135, 2135, 2135, 2641, 2135, 2515, 2966, 2970, 2851, 2478, 2135, 2135, 2808, 2135, 2809, 2135, 2135, 2135, 2722, 2852, 2479, 2135, 2135, 2815, 2135, 2135, 2766, 2853, 2480, 2135, 2857, 2479, 2135, 2388, 2723, 2135, 2364, 2331, 2894, 2858, 2480, 2135, 2135, 2850, 2478, 2135, 2135, 2135, 2806, 2864, 2135, 2399, 2256, 2974, 2865, 2135, 2135, 2862, 2135, 2135, 2135, 2685, 2807, 2865, 2135, 2135, 2807, 2863, 2135, 2135, 2135, 2686, 2884, 2807, 2135, 2809, 2807, 2135, 2135, 2807, 2806, 2705, 2810, 2808, 2700, 2869, 2702, 2702, 2702, 2704, 2883, 2135, 2135, 2135, 2730, 2884, 2135, 2135, 2135, 2731, 2321, 2546, 2135, 2135, 2876, 2255, 2889, 2322, 2547, 2135, 2401, 2135, 2135, 2135, 2949, 2367, 2893, 2544, 2973, 2906, 2973, 2135, 2135, 2877, 2663, 2368, 2901, 2907, 2974, 2366, 2899, 2905, 2972, 2920, 2974, 2135, 2135, 2911, 2900, 2920, 2363, 2913, 2918, 2465, 2941, 2975, 2135, 2135, 2924, 2928, 2974, 2945, 2931, 2135, 2135, 2135, 2765, 2136, 2955, 2135, 2135, 2939, 2931, 2380, 2135, 2135, 2380, 2135, 2135, 2135, 2780, 2507, 2137, 2135, 2137, 2135, 2139, 2135, 2806, 2810, 2135, 2135, 2135, 2992, 2135, 2135, 2962, 2966, 2970, 2974, 2135, 2135, 2787, 3014, 2135, 2521, 2993, 2135, 2135, 2135, 2803, 2135, 2135, 2135, 2618, 2607, 2997, 3001, 2135, 2135, 2963, 2967, 2971, 2975, 2135, 2135, 2791, 2797, 2135, 3009, 2999, 3003, 2787, 3001, 2135, 2135, 2964, 2968, 2785, 2999, 3003, 2135, 2135, 2135, 2804, 2785, 2999, 3004, 2135, 2135, 2135, 2807, 2135, 2135, 3023, 2135, 2135, 2135, 2811, 2135, 2135, 3027, 2135, 2135, 2135, 2837, 2968, 3028, 2135, 2135, 2135, 2875, 2135, 2784, 3029, 2135, 2408, 2457, 2446, 0, 14, 0, -2120220672, 1610612736, -2074083328, -2002780160, -2111830528, 1073872896, 1342177280, 1075807216, 4096, 16384, 2048, 8192, 0, 8192, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, -2145386496, 8388608, 1073741824, 0, 0x80000000, 0x80000000, 2097152, 2097152, 2097152, 536870912, 0, 0, 134217728, 33554432, 1536, 268435456, 268435456, 268435456, 268435456, 128, 256, 32, 0, 65536, 131072, 524288, 16777216, 268435456, 0x80000000, 1572864, 1835008, 640, 32768, 65536, 262144, 1048576, 2097152, 196608, 196800, 196608, 196608, 0, 131072, 131072, 131072, 196608, 196624, 196608, 196624, 196608, 196608, 128, 4096, 16384, 16384, 2048, 0, 4, 0, 0, 0x80000000, 2097152, 0, 1024, 32, 32, 0, 65536, 1572864, 1048576, 32768, 32768, 32768, 32768, 196608, 196608, 196608, 64, 64, 196608, 196608, 131072, 131072, 131072, 131072, 268435456, 268435456, 64, 196736, 196608, 196608, 196608, 131072, 196608, 196608, 16384, 4, 4, 4, 2, 32, 32, 65536, 1048576, 12582912, 1073741824, 0, 0, 2, 8, 16, 96, 2048, 32768, 0, 0, 131072, 268435456, 268435456, 268435456, 256, 256, 196608, 196672, 196608, 196608, 196608, 196608, 4, 0, 256, 256, 256, 256, 32, 32, 32768, 32, 32, 32, 32, 32768, 268435456, 268435456, 268435456, 196608, 196608, 196608, 196624, 196608, 196608, 196608, 16, 16, 16, 268435456, 196608, 64, 64, 64, 196608, 196608, 196608, 196672, 268435456, 64, 64, 196608, 196608, 16, 196608, 196608, 196608, 268435456, 64, 196608, 131072, 262144, 4194304, 25165824, 33554432, 134217728, 268435456, 268435456, 196608, 262152, 8, 256, 512, 3072, 16384, 200, -1073741816, 8392713, 40, 8392718, 520, 807404072, 40, 520, 100663304, 0, 0, -540651761, -540651761, 257589048, 0, 262144, 0, 0, 3, 8, 256, 0, 4, 6, 4100, 8388612, 0, 0, 0, 3, 4, 8, 256, 512, 1024, 0, 2097152, 0, 0, -537854471, -537854471, 0, 100663296, 0, 0, 1, 2, 0, 0, 0, 16384, 0, 0, 0, 96, 14336, 0, 0, 0, 7, 8, 234881024, 0, 0, 0, 8, 0, 0, 0, 0, 262144, 0, 0, 16, 64, 384, 512, 0, 1, 1, 0, 12582912, 0, 0, 0, 0, 33554432, 67108864, -606084144, -606084144, -606084138, 0, 0, 28, 32, 768, 1966080, -608174080, 0, 0, 0, 14, 35056, 16, 64, 896, 24576, 98304, 98304, 131072, 262144, 524288, 1048576, 4194304, 25165824, 1048576, 62914560, 134217728, -805306368, 0, 384, 512, 16384, 65536, 131072, 262144, 29360128, 33554432, 134217728, 268435456, 1073741824, 0x80000000, 262144, 524288, 1048576, 29360128, 33554432, 524288, 1048576, 16777216, 33554432, 134217728, 268435456, 1073741824, 0, 0, 0, 123856, 1966080, 0, 64, 384, 16384, 65536, 131072, 16384, 65536, 524288, 268435456, 0x80000000, 0, 0, 524288, 0x80000000, 0, 0, 1, 16, 0, 256, 524288, 0, 0, 0, 25, 96, 128, -537854471, 0, 0, 0, 32, 7404800, -545259520, 0, 0, 0, 60, 0, 249, 64768, 1048576, 6291456, 6291456, 25165824, 100663296, 402653184, 1073741824, 96, 128, 1280, 2048, 4096, 57344, 6291456, 57344, 6291456, 8388608, 16777216, 33554432, 201326592, 1342177280, 0x80000000, 0, 57344, 6291456, 8388608, 100663296, 134217728, 0x80000000, 0, 0, 0, 1, 8, 16, 64, 128, 64, 128, 256, 1024, 131072, 131072, 131072, 262144, 524288, 16777216, 57344, 6291456, 8388608, 67108864, 134217728, 64, 256, 1024, 2048, 4096, 57344, 64, 256, 0, 24576, 32768, 6291456, 67108864, 134217728, 0, 1, 64, 256, 24576, 32768, 4194304, 32768, 4194304, 67108864, 0, 0, 64, 256, 0, 0, 24576, 32768, 0, 16384, 4194304, 67108864, 64, 16384, 0, 0, 1, 64, 256, 16384, 4194304, 67108864, 0, 0, 0, 16384, 0, 16384, 16384, 0, -470447874, -470447874, -470447874, 0, 0, 128, 0, 0, 8, 96, 2048, 32768, 262144, 8388608, 35056, 1376256, -471859200, 0, 0, 14, 16, 224, 2048, 32768, 2097152, 4194304, 8388608, -486539264, 0, 96, 128, 2048, 32768, 262144, 2097152, 262144, 2097152, 8388608, 33554432, 536870912, 1073741824, 0x80000000, 0, 1610612736, 0x80000000, 0, 0, 1, 524288, 1048576, 12582912, 0, 0, 0, 151311, 264503296, 2097152, 8388608, 33554432, 1610612736, 0x80000000, 262144, 8388608, 33554432, 536870912, 67108864, 4194304, 0, 4194304, 0, 4194304, 4194304, 0, 0, 524288, 8388608, 536870912, 1073741824, 0x80000000, 1, 4097, 8388609, 96, 2048, 32768, 1073741824, 0x80000000, 0, 96, 2048, 0x80000000, 0, 0, 96, 2048, 0, 0, 1, 12582912, 0, 0, 0, 0, 1641895695, 1641895695, 0, 0, 0, 249, 7404800, 15, 87808, 1835008, 1639972864, 0, 768, 5120, 16384, 65536, 1835008, 1835008, 12582912, 16777216, 1610612736, 0, 3, 4, 8, 768, 4096, 65536, 0, 0, 256, 512, 786432, 8, 256, 512, 4096, 16384, 1835008, 16384, 1835008, 12582912, 1610612736, 0, 0, 0, 256, 0, 0, 0, 4, 8, 16, 32, 1, 2, 8, 256, 16384, 524288, 16384, 524288, 1048576, 12582912, 1610612736, 0, 0, 0, 8388608, 0, 0, 0, 524288, 4194304, 0, 0, 0, 8388608, -548662288, -548662288, -548662288, 0, 0, 256, 16384, 65536, 520093696, -1073741824, 0, 0, 0, 16777216, 0, 16, 32, 960, 4096, 4980736, 520093696, 1073741824, 0, 32, 896, 4096, 57344, 1048576, 6291456, 8388608, 16777216, 100663296, 134217728, 268435456, 0x80000000, 0, 512, 786432, 4194304, 33554432, 134217728, 268435456, 0, 786432, 4194304, 134217728, 268435456, 0, 524288, 4194304, 268435456, 0, 0, 0, 0, 0, 4194304, 4194304, -540651761, 0, 0, 0, 2, 4, 8, 16, 96, 128, 264503296, -805306368, 0, 0, 0, 8, 256, 512, 19456, 131072, 3072, 16384, 131072, 262144, 8388608, 16777216, 512, 1024, 2048, 16384, 131072, 262144, 131072, 262144, 8388608, 33554432, 201326592, 268435456, 0, 3, 4, 256, 1024, 2048, 57344, 16384, 131072, 8388608, 33554432, 134217728, 268435456, 0, 3, 256, 1024, 16384, 131072, 33554432, 134217728, 1073741824, 0x80000000, 0, 0, 256, 524288, 0x80000000, 0, 3, 256, 33554432, 134217728, 1073741824, 0, 1, 2, 33554432, 1, 2, 134217728, 1073741824, 0, 1, 2, 134217728, 0, 0, 0, 64, 0, 0, 0, 16, 32, 896, 4096, 786432, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 0, 0, 0, 15, 0, 4980736, 4980736, 4980736, 70460, 70460, 3478332, 0, 0, 1008, 4984832, 520093696, 60, 4864, 65536, 0, 0, 0, 12, 16, 32, 256, 512, 4096, 65536, 0, 0, 0, 67108864, 0, 0, 0, 12, 0, 256, 512, 65536, 0, 0, 1024, 512, 131072, 131072, 4, 16, 32, 65536, 0, 4, 16, 32, 0, 0, 0, 4, 16, 0, 0, 16384, 67108864, 0, 0, 1, 24, 96, 128, 256, 1024\n];\n\nJSONiqTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"JSONChar\",\n  \"JSONCharRef\",\n  \"JSONPredefinedCharRef\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$$'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var XQueryTokenizer = exports.XQueryTokenizer = function XQueryTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 56:                        // '<?'\n      shift(56);                    // '<?'\n      break;\n    case 40:                        // '(#'\n      shift(40);                    // '(#'\n      break;\n    case 42:                        // '(:~'\n      shift(42);                    // '(:~'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    case 274:                       // '}'\n      shift(274);                   // '}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 39:                        // '('\n      shift(39);                    // '('\n      break;\n    case 43:                        // ')'\n      shift(43);                    // ')'\n      break;\n    case 49:                        // '/'\n      shift(49);                    // '/'\n      break;\n    case 62:                        // '['\n      shift(62);                    // '['\n      break;\n    case 63:                        // ']'\n      shift(63);                    // ']'\n      break;\n    case 46:                        // ','\n      shift(46);                    // ','\n      break;\n    case 48:                        // '.'\n      shift(48);                    // '.'\n      break;\n    case 53:                        // ';'\n      shift(53);                    // ';'\n      break;\n    case 51:                        // ':'\n      shift(51);                    // ':'\n      break;\n    case 34:                        // '!'\n      shift(34);                    // '!'\n      break;\n    case 273:                       // '|'\n      shift(273);                   // '|'\n      break;\n    case 2:                         // Annotation\n      shift(2);                     // Annotation\n      break;\n    case 1:                         // ModuleDecl\n      shift(1);                     // ModuleDecl\n      break;\n    case 3:                         // OptionDecl\n      shift(3);                     // OptionDecl\n      break;\n    case 12:                        // AttrTest\n      shift(12);                    // AttrTest\n      break;\n    case 13:                        // Wildcard\n      shift(13);                    // Wildcard\n      break;\n    case 15:                        // IntegerLiteral\n      shift(15);                    // IntegerLiteral\n      break;\n    case 16:                        // DecimalLiteral\n      shift(16);                    // DecimalLiteral\n      break;\n    case 17:                        // DoubleLiteral\n      shift(17);                    // DoubleLiteral\n      break;\n    case 5:                         // Variable\n      shift(5);                     // Variable\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 4:                         // Operator\n      shift(4);                     // Operator\n      break;\n    case 33:                        // EOF\n      shift(33);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 58:                        // '>'\n      shift(58);                    // '>'\n      break;\n    case 50:                        // '/>'\n      shift(50);                    // '/>'\n      break;\n    case 27:                        // QName\n      shift(27);                    // QName\n      break;\n    case 57:                        // '='\n      shift(57);                    // '='\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 23:                        // ElementContentChar\n      shift(23);                    // ElementContentChar\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 7:                         // EndTag\n      shift(7);                     // EndTag\n      break;\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 25:                        // AposAttrContentChar\n      shift(25);                    // AposAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 24:                        // QuotAttrContentChar\n      shift(24);                    // QuotAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 11:                        // CDataSectionContents\n      shift(11);                    // CDataSectionContents\n      break;\n    case 64:                        // ']]>'\n      shift(64);                    // ']]>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 9:                         // DirCommentContents\n      shift(9);                     // DirCommentContents\n      break;\n    case 47:                        // '-->'\n      shift(47);                    // '-->'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 10:                        // DirPIContents\n      shift(10);                    // DirPIContents\n      break;\n    case 59:                        // '?'\n      shift(59);                    // '?'\n      break;\n    case 60:                        // '?>'\n      shift(60);                    // '?>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 8:                         // PragmaContents\n      shift(8);                     // PragmaContents\n      break;\n    case 36:                        // '#'\n      shift(36);                    // '#'\n      break;\n    case 37:                        // '#)'\n      shift(37);                    // '#)'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 30:                        // CommentContents\n      shift(30);                    // CommentContents\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(5);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 31:                        // DocTag\n      shift(31);                    // DocTag\n      break;\n    case 32:                        // DocCommentContents\n      shift(32);                    // DocCommentContents\n      break;\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(6);                  // PredefinedEntityRef | EscapeQuot | QuotChar | CharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 21:                        // QuotChar\n      shift(21);                    // QuotChar\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 22:                        // AposChar\n      shift(22);                    // AposChar\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 14:                        // EQName^Token\n      shift(14);                    // EQName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 26:                        // NCName^Token\n      shift(26);                    // NCName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 28)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryTokenizer.MAP1[(c0 & 15) + XQueryTokenizer.MAP1[(c1 & 31) + XQueryTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryTokenizer.TRANSITION[(i0 & 15) + XQueryTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 276; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2062 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryTokenizer.EXPECTED[(i0 & 3) + XQueryTokenizer.EXPECTED[(i1 & 3) + XQueryTokenizer.EXPECTED[(i2 & 3) + XQueryTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryTokenizer.MAP0 =\n[ 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35\n];\n\nXQueryTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n];\n\nXQueryTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 35, 31, 35, 31, 31, 35\n];\n\nXQueryTokenizer.INITIAL =\n[ 1, 2, 36867, 45060, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nXQueryTokenizer.TRANSITION =\n[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008, 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233, 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008, 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987, 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370, 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888, 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855, 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888, 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518, 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694, 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701, 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401, 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505, 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654, 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964, 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279, 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711, 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831, 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935, 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222, 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946, 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008, 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233, 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067, 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386, 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401, 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193, 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552, 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851, 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224, 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659, 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401, 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211, 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185, 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401, 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358, 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418, 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540, 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211, 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659, 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419, 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982, 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462, 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164, 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211, 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211, 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607, 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086, 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057, 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613, 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344, 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211, 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799, 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930, 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085, 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729, 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189, 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568, 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121, 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619, 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211, 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086, 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836, 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211, 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986, 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500, 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356, 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989, 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211, 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890, 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211, 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601, 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260, 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261, 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488, 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248, 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490, 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274, 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782, 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888, 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261, 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888, 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888, 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628, 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401, 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895, 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738, 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678, 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888, 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217, 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473, 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783, 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837, 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888, 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523, 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938, 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574, 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016, 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835, 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181, 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888, 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334, 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437, 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497, 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401, 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401, 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851, 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000, 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888, 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401, 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058, 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144, 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856, 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889, 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367, 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572, 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764, 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942, 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211, 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590, 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123, 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963, 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097, 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442, 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775, 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284, 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679, 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211, 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659, 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853, 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113, 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413, 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164, 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211, 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890, 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211, 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123, 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086, 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105, 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782, 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154, 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666, 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211, 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739, 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778, 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447, 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008, 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059, 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121, 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211, 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836, 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211, 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888, 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893, 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064, 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890, 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888, 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211, 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100, 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888, 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888, 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346, 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n];\n\nXQueryTokenizer.EXPECTED =\n[ 290, 300, 304, 353, 296, 309, 305, 319, 315, 324, 328, 352, 354, 334, 338, 330, 320, 345, 349, 293, 358, 362, 341, 366, 312, 370, 374, 378, 382, 386, 390, 394, 398, 737, 402, 634, 439, 604, 634, 634, 634, 634, 408, 634, 634, 634, 404, 634, 634, 634, 457, 634, 634, 963, 634, 634, 413, 634, 634, 634, 634, 634, 634, 634, 663, 418, 422, 903, 902, 426, 431, 548, 634, 437, 521, 919, 443, 615, 409, 449, 455, 624, 731, 751, 634, 461, 465, 672, 470, 469, 474, 481, 485, 477, 489, 493, 629, 542, 497, 505, 603, 602, 991, 648, 510, 804, 634, 515, 958, 526, 525, 530, 768, 634, 546, 552, 711, 710, 593, 558, 562, 618, 566, 570, 574, 578, 582, 586, 590, 608, 612, 660, 822, 821, 634, 622, 596, 444, 628, 533, 724, 633, 640, 653, 647, 652, 536, 1008, 451, 450, 445, 657, 670, 676, 685, 689, 693, 697, 701, 704, 707, 715, 719, 798, 815, 634, 723, 762, 996, 634, 728, 969, 730, 735, 908, 634, 741, 679, 889, 511, 747, 634, 750, 755, 499, 666, 499, 501, 759, 772, 776, 780, 634, 787, 784, 797, 802, 809, 808, 427, 814, 1006, 517, 634, 519, 853, 634, 813, 850, 793, 634, 819, 826, 833, 832, 837, 843, 847, 857, 861, 863, 867, 871, 875, 879, 883, 643, 887, 539, 980, 979, 634, 893, 944, 634, 900, 896, 634, 907, 933, 506, 912, 917, 828, 433, 636, 635, 554, 961, 923, 930, 927, 937, 941, 634, 634, 634, 974, 948, 952, 985, 913, 968, 967, 743, 634, 973, 839, 634, 978, 599, 634, 984, 989, 765, 444, 995, 1000, 634, 1003, 790, 955, 1012, 681, 634, 634, 634, 634, 634, 414, 1016, 1020, 1024, 1085, 1027, 1090, 1090, 1046, 1080, 1137, 1108, 1215, 1049, 1032, 1039, 1085, 1085, 1085, 1085, 1058, 1062, 1068, 1085, 1086, 1090, 1090, 1091, 1072, 1064, 1107, 1090, 1090, 1090, 1118, 1123, 1138, 1078, 1074, 1084, 1085, 1085, 1085, 1087, 1090, 1062, 1052, 1060, 1114, 1062, 1104, 1085, 1085, 1090, 1090, 1028, 1122, 1063, 1128, 1139, 1127, 1158, 1085, 1085, 1151, 1090, 1090, 1090, 1095, 1090, 1132, 1073, 1136, 1143, 1061, 1150, 1085, 1155, 1098, 1101, 1146, 1162, 1169, 1101, 1185, 1151, 1090, 1110, 1173, 1054, 1087, 1109, 1177, 1165, 1089, 1204, 1184, 1107, 1189, 1193, 1088, 1197, 1180, 1201, 1208, 1042, 1212, 1219, 1223, 1227, 1231, 1235, 1245, 1777, 1527, 1686, 1686, 1238, 1686, 1254, 1686, 1686, 1686, 1294, 1669, 1686, 1686, 1686, 1322, 1625, 1534, 1268, 1624, 1275, 1281, 1443, 1292, 1300, 1686, 1686, 1686, 1350, 1826, 1306, 1686, 1686, 1240, 2032, 1317, 1321, 1686, 1686, 1253, 1686, 1326, 1686, 1686, 1686, 1418, 1709, 1446, 1686, 1686, 1686, 1492, 1686, 1295, 1447, 1686, 1686, 1258, 1686, 1736, 1686, 1686, 1520, 1355, 1686, 1288, 1348, 1361, 1686, 1359, 1686, 1364, 1498, 1368, 1302, 1362, 1381, 1389, 1395, 1486, 1686, 1371, 1377, 1370, 1686, 1375, 1382, 1384, 1402, 1408, 1385, 1383, 1619, 1413, 1423, 1428, 1433, 1686, 1686, 1270, 1686, 1338, 1686, 1440, 1686, 1686, 1686, 1499, 1465, 1686, 1686, 1686, 1639, 1473, 1884, 1686, 1686, 1293, 1864, 1686, 1686, 1296, 1321, 1483, 1686, 1686, 1686, 1646, 1686, 1748, 1496, 1686, 1418, 1675, 1686, 1418, 1702, 1686, 1418, 1981, 1686, 1429, 1409, 1427, 1504, 1692, 1686, 1686, 1313, 1448, 1651, 1508, 1686, 1686, 1340, 1686, 1903, 1686, 1686, 1435, 1513, 1686, 1283, 1287, 1519, 1686, 1524, 1363, 1568, 1938, 1539, 1566, 1579, 1479, 1533, 1538, 1553, 1544, 1552, 1557, 1563, 1574, 1557, 1583, 1589, 1590, 1759, 1594, 1603, 1607, 1611, 1686, 1436, 1514, 1686, 1434, 1656, 1686, 1434, 1680, 1686, 1453, 1686, 1686, 1686, 1559, 1617, 1686, 1770, 1418, 1623, 1769, 1629, 1686, 1515, 1335, 1686, 1285, 1686, 1671, 1921, 1650, 1686, 1686, 1344, 1308, 1666, 1686, 1686, 1686, 1659, 1685, 1686, 1686, 1686, 1686, 1241, 1686, 1686, 1844, 1691, 1686, 1630, 1977, 1970, 1362, 1686, 1686, 1686, 1693, 1698, 1686, 1686, 1686, 1697, 1686, 1764, 1715, 1686, 1634, 1638, 1686, 1599, 1585, 1686, 1271, 1686, 1269, 1686, 1721, 1686, 1686, 1354, 1686, 1801, 1686, 1799, 1686, 1640, 1686, 1686, 1461, 1686, 1686, 1732, 1686, 1944, 1686, 1740, 1686, 1746, 1415, 1396, 1686, 1598, 1547, 1417, 1597, 1416, 1577, 1546, 1397, 1577, 1547, 1548, 1570, 1398, 1753, 1686, 1652, 1509, 1686, 1686, 1686, 1757, 1686, 1419, 1686, 1763, 1418, 1768, 1781, 1686, 1686, 1686, 1705, 1686, 2048, 1792, 1686, 1686, 1686, 1735, 1686, 1797, 1686, 1686, 1404, 1686, 1639, 1815, 1686, 1686, 1418, 2017, 1820, 1686, 1686, 1803, 1686, 1686, 1686, 1736, 1489, 1686, 1686, 1825, 1338, 1260, 1263, 1686, 1686, 1785, 1686, 1686, 1728, 1686, 1686, 1749, 1497, 1830, 1830, 1262, 1248, 1261, 1329, 1260, 1264, 1329, 1248, 1249, 1259, 1540, 1849, 1842, 1686, 1686, 1835, 1686, 1686, 1816, 1686, 1686, 1831, 1882, 1848, 1686, 1686, 1686, 1774, 2071, 1854, 1686, 1686, 1469, 1884, 1686, 1821, 1859, 1686, 1686, 1350, 1883, 1686, 1686, 1686, 1781, 1391, 1875, 1686, 1686, 1613, 1644, 1686, 1686, 1889, 1686, 1686, 1662, 1884, 1686, 1885, 1890, 1686, 1686, 1686, 1894, 1686, 1686, 1678, 1686, 1907, 1686, 1686, 1529, 1914, 1686, 1838, 1686, 1686, 1881, 1686, 1686, 1872, 1876, 1836, 1919, 1686, 1837, 1692, 1910, 1686, 1925, 1928, 1742, 1686, 1811, 1811, 1930, 1810, 1929, 1935, 1928, 1900, 1942, 1867, 1868, 1931, 1035, 1788, 1948, 1952, 1956, 1960, 1964, 1686, 1976, 1686, 1686, 1686, 2065, 1686, 1992, 2037, 1686, 1686, 1998, 2009, 1972, 2002, 1686, 1686, 1686, 2077, 1300, 2023, 1686, 1686, 1686, 1807, 2031, 1686, 1686, 1686, 1860, 1500, 2032, 1686, 1686, 1686, 2083, 1686, 2036, 1686, 1277, 1276, 2042, 1877, 1686, 1686, 2041, 1686, 1686, 2027, 2037, 2012, 1686, 2012, 1855, 1850, 1686, 2046, 1686, 1686, 2054, 1996, 1686, 1897, 1309, 2059, 2052, 1686, 2058, 1686, 1686, 2081, 1686, 1717, 1477, 1686, 1331, 1686, 1686, 1687, 1686, 1860, 1681, 1686, 1686, 1686, 1966, 1724, 1686, 1686, 1686, 1984, 2015, 1686, 1686, 1686, 1988, 1686, 2063, 1686, 1686, 1686, 2005, 1686, 1727, 1686, 1686, 1711, 1457, 2069, 1686, 1686, 1686, 2019, 2075, 1686, 1686, 1915, 1686, 1686, 1793, 1874, 1686, 1686, 1491, 1362, 1449, 1686, 1686, 1460, 2098, 2087, 2091, 2095, 2184, 2102, 2113, 2780, 2117, 2134, 2142, 2281, 2146, 2146, 2146, 2304, 2296, 2181, 2639, 2591, 2872, 2592, 2873, 2313, 2195, 2200, 2281, 2146, 2273, 2226, 2204, 2152, 2219, 2276, 2167, 2177, 2276, 2235, 2276, 2276, 2230, 2281, 2276, 2296, 2276, 2293, 2276, 2276, 2276, 2276, 2234, 2276, 2311, 2314, 2210, 2199, 2217, 2222, 2276, 2276, 2276, 2240, 2276, 2294, 2276, 2276, 2173, 2276, 2198, 2281, 2281, 2281, 2281, 2282, 2146, 2146, 2146, 2146, 2205, 2146, 2204, 2248, 2276, 2235, 2276, 2297, 2276, 2276, 2276, 2277, 2256, 2281, 2283, 2146, 2146, 2146, 2275, 2276, 2295, 2276, 2276, 2293, 2146, 2304, 2264, 2269, 2221, 2276, 2276, 2276, 2293, 2295, 2276, 2276, 2276, 2295, 2263, 2205, 2268, 2220, 2172, 2276, 2276, 2276, 2296, 2276, 2276, 2296, 2294, 2276, 2276, 2278, 2281, 2281, 2280, 2281, 2281, 2281, 2283, 2206, 2223, 2276, 2276, 2279, 2281, 2281, 2146, 2273, 2276, 2276, 2281, 2281, 2281, 2276, 2292, 2276, 2298, 2225, 2276, 2298, 2169, 2224, 2292, 2298, 2171, 2229, 2281, 2281, 2171, 2236, 2281, 2281, 2281, 2146, 2275, 2225, 2292, 2299, 2276, 2229, 2281, 2146, 2276, 2290, 2297, 2283, 2146, 2146, 2274, 2224, 2227, 2298, 2225, 2297, 2276, 2230, 2170, 2230, 2282, 2146, 2147, 2151, 2156, 2288, 2276, 2230, 2303, 2308, 2236, 2284, 2228, 2318, 2318, 2318, 2326, 2335, 2339, 2343, 2349, 2416, 2693, 2357, 2592, 2109, 2592, 2592, 2162, 2943, 2823, 2646, 2592, 2361, 2592, 2122, 2592, 2592, 2122, 2470, 2592, 2592, 2592, 2109, 2107, 2592, 2592, 2592, 2123, 2592, 2592, 2592, 2125, 2592, 2413, 2592, 2592, 2592, 2127, 2592, 2592, 2414, 2592, 2592, 2592, 2130, 2952, 2592, 2594, 2592, 2592, 2212, 2609, 2252, 2592, 2592, 2592, 2446, 2434, 2592, 2592, 2592, 2212, 2446, 2450, 2456, 2431, 2435, 2592, 2592, 2243, 2478, 2448, 2439, 2946, 2592, 2592, 2592, 2368, 2809, 2813, 2450, 2441, 2212, 2812, 2449, 2440, 2947, 2592, 2592, 2592, 2345, 2451, 2457, 2948, 2592, 2124, 2592, 2592, 2650, 2823, 2449, 2455, 2946, 2592, 2128, 2592, 2592, 2649, 2952, 2592, 2810, 2448, 2461, 2991, 2467, 2592, 2592, 2329, 2817, 2474, 2990, 2466, 2592, 2592, 2373, 2447, 2992, 2469, 2592, 2592, 2592, 2373, 2447, 2477, 2468, 2592, 2592, 2353, 2469, 2592, 2495, 2592, 2592, 2415, 2483, 2592, 2415, 2496, 2592, 2592, 2352, 2592, 2592, 2352, 2352, 2469, 2592, 2592, 2363, 2331, 2494, 2592, 2592, 2592, 2375, 2592, 2375, 2415, 2504, 2592, 2592, 2367, 2372, 2503, 2592, 2592, 2592, 2389, 2418, 2415, 2592, 2592, 2373, 2592, 2592, 2592, 2593, 2732, 2417, 2415, 2592, 2417, 2520, 2592, 2592, 2592, 2390, 2521, 2521, 2592, 2592, 2592, 2401, 2599, 2585, 2526, 2531, 2120, 2592, 2212, 2426, 2450, 2463, 2948, 2592, 2592, 2592, 2213, 2389, 2527, 2532, 2121, 2542, 2551, 2105, 2592, 2213, 2592, 2592, 2592, 2558, 2538, 2544, 2553, 2557, 2537, 2543, 2552, 2421, 2572, 2576, 2546, 2543, 2547, 2592, 2592, 2373, 2615, 2575, 2545, 2105, 2592, 2244, 2479, 2592, 2129, 2592, 2592, 2628, 2690, 2469, 2562, 2566, 2592, 2592, 2592, 2415, 2928, 2934, 2401, 2570, 2574, 2564, 2572, 2585, 2590, 2592, 2592, 2585, 2965, 2592, 2592, 2592, 2445, 2251, 2592, 2592, 2592, 2474, 2592, 2609, 2892, 2592, 2362, 2592, 2592, 2138, 2851, 2159, 2592, 2592, 2592, 2509, 2888, 2892, 2592, 2592, 2592, 2490, 2418, 2891, 2592, 2592, 2376, 2592, 2592, 2374, 2592, 2889, 2388, 2592, 2373, 2373, 2890, 2592, 2592, 2387, 2592, 2887, 2505, 2892, 2592, 2373, 2610, 2388, 2592, 2592, 2376, 2373, 2592, 2887, 2891, 2592, 2374, 2592, 2592, 2608, 2159, 2614, 2620, 2592, 2592, 2394, 2594, 2887, 2399, 2592, 2887, 2397, 2508, 2374, 2507, 2592, 2375, 2592, 2592, 2592, 2595, 2508, 2506, 2592, 2506, 2505, 2505, 2592, 2507, 2637, 2505, 2592, 2592, 2401, 2661, 2592, 2643, 2592, 2592, 2417, 2592, 2655, 2592, 2592, 2592, 2510, 2414, 2656, 2592, 2592, 2592, 2516, 2592, 2593, 2660, 2665, 2880, 2592, 2592, 2592, 2522, 2767, 2666, 2881, 2592, 2592, 2420, 2571, 2696, 2592, 2592, 2592, 2580, 2572, 2686, 2632, 2698, 2592, 2383, 2514, 2592, 2163, 2932, 2465, 2685, 2631, 2697, 2592, 2388, 2592, 2592, 2212, 2604, 2671, 2632, 2678, 2592, 2401, 2405, 2409, 2592, 2592, 2592, 2679, 2592, 2592, 2592, 2592, 2108, 2677, 2591, 2592, 2592, 2592, 2419, 2592, 2683, 2187, 2191, 2469, 2671, 2189, 2467, 2592, 2401, 2629, 2633, 2702, 2468, 2592, 2592, 2421, 2536, 2703, 2469, 2592, 2592, 2422, 2573, 2593, 2672, 2467, 2592, 2402, 2406, 2592, 2402, 2979, 2592, 2592, 2626, 2673, 2467, 2592, 2446, 2259, 2947, 2592, 2377, 2709, 2592, 2592, 2522, 2862, 2713, 2468, 2592, 2592, 2581, 2572, 2562, 2374, 2374, 2592, 2376, 2721, 2724, 2592, 2592, 2624, 2373, 2731, 2592, 2592, 2592, 2626, 2732, 2592, 2592, 2592, 2755, 2656, 2726, 2736, 2741, 2592, 2486, 2593, 2381, 2592, 2727, 2737, 2742, 2715, 2747, 2753, 2592, 2498, 2469, 2873, 2743, 2592, 2592, 2592, 2791, 2759, 2763, 2592, 2592, 2627, 2704, 2592, 2592, 2522, 2789, 2593, 2761, 2753, 2592, 2498, 2863, 2592, 2592, 2767, 2592, 2592, 2592, 2792, 2789, 2592, 2592, 2592, 2803, 2126, 2592, 2592, 2592, 2811, 2122, 2592, 2592, 2592, 2834, 2777, 2592, 2592, 2592, 2848, 2936, 2591, 2489, 2797, 2592, 2592, 2670, 2631, 2490, 2798, 2592, 2592, 2592, 2963, 2807, 2592, 2592, 2592, 2965, 2838, 2592, 2592, 2592, 2975, 2330, 2818, 2829, 2592, 2498, 2939, 2592, 2498, 2592, 2791, 2331, 2819, 2830, 2592, 2592, 2592, 2982, 2834, 2817, 2828, 2106, 2592, 2592, 2592, 2405, 2405, 2817, 2828, 2592, 2592, 2415, 2849, 2842, 2592, 2522, 2773, 2592, 2522, 2868, 2592, 2580, 2600, 2586, 2137, 2850, 2843, 2592, 2592, 2855, 2937, 2844, 2592, 2592, 2592, 2987, 2936, 2591, 2592, 2592, 2684, 2630, 2592, 2856, 2938, 2592, 2592, 2860, 2939, 2592, 2592, 2872, 2592, 2861, 2591, 2592, 2592, 2887, 2616, 2592, 2867, 2592, 2592, 2708, 2592, 2498, 2469, 2498, 2497, 2785, 2773, 2499, 2783, 2770, 2877, 2877, 2877, 2772, 2592, 2592, 2345, 2885, 2592, 2592, 2592, 2715, 2762, 2515, 2896, 2592, 2592, 2715, 2917, 2516, 2897, 2592, 2592, 2592, 2901, 2906, 2911, 2592, 2592, 2956, 2960, 2715, 2902, 2907, 2912, 2593, 2916, 2920, 2820, 2922, 2822, 2592, 2592, 2715, 2927, 2921, 2821, 2106, 2592, 2592, 2974, 2408, 2321, 2821, 2106, 2592, 2592, 2983, 2592, 2593, 2404, 2408, 2592, 2592, 2717, 2749, 2716, 2928, 2322, 2822, 2593, 2926, 2919, 2820, 2934, 2823, 2592, 2592, 2592, 2651, 2824, 2592, 2592, 2592, 2130, 2952, 2592, 2592, 2592, 2592, 2964, 2592, 2592, 2716, 2748, 2592, 2969, 2592, 2592, 2716, 2918, 2368, 2970, 2592, 2592, 2592, 2403, 2407, 2592, 2592, 2787, 2211, 2404, 2409, 2592, 2592, 2802, 2837, 2987, 2592, 2592, 2592, 2809, 2427, 2592, 2793, 2592, 2592, 2809, 2447, 1073741824, 0x80000000, 539754496, 542375936, 402653184, 554434560, 571736064, 545521856, 268451840, 335544320, 268693630, 512, 2048, 256, 1024, 0, 1024, 0, 1073741824, 0x80000000, 0, 0, 0, 8388608, 0, 0, 1073741824, 1073741824, 0, 0x80000000, 537133056, 4194304, 1048576, 268435456, -1073741824, 0, 0, 0, 1048576, 0, 0, 0, 1572864, 0, 0, 0, 4194304, 0, 134217728, 16777216, 0, 0, 32, 64, 98304, 0, 33554432, 8388608, 192, 67108864, 67108864, 67108864, 67108864, 16, 32, 4, 0, 8192, 196608, 196608, 229376, 80, 4096, 524288, 8388608, 0, 0, 32, 128, 256, 24576, 24600, 24576, 24576, 2, 24576, 24576, 24576, 24584, 24592, 24576, 24578, 24576, 24578, 24576, 24576, 16, 512, 2048, 2048, 256, 4096, 32768, 1048576, 4194304, 67108864, 134217728, 268435456, 262144, 134217728, 0, 128, 128, 64, 16384, 16384, 16384, 67108864, 32, 32, 4, 4, 4096, 262144, 134217728, 0, 0, 0, 2, 0, 8192, 131072, 131072, 4096, 4096, 4096, 4096, 24576, 24576, 24576, 8, 8, 24576, 24576, 16384, 16384, 16384, 24576, 24584, 24576, 24576, 24576, 16384, 24576, 536870912, 262144, 0, 0, 32, 2048, 8192, 4, 4096, 4096, 4096, 786432, 8388608, 16777216, 0, 128, 16384, 16384, 16384, 32768, 65536, 2097152, 32, 32, 32, 32, 4, 4, 4, 4, 4, 4096, 67108864, 67108864, 67108864, 24576, 24576, 24576, 24576, 0, 16384, 16384, 16384, 16384, 67108864, 67108864, 8, 67108864, 24576, 8, 8, 8, 24576, 24576, 24576, 24578, 24576, 24576, 24576, 2, 2, 2, 16384, 67108864, 67108864, 67108864, 32, 67108864, 8, 8, 24576, 2048, 0x80000000, 536870912, 262144, 262144, 262144, 67108864, 8, 24576, 16384, 32768, 1048576, 4194304, 25165824, 67108864, 24576, 32770, 2, 4, 112, 512, 98304, 524288, 50, 402653186, 1049090, 1049091, 10, 66, 100925514, 10, 66, 12582914, 0, 0, -1678194207, -1678194207, -1041543218, 0, 32768, 0, 0, 32, 65536, 268435456, 1, 1, 513, 1048577, 0, 12582912, 0, 0, 0, 4, 1792, 0, 0, 0, 7, 29360128, 0, 0, 0, 8, 0, 0, 0, 12, 1, 1, 0, 0, -604102721, -604102721, 4194304, 8388608, 0, 0, 0, 31, 925600, 997981306, 997981306, 997981306, 0, 0, 2048, 8388608, 0, 0, 1, 2, 4, 32, 64, 512, 8192, 0, 0, 0, 245760, 997720064, 0, 0, 0, 32, 0, 0, 0, 3, 12, 16, 32, 8, 112, 3072, 12288, 16384, 32768, 65536, 131072, 7864320, 16777216, 973078528, 0, 0, 65536, 131072, 3670016, 4194304, 16777216, 33554432, 2, 8, 48, 2048, 8192, 16384, 32768, 65536, 131072, 524288, 131072, 524288, 3145728, 4194304, 16777216, 33554432, 65536, 131072, 2097152, 4194304, 16777216, 33554432, 134217728, 268435456, 536870912, 0, 0, 0, 1024, 0, 8, 48, 2048, 8192, 65536, 33554432, 268435456, 536870912, 65536, 268435456, 536870912, 0, 0, 32768, 0, 0, 126, 623104, 65011712, 0, 32, 65536, 536870912, 0, 0, 65536, 524288, 0, 32, 65536, 0, 0, 0, 2048, 0, 0, 0, 15482, 245760, -604102721, 0, 0, 0, 18913, 33062912, 925600, -605028352, 0, 0, 0, 65536, 31, 8096, 131072, 786432, 3145728, 3145728, 12582912, 50331648, 134217728, 268435456, 160, 256, 512, 7168, 131072, 786432, 131072, 786432, 1048576, 2097152, 12582912, 16777216, 268435456, 1073741824, 0x80000000, 12582912, 16777216, 33554432, 268435456, 1073741824, 0x80000000, 3, 12, 16, 160, 256, 7168, 786432, 1048576, 12582912, 16777216, 268435456, 1073741824, 0, 8, 16, 32, 128, 256, 512, 7168, 786432, 1048576, 2097152, 0, 1, 2, 8, 16, 7168, 786432, 1048576, 8388608, 16777216, 16777216, 1073741824, 0, 0, 0, 0, 1, 0, 0, 8, 32, 128, 256, 7168, 8, 32, 0, 3072, 0, 8, 32, 3072, 4096, 524288, 8, 32, 0, 0, 3072, 4096, 0, 2048, 524288, 8388608, 8, 2048, 0, 0, 1, 12, 256, 4096, 32768, 262144, 1048576, 4194304, 67108864, 0, 2048, 0, 2048, 2048, 1073741824, -58805985, -58805985, -58805985, 0, 0, 262144, 0, 0, 32, 4194304, 16777216, 134217728, 4382, 172032, -58982400, 0, 0, 2, 28, 256, 4096, 8192, 8192, 32768, 131072, 262144, 524288, 1, 2, 12, 256, 4096, 0, 0, 4194304, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1, 2, 12, 16, 256, 4096, 1048576, 67108864, 134217728, 268435456, 0, 512, 1048576, 4194304, 201326592, 1879048192, 0, 0, 12, 256, 4096, 134217728, 268435456, 536870912, 12, 256, 268435456, 536870912, 0, 12, 256, 0, 0, 1, 32, 64, 512, 0, 0, 205236961, 205236961, 0, 0, 0, 1, 96, 640, 1, 10976, 229376, 204996608, 0, 640, 2048, 8192, 229376, 1572864, 1572864, 2097152, 201326592, 0, 0, 0, 64, 512, 2048, 229376, 1572864, 201326592, 1572864, 201326592, 0, 0, 1, 4382, 0, 1, 32, 2048, 65536, 131072, 1572864, 201326592, 131072, 1572864, 134217728, 0, 0, 524288, 524288, 0, 0, 0, -68582786, -68582786, -68582786, 0, 0, 2097152, 524288, 0, 524288, 0, 0, 65536, 131072, 1572864, 0, 0, 2, 4, 0, 0, 65011712, -134217728, 0, 0, 0, 0, 2, 4, 120, 512, -268435456, 0, 0, 0, 2, 8, 48, 64, 2048, 8192, 98304, 524288, 2097152, 4194304, 25165824, 33554432, 134217728, 268435456, 0x80000000, 0, 0, 25165824, 33554432, 134217728, 1879048192, 0x80000000, 0, 0, 4, 112, 512, 622592, 65011712, 134217728, -268435456, 16777216, 33554432, 134217728, 1610612736, 0, 0, 0, 64, 98304, 524288, 4194304, 16777216, 33554432, 0, 98304, 524288, 16777216, 33554432, 0, 65536, 524288, 33554432, 536870912, 1073741824, 0, 65536, 524288, 536870912, 1073741824, 0, 0, 65536, 524288, 536870912, 0, 524288, 0, 524288, 524288, 1048576, 2086666240, 0x80000000, 0, -1678194207, 0, 0, 0, 8, 32, 2048, 524288, 8388608, 0, 0, 33062912, 436207616, 0x80000000, 0, 0, 32, 64, 2432, 16384, 32768, 32768, 524288, 3145728, 4194304, 25165824, 25165824, 167772160, 268435456, 0x80000000, 0, 32, 64, 384, 2048, 16384, 32768, 1048576, 2097152, 4194304, 25165824, 32, 64, 128, 256, 2048, 16384, 2048, 16384, 1048576, 4194304, 16777216, 33554432, 134217728, 536870912, 1073741824, 0, 0, 2048, 16384, 4194304, 16777216, 33554432, 134217728, 805306368, 0, 0, 16777216, 134217728, 268435456, 0x80000000, 0, 622592, 622592, 622592, 8807, 8807, 434791, 0, 0, 16777216, 0, 0, 0, 7, 608, 8192, 0, 0, 0, 3, 4, 96, 512, 32, 64, 8192, 0, 0, 16777216, 134217728, 0, 0, 2, 4, 8192, 16384, 65536, 2097152, 33554432, 268435456\n];\n\nXQueryTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"QuotChar\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar JSONiqTokenizer = _dereq_('./JSONiqTokenizer').JSONiqTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit'.split('|');\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'JSONPredefinedCharRef', token: 'constant.language.escape' },\n        { name: 'JSONCharRef', token: 'constant.language.escape' },\n        { name: 'JSONChar', token: 'string' }\n    ]\n};\n    \nexports.JSONiqLexer = function(){ return new Lexer(JSONiqTokenizer, Rules); };\n},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar XQueryTokenizer = _dereq_('./XQueryTokenizer').XQueryTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict'.split('|');\n\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotChar', token: 'string' }\n    ]\n};\n    \nexports.XQueryLexer = function(){ return new Lexer(XQueryTokenizer, Rules); };\n},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\":[function(_dereq_,module,exports){\nexports.JSONParseTreeHandler = function (code) {\n\t'use strict';\n    var toBeIndex = ['VarDecl', 'FunctionDecl'];\n    var list = [\n        'OrExpr', 'AndExpr', 'ComparisonExpr', 'StringConcatExpr', 'RangeExpr',\n        'AdditiveExpr', 'MultiplicativeExpr',\n        'UnionExpr', 'IntersectExceptExpr', 'InstanceofExpr', 'TreatExpr', 'CastableExpr', 'CastExpr', 'UnaryExpr', 'ValueExpr',\n        'FTContainsExpr', 'SimpleMapExpr', 'PathExpr', 'RelativePathExpr', 'PostfixExpr', 'StepExpr'\n    ];\n\n    var ast = null;\n    var ptr = null;\n    var remains = code;\n    var cursor = 0;\n    var lineCursor = 0;\n    var line = 0;\n\n    function createNode(name) {\n        return {\n            name: name,\n            children: [],\n            getParent: null,\n            pos: {\n                sl: 0,\n                sc: 0,\n                el: 0,\n                ec: 0\n            }\n        };\n    }\n\n    function pushNode(name) { //begin\n        var node = createNode(name);\n        if (ast === null) {\n            ast = node;\n            ast.index = [];\n            ptr = node;\n        } else {\n            node.getParent = ptr;\n            ptr.children.push(node);\n            ptr = ptr.children[ptr.children.length - 1];\n        }\n    }\n\n    function popNode() {\n\n        if (ptr.children.length > 0) {\n            var s = ptr.children[0];\n            var e = null;\n            for (var i = ptr.children.length - 1; i >= 0; i--) {\n                e = ptr.children[i];\n                if (e.pos.el !== 0 || e.pos.ec !== 0) {\n                    break;\n                }\n            }\n            ptr.pos.sl = s.pos.sl;\n            ptr.pos.sc = s.pos.sc;\n            ptr.pos.el = e.pos.el;\n            ptr.pos.ec = e.pos.ec;\n        }\n        if (ptr.name === 'FunctionName') {\n            ptr.name = 'EQName';\n        }\n        if (ptr.name === 'EQName' && ptr.value === undefined) {\n            ptr.value = ptr.children[0].value;\n            ptr.children.pop();\n        }\n    \n        if(toBeIndex.indexOf(ptr.name) !== -1) {\n            ast.index.push(ptr);\n        }\n    \n        if (ptr.getParent !== null) {\n            ptr = ptr.getParent;\n        } else {\n        }\n        if (ptr.children.length > 0) {\n            var lastChild = ptr.children[ptr.children.length - 1];\n            if (lastChild.children.length === 1 && list.indexOf(lastChild.name) !== -1) {\n                ptr.children[ptr.children.length - 1] = lastChild.children[0];\n            }\n        }\n    }\n\n    this.closeParseTree = function () {\n        while (ptr.getParent !== null) {\n            popNode();\n        }\n        popNode();\n    };\n\n    this.peek = function () {\n        return ptr;\n    };\n\n    this.getParseTree = function () {\n        return ast;\n    };\n\n    this.reset = function () {}; //input\n\n    this.startNonterminal = function (name, begin) {\n        pushNode(name, begin);\n    };\n\n    this.endNonterminal = function () {//name, end\n        popNode();\n    };\n\n    this.terminal = function (name, begin, end) {\n        name = (name.substring(0, 1) === '\\'' && name.substring(name.length - 1) === '\\'') ? 'TOKEN' : name;\n        pushNode(name, begin);\n        setValue(ptr, begin, end);\n        popNode();\n    };\n\n    this.whitespace = function (begin, end) {\n        var name = 'WS';\n        pushNode(name, begin);\n        setValue(ptr, begin, end);\n        popNode();\n    };\n\n    function setValue(node, begin, end) {\n\n        var e = end - cursor;\n        ptr.value = remains.substring(0, e);\n        remains = remains.substring(e);\n        cursor = end;\n\n        var sl = line;\n        var sc = lineCursor;\n        var el = sl + ptr.value.split('\\n').length - 1;\n        var lastIdx = ptr.value.lastIndexOf('\\n');\n        var ec = lastIdx === -1 ? sc + ptr.value.length : ptr.value.substring(lastIdx + 1).length;\n\n        line = el;\n        lineCursor = ec;\n\n        ptr.pos.sl = sl;\n        ptr.pos.sc = sc;\n        ptr.pos.el = el;\n        ptr.pos.ec = ec;\n    }\n};\n\n},{}],\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\":[function(_dereq_,module,exports){\n                                                            var JSONiqParser = exports.JSONiqParser = function JSONiqParser(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    l2 = 0;\n    end = e;\n    ex = -1;\n    memo = {};\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqParser.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqParser.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqParser.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_XQuery = function()\n  {\n    eventHandler.startNonterminal(\"XQuery\", e0);\n    lookahead1W(277);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Module();\n    shift(25);                      // EOF\n    eventHandler.endNonterminal(\"XQuery\", e0);\n  };\n\n  function parse_Module()\n  {\n    eventHandler.startNonterminal(\"Module\", e0);\n    switch (l1)\n    {\n    case 170:                       // 'jsoniq'\n      lookahead2W(168);             // S^WS | '#' | '(' | '(:' | 'encoding' | 'version'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 64682                 // 'jsoniq' 'encoding'\n     || lk == 137898)               // 'jsoniq' 'version'\n    {\n      parse_VersionDecl();\n    }\n    lookahead1W(277);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 185:                       // 'module'\n      lookahead2W(146);             // S^WS | '#' | '(' | '(:' | 'namespace'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 95929:                     // 'module' 'namespace'\n      whitespace();\n      parse_LibraryModule();\n      break;\n    default:\n      whitespace();\n      parse_MainModule();\n    }\n    eventHandler.endNonterminal(\"Module\", e0);\n  }\n\n  function parse_VersionDecl()\n  {\n    eventHandler.startNonterminal(\"VersionDecl\", e0);\n    shift(170);                     // 'jsoniq'\n    lookahead1W(120);               // S^WS | '(:' | 'encoding' | 'version'\n    switch (l1)\n    {\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(269);                   // 'version'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      lookahead1W(113);             // S^WS | '(:' | ';' | 'encoding'\n      if (l1 == 126)                // 'encoding'\n      {\n        shift(126);                 // 'encoding'\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n    }\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"VersionDecl\", e0);\n  }\n\n  function parse_LibraryModule()\n  {\n    eventHandler.startNonterminal(\"LibraryModule\", e0);\n    parse_ModuleDecl();\n    lookahead1W(142);               // S^WS | EOF | '(:' | 'declare' | 'import'\n    whitespace();\n    parse_Prolog();\n    eventHandler.endNonterminal(\"LibraryModule\", e0);\n  }\n\n  function parse_ModuleDecl()\n  {\n    eventHandler.startNonterminal(\"ModuleDecl\", e0);\n    shift(185);                     // 'module'\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(239);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(30);                // S^WS | '(:' | '='\n    shift(61);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"ModuleDecl\", e0);\n  }\n\n  function parse_Prolog()\n  {\n    eventHandler.startNonterminal(\"Prolog\", e0);\n    for (;;)\n    {\n      lookahead1W(277);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(206);           // S^WS | '#' | '%' | '(' | '(:' | 'base-uri' | 'boundary-space' | 'collection' |\n        break;\n      case 155:                     // 'import'\n        lookahead2W(169);           // S^WS | '#' | '(' | '(:' | 'module' | 'schema'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 43117               // 'declare' 'base-uri'\n       && lk != 44141               // 'declare' 'boundary-space'\n       && lk != 50797               // 'declare' 'construction'\n       && lk != 53869               // 'declare' 'copy-namespaces'\n       && lk != 54893               // 'declare' 'decimal-format'\n       && lk != 56429               // 'declare' 'default'\n       && lk != 73325               // 'declare' 'ft-option'\n       && lk != 94875               // 'import' 'module'\n       && lk != 95853               // 'declare' 'namespace'\n       && lk != 106093              // 'declare' 'ordering'\n       && lk != 115821              // 'declare' 'revalidation'\n       && lk != 117403)             // 'import' 'schema'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(200);           // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 56429)              // 'declare' 'default'\n      {\n        lk = memoized(0, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_DefaultNamespaceDecl();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(0, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case -1:\n        whitespace();\n        parse_DefaultNamespaceDecl();\n        break;\n      case 95853:                   // 'declare' 'namespace'\n        whitespace();\n        parse_NamespaceDecl();\n        break;\n      case 155:                     // 'import'\n        whitespace();\n        parse_Import();\n        break;\n      case 73325:                   // 'declare' 'ft-option'\n        whitespace();\n        parse_FTOptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_Setter();\n      }\n      lookahead1W(29);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    for (;;)\n    {\n      lookahead1W(277);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(201);           // S^WS | '#' | '%' | '(' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 17005               // 'declare' '%'\n       && lk != 49261               // 'declare' 'collection'\n       && lk != 52333               // 'declare' 'context'\n       && lk != 75373               // 'declare' 'function'\n       && lk != 80493               // 'declare' 'index'\n       && lk != 83565               // 'declare' 'integrity'\n       && lk != 104045              // 'declare' 'option'\n       && lk != 134765              // 'declare' 'updating'\n       && lk != 137325)             // 'declare' 'variable'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(197);           // S^WS | '%' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n        break;\n      default:\n        lk = l1;\n      }\n      switch (lk)\n      {\n      case 52333:                   // 'declare' 'context'\n        whitespace();\n        parse_ContextItemDecl();\n        break;\n      case 104045:                  // 'declare' 'option'\n        whitespace();\n        parse_OptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_AnnotatedDecl();\n      }\n      lookahead1W(29);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    eventHandler.endNonterminal(\"Prolog\", e0);\n  }\n\n  function parse_Separator()\n  {\n    eventHandler.startNonterminal(\"Separator\", e0);\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"Separator\", e0);\n  }\n\n  function parse_Setter()\n  {\n    eventHandler.startNonterminal(\"Setter\", e0);\n    switch (l1)\n    {\n    case 109:                       // 'declare'\n      lookahead2W(194);             // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 56429)                // 'declare' 'default'\n    {\n      lk = memoized(1, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_DefaultCollationDecl();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_EmptyOrderDecl();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -9;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(1, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 44141:                     // 'declare' 'boundary-space'\n      parse_BoundarySpaceDecl();\n      break;\n    case -2:\n      parse_DefaultCollationDecl();\n      break;\n    case 43117:                     // 'declare' 'base-uri'\n      parse_BaseURIDecl();\n      break;\n    case 50797:                     // 'declare' 'construction'\n      parse_ConstructionDecl();\n      break;\n    case 106093:                    // 'declare' 'ordering'\n      parse_OrderingModeDecl();\n      break;\n    case -6:\n      parse_EmptyOrderDecl();\n      break;\n    case 115821:                    // 'declare' 'revalidation'\n      parse_RevalidationDecl();\n      break;\n    case 53869:                     // 'declare' 'copy-namespaces'\n      parse_CopyNamespacesDecl();\n      break;\n    default:\n      parse_DecimalFormatDecl();\n    }\n    eventHandler.endNonterminal(\"Setter\", e0);\n  }\n\n  function parse_BoundarySpaceDecl()\n  {\n    eventHandler.startNonterminal(\"BoundarySpaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(36);                // S^WS | '(:' | 'boundary-space'\n    shift(86);                      // 'boundary-space'\n    lookahead1W(137);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 218:                       // 'preserve'\n      shift(218);                   // 'preserve'\n      break;\n    default:\n      shift(246);                   // 'strip'\n    }\n    eventHandler.endNonterminal(\"BoundarySpaceDecl\", e0);\n  }\n\n  function parse_DefaultCollationDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultCollationDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(41);                // S^WS | '(:' | 'collation'\n    shift(95);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultCollationDecl\", e0);\n  }\n\n  function try_DefaultCollationDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(41);                // S^WS | '(:' | 'collation'\n    shiftT(95);                     // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_BaseURIDecl()\n  {\n    eventHandler.startNonterminal(\"BaseURIDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(35);                // S^WS | '(:' | 'base-uri'\n    shift(84);                      // 'base-uri'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"BaseURIDecl\", e0);\n  }\n\n  function parse_ConstructionDecl()\n  {\n    eventHandler.startNonterminal(\"ConstructionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(44);                // S^WS | '(:' | 'construction'\n    shift(99);                      // 'construction'\n    lookahead1W(137);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 246:                       // 'strip'\n      shift(246);                   // 'strip'\n      break;\n    default:\n      shift(218);                   // 'preserve'\n    }\n    eventHandler.endNonterminal(\"ConstructionDecl\", e0);\n  }\n\n  function parse_OrderingModeDecl()\n  {\n    eventHandler.startNonterminal(\"OrderingModeDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(71);                // S^WS | '(:' | 'ordering'\n    shift(207);                     // 'ordering'\n    lookahead1W(135);               // S^WS | '(:' | 'ordered' | 'unordered'\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    default:\n      shift(262);                   // 'unordered'\n    }\n    eventHandler.endNonterminal(\"OrderingModeDecl\", e0);\n  }\n\n  function parse_EmptyOrderDecl()\n  {\n    eventHandler.startNonterminal(\"EmptyOrderDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'order'\n    shift(205);                     // 'order'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shift(124);                     // 'empty'\n    lookahead1W(125);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 149:                       // 'greatest'\n      shift(149);                   // 'greatest'\n      break;\n    default:\n      shift(176);                   // 'least'\n    }\n    eventHandler.endNonterminal(\"EmptyOrderDecl\", e0);\n  }\n\n  function try_EmptyOrderDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'order'\n    shiftT(205);                    // 'order'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shiftT(124);                    // 'empty'\n    lookahead1W(125);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 149:                       // 'greatest'\n      shiftT(149);                  // 'greatest'\n      break;\n    default:\n      shiftT(176);                  // 'least'\n    }\n  }\n\n  function parse_CopyNamespacesDecl()\n  {\n    eventHandler.startNonterminal(\"CopyNamespacesDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(47);                // S^WS | '(:' | 'copy-namespaces'\n    shift(105);                     // 'copy-namespaces'\n    lookahead1W(132);               // S^WS | '(:' | 'no-preserve' | 'preserve'\n    whitespace();\n    parse_PreserveMode();\n    lookahead1W(25);                // S^WS | '(:' | ','\n    shift(42);                      // ','\n    lookahead1W(127);               // S^WS | '(:' | 'inherit' | 'no-inherit'\n    whitespace();\n    parse_InheritMode();\n    eventHandler.endNonterminal(\"CopyNamespacesDecl\", e0);\n  }\n\n  function parse_PreserveMode()\n  {\n    eventHandler.startNonterminal(\"PreserveMode\", e0);\n    switch (l1)\n    {\n    case 218:                       // 'preserve'\n      shift(218);                   // 'preserve'\n      break;\n    default:\n      shift(193);                   // 'no-preserve'\n    }\n    eventHandler.endNonterminal(\"PreserveMode\", e0);\n  }\n\n  function parse_InheritMode()\n  {\n    eventHandler.startNonterminal(\"InheritMode\", e0);\n    switch (l1)\n    {\n    case 159:                       // 'inherit'\n      shift(159);                   // 'inherit'\n      break;\n    default:\n      shift(192);                   // 'no-inherit'\n    }\n    eventHandler.endNonterminal(\"InheritMode\", e0);\n  }\n\n  function parse_DecimalFormatDecl()\n  {\n    eventHandler.startNonterminal(\"DecimalFormatDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(118);               // S^WS | '(:' | 'decimal-format' | 'default'\n    switch (l1)\n    {\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_EQName();\n      break;\n    default:\n      shift(110);                   // 'default'\n      lookahead1W(48);              // S^WS | '(:' | 'decimal-format'\n      shift(107);                   // 'decimal-format'\n    }\n    for (;;)\n    {\n      lookahead1W(203);             // S^WS | '(:' | ';' | 'NaN' | 'decimal-separator' | 'digit' |\n      if (l1 == 54)                 // ';'\n      {\n        break;\n      }\n      whitespace();\n      parse_DFPropertyName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    eventHandler.endNonterminal(\"DecimalFormatDecl\", e0);\n  }\n\n  function parse_DFPropertyName()\n  {\n    eventHandler.startNonterminal(\"DFPropertyName\", e0);\n    switch (l1)\n    {\n    case 108:                       // 'decimal-separator'\n      shift(108);                   // 'decimal-separator'\n      break;\n    case 151:                       // 'grouping-separator'\n      shift(151);                   // 'grouping-separator'\n      break;\n    case 158:                       // 'infinity'\n      shift(158);                   // 'infinity'\n      break;\n    case 182:                       // 'minus-sign'\n      shift(182);                   // 'minus-sign'\n      break;\n    case 68:                        // 'NaN'\n      shift(68);                    // 'NaN'\n      break;\n    case 213:                       // 'percent'\n      shift(213);                   // 'percent'\n      break;\n    case 212:                       // 'per-mille'\n      shift(212);                   // 'per-mille'\n      break;\n    case 280:                       // 'zero-digit'\n      shift(280);                   // 'zero-digit'\n      break;\n    case 117:                       // 'digit'\n      shift(117);                   // 'digit'\n      break;\n    default:\n      shift(211);                   // 'pattern-separator'\n    }\n    eventHandler.endNonterminal(\"DFPropertyName\", e0);\n  }\n\n  function parse_Import()\n  {\n    eventHandler.startNonterminal(\"Import\", e0);\n    switch (l1)\n    {\n    case 155:                       // 'import'\n      lookahead2W(130);             // S^WS | '(:' | 'module' | 'schema'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 117403:                    // 'import' 'schema'\n      parse_SchemaImport();\n      break;\n    default:\n      parse_ModuleImport();\n    }\n    eventHandler.endNonterminal(\"Import\", e0);\n  }\n\n  function parse_SchemaImport()\n  {\n    eventHandler.startNonterminal(\"SchemaImport\", e0);\n    shift(155);                     // 'import'\n    lookahead1W(76);                // S^WS | '(:' | 'schema'\n    shift(229);                     // 'schema'\n    lookahead1W(141);               // URILiteral | S^WS | '(:' | 'default' | 'namespace'\n    if (l1 != 7)                    // URILiteral\n    {\n      whitespace();\n      parse_SchemaPrefix();\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(112);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 82)                   // 'at'\n    {\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(107);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"SchemaImport\", e0);\n  }\n\n  function parse_SchemaPrefix()\n  {\n    eventHandler.startNonterminal(\"SchemaPrefix\", e0);\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      lookahead1W(239);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n      break;\n    default:\n      shift(110);                   // 'default'\n      lookahead1W(50);              // S^WS | '(:' | 'element'\n      shift(122);                   // 'element'\n      lookahead1W(64);              // S^WS | '(:' | 'namespace'\n      shift(187);                   // 'namespace'\n    }\n    eventHandler.endNonterminal(\"SchemaPrefix\", e0);\n  }\n\n  function parse_ModuleImport()\n  {\n    eventHandler.startNonterminal(\"ModuleImport\", e0);\n    shift(155);                     // 'import'\n    lookahead1W(63);                // S^WS | '(:' | 'module'\n    shift(185);                     // 'module'\n    lookahead1W(93);                // URILiteral | S^WS | '(:' | 'namespace'\n    if (l1 == 187)                  // 'namespace'\n    {\n      shift(187);                   // 'namespace'\n      lookahead1W(239);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(112);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 82)                   // 'at'\n    {\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(107);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"ModuleImport\", e0);\n  }\n\n  function parse_NamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"NamespaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(239);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(30);                // S^WS | '(:' | '='\n    shift(61);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"NamespaceDecl\", e0);\n  }\n\n  function parse_DefaultNamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultNamespaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(119);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    default:\n      shift(147);                   // 'function'\n    }\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultNamespaceDecl\", e0);\n  }\n\n  function try_DefaultNamespaceDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(119);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    default:\n      shiftT(147);                  // 'function'\n    }\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shiftT(187);                    // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_FTOptionDecl()\n  {\n    eventHandler.startNonterminal(\"FTOptionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(55);                // S^WS | '(:' | 'ft-option'\n    shift(143);                     // 'ft-option'\n    lookahead1W(84);                // S^WS | '(:' | 'using'\n    whitespace();\n    parse_FTMatchOptions();\n    eventHandler.endNonterminal(\"FTOptionDecl\", e0);\n  }\n\n  function parse_AnnotatedDecl()\n  {\n    eventHandler.startNonterminal(\"AnnotatedDecl\", e0);\n    shift(109);                     // 'declare'\n    for (;;)\n    {\n      lookahead1W(192);             // S^WS | '%' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n      if (l1 != 33                  // '%'\n       && l1 != 263)                // 'updating'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 263:                     // 'updating'\n        whitespace();\n        parse_CompatibilityAnnotation();\n        break;\n      default:\n        whitespace();\n        parse_Annotation();\n      }\n    }\n    switch (l1)\n    {\n    case 268:                       // 'variable'\n      whitespace();\n      parse_VarDecl();\n      break;\n    case 147:                       // 'function'\n      whitespace();\n      parse_FunctionDecl();\n      break;\n    case 96:                        // 'collection'\n      whitespace();\n      parse_CollectionDecl();\n      break;\n    case 157:                       // 'index'\n      whitespace();\n      parse_IndexDecl();\n      break;\n    default:\n      whitespace();\n      parse_ICDecl();\n    }\n    eventHandler.endNonterminal(\"AnnotatedDecl\", e0);\n  }\n\n  function parse_CompatibilityAnnotation()\n  {\n    eventHandler.startNonterminal(\"CompatibilityAnnotation\", e0);\n    shift(263);                     // 'updating'\n    eventHandler.endNonterminal(\"CompatibilityAnnotation\", e0);\n  }\n\n  function parse_Annotation()\n  {\n    eventHandler.startNonterminal(\"Annotation\", e0);\n    shift(33);                      // '%'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(193);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(190);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n      whitespace();\n      parse_Literal();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(190);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n        whitespace();\n        parse_Literal();\n      }\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"Annotation\", e0);\n  }\n\n  function try_Annotation()\n  {\n    shiftT(33);                     // '%'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(193);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(190);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n      try_Literal();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(190);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n        try_Literal();\n      }\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_VarDecl()\n  {\n    eventHandler.startNonterminal(\"VarDecl\", e0);\n    shift(268);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(110);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 53:                        // ':='\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(134);                   // 'external'\n      lookahead1W(108);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"VarDecl\", e0);\n  }\n\n  function parse_VarValue()\n  {\n    eventHandler.startNonterminal(\"VarValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarValue\", e0);\n  }\n\n  function parse_VarDefaultValue()\n  {\n    eventHandler.startNonterminal(\"VarDefaultValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarDefaultValue\", e0);\n  }\n\n  function parse_ContextItemDecl()\n  {\n    eventHandler.startNonterminal(\"ContextItemDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'context'\n    shift(102);                     // 'context'\n    lookahead1W(58);                // S^WS | '(:' | 'item'\n    shift(167);                     // 'item'\n    lookahead1W(157);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 80)                   // 'as'\n    {\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_ItemType();\n    }\n    lookahead1W(110);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 53:                        // ':='\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(134);                   // 'external'\n      lookahead1W(108);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"ContextItemDecl\", e0);\n  }\n\n  function parse_ParamList()\n  {\n    eventHandler.startNonterminal(\"ParamList\", e0);\n    parse_Param();\n    for (;;)\n    {\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_Param();\n    }\n    eventHandler.endNonterminal(\"ParamList\", e0);\n  }\n\n  function try_ParamList()\n  {\n    try_Param();\n    for (;;)\n    {\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_Param();\n    }\n  }\n\n  function parse_Param()\n  {\n    eventHandler.startNonterminal(\"Param\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(153);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    eventHandler.endNonterminal(\"Param\", e0);\n  }\n\n  function try_Param()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(153);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n  }\n\n  function parse_FunctionBody()\n  {\n    eventHandler.startNonterminal(\"FunctionBody\", e0);\n    parse_EnclosedExpr();\n    eventHandler.endNonterminal(\"FunctionBody\", e0);\n  }\n\n  function try_FunctionBody()\n  {\n    try_EnclosedExpr();\n  }\n\n  function parse_EnclosedExpr()\n  {\n    eventHandler.startNonterminal(\"EnclosedExpr\", e0);\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"EnclosedExpr\", e0);\n  }\n\n  function try_EnclosedExpr()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_OptionDecl()\n  {\n    eventHandler.startNonterminal(\"OptionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(69);                // S^WS | '(:' | 'option'\n    shift(203);                     // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"OptionDecl\", e0);\n  }\n\n  function parse_Expr()\n  {\n    eventHandler.startNonterminal(\"Expr\", e0);\n    parse_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Expr\", e0);\n  }\n\n  function try_Expr()\n  {\n    try_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_FLWORExpr()\n  {\n    eventHandler.startNonterminal(\"FLWORExpr\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnClause();\n    eventHandler.endNonterminal(\"FLWORExpr\", e0);\n  }\n\n  function try_FLWORExpr()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnClause();\n  }\n\n  function parse_InitialClause()\n  {\n    eventHandler.startNonterminal(\"InitialClause\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(151);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n      parse_ForClause();\n      break;\n    case 177:                       // 'let'\n      parse_LetClause();\n      break;\n    default:\n      parse_WindowClause();\n    }\n    eventHandler.endNonterminal(\"InitialClause\", e0);\n  }\n\n  function try_InitialClause()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(151);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n      try_ForClause();\n      break;\n    case 177:                       // 'let'\n      try_LetClause();\n      break;\n    default:\n      try_WindowClause();\n    }\n  }\n\n  function parse_IntermediateClause()\n  {\n    eventHandler.startNonterminal(\"IntermediateClause\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n    case 177:                       // 'let'\n      parse_InitialClause();\n      break;\n    case 272:                       // 'where'\n      parse_WhereClause();\n      break;\n    case 150:                       // 'group'\n      parse_GroupByClause();\n      break;\n    case 106:                       // 'count'\n      parse_CountClause();\n      break;\n    default:\n      parse_OrderByClause();\n    }\n    eventHandler.endNonterminal(\"IntermediateClause\", e0);\n  }\n\n  function try_IntermediateClause()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n    case 177:                       // 'let'\n      try_InitialClause();\n      break;\n    case 272:                       // 'where'\n      try_WhereClause();\n      break;\n    case 150:                       // 'group'\n      try_GroupByClause();\n      break;\n    case 106:                       // 'count'\n      try_CountClause();\n      break;\n    default:\n      try_OrderByClause();\n    }\n  }\n\n  function parse_ForClause()\n  {\n    eventHandler.startNonterminal(\"ForClause\", e0);\n    shift(139);                     // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_ForBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_ForBinding();\n    }\n    eventHandler.endNonterminal(\"ForClause\", e0);\n  }\n\n  function try_ForClause()\n  {\n    shiftT(139);                    // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_ForBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_ForBinding();\n    }\n  }\n\n  function parse_ForBinding()\n  {\n    eventHandler.startNonterminal(\"ForBinding\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(182);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(173);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 73)                   // 'allowing'\n    {\n      whitespace();\n      parse_AllowingEmpty();\n    }\n    lookahead1W(160);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 82)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(126);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 232)                  // 'score'\n    {\n      whitespace();\n      parse_FTScoreVar();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ForBinding\", e0);\n  }\n\n  function try_ForBinding()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(182);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(173);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 73)                   // 'allowing'\n    {\n      try_AllowingEmpty();\n    }\n    lookahead1W(160);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 82)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(126);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 232)                  // 'score'\n    {\n      try_FTScoreVar();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_AllowingEmpty()\n  {\n    eventHandler.startNonterminal(\"AllowingEmpty\", e0);\n    shift(73);                      // 'allowing'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shift(124);                     // 'empty'\n    eventHandler.endNonterminal(\"AllowingEmpty\", e0);\n  }\n\n  function try_AllowingEmpty()\n  {\n    shiftT(73);                     // 'allowing'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shiftT(124);                    // 'empty'\n  }\n\n  function parse_PositionalVar()\n  {\n    eventHandler.startNonterminal(\"PositionalVar\", e0);\n    shift(82);                      // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"PositionalVar\", e0);\n  }\n\n  function try_PositionalVar()\n  {\n    shiftT(82);                     // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_FTScoreVar()\n  {\n    eventHandler.startNonterminal(\"FTScoreVar\", e0);\n    shift(232);                     // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"FTScoreVar\", e0);\n  }\n\n  function try_FTScoreVar()\n  {\n    shiftT(232);                    // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_LetClause()\n  {\n    eventHandler.startNonterminal(\"LetClause\", e0);\n    shift(177);                     // 'let'\n    lookahead1W(100);               // S^WS | '$' | '(:' | 'score'\n    whitespace();\n    parse_LetBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(100);             // S^WS | '$' | '(:' | 'score'\n      whitespace();\n      parse_LetBinding();\n    }\n    eventHandler.endNonterminal(\"LetClause\", e0);\n  }\n\n  function try_LetClause()\n  {\n    shiftT(177);                    // 'let'\n    lookahead1W(100);               // S^WS | '$' | '(:' | 'score'\n    try_LetBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(100);             // S^WS | '$' | '(:' | 'score'\n      try_LetBinding();\n    }\n  }\n\n  function parse_LetBinding()\n  {\n    eventHandler.startNonterminal(\"LetBinding\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(109);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      break;\n    default:\n      parse_FTScoreVar();\n    }\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"LetBinding\", e0);\n  }\n\n  function try_LetBinding()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(109);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      break;\n    default:\n      try_FTScoreVar();\n    }\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowClause()\n  {\n    eventHandler.startNonterminal(\"WindowClause\", e0);\n    shift(139);                     // 'for'\n    lookahead1W(139);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 257:                       // 'tumbling'\n      whitespace();\n      parse_TumblingWindowClause();\n      break;\n    default:\n      whitespace();\n      parse_SlidingWindowClause();\n    }\n    eventHandler.endNonterminal(\"WindowClause\", e0);\n  }\n\n  function try_WindowClause()\n  {\n    shiftT(139);                    // 'for'\n    lookahead1W(139);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 257:                       // 'tumbling'\n      try_TumblingWindowClause();\n      break;\n    default:\n      try_SlidingWindowClause();\n    }\n  }\n\n  function parse_TumblingWindowClause()\n  {\n    eventHandler.startNonterminal(\"TumblingWindowClause\", e0);\n    shift(257);                     // 'tumbling'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shift(275);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    if (l1 == 127                   // 'end'\n     || l1 == 202)                  // 'only'\n    {\n      whitespace();\n      parse_WindowEndCondition();\n    }\n    eventHandler.endNonterminal(\"TumblingWindowClause\", e0);\n  }\n\n  function try_TumblingWindowClause()\n  {\n    shiftT(257);                    // 'tumbling'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shiftT(275);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    if (l1 == 127                   // 'end'\n     || l1 == 202)                  // 'only'\n    {\n      try_WindowEndCondition();\n    }\n  }\n\n  function parse_SlidingWindowClause()\n  {\n    eventHandler.startNonterminal(\"SlidingWindowClause\", e0);\n    shift(239);                     // 'sliding'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shift(275);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    whitespace();\n    parse_WindowEndCondition();\n    eventHandler.endNonterminal(\"SlidingWindowClause\", e0);\n  }\n\n  function try_SlidingWindowClause()\n  {\n    shiftT(239);                    // 'sliding'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shiftT(275);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    try_WindowEndCondition();\n  }\n\n  function parse_WindowStartCondition()\n  {\n    eventHandler.startNonterminal(\"WindowStartCondition\", e0);\n    shift(242);                     // 'start'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shift(271);                     // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowStartCondition\", e0);\n  }\n\n  function try_WindowStartCondition()\n  {\n    shiftT(242);                    // 'start'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shiftT(271);                    // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowEndCondition()\n  {\n    eventHandler.startNonterminal(\"WindowEndCondition\", e0);\n    if (l1 == 202)                  // 'only'\n    {\n      shift(202);                   // 'only'\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'end'\n    shift(127);                     // 'end'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shift(271);                     // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowEndCondition\", e0);\n  }\n\n  function try_WindowEndCondition()\n  {\n    if (l1 == 202)                  // 'only'\n    {\n      shiftT(202);                  // 'only'\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'end'\n    shiftT(127);                    // 'end'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shiftT(271);                    // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowVars()\n  {\n    eventHandler.startNonterminal(\"WindowVars\", e0);\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CurrentItem();\n    }\n    lookahead1W(174);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 82)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(163);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 219)                  // 'previous'\n    {\n      shift(219);                   // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_PreviousItem();\n    }\n    lookahead1W(131);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 190)                  // 'next'\n    {\n      shift(190);                   // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NextItem();\n    }\n    eventHandler.endNonterminal(\"WindowVars\", e0);\n  }\n\n  function try_WindowVars()\n  {\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CurrentItem();\n    }\n    lookahead1W(174);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 82)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(163);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 219)                  // 'previous'\n    {\n      shiftT(219);                  // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_PreviousItem();\n    }\n    lookahead1W(131);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 190)                  // 'next'\n    {\n      shiftT(190);                  // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NextItem();\n    }\n  }\n\n  function parse_CurrentItem()\n  {\n    eventHandler.startNonterminal(\"CurrentItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"CurrentItem\", e0);\n  }\n\n  function try_CurrentItem()\n  {\n    try_EQName();\n  }\n\n  function parse_PreviousItem()\n  {\n    eventHandler.startNonterminal(\"PreviousItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"PreviousItem\", e0);\n  }\n\n  function try_PreviousItem()\n  {\n    try_EQName();\n  }\n\n  function parse_NextItem()\n  {\n    eventHandler.startNonterminal(\"NextItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"NextItem\", e0);\n  }\n\n  function try_NextItem()\n  {\n    try_EQName();\n  }\n\n  function parse_CountClause()\n  {\n    eventHandler.startNonterminal(\"CountClause\", e0);\n    shift(106);                     // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"CountClause\", e0);\n  }\n\n  function try_CountClause()\n  {\n    shiftT(106);                    // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_WhereClause()\n  {\n    eventHandler.startNonterminal(\"WhereClause\", e0);\n    shift(272);                     // 'where'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WhereClause\", e0);\n  }\n\n  function try_WhereClause()\n  {\n    shiftT(272);                    // 'where'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_GroupByClause()\n  {\n    eventHandler.startNonterminal(\"GroupByClause\", e0);\n    shift(150);                     // 'group'\n    lookahead1W(37);                // S^WS | '(:' | 'by'\n    shift(88);                      // 'by'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_GroupingSpecList();\n    eventHandler.endNonterminal(\"GroupByClause\", e0);\n  }\n\n  function try_GroupByClause()\n  {\n    shiftT(150);                    // 'group'\n    lookahead1W(37);                // S^WS | '(:' | 'by'\n    shiftT(88);                     // 'by'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_GroupingSpecList();\n  }\n\n  function parse_GroupingSpecList()\n  {\n    eventHandler.startNonterminal(\"GroupingSpecList\", e0);\n    parse_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_GroupingSpec();\n    }\n    eventHandler.endNonterminal(\"GroupingSpecList\", e0);\n  }\n\n  function try_GroupingSpecList()\n  {\n    try_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_GroupingSpec();\n    }\n  }\n\n  function parse_GroupingSpec()\n  {\n    eventHandler.startNonterminal(\"GroupingSpec\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 36383                 // '$' 'after'\n     || lk == 37407                 // '$' 'allowing'\n     || lk == 37919                 // '$' 'ancestor'\n     || lk == 38431                 // '$' 'ancestor-or-self'\n     || lk == 38943                 // '$' 'and'\n     || lk == 39967                 // '$' 'append'\n     || lk == 40479                 // '$' 'array'\n     || lk == 40991                 // '$' 'as'\n     || lk == 41503                 // '$' 'ascending'\n     || lk == 42015                 // '$' 'at'\n     || lk == 42527                 // '$' 'attribute'\n     || lk == 43039                 // '$' 'base-uri'\n     || lk == 43551                 // '$' 'before'\n     || lk == 44063                 // '$' 'boundary-space'\n     || lk == 44575                 // '$' 'break'\n     || lk == 45599                 // '$' 'case'\n     || lk == 46111                 // '$' 'cast'\n     || lk == 46623                 // '$' 'castable'\n     || lk == 47135                 // '$' 'catch'\n     || lk == 48159                 // '$' 'child'\n     || lk == 48671                 // '$' 'collation'\n     || lk == 49695                 // '$' 'comment'\n     || lk == 50207                 // '$' 'constraint'\n     || lk == 50719                 // '$' 'construction'\n     || lk == 52255                 // '$' 'context'\n     || lk == 52767                 // '$' 'continue'\n     || lk == 53279                 // '$' 'copy'\n     || lk == 53791                 // '$' 'copy-namespaces'\n     || lk == 54303                 // '$' 'count'\n     || lk == 54815                 // '$' 'decimal-format'\n     || lk == 55839                 // '$' 'declare'\n     || lk == 56351                 // '$' 'default'\n     || lk == 56863                 // '$' 'delete'\n     || lk == 57375                 // '$' 'descendant'\n     || lk == 57887                 // '$' 'descendant-or-self'\n     || lk == 58399                 // '$' 'descending'\n     || lk == 60959                 // '$' 'div'\n     || lk == 61471                 // '$' 'document'\n     || lk == 61983                 // '$' 'document-node'\n     || lk == 62495                 // '$' 'element'\n     || lk == 63007                 // '$' 'else'\n     || lk == 63519                 // '$' 'empty'\n     || lk == 64031                 // '$' 'empty-sequence'\n     || lk == 64543                 // '$' 'encoding'\n     || lk == 65055                 // '$' 'end'\n     || lk == 66079                 // '$' 'eq'\n     || lk == 66591                 // '$' 'every'\n     || lk == 67615                 // '$' 'except'\n     || lk == 68127                 // '$' 'exit'\n     || lk == 68639                 // '$' 'external'\n     || lk == 69151                 // '$' 'false'\n     || lk == 69663                 // '$' 'first'\n     || lk == 70175                 // '$' 'following'\n     || lk == 70687                 // '$' 'following-sibling'\n     || lk == 71199                 // '$' 'for'\n     || lk == 72735                 // '$' 'from'\n     || lk == 73247                 // '$' 'ft-option'\n     || lk == 75295                 // '$' 'function'\n     || lk == 75807                 // '$' 'ge'\n     || lk == 76831                 // '$' 'group'\n     || lk == 77855                 // '$' 'gt'\n     || lk == 78367                 // '$' 'idiv'\n     || lk == 78879                 // '$' 'if'\n     || lk == 79391                 // '$' 'import'\n     || lk == 79903                 // '$' 'in'\n     || lk == 80415                 // '$' 'index'\n     || lk == 82463                 // '$' 'insert'\n     || lk == 82975                 // '$' 'instance'\n     || lk == 83487                 // '$' 'integrity'\n     || lk == 83999                 // '$' 'intersect'\n     || lk == 84511                 // '$' 'into'\n     || lk == 85023                 // '$' 'is'\n     || lk == 85535                 // '$' 'item'\n     || lk == 86047                 // '$' 'json'\n     || lk == 86559                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'jsoniq'\n     || lk == 88607                 // '$' 'last'\n     || lk == 89119                 // '$' 'lax'\n     || lk == 89631                 // '$' 'le'\n     || lk == 90655                 // '$' 'let'\n     || lk == 91679                 // '$' 'loop'\n     || lk == 92703                 // '$' 'lt'\n     || lk == 93727                 // '$' 'mod'\n     || lk == 94239                 // '$' 'modify'\n     || lk == 94751                 // '$' 'module'\n     || lk == 95775                 // '$' 'namespace'\n     || lk == 96287                 // '$' 'namespace-node'\n     || lk == 96799                 // '$' 'ne'\n     || lk == 99359                 // '$' 'node'\n     || lk == 99871                 // '$' 'nodes'\n     || lk == 100895                // '$' 'null'\n     || lk == 101407                // '$' 'object'\n     || lk == 103455                // '$' 'only'\n     || lk == 103967                // '$' 'option'\n     || lk == 104479                // '$' 'or'\n     || lk == 104991                // '$' 'order'\n     || lk == 105503                // '$' 'ordered'\n     || lk == 106015                // '$' 'ordering'\n     || lk == 107551                // '$' 'parent'\n     || lk == 110623                // '$' 'preceding'\n     || lk == 111135                // '$' 'preceding-sibling'\n     || lk == 112671                // '$' 'processing-instruction'\n     || lk == 113695                // '$' 'rename'\n     || lk == 114207                // '$' 'replace'\n     || lk == 114719                // '$' 'return'\n     || lk == 115231                // '$' 'returning'\n     || lk == 115743                // '$' 'revalidation'\n     || lk == 116767                // '$' 'satisfies'\n     || lk == 117279                // '$' 'schema'\n     || lk == 117791                // '$' 'schema-attribute'\n     || lk == 118303                // '$' 'schema-element'\n     || lk == 118815                // '$' 'score'\n     || lk == 119327                // '$' 'select'\n     || lk == 119839                // '$' 'self'\n     || lk == 122399                // '$' 'sliding'\n     || lk == 122911                // '$' 'some'\n     || lk == 123423                // '$' 'stable'\n     || lk == 123935                // '$' 'start'\n     || lk == 125471                // '$' 'strict'\n     || lk == 126495                // '$' 'structured-item'\n     || lk == 127007                // '$' 'switch'\n     || lk == 127519                // '$' 'text'\n     || lk == 129567                // '$' 'to'\n     || lk == 130079                // '$' 'treat'\n     || lk == 130591                // '$' 'true'\n     || lk == 131103                // '$' 'try'\n     || lk == 131615                // '$' 'tumbling'\n     || lk == 132127                // '$' 'type'\n     || lk == 132639                // '$' 'typeswitch'\n     || lk == 133151                // '$' 'union'\n     || lk == 134175                // '$' 'unordered'\n     || lk == 134687                // '$' 'updating'\n     || lk == 136223                // '$' 'validate'\n     || lk == 136735                // '$' 'value'\n     || lk == 137247                // '$' 'variable'\n     || lk == 137759                // '$' 'version'\n     || lk == 139295                // '$' 'where'\n     || lk == 139807                // '$' 'while'\n     || lk == 141343)               // '$' 'with'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(205);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 53              // ':='\n           || l1 == 80)             // 'as'\n          {\n            if (l1 == 80)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(28);        // S^WS | '(:' | ':='\n            shiftT(53);             // ':='\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 95)             // 'collation'\n          {\n            shiftT(95);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(2, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      parse_GroupingVariable();\n      lookahead1W(205);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 53                  // ':='\n       || l1 == 80)                 // 'as'\n      {\n        if (l1 == 80)               // 'as'\n        {\n          whitespace();\n          parse_TypeDeclaration();\n        }\n        lookahead1W(28);            // S^WS | '(:' | ':='\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      if (l1 == 95)                 // 'collation'\n      {\n        shift(95);                  // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"GroupingSpec\", e0);\n  }\n\n  function try_GroupingSpec()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 36383                 // '$' 'after'\n     || lk == 37407                 // '$' 'allowing'\n     || lk == 37919                 // '$' 'ancestor'\n     || lk == 38431                 // '$' 'ancestor-or-self'\n     || lk == 38943                 // '$' 'and'\n     || lk == 39967                 // '$' 'append'\n     || lk == 40479                 // '$' 'array'\n     || lk == 40991                 // '$' 'as'\n     || lk == 41503                 // '$' 'ascending'\n     || lk == 42015                 // '$' 'at'\n     || lk == 42527                 // '$' 'attribute'\n     || lk == 43039                 // '$' 'base-uri'\n     || lk == 43551                 // '$' 'before'\n     || lk == 44063                 // '$' 'boundary-space'\n     || lk == 44575                 // '$' 'break'\n     || lk == 45599                 // '$' 'case'\n     || lk == 46111                 // '$' 'cast'\n     || lk == 46623                 // '$' 'castable'\n     || lk == 47135                 // '$' 'catch'\n     || lk == 48159                 // '$' 'child'\n     || lk == 48671                 // '$' 'collation'\n     || lk == 49695                 // '$' 'comment'\n     || lk == 50207                 // '$' 'constraint'\n     || lk == 50719                 // '$' 'construction'\n     || lk == 52255                 // '$' 'context'\n     || lk == 52767                 // '$' 'continue'\n     || lk == 53279                 // '$' 'copy'\n     || lk == 53791                 // '$' 'copy-namespaces'\n     || lk == 54303                 // '$' 'count'\n     || lk == 54815                 // '$' 'decimal-format'\n     || lk == 55839                 // '$' 'declare'\n     || lk == 56351                 // '$' 'default'\n     || lk == 56863                 // '$' 'delete'\n     || lk == 57375                 // '$' 'descendant'\n     || lk == 57887                 // '$' 'descendant-or-self'\n     || lk == 58399                 // '$' 'descending'\n     || lk == 60959                 // '$' 'div'\n     || lk == 61471                 // '$' 'document'\n     || lk == 61983                 // '$' 'document-node'\n     || lk == 62495                 // '$' 'element'\n     || lk == 63007                 // '$' 'else'\n     || lk == 63519                 // '$' 'empty'\n     || lk == 64031                 // '$' 'empty-sequence'\n     || lk == 64543                 // '$' 'encoding'\n     || lk == 65055                 // '$' 'end'\n     || lk == 66079                 // '$' 'eq'\n     || lk == 66591                 // '$' 'every'\n     || lk == 67615                 // '$' 'except'\n     || lk == 68127                 // '$' 'exit'\n     || lk == 68639                 // '$' 'external'\n     || lk == 69151                 // '$' 'false'\n     || lk == 69663                 // '$' 'first'\n     || lk == 70175                 // '$' 'following'\n     || lk == 70687                 // '$' 'following-sibling'\n     || lk == 71199                 // '$' 'for'\n     || lk == 72735                 // '$' 'from'\n     || lk == 73247                 // '$' 'ft-option'\n     || lk == 75295                 // '$' 'function'\n     || lk == 75807                 // '$' 'ge'\n     || lk == 76831                 // '$' 'group'\n     || lk == 77855                 // '$' 'gt'\n     || lk == 78367                 // '$' 'idiv'\n     || lk == 78879                 // '$' 'if'\n     || lk == 79391                 // '$' 'import'\n     || lk == 79903                 // '$' 'in'\n     || lk == 80415                 // '$' 'index'\n     || lk == 82463                 // '$' 'insert'\n     || lk == 82975                 // '$' 'instance'\n     || lk == 83487                 // '$' 'integrity'\n     || lk == 83999                 // '$' 'intersect'\n     || lk == 84511                 // '$' 'into'\n     || lk == 85023                 // '$' 'is'\n     || lk == 85535                 // '$' 'item'\n     || lk == 86047                 // '$' 'json'\n     || lk == 86559                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'jsoniq'\n     || lk == 88607                 // '$' 'last'\n     || lk == 89119                 // '$' 'lax'\n     || lk == 89631                 // '$' 'le'\n     || lk == 90655                 // '$' 'let'\n     || lk == 91679                 // '$' 'loop'\n     || lk == 92703                 // '$' 'lt'\n     || lk == 93727                 // '$' 'mod'\n     || lk == 94239                 // '$' 'modify'\n     || lk == 94751                 // '$' 'module'\n     || lk == 95775                 // '$' 'namespace'\n     || lk == 96287                 // '$' 'namespace-node'\n     || lk == 96799                 // '$' 'ne'\n     || lk == 99359                 // '$' 'node'\n     || lk == 99871                 // '$' 'nodes'\n     || lk == 100895                // '$' 'null'\n     || lk == 101407                // '$' 'object'\n     || lk == 103455                // '$' 'only'\n     || lk == 103967                // '$' 'option'\n     || lk == 104479                // '$' 'or'\n     || lk == 104991                // '$' 'order'\n     || lk == 105503                // '$' 'ordered'\n     || lk == 106015                // '$' 'ordering'\n     || lk == 107551                // '$' 'parent'\n     || lk == 110623                // '$' 'preceding'\n     || lk == 111135                // '$' 'preceding-sibling'\n     || lk == 112671                // '$' 'processing-instruction'\n     || lk == 113695                // '$' 'rename'\n     || lk == 114207                // '$' 'replace'\n     || lk == 114719                // '$' 'return'\n     || lk == 115231                // '$' 'returning'\n     || lk == 115743                // '$' 'revalidation'\n     || lk == 116767                // '$' 'satisfies'\n     || lk == 117279                // '$' 'schema'\n     || lk == 117791                // '$' 'schema-attribute'\n     || lk == 118303                // '$' 'schema-element'\n     || lk == 118815                // '$' 'score'\n     || lk == 119327                // '$' 'select'\n     || lk == 119839                // '$' 'self'\n     || lk == 122399                // '$' 'sliding'\n     || lk == 122911                // '$' 'some'\n     || lk == 123423                // '$' 'stable'\n     || lk == 123935                // '$' 'start'\n     || lk == 125471                // '$' 'strict'\n     || lk == 126495                // '$' 'structured-item'\n     || lk == 127007                // '$' 'switch'\n     || lk == 127519                // '$' 'text'\n     || lk == 129567                // '$' 'to'\n     || lk == 130079                // '$' 'treat'\n     || lk == 130591                // '$' 'true'\n     || lk == 131103                // '$' 'try'\n     || lk == 131615                // '$' 'tumbling'\n     || lk == 132127                // '$' 'type'\n     || lk == 132639                // '$' 'typeswitch'\n     || lk == 133151                // '$' 'union'\n     || lk == 134175                // '$' 'unordered'\n     || lk == 134687                // '$' 'updating'\n     || lk == 136223                // '$' 'validate'\n     || lk == 136735                // '$' 'value'\n     || lk == 137247                // '$' 'variable'\n     || lk == 137759                // '$' 'version'\n     || lk == 139295                // '$' 'where'\n     || lk == 139807                // '$' 'while'\n     || lk == 141343)               // '$' 'with'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(205);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 53              // ':='\n           || l1 == 80)             // 'as'\n          {\n            if (l1 == 80)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(28);        // S^WS | '(:' | ':='\n            shiftT(53);             // ':='\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 95)             // 'collation'\n          {\n            shiftT(95);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          memoize(2, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(2, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_GroupingVariable();\n      lookahead1W(205);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 53                  // ':='\n       || l1 == 80)                 // 'as'\n      {\n        if (l1 == 80)               // 'as'\n        {\n          try_TypeDeclaration();\n        }\n        lookahead1W(28);            // S^WS | '(:' | ':='\n        shiftT(53);                 // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_ExprSingle();\n      }\n      if (l1 == 95)                 // 'collation'\n      {\n        shiftT(95);                 // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shiftT(7);                  // URILiteral\n      }\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_GroupingVariable()\n  {\n    eventHandler.startNonterminal(\"GroupingVariable\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"GroupingVariable\", e0);\n  }\n\n  function try_GroupingVariable()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_OrderByClause()\n  {\n    eventHandler.startNonterminal(\"OrderByClause\", e0);\n    switch (l1)\n    {\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shift(88);                    // 'by'\n      break;\n    default:\n      shift(241);                   // 'stable'\n      lookahead1W(70);              // S^WS | '(:' | 'order'\n      shift(205);                   // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shift(88);                    // 'by'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_OrderSpecList();\n    eventHandler.endNonterminal(\"OrderByClause\", e0);\n  }\n\n  function try_OrderByClause()\n  {\n    switch (l1)\n    {\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shiftT(88);                   // 'by'\n      break;\n    default:\n      shiftT(241);                  // 'stable'\n      lookahead1W(70);              // S^WS | '(:' | 'order'\n      shiftT(205);                  // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shiftT(88);                   // 'by'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_OrderSpecList();\n  }\n\n  function parse_OrderSpecList()\n  {\n    eventHandler.startNonterminal(\"OrderSpecList\", e0);\n    parse_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_OrderSpec();\n    }\n    eventHandler.endNonterminal(\"OrderSpecList\", e0);\n  }\n\n  function try_OrderSpecList()\n  {\n    try_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_OrderSpec();\n    }\n  }\n\n  function parse_OrderSpec()\n  {\n    eventHandler.startNonterminal(\"OrderSpec\", e0);\n    parse_ExprSingle();\n    whitespace();\n    parse_OrderModifier();\n    eventHandler.endNonterminal(\"OrderSpec\", e0);\n  }\n\n  function try_OrderSpec()\n  {\n    try_ExprSingle();\n    try_OrderModifier();\n  }\n\n  function parse_OrderModifier()\n  {\n    eventHandler.startNonterminal(\"OrderModifier\", e0);\n    if (l1 == 81                    // 'ascending'\n     || l1 == 114)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 81:                      // 'ascending'\n        shift(81);                  // 'ascending'\n        break;\n      default:\n        shift(114);                 // 'descending'\n      }\n    }\n    lookahead1W(202);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 124)                  // 'empty'\n    {\n      shift(124);                   // 'empty'\n      lookahead1W(125);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 149:                     // 'greatest'\n        shift(149);                 // 'greatest'\n        break;\n      default:\n        shift(176);                 // 'least'\n      }\n    }\n    lookahead1W(199);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 95)                   // 'collation'\n    {\n      shift(95);                    // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n    }\n    eventHandler.endNonterminal(\"OrderModifier\", e0);\n  }\n\n  function try_OrderModifier()\n  {\n    if (l1 == 81                    // 'ascending'\n     || l1 == 114)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 81:                      // 'ascending'\n        shiftT(81);                 // 'ascending'\n        break;\n      default:\n        shiftT(114);                // 'descending'\n      }\n    }\n    lookahead1W(202);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 124)                  // 'empty'\n    {\n      shiftT(124);                  // 'empty'\n      lookahead1W(125);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 149:                     // 'greatest'\n        shiftT(149);                // 'greatest'\n        break;\n      default:\n        shiftT(176);                // 'least'\n      }\n    }\n    lookahead1W(199);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 95)                   // 'collation'\n    {\n      shiftT(95);                   // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n    }\n  }\n\n  function parse_ReturnClause()\n  {\n    eventHandler.startNonterminal(\"ReturnClause\", e0);\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReturnClause\", e0);\n  }\n\n  function try_ReturnClause()\n  {\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedExpr()\n  {\n    eventHandler.startNonterminal(\"QuantifiedExpr\", e0);\n    switch (l1)\n    {\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    default:\n      shift(130);                   // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_QuantifiedVarDecl();\n    }\n    shift(228);                     // 'satisfies'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedExpr\", e0);\n  }\n\n  function try_QuantifiedExpr()\n  {\n    switch (l1)\n    {\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    default:\n      shiftT(130);                  // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_QuantifiedVarDecl();\n    }\n    shiftT(228);                    // 'satisfies'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedVarDecl()\n  {\n    eventHandler.startNonterminal(\"QuantifiedVarDecl\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedVarDecl\", e0);\n  }\n\n  function try_QuantifiedVarDecl()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchExpr()\n  {\n    eventHandler.startNonterminal(\"SwitchExpr\", e0);\n    shift(248);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchExpr\", e0);\n  }\n\n  function try_SwitchExpr()\n  {\n    shiftT(248);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_SwitchCaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseClause()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseClause\", e0);\n    for (;;)\n    {\n      shift(89);                    // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseClause\", e0);\n  }\n\n  function try_SwitchCaseClause()\n  {\n    for (;;)\n    {\n      shiftT(89);                   // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseOperand()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseOperand\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseOperand\", e0);\n  }\n\n  function try_SwitchCaseOperand()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TypeswitchExpr()\n  {\n    eventHandler.startNonterminal(\"TypeswitchExpr\", e0);\n    shift(259);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TypeswitchExpr\", e0);\n  }\n\n  function try_TypeswitchExpr()\n  {\n    shiftT(259);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_CaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CaseClause()\n  {\n    eventHandler.startNonterminal(\"CaseClause\", e0);\n    shift(89);                      // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceTypeUnion();\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"CaseClause\", e0);\n  }\n\n  function try_CaseClause()\n  {\n    shiftT(89);                     // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceTypeUnion();\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SequenceTypeUnion()\n  {\n    eventHandler.startNonterminal(\"SequenceTypeUnion\", e0);\n    parse_SequenceType();\n    for (;;)\n    {\n      lookahead1W(138);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shift(284);                   // '|'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"SequenceTypeUnion\", e0);\n  }\n\n  function try_SequenceTypeUnion()\n  {\n    try_SequenceType();\n    for (;;)\n    {\n      lookahead1W(138);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shiftT(284);                  // '|'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_IfExpr()\n  {\n    eventHandler.startNonterminal(\"IfExpr\", e0);\n    shift(154);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shift(250);                     // 'then'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(123);                     // 'else'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"IfExpr\", e0);\n  }\n\n  function try_IfExpr()\n  {\n    shiftT(154);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shiftT(250);                    // 'then'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(123);                    // 'else'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TryCatchExpr()\n  {\n    eventHandler.startNonterminal(\"TryCatchExpr\", e0);\n    parse_TryClause();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      whitespace();\n      parse_CatchClause();\n      lookahead1W(207);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 92)                 // 'catch'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchExpr\", e0);\n  }\n\n  function try_TryCatchExpr()\n  {\n    try_TryClause();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      try_CatchClause();\n      lookahead1W(207);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 92)                 // 'catch'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TryClause()\n  {\n    eventHandler.startNonterminal(\"TryClause\", e0);\n    shift(256);                     // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TryTargetExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"TryClause\", e0);\n  }\n\n  function try_TryClause()\n  {\n    shiftT(256);                    // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TryTargetExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_TryTargetExpr()\n  {\n    eventHandler.startNonterminal(\"TryTargetExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"TryTargetExpr\", e0);\n  }\n\n  function try_TryTargetExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_CatchClause()\n  {\n    eventHandler.startNonterminal(\"CatchClause\", e0);\n    shift(92);                      // 'catch'\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_CatchErrorList();\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CatchClause\", e0);\n  }\n\n  function try_CatchClause()\n  {\n    shiftT(92);                     // 'catch'\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_CatchErrorList();\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_CatchErrorList()\n  {\n    eventHandler.startNonterminal(\"CatchErrorList\", e0);\n    parse_NameTest();\n    for (;;)\n    {\n      lookahead1W(140);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shift(284);                   // '|'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"CatchErrorList\", e0);\n  }\n\n  function try_CatchErrorList()\n  {\n    try_NameTest();\n    for (;;)\n    {\n      lookahead1W(140);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shiftT(284);                  // '|'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NameTest();\n    }\n  }\n\n  function parse_OrExpr()\n  {\n    eventHandler.startNonterminal(\"OrExpr\", e0);\n    parse_AndExpr();\n    for (;;)\n    {\n      if (l1 != 204)                // 'or'\n      {\n        break;\n      }\n      shift(204);                   // 'or'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AndExpr();\n    }\n    eventHandler.endNonterminal(\"OrExpr\", e0);\n  }\n\n  function try_OrExpr()\n  {\n    try_AndExpr();\n    for (;;)\n    {\n      if (l1 != 204)                // 'or'\n      {\n        break;\n      }\n      shiftT(204);                  // 'or'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AndExpr();\n    }\n  }\n\n  function parse_AndExpr()\n  {\n    eventHandler.startNonterminal(\"AndExpr\", e0);\n    parse_NotExpr();\n    for (;;)\n    {\n      if (l1 != 76)                 // 'and'\n      {\n        break;\n      }\n      shift(76);                    // 'and'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_NotExpr();\n    }\n    eventHandler.endNonterminal(\"AndExpr\", e0);\n  }\n\n  function try_AndExpr()\n  {\n    try_NotExpr();\n    for (;;)\n    {\n      if (l1 != 76)                 // 'and'\n      {\n        break;\n      }\n      shiftT(76);                   // 'and'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_NotExpr();\n    }\n  }\n\n  function parse_NotExpr()\n  {\n    eventHandler.startNonterminal(\"NotExpr\", e0);\n    if (l1 == 196)                  // 'not'\n    {\n      shift(196);                   // 'not'\n    }\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ComparisonExpr();\n    eventHandler.endNonterminal(\"NotExpr\", e0);\n  }\n\n  function try_NotExpr()\n  {\n    if (l1 == 196)                  // 'not'\n    {\n      shiftT(196);                  // 'not'\n    }\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ComparisonExpr();\n  }\n\n  function parse_ComparisonExpr()\n  {\n    eventHandler.startNonterminal(\"ComparisonExpr\", e0);\n    parse_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 55                    // '<'\n     || l1 == 58                    // '<<'\n     || l1 == 59                    // '<='\n     || l1 == 61                    // '='\n     || l1 == 62                    // '>'\n     || l1 == 63                    // '>='\n     || l1 == 64                    // '>>'\n     || l1 == 129                   // 'eq'\n     || l1 == 148                   // 'ge'\n     || l1 == 152                   // 'gt'\n     || l1 == 166                   // 'is'\n     || l1 == 175                   // 'le'\n     || l1 == 181                   // 'lt'\n     || l1 == 189)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 129:                     // 'eq'\n      case 148:                     // 'ge'\n      case 152:                     // 'gt'\n      case 175:                     // 'le'\n      case 181:                     // 'lt'\n      case 189:                     // 'ne'\n        whitespace();\n        parse_ValueComp();\n        break;\n      case 58:                      // '<<'\n      case 64:                      // '>>'\n      case 166:                     // 'is'\n        whitespace();\n        parse_NodeComp();\n        break;\n      default:\n        whitespace();\n        parse_GeneralComp();\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_FTContainsExpr();\n    }\n    eventHandler.endNonterminal(\"ComparisonExpr\", e0);\n  }\n\n  function try_ComparisonExpr()\n  {\n    try_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 55                    // '<'\n     || l1 == 58                    // '<<'\n     || l1 == 59                    // '<='\n     || l1 == 61                    // '='\n     || l1 == 62                    // '>'\n     || l1 == 63                    // '>='\n     || l1 == 64                    // '>>'\n     || l1 == 129                   // 'eq'\n     || l1 == 148                   // 'ge'\n     || l1 == 152                   // 'gt'\n     || l1 == 166                   // 'is'\n     || l1 == 175                   // 'le'\n     || l1 == 181                   // 'lt'\n     || l1 == 189)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 129:                     // 'eq'\n      case 148:                     // 'ge'\n      case 152:                     // 'gt'\n      case 175:                     // 'le'\n      case 181:                     // 'lt'\n      case 189:                     // 'ne'\n        try_ValueComp();\n        break;\n      case 58:                      // '<<'\n      case 64:                      // '>>'\n      case 166:                     // 'is'\n        try_NodeComp();\n        break;\n      default:\n        try_GeneralComp();\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_FTContainsExpr();\n    }\n  }\n\n  function parse_FTContainsExpr()\n  {\n    eventHandler.startNonterminal(\"FTContainsExpr\", e0);\n    parse_StringConcatExpr();\n    if (l1 == 100)                  // 'contains'\n    {\n      shift(100);                   // 'contains'\n      lookahead1W(79);              // S^WS | '(:' | 'text'\n      shift(249);                   // 'text'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      if (l1 == 277)                // 'without'\n      {\n        whitespace();\n        parse_FTIgnoreOption();\n      }\n    }\n    eventHandler.endNonterminal(\"FTContainsExpr\", e0);\n  }\n\n  function try_FTContainsExpr()\n  {\n    try_StringConcatExpr();\n    if (l1 == 100)                  // 'contains'\n    {\n      shiftT(100);                  // 'contains'\n      lookahead1W(79);              // S^WS | '(:' | 'text'\n      shiftT(249);                  // 'text'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      if (l1 == 277)                // 'without'\n      {\n        try_FTIgnoreOption();\n      }\n    }\n  }\n\n  function parse_StringConcatExpr()\n  {\n    eventHandler.startNonterminal(\"StringConcatExpr\", e0);\n    parse_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 285)                // '||'\n      {\n        break;\n      }\n      shift(285);                   // '||'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_RangeExpr();\n    }\n    eventHandler.endNonterminal(\"StringConcatExpr\", e0);\n  }\n\n  function try_StringConcatExpr()\n  {\n    try_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 285)                // '||'\n      {\n        break;\n      }\n      shiftT(285);                  // '||'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_RangeExpr();\n    }\n  }\n\n  function parse_RangeExpr()\n  {\n    eventHandler.startNonterminal(\"RangeExpr\", e0);\n    parse_AdditiveExpr();\n    if (l1 == 253)                  // 'to'\n    {\n      shift(253);                   // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"RangeExpr\", e0);\n  }\n\n  function try_RangeExpr()\n  {\n    try_AdditiveExpr();\n    if (l1 == 253)                  // 'to'\n    {\n      shiftT(253);                  // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_AdditiveExpr()\n  {\n    eventHandler.startNonterminal(\"AdditiveExpr\", e0);\n    parse_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 41:                      // '+'\n        shift(41);                  // '+'\n        break;\n      default:\n        shift(43);                  // '-'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_MultiplicativeExpr();\n    }\n    eventHandler.endNonterminal(\"AdditiveExpr\", e0);\n  }\n\n  function try_AdditiveExpr()\n  {\n    try_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 41:                      // '+'\n        shiftT(41);                 // '+'\n        break;\n      default:\n        shiftT(43);                 // '-'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_MultiplicativeExpr();\n    }\n  }\n\n  function parse_MultiplicativeExpr()\n  {\n    eventHandler.startNonterminal(\"MultiplicativeExpr\", e0);\n    parse_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 39                  // '*'\n       && l1 != 119                 // 'div'\n       && l1 != 153                 // 'idiv'\n       && l1 != 183)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 39:                      // '*'\n        shift(39);                  // '*'\n        break;\n      case 119:                     // 'div'\n        shift(119);                 // 'div'\n        break;\n      case 153:                     // 'idiv'\n        shift(153);                 // 'idiv'\n        break;\n      default:\n        shift(183);                 // 'mod'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_UnionExpr();\n    }\n    eventHandler.endNonterminal(\"MultiplicativeExpr\", e0);\n  }\n\n  function try_MultiplicativeExpr()\n  {\n    try_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 39                  // '*'\n       && l1 != 119                 // 'div'\n       && l1 != 153                 // 'idiv'\n       && l1 != 183)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 39:                      // '*'\n        shiftT(39);                 // '*'\n        break;\n      case 119:                     // 'div'\n        shiftT(119);                // 'div'\n        break;\n      case 153:                     // 'idiv'\n        shiftT(153);                // 'idiv'\n        break;\n      default:\n        shiftT(183);                // 'mod'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_UnionExpr();\n    }\n  }\n\n  function parse_UnionExpr()\n  {\n    eventHandler.startNonterminal(\"UnionExpr\", e0);\n    parse_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 260                 // 'union'\n       && l1 != 284)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 260:                     // 'union'\n        shift(260);                 // 'union'\n        break;\n      default:\n        shift(284);                 // '|'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_IntersectExceptExpr();\n    }\n    eventHandler.endNonterminal(\"UnionExpr\", e0);\n  }\n\n  function try_UnionExpr()\n  {\n    try_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 260                 // 'union'\n       && l1 != 284)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 260:                     // 'union'\n        shiftT(260);                // 'union'\n        break;\n      default:\n        shiftT(284);                // '|'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_IntersectExceptExpr();\n    }\n  }\n\n  function parse_IntersectExceptExpr()\n  {\n    eventHandler.startNonterminal(\"IntersectExceptExpr\", e0);\n    parse_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(221);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 132                 // 'except'\n       && l1 != 164)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 164:                     // 'intersect'\n        shift(164);                 // 'intersect'\n        break;\n      default:\n        shift(132);                 // 'except'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_InstanceofExpr();\n    }\n    eventHandler.endNonterminal(\"IntersectExceptExpr\", e0);\n  }\n\n  function try_IntersectExceptExpr()\n  {\n    try_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(221);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 132                 // 'except'\n       && l1 != 164)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 164:                     // 'intersect'\n        shiftT(164);                // 'intersect'\n        break;\n      default:\n        shiftT(132);                // 'except'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_InstanceofExpr();\n    }\n  }\n\n  function parse_InstanceofExpr()\n  {\n    eventHandler.startNonterminal(\"InstanceofExpr\", e0);\n    parse_TreatExpr();\n    lookahead1W(222);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 162)                  // 'instance'\n    {\n      shift(162);                   // 'instance'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shift(200);                   // 'of'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"InstanceofExpr\", e0);\n  }\n\n  function try_InstanceofExpr()\n  {\n    try_TreatExpr();\n    lookahead1W(222);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 162)                  // 'instance'\n    {\n      shiftT(162);                  // 'instance'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shiftT(200);                  // 'of'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_TreatExpr()\n  {\n    eventHandler.startNonterminal(\"TreatExpr\", e0);\n    parse_CastableExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 254)                  // 'treat'\n    {\n      shift(254);                   // 'treat'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"TreatExpr\", e0);\n  }\n\n  function try_TreatExpr()\n  {\n    try_CastableExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 254)                  // 'treat'\n    {\n      shiftT(254);                  // 'treat'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_CastableExpr()\n  {\n    eventHandler.startNonterminal(\"CastableExpr\", e0);\n    parse_CastExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 91)                   // 'castable'\n    {\n      shift(91);                    // 'castable'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastableExpr\", e0);\n  }\n\n  function try_CastableExpr()\n  {\n    try_CastExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 91)                   // 'castable'\n    {\n      shiftT(91);                   // 'castable'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_CastExpr()\n  {\n    eventHandler.startNonterminal(\"CastExpr\", e0);\n    parse_UnaryExpr();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'cast'\n    {\n      shift(90);                    // 'cast'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastExpr\", e0);\n  }\n\n  function try_CastExpr()\n  {\n    try_UnaryExpr();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'cast'\n    {\n      shiftT(90);                   // 'cast'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_UnaryExpr()\n  {\n    eventHandler.startNonterminal(\"UnaryExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 43:                      // '-'\n        shift(43);                  // '-'\n        break;\n      default:\n        shift(41);                  // '+'\n      }\n    }\n    whitespace();\n    parse_ValueExpr();\n    eventHandler.endNonterminal(\"UnaryExpr\", e0);\n  }\n\n  function try_UnaryExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 43:                      // '-'\n        shiftT(43);                 // '-'\n        break;\n      default:\n        shiftT(41);                 // '+'\n      }\n    }\n    try_ValueExpr();\n  }\n\n  function parse_ValueExpr()\n  {\n    eventHandler.startNonterminal(\"ValueExpr\", e0);\n    switch (l1)\n    {\n    case 266:                       // 'validate'\n      lookahead2W(188);             // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 89354:                     // 'validate' 'lax'\n    case 125706:                    // 'validate' 'strict'\n    case 132362:                    // 'validate' 'type'\n    case 144138:                    // 'validate' '{'\n      parse_ValidateExpr();\n      break;\n    case 36:                        // '(#'\n      parse_ExtensionExpr();\n      break;\n    default:\n      parse_SimpleMapExpr();\n    }\n    eventHandler.endNonterminal(\"ValueExpr\", e0);\n  }\n\n  function try_ValueExpr()\n  {\n    switch (l1)\n    {\n    case 266:                       // 'validate'\n      lookahead2W(188);             // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 89354:                     // 'validate' 'lax'\n    case 125706:                    // 'validate' 'strict'\n    case 132362:                    // 'validate' 'type'\n    case 144138:                    // 'validate' '{'\n      try_ValidateExpr();\n      break;\n    case 36:                        // '(#'\n      try_ExtensionExpr();\n      break;\n    default:\n      try_SimpleMapExpr();\n    }\n  }\n\n  function parse_SimpleMapExpr()\n  {\n    eventHandler.startNonterminal(\"SimpleMapExpr\", e0);\n    parse_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shift(26);                    // '!'\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PathExpr();\n    }\n    eventHandler.endNonterminal(\"SimpleMapExpr\", e0);\n  }\n\n  function try_SimpleMapExpr()\n  {\n    try_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shiftT(26);                   // '!'\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PathExpr();\n    }\n  }\n\n  function parse_GeneralComp()\n  {\n    eventHandler.startNonterminal(\"GeneralComp\", e0);\n    switch (l1)\n    {\n    case 61:                        // '='\n      shift(61);                    // '='\n      break;\n    case 27:                        // '!='\n      shift(27);                    // '!='\n      break;\n    case 55:                        // '<'\n      shift(55);                    // '<'\n      break;\n    case 59:                        // '<='\n      shift(59);                    // '<='\n      break;\n    case 62:                        // '>'\n      shift(62);                    // '>'\n      break;\n    default:\n      shift(63);                    // '>='\n    }\n    eventHandler.endNonterminal(\"GeneralComp\", e0);\n  }\n\n  function try_GeneralComp()\n  {\n    switch (l1)\n    {\n    case 61:                        // '='\n      shiftT(61);                   // '='\n      break;\n    case 27:                        // '!='\n      shiftT(27);                   // '!='\n      break;\n    case 55:                        // '<'\n      shiftT(55);                   // '<'\n      break;\n    case 59:                        // '<='\n      shiftT(59);                   // '<='\n      break;\n    case 62:                        // '>'\n      shiftT(62);                   // '>'\n      break;\n    default:\n      shiftT(63);                   // '>='\n    }\n  }\n\n  function parse_ValueComp()\n  {\n    eventHandler.startNonterminal(\"ValueComp\", e0);\n    switch (l1)\n    {\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    default:\n      shift(148);                   // 'ge'\n    }\n    eventHandler.endNonterminal(\"ValueComp\", e0);\n  }\n\n  function try_ValueComp()\n  {\n    switch (l1)\n    {\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    default:\n      shiftT(148);                  // 'ge'\n    }\n  }\n\n  function parse_NodeComp()\n  {\n    eventHandler.startNonterminal(\"NodeComp\", e0);\n    switch (l1)\n    {\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 58:                        // '<<'\n      shift(58);                    // '<<'\n      break;\n    default:\n      shift(64);                    // '>>'\n    }\n    eventHandler.endNonterminal(\"NodeComp\", e0);\n  }\n\n  function try_NodeComp()\n  {\n    switch (l1)\n    {\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 58:                        // '<<'\n      shiftT(58);                   // '<<'\n      break;\n    default:\n      shiftT(64);                   // '>>'\n    }\n  }\n\n  function parse_ValidateExpr()\n  {\n    eventHandler.startNonterminal(\"ValidateExpr\", e0);\n    shift(266);                     // 'validate'\n    lookahead1W(175);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 281)                  // '{'\n    {\n      switch (l1)\n      {\n      case 258:                     // 'type'\n        shift(258);                 // 'type'\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        break;\n      default:\n        whitespace();\n        parse_ValidationMode();\n      }\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ValidateExpr\", e0);\n  }\n\n  function try_ValidateExpr()\n  {\n    shiftT(266);                    // 'validate'\n    lookahead1W(175);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 281)                  // '{'\n    {\n      switch (l1)\n      {\n      case 258:                     // 'type'\n        shiftT(258);                // 'type'\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        break;\n      default:\n        try_ValidationMode();\n      }\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_ValidationMode()\n  {\n    eventHandler.startNonterminal(\"ValidationMode\", e0);\n    switch (l1)\n    {\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    default:\n      shift(245);                   // 'strict'\n    }\n    eventHandler.endNonterminal(\"ValidationMode\", e0);\n  }\n\n  function try_ValidationMode()\n  {\n    switch (l1)\n    {\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    default:\n      shiftT(245);                  // 'strict'\n    }\n  }\n\n  function parse_ExtensionExpr()\n  {\n    eventHandler.startNonterminal(\"ExtensionExpr\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(281);                     // '{'\n    lookahead1W(274);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ExtensionExpr\", e0);\n  }\n\n  function try_ExtensionExpr()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(281);                    // '{'\n    lookahead1W(274);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      try_Expr();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_Pragma()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    shift(36);                      // '(#'\n    lookahead1(242);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n    }\n    parse_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(0);                // PragmaContents\n      shift(1);                     // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shift(30);                      // '#)'\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  }\n\n  function try_Pragma()\n  {\n    shiftT(36);                     // '(#'\n    lookahead1(242);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n    }\n    try_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(0);                // PragmaContents\n      shiftT(1);                    // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shiftT(30);                     // '#)'\n  }\n\n  function parse_PathExpr()\n  {\n    eventHandler.startNonterminal(\"PathExpr\", e0);\n    switch (l1)\n    {\n    case 47:                        // '/'\n      shift(47);                    // '/'\n      lookahead1W(288);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 38:                      // ')'\n      case 39:                      // '*'\n      case 41:                      // '+'\n      case 42:                      // ','\n      case 43:                      // '-'\n      case 50:                      // ':'\n      case 54:                      // ';'\n      case 58:                      // '<<'\n      case 59:                      // '<='\n      case 61:                      // '='\n      case 62:                      // '>'\n      case 63:                      // '>='\n      case 64:                      // '>>'\n      case 70:                      // ']'\n      case 88:                      // 'by'\n      case 100:                     // 'contains'\n      case 209:                     // 'paragraphs'\n      case 237:                     // 'sentences'\n      case 252:                     // 'times'\n      case 279:                     // 'words'\n      case 284:                     // '|'\n      case 285:                     // '||'\n      case 286:                     // '|}'\n      case 287:                     // '}'\n        break;\n      default:\n        whitespace();\n        parse_RelativePathExpr();\n      }\n      break;\n    case 48:                        // '//'\n      shift(48);                    // '//'\n      lookahead1W(259);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_RelativePathExpr();\n      break;\n    default:\n      parse_RelativePathExpr();\n    }\n    eventHandler.endNonterminal(\"PathExpr\", e0);\n  }\n\n  function try_PathExpr()\n  {\n    switch (l1)\n    {\n    case 47:                        // '/'\n      shiftT(47);                   // '/'\n      lookahead1W(288);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 38:                      // ')'\n      case 39:                      // '*'\n      case 41:                      // '+'\n      case 42:                      // ','\n      case 43:                      // '-'\n      case 50:                      // ':'\n      case 54:                      // ';'\n      case 58:                      // '<<'\n      case 59:                      // '<='\n      case 61:                      // '='\n      case 62:                      // '>'\n      case 63:                      // '>='\n      case 64:                      // '>>'\n      case 70:                      // ']'\n      case 88:                      // 'by'\n      case 100:                     // 'contains'\n      case 209:                     // 'paragraphs'\n      case 237:                     // 'sentences'\n      case 252:                     // 'times'\n      case 279:                     // 'words'\n      case 284:                     // '|'\n      case 285:                     // '||'\n      case 286:                     // '|}'\n      case 287:                     // '}'\n        break;\n      default:\n        try_RelativePathExpr();\n      }\n      break;\n    case 48:                        // '//'\n      shiftT(48);                   // '//'\n      lookahead1W(259);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_RelativePathExpr();\n      break;\n    default:\n      try_RelativePathExpr();\n    }\n  }\n\n  function parse_RelativePathExpr()\n  {\n    eventHandler.startNonterminal(\"RelativePathExpr\", e0);\n    parse_PostfixExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 38                  // ')'\n       && lk != 39                  // '*'\n       && lk != 41                  // '+'\n       && lk != 42                  // ','\n       && lk != 43                  // '-'\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 50                  // ':'\n       && lk != 54                  // ';'\n       && lk != 55                  // '<'\n       && lk != 58                  // '<<'\n       && lk != 59                  // '<='\n       && lk != 61                  // '='\n       && lk != 62                  // '>'\n       && lk != 63                  // '>='\n       && lk != 64                  // '>>'\n       && lk != 70                  // ']'\n       && lk != 71                  // 'after'\n       && lk != 76                  // 'and'\n       && lk != 80                  // 'as'\n       && lk != 81                  // 'ascending'\n       && lk != 82                  // 'at'\n       && lk != 85                  // 'before'\n       && lk != 88                  // 'by'\n       && lk != 89                  // 'case'\n       && lk != 90                  // 'cast'\n       && lk != 91                  // 'castable'\n       && lk != 95                  // 'collation'\n       && lk != 100                 // 'contains'\n       && lk != 106                 // 'count'\n       && lk != 110                 // 'default'\n       && lk != 114                 // 'descending'\n       && lk != 119                 // 'div'\n       && lk != 123                 // 'else'\n       && lk != 124                 // 'empty'\n       && lk != 127                 // 'end'\n       && lk != 129                 // 'eq'\n       && lk != 132                 // 'except'\n       && lk != 139                 // 'for'\n       && lk != 148                 // 'ge'\n       && lk != 150                 // 'group'\n       && lk != 152                 // 'gt'\n       && lk != 153                 // 'idiv'\n       && lk != 162                 // 'instance'\n       && lk != 164                 // 'intersect'\n       && lk != 165                 // 'into'\n       && lk != 166                 // 'is'\n       && lk != 175                 // 'le'\n       && lk != 177                 // 'let'\n       && lk != 181                 // 'lt'\n       && lk != 183                 // 'mod'\n       && lk != 184                 // 'modify'\n       && lk != 189                 // 'ne'\n       && lk != 202                 // 'only'\n       && lk != 204                 // 'or'\n       && lk != 205                 // 'order'\n       && lk != 209                 // 'paragraphs'\n       && lk != 224                 // 'return'\n       && lk != 228                 // 'satisfies'\n       && lk != 237                 // 'sentences'\n       && lk != 241                 // 'stable'\n       && lk != 242                 // 'start'\n       && lk != 252                 // 'times'\n       && lk != 253                 // 'to'\n       && lk != 254                 // 'treat'\n       && lk != 260                 // 'union'\n       && lk != 272                 // 'where'\n       && lk != 276                 // 'with'\n       && lk != 279                 // 'words'\n       && lk != 284                 // '|'\n       && lk != 285                 // '||'\n       && lk != 286                 // '|}'\n       && lk != 287                 // '}'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 24090               // '!' '/'\n       && lk != 24602               // '!' '//'\n       && lk != 34330)              // '!' '@'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 47:                // '/'\n              shiftT(47);           // '/'\n              break;\n            case 48:                // '//'\n              shiftT(48);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(3, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 34330)              // '!' '@'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 47:                      // '/'\n        shift(47);                  // '/'\n        break;\n      case 48:                      // '//'\n        shift(48);                  // '//'\n        break;\n      default:\n        shift(26);                  // '!'\n      }\n      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_StepExpr();\n    }\n    eventHandler.endNonterminal(\"RelativePathExpr\", e0);\n  }\n\n  function try_RelativePathExpr()\n  {\n    try_PostfixExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 38                  // ')'\n       && lk != 39                  // '*'\n       && lk != 41                  // '+'\n       && lk != 42                  // ','\n       && lk != 43                  // '-'\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 50                  // ':'\n       && lk != 54                  // ';'\n       && lk != 55                  // '<'\n       && lk != 58                  // '<<'\n       && lk != 59                  // '<='\n       && lk != 61                  // '='\n       && lk != 62                  // '>'\n       && lk != 63                  // '>='\n       && lk != 64                  // '>>'\n       && lk != 70                  // ']'\n       && lk != 71                  // 'after'\n       && lk != 76                  // 'and'\n       && lk != 80                  // 'as'\n       && lk != 81                  // 'ascending'\n       && lk != 82                  // 'at'\n       && lk != 85                  // 'before'\n       && lk != 88                  // 'by'\n       && lk != 89                  // 'case'\n       && lk != 90                  // 'cast'\n       && lk != 91                  // 'castable'\n       && lk != 95                  // 'collation'\n       && lk != 100                 // 'contains'\n       && lk != 106                 // 'count'\n       && lk != 110                 // 'default'\n       && lk != 114                 // 'descending'\n       && lk != 119                 // 'div'\n       && lk != 123                 // 'else'\n       && lk != 124                 // 'empty'\n       && lk != 127                 // 'end'\n       && lk != 129                 // 'eq'\n       && lk != 132                 // 'except'\n       && lk != 139                 // 'for'\n       && lk != 148                 // 'ge'\n       && lk != 150                 // 'group'\n       && lk != 152                 // 'gt'\n       && lk != 153                 // 'idiv'\n       && lk != 162                 // 'instance'\n       && lk != 164                 // 'intersect'\n       && lk != 165                 // 'into'\n       && lk != 166                 // 'is'\n       && lk != 175                 // 'le'\n       && lk != 177                 // 'let'\n       && lk != 181                 // 'lt'\n       && lk != 183                 // 'mod'\n       && lk != 184                 // 'modify'\n       && lk != 189                 // 'ne'\n       && lk != 202                 // 'only'\n       && lk != 204                 // 'or'\n       && lk != 205                 // 'order'\n       && lk != 209                 // 'paragraphs'\n       && lk != 224                 // 'return'\n       && lk != 228                 // 'satisfies'\n       && lk != 237                 // 'sentences'\n       && lk != 241                 // 'stable'\n       && lk != 242                 // 'start'\n       && lk != 252                 // 'times'\n       && lk != 253                 // 'to'\n       && lk != 254                 // 'treat'\n       && lk != 260                 // 'union'\n       && lk != 272                 // 'where'\n       && lk != 276                 // 'with'\n       && lk != 279                 // 'words'\n       && lk != 284                 // '|'\n       && lk != 285                 // '||'\n       && lk != 286                 // '|}'\n       && lk != 287                 // '}'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 24090               // '!' '/'\n       && lk != 24602               // '!' '//'\n       && lk != 34330)              // '!' '@'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 47:                // '/'\n              shiftT(47);           // '/'\n              break;\n            case 48:                // '//'\n              shiftT(48);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            memoize(3, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(3, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 34330)              // '!' '@'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 47:                      // '/'\n        shiftT(47);                 // '/'\n        break;\n      case 48:                      // '//'\n        shiftT(48);                 // '//'\n        break;\n      default:\n        shiftT(26);                 // '!'\n      }\n      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_StepExpr();\n    }\n  }\n\n  function parse_StepExpr()\n  {\n    eventHandler.startNonterminal(\"StepExpr\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(287);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 122:                       // 'element'\n      lookahead2W(286);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 187:                       // 'namespace'\n    case 220:                       // 'processing-instruction'\n      lookahead2W(284);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 97:                        // 'comment'\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 249:                       // 'text'\n    case 262:                       // 'unordered'\n      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 79:                        // 'array'\n    case 125:                       // 'empty-sequence'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 234:                       // 'self'\n      lookahead2W(237);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 121:                       // 'document-node'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 188:                       // 'namespace-node'\n    case 189:                       // 'ne'\n    case 194:                       // 'node'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12935                 // 'false' EOF\n     || lk == 12997                 // 'null' EOF\n     || lk == 13055                 // 'true' EOF\n     || lk == 13447                 // 'false' '!'\n     || lk == 13509                 // 'null' '!'\n     || lk == 13567                 // 'true' '!'\n     || lk == 13959                 // 'false' '!='\n     || lk == 14021                 // 'null' '!='\n     || lk == 14079                 // 'true' '!='\n     || lk == 19591                 // 'false' ')'\n     || lk == 19653                 // 'null' ')'\n     || lk == 19711                 // 'true' ')'\n     || lk == 20103                 // 'false' '*'\n     || lk == 20165                 // 'null' '*'\n     || lk == 20223                 // 'true' '*'\n     || lk == 21127                 // 'false' '+'\n     || lk == 21189                 // 'null' '+'\n     || lk == 21247                 // 'true' '+'\n     || lk == 21639                 // 'false' ','\n     || lk == 21701                 // 'null' ','\n     || lk == 21759                 // 'true' ','\n     || lk == 22151                 // 'false' '-'\n     || lk == 22213                 // 'null' '-'\n     || lk == 22271                 // 'true' '-'\n     || lk == 24199                 // 'false' '/'\n     || lk == 24261                 // 'null' '/'\n     || lk == 24319                 // 'true' '/'\n     || lk == 24711                 // 'false' '//'\n     || lk == 24773                 // 'null' '//'\n     || lk == 24831                 // 'true' '//'\n     || lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855                 // 'true' ':'\n     || lk == 27783                 // 'false' ';'\n     || lk == 27845                 // 'null' ';'\n     || lk == 27903                 // 'true' ';'\n     || lk == 28295                 // 'false' '<'\n     || lk == 28357                 // 'null' '<'\n     || lk == 28415                 // 'true' '<'\n     || lk == 29831                 // 'false' '<<'\n     || lk == 29893                 // 'null' '<<'\n     || lk == 29951                 // 'true' '<<'\n     || lk == 30343                 // 'false' '<='\n     || lk == 30405                 // 'null' '<='\n     || lk == 30463                 // 'true' '<='\n     || lk == 31367                 // 'false' '='\n     || lk == 31429                 // 'null' '='\n     || lk == 31487                 // 'true' '='\n     || lk == 31879                 // 'false' '>'\n     || lk == 31941                 // 'null' '>'\n     || lk == 31999                 // 'true' '>'\n     || lk == 32391                 // 'false' '>='\n     || lk == 32453                 // 'null' '>='\n     || lk == 32511                 // 'true' '>='\n     || lk == 32903                 // 'false' '>>'\n     || lk == 32965                 // 'null' '>>'\n     || lk == 33023                 // 'true' '>>'\n     || lk == 35463                 // 'false' '['\n     || lk == 35525                 // 'null' '['\n     || lk == 35583                 // 'true' '['\n     || lk == 35975                 // 'false' ']'\n     || lk == 36037                 // 'null' ']'\n     || lk == 36095                 // 'true' ']'\n     || lk == 36435                 // 'attribute' 'after'\n     || lk == 36474                 // 'element' 'after'\n     || lk == 36487                 // 'false' 'after'\n     || lk == 36539                 // 'namespace' 'after'\n     || lk == 36549                 // 'null' 'after'\n     || lk == 36572                 // 'processing-instruction' 'after'\n     || lk == 36607                 // 'true' 'after'\n     || lk == 38995                 // 'attribute' 'and'\n     || lk == 39034                 // 'element' 'and'\n     || lk == 39047                 // 'false' 'and'\n     || lk == 39099                 // 'namespace' 'and'\n     || lk == 39109                 // 'null' 'and'\n     || lk == 39132                 // 'processing-instruction' 'and'\n     || lk == 39167                 // 'true' 'and'\n     || lk == 41043                 // 'attribute' 'as'\n     || lk == 41082                 // 'element' 'as'\n     || lk == 41095                 // 'false' 'as'\n     || lk == 41147                 // 'namespace' 'as'\n     || lk == 41157                 // 'null' 'as'\n     || lk == 41180                 // 'processing-instruction' 'as'\n     || lk == 41215                 // 'true' 'as'\n     || lk == 41555                 // 'attribute' 'ascending'\n     || lk == 41594                 // 'element' 'ascending'\n     || lk == 41607                 // 'false' 'ascending'\n     || lk == 41659                 // 'namespace' 'ascending'\n     || lk == 41669                 // 'null' 'ascending'\n     || lk == 41692                 // 'processing-instruction' 'ascending'\n     || lk == 41727                 // 'true' 'ascending'\n     || lk == 42067                 // 'attribute' 'at'\n     || lk == 42106                 // 'element' 'at'\n     || lk == 42119                 // 'false' 'at'\n     || lk == 42171                 // 'namespace' 'at'\n     || lk == 42181                 // 'null' 'at'\n     || lk == 42204                 // 'processing-instruction' 'at'\n     || lk == 42239                 // 'true' 'at'\n     || lk == 43603                 // 'attribute' 'before'\n     || lk == 43642                 // 'element' 'before'\n     || lk == 43655                 // 'false' 'before'\n     || lk == 43707                 // 'namespace' 'before'\n     || lk == 43717                 // 'null' 'before'\n     || lk == 43740                 // 'processing-instruction' 'before'\n     || lk == 43775                 // 'true' 'before'\n     || lk == 45191                 // 'false' 'by'\n     || lk == 45253                 // 'null' 'by'\n     || lk == 45311                 // 'true' 'by'\n     || lk == 45651                 // 'attribute' 'case'\n     || lk == 45690                 // 'element' 'case'\n     || lk == 45703                 // 'false' 'case'\n     || lk == 45755                 // 'namespace' 'case'\n     || lk == 45765                 // 'null' 'case'\n     || lk == 45788                 // 'processing-instruction' 'case'\n     || lk == 45823                 // 'true' 'case'\n     || lk == 46163                 // 'attribute' 'cast'\n     || lk == 46202                 // 'element' 'cast'\n     || lk == 46215                 // 'false' 'cast'\n     || lk == 46267                 // 'namespace' 'cast'\n     || lk == 46277                 // 'null' 'cast'\n     || lk == 46300                 // 'processing-instruction' 'cast'\n     || lk == 46335                 // 'true' 'cast'\n     || lk == 46675                 // 'attribute' 'castable'\n     || lk == 46714                 // 'element' 'castable'\n     || lk == 46727                 // 'false' 'castable'\n     || lk == 46779                 // 'namespace' 'castable'\n     || lk == 46789                 // 'null' 'castable'\n     || lk == 46812                 // 'processing-instruction' 'castable'\n     || lk == 46847                 // 'true' 'castable'\n     || lk == 48723                 // 'attribute' 'collation'\n     || lk == 48762                 // 'element' 'collation'\n     || lk == 48775                 // 'false' 'collation'\n     || lk == 48827                 // 'namespace' 'collation'\n     || lk == 48837                 // 'null' 'collation'\n     || lk == 48860                 // 'processing-instruction' 'collation'\n     || lk == 48895                 // 'true' 'collation'\n     || lk == 51335                 // 'false' 'contains'\n     || lk == 51397                 // 'null' 'contains'\n     || lk == 51455                 // 'true' 'contains'\n     || lk == 54355                 // 'attribute' 'count'\n     || lk == 54394                 // 'element' 'count'\n     || lk == 54407                 // 'false' 'count'\n     || lk == 54459                 // 'namespace' 'count'\n     || lk == 54469                 // 'null' 'count'\n     || lk == 54492                 // 'processing-instruction' 'count'\n     || lk == 54527                 // 'true' 'count'\n     || lk == 56403                 // 'attribute' 'default'\n     || lk == 56442                 // 'element' 'default'\n     || lk == 56455                 // 'false' 'default'\n     || lk == 56507                 // 'namespace' 'default'\n     || lk == 56517                 // 'null' 'default'\n     || lk == 56540                 // 'processing-instruction' 'default'\n     || lk == 56575                 // 'true' 'default'\n     || lk == 58451                 // 'attribute' 'descending'\n     || lk == 58490                 // 'element' 'descending'\n     || lk == 58503                 // 'false' 'descending'\n     || lk == 58555                 // 'namespace' 'descending'\n     || lk == 58565                 // 'null' 'descending'\n     || lk == 58588                 // 'processing-instruction' 'descending'\n     || lk == 58623                 // 'true' 'descending'\n     || lk == 61011                 // 'attribute' 'div'\n     || lk == 61050                 // 'element' 'div'\n     || lk == 61063                 // 'false' 'div'\n     || lk == 61115                 // 'namespace' 'div'\n     || lk == 61125                 // 'null' 'div'\n     || lk == 61148                 // 'processing-instruction' 'div'\n     || lk == 61183                 // 'true' 'div'\n     || lk == 63059                 // 'attribute' 'else'\n     || lk == 63098                 // 'element' 'else'\n     || lk == 63111                 // 'false' 'else'\n     || lk == 63163                 // 'namespace' 'else'\n     || lk == 63173                 // 'null' 'else'\n     || lk == 63196                 // 'processing-instruction' 'else'\n     || lk == 63231                 // 'true' 'else'\n     || lk == 63571                 // 'attribute' 'empty'\n     || lk == 63610                 // 'element' 'empty'\n     || lk == 63623                 // 'false' 'empty'\n     || lk == 63675                 // 'namespace' 'empty'\n     || lk == 63685                 // 'null' 'empty'\n     || lk == 63708                 // 'processing-instruction' 'empty'\n     || lk == 63743                 // 'true' 'empty'\n     || lk == 65107                 // 'attribute' 'end'\n     || lk == 65146                 // 'element' 'end'\n     || lk == 65159                 // 'false' 'end'\n     || lk == 65211                 // 'namespace' 'end'\n     || lk == 65221                 // 'null' 'end'\n     || lk == 65244                 // 'processing-instruction' 'end'\n     || lk == 65279                 // 'true' 'end'\n     || lk == 66131                 // 'attribute' 'eq'\n     || lk == 66170                 // 'element' 'eq'\n     || lk == 66183                 // 'false' 'eq'\n     || lk == 66235                 // 'namespace' 'eq'\n     || lk == 66245                 // 'null' 'eq'\n     || lk == 66268                 // 'processing-instruction' 'eq'\n     || lk == 66303                 // 'true' 'eq'\n     || lk == 67667                 // 'attribute' 'except'\n     || lk == 67706                 // 'element' 'except'\n     || lk == 67719                 // 'false' 'except'\n     || lk == 67771                 // 'namespace' 'except'\n     || lk == 67781                 // 'null' 'except'\n     || lk == 67804                 // 'processing-instruction' 'except'\n     || lk == 67839                 // 'true' 'except'\n     || lk == 71251                 // 'attribute' 'for'\n     || lk == 71290                 // 'element' 'for'\n     || lk == 71303                 // 'false' 'for'\n     || lk == 71355                 // 'namespace' 'for'\n     || lk == 71365                 // 'null' 'for'\n     || lk == 71388                 // 'processing-instruction' 'for'\n     || lk == 71423                 // 'true' 'for'\n     || lk == 75859                 // 'attribute' 'ge'\n     || lk == 75898                 // 'element' 'ge'\n     || lk == 75911                 // 'false' 'ge'\n     || lk == 75963                 // 'namespace' 'ge'\n     || lk == 75973                 // 'null' 'ge'\n     || lk == 75996                 // 'processing-instruction' 'ge'\n     || lk == 76031                 // 'true' 'ge'\n     || lk == 76883                 // 'attribute' 'group'\n     || lk == 76922                 // 'element' 'group'\n     || lk == 76935                 // 'false' 'group'\n     || lk == 76987                 // 'namespace' 'group'\n     || lk == 76997                 // 'null' 'group'\n     || lk == 77020                 // 'processing-instruction' 'group'\n     || lk == 77055                 // 'true' 'group'\n     || lk == 77907                 // 'attribute' 'gt'\n     || lk == 77946                 // 'element' 'gt'\n     || lk == 77959                 // 'false' 'gt'\n     || lk == 78011                 // 'namespace' 'gt'\n     || lk == 78021                 // 'null' 'gt'\n     || lk == 78044                 // 'processing-instruction' 'gt'\n     || lk == 78079                 // 'true' 'gt'\n     || lk == 78419                 // 'attribute' 'idiv'\n     || lk == 78458                 // 'element' 'idiv'\n     || lk == 78471                 // 'false' 'idiv'\n     || lk == 78523                 // 'namespace' 'idiv'\n     || lk == 78533                 // 'null' 'idiv'\n     || lk == 78556                 // 'processing-instruction' 'idiv'\n     || lk == 78591                 // 'true' 'idiv'\n     || lk == 83027                 // 'attribute' 'instance'\n     || lk == 83066                 // 'element' 'instance'\n     || lk == 83079                 // 'false' 'instance'\n     || lk == 83131                 // 'namespace' 'instance'\n     || lk == 83141                 // 'null' 'instance'\n     || lk == 83164                 // 'processing-instruction' 'instance'\n     || lk == 83199                 // 'true' 'instance'\n     || lk == 84051                 // 'attribute' 'intersect'\n     || lk == 84090                 // 'element' 'intersect'\n     || lk == 84103                 // 'false' 'intersect'\n     || lk == 84155                 // 'namespace' 'intersect'\n     || lk == 84165                 // 'null' 'intersect'\n     || lk == 84188                 // 'processing-instruction' 'intersect'\n     || lk == 84223                 // 'true' 'intersect'\n     || lk == 84563                 // 'attribute' 'into'\n     || lk == 84602                 // 'element' 'into'\n     || lk == 84615                 // 'false' 'into'\n     || lk == 84667                 // 'namespace' 'into'\n     || lk == 84677                 // 'null' 'into'\n     || lk == 84700                 // 'processing-instruction' 'into'\n     || lk == 84735                 // 'true' 'into'\n     || lk == 85075                 // 'attribute' 'is'\n     || lk == 85114                 // 'element' 'is'\n     || lk == 85127                 // 'false' 'is'\n     || lk == 85179                 // 'namespace' 'is'\n     || lk == 85189                 // 'null' 'is'\n     || lk == 85212                 // 'processing-instruction' 'is'\n     || lk == 85247                 // 'true' 'is'\n     || lk == 89683                 // 'attribute' 'le'\n     || lk == 89722                 // 'element' 'le'\n     || lk == 89735                 // 'false' 'le'\n     || lk == 89787                 // 'namespace' 'le'\n     || lk == 89797                 // 'null' 'le'\n     || lk == 89820                 // 'processing-instruction' 'le'\n     || lk == 89855                 // 'true' 'le'\n     || lk == 90707                 // 'attribute' 'let'\n     || lk == 90746                 // 'element' 'let'\n     || lk == 90759                 // 'false' 'let'\n     || lk == 90811                 // 'namespace' 'let'\n     || lk == 90821                 // 'null' 'let'\n     || lk == 90844                 // 'processing-instruction' 'let'\n     || lk == 90879                 // 'true' 'let'\n     || lk == 92755                 // 'attribute' 'lt'\n     || lk == 92794                 // 'element' 'lt'\n     || lk == 92807                 // 'false' 'lt'\n     || lk == 92859                 // 'namespace' 'lt'\n     || lk == 92869                 // 'null' 'lt'\n     || lk == 92892                 // 'processing-instruction' 'lt'\n     || lk == 92927                 // 'true' 'lt'\n     || lk == 93779                 // 'attribute' 'mod'\n     || lk == 93818                 // 'element' 'mod'\n     || lk == 93831                 // 'false' 'mod'\n     || lk == 93883                 // 'namespace' 'mod'\n     || lk == 93893                 // 'null' 'mod'\n     || lk == 93916                 // 'processing-instruction' 'mod'\n     || lk == 93951                 // 'true' 'mod'\n     || lk == 94291                 // 'attribute' 'modify'\n     || lk == 94330                 // 'element' 'modify'\n     || lk == 94343                 // 'false' 'modify'\n     || lk == 94395                 // 'namespace' 'modify'\n     || lk == 94405                 // 'null' 'modify'\n     || lk == 94428                 // 'processing-instruction' 'modify'\n     || lk == 94463                 // 'true' 'modify'\n     || lk == 96851                 // 'attribute' 'ne'\n     || lk == 96890                 // 'element' 'ne'\n     || lk == 96903                 // 'false' 'ne'\n     || lk == 96955                 // 'namespace' 'ne'\n     || lk == 96965                 // 'null' 'ne'\n     || lk == 96988                 // 'processing-instruction' 'ne'\n     || lk == 97023                 // 'true' 'ne'\n     || lk == 103507                // 'attribute' 'only'\n     || lk == 103546                // 'element' 'only'\n     || lk == 103559                // 'false' 'only'\n     || lk == 103611                // 'namespace' 'only'\n     || lk == 103621                // 'null' 'only'\n     || lk == 103644                // 'processing-instruction' 'only'\n     || lk == 103679                // 'true' 'only'\n     || lk == 104531                // 'attribute' 'or'\n     || lk == 104570                // 'element' 'or'\n     || lk == 104583                // 'false' 'or'\n     || lk == 104635                // 'namespace' 'or'\n     || lk == 104645                // 'null' 'or'\n     || lk == 104668                // 'processing-instruction' 'or'\n     || lk == 104703                // 'true' 'or'\n     || lk == 105043                // 'attribute' 'order'\n     || lk == 105082                // 'element' 'order'\n     || lk == 105095                // 'false' 'order'\n     || lk == 105147                // 'namespace' 'order'\n     || lk == 105157                // 'null' 'order'\n     || lk == 105180                // 'processing-instruction' 'order'\n     || lk == 105215                // 'true' 'order'\n     || lk == 107143                // 'false' 'paragraphs'\n     || lk == 107205                // 'null' 'paragraphs'\n     || lk == 107263                // 'true' 'paragraphs'\n     || lk == 114771                // 'attribute' 'return'\n     || lk == 114810                // 'element' 'return'\n     || lk == 114823                // 'false' 'return'\n     || lk == 114875                // 'namespace' 'return'\n     || lk == 114885                // 'null' 'return'\n     || lk == 114908                // 'processing-instruction' 'return'\n     || lk == 114943                // 'true' 'return'\n     || lk == 116819                // 'attribute' 'satisfies'\n     || lk == 116858                // 'element' 'satisfies'\n     || lk == 116871                // 'false' 'satisfies'\n     || lk == 116923                // 'namespace' 'satisfies'\n     || lk == 116933                // 'null' 'satisfies'\n     || lk == 116956                // 'processing-instruction' 'satisfies'\n     || lk == 116991                // 'true' 'satisfies'\n     || lk == 121479                // 'false' 'sentences'\n     || lk == 121541                // 'null' 'sentences'\n     || lk == 121599                // 'true' 'sentences'\n     || lk == 123475                // 'attribute' 'stable'\n     || lk == 123514                // 'element' 'stable'\n     || lk == 123527                // 'false' 'stable'\n     || lk == 123579                // 'namespace' 'stable'\n     || lk == 123589                // 'null' 'stable'\n     || lk == 123612                // 'processing-instruction' 'stable'\n     || lk == 123647                // 'true' 'stable'\n     || lk == 123987                // 'attribute' 'start'\n     || lk == 124026                // 'element' 'start'\n     || lk == 124039                // 'false' 'start'\n     || lk == 124091                // 'namespace' 'start'\n     || lk == 124101                // 'null' 'start'\n     || lk == 124124                // 'processing-instruction' 'start'\n     || lk == 124159                // 'true' 'start'\n     || lk == 129159                // 'false' 'times'\n     || lk == 129221                // 'null' 'times'\n     || lk == 129279                // 'true' 'times'\n     || lk == 129619                // 'attribute' 'to'\n     || lk == 129658                // 'element' 'to'\n     || lk == 129671                // 'false' 'to'\n     || lk == 129723                // 'namespace' 'to'\n     || lk == 129733                // 'null' 'to'\n     || lk == 129756                // 'processing-instruction' 'to'\n     || lk == 129791                // 'true' 'to'\n     || lk == 130131                // 'attribute' 'treat'\n     || lk == 130170                // 'element' 'treat'\n     || lk == 130183                // 'false' 'treat'\n     || lk == 130235                // 'namespace' 'treat'\n     || lk == 130245                // 'null' 'treat'\n     || lk == 130268                // 'processing-instruction' 'treat'\n     || lk == 130303                // 'true' 'treat'\n     || lk == 133203                // 'attribute' 'union'\n     || lk == 133242                // 'element' 'union'\n     || lk == 133255                // 'false' 'union'\n     || lk == 133307                // 'namespace' 'union'\n     || lk == 133317                // 'null' 'union'\n     || lk == 133340                // 'processing-instruction' 'union'\n     || lk == 133375                // 'true' 'union'\n     || lk == 139347                // 'attribute' 'where'\n     || lk == 139386                // 'element' 'where'\n     || lk == 139399                // 'false' 'where'\n     || lk == 139451                // 'namespace' 'where'\n     || lk == 139461                // 'null' 'where'\n     || lk == 139484                // 'processing-instruction' 'where'\n     || lk == 139519                // 'true' 'where'\n     || lk == 141395                // 'attribute' 'with'\n     || lk == 141434                // 'element' 'with'\n     || lk == 141447                // 'false' 'with'\n     || lk == 141499                // 'namespace' 'with'\n     || lk == 141509                // 'null' 'with'\n     || lk == 141532                // 'processing-instruction' 'with'\n     || lk == 141567                // 'true' 'with'\n     || lk == 142983                // 'false' 'words'\n     || lk == 143045                // 'null' 'words'\n     || lk == 143103                // 'true' 'words'\n     || lk == 145543                // 'false' '|'\n     || lk == 145605                // 'null' '|'\n     || lk == 145663                // 'true' '|'\n     || lk == 146055                // 'false' '||'\n     || lk == 146117                // 'null' '||'\n     || lk == 146175                // 'true' '||'\n     || lk == 146567                // 'false' '|}'\n     || lk == 146629                // 'null' '|}'\n     || lk == 146687                // 'true' '|}'\n     || lk == 147079                // 'false' '}'\n     || lk == 147141                // 'null' '}'\n     || lk == 147199)               // 'true' '}'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(4, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '$$'\n    case 33:                        // '%'\n    case 35:                        // '('\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n    case 69:                        // '['\n    case 281:                       // '{'\n    case 283:                       // '{|'\n    case 3155:                      // 'attribute' EQName^Token\n    case 3194:                      // 'element' EQName^Token\n    case 9915:                      // 'namespace' NCName^Token\n    case 9948:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14927:                     // 'array' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14969:                     // 'document-node' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14973:                     // 'empty-sequence' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14995:                     // 'function' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15002:                     // 'if' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15015:                     // 'item' '#'\n    case 15016:                     // 'json' '#'\n    case 15017:                     // 'json-item' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15036:                     // 'namespace-node' '#'\n    case 15037:                     // 'ne' '#'\n    case 15042:                     // 'node' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15078:                     // 'schema-attribute' '#'\n    case 15079:                     // 'schema-element' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15095:                     // 'structured-item' '#'\n    case 15096:                     // 'switch' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15107:                     // 'typeswitch' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18055:                     // 'false' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18067:                     // 'function' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18117:                     // 'null' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18175:                     // 'true' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 37459:                     // 'attribute' 'allowing'\n    case 37498:                     // 'element' 'allowing'\n    case 37563:                     // 'namespace' 'allowing'\n    case 37596:                     // 'processing-instruction' 'allowing'\n    case 37971:                     // 'attribute' 'ancestor'\n    case 38010:                     // 'element' 'ancestor'\n    case 38075:                     // 'namespace' 'ancestor'\n    case 38108:                     // 'processing-instruction' 'ancestor'\n    case 38483:                     // 'attribute' 'ancestor-or-self'\n    case 38522:                     // 'element' 'ancestor-or-self'\n    case 38587:                     // 'namespace' 'ancestor-or-self'\n    case 38620:                     // 'processing-instruction' 'ancestor-or-self'\n    case 40019:                     // 'attribute' 'append'\n    case 40058:                     // 'element' 'append'\n    case 40123:                     // 'namespace' 'append'\n    case 40156:                     // 'processing-instruction' 'append'\n    case 40531:                     // 'attribute' 'array'\n    case 40570:                     // 'element' 'array'\n    case 42579:                     // 'attribute' 'attribute'\n    case 42618:                     // 'element' 'attribute'\n    case 42683:                     // 'namespace' 'attribute'\n    case 42716:                     // 'processing-instruction' 'attribute'\n    case 43091:                     // 'attribute' 'base-uri'\n    case 43130:                     // 'element' 'base-uri'\n    case 43195:                     // 'namespace' 'base-uri'\n    case 43228:                     // 'processing-instruction' 'base-uri'\n    case 44115:                     // 'attribute' 'boundary-space'\n    case 44154:                     // 'element' 'boundary-space'\n    case 44219:                     // 'namespace' 'boundary-space'\n    case 44252:                     // 'processing-instruction' 'boundary-space'\n    case 44627:                     // 'attribute' 'break'\n    case 44666:                     // 'element' 'break'\n    case 44731:                     // 'namespace' 'break'\n    case 44764:                     // 'processing-instruction' 'break'\n    case 47187:                     // 'attribute' 'catch'\n    case 47226:                     // 'element' 'catch'\n    case 47291:                     // 'namespace' 'catch'\n    case 47324:                     // 'processing-instruction' 'catch'\n    case 48211:                     // 'attribute' 'child'\n    case 48250:                     // 'element' 'child'\n    case 48315:                     // 'namespace' 'child'\n    case 48348:                     // 'processing-instruction' 'child'\n    case 49747:                     // 'attribute' 'comment'\n    case 49786:                     // 'element' 'comment'\n    case 49851:                     // 'namespace' 'comment'\n    case 49884:                     // 'processing-instruction' 'comment'\n    case 50259:                     // 'attribute' 'constraint'\n    case 50298:                     // 'element' 'constraint'\n    case 50363:                     // 'namespace' 'constraint'\n    case 50396:                     // 'processing-instruction' 'constraint'\n    case 50771:                     // 'attribute' 'construction'\n    case 50810:                     // 'element' 'construction'\n    case 50875:                     // 'namespace' 'construction'\n    case 50908:                     // 'processing-instruction' 'construction'\n    case 52307:                     // 'attribute' 'context'\n    case 52346:                     // 'element' 'context'\n    case 52411:                     // 'namespace' 'context'\n    case 52444:                     // 'processing-instruction' 'context'\n    case 52819:                     // 'attribute' 'continue'\n    case 52858:                     // 'element' 'continue'\n    case 52923:                     // 'namespace' 'continue'\n    case 52956:                     // 'processing-instruction' 'continue'\n    case 53331:                     // 'attribute' 'copy'\n    case 53370:                     // 'element' 'copy'\n    case 53435:                     // 'namespace' 'copy'\n    case 53468:                     // 'processing-instruction' 'copy'\n    case 53843:                     // 'attribute' 'copy-namespaces'\n    case 53882:                     // 'element' 'copy-namespaces'\n    case 53947:                     // 'namespace' 'copy-namespaces'\n    case 53980:                     // 'processing-instruction' 'copy-namespaces'\n    case 54867:                     // 'attribute' 'decimal-format'\n    case 54906:                     // 'element' 'decimal-format'\n    case 54971:                     // 'namespace' 'decimal-format'\n    case 55004:                     // 'processing-instruction' 'decimal-format'\n    case 55891:                     // 'attribute' 'declare'\n    case 55930:                     // 'element' 'declare'\n    case 55995:                     // 'namespace' 'declare'\n    case 56028:                     // 'processing-instruction' 'declare'\n    case 56915:                     // 'attribute' 'delete'\n    case 56954:                     // 'element' 'delete'\n    case 57019:                     // 'namespace' 'delete'\n    case 57052:                     // 'processing-instruction' 'delete'\n    case 57427:                     // 'attribute' 'descendant'\n    case 57466:                     // 'element' 'descendant'\n    case 57531:                     // 'namespace' 'descendant'\n    case 57564:                     // 'processing-instruction' 'descendant'\n    case 57939:                     // 'attribute' 'descendant-or-self'\n    case 57978:                     // 'element' 'descendant-or-self'\n    case 58043:                     // 'namespace' 'descendant-or-self'\n    case 58076:                     // 'processing-instruction' 'descendant-or-self'\n    case 61523:                     // 'attribute' 'document'\n    case 61562:                     // 'element' 'document'\n    case 61627:                     // 'namespace' 'document'\n    case 61660:                     // 'processing-instruction' 'document'\n    case 62035:                     // 'attribute' 'document-node'\n    case 62074:                     // 'element' 'document-node'\n    case 62139:                     // 'namespace' 'document-node'\n    case 62172:                     // 'processing-instruction' 'document-node'\n    case 62547:                     // 'attribute' 'element'\n    case 62586:                     // 'element' 'element'\n    case 62651:                     // 'namespace' 'element'\n    case 62684:                     // 'processing-instruction' 'element'\n    case 64083:                     // 'attribute' 'empty-sequence'\n    case 64122:                     // 'element' 'empty-sequence'\n    case 64187:                     // 'namespace' 'empty-sequence'\n    case 64220:                     // 'processing-instruction' 'empty-sequence'\n    case 64595:                     // 'attribute' 'encoding'\n    case 64634:                     // 'element' 'encoding'\n    case 64699:                     // 'namespace' 'encoding'\n    case 64732:                     // 'processing-instruction' 'encoding'\n    case 66643:                     // 'attribute' 'every'\n    case 66682:                     // 'element' 'every'\n    case 66747:                     // 'namespace' 'every'\n    case 66780:                     // 'processing-instruction' 'every'\n    case 68179:                     // 'attribute' 'exit'\n    case 68218:                     // 'element' 'exit'\n    case 68283:                     // 'namespace' 'exit'\n    case 68316:                     // 'processing-instruction' 'exit'\n    case 68691:                     // 'attribute' 'external'\n    case 68730:                     // 'element' 'external'\n    case 68795:                     // 'namespace' 'external'\n    case 68828:                     // 'processing-instruction' 'external'\n    case 69203:                     // 'attribute' 'false'\n    case 69242:                     // 'element' 'false'\n    case 69307:                     // 'namespace' 'false'\n    case 69340:                     // 'processing-instruction' 'false'\n    case 69715:                     // 'attribute' 'first'\n    case 69754:                     // 'element' 'first'\n    case 69819:                     // 'namespace' 'first'\n    case 69852:                     // 'processing-instruction' 'first'\n    case 70227:                     // 'attribute' 'following'\n    case 70266:                     // 'element' 'following'\n    case 70331:                     // 'namespace' 'following'\n    case 70364:                     // 'processing-instruction' 'following'\n    case 70739:                     // 'attribute' 'following-sibling'\n    case 70778:                     // 'element' 'following-sibling'\n    case 70843:                     // 'namespace' 'following-sibling'\n    case 70876:                     // 'processing-instruction' 'following-sibling'\n    case 72787:                     // 'attribute' 'from'\n    case 72826:                     // 'element' 'from'\n    case 72891:                     // 'namespace' 'from'\n    case 72924:                     // 'processing-instruction' 'from'\n    case 73299:                     // 'attribute' 'ft-option'\n    case 73338:                     // 'element' 'ft-option'\n    case 73403:                     // 'namespace' 'ft-option'\n    case 73436:                     // 'processing-instruction' 'ft-option'\n    case 75347:                     // 'attribute' 'function'\n    case 75386:                     // 'element' 'function'\n    case 75451:                     // 'namespace' 'function'\n    case 75484:                     // 'processing-instruction' 'function'\n    case 78931:                     // 'attribute' 'if'\n    case 78970:                     // 'element' 'if'\n    case 79035:                     // 'namespace' 'if'\n    case 79068:                     // 'processing-instruction' 'if'\n    case 79443:                     // 'attribute' 'import'\n    case 79482:                     // 'element' 'import'\n    case 79547:                     // 'namespace' 'import'\n    case 79580:                     // 'processing-instruction' 'import'\n    case 79955:                     // 'attribute' 'in'\n    case 79994:                     // 'element' 'in'\n    case 80059:                     // 'namespace' 'in'\n    case 80092:                     // 'processing-instruction' 'in'\n    case 80467:                     // 'attribute' 'index'\n    case 80506:                     // 'element' 'index'\n    case 80571:                     // 'namespace' 'index'\n    case 80604:                     // 'processing-instruction' 'index'\n    case 82515:                     // 'attribute' 'insert'\n    case 82554:                     // 'element' 'insert'\n    case 82619:                     // 'namespace' 'insert'\n    case 82652:                     // 'processing-instruction' 'insert'\n    case 83539:                     // 'attribute' 'integrity'\n    case 83578:                     // 'element' 'integrity'\n    case 83643:                     // 'namespace' 'integrity'\n    case 83676:                     // 'processing-instruction' 'integrity'\n    case 85587:                     // 'attribute' 'item'\n    case 85626:                     // 'element' 'item'\n    case 85691:                     // 'namespace' 'item'\n    case 85724:                     // 'processing-instruction' 'item'\n    case 86099:                     // 'attribute' 'json'\n    case 86138:                     // 'element' 'json'\n    case 86203:                     // 'namespace' 'json'\n    case 86236:                     // 'processing-instruction' 'json'\n    case 86611:                     // 'attribute' 'json-item'\n    case 86650:                     // 'element' 'json-item'\n    case 87123:                     // 'attribute' 'jsoniq'\n    case 87162:                     // 'element' 'jsoniq'\n    case 87227:                     // 'namespace' 'jsoniq'\n    case 87260:                     // 'processing-instruction' 'jsoniq'\n    case 88659:                     // 'attribute' 'last'\n    case 88698:                     // 'element' 'last'\n    case 88763:                     // 'namespace' 'last'\n    case 88796:                     // 'processing-instruction' 'last'\n    case 89171:                     // 'attribute' 'lax'\n    case 89210:                     // 'element' 'lax'\n    case 89275:                     // 'namespace' 'lax'\n    case 89308:                     // 'processing-instruction' 'lax'\n    case 91731:                     // 'attribute' 'loop'\n    case 91770:                     // 'element' 'loop'\n    case 91835:                     // 'namespace' 'loop'\n    case 91868:                     // 'processing-instruction' 'loop'\n    case 94803:                     // 'attribute' 'module'\n    case 94842:                     // 'element' 'module'\n    case 94907:                     // 'namespace' 'module'\n    case 94940:                     // 'processing-instruction' 'module'\n    case 95827:                     // 'attribute' 'namespace'\n    case 95866:                     // 'element' 'namespace'\n    case 95931:                     // 'namespace' 'namespace'\n    case 95964:                     // 'processing-instruction' 'namespace'\n    case 96339:                     // 'attribute' 'namespace-node'\n    case 96378:                     // 'element' 'namespace-node'\n    case 96443:                     // 'namespace' 'namespace-node'\n    case 96476:                     // 'processing-instruction' 'namespace-node'\n    case 99411:                     // 'attribute' 'node'\n    case 99450:                     // 'element' 'node'\n    case 99515:                     // 'namespace' 'node'\n    case 99548:                     // 'processing-instruction' 'node'\n    case 99923:                     // 'attribute' 'nodes'\n    case 99962:                     // 'element' 'nodes'\n    case 100027:                    // 'namespace' 'nodes'\n    case 100060:                    // 'processing-instruction' 'nodes'\n    case 100947:                    // 'attribute' 'null'\n    case 100986:                    // 'element' 'null'\n    case 101051:                    // 'namespace' 'null'\n    case 101084:                    // 'processing-instruction' 'null'\n    case 101459:                    // 'attribute' 'object'\n    case 101498:                    // 'element' 'object'\n    case 101563:                    // 'namespace' 'object'\n    case 101596:                    // 'processing-instruction' 'object'\n    case 104019:                    // 'attribute' 'option'\n    case 104058:                    // 'element' 'option'\n    case 104123:                    // 'namespace' 'option'\n    case 104156:                    // 'processing-instruction' 'option'\n    case 105555:                    // 'attribute' 'ordered'\n    case 105594:                    // 'element' 'ordered'\n    case 105659:                    // 'namespace' 'ordered'\n    case 105692:                    // 'processing-instruction' 'ordered'\n    case 106067:                    // 'attribute' 'ordering'\n    case 106106:                    // 'element' 'ordering'\n    case 106171:                    // 'namespace' 'ordering'\n    case 106204:                    // 'processing-instruction' 'ordering'\n    case 107603:                    // 'attribute' 'parent'\n    case 107642:                    // 'element' 'parent'\n    case 107707:                    // 'namespace' 'parent'\n    case 107740:                    // 'processing-instruction' 'parent'\n    case 110675:                    // 'attribute' 'preceding'\n    case 110714:                    // 'element' 'preceding'\n    case 110779:                    // 'namespace' 'preceding'\n    case 110812:                    // 'processing-instruction' 'preceding'\n    case 111187:                    // 'attribute' 'preceding-sibling'\n    case 111226:                    // 'element' 'preceding-sibling'\n    case 111291:                    // 'namespace' 'preceding-sibling'\n    case 111324:                    // 'processing-instruction' 'preceding-sibling'\n    case 112723:                    // 'attribute' 'processing-instruction'\n    case 112762:                    // 'element' 'processing-instruction'\n    case 112827:                    // 'namespace' 'processing-instruction'\n    case 112860:                    // 'processing-instruction' 'processing-instruction'\n    case 113747:                    // 'attribute' 'rename'\n    case 113786:                    // 'element' 'rename'\n    case 113851:                    // 'namespace' 'rename'\n    case 113884:                    // 'processing-instruction' 'rename'\n    case 114259:                    // 'attribute' 'replace'\n    case 114298:                    // 'element' 'replace'\n    case 114363:                    // 'namespace' 'replace'\n    case 114396:                    // 'processing-instruction' 'replace'\n    case 115283:                    // 'attribute' 'returning'\n    case 115322:                    // 'element' 'returning'\n    case 115387:                    // 'namespace' 'returning'\n    case 115420:                    // 'processing-instruction' 'returning'\n    case 115795:                    // 'attribute' 'revalidation'\n    case 115834:                    // 'element' 'revalidation'\n    case 115899:                    // 'namespace' 'revalidation'\n    case 115932:                    // 'processing-instruction' 'revalidation'\n    case 117331:                    // 'attribute' 'schema'\n    case 117370:                    // 'element' 'schema'\n    case 117435:                    // 'namespace' 'schema'\n    case 117468:                    // 'processing-instruction' 'schema'\n    case 117843:                    // 'attribute' 'schema-attribute'\n    case 117882:                    // 'element' 'schema-attribute'\n    case 117947:                    // 'namespace' 'schema-attribute'\n    case 117980:                    // 'processing-instruction' 'schema-attribute'\n    case 118355:                    // 'attribute' 'schema-element'\n    case 118394:                    // 'element' 'schema-element'\n    case 118459:                    // 'namespace' 'schema-element'\n    case 118492:                    // 'processing-instruction' 'schema-element'\n    case 118867:                    // 'attribute' 'score'\n    case 118906:                    // 'element' 'score'\n    case 118971:                    // 'namespace' 'score'\n    case 119004:                    // 'processing-instruction' 'score'\n    case 119379:                    // 'attribute' 'select'\n    case 119418:                    // 'element' 'select'\n    case 119483:                    // 'namespace' 'select'\n    case 119516:                    // 'processing-instruction' 'select'\n    case 119891:                    // 'attribute' 'self'\n    case 119930:                    // 'element' 'self'\n    case 119995:                    // 'namespace' 'self'\n    case 120028:                    // 'processing-instruction' 'self'\n    case 122451:                    // 'attribute' 'sliding'\n    case 122490:                    // 'element' 'sliding'\n    case 122555:                    // 'namespace' 'sliding'\n    case 122588:                    // 'processing-instruction' 'sliding'\n    case 122963:                    // 'attribute' 'some'\n    case 123002:                    // 'element' 'some'\n    case 123067:                    // 'namespace' 'some'\n    case 123100:                    // 'processing-instruction' 'some'\n    case 125523:                    // 'attribute' 'strict'\n    case 125562:                    // 'element' 'strict'\n    case 125627:                    // 'namespace' 'strict'\n    case 125660:                    // 'processing-instruction' 'strict'\n    case 126547:                    // 'attribute' 'structured-item'\n    case 126586:                    // 'element' 'structured-item'\n    case 127059:                    // 'attribute' 'switch'\n    case 127098:                    // 'element' 'switch'\n    case 127163:                    // 'namespace' 'switch'\n    case 127196:                    // 'processing-instruction' 'switch'\n    case 127571:                    // 'attribute' 'text'\n    case 127610:                    // 'element' 'text'\n    case 127675:                    // 'namespace' 'text'\n    case 127708:                    // 'processing-instruction' 'text'\n    case 130643:                    // 'attribute' 'true'\n    case 130682:                    // 'element' 'true'\n    case 130747:                    // 'namespace' 'true'\n    case 130780:                    // 'processing-instruction' 'true'\n    case 131155:                    // 'attribute' 'try'\n    case 131194:                    // 'element' 'try'\n    case 131259:                    // 'namespace' 'try'\n    case 131292:                    // 'processing-instruction' 'try'\n    case 131667:                    // 'attribute' 'tumbling'\n    case 131706:                    // 'element' 'tumbling'\n    case 131771:                    // 'namespace' 'tumbling'\n    case 131804:                    // 'processing-instruction' 'tumbling'\n    case 132179:                    // 'attribute' 'type'\n    case 132218:                    // 'element' 'type'\n    case 132283:                    // 'namespace' 'type'\n    case 132316:                    // 'processing-instruction' 'type'\n    case 132691:                    // 'attribute' 'typeswitch'\n    case 132730:                    // 'element' 'typeswitch'\n    case 132795:                    // 'namespace' 'typeswitch'\n    case 132828:                    // 'processing-instruction' 'typeswitch'\n    case 134227:                    // 'attribute' 'unordered'\n    case 134266:                    // 'element' 'unordered'\n    case 134331:                    // 'namespace' 'unordered'\n    case 134364:                    // 'processing-instruction' 'unordered'\n    case 134739:                    // 'attribute' 'updating'\n    case 134778:                    // 'element' 'updating'\n    case 134843:                    // 'namespace' 'updating'\n    case 134876:                    // 'processing-instruction' 'updating'\n    case 136275:                    // 'attribute' 'validate'\n    case 136314:                    // 'element' 'validate'\n    case 136379:                    // 'namespace' 'validate'\n    case 136412:                    // 'processing-instruction' 'validate'\n    case 136787:                    // 'attribute' 'value'\n    case 136826:                    // 'element' 'value'\n    case 136891:                    // 'namespace' 'value'\n    case 136924:                    // 'processing-instruction' 'value'\n    case 137299:                    // 'attribute' 'variable'\n    case 137338:                    // 'element' 'variable'\n    case 137403:                    // 'namespace' 'variable'\n    case 137436:                    // 'processing-instruction' 'variable'\n    case 137811:                    // 'attribute' 'version'\n    case 137850:                    // 'element' 'version'\n    case 137915:                    // 'namespace' 'version'\n    case 137948:                    // 'processing-instruction' 'version'\n    case 139859:                    // 'attribute' 'while'\n    case 139898:                    // 'element' 'while'\n    case 139963:                    // 'namespace' 'while'\n    case 139996:                    // 'processing-instruction' 'while'\n    case 143955:                    // 'attribute' '{'\n    case 143969:                    // 'comment' '{'\n    case 143992:                    // 'document' '{'\n    case 143994:                    // 'element' '{'\n    case 144059:                    // 'namespace' '{'\n    case 144078:                    // 'ordered' '{'\n    case 144092:                    // 'processing-instruction' '{'\n    case 144121:                    // 'text' '{'\n    case 144134:                    // 'unordered' '{'\n      parse_PostfixExpr();\n      break;\n    default:\n      parse_AxisStep();\n    }\n    eventHandler.endNonterminal(\"StepExpr\", e0);\n  }\n\n  function try_StepExpr()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(287);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 122:                       // 'element'\n      lookahead2W(286);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 187:                       // 'namespace'\n    case 220:                       // 'processing-instruction'\n      lookahead2W(284);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 97:                        // 'comment'\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 249:                       // 'text'\n    case 262:                       // 'unordered'\n      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 79:                        // 'array'\n    case 125:                       // 'empty-sequence'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 234:                       // 'self'\n      lookahead2W(237);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 121:                       // 'document-node'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 188:                       // 'namespace-node'\n    case 189:                       // 'ne'\n    case 194:                       // 'node'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12935                 // 'false' EOF\n     || lk == 12997                 // 'null' EOF\n     || lk == 13055                 // 'true' EOF\n     || lk == 13447                 // 'false' '!'\n     || lk == 13509                 // 'null' '!'\n     || lk == 13567                 // 'true' '!'\n     || lk == 13959                 // 'false' '!='\n     || lk == 14021                 // 'null' '!='\n     || lk == 14079                 // 'true' '!='\n     || lk == 19591                 // 'false' ')'\n     || lk == 19653                 // 'null' ')'\n     || lk == 19711                 // 'true' ')'\n     || lk == 20103                 // 'false' '*'\n     || lk == 20165                 // 'null' '*'\n     || lk == 20223                 // 'true' '*'\n     || lk == 21127                 // 'false' '+'\n     || lk == 21189                 // 'null' '+'\n     || lk == 21247                 // 'true' '+'\n     || lk == 21639                 // 'false' ','\n     || lk == 21701                 // 'null' ','\n     || lk == 21759                 // 'true' ','\n     || lk == 22151                 // 'false' '-'\n     || lk == 22213                 // 'null' '-'\n     || lk == 22271                 // 'true' '-'\n     || lk == 24199                 // 'false' '/'\n     || lk == 24261                 // 'null' '/'\n     || lk == 24319                 // 'true' '/'\n     || lk == 24711                 // 'false' '//'\n     || lk == 24773                 // 'null' '//'\n     || lk == 24831                 // 'true' '//'\n     || lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855                 // 'true' ':'\n     || lk == 27783                 // 'false' ';'\n     || lk == 27845                 // 'null' ';'\n     || lk == 27903                 // 'true' ';'\n     || lk == 28295                 // 'false' '<'\n     || lk == 28357                 // 'null' '<'\n     || lk == 28415                 // 'true' '<'\n     || lk == 29831                 // 'false' '<<'\n     || lk == 29893                 // 'null' '<<'\n     || lk == 29951                 // 'true' '<<'\n     || lk == 30343                 // 'false' '<='\n     || lk == 30405                 // 'null' '<='\n     || lk == 30463                 // 'true' '<='\n     || lk == 31367                 // 'false' '='\n     || lk == 31429                 // 'null' '='\n     || lk == 31487                 // 'true' '='\n     || lk == 31879                 // 'false' '>'\n     || lk == 31941                 // 'null' '>'\n     || lk == 31999                 // 'true' '>'\n     || lk == 32391                 // 'false' '>='\n     || lk == 32453                 // 'null' '>='\n     || lk == 32511                 // 'true' '>='\n     || lk == 32903                 // 'false' '>>'\n     || lk == 32965                 // 'null' '>>'\n     || lk == 33023                 // 'true' '>>'\n     || lk == 35463                 // 'false' '['\n     || lk == 35525                 // 'null' '['\n     || lk == 35583                 // 'true' '['\n     || lk == 35975                 // 'false' ']'\n     || lk == 36037                 // 'null' ']'\n     || lk == 36095                 // 'true' ']'\n     || lk == 36435                 // 'attribute' 'after'\n     || lk == 36474                 // 'element' 'after'\n     || lk == 36487                 // 'false' 'after'\n     || lk == 36539                 // 'namespace' 'after'\n     || lk == 36549                 // 'null' 'after'\n     || lk == 36572                 // 'processing-instruction' 'after'\n     || lk == 36607                 // 'true' 'after'\n     || lk == 38995                 // 'attribute' 'and'\n     || lk == 39034                 // 'element' 'and'\n     || lk == 39047                 // 'false' 'and'\n     || lk == 39099                 // 'namespace' 'and'\n     || lk == 39109                 // 'null' 'and'\n     || lk == 39132                 // 'processing-instruction' 'and'\n     || lk == 39167                 // 'true' 'and'\n     || lk == 41043                 // 'attribute' 'as'\n     || lk == 41082                 // 'element' 'as'\n     || lk == 41095                 // 'false' 'as'\n     || lk == 41147                 // 'namespace' 'as'\n     || lk == 41157                 // 'null' 'as'\n     || lk == 41180                 // 'processing-instruction' 'as'\n     || lk == 41215                 // 'true' 'as'\n     || lk == 41555                 // 'attribute' 'ascending'\n     || lk == 41594                 // 'element' 'ascending'\n     || lk == 41607                 // 'false' 'ascending'\n     || lk == 41659                 // 'namespace' 'ascending'\n     || lk == 41669                 // 'null' 'ascending'\n     || lk == 41692                 // 'processing-instruction' 'ascending'\n     || lk == 41727                 // 'true' 'ascending'\n     || lk == 42067                 // 'attribute' 'at'\n     || lk == 42106                 // 'element' 'at'\n     || lk == 42119                 // 'false' 'at'\n     || lk == 42171                 // 'namespace' 'at'\n     || lk == 42181                 // 'null' 'at'\n     || lk == 42204                 // 'processing-instruction' 'at'\n     || lk == 42239                 // 'true' 'at'\n     || lk == 43603                 // 'attribute' 'before'\n     || lk == 43642                 // 'element' 'before'\n     || lk == 43655                 // 'false' 'before'\n     || lk == 43707                 // 'namespace' 'before'\n     || lk == 43717                 // 'null' 'before'\n     || lk == 43740                 // 'processing-instruction' 'before'\n     || lk == 43775                 // 'true' 'before'\n     || lk == 45191                 // 'false' 'by'\n     || lk == 45253                 // 'null' 'by'\n     || lk == 45311                 // 'true' 'by'\n     || lk == 45651                 // 'attribute' 'case'\n     || lk == 45690                 // 'element' 'case'\n     || lk == 45703                 // 'false' 'case'\n     || lk == 45755                 // 'namespace' 'case'\n     || lk == 45765                 // 'null' 'case'\n     || lk == 45788                 // 'processing-instruction' 'case'\n     || lk == 45823                 // 'true' 'case'\n     || lk == 46163                 // 'attribute' 'cast'\n     || lk == 46202                 // 'element' 'cast'\n     || lk == 46215                 // 'false' 'cast'\n     || lk == 46267                 // 'namespace' 'cast'\n     || lk == 46277                 // 'null' 'cast'\n     || lk == 46300                 // 'processing-instruction' 'cast'\n     || lk == 46335                 // 'true' 'cast'\n     || lk == 46675                 // 'attribute' 'castable'\n     || lk == 46714                 // 'element' 'castable'\n     || lk == 46727                 // 'false' 'castable'\n     || lk == 46779                 // 'namespace' 'castable'\n     || lk == 46789                 // 'null' 'castable'\n     || lk == 46812                 // 'processing-instruction' 'castable'\n     || lk == 46847                 // 'true' 'castable'\n     || lk == 48723                 // 'attribute' 'collation'\n     || lk == 48762                 // 'element' 'collation'\n     || lk == 48775                 // 'false' 'collation'\n     || lk == 48827                 // 'namespace' 'collation'\n     || lk == 48837                 // 'null' 'collation'\n     || lk == 48860                 // 'processing-instruction' 'collation'\n     || lk == 48895                 // 'true' 'collation'\n     || lk == 51335                 // 'false' 'contains'\n     || lk == 51397                 // 'null' 'contains'\n     || lk == 51455                 // 'true' 'contains'\n     || lk == 54355                 // 'attribute' 'count'\n     || lk == 54394                 // 'element' 'count'\n     || lk == 54407                 // 'false' 'count'\n     || lk == 54459                 // 'namespace' 'count'\n     || lk == 54469                 // 'null' 'count'\n     || lk == 54492                 // 'processing-instruction' 'count'\n     || lk == 54527                 // 'true' 'count'\n     || lk == 56403                 // 'attribute' 'default'\n     || lk == 56442                 // 'element' 'default'\n     || lk == 56455                 // 'false' 'default'\n     || lk == 56507                 // 'namespace' 'default'\n     || lk == 56517                 // 'null' 'default'\n     || lk == 56540                 // 'processing-instruction' 'default'\n     || lk == 56575                 // 'true' 'default'\n     || lk == 58451                 // 'attribute' 'descending'\n     || lk == 58490                 // 'element' 'descending'\n     || lk == 58503                 // 'false' 'descending'\n     || lk == 58555                 // 'namespace' 'descending'\n     || lk == 58565                 // 'null' 'descending'\n     || lk == 58588                 // 'processing-instruction' 'descending'\n     || lk == 58623                 // 'true' 'descending'\n     || lk == 61011                 // 'attribute' 'div'\n     || lk == 61050                 // 'element' 'div'\n     || lk == 61063                 // 'false' 'div'\n     || lk == 61115                 // 'namespace' 'div'\n     || lk == 61125                 // 'null' 'div'\n     || lk == 61148                 // 'processing-instruction' 'div'\n     || lk == 61183                 // 'true' 'div'\n     || lk == 63059                 // 'attribute' 'else'\n     || lk == 63098                 // 'element' 'else'\n     || lk == 63111                 // 'false' 'else'\n     || lk == 63163                 // 'namespace' 'else'\n     || lk == 63173                 // 'null' 'else'\n     || lk == 63196                 // 'processing-instruction' 'else'\n     || lk == 63231                 // 'true' 'else'\n     || lk == 63571                 // 'attribute' 'empty'\n     || lk == 63610                 // 'element' 'empty'\n     || lk == 63623                 // 'false' 'empty'\n     || lk == 63675                 // 'namespace' 'empty'\n     || lk == 63685                 // 'null' 'empty'\n     || lk == 63708                 // 'processing-instruction' 'empty'\n     || lk == 63743                 // 'true' 'empty'\n     || lk == 65107                 // 'attribute' 'end'\n     || lk == 65146                 // 'element' 'end'\n     || lk == 65159                 // 'false' 'end'\n     || lk == 65211                 // 'namespace' 'end'\n     || lk == 65221                 // 'null' 'end'\n     || lk == 65244                 // 'processing-instruction' 'end'\n     || lk == 65279                 // 'true' 'end'\n     || lk == 66131                 // 'attribute' 'eq'\n     || lk == 66170                 // 'element' 'eq'\n     || lk == 66183                 // 'false' 'eq'\n     || lk == 66235                 // 'namespace' 'eq'\n     || lk == 66245                 // 'null' 'eq'\n     || lk == 66268                 // 'processing-instruction' 'eq'\n     || lk == 66303                 // 'true' 'eq'\n     || lk == 67667                 // 'attribute' 'except'\n     || lk == 67706                 // 'element' 'except'\n     || lk == 67719                 // 'false' 'except'\n     || lk == 67771                 // 'namespace' 'except'\n     || lk == 67781                 // 'null' 'except'\n     || lk == 67804                 // 'processing-instruction' 'except'\n     || lk == 67839                 // 'true' 'except'\n     || lk == 71251                 // 'attribute' 'for'\n     || lk == 71290                 // 'element' 'for'\n     || lk == 71303                 // 'false' 'for'\n     || lk == 71355                 // 'namespace' 'for'\n     || lk == 71365                 // 'null' 'for'\n     || lk == 71388                 // 'processing-instruction' 'for'\n     || lk == 71423                 // 'true' 'for'\n     || lk == 75859                 // 'attribute' 'ge'\n     || lk == 75898                 // 'element' 'ge'\n     || lk == 75911                 // 'false' 'ge'\n     || lk == 75963                 // 'namespace' 'ge'\n     || lk == 75973                 // 'null' 'ge'\n     || lk == 75996                 // 'processing-instruction' 'ge'\n     || lk == 76031                 // 'true' 'ge'\n     || lk == 76883                 // 'attribute' 'group'\n     || lk == 76922                 // 'element' 'group'\n     || lk == 76935                 // 'false' 'group'\n     || lk == 76987                 // 'namespace' 'group'\n     || lk == 76997                 // 'null' 'group'\n     || lk == 77020                 // 'processing-instruction' 'group'\n     || lk == 77055                 // 'true' 'group'\n     || lk == 77907                 // 'attribute' 'gt'\n     || lk == 77946                 // 'element' 'gt'\n     || lk == 77959                 // 'false' 'gt'\n     || lk == 78011                 // 'namespace' 'gt'\n     || lk == 78021                 // 'null' 'gt'\n     || lk == 78044                 // 'processing-instruction' 'gt'\n     || lk == 78079                 // 'true' 'gt'\n     || lk == 78419                 // 'attribute' 'idiv'\n     || lk == 78458                 // 'element' 'idiv'\n     || lk == 78471                 // 'false' 'idiv'\n     || lk == 78523                 // 'namespace' 'idiv'\n     || lk == 78533                 // 'null' 'idiv'\n     || lk == 78556                 // 'processing-instruction' 'idiv'\n     || lk == 78591                 // 'true' 'idiv'\n     || lk == 83027                 // 'attribute' 'instance'\n     || lk == 83066                 // 'element' 'instance'\n     || lk == 83079                 // 'false' 'instance'\n     || lk == 83131                 // 'namespace' 'instance'\n     || lk == 83141                 // 'null' 'instance'\n     || lk == 83164                 // 'processing-instruction' 'instance'\n     || lk == 83199                 // 'true' 'instance'\n     || lk == 84051                 // 'attribute' 'intersect'\n     || lk == 84090                 // 'element' 'intersect'\n     || lk == 84103                 // 'false' 'intersect'\n     || lk == 84155                 // 'namespace' 'intersect'\n     || lk == 84165                 // 'null' 'intersect'\n     || lk == 84188                 // 'processing-instruction' 'intersect'\n     || lk == 84223                 // 'true' 'intersect'\n     || lk == 84563                 // 'attribute' 'into'\n     || lk == 84602                 // 'element' 'into'\n     || lk == 84615                 // 'false' 'into'\n     || lk == 84667                 // 'namespace' 'into'\n     || lk == 84677                 // 'null' 'into'\n     || lk == 84700                 // 'processing-instruction' 'into'\n     || lk == 84735                 // 'true' 'into'\n     || lk == 85075                 // 'attribute' 'is'\n     || lk == 85114                 // 'element' 'is'\n     || lk == 85127                 // 'false' 'is'\n     || lk == 85179                 // 'namespace' 'is'\n     || lk == 85189                 // 'null' 'is'\n     || lk == 85212                 // 'processing-instruction' 'is'\n     || lk == 85247                 // 'true' 'is'\n     || lk == 89683                 // 'attribute' 'le'\n     || lk == 89722                 // 'element' 'le'\n     || lk == 89735                 // 'false' 'le'\n     || lk == 89787                 // 'namespace' 'le'\n     || lk == 89797                 // 'null' 'le'\n     || lk == 89820                 // 'processing-instruction' 'le'\n     || lk == 89855                 // 'true' 'le'\n     || lk == 90707                 // 'attribute' 'let'\n     || lk == 90746                 // 'element' 'let'\n     || lk == 90759                 // 'false' 'let'\n     || lk == 90811                 // 'namespace' 'let'\n     || lk == 90821                 // 'null' 'let'\n     || lk == 90844                 // 'processing-instruction' 'let'\n     || lk == 90879                 // 'true' 'let'\n     || lk == 92755                 // 'attribute' 'lt'\n     || lk == 92794                 // 'element' 'lt'\n     || lk == 92807                 // 'false' 'lt'\n     || lk == 92859                 // 'namespace' 'lt'\n     || lk == 92869                 // 'null' 'lt'\n     || lk == 92892                 // 'processing-instruction' 'lt'\n     || lk == 92927                 // 'true' 'lt'\n     || lk == 93779                 // 'attribute' 'mod'\n     || lk == 93818                 // 'element' 'mod'\n     || lk == 93831                 // 'false' 'mod'\n     || lk == 93883                 // 'namespace' 'mod'\n     || lk == 93893                 // 'null' 'mod'\n     || lk == 93916                 // 'processing-instruction' 'mod'\n     || lk == 93951                 // 'true' 'mod'\n     || lk == 94291                 // 'attribute' 'modify'\n     || lk == 94330                 // 'element' 'modify'\n     || lk == 94343                 // 'false' 'modify'\n     || lk == 94395                 // 'namespace' 'modify'\n     || lk == 94405                 // 'null' 'modify'\n     || lk == 94428                 // 'processing-instruction' 'modify'\n     || lk == 94463                 // 'true' 'modify'\n     || lk == 96851                 // 'attribute' 'ne'\n     || lk == 96890                 // 'element' 'ne'\n     || lk == 96903                 // 'false' 'ne'\n     || lk == 96955                 // 'namespace' 'ne'\n     || lk == 96965                 // 'null' 'ne'\n     || lk == 96988                 // 'processing-instruction' 'ne'\n     || lk == 97023                 // 'true' 'ne'\n     || lk == 103507                // 'attribute' 'only'\n     || lk == 103546                // 'element' 'only'\n     || lk == 103559                // 'false' 'only'\n     || lk == 103611                // 'namespace' 'only'\n     || lk == 103621                // 'null' 'only'\n     || lk == 103644                // 'processing-instruction' 'only'\n     || lk == 103679                // 'true' 'only'\n     || lk == 104531                // 'attribute' 'or'\n     || lk == 104570                // 'element' 'or'\n     || lk == 104583                // 'false' 'or'\n     || lk == 104635                // 'namespace' 'or'\n     || lk == 104645                // 'null' 'or'\n     || lk == 104668                // 'processing-instruction' 'or'\n     || lk == 104703                // 'true' 'or'\n     || lk == 105043                // 'attribute' 'order'\n     || lk == 105082                // 'element' 'order'\n     || lk == 105095                // 'false' 'order'\n     || lk == 105147                // 'namespace' 'order'\n     || lk == 105157                // 'null' 'order'\n     || lk == 105180                // 'processing-instruction' 'order'\n     || lk == 105215                // 'true' 'order'\n     || lk == 107143                // 'false' 'paragraphs'\n     || lk == 107205                // 'null' 'paragraphs'\n     || lk == 107263                // 'true' 'paragraphs'\n     || lk == 114771                // 'attribute' 'return'\n     || lk == 114810                // 'element' 'return'\n     || lk == 114823                // 'false' 'return'\n     || lk == 114875                // 'namespace' 'return'\n     || lk == 114885                // 'null' 'return'\n     || lk == 114908                // 'processing-instruction' 'return'\n     || lk == 114943                // 'true' 'return'\n     || lk == 116819                // 'attribute' 'satisfies'\n     || lk == 116858                // 'element' 'satisfies'\n     || lk == 116871                // 'false' 'satisfies'\n     || lk == 116923                // 'namespace' 'satisfies'\n     || lk == 116933                // 'null' 'satisfies'\n     || lk == 116956                // 'processing-instruction' 'satisfies'\n     || lk == 116991                // 'true' 'satisfies'\n     || lk == 121479                // 'false' 'sentences'\n     || lk == 121541                // 'null' 'sentences'\n     || lk == 121599                // 'true' 'sentences'\n     || lk == 123475                // 'attribute' 'stable'\n     || lk == 123514                // 'element' 'stable'\n     || lk == 123527                // 'false' 'stable'\n     || lk == 123579                // 'namespace' 'stable'\n     || lk == 123589                // 'null' 'stable'\n     || lk == 123612                // 'processing-instruction' 'stable'\n     || lk == 123647                // 'true' 'stable'\n     || lk == 123987                // 'attribute' 'start'\n     || lk == 124026                // 'element' 'start'\n     || lk == 124039                // 'false' 'start'\n     || lk == 124091                // 'namespace' 'start'\n     || lk == 124101                // 'null' 'start'\n     || lk == 124124                // 'processing-instruction' 'start'\n     || lk == 124159                // 'true' 'start'\n     || lk == 129159                // 'false' 'times'\n     || lk == 129221                // 'null' 'times'\n     || lk == 129279                // 'true' 'times'\n     || lk == 129619                // 'attribute' 'to'\n     || lk == 129658                // 'element' 'to'\n     || lk == 129671                // 'false' 'to'\n     || lk == 129723                // 'namespace' 'to'\n     || lk == 129733                // 'null' 'to'\n     || lk == 129756                // 'processing-instruction' 'to'\n     || lk == 129791                // 'true' 'to'\n     || lk == 130131                // 'attribute' 'treat'\n     || lk == 130170                // 'element' 'treat'\n     || lk == 130183                // 'false' 'treat'\n     || lk == 130235                // 'namespace' 'treat'\n     || lk == 130245                // 'null' 'treat'\n     || lk == 130268                // 'processing-instruction' 'treat'\n     || lk == 130303                // 'true' 'treat'\n     || lk == 133203                // 'attribute' 'union'\n     || lk == 133242                // 'element' 'union'\n     || lk == 133255                // 'false' 'union'\n     || lk == 133307                // 'namespace' 'union'\n     || lk == 133317                // 'null' 'union'\n     || lk == 133340                // 'processing-instruction' 'union'\n     || lk == 133375                // 'true' 'union'\n     || lk == 139347                // 'attribute' 'where'\n     || lk == 139386                // 'element' 'where'\n     || lk == 139399                // 'false' 'where'\n     || lk == 139451                // 'namespace' 'where'\n     || lk == 139461                // 'null' 'where'\n     || lk == 139484                // 'processing-instruction' 'where'\n     || lk == 139519                // 'true' 'where'\n     || lk == 141395                // 'attribute' 'with'\n     || lk == 141434                // 'element' 'with'\n     || lk == 141447                // 'false' 'with'\n     || lk == 141499                // 'namespace' 'with'\n     || lk == 141509                // 'null' 'with'\n     || lk == 141532                // 'processing-instruction' 'with'\n     || lk == 141567                // 'true' 'with'\n     || lk == 142983                // 'false' 'words'\n     || lk == 143045                // 'null' 'words'\n     || lk == 143103                // 'true' 'words'\n     || lk == 145543                // 'false' '|'\n     || lk == 145605                // 'null' '|'\n     || lk == 145663                // 'true' '|'\n     || lk == 146055                // 'false' '||'\n     || lk == 146117                // 'null' '||'\n     || lk == 146175                // 'true' '||'\n     || lk == 146567                // 'false' '|}'\n     || lk == 146629                // 'null' '|}'\n     || lk == 146687                // 'true' '|}'\n     || lk == 147079                // 'false' '}'\n     || lk == 147141                // 'null' '}'\n     || lk == 147199)               // 'true' '}'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          memoize(4, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(4, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '$$'\n    case 33:                        // '%'\n    case 35:                        // '('\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n    case 69:                        // '['\n    case 281:                       // '{'\n    case 283:                       // '{|'\n    case 3155:                      // 'attribute' EQName^Token\n    case 3194:                      // 'element' EQName^Token\n    case 9915:                      // 'namespace' NCName^Token\n    case 9948:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14927:                     // 'array' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14969:                     // 'document-node' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14973:                     // 'empty-sequence' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14995:                     // 'function' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15002:                     // 'if' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15015:                     // 'item' '#'\n    case 15016:                     // 'json' '#'\n    case 15017:                     // 'json-item' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15036:                     // 'namespace-node' '#'\n    case 15037:                     // 'ne' '#'\n    case 15042:                     // 'node' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15078:                     // 'schema-attribute' '#'\n    case 15079:                     // 'schema-element' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15095:                     // 'structured-item' '#'\n    case 15096:                     // 'switch' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15107:                     // 'typeswitch' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18055:                     // 'false' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18067:                     // 'function' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18117:                     // 'null' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18175:                     // 'true' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 37459:                     // 'attribute' 'allowing'\n    case 37498:                     // 'element' 'allowing'\n    case 37563:                     // 'namespace' 'allowing'\n    case 37596:                     // 'processing-instruction' 'allowing'\n    case 37971:                     // 'attribute' 'ancestor'\n    case 38010:                     // 'element' 'ancestor'\n    case 38075:                     // 'namespace' 'ancestor'\n    case 38108:                     // 'processing-instruction' 'ancestor'\n    case 38483:                     // 'attribute' 'ancestor-or-self'\n    case 38522:                     // 'element' 'ancestor-or-self'\n    case 38587:                     // 'namespace' 'ancestor-or-self'\n    case 38620:                     // 'processing-instruction' 'ancestor-or-self'\n    case 40019:                     // 'attribute' 'append'\n    case 40058:                     // 'element' 'append'\n    case 40123:                     // 'namespace' 'append'\n    case 40156:                     // 'processing-instruction' 'append'\n    case 40531:                     // 'attribute' 'array'\n    case 40570:                     // 'element' 'array'\n    case 42579:                     // 'attribute' 'attribute'\n    case 42618:                     // 'element' 'attribute'\n    case 42683:                     // 'namespace' 'attribute'\n    case 42716:                     // 'processing-instruction' 'attribute'\n    case 43091:                     // 'attribute' 'base-uri'\n    case 43130:                     // 'element' 'base-uri'\n    case 43195:                     // 'namespace' 'base-uri'\n    case 43228:                     // 'processing-instruction' 'base-uri'\n    case 44115:                     // 'attribute' 'boundary-space'\n    case 44154:                     // 'element' 'boundary-space'\n    case 44219:                     // 'namespace' 'boundary-space'\n    case 44252:                     // 'processing-instruction' 'boundary-space'\n    case 44627:                     // 'attribute' 'break'\n    case 44666:                     // 'element' 'break'\n    case 44731:                     // 'namespace' 'break'\n    case 44764:                     // 'processing-instruction' 'break'\n    case 47187:                     // 'attribute' 'catch'\n    case 47226:                     // 'element' 'catch'\n    case 47291:                     // 'namespace' 'catch'\n    case 47324:                     // 'processing-instruction' 'catch'\n    case 48211:                     // 'attribute' 'child'\n    case 48250:                     // 'element' 'child'\n    case 48315:                     // 'namespace' 'child'\n    case 48348:                     // 'processing-instruction' 'child'\n    case 49747:                     // 'attribute' 'comment'\n    case 49786:                     // 'element' 'comment'\n    case 49851:                     // 'namespace' 'comment'\n    case 49884:                     // 'processing-instruction' 'comment'\n    case 50259:                     // 'attribute' 'constraint'\n    case 50298:                     // 'element' 'constraint'\n    case 50363:                     // 'namespace' 'constraint'\n    case 50396:                     // 'processing-instruction' 'constraint'\n    case 50771:                     // 'attribute' 'construction'\n    case 50810:                     // 'element' 'construction'\n    case 50875:                     // 'namespace' 'construction'\n    case 50908:                     // 'processing-instruction' 'construction'\n    case 52307:                     // 'attribute' 'context'\n    case 52346:                     // 'element' 'context'\n    case 52411:                     // 'namespace' 'context'\n    case 52444:                     // 'processing-instruction' 'context'\n    case 52819:                     // 'attribute' 'continue'\n    case 52858:                     // 'element' 'continue'\n    case 52923:                     // 'namespace' 'continue'\n    case 52956:                     // 'processing-instruction' 'continue'\n    case 53331:                     // 'attribute' 'copy'\n    case 53370:                     // 'element' 'copy'\n    case 53435:                     // 'namespace' 'copy'\n    case 53468:                     // 'processing-instruction' 'copy'\n    case 53843:                     // 'attribute' 'copy-namespaces'\n    case 53882:                     // 'element' 'copy-namespaces'\n    case 53947:                     // 'namespace' 'copy-namespaces'\n    case 53980:                     // 'processing-instruction' 'copy-namespaces'\n    case 54867:                     // 'attribute' 'decimal-format'\n    case 54906:                     // 'element' 'decimal-format'\n    case 54971:                     // 'namespace' 'decimal-format'\n    case 55004:                     // 'processing-instruction' 'decimal-format'\n    case 55891:                     // 'attribute' 'declare'\n    case 55930:                     // 'element' 'declare'\n    case 55995:                     // 'namespace' 'declare'\n    case 56028:                     // 'processing-instruction' 'declare'\n    case 56915:                     // 'attribute' 'delete'\n    case 56954:                     // 'element' 'delete'\n    case 57019:                     // 'namespace' 'delete'\n    case 57052:                     // 'processing-instruction' 'delete'\n    case 57427:                     // 'attribute' 'descendant'\n    case 57466:                     // 'element' 'descendant'\n    case 57531:                     // 'namespace' 'descendant'\n    case 57564:                     // 'processing-instruction' 'descendant'\n    case 57939:                     // 'attribute' 'descendant-or-self'\n    case 57978:                     // 'element' 'descendant-or-self'\n    case 58043:                     // 'namespace' 'descendant-or-self'\n    case 58076:                     // 'processing-instruction' 'descendant-or-self'\n    case 61523:                     // 'attribute' 'document'\n    case 61562:                     // 'element' 'document'\n    case 61627:                     // 'namespace' 'document'\n    case 61660:                     // 'processing-instruction' 'document'\n    case 62035:                     // 'attribute' 'document-node'\n    case 62074:                     // 'element' 'document-node'\n    case 62139:                     // 'namespace' 'document-node'\n    case 62172:                     // 'processing-instruction' 'document-node'\n    case 62547:                     // 'attribute' 'element'\n    case 62586:                     // 'element' 'element'\n    case 62651:                     // 'namespace' 'element'\n    case 62684:                     // 'processing-instruction' 'element'\n    case 64083:                     // 'attribute' 'empty-sequence'\n    case 64122:                     // 'element' 'empty-sequence'\n    case 64187:                     // 'namespace' 'empty-sequence'\n    case 64220:                     // 'processing-instruction' 'empty-sequence'\n    case 64595:                     // 'attribute' 'encoding'\n    case 64634:                     // 'element' 'encoding'\n    case 64699:                     // 'namespace' 'encoding'\n    case 64732:                     // 'processing-instruction' 'encoding'\n    case 66643:                     // 'attribute' 'every'\n    case 66682:                     // 'element' 'every'\n    case 66747:                     // 'namespace' 'every'\n    case 66780:                     // 'processing-instruction' 'every'\n    case 68179:                     // 'attribute' 'exit'\n    case 68218:                     // 'element' 'exit'\n    case 68283:                     // 'namespace' 'exit'\n    case 68316:                     // 'processing-instruction' 'exit'\n    case 68691:                     // 'attribute' 'external'\n    case 68730:                     // 'element' 'external'\n    case 68795:                     // 'namespace' 'external'\n    case 68828:                     // 'processing-instruction' 'external'\n    case 69203:                     // 'attribute' 'false'\n    case 69242:                     // 'element' 'false'\n    case 69307:                     // 'namespace' 'false'\n    case 69340:                     // 'processing-instruction' 'false'\n    case 69715:                     // 'attribute' 'first'\n    case 69754:                     // 'element' 'first'\n    case 69819:                     // 'namespace' 'first'\n    case 69852:                     // 'processing-instruction' 'first'\n    case 70227:                     // 'attribute' 'following'\n    case 70266:                     // 'element' 'following'\n    case 70331:                     // 'namespace' 'following'\n    case 70364:                     // 'processing-instruction' 'following'\n    case 70739:                     // 'attribute' 'following-sibling'\n    case 70778:                     // 'element' 'following-sibling'\n    case 70843:                     // 'namespace' 'following-sibling'\n    case 70876:                     // 'processing-instruction' 'following-sibling'\n    case 72787:                     // 'attribute' 'from'\n    case 72826:                     // 'element' 'from'\n    case 72891:                     // 'namespace' 'from'\n    case 72924:                     // 'processing-instruction' 'from'\n    case 73299:                     // 'attribute' 'ft-option'\n    case 73338:                     // 'element' 'ft-option'\n    case 73403:                     // 'namespace' 'ft-option'\n    case 73436:                     // 'processing-instruction' 'ft-option'\n    case 75347:                     // 'attribute' 'function'\n    case 75386:                     // 'element' 'function'\n    case 75451:                     // 'namespace' 'function'\n    case 75484:                     // 'processing-instruction' 'function'\n    case 78931:                     // 'attribute' 'if'\n    case 78970:                     // 'element' 'if'\n    case 79035:                     // 'namespace' 'if'\n    case 79068:                     // 'processing-instruction' 'if'\n    case 79443:                     // 'attribute' 'import'\n    case 79482:                     // 'element' 'import'\n    case 79547:                     // 'namespace' 'import'\n    case 79580:                     // 'processing-instruction' 'import'\n    case 79955:                     // 'attribute' 'in'\n    case 79994:                     // 'element' 'in'\n    case 80059:                     // 'namespace' 'in'\n    case 80092:                     // 'processing-instruction' 'in'\n    case 80467:                     // 'attribute' 'index'\n    case 80506:                     // 'element' 'index'\n    case 80571:                     // 'namespace' 'index'\n    case 80604:                     // 'processing-instruction' 'index'\n    case 82515:                     // 'attribute' 'insert'\n    case 82554:                     // 'element' 'insert'\n    case 82619:                     // 'namespace' 'insert'\n    case 82652:                     // 'processing-instruction' 'insert'\n    case 83539:                     // 'attribute' 'integrity'\n    case 83578:                     // 'element' 'integrity'\n    case 83643:                     // 'namespace' 'integrity'\n    case 83676:                     // 'processing-instruction' 'integrity'\n    case 85587:                     // 'attribute' 'item'\n    case 85626:                     // 'element' 'item'\n    case 85691:                     // 'namespace' 'item'\n    case 85724:                     // 'processing-instruction' 'item'\n    case 86099:                     // 'attribute' 'json'\n    case 86138:                     // 'element' 'json'\n    case 86203:                     // 'namespace' 'json'\n    case 86236:                     // 'processing-instruction' 'json'\n    case 86611:                     // 'attribute' 'json-item'\n    case 86650:                     // 'element' 'json-item'\n    case 87123:                     // 'attribute' 'jsoniq'\n    case 87162:                     // 'element' 'jsoniq'\n    case 87227:                     // 'namespace' 'jsoniq'\n    case 87260:                     // 'processing-instruction' 'jsoniq'\n    case 88659:                     // 'attribute' 'last'\n    case 88698:                     // 'element' 'last'\n    case 88763:                     // 'namespace' 'last'\n    case 88796:                     // 'processing-instruction' 'last'\n    case 89171:                     // 'attribute' 'lax'\n    case 89210:                     // 'element' 'lax'\n    case 89275:                     // 'namespace' 'lax'\n    case 89308:                     // 'processing-instruction' 'lax'\n    case 91731:                     // 'attribute' 'loop'\n    case 91770:                     // 'element' 'loop'\n    case 91835:                     // 'namespace' 'loop'\n    case 91868:                     // 'processing-instruction' 'loop'\n    case 94803:                     // 'attribute' 'module'\n    case 94842:                     // 'element' 'module'\n    case 94907:                     // 'namespace' 'module'\n    case 94940:                     // 'processing-instruction' 'module'\n    case 95827:                     // 'attribute' 'namespace'\n    case 95866:                     // 'element' 'namespace'\n    case 95931:                     // 'namespace' 'namespace'\n    case 95964:                     // 'processing-instruction' 'namespace'\n    case 96339:                     // 'attribute' 'namespace-node'\n    case 96378:                     // 'element' 'namespace-node'\n    case 96443:                     // 'namespace' 'namespace-node'\n    case 96476:                     // 'processing-instruction' 'namespace-node'\n    case 99411:                     // 'attribute' 'node'\n    case 99450:                     // 'element' 'node'\n    case 99515:                     // 'namespace' 'node'\n    case 99548:                     // 'processing-instruction' 'node'\n    case 99923:                     // 'attribute' 'nodes'\n    case 99962:                     // 'element' 'nodes'\n    case 100027:                    // 'namespace' 'nodes'\n    case 100060:                    // 'processing-instruction' 'nodes'\n    case 100947:                    // 'attribute' 'null'\n    case 100986:                    // 'element' 'null'\n    case 101051:                    // 'namespace' 'null'\n    case 101084:                    // 'processing-instruction' 'null'\n    case 101459:                    // 'attribute' 'object'\n    case 101498:                    // 'element' 'object'\n    case 101563:                    // 'namespace' 'object'\n    case 101596:                    // 'processing-instruction' 'object'\n    case 104019:                    // 'attribute' 'option'\n    case 104058:                    // 'element' 'option'\n    case 104123:                    // 'namespace' 'option'\n    case 104156:                    // 'processing-instruction' 'option'\n    case 105555:                    // 'attribute' 'ordered'\n    case 105594:                    // 'element' 'ordered'\n    case 105659:                    // 'namespace' 'ordered'\n    case 105692:                    // 'processing-instruction' 'ordered'\n    case 106067:                    // 'attribute' 'ordering'\n    case 106106:                    // 'element' 'ordering'\n    case 106171:                    // 'namespace' 'ordering'\n    case 106204:                    // 'processing-instruction' 'ordering'\n    case 107603:                    // 'attribute' 'parent'\n    case 107642:                    // 'element' 'parent'\n    case 107707:                    // 'namespace' 'parent'\n    case 107740:                    // 'processing-instruction' 'parent'\n    case 110675:                    // 'attribute' 'preceding'\n    case 110714:                    // 'element' 'preceding'\n    case 110779:                    // 'namespace' 'preceding'\n    case 110812:                    // 'processing-instruction' 'preceding'\n    case 111187:                    // 'attribute' 'preceding-sibling'\n    case 111226:                    // 'element' 'preceding-sibling'\n    case 111291:                    // 'namespace' 'preceding-sibling'\n    case 111324:                    // 'processing-instruction' 'preceding-sibling'\n    case 112723:                    // 'attribute' 'processing-instruction'\n    case 112762:                    // 'element' 'processing-instruction'\n    case 112827:                    // 'namespace' 'processing-instruction'\n    case 112860:                    // 'processing-instruction' 'processing-instruction'\n    case 113747:                    // 'attribute' 'rename'\n    case 113786:                    // 'element' 'rename'\n    case 113851:                    // 'namespace' 'rename'\n    case 113884:                    // 'processing-instruction' 'rename'\n    case 114259:                    // 'attribute' 'replace'\n    case 114298:                    // 'element' 'replace'\n    case 114363:                    // 'namespace' 'replace'\n    case 114396:                    // 'processing-instruction' 'replace'\n    case 115283:                    // 'attribute' 'returning'\n    case 115322:                    // 'element' 'returning'\n    case 115387:                    // 'namespace' 'returning'\n    case 115420:                    // 'processing-instruction' 'returning'\n    case 115795:                    // 'attribute' 'revalidation'\n    case 115834:                    // 'element' 'revalidation'\n    case 115899:                    // 'namespace' 'revalidation'\n    case 115932:                    // 'processing-instruction' 'revalidation'\n    case 117331:                    // 'attribute' 'schema'\n    case 117370:                    // 'element' 'schema'\n    case 117435:                    // 'namespace' 'schema'\n    case 117468:                    // 'processing-instruction' 'schema'\n    case 117843:                    // 'attribute' 'schema-attribute'\n    case 117882:                    // 'element' 'schema-attribute'\n    case 117947:                    // 'namespace' 'schema-attribute'\n    case 117980:                    // 'processing-instruction' 'schema-attribute'\n    case 118355:                    // 'attribute' 'schema-element'\n    case 118394:                    // 'element' 'schema-element'\n    case 118459:                    // 'namespace' 'schema-element'\n    case 118492:                    // 'processing-instruction' 'schema-element'\n    case 118867:                    // 'attribute' 'score'\n    case 118906:                    // 'element' 'score'\n    case 118971:                    // 'namespace' 'score'\n    case 119004:                    // 'processing-instruction' 'score'\n    case 119379:                    // 'attribute' 'select'\n    case 119418:                    // 'element' 'select'\n    case 119483:                    // 'namespace' 'select'\n    case 119516:                    // 'processing-instruction' 'select'\n    case 119891:                    // 'attribute' 'self'\n    case 119930:                    // 'element' 'self'\n    case 119995:                    // 'namespace' 'self'\n    case 120028:                    // 'processing-instruction' 'self'\n    case 122451:                    // 'attribute' 'sliding'\n    case 122490:                    // 'element' 'sliding'\n    case 122555:                    // 'namespace' 'sliding'\n    case 122588:                    // 'processing-instruction' 'sliding'\n    case 122963:                    // 'attribute' 'some'\n    case 123002:                    // 'element' 'some'\n    case 123067:                    // 'namespace' 'some'\n    case 123100:                    // 'processing-instruction' 'some'\n    case 125523:                    // 'attribute' 'strict'\n    case 125562:                    // 'element' 'strict'\n    case 125627:                    // 'namespace' 'strict'\n    case 125660:                    // 'processing-instruction' 'strict'\n    case 126547:                    // 'attribute' 'structured-item'\n    case 126586:                    // 'element' 'structured-item'\n    case 127059:                    // 'attribute' 'switch'\n    case 127098:                    // 'element' 'switch'\n    case 127163:                    // 'namespace' 'switch'\n    case 127196:                    // 'processing-instruction' 'switch'\n    case 127571:                    // 'attribute' 'text'\n    case 127610:                    // 'element' 'text'\n    case 127675:                    // 'namespace' 'text'\n    case 127708:                    // 'processing-instruction' 'text'\n    case 130643:                    // 'attribute' 'true'\n    case 130682:                    // 'element' 'true'\n    case 130747:                    // 'namespace' 'true'\n    case 130780:                    // 'processing-instruction' 'true'\n    case 131155:                    // 'attribute' 'try'\n    case 131194:                    // 'element' 'try'\n    case 131259:                    // 'namespace' 'try'\n    case 131292:                    // 'processing-instruction' 'try'\n    case 131667:                    // 'attribute' 'tumbling'\n    case 131706:                    // 'element' 'tumbling'\n    case 131771:                    // 'namespace' 'tumbling'\n    case 131804:                    // 'processing-instruction' 'tumbling'\n    case 132179:                    // 'attribute' 'type'\n    case 132218:                    // 'element' 'type'\n    case 132283:                    // 'namespace' 'type'\n    case 132316:                    // 'processing-instruction' 'type'\n    case 132691:                    // 'attribute' 'typeswitch'\n    case 132730:                    // 'element' 'typeswitch'\n    case 132795:                    // 'namespace' 'typeswitch'\n    case 132828:                    // 'processing-instruction' 'typeswitch'\n    case 134227:                    // 'attribute' 'unordered'\n    case 134266:                    // 'element' 'unordered'\n    case 134331:                    // 'namespace' 'unordered'\n    case 134364:                    // 'processing-instruction' 'unordered'\n    case 134739:                    // 'attribute' 'updating'\n    case 134778:                    // 'element' 'updating'\n    case 134843:                    // 'namespace' 'updating'\n    case 134876:                    // 'processing-instruction' 'updating'\n    case 136275:                    // 'attribute' 'validate'\n    case 136314:                    // 'element' 'validate'\n    case 136379:                    // 'namespace' 'validate'\n    case 136412:                    // 'processing-instruction' 'validate'\n    case 136787:                    // 'attribute' 'value'\n    case 136826:                    // 'element' 'value'\n    case 136891:                    // 'namespace' 'value'\n    case 136924:                    // 'processing-instruction' 'value'\n    case 137299:                    // 'attribute' 'variable'\n    case 137338:                    // 'element' 'variable'\n    case 137403:                    // 'namespace' 'variable'\n    case 137436:                    // 'processing-instruction' 'variable'\n    case 137811:                    // 'attribute' 'version'\n    case 137850:                    // 'element' 'version'\n    case 137915:                    // 'namespace' 'version'\n    case 137948:                    // 'processing-instruction' 'version'\n    case 139859:                    // 'attribute' 'while'\n    case 139898:                    // 'element' 'while'\n    case 139963:                    // 'namespace' 'while'\n    case 139996:                    // 'processing-instruction' 'while'\n    case 143955:                    // 'attribute' '{'\n    case 143969:                    // 'comment' '{'\n    case 143992:                    // 'document' '{'\n    case 143994:                    // 'element' '{'\n    case 144059:                    // 'namespace' '{'\n    case 144078:                    // 'ordered' '{'\n    case 144092:                    // 'processing-instruction' '{'\n    case 144121:                    // 'text' '{'\n    case 144134:                    // 'unordered' '{'\n      try_PostfixExpr();\n      break;\n    case -3:\n      break;\n    default:\n      try_AxisStep();\n    }\n  }\n\n  function parse_AxisStep()\n  {\n    eventHandler.startNonterminal(\"AxisStep\", e0);\n    switch (l1)\n    {\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 46:                        // '..'\n    case 26698:                     // 'ancestor' '::'\n    case 26699:                     // 'ancestor-or-self' '::'\n    case 26834:                     // 'parent' '::'\n    case 26840:                     // 'preceding' '::'\n    case 26841:                     // 'preceding-sibling' '::'\n      parse_ReverseStep();\n      break;\n    default:\n      parse_ForwardStep();\n    }\n    lookahead1W(227);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    whitespace();\n    parse_PredicateList();\n    eventHandler.endNonterminal(\"AxisStep\", e0);\n  }\n\n  function try_AxisStep()\n  {\n    switch (l1)\n    {\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 46:                        // '..'\n    case 26698:                     // 'ancestor' '::'\n    case 26699:                     // 'ancestor-or-self' '::'\n    case 26834:                     // 'parent' '::'\n    case 26840:                     // 'preceding' '::'\n    case 26841:                     // 'preceding-sibling' '::'\n      try_ReverseStep();\n      break;\n    default:\n      try_ForwardStep();\n    }\n    lookahead1W(227);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    try_PredicateList();\n  }\n\n  function parse_ForwardStep()\n  {\n    eventHandler.startNonterminal(\"ForwardStep\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 234:                       // 'self'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26707:                     // 'attribute' '::'\n    case 26718:                     // 'child' '::'\n    case 26736:                     // 'descendant' '::'\n    case 26737:                     // 'descendant-or-self' '::'\n    case 26761:                     // 'following' '::'\n    case 26762:                     // 'following-sibling' '::'\n    case 26858:                     // 'self' '::'\n      parse_ForwardAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n      break;\n    default:\n      parse_AbbrevForwardStep();\n    }\n    eventHandler.endNonterminal(\"ForwardStep\", e0);\n  }\n\n  function try_ForwardStep()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 234:                       // 'self'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26707:                     // 'attribute' '::'\n    case 26718:                     // 'child' '::'\n    case 26736:                     // 'descendant' '::'\n    case 26737:                     // 'descendant-or-self' '::'\n    case 26761:                     // 'following' '::'\n    case 26762:                     // 'following-sibling' '::'\n    case 26858:                     // 'self' '::'\n      try_ForwardAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n      break;\n    default:\n      try_AbbrevForwardStep();\n    }\n  }\n\n  function parse_ForwardAxis()\n  {\n    eventHandler.startNonterminal(\"ForwardAxis\", e0);\n    switch (l1)\n    {\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    default:\n      shift(137);                   // 'following'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ForwardAxis\", e0);\n  }\n\n  function try_ForwardAxis()\n  {\n    switch (l1)\n    {\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    default:\n      shiftT(137);                  // 'following'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n    }\n  }\n\n  function parse_AbbrevForwardStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevForwardStep\", e0);\n    if (l1 == 67)                   // '@'\n    {\n      shift(67);                    // '@'\n    }\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NodeTest();\n    eventHandler.endNonterminal(\"AbbrevForwardStep\", e0);\n  }\n\n  function try_AbbrevForwardStep()\n  {\n    if (l1 == 67)                   // '@'\n    {\n      shiftT(67);                   // '@'\n    }\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_NodeTest();\n  }\n\n  function parse_ReverseStep()\n  {\n    eventHandler.startNonterminal(\"ReverseStep\", e0);\n    switch (l1)\n    {\n    case 46:                        // '..'\n      parse_AbbrevReverseStep();\n      break;\n    default:\n      parse_ReverseAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n    }\n    eventHandler.endNonterminal(\"ReverseStep\", e0);\n  }\n\n  function try_ReverseStep()\n  {\n    switch (l1)\n    {\n    case 46:                        // '..'\n      try_AbbrevReverseStep();\n      break;\n    default:\n      try_ReverseAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n    }\n  }\n\n  function parse_ReverseAxis()\n  {\n    eventHandler.startNonterminal(\"ReverseAxis\", e0);\n    switch (l1)\n    {\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    default:\n      shift(75);                    // 'ancestor-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ReverseAxis\", e0);\n  }\n\n  function try_ReverseAxis()\n  {\n    switch (l1)\n    {\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    default:\n      shiftT(75);                   // 'ancestor-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n    }\n  }\n\n  function parse_AbbrevReverseStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevReverseStep\", e0);\n    shift(46);                      // '..'\n    eventHandler.endNonterminal(\"AbbrevReverseStep\", e0);\n  }\n\n  function try_AbbrevReverseStep()\n  {\n    shiftT(46);                     // '..'\n  }\n\n  function parse_NodeTest()\n  {\n    eventHandler.startNonterminal(\"NodeTest\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 249:                       // 'text'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      parse_KindTest();\n      break;\n    default:\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"NodeTest\", e0);\n  }\n\n  function try_NodeTest()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 249:                       // 'text'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      try_KindTest();\n      break;\n    default:\n      try_NameTest();\n    }\n  }\n\n  function parse_NameTest()\n  {\n    eventHandler.startNonterminal(\"NameTest\", e0);\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shift(5);                     // Wildcard\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"NameTest\", e0);\n  }\n\n  function try_NameTest()\n  {\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shiftT(5);                    // Wildcard\n      break;\n    default:\n      try_EQName();\n    }\n  }\n\n  function parse_PostfixExpr()\n  {\n    eventHandler.startNonterminal(\"PostfixExpr\", e0);\n    parse_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(234);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' | '/' |\n      if (l1 != 35                  // '('\n       && l1 != 45                  // '.'\n       && l1 != 69)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 35397)              // '[' '['\n      {\n        lk = memoized(5, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Predicate();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -4;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(5, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case 35:                      // '('\n        whitespace();\n        parse_ArgumentList();\n        break;\n      case 45:                      // '.'\n        whitespace();\n        parse_ObjectLookup();\n        break;\n      case -4:\n        whitespace();\n        parse_ArrayLookup();\n        break;\n      case 35909:                   // '[' ']'\n        whitespace();\n        parse_ArrayUnboxing();\n        break;\n      default:\n        whitespace();\n        parse_Predicate();\n      }\n    }\n    eventHandler.endNonterminal(\"PostfixExpr\", e0);\n  }\n\n  function try_PostfixExpr()\n  {\n    try_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(234);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' | '/' |\n      if (l1 != 35                  // '('\n       && l1 != 45                  // '.'\n       && l1 != 69)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 35397)              // '[' '['\n      {\n        lk = memoized(5, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Predicate();\n            memoize(5, e0A, -1);\n            lk = -6;\n          }\n          catch (p1A)\n          {\n            lk = -4;\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(5, e0A, -4);\n          }\n        }\n      }\n      switch (lk)\n      {\n      case 35:                      // '('\n        try_ArgumentList();\n        break;\n      case 45:                      // '.'\n        try_ObjectLookup();\n        break;\n      case -4:\n        try_ArrayLookup();\n        break;\n      case 35909:                   // '[' ']'\n        try_ArrayUnboxing();\n        break;\n      case -6:\n        break;\n      default:\n        try_Predicate();\n      }\n    }\n  }\n\n  function parse_ObjectLookup()\n  {\n    eventHandler.startNonterminal(\"ObjectLookup\", e0);\n    shift(45);                      // '.'\n    lookahead1W(250);               // StringLiteral | NCName^Token | S^WS | '$' | '$$' | '(' | '(:' | 'after' |\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    case 35:                        // '('\n      whitespace();\n      parse_ParenthesizedExpr();\n      break;\n    case 31:                        // '$'\n      whitespace();\n      parse_VarRef();\n      break;\n    case 32:                        // '$$'\n      whitespace();\n      parse_ContextItemExpr();\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    eventHandler.endNonterminal(\"ObjectLookup\", e0);\n  }\n\n  function try_ObjectLookup()\n  {\n    shiftT(45);                     // '.'\n    lookahead1W(250);               // StringLiteral | NCName^Token | S^WS | '$' | '$$' | '(' | '(:' | 'after' |\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    case 35:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 32:                        // '$$'\n      try_ContextItemExpr();\n      break;\n    default:\n      try_NCName();\n    }\n  }\n\n  function parse_ArrayLookup()\n  {\n    eventHandler.startNonterminal(\"ArrayLookup\", e0);\n    shift(69);                      // '['\n    lookahead1W(31);                // S^WS | '(:' | '['\n    shift(69);                      // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(70);                      // ']'\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayLookup\", e0);\n  }\n\n  function try_ArrayLookup()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(31);                // S^WS | '(:' | '['\n    shiftT(69);                     // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(70);                     // ']'\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shiftT(70);                     // ']'\n  }\n\n  function parse_ArrayUnboxing()\n  {\n    eventHandler.startNonterminal(\"ArrayUnboxing\", e0);\n    shift(69);                      // '['\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayUnboxing\", e0);\n  }\n\n  function try_ArrayUnboxing()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shiftT(70);                     // ']'\n  }\n\n  function parse_ArgumentList()\n  {\n    eventHandler.startNonterminal(\"ArgumentList\", e0);\n    shift(35);                      // '('\n    lookahead1W(279);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_Argument();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(271);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_Argument();\n      }\n    }\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ArgumentList\", e0);\n  }\n\n  function try_ArgumentList()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(279);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      try_Argument();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(271);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_Argument();\n      }\n    }\n    shiftT(38);                     // ')'\n  }\n\n  function parse_PredicateList()\n  {\n    eventHandler.startNonterminal(\"PredicateList\", e0);\n    for (;;)\n    {\n      lookahead1W(227);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 69)                 // '['\n      {\n        break;\n      }\n      whitespace();\n      parse_Predicate();\n    }\n    eventHandler.endNonterminal(\"PredicateList\", e0);\n  }\n\n  function try_PredicateList()\n  {\n    for (;;)\n    {\n      lookahead1W(227);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 69)                 // '['\n      {\n        break;\n      }\n      try_Predicate();\n    }\n  }\n\n  function parse_Predicate()\n  {\n    eventHandler.startNonterminal(\"Predicate\", e0);\n    shift(69);                      // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"Predicate\", e0);\n  }\n\n  function try_Predicate()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(70);                     // ']'\n  }\n\n  function parse_Literal()\n  {\n    eventHandler.startNonterminal(\"Literal\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    case 135:                       // 'false'\n    case 255:                       // 'true'\n      parse_BooleanLiteral();\n      break;\n    case 197:                       // 'null'\n      parse_NullLiteral();\n      break;\n    default:\n      parse_NumericLiteral();\n    }\n    eventHandler.endNonterminal(\"Literal\", e0);\n  }\n\n  function try_Literal()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    case 135:                       // 'false'\n    case 255:                       // 'true'\n      try_BooleanLiteral();\n      break;\n    case 197:                       // 'null'\n      try_NullLiteral();\n      break;\n    default:\n      try_NumericLiteral();\n    }\n  }\n\n  function parse_BooleanLiteral()\n  {\n    eventHandler.startNonterminal(\"BooleanLiteral\", e0);\n    switch (l1)\n    {\n    case 255:                       // 'true'\n      shift(255);                   // 'true'\n      break;\n    default:\n      shift(135);                   // 'false'\n    }\n    eventHandler.endNonterminal(\"BooleanLiteral\", e0);\n  }\n\n  function try_BooleanLiteral()\n  {\n    switch (l1)\n    {\n    case 255:                       // 'true'\n      shiftT(255);                  // 'true'\n      break;\n    default:\n      shiftT(135);                  // 'false'\n    }\n  }\n\n  function parse_NullLiteral()\n  {\n    eventHandler.startNonterminal(\"NullLiteral\", e0);\n    shift(197);                     // 'null'\n    eventHandler.endNonterminal(\"NullLiteral\", e0);\n  }\n\n  function try_NullLiteral()\n  {\n    shiftT(197);                    // 'null'\n  }\n\n  function parse_NumericLiteral()\n  {\n    eventHandler.startNonterminal(\"NumericLiteral\", e0);\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shift(8);                     // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shift(9);                     // DecimalLiteral\n      break;\n    default:\n      shift(10);                    // DoubleLiteral\n    }\n    eventHandler.endNonterminal(\"NumericLiteral\", e0);\n  }\n\n  function try_NumericLiteral()\n  {\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shiftT(9);                    // DecimalLiteral\n      break;\n    default:\n      shiftT(10);                   // DoubleLiteral\n    }\n  }\n\n  function parse_VarRef()\n  {\n    eventHandler.startNonterminal(\"VarRef\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"VarRef\", e0);\n  }\n\n  function try_VarRef()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_VarName()\n  {\n    eventHandler.startNonterminal(\"VarName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"VarName\", e0);\n  }\n\n  function try_VarName()\n  {\n    try_EQName();\n  }\n\n  function parse_ParenthesizedExpr()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedExpr\", e0);\n    shift(35);                      // '('\n    lookahead1W(269);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedExpr\", e0);\n  }\n\n  function try_ParenthesizedExpr()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(269);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      try_Expr();\n    }\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ContextItemExpr()\n  {\n    eventHandler.startNonterminal(\"ContextItemExpr\", e0);\n    shift(32);                      // '$$'\n    eventHandler.endNonterminal(\"ContextItemExpr\", e0);\n  }\n\n  function try_ContextItemExpr()\n  {\n    shiftT(32);                     // '$$'\n  }\n\n  function parse_OrderedExpr()\n  {\n    eventHandler.startNonterminal(\"OrderedExpr\", e0);\n    shift(206);                     // 'ordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"OrderedExpr\", e0);\n  }\n\n  function try_OrderedExpr()\n  {\n    shiftT(206);                    // 'ordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_UnorderedExpr()\n  {\n    eventHandler.startNonterminal(\"UnorderedExpr\", e0);\n    shift(262);                     // 'unordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"UnorderedExpr\", e0);\n  }\n\n  function try_UnorderedExpr()\n  {\n    shiftT(262);                    // 'unordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FunctionCall()\n  {\n    eventHandler.startNonterminal(\"FunctionCall\", e0);\n    parse_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    whitespace();\n    parse_ArgumentList();\n    eventHandler.endNonterminal(\"FunctionCall\", e0);\n  }\n\n  function try_FunctionCall()\n  {\n    try_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    try_ArgumentList();\n  }\n\n  function parse_Argument()\n  {\n    eventHandler.startNonterminal(\"Argument\", e0);\n    switch (l1)\n    {\n    case 65:                        // '?'\n      parse_ArgumentPlaceholder();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Argument\", e0);\n  }\n\n  function try_Argument()\n  {\n    switch (l1)\n    {\n    case 65:                        // '?'\n      try_ArgumentPlaceholder();\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_ArgumentPlaceholder()\n  {\n    eventHandler.startNonterminal(\"ArgumentPlaceholder\", e0);\n    shift(65);                      // '?'\n    eventHandler.endNonterminal(\"ArgumentPlaceholder\", e0);\n  }\n\n  function try_ArgumentPlaceholder()\n  {\n    shiftT(65);                     // '?'\n  }\n\n  function parse_Constructor()\n  {\n    eventHandler.startNonterminal(\"Constructor\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    default:\n      parse_ComputedConstructor();\n    }\n    eventHandler.endNonterminal(\"Constructor\", e0);\n  }\n\n  function try_Constructor()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      try_DirectConstructor();\n      break;\n    default:\n      try_ComputedConstructor();\n    }\n  }\n\n  function parse_DirectConstructor()\n  {\n    eventHandler.startNonterminal(\"DirectConstructor\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n      parse_DirElemConstructor();\n      break;\n    case 56:                        // '<!--'\n      parse_DirCommentConstructor();\n      break;\n    default:\n      parse_DirPIConstructor();\n    }\n    eventHandler.endNonterminal(\"DirectConstructor\", e0);\n  }\n\n  function try_DirectConstructor()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n      try_DirElemConstructor();\n      break;\n    case 56:                        // '<!--'\n      try_DirCommentConstructor();\n      break;\n    default:\n      try_DirPIConstructor();\n    }\n  }\n\n  function parse_DirElemConstructor()\n  {\n    eventHandler.startNonterminal(\"DirElemConstructor\", e0);\n    shift(55);                      // '<'\n    lookahead1(4);                  // QName\n    shift(20);                      // QName\n    parse_DirAttributeList();\n    switch (l1)\n    {\n    case 49:                        // '/>'\n      shift(49);                    // '/>'\n      break;\n    default:\n      shift(62);                    // '>'\n      for (;;)\n      {\n        lookahead1(196);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 57)               // '</'\n        {\n          break;\n        }\n        parse_DirElemContent();\n      }\n      shift(57);                    // '</'\n      lookahead1(4);                // QName\n      shift(20);                    // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shift(21);                  // S\n      }\n      lookahead1(8);                // '>'\n      shift(62);                    // '>'\n    }\n    eventHandler.endNonterminal(\"DirElemConstructor\", e0);\n  }\n\n  function try_DirElemConstructor()\n  {\n    shiftT(55);                     // '<'\n    lookahead1(4);                  // QName\n    shiftT(20);                     // QName\n    try_DirAttributeList();\n    switch (l1)\n    {\n    case 49:                        // '/>'\n      shiftT(49);                   // '/>'\n      break;\n    default:\n      shiftT(62);                   // '>'\n      for (;;)\n      {\n        lookahead1(196);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 57)               // '</'\n        {\n          break;\n        }\n        try_DirElemContent();\n      }\n      shiftT(57);                   // '</'\n      lookahead1(4);                // QName\n      shiftT(20);                   // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shiftT(21);                 // S\n      }\n      lookahead1(8);                // '>'\n      shiftT(62);                   // '>'\n    }\n  }\n\n  function parse_DirAttributeList()\n  {\n    eventHandler.startNonterminal(\"DirAttributeList\", e0);\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shift(21);                    // S\n      lookahead1(94);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shift(20);                  // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        lookahead1(7);              // '='\n        shift(61);                  // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        parse_DirAttributeValue();\n      }\n    }\n    eventHandler.endNonterminal(\"DirAttributeList\", e0);\n  }\n\n  function try_DirAttributeList()\n  {\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shiftT(21);                   // S\n      lookahead1(94);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shiftT(20);                 // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        lookahead1(7);              // '='\n        shiftT(61);                 // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        try_DirAttributeValue();\n      }\n    }\n  }\n\n  function parse_DirAttributeValue()\n  {\n    eventHandler.startNonterminal(\"DirAttributeValue\", e0);\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shift(28);                    // '\"'\n      for (;;)\n      {\n        lookahead1(185);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shift(13);                // EscapeQuot\n          break;\n        default:\n          parse_QuotAttrValueContent();\n        }\n      }\n      shift(28);                    // '\"'\n      break;\n    default:\n      shift(34);                    // \"'\"\n      for (;;)\n      {\n        lookahead1(186);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 34)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shift(14);                // EscapeApos\n          break;\n        default:\n          parse_AposAttrValueContent();\n        }\n      }\n      shift(34);                    // \"'\"\n    }\n    eventHandler.endNonterminal(\"DirAttributeValue\", e0);\n  }\n\n  function try_DirAttributeValue()\n  {\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shiftT(28);                   // '\"'\n      for (;;)\n      {\n        lookahead1(185);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shiftT(13);               // EscapeQuot\n          break;\n        default:\n          try_QuotAttrValueContent();\n        }\n      }\n      shiftT(28);                   // '\"'\n      break;\n    default:\n      shiftT(34);                   // \"'\"\n      for (;;)\n      {\n        lookahead1(186);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 34)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shiftT(14);               // EscapeApos\n          break;\n        default:\n          try_AposAttrValueContent();\n        }\n      }\n      shiftT(34);                   // \"'\"\n    }\n  }\n\n  function parse_QuotAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"QuotAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shift(16);                    // QuotAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"QuotAttrValueContent\", e0);\n  }\n\n  function try_QuotAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shiftT(16);                   // QuotAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_AposAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"AposAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shift(17);                    // AposAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"AposAttrValueContent\", e0);\n  }\n\n  function try_AposAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shiftT(17);                   // AposAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirElemContent()\n  {\n    eventHandler.startNonterminal(\"DirElemContent\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shift(4);                     // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shift(15);                    // ElementContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"DirElemContent\", e0);\n  }\n\n  function try_DirElemContent()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      try_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shiftT(4);                    // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shiftT(15);                   // ElementContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"DirCommentConstructor\", e0);\n    shift(56);                      // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shift(2);                       // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shift(44);                      // '-->'\n    eventHandler.endNonterminal(\"DirCommentConstructor\", e0);\n  }\n\n  function try_DirCommentConstructor()\n  {\n    shiftT(56);                     // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shiftT(2);                      // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shiftT(44);                     // '-->'\n  }\n\n  function parse_DirPIConstructor()\n  {\n    eventHandler.startNonterminal(\"DirPIConstructor\", e0);\n    shift(60);                      // '<?'\n    lookahead1(3);                  // PITarget\n    shift(18);                      // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(2);                // DirPIContents\n      shift(3);                     // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shift(66);                      // '?>'\n    eventHandler.endNonterminal(\"DirPIConstructor\", e0);\n  }\n\n  function try_DirPIConstructor()\n  {\n    shiftT(60);                     // '<?'\n    lookahead1(3);                  // PITarget\n    shiftT(18);                     // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(2);                // DirPIContents\n      shiftT(3);                    // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shiftT(66);                     // '?>'\n  }\n\n  function parse_ComputedConstructor()\n  {\n    eventHandler.startNonterminal(\"ComputedConstructor\", e0);\n    switch (l1)\n    {\n    case 120:                       // 'document'\n      parse_CompDocConstructor();\n      break;\n    case 122:                       // 'element'\n      parse_CompElemConstructor();\n      break;\n    case 83:                        // 'attribute'\n      parse_CompAttrConstructor();\n      break;\n    case 187:                       // 'namespace'\n      parse_CompNamespaceConstructor();\n      break;\n    case 249:                       // 'text'\n      parse_CompTextConstructor();\n      break;\n    case 97:                        // 'comment'\n      parse_CompCommentConstructor();\n      break;\n    default:\n      parse_CompPIConstructor();\n    }\n    eventHandler.endNonterminal(\"ComputedConstructor\", e0);\n  }\n\n  function try_ComputedConstructor()\n  {\n    switch (l1)\n    {\n    case 120:                       // 'document'\n      try_CompDocConstructor();\n      break;\n    case 122:                       // 'element'\n      try_CompElemConstructor();\n      break;\n    case 83:                        // 'attribute'\n      try_CompAttrConstructor();\n      break;\n    case 187:                       // 'namespace'\n      try_CompNamespaceConstructor();\n      break;\n    case 249:                       // 'text'\n      try_CompTextConstructor();\n      break;\n    case 97:                        // 'comment'\n      try_CompCommentConstructor();\n      break;\n    default:\n      try_CompPIConstructor();\n    }\n  }\n\n  function parse_CompElemConstructor()\n  {\n    eventHandler.startNonterminal(\"CompElemConstructor\", e0);\n    shift(122);                     // 'element'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_ContentExpr();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CompElemConstructor\", e0);\n  }\n\n  function try_CompElemConstructor()\n  {\n    shiftT(122);                    // 'element'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      try_ContentExpr();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_CompNamespaceConstructor()\n  {\n    eventHandler.startNonterminal(\"CompNamespaceConstructor\", e0);\n    shift(187);                     // 'namespace'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PrefixExpr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_Prefix();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_URIExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CompNamespaceConstructor\", e0);\n  }\n\n  function try_CompNamespaceConstructor()\n  {\n    shiftT(187);                    // 'namespace'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PrefixExpr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_Prefix();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_URIExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_Prefix()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  }\n\n  function try_Prefix()\n  {\n    try_NCName();\n  }\n\n  function parse_PrefixExpr()\n  {\n    eventHandler.startNonterminal(\"PrefixExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"PrefixExpr\", e0);\n  }\n\n  function try_PrefixExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_URIExpr()\n  {\n    eventHandler.startNonterminal(\"URIExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"URIExpr\", e0);\n  }\n\n  function try_URIExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_FunctionItemExpr()\n  {\n    eventHandler.startNonterminal(\"FunctionItemExpr\", e0);\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      parse_InlineFunctionExpr();\n      break;\n    default:\n      parse_NamedFunctionRef();\n    }\n    eventHandler.endNonterminal(\"FunctionItemExpr\", e0);\n  }\n\n  function try_FunctionItemExpr()\n  {\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      try_InlineFunctionExpr();\n      break;\n    default:\n      try_NamedFunctionRef();\n    }\n  }\n\n  function parse_NamedFunctionRef()\n  {\n    eventHandler.startNonterminal(\"NamedFunctionRef\", e0);\n    parse_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shift(29);                      // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shift(8);                       // IntegerLiteral\n    eventHandler.endNonterminal(\"NamedFunctionRef\", e0);\n  }\n\n  function try_NamedFunctionRef()\n  {\n    try_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shiftT(29);                     // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shiftT(8);                      // IntegerLiteral\n  }\n\n  function parse_InlineFunctionExpr()\n  {\n    eventHandler.startNonterminal(\"InlineFunctionExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(38);                      // ')'\n    lookahead1W(115);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_FunctionBody();\n    eventHandler.endNonterminal(\"InlineFunctionExpr\", e0);\n  }\n\n  function try_InlineFunctionExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      try_ParamList();\n    }\n    shiftT(38);                     // ')'\n    lookahead1W(115);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      shiftT(80);                   // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_FunctionBody();\n  }\n\n  function parse_SingleType()\n  {\n    eventHandler.startNonterminal(\"SingleType\", e0);\n    parse_SimpleTypeName();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 65)                   // '?'\n    {\n      shift(65);                    // '?'\n    }\n    eventHandler.endNonterminal(\"SingleType\", e0);\n  }\n\n  function try_SingleType()\n  {\n    try_SimpleTypeName();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 65)                   // '?'\n    {\n      shiftT(65);                   // '?'\n    }\n  }\n\n  function parse_TypeDeclaration()\n  {\n    eventHandler.startNonterminal(\"TypeDeclaration\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypeDeclaration\", e0);\n  }\n\n  function try_TypeDeclaration()\n  {\n    shiftT(80);                     // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_SequenceType()\n  {\n    eventHandler.startNonterminal(\"SequenceType\", e0);\n    switch (l1)\n    {\n    case 35:                        // '('\n      lookahead2W(258);             // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n      break;\n    case 125:                       // 'empty-sequence'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18045:                     // 'empty-sequence' '('\n    case 19491:                     // '(' ')'\n      if (l1 == 125)                // 'empty-sequence'\n      {\n        shift(125);                 // 'empty-sequence'\n      }\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n      break;\n    default:\n      parse_ItemType();\n      lookahead1W(228);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 40:                      // '*'\n      case 41:                      // '+'\n      case 65:                      // '?'\n        whitespace();\n        parse_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"SequenceType\", e0);\n  }\n\n  function try_SequenceType()\n  {\n    switch (l1)\n    {\n    case 35:                        // '('\n      lookahead2W(258);             // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n      break;\n    case 125:                       // 'empty-sequence'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18045:                     // 'empty-sequence' '('\n    case 19491:                     // '(' ')'\n      if (l1 == 125)                // 'empty-sequence'\n      {\n        shiftT(125);                // 'empty-sequence'\n      }\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n      break;\n    default:\n      try_ItemType();\n      lookahead1W(228);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 40:                      // '*'\n      case 41:                      // '+'\n      case 65:                      // '?'\n        try_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n  }\n\n  function parse_OccurrenceIndicator()\n  {\n    eventHandler.startNonterminal(\"OccurrenceIndicator\", e0);\n    switch (l1)\n    {\n    case 65:                        // '?'\n      shift(65);                    // '?'\n      break;\n    case 40:                        // '*'\n      shift(40);                    // '*'\n      break;\n    default:\n      shift(41);                    // '+'\n    }\n    eventHandler.endNonterminal(\"OccurrenceIndicator\", e0);\n  }\n\n  function try_OccurrenceIndicator()\n  {\n    switch (l1)\n    {\n    case 65:                        // '?'\n      shiftT(65);                   // '?'\n      break;\n    case 40:                        // '*'\n      shiftT(40);                   // '*'\n      break;\n    default:\n      shiftT(41);                   // '+'\n    }\n  }\n\n  function parse_ItemType()\n  {\n    eventHandler.startNonterminal(\"ItemType\", e0);\n    switch (l1)\n    {\n    case 79:                        // 'array'\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 147:                       // 'function'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 198:                       // 'object'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 249:                       // 'text'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12879                 // 'array' EOF\n     || lk == 12969                 // 'json-item' EOF\n     || lk == 12998                 // 'object' EOF\n     || lk == 13047                 // 'structured-item' EOF\n     || lk == 13903                 // 'array' '!='\n     || lk == 13993                 // 'json-item' '!='\n     || lk == 14022                 // 'object' '!='\n     || lk == 14071                 // 'structured-item' '!='\n     || lk == 19535                 // 'array' ')'\n     || lk == 19625                 // 'json-item' ')'\n     || lk == 19654                 // 'object' ')'\n     || lk == 19703                 // 'structured-item' ')'\n     || lk == 20047                 // 'array' '*'\n     || lk == 20137                 // 'json-item' '*'\n     || lk == 20166                 // 'object' '*'\n     || lk == 20215                 // 'structured-item' '*'\n     || lk == 20559                 // 'array' '*'\n     || lk == 20649                 // 'json-item' '*'\n     || lk == 20678                 // 'object' '*'\n     || lk == 20727                 // 'structured-item' '*'\n     || lk == 21071                 // 'array' '+'\n     || lk == 21161                 // 'json-item' '+'\n     || lk == 21190                 // 'object' '+'\n     || lk == 21239                 // 'structured-item' '+'\n     || lk == 21583                 // 'array' ','\n     || lk == 21673                 // 'json-item' ','\n     || lk == 21702                 // 'object' ','\n     || lk == 21751                 // 'structured-item' ','\n     || lk == 22095                 // 'array' '-'\n     || lk == 22185                 // 'json-item' '-'\n     || lk == 22214                 // 'object' '-'\n     || lk == 22263                 // 'structured-item' '-'\n     || lk == 25679                 // 'array' ':'\n     || lk == 25769                 // 'json-item' ':'\n     || lk == 25798                 // 'object' ':'\n     || lk == 25847                 // 'structured-item' ':'\n     || lk == 27215                 // 'array' ':='\n     || lk == 27305                 // 'json-item' ':='\n     || lk == 27334                 // 'object' ':='\n     || lk == 27383                 // 'structured-item' ':='\n     || lk == 27727                 // 'array' ';'\n     || lk == 27817                 // 'json-item' ';'\n     || lk == 27846                 // 'object' ';'\n     || lk == 27895                 // 'structured-item' ';'\n     || lk == 28239                 // 'array' '<'\n     || lk == 28329                 // 'json-item' '<'\n     || lk == 28358                 // 'object' '<'\n     || lk == 28407                 // 'structured-item' '<'\n     || lk == 29775                 // 'array' '<<'\n     || lk == 29865                 // 'json-item' '<<'\n     || lk == 29894                 // 'object' '<<'\n     || lk == 29943                 // 'structured-item' '<<'\n     || lk == 30287                 // 'array' '<='\n     || lk == 30377                 // 'json-item' '<='\n     || lk == 30406                 // 'object' '<='\n     || lk == 30455                 // 'structured-item' '<='\n     || lk == 31311                 // 'array' '='\n     || lk == 31401                 // 'json-item' '='\n     || lk == 31430                 // 'object' '='\n     || lk == 31479                 // 'structured-item' '='\n     || lk == 31823                 // 'array' '>'\n     || lk == 31913                 // 'json-item' '>'\n     || lk == 31942                 // 'object' '>'\n     || lk == 31991                 // 'structured-item' '>'\n     || lk == 32335                 // 'array' '>='\n     || lk == 32425                 // 'json-item' '>='\n     || lk == 32454                 // 'object' '>='\n     || lk == 32503                 // 'structured-item' '>='\n     || lk == 32847                 // 'array' '>>'\n     || lk == 32937                 // 'json-item' '>>'\n     || lk == 32966                 // 'object' '>>'\n     || lk == 33015                 // 'structured-item' '>>'\n     || lk == 33359                 // 'array' '?'\n     || lk == 33449                 // 'json-item' '?'\n     || lk == 33478                 // 'object' '?'\n     || lk == 33527                 // 'structured-item' '?'\n     || lk == 35919                 // 'array' ']'\n     || lk == 36009                 // 'json-item' ']'\n     || lk == 36038                 // 'object' ']'\n     || lk == 36087                 // 'structured-item' ']'\n     || lk == 36431                 // 'array' 'after'\n     || lk == 36521                 // 'json-item' 'after'\n     || lk == 36550                 // 'object' 'after'\n     || lk == 36599                 // 'structured-item' 'after'\n     || lk == 37455                 // 'array' 'allowing'\n     || lk == 37545                 // 'json-item' 'allowing'\n     || lk == 37574                 // 'object' 'allowing'\n     || lk == 37623                 // 'structured-item' 'allowing'\n     || lk == 38991                 // 'array' 'and'\n     || lk == 39081                 // 'json-item' 'and'\n     || lk == 39110                 // 'object' 'and'\n     || lk == 39159                 // 'structured-item' 'and'\n     || lk == 41039                 // 'array' 'as'\n     || lk == 41129                 // 'json-item' 'as'\n     || lk == 41158                 // 'object' 'as'\n     || lk == 41207                 // 'structured-item' 'as'\n     || lk == 41551                 // 'array' 'ascending'\n     || lk == 41641                 // 'json-item' 'ascending'\n     || lk == 41670                 // 'object' 'ascending'\n     || lk == 41719                 // 'structured-item' 'ascending'\n     || lk == 42063                 // 'array' 'at'\n     || lk == 42153                 // 'json-item' 'at'\n     || lk == 42182                 // 'object' 'at'\n     || lk == 42231                 // 'structured-item' 'at'\n     || lk == 43599                 // 'array' 'before'\n     || lk == 43689                 // 'json-item' 'before'\n     || lk == 43718                 // 'object' 'before'\n     || lk == 43767                 // 'structured-item' 'before'\n     || lk == 45647                 // 'array' 'case'\n     || lk == 45737                 // 'json-item' 'case'\n     || lk == 45766                 // 'object' 'case'\n     || lk == 45815                 // 'structured-item' 'case'\n     || lk == 48719                 // 'array' 'collation'\n     || lk == 48809                 // 'json-item' 'collation'\n     || lk == 48838                 // 'object' 'collation'\n     || lk == 48887                 // 'structured-item' 'collation'\n     || lk == 51279                 // 'array' 'contains'\n     || lk == 51369                 // 'json-item' 'contains'\n     || lk == 51398                 // 'object' 'contains'\n     || lk == 51447                 // 'structured-item' 'contains'\n     || lk == 54351                 // 'array' 'count'\n     || lk == 54441                 // 'json-item' 'count'\n     || lk == 54470                 // 'object' 'count'\n     || lk == 54519                 // 'structured-item' 'count'\n     || lk == 56399                 // 'array' 'default'\n     || lk == 56489                 // 'json-item' 'default'\n     || lk == 56518                 // 'object' 'default'\n     || lk == 56567                 // 'structured-item' 'default'\n     || lk == 58447                 // 'array' 'descending'\n     || lk == 58537                 // 'json-item' 'descending'\n     || lk == 58566                 // 'object' 'descending'\n     || lk == 58615                 // 'structured-item' 'descending'\n     || lk == 61007                 // 'array' 'div'\n     || lk == 61097                 // 'json-item' 'div'\n     || lk == 61126                 // 'object' 'div'\n     || lk == 61175                 // 'structured-item' 'div'\n     || lk == 63055                 // 'array' 'else'\n     || lk == 63145                 // 'json-item' 'else'\n     || lk == 63174                 // 'object' 'else'\n     || lk == 63223                 // 'structured-item' 'else'\n     || lk == 63567                 // 'array' 'empty'\n     || lk == 63657                 // 'json-item' 'empty'\n     || lk == 63686                 // 'object' 'empty'\n     || lk == 63735                 // 'structured-item' 'empty'\n     || lk == 65103                 // 'array' 'end'\n     || lk == 65193                 // 'json-item' 'end'\n     || lk == 65222                 // 'object' 'end'\n     || lk == 65271                 // 'structured-item' 'end'\n     || lk == 66127                 // 'array' 'eq'\n     || lk == 66217                 // 'json-item' 'eq'\n     || lk == 66246                 // 'object' 'eq'\n     || lk == 66295                 // 'structured-item' 'eq'\n     || lk == 67663                 // 'array' 'except'\n     || lk == 67753                 // 'json-item' 'except'\n     || lk == 67782                 // 'object' 'except'\n     || lk == 67831                 // 'structured-item' 'except'\n     || lk == 68687                 // 'array' 'external'\n     || lk == 68777                 // 'json-item' 'external'\n     || lk == 68806                 // 'object' 'external'\n     || lk == 68855                 // 'structured-item' 'external'\n     || lk == 71247                 // 'array' 'for'\n     || lk == 71337                 // 'json-item' 'for'\n     || lk == 71366                 // 'object' 'for'\n     || lk == 71415                 // 'structured-item' 'for'\n     || lk == 75855                 // 'array' 'ge'\n     || lk == 75945                 // 'json-item' 'ge'\n     || lk == 75974                 // 'object' 'ge'\n     || lk == 76023                 // 'structured-item' 'ge'\n     || lk == 76879                 // 'array' 'group'\n     || lk == 76969                 // 'json-item' 'group'\n     || lk == 76998                 // 'object' 'group'\n     || lk == 77047                 // 'structured-item' 'group'\n     || lk == 77903                 // 'array' 'gt'\n     || lk == 77993                 // 'json-item' 'gt'\n     || lk == 78022                 // 'object' 'gt'\n     || lk == 78071                 // 'structured-item' 'gt'\n     || lk == 78415                 // 'array' 'idiv'\n     || lk == 78505                 // 'json-item' 'idiv'\n     || lk == 78534                 // 'object' 'idiv'\n     || lk == 78583                 // 'structured-item' 'idiv'\n     || lk == 79951                 // 'array' 'in'\n     || lk == 80041                 // 'json-item' 'in'\n     || lk == 80070                 // 'object' 'in'\n     || lk == 80119                 // 'structured-item' 'in'\n     || lk == 83023                 // 'array' 'instance'\n     || lk == 83113                 // 'json-item' 'instance'\n     || lk == 83142                 // 'object' 'instance'\n     || lk == 83191                 // 'structured-item' 'instance'\n     || lk == 84047                 // 'array' 'intersect'\n     || lk == 84137                 // 'json-item' 'intersect'\n     || lk == 84166                 // 'object' 'intersect'\n     || lk == 84215                 // 'structured-item' 'intersect'\n     || lk == 84559                 // 'array' 'into'\n     || lk == 84649                 // 'json-item' 'into'\n     || lk == 84678                 // 'object' 'into'\n     || lk == 84727                 // 'structured-item' 'into'\n     || lk == 85071                 // 'array' 'is'\n     || lk == 85161                 // 'json-item' 'is'\n     || lk == 85190                 // 'object' 'is'\n     || lk == 85239                 // 'structured-item' 'is'\n     || lk == 89679                 // 'array' 'le'\n     || lk == 89769                 // 'json-item' 'le'\n     || lk == 89798                 // 'object' 'le'\n     || lk == 89847                 // 'structured-item' 'le'\n     || lk == 90703                 // 'array' 'let'\n     || lk == 90793                 // 'json-item' 'let'\n     || lk == 90822                 // 'object' 'let'\n     || lk == 90871                 // 'structured-item' 'let'\n     || lk == 92751                 // 'array' 'lt'\n     || lk == 92841                 // 'json-item' 'lt'\n     || lk == 92870                 // 'object' 'lt'\n     || lk == 92919                 // 'structured-item' 'lt'\n     || lk == 93775                 // 'array' 'mod'\n     || lk == 93865                 // 'json-item' 'mod'\n     || lk == 93894                 // 'object' 'mod'\n     || lk == 93943                 // 'structured-item' 'mod'\n     || lk == 94287                 // 'array' 'modify'\n     || lk == 94377                 // 'json-item' 'modify'\n     || lk == 94406                 // 'object' 'modify'\n     || lk == 94455                 // 'structured-item' 'modify'\n     || lk == 96847                 // 'array' 'ne'\n     || lk == 96937                 // 'json-item' 'ne'\n     || lk == 96966                 // 'object' 'ne'\n     || lk == 97015                 // 'structured-item' 'ne'\n     || lk == 103503                // 'array' 'only'\n     || lk == 103593                // 'json-item' 'only'\n     || lk == 103622                // 'object' 'only'\n     || lk == 103671                // 'structured-item' 'only'\n     || lk == 104527                // 'array' 'or'\n     || lk == 104617                // 'json-item' 'or'\n     || lk == 104646                // 'object' 'or'\n     || lk == 104695                // 'structured-item' 'or'\n     || lk == 105039                // 'array' 'order'\n     || lk == 105129                // 'json-item' 'order'\n     || lk == 105158                // 'object' 'order'\n     || lk == 105207                // 'structured-item' 'order'\n     || lk == 107087                // 'array' 'paragraphs'\n     || lk == 107177                // 'json-item' 'paragraphs'\n     || lk == 107206                // 'object' 'paragraphs'\n     || lk == 107255                // 'structured-item' 'paragraphs'\n     || lk == 114767                // 'array' 'return'\n     || lk == 114857                // 'json-item' 'return'\n     || lk == 114886                // 'object' 'return'\n     || lk == 114935                // 'structured-item' 'return'\n     || lk == 116815                // 'array' 'satisfies'\n     || lk == 116905                // 'json-item' 'satisfies'\n     || lk == 116934                // 'object' 'satisfies'\n     || lk == 116983                // 'structured-item' 'satisfies'\n     || lk == 118863                // 'array' 'score'\n     || lk == 118953                // 'json-item' 'score'\n     || lk == 118982                // 'object' 'score'\n     || lk == 119031                // 'structured-item' 'score'\n     || lk == 121423                // 'array' 'sentences'\n     || lk == 121513                // 'json-item' 'sentences'\n     || lk == 121542                // 'object' 'sentences'\n     || lk == 121591                // 'structured-item' 'sentences'\n     || lk == 123471                // 'array' 'stable'\n     || lk == 123561                // 'json-item' 'stable'\n     || lk == 123590                // 'object' 'stable'\n     || lk == 123639                // 'structured-item' 'stable'\n     || lk == 123983                // 'array' 'start'\n     || lk == 124073                // 'json-item' 'start'\n     || lk == 124102                // 'object' 'start'\n     || lk == 124151                // 'structured-item' 'start'\n     || lk == 129103                // 'array' 'times'\n     || lk == 129193                // 'json-item' 'times'\n     || lk == 129222                // 'object' 'times'\n     || lk == 129271                // 'structured-item' 'times'\n     || lk == 129615                // 'array' 'to'\n     || lk == 129705                // 'json-item' 'to'\n     || lk == 129734                // 'object' 'to'\n     || lk == 129783                // 'structured-item' 'to'\n     || lk == 133199                // 'array' 'union'\n     || lk == 133289                // 'json-item' 'union'\n     || lk == 133318                // 'object' 'union'\n     || lk == 133367                // 'structured-item' 'union'\n     || lk == 139343                // 'array' 'where'\n     || lk == 139433                // 'json-item' 'where'\n     || lk == 139462                // 'object' 'where'\n     || lk == 139511                // 'structured-item' 'where'\n     || lk == 141391                // 'array' 'with'\n     || lk == 141481                // 'json-item' 'with'\n     || lk == 141510                // 'object' 'with'\n     || lk == 141559                // 'structured-item' 'with'\n     || lk == 142927                // 'array' 'words'\n     || lk == 143017                // 'json-item' 'words'\n     || lk == 143046                // 'object' 'words'\n     || lk == 143095                // 'structured-item' 'words'\n     || lk == 143951                // 'array' '{'\n     || lk == 144041                // 'json-item' '{'\n     || lk == 144070                // 'object' '{'\n     || lk == 144119                // 'structured-item' '{'\n     || lk == 145487                // 'array' '|'\n     || lk == 145577                // 'json-item' '|'\n     || lk == 145606                // 'object' '|'\n     || lk == 145655                // 'structured-item' '|'\n     || lk == 145999                // 'array' '||'\n     || lk == 146089                // 'json-item' '||'\n     || lk == 146118                // 'object' '||'\n     || lk == 146167                // 'structured-item' '||'\n     || lk == 146511                // 'array' '|}'\n     || lk == 146601                // 'json-item' '|}'\n     || lk == 146630                // 'object' '|}'\n     || lk == 146679                // 'structured-item' '|}'\n     || lk == 147023                // 'array' '}'\n     || lk == 147113                // 'json-item' '}'\n     || lk == 147142                // 'object' '}'\n     || lk == 147191)               // 'structured-item' '}'\n    {\n      lk = memoized(6, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_AtomicOrUnionType();\n          lk = -4;\n        }\n        catch (p4A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_JSONTest();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -7;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(6, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      parse_KindTest();\n      break;\n    case 18087:                     // 'item' '('\n      shift(167);                   // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n      break;\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      parse_FunctionTest();\n      break;\n    case 35:                        // '('\n      parse_ParenthesizedItemType();\n      break;\n    case -6:\n    case 17999:                     // 'array' '('\n    case 18089:                     // 'json-item' '('\n    case 18118:                     // 'object' '('\n      parse_JSONTest();\n      break;\n    case -7:\n    case 18167:                     // 'structured-item' '('\n      parse_StructuredItemTest();\n      break;\n    default:\n      parse_AtomicOrUnionType();\n    }\n    eventHandler.endNonterminal(\"ItemType\", e0);\n  }\n\n  function try_ItemType()\n  {\n    switch (l1)\n    {\n    case 79:                        // 'array'\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 147:                       // 'function'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 198:                       // 'object'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 249:                       // 'text'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12879                 // 'array' EOF\n     || lk == 12969                 // 'json-item' EOF\n     || lk == 12998                 // 'object' EOF\n     || lk == 13047                 // 'structured-item' EOF\n     || lk == 13903                 // 'array' '!='\n     || lk == 13993                 // 'json-item' '!='\n     || lk == 14022                 // 'object' '!='\n     || lk == 14071                 // 'structured-item' '!='\n     || lk == 19535                 // 'array' ')'\n     || lk == 19625                 // 'json-item' ')'\n     || lk == 19654                 // 'object' ')'\n     || lk == 19703                 // 'structured-item' ')'\n     || lk == 20047                 // 'array' '*'\n     || lk == 20137                 // 'json-item' '*'\n     || lk == 20166                 // 'object' '*'\n     || lk == 20215                 // 'structured-item' '*'\n     || lk == 20559                 // 'array' '*'\n     || lk == 20649                 // 'json-item' '*'\n     || lk == 20678                 // 'object' '*'\n     || lk == 20727                 // 'structured-item' '*'\n     || lk == 21071                 // 'array' '+'\n     || lk == 21161                 // 'json-item' '+'\n     || lk == 21190                 // 'object' '+'\n     || lk == 21239                 // 'structured-item' '+'\n     || lk == 21583                 // 'array' ','\n     || lk == 21673                 // 'json-item' ','\n     || lk == 21702                 // 'object' ','\n     || lk == 21751                 // 'structured-item' ','\n     || lk == 22095                 // 'array' '-'\n     || lk == 22185                 // 'json-item' '-'\n     || lk == 22214                 // 'object' '-'\n     || lk == 22263                 // 'structured-item' '-'\n     || lk == 25679                 // 'array' ':'\n     || lk == 25769                 // 'json-item' ':'\n     || lk == 25798                 // 'object' ':'\n     || lk == 25847                 // 'structured-item' ':'\n     || lk == 27215                 // 'array' ':='\n     || lk == 27305                 // 'json-item' ':='\n     || lk == 27334                 // 'object' ':='\n     || lk == 27383                 // 'structured-item' ':='\n     || lk == 27727                 // 'array' ';'\n     || lk == 27817                 // 'json-item' ';'\n     || lk == 27846                 // 'object' ';'\n     || lk == 27895                 // 'structured-item' ';'\n     || lk == 28239                 // 'array' '<'\n     || lk == 28329                 // 'json-item' '<'\n     || lk == 28358                 // 'object' '<'\n     || lk == 28407                 // 'structured-item' '<'\n     || lk == 29775                 // 'array' '<<'\n     || lk == 29865                 // 'json-item' '<<'\n     || lk == 29894                 // 'object' '<<'\n     || lk == 29943                 // 'structured-item' '<<'\n     || lk == 30287                 // 'array' '<='\n     || lk == 30377                 // 'json-item' '<='\n     || lk == 30406                 // 'object' '<='\n     || lk == 30455                 // 'structured-item' '<='\n     || lk == 31311                 // 'array' '='\n     || lk == 31401                 // 'json-item' '='\n     || lk == 31430                 // 'object' '='\n     || lk == 31479                 // 'structured-item' '='\n     || lk == 31823                 // 'array' '>'\n     || lk == 31913                 // 'json-item' '>'\n     || lk == 31942                 // 'object' '>'\n     || lk == 31991                 // 'structured-item' '>'\n     || lk == 32335                 // 'array' '>='\n     || lk == 32425                 // 'json-item' '>='\n     || lk == 32454                 // 'object' '>='\n     || lk == 32503                 // 'structured-item' '>='\n     || lk == 32847                 // 'array' '>>'\n     || lk == 32937                 // 'json-item' '>>'\n     || lk == 32966                 // 'object' '>>'\n     || lk == 33015                 // 'structured-item' '>>'\n     || lk == 33359                 // 'array' '?'\n     || lk == 33449                 // 'json-item' '?'\n     || lk == 33478                 // 'object' '?'\n     || lk == 33527                 // 'structured-item' '?'\n     || lk == 35919                 // 'array' ']'\n     || lk == 36009                 // 'json-item' ']'\n     || lk == 36038                 // 'object' ']'\n     || lk == 36087                 // 'structured-item' ']'\n     || lk == 36431                 // 'array' 'after'\n     || lk == 36521                 // 'json-item' 'after'\n     || lk == 36550                 // 'object' 'after'\n     || lk == 36599                 // 'structured-item' 'after'\n     || lk == 37455                 // 'array' 'allowing'\n     || lk == 37545                 // 'json-item' 'allowing'\n     || lk == 37574                 // 'object' 'allowing'\n     || lk == 37623                 // 'structured-item' 'allowing'\n     || lk == 38991                 // 'array' 'and'\n     || lk == 39081                 // 'json-item' 'and'\n     || lk == 39110                 // 'object' 'and'\n     || lk == 39159                 // 'structured-item' 'and'\n     || lk == 41039                 // 'array' 'as'\n     || lk == 41129                 // 'json-item' 'as'\n     || lk == 41158                 // 'object' 'as'\n     || lk == 41207                 // 'structured-item' 'as'\n     || lk == 41551                 // 'array' 'ascending'\n     || lk == 41641                 // 'json-item' 'ascending'\n     || lk == 41670                 // 'object' 'ascending'\n     || lk == 41719                 // 'structured-item' 'ascending'\n     || lk == 42063                 // 'array' 'at'\n     || lk == 42153                 // 'json-item' 'at'\n     || lk == 42182                 // 'object' 'at'\n     || lk == 42231                 // 'structured-item' 'at'\n     || lk == 43599                 // 'array' 'before'\n     || lk == 43689                 // 'json-item' 'before'\n     || lk == 43718                 // 'object' 'before'\n     || lk == 43767                 // 'structured-item' 'before'\n     || lk == 45647                 // 'array' 'case'\n     || lk == 45737                 // 'json-item' 'case'\n     || lk == 45766                 // 'object' 'case'\n     || lk == 45815                 // 'structured-item' 'case'\n     || lk == 48719                 // 'array' 'collation'\n     || lk == 48809                 // 'json-item' 'collation'\n     || lk == 48838                 // 'object' 'collation'\n     || lk == 48887                 // 'structured-item' 'collation'\n     || lk == 51279                 // 'array' 'contains'\n     || lk == 51369                 // 'json-item' 'contains'\n     || lk == 51398                 // 'object' 'contains'\n     || lk == 51447                 // 'structured-item' 'contains'\n     || lk == 54351                 // 'array' 'count'\n     || lk == 54441                 // 'json-item' 'count'\n     || lk == 54470                 // 'object' 'count'\n     || lk == 54519                 // 'structured-item' 'count'\n     || lk == 56399                 // 'array' 'default'\n     || lk == 56489                 // 'json-item' 'default'\n     || lk == 56518                 // 'object' 'default'\n     || lk == 56567                 // 'structured-item' 'default'\n     || lk == 58447                 // 'array' 'descending'\n     || lk == 58537                 // 'json-item' 'descending'\n     || lk == 58566                 // 'object' 'descending'\n     || lk == 58615                 // 'structured-item' 'descending'\n     || lk == 61007                 // 'array' 'div'\n     || lk == 61097                 // 'json-item' 'div'\n     || lk == 61126                 // 'object' 'div'\n     || lk == 61175                 // 'structured-item' 'div'\n     || lk == 63055                 // 'array' 'else'\n     || lk == 63145                 // 'json-item' 'else'\n     || lk == 63174                 // 'object' 'else'\n     || lk == 63223                 // 'structured-item' 'else'\n     || lk == 63567                 // 'array' 'empty'\n     || lk == 63657                 // 'json-item' 'empty'\n     || lk == 63686                 // 'object' 'empty'\n     || lk == 63735                 // 'structured-item' 'empty'\n     || lk == 65103                 // 'array' 'end'\n     || lk == 65193                 // 'json-item' 'end'\n     || lk == 65222                 // 'object' 'end'\n     || lk == 65271                 // 'structured-item' 'end'\n     || lk == 66127                 // 'array' 'eq'\n     || lk == 66217                 // 'json-item' 'eq'\n     || lk == 66246                 // 'object' 'eq'\n     || lk == 66295                 // 'structured-item' 'eq'\n     || lk == 67663                 // 'array' 'except'\n     || lk == 67753                 // 'json-item' 'except'\n     || lk == 67782                 // 'object' 'except'\n     || lk == 67831                 // 'structured-item' 'except'\n     || lk == 68687                 // 'array' 'external'\n     || lk == 68777                 // 'json-item' 'external'\n     || lk == 68806                 // 'object' 'external'\n     || lk == 68855                 // 'structured-item' 'external'\n     || lk == 71247                 // 'array' 'for'\n     || lk == 71337                 // 'json-item' 'for'\n     || lk == 71366                 // 'object' 'for'\n     || lk == 71415                 // 'structured-item' 'for'\n     || lk == 75855                 // 'array' 'ge'\n     || lk == 75945                 // 'json-item' 'ge'\n     || lk == 75974                 // 'object' 'ge'\n     || lk == 76023                 // 'structured-item' 'ge'\n     || lk == 76879                 // 'array' 'group'\n     || lk == 76969                 // 'json-item' 'group'\n     || lk == 76998                 // 'object' 'group'\n     || lk == 77047                 // 'structured-item' 'group'\n     || lk == 77903                 // 'array' 'gt'\n     || lk == 77993                 // 'json-item' 'gt'\n     || lk == 78022                 // 'object' 'gt'\n     || lk == 78071                 // 'structured-item' 'gt'\n     || lk == 78415                 // 'array' 'idiv'\n     || lk == 78505                 // 'json-item' 'idiv'\n     || lk == 78534                 // 'object' 'idiv'\n     || lk == 78583                 // 'structured-item' 'idiv'\n     || lk == 79951                 // 'array' 'in'\n     || lk == 80041                 // 'json-item' 'in'\n     || lk == 80070                 // 'object' 'in'\n     || lk == 80119                 // 'structured-item' 'in'\n     || lk == 83023                 // 'array' 'instance'\n     || lk == 83113                 // 'json-item' 'instance'\n     || lk == 83142                 // 'object' 'instance'\n     || lk == 83191                 // 'structured-item' 'instance'\n     || lk == 84047                 // 'array' 'intersect'\n     || lk == 84137                 // 'json-item' 'intersect'\n     || lk == 84166                 // 'object' 'intersect'\n     || lk == 84215                 // 'structured-item' 'intersect'\n     || lk == 84559                 // 'array' 'into'\n     || lk == 84649                 // 'json-item' 'into'\n     || lk == 84678                 // 'object' 'into'\n     || lk == 84727                 // 'structured-item' 'into'\n     || lk == 85071                 // 'array' 'is'\n     || lk == 85161                 // 'json-item' 'is'\n     || lk == 85190                 // 'object' 'is'\n     || lk == 85239                 // 'structured-item' 'is'\n     || lk == 89679                 // 'array' 'le'\n     || lk == 89769                 // 'json-item' 'le'\n     || lk == 89798                 // 'object' 'le'\n     || lk == 89847                 // 'structured-item' 'le'\n     || lk == 90703                 // 'array' 'let'\n     || lk == 90793                 // 'json-item' 'let'\n     || lk == 90822                 // 'object' 'let'\n     || lk == 90871                 // 'structured-item' 'let'\n     || lk == 92751                 // 'array' 'lt'\n     || lk == 92841                 // 'json-item' 'lt'\n     || lk == 92870                 // 'object' 'lt'\n     || lk == 92919                 // 'structured-item' 'lt'\n     || lk == 93775                 // 'array' 'mod'\n     || lk == 93865                 // 'json-item' 'mod'\n     || lk == 93894                 // 'object' 'mod'\n     || lk == 93943                 // 'structured-item' 'mod'\n     || lk == 94287                 // 'array' 'modify'\n     || lk == 94377                 // 'json-item' 'modify'\n     || lk == 94406                 // 'object' 'modify'\n     || lk == 94455                 // 'structured-item' 'modify'\n     || lk == 96847                 // 'array' 'ne'\n     || lk == 96937                 // 'json-item' 'ne'\n     || lk == 96966                 // 'object' 'ne'\n     || lk == 97015                 // 'structured-item' 'ne'\n     || lk == 103503                // 'array' 'only'\n     || lk == 103593                // 'json-item' 'only'\n     || lk == 103622                // 'object' 'only'\n     || lk == 103671                // 'structured-item' 'only'\n     || lk == 104527                // 'array' 'or'\n     || lk == 104617                // 'json-item' 'or'\n     || lk == 104646                // 'object' 'or'\n     || lk == 104695                // 'structured-item' 'or'\n     || lk == 105039                // 'array' 'order'\n     || lk == 105129                // 'json-item' 'order'\n     || lk == 105158                // 'object' 'order'\n     || lk == 105207                // 'structured-item' 'order'\n     || lk == 107087                // 'array' 'paragraphs'\n     || lk == 107177                // 'json-item' 'paragraphs'\n     || lk == 107206                // 'object' 'paragraphs'\n     || lk == 107255                // 'structured-item' 'paragraphs'\n     || lk == 114767                // 'array' 'return'\n     || lk == 114857                // 'json-item' 'return'\n     || lk == 114886                // 'object' 'return'\n     || lk == 114935                // 'structured-item' 'return'\n     || lk == 116815                // 'array' 'satisfies'\n     || lk == 116905                // 'json-item' 'satisfies'\n     || lk == 116934                // 'object' 'satisfies'\n     || lk == 116983                // 'structured-item' 'satisfies'\n     || lk == 118863                // 'array' 'score'\n     || lk == 118953                // 'json-item' 'score'\n     || lk == 118982                // 'object' 'score'\n     || lk == 119031                // 'structured-item' 'score'\n     || lk == 121423                // 'array' 'sentences'\n     || lk == 121513                // 'json-item' 'sentences'\n     || lk == 121542                // 'object' 'sentences'\n     || lk == 121591                // 'structured-item' 'sentences'\n     || lk == 123471                // 'array' 'stable'\n     || lk == 123561                // 'json-item' 'stable'\n     || lk == 123590                // 'object' 'stable'\n     || lk == 123639                // 'structured-item' 'stable'\n     || lk == 123983                // 'array' 'start'\n     || lk == 124073                // 'json-item' 'start'\n     || lk == 124102                // 'object' 'start'\n     || lk == 124151                // 'structured-item' 'start'\n     || lk == 129103                // 'array' 'times'\n     || lk == 129193                // 'json-item' 'times'\n     || lk == 129222                // 'object' 'times'\n     || lk == 129271                // 'structured-item' 'times'\n     || lk == 129615                // 'array' 'to'\n     || lk == 129705                // 'json-item' 'to'\n     || lk == 129734                // 'object' 'to'\n     || lk == 129783                // 'structured-item' 'to'\n     || lk == 133199                // 'array' 'union'\n     || lk == 133289                // 'json-item' 'union'\n     || lk == 133318                // 'object' 'union'\n     || lk == 133367                // 'structured-item' 'union'\n     || lk == 139343                // 'array' 'where'\n     || lk == 139433                // 'json-item' 'where'\n     || lk == 139462                // 'object' 'where'\n     || lk == 139511                // 'structured-item' 'where'\n     || lk == 141391                // 'array' 'with'\n     || lk == 141481                // 'json-item' 'with'\n     || lk == 141510                // 'object' 'with'\n     || lk == 141559                // 'structured-item' 'with'\n     || lk == 142927                // 'array' 'words'\n     || lk == 143017                // 'json-item' 'words'\n     || lk == 143046                // 'object' 'words'\n     || lk == 143095                // 'structured-item' 'words'\n     || lk == 143951                // 'array' '{'\n     || lk == 144041                // 'json-item' '{'\n     || lk == 144070                // 'object' '{'\n     || lk == 144119                // 'structured-item' '{'\n     || lk == 145487                // 'array' '|'\n     || lk == 145577                // 'json-item' '|'\n     || lk == 145606                // 'object' '|'\n     || lk == 145655                // 'structured-item' '|'\n     || lk == 145999                // 'array' '||'\n     || lk == 146089                // 'json-item' '||'\n     || lk == 146118                // 'object' '||'\n     || lk == 146167                // 'structured-item' '||'\n     || lk == 146511                // 'array' '|}'\n     || lk == 146601                // 'json-item' '|}'\n     || lk == 146630                // 'object' '|}'\n     || lk == 146679                // 'structured-item' '|}'\n     || lk == 147023                // 'array' '}'\n     || lk == 147113                // 'json-item' '}'\n     || lk == 147142                // 'object' '}'\n     || lk == 147191)               // 'structured-item' '}'\n    {\n      lk = memoized(6, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_AtomicOrUnionType();\n          memoize(6, e0A, -4);\n          lk = -8;\n        }\n        catch (p4A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_JSONTest();\n            memoize(6, e0A, -6);\n            lk = -8;\n          }\n          catch (p6A)\n          {\n            lk = -7;\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(6, e0A, -7);\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      try_KindTest();\n      break;\n    case 18087:                     // 'item' '('\n      shiftT(167);                  // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n      break;\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      try_FunctionTest();\n      break;\n    case 35:                        // '('\n      try_ParenthesizedItemType();\n      break;\n    case -6:\n    case 17999:                     // 'array' '('\n    case 18089:                     // 'json-item' '('\n    case 18118:                     // 'object' '('\n      try_JSONTest();\n      break;\n    case -7:\n    case 18167:                     // 'structured-item' '('\n      try_StructuredItemTest();\n      break;\n    case -8:\n      break;\n    default:\n      try_AtomicOrUnionType();\n    }\n  }\n\n  function parse_JSONTest()\n  {\n    eventHandler.startNonterminal(\"JSONTest\", e0);\n    switch (l1)\n    {\n    case 169:                       // 'json-item'\n      parse_JSONItemTest();\n      break;\n    case 198:                       // 'object'\n      parse_JSONObjectTest();\n      break;\n    default:\n      parse_JSONArrayTest();\n    }\n    eventHandler.endNonterminal(\"JSONTest\", e0);\n  }\n\n  function try_JSONTest()\n  {\n    switch (l1)\n    {\n    case 169:                       // 'json-item'\n      try_JSONItemTest();\n      break;\n    case 198:                       // 'object'\n      try_JSONObjectTest();\n      break;\n    default:\n      try_JSONArrayTest();\n    }\n  }\n\n  function parse_StructuredItemTest()\n  {\n    eventHandler.startNonterminal(\"StructuredItemTest\", e0);\n    shift(247);                     // 'structured-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"StructuredItemTest\", e0);\n  }\n\n  function try_StructuredItemTest()\n  {\n    shiftT(247);                    // 'structured-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONItemTest()\n  {\n    eventHandler.startNonterminal(\"JSONItemTest\", e0);\n    shift(169);                     // 'json-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONItemTest\", e0);\n  }\n\n  function try_JSONItemTest()\n  {\n    shiftT(169);                    // 'json-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONObjectTest()\n  {\n    eventHandler.startNonterminal(\"JSONObjectTest\", e0);\n    shift(198);                     // 'object'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONObjectTest\", e0);\n  }\n\n  function try_JSONObjectTest()\n  {\n    shiftT(198);                    // 'object'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONArrayTest()\n  {\n    eventHandler.startNonterminal(\"JSONArrayTest\", e0);\n    shift(79);                      // 'array'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONArrayTest\", e0);\n  }\n\n  function try_JSONArrayTest()\n  {\n    shiftT(79);                     // 'array'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_AtomicOrUnionType()\n  {\n    eventHandler.startNonterminal(\"AtomicOrUnionType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicOrUnionType\", e0);\n  }\n\n  function try_AtomicOrUnionType()\n  {\n    try_EQName();\n  }\n\n  function parse_KindTest()\n  {\n    eventHandler.startNonterminal(\"KindTest\", e0);\n    switch (l1)\n    {\n    case 121:                       // 'document-node'\n      parse_DocumentTest();\n      break;\n    case 122:                       // 'element'\n      parse_ElementTest();\n      break;\n    case 83:                        // 'attribute'\n      parse_AttributeTest();\n      break;\n    case 231:                       // 'schema-element'\n      parse_SchemaElementTest();\n      break;\n    case 230:                       // 'schema-attribute'\n      parse_SchemaAttributeTest();\n      break;\n    case 220:                       // 'processing-instruction'\n      parse_PITest();\n      break;\n    case 97:                        // 'comment'\n      parse_CommentTest();\n      break;\n    case 249:                       // 'text'\n      parse_TextTest();\n      break;\n    case 188:                       // 'namespace-node'\n      parse_NamespaceNodeTest();\n      break;\n    default:\n      parse_AnyKindTest();\n    }\n    eventHandler.endNonterminal(\"KindTest\", e0);\n  }\n\n  function try_KindTest()\n  {\n    switch (l1)\n    {\n    case 121:                       // 'document-node'\n      try_DocumentTest();\n      break;\n    case 122:                       // 'element'\n      try_ElementTest();\n      break;\n    case 83:                        // 'attribute'\n      try_AttributeTest();\n      break;\n    case 231:                       // 'schema-element'\n      try_SchemaElementTest();\n      break;\n    case 230:                       // 'schema-attribute'\n      try_SchemaAttributeTest();\n      break;\n    case 220:                       // 'processing-instruction'\n      try_PITest();\n      break;\n    case 97:                        // 'comment'\n      try_CommentTest();\n      break;\n    case 249:                       // 'text'\n      try_TextTest();\n      break;\n    case 188:                       // 'namespace-node'\n      try_NamespaceNodeTest();\n      break;\n    default:\n      try_AnyKindTest();\n    }\n  }\n\n  function parse_AnyKindTest()\n  {\n    eventHandler.startNonterminal(\"AnyKindTest\", e0);\n    shift(194);                     // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AnyKindTest\", e0);\n  }\n\n  function try_AnyKindTest()\n  {\n    shiftT(194);                    // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_DocumentTest()\n  {\n    eventHandler.startNonterminal(\"DocumentTest\", e0);\n    shift(121);                     // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(154);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 122:                     // 'element'\n        whitespace();\n        parse_ElementTest();\n        break;\n      default:\n        whitespace();\n        parse_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"DocumentTest\", e0);\n  }\n\n  function try_DocumentTest()\n  {\n    shiftT(121);                    // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(154);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 122:                     // 'element'\n        try_ElementTest();\n        break;\n      default:\n        try_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_TextTest()\n  {\n    eventHandler.startNonterminal(\"TextTest\", e0);\n    shift(249);                     // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"TextTest\", e0);\n  }\n\n  function try_TextTest()\n  {\n    shiftT(249);                    // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_CommentTest()\n  {\n    eventHandler.startNonterminal(\"CommentTest\", e0);\n    shift(97);                      // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"CommentTest\", e0);\n  }\n\n  function try_CommentTest()\n  {\n    shiftT(97);                     // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_NamespaceNodeTest()\n  {\n    eventHandler.startNonterminal(\"NamespaceNodeTest\", e0);\n    shift(188);                     // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"NamespaceNodeTest\", e0);\n  }\n\n  function try_NamespaceNodeTest()\n  {\n    shiftT(188);                    // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_PITest()\n  {\n    eventHandler.startNonterminal(\"PITest\", e0);\n    shift(220);                     // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(243);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shift(11);                  // StringLiteral\n        break;\n      default:\n        whitespace();\n        parse_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"PITest\", e0);\n  }\n\n  function try_PITest()\n  {\n    shiftT(220);                    // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(243);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shiftT(11);                 // StringLiteral\n        break;\n      default:\n        try_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttributeTest()\n  {\n    eventHandler.startNonterminal(\"AttributeTest\", e0);\n    shift(83);                      // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_AttribNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shift(42);                  // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AttributeTest\", e0);\n  }\n\n  function try_AttributeTest()\n  {\n    shiftT(83);                     // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      try_AttribNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shiftT(42);                 // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttribNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"AttribNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      parse_AttributeName();\n    }\n    eventHandler.endNonterminal(\"AttribNameOrWildcard\", e0);\n  }\n\n  function try_AttribNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      try_AttributeName();\n    }\n  }\n\n  function parse_SchemaAttributeTest()\n  {\n    eventHandler.startNonterminal(\"SchemaAttributeTest\", e0);\n    shift(230);                     // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"SchemaAttributeTest\", e0);\n  }\n\n  function try_SchemaAttributeTest()\n  {\n    shiftT(230);                    // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttributeDeclaration()\n  {\n    eventHandler.startNonterminal(\"AttributeDeclaration\", e0);\n    parse_AttributeName();\n    eventHandler.endNonterminal(\"AttributeDeclaration\", e0);\n  }\n\n  function try_AttributeDeclaration()\n  {\n    try_AttributeName();\n  }\n\n  function parse_ElementTest()\n  {\n    eventHandler.startNonterminal(\"ElementTest\", e0);\n    shift(122);                     // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_ElementNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shift(42);                  // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        lookahead1W(106);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 65)               // '?'\n        {\n          shift(65);                // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ElementTest\", e0);\n  }\n\n  function try_ElementTest()\n  {\n    shiftT(122);                    // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      try_ElementNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shiftT(42);                 // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        lookahead1W(106);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 65)               // '?'\n        {\n          shiftT(65);               // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ElementNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"ElementNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      parse_ElementName();\n    }\n    eventHandler.endNonterminal(\"ElementNameOrWildcard\", e0);\n  }\n\n  function try_ElementNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      try_ElementName();\n    }\n  }\n\n  function parse_SchemaElementTest()\n  {\n    eventHandler.startNonterminal(\"SchemaElementTest\", e0);\n    shift(231);                     // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"SchemaElementTest\", e0);\n  }\n\n  function try_SchemaElementTest()\n  {\n    shiftT(231);                    // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ElementDeclaration()\n  {\n    eventHandler.startNonterminal(\"ElementDeclaration\", e0);\n    parse_ElementName();\n    eventHandler.endNonterminal(\"ElementDeclaration\", e0);\n  }\n\n  function try_ElementDeclaration()\n  {\n    try_ElementName();\n  }\n\n  function parse_AttributeName()\n  {\n    eventHandler.startNonterminal(\"AttributeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AttributeName\", e0);\n  }\n\n  function try_AttributeName()\n  {\n    try_EQName();\n  }\n\n  function parse_ElementName()\n  {\n    eventHandler.startNonterminal(\"ElementName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"ElementName\", e0);\n  }\n\n  function try_ElementName()\n  {\n    try_EQName();\n  }\n\n  function parse_SimpleTypeName()\n  {\n    eventHandler.startNonterminal(\"SimpleTypeName\", e0);\n    parse_TypeName();\n    eventHandler.endNonterminal(\"SimpleTypeName\", e0);\n  }\n\n  function try_SimpleTypeName()\n  {\n    try_TypeName();\n  }\n\n  function parse_TypeName()\n  {\n    eventHandler.startNonterminal(\"TypeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"TypeName\", e0);\n  }\n\n  function try_TypeName()\n  {\n    try_EQName();\n  }\n\n  function parse_FunctionTest()\n  {\n    eventHandler.startNonterminal(\"FunctionTest\", e0);\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(7, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(7, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      whitespace();\n      parse_AnyFunctionTest();\n      break;\n    default:\n      whitespace();\n      parse_TypedFunctionTest();\n    }\n    eventHandler.endNonterminal(\"FunctionTest\", e0);\n  }\n\n  function try_FunctionTest()\n  {\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(7, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        memoize(7, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(7, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_AnyFunctionTest();\n      break;\n    case -3:\n      break;\n    default:\n      try_TypedFunctionTest();\n    }\n  }\n\n  function parse_AnyFunctionTest()\n  {\n    eventHandler.startNonterminal(\"AnyFunctionTest\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shift(39);                      // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AnyFunctionTest\", e0);\n  }\n\n  function try_AnyFunctionTest()\n  {\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shiftT(39);                     // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_TypedFunctionTest()\n  {\n    eventHandler.startNonterminal(\"TypedFunctionTest\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(258);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_SequenceType();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(253);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_SequenceType();\n      }\n    }\n    shift(38);                      // ')'\n    lookahead1W(33);                // S^WS | '(:' | 'as'\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypedFunctionTest\", e0);\n  }\n\n  function try_TypedFunctionTest()\n  {\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(258);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      try_SequenceType();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(253);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_SequenceType();\n      }\n    }\n    shiftT(38);                     // ')'\n    lookahead1W(33);                // S^WS | '(:' | 'as'\n    shiftT(80);                     // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_ParenthesizedItemType()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedItemType\", e0);\n    shift(35);                      // '('\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedItemType\", e0);\n  }\n\n  function try_ParenthesizedItemType()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_RevalidationDecl()\n  {\n    eventHandler.startNonterminal(\"RevalidationDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(75);                // S^WS | '(:' | 'revalidation'\n    shift(226);                     // 'revalidation'\n    lookahead1W(162);               // S^WS | '(:' | 'lax' | 'skip' | 'strict'\n    switch (l1)\n    {\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    default:\n      shift(238);                   // 'skip'\n    }\n    eventHandler.endNonterminal(\"RevalidationDecl\", e0);\n  }\n\n  function parse_InsertExprTargetChoice()\n  {\n    eventHandler.startNonterminal(\"InsertExprTargetChoice\", e0);\n    switch (l1)\n    {\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    default:\n      if (l1 == 80)                 // 'as'\n      {\n        shift(80);                  // 'as'\n        lookahead1W(123);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 136:                   // 'first'\n          shift(136);               // 'first'\n          break;\n        default:\n          shift(173);               // 'last'\n        }\n      }\n      lookahead1W(57);              // S^WS | '(:' | 'into'\n      shift(165);                   // 'into'\n    }\n    eventHandler.endNonterminal(\"InsertExprTargetChoice\", e0);\n  }\n\n  function try_InsertExprTargetChoice()\n  {\n    switch (l1)\n    {\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    default:\n      if (l1 == 80)                 // 'as'\n      {\n        shiftT(80);                 // 'as'\n        lookahead1W(123);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 136:                   // 'first'\n          shiftT(136);              // 'first'\n          break;\n        default:\n          shiftT(173);              // 'last'\n        }\n      }\n      lookahead1W(57);              // S^WS | '(:' | 'into'\n      shiftT(165);                  // 'into'\n    }\n  }\n\n  function parse_InsertExpr()\n  {\n    eventHandler.startNonterminal(\"InsertExpr\", e0);\n    shift(161);                     // 'insert'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    default:\n      shift(195);                   // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_SourceExpr();\n    whitespace();\n    parse_InsertExprTargetChoice();\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"InsertExpr\", e0);\n  }\n\n  function try_InsertExpr()\n  {\n    shiftT(161);                    // 'insert'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    default:\n      shiftT(195);                  // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_SourceExpr();\n    try_InsertExprTargetChoice();\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_DeleteExpr()\n  {\n    eventHandler.startNonterminal(\"DeleteExpr\", e0);\n    shift(111);                     // 'delete'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    default:\n      shift(195);                   // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"DeleteExpr\", e0);\n  }\n\n  function try_DeleteExpr()\n  {\n    shiftT(111);                    // 'delete'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    default:\n      shiftT(195);                  // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_ReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"ReplaceExpr\", e0);\n    shift(223);                     // 'replace'\n    lookahead1W(134);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 267)                  // 'value'\n    {\n      shift(267);                   // 'value'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shift(200);                   // 'of'\n    }\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(276);                     // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReplaceExpr\", e0);\n  }\n\n  function try_ReplaceExpr()\n  {\n    shiftT(223);                    // 'replace'\n    lookahead1W(134);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 267)                  // 'value'\n    {\n      shiftT(267);                  // 'value'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shiftT(200);                  // 'of'\n    }\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shiftT(194);                    // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n    shiftT(276);                    // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_RenameExpr()\n  {\n    eventHandler.startNonterminal(\"RenameExpr\", e0);\n    shift(222);                     // 'rename'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(80);                      // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_NewNameExpr();\n    eventHandler.endNonterminal(\"RenameExpr\", e0);\n  }\n\n  function try_RenameExpr()\n  {\n    shiftT(222);                    // 'rename'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shiftT(194);                    // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n    shiftT(80);                     // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_NewNameExpr();\n  }\n\n  function parse_SourceExpr()\n  {\n    eventHandler.startNonterminal(\"SourceExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SourceExpr\", e0);\n  }\n\n  function try_SourceExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TargetExpr()\n  {\n    eventHandler.startNonterminal(\"TargetExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TargetExpr\", e0);\n  }\n\n  function try_TargetExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_NewNameExpr()\n  {\n    eventHandler.startNonterminal(\"NewNameExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"NewNameExpr\", e0);\n  }\n\n  function try_NewNameExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TransformExpr()\n  {\n    eventHandler.startNonterminal(\"TransformExpr\", e0);\n    shift(104);                     // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_TransformSpec();\n    }\n    shift(184);                     // 'modify'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformExpr\", e0);\n  }\n\n  function try_TransformExpr()\n  {\n    shiftT(104);                    // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_TransformSpec();\n    }\n    shiftT(184);                    // 'modify'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TransformSpec()\n  {\n    eventHandler.startNonterminal(\"TransformSpec\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformSpec\", e0);\n  }\n\n  function try_TransformSpec()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_FTSelection()\n  {\n    eventHandler.startNonterminal(\"FTSelection\", e0);\n    parse_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(161);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 116                 // 'different'\n       && lk != 118                 // 'distance'\n       && lk != 128                 // 'entire'\n       && lk != 206                 // 'ordered'\n       && lk != 227                 // 'same'\n       && lk != 275                 // 'window'\n       && lk != 65106               // 'at' 'end'\n       && lk != 123986)             // 'at' 'start'\n      {\n        break;\n      }\n      whitespace();\n      parse_FTPosFilter();\n    }\n    eventHandler.endNonterminal(\"FTSelection\", e0);\n  }\n\n  function try_FTSelection()\n  {\n    try_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(161);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 116                 // 'different'\n       && lk != 118                 // 'distance'\n       && lk != 128                 // 'entire'\n       && lk != 206                 // 'ordered'\n       && lk != 227                 // 'same'\n       && lk != 275                 // 'window'\n       && lk != 65106               // 'at' 'end'\n       && lk != 123986)             // 'at' 'start'\n      {\n        break;\n      }\n      try_FTPosFilter();\n    }\n  }\n\n  function parse_FTWeight()\n  {\n    eventHandler.startNonterminal(\"FTWeight\", e0);\n    shift(270);                     // 'weight'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"FTWeight\", e0);\n  }\n\n  function try_FTWeight()\n  {\n    shiftT(270);                    // 'weight'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FTOr()\n  {\n    eventHandler.startNonterminal(\"FTOr\", e0);\n    parse_FTAnd();\n    for (;;)\n    {\n      if (l1 != 146)                // 'ftor'\n      {\n        break;\n      }\n      shift(146);                   // 'ftor'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTAnd();\n    }\n    eventHandler.endNonterminal(\"FTOr\", e0);\n  }\n\n  function try_FTOr()\n  {\n    try_FTAnd();\n    for (;;)\n    {\n      if (l1 != 146)                // 'ftor'\n      {\n        break;\n      }\n      shiftT(146);                  // 'ftor'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTAnd();\n    }\n  }\n\n  function parse_FTAnd()\n  {\n    eventHandler.startNonterminal(\"FTAnd\", e0);\n    parse_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftand'\n      {\n        break;\n      }\n      shift(144);                   // 'ftand'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTMildNot();\n    }\n    eventHandler.endNonterminal(\"FTAnd\", e0);\n  }\n\n  function try_FTAnd()\n  {\n    try_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftand'\n      {\n        break;\n      }\n      shiftT(144);                  // 'ftand'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTMildNot();\n    }\n  }\n\n  function parse_FTMildNot()\n  {\n    eventHandler.startNonterminal(\"FTMildNot\", e0);\n    parse_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 196)                // 'not'\n      {\n        break;\n      }\n      shift(196);                   // 'not'\n      lookahead1W(56);              // S^WS | '(:' | 'in'\n      shift(156);                   // 'in'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTUnaryNot();\n    }\n    eventHandler.endNonterminal(\"FTMildNot\", e0);\n  }\n\n  function try_FTMildNot()\n  {\n    try_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 196)                // 'not'\n      {\n        break;\n      }\n      shiftT(196);                  // 'not'\n      lookahead1W(56);              // S^WS | '(:' | 'in'\n      shiftT(156);                  // 'in'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTUnaryNot();\n    }\n  }\n\n  function parse_FTUnaryNot()\n  {\n    eventHandler.startNonterminal(\"FTUnaryNot\", e0);\n    if (l1 == 145)                  // 'ftnot'\n    {\n      shift(145);                   // 'ftnot'\n    }\n    lookahead1W(164);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    whitespace();\n    parse_FTPrimaryWithOptions();\n    eventHandler.endNonterminal(\"FTUnaryNot\", e0);\n  }\n\n  function try_FTUnaryNot()\n  {\n    if (l1 == 145)                  // 'ftnot'\n    {\n      shiftT(145);                  // 'ftnot'\n    }\n    lookahead1W(164);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    try_FTPrimaryWithOptions();\n  }\n\n  function parse_FTPrimaryWithOptions()\n  {\n    eventHandler.startNonterminal(\"FTPrimaryWithOptions\", e0);\n    parse_FTPrimary();\n    lookahead1W(213);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 265)                  // 'using'\n    {\n      whitespace();\n      parse_FTMatchOptions();\n    }\n    if (l1 == 270)                  // 'weight'\n    {\n      whitespace();\n      parse_FTWeight();\n    }\n    eventHandler.endNonterminal(\"FTPrimaryWithOptions\", e0);\n  }\n\n  function try_FTPrimaryWithOptions()\n  {\n    try_FTPrimary();\n    lookahead1W(213);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 265)                  // 'using'\n    {\n      try_FTMatchOptions();\n    }\n    if (l1 == 270)                  // 'weight'\n    {\n      try_FTWeight();\n    }\n  }\n\n  function parse_FTPrimary()\n  {\n    eventHandler.startNonterminal(\"FTPrimary\", e0);\n    switch (l1)\n    {\n    case 35:                        // '('\n      shift(35);                    // '('\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      shift(38);                    // ')'\n      break;\n    case 36:                        // '(#'\n      parse_FTExtensionSelection();\n      break;\n    default:\n      parse_FTWords();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 199)                // 'occurs'\n      {\n        whitespace();\n        parse_FTTimes();\n      }\n    }\n    eventHandler.endNonterminal(\"FTPrimary\", e0);\n  }\n\n  function try_FTPrimary()\n  {\n    switch (l1)\n    {\n    case 35:                        // '('\n      shiftT(35);                   // '('\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      shiftT(38);                   // ')'\n      break;\n    case 36:                        // '(#'\n      try_FTExtensionSelection();\n      break;\n    default:\n      try_FTWords();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 199)                // 'occurs'\n      {\n        try_FTTimes();\n      }\n    }\n  }\n\n  function parse_FTWords()\n  {\n    eventHandler.startNonterminal(\"FTWords\", e0);\n    parse_FTWordsValue();\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 72                    // 'all'\n     || l1 == 77                    // 'any'\n     || l1 == 214)                  // 'phrase'\n    {\n      whitespace();\n      parse_FTAnyallOption();\n    }\n    eventHandler.endNonterminal(\"FTWords\", e0);\n  }\n\n  function try_FTWords()\n  {\n    try_FTWordsValue();\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 72                    // 'all'\n     || l1 == 77                    // 'any'\n     || l1 == 214)                  // 'phrase'\n    {\n      try_FTAnyallOption();\n    }\n  }\n\n  function parse_FTWordsValue()\n  {\n    eventHandler.startNonterminal(\"FTWordsValue\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n    }\n    eventHandler.endNonterminal(\"FTWordsValue\", e0);\n  }\n\n  function try_FTWordsValue()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n    }\n  }\n\n  function parse_FTExtensionSelection()\n  {\n    eventHandler.startNonterminal(\"FTExtensionSelection\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(281);                     // '{'\n    lookahead1W(184);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_FTSelection();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"FTExtensionSelection\", e0);\n  }\n\n  function try_FTExtensionSelection()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(281);                    // '{'\n    lookahead1W(184);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      try_FTSelection();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FTAnyallOption()\n  {\n    eventHandler.startNonterminal(\"FTAnyallOption\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'any'\n      shift(77);                    // 'any'\n      lookahead1W(217);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 278)                // 'word'\n      {\n        shift(278);                 // 'word'\n      }\n      break;\n    case 72:                        // 'all'\n      shift(72);                    // 'all'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 279)                // 'words'\n      {\n        shift(279);                 // 'words'\n      }\n      break;\n    default:\n      shift(214);                   // 'phrase'\n    }\n    eventHandler.endNonterminal(\"FTAnyallOption\", e0);\n  }\n\n  function try_FTAnyallOption()\n  {\n    switch (l1)\n    {\n    case 77:                        // 'any'\n      shiftT(77);                   // 'any'\n      lookahead1W(217);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 278)                // 'word'\n      {\n        shiftT(278);                // 'word'\n      }\n      break;\n    case 72:                        // 'all'\n      shiftT(72);                   // 'all'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 279)                // 'words'\n      {\n        shiftT(279);                // 'words'\n      }\n      break;\n    default:\n      shiftT(214);                  // 'phrase'\n    }\n  }\n\n  function parse_FTTimes()\n  {\n    eventHandler.startNonterminal(\"FTTimes\", e0);\n    shift(199);                     // 'occurs'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    shift(252);                     // 'times'\n    eventHandler.endNonterminal(\"FTTimes\", e0);\n  }\n\n  function try_FTTimes()\n  {\n    shiftT(199);                    // 'occurs'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    shiftT(252);                    // 'times'\n  }\n\n  function parse_FTRange()\n  {\n    eventHandler.startNonterminal(\"FTRange\", e0);\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shift(131);                   // 'exactly'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shift(176);                 // 'least'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n        break;\n      default:\n        shift(186);                 // 'most'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n      }\n      break;\n    default:\n      shift(142);                   // 'from'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      shift(253);                   // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"FTRange\", e0);\n  }\n\n  function try_FTRange()\n  {\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shiftT(131);                  // 'exactly'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shiftT(176);                // 'least'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_AdditiveExpr();\n        break;\n      default:\n        shiftT(186);                // 'most'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_AdditiveExpr();\n      }\n      break;\n    default:\n      shiftT(142);                  // 'from'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n      shiftT(253);                  // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_FTPosFilter()\n  {\n    eventHandler.startNonterminal(\"FTPosFilter\", e0);\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      parse_FTOrder();\n      break;\n    case 275:                       // 'window'\n      parse_FTWindow();\n      break;\n    case 118:                       // 'distance'\n      parse_FTDistance();\n      break;\n    case 116:                       // 'different'\n    case 227:                       // 'same'\n      parse_FTScope();\n      break;\n    default:\n      parse_FTContent();\n    }\n    eventHandler.endNonterminal(\"FTPosFilter\", e0);\n  }\n\n  function try_FTPosFilter()\n  {\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      try_FTOrder();\n      break;\n    case 275:                       // 'window'\n      try_FTWindow();\n      break;\n    case 118:                       // 'distance'\n      try_FTDistance();\n      break;\n    case 116:                       // 'different'\n    case 227:                       // 'same'\n      try_FTScope();\n      break;\n    default:\n      try_FTContent();\n    }\n  }\n\n  function parse_FTOrder()\n  {\n    eventHandler.startNonterminal(\"FTOrder\", e0);\n    shift(206);                     // 'ordered'\n    eventHandler.endNonterminal(\"FTOrder\", e0);\n  }\n\n  function try_FTOrder()\n  {\n    shiftT(206);                    // 'ordered'\n  }\n\n  function parse_FTWindow()\n  {\n    eventHandler.startNonterminal(\"FTWindow\", e0);\n    shift(275);                     // 'window'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_AdditiveExpr();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTWindow\", e0);\n  }\n\n  function try_FTWindow()\n  {\n    shiftT(275);                    // 'window'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_AdditiveExpr();\n    try_FTUnit();\n  }\n\n  function parse_FTDistance()\n  {\n    eventHandler.startNonterminal(\"FTDistance\", e0);\n    shift(118);                     // 'distance'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTDistance\", e0);\n  }\n\n  function try_FTDistance()\n  {\n    shiftT(118);                    // 'distance'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    try_FTUnit();\n  }\n\n  function parse_FTUnit()\n  {\n    eventHandler.startNonterminal(\"FTUnit\", e0);\n    switch (l1)\n    {\n    case 279:                       // 'words'\n      shift(279);                   // 'words'\n      break;\n    case 237:                       // 'sentences'\n      shift(237);                   // 'sentences'\n      break;\n    default:\n      shift(209);                   // 'paragraphs'\n    }\n    eventHandler.endNonterminal(\"FTUnit\", e0);\n  }\n\n  function try_FTUnit()\n  {\n    switch (l1)\n    {\n    case 279:                       // 'words'\n      shiftT(279);                  // 'words'\n      break;\n    case 237:                       // 'sentences'\n      shiftT(237);                  // 'sentences'\n      break;\n    default:\n      shiftT(209);                  // 'paragraphs'\n    }\n  }\n\n  function parse_FTScope()\n  {\n    eventHandler.startNonterminal(\"FTScope\", e0);\n    switch (l1)\n    {\n    case 227:                       // 'same'\n      shift(227);                   // 'same'\n      break;\n    default:\n      shift(116);                   // 'different'\n    }\n    lookahead1W(136);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    whitespace();\n    parse_FTBigUnit();\n    eventHandler.endNonterminal(\"FTScope\", e0);\n  }\n\n  function try_FTScope()\n  {\n    switch (l1)\n    {\n    case 227:                       // 'same'\n      shiftT(227);                  // 'same'\n      break;\n    default:\n      shiftT(116);                  // 'different'\n    }\n    lookahead1W(136);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    try_FTBigUnit();\n  }\n\n  function parse_FTBigUnit()\n  {\n    eventHandler.startNonterminal(\"FTBigUnit\", e0);\n    switch (l1)\n    {\n    case 236:                       // 'sentence'\n      shift(236);                   // 'sentence'\n      break;\n    default:\n      shift(208);                   // 'paragraph'\n    }\n    eventHandler.endNonterminal(\"FTBigUnit\", e0);\n  }\n\n  function try_FTBigUnit()\n  {\n    switch (l1)\n    {\n    case 236:                       // 'sentence'\n      shiftT(236);                  // 'sentence'\n      break;\n    default:\n      shiftT(208);                  // 'paragraph'\n    }\n  }\n\n  function parse_FTContent()\n  {\n    eventHandler.startNonterminal(\"FTContent\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(121);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 242:                     // 'start'\n        shift(242);                 // 'start'\n        break;\n      default:\n        shift(127);                 // 'end'\n      }\n      break;\n    default:\n      shift(128);                   // 'entire'\n      lookahead1W(45);              // S^WS | '(:' | 'content'\n      shift(101);                   // 'content'\n    }\n    eventHandler.endNonterminal(\"FTContent\", e0);\n  }\n\n  function try_FTContent()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(121);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 242:                     // 'start'\n        shiftT(242);                // 'start'\n        break;\n      default:\n        shiftT(127);                // 'end'\n      }\n      break;\n    default:\n      shiftT(128);                  // 'entire'\n      lookahead1W(45);              // S^WS | '(:' | 'content'\n      shiftT(101);                  // 'content'\n    }\n  }\n\n  function parse_FTMatchOptions()\n  {\n    eventHandler.startNonterminal(\"FTMatchOptions\", e0);\n    for (;;)\n    {\n      shift(265);                   // 'using'\n      lookahead1W(204);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      whitespace();\n      parse_FTMatchOption();\n      lookahead1W(213);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 265)                // 'using'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"FTMatchOptions\", e0);\n  }\n\n  function try_FTMatchOptions()\n  {\n    for (;;)\n    {\n      shiftT(265);                  // 'using'\n      lookahead1W(204);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      try_FTMatchOption();\n      lookahead1W(213);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 265)                // 'using'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_FTMatchOption()\n  {\n    eventHandler.startNonterminal(\"FTMatchOption\", e0);\n    switch (l1)\n    {\n    case 191:                       // 'no'\n      lookahead2W(176);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 172:                       // 'language'\n      parse_FTLanguageOption();\n      break;\n    case 274:                       // 'wildcards'\n    case 140479:                    // 'no' 'wildcards'\n      parse_FTWildCardOption();\n      break;\n    case 251:                       // 'thesaurus'\n    case 128703:                    // 'no' 'thesaurus'\n      parse_FTThesaurusOption();\n      break;\n    case 243:                       // 'stemming'\n    case 124607:                    // 'no' 'stemming'\n      parse_FTStemOption();\n      break;\n    case 115:                       // 'diacritics'\n      parse_FTDiacriticsOption();\n      break;\n    case 244:                       // 'stop'\n    case 125119:                    // 'no' 'stop'\n      parse_FTStopWordOption();\n      break;\n    case 203:                       // 'option'\n      parse_FTExtensionOption();\n      break;\n    default:\n      parse_FTCaseOption();\n    }\n    eventHandler.endNonterminal(\"FTMatchOption\", e0);\n  }\n\n  function try_FTMatchOption()\n  {\n    switch (l1)\n    {\n    case 191:                       // 'no'\n      lookahead2W(176);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 172:                       // 'language'\n      try_FTLanguageOption();\n      break;\n    case 274:                       // 'wildcards'\n    case 140479:                    // 'no' 'wildcards'\n      try_FTWildCardOption();\n      break;\n    case 251:                       // 'thesaurus'\n    case 128703:                    // 'no' 'thesaurus'\n      try_FTThesaurusOption();\n      break;\n    case 243:                       // 'stemming'\n    case 124607:                    // 'no' 'stemming'\n      try_FTStemOption();\n      break;\n    case 115:                       // 'diacritics'\n      try_FTDiacriticsOption();\n      break;\n    case 244:                       // 'stop'\n    case 125119:                    // 'no' 'stop'\n      try_FTStopWordOption();\n      break;\n    case 203:                       // 'option'\n      try_FTExtensionOption();\n      break;\n    default:\n      try_FTCaseOption();\n    }\n  }\n\n  function parse_FTCaseOption()\n  {\n    eventHandler.startNonterminal(\"FTCaseOption\", e0);\n    switch (l1)\n    {\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      lookahead1W(128);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 160:                     // 'insensitive'\n        shift(160);                 // 'insensitive'\n        break;\n      default:\n        shift(235);                 // 'sensitive'\n      }\n      break;\n    case 180:                       // 'lowercase'\n      shift(180);                   // 'lowercase'\n      break;\n    default:\n      shift(264);                   // 'uppercase'\n    }\n    eventHandler.endNonterminal(\"FTCaseOption\", e0);\n  }\n\n  function try_FTCaseOption()\n  {\n    switch (l1)\n    {\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      lookahead1W(128);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 160:                     // 'insensitive'\n        shiftT(160);                // 'insensitive'\n        break;\n      default:\n        shiftT(235);                // 'sensitive'\n      }\n      break;\n    case 180:                       // 'lowercase'\n      shiftT(180);                  // 'lowercase'\n      break;\n    default:\n      shiftT(264);                  // 'uppercase'\n    }\n  }\n\n  function parse_FTDiacriticsOption()\n  {\n    eventHandler.startNonterminal(\"FTDiacriticsOption\", e0);\n    shift(115);                     // 'diacritics'\n    lookahead1W(128);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 160:                       // 'insensitive'\n      shift(160);                   // 'insensitive'\n      break;\n    default:\n      shift(235);                   // 'sensitive'\n    }\n    eventHandler.endNonterminal(\"FTDiacriticsOption\", e0);\n  }\n\n  function try_FTDiacriticsOption()\n  {\n    shiftT(115);                    // 'diacritics'\n    lookahead1W(128);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 160:                       // 'insensitive'\n      shiftT(160);                  // 'insensitive'\n      break;\n    default:\n      shiftT(235);                  // 'sensitive'\n    }\n  }\n\n  function parse_FTStemOption()\n  {\n    eventHandler.startNonterminal(\"FTStemOption\", e0);\n    switch (l1)\n    {\n    case 243:                       // 'stemming'\n      shift(243);                   // 'stemming'\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(77);              // S^WS | '(:' | 'stemming'\n      shift(243);                   // 'stemming'\n    }\n    eventHandler.endNonterminal(\"FTStemOption\", e0);\n  }\n\n  function try_FTStemOption()\n  {\n    switch (l1)\n    {\n    case 243:                       // 'stemming'\n      shiftT(243);                  // 'stemming'\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(77);              // S^WS | '(:' | 'stemming'\n      shiftT(243);                  // 'stemming'\n    }\n  }\n\n  function parse_FTThesaurusOption()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusOption\", e0);\n    switch (l1)\n    {\n    case 251:                       // 'thesaurus'\n      shift(251);                   // 'thesaurus'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        whitespace();\n        parse_FTThesaurusID();\n        break;\n      case 110:                     // 'default'\n        shift(110);                 // 'default'\n        break;\n      default:\n        shift(35);                  // '('\n        lookahead1W(116);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 82:                    // 'at'\n          whitespace();\n          parse_FTThesaurusID();\n          break;\n        default:\n          shift(110);               // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(105);         // S^WS | '(:' | ')' | ','\n          if (l1 != 42)             // ','\n          {\n            break;\n          }\n          shift(42);                // ','\n          lookahead1W(34);          // S^WS | '(:' | 'at'\n          whitespace();\n          parse_FTThesaurusID();\n        }\n        shift(38);                  // ')'\n      }\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(81);              // S^WS | '(:' | 'thesaurus'\n      shift(251);                   // 'thesaurus'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusOption\", e0);\n  }\n\n  function try_FTThesaurusOption()\n  {\n    switch (l1)\n    {\n    case 251:                       // 'thesaurus'\n      shiftT(251);                  // 'thesaurus'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        try_FTThesaurusID();\n        break;\n      case 110:                     // 'default'\n        shiftT(110);                // 'default'\n        break;\n      default:\n        shiftT(35);                 // '('\n        lookahead1W(116);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 82:                    // 'at'\n          try_FTThesaurusID();\n          break;\n        default:\n          shiftT(110);              // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(105);         // S^WS | '(:' | ')' | ','\n          if (l1 != 42)             // ','\n          {\n            break;\n          }\n          shiftT(42);               // ','\n          lookahead1W(34);          // S^WS | '(:' | 'at'\n          try_FTThesaurusID();\n        }\n        shiftT(38);                 // ')'\n      }\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(81);              // S^WS | '(:' | 'thesaurus'\n      shiftT(251);                  // 'thesaurus'\n    }\n  }\n\n  function parse_FTThesaurusID()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusID\", e0);\n    shift(82);                      // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(219);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 221)                  // 'relationship'\n    {\n      shift(221);                   // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    lookahead1W(215);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      lookahead2W(183);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 131                   // 'exactly'\n     || lk == 142                   // 'from'\n     || lk == 90194                 // 'at' 'least'\n     || lk == 95314)                // 'at' 'most'\n    {\n      whitespace();\n      parse_FTLiteralRange();\n      lookahead1W(61);              // S^WS | '(:' | 'levels'\n      shift(178);                   // 'levels'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusID\", e0);\n  }\n\n  function try_FTThesaurusID()\n  {\n    shiftT(82);                     // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n    lookahead1W(219);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 221)                  // 'relationship'\n    {\n      shiftT(221);                  // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n    }\n    lookahead1W(215);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      lookahead2W(183);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 131                   // 'exactly'\n     || lk == 142                   // 'from'\n     || lk == 90194                 // 'at' 'least'\n     || lk == 95314)                // 'at' 'most'\n    {\n      try_FTLiteralRange();\n      lookahead1W(61);              // S^WS | '(:' | 'levels'\n      shiftT(178);                  // 'levels'\n    }\n  }\n\n  function parse_FTLiteralRange()\n  {\n    eventHandler.startNonterminal(\"FTLiteralRange\", e0);\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shift(131);                   // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shift(176);                 // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n        break;\n      default:\n        shift(186);                 // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n      }\n      break;\n    default:\n      shift(142);                   // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      lookahead1W(82);              // S^WS | '(:' | 'to'\n      shift(253);                   // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n    }\n    eventHandler.endNonterminal(\"FTLiteralRange\", e0);\n  }\n\n  function try_FTLiteralRange()\n  {\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shiftT(131);                  // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shiftT(176);                // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n        break;\n      default:\n        shiftT(186);                // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n      }\n      break;\n    default:\n      shiftT(142);                  // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      lookahead1W(82);              // S^WS | '(:' | 'to'\n      shiftT(253);                  // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n    }\n  }\n\n  function parse_FTStopWordOption()\n  {\n    eventHandler.startNonterminal(\"FTStopWordOption\", e0);\n    switch (l1)\n    {\n    case 244:                       // 'stop'\n      shift(244);                   // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shift(279);                   // 'words'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 110:                     // 'default'\n        shift(110);                 // 'default'\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        whitespace();\n        parse_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'stop'\n      shift(244);                   // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shift(279);                   // 'words'\n    }\n    eventHandler.endNonterminal(\"FTStopWordOption\", e0);\n  }\n\n  function try_FTStopWordOption()\n  {\n    switch (l1)\n    {\n    case 244:                       // 'stop'\n      shiftT(244);                  // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shiftT(279);                  // 'words'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 110:                     // 'default'\n        shiftT(110);                // 'default'\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        try_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'stop'\n      shiftT(244);                  // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shiftT(279);                  // 'words'\n    }\n  }\n\n  function parse_FTStopWords()\n  {\n    eventHandler.startNonterminal(\"FTStopWords\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      break;\n    default:\n      shift(35);                    // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"FTStopWords\", e0);\n  }\n\n  function try_FTStopWords()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n      break;\n    default:\n      shiftT(35);                   // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shiftT(11);                 // StringLiteral\n      }\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_FTStopWordsInclExcl()\n  {\n    eventHandler.startNonterminal(\"FTStopWordsInclExcl\", e0);\n    switch (l1)\n    {\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    default:\n      shift(132);                   // 'except'\n    }\n    lookahead1W(103);               // S^WS | '(' | '(:' | 'at'\n    whitespace();\n    parse_FTStopWords();\n    eventHandler.endNonterminal(\"FTStopWordsInclExcl\", e0);\n  }\n\n  function try_FTStopWordsInclExcl()\n  {\n    switch (l1)\n    {\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    default:\n      shiftT(132);                  // 'except'\n    }\n    lookahead1W(103);               // S^WS | '(' | '(:' | 'at'\n    try_FTStopWords();\n  }\n\n  function parse_FTLanguageOption()\n  {\n    eventHandler.startNonterminal(\"FTLanguageOption\", e0);\n    shift(172);                     // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTLanguageOption\", e0);\n  }\n\n  function try_FTLanguageOption()\n  {\n    shiftT(172);                    // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTWildCardOption()\n  {\n    eventHandler.startNonterminal(\"FTWildCardOption\", e0);\n    switch (l1)\n    {\n    case 274:                       // 'wildcards'\n      shift(274);                   // 'wildcards'\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(87);              // S^WS | '(:' | 'wildcards'\n      shift(274);                   // 'wildcards'\n    }\n    eventHandler.endNonterminal(\"FTWildCardOption\", e0);\n  }\n\n  function try_FTWildCardOption()\n  {\n    switch (l1)\n    {\n    case 274:                       // 'wildcards'\n      shiftT(274);                  // 'wildcards'\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(87);              // S^WS | '(:' | 'wildcards'\n      shiftT(274);                  // 'wildcards'\n    }\n  }\n\n  function parse_FTExtensionOption()\n  {\n    eventHandler.startNonterminal(\"FTExtensionOption\", e0);\n    shift(203);                     // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTExtensionOption\", e0);\n  }\n\n  function try_FTExtensionOption()\n  {\n    shiftT(203);                    // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTIgnoreOption()\n  {\n    eventHandler.startNonterminal(\"FTIgnoreOption\", e0);\n    shift(277);                     // 'without'\n    lookahead1W(45);                // S^WS | '(:' | 'content'\n    shift(101);                     // 'content'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_UnionExpr();\n    eventHandler.endNonterminal(\"FTIgnoreOption\", e0);\n  }\n\n  function try_FTIgnoreOption()\n  {\n    shiftT(277);                    // 'without'\n    lookahead1W(45);                // S^WS | '(:' | 'content'\n    shiftT(101);                    // 'content'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_UnionExpr();\n  }\n\n  function parse_CollectionDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionDecl\", e0);\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(111);               // S^WS | '(:' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_CollectionTypeDecl();\n    }\n    eventHandler.endNonterminal(\"CollectionDecl\", e0);\n  }\n\n  function parse_CollectionTypeDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionTypeDecl\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(171);               // S^WS | '(:' | '*' | '+' | ';' | '?'\n    if (l1 != 54)                   // ';'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"CollectionTypeDecl\", e0);\n  }\n\n  function parse_IndexName()\n  {\n    eventHandler.startNonterminal(\"IndexName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"IndexName\", e0);\n  }\n\n  function parse_IndexDomainExpr()\n  {\n    eventHandler.startNonterminal(\"IndexDomainExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexDomainExpr\", e0);\n  }\n\n  function parse_IndexKeySpec()\n  {\n    eventHandler.startNonterminal(\"IndexKeySpec\", e0);\n    parse_IndexKeyExpr();\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_IndexKeyTypeDecl();\n    }\n    lookahead1W(156);               // S^WS | '(:' | ',' | ';' | 'collation'\n    if (l1 == 95)                   // 'collation'\n    {\n      whitespace();\n      parse_IndexKeyCollation();\n    }\n    eventHandler.endNonterminal(\"IndexKeySpec\", e0);\n  }\n\n  function parse_IndexKeyExpr()\n  {\n    eventHandler.startNonterminal(\"IndexKeyExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexKeyExpr\", e0);\n  }\n\n  function parse_IndexKeyTypeDecl()\n  {\n    eventHandler.startNonterminal(\"IndexKeyTypeDecl\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AtomicType();\n    lookahead1W(189);               // S^WS | '(:' | '*' | '+' | ',' | ';' | '?' | 'collation'\n    if (l1 == 40                    // '*'\n     || l1 == 41                    // '+'\n     || l1 == 65)                   // '?'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"IndexKeyTypeDecl\", e0);\n  }\n\n  function parse_AtomicType()\n  {\n    eventHandler.startNonterminal(\"AtomicType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicType\", e0);\n  }\n\n  function parse_IndexKeyCollation()\n  {\n    eventHandler.startNonterminal(\"IndexKeyCollation\", e0);\n    shift(95);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"IndexKeyCollation\", e0);\n  }\n\n  function parse_IndexDecl()\n  {\n    eventHandler.startNonterminal(\"IndexDecl\", e0);\n    shift(157);                     // 'index'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_IndexName();\n    lookahead1W(68);                // S^WS | '(:' | 'on'\n    shift(201);                     // 'on'\n    lookahead1W(66);                // S^WS | '(:' | 'nodes'\n    shift(195);                     // 'nodes'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_IndexDomainExpr();\n    shift(88);                      // 'by'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_IndexKeySpec();\n    for (;;)\n    {\n      lookahead1W(107);             // S^WS | '(:' | ',' | ';'\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_IndexKeySpec();\n    }\n    eventHandler.endNonterminal(\"IndexDecl\", e0);\n  }\n\n  function parse_ICDecl()\n  {\n    eventHandler.startNonterminal(\"ICDecl\", e0);\n    shift(163);                     // 'integrity'\n    lookahead1W(43);                // S^WS | '(:' | 'constraint'\n    shift(98);                      // 'constraint'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(124);               // S^WS | '(:' | 'foreign' | 'on'\n    switch (l1)\n    {\n    case 201:                       // 'on'\n      whitespace();\n      parse_ICCollection();\n      break;\n    default:\n      whitespace();\n      parse_ICForeignKey();\n    }\n    eventHandler.endNonterminal(\"ICDecl\", e0);\n  }\n\n  function parse_ICCollection()\n  {\n    eventHandler.startNonterminal(\"ICCollection\", e0);\n    shift(201);                     // 'on'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(150);               // S^WS | '$' | '(:' | 'foreach' | 'node'\n    switch (l1)\n    {\n    case 31:                        // '$'\n      whitespace();\n      parse_ICCollSequence();\n      break;\n    case 194:                       // 'node'\n      whitespace();\n      parse_ICCollSequenceUnique();\n      break;\n    default:\n      whitespace();\n      parse_ICCollNode();\n    }\n    eventHandler.endNonterminal(\"ICCollection\", e0);\n  }\n\n  function parse_ICCollSequence()\n  {\n    eventHandler.startNonterminal(\"ICCollSequence\", e0);\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollSequence\", e0);\n  }\n\n  function parse_ICCollSequenceUnique()\n  {\n    eventHandler.startNonterminal(\"ICCollSequenceUnique\", e0);\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(83);                // S^WS | '(:' | 'unique'\n    shift(261);                     // 'unique'\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICCollSequenceUnique\", e0);\n  }\n\n  function parse_ICCollNode()\n  {\n    eventHandler.startNonterminal(\"ICCollNode\", e0);\n    shift(140);                     // 'foreach'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollNode\", e0);\n  }\n\n  function parse_ICForeignKey()\n  {\n    eventHandler.startNonterminal(\"ICForeignKey\", e0);\n    shift(141);                     // 'foreign'\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(54);                // S^WS | '(:' | 'from'\n    whitespace();\n    parse_ICForeignKeySource();\n    whitespace();\n    parse_ICForeignKeyTarget();\n    eventHandler.endNonterminal(\"ICForeignKey\", e0);\n  }\n\n  function parse_ICForeignKeySource()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeySource\", e0);\n    shift(142);                     // 'from'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeySource\", e0);\n  }\n\n  function parse_ICForeignKeyTarget()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyTarget\", e0);\n    shift(253);                     // 'to'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeyTarget\", e0);\n  }\n\n  function parse_ICForeignKeyValues()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyValues\", e0);\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICForeignKeyValues\", e0);\n  }\n\n  function try_Comment()\n  {\n    shiftT(37);                     // '(:'\n    for (;;)\n    {\n      lookahead1(92);               // CommentContents | '(:' | ':)'\n      if (l1 == 51)                 // ':)'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 24:                      // CommentContents\n        shiftT(24);                 // CommentContents\n        break;\n      default:\n        try_Comment();\n      }\n    }\n    shiftT(51);                     // ':)'\n  }\n\n  function try_Whitespace()\n  {\n    switch (l1)\n    {\n    case 22:                        // S^WS\n      shiftT(22);                   // S^WS\n      break;\n    default:\n      try_Comment();\n    }\n  }\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    lookahead1(240);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      break;\n    case 97:                        // 'comment'\n      shift(97);                    // 'comment'\n      break;\n    case 121:                       // 'document-node'\n      shift(121);                   // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shift(125);                   // 'empty-sequence'\n      break;\n    case 147:                       // 'function'\n      shift(147);                   // 'function'\n      break;\n    case 154:                       // 'if'\n      shift(154);                   // 'if'\n      break;\n    case 167:                       // 'item'\n      shift(167);                   // 'item'\n      break;\n    case 188:                       // 'namespace-node'\n      shift(188);                   // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    case 220:                       // 'processing-instruction'\n      shift(220);                   // 'processing-instruction'\n      break;\n    case 230:                       // 'schema-attribute'\n      shift(230);                   // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shift(231);                   // 'schema-element'\n      break;\n    case 248:                       // 'switch'\n      shift(248);                   // 'switch'\n      break;\n    case 249:                       // 'text'\n      shift(249);                   // 'text'\n      break;\n    case 259:                       // 'typeswitch'\n      shift(259);                   // 'typeswitch'\n      break;\n    case 79:                        // 'array'\n      shift(79);                    // 'array'\n      break;\n    case 169:                       // 'json-item'\n      shift(169);                   // 'json-item'\n      break;\n    case 247:                       // 'structured-item'\n      shift(247);                   // 'structured-item'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function try_EQName()\n  {\n    lookahead1(240);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      break;\n    case 97:                        // 'comment'\n      shiftT(97);                   // 'comment'\n      break;\n    case 121:                       // 'document-node'\n      shiftT(121);                  // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shiftT(125);                  // 'empty-sequence'\n      break;\n    case 147:                       // 'function'\n      shiftT(147);                  // 'function'\n      break;\n    case 154:                       // 'if'\n      shiftT(154);                  // 'if'\n      break;\n    case 167:                       // 'item'\n      shiftT(167);                  // 'item'\n      break;\n    case 188:                       // 'namespace-node'\n      shiftT(188);                  // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    case 220:                       // 'processing-instruction'\n      shiftT(220);                  // 'processing-instruction'\n      break;\n    case 230:                       // 'schema-attribute'\n      shiftT(230);                  // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shiftT(231);                  // 'schema-element'\n      break;\n    case 248:                       // 'switch'\n      shiftT(248);                  // 'switch'\n      break;\n    case 249:                       // 'text'\n      shiftT(249);                  // 'text'\n      break;\n    case 259:                       // 'typeswitch'\n      shiftT(259);                  // 'typeswitch'\n      break;\n    case 79:                        // 'array'\n      shiftT(79);                   // 'array'\n      break;\n    case 169:                       // 'json-item'\n      shiftT(169);                  // 'json-item'\n      break;\n    case 247:                       // 'structured-item'\n      shiftT(247);                  // 'structured-item'\n      break;\n    default:\n      try_FunctionName();\n    }\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shift(6);                     // EQName^Token\n      break;\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shift(75);                    // 'ancestor-or-self'\n      break;\n    case 76:                        // 'and'\n      shift(76);                    // 'and'\n      break;\n    case 80:                        // 'as'\n      shift(80);                    // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shift(81);                    // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      break;\n    case 90:                        // 'cast'\n      shift(90);                    // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shift(91);                    // 'castable'\n      break;\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      break;\n    case 95:                        // 'collation'\n      shift(95);                    // 'collation'\n      break;\n    case 104:                       // 'copy'\n      shift(104);                   // 'copy'\n      break;\n    case 106:                       // 'count'\n      shift(106);                   // 'count'\n      break;\n    case 109:                       // 'declare'\n      shift(109);                   // 'declare'\n      break;\n    case 110:                       // 'default'\n      shift(110);                   // 'default'\n      break;\n    case 111:                       // 'delete'\n      shift(111);                   // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'descending'\n      shift(114);                   // 'descending'\n      break;\n    case 119:                       // 'div'\n      shift(119);                   // 'div'\n      break;\n    case 120:                       // 'document'\n      shift(120);                   // 'document'\n      break;\n    case 123:                       // 'else'\n      shift(123);                   // 'else'\n      break;\n    case 124:                       // 'empty'\n      shift(124);                   // 'empty'\n      break;\n    case 127:                       // 'end'\n      shift(127);                   // 'end'\n      break;\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 130:                       // 'every'\n      shift(130);                   // 'every'\n      break;\n    case 132:                       // 'except'\n      shift(132);                   // 'except'\n      break;\n    case 136:                       // 'first'\n      shift(136);                   // 'first'\n      break;\n    case 137:                       // 'following'\n      shift(137);                   // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      break;\n    case 139:                       // 'for'\n      shift(139);                   // 'for'\n      break;\n    case 148:                       // 'ge'\n      shift(148);                   // 'ge'\n      break;\n    case 150:                       // 'group'\n      shift(150);                   // 'group'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shift(153);                   // 'idiv'\n      break;\n    case 155:                       // 'import'\n      shift(155);                   // 'import'\n      break;\n    case 161:                       // 'insert'\n      shift(161);                   // 'insert'\n      break;\n    case 162:                       // 'instance'\n      shift(162);                   // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shift(164);                   // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shift(165);                   // 'into'\n      break;\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 173:                       // 'last'\n      shift(173);                   // 'last'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 177:                       // 'let'\n      shift(177);                   // 'let'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shift(183);                   // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shift(184);                   // 'modify'\n      break;\n    case 185:                       // 'module'\n      shift(185);                   // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 202:                       // 'only'\n      shift(202);                   // 'only'\n      break;\n    case 204:                       // 'or'\n      shift(204);                   // 'or'\n      break;\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      break;\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      break;\n    case 222:                       // 'rename'\n      shift(222);                   // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shift(223);                   // 'replace'\n      break;\n    case 224:                       // 'return'\n      shift(224);                   // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shift(228);                   // 'satisfies'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      break;\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    case 241:                       // 'stable'\n      shift(241);                   // 'stable'\n      break;\n    case 242:                       // 'start'\n      shift(242);                   // 'start'\n      break;\n    case 253:                       // 'to'\n      shift(253);                   // 'to'\n      break;\n    case 254:                       // 'treat'\n      shift(254);                   // 'treat'\n      break;\n    case 256:                       // 'try'\n      shift(256);                   // 'try'\n      break;\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    case 262:                       // 'unordered'\n      shift(262);                   // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shift(266);                   // 'validate'\n      break;\n    case 272:                       // 'where'\n      shift(272);                   // 'where'\n      break;\n    case 276:                       // 'with'\n      shift(276);                   // 'with'\n      break;\n    case 170:                       // 'jsoniq'\n      shift(170);                   // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shift(73);                    // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shift(84);                    // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shift(86);                    // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shift(87);                    // 'break'\n      break;\n    case 92:                        // 'catch'\n      shift(92);                    // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shift(99);                    // 'construction'\n      break;\n    case 102:                       // 'context'\n      shift(102);                   // 'context'\n      break;\n    case 103:                       // 'continue'\n      shift(103);                   // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shift(105);                   // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shift(133);                   // 'exit'\n      break;\n    case 134:                       // 'external'\n      shift(134);                   // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shift(143);                   // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shift(156);                   // 'in'\n      break;\n    case 157:                       // 'index'\n      shift(157);                   // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shift(163);                   // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shift(195);                   // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shift(203);                   // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shift(207);                   // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shift(226);                   // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shift(229);                   // 'schema'\n      break;\n    case 232:                       // 'score'\n      shift(232);                   // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shift(239);                   // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shift(257);                   // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shift(258);                   // 'type'\n      break;\n    case 263:                       // 'updating'\n      shift(263);                   // 'updating'\n      break;\n    case 267:                       // 'value'\n      shift(267);                   // 'value'\n      break;\n    case 268:                       // 'variable'\n      shift(268);                   // 'variable'\n      break;\n    case 269:                       // 'version'\n      shift(269);                   // 'version'\n      break;\n    case 273:                       // 'while'\n      shift(273);                   // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shift(98);                    // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shift(179);                   // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shift(225);                   // 'returning'\n      break;\n    case 78:                        // 'append'\n      shift(78);                    // 'append'\n      break;\n    case 135:                       // 'false'\n      shift(135);                   // 'false'\n      break;\n    case 142:                       // 'from'\n      shift(142);                   // 'from'\n      break;\n    case 197:                       // 'null'\n      shift(197);                   // 'null'\n      break;\n    case 168:                       // 'json'\n      shift(168);                   // 'json'\n      break;\n    case 198:                       // 'object'\n      shift(198);                   // 'object'\n      break;\n    case 233:                       // 'select'\n      shift(233);                   // 'select'\n      break;\n    default:\n      shift(255);                   // 'true'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function try_FunctionName()\n  {\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shiftT(6);                    // EQName^Token\n      break;\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shiftT(75);                   // 'ancestor-or-self'\n      break;\n    case 76:                        // 'and'\n      shiftT(76);                   // 'and'\n      break;\n    case 80:                        // 'as'\n      shiftT(80);                   // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shiftT(81);                   // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      break;\n    case 90:                        // 'cast'\n      shiftT(90);                   // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shiftT(91);                   // 'castable'\n      break;\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      break;\n    case 95:                        // 'collation'\n      shiftT(95);                   // 'collation'\n      break;\n    case 104:                       // 'copy'\n      shiftT(104);                  // 'copy'\n      break;\n    case 106:                       // 'count'\n      shiftT(106);                  // 'count'\n      break;\n    case 109:                       // 'declare'\n      shiftT(109);                  // 'declare'\n      break;\n    case 110:                       // 'default'\n      shiftT(110);                  // 'default'\n      break;\n    case 111:                       // 'delete'\n      shiftT(111);                  // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      break;\n    case 114:                       // 'descending'\n      shiftT(114);                  // 'descending'\n      break;\n    case 119:                       // 'div'\n      shiftT(119);                  // 'div'\n      break;\n    case 120:                       // 'document'\n      shiftT(120);                  // 'document'\n      break;\n    case 123:                       // 'else'\n      shiftT(123);                  // 'else'\n      break;\n    case 124:                       // 'empty'\n      shiftT(124);                  // 'empty'\n      break;\n    case 127:                       // 'end'\n      shiftT(127);                  // 'end'\n      break;\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 130:                       // 'every'\n      shiftT(130);                  // 'every'\n      break;\n    case 132:                       // 'except'\n      shiftT(132);                  // 'except'\n      break;\n    case 136:                       // 'first'\n      shiftT(136);                  // 'first'\n      break;\n    case 137:                       // 'following'\n      shiftT(137);                  // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      break;\n    case 139:                       // 'for'\n      shiftT(139);                  // 'for'\n      break;\n    case 148:                       // 'ge'\n      shiftT(148);                  // 'ge'\n      break;\n    case 150:                       // 'group'\n      shiftT(150);                  // 'group'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shiftT(153);                  // 'idiv'\n      break;\n    case 155:                       // 'import'\n      shiftT(155);                  // 'import'\n      break;\n    case 161:                       // 'insert'\n      shiftT(161);                  // 'insert'\n      break;\n    case 162:                       // 'instance'\n      shiftT(162);                  // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shiftT(164);                  // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shiftT(165);                  // 'into'\n      break;\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 173:                       // 'last'\n      shiftT(173);                  // 'last'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 177:                       // 'let'\n      shiftT(177);                  // 'let'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shiftT(183);                  // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shiftT(184);                  // 'modify'\n      break;\n    case 185:                       // 'module'\n      shiftT(185);                  // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shiftT(187);                  // 'namespace'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 202:                       // 'only'\n      shiftT(202);                  // 'only'\n      break;\n    case 204:                       // 'or'\n      shiftT(204);                  // 'or'\n      break;\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      break;\n    case 206:                       // 'ordered'\n      shiftT(206);                  // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      break;\n    case 222:                       // 'rename'\n      shiftT(222);                  // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shiftT(223);                  // 'replace'\n      break;\n    case 224:                       // 'return'\n      shiftT(224);                  // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shiftT(228);                  // 'satisfies'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      break;\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    case 241:                       // 'stable'\n      shiftT(241);                  // 'stable'\n      break;\n    case 242:                       // 'start'\n      shiftT(242);                  // 'start'\n      break;\n    case 253:                       // 'to'\n      shiftT(253);                  // 'to'\n      break;\n    case 254:                       // 'treat'\n      shiftT(254);                  // 'treat'\n      break;\n    case 256:                       // 'try'\n      shiftT(256);                  // 'try'\n      break;\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    case 262:                       // 'unordered'\n      shiftT(262);                  // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shiftT(266);                  // 'validate'\n      break;\n    case 272:                       // 'where'\n      shiftT(272);                  // 'where'\n      break;\n    case 276:                       // 'with'\n      shiftT(276);                  // 'with'\n      break;\n    case 170:                       // 'jsoniq'\n      shiftT(170);                  // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shiftT(73);                   // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shiftT(84);                   // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shiftT(86);                   // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shiftT(87);                   // 'break'\n      break;\n    case 92:                        // 'catch'\n      shiftT(92);                   // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shiftT(99);                   // 'construction'\n      break;\n    case 102:                       // 'context'\n      shiftT(102);                  // 'context'\n      break;\n    case 103:                       // 'continue'\n      shiftT(103);                  // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shiftT(105);                  // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shiftT(107);                  // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shiftT(126);                  // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shiftT(133);                  // 'exit'\n      break;\n    case 134:                       // 'external'\n      shiftT(134);                  // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shiftT(143);                  // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shiftT(156);                  // 'in'\n      break;\n    case 157:                       // 'index'\n      shiftT(157);                  // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shiftT(163);                  // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shiftT(195);                  // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shiftT(203);                  // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shiftT(207);                  // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shiftT(226);                  // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shiftT(229);                  // 'schema'\n      break;\n    case 232:                       // 'score'\n      shiftT(232);                  // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shiftT(239);                  // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shiftT(245);                  // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shiftT(257);                  // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shiftT(258);                  // 'type'\n      break;\n    case 263:                       // 'updating'\n      shiftT(263);                  // 'updating'\n      break;\n    case 267:                       // 'value'\n      shiftT(267);                  // 'value'\n      break;\n    case 268:                       // 'variable'\n      shiftT(268);                  // 'variable'\n      break;\n    case 269:                       // 'version'\n      shiftT(269);                  // 'version'\n      break;\n    case 273:                       // 'while'\n      shiftT(273);                  // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shiftT(98);                   // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shiftT(179);                  // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shiftT(225);                  // 'returning'\n      break;\n    case 78:                        // 'append'\n      shiftT(78);                   // 'append'\n      break;\n    case 135:                       // 'false'\n      shiftT(135);                  // 'false'\n      break;\n    case 142:                       // 'from'\n      shiftT(142);                  // 'from'\n      break;\n    case 197:                       // 'null'\n      shiftT(197);                  // 'null'\n      break;\n    case 168:                       // 'json'\n      shiftT(168);                  // 'json'\n      break;\n    case 198:                       // 'object'\n      shiftT(198);                  // 'object'\n      break;\n    case 233:                       // 'select'\n      shiftT(233);                  // 'select'\n      break;\n    default:\n      shiftT(255);                  // 'true'\n    }\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shift(19);                    // NCName^Token\n      break;\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 76:                        // 'and'\n      shift(76);                    // 'and'\n      break;\n    case 80:                        // 'as'\n      shift(80);                    // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shift(81);                    // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      break;\n    case 90:                        // 'cast'\n      shift(90);                    // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shift(91);                    // 'castable'\n      break;\n    case 95:                        // 'collation'\n      shift(95);                    // 'collation'\n      break;\n    case 106:                       // 'count'\n      shift(106);                   // 'count'\n      break;\n    case 110:                       // 'default'\n      shift(110);                   // 'default'\n      break;\n    case 114:                       // 'descending'\n      shift(114);                   // 'descending'\n      break;\n    case 119:                       // 'div'\n      shift(119);                   // 'div'\n      break;\n    case 123:                       // 'else'\n      shift(123);                   // 'else'\n      break;\n    case 124:                       // 'empty'\n      shift(124);                   // 'empty'\n      break;\n    case 127:                       // 'end'\n      shift(127);                   // 'end'\n      break;\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 132:                       // 'except'\n      shift(132);                   // 'except'\n      break;\n    case 139:                       // 'for'\n      shift(139);                   // 'for'\n      break;\n    case 148:                       // 'ge'\n      shift(148);                   // 'ge'\n      break;\n    case 150:                       // 'group'\n      shift(150);                   // 'group'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shift(153);                   // 'idiv'\n      break;\n    case 162:                       // 'instance'\n      shift(162);                   // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shift(164);                   // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shift(165);                   // 'into'\n      break;\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 177:                       // 'let'\n      shift(177);                   // 'let'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shift(183);                   // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shift(184);                   // 'modify'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 202:                       // 'only'\n      shift(202);                   // 'only'\n      break;\n    case 204:                       // 'or'\n      shift(204);                   // 'or'\n      break;\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      break;\n    case 224:                       // 'return'\n      shift(224);                   // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shift(228);                   // 'satisfies'\n      break;\n    case 241:                       // 'stable'\n      shift(241);                   // 'stable'\n      break;\n    case 242:                       // 'start'\n      shift(242);                   // 'start'\n      break;\n    case 253:                       // 'to'\n      shift(253);                   // 'to'\n      break;\n    case 254:                       // 'treat'\n      shift(254);                   // 'treat'\n      break;\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    case 272:                       // 'where'\n      shift(272);                   // 'where'\n      break;\n    case 276:                       // 'with'\n      shift(276);                   // 'with'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shift(75);                    // 'ancestor-or-self'\n      break;\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      break;\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      break;\n    case 97:                        // 'comment'\n      shift(97);                    // 'comment'\n      break;\n    case 104:                       // 'copy'\n      shift(104);                   // 'copy'\n      break;\n    case 109:                       // 'declare'\n      shift(109);                   // 'declare'\n      break;\n    case 111:                       // 'delete'\n      shift(111);                   // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      break;\n    case 120:                       // 'document'\n      shift(120);                   // 'document'\n      break;\n    case 121:                       // 'document-node'\n      shift(121);                   // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shift(125);                   // 'empty-sequence'\n      break;\n    case 130:                       // 'every'\n      shift(130);                   // 'every'\n      break;\n    case 136:                       // 'first'\n      shift(136);                   // 'first'\n      break;\n    case 137:                       // 'following'\n      shift(137);                   // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      break;\n    case 147:                       // 'function'\n      shift(147);                   // 'function'\n      break;\n    case 154:                       // 'if'\n      shift(154);                   // 'if'\n      break;\n    case 155:                       // 'import'\n      shift(155);                   // 'import'\n      break;\n    case 161:                       // 'insert'\n      shift(161);                   // 'insert'\n      break;\n    case 167:                       // 'item'\n      shift(167);                   // 'item'\n      break;\n    case 173:                       // 'last'\n      shift(173);                   // 'last'\n      break;\n    case 185:                       // 'module'\n      shift(185);                   // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      break;\n    case 188:                       // 'namespace-node'\n      shift(188);                   // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      break;\n    case 220:                       // 'processing-instruction'\n      shift(220);                   // 'processing-instruction'\n      break;\n    case 222:                       // 'rename'\n      shift(222);                   // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shift(223);                   // 'replace'\n      break;\n    case 230:                       // 'schema-attribute'\n      shift(230);                   // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shift(231);                   // 'schema-element'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      break;\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    case 248:                       // 'switch'\n      shift(248);                   // 'switch'\n      break;\n    case 249:                       // 'text'\n      shift(249);                   // 'text'\n      break;\n    case 256:                       // 'try'\n      shift(256);                   // 'try'\n      break;\n    case 259:                       // 'typeswitch'\n      shift(259);                   // 'typeswitch'\n      break;\n    case 262:                       // 'unordered'\n      shift(262);                   // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shift(266);                   // 'validate'\n      break;\n    case 268:                       // 'variable'\n      shift(268);                   // 'variable'\n      break;\n    case 170:                       // 'jsoniq'\n      shift(170);                   // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shift(73);                    // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shift(84);                    // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shift(86);                    // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shift(87);                    // 'break'\n      break;\n    case 92:                        // 'catch'\n      shift(92);                    // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shift(99);                    // 'construction'\n      break;\n    case 102:                       // 'context'\n      shift(102);                   // 'context'\n      break;\n    case 103:                       // 'continue'\n      shift(103);                   // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shift(105);                   // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shift(133);                   // 'exit'\n      break;\n    case 134:                       // 'external'\n      shift(134);                   // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shift(143);                   // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shift(156);                   // 'in'\n      break;\n    case 157:                       // 'index'\n      shift(157);                   // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shift(163);                   // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shift(195);                   // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shift(203);                   // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shift(207);                   // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shift(226);                   // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shift(229);                   // 'schema'\n      break;\n    case 232:                       // 'score'\n      shift(232);                   // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shift(239);                   // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shift(257);                   // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shift(258);                   // 'type'\n      break;\n    case 263:                       // 'updating'\n      shift(263);                   // 'updating'\n      break;\n    case 267:                       // 'value'\n      shift(267);                   // 'value'\n      break;\n    case 269:                       // 'version'\n      shift(269);                   // 'version'\n      break;\n    case 273:                       // 'while'\n      shift(273);                   // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shift(98);                    // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shift(179);                   // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shift(225);                   // 'returning'\n      break;\n    case 78:                        // 'append'\n      shift(78);                    // 'append'\n      break;\n    case 135:                       // 'false'\n      shift(135);                   // 'false'\n      break;\n    case 142:                       // 'from'\n      shift(142);                   // 'from'\n      break;\n    case 197:                       // 'null'\n      shift(197);                   // 'null'\n      break;\n    case 168:                       // 'json'\n      shift(168);                   // 'json'\n      break;\n    case 198:                       // 'object'\n      shift(198);                   // 'object'\n      break;\n    case 233:                       // 'select'\n      shift(233);                   // 'select'\n      break;\n    default:\n      shift(255);                   // 'true'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function try_NCName()\n  {\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shiftT(19);                   // NCName^Token\n      break;\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 76:                        // 'and'\n      shiftT(76);                   // 'and'\n      break;\n    case 80:                        // 'as'\n      shiftT(80);                   // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shiftT(81);                   // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      break;\n    case 90:                        // 'cast'\n      shiftT(90);                   // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shiftT(91);                   // 'castable'\n      break;\n    case 95:                        // 'collation'\n      shiftT(95);                   // 'collation'\n      break;\n    case 106:                       // 'count'\n      shiftT(106);                  // 'count'\n      break;\n    case 110:                       // 'default'\n      shiftT(110);                  // 'default'\n      break;\n    case 114:                       // 'descending'\n      shiftT(114);                  // 'descending'\n      break;\n    case 119:                       // 'div'\n      shiftT(119);                  // 'div'\n      break;\n    case 123:                       // 'else'\n      shiftT(123);                  // 'else'\n      break;\n    case 124:                       // 'empty'\n      shiftT(124);                  // 'empty'\n      break;\n    case 127:                       // 'end'\n      shiftT(127);                  // 'end'\n      break;\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 132:                       // 'except'\n      shiftT(132);                  // 'except'\n      break;\n    case 139:                       // 'for'\n      shiftT(139);                  // 'for'\n      break;\n    case 148:                       // 'ge'\n      shiftT(148);                  // 'ge'\n      break;\n    case 150:                       // 'group'\n      shiftT(150);                  // 'group'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shiftT(153);                  // 'idiv'\n      break;\n    case 162:                       // 'instance'\n      shiftT(162);                  // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shiftT(164);                  // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shiftT(165);                  // 'into'\n      break;\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 177:                       // 'let'\n      shiftT(177);                  // 'let'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shiftT(183);                  // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shiftT(184);                  // 'modify'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 202:                       // 'only'\n      shiftT(202);                  // 'only'\n      break;\n    case 204:                       // 'or'\n      shiftT(204);                  // 'or'\n      break;\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      break;\n    case 224:                       // 'return'\n      shiftT(224);                  // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shiftT(228);                  // 'satisfies'\n      break;\n    case 241:                       // 'stable'\n      shiftT(241);                  // 'stable'\n      break;\n    case 242:                       // 'start'\n      shiftT(242);                  // 'start'\n      break;\n    case 253:                       // 'to'\n      shiftT(253);                  // 'to'\n      break;\n    case 254:                       // 'treat'\n      shiftT(254);                  // 'treat'\n      break;\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    case 272:                       // 'where'\n      shiftT(272);                  // 'where'\n      break;\n    case 276:                       // 'with'\n      shiftT(276);                  // 'with'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shiftT(75);                   // 'ancestor-or-self'\n      break;\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      break;\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      break;\n    case 97:                        // 'comment'\n      shiftT(97);                   // 'comment'\n      break;\n    case 104:                       // 'copy'\n      shiftT(104);                  // 'copy'\n      break;\n    case 109:                       // 'declare'\n      shiftT(109);                  // 'declare'\n      break;\n    case 111:                       // 'delete'\n      shiftT(111);                  // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      break;\n    case 120:                       // 'document'\n      shiftT(120);                  // 'document'\n      break;\n    case 121:                       // 'document-node'\n      shiftT(121);                  // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shiftT(125);                  // 'empty-sequence'\n      break;\n    case 130:                       // 'every'\n      shiftT(130);                  // 'every'\n      break;\n    case 136:                       // 'first'\n      shiftT(136);                  // 'first'\n      break;\n    case 137:                       // 'following'\n      shiftT(137);                  // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      break;\n    case 147:                       // 'function'\n      shiftT(147);                  // 'function'\n      break;\n    case 154:                       // 'if'\n      shiftT(154);                  // 'if'\n      break;\n    case 155:                       // 'import'\n      shiftT(155);                  // 'import'\n      break;\n    case 161:                       // 'insert'\n      shiftT(161);                  // 'insert'\n      break;\n    case 167:                       // 'item'\n      shiftT(167);                  // 'item'\n      break;\n    case 173:                       // 'last'\n      shiftT(173);                  // 'last'\n      break;\n    case 185:                       // 'module'\n      shiftT(185);                  // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shiftT(187);                  // 'namespace'\n      break;\n    case 188:                       // 'namespace-node'\n      shiftT(188);                  // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    case 206:                       // 'ordered'\n      shiftT(206);                  // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      break;\n    case 220:                       // 'processing-instruction'\n      shiftT(220);                  // 'processing-instruction'\n      break;\n    case 222:                       // 'rename'\n      shiftT(222);                  // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shiftT(223);                  // 'replace'\n      break;\n    case 230:                       // 'schema-attribute'\n      shiftT(230);                  // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shiftT(231);                  // 'schema-element'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      break;\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    case 248:                       // 'switch'\n      shiftT(248);                  // 'switch'\n      break;\n    case 249:                       // 'text'\n      shiftT(249);                  // 'text'\n      break;\n    case 256:                       // 'try'\n      shiftT(256);                  // 'try'\n      break;\n    case 259:                       // 'typeswitch'\n      shiftT(259);                  // 'typeswitch'\n      break;\n    case 262:                       // 'unordered'\n      shiftT(262);                  // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shiftT(266);                  // 'validate'\n      break;\n    case 268:                       // 'variable'\n      shiftT(268);                  // 'variable'\n      break;\n    case 170:                       // 'jsoniq'\n      shiftT(170);                  // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shiftT(73);                   // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shiftT(84);                   // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shiftT(86);                   // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shiftT(87);                   // 'break'\n      break;\n    case 92:                        // 'catch'\n      shiftT(92);                   // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shiftT(99);                   // 'construction'\n      break;\n    case 102:                       // 'context'\n      shiftT(102);                  // 'context'\n      break;\n    case 103:                       // 'continue'\n      shiftT(103);                  // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shiftT(105);                  // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shiftT(107);                  // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shiftT(126);                  // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shiftT(133);                  // 'exit'\n      break;\n    case 134:                       // 'external'\n      shiftT(134);                  // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shiftT(143);                  // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shiftT(156);                  // 'in'\n      break;\n    case 157:                       // 'index'\n      shiftT(157);                  // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shiftT(163);                  // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shiftT(195);                  // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shiftT(203);                  // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shiftT(207);                  // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shiftT(226);                  // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shiftT(229);                  // 'schema'\n      break;\n    case 232:                       // 'score'\n      shiftT(232);                  // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shiftT(239);                  // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shiftT(245);                  // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shiftT(257);                  // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shiftT(258);                  // 'type'\n      break;\n    case 263:                       // 'updating'\n      shiftT(263);                  // 'updating'\n      break;\n    case 267:                       // 'value'\n      shiftT(267);                  // 'value'\n      break;\n    case 269:                       // 'version'\n      shiftT(269);                  // 'version'\n      break;\n    case 273:                       // 'while'\n      shiftT(273);                  // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shiftT(98);                   // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shiftT(179);                  // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shiftT(225);                  // 'returning'\n      break;\n    case 78:                        // 'append'\n      shiftT(78);                   // 'append'\n      break;\n    case 135:                       // 'false'\n      shiftT(135);                  // 'false'\n      break;\n    case 142:                       // 'from'\n      shiftT(142);                  // 'from'\n      break;\n    case 197:                       // 'null'\n      shiftT(197);                  // 'null'\n      break;\n    case 168:                       // 'json'\n      shiftT(168);                  // 'json'\n      break;\n    case 198:                       // 'object'\n      shiftT(198);                  // 'object'\n      break;\n    case 233:                       // 'select'\n      shiftT(233);                  // 'select'\n      break;\n    default:\n      shiftT(255);                  // 'true'\n    }\n  }\n\n  function parse_MainModule()\n  {\n    eventHandler.startNonterminal(\"MainModule\", e0);\n    parse_Prolog();\n    whitespace();\n    parse_Program();\n    eventHandler.endNonterminal(\"MainModule\", e0);\n  }\n\n  function parse_Program()\n  {\n    eventHandler.startNonterminal(\"Program\", e0);\n    parse_StatementsAndOptionalExpr();\n    eventHandler.endNonterminal(\"Program\", e0);\n  }\n\n  function parse_Statements()\n  {\n    eventHandler.startNonterminal(\"Statements\", e0);\n    for (;;)\n    {\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 35:                      // '('\n        lookahead2W(269);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 36:                      // '(#'\n        lookahead2(242);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 47:                      // '/'\n        lookahead2W(285);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 48:                      // '//'\n        lookahead2W(259);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 55:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 56:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 60:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 78:                      // 'append'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 133:                     // 'exit'\n        lookahead2W(147);           // S^WS | '#' | '(' | '(:' | 'returning'\n        break;\n      case 139:                     // 'for'\n        lookahead2W(179);           // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n        break;\n      case 161:                     // 'insert'\n        lookahead2W(275);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 177:                     // 'let'\n        lookahead2W(166);           // S^WS | '#' | '$' | '(' | '(:' | 'score'\n        break;\n      case 187:                     // 'namespace'\n        lookahead2W(246);           // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 220:                     // 'processing-instruction'\n        lookahead2W(244);           // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 223:                     // 'replace'\n        lookahead2W(170);           // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n        break;\n      case 266:                     // 'validate'\n        lookahead2W(188);           // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n        break;\n      case 281:                     // '{'\n        lookahead2W(282);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 283:                     // '{|'\n        lookahead2W(273);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 31:                      // '$'\n      case 33:                      // '%'\n        lookahead2W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 83:                      // 'attribute'\n      case 122:                     // 'element'\n        lookahead2W(252);           // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 87:                      // 'break'\n      case 103:                     // 'continue'\n        lookahead2W(145);           // S^WS | '#' | '(' | '(:' | 'loop'\n        break;\n      case 97:                      // 'comment'\n      case 249:                     // 'text'\n        lookahead2W(97);            // S^WS | '#' | '(:' | '{'\n        break;\n      case 111:                     // 'delete'\n      case 222:                     // 'rename'\n        lookahead2W(260);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 41:                      // '+'\n      case 43:                      // '-'\n      case 196:                     // 'not'\n        lookahead2W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 135:                     // 'false'\n      case 197:                     // 'null'\n      case 255:                     // 'true'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' |\n        break;\n      case 104:                     // 'copy'\n      case 130:                     // 'every'\n      case 240:                     // 'some'\n      case 268:                     // 'variable'\n        lookahead2W(143);           // S^WS | '#' | '$' | '(' | '(:'\n        break;\n      case 120:                     // 'document'\n      case 206:                     // 'ordered'\n      case 256:                     // 'try'\n      case 262:                     // 'unordered'\n        lookahead2W(148);           // S^WS | '#' | '(' | '(:' | '{'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 32:                      // '$$'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' | '//' |\n        break;\n      case 79:                      // 'array'\n      case 121:                     // 'document-node'\n      case 125:                     // 'empty-sequence'\n      case 167:                     // 'item'\n      case 169:                     // 'json-item'\n      case 188:                     // 'namespace-node'\n      case 194:                     // 'node'\n      case 230:                     // 'schema-attribute'\n      case 231:                     // 'schema-element'\n      case 247:                     // 'structured-item'\n        lookahead2W(20);            // S^WS | '#' | '(:'\n        break;\n      case 6:                       // EQName^Token\n      case 71:                      // 'after'\n      case 73:                      // 'allowing'\n      case 74:                      // 'ancestor'\n      case 75:                      // 'ancestor-or-self'\n      case 76:                      // 'and'\n      case 80:                      // 'as'\n      case 81:                      // 'ascending'\n      case 82:                      // 'at'\n      case 84:                      // 'base-uri'\n      case 85:                      // 'before'\n      case 86:                      // 'boundary-space'\n      case 89:                      // 'case'\n      case 90:                      // 'cast'\n      case 91:                      // 'castable'\n      case 92:                      // 'catch'\n      case 94:                      // 'child'\n      case 95:                      // 'collation'\n      case 98:                      // 'constraint'\n      case 99:                      // 'construction'\n      case 102:                     // 'context'\n      case 105:                     // 'copy-namespaces'\n      case 106:                     // 'count'\n      case 107:                     // 'decimal-format'\n      case 109:                     // 'declare'\n      case 110:                     // 'default'\n      case 112:                     // 'descendant'\n      case 113:                     // 'descendant-or-self'\n      case 114:                     // 'descending'\n      case 119:                     // 'div'\n      case 123:                     // 'else'\n      case 124:                     // 'empty'\n      case 126:                     // 'encoding'\n      case 127:                     // 'end'\n      case 129:                     // 'eq'\n      case 132:                     // 'except'\n      case 134:                     // 'external'\n      case 136:                     // 'first'\n      case 137:                     // 'following'\n      case 138:                     // 'following-sibling'\n      case 142:                     // 'from'\n      case 143:                     // 'ft-option'\n      case 147:                     // 'function'\n      case 148:                     // 'ge'\n      case 150:                     // 'group'\n      case 152:                     // 'gt'\n      case 153:                     // 'idiv'\n      case 154:                     // 'if'\n      case 155:                     // 'import'\n      case 156:                     // 'in'\n      case 157:                     // 'index'\n      case 162:                     // 'instance'\n      case 163:                     // 'integrity'\n      case 164:                     // 'intersect'\n      case 165:                     // 'into'\n      case 166:                     // 'is'\n      case 168:                     // 'json'\n      case 170:                     // 'jsoniq'\n      case 173:                     // 'last'\n      case 174:                     // 'lax'\n      case 175:                     // 'le'\n      case 179:                     // 'loop'\n      case 181:                     // 'lt'\n      case 183:                     // 'mod'\n      case 184:                     // 'modify'\n      case 185:                     // 'module'\n      case 189:                     // 'ne'\n      case 195:                     // 'nodes'\n      case 198:                     // 'object'\n      case 202:                     // 'only'\n      case 203:                     // 'option'\n      case 204:                     // 'or'\n      case 205:                     // 'order'\n      case 207:                     // 'ordering'\n      case 210:                     // 'parent'\n      case 216:                     // 'preceding'\n      case 217:                     // 'preceding-sibling'\n      case 224:                     // 'return'\n      case 225:                     // 'returning'\n      case 226:                     // 'revalidation'\n      case 228:                     // 'satisfies'\n      case 229:                     // 'schema'\n      case 232:                     // 'score'\n      case 233:                     // 'select'\n      case 234:                     // 'self'\n      case 239:                     // 'sliding'\n      case 241:                     // 'stable'\n      case 242:                     // 'start'\n      case 245:                     // 'strict'\n      case 248:                     // 'switch'\n      case 253:                     // 'to'\n      case 254:                     // 'treat'\n      case 257:                     // 'tumbling'\n      case 258:                     // 'type'\n      case 259:                     // 'typeswitch'\n      case 260:                     // 'union'\n      case 263:                     // 'updating'\n      case 267:                     // 'value'\n      case 269:                     // 'version'\n      case 272:                     // 'where'\n      case 273:                     // 'while'\n      case 276:                     // 'with'\n        lookahead2W(95);            // S^WS | '#' | '(' | '(:'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 54                  // ';'\n       && lk != 287                 // '}'\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12832               // '$$' EOF\n       && lk != 12847               // '/' EOF\n       && lk != 12935               // 'false' EOF\n       && lk != 12997               // 'null' EOF\n       && lk != 13055               // 'true' EOF\n       && lk != 16140               // 'variable' '$'\n       && lk != 21512               // IntegerLiteral ','\n       && lk != 21513               // DecimalLiteral ','\n       && lk != 21514               // DoubleLiteral ','\n       && lk != 21515               // StringLiteral ','\n       && lk != 21536               // '$$' ','\n       && lk != 21551               // '/' ','\n       && lk != 21639               // 'false' ','\n       && lk != 21701               // 'null' ','\n       && lk != 21759               // 'true' ','\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333              // 'exit' 'returning'\n       && lk != 146952              // IntegerLiteral '}'\n       && lk != 146953              // DecimalLiteral '}'\n       && lk != 146954              // DoubleLiteral '}'\n       && lk != 146955              // StringLiteral '}'\n       && lk != 146976              // '$$' '}'\n       && lk != 146991              // '/' '}'\n       && lk != 147079              // 'false' '}'\n       && lk != 147141              // 'null' '}'\n       && lk != 147199)             // 'true' '}'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(8, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 54                  // ';'\n       && lk != 16140               // 'variable' '$'\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333)             // 'exit' 'returning'\n      {\n        break;\n      }\n      whitespace();\n      parse_Statement();\n    }\n    eventHandler.endNonterminal(\"Statements\", e0);\n  }\n\n  function try_Statements()\n  {\n    for (;;)\n    {\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 35:                      // '('\n        lookahead2W(269);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 36:                      // '(#'\n        lookahead2(242);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 47:                      // '/'\n        lookahead2W(285);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 48:                      // '//'\n        lookahead2W(259);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 55:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 56:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 60:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 78:                      // 'append'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 133:                     // 'exit'\n        lookahead2W(147);           // S^WS | '#' | '(' | '(:' | 'returning'\n        break;\n      case 139:                     // 'for'\n        lookahead2W(179);           // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n        break;\n      case 161:                     // 'insert'\n        lookahead2W(275);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 177:                     // 'let'\n        lookahead2W(166);           // S^WS | '#' | '$' | '(' | '(:' | 'score'\n        break;\n      case 187:                     // 'namespace'\n        lookahead2W(246);           // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 220:                     // 'processing-instruction'\n        lookahead2W(244);           // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 223:                     // 'replace'\n        lookahead2W(170);           // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n        break;\n      case 266:                     // 'validate'\n        lookahead2W(188);           // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n        break;\n      case 281:                     // '{'\n        lookahead2W(282);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 283:                     // '{|'\n        lookahead2W(273);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 31:                      // '$'\n      case 33:                      // '%'\n        lookahead2W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 83:                      // 'attribute'\n      case 122:                     // 'element'\n        lookahead2W(252);           // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 87:                      // 'break'\n      case 103:                     // 'continue'\n        lookahead2W(145);           // S^WS | '#' | '(' | '(:' | 'loop'\n        break;\n      case 97:                      // 'comment'\n      case 249:                     // 'text'\n        lookahead2W(97);            // S^WS | '#' | '(:' | '{'\n        break;\n      case 111:                     // 'delete'\n      case 222:                     // 'rename'\n        lookahead2W(260);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 41:                      // '+'\n      case 43:                      // '-'\n      case 196:                     // 'not'\n        lookahead2W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 135:                     // 'false'\n      case 197:                     // 'null'\n      case 255:                     // 'true'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' |\n        break;\n      case 104:                     // 'copy'\n      case 130:                     // 'every'\n      case 240:                     // 'some'\n      case 268:                     // 'variable'\n        lookahead2W(143);           // S^WS | '#' | '$' | '(' | '(:'\n        break;\n      case 120:                     // 'document'\n      case 206:                     // 'ordered'\n      case 256:                     // 'try'\n      case 262:                     // 'unordered'\n        lookahead2W(148);           // S^WS | '#' | '(' | '(:' | '{'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 32:                      // '$$'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' | '//' |\n        break;\n      case 79:                      // 'array'\n      case 121:                     // 'document-node'\n      case 125:                     // 'empty-sequence'\n      case 167:                     // 'item'\n      case 169:                     // 'json-item'\n      case 188:                     // 'namespace-node'\n      case 194:                     // 'node'\n      case 230:                     // 'schema-attribute'\n      case 231:                     // 'schema-element'\n      case 247:                     // 'structured-item'\n        lookahead2W(20);            // S^WS | '#' | '(:'\n        break;\n      case 6:                       // EQName^Token\n      case 71:                      // 'after'\n      case 73:                      // 'allowing'\n      case 74:                      // 'ancestor'\n      case 75:                      // 'ancestor-or-self'\n      case 76:                      // 'and'\n      case 80:                      // 'as'\n      case 81:                      // 'ascending'\n      case 82:                      // 'at'\n      case 84:                      // 'base-uri'\n      case 85:                      // 'before'\n      case 86:                      // 'boundary-space'\n      case 89:                      // 'case'\n      case 90:                      // 'cast'\n      case 91:                      // 'castable'\n      case 92:                      // 'catch'\n      case 94:                      // 'child'\n      case 95:                      // 'collation'\n      case 98:                      // 'constraint'\n      case 99:                      // 'construction'\n      case 102:                     // 'context'\n      case 105:                     // 'copy-namespaces'\n      case 106:                     // 'count'\n      case 107:                     // 'decimal-format'\n      case 109:                     // 'declare'\n      case 110:                     // 'default'\n      case 112:                     // 'descendant'\n      case 113:                     // 'descendant-or-self'\n      case 114:                     // 'descending'\n      case 119:                     // 'div'\n      case 123:                     // 'else'\n      case 124:                     // 'empty'\n      case 126:                     // 'encoding'\n      case 127:                     // 'end'\n      case 129:                     // 'eq'\n      case 132:                     // 'except'\n      case 134:                     // 'external'\n      case 136:                     // 'first'\n      case 137:                     // 'following'\n      case 138:                     // 'following-sibling'\n      case 142:                     // 'from'\n      case 143:                     // 'ft-option'\n      case 147:                     // 'function'\n      case 148:                     // 'ge'\n      case 150:                     // 'group'\n      case 152:                     // 'gt'\n      case 153:                     // 'idiv'\n      case 154:                     // 'if'\n      case 155:                     // 'import'\n      case 156:                     // 'in'\n      case 157:                     // 'index'\n      case 162:                     // 'instance'\n      case 163:                     // 'integrity'\n      case 164:                     // 'intersect'\n      case 165:                     // 'into'\n      case 166:                     // 'is'\n      case 168:                     // 'json'\n      case 170:                     // 'jsoniq'\n      case 173:                     // 'last'\n      case 174:                     // 'lax'\n      case 175:                     // 'le'\n      case 179:                     // 'loop'\n      case 181:                     // 'lt'\n      case 183:                     // 'mod'\n      case 184:                     // 'modify'\n      case 185:                     // 'module'\n      case 189:                     // 'ne'\n      case 195:                     // 'nodes'\n      case 198:                     // 'object'\n      case 202:                     // 'only'\n      case 203:                     // 'option'\n      case 204:                     // 'or'\n      case 205:                     // 'order'\n      case 207:                     // 'ordering'\n      case 210:                     // 'parent'\n      case 216:                     // 'preceding'\n      case 217:                     // 'preceding-sibling'\n      case 224:                     // 'return'\n      case 225:                     // 'returning'\n      case 226:                     // 'revalidation'\n      case 228:                     // 'satisfies'\n      case 229:                     // 'schema'\n      case 232:                     // 'score'\n      case 233:                     // 'select'\n      case 234:                     // 'self'\n      case 239:                     // 'sliding'\n      case 241:                     // 'stable'\n      case 242:                     // 'start'\n      case 245:                     // 'strict'\n      case 248:                     // 'switch'\n      case 253:                     // 'to'\n      case 254:                     // 'treat'\n      case 257:                     // 'tumbling'\n      case 258:                     // 'type'\n      case 259:                     // 'typeswitch'\n      case 260:                     // 'union'\n      case 263:                     // 'updating'\n      case 267:                     // 'value'\n      case 269:                     // 'version'\n      case 272:                     // 'where'\n      case 273:                     // 'while'\n      case 276:                     // 'with'\n        lookahead2W(95);            // S^WS | '#' | '(' | '(:'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 54                  // ';'\n       && lk != 287                 // '}'\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12832               // '$$' EOF\n       && lk != 12847               // '/' EOF\n       && lk != 12935               // 'false' EOF\n       && lk != 12997               // 'null' EOF\n       && lk != 13055               // 'true' EOF\n       && lk != 16140               // 'variable' '$'\n       && lk != 21512               // IntegerLiteral ','\n       && lk != 21513               // DecimalLiteral ','\n       && lk != 21514               // DoubleLiteral ','\n       && lk != 21515               // StringLiteral ','\n       && lk != 21536               // '$$' ','\n       && lk != 21551               // '/' ','\n       && lk != 21639               // 'false' ','\n       && lk != 21701               // 'null' ','\n       && lk != 21759               // 'true' ','\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333              // 'exit' 'returning'\n       && lk != 146952              // IntegerLiteral '}'\n       && lk != 146953              // DecimalLiteral '}'\n       && lk != 146954              // DoubleLiteral '}'\n       && lk != 146955              // StringLiteral '}'\n       && lk != 146976              // '$$' '}'\n       && lk != 146991              // '/' '}'\n       && lk != 147079              // 'false' '}'\n       && lk != 147141              // 'null' '}'\n       && lk != 147199)             // 'true' '}'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            memoize(8, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(8, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 54                  // ';'\n       && lk != 16140               // 'variable' '$'\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333)             // 'exit' 'returning'\n      {\n        break;\n      }\n      try_Statement();\n    }\n  }\n\n  function parse_StatementsAndExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndExpr\", e0);\n    parse_Statements();\n    whitespace();\n    parse_Expr();\n    eventHandler.endNonterminal(\"StatementsAndExpr\", e0);\n  }\n\n  function try_StatementsAndExpr()\n  {\n    try_Statements();\n    try_Expr();\n  }\n\n  function parse_StatementsAndOptionalExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndOptionalExpr\", e0);\n    parse_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    eventHandler.endNonterminal(\"StatementsAndOptionalExpr\", e0);\n  }\n\n  function try_StatementsAndOptionalExpr()\n  {\n    try_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 287)                  // '}'\n    {\n      try_Expr();\n    }\n  }\n\n  function parse_Statement()\n  {\n    eventHandler.startNonterminal(\"Statement\", e0);\n    switch (l1)\n    {\n    case 133:                       // 'exit'\n      lookahead2W(147);             // S^WS | '#' | '(' | '(:' | 'returning'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 268:                       // 'variable'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 31:                        // '$'\n    case 33:                        // '%'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 87:                        // 'break'\n    case 103:                       // 'continue'\n      lookahead2W(145);             // S^WS | '#' | '(' | '(:' | 'loop'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 273:                       // 'while'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 6                     // EQName^Token\n     && lk != 8                     // IntegerLiteral\n     && lk != 9                     // DecimalLiteral\n     && lk != 10                    // DoubleLiteral\n     && lk != 11                    // StringLiteral\n     && lk != 32                    // '$$'\n     && lk != 35                    // '('\n     && lk != 36                    // '(#'\n     && lk != 41                    // '+'\n     && lk != 43                    // '-'\n     && lk != 47                    // '/'\n     && lk != 48                    // '//'\n     && lk != 54                    // ';'\n     && lk != 55                    // '<'\n     && lk != 56                    // '<!--'\n     && lk != 60                    // '<?'\n     && lk != 69                    // '['\n     && lk != 71                    // 'after'\n     && lk != 73                    // 'allowing'\n     && lk != 74                    // 'ancestor'\n     && lk != 75                    // 'ancestor-or-self'\n     && lk != 76                    // 'and'\n     && lk != 78                    // 'append'\n     && lk != 79                    // 'array'\n     && lk != 80                    // 'as'\n     && lk != 81                    // 'ascending'\n     && lk != 82                    // 'at'\n     && lk != 83                    // 'attribute'\n     && lk != 84                    // 'base-uri'\n     && lk != 85                    // 'before'\n     && lk != 86                    // 'boundary-space'\n     && lk != 89                    // 'case'\n     && lk != 90                    // 'cast'\n     && lk != 91                    // 'castable'\n     && lk != 92                    // 'catch'\n     && lk != 94                    // 'child'\n     && lk != 95                    // 'collation'\n     && lk != 97                    // 'comment'\n     && lk != 98                    // 'constraint'\n     && lk != 99                    // 'construction'\n     && lk != 102                   // 'context'\n     && lk != 104                   // 'copy'\n     && lk != 105                   // 'copy-namespaces'\n     && lk != 106                   // 'count'\n     && lk != 107                   // 'decimal-format'\n     && lk != 109                   // 'declare'\n     && lk != 110                   // 'default'\n     && lk != 111                   // 'delete'\n     && lk != 112                   // 'descendant'\n     && lk != 113                   // 'descendant-or-self'\n     && lk != 114                   // 'descending'\n     && lk != 119                   // 'div'\n     && lk != 120                   // 'document'\n     && lk != 121                   // 'document-node'\n     && lk != 122                   // 'element'\n     && lk != 123                   // 'else'\n     && lk != 124                   // 'empty'\n     && lk != 125                   // 'empty-sequence'\n     && lk != 126                   // 'encoding'\n     && lk != 127                   // 'end'\n     && lk != 129                   // 'eq'\n     && lk != 130                   // 'every'\n     && lk != 132                   // 'except'\n     && lk != 134                   // 'external'\n     && lk != 135                   // 'false'\n     && lk != 136                   // 'first'\n     && lk != 137                   // 'following'\n     && lk != 138                   // 'following-sibling'\n     && lk != 142                   // 'from'\n     && lk != 143                   // 'ft-option'\n     && lk != 147                   // 'function'\n     && lk != 148                   // 'ge'\n     && lk != 150                   // 'group'\n     && lk != 152                   // 'gt'\n     && lk != 153                   // 'idiv'\n     && lk != 155                   // 'import'\n     && lk != 156                   // 'in'\n     && lk != 157                   // 'index'\n     && lk != 161                   // 'insert'\n     && lk != 162                   // 'instance'\n     && lk != 163                   // 'integrity'\n     && lk != 164                   // 'intersect'\n     && lk != 165                   // 'into'\n     && lk != 166                   // 'is'\n     && lk != 167                   // 'item'\n     && lk != 168                   // 'json'\n     && lk != 169                   // 'json-item'\n     && lk != 170                   // 'jsoniq'\n     && lk != 173                   // 'last'\n     && lk != 174                   // 'lax'\n     && lk != 175                   // 'le'\n     && lk != 179                   // 'loop'\n     && lk != 181                   // 'lt'\n     && lk != 183                   // 'mod'\n     && lk != 184                   // 'modify'\n     && lk != 185                   // 'module'\n     && lk != 187                   // 'namespace'\n     && lk != 188                   // 'namespace-node'\n     && lk != 189                   // 'ne'\n     && lk != 194                   // 'node'\n     && lk != 195                   // 'nodes'\n     && lk != 196                   // 'not'\n     && lk != 197                   // 'null'\n     && lk != 198                   // 'object'\n     && lk != 202                   // 'only'\n     && lk != 203                   // 'option'\n     && lk != 204                   // 'or'\n     && lk != 205                   // 'order'\n     && lk != 206                   // 'ordered'\n     && lk != 207                   // 'ordering'\n     && lk != 210                   // 'parent'\n     && lk != 216                   // 'preceding'\n     && lk != 217                   // 'preceding-sibling'\n     && lk != 220                   // 'processing-instruction'\n     && lk != 222                   // 'rename'\n     && lk != 223                   // 'replace'\n     && lk != 224                   // 'return'\n     && lk != 225                   // 'returning'\n     && lk != 226                   // 'revalidation'\n     && lk != 228                   // 'satisfies'\n     && lk != 229                   // 'schema'\n     && lk != 230                   // 'schema-attribute'\n     && lk != 231                   // 'schema-element'\n     && lk != 232                   // 'score'\n     && lk != 233                   // 'select'\n     && lk != 234                   // 'self'\n     && lk != 239                   // 'sliding'\n     && lk != 240                   // 'some'\n     && lk != 241                   // 'stable'\n     && lk != 242                   // 'start'\n     && lk != 245                   // 'strict'\n     && lk != 247                   // 'structured-item'\n     && lk != 249                   // 'text'\n     && lk != 253                   // 'to'\n     && lk != 254                   // 'treat'\n     && lk != 255                   // 'true'\n     && lk != 257                   // 'tumbling'\n     && lk != 258                   // 'type'\n     && lk != 260                   // 'union'\n     && lk != 262                   // 'unordered'\n     && lk != 263                   // 'updating'\n     && lk != 266                   // 'validate'\n     && lk != 267                   // 'value'\n     && lk != 269                   // 'version'\n     && lk != 272                   // 'where'\n     && lk != 276                   // 'with'\n     && lk != 283                   // '{|'\n     && lk != 10009                 // '{' NCName^Token\n     && lk != 14935                 // 'break' '#'\n     && lk != 14951                 // 'continue' '#'\n     && lk != 14981                 // 'exit' '#'\n     && lk != 14987                 // 'for' '#'\n     && lk != 15002                 // 'if' '#'\n     && lk != 15025                 // 'let' '#'\n     && lk != 15096                 // 'switch' '#'\n     && lk != 15104                 // 'try' '#'\n     && lk != 15107                 // 'typeswitch' '#'\n     && lk != 15116                 // 'variable' '#'\n     && lk != 15121                 // 'while' '#'\n     && lk != 16011                 // 'for' '$'\n     && lk != 16049                 // 'let' '$'\n     && lk != 16140                 // 'variable' '$'\n     && lk != 18007                 // 'break' '('\n     && lk != 18023                 // 'continue' '('\n     && lk != 18053                 // 'exit' '('\n     && lk != 18059                 // 'for' '('\n     && lk != 18074                 // 'if' '('\n     && lk != 18097                 // 'let' '('\n     && lk != 18168                 // 'switch' '('\n     && lk != 18176                 // 'try' '('\n     && lk != 18179                 // 'typeswitch' '('\n     && lk != 18188                 // 'variable' '('\n     && lk != 91735                 // 'break' 'loop'\n     && lk != 91751                 // 'continue' 'loop'\n     && lk != 115333                // 'exit' 'returning'\n     && lk != 118961                // 'let' 'score'\n     && lk != 122507                // 'for' 'sliding'\n     && lk != 131723                // 'for' 'tumbling'\n     && lk != 144128                // 'try' '{'\n     && lk != 147225)               // '{' '}'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            lk = -2;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              lk = -3;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                lk = -12;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(9, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      parse_AssignStatement();\n      break;\n    case -3:\n      parse_BlockStatement();\n      break;\n    case 91735:                     // 'break' 'loop'\n      parse_BreakStatement();\n      break;\n    case 91751:                     // 'continue' 'loop'\n      parse_ContinueStatement();\n      break;\n    case 115333:                    // 'exit' 'returning'\n      parse_ExitStatement();\n      break;\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      parse_FLWORStatement();\n      break;\n    case 18074:                     // 'if' '('\n      parse_IfStatement();\n      break;\n    case 18168:                     // 'switch' '('\n      parse_SwitchStatement();\n      break;\n    case 144128:                    // 'try' '{'\n      parse_TryCatchStatement();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      parse_TypeswitchStatement();\n      break;\n    case -12:\n    case 16140:                     // 'variable' '$'\n      parse_VarDeclStatement();\n      break;\n    case -13:\n      parse_WhileStatement();\n      break;\n    case 54:                        // ';'\n      parse_VoidStatement();\n      break;\n    default:\n      parse_ApplyStatement();\n    }\n    eventHandler.endNonterminal(\"Statement\", e0);\n  }\n\n  function try_Statement()\n  {\n    switch (l1)\n    {\n    case 133:                       // 'exit'\n      lookahead2W(147);             // S^WS | '#' | '(' | '(:' | 'returning'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 268:                       // 'variable'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 31:                        // '$'\n    case 33:                        // '%'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 87:                        // 'break'\n    case 103:                       // 'continue'\n      lookahead2W(145);             // S^WS | '#' | '(' | '(:' | 'loop'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 273:                       // 'while'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 6                     // EQName^Token\n     && lk != 8                     // IntegerLiteral\n     && lk != 9                     // DecimalLiteral\n     && lk != 10                    // DoubleLiteral\n     && lk != 11                    // StringLiteral\n     && lk != 32                    // '$$'\n     && lk != 35                    // '('\n     && lk != 36                    // '(#'\n     && lk != 41                    // '+'\n     && lk != 43                    // '-'\n     && lk != 47                    // '/'\n     && lk != 48                    // '//'\n     && lk != 54                    // ';'\n     && lk != 55                    // '<'\n     && lk != 56                    // '<!--'\n     && lk != 60                    // '<?'\n     && lk != 69                    // '['\n     && lk != 71                    // 'after'\n     && lk != 73                    // 'allowing'\n     && lk != 74                    // 'ancestor'\n     && lk != 75                    // 'ancestor-or-self'\n     && lk != 76                    // 'and'\n     && lk != 78                    // 'append'\n     && lk != 79                    // 'array'\n     && lk != 80                    // 'as'\n     && lk != 81                    // 'ascending'\n     && lk != 82                    // 'at'\n     && lk != 83                    // 'attribute'\n     && lk != 84                    // 'base-uri'\n     && lk != 85                    // 'before'\n     && lk != 86                    // 'boundary-space'\n     && lk != 89                    // 'case'\n     && lk != 90                    // 'cast'\n     && lk != 91                    // 'castable'\n     && lk != 92                    // 'catch'\n     && lk != 94                    // 'child'\n     && lk != 95                    // 'collation'\n     && lk != 97                    // 'comment'\n     && lk != 98                    // 'constraint'\n     && lk != 99                    // 'construction'\n     && lk != 102                   // 'context'\n     && lk != 104                   // 'copy'\n     && lk != 105                   // 'copy-namespaces'\n     && lk != 106                   // 'count'\n     && lk != 107                   // 'decimal-format'\n     && lk != 109                   // 'declare'\n     && lk != 110                   // 'default'\n     && lk != 111                   // 'delete'\n     && lk != 112                   // 'descendant'\n     && lk != 113                   // 'descendant-or-self'\n     && lk != 114                   // 'descending'\n     && lk != 119                   // 'div'\n     && lk != 120                   // 'document'\n     && lk != 121                   // 'document-node'\n     && lk != 122                   // 'element'\n     && lk != 123                   // 'else'\n     && lk != 124                   // 'empty'\n     && lk != 125                   // 'empty-sequence'\n     && lk != 126                   // 'encoding'\n     && lk != 127                   // 'end'\n     && lk != 129                   // 'eq'\n     && lk != 130                   // 'every'\n     && lk != 132                   // 'except'\n     && lk != 134                   // 'external'\n     && lk != 135                   // 'false'\n     && lk != 136                   // 'first'\n     && lk != 137                   // 'following'\n     && lk != 138                   // 'following-sibling'\n     && lk != 142                   // 'from'\n     && lk != 143                   // 'ft-option'\n     && lk != 147                   // 'function'\n     && lk != 148                   // 'ge'\n     && lk != 150                   // 'group'\n     && lk != 152                   // 'gt'\n     && lk != 153                   // 'idiv'\n     && lk != 155                   // 'import'\n     && lk != 156                   // 'in'\n     && lk != 157                   // 'index'\n     && lk != 161                   // 'insert'\n     && lk != 162                   // 'instance'\n     && lk != 163                   // 'integrity'\n     && lk != 164                   // 'intersect'\n     && lk != 165                   // 'into'\n     && lk != 166                   // 'is'\n     && lk != 167                   // 'item'\n     && lk != 168                   // 'json'\n     && lk != 169                   // 'json-item'\n     && lk != 170                   // 'jsoniq'\n     && lk != 173                   // 'last'\n     && lk != 174                   // 'lax'\n     && lk != 175                   // 'le'\n     && lk != 179                   // 'loop'\n     && lk != 181                   // 'lt'\n     && lk != 183                   // 'mod'\n     && lk != 184                   // 'modify'\n     && lk != 185                   // 'module'\n     && lk != 187                   // 'namespace'\n     && lk != 188                   // 'namespace-node'\n     && lk != 189                   // 'ne'\n     && lk != 194                   // 'node'\n     && lk != 195                   // 'nodes'\n     && lk != 196                   // 'not'\n     && lk != 197                   // 'null'\n     && lk != 198                   // 'object'\n     && lk != 202                   // 'only'\n     && lk != 203                   // 'option'\n     && lk != 204                   // 'or'\n     && lk != 205                   // 'order'\n     && lk != 206                   // 'ordered'\n     && lk != 207                   // 'ordering'\n     && lk != 210                   // 'parent'\n     && lk != 216                   // 'preceding'\n     && lk != 217                   // 'preceding-sibling'\n     && lk != 220                   // 'processing-instruction'\n     && lk != 222                   // 'rename'\n     && lk != 223                   // 'replace'\n     && lk != 224                   // 'return'\n     && lk != 225                   // 'returning'\n     && lk != 226                   // 'revalidation'\n     && lk != 228                   // 'satisfies'\n     && lk != 229                   // 'schema'\n     && lk != 230                   // 'schema-attribute'\n     && lk != 231                   // 'schema-element'\n     && lk != 232                   // 'score'\n     && lk != 233                   // 'select'\n     && lk != 234                   // 'self'\n     && lk != 239                   // 'sliding'\n     && lk != 240                   // 'some'\n     && lk != 241                   // 'stable'\n     && lk != 242                   // 'start'\n     && lk != 245                   // 'strict'\n     && lk != 247                   // 'structured-item'\n     && lk != 249                   // 'text'\n     && lk != 253                   // 'to'\n     && lk != 254                   // 'treat'\n     && lk != 255                   // 'true'\n     && lk != 257                   // 'tumbling'\n     && lk != 258                   // 'type'\n     && lk != 260                   // 'union'\n     && lk != 262                   // 'unordered'\n     && lk != 263                   // 'updating'\n     && lk != 266                   // 'validate'\n     && lk != 267                   // 'value'\n     && lk != 269                   // 'version'\n     && lk != 272                   // 'where'\n     && lk != 276                   // 'with'\n     && lk != 283                   // '{|'\n     && lk != 10009                 // '{' NCName^Token\n     && lk != 14935                 // 'break' '#'\n     && lk != 14951                 // 'continue' '#'\n     && lk != 14981                 // 'exit' '#'\n     && lk != 14987                 // 'for' '#'\n     && lk != 15002                 // 'if' '#'\n     && lk != 15025                 // 'let' '#'\n     && lk != 15096                 // 'switch' '#'\n     && lk != 15104                 // 'try' '#'\n     && lk != 15107                 // 'typeswitch' '#'\n     && lk != 15116                 // 'variable' '#'\n     && lk != 15121                 // 'while' '#'\n     && lk != 16011                 // 'for' '$'\n     && lk != 16049                 // 'let' '$'\n     && lk != 16140                 // 'variable' '$'\n     && lk != 18007                 // 'break' '('\n     && lk != 18023                 // 'continue' '('\n     && lk != 18053                 // 'exit' '('\n     && lk != 18059                 // 'for' '('\n     && lk != 18074                 // 'if' '('\n     && lk != 18097                 // 'let' '('\n     && lk != 18168                 // 'switch' '('\n     && lk != 18176                 // 'try' '('\n     && lk != 18179                 // 'typeswitch' '('\n     && lk != 18188                 // 'variable' '('\n     && lk != 91735                 // 'break' 'loop'\n     && lk != 91751                 // 'continue' 'loop'\n     && lk != 115333                // 'exit' 'returning'\n     && lk != 118961                // 'let' 'score'\n     && lk != 122507                // 'for' 'sliding'\n     && lk != 131723                // 'for' 'tumbling'\n     && lk != 144128                // 'try' '{'\n     && lk != 147225)               // '{' '}'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          memoize(9, e0A, -1);\n          lk = -15;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            memoize(9, e0A, -2);\n            lk = -15;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              memoize(9, e0A, -3);\n              lk = -15;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                memoize(9, e0A, -12);\n                lk = -15;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                memoize(9, e0A, -13);\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      try_AssignStatement();\n      break;\n    case -3:\n      try_BlockStatement();\n      break;\n    case 91735:                     // 'break' 'loop'\n      try_BreakStatement();\n      break;\n    case 91751:                     // 'continue' 'loop'\n      try_ContinueStatement();\n      break;\n    case 115333:                    // 'exit' 'returning'\n      try_ExitStatement();\n      break;\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      try_FLWORStatement();\n      break;\n    case 18074:                     // 'if' '('\n      try_IfStatement();\n      break;\n    case 18168:                     // 'switch' '('\n      try_SwitchStatement();\n      break;\n    case 144128:                    // 'try' '{'\n      try_TryCatchStatement();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      try_TypeswitchStatement();\n      break;\n    case -12:\n    case 16140:                     // 'variable' '$'\n      try_VarDeclStatement();\n      break;\n    case -13:\n      try_WhileStatement();\n      break;\n    case 54:                        // ';'\n      try_VoidStatement();\n      break;\n    case -15:\n      break;\n    default:\n      try_ApplyStatement();\n    }\n  }\n\n  function parse_ApplyStatement()\n  {\n    eventHandler.startNonterminal(\"ApplyStatement\", e0);\n    parse_ExprSimple();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ApplyStatement\", e0);\n  }\n\n  function try_ApplyStatement()\n  {\n    try_ExprSimple();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_AssignStatement()\n  {\n    eventHandler.startNonterminal(\"AssignStatement\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"AssignStatement\", e0);\n  }\n\n  function try_AssignStatement()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_BlockStatement()\n  {\n    eventHandler.startNonterminal(\"BlockStatement\", e0);\n    shift(281);                     // '{'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statements();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"BlockStatement\", e0);\n  }\n\n  function try_BlockStatement()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statements();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_BreakStatement()\n  {\n    eventHandler.startNonterminal(\"BreakStatement\", e0);\n    shift(87);                      // 'break'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shift(179);                     // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"BreakStatement\", e0);\n  }\n\n  function try_BreakStatement()\n  {\n    shiftT(87);                     // 'break'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shiftT(179);                    // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ContinueStatement()\n  {\n    eventHandler.startNonterminal(\"ContinueStatement\", e0);\n    shift(103);                     // 'continue'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shift(179);                     // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ContinueStatement\", e0);\n  }\n\n  function try_ContinueStatement()\n  {\n    shiftT(103);                    // 'continue'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shiftT(179);                    // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ExitStatement()\n  {\n    eventHandler.startNonterminal(\"ExitStatement\", e0);\n    shift(133);                     // 'exit'\n    lookahead1W(74);                // S^WS | '(:' | 'returning'\n    shift(225);                     // 'returning'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ExitStatement\", e0);\n  }\n\n  function try_ExitStatement()\n  {\n    shiftT(133);                    // 'exit'\n    lookahead1W(74);                // S^WS | '(:' | 'returning'\n    shiftT(225);                    // 'returning'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_FLWORStatement()\n  {\n    eventHandler.startNonterminal(\"FLWORStatement\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnStatement();\n    eventHandler.endNonterminal(\"FLWORStatement\", e0);\n  }\n\n  function try_FLWORStatement()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnStatement();\n  }\n\n  function parse_ReturnStatement()\n  {\n    eventHandler.startNonterminal(\"ReturnStatement\", e0);\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"ReturnStatement\", e0);\n  }\n\n  function try_ReturnStatement()\n  {\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_IfStatement()\n  {\n    eventHandler.startNonterminal(\"IfStatement\", e0);\n    shift(154);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shift(250);                     // 'then'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    lookahead1W(51);                // S^WS | '(:' | 'else'\n    shift(123);                     // 'else'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"IfStatement\", e0);\n  }\n\n  function try_IfStatement()\n  {\n    shiftT(154);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shiftT(250);                    // 'then'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n    lookahead1W(51);                // S^WS | '(:' | 'else'\n    shiftT(123);                    // 'else'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchStatement\", e0);\n    shift(248);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchStatement\", e0);\n  }\n\n  function try_SwitchStatement()\n  {\n    shiftT(248);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_SwitchCaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchCaseStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseStatement\", e0);\n    for (;;)\n    {\n      shift(89);                    // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchCaseStatement\", e0);\n  }\n\n  function try_SwitchCaseStatement()\n  {\n    for (;;)\n    {\n      shiftT(89);                   // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_TryCatchStatement()\n  {\n    eventHandler.startNonterminal(\"TryCatchStatement\", e0);\n    shift(256);                     // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      shift(92);                    // 'catch'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CatchErrorList();\n      whitespace();\n      parse_BlockStatement();\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 92:                      // 'catch'\n        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 2652                // 'catch' Wildcard\n       && lk != 3164                // 'catch' EQName^Token\n       && lk != 36444               // 'catch' 'after'\n       && lk != 37468               // 'catch' 'allowing'\n       && lk != 37980               // 'catch' 'ancestor'\n       && lk != 38492               // 'catch' 'ancestor-or-self'\n       && lk != 39004               // 'catch' 'and'\n       && lk != 40028               // 'catch' 'append'\n       && lk != 40540               // 'catch' 'array'\n       && lk != 41052               // 'catch' 'as'\n       && lk != 41564               // 'catch' 'ascending'\n       && lk != 42076               // 'catch' 'at'\n       && lk != 42588               // 'catch' 'attribute'\n       && lk != 43100               // 'catch' 'base-uri'\n       && lk != 43612               // 'catch' 'before'\n       && lk != 44124               // 'catch' 'boundary-space'\n       && lk != 44636               // 'catch' 'break'\n       && lk != 45660               // 'catch' 'case'\n       && lk != 46172               // 'catch' 'cast'\n       && lk != 46684               // 'catch' 'castable'\n       && lk != 47196               // 'catch' 'catch'\n       && lk != 48220               // 'catch' 'child'\n       && lk != 48732               // 'catch' 'collation'\n       && lk != 49756               // 'catch' 'comment'\n       && lk != 50268               // 'catch' 'constraint'\n       && lk != 50780               // 'catch' 'construction'\n       && lk != 52316               // 'catch' 'context'\n       && lk != 52828               // 'catch' 'continue'\n       && lk != 53340               // 'catch' 'copy'\n       && lk != 53852               // 'catch' 'copy-namespaces'\n       && lk != 54364               // 'catch' 'count'\n       && lk != 54876               // 'catch' 'decimal-format'\n       && lk != 55900               // 'catch' 'declare'\n       && lk != 56412               // 'catch' 'default'\n       && lk != 56924               // 'catch' 'delete'\n       && lk != 57436               // 'catch' 'descendant'\n       && lk != 57948               // 'catch' 'descendant-or-self'\n       && lk != 58460               // 'catch' 'descending'\n       && lk != 61020               // 'catch' 'div'\n       && lk != 61532               // 'catch' 'document'\n       && lk != 62044               // 'catch' 'document-node'\n       && lk != 62556               // 'catch' 'element'\n       && lk != 63068               // 'catch' 'else'\n       && lk != 63580               // 'catch' 'empty'\n       && lk != 64092               // 'catch' 'empty-sequence'\n       && lk != 64604               // 'catch' 'encoding'\n       && lk != 65116               // 'catch' 'end'\n       && lk != 66140               // 'catch' 'eq'\n       && lk != 66652               // 'catch' 'every'\n       && lk != 67676               // 'catch' 'except'\n       && lk != 68188               // 'catch' 'exit'\n       && lk != 68700               // 'catch' 'external'\n       && lk != 69212               // 'catch' 'false'\n       && lk != 69724               // 'catch' 'first'\n       && lk != 70236               // 'catch' 'following'\n       && lk != 70748               // 'catch' 'following-sibling'\n       && lk != 71260               // 'catch' 'for'\n       && lk != 72796               // 'catch' 'from'\n       && lk != 73308               // 'catch' 'ft-option'\n       && lk != 75356               // 'catch' 'function'\n       && lk != 75868               // 'catch' 'ge'\n       && lk != 76892               // 'catch' 'group'\n       && lk != 77916               // 'catch' 'gt'\n       && lk != 78428               // 'catch' 'idiv'\n       && lk != 78940               // 'catch' 'if'\n       && lk != 79452               // 'catch' 'import'\n       && lk != 79964               // 'catch' 'in'\n       && lk != 80476               // 'catch' 'index'\n       && lk != 82524               // 'catch' 'insert'\n       && lk != 83036               // 'catch' 'instance'\n       && lk != 83548               // 'catch' 'integrity'\n       && lk != 84060               // 'catch' 'intersect'\n       && lk != 84572               // 'catch' 'into'\n       && lk != 85084               // 'catch' 'is'\n       && lk != 85596               // 'catch' 'item'\n       && lk != 86108               // 'catch' 'json'\n       && lk != 86620               // 'catch' 'json-item'\n       && lk != 87132               // 'catch' 'jsoniq'\n       && lk != 88668               // 'catch' 'last'\n       && lk != 89180               // 'catch' 'lax'\n       && lk != 89692               // 'catch' 'le'\n       && lk != 90716               // 'catch' 'let'\n       && lk != 91740               // 'catch' 'loop'\n       && lk != 92764               // 'catch' 'lt'\n       && lk != 93788               // 'catch' 'mod'\n       && lk != 94300               // 'catch' 'modify'\n       && lk != 94812               // 'catch' 'module'\n       && lk != 95836               // 'catch' 'namespace'\n       && lk != 96348               // 'catch' 'namespace-node'\n       && lk != 96860               // 'catch' 'ne'\n       && lk != 99420               // 'catch' 'node'\n       && lk != 99932               // 'catch' 'nodes'\n       && lk != 100956              // 'catch' 'null'\n       && lk != 101468              // 'catch' 'object'\n       && lk != 103516              // 'catch' 'only'\n       && lk != 104028              // 'catch' 'option'\n       && lk != 104540              // 'catch' 'or'\n       && lk != 105052              // 'catch' 'order'\n       && lk != 105564              // 'catch' 'ordered'\n       && lk != 106076              // 'catch' 'ordering'\n       && lk != 107612              // 'catch' 'parent'\n       && lk != 110684              // 'catch' 'preceding'\n       && lk != 111196              // 'catch' 'preceding-sibling'\n       && lk != 112732              // 'catch' 'processing-instruction'\n       && lk != 113756              // 'catch' 'rename'\n       && lk != 114268              // 'catch' 'replace'\n       && lk != 114780              // 'catch' 'return'\n       && lk != 115292              // 'catch' 'returning'\n       && lk != 115804              // 'catch' 'revalidation'\n       && lk != 116828              // 'catch' 'satisfies'\n       && lk != 117340              // 'catch' 'schema'\n       && lk != 117852              // 'catch' 'schema-attribute'\n       && lk != 118364              // 'catch' 'schema-element'\n       && lk != 118876              // 'catch' 'score'\n       && lk != 119388              // 'catch' 'select'\n       && lk != 119900              // 'catch' 'self'\n       && lk != 122460              // 'catch' 'sliding'\n       && lk != 122972              // 'catch' 'some'\n       && lk != 123484              // 'catch' 'stable'\n       && lk != 123996              // 'catch' 'start'\n       && lk != 125532              // 'catch' 'strict'\n       && lk != 126556              // 'catch' 'structured-item'\n       && lk != 127068              // 'catch' 'switch'\n       && lk != 127580              // 'catch' 'text'\n       && lk != 129628              // 'catch' 'to'\n       && lk != 130140              // 'catch' 'treat'\n       && lk != 130652              // 'catch' 'true'\n       && lk != 131164              // 'catch' 'try'\n       && lk != 131676              // 'catch' 'tumbling'\n       && lk != 132188              // 'catch' 'type'\n       && lk != 132700              // 'catch' 'typeswitch'\n       && lk != 133212              // 'catch' 'union'\n       && lk != 134236              // 'catch' 'unordered'\n       && lk != 134748              // 'catch' 'updating'\n       && lk != 136284              // 'catch' 'validate'\n       && lk != 136796              // 'catch' 'value'\n       && lk != 137308              // 'catch' 'variable'\n       && lk != 137820              // 'catch' 'version'\n       && lk != 139356              // 'catch' 'where'\n       && lk != 139868              // 'catch' 'while'\n       && lk != 141404)             // 'catch' 'with'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchStatement\", e0);\n  }\n\n  function try_TryCatchStatement()\n  {\n    shiftT(256);                    // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      shiftT(92);                   // 'catch'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CatchErrorList();\n      try_BlockStatement();\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 92:                      // 'catch'\n        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 2652                // 'catch' Wildcard\n       && lk != 3164                // 'catch' EQName^Token\n       && lk != 36444               // 'catch' 'after'\n       && lk != 37468               // 'catch' 'allowing'\n       && lk != 37980               // 'catch' 'ancestor'\n       && lk != 38492               // 'catch' 'ancestor-or-self'\n       && lk != 39004               // 'catch' 'and'\n       && lk != 40028               // 'catch' 'append'\n       && lk != 40540               // 'catch' 'array'\n       && lk != 41052               // 'catch' 'as'\n       && lk != 41564               // 'catch' 'ascending'\n       && lk != 42076               // 'catch' 'at'\n       && lk != 42588               // 'catch' 'attribute'\n       && lk != 43100               // 'catch' 'base-uri'\n       && lk != 43612               // 'catch' 'before'\n       && lk != 44124               // 'catch' 'boundary-space'\n       && lk != 44636               // 'catch' 'break'\n       && lk != 45660               // 'catch' 'case'\n       && lk != 46172               // 'catch' 'cast'\n       && lk != 46684               // 'catch' 'castable'\n       && lk != 47196               // 'catch' 'catch'\n       && lk != 48220               // 'catch' 'child'\n       && lk != 48732               // 'catch' 'collation'\n       && lk != 49756               // 'catch' 'comment'\n       && lk != 50268               // 'catch' 'constraint'\n       && lk != 50780               // 'catch' 'construction'\n       && lk != 52316               // 'catch' 'context'\n       && lk != 52828               // 'catch' 'continue'\n       && lk != 53340               // 'catch' 'copy'\n       && lk != 53852               // 'catch' 'copy-namespaces'\n       && lk != 54364               // 'catch' 'count'\n       && lk != 54876               // 'catch' 'decimal-format'\n       && lk != 55900               // 'catch' 'declare'\n       && lk != 56412               // 'catch' 'default'\n       && lk != 56924               // 'catch' 'delete'\n       && lk != 57436               // 'catch' 'descendant'\n       && lk != 57948               // 'catch' 'descendant-or-self'\n       && lk != 58460               // 'catch' 'descending'\n       && lk != 61020               // 'catch' 'div'\n       && lk != 61532               // 'catch' 'document'\n       && lk != 62044               // 'catch' 'document-node'\n       && lk != 62556               // 'catch' 'element'\n       && lk != 63068               // 'catch' 'else'\n       && lk != 63580               // 'catch' 'empty'\n       && lk != 64092               // 'catch' 'empty-sequence'\n       && lk != 64604               // 'catch' 'encoding'\n       && lk != 65116               // 'catch' 'end'\n       && lk != 66140               // 'catch' 'eq'\n       && lk != 66652               // 'catch' 'every'\n       && lk != 67676               // 'catch' 'except'\n       && lk != 68188               // 'catch' 'exit'\n       && lk != 68700               // 'catch' 'external'\n       && lk != 69212               // 'catch' 'false'\n       && lk != 69724               // 'catch' 'first'\n       && lk != 70236               // 'catch' 'following'\n       && lk != 70748               // 'catch' 'following-sibling'\n       && lk != 71260               // 'catch' 'for'\n       && lk != 72796               // 'catch' 'from'\n       && lk != 73308               // 'catch' 'ft-option'\n       && lk != 75356               // 'catch' 'function'\n       && lk != 75868               // 'catch' 'ge'\n       && lk != 76892               // 'catch' 'group'\n       && lk != 77916               // 'catch' 'gt'\n       && lk != 78428               // 'catch' 'idiv'\n       && lk != 78940               // 'catch' 'if'\n       && lk != 79452               // 'catch' 'import'\n       && lk != 79964               // 'catch' 'in'\n       && lk != 80476               // 'catch' 'index'\n       && lk != 82524               // 'catch' 'insert'\n       && lk != 83036               // 'catch' 'instance'\n       && lk != 83548               // 'catch' 'integrity'\n       && lk != 84060               // 'catch' 'intersect'\n       && lk != 84572               // 'catch' 'into'\n       && lk != 85084               // 'catch' 'is'\n       && lk != 85596               // 'catch' 'item'\n       && lk != 86108               // 'catch' 'json'\n       && lk != 86620               // 'catch' 'json-item'\n       && lk != 87132               // 'catch' 'jsoniq'\n       && lk != 88668               // 'catch' 'last'\n       && lk != 89180               // 'catch' 'lax'\n       && lk != 89692               // 'catch' 'le'\n       && lk != 90716               // 'catch' 'let'\n       && lk != 91740               // 'catch' 'loop'\n       && lk != 92764               // 'catch' 'lt'\n       && lk != 93788               // 'catch' 'mod'\n       && lk != 94300               // 'catch' 'modify'\n       && lk != 94812               // 'catch' 'module'\n       && lk != 95836               // 'catch' 'namespace'\n       && lk != 96348               // 'catch' 'namespace-node'\n       && lk != 96860               // 'catch' 'ne'\n       && lk != 99420               // 'catch' 'node'\n       && lk != 99932               // 'catch' 'nodes'\n       && lk != 100956              // 'catch' 'null'\n       && lk != 101468              // 'catch' 'object'\n       && lk != 103516              // 'catch' 'only'\n       && lk != 104028              // 'catch' 'option'\n       && lk != 104540              // 'catch' 'or'\n       && lk != 105052              // 'catch' 'order'\n       && lk != 105564              // 'catch' 'ordered'\n       && lk != 106076              // 'catch' 'ordering'\n       && lk != 107612              // 'catch' 'parent'\n       && lk != 110684              // 'catch' 'preceding'\n       && lk != 111196              // 'catch' 'preceding-sibling'\n       && lk != 112732              // 'catch' 'processing-instruction'\n       && lk != 113756              // 'catch' 'rename'\n       && lk != 114268              // 'catch' 'replace'\n       && lk != 114780              // 'catch' 'return'\n       && lk != 115292              // 'catch' 'returning'\n       && lk != 115804              // 'catch' 'revalidation'\n       && lk != 116828              // 'catch' 'satisfies'\n       && lk != 117340              // 'catch' 'schema'\n       && lk != 117852              // 'catch' 'schema-attribute'\n       && lk != 118364              // 'catch' 'schema-element'\n       && lk != 118876              // 'catch' 'score'\n       && lk != 119388              // 'catch' 'select'\n       && lk != 119900              // 'catch' 'self'\n       && lk != 122460              // 'catch' 'sliding'\n       && lk != 122972              // 'catch' 'some'\n       && lk != 123484              // 'catch' 'stable'\n       && lk != 123996              // 'catch' 'start'\n       && lk != 125532              // 'catch' 'strict'\n       && lk != 126556              // 'catch' 'structured-item'\n       && lk != 127068              // 'catch' 'switch'\n       && lk != 127580              // 'catch' 'text'\n       && lk != 129628              // 'catch' 'to'\n       && lk != 130140              // 'catch' 'treat'\n       && lk != 130652              // 'catch' 'true'\n       && lk != 131164              // 'catch' 'try'\n       && lk != 131676              // 'catch' 'tumbling'\n       && lk != 132188              // 'catch' 'type'\n       && lk != 132700              // 'catch' 'typeswitch'\n       && lk != 133212              // 'catch' 'union'\n       && lk != 134236              // 'catch' 'unordered'\n       && lk != 134748              // 'catch' 'updating'\n       && lk != 136284              // 'catch' 'validate'\n       && lk != 136796              // 'catch' 'value'\n       && lk != 137308              // 'catch' 'variable'\n       && lk != 137820              // 'catch' 'version'\n       && lk != 139356              // 'catch' 'where'\n       && lk != 139868              // 'catch' 'while'\n       && lk != 141404)             // 'catch' 'with'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TypeswitchStatement()\n  {\n    eventHandler.startNonterminal(\"TypeswitchStatement\", e0);\n    shift(259);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"TypeswitchStatement\", e0);\n  }\n\n  function try_TypeswitchStatement()\n  {\n    shiftT(259);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_CaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_CaseStatement()\n  {\n    eventHandler.startNonterminal(\"CaseStatement\", e0);\n    shift(89);                      // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"CaseStatement\", e0);\n  }\n\n  function try_CaseStatement()\n  {\n    shiftT(89);                     // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_VarDeclStatement()\n  {\n    eventHandler.startNonterminal(\"VarDeclStatement\", e0);\n    for (;;)\n    {\n      lookahead1W(102);             // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(268);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(172);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(155);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 53)                   // ':='\n    {\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(172);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      lookahead1W(155);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n    }\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"VarDeclStatement\", e0);\n  }\n\n  function try_VarDeclStatement()\n  {\n    for (;;)\n    {\n      lookahead1W(102);             // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(268);                    // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(172);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(155);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 53)                   // ':='\n    {\n      shiftT(53);                   // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(172);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      lookahead1W(155);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shiftT(53);                 // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_ExprSingle();\n      }\n    }\n    shiftT(54);                     // ';'\n  }\n\n  function parse_WhileStatement()\n  {\n    eventHandler.startNonterminal(\"WhileStatement\", e0);\n    shift(273);                     // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"WhileStatement\", e0);\n  }\n\n  function try_WhileStatement()\n  {\n    shiftT(273);                    // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_VoidStatement()\n  {\n    eventHandler.startNonterminal(\"VoidStatement\", e0);\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"VoidStatement\", e0);\n  }\n\n  function try_VoidStatement()\n  {\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ExprSingle()\n  {\n    eventHandler.startNonterminal(\"ExprSingle\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      parse_FLWORExpr();\n      break;\n    case 18074:                     // 'if' '('\n      parse_IfExpr();\n      break;\n    case 18168:                     // 'switch' '('\n      parse_SwitchExpr();\n      break;\n    case 144128:                    // 'try' '{'\n      parse_TryCatchExpr();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      parse_TypeswitchExpr();\n      break;\n    default:\n      parse_ExprSimple();\n    }\n    eventHandler.endNonterminal(\"ExprSingle\", e0);\n  }\n\n  function try_ExprSingle()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      try_FLWORExpr();\n      break;\n    case 18074:                     // 'if' '('\n      try_IfExpr();\n      break;\n    case 18168:                     // 'switch' '('\n      try_SwitchExpr();\n      break;\n    case 144128:                    // 'try' '{'\n      try_TryCatchExpr();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      try_TypeswitchExpr();\n      break;\n    default:\n      try_ExprSimple();\n    }\n  }\n\n  function parse_ExprSimple()\n  {\n    eventHandler.startNonterminal(\"ExprSimple\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(275);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(170);             // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 17998                 // 'append' '('\n     || lk == 18031                 // 'delete' '('\n     || lk == 18081                 // 'insert' '('\n     || lk == 18142                 // 'rename' '('\n     || lk == 99439                 // 'delete' 'node'\n     || lk == 99489                 // 'insert' 'node'\n     || lk == 99550                 // 'rename' 'node'\n     || lk == 99951                 // 'delete' 'nodes'\n     || lk == 100001                // 'insert' 'nodes'\n     || lk == 136927)               // 'replace' 'value'\n    {\n      lk = memoized(10, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_OrExpr();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_InsertExpr();\n            lk = -3;\n          }\n          catch (p3A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_DeleteExpr();\n              lk = -4;\n            }\n            catch (p4A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_RenameExpr();\n                lk = -5;\n              }\n              catch (p5A)\n              {\n                try\n                {\n                  b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                  b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                  b2 = b2A; e2 = e2A; end = e2A; }}\n                  try_ReplaceExpr();\n                  lk = -6;\n                }\n                catch (p6A)\n                {\n                  try\n                  {\n                    b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                    b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                    b2 = b2A; e2 = e2A; end = e2A; }}\n                    try_JSONDeleteExpr();\n                    lk = -8;\n                  }\n                  catch (p8A)\n                  {\n                    try\n                    {\n                      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                      b2 = b2A; e2 = e2A; end = e2A; }}\n                      try_JSONInsertExpr();\n                      lk = -9;\n                    }\n                    catch (p9A)\n                    {\n                      try\n                      {\n                        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                        b2 = b2A; e2 = e2A; end = e2A; }}\n                        try_JSONRenameExpr();\n                        lk = -10;\n                      }\n                      catch (p10A)\n                      {\n                        try\n                        {\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          try_JSONReplaceExpr();\n                          lk = -11;\n                        }\n                        catch (p11A)\n                        {\n                          lk = -12;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(10, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 16002:                     // 'every' '$'\n    case 16112:                     // 'some' '$'\n      parse_QuantifiedExpr();\n      break;\n    case -3:\n      parse_InsertExpr();\n      break;\n    case -4:\n      parse_DeleteExpr();\n      break;\n    case -5:\n      parse_RenameExpr();\n      break;\n    case -6:\n    case 99551:                     // 'replace' 'node'\n      parse_ReplaceExpr();\n      break;\n    case 15976:                     // 'copy' '$'\n      parse_TransformExpr();\n      break;\n    case -8:\n    case 3183:                      // 'delete' EQName^Token\n    case 4207:                      // 'delete' IntegerLiteral\n    case 4719:                      // 'delete' DecimalLiteral\n    case 5231:                      // 'delete' DoubleLiteral\n    case 5743:                      // 'delete' StringLiteral\n    case 15983:                     // 'delete' '$'\n    case 16495:                     // 'delete' '$$'\n    case 17007:                     // 'delete' '%'\n    case 28271:                     // 'delete' '<'\n    case 28783:                     // 'delete' '<!--'\n    case 30831:                     // 'delete' '<?'\n    case 35439:                     // 'delete' '['\n    case 36463:                     // 'delete' 'after'\n    case 37487:                     // 'delete' 'allowing'\n    case 37999:                     // 'delete' 'ancestor'\n    case 38511:                     // 'delete' 'ancestor-or-self'\n    case 39023:                     // 'delete' 'and'\n    case 40047:                     // 'delete' 'append'\n    case 40559:                     // 'delete' 'array'\n    case 41071:                     // 'delete' 'as'\n    case 41583:                     // 'delete' 'ascending'\n    case 42095:                     // 'delete' 'at'\n    case 42607:                     // 'delete' 'attribute'\n    case 43119:                     // 'delete' 'base-uri'\n    case 43631:                     // 'delete' 'before'\n    case 44143:                     // 'delete' 'boundary-space'\n    case 44655:                     // 'delete' 'break'\n    case 45679:                     // 'delete' 'case'\n    case 46191:                     // 'delete' 'cast'\n    case 46703:                     // 'delete' 'castable'\n    case 47215:                     // 'delete' 'catch'\n    case 48239:                     // 'delete' 'child'\n    case 48751:                     // 'delete' 'collation'\n    case 49775:                     // 'delete' 'comment'\n    case 50287:                     // 'delete' 'constraint'\n    case 50799:                     // 'delete' 'construction'\n    case 52335:                     // 'delete' 'context'\n    case 52847:                     // 'delete' 'continue'\n    case 53359:                     // 'delete' 'copy'\n    case 53871:                     // 'delete' 'copy-namespaces'\n    case 54383:                     // 'delete' 'count'\n    case 54895:                     // 'delete' 'decimal-format'\n    case 55919:                     // 'delete' 'declare'\n    case 56431:                     // 'delete' 'default'\n    case 56943:                     // 'delete' 'delete'\n    case 57455:                     // 'delete' 'descendant'\n    case 57967:                     // 'delete' 'descendant-or-self'\n    case 58479:                     // 'delete' 'descending'\n    case 61039:                     // 'delete' 'div'\n    case 61551:                     // 'delete' 'document'\n    case 62063:                     // 'delete' 'document-node'\n    case 62575:                     // 'delete' 'element'\n    case 63087:                     // 'delete' 'else'\n    case 63599:                     // 'delete' 'empty'\n    case 64111:                     // 'delete' 'empty-sequence'\n    case 64623:                     // 'delete' 'encoding'\n    case 65135:                     // 'delete' 'end'\n    case 66159:                     // 'delete' 'eq'\n    case 66671:                     // 'delete' 'every'\n    case 67695:                     // 'delete' 'except'\n    case 68207:                     // 'delete' 'exit'\n    case 68719:                     // 'delete' 'external'\n    case 69231:                     // 'delete' 'false'\n    case 69743:                     // 'delete' 'first'\n    case 70255:                     // 'delete' 'following'\n    case 70767:                     // 'delete' 'following-sibling'\n    case 71279:                     // 'delete' 'for'\n    case 72815:                     // 'delete' 'from'\n    case 73327:                     // 'delete' 'ft-option'\n    case 75375:                     // 'delete' 'function'\n    case 75887:                     // 'delete' 'ge'\n    case 76911:                     // 'delete' 'group'\n    case 77935:                     // 'delete' 'gt'\n    case 78447:                     // 'delete' 'idiv'\n    case 78959:                     // 'delete' 'if'\n    case 79471:                     // 'delete' 'import'\n    case 79983:                     // 'delete' 'in'\n    case 80495:                     // 'delete' 'index'\n    case 82543:                     // 'delete' 'insert'\n    case 83055:                     // 'delete' 'instance'\n    case 83567:                     // 'delete' 'integrity'\n    case 84079:                     // 'delete' 'intersect'\n    case 84591:                     // 'delete' 'into'\n    case 85103:                     // 'delete' 'is'\n    case 85615:                     // 'delete' 'item'\n    case 86127:                     // 'delete' 'json'\n    case 86639:                     // 'delete' 'json-item'\n    case 87151:                     // 'delete' 'jsoniq'\n    case 88687:                     // 'delete' 'last'\n    case 89199:                     // 'delete' 'lax'\n    case 89711:                     // 'delete' 'le'\n    case 90735:                     // 'delete' 'let'\n    case 91759:                     // 'delete' 'loop'\n    case 92783:                     // 'delete' 'lt'\n    case 93807:                     // 'delete' 'mod'\n    case 94319:                     // 'delete' 'modify'\n    case 94831:                     // 'delete' 'module'\n    case 95855:                     // 'delete' 'namespace'\n    case 96367:                     // 'delete' 'namespace-node'\n    case 96879:                     // 'delete' 'ne'\n    case 100975:                    // 'delete' 'null'\n    case 101487:                    // 'delete' 'object'\n    case 103535:                    // 'delete' 'only'\n    case 104047:                    // 'delete' 'option'\n    case 104559:                    // 'delete' 'or'\n    case 105071:                    // 'delete' 'order'\n    case 105583:                    // 'delete' 'ordered'\n    case 106095:                    // 'delete' 'ordering'\n    case 107631:                    // 'delete' 'parent'\n    case 110703:                    // 'delete' 'preceding'\n    case 111215:                    // 'delete' 'preceding-sibling'\n    case 112751:                    // 'delete' 'processing-instruction'\n    case 113775:                    // 'delete' 'rename'\n    case 114287:                    // 'delete' 'replace'\n    case 114799:                    // 'delete' 'return'\n    case 115311:                    // 'delete' 'returning'\n    case 115823:                    // 'delete' 'revalidation'\n    case 116847:                    // 'delete' 'satisfies'\n    case 117359:                    // 'delete' 'schema'\n    case 117871:                    // 'delete' 'schema-attribute'\n    case 118383:                    // 'delete' 'schema-element'\n    case 118895:                    // 'delete' 'score'\n    case 119407:                    // 'delete' 'select'\n    case 119919:                    // 'delete' 'self'\n    case 122479:                    // 'delete' 'sliding'\n    case 122991:                    // 'delete' 'some'\n    case 123503:                    // 'delete' 'stable'\n    case 124015:                    // 'delete' 'start'\n    case 125551:                    // 'delete' 'strict'\n    case 126575:                    // 'delete' 'structured-item'\n    case 127087:                    // 'delete' 'switch'\n    case 127599:                    // 'delete' 'text'\n    case 129647:                    // 'delete' 'to'\n    case 130159:                    // 'delete' 'treat'\n    case 130671:                    // 'delete' 'true'\n    case 131183:                    // 'delete' 'try'\n    case 131695:                    // 'delete' 'tumbling'\n    case 132207:                    // 'delete' 'type'\n    case 132719:                    // 'delete' 'typeswitch'\n    case 133231:                    // 'delete' 'union'\n    case 134255:                    // 'delete' 'unordered'\n    case 134767:                    // 'delete' 'updating'\n    case 136303:                    // 'delete' 'validate'\n    case 136815:                    // 'delete' 'value'\n    case 137327:                    // 'delete' 'variable'\n    case 137839:                    // 'delete' 'version'\n    case 139375:                    // 'delete' 'where'\n    case 139887:                    // 'delete' 'while'\n    case 141423:                    // 'delete' 'with'\n    case 143983:                    // 'delete' '{'\n    case 145007:                    // 'delete' '{|'\n      parse_JSONDeleteExpr();\n      break;\n    case -9:\n    case 3233:                      // 'insert' EQName^Token\n    case 4257:                      // 'insert' IntegerLiteral\n    case 4769:                      // 'insert' DecimalLiteral\n    case 5281:                      // 'insert' DoubleLiteral\n    case 5793:                      // 'insert' StringLiteral\n    case 9889:                      // 'insert' NCName^Token\n    case 16033:                     // 'insert' '$'\n    case 16545:                     // 'insert' '$$'\n    case 17057:                     // 'insert' '%'\n    case 18593:                     // 'insert' '(#'\n    case 21153:                     // 'insert' '+'\n    case 22177:                     // 'insert' '-'\n    case 24225:                     // 'insert' '/'\n    case 24737:                     // 'insert' '//'\n    case 28321:                     // 'insert' '<'\n    case 28833:                     // 'insert' '<!--'\n    case 30881:                     // 'insert' '<?'\n    case 35489:                     // 'insert' '['\n    case 36513:                     // 'insert' 'after'\n    case 37537:                     // 'insert' 'allowing'\n    case 38049:                     // 'insert' 'ancestor'\n    case 38561:                     // 'insert' 'ancestor-or-self'\n    case 39073:                     // 'insert' 'and'\n    case 40097:                     // 'insert' 'append'\n    case 40609:                     // 'insert' 'array'\n    case 41121:                     // 'insert' 'as'\n    case 41633:                     // 'insert' 'ascending'\n    case 42145:                     // 'insert' 'at'\n    case 42657:                     // 'insert' 'attribute'\n    case 43169:                     // 'insert' 'base-uri'\n    case 43681:                     // 'insert' 'before'\n    case 44193:                     // 'insert' 'boundary-space'\n    case 44705:                     // 'insert' 'break'\n    case 45729:                     // 'insert' 'case'\n    case 46241:                     // 'insert' 'cast'\n    case 46753:                     // 'insert' 'castable'\n    case 47265:                     // 'insert' 'catch'\n    case 48289:                     // 'insert' 'child'\n    case 48801:                     // 'insert' 'collation'\n    case 49825:                     // 'insert' 'comment'\n    case 50337:                     // 'insert' 'constraint'\n    case 50849:                     // 'insert' 'construction'\n    case 52385:                     // 'insert' 'context'\n    case 52897:                     // 'insert' 'continue'\n    case 53409:                     // 'insert' 'copy'\n    case 53921:                     // 'insert' 'copy-namespaces'\n    case 54433:                     // 'insert' 'count'\n    case 54945:                     // 'insert' 'decimal-format'\n    case 55969:                     // 'insert' 'declare'\n    case 56481:                     // 'insert' 'default'\n    case 56993:                     // 'insert' 'delete'\n    case 57505:                     // 'insert' 'descendant'\n    case 58017:                     // 'insert' 'descendant-or-self'\n    case 58529:                     // 'insert' 'descending'\n    case 61089:                     // 'insert' 'div'\n    case 61601:                     // 'insert' 'document'\n    case 62113:                     // 'insert' 'document-node'\n    case 62625:                     // 'insert' 'element'\n    case 63137:                     // 'insert' 'else'\n    case 63649:                     // 'insert' 'empty'\n    case 64161:                     // 'insert' 'empty-sequence'\n    case 64673:                     // 'insert' 'encoding'\n    case 65185:                     // 'insert' 'end'\n    case 66209:                     // 'insert' 'eq'\n    case 66721:                     // 'insert' 'every'\n    case 67745:                     // 'insert' 'except'\n    case 68257:                     // 'insert' 'exit'\n    case 68769:                     // 'insert' 'external'\n    case 69281:                     // 'insert' 'false'\n    case 69793:                     // 'insert' 'first'\n    case 70305:                     // 'insert' 'following'\n    case 70817:                     // 'insert' 'following-sibling'\n    case 71329:                     // 'insert' 'for'\n    case 72865:                     // 'insert' 'from'\n    case 73377:                     // 'insert' 'ft-option'\n    case 75425:                     // 'insert' 'function'\n    case 75937:                     // 'insert' 'ge'\n    case 76961:                     // 'insert' 'group'\n    case 77985:                     // 'insert' 'gt'\n    case 78497:                     // 'insert' 'idiv'\n    case 79009:                     // 'insert' 'if'\n    case 79521:                     // 'insert' 'import'\n    case 80033:                     // 'insert' 'in'\n    case 80545:                     // 'insert' 'index'\n    case 82593:                     // 'insert' 'insert'\n    case 83105:                     // 'insert' 'instance'\n    case 83617:                     // 'insert' 'integrity'\n    case 84129:                     // 'insert' 'intersect'\n    case 84641:                     // 'insert' 'into'\n    case 85153:                     // 'insert' 'is'\n    case 85665:                     // 'insert' 'item'\n    case 86177:                     // 'insert' 'json'\n    case 86689:                     // 'insert' 'json-item'\n    case 87201:                     // 'insert' 'jsoniq'\n    case 88737:                     // 'insert' 'last'\n    case 89249:                     // 'insert' 'lax'\n    case 89761:                     // 'insert' 'le'\n    case 90785:                     // 'insert' 'let'\n    case 91809:                     // 'insert' 'loop'\n    case 92833:                     // 'insert' 'lt'\n    case 93857:                     // 'insert' 'mod'\n    case 94369:                     // 'insert' 'modify'\n    case 94881:                     // 'insert' 'module'\n    case 95905:                     // 'insert' 'namespace'\n    case 96417:                     // 'insert' 'namespace-node'\n    case 96929:                     // 'insert' 'ne'\n    case 100513:                    // 'insert' 'not'\n    case 101025:                    // 'insert' 'null'\n    case 101537:                    // 'insert' 'object'\n    case 103585:                    // 'insert' 'only'\n    case 104097:                    // 'insert' 'option'\n    case 104609:                    // 'insert' 'or'\n    case 105121:                    // 'insert' 'order'\n    case 105633:                    // 'insert' 'ordered'\n    case 106145:                    // 'insert' 'ordering'\n    case 107681:                    // 'insert' 'parent'\n    case 110753:                    // 'insert' 'preceding'\n    case 111265:                    // 'insert' 'preceding-sibling'\n    case 112801:                    // 'insert' 'processing-instruction'\n    case 113825:                    // 'insert' 'rename'\n    case 114337:                    // 'insert' 'replace'\n    case 114849:                    // 'insert' 'return'\n    case 115361:                    // 'insert' 'returning'\n    case 115873:                    // 'insert' 'revalidation'\n    case 116897:                    // 'insert' 'satisfies'\n    case 117409:                    // 'insert' 'schema'\n    case 117921:                    // 'insert' 'schema-attribute'\n    case 118433:                    // 'insert' 'schema-element'\n    case 118945:                    // 'insert' 'score'\n    case 119457:                    // 'insert' 'select'\n    case 119969:                    // 'insert' 'self'\n    case 122529:                    // 'insert' 'sliding'\n    case 123041:                    // 'insert' 'some'\n    case 123553:                    // 'insert' 'stable'\n    case 124065:                    // 'insert' 'start'\n    case 125601:                    // 'insert' 'strict'\n    case 126625:                    // 'insert' 'structured-item'\n    case 127137:                    // 'insert' 'switch'\n    case 127649:                    // 'insert' 'text'\n    case 129697:                    // 'insert' 'to'\n    case 130209:                    // 'insert' 'treat'\n    case 130721:                    // 'insert' 'true'\n    case 131233:                    // 'insert' 'try'\n    case 131745:                    // 'insert' 'tumbling'\n    case 132257:                    // 'insert' 'type'\n    case 132769:                    // 'insert' 'typeswitch'\n    case 133281:                    // 'insert' 'union'\n    case 134305:                    // 'insert' 'unordered'\n    case 134817:                    // 'insert' 'updating'\n    case 136353:                    // 'insert' 'validate'\n    case 136865:                    // 'insert' 'value'\n    case 137377:                    // 'insert' 'variable'\n    case 137889:                    // 'insert' 'version'\n    case 139425:                    // 'insert' 'where'\n    case 139937:                    // 'insert' 'while'\n    case 141473:                    // 'insert' 'with'\n    case 144033:                    // 'insert' '{'\n    case 145057:                    // 'insert' '{|'\n      parse_JSONInsertExpr();\n      break;\n    case -10:\n    case 3294:                      // 'rename' EQName^Token\n    case 4318:                      // 'rename' IntegerLiteral\n    case 4830:                      // 'rename' DecimalLiteral\n    case 5342:                      // 'rename' DoubleLiteral\n    case 5854:                      // 'rename' StringLiteral\n    case 16094:                     // 'rename' '$'\n    case 16606:                     // 'rename' '$$'\n    case 17118:                     // 'rename' '%'\n    case 28382:                     // 'rename' '<'\n    case 28894:                     // 'rename' '<!--'\n    case 30942:                     // 'rename' '<?'\n    case 35550:                     // 'rename' '['\n    case 36574:                     // 'rename' 'after'\n    case 37598:                     // 'rename' 'allowing'\n    case 38110:                     // 'rename' 'ancestor'\n    case 38622:                     // 'rename' 'ancestor-or-self'\n    case 39134:                     // 'rename' 'and'\n    case 40158:                     // 'rename' 'append'\n    case 40670:                     // 'rename' 'array'\n    case 41182:                     // 'rename' 'as'\n    case 41694:                     // 'rename' 'ascending'\n    case 42206:                     // 'rename' 'at'\n    case 42718:                     // 'rename' 'attribute'\n    case 43230:                     // 'rename' 'base-uri'\n    case 43742:                     // 'rename' 'before'\n    case 44254:                     // 'rename' 'boundary-space'\n    case 44766:                     // 'rename' 'break'\n    case 45790:                     // 'rename' 'case'\n    case 46302:                     // 'rename' 'cast'\n    case 46814:                     // 'rename' 'castable'\n    case 47326:                     // 'rename' 'catch'\n    case 48350:                     // 'rename' 'child'\n    case 48862:                     // 'rename' 'collation'\n    case 49886:                     // 'rename' 'comment'\n    case 50398:                     // 'rename' 'constraint'\n    case 50910:                     // 'rename' 'construction'\n    case 52446:                     // 'rename' 'context'\n    case 52958:                     // 'rename' 'continue'\n    case 53470:                     // 'rename' 'copy'\n    case 53982:                     // 'rename' 'copy-namespaces'\n    case 54494:                     // 'rename' 'count'\n    case 55006:                     // 'rename' 'decimal-format'\n    case 56030:                     // 'rename' 'declare'\n    case 56542:                     // 'rename' 'default'\n    case 57054:                     // 'rename' 'delete'\n    case 57566:                     // 'rename' 'descendant'\n    case 58078:                     // 'rename' 'descendant-or-self'\n    case 58590:                     // 'rename' 'descending'\n    case 61150:                     // 'rename' 'div'\n    case 61662:                     // 'rename' 'document'\n    case 62174:                     // 'rename' 'document-node'\n    case 62686:                     // 'rename' 'element'\n    case 63198:                     // 'rename' 'else'\n    case 63710:                     // 'rename' 'empty'\n    case 64222:                     // 'rename' 'empty-sequence'\n    case 64734:                     // 'rename' 'encoding'\n    case 65246:                     // 'rename' 'end'\n    case 66270:                     // 'rename' 'eq'\n    case 66782:                     // 'rename' 'every'\n    case 67806:                     // 'rename' 'except'\n    case 68318:                     // 'rename' 'exit'\n    case 68830:                     // 'rename' 'external'\n    case 69342:                     // 'rename' 'false'\n    case 69854:                     // 'rename' 'first'\n    case 70366:                     // 'rename' 'following'\n    case 70878:                     // 'rename' 'following-sibling'\n    case 71390:                     // 'rename' 'for'\n    case 72926:                     // 'rename' 'from'\n    case 73438:                     // 'rename' 'ft-option'\n    case 75486:                     // 'rename' 'function'\n    case 75998:                     // 'rename' 'ge'\n    case 77022:                     // 'rename' 'group'\n    case 78046:                     // 'rename' 'gt'\n    case 78558:                     // 'rename' 'idiv'\n    case 79070:                     // 'rename' 'if'\n    case 79582:                     // 'rename' 'import'\n    case 80094:                     // 'rename' 'in'\n    case 80606:                     // 'rename' 'index'\n    case 82654:                     // 'rename' 'insert'\n    case 83166:                     // 'rename' 'instance'\n    case 83678:                     // 'rename' 'integrity'\n    case 84190:                     // 'rename' 'intersect'\n    case 84702:                     // 'rename' 'into'\n    case 85214:                     // 'rename' 'is'\n    case 85726:                     // 'rename' 'item'\n    case 86238:                     // 'rename' 'json'\n    case 86750:                     // 'rename' 'json-item'\n    case 87262:                     // 'rename' 'jsoniq'\n    case 88798:                     // 'rename' 'last'\n    case 89310:                     // 'rename' 'lax'\n    case 89822:                     // 'rename' 'le'\n    case 90846:                     // 'rename' 'let'\n    case 91870:                     // 'rename' 'loop'\n    case 92894:                     // 'rename' 'lt'\n    case 93918:                     // 'rename' 'mod'\n    case 94430:                     // 'rename' 'modify'\n    case 94942:                     // 'rename' 'module'\n    case 95966:                     // 'rename' 'namespace'\n    case 96478:                     // 'rename' 'namespace-node'\n    case 96990:                     // 'rename' 'ne'\n    case 100062:                    // 'rename' 'nodes'\n    case 101086:                    // 'rename' 'null'\n    case 101598:                    // 'rename' 'object'\n    case 103646:                    // 'rename' 'only'\n    case 104158:                    // 'rename' 'option'\n    case 104670:                    // 'rename' 'or'\n    case 105182:                    // 'rename' 'order'\n    case 105694:                    // 'rename' 'ordered'\n    case 106206:                    // 'rename' 'ordering'\n    case 107742:                    // 'rename' 'parent'\n    case 110814:                    // 'rename' 'preceding'\n    case 111326:                    // 'rename' 'preceding-sibling'\n    case 112862:                    // 'rename' 'processing-instruction'\n    case 113886:                    // 'rename' 'rename'\n    case 114398:                    // 'rename' 'replace'\n    case 114910:                    // 'rename' 'return'\n    case 115422:                    // 'rename' 'returning'\n    case 115934:                    // 'rename' 'revalidation'\n    case 116958:                    // 'rename' 'satisfies'\n    case 117470:                    // 'rename' 'schema'\n    case 117982:                    // 'rename' 'schema-attribute'\n    case 118494:                    // 'rename' 'schema-element'\n    case 119006:                    // 'rename' 'score'\n    case 119518:                    // 'rename' 'select'\n    case 120030:                    // 'rename' 'self'\n    case 122590:                    // 'rename' 'sliding'\n    case 123102:                    // 'rename' 'some'\n    case 123614:                    // 'rename' 'stable'\n    case 124126:                    // 'rename' 'start'\n    case 125662:                    // 'rename' 'strict'\n    case 126686:                    // 'rename' 'structured-item'\n    case 127198:                    // 'rename' 'switch'\n    case 127710:                    // 'rename' 'text'\n    case 129758:                    // 'rename' 'to'\n    case 130270:                    // 'rename' 'treat'\n    case 130782:                    // 'rename' 'true'\n    case 131294:                    // 'rename' 'try'\n    case 131806:                    // 'rename' 'tumbling'\n    case 132318:                    // 'rename' 'type'\n    case 132830:                    // 'rename' 'typeswitch'\n    case 133342:                    // 'rename' 'union'\n    case 134366:                    // 'rename' 'unordered'\n    case 134878:                    // 'rename' 'updating'\n    case 136414:                    // 'rename' 'validate'\n    case 136926:                    // 'rename' 'value'\n    case 137438:                    // 'rename' 'variable'\n    case 137950:                    // 'rename' 'version'\n    case 139486:                    // 'rename' 'where'\n    case 139998:                    // 'rename' 'while'\n    case 141534:                    // 'rename' 'with'\n    case 144094:                    // 'rename' '{'\n    case 145118:                    // 'rename' '{|'\n      parse_JSONRenameExpr();\n      break;\n    case -11:\n      parse_JSONReplaceExpr();\n      break;\n    case -12:\n    case 3150:                      // 'append' EQName^Token\n    case 4174:                      // 'append' IntegerLiteral\n    case 4686:                      // 'append' DecimalLiteral\n    case 5198:                      // 'append' DoubleLiteral\n    case 5710:                      // 'append' StringLiteral\n    case 15950:                     // 'append' '$'\n    case 16462:                     // 'append' '$$'\n    case 16974:                     // 'append' '%'\n    case 18510:                     // 'append' '(#'\n    case 21070:                     // 'append' '+'\n    case 22094:                     // 'append' '-'\n    case 24142:                     // 'append' '/'\n    case 24654:                     // 'append' '//'\n    case 28238:                     // 'append' '<'\n    case 28750:                     // 'append' '<!--'\n    case 30798:                     // 'append' '<?'\n    case 35406:                     // 'append' '['\n    case 36430:                     // 'append' 'after'\n    case 37454:                     // 'append' 'allowing'\n    case 37966:                     // 'append' 'ancestor'\n    case 38478:                     // 'append' 'ancestor-or-self'\n    case 38990:                     // 'append' 'and'\n    case 40014:                     // 'append' 'append'\n    case 40526:                     // 'append' 'array'\n    case 41038:                     // 'append' 'as'\n    case 41550:                     // 'append' 'ascending'\n    case 42062:                     // 'append' 'at'\n    case 42574:                     // 'append' 'attribute'\n    case 43086:                     // 'append' 'base-uri'\n    case 43598:                     // 'append' 'before'\n    case 44110:                     // 'append' 'boundary-space'\n    case 44622:                     // 'append' 'break'\n    case 45646:                     // 'append' 'case'\n    case 46158:                     // 'append' 'cast'\n    case 46670:                     // 'append' 'castable'\n    case 47182:                     // 'append' 'catch'\n    case 48206:                     // 'append' 'child'\n    case 48718:                     // 'append' 'collation'\n    case 49742:                     // 'append' 'comment'\n    case 50254:                     // 'append' 'constraint'\n    case 50766:                     // 'append' 'construction'\n    case 52302:                     // 'append' 'context'\n    case 52814:                     // 'append' 'continue'\n    case 53326:                     // 'append' 'copy'\n    case 53838:                     // 'append' 'copy-namespaces'\n    case 54350:                     // 'append' 'count'\n    case 54862:                     // 'append' 'decimal-format'\n    case 55886:                     // 'append' 'declare'\n    case 56398:                     // 'append' 'default'\n    case 56910:                     // 'append' 'delete'\n    case 57422:                     // 'append' 'descendant'\n    case 57934:                     // 'append' 'descendant-or-self'\n    case 58446:                     // 'append' 'descending'\n    case 61006:                     // 'append' 'div'\n    case 61518:                     // 'append' 'document'\n    case 62030:                     // 'append' 'document-node'\n    case 62542:                     // 'append' 'element'\n    case 63054:                     // 'append' 'else'\n    case 63566:                     // 'append' 'empty'\n    case 64078:                     // 'append' 'empty-sequence'\n    case 64590:                     // 'append' 'encoding'\n    case 65102:                     // 'append' 'end'\n    case 66126:                     // 'append' 'eq'\n    case 66638:                     // 'append' 'every'\n    case 67662:                     // 'append' 'except'\n    case 68174:                     // 'append' 'exit'\n    case 68686:                     // 'append' 'external'\n    case 69198:                     // 'append' 'false'\n    case 69710:                     // 'append' 'first'\n    case 70222:                     // 'append' 'following'\n    case 70734:                     // 'append' 'following-sibling'\n    case 71246:                     // 'append' 'for'\n    case 72782:                     // 'append' 'from'\n    case 73294:                     // 'append' 'ft-option'\n    case 75342:                     // 'append' 'function'\n    case 75854:                     // 'append' 'ge'\n    case 76878:                     // 'append' 'group'\n    case 77902:                     // 'append' 'gt'\n    case 78414:                     // 'append' 'idiv'\n    case 78926:                     // 'append' 'if'\n    case 79438:                     // 'append' 'import'\n    case 79950:                     // 'append' 'in'\n    case 80462:                     // 'append' 'index'\n    case 82510:                     // 'append' 'insert'\n    case 83022:                     // 'append' 'instance'\n    case 83534:                     // 'append' 'integrity'\n    case 84046:                     // 'append' 'intersect'\n    case 84558:                     // 'append' 'into'\n    case 85070:                     // 'append' 'is'\n    case 85582:                     // 'append' 'item'\n    case 86094:                     // 'append' 'json'\n    case 86606:                     // 'append' 'json-item'\n    case 87118:                     // 'append' 'jsoniq'\n    case 88654:                     // 'append' 'last'\n    case 89166:                     // 'append' 'lax'\n    case 89678:                     // 'append' 'le'\n    case 90702:                     // 'append' 'let'\n    case 91726:                     // 'append' 'loop'\n    case 92750:                     // 'append' 'lt'\n    case 93774:                     // 'append' 'mod'\n    case 94286:                     // 'append' 'modify'\n    case 94798:                     // 'append' 'module'\n    case 95822:                     // 'append' 'namespace'\n    case 96334:                     // 'append' 'namespace-node'\n    case 96846:                     // 'append' 'ne'\n    case 99406:                     // 'append' 'node'\n    case 99918:                     // 'append' 'nodes'\n    case 100430:                    // 'append' 'not'\n    case 100942:                    // 'append' 'null'\n    case 101454:                    // 'append' 'object'\n    case 103502:                    // 'append' 'only'\n    case 104014:                    // 'append' 'option'\n    case 104526:                    // 'append' 'or'\n    case 105038:                    // 'append' 'order'\n    case 105550:                    // 'append' 'ordered'\n    case 106062:                    // 'append' 'ordering'\n    case 107598:                    // 'append' 'parent'\n    case 110670:                    // 'append' 'preceding'\n    case 111182:                    // 'append' 'preceding-sibling'\n    case 112718:                    // 'append' 'processing-instruction'\n    case 113742:                    // 'append' 'rename'\n    case 114254:                    // 'append' 'replace'\n    case 114766:                    // 'append' 'return'\n    case 115278:                    // 'append' 'returning'\n    case 115790:                    // 'append' 'revalidation'\n    case 116814:                    // 'append' 'satisfies'\n    case 117326:                    // 'append' 'schema'\n    case 117838:                    // 'append' 'schema-attribute'\n    case 118350:                    // 'append' 'schema-element'\n    case 118862:                    // 'append' 'score'\n    case 119374:                    // 'append' 'select'\n    case 119886:                    // 'append' 'self'\n    case 122446:                    // 'append' 'sliding'\n    case 122958:                    // 'append' 'some'\n    case 123470:                    // 'append' 'stable'\n    case 123982:                    // 'append' 'start'\n    case 125518:                    // 'append' 'strict'\n    case 126542:                    // 'append' 'structured-item'\n    case 127054:                    // 'append' 'switch'\n    case 127566:                    // 'append' 'text'\n    case 129614:                    // 'append' 'to'\n    case 130126:                    // 'append' 'treat'\n    case 130638:                    // 'append' 'true'\n    case 131150:                    // 'append' 'try'\n    case 131662:                    // 'append' 'tumbling'\n    case 132174:                    // 'append' 'type'\n    case 132686:                    // 'append' 'typeswitch'\n    case 133198:                    // 'append' 'union'\n    case 134222:                    // 'append' 'unordered'\n    case 134734:                    // 'append' 'updating'\n    case 136270:                    // 'append' 'validate'\n    case 136782:                    // 'append' 'value'\n    case 137294:                    // 'append' 'variable'\n    case 137806:                    // 'append' 'version'\n    case 139342:                    // 'append' 'where'\n    case 139854:                    // 'append' 'while'\n    case 141390:                    // 'append' 'with'\n    case 143950:                    // 'append' '{'\n    case 144974:                    // 'append' '{|'\n      parse_JSONAppendExpr();\n      break;\n    default:\n      parse_OrExpr();\n    }\n    eventHandler.endNonterminal(\"ExprSimple\", e0);\n  }\n\n  function try_ExprSimple()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(275);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(170);             // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 17998                 // 'append' '('\n     || lk == 18031                 // 'delete' '('\n     || lk == 18081                 // 'insert' '('\n     || lk == 18142                 // 'rename' '('\n     || lk == 99439                 // 'delete' 'node'\n     || lk == 99489                 // 'insert' 'node'\n     || lk == 99550                 // 'rename' 'node'\n     || lk == 99951                 // 'delete' 'nodes'\n     || lk == 100001                // 'insert' 'nodes'\n     || lk == 136927)               // 'replace' 'value'\n    {\n      lk = memoized(10, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_OrExpr();\n          memoize(10, e0A, -2);\n          lk = -13;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_InsertExpr();\n            memoize(10, e0A, -3);\n            lk = -13;\n          }\n          catch (p3A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_DeleteExpr();\n              memoize(10, e0A, -4);\n              lk = -13;\n            }\n            catch (p4A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_RenameExpr();\n                memoize(10, e0A, -5);\n                lk = -13;\n              }\n              catch (p5A)\n              {\n                try\n                {\n                  b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                  b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                  b2 = b2A; e2 = e2A; end = e2A; }}\n                  try_ReplaceExpr();\n                  memoize(10, e0A, -6);\n                  lk = -13;\n                }\n                catch (p6A)\n                {\n                  try\n                  {\n                    b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                    b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                    b2 = b2A; e2 = e2A; end = e2A; }}\n                    try_JSONDeleteExpr();\n                    memoize(10, e0A, -8);\n                    lk = -13;\n                  }\n                  catch (p8A)\n                  {\n                    try\n                    {\n                      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                      b2 = b2A; e2 = e2A; end = e2A; }}\n                      try_JSONInsertExpr();\n                      memoize(10, e0A, -9);\n                      lk = -13;\n                    }\n                    catch (p9A)\n                    {\n                      try\n                      {\n                        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                        b2 = b2A; e2 = e2A; end = e2A; }}\n                        try_JSONRenameExpr();\n                        memoize(10, e0A, -10);\n                        lk = -13;\n                      }\n                      catch (p10A)\n                      {\n                        try\n                        {\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          try_JSONReplaceExpr();\n                          memoize(10, e0A, -11);\n                          lk = -13;\n                        }\n                        catch (p11A)\n                        {\n                          lk = -12;\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          memoize(10, e0A, -12);\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 16002:                     // 'every' '$'\n    case 16112:                     // 'some' '$'\n      try_QuantifiedExpr();\n      break;\n    case -3:\n      try_InsertExpr();\n      break;\n    case -4:\n      try_DeleteExpr();\n      break;\n    case -5:\n      try_RenameExpr();\n      break;\n    case -6:\n    case 99551:                     // 'replace' 'node'\n      try_ReplaceExpr();\n      break;\n    case 15976:                     // 'copy' '$'\n      try_TransformExpr();\n      break;\n    case -8:\n    case 3183:                      // 'delete' EQName^Token\n    case 4207:                      // 'delete' IntegerLiteral\n    case 4719:                      // 'delete' DecimalLiteral\n    case 5231:                      // 'delete' DoubleLiteral\n    case 5743:                      // 'delete' StringLiteral\n    case 15983:                     // 'delete' '$'\n    case 16495:                     // 'delete' '$$'\n    case 17007:                     // 'delete' '%'\n    case 28271:                     // 'delete' '<'\n    case 28783:                     // 'delete' '<!--'\n    case 30831:                     // 'delete' '<?'\n    case 35439:                     // 'delete' '['\n    case 36463:                     // 'delete' 'after'\n    case 37487:                     // 'delete' 'allowing'\n    case 37999:                     // 'delete' 'ancestor'\n    case 38511:                     // 'delete' 'ancestor-or-self'\n    case 39023:                     // 'delete' 'and'\n    case 40047:                     // 'delete' 'append'\n    case 40559:                     // 'delete' 'array'\n    case 41071:                     // 'delete' 'as'\n    case 41583:                     // 'delete' 'ascending'\n    case 42095:                     // 'delete' 'at'\n    case 42607:                     // 'delete' 'attribute'\n    case 43119:                     // 'delete' 'base-uri'\n    case 43631:                     // 'delete' 'before'\n    case 44143:                     // 'delete' 'boundary-space'\n    case 44655:                     // 'delete' 'break'\n    case 45679:                     // 'delete' 'case'\n    case 46191:                     // 'delete' 'cast'\n    case 46703:                     // 'delete' 'castable'\n    case 47215:                     // 'delete' 'catch'\n    case 48239:                     // 'delete' 'child'\n    case 48751:                     // 'delete' 'collation'\n    case 49775:                     // 'delete' 'comment'\n    case 50287:                     // 'delete' 'constraint'\n    case 50799:                     // 'delete' 'construction'\n    case 52335:                     // 'delete' 'context'\n    case 52847:                     // 'delete' 'continue'\n    case 53359:                     // 'delete' 'copy'\n    case 53871:                     // 'delete' 'copy-namespaces'\n    case 54383:                     // 'delete' 'count'\n    case 54895:                     // 'delete' 'decimal-format'\n    case 55919:                     // 'delete' 'declare'\n    case 56431:                     // 'delete' 'default'\n    case 56943:                     // 'delete' 'delete'\n    case 57455:                     // 'delete' 'descendant'\n    case 57967:                     // 'delete' 'descendant-or-self'\n    case 58479:                     // 'delete' 'descending'\n    case 61039:                     // 'delete' 'div'\n    case 61551:                     // 'delete' 'document'\n    case 62063:                     // 'delete' 'document-node'\n    case 62575:                     // 'delete' 'element'\n    case 63087:                     // 'delete' 'else'\n    case 63599:                     // 'delete' 'empty'\n    case 64111:                     // 'delete' 'empty-sequence'\n    case 64623:                     // 'delete' 'encoding'\n    case 65135:                     // 'delete' 'end'\n    case 66159:                     // 'delete' 'eq'\n    case 66671:                     // 'delete' 'every'\n    case 67695:                     // 'delete' 'except'\n    case 68207:                     // 'delete' 'exit'\n    case 68719:                     // 'delete' 'external'\n    case 69231:                     // 'delete' 'false'\n    case 69743:                     // 'delete' 'first'\n    case 70255:                     // 'delete' 'following'\n    case 70767:                     // 'delete' 'following-sibling'\n    case 71279:                     // 'delete' 'for'\n    case 72815:                     // 'delete' 'from'\n    case 73327:                     // 'delete' 'ft-option'\n    case 75375:                     // 'delete' 'function'\n    case 75887:                     // 'delete' 'ge'\n    case 76911:                     // 'delete' 'group'\n    case 77935:                     // 'delete' 'gt'\n    case 78447:                     // 'delete' 'idiv'\n    case 78959:                     // 'delete' 'if'\n    case 79471:                     // 'delete' 'import'\n    case 79983:                     // 'delete' 'in'\n    case 80495:                     // 'delete' 'index'\n    case 82543:                     // 'delete' 'insert'\n    case 83055:                     // 'delete' 'instance'\n    case 83567:                     // 'delete' 'integrity'\n    case 84079:                     // 'delete' 'intersect'\n    case 84591:                     // 'delete' 'into'\n    case 85103:                     // 'delete' 'is'\n    case 85615:                     // 'delete' 'item'\n    case 86127:                     // 'delete' 'json'\n    case 86639:                     // 'delete' 'json-item'\n    case 87151:                     // 'delete' 'jsoniq'\n    case 88687:                     // 'delete' 'last'\n    case 89199:                     // 'delete' 'lax'\n    case 89711:                     // 'delete' 'le'\n    case 90735:                     // 'delete' 'let'\n    case 91759:                     // 'delete' 'loop'\n    case 92783:                     // 'delete' 'lt'\n    case 93807:                     // 'delete' 'mod'\n    case 94319:                     // 'delete' 'modify'\n    case 94831:                     // 'delete' 'module'\n    case 95855:                     // 'delete' 'namespace'\n    case 96367:                     // 'delete' 'namespace-node'\n    case 96879:                     // 'delete' 'ne'\n    case 100975:                    // 'delete' 'null'\n    case 101487:                    // 'delete' 'object'\n    case 103535:                    // 'delete' 'only'\n    case 104047:                    // 'delete' 'option'\n    case 104559:                    // 'delete' 'or'\n    case 105071:                    // 'delete' 'order'\n    case 105583:                    // 'delete' 'ordered'\n    case 106095:                    // 'delete' 'ordering'\n    case 107631:                    // 'delete' 'parent'\n    case 110703:                    // 'delete' 'preceding'\n    case 111215:                    // 'delete' 'preceding-sibling'\n    case 112751:                    // 'delete' 'processing-instruction'\n    case 113775:                    // 'delete' 'rename'\n    case 114287:                    // 'delete' 'replace'\n    case 114799:                    // 'delete' 'return'\n    case 115311:                    // 'delete' 'returning'\n    case 115823:                    // 'delete' 'revalidation'\n    case 116847:                    // 'delete' 'satisfies'\n    case 117359:                    // 'delete' 'schema'\n    case 117871:                    // 'delete' 'schema-attribute'\n    case 118383:                    // 'delete' 'schema-element'\n    case 118895:                    // 'delete' 'score'\n    case 119407:                    // 'delete' 'select'\n    case 119919:                    // 'delete' 'self'\n    case 122479:                    // 'delete' 'sliding'\n    case 122991:                    // 'delete' 'some'\n    case 123503:                    // 'delete' 'stable'\n    case 124015:                    // 'delete' 'start'\n    case 125551:                    // 'delete' 'strict'\n    case 126575:                    // 'delete' 'structured-item'\n    case 127087:                    // 'delete' 'switch'\n    case 127599:                    // 'delete' 'text'\n    case 129647:                    // 'delete' 'to'\n    case 130159:                    // 'delete' 'treat'\n    case 130671:                    // 'delete' 'true'\n    case 131183:                    // 'delete' 'try'\n    case 131695:                    // 'delete' 'tumbling'\n    case 132207:                    // 'delete' 'type'\n    case 132719:                    // 'delete' 'typeswitch'\n    case 133231:                    // 'delete' 'union'\n    case 134255:                    // 'delete' 'unordered'\n    case 134767:                    // 'delete' 'updating'\n    case 136303:                    // 'delete' 'validate'\n    case 136815:                    // 'delete' 'value'\n    case 137327:                    // 'delete' 'variable'\n    case 137839:                    // 'delete' 'version'\n    case 139375:                    // 'delete' 'where'\n    case 139887:                    // 'delete' 'while'\n    case 141423:                    // 'delete' 'with'\n    case 143983:                    // 'delete' '{'\n    case 145007:                    // 'delete' '{|'\n      try_JSONDeleteExpr();\n      break;\n    case -9:\n    case 3233:                      // 'insert' EQName^Token\n    case 4257:                      // 'insert' IntegerLiteral\n    case 4769:                      // 'insert' DecimalLiteral\n    case 5281:                      // 'insert' DoubleLiteral\n    case 5793:                      // 'insert' StringLiteral\n    case 9889:                      // 'insert' NCName^Token\n    case 16033:                     // 'insert' '$'\n    case 16545:                     // 'insert' '$$'\n    case 17057:                     // 'insert' '%'\n    case 18593:                     // 'insert' '(#'\n    case 21153:                     // 'insert' '+'\n    case 22177:                     // 'insert' '-'\n    case 24225:                     // 'insert' '/'\n    case 24737:                     // 'insert' '//'\n    case 28321:                     // 'insert' '<'\n    case 28833:                     // 'insert' '<!--'\n    case 30881:                     // 'insert' '<?'\n    case 35489:                     // 'insert' '['\n    case 36513:                     // 'insert' 'after'\n    case 37537:                     // 'insert' 'allowing'\n    case 38049:                     // 'insert' 'ancestor'\n    case 38561:                     // 'insert' 'ancestor-or-self'\n    case 39073:                     // 'insert' 'and'\n    case 40097:                     // 'insert' 'append'\n    case 40609:                     // 'insert' 'array'\n    case 41121:                     // 'insert' 'as'\n    case 41633:                     // 'insert' 'ascending'\n    case 42145:                     // 'insert' 'at'\n    case 42657:                     // 'insert' 'attribute'\n    case 43169:                     // 'insert' 'base-uri'\n    case 43681:                     // 'insert' 'before'\n    case 44193:                     // 'insert' 'boundary-space'\n    case 44705:                     // 'insert' 'break'\n    case 45729:                     // 'insert' 'case'\n    case 46241:                     // 'insert' 'cast'\n    case 46753:                     // 'insert' 'castable'\n    case 47265:                     // 'insert' 'catch'\n    case 48289:                     // 'insert' 'child'\n    case 48801:                     // 'insert' 'collation'\n    case 49825:                     // 'insert' 'comment'\n    case 50337:                     // 'insert' 'constraint'\n    case 50849:                     // 'insert' 'construction'\n    case 52385:                     // 'insert' 'context'\n    case 52897:                     // 'insert' 'continue'\n    case 53409:                     // 'insert' 'copy'\n    case 53921:                     // 'insert' 'copy-namespaces'\n    case 54433:                     // 'insert' 'count'\n    case 54945:                     // 'insert' 'decimal-format'\n    case 55969:                     // 'insert' 'declare'\n    case 56481:                     // 'insert' 'default'\n    case 56993:                     // 'insert' 'delete'\n    case 57505:                     // 'insert' 'descendant'\n    case 58017:                     // 'insert' 'descendant-or-self'\n    case 58529:                     // 'insert' 'descending'\n    case 61089:                     // 'insert' 'div'\n    case 61601:                     // 'insert' 'document'\n    case 62113:                     // 'insert' 'document-node'\n    case 62625:                     // 'insert' 'element'\n    case 63137:                     // 'insert' 'else'\n    case 63649:                     // 'insert' 'empty'\n    case 64161:                     // 'insert' 'empty-sequence'\n    case 64673:                     // 'insert' 'encoding'\n    case 65185:                     // 'insert' 'end'\n    case 66209:                     // 'insert' 'eq'\n    case 66721:                     // 'insert' 'every'\n    case 67745:                     // 'insert' 'except'\n    case 68257:                     // 'insert' 'exit'\n    case 68769:                     // 'insert' 'external'\n    case 69281:                     // 'insert' 'false'\n    case 69793:                     // 'insert' 'first'\n    case 70305:                     // 'insert' 'following'\n    case 70817:                     // 'insert' 'following-sibling'\n    case 71329:                     // 'insert' 'for'\n    case 72865:                     // 'insert' 'from'\n    case 73377:                     // 'insert' 'ft-option'\n    case 75425:                     // 'insert' 'function'\n    case 75937:                     // 'insert' 'ge'\n    case 76961:                     // 'insert' 'group'\n    case 77985:                     // 'insert' 'gt'\n    case 78497:                     // 'insert' 'idiv'\n    case 79009:                     // 'insert' 'if'\n    case 79521:                     // 'insert' 'import'\n    case 80033:                     // 'insert' 'in'\n    case 80545:                     // 'insert' 'index'\n    case 82593:                     // 'insert' 'insert'\n    case 83105:                     // 'insert' 'instance'\n    case 83617:                     // 'insert' 'integrity'\n    case 84129:                     // 'insert' 'intersect'\n    case 84641:                     // 'insert' 'into'\n    case 85153:                     // 'insert' 'is'\n    case 85665:                     // 'insert' 'item'\n    case 86177:                     // 'insert' 'json'\n    case 86689:                     // 'insert' 'json-item'\n    case 87201:                     // 'insert' 'jsoniq'\n    case 88737:                     // 'insert' 'last'\n    case 89249:                     // 'insert' 'lax'\n    case 89761:                     // 'insert' 'le'\n    case 90785:                     // 'insert' 'let'\n    case 91809:                     // 'insert' 'loop'\n    case 92833:                     // 'insert' 'lt'\n    case 93857:                     // 'insert' 'mod'\n    case 94369:                     // 'insert' 'modify'\n    case 94881:                     // 'insert' 'module'\n    case 95905:                     // 'insert' 'namespace'\n    case 96417:                     // 'insert' 'namespace-node'\n    case 96929:                     // 'insert' 'ne'\n    case 100513:                    // 'insert' 'not'\n    case 101025:                    // 'insert' 'null'\n    case 101537:                    // 'insert' 'object'\n    case 103585:                    // 'insert' 'only'\n    case 104097:                    // 'insert' 'option'\n    case 104609:                    // 'insert' 'or'\n    case 105121:                    // 'insert' 'order'\n    case 105633:                    // 'insert' 'ordered'\n    case 106145:                    // 'insert' 'ordering'\n    case 107681:                    // 'insert' 'parent'\n    case 110753:                    // 'insert' 'preceding'\n    case 111265:                    // 'insert' 'preceding-sibling'\n    case 112801:                    // 'insert' 'processing-instruction'\n    case 113825:                    // 'insert' 'rename'\n    case 114337:                    // 'insert' 'replace'\n    case 114849:                    // 'insert' 'return'\n    case 115361:                    // 'insert' 'returning'\n    case 115873:                    // 'insert' 'revalidation'\n    case 116897:                    // 'insert' 'satisfies'\n    case 117409:                    // 'insert' 'schema'\n    case 117921:                    // 'insert' 'schema-attribute'\n    case 118433:                    // 'insert' 'schema-element'\n    case 118945:                    // 'insert' 'score'\n    case 119457:                    // 'insert' 'select'\n    case 119969:                    // 'insert' 'self'\n    case 122529:                    // 'insert' 'sliding'\n    case 123041:                    // 'insert' 'some'\n    case 123553:                    // 'insert' 'stable'\n    case 124065:                    // 'insert' 'start'\n    case 125601:                    // 'insert' 'strict'\n    case 126625:                    // 'insert' 'structured-item'\n    case 127137:                    // 'insert' 'switch'\n    case 127649:                    // 'insert' 'text'\n    case 129697:                    // 'insert' 'to'\n    case 130209:                    // 'insert' 'treat'\n    case 130721:                    // 'insert' 'true'\n    case 131233:                    // 'insert' 'try'\n    case 131745:                    // 'insert' 'tumbling'\n    case 132257:                    // 'insert' 'type'\n    case 132769:                    // 'insert' 'typeswitch'\n    case 133281:                    // 'insert' 'union'\n    case 134305:                    // 'insert' 'unordered'\n    case 134817:                    // 'insert' 'updating'\n    case 136353:                    // 'insert' 'validate'\n    case 136865:                    // 'insert' 'value'\n    case 137377:                    // 'insert' 'variable'\n    case 137889:                    // 'insert' 'version'\n    case 139425:                    // 'insert' 'where'\n    case 139937:                    // 'insert' 'while'\n    case 141473:                    // 'insert' 'with'\n    case 144033:                    // 'insert' '{'\n    case 145057:                    // 'insert' '{|'\n      try_JSONInsertExpr();\n      break;\n    case -10:\n    case 3294:                      // 'rename' EQName^Token\n    case 4318:                      // 'rename' IntegerLiteral\n    case 4830:                      // 'rename' DecimalLiteral\n    case 5342:                      // 'rename' DoubleLiteral\n    case 5854:                      // 'rename' StringLiteral\n    case 16094:                     // 'rename' '$'\n    case 16606:                     // 'rename' '$$'\n    case 17118:                     // 'rename' '%'\n    case 28382:                     // 'rename' '<'\n    case 28894:                     // 'rename' '<!--'\n    case 30942:                     // 'rename' '<?'\n    case 35550:                     // 'rename' '['\n    case 36574:                     // 'rename' 'after'\n    case 37598:                     // 'rename' 'allowing'\n    case 38110:                     // 'rename' 'ancestor'\n    case 38622:                     // 'rename' 'ancestor-or-self'\n    case 39134:                     // 'rename' 'and'\n    case 40158:                     // 'rename' 'append'\n    case 40670:                     // 'rename' 'array'\n    case 41182:                     // 'rename' 'as'\n    case 41694:                     // 'rename' 'ascending'\n    case 42206:                     // 'rename' 'at'\n    case 42718:                     // 'rename' 'attribute'\n    case 43230:                     // 'rename' 'base-uri'\n    case 43742:                     // 'rename' 'before'\n    case 44254:                     // 'rename' 'boundary-space'\n    case 44766:                     // 'rename' 'break'\n    case 45790:                     // 'rename' 'case'\n    case 46302:                     // 'rename' 'cast'\n    case 46814:                     // 'rename' 'castable'\n    case 47326:                     // 'rename' 'catch'\n    case 48350:                     // 'rename' 'child'\n    case 48862:                     // 'rename' 'collation'\n    case 49886:                     // 'rename' 'comment'\n    case 50398:                     // 'rename' 'constraint'\n    case 50910:                     // 'rename' 'construction'\n    case 52446:                     // 'rename' 'context'\n    case 52958:                     // 'rename' 'continue'\n    case 53470:                     // 'rename' 'copy'\n    case 53982:                     // 'rename' 'copy-namespaces'\n    case 54494:                     // 'rename' 'count'\n    case 55006:                     // 'rename' 'decimal-format'\n    case 56030:                     // 'rename' 'declare'\n    case 56542:                     // 'rename' 'default'\n    case 57054:                     // 'rename' 'delete'\n    case 57566:                     // 'rename' 'descendant'\n    case 58078:                     // 'rename' 'descendant-or-self'\n    case 58590:                     // 'rename' 'descending'\n    case 61150:                     // 'rename' 'div'\n    case 61662:                     // 'rename' 'document'\n    case 62174:                     // 'rename' 'document-node'\n    case 62686:                     // 'rename' 'element'\n    case 63198:                     // 'rename' 'else'\n    case 63710:                     // 'rename' 'empty'\n    case 64222:                     // 'rename' 'empty-sequence'\n    case 64734:                     // 'rename' 'encoding'\n    case 65246:                     // 'rename' 'end'\n    case 66270:                     // 'rename' 'eq'\n    case 66782:                     // 'rename' 'every'\n    case 67806:                     // 'rename' 'except'\n    case 68318:                     // 'rename' 'exit'\n    case 68830:                     // 'rename' 'external'\n    case 69342:                     // 'rename' 'false'\n    case 69854:                     // 'rename' 'first'\n    case 70366:                     // 'rename' 'following'\n    case 70878:                     // 'rename' 'following-sibling'\n    case 71390:                     // 'rename' 'for'\n    case 72926:                     // 'rename' 'from'\n    case 73438:                     // 'rename' 'ft-option'\n    case 75486:                     // 'rename' 'function'\n    case 75998:                     // 'rename' 'ge'\n    case 77022:                     // 'rename' 'group'\n    case 78046:                     // 'rename' 'gt'\n    case 78558:                     // 'rename' 'idiv'\n    case 79070:                     // 'rename' 'if'\n    case 79582:                     // 'rename' 'import'\n    case 80094:                     // 'rename' 'in'\n    case 80606:                     // 'rename' 'index'\n    case 82654:                     // 'rename' 'insert'\n    case 83166:                     // 'rename' 'instance'\n    case 83678:                     // 'rename' 'integrity'\n    case 84190:                     // 'rename' 'intersect'\n    case 84702:                     // 'rename' 'into'\n    case 85214:                     // 'rename' 'is'\n    case 85726:                     // 'rename' 'item'\n    case 86238:                     // 'rename' 'json'\n    case 86750:                     // 'rename' 'json-item'\n    case 87262:                     // 'rename' 'jsoniq'\n    case 88798:                     // 'rename' 'last'\n    case 89310:                     // 'rename' 'lax'\n    case 89822:                     // 'rename' 'le'\n    case 90846:                     // 'rename' 'let'\n    case 91870:                     // 'rename' 'loop'\n    case 92894:                     // 'rename' 'lt'\n    case 93918:                     // 'rename' 'mod'\n    case 94430:                     // 'rename' 'modify'\n    case 94942:                     // 'rename' 'module'\n    case 95966:                     // 'rename' 'namespace'\n    case 96478:                     // 'rename' 'namespace-node'\n    case 96990:                     // 'rename' 'ne'\n    case 100062:                    // 'rename' 'nodes'\n    case 101086:                    // 'rename' 'null'\n    case 101598:                    // 'rename' 'object'\n    case 103646:                    // 'rename' 'only'\n    case 104158:                    // 'rename' 'option'\n    case 104670:                    // 'rename' 'or'\n    case 105182:                    // 'rename' 'order'\n    case 105694:                    // 'rename' 'ordered'\n    case 106206:                    // 'rename' 'ordering'\n    case 107742:                    // 'rename' 'parent'\n    case 110814:                    // 'rename' 'preceding'\n    case 111326:                    // 'rename' 'preceding-sibling'\n    case 112862:                    // 'rename' 'processing-instruction'\n    case 113886:                    // 'rename' 'rename'\n    case 114398:                    // 'rename' 'replace'\n    case 114910:                    // 'rename' 'return'\n    case 115422:                    // 'rename' 'returning'\n    case 115934:                    // 'rename' 'revalidation'\n    case 116958:                    // 'rename' 'satisfies'\n    case 117470:                    // 'rename' 'schema'\n    case 117982:                    // 'rename' 'schema-attribute'\n    case 118494:                    // 'rename' 'schema-element'\n    case 119006:                    // 'rename' 'score'\n    case 119518:                    // 'rename' 'select'\n    case 120030:                    // 'rename' 'self'\n    case 122590:                    // 'rename' 'sliding'\n    case 123102:                    // 'rename' 'some'\n    case 123614:                    // 'rename' 'stable'\n    case 124126:                    // 'rename' 'start'\n    case 125662:                    // 'rename' 'strict'\n    case 126686:                    // 'rename' 'structured-item'\n    case 127198:                    // 'rename' 'switch'\n    case 127710:                    // 'rename' 'text'\n    case 129758:                    // 'rename' 'to'\n    case 130270:                    // 'rename' 'treat'\n    case 130782:                    // 'rename' 'true'\n    case 131294:                    // 'rename' 'try'\n    case 131806:                    // 'rename' 'tumbling'\n    case 132318:                    // 'rename' 'type'\n    case 132830:                    // 'rename' 'typeswitch'\n    case 133342:                    // 'rename' 'union'\n    case 134366:                    // 'rename' 'unordered'\n    case 134878:                    // 'rename' 'updating'\n    case 136414:                    // 'rename' 'validate'\n    case 136926:                    // 'rename' 'value'\n    case 137438:                    // 'rename' 'variable'\n    case 137950:                    // 'rename' 'version'\n    case 139486:                    // 'rename' 'where'\n    case 139998:                    // 'rename' 'while'\n    case 141534:                    // 'rename' 'with'\n    case 144094:                    // 'rename' '{'\n    case 145118:                    // 'rename' '{|'\n      try_JSONRenameExpr();\n      break;\n    case -11:\n      try_JSONReplaceExpr();\n      break;\n    case -12:\n    case 3150:                      // 'append' EQName^Token\n    case 4174:                      // 'append' IntegerLiteral\n    case 4686:                      // 'append' DecimalLiteral\n    case 5198:                      // 'append' DoubleLiteral\n    case 5710:                      // 'append' StringLiteral\n    case 15950:                     // 'append' '$'\n    case 16462:                     // 'append' '$$'\n    case 16974:                     // 'append' '%'\n    case 18510:                     // 'append' '(#'\n    case 21070:                     // 'append' '+'\n    case 22094:                     // 'append' '-'\n    case 24142:                     // 'append' '/'\n    case 24654:                     // 'append' '//'\n    case 28238:                     // 'append' '<'\n    case 28750:                     // 'append' '<!--'\n    case 30798:                     // 'append' '<?'\n    case 35406:                     // 'append' '['\n    case 36430:                     // 'append' 'after'\n    case 37454:                     // 'append' 'allowing'\n    case 37966:                     // 'append' 'ancestor'\n    case 38478:                     // 'append' 'ancestor-or-self'\n    case 38990:                     // 'append' 'and'\n    case 40014:                     // 'append' 'append'\n    case 40526:                     // 'append' 'array'\n    case 41038:                     // 'append' 'as'\n    case 41550:                     // 'append' 'ascending'\n    case 42062:                     // 'append' 'at'\n    case 42574:                     // 'append' 'attribute'\n    case 43086:                     // 'append' 'base-uri'\n    case 43598:                     // 'append' 'before'\n    case 44110:                     // 'append' 'boundary-space'\n    case 44622:                     // 'append' 'break'\n    case 45646:                     // 'append' 'case'\n    case 46158:                     // 'append' 'cast'\n    case 46670:                     // 'append' 'castable'\n    case 47182:                     // 'append' 'catch'\n    case 48206:                     // 'append' 'child'\n    case 48718:                     // 'append' 'collation'\n    case 49742:                     // 'append' 'comment'\n    case 50254:                     // 'append' 'constraint'\n    case 50766:                     // 'append' 'construction'\n    case 52302:                     // 'append' 'context'\n    case 52814:                     // 'append' 'continue'\n    case 53326:                     // 'append' 'copy'\n    case 53838:                     // 'append' 'copy-namespaces'\n    case 54350:                     // 'append' 'count'\n    case 54862:                     // 'append' 'decimal-format'\n    case 55886:                     // 'append' 'declare'\n    case 56398:                     // 'append' 'default'\n    case 56910:                     // 'append' 'delete'\n    case 57422:                     // 'append' 'descendant'\n    case 57934:                     // 'append' 'descendant-or-self'\n    case 58446:                     // 'append' 'descending'\n    case 61006:                     // 'append' 'div'\n    case 61518:                     // 'append' 'document'\n    case 62030:                     // 'append' 'document-node'\n    case 62542:                     // 'append' 'element'\n    case 63054:                     // 'append' 'else'\n    case 63566:                     // 'append' 'empty'\n    case 64078:                     // 'append' 'empty-sequence'\n    case 64590:                     // 'append' 'encoding'\n    case 65102:                     // 'append' 'end'\n    case 66126:                     // 'append' 'eq'\n    case 66638:                     // 'append' 'every'\n    case 67662:                     // 'append' 'except'\n    case 68174:                     // 'append' 'exit'\n    case 68686:                     // 'append' 'external'\n    case 69198:                     // 'append' 'false'\n    case 69710:                     // 'append' 'first'\n    case 70222:                     // 'append' 'following'\n    case 70734:                     // 'append' 'following-sibling'\n    case 71246:                     // 'append' 'for'\n    case 72782:                     // 'append' 'from'\n    case 73294:                     // 'append' 'ft-option'\n    case 75342:                     // 'append' 'function'\n    case 75854:                     // 'append' 'ge'\n    case 76878:                     // 'append' 'group'\n    case 77902:                     // 'append' 'gt'\n    case 78414:                     // 'append' 'idiv'\n    case 78926:                     // 'append' 'if'\n    case 79438:                     // 'append' 'import'\n    case 79950:                     // 'append' 'in'\n    case 80462:                     // 'append' 'index'\n    case 82510:                     // 'append' 'insert'\n    case 83022:                     // 'append' 'instance'\n    case 83534:                     // 'append' 'integrity'\n    case 84046:                     // 'append' 'intersect'\n    case 84558:                     // 'append' 'into'\n    case 85070:                     // 'append' 'is'\n    case 85582:                     // 'append' 'item'\n    case 86094:                     // 'append' 'json'\n    case 86606:                     // 'append' 'json-item'\n    case 87118:                     // 'append' 'jsoniq'\n    case 88654:                     // 'append' 'last'\n    case 89166:                     // 'append' 'lax'\n    case 89678:                     // 'append' 'le'\n    case 90702:                     // 'append' 'let'\n    case 91726:                     // 'append' 'loop'\n    case 92750:                     // 'append' 'lt'\n    case 93774:                     // 'append' 'mod'\n    case 94286:                     // 'append' 'modify'\n    case 94798:                     // 'append' 'module'\n    case 95822:                     // 'append' 'namespace'\n    case 96334:                     // 'append' 'namespace-node'\n    case 96846:                     // 'append' 'ne'\n    case 99406:                     // 'append' 'node'\n    case 99918:                     // 'append' 'nodes'\n    case 100430:                    // 'append' 'not'\n    case 100942:                    // 'append' 'null'\n    case 101454:                    // 'append' 'object'\n    case 103502:                    // 'append' 'only'\n    case 104014:                    // 'append' 'option'\n    case 104526:                    // 'append' 'or'\n    case 105038:                    // 'append' 'order'\n    case 105550:                    // 'append' 'ordered'\n    case 106062:                    // 'append' 'ordering'\n    case 107598:                    // 'append' 'parent'\n    case 110670:                    // 'append' 'preceding'\n    case 111182:                    // 'append' 'preceding-sibling'\n    case 112718:                    // 'append' 'processing-instruction'\n    case 113742:                    // 'append' 'rename'\n    case 114254:                    // 'append' 'replace'\n    case 114766:                    // 'append' 'return'\n    case 115278:                    // 'append' 'returning'\n    case 115790:                    // 'append' 'revalidation'\n    case 116814:                    // 'append' 'satisfies'\n    case 117326:                    // 'append' 'schema'\n    case 117838:                    // 'append' 'schema-attribute'\n    case 118350:                    // 'append' 'schema-element'\n    case 118862:                    // 'append' 'score'\n    case 119374:                    // 'append' 'select'\n    case 119886:                    // 'append' 'self'\n    case 122446:                    // 'append' 'sliding'\n    case 122958:                    // 'append' 'some'\n    case 123470:                    // 'append' 'stable'\n    case 123982:                    // 'append' 'start'\n    case 125518:                    // 'append' 'strict'\n    case 126542:                    // 'append' 'structured-item'\n    case 127054:                    // 'append' 'switch'\n    case 127566:                    // 'append' 'text'\n    case 129614:                    // 'append' 'to'\n    case 130126:                    // 'append' 'treat'\n    case 130638:                    // 'append' 'true'\n    case 131150:                    // 'append' 'try'\n    case 131662:                    // 'append' 'tumbling'\n    case 132174:                    // 'append' 'type'\n    case 132686:                    // 'append' 'typeswitch'\n    case 133198:                    // 'append' 'union'\n    case 134222:                    // 'append' 'unordered'\n    case 134734:                    // 'append' 'updating'\n    case 136270:                    // 'append' 'validate'\n    case 136782:                    // 'append' 'value'\n    case 137294:                    // 'append' 'variable'\n    case 137806:                    // 'append' 'version'\n    case 139342:                    // 'append' 'where'\n    case 139854:                    // 'append' 'while'\n    case 141390:                    // 'append' 'with'\n    case 143950:                    // 'append' '{'\n    case 144974:                    // 'append' '{|'\n      try_JSONAppendExpr();\n      break;\n    case -13:\n      break;\n    default:\n      try_OrExpr();\n    }\n  }\n\n  function parse_JSONDeleteExpr()\n  {\n    eventHandler.startNonterminal(\"JSONDeleteExpr\", e0);\n    shift(111);                     // 'delete'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(11, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(11, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    eventHandler.endNonterminal(\"JSONDeleteExpr\", e0);\n  }\n\n  function try_JSONDeleteExpr()\n  {\n    shiftT(111);                    // 'delete'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(11, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(11, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(11, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n  }\n\n  function parse_JSONInsertExpr()\n  {\n    eventHandler.startNonterminal(\"JSONInsertExpr\", e0);\n    switch (l1)\n    {\n    case 161:                       // 'insert'\n      lookahead2W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 9889)                 // 'insert' NCName^Token\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(161);              // 'insert'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          switch (l1)\n          {\n          case 168:                 // 'json'\n            lookahead2W(268);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 18088)          // 'json' '('\n          {\n            lk = memoized(13, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(168);        // 'json'\n                memoize(13, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(13, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1\n           || lk == 3240            // 'json' EQName^Token\n           || lk == 4264            // 'json' IntegerLiteral\n           || lk == 4776            // 'json' DecimalLiteral\n           || lk == 5288            // 'json' DoubleLiteral\n           || lk == 5800            // 'json' StringLiteral\n           || lk == 16040           // 'json' '$'\n           || lk == 16552           // 'json' '$$'\n           || lk == 17064           // 'json' '%'\n           || lk == 18600           // 'json' '(#'\n           || lk == 21160           // 'json' '+'\n           || lk == 22184           // 'json' '-'\n           || lk == 24232           // 'json' '/'\n           || lk == 24744           // 'json' '//'\n           || lk == 28328           // 'json' '<'\n           || lk == 28840           // 'json' '<!--'\n           || lk == 30888           // 'json' '<?'\n           || lk == 35496           // 'json' '['\n           || lk == 36520           // 'json' 'after'\n           || lk == 37544           // 'json' 'allowing'\n           || lk == 38056           // 'json' 'ancestor'\n           || lk == 38568           // 'json' 'ancestor-or-self'\n           || lk == 39080           // 'json' 'and'\n           || lk == 40104           // 'json' 'append'\n           || lk == 40616           // 'json' 'array'\n           || lk == 41128           // 'json' 'as'\n           || lk == 41640           // 'json' 'ascending'\n           || lk == 42152           // 'json' 'at'\n           || lk == 42664           // 'json' 'attribute'\n           || lk == 43176           // 'json' 'base-uri'\n           || lk == 43688           // 'json' 'before'\n           || lk == 44200           // 'json' 'boundary-space'\n           || lk == 44712           // 'json' 'break'\n           || lk == 45736           // 'json' 'case'\n           || lk == 46248           // 'json' 'cast'\n           || lk == 46760           // 'json' 'castable'\n           || lk == 47272           // 'json' 'catch'\n           || lk == 48296           // 'json' 'child'\n           || lk == 48808           // 'json' 'collation'\n           || lk == 49832           // 'json' 'comment'\n           || lk == 50344           // 'json' 'constraint'\n           || lk == 50856           // 'json' 'construction'\n           || lk == 52392           // 'json' 'context'\n           || lk == 52904           // 'json' 'continue'\n           || lk == 53416           // 'json' 'copy'\n           || lk == 53928           // 'json' 'copy-namespaces'\n           || lk == 54440           // 'json' 'count'\n           || lk == 54952           // 'json' 'decimal-format'\n           || lk == 55976           // 'json' 'declare'\n           || lk == 56488           // 'json' 'default'\n           || lk == 57000           // 'json' 'delete'\n           || lk == 57512           // 'json' 'descendant'\n           || lk == 58024           // 'json' 'descendant-or-self'\n           || lk == 58536           // 'json' 'descending'\n           || lk == 61096           // 'json' 'div'\n           || lk == 61608           // 'json' 'document'\n           || lk == 62120           // 'json' 'document-node'\n           || lk == 62632           // 'json' 'element'\n           || lk == 63144           // 'json' 'else'\n           || lk == 63656           // 'json' 'empty'\n           || lk == 64168           // 'json' 'empty-sequence'\n           || lk == 64680           // 'json' 'encoding'\n           || lk == 65192           // 'json' 'end'\n           || lk == 66216           // 'json' 'eq'\n           || lk == 66728           // 'json' 'every'\n           || lk == 67752           // 'json' 'except'\n           || lk == 68264           // 'json' 'exit'\n           || lk == 68776           // 'json' 'external'\n           || lk == 69288           // 'json' 'false'\n           || lk == 69800           // 'json' 'first'\n           || lk == 70312           // 'json' 'following'\n           || lk == 70824           // 'json' 'following-sibling'\n           || lk == 71336           // 'json' 'for'\n           || lk == 72872           // 'json' 'from'\n           || lk == 73384           // 'json' 'ft-option'\n           || lk == 75432           // 'json' 'function'\n           || lk == 75944           // 'json' 'ge'\n           || lk == 76968           // 'json' 'group'\n           || lk == 77992           // 'json' 'gt'\n           || lk == 78504           // 'json' 'idiv'\n           || lk == 79016           // 'json' 'if'\n           || lk == 79528           // 'json' 'import'\n           || lk == 80040           // 'json' 'in'\n           || lk == 80552           // 'json' 'index'\n           || lk == 82600           // 'json' 'insert'\n           || lk == 83112           // 'json' 'instance'\n           || lk == 83624           // 'json' 'integrity'\n           || lk == 84136           // 'json' 'intersect'\n           || lk == 84648           // 'json' 'into'\n           || lk == 85160           // 'json' 'is'\n           || lk == 85672           // 'json' 'item'\n           || lk == 86184           // 'json' 'json'\n           || lk == 86696           // 'json' 'json-item'\n           || lk == 87208           // 'json' 'jsoniq'\n           || lk == 88744           // 'json' 'last'\n           || lk == 89256           // 'json' 'lax'\n           || lk == 89768           // 'json' 'le'\n           || lk == 90792           // 'json' 'let'\n           || lk == 91816           // 'json' 'loop'\n           || lk == 92840           // 'json' 'lt'\n           || lk == 93864           // 'json' 'mod'\n           || lk == 94376           // 'json' 'modify'\n           || lk == 94888           // 'json' 'module'\n           || lk == 95912           // 'json' 'namespace'\n           || lk == 96424           // 'json' 'namespace-node'\n           || lk == 96936           // 'json' 'ne'\n           || lk == 99496           // 'json' 'node'\n           || lk == 100008          // 'json' 'nodes'\n           || lk == 100520          // 'json' 'not'\n           || lk == 101032          // 'json' 'null'\n           || lk == 101544          // 'json' 'object'\n           || lk == 103592          // 'json' 'only'\n           || lk == 104104          // 'json' 'option'\n           || lk == 104616          // 'json' 'or'\n           || lk == 105128          // 'json' 'order'\n           || lk == 105640          // 'json' 'ordered'\n           || lk == 106152          // 'json' 'ordering'\n           || lk == 107688          // 'json' 'parent'\n           || lk == 110760          // 'json' 'preceding'\n           || lk == 111272          // 'json' 'preceding-sibling'\n           || lk == 112808          // 'json' 'processing-instruction'\n           || lk == 113832          // 'json' 'rename'\n           || lk == 114344          // 'json' 'replace'\n           || lk == 114856          // 'json' 'return'\n           || lk == 115368          // 'json' 'returning'\n           || lk == 115880          // 'json' 'revalidation'\n           || lk == 116904          // 'json' 'satisfies'\n           || lk == 117416          // 'json' 'schema'\n           || lk == 117928          // 'json' 'schema-attribute'\n           || lk == 118440          // 'json' 'schema-element'\n           || lk == 118952          // 'json' 'score'\n           || lk == 119464          // 'json' 'select'\n           || lk == 119976          // 'json' 'self'\n           || lk == 122536          // 'json' 'sliding'\n           || lk == 123048          // 'json' 'some'\n           || lk == 123560          // 'json' 'stable'\n           || lk == 124072          // 'json' 'start'\n           || lk == 125608          // 'json' 'strict'\n           || lk == 126632          // 'json' 'structured-item'\n           || lk == 127144          // 'json' 'switch'\n           || lk == 127656          // 'json' 'text'\n           || lk == 129704          // 'json' 'to'\n           || lk == 130216          // 'json' 'treat'\n           || lk == 130728          // 'json' 'true'\n           || lk == 131240          // 'json' 'try'\n           || lk == 131752          // 'json' 'tumbling'\n           || lk == 132264          // 'json' 'type'\n           || lk == 132776          // 'json' 'typeswitch'\n           || lk == 133288          // 'json' 'union'\n           || lk == 134312          // 'json' 'unordered'\n           || lk == 134824          // 'json' 'updating'\n           || lk == 136360          // 'json' 'validate'\n           || lk == 136872          // 'json' 'value'\n           || lk == 137384          // 'json' 'variable'\n           || lk == 137896          // 'json' 'version'\n           || lk == 139432          // 'json' 'where'\n           || lk == 139944          // 'json' 'while'\n           || lk == 141480          // 'json' 'with'\n           || lk == 144040          // 'json' '{'\n           || lk == 145064)         // 'json' '{|'\n          {\n            shiftT(168);            // 'json'\n          }\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          shiftT(165);              // 'into'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          switch (l1)\n          {\n          case 82:                  // 'at'\n            lookahead2W(72);        // S^WS | '(:' | 'position'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 110162)         // 'at' 'position'\n          {\n            lk = memoized(14, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(82);         // 'at'\n                lookahead1W(72);    // S^WS | '(:' | 'position'\n                shiftT(215);        // 'position'\n                lookahead1W(266);   // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                try_ExprSingle();\n                memoize(14, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(14, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1)\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(12, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(161);                   // 'insert'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(13, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(13, e0, lk);\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shift(168);                 // 'json'\n      }\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n      shift(165);                   // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(72);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 110162)             // 'at' 'position'\n      {\n        lk = memoized(14, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(14, e0, lk);\n        }\n      }\n      if (lk == -1)\n      {\n        shift(82);                  // 'at'\n        lookahead1W(72);            // S^WS | '(:' | 'position'\n        shift(215);                 // 'position'\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      break;\n    default:\n      shift(161);                   // 'insert'\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(281);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(15, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(15, e0, lk);\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 9896                // 'json' NCName^Token\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shift(168);                 // 'json'\n      }\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PairConstructorList();\n      shift(165);                   // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"JSONInsertExpr\", e0);\n  }\n\n  function try_JSONInsertExpr()\n  {\n    switch (l1)\n    {\n    case 161:                       // 'insert'\n      lookahead2W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 9889)                 // 'insert' NCName^Token\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(161);              // 'insert'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          switch (l1)\n          {\n          case 168:                 // 'json'\n            lookahead2W(268);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 18088)          // 'json' '('\n          {\n            lk = memoized(13, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(168);        // 'json'\n                memoize(13, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(13, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1\n           || lk == 3240            // 'json' EQName^Token\n           || lk == 4264            // 'json' IntegerLiteral\n           || lk == 4776            // 'json' DecimalLiteral\n           || lk == 5288            // 'json' DoubleLiteral\n           || lk == 5800            // 'json' StringLiteral\n           || lk == 16040           // 'json' '$'\n           || lk == 16552           // 'json' '$$'\n           || lk == 17064           // 'json' '%'\n           || lk == 18600           // 'json' '(#'\n           || lk == 21160           // 'json' '+'\n           || lk == 22184           // 'json' '-'\n           || lk == 24232           // 'json' '/'\n           || lk == 24744           // 'json' '//'\n           || lk == 28328           // 'json' '<'\n           || lk == 28840           // 'json' '<!--'\n           || lk == 30888           // 'json' '<?'\n           || lk == 35496           // 'json' '['\n           || lk == 36520           // 'json' 'after'\n           || lk == 37544           // 'json' 'allowing'\n           || lk == 38056           // 'json' 'ancestor'\n           || lk == 38568           // 'json' 'ancestor-or-self'\n           || lk == 39080           // 'json' 'and'\n           || lk == 40104           // 'json' 'append'\n           || lk == 40616           // 'json' 'array'\n           || lk == 41128           // 'json' 'as'\n           || lk == 41640           // 'json' 'ascending'\n           || lk == 42152           // 'json' 'at'\n           || lk == 42664           // 'json' 'attribute'\n           || lk == 43176           // 'json' 'base-uri'\n           || lk == 43688           // 'json' 'before'\n           || lk == 44200           // 'json' 'boundary-space'\n           || lk == 44712           // 'json' 'break'\n           || lk == 45736           // 'json' 'case'\n           || lk == 46248           // 'json' 'cast'\n           || lk == 46760           // 'json' 'castable'\n           || lk == 47272           // 'json' 'catch'\n           || lk == 48296           // 'json' 'child'\n           || lk == 48808           // 'json' 'collation'\n           || lk == 49832           // 'json' 'comment'\n           || lk == 50344           // 'json' 'constraint'\n           || lk == 50856           // 'json' 'construction'\n           || lk == 52392           // 'json' 'context'\n           || lk == 52904           // 'json' 'continue'\n           || lk == 53416           // 'json' 'copy'\n           || lk == 53928           // 'json' 'copy-namespaces'\n           || lk == 54440           // 'json' 'count'\n           || lk == 54952           // 'json' 'decimal-format'\n           || lk == 55976           // 'json' 'declare'\n           || lk == 56488           // 'json' 'default'\n           || lk == 57000           // 'json' 'delete'\n           || lk == 57512           // 'json' 'descendant'\n           || lk == 58024           // 'json' 'descendant-or-self'\n           || lk == 58536           // 'json' 'descending'\n           || lk == 61096           // 'json' 'div'\n           || lk == 61608           // 'json' 'document'\n           || lk == 62120           // 'json' 'document-node'\n           || lk == 62632           // 'json' 'element'\n           || lk == 63144           // 'json' 'else'\n           || lk == 63656           // 'json' 'empty'\n           || lk == 64168           // 'json' 'empty-sequence'\n           || lk == 64680           // 'json' 'encoding'\n           || lk == 65192           // 'json' 'end'\n           || lk == 66216           // 'json' 'eq'\n           || lk == 66728           // 'json' 'every'\n           || lk == 67752           // 'json' 'except'\n           || lk == 68264           // 'json' 'exit'\n           || lk == 68776           // 'json' 'external'\n           || lk == 69288           // 'json' 'false'\n           || lk == 69800           // 'json' 'first'\n           || lk == 70312           // 'json' 'following'\n           || lk == 70824           // 'json' 'following-sibling'\n           || lk == 71336           // 'json' 'for'\n           || lk == 72872           // 'json' 'from'\n           || lk == 73384           // 'json' 'ft-option'\n           || lk == 75432           // 'json' 'function'\n           || lk == 75944           // 'json' 'ge'\n           || lk == 76968           // 'json' 'group'\n           || lk == 77992           // 'json' 'gt'\n           || lk == 78504           // 'json' 'idiv'\n           || lk == 79016           // 'json' 'if'\n           || lk == 79528           // 'json' 'import'\n           || lk == 80040           // 'json' 'in'\n           || lk == 80552           // 'json' 'index'\n           || lk == 82600           // 'json' 'insert'\n           || lk == 83112           // 'json' 'instance'\n           || lk == 83624           // 'json' 'integrity'\n           || lk == 84136           // 'json' 'intersect'\n           || lk == 84648           // 'json' 'into'\n           || lk == 85160           // 'json' 'is'\n           || lk == 85672           // 'json' 'item'\n           || lk == 86184           // 'json' 'json'\n           || lk == 86696           // 'json' 'json-item'\n           || lk == 87208           // 'json' 'jsoniq'\n           || lk == 88744           // 'json' 'last'\n           || lk == 89256           // 'json' 'lax'\n           || lk == 89768           // 'json' 'le'\n           || lk == 90792           // 'json' 'let'\n           || lk == 91816           // 'json' 'loop'\n           || lk == 92840           // 'json' 'lt'\n           || lk == 93864           // 'json' 'mod'\n           || lk == 94376           // 'json' 'modify'\n           || lk == 94888           // 'json' 'module'\n           || lk == 95912           // 'json' 'namespace'\n           || lk == 96424           // 'json' 'namespace-node'\n           || lk == 96936           // 'json' 'ne'\n           || lk == 99496           // 'json' 'node'\n           || lk == 100008          // 'json' 'nodes'\n           || lk == 100520          // 'json' 'not'\n           || lk == 101032          // 'json' 'null'\n           || lk == 101544          // 'json' 'object'\n           || lk == 103592          // 'json' 'only'\n           || lk == 104104          // 'json' 'option'\n           || lk == 104616          // 'json' 'or'\n           || lk == 105128          // 'json' 'order'\n           || lk == 105640          // 'json' 'ordered'\n           || lk == 106152          // 'json' 'ordering'\n           || lk == 107688          // 'json' 'parent'\n           || lk == 110760          // 'json' 'preceding'\n           || lk == 111272          // 'json' 'preceding-sibling'\n           || lk == 112808          // 'json' 'processing-instruction'\n           || lk == 113832          // 'json' 'rename'\n           || lk == 114344          // 'json' 'replace'\n           || lk == 114856          // 'json' 'return'\n           || lk == 115368          // 'json' 'returning'\n           || lk == 115880          // 'json' 'revalidation'\n           || lk == 116904          // 'json' 'satisfies'\n           || lk == 117416          // 'json' 'schema'\n           || lk == 117928          // 'json' 'schema-attribute'\n           || lk == 118440          // 'json' 'schema-element'\n           || lk == 118952          // 'json' 'score'\n           || lk == 119464          // 'json' 'select'\n           || lk == 119976          // 'json' 'self'\n           || lk == 122536          // 'json' 'sliding'\n           || lk == 123048          // 'json' 'some'\n           || lk == 123560          // 'json' 'stable'\n           || lk == 124072          // 'json' 'start'\n           || lk == 125608          // 'json' 'strict'\n           || lk == 126632          // 'json' 'structured-item'\n           || lk == 127144          // 'json' 'switch'\n           || lk == 127656          // 'json' 'text'\n           || lk == 129704          // 'json' 'to'\n           || lk == 130216          // 'json' 'treat'\n           || lk == 130728          // 'json' 'true'\n           || lk == 131240          // 'json' 'try'\n           || lk == 131752          // 'json' 'tumbling'\n           || lk == 132264          // 'json' 'type'\n           || lk == 132776          // 'json' 'typeswitch'\n           || lk == 133288          // 'json' 'union'\n           || lk == 134312          // 'json' 'unordered'\n           || lk == 134824          // 'json' 'updating'\n           || lk == 136360          // 'json' 'validate'\n           || lk == 136872          // 'json' 'value'\n           || lk == 137384          // 'json' 'variable'\n           || lk == 137896          // 'json' 'version'\n           || lk == 139432          // 'json' 'where'\n           || lk == 139944          // 'json' 'while'\n           || lk == 141480          // 'json' 'with'\n           || lk == 144040          // 'json' '{'\n           || lk == 145064)         // 'json' '{|'\n          {\n            shiftT(168);            // 'json'\n          }\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          shiftT(165);              // 'into'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          switch (l1)\n          {\n          case 82:                  // 'at'\n            lookahead2W(72);        // S^WS | '(:' | 'position'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 110162)         // 'at' 'position'\n          {\n            lk = memoized(14, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(82);         // 'at'\n                lookahead1W(72);    // S^WS | '(:' | 'position'\n                shiftT(215);        // 'position'\n                lookahead1W(266);   // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                try_ExprSingle();\n                memoize(14, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(14, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1)\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          memoize(12, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(12, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(161);                  // 'insert'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(13, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            memoize(13, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(13, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shiftT(168);                // 'json'\n      }\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n      shiftT(165);                  // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(72);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 110162)             // 'at' 'position'\n      {\n        lk = memoized(14, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n            memoize(14, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(14, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1)\n      {\n        shiftT(82);                 // 'at'\n        lookahead1W(72);            // S^WS | '(:' | 'position'\n        shiftT(215);                // 'position'\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_ExprSingle();\n      }\n      break;\n    case -3:\n      break;\n    default:\n      shiftT(161);                  // 'insert'\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(281);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(15, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            memoize(15, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(15, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 9896                // 'json' NCName^Token\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shiftT(168);                // 'json'\n      }\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PairConstructorList();\n      shiftT(165);                  // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_JSONRenameExpr()\n  {\n    eventHandler.startNonterminal(\"JSONRenameExpr\", e0);\n    shift(222);                     // 'rename'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(16, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(16, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(80);                      // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONRenameExpr\", e0);\n  }\n\n  function try_JSONRenameExpr()\n  {\n    shiftT(222);                    // 'rename'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(16, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(16, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(16, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(80);                     // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"JSONReplaceExpr\", e0);\n    shift(223);                     // 'replace'\n    lookahead1W(85);                // S^WS | '(:' | 'value'\n    shift(267);                     // 'value'\n    lookahead1W(67);                // S^WS | '(:' | 'of'\n    shift(200);                     // 'of'\n    lookahead1W(59);                // S^WS | '(:' | 'json'\n    shift(168);                     // 'json'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(276);                     // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONReplaceExpr\", e0);\n  }\n\n  function try_JSONReplaceExpr()\n  {\n    shiftT(223);                    // 'replace'\n    lookahead1W(85);                // S^WS | '(:' | 'value'\n    shiftT(267);                    // 'value'\n    lookahead1W(67);                // S^WS | '(:' | 'of'\n    shiftT(200);                    // 'of'\n    lookahead1W(59);                // S^WS | '(:' | 'json'\n    shiftT(168);                    // 'json'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(276);                    // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONAppendExpr()\n  {\n    eventHandler.startNonterminal(\"JSONAppendExpr\", e0);\n    shift(78);                      // 'append'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(17, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(17, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 18600                 // 'json' '(#'\n     || lk == 21160                 // 'json' '+'\n     || lk == 22184                 // 'json' '-'\n     || lk == 24232                 // 'json' '/'\n     || lk == 24744                 // 'json' '//'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 100520                // 'json' 'not'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(165);                     // 'into'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONAppendExpr\", e0);\n  }\n\n  function try_JSONAppendExpr()\n  {\n    shiftT(78);                     // 'append'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(17, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(17, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(17, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 18600                 // 'json' '(#'\n     || lk == 21160                 // 'json' '+'\n     || lk == 22184                 // 'json' '-'\n     || lk == 24232                 // 'json' '/'\n     || lk == 24744                 // 'json' '//'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 100520                // 'json' 'not'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(165);                    // 'into'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CommonContent()\n  {\n    eventHandler.startNonterminal(\"CommonContent\", e0);\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shift(12);                    // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shift(23);                    // CharRef\n      break;\n    case 282:                       // '{{'\n      shift(282);                   // '{{'\n      break;\n    case 288:                       // '}}'\n      shift(288);                   // '}}'\n      break;\n    default:\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CommonContent\", e0);\n  }\n\n  function try_CommonContent()\n  {\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shiftT(12);                   // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shiftT(23);                   // CharRef\n      break;\n    case 282:                       // '{{'\n      shiftT(282);                  // '{{'\n      break;\n    case 288:                       // '}}'\n      shiftT(288);                  // '}}'\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_ContentExpr()\n  {\n    eventHandler.startNonterminal(\"ContentExpr\", e0);\n    parse_StatementsAndExpr();\n    eventHandler.endNonterminal(\"ContentExpr\", e0);\n  }\n\n  function try_ContentExpr()\n  {\n    try_StatementsAndExpr();\n  }\n\n  function parse_CompDocConstructor()\n  {\n    eventHandler.startNonterminal(\"CompDocConstructor\", e0);\n    shift(120);                     // 'document'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompDocConstructor\", e0);\n  }\n\n  function try_CompDocConstructor()\n  {\n    shiftT(120);                    // 'document'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompAttrConstructor()\n  {\n    eventHandler.startNonterminal(\"CompAttrConstructor\", e0);\n    shift(83);                      // 'attribute'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(18, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(18, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(281);                   // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompAttrConstructor\", e0);\n  }\n\n  function try_CompAttrConstructor()\n  {\n    shiftT(83);                     // 'attribute'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(18, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          memoize(18, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(18, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(281);                  // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shiftT(287);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompPIConstructor()\n  {\n    eventHandler.startNonterminal(\"CompPIConstructor\", e0);\n    shift(220);                     // 'processing-instruction'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(19, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(19, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(281);                   // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompPIConstructor\", e0);\n  }\n\n  function try_CompPIConstructor()\n  {\n    shiftT(220);                    // 'processing-instruction'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_NCName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(19, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          memoize(19, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(19, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(281);                  // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shiftT(287);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"CompCommentConstructor\", e0);\n    shift(97);                      // 'comment'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompCommentConstructor\", e0);\n  }\n\n  function try_CompCommentConstructor()\n  {\n    shiftT(97);                     // 'comment'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompTextConstructor()\n  {\n    eventHandler.startNonterminal(\"CompTextConstructor\", e0);\n    shift(249);                     // 'text'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompTextConstructor\", e0);\n  }\n\n  function try_CompTextConstructor()\n  {\n    shiftT(249);                    // 'text'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_PrimaryExpr()\n  {\n    eventHandler.startNonterminal(\"PrimaryExpr\", e0);\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      lookahead2W(246);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(244);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(252);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(97);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 262:                       // 'unordered'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3353                  // '{' EQName^Token\n     || lk == 4377                  // '{' IntegerLiteral\n     || lk == 4889                  // '{' DecimalLiteral\n     || lk == 5401                  // '{' DoubleLiteral\n     || lk == 5913                  // '{' StringLiteral\n     || lk == 16153                 // '{' '$'\n     || lk == 16665                 // '{' '$$'\n     || lk == 17177                 // '{' '%'\n     || lk == 18055                 // 'false' '('\n     || lk == 18117                 // 'null' '('\n     || lk == 18175                 // 'true' '('\n     || lk == 18201                 // '{' '('\n     || lk == 18713                 // '{' '(#'\n     || lk == 21273                 // '{' '+'\n     || lk == 22297                 // '{' '-'\n     || lk == 24345                 // '{' '/'\n     || lk == 24857                 // '{' '//'\n     || lk == 28441                 // '{' '<'\n     || lk == 28953                 // '{' '<!--'\n     || lk == 31001                 // '{' '<?'\n     || lk == 35609                 // '{' '['\n     || lk == 36633                 // '{' 'after'\n     || lk == 37657                 // '{' 'allowing'\n     || lk == 38169                 // '{' 'ancestor'\n     || lk == 38681                 // '{' 'ancestor-or-self'\n     || lk == 39193                 // '{' 'and'\n     || lk == 40217                 // '{' 'append'\n     || lk == 40729                 // '{' 'array'\n     || lk == 41241                 // '{' 'as'\n     || lk == 41753                 // '{' 'ascending'\n     || lk == 42265                 // '{' 'at'\n     || lk == 42777                 // '{' 'attribute'\n     || lk == 43289                 // '{' 'base-uri'\n     || lk == 43801                 // '{' 'before'\n     || lk == 44313                 // '{' 'boundary-space'\n     || lk == 44825                 // '{' 'break'\n     || lk == 45849                 // '{' 'case'\n     || lk == 46361                 // '{' 'cast'\n     || lk == 46873                 // '{' 'castable'\n     || lk == 47385                 // '{' 'catch'\n     || lk == 48409                 // '{' 'child'\n     || lk == 48921                 // '{' 'collation'\n     || lk == 49945                 // '{' 'comment'\n     || lk == 50457                 // '{' 'constraint'\n     || lk == 50969                 // '{' 'construction'\n     || lk == 52505                 // '{' 'context'\n     || lk == 53017                 // '{' 'continue'\n     || lk == 53529                 // '{' 'copy'\n     || lk == 54041                 // '{' 'copy-namespaces'\n     || lk == 54553                 // '{' 'count'\n     || lk == 55065                 // '{' 'decimal-format'\n     || lk == 56089                 // '{' 'declare'\n     || lk == 56601                 // '{' 'default'\n     || lk == 57113                 // '{' 'delete'\n     || lk == 57625                 // '{' 'descendant'\n     || lk == 58137                 // '{' 'descendant-or-self'\n     || lk == 58649                 // '{' 'descending'\n     || lk == 61209                 // '{' 'div'\n     || lk == 61721                 // '{' 'document'\n     || lk == 62233                 // '{' 'document-node'\n     || lk == 62745                 // '{' 'element'\n     || lk == 63257                 // '{' 'else'\n     || lk == 63769                 // '{' 'empty'\n     || lk == 64281                 // '{' 'empty-sequence'\n     || lk == 64793                 // '{' 'encoding'\n     || lk == 65305                 // '{' 'end'\n     || lk == 66329                 // '{' 'eq'\n     || lk == 66841                 // '{' 'every'\n     || lk == 67865                 // '{' 'except'\n     || lk == 68377                 // '{' 'exit'\n     || lk == 68889                 // '{' 'external'\n     || lk == 69401                 // '{' 'false'\n     || lk == 69913                 // '{' 'first'\n     || lk == 70425                 // '{' 'following'\n     || lk == 70937                 // '{' 'following-sibling'\n     || lk == 71449                 // '{' 'for'\n     || lk == 72985                 // '{' 'from'\n     || lk == 73497                 // '{' 'ft-option'\n     || lk == 75545                 // '{' 'function'\n     || lk == 76057                 // '{' 'ge'\n     || lk == 77081                 // '{' 'group'\n     || lk == 78105                 // '{' 'gt'\n     || lk == 78617                 // '{' 'idiv'\n     || lk == 79129                 // '{' 'if'\n     || lk == 79641                 // '{' 'import'\n     || lk == 80153                 // '{' 'in'\n     || lk == 80665                 // '{' 'index'\n     || lk == 82713                 // '{' 'insert'\n     || lk == 83225                 // '{' 'instance'\n     || lk == 83737                 // '{' 'integrity'\n     || lk == 84249                 // '{' 'intersect'\n     || lk == 84761                 // '{' 'into'\n     || lk == 85273                 // '{' 'is'\n     || lk == 85785                 // '{' 'item'\n     || lk == 86297                 // '{' 'json'\n     || lk == 86809                 // '{' 'json-item'\n     || lk == 87321                 // '{' 'jsoniq'\n     || lk == 88857                 // '{' 'last'\n     || lk == 89369                 // '{' 'lax'\n     || lk == 89881                 // '{' 'le'\n     || lk == 90905                 // '{' 'let'\n     || lk == 91929                 // '{' 'loop'\n     || lk == 92953                 // '{' 'lt'\n     || lk == 93977                 // '{' 'mod'\n     || lk == 94489                 // '{' 'modify'\n     || lk == 95001                 // '{' 'module'\n     || lk == 96025                 // '{' 'namespace'\n     || lk == 96537                 // '{' 'namespace-node'\n     || lk == 97049                 // '{' 'ne'\n     || lk == 99609                 // '{' 'node'\n     || lk == 100121                // '{' 'nodes'\n     || lk == 100633                // '{' 'not'\n     || lk == 101145                // '{' 'null'\n     || lk == 101657                // '{' 'object'\n     || lk == 103705                // '{' 'only'\n     || lk == 104217                // '{' 'option'\n     || lk == 104729                // '{' 'or'\n     || lk == 105241                // '{' 'order'\n     || lk == 105753                // '{' 'ordered'\n     || lk == 106265                // '{' 'ordering'\n     || lk == 107801                // '{' 'parent'\n     || lk == 110873                // '{' 'preceding'\n     || lk == 111385                // '{' 'preceding-sibling'\n     || lk == 112921                // '{' 'processing-instruction'\n     || lk == 113945                // '{' 'rename'\n     || lk == 114457                // '{' 'replace'\n     || lk == 114969                // '{' 'return'\n     || lk == 115481                // '{' 'returning'\n     || lk == 115993                // '{' 'revalidation'\n     || lk == 117017                // '{' 'satisfies'\n     || lk == 117529                // '{' 'schema'\n     || lk == 118041                // '{' 'schema-attribute'\n     || lk == 118553                // '{' 'schema-element'\n     || lk == 119065                // '{' 'score'\n     || lk == 119577                // '{' 'select'\n     || lk == 120089                // '{' 'self'\n     || lk == 122649                // '{' 'sliding'\n     || lk == 123161                // '{' 'some'\n     || lk == 123673                // '{' 'stable'\n     || lk == 124185                // '{' 'start'\n     || lk == 125721                // '{' 'strict'\n     || lk == 126745                // '{' 'structured-item'\n     || lk == 127257                // '{' 'switch'\n     || lk == 127769                // '{' 'text'\n     || lk == 129817                // '{' 'to'\n     || lk == 130329                // '{' 'treat'\n     || lk == 130841                // '{' 'true'\n     || lk == 131353                // '{' 'try'\n     || lk == 131865                // '{' 'tumbling'\n     || lk == 132377                // '{' 'type'\n     || lk == 132889                // '{' 'typeswitch'\n     || lk == 133401                // '{' 'union'\n     || lk == 134425                // '{' 'unordered'\n     || lk == 134937                // '{' 'updating'\n     || lk == 136473                // '{' 'validate'\n     || lk == 136985                // '{' 'value'\n     || lk == 137497                // '{' 'variable'\n     || lk == 138009                // '{' 'version'\n     || lk == 139545                // '{' 'where'\n     || lk == 140057                // '{' 'while'\n     || lk == 141593                // '{' 'with'\n     || lk == 144153                // '{' '{'\n     || lk == 145177                // '{' '{|'\n     || lk == 147225)               // '{' '}'\n    {\n      lk = memoized(20, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_Literal();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_FunctionCall();\n            lk = -5;\n          }\n          catch (p5A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockExpr();\n              lk = -10;\n            }\n            catch (p10A)\n            {\n              lk = -11;\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(20, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 12935:                     // 'false' EOF\n    case 12997:                     // 'null' EOF\n    case 13055:                     // 'true' EOF\n    case 13447:                     // 'false' '!'\n    case 13509:                     // 'null' '!'\n    case 13567:                     // 'true' '!'\n    case 13959:                     // 'false' '!='\n    case 14021:                     // 'null' '!='\n    case 14079:                     // 'true' '!='\n    case 19591:                     // 'false' ')'\n    case 19653:                     // 'null' ')'\n    case 19711:                     // 'true' ')'\n    case 20103:                     // 'false' '*'\n    case 20165:                     // 'null' '*'\n    case 20223:                     // 'true' '*'\n    case 21127:                     // 'false' '+'\n    case 21189:                     // 'null' '+'\n    case 21247:                     // 'true' '+'\n    case 21639:                     // 'false' ','\n    case 21701:                     // 'null' ','\n    case 21759:                     // 'true' ','\n    case 22151:                     // 'false' '-'\n    case 22213:                     // 'null' '-'\n    case 22271:                     // 'true' '-'\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 24199:                     // 'false' '/'\n    case 24261:                     // 'null' '/'\n    case 24319:                     // 'true' '/'\n    case 24711:                     // 'false' '//'\n    case 24773:                     // 'null' '//'\n    case 24831:                     // 'true' '//'\n    case 25735:                     // 'false' ':'\n    case 25797:                     // 'null' ':'\n    case 25855:                     // 'true' ':'\n    case 27783:                     // 'false' ';'\n    case 27845:                     // 'null' ';'\n    case 27903:                     // 'true' ';'\n    case 28295:                     // 'false' '<'\n    case 28357:                     // 'null' '<'\n    case 28415:                     // 'true' '<'\n    case 29831:                     // 'false' '<<'\n    case 29893:                     // 'null' '<<'\n    case 29951:                     // 'true' '<<'\n    case 30343:                     // 'false' '<='\n    case 30405:                     // 'null' '<='\n    case 30463:                     // 'true' '<='\n    case 31367:                     // 'false' '='\n    case 31429:                     // 'null' '='\n    case 31487:                     // 'true' '='\n    case 31879:                     // 'false' '>'\n    case 31941:                     // 'null' '>'\n    case 31999:                     // 'true' '>'\n    case 32391:                     // 'false' '>='\n    case 32453:                     // 'null' '>='\n    case 32511:                     // 'true' '>='\n    case 32903:                     // 'false' '>>'\n    case 32965:                     // 'null' '>>'\n    case 33023:                     // 'true' '>>'\n    case 35463:                     // 'false' '['\n    case 35525:                     // 'null' '['\n    case 35583:                     // 'true' '['\n    case 35975:                     // 'false' ']'\n    case 36037:                     // 'null' ']'\n    case 36095:                     // 'true' ']'\n    case 36487:                     // 'false' 'after'\n    case 36549:                     // 'null' 'after'\n    case 36607:                     // 'true' 'after'\n    case 39047:                     // 'false' 'and'\n    case 39109:                     // 'null' 'and'\n    case 39167:                     // 'true' 'and'\n    case 41095:                     // 'false' 'as'\n    case 41157:                     // 'null' 'as'\n    case 41215:                     // 'true' 'as'\n    case 41607:                     // 'false' 'ascending'\n    case 41669:                     // 'null' 'ascending'\n    case 41727:                     // 'true' 'ascending'\n    case 42119:                     // 'false' 'at'\n    case 42181:                     // 'null' 'at'\n    case 42239:                     // 'true' 'at'\n    case 43655:                     // 'false' 'before'\n    case 43717:                     // 'null' 'before'\n    case 43775:                     // 'true' 'before'\n    case 45191:                     // 'false' 'by'\n    case 45253:                     // 'null' 'by'\n    case 45311:                     // 'true' 'by'\n    case 45703:                     // 'false' 'case'\n    case 45765:                     // 'null' 'case'\n    case 45823:                     // 'true' 'case'\n    case 46215:                     // 'false' 'cast'\n    case 46277:                     // 'null' 'cast'\n    case 46335:                     // 'true' 'cast'\n    case 46727:                     // 'false' 'castable'\n    case 46789:                     // 'null' 'castable'\n    case 46847:                     // 'true' 'castable'\n    case 48775:                     // 'false' 'collation'\n    case 48837:                     // 'null' 'collation'\n    case 48895:                     // 'true' 'collation'\n    case 51335:                     // 'false' 'contains'\n    case 51397:                     // 'null' 'contains'\n    case 51455:                     // 'true' 'contains'\n    case 54407:                     // 'false' 'count'\n    case 54469:                     // 'null' 'count'\n    case 54527:                     // 'true' 'count'\n    case 56455:                     // 'false' 'default'\n    case 56517:                     // 'null' 'default'\n    case 56575:                     // 'true' 'default'\n    case 58503:                     // 'false' 'descending'\n    case 58565:                     // 'null' 'descending'\n    case 58623:                     // 'true' 'descending'\n    case 61063:                     // 'false' 'div'\n    case 61125:                     // 'null' 'div'\n    case 61183:                     // 'true' 'div'\n    case 63111:                     // 'false' 'else'\n    case 63173:                     // 'null' 'else'\n    case 63231:                     // 'true' 'else'\n    case 63623:                     // 'false' 'empty'\n    case 63685:                     // 'null' 'empty'\n    case 63743:                     // 'true' 'empty'\n    case 65159:                     // 'false' 'end'\n    case 65221:                     // 'null' 'end'\n    case 65279:                     // 'true' 'end'\n    case 66183:                     // 'false' 'eq'\n    case 66245:                     // 'null' 'eq'\n    case 66303:                     // 'true' 'eq'\n    case 67719:                     // 'false' 'except'\n    case 67781:                     // 'null' 'except'\n    case 67839:                     // 'true' 'except'\n    case 71303:                     // 'false' 'for'\n    case 71365:                     // 'null' 'for'\n    case 71423:                     // 'true' 'for'\n    case 75911:                     // 'false' 'ge'\n    case 75973:                     // 'null' 'ge'\n    case 76031:                     // 'true' 'ge'\n    case 76935:                     // 'false' 'group'\n    case 76997:                     // 'null' 'group'\n    case 77055:                     // 'true' 'group'\n    case 77959:                     // 'false' 'gt'\n    case 78021:                     // 'null' 'gt'\n    case 78079:                     // 'true' 'gt'\n    case 78471:                     // 'false' 'idiv'\n    case 78533:                     // 'null' 'idiv'\n    case 78591:                     // 'true' 'idiv'\n    case 83079:                     // 'false' 'instance'\n    case 83141:                     // 'null' 'instance'\n    case 83199:                     // 'true' 'instance'\n    case 84103:                     // 'false' 'intersect'\n    case 84165:                     // 'null' 'intersect'\n    case 84223:                     // 'true' 'intersect'\n    case 84615:                     // 'false' 'into'\n    case 84677:                     // 'null' 'into'\n    case 84735:                     // 'true' 'into'\n    case 85127:                     // 'false' 'is'\n    case 85189:                     // 'null' 'is'\n    case 85247:                     // 'true' 'is'\n    case 89735:                     // 'false' 'le'\n    case 89797:                     // 'null' 'le'\n    case 89855:                     // 'true' 'le'\n    case 90759:                     // 'false' 'let'\n    case 90821:                     // 'null' 'let'\n    case 90879:                     // 'true' 'let'\n    case 92807:                     // 'false' 'lt'\n    case 92869:                     // 'null' 'lt'\n    case 92927:                     // 'true' 'lt'\n    case 93831:                     // 'false' 'mod'\n    case 93893:                     // 'null' 'mod'\n    case 93951:                     // 'true' 'mod'\n    case 94343:                     // 'false' 'modify'\n    case 94405:                     // 'null' 'modify'\n    case 94463:                     // 'true' 'modify'\n    case 96903:                     // 'false' 'ne'\n    case 96965:                     // 'null' 'ne'\n    case 97023:                     // 'true' 'ne'\n    case 103559:                    // 'false' 'only'\n    case 103621:                    // 'null' 'only'\n    case 103679:                    // 'true' 'only'\n    case 104583:                    // 'false' 'or'\n    case 104645:                    // 'null' 'or'\n    case 104703:                    // 'true' 'or'\n    case 105095:                    // 'false' 'order'\n    case 105157:                    // 'null' 'order'\n    case 105215:                    // 'true' 'order'\n    case 107143:                    // 'false' 'paragraphs'\n    case 107205:                    // 'null' 'paragraphs'\n    case 107263:                    // 'true' 'paragraphs'\n    case 114823:                    // 'false' 'return'\n    case 114885:                    // 'null' 'return'\n    case 114943:                    // 'true' 'return'\n    case 116871:                    // 'false' 'satisfies'\n    case 116933:                    // 'null' 'satisfies'\n    case 116991:                    // 'true' 'satisfies'\n    case 121479:                    // 'false' 'sentences'\n    case 121541:                    // 'null' 'sentences'\n    case 121599:                    // 'true' 'sentences'\n    case 123527:                    // 'false' 'stable'\n    case 123589:                    // 'null' 'stable'\n    case 123647:                    // 'true' 'stable'\n    case 124039:                    // 'false' 'start'\n    case 124101:                    // 'null' 'start'\n    case 124159:                    // 'true' 'start'\n    case 129159:                    // 'false' 'times'\n    case 129221:                    // 'null' 'times'\n    case 129279:                    // 'true' 'times'\n    case 129671:                    // 'false' 'to'\n    case 129733:                    // 'null' 'to'\n    case 129791:                    // 'true' 'to'\n    case 130183:                    // 'false' 'treat'\n    case 130245:                    // 'null' 'treat'\n    case 130303:                    // 'true' 'treat'\n    case 133255:                    // 'false' 'union'\n    case 133317:                    // 'null' 'union'\n    case 133375:                    // 'true' 'union'\n    case 139399:                    // 'false' 'where'\n    case 139461:                    // 'null' 'where'\n    case 139519:                    // 'true' 'where'\n    case 141447:                    // 'false' 'with'\n    case 141509:                    // 'null' 'with'\n    case 141567:                    // 'true' 'with'\n    case 142983:                    // 'false' 'words'\n    case 143045:                    // 'null' 'words'\n    case 143103:                    // 'true' 'words'\n    case 145543:                    // 'false' '|'\n    case 145605:                    // 'null' '|'\n    case 145663:                    // 'true' '|'\n    case 146055:                    // 'false' '||'\n    case 146117:                    // 'null' '||'\n    case 146175:                    // 'true' '||'\n    case 146567:                    // 'false' '|}'\n    case 146629:                    // 'null' '|}'\n    case 146687:                    // 'true' '|}'\n    case 147079:                    // 'false' '}'\n    case 147141:                    // 'null' '}'\n    case 147199:                    // 'true' '}'\n      parse_Literal();\n      break;\n    case 31:                        // '$'\n      parse_VarRef();\n      break;\n    case 35:                        // '('\n      parse_ParenthesizedExpr();\n      break;\n    case 32:                        // '$$'\n      parse_ContextItemExpr();\n      break;\n    case -5:\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n      parse_FunctionCall();\n      break;\n    case 144078:                    // 'ordered' '{'\n      parse_OrderedExpr();\n      break;\n    case 144134:                    // 'unordered' '{'\n      parse_UnorderedExpr();\n      break;\n    case 33:                        // '%'\n    case 79:                        // 'array'\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 147:                       // 'function'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15016:                     // 'json' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15037:                     // 'ne' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n      parse_FunctionItemExpr();\n      break;\n    case -10:\n    case 27929:                     // '{' ';'\n      parse_BlockExpr();\n      break;\n    case -11:\n    case 10009:                     // '{' NCName^Token\n      parse_ObjectConstructor();\n      break;\n    case 69:                        // '['\n      parse_ArrayConstructor();\n      break;\n    case 283:                       // '{|'\n      parse_JSONSimpleObjectUnion();\n      break;\n    default:\n      parse_Constructor();\n    }\n    eventHandler.endNonterminal(\"PrimaryExpr\", e0);\n  }\n\n  function try_PrimaryExpr()\n  {\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      lookahead2W(246);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(244);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(252);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(97);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 262:                       // 'unordered'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3353                  // '{' EQName^Token\n     || lk == 4377                  // '{' IntegerLiteral\n     || lk == 4889                  // '{' DecimalLiteral\n     || lk == 5401                  // '{' DoubleLiteral\n     || lk == 5913                  // '{' StringLiteral\n     || lk == 16153                 // '{' '$'\n     || lk == 16665                 // '{' '$$'\n     || lk == 17177                 // '{' '%'\n     || lk == 18055                 // 'false' '('\n     || lk == 18117                 // 'null' '('\n     || lk == 18175                 // 'true' '('\n     || lk == 18201                 // '{' '('\n     || lk == 18713                 // '{' '(#'\n     || lk == 21273                 // '{' '+'\n     || lk == 22297                 // '{' '-'\n     || lk == 24345                 // '{' '/'\n     || lk == 24857                 // '{' '//'\n     || lk == 28441                 // '{' '<'\n     || lk == 28953                 // '{' '<!--'\n     || lk == 31001                 // '{' '<?'\n     || lk == 35609                 // '{' '['\n     || lk == 36633                 // '{' 'after'\n     || lk == 37657                 // '{' 'allowing'\n     || lk == 38169                 // '{' 'ancestor'\n     || lk == 38681                 // '{' 'ancestor-or-self'\n     || lk == 39193                 // '{' 'and'\n     || lk == 40217                 // '{' 'append'\n     || lk == 40729                 // '{' 'array'\n     || lk == 41241                 // '{' 'as'\n     || lk == 41753                 // '{' 'ascending'\n     || lk == 42265                 // '{' 'at'\n     || lk == 42777                 // '{' 'attribute'\n     || lk == 43289                 // '{' 'base-uri'\n     || lk == 43801                 // '{' 'before'\n     || lk == 44313                 // '{' 'boundary-space'\n     || lk == 44825                 // '{' 'break'\n     || lk == 45849                 // '{' 'case'\n     || lk == 46361                 // '{' 'cast'\n     || lk == 46873                 // '{' 'castable'\n     || lk == 47385                 // '{' 'catch'\n     || lk == 48409                 // '{' 'child'\n     || lk == 48921                 // '{' 'collation'\n     || lk == 49945                 // '{' 'comment'\n     || lk == 50457                 // '{' 'constraint'\n     || lk == 50969                 // '{' 'construction'\n     || lk == 52505                 // '{' 'context'\n     || lk == 53017                 // '{' 'continue'\n     || lk == 53529                 // '{' 'copy'\n     || lk == 54041                 // '{' 'copy-namespaces'\n     || lk == 54553                 // '{' 'count'\n     || lk == 55065                 // '{' 'decimal-format'\n     || lk == 56089                 // '{' 'declare'\n     || lk == 56601                 // '{' 'default'\n     || lk == 57113                 // '{' 'delete'\n     || lk == 57625                 // '{' 'descendant'\n     || lk == 58137                 // '{' 'descendant-or-self'\n     || lk == 58649                 // '{' 'descending'\n     || lk == 61209                 // '{' 'div'\n     || lk == 61721                 // '{' 'document'\n     || lk == 62233                 // '{' 'document-node'\n     || lk == 62745                 // '{' 'element'\n     || lk == 63257                 // '{' 'else'\n     || lk == 63769                 // '{' 'empty'\n     || lk == 64281                 // '{' 'empty-sequence'\n     || lk == 64793                 // '{' 'encoding'\n     || lk == 65305                 // '{' 'end'\n     || lk == 66329                 // '{' 'eq'\n     || lk == 66841                 // '{' 'every'\n     || lk == 67865                 // '{' 'except'\n     || lk == 68377                 // '{' 'exit'\n     || lk == 68889                 // '{' 'external'\n     || lk == 69401                 // '{' 'false'\n     || lk == 69913                 // '{' 'first'\n     || lk == 70425                 // '{' 'following'\n     || lk == 70937                 // '{' 'following-sibling'\n     || lk == 71449                 // '{' 'for'\n     || lk == 72985                 // '{' 'from'\n     || lk == 73497                 // '{' 'ft-option'\n     || lk == 75545                 // '{' 'function'\n     || lk == 76057                 // '{' 'ge'\n     || lk == 77081                 // '{' 'group'\n     || lk == 78105                 // '{' 'gt'\n     || lk == 78617                 // '{' 'idiv'\n     || lk == 79129                 // '{' 'if'\n     || lk == 79641                 // '{' 'import'\n     || lk == 80153                 // '{' 'in'\n     || lk == 80665                 // '{' 'index'\n     || lk == 82713                 // '{' 'insert'\n     || lk == 83225                 // '{' 'instance'\n     || lk == 83737                 // '{' 'integrity'\n     || lk == 84249                 // '{' 'intersect'\n     || lk == 84761                 // '{' 'into'\n     || lk == 85273                 // '{' 'is'\n     || lk == 85785                 // '{' 'item'\n     || lk == 86297                 // '{' 'json'\n     || lk == 86809                 // '{' 'json-item'\n     || lk == 87321                 // '{' 'jsoniq'\n     || lk == 88857                 // '{' 'last'\n     || lk == 89369                 // '{' 'lax'\n     || lk == 89881                 // '{' 'le'\n     || lk == 90905                 // '{' 'let'\n     || lk == 91929                 // '{' 'loop'\n     || lk == 92953                 // '{' 'lt'\n     || lk == 93977                 // '{' 'mod'\n     || lk == 94489                 // '{' 'modify'\n     || lk == 95001                 // '{' 'module'\n     || lk == 96025                 // '{' 'namespace'\n     || lk == 96537                 // '{' 'namespace-node'\n     || lk == 97049                 // '{' 'ne'\n     || lk == 99609                 // '{' 'node'\n     || lk == 100121                // '{' 'nodes'\n     || lk == 100633                // '{' 'not'\n     || lk == 101145                // '{' 'null'\n     || lk == 101657                // '{' 'object'\n     || lk == 103705                // '{' 'only'\n     || lk == 104217                // '{' 'option'\n     || lk == 104729                // '{' 'or'\n     || lk == 105241                // '{' 'order'\n     || lk == 105753                // '{' 'ordered'\n     || lk == 106265                // '{' 'ordering'\n     || lk == 107801                // '{' 'parent'\n     || lk == 110873                // '{' 'preceding'\n     || lk == 111385                // '{' 'preceding-sibling'\n     || lk == 112921                // '{' 'processing-instruction'\n     || lk == 113945                // '{' 'rename'\n     || lk == 114457                // '{' 'replace'\n     || lk == 114969                // '{' 'return'\n     || lk == 115481                // '{' 'returning'\n     || lk == 115993                // '{' 'revalidation'\n     || lk == 117017                // '{' 'satisfies'\n     || lk == 117529                // '{' 'schema'\n     || lk == 118041                // '{' 'schema-attribute'\n     || lk == 118553                // '{' 'schema-element'\n     || lk == 119065                // '{' 'score'\n     || lk == 119577                // '{' 'select'\n     || lk == 120089                // '{' 'self'\n     || lk == 122649                // '{' 'sliding'\n     || lk == 123161                // '{' 'some'\n     || lk == 123673                // '{' 'stable'\n     || lk == 124185                // '{' 'start'\n     || lk == 125721                // '{' 'strict'\n     || lk == 126745                // '{' 'structured-item'\n     || lk == 127257                // '{' 'switch'\n     || lk == 127769                // '{' 'text'\n     || lk == 129817                // '{' 'to'\n     || lk == 130329                // '{' 'treat'\n     || lk == 130841                // '{' 'true'\n     || lk == 131353                // '{' 'try'\n     || lk == 131865                // '{' 'tumbling'\n     || lk == 132377                // '{' 'type'\n     || lk == 132889                // '{' 'typeswitch'\n     || lk == 133401                // '{' 'union'\n     || lk == 134425                // '{' 'unordered'\n     || lk == 134937                // '{' 'updating'\n     || lk == 136473                // '{' 'validate'\n     || lk == 136985                // '{' 'value'\n     || lk == 137497                // '{' 'variable'\n     || lk == 138009                // '{' 'version'\n     || lk == 139545                // '{' 'where'\n     || lk == 140057                // '{' 'while'\n     || lk == 141593                // '{' 'with'\n     || lk == 144153                // '{' '{'\n     || lk == 145177                // '{' '{|'\n     || lk == 147225)               // '{' '}'\n    {\n      lk = memoized(20, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_Literal();\n          memoize(20, e0A, -1);\n          lk = -14;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_FunctionCall();\n            memoize(20, e0A, -5);\n            lk = -14;\n          }\n          catch (p5A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockExpr();\n              memoize(20, e0A, -10);\n              lk = -14;\n            }\n            catch (p10A)\n            {\n              lk = -11;\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              memoize(20, e0A, -11);\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 12935:                     // 'false' EOF\n    case 12997:                     // 'null' EOF\n    case 13055:                     // 'true' EOF\n    case 13447:                     // 'false' '!'\n    case 13509:                     // 'null' '!'\n    case 13567:                     // 'true' '!'\n    case 13959:                     // 'false' '!='\n    case 14021:                     // 'null' '!='\n    case 14079:                     // 'true' '!='\n    case 19591:                     // 'false' ')'\n    case 19653:                     // 'null' ')'\n    case 19711:                     // 'true' ')'\n    case 20103:                     // 'false' '*'\n    case 20165:                     // 'null' '*'\n    case 20223:                     // 'true' '*'\n    case 21127:                     // 'false' '+'\n    case 21189:                     // 'null' '+'\n    case 21247:                     // 'true' '+'\n    case 21639:                     // 'false' ','\n    case 21701:                     // 'null' ','\n    case 21759:                     // 'true' ','\n    case 22151:                     // 'false' '-'\n    case 22213:                     // 'null' '-'\n    case 22271:                     // 'true' '-'\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 24199:                     // 'false' '/'\n    case 24261:                     // 'null' '/'\n    case 24319:                     // 'true' '/'\n    case 24711:                     // 'false' '//'\n    case 24773:                     // 'null' '//'\n    case 24831:                     // 'true' '//'\n    case 25735:                     // 'false' ':'\n    case 25797:                     // 'null' ':'\n    case 25855:                     // 'true' ':'\n    case 27783:                     // 'false' ';'\n    case 27845:                     // 'null' ';'\n    case 27903:                     // 'true' ';'\n    case 28295:                     // 'false' '<'\n    case 28357:                     // 'null' '<'\n    case 28415:                     // 'true' '<'\n    case 29831:                     // 'false' '<<'\n    case 29893:                     // 'null' '<<'\n    case 29951:                     // 'true' '<<'\n    case 30343:                     // 'false' '<='\n    case 30405:                     // 'null' '<='\n    case 30463:                     // 'true' '<='\n    case 31367:                     // 'false' '='\n    case 31429:                     // 'null' '='\n    case 31487:                     // 'true' '='\n    case 31879:                     // 'false' '>'\n    case 31941:                     // 'null' '>'\n    case 31999:                     // 'true' '>'\n    case 32391:                     // 'false' '>='\n    case 32453:                     // 'null' '>='\n    case 32511:                     // 'true' '>='\n    case 32903:                     // 'false' '>>'\n    case 32965:                     // 'null' '>>'\n    case 33023:                     // 'true' '>>'\n    case 35463:                     // 'false' '['\n    case 35525:                     // 'null' '['\n    case 35583:                     // 'true' '['\n    case 35975:                     // 'false' ']'\n    case 36037:                     // 'null' ']'\n    case 36095:                     // 'true' ']'\n    case 36487:                     // 'false' 'after'\n    case 36549:                     // 'null' 'after'\n    case 36607:                     // 'true' 'after'\n    case 39047:                     // 'false' 'and'\n    case 39109:                     // 'null' 'and'\n    case 39167:                     // 'true' 'and'\n    case 41095:                     // 'false' 'as'\n    case 41157:                     // 'null' 'as'\n    case 41215:                     // 'true' 'as'\n    case 41607:                     // 'false' 'ascending'\n    case 41669:                     // 'null' 'ascending'\n    case 41727:                     // 'true' 'ascending'\n    case 42119:                     // 'false' 'at'\n    case 42181:                     // 'null' 'at'\n    case 42239:                     // 'true' 'at'\n    case 43655:                     // 'false' 'before'\n    case 43717:                     // 'null' 'before'\n    case 43775:                     // 'true' 'before'\n    case 45191:                     // 'false' 'by'\n    case 45253:                     // 'null' 'by'\n    case 45311:                     // 'true' 'by'\n    case 45703:                     // 'false' 'case'\n    case 45765:                     // 'null' 'case'\n    case 45823:                     // 'true' 'case'\n    case 46215:                     // 'false' 'cast'\n    case 46277:                     // 'null' 'cast'\n    case 46335:                     // 'true' 'cast'\n    case 46727:                     // 'false' 'castable'\n    case 46789:                     // 'null' 'castable'\n    case 46847:                     // 'true' 'castable'\n    case 48775:                     // 'false' 'collation'\n    case 48837:                     // 'null' 'collation'\n    case 48895:                     // 'true' 'collation'\n    case 51335:                     // 'false' 'contains'\n    case 51397:                     // 'null' 'contains'\n    case 51455:                     // 'true' 'contains'\n    case 54407:                     // 'false' 'count'\n    case 54469:                     // 'null' 'count'\n    case 54527:                     // 'true' 'count'\n    case 56455:                     // 'false' 'default'\n    case 56517:                     // 'null' 'default'\n    case 56575:                     // 'true' 'default'\n    case 58503:                     // 'false' 'descending'\n    case 58565:                     // 'null' 'descending'\n    case 58623:                     // 'true' 'descending'\n    case 61063:                     // 'false' 'div'\n    case 61125:                     // 'null' 'div'\n    case 61183:                     // 'true' 'div'\n    case 63111:                     // 'false' 'else'\n    case 63173:                     // 'null' 'else'\n    case 63231:                     // 'true' 'else'\n    case 63623:                     // 'false' 'empty'\n    case 63685:                     // 'null' 'empty'\n    case 63743:                     // 'true' 'empty'\n    case 65159:                     // 'false' 'end'\n    case 65221:                     // 'null' 'end'\n    case 65279:                     // 'true' 'end'\n    case 66183:                     // 'false' 'eq'\n    case 66245:                     // 'null' 'eq'\n    case 66303:                     // 'true' 'eq'\n    case 67719:                     // 'false' 'except'\n    case 67781:                     // 'null' 'except'\n    case 67839:                     // 'true' 'except'\n    case 71303:                     // 'false' 'for'\n    case 71365:                     // 'null' 'for'\n    case 71423:                     // 'true' 'for'\n    case 75911:                     // 'false' 'ge'\n    case 75973:                     // 'null' 'ge'\n    case 76031:                     // 'true' 'ge'\n    case 76935:                     // 'false' 'group'\n    case 76997:                     // 'null' 'group'\n    case 77055:                     // 'true' 'group'\n    case 77959:                     // 'false' 'gt'\n    case 78021:                     // 'null' 'gt'\n    case 78079:                     // 'true' 'gt'\n    case 78471:                     // 'false' 'idiv'\n    case 78533:                     // 'null' 'idiv'\n    case 78591:                     // 'true' 'idiv'\n    case 83079:                     // 'false' 'instance'\n    case 83141:                     // 'null' 'instance'\n    case 83199:                     // 'true' 'instance'\n    case 84103:                     // 'false' 'intersect'\n    case 84165:                     // 'null' 'intersect'\n    case 84223:                     // 'true' 'intersect'\n    case 84615:                     // 'false' 'into'\n    case 84677:                     // 'null' 'into'\n    case 84735:                     // 'true' 'into'\n    case 85127:                     // 'false' 'is'\n    case 85189:                     // 'null' 'is'\n    case 85247:                     // 'true' 'is'\n    case 89735:                     // 'false' 'le'\n    case 89797:                     // 'null' 'le'\n    case 89855:                     // 'true' 'le'\n    case 90759:                     // 'false' 'let'\n    case 90821:                     // 'null' 'let'\n    case 90879:                     // 'true' 'let'\n    case 92807:                     // 'false' 'lt'\n    case 92869:                     // 'null' 'lt'\n    case 92927:                     // 'true' 'lt'\n    case 93831:                     // 'false' 'mod'\n    case 93893:                     // 'null' 'mod'\n    case 93951:                     // 'true' 'mod'\n    case 94343:                     // 'false' 'modify'\n    case 94405:                     // 'null' 'modify'\n    case 94463:                     // 'true' 'modify'\n    case 96903:                     // 'false' 'ne'\n    case 96965:                     // 'null' 'ne'\n    case 97023:                     // 'true' 'ne'\n    case 103559:                    // 'false' 'only'\n    case 103621:                    // 'null' 'only'\n    case 103679:                    // 'true' 'only'\n    case 104583:                    // 'false' 'or'\n    case 104645:                    // 'null' 'or'\n    case 104703:                    // 'true' 'or'\n    case 105095:                    // 'false' 'order'\n    case 105157:                    // 'null' 'order'\n    case 105215:                    // 'true' 'order'\n    case 107143:                    // 'false' 'paragraphs'\n    case 107205:                    // 'null' 'paragraphs'\n    case 107263:                    // 'true' 'paragraphs'\n    case 114823:                    // 'false' 'return'\n    case 114885:                    // 'null' 'return'\n    case 114943:                    // 'true' 'return'\n    case 116871:                    // 'false' 'satisfies'\n    case 116933:                    // 'null' 'satisfies'\n    case 116991:                    // 'true' 'satisfies'\n    case 121479:                    // 'false' 'sentences'\n    case 121541:                    // 'null' 'sentences'\n    case 121599:                    // 'true' 'sentences'\n    case 123527:                    // 'false' 'stable'\n    case 123589:                    // 'null' 'stable'\n    case 123647:                    // 'true' 'stable'\n    case 124039:                    // 'false' 'start'\n    case 124101:                    // 'null' 'start'\n    case 124159:                    // 'true' 'start'\n    case 129159:                    // 'false' 'times'\n    case 129221:                    // 'null' 'times'\n    case 129279:                    // 'true' 'times'\n    case 129671:                    // 'false' 'to'\n    case 129733:                    // 'null' 'to'\n    case 129791:                    // 'true' 'to'\n    case 130183:                    // 'false' 'treat'\n    case 130245:                    // 'null' 'treat'\n    case 130303:                    // 'true' 'treat'\n    case 133255:                    // 'false' 'union'\n    case 133317:                    // 'null' 'union'\n    case 133375:                    // 'true' 'union'\n    case 139399:                    // 'false' 'where'\n    case 139461:                    // 'null' 'where'\n    case 139519:                    // 'true' 'where'\n    case 141447:                    // 'false' 'with'\n    case 141509:                    // 'null' 'with'\n    case 141567:                    // 'true' 'with'\n    case 142983:                    // 'false' 'words'\n    case 143045:                    // 'null' 'words'\n    case 143103:                    // 'true' 'words'\n    case 145543:                    // 'false' '|'\n    case 145605:                    // 'null' '|'\n    case 145663:                    // 'true' '|'\n    case 146055:                    // 'false' '||'\n    case 146117:                    // 'null' '||'\n    case 146175:                    // 'true' '||'\n    case 146567:                    // 'false' '|}'\n    case 146629:                    // 'null' '|}'\n    case 146687:                    // 'true' '|}'\n    case 147079:                    // 'false' '}'\n    case 147141:                    // 'null' '}'\n    case 147199:                    // 'true' '}'\n      try_Literal();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 35:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 32:                        // '$$'\n      try_ContextItemExpr();\n      break;\n    case -5:\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n      try_FunctionCall();\n      break;\n    case 144078:                    // 'ordered' '{'\n      try_OrderedExpr();\n      break;\n    case 144134:                    // 'unordered' '{'\n      try_UnorderedExpr();\n      break;\n    case 33:                        // '%'\n    case 79:                        // 'array'\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 147:                       // 'function'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15016:                     // 'json' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15037:                     // 'ne' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n      try_FunctionItemExpr();\n      break;\n    case -10:\n    case 27929:                     // '{' ';'\n      try_BlockExpr();\n      break;\n    case -11:\n    case 10009:                     // '{' NCName^Token\n      try_ObjectConstructor();\n      break;\n    case 69:                        // '['\n      try_ArrayConstructor();\n      break;\n    case 283:                       // '{|'\n      try_JSONSimpleObjectUnion();\n      break;\n    case -14:\n      break;\n    default:\n      try_Constructor();\n    }\n  }\n\n  function parse_JSONSimpleObjectUnion()\n  {\n    eventHandler.startNonterminal(\"JSONSimpleObjectUnion\", e0);\n    shift(283);                     // '{|'\n    lookahead1W(273);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 286)                  // '|}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(286);                     // '|}'\n    eventHandler.endNonterminal(\"JSONSimpleObjectUnion\", e0);\n  }\n\n  function try_JSONSimpleObjectUnion()\n  {\n    shiftT(283);                    // '{|'\n    lookahead1W(273);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 286)                  // '|}'\n    {\n      try_Expr();\n    }\n    shiftT(286);                    // '|}'\n  }\n\n  function parse_ObjectConstructor()\n  {\n    eventHandler.startNonterminal(\"ObjectConstructor\", e0);\n    shift(281);                     // '{'\n    lookahead1W(276);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_PairConstructorList();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ObjectConstructor\", e0);\n  }\n\n  function try_ObjectConstructor()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(276);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      try_PairConstructorList();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_PairConstructorList()\n  {\n    eventHandler.startNonterminal(\"PairConstructorList\", e0);\n    parse_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PairConstructor();\n    }\n    eventHandler.endNonterminal(\"PairConstructorList\", e0);\n  }\n\n  function try_PairConstructorList()\n  {\n    try_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PairConstructor();\n    }\n  }\n\n  function parse_PairConstructor()\n  {\n    eventHandler.startNonterminal(\"PairConstructor\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(278);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 139:                       // 'for'\n      lookahead2W(187);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'sliding' | 'tumbling'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(281);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 177:                       // 'let'\n      lookahead2W(178);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'score'\n      break;\n    case 187:                       // 'namespace'\n      lookahead2W(251);             // NCName^Token | S^WS | '#' | '(' | '(:' | ':' | 'after' | 'allowing' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(247);             // NCName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(180);             // S^WS | '#' | '(' | '(:' | ':' | 'node' | 'value'\n      break;\n    case 266:                       // 'validate'\n      lookahead2W(191);             // S^WS | '#' | '(' | '(:' | ':' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(256);             // EQName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(149);             // S^WS | '#' | '(:' | ':' | '{'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(261);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(165);             // S^WS | '#' | '$' | '(' | '(:' | ':'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(208);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '.' | '/' | '//' | ':' |\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 256:                       // 'try'\n    case 262:                       // 'unordered'\n      lookahead2W(167);             // S^WS | '#' | '(' | '(:' | ':' | '{'\n      break;\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 167:                       // 'item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n      lookahead2W(96);              // S^WS | '#' | '(:' | ':'\n      break;\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 154:                       // 'if'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 248:                       // 'switch'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 259:                       // 'typeswitch'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(144);             // S^WS | '#' | '(' | '(:' | ':'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855)                // 'true' ':'\n    {\n      lk = memoized(21, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ExprSingle();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(21, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n    case 19:                        // NCName^Token\n    case 25671:                     // 'after' ':'\n    case 25673:                     // 'allowing' ':'\n    case 25674:                     // 'ancestor' ':'\n    case 25675:                     // 'ancestor-or-self' ':'\n    case 25676:                     // 'and' ':'\n    case 25678:                     // 'append' ':'\n    case 25680:                     // 'as' ':'\n    case 25681:                     // 'ascending' ':'\n    case 25682:                     // 'at' ':'\n    case 25683:                     // 'attribute' ':'\n    case 25684:                     // 'base-uri' ':'\n    case 25685:                     // 'before' ':'\n    case 25686:                     // 'boundary-space' ':'\n    case 25687:                     // 'break' ':'\n    case 25689:                     // 'case' ':'\n    case 25690:                     // 'cast' ':'\n    case 25691:                     // 'castable' ':'\n    case 25692:                     // 'catch' ':'\n    case 25694:                     // 'child' ':'\n    case 25695:                     // 'collation' ':'\n    case 25697:                     // 'comment' ':'\n    case 25698:                     // 'constraint' ':'\n    case 25699:                     // 'construction' ':'\n    case 25702:                     // 'context' ':'\n    case 25703:                     // 'continue' ':'\n    case 25704:                     // 'copy' ':'\n    case 25705:                     // 'copy-namespaces' ':'\n    case 25706:                     // 'count' ':'\n    case 25707:                     // 'decimal-format' ':'\n    case 25709:                     // 'declare' ':'\n    case 25710:                     // 'default' ':'\n    case 25711:                     // 'delete' ':'\n    case 25712:                     // 'descendant' ':'\n    case 25713:                     // 'descendant-or-self' ':'\n    case 25714:                     // 'descending' ':'\n    case 25719:                     // 'div' ':'\n    case 25720:                     // 'document' ':'\n    case 25721:                     // 'document-node' ':'\n    case 25722:                     // 'element' ':'\n    case 25723:                     // 'else' ':'\n    case 25724:                     // 'empty' ':'\n    case 25725:                     // 'empty-sequence' ':'\n    case 25726:                     // 'encoding' ':'\n    case 25727:                     // 'end' ':'\n    case 25729:                     // 'eq' ':'\n    case 25730:                     // 'every' ':'\n    case 25732:                     // 'except' ':'\n    case 25733:                     // 'exit' ':'\n    case 25734:                     // 'external' ':'\n    case 25736:                     // 'first' ':'\n    case 25737:                     // 'following' ':'\n    case 25738:                     // 'following-sibling' ':'\n    case 25739:                     // 'for' ':'\n    case 25742:                     // 'from' ':'\n    case 25743:                     // 'ft-option' ':'\n    case 25747:                     // 'function' ':'\n    case 25748:                     // 'ge' ':'\n    case 25750:                     // 'group' ':'\n    case 25752:                     // 'gt' ':'\n    case 25753:                     // 'idiv' ':'\n    case 25754:                     // 'if' ':'\n    case 25755:                     // 'import' ':'\n    case 25756:                     // 'in' ':'\n    case 25757:                     // 'index' ':'\n    case 25761:                     // 'insert' ':'\n    case 25762:                     // 'instance' ':'\n    case 25763:                     // 'integrity' ':'\n    case 25764:                     // 'intersect' ':'\n    case 25765:                     // 'into' ':'\n    case 25766:                     // 'is' ':'\n    case 25767:                     // 'item' ':'\n    case 25768:                     // 'json' ':'\n    case 25770:                     // 'jsoniq' ':'\n    case 25773:                     // 'last' ':'\n    case 25774:                     // 'lax' ':'\n    case 25775:                     // 'le' ':'\n    case 25777:                     // 'let' ':'\n    case 25779:                     // 'loop' ':'\n    case 25781:                     // 'lt' ':'\n    case 25783:                     // 'mod' ':'\n    case 25784:                     // 'modify' ':'\n    case 25785:                     // 'module' ':'\n    case 25787:                     // 'namespace' ':'\n    case 25788:                     // 'namespace-node' ':'\n    case 25789:                     // 'ne' ':'\n    case 25794:                     // 'node' ':'\n    case 25795:                     // 'nodes' ':'\n    case 25798:                     // 'object' ':'\n    case 25802:                     // 'only' ':'\n    case 25803:                     // 'option' ':'\n    case 25804:                     // 'or' ':'\n    case 25805:                     // 'order' ':'\n    case 25806:                     // 'ordered' ':'\n    case 25807:                     // 'ordering' ':'\n    case 25810:                     // 'parent' ':'\n    case 25816:                     // 'preceding' ':'\n    case 25817:                     // 'preceding-sibling' ':'\n    case 25820:                     // 'processing-instruction' ':'\n    case 25822:                     // 'rename' ':'\n    case 25823:                     // 'replace' ':'\n    case 25824:                     // 'return' ':'\n    case 25825:                     // 'returning' ':'\n    case 25826:                     // 'revalidation' ':'\n    case 25828:                     // 'satisfies' ':'\n    case 25829:                     // 'schema' ':'\n    case 25830:                     // 'schema-attribute' ':'\n    case 25831:                     // 'schema-element' ':'\n    case 25832:                     // 'score' ':'\n    case 25833:                     // 'select' ':'\n    case 25834:                     // 'self' ':'\n    case 25839:                     // 'sliding' ':'\n    case 25840:                     // 'some' ':'\n    case 25841:                     // 'stable' ':'\n    case 25842:                     // 'start' ':'\n    case 25845:                     // 'strict' ':'\n    case 25848:                     // 'switch' ':'\n    case 25849:                     // 'text' ':'\n    case 25853:                     // 'to' ':'\n    case 25854:                     // 'treat' ':'\n    case 25856:                     // 'try' ':'\n    case 25857:                     // 'tumbling' ':'\n    case 25858:                     // 'type' ':'\n    case 25859:                     // 'typeswitch' ':'\n    case 25860:                     // 'union' ':'\n    case 25862:                     // 'unordered' ':'\n    case 25863:                     // 'updating' ':'\n    case 25866:                     // 'validate' ':'\n    case 25867:                     // 'value' ':'\n    case 25868:                     // 'variable' ':'\n    case 25869:                     // 'version' ':'\n    case 25872:                     // 'where' ':'\n    case 25873:                     // 'while' ':'\n    case 25876:                     // 'with' ':'\n      parse_NCName();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    lookahead1W(26);                // S^WS | '(:' | ':'\n    shift(50);                      // ':'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"PairConstructor\", e0);\n  }\n\n  function try_PairConstructor()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(278);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 139:                       // 'for'\n      lookahead2W(187);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'sliding' | 'tumbling'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(281);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 177:                       // 'let'\n      lookahead2W(178);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'score'\n      break;\n    case 187:                       // 'namespace'\n      lookahead2W(251);             // NCName^Token | S^WS | '#' | '(' | '(:' | ':' | 'after' | 'allowing' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(247);             // NCName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(180);             // S^WS | '#' | '(' | '(:' | ':' | 'node' | 'value'\n      break;\n    case 266:                       // 'validate'\n      lookahead2W(191);             // S^WS | '#' | '(' | '(:' | ':' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(256);             // EQName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(149);             // S^WS | '#' | '(:' | ':' | '{'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(261);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(165);             // S^WS | '#' | '$' | '(' | '(:' | ':'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(208);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '.' | '/' | '//' | ':' |\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 256:                       // 'try'\n    case 262:                       // 'unordered'\n      lookahead2W(167);             // S^WS | '#' | '(' | '(:' | ':' | '{'\n      break;\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 167:                       // 'item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n      lookahead2W(96);              // S^WS | '#' | '(:' | ':'\n      break;\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 154:                       // 'if'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 248:                       // 'switch'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 259:                       // 'typeswitch'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(144);             // S^WS | '#' | '(' | '(:' | ':'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855)                // 'true' ':'\n    {\n      lk = memoized(21, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ExprSingle();\n          memoize(21, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(21, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n    case 19:                        // NCName^Token\n    case 25671:                     // 'after' ':'\n    case 25673:                     // 'allowing' ':'\n    case 25674:                     // 'ancestor' ':'\n    case 25675:                     // 'ancestor-or-self' ':'\n    case 25676:                     // 'and' ':'\n    case 25678:                     // 'append' ':'\n    case 25680:                     // 'as' ':'\n    case 25681:                     // 'ascending' ':'\n    case 25682:                     // 'at' ':'\n    case 25683:                     // 'attribute' ':'\n    case 25684:                     // 'base-uri' ':'\n    case 25685:                     // 'before' ':'\n    case 25686:                     // 'boundary-space' ':'\n    case 25687:                     // 'break' ':'\n    case 25689:                     // 'case' ':'\n    case 25690:                     // 'cast' ':'\n    case 25691:                     // 'castable' ':'\n    case 25692:                     // 'catch' ':'\n    case 25694:                     // 'child' ':'\n    case 25695:                     // 'collation' ':'\n    case 25697:                     // 'comment' ':'\n    case 25698:                     // 'constraint' ':'\n    case 25699:                     // 'construction' ':'\n    case 25702:                     // 'context' ':'\n    case 25703:                     // 'continue' ':'\n    case 25704:                     // 'copy' ':'\n    case 25705:                     // 'copy-namespaces' ':'\n    case 25706:                     // 'count' ':'\n    case 25707:                     // 'decimal-format' ':'\n    case 25709:                     // 'declare' ':'\n    case 25710:                     // 'default' ':'\n    case 25711:                     // 'delete' ':'\n    case 25712:                     // 'descendant' ':'\n    case 25713:                     // 'descendant-or-self' ':'\n    case 25714:                     // 'descending' ':'\n    case 25719:                     // 'div' ':'\n    case 25720:                     // 'document' ':'\n    case 25721:                     // 'document-node' ':'\n    case 25722:                     // 'element' ':'\n    case 25723:                     // 'else' ':'\n    case 25724:                     // 'empty' ':'\n    case 25725:                     // 'empty-sequence' ':'\n    case 25726:                     // 'encoding' ':'\n    case 25727:                     // 'end' ':'\n    case 25729:                     // 'eq' ':'\n    case 25730:                     // 'every' ':'\n    case 25732:                     // 'except' ':'\n    case 25733:                     // 'exit' ':'\n    case 25734:                     // 'external' ':'\n    case 25736:                     // 'first' ':'\n    case 25737:                     // 'following' ':'\n    case 25738:                     // 'following-sibling' ':'\n    case 25739:                     // 'for' ':'\n    case 25742:                     // 'from' ':'\n    case 25743:                     // 'ft-option' ':'\n    case 25747:                     // 'function' ':'\n    case 25748:                     // 'ge' ':'\n    case 25750:                     // 'group' ':'\n    case 25752:                     // 'gt' ':'\n    case 25753:                     // 'idiv' ':'\n    case 25754:                     // 'if' ':'\n    case 25755:                     // 'import' ':'\n    case 25756:                     // 'in' ':'\n    case 25757:                     // 'index' ':'\n    case 25761:                     // 'insert' ':'\n    case 25762:                     // 'instance' ':'\n    case 25763:                     // 'integrity' ':'\n    case 25764:                     // 'intersect' ':'\n    case 25765:                     // 'into' ':'\n    case 25766:                     // 'is' ':'\n    case 25767:                     // 'item' ':'\n    case 25768:                     // 'json' ':'\n    case 25770:                     // 'jsoniq' ':'\n    case 25773:                     // 'last' ':'\n    case 25774:                     // 'lax' ':'\n    case 25775:                     // 'le' ':'\n    case 25777:                     // 'let' ':'\n    case 25779:                     // 'loop' ':'\n    case 25781:                     // 'lt' ':'\n    case 25783:                     // 'mod' ':'\n    case 25784:                     // 'modify' ':'\n    case 25785:                     // 'module' ':'\n    case 25787:                     // 'namespace' ':'\n    case 25788:                     // 'namespace-node' ':'\n    case 25789:                     // 'ne' ':'\n    case 25794:                     // 'node' ':'\n    case 25795:                     // 'nodes' ':'\n    case 25798:                     // 'object' ':'\n    case 25802:                     // 'only' ':'\n    case 25803:                     // 'option' ':'\n    case 25804:                     // 'or' ':'\n    case 25805:                     // 'order' ':'\n    case 25806:                     // 'ordered' ':'\n    case 25807:                     // 'ordering' ':'\n    case 25810:                     // 'parent' ':'\n    case 25816:                     // 'preceding' ':'\n    case 25817:                     // 'preceding-sibling' ':'\n    case 25820:                     // 'processing-instruction' ':'\n    case 25822:                     // 'rename' ':'\n    case 25823:                     // 'replace' ':'\n    case 25824:                     // 'return' ':'\n    case 25825:                     // 'returning' ':'\n    case 25826:                     // 'revalidation' ':'\n    case 25828:                     // 'satisfies' ':'\n    case 25829:                     // 'schema' ':'\n    case 25830:                     // 'schema-attribute' ':'\n    case 25831:                     // 'schema-element' ':'\n    case 25832:                     // 'score' ':'\n    case 25833:                     // 'select' ':'\n    case 25834:                     // 'self' ':'\n    case 25839:                     // 'sliding' ':'\n    case 25840:                     // 'some' ':'\n    case 25841:                     // 'stable' ':'\n    case 25842:                     // 'start' ':'\n    case 25845:                     // 'strict' ':'\n    case 25848:                     // 'switch' ':'\n    case 25849:                     // 'text' ':'\n    case 25853:                     // 'to' ':'\n    case 25854:                     // 'treat' ':'\n    case 25856:                     // 'try' ':'\n    case 25857:                     // 'tumbling' ':'\n    case 25858:                     // 'type' ':'\n    case 25859:                     // 'typeswitch' ':'\n    case 25860:                     // 'union' ':'\n    case 25862:                     // 'unordered' ':'\n    case 25863:                     // 'updating' ':'\n    case 25866:                     // 'validate' ':'\n    case 25867:                     // 'value' ':'\n    case 25868:                     // 'variable' ':'\n    case 25869:                     // 'version' ':'\n    case 25872:                     // 'where' ':'\n    case 25873:                     // 'while' ':'\n    case 25876:                     // 'with' ':'\n      try_NCName();\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n    lookahead1W(26);                // S^WS | '(:' | ':'\n    shiftT(50);                     // ':'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_ArrayConstructor()\n  {\n    eventHandler.startNonterminal(\"ArrayConstructor\", e0);\n    shift(69);                      // '['\n    lookahead1W(272);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 70)                   // ']'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayConstructor\", e0);\n  }\n\n  function try_ArrayConstructor()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(272);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 70)                   // ']'\n    {\n      try_Expr();\n    }\n    shiftT(70);                     // ']'\n  }\n\n  function parse_BlockExpr()\n  {\n    eventHandler.startNonterminal(\"BlockExpr\", e0);\n    shift(281);                     // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_StatementsAndOptionalExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"BlockExpr\", e0);\n  }\n\n  function try_BlockExpr()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_StatementsAndOptionalExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FunctionDecl()\n  {\n    eventHandler.startNonterminal(\"FunctionDecl\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(38);                      // ')'\n    lookahead1W(158);               // S^WS | '(:' | 'as' | 'external' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_ReturnType();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'external' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_StatementsAndOptionalExpr();\n      shift(287);                   // '}'\n      break;\n    default:\n      shift(134);                   // 'external'\n    }\n    eventHandler.endNonterminal(\"FunctionDecl\", e0);\n  }\n\n  function parse_ReturnType()\n  {\n    eventHandler.startNonterminal(\"ReturnType\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"ReturnType\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqParser.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function shiftT(t)\n  {\n    if (l1 == t)\n    {\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function skip(code)\n  {\n    var b0W = b0; var e0W = e0; var l1W = l1;\n    var b1W = b1; var e1W = e1;\n\n    l1 = code; b1 = begin; e1 = end;\n    l2 = 0;\n\n    try_Whitespace();\n\n    b0 = b0W; e0 = e0W; l1 = l1W; if (l1 != 0) {\n    b1 = b1W; e1 = e1W; }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      eventHandler.whitespace(e0, b1);\n      e0 = b1;\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 22)               // S^WS\n      {\n        if (code != 37)             // '(:'\n        {\n          break;\n        }\n        skip(code);\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2W(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = matchW(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = match(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function error(b, e, s, l, t)\n  {\n    if (e >= ex)\n    {\n      bx = b;\n      ex = e;\n      sx = s;\n      lx = l;\n      tx = t;\n    }\n    throw new self.ParseException(bx, ex, sx, lx, tx);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var l2, b2, e2;\n  var bx, ex, sx, lx, tx;\n  var eventHandler;\n  var memo;\n\n  function memoize(i, e, v)\n  {\n    memo[(e << 5) + i] = v;\n  }\n\n  function memoized(i, e)\n  {\n    var v = memo[(e << 5) + i];\n    return typeof v != \"undefined\" ? v : 0;\n  }\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqParser.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 8191; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqParser.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqParser.MAP1[(c0 & 15) + JSONiqParser.MAP1[(c1 & 31) + JSONiqParser.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqParser.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqParser.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqParser.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 13) + code - 1;\n      code = JSONiqParser.TRANSITION[(i0 & 31) + JSONiqParser.TRANSITION[i0 >> 5]];\n\n      if (code > 8191)\n      {\n        result = code;\n        code &= 8191;\n        end = current;\n      }\n    }\n\n    result >>= 13;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqParser.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : JSONiqParser.INITIAL[tokenSetId] & 8191;\n  for (var i = 0; i < 289; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 4235 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqParser.EXPECTED[(i0 & 3) + JSONiqParser.EXPECTED[(i1 & 3) + JSONiqParser.EXPECTED[(i2 & 15) + JSONiqParser.EXPECTED[i2 >> 4]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqParser.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqParser.MAP0 =\n[ 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 40, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 40, 40\n];\n\nJSONiqParser.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 355, 371, 387, 423, 423, 423, 415, 339, 331, 339, 331, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 440, 440, 440, 440, 440, 440, 440, 324, 339, 339, 339, 339, 339, 339, 339, 339, 401, 423, 423, 424, 422, 423, 423, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 40, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 40, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 30, 30, 40, 40, 40, 40, 40, 40, 40, 70, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70\n];\n\nJSONiqParser.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 40, 30, 40, 30, 30, 40\n];\n\nJSONiqParser.INITIAL =\n[ 1, 24578, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289\n];\n\nJSONiqParser.TRANSITION =\n[ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 18432, 18508, 18512, 18508, 18508, 18471, 18503, 18452, 18508, 18544, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22565, 22594, 54694, 22641, 32640, 25253, 32640, 22707, 32640, 32640, 18907, 32640, 40804, 19219, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22757, 32640, 23442, 32640, 20728, 22822, 22912, 62853, 22949, 23023, 32640, 25253, 37379, 72986, 32640, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 23090, 32640, 70756, 57235, 23625, 57174, 23143, 53889, 57205, 23194, 32640, 44590, 57237, 72986, 32640, 32640, 18907, 32640, 23058, 18925, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 22132, 19073, 46732, 23294, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 23361, 32640, 61740, 23437, 23807, 23824, 22912, 35136, 23474, 23607, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 40461, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 57592, 32640, 53140, 23657, 43708, 23704, 23789, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 39259, 23856, 32640, 32640, 23893, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 73053, 22069, 23965, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24031, 32640, 23861, 32640, 22776, 24082, 22912, 56240, 24206, 24329, 32640, 25253, 32640, 24379, 32640, 32640, 18907, 32640, 23058, 57529, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24415, 24449, 24453, 24440, 24534, 24485, 24515, 24566, 24596, 24628, 32640, 32105, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 45903, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24678, 32640, 61740, 24746, 48361, 53140, 24789, 24808, 24825, 24857, 32640, 27397, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 45563, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24907, 32640, 61740, 32640, 32640, 52064, 24984, 25013, 61799, 25045, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 25095, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 54034, 25151, 25188, 25171, 25235, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 25302, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 25340, 32640, 61740, 24702, 35413, 25353, 25385, 25402, 58363, 25449, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 25499, 32640, 61740, 32640, 32640, 53140, 25538, 25575, 25558, 25622, 32640, 25253, 32640, 72986, 32640, 32640, 49347, 54782, 64809, 35297, 64457, 32024, 25672, 25724, 32640, 25308, 42746, 72012, 48724, 25775, 59604, 63895, 70062, 53329, 26051, 44572, 32640, 32640, 53365, 69246, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 36217, 25878, 32640, 32640, 25912, 56403, 72012, 72012, 47453, 69896, 25776, 64787, 25947, 25982, 26472, 26016, 26050, 68602, 32640, 32640, 21278, 65491, 41507, 72012, 47768, 59999, 36922, 55439, 25983, 53287, 66001, 26051, 68608, 32640, 35129, 65495, 72012, 26084, 25776, 26132, 25983, 66375, 26051, 26181, 26227, 36550, 62167, 71378, 26264, 56947, 53286, 26299, 56814, 66968, 50229, 37146, 26336, 26407, 64681, 37193, 26609, 67516, 26450, 26504, 26590, 60773, 47253, 26654, 26722, 26771, 49912, 26461, 51539, 26820, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 29428, 26976, 69042, 27027, 27107, 32640, 25253, 32640, 27176, 32640, 32640, 18907, 32640, 35800, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 27212, 32640, 18617, 32640, 32640, 53140, 27264, 27332, 41428, 27379, 32640, 25253, 32640, 27446, 36386, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 27496, 32640, 61740, 32640, 32640, 45704, 22912, 32640, 27545, 27614, 32640, 25253, 32640, 27679, 32640, 32640, 49347, 54782, 51035, 35297, 32640, 32024, 32640, 27715, 32640, 25308, 72012, 72012, 48724, 25776, 59604, 25983, 61672, 26051, 26051, 49853, 32640, 32640, 70980, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 40010, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 27753, 25776, 25776, 39830, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 27795, 25776, 60349, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 27836, 32640, 26232, 27985, 34535, 60068, 27930, 27958, 60099, 28032, 32640, 32366, 32640, 72986, 32640, 32640, 73079, 29194, 30273, 28620, 31154, 44986, 32640, 18612, 18649, 18757, 18789, 18959, 32755, 28084, 30249, 28403, 29274, 28141, 28173, 28885, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21681, 28259, 30189, 28317, 28376, 29214, 30382, 28201, 30288, 28732, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 28435, 28285, 28497, 28109, 28529, 28561, 28593, 28652, 28684, 28716, 19661, 19735, 19811, 19878, 19910, 19942, 28764, 21709, 32781, 28826, 28935, 28991, 29023, 29361, 30055, 20090, 20138, 20211, 20265, 29171, 28465, 29246, 28344, 29334, 29302, 29393, 20579, 20709, 20774, 29460, 29082, 29111, 29139, 29492, 29611, 20949, 21030, 29555, 29643, 29675, 28857, 29707, 21310, 29804, 29832, 29864, 29896, 29992, 30024, 30105, 30173, 28959, 30221, 29583, 29053, 28794, 28227, 30320, 30352, 29523, 30414, 30442, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 30485, 32640, 61740, 55714, 40332, 67370, 30532, 30549, 30500, 30596, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 25063, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 62487, 66570, 19251, 64424, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 30661, 19661, 19735, 19811, 19878, 19910, 19942, 30758, 30851, 33683, 30826, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 30890, 63521, 30967, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 32640, 31025, 31042, 31089, 31121, 32640, 25253, 32640, 72986, 41921, 32640, 18907, 32640, 23058, 19161, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31186, 32640, 61740, 32640, 32640, 53140, 31304, 31321, 61422, 31368, 32640, 25253, 32640, 72986, 38336, 32640, 18907, 32640, 23058, 19597, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31436, 32640, 22917, 32640, 32640, 53140, 31488, 31505, 63455, 31552, 32640, 25253, 32640, 72986, 23911, 32640, 18907, 32640, 23058, 20233, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 31603, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31688, 32640, 61740, 27887, 32640, 57839, 22912, 31734, 24347, 31775, 32640, 25253, 32640, 31840, 32640, 32640, 18907, 32640, 57508, 20515, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 62571, 27379, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 46497, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 52315, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32497, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 20179, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 31980, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 31979, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 69771, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 41903, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 32012, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 57111, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 27513, 32056, 32087, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 31793, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32154, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32191, 32640, 61740, 32640, 32640, 53140, 32266, 32219, 32317, 32348, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 32398, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 32449, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 32640, 32541, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32639, 61740, 32640, 32640, 53140, 32606, 32625, 66147, 32673, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 32724, 21452, 21374, 21431, 32813, 21618, 21650, 32920, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 32640, 27379, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 33014, 72814, 65242, 23329, 65262, 33049, 33078, 33110, 33141, 72172, 33868, 38406, 33224, 33302, 35892, 33415, 33497, 33529, 33657, 32640, 70241, 33715, 23262, 70547, 65483, 72012, 56115, 31942, 25776, 33771, 25983, 62395, 26051, 60426, 53000, 43338, 33820, 20169, 33900, 28052, 33936, 72012, 34004, 34096, 25776, 69679, 34153, 25983, 34209, 34305, 26051, 34381, 34413, 59316, 60982, 34567, 18580, 43988, 66280, 56105, 34613, 34671, 54769, 57995, 34763, 50540, 69616, 34835, 44365, 69116, 72659, 27683, 51215, 45101, 34941, 55781, 57901, 25776, 68182, 34981, 25983, 35037, 38017, 43551, 35100, 35168, 46148, 32692, 38542, 69316, 67857, 54357, 35200, 37506, 35270, 39191, 36089, 32640, 37090, 24260, 50683, 56669, 60278, 35348, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 43929, 35445, 35530, 35582, 50980, 66874, 47849, 48295, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 35651, 72814, 32640, 32640, 53140, 35689, 35718, 35750, 35781, 32640, 25253, 32640, 32640, 32640, 32640, 42703, 63159, 35832, 71490, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 71083, 54414, 54421, 64131, 72012, 55872, 25809, 25776, 60149, 25844, 25983, 63179, 26051, 26051, 34327, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 35952, 27144, 30726, 72012, 63213, 63138, 25776, 69714, 35989, 25983, 42068, 36035, 26051, 36069, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 20456, 36134, 36191, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 64516, 72814, 48426, 59530, 63767, 36272, 36304, 36336, 36367, 32640, 36432, 25203, 32640, 32640, 41660, 37716, 55922, 36483, 36530, 48415, 59494, 31702, 18855, 62820, 64973, 39682, 72012, 36599, 25776, 18725, 36659, 69934, 36699, 26051, 52493, 36750, 23246, 55732, 34581, 32640, 18679, 55301, 36783, 36820, 35485, 36918, 36954, 37494, 37030, 64702, 65892, 37178, 34467, 32640, 37225, 65319, 32640, 68393, 72012, 37261, 33962, 25776, 37316, 55427, 25983, 39119, 39566, 26051, 49047, 43098, 37375, 42559, 23999, 65491, 72012, 48479, 51277, 25776, 37411, 39842, 45287, 53287, 26051, 67220, 70527, 32640, 37538, 37571, 37131, 46827, 23541, 55996, 67894, 53288, 53572, 47622, 37618, 25915, 66600, 37659, 46843, 32872, 37796, 37836, 46302, 47046, 68392, 23524, 65621, 25983, 37889, 41315, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 37927, 37988, 38060, 47849, 36159, 34716, 26535, 44815, 38151, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 20106, 72814, 32509, 23162, 53140, 38224, 38253, 38285, 38316, 32640, 25253, 32640, 32640, 60657, 39330, 34441, 50711, 54836, 51195, 33270, 38384, 46719, 22206, 33192, 38438, 72385, 38511, 38616, 40937, 20657, 38673, 38705, 39528, 38892, 38940, 32640, 47380, 49323, 32640, 70823, 64131, 72012, 32968, 25809, 25776, 45195, 25844, 25983, 46666, 26051, 26051, 58683, 38996, 32640, 59450, 25692, 27180, 22361, 39052, 64136, 40912, 42209, 25776, 39090, 66443, 25983, 39151, 60300, 26051, 39223, 32640, 32640, 36102, 70444, 72012, 71366, 65683, 25776, 39291, 39362, 35619, 34803, 26051, 43538, 70527, 72942, 37229, 65495, 39402, 46827, 39434, 39492, 52767, 39560, 39598, 39731, 22659, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 19837, 68392, 68106, 33972, 25983, 39769, 58918, 26609, 71375, 56493, 39511, 67952, 33375, 70146, 67746, 39807, 39877, 27300, 39932, 39984, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 22609, 72814, 27464, 30794, 40060, 40119, 40148, 40180, 40211, 40263, 40295, 40364, 40412, 40514, 40546, 40606, 40667, 40699, 40731, 40783, 20976, 40854, 40994, 52527, 25308, 41046, 39699, 41078, 46357, 49141, 41137, 44544, 41236, 41286, 41368, 47192, 41460, 41554, 41610, 40087, 41703, 41735, 41816, 41872, 41968, 42030, 42100, 42250, 42282, 42373, 42458, 42490, 42522, 42554, 42591, 31571, 42679, 24113, 42735, 42778, 42826, 42887, 59586, 42933, 43014, 20677, 52796, 43080, 37857, 50773, 19009, 50153, 72778, 68055, 66201, 43130, 61992, 43205, 43285, 43380, 36003, 43457, 50341, 43583, 43639, 62580, 43704, 43740, 65764, 46827, 43772, 55996, 43804, 43857, 43893, 43961, 72604, 44020, 44104, 67022, 44136, 44196, 44228, 44289, 44397, 41399, 46788, 44452, 69369, 44513, 44648, 70208, 20438, 68896, 51376, 63626, 44257, 54317, 44622, 67433, 55113, 55250, 49487, 51457, 67801, 44680, 44712, 34716, 38736, 44788, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 54076, 72814, 67462, 71804, 46979, 44874, 44903, 44935, 44966, 65157, 25253, 32640, 32640, 45018, 45029, 45061, 36627, 47904, 71490, 70229, 49986, 32640, 30141, 65148, 45093, 45133, 72012, 45175, 25776, 67154, 25983, 61672, 45240, 26051, 53000, 32640, 32640, 25682, 32640, 30614, 64131, 72012, 62187, 25809, 25776, 34052, 25844, 25983, 58051, 26051, 26051, 68586, 34467, 32640, 32640, 25692, 49974, 68393, 36788, 72012, 33962, 51715, 25776, 55427, 25983, 45283, 39566, 26051, 45319, 43098, 32640, 32640, 22533, 65491, 72012, 65748, 51277, 25776, 40635, 39842, 48131, 53287, 26051, 72059, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 26195, 32640, 30913, 33383, 31947, 68516, 43425, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 38767, 44815, 45355, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 72990, 32640, 53140, 45461, 45480, 45512, 45543, 32640, 25253, 25880, 32640, 32640, 32640, 49347, 54782, 64809, 65216, 32640, 32024, 32640, 29772, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 26944, 43348, 64131, 72012, 72012, 45595, 25776, 25776, 45631, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 45666, 62963, 32640, 45736, 45143, 72012, 33962, 47777, 25776, 55427, 45634, 25983, 39566, 62106, 26051, 66507, 32640, 61374, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 45776, 65495, 72012, 45833, 25776, 43236, 25983, 48970, 26051, 35378, 19759, 45883, 40885, 45935, 34121, 45988, 46059, 68691, 46114, 46509, 48784, 46180, 46232, 52911, 56583, 46294, 61320, 46334, 46389, 52972, 46541, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 57068, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 37061, 32640, 46592, 32640, 23927, 23933, 35920, 72528, 46641, 71255, 46698, 32640, 41638, 46765, 32640, 32640, 25308, 72012, 32982, 31942, 25812, 62010, 25983, 52465, 26051, 62071, 44572, 32640, 32640, 32640, 32640, 46875, 64131, 72012, 72012, 46928, 25776, 25777, 25844, 25983, 25846, 26051, 26051, 48238, 66922, 32640, 32640, 32640, 58432, 34888, 72012, 72012, 24139, 25776, 25776, 64186, 25983, 25983, 64365, 26051, 26051, 68602, 32640, 31139, 32640, 65491, 72012, 59125, 47768, 25776, 23575, 39842, 25983, 43409, 26051, 51585, 68608, 32640, 40326, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 23989, 59115, 71381, 31947, 25983, 51580, 26788, 46560, 61892, 58181, 67203, 61301, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 48851, 72814, 23672, 46964, 47011, 47078, 47108, 47140, 47171, 32640, 41336, 32640, 50620, 20998, 40574, 47224, 47285, 49169, 47359, 32640, 35316, 31404, 32640, 22498, 71540, 47426, 22395, 47485, 41998, 47553, 68243, 35005, 43487, 49590, 47654, 45801, 22675, 32476, 32285, 47707, 67491, 67589, 47739, 47809, 47521, 53771, 47881, 39370, 54202, 70106, 63727, 47936, 58552, 32640, 49793, 48007, 32640, 65551, 71979, 37586, 48049, 48729, 71596, 33444, 48130, 48163, 50320, 48235, 48270, 34864, 70560, 48327, 48393, 48458, 72887, 48523, 38468, 37956, 42313, 48632, 55501, 51516, 36886, 48664, 48761, 48816, 50855, 27414, 41840, 48883, 63268, 48941, 45429, 49017, 55015, 49079, 32640, 22725, 23734, 49111, 51113, 69533, 55593, 49224, 46302, 49298, 68392, 71381, 31947, 25983, 51580, 58698, 26609, 49388, 58232, 70503, 49450, 42622, 70146, 67746, 49519, 60834, 49912, 26461, 39900, 47849, 56608, 49551, 26535, 44815, 49622, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 69860, 72814, 32640, 32640, 53140, 22912, 46609, 49741, 49772, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 57444, 31942, 38479, 62010, 25983, 49825, 26051, 53559, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 59709, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 61385, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 55063, 32640, 32640, 32640, 32640, 51342, 72012, 72012, 34031, 25776, 25776, 21586, 25983, 25983, 37804, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 52831, 72814, 72305, 49953, 50018, 50050, 50069, 50101, 50132, 70815, 25253, 24050, 32640, 72261, 50206, 50261, 50293, 50389, 50456, 50572, 49266, 32159, 46476, 50609, 46896, 49653, 37284, 50652, 61556, 51136, 34792, 50743, 43516, 41182, 50834, 50887, 32640, 37764, 32640, 32640, 39657, 23757, 50924, 50956, 53683, 55377, 51012, 52437, 51082, 71275, 51168, 51247, 58552, 31456, 32640, 51318, 32640, 68393, 71632, 34909, 33962, 25776, 51408, 55427, 25983, 51489, 51571, 26051, 51617, 51676, 60646, 71309, 32640, 65491, 66269, 72012, 47768, 51714, 36922, 67551, 25983, 53287, 50411, 26051, 51682, 70346, 19987, 51747, 72012, 24952, 25776, 68123, 51821, 47327, 51856, 50424, 31808, 72723, 44072, 71378, 24163, 55203, 53286, 67732, 46302, 62840, 68392, 67136, 45208, 51824, 51580, 51892, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 49192, 51996, 52096, 48579, 26535, 57041, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32641, 72814, 32640, 52167, 20380, 52202, 52231, 52263, 52294, 52373, 25253, 38352, 32640, 52375, 52359, 29926, 52407, 61167, 51195, 57599, 32024, 25590, 52525, 32640, 52559, 51778, 52613, 52685, 43173, 52736, 25950, 43825, 49580, 44319, 53632, 52043, 52828, 32640, 32640, 32640, 58759, 38563, 72012, 52863, 54749, 25776, 52943, 55231, 25984, 38908, 53056, 26018, 58552, 53105, 32640, 22853, 53172, 39020, 53205, 55838, 69472, 53239, 53488, 67539, 53276, 33788, 39566, 53320, 63643, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 53361, 32640, 72366, 71378, 53397, 57660, 53286, 53431, 46302, 32640, 68392, 71381, 47833, 35238, 66390, 37193, 26609, 71375, 60465, 43860, 63958, 50482, 38641, 53073, 53467, 53538, 49912, 26461, 39900, 47849, 36159, 48078, 53604, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 53715, 36751, 53803, 53858, 53921, 53950, 53982, 54013, 68341, 65423, 54066, 22337, 73196, 54108, 54140, 54172, 54234, 54389, 39321, 25417, 42341, 50174, 54455, 44050, 56059, 66616, 54504, 54555, 45851, 57679, 42130, 56789, 64232, 60925, 56829, 19692, 32640, 54689, 69055, 20609, 57455, 72012, 54726, 52653, 25776, 54814, 63908, 25984, 61227, 36498, 26018, 58552, 32640, 47394, 24383, 68318, 72870, 72012, 54868, 18707, 25776, 69705, 54929, 25983, 71927, 54995, 26051, 43915, 55047, 31632, 29738, 32574, 55095, 55145, 55282, 55174, 55347, 55409, 55471, 55533, 55625, 55661, 26850, 67349, 33333, 55693, 55764, 55813, 55904, 55954, 45409, 55563, 59673, 58326, 64010, 31239, 37627, 56028, 56147, 63574, 71739, 56202, 48600, 52021, 33017, 44420, 56272, 51439, 56304, 26558, 56379, 49469, 56435, 56525, 55629, 58860, 53658, 56557, 38796, 56640, 56760, 53746, 56861, 56918, 47849, 36159, 34716, 35068, 57014, 26905, 57100, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 57143, 60501, 46140, 53140, 57269, 57298, 57330, 57361, 57393, 21867, 57487, 53826, 57561, 73137, 57631, 57725, 57757, 57818, 64532, 33845, 25743, 28903, 32640, 30718, 48491, 57871, 57933, 57965, 50507, 34177, 46420, 65902, 58083, 44572, 34502, 27347, 47675, 69192, 32417, 27057, 58115, 45744, 58167, 58213, 58473, 58264, 36980, 26375, 58296, 44349, 69977, 37742, 31057, 58358, 32640, 35957, 68393, 49673, 58395, 33962, 23558, 65824, 55427, 66456, 46015, 39566, 60313, 47611, 68602, 32640, 47038, 58431, 65491, 72012, 72012, 58464, 25776, 27804, 58505, 25983, 57693, 26051, 26051, 58542, 33253, 32640, 51913, 22383, 49691, 64312, 64327, 50524, 46027, 71028, 38028, 53132, 32640, 21514, 49356, 67641, 68454, 61634, 65986, 49249, 32640, 68392, 71381, 31947, 25983, 51580, 39737, 67971, 58592, 35498, 68821, 42982, 65031, 58624, 58730, 58791, 58892, 49912, 26461, 39900, 47849, 36159, 34716, 60897, 62262, 58971, 59003, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 53024, 32640, 59046, 59088, 59157, 59186, 59218, 59249, 26690, 25253, 32640, 62512, 59314, 32640, 21399, 45956, 59348, 59428, 60204, 32024, 59282, 59482, 59526, 27721, 62325, 42794, 59562, 37343, 41105, 59653, 46262, 57786, 56728, 42158, 59014, 59705, 59741, 32640, 32640, 64131, 27582, 72012, 25809, 51286, 25776, 25844, 68525, 25984, 26051, 69412, 26018, 38086, 59766, 53173, 30453, 31873, 68393, 59807, 72012, 38182, 56458, 25776, 67880, 68261, 25983, 39566, 61247, 26051, 68602, 40380, 32640, 32640, 65491, 72012, 59857, 47966, 60005, 45599, 39842, 71940, 53287, 26051, 59892, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 71116, 32640, 59931, 71378, 25776, 29955, 53286, 26051, 56227, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 36718, 59969, 24280, 60037, 60131, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 54423, 32640, 20742, 60181, 32843, 60251, 67710, 54291, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 29420, 32640, 32640, 32640, 64131, 72012, 72012, 60345, 25776, 25776, 60381, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 53207, 72012, 47768, 27763, 36922, 39842, 71874, 53287, 26051, 60418, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 70720, 71381, 60458, 35226, 48985, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 36240, 60497, 23383, 53140, 60533, 60561, 60593, 60624, 23405, 25467, 22160, 33169, 60689, 60747, 60715, 60805, 60866, 60957, 32640, 36400, 61023, 26995, 32640, 33355, 55315, 59825, 61082, 65831, 61145, 47313, 61199, 61279, 67236, 61352, 32640, 30073, 61417, 71794, 61454, 22979, 61508, 38584, 61544, 61588, 56170, 61624, 61666, 64623, 61704, 26051, 48694, 58552, 65333, 72472, 61736, 61772, 61831, 56082, 61881, 64292, 46200, 55981, 63076, 32888, 56329, 36998, 50357, 58842, 68602, 61924, 31336, 31217, 32949, 61962, 72012, 54897, 52135, 36922, 43253, 54949, 53287, 62059, 62103, 54635, 69791, 32640, 71552, 72012, 20633, 25776, 66700, 25983, 70631, 26051, 43048, 60991, 32640, 27575, 38860, 26267, 35612, 71431, 26052, 46302, 39252, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 59396, 61050, 48909, 62138, 49921, 43861, 50802, 44756, 26873, 47849, 36159, 34716, 33560, 62235, 62294, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 69266, 62427, 62544, 62612, 62644, 62673, 62705, 62736, 31256, 49878, 31910, 32640, 62790, 62885, 62917, 44164, 69556, 51644, 62949, 62995, 45696, 32640, 19278, 63027, 63108, 63211, 63245, 54342, 53506, 63300, 61672, 63378, 63410, 44572, 63450, 21770, 63487, 58560, 32640, 57422, 68884, 61512, 63553, 47513, 61592, 63606, 63675, 29960, 51050, 63717, 37895, 63759, 18562, 21217, 40028, 32560, 63799, 59860, 58135, 43158, 25776, 63843, 70614, 25983, 63875, 63940, 26051, 63990, 64042, 64442, 21262, 32640, 64117, 58399, 38848, 47768, 24174, 64168, 39842, 56347, 53287, 26051, 64218, 68608, 27898, 31520, 65495, 64264, 51931, 42855, 67656, 26365, 64359, 39180, 64397, 32640, 22880, 64131, 71378, 25776, 29955, 53286, 26051, 56886, 32234, 41489, 41766, 51964, 60386, 51580, 64489, 54657, 64564, 34064, 72128, 35550, 42184, 64655, 39628, 49921, 43861, 62758, 40962, 68714, 54610, 64734, 36847, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 25270, 32640, 23111, 32122, 64856, 64887, 64919, 64950, 31389, 65005, 27232, 34519, 65063, 65120, 65088, 61113, 65189, 65294, 65365, 65397, 32640, 65455, 65527, 65583, 65653, 65730, 65796, 42647, 52704, 58025, 65863, 65934, 65966, 66033, 64072, 66099, 26683, 30564, 66131, 66179, 66246, 41522, 66312, 64765, 26100, 66344, 66422, 62027, 63346, 66488, 48098, 66539, 38119, 40439, 30690, 24714, 66648, 46809, 22991, 67082, 66680, 47975, 66732, 66764, 58510, 66819, 66851, 26304, 66906, 66954, 31272, 32640, 67000, 67054, 67114, 21544, 34639, 21568, 67186, 67268, 67325, 67402, 54264, 43607, 48017, 34273, 42426, 67583, 30935, 67621, 41784, 67688, 48203, 67778, 64824, 41671, 20315, 24236, 67833, 44481, 37470, 67926, 59378, 68003, 32640, 68087, 68155, 34696, 68214, 39952, 68293, 68373, 68425, 68486, 66787, 35862, 33375, 70146, 67746, 49921, 43861, 49912, 58817, 68777, 68557, 68640, 68746, 58655, 44815, 68853, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 64085, 32640, 48353, 53140, 68928, 68957, 68989, 69020, 32640, 27125, 27632, 30788, 27143, 32640, 31656, 64595, 69087, 69148, 32640, 32024, 32640, 69224, 32640, 49895, 69298, 39058, 69348, 25776, 49418, 25983, 70024, 69401, 45323, 46448, 24757, 70970, 32640, 27865, 31743, 52581, 61849, 69444, 69504, 54523, 54583, 69588, 33465, 69648, 59899, 33588, 69746, 58552, 69823, 32640, 32640, 69855, 38964, 72012, 72012, 65611, 69892, 25776, 72113, 69928, 25983, 39566, 69966, 26051, 41254, 35657, 32640, 32640, 61476, 72012, 72012, 62354, 25776, 36922, 70009, 25983, 26418, 26051, 26051, 34349, 32640, 18845, 26622, 72012, 27075, 25776, 39460, 70056, 67293, 70094, 41204, 31858, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 45386, 70138, 70178, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 46082, 68666, 70273, 34716, 26535, 44842, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 22217, 68030, 66060, 33739, 70331, 54472, 70378, 70409, 32640, 25253, 32640, 32640, 32640, 32640, 19302, 70476, 56692, 51195, 59775, 43315, 32640, 32640, 27647, 25308, 37113, 62203, 70592, 53244, 62010, 70663, 47583, 56714, 33625, 44572, 32640, 32640, 28000, 32640, 29763, 64131, 55855, 72012, 25809, 51949, 25776, 25844, 56967, 25984, 26051, 33611, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 50577, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 25506, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 70701, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 59056, 32640, 70752, 70788, 70855, 70884, 70916, 70947, 32640, 25253, 32640, 32640, 32640, 32640, 41578, 49709, 71012, 71060, 32640, 32024, 32640, 32640, 71115, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 38108, 32640, 24932, 72012, 72012, 52641, 25776, 25776, 71858, 25983, 25983, 43032, 26051, 26051, 68602, 32640, 71148, 32640, 65491, 51789, 34949, 47768, 56478, 42901, 39842, 71181, 63325, 63418, 36037, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32154, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25640, 43672, 32640, 22790, 58939, 37441, 71228, 41160, 51195, 32640, 22183, 71515, 71307, 32640, 25308, 72012, 71341, 31942, 35465, 71413, 36667, 59621, 26051, 71463, 42401, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 41936, 32640, 68393, 66214, 72012, 71584, 38192, 25776, 42053, 70669, 25983, 39566, 39775, 26051, 68602, 35405, 32640, 32640, 65491, 71628, 72012, 48552, 25776, 36922, 26149, 25983, 53287, 71664, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 37690, 32640, 25253, 66067, 32640, 32640, 32640, 71710, 26739, 42964, 71771, 20325, 32024, 32640, 32640, 32640, 27283, 72012, 59937, 31942, 25776, 52893, 25983, 56982, 26051, 51860, 44572, 23321, 32640, 32640, 37539, 32640, 38825, 72013, 72012, 71836, 53399, 25776, 71906, 39845, 25984, 71678, 53435, 26018, 58552, 30134, 32640, 32640, 32640, 68393, 71972, 72012, 63054, 52123, 25776, 62376, 48188, 25983, 24297, 36872, 26051, 68602, 32640, 32640, 33904, 65491, 72012, 72011, 47768, 42218, 36922, 39842, 71196, 53287, 26051, 72045, 68608, 32640, 48843, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 45251, 32640, 34258, 23504, 63811, 25776, 68806, 63685, 26051, 46302, 23041, 68392, 72091, 44738, 54963, 34731, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 72160, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 72268, 72234, 40231, 72204, 72300, 72337, 72417, 72449, 32640, 25253, 71149, 72986, 32640, 32640, 22011, 19703, 24646, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 21985, 22069, 72504, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 70431, 53140, 72560, 72589, 60219, 72636, 32640, 25253, 32640, 72986, 50892, 50890, 18907, 32640, 40751, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61930, 32640, 32640, 19846, 72691, 72708, 30629, 72755, 32640, 25253, 32640, 72810, 59270, 52170, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22311, 22069, 72846, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 32640, 72919, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 35297, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 48724, 25776, 59604, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 34485, 32640, 23212, 23229, 52327, 72974, 32640, 32640, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 43659, 32640, 18612, 18649, 18757, 18789, 18959, 21985, 22069, 72504, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 73022, 21452, 21374, 21431, 73111, 21618, 21650, 73169, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 180523, 180523, 180523, 180523, 0, 188716, 188716, 188716, 180523, 180523, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 0, 188716, 180523, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 139264, 147456, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 131072, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 367, 188716, 180523, 188716, 188716, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 180523, 188716, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2289, 0, 2290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2368, 2369, 0, 0, 2371, 0, 0, 0, 0, 2376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 307, 0, 0, 5767168, 0, 0, 0, 4857856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 5414912, 5447680, 0, 0, 5562368, 5636096, 5685248, 0, 5750784, 5873664, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1877, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1889, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 59821, 57886, 59823, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 58853, 57909, 57909, 58857, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58871, 0, 0, 5636096, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 5480448, 4358144, 4358144, 4358144, 4358144, 4857856, 4874240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5259264, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5414912, 4358144, 5447680, 4358144, 5464064, 4358144, 5480448, 5562368, 4358144, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140, 0, 0, 1145, 0, 4857856, 4874240, 0, 0, 4923392, 5562368, 4358144, 4358144, 4358144, 5636096, 4358144, 5685248, 4358144, 4358144, 5750784, 4358144, 4358144, 4358144, 4358144, 4358144, 5873664, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6275072, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 4923392, 0, 0, 0, 0, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2766, 0, 0, 0, 0, 0, 0, 4825088, 0, 0, 5177344, 0, 0, 0, 0, 5701632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5808128, 0, 0, 0, 0, 4792320, 4833280, 0, 0, 5701632, 0, 5242880, 0, 0, 0, 0, 0, 0, 0, 5341184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 5652480, 0, 5701632, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4825088, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5177344, 4358144, 4358144, 4358144, 4358144, 4358144, 5242880, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5341184, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5627904, 5652480, 4358144, 5701632, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 483328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5341184, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5627904, 5652480, 4358144, 5701632, 4358144, 4358144, 5808128, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 1051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 0, 6422528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5619712, 0, 0, 0, 0, 0, 0, 0, 5726208, 5758976, 0, 0, 5791744, 0, 0, 0, 0, 0, 0, 0, 1151, 1278, 0, 0, 0, 0, 0, 0, 1285, 0, 0, 0, 0, 0, 0, 0, 1290, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 848, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 0, 6479872, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4931584, 4939776, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5054464, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5210112, 4358144, 4358144, 4358144, 4358144, 5292032, 4358144, 4358144, 4358144, 4358144, 5365760, 4358144, 4358144, 4358144, 5455872, 4358144, 4358144, 4358144, 4358144, 4358144, 5554176, 5570560, 5578752, 5619712, 5668864, 4358144, 4358144, 4358144, 5791744, 5816320, 4358144, 5857280, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6119424, 4358144, 6168576, 4358144, 4358144, 4358144, 4358144, 6242304, 4358144, 6291456, 4358144, 6316032, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 4939776, 0, 0, 0, 0, 0, 0, 5054464, 0, 0, 0, 0, 0, 0, 0, 0, 5210112, 0, 0, 0, 0, 5292032, 0, 0, 0, 0, 5365760, 0, 0, 0, 5455872, 0, 0, 0, 0, 0, 5554176, 5570560, 5578752, 5619712, 5668864, 0, 5578752, 5619712, 5668864, 0, 0, 0, 5791744, 5816320, 0, 5857280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6119424, 0, 6168576, 0, 0, 0, 0, 0, 6242304, 0, 6291456, 0, 6316032, 0, 6291456, 0, 6316032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4931584, 4939776, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 491520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 5578752, 5619712, 5668864, 4358144, 4358144, 4358144, 5791744, 5816320, 4358144, 5857280, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6119424, 4358144, 6168576, 4358144, 4358144, 4358144, 4358144, 4358144, 6242304, 4956160, 4964352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 0, 0, 0, 5799936, 0, 5881856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6373376, 6389760, 0, 0, 0, 0, 0, 1758, 0, 0, 1761, 0, 1763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6488064, 6103040, 0, 0, 0, 0, 0, 6184960, 5316608, 0, 0, 5644288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6217728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3384, 0, 0, 0, 3388, 0, 0, 0, 0, 0, 3394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5390336, 5308416, 5488640, 0, 0, 5070848, 5431296, 0, 6430720, 0, 0, 5160960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4784128, 0, 0, 0, 0, 0, 0, 0, 0, 3623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 417, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6283264, 6332416, 0, 0, 0, 5881856, 0, 5382144, 0, 0, 0, 0, 0, 0, 6266880, 4784128, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4915200, 4358144, 4956160, 4972544, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5070848, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5218304, 4358144, 5267456, 4358144, 4358144, 5308416, 5316608, 4358144, 4358144, 4358144, 5431296, 4358144, 5488640, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5799936, 4358144, 4358144, 5881856, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6103040, 4358144, 4358144, 4358144, 6184960, 4358144, 4358144, 6283264, 4358144, 4358144, 6332416, 4358144, 4358144, 4358144, 6389760, 4358144, 4358144, 6430720, 6438912, 4358144, 4358144, 4358144, 6266880, 6488064, 0, 0, 0, 6266880, 6488064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3149, 0, 0, 0, 0, 3154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 4784128, 4358144, 4358144, 4358144, 4849664, 4358144, 4358144, 4358144, 4358144, 4358144, 4915200, 0, 5660672, 5718016, 0, 5865472, 0, 0, 6037504, 0, 0, 6078464, 0, 0, 6340608, 0, 6455296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5472256, 0, 0, 0, 6209536, 0, 0, 0, 0, 6176768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4898816, 0, 5709824, 0, 0, 0, 0, 0, 1790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2348, 0, 0, 0, 0, 0, 0, 0, 0, 5283840, 0, 0, 0, 0, 5251072, 0, 6414336, 5832704, 0, 5955584, 0, 0, 4358144, 4358144, 4841472, 4358144, 4358144, 4358144, 4898816, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368640, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 5111808, 4358144, 4358144, 4358144, 4358144, 4358144, 5283840, 4358144, 4358144, 4358144, 4358144, 5472256, 5521408, 4358144, 4358144, 4358144, 5595136, 5709824, 5718016, 4358144, 5824512, 5865472, 4358144, 4358144, 5922816, 4358144, 4358144, 6021120, 4358144, 6037504, 4358144, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 4358144, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 139264, 147456, 0, 0, 0, 0, 0, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 3773, 0, 3627, 3775, 0, 0, 3778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 4024, 521, 4026, 521, 521, 4028, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 6021120, 0, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4841472, 4358144, 4358144, 4358144, 4898816, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 499712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5111808, 4358144, 4358144, 4358144, 4358144, 4358144, 5283840, 4358144, 4358144, 4358144, 4358144, 5472256, 5521408, 4358144, 4358144, 4358144, 4358144, 5595136, 5709824, 5718016, 4358144, 5824512, 5865472, 4358144, 4358144, 5922816, 0, 5029888, 5038080, 0, 0, 5103616, 5201920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6406144, 5357568, 0, 5505024, 0, 0, 0, 0, 0, 5890048, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1873, 521, 521, 521, 521, 521, 521, 521, 521, 1884, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3216, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 60569, 57886, 60570, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58842, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 58854, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59962, 59963, 57909, 57909, 57909, 57909, 57909, 57909, 59970, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 6160384, 0, 5095424, 5349376, 0, 5275648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5947392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6471680, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4997120, 4358144, 4358144, 5038080, 4358144, 4358144, 4358144, 5095424, 5103616, 4358144, 4358144, 5201920, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 0, 0, 0, 0, 0, 0, 0, 0, 4997120, 0, 0, 5038080, 0, 0, 0, 0, 6406144, 0, 0, 0, 0, 0, 0, 0, 0, 4997120, 0, 0, 5038080, 0, 0, 0, 5095424, 5103616, 0, 0, 5201920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5890048, 0, 0, 0, 6029312, 0, 0, 0, 0, 6160384, 0, 0, 0, 0, 0, 0, 0, 6406144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4997120, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 4358144, 4358144, 4358144, 0, 0, 0, 4890624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5898240, 5963776, 0, 0, 6193152, 0, 0, 5406720, 6397952, 5300224, 5234688, 5423104, 0, 0, 0, 0, 5988352, 0, 0, 6135808, 6307840, 0, 5996544, 4800512, 0, 6356992, 0, 0, 0, 5496832, 0, 0, 0, 0, 0, 5611520, 0, 0, 0, 0, 0, 0, 0, 1187, 0, 0, 1190, 1191, 0, 0, 0, 0, 1195, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 4947968, 5021696, 5529600, 0, 0, 5169152, 0, 0, 0, 4800512, 4808704, 4358144, 4358144, 4890624, 4358144, 4947968, 4358144, 4358144, 4358144, 5046272, 4358144, 4358144, 4358144, 4358144, 5185536, 4358144, 5234688, 5300224, 4358144, 4358144, 5406720, 5529600, 4358144, 4358144, 4358144, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 4800512, 4808704, 0, 0, 4890624, 0, 4947968, 0, 0, 0, 5046272, 0, 0, 0, 0, 5185536, 0, 5234688, 5300224, 0, 0, 5406720, 5529600, 0, 0, 0, 0, 5898240, 0, 0, 0, 0, 0, 0, 0, 0, 6307840, 0, 0, 6356992, 6381568, 6397952, 4800512, 4808704, 0, 0, 4890624, 0, 0, 6356992, 6381568, 6397952, 4800512, 4808704, 4358144, 4358144, 4890624, 4358144, 4947968, 4358144, 4358144, 4358144, 5046272, 4358144, 4358144, 4358144, 4358144, 5185536, 4358144, 5234688, 5300224, 4358144, 4358144, 5406720, 5529600, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4907008, 0, 5079040, 6094848, 0, 0, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 0, 4907008, 0, 5079040, 0, 5226496, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 5021696, 4358144, 4358144, 5021696, 0, 0, 0, 4980736, 0, 0, 0, 0, 0, 5373952, 5734400, 6045696, 0, 0, 0, 0, 0, 2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2290, 0, 0, 0, 0, 0, 0, 0, 6152192, 0, 0, 0, 6316032, 0, 0, 0, 0, 5816320, 6291456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792, 3627, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 0, 0, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5324800, 5373952, 5537792, 5545984, 5586944, 5734400, 5971968, 0, 6045696, 0, 6070272, 0, 0, 0, 0, 6348800, 0, 4866048, 4882432, 0, 4980736, 0, 0, 0, 0, 0, 0, 0, 0, 521, 831, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 877, 521, 521, 521, 521, 895, 521, 521, 57886, 57886, 58249, 0, 5324800, 5373952, 5537792, 5545984, 5586944, 5734400, 5971968, 0, 6045696, 0, 6070272, 0, 0, 0, 0, 6348800, 4358144, 4866048, 4882432, 4358144, 4980736, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5324800, 5373952, 5537792, 5545984, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 6348800, 0, 4866048, 4882432, 0, 4980736, 0, 0, 0, 0, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 3441, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3454, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 60242, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60250, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60293, 57886, 57886, 57886, 60296, 60297, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59917, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 5693440, 0, 6496256, 5144576, 5136384, 0, 5914624, 4358144, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 0, 0, 5005312, 0, 0, 0, 5120000, 5136384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6324224, 0, 0, 5005312, 0, 0, 0, 5120000, 5136384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6324224, 4358144, 0, 0, 900, 900, 900, 4825988, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5178244, 900, 900, 900, 900, 900, 5219204, 900, 5268356, 900, 900, 5309316, 5317508, 900, 900, 900, 5432196, 900, 5489540, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5800836, 900, 900, 5882756, 900, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 3627, 0, 0, 0, 0, 0, 0, 1759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1772, 0, 1774, 0, 0, 0, 1778, 0, 0, 0, 1782, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 5013504, 0, 0, 6053888, 0, 0, 0, 0, 6012928, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 0, 0, 5013504, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 692, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 6053888, 0, 0, 0, 0, 0, 5013504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6053888, 0, 0, 0, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5799936, 4358144, 4358144, 5881856, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6103040, 4358144, 4358144, 4358144, 6184960, 4358144, 4358144, 4358144, 6283264, 4358144, 4358144, 6332416, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 901, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 5414912, 0, 5447680, 0, 5464064, 0, 5480448, 5562368, 0, 0, 0, 5636096, 0, 5685248, 0, 0, 5750784, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5193728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5193728, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 0, 1959, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 715, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1250, 1252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 5742592, 0, 0, 0, 6094848, 0, 0, 4907008, 0, 5079040, 0, 5226496, 0, 5742592, 0, 0, 0, 6094848, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 4358144, 5062656, 0, 0, 0, 4358144, 5062656, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 5062656, 0, 0, 0, 0, 0, 6225920, 0, 5062656, 0, 0, 0, 0, 0, 6225920, 4358144, 5062656, 4358144, 4358144, 4358144, 0, 900, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 2396, 521, 521, 521, 521, 2400, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3199, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1390, 521, 521, 1394, 521, 521, 521, 521, 521, 1401, 521, 521, 4358144, 4358144, 4358144, 6225920, 0, 0, 0, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 4816896, 0, 0, 0, 0, 6086656, 4816896, 0, 0, 0, 0, 6086656, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 5087232, 0, 5931008, 4358144, 5332992, 5980160, 4358144, 0, 5332992, 5980160, 0, 0, 5332992, 5980160, 0, 4358144, 5332992, 5980160, 4358144, 5439488, 5128192, 4358144, 5128192, 0, 5128192, 0, 5128192, 4358144, 4358144, 0, 0, 4358144, 4358144, 0, 0, 4358144, 6004736, 6004736, 6004736, 6004736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1289, 0, 0, 0, 0, 0, 0, 0, 0, 1294, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2816, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645, 221645, 221645, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 221645, 461, 221645, 221645, 221645, 461, 221645, 221645, 221645, 221645, 221645, 221645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1780, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3414, 0, 0, 0, 0, 3418, 0, 0, 0, 0, 3423, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237568, 301, 0, 305, 237568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 305, 237982, 147456, 0, 0, 0, 305, 0, 0, 0, 0, 0, 2334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2349, 0, 0, 0, 0, 0, 0, 0, 3406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3420, 3421, 0, 0, 0, 0, 3426, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 516096, 0, 0, 0, 0, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 0, 305, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1870, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2453, 521, 521, 521, 2456, 521, 521, 521, 521, 521, 2461, 521, 305, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 65536, 302, 0, 4268032, 98304, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4210978, 24578, 3, 0, 0, 296, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 245760, 0, 245760, 0, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 4210978, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1270, 0, 0, 2059, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 310, 0, 0, 0, 310, 310, 311, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 674, 0, 0, 0, 0, 0, 0, 262144, 262144, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 301, 0, 0, 0, 262144, 0, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 0, 262731, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 3439, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3670, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60591, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59853, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60298, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 262731, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 245760, 245760, 245760, 245760, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278528, 278528, 0, 0, 131072, 278528, 0, 0, 0, 278528, 0, 0, 0, 0, 278528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 384, 0, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 0, 278528, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3438, 521, 521, 521, 521, 3442, 521, 521, 521, 521, 521, 521, 521, 3448, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1901, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1921, 521, 521, 278528, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 262144, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 262144, 0, 262144, 0, 0, 0, 139264, 147456, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 302, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 631, 0, 4268032, 305, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1506, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2810, 2811, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 302, 0, 306, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 733, 0, 739, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 306, 139264, 287138, 0, 0, 0, 306, 0, 0, 0, 0, 0, 2386, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2402, 521, 2404, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59830, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60836, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60274, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 0, 306, 0, 0, 0, 0, 0, 521, 521, 521, 3437, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3449, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3464, 521, 3466, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61250, 57909, 57909, 61252, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 59994, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 306, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 66168, 0, 4268032, 305, 98939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2352, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 303, 303, 0, 0, 303, 303, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 373, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 368, 303, 0, 295215, 303, 303, 303, 303, 295285, 295215, 295215, 295215, 295215, 295215, 295215, 303, 303, 303, 303, 303, 303, 295285, 295215, 295215, 295215, 303, 303, 303, 295285, 139264, 147456, 295215, 295215, 303, 303, 295215, 303, 303, 131072, 303, 303, 303, 303, 295215, 303, 303, 303, 303, 295215, 303, 295215, 295215, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 295215, 295215, 295215, 295215, 295215, 303, 303, 303, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 303, 295215, 295215, 295215, 295215, 295215, 295215, 295215, 303, 0, 303, 0, 303, 303, 303, 295215, 303, 303, 303, 295215, 295215, 303, 295215, 303, 295215, 295215, 295215, 295215, 295215, 295215, 295215, 295215, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295215, 295215, 295215, 295215, 295215, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4359045, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 319488, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1743, 0, 0, 0, 0, 0, 0, 0, 1751, 1752, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 319488, 0, 319488, 319488, 319488, 0, 24578, 3, 0, 0, 4366336, 253952, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4284416, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 521, 2389, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3219, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60571, 57886, 57886, 57886, 57886, 57886, 57886, 60579, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 327680, 335872, 327680, 327680, 327680, 335872, 327680, 327680, 327680, 327680, 327680, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49716, 0, 0, 0, 0, 0, 327680, 49716, 327680, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 106496, 0, 0, 4284416, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49152, 977, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6463488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 4939776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 344064, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 357, 358, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 4276224, 1245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 352256, 0, 0, 0, 0, 0, 0, 131072, 0, 352256, 352256, 0, 0, 352256, 0, 0, 352256, 0, 352256, 0, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1197, 0, 367, 367, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 1, 291, 3, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 360448, 360448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 1, 0, 3, 155941, 155941, 295, 0, 629, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 1245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 58796, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59402, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58826, 57886, 57886, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59502, 57886, 0, 2281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 2357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3428, 0, 57909, 59926, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58906, 57909, 57909, 59952, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 60009, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 60035, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60937, 521, 3212, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59387, 59388, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60604, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60320, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60702, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 3612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 57886, 57886, 60830, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60853, 57886, 57886, 57936, 57936, 57936, 57936, 60914, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60057, 57936, 57936, 57936, 57936, 61027, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61045, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60634, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59493, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 61048, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61056, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60378, 57936, 57936, 57936, 57886, 57886, 57886, 57886, 61156, 57886, 57886, 57886, 57886, 61157, 61158, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59997, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 61175, 57909, 57909, 57909, 57909, 61176, 61177, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61194, 57936, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61078, 61079, 57936, 57936, 57936, 57936, 61083, 61084, 57936, 57936, 57936, 57936, 57936, 61088, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61195, 61196, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3177, 521, 521, 521, 521, 521, 521, 3184, 521, 3186, 521, 521, 521, 57936, 57936, 57936, 57936, 57936, 61270, 57936, 57936, 57936, 57936, 57936, 57936, 61276, 57936, 57936, 57936, 61280, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 1791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 3947, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61306, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58312, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61322, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61338, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3759, 521, 57886, 61105, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 61439, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 61452, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61465, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60413, 57936, 57936, 57936, 57936, 57936, 57936, 60421, 57936, 57936, 57936, 57936, 57936, 60426, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 4077, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376832, 376832, 376832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1268, 1269, 0, 0, 0, 0, 0, 419, 419, 419, 419, 590, 590, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 0, 419, 0, 0, 0, 0, 0, 521, 1866, 521, 521, 521, 521, 521, 521, 1872, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 60568, 57886, 57886, 57886, 57886, 57886, 57886, 60575, 57886, 60577, 57886, 57886, 419, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2817, 0, 0, 0, 4268773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 637, 731, 0, 735, 736, 637, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393678, 393678, 393678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4025, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 393678, 0, 393678, 393678, 393678, 0, 393678, 393678, 393678, 393678, 393678, 393678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 425984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3176, 521, 521, 521, 521, 521, 3181, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 375, 0, 0, 0, 0, 0, 327, 375, 330, 374, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 57887, 521, 57887, 521, 521, 57887, 521, 521, 57910, 57887, 521, 521, 57887, 57887, 57887, 57910, 0, 0, 0, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 0, 420, 0, 0, 0, 0, 0, 521, 3435, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1916, 521, 521, 521, 521, 521, 521, 420, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 304, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2791, 0, 0, 1239, 0, 0, 0, 741, 1246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 1322, 521, 521, 521, 521, 521, 521, 521, 2468, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60276, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 2468, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60305, 57886, 57886, 0, 0, 0, 2963, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 308, 309, 0, 0, 0, 0, 0, 0, 1815, 0, 0, 0, 0, 0, 0, 0, 0, 1821, 0, 1823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3127, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 417792, 417792, 0, 0, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 418101, 417792, 417792, 418100, 418101, 417792, 417792, 418100, 417792, 418100, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 1, 24578, 3, 0, 0, 4366964, 0, 0, 0, 0, 0, 301, 302, 311296, 4268032, 305, 306, 0, 434176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1859, 0, 0, 1860, 0, 0, 900, 900, 5415812, 900, 5448580, 900, 5464964, 900, 5481348, 5563268, 900, 900, 900, 5636996, 900, 5686148, 900, 900, 5751684, 900, 900, 900, 900, 900, 5874564, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6464388, 0, 0, 0, 0, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 4932560, 4940752, 976, 976, 976, 976, 976, 4359044, 4858756, 4875140, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5260164, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5415812, 4359044, 5448580, 4359044, 5464964, 4359044, 5481348, 5563268, 4359044, 4359044, 4359044, 5636996, 4359044, 5686148, 4359044, 4359044, 5751684, 4359044, 4359044, 4359044, 4359044, 4359044, 5874564, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6275972, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5342084, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5628804, 5653380, 4359044, 5702532, 4359044, 4359044, 5809028, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4907008, 0, 5079040, 6094848, 0, 0, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 900, 4907908, 900, 5079940, 900, 5227396, 900, 5243780, 900, 900, 900, 900, 900, 900, 900, 5342084, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5628804, 5653380, 900, 5702532, 900, 900, 900, 900, 900, 900, 5211012, 900, 900, 900, 900, 5292932, 900, 900, 900, 900, 5366660, 900, 900, 900, 5456772, 900, 900, 900, 900, 900, 5555076, 5571460, 5579652, 5620612, 5669764, 900, 0, 0, 976, 976, 976, 4826064, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5178320, 976, 976, 976, 976, 976, 5112784, 976, 976, 976, 976, 976, 5284816, 976, 976, 976, 976, 5473232, 5522384, 976, 976, 976, 976, 5596112, 5710800, 5718992, 976, 5825488, 5866448, 976, 976, 5923792, 976, 5243856, 976, 976, 976, 976, 976, 976, 976, 5342160, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5628880, 5653456, 976, 5702608, 976, 976, 976, 976, 976, 976, 976, 5260240, 976, 976, 976, 976, 976, 976, 976, 976, 5415888, 976, 5448656, 976, 5465040, 976, 5481424, 5563344, 976, 976, 976, 5637072, 976, 5686224, 976, 976, 5751760, 976, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 0, 0, 0, 0, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 4932484, 4940676, 900, 900, 900, 900, 900, 900, 5055364, 900, 900, 5112708, 900, 900, 900, 900, 900, 5284740, 900, 900, 900, 900, 5473156, 5522308, 900, 900, 900, 900, 5596036, 5710724, 5718916, 900, 5825412, 5866372, 900, 900, 5923716, 900, 900, 6022020, 900, 900, 900, 5792644, 5817220, 900, 5858180, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6120324, 900, 6169476, 900, 900, 900, 900, 900, 6243204, 900, 6292356, 900, 6316932, 976, 5055440, 976, 976, 976, 976, 976, 976, 976, 976, 5211088, 976, 976, 976, 976, 5293008, 976, 976, 976, 976, 5366736, 976, 976, 976, 5456848, 976, 976, 976, 976, 976, 5555152, 5571536, 5579728, 5620688, 5669840, 976, 976, 976, 5792720, 5817296, 976, 5858256, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6120400, 976, 6169552, 976, 976, 976, 976, 976, 6243280, 976, 6292432, 976, 6317008, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6464464, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4932484, 4940676, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 900, 900, 900, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4359044, 5055364, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5211012, 4359044, 4359044, 4359044, 4359044, 5292932, 4359044, 4359044, 4359044, 4359044, 5366660, 4359044, 4359044, 4359044, 5456772, 4359044, 4359044, 4359044, 4359044, 4359044, 5555076, 5571460, 5579652, 5620612, 5669764, 4359044, 4359044, 4359044, 5792644, 5817220, 4359044, 5858180, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6120324, 4359044, 6169476, 4359044, 4359044, 4359044, 4359044, 4359044, 6243204, 4359044, 6292356, 4359044, 6316932, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6464388, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 4358144, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 4785028, 900, 900, 900, 4850564, 900, 900, 900, 900, 900, 4916100, 900, 4957060, 4973444, 900, 900, 900, 900, 900, 900, 5071748, 900, 900, 5194628, 900, 900, 900, 900, 900, 900, 900, 900, 976, 976, 976, 976, 976, 5194704, 976, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4359044, 4359044, 4359044, 5194628, 4359044, 0, 0, 4785104, 976, 976, 976, 4850640, 976, 976, 976, 976, 976, 4916176, 976, 4957136, 4973520, 976, 976, 976, 976, 976, 976, 5071824, 976, 976, 976, 976, 976, 976, 976, 5219280, 976, 976, 6357968, 6382544, 6398928, 4801412, 4809604, 4359044, 4359044, 4891524, 4359044, 4948868, 4359044, 4359044, 4359044, 5047172, 4359044, 4359044, 4359044, 4359044, 5186436, 4359044, 5235588, 5301124, 4359044, 4359044, 5407620, 5530500, 4359044, 4359044, 4359044, 4359044, 4359044, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 4924292, 900, 900, 900, 900, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1264, 0, 0, 0, 0, 0, 0, 0, 5268432, 976, 976, 5309392, 5317584, 976, 976, 976, 5432272, 976, 5489616, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5800912, 976, 976, 5882832, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 976, 6104016, 976, 976, 976, 6185936, 976, 976, 976, 6284240, 976, 976, 6333392, 976, 976, 976, 6390736, 976, 976, 6431696, 6439888, 4785028, 4359044, 4359044, 4359044, 4850564, 4359044, 4359044, 4359044, 4359044, 4359044, 4916100, 4359044, 4957060, 4973444, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5071748, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5219204, 4359044, 5268356, 4359044, 4359044, 5309316, 5317508, 4359044, 4359044, 4359044, 5432196, 4359044, 5489540, 4359044, 4359044, 4359044, 4359044, 4359044, 6054788, 4359044, 4359044, 4359044, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 5096324, 5104516, 900, 900, 5202820, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5890948, 900, 900, 900, 6030212, 900, 900, 900, 900, 6161284, 900, 900, 900, 900, 6407044, 976, 976, 976, 976, 976, 976, 976, 976, 4998096, 976, 976, 5039056, 976, 976, 976, 5096400, 5104592, 976, 976, 5202896, 976, 976, 976, 976, 976, 976, 976, 5891024, 976, 976, 976, 6030288, 976, 976, 976, 976, 6161360, 976, 976, 976, 976, 976, 976, 976, 6407120, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4998020, 4359044, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 900, 900, 4842372, 900, 900, 900, 4899716, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 975, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6300624, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5809028, 6038404, 900, 900, 6079364, 6112132, 900, 6177668, 6210436, 900, 6235012, 900, 900, 900, 900, 900, 900, 900, 0, 0, 976, 976, 4842448, 976, 976, 976, 4899792, 976, 976, 976, 976, 976, 976, 5874640, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6276048, 976, 976, 976, 976, 976, 976, 976, 976, 976, 0, 900, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5112708, 4359044, 4359044, 4359044, 4359044, 4359044, 5284740, 4359044, 4359044, 4359044, 4359044, 5473156, 5522308, 4359044, 4359044, 4359044, 4359044, 5596036, 5710724, 5718916, 4359044, 5825412, 5866372, 4359044, 4359044, 5923716, 976, 6022096, 976, 6038480, 976, 976, 6079440, 6112208, 976, 6177744, 6210512, 976, 6235088, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4842372, 4359044, 4359044, 4359044, 4899716, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5800836, 4359044, 4359044, 5882756, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6103940, 4359044, 4359044, 4359044, 6185860, 4359044, 4359044, 4359044, 6284164, 4359044, 4359044, 6333316, 4359044, 4359044, 6022020, 4359044, 6038404, 4359044, 4359044, 6079364, 6112132, 4359044, 6177668, 6210436, 4359044, 6235012, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 4358144, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 1760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 419, 0, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 900, 900, 900, 900, 900, 900, 900, 900, 4998020, 900, 900, 5038980, 4359044, 5038980, 4359044, 4359044, 4359044, 5096324, 5104516, 4359044, 4359044, 5202820, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5890948, 4359044, 4359044, 4359044, 6030212, 4359044, 4359044, 4359044, 4359044, 6161284, 4359044, 4359044, 4359044, 6226820, 0, 0, 0, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 4817796, 900, 900, 900, 900, 6087556, 4817872, 976, 976, 976, 976, 6087632, 4817796, 4359044, 4359044, 4359044, 4359044, 6087556, 5087232, 4358144, 4358144, 4358144, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 4801412, 4809604, 900, 900, 4891524, 900, 4948868, 900, 900, 900, 5047172, 900, 900, 900, 900, 900, 6054788, 900, 900, 900, 976, 976, 5014480, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6054864, 976, 976, 976, 4359044, 4359044, 5014404, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6407044, 4358144, 4358144, 4358144, 900, 900, 900, 4890624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5898240, 5963776, 0, 0, 6193152, 0, 0, 5406720, 6397952, 5186436, 900, 5235588, 5301124, 900, 900, 5407620, 5530500, 900, 900, 900, 900, 5899140, 900, 900, 900, 900, 900, 900, 900, 900, 6308740, 900, 900, 6357892, 6382468, 6398852, 4801488, 4809680, 976, 976, 4891600, 976, 4948944, 976, 976, 976, 5047248, 976, 976, 976, 976, 5186512, 976, 5235664, 5301200, 976, 976, 5407696, 5530576, 976, 976, 976, 976, 5899216, 976, 976, 976, 976, 976, 976, 976, 976, 6308816, 5899140, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6308740, 4359044, 4359044, 6357892, 6382468, 6398852, 5021696, 4358144, 4358144, 5022596, 900, 900, 0, 4980736, 0, 0, 0, 0, 0, 5373952, 5734400, 6045696, 0, 0, 0, 0, 0, 2771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2785, 0, 2786, 0, 0, 0, 0, 0, 0, 0, 0, 1843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1263, 0, 0, 0, 0, 0, 0, 0, 0, 4980736, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5324800, 5373952, 5537792, 5545984, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 6348800, 900, 4866948, 4883332, 900, 4981636, 900, 900, 900, 900, 5325700, 5374852, 5538692, 5546884, 5587844, 5735300, 5972868, 900, 6046596, 900, 6071172, 900, 900, 900, 900, 6349700, 976, 4867024, 4883408, 976, 4981712, 976, 976, 976, 976, 976, 976, 976, 976, 5325776, 5374928, 5538768, 5546960, 5587920, 5735376, 5972944, 976, 6046672, 976, 6071248, 976, 976, 976, 976, 6349776, 4359044, 4866948, 4883332, 4359044, 4981636, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5325700, 5374852, 5538692, 5546884, 5587844, 5735300, 5972868, 4359044, 6046596, 4359044, 6071172, 4359044, 4359044, 4359044, 4359044, 6349700, 4358144, 6144000, 900, 6144900, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 655, 0, 0, 521, 521, 521, 521, 521, 845, 521, 521, 861, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59499, 57909, 57909, 57909, 57886, 5693440, 0, 6496256, 5144576, 5136384, 0, 5914624, 4358144, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 900, 900, 5006212, 900, 900, 900, 5120900, 5137284, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6325124, 976, 976, 5006288, 976, 976, 976, 5120976, 5137360, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6325200, 4359044, 4359044, 4359044, 6390660, 4359044, 4359044, 6431620, 6439812, 4358144, 4358144, 4358144, 6266880, 6488064, 900, 900, 900, 6267780, 6488964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1767, 0, 0, 0, 0, 0, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4359044, 5006212, 4359044, 4359044, 4359044, 5120900, 5137284, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6325124, 5914624, 5915524, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 3627, 0, 0, 0, 0, 0, 0, 2285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1265, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6300548, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 0, 5013504, 0, 0, 6053888, 0, 0, 0, 0, 6012928, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 900, 900, 5014404, 900, 900, 900, 900, 6275972, 900, 900, 900, 900, 900, 900, 900, 900, 900, 0, 0, 977, 976, 976, 976, 976, 976, 4858832, 4875216, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 0, 0, 0, 0, 900, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6300548, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 900, 5743492, 900, 900, 900, 6095748, 900, 976, 4907984, 976, 5080016, 976, 5227472, 976, 5743568, 976, 976, 976, 6095824, 976, 4359044, 4907908, 4359044, 5079940, 4359044, 5227396, 4359044, 5743492, 4359044, 4359044, 4359044, 6095748, 4359044, 5062656, 0, 0, 0, 4358144, 5062656, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 5063556, 900, 900, 900, 900, 900, 6226820, 976, 5063632, 976, 976, 976, 976, 976, 6226896, 4359044, 5063556, 4359044, 4359044, 4359044, 4825988, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5178244, 4359044, 4359044, 4359044, 4359044, 4359044, 5243780, 4359044, 0, 5931008, 4358144, 5332992, 5980160, 4358144, 900, 5333892, 5981060, 900, 976, 5333968, 5981136, 976, 4359044, 5333892, 5981060, 4359044, 5439488, 5128192, 4358144, 5129092, 900, 5129168, 976, 5129092, 4359044, 4358144, 900, 976, 4359044, 4358144, 900, 976, 4359044, 6004736, 6005636, 6005712, 6005636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2345, 0, 0, 0, 0, 0, 2351, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 450560, 0, 450560, 450560, 450560, 450560, 450560, 450560, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 0, 450560, 0, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1824, 0, 0, 0, 0, 0, 0, 1729, 0, 0, 0, 0, 0, 0, 450560, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 0, 2359296, 0, 0, 0, 2359296, 0, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 4358144, 6291456, 4358144, 6316032, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 302, 0, 0, 306, 0, 0, 0, 0, 0, 0, 2335, 0, 0, 0, 0, 0, 2339, 0, 0, 0, 0, 0, 0, 0, 2343, 2344, 0, 0, 0, 0, 0, 2350, 0, 0, 0, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 2836, 521, 521, 521, 521, 2840, 521, 521, 4358144, 6430720, 6438912, 901, 0, 0, 0, 901, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 374, 374, 404, 977, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 5267456, 0, 0, 5308416, 5316608, 0, 0, 0, 5431296, 0, 5488640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5799936, 0, 0, 5881856, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 901, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3653, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3218, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60573, 57886, 60576, 57886, 57886, 57886, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 0, 0, 459186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459215, 459372, 459215, 459215, 459372, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5480448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5840896, 5849088, 0, 1, 24578, 3, 0, 0, 0, 0, 507904, 0, 0, 0, 507904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 0, 0, 0, 0, 0, 2796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3385, 3386, 0, 0, 0, 0, 3391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2789, 0, 0, 0, 2793, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2781, 0, 0, 2784, 0, 0, 0, 0, 2788, 0, 0, 0, 0, 0, 507904, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 442368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1225, 0, 0, 0, 0, 0, 0, 0, 1233, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 516096, 0, 0, 0, 516096, 0, 0, 0, 0, 0, 0, 516096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2287, 0, 2288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 1, 24578, 0, 0, 0, 4366336, 0, 0, 548864, 0, 0, 301, 302, 0, 4268032, 305, 306, 409600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 2340, 0, 0, 0, 0, 0, 0, 0, 0, 2347, 0, 0, 0, 0, 0, 0, 2354, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 40960, 0, 0, 0, 0, 0, 0, 2747, 0, 2749, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 2757, 0, 0, 0, 2760, 2761, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 855, 521, 521, 521, 521, 521, 874, 521, 521, 521, 521, 892, 521, 521, 521, 57886, 57886, 57886, 1, 24578, 4227364, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 540672, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1857, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 4227364, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 155941, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57887, 57887, 57887, 57887, 57887, 57887, 57887, 57910, 57910, 57887, 57887, 57937, 57887, 57887, 57887, 57887, 57887, 57887, 57887, 57937, 57937, 57887, 57887, 57887, 57887, 57937, 57937, 57887, 521, 57887, 57887, 57887, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4399797, 4399797, 4399797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 358, 0, 0, 399, 0, 0, 0, 0, 0, 139264, 147456, 399, 410, 0, 423, 410, 1, 24578, 3, 155942, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1236, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573440, 0, 573440, 573440, 573440, 0, 573440, 573440, 573440, 573440, 573440, 573440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3628, 0, 0, 0, 3631, 0, 0, 0, 0, 0, 0, 0, 0, 3639, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573440, 573440, 573440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1819, 1820, 0, 1822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1836, 0, 0, 0, 0, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4399798, 311296, 4399798, 0, 0, 0, 311296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1738, 0, 5300224, 5234688, 5423104, 0, 0, 0, 0, 5988352, 0, 0, 6135808, 6307840, 0, 5996544, 4800512, 0, 6356992, 3627, 0, 0, 5496832, 0, 0, 0, 0, 0, 5611520, 0, 0, 0, 0, 0, 0, 0, 1792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 326, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 630, 302, 0, 4268032, 633, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2806, 0, 0, 0, 0, 0, 0, 0, 0, 2814, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 0, 0, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 581632, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3172, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3183, 521, 521, 3187, 521, 521, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792, 3774, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 4358144, 4358144, 0, 901, 900, 900, 900, 900, 900, 4858756, 4875140, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5260164, 900, 900, 900, 900, 900, 900, 900, 900, 6103940, 900, 900, 900, 6185860, 900, 900, 900, 6284164, 900, 900, 6333316, 900, 900, 900, 6390660, 900, 900, 6431620, 6439812, 0, 0, 0, 0, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3869, 0, 0, 0, 0, 0, 787, 0, 0, 521, 521, 521, 521, 521, 847, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60869, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59939, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59946, 57909, 59948, 57909, 59951, 57909, 57909, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 3869, 0, 0, 0, 0, 0, 0, 2822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2830, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1938, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1387, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3638, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 451, 465, 465, 465, 478, 478, 478, 478, 478, 478, 478, 478, 478, 499, 478, 478, 478, 478, 517, 478, 478, 478, 517, 478, 478, 478, 478, 478, 478, 522, 57888, 522, 57888, 522, 522, 57888, 522, 522, 57911, 57888, 522, 522, 57888, 57888, 57888, 57911, 57888, 57888, 57888, 57888, 57888, 57888, 57888, 57911, 57911, 57888, 57888, 57938, 57888, 57888, 57888, 57888, 57888, 57888, 57888, 57938, 57938, 57888, 57888, 57888, 57888, 57938, 57938, 57888, 522, 57888, 57888, 57888, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 638, 0, 0, 641, 642, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1279, 0, 0, 0, 0, 1284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1292, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 764, 0, 0, 768, 0, 0, 0, 0, 0, 0, 3115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1175, 0, 1177, 1178, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 3114, 0, 0, 0, 0, 0, 3118, 0, 0, 0, 0, 0, 0, 0, 3124, 3125, 3126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1306, 0, 0, 0, 1310, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61024, 57886, 57886, 0, 824, 825, 0, 0, 0, 0, 780, 521, 521, 834, 838, 521, 521, 850, 521, 521, 521, 866, 521, 871, 521, 879, 521, 882, 521, 521, 896, 521, 57886, 57886, 57886, 57886, 57886, 57886, 59898, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 59913, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59448, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59461, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58253, 58257, 57886, 57886, 58269, 57886, 57886, 57886, 58285, 57886, 58290, 57886, 58298, 57886, 58301, 57886, 57886, 58315, 57886, 0, 57909, 57909, 57909, 58329, 58333, 57909, 57909, 58345, 57909, 57909, 57909, 58361, 57909, 58366, 57909, 58374, 57909, 58377, 57909, 57909, 58391, 57909, 0, 0, 0, 0, 58290, 57936, 57936, 57936, 58404, 58408, 57936, 57936, 58420, 57936, 57936, 57936, 58436, 57936, 58441, 57936, 58449, 57936, 0, 0, 0, 0, 521, 521, 521, 521, 521, 4172, 521, 57886, 57886, 57886, 57886, 57886, 61522, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61528, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59544, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59557, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59545, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59014, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58452, 57936, 57936, 58466, 57936, 834, 838, 1128, 882, 521, 521, 0, 58257, 58253, 58478, 58301, 57886, 57886, 155941, 1138, 0, 0, 1141, 0, 0, 1146, 0, 0, 0, 0, 0, 0, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 977, 0, 0, 0, 0, 0, 1210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1231, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 57886, 58831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59964, 57909, 57909, 57909, 57909, 59969, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 1753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1777, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 1199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 367, 367, 367, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 1813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2815, 0, 0, 1861, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1874, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1887, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61044, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 521, 521, 521, 521, 521, 1929, 521, 521, 1932, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1945, 521, 521, 521, 521, 521, 521, 1951, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59828, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59380, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61166, 57909, 57909, 57909, 61169, 57909, 57909, 57909, 57909, 521, 58754, 1960, 57886, 57886, 57886, 57886, 57886, 59311, 57886, 57886, 57886, 57886, 57886, 59317, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59330, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60835, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60845, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60854, 57886, 50657, 2060, 57909, 57909, 57909, 57909, 57909, 59411, 57909, 57909, 57909, 57909, 57909, 59417, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59430, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58890, 57909, 57909, 57909, 58893, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58900, 57909, 57909, 58904, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59472, 57909, 57909, 59475, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59489, 57909, 57909, 57909, 57909, 57909, 57909, 59495, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3151, 0, 0, 0, 3155, 0, 3157, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 59507, 57936, 57936, 57936, 57936, 57936, 59513, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59526, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59579, 57936, 57936, 57936, 57936, 57936, 57936, 59587, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 3105, 0, 0, 0, 0, 0, 0, 57936, 57936, 59568, 57936, 57936, 59571, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59585, 57936, 57936, 57936, 57936, 57936, 57936, 59591, 57936, 57936, 57936, 57936, 57936, 57936, 521, 2256, 521, 521, 521, 57886, 59605, 57886, 57886, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2275, 0, 0, 0, 0, 0, 0, 791, 0, 521, 521, 521, 521, 521, 521, 521, 521, 859, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1737, 1738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 309, 0, 309, 0, 0, 0, 0, 2331, 0, 2333, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1826, 0, 1828, 0, 0, 0, 0, 0, 0, 0, 1835, 0, 0, 521, 2464, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59829, 57886, 57886, 59832, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60265, 57886, 57886, 57886, 57886, 60268, 57886, 57886, 60270, 57886, 60271, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60280, 57886, 57886, 60284, 59840, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59860, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61032, 57886, 57886, 57886, 57886, 57886, 57886, 61038, 57886, 61040, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61089, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 59929, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59949, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58886, 57909, 58888, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60375, 57936, 60376, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60012, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60032, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60070, 57936, 57936, 57936, 2405, 521, 521, 521, 521, 59836, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2399, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2446, 521, 521, 521, 521, 521, 521, 521, 2452, 521, 521, 521, 521, 521, 521, 2457, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2847, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2889, 521, 521, 521, 521, 521, 521, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60315, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60323, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58924, 57909, 57909, 58928, 57909, 57909, 57909, 57909, 57909, 58935, 57909, 57909, 57909, 58942, 57909, 0, 57886, 57936, 57936, 57936, 57936, 60359, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60370, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60380, 57936, 0, 0, 0, 0, 521, 521, 521, 4170, 4171, 521, 521, 57886, 57886, 57886, 61520, 61521, 57886, 57886, 57886, 57909, 57909, 57909, 61526, 61527, 57909, 57909, 57909, 57936, 57936, 57936, 61532, 57936, 57936, 60435, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 3104, 0, 0, 0, 3108, 0, 0, 0, 0, 0, 0, 3142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262731, 0, 0, 0, 0, 0, 0, 0, 0, 3113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3136, 57909, 60627, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60636, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60644, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61057, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61062, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60676, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60685, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60693, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 1193, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60915, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60933, 57936, 60935, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60703, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 2748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 352256, 352256, 0, 0, 0, 0, 521, 3948, 521, 3950, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61307, 57886, 61309, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58807, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59347, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61165, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61170, 57909, 57909, 57909, 57909, 61323, 57909, 61325, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61339, 57936, 61341, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3859, 521, 61204, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 4012, 0, 0, 0, 4015, 0, 0, 521, 521, 521, 521, 4020, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 61377, 57886, 57886, 57886, 57886, 57886, 57909, 60861, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60352, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 312, 313, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2765, 0, 0, 0, 0, 0, 0, 426, 0, 131072, 0, 0, 0, 426, 0, 0, 0, 0, 0, 426, 452, 0, 0, 0, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 516, 452, 516, 516, 516, 452, 516, 516, 516, 516, 516, 516, 523, 57889, 523, 57889, 523, 523, 57889, 523, 523, 57912, 57889, 523, 523, 57889, 57889, 57889, 57912, 57889, 57889, 57889, 57889, 57889, 57889, 57889, 57912, 57912, 57889, 57889, 57939, 57889, 57889, 57889, 57889, 57889, 57889, 57889, 57939, 57939, 57889, 57889, 57889, 57889, 57939, 57939, 57889, 614, 57889, 57966, 57966, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385024, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 57909, 57909, 58370, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58445, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61199, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 820, 780, 0, 0, 0, 0, 0, 0, 754, 0, 0, 754, 0, 0, 0, 0, 0, 754, 754, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 2770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 60312, 57909, 57909, 57909, 57909, 60316, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60345, 57909, 57909, 57909, 57909, 60349, 57909, 57909, 57909, 60354, 57909, 57909, 57909, 57909, 60381, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60432, 57936, 57936, 57936, 57936, 57936, 60436, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2807, 0, 0, 0, 0, 0, 2812, 0, 0, 0, 0, 0, 57886, 61381, 57886, 61383, 57886, 57886, 61385, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61395, 57909, 61397, 57909, 57909, 61399, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 61409, 57936, 61411, 57936, 57936, 61413, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 351, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 319, 319, 427, 428, 131072, 435, 428, 436, 427, 435, 436, 0, 315, 436, 448, 453, 466, 466, 466, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 501, 501, 501, 514, 514, 515, 515, 501, 515, 515, 515, 501, 515, 515, 515, 515, 515, 515, 524, 57890, 524, 57890, 524, 524, 57890, 524, 524, 57913, 57890, 524, 524, 57890, 57890, 57890, 57913, 57890, 57890, 57890, 57890, 57890, 57890, 57890, 57913, 57913, 57890, 57890, 57940, 57890, 57890, 57890, 57890, 57890, 57890, 57890, 57940, 57940, 57890, 57890, 57890, 57890, 57940, 57940, 57890, 615, 57965, 57965, 57965, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1198, 367, 367, 0, 0, 1201, 0, 0, 0, 1204, 0, 1206, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5242880, 0, 0, 0, 0, 0, 5603328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 58378, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59553, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58453, 57936, 57936, 57936, 57936, 521, 521, 521, 883, 521, 521, 0, 57886, 57886, 57886, 58302, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3411, 0, 0, 0, 3415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 57886, 521, 57886, 521, 521, 57886, 521, 521, 57909, 57886, 521, 521, 57886, 57886, 57886, 57909, 521, 521, 521, 58754, 901, 57886, 57886, 58758, 57886, 57886, 58762, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58776, 57886, 58781, 57886, 57886, 58785, 57886, 57886, 58788, 57886, 57886, 57886, 57886, 57886, 57886, 58279, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58322, 57909, 57909, 57909, 57909, 57909, 57909, 58355, 57909, 57909, 57909, 58876, 57909, 57909, 58880, 57909, 57909, 58883, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58902, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 58951, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58965, 57936, 58970, 57936, 57936, 58974, 57936, 57936, 58977, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 3861, 0, 0, 0, 3863, 0, 0, 0, 0, 0, 0, 3627, 3870, 0, 1723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 521, 521, 521, 1927, 1928, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2433, 521, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59320, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59332, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 61494, 57909, 61495, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61502, 57936, 61503, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60018, 57936, 60020, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60396, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60401, 57936, 57936, 57936, 57936, 57936, 57886, 57886, 59370, 59371, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59420, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59432, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59446, 57909, 57909, 57909, 59450, 57909, 57909, 59455, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59990, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59998, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 59470, 59471, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3447, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1341, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3200, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61016, 57886, 57886, 57886, 61019, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59566, 59567, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162, 0, 0, 521, 2437, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2450, 521, 521, 521, 521, 521, 2454, 2455, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1374, 521, 1376, 521, 521, 521, 521, 521, 521, 521, 1389, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1404, 57886, 57886, 57886, 57886, 59869, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59882, 57886, 57886, 57886, 57886, 57886, 59886, 59887, 59888, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58800, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58822, 57886, 57886, 57886, 57886, 0, 0, 0, 2744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114688, 0, 0, 57886, 57886, 57886, 60288, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 826, 0, 0, 521, 521, 521, 521, 521, 849, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 60863, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60875, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59447, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60672, 3137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1837, 0, 0, 0, 3166, 0, 0, 3169, 0, 0, 0, 0, 0, 0, 0, 3173, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2451, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3379, 0, 0, 0, 0, 0, 0, 0, 3383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3422, 0, 0, 0, 0, 0, 0, 3429, 521, 3458, 3459, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60827, 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 695, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 883, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 2267, 0, 1142, 0, 0, 0, 0, 2270, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1809, 57909, 60884, 57909, 60886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60000, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60911, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60926, 57936, 60928, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60045, 60046, 57936, 57936, 57936, 57936, 57936, 57936, 60053, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61072, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59595, 57936, 57936, 57936, 1881, 521, 4010, 0, 4011, 0, 0, 0, 0, 0, 0, 0, 521, 4018, 521, 4019, 521, 521, 521, 4023, 521, 521, 521, 521, 521, 521, 521, 57886, 61375, 57886, 61376, 57886, 57886, 57886, 57886, 57886, 57886, 60264, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60269, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60275, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60283, 57886, 61380, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61389, 57909, 61390, 57909, 57909, 57909, 61394, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61403, 57936, 61404, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60388, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3376, 0, 0, 61408, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 1710, 0, 0, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 4213, 57886, 57886, 57886, 61559, 57909, 57909, 57909, 61561, 57936, 57936, 57936, 61563, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 0, 2471, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59858, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 376, 0, 131072, 0, 0, 0, 376, 0, 0, 438, 444, 0, 376, 454, 467, 467, 467, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 525, 57891, 525, 57891, 525, 525, 57891, 525, 525, 57914, 57891, 525, 525, 57891, 57891, 57891, 57914, 57891, 57891, 57891, 57891, 57891, 57891, 57891, 57914, 57914, 57891, 57891, 57941, 57891, 57891, 57891, 57891, 57891, 57891, 57891, 57941, 57941, 57891, 57891, 57891, 57891, 57941, 57941, 57891, 525, 57891, 57891, 57891, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229376, 0, 491520, 524288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1180, 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 1166, 0, 1298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1284, 0, 0, 0, 1312, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 1321, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 60241, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58814, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 521, 521, 1371, 521, 521, 1373, 521, 521, 521, 521, 1378, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1403, 521, 521, 521, 521, 521, 521, 521, 521, 3196, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3203, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1902, 521, 521, 521, 521, 521, 521, 521, 521, 1913, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1935, 521, 521, 521, 1941, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1950, 521, 521, 521, 521, 1956, 521, 521, 521, 521, 58754, 901, 57886, 57886, 58759, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58786, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61247, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61263, 57909, 57909, 57936, 57909, 57909, 57909, 57909, 58881, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58896, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58905, 57909, 57909, 58907, 57909, 57909, 57909, 57909, 58912, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58937, 57909, 57909, 57909, 57909, 0, 58812, 57936, 57936, 58948, 57936, 0, 0, 0, 0, 521, 521, 4169, 521, 521, 521, 4173, 57886, 57886, 61519, 57886, 57886, 57886, 61523, 57886, 57909, 57909, 61525, 57909, 57909, 57909, 61529, 57909, 57936, 57936, 61531, 57936, 0, 0, 0, 0, 4168, 521, 521, 521, 521, 521, 521, 61518, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61524, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61530, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61274, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 3938, 0, 0, 3941, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1883, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2876, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 60819, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58999, 57936, 57936, 59001, 57936, 57936, 57936, 57936, 59007, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59519, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59530, 57936, 57936, 57936, 57936, 57936, 59032, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2410, 521, 521, 521, 2259, 57886, 57886, 57886, 57886, 59608, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 2272, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2408, 521, 521, 521, 521, 521, 521, 521, 521, 2416, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1397, 521, 521, 521, 521, 521, 57886, 59893, 57886, 59895, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59916, 57909, 57909, 57909, 57909, 59920, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59958, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59971, 57909, 57909, 57909, 57909, 57909, 59975, 59976, 59977, 57909, 57909, 57909, 57909, 57909, 57909, 59982, 57909, 59984, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59999, 57936, 57936, 57936, 57936, 60003, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60683, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3369, 521, 57886, 60716, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 60065, 57936, 60067, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 0, 0, 0, 3622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 415, 0, 0, 0, 0, 0, 60285, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 1156, 1157, 1158, 1159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 57909, 57909, 57909, 60310, 57909, 60311, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59460, 57909, 57909, 57909, 57909, 57909, 59467, 57909, 521, 521, 3191, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3204, 521, 521, 521, 521, 521, 521, 521, 3210, 57886, 57886, 57886, 60582, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60596, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60606, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 60617, 57909, 57909, 57909, 57909, 57909, 57909, 60624, 57909, 57886, 60602, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61182, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58975, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58990, 57909, 57909, 57909, 57909, 60651, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60680, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60694, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61273, 57936, 61275, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1878, 1879, 521, 521, 521, 521, 1886, 521, 521, 521, 521, 521, 521, 521, 521, 1337, 521, 1342, 521, 521, 1346, 521, 521, 1349, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1380, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1396, 521, 521, 521, 521, 521, 57936, 57936, 57936, 57936, 57936, 60700, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 3768, 0, 0, 0, 0, 57909, 61073, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60030, 57936, 57936, 57936, 57936, 57936, 0, 521, 521, 521, 521, 521, 521, 3953, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61312, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2557, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59466, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61328, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61344, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61382, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61396, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61080, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61090, 57936, 57936, 57936, 57936, 61410, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2265, 1706, 2266, 0, 0, 0, 0, 2268, 1713, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2353, 0, 0, 330, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 1842, 0, 0, 1845, 0, 0, 0, 0, 0, 0, 1851, 1852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1845, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 455, 468, 468, 468, 481, 481, 481, 481, 492, 494, 481, 481, 492, 481, 503, 503, 503, 503, 518, 503, 503, 503, 518, 503, 503, 503, 503, 503, 503, 526, 57892, 526, 57892, 526, 526, 57892, 526, 526, 57915, 57892, 526, 526, 57892, 57892, 57892, 57915, 57892, 57892, 57892, 57892, 57892, 57892, 57892, 57915, 57915, 57892, 57892, 57942, 57892, 57892, 57892, 57892, 57892, 57892, 57892, 57942, 57942, 57892, 57892, 57892, 57892, 57942, 57942, 57892, 526, 57892, 57892, 57892, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 2310144, 2310144, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 677, 678, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 3141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 0, 0, 0, 711, 0, 713, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 765, 766, 0, 0, 0, 0, 0, 0, 0, 2308, 0, 0, 0, 0, 2313, 2314, 0, 0, 2316, 2317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270336, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 305, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 0, 0, 775, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 794, 0, 797, 0, 0, 0, 0, 0, 0, 777, 0, 789, 0, 803, 0, 0, 0, 0, 797, 809, 0, 0, 0, 0, 0, 809, 809, 812, 0, 0, 0, 777, 0, 0, 0, 0, 0, 821, 0, 0, 0, 0, 0, 0, 806, 0, 0, 806, 0, 0, 0, 0, 0, 806, 806, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 822, 782, 0, 0, 0, 0, 0, 775, 0, 0, 0, 821, 521, 521, 835, 521, 841, 521, 521, 856, 521, 521, 867, 521, 872, 521, 521, 881, 884, 889, 521, 897, 521, 57886, 57886, 57886, 57886, 57886, 57886, 60291, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 58254, 57886, 58260, 57886, 57886, 58275, 57886, 57886, 58286, 57886, 58291, 57886, 57886, 58300, 58303, 58308, 57886, 58316, 57886, 0, 57909, 57909, 57909, 58330, 57909, 58336, 57909, 57909, 58351, 57909, 57909, 58362, 57909, 58367, 57909, 57909, 58376, 58379, 58384, 57909, 58392, 57909, 0, 0, 0, 0, 58291, 57936, 57936, 57936, 58405, 57936, 58411, 57936, 57936, 58426, 57936, 57936, 58437, 57936, 58442, 57936, 57936, 58451, 58454, 58459, 57936, 58467, 57936, 835, 521, 521, 1129, 889, 521, 0, 57886, 58254, 57886, 58479, 58308, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326528, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 0, 0, 0, 0, 0, 0, 0, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1051, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6299648, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 1209, 0, 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1235, 0, 0, 1187, 0, 0, 0, 0, 0, 3434, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3451, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59827, 57886, 57886, 57886, 57886, 59831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58801, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58810, 57886, 57886, 58812, 57886, 57886, 57886, 57886, 58817, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61388, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61402, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5857280, 0, 6463488, 4939776, 0, 0, 5455872, 0, 0, 0, 0, 0, 0, 0, 0, 6062080, 6463488, 0, 5398528, 0, 521, 521, 521, 521, 1328, 521, 521, 521, 521, 521, 521, 1343, 521, 521, 521, 1348, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1365, 521, 1407, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58767, 57886, 57886, 57886, 57886, 57886, 57886, 58782, 57886, 57886, 57886, 58787, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58839, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 58855, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58869, 57909, 57909, 57909, 58877, 57909, 57909, 57909, 58882, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58899, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58419, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59003, 57936, 59005, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59018, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60704, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 57936, 58956, 57936, 57936, 57936, 57936, 57936, 57936, 58971, 57936, 57936, 57936, 58976, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 2741, 0, 57936, 58993, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59009, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59025, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61101, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 691, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59036, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 1719, 0, 1721, 0, 0, 0, 0, 0, 3621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3632, 0, 0, 0, 3635, 3636, 0, 0, 0, 0, 0, 0, 393678, 0, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 0, 393678, 393678, 0, 1754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1770, 0, 0, 0, 0, 0, 1776, 0, 0, 1779, 0, 1781, 0, 0, 0, 0, 0, 0, 3642, 0, 3644, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2854, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1943, 1944, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 1787, 1788, 0, 0, 0, 0, 0, 0, 0, 0, 1797, 1798, 0, 0, 0, 0, 0, 0, 1804, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 888, 521, 521, 521, 521, 57886, 57886, 57886, 1810, 1811, 1812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1830, 1831, 0, 1832, 1833, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3395, 0, 0, 3397, 0, 0, 0, 0, 0, 0, 0, 0, 1863, 1721, 1721, 1865, 521, 1867, 521, 1868, 1869, 521, 1871, 521, 521, 521, 1875, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1888, 521, 521, 521, 521, 1892, 521, 521, 521, 521, 1896, 521, 1898, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1908, 1909, 1911, 521, 521, 521, 521, 521, 521, 521, 1919, 1920, 521, 1922, 521, 521, 521, 521, 521, 521, 521, 521, 3667, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60611, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60622, 57909, 60625, 521, 1925, 1926, 521, 521, 521, 521, 521, 521, 521, 1934, 521, 1936, 521, 1939, 521, 521, 521, 521, 521, 1946, 521, 521, 1948, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3197, 3198, 521, 521, 521, 521, 3201, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3206, 521, 521, 521, 3209, 521, 521, 58754, 0, 59307, 57886, 59309, 57886, 59310, 57886, 59312, 57886, 59314, 57886, 57886, 57886, 59318, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59331, 57886, 57886, 57886, 57886, 59335, 57886, 1, 24578, 3, 155941, 156275, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 59339, 57886, 59341, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59351, 59352, 59354, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59362, 59363, 57886, 59365, 57886, 57886, 57886, 57886, 57886, 58799, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58829, 59368, 59369, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59377, 57886, 59379, 57886, 59382, 57886, 57886, 57886, 57886, 57886, 59390, 57886, 57886, 59392, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2558, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60371, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 60377, 57936, 57936, 57936, 57936, 50657, 0, 59407, 57909, 59409, 57909, 59410, 57909, 59412, 57909, 59414, 57909, 57909, 57909, 59418, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59431, 57909, 57909, 57909, 57909, 59435, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58916, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 1335, 521, 521, 521, 521, 58774, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 1709, 0, 0, 0, 0, 1716, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3882, 521, 3884, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59847, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60277, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 59439, 57909, 59441, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59451, 59452, 59454, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59462, 59463, 57909, 59465, 57909, 57909, 59468, 59469, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59477, 57909, 59479, 57909, 59482, 57909, 57909, 57909, 57909, 57909, 59490, 57909, 57909, 59492, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 57886, 60290, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60299, 57886, 57886, 57886, 60302, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 59503, 57936, 59505, 57936, 59506, 57936, 59508, 57936, 59510, 57936, 57936, 57936, 59514, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59527, 57936, 57936, 57936, 57936, 59531, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 1707, 0, 0, 0, 0, 1714, 0, 0, 0, 0, 0, 0, 0, 0, 3170, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3182, 521, 3185, 521, 521, 521, 521, 59535, 57936, 59537, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59547, 59548, 59550, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59558, 59559, 57936, 57936, 59561, 57936, 57936, 59564, 59565, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59573, 57936, 59575, 57936, 59578, 57936, 57936, 57936, 57936, 57936, 59586, 57936, 57936, 59588, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 1926, 521, 2258, 521, 57886, 59369, 57886, 59607, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2276, 0, 0, 2279, 2280, 0, 0, 0, 2284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2790, 0, 0, 0, 0, 2303, 0, 0, 0, 0, 2307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2323, 0, 0, 0, 0, 2327, 0, 0, 0, 0, 0, 3873, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58803, 57886, 57886, 57886, 57886, 58808, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58816, 57886, 57886, 57886, 58823, 58825, 57886, 57886, 57886, 0, 2356, 0, 0, 0, 0, 0, 0, 0, 0, 2365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2375, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 875, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 2412, 521, 2414, 521, 521, 521, 521, 521, 521, 521, 2420, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1357, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2441, 2442, 521, 521, 521, 521, 521, 521, 2449, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1383, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1400, 521, 521, 521, 2463, 521, 521, 2466, 2467, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59833, 57886, 59835, 57886, 57886, 57886, 57886, 57886, 57886, 60585, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60599, 57886, 57886, 57886, 57886, 57886, 59843, 57886, 59845, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59851, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60300, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 59896, 57886, 57886, 59899, 59900, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59922, 57909, 57909, 57909, 57909, 57909, 57909, 58388, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 3862, 0, 0, 3865, 0, 0, 0, 0, 3627, 0, 0, 59924, 57909, 57909, 57909, 57909, 57909, 57909, 59932, 57909, 59934, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59940, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 59991, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60707, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 60007, 57936, 57936, 57936, 57936, 57936, 57936, 60015, 57936, 60017, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60023, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 521, 2868, 521, 521, 521, 521, 2872, 521, 521, 521, 2877, 521, 521, 521, 521, 521, 521, 521, 521, 2885, 521, 521, 521, 521, 521, 521, 521, 2890, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 59820, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58811, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60259, 57886, 60261, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60278, 57886, 57886, 57886, 57886, 60282, 57886, 57886, 57886, 57886, 57886, 60605, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60319, 57909, 57909, 57909, 57909, 57909, 60324, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 60287, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60295, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60301, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60314, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60326, 57909, 60328, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60365, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61082, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 60362, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60368, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60379, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58959, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58978, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58988, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58960, 58967, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58980, 57936, 58982, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60417, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60424, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60410, 57936, 57936, 57936, 57936, 60414, 57936, 57936, 57936, 60419, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60427, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 3103, 0, 0, 3106, 3107, 0, 0, 3110, 3111, 60433, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278528, 0, 0, 0, 0, 0, 0, 3167, 3168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3189, 60580, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60593, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60600, 57909, 57909, 57909, 60629, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60642, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58925, 57909, 57909, 57909, 57909, 57909, 58933, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57909, 57909, 60649, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60678, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60691, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60044, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 3937, 0, 3939, 0, 0, 0, 0, 0, 3627, 3943, 0, 3945, 57936, 57936, 57936, 60698, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 2368, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2398, 521, 521, 2401, 521, 521, 521, 521, 521, 521, 2409, 521, 521, 3403, 0, 0, 0, 0, 3405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3419, 0, 0, 0, 0, 3424, 3425, 0, 3427, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3452, 521, 521, 521, 521, 3430, 0, 0, 0, 3433, 521, 521, 521, 521, 521, 521, 3440, 521, 521, 521, 521, 521, 3444, 521, 521, 521, 521, 521, 521, 521, 3450, 521, 521, 521, 521, 521, 3456, 60828, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60834, 57886, 57886, 57886, 57886, 57886, 60840, 57886, 57886, 60843, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60850, 60852, 57886, 57886, 57886, 57886, 57886, 57886, 58282, 58284, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58327, 57909, 57909, 57909, 57909, 57909, 57909, 58358, 58360, 57909, 60856, 57886, 60858, 60859, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 60866, 57909, 57909, 57909, 57909, 57909, 60870, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60876, 57909, 57909, 57909, 57909, 57909, 60882, 57909, 57909, 60885, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60892, 60894, 57909, 57909, 57909, 57909, 60898, 57909, 60900, 60901, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 60908, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61200, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3866, 3867, 0, 3627, 0, 3871, 57936, 57936, 60912, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60918, 57936, 57936, 57936, 57936, 57936, 60924, 57936, 57936, 60927, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60934, 60936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59000, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59020, 57936, 57936, 57936, 57936, 57936, 59028, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59542, 57936, 57936, 57936, 59546, 57936, 57936, 59551, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60048, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60940, 57936, 60942, 60943, 57936, 521, 521, 3602, 57886, 57886, 60949, 0, 0, 0, 0, 0, 0, 3611, 0, 0, 3614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 3649, 3650, 521, 521, 521, 521, 3654, 3655, 521, 521, 521, 521, 521, 3659, 521, 521, 521, 521, 3662, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 61018, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61023, 57886, 57886, 57886, 57886, 57886, 57886, 60833, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60841, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60855, 57909, 57909, 57909, 57909, 57909, 57909, 61052, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61063, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61071, 57909, 57909, 57909, 57909, 57909, 57909, 58914, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58930, 57909, 57909, 57909, 57909, 57909, 57909, 58941, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 303104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 61240, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61256, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 61076, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61081, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61092, 57886, 57886, 57886, 61440, 57886, 61442, 57886, 57886, 57886, 57886, 61447, 61448, 61449, 61450, 57909, 57909, 57909, 61453, 57909, 61455, 57909, 57909, 57909, 57909, 61460, 61461, 61462, 61463, 57936, 57936, 57936, 61466, 57936, 61468, 57936, 57936, 57936, 57936, 61473, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61031, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61392, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61406, 57936, 57936, 57936, 61535, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 4198, 521, 57886, 57886, 57886, 57886, 61546, 57886, 57909, 57909, 57909, 57909, 61550, 57909, 57936, 57936, 57936, 57936, 61554, 57936, 0, 371, 371, 0, 429, 131072, 371, 429, 429, 332, 371, 429, 0, 0, 429, 449, 429, 0, 0, 0, 429, 488, 488, 488, 493, 488, 488, 488, 493, 488, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 527, 57893, 527, 57893, 527, 527, 57893, 527, 527, 57916, 57893, 527, 527, 57893, 57893, 57893, 57916, 57893, 57893, 57893, 57893, 57893, 57893, 57893, 57916, 57916, 57893, 57893, 57943, 57893, 57893, 57893, 57893, 57893, 57893, 57893, 57943, 57943, 57893, 57893, 57893, 57893, 57943, 57943, 57893, 527, 57893, 57893, 57893, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 4399798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 521, 828, 521, 521, 521, 521, 521, 521, 860, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 58246, 1295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 2839, 521, 521, 521, 521, 521, 521, 1326, 521, 521, 521, 521, 521, 1338, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2430, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58765, 57886, 57886, 57886, 57886, 57886, 58777, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59381, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61041, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 58954, 57936, 57936, 57936, 57936, 57936, 58966, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 3375, 0, 0, 0, 57909, 57909, 57909, 59954, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60355, 57909, 57909, 57909, 57936, 57936, 57936, 60037, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59026, 57936, 57936, 57936, 0, 0, 4212, 521, 521, 521, 61558, 57886, 57886, 57886, 61560, 57909, 57909, 57909, 61562, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 521, 3793, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60607, 57886, 57886, 60610, 57886, 57886, 60613, 0, 0, 60614, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60637, 60638, 57909, 57909, 57909, 57909, 60641, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60647, 0, 0, 0, 430, 131072, 0, 430, 430, 0, 0, 430, 439, 0, 430, 0, 430, 469, 469, 469, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 528, 57894, 528, 57894, 528, 528, 57894, 528, 528, 57917, 57894, 528, 528, 57894, 57894, 57894, 57917, 57894, 57894, 57894, 57894, 57894, 57894, 57894, 57917, 57917, 57894, 57894, 57944, 57894, 57894, 57894, 57894, 57894, 57894, 57894, 57944, 57944, 57894, 57894, 57894, 57894, 57944, 57944, 57894, 528, 57894, 57894, 57894, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 58754, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 2561, 0, 50657, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59950, 57909, 57909, 2302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326, 0, 0, 0, 0, 0, 1213, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 420, 0, 0, 0, 0, 0, 2385, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1949, 521, 521, 521, 521, 521, 521, 521, 0, 3138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3158, 0, 0, 0, 0, 0, 0, 0, 0, 1731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1747, 0, 0, 1750, 0, 0, 521, 521, 521, 3213, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58868, 57909, 0, 0, 3404, 0, 0, 0, 0, 0, 3407, 0, 3409, 0, 0, 3412, 0, 0, 0, 0, 0, 3417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 4399797, 4399797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3460, 521, 521, 521, 521, 521, 521, 521, 521, 3468, 521, 521, 3471, 521, 521, 521, 60818, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58296, 57886, 57886, 57886, 57886, 58314, 57886, 57886, 0, 57909, 57909, 58325, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 60857, 57886, 57886, 57886, 60860, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60877, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59959, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60664, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 60887, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60896, 57909, 57909, 60899, 57909, 57909, 57909, 60902, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4089, 521, 57886, 57886, 57886, 60938, 57936, 57936, 60941, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3615, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3159, 3160, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3663, 521, 3665, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 61017, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59850, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59857, 57886, 59859, 57886, 59862, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61029, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61035, 57886, 61037, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 61046, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58917, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58934, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 58949, 57936, 61093, 57936, 61095, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 3791, 521, 521, 521, 521, 521, 521, 521, 521, 3797, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58804, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58819, 57886, 57886, 57886, 57886, 57886, 57886, 61153, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61159, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61172, 57909, 57909, 57909, 57909, 57909, 57909, 58915, 57909, 57909, 58922, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58936, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 1336, 521, 521, 521, 521, 58775, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 1711, 0, 0, 0, 0, 1718, 0, 0, 0, 0, 0, 0, 1247, 1248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155, 1154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3630, 0, 0, 0, 0, 0, 0, 0, 3637, 0, 0, 57936, 57936, 57936, 57936, 57936, 61197, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3782, 0, 0, 521, 521, 521, 521, 0, 0, 0, 0, 683, 684, 0, 0, 0, 0, 689, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 57896, 530, 57896, 530, 530, 57896, 530, 530, 57919, 57896, 530, 530, 57896, 57896, 57896, 57919, 57886, 58258, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58317, 0, 57909, 57909, 57909, 57909, 58334, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59481, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 57936, 57936, 57936, 58468, 521, 839, 521, 521, 521, 898, 0, 58258, 57886, 57886, 57886, 57886, 58317, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1219, 1220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6299648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5808128, 0, 0, 0, 1211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3647, 521, 521, 521, 521, 521, 521, 521, 3652, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2421, 521, 521, 521, 2424, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2895, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60842, 57886, 60844, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 1839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1307, 1308, 0, 0, 1154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 1319, 521, 521, 521, 1958, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 412, 139264, 147456, 0, 0, 0, 421, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 2773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3634, 0, 0, 0, 0, 0, 0, 424, 424, 0, 0, 131072, 424, 0, 0, 0, 424, 0, 440, 0, 0, 424, 334, 470, 470, 470, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 504, 512, 512, 512, 512, 519, 512, 512, 512, 519, 512, 512, 512, 512, 512, 512, 529, 57895, 529, 57895, 529, 529, 57895, 529, 529, 57918, 57895, 529, 529, 57895, 57895, 57895, 57918, 57895, 57895, 57895, 57895, 57895, 57895, 57895, 57918, 57918, 57895, 57895, 57945, 57895, 57895, 57895, 57895, 57895, 57895, 57895, 57945, 57945, 57895, 57895, 57895, 57895, 57945, 57945, 57895, 529, 57895, 57895, 57895, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1734, 0, 0, 0, 0, 0, 0, 0, 0, 1741, 0, 0, 1744, 1745, 1746, 0, 1748, 1749, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 842, 521, 851, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 899, 57886, 57886, 57886, 57886, 57886, 57886, 61244, 57886, 57886, 57886, 61248, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61254, 57909, 57909, 57909, 57909, 57909, 57909, 61260, 57909, 57909, 57909, 61264, 57909, 57936, 57886, 57886, 58261, 57886, 58270, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58318, 0, 57909, 57909, 57909, 57909, 57909, 58337, 57909, 58346, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58887, 58889, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60661, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60669, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58469, 521, 521, 521, 521, 1130, 899, 0, 57886, 57886, 57886, 57886, 58480, 58318, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1764, 1765, 1766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2319, 2320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1331, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1350, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1360, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59825, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59837, 57886, 57886, 521, 1408, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58770, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58789, 57886, 57886, 57886, 57886, 57886, 57886, 59342, 59343, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59360, 57886, 57886, 57886, 57886, 57886, 59367, 57886, 57886, 58833, 57886, 57886, 57886, 57886, 57886, 58840, 57886, 57886, 57886, 58847, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58865, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58919, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60042, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3370, 57886, 57886, 60717, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59037, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1796, 0, 0, 0, 0, 0, 0, 0, 1803, 0, 1805, 0, 0, 0, 1807, 0, 739, 0, 0, 0, 0, 1838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1836, 1924, 521, 521, 521, 521, 521, 521, 521, 521, 1933, 521, 521, 521, 521, 521, 521, 1942, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1952, 1954, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59861, 57886, 57886, 57886, 57886, 57886, 57886, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59328, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61033, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59428, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58397, 57936, 57936, 57936, 57936, 57936, 57936, 58430, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59572, 57936, 57936, 57936, 57936, 57936, 57936, 59581, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59592, 59594, 57936, 57936, 57936, 57936, 521, 521, 521, 0, 0, 2472, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59885, 57886, 57886, 57886, 57886, 59889, 57886, 57886, 57886, 2329, 0, 0, 0, 0, 0, 0, 0, 0, 2337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3128, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 2465, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 59824, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59836, 57886, 57886, 57886, 57886, 57886, 57886, 61492, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61500, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59583, 59584, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 2255, 521, 59925, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60358, 59953, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59972, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59935, 57909, 59937, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60660, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60671, 57936, 60008, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59598, 521, 521, 60036, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60055, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 4132, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 2769, 0, 0, 2772, 0, 0, 0, 0, 0, 0, 2776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2787, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 319488, 0, 0, 0, 0, 0, 0, 2795, 0, 0, 0, 0, 2797, 0, 0, 0, 0, 0, 0, 0, 2801, 2802, 0, 0, 2805, 0, 0, 2808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2828, 0, 0, 0, 0, 521, 2832, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2878, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1356, 521, 521, 521, 1359, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2873, 521, 521, 521, 521, 521, 521, 2880, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2888, 521, 521, 521, 2891, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60253, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61493, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61501, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60921, 57936, 60923, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60930, 57936, 57936, 60932, 57936, 57936, 57936, 57936, 57936, 0, 0, 57909, 60308, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60331, 57936, 57936, 60407, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60415, 57936, 57936, 57936, 57936, 57936, 57936, 60422, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60431, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59574, 57936, 57936, 57936, 59580, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59590, 57936, 57936, 57936, 57936, 59596, 57936, 57936, 521, 521, 521, 0, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59864, 57886, 57886, 57886, 57936, 60434, 57936, 57936, 57936, 57936, 57936, 57936, 3094, 521, 521, 521, 521, 60441, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 3102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 3646, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3658, 521, 521, 521, 3112, 0, 0, 0, 0, 0, 0, 0, 3116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3130, 3131, 0, 0, 0, 0, 0, 0, 0, 3143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, 0, 0, 0, 0, 0, 3211, 521, 521, 521, 521, 521, 521, 521, 3215, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 60567, 57886, 57886, 57886, 57886, 57886, 60572, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61246, 57886, 57886, 57886, 61249, 57909, 57909, 57909, 57909, 61253, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61262, 57909, 57909, 57909, 61265, 60601, 57886, 60603, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60608, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 60616, 57909, 57909, 57909, 57909, 57909, 60621, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60654, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61086, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 60650, 57909, 60652, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60657, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60665, 57936, 57936, 57936, 57936, 57936, 60670, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60041, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60054, 57936, 57936, 57936, 57936, 57936, 60058, 60059, 60060, 57936, 60696, 57936, 57936, 57936, 60699, 57936, 60701, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60706, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 3374, 0, 0, 3377, 3378, 521, 521, 521, 521, 521, 521, 3462, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 60822, 57886, 57886, 57886, 57886, 60826, 57886, 57886, 57886, 57886, 57886, 58835, 57886, 57886, 57886, 57886, 57886, 57886, 58846, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58862, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58394, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 58412, 57936, 58421, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 4085, 521, 4087, 521, 521, 521, 57886, 57886, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60916, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60931, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 3608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, 1196, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3619, 3620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3633, 0, 0, 0, 0, 0, 0, 0, 0, 1793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60825, 57886, 57886, 57886, 57886, 521, 521, 3787, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3798, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61149, 57886, 57886, 57886, 57886, 57886, 58836, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58861, 57909, 57909, 57909, 58870, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61198, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 3777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 4022, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61379, 0, 521, 521, 521, 521, 521, 521, 521, 521, 3955, 521, 3957, 3958, 521, 3960, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61314, 57886, 61316, 61317, 57886, 61319, 57886, 61321, 61488, 57886, 61489, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61496, 57909, 61497, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61504, 57936, 61505, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58961, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59019, 57936, 57936, 59023, 57936, 57936, 57936, 57936, 57936, 59030, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 4224, 61569, 61570, 61571, 521, 521, 521, 521, 521, 521, 521, 1332, 1339, 521, 521, 521, 521, 521, 521, 521, 521, 1352, 521, 1354, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2422, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 60566, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58307, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57896, 57896, 57896, 57896, 57896, 57896, 57896, 57919, 57919, 57896, 57896, 57946, 57896, 57896, 57896, 57896, 57896, 57896, 57896, 57946, 57946, 57896, 57896, 57896, 57896, 57946, 57946, 57896, 530, 57896, 57896, 57896, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2312, 0, 0, 0, 2315, 0, 0, 0, 0, 0, 2321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 58909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 1706, 0, 0, 0, 1712, 1713, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 383, 0, 139264, 147456, 0, 405, 0, 0, 405, 0, 0, 0, 431, 131072, 0, 431, 431, 0, 0, 431, 0, 445, 431, 0, 431, 471, 471, 471, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 531, 57897, 531, 57897, 531, 531, 57897, 531, 531, 57920, 57897, 531, 531, 57897, 57897, 57897, 57920, 57897, 57897, 57897, 57897, 57897, 57897, 57897, 57920, 57920, 57897, 57897, 57947, 57897, 57897, 57897, 57897, 57897, 57897, 57897, 57947, 57947, 57897, 57897, 57897, 57897, 57947, 57947, 57897, 531, 57897, 57897, 57897, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2775, 0, 0, 0, 0, 0, 2780, 0, 2782, 2783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, 0, 0, 1266, 0, 0, 0, 0, 1271, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 654, 0, 0, 0, 0, 813, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 3645, 521, 521, 521, 3648, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3656, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 733, 654, 0, 0, 521, 829, 521, 521, 521, 844, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 885, 521, 521, 521, 521, 57886, 57886, 58247, 57886, 57886, 57886, 58263, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58304, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58323, 57909, 57909, 57909, 58339, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59987, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 59996, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60391, 57936, 60393, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60022, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60029, 57936, 60031, 57936, 60034, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 58380, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58398, 57936, 57936, 57936, 58414, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60390, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60710, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 58455, 57936, 57936, 57936, 57936, 521, 521, 521, 885, 521, 521, 0, 57886, 57886, 57886, 58304, 57886, 57886, 293, 1138, 0, 0, 1142, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3888, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58841, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60639, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59965, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 1154, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 1280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 763, 0, 0, 767, 0, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 58757, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58771, 58778, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58791, 57886, 58793, 57886, 57886, 57886, 57886, 57886, 60831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60849, 57886, 60851, 57886, 57886, 57886, 57886, 57886, 57886, 58278, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58354, 57909, 57909, 58908, 57909, 58910, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58923, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58938, 57909, 57909, 57909, 0, 57886, 57936, 58946, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60068, 57936, 57936, 60071, 60072, 57936, 2404, 521, 2731, 521, 521, 59835, 57886, 60080, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 0, 0, 0, 4014, 0, 4016, 0, 521, 521, 521, 521, 521, 4021, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61378, 57886, 57936, 59033, 57936, 57936, 57936, 521, 1332, 521, 1389, 521, 521, 58771, 57886, 57886, 58828, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3156, 0, 0, 0, 0, 3161, 0, 0, 0, 3163, 0, 1724, 1725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342912, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1930, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1957, 521, 58754, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59321, 59322, 57886, 57886, 57886, 57886, 59329, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 61391, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61405, 57936, 57936, 50657, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59421, 59422, 57909, 57909, 57909, 57909, 59429, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 741, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59520, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 59473, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59501, 57909, 57886, 57886, 57886, 57886, 57886, 60832, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60847, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58843, 57886, 57886, 57886, 50657, 58754, 977, 57909, 58852, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58866, 58873, 57936, 57936, 57936, 57936, 57936, 59540, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59560, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59569, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59597, 57936, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59359, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2346, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2397, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61162, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59866, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59878, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59884, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59890, 57886, 57886, 57886, 57886, 57886, 61030, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61036, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61393, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61407, 57909, 57909, 57909, 57909, 59955, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59967, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59973, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60366, 57909, 57909, 57909, 60369, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60373, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 4083, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57909, 57909, 59979, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60430, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60038, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60050, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60056, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1149, 0, 0, 57936, 57936, 60062, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3109, 0, 0, 60258, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59865, 3164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 3180, 521, 521, 521, 521, 521, 521, 3188, 521, 521, 521, 521, 521, 521, 521, 1333, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2858, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57909, 57909, 60628, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61070, 57909, 57909, 57936, 57936, 57936, 60677, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59027, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61099, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3171, 0, 0, 0, 521, 3175, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 2472, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59349, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61039, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 61441, 57886, 61443, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61454, 57909, 61456, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3607, 0, 3609, 0, 0, 0, 3613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1733, 0, 0, 0, 1736, 0, 0, 1739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 335872, 0, 0, 61467, 57936, 61469, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 4134, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61485, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59846, 57886, 59848, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60273, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 388, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2351104, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 456, 472, 472, 472, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 532, 57898, 532, 57898, 532, 532, 57898, 532, 532, 57921, 57898, 532, 532, 57898, 57898, 57898, 57921, 57898, 57898, 57898, 57898, 57898, 57898, 57898, 57921, 57921, 57898, 57898, 57948, 57898, 57898, 57898, 57898, 57898, 57898, 57898, 57948, 57948, 57898, 57898, 57898, 57898, 57948, 57948, 57898, 532, 57898, 57898, 57898, 1, 24578, 3, 155941, 156275, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 0, 0, 0, 0, 212992, 212992, 212992, 212992, 212992, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 58264, 57886, 57886, 58280, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58340, 57909, 57909, 58356, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59444, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59464, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58921, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 1722, 0, 1241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1293, 0, 0, 0, 0, 0, 1299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1890, 521, 521, 521, 521, 521, 521, 521, 521, 1372, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1391, 521, 521, 521, 521, 521, 1399, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 59819, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59357, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58772, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58848, 50657, 58754, 977, 58851, 57909, 57909, 57909, 57909, 57909, 58858, 57909, 57909, 57909, 57909, 58864, 57909, 57909, 57909, 58830, 57886, 57886, 57886, 57886, 57886, 58838, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58867, 57909, 57909, 57909, 57909, 57909, 57909, 60631, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60645, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59985, 57909, 57909, 59988, 59989, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60005, 57936, 0, 0, 1755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, 0, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59323, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59334, 57886, 57886, 57886, 57886, 57886, 58837, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61058, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61064, 57909, 61066, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59423, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59434, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61178, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61191, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59541, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59552, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61279, 57936, 57936, 521, 57886, 0, 0, 0, 3940, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 2282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2298, 2299, 0, 0, 0, 0, 0, 0, 0, 3382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 2355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2328, 521, 2413, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2866, 57886, 57886, 57886, 57886, 59844, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58824, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 59928, 57909, 57909, 57909, 57909, 59933, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60011, 57936, 57936, 57936, 57936, 60016, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58985, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 3380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4284416, 0, 0, 57886, 60829, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59366, 57886, 57936, 57936, 57936, 60913, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59562, 57936, 57936, 57936, 0, 521, 521, 521, 521, 3951, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 61310, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59875, 57886, 57886, 57886, 57886, 59880, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58859, 57909, 57909, 57909, 58863, 57909, 57909, 58874, 57909, 57909, 57909, 57909, 61326, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61342, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59004, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60689, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61508, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 521, 1333, 521, 521, 1698, 521, 58772, 57886, 57886, 57886, 59047, 57886, 1138, 0, 0, 1708, 0, 0, 0, 0, 1715, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3883, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59344, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59364, 57886, 57886, 57886, 341, 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 341, 295, 0, 0, 0, 0, 0, 4013, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4027, 521, 521, 4029, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59376, 57886, 57886, 57886, 57886, 57886, 57886, 59385, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59396, 59398, 57886, 57886, 57886, 57886, 0, 0, 0, 389, 390, 392, 342, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 748, 749, 750, 0, 0, 0, 0, 0, 756, 757, 0, 0, 0, 0, 0, 0, 0, 0, 769, 770, 0, 772, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 389, 0, 0, 0, 0, 0, 342, 389, 0, 0, 0, 139264, 147456, 0, 0, 0, 422, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 245760, 0, 0, 245760, 245760, 245760, 0, 0, 0, 0, 0, 245760, 0, 245760, 245760, 0, 0, 0, 245760, 245760, 0, 0, 245760, 0, 0, 0, 0, 131072, 0, 0, 0, 341, 0, 0, 0, 446, 0, 341, 0, 473, 473, 473, 473, 489, 489, 489, 489, 489, 489, 489, 489, 489, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 533, 57899, 533, 57899, 533, 533, 57899, 533, 533, 57922, 57899, 533, 533, 57899, 57899, 57899, 57922, 57899, 57899, 57899, 57899, 57899, 57899, 57899, 57922, 57922, 57899, 57935, 57949, 57935, 57935, 57935, 57935, 57935, 57935, 57935, 57949, 57949, 57935, 57935, 57935, 57935, 57949, 57949, 57935, 533, 57899, 57899, 57899, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 344064, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 660, 0, 779, 0, 0, 0, 0, 0, 779, 802, 0, 802, 800, 0, 0, 0, 814, 0, 0, 0, 656, 817, 0, 779, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 783, 656, 827, 0, 521, 830, 521, 521, 521, 846, 521, 521, 862, 521, 521, 521, 521, 876, 521, 521, 521, 521, 894, 521, 521, 57886, 57886, 58248, 57886, 57886, 57886, 58265, 57886, 57886, 58281, 57886, 57886, 57886, 57886, 58295, 57886, 57886, 57886, 57886, 58313, 57886, 57886, 0, 57909, 57909, 58324, 57909, 57909, 57909, 58341, 57909, 57909, 58357, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59476, 57909, 57909, 57909, 57909, 57909, 57909, 59485, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59496, 59498, 57909, 57909, 57909, 57909, 57886, 57909, 57909, 58371, 57909, 57909, 57909, 57909, 58389, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58399, 57936, 57936, 57936, 58416, 57936, 57936, 58432, 57936, 57936, 57936, 57936, 58446, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60412, 57936, 57936, 60416, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60425, 57936, 57936, 57936, 60428, 60429, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 1143, 0, 0, 1148, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3881, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58802, 57886, 57886, 57886, 58806, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60623, 57909, 57936, 57936, 58464, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 1816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 1274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 57906, 540, 57906, 540, 540, 57906, 540, 540, 57929, 57906, 540, 540, 57906, 57906, 57906, 57929, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58773, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59348, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59361, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58797, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58821, 57886, 57886, 57886, 57886, 57886, 57886, 59374, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59386, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59397, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61444, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61457, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3095, 521, 521, 521, 57886, 60442, 57886, 57886, 57886, 0, 0, 3100, 3101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 3776, 0, 0, 0, 0, 3780, 0, 0, 0, 0, 0, 0, 0, 0, 3783, 0, 521, 521, 521, 3785, 0, 0, 0, 0, 1814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645, 221645, 221645, 221645, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59316, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59327, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59345, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59356, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59876, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59416, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59427, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58429, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 2440, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2459, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60252, 57886, 57886, 57886, 57886, 57886, 60257, 59892, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 59910, 57909, 59912, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60340, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61060, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59981, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 59993, 57936, 59995, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60686, 60687, 57936, 57936, 57936, 57936, 60690, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60064, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2274, 0, 0, 0, 0, 0, 0, 0, 2820, 0, 0, 0, 0, 2823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2831, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61320, 57886, 521, 2842, 521, 521, 2845, 2846, 521, 521, 521, 521, 521, 2851, 521, 2853, 521, 521, 521, 521, 2857, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2863, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60251, 57886, 57886, 60254, 60255, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60878, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59445, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59456, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61336, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61352, 57936, 521, 521, 521, 521, 521, 2871, 521, 521, 521, 521, 521, 521, 2879, 521, 521, 521, 521, 521, 2884, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1904, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1353, 1355, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 60260, 57886, 60262, 57886, 57886, 57886, 57886, 60266, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60272, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60281, 57886, 57886, 57886, 57886, 57886, 59373, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59401, 57886, 57886, 57886, 57886, 57886, 60289, 57886, 57886, 57886, 57886, 57886, 60294, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60330, 57909, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60318, 57909, 57909, 60321, 60322, 57909, 57909, 57909, 57909, 57909, 60327, 57909, 60329, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60336, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60342, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60350, 57909, 57909, 57909, 57909, 57909, 57909, 60357, 57909, 57909, 57909, 60333, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60339, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60348, 57909, 57909, 57909, 57909, 57909, 57909, 60356, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60632, 57909, 57909, 60635, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60646, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60889, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 60906, 57936, 57936, 57936, 57936, 60910, 57909, 57909, 57909, 60361, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61192, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60383, 57936, 57936, 60386, 60387, 57936, 57936, 57936, 57936, 57936, 60392, 57936, 60394, 57936, 57936, 57936, 57936, 60398, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60404, 0, 0, 3139, 0, 0, 0, 0, 0, 0, 0, 3145, 0, 3147, 0, 0, 0, 3150, 0, 0, 3153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 450560, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1799, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3174, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2882, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2892, 521, 521, 521, 521, 521, 3192, 521, 521, 3195, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3205, 521, 521, 521, 521, 521, 521, 521, 521, 2443, 521, 521, 521, 521, 2448, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1906, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1940, 521, 521, 521, 521, 521, 521, 1947, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3214, 521, 521, 3217, 521, 521, 3220, 0, 0, 60565, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58302, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 60583, 57886, 57886, 60586, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60597, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59871, 57886, 57886, 57886, 57886, 57886, 59877, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 3431, 0, 0, 521, 521, 3436, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3453, 521, 3455, 521, 521, 521, 521, 521, 521, 521, 1334, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1358, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2419, 521, 521, 521, 521, 521, 521, 521, 521, 2426, 521, 2428, 521, 2431, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2444, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1392, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3461, 521, 521, 3463, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 60820, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59378, 57886, 57886, 57886, 59384, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59394, 57886, 57886, 57886, 57886, 59400, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 60888, 57909, 57909, 60890, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60904, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3601, 521, 57886, 60948, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 3664, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61020, 61021, 57886, 57886, 57886, 57886, 61025, 61026, 57909, 57909, 61049, 61050, 57909, 57909, 57909, 57909, 61054, 61055, 57909, 57909, 57909, 57909, 57909, 61059, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61065, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59960, 57909, 57909, 57909, 57909, 57909, 59966, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60341, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60353, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61094, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3764, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 2394, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2406, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3792, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59849, 57886, 57886, 57886, 57886, 57886, 57886, 59854, 57886, 59856, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60267, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61163, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 61154, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61173, 57886, 57886, 57886, 57886, 61242, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61258, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61075, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61087, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 4137, 521, 4138, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 0, 521, 521, 3949, 521, 521, 521, 521, 3954, 521, 521, 521, 521, 3959, 521, 521, 57886, 57886, 61308, 57886, 57886, 57886, 57886, 61313, 57886, 57886, 57886, 57886, 61318, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60873, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58418, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58969, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59012, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59029, 57936, 57909, 57909, 61324, 57909, 57909, 57909, 57909, 61329, 57909, 57909, 57909, 57909, 61334, 57909, 57909, 57909, 57936, 57936, 61340, 57936, 57936, 57936, 57936, 61345, 57936, 57936, 57936, 57936, 61350, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58962, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58986, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 3606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 61384, 57886, 57886, 61386, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61398, 57909, 57909, 61400, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3600, 521, 521, 60947, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3617, 3618, 0, 0, 57936, 57936, 57936, 57936, 61412, 57936, 57936, 61414, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60872, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59449, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58932, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 61533, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 4195, 521, 521, 521, 521, 57886, 61543, 57886, 57886, 57886, 57886, 57909, 61547, 57909, 57909, 57909, 57909, 57936, 61551, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 4196, 4197, 521, 521, 57886, 57886, 61544, 61545, 57886, 57886, 57909, 57909, 61548, 61549, 57909, 57909, 57936, 57936, 61552, 61553, 57936, 57936, 0, 57886, 57909, 57936, 4232, 61577, 61578, 61579, 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 345, 346, 347, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 245760, 245760, 245760, 245760, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 245760, 245760, 245760, 0, 0, 0, 0, 139264, 147456, 245760, 245760, 0, 0, 245760, 0, 0, 0, 245760, 245760, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 245760, 0, 0, 245760, 0, 0, 245760, 0, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 348, 347, 131072, 346, 347, 347, 348, 346, 347, 0, 346, 347, 450, 457, 474, 474, 474, 485, 485, 485, 491, 485, 485, 491, 491, 485, 491, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 534, 57900, 534, 57900, 534, 534, 57900, 534, 534, 57923, 57900, 534, 534, 57900, 57900, 57900, 57923, 57900, 57900, 57900, 57900, 57900, 57900, 57900, 57923, 57923, 57900, 57900, 57950, 57900, 57900, 57900, 57900, 57900, 57900, 57900, 57950, 57950, 57900, 57900, 57900, 57900, 57950, 57950, 57900, 534, 57900, 57900, 57900, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 644, 645, 646, 647, 648, 649, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 666, 0, 668, 669, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1881, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1375, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1914, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 709, 0, 0, 712, 0, 714, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499712, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 302, 305, 0, 306, 4857856, 4874240, 0, 0, 4923392, 0, 0, 0, 0, 757, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 796, 0, 0, 685, 0, 0, 0, 757, 0, 0, 0, 0, 0, 278528, 278528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1176, 0, 0, 0, 0, 0, 685, 816, 816, 0, 0, 0, 0, 0, 521, 521, 836, 840, 843, 521, 852, 521, 521, 521, 868, 870, 873, 521, 521, 521, 886, 890, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60871, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58892, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60372, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58255, 58259, 58262, 57886, 58271, 57886, 57886, 57886, 58287, 58289, 58292, 57886, 57886, 57886, 58305, 58309, 57886, 57886, 57886, 0, 57909, 57909, 57909, 58331, 58335, 58338, 57909, 58347, 57909, 57909, 57909, 58363, 58365, 58368, 57909, 57909, 57909, 58381, 58385, 57909, 57909, 57909, 0, 0, 0, 0, 58396, 57936, 57936, 57936, 58406, 58410, 58413, 57936, 58422, 57936, 57936, 57936, 58438, 58440, 58443, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58963, 57936, 57936, 57936, 57936, 58973, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58989, 57936, 58456, 58460, 57936, 57936, 57936, 836, 1127, 521, 886, 890, 1131, 0, 58476, 58255, 57886, 58305, 58309, 58481, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 540672, 0, 0, 1366, 521, 521, 1370, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1381, 521, 521, 1388, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1402, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60248, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60256, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58795, 57886, 57886, 57886, 58798, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58805, 57886, 57886, 58809, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58820, 57886, 57886, 58827, 57886, 57886, 57886, 57886, 57886, 59897, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59918, 57909, 57909, 59921, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58885, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58898, 57909, 57909, 57909, 57909, 58903, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59480, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 57936, 58994, 57936, 57936, 58998, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59010, 57936, 57936, 59017, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59031, 521, 1894, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1903, 521, 521, 521, 1907, 521, 521, 1912, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2447, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2458, 521, 521, 521, 521, 521, 58754, 0, 57886, 59308, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59315, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61164, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59337, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59346, 57886, 57886, 57886, 59350, 57886, 57886, 59355, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61160, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61168, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 59408, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59415, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59437, 57936, 59504, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59511, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59533, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60681, 57936, 57936, 60684, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60695, 57936, 0, 0, 0, 0, 2305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 352256, 352256, 352256, 521, 521, 521, 2438, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2865, 521, 2794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2381, 2894, 521, 521, 0, 0, 0, 2896, 0, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59393, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59974, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60437, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1727, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3789, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61146, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61151, 57886, 61239, 57886, 57886, 57886, 57886, 57886, 61245, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61251, 57909, 57909, 57909, 57909, 61255, 57909, 57909, 57909, 57909, 57909, 61261, 57909, 57909, 57909, 57909, 57936, 0, 0, 4166, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59577, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 3766, 0, 0, 0, 0, 0, 3769, 57936, 57936, 61267, 57936, 57936, 57936, 57936, 61271, 57936, 57936, 57936, 57936, 57936, 61277, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1880, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1891, 521, 0, 521, 521, 521, 521, 521, 3952, 521, 521, 521, 3956, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61311, 57886, 57886, 57886, 61315, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61387, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61401, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60043, 57936, 57936, 57936, 57936, 57936, 60049, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 57909, 57909, 57909, 57909, 57909, 61327, 57909, 57909, 57909, 61331, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61343, 57936, 57936, 57936, 61347, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61102, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 4228, 61573, 61574, 61575, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 395, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 364, 365, 366, 0, 0, 367, 0, 295, 0, 0, 349, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 407, 0, 349, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 3643, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2887, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 535, 57901, 535, 57901, 535, 535, 57901, 535, 535, 57924, 57901, 535, 535, 57901, 57901, 57901, 57924, 57901, 57901, 57901, 57901, 57901, 57901, 57901, 57924, 57924, 57901, 57901, 57951, 57901, 57901, 57901, 57901, 57901, 57901, 57901, 57951, 57951, 57901, 57901, 57901, 57901, 57951, 57951, 57901, 616, 57901, 57967, 57967, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2351104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, 0, 0, 0, 0, 0, 0, 0, 0, 1237, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2300, 0, 57909, 57909, 58372, 57909, 57909, 57909, 57909, 58390, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58400, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58447, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60917, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60925, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 3864, 0, 0, 0, 0, 0, 3627, 0, 0, 57936, 57936, 58465, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2325, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 1203, 1161, 0, 0, 0, 0, 0, 0, 1273, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 58760, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58774, 57886, 57886, 57886, 57886, 58784, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59873, 59874, 57886, 57886, 57886, 57886, 57886, 57886, 59881, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58929, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 58879, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58895, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60656, 57909, 57909, 60659, 57909, 57909, 60662, 60663, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 1756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 1785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, 0, 2286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 2418, 521, 521, 521, 521, 521, 521, 2423, 521, 2425, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1379, 521, 521, 521, 521, 521, 521, 521, 1393, 521, 521, 521, 521, 521, 521, 521, 521, 1405, 521, 521, 2869, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2435, 2436, 57936, 57936, 57936, 57936, 57936, 57936, 60411, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59529, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 3432, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1398, 521, 521, 521, 521, 521, 0, 3872, 0, 0, 0, 0, 0, 521, 3875, 521, 521, 3877, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61234, 57886, 57886, 61236, 57886, 57886, 57886, 57886, 57886, 60263, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60279, 57886, 57886, 57886, 57886, 57886, 61266, 57936, 57936, 61268, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 3944, 0, 0, 0, 0, 0, 417792, 0, 417792, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 417792, 0, 417792, 0, 0, 0, 0, 139264, 147456, 417792, 0, 0, 0, 417792, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 417792, 0, 0, 417792, 0, 417792, 418100, 3946, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59383, 57886, 57886, 57886, 57886, 57886, 57886, 59391, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2335231, 2335197, 2335231, 2335231, 57886, 57886, 57886, 58266, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58342, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60891, 57909, 60893, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60019, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60025, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 58754, 1962, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2557, 2962, 0, 0, 50657, 2062, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61068, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60408, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59021, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57886, 61028, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 352, 350, 131072, 0, 350, 350, 352, 0, 350, 0, 0, 350, 352, 350, 0, 0, 0, 350, 350, 350, 350, 350, 350, 350, 350, 498, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 536, 57902, 536, 57902, 536, 536, 57902, 536, 536, 57925, 57902, 536, 536, 57902, 57902, 57902, 57925, 57902, 57902, 57902, 57902, 57902, 57902, 57902, 57925, 57925, 57902, 57902, 57952, 57902, 57902, 57902, 57902, 57902, 57902, 57902, 57952, 57952, 57902, 57902, 57902, 57902, 57952, 57952, 57902, 536, 57902, 57902, 57902, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 799, 0, 0, 0, 0, 0, 0, 0, 521, 521, 837, 521, 521, 521, 853, 857, 521, 521, 521, 521, 521, 878, 880, 521, 521, 891, 521, 521, 521, 57886, 57886, 58250, 0, 751, 0, 0, 804, 0, 0, 0, 0, 0, 804, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 3879, 521, 521, 521, 521, 521, 521, 3885, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61238, 58256, 57886, 57886, 57886, 58272, 58276, 57886, 57886, 57886, 57886, 57886, 58297, 58299, 57886, 57886, 58310, 57886, 57886, 57886, 0, 57909, 57909, 58326, 58332, 57909, 57909, 57909, 58348, 58352, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61330, 57909, 61332, 61333, 57909, 61335, 57909, 61337, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61346, 57936, 61348, 61349, 57936, 61351, 57936, 61353, 57909, 57909, 58373, 58375, 57909, 57909, 58386, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58401, 58407, 57936, 57936, 57936, 58423, 58427, 57936, 57936, 57936, 57936, 57936, 58448, 58450, 57936, 0, 4165, 0, 4167, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 521, 1695, 521, 1697, 521, 521, 59044, 57886, 57886, 59046, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1720, 0, 0, 57936, 58461, 57936, 57936, 57936, 837, 521, 880, 521, 891, 521, 0, 57886, 58256, 58299, 57886, 58310, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 2309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3396, 0, 0, 0, 0, 0, 0, 0, 1208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 1224, 0, 0, 0, 0, 1229, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 3874, 521, 521, 521, 521, 3878, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3887, 521, 521, 61233, 57886, 57886, 57886, 57886, 61237, 57886, 1406, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 58761, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58792, 58794, 57886, 57886, 57886, 57886, 58273, 58277, 58283, 57886, 58288, 57886, 57886, 57886, 57886, 57886, 58306, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58328, 57909, 57909, 57909, 57909, 58349, 58353, 58359, 57909, 58364, 57886, 58832, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58844, 58845, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 58856, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58415, 57936, 57936, 58431, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 58913, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58927, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58939, 58940, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59512, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59523, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60021, 57936, 57936, 57936, 57936, 57936, 57936, 60026, 57936, 60028, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58950, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58981, 58983, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61202, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3781, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 57936, 59034, 59035, 57936, 57936, 521, 521, 1696, 521, 521, 1699, 57886, 57886, 59045, 57886, 57886, 59048, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 507904, 507904, 507904, 0, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2825, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 2837, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1895, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1955, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59313, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58813, 57886, 58815, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58828, 57886, 57886, 57886, 59338, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59399, 57886, 57886, 57886, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59413, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60909, 57936, 57936, 57909, 59438, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59509, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59534, 0, 0, 0, 2332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 2358, 0, 2360, 2361, 2362, 0, 2364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2372, 0, 0, 0, 0, 2377, 2378, 0, 0, 0, 0, 0, 0, 0, 49716, 49716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 327680, 2382, 0, 0, 0, 0, 0, 0, 0, 2388, 521, 521, 521, 521, 521, 521, 2395, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1905, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1918, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2439, 521, 521, 521, 521, 521, 2445, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3801, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 2745, 2746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 367, 0, 0, 0, 521, 521, 2843, 521, 521, 521, 521, 521, 2848, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2864, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60247, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59487, 59488, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 57936, 57936, 57936, 57936, 60384, 57936, 57936, 57936, 57936, 57936, 60389, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59016, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60405, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60033, 57936, 57936, 57936, 57936, 57936, 57936, 61269, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61278, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3446, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1937, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1385, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57936, 61534, 57936, 57936, 4192, 0, 4194, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 4193, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 4211, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 1335, 521, 521, 521, 521, 1345, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1361, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60246, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 59911, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58926, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4825088, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5177344, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 302, 0, 0, 306, 0, 0, 0, 306, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 387, 0, 353, 0, 0, 0, 0, 0, 396, 397, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 557056, 557056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3129, 0, 0, 0, 0, 0, 0, 0, 370, 378, 406, 0, 0, 0, 370, 0, 0, 353, 0, 0, 0, 370, 0, 409, 411, 0, 370, 398, 0, 0, 370, 378, 0, 139264, 147456, 398, 409, 0, 0, 409, 0, 0, 0, 432, 131072, 0, 432, 432, 0, 0, 432, 0, 411, 432, 0, 458, 0, 0, 0, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 508, 508, 508, 508, 520, 508, 508, 508, 520, 508, 508, 508, 508, 508, 508, 537, 57903, 537, 57903, 537, 537, 57903, 537, 537, 57926, 57903, 537, 537, 57903, 57903, 57903, 57926, 57903, 57903, 57903, 57903, 57903, 57903, 57903, 57926, 57926, 57903, 57903, 57953, 57903, 57903, 57903, 57903, 57903, 57903, 57903, 57953, 57953, 57903, 57903, 57903, 57903, 57953, 57953, 57903, 617, 57903, 57968, 57968, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4017, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61374, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 1276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 774, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 774, 0, 793, 0, 521, 832, 521, 521, 521, 521, 521, 521, 863, 865, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 58251, 1151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1290, 1316, 1317, 0, 1290, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 59822, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 59907, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59915, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 521, 1325, 521, 521, 521, 1329, 521, 521, 1340, 521, 521, 1344, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1363, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 60245, 57886, 57886, 57886, 57886, 60249, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58294, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59483, 57909, 57909, 57909, 57909, 57909, 57909, 59491, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 521, 1367, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2893, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58764, 57886, 57886, 57886, 58768, 57886, 57886, 58779, 57886, 57886, 58783, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60588, 60589, 57886, 57886, 57886, 57886, 60592, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60598, 57886, 57886, 57886, 57909, 57909, 58878, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58897, 57909, 57909, 57909, 58901, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60367, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59515, 57936, 57936, 57936, 57936, 59521, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59532, 57936, 57936, 57936, 57936, 57936, 57936, 58953, 57936, 57936, 57936, 58957, 57936, 57936, 58968, 57936, 57936, 58972, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58991, 57936, 57936, 57936, 58995, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60399, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 1726, 1727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 516560, 516560, 516560, 0, 1786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1808, 0, 0, 0, 0, 0, 5111808, 0, 0, 0, 0, 0, 5283840, 0, 0, 0, 0, 5472256, 5521408, 0, 0, 0, 0, 5595136, 5709824, 5718016, 0, 5824512, 5865472, 0, 0, 5922816, 0, 0, 6021120, 0, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59324, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60837, 57886, 60839, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60846, 57886, 57886, 60848, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59424, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61181, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60047, 57936, 57936, 57936, 57936, 60052, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 59442, 59443, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60907, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59538, 59539, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59556, 57936, 57936, 57936, 57936, 57936, 57936, 59563, 57936, 57936, 521, 521, 521, 59324, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 318, 0, 0, 0, 0, 0, 2384, 0, 0, 2387, 0, 521, 521, 2390, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 60823, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59867, 59868, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59879, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59891, 57909, 57909, 57909, 57909, 57909, 59956, 59957, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59968, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58891, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59457, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59980, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 59992, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3868, 3627, 0, 0, 57936, 57936, 57936, 57936, 57936, 60039, 60040, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60051, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60705, 57936, 57936, 60708, 57936, 57936, 60711, 3368, 521, 521, 60715, 57886, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 60063, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 2732, 2733, 57886, 57886, 57886, 60081, 60082, 0, 0, 1710, 0, 0, 1717, 0, 0, 0, 0, 0, 1728, 1729, 0, 0, 0, 0, 0, 1735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 361, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 2821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2827, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2460, 521, 2462, 57886, 60286, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59919, 57909, 57909, 57909, 57909, 57936, 60406, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60418, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59011, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 3194, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3207, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 59818, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59826, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60590, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 60615, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60648, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60002, 57936, 57936, 57936, 57936, 57936, 60697, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 6152192, 0, 0, 0, 6316032, 0, 196608, 0, 0, 5816320, 6291456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 61097, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3760, 57886, 57886, 61106, 3763, 0, 0, 0, 0, 3767, 0, 0, 0, 0, 0, 0, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 1171, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3788, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 61147, 57886, 57886, 57886, 61150, 57886, 57886, 57886, 57886, 58274, 57886, 57886, 57886, 57886, 57886, 58293, 57886, 57886, 57886, 57886, 58311, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58350, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59478, 57909, 57909, 57909, 59484, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59494, 57909, 57909, 57909, 57909, 59500, 57909, 57909, 57886, 57886, 57886, 57886, 61241, 57886, 61243, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61257, 57909, 61259, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61074, 57936, 57936, 57936, 61077, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61085, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59516, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59528, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61470, 57936, 57936, 57936, 0, 4130, 0, 0, 0, 0, 0, 521, 521, 4135, 521, 4136, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 61486, 57886, 61487, 57886, 57886, 57886, 57886, 59340, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59353, 57886, 57886, 57886, 59358, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59914, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60709, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 475, 475, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 509, 513, 513, 513, 513, 509, 513, 513, 513, 509, 513, 513, 513, 513, 513, 513, 538, 57904, 538, 57904, 538, 538, 57904, 538, 538, 57927, 57904, 538, 538, 57904, 57904, 57904, 57927, 57904, 57904, 57904, 57904, 57904, 57904, 57904, 57927, 57927, 57904, 57904, 57954, 57904, 57904, 57904, 57904, 57904, 57904, 57904, 57954, 57954, 57904, 57904, 57904, 57904, 57954, 57954, 57904, 618, 57904, 57969, 57969, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 0, 521, 521, 1320, 521, 1323, 0, 680, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3876, 521, 521, 521, 521, 3880, 521, 521, 521, 521, 521, 3886, 521, 521, 521, 57886, 57886, 57886, 61235, 57886, 57886, 57886, 658, 0, 637, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 795, 0, 0, 0, 0, 0, 0, 637, 0, 0, 781, 521, 833, 521, 521, 521, 521, 854, 858, 864, 521, 869, 521, 521, 521, 521, 521, 887, 521, 521, 521, 521, 57886, 57886, 58252, 0, 790, 0, 795, 0, 781, 0, 807, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 1277, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 58382, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58403, 57936, 57936, 57936, 57936, 58424, 58428, 58434, 57936, 58439, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 1142, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 310, 0, 310, 311, 0, 310, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 408, 311, 0, 0, 0, 0, 0, 0, 311, 413, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 58457, 57936, 57936, 57936, 57936, 521, 521, 521, 887, 521, 521, 0, 57886, 57886, 57886, 58306, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 2336, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2292, 2293, 0, 2295, 2296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 0, 0, 0, 1183, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 1251, 0, 0, 0, 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1267, 0, 0, 0, 0, 0, 0, 1301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 1275, 0, 0, 1152, 0, 0, 0, 1281, 0, 1283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1291, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 2393, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2405, 521, 521, 521, 521, 521, 521, 0, 1297, 1256, 0, 1281, 1300, 0, 1303, 0, 0, 0, 1183, 0, 0, 0, 0, 1311, 0, 0, 0, 0, 0, 1311, 0, 0, 1202, 1311, 1318, 521, 521, 521, 521, 521, 521, 0, 0, 0, 2473, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61043, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 1324, 521, 521, 521, 521, 1330, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1351, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1364, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 60243, 57886, 60244, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 521, 521, 1369, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1377, 521, 521, 521, 1384, 1386, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2881, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3202, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3208, 521, 521, 521, 521, 1409, 58754, 901, 58756, 57886, 57886, 57886, 57886, 57886, 58763, 57886, 57886, 57886, 57886, 58769, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58790, 57886, 57886, 57886, 57886, 57886, 57886, 59870, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58818, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 58911, 57909, 57909, 57909, 58918, 58920, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58943, 0, 58944, 58945, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59543, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58984, 57936, 57936, 57936, 58987, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58952, 57936, 57936, 57936, 57936, 58958, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58979, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58992, 57936, 57936, 57936, 57936, 58997, 57936, 57936, 57936, 57936, 57936, 59002, 57936, 57936, 57936, 59006, 57936, 57936, 57936, 59013, 59015, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60922, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60395, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59038, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 1710, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1775, 0, 0, 0, 0, 0, 0, 0, 1783, 1784, 0, 0, 0, 0, 1840, 1841, 0, 0, 0, 1844, 0, 0, 0, 0, 0, 1849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 581632, 581632, 0, 1862, 0, 1864, 1840, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1876, 521, 521, 521, 521, 1882, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2850, 521, 2852, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2427, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1893, 521, 521, 521, 521, 1897, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1910, 521, 521, 521, 1915, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2849, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2429, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59319, 57886, 57886, 57886, 57886, 59325, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59336, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59419, 57909, 57909, 57909, 57909, 59425, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59436, 57909, 57909, 57909, 57909, 57909, 57909, 60653, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61091, 57936, 57909, 57909, 57909, 59440, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59453, 57909, 57909, 57909, 59458, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59936, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59942, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 59536, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59549, 57936, 57936, 57936, 59554, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 2730, 521, 521, 521, 57886, 60079, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 2257, 521, 521, 59604, 57886, 59606, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2277, 2278, 0, 0, 0, 0, 0, 5210112, 0, 5365760, 0, 5554176, 5570560, 5578752, 0, 5668864, 0, 0, 5791744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6201344, 6242304, 6250496, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3443, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1382, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 2383, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2403, 521, 521, 2407, 521, 521, 521, 2411, 57886, 57886, 59842, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59852, 57886, 57886, 57886, 59855, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60609, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 60618, 57909, 60619, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 59894, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 2561, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59923, 57909, 57909, 59927, 57909, 57909, 57909, 59931, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59941, 57909, 57909, 57909, 59944, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61180, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61186, 57936, 57936, 57936, 61190, 57936, 57936, 57936, 57936, 57936, 59978, 57909, 57909, 57909, 57909, 57909, 59983, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60006, 57936, 57936, 60010, 57936, 57936, 57936, 60014, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60024, 57936, 57936, 57936, 60027, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 4076, 0, 4078, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 60061, 57936, 57936, 57936, 57936, 57936, 60066, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2273, 0, 0, 0, 0, 0, 0, 0, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2826, 0, 0, 0, 0, 0, 0, 521, 521, 2833, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3465, 3467, 521, 521, 521, 3470, 521, 3472, 3473, 521, 57886, 57886, 57886, 57886, 57886, 57886, 60824, 57886, 57886, 57886, 57886, 57886, 2841, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2856, 521, 521, 521, 521, 2859, 521, 521, 2861, 521, 2862, 521, 521, 521, 521, 521, 521, 0, 0, 2472, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59834, 57886, 57886, 59838, 57886, 521, 521, 521, 521, 2870, 521, 521, 2874, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2883, 521, 521, 521, 2886, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3669, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58860, 57909, 57909, 57909, 57909, 57909, 58872, 0, 0, 57909, 57909, 60309, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60317, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61183, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60420, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59008, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59022, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 60332, 57909, 57909, 57909, 57909, 60335, 57909, 57909, 60337, 57909, 60338, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60347, 57909, 57909, 60351, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60655, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 60666, 57936, 57936, 57936, 57936, 57936, 57936, 60673, 57909, 57909, 60360, 57909, 57909, 57909, 60363, 60364, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60374, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3096, 521, 521, 57886, 57886, 60443, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 450560, 0, 0, 57936, 57936, 57936, 60382, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60397, 57936, 57936, 57936, 57936, 60400, 57936, 57936, 60402, 57936, 60403, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61272, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 3942, 3627, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 379, 381, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1885, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3794, 521, 521, 521, 3795, 3796, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2559, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60325, 57909, 57909, 57909, 57909, 57909, 57909, 3190, 521, 521, 521, 3193, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1917, 521, 521, 521, 521, 521, 57886, 60581, 57886, 57886, 57886, 60584, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60594, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60838, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2561, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60630, 57909, 57909, 57909, 60633, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60643, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58417, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60920, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 60674, 57936, 57936, 57936, 57936, 60679, 57936, 57936, 57936, 60682, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60692, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 4072, 4073, 0, 0, 0, 0, 0, 4079, 4080, 4081, 521, 521, 521, 4084, 521, 4086, 521, 521, 521, 521, 61435, 61436, 61437, 3457, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3469, 521, 521, 521, 521, 521, 57886, 57886, 57886, 60821, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60587, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60595, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2560, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60640, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60883, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60897, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60905, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61201, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3784, 521, 521, 521, 57936, 60939, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 3610, 0, 0, 0, 0, 0, 0, 0, 3616, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 2824, 2782, 0, 0, 0, 0, 0, 2829, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 2838, 521, 521, 521, 521, 521, 0, 0, 0, 3640, 3641, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3651, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3671, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60612, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60620, 57909, 57909, 57909, 57909, 521, 3661, 521, 521, 521, 521, 521, 3666, 521, 3668, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61022, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60292, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60303, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 57909, 57909, 57909, 57909, 61051, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61061, 57909, 57909, 57909, 57909, 57909, 57909, 61067, 57909, 61069, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58884, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58894, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59938, 57909, 57909, 57909, 57909, 57909, 57909, 59943, 57909, 59945, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61096, 57936, 61098, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 3765, 0, 0, 0, 0, 0, 0, 0, 0, 2363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 659, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3770, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 3779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3786, 521, 521, 521, 3790, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3799, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61148, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60867, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60880, 57909, 57909, 61152, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61161, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61167, 57909, 57909, 57909, 61171, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61053, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59459, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61438, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61446, 57886, 57909, 57909, 57909, 61451, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61459, 57909, 57936, 57936, 57936, 61464, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59576, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 61472, 57936, 0, 0, 0, 0, 4131, 0, 4133, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4139, 4140, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61445, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61458, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60919, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60929, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4088, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61490, 61491, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61498, 61499, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61506, 61507, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61415, 0, 0, 4074, 4075, 0, 0, 0, 521, 521, 521, 4082, 521, 521, 521, 521, 521, 521, 521, 521, 4090, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 60865, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61184, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61189, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 4220, 57886, 61565, 57909, 61566, 57936, 61567, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 1899, 1900, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3800, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 425, 425, 0, 0, 131072, 425, 0, 0, 0, 425, 0, 0, 447, 0, 425, 0, 476, 476, 476, 0, 0, 361, 361, 361, 495, 361, 361, 361, 361, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 539, 57905, 539, 57905, 539, 539, 57905, 539, 539, 57928, 57905, 539, 539, 57905, 57905, 57905, 57928, 57905, 57905, 57905, 57905, 57905, 57905, 57905, 57928, 57928, 57905, 57905, 57955, 57905, 57905, 57905, 57905, 57905, 57905, 57905, 57955, 57955, 57905, 57905, 57905, 57905, 57955, 57955, 57905, 539, 57905, 57905, 57905, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376832, 0, 376832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 58369, 57909, 57909, 57909, 57909, 58387, 57909, 57909, 57909, 0, 0, 0, 0, 58293, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58425, 57936, 57936, 57936, 57936, 57936, 58444, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60069, 57936, 57936, 57936, 57936, 2729, 521, 521, 521, 521, 60078, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 2742, 57936, 58462, 57936, 57936, 57936, 521, 521, 521, 521, 892, 521, 0, 57886, 57886, 57886, 57886, 58311, 57886, 155941, 1138, 0, 1139, 0, 0, 1144, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 5341184, 0, 5652480, 0, 0, 0, 0, 4759552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1827, 0, 0, 0, 0, 0, 0, 0, 1834, 0, 0, 0, 0, 0, 0, 1244, 0, 0, 0, 0, 1249, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466944, 0, 0, 0, 0, 0, 0, 0, 0, 1825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 354, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 521, 521, 521, 1327, 521, 521, 521, 1336, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2895, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60574, 57886, 57886, 60578, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58766, 57886, 57886, 57886, 58775, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61034, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61042, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61047, 57909, 57936, 57936, 57936, 57936, 57936, 58955, 57936, 57936, 57936, 58964, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59555, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 521, 1931, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1953, 521, 521, 521, 521, 521, 521, 0, 2470, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59839, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59333, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 60864, 57909, 57909, 57909, 57909, 60868, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60874, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58402, 57936, 57936, 57936, 57936, 57936, 57936, 58433, 58435, 57936, 57936, 57936, 57936, 57936, 57936, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59433, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59986, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60001, 57936, 57936, 60004, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 59474, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59486, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59497, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 59372, 57886, 57886, 59375, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59389, 57886, 57886, 57886, 57886, 57886, 57886, 59395, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59872, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60304, 57886, 57886, 57886, 0, 2962, 0, 0, 57936, 57936, 57936, 57936, 59570, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59582, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59593, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 293, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3119, 0, 3120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3135, 0, 0, 0, 0, 2283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2301, 0, 0, 0, 0, 2359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 57886, 59841, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59863, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 59930, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 58947, 57936, 57936, 57936, 57936, 57936, 57936, 60013, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59589, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60313, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58931, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 60626, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 1259, 57886, 57936, 57936, 57936, 57936, 57936, 60675, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59524, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57886, 57886, 57886, 61155, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61174, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61193, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61100, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 57936, 57936, 57936, 57936, 61471, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57886, 57886, 57936, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 57936, 57886, 57886, 57886, 57886, 57936, 57936, 57886, 521, 57886, 57886, 57886, 372, 372, 0, 0, 131072, 372, 0, 0, 0, 372, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57906, 57906, 57906, 57906, 57906, 57906, 57906, 57929, 57929, 57906, 57906, 57956, 57906, 57906, 57906, 57906, 57906, 57906, 57906, 57956, 57956, 57906, 57906, 57906, 57906, 57956, 57956, 57906, 540, 57906, 57906, 57906, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2334720, 0, 2334720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 2834, 2835, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 58267, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58343, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61179, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61187, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2758, 2759, 0, 0, 2762, 0, 2764, 0, 0, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58780, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 59909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60658, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60667, 57936, 60668, 57936, 57936, 57936, 57936, 58875, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59947, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 3771, 0, 3772, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3657, 521, 521, 521, 521, 521, 521, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 245760, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 364, 0, 0, 0, 0, 363, 0, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 653, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 131072, 0, 433, 433, 0, 0, 433, 0, 364, 433, 0, 459, 0, 0, 0, 487, 487, 490, 490, 490, 490, 496, 497, 490, 490, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 541, 57907, 541, 57907, 541, 541, 57907, 541, 541, 57930, 57907, 541, 541, 57907, 57907, 57907, 57930, 57907, 57907, 57907, 57907, 57907, 57907, 57907, 57930, 57930, 57907, 57907, 57957, 57907, 57907, 57907, 57907, 57907, 57907, 57907, 57957, 57957, 57907, 57907, 57907, 57907, 57957, 57957, 57907, 619, 57907, 57970, 57970, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 1806, 0, 0, 0, 0, 1246, 1246, 0, 0, 57909, 57909, 57909, 57909, 57909, 58383, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60688, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58458, 57936, 57936, 57936, 57936, 521, 521, 521, 888, 521, 521, 0, 57886, 57886, 57886, 58307, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3402, 2768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2318336, 57909, 57909, 57909, 57909, 57909, 60334, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60344, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 58268, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58344, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58393, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 58409, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59517, 59518, 57936, 57936, 57936, 57936, 59525, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2792, 0, 521, 1368, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1395, 521, 521, 521, 521, 521, 521, 521, 521, 2875, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58834, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60895, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60903, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58996, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59024, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 3178, 521, 3179, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2469, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59883, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 2844, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2434, 521, 521, 57936, 57936, 57936, 57936, 57936, 57936, 60385, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59522, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 640, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 893, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 60862, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60879, 57909, 60881, 57909, 57936, 58463, 57936, 57936, 57936, 1126, 521, 521, 521, 893, 521, 0, 57886, 58477, 57886, 57886, 58312, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 331, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59326, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 59908, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60343, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59426, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59961, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60346, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 521, 521, 521, 521, 2415, 521, 2417, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2432, 521, 521, 521, 521, 521, 521, 2867, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1923, 57936, 57936, 57936, 57936, 60409, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60423, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3660, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 2562, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 61185, 57936, 57936, 57936, 61188, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 2310560, 2310560, 0, 2310144, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 367, 0, 0, 0, 0, 0, 0, 0, 2310560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 383, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 2310144, 0, 0, 2310144, 0, 0, 2310144, 0, 2310144, 2310144, 0, 2310144, 0, 2310144, 2310144, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3445, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1347, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1362, 521, 521, 2310144, 0, 0, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310144, 2310733, 2310144, 2310144, 2310733, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310, 0, 0, 0, 0, 0, 0, 0, 0, 2318, 0, 0, 0, 0, 0, 2322, 0, 0, 2324, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 839, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 898, 57886, 57886, 57886, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 2335197, 2335197, 2335197, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3399, 3400, 0, 3401, 0, 2335231, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2763, 0, 0, 0, 0, 0, 2767, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 0, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2813, 0, 0, 0, 0, 2367488, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 976, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 2391, 2392, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2855, 521, 521, 521, 521, 521, 521, 521, 2860, 521, 521, 521, 521, 521, 521, 521, 521, 0, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3134, 0, 0, 212992, 0, 0, 0, 0, 0, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792, 0, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 4358144, 4358144, 0, 1411, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 0, 0, 0, 0, 750, 808, 0, 0, 0, 750, 0, 0, 811, 692, 0, 0, 0, 816, 0, 0, 0, 818, 0, 0, 0, 685, 692, 0, 0, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 0, 0, 0, 0, 0, 656, 0, 779, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 800, 0, 783, 0, 0\n];\n\nJSONiqParser.EXPECTED =\n[ 166, 182, 211, 1104, 242, 1452, 1467, 273, 289, 712, 1117, 319, 349, 333, 365, 381, 397, 413, 195, 1866, 2240, 2243, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 429, 445, 461, 477, 2088, 226, 493, 2075, 939, 621, 523, 543, 1716, 559, 575, 591, 607, 1422, 650, 666, 1822, 697, 1565, 634, 728, 738, 754, 796, 812, 828, 844, 860, 876, 892, 908, 924, 955, 2180, 985, 681, 2211, 1015, 1044, 1028, 1060, 1090, 1133, 1320, 1149, 1165, 1551, 1181, 1197, 1213, 1229, 1259, 1904, 1365, 1375, 999, 969, 1762, 1289, 1305, 1336, 1351, 1488, 1391, 1407, 1504, 1623, 1520, 1536, 1581, 1273, 1610, 1639, 1655, 1671, 2118, 2149, 1687, 1703, 1437, 507, 1732, 1748, 1778, 1074, 780, 1809, 1838, 1854, 1890, 1920, 1936, 1952, 1968, 1984, 2000, 2016, 2032, 2061, 257, 2104, 303, 2045, 767, 1793, 1594, 2134, 1243, 2165, 2196, 2227, 2234, 1874, 1479, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 536, 2259, 2263, 2271, 2271, 2271, 2265, 2269, 2271, 2272, 2276, 2279, 2286, 2282, 2290, 2294, 2298, 2302, 2306, 2310, 2381, 2790, 2790, 4003, 4941, 2790, 2791, 2314, 3074, 2982, 2790, 2790, 2790, 2687, 2790, 5013, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2827, 2790, 2571, 3537, 4080, 2436, 2320, 2443, 2466, 2326, 2336, 2790, 2790, 2790, 2343, 2790, 2790, 2349, 3841, 2707, 2790, 2734, 2759, 2790, 2790, 2790, 2790, 4756, 2738, 2790, 2790, 2790, 2790, 4767, 2321, 2390, 2466, 2466, 2466, 2466, 2355, 2361, 2790, 2790, 2790, 2790, 2790, 2371, 4535, 2790, 2696, 4816, 2790, 2790, 2790, 2697, 4817, 2790, 2790, 2790, 4822, 4790, 2790, 2790, 3017, 3842, 2448, 2790, 2790, 3537, 4079, 4079, 4079, 4079, 4079, 4099, 2436, 2436, 2436, 2436, 2436, 2387, 2321, 2321, 2321, 2321, 2321, 2459, 2466, 2466, 2466, 2466, 2466, 2332, 2401, 2790, 2790, 2762, 4873, 2790, 2790, 2790, 2790, 2820, 4885, 2790, 2790, 2790, 2790, 3243, 4891, 3542, 4079, 4079, 4079, 4097, 2436, 2436, 2436, 2436, 2458, 2321, 2321, 2321, 2331, 2466, 2466, 2426, 2790, 2790, 3074, 4076, 4079, 4079, 2396, 2436, 2482, 2321, 2321, 2464, 2466, 2466, 2411, 2790, 2790, 4535, 2790, 4077, 4079, 4079, 2480, 2436, 2436, 2457, 2321, 2321, 2420, 2467, 2428, 2834, 3536, 4079, 2434, 2436, 2441, 2321, 2465, 2332, 2447, 4095, 4081, 2437, 2376, 2466, 2452, 4078, 2436, 2321, 2466, 4335, 4081, 2456, 2463, 2422, 4080, 2482, 2463, 2471, 4098, 2483, 2331, 2478, 2329, 2487, 2491, 2474, 2495, 2498, 2508, 2512, 2519, 2519, 2519, 2515, 2525, 2519, 2521, 2529, 2536, 2532, 2540, 2544, 2548, 2552, 2556, 2560, 4697, 2790, 2790, 2790, 4729, 2790, 4591, 2584, 2858, 2790, 2790, 2790, 3364, 2591, 2790, 3610, 2603, 2609, 2613, 2617, 2621, 2625, 2628, 2632, 2636, 4053, 2702, 2790, 2790, 2790, 2790, 3877, 2642, 2648, 2892, 4432, 2646, 2915, 2367, 2654, 3828, 2813, 2790, 2652, 3406, 2659, 2664, 2790, 2790, 2790, 2790, 2790, 2671, 4434, 2580, 4063, 2790, 2676, 2680, 2790, 2790, 2790, 3867, 2684, 2790, 2790, 2790, 3868, 2685, 2750, 2790, 2790, 2790, 2790, 2756, 2760, 2790, 2790, 2790, 2790, 2790, 2880, 2666, 2790, 2790, 2777, 4228, 3359, 2851, 4232, 4238, 2790, 4246, 4420, 4253, 3266, 4258, 4264, 3443, 2790, 4721, 2782, 2790, 2790, 2790, 3228, 3232, 2790, 2790, 2790, 2790, 4105, 2790, 2790, 2790, 2790, 2790, 2790, 3903, 3876, 2788, 4641, 2790, 2790, 2790, 3307, 2790, 2790, 2790, 4640, 2818, 2790, 2790, 3306, 2795, 2935, 2812, 2790, 2790, 2744, 2790, 3875, 3239, 2817, 2790, 4088, 2790, 2790, 2824, 2790, 3502, 2818, 2790, 3007, 2790, 3959, 3750, 2960, 2745, 3748, 2790, 4626, 2790, 4622, 2667, 2940, 2842, 3754, 2902, 4615, 2840, 3753, 3753, 3753, 4616, 2838, 4624, 4624, 3006, 3753, 2841, 2903, 2719, 3291, 3292, 3752, 2941, 2998, 3000, 2847, 2790, 2790, 2790, 2790, 2790, 3322, 3326, 2790, 2790, 2790, 3241, 4802, 2775, 4735, 2782, 2790, 2790, 2790, 4802, 3231, 2790, 2790, 2790, 2771, 4780, 3110, 4601, 2790, 3607, 2790, 3763, 3555, 2886, 2973, 2790, 3980, 2790, 3666, 2790, 4542, 2416, 2884, 2890, 2896, 2907, 4569, 2911, 2790, 2919, 5035, 2790, 2913, 2925, 2790, 4599, 2686, 2790, 3665, 2790, 4541, 3125, 4330, 4429, 2929, 2934, 2939, 3953, 2790, 2790, 4197, 3440, 2790, 2790, 2790, 2790, 4592, 3426, 2790, 2790, 2790, 2790, 2790, 4860, 2951, 2790, 3324, 2790, 2790, 3609, 3761, 2790, 4016, 2955, 2741, 2842, 2790, 4742, 2959, 2790, 2790, 4535, 2790, 2790, 4096, 4079, 4079, 4079, 4079, 2435, 2436, 2436, 2436, 2436, 2437, 2980, 2790, 2790, 2790, 2790, 2802, 2989, 2790, 2790, 2790, 2790, 2801, 2988, 2790, 2790, 2790, 4818, 4810, 3928, 2790, 3608, 3761, 2316, 2993, 3004, 2790, 3011, 3032, 2790, 2790, 2790, 4503, 3015, 2790, 2790, 2790, 2790, 3011, 3032, 2790, 2790, 2790, 2790, 2790, 3026, 4920, 2790, 2790, 2790, 2790, 3025, 4919, 2790, 2790, 2790, 2790, 2790, 4355, 3755, 4359, 2790, 2790, 3354, 3059, 4366, 4372, 4240, 2834, 4504, 3016, 2790, 2790, 3635, 3927, 3023, 3031, 4541, 3436, 3037, 3854, 3044, 2790, 2790, 3451, 3049, 2790, 2790, 3024, 3043, 2790, 2790, 2801, 3048, 2790, 2790, 3053, 3064, 3031, 4492, 3071, 2975, 3079, 2790, 3470, 3088, 2790, 3421, 3079, 2790, 2801, 3098, 2790, 4152, 3102, 3109, 2574, 3114, 3122, 2790, 4585, 3124, 2790, 3129, 2790, 4584, 3123, 2790, 4154, 3033, 3133, 4950, 3518, 3142, 4948, 4952, 3148, 2790, 4155, 3156, 3188, 3160, 3150, 4950, 3167, 3186, 3174, 3174, 3174, 3180, 3184, 3192, 3192, 3196, 3200, 3175, 3209, 3433, 3213, 3176, 3861, 3217, 3221, 4494, 3225, 3236, 3247, 2790, 2790, 2790, 2790, 3914, 2790, 2790, 3253, 3263, 3403, 3170, 3479, 3270, 3274, 3278, 3282, 3285, 3285, 3286, 2790, 2790, 3913, 2790, 3549, 3337, 3848, 3342, 3290, 3496, 2655, 3296, 3300, 3311, 3318, 4953, 3330, 4637, 2790, 3320, 2790, 2790, 3659, 2790, 2790, 3336, 2790, 2790, 4722, 2770, 2790, 2790, 2790, 2790, 4722, 2770, 2790, 2790, 2790, 2790, 2790, 4190, 3341, 3484, 3460, 3144, 3346, 3363, 3369, 2976, 3375, 2790, 2790, 2790, 3383, 3388, 2790, 2790, 2790, 3472, 2790, 2790, 2790, 4413, 2790, 4305, 3786, 4825, 2790, 2790, 2364, 2790, 3482, 3486, 2790, 3416, 3420, 2790, 4591, 3425, 2790, 2790, 2790, 2790, 2672, 3430, 2790, 2790, 2790, 3769, 2790, 2790, 2790, 2790, 3471, 3736, 2790, 2790, 2790, 2790, 3776, 2790, 3469, 2790, 2790, 2790, 2790, 4198, 3468, 2790, 2790, 2790, 2790, 4198, 3468, 2790, 2790, 2790, 2790, 2921, 3506, 2790, 2790, 2790, 4591, 3513, 2790, 2790, 2790, 3724, 2660, 2790, 4124, 3542, 3476, 3490, 3494, 3634, 3500, 2790, 2921, 3506, 2790, 2790, 2790, 2790, 3512, 3517, 3522, 2833, 3204, 2790, 3527, 2790, 2790, 2790, 4249, 2790, 2790, 2790, 3526, 2790, 2790, 2790, 3821, 2761, 2790, 2790, 2790, 2790, 4347, 2686, 2790, 2790, 2790, 2790, 4351, 2790, 4248, 2790, 2790, 2790, 3531, 3517, 3412, 2790, 2790, 4987, 2790, 2790, 2563, 2790, 2790, 2790, 4094, 4079, 4079, 4079, 4079, 2435, 2436, 2436, 2436, 2397, 2321, 2321, 2321, 2321, 2321, 2464, 2466, 2466, 2466, 2466, 2393, 2405, 2790, 2790, 2833, 2790, 4987, 2790, 2790, 4422, 2790, 2790, 4126, 4322, 3032, 2790, 4987, 2790, 3390, 4989, 2790, 2605, 2730, 2790, 3541, 3547, 4788, 3547, 2566, 2566, 2566, 4894, 4014, 4014, 4014, 4788, 2832, 3553, 2315, 4875, 2567, 4015, 4896, 2830, 2899, 3559, 3560, 3564, 2790, 2790, 2790, 2790, 2790, 3615, 3614, 2790, 2790, 4465, 3917, 2585, 3619, 3625, 3737, 4266, 4915, 3629, 3649, 4306, 3633, 3639, 3647, 3653, 2790, 2790, 4691, 3658, 2790, 4464, 3916, 2790, 3663, 2722, 3670, 3674, 4193, 4196, 2790, 3690, 2790, 2790, 2790, 2382, 3694, 2790, 2790, 2790, 2383, 3695, 2790, 2790, 2790, 2339, 3143, 2790, 2790, 2790, 4517, 2790, 2965, 4474, 4719, 4065, 4703, 2578, 3699, 3704, 2790, 2790, 3118, 2790, 2790, 2790, 4999, 2790, 4869, 4984, 5004, 2752, 2790, 2790, 3118, 2790, 4317, 3723, 2790, 2790, 2790, 2790, 4391, 3711, 2790, 2790, 2790, 2790, 3716, 3847, 2790, 2790, 3259, 2790, 2790, 2790, 2790, 2790, 3258, 2783, 2790, 2790, 2790, 2790, 3258, 2783, 3791, 2725, 2790, 3795, 2790, 2790, 3803, 2790, 2790, 3810, 2790, 2790, 2638, 2790, 4782, 3202, 2716, 3818, 2790, 3795, 2790, 4584, 3812, 2790, 2351, 2790, 2790, 3811, 2790, 3825, 3838, 2790, 2790, 4988, 2790, 3725, 4875, 2790, 2414, 2790, 3535, 4942, 2790, 2430, 2790, 4323, 4014, 3846, 3205, 3847, 4039, 2790, 2713, 2790, 3852, 3683, 3067, 3104, 2790, 3685, 4305, 3685, 3915, 3915, 3105, 3683, 3683, 3683, 3066, 3331, 3105, 3332, 3331, 3332, 3684, 3256, 2790, 2790, 3371, 3735, 2790, 2790, 2790, 2790, 3421, 3742, 2790, 2790, 2790, 2790, 2790, 3741, 2790, 2790, 2790, 2790, 3746, 2790, 3759, 2703, 3621, 4113, 3881, 3885, 3889, 3893, 3894, 3898, 3902, 2790, 2790, 3162, 2790, 2790, 3643, 2983, 4501, 4562, 3907, 3765, 4282, 3921, 2790, 4554, 4022, 2790, 3925, 3932, 4556, 3936, 2790, 4242, 3941, 2790, 2855, 2784, 3943, 4375, 4402, 2862, 2866, 2870, 2874, 2874, 2875, 2879, 2819, 3325, 2790, 2778, 2790, 4182, 4960, 4187, 2504, 5007, 4203, 4207, 4211, 4215, 4219, 4222, 4224, 2790, 2790, 4077, 4079, 4079, 4079, 4079, 4079, 2396, 2436, 2436, 2436, 2436, 2436, 2375, 2321, 2321, 2321, 2322, 2466, 2466, 2466, 2466, 2466, 2332, 2357, 2380, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3204, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3163, 2790, 2790, 2746, 3858, 4848, 4930, 3872, 3642, 4579, 2727, 4118, 2315, 3764, 3947, 3951, 2790, 2790, 3814, 3957, 2790, 2790, 2790, 3967, 3350, 2984, 2729, 3978, 3548, 3984, 3961, 2790, 2790, 3813, 3988, 2790, 2790, 2790, 2790, 3686, 4027, 2790, 2790, 2790, 2790, 3257, 4051, 2790, 3074, 2790, 2790, 4299, 3993, 2790, 4007, 2790, 2984, 2790, 3568, 3575, 4260, 3583, 3587, 3591, 3594, 3597, 3600, 3601, 3605, 2790, 2790, 2790, 4750, 2964, 2790, 2790, 2790, 2790, 2969, 2761, 2790, 2790, 2790, 2790, 4743, 2790, 4834, 2790, 3348, 4604, 4013, 4070, 4311, 4020, 2790, 2790, 2790, 4026, 2790, 2790, 2790, 2790, 3578, 4964, 2790, 2790, 2790, 2790, 4969, 2790, 2790, 2790, 2790, 3579, 2790, 4031, 2790, 4037, 2790, 4043, 2789, 4333, 4571, 4021, 2790, 2790, 4362, 2790, 2790, 2790, 2790, 3968, 4183, 2790, 2790, 4271, 3972, 4033, 2790, 2790, 4832, 2790, 2796, 2790, 4360, 3993, 2790, 2790, 2790, 2790, 4049, 2790, 2790, 2790, 2790, 4361, 2761, 4510, 4241, 4057, 4254, 4773, 4069, 4439, 2790, 2790, 4976, 2790, 2790, 2790, 4457, 2761, 2790, 2790, 4485, 3989, 2790, 2790, 4456, 4074, 3731, 4836, 4254, 4085, 4092, 3707, 2790, 4060, 2790, 2790, 4060, 4147, 4132, 4140, 4134, 4843, 2501, 4130, 4921, 4921, 4921, 4291, 4135, 4132, 4132, 4132, 4139, 4922, 4135, 4144, 4922, 4923, 4133, 4159, 4169, 4171, 4166, 4163, 4175, 4178, 2790, 2790, 2790, 2800, 2790, 2746, 3958, 4087, 2818, 2790, 3314, 2806, 2790, 3502, 2818, 2790, 2790, 4270, 3039, 4275, 2790, 2790, 2790, 4279, 3358, 2850, 4286, 4295, 2790, 3397, 3607, 4303, 4310, 2790, 2790, 4965, 4315, 2790, 2790, 2790, 3378, 4321, 2790, 2790, 2790, 3379, 2790, 2790, 3472, 2790, 2790, 2790, 2345, 3847, 2790, 2790, 3471, 3736, 2790, 4603, 2790, 4305, 2790, 4812, 4327, 4339, 2790, 2790, 3352, 3356, 2996, 4343, 3937, 4297, 4995, 4476, 2843, 2790, 3025, 4927, 2790, 2790, 4934, 2406, 2599, 4938, 5023, 4946, 2790, 2790, 2790, 2790, 4957, 4381, 4359, 2790, 2790, 2790, 3806, 4389, 2790, 2790, 2790, 2790, 3963, 4396, 2790, 2790, 2790, 2946, 2790, 2790, 2790, 3712, 2947, 2790, 2790, 2790, 4234, 3973, 2790, 2790, 2790, 3962, 4395, 2790, 2790, 2790, 2790, 3962, 4395, 3755, 4359, 2790, 3056, 3060, 4368, 3960, 4535, 4377, 2790, 2790, 2790, 2808, 4400, 2790, 2790, 2790, 2790, 4406, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 4708, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3152, 3203, 2790, 2790, 2790, 2790, 2790, 3963, 4411, 2790, 2790, 2790, 2807, 4407, 4446, 2790, 4417, 2942, 4426, 3654, 3761, 2790, 2790, 3720, 2790, 2790, 2790, 2790, 2790, 3729, 2790, 4472, 2790, 2586, 3787, 3138, 2790, 4862, 4438, 2790, 2790, 2807, 4451, 2790, 2790, 2790, 4443, 2790, 2790, 2790, 4450, 4689, 3400, 2942, 4455, 4536, 4484, 2790, 4461, 2790, 2790, 4469, 2790, 2790, 4480, 2790, 2790, 3779, 4523, 4489, 4498, 3654, 4483, 2790, 4508, 2790, 5040, 4002, 2790, 4514, 2790, 2790, 4521, 4525, 4529, 4540, 4384, 4590, 4385, 2790, 4514, 2790, 4547, 4551, 2790, 3997, 4560, 4566, 3999, 4575, 3995, 4009, 4009, 4009, 4583, 4589, 4001, 4001, 4596, 3680, 4608, 4879, 4613, 4620, 4609, 4877, 2407, 3782, 4792, 4793, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3018, 4630, 4634, 4645, 4649, 4653, 4657, 4661, 4665, 4669, 4672, 4676, 4679, 4683, 2790, 2790, 2790, 3017, 4695, 4542, 4761, 4701, 4577, 4906, 4707, 4712, 4716, 4727, 2790, 3832, 2594, 3075, 4733, 3830, 4739, 2790, 2790, 2790, 3019, 4842, 2597, 4900, 4904, 4853, 4912, 2790, 2790, 2790, 2790, 2790, 3027, 4747, 4754, 4760, 4765, 4771, 4777, 4786, 4797, 4801, 2790, 2790, 2790, 2790, 4807, 2790, 2790, 3876, 4543, 4150, 2930, 2766, 2790, 2790, 2790, 2790, 2790, 4723, 2790, 2790, 2790, 2691, 2790, 2790, 2790, 3094, 2695, 2701, 2790, 2790, 2790, 2790, 3508, 2790, 4840, 2406, 4847, 4803, 4111, 4852, 4857, 4914, 2790, 2790, 2790, 2790, 2696, 4866, 2790, 2790, 3910, 2790, 2790, 4686, 4531, 4887, 3772, 3082, 3706, 2790, 4289, 2790, 3974, 3915, 4973, 2790, 4980, 4984, 5018, 4907, 4994, 2790, 2790, 2801, 4830, 2790, 2790, 2790, 5000, 2790, 3091, 2790, 2790, 4103, 4533, 4109, 3084, 2790, 4117, 4908, 2790, 3303, 2790, 4122, 3249, 2790, 4999, 2790, 2790, 4828, 2790, 2790, 3571, 2790, 5011, 5017, 5022, 2790, 2790, 3799, 2790, 3384, 3389, 2790, 2790, 5029, 3394, 2790, 2790, 2790, 2790, 4881, 2790, 3543, 3449, 3410, 3116, 5028, 2790, 3798, 2790, 2790, 5027, 3365, 3864, 2790, 4990, 2790, 4045, 2790, 2710, 2790, 3447, 4603, 3455, 3459, 3700, 3677, 2790, 2790, 3464, 2790, 2790, 2790, 2790, 2790, 4199, 5033, 3136, 2790, 4383, 5039, 2587, 3834, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2578, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 6090, 6563, 5044, 5057, 5054, 6594, 6596, 6596, 6596, 6591, 5074, 6595, 6596, 6596, 6596, 6596, 5087, 5061, 5074, 6596, 6596, 5067, 5062, 6596, 5078, 5084, 5080, 5066, 6594, 6163, 5071, 5091, 5094, 5094, 5094, 5095, 5099, 5099, 5103, 5107, 5114, 5111, 5118, 5122, 5134, 5137, 5129, 5130, 5127, 5125, 5141, 5145, 6561, 6446, 5234, 5173, 5635, 5635, 5635, 5219, 5598, 5503, 5251, 5251, 5251, 5251, 5252, 5196, 5267, 6248, 5502, 5251, 5251, 5196, 5196, 5196, 5266, 5202, 5212, 5632, 5635, 5050, 6519, 6509, 5635, 6818, 5635, 5635, 5146, 5150, 6535, 5218, 5635, 5635, 5147, 5154, 5196, 5267, 5268, 5502, 5213, 5214, 5232, 5214, 5631, 5635, 5146, 5151, 5635, 5155, 5619, 6297, 5635, 6532, 6536, 5244, 5250, 5251, 5251, 5251, 5295, 5631, 5633, 5635, 5635, 5635, 5049, 6518, 5502, 5502, 5293, 5251, 5251, 5226, 5196, 5196, 6247, 5270, 5502, 5502, 5502, 5504, 5268, 5502, 5214, 5633, 5282, 5635, 5635, 5635, 5273, 6084, 5196, 5267, 5271, 5635, 5166, 5635, 5635, 5749, 5219, 5251, 5296, 5196, 5196, 5306, 5635, 5196, 5265, 5269, 5273, 5635, 5635, 5165, 5635, 6247, 5268, 5502, 5502, 5502, 5502, 5251, 5502, 5251, 5251, 5251, 5186, 5193, 5272, 5635, 5635, 6261, 5635, 5298, 5635, 5635, 6262, 5502, 5502, 5294, 5251, 5251, 5251, 5296, 5251, 5251, 5264, 5196, 5196, 5196, 5196, 5265, 5196, 5197, 5635, 6245, 5269, 5293, 5296, 5306, 6246, 6247, 5502, 5502, 5502, 5292, 5251, 5251, 5196, 6255, 6247, 5270, 5292, 5251, 5264, 5197, 5198, 5302, 5297, 5312, 5312, 5304, 5635, 5179, 5635, 5643, 5168, 5635, 6860, 5329, 5590, 5333, 5336, 5339, 5343, 5362, 5419, 5347, 5351, 5404, 5419, 5419, 5419, 5419, 5368, 5384, 5393, 5355, 5359, 5418, 5367, 5372, 5346, 5420, 5381, 5390, 5397, 5377, 5386, 5419, 5376, 5401, 5416, 5424, 5428, 5430, 5430, 5434, 5436, 5440, 5473, 5444, 5446, 5365, 5407, 5450, 5454, 5458, 5466, 5464, 5466, 5462, 5470, 5477, 5635, 5181, 6353, 5635, 5219, 5635, 5635, 5219, 5635, 7266, 5635, 5904, 5635, 6256, 6080, 5635, 6853, 5635, 5635, 5169, 5672, 6820, 5635, 5635, 5635, 5275, 5635, 5635, 7112, 6346, 7172, 5635, 5220, 7282, 5635, 5273, 5642, 5635, 5635, 6879, 5246, 5891, 5635, 5635, 5182, 6258, 5523, 6083, 6080, 5977, 6569, 5635, 6877, 6875, 6150, 5527, 5530, 5531, 5535, 5538, 5542, 5547, 5545, 5551, 5553, 5554, 5558, 5561, 5569, 5562, 5566, 5562, 5572, 5574, 5578, 5635, 6820, 6222, 5635, 5975, 5635, 5635, 6702, 6210, 5614, 5635, 5635, 5189, 5635, 5635, 6773, 5656, 5635, 5635, 5635, 5307, 5668, 5635, 5635, 5635, 5315, 6779, 5662, 5666, 5635, 5635, 5635, 5582, 5675, 5635, 5635, 5635, 5320, 5679, 6567, 5635, 5683, 5691, 5698, 5706, 5734, 5699, 5707, 6568, 5635, 5635, 5635, 5491, 6736, 5694, 5700, 5708, 5162, 5635, 5635, 5635, 5513, 7310, 6318, 5664, 5635, 5635, 5635, 5277, 5746, 5635, 5712, 5635, 5274, 5273, 5635, 5274, 6223, 5635, 5275, 5635, 6695, 5635, 5635, 6694, 5823, 6568, 5635, 5322, 5635, 5635, 5910, 5635, 5635, 5635, 6618, 5236, 5635, 5717, 6739, 6745, 5731, 6568, 5635, 5324, 5635, 6335, 5811, 5635, 5635, 5635, 5675, 5701, 5732, 5635, 5635, 5318, 5635, 5635, 6736, 6740, 6744, 5730, 5734, 5635, 5635, 5635, 5514, 5768, 5701, 5775, 6568, 5776, 5635, 5635, 5635, 5615, 5747, 7254, 5635, 5635, 5512, 6989, 5208, 6448, 5733, 5635, 5635, 5635, 5625, 5788, 7253, 5635, 5635, 5635, 5635, 5159, 5797, 5635, 5635, 5635, 5638, 6319, 5635, 5635, 5635, 5640, 6027, 5799, 5635, 5635, 5635, 5646, 5650, 6805, 5635, 5635, 5635, 5655, 5805, 5798, 5635, 5635, 5635, 5636, 5515, 5803, 6804, 6568, 5635, 5496, 5048, 5635, 5219, 6618, 5635, 5635, 5635, 6260, 5635, 5583, 5635, 5635, 5819, 6695, 5635, 5635, 5635, 5724, 5819, 5635, 5821, 5819, 5635, 5635, 6934, 6878, 5756, 5815, 5829, 5635, 5508, 5204, 5664, 5842, 5846, 5854, 5858, 5862, 5866, 5866, 5868, 5870, 5870, 5870, 5870, 5874, 5874, 5874, 5874, 5877, 5879, 5635, 5635, 5635, 5738, 7116, 5885, 5635, 6258, 6080, 5635, 5899, 5917, 5635, 5635, 5594, 5635, 5324, 5635, 5635, 6618, 5635, 6618, 5635, 5582, 5635, 5635, 5819, 5921, 5635, 5635, 5487, 7303, 5485, 5635, 6834, 5635, 5635, 5612, 5635, 6832, 5932, 5635, 5635, 5635, 7178, 5635, 6696, 5635, 5937, 5325, 5635, 5635, 5635, 5761, 5969, 5635, 5635, 5635, 5804, 5984, 5635, 5635, 5635, 5819, 5635, 5850, 6339, 5992, 5606, 5635, 5635, 5635, 6696, 5635, 5938, 5635, 6256, 6930, 6081, 6015, 5635, 5635, 5635, 5895, 6016, 5635, 5635, 5635, 5902, 5640, 5999, 6005, 6011, 6261, 5635, 6095, 5635, 5635, 6088, 6289, 6037, 6042, 5635, 5635, 5635, 7255, 5635, 5635, 6027, 6032, 6038, 6043, 5635, 5635, 6256, 5635, 6082, 5635, 5820, 5635, 5820, 5635, 5635, 5821, 6261, 6335, 6695, 5635, 5635, 6692, 6568, 5923, 7028, 6032, 6058, 6033, 6059, 5635, 5635, 5635, 5908, 7128, 7132, 6613, 5635, 5635, 5635, 5923, 5517, 6786, 6790, 5635, 6564, 5635, 5635, 5635, 5907, 6260, 6318, 5635, 5635, 5635, 7259, 6072, 6033, 6064, 5635, 5635, 7027, 6032, 6063, 6564, 5635, 5635, 6260, 6261, 5636, 6988, 7255, 5678, 5635, 6082, 5635, 5821, 5945, 5412, 5635, 5635, 5635, 7285, 5635, 5635, 6257, 6081, 6261, 5635, 5635, 5635, 5221, 6071, 6711, 6064, 5635, 5635, 6838, 5635, 5589, 6617, 6072, 6712, 6065, 5635, 5635, 6844, 5635, 5635, 6851, 6568, 6070, 6710, 6063, 6564, 5943, 6983, 5635, 5635, 5635, 7286, 5635, 5756, 5635, 5635, 5635, 5943, 6260, 6094, 5635, 5635, 5635, 7332, 5720, 5635, 6821, 6073, 6109, 5635, 5635, 5635, 5956, 5635, 6099, 6107, 6066, 6256, 6081, 6337, 5635, 5635, 6852, 5635, 5320, 5635, 6075, 6079, 5635, 5635, 5635, 5958, 5635, 6820, 7158, 6077, 5635, 5635, 5635, 7346, 5635, 6131, 6821, 6074, 6076, 5635, 5635, 6820, 6708, 6127, 5635, 5635, 7156, 5634, 5905, 5635, 5228, 6053, 5274, 6116, 6079, 5635, 6981, 6142, 7156, 5822, 5635, 7157, 6118, 5635, 5635, 6115, 6078, 5635, 5635, 6114, 6078, 5635, 5635, 6115, 6078, 5635, 5674, 5285, 5674, 6117, 5635, 5635, 5636, 5635, 5635, 5635, 6221, 6118, 5635, 5635, 6116, 6139, 6079, 5635, 6139, 7083, 5674, 6617, 7134, 5635, 7134, 5635, 7134, 5635, 6616, 6614, 5635, 5635, 6878, 5764, 6744, 6449, 5734, 5635, 5287, 6614, 6614, 6614, 7253, 5635, 5674, 5635, 5635, 5512, 5516, 5635, 6392, 6392, 5635, 5636, 5642, 6257, 5635, 6085, 7286, 5635, 5635, 5635, 6481, 6485, 5733, 6255, 6840, 6147, 5635, 5635, 6940, 6946, 7286, 6617, 6879, 6154, 6160, 6167, 6156, 6171, 6175, 6179, 6183, 6184, 6189, 6189, 6185, 6193, 6193, 6193, 6193, 6196, 7276, 5635, 5583, 5635, 5635, 5582, 6208, 5635, 5635, 6214, 6197, 5278, 6228, 5635, 5635, 6975, 5635, 5635, 7001, 5769, 5797, 5308, 5635, 6961, 5635, 5635, 7001, 5770, 6236, 5635, 5980, 6254, 5635, 5635, 5636, 5945, 5412, 5951, 5635, 5635, 6252, 5635, 5635, 5635, 6053, 5635, 6255, 6086, 6855, 6868, 5635, 6399, 5635, 6614, 5635, 5635, 6273, 5635, 5635, 5638, 5964, 6676, 5635, 5635, 5636, 6988, 6994, 5635, 5678, 5635, 6081, 5635, 5819, 5972, 5635, 5635, 5635, 6082, 6085, 5635, 6281, 5635, 5635, 5640, 6573, 6802, 5206, 6295, 5635, 5635, 7007, 7016, 7041, 5635, 7144, 6290, 6803, 5207, 5207, 6296, 5635, 5635, 5635, 6084, 6291, 5771, 6995, 5635, 5635, 7034, 5635, 5635, 7152, 5635, 5635, 7253, 5635, 5635, 6954, 5657, 5635, 7252, 6400, 5635, 6670, 5635, 6259, 6209, 5635, 5639, 6347, 5635, 5635, 5635, 6088, 6309, 6301, 6325, 6329, 5635, 6310, 6302, 6326, 6079, 5635, 6982, 5907, 5635, 6258, 6081, 6311, 6801, 6327, 5635, 5635, 7257, 6960, 6255, 6086, 6856, 6869, 5635, 5635, 5640, 7027, 6400, 5635, 6735, 7277, 6693, 5635, 6671, 5635, 5635, 5320, 6310, 6323, 6327, 6324, 6328, 5635, 5635, 5635, 6089, 5149, 5153, 6086, 6866, 6567, 5635, 5635, 7287, 6616, 5635, 6879, 7278, 5582, 5635, 6769, 6564, 5635, 7252, 6400, 5288, 6079, 6695, 6669, 5635, 5635, 6201, 5635, 6344, 5635, 5635, 5674, 5805, 6351, 6357, 5635, 5635, 5676, 5635, 6820, 7179, 6366, 6329, 5635, 5260, 5635, 5635, 5635, 6122, 6399, 5635, 5635, 6671, 5635, 6259, 6365, 7255, 5635, 6021, 5635, 5635, 5315, 5167, 5635, 5635, 5635, 6247, 6247, 6619, 5635, 5635, 5635, 6255, 6086, 5635, 6620, 5635, 5635, 5635, 6256, 5219, 5635, 5635, 6619, 5904, 5748, 6771, 6620, 6618, 5635, 7096, 6618, 6618, 6618, 6770, 5901, 5511, 6370, 5635, 5635, 7333, 5721, 5635, 7255, 7154, 5635, 5635, 7349, 5518, 7319, 6209, 6384, 5635, 6372, 5985, 6719, 6390, 6396, 6404, 6408, 6411, 6413, 6417, 6418, 6418, 6422, 6424, 6425, 6429, 6429, 6429, 6429, 6430, 6429, 5635, 5635, 5755, 5635, 5635, 5635, 5888, 5635, 6604, 7326, 5635, 5635, 5635, 6616, 5635, 6692, 5635, 5824, 6457, 6568, 5635, 6852, 5635, 6948, 5635, 6949, 6455, 5635, 5635, 5635, 6261, 6260, 5635, 6462, 6456, 5635, 5637, 5640, 6675, 7115, 5635, 6467, 5635, 5658, 6453, 5635, 6463, 5635, 5635, 5635, 6262, 7328, 5635, 5635, 5635, 6267, 5277, 6615, 5635, 5635, 5755, 5818, 5635, 6819, 5635, 5635, 6494, 6473, 5635, 6477, 5635, 5638, 6346, 5635, 5635, 7275, 5635, 5635, 7287, 5635, 5635, 5635, 6480, 5635, 6498, 6507, 6513, 6518, 6508, 6514, 5635, 5635, 6523, 5635, 5635, 5635, 6315, 5635, 6540, 5635, 5635, 5783, 5635, 5635, 6554, 5635, 5635, 5635, 6339, 5635, 6263, 6549, 6503, 5635, 6547, 5176, 6553, 5635, 5635, 5635, 6334, 5635, 6558, 7327, 5635, 5635, 5784, 5635, 6578, 5153, 5635, 5635, 5635, 6439, 6088, 6574, 6579, 5154, 5635, 5635, 6583, 5635, 5635, 5894, 5810, 5635, 5635, 5581, 5635, 5635, 5635, 5725, 6054, 5637, 5635, 5635, 5900, 5635, 5635, 5635, 5904, 5635, 6088, 6588, 5153, 5635, 5638, 6826, 7252, 6088, 5148, 5152, 5635, 5640, 7087, 6772, 6084, 6772, 6084, 5275, 5635, 6694, 5904, 6338, 5277, 6693, 5635, 5825, 5635, 6821, 6600, 5635, 5640, 7334, 5907, 5635, 5635, 6822, 6224, 5635, 5644, 5648, 6102, 5635, 6821, 6223, 5635, 5635, 5635, 6479, 6762, 5824, 5635, 5321, 5635, 5647, 7054, 7038, 5635, 7255, 5637, 5635, 5654, 5635, 5635, 5222, 7284, 5635, 5635, 5276, 5635, 5277, 6695, 6337, 6260, 5635, 5635, 5635, 5256, 6220, 5154, 5635, 5635, 5635, 6399, 5638, 6692, 5635, 5635, 5923, 6072, 5638, 7024, 6610, 5635, 5674, 6141, 5635, 5635, 6854, 5635, 5635, 6878, 5693, 5699, 7255, 6216, 6771, 5635, 5677, 5635, 5635, 5635, 5587, 5911, 6624, 5628, 6630, 6638, 6641, 6645, 6648, 6656, 6656, 6656, 6656, 6651, 6652, 6652, 6652, 6660, 6660, 6660, 6660, 6662, 6666, 5635, 5635, 5635, 6566, 6048, 5635, 5622, 5635, 5686, 5838, 5635, 5686, 6053, 5635, 5635, 5635, 5985, 5635, 5589, 6694, 5939, 6617, 5912, 6686, 5635, 5635, 5944, 5411, 6052, 6691, 5635, 5635, 6756, 6701, 5635, 5635, 5635, 6567, 6125, 6772, 5635, 5635, 5987, 5635, 5635, 6723, 6729, 7278, 6695, 6734, 5635, 5635, 5991, 5605, 6749, 5635, 5635, 5635, 6615, 5635, 5635, 5635, 5645, 5649, 5635, 6480, 6763, 6750, 5635, 6764, 5607, 5635, 5635, 5635, 5835, 5635, 6717, 5635, 5635, 6026, 6031, 5608, 5635, 6730, 6143, 6483, 6487, 6568, 5635, 5635, 6486, 5734, 5635, 5635, 6133, 6881, 5635, 5635, 6133, 7095, 5635, 5635, 5635, 6816, 6204, 6203, 5635, 5635, 6134, 6772, 5909, 5635, 5635, 5635, 6620, 5635, 5597, 6879, 6795, 5635, 5635, 5635, 6685, 6480, 6484, 6488, 5635, 5635, 6616, 6615, 5635, 5635, 6204, 6202, 5274, 6126, 5635, 5635, 6220, 6224, 7347, 6777, 5635, 5635, 6230, 5635, 5635, 6230, 6485, 5733, 5635, 5635, 6054, 5204, 5635, 7269, 6772, 5635, 5687, 5952, 5635, 5713, 5635, 5635, 5276, 6615, 5635, 6277, 5635, 5635, 6619, 6809, 5734, 5635, 5635, 6246, 6247, 6247, 6247, 6247, 5270, 5502, 7114, 5635, 7254, 5635, 5674, 5805, 5798, 6276, 5748, 5635, 5635, 6255, 6247, 6247, 6247, 5269, 5502, 5502, 5835, 6053, 5635, 5635, 6318, 6568, 5635, 7347, 7114, 5635, 5635, 6819, 5321, 5635, 6845, 5635, 5635, 5635, 6716, 5635, 6974, 5635, 5635, 6333, 5635, 6256, 5317, 6285, 5635, 5635, 6966, 5635, 5635, 6965, 5635, 5635, 6257, 5635, 6961, 6053, 5635, 5635, 6967, 5635, 6255, 5589, 6617, 5635, 5753, 5635, 5635, 5323, 5635, 6113, 5634, 5904, 5635, 6256, 6961, 6053, 6255, 6965, 6965, 6965, 5635, 6967, 6965, 5635, 6965, 5635, 6258, 6967, 6965, 7286, 6269, 5741, 5741, 5741, 6053, 6849, 5635, 5635, 5635, 6754, 5635, 7342, 6334, 5635, 5780, 6568, 5635, 5492, 6542, 6492, 5635, 5635, 5635, 6307, 6311, 6324, 6936, 6083, 6873, 5319, 6886, 6892, 6890, 6896, 6900, 6900, 6902, 6908, 6906, 6906, 6908, 6916, 6915, 6912, 6920, 6921, 6921, 6921, 6921, 6925, 6928, 5208, 5635, 5635, 6855, 6526, 6380, 5635, 5635, 6340, 5993, 6565, 5635, 5635, 6617, 5635, 5635, 5635, 6706, 5635, 6239, 5635, 5635, 6364, 7154, 5635, 6242, 5635, 5635, 5637, 5965, 5635, 6953, 5635, 5635, 6376, 5635, 5635, 6958, 5635, 5635, 6443, 5589, 7258, 5635, 5635, 5635, 6760, 5635, 6971, 5635, 6979, 6987, 6993, 6329, 5635, 5832, 6260, 6680, 6878, 5791, 6543, 5635, 5836, 5635, 5635, 6284, 5635, 5635, 6567, 5635, 6616, 5635, 5635, 6469, 6482, 6999, 5635, 5639, 5635, 5635, 5635, 6461, 5725, 5635, 5635, 5635, 6768, 7012, 7040, 5635, 5635, 6547, 6501, 7041, 5635, 5635, 5635, 6769, 5635, 7008, 7017, 7042, 5635, 5848, 5748, 6255, 5483, 5635, 5635, 6245, 6247, 5635, 7021, 5933, 6053, 5904, 6935, 6879, 5792, 5644, 5648, 7055, 7046, 5645, 7052, 7056, 7047, 5646, 7053, 7057, 7048, 5724, 5635, 5635, 5635, 6783, 6486, 5734, 5820, 5635, 5904, 6935, 6879, 5748, 6879, 5793, 5635, 6566, 5635, 5757, 5635, 5635, 5724, 5756, 5635, 5277, 5635, 5635, 5635, 7176, 7094, 7061, 7048, 5635, 5635, 6548, 6502, 5649, 6103, 7067, 7048, 5635, 7061, 6564, 5635, 5635, 6568, 5635, 5646, 5650, 7066, 7124, 5635, 7065, 7123, 5635, 5635, 6584, 5635, 5635, 6987, 7154, 5635, 5881, 5635, 5635, 6365, 5635, 6878, 5318, 6615, 5635, 5899, 5962, 5635, 5602, 5635, 5635, 5188, 5635, 7077, 5635, 5635, 5635, 6794, 5647, 7076, 7069, 5635, 5900, 6053, 5726, 5646, 7075, 7068, 5635, 5635, 6879, 5635, 5635, 5635, 6799, 6809, 5635, 7176, 7081, 5635, 5901, 7114, 6434, 5635, 5635, 7176, 7089, 5635, 5902, 5511, 6435, 5635, 5635, 5757, 5274, 5635, 6088, 7088, 5635, 5902, 5635, 5635, 5635, 6800, 5635, 6088, 7154, 5635, 5903, 5635, 5906, 6616, 6614, 5820, 5904, 6880, 5635, 5908, 5635, 5635, 5924, 7029, 6033, 5640, 7178, 5635, 5635, 6614, 5635, 5635, 6088, 7093, 5635, 5908, 6605, 7327, 7177, 7095, 5635, 5901, 5902, 5635, 5640, 6218, 5821, 6880, 5635, 5635, 6615, 6616, 5635, 5635, 6259, 5635, 5635, 6259, 5635, 5903, 5635, 5635, 5635, 5745, 5640, 7178, 6772, 5238, 5635, 7100, 6880, 5635, 5913, 6687, 5635, 6700, 5635, 5635, 6135, 5635, 5635, 6681, 5635, 5635, 6820, 7094, 5635, 5928, 5635, 5635, 5608, 6878, 5635, 7100, 6881, 5635, 7115, 5635, 5635, 7254, 7106, 5635, 5635, 5635, 6821, 6073, 6820, 7275, 5635, 5635, 5635, 6820, 6309, 6133, 7095, 6880, 5635, 5943, 5410, 5949, 5635, 5635, 5635, 7252, 5635, 5635, 7120, 5635, 5635, 7273, 7120, 6878, 5635, 5635, 6693, 5635, 5635, 5635, 7274, 5635, 5635, 6695, 5635, 5635, 5819, 5809, 5635, 7138, 5635, 6963, 5905, 6209, 5635, 6961, 5635, 5979, 6253, 5635, 5635, 7002, 6744, 5798, 5240, 5635, 6021, 5499, 7109, 5673, 5635, 7142, 5635, 6962, 6021, 6964, 6625, 6022, 7174, 7271, 7149, 7162, 7166, 7170, 7183, 7187, 7191, 7194, 7202, 7197, 7198, 7206, 7208, 7212, 7218, 7217, 7213, 7222, 7232, 7232, 7225, 7231, 7227, 7236, 7240, 5635, 5985, 5837, 5635, 5723, 5635, 5635, 6602, 6606, 7128, 7132, 5904, 5635, 5910, 5481, 7100, 7241, 5635, 5635, 6695, 5824, 6360, 5635, 5635, 5635, 6853, 6259, 6079, 5635, 6529, 7245, 7247, 7251, 5635, 5986, 5635, 5635, 5763, 6743, 5702, 5776, 5635, 7263, 5635, 5635, 6725, 5492, 7283, 7255, 5635, 5635, 6737, 5769, 7291, 5635, 7292, 5635, 5997, 6003, 6009, 6015, 5635, 7296, 7130, 5635, 5998, 6004, 6010, 5907, 5903, 5635, 5635, 6737, 6741, 5635, 6086, 5641, 5635, 5635, 5635, 7100, 5635, 5635, 6738, 6742, 6879, 5635, 7114, 5635, 7252, 5635, 5635, 6853, 6855, 5635, 6020, 5635, 5635, 5635, 7254, 5635, 6337, 5635, 5635, 6770, 5635, 6772, 5635, 6086, 6084, 5635, 5635, 6259, 5635, 7301, 6386, 5635, 5635, 5635, 6878, 5635, 5512, 7309, 6633, 5635, 6047, 5635, 5635, 5635, 7256, 7310, 6634, 5635, 5635, 5635, 6882, 5635, 7307, 7311, 6338, 6853, 5320, 5635, 5640, 7334, 5722, 5635, 5635, 6821, 6126, 5635, 5635, 6021, 6772, 7128, 7132, 5258, 5635, 5635, 5635, 6966, 5642, 5635, 5635, 7101, 5635, 6850, 5635, 6336, 5635, 6260, 5635, 6261, 7102, 5985, 6334, 5635, 5635, 5644, 7073, 7315, 7319, 6338, 5635, 6080, 5906, 5903, 7316, 6788, 5635, 5635, 6772, 5635, 6084, 7095, 5635, 5635, 5686, 5635, 7317, 6789, 5635, 5635, 6813, 5635, 7318, 6790, 6770, 6769, 5635, 5635, 6619, 5635, 6769, 6820, 5635, 5635, 6881, 7115, 5635, 6852, 6855, 5635, 5635, 5635, 6845, 5635, 6718, 6694, 5635, 5635, 5635, 6942, 6786, 6790, 5635, 5635, 5635, 6967, 5635, 5635, 6786, 6790, 6770, 6769, 7254, 5635, 7101, 5635, 7297, 7132, 5258, 7113, 5635, 5635, 6819, 5635, 5635, 5635, 5166, 6379, 5048, 5635, 5635, 6821, 6074, 6078, 5635, 5635, 5635, 5978, 7350, 5519, 7320, 5635, 6081, 5678, 6626, 7319, 5635, 5635, 5635, 7006, 7348, 5517, 6786, 6617, 5635, 6772, 6771, 5635, 6084, 6303, 6488, 5635, 7324, 5906, 5903, 5635, 6085, 5641, 5635, 6084, 6352, 5635, 5635, 5635, 6231, 5047, 5635, 5635, 5635, 7033, 5635, 7348, 7335, 5903, 5635, 6879, 5635, 6851, 5678, 5909, 6855, 6864, 5635, 7340, 5635, 5635, 6829, 5635, 6087, 5635, 6881, 5635, 6852, 6819, 6850, 5635, 5635, 6261, 7332, 7336, 5635, 5635, 5635, 7145, 5635, 6232, 5635, 5635, 6833, 5635, 5274, 5635, 5635, 5635, 7177, 0, 0, 1075838976, 2097152, 16384, 0, 0, 0, 62, 64, 4194560, 4196352, 270532608, 2097152, 2097152, 268435456, 4194432, 541065216, 541065216, 541065216, 541065216, 4194304, 4194304, 4196352, -1606418432, -1606418432, 541065216, 541065216, 4194304, 4198144, 541065216, 541065216, -2143289344, -2143289344, 8425488, 4194304, 4194304, 4194304, 541065216, 37748736, 4194304, 541065216, 4194304, 4194304, 4194432, 37748736, -1606418432, 742391808, 239075328, 775946240, 171966464, 171966464, 171966464, 171966464, 239075328, 171966464, 775946240, 239075328, 239075328, 775946240, 775946240, 775946240, 4718592, 64, 4718592, 2097216, 4720640, 4194400, 4194368, -2142763008, 541589504, 4194368, 541589504, 541589504, 541065280, 4194368, 4194368, 541065312, 541065280, -2143289280, 4194368, -2143285440, -1605890240, -2142761152, -2109731008, -1606414528, -2143285440, -2143285440, -2143285440, -1605890240, -1606414528, -1606414528, -2143285440, -2143285408, -2143285440, -2143285440, -2142761152, 776470528, -1908404416, 775946304, 775946304, -1908404416, 2, 4, 8, 16, 512, 1024, 16777216, 33554432, 402653184, 0, 0, 0, -1979711488, 0, 8192, 8392704, 0, 0x80000000, 16777216, 0, 0, 1536, 32768, 0, 0, 128, 196608, 0, 16384, 1536, 1792, 8192, 16384, 131072, 131072, 0, 0, 64, 1536, 32768, 96, 96, 0, 0, 0x80000000, 16, 0, 0, 1536, 64, 524352, 524352, 524352, 524352, 0, 524288, 64, 64, 262144, 1048576, 4194304, 16777216, 33554432, 67108864, 134217728, 536870912, 0, 128, 128, 128, 128, 2048, 1536, 1024, 0, 0, 0, 15, 208, 15360, 96, 96, 0, 64, 64, 16392, 64, 1048576, 128, 128, 0, 256, 8192, 0, 8192, 0, 33554432, 0, 1024, 1024, 0, 0, 0x80000000, 65536, 32, 96, 96, 96, 96, 64, 0, 8388608, 4096, 0, 0, 8192, 2097152, 0x80000000, 96, 524352, 524352, 524352, 524288, 524288, 524288, 64, 64, 64, 0, 0, 0, 8, 0, 0, 0, 11, 64, 64, 128, 2048, 0, 4096, 0, 0, 131072, 128, 64, 64, 64, 96, 96, 96, 524352, 524352, 524288, 64, 524288, 64, 64, 96, 524352, 0, 0, 0, 18, 33554432, 64, 96, 524352, 524288, 0, 64, 0, 2097152, 0, 0, 4, 16, 0, 0, 16, 8388608, 0, 0, 4096, 536870912, 1073741824, 0, 4, 32, 32, 4, 1073872896, 32, 40, 96, 160, 1056, 262176, 1048608, 2097184, 32, 32, 32, 524320, 32, 1073872896, 40, 262176, 1120, 96, 4195360, 6291488, 2097184, 2097184, 4194336, 4194336, 536870944, 32, 32, 40, 262176, 32, 32, 40, 262184, 1120, 96, 6292512, 4195360, 56, 262184, 40, 262184, 40, 0, 4, 262184, 40, 40, 40, 40, 4195104, 6292512, 4196128, 32, 262184, 34, 34, 40, 48, 42, 32, 32, 327155712, 34, 1056, 1056, 32, 96, 32, 32, 41, 262184, 32, 64, 512, 2048, 16384, 67108864, 42, 1056, 4194336, 32, 32, 32, 32, 56, 2098208, 42, 4457568, -326784344, -322851160, -322851160, -322698144, -322698144, -322698144, -322698144, -322695456, -322695456, -322695456, -322695456, -322597152, -320598176, -322597152, -322597144, -321548576, -320598168, -321548568, -322597144, 32, 0, 96, 32, 42, 224, 40, 262176, 42, 106, 293601323, 293601323, 293863467, 293699627, 293617707, 293716011, 297896507, 293964347, 293702267, 297896507, 293702203, 293702203, 293702203, 293702203, 293964347, 297896507, 297896507, -322597144, -322588952, -321548568, -322588952, -37744981, -322597144, -321548568, -37482773, 0, 131072, 1048576, 2097152, 0, 0, -1744830464, 0, -1744830464, 0, 318767104, 0, 0, 0, 48, 0, 1, 285212672, 0, 0, 2048, 64, 64, 64, 64, 32, 96, 0, 32, 64, 65536, 0, 0, 1, 2, 12, 16, 64, 128, 1024, 2048, 4096, 0, 2, 65536, 262656, 5242880, -1842937664, 201330721, 201330721, -2111369023, -2111369023, -2111369023, -2111369023, -2111369023, -2111369023, -2111360575, -2111369023, -2111369023, -1977151295, -1977151293, -1910042431, -1893265183, -2111368509, -1893265183, -1893265183, -1893265183, -1893265183, -2111368509, -1893265183, -1893265183, -553689472, -553656704, -553689472, -553689472, -553656704, -553656704, -553656704, -553656704, -553656704, -553656704, -553656672, -553656672, -553656672, -553656672, -553656672, -553656670, -553656608, -553656672, -553656664, -553656664, -553656672, -553656670, -553656672, -553656672, -536912159, -553656671, -536879391, -536879391, -536879391, 0, 0, 2048, 4194304, 0, 0, 0, 262656, 0, 0, 0, 536870912, 1073741824, 458880, 2097152, -1845493760, 0, 0, 4096, 2097152, 0, 0, 1, 4096, 201326592, 805306368, -1073741824, 0, 0, 0, 24576, 471424, 0, -2113929216, 0, 0, 0, 220, -1912602624, 18874368, 463488, 0, 0, 9216, 0, 0, 16384, 8192, 8192, 32768, 2048, 2048, 2048, 2048, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 4, 16, 224, 256, 512, 32768, 0, 1040000, 15728640, -570425344, 0, 0, 0, 254, 4194304, 16777216, 33554432, 268435456, 536870912, 0x80000000, 0, 0, -570425344, 32505856, 2097152, 301989888, 0, 0, 0, 512, 0, 0, 0, 256, 12288, 0, 167772160, 234881024, 0, 0, 16384, 32768, 50331648, 0, 128, 512, 7168, 16384, 32768, 196608, 16384, 196608, 786432, 1048576, 2097152, 4194304, 8388608, 33554432, 2097152, 4194304, 8388608, 503316480, 1073741824, 0x80000000, 0, 4096, 201326592, 0, 0, 0, 167772160, 234881024, 128, 1024, 4096, 8192, 0, 0, 8192, 268435456, 0, 0, 4194304, 8388608, 234881024, 268435456, 1073741824, 0x80000000, 0, 0, 1048576, 4194304, 33554432, 268435456, 268435456, 268435456, 268435456, 0, 128, 131072, 2097152, 0, 0, 0, 520, 0, 201326592, 0, 0, 0, 1073741824, 0, 0, 0, 134217728, 128, 512, 3072, 16384, 32768, 3072, 16384, 131072, 524288, 1048576, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 1048576, 4194304, 268435456, 536870912, 131072, 0, 0, 131072, 0, 131072, 2097152, 0, 0, 16384, 2097152, 0, 0, 2097152, 4194304, 134217728, 0x80000000, 0, 0, 0, 512, 3072, 131072, 524288, 1048576, 131072, 524288, 4194304, 0x80000000, 0, 0, 0, 16384, 16384, 18432, 0, 0, 0, 2048, 0, 0, 4096, 1048576, 0, 0, 67108864, 1073741824, 0x80000000, 0, 0, 29696, 0, 0, 32768, 50331648, 268435456, 0x80000000, 0, 0, 1, 1, 18952, 1024, 0, 65, 1024, 0, 4096, 32768, 0, 1024, 18952, 65, 268436480, 2101248, 524288, 1024, 19017, -1744550912, 8388624, 8388624, 8388624, -1739308032, -1739308032, -1739308032, -1739308032, -1736162288, -1736162288, -1736162288, -1736162288, -7868466, -7868466, -7868466, -7868466, -7868450, -7868450, -7868450, 0, 0, 0, 1610612736, 1024, 0, 2101248, 0, 0, 262144, 65536, 262144, 262144, 0, 0, 2048, 131072, 524288, 585, 0, 0, 0, 8192, 0, 0, 0, 4096, 0, 0, 0, 32, 0, 0, 0, 44, 64576, 0, 1024, 278528, -1744830464, 5521408, -1744830464, 0, 0, 2, 12, 64, 0, 1040, 8667136, -1744830464, -67108864, 0, 0, 0, 9728, 0, 2014, 0, 0, 0, 13312, 0, 1, 4, 8, 32, 64, 16384, 67108864, 134217728, 268435456, 0x80000000, 0, 0, 520, 1024, 0, 0, 2, 16, 0, 278528, 0, 0, 2, 67108864, 16384, 0, 5242880, 0x80000000, 0, 0, 327680, 0, 0, 328192, 0, 0, 0, 118, 577408, 22020096, 1040, 0, 0, 0, 16384, 0, 67108864, 1998, 518144, 8388608, 50331648, 201326592, 805306368, 0, 2, 204, 768, 1024, 10240, 1024, 10240, 16384, 32768, 458752, 8388608, 458752, 8388608, 50331648, 67108864, 134217728, 805306368, 134217728, 805306368, 1073741824, 0x80000000, 0, 220, 0, 0, 0, 32768, 33554436, 2, 12, 192, 768, 1024, 1024, 2048, 8192, 16384, 32768, 458752, 32768, 458752, 50331648, 67108864, 134217728, 134217728, 805306368, 1073741824, 0, 0, 208, 0, 0, 0, 34816, 67108864, 268435456, 0, 0, 0, 65536, 458752, 50331648, 67108864, 805306368, 1073741824, 458752, 50331648, 67108864, 536870912, 1073741824, 0, 0, 4, 8, 64, 128, 512, 2048, 196608, 262144, 33554432, 536870912, 0, 0, 0, 262144, 0, 0, 0, 64, 0, 0, 2, 4, 8, 262144, 0, 1048576, 4194304, 0, 0, 4, 8, 128, 512, 1024, 32768, 65536, 131072, 2048, 196608, 262144, 50331648, 536870912, 1073741824, 1, 4, 8, 512, 2048, 131072, 33554432, 536870912, 0, 0, 4, 8, 512, 2048, 8192, 32768, 8388608, 0, 524288, 262144, 0, 0, 4, 64, 128, 8388608, 0, 512, 2048, 131072, 536870912, 0, 0, 4194304, 8192, 2097152, 268435456, 0x80000000, 16, 33554432, -2147418112, 537395200, 537395200, 0, 4196352, 537427968, 4196352, 0, 537395200, 4196352, 4196352, 276901888, 8540160, -1606418432, 32768, 537395200, 4196352, 1082130432, 51380242, 51380242, 51380242, 22022147, 22349827, 22349827, 22349827, 22366219, 22349843, 22349827, 22349827, 22366219, 22349827, 55576594, 55576594, 55576594, 55576594, 1062785014, 324012114, 55576594, 55576594, 55576594, 1062785014, 1062785014, 1062785014, 1062785014, 0, 0, 0, 329728, 557056, 0, 0, 0, 393216, 0, 0, 17825792, 33554432, 0, 0, 0, 462976, 3, 22020096, 0, 0, 4, 134217728, 0, 0, 8, 16, 512, 402653184, 0, 0, 346112, 19, 0, 0, 8, 64, 0, 0, 0, 82, 301989888, 0, 0, 393232, 0, 0, 393240, 0, 0, 524288, 524288, 524288, 524288, 0, 577408, 22020096, 1040187392, 0, 0, 0, 524288, 0, 0, 0, 16, 0, 0, 0, 6, 16384, 32768, 268435456, 0, 268435456, 0, 1048576, 16777216, 33554432, 0, 0, 524288, 1048576, 2097152, 0, 80, 268435456, 0, 0, 524288, 536870912, 0, 112, 128, 256, 3584, 16384, 32768, 134217728, 805306368, 0, 0, 0, 1007232, 256, 1536, 2048, 16384, 32768, 262144, 0, 4, 16, 32, 64, 128, 256, 1536, 0, 16, 33554432, 0, 0, 1048576, 4194304, 0x80000000, 1536, 16384, 32768, 524288, 4194304, 33554432, 134217728, 536870912, 0, 0, 0, 32768, 0, 0, 0, 1048576, 0, 0, 0, 1998, 518144, 1, 0, 0, 65536, 262144, 0, 0, 256, 1536, 32768, 524288, 0, 0, 4194304, 134217728, 536870912, 0, 0, 1114112, 1073741824, 16, 64, 1536, 32768, 524288, 4194304, 67174400, 33554432, 1073741824, 0, 67174400, 0, 0, 16384, 1073741824, 0, 0, 2097152, 0, 1572864, 0, 1073741824, 16384, 0, 4194304, 0, 8, 0, 131072, 0, 131072, 0, 8, 131072, 131072, 134217728, 4096, 0, 8, 0, 8, 131072, 4194304, -2146430976, 131072, 134217736, 16908320, 547389524, 547389524, 555909216, 555909216, 555909216, 555909216, 564297840, 564297844, 564297844, 564297844, 564297844, 564297844, 564297844, 1001055742, 1001056254, 1001055742, 1001055742, 1001056254, 1001056254, 1001056254, 1001056254, 1001056254, 1001055742, 1, 0, 67108864, 1073741824, 0, 84, 2129920, 8388608, 536870912, 0, 96, 2260992, 0, 0, 2097152, 4194304, 8388608, 134217728, 268435456, 1280, 2809856, 58720256, 939524096, 0, 0, 0, 1052672, 0, 254, 1792, 2809856, 58720256, 939524096, 0, 939524096, 0, 0, 12, 16, 32768, 2097152, 8388608, 536870912, 0, 163840, 0, 0, 12, 32, 64, 1024, 2048, 57344, 262144, 50331648, 268435456, 1073741824, 0x80000000, 0, 52, 0, 0, 20, 64, 62, 64, 128, 1280, 8192, 16384, 131072, 524288, 58720256, 24576, 163840, 524288, 2097152, 58720256, 402653184, 58720256, 402653184, 536870912, 0, 0, 64, 128, 1792, 24576, 163840, 4, 16, 8388608, 0, 0, 2113536, 0, 0, 3735552, 0, 0, 8388608, 8388608, 4096, 4096, 4096, 4096, 0, 48, 25165824, 0, 0, 0, 1572864, 0, 6, 56, 128, 1792, 8192, 524288, 58720256, 402653184, 0, 0, 32, 128, 256, 262144, 262144, 1048576, 1073741824, 0, 0, 0, 0x80000000, 0, 0, 0, -2147483646, 4, 24, 32, 128, 1792, 1280, 8192, 524288, 16777216, 33554432, 0, 262144, 33554432, 134217728, 0, 8, 16, 1024, 16777216, 4194432, 3145728, 541065216, -2143289344, 4194304, 4194304, 4194304, 4194304, 16, 402653184, 0, 0, 32, 128, 256, 2048, 262144, 524288, 4, 16384, 65536, 67108864, 0, 0, 0, 131072, 0, 0, 0, 1024, 0, 0, 32768, 8192, 0, 2048, 0, 32, 8192, 3670016, 2048, 8192, 196608, 1048576, 0, 0, 34816, 9216, 4096, 4096, 29696, 29712, 29712, 29840, 29712, 29712, 29840, 536900624, 4224144, 144384, -754647956, -754647956, -754647956, -754647956, 144384, 144384, 144384, 144384, -754647940, -754647940, -754647940, -754647940, -754516884, -754647956, -754516884, -754516884, -754516884, 0, 0, 8388608, 1073741824, 0, 0, 67108864, 12, 16384, 0, 65536, 29824, 0, 0, 0, 3670016, 44, 64576, 319029248, -1073741824, 0, 0, 60, 0, 0, 0, 4194304, 0, 0, 0, 2014, 0, 319160320, 0, 0, 0, 5242880, 0, 4, 8, 256, 512, 2048, 8192, 16384, 458752, 50331648, 0, 524288, 3145728, 0, 0, 16384, 8, 0, 28672, 0, 0, 32, 524288, 0, 16, 0, 128, 0, 12288, 131072, 0, 0, 128, 512, 3072, 4096, 16384, 32768, 131072, 524288, 1048576, 2097152, 4194304, 262144, 318767104, -1073741824, 0, 0, 0, 28, 0, 0, 60, 64576, 28, 32, 64, 1024, 2048, 61440, 262144, 318767104, 24576, 0, 0, 0, 8388608, 0, 0, 0, 1040000, 67108864, 16384, 0, 65536, 262144, 1048576, 0, 8, 64, 2048, 4096, 8192, 65536, 131072, 1048576, 0, 0, 128, 536870912, 4194304, 131072, 0, 0, 64, 2048, 16384, 32768, 524288, 1048576, 4194304, 134217728, 0x80000000, 32768, 262144, 50331648, 268435456, 0, 32768, 8388608, 0, 0, 16777216, 16777216, 0, 0, 0, 4, 8, 16, 2, 67108864, 0, 65536, 201326592, 0x80000000, 0, 0, 1998, 59238400, -67108864, 0, 524288, 1048576, 0, 0, 64, 256, 32768, 50331648, 268435456, 0, 0, 1, 256, 0, 0, 0, 16777216, 0, 0, 256, 0, 8192, 0, 256, 262144, 2113536, 2097152, 135790592, 0, 256, 8192, 2097152, 0, 0x80000000, 0, 32768, 2097152, 0, 0x80000000, 5242880, 0, 0, 0, 128, 0, 0, 0, 208, 131073, 0, 0, 131073, 0, 135790592, 131073, 4, 0, 131073, 393233, 1610612736, 1610612736, 1610612736, 393241, 393241, 393241, 393241, 805707793, 805707793, 1879449617, 805708049, 1879449617, 1879449617, 1879449617, 1879449617, -483948553, -475559945, -475559945, -483948553, -483948553, -475559945, -483948553, -475559945, -483948553, -475559945, -475559945, -475559945, -475559945, -475559945, -215504905, -475559945, -207116297, -207116297, 0, 0, 72, 0, 4096, 4194304, 32768, 0, 0, 256, 401424, 805306368, 0, 0, 112, 25165824, 0, 1879048192, 0, 0, 116, 0, 0, 401680, 0, 0, 0, 32505856, 7, 19367920, -503316480, 0, 0, 0, 33554432, 0, 0, 33554432, 268435456, 0, 0, 0, 19376112, -234881024, 0, 0, 50331648, 268435456, 0, 27764720, -234881024, 0, 0, 512, 2048, 0, 0, 1, 2, 4, 32, 524288, 1048576, 524288, 1048576, 33554432, 67108864, 134217728, 805306368, 0, 24, 0, 0, 512, 3072, 16384, 0, 7, 16, 480, 1536, 32768, 1536, 32768, 65536, 2490368, 32768, 65536, 10878976, 16777216, 33554432, 0, 9728, 268435456, 0, 0, 67108866, 12, 64, 128, 512, 1024, 2048, 0, 16, 393216, 0, 0, 393216, 2097152, 16777216, 33554432, 536870912, -1073741824, 0, 0, 10485760, 16777216, 33554432, 1073741824, 0x80000000, 0, 16, 224, 256, 1536, 32768, 65536, 393216, 10485760, 16777216, 131072, 262144, 2097152, 16777216, 32768, 131072, 262144, 2097152, 8388608, 16777216, 0, 0, 4, 16, 224, 512, 32768, 131072, 2097152, 16777216, 192, 32768, 0, 0, 512, 4096, 4, 16, 192, 32768, 8388608, 0, 16, 64, 128, 8388608, 0, 0, 1024, 0, 4, 0, 0, 0, 3145728, 0, 4, 128, 0, 0, 268435456, 2, 0, 0, 65536, 0, 0, 0, 65, 0, 64, 128, 8388608, 16777216, 1073741824, 0, 0, 512, 2048, 32768, 262144, 524288, 8388608, 0, 0, 512, 131072, 524288, 8388608, 33554432, 0x80000000, 33554432, 33554432, 0, 2, 4, 112, 128, -2113929216, 100663296, 100663296, 2, 4, 524288, 134217728, 0, 0, 8, 512, 2048, 196608, 33554436, 0, 0, 33554436, 4224, 4224, 0, 65536, 100663296, 4224, 65536, 65536, 262144, 33554432, 0, 2, 4, 16, 64, 128, 256, 0, 4224, 65536, 16777216, 262400, 65536, 4224, -1072627712, 805306384, -1342177264, -1342177264, -1070006272, -1069989376, -1069989376, -1069989376, -258932720, -258932720, -258932720, -258932720, -1069989360, -1065795072, -1061600768, -1069989376, -225378288, -258932720, -258932720, -258932720, -225378288, 1260767, 1260767, 34815199, 1260767, 1260767, 1260767, 1260767, 34815199, 1260767, 34815199, 34815199, 34815199, 1260767, 1260767, 169032927, 1242774751, -1978450721, 169032927, -1978450721, -1978450721, -1978450721, 169032927, 169032927, 169032927, 169032927, -225231649, -1173144353, -225231649, -225231649, -91013921, 0, 0, 0, 67108864, 0, 3751936, 0, 0, 528, 7946240, 12140544, 0, 0, 0, 134217728, 0, 0, 0, 7, 27756528, -503316480, 0, 0, 9502720, 1610612736, 0, 0, 486539264, 0, 0, 2048, 32768, 0, 0, 64, 128, 0, 0, 536870912, 0, 0, 208, 15360, 1245184, 0, 0, 0, 268435456, 0, 0, 0, 15, 9633792, 0, 0, 0, 32, 512, 2048, 262144, 0, 3670016, 0, 0, 1040, 1040, 1, 2, 12, 80, 128, 7168, 8192, 196608, 16, 64, 128, 3072, 4096, 8192, 65536, 131072, 0, 0, 32, 262144, 524288, 33554432, 134217728, 0, 0, 0, 2, 8, 64, 128, 1024, 4096, 0, 0, 262144, 0, 4096, 4194304, 1, 1, 1, 0, 0, 2, 8, 16, 64\n];\n\nJSONiqParser.TOKEN =\n[\n  \"(0)\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSection\",\n  \"Wildcard\",\n  \"EQName\",\n  \"URILiteral\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"StringLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"PITarget\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'!='\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$'\",\n  \"'$$'\",\n  \"'%'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"'+'\",\n  \"','\",\n  \"'-'\",\n  \"'-->'\",\n  \"'.'\",\n  \"'..'\",\n  \"'/'\",\n  \"'//'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"'::'\",\n  \"':='\",\n  \"';'\",\n  \"'<'\",\n  \"'<!--'\",\n  \"'</'\",\n  \"'<<'\",\n  \"'<='\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'>='\",\n  \"'>>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'@'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'false'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'jsoniq'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'null'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'select'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'true'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'{|'\",\n  \"'|'\",\n  \"'||'\",\n  \"'|}'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/parsers/XQueryParser.js\":[function(_dereq_,module,exports){\n                                                            var XQueryParser = exports.XQueryParser = function XQueryParser(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    l2 = 0;\n    end = e;\n    ex = -1;\n    memo = {};\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryParser.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryParser.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryParser.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_XQuery = function()\n  {\n    eventHandler.startNonterminal(\"XQuery\", e0);\n    lookahead1W(274);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Module();\n    shift(25);                      // EOF\n    eventHandler.endNonterminal(\"XQuery\", e0);\n  };\n\n  function parse_Module()\n  {\n    eventHandler.startNonterminal(\"Module\", e0);\n    switch (l1)\n    {\n    case 274:                       // 'xquery'\n      lookahead2W(198);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 64274                 // 'xquery' 'encoding'\n     || lk == 134930)               // 'xquery' 'version'\n    {\n      parse_VersionDecl();\n    }\n    lookahead1W(274);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    switch (l1)\n    {\n    case 182:                       // 'module'\n      lookahead2W(193);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 94390:                     // 'module' 'namespace'\n      whitespace();\n      parse_LibraryModule();\n      break;\n    default:\n      whitespace();\n      parse_MainModule();\n    }\n    eventHandler.endNonterminal(\"Module\", e0);\n  }\n\n  function parse_VersionDecl()\n  {\n    eventHandler.startNonterminal(\"VersionDecl\", e0);\n    shift(274);                     // 'xquery'\n    lookahead1W(116);               // S^WS | '(:' | 'encoding' | 'version'\n    switch (l1)\n    {\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(263);                   // 'version'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      lookahead1W(109);             // S^WS | '(:' | ';' | 'encoding'\n      if (l1 == 125)                // 'encoding'\n      {\n        shift(125);                 // 'encoding'\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n    }\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"VersionDecl\", e0);\n  }\n\n  function parse_LibraryModule()\n  {\n    eventHandler.startNonterminal(\"LibraryModule\", e0);\n    parse_ModuleDecl();\n    lookahead1W(138);               // S^WS | EOF | '(:' | 'declare' | 'import'\n    whitespace();\n    parse_Prolog();\n    eventHandler.endNonterminal(\"LibraryModule\", e0);\n  }\n\n  function parse_ModuleDecl()\n  {\n    eventHandler.startNonterminal(\"ModuleDecl\", e0);\n    shift(182);                     // 'module'\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(248);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(29);                // S^WS | '(:' | '='\n    shift(60);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"ModuleDecl\", e0);\n  }\n\n  function parse_Prolog()\n  {\n    eventHandler.startNonterminal(\"Prolog\", e0);\n    for (;;)\n    {\n      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(213);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 153:                     // 'import'\n        lookahead2W(201);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 42604               // 'declare' 'base-uri'\n       && lk != 43628               // 'declare' 'boundary-space'\n       && lk != 50284               // 'declare' 'construction'\n       && lk != 53356               // 'declare' 'copy-namespaces'\n       && lk != 54380               // 'declare' 'decimal-format'\n       && lk != 55916               // 'declare' 'default'\n       && lk != 72300               // 'declare' 'ft-option'\n       && lk != 93337               // 'import' 'module'\n       && lk != 94316               // 'declare' 'namespace'\n       && lk != 104044              // 'declare' 'ordering'\n       && lk != 113772              // 'declare' 'revalidation'\n       && lk != 115353)             // 'import' 'schema'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(178);           // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 55916)              // 'declare' 'default'\n      {\n        lk = memoized(0, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_DefaultNamespaceDecl();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(0, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case -1:\n        whitespace();\n        parse_DefaultNamespaceDecl();\n        break;\n      case 94316:                   // 'declare' 'namespace'\n        whitespace();\n        parse_NamespaceDecl();\n        break;\n      case 153:                     // 'import'\n        whitespace();\n        parse_Import();\n        break;\n      case 72300:                   // 'declare' 'ft-option'\n        whitespace();\n        parse_FTOptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_Setter();\n      }\n      lookahead1W(28);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    for (;;)\n    {\n      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 16492               // 'declare' '%'\n       && lk != 48748               // 'declare' 'collection'\n       && lk != 51820               // 'declare' 'context'\n       && lk != 74348               // 'declare' 'function'\n       && lk != 79468               // 'declare' 'index'\n       && lk != 82540               // 'declare' 'integrity'\n       && lk != 101996              // 'declare' 'option'\n       && lk != 131692              // 'declare' 'updating'\n       && lk != 134252)             // 'declare' 'variable'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(175);           // S^WS | '%' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n        break;\n      default:\n        lk = l1;\n      }\n      switch (lk)\n      {\n      case 51820:                   // 'declare' 'context'\n        whitespace();\n        parse_ContextItemDecl();\n        break;\n      case 101996:                  // 'declare' 'option'\n        whitespace();\n        parse_OptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_AnnotatedDecl();\n      }\n      lookahead1W(28);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    eventHandler.endNonterminal(\"Prolog\", e0);\n  }\n\n  function parse_Separator()\n  {\n    eventHandler.startNonterminal(\"Separator\", e0);\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"Separator\", e0);\n  }\n\n  function parse_Setter()\n  {\n    eventHandler.startNonterminal(\"Setter\", e0);\n    switch (l1)\n    {\n    case 108:                       // 'declare'\n      lookahead2W(172);             // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 55916)                // 'declare' 'default'\n    {\n      lk = memoized(1, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_DefaultCollationDecl();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_EmptyOrderDecl();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -9;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(1, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 43628:                     // 'declare' 'boundary-space'\n      parse_BoundarySpaceDecl();\n      break;\n    case -2:\n      parse_DefaultCollationDecl();\n      break;\n    case 42604:                     // 'declare' 'base-uri'\n      parse_BaseURIDecl();\n      break;\n    case 50284:                     // 'declare' 'construction'\n      parse_ConstructionDecl();\n      break;\n    case 104044:                    // 'declare' 'ordering'\n      parse_OrderingModeDecl();\n      break;\n    case -6:\n      parse_EmptyOrderDecl();\n      break;\n    case 113772:                    // 'declare' 'revalidation'\n      parse_RevalidationDecl();\n      break;\n    case 53356:                     // 'declare' 'copy-namespaces'\n      parse_CopyNamespacesDecl();\n      break;\n    default:\n      parse_DecimalFormatDecl();\n    }\n    eventHandler.endNonterminal(\"Setter\", e0);\n  }\n\n  function parse_BoundarySpaceDecl()\n  {\n    eventHandler.startNonterminal(\"BoundarySpaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(33);                // S^WS | '(:' | 'boundary-space'\n    shift(85);                      // 'boundary-space'\n    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 214:                       // 'preserve'\n      shift(214);                   // 'preserve'\n      break;\n    default:\n      shift(241);                   // 'strip'\n    }\n    eventHandler.endNonterminal(\"BoundarySpaceDecl\", e0);\n  }\n\n  function parse_DefaultCollationDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultCollationDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(38);                // S^WS | '(:' | 'collation'\n    shift(94);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultCollationDecl\", e0);\n  }\n\n  function try_DefaultCollationDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(38);                // S^WS | '(:' | 'collation'\n    shiftT(94);                     // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_BaseURIDecl()\n  {\n    eventHandler.startNonterminal(\"BaseURIDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(32);                // S^WS | '(:' | 'base-uri'\n    shift(83);                      // 'base-uri'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"BaseURIDecl\", e0);\n  }\n\n  function parse_ConstructionDecl()\n  {\n    eventHandler.startNonterminal(\"ConstructionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(41);                // S^WS | '(:' | 'construction'\n    shift(98);                      // 'construction'\n    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 241:                       // 'strip'\n      shift(241);                   // 'strip'\n      break;\n    default:\n      shift(214);                   // 'preserve'\n    }\n    eventHandler.endNonterminal(\"ConstructionDecl\", e0);\n  }\n\n  function parse_OrderingModeDecl()\n  {\n    eventHandler.startNonterminal(\"OrderingModeDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(68);                // S^WS | '(:' | 'ordering'\n    shift(203);                     // 'ordering'\n    lookahead1W(131);               // S^WS | '(:' | 'ordered' | 'unordered'\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    default:\n      shift(256);                   // 'unordered'\n    }\n    eventHandler.endNonterminal(\"OrderingModeDecl\", e0);\n  }\n\n  function parse_EmptyOrderDecl()\n  {\n    eventHandler.startNonterminal(\"EmptyOrderDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(67);                // S^WS | '(:' | 'order'\n    shift(201);                     // 'order'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shift(123);                     // 'empty'\n    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 147:                       // 'greatest'\n      shift(147);                   // 'greatest'\n      break;\n    default:\n      shift(173);                   // 'least'\n    }\n    eventHandler.endNonterminal(\"EmptyOrderDecl\", e0);\n  }\n\n  function try_EmptyOrderDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(67);                // S^WS | '(:' | 'order'\n    shiftT(201);                    // 'order'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shiftT(123);                    // 'empty'\n    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 147:                       // 'greatest'\n      shiftT(147);                  // 'greatest'\n      break;\n    default:\n      shiftT(173);                  // 'least'\n    }\n  }\n\n  function parse_CopyNamespacesDecl()\n  {\n    eventHandler.startNonterminal(\"CopyNamespacesDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(44);                // S^WS | '(:' | 'copy-namespaces'\n    shift(104);                     // 'copy-namespaces'\n    lookahead1W(128);               // S^WS | '(:' | 'no-preserve' | 'preserve'\n    whitespace();\n    parse_PreserveMode();\n    lookahead1W(25);                // S^WS | '(:' | ','\n    shift(41);                      // ','\n    lookahead1W(123);               // S^WS | '(:' | 'inherit' | 'no-inherit'\n    whitespace();\n    parse_InheritMode();\n    eventHandler.endNonterminal(\"CopyNamespacesDecl\", e0);\n  }\n\n  function parse_PreserveMode()\n  {\n    eventHandler.startNonterminal(\"PreserveMode\", e0);\n    switch (l1)\n    {\n    case 214:                       // 'preserve'\n      shift(214);                   // 'preserve'\n      break;\n    default:\n      shift(190);                   // 'no-preserve'\n    }\n    eventHandler.endNonterminal(\"PreserveMode\", e0);\n  }\n\n  function parse_InheritMode()\n  {\n    eventHandler.startNonterminal(\"InheritMode\", e0);\n    switch (l1)\n    {\n    case 157:                       // 'inherit'\n      shift(157);                   // 'inherit'\n      break;\n    default:\n      shift(189);                   // 'no-inherit'\n    }\n    eventHandler.endNonterminal(\"InheritMode\", e0);\n  }\n\n  function parse_DecimalFormatDecl()\n  {\n    eventHandler.startNonterminal(\"DecimalFormatDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(114);               // S^WS | '(:' | 'decimal-format' | 'default'\n    switch (l1)\n    {\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_EQName();\n      break;\n    default:\n      shift(109);                   // 'default'\n      lookahead1W(45);              // S^WS | '(:' | 'decimal-format'\n      shift(106);                   // 'decimal-format'\n    }\n    for (;;)\n    {\n      lookahead1W(180);             // S^WS | '(:' | ';' | 'NaN' | 'decimal-separator' | 'digit' |\n      if (l1 == 53)                 // ';'\n      {\n        break;\n      }\n      whitespace();\n      parse_DFPropertyName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    eventHandler.endNonterminal(\"DecimalFormatDecl\", e0);\n  }\n\n  function parse_DFPropertyName()\n  {\n    eventHandler.startNonterminal(\"DFPropertyName\", e0);\n    switch (l1)\n    {\n    case 107:                       // 'decimal-separator'\n      shift(107);                   // 'decimal-separator'\n      break;\n    case 149:                       // 'grouping-separator'\n      shift(149);                   // 'grouping-separator'\n      break;\n    case 156:                       // 'infinity'\n      shift(156);                   // 'infinity'\n      break;\n    case 179:                       // 'minus-sign'\n      shift(179);                   // 'minus-sign'\n      break;\n    case 67:                        // 'NaN'\n      shift(67);                    // 'NaN'\n      break;\n    case 209:                       // 'percent'\n      shift(209);                   // 'percent'\n      break;\n    case 208:                       // 'per-mille'\n      shift(208);                   // 'per-mille'\n      break;\n    case 275:                       // 'zero-digit'\n      shift(275);                   // 'zero-digit'\n      break;\n    case 116:                       // 'digit'\n      shift(116);                   // 'digit'\n      break;\n    default:\n      shift(207);                   // 'pattern-separator'\n    }\n    eventHandler.endNonterminal(\"DFPropertyName\", e0);\n  }\n\n  function parse_Import()\n  {\n    eventHandler.startNonterminal(\"Import\", e0);\n    switch (l1)\n    {\n    case 153:                       // 'import'\n      lookahead2W(126);             // S^WS | '(:' | 'module' | 'schema'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 115353:                    // 'import' 'schema'\n      parse_SchemaImport();\n      break;\n    default:\n      parse_ModuleImport();\n    }\n    eventHandler.endNonterminal(\"Import\", e0);\n  }\n\n  function parse_SchemaImport()\n  {\n    eventHandler.startNonterminal(\"SchemaImport\", e0);\n    shift(153);                     // 'import'\n    lookahead1W(73);                // S^WS | '(:' | 'schema'\n    shift(225);                     // 'schema'\n    lookahead1W(137);               // URILiteral | S^WS | '(:' | 'default' | 'namespace'\n    if (l1 != 7)                    // URILiteral\n    {\n      whitespace();\n      parse_SchemaPrefix();\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 81)                   // 'at'\n    {\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(103);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"SchemaImport\", e0);\n  }\n\n  function parse_SchemaPrefix()\n  {\n    eventHandler.startNonterminal(\"SchemaPrefix\", e0);\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      lookahead1W(248);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n      break;\n    default:\n      shift(109);                   // 'default'\n      lookahead1W(47);              // S^WS | '(:' | 'element'\n      shift(121);                   // 'element'\n      lookahead1W(61);              // S^WS | '(:' | 'namespace'\n      shift(184);                   // 'namespace'\n    }\n    eventHandler.endNonterminal(\"SchemaPrefix\", e0);\n  }\n\n  function parse_ModuleImport()\n  {\n    eventHandler.startNonterminal(\"ModuleImport\", e0);\n    shift(153);                     // 'import'\n    lookahead1W(60);                // S^WS | '(:' | 'module'\n    shift(182);                     // 'module'\n    lookahead1W(90);                // URILiteral | S^WS | '(:' | 'namespace'\n    if (l1 == 184)                  // 'namespace'\n    {\n      shift(184);                   // 'namespace'\n      lookahead1W(248);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 81)                   // 'at'\n    {\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(103);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"ModuleImport\", e0);\n  }\n\n  function parse_NamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"NamespaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(248);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(29);                // S^WS | '(:' | '='\n    shift(60);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"NamespaceDecl\", e0);\n  }\n\n  function parse_DefaultNamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultNamespaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    default:\n      shift(145);                   // 'function'\n    }\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultNamespaceDecl\", e0);\n  }\n\n  function try_DefaultNamespaceDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    default:\n      shiftT(145);                  // 'function'\n    }\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shiftT(184);                    // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_FTOptionDecl()\n  {\n    eventHandler.startNonterminal(\"FTOptionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(52);                // S^WS | '(:' | 'ft-option'\n    shift(141);                     // 'ft-option'\n    lookahead1W(81);                // S^WS | '(:' | 'using'\n    whitespace();\n    parse_FTMatchOptions();\n    eventHandler.endNonterminal(\"FTOptionDecl\", e0);\n  }\n\n  function parse_AnnotatedDecl()\n  {\n    eventHandler.startNonterminal(\"AnnotatedDecl\", e0);\n    shift(108);                     // 'declare'\n    for (;;)\n    {\n      lookahead1W(170);             // S^WS | '%' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n      if (l1 != 32                  // '%'\n       && l1 != 257)                // 'updating'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 257:                     // 'updating'\n        whitespace();\n        parse_CompatibilityAnnotation();\n        break;\n      default:\n        whitespace();\n        parse_Annotation();\n      }\n    }\n    switch (l1)\n    {\n    case 262:                       // 'variable'\n      whitespace();\n      parse_VarDecl();\n      break;\n    case 145:                       // 'function'\n      whitespace();\n      parse_FunctionDecl();\n      break;\n    case 95:                        // 'collection'\n      whitespace();\n      parse_CollectionDecl();\n      break;\n    case 155:                       // 'index'\n      whitespace();\n      parse_IndexDecl();\n      break;\n    default:\n      whitespace();\n      parse_ICDecl();\n    }\n    eventHandler.endNonterminal(\"AnnotatedDecl\", e0);\n  }\n\n  function parse_CompatibilityAnnotation()\n  {\n    eventHandler.startNonterminal(\"CompatibilityAnnotation\", e0);\n    shift(257);                     // 'updating'\n    eventHandler.endNonterminal(\"CompatibilityAnnotation\", e0);\n  }\n\n  function parse_Annotation()\n  {\n    eventHandler.startNonterminal(\"Annotation\", e0);\n    shift(32);                      // '%'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 34)                   // '('\n    {\n      shift(34);                    // '('\n      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n      whitespace();\n      parse_Literal();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n        whitespace();\n        parse_Literal();\n      }\n      shift(37);                    // ')'\n    }\n    eventHandler.endNonterminal(\"Annotation\", e0);\n  }\n\n  function try_Annotation()\n  {\n    shiftT(32);                     // '%'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 34)                   // '('\n    {\n      shiftT(34);                   // '('\n      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n      try_Literal();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n        try_Literal();\n      }\n      shiftT(37);                   // ')'\n    }\n  }\n\n  function parse_VarDecl()\n  {\n    eventHandler.startNonterminal(\"VarDecl\", e0);\n    shift(262);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 52:                        // ':='\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(133);                   // 'external'\n      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"VarDecl\", e0);\n  }\n\n  function parse_VarValue()\n  {\n    eventHandler.startNonterminal(\"VarValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarValue\", e0);\n  }\n\n  function parse_VarDefaultValue()\n  {\n    eventHandler.startNonterminal(\"VarDefaultValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarDefaultValue\", e0);\n  }\n\n  function parse_ContextItemDecl()\n  {\n    eventHandler.startNonterminal(\"ContextItemDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(43);                // S^WS | '(:' | 'context'\n    shift(101);                     // 'context'\n    lookahead1W(55);                // S^WS | '(:' | 'item'\n    shift(165);                     // 'item'\n    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 79)                   // 'as'\n    {\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_ItemType();\n    }\n    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 52:                        // ':='\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(133);                   // 'external'\n      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"ContextItemDecl\", e0);\n  }\n\n  function parse_ParamList()\n  {\n    eventHandler.startNonterminal(\"ParamList\", e0);\n    parse_Param();\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_Param();\n    }\n    eventHandler.endNonterminal(\"ParamList\", e0);\n  }\n\n  function try_ParamList()\n  {\n    try_Param();\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_Param();\n    }\n  }\n\n  function parse_Param()\n  {\n    eventHandler.startNonterminal(\"Param\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    eventHandler.endNonterminal(\"Param\", e0);\n  }\n\n  function try_Param()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n  }\n\n  function parse_FunctionBody()\n  {\n    eventHandler.startNonterminal(\"FunctionBody\", e0);\n    parse_EnclosedExpr();\n    eventHandler.endNonterminal(\"FunctionBody\", e0);\n  }\n\n  function try_FunctionBody()\n  {\n    try_EnclosedExpr();\n  }\n\n  function parse_EnclosedExpr()\n  {\n    eventHandler.startNonterminal(\"EnclosedExpr\", e0);\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"EnclosedExpr\", e0);\n  }\n\n  function try_EnclosedExpr()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_OptionDecl()\n  {\n    eventHandler.startNonterminal(\"OptionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(66);                // S^WS | '(:' | 'option'\n    shift(199);                     // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"OptionDecl\", e0);\n  }\n\n  function parse_Expr()\n  {\n    eventHandler.startNonterminal(\"Expr\", e0);\n    parse_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Expr\", e0);\n  }\n\n  function try_Expr()\n  {\n    try_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_FLWORExpr()\n  {\n    eventHandler.startNonterminal(\"FLWORExpr\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnClause();\n    eventHandler.endNonterminal(\"FLWORExpr\", e0);\n  }\n\n  function try_FLWORExpr()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnClause();\n  }\n\n  function parse_InitialClause()\n  {\n    eventHandler.startNonterminal(\"InitialClause\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n      parse_ForClause();\n      break;\n    case 174:                       // 'let'\n      parse_LetClause();\n      break;\n    default:\n      parse_WindowClause();\n    }\n    eventHandler.endNonterminal(\"InitialClause\", e0);\n  }\n\n  function try_InitialClause()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n      try_ForClause();\n      break;\n    case 174:                       // 'let'\n      try_LetClause();\n      break;\n    default:\n      try_WindowClause();\n    }\n  }\n\n  function parse_IntermediateClause()\n  {\n    eventHandler.startNonterminal(\"IntermediateClause\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n    case 174:                       // 'let'\n      parse_InitialClause();\n      break;\n    case 266:                       // 'where'\n      parse_WhereClause();\n      break;\n    case 148:                       // 'group'\n      parse_GroupByClause();\n      break;\n    case 105:                       // 'count'\n      parse_CountClause();\n      break;\n    default:\n      parse_OrderByClause();\n    }\n    eventHandler.endNonterminal(\"IntermediateClause\", e0);\n  }\n\n  function try_IntermediateClause()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n    case 174:                       // 'let'\n      try_InitialClause();\n      break;\n    case 266:                       // 'where'\n      try_WhereClause();\n      break;\n    case 148:                       // 'group'\n      try_GroupByClause();\n      break;\n    case 105:                       // 'count'\n      try_CountClause();\n      break;\n    default:\n      try_OrderByClause();\n    }\n  }\n\n  function parse_ForClause()\n  {\n    eventHandler.startNonterminal(\"ForClause\", e0);\n    shift(137);                     // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_ForBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_ForBinding();\n    }\n    eventHandler.endNonterminal(\"ForClause\", e0);\n  }\n\n  function try_ForClause()\n  {\n    shiftT(137);                    // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_ForBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_ForBinding();\n    }\n  }\n\n  function parse_ForBinding()\n  {\n    eventHandler.startNonterminal(\"ForBinding\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 72)                   // 'allowing'\n    {\n      whitespace();\n      parse_AllowingEmpty();\n    }\n    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 81)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 228)                  // 'score'\n    {\n      whitespace();\n      parse_FTScoreVar();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ForBinding\", e0);\n  }\n\n  function try_ForBinding()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 72)                   // 'allowing'\n    {\n      try_AllowingEmpty();\n    }\n    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 81)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 228)                  // 'score'\n    {\n      try_FTScoreVar();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_AllowingEmpty()\n  {\n    eventHandler.startNonterminal(\"AllowingEmpty\", e0);\n    shift(72);                      // 'allowing'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shift(123);                     // 'empty'\n    eventHandler.endNonterminal(\"AllowingEmpty\", e0);\n  }\n\n  function try_AllowingEmpty()\n  {\n    shiftT(72);                     // 'allowing'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shiftT(123);                    // 'empty'\n  }\n\n  function parse_PositionalVar()\n  {\n    eventHandler.startNonterminal(\"PositionalVar\", e0);\n    shift(81);                      // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"PositionalVar\", e0);\n  }\n\n  function try_PositionalVar()\n  {\n    shiftT(81);                     // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_FTScoreVar()\n  {\n    eventHandler.startNonterminal(\"FTScoreVar\", e0);\n    shift(228);                     // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"FTScoreVar\", e0);\n  }\n\n  function try_FTScoreVar()\n  {\n    shiftT(228);                    // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_LetClause()\n  {\n    eventHandler.startNonterminal(\"LetClause\", e0);\n    shift(174);                     // 'let'\n    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'\n    whitespace();\n    parse_LetBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'\n      whitespace();\n      parse_LetBinding();\n    }\n    eventHandler.endNonterminal(\"LetClause\", e0);\n  }\n\n  function try_LetClause()\n  {\n    shiftT(174);                    // 'let'\n    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'\n    try_LetBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'\n      try_LetBinding();\n    }\n  }\n\n  function parse_LetBinding()\n  {\n    eventHandler.startNonterminal(\"LetBinding\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      break;\n    default:\n      parse_FTScoreVar();\n    }\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"LetBinding\", e0);\n  }\n\n  function try_LetBinding()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      break;\n    default:\n      try_FTScoreVar();\n    }\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowClause()\n  {\n    eventHandler.startNonterminal(\"WindowClause\", e0);\n    shift(137);                     // 'for'\n    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 251:                       // 'tumbling'\n      whitespace();\n      parse_TumblingWindowClause();\n      break;\n    default:\n      whitespace();\n      parse_SlidingWindowClause();\n    }\n    eventHandler.endNonterminal(\"WindowClause\", e0);\n  }\n\n  function try_WindowClause()\n  {\n    shiftT(137);                    // 'for'\n    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 251:                       // 'tumbling'\n      try_TumblingWindowClause();\n      break;\n    default:\n      try_SlidingWindowClause();\n    }\n  }\n\n  function parse_TumblingWindowClause()\n  {\n    eventHandler.startNonterminal(\"TumblingWindowClause\", e0);\n    shift(251);                     // 'tumbling'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shift(269);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    if (l1 == 126                   // 'end'\n     || l1 == 198)                  // 'only'\n    {\n      whitespace();\n      parse_WindowEndCondition();\n    }\n    eventHandler.endNonterminal(\"TumblingWindowClause\", e0);\n  }\n\n  function try_TumblingWindowClause()\n  {\n    shiftT(251);                    // 'tumbling'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shiftT(269);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    if (l1 == 126                   // 'end'\n     || l1 == 198)                  // 'only'\n    {\n      try_WindowEndCondition();\n    }\n  }\n\n  function parse_SlidingWindowClause()\n  {\n    eventHandler.startNonterminal(\"SlidingWindowClause\", e0);\n    shift(234);                     // 'sliding'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shift(269);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    whitespace();\n    parse_WindowEndCondition();\n    eventHandler.endNonterminal(\"SlidingWindowClause\", e0);\n  }\n\n  function try_SlidingWindowClause()\n  {\n    shiftT(234);                    // 'sliding'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shiftT(269);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    try_WindowEndCondition();\n  }\n\n  function parse_WindowStartCondition()\n  {\n    eventHandler.startNonterminal(\"WindowStartCondition\", e0);\n    shift(237);                     // 'start'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shift(265);                     // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowStartCondition\", e0);\n  }\n\n  function try_WindowStartCondition()\n  {\n    shiftT(237);                    // 'start'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shiftT(265);                    // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowEndCondition()\n  {\n    eventHandler.startNonterminal(\"WindowEndCondition\", e0);\n    if (l1 == 198)                  // 'only'\n    {\n      shift(198);                   // 'only'\n    }\n    lookahead1W(50);                // S^WS | '(:' | 'end'\n    shift(126);                     // 'end'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shift(265);                     // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowEndCondition\", e0);\n  }\n\n  function try_WindowEndCondition()\n  {\n    if (l1 == 198)                  // 'only'\n    {\n      shiftT(198);                  // 'only'\n    }\n    lookahead1W(50);                // S^WS | '(:' | 'end'\n    shiftT(126);                    // 'end'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shiftT(265);                    // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowVars()\n  {\n    eventHandler.startNonterminal(\"WindowVars\", e0);\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CurrentItem();\n    }\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 81)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 215)                  // 'previous'\n    {\n      shift(215);                   // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_PreviousItem();\n    }\n    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 187)                  // 'next'\n    {\n      shift(187);                   // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NextItem();\n    }\n    eventHandler.endNonterminal(\"WindowVars\", e0);\n  }\n\n  function try_WindowVars()\n  {\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CurrentItem();\n    }\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 81)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 215)                  // 'previous'\n    {\n      shiftT(215);                  // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_PreviousItem();\n    }\n    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 187)                  // 'next'\n    {\n      shiftT(187);                  // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NextItem();\n    }\n  }\n\n  function parse_CurrentItem()\n  {\n    eventHandler.startNonterminal(\"CurrentItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"CurrentItem\", e0);\n  }\n\n  function try_CurrentItem()\n  {\n    try_EQName();\n  }\n\n  function parse_PreviousItem()\n  {\n    eventHandler.startNonterminal(\"PreviousItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"PreviousItem\", e0);\n  }\n\n  function try_PreviousItem()\n  {\n    try_EQName();\n  }\n\n  function parse_NextItem()\n  {\n    eventHandler.startNonterminal(\"NextItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"NextItem\", e0);\n  }\n\n  function try_NextItem()\n  {\n    try_EQName();\n  }\n\n  function parse_CountClause()\n  {\n    eventHandler.startNonterminal(\"CountClause\", e0);\n    shift(105);                     // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"CountClause\", e0);\n  }\n\n  function try_CountClause()\n  {\n    shiftT(105);                    // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_WhereClause()\n  {\n    eventHandler.startNonterminal(\"WhereClause\", e0);\n    shift(266);                     // 'where'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WhereClause\", e0);\n  }\n\n  function try_WhereClause()\n  {\n    shiftT(266);                    // 'where'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_GroupByClause()\n  {\n    eventHandler.startNonterminal(\"GroupByClause\", e0);\n    shift(148);                     // 'group'\n    lookahead1W(34);                // S^WS | '(:' | 'by'\n    shift(87);                      // 'by'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_GroupingSpecList();\n    eventHandler.endNonterminal(\"GroupByClause\", e0);\n  }\n\n  function try_GroupByClause()\n  {\n    shiftT(148);                    // 'group'\n    lookahead1W(34);                // S^WS | '(:' | 'by'\n    shiftT(87);                     // 'by'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_GroupingSpecList();\n  }\n\n  function parse_GroupingSpecList()\n  {\n    eventHandler.startNonterminal(\"GroupingSpecList\", e0);\n    parse_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_GroupingSpec();\n    }\n    eventHandler.endNonterminal(\"GroupingSpecList\", e0);\n  }\n\n  function try_GroupingSpecList()\n  {\n    try_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_GroupingSpec();\n    }\n  }\n\n  function parse_GroupingSpec()\n  {\n    eventHandler.startNonterminal(\"GroupingSpec\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 35871                 // '$' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 140319)               // '$' 'xquery'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(182);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 52              // ':='\n           || l1 == 79)             // 'as'\n          {\n            if (l1 == 79)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(27);        // S^WS | '(:' | ':='\n            shiftT(52);             // ':='\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 94)             // 'collation'\n          {\n            shiftT(94);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(2, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      parse_GroupingVariable();\n      lookahead1W(182);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 52                  // ':='\n       || l1 == 79)                 // 'as'\n      {\n        if (l1 == 79)               // 'as'\n        {\n          whitespace();\n          parse_TypeDeclaration();\n        }\n        lookahead1W(27);            // S^WS | '(:' | ':='\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      if (l1 == 94)                 // 'collation'\n      {\n        shift(94);                  // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"GroupingSpec\", e0);\n  }\n\n  function try_GroupingSpec()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 35871                 // '$' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 140319)               // '$' 'xquery'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(182);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 52              // ':='\n           || l1 == 79)             // 'as'\n          {\n            if (l1 == 79)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(27);        // S^WS | '(:' | ':='\n            shiftT(52);             // ':='\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 94)             // 'collation'\n          {\n            shiftT(94);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          memoize(2, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(2, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_GroupingVariable();\n      lookahead1W(182);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 52                  // ':='\n       || l1 == 79)                 // 'as'\n      {\n        if (l1 == 79)               // 'as'\n        {\n          try_TypeDeclaration();\n        }\n        lookahead1W(27);            // S^WS | '(:' | ':='\n        shiftT(52);                 // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n      }\n      if (l1 == 94)                 // 'collation'\n      {\n        shiftT(94);                 // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shiftT(7);                  // URILiteral\n      }\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_GroupingVariable()\n  {\n    eventHandler.startNonterminal(\"GroupingVariable\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"GroupingVariable\", e0);\n  }\n\n  function try_GroupingVariable()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_OrderByClause()\n  {\n    eventHandler.startNonterminal(\"OrderByClause\", e0);\n    switch (l1)\n    {\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shift(87);                    // 'by'\n      break;\n    default:\n      shift(236);                   // 'stable'\n      lookahead1W(67);              // S^WS | '(:' | 'order'\n      shift(201);                   // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shift(87);                    // 'by'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_OrderSpecList();\n    eventHandler.endNonterminal(\"OrderByClause\", e0);\n  }\n\n  function try_OrderByClause()\n  {\n    switch (l1)\n    {\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shiftT(87);                   // 'by'\n      break;\n    default:\n      shiftT(236);                  // 'stable'\n      lookahead1W(67);              // S^WS | '(:' | 'order'\n      shiftT(201);                  // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shiftT(87);                   // 'by'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_OrderSpecList();\n  }\n\n  function parse_OrderSpecList()\n  {\n    eventHandler.startNonterminal(\"OrderSpecList\", e0);\n    parse_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_OrderSpec();\n    }\n    eventHandler.endNonterminal(\"OrderSpecList\", e0);\n  }\n\n  function try_OrderSpecList()\n  {\n    try_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_OrderSpec();\n    }\n  }\n\n  function parse_OrderSpec()\n  {\n    eventHandler.startNonterminal(\"OrderSpec\", e0);\n    parse_ExprSingle();\n    whitespace();\n    parse_OrderModifier();\n    eventHandler.endNonterminal(\"OrderSpec\", e0);\n  }\n\n  function try_OrderSpec()\n  {\n    try_ExprSingle();\n    try_OrderModifier();\n  }\n\n  function parse_OrderModifier()\n  {\n    eventHandler.startNonterminal(\"OrderModifier\", e0);\n    if (l1 == 80                    // 'ascending'\n     || l1 == 113)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 80:                      // 'ascending'\n        shift(80);                  // 'ascending'\n        break;\n      default:\n        shift(113);                 // 'descending'\n      }\n    }\n    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 123)                  // 'empty'\n    {\n      shift(123);                   // 'empty'\n      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 147:                     // 'greatest'\n        shift(147);                 // 'greatest'\n        break;\n      default:\n        shift(173);                 // 'least'\n      }\n    }\n    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 94)                   // 'collation'\n    {\n      shift(94);                    // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n    }\n    eventHandler.endNonterminal(\"OrderModifier\", e0);\n  }\n\n  function try_OrderModifier()\n  {\n    if (l1 == 80                    // 'ascending'\n     || l1 == 113)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 80:                      // 'ascending'\n        shiftT(80);                 // 'ascending'\n        break;\n      default:\n        shiftT(113);                // 'descending'\n      }\n    }\n    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 123)                  // 'empty'\n    {\n      shiftT(123);                  // 'empty'\n      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 147:                     // 'greatest'\n        shiftT(147);                // 'greatest'\n        break;\n      default:\n        shiftT(173);                // 'least'\n      }\n    }\n    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 94)                   // 'collation'\n    {\n      shiftT(94);                   // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n    }\n  }\n\n  function parse_ReturnClause()\n  {\n    eventHandler.startNonterminal(\"ReturnClause\", e0);\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReturnClause\", e0);\n  }\n\n  function try_ReturnClause()\n  {\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedExpr()\n  {\n    eventHandler.startNonterminal(\"QuantifiedExpr\", e0);\n    switch (l1)\n    {\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    default:\n      shift(129);                   // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_QuantifiedVarDecl();\n    }\n    shift(224);                     // 'satisfies'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedExpr\", e0);\n  }\n\n  function try_QuantifiedExpr()\n  {\n    switch (l1)\n    {\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    default:\n      shiftT(129);                  // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_QuantifiedVarDecl();\n    }\n    shiftT(224);                    // 'satisfies'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedVarDecl()\n  {\n    eventHandler.startNonterminal(\"QuantifiedVarDecl\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedVarDecl\", e0);\n  }\n\n  function try_QuantifiedVarDecl()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchExpr()\n  {\n    eventHandler.startNonterminal(\"SwitchExpr\", e0);\n    shift(243);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchExpr\", e0);\n  }\n\n  function try_SwitchExpr()\n  {\n    shiftT(243);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_SwitchCaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseClause()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseClause\", e0);\n    for (;;)\n    {\n      shift(88);                    // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseClause\", e0);\n  }\n\n  function try_SwitchCaseClause()\n  {\n    for (;;)\n    {\n      shiftT(88);                   // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseOperand()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseOperand\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseOperand\", e0);\n  }\n\n  function try_SwitchCaseOperand()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TypeswitchExpr()\n  {\n    eventHandler.startNonterminal(\"TypeswitchExpr\", e0);\n    shift(253);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TypeswitchExpr\", e0);\n  }\n\n  function try_TypeswitchExpr()\n  {\n    shiftT(253);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_CaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CaseClause()\n  {\n    eventHandler.startNonterminal(\"CaseClause\", e0);\n    shift(88);                      // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceTypeUnion();\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"CaseClause\", e0);\n  }\n\n  function try_CaseClause()\n  {\n    shiftT(88);                     // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceTypeUnion();\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SequenceTypeUnion()\n  {\n    eventHandler.startNonterminal(\"SequenceTypeUnion\", e0);\n    parse_SequenceType();\n    for (;;)\n    {\n      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shift(279);                   // '|'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"SequenceTypeUnion\", e0);\n  }\n\n  function try_SequenceTypeUnion()\n  {\n    try_SequenceType();\n    for (;;)\n    {\n      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shiftT(279);                  // '|'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_IfExpr()\n  {\n    eventHandler.startNonterminal(\"IfExpr\", e0);\n    shift(152);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shift(245);                     // 'then'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(122);                     // 'else'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"IfExpr\", e0);\n  }\n\n  function try_IfExpr()\n  {\n    shiftT(152);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shiftT(245);                    // 'then'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(122);                    // 'else'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TryCatchExpr()\n  {\n    eventHandler.startNonterminal(\"TryCatchExpr\", e0);\n    parse_TryClause();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      whitespace();\n      parse_CatchClause();\n      lookahead1W(183);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 91)                 // 'catch'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchExpr\", e0);\n  }\n\n  function try_TryCatchExpr()\n  {\n    try_TryClause();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      try_CatchClause();\n      lookahead1W(183);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 91)                 // 'catch'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TryClause()\n  {\n    eventHandler.startNonterminal(\"TryClause\", e0);\n    shift(250);                     // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TryTargetExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"TryClause\", e0);\n  }\n\n  function try_TryClause()\n  {\n    shiftT(250);                    // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TryTargetExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_TryTargetExpr()\n  {\n    eventHandler.startNonterminal(\"TryTargetExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"TryTargetExpr\", e0);\n  }\n\n  function try_TryTargetExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_CatchClause()\n  {\n    eventHandler.startNonterminal(\"CatchClause\", e0);\n    shift(91);                      // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_CatchErrorList();\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CatchClause\", e0);\n  }\n\n  function try_CatchClause()\n  {\n    shiftT(91);                     // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_CatchErrorList();\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_CatchErrorList()\n  {\n    eventHandler.startNonterminal(\"CatchErrorList\", e0);\n    parse_NameTest();\n    for (;;)\n    {\n      lookahead1W(136);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shift(279);                   // '|'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"CatchErrorList\", e0);\n  }\n\n  function try_CatchErrorList()\n  {\n    try_NameTest();\n    for (;;)\n    {\n      lookahead1W(136);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shiftT(279);                  // '|'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NameTest();\n    }\n  }\n\n  function parse_OrExpr()\n  {\n    eventHandler.startNonterminal(\"OrExpr\", e0);\n    parse_AndExpr();\n    for (;;)\n    {\n      if (l1 != 200)                // 'or'\n      {\n        break;\n      }\n      shift(200);                   // 'or'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AndExpr();\n    }\n    eventHandler.endNonterminal(\"OrExpr\", e0);\n  }\n\n  function try_OrExpr()\n  {\n    try_AndExpr();\n    for (;;)\n    {\n      if (l1 != 200)                // 'or'\n      {\n        break;\n      }\n      shiftT(200);                  // 'or'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AndExpr();\n    }\n  }\n\n  function parse_AndExpr()\n  {\n    eventHandler.startNonterminal(\"AndExpr\", e0);\n    parse_ComparisonExpr();\n    for (;;)\n    {\n      if (l1 != 75)                 // 'and'\n      {\n        break;\n      }\n      shift(75);                    // 'and'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ComparisonExpr();\n    }\n    eventHandler.endNonterminal(\"AndExpr\", e0);\n  }\n\n  function try_AndExpr()\n  {\n    try_ComparisonExpr();\n    for (;;)\n    {\n      if (l1 != 75)                 // 'and'\n      {\n        break;\n      }\n      shiftT(75);                   // 'and'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ComparisonExpr();\n    }\n  }\n\n  function parse_ComparisonExpr()\n  {\n    eventHandler.startNonterminal(\"ComparisonExpr\", e0);\n    parse_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 54                    // '<'\n     || l1 == 57                    // '<<'\n     || l1 == 58                    // '<='\n     || l1 == 60                    // '='\n     || l1 == 61                    // '>'\n     || l1 == 62                    // '>='\n     || l1 == 63                    // '>>'\n     || l1 == 128                   // 'eq'\n     || l1 == 146                   // 'ge'\n     || l1 == 150                   // 'gt'\n     || l1 == 164                   // 'is'\n     || l1 == 172                   // 'le'\n     || l1 == 178                   // 'lt'\n     || l1 == 186)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 128:                     // 'eq'\n      case 146:                     // 'ge'\n      case 150:                     // 'gt'\n      case 172:                     // 'le'\n      case 178:                     // 'lt'\n      case 186:                     // 'ne'\n        whitespace();\n        parse_ValueComp();\n        break;\n      case 57:                      // '<<'\n      case 63:                      // '>>'\n      case 164:                     // 'is'\n        whitespace();\n        parse_NodeComp();\n        break;\n      default:\n        whitespace();\n        parse_GeneralComp();\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_FTContainsExpr();\n    }\n    eventHandler.endNonterminal(\"ComparisonExpr\", e0);\n  }\n\n  function try_ComparisonExpr()\n  {\n    try_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 54                    // '<'\n     || l1 == 57                    // '<<'\n     || l1 == 58                    // '<='\n     || l1 == 60                    // '='\n     || l1 == 61                    // '>'\n     || l1 == 62                    // '>='\n     || l1 == 63                    // '>>'\n     || l1 == 128                   // 'eq'\n     || l1 == 146                   // 'ge'\n     || l1 == 150                   // 'gt'\n     || l1 == 164                   // 'is'\n     || l1 == 172                   // 'le'\n     || l1 == 178                   // 'lt'\n     || l1 == 186)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 128:                     // 'eq'\n      case 146:                     // 'ge'\n      case 150:                     // 'gt'\n      case 172:                     // 'le'\n      case 178:                     // 'lt'\n      case 186:                     // 'ne'\n        try_ValueComp();\n        break;\n      case 57:                      // '<<'\n      case 63:                      // '>>'\n      case 164:                     // 'is'\n        try_NodeComp();\n        break;\n      default:\n        try_GeneralComp();\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_FTContainsExpr();\n    }\n  }\n\n  function parse_FTContainsExpr()\n  {\n    eventHandler.startNonterminal(\"FTContainsExpr\", e0);\n    parse_StringConcatExpr();\n    if (l1 == 99)                   // 'contains'\n    {\n      shift(99);                    // 'contains'\n      lookahead1W(76);              // S^WS | '(:' | 'text'\n      shift(244);                   // 'text'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      if (l1 == 271)                // 'without'\n      {\n        whitespace();\n        parse_FTIgnoreOption();\n      }\n    }\n    eventHandler.endNonterminal(\"FTContainsExpr\", e0);\n  }\n\n  function try_FTContainsExpr()\n  {\n    try_StringConcatExpr();\n    if (l1 == 99)                   // 'contains'\n    {\n      shiftT(99);                   // 'contains'\n      lookahead1W(76);              // S^WS | '(:' | 'text'\n      shiftT(244);                  // 'text'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      if (l1 == 271)                // 'without'\n      {\n        try_FTIgnoreOption();\n      }\n    }\n  }\n\n  function parse_StringConcatExpr()\n  {\n    eventHandler.startNonterminal(\"StringConcatExpr\", e0);\n    parse_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 280)                // '||'\n      {\n        break;\n      }\n      shift(280);                   // '||'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_RangeExpr();\n    }\n    eventHandler.endNonterminal(\"StringConcatExpr\", e0);\n  }\n\n  function try_StringConcatExpr()\n  {\n    try_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 280)                // '||'\n      {\n        break;\n      }\n      shiftT(280);                  // '||'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_RangeExpr();\n    }\n  }\n\n  function parse_RangeExpr()\n  {\n    eventHandler.startNonterminal(\"RangeExpr\", e0);\n    parse_AdditiveExpr();\n    if (l1 == 248)                  // 'to'\n    {\n      shift(248);                   // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"RangeExpr\", e0);\n  }\n\n  function try_RangeExpr()\n  {\n    try_AdditiveExpr();\n    if (l1 == 248)                  // 'to'\n    {\n      shiftT(248);                  // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_AdditiveExpr()\n  {\n    eventHandler.startNonterminal(\"AdditiveExpr\", e0);\n    parse_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 40:                      // '+'\n        shift(40);                  // '+'\n        break;\n      default:\n        shift(42);                  // '-'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_MultiplicativeExpr();\n    }\n    eventHandler.endNonterminal(\"AdditiveExpr\", e0);\n  }\n\n  function try_AdditiveExpr()\n  {\n    try_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 40:                      // '+'\n        shiftT(40);                 // '+'\n        break;\n      default:\n        shiftT(42);                 // '-'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_MultiplicativeExpr();\n    }\n  }\n\n  function parse_MultiplicativeExpr()\n  {\n    eventHandler.startNonterminal(\"MultiplicativeExpr\", e0);\n    parse_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 38                  // '*'\n       && l1 != 118                 // 'div'\n       && l1 != 151                 // 'idiv'\n       && l1 != 180)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 38:                      // '*'\n        shift(38);                  // '*'\n        break;\n      case 118:                     // 'div'\n        shift(118);                 // 'div'\n        break;\n      case 151:                     // 'idiv'\n        shift(151);                 // 'idiv'\n        break;\n      default:\n        shift(180);                 // 'mod'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_UnionExpr();\n    }\n    eventHandler.endNonterminal(\"MultiplicativeExpr\", e0);\n  }\n\n  function try_MultiplicativeExpr()\n  {\n    try_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 38                  // '*'\n       && l1 != 118                 // 'div'\n       && l1 != 151                 // 'idiv'\n       && l1 != 180)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 38:                      // '*'\n        shiftT(38);                 // '*'\n        break;\n      case 118:                     // 'div'\n        shiftT(118);                // 'div'\n        break;\n      case 151:                     // 'idiv'\n        shiftT(151);                // 'idiv'\n        break;\n      default:\n        shiftT(180);                // 'mod'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_UnionExpr();\n    }\n  }\n\n  function parse_UnionExpr()\n  {\n    eventHandler.startNonterminal(\"UnionExpr\", e0);\n    parse_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 254                 // 'union'\n       && l1 != 279)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 254:                     // 'union'\n        shift(254);                 // 'union'\n        break;\n      default:\n        shift(279);                 // '|'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_IntersectExceptExpr();\n    }\n    eventHandler.endNonterminal(\"UnionExpr\", e0);\n  }\n\n  function try_UnionExpr()\n  {\n    try_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 254                 // 'union'\n       && l1 != 279)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 254:                     // 'union'\n        shiftT(254);                // 'union'\n        break;\n      default:\n        shiftT(279);                // '|'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_IntersectExceptExpr();\n    }\n  }\n\n  function parse_IntersectExceptExpr()\n  {\n    eventHandler.startNonterminal(\"IntersectExceptExpr\", e0);\n    parse_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 131                 // 'except'\n       && l1 != 162)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 162:                     // 'intersect'\n        shift(162);                 // 'intersect'\n        break;\n      default:\n        shift(131);                 // 'except'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_InstanceofExpr();\n    }\n    eventHandler.endNonterminal(\"IntersectExceptExpr\", e0);\n  }\n\n  function try_IntersectExceptExpr()\n  {\n    try_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 131                 // 'except'\n       && l1 != 162)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 162:                     // 'intersect'\n        shiftT(162);                // 'intersect'\n        break;\n      default:\n        shiftT(131);                // 'except'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_InstanceofExpr();\n    }\n  }\n\n  function parse_InstanceofExpr()\n  {\n    eventHandler.startNonterminal(\"InstanceofExpr\", e0);\n    parse_TreatExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 160)                  // 'instance'\n    {\n      shift(160);                   // 'instance'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shift(196);                   // 'of'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"InstanceofExpr\", e0);\n  }\n\n  function try_InstanceofExpr()\n  {\n    try_TreatExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 160)                  // 'instance'\n    {\n      shiftT(160);                  // 'instance'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shiftT(196);                  // 'of'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_TreatExpr()\n  {\n    eventHandler.startNonterminal(\"TreatExpr\", e0);\n    parse_CastableExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 249)                  // 'treat'\n    {\n      shift(249);                   // 'treat'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"TreatExpr\", e0);\n  }\n\n  function try_TreatExpr()\n  {\n    try_CastableExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 249)                  // 'treat'\n    {\n      shiftT(249);                  // 'treat'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_CastableExpr()\n  {\n    eventHandler.startNonterminal(\"CastableExpr\", e0);\n    parse_CastExpr();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'castable'\n    {\n      shift(90);                    // 'castable'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastableExpr\", e0);\n  }\n\n  function try_CastableExpr()\n  {\n    try_CastExpr();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'castable'\n    {\n      shiftT(90);                   // 'castable'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_CastExpr()\n  {\n    eventHandler.startNonterminal(\"CastExpr\", e0);\n    parse_UnaryExpr();\n    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 89)                   // 'cast'\n    {\n      shift(89);                    // 'cast'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastExpr\", e0);\n  }\n\n  function try_CastExpr()\n  {\n    try_UnaryExpr();\n    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 89)                   // 'cast'\n    {\n      shiftT(89);                   // 'cast'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_UnaryExpr()\n  {\n    eventHandler.startNonterminal(\"UnaryExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 42:                      // '-'\n        shift(42);                  // '-'\n        break;\n      default:\n        shift(40);                  // '+'\n      }\n    }\n    whitespace();\n    parse_ValueExpr();\n    eventHandler.endNonterminal(\"UnaryExpr\", e0);\n  }\n\n  function try_UnaryExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 42:                      // '-'\n        shiftT(42);                 // '-'\n        break;\n      default:\n        shiftT(40);                 // '+'\n      }\n    }\n    try_ValueExpr();\n  }\n\n  function parse_ValueExpr()\n  {\n    eventHandler.startNonterminal(\"ValueExpr\", e0);\n    switch (l1)\n    {\n    case 260:                       // 'validate'\n      lookahead2W(247);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 87812:                     // 'validate' 'lax'\n    case 123140:                    // 'validate' 'strict'\n    case 129284:                    // 'validate' 'type'\n    case 141572:                    // 'validate' '{'\n      parse_ValidateExpr();\n      break;\n    case 35:                        // '(#'\n      parse_ExtensionExpr();\n      break;\n    default:\n      parse_SimpleMapExpr();\n    }\n    eventHandler.endNonterminal(\"ValueExpr\", e0);\n  }\n\n  function try_ValueExpr()\n  {\n    switch (l1)\n    {\n    case 260:                       // 'validate'\n      lookahead2W(247);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 87812:                     // 'validate' 'lax'\n    case 123140:                    // 'validate' 'strict'\n    case 129284:                    // 'validate' 'type'\n    case 141572:                    // 'validate' '{'\n      try_ValidateExpr();\n      break;\n    case 35:                        // '(#'\n      try_ExtensionExpr();\n      break;\n    default:\n      try_SimpleMapExpr();\n    }\n  }\n\n  function parse_SimpleMapExpr()\n  {\n    eventHandler.startNonterminal(\"SimpleMapExpr\", e0);\n    parse_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shift(26);                    // '!'\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PathExpr();\n    }\n    eventHandler.endNonterminal(\"SimpleMapExpr\", e0);\n  }\n\n  function try_SimpleMapExpr()\n  {\n    try_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shiftT(26);                   // '!'\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PathExpr();\n    }\n  }\n\n  function parse_GeneralComp()\n  {\n    eventHandler.startNonterminal(\"GeneralComp\", e0);\n    switch (l1)\n    {\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 27:                        // '!='\n      shift(27);                    // '!='\n      break;\n    case 54:                        // '<'\n      shift(54);                    // '<'\n      break;\n    case 58:                        // '<='\n      shift(58);                    // '<='\n      break;\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    default:\n      shift(62);                    // '>='\n    }\n    eventHandler.endNonterminal(\"GeneralComp\", e0);\n  }\n\n  function try_GeneralComp()\n  {\n    switch (l1)\n    {\n    case 60:                        // '='\n      shiftT(60);                   // '='\n      break;\n    case 27:                        // '!='\n      shiftT(27);                   // '!='\n      break;\n    case 54:                        // '<'\n      shiftT(54);                   // '<'\n      break;\n    case 58:                        // '<='\n      shiftT(58);                   // '<='\n      break;\n    case 61:                        // '>'\n      shiftT(61);                   // '>'\n      break;\n    default:\n      shiftT(62);                   // '>='\n    }\n  }\n\n  function parse_ValueComp()\n  {\n    eventHandler.startNonterminal(\"ValueComp\", e0);\n    switch (l1)\n    {\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    default:\n      shift(146);                   // 'ge'\n    }\n    eventHandler.endNonterminal(\"ValueComp\", e0);\n  }\n\n  function try_ValueComp()\n  {\n    switch (l1)\n    {\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    default:\n      shiftT(146);                  // 'ge'\n    }\n  }\n\n  function parse_NodeComp()\n  {\n    eventHandler.startNonterminal(\"NodeComp\", e0);\n    switch (l1)\n    {\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 57:                        // '<<'\n      shift(57);                    // '<<'\n      break;\n    default:\n      shift(63);                    // '>>'\n    }\n    eventHandler.endNonterminal(\"NodeComp\", e0);\n  }\n\n  function try_NodeComp()\n  {\n    switch (l1)\n    {\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 57:                        // '<<'\n      shiftT(57);                   // '<<'\n      break;\n    default:\n      shiftT(63);                   // '>>'\n    }\n  }\n\n  function parse_ValidateExpr()\n  {\n    eventHandler.startNonterminal(\"ValidateExpr\", e0);\n    shift(260);                     // 'validate'\n    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 276)                  // '{'\n    {\n      switch (l1)\n      {\n      case 252:                     // 'type'\n        shift(252);                 // 'type'\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        break;\n      default:\n        whitespace();\n        parse_ValidationMode();\n      }\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ValidateExpr\", e0);\n  }\n\n  function try_ValidateExpr()\n  {\n    shiftT(260);                    // 'validate'\n    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 276)                  // '{'\n    {\n      switch (l1)\n      {\n      case 252:                     // 'type'\n        shiftT(252);                // 'type'\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        break;\n      default:\n        try_ValidationMode();\n      }\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_ValidationMode()\n  {\n    eventHandler.startNonterminal(\"ValidationMode\", e0);\n    switch (l1)\n    {\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    default:\n      shift(240);                   // 'strict'\n    }\n    eventHandler.endNonterminal(\"ValidationMode\", e0);\n  }\n\n  function try_ValidationMode()\n  {\n    switch (l1)\n    {\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    default:\n      shiftT(240);                  // 'strict'\n    }\n  }\n\n  function parse_ExtensionExpr()\n  {\n    eventHandler.startNonterminal(\"ExtensionExpr\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(276);                     // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ExtensionExpr\", e0);\n  }\n\n  function try_ExtensionExpr()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(276);                    // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      try_Expr();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_Pragma()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    shift(35);                      // '(#'\n    lookahead1(251);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n    }\n    parse_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(0);                // PragmaContents\n      shift(1);                     // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shift(30);                      // '#)'\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  }\n\n  function try_Pragma()\n  {\n    shiftT(35);                     // '(#'\n    lookahead1(251);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n    }\n    try_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(0);                // PragmaContents\n      shiftT(1);                    // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shiftT(30);                     // '#)'\n  }\n\n  function parse_PathExpr()\n  {\n    eventHandler.startNonterminal(\"PathExpr\", e0);\n    switch (l1)\n    {\n    case 46:                        // '/'\n      shift(46);                    // '/'\n      lookahead1W(285);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 37:                      // ')'\n      case 38:                      // '*'\n      case 40:                      // '+'\n      case 41:                      // ','\n      case 42:                      // '-'\n      case 49:                      // ':'\n      case 53:                      // ';'\n      case 57:                      // '<<'\n      case 58:                      // '<='\n      case 60:                      // '='\n      case 61:                      // '>'\n      case 62:                      // '>='\n      case 63:                      // '>>'\n      case 69:                      // ']'\n      case 87:                      // 'by'\n      case 99:                      // 'contains'\n      case 205:                     // 'paragraphs'\n      case 232:                     // 'sentences'\n      case 247:                     // 'times'\n      case 273:                     // 'words'\n      case 279:                     // '|'\n      case 280:                     // '||'\n      case 281:                     // '|}'\n      case 282:                     // '}'\n        break;\n      default:\n        whitespace();\n        parse_RelativePathExpr();\n      }\n      break;\n    case 47:                        // '//'\n      shift(47);                    // '//'\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_RelativePathExpr();\n      break;\n    default:\n      parse_RelativePathExpr();\n    }\n    eventHandler.endNonterminal(\"PathExpr\", e0);\n  }\n\n  function try_PathExpr()\n  {\n    switch (l1)\n    {\n    case 46:                        // '/'\n      shiftT(46);                   // '/'\n      lookahead1W(285);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 37:                      // ')'\n      case 38:                      // '*'\n      case 40:                      // '+'\n      case 41:                      // ','\n      case 42:                      // '-'\n      case 49:                      // ':'\n      case 53:                      // ';'\n      case 57:                      // '<<'\n      case 58:                      // '<='\n      case 60:                      // '='\n      case 61:                      // '>'\n      case 62:                      // '>='\n      case 63:                      // '>>'\n      case 69:                      // ']'\n      case 87:                      // 'by'\n      case 99:                      // 'contains'\n      case 205:                     // 'paragraphs'\n      case 232:                     // 'sentences'\n      case 247:                     // 'times'\n      case 273:                     // 'words'\n      case 279:                     // '|'\n      case 280:                     // '||'\n      case 281:                     // '|}'\n      case 282:                     // '}'\n        break;\n      default:\n        try_RelativePathExpr();\n      }\n      break;\n    case 47:                        // '//'\n      shiftT(47);                   // '//'\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_RelativePathExpr();\n      break;\n    default:\n      try_RelativePathExpr();\n    }\n  }\n\n  function parse_RelativePathExpr()\n  {\n    eventHandler.startNonterminal(\"RelativePathExpr\", e0);\n    parse_StepExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 37                  // ')'\n       && lk != 38                  // '*'\n       && lk != 40                  // '+'\n       && lk != 41                  // ','\n       && lk != 42                  // '-'\n       && lk != 46                  // '/'\n       && lk != 47                  // '//'\n       && lk != 49                  // ':'\n       && lk != 53                  // ';'\n       && lk != 54                  // '<'\n       && lk != 57                  // '<<'\n       && lk != 58                  // '<='\n       && lk != 60                  // '='\n       && lk != 61                  // '>'\n       && lk != 62                  // '>='\n       && lk != 63                  // '>>'\n       && lk != 69                  // ']'\n       && lk != 70                  // 'after'\n       && lk != 75                  // 'and'\n       && lk != 79                  // 'as'\n       && lk != 80                  // 'ascending'\n       && lk != 81                  // 'at'\n       && lk != 84                  // 'before'\n       && lk != 87                  // 'by'\n       && lk != 88                  // 'case'\n       && lk != 89                  // 'cast'\n       && lk != 90                  // 'castable'\n       && lk != 94                  // 'collation'\n       && lk != 99                  // 'contains'\n       && lk != 105                 // 'count'\n       && lk != 109                 // 'default'\n       && lk != 113                 // 'descending'\n       && lk != 118                 // 'div'\n       && lk != 122                 // 'else'\n       && lk != 123                 // 'empty'\n       && lk != 126                 // 'end'\n       && lk != 128                 // 'eq'\n       && lk != 131                 // 'except'\n       && lk != 137                 // 'for'\n       && lk != 146                 // 'ge'\n       && lk != 148                 // 'group'\n       && lk != 150                 // 'gt'\n       && lk != 151                 // 'idiv'\n       && lk != 160                 // 'instance'\n       && lk != 162                 // 'intersect'\n       && lk != 163                 // 'into'\n       && lk != 164                 // 'is'\n       && lk != 172                 // 'le'\n       && lk != 174                 // 'let'\n       && lk != 178                 // 'lt'\n       && lk != 180                 // 'mod'\n       && lk != 181                 // 'modify'\n       && lk != 186                 // 'ne'\n       && lk != 198                 // 'only'\n       && lk != 200                 // 'or'\n       && lk != 201                 // 'order'\n       && lk != 205                 // 'paragraphs'\n       && lk != 220                 // 'return'\n       && lk != 224                 // 'satisfies'\n       && lk != 232                 // 'sentences'\n       && lk != 236                 // 'stable'\n       && lk != 237                 // 'start'\n       && lk != 247                 // 'times'\n       && lk != 248                 // 'to'\n       && lk != 249                 // 'treat'\n       && lk != 254                 // 'union'\n       && lk != 266                 // 'where'\n       && lk != 270                 // 'with'\n       && lk != 273                 // 'words'\n       && lk != 279                 // '|'\n       && lk != 280                 // '||'\n       && lk != 281                 // '|}'\n       && lk != 282                 // '}'\n       && lk != 23578               // '!' '/'\n       && lk != 24090)              // '!' '//'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 46:                // '/'\n              shiftT(46);           // '/'\n              break;\n            case 47:                // '//'\n              shiftT(47);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(264);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(3, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 46                  // '/'\n       && lk != 47)                 // '//'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 46:                      // '/'\n        shift(46);                  // '/'\n        break;\n      case 47:                      // '//'\n        shift(47);                  // '//'\n        break;\n      default:\n        shift(26);                  // '!'\n      }\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_StepExpr();\n    }\n    eventHandler.endNonterminal(\"RelativePathExpr\", e0);\n  }\n\n  function try_RelativePathExpr()\n  {\n    try_StepExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 37                  // ')'\n       && lk != 38                  // '*'\n       && lk != 40                  // '+'\n       && lk != 41                  // ','\n       && lk != 42                  // '-'\n       && lk != 46                  // '/'\n       && lk != 47                  // '//'\n       && lk != 49                  // ':'\n       && lk != 53                  // ';'\n       && lk != 54                  // '<'\n       && lk != 57                  // '<<'\n       && lk != 58                  // '<='\n       && lk != 60                  // '='\n       && lk != 61                  // '>'\n       && lk != 62                  // '>='\n       && lk != 63                  // '>>'\n       && lk != 69                  // ']'\n       && lk != 70                  // 'after'\n       && lk != 75                  // 'and'\n       && lk != 79                  // 'as'\n       && lk != 80                  // 'ascending'\n       && lk != 81                  // 'at'\n       && lk != 84                  // 'before'\n       && lk != 87                  // 'by'\n       && lk != 88                  // 'case'\n       && lk != 89                  // 'cast'\n       && lk != 90                  // 'castable'\n       && lk != 94                  // 'collation'\n       && lk != 99                  // 'contains'\n       && lk != 105                 // 'count'\n       && lk != 109                 // 'default'\n       && lk != 113                 // 'descending'\n       && lk != 118                 // 'div'\n       && lk != 122                 // 'else'\n       && lk != 123                 // 'empty'\n       && lk != 126                 // 'end'\n       && lk != 128                 // 'eq'\n       && lk != 131                 // 'except'\n       && lk != 137                 // 'for'\n       && lk != 146                 // 'ge'\n       && lk != 148                 // 'group'\n       && lk != 150                 // 'gt'\n       && lk != 151                 // 'idiv'\n       && lk != 160                 // 'instance'\n       && lk != 162                 // 'intersect'\n       && lk != 163                 // 'into'\n       && lk != 164                 // 'is'\n       && lk != 172                 // 'le'\n       && lk != 174                 // 'let'\n       && lk != 178                 // 'lt'\n       && lk != 180                 // 'mod'\n       && lk != 181                 // 'modify'\n       && lk != 186                 // 'ne'\n       && lk != 198                 // 'only'\n       && lk != 200                 // 'or'\n       && lk != 201                 // 'order'\n       && lk != 205                 // 'paragraphs'\n       && lk != 220                 // 'return'\n       && lk != 224                 // 'satisfies'\n       && lk != 232                 // 'sentences'\n       && lk != 236                 // 'stable'\n       && lk != 237                 // 'start'\n       && lk != 247                 // 'times'\n       && lk != 248                 // 'to'\n       && lk != 249                 // 'treat'\n       && lk != 254                 // 'union'\n       && lk != 266                 // 'where'\n       && lk != 270                 // 'with'\n       && lk != 273                 // 'words'\n       && lk != 279                 // '|'\n       && lk != 280                 // '||'\n       && lk != 281                 // '|}'\n       && lk != 282                 // '}'\n       && lk != 23578               // '!' '/'\n       && lk != 24090)              // '!' '//'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 46:                // '/'\n              shiftT(46);           // '/'\n              break;\n            case 47:                // '//'\n              shiftT(47);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(264);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            memoize(3, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(3, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 46                  // '/'\n       && lk != 47)                 // '//'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 46:                      // '/'\n        shiftT(46);                 // '/'\n        break;\n      case 47:                      // '//'\n        shiftT(47);                 // '//'\n        break;\n      default:\n        shiftT(26);                 // '!'\n      }\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_StepExpr();\n    }\n  }\n\n  function parse_StepExpr()\n  {\n    eventHandler.startNonterminal(\"StepExpr\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(284);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 121:                       // 'element'\n      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 184:                       // 'namespace'\n    case 216:                       // 'processing-instruction'\n      lookahead2W(281);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 96:                        // 'comment'\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 244:                       // 'text'\n    case 256:                       // 'unordered'\n      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 78:                        // 'array'\n    case 124:                       // 'empty-sequence'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 229:                       // 'self'\n      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 120:                       // 'document-node'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 145:                       // 'function'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 185:                       // 'namespace-node'\n    case 186:                       // 'ne'\n    case 191:                       // 'node'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 228:                       // 'score'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 35922                 // 'attribute' 'after'\n     || lk == 35961                 // 'element' 'after'\n     || lk == 36024                 // 'namespace' 'after'\n     || lk == 36056                 // 'processing-instruction' 'after'\n     || lk == 38482                 // 'attribute' 'and'\n     || lk == 38521                 // 'element' 'and'\n     || lk == 38584                 // 'namespace' 'and'\n     || lk == 38616                 // 'processing-instruction' 'and'\n     || lk == 40530                 // 'attribute' 'as'\n     || lk == 40569                 // 'element' 'as'\n     || lk == 40632                 // 'namespace' 'as'\n     || lk == 40664                 // 'processing-instruction' 'as'\n     || lk == 41042                 // 'attribute' 'ascending'\n     || lk == 41081                 // 'element' 'ascending'\n     || lk == 41144                 // 'namespace' 'ascending'\n     || lk == 41176                 // 'processing-instruction' 'ascending'\n     || lk == 41554                 // 'attribute' 'at'\n     || lk == 41593                 // 'element' 'at'\n     || lk == 41656                 // 'namespace' 'at'\n     || lk == 41688                 // 'processing-instruction' 'at'\n     || lk == 43090                 // 'attribute' 'before'\n     || lk == 43129                 // 'element' 'before'\n     || lk == 43192                 // 'namespace' 'before'\n     || lk == 43224                 // 'processing-instruction' 'before'\n     || lk == 45138                 // 'attribute' 'case'\n     || lk == 45177                 // 'element' 'case'\n     || lk == 45240                 // 'namespace' 'case'\n     || lk == 45272                 // 'processing-instruction' 'case'\n     || lk == 45650                 // 'attribute' 'cast'\n     || lk == 45689                 // 'element' 'cast'\n     || lk == 45752                 // 'namespace' 'cast'\n     || lk == 45784                 // 'processing-instruction' 'cast'\n     || lk == 46162                 // 'attribute' 'castable'\n     || lk == 46201                 // 'element' 'castable'\n     || lk == 46264                 // 'namespace' 'castable'\n     || lk == 46296                 // 'processing-instruction' 'castable'\n     || lk == 48210                 // 'attribute' 'collation'\n     || lk == 48249                 // 'element' 'collation'\n     || lk == 48312                 // 'namespace' 'collation'\n     || lk == 48344                 // 'processing-instruction' 'collation'\n     || lk == 53842                 // 'attribute' 'count'\n     || lk == 53881                 // 'element' 'count'\n     || lk == 53944                 // 'namespace' 'count'\n     || lk == 53976                 // 'processing-instruction' 'count'\n     || lk == 55890                 // 'attribute' 'default'\n     || lk == 55929                 // 'element' 'default'\n     || lk == 55992                 // 'namespace' 'default'\n     || lk == 56024                 // 'processing-instruction' 'default'\n     || lk == 57938                 // 'attribute' 'descending'\n     || lk == 57977                 // 'element' 'descending'\n     || lk == 58040                 // 'namespace' 'descending'\n     || lk == 58072                 // 'processing-instruction' 'descending'\n     || lk == 60498                 // 'attribute' 'div'\n     || lk == 60537                 // 'element' 'div'\n     || lk == 60600                 // 'namespace' 'div'\n     || lk == 60632                 // 'processing-instruction' 'div'\n     || lk == 62546                 // 'attribute' 'else'\n     || lk == 62585                 // 'element' 'else'\n     || lk == 62648                 // 'namespace' 'else'\n     || lk == 62680                 // 'processing-instruction' 'else'\n     || lk == 63058                 // 'attribute' 'empty'\n     || lk == 63097                 // 'element' 'empty'\n     || lk == 63160                 // 'namespace' 'empty'\n     || lk == 63192                 // 'processing-instruction' 'empty'\n     || lk == 64594                 // 'attribute' 'end'\n     || lk == 64633                 // 'element' 'end'\n     || lk == 64696                 // 'namespace' 'end'\n     || lk == 64728                 // 'processing-instruction' 'end'\n     || lk == 65618                 // 'attribute' 'eq'\n     || lk == 65657                 // 'element' 'eq'\n     || lk == 65720                 // 'namespace' 'eq'\n     || lk == 65752                 // 'processing-instruction' 'eq'\n     || lk == 67154                 // 'attribute' 'except'\n     || lk == 67193                 // 'element' 'except'\n     || lk == 67256                 // 'namespace' 'except'\n     || lk == 67288                 // 'processing-instruction' 'except'\n     || lk == 70226                 // 'attribute' 'for'\n     || lk == 70265                 // 'element' 'for'\n     || lk == 70328                 // 'namespace' 'for'\n     || lk == 70360                 // 'processing-instruction' 'for'\n     || lk == 74834                 // 'attribute' 'ge'\n     || lk == 74873                 // 'element' 'ge'\n     || lk == 74936                 // 'namespace' 'ge'\n     || lk == 74968                 // 'processing-instruction' 'ge'\n     || lk == 75858                 // 'attribute' 'group'\n     || lk == 75897                 // 'element' 'group'\n     || lk == 75960                 // 'namespace' 'group'\n     || lk == 75992                 // 'processing-instruction' 'group'\n     || lk == 76882                 // 'attribute' 'gt'\n     || lk == 76921                 // 'element' 'gt'\n     || lk == 76984                 // 'namespace' 'gt'\n     || lk == 77016                 // 'processing-instruction' 'gt'\n     || lk == 77394                 // 'attribute' 'idiv'\n     || lk == 77433                 // 'element' 'idiv'\n     || lk == 77496                 // 'namespace' 'idiv'\n     || lk == 77528                 // 'processing-instruction' 'idiv'\n     || lk == 82002                 // 'attribute' 'instance'\n     || lk == 82041                 // 'element' 'instance'\n     || lk == 82104                 // 'namespace' 'instance'\n     || lk == 82136                 // 'processing-instruction' 'instance'\n     || lk == 83026                 // 'attribute' 'intersect'\n     || lk == 83065                 // 'element' 'intersect'\n     || lk == 83128                 // 'namespace' 'intersect'\n     || lk == 83160                 // 'processing-instruction' 'intersect'\n     || lk == 83538                 // 'attribute' 'into'\n     || lk == 83577                 // 'element' 'into'\n     || lk == 83640                 // 'namespace' 'into'\n     || lk == 83672                 // 'processing-instruction' 'into'\n     || lk == 84050                 // 'attribute' 'is'\n     || lk == 84089                 // 'element' 'is'\n     || lk == 84152                 // 'namespace' 'is'\n     || lk == 84184                 // 'processing-instruction' 'is'\n     || lk == 88146                 // 'attribute' 'le'\n     || lk == 88185                 // 'element' 'le'\n     || lk == 88248                 // 'namespace' 'le'\n     || lk == 88280                 // 'processing-instruction' 'le'\n     || lk == 89170                 // 'attribute' 'let'\n     || lk == 89209                 // 'element' 'let'\n     || lk == 89272                 // 'namespace' 'let'\n     || lk == 89304                 // 'processing-instruction' 'let'\n     || lk == 91218                 // 'attribute' 'lt'\n     || lk == 91257                 // 'element' 'lt'\n     || lk == 91320                 // 'namespace' 'lt'\n     || lk == 91352                 // 'processing-instruction' 'lt'\n     || lk == 92242                 // 'attribute' 'mod'\n     || lk == 92281                 // 'element' 'mod'\n     || lk == 92344                 // 'namespace' 'mod'\n     || lk == 92376                 // 'processing-instruction' 'mod'\n     || lk == 92754                 // 'attribute' 'modify'\n     || lk == 92793                 // 'element' 'modify'\n     || lk == 92856                 // 'namespace' 'modify'\n     || lk == 92888                 // 'processing-instruction' 'modify'\n     || lk == 95314                 // 'attribute' 'ne'\n     || lk == 95353                 // 'element' 'ne'\n     || lk == 95416                 // 'namespace' 'ne'\n     || lk == 95448                 // 'processing-instruction' 'ne'\n     || lk == 101458                // 'attribute' 'only'\n     || lk == 101497                // 'element' 'only'\n     || lk == 101560                // 'namespace' 'only'\n     || lk == 101592                // 'processing-instruction' 'only'\n     || lk == 102482                // 'attribute' 'or'\n     || lk == 102521                // 'element' 'or'\n     || lk == 102584                // 'namespace' 'or'\n     || lk == 102616                // 'processing-instruction' 'or'\n     || lk == 102994                // 'attribute' 'order'\n     || lk == 103033                // 'element' 'order'\n     || lk == 103096                // 'namespace' 'order'\n     || lk == 103128                // 'processing-instruction' 'order'\n     || lk == 112722                // 'attribute' 'return'\n     || lk == 112761                // 'element' 'return'\n     || lk == 112824                // 'namespace' 'return'\n     || lk == 112856                // 'processing-instruction' 'return'\n     || lk == 114770                // 'attribute' 'satisfies'\n     || lk == 114809                // 'element' 'satisfies'\n     || lk == 114872                // 'namespace' 'satisfies'\n     || lk == 114904                // 'processing-instruction' 'satisfies'\n     || lk == 120914                // 'attribute' 'stable'\n     || lk == 120953                // 'element' 'stable'\n     || lk == 121016                // 'namespace' 'stable'\n     || lk == 121048                // 'processing-instruction' 'stable'\n     || lk == 121426                // 'attribute' 'start'\n     || lk == 121465                // 'element' 'start'\n     || lk == 121528                // 'namespace' 'start'\n     || lk == 121560                // 'processing-instruction' 'start'\n     || lk == 127058                // 'attribute' 'to'\n     || lk == 127097                // 'element' 'to'\n     || lk == 127160                // 'namespace' 'to'\n     || lk == 127192                // 'processing-instruction' 'to'\n     || lk == 127570                // 'attribute' 'treat'\n     || lk == 127609                // 'element' 'treat'\n     || lk == 127672                // 'namespace' 'treat'\n     || lk == 127704                // 'processing-instruction' 'treat'\n     || lk == 130130                // 'attribute' 'union'\n     || lk == 130169                // 'element' 'union'\n     || lk == 130232                // 'namespace' 'union'\n     || lk == 130264                // 'processing-instruction' 'union'\n     || lk == 136274                // 'attribute' 'where'\n     || lk == 136313                // 'element' 'where'\n     || lk == 136376                // 'namespace' 'where'\n     || lk == 136408                // 'processing-instruction' 'where'\n     || lk == 138322                // 'attribute' 'with'\n     || lk == 138361                // 'element' 'with'\n     || lk == 138424                // 'namespace' 'with'\n     || lk == 138456)               // 'processing-instruction' 'with'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(4, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '%'\n    case 34:                        // '('\n    case 44:                        // '.'\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n    case 68:                        // '['\n    case 276:                       // '{'\n    case 278:                       // '{|'\n    case 3154:                      // 'attribute' EQName^Token\n    case 3193:                      // 'element' EQName^Token\n    case 9912:                      // 'namespace' NCName^Token\n    case 9944:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14926:                     // 'array' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14968:                     // 'document-node' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14972:                     // 'empty-sequence' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14993:                     // 'function' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15000:                     // 'if' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15013:                     // 'item' '#'\n    case 15014:                     // 'json' '#'\n    case 15015:                     // 'json-item' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15033:                     // 'namespace-node' '#'\n    case 15034:                     // 'ne' '#'\n    case 15039:                     // 'node' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15074:                     // 'schema-attribute' '#'\n    case 15075:                     // 'schema-element' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15090:                     // 'structured-item' '#'\n    case 15091:                     // 'switch' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15101:                     // 'typeswitch' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17553:                     // 'function' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n    case 36946:                     // 'attribute' 'allowing'\n    case 36985:                     // 'element' 'allowing'\n    case 37048:                     // 'namespace' 'allowing'\n    case 37080:                     // 'processing-instruction' 'allowing'\n    case 37458:                     // 'attribute' 'ancestor'\n    case 37497:                     // 'element' 'ancestor'\n    case 37560:                     // 'namespace' 'ancestor'\n    case 37592:                     // 'processing-instruction' 'ancestor'\n    case 37970:                     // 'attribute' 'ancestor-or-self'\n    case 38009:                     // 'element' 'ancestor-or-self'\n    case 38072:                     // 'namespace' 'ancestor-or-self'\n    case 38104:                     // 'processing-instruction' 'ancestor-or-self'\n    case 39506:                     // 'attribute' 'append'\n    case 39545:                     // 'element' 'append'\n    case 39608:                     // 'namespace' 'append'\n    case 39640:                     // 'processing-instruction' 'append'\n    case 40018:                     // 'attribute' 'array'\n    case 40057:                     // 'element' 'array'\n    case 42066:                     // 'attribute' 'attribute'\n    case 42105:                     // 'element' 'attribute'\n    case 42168:                     // 'namespace' 'attribute'\n    case 42200:                     // 'processing-instruction' 'attribute'\n    case 42578:                     // 'attribute' 'base-uri'\n    case 42617:                     // 'element' 'base-uri'\n    case 42680:                     // 'namespace' 'base-uri'\n    case 42712:                     // 'processing-instruction' 'base-uri'\n    case 43602:                     // 'attribute' 'boundary-space'\n    case 43641:                     // 'element' 'boundary-space'\n    case 43704:                     // 'namespace' 'boundary-space'\n    case 43736:                     // 'processing-instruction' 'boundary-space'\n    case 44114:                     // 'attribute' 'break'\n    case 44153:                     // 'element' 'break'\n    case 44216:                     // 'namespace' 'break'\n    case 44248:                     // 'processing-instruction' 'break'\n    case 46674:                     // 'attribute' 'catch'\n    case 46713:                     // 'element' 'catch'\n    case 46776:                     // 'namespace' 'catch'\n    case 46808:                     // 'processing-instruction' 'catch'\n    case 47698:                     // 'attribute' 'child'\n    case 47737:                     // 'element' 'child'\n    case 47800:                     // 'namespace' 'child'\n    case 47832:                     // 'processing-instruction' 'child'\n    case 49234:                     // 'attribute' 'comment'\n    case 49273:                     // 'element' 'comment'\n    case 49336:                     // 'namespace' 'comment'\n    case 49368:                     // 'processing-instruction' 'comment'\n    case 49746:                     // 'attribute' 'constraint'\n    case 49785:                     // 'element' 'constraint'\n    case 49848:                     // 'namespace' 'constraint'\n    case 49880:                     // 'processing-instruction' 'constraint'\n    case 50258:                     // 'attribute' 'construction'\n    case 50297:                     // 'element' 'construction'\n    case 50360:                     // 'namespace' 'construction'\n    case 50392:                     // 'processing-instruction' 'construction'\n    case 51794:                     // 'attribute' 'context'\n    case 51833:                     // 'element' 'context'\n    case 51896:                     // 'namespace' 'context'\n    case 51928:                     // 'processing-instruction' 'context'\n    case 52306:                     // 'attribute' 'continue'\n    case 52345:                     // 'element' 'continue'\n    case 52408:                     // 'namespace' 'continue'\n    case 52440:                     // 'processing-instruction' 'continue'\n    case 52818:                     // 'attribute' 'copy'\n    case 52857:                     // 'element' 'copy'\n    case 52920:                     // 'namespace' 'copy'\n    case 52952:                     // 'processing-instruction' 'copy'\n    case 53330:                     // 'attribute' 'copy-namespaces'\n    case 53369:                     // 'element' 'copy-namespaces'\n    case 53432:                     // 'namespace' 'copy-namespaces'\n    case 53464:                     // 'processing-instruction' 'copy-namespaces'\n    case 54354:                     // 'attribute' 'decimal-format'\n    case 54393:                     // 'element' 'decimal-format'\n    case 54456:                     // 'namespace' 'decimal-format'\n    case 54488:                     // 'processing-instruction' 'decimal-format'\n    case 55378:                     // 'attribute' 'declare'\n    case 55417:                     // 'element' 'declare'\n    case 55480:                     // 'namespace' 'declare'\n    case 55512:                     // 'processing-instruction' 'declare'\n    case 56402:                     // 'attribute' 'delete'\n    case 56441:                     // 'element' 'delete'\n    case 56504:                     // 'namespace' 'delete'\n    case 56536:                     // 'processing-instruction' 'delete'\n    case 56914:                     // 'attribute' 'descendant'\n    case 56953:                     // 'element' 'descendant'\n    case 57016:                     // 'namespace' 'descendant'\n    case 57048:                     // 'processing-instruction' 'descendant'\n    case 57426:                     // 'attribute' 'descendant-or-self'\n    case 57465:                     // 'element' 'descendant-or-self'\n    case 57528:                     // 'namespace' 'descendant-or-self'\n    case 57560:                     // 'processing-instruction' 'descendant-or-self'\n    case 61010:                     // 'attribute' 'document'\n    case 61049:                     // 'element' 'document'\n    case 61112:                     // 'namespace' 'document'\n    case 61144:                     // 'processing-instruction' 'document'\n    case 61522:                     // 'attribute' 'document-node'\n    case 61561:                     // 'element' 'document-node'\n    case 61624:                     // 'namespace' 'document-node'\n    case 61656:                     // 'processing-instruction' 'document-node'\n    case 62034:                     // 'attribute' 'element'\n    case 62073:                     // 'element' 'element'\n    case 62136:                     // 'namespace' 'element'\n    case 62168:                     // 'processing-instruction' 'element'\n    case 63570:                     // 'attribute' 'empty-sequence'\n    case 63609:                     // 'element' 'empty-sequence'\n    case 63672:                     // 'namespace' 'empty-sequence'\n    case 63704:                     // 'processing-instruction' 'empty-sequence'\n    case 64082:                     // 'attribute' 'encoding'\n    case 64121:                     // 'element' 'encoding'\n    case 64184:                     // 'namespace' 'encoding'\n    case 64216:                     // 'processing-instruction' 'encoding'\n    case 66130:                     // 'attribute' 'every'\n    case 66169:                     // 'element' 'every'\n    case 66232:                     // 'namespace' 'every'\n    case 66264:                     // 'processing-instruction' 'every'\n    case 67666:                     // 'attribute' 'exit'\n    case 67705:                     // 'element' 'exit'\n    case 67768:                     // 'namespace' 'exit'\n    case 67800:                     // 'processing-instruction' 'exit'\n    case 68178:                     // 'attribute' 'external'\n    case 68217:                     // 'element' 'external'\n    case 68280:                     // 'namespace' 'external'\n    case 68312:                     // 'processing-instruction' 'external'\n    case 68690:                     // 'attribute' 'first'\n    case 68729:                     // 'element' 'first'\n    case 68792:                     // 'namespace' 'first'\n    case 68824:                     // 'processing-instruction' 'first'\n    case 69202:                     // 'attribute' 'following'\n    case 69241:                     // 'element' 'following'\n    case 69304:                     // 'namespace' 'following'\n    case 69336:                     // 'processing-instruction' 'following'\n    case 69714:                     // 'attribute' 'following-sibling'\n    case 69753:                     // 'element' 'following-sibling'\n    case 69816:                     // 'namespace' 'following-sibling'\n    case 69848:                     // 'processing-instruction' 'following-sibling'\n    case 72274:                     // 'attribute' 'ft-option'\n    case 72313:                     // 'element' 'ft-option'\n    case 72376:                     // 'namespace' 'ft-option'\n    case 72408:                     // 'processing-instruction' 'ft-option'\n    case 74322:                     // 'attribute' 'function'\n    case 74361:                     // 'element' 'function'\n    case 74424:                     // 'namespace' 'function'\n    case 74456:                     // 'processing-instruction' 'function'\n    case 77906:                     // 'attribute' 'if'\n    case 77945:                     // 'element' 'if'\n    case 78008:                     // 'namespace' 'if'\n    case 78040:                     // 'processing-instruction' 'if'\n    case 78418:                     // 'attribute' 'import'\n    case 78457:                     // 'element' 'import'\n    case 78520:                     // 'namespace' 'import'\n    case 78552:                     // 'processing-instruction' 'import'\n    case 78930:                     // 'attribute' 'in'\n    case 78969:                     // 'element' 'in'\n    case 79032:                     // 'namespace' 'in'\n    case 79064:                     // 'processing-instruction' 'in'\n    case 79442:                     // 'attribute' 'index'\n    case 79481:                     // 'element' 'index'\n    case 79544:                     // 'namespace' 'index'\n    case 79576:                     // 'processing-instruction' 'index'\n    case 81490:                     // 'attribute' 'insert'\n    case 81529:                     // 'element' 'insert'\n    case 81592:                     // 'namespace' 'insert'\n    case 81624:                     // 'processing-instruction' 'insert'\n    case 82514:                     // 'attribute' 'integrity'\n    case 82553:                     // 'element' 'integrity'\n    case 82616:                     // 'namespace' 'integrity'\n    case 82648:                     // 'processing-instruction' 'integrity'\n    case 84562:                     // 'attribute' 'item'\n    case 84601:                     // 'element' 'item'\n    case 84664:                     // 'namespace' 'item'\n    case 84696:                     // 'processing-instruction' 'item'\n    case 85074:                     // 'attribute' 'json'\n    case 85113:                     // 'element' 'json'\n    case 85176:                     // 'namespace' 'json'\n    case 85208:                     // 'processing-instruction' 'json'\n    case 85586:                     // 'attribute' 'json-item'\n    case 85625:                     // 'element' 'json-item'\n    case 87122:                     // 'attribute' 'last'\n    case 87161:                     // 'element' 'last'\n    case 87224:                     // 'namespace' 'last'\n    case 87256:                     // 'processing-instruction' 'last'\n    case 87634:                     // 'attribute' 'lax'\n    case 87673:                     // 'element' 'lax'\n    case 87736:                     // 'namespace' 'lax'\n    case 87768:                     // 'processing-instruction' 'lax'\n    case 90194:                     // 'attribute' 'loop'\n    case 90233:                     // 'element' 'loop'\n    case 90296:                     // 'namespace' 'loop'\n    case 90328:                     // 'processing-instruction' 'loop'\n    case 93266:                     // 'attribute' 'module'\n    case 93305:                     // 'element' 'module'\n    case 93368:                     // 'namespace' 'module'\n    case 93400:                     // 'processing-instruction' 'module'\n    case 94290:                     // 'attribute' 'namespace'\n    case 94329:                     // 'element' 'namespace'\n    case 94392:                     // 'namespace' 'namespace'\n    case 94424:                     // 'processing-instruction' 'namespace'\n    case 94802:                     // 'attribute' 'namespace-node'\n    case 94841:                     // 'element' 'namespace-node'\n    case 94904:                     // 'namespace' 'namespace-node'\n    case 94936:                     // 'processing-instruction' 'namespace-node'\n    case 97874:                     // 'attribute' 'node'\n    case 97913:                     // 'element' 'node'\n    case 97976:                     // 'namespace' 'node'\n    case 98008:                     // 'processing-instruction' 'node'\n    case 98386:                     // 'attribute' 'nodes'\n    case 98425:                     // 'element' 'nodes'\n    case 98488:                     // 'namespace' 'nodes'\n    case 98520:                     // 'processing-instruction' 'nodes'\n    case 99410:                     // 'attribute' 'object'\n    case 99449:                     // 'element' 'object'\n    case 99512:                     // 'namespace' 'object'\n    case 99544:                     // 'processing-instruction' 'object'\n    case 101970:                    // 'attribute' 'option'\n    case 102009:                    // 'element' 'option'\n    case 102072:                    // 'namespace' 'option'\n    case 102104:                    // 'processing-instruction' 'option'\n    case 103506:                    // 'attribute' 'ordered'\n    case 103545:                    // 'element' 'ordered'\n    case 103608:                    // 'namespace' 'ordered'\n    case 103640:                    // 'processing-instruction' 'ordered'\n    case 104018:                    // 'attribute' 'ordering'\n    case 104057:                    // 'element' 'ordering'\n    case 104120:                    // 'namespace' 'ordering'\n    case 104152:                    // 'processing-instruction' 'ordering'\n    case 105554:                    // 'attribute' 'parent'\n    case 105593:                    // 'element' 'parent'\n    case 105656:                    // 'namespace' 'parent'\n    case 105688:                    // 'processing-instruction' 'parent'\n    case 108626:                    // 'attribute' 'preceding'\n    case 108665:                    // 'element' 'preceding'\n    case 108728:                    // 'namespace' 'preceding'\n    case 108760:                    // 'processing-instruction' 'preceding'\n    case 109138:                    // 'attribute' 'preceding-sibling'\n    case 109177:                    // 'element' 'preceding-sibling'\n    case 109240:                    // 'namespace' 'preceding-sibling'\n    case 109272:                    // 'processing-instruction' 'preceding-sibling'\n    case 110674:                    // 'attribute' 'processing-instruction'\n    case 110713:                    // 'element' 'processing-instruction'\n    case 110776:                    // 'namespace' 'processing-instruction'\n    case 110808:                    // 'processing-instruction' 'processing-instruction'\n    case 111698:                    // 'attribute' 'rename'\n    case 111737:                    // 'element' 'rename'\n    case 111800:                    // 'namespace' 'rename'\n    case 111832:                    // 'processing-instruction' 'rename'\n    case 112210:                    // 'attribute' 'replace'\n    case 112249:                    // 'element' 'replace'\n    case 112312:                    // 'namespace' 'replace'\n    case 112344:                    // 'processing-instruction' 'replace'\n    case 113234:                    // 'attribute' 'returning'\n    case 113273:                    // 'element' 'returning'\n    case 113336:                    // 'namespace' 'returning'\n    case 113368:                    // 'processing-instruction' 'returning'\n    case 113746:                    // 'attribute' 'revalidation'\n    case 113785:                    // 'element' 'revalidation'\n    case 113848:                    // 'namespace' 'revalidation'\n    case 113880:                    // 'processing-instruction' 'revalidation'\n    case 115282:                    // 'attribute' 'schema'\n    case 115321:                    // 'element' 'schema'\n    case 115384:                    // 'namespace' 'schema'\n    case 115416:                    // 'processing-instruction' 'schema'\n    case 115794:                    // 'attribute' 'schema-attribute'\n    case 115833:                    // 'element' 'schema-attribute'\n    case 115896:                    // 'namespace' 'schema-attribute'\n    case 115928:                    // 'processing-instruction' 'schema-attribute'\n    case 116306:                    // 'attribute' 'schema-element'\n    case 116345:                    // 'element' 'schema-element'\n    case 116408:                    // 'namespace' 'schema-element'\n    case 116440:                    // 'processing-instruction' 'schema-element'\n    case 116818:                    // 'attribute' 'score'\n    case 116857:                    // 'element' 'score'\n    case 116920:                    // 'namespace' 'score'\n    case 116952:                    // 'processing-instruction' 'score'\n    case 117330:                    // 'attribute' 'self'\n    case 117369:                    // 'element' 'self'\n    case 117432:                    // 'namespace' 'self'\n    case 117464:                    // 'processing-instruction' 'self'\n    case 119890:                    // 'attribute' 'sliding'\n    case 119929:                    // 'element' 'sliding'\n    case 119992:                    // 'namespace' 'sliding'\n    case 120024:                    // 'processing-instruction' 'sliding'\n    case 120402:                    // 'attribute' 'some'\n    case 120441:                    // 'element' 'some'\n    case 120504:                    // 'namespace' 'some'\n    case 120536:                    // 'processing-instruction' 'some'\n    case 122962:                    // 'attribute' 'strict'\n    case 123001:                    // 'element' 'strict'\n    case 123064:                    // 'namespace' 'strict'\n    case 123096:                    // 'processing-instruction' 'strict'\n    case 123986:                    // 'attribute' 'structured-item'\n    case 124025:                    // 'element' 'structured-item'\n    case 124498:                    // 'attribute' 'switch'\n    case 124537:                    // 'element' 'switch'\n    case 124600:                    // 'namespace' 'switch'\n    case 124632:                    // 'processing-instruction' 'switch'\n    case 125010:                    // 'attribute' 'text'\n    case 125049:                    // 'element' 'text'\n    case 125112:                    // 'namespace' 'text'\n    case 125144:                    // 'processing-instruction' 'text'\n    case 128082:                    // 'attribute' 'try'\n    case 128121:                    // 'element' 'try'\n    case 128184:                    // 'namespace' 'try'\n    case 128216:                    // 'processing-instruction' 'try'\n    case 128594:                    // 'attribute' 'tumbling'\n    case 128633:                    // 'element' 'tumbling'\n    case 128696:                    // 'namespace' 'tumbling'\n    case 128728:                    // 'processing-instruction' 'tumbling'\n    case 129106:                    // 'attribute' 'type'\n    case 129145:                    // 'element' 'type'\n    case 129208:                    // 'namespace' 'type'\n    case 129240:                    // 'processing-instruction' 'type'\n    case 129618:                    // 'attribute' 'typeswitch'\n    case 129657:                    // 'element' 'typeswitch'\n    case 129720:                    // 'namespace' 'typeswitch'\n    case 129752:                    // 'processing-instruction' 'typeswitch'\n    case 131154:                    // 'attribute' 'unordered'\n    case 131193:                    // 'element' 'unordered'\n    case 131256:                    // 'namespace' 'unordered'\n    case 131288:                    // 'processing-instruction' 'unordered'\n    case 131666:                    // 'attribute' 'updating'\n    case 131705:                    // 'element' 'updating'\n    case 131768:                    // 'namespace' 'updating'\n    case 131800:                    // 'processing-instruction' 'updating'\n    case 133202:                    // 'attribute' 'validate'\n    case 133241:                    // 'element' 'validate'\n    case 133304:                    // 'namespace' 'validate'\n    case 133336:                    // 'processing-instruction' 'validate'\n    case 133714:                    // 'attribute' 'value'\n    case 133753:                    // 'element' 'value'\n    case 133816:                    // 'namespace' 'value'\n    case 133848:                    // 'processing-instruction' 'value'\n    case 134226:                    // 'attribute' 'variable'\n    case 134265:                    // 'element' 'variable'\n    case 134328:                    // 'namespace' 'variable'\n    case 134360:                    // 'processing-instruction' 'variable'\n    case 134738:                    // 'attribute' 'version'\n    case 134777:                    // 'element' 'version'\n    case 134840:                    // 'namespace' 'version'\n    case 134872:                    // 'processing-instruction' 'version'\n    case 136786:                    // 'attribute' 'while'\n    case 136825:                    // 'element' 'while'\n    case 136888:                    // 'namespace' 'while'\n    case 136920:                    // 'processing-instruction' 'while'\n    case 140370:                    // 'attribute' 'xquery'\n    case 140409:                    // 'element' 'xquery'\n    case 140472:                    // 'namespace' 'xquery'\n    case 140504:                    // 'processing-instruction' 'xquery'\n    case 141394:                    // 'attribute' '{'\n    case 141408:                    // 'comment' '{'\n    case 141431:                    // 'document' '{'\n    case 141433:                    // 'element' '{'\n    case 141496:                    // 'namespace' '{'\n    case 141514:                    // 'ordered' '{'\n    case 141528:                    // 'processing-instruction' '{'\n    case 141556:                    // 'text' '{'\n    case 141568:                    // 'unordered' '{'\n      parse_PostfixExpr();\n      break;\n    default:\n      parse_AxisStep();\n    }\n    eventHandler.endNonterminal(\"StepExpr\", e0);\n  }\n\n  function try_StepExpr()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(284);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 121:                       // 'element'\n      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 184:                       // 'namespace'\n    case 216:                       // 'processing-instruction'\n      lookahead2W(281);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 96:                        // 'comment'\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 244:                       // 'text'\n    case 256:                       // 'unordered'\n      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 78:                        // 'array'\n    case 124:                       // 'empty-sequence'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 229:                       // 'self'\n      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 120:                       // 'document-node'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 145:                       // 'function'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 185:                       // 'namespace-node'\n    case 186:                       // 'ne'\n    case 191:                       // 'node'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 228:                       // 'score'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 35922                 // 'attribute' 'after'\n     || lk == 35961                 // 'element' 'after'\n     || lk == 36024                 // 'namespace' 'after'\n     || lk == 36056                 // 'processing-instruction' 'after'\n     || lk == 38482                 // 'attribute' 'and'\n     || lk == 38521                 // 'element' 'and'\n     || lk == 38584                 // 'namespace' 'and'\n     || lk == 38616                 // 'processing-instruction' 'and'\n     || lk == 40530                 // 'attribute' 'as'\n     || lk == 40569                 // 'element' 'as'\n     || lk == 40632                 // 'namespace' 'as'\n     || lk == 40664                 // 'processing-instruction' 'as'\n     || lk == 41042                 // 'attribute' 'ascending'\n     || lk == 41081                 // 'element' 'ascending'\n     || lk == 41144                 // 'namespace' 'ascending'\n     || lk == 41176                 // 'processing-instruction' 'ascending'\n     || lk == 41554                 // 'attribute' 'at'\n     || lk == 41593                 // 'element' 'at'\n     || lk == 41656                 // 'namespace' 'at'\n     || lk == 41688                 // 'processing-instruction' 'at'\n     || lk == 43090                 // 'attribute' 'before'\n     || lk == 43129                 // 'element' 'before'\n     || lk == 43192                 // 'namespace' 'before'\n     || lk == 43224                 // 'processing-instruction' 'before'\n     || lk == 45138                 // 'attribute' 'case'\n     || lk == 45177                 // 'element' 'case'\n     || lk == 45240                 // 'namespace' 'case'\n     || lk == 45272                 // 'processing-instruction' 'case'\n     || lk == 45650                 // 'attribute' 'cast'\n     || lk == 45689                 // 'element' 'cast'\n     || lk == 45752                 // 'namespace' 'cast'\n     || lk == 45784                 // 'processing-instruction' 'cast'\n     || lk == 46162                 // 'attribute' 'castable'\n     || lk == 46201                 // 'element' 'castable'\n     || lk == 46264                 // 'namespace' 'castable'\n     || lk == 46296                 // 'processing-instruction' 'castable'\n     || lk == 48210                 // 'attribute' 'collation'\n     || lk == 48249                 // 'element' 'collation'\n     || lk == 48312                 // 'namespace' 'collation'\n     || lk == 48344                 // 'processing-instruction' 'collation'\n     || lk == 53842                 // 'attribute' 'count'\n     || lk == 53881                 // 'element' 'count'\n     || lk == 53944                 // 'namespace' 'count'\n     || lk == 53976                 // 'processing-instruction' 'count'\n     || lk == 55890                 // 'attribute' 'default'\n     || lk == 55929                 // 'element' 'default'\n     || lk == 55992                 // 'namespace' 'default'\n     || lk == 56024                 // 'processing-instruction' 'default'\n     || lk == 57938                 // 'attribute' 'descending'\n     || lk == 57977                 // 'element' 'descending'\n     || lk == 58040                 // 'namespace' 'descending'\n     || lk == 58072                 // 'processing-instruction' 'descending'\n     || lk == 60498                 // 'attribute' 'div'\n     || lk == 60537                 // 'element' 'div'\n     || lk == 60600                 // 'namespace' 'div'\n     || lk == 60632                 // 'processing-instruction' 'div'\n     || lk == 62546                 // 'attribute' 'else'\n     || lk == 62585                 // 'element' 'else'\n     || lk == 62648                 // 'namespace' 'else'\n     || lk == 62680                 // 'processing-instruction' 'else'\n     || lk == 63058                 // 'attribute' 'empty'\n     || lk == 63097                 // 'element' 'empty'\n     || lk == 63160                 // 'namespace' 'empty'\n     || lk == 63192                 // 'processing-instruction' 'empty'\n     || lk == 64594                 // 'attribute' 'end'\n     || lk == 64633                 // 'element' 'end'\n     || lk == 64696                 // 'namespace' 'end'\n     || lk == 64728                 // 'processing-instruction' 'end'\n     || lk == 65618                 // 'attribute' 'eq'\n     || lk == 65657                 // 'element' 'eq'\n     || lk == 65720                 // 'namespace' 'eq'\n     || lk == 65752                 // 'processing-instruction' 'eq'\n     || lk == 67154                 // 'attribute' 'except'\n     || lk == 67193                 // 'element' 'except'\n     || lk == 67256                 // 'namespace' 'except'\n     || lk == 67288                 // 'processing-instruction' 'except'\n     || lk == 70226                 // 'attribute' 'for'\n     || lk == 70265                 // 'element' 'for'\n     || lk == 70328                 // 'namespace' 'for'\n     || lk == 70360                 // 'processing-instruction' 'for'\n     || lk == 74834                 // 'attribute' 'ge'\n     || lk == 74873                 // 'element' 'ge'\n     || lk == 74936                 // 'namespace' 'ge'\n     || lk == 74968                 // 'processing-instruction' 'ge'\n     || lk == 75858                 // 'attribute' 'group'\n     || lk == 75897                 // 'element' 'group'\n     || lk == 75960                 // 'namespace' 'group'\n     || lk == 75992                 // 'processing-instruction' 'group'\n     || lk == 76882                 // 'attribute' 'gt'\n     || lk == 76921                 // 'element' 'gt'\n     || lk == 76984                 // 'namespace' 'gt'\n     || lk == 77016                 // 'processing-instruction' 'gt'\n     || lk == 77394                 // 'attribute' 'idiv'\n     || lk == 77433                 // 'element' 'idiv'\n     || lk == 77496                 // 'namespace' 'idiv'\n     || lk == 77528                 // 'processing-instruction' 'idiv'\n     || lk == 82002                 // 'attribute' 'instance'\n     || lk == 82041                 // 'element' 'instance'\n     || lk == 82104                 // 'namespace' 'instance'\n     || lk == 82136                 // 'processing-instruction' 'instance'\n     || lk == 83026                 // 'attribute' 'intersect'\n     || lk == 83065                 // 'element' 'intersect'\n     || lk == 83128                 // 'namespace' 'intersect'\n     || lk == 83160                 // 'processing-instruction' 'intersect'\n     || lk == 83538                 // 'attribute' 'into'\n     || lk == 83577                 // 'element' 'into'\n     || lk == 83640                 // 'namespace' 'into'\n     || lk == 83672                 // 'processing-instruction' 'into'\n     || lk == 84050                 // 'attribute' 'is'\n     || lk == 84089                 // 'element' 'is'\n     || lk == 84152                 // 'namespace' 'is'\n     || lk == 84184                 // 'processing-instruction' 'is'\n     || lk == 88146                 // 'attribute' 'le'\n     || lk == 88185                 // 'element' 'le'\n     || lk == 88248                 // 'namespace' 'le'\n     || lk == 88280                 // 'processing-instruction' 'le'\n     || lk == 89170                 // 'attribute' 'let'\n     || lk == 89209                 // 'element' 'let'\n     || lk == 89272                 // 'namespace' 'let'\n     || lk == 89304                 // 'processing-instruction' 'let'\n     || lk == 91218                 // 'attribute' 'lt'\n     || lk == 91257                 // 'element' 'lt'\n     || lk == 91320                 // 'namespace' 'lt'\n     || lk == 91352                 // 'processing-instruction' 'lt'\n     || lk == 92242                 // 'attribute' 'mod'\n     || lk == 92281                 // 'element' 'mod'\n     || lk == 92344                 // 'namespace' 'mod'\n     || lk == 92376                 // 'processing-instruction' 'mod'\n     || lk == 92754                 // 'attribute' 'modify'\n     || lk == 92793                 // 'element' 'modify'\n     || lk == 92856                 // 'namespace' 'modify'\n     || lk == 92888                 // 'processing-instruction' 'modify'\n     || lk == 95314                 // 'attribute' 'ne'\n     || lk == 95353                 // 'element' 'ne'\n     || lk == 95416                 // 'namespace' 'ne'\n     || lk == 95448                 // 'processing-instruction' 'ne'\n     || lk == 101458                // 'attribute' 'only'\n     || lk == 101497                // 'element' 'only'\n     || lk == 101560                // 'namespace' 'only'\n     || lk == 101592                // 'processing-instruction' 'only'\n     || lk == 102482                // 'attribute' 'or'\n     || lk == 102521                // 'element' 'or'\n     || lk == 102584                // 'namespace' 'or'\n     || lk == 102616                // 'processing-instruction' 'or'\n     || lk == 102994                // 'attribute' 'order'\n     || lk == 103033                // 'element' 'order'\n     || lk == 103096                // 'namespace' 'order'\n     || lk == 103128                // 'processing-instruction' 'order'\n     || lk == 112722                // 'attribute' 'return'\n     || lk == 112761                // 'element' 'return'\n     || lk == 112824                // 'namespace' 'return'\n     || lk == 112856                // 'processing-instruction' 'return'\n     || lk == 114770                // 'attribute' 'satisfies'\n     || lk == 114809                // 'element' 'satisfies'\n     || lk == 114872                // 'namespace' 'satisfies'\n     || lk == 114904                // 'processing-instruction' 'satisfies'\n     || lk == 120914                // 'attribute' 'stable'\n     || lk == 120953                // 'element' 'stable'\n     || lk == 121016                // 'namespace' 'stable'\n     || lk == 121048                // 'processing-instruction' 'stable'\n     || lk == 121426                // 'attribute' 'start'\n     || lk == 121465                // 'element' 'start'\n     || lk == 121528                // 'namespace' 'start'\n     || lk == 121560                // 'processing-instruction' 'start'\n     || lk == 127058                // 'attribute' 'to'\n     || lk == 127097                // 'element' 'to'\n     || lk == 127160                // 'namespace' 'to'\n     || lk == 127192                // 'processing-instruction' 'to'\n     || lk == 127570                // 'attribute' 'treat'\n     || lk == 127609                // 'element' 'treat'\n     || lk == 127672                // 'namespace' 'treat'\n     || lk == 127704                // 'processing-instruction' 'treat'\n     || lk == 130130                // 'attribute' 'union'\n     || lk == 130169                // 'element' 'union'\n     || lk == 130232                // 'namespace' 'union'\n     || lk == 130264                // 'processing-instruction' 'union'\n     || lk == 136274                // 'attribute' 'where'\n     || lk == 136313                // 'element' 'where'\n     || lk == 136376                // 'namespace' 'where'\n     || lk == 136408                // 'processing-instruction' 'where'\n     || lk == 138322                // 'attribute' 'with'\n     || lk == 138361                // 'element' 'with'\n     || lk == 138424                // 'namespace' 'with'\n     || lk == 138456)               // 'processing-instruction' 'with'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          memoize(4, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(4, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '%'\n    case 34:                        // '('\n    case 44:                        // '.'\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n    case 68:                        // '['\n    case 276:                       // '{'\n    case 278:                       // '{|'\n    case 3154:                      // 'attribute' EQName^Token\n    case 3193:                      // 'element' EQName^Token\n    case 9912:                      // 'namespace' NCName^Token\n    case 9944:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14926:                     // 'array' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14968:                     // 'document-node' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14972:                     // 'empty-sequence' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14993:                     // 'function' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15000:                     // 'if' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15013:                     // 'item' '#'\n    case 15014:                     // 'json' '#'\n    case 15015:                     // 'json-item' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15033:                     // 'namespace-node' '#'\n    case 15034:                     // 'ne' '#'\n    case 15039:                     // 'node' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15074:                     // 'schema-attribute' '#'\n    case 15075:                     // 'schema-element' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15090:                     // 'structured-item' '#'\n    case 15091:                     // 'switch' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15101:                     // 'typeswitch' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17553:                     // 'function' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n    case 36946:                     // 'attribute' 'allowing'\n    case 36985:                     // 'element' 'allowing'\n    case 37048:                     // 'namespace' 'allowing'\n    case 37080:                     // 'processing-instruction' 'allowing'\n    case 37458:                     // 'attribute' 'ancestor'\n    case 37497:                     // 'element' 'ancestor'\n    case 37560:                     // 'namespace' 'ancestor'\n    case 37592:                     // 'processing-instruction' 'ancestor'\n    case 37970:                     // 'attribute' 'ancestor-or-self'\n    case 38009:                     // 'element' 'ancestor-or-self'\n    case 38072:                     // 'namespace' 'ancestor-or-self'\n    case 38104:                     // 'processing-instruction' 'ancestor-or-self'\n    case 39506:                     // 'attribute' 'append'\n    case 39545:                     // 'element' 'append'\n    case 39608:                     // 'namespace' 'append'\n    case 39640:                     // 'processing-instruction' 'append'\n    case 40018:                     // 'attribute' 'array'\n    case 40057:                     // 'element' 'array'\n    case 42066:                     // 'attribute' 'attribute'\n    case 42105:                     // 'element' 'attribute'\n    case 42168:                     // 'namespace' 'attribute'\n    case 42200:                     // 'processing-instruction' 'attribute'\n    case 42578:                     // 'attribute' 'base-uri'\n    case 42617:                     // 'element' 'base-uri'\n    case 42680:                     // 'namespace' 'base-uri'\n    case 42712:                     // 'processing-instruction' 'base-uri'\n    case 43602:                     // 'attribute' 'boundary-space'\n    case 43641:                     // 'element' 'boundary-space'\n    case 43704:                     // 'namespace' 'boundary-space'\n    case 43736:                     // 'processing-instruction' 'boundary-space'\n    case 44114:                     // 'attribute' 'break'\n    case 44153:                     // 'element' 'break'\n    case 44216:                     // 'namespace' 'break'\n    case 44248:                     // 'processing-instruction' 'break'\n    case 46674:                     // 'attribute' 'catch'\n    case 46713:                     // 'element' 'catch'\n    case 46776:                     // 'namespace' 'catch'\n    case 46808:                     // 'processing-instruction' 'catch'\n    case 47698:                     // 'attribute' 'child'\n    case 47737:                     // 'element' 'child'\n    case 47800:                     // 'namespace' 'child'\n    case 47832:                     // 'processing-instruction' 'child'\n    case 49234:                     // 'attribute' 'comment'\n    case 49273:                     // 'element' 'comment'\n    case 49336:                     // 'namespace' 'comment'\n    case 49368:                     // 'processing-instruction' 'comment'\n    case 49746:                     // 'attribute' 'constraint'\n    case 49785:                     // 'element' 'constraint'\n    case 49848:                     // 'namespace' 'constraint'\n    case 49880:                     // 'processing-instruction' 'constraint'\n    case 50258:                     // 'attribute' 'construction'\n    case 50297:                     // 'element' 'construction'\n    case 50360:                     // 'namespace' 'construction'\n    case 50392:                     // 'processing-instruction' 'construction'\n    case 51794:                     // 'attribute' 'context'\n    case 51833:                     // 'element' 'context'\n    case 51896:                     // 'namespace' 'context'\n    case 51928:                     // 'processing-instruction' 'context'\n    case 52306:                     // 'attribute' 'continue'\n    case 52345:                     // 'element' 'continue'\n    case 52408:                     // 'namespace' 'continue'\n    case 52440:                     // 'processing-instruction' 'continue'\n    case 52818:                     // 'attribute' 'copy'\n    case 52857:                     // 'element' 'copy'\n    case 52920:                     // 'namespace' 'copy'\n    case 52952:                     // 'processing-instruction' 'copy'\n    case 53330:                     // 'attribute' 'copy-namespaces'\n    case 53369:                     // 'element' 'copy-namespaces'\n    case 53432:                     // 'namespace' 'copy-namespaces'\n    case 53464:                     // 'processing-instruction' 'copy-namespaces'\n    case 54354:                     // 'attribute' 'decimal-format'\n    case 54393:                     // 'element' 'decimal-format'\n    case 54456:                     // 'namespace' 'decimal-format'\n    case 54488:                     // 'processing-instruction' 'decimal-format'\n    case 55378:                     // 'attribute' 'declare'\n    case 55417:                     // 'element' 'declare'\n    case 55480:                     // 'namespace' 'declare'\n    case 55512:                     // 'processing-instruction' 'declare'\n    case 56402:                     // 'attribute' 'delete'\n    case 56441:                     // 'element' 'delete'\n    case 56504:                     // 'namespace' 'delete'\n    case 56536:                     // 'processing-instruction' 'delete'\n    case 56914:                     // 'attribute' 'descendant'\n    case 56953:                     // 'element' 'descendant'\n    case 57016:                     // 'namespace' 'descendant'\n    case 57048:                     // 'processing-instruction' 'descendant'\n    case 57426:                     // 'attribute' 'descendant-or-self'\n    case 57465:                     // 'element' 'descendant-or-self'\n    case 57528:                     // 'namespace' 'descendant-or-self'\n    case 57560:                     // 'processing-instruction' 'descendant-or-self'\n    case 61010:                     // 'attribute' 'document'\n    case 61049:                     // 'element' 'document'\n    case 61112:                     // 'namespace' 'document'\n    case 61144:                     // 'processing-instruction' 'document'\n    case 61522:                     // 'attribute' 'document-node'\n    case 61561:                     // 'element' 'document-node'\n    case 61624:                     // 'namespace' 'document-node'\n    case 61656:                     // 'processing-instruction' 'document-node'\n    case 62034:                     // 'attribute' 'element'\n    case 62073:                     // 'element' 'element'\n    case 62136:                     // 'namespace' 'element'\n    case 62168:                     // 'processing-instruction' 'element'\n    case 63570:                     // 'attribute' 'empty-sequence'\n    case 63609:                     // 'element' 'empty-sequence'\n    case 63672:                     // 'namespace' 'empty-sequence'\n    case 63704:                     // 'processing-instruction' 'empty-sequence'\n    case 64082:                     // 'attribute' 'encoding'\n    case 64121:                     // 'element' 'encoding'\n    case 64184:                     // 'namespace' 'encoding'\n    case 64216:                     // 'processing-instruction' 'encoding'\n    case 66130:                     // 'attribute' 'every'\n    case 66169:                     // 'element' 'every'\n    case 66232:                     // 'namespace' 'every'\n    case 66264:                     // 'processing-instruction' 'every'\n    case 67666:                     // 'attribute' 'exit'\n    case 67705:                     // 'element' 'exit'\n    case 67768:                     // 'namespace' 'exit'\n    case 67800:                     // 'processing-instruction' 'exit'\n    case 68178:                     // 'attribute' 'external'\n    case 68217:                     // 'element' 'external'\n    case 68280:                     // 'namespace' 'external'\n    case 68312:                     // 'processing-instruction' 'external'\n    case 68690:                     // 'attribute' 'first'\n    case 68729:                     // 'element' 'first'\n    case 68792:                     // 'namespace' 'first'\n    case 68824:                     // 'processing-instruction' 'first'\n    case 69202:                     // 'attribute' 'following'\n    case 69241:                     // 'element' 'following'\n    case 69304:                     // 'namespace' 'following'\n    case 69336:                     // 'processing-instruction' 'following'\n    case 69714:                     // 'attribute' 'following-sibling'\n    case 69753:                     // 'element' 'following-sibling'\n    case 69816:                     // 'namespace' 'following-sibling'\n    case 69848:                     // 'processing-instruction' 'following-sibling'\n    case 72274:                     // 'attribute' 'ft-option'\n    case 72313:                     // 'element' 'ft-option'\n    case 72376:                     // 'namespace' 'ft-option'\n    case 72408:                     // 'processing-instruction' 'ft-option'\n    case 74322:                     // 'attribute' 'function'\n    case 74361:                     // 'element' 'function'\n    case 74424:                     // 'namespace' 'function'\n    case 74456:                     // 'processing-instruction' 'function'\n    case 77906:                     // 'attribute' 'if'\n    case 77945:                     // 'element' 'if'\n    case 78008:                     // 'namespace' 'if'\n    case 78040:                     // 'processing-instruction' 'if'\n    case 78418:                     // 'attribute' 'import'\n    case 78457:                     // 'element' 'import'\n    case 78520:                     // 'namespace' 'import'\n    case 78552:                     // 'processing-instruction' 'import'\n    case 78930:                     // 'attribute' 'in'\n    case 78969:                     // 'element' 'in'\n    case 79032:                     // 'namespace' 'in'\n    case 79064:                     // 'processing-instruction' 'in'\n    case 79442:                     // 'attribute' 'index'\n    case 79481:                     // 'element' 'index'\n    case 79544:                     // 'namespace' 'index'\n    case 79576:                     // 'processing-instruction' 'index'\n    case 81490:                     // 'attribute' 'insert'\n    case 81529:                     // 'element' 'insert'\n    case 81592:                     // 'namespace' 'insert'\n    case 81624:                     // 'processing-instruction' 'insert'\n    case 82514:                     // 'attribute' 'integrity'\n    case 82553:                     // 'element' 'integrity'\n    case 82616:                     // 'namespace' 'integrity'\n    case 82648:                     // 'processing-instruction' 'integrity'\n    case 84562:                     // 'attribute' 'item'\n    case 84601:                     // 'element' 'item'\n    case 84664:                     // 'namespace' 'item'\n    case 84696:                     // 'processing-instruction' 'item'\n    case 85074:                     // 'attribute' 'json'\n    case 85113:                     // 'element' 'json'\n    case 85176:                     // 'namespace' 'json'\n    case 85208:                     // 'processing-instruction' 'json'\n    case 85586:                     // 'attribute' 'json-item'\n    case 85625:                     // 'element' 'json-item'\n    case 87122:                     // 'attribute' 'last'\n    case 87161:                     // 'element' 'last'\n    case 87224:                     // 'namespace' 'last'\n    case 87256:                     // 'processing-instruction' 'last'\n    case 87634:                     // 'attribute' 'lax'\n    case 87673:                     // 'element' 'lax'\n    case 87736:                     // 'namespace' 'lax'\n    case 87768:                     // 'processing-instruction' 'lax'\n    case 90194:                     // 'attribute' 'loop'\n    case 90233:                     // 'element' 'loop'\n    case 90296:                     // 'namespace' 'loop'\n    case 90328:                     // 'processing-instruction' 'loop'\n    case 93266:                     // 'attribute' 'module'\n    case 93305:                     // 'element' 'module'\n    case 93368:                     // 'namespace' 'module'\n    case 93400:                     // 'processing-instruction' 'module'\n    case 94290:                     // 'attribute' 'namespace'\n    case 94329:                     // 'element' 'namespace'\n    case 94392:                     // 'namespace' 'namespace'\n    case 94424:                     // 'processing-instruction' 'namespace'\n    case 94802:                     // 'attribute' 'namespace-node'\n    case 94841:                     // 'element' 'namespace-node'\n    case 94904:                     // 'namespace' 'namespace-node'\n    case 94936:                     // 'processing-instruction' 'namespace-node'\n    case 97874:                     // 'attribute' 'node'\n    case 97913:                     // 'element' 'node'\n    case 97976:                     // 'namespace' 'node'\n    case 98008:                     // 'processing-instruction' 'node'\n    case 98386:                     // 'attribute' 'nodes'\n    case 98425:                     // 'element' 'nodes'\n    case 98488:                     // 'namespace' 'nodes'\n    case 98520:                     // 'processing-instruction' 'nodes'\n    case 99410:                     // 'attribute' 'object'\n    case 99449:                     // 'element' 'object'\n    case 99512:                     // 'namespace' 'object'\n    case 99544:                     // 'processing-instruction' 'object'\n    case 101970:                    // 'attribute' 'option'\n    case 102009:                    // 'element' 'option'\n    case 102072:                    // 'namespace' 'option'\n    case 102104:                    // 'processing-instruction' 'option'\n    case 103506:                    // 'attribute' 'ordered'\n    case 103545:                    // 'element' 'ordered'\n    case 103608:                    // 'namespace' 'ordered'\n    case 103640:                    // 'processing-instruction' 'ordered'\n    case 104018:                    // 'attribute' 'ordering'\n    case 104057:                    // 'element' 'ordering'\n    case 104120:                    // 'namespace' 'ordering'\n    case 104152:                    // 'processing-instruction' 'ordering'\n    case 105554:                    // 'attribute' 'parent'\n    case 105593:                    // 'element' 'parent'\n    case 105656:                    // 'namespace' 'parent'\n    case 105688:                    // 'processing-instruction' 'parent'\n    case 108626:                    // 'attribute' 'preceding'\n    case 108665:                    // 'element' 'preceding'\n    case 108728:                    // 'namespace' 'preceding'\n    case 108760:                    // 'processing-instruction' 'preceding'\n    case 109138:                    // 'attribute' 'preceding-sibling'\n    case 109177:                    // 'element' 'preceding-sibling'\n    case 109240:                    // 'namespace' 'preceding-sibling'\n    case 109272:                    // 'processing-instruction' 'preceding-sibling'\n    case 110674:                    // 'attribute' 'processing-instruction'\n    case 110713:                    // 'element' 'processing-instruction'\n    case 110776:                    // 'namespace' 'processing-instruction'\n    case 110808:                    // 'processing-instruction' 'processing-instruction'\n    case 111698:                    // 'attribute' 'rename'\n    case 111737:                    // 'element' 'rename'\n    case 111800:                    // 'namespace' 'rename'\n    case 111832:                    // 'processing-instruction' 'rename'\n    case 112210:                    // 'attribute' 'replace'\n    case 112249:                    // 'element' 'replace'\n    case 112312:                    // 'namespace' 'replace'\n    case 112344:                    // 'processing-instruction' 'replace'\n    case 113234:                    // 'attribute' 'returning'\n    case 113273:                    // 'element' 'returning'\n    case 113336:                    // 'namespace' 'returning'\n    case 113368:                    // 'processing-instruction' 'returning'\n    case 113746:                    // 'attribute' 'revalidation'\n    case 113785:                    // 'element' 'revalidation'\n    case 113848:                    // 'namespace' 'revalidation'\n    case 113880:                    // 'processing-instruction' 'revalidation'\n    case 115282:                    // 'attribute' 'schema'\n    case 115321:                    // 'element' 'schema'\n    case 115384:                    // 'namespace' 'schema'\n    case 115416:                    // 'processing-instruction' 'schema'\n    case 115794:                    // 'attribute' 'schema-attribute'\n    case 115833:                    // 'element' 'schema-attribute'\n    case 115896:                    // 'namespace' 'schema-attribute'\n    case 115928:                    // 'processing-instruction' 'schema-attribute'\n    case 116306:                    // 'attribute' 'schema-element'\n    case 116345:                    // 'element' 'schema-element'\n    case 116408:                    // 'namespace' 'schema-element'\n    case 116440:                    // 'processing-instruction' 'schema-element'\n    case 116818:                    // 'attribute' 'score'\n    case 116857:                    // 'element' 'score'\n    case 116920:                    // 'namespace' 'score'\n    case 116952:                    // 'processing-instruction' 'score'\n    case 117330:                    // 'attribute' 'self'\n    case 117369:                    // 'element' 'self'\n    case 117432:                    // 'namespace' 'self'\n    case 117464:                    // 'processing-instruction' 'self'\n    case 119890:                    // 'attribute' 'sliding'\n    case 119929:                    // 'element' 'sliding'\n    case 119992:                    // 'namespace' 'sliding'\n    case 120024:                    // 'processing-instruction' 'sliding'\n    case 120402:                    // 'attribute' 'some'\n    case 120441:                    // 'element' 'some'\n    case 120504:                    // 'namespace' 'some'\n    case 120536:                    // 'processing-instruction' 'some'\n    case 122962:                    // 'attribute' 'strict'\n    case 123001:                    // 'element' 'strict'\n    case 123064:                    // 'namespace' 'strict'\n    case 123096:                    // 'processing-instruction' 'strict'\n    case 123986:                    // 'attribute' 'structured-item'\n    case 124025:                    // 'element' 'structured-item'\n    case 124498:                    // 'attribute' 'switch'\n    case 124537:                    // 'element' 'switch'\n    case 124600:                    // 'namespace' 'switch'\n    case 124632:                    // 'processing-instruction' 'switch'\n    case 125010:                    // 'attribute' 'text'\n    case 125049:                    // 'element' 'text'\n    case 125112:                    // 'namespace' 'text'\n    case 125144:                    // 'processing-instruction' 'text'\n    case 128082:                    // 'attribute' 'try'\n    case 128121:                    // 'element' 'try'\n    case 128184:                    // 'namespace' 'try'\n    case 128216:                    // 'processing-instruction' 'try'\n    case 128594:                    // 'attribute' 'tumbling'\n    case 128633:                    // 'element' 'tumbling'\n    case 128696:                    // 'namespace' 'tumbling'\n    case 128728:                    // 'processing-instruction' 'tumbling'\n    case 129106:                    // 'attribute' 'type'\n    case 129145:                    // 'element' 'type'\n    case 129208:                    // 'namespace' 'type'\n    case 129240:                    // 'processing-instruction' 'type'\n    case 129618:                    // 'attribute' 'typeswitch'\n    case 129657:                    // 'element' 'typeswitch'\n    case 129720:                    // 'namespace' 'typeswitch'\n    case 129752:                    // 'processing-instruction' 'typeswitch'\n    case 131154:                    // 'attribute' 'unordered'\n    case 131193:                    // 'element' 'unordered'\n    case 131256:                    // 'namespace' 'unordered'\n    case 131288:                    // 'processing-instruction' 'unordered'\n    case 131666:                    // 'attribute' 'updating'\n    case 131705:                    // 'element' 'updating'\n    case 131768:                    // 'namespace' 'updating'\n    case 131800:                    // 'processing-instruction' 'updating'\n    case 133202:                    // 'attribute' 'validate'\n    case 133241:                    // 'element' 'validate'\n    case 133304:                    // 'namespace' 'validate'\n    case 133336:                    // 'processing-instruction' 'validate'\n    case 133714:                    // 'attribute' 'value'\n    case 133753:                    // 'element' 'value'\n    case 133816:                    // 'namespace' 'value'\n    case 133848:                    // 'processing-instruction' 'value'\n    case 134226:                    // 'attribute' 'variable'\n    case 134265:                    // 'element' 'variable'\n    case 134328:                    // 'namespace' 'variable'\n    case 134360:                    // 'processing-instruction' 'variable'\n    case 134738:                    // 'attribute' 'version'\n    case 134777:                    // 'element' 'version'\n    case 134840:                    // 'namespace' 'version'\n    case 134872:                    // 'processing-instruction' 'version'\n    case 136786:                    // 'attribute' 'while'\n    case 136825:                    // 'element' 'while'\n    case 136888:                    // 'namespace' 'while'\n    case 136920:                    // 'processing-instruction' 'while'\n    case 140370:                    // 'attribute' 'xquery'\n    case 140409:                    // 'element' 'xquery'\n    case 140472:                    // 'namespace' 'xquery'\n    case 140504:                    // 'processing-instruction' 'xquery'\n    case 141394:                    // 'attribute' '{'\n    case 141408:                    // 'comment' '{'\n    case 141431:                    // 'document' '{'\n    case 141433:                    // 'element' '{'\n    case 141496:                    // 'namespace' '{'\n    case 141514:                    // 'ordered' '{'\n    case 141528:                    // 'processing-instruction' '{'\n    case 141556:                    // 'text' '{'\n    case 141568:                    // 'unordered' '{'\n      try_PostfixExpr();\n      break;\n    case -3:\n      break;\n    default:\n      try_AxisStep();\n    }\n  }\n\n  function parse_AxisStep()\n  {\n    eventHandler.startNonterminal(\"AxisStep\", e0);\n    switch (l1)\n    {\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 45:                        // '..'\n    case 26185:                     // 'ancestor' '::'\n    case 26186:                     // 'ancestor-or-self' '::'\n    case 26318:                     // 'parent' '::'\n    case 26324:                     // 'preceding' '::'\n    case 26325:                     // 'preceding-sibling' '::'\n      parse_ReverseStep();\n      break;\n    default:\n      parse_ForwardStep();\n    }\n    lookahead1W(237);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    whitespace();\n    parse_PredicateList();\n    eventHandler.endNonterminal(\"AxisStep\", e0);\n  }\n\n  function try_AxisStep()\n  {\n    switch (l1)\n    {\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 45:                        // '..'\n    case 26185:                     // 'ancestor' '::'\n    case 26186:                     // 'ancestor-or-self' '::'\n    case 26318:                     // 'parent' '::'\n    case 26324:                     // 'preceding' '::'\n    case 26325:                     // 'preceding-sibling' '::'\n      try_ReverseStep();\n      break;\n    default:\n      try_ForwardStep();\n    }\n    lookahead1W(237);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    try_PredicateList();\n  }\n\n  function parse_ForwardStep()\n  {\n    eventHandler.startNonterminal(\"ForwardStep\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 229:                       // 'self'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26194:                     // 'attribute' '::'\n    case 26205:                     // 'child' '::'\n    case 26223:                     // 'descendant' '::'\n    case 26224:                     // 'descendant-or-self' '::'\n    case 26247:                     // 'following' '::'\n    case 26248:                     // 'following-sibling' '::'\n    case 26341:                     // 'self' '::'\n      parse_ForwardAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n      break;\n    default:\n      parse_AbbrevForwardStep();\n    }\n    eventHandler.endNonterminal(\"ForwardStep\", e0);\n  }\n\n  function try_ForwardStep()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 229:                       // 'self'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26194:                     // 'attribute' '::'\n    case 26205:                     // 'child' '::'\n    case 26223:                     // 'descendant' '::'\n    case 26224:                     // 'descendant-or-self' '::'\n    case 26247:                     // 'following' '::'\n    case 26248:                     // 'following-sibling' '::'\n    case 26341:                     // 'self' '::'\n      try_ForwardAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n      break;\n    default:\n      try_AbbrevForwardStep();\n    }\n  }\n\n  function parse_ForwardAxis()\n  {\n    eventHandler.startNonterminal(\"ForwardAxis\", e0);\n    switch (l1)\n    {\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    default:\n      shift(135);                   // 'following'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ForwardAxis\", e0);\n  }\n\n  function try_ForwardAxis()\n  {\n    switch (l1)\n    {\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    default:\n      shiftT(135);                  // 'following'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n    }\n  }\n\n  function parse_AbbrevForwardStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevForwardStep\", e0);\n    if (l1 == 66)                   // '@'\n    {\n      shift(66);                    // '@'\n    }\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NodeTest();\n    eventHandler.endNonterminal(\"AbbrevForwardStep\", e0);\n  }\n\n  function try_AbbrevForwardStep()\n  {\n    if (l1 == 66)                   // '@'\n    {\n      shiftT(66);                   // '@'\n    }\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_NodeTest();\n  }\n\n  function parse_ReverseStep()\n  {\n    eventHandler.startNonterminal(\"ReverseStep\", e0);\n    switch (l1)\n    {\n    case 45:                        // '..'\n      parse_AbbrevReverseStep();\n      break;\n    default:\n      parse_ReverseAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n    }\n    eventHandler.endNonterminal(\"ReverseStep\", e0);\n  }\n\n  function try_ReverseStep()\n  {\n    switch (l1)\n    {\n    case 45:                        // '..'\n      try_AbbrevReverseStep();\n      break;\n    default:\n      try_ReverseAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n    }\n  }\n\n  function parse_ReverseAxis()\n  {\n    eventHandler.startNonterminal(\"ReverseAxis\", e0);\n    switch (l1)\n    {\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    default:\n      shift(74);                    // 'ancestor-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ReverseAxis\", e0);\n  }\n\n  function try_ReverseAxis()\n  {\n    switch (l1)\n    {\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    default:\n      shiftT(74);                   // 'ancestor-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n    }\n  }\n\n  function parse_AbbrevReverseStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevReverseStep\", e0);\n    shift(45);                      // '..'\n    eventHandler.endNonterminal(\"AbbrevReverseStep\", e0);\n  }\n\n  function try_AbbrevReverseStep()\n  {\n    shiftT(45);                     // '..'\n  }\n\n  function parse_NodeTest()\n  {\n    eventHandler.startNonterminal(\"NodeTest\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 244:                       // 'text'\n      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      parse_KindTest();\n      break;\n    default:\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"NodeTest\", e0);\n  }\n\n  function try_NodeTest()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 244:                       // 'text'\n      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      try_KindTest();\n      break;\n    default:\n      try_NameTest();\n    }\n  }\n\n  function parse_NameTest()\n  {\n    eventHandler.startNonterminal(\"NameTest\", e0);\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shift(5);                     // Wildcard\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"NameTest\", e0);\n  }\n\n  function try_NameTest()\n  {\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shiftT(5);                    // Wildcard\n      break;\n    default:\n      try_EQName();\n    }\n  }\n\n  function parse_PostfixExpr()\n  {\n    eventHandler.startNonterminal(\"PostfixExpr\", e0);\n    parse_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      if (l1 != 34                  // '('\n       && l1 != 68)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 68:                      // '['\n        whitespace();\n        parse_Predicate();\n        break;\n      default:\n        whitespace();\n        parse_ArgumentList();\n      }\n    }\n    eventHandler.endNonterminal(\"PostfixExpr\", e0);\n  }\n\n  function try_PostfixExpr()\n  {\n    try_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      if (l1 != 34                  // '('\n       && l1 != 68)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 68:                      // '['\n        try_Predicate();\n        break;\n      default:\n        try_ArgumentList();\n      }\n    }\n  }\n\n  function parse_ArgumentList()\n  {\n    eventHandler.startNonterminal(\"ArgumentList\", e0);\n    shift(34);                      // '('\n    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_Argument();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_Argument();\n      }\n    }\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ArgumentList\", e0);\n  }\n\n  function try_ArgumentList()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      try_Argument();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_Argument();\n      }\n    }\n    shiftT(37);                     // ')'\n  }\n\n  function parse_PredicateList()\n  {\n    eventHandler.startNonterminal(\"PredicateList\", e0);\n    for (;;)\n    {\n      lookahead1W(237);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 68)                 // '['\n      {\n        break;\n      }\n      whitespace();\n      parse_Predicate();\n    }\n    eventHandler.endNonterminal(\"PredicateList\", e0);\n  }\n\n  function try_PredicateList()\n  {\n    for (;;)\n    {\n      lookahead1W(237);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 68)                 // '['\n      {\n        break;\n      }\n      try_Predicate();\n    }\n  }\n\n  function parse_Predicate()\n  {\n    eventHandler.startNonterminal(\"Predicate\", e0);\n    shift(68);                      // '['\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(69);                      // ']'\n    eventHandler.endNonterminal(\"Predicate\", e0);\n  }\n\n  function try_Predicate()\n  {\n    shiftT(68);                     // '['\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(69);                     // ']'\n  }\n\n  function parse_Literal()\n  {\n    eventHandler.startNonterminal(\"Literal\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      parse_NumericLiteral();\n    }\n    eventHandler.endNonterminal(\"Literal\", e0);\n  }\n\n  function try_Literal()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      try_NumericLiteral();\n    }\n  }\n\n  function parse_NumericLiteral()\n  {\n    eventHandler.startNonterminal(\"NumericLiteral\", e0);\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shift(8);                     // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shift(9);                     // DecimalLiteral\n      break;\n    default:\n      shift(10);                    // DoubleLiteral\n    }\n    eventHandler.endNonterminal(\"NumericLiteral\", e0);\n  }\n\n  function try_NumericLiteral()\n  {\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shiftT(9);                    // DecimalLiteral\n      break;\n    default:\n      shiftT(10);                   // DoubleLiteral\n    }\n  }\n\n  function parse_VarRef()\n  {\n    eventHandler.startNonterminal(\"VarRef\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"VarRef\", e0);\n  }\n\n  function try_VarRef()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_VarName()\n  {\n    eventHandler.startNonterminal(\"VarName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"VarName\", e0);\n  }\n\n  function try_VarName()\n  {\n    try_EQName();\n  }\n\n  function parse_ParenthesizedExpr()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedExpr\", e0);\n    shift(34);                      // '('\n    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedExpr\", e0);\n  }\n\n  function try_ParenthesizedExpr()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      try_Expr();\n    }\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ContextItemExpr()\n  {\n    eventHandler.startNonterminal(\"ContextItemExpr\", e0);\n    shift(44);                      // '.'\n    eventHandler.endNonterminal(\"ContextItemExpr\", e0);\n  }\n\n  function try_ContextItemExpr()\n  {\n    shiftT(44);                     // '.'\n  }\n\n  function parse_OrderedExpr()\n  {\n    eventHandler.startNonterminal(\"OrderedExpr\", e0);\n    shift(202);                     // 'ordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"OrderedExpr\", e0);\n  }\n\n  function try_OrderedExpr()\n  {\n    shiftT(202);                    // 'ordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_UnorderedExpr()\n  {\n    eventHandler.startNonterminal(\"UnorderedExpr\", e0);\n    shift(256);                     // 'unordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"UnorderedExpr\", e0);\n  }\n\n  function try_UnorderedExpr()\n  {\n    shiftT(256);                    // 'unordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FunctionCall()\n  {\n    eventHandler.startNonterminal(\"FunctionCall\", e0);\n    parse_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    whitespace();\n    parse_ArgumentList();\n    eventHandler.endNonterminal(\"FunctionCall\", e0);\n  }\n\n  function try_FunctionCall()\n  {\n    try_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    try_ArgumentList();\n  }\n\n  function parse_Argument()\n  {\n    eventHandler.startNonterminal(\"Argument\", e0);\n    switch (l1)\n    {\n    case 64:                        // '?'\n      parse_ArgumentPlaceholder();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Argument\", e0);\n  }\n\n  function try_Argument()\n  {\n    switch (l1)\n    {\n    case 64:                        // '?'\n      try_ArgumentPlaceholder();\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_ArgumentPlaceholder()\n  {\n    eventHandler.startNonterminal(\"ArgumentPlaceholder\", e0);\n    shift(64);                      // '?'\n    eventHandler.endNonterminal(\"ArgumentPlaceholder\", e0);\n  }\n\n  function try_ArgumentPlaceholder()\n  {\n    shiftT(64);                     // '?'\n  }\n\n  function parse_Constructor()\n  {\n    eventHandler.startNonterminal(\"Constructor\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    default:\n      parse_ComputedConstructor();\n    }\n    eventHandler.endNonterminal(\"Constructor\", e0);\n  }\n\n  function try_Constructor()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      try_DirectConstructor();\n      break;\n    default:\n      try_ComputedConstructor();\n    }\n  }\n\n  function parse_DirectConstructor()\n  {\n    eventHandler.startNonterminal(\"DirectConstructor\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n      parse_DirElemConstructor();\n      break;\n    case 55:                        // '<!--'\n      parse_DirCommentConstructor();\n      break;\n    default:\n      parse_DirPIConstructor();\n    }\n    eventHandler.endNonterminal(\"DirectConstructor\", e0);\n  }\n\n  function try_DirectConstructor()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n      try_DirElemConstructor();\n      break;\n    case 55:                        // '<!--'\n      try_DirCommentConstructor();\n      break;\n    default:\n      try_DirPIConstructor();\n    }\n  }\n\n  function parse_DirElemConstructor()\n  {\n    eventHandler.startNonterminal(\"DirElemConstructor\", e0);\n    shift(54);                      // '<'\n    lookahead1(4);                  // QName\n    shift(20);                      // QName\n    parse_DirAttributeList();\n    switch (l1)\n    {\n    case 48:                        // '/>'\n      shift(48);                    // '/>'\n      break;\n    default:\n      shift(61);                    // '>'\n      for (;;)\n      {\n        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 56)               // '</'\n        {\n          break;\n        }\n        parse_DirElemContent();\n      }\n      shift(56);                    // '</'\n      lookahead1(4);                // QName\n      shift(20);                    // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shift(21);                  // S\n      }\n      lookahead1(8);                // '>'\n      shift(61);                    // '>'\n    }\n    eventHandler.endNonterminal(\"DirElemConstructor\", e0);\n  }\n\n  function try_DirElemConstructor()\n  {\n    shiftT(54);                     // '<'\n    lookahead1(4);                  // QName\n    shiftT(20);                     // QName\n    try_DirAttributeList();\n    switch (l1)\n    {\n    case 48:                        // '/>'\n      shiftT(48);                   // '/>'\n      break;\n    default:\n      shiftT(61);                   // '>'\n      for (;;)\n      {\n        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 56)               // '</'\n        {\n          break;\n        }\n        try_DirElemContent();\n      }\n      shiftT(56);                   // '</'\n      lookahead1(4);                // QName\n      shiftT(20);                   // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shiftT(21);                 // S\n      }\n      lookahead1(8);                // '>'\n      shiftT(61);                   // '>'\n    }\n  }\n\n  function parse_DirAttributeList()\n  {\n    eventHandler.startNonterminal(\"DirAttributeList\", e0);\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shift(21);                    // S\n      lookahead1(91);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shift(20);                  // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        lookahead1(7);              // '='\n        shift(60);                  // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        parse_DirAttributeValue();\n      }\n    }\n    eventHandler.endNonterminal(\"DirAttributeList\", e0);\n  }\n\n  function try_DirAttributeList()\n  {\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shiftT(21);                   // S\n      lookahead1(91);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shiftT(20);                 // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        lookahead1(7);              // '='\n        shiftT(60);                 // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        try_DirAttributeValue();\n      }\n    }\n  }\n\n  function parse_DirAttributeValue()\n  {\n    eventHandler.startNonterminal(\"DirAttributeValue\", e0);\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shift(28);                    // '\"'\n      for (;;)\n      {\n        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shift(13);                // EscapeQuot\n          break;\n        default:\n          parse_QuotAttrValueContent();\n        }\n      }\n      shift(28);                    // '\"'\n      break;\n    default:\n      shift(33);                    // \"'\"\n      for (;;)\n      {\n        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 33)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shift(14);                // EscapeApos\n          break;\n        default:\n          parse_AposAttrValueContent();\n        }\n      }\n      shift(33);                    // \"'\"\n    }\n    eventHandler.endNonterminal(\"DirAttributeValue\", e0);\n  }\n\n  function try_DirAttributeValue()\n  {\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shiftT(28);                   // '\"'\n      for (;;)\n      {\n        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shiftT(13);               // EscapeQuot\n          break;\n        default:\n          try_QuotAttrValueContent();\n        }\n      }\n      shiftT(28);                   // '\"'\n      break;\n    default:\n      shiftT(33);                   // \"'\"\n      for (;;)\n      {\n        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 33)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shiftT(14);               // EscapeApos\n          break;\n        default:\n          try_AposAttrValueContent();\n        }\n      }\n      shiftT(33);                   // \"'\"\n    }\n  }\n\n  function parse_QuotAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"QuotAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shift(16);                    // QuotAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"QuotAttrValueContent\", e0);\n  }\n\n  function try_QuotAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shiftT(16);                   // QuotAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_AposAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"AposAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shift(17);                    // AposAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"AposAttrValueContent\", e0);\n  }\n\n  function try_AposAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shiftT(17);                   // AposAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirElemContent()\n  {\n    eventHandler.startNonterminal(\"DirElemContent\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shift(4);                     // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shift(15);                    // ElementContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"DirElemContent\", e0);\n  }\n\n  function try_DirElemContent()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      try_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shiftT(4);                    // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shiftT(15);                   // ElementContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"DirCommentConstructor\", e0);\n    shift(55);                      // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shift(2);                       // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shift(43);                      // '-->'\n    eventHandler.endNonterminal(\"DirCommentConstructor\", e0);\n  }\n\n  function try_DirCommentConstructor()\n  {\n    shiftT(55);                     // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shiftT(2);                      // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shiftT(43);                     // '-->'\n  }\n\n  function parse_DirPIConstructor()\n  {\n    eventHandler.startNonterminal(\"DirPIConstructor\", e0);\n    shift(59);                      // '<?'\n    lookahead1(3);                  // PITarget\n    shift(18);                      // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(2);                // DirPIContents\n      shift(3);                     // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shift(65);                      // '?>'\n    eventHandler.endNonterminal(\"DirPIConstructor\", e0);\n  }\n\n  function try_DirPIConstructor()\n  {\n    shiftT(59);                     // '<?'\n    lookahead1(3);                  // PITarget\n    shiftT(18);                     // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(2);                // DirPIContents\n      shiftT(3);                    // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shiftT(65);                     // '?>'\n  }\n\n  function parse_ComputedConstructor()\n  {\n    eventHandler.startNonterminal(\"ComputedConstructor\", e0);\n    switch (l1)\n    {\n    case 119:                       // 'document'\n      parse_CompDocConstructor();\n      break;\n    case 121:                       // 'element'\n      parse_CompElemConstructor();\n      break;\n    case 82:                        // 'attribute'\n      parse_CompAttrConstructor();\n      break;\n    case 184:                       // 'namespace'\n      parse_CompNamespaceConstructor();\n      break;\n    case 244:                       // 'text'\n      parse_CompTextConstructor();\n      break;\n    case 96:                        // 'comment'\n      parse_CompCommentConstructor();\n      break;\n    default:\n      parse_CompPIConstructor();\n    }\n    eventHandler.endNonterminal(\"ComputedConstructor\", e0);\n  }\n\n  function try_ComputedConstructor()\n  {\n    switch (l1)\n    {\n    case 119:                       // 'document'\n      try_CompDocConstructor();\n      break;\n    case 121:                       // 'element'\n      try_CompElemConstructor();\n      break;\n    case 82:                        // 'attribute'\n      try_CompAttrConstructor();\n      break;\n    case 184:                       // 'namespace'\n      try_CompNamespaceConstructor();\n      break;\n    case 244:                       // 'text'\n      try_CompTextConstructor();\n      break;\n    case 96:                        // 'comment'\n      try_CompCommentConstructor();\n      break;\n    default:\n      try_CompPIConstructor();\n    }\n  }\n\n  function parse_CompElemConstructor()\n  {\n    eventHandler.startNonterminal(\"CompElemConstructor\", e0);\n    shift(121);                     // 'element'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_ContentExpr();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CompElemConstructor\", e0);\n  }\n\n  function try_CompElemConstructor()\n  {\n    shiftT(121);                    // 'element'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      try_ContentExpr();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_CompNamespaceConstructor()\n  {\n    eventHandler.startNonterminal(\"CompNamespaceConstructor\", e0);\n    shift(184);                     // 'namespace'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PrefixExpr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_Prefix();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_URIExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CompNamespaceConstructor\", e0);\n  }\n\n  function try_CompNamespaceConstructor()\n  {\n    shiftT(184);                    // 'namespace'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PrefixExpr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_Prefix();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_URIExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_Prefix()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  }\n\n  function try_Prefix()\n  {\n    try_NCName();\n  }\n\n  function parse_PrefixExpr()\n  {\n    eventHandler.startNonterminal(\"PrefixExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"PrefixExpr\", e0);\n  }\n\n  function try_PrefixExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_URIExpr()\n  {\n    eventHandler.startNonterminal(\"URIExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"URIExpr\", e0);\n  }\n\n  function try_URIExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_FunctionItemExpr()\n  {\n    eventHandler.startNonterminal(\"FunctionItemExpr\", e0);\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      parse_InlineFunctionExpr();\n      break;\n    default:\n      parse_NamedFunctionRef();\n    }\n    eventHandler.endNonterminal(\"FunctionItemExpr\", e0);\n  }\n\n  function try_FunctionItemExpr()\n  {\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      try_InlineFunctionExpr();\n      break;\n    default:\n      try_NamedFunctionRef();\n    }\n  }\n\n  function parse_NamedFunctionRef()\n  {\n    eventHandler.startNonterminal(\"NamedFunctionRef\", e0);\n    parse_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shift(29);                      // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shift(8);                       // IntegerLiteral\n    eventHandler.endNonterminal(\"NamedFunctionRef\", e0);\n  }\n\n  function try_NamedFunctionRef()\n  {\n    try_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shiftT(29);                     // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shiftT(8);                      // IntegerLiteral\n  }\n\n  function parse_InlineFunctionExpr()\n  {\n    eventHandler.startNonterminal(\"InlineFunctionExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(37);                      // ')'\n    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_FunctionBody();\n    eventHandler.endNonterminal(\"InlineFunctionExpr\", e0);\n  }\n\n  function try_InlineFunctionExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      try_ParamList();\n    }\n    shiftT(37);                     // ')'\n    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      shiftT(79);                   // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_FunctionBody();\n  }\n\n  function parse_SingleType()\n  {\n    eventHandler.startNonterminal(\"SingleType\", e0);\n    parse_SimpleTypeName();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 64)                   // '?'\n    {\n      shift(64);                    // '?'\n    }\n    eventHandler.endNonterminal(\"SingleType\", e0);\n  }\n\n  function try_SingleType()\n  {\n    try_SimpleTypeName();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 64)                   // '?'\n    {\n      shiftT(64);                   // '?'\n    }\n  }\n\n  function parse_TypeDeclaration()\n  {\n    eventHandler.startNonterminal(\"TypeDeclaration\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypeDeclaration\", e0);\n  }\n\n  function try_TypeDeclaration()\n  {\n    shiftT(79);                     // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_SequenceType()\n  {\n    eventHandler.startNonterminal(\"SequenceType\", e0);\n    switch (l1)\n    {\n    case 124:                       // 'empty-sequence'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17532:                     // 'empty-sequence' '('\n      shift(124);                   // 'empty-sequence'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(34);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(37);                    // ')'\n      break;\n    default:\n      parse_ItemType();\n      lookahead1W(238);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 39:                      // '*'\n      case 40:                      // '+'\n      case 64:                      // '?'\n        whitespace();\n        parse_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"SequenceType\", e0);\n  }\n\n  function try_SequenceType()\n  {\n    switch (l1)\n    {\n    case 124:                       // 'empty-sequence'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17532:                     // 'empty-sequence' '('\n      shiftT(124);                  // 'empty-sequence'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(34);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(37);                   // ')'\n      break;\n    default:\n      try_ItemType();\n      lookahead1W(238);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 39:                      // '*'\n      case 40:                      // '+'\n      case 64:                      // '?'\n        try_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n  }\n\n  function parse_OccurrenceIndicator()\n  {\n    eventHandler.startNonterminal(\"OccurrenceIndicator\", e0);\n    switch (l1)\n    {\n    case 64:                        // '?'\n      shift(64);                    // '?'\n      break;\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      shift(40);                    // '+'\n    }\n    eventHandler.endNonterminal(\"OccurrenceIndicator\", e0);\n  }\n\n  function try_OccurrenceIndicator()\n  {\n    switch (l1)\n    {\n    case 64:                        // '?'\n      shiftT(64);                   // '?'\n      break;\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      shiftT(40);                   // '+'\n    }\n  }\n\n  function parse_ItemType()\n  {\n    eventHandler.startNonterminal(\"ItemType\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'array'\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 145:                       // 'function'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 194:                       // 'object'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 244:                       // 'text'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      parse_KindTest();\n      break;\n    case 17573:                     // 'item' '('\n      shift(165);                   // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(34);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(37);                    // ')'\n      break;\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      parse_FunctionTest();\n      break;\n    case 34:                        // '('\n      parse_ParenthesizedItemType();\n      break;\n    case 17486:                     // 'array' '('\n    case 17575:                     // 'json-item' '('\n    case 17602:                     // 'object' '('\n      parse_JSONTest();\n      break;\n    case 17650:                     // 'structured-item' '('\n      parse_StructuredItemTest();\n      break;\n    default:\n      parse_AtomicOrUnionType();\n    }\n    eventHandler.endNonterminal(\"ItemType\", e0);\n  }\n\n  function try_ItemType()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'array'\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 145:                       // 'function'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 194:                       // 'object'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 244:                       // 'text'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      try_KindTest();\n      break;\n    case 17573:                     // 'item' '('\n      shiftT(165);                  // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(34);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(37);                   // ')'\n      break;\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      try_FunctionTest();\n      break;\n    case 34:                        // '('\n      try_ParenthesizedItemType();\n      break;\n    case 17486:                     // 'array' '('\n    case 17575:                     // 'json-item' '('\n    case 17602:                     // 'object' '('\n      try_JSONTest();\n      break;\n    case 17650:                     // 'structured-item' '('\n      try_StructuredItemTest();\n      break;\n    default:\n      try_AtomicOrUnionType();\n    }\n  }\n\n  function parse_JSONTest()\n  {\n    eventHandler.startNonterminal(\"JSONTest\", e0);\n    switch (l1)\n    {\n    case 167:                       // 'json-item'\n      parse_JSONItemTest();\n      break;\n    case 194:                       // 'object'\n      parse_JSONObjectTest();\n      break;\n    default:\n      parse_JSONArrayTest();\n    }\n    eventHandler.endNonterminal(\"JSONTest\", e0);\n  }\n\n  function try_JSONTest()\n  {\n    switch (l1)\n    {\n    case 167:                       // 'json-item'\n      try_JSONItemTest();\n      break;\n    case 194:                       // 'object'\n      try_JSONObjectTest();\n      break;\n    default:\n      try_JSONArrayTest();\n    }\n  }\n\n  function parse_StructuredItemTest()\n  {\n    eventHandler.startNonterminal(\"StructuredItemTest\", e0);\n    shift(242);                     // 'structured-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"StructuredItemTest\", e0);\n  }\n\n  function try_StructuredItemTest()\n  {\n    shiftT(242);                    // 'structured-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONItemTest()\n  {\n    eventHandler.startNonterminal(\"JSONItemTest\", e0);\n    shift(167);                     // 'json-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONItemTest\", e0);\n  }\n\n  function try_JSONItemTest()\n  {\n    shiftT(167);                    // 'json-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONObjectTest()\n  {\n    eventHandler.startNonterminal(\"JSONObjectTest\", e0);\n    shift(194);                     // 'object'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONObjectTest\", e0);\n  }\n\n  function try_JSONObjectTest()\n  {\n    shiftT(194);                    // 'object'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONArrayTest()\n  {\n    eventHandler.startNonterminal(\"JSONArrayTest\", e0);\n    shift(78);                      // 'array'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONArrayTest\", e0);\n  }\n\n  function try_JSONArrayTest()\n  {\n    shiftT(78);                     // 'array'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AtomicOrUnionType()\n  {\n    eventHandler.startNonterminal(\"AtomicOrUnionType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicOrUnionType\", e0);\n  }\n\n  function try_AtomicOrUnionType()\n  {\n    try_EQName();\n  }\n\n  function parse_KindTest()\n  {\n    eventHandler.startNonterminal(\"KindTest\", e0);\n    switch (l1)\n    {\n    case 120:                       // 'document-node'\n      parse_DocumentTest();\n      break;\n    case 121:                       // 'element'\n      parse_ElementTest();\n      break;\n    case 82:                        // 'attribute'\n      parse_AttributeTest();\n      break;\n    case 227:                       // 'schema-element'\n      parse_SchemaElementTest();\n      break;\n    case 226:                       // 'schema-attribute'\n      parse_SchemaAttributeTest();\n      break;\n    case 216:                       // 'processing-instruction'\n      parse_PITest();\n      break;\n    case 96:                        // 'comment'\n      parse_CommentTest();\n      break;\n    case 244:                       // 'text'\n      parse_TextTest();\n      break;\n    case 185:                       // 'namespace-node'\n      parse_NamespaceNodeTest();\n      break;\n    default:\n      parse_AnyKindTest();\n    }\n    eventHandler.endNonterminal(\"KindTest\", e0);\n  }\n\n  function try_KindTest()\n  {\n    switch (l1)\n    {\n    case 120:                       // 'document-node'\n      try_DocumentTest();\n      break;\n    case 121:                       // 'element'\n      try_ElementTest();\n      break;\n    case 82:                        // 'attribute'\n      try_AttributeTest();\n      break;\n    case 227:                       // 'schema-element'\n      try_SchemaElementTest();\n      break;\n    case 226:                       // 'schema-attribute'\n      try_SchemaAttributeTest();\n      break;\n    case 216:                       // 'processing-instruction'\n      try_PITest();\n      break;\n    case 96:                        // 'comment'\n      try_CommentTest();\n      break;\n    case 244:                       // 'text'\n      try_TextTest();\n      break;\n    case 185:                       // 'namespace-node'\n      try_NamespaceNodeTest();\n      break;\n    default:\n      try_AnyKindTest();\n    }\n  }\n\n  function parse_AnyKindTest()\n  {\n    eventHandler.startNonterminal(\"AnyKindTest\", e0);\n    shift(191);                     // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AnyKindTest\", e0);\n  }\n\n  function try_AnyKindTest()\n  {\n    shiftT(191);                    // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_DocumentTest()\n  {\n    eventHandler.startNonterminal(\"DocumentTest\", e0);\n    shift(120);                     // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 121:                     // 'element'\n        whitespace();\n        parse_ElementTest();\n        break;\n      default:\n        whitespace();\n        parse_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"DocumentTest\", e0);\n  }\n\n  function try_DocumentTest()\n  {\n    shiftT(120);                    // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 121:                     // 'element'\n        try_ElementTest();\n        break;\n      default:\n        try_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_TextTest()\n  {\n    eventHandler.startNonterminal(\"TextTest\", e0);\n    shift(244);                     // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"TextTest\", e0);\n  }\n\n  function try_TextTest()\n  {\n    shiftT(244);                    // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_CommentTest()\n  {\n    eventHandler.startNonterminal(\"CommentTest\", e0);\n    shift(96);                      // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"CommentTest\", e0);\n  }\n\n  function try_CommentTest()\n  {\n    shiftT(96);                     // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_NamespaceNodeTest()\n  {\n    eventHandler.startNonterminal(\"NamespaceNodeTest\", e0);\n    shift(185);                     // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"NamespaceNodeTest\", e0);\n  }\n\n  function try_NamespaceNodeTest()\n  {\n    shiftT(185);                    // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_PITest()\n  {\n    eventHandler.startNonterminal(\"PITest\", e0);\n    shift(216);                     // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(252);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shift(11);                  // StringLiteral\n        break;\n      default:\n        whitespace();\n        parse_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"PITest\", e0);\n  }\n\n  function try_PITest()\n  {\n    shiftT(216);                    // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(252);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shiftT(11);                 // StringLiteral\n        break;\n      default:\n        try_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttributeTest()\n  {\n    eventHandler.startNonterminal(\"AttributeTest\", e0);\n    shift(82);                      // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_AttribNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shift(41);                  // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AttributeTest\", e0);\n  }\n\n  function try_AttributeTest()\n  {\n    shiftT(82);                     // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      try_AttribNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shiftT(41);                 // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttribNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"AttribNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shift(38);                    // '*'\n      break;\n    default:\n      parse_AttributeName();\n    }\n    eventHandler.endNonterminal(\"AttribNameOrWildcard\", e0);\n  }\n\n  function try_AttribNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shiftT(38);                   // '*'\n      break;\n    default:\n      try_AttributeName();\n    }\n  }\n\n  function parse_SchemaAttributeTest()\n  {\n    eventHandler.startNonterminal(\"SchemaAttributeTest\", e0);\n    shift(226);                     // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"SchemaAttributeTest\", e0);\n  }\n\n  function try_SchemaAttributeTest()\n  {\n    shiftT(226);                    // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttributeDeclaration()\n  {\n    eventHandler.startNonterminal(\"AttributeDeclaration\", e0);\n    parse_AttributeName();\n    eventHandler.endNonterminal(\"AttributeDeclaration\", e0);\n  }\n\n  function try_AttributeDeclaration()\n  {\n    try_AttributeName();\n  }\n\n  function parse_ElementTest()\n  {\n    eventHandler.startNonterminal(\"ElementTest\", e0);\n    shift(121);                     // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_ElementNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shift(41);                  // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        lookahead1W(102);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 64)               // '?'\n        {\n          shift(64);                // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ElementTest\", e0);\n  }\n\n  function try_ElementTest()\n  {\n    shiftT(121);                    // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      try_ElementNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shiftT(41);                 // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        lookahead1W(102);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 64)               // '?'\n        {\n          shiftT(64);               // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ElementNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"ElementNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shift(38);                    // '*'\n      break;\n    default:\n      parse_ElementName();\n    }\n    eventHandler.endNonterminal(\"ElementNameOrWildcard\", e0);\n  }\n\n  function try_ElementNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shiftT(38);                   // '*'\n      break;\n    default:\n      try_ElementName();\n    }\n  }\n\n  function parse_SchemaElementTest()\n  {\n    eventHandler.startNonterminal(\"SchemaElementTest\", e0);\n    shift(227);                     // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"SchemaElementTest\", e0);\n  }\n\n  function try_SchemaElementTest()\n  {\n    shiftT(227);                    // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ElementDeclaration()\n  {\n    eventHandler.startNonterminal(\"ElementDeclaration\", e0);\n    parse_ElementName();\n    eventHandler.endNonterminal(\"ElementDeclaration\", e0);\n  }\n\n  function try_ElementDeclaration()\n  {\n    try_ElementName();\n  }\n\n  function parse_AttributeName()\n  {\n    eventHandler.startNonterminal(\"AttributeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AttributeName\", e0);\n  }\n\n  function try_AttributeName()\n  {\n    try_EQName();\n  }\n\n  function parse_ElementName()\n  {\n    eventHandler.startNonterminal(\"ElementName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"ElementName\", e0);\n  }\n\n  function try_ElementName()\n  {\n    try_EQName();\n  }\n\n  function parse_SimpleTypeName()\n  {\n    eventHandler.startNonterminal(\"SimpleTypeName\", e0);\n    parse_TypeName();\n    eventHandler.endNonterminal(\"SimpleTypeName\", e0);\n  }\n\n  function try_SimpleTypeName()\n  {\n    try_TypeName();\n  }\n\n  function parse_TypeName()\n  {\n    eventHandler.startNonterminal(\"TypeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"TypeName\", e0);\n  }\n\n  function try_TypeName()\n  {\n    try_EQName();\n  }\n\n  function parse_FunctionTest()\n  {\n    eventHandler.startNonterminal(\"FunctionTest\", e0);\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(5, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(5, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      whitespace();\n      parse_AnyFunctionTest();\n      break;\n    default:\n      whitespace();\n      parse_TypedFunctionTest();\n    }\n    eventHandler.endNonterminal(\"FunctionTest\", e0);\n  }\n\n  function try_FunctionTest()\n  {\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(5, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        memoize(5, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(5, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_AnyFunctionTest();\n      break;\n    case -3:\n      break;\n    default:\n      try_TypedFunctionTest();\n    }\n  }\n\n  function parse_AnyFunctionTest()\n  {\n    eventHandler.startNonterminal(\"AnyFunctionTest\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shift(38);                      // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AnyFunctionTest\", e0);\n  }\n\n  function try_AnyFunctionTest()\n  {\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shiftT(38);                     // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_TypedFunctionTest()\n  {\n    eventHandler.startNonterminal(\"TypedFunctionTest\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(262);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_SequenceType();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_SequenceType();\n      }\n    }\n    shift(37);                      // ')'\n    lookahead1W(30);                // S^WS | '(:' | 'as'\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypedFunctionTest\", e0);\n  }\n\n  function try_TypedFunctionTest()\n  {\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(262);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      try_SequenceType();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_SequenceType();\n      }\n    }\n    shiftT(37);                     // ')'\n    lookahead1W(30);                // S^WS | '(:' | 'as'\n    shiftT(79);                     // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_ParenthesizedItemType()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedItemType\", e0);\n    shift(34);                      // '('\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedItemType\", e0);\n  }\n\n  function try_ParenthesizedItemType()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_RevalidationDecl()\n  {\n    eventHandler.startNonterminal(\"RevalidationDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(72);                // S^WS | '(:' | 'revalidation'\n    shift(222);                     // 'revalidation'\n    lookahead1W(152);               // S^WS | '(:' | 'lax' | 'skip' | 'strict'\n    switch (l1)\n    {\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    default:\n      shift(233);                   // 'skip'\n    }\n    eventHandler.endNonterminal(\"RevalidationDecl\", e0);\n  }\n\n  function parse_InsertExprTargetChoice()\n  {\n    eventHandler.startNonterminal(\"InsertExprTargetChoice\", e0);\n    switch (l1)\n    {\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    default:\n      if (l1 == 79)                 // 'as'\n      {\n        shift(79);                  // 'as'\n        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 134:                   // 'first'\n          shift(134);               // 'first'\n          break;\n        default:\n          shift(170);               // 'last'\n        }\n      }\n      lookahead1W(54);              // S^WS | '(:' | 'into'\n      shift(163);                   // 'into'\n    }\n    eventHandler.endNonterminal(\"InsertExprTargetChoice\", e0);\n  }\n\n  function try_InsertExprTargetChoice()\n  {\n    switch (l1)\n    {\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    default:\n      if (l1 == 79)                 // 'as'\n      {\n        shiftT(79);                 // 'as'\n        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 134:                   // 'first'\n          shiftT(134);              // 'first'\n          break;\n        default:\n          shiftT(170);              // 'last'\n        }\n      }\n      lookahead1W(54);              // S^WS | '(:' | 'into'\n      shiftT(163);                  // 'into'\n    }\n  }\n\n  function parse_InsertExpr()\n  {\n    eventHandler.startNonterminal(\"InsertExpr\", e0);\n    shift(159);                     // 'insert'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    default:\n      shift(192);                   // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_SourceExpr();\n    whitespace();\n    parse_InsertExprTargetChoice();\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"InsertExpr\", e0);\n  }\n\n  function try_InsertExpr()\n  {\n    shiftT(159);                    // 'insert'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    default:\n      shiftT(192);                  // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_SourceExpr();\n    try_InsertExprTargetChoice();\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_DeleteExpr()\n  {\n    eventHandler.startNonterminal(\"DeleteExpr\", e0);\n    shift(110);                     // 'delete'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    default:\n      shift(192);                   // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"DeleteExpr\", e0);\n  }\n\n  function try_DeleteExpr()\n  {\n    shiftT(110);                    // 'delete'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    default:\n      shiftT(192);                  // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_ReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"ReplaceExpr\", e0);\n    shift(219);                     // 'replace'\n    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 261)                  // 'value'\n    {\n      shift(261);                   // 'value'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shift(196);                   // 'of'\n    }\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(270);                     // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReplaceExpr\", e0);\n  }\n\n  function try_ReplaceExpr()\n  {\n    shiftT(219);                    // 'replace'\n    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 261)                  // 'value'\n    {\n      shiftT(261);                  // 'value'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shiftT(196);                  // 'of'\n    }\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shiftT(191);                    // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n    shiftT(270);                    // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_RenameExpr()\n  {\n    eventHandler.startNonterminal(\"RenameExpr\", e0);\n    shift(218);                     // 'rename'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(79);                      // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_NewNameExpr();\n    eventHandler.endNonterminal(\"RenameExpr\", e0);\n  }\n\n  function try_RenameExpr()\n  {\n    shiftT(218);                    // 'rename'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shiftT(191);                    // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n    shiftT(79);                     // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_NewNameExpr();\n  }\n\n  function parse_SourceExpr()\n  {\n    eventHandler.startNonterminal(\"SourceExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SourceExpr\", e0);\n  }\n\n  function try_SourceExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TargetExpr()\n  {\n    eventHandler.startNonterminal(\"TargetExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TargetExpr\", e0);\n  }\n\n  function try_TargetExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_NewNameExpr()\n  {\n    eventHandler.startNonterminal(\"NewNameExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"NewNameExpr\", e0);\n  }\n\n  function try_NewNameExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TransformExpr()\n  {\n    eventHandler.startNonterminal(\"TransformExpr\", e0);\n    shift(103);                     // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_TransformSpec();\n    }\n    shift(181);                     // 'modify'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformExpr\", e0);\n  }\n\n  function try_TransformExpr()\n  {\n    shiftT(103);                    // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_TransformSpec();\n    }\n    shiftT(181);                    // 'modify'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TransformSpec()\n  {\n    eventHandler.startNonterminal(\"TransformSpec\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformSpec\", e0);\n  }\n\n  function try_TransformSpec()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_FTSelection()\n  {\n    eventHandler.startNonterminal(\"FTSelection\", e0);\n    parse_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 115                 // 'different'\n       && lk != 117                 // 'distance'\n       && lk != 127                 // 'entire'\n       && lk != 202                 // 'ordered'\n       && lk != 223                 // 'same'\n       && lk != 269                 // 'window'\n       && lk != 64593               // 'at' 'end'\n       && lk != 121425)             // 'at' 'start'\n      {\n        break;\n      }\n      whitespace();\n      parse_FTPosFilter();\n    }\n    eventHandler.endNonterminal(\"FTSelection\", e0);\n  }\n\n  function try_FTSelection()\n  {\n    try_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 115                 // 'different'\n       && lk != 117                 // 'distance'\n       && lk != 127                 // 'entire'\n       && lk != 202                 // 'ordered'\n       && lk != 223                 // 'same'\n       && lk != 269                 // 'window'\n       && lk != 64593               // 'at' 'end'\n       && lk != 121425)             // 'at' 'start'\n      {\n        break;\n      }\n      try_FTPosFilter();\n    }\n  }\n\n  function parse_FTWeight()\n  {\n    eventHandler.startNonterminal(\"FTWeight\", e0);\n    shift(264);                     // 'weight'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"FTWeight\", e0);\n  }\n\n  function try_FTWeight()\n  {\n    shiftT(264);                    // 'weight'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FTOr()\n  {\n    eventHandler.startNonterminal(\"FTOr\", e0);\n    parse_FTAnd();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftor'\n      {\n        break;\n      }\n      shift(144);                   // 'ftor'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTAnd();\n    }\n    eventHandler.endNonterminal(\"FTOr\", e0);\n  }\n\n  function try_FTOr()\n  {\n    try_FTAnd();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftor'\n      {\n        break;\n      }\n      shiftT(144);                  // 'ftor'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTAnd();\n    }\n  }\n\n  function parse_FTAnd()\n  {\n    eventHandler.startNonterminal(\"FTAnd\", e0);\n    parse_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 142)                // 'ftand'\n      {\n        break;\n      }\n      shift(142);                   // 'ftand'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTMildNot();\n    }\n    eventHandler.endNonterminal(\"FTAnd\", e0);\n  }\n\n  function try_FTAnd()\n  {\n    try_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 142)                // 'ftand'\n      {\n        break;\n      }\n      shiftT(142);                  // 'ftand'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTMildNot();\n    }\n  }\n\n  function parse_FTMildNot()\n  {\n    eventHandler.startNonterminal(\"FTMildNot\", e0);\n    parse_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 193)                // 'not'\n      {\n        break;\n      }\n      shift(193);                   // 'not'\n      lookahead1W(53);              // S^WS | '(:' | 'in'\n      shift(154);                   // 'in'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTUnaryNot();\n    }\n    eventHandler.endNonterminal(\"FTMildNot\", e0);\n  }\n\n  function try_FTMildNot()\n  {\n    try_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 193)                // 'not'\n      {\n        break;\n      }\n      shiftT(193);                  // 'not'\n      lookahead1W(53);              // S^WS | '(:' | 'in'\n      shiftT(154);                  // 'in'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTUnaryNot();\n    }\n  }\n\n  function parse_FTUnaryNot()\n  {\n    eventHandler.startNonterminal(\"FTUnaryNot\", e0);\n    if (l1 == 143)                  // 'ftnot'\n    {\n      shift(143);                   // 'ftnot'\n    }\n    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    whitespace();\n    parse_FTPrimaryWithOptions();\n    eventHandler.endNonterminal(\"FTUnaryNot\", e0);\n  }\n\n  function try_FTUnaryNot()\n  {\n    if (l1 == 143)                  // 'ftnot'\n    {\n      shiftT(143);                  // 'ftnot'\n    }\n    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    try_FTPrimaryWithOptions();\n  }\n\n  function parse_FTPrimaryWithOptions()\n  {\n    eventHandler.startNonterminal(\"FTPrimaryWithOptions\", e0);\n    parse_FTPrimary();\n    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 259)                  // 'using'\n    {\n      whitespace();\n      parse_FTMatchOptions();\n    }\n    if (l1 == 264)                  // 'weight'\n    {\n      whitespace();\n      parse_FTWeight();\n    }\n    eventHandler.endNonterminal(\"FTPrimaryWithOptions\", e0);\n  }\n\n  function try_FTPrimaryWithOptions()\n  {\n    try_FTPrimary();\n    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 259)                  // 'using'\n    {\n      try_FTMatchOptions();\n    }\n    if (l1 == 264)                  // 'weight'\n    {\n      try_FTWeight();\n    }\n  }\n\n  function parse_FTPrimary()\n  {\n    eventHandler.startNonterminal(\"FTPrimary\", e0);\n    switch (l1)\n    {\n    case 34:                        // '('\n      shift(34);                    // '('\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      shift(37);                    // ')'\n      break;\n    case 35:                        // '(#'\n      parse_FTExtensionSelection();\n      break;\n    default:\n      parse_FTWords();\n      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 195)                // 'occurs'\n      {\n        whitespace();\n        parse_FTTimes();\n      }\n    }\n    eventHandler.endNonterminal(\"FTPrimary\", e0);\n  }\n\n  function try_FTPrimary()\n  {\n    switch (l1)\n    {\n    case 34:                        // '('\n      shiftT(34);                   // '('\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      shiftT(37);                   // ')'\n      break;\n    case 35:                        // '(#'\n      try_FTExtensionSelection();\n      break;\n    default:\n      try_FTWords();\n      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 195)                // 'occurs'\n      {\n        try_FTTimes();\n      }\n    }\n  }\n\n  function parse_FTWords()\n  {\n    eventHandler.startNonterminal(\"FTWords\", e0);\n    parse_FTWordsValue();\n    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 71                    // 'all'\n     || l1 == 76                    // 'any'\n     || l1 == 210)                  // 'phrase'\n    {\n      whitespace();\n      parse_FTAnyallOption();\n    }\n    eventHandler.endNonterminal(\"FTWords\", e0);\n  }\n\n  function try_FTWords()\n  {\n    try_FTWordsValue();\n    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 71                    // 'all'\n     || l1 == 76                    // 'any'\n     || l1 == 210)                  // 'phrase'\n    {\n      try_FTAnyallOption();\n    }\n  }\n\n  function parse_FTWordsValue()\n  {\n    eventHandler.startNonterminal(\"FTWordsValue\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n    }\n    eventHandler.endNonterminal(\"FTWordsValue\", e0);\n  }\n\n  function try_FTWordsValue()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n    }\n  }\n\n  function parse_FTExtensionSelection()\n  {\n    eventHandler.startNonterminal(\"FTExtensionSelection\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(276);                     // '{'\n    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_FTSelection();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"FTExtensionSelection\", e0);\n  }\n\n  function try_FTExtensionSelection()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(276);                    // '{'\n    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      try_FTSelection();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FTAnyallOption()\n  {\n    eventHandler.startNonterminal(\"FTAnyallOption\", e0);\n    switch (l1)\n    {\n    case 76:                        // 'any'\n      shift(76);                    // 'any'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 272)                // 'word'\n      {\n        shift(272);                 // 'word'\n      }\n      break;\n    case 71:                        // 'all'\n      shift(71);                    // 'all'\n      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 273)                // 'words'\n      {\n        shift(273);                 // 'words'\n      }\n      break;\n    default:\n      shift(210);                   // 'phrase'\n    }\n    eventHandler.endNonterminal(\"FTAnyallOption\", e0);\n  }\n\n  function try_FTAnyallOption()\n  {\n    switch (l1)\n    {\n    case 76:                        // 'any'\n      shiftT(76);                   // 'any'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 272)                // 'word'\n      {\n        shiftT(272);                // 'word'\n      }\n      break;\n    case 71:                        // 'all'\n      shiftT(71);                   // 'all'\n      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 273)                // 'words'\n      {\n        shiftT(273);                // 'words'\n      }\n      break;\n    default:\n      shiftT(210);                  // 'phrase'\n    }\n  }\n\n  function parse_FTTimes()\n  {\n    eventHandler.startNonterminal(\"FTTimes\", e0);\n    shift(195);                     // 'occurs'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    shift(247);                     // 'times'\n    eventHandler.endNonterminal(\"FTTimes\", e0);\n  }\n\n  function try_FTTimes()\n  {\n    shiftT(195);                    // 'occurs'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    shiftT(247);                    // 'times'\n  }\n\n  function parse_FTRange()\n  {\n    eventHandler.startNonterminal(\"FTRange\", e0);\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shift(130);                   // 'exactly'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shift(173);                 // 'least'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n        break;\n      default:\n        shift(183);                 // 'most'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n      }\n      break;\n    default:\n      shift(140);                   // 'from'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      shift(248);                   // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"FTRange\", e0);\n  }\n\n  function try_FTRange()\n  {\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shiftT(130);                  // 'exactly'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shiftT(173);                // 'least'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_AdditiveExpr();\n        break;\n      default:\n        shiftT(183);                // 'most'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_AdditiveExpr();\n      }\n      break;\n    default:\n      shiftT(140);                  // 'from'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n      shiftT(248);                  // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_FTPosFilter()\n  {\n    eventHandler.startNonterminal(\"FTPosFilter\", e0);\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      parse_FTOrder();\n      break;\n    case 269:                       // 'window'\n      parse_FTWindow();\n      break;\n    case 117:                       // 'distance'\n      parse_FTDistance();\n      break;\n    case 115:                       // 'different'\n    case 223:                       // 'same'\n      parse_FTScope();\n      break;\n    default:\n      parse_FTContent();\n    }\n    eventHandler.endNonterminal(\"FTPosFilter\", e0);\n  }\n\n  function try_FTPosFilter()\n  {\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      try_FTOrder();\n      break;\n    case 269:                       // 'window'\n      try_FTWindow();\n      break;\n    case 117:                       // 'distance'\n      try_FTDistance();\n      break;\n    case 115:                       // 'different'\n    case 223:                       // 'same'\n      try_FTScope();\n      break;\n    default:\n      try_FTContent();\n    }\n  }\n\n  function parse_FTOrder()\n  {\n    eventHandler.startNonterminal(\"FTOrder\", e0);\n    shift(202);                     // 'ordered'\n    eventHandler.endNonterminal(\"FTOrder\", e0);\n  }\n\n  function try_FTOrder()\n  {\n    shiftT(202);                    // 'ordered'\n  }\n\n  function parse_FTWindow()\n  {\n    eventHandler.startNonterminal(\"FTWindow\", e0);\n    shift(269);                     // 'window'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_AdditiveExpr();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTWindow\", e0);\n  }\n\n  function try_FTWindow()\n  {\n    shiftT(269);                    // 'window'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_AdditiveExpr();\n    try_FTUnit();\n  }\n\n  function parse_FTDistance()\n  {\n    eventHandler.startNonterminal(\"FTDistance\", e0);\n    shift(117);                     // 'distance'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTDistance\", e0);\n  }\n\n  function try_FTDistance()\n  {\n    shiftT(117);                    // 'distance'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    try_FTUnit();\n  }\n\n  function parse_FTUnit()\n  {\n    eventHandler.startNonterminal(\"FTUnit\", e0);\n    switch (l1)\n    {\n    case 273:                       // 'words'\n      shift(273);                   // 'words'\n      break;\n    case 232:                       // 'sentences'\n      shift(232);                   // 'sentences'\n      break;\n    default:\n      shift(205);                   // 'paragraphs'\n    }\n    eventHandler.endNonterminal(\"FTUnit\", e0);\n  }\n\n  function try_FTUnit()\n  {\n    switch (l1)\n    {\n    case 273:                       // 'words'\n      shiftT(273);                  // 'words'\n      break;\n    case 232:                       // 'sentences'\n      shiftT(232);                  // 'sentences'\n      break;\n    default:\n      shiftT(205);                  // 'paragraphs'\n    }\n  }\n\n  function parse_FTScope()\n  {\n    eventHandler.startNonterminal(\"FTScope\", e0);\n    switch (l1)\n    {\n    case 223:                       // 'same'\n      shift(223);                   // 'same'\n      break;\n    default:\n      shift(115);                   // 'different'\n    }\n    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    whitespace();\n    parse_FTBigUnit();\n    eventHandler.endNonterminal(\"FTScope\", e0);\n  }\n\n  function try_FTScope()\n  {\n    switch (l1)\n    {\n    case 223:                       // 'same'\n      shiftT(223);                  // 'same'\n      break;\n    default:\n      shiftT(115);                  // 'different'\n    }\n    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    try_FTBigUnit();\n  }\n\n  function parse_FTBigUnit()\n  {\n    eventHandler.startNonterminal(\"FTBigUnit\", e0);\n    switch (l1)\n    {\n    case 231:                       // 'sentence'\n      shift(231);                   // 'sentence'\n      break;\n    default:\n      shift(204);                   // 'paragraph'\n    }\n    eventHandler.endNonterminal(\"FTBigUnit\", e0);\n  }\n\n  function try_FTBigUnit()\n  {\n    switch (l1)\n    {\n    case 231:                       // 'sentence'\n      shiftT(231);                  // 'sentence'\n      break;\n    default:\n      shiftT(204);                  // 'paragraph'\n    }\n  }\n\n  function parse_FTContent()\n  {\n    eventHandler.startNonterminal(\"FTContent\", e0);\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 237:                     // 'start'\n        shift(237);                 // 'start'\n        break;\n      default:\n        shift(126);                 // 'end'\n      }\n      break;\n    default:\n      shift(127);                   // 'entire'\n      lookahead1W(42);              // S^WS | '(:' | 'content'\n      shift(100);                   // 'content'\n    }\n    eventHandler.endNonterminal(\"FTContent\", e0);\n  }\n\n  function try_FTContent()\n  {\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 237:                     // 'start'\n        shiftT(237);                // 'start'\n        break;\n      default:\n        shiftT(126);                // 'end'\n      }\n      break;\n    default:\n      shiftT(127);                  // 'entire'\n      lookahead1W(42);              // S^WS | '(:' | 'content'\n      shiftT(100);                  // 'content'\n    }\n  }\n\n  function parse_FTMatchOptions()\n  {\n    eventHandler.startNonterminal(\"FTMatchOptions\", e0);\n    for (;;)\n    {\n      shift(259);                   // 'using'\n      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      whitespace();\n      parse_FTMatchOption();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 259)                // 'using'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"FTMatchOptions\", e0);\n  }\n\n  function try_FTMatchOptions()\n  {\n    for (;;)\n    {\n      shiftT(259);                  // 'using'\n      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      try_FTMatchOption();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 259)                // 'using'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_FTMatchOption()\n  {\n    eventHandler.startNonterminal(\"FTMatchOption\", e0);\n    switch (l1)\n    {\n    case 188:                       // 'no'\n      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 169:                       // 'language'\n      parse_FTLanguageOption();\n      break;\n    case 268:                       // 'wildcards'\n    case 137404:                    // 'no' 'wildcards'\n      parse_FTWildCardOption();\n      break;\n    case 246:                       // 'thesaurus'\n    case 126140:                    // 'no' 'thesaurus'\n      parse_FTThesaurusOption();\n      break;\n    case 238:                       // 'stemming'\n    case 122044:                    // 'no' 'stemming'\n      parse_FTStemOption();\n      break;\n    case 114:                       // 'diacritics'\n      parse_FTDiacriticsOption();\n      break;\n    case 239:                       // 'stop'\n    case 122556:                    // 'no' 'stop'\n      parse_FTStopWordOption();\n      break;\n    case 199:                       // 'option'\n      parse_FTExtensionOption();\n      break;\n    default:\n      parse_FTCaseOption();\n    }\n    eventHandler.endNonterminal(\"FTMatchOption\", e0);\n  }\n\n  function try_FTMatchOption()\n  {\n    switch (l1)\n    {\n    case 188:                       // 'no'\n      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 169:                       // 'language'\n      try_FTLanguageOption();\n      break;\n    case 268:                       // 'wildcards'\n    case 137404:                    // 'no' 'wildcards'\n      try_FTWildCardOption();\n      break;\n    case 246:                       // 'thesaurus'\n    case 126140:                    // 'no' 'thesaurus'\n      try_FTThesaurusOption();\n      break;\n    case 238:                       // 'stemming'\n    case 122044:                    // 'no' 'stemming'\n      try_FTStemOption();\n      break;\n    case 114:                       // 'diacritics'\n      try_FTDiacriticsOption();\n      break;\n    case 239:                       // 'stop'\n    case 122556:                    // 'no' 'stop'\n      try_FTStopWordOption();\n      break;\n    case 199:                       // 'option'\n      try_FTExtensionOption();\n      break;\n    default:\n      try_FTCaseOption();\n    }\n  }\n\n  function parse_FTCaseOption()\n  {\n    eventHandler.startNonterminal(\"FTCaseOption\", e0);\n    switch (l1)\n    {\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 158:                     // 'insensitive'\n        shift(158);                 // 'insensitive'\n        break;\n      default:\n        shift(230);                 // 'sensitive'\n      }\n      break;\n    case 177:                       // 'lowercase'\n      shift(177);                   // 'lowercase'\n      break;\n    default:\n      shift(258);                   // 'uppercase'\n    }\n    eventHandler.endNonterminal(\"FTCaseOption\", e0);\n  }\n\n  function try_FTCaseOption()\n  {\n    switch (l1)\n    {\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 158:                     // 'insensitive'\n        shiftT(158);                // 'insensitive'\n        break;\n      default:\n        shiftT(230);                // 'sensitive'\n      }\n      break;\n    case 177:                       // 'lowercase'\n      shiftT(177);                  // 'lowercase'\n      break;\n    default:\n      shiftT(258);                  // 'uppercase'\n    }\n  }\n\n  function parse_FTDiacriticsOption()\n  {\n    eventHandler.startNonterminal(\"FTDiacriticsOption\", e0);\n    shift(114);                     // 'diacritics'\n    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 158:                       // 'insensitive'\n      shift(158);                   // 'insensitive'\n      break;\n    default:\n      shift(230);                   // 'sensitive'\n    }\n    eventHandler.endNonterminal(\"FTDiacriticsOption\", e0);\n  }\n\n  function try_FTDiacriticsOption()\n  {\n    shiftT(114);                    // 'diacritics'\n    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 158:                       // 'insensitive'\n      shiftT(158);                  // 'insensitive'\n      break;\n    default:\n      shiftT(230);                  // 'sensitive'\n    }\n  }\n\n  function parse_FTStemOption()\n  {\n    eventHandler.startNonterminal(\"FTStemOption\", e0);\n    switch (l1)\n    {\n    case 238:                       // 'stemming'\n      shift(238);                   // 'stemming'\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(74);              // S^WS | '(:' | 'stemming'\n      shift(238);                   // 'stemming'\n    }\n    eventHandler.endNonterminal(\"FTStemOption\", e0);\n  }\n\n  function try_FTStemOption()\n  {\n    switch (l1)\n    {\n    case 238:                       // 'stemming'\n      shiftT(238);                  // 'stemming'\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(74);              // S^WS | '(:' | 'stemming'\n      shiftT(238);                  // 'stemming'\n    }\n  }\n\n  function parse_FTThesaurusOption()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusOption\", e0);\n    switch (l1)\n    {\n    case 246:                       // 'thesaurus'\n      shift(246);                   // 'thesaurus'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        whitespace();\n        parse_FTThesaurusID();\n        break;\n      case 109:                     // 'default'\n        shift(109);                 // 'default'\n        break;\n      default:\n        shift(34);                  // '('\n        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          whitespace();\n          parse_FTThesaurusID();\n          break;\n        default:\n          shift(109);               // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(101);         // S^WS | '(:' | ')' | ','\n          if (l1 != 41)             // ','\n          {\n            break;\n          }\n          shift(41);                // ','\n          lookahead1W(31);          // S^WS | '(:' | 'at'\n          whitespace();\n          parse_FTThesaurusID();\n        }\n        shift(37);                  // ')'\n      }\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'\n      shift(246);                   // 'thesaurus'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusOption\", e0);\n  }\n\n  function try_FTThesaurusOption()\n  {\n    switch (l1)\n    {\n    case 246:                       // 'thesaurus'\n      shiftT(246);                  // 'thesaurus'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        try_FTThesaurusID();\n        break;\n      case 109:                     // 'default'\n        shiftT(109);                // 'default'\n        break;\n      default:\n        shiftT(34);                 // '('\n        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          try_FTThesaurusID();\n          break;\n        default:\n          shiftT(109);              // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(101);         // S^WS | '(:' | ')' | ','\n          if (l1 != 41)             // ','\n          {\n            break;\n          }\n          shiftT(41);               // ','\n          lookahead1W(31);          // S^WS | '(:' | 'at'\n          try_FTThesaurusID();\n        }\n        shiftT(37);                 // ')'\n      }\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'\n      shiftT(246);                  // 'thesaurus'\n    }\n  }\n\n  function parse_FTThesaurusID()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusID\", e0);\n    shift(81);                      // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 217)                  // 'relationship'\n    {\n      shift(217);                   // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 130                   // 'exactly'\n     || lk == 140                   // 'from'\n     || lk == 88657                 // 'at' 'least'\n     || lk == 93777)                // 'at' 'most'\n    {\n      whitespace();\n      parse_FTLiteralRange();\n      lookahead1W(58);              // S^WS | '(:' | 'levels'\n      shift(175);                   // 'levels'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusID\", e0);\n  }\n\n  function try_FTThesaurusID()\n  {\n    shiftT(81);                     // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 217)                  // 'relationship'\n    {\n      shiftT(217);                  // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n    }\n    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 130                   // 'exactly'\n     || lk == 140                   // 'from'\n     || lk == 88657                 // 'at' 'least'\n     || lk == 93777)                // 'at' 'most'\n    {\n      try_FTLiteralRange();\n      lookahead1W(58);              // S^WS | '(:' | 'levels'\n      shiftT(175);                  // 'levels'\n    }\n  }\n\n  function parse_FTLiteralRange()\n  {\n    eventHandler.startNonterminal(\"FTLiteralRange\", e0);\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shift(130);                   // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shift(173);                 // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n        break;\n      default:\n        shift(183);                 // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n      }\n      break;\n    default:\n      shift(140);                   // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      lookahead1W(79);              // S^WS | '(:' | 'to'\n      shift(248);                   // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n    }\n    eventHandler.endNonterminal(\"FTLiteralRange\", e0);\n  }\n\n  function try_FTLiteralRange()\n  {\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shiftT(130);                  // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shiftT(173);                // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n        break;\n      default:\n        shiftT(183);                // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n      }\n      break;\n    default:\n      shiftT(140);                  // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      lookahead1W(79);              // S^WS | '(:' | 'to'\n      shiftT(248);                  // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n    }\n  }\n\n  function parse_FTStopWordOption()\n  {\n    eventHandler.startNonterminal(\"FTStopWordOption\", e0);\n    switch (l1)\n    {\n    case 239:                       // 'stop'\n      shift(239);                   // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shift(273);                   // 'words'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 109:                     // 'default'\n        shift(109);                 // 'default'\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        whitespace();\n        parse_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(75);              // S^WS | '(:' | 'stop'\n      shift(239);                   // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shift(273);                   // 'words'\n    }\n    eventHandler.endNonterminal(\"FTStopWordOption\", e0);\n  }\n\n  function try_FTStopWordOption()\n  {\n    switch (l1)\n    {\n    case 239:                       // 'stop'\n      shiftT(239);                  // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shiftT(273);                  // 'words'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 109:                     // 'default'\n        shiftT(109);                // 'default'\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        try_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(75);              // S^WS | '(:' | 'stop'\n      shiftT(239);                  // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shiftT(273);                  // 'words'\n    }\n  }\n\n  function parse_FTStopWords()\n  {\n    eventHandler.startNonterminal(\"FTStopWords\", e0);\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      break;\n    default:\n      shift(34);                    // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n      shift(37);                    // ')'\n    }\n    eventHandler.endNonterminal(\"FTStopWords\", e0);\n  }\n\n  function try_FTStopWords()\n  {\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n      break;\n    default:\n      shiftT(34);                   // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shiftT(11);                 // StringLiteral\n      }\n      shiftT(37);                   // ')'\n    }\n  }\n\n  function parse_FTStopWordsInclExcl()\n  {\n    eventHandler.startNonterminal(\"FTStopWordsInclExcl\", e0);\n    switch (l1)\n    {\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    default:\n      shift(131);                   // 'except'\n    }\n    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'\n    whitespace();\n    parse_FTStopWords();\n    eventHandler.endNonterminal(\"FTStopWordsInclExcl\", e0);\n  }\n\n  function try_FTStopWordsInclExcl()\n  {\n    switch (l1)\n    {\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    default:\n      shiftT(131);                  // 'except'\n    }\n    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'\n    try_FTStopWords();\n  }\n\n  function parse_FTLanguageOption()\n  {\n    eventHandler.startNonterminal(\"FTLanguageOption\", e0);\n    shift(169);                     // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTLanguageOption\", e0);\n  }\n\n  function try_FTLanguageOption()\n  {\n    shiftT(169);                    // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTWildCardOption()\n  {\n    eventHandler.startNonterminal(\"FTWildCardOption\", e0);\n    switch (l1)\n    {\n    case 268:                       // 'wildcards'\n      shift(268);                   // 'wildcards'\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(84);              // S^WS | '(:' | 'wildcards'\n      shift(268);                   // 'wildcards'\n    }\n    eventHandler.endNonterminal(\"FTWildCardOption\", e0);\n  }\n\n  function try_FTWildCardOption()\n  {\n    switch (l1)\n    {\n    case 268:                       // 'wildcards'\n      shiftT(268);                  // 'wildcards'\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(84);              // S^WS | '(:' | 'wildcards'\n      shiftT(268);                  // 'wildcards'\n    }\n  }\n\n  function parse_FTExtensionOption()\n  {\n    eventHandler.startNonterminal(\"FTExtensionOption\", e0);\n    shift(199);                     // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTExtensionOption\", e0);\n  }\n\n  function try_FTExtensionOption()\n  {\n    shiftT(199);                    // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTIgnoreOption()\n  {\n    eventHandler.startNonterminal(\"FTIgnoreOption\", e0);\n    shift(271);                     // 'without'\n    lookahead1W(42);                // S^WS | '(:' | 'content'\n    shift(100);                     // 'content'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_UnionExpr();\n    eventHandler.endNonterminal(\"FTIgnoreOption\", e0);\n  }\n\n  function try_FTIgnoreOption()\n  {\n    shiftT(271);                    // 'without'\n    lookahead1W(42);                // S^WS | '(:' | 'content'\n    shiftT(100);                    // 'content'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_UnionExpr();\n  }\n\n  function parse_CollectionDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionDecl\", e0);\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(107);               // S^WS | '(:' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_CollectionTypeDecl();\n    }\n    eventHandler.endNonterminal(\"CollectionDecl\", e0);\n  }\n\n  function parse_CollectionTypeDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionTypeDecl\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(156);               // S^WS | '(:' | '*' | '+' | ';' | '?'\n    if (l1 != 53)                   // ';'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"CollectionTypeDecl\", e0);\n  }\n\n  function parse_IndexName()\n  {\n    eventHandler.startNonterminal(\"IndexName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"IndexName\", e0);\n  }\n\n  function parse_IndexDomainExpr()\n  {\n    eventHandler.startNonterminal(\"IndexDomainExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexDomainExpr\", e0);\n  }\n\n  function parse_IndexKeySpec()\n  {\n    eventHandler.startNonterminal(\"IndexKeySpec\", e0);\n    parse_IndexKeyExpr();\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_IndexKeyTypeDecl();\n    }\n    lookahead1W(146);               // S^WS | '(:' | ',' | ';' | 'collation'\n    if (l1 == 94)                   // 'collation'\n    {\n      whitespace();\n      parse_IndexKeyCollation();\n    }\n    eventHandler.endNonterminal(\"IndexKeySpec\", e0);\n  }\n\n  function parse_IndexKeyExpr()\n  {\n    eventHandler.startNonterminal(\"IndexKeyExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexKeyExpr\", e0);\n  }\n\n  function parse_IndexKeyTypeDecl()\n  {\n    eventHandler.startNonterminal(\"IndexKeyTypeDecl\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AtomicType();\n    lookahead1W(169);               // S^WS | '(:' | '*' | '+' | ',' | ';' | '?' | 'collation'\n    if (l1 == 39                    // '*'\n     || l1 == 40                    // '+'\n     || l1 == 64)                   // '?'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"IndexKeyTypeDecl\", e0);\n  }\n\n  function parse_AtomicType()\n  {\n    eventHandler.startNonterminal(\"AtomicType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicType\", e0);\n  }\n\n  function parse_IndexKeyCollation()\n  {\n    eventHandler.startNonterminal(\"IndexKeyCollation\", e0);\n    shift(94);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"IndexKeyCollation\", e0);\n  }\n\n  function parse_IndexDecl()\n  {\n    eventHandler.startNonterminal(\"IndexDecl\", e0);\n    shift(155);                     // 'index'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_IndexName();\n    lookahead1W(65);                // S^WS | '(:' | 'on'\n    shift(197);                     // 'on'\n    lookahead1W(63);                // S^WS | '(:' | 'nodes'\n    shift(192);                     // 'nodes'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_IndexDomainExpr();\n    shift(87);                      // 'by'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_IndexKeySpec();\n    for (;;)\n    {\n      lookahead1W(103);             // S^WS | '(:' | ',' | ';'\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_IndexKeySpec();\n    }\n    eventHandler.endNonterminal(\"IndexDecl\", e0);\n  }\n\n  function parse_ICDecl()\n  {\n    eventHandler.startNonterminal(\"ICDecl\", e0);\n    shift(161);                     // 'integrity'\n    lookahead1W(40);                // S^WS | '(:' | 'constraint'\n    shift(97);                      // 'constraint'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(120);               // S^WS | '(:' | 'foreign' | 'on'\n    switch (l1)\n    {\n    case 197:                       // 'on'\n      whitespace();\n      parse_ICCollection();\n      break;\n    default:\n      whitespace();\n      parse_ICForeignKey();\n    }\n    eventHandler.endNonterminal(\"ICDecl\", e0);\n  }\n\n  function parse_ICCollection()\n  {\n    eventHandler.startNonterminal(\"ICCollection\", e0);\n    shift(197);                     // 'on'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(140);               // S^WS | '$' | '(:' | 'foreach' | 'node'\n    switch (l1)\n    {\n    case 31:                        // '$'\n      whitespace();\n      parse_ICCollSequence();\n      break;\n    case 191:                       // 'node'\n      whitespace();\n      parse_ICCollSequenceUnique();\n      break;\n    default:\n      whitespace();\n      parse_ICCollNode();\n    }\n    eventHandler.endNonterminal(\"ICCollection\", e0);\n  }\n\n  function parse_ICCollSequence()\n  {\n    eventHandler.startNonterminal(\"ICCollSequence\", e0);\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollSequence\", e0);\n  }\n\n  function parse_ICCollSequenceUnique()\n  {\n    eventHandler.startNonterminal(\"ICCollSequenceUnique\", e0);\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(80);                // S^WS | '(:' | 'unique'\n    shift(255);                     // 'unique'\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICCollSequenceUnique\", e0);\n  }\n\n  function parse_ICCollNode()\n  {\n    eventHandler.startNonterminal(\"ICCollNode\", e0);\n    shift(138);                     // 'foreach'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollNode\", e0);\n  }\n\n  function parse_ICForeignKey()\n  {\n    eventHandler.startNonterminal(\"ICForeignKey\", e0);\n    shift(139);                     // 'foreign'\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(51);                // S^WS | '(:' | 'from'\n    whitespace();\n    parse_ICForeignKeySource();\n    whitespace();\n    parse_ICForeignKeyTarget();\n    eventHandler.endNonterminal(\"ICForeignKey\", e0);\n  }\n\n  function parse_ICForeignKeySource()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeySource\", e0);\n    shift(140);                     // 'from'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeySource\", e0);\n  }\n\n  function parse_ICForeignKeyTarget()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyTarget\", e0);\n    shift(248);                     // 'to'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeyTarget\", e0);\n  }\n\n  function parse_ICForeignKeyValues()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyValues\", e0);\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICForeignKeyValues\", e0);\n  }\n\n  function try_Comment()\n  {\n    shiftT(36);                     // '(:'\n    for (;;)\n    {\n      lookahead1(89);               // CommentContents | '(:' | ':)'\n      if (l1 == 50)                 // ':)'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 24:                      // CommentContents\n        shiftT(24);                 // CommentContents\n        break;\n      default:\n        try_Comment();\n      }\n    }\n    shiftT(50);                     // ':)'\n  }\n\n  function try_Whitespace()\n  {\n    switch (l1)\n    {\n    case 22:                        // S^WS\n      shiftT(22);                   // S^WS\n      break;\n    default:\n      try_Comment();\n    }\n  }\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    lookahead1(249);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      break;\n    case 96:                        // 'comment'\n      shift(96);                    // 'comment'\n      break;\n    case 120:                       // 'document-node'\n      shift(120);                   // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shift(124);                   // 'empty-sequence'\n      break;\n    case 145:                       // 'function'\n      shift(145);                   // 'function'\n      break;\n    case 152:                       // 'if'\n      shift(152);                   // 'if'\n      break;\n    case 165:                       // 'item'\n      shift(165);                   // 'item'\n      break;\n    case 185:                       // 'namespace-node'\n      shift(185);                   // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    case 216:                       // 'processing-instruction'\n      shift(216);                   // 'processing-instruction'\n      break;\n    case 226:                       // 'schema-attribute'\n      shift(226);                   // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shift(227);                   // 'schema-element'\n      break;\n    case 243:                       // 'switch'\n      shift(243);                   // 'switch'\n      break;\n    case 244:                       // 'text'\n      shift(244);                   // 'text'\n      break;\n    case 253:                       // 'typeswitch'\n      shift(253);                   // 'typeswitch'\n      break;\n    case 78:                        // 'array'\n      shift(78);                    // 'array'\n      break;\n    case 167:                       // 'json-item'\n      shift(167);                   // 'json-item'\n      break;\n    case 242:                       // 'structured-item'\n      shift(242);                   // 'structured-item'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function try_EQName()\n  {\n    lookahead1(249);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      break;\n    case 96:                        // 'comment'\n      shiftT(96);                   // 'comment'\n      break;\n    case 120:                       // 'document-node'\n      shiftT(120);                  // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shiftT(124);                  // 'empty-sequence'\n      break;\n    case 145:                       // 'function'\n      shiftT(145);                  // 'function'\n      break;\n    case 152:                       // 'if'\n      shiftT(152);                  // 'if'\n      break;\n    case 165:                       // 'item'\n      shiftT(165);                  // 'item'\n      break;\n    case 185:                       // 'namespace-node'\n      shiftT(185);                  // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    case 216:                       // 'processing-instruction'\n      shiftT(216);                  // 'processing-instruction'\n      break;\n    case 226:                       // 'schema-attribute'\n      shiftT(226);                  // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shiftT(227);                  // 'schema-element'\n      break;\n    case 243:                       // 'switch'\n      shiftT(243);                  // 'switch'\n      break;\n    case 244:                       // 'text'\n      shiftT(244);                  // 'text'\n      break;\n    case 253:                       // 'typeswitch'\n      shiftT(253);                  // 'typeswitch'\n      break;\n    case 78:                        // 'array'\n      shiftT(78);                   // 'array'\n      break;\n    case 167:                       // 'json-item'\n      shiftT(167);                  // 'json-item'\n      break;\n    case 242:                       // 'structured-item'\n      shiftT(242);                  // 'structured-item'\n      break;\n    default:\n      try_FunctionName();\n    }\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shift(6);                     // EQName^Token\n      break;\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shift(74);                    // 'ancestor-or-self'\n      break;\n    case 75:                        // 'and'\n      shift(75);                    // 'and'\n      break;\n    case 79:                        // 'as'\n      shift(79);                    // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shift(80);                    // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      break;\n    case 89:                        // 'cast'\n      shift(89);                    // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shift(90);                    // 'castable'\n      break;\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      break;\n    case 94:                        // 'collation'\n      shift(94);                    // 'collation'\n      break;\n    case 103:                       // 'copy'\n      shift(103);                   // 'copy'\n      break;\n    case 105:                       // 'count'\n      shift(105);                   // 'count'\n      break;\n    case 108:                       // 'declare'\n      shift(108);                   // 'declare'\n      break;\n    case 109:                       // 'default'\n      shift(109);                   // 'default'\n      break;\n    case 110:                       // 'delete'\n      shift(110);                   // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      break;\n    case 113:                       // 'descending'\n      shift(113);                   // 'descending'\n      break;\n    case 118:                       // 'div'\n      shift(118);                   // 'div'\n      break;\n    case 119:                       // 'document'\n      shift(119);                   // 'document'\n      break;\n    case 122:                       // 'else'\n      shift(122);                   // 'else'\n      break;\n    case 123:                       // 'empty'\n      shift(123);                   // 'empty'\n      break;\n    case 126:                       // 'end'\n      shift(126);                   // 'end'\n      break;\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 129:                       // 'every'\n      shift(129);                   // 'every'\n      break;\n    case 131:                       // 'except'\n      shift(131);                   // 'except'\n      break;\n    case 134:                       // 'first'\n      shift(134);                   // 'first'\n      break;\n    case 135:                       // 'following'\n      shift(135);                   // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      break;\n    case 137:                       // 'for'\n      shift(137);                   // 'for'\n      break;\n    case 146:                       // 'ge'\n      shift(146);                   // 'ge'\n      break;\n    case 148:                       // 'group'\n      shift(148);                   // 'group'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shift(151);                   // 'idiv'\n      break;\n    case 153:                       // 'import'\n      shift(153);                   // 'import'\n      break;\n    case 159:                       // 'insert'\n      shift(159);                   // 'insert'\n      break;\n    case 160:                       // 'instance'\n      shift(160);                   // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shift(162);                   // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shift(163);                   // 'into'\n      break;\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 170:                       // 'last'\n      shift(170);                   // 'last'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 174:                       // 'let'\n      shift(174);                   // 'let'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shift(180);                   // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shift(181);                   // 'modify'\n      break;\n    case 182:                       // 'module'\n      shift(182);                   // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 198:                       // 'only'\n      shift(198);                   // 'only'\n      break;\n    case 200:                       // 'or'\n      shift(200);                   // 'or'\n      break;\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      break;\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      break;\n    case 218:                       // 'rename'\n      shift(218);                   // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shift(219);                   // 'replace'\n      break;\n    case 220:                       // 'return'\n      shift(220);                   // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shift(224);                   // 'satisfies'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      break;\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    case 236:                       // 'stable'\n      shift(236);                   // 'stable'\n      break;\n    case 237:                       // 'start'\n      shift(237);                   // 'start'\n      break;\n    case 248:                       // 'to'\n      shift(248);                   // 'to'\n      break;\n    case 249:                       // 'treat'\n      shift(249);                   // 'treat'\n      break;\n    case 250:                       // 'try'\n      shift(250);                   // 'try'\n      break;\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    case 256:                       // 'unordered'\n      shift(256);                   // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shift(260);                   // 'validate'\n      break;\n    case 266:                       // 'where'\n      shift(266);                   // 'where'\n      break;\n    case 270:                       // 'with'\n      shift(270);                   // 'with'\n      break;\n    case 274:                       // 'xquery'\n      shift(274);                   // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shift(72);                    // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shift(83);                    // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shift(85);                    // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shift(86);                    // 'break'\n      break;\n    case 91:                        // 'catch'\n      shift(91);                    // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shift(98);                    // 'construction'\n      break;\n    case 101:                       // 'context'\n      shift(101);                   // 'context'\n      break;\n    case 102:                       // 'continue'\n      shift(102);                   // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shift(104);                   // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shift(132);                   // 'exit'\n      break;\n    case 133:                       // 'external'\n      shift(133);                   // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shift(141);                   // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shift(154);                   // 'in'\n      break;\n    case 155:                       // 'index'\n      shift(155);                   // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shift(161);                   // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shift(192);                   // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shift(199);                   // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shift(203);                   // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shift(222);                   // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shift(225);                   // 'schema'\n      break;\n    case 228:                       // 'score'\n      shift(228);                   // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shift(234);                   // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shift(251);                   // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shift(252);                   // 'type'\n      break;\n    case 257:                       // 'updating'\n      shift(257);                   // 'updating'\n      break;\n    case 261:                       // 'value'\n      shift(261);                   // 'value'\n      break;\n    case 262:                       // 'variable'\n      shift(262);                   // 'variable'\n      break;\n    case 263:                       // 'version'\n      shift(263);                   // 'version'\n      break;\n    case 267:                       // 'while'\n      shift(267);                   // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shift(97);                    // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shift(176);                   // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shift(221);                   // 'returning'\n      break;\n    case 77:                        // 'append'\n      shift(77);                    // 'append'\n      break;\n    case 166:                       // 'json'\n      shift(166);                   // 'json'\n      break;\n    default:\n      shift(194);                   // 'object'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function try_FunctionName()\n  {\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shiftT(6);                    // EQName^Token\n      break;\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shiftT(74);                   // 'ancestor-or-self'\n      break;\n    case 75:                        // 'and'\n      shiftT(75);                   // 'and'\n      break;\n    case 79:                        // 'as'\n      shiftT(79);                   // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shiftT(80);                   // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      break;\n    case 89:                        // 'cast'\n      shiftT(89);                   // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shiftT(90);                   // 'castable'\n      break;\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      break;\n    case 94:                        // 'collation'\n      shiftT(94);                   // 'collation'\n      break;\n    case 103:                       // 'copy'\n      shiftT(103);                  // 'copy'\n      break;\n    case 105:                       // 'count'\n      shiftT(105);                  // 'count'\n      break;\n    case 108:                       // 'declare'\n      shiftT(108);                  // 'declare'\n      break;\n    case 109:                       // 'default'\n      shiftT(109);                  // 'default'\n      break;\n    case 110:                       // 'delete'\n      shiftT(110);                  // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      break;\n    case 113:                       // 'descending'\n      shiftT(113);                  // 'descending'\n      break;\n    case 118:                       // 'div'\n      shiftT(118);                  // 'div'\n      break;\n    case 119:                       // 'document'\n      shiftT(119);                  // 'document'\n      break;\n    case 122:                       // 'else'\n      shiftT(122);                  // 'else'\n      break;\n    case 123:                       // 'empty'\n      shiftT(123);                  // 'empty'\n      break;\n    case 126:                       // 'end'\n      shiftT(126);                  // 'end'\n      break;\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 129:                       // 'every'\n      shiftT(129);                  // 'every'\n      break;\n    case 131:                       // 'except'\n      shiftT(131);                  // 'except'\n      break;\n    case 134:                       // 'first'\n      shiftT(134);                  // 'first'\n      break;\n    case 135:                       // 'following'\n      shiftT(135);                  // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      break;\n    case 137:                       // 'for'\n      shiftT(137);                  // 'for'\n      break;\n    case 146:                       // 'ge'\n      shiftT(146);                  // 'ge'\n      break;\n    case 148:                       // 'group'\n      shiftT(148);                  // 'group'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shiftT(151);                  // 'idiv'\n      break;\n    case 153:                       // 'import'\n      shiftT(153);                  // 'import'\n      break;\n    case 159:                       // 'insert'\n      shiftT(159);                  // 'insert'\n      break;\n    case 160:                       // 'instance'\n      shiftT(160);                  // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shiftT(162);                  // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shiftT(163);                  // 'into'\n      break;\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 170:                       // 'last'\n      shiftT(170);                  // 'last'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 174:                       // 'let'\n      shiftT(174);                  // 'let'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shiftT(180);                  // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shiftT(181);                  // 'modify'\n      break;\n    case 182:                       // 'module'\n      shiftT(182);                  // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shiftT(184);                  // 'namespace'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 198:                       // 'only'\n      shiftT(198);                  // 'only'\n      break;\n    case 200:                       // 'or'\n      shiftT(200);                  // 'or'\n      break;\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      break;\n    case 202:                       // 'ordered'\n      shiftT(202);                  // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      break;\n    case 218:                       // 'rename'\n      shiftT(218);                  // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shiftT(219);                  // 'replace'\n      break;\n    case 220:                       // 'return'\n      shiftT(220);                  // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shiftT(224);                  // 'satisfies'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      break;\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    case 236:                       // 'stable'\n      shiftT(236);                  // 'stable'\n      break;\n    case 237:                       // 'start'\n      shiftT(237);                  // 'start'\n      break;\n    case 248:                       // 'to'\n      shiftT(248);                  // 'to'\n      break;\n    case 249:                       // 'treat'\n      shiftT(249);                  // 'treat'\n      break;\n    case 250:                       // 'try'\n      shiftT(250);                  // 'try'\n      break;\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    case 256:                       // 'unordered'\n      shiftT(256);                  // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shiftT(260);                  // 'validate'\n      break;\n    case 266:                       // 'where'\n      shiftT(266);                  // 'where'\n      break;\n    case 270:                       // 'with'\n      shiftT(270);                  // 'with'\n      break;\n    case 274:                       // 'xquery'\n      shiftT(274);                  // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shiftT(72);                   // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shiftT(83);                   // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shiftT(85);                   // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shiftT(86);                   // 'break'\n      break;\n    case 91:                        // 'catch'\n      shiftT(91);                   // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shiftT(98);                   // 'construction'\n      break;\n    case 101:                       // 'context'\n      shiftT(101);                  // 'context'\n      break;\n    case 102:                       // 'continue'\n      shiftT(102);                  // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shiftT(104);                  // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shiftT(106);                  // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shiftT(125);                  // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shiftT(132);                  // 'exit'\n      break;\n    case 133:                       // 'external'\n      shiftT(133);                  // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shiftT(141);                  // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shiftT(154);                  // 'in'\n      break;\n    case 155:                       // 'index'\n      shiftT(155);                  // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shiftT(161);                  // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shiftT(192);                  // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shiftT(199);                  // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shiftT(203);                  // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shiftT(222);                  // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shiftT(225);                  // 'schema'\n      break;\n    case 228:                       // 'score'\n      shiftT(228);                  // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shiftT(234);                  // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shiftT(240);                  // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shiftT(251);                  // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shiftT(252);                  // 'type'\n      break;\n    case 257:                       // 'updating'\n      shiftT(257);                  // 'updating'\n      break;\n    case 261:                       // 'value'\n      shiftT(261);                  // 'value'\n      break;\n    case 262:                       // 'variable'\n      shiftT(262);                  // 'variable'\n      break;\n    case 263:                       // 'version'\n      shiftT(263);                  // 'version'\n      break;\n    case 267:                       // 'while'\n      shiftT(267);                  // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shiftT(97);                   // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shiftT(176);                  // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shiftT(221);                  // 'returning'\n      break;\n    case 77:                        // 'append'\n      shiftT(77);                   // 'append'\n      break;\n    case 166:                       // 'json'\n      shiftT(166);                  // 'json'\n      break;\n    default:\n      shiftT(194);                  // 'object'\n    }\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shift(19);                    // NCName^Token\n      break;\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 75:                        // 'and'\n      shift(75);                    // 'and'\n      break;\n    case 79:                        // 'as'\n      shift(79);                    // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shift(80);                    // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      break;\n    case 89:                        // 'cast'\n      shift(89);                    // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shift(90);                    // 'castable'\n      break;\n    case 94:                        // 'collation'\n      shift(94);                    // 'collation'\n      break;\n    case 105:                       // 'count'\n      shift(105);                   // 'count'\n      break;\n    case 109:                       // 'default'\n      shift(109);                   // 'default'\n      break;\n    case 113:                       // 'descending'\n      shift(113);                   // 'descending'\n      break;\n    case 118:                       // 'div'\n      shift(118);                   // 'div'\n      break;\n    case 122:                       // 'else'\n      shift(122);                   // 'else'\n      break;\n    case 123:                       // 'empty'\n      shift(123);                   // 'empty'\n      break;\n    case 126:                       // 'end'\n      shift(126);                   // 'end'\n      break;\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 131:                       // 'except'\n      shift(131);                   // 'except'\n      break;\n    case 137:                       // 'for'\n      shift(137);                   // 'for'\n      break;\n    case 146:                       // 'ge'\n      shift(146);                   // 'ge'\n      break;\n    case 148:                       // 'group'\n      shift(148);                   // 'group'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shift(151);                   // 'idiv'\n      break;\n    case 160:                       // 'instance'\n      shift(160);                   // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shift(162);                   // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shift(163);                   // 'into'\n      break;\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 174:                       // 'let'\n      shift(174);                   // 'let'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shift(180);                   // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shift(181);                   // 'modify'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 198:                       // 'only'\n      shift(198);                   // 'only'\n      break;\n    case 200:                       // 'or'\n      shift(200);                   // 'or'\n      break;\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      break;\n    case 220:                       // 'return'\n      shift(220);                   // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shift(224);                   // 'satisfies'\n      break;\n    case 236:                       // 'stable'\n      shift(236);                   // 'stable'\n      break;\n    case 237:                       // 'start'\n      shift(237);                   // 'start'\n      break;\n    case 248:                       // 'to'\n      shift(248);                   // 'to'\n      break;\n    case 249:                       // 'treat'\n      shift(249);                   // 'treat'\n      break;\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    case 266:                       // 'where'\n      shift(266);                   // 'where'\n      break;\n    case 270:                       // 'with'\n      shift(270);                   // 'with'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shift(74);                    // 'ancestor-or-self'\n      break;\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      break;\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      break;\n    case 96:                        // 'comment'\n      shift(96);                    // 'comment'\n      break;\n    case 103:                       // 'copy'\n      shift(103);                   // 'copy'\n      break;\n    case 108:                       // 'declare'\n      shift(108);                   // 'declare'\n      break;\n    case 110:                       // 'delete'\n      shift(110);                   // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      break;\n    case 119:                       // 'document'\n      shift(119);                   // 'document'\n      break;\n    case 120:                       // 'document-node'\n      shift(120);                   // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shift(124);                   // 'empty-sequence'\n      break;\n    case 129:                       // 'every'\n      shift(129);                   // 'every'\n      break;\n    case 134:                       // 'first'\n      shift(134);                   // 'first'\n      break;\n    case 135:                       // 'following'\n      shift(135);                   // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      break;\n    case 145:                       // 'function'\n      shift(145);                   // 'function'\n      break;\n    case 152:                       // 'if'\n      shift(152);                   // 'if'\n      break;\n    case 153:                       // 'import'\n      shift(153);                   // 'import'\n      break;\n    case 159:                       // 'insert'\n      shift(159);                   // 'insert'\n      break;\n    case 165:                       // 'item'\n      shift(165);                   // 'item'\n      break;\n    case 170:                       // 'last'\n      shift(170);                   // 'last'\n      break;\n    case 182:                       // 'module'\n      shift(182);                   // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      break;\n    case 185:                       // 'namespace-node'\n      shift(185);                   // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'processing-instruction'\n      shift(216);                   // 'processing-instruction'\n      break;\n    case 218:                       // 'rename'\n      shift(218);                   // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shift(219);                   // 'replace'\n      break;\n    case 226:                       // 'schema-attribute'\n      shift(226);                   // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shift(227);                   // 'schema-element'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      break;\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    case 243:                       // 'switch'\n      shift(243);                   // 'switch'\n      break;\n    case 244:                       // 'text'\n      shift(244);                   // 'text'\n      break;\n    case 250:                       // 'try'\n      shift(250);                   // 'try'\n      break;\n    case 253:                       // 'typeswitch'\n      shift(253);                   // 'typeswitch'\n      break;\n    case 256:                       // 'unordered'\n      shift(256);                   // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shift(260);                   // 'validate'\n      break;\n    case 262:                       // 'variable'\n      shift(262);                   // 'variable'\n      break;\n    case 274:                       // 'xquery'\n      shift(274);                   // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shift(72);                    // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shift(83);                    // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shift(85);                    // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shift(86);                    // 'break'\n      break;\n    case 91:                        // 'catch'\n      shift(91);                    // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shift(98);                    // 'construction'\n      break;\n    case 101:                       // 'context'\n      shift(101);                   // 'context'\n      break;\n    case 102:                       // 'continue'\n      shift(102);                   // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shift(104);                   // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shift(132);                   // 'exit'\n      break;\n    case 133:                       // 'external'\n      shift(133);                   // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shift(141);                   // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shift(154);                   // 'in'\n      break;\n    case 155:                       // 'index'\n      shift(155);                   // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shift(161);                   // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shift(192);                   // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shift(199);                   // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shift(203);                   // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shift(222);                   // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shift(225);                   // 'schema'\n      break;\n    case 228:                       // 'score'\n      shift(228);                   // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shift(234);                   // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shift(251);                   // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shift(252);                   // 'type'\n      break;\n    case 257:                       // 'updating'\n      shift(257);                   // 'updating'\n      break;\n    case 261:                       // 'value'\n      shift(261);                   // 'value'\n      break;\n    case 263:                       // 'version'\n      shift(263);                   // 'version'\n      break;\n    case 267:                       // 'while'\n      shift(267);                   // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shift(97);                    // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shift(176);                   // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shift(221);                   // 'returning'\n      break;\n    case 77:                        // 'append'\n      shift(77);                    // 'append'\n      break;\n    case 166:                       // 'json'\n      shift(166);                   // 'json'\n      break;\n    default:\n      shift(194);                   // 'object'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function try_NCName()\n  {\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shiftT(19);                   // NCName^Token\n      break;\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 75:                        // 'and'\n      shiftT(75);                   // 'and'\n      break;\n    case 79:                        // 'as'\n      shiftT(79);                   // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shiftT(80);                   // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      break;\n    case 89:                        // 'cast'\n      shiftT(89);                   // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shiftT(90);                   // 'castable'\n      break;\n    case 94:                        // 'collation'\n      shiftT(94);                   // 'collation'\n      break;\n    case 105:                       // 'count'\n      shiftT(105);                  // 'count'\n      break;\n    case 109:                       // 'default'\n      shiftT(109);                  // 'default'\n      break;\n    case 113:                       // 'descending'\n      shiftT(113);                  // 'descending'\n      break;\n    case 118:                       // 'div'\n      shiftT(118);                  // 'div'\n      break;\n    case 122:                       // 'else'\n      shiftT(122);                  // 'else'\n      break;\n    case 123:                       // 'empty'\n      shiftT(123);                  // 'empty'\n      break;\n    case 126:                       // 'end'\n      shiftT(126);                  // 'end'\n      break;\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 131:                       // 'except'\n      shiftT(131);                  // 'except'\n      break;\n    case 137:                       // 'for'\n      shiftT(137);                  // 'for'\n      break;\n    case 146:                       // 'ge'\n      shiftT(146);                  // 'ge'\n      break;\n    case 148:                       // 'group'\n      shiftT(148);                  // 'group'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shiftT(151);                  // 'idiv'\n      break;\n    case 160:                       // 'instance'\n      shiftT(160);                  // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shiftT(162);                  // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shiftT(163);                  // 'into'\n      break;\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 174:                       // 'let'\n      shiftT(174);                  // 'let'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shiftT(180);                  // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shiftT(181);                  // 'modify'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 198:                       // 'only'\n      shiftT(198);                  // 'only'\n      break;\n    case 200:                       // 'or'\n      shiftT(200);                  // 'or'\n      break;\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      break;\n    case 220:                       // 'return'\n      shiftT(220);                  // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shiftT(224);                  // 'satisfies'\n      break;\n    case 236:                       // 'stable'\n      shiftT(236);                  // 'stable'\n      break;\n    case 237:                       // 'start'\n      shiftT(237);                  // 'start'\n      break;\n    case 248:                       // 'to'\n      shiftT(248);                  // 'to'\n      break;\n    case 249:                       // 'treat'\n      shiftT(249);                  // 'treat'\n      break;\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    case 266:                       // 'where'\n      shiftT(266);                  // 'where'\n      break;\n    case 270:                       // 'with'\n      shiftT(270);                  // 'with'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shiftT(74);                   // 'ancestor-or-self'\n      break;\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      break;\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      break;\n    case 96:                        // 'comment'\n      shiftT(96);                   // 'comment'\n      break;\n    case 103:                       // 'copy'\n      shiftT(103);                  // 'copy'\n      break;\n    case 108:                       // 'declare'\n      shiftT(108);                  // 'declare'\n      break;\n    case 110:                       // 'delete'\n      shiftT(110);                  // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      break;\n    case 119:                       // 'document'\n      shiftT(119);                  // 'document'\n      break;\n    case 120:                       // 'document-node'\n      shiftT(120);                  // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shiftT(124);                  // 'empty-sequence'\n      break;\n    case 129:                       // 'every'\n      shiftT(129);                  // 'every'\n      break;\n    case 134:                       // 'first'\n      shiftT(134);                  // 'first'\n      break;\n    case 135:                       // 'following'\n      shiftT(135);                  // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      break;\n    case 145:                       // 'function'\n      shiftT(145);                  // 'function'\n      break;\n    case 152:                       // 'if'\n      shiftT(152);                  // 'if'\n      break;\n    case 153:                       // 'import'\n      shiftT(153);                  // 'import'\n      break;\n    case 159:                       // 'insert'\n      shiftT(159);                  // 'insert'\n      break;\n    case 165:                       // 'item'\n      shiftT(165);                  // 'item'\n      break;\n    case 170:                       // 'last'\n      shiftT(170);                  // 'last'\n      break;\n    case 182:                       // 'module'\n      shiftT(182);                  // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shiftT(184);                  // 'namespace'\n      break;\n    case 185:                       // 'namespace-node'\n      shiftT(185);                  // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    case 202:                       // 'ordered'\n      shiftT(202);                  // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      break;\n    case 216:                       // 'processing-instruction'\n      shiftT(216);                  // 'processing-instruction'\n      break;\n    case 218:                       // 'rename'\n      shiftT(218);                  // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shiftT(219);                  // 'replace'\n      break;\n    case 226:                       // 'schema-attribute'\n      shiftT(226);                  // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shiftT(227);                  // 'schema-element'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      break;\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    case 243:                       // 'switch'\n      shiftT(243);                  // 'switch'\n      break;\n    case 244:                       // 'text'\n      shiftT(244);                  // 'text'\n      break;\n    case 250:                       // 'try'\n      shiftT(250);                  // 'try'\n      break;\n    case 253:                       // 'typeswitch'\n      shiftT(253);                  // 'typeswitch'\n      break;\n    case 256:                       // 'unordered'\n      shiftT(256);                  // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shiftT(260);                  // 'validate'\n      break;\n    case 262:                       // 'variable'\n      shiftT(262);                  // 'variable'\n      break;\n    case 274:                       // 'xquery'\n      shiftT(274);                  // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shiftT(72);                   // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shiftT(83);                   // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shiftT(85);                   // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shiftT(86);                   // 'break'\n      break;\n    case 91:                        // 'catch'\n      shiftT(91);                   // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shiftT(98);                   // 'construction'\n      break;\n    case 101:                       // 'context'\n      shiftT(101);                  // 'context'\n      break;\n    case 102:                       // 'continue'\n      shiftT(102);                  // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shiftT(104);                  // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shiftT(106);                  // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shiftT(125);                  // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shiftT(132);                  // 'exit'\n      break;\n    case 133:                       // 'external'\n      shiftT(133);                  // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shiftT(141);                  // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shiftT(154);                  // 'in'\n      break;\n    case 155:                       // 'index'\n      shiftT(155);                  // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shiftT(161);                  // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shiftT(192);                  // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shiftT(199);                  // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shiftT(203);                  // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shiftT(222);                  // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shiftT(225);                  // 'schema'\n      break;\n    case 228:                       // 'score'\n      shiftT(228);                  // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shiftT(234);                  // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shiftT(240);                  // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shiftT(251);                  // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shiftT(252);                  // 'type'\n      break;\n    case 257:                       // 'updating'\n      shiftT(257);                  // 'updating'\n      break;\n    case 261:                       // 'value'\n      shiftT(261);                  // 'value'\n      break;\n    case 263:                       // 'version'\n      shiftT(263);                  // 'version'\n      break;\n    case 267:                       // 'while'\n      shiftT(267);                  // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shiftT(97);                   // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shiftT(176);                  // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shiftT(221);                  // 'returning'\n      break;\n    case 77:                        // 'append'\n      shiftT(77);                   // 'append'\n      break;\n    case 166:                       // 'json'\n      shiftT(166);                  // 'json'\n      break;\n    default:\n      shiftT(194);                  // 'object'\n    }\n  }\n\n  function parse_MainModule()\n  {\n    eventHandler.startNonterminal(\"MainModule\", e0);\n    parse_Prolog();\n    whitespace();\n    parse_Program();\n    eventHandler.endNonterminal(\"MainModule\", e0);\n  }\n\n  function parse_Program()\n  {\n    eventHandler.startNonterminal(\"Program\", e0);\n    parse_StatementsAndOptionalExpr();\n    eventHandler.endNonterminal(\"Program\", e0);\n  }\n\n  function parse_Statements()\n  {\n    eventHandler.startNonterminal(\"Statements\", e0);\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 34:                      // '('\n        lookahead2W(268);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 35:                      // '(#'\n        lookahead2(251);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 46:                      // '/'\n        lookahead2W(283);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 47:                      // '//'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 54:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 55:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 59:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 66:                      // '@'\n        lookahead2W(256);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 68:                      // '['\n        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 77:                      // 'append'\n        lookahead2W(199);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 82:                      // 'attribute'\n        lookahead2W(280);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 121:                     // 'element'\n        lookahead2W(279);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 132:                     // 'exit'\n        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 137:                     // 'for'\n        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 174:                     // 'let'\n        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 218:                     // 'rename'\n        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 219:                     // 'replace'\n        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 260:                     // 'validate'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 276:                     // '{'\n        lookahead2W(276);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 278:                     // '{|'\n        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 5:                       // Wildcard\n      case 45:                      // '..'\n        lookahead2W(185);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |\n        break;\n      case 31:                      // '$'\n      case 32:                      // '%'\n        lookahead2W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 40:                      // '+'\n      case 42:                      // '-'\n        lookahead2W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 86:                      // 'break'\n      case 102:                     // 'continue'\n        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 110:                     // 'delete'\n      case 159:                     // 'insert'\n        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 184:                     // 'namespace'\n      case 216:                     // 'processing-instruction'\n        lookahead2W(267);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 103:                     // 'copy'\n      case 129:                     // 'every'\n      case 235:                     // 'some'\n      case 262:                     // 'variable'\n        lookahead2W(196);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 44:                      // '.'\n        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 78:                      // 'array'\n      case 124:                     // 'empty-sequence'\n      case 165:                     // 'item'\n      case 167:                     // 'json-item'\n      case 242:                     // 'structured-item'\n        lookahead2W(190);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 96:                      // 'comment'\n      case 119:                     // 'document'\n      case 202:                     // 'ordered'\n      case 244:                     // 'text'\n      case 250:                     // 'try'\n      case 256:                     // 'unordered'\n        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 73:                      // 'ancestor'\n      case 74:                      // 'ancestor-or-self'\n      case 93:                      // 'child'\n      case 111:                     // 'descendant'\n      case 112:                     // 'descendant-or-self'\n      case 135:                     // 'following'\n      case 136:                     // 'following-sibling'\n      case 206:                     // 'parent'\n      case 212:                     // 'preceding'\n      case 213:                     // 'preceding-sibling'\n      case 229:                     // 'self'\n        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 6:                       // EQName^Token\n      case 70:                      // 'after'\n      case 72:                      // 'allowing'\n      case 75:                      // 'and'\n      case 79:                      // 'as'\n      case 80:                      // 'ascending'\n      case 81:                      // 'at'\n      case 83:                      // 'base-uri'\n      case 84:                      // 'before'\n      case 85:                      // 'boundary-space'\n      case 88:                      // 'case'\n      case 89:                      // 'cast'\n      case 90:                      // 'castable'\n      case 91:                      // 'catch'\n      case 94:                      // 'collation'\n      case 97:                      // 'constraint'\n      case 98:                      // 'construction'\n      case 101:                     // 'context'\n      case 104:                     // 'copy-namespaces'\n      case 105:                     // 'count'\n      case 106:                     // 'decimal-format'\n      case 108:                     // 'declare'\n      case 109:                     // 'default'\n      case 113:                     // 'descending'\n      case 118:                     // 'div'\n      case 120:                     // 'document-node'\n      case 122:                     // 'else'\n      case 123:                     // 'empty'\n      case 125:                     // 'encoding'\n      case 126:                     // 'end'\n      case 128:                     // 'eq'\n      case 131:                     // 'except'\n      case 133:                     // 'external'\n      case 134:                     // 'first'\n      case 141:                     // 'ft-option'\n      case 145:                     // 'function'\n      case 146:                     // 'ge'\n      case 148:                     // 'group'\n      case 150:                     // 'gt'\n      case 151:                     // 'idiv'\n      case 152:                     // 'if'\n      case 153:                     // 'import'\n      case 154:                     // 'in'\n      case 155:                     // 'index'\n      case 160:                     // 'instance'\n      case 161:                     // 'integrity'\n      case 162:                     // 'intersect'\n      case 163:                     // 'into'\n      case 164:                     // 'is'\n      case 166:                     // 'json'\n      case 170:                     // 'last'\n      case 171:                     // 'lax'\n      case 172:                     // 'le'\n      case 176:                     // 'loop'\n      case 178:                     // 'lt'\n      case 180:                     // 'mod'\n      case 181:                     // 'modify'\n      case 182:                     // 'module'\n      case 185:                     // 'namespace-node'\n      case 186:                     // 'ne'\n      case 191:                     // 'node'\n      case 192:                     // 'nodes'\n      case 194:                     // 'object'\n      case 198:                     // 'only'\n      case 199:                     // 'option'\n      case 200:                     // 'or'\n      case 201:                     // 'order'\n      case 203:                     // 'ordering'\n      case 220:                     // 'return'\n      case 221:                     // 'returning'\n      case 222:                     // 'revalidation'\n      case 224:                     // 'satisfies'\n      case 225:                     // 'schema'\n      case 226:                     // 'schema-attribute'\n      case 227:                     // 'schema-element'\n      case 228:                     // 'score'\n      case 234:                     // 'sliding'\n      case 236:                     // 'stable'\n      case 237:                     // 'start'\n      case 240:                     // 'strict'\n      case 243:                     // 'switch'\n      case 248:                     // 'to'\n      case 249:                     // 'treat'\n      case 251:                     // 'tumbling'\n      case 252:                     // 'type'\n      case 253:                     // 'typeswitch'\n      case 254:                     // 'union'\n      case 257:                     // 'updating'\n      case 261:                     // 'value'\n      case 263:                     // 'version'\n      case 266:                     // 'where'\n      case 267:                     // 'while'\n      case 270:                     // 'with'\n      case 274:                     // 'xquery'\n        lookahead2W(194);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 53                  // ';'\n       && lk != 282                 // '}'\n       && lk != 12805               // Wildcard EOF\n       && lk != 12806               // EQName^Token EOF\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12844               // '.' EOF\n       && lk != 12845               // '..' EOF\n       && lk != 12846               // '/' EOF\n       && lk != 12870               // 'after' EOF\n       && lk != 12872               // 'allowing' EOF\n       && lk != 12873               // 'ancestor' EOF\n       && lk != 12874               // 'ancestor-or-self' EOF\n       && lk != 12875               // 'and' EOF\n       && lk != 12877               // 'append' EOF\n       && lk != 12878               // 'array' EOF\n       && lk != 12879               // 'as' EOF\n       && lk != 12880               // 'ascending' EOF\n       && lk != 12881               // 'at' EOF\n       && lk != 12882               // 'attribute' EOF\n       && lk != 12883               // 'base-uri' EOF\n       && lk != 12884               // 'before' EOF\n       && lk != 12885               // 'boundary-space' EOF\n       && lk != 12886               // 'break' EOF\n       && lk != 12888               // 'case' EOF\n       && lk != 12889               // 'cast' EOF\n       && lk != 12890               // 'castable' EOF\n       && lk != 12891               // 'catch' EOF\n       && lk != 12893               // 'child' EOF\n       && lk != 12894               // 'collation' EOF\n       && lk != 12896               // 'comment' EOF\n       && lk != 12897               // 'constraint' EOF\n       && lk != 12898               // 'construction' EOF\n       && lk != 12901               // 'context' EOF\n       && lk != 12902               // 'continue' EOF\n       && lk != 12903               // 'copy' EOF\n       && lk != 12904               // 'copy-namespaces' EOF\n       && lk != 12905               // 'count' EOF\n       && lk != 12906               // 'decimal-format' EOF\n       && lk != 12908               // 'declare' EOF\n       && lk != 12909               // 'default' EOF\n       && lk != 12910               // 'delete' EOF\n       && lk != 12911               // 'descendant' EOF\n       && lk != 12912               // 'descendant-or-self' EOF\n       && lk != 12913               // 'descending' EOF\n       && lk != 12918               // 'div' EOF\n       && lk != 12919               // 'document' EOF\n       && lk != 12920               // 'document-node' EOF\n       && lk != 12921               // 'element' EOF\n       && lk != 12922               // 'else' EOF\n       && lk != 12923               // 'empty' EOF\n       && lk != 12924               // 'empty-sequence' EOF\n       && lk != 12925               // 'encoding' EOF\n       && lk != 12926               // 'end' EOF\n       && lk != 12928               // 'eq' EOF\n       && lk != 12929               // 'every' EOF\n       && lk != 12931               // 'except' EOF\n       && lk != 12932               // 'exit' EOF\n       && lk != 12933               // 'external' EOF\n       && lk != 12934               // 'first' EOF\n       && lk != 12935               // 'following' EOF\n       && lk != 12936               // 'following-sibling' EOF\n       && lk != 12937               // 'for' EOF\n       && lk != 12941               // 'ft-option' EOF\n       && lk != 12945               // 'function' EOF\n       && lk != 12946               // 'ge' EOF\n       && lk != 12948               // 'group' EOF\n       && lk != 12950               // 'gt' EOF\n       && lk != 12951               // 'idiv' EOF\n       && lk != 12952               // 'if' EOF\n       && lk != 12953               // 'import' EOF\n       && lk != 12954               // 'in' EOF\n       && lk != 12955               // 'index' EOF\n       && lk != 12959               // 'insert' EOF\n       && lk != 12960               // 'instance' EOF\n       && lk != 12961               // 'integrity' EOF\n       && lk != 12962               // 'intersect' EOF\n       && lk != 12963               // 'into' EOF\n       && lk != 12964               // 'is' EOF\n       && lk != 12965               // 'item' EOF\n       && lk != 12966               // 'json' EOF\n       && lk != 12967               // 'json-item' EOF\n       && lk != 12970               // 'last' EOF\n       && lk != 12971               // 'lax' EOF\n       && lk != 12972               // 'le' EOF\n       && lk != 12974               // 'let' EOF\n       && lk != 12976               // 'loop' EOF\n       && lk != 12978               // 'lt' EOF\n       && lk != 12980               // 'mod' EOF\n       && lk != 12981               // 'modify' EOF\n       && lk != 12982               // 'module' EOF\n       && lk != 12984               // 'namespace' EOF\n       && lk != 12985               // 'namespace-node' EOF\n       && lk != 12986               // 'ne' EOF\n       && lk != 12991               // 'node' EOF\n       && lk != 12992               // 'nodes' EOF\n       && lk != 12994               // 'object' EOF\n       && lk != 12998               // 'only' EOF\n       && lk != 12999               // 'option' EOF\n       && lk != 13000               // 'or' EOF\n       && lk != 13001               // 'order' EOF\n       && lk != 13002               // 'ordered' EOF\n       && lk != 13003               // 'ordering' EOF\n       && lk != 13006               // 'parent' EOF\n       && lk != 13012               // 'preceding' EOF\n       && lk != 13013               // 'preceding-sibling' EOF\n       && lk != 13016               // 'processing-instruction' EOF\n       && lk != 13018               // 'rename' EOF\n       && lk != 13019               // 'replace' EOF\n       && lk != 13020               // 'return' EOF\n       && lk != 13021               // 'returning' EOF\n       && lk != 13022               // 'revalidation' EOF\n       && lk != 13024               // 'satisfies' EOF\n       && lk != 13025               // 'schema' EOF\n       && lk != 13026               // 'schema-attribute' EOF\n       && lk != 13027               // 'schema-element' EOF\n       && lk != 13028               // 'score' EOF\n       && lk != 13029               // 'self' EOF\n       && lk != 13034               // 'sliding' EOF\n       && lk != 13035               // 'some' EOF\n       && lk != 13036               // 'stable' EOF\n       && lk != 13037               // 'start' EOF\n       && lk != 13040               // 'strict' EOF\n       && lk != 13042               // 'structured-item' EOF\n       && lk != 13043               // 'switch' EOF\n       && lk != 13044               // 'text' EOF\n       && lk != 13048               // 'to' EOF\n       && lk != 13049               // 'treat' EOF\n       && lk != 13050               // 'try' EOF\n       && lk != 13051               // 'tumbling' EOF\n       && lk != 13052               // 'type' EOF\n       && lk != 13053               // 'typeswitch' EOF\n       && lk != 13054               // 'union' EOF\n       && lk != 13056               // 'unordered' EOF\n       && lk != 13057               // 'updating' EOF\n       && lk != 13060               // 'validate' EOF\n       && lk != 13061               // 'value' EOF\n       && lk != 13062               // 'variable' EOF\n       && lk != 13063               // 'version' EOF\n       && lk != 13066               // 'where' EOF\n       && lk != 13067               // 'while' EOF\n       && lk != 13070               // 'with' EOF\n       && lk != 13074               // 'xquery' EOF\n       && lk != 16134               // 'variable' '$'\n       && lk != 20997               // Wildcard ','\n       && lk != 20998               // EQName^Token ','\n       && lk != 21000               // IntegerLiteral ','\n       && lk != 21001               // DecimalLiteral ','\n       && lk != 21002               // DoubleLiteral ','\n       && lk != 21003               // StringLiteral ','\n       && lk != 21036               // '.' ','\n       && lk != 21037               // '..' ','\n       && lk != 21038               // '/' ','\n       && lk != 21062               // 'after' ','\n       && lk != 21064               // 'allowing' ','\n       && lk != 21065               // 'ancestor' ','\n       && lk != 21066               // 'ancestor-or-self' ','\n       && lk != 21067               // 'and' ','\n       && lk != 21069               // 'append' ','\n       && lk != 21070               // 'array' ','\n       && lk != 21071               // 'as' ','\n       && lk != 21072               // 'ascending' ','\n       && lk != 21073               // 'at' ','\n       && lk != 21074               // 'attribute' ','\n       && lk != 21075               // 'base-uri' ','\n       && lk != 21076               // 'before' ','\n       && lk != 21077               // 'boundary-space' ','\n       && lk != 21078               // 'break' ','\n       && lk != 21080               // 'case' ','\n       && lk != 21081               // 'cast' ','\n       && lk != 21082               // 'castable' ','\n       && lk != 21083               // 'catch' ','\n       && lk != 21085               // 'child' ','\n       && lk != 21086               // 'collation' ','\n       && lk != 21088               // 'comment' ','\n       && lk != 21089               // 'constraint' ','\n       && lk != 21090               // 'construction' ','\n       && lk != 21093               // 'context' ','\n       && lk != 21094               // 'continue' ','\n       && lk != 21095               // 'copy' ','\n       && lk != 21096               // 'copy-namespaces' ','\n       && lk != 21097               // 'count' ','\n       && lk != 21098               // 'decimal-format' ','\n       && lk != 21100               // 'declare' ','\n       && lk != 21101               // 'default' ','\n       && lk != 21102               // 'delete' ','\n       && lk != 21103               // 'descendant' ','\n       && lk != 21104               // 'descendant-or-self' ','\n       && lk != 21105               // 'descending' ','\n       && lk != 21110               // 'div' ','\n       && lk != 21111               // 'document' ','\n       && lk != 21112               // 'document-node' ','\n       && lk != 21113               // 'element' ','\n       && lk != 21114               // 'else' ','\n       && lk != 21115               // 'empty' ','\n       && lk != 21116               // 'empty-sequence' ','\n       && lk != 21117               // 'encoding' ','\n       && lk != 21118               // 'end' ','\n       && lk != 21120               // 'eq' ','\n       && lk != 21121               // 'every' ','\n       && lk != 21123               // 'except' ','\n       && lk != 21124               // 'exit' ','\n       && lk != 21125               // 'external' ','\n       && lk != 21126               // 'first' ','\n       && lk != 21127               // 'following' ','\n       && lk != 21128               // 'following-sibling' ','\n       && lk != 21129               // 'for' ','\n       && lk != 21133               // 'ft-option' ','\n       && lk != 21137               // 'function' ','\n       && lk != 21138               // 'ge' ','\n       && lk != 21140               // 'group' ','\n       && lk != 21142               // 'gt' ','\n       && lk != 21143               // 'idiv' ','\n       && lk != 21144               // 'if' ','\n       && lk != 21145               // 'import' ','\n       && lk != 21146               // 'in' ','\n       && lk != 21147               // 'index' ','\n       && lk != 21151               // 'insert' ','\n       && lk != 21152               // 'instance' ','\n       && lk != 21153               // 'integrity' ','\n       && lk != 21154               // 'intersect' ','\n       && lk != 21155               // 'into' ','\n       && lk != 21156               // 'is' ','\n       && lk != 21157               // 'item' ','\n       && lk != 21158               // 'json' ','\n       && lk != 21159               // 'json-item' ','\n       && lk != 21162               // 'last' ','\n       && lk != 21163               // 'lax' ','\n       && lk != 21164               // 'le' ','\n       && lk != 21166               // 'let' ','\n       && lk != 21168               // 'loop' ','\n       && lk != 21170               // 'lt' ','\n       && lk != 21172               // 'mod' ','\n       && lk != 21173               // 'modify' ','\n       && lk != 21174               // 'module' ','\n       && lk != 21176               // 'namespace' ','\n       && lk != 21177               // 'namespace-node' ','\n       && lk != 21178               // 'ne' ','\n       && lk != 21183               // 'node' ','\n       && lk != 21184               // 'nodes' ','\n       && lk != 21186               // 'object' ','\n       && lk != 21190               // 'only' ','\n       && lk != 21191               // 'option' ','\n       && lk != 21192               // 'or' ','\n       && lk != 21193               // 'order' ','\n       && lk != 21194               // 'ordered' ','\n       && lk != 21195               // 'ordering' ','\n       && lk != 21198               // 'parent' ','\n       && lk != 21204               // 'preceding' ','\n       && lk != 21205               // 'preceding-sibling' ','\n       && lk != 21208               // 'processing-instruction' ','\n       && lk != 21210               // 'rename' ','\n       && lk != 21211               // 'replace' ','\n       && lk != 21212               // 'return' ','\n       && lk != 21213               // 'returning' ','\n       && lk != 21214               // 'revalidation' ','\n       && lk != 21216               // 'satisfies' ','\n       && lk != 21217               // 'schema' ','\n       && lk != 21218               // 'schema-attribute' ','\n       && lk != 21219               // 'schema-element' ','\n       && lk != 21220               // 'score' ','\n       && lk != 21221               // 'self' ','\n       && lk != 21226               // 'sliding' ','\n       && lk != 21227               // 'some' ','\n       && lk != 21228               // 'stable' ','\n       && lk != 21229               // 'start' ','\n       && lk != 21232               // 'strict' ','\n       && lk != 21234               // 'structured-item' ','\n       && lk != 21235               // 'switch' ','\n       && lk != 21236               // 'text' ','\n       && lk != 21240               // 'to' ','\n       && lk != 21241               // 'treat' ','\n       && lk != 21242               // 'try' ','\n       && lk != 21243               // 'tumbling' ','\n       && lk != 21244               // 'type' ','\n       && lk != 21245               // 'typeswitch' ','\n       && lk != 21246               // 'union' ','\n       && lk != 21248               // 'unordered' ','\n       && lk != 21249               // 'updating' ','\n       && lk != 21252               // 'validate' ','\n       && lk != 21253               // 'value' ','\n       && lk != 21254               // 'variable' ','\n       && lk != 21255               // 'version' ','\n       && lk != 21258               // 'where' ','\n       && lk != 21259               // 'while' ','\n       && lk != 21262               // 'with' ','\n       && lk != 21266               // 'xquery' ','\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284              // 'exit' 'returning'\n       && lk != 144389              // Wildcard '}'\n       && lk != 144390              // EQName^Token '}'\n       && lk != 144392              // IntegerLiteral '}'\n       && lk != 144393              // DecimalLiteral '}'\n       && lk != 144394              // DoubleLiteral '}'\n       && lk != 144395              // StringLiteral '}'\n       && lk != 144428              // '.' '}'\n       && lk != 144429              // '..' '}'\n       && lk != 144430              // '/' '}'\n       && lk != 144454              // 'after' '}'\n       && lk != 144456              // 'allowing' '}'\n       && lk != 144457              // 'ancestor' '}'\n       && lk != 144458              // 'ancestor-or-self' '}'\n       && lk != 144459              // 'and' '}'\n       && lk != 144461              // 'append' '}'\n       && lk != 144462              // 'array' '}'\n       && lk != 144463              // 'as' '}'\n       && lk != 144464              // 'ascending' '}'\n       && lk != 144465              // 'at' '}'\n       && lk != 144466              // 'attribute' '}'\n       && lk != 144467              // 'base-uri' '}'\n       && lk != 144468              // 'before' '}'\n       && lk != 144469              // 'boundary-space' '}'\n       && lk != 144470              // 'break' '}'\n       && lk != 144472              // 'case' '}'\n       && lk != 144473              // 'cast' '}'\n       && lk != 144474              // 'castable' '}'\n       && lk != 144475              // 'catch' '}'\n       && lk != 144477              // 'child' '}'\n       && lk != 144478              // 'collation' '}'\n       && lk != 144480              // 'comment' '}'\n       && lk != 144481              // 'constraint' '}'\n       && lk != 144482              // 'construction' '}'\n       && lk != 144485              // 'context' '}'\n       && lk != 144486              // 'continue' '}'\n       && lk != 144487              // 'copy' '}'\n       && lk != 144488              // 'copy-namespaces' '}'\n       && lk != 144489              // 'count' '}'\n       && lk != 144490              // 'decimal-format' '}'\n       && lk != 144492              // 'declare' '}'\n       && lk != 144493              // 'default' '}'\n       && lk != 144494              // 'delete' '}'\n       && lk != 144495              // 'descendant' '}'\n       && lk != 144496              // 'descendant-or-self' '}'\n       && lk != 144497              // 'descending' '}'\n       && lk != 144502              // 'div' '}'\n       && lk != 144503              // 'document' '}'\n       && lk != 144504              // 'document-node' '}'\n       && lk != 144505              // 'element' '}'\n       && lk != 144506              // 'else' '}'\n       && lk != 144507              // 'empty' '}'\n       && lk != 144508              // 'empty-sequence' '}'\n       && lk != 144509              // 'encoding' '}'\n       && lk != 144510              // 'end' '}'\n       && lk != 144512              // 'eq' '}'\n       && lk != 144513              // 'every' '}'\n       && lk != 144515              // 'except' '}'\n       && lk != 144516              // 'exit' '}'\n       && lk != 144517              // 'external' '}'\n       && lk != 144518              // 'first' '}'\n       && lk != 144519              // 'following' '}'\n       && lk != 144520              // 'following-sibling' '}'\n       && lk != 144521              // 'for' '}'\n       && lk != 144525              // 'ft-option' '}'\n       && lk != 144529              // 'function' '}'\n       && lk != 144530              // 'ge' '}'\n       && lk != 144532              // 'group' '}'\n       && lk != 144534              // 'gt' '}'\n       && lk != 144535              // 'idiv' '}'\n       && lk != 144536              // 'if' '}'\n       && lk != 144537              // 'import' '}'\n       && lk != 144538              // 'in' '}'\n       && lk != 144539              // 'index' '}'\n       && lk != 144543              // 'insert' '}'\n       && lk != 144544              // 'instance' '}'\n       && lk != 144545              // 'integrity' '}'\n       && lk != 144546              // 'intersect' '}'\n       && lk != 144547              // 'into' '}'\n       && lk != 144548              // 'is' '}'\n       && lk != 144549              // 'item' '}'\n       && lk != 144550              // 'json' '}'\n       && lk != 144551              // 'json-item' '}'\n       && lk != 144554              // 'last' '}'\n       && lk != 144555              // 'lax' '}'\n       && lk != 144556              // 'le' '}'\n       && lk != 144558              // 'let' '}'\n       && lk != 144560              // 'loop' '}'\n       && lk != 144562              // 'lt' '}'\n       && lk != 144564              // 'mod' '}'\n       && lk != 144565              // 'modify' '}'\n       && lk != 144566              // 'module' '}'\n       && lk != 144568              // 'namespace' '}'\n       && lk != 144569              // 'namespace-node' '}'\n       && lk != 144570              // 'ne' '}'\n       && lk != 144575              // 'node' '}'\n       && lk != 144576              // 'nodes' '}'\n       && lk != 144578              // 'object' '}'\n       && lk != 144582              // 'only' '}'\n       && lk != 144583              // 'option' '}'\n       && lk != 144584              // 'or' '}'\n       && lk != 144585              // 'order' '}'\n       && lk != 144586              // 'ordered' '}'\n       && lk != 144587              // 'ordering' '}'\n       && lk != 144590              // 'parent' '}'\n       && lk != 144596              // 'preceding' '}'\n       && lk != 144597              // 'preceding-sibling' '}'\n       && lk != 144600              // 'processing-instruction' '}'\n       && lk != 144602              // 'rename' '}'\n       && lk != 144603              // 'replace' '}'\n       && lk != 144604              // 'return' '}'\n       && lk != 144605              // 'returning' '}'\n       && lk != 144606              // 'revalidation' '}'\n       && lk != 144608              // 'satisfies' '}'\n       && lk != 144609              // 'schema' '}'\n       && lk != 144610              // 'schema-attribute' '}'\n       && lk != 144611              // 'schema-element' '}'\n       && lk != 144612              // 'score' '}'\n       && lk != 144613              // 'self' '}'\n       && lk != 144618              // 'sliding' '}'\n       && lk != 144619              // 'some' '}'\n       && lk != 144620              // 'stable' '}'\n       && lk != 144621              // 'start' '}'\n       && lk != 144624              // 'strict' '}'\n       && lk != 144626              // 'structured-item' '}'\n       && lk != 144627              // 'switch' '}'\n       && lk != 144628              // 'text' '}'\n       && lk != 144632              // 'to' '}'\n       && lk != 144633              // 'treat' '}'\n       && lk != 144634              // 'try' '}'\n       && lk != 144635              // 'tumbling' '}'\n       && lk != 144636              // 'type' '}'\n       && lk != 144637              // 'typeswitch' '}'\n       && lk != 144638              // 'union' '}'\n       && lk != 144640              // 'unordered' '}'\n       && lk != 144641              // 'updating' '}'\n       && lk != 144644              // 'validate' '}'\n       && lk != 144645              // 'value' '}'\n       && lk != 144646              // 'variable' '}'\n       && lk != 144647              // 'version' '}'\n       && lk != 144650              // 'where' '}'\n       && lk != 144651              // 'while' '}'\n       && lk != 144654              // 'with' '}'\n       && lk != 144658)             // 'xquery' '}'\n      {\n        lk = memoized(6, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(6, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 53                  // ';'\n       && lk != 16134               // 'variable' '$'\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284)             // 'exit' 'returning'\n      {\n        break;\n      }\n      whitespace();\n      parse_Statement();\n    }\n    eventHandler.endNonterminal(\"Statements\", e0);\n  }\n\n  function try_Statements()\n  {\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 34:                      // '('\n        lookahead2W(268);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 35:                      // '(#'\n        lookahead2(251);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 46:                      // '/'\n        lookahead2W(283);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 47:                      // '//'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 54:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 55:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 59:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 66:                      // '@'\n        lookahead2W(256);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 68:                      // '['\n        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 77:                      // 'append'\n        lookahead2W(199);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 82:                      // 'attribute'\n        lookahead2W(280);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 121:                     // 'element'\n        lookahead2W(279);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 132:                     // 'exit'\n        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 137:                     // 'for'\n        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 174:                     // 'let'\n        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 218:                     // 'rename'\n        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 219:                     // 'replace'\n        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 260:                     // 'validate'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 276:                     // '{'\n        lookahead2W(276);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 278:                     // '{|'\n        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 5:                       // Wildcard\n      case 45:                      // '..'\n        lookahead2W(185);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |\n        break;\n      case 31:                      // '$'\n      case 32:                      // '%'\n        lookahead2W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 40:                      // '+'\n      case 42:                      // '-'\n        lookahead2W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 86:                      // 'break'\n      case 102:                     // 'continue'\n        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 110:                     // 'delete'\n      case 159:                     // 'insert'\n        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 184:                     // 'namespace'\n      case 216:                     // 'processing-instruction'\n        lookahead2W(267);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 103:                     // 'copy'\n      case 129:                     // 'every'\n      case 235:                     // 'some'\n      case 262:                     // 'variable'\n        lookahead2W(196);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 44:                      // '.'\n        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 78:                      // 'array'\n      case 124:                     // 'empty-sequence'\n      case 165:                     // 'item'\n      case 167:                     // 'json-item'\n      case 242:                     // 'structured-item'\n        lookahead2W(190);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 96:                      // 'comment'\n      case 119:                     // 'document'\n      case 202:                     // 'ordered'\n      case 244:                     // 'text'\n      case 250:                     // 'try'\n      case 256:                     // 'unordered'\n        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 73:                      // 'ancestor'\n      case 74:                      // 'ancestor-or-self'\n      case 93:                      // 'child'\n      case 111:                     // 'descendant'\n      case 112:                     // 'descendant-or-self'\n      case 135:                     // 'following'\n      case 136:                     // 'following-sibling'\n      case 206:                     // 'parent'\n      case 212:                     // 'preceding'\n      case 213:                     // 'preceding-sibling'\n      case 229:                     // 'self'\n        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 6:                       // EQName^Token\n      case 70:                      // 'after'\n      case 72:                      // 'allowing'\n      case 75:                      // 'and'\n      case 79:                      // 'as'\n      case 80:                      // 'ascending'\n      case 81:                      // 'at'\n      case 83:                      // 'base-uri'\n      case 84:                      // 'before'\n      case 85:                      // 'boundary-space'\n      case 88:                      // 'case'\n      case 89:                      // 'cast'\n      case 90:                      // 'castable'\n      case 91:                      // 'catch'\n      case 94:                      // 'collation'\n      case 97:                      // 'constraint'\n      case 98:                      // 'construction'\n      case 101:                     // 'context'\n      case 104:                     // 'copy-namespaces'\n      case 105:                     // 'count'\n      case 106:                     // 'decimal-format'\n      case 108:                     // 'declare'\n      case 109:                     // 'default'\n      case 113:                     // 'descending'\n      case 118:                     // 'div'\n      case 120:                     // 'document-node'\n      case 122:                     // 'else'\n      case 123:                     // 'empty'\n      case 125:                     // 'encoding'\n      case 126:                     // 'end'\n      case 128:                     // 'eq'\n      case 131:                     // 'except'\n      case 133:                     // 'external'\n      case 134:                     // 'first'\n      case 141:                     // 'ft-option'\n      case 145:                     // 'function'\n      case 146:                     // 'ge'\n      case 148:                     // 'group'\n      case 150:                     // 'gt'\n      case 151:                     // 'idiv'\n      case 152:                     // 'if'\n      case 153:                     // 'import'\n      case 154:                     // 'in'\n      case 155:                     // 'index'\n      case 160:                     // 'instance'\n      case 161:                     // 'integrity'\n      case 162:                     // 'intersect'\n      case 163:                     // 'into'\n      case 164:                     // 'is'\n      case 166:                     // 'json'\n      case 170:                     // 'last'\n      case 171:                     // 'lax'\n      case 172:                     // 'le'\n      case 176:                     // 'loop'\n      case 178:                     // 'lt'\n      case 180:                     // 'mod'\n      case 181:                     // 'modify'\n      case 182:                     // 'module'\n      case 185:                     // 'namespace-node'\n      case 186:                     // 'ne'\n      case 191:                     // 'node'\n      case 192:                     // 'nodes'\n      case 194:                     // 'object'\n      case 198:                     // 'only'\n      case 199:                     // 'option'\n      case 200:                     // 'or'\n      case 201:                     // 'order'\n      case 203:                     // 'ordering'\n      case 220:                     // 'return'\n      case 221:                     // 'returning'\n      case 222:                     // 'revalidation'\n      case 224:                     // 'satisfies'\n      case 225:                     // 'schema'\n      case 226:                     // 'schema-attribute'\n      case 227:                     // 'schema-element'\n      case 228:                     // 'score'\n      case 234:                     // 'sliding'\n      case 236:                     // 'stable'\n      case 237:                     // 'start'\n      case 240:                     // 'strict'\n      case 243:                     // 'switch'\n      case 248:                     // 'to'\n      case 249:                     // 'treat'\n      case 251:                     // 'tumbling'\n      case 252:                     // 'type'\n      case 253:                     // 'typeswitch'\n      case 254:                     // 'union'\n      case 257:                     // 'updating'\n      case 261:                     // 'value'\n      case 263:                     // 'version'\n      case 266:                     // 'where'\n      case 267:                     // 'while'\n      case 270:                     // 'with'\n      case 274:                     // 'xquery'\n        lookahead2W(194);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 53                  // ';'\n       && lk != 282                 // '}'\n       && lk != 12805               // Wildcard EOF\n       && lk != 12806               // EQName^Token EOF\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12844               // '.' EOF\n       && lk != 12845               // '..' EOF\n       && lk != 12846               // '/' EOF\n       && lk != 12870               // 'after' EOF\n       && lk != 12872               // 'allowing' EOF\n       && lk != 12873               // 'ancestor' EOF\n       && lk != 12874               // 'ancestor-or-self' EOF\n       && lk != 12875               // 'and' EOF\n       && lk != 12877               // 'append' EOF\n       && lk != 12878               // 'array' EOF\n       && lk != 12879               // 'as' EOF\n       && lk != 12880               // 'ascending' EOF\n       && lk != 12881               // 'at' EOF\n       && lk != 12882               // 'attribute' EOF\n       && lk != 12883               // 'base-uri' EOF\n       && lk != 12884               // 'before' EOF\n       && lk != 12885               // 'boundary-space' EOF\n       && lk != 12886               // 'break' EOF\n       && lk != 12888               // 'case' EOF\n       && lk != 12889               // 'cast' EOF\n       && lk != 12890               // 'castable' EOF\n       && lk != 12891               // 'catch' EOF\n       && lk != 12893               // 'child' EOF\n       && lk != 12894               // 'collation' EOF\n       && lk != 12896               // 'comment' EOF\n       && lk != 12897               // 'constraint' EOF\n       && lk != 12898               // 'construction' EOF\n       && lk != 12901               // 'context' EOF\n       && lk != 12902               // 'continue' EOF\n       && lk != 12903               // 'copy' EOF\n       && lk != 12904               // 'copy-namespaces' EOF\n       && lk != 12905               // 'count' EOF\n       && lk != 12906               // 'decimal-format' EOF\n       && lk != 12908               // 'declare' EOF\n       && lk != 12909               // 'default' EOF\n       && lk != 12910               // 'delete' EOF\n       && lk != 12911               // 'descendant' EOF\n       && lk != 12912               // 'descendant-or-self' EOF\n       && lk != 12913               // 'descending' EOF\n       && lk != 12918               // 'div' EOF\n       && lk != 12919               // 'document' EOF\n       && lk != 12920               // 'document-node' EOF\n       && lk != 12921               // 'element' EOF\n       && lk != 12922               // 'else' EOF\n       && lk != 12923               // 'empty' EOF\n       && lk != 12924               // 'empty-sequence' EOF\n       && lk != 12925               // 'encoding' EOF\n       && lk != 12926               // 'end' EOF\n       && lk != 12928               // 'eq' EOF\n       && lk != 12929               // 'every' EOF\n       && lk != 12931               // 'except' EOF\n       && lk != 12932               // 'exit' EOF\n       && lk != 12933               // 'external' EOF\n       && lk != 12934               // 'first' EOF\n       && lk != 12935               // 'following' EOF\n       && lk != 12936               // 'following-sibling' EOF\n       && lk != 12937               // 'for' EOF\n       && lk != 12941               // 'ft-option' EOF\n       && lk != 12945               // 'function' EOF\n       && lk != 12946               // 'ge' EOF\n       && lk != 12948               // 'group' EOF\n       && lk != 12950               // 'gt' EOF\n       && lk != 12951               // 'idiv' EOF\n       && lk != 12952               // 'if' EOF\n       && lk != 12953               // 'import' EOF\n       && lk != 12954               // 'in' EOF\n       && lk != 12955               // 'index' EOF\n       && lk != 12959               // 'insert' EOF\n       && lk != 12960               // 'instance' EOF\n       && lk != 12961               // 'integrity' EOF\n       && lk != 12962               // 'intersect' EOF\n       && lk != 12963               // 'into' EOF\n       && lk != 12964               // 'is' EOF\n       && lk != 12965               // 'item' EOF\n       && lk != 12966               // 'json' EOF\n       && lk != 12967               // 'json-item' EOF\n       && lk != 12970               // 'last' EOF\n       && lk != 12971               // 'lax' EOF\n       && lk != 12972               // 'le' EOF\n       && lk != 12974               // 'let' EOF\n       && lk != 12976               // 'loop' EOF\n       && lk != 12978               // 'lt' EOF\n       && lk != 12980               // 'mod' EOF\n       && lk != 12981               // 'modify' EOF\n       && lk != 12982               // 'module' EOF\n       && lk != 12984               // 'namespace' EOF\n       && lk != 12985               // 'namespace-node' EOF\n       && lk != 12986               // 'ne' EOF\n       && lk != 12991               // 'node' EOF\n       && lk != 12992               // 'nodes' EOF\n       && lk != 12994               // 'object' EOF\n       && lk != 12998               // 'only' EOF\n       && lk != 12999               // 'option' EOF\n       && lk != 13000               // 'or' EOF\n       && lk != 13001               // 'order' EOF\n       && lk != 13002               // 'ordered' EOF\n       && lk != 13003               // 'ordering' EOF\n       && lk != 13006               // 'parent' EOF\n       && lk != 13012               // 'preceding' EOF\n       && lk != 13013               // 'preceding-sibling' EOF\n       && lk != 13016               // 'processing-instruction' EOF\n       && lk != 13018               // 'rename' EOF\n       && lk != 13019               // 'replace' EOF\n       && lk != 13020               // 'return' EOF\n       && lk != 13021               // 'returning' EOF\n       && lk != 13022               // 'revalidation' EOF\n       && lk != 13024               // 'satisfies' EOF\n       && lk != 13025               // 'schema' EOF\n       && lk != 13026               // 'schema-attribute' EOF\n       && lk != 13027               // 'schema-element' EOF\n       && lk != 13028               // 'score' EOF\n       && lk != 13029               // 'self' EOF\n       && lk != 13034               // 'sliding' EOF\n       && lk != 13035               // 'some' EOF\n       && lk != 13036               // 'stable' EOF\n       && lk != 13037               // 'start' EOF\n       && lk != 13040               // 'strict' EOF\n       && lk != 13042               // 'structured-item' EOF\n       && lk != 13043               // 'switch' EOF\n       && lk != 13044               // 'text' EOF\n       && lk != 13048               // 'to' EOF\n       && lk != 13049               // 'treat' EOF\n       && lk != 13050               // 'try' EOF\n       && lk != 13051               // 'tumbling' EOF\n       && lk != 13052               // 'type' EOF\n       && lk != 13053               // 'typeswitch' EOF\n       && lk != 13054               // 'union' EOF\n       && lk != 13056               // 'unordered' EOF\n       && lk != 13057               // 'updating' EOF\n       && lk != 13060               // 'validate' EOF\n       && lk != 13061               // 'value' EOF\n       && lk != 13062               // 'variable' EOF\n       && lk != 13063               // 'version' EOF\n       && lk != 13066               // 'where' EOF\n       && lk != 13067               // 'while' EOF\n       && lk != 13070               // 'with' EOF\n       && lk != 13074               // 'xquery' EOF\n       && lk != 16134               // 'variable' '$'\n       && lk != 20997               // Wildcard ','\n       && lk != 20998               // EQName^Token ','\n       && lk != 21000               // IntegerLiteral ','\n       && lk != 21001               // DecimalLiteral ','\n       && lk != 21002               // DoubleLiteral ','\n       && lk != 21003               // StringLiteral ','\n       && lk != 21036               // '.' ','\n       && lk != 21037               // '..' ','\n       && lk != 21038               // '/' ','\n       && lk != 21062               // 'after' ','\n       && lk != 21064               // 'allowing' ','\n       && lk != 21065               // 'ancestor' ','\n       && lk != 21066               // 'ancestor-or-self' ','\n       && lk != 21067               // 'and' ','\n       && lk != 21069               // 'append' ','\n       && lk != 21070               // 'array' ','\n       && lk != 21071               // 'as' ','\n       && lk != 21072               // 'ascending' ','\n       && lk != 21073               // 'at' ','\n       && lk != 21074               // 'attribute' ','\n       && lk != 21075               // 'base-uri' ','\n       && lk != 21076               // 'before' ','\n       && lk != 21077               // 'boundary-space' ','\n       && lk != 21078               // 'break' ','\n       && lk != 21080               // 'case' ','\n       && lk != 21081               // 'cast' ','\n       && lk != 21082               // 'castable' ','\n       && lk != 21083               // 'catch' ','\n       && lk != 21085               // 'child' ','\n       && lk != 21086               // 'collation' ','\n       && lk != 21088               // 'comment' ','\n       && lk != 21089               // 'constraint' ','\n       && lk != 21090               // 'construction' ','\n       && lk != 21093               // 'context' ','\n       && lk != 21094               // 'continue' ','\n       && lk != 21095               // 'copy' ','\n       && lk != 21096               // 'copy-namespaces' ','\n       && lk != 21097               // 'count' ','\n       && lk != 21098               // 'decimal-format' ','\n       && lk != 21100               // 'declare' ','\n       && lk != 21101               // 'default' ','\n       && lk != 21102               // 'delete' ','\n       && lk != 21103               // 'descendant' ','\n       && lk != 21104               // 'descendant-or-self' ','\n       && lk != 21105               // 'descending' ','\n       && lk != 21110               // 'div' ','\n       && lk != 21111               // 'document' ','\n       && lk != 21112               // 'document-node' ','\n       && lk != 21113               // 'element' ','\n       && lk != 21114               // 'else' ','\n       && lk != 21115               // 'empty' ','\n       && lk != 21116               // 'empty-sequence' ','\n       && lk != 21117               // 'encoding' ','\n       && lk != 21118               // 'end' ','\n       && lk != 21120               // 'eq' ','\n       && lk != 21121               // 'every' ','\n       && lk != 21123               // 'except' ','\n       && lk != 21124               // 'exit' ','\n       && lk != 21125               // 'external' ','\n       && lk != 21126               // 'first' ','\n       && lk != 21127               // 'following' ','\n       && lk != 21128               // 'following-sibling' ','\n       && lk != 21129               // 'for' ','\n       && lk != 21133               // 'ft-option' ','\n       && lk != 21137               // 'function' ','\n       && lk != 21138               // 'ge' ','\n       && lk != 21140               // 'group' ','\n       && lk != 21142               // 'gt' ','\n       && lk != 21143               // 'idiv' ','\n       && lk != 21144               // 'if' ','\n       && lk != 21145               // 'import' ','\n       && lk != 21146               // 'in' ','\n       && lk != 21147               // 'index' ','\n       && lk != 21151               // 'insert' ','\n       && lk != 21152               // 'instance' ','\n       && lk != 21153               // 'integrity' ','\n       && lk != 21154               // 'intersect' ','\n       && lk != 21155               // 'into' ','\n       && lk != 21156               // 'is' ','\n       && lk != 21157               // 'item' ','\n       && lk != 21158               // 'json' ','\n       && lk != 21159               // 'json-item' ','\n       && lk != 21162               // 'last' ','\n       && lk != 21163               // 'lax' ','\n       && lk != 21164               // 'le' ','\n       && lk != 21166               // 'let' ','\n       && lk != 21168               // 'loop' ','\n       && lk != 21170               // 'lt' ','\n       && lk != 21172               // 'mod' ','\n       && lk != 21173               // 'modify' ','\n       && lk != 21174               // 'module' ','\n       && lk != 21176               // 'namespace' ','\n       && lk != 21177               // 'namespace-node' ','\n       && lk != 21178               // 'ne' ','\n       && lk != 21183               // 'node' ','\n       && lk != 21184               // 'nodes' ','\n       && lk != 21186               // 'object' ','\n       && lk != 21190               // 'only' ','\n       && lk != 21191               // 'option' ','\n       && lk != 21192               // 'or' ','\n       && lk != 21193               // 'order' ','\n       && lk != 21194               // 'ordered' ','\n       && lk != 21195               // 'ordering' ','\n       && lk != 21198               // 'parent' ','\n       && lk != 21204               // 'preceding' ','\n       && lk != 21205               // 'preceding-sibling' ','\n       && lk != 21208               // 'processing-instruction' ','\n       && lk != 21210               // 'rename' ','\n       && lk != 21211               // 'replace' ','\n       && lk != 21212               // 'return' ','\n       && lk != 21213               // 'returning' ','\n       && lk != 21214               // 'revalidation' ','\n       && lk != 21216               // 'satisfies' ','\n       && lk != 21217               // 'schema' ','\n       && lk != 21218               // 'schema-attribute' ','\n       && lk != 21219               // 'schema-element' ','\n       && lk != 21220               // 'score' ','\n       && lk != 21221               // 'self' ','\n       && lk != 21226               // 'sliding' ','\n       && lk != 21227               // 'some' ','\n       && lk != 21228               // 'stable' ','\n       && lk != 21229               // 'start' ','\n       && lk != 21232               // 'strict' ','\n       && lk != 21234               // 'structured-item' ','\n       && lk != 21235               // 'switch' ','\n       && lk != 21236               // 'text' ','\n       && lk != 21240               // 'to' ','\n       && lk != 21241               // 'treat' ','\n       && lk != 21242               // 'try' ','\n       && lk != 21243               // 'tumbling' ','\n       && lk != 21244               // 'type' ','\n       && lk != 21245               // 'typeswitch' ','\n       && lk != 21246               // 'union' ','\n       && lk != 21248               // 'unordered' ','\n       && lk != 21249               // 'updating' ','\n       && lk != 21252               // 'validate' ','\n       && lk != 21253               // 'value' ','\n       && lk != 21254               // 'variable' ','\n       && lk != 21255               // 'version' ','\n       && lk != 21258               // 'where' ','\n       && lk != 21259               // 'while' ','\n       && lk != 21262               // 'with' ','\n       && lk != 21266               // 'xquery' ','\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284              // 'exit' 'returning'\n       && lk != 144389              // Wildcard '}'\n       && lk != 144390              // EQName^Token '}'\n       && lk != 144392              // IntegerLiteral '}'\n       && lk != 144393              // DecimalLiteral '}'\n       && lk != 144394              // DoubleLiteral '}'\n       && lk != 144395              // StringLiteral '}'\n       && lk != 144428              // '.' '}'\n       && lk != 144429              // '..' '}'\n       && lk != 144430              // '/' '}'\n       && lk != 144454              // 'after' '}'\n       && lk != 144456              // 'allowing' '}'\n       && lk != 144457              // 'ancestor' '}'\n       && lk != 144458              // 'ancestor-or-self' '}'\n       && lk != 144459              // 'and' '}'\n       && lk != 144461              // 'append' '}'\n       && lk != 144462              // 'array' '}'\n       && lk != 144463              // 'as' '}'\n       && lk != 144464              // 'ascending' '}'\n       && lk != 144465              // 'at' '}'\n       && lk != 144466              // 'attribute' '}'\n       && lk != 144467              // 'base-uri' '}'\n       && lk != 144468              // 'before' '}'\n       && lk != 144469              // 'boundary-space' '}'\n       && lk != 144470              // 'break' '}'\n       && lk != 144472              // 'case' '}'\n       && lk != 144473              // 'cast' '}'\n       && lk != 144474              // 'castable' '}'\n       && lk != 144475              // 'catch' '}'\n       && lk != 144477              // 'child' '}'\n       && lk != 144478              // 'collation' '}'\n       && lk != 144480              // 'comment' '}'\n       && lk != 144481              // 'constraint' '}'\n       && lk != 144482              // 'construction' '}'\n       && lk != 144485              // 'context' '}'\n       && lk != 144486              // 'continue' '}'\n       && lk != 144487              // 'copy' '}'\n       && lk != 144488              // 'copy-namespaces' '}'\n       && lk != 144489              // 'count' '}'\n       && lk != 144490              // 'decimal-format' '}'\n       && lk != 144492              // 'declare' '}'\n       && lk != 144493              // 'default' '}'\n       && lk != 144494              // 'delete' '}'\n       && lk != 144495              // 'descendant' '}'\n       && lk != 144496              // 'descendant-or-self' '}'\n       && lk != 144497              // 'descending' '}'\n       && lk != 144502              // 'div' '}'\n       && lk != 144503              // 'document' '}'\n       && lk != 144504              // 'document-node' '}'\n       && lk != 144505              // 'element' '}'\n       && lk != 144506              // 'else' '}'\n       && lk != 144507              // 'empty' '}'\n       && lk != 144508              // 'empty-sequence' '}'\n       && lk != 144509              // 'encoding' '}'\n       && lk != 144510              // 'end' '}'\n       && lk != 144512              // 'eq' '}'\n       && lk != 144513              // 'every' '}'\n       && lk != 144515              // 'except' '}'\n       && lk != 144516              // 'exit' '}'\n       && lk != 144517              // 'external' '}'\n       && lk != 144518              // 'first' '}'\n       && lk != 144519              // 'following' '}'\n       && lk != 144520              // 'following-sibling' '}'\n       && lk != 144521              // 'for' '}'\n       && lk != 144525              // 'ft-option' '}'\n       && lk != 144529              // 'function' '}'\n       && lk != 144530              // 'ge' '}'\n       && lk != 144532              // 'group' '}'\n       && lk != 144534              // 'gt' '}'\n       && lk != 144535              // 'idiv' '}'\n       && lk != 144536              // 'if' '}'\n       && lk != 144537              // 'import' '}'\n       && lk != 144538              // 'in' '}'\n       && lk != 144539              // 'index' '}'\n       && lk != 144543              // 'insert' '}'\n       && lk != 144544              // 'instance' '}'\n       && lk != 144545              // 'integrity' '}'\n       && lk != 144546              // 'intersect' '}'\n       && lk != 144547              // 'into' '}'\n       && lk != 144548              // 'is' '}'\n       && lk != 144549              // 'item' '}'\n       && lk != 144550              // 'json' '}'\n       && lk != 144551              // 'json-item' '}'\n       && lk != 144554              // 'last' '}'\n       && lk != 144555              // 'lax' '}'\n       && lk != 144556              // 'le' '}'\n       && lk != 144558              // 'let' '}'\n       && lk != 144560              // 'loop' '}'\n       && lk != 144562              // 'lt' '}'\n       && lk != 144564              // 'mod' '}'\n       && lk != 144565              // 'modify' '}'\n       && lk != 144566              // 'module' '}'\n       && lk != 144568              // 'namespace' '}'\n       && lk != 144569              // 'namespace-node' '}'\n       && lk != 144570              // 'ne' '}'\n       && lk != 144575              // 'node' '}'\n       && lk != 144576              // 'nodes' '}'\n       && lk != 144578              // 'object' '}'\n       && lk != 144582              // 'only' '}'\n       && lk != 144583              // 'option' '}'\n       && lk != 144584              // 'or' '}'\n       && lk != 144585              // 'order' '}'\n       && lk != 144586              // 'ordered' '}'\n       && lk != 144587              // 'ordering' '}'\n       && lk != 144590              // 'parent' '}'\n       && lk != 144596              // 'preceding' '}'\n       && lk != 144597              // 'preceding-sibling' '}'\n       && lk != 144600              // 'processing-instruction' '}'\n       && lk != 144602              // 'rename' '}'\n       && lk != 144603              // 'replace' '}'\n       && lk != 144604              // 'return' '}'\n       && lk != 144605              // 'returning' '}'\n       && lk != 144606              // 'revalidation' '}'\n       && lk != 144608              // 'satisfies' '}'\n       && lk != 144609              // 'schema' '}'\n       && lk != 144610              // 'schema-attribute' '}'\n       && lk != 144611              // 'schema-element' '}'\n       && lk != 144612              // 'score' '}'\n       && lk != 144613              // 'self' '}'\n       && lk != 144618              // 'sliding' '}'\n       && lk != 144619              // 'some' '}'\n       && lk != 144620              // 'stable' '}'\n       && lk != 144621              // 'start' '}'\n       && lk != 144624              // 'strict' '}'\n       && lk != 144626              // 'structured-item' '}'\n       && lk != 144627              // 'switch' '}'\n       && lk != 144628              // 'text' '}'\n       && lk != 144632              // 'to' '}'\n       && lk != 144633              // 'treat' '}'\n       && lk != 144634              // 'try' '}'\n       && lk != 144635              // 'tumbling' '}'\n       && lk != 144636              // 'type' '}'\n       && lk != 144637              // 'typeswitch' '}'\n       && lk != 144638              // 'union' '}'\n       && lk != 144640              // 'unordered' '}'\n       && lk != 144641              // 'updating' '}'\n       && lk != 144644              // 'validate' '}'\n       && lk != 144645              // 'value' '}'\n       && lk != 144646              // 'variable' '}'\n       && lk != 144647              // 'version' '}'\n       && lk != 144650              // 'where' '}'\n       && lk != 144651              // 'while' '}'\n       && lk != 144654              // 'with' '}'\n       && lk != 144658)             // 'xquery' '}'\n      {\n        lk = memoized(6, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            memoize(6, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(6, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 53                  // ';'\n       && lk != 16134               // 'variable' '$'\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284)             // 'exit' 'returning'\n      {\n        break;\n      }\n      try_Statement();\n    }\n  }\n\n  function parse_StatementsAndExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndExpr\", e0);\n    parse_Statements();\n    whitespace();\n    parse_Expr();\n    eventHandler.endNonterminal(\"StatementsAndExpr\", e0);\n  }\n\n  function try_StatementsAndExpr()\n  {\n    try_Statements();\n    try_Expr();\n  }\n\n  function parse_StatementsAndOptionalExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndOptionalExpr\", e0);\n    parse_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    eventHandler.endNonterminal(\"StatementsAndOptionalExpr\", e0);\n  }\n\n  function try_StatementsAndOptionalExpr()\n  {\n    try_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 282)                  // '}'\n    {\n      try_Expr();\n    }\n  }\n\n  function parse_Statement()\n  {\n    eventHandler.startNonterminal(\"Statement\", e0);\n    switch (l1)\n    {\n    case 132:                       // 'exit'\n      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 137:                       // 'for'\n      lookahead2W(195);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(192);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 262:                       // 'variable'\n      lookahead2W(186);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 31:                        // '$'\n    case 32:                        // '%'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 86:                        // 'break'\n    case 102:                       // 'continue'\n      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 267:                       // 'while'\n      lookahead2W(184);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3103                  // '$' EQName^Token\n     || lk == 3104                  // '%' EQName^Token\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17675                 // 'while' '('\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27412                 // '{' ';'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 35871                 // '$' 'after'\n     || lk == 35872                 // '%' 'after'\n     || lk == 36116                 // '{' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 36896                 // '%' 'allowing'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37408                 // '%' 'ancestor'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 37920                 // '%' 'ancestor-or-self'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 38432                 // '%' 'and'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39456                 // '%' 'append'\n     || lk == 39700                 // '{' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 39968                 // '%' 'array'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40480                 // '%' 'as'\n     || lk == 40724                 // '{' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 40992                 // '%' 'ascending'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 41504                 // '%' 'at'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42016                 // '%' 'attribute'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 42528                 // '%' 'base-uri'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43040                 // '%' 'before'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 43552                 // '%' 'boundary-space'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 44064                 // '%' 'break'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45088                 // '%' 'case'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 45600                 // '%' 'cast'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46112                 // '%' 'castable'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 46624                 // '%' 'catch'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 47648                 // '%' 'child'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 48160                 // '%' 'collation'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49184                 // '%' 'comment'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 49696                 // '%' 'constraint'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 50208                 // '%' 'construction'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 51744                 // '%' 'context'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52256                 // '%' 'continue'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 52768                 // '%' 'copy'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53280                 // '%' 'copy-namespaces'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 53792                 // '%' 'count'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 54304                 // '%' 'decimal-format'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55328                 // '%' 'declare'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 55840                 // '%' 'default'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56352                 // '%' 'delete'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 56864                 // '%' 'descendant'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57376                 // '%' 'descendant-or-self'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 57888                 // '%' 'descending'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60448                 // '%' 'div'\n     || lk == 60692                 // '{' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 60960                 // '%' 'document'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61472                 // '%' 'document-node'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 61984                 // '%' 'element'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 62496                 // '%' 'else'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63008                 // '%' 'empty'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 63520                 // '%' 'empty-sequence'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64032                 // '%' 'encoding'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 64544                 // '%' 'end'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 65568                 // '%' 'eq'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 66080                 // '%' 'every'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67104                 // '%' 'except'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 67616                 // '%' 'exit'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68128                 // '%' 'external'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 68640                 // '%' 'first'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69152                 // '%' 'following'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 69664                 // '%' 'following-sibling'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 70176                 // '%' 'for'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 72224                 // '%' 'ft-option'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74272                 // '%' 'function'\n     || lk == 74516                 // '{' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 74784                 // '%' 'ge'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 75808                 // '%' 'group'\n     || lk == 76052                 // '{' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 76832                 // '%' 'gt'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77344                 // '%' 'idiv'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 77856                 // '%' 'if'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78368                 // '%' 'import'\n     || lk == 78612                 // '{' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 78880                 // '%' 'in'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 79392                 // '%' 'index'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81440                 // '%' 'insert'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 81952                 // '%' 'instance'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82464                 // '%' 'integrity'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 82976                 // '%' 'intersect'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83488                 // '%' 'into'\n     || lk == 83732                 // '{' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84000                 // '%' 'is'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 84512                 // '%' 'item'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85024                 // '%' 'json'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 85536                 // '%' 'json-item'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87072                 // '%' 'last'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 87584                 // '%' 'lax'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 88096                 // '%' 'le'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 89120                 // '%' 'let'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 90144                 // '%' 'loop'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 91168                 // '%' 'lt'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92192                 // '%' 'mod'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 92704                 // '%' 'modify'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 93216                 // '%' 'module'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94240                 // '%' 'namespace'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 94752                 // '%' 'namespace-node'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 95264                 // '%' 'ne'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 97824                 // '%' 'node'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 98336                 // '%' 'nodes'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 99360                 // '%' 'object'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101408                // '%' 'only'\n     || lk == 101652                // '{' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 101920                // '%' 'option'\n     || lk == 102164                // '{' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102432                // '%' 'or'\n     || lk == 102676                // '{' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 102944                // '%' 'order'\n     || lk == 103188                // '{' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103456                // '%' 'ordered'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 103968                // '%' 'ordering'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 105504                // '%' 'parent'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 108576                // '%' 'preceding'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 109088                // '%' 'preceding-sibling'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 110624                // '%' 'processing-instruction'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 111648                // '%' 'rename'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112160                // '%' 'replace'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 112672                // '%' 'return'\n     || lk == 112916                // '{' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113184                // '%' 'returning'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 113696                // '%' 'revalidation'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 114720                // '%' 'satisfies'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115232                // '%' 'schema'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 115744                // '%' 'schema-attribute'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116256                // '%' 'schema-element'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 116768                // '%' 'score'\n     || lk == 117012                // '{' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 117280                // '%' 'self'\n     || lk == 117524                // '{' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 119840                // '%' 'sliding'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120352                // '%' 'some'\n     || lk == 120596                // '{' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 120864                // '%' 'stable'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 121376                // '%' 'start'\n     || lk == 121620                // '{' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 122912                // '%' 'strict'\n     || lk == 123156                // '{' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 123936                // '%' 'structured-item'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124448                // '%' 'switch'\n     || lk == 124692                // '{' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 124960                // '%' 'text'\n     || lk == 125204                // '{' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127008                // '%' 'to'\n     || lk == 127252                // '{' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 127520                // '%' 'treat'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128032                // '%' 'try'\n     || lk == 128276                // '{' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 128544                // '%' 'tumbling'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129056                // '%' 'type'\n     || lk == 129300                // '{' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 129568                // '%' 'typeswitch'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 130080                // '%' 'union'\n     || lk == 130324                // '{' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131104                // '%' 'unordered'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 131616                // '%' 'updating'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133152                // '%' 'validate'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 133664                // '%' 'value'\n     || lk == 133908                // '{' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134176                // '%' 'variable'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 134688                // '%' 'version'\n     || lk == 134932                // '{' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136224                // '%' 'where'\n     || lk == 136468                // '{' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 136736                // '%' 'while'\n     || lk == 136980                // '{' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 138272                // '%' 'with'\n     || lk == 138516                // '{' 'with'\n     || lk == 140319                // '$' 'xquery'\n     || lk == 140320                // '%' 'xquery'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(7, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            lk = -2;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              lk = -3;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                lk = -12;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(7, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      parse_AssignStatement();\n      break;\n    case -3:\n      parse_BlockStatement();\n      break;\n    case 90198:                     // 'break' 'loop'\n      parse_BreakStatement();\n      break;\n    case 90214:                     // 'continue' 'loop'\n      parse_ContinueStatement();\n      break;\n    case 113284:                    // 'exit' 'returning'\n      parse_ExitStatement();\n      break;\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      parse_FLWORStatement();\n      break;\n    case 17560:                     // 'if' '('\n      parse_IfStatement();\n      break;\n    case 17651:                     // 'switch' '('\n      parse_SwitchStatement();\n      break;\n    case 141562:                    // 'try' '{'\n      parse_TryCatchStatement();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      parse_TypeswitchStatement();\n      break;\n    case -12:\n    case 16134:                     // 'variable' '$'\n      parse_VarDeclStatement();\n      break;\n    case -13:\n      parse_WhileStatement();\n      break;\n    case 53:                        // ';'\n      parse_VoidStatement();\n      break;\n    default:\n      parse_ApplyStatement();\n    }\n    eventHandler.endNonterminal(\"Statement\", e0);\n  }\n\n  function try_Statement()\n  {\n    switch (l1)\n    {\n    case 132:                       // 'exit'\n      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 137:                       // 'for'\n      lookahead2W(195);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(192);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 262:                       // 'variable'\n      lookahead2W(186);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 31:                        // '$'\n    case 32:                        // '%'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 86:                        // 'break'\n    case 102:                       // 'continue'\n      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 267:                       // 'while'\n      lookahead2W(184);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3103                  // '$' EQName^Token\n     || lk == 3104                  // '%' EQName^Token\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17675                 // 'while' '('\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27412                 // '{' ';'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 35871                 // '$' 'after'\n     || lk == 35872                 // '%' 'after'\n     || lk == 36116                 // '{' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 36896                 // '%' 'allowing'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37408                 // '%' 'ancestor'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 37920                 // '%' 'ancestor-or-self'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 38432                 // '%' 'and'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39456                 // '%' 'append'\n     || lk == 39700                 // '{' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 39968                 // '%' 'array'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40480                 // '%' 'as'\n     || lk == 40724                 // '{' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 40992                 // '%' 'ascending'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 41504                 // '%' 'at'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42016                 // '%' 'attribute'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 42528                 // '%' 'base-uri'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43040                 // '%' 'before'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 43552                 // '%' 'boundary-space'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 44064                 // '%' 'break'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45088                 // '%' 'case'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 45600                 // '%' 'cast'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46112                 // '%' 'castable'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 46624                 // '%' 'catch'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 47648                 // '%' 'child'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 48160                 // '%' 'collation'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49184                 // '%' 'comment'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 49696                 // '%' 'constraint'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 50208                 // '%' 'construction'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 51744                 // '%' 'context'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52256                 // '%' 'continue'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 52768                 // '%' 'copy'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53280                 // '%' 'copy-namespaces'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 53792                 // '%' 'count'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 54304                 // '%' 'decimal-format'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55328                 // '%' 'declare'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 55840                 // '%' 'default'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56352                 // '%' 'delete'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 56864                 // '%' 'descendant'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57376                 // '%' 'descendant-or-self'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 57888                 // '%' 'descending'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60448                 // '%' 'div'\n     || lk == 60692                 // '{' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 60960                 // '%' 'document'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61472                 // '%' 'document-node'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 61984                 // '%' 'element'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 62496                 // '%' 'else'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63008                 // '%' 'empty'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 63520                 // '%' 'empty-sequence'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64032                 // '%' 'encoding'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 64544                 // '%' 'end'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 65568                 // '%' 'eq'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 66080                 // '%' 'every'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67104                 // '%' 'except'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 67616                 // '%' 'exit'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68128                 // '%' 'external'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 68640                 // '%' 'first'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69152                 // '%' 'following'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 69664                 // '%' 'following-sibling'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 70176                 // '%' 'for'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 72224                 // '%' 'ft-option'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74272                 // '%' 'function'\n     || lk == 74516                 // '{' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 74784                 // '%' 'ge'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 75808                 // '%' 'group'\n     || lk == 76052                 // '{' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 76832                 // '%' 'gt'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77344                 // '%' 'idiv'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 77856                 // '%' 'if'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78368                 // '%' 'import'\n     || lk == 78612                 // '{' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 78880                 // '%' 'in'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 79392                 // '%' 'index'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81440                 // '%' 'insert'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 81952                 // '%' 'instance'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82464                 // '%' 'integrity'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 82976                 // '%' 'intersect'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83488                 // '%' 'into'\n     || lk == 83732                 // '{' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84000                 // '%' 'is'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 84512                 // '%' 'item'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85024                 // '%' 'json'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 85536                 // '%' 'json-item'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87072                 // '%' 'last'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 87584                 // '%' 'lax'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 88096                 // '%' 'le'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 89120                 // '%' 'let'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 90144                 // '%' 'loop'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 91168                 // '%' 'lt'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92192                 // '%' 'mod'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 92704                 // '%' 'modify'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 93216                 // '%' 'module'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94240                 // '%' 'namespace'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 94752                 // '%' 'namespace-node'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 95264                 // '%' 'ne'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 97824                 // '%' 'node'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 98336                 // '%' 'nodes'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 99360                 // '%' 'object'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101408                // '%' 'only'\n     || lk == 101652                // '{' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 101920                // '%' 'option'\n     || lk == 102164                // '{' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102432                // '%' 'or'\n     || lk == 102676                // '{' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 102944                // '%' 'order'\n     || lk == 103188                // '{' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103456                // '%' 'ordered'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 103968                // '%' 'ordering'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 105504                // '%' 'parent'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 108576                // '%' 'preceding'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 109088                // '%' 'preceding-sibling'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 110624                // '%' 'processing-instruction'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 111648                // '%' 'rename'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112160                // '%' 'replace'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 112672                // '%' 'return'\n     || lk == 112916                // '{' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113184                // '%' 'returning'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 113696                // '%' 'revalidation'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 114720                // '%' 'satisfies'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115232                // '%' 'schema'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 115744                // '%' 'schema-attribute'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116256                // '%' 'schema-element'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 116768                // '%' 'score'\n     || lk == 117012                // '{' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 117280                // '%' 'self'\n     || lk == 117524                // '{' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 119840                // '%' 'sliding'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120352                // '%' 'some'\n     || lk == 120596                // '{' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 120864                // '%' 'stable'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 121376                // '%' 'start'\n     || lk == 121620                // '{' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 122912                // '%' 'strict'\n     || lk == 123156                // '{' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 123936                // '%' 'structured-item'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124448                // '%' 'switch'\n     || lk == 124692                // '{' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 124960                // '%' 'text'\n     || lk == 125204                // '{' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127008                // '%' 'to'\n     || lk == 127252                // '{' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 127520                // '%' 'treat'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128032                // '%' 'try'\n     || lk == 128276                // '{' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 128544                // '%' 'tumbling'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129056                // '%' 'type'\n     || lk == 129300                // '{' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 129568                // '%' 'typeswitch'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 130080                // '%' 'union'\n     || lk == 130324                // '{' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131104                // '%' 'unordered'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 131616                // '%' 'updating'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133152                // '%' 'validate'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 133664                // '%' 'value'\n     || lk == 133908                // '{' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134176                // '%' 'variable'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 134688                // '%' 'version'\n     || lk == 134932                // '{' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136224                // '%' 'where'\n     || lk == 136468                // '{' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 136736                // '%' 'while'\n     || lk == 136980                // '{' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 138272                // '%' 'with'\n     || lk == 138516                // '{' 'with'\n     || lk == 140319                // '$' 'xquery'\n     || lk == 140320                // '%' 'xquery'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(7, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          memoize(7, e0A, -1);\n          lk = -15;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            memoize(7, e0A, -2);\n            lk = -15;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              memoize(7, e0A, -3);\n              lk = -15;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                memoize(7, e0A, -12);\n                lk = -15;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                memoize(7, e0A, -13);\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      try_AssignStatement();\n      break;\n    case -3:\n      try_BlockStatement();\n      break;\n    case 90198:                     // 'break' 'loop'\n      try_BreakStatement();\n      break;\n    case 90214:                     // 'continue' 'loop'\n      try_ContinueStatement();\n      break;\n    case 113284:                    // 'exit' 'returning'\n      try_ExitStatement();\n      break;\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      try_FLWORStatement();\n      break;\n    case 17560:                     // 'if' '('\n      try_IfStatement();\n      break;\n    case 17651:                     // 'switch' '('\n      try_SwitchStatement();\n      break;\n    case 141562:                    // 'try' '{'\n      try_TryCatchStatement();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      try_TypeswitchStatement();\n      break;\n    case -12:\n    case 16134:                     // 'variable' '$'\n      try_VarDeclStatement();\n      break;\n    case -13:\n      try_WhileStatement();\n      break;\n    case 53:                        // ';'\n      try_VoidStatement();\n      break;\n    case -15:\n      break;\n    default:\n      try_ApplyStatement();\n    }\n  }\n\n  function parse_ApplyStatement()\n  {\n    eventHandler.startNonterminal(\"ApplyStatement\", e0);\n    parse_ExprSimple();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ApplyStatement\", e0);\n  }\n\n  function try_ApplyStatement()\n  {\n    try_ExprSimple();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_AssignStatement()\n  {\n    eventHandler.startNonterminal(\"AssignStatement\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"AssignStatement\", e0);\n  }\n\n  function try_AssignStatement()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_BlockStatement()\n  {\n    eventHandler.startNonterminal(\"BlockStatement\", e0);\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statements();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"BlockStatement\", e0);\n  }\n\n  function try_BlockStatement()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statements();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_BreakStatement()\n  {\n    eventHandler.startNonterminal(\"BreakStatement\", e0);\n    shift(86);                      // 'break'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shift(176);                     // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"BreakStatement\", e0);\n  }\n\n  function try_BreakStatement()\n  {\n    shiftT(86);                     // 'break'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shiftT(176);                    // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ContinueStatement()\n  {\n    eventHandler.startNonterminal(\"ContinueStatement\", e0);\n    shift(102);                     // 'continue'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shift(176);                     // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ContinueStatement\", e0);\n  }\n\n  function try_ContinueStatement()\n  {\n    shiftT(102);                    // 'continue'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shiftT(176);                    // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ExitStatement()\n  {\n    eventHandler.startNonterminal(\"ExitStatement\", e0);\n    shift(132);                     // 'exit'\n    lookahead1W(71);                // S^WS | '(:' | 'returning'\n    shift(221);                     // 'returning'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ExitStatement\", e0);\n  }\n\n  function try_ExitStatement()\n  {\n    shiftT(132);                    // 'exit'\n    lookahead1W(71);                // S^WS | '(:' | 'returning'\n    shiftT(221);                    // 'returning'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_FLWORStatement()\n  {\n    eventHandler.startNonterminal(\"FLWORStatement\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnStatement();\n    eventHandler.endNonterminal(\"FLWORStatement\", e0);\n  }\n\n  function try_FLWORStatement()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnStatement();\n  }\n\n  function parse_ReturnStatement()\n  {\n    eventHandler.startNonterminal(\"ReturnStatement\", e0);\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"ReturnStatement\", e0);\n  }\n\n  function try_ReturnStatement()\n  {\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_IfStatement()\n  {\n    eventHandler.startNonterminal(\"IfStatement\", e0);\n    shift(152);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shift(245);                     // 'then'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    lookahead1W(48);                // S^WS | '(:' | 'else'\n    shift(122);                     // 'else'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"IfStatement\", e0);\n  }\n\n  function try_IfStatement()\n  {\n    shiftT(152);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shiftT(245);                    // 'then'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n    lookahead1W(48);                // S^WS | '(:' | 'else'\n    shiftT(122);                    // 'else'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchStatement\", e0);\n    shift(243);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchStatement\", e0);\n  }\n\n  function try_SwitchStatement()\n  {\n    shiftT(243);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_SwitchCaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchCaseStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseStatement\", e0);\n    for (;;)\n    {\n      shift(88);                    // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchCaseStatement\", e0);\n  }\n\n  function try_SwitchCaseStatement()\n  {\n    for (;;)\n    {\n      shiftT(88);                   // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_TryCatchStatement()\n  {\n    eventHandler.startNonterminal(\"TryCatchStatement\", e0);\n    shift(250);                     // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      shift(91);                    // 'catch'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CatchErrorList();\n      whitespace();\n      parse_BlockStatement();\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 91:                      // 'catch'\n        lookahead2W(278);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 38491               // 'catch' 'and'\n       || lk == 45659               // 'catch' 'cast'\n       || lk == 46171               // 'catch' 'castable'\n       || lk == 60507               // 'catch' 'div'\n       || lk == 65627               // 'catch' 'eq'\n       || lk == 67163               // 'catch' 'except'\n       || lk == 74843               // 'catch' 'ge'\n       || lk == 76891               // 'catch' 'gt'\n       || lk == 77403               // 'catch' 'idiv'\n       || lk == 82011               // 'catch' 'instance'\n       || lk == 83035               // 'catch' 'intersect'\n       || lk == 84059               // 'catch' 'is'\n       || lk == 88155               // 'catch' 'le'\n       || lk == 91227               // 'catch' 'lt'\n       || lk == 92251               // 'catch' 'mod'\n       || lk == 95323               // 'catch' 'ne'\n       || lk == 102491              // 'catch' 'or'\n       || lk == 127067              // 'catch' 'to'\n       || lk == 127579              // 'catch' 'treat'\n       || lk == 130139)             // 'catch' 'union'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            lookahead1W(36);        // S^WS | '(:' | 'catch'\n            shiftT(91);             // 'catch'\n            lookahead1W(256);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n            try_CatchErrorList();\n            try_BlockStatement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(8, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 2651                // 'catch' Wildcard\n       && lk != 3163                // 'catch' EQName^Token\n       && lk != 35931               // 'catch' 'after'\n       && lk != 36955               // 'catch' 'allowing'\n       && lk != 37467               // 'catch' 'ancestor'\n       && lk != 37979               // 'catch' 'ancestor-or-self'\n       && lk != 39515               // 'catch' 'append'\n       && lk != 40027               // 'catch' 'array'\n       && lk != 40539               // 'catch' 'as'\n       && lk != 41051               // 'catch' 'ascending'\n       && lk != 41563               // 'catch' 'at'\n       && lk != 42075               // 'catch' 'attribute'\n       && lk != 42587               // 'catch' 'base-uri'\n       && lk != 43099               // 'catch' 'before'\n       && lk != 43611               // 'catch' 'boundary-space'\n       && lk != 44123               // 'catch' 'break'\n       && lk != 45147               // 'catch' 'case'\n       && lk != 46683               // 'catch' 'catch'\n       && lk != 47707               // 'catch' 'child'\n       && lk != 48219               // 'catch' 'collation'\n       && lk != 49243               // 'catch' 'comment'\n       && lk != 49755               // 'catch' 'constraint'\n       && lk != 50267               // 'catch' 'construction'\n       && lk != 51803               // 'catch' 'context'\n       && lk != 52315               // 'catch' 'continue'\n       && lk != 52827               // 'catch' 'copy'\n       && lk != 53339               // 'catch' 'copy-namespaces'\n       && lk != 53851               // 'catch' 'count'\n       && lk != 54363               // 'catch' 'decimal-format'\n       && lk != 55387               // 'catch' 'declare'\n       && lk != 55899               // 'catch' 'default'\n       && lk != 56411               // 'catch' 'delete'\n       && lk != 56923               // 'catch' 'descendant'\n       && lk != 57435               // 'catch' 'descendant-or-self'\n       && lk != 57947               // 'catch' 'descending'\n       && lk != 61019               // 'catch' 'document'\n       && lk != 61531               // 'catch' 'document-node'\n       && lk != 62043               // 'catch' 'element'\n       && lk != 62555               // 'catch' 'else'\n       && lk != 63067               // 'catch' 'empty'\n       && lk != 63579               // 'catch' 'empty-sequence'\n       && lk != 64091               // 'catch' 'encoding'\n       && lk != 64603               // 'catch' 'end'\n       && lk != 66139               // 'catch' 'every'\n       && lk != 67675               // 'catch' 'exit'\n       && lk != 68187               // 'catch' 'external'\n       && lk != 68699               // 'catch' 'first'\n       && lk != 69211               // 'catch' 'following'\n       && lk != 69723               // 'catch' 'following-sibling'\n       && lk != 70235               // 'catch' 'for'\n       && lk != 72283               // 'catch' 'ft-option'\n       && lk != 74331               // 'catch' 'function'\n       && lk != 75867               // 'catch' 'group'\n       && lk != 77915               // 'catch' 'if'\n       && lk != 78427               // 'catch' 'import'\n       && lk != 78939               // 'catch' 'in'\n       && lk != 79451               // 'catch' 'index'\n       && lk != 81499               // 'catch' 'insert'\n       && lk != 82523               // 'catch' 'integrity'\n       && lk != 83547               // 'catch' 'into'\n       && lk != 84571               // 'catch' 'item'\n       && lk != 85083               // 'catch' 'json'\n       && lk != 85595               // 'catch' 'json-item'\n       && lk != 87131               // 'catch' 'last'\n       && lk != 87643               // 'catch' 'lax'\n       && lk != 89179               // 'catch' 'let'\n       && lk != 90203               // 'catch' 'loop'\n       && lk != 92763               // 'catch' 'modify'\n       && lk != 93275               // 'catch' 'module'\n       && lk != 94299               // 'catch' 'namespace'\n       && lk != 94811               // 'catch' 'namespace-node'\n       && lk != 97883               // 'catch' 'node'\n       && lk != 98395               // 'catch' 'nodes'\n       && lk != 99419               // 'catch' 'object'\n       && lk != 101467              // 'catch' 'only'\n       && lk != 101979              // 'catch' 'option'\n       && lk != 103003              // 'catch' 'order'\n       && lk != 103515              // 'catch' 'ordered'\n       && lk != 104027              // 'catch' 'ordering'\n       && lk != 105563              // 'catch' 'parent'\n       && lk != 108635              // 'catch' 'preceding'\n       && lk != 109147              // 'catch' 'preceding-sibling'\n       && lk != 110683              // 'catch' 'processing-instruction'\n       && lk != 111707              // 'catch' 'rename'\n       && lk != 112219              // 'catch' 'replace'\n       && lk != 112731              // 'catch' 'return'\n       && lk != 113243              // 'catch' 'returning'\n       && lk != 113755              // 'catch' 'revalidation'\n       && lk != 114779              // 'catch' 'satisfies'\n       && lk != 115291              // 'catch' 'schema'\n       && lk != 115803              // 'catch' 'schema-attribute'\n       && lk != 116315              // 'catch' 'schema-element'\n       && lk != 116827              // 'catch' 'score'\n       && lk != 117339              // 'catch' 'self'\n       && lk != 119899              // 'catch' 'sliding'\n       && lk != 120411              // 'catch' 'some'\n       && lk != 120923              // 'catch' 'stable'\n       && lk != 121435              // 'catch' 'start'\n       && lk != 122971              // 'catch' 'strict'\n       && lk != 123995              // 'catch' 'structured-item'\n       && lk != 124507              // 'catch' 'switch'\n       && lk != 125019              // 'catch' 'text'\n       && lk != 128091              // 'catch' 'try'\n       && lk != 128603              // 'catch' 'tumbling'\n       && lk != 129115              // 'catch' 'type'\n       && lk != 129627              // 'catch' 'typeswitch'\n       && lk != 131163              // 'catch' 'unordered'\n       && lk != 131675              // 'catch' 'updating'\n       && lk != 133211              // 'catch' 'validate'\n       && lk != 133723              // 'catch' 'value'\n       && lk != 134235              // 'catch' 'variable'\n       && lk != 134747              // 'catch' 'version'\n       && lk != 136283              // 'catch' 'where'\n       && lk != 136795              // 'catch' 'while'\n       && lk != 138331              // 'catch' 'with'\n       && lk != 140379)             // 'catch' 'xquery'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchStatement\", e0);\n  }\n\n  function try_TryCatchStatement()\n  {\n    shiftT(250);                    // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockStatement();\n    lookahead1W(36);                // S^WS | '(:' | 'catch'\n    shiftT(91);                     // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_CatchErrorList();\n    try_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 91:                      // 'catch'\n        lookahead2W(278);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 38491               // 'catch' 'and'\n       || lk == 45659               // 'catch' 'cast'\n       || lk == 46171               // 'catch' 'castable'\n       || lk == 60507               // 'catch' 'div'\n       || lk == 65627               // 'catch' 'eq'\n       || lk == 67163               // 'catch' 'except'\n       || lk == 74843               // 'catch' 'ge'\n       || lk == 76891               // 'catch' 'gt'\n       || lk == 77403               // 'catch' 'idiv'\n       || lk == 82011               // 'catch' 'instance'\n       || lk == 83035               // 'catch' 'intersect'\n       || lk == 84059               // 'catch' 'is'\n       || lk == 88155               // 'catch' 'le'\n       || lk == 91227               // 'catch' 'lt'\n       || lk == 92251               // 'catch' 'mod'\n       || lk == 95323               // 'catch' 'ne'\n       || lk == 102491              // 'catch' 'or'\n       || lk == 127067              // 'catch' 'to'\n       || lk == 127579              // 'catch' 'treat'\n       || lk == 130139)             // 'catch' 'union'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            lookahead1W(36);        // S^WS | '(:' | 'catch'\n            shiftT(91);             // 'catch'\n            lookahead1W(256);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n            try_CatchErrorList();\n            try_BlockStatement();\n            memoize(8, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(8, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 2651                // 'catch' Wildcard\n       && lk != 3163                // 'catch' EQName^Token\n       && lk != 35931               // 'catch' 'after'\n       && lk != 36955               // 'catch' 'allowing'\n       && lk != 37467               // 'catch' 'ancestor'\n       && lk != 37979               // 'catch' 'ancestor-or-self'\n       && lk != 39515               // 'catch' 'append'\n       && lk != 40027               // 'catch' 'array'\n       && lk != 40539               // 'catch' 'as'\n       && lk != 41051               // 'catch' 'ascending'\n       && lk != 41563               // 'catch' 'at'\n       && lk != 42075               // 'catch' 'attribute'\n       && lk != 42587               // 'catch' 'base-uri'\n       && lk != 43099               // 'catch' 'before'\n       && lk != 43611               // 'catch' 'boundary-space'\n       && lk != 44123               // 'catch' 'break'\n       && lk != 45147               // 'catch' 'case'\n       && lk != 46683               // 'catch' 'catch'\n       && lk != 47707               // 'catch' 'child'\n       && lk != 48219               // 'catch' 'collation'\n       && lk != 49243               // 'catch' 'comment'\n       && lk != 49755               // 'catch' 'constraint'\n       && lk != 50267               // 'catch' 'construction'\n       && lk != 51803               // 'catch' 'context'\n       && lk != 52315               // 'catch' 'continue'\n       && lk != 52827               // 'catch' 'copy'\n       && lk != 53339               // 'catch' 'copy-namespaces'\n       && lk != 53851               // 'catch' 'count'\n       && lk != 54363               // 'catch' 'decimal-format'\n       && lk != 55387               // 'catch' 'declare'\n       && lk != 55899               // 'catch' 'default'\n       && lk != 56411               // 'catch' 'delete'\n       && lk != 56923               // 'catch' 'descendant'\n       && lk != 57435               // 'catch' 'descendant-or-self'\n       && lk != 57947               // 'catch' 'descending'\n       && lk != 61019               // 'catch' 'document'\n       && lk != 61531               // 'catch' 'document-node'\n       && lk != 62043               // 'catch' 'element'\n       && lk != 62555               // 'catch' 'else'\n       && lk != 63067               // 'catch' 'empty'\n       && lk != 63579               // 'catch' 'empty-sequence'\n       && lk != 64091               // 'catch' 'encoding'\n       && lk != 64603               // 'catch' 'end'\n       && lk != 66139               // 'catch' 'every'\n       && lk != 67675               // 'catch' 'exit'\n       && lk != 68187               // 'catch' 'external'\n       && lk != 68699               // 'catch' 'first'\n       && lk != 69211               // 'catch' 'following'\n       && lk != 69723               // 'catch' 'following-sibling'\n       && lk != 70235               // 'catch' 'for'\n       && lk != 72283               // 'catch' 'ft-option'\n       && lk != 74331               // 'catch' 'function'\n       && lk != 75867               // 'catch' 'group'\n       && lk != 77915               // 'catch' 'if'\n       && lk != 78427               // 'catch' 'import'\n       && lk != 78939               // 'catch' 'in'\n       && lk != 79451               // 'catch' 'index'\n       && lk != 81499               // 'catch' 'insert'\n       && lk != 82523               // 'catch' 'integrity'\n       && lk != 83547               // 'catch' 'into'\n       && lk != 84571               // 'catch' 'item'\n       && lk != 85083               // 'catch' 'json'\n       && lk != 85595               // 'catch' 'json-item'\n       && lk != 87131               // 'catch' 'last'\n       && lk != 87643               // 'catch' 'lax'\n       && lk != 89179               // 'catch' 'let'\n       && lk != 90203               // 'catch' 'loop'\n       && lk != 92763               // 'catch' 'modify'\n       && lk != 93275               // 'catch' 'module'\n       && lk != 94299               // 'catch' 'namespace'\n       && lk != 94811               // 'catch' 'namespace-node'\n       && lk != 97883               // 'catch' 'node'\n       && lk != 98395               // 'catch' 'nodes'\n       && lk != 99419               // 'catch' 'object'\n       && lk != 101467              // 'catch' 'only'\n       && lk != 101979              // 'catch' 'option'\n       && lk != 103003              // 'catch' 'order'\n       && lk != 103515              // 'catch' 'ordered'\n       && lk != 104027              // 'catch' 'ordering'\n       && lk != 105563              // 'catch' 'parent'\n       && lk != 108635              // 'catch' 'preceding'\n       && lk != 109147              // 'catch' 'preceding-sibling'\n       && lk != 110683              // 'catch' 'processing-instruction'\n       && lk != 111707              // 'catch' 'rename'\n       && lk != 112219              // 'catch' 'replace'\n       && lk != 112731              // 'catch' 'return'\n       && lk != 113243              // 'catch' 'returning'\n       && lk != 113755              // 'catch' 'revalidation'\n       && lk != 114779              // 'catch' 'satisfies'\n       && lk != 115291              // 'catch' 'schema'\n       && lk != 115803              // 'catch' 'schema-attribute'\n       && lk != 116315              // 'catch' 'schema-element'\n       && lk != 116827              // 'catch' 'score'\n       && lk != 117339              // 'catch' 'self'\n       && lk != 119899              // 'catch' 'sliding'\n       && lk != 120411              // 'catch' 'some'\n       && lk != 120923              // 'catch' 'stable'\n       && lk != 121435              // 'catch' 'start'\n       && lk != 122971              // 'catch' 'strict'\n       && lk != 123995              // 'catch' 'structured-item'\n       && lk != 124507              // 'catch' 'switch'\n       && lk != 125019              // 'catch' 'text'\n       && lk != 128091              // 'catch' 'try'\n       && lk != 128603              // 'catch' 'tumbling'\n       && lk != 129115              // 'catch' 'type'\n       && lk != 129627              // 'catch' 'typeswitch'\n       && lk != 131163              // 'catch' 'unordered'\n       && lk != 131675              // 'catch' 'updating'\n       && lk != 133211              // 'catch' 'validate'\n       && lk != 133723              // 'catch' 'value'\n       && lk != 134235              // 'catch' 'variable'\n       && lk != 134747              // 'catch' 'version'\n       && lk != 136283              // 'catch' 'where'\n       && lk != 136795              // 'catch' 'while'\n       && lk != 138331              // 'catch' 'with'\n       && lk != 140379)             // 'catch' 'xquery'\n      {\n        break;\n      }\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      shiftT(91);                   // 'catch'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CatchErrorList();\n      try_BlockStatement();\n    }\n  }\n\n  function parse_TypeswitchStatement()\n  {\n    eventHandler.startNonterminal(\"TypeswitchStatement\", e0);\n    shift(253);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"TypeswitchStatement\", e0);\n  }\n\n  function try_TypeswitchStatement()\n  {\n    shiftT(253);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_CaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_CaseStatement()\n  {\n    eventHandler.startNonterminal(\"CaseStatement\", e0);\n    shift(88);                      // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"CaseStatement\", e0);\n  }\n\n  function try_CaseStatement()\n  {\n    shiftT(88);                     // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_VarDeclStatement()\n  {\n    eventHandler.startNonterminal(\"VarDeclStatement\", e0);\n    for (;;)\n    {\n      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(262);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 52)                   // ':='\n    {\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n    }\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"VarDeclStatement\", e0);\n  }\n\n  function try_VarDeclStatement()\n  {\n    for (;;)\n    {\n      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(262);                    // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 52)                   // ':='\n    {\n      shiftT(52);                   // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shiftT(52);                 // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n      }\n    }\n    shiftT(53);                     // ';'\n  }\n\n  function parse_WhileStatement()\n  {\n    eventHandler.startNonterminal(\"WhileStatement\", e0);\n    shift(267);                     // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"WhileStatement\", e0);\n  }\n\n  function try_WhileStatement()\n  {\n    shiftT(267);                    // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_VoidStatement()\n  {\n    eventHandler.startNonterminal(\"VoidStatement\", e0);\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"VoidStatement\", e0);\n  }\n\n  function try_VoidStatement()\n  {\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ExprSingle()\n  {\n    eventHandler.startNonterminal(\"ExprSingle\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      parse_FLWORExpr();\n      break;\n    case 17560:                     // 'if' '('\n      parse_IfExpr();\n      break;\n    case 17651:                     // 'switch' '('\n      parse_SwitchExpr();\n      break;\n    case 141562:                    // 'try' '{'\n      parse_TryCatchExpr();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      parse_TypeswitchExpr();\n      break;\n    default:\n      parse_ExprSimple();\n    }\n    eventHandler.endNonterminal(\"ExprSingle\", e0);\n  }\n\n  function try_ExprSingle()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      try_FLWORExpr();\n      break;\n    case 17560:                     // 'if' '('\n      try_IfExpr();\n      break;\n    case 17651:                     // 'switch' '('\n      try_SwitchExpr();\n      break;\n    case 141562:                    // 'try' '{'\n      try_TryCatchExpr();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      try_TypeswitchExpr();\n      break;\n    default:\n      try_ExprSimple();\n    }\n  }\n\n  function parse_ExprSimple()\n  {\n    eventHandler.startNonterminal(\"ExprSimple\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'append'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 218:                       // 'rename'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 219:                       // 'replace'\n      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 110:                       // 'delete'\n    case 159:                       // 'insert'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 103:                       // 'copy'\n    case 129:                       // 'every'\n    case 235:                       // 'some'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 133851)               // 'replace' 'value'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ReplaceExpr();\n          lk = -6;\n        }\n        catch (p6A)\n        {\n          lk = -11;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(9, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 16001:                     // 'every' '$'\n    case 16107:                     // 'some' '$'\n      parse_QuantifiedExpr();\n      break;\n    case 97951:                     // 'insert' 'node'\n    case 98463:                     // 'insert' 'nodes'\n      parse_InsertExpr();\n      break;\n    case 97902:                     // 'delete' 'node'\n    case 98414:                     // 'delete' 'nodes'\n      parse_DeleteExpr();\n      break;\n    case 98010:                     // 'rename' 'node'\n      parse_RenameExpr();\n      break;\n    case -6:\n    case 98011:                     // 'replace' 'node'\n      parse_ReplaceExpr();\n      break;\n    case 15975:                     // 'copy' '$'\n      parse_TransformExpr();\n      break;\n    case 85102:                     // 'delete' 'json'\n      parse_JSONDeleteExpr();\n      break;\n    case 85151:                     // 'insert' 'json'\n      parse_JSONInsertExpr();\n      break;\n    case 85210:                     // 'rename' 'json'\n      parse_JSONRenameExpr();\n      break;\n    case -11:\n      parse_JSONReplaceExpr();\n      break;\n    case 85069:                     // 'append' 'json'\n      parse_JSONAppendExpr();\n      break;\n    default:\n      parse_OrExpr();\n    }\n    eventHandler.endNonterminal(\"ExprSimple\", e0);\n  }\n\n  function try_ExprSimple()\n  {\n    switch (l1)\n    {\n    case 77:                        // 'append'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 218:                       // 'rename'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 219:                       // 'replace'\n      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 110:                       // 'delete'\n    case 159:                       // 'insert'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 103:                       // 'copy'\n    case 129:                       // 'every'\n    case 235:                       // 'some'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 133851)               // 'replace' 'value'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ReplaceExpr();\n          memoize(9, e0A, -6);\n          lk = -13;\n        }\n        catch (p6A)\n        {\n          lk = -11;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(9, e0A, -11);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 16001:                     // 'every' '$'\n    case 16107:                     // 'some' '$'\n      try_QuantifiedExpr();\n      break;\n    case 97951:                     // 'insert' 'node'\n    case 98463:                     // 'insert' 'nodes'\n      try_InsertExpr();\n      break;\n    case 97902:                     // 'delete' 'node'\n    case 98414:                     // 'delete' 'nodes'\n      try_DeleteExpr();\n      break;\n    case 98010:                     // 'rename' 'node'\n      try_RenameExpr();\n      break;\n    case -6:\n    case 98011:                     // 'replace' 'node'\n      try_ReplaceExpr();\n      break;\n    case 15975:                     // 'copy' '$'\n      try_TransformExpr();\n      break;\n    case 85102:                     // 'delete' 'json'\n      try_JSONDeleteExpr();\n      break;\n    case 85151:                     // 'insert' 'json'\n      try_JSONInsertExpr();\n      break;\n    case 85210:                     // 'rename' 'json'\n      try_JSONRenameExpr();\n      break;\n    case -11:\n      try_JSONReplaceExpr();\n      break;\n    case 85069:                     // 'append' 'json'\n      try_JSONAppendExpr();\n      break;\n    case -13:\n      break;\n    default:\n      try_OrExpr();\n    }\n  }\n\n  function parse_JSONDeleteExpr()\n  {\n    eventHandler.startNonterminal(\"JSONDeleteExpr\", e0);\n    shift(110);                     // 'delete'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    eventHandler.endNonterminal(\"JSONDeleteExpr\", e0);\n  }\n\n  function try_JSONDeleteExpr()\n  {\n    shiftT(110);                    // 'delete'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n  }\n\n  function parse_JSONInsertExpr()\n  {\n    eventHandler.startNonterminal(\"JSONInsertExpr\", e0);\n    switch (l1)\n    {\n    case 159:                       // 'insert'\n      lookahead2W(56);              // S^WS | '(:' | 'json'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(10, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        shiftT(159);                // 'insert'\n        lookahead1W(56);            // S^WS | '(:' | 'json'\n        shiftT(166);                // 'json'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        shiftT(163);                // 'into'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          lookahead2W(69);          // S^WS | '(:' | 'position'\n          break;\n        default:\n          lk = l1;\n        }\n        if (lk == 108113)           // 'at' 'position'\n        {\n          lk = memoized(11, e0);\n          if (lk == 0)\n          {\n            var b0B = b0; var e0B = e0; var l1B = l1;\n            var b1B = b1; var e1B = e1; var l2B = l2;\n            var b2B = b2; var e2B = e2;\n            try\n            {\n              shiftT(81);           // 'at'\n              lookahead1W(69);      // S^WS | '(:' | 'position'\n              shiftT(211);          // 'position'\n              lookahead1W(266);     // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n              try_ExprSingle();\n              memoize(11, e0B, -1);\n            }\n            catch (p1B)\n            {\n              b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n              b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n              b2 = b2B; e2 = e2B; end = e2B; }}\n              memoize(11, e0B, -2);\n            }\n            lk = -2;\n          }\n        }\n        if (lk == -1)\n        {\n          shiftT(81);               // 'at'\n          lookahead1W(69);          // S^WS | '(:' | 'position'\n          shiftT(211);              // 'position'\n          lookahead1W(266);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n          try_ExprSingle();\n        }\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(10, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(159);                   // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shift(166);                   // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n      shift(163);                   // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(69);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 108113)             // 'at' 'position'\n      {\n        lk = memoized(11, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(81);             // 'at'\n            lookahead1W(69);        // S^WS | '(:' | 'position'\n            shiftT(211);            // 'position'\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(11, e0, lk);\n        }\n      }\n      if (lk == -1)\n      {\n        shift(81);                  // 'at'\n        lookahead1W(69);            // S^WS | '(:' | 'position'\n        shift(211);                 // 'position'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      break;\n    default:\n      shift(159);                   // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shift(166);                   // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PairConstructorList();\n      shift(163);                   // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"JSONInsertExpr\", e0);\n  }\n\n  function try_JSONInsertExpr()\n  {\n    switch (l1)\n    {\n    case 159:                       // 'insert'\n      lookahead2W(56);              // S^WS | '(:' | 'json'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(10, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        shiftT(159);                // 'insert'\n        lookahead1W(56);            // S^WS | '(:' | 'json'\n        shiftT(166);                // 'json'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        shiftT(163);                // 'into'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          lookahead2W(69);          // S^WS | '(:' | 'position'\n          break;\n        default:\n          lk = l1;\n        }\n        if (lk == 108113)           // 'at' 'position'\n        {\n          lk = memoized(11, e0);\n          if (lk == 0)\n          {\n            var b0B = b0; var e0B = e0; var l1B = l1;\n            var b1B = b1; var e1B = e1; var l2B = l2;\n            var b2B = b2; var e2B = e2;\n            try\n            {\n              shiftT(81);           // 'at'\n              lookahead1W(69);      // S^WS | '(:' | 'position'\n              shiftT(211);          // 'position'\n              lookahead1W(266);     // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n              try_ExprSingle();\n              memoize(11, e0B, -1);\n            }\n            catch (p1B)\n            {\n              b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n              b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n              b2 = b2B; e2 = e2B; end = e2B; }}\n              memoize(11, e0B, -2);\n            }\n            lk = -2;\n          }\n        }\n        if (lk == -1)\n        {\n          shiftT(81);               // 'at'\n          lookahead1W(69);          // S^WS | '(:' | 'position'\n          shiftT(211);              // 'position'\n          lookahead1W(266);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n          try_ExprSingle();\n        }\n        memoize(10, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(10, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(159);                  // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shiftT(166);                  // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n      shiftT(163);                  // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(69);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 108113)             // 'at' 'position'\n      {\n        lk = memoized(11, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(81);             // 'at'\n            lookahead1W(69);        // S^WS | '(:' | 'position'\n            shiftT(211);            // 'position'\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n            memoize(11, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(11, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1)\n      {\n        shiftT(81);                 // 'at'\n        lookahead1W(69);            // S^WS | '(:' | 'position'\n        shiftT(211);                // 'position'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n      }\n      break;\n    case -3:\n      break;\n    default:\n      shiftT(159);                  // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shiftT(166);                  // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PairConstructorList();\n      shiftT(163);                  // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_JSONRenameExpr()\n  {\n    eventHandler.startNonterminal(\"JSONRenameExpr\", e0);\n    shift(218);                     // 'rename'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(79);                      // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONRenameExpr\", e0);\n  }\n\n  function try_JSONRenameExpr()\n  {\n    shiftT(218);                    // 'rename'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(79);                     // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"JSONReplaceExpr\", e0);\n    shift(219);                     // 'replace'\n    lookahead1W(82);                // S^WS | '(:' | 'value'\n    shift(261);                     // 'value'\n    lookahead1W(64);                // S^WS | '(:' | 'of'\n    shift(196);                     // 'of'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(270);                     // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONReplaceExpr\", e0);\n  }\n\n  function try_JSONReplaceExpr()\n  {\n    shiftT(219);                    // 'replace'\n    lookahead1W(82);                // S^WS | '(:' | 'value'\n    shiftT(261);                    // 'value'\n    lookahead1W(64);                // S^WS | '(:' | 'of'\n    shiftT(196);                    // 'of'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(270);                    // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONAppendExpr()\n  {\n    eventHandler.startNonterminal(\"JSONAppendExpr\", e0);\n    shift(77);                      // 'append'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(163);                     // 'into'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONAppendExpr\", e0);\n  }\n\n  function try_JSONAppendExpr()\n  {\n    shiftT(77);                     // 'append'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(163);                    // 'into'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CommonContent()\n  {\n    eventHandler.startNonterminal(\"CommonContent\", e0);\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shift(12);                    // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shift(23);                    // CharRef\n      break;\n    case 277:                       // '{{'\n      shift(277);                   // '{{'\n      break;\n    case 283:                       // '}}'\n      shift(283);                   // '}}'\n      break;\n    default:\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CommonContent\", e0);\n  }\n\n  function try_CommonContent()\n  {\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shiftT(12);                   // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shiftT(23);                   // CharRef\n      break;\n    case 277:                       // '{{'\n      shiftT(277);                  // '{{'\n      break;\n    case 283:                       // '}}'\n      shiftT(283);                  // '}}'\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_ContentExpr()\n  {\n    eventHandler.startNonterminal(\"ContentExpr\", e0);\n    parse_StatementsAndExpr();\n    eventHandler.endNonterminal(\"ContentExpr\", e0);\n  }\n\n  function try_ContentExpr()\n  {\n    try_StatementsAndExpr();\n  }\n\n  function parse_CompDocConstructor()\n  {\n    eventHandler.startNonterminal(\"CompDocConstructor\", e0);\n    shift(119);                     // 'document'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompDocConstructor\", e0);\n  }\n\n  function try_CompDocConstructor()\n  {\n    shiftT(119);                    // 'document'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompAttrConstructor()\n  {\n    eventHandler.startNonterminal(\"CompAttrConstructor\", e0);\n    shift(82);                      // 'attribute'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(12, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(276);                   // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompAttrConstructor\", e0);\n  }\n\n  function try_CompAttrConstructor()\n  {\n    shiftT(82);                     // 'attribute'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          memoize(12, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(12, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(276);                  // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shiftT(282);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompPIConstructor()\n  {\n    eventHandler.startNonterminal(\"CompPIConstructor\", e0);\n    shift(216);                     // 'processing-instruction'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(13, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(13, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(276);                   // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompPIConstructor\", e0);\n  }\n\n  function try_CompPIConstructor()\n  {\n    shiftT(216);                    // 'processing-instruction'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_NCName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(13, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          memoize(13, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(13, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(276);                  // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shiftT(282);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"CompCommentConstructor\", e0);\n    shift(96);                      // 'comment'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompCommentConstructor\", e0);\n  }\n\n  function try_CompCommentConstructor()\n  {\n    shiftT(96);                     // 'comment'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompTextConstructor()\n  {\n    eventHandler.startNonterminal(\"CompTextConstructor\", e0);\n    shift(244);                     // 'text'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompTextConstructor\", e0);\n  }\n\n  function try_CompTextConstructor()\n  {\n    shiftT(244);                    // 'text'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_PrimaryExpr()\n  {\n    eventHandler.startNonterminal(\"PrimaryExpr\", e0);\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      lookahead2W(255);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 216:                       // 'processing-instruction'\n      lookahead2W(253);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 82:                        // 'attribute'\n    case 121:                       // 'element'\n      lookahead2W(258);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 96:                        // 'comment'\n    case 244:                       // 'text'\n      lookahead2W(93);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 256:                       // 'unordered'\n      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 93:                        // 'child'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 186:                       // 'ne'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 228:                       // 'score'\n    case 229:                       // 'self'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 36116                 // '{' 'after'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39700                 // '{' 'append'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40724                 // '{' 'as'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60692                 // '{' 'div'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74516                 // '{' 'function'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 76052                 // '{' 'group'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78612                 // '{' 'import'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83732                 // '{' 'into'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101652                // '{' 'only'\n     || lk == 102164                // '{' 'option'\n     || lk == 102676                // '{' 'or'\n     || lk == 103188                // '{' 'order'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112916                // '{' 'return'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 117012                // '{' 'score'\n     || lk == 117524                // '{' 'self'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120596                // '{' 'some'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121620                // '{' 'start'\n     || lk == 123156                // '{' 'strict'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124692                // '{' 'switch'\n     || lk == 125204                // '{' 'text'\n     || lk == 127252                // '{' 'to'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128276                // '{' 'try'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129300                // '{' 'type'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130324                // '{' 'union'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133908                // '{' 'value'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134932                // '{' 'version'\n     || lk == 136468                // '{' 'where'\n     || lk == 136980                // '{' 'while'\n     || lk == 138516                // '{' 'with'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(14, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_BlockExpr();\n          lk = -10;\n        }\n        catch (p10A)\n        {\n          lk = -11;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(14, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n      parse_Literal();\n      break;\n    case 31:                        // '$'\n      parse_VarRef();\n      break;\n    case 34:                        // '('\n      parse_ParenthesizedExpr();\n      break;\n    case 44:                        // '.'\n      parse_ContextItemExpr();\n      break;\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n      parse_FunctionCall();\n      break;\n    case 141514:                    // 'ordered' '{'\n      parse_OrderedExpr();\n      break;\n    case 141568:                    // 'unordered' '{'\n      parse_UnorderedExpr();\n      break;\n    case 32:                        // '%'\n    case 78:                        // 'array'\n    case 120:                       // 'document-node'\n    case 124:                       // 'empty-sequence'\n    case 145:                       // 'function'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15014:                     // 'json' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15034:                     // 'ne' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n      parse_FunctionItemExpr();\n      break;\n    case -10:\n    case 27412:                     // '{' ';'\n      parse_BlockExpr();\n      break;\n    case -11:\n      parse_ObjectConstructor();\n      break;\n    case 68:                        // '['\n      parse_ArrayConstructor();\n      break;\n    case 278:                       // '{|'\n      parse_JSONSimpleObjectUnion();\n      break;\n    default:\n      parse_Constructor();\n    }\n    eventHandler.endNonterminal(\"PrimaryExpr\", e0);\n  }\n\n  function try_PrimaryExpr()\n  {\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      lookahead2W(255);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 216:                       // 'processing-instruction'\n      lookahead2W(253);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 82:                        // 'attribute'\n    case 121:                       // 'element'\n      lookahead2W(258);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 96:                        // 'comment'\n    case 244:                       // 'text'\n      lookahead2W(93);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 256:                       // 'unordered'\n      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 93:                        // 'child'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 186:                       // 'ne'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 228:                       // 'score'\n    case 229:                       // 'self'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 36116                 // '{' 'after'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39700                 // '{' 'append'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40724                 // '{' 'as'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60692                 // '{' 'div'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74516                 // '{' 'function'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 76052                 // '{' 'group'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78612                 // '{' 'import'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83732                 // '{' 'into'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101652                // '{' 'only'\n     || lk == 102164                // '{' 'option'\n     || lk == 102676                // '{' 'or'\n     || lk == 103188                // '{' 'order'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112916                // '{' 'return'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 117012                // '{' 'score'\n     || lk == 117524                // '{' 'self'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120596                // '{' 'some'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121620                // '{' 'start'\n     || lk == 123156                // '{' 'strict'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124692                // '{' 'switch'\n     || lk == 125204                // '{' 'text'\n     || lk == 127252                // '{' 'to'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128276                // '{' 'try'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129300                // '{' 'type'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130324                // '{' 'union'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133908                // '{' 'value'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134932                // '{' 'version'\n     || lk == 136468                // '{' 'where'\n     || lk == 136980                // '{' 'while'\n     || lk == 138516                // '{' 'with'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(14, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_BlockExpr();\n          memoize(14, e0A, -10);\n          lk = -14;\n        }\n        catch (p10A)\n        {\n          lk = -11;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(14, e0A, -11);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n      try_Literal();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 34:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 44:                        // '.'\n      try_ContextItemExpr();\n      break;\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n      try_FunctionCall();\n      break;\n    case 141514:                    // 'ordered' '{'\n      try_OrderedExpr();\n      break;\n    case 141568:                    // 'unordered' '{'\n      try_UnorderedExpr();\n      break;\n    case 32:                        // '%'\n    case 78:                        // 'array'\n    case 120:                       // 'document-node'\n    case 124:                       // 'empty-sequence'\n    case 145:                       // 'function'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15014:                     // 'json' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15034:                     // 'ne' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n      try_FunctionItemExpr();\n      break;\n    case -10:\n    case 27412:                     // '{' ';'\n      try_BlockExpr();\n      break;\n    case -11:\n      try_ObjectConstructor();\n      break;\n    case 68:                        // '['\n      try_ArrayConstructor();\n      break;\n    case 278:                       // '{|'\n      try_JSONSimpleObjectUnion();\n      break;\n    case -14:\n      break;\n    default:\n      try_Constructor();\n    }\n  }\n\n  function parse_JSONSimpleObjectUnion()\n  {\n    eventHandler.startNonterminal(\"JSONSimpleObjectUnion\", e0);\n    shift(278);                     // '{|'\n    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 281)                  // '|}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(281);                     // '|}'\n    eventHandler.endNonterminal(\"JSONSimpleObjectUnion\", e0);\n  }\n\n  function try_JSONSimpleObjectUnion()\n  {\n    shiftT(278);                    // '{|'\n    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 281)                  // '|}'\n    {\n      try_Expr();\n    }\n    shiftT(281);                    // '|}'\n  }\n\n  function parse_ObjectConstructor()\n  {\n    eventHandler.startNonterminal(\"ObjectConstructor\", e0);\n    shift(276);                     // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_PairConstructorList();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ObjectConstructor\", e0);\n  }\n\n  function try_ObjectConstructor()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      try_PairConstructorList();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_PairConstructorList()\n  {\n    eventHandler.startNonterminal(\"PairConstructorList\", e0);\n    parse_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PairConstructor();\n    }\n    eventHandler.endNonterminal(\"PairConstructorList\", e0);\n  }\n\n  function try_PairConstructorList()\n  {\n    try_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PairConstructor();\n    }\n  }\n\n  function parse_PairConstructor()\n  {\n    eventHandler.startNonterminal(\"PairConstructor\", e0);\n    parse_ExprSingle();\n    shift(49);                      // ':'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"PairConstructor\", e0);\n  }\n\n  function try_PairConstructor()\n  {\n    try_ExprSingle();\n    shiftT(49);                     // ':'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_ArrayConstructor()\n  {\n    eventHandler.startNonterminal(\"ArrayConstructor\", e0);\n    shift(68);                      // '['\n    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 69)                   // ']'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(69);                      // ']'\n    eventHandler.endNonterminal(\"ArrayConstructor\", e0);\n  }\n\n  function try_ArrayConstructor()\n  {\n    shiftT(68);                     // '['\n    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 69)                   // ']'\n    {\n      try_Expr();\n    }\n    shiftT(69);                     // ']'\n  }\n\n  function parse_BlockExpr()\n  {\n    eventHandler.startNonterminal(\"BlockExpr\", e0);\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_StatementsAndOptionalExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"BlockExpr\", e0);\n  }\n\n  function try_BlockExpr()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_StatementsAndOptionalExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FunctionDecl()\n  {\n    eventHandler.startNonterminal(\"FunctionDecl\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(37);                      // ')'\n    lookahead1W(148);               // S^WS | '(:' | 'as' | 'external' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_ReturnType();\n    }\n    lookahead1W(118);               // S^WS | '(:' | 'external' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_StatementsAndOptionalExpr();\n      shift(282);                   // '}'\n      break;\n    default:\n      shift(133);                   // 'external'\n    }\n    eventHandler.endNonterminal(\"FunctionDecl\", e0);\n  }\n\n  function parse_ReturnType()\n  {\n    eventHandler.startNonterminal(\"ReturnType\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"ReturnType\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryParser.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function shiftT(t)\n  {\n    if (l1 == t)\n    {\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function skip(code)\n  {\n    var b0W = b0; var e0W = e0; var l1W = l1;\n    var b1W = b1; var e1W = e1;\n\n    l1 = code; b1 = begin; e1 = end;\n    l2 = 0;\n\n    try_Whitespace();\n\n    b0 = b0W; e0 = e0W; l1 = l1W; if (l1 != 0) {\n    b1 = b1W; e1 = e1W; }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      eventHandler.whitespace(e0, b1);\n      e0 = b1;\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 22)               // S^WS\n      {\n        if (code != 36)             // '(:'\n        {\n          break;\n        }\n        skip(code);\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2W(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = matchW(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = match(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function error(b, e, s, l, t)\n  {\n    if (e >= ex)\n    {\n      bx = b;\n      ex = e;\n      sx = s;\n      lx = l;\n      tx = t;\n    }\n    throw new self.ParseException(bx, ex, sx, lx, tx);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var l2, b2, e2;\n  var bx, ex, sx, lx, tx;\n  var eventHandler;\n  var memo;\n\n  function memoize(i, e, v)\n  {\n    memo[(e << 4) + i] = v;\n  }\n\n  function memoized(i, e)\n  {\n    var v = memo[(e << 4) + i];\n    return typeof v != \"undefined\" ? v : 0;\n  }\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryParser.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryParser.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryParser.MAP1[(c0 & 15) + XQueryParser.MAP1[(c1 & 31) + XQueryParser.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryParser.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryParser.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryParser.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryParser.TRANSITION[(i0 & 15) + XQueryParser.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryParser.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : XQueryParser.INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 284; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 3612 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryParser.EXPECTED[(i0 & 3) + XQueryParser.EXPECTED[(i1 & 3) + XQueryParser.EXPECTED[(i2 & 15) + XQueryParser.EXPECTED[i2 >> 4]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryParser.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryParser.MAP0 =\n[ 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 38, 30, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 38, 38\n];\n\nXQueryParser.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 355, 371, 387, 423, 423, 423, 415, 339, 331, 339, 331, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 440, 440, 440, 440, 440, 440, 440, 324, 339, 339, 339, 339, 339, 339, 339, 339, 401, 423, 423, 424, 422, 423, 423, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 38, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 38, 30, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 30, 30, 38, 38, 38, 38, 38, 38, 38, 69, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69\n];\n\nXQueryParser.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 38, 30, 38, 30, 30, 38\n];\n\nXQueryParser.INITIAL =\n[ 1, 12290, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286\n];\n\nXQueryParser.TRANSITION =\n[ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25307, 18176, 18180, 18180, 18180, 18210, 18180, 18180, 18180, 18180, 18222, 18180, 18180, 18180, 18180, 18198, 18180, 18182, 18238, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38623, 20771, 20784, 20796, 20808, 43870, 38625, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 28718, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19553, 19028, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22954, 20869, 38672, 38672, 38672, 37958, 38672, 38672, 36976, 20909, 20888, 38672, 38672, 38672, 38672, 39926, 20282, 20925, 20958, 38672, 38672, 38672, 43215, 38672, 38672, 25928, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 20997, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 21013, 21118, 38672, 38672, 38672, 24651, 38672, 38672, 44696, 38672, 42922, 38824, 21095, 21058, 21048, 21080, 21111, 48022, 20832, 38672, 38672, 38672, 43215, 21139, 38672, 25530, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 21157, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 18776, 18792, 20360, 18810, 18830, 18835, 19257, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38666, 38672, 38672, 38672, 21880, 38671, 38672, 36460, 38672, 21173, 38661, 21224, 38672, 21231, 38672, 42738, 42750, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 21247, 38672, 38672, 38672, 28875, 38672, 38672, 21266, 38672, 38672, 21288, 21300, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 31059, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 21316, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 18988, 50434, 18503, 18525, 21353, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 24749, 21390, 38672, 38672, 38672, 23220, 38672, 38672, 49687, 45814, 21411, 38672, 38672, 38672, 38672, 41859, 18366, 21448, 21478, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 21515, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 46185, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 21462, 21573, 21537, 21537, 21537, 21580, 21532, 21537, 21542, 21615, 21558, 21644, 21596, 21609, 21631, 21657, 21669, 21681, 20832, 38672, 38672, 38672, 21337, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 21697, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 30462, 38672, 38672, 38672, 22025, 23251, 38672, 22249, 23257, 42922, 30462, 38672, 21719, 21725, 21741, 21766, 21750, 21795, 38672, 38672, 38672, 46035, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 30475, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 24785, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 37115, 50393, 21856, 21832, 21850, 21834, 21872, 21896, 21908, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 21924, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 37301, 25812, 27394, 21985, 22003, 21985, 22017, 27392, 21987, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 42072, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 20981, 38672, 38672, 38672, 30470, 24643, 38672, 48413, 22054, 26165, 22041, 22070, 22074, 22074, 22090, 20979, 48442, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22114, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 47221, 22137, 22155, 22137, 22169, 47219, 22139, 22193, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 22230, 38672, 22247, 38672, 29641, 22265, 42072, 33771, 38672, 38672, 38672, 38672, 26929, 22475, 35267, 22475, 22475, 36544, 42277, 22411, 22411, 33858, 26727, 37227, 26727, 26727, 35540, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 18609, 24891, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 21432, 38031, 38672, 38672, 38672, 38672, 38672, 22291, 38672, 26931, 22311, 22475, 22475, 22475, 22475, 33849, 22352, 22411, 35447, 22411, 22411, 33324, 22381, 26727, 45449, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 30028, 38672, 38672, 22475, 36607, 22475, 22475, 28015, 33854, 22411, 22410, 22411, 22411, 27851, 26727, 45441, 26727, 26727, 22521, 33795, 38672, 38672, 22807, 38672, 38672, 28255, 22475, 22475, 38505, 29442, 22411, 22411, 34626, 26485, 26727, 26727, 26860, 26998, 22647, 38672, 38672, 22428, 26931, 48359, 22475, 42142, 32794, 22411, 28347, 37402, 26727, 22521, 32486, 38672, 18915, 38672, 22451, 22474, 36860, 37042, 22411, 22492, 22517, 22520, 26312, 34036, 26929, 42625, 42144, 35207, 26975, 22537, 26310, 35759, 22589, 36765, 22624, 22640, 22663, 22685, 22706, 39617, 42139, 28345, 26456, 39814, 47009, 22727, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 23092, 42922, 38672, 38672, 38672, 38672, 38672, 31140, 31152, 22751, 38672, 38672, 38672, 43215, 38672, 38672, 26131, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 27937, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 40144, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 18609, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 22803, 38672, 38672, 38672, 22886, 38672, 38672, 38672, 38672, 42922, 36439, 22823, 22844, 22866, 22878, 36438, 22828, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 41329, 38672, 22902, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 22923, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 23115, 42922, 38672, 38672, 38672, 38672, 38672, 26339, 22940, 22970, 38672, 38672, 38672, 43215, 38672, 38672, 23007, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 47631, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 48650, 23029, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 42723, 23085, 38672, 38672, 38672, 38672, 38672, 23048, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 23072, 23108, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 46833, 22411, 22411, 22411, 22411, 22411, 47864, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 43252, 33854, 22411, 22411, 22411, 22411, 48185, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 18878, 38672, 38672, 38672, 35592, 32963, 38672, 38672, 23153, 42922, 37950, 35335, 23190, 23196, 23212, 38672, 41919, 23236, 23274, 38672, 38672, 45078, 23291, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 25157, 23483, 23350, 24209, 23309, 45351, 38672, 18269, 42564, 28228, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19821, 23376, 23336, 23369, 23392, 24203, 23434, 23465, 24172, 23726, 19833, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 18729, 23481, 23642, 24581, 23499, 23504, 24048, 23353, 23520, 23933, 23353, 24164, 23917, 24518, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 23536, 23854, 23815, 23561, 23577, 23632, 24450, 24255, 23689, 23658, 23674, 23716, 23742, 24268, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 23773, 23804, 23842, 24040, 23870, 23886, 23449, 23700, 23902, 23320, 23949, 23992, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 24027, 23545, 23592, 24064, 24137, 24459, 24094, 24110, 23407, 20069, 47383, 20010, 46515, 35979, 20039, 20679, 24126, 24567, 24482, 24153, 24188, 23616, 24225, 20191, 20207, 20223, 20259, 20298, 20337, 24284, 24078, 24374, 24300, 24330, 24314, 23418, 20424, 20452, 20468, 24361, 23826, 23606, 24390, 24419, 20532, 24435, 24475, 24498, 24628, 20608, 23750, 23928, 24403, 20644, 23757, 24508, 20660, 20054, 24345, 20695, 24537, 24597, 24613, 24552, 23788, 24240, 23964, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 39906, 38672, 38672, 38672, 30470, 24672, 38672, 38672, 24667, 26611, 24688, 24695, 24695, 24695, 24711, 26910, 24735, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 24765, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 20739, 24828, 48943, 18855, 18871, 18894, 40258, 24858, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19087, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 24876, 24922, 24938, 19905, 19631, 19046, 24954, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 24970, 18446, 19976, 19994, 19525, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 21250, 35576, 24999, 24999, 24999, 35584, 31668, 31680, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 25271, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 19887, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 50381, 27744, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 40452, 25015, 25015, 25015, 25023, 27746, 40454, 20832, 25047, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 25065, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 20310, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 50286, 50295, 38672, 38672, 38672, 23056, 38672, 38672, 38672, 38672, 42922, 44048, 25088, 25088, 25088, 25096, 46630, 44050, 25120, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 18699, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 25136, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 25152, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25173, 38672, 38672, 38672, 38672, 30470, 25218, 38672, 38672, 21395, 32346, 38672, 38672, 38672, 25210, 25237, 21393, 25221, 25256, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 22214, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19206, 20349, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 41563, 25293, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 34976, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 25437, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 30057, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 25455, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 40102, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 49130, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25482, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25500, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38220, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 25563, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 28464, 25582, 25594, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 21426, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25610, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 44752, 25631, 25649, 25671, 25683, 44753, 25633, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 35735, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 25717, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 31997, 38672, 25754, 25760, 25776, 23293, 41839, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 25800, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 25828, 20548, 20592, 20589, 50171, 25844, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 25049, 38672, 38672, 38672, 22098, 25865, 25896, 25377, 25881, 25913, 30410, 30418, 25964, 25978, 25990, 26006, 26018, 25344, 45647, 38672, 26034, 48091, 26052, 33210, 26086, 26116, 26153, 26223, 35321, 26181, 25701, 26211, 26248, 26264, 43583, 44602, 26280, 26296, 26329, 38672, 38672, 38672, 30176, 26355, 38925, 41958, 22850, 24803, 38672, 44654, 30480, 22475, 22475, 22475, 36601, 25393, 22411, 22411, 43601, 22690, 26727, 26727, 26727, 39641, 30990, 39463, 38672, 43148, 28319, 38672, 29724, 26374, 19326, 38672, 38672, 32428, 40296, 38574, 45608, 22475, 22475, 26394, 26439, 26475, 26509, 22411, 37859, 28780, 26529, 38451, 26727, 26727, 43300, 45056, 22573, 30349, 25414, 26545, 38672, 26563, 38672, 40287, 48411, 38672, 26599, 35364, 28653, 26627, 31403, 45616, 49789, 33849, 44356, 22411, 30609, 28411, 41138, 33324, 35718, 26727, 47625, 44193, 29223, 41749, 42781, 38094, 28940, 38672, 21816, 21032, 26644, 38672, 47420, 26664, 22475, 41307, 22336, 31195, 39296, 22411, 22411, 26685, 31454, 47988, 26726, 26727, 30787, 32911, 36940, 26744, 38697, 46064, 38672, 26779, 26799, 26821, 22787, 22475, 23131, 26837, 37515, 22411, 36778, 26853, 26876, 26727, 33519, 46887, 26926, 38672, 38672, 26931, 37355, 35081, 26947, 38899, 38878, 26969, 48550, 26727, 26994, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 38555, 27014, 22600, 47761, 48246, 27057, 27076, 27094, 27113, 28343, 26456, 27133, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 27153, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 39378, 27172, 38672, 27196, 27202, 27218, 27234, 27246, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 27262, 42259, 26453, 27284, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 46100, 48405, 27326, 25277, 38672, 38672, 28258, 22475, 22475, 22475, 37137, 27346, 22411, 22411, 22411, 22411, 39760, 37334, 26727, 26727, 26727, 26727, 27410, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 27435, 38672, 38672, 33108, 38672, 49441, 22475, 22475, 22475, 38002, 42895, 22411, 22411, 22411, 22411, 27454, 27481, 26727, 26727, 26727, 43058, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 46997, 37168, 35831, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 27504, 38672, 38672, 22098, 38672, 27541, 38672, 27559, 23976, 27578, 27586, 27602, 27617, 27629, 27645, 27657, 25344, 38672, 38672, 27676, 44992, 38672, 22924, 38672, 38672, 38672, 38672, 38672, 38672, 27673, 50511, 27692, 47251, 26513, 26453, 41246, 27710, 25375, 29768, 38672, 38672, 32334, 38672, 27740, 38672, 27762, 27784, 38672, 25948, 27789, 27805, 27821, 22475, 22475, 27840, 27878, 22411, 22411, 22690, 27915, 27931, 26727, 26727, 30990, 39463, 44557, 38672, 38672, 44934, 38672, 38225, 48405, 33126, 27953, 38672, 38672, 27694, 47073, 35424, 37245, 22475, 35786, 48497, 47338, 42686, 30280, 22411, 37334, 37394, 27977, 27995, 43743, 26727, 32919, 30349, 25414, 38672, 38672, 24003, 38672, 30096, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 28013, 28031, 33849, 22411, 22411, 22411, 28053, 28070, 33324, 26727, 26727, 26727, 28092, 28109, 32918, 41804, 28131, 38672, 38672, 49206, 38672, 28149, 38672, 22475, 22475, 22475, 22780, 33754, 33854, 22411, 22411, 42031, 22411, 31454, 26727, 26727, 26727, 28171, 22521, 33795, 38672, 38672, 31346, 38672, 46687, 21493, 22475, 28191, 22475, 23131, 22411, 30274, 22411, 36778, 26727, 35228, 26727, 31599, 28213, 38672, 38672, 38672, 28250, 28274, 47411, 42142, 28296, 31494, 28347, 36728, 31954, 22521, 26313, 38672, 38672, 28317, 27136, 22475, 28335, 22411, 36897, 26977, 26727, 22564, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 28363, 28379, 28427, 28480, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 28504, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 24521, 38672, 38672, 22098, 38672, 28530, 45484, 38672, 46575, 28549, 28557, 28573, 28587, 28595, 28611, 28623, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 19750, 26547, 38672, 26546, 19755, 28639, 42141, 48492, 27360, 44280, 27268, 25375, 29257, 27180, 28679, 29641, 21703, 38672, 25730, 38672, 38083, 42329, 28697, 28734, 27137, 27824, 36531, 43498, 28750, 22608, 46434, 28774, 46408, 28796, 28814, 28833, 26727, 28849, 39463, 38672, 38672, 38672, 25738, 38672, 29761, 48405, 38672, 38672, 38672, 19698, 28258, 22475, 22475, 22475, 27023, 35786, 22411, 22411, 22411, 22411, 28891, 37334, 26727, 26727, 26727, 26727, 28912, 43066, 28929, 28956, 38672, 38672, 33876, 38672, 28992, 48411, 38672, 38672, 29009, 29030, 27032, 22475, 22475, 22669, 33849, 29109, 45393, 22411, 22411, 32729, 33324, 29133, 37067, 26727, 26727, 34717, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 29157, 38672, 29181, 22475, 22475, 29202, 33754, 43112, 22411, 22411, 32083, 22411, 34472, 29222, 26727, 26727, 29239, 22521, 33795, 38672, 29256, 29273, 38672, 29294, 28255, 32383, 27117, 29315, 23131, 44876, 34578, 42252, 36778, 44915, 26727, 29337, 26998, 46887, 21810, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 29370, 38672, 27136, 22475, 29387, 22411, 41041, 26977, 26727, 43751, 26312, 34036, 26929, 22475, 42144, 22411, 29411, 29240, 26310, 35759, 22476, 22411, 26978, 48196, 29430, 26953, 38544, 39617, 34809, 33567, 37775, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38673, 29464, 38672, 22098, 22435, 29483, 38672, 29506, 26195, 29530, 29540, 29556, 29570, 29582, 29598, 29610, 25344, 38672, 29626, 25072, 29668, 50094, 29711, 40102, 40331, 29748, 21064, 29784, 29812, 29843, 29873, 29903, 29919, 29957, 26423, 29973, 30010, 25375, 30044, 30091, 38782, 30112, 30134, 26137, 30161, 38672, 38672, 26583, 38672, 26929, 39099, 30212, 36878, 44806, 30228, 43650, 28758, 46842, 30244, 46765, 30296, 30317, 30336, 30384, 39463, 20089, 31354, 30434, 38799, 41183, 30450, 30496, 38672, 30542, 30564, 29278, 30580, 39823, 30631, 28663, 42103, 30647, 30685, 30712, 30766, 30811, 30837, 34161, 30878, 30901, 34681, 30930, 30980, 31006, 31022, 25414, 31049, 38672, 18321, 49090, 31075, 31094, 31128, 34195, 32584, 46802, 31168, 22475, 33645, 42347, 31190, 47486, 31211, 22411, 47598, 49959, 31232, 32841, 31257, 26727, 39569, 42011, 31278, 31335, 49499, 35851, 39273, 31370, 43966, 34186, 21188, 33468, 37601, 29186, 31389, 31426, 42239, 40895, 22411, 31442, 31481, 31454, 31519, 31539, 30795, 31561, 31595, 33795, 38672, 48757, 39401, 38672, 30196, 28255, 39519, 43549, 31615, 23131, 34822, 47675, 31635, 36778, 22546, 47769, 31572, 26998, 46887, 39201, 31656, 18290, 31696, 31734, 31750, 31772, 31808, 31845, 31869, 31903, 37385, 31919, 31970, 26378, 18593, 32021, 48908, 39526, 44237, 32042, 32063, 32099, 48723, 41712, 26312, 41270, 26929, 22475, 32144, 22411, 32167, 44894, 26310, 32185, 46276, 40692, 44326, 31465, 20435, 32208, 32228, 32248, 32274, 32295, 32319, 32362, 32399, 32415, 28257, 28345, 26459, 32457, 32473, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 32509, 38672, 22098, 32530, 32548, 43771, 30190, 32600, 32630, 38672, 32616, 32654, 32662, 32678, 32690, 25344, 38672, 38672, 48277, 43215, 38672, 38672, 38672, 38672, 29732, 38672, 38672, 32706, 29731, 26036, 33631, 42208, 32724, 38438, 44280, 27268, 25375, 21272, 38672, 38672, 31985, 38672, 38672, 38672, 26576, 32745, 36837, 38672, 26929, 32766, 22475, 22475, 22475, 32810, 32857, 22411, 22411, 22690, 27419, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 40108, 38672, 28258, 22475, 22475, 22475, 42113, 35786, 22411, 22411, 22411, 22411, 32877, 37334, 26727, 26727, 26727, 26728, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 32026, 38672, 26931, 22475, 22475, 46869, 22475, 22475, 33849, 22411, 22411, 39678, 22411, 22411, 33324, 26727, 26727, 41099, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 30118, 38672, 22475, 22475, 22475, 42121, 33754, 33854, 22411, 22411, 48685, 22411, 31454, 26727, 26727, 26727, 46758, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 36404, 38672, 38672, 38672, 44299, 22475, 42143, 31823, 22411, 32169, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 27097, 32897, 36362, 47020, 32935, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 25031, 38672, 38672, 43445, 32979, 32987, 33003, 33009, 33025, 33041, 33053, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 29467, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 33069, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 33103, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 33124, 38672, 18284, 28258, 22475, 22475, 22475, 22475, 40837, 22411, 22411, 22411, 22411, 22411, 34394, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 33142, 38672, 33163, 42808, 38672, 42803, 38566, 22475, 22475, 37994, 22475, 22475, 33849, 22411, 22411, 47479, 22411, 22411, 33324, 26727, 26727, 31312, 26727, 26727, 41720, 33181, 38672, 38672, 34958, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 34949, 49071, 38672, 28255, 22475, 22475, 29048, 29442, 22411, 22411, 43834, 26485, 26727, 26727, 49882, 26998, 33184, 33200, 40222, 33234, 22991, 22475, 33277, 33313, 50063, 43479, 33349, 26727, 33377, 32128, 26313, 33405, 26648, 22985, 33423, 33443, 35387, 48797, 34523, 33492, 40922, 33514, 26312, 34036, 46959, 32375, 33535, 33554, 33575, 35236, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 28488, 33591, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 32005, 38672, 38672, 33617, 38672, 38672, 38672, 30064, 38672, 30073, 38672, 30064, 33661, 30069, 38721, 42958, 22411, 33692, 33700, 33716, 25375, 38672, 38672, 25941, 29641, 33732, 20082, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 33752, 25393, 22411, 22411, 23137, 22690, 26727, 26727, 26727, 49362, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25615, 38672, 33770, 28258, 22475, 22475, 22475, 22475, 40491, 22411, 22411, 22411, 22411, 22411, 40736, 26727, 26727, 26727, 26727, 26727, 33787, 33803, 33407, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 33819, 48351, 22475, 22475, 22475, 22475, 33849, 46363, 22411, 22411, 22411, 22411, 33324, 48523, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 48282, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33840, 33854, 22411, 22411, 22411, 28403, 27851, 26727, 26727, 26727, 43360, 22521, 33795, 38672, 38672, 42813, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 33874, 21141, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 33892, 34036, 21208, 22475, 46215, 22411, 33914, 26727, 33935, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 42795, 38672, 22098, 25439, 25194, 32493, 40646, 40656, 38304, 38312, 33959, 33974, 33986, 34002, 34014, 25344, 38672, 38672, 38672, 49261, 33079, 38672, 38672, 23275, 34030, 34052, 38672, 34078, 34127, 34177, 34211, 38408, 34239, 34258, 29354, 34285, 25375, 38672, 38672, 36069, 29641, 38672, 34301, 38672, 38672, 38672, 34327, 24011, 26929, 47957, 34366, 22475, 34410, 34439, 34460, 34488, 32881, 44853, 22711, 39788, 26727, 49664, 34508, 39463, 38672, 28969, 45656, 28681, 19706, 18253, 38672, 26070, 26232, 47650, 46594, 28258, 42618, 22475, 45107, 34547, 44588, 22411, 34575, 22411, 34594, 34618, 34642, 27997, 26727, 35481, 34668, 34697, 32919, 33803, 38672, 38672, 38672, 44387, 34733, 34759, 38672, 38672, 38672, 26931, 34796, 22475, 22475, 22475, 34845, 34862, 31216, 22411, 22411, 37262, 22411, 34878, 31262, 26727, 26727, 28913, 26727, 34894, 33802, 38672, 34931, 35005, 30145, 35033, 35049, 30548, 35079, 26669, 35097, 35117, 35142, 44418, 22411, 35167, 35192, 43624, 31718, 26727, 43013, 39321, 47169, 35252, 30750, 31033, 38672, 35289, 35307, 35357, 32192, 22475, 35380, 35403, 34559, 22411, 35440, 35463, 30821, 35479, 35497, 35530, 35556, 35608, 38672, 38672, 24906, 47811, 35630, 37839, 28037, 35670, 48379, 27078, 35705, 48704, 22521, 26313, 33898, 38672, 35734, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 28514, 35751, 26929, 35782, 35802, 36916, 32303, 49941, 26310, 49171, 22476, 22411, 26978, 48196, 35867, 35883, 35899, 35915, 42139, 28345, 26456, 28257, 28343, 26456, 35951, 36348, 35941, 33538, 36362, 36357, 34905, 35967, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 33252, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 20573, 33260, 46302, 45557, 36019, 36031, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 34780, 22475, 25393, 22411, 22411, 36047, 22690, 26727, 26727, 36130, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 20243, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 36066, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 45849, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 36085, 22475, 22475, 22475, 22475, 33849, 36106, 22411, 22411, 22411, 22411, 33324, 36126, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 19729, 38672, 22098, 38672, 39473, 38672, 44217, 36146, 36184, 36196, 36212, 36218, 36234, 36250, 36262, 25344, 38672, 36278, 38672, 43215, 38672, 25421, 18575, 38672, 27438, 38672, 38672, 46139, 36299, 48111, 34141, 26409, 36335, 39145, 44169, 36378, 36420, 36455, 38672, 29371, 36476, 38672, 27543, 38672, 36498, 35844, 31373, 34743, 36516, 40527, 36565, 29321, 36586, 36623, 36646, 22411, 36676, 29093, 36714, 29346, 28817, 43388, 36750, 36802, 37724, 36836, 38672, 38672, 38672, 26061, 38672, 38672, 38672, 38672, 38672, 28258, 36853, 42951, 22475, 36876, 38513, 34492, 36894, 36913, 40984, 22411, 43282, 35514, 28798, 26727, 43717, 26727, 36932, 33803, 38672, 38672, 36956, 38672, 38672, 18909, 32575, 38672, 38672, 26931, 22475, 22475, 41976, 35273, 36992, 33849, 22411, 22411, 45307, 44424, 37025, 33324, 26727, 26727, 40875, 39885, 37058, 32918, 33802, 34967, 38672, 38672, 32750, 38672, 38672, 38672, 22475, 38401, 22475, 22475, 28015, 33854, 34444, 22411, 22411, 22411, 27851, 26727, 37091, 26727, 26727, 22521, 33795, 37110, 34940, 38672, 46173, 45770, 29014, 37131, 22475, 22475, 37153, 29988, 22411, 22411, 37195, 37219, 26727, 26727, 36392, 46887, 38346, 38672, 39265, 26931, 22475, 37243, 42142, 22411, 37261, 28347, 26727, 37278, 22521, 26313, 38672, 37296, 38672, 27136, 22475, 37317, 22411, 48861, 26977, 26727, 48595, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 35925, 29395, 39608, 37350, 37371, 26459, 33538, 37783, 48331, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 41939, 38672, 22098, 38672, 25566, 38672, 38672, 29887, 39046, 39054, 37418, 37432, 37440, 37456, 37468, 25500, 38672, 37493, 38672, 43215, 38672, 28533, 38672, 38672, 27562, 38672, 38672, 37494, 37484, 23258, 20853, 42141, 37510, 47612, 44280, 27268, 25375, 38672, 29490, 38672, 29641, 38672, 37531, 37550, 38672, 38672, 38672, 37570, 27517, 39732, 22475, 40520, 37590, 25393, 37627, 22412, 37898, 37646, 31523, 26727, 48530, 31241, 31792, 37683, 37699, 24812, 38672, 37723, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 37740, 22475, 37799, 22475, 35786, 45030, 31853, 36110, 22411, 22411, 37334, 31545, 34712, 40790, 26727, 26727, 32919, 33803, 38672, 21024, 48965, 38672, 38672, 33943, 28155, 37816, 38672, 26931, 46335, 37834, 22475, 27041, 22475, 34377, 49011, 37855, 22411, 33297, 22411, 27890, 39339, 37875, 26727, 27899, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 48203, 38672, 38672, 38672, 26931, 29057, 22475, 42142, 32786, 22411, 28347, 22555, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 37895, 26977, 49110, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 37914, 31619, 41895, 26978, 37938, 37974, 41757, 45432, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 36549, 37075, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 25240, 38672, 24719, 38672, 46651, 38018, 25104, 38054, 38118, 38157, 38142, 38161, 38126, 38177, 38189, 25344, 38672, 45759, 49561, 49547, 38205, 49199, 38672, 38241, 38259, 34062, 38289, 38328, 38371, 38273, 38387, 38424, 38467, 39556, 38529, 27268, 25375, 40213, 38672, 38672, 38590, 21779, 38672, 38614, 38641, 21123, 43234, 38689, 38713, 41522, 39725, 26628, 22475, 25393, 38737, 22411, 29117, 22690, 32232, 31319, 26727, 38753, 34652, 38772, 35341, 38672, 38798, 38815, 38672, 38672, 40618, 38672, 38672, 38672, 38840, 33601, 40485, 22475, 38858, 22475, 35786, 47683, 38876, 40856, 22411, 22411, 37334, 32114, 26727, 42187, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 24776, 38672, 36500, 33087, 26755, 48300, 22475, 22475, 22475, 46796, 41600, 49410, 22411, 22411, 22411, 38894, 29994, 47730, 26727, 26727, 26727, 46465, 44085, 32918, 33802, 38915, 38949, 38972, 38992, 38672, 39015, 39031, 44824, 39070, 29039, 39086, 28015, 33854, 39115, 39131, 22365, 39171, 27851, 40395, 48234, 48581, 49654, 22521, 39190, 33147, 39225, 26763, 39254, 38337, 41515, 31410, 48668, 36570, 39289, 44624, 49920, 36050, 39312, 46490, 26727, 39337, 39355, 46887, 39394, 38672, 20942, 22766, 22475, 39417, 21499, 22411, 39448, 25398, 26727, 39489, 22521, 47568, 38672, 38672, 46680, 45512, 39505, 42143, 39542, 32076, 39585, 39633, 39657, 35567, 35614, 26929, 29075, 42144, 39674, 26975, 39694, 26310, 35759, 35126, 47451, 29414, 27465, 39712, 39748, 39776, 39804, 46246, 41657, 47873, 28257, 28343, 26456, 28257, 28345, 26459, 39839, 39865, 36357, 34905, 30398, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 39901, 22098, 38672, 30368, 39922, 38672, 45211, 39942, 39950, 39966, 39980, 39988, 40004, 40016, 25344, 35063, 40032, 40048, 40074, 25784, 40124, 38672, 40160, 20023, 50351, 40199, 40238, 40274, 40312, 49237, 40347, 40363, 36660, 40411, 40427, 25375, 38672, 40443, 18661, 36161, 37534, 38672, 18669, 43864, 38672, 38672, 44690, 26929, 22475, 37009, 40470, 40507, 25393, 22411, 40543, 31503, 45950, 26727, 47993, 40578, 40601, 30990, 39463, 38672, 44715, 38672, 38672, 40617, 29165, 40634, 41441, 21201, 19353, 22907, 40672, 45368, 47429, 22475, 22475, 40708, 37034, 28896, 40724, 22411, 47891, 41633, 40762, 35506, 40782, 26727, 47175, 32919, 22394, 40806, 38672, 38654, 32566, 38672, 38672, 38672, 38672, 48740, 26931, 22475, 38860, 22475, 40833, 22475, 33849, 22411, 41060, 22411, 40853, 22411, 33324, 26727, 38756, 26727, 40872, 26727, 32918, 33802, 38672, 38672, 20973, 45998, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 22458, 40891, 22411, 22411, 22411, 22411, 40911, 26727, 26727, 26727, 26727, 22501, 33795, 23174, 18332, 38672, 38672, 38672, 40938, 22475, 40962, 22475, 40684, 22411, 40981, 22411, 31782, 26727, 49841, 26727, 26998, 28442, 38672, 38672, 38672, 26931, 41000, 41019, 42142, 41039, 41057, 28347, 41076, 41095, 22521, 44039, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 34915, 34036, 27330, 41115, 29084, 41137, 35817, 26727, 27724, 35759, 41154, 41218, 41701, 41262, 41286, 47258, 44155, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 28115, 33538, 27862, 36357, 34905, 46290, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 26904, 22098, 38672, 38672, 41323, 22275, 41345, 40139, 38672, 26358, 41381, 41394, 41410, 41422, 25344, 38672, 38672, 45842, 43215, 38672, 38672, 38672, 41438, 50256, 38672, 22231, 41440, 45848, 38672, 34773, 41457, 34829, 39879, 41487, 27268, 25375, 38102, 38672, 38672, 29641, 38672, 41538, 41554, 33261, 38672, 38672, 36430, 26929, 41579, 35101, 34846, 45533, 41616, 41649, 40556, 45401, 41673, 41736, 41773, 26727, 41789, 40746, 42656, 41831, 38672, 41855, 41875, 32532, 32708, 46542, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 41594, 22475, 35786, 22411, 22411, 22411, 41893, 22411, 37334, 26727, 26727, 37094, 26727, 26727, 32919, 27373, 41911, 29299, 38672, 38672, 38672, 41935, 25466, 38672, 41955, 26931, 22475, 41121, 41974, 22475, 22475, 34152, 22411, 46370, 41992, 22411, 22411, 30778, 26727, 31887, 42009, 26727, 26727, 32918, 33802, 38243, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 48461, 22475, 28015, 42027, 22411, 22411, 42047, 22411, 37764, 26727, 26727, 48819, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 22208, 38672, 18340, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 28175, 42067, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 30944, 42088, 42137, 42160, 42180, 48196, 42203, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 31078, 38672, 38672, 32435, 32438, 32441, 42224, 25897, 46967, 28280, 42275, 42293, 31579, 27268, 42319, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 46624, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 41023, 22411, 22411, 22411, 22411, 22411, 42864, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 42345, 42143, 29941, 22411, 26977, 42363, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 44743, 22177, 38672, 38672, 27385, 38672, 45876, 42383, 22121, 42412, 42425, 42433, 42449, 42461, 25344, 38672, 32955, 42527, 43215, 18706, 42477, 42499, 33244, 42519, 38672, 42543, 40174, 42559, 42580, 42605, 42641, 42672, 40377, 42708, 42766, 25375, 38672, 38672, 38672, 42829, 42880, 42911, 43973, 27961, 38672, 38672, 23013, 42938, 22475, 42974, 41003, 39432, 42995, 32861, 22411, 36698, 35176, 43029, 43292, 26727, 43049, 43082, 43138, 38672, 38672, 38672, 25328, 43172, 43191, 38672, 43210, 28234, 38672, 43231, 48341, 22475, 43250, 22475, 22325, 43268, 47118, 39174, 22411, 22411, 43316, 43332, 43358, 40585, 26727, 37280, 43376, 43410, 33803, 38672, 38672, 41815, 45184, 39238, 30360, 38672, 43434, 50186, 43461, 43495, 48777, 43514, 43538, 22475, 43573, 43599, 31640, 43617, 43640, 22411, 43666, 43692, 49367, 43710, 43733, 26727, 47922, 33802, 43767, 38672, 38672, 43787, 43812, 38672, 43850, 50024, 43886, 43557, 22475, 28015, 33854, 43908, 34242, 22411, 22411, 27851, 46470, 43935, 44079, 26727, 39658, 43953, 38672, 43989, 21331, 38672, 38672, 33824, 22475, 22475, 49385, 34223, 22411, 22411, 22411, 44011, 26727, 26727, 26727, 44027, 46887, 19958, 38672, 38672, 50007, 22475, 22475, 28197, 22411, 22411, 44066, 26727, 26727, 44101, 26313, 20872, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26890, 47793, 44124, 44140, 44185, 44209, 20435, 28340, 26976, 33389, 44233, 44253, 44277, 44296, 28343, 26456, 28257, 28345, 26459, 44315, 44342, 38482, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 18636, 22098, 44386, 29857, 38069, 44372, 44403, 44440, 44464, 44480, 44494, 44510, 44526, 44538, 25344, 44554, 46908, 38672, 40088, 38672, 38672, 41365, 38672, 43156, 26783, 26781, 47212, 47203, 34311, 44573, 42979, 44618, 41232, 44280, 27268, 44640, 44676, 38672, 44712, 29827, 28456, 38672, 38672, 38672, 44731, 44769, 38672, 40058, 44785, 40965, 44822, 22475, 44840, 44869, 48063, 22411, 22690, 39155, 44892, 44910, 26727, 30990, 39463, 38672, 44931, 38672, 44950, 44971, 38672, 38672, 38672, 38672, 38672, 44987, 28258, 45008, 41301, 22475, 22475, 37611, 28054, 22411, 45028, 22411, 22411, 45046, 30301, 30320, 26727, 26727, 28093, 30742, 33803, 38672, 38672, 45072, 32638, 30075, 38672, 46548, 37818, 38672, 42396, 22475, 22475, 47037, 45094, 33476, 49452, 22411, 22411, 49585, 32047, 36630, 35654, 26727, 26727, 39696, 33919, 26493, 44108, 45157, 32514, 38672, 49604, 38672, 38672, 38672, 45200, 22475, 22475, 43892, 45227, 28015, 33854, 22411, 41993, 40562, 22411, 27851, 26727, 26727, 32834, 45248, 22521, 33795, 38672, 22295, 45267, 19361, 38672, 28255, 36090, 22475, 45286, 43473, 42051, 22411, 45304, 43005, 43694, 26727, 49877, 26998, 46887, 38672, 50299, 46144, 45323, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 49054, 26313, 45345, 36168, 40817, 45367, 22475, 45384, 22411, 30669, 26977, 26727, 45417, 45465, 36482, 45500, 45528, 32279, 22411, 44261, 26727, 45549, 35759, 34423, 35689, 37179, 48196, 20435, 28340, 26976, 27310, 33427, 47309, 26456, 32258, 46222, 29141, 45599, 45573, 45589, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 42503, 22098, 38672, 38672, 19843, 38672, 45632, 29682, 29695, 45672, 45688, 45703, 45719, 45731, 25344, 25697, 36820, 25484, 43215, 48936, 33218, 45747, 38933, 25691, 45794, 45830, 45905, 45865, 45892, 45921, 30595, 45937, 41471, 45980, 45966, 25375, 45996, 46014, 46030, 34093, 38672, 38672, 46051, 24794, 46090, 46124, 46160, 46201, 46238, 46262, 46318, 46334, 46351, 46386, 26710, 46424, 30615, 39597, 40389, 46450, 46486, 30259, 41502, 46506, 46564, 38672, 46591, 46610, 46646, 38672, 45270, 33165, 46667, 46703, 46719, 46781, 46818, 46866, 45012, 35786, 47344, 42692, 28076, 22411, 34531, 37334, 42303, 43342, 43676, 26727, 37661, 41688, 46885, 38672, 46904, 39209, 44660, 46924, 28976, 46946, 38672, 30957, 20847, 49903, 46983, 47036, 22475, 47053, 33288, 31829, 47089, 22411, 22411, 47105, 35219, 43394, 47140, 26727, 26727, 47156, 32918, 33802, 47191, 38672, 41877, 37707, 38672, 50210, 38598, 47237, 45288, 47274, 47290, 28015, 43827, 47306, 47325, 28394, 29934, 30696, 36786, 37667, 47360, 43033, 22521, 43418, 47376, 50112, 38672, 38355, 49147, 28255, 47399, 22475, 22475, 47445, 47467, 34602, 22411, 47502, 47526, 50046, 26727, 47556, 46887, 36283, 49516, 38672, 48840, 29206, 44799, 47584, 47703, 30662, 30727, 45251, 31880, 34269, 39367, 47647, 38672, 49567, 38494, 40946, 47666, 47699, 47719, 39849, 48630, 47746, 32945, 47785, 47809, 47827, 47850, 47889, 47907, 48880, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 49752, 49772, 47949, 47973, 48009, 48038, 49034, 30862, 33538, 36362, 36357, 47933, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 48079, 38672, 38672, 48107, 38672, 19671, 30510, 30518, 48127, 30518, 30526, 48143, 48155, 25344, 38672, 38672, 38672, 44955, 38672, 29647, 38672, 38672, 38672, 38672, 29652, 46888, 38672, 38672, 45329, 35643, 48171, 30851, 45141, 48219, 48262, 38672, 38672, 38672, 29641, 38672, 38672, 50200, 50208, 38672, 38672, 38672, 48298, 33458, 22475, 22475, 22475, 48316, 48375, 22411, 22411, 28301, 37203, 26727, 26727, 26727, 30914, 41169, 48395, 38672, 34989, 34103, 38672, 38672, 38672, 48429, 38672, 34985, 36969, 28258, 49732, 31174, 47066, 48458, 46734, 22411, 37326, 35682, 48477, 41625, 48513, 26727, 48546, 48566, 33498, 48611, 32919, 33803, 38672, 32557, 38672, 48646, 38672, 38672, 38672, 19786, 38672, 26931, 22475, 48666, 22475, 22475, 22475, 32777, 22411, 48684, 22411, 22411, 22411, 31945, 26727, 48701, 26727, 26727, 26727, 32918, 33361, 38672, 45778, 38672, 38672, 38672, 38672, 41194, 35417, 22475, 22475, 22475, 28015, 42844, 22411, 22411, 22411, 22411, 27851, 48720, 26727, 26727, 26727, 22521, 33795, 48739, 38672, 38672, 48756, 38672, 35766, 48773, 22475, 22475, 45119, 48793, 22411, 42164, 43122, 48813, 26727, 43937, 26998, 46887, 48835, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 43522, 42144, 48856, 26975, 48877, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 20436, 32151, 30885, 28257, 28345, 26459, 33538, 22735, 48896, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 48924, 48962, 36314, 45181, 38672, 50538, 38672, 45169, 48959, 38038, 34111, 48981, 48993, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 27525, 42141, 49009, 31292, 44280, 27268, 25375, 38672, 36812, 40252, 29641, 38672, 38672, 38672, 38672, 43194, 38672, 38672, 26929, 45232, 22475, 37800, 22475, 25393, 49027, 22411, 46850, 22690, 27979, 26727, 26727, 49050, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 49070, 38672, 38672, 49087, 38672, 28258, 22475, 49810, 22475, 22475, 35786, 22411, 22411, 34386, 22411, 22411, 37334, 26727, 26727, 49106, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 49126, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 49146, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 49163, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 49187, 38672, 21516, 38672, 20816, 49222, 49253, 38672, 49277, 49291, 49304, 49320, 49332, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 31934, 32212, 26453, 47540, 49348, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 43175, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 35291, 38672, 38672, 38672, 36319, 22475, 22475, 22475, 22475, 22475, 31707, 22411, 22411, 22411, 22411, 22411, 45130, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38842, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 49383, 22475, 49401, 33854, 22411, 42856, 22411, 47124, 27851, 26727, 41079, 26727, 26727, 49426, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25610, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 41202, 49468, 49480, 25344, 38672, 38672, 38672, 43215, 49496, 38672, 49515, 38672, 38672, 46071, 46074, 38672, 49532, 28993, 37922, 42141, 49583, 32824, 44280, 27268, 25375, 38672, 38672, 46108, 29641, 46524, 46533, 49601, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 49620, 37001, 25393, 22411, 29448, 22411, 49639, 26727, 26727, 48625, 36734, 30990, 43097, 49680, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 49703, 38672, 38672, 26931, 22475, 22475, 49727, 22475, 22475, 48053, 22411, 22411, 49748, 22411, 22411, 46748, 26727, 26727, 49768, 26727, 26727, 32918, 33802, 20903, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 49788, 22475, 22475, 28015, 33854, 26700, 22411, 22411, 22411, 27851, 42367, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 45477, 38672, 38672, 43215, 38672, 38672, 49711, 38672, 38672, 38672, 49707, 38672, 38672, 27156, 49805, 37753, 37630, 26453, 49986, 49826, 25375, 38672, 20236, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 28133, 26929, 22475, 22475, 22475, 47834, 25393, 22411, 22411, 22411, 49862, 26727, 26727, 26727, 37879, 30990, 39463, 38672, 45808, 38672, 38672, 38672, 38672, 38672, 38672, 29514, 38672, 38672, 28258, 49898, 22475, 31756, 22475, 35786, 22411, 49919, 22411, 36688, 22411, 37334, 40766, 26727, 26727, 49936, 26727, 32919, 33803, 38672, 25655, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 37984, 22475, 22475, 22475, 35151, 22411, 46398, 22411, 22411, 22411, 43919, 26727, 31302, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38999, 38672, 22475, 22475, 26805, 22475, 49623, 33854, 22411, 22411, 49957, 22411, 49975, 26727, 26727, 47510, 26727, 49846, 33795, 38672, 38672, 18612, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 30025, 38672, 38672, 50002, 26931, 50023, 22475, 27060, 22411, 22411, 28347, 50040, 26727, 22521, 26313, 38672, 40323, 38672, 27136, 29066, 42143, 22411, 50062, 26977, 27488, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 41360, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 34339, 19585, 19583, 40183, 33676, 50079, 27766, 27768, 50110, 33673, 34350, 50128, 50140, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 25515, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 20613, 18794, 19200, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 18475, 50434, 18503, 18525, 50156, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 20273, 38672, 42922, 31104, 31112, 50226, 50240, 50248, 42483, 50272, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 25547, 38672, 38672, 25544, 18953, 18958, 18794, 35998, 18531, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 42589, 38672, 38672, 38672, 38672, 24842, 35017, 50315, 50319, 50335, 50343, 43995, 50367, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 25359, 38672, 38672, 23171, 38672, 38672, 38672, 23167, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19075, 50434, 18503, 18525, 50409, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38956, 38672, 38672, 29796, 50456, 50460, 50460, 50482, 38955, 50476, 50498, 38672, 38672, 38672, 38672, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 38672, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 18475, 50434, 18503, 18525, 50156, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 50527, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 26100, 20548, 20592, 20589, 50171, 18953, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 94505, 94505, 90408, 90408, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 1, 12290, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 0, 94505, 90408, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 364, 94505, 90408, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 69632, 73728, 94505, 94505, 94505, 94505, 94505, 65536, 94505, 3, 0, 0, 2183168, 0, 0, 0, 90408, 94505, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 1636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1645, 0, 0, 2732032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2904064, 2908160, 0, 0, 0, 0, 0, 1699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2963, 0, 0, 0, 0, 0, 2424832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625536, 0, 0, 0, 0, 0, 2045, 0, 0, 0, 0, 2049, 0, 0, 0, 0, 0, 0, 0, 2711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2976, 0, 534, 534, 534, 534, 534, 2699264, 2715648, 0, 0, 2772992, 2805760, 2830336, 0, 2863104, 2920448, 0, 0, 0, 0, 0, 0, 0, 303, 303, 303, 303, 0, 303, 303, 303, 303, 0, 2805760, 2920448, 0, 0, 0, 0, 0, 2920448, 0, 0, 0, 0, 0, 0, 0, 2732032, 0, 2179072, 2179072, 2179072, 2179072, 2424832, 2433024, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3125248, 2625536, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2699264, 2179072, 2715648, 2179072, 2723840, 2179072, 2732032, 2772992, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2551808, 2125824, 2125824, 2125824, 2125824, 2125824, 2637824, 2125824, 2179072, 2179072, 2805760, 2179072, 2830336, 2179072, 2179072, 2863104, 2179072, 2179072, 2179072, 2179072, 2920448, 2179072, 2179072, 2179072, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 0, 2502656, 0, 0, 3010560, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2699264, 2125824, 2715648, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2805760, 2125824, 2830336, 2125824, 2125824, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1142784, 0, 2179072, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 975, 2125824, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 735, 0, 741, 0, 0, 0, 2789376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3137, 0, 0, 2142208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2733, 0, 2662400, 0, 2813952, 0, 0, 0, 0, 2375680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 351, 352, 0, 0, 0, 0, 2584576, 0, 0, 0, 0, 2838528, 0, 0, 2838528, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 2891776, 0, 0, 0, 0, 0, 2392064, 2412544, 0, 0, 2838528, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2408448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 0, 2126724, 2126724, 2617344, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2662400, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2584576, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2801664, 2813952, 2179072, 2838528, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 1798, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2801664, 2813952, 2125824, 2838528, 2125824, 2813952, 2125824, 2838528, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3125248, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2822144, 0, 0, 2883584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3080192, 3100672, 3104768, 0, 0, 0, 0, 3186688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 2797568, 0, 0, 0, 0, 0, 0, 0, 2850816, 2867200, 0, 0, 2883584, 0, 0, 0, 0, 0, 2072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3134, 0, 0, 0, 0, 2465792, 0, 0, 2719744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3014656, 3207168, 0, 2691072, 0, 0, 3215360, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2461696, 2465792, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2523136, 2179072, 2179072, 2179072, 0, 1342, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2600960, 2179072, 2179072, 2179072, 2179072, 2641920, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 1047, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 2125824, 2125824, 3072000, 2125824, 2125824, 2125824, 3121152, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2179072, 2179072, 2719744, 2179072, 2179072, 2179072, 2179072, 2179072, 2768896, 2777088, 2781184, 2797568, 2822144, 2179072, 2179072, 2179072, 0, 900, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 298, 0, 299, 0, 302, 0, 303, 0, 0, 0, 2473984, 2478080, 2179072, 3063808, 2179072, 2179072, 2179072, 2179072, 3100672, 2179072, 2179072, 3133440, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2551808, 2179072, 2179072, 2179072, 2179072, 2179072, 2637824, 2179072, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2719744, 2125824, 2125824, 2125824, 2125824, 2125824, 2768896, 2777088, 2781184, 2797568, 2822144, 2125824, 2125824, 2125824, 2883584, 2179072, 2912256, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3039232, 2125824, 2912256, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3039232, 2125824, 2125824, 0, 2125824, 2126799, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 245760, 0, 0, 2179072, 2125824, 2125824, 3063808, 2125824, 2125824, 2125824, 2125824, 2125824, 3100672, 2125824, 2125824, 3133440, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 2457600, 2179072, 2179072, 2179072, 2179072, 2457600, 2125824, 2125824, 2125824, 3207168, 2125824, 0, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1894, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 0, 2924544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162112, 3170304, 0, 0, 3219456, 3035136, 0, 0, 0, 0, 0, 3072000, 2650112, 0, 0, 2809856, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 1654, 0, 2686976, 2736128, 0, 0, 2531328, 2707456, 0, 3190784, 0, 0, 2576384, 0, 0, 0, 0, 0, 0, 0, 1688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2742, 0, 0, 0, 0, 0, 0, 0, 3121152, 3141632, 0, 0, 0, 2924544, 0, 2682880, 0, 0, 0, 0, 0, 0, 3112960, 2387968, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2453504, 2179072, 2473984, 2482176, 2179072, 2179072, 2179072, 0, 901, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2531328, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2605056, 2179072, 2629632, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2527232, 2125824, 2125824, 2125824, 2125824, 2125824, 3092480, 2125824, 2527232, 2125824, 2650112, 2179072, 2179072, 2179072, 2707456, 2179072, 2736128, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2887680, 2179072, 2125824, 2125824, 2125824, 2125824, 2441216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2932736, 2179072, 2924544, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3035136, 2179072, 2179072, 3072000, 2179072, 2125824, 2658304, 2973696, 2125824, 2125824, 2658304, 2973696, 2125824, 2711552, 2560000, 2179072, 2560000, 2125824, 2560000, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 975, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 1047, 0, 0, 2179072, 2125824, 2125824, 2179072, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 2125824, 2125824, 3190784, 3194880, 2125824, 0, 0, 0, 0, 0, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2887680, 2125824, 2125824, 2924544, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2125824, 2125824, 3190784, 3194880, 2125824, 2179072, 2125824, 2125824, 2179072, 2125824, 2125824, 2179072, 2125824, 2125824, 2985984, 2985984, 2985984, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 419, 419, 0, 0, 65536, 419, 2179072, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 0, 0, 0, 0, 0, 0, 0, 1701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1624, 0, 0, 0, 0, 0, 0, 0, 3022848, 0, 0, 3145728, 0, 3203072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, 3067904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2445312, 0, 2842624, 0, 0, 0, 2637824, 0, 0, 0, 0, 2621440, 0, 0, 0, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2727936, 0, 0, 0, 3084288, 3182592, 2899968, 0, 2961408, 0, 0, 2179072, 2179072, 2416640, 2179072, 2179072, 2179072, 2445312, 2179072, 2179072, 2179072, 0, 901, 2126724, 2126724, 2126724, 2126724, 2126724, 2425732, 2433924, 2126724, 2126724, 2126724, 2126724, 2458574, 2126798, 2126798, 2126798, 2126798, 2183168, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 396, 0, 0, 2179072, 2179072, 2179072, 2727936, 2752512, 2179072, 2179072, 2179072, 2842624, 2846720, 2179072, 2895872, 2916352, 2179072, 2179072, 2945024, 2179072, 2179072, 2994176, 2179072, 3002368, 2179072, 2179072, 3022848, 2179072, 3067904, 3084288, 3096576, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 237568, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2605056, 2125824, 2629632, 2125824, 2125824, 2650112, 2125824, 2125824, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 3223552, 0, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2125824, 2600960, 2125824, 2125824, 2125824, 2125824, 2641920, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2940, 0, 2637824, 2125824, 2125824, 2125824, 2125824, 2727936, 2752512, 2125824, 2125824, 2125824, 2125824, 2842624, 2846720, 2125824, 2895872, 2916352, 2125824, 2125824, 2125824, 2125824, 2945024, 2125824, 2125824, 2994176, 2125824, 3002368, 2125824, 2125824, 3022848, 2125824, 3067904, 3084288, 2125824, 3096576, 2125824, 2125824, 0, 0, 0, 2928640, 0, 0, 0, 3059712, 0, 2543616, 2666496, 0, 2633728, 0, 0, 0, 0, 0, 0, 766, 767, 0, 0, 0, 754, 0, 0, 774, 0, 2179072, 2179072, 2179072, 2494464, 2179072, 2179072, 2514944, 2179072, 2179072, 2179072, 2543616, 2547712, 2179072, 2179072, 2596864, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 2593668, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126798, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1564, 0, 1566, 0, 0, 0, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2928640, 2125824, 2125824, 2125824, 2998272, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 2125824, 2125824, 2502656, 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2543616, 2547712, 2125824, 2125824, 2596864, 2125824, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3178496, 2179072, 2125824, 2125824, 2179072, 2126724, 2126724, 2126798, 2126798, 2441216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2932736, 2965504, 0, 0, 3076096, 0, 0, 2695168, 3174400, 2646016, 2613248, 2703360, 0, 0, 0, 0, 2977792, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 0, 0, 0, 2740224, 0, 0, 0, 0, 0, 0, 1106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 2469888, 2506752, 2756608, 0, 0, 2580480, 0, 0, 0, 0, 0, 0, 1146880, 0, 1146880, 0, 0, 0, 0, 0, 0, 0, 302, 302, 302, 302, 0, 302, 302, 302, 302, 0, 2396160, 2400256, 2179072, 2179072, 2441216, 2179072, 2469888, 2179072, 2179072, 2179072, 2519040, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 241664, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 2179072, 2125824, 2125824, 2179072, 2179072, 2125824, 2125824, 2125824, 2588672, 2179072, 2613248, 2646016, 2179072, 2179072, 2695168, 2756608, 2179072, 2179072, 2179072, 2932736, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 245760, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2584576, 2125824, 2125824, 2125824, 2125824, 2125824, 2617344, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2396160, 2400256, 2125824, 2125824, 2441216, 2125824, 2469888, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2613248, 2646016, 2125824, 2125824, 2695168, 2756608, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 0, 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3503, 2953216, 0, 0, 2826240, 3158016, 2428928, 0, 3018752, 2764800, 2572288, 0, 0, 3051520, 2179072, 2428928, 2437120, 2179072, 2486272, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2654208, 2678784, 2760704, 2764800, 2854912, 2969600, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2654208, 2678784, 2760704, 2764800, 2785280, 2854912, 2969600, 2125824, 3006464, 2125824, 3018752, 2125824, 2125824, 2125824, 2125824, 3149824, 2179072, 3051520, 2125824, 3051520, 2125824, 3051520, 0, 2490368, 2498560, 0, 0, 0, 0, 2875392, 0, 0, 0, 3132, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3137536, 2125824, 2125824, 2125824, 2125824, 2457600, 2125824, 2125824, 2125824, 2125824, 2183168, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 333, 0, 0, 2125824, 3137536, 2125824, 2125824, 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3132, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2126725, 2125824, 2125824, 2125824, 2502656, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2125824, 2125824, 2502656, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2126724, 2126724, 2503556, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3117056, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2928640, 2179072, 2179072, 2179072, 2998272, 2179072, 2179072, 3031040, 0, 0, 0, 2179072, 2449408, 2179072, 2535424, 2179072, 2609152, 2179072, 2859008, 2179072, 2179072, 2179072, 3031040, 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2125824, 2449408, 2125824, 2125824, 2125824, 2125824, 2461696, 2465792, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2523136, 2125824, 2125824, 2125824, 298, 0, 0, 0, 298, 0, 299, 0, 0, 0, 299, 0, 302, 2125824, 2125824, 2125824, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 3026944, 2539520, 0, 2949120, 2179072, 2658304, 2973696, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 452, 452, 111044, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 452, 111044, 111044, 111044, 111044, 111044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 360, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2124, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 847, 534, 534, 861, 534, 534, 0, 302, 118784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3127, 0, 0, 0, 302, 0, 0, 0, 302, 119197, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 302, 0, 0, 0, 0, 302, 302, 302, 302, 302, 302, 0, 0, 0, 0, 0, 302, 0, 302, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2966, 0, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 33396, 299, 0, 2134016, 49784, 303, 0, 0, 0, 0, 0, 2428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 302, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 2105631, 12290, 3, 0, 0, 293, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 790, 0, 793, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 147456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148, 0, 0, 0, 0, 1067, 1071, 0, 0, 1075, 1079, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 131072, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2479, 2437, 0, 0, 0, 0, 0, 2484, 0, 0, 0, 0, 0, 0, 1675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3260, 0, 0, 534, 534, 534, 131072, 0, 0, 131072, 131072, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 131072, 0, 0, 131072, 0, 0, 0, 0, 0, 135168, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225708, 0, 0, 0, 135168, 0, 0, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 135168, 0, 135168, 135168, 135168, 135168, 135168, 135168, 0, 135168, 135168, 135168, 135168, 135168, 135168, 0, 0, 0, 0, 0, 135168, 0, 135168, 1, 12290, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 629, 630, 0, 2134016, 633, 634, 0, 0, 0, 0, 0, 2725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200245, 2200245, 2200245, 0, 0, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 1434, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2506752, 2506752, 2506752, 0, 303, 139264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 303, 0, 0, 0, 303, 69632, 139681, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2013, 0, 0, 0, 0, 303, 303, 303, 303, 303, 303, 0, 0, 0, 0, 0, 303, 0, 303, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 33399, 0, 2134016, 302, 49787, 0, 0, 0, 0, 0, 2763, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 3020, 556, 556, 556, 61440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 300, 300, 300, 143660, 370, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 300, 300, 143660, 300, 300, 300, 143730, 300, 300, 300, 143730, 69632, 73728, 300, 300, 143660, 300, 300, 65536, 300, 300, 0, 0, 300, 300, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 300, 365, 300, 0, 143660, 300, 300, 300, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 300, 300, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 143730, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 300, 143660, 143660, 143660, 143660, 300, 143660, 143660, 143660, 143660, 143660, 143660, 300, 0, 300, 0, 300, 300, 300, 143660, 300, 143660, 143660, 143660, 143660, 143660, 143730, 143660, 143730, 143730, 143730, 143730, 143730, 143730, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 1, 12290, 0, 0, 0, 0, 2200245, 2200245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1154, 0, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 0, 12290, 0, 0, 0, 0, 155648, 0, 155648, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 1148, 0, 0, 0, 0, 0, 0, 0, 0, 1157, 3, 0, 0, 2183168, 126976, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2446, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 131072, 131072, 25155, 0, 0, 0, 159744, 0, 0, 0, 25155, 25155, 25155, 159744, 25155, 25155, 25155, 25155, 25155, 25155, 25155, 159744, 159744, 159744, 159744, 25155, 159744, 25155, 1, 12290, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 24576, 975, 2125824, 2125824, 2125824, 2125824, 3092480, 0, 0, 0, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2449408, 0, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2527232, 0, 0, 0, 2179072, 2527232, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 1, 12290, 167936, 167936, 167936, 0, 0, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 155648, 0, 172032, 172032, 0, 172032, 0, 0, 172032, 172032, 0, 172032, 0, 0, 0, 0, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 172032, 172032, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 1, 288, 3, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 1, 0, 176128, 176128, 176128, 0, 0, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 347, 3, 78114, 78114, 292, 0, 627, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 78114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 1102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 1146, 0, 0, 0, 0, 1151, 0, 0, 0, 0, 0, 0, 0, 346, 0, 404, 0, 0, 0, 0, 0, 404, 0, 0, 0, 2098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2717, 0, 0, 534, 2135, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2147, 534, 534, 534, 534, 534, 534, 1775, 534, 534, 534, 1780, 534, 534, 534, 534, 534, 534, 534, 2545, 534, 534, 534, 534, 534, 534, 0, 2549, 2220, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2232, 556, 556, 556, 556, 556, 556, 2590, 556, 556, 556, 556, 556, 556, 2598, 556, 556, 2307, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2319, 580, 580, 580, 0, 0, 0, 2006, 0, 1069, 0, 0, 0, 2008, 0, 1073, 0, 2573, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1396, 0, 0, 2955, 0, 0, 0, 2959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 372, 0, 0, 0, 534, 3150, 534, 534, 534, 3153, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2547, 534, 534, 534, 0, 0, 3161, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 580, 3206, 580, 580, 580, 3209, 580, 580, 580, 580, 580, 580, 580, 580, 2679, 580, 580, 580, 534, 580, 556, 534, 580, 580, 3217, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 580, 580, 3309, 580, 580, 580, 580, 3310, 3311, 580, 580, 580, 580, 580, 580, 580, 580, 2875, 580, 580, 580, 580, 580, 580, 580, 580, 3071, 580, 580, 580, 580, 580, 580, 580, 580, 3233, 580, 580, 580, 580, 534, 580, 556, 1993, 534, 534, 534, 1997, 556, 556, 556, 2001, 534, 534, 534, 3339, 534, 534, 534, 534, 534, 534, 3345, 534, 534, 534, 534, 556, 3407, 556, 3409, 556, 556, 556, 556, 556, 556, 556, 556, 1373, 556, 556, 556, 556, 556, 556, 556, 3364, 556, 580, 580, 580, 580, 580, 580, 3370, 580, 580, 580, 580, 580, 580, 3376, 580, 580, 580, 3380, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2925, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 3391, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2198, 534, 2200, 534, 534, 534, 534, 534, 534, 3406, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 556, 556, 3422, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1449, 580, 580, 580, 580, 580, 580, 580, 3522, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 3585, 534, 556, 556, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2973, 0, 0, 2975, 0, 0, 534, 534, 2980, 534, 534, 534, 534, 534, 534, 2532, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2793, 534, 534, 534, 534, 534, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2732, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 192965, 0, 1, 12290, 192965, 192965, 192965, 0, 0, 192965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 192965, 192965, 192965, 192965, 192965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1582, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 406, 406, 406, 406, 406, 406, 0, 0, 0, 0, 0, 406, 0, 406, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118784, 298, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 301, 302, 303, 0, 0, 0, 0, 0, 3142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2978, 534, 534, 534, 534, 0, 0, 0, 0, 733, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 0, 0, 0, 1244, 0, 0, 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2871296, 0, 0, 1171, 1171, 0, 0, 0, 1175, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 253952, 0, 0, 0, 0, 580, 580, 580, 1540, 2005, 0, 0, 0, 0, 1546, 2007, 0, 0, 0, 0, 1552, 0, 0, 0, 1558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 2009, 0, 0, 0, 0, 1558, 2011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2549, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1410, 556, 556, 556, 556, 556, 0, 306, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 1155072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2705, 0, 0, 0, 0, 0, 204800, 204800, 0, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 205106, 204800, 204800, 205105, 205106, 204800, 205105, 205105, 204800, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 299, 0, 0, 0, 0, 0, 3, 0, 0, 2183794, 0, 0, 0, 0, 0, 298, 299, 151552, 2134016, 302, 303, 0, 0, 0, 0, 0, 155648, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 151552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3036110, 2126798, 2126798, 3072974, 2126798, 2126798, 2126798, 3122126, 2700164, 2126724, 2716548, 2126724, 2724740, 2126724, 2732932, 2773892, 2126724, 2126724, 2126724, 2806660, 2126724, 2831236, 2126724, 2126724, 973, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2864004, 2126724, 2126724, 2126724, 2126724, 2921348, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2626436, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3117956, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 0, 975, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3224526, 2179072, 2126798, 2126724, 2179072, 2179072, 2126724, 2126724, 2126798, 2126798, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 2126798, 2126798, 2126798, 2626510, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2700238, 2126798, 2716622, 2126798, 2724814, 2126798, 2126798, 2126798, 2126798, 2126798, 2454478, 2126798, 2474958, 2483150, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2532302, 2733006, 2773966, 2126798, 2126798, 2126798, 2806734, 2126798, 2831310, 2126798, 2126798, 2864078, 2126798, 2126798, 2126798, 2126798, 2921422, 2126724, 2409348, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2814852, 2126724, 2839428, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3126148, 2126724, 2126724, 2126724, 2126724, 2126798, 2126798, 2585550, 2126798, 2126798, 2126798, 2126798, 2126798, 2618318, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2663374, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2552708, 2126724, 2126724, 2126724, 2126724, 2126724, 2638724, 2126724, 2126724, 2720644, 2126724, 2126724, 2126724, 2126724, 2126724, 2769796, 2777988, 2782084, 2798468, 2823044, 2126724, 2126724, 2126724, 2884484, 2126724, 2913156, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3040132, 2126724, 2126724, 2126724, 2728836, 2753412, 2126724, 2126724, 2126724, 2126724, 2843524, 2847620, 2126724, 2896772, 2917252, 2126724, 2126724, 2126724, 2126724, 3150724, 2126798, 2429902, 2438094, 2126798, 2487246, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2929614, 2126798, 2126798, 2126798, 2999246, 2126798, 3064708, 2126724, 2126724, 2126724, 2126724, 2126724, 3101572, 2126724, 2126724, 3134340, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2585476, 2126724, 2126724, 2126724, 2126724, 2126724, 2618244, 2126724, 2126724, 2126724, 2126798, 2720718, 2126798, 2126798, 2126798, 2126798, 2126798, 2769870, 2778062, 2782158, 2798542, 2823118, 2126798, 2126798, 2126798, 2884558, 2126798, 2913230, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3040206, 2126798, 2126798, 2126798, 2126798, 2126798, 2601934, 2126798, 2126798, 2126798, 2126798, 2642894, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2606030, 2126798, 2630606, 2126798, 2126798, 2651086, 2126798, 2126798, 2126798, 3064782, 2126798, 2126798, 2126798, 2126798, 2126798, 3101646, 2126798, 2126798, 3134414, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 0, 2179072, 2126798, 2126724, 2457600, 2179072, 2179072, 2179072, 2179072, 2458500, 2126798, 2126798, 2126798, 3208142, 2126798, 2179072, 2126798, 2126724, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3011460, 2126724, 2126724, 2126724, 2126798, 2126798, 2503630, 0, 0, 0, 0, 2388868, 2126724, 2126724, 2126724, 2421636, 2126724, 2126724, 2126724, 2126724, 2126724, 2454404, 2126724, 2126724, 2126724, 3027844, 2405326, 2126798, 2126798, 2126798, 2126798, 3027918, 2539520, 0, 2949120, 2179072, 2658304, 2973696, 2474884, 2483076, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2532228, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2601860, 2126724, 2126724, 2126724, 2126724, 2642820, 2126724, 2126724, 2126724, 2126724, 2126724, 2655108, 2679684, 2761604, 2765700, 2786180, 2855812, 2970500, 2126724, 3007364, 2126724, 3019652, 2605956, 2126724, 2630532, 2126724, 2126724, 2651012, 2126724, 2126724, 2126724, 2708356, 2126724, 2737028, 2126724, 2126724, 2126724, 2126724, 2462596, 2466692, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2524036, 2126724, 2126724, 2126724, 2126724, 3036036, 2126724, 2126724, 3072900, 2126724, 2126724, 2126724, 3122052, 2126724, 2126724, 3142532, 2126724, 2126724, 2126724, 3171204, 2126724, 2126724, 3191684, 3195780, 2126724, 0, 0, 0, 0, 0, 0, 2388942, 2126798, 2126798, 2126798, 2421710, 2708430, 2126798, 2737102, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2888654, 2126798, 2126798, 2925518, 2126798, 2126798, 2126798, 2126798, 2179072, 2126798, 2126724, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2802638, 2814926, 2126798, 2839502, 2126798, 2126798, 2126798, 3142606, 2126798, 2126798, 2126798, 3171278, 2126798, 2126798, 3191758, 3195854, 2126798, 2179072, 2126798, 2126724, 2179072, 2126724, 2126798, 2179072, 2126724, 2126798, 2179072, 2126724, 2126798, 2985984, 2986884, 2986958, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 315, 316, 316, 421, 422, 65536, 429, 2179072, 3112960, 3219456, 2126724, 2126724, 3113860, 3220356, 2126798, 2126798, 3113934, 3220430, 0, 0, 0, 0, 0, 0, 0, 2046, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 3223552, 0, 0, 2126724, 2126724, 2417540, 2126724, 2126724, 2126724, 2446212, 2126724, 2126724, 2126724, 2126724, 2888580, 2126724, 2126724, 2925444, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 0, 2126798, 2126798, 2126798, 2409422, 2126798, 2126798, 2945924, 2126724, 2126724, 2995076, 2126724, 3003268, 2126724, 2126724, 3023748, 2126724, 3068804, 3085188, 2126724, 3097476, 2126724, 2126724, 2126724, 2519940, 2126724, 2126724, 2126724, 2126724, 2589572, 2126724, 2614148, 2646916, 2126724, 2126724, 2696068, 2757508, 2638798, 2126798, 2126798, 2126798, 2126798, 2728910, 2753486, 2126798, 2126798, 2126798, 2126798, 2843598, 2847694, 2126798, 2896846, 2917326, 2126798, 2126798, 2945998, 2126798, 2126798, 2995150, 2126798, 3003342, 2126798, 2126798, 3023822, 2126798, 3068878, 3085262, 2126798, 3097550, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3178496, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3224452, 0, 0, 2126798, 2126798, 2417614, 2126798, 2126798, 2126798, 2446286, 2126798, 2126724, 2126724, 3060612, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3179396, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3126222, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3118030, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2495438, 2126798, 2126798, 2515918, 2126798, 2126798, 2126798, 2544590, 2548686, 2126798, 2126798, 2597838, 2126798, 2126798, 2126798, 2126798, 2425806, 2433998, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 0, 0, 0, 2179072, 2126798, 2126724, 2126798, 2126798, 2126798, 3060686, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3179470, 2179072, 2126798, 2126724, 2179072, 2126724, 2659204, 2974596, 2126724, 2126798, 2659278, 2974670, 2126798, 2711552, 2560000, 2179072, 2560900, 2126724, 2560974, 2126798, 2126798, 2126798, 2126798, 2462670, 2466766, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2524110, 2126798, 2126798, 2126798, 2126798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2397060, 2401156, 2126724, 2126724, 2442116, 2126724, 2470788, 3154820, 3167108, 3175300, 2397134, 2401230, 2126798, 2126798, 2442190, 2126798, 2470862, 2126798, 2126798, 2126798, 2520014, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3130318, 2126798, 2126798, 3154894, 3167182, 3175374, 2506752, 2507726, 2507652, 2126798, 2126798, 2589646, 2126798, 2614222, 2646990, 2126798, 2126798, 2696142, 2757582, 2126798, 2126798, 2126798, 2126798, 2933710, 2126798, 2126798, 2126798, 2126798, 2593742, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2449408, 0, 2535424, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2126724, 2429828, 2438020, 2126724, 2487172, 2126724, 2126724, 2126724, 2126724, 2933636, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3130244, 2126724, 2126724, 2126798, 2126798, 2655182, 2679758, 2761678, 2765774, 2786254, 2855886, 2970574, 2126798, 3007438, 2126798, 3019726, 2126798, 2126798, 2126798, 2126798, 0, 2502656, 0, 0, 3010560, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2126798, 3150798, 2179072, 3051520, 2126724, 3052420, 2126798, 3052494, 0, 2490368, 2498560, 0, 0, 0, 0, 2875392, 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3137536, 2126724, 2126724, 2126724, 3208068, 2126724, 0, 0, 0, 0, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2552782, 2126798, 2126798, 2126798, 2126798, 2126798, 2126724, 2499460, 2126724, 2126724, 2126724, 2556804, 2564996, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2929540, 2126724, 2126724, 2126724, 2999172, 2126724, 2126724, 2126724, 3138436, 2126798, 2126798, 2499534, 2126798, 2126798, 2126798, 2556878, 2565070, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3011534, 2126798, 2126798, 2126798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 323, 0, 2126724, 2450308, 2126724, 2536324, 2126724, 2610052, 2126724, 2859908, 2126724, 2126724, 2126724, 3031940, 2126724, 2126798, 2450382, 2126798, 2126798, 2126798, 2126798, 3093454, 0, 0, 0, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2405252, 2126724, 2126724, 2495364, 2126724, 2126724, 2515844, 2126724, 2126724, 2126724, 2544516, 2548612, 2126724, 2126724, 2597764, 2126724, 2126724, 2126724, 2663300, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2802564, 2536398, 2126798, 2610126, 2126798, 2859982, 2126798, 2126798, 2126798, 3032014, 2126798, 2527232, 0, 0, 0, 2179072, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2528132, 2126724, 2126724, 2126724, 2126724, 2126724, 3093380, 2126798, 2528206, 2126798, 2126798, 2126798, 2126798, 3138510, 2940928, 2941828, 2941902, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 0, 0, 0, 0, 172032, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 122880, 122880, 0, 0, 0, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 0, 0, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 338, 292, 0, 0, 0, 0, 0, 0, 221184, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 299, 0, 0, 2142208, 0, 0, 0, 98304, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 0, 0, 2061, 2062, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 0, 0, 0, 0, 0, 0, 0, 0, 1578, 0, 0, 0, 577536, 0, 0, 1583, 0, 0, 0, 302, 0, 303, 0, 0, 0, 303, 0, 0, 0, 2461696, 0, 0, 0, 0, 0, 0, 1159168, 416, 416, 0, 0, 0, 0, 0, 416, 0, 0, 98304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 2179072, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 901, 0, 0, 0, 0, 0, 229376, 0, 0, 0, 0, 0, 0, 0, 0, 1666, 0, 0, 0, 0, 0, 2958, 0, 0, 0, 0, 2962, 0, 0, 0, 0, 2967, 0, 0, 901, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2531328, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3190784, 3194880, 2125824, 975, 0, 0, 0, 975, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2179072, 2179072, 2179072, 3223552, 901, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 0, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 217088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 308, 0, 0, 0, 114688, 0, 241664, 258048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 677, 678, 0, 0, 0, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 386, 0, 0, 0, 2183168, 0, 0, 270336, 0, 0, 298, 299, 0, 2134016, 302, 303, 200704, 0, 0, 180224, 0, 0, 0, 0, 0, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 20480, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 1, 12290, 2113825, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 2387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 381, 383, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, 340, 2113825, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 237568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1657, 0, 0, 0, 0, 274432, 274432, 274432, 274432, 274432, 274432, 0, 0, 0, 0, 0, 274432, 0, 274432, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 90408, 90408, 90408, 90408, 0, 94505, 1, 12290, 3, 78114, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1611, 0, 0, 0, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 0, 302, 303, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163264, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 307, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 3062, 580, 580, 2009, 0, 0, 0, 0, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 2954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 2089, 0, 0, 0, 0, 0, 0, 0, 2086, 0, 0, 0, 0, 0, 2092, 0, 0, 290, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 681, 3, 78114, 78449, 292, 0, 0, 0, 0, 0, 298, 299, 0, 0, 302, 303, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 1138688, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 1150976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 337, 0, 581, 557, 557, 557, 557, 557, 557, 557, 581, 581, 581, 534, 581, 581, 581, 581, 581, 581, 581, 557, 557, 534, 557, 581, 557, 581, 1, 12290, 1, 12290, 3, 78115, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1680, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 1, 12290, 282624, 282624, 282624, 0, 0, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2027, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 3132, 0, 0, 2740224, 0, 0, 0, 0, 0, 0, 1181, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1608, 1609, 1610, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 709, 0, 0, 0, 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3252, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 167936, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 3329, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 3329, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 0, 2125824, 2125824, 0, 0, 0, 308, 0, 0, 0, 0, 0, 307, 0, 307, 308, 0, 307, 307, 0, 0, 0, 307, 307, 308, 308, 0, 0, 0, 0, 0, 0, 307, 407, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 308, 412, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 57344, 0, 0, 0, 0, 0, 0, 1120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 0, 0, 0, 0, 0, 456, 456, 456, 482, 482, 456, 482, 482, 482, 482, 482, 482, 482, 507, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 527, 482, 482, 482, 482, 482, 535, 558, 535, 558, 535, 535, 558, 535, 582, 558, 558, 558, 558, 558, 558, 558, 582, 582, 582, 535, 582, 582, 582, 582, 582, 582, 582, 558, 558, 535, 558, 582, 558, 582, 1, 12290, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 697, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 1639, 0, 0, 0, 0, 0, 0, 0, 0, 1660, 1661, 0, 1663, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 2134749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1169, 734, 0, 0, 0, 0, 0, 0, 761, 0, 0, 765, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 172032, 0, 0, 0, 0, 65536, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 780, 0, 0, 0, 0, 0, 327, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 821, 776, 0, 0, 0, 0, 0, 825, 826, 776, 776, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 1677, 0, 1679, 0, 0, 0, 0, 0, 0, 776, 729, 776, 0, 534, 534, 836, 840, 534, 534, 534, 534, 534, 534, 866, 534, 871, 534, 878, 534, 881, 534, 534, 895, 534, 534, 556, 556, 556, 909, 913, 1018, 580, 1025, 580, 1028, 580, 580, 1042, 580, 580, 0, 0, 0, 840, 987, 913, 836, 1052, 881, 534, 534, 909, 1057, 954, 556, 556, 0, 983, 1062, 1028, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78114, 1066, 0, 0, 1068, 1072, 0, 0, 1076, 1080, 0, 0, 0, 0, 0, 0, 0, 406, 406, 406, 406, 0, 406, 406, 406, 406, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 515, 515, 0, 0, 0, 1634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3126, 0, 0, 1769, 534, 534, 1772, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1784, 534, 534, 534, 534, 534, 884, 534, 534, 534, 534, 534, 556, 556, 903, 556, 556, 0, 580, 580, 580, 984, 580, 990, 580, 580, 1003, 580, 580, 1014, 580, 534, 534, 534, 534, 1789, 534, 534, 534, 534, 534, 534, 534, 1341, 1799, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 556, 556, 556, 1806, 556, 556, 556, 556, 556, 1812, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2370, 580, 580, 580, 580, 580, 580, 556, 556, 556, 1825, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 955, 556, 556, 556, 1885, 556, 556, 556, 556, 556, 556, 556, 26009, 1895, 580, 580, 580, 580, 580, 1902, 2017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 2042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2051, 0, 0, 0, 0, 0, 0, 1196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, 2109, 2110, 0, 0, 2112, 0, 0, 0, 2110, 0, 0, 2117, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 221184, 0, 0, 0, 0, 65536, 0, 2150, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1313, 0, 0, 0, 2464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3135, 0, 0, 534, 534, 534, 534, 2502, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2510, 534, 534, 534, 2601, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2611, 556, 556, 556, 556, 556, 2563, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1388, 556, 556, 556, 556, 1393, 556, 556, 556, 556, 2632, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1967, 0, 0, 0, 2698, 0, 0, 0, 0, 0, 0, 2703, 0, 0, 0, 0, 0, 0, 0, 2115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2729, 0, 0, 0, 0, 0, 0, 2749, 2750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 2762, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2521, 534, 534, 534, 534, 534, 2773, 534, 534, 2777, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2786, 556, 2820, 556, 556, 2824, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2833, 580, 580, 580, 2869, 580, 580, 2873, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2899, 580, 580, 580, 580, 580, 580, 2882, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2890, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 3324, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 0, 221184, 0, 0, 0, 0, 2931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3010, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 3412, 556, 556, 556, 556, 556, 556, 3051, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3091, 580, 3093, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 3132, 3387, 0, 3389, 0, 534, 3392, 534, 3394, 534, 534, 534, 534, 534, 534, 534, 534, 1777, 534, 534, 534, 534, 534, 534, 534, 534, 2157, 534, 534, 534, 534, 534, 534, 534, 534, 2182, 534, 534, 534, 534, 2187, 534, 534, 534, 534, 3448, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3023, 556, 3461, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 3064, 580, 3475, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 3561, 534, 0, 3490, 0, 3492, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2794, 534, 534, 0, 0, 3533, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1281, 309, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 420, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1109, 0, 1111, 1112, 0, 0, 0, 0, 0, 0, 443, 443, 420, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 526, 443, 526, 526, 526, 443, 526, 526, 526, 526, 443, 536, 559, 536, 559, 536, 536, 559, 536, 583, 559, 559, 559, 559, 559, 559, 559, 583, 583, 583, 536, 583, 583, 583, 583, 583, 583, 583, 559, 559, 609, 614, 583, 614, 620, 1, 12290, 534, 534, 874, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 580, 580, 580, 580, 580, 580, 1021, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 534, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3445, 534, 0, 0, 0, 1657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3262, 534, 534, 1785, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1006, 580, 580, 580, 0, 0, 1544, 0, 0, 0, 0, 0, 1550, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 580, 580, 1970, 580, 580, 580, 580, 580, 1977, 580, 580, 580, 580, 580, 580, 580, 1444, 580, 580, 580, 580, 580, 1456, 580, 580, 0, 0, 2425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 2612, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 3382, 0, 0, 3385, 0, 0, 0, 580, 2621, 580, 580, 580, 580, 2625, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3221, 580, 580, 580, 580, 580, 0, 0, 0, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 850, 534, 534, 534, 534, 534, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 422, 430, 421, 430, 0, 312, 430, 444, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 478, 483, 483, 494, 483, 483, 483, 483, 483, 483, 483, 483, 509, 509, 522, 522, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 509, 523, 523, 523, 523, 523, 537, 560, 537, 560, 537, 537, 560, 537, 584, 560, 560, 560, 560, 560, 560, 560, 584, 584, 584, 606, 584, 584, 584, 584, 584, 584, 607, 608, 608, 606, 608, 607, 608, 607, 1, 12290, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 695, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1720, 534, 534, 882, 534, 534, 556, 556, 955, 556, 556, 0, 580, 580, 1029, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3322, 0, 0, 3325, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 0, 1193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, 534, 534, 1254, 534, 1257, 534, 534, 534, 534, 534, 534, 534, 534, 1271, 534, 1276, 534, 534, 1280, 534, 534, 1283, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1294, 534, 534, 534, 534, 534, 1341, 901, 556, 556, 1345, 556, 556, 1349, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 580, 580, 580, 580, 0, 3580, 0, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 1363, 556, 1368, 556, 556, 1372, 556, 556, 1375, 556, 556, 556, 556, 556, 0, 2296, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2355, 580, 580, 580, 580, 2360, 580, 580, 580, 580, 1437, 580, 580, 1441, 580, 580, 580, 580, 580, 580, 580, 580, 1455, 580, 1460, 580, 580, 1464, 580, 580, 1467, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 188416, 534, 580, 556, 1669, 0, 0, 0, 0, 0, 0, 1676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1199, 1200, 0, 0, 0, 0, 0, 580, 1923, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1459, 580, 580, 1936, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1919, 580, 534, 2176, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 534, 534, 534, 534, 2192, 2193, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 3022, 556, 2262, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1819, 556, 556, 556, 2278, 2279, 2280, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1846, 556, 556, 556, 1851, 556, 2349, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1985, 580, 580, 580, 2365, 2366, 2367, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 3558, 0, 3560, 534, 534, 0, 2399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 2465, 2466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2090, 0, 0, 0, 0, 580, 580, 580, 2663, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 3105, 534, 534, 534, 534, 534, 2790, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 3019, 556, 556, 556, 556, 2917, 0, 0, 0, 0, 0, 2923, 0, 0, 0, 0, 0, 0, 0, 2927, 0, 0, 0, 0, 0, 2200246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 0, 2972, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2987, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 899, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3027, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1432, 26009, 1341, 975, 580, 0, 3139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1597, 0, 534, 534, 534, 534, 3175, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3438, 0, 3439, 0, 0, 0, 0, 0, 0, 0, 534, 3446, 534, 3447, 534, 534, 534, 3451, 534, 534, 534, 534, 534, 534, 534, 556, 3459, 556, 556, 556, 556, 556, 2589, 556, 556, 2593, 556, 556, 556, 556, 556, 556, 556, 2606, 556, 556, 556, 556, 556, 556, 556, 556, 2269, 556, 556, 556, 556, 556, 556, 556, 3460, 556, 556, 556, 3464, 556, 556, 556, 556, 556, 556, 556, 556, 580, 3473, 580, 0, 0, 2920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2926, 0, 0, 0, 0, 0, 1147, 0, 1149, 0, 0, 0, 0, 0, 0, 0, 0, 534, 557, 534, 557, 534, 534, 557, 534, 3474, 580, 580, 580, 3478, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 3583, 3584, 534, 534, 556, 556, 3596, 556, 556, 556, 3598, 580, 580, 580, 3600, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 3244, 0, 0, 0, 0, 0, 323, 323, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 373, 0, 432, 438, 0, 445, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 484, 484, 495, 484, 484, 484, 484, 484, 484, 484, 484, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 538, 561, 538, 561, 538, 538, 561, 538, 585, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 538, 585, 585, 585, 585, 585, 585, 585, 561, 561, 538, 561, 585, 561, 585, 1, 12290, 787, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 859, 534, 534, 534, 534, 534, 534, 2139, 534, 534, 2142, 534, 534, 534, 534, 534, 534, 534, 1760, 1761, 1762, 534, 534, 1765, 1766, 534, 534, 1114, 1115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1613, 0, 1100, 0, 1231, 0, 0, 0, 0, 0, 1115, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 3088384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 1246, 1114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 1255, 534, 534, 534, 1341, 901, 556, 556, 1346, 556, 556, 556, 556, 556, 556, 556, 556, 1389, 556, 556, 556, 556, 556, 556, 556, 556, 1397, 556, 556, 556, 1401, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1880, 556, 556, 556, 556, 556, 580, 1438, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1934, 580, 580, 580, 1465, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1491, 580, 580, 1478, 580, 580, 580, 580, 580, 580, 580, 1487, 580, 580, 1489, 580, 580, 580, 1493, 1517, 580, 580, 580, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 534, 556, 580, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 135168, 135168, 0, 0, 65536, 135168, 556, 556, 556, 556, 1872, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1832, 556, 556, 556, 556, 1968, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2362, 580, 580, 2004, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2418, 0, 0, 0, 0, 0, 2422, 0, 0, 2009, 0, 0, 0, 0, 0, 2011, 0, 0, 0, 0, 0, 2014, 0, 0, 0, 0, 0, 0, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2077, 0, 0, 0, 0, 0, 2067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 827, 2121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 2770, 534, 534, 534, 534, 2137, 534, 534, 534, 534, 2141, 534, 534, 534, 534, 534, 534, 534, 534, 2518, 534, 534, 534, 534, 534, 534, 534, 534, 2803, 534, 534, 534, 534, 534, 534, 534, 534, 2989, 534, 534, 534, 534, 534, 534, 534, 534, 3165, 534, 534, 534, 534, 534, 534, 534, 534, 3270, 534, 534, 534, 534, 534, 534, 534, 534, 3280, 556, 556, 556, 556, 556, 556, 556, 1426, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 2222, 556, 556, 556, 556, 2226, 556, 556, 556, 556, 556, 556, 556, 556, 1405, 556, 556, 556, 556, 556, 556, 556, 580, 580, 2309, 580, 580, 580, 580, 2313, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3527, 580, 580, 580, 0, 3531, 0, 0, 2462, 0, 0, 0, 0, 0, 2467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1640, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2489, 2490, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2522, 534, 534, 534, 534, 534, 534, 2529, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2993, 534, 534, 2620, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2376, 2660, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3316, 2707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1100, 0, 0, 0, 0, 2724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1686, 0, 0, 0, 0, 0, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2028, 0, 0, 0, 534, 534, 534, 534, 534, 2800, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1307, 534, 534, 534, 534, 534, 2891, 580, 580, 580, 580, 580, 580, 580, 2897, 580, 580, 580, 580, 580, 580, 580, 1471, 580, 580, 580, 580, 580, 580, 580, 580, 1045, 580, 0, 0, 0, 534, 580, 556, 3128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1128, 534, 534, 534, 534, 534, 3176, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 3511, 556, 3513, 556, 556, 556, 556, 580, 556, 556, 3297, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3374, 580, 580, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3397, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1392, 556, 556, 556, 556, 556, 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 324, 372, 327, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 324, 0, 0, 371, 371, 401, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 446, 459, 459, 459, 459, 459, 459, 459, 459, 472, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 485, 485, 459, 485, 485, 500, 502, 485, 485, 500, 485, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 528, 511, 511, 511, 511, 511, 539, 562, 539, 562, 539, 539, 562, 539, 586, 562, 562, 562, 562, 562, 562, 562, 586, 586, 586, 539, 586, 586, 586, 586, 586, 586, 586, 562, 562, 539, 562, 586, 562, 586, 1, 12290, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 664, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 355, 0, 0, 466, 466, 466, 466, 466, 466, 466, 466, 471, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 471, 0, 713, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 1621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 763, 0, 0, 0, 0, 0, 771, 0, 773, 0, 0, 0, 0, 0, 0, 1637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 793, 0, 0, 0, 793, 793, 790, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 106496, 0, 0, 0, 0, 106496, 106496, 0, 0, 0, 773, 0, 785, 0, 802, 0, 0, 0, 0, 793, 0, 700, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1141, 0, 810, 0, 0, 0, 0, 0, 810, 810, 813, 0, 0, 0, 773, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 367, 0, 384, 0, 350, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 0, 385, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 822, 802, 822, 0, 534, 534, 837, 534, 843, 534, 534, 856, 534, 534, 867, 534, 872, 534, 534, 880, 883, 888, 534, 896, 534, 534, 556, 556, 556, 910, 556, 556, 556, 556, 556, 2604, 2605, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3189, 556, 556, 556, 556, 556, 556, 916, 556, 556, 929, 556, 556, 940, 556, 945, 556, 556, 953, 956, 961, 556, 969, 1019, 580, 580, 1027, 1030, 1035, 580, 1043, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 556, 2825, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2284, 556, 556, 556, 556, 556, 837, 534, 1053, 888, 534, 910, 556, 1058, 961, 556, 0, 984, 580, 1063, 1035, 580, 0, 2919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2458, 0, 0, 0, 0, 1087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 1659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2032, 0, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2078, 0, 0, 0, 1129, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2471, 0, 0, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 2442, 0, 0, 0, 0, 0, 0, 0, 2450, 1121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 1139, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2757, 2758, 0, 0, 0, 534, 1282, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1297, 1337, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1354, 556, 556, 1419, 556, 556, 556, 556, 556, 556, 1429, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1523, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 2837, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1862, 1863, 556, 556, 556, 556, 1461, 580, 580, 580, 1466, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1915, 580, 580, 580, 580, 580, 580, 1481, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1933, 580, 580, 580, 1495, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1511, 580, 580, 580, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2074, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 580, 580, 580, 1521, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 534, 556, 580, 3610, 3611, 3612, 534, 556, 580, 0, 0, 0, 0, 0, 0, 307, 442, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 0, 0, 1585, 0, 0, 1588, 1589, 1590, 0, 1592, 1593, 0, 0, 0, 0, 1598, 1631, 1632, 0, 0, 0, 0, 0, 0, 0, 0, 1641, 1642, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 534, 534, 534, 0, 0, 0, 0, 1648, 0, 0, 1650, 0, 0, 0, 0, 1652, 1653, 0, 0, 0, 0, 0, 441, 0, 0, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 552, 575, 552, 575, 552, 552, 575, 552, 0, 0, 1671, 1672, 1673, 1674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2483, 0, 0, 0, 0, 0, 1683, 0, 0, 1686, 0, 0, 0, 0, 0, 1690, 0, 0, 0, 1694, 1695, 1706, 1566, 1566, 1708, 534, 1710, 534, 1711, 1712, 534, 1714, 534, 534, 534, 1718, 534, 534, 534, 534, 534, 886, 534, 534, 534, 534, 534, 556, 556, 908, 556, 556, 556, 556, 556, 2254, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1431, 556, 26009, 1341, 975, 1435, 534, 534, 1739, 534, 1741, 534, 534, 534, 534, 534, 534, 534, 534, 1749, 1750, 1752, 534, 1786, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1797, 1341, 0, 1802, 556, 556, 556, 556, 556, 3041, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3200, 556, 556, 556, 556, 556, 556, 1804, 556, 1805, 556, 1807, 556, 1809, 556, 556, 556, 1813, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 580, 2618, 580, 580, 556, 556, 556, 556, 1826, 556, 556, 556, 556, 1830, 556, 556, 556, 556, 1834, 556, 556, 556, 556, 556, 3055, 556, 556, 556, 556, 556, 580, 580, 580, 3063, 580, 580, 580, 580, 1724, 1915, 1819, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 2692, 0, 0, 1836, 556, 556, 556, 556, 556, 556, 556, 556, 1844, 1845, 1847, 556, 556, 556, 556, 556, 0, 2297, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2667, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2653, 580, 580, 580, 580, 2657, 580, 556, 556, 556, 1855, 1856, 1857, 556, 556, 1860, 1861, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 2862, 580, 580, 580, 580, 556, 1869, 556, 556, 556, 1873, 556, 556, 556, 556, 556, 556, 556, 1882, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 1002, 580, 580, 580, 580, 580, 580, 3555, 3556, 580, 580, 0, 0, 3559, 0, 534, 534, 1903, 580, 1905, 580, 580, 580, 1909, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3528, 580, 580, 0, 0, 0, 1922, 580, 580, 580, 580, 1926, 580, 580, 580, 580, 1930, 580, 1932, 580, 580, 580, 580, 580, 1524, 0, 1270, 1454, 1362, 534, 534, 534, 534, 534, 556, 1952, 1953, 580, 580, 1956, 1957, 580, 580, 580, 580, 580, 580, 580, 1965, 580, 580, 534, 534, 556, 556, 580, 580, 3321, 0, 0, 0, 3323, 0, 0, 0, 0, 0, 0, 2114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2605056, 0, 0, 0, 0, 2887680, 580, 1969, 580, 580, 580, 580, 580, 580, 580, 1978, 580, 580, 580, 580, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 580, 580, 1989, 534, 580, 556, 1766, 534, 1995, 534, 1861, 556, 1999, 556, 1957, 580, 2003, 580, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2702, 0, 0, 0, 0, 0, 0, 0, 2706, 0, 2018, 0, 0, 2021, 2022, 0, 0, 0, 2026, 0, 0, 0, 0, 0, 0, 0, 414, 414, 0, 0, 0, 0, 0, 414, 0, 0, 0, 2069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 2088, 0, 0, 0, 0, 0, 0, 0, 451, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 2095, 0, 2097, 0, 0, 0, 0, 0, 0, 0, 0, 2106, 0, 0, 0, 0, 0, 0, 0, 184725, 184925, 184925, 184925, 0, 184925, 184925, 184925, 184925, 184925, 184925, 0, 0, 0, 0, 0, 184925, 0, 184925, 1, 12290, 534, 534, 534, 2153, 534, 2155, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1746, 534, 534, 534, 534, 534, 534, 2204, 2205, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2558, 556, 556, 556, 556, 2238, 556, 2240, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2231, 556, 556, 556, 556, 556, 2291, 2292, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 1506, 580, 580, 580, 580, 580, 1513, 580, 580, 580, 580, 2325, 580, 2327, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2318, 580, 580, 580, 580, 580, 2378, 2379, 580, 580, 2145, 2317, 2230, 534, 2385, 534, 534, 556, 2389, 556, 556, 0, 580, 580, 580, 580, 580, 580, 997, 580, 580, 580, 580, 580, 580, 2328, 580, 2330, 580, 580, 580, 580, 580, 580, 580, 2342, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1474, 580, 580, 580, 580, 580, 580, 580, 2393, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 2727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1579, 0, 0, 0, 0, 0, 0, 0, 2437, 2438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1089, 0, 0, 534, 2526, 534, 534, 534, 2531, 534, 534, 534, 534, 534, 534, 534, 2538, 534, 534, 534, 534, 534, 534, 2169, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2782, 534, 534, 2785, 534, 534, 534, 534, 534, 534, 534, 2543, 534, 534, 534, 534, 534, 534, 534, 534, 0, 2549, 556, 556, 2587, 556, 556, 556, 556, 2591, 556, 556, 556, 2596, 556, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 3386, 556, 556, 556, 2603, 556, 556, 556, 556, 556, 556, 556, 556, 2609, 556, 556, 556, 556, 556, 556, 3042, 556, 3044, 556, 556, 556, 556, 556, 556, 556, 1404, 556, 556, 1411, 556, 556, 556, 556, 556, 580, 580, 580, 2623, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1451, 580, 580, 580, 580, 580, 580, 2635, 580, 2637, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1914, 580, 580, 580, 580, 580, 580, 580, 2662, 580, 580, 580, 580, 580, 580, 580, 2669, 580, 580, 580, 580, 580, 580, 2895, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1046, 0, 0, 0, 534, 580, 556, 580, 580, 580, 2675, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 2913, 556, 2915, 580, 534, 534, 534, 2798, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3348, 534, 556, 556, 556, 556, 556, 2846, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2245, 556, 556, 556, 556, 0, 2943, 2944, 0, 2945, 0, 2947, 0, 0, 0, 0, 2949, 0, 0, 0, 0, 0, 0, 0, 225883, 225883, 225883, 225883, 225734, 225883, 225883, 225883, 225883, 225883, 225883, 225734, 225734, 225734, 225734, 225734, 225899, 225734, 225899, 1, 12290, 2968, 2969, 0, 2971, 0, 0, 2974, 0, 0, 0, 2977, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 2214, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 2617, 580, 580, 580, 534, 2984, 534, 534, 534, 534, 534, 2988, 534, 534, 534, 534, 534, 534, 534, 2994, 534, 534, 534, 534, 534, 3000, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1763, 534, 534, 534, 534, 534, 3009, 3011, 534, 534, 534, 3014, 534, 3016, 3017, 534, 556, 556, 556, 556, 556, 556, 0, 0, 580, 2861, 580, 580, 580, 580, 580, 580, 0, 1267, 1451, 1359, 534, 534, 534, 1530, 534, 556, 3024, 556, 556, 556, 556, 556, 3028, 556, 556, 556, 556, 556, 556, 556, 3034, 556, 556, 556, 556, 556, 3185, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2229, 556, 556, 2233, 556, 556, 556, 556, 556, 556, 3040, 556, 556, 3043, 556, 556, 556, 556, 556, 556, 556, 556, 1829, 556, 556, 556, 556, 556, 556, 556, 3050, 3052, 556, 556, 556, 556, 3056, 556, 3058, 3059, 556, 580, 580, 580, 580, 580, 580, 3083, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2331, 580, 580, 580, 580, 2335, 580, 580, 3066, 580, 580, 580, 580, 580, 3070, 580, 580, 580, 580, 580, 580, 580, 3076, 580, 3092, 3094, 580, 580, 580, 580, 3098, 580, 3100, 3101, 580, 534, 580, 556, 534, 534, 534, 534, 534, 887, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 0, 2299, 580, 580, 580, 580, 580, 580, 580, 3084, 580, 3086, 580, 580, 580, 580, 580, 580, 3106, 556, 3108, 580, 3110, 0, 0, 0, 0, 0, 0, 3116, 0, 0, 3119, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3140, 3141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2107, 0, 0, 0, 556, 556, 556, 556, 3184, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2272, 556, 556, 556, 556, 556, 556, 556, 3195, 556, 556, 556, 556, 556, 556, 556, 556, 3203, 556, 556, 556, 556, 556, 556, 3197, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2594, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 3208, 580, 580, 580, 580, 580, 580, 580, 3213, 580, 580, 580, 580, 1907, 580, 580, 580, 580, 580, 580, 580, 580, 1918, 580, 580, 580, 580, 580, 3096, 580, 580, 3099, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 534, 534, 3278, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3515, 556, 556, 580, 556, 3296, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3214, 3326, 3327, 0, 3132, 0, 3331, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2766, 534, 534, 534, 534, 534, 2771, 534, 534, 534, 3405, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 960, 556, 556, 556, 556, 556, 3420, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1452, 580, 580, 580, 580, 580, 3436, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3502, 534, 534, 534, 534, 534, 3450, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 3281, 556, 556, 556, 3284, 556, 556, 556, 3463, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 3302, 580, 580, 580, 580, 580, 580, 580, 3477, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3486, 3487, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 1137, 1095, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 266240, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 3493, 3494, 3495, 534, 534, 534, 3498, 534, 3500, 534, 534, 534, 534, 534, 534, 534, 3269, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2781, 534, 534, 534, 534, 534, 534, 534, 3505, 3506, 3507, 556, 556, 556, 3510, 556, 3512, 556, 556, 556, 556, 3517, 3518, 3519, 3520, 580, 580, 580, 3523, 580, 3525, 580, 580, 580, 580, 3530, 0, 0, 0, 0, 0, 0, 1687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3562, 534, 534, 534, 3566, 556, 556, 3568, 556, 556, 556, 3572, 556, 580, 580, 3574, 580, 580, 580, 3578, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 580, 580, 0, 3111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2409, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, 0, 368, 0, 0, 0, 376, 378, 0, 0, 0, 0, 0, 0, 0, 0, 2025, 0, 0, 0, 0, 0, 0, 0, 0, 2047, 0, 0, 0, 0, 0, 0, 0, 0, 2087, 0, 0, 0, 0, 0, 0, 0, 0, 2127, 0, 0, 534, 534, 534, 534, 534, 0, 0, 411, 0, 0, 0, 411, 69632, 73728, 0, 368, 368, 0, 423, 65536, 368, 0, 0, 368, 423, 492, 496, 492, 492, 501, 492, 492, 492, 501, 492, 423, 423, 329, 423, 0, 0, 423, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 540, 563, 540, 563, 540, 540, 563, 540, 587, 563, 563, 563, 563, 563, 563, 563, 587, 587, 587, 540, 587, 587, 587, 587, 587, 587, 587, 563, 563, 540, 563, 587, 563, 587, 1, 12290, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1644, 0, 556, 556, 556, 556, 933, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2285, 556, 2287, 556, 556, 0, 0, 1207, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2447, 0, 0, 0, 534, 534, 534, 534, 1260, 534, 534, 534, 534, 534, 1272, 534, 534, 534, 534, 534, 0, 0, 0, 2212, 556, 556, 556, 556, 556, 556, 556, 3029, 556, 556, 556, 556, 556, 556, 556, 556, 3030, 556, 556, 556, 556, 556, 556, 556, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 1352, 556, 556, 0, 580, 580, 580, 580, 580, 580, 998, 580, 580, 580, 580, 580, 580, 2650, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2315, 580, 2317, 580, 580, 580, 580, 556, 556, 556, 1364, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1378, 1380, 556, 556, 556, 556, 556, 1871, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1413, 556, 556, 1417, 534, 534, 534, 534, 534, 3567, 556, 556, 556, 556, 556, 556, 556, 3573, 580, 580, 580, 580, 580, 2677, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 534, 3597, 556, 556, 556, 3599, 580, 580, 580, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3243, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 306, 306, 306, 0, 0, 0, 0, 0, 424, 424, 0, 424, 433, 0, 424, 424, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 486, 486, 460, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 541, 564, 541, 564, 541, 541, 564, 541, 588, 564, 564, 564, 564, 564, 564, 564, 588, 588, 588, 541, 588, 588, 588, 588, 588, 588, 588, 564, 564, 541, 564, 588, 564, 588, 1, 12290, 78114, 1066, 0, 0, 1069, 1073, 0, 0, 1077, 1081, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2472, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1667, 0, 0, 0, 0, 0, 2044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2704, 0, 0, 0, 0, 2068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1681, 1682, 2392, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2928, 0, 0, 0, 2932, 0, 0, 0, 0, 0, 2938, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 2953, 0, 0, 2956, 0, 0, 0, 0, 0, 2961, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1204, 2995, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3004, 534, 534, 534, 534, 534, 0, 0, 2211, 0, 556, 556, 556, 556, 556, 556, 556, 2268, 556, 556, 556, 556, 2273, 556, 556, 556, 534, 534, 534, 3012, 534, 534, 3015, 534, 534, 534, 3018, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 556, 556, 534, 556, 580, 556, 580, 1, 12290, 556, 556, 556, 556, 3054, 556, 556, 3057, 556, 556, 556, 3060, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 2396, 0, 0, 0, 3077, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3087, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 3442, 0, 3444, 0, 534, 534, 0, 3120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2015, 0, 0, 534, 534, 3151, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3458, 556, 556, 534, 534, 534, 534, 3163, 534, 534, 534, 534, 534, 534, 534, 3168, 534, 3170, 534, 534, 534, 534, 534, 1261, 534, 534, 534, 1270, 534, 534, 534, 534, 534, 534, 534, 2493, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2196, 534, 534, 534, 534, 534, 534, 556, 556, 556, 580, 580, 3207, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1962, 580, 580, 580, 580, 580, 580, 3227, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2912, 534, 2914, 556, 2916, 3275, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 556, 556, 3287, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3293, 556, 556, 556, 556, 556, 556, 3466, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3306, 3587, 3588, 556, 556, 580, 580, 3591, 3592, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1716, 534, 534, 534, 0, 683, 684, 0, 0, 0, 0, 689, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 534, 830, 534, 534, 534, 534, 534, 534, 860, 534, 534, 534, 534, 534, 534, 2180, 2181, 534, 534, 534, 534, 534, 534, 2188, 534, 0, 751, 0, 0, 0, 0, 0, 751, 751, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 970, 556, 0, 580, 580, 580, 580, 988, 580, 580, 580, 580, 580, 580, 580, 580, 1044, 580, 0, 0, 0, 841, 988, 914, 534, 534, 534, 534, 897, 556, 556, 556, 556, 970, 0, 580, 580, 580, 580, 1044, 0, 0, 0, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2408448, 0, 0, 534, 1318, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 2549, 1696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1190, 580, 580, 1988, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2122, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 2768, 534, 2769, 534, 534, 2540, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 0, 0, 975, 580, 0, 3129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2053, 0, 3235, 534, 3237, 556, 3239, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3124, 3125, 0, 0, 0, 556, 556, 556, 3298, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2359, 580, 580, 580, 580, 3317, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2076, 0, 0, 0, 0, 0, 0, 461, 461, 479, 487, 487, 479, 487, 487, 487, 487, 487, 487, 487, 487, 512, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 529, 520, 520, 520, 520, 520, 542, 565, 542, 565, 542, 542, 565, 542, 589, 565, 565, 565, 565, 565, 565, 565, 589, 589, 589, 542, 589, 589, 589, 589, 589, 589, 589, 565, 565, 542, 565, 589, 565, 589, 1, 12290, 0, 0, 760, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 782, 0, 0, 0, 0, 364, 364, 0, 0, 0, 1136, 0, 0, 0, 0, 0, 0, 0, 1606, 0, 0, 0, 0, 0, 0, 0, 0, 553, 576, 553, 576, 553, 553, 576, 553, 0, 805, 0, 0, 0, 0, 0, 805, 805, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 534, 831, 534, 534, 534, 846, 534, 534, 534, 534, 534, 0, 2210, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1893, 26009, 0, 1898, 580, 1900, 580, 1901, 580, 0, 0, 0, 0, 823, 778, 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, 0, 2022, 0, 2116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 534, 534, 534, 534, 844, 534, 852, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 2815, 556, 2816, 556, 556, 917, 556, 925, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2583, 556, 971, 556, 0, 580, 580, 580, 580, 580, 991, 580, 999, 580, 580, 580, 580, 580, 580, 3097, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 1054, 898, 556, 556, 556, 1059, 971, 0, 580, 580, 580, 1064, 1045, 0, 1159, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 1219, 0, 0, 0, 0, 0, 0, 0, 0, 1224, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 364, 0, 0, 0, 1134592, 0, 0, 0, 1134592, 1134592, 0, 0, 1134592, 0, 0, 1134592, 0, 1134592, 534, 534, 1284, 534, 534, 534, 534, 534, 534, 534, 1292, 534, 534, 534, 534, 534, 0, 2209, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1842, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1896, 580, 580, 580, 580, 580, 580, 534, 534, 534, 1321, 534, 534, 1325, 534, 534, 534, 534, 534, 1331, 534, 534, 534, 534, 534, 534, 534, 3342, 534, 3344, 534, 534, 534, 534, 534, 556, 1338, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2568, 556, 556, 556, 556, 556, 1357, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1376, 556, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580, 580, 2619, 580, 556, 556, 556, 1384, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1816, 1817, 556, 556, 580, 580, 580, 1522, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3196, 556, 3198, 556, 556, 556, 556, 556, 556, 556, 556, 1878, 1879, 556, 556, 556, 556, 556, 556, 534, 534, 534, 534, 1773, 534, 534, 534, 534, 534, 534, 1781, 534, 534, 534, 534, 0, 0, 556, 556, 556, 2813, 556, 556, 556, 556, 556, 2818, 556, 556, 1823, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2842, 556, 556, 556, 1853, 556, 556, 556, 556, 1859, 556, 556, 556, 556, 556, 556, 556, 556, 2840, 556, 556, 556, 556, 556, 556, 556, 1868, 556, 556, 556, 556, 556, 556, 1876, 556, 556, 556, 556, 556, 556, 556, 556, 2850, 556, 556, 556, 556, 556, 556, 556, 556, 1886, 1888, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 1525, 1526, 1527, 534, 534, 1529, 534, 534, 556, 580, 580, 580, 1955, 580, 580, 580, 580, 580, 580, 580, 580, 1964, 580, 580, 580, 580, 580, 1940, 1941, 1943, 580, 580, 580, 580, 580, 580, 580, 1951, 580, 580, 580, 1972, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1982, 1984, 580, 580, 580, 580, 1925, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2372, 580, 2374, 580, 580, 0, 0, 0, 2057, 0, 0, 0, 0, 0, 2063, 0, 0, 0, 0, 0, 0, 0, 1089, 0, 0, 0, 0, 1241, 1242, 0, 0, 0, 0, 0, 0, 2071, 0, 0, 0, 0, 0, 0, 0, 0, 2079, 0, 0, 0, 0, 0, 534, 833, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1306, 534, 534, 534, 534, 534, 534, 2134, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2146, 534, 534, 534, 534, 534, 534, 534, 3453, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 2826, 556, 556, 556, 556, 556, 556, 556, 556, 556, 949, 556, 556, 556, 556, 967, 556, 2189, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1314, 2203, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 2219, 2290, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 2306, 2377, 580, 580, 580, 580, 2146, 2318, 2231, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 3246, 0, 0, 0, 0, 0, 2413, 2414, 0, 0, 2417, 0, 2419, 0, 0, 0, 0, 0, 0, 0, 0, 2712, 0, 0, 0, 0, 0, 0, 0, 0, 2728, 0, 0, 0, 0, 0, 0, 0, 0, 2429, 0, 0, 0, 0, 0, 0, 0, 0, 2406, 0, 0, 0, 0, 0, 0, 0, 0, 2454, 0, 0, 0, 0, 0, 0, 0, 0, 1587, 0, 0, 0, 0, 0, 0, 0, 1595, 1596, 0, 0, 0, 2424, 0, 0, 2427, 0, 0, 0, 0, 0, 0, 2431, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 1159168, 0, 0, 0, 0, 1159168, 1159168, 0, 0, 0, 2452, 0, 0, 0, 0, 0, 0, 0, 2456, 2457, 0, 0, 2460, 0, 0, 2463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 644, 645, 646, 647, 648, 649, 534, 2487, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3008, 534, 534, 534, 2515, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1293, 534, 534, 534, 534, 2527, 534, 534, 534, 534, 534, 534, 2534, 534, 534, 534, 534, 534, 534, 534, 534, 3343, 534, 534, 534, 534, 534, 534, 556, 534, 534, 2541, 534, 534, 534, 2544, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 2217, 556, 556, 556, 2574, 556, 556, 556, 556, 556, 556, 2579, 556, 556, 556, 556, 556, 556, 556, 1427, 1428, 556, 556, 556, 26009, 1341, 975, 580, 2585, 556, 556, 556, 556, 556, 556, 2592, 556, 556, 556, 556, 556, 556, 2599, 556, 556, 556, 556, 556, 3290, 556, 556, 556, 556, 3291, 3292, 556, 556, 556, 556, 556, 0, 0, 2298, 0, 580, 580, 580, 580, 580, 580, 580, 2886, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3312, 580, 580, 580, 580, 580, 580, 2673, 580, 580, 580, 2676, 580, 580, 580, 580, 580, 580, 580, 2681, 2682, 2683, 534, 534, 534, 534, 534, 1289, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2185, 534, 534, 534, 534, 2720, 2721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2080, 0, 0, 0, 2736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2746, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 729, 0, 780, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1565, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 2753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2109, 534, 534, 534, 534, 534, 2787, 2788, 534, 534, 534, 534, 2791, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 3178, 556, 556, 556, 556, 2796, 534, 534, 534, 2799, 534, 2801, 534, 534, 534, 534, 534, 534, 2805, 534, 534, 534, 534, 534, 534, 2492, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1745, 534, 534, 534, 534, 534, 534, 2834, 2835, 556, 556, 556, 556, 2838, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2257, 556, 556, 556, 556, 556, 556, 556, 2844, 556, 556, 556, 2847, 556, 2849, 556, 556, 556, 556, 556, 556, 556, 2854, 580, 2867, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1949, 580, 580, 580, 2883, 2884, 580, 580, 580, 580, 2887, 580, 580, 580, 580, 580, 580, 580, 1928, 580, 580, 580, 580, 580, 580, 580, 580, 1912, 1913, 580, 580, 580, 580, 1920, 580, 580, 580, 580, 2893, 580, 580, 580, 2896, 580, 2898, 580, 580, 580, 580, 580, 580, 1190, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 2903, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 3242, 0, 0, 0, 0, 0, 0, 0, 0, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 580, 2918, 0, 0, 2921, 2922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 3255, 0, 534, 534, 534, 534, 2986, 534, 534, 534, 534, 534, 534, 534, 2992, 534, 534, 534, 534, 534, 534, 891, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 2302, 580, 580, 580, 580, 556, 556, 556, 3026, 556, 556, 556, 556, 556, 556, 556, 3032, 556, 556, 556, 556, 556, 556, 1841, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3357, 556, 3359, 556, 556, 556, 556, 580, 580, 580, 580, 3068, 580, 580, 580, 580, 580, 580, 580, 3074, 580, 580, 580, 580, 580, 2311, 580, 580, 2314, 580, 580, 580, 580, 580, 580, 2322, 3138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1191, 3247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2767, 534, 534, 534, 534, 534, 534, 534, 534, 3265, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 534, 534, 3276, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 3283, 556, 556, 556, 556, 556, 3299, 580, 580, 580, 580, 580, 580, 580, 3304, 580, 580, 580, 580, 580, 3479, 580, 3481, 580, 580, 3483, 580, 580, 0, 0, 0, 0, 0, 0, 1210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2421, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 3399, 534, 3401, 3402, 534, 3404, 534, 556, 556, 556, 556, 556, 556, 556, 556, 3414, 556, 3416, 3417, 556, 3419, 556, 3421, 580, 580, 580, 580, 580, 580, 580, 580, 3430, 580, 3432, 3433, 580, 3435, 580, 3437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 3499, 534, 3501, 534, 534, 580, 580, 580, 3553, 580, 3554, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3538, 534, 3539, 534, 534, 534, 3604, 3605, 3606, 534, 556, 580, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 3211264, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 590, 566, 566, 566, 566, 566, 566, 566, 590, 590, 590, 543, 590, 590, 590, 590, 590, 590, 590, 566, 566, 543, 566, 590, 566, 590, 1, 12290, 556, 556, 1398, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2853, 556, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1126, 1127, 0, 534, 534, 534, 534, 2138, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2784, 534, 534, 534, 556, 556, 556, 2223, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1849, 556, 556, 556, 580, 580, 580, 2310, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1490, 580, 580, 580, 402, 0, 0, 0, 0, 380, 0, 69632, 73728, 0, 0, 0, 0, 425, 65536, 0, 0, 0, 0, 364, 364, 1133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133, 0, 0, 0, 3136, 0, 425, 425, 0, 425, 0, 439, 425, 425, 462, 462, 462, 469, 462, 462, 462, 462, 462, 462, 462, 462, 469, 462, 462, 462, 462, 462, 462, 462, 462, 476, 462, 488, 488, 462, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 531, 544, 567, 544, 567, 544, 544, 567, 544, 591, 567, 567, 567, 567, 567, 567, 567, 591, 591, 591, 544, 591, 591, 591, 591, 591, 591, 591, 567, 567, 544, 567, 591, 567, 591, 1, 12290, 0, 0, 0, 653, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2939, 0, 0, 2941, 0, 0, 0, 654, 0, 654, 0, 0, 0, 0, 814, 0, 0, 0, 654, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 2130, 534, 534, 534, 556, 919, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 957, 556, 556, 556, 556, 556, 556, 3545, 556, 3546, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 534, 534, 884, 534, 534, 556, 556, 957, 556, 556, 0, 580, 580, 1031, 580, 580, 580, 580, 580, 2907, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 3117, 0, 0, 0, 290, 1066, 0, 0, 1069, 1073, 0, 0, 1077, 1081, 0, 0, 0, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 0, 0, 1088, 1089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 131072, 0, 0, 0, 1130, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 3254, 0, 0, 1089, 1088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2093, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 1253, 534, 534, 534, 534, 534, 1303, 534, 534, 1305, 534, 534, 534, 1309, 534, 534, 534, 0, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3549, 580, 580, 580, 534, 534, 534, 534, 1287, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2804, 534, 534, 2807, 534, 534, 1320, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1334, 534, 534, 534, 534, 534, 1323, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2509, 534, 534, 534, 534, 534, 534, 534, 1341, 901, 556, 1344, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2283, 556, 556, 556, 556, 556, 556, 556, 556, 1358, 1365, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1379, 556, 556, 0, 580, 580, 580, 985, 989, 992, 580, 1000, 580, 580, 580, 1015, 1017, 556, 556, 556, 1399, 556, 556, 556, 556, 556, 556, 556, 1412, 556, 556, 556, 556, 556, 556, 1858, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1402, 556, 556, 556, 556, 556, 556, 556, 1416, 556, 1436, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1450, 1457, 580, 580, 580, 580, 580, 3069, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1510, 580, 580, 580, 580, 580, 580, 1518, 580, 580, 580, 580, 0, 1266, 1450, 1358, 534, 534, 1320, 534, 534, 556, 556, 556, 556, 556, 3354, 556, 556, 556, 556, 556, 556, 3360, 556, 556, 556, 556, 556, 556, 2615, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2626, 580, 580, 580, 580, 580, 580, 556, 1412, 556, 556, 580, 580, 1504, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 661, 0, 0, 0, 0, 1570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, 1721, 1722, 534, 534, 534, 534, 1729, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 3177, 556, 556, 556, 3180, 556, 534, 1770, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1311, 534, 556, 556, 1824, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3204, 556, 556, 556, 1838, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3294, 556, 580, 1987, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 0, 2694, 2029, 0, 2030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2039, 0, 0, 0, 0, 0, 0, 1700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 534, 534, 2190, 534, 534, 534, 534, 534, 2195, 534, 534, 534, 534, 534, 534, 534, 1326, 534, 534, 534, 534, 534, 534, 534, 534, 1291, 534, 534, 534, 534, 534, 534, 534, 556, 2276, 556, 556, 556, 556, 556, 556, 2282, 556, 556, 556, 556, 556, 556, 556, 1810, 556, 556, 556, 556, 556, 556, 556, 556, 3188, 556, 556, 556, 556, 556, 556, 556, 580, 2363, 580, 580, 580, 580, 580, 580, 2369, 580, 580, 580, 580, 580, 580, 580, 2329, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3557, 0, 0, 0, 0, 534, 534, 580, 580, 2634, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1948, 580, 580, 0, 0, 0, 0, 2699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163840, 0, 0, 0, 534, 534, 534, 534, 534, 2778, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1779, 534, 534, 534, 534, 534, 534, 2809, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 2817, 556, 556, 556, 556, 556, 3465, 556, 3467, 556, 556, 3469, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3373, 580, 3375, 580, 556, 556, 556, 2858, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 1445, 580, 580, 580, 1454, 580, 580, 580, 2866, 580, 580, 580, 580, 580, 580, 2874, 580, 580, 580, 580, 580, 580, 580, 580, 1473, 580, 580, 580, 580, 580, 580, 580, 534, 2996, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1767, 1768, 3036, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2275, 580, 3078, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1966, 580, 0, 0, 0, 0, 3130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 0, 0, 0, 534, 534, 3174, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 1828, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 3535, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2991, 534, 534, 534, 3542, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3550, 580, 580, 580, 580, 580, 3082, 580, 580, 3085, 580, 580, 580, 580, 580, 580, 580, 1911, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3072, 580, 580, 580, 580, 580, 580, 463, 463, 463, 447, 447, 463, 447, 447, 447, 447, 447, 447, 447, 447, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 545, 568, 545, 568, 545, 545, 568, 545, 592, 568, 568, 568, 568, 568, 568, 568, 592, 592, 592, 545, 592, 592, 592, 592, 592, 592, 592, 568, 568, 545, 568, 592, 568, 592, 1, 12290, 0, 0, 0, 655, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 920, 556, 556, 934, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2841, 556, 556, 556, 556, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0, 0, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2461696, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2801664, 0, 0, 534, 534, 534, 534, 1322, 534, 534, 534, 534, 534, 1329, 534, 534, 534, 534, 534, 534, 534, 2505, 534, 2507, 534, 534, 534, 534, 534, 534, 534, 1793, 534, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 1359, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 965, 556, 556, 556, 556, 556, 1421, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1974, 1975, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2641, 580, 580, 580, 2644, 580, 556, 556, 1534, 556, 580, 580, 580, 1538, 580, 1066, 0, 1542, 0, 0, 0, 1548, 0, 0, 0, 1554, 0, 0, 0, 1560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2444, 0, 0, 0, 2448, 0, 0, 1599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1569, 534, 534, 1723, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1734, 534, 534, 534, 534, 534, 534, 892, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 2298, 0, 0, 0, 580, 580, 580, 580, 580, 580, 3480, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 3582, 534, 534, 534, 534, 556, 3586, 1754, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1316, 0, 2096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2108, 0, 534, 534, 534, 534, 2154, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3006, 534, 534, 534, 556, 556, 556, 2239, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1864, 556, 556, 1867, 580, 580, 580, 2326, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1512, 580, 580, 580, 556, 556, 3194, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1414, 556, 556, 0, 0, 3328, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 851, 534, 534, 534, 534, 534, 580, 580, 3379, 580, 580, 534, 556, 580, 0, 0, 0, 3384, 0, 0, 0, 0, 0, 0, 306, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 298, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 3395, 534, 534, 534, 534, 534, 534, 534, 2156, 534, 2158, 534, 534, 534, 534, 534, 534, 534, 2170, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2546, 534, 534, 534, 534, 0, 2549, 387, 389, 339, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 393, 394, 0, 395, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 1209, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 2405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 1099, 0, 0, 0, 338, 0, 0, 440, 0, 0, 464, 464, 464, 464, 464, 464, 464, 464, 546, 569, 546, 569, 546, 546, 569, 546, 475, 464, 464, 464, 493, 470, 493, 493, 493, 493, 493, 493, 493, 493, 464, 464, 470, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 474, 474, 464, 475, 464, 464, 464, 593, 569, 569, 569, 569, 569, 569, 569, 593, 593, 593, 546, 593, 593, 593, 593, 593, 593, 593, 569, 569, 546, 569, 593, 569, 593, 1, 12290, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 710, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1643, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2411, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 775, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 779, 656, 0, 0, 796, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 434, 0, 0, 331, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 796, 779, 0, 0, 801, 0, 660, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 2755, 0, 0, 0, 0, 0, 0, 0, 0, 2937, 0, 0, 0, 0, 0, 0, 0, 0, 2741, 0, 0, 0, 2745, 0, 2747, 0, 0, 0, 775, 801, 0, 801, 796, 0, 0, 0, 815, 0, 0, 0, 656, 818, 828, 0, 0, 0, 0, 534, 832, 534, 534, 534, 848, 534, 534, 862, 534, 534, 534, 534, 534, 534, 2504, 534, 534, 534, 534, 534, 534, 534, 534, 534, 898, 534, 556, 556, 556, 556, 556, 534, 534, 875, 534, 534, 534, 534, 893, 534, 534, 534, 556, 556, 904, 556, 556, 0, 580, 580, 976, 580, 580, 580, 580, 580, 580, 1007, 580, 580, 580, 580, 580, 1908, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1921, 556, 921, 556, 556, 935, 556, 556, 556, 556, 948, 556, 556, 556, 556, 966, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 3594, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3156, 534, 534, 534, 534, 534, 534, 534, 2802, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1795, 534, 534, 1341, 1800, 556, 556, 580, 1022, 580, 580, 580, 580, 1040, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 3428, 580, 580, 580, 580, 580, 534, 556, 580, 3381, 0, 3383, 0, 0, 0, 0, 0, 0, 0, 2126, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1717, 534, 534, 0, 0, 1131, 0, 364, 364, 0, 1134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2481, 0, 0, 0, 0, 0, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 1091, 0, 0, 0, 0, 0, 0, 0, 0, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 1, 12290, 1093, 0, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 1131, 0, 0, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2713, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 1248, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 841, 534, 534, 534, 534, 534, 534, 534, 556, 556, 1360, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1382, 580, 580, 1497, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2334, 580, 580, 556, 1533, 556, 556, 580, 580, 1537, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 1121, 0, 0, 1124, 1125, 0, 0, 0, 0, 1584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1614, 0, 0, 0, 1602, 0, 0, 1605, 0, 1607, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 0, 0, 1697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2423, 0, 534, 1755, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2162, 534, 556, 1822, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3049, 556, 556, 556, 556, 2265, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3031, 556, 556, 556, 556, 0, 0, 0, 0, 2402, 0, 2404, 0, 0, 2407, 0, 0, 0, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 2412, 0, 0, 0, 2415, 2416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2912256, 0, 3207168, 0, 0, 0, 0, 2440, 0, 2441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2470, 0, 0, 0, 0, 0, 2461, 0, 0, 0, 0, 0, 0, 0, 0, 2469, 0, 0, 0, 0, 0, 2475, 0, 0, 0, 0, 2478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2486, 0, 0, 0, 0, 435, 0, 0, 447, 463, 463, 463, 463, 463, 463, 463, 463, 463, 473, 463, 463, 463, 463, 463, 463, 534, 2500, 2501, 534, 534, 534, 534, 534, 2506, 534, 2508, 534, 534, 534, 534, 2512, 2525, 534, 534, 534, 534, 534, 534, 2533, 534, 534, 534, 534, 2537, 534, 534, 534, 534, 534, 534, 1262, 534, 534, 534, 534, 534, 534, 1277, 534, 534, 556, 556, 556, 2561, 556, 556, 2564, 2565, 556, 556, 556, 556, 556, 2570, 556, 2572, 556, 556, 556, 556, 2576, 556, 556, 556, 556, 556, 556, 556, 556, 2582, 556, 556, 0, 580, 580, 977, 580, 580, 580, 993, 580, 580, 580, 580, 580, 580, 1443, 580, 580, 580, 1447, 580, 580, 1458, 580, 580, 556, 556, 2602, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1833, 556, 556, 2685, 534, 534, 556, 2687, 556, 556, 580, 2689, 580, 580, 0, 0, 0, 0, 0, 0, 0, 2936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2036, 0, 0, 0, 0, 0, 0, 0, 0, 2708, 0, 0, 0, 0, 0, 0, 0, 2714, 2715, 2716, 0, 0, 0, 0, 0, 0, 2060, 0, 0, 0, 0, 0, 2064, 0, 0, 2066, 0, 2735, 0, 2737, 0, 0, 0, 2740, 0, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 2960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2430, 0, 0, 0, 0, 0, 2435, 534, 534, 2810, 534, 0, 0, 2811, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2566, 556, 556, 556, 556, 556, 556, 556, 2856, 556, 556, 2859, 556, 0, 0, 2860, 580, 580, 580, 580, 580, 580, 580, 2651, 580, 580, 580, 580, 580, 580, 2658, 580, 580, 2892, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2321, 580, 2902, 580, 580, 2905, 580, 580, 2908, 580, 2909, 2910, 2911, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 3115, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 420, 0, 65536, 0, 2929, 2930, 0, 0, 0, 0, 2935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2730, 0, 0, 0, 0, 0, 534, 534, 2997, 534, 2999, 534, 534, 534, 534, 534, 534, 3005, 534, 534, 3007, 534, 534, 534, 534, 534, 1324, 534, 534, 534, 534, 534, 534, 534, 534, 1335, 1336, 556, 3037, 556, 3039, 556, 556, 556, 556, 556, 556, 556, 3046, 556, 556, 3048, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 377, 0, 380, 0, 0, 0, 380, 0, 0, 580, 580, 3079, 580, 3081, 580, 580, 580, 580, 580, 580, 580, 3088, 580, 580, 3090, 534, 534, 534, 534, 534, 3164, 534, 534, 534, 534, 534, 534, 534, 3169, 534, 534, 534, 534, 534, 534, 2779, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3167, 534, 534, 534, 534, 534, 3181, 3182, 556, 556, 556, 556, 3186, 3187, 556, 556, 556, 556, 556, 3191, 556, 556, 0, 580, 580, 978, 580, 580, 580, 995, 580, 580, 1009, 580, 580, 580, 580, 580, 2353, 2354, 580, 580, 580, 580, 580, 580, 2361, 580, 580, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 3210, 3211, 580, 580, 580, 580, 580, 1442, 580, 580, 580, 580, 1448, 580, 580, 580, 580, 580, 580, 3524, 580, 3526, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 3215, 3216, 580, 580, 580, 580, 580, 3220, 580, 580, 580, 580, 580, 580, 580, 580, 1507, 580, 580, 580, 580, 580, 580, 580, 3226, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2684, 556, 556, 556, 3288, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2258, 556, 556, 556, 3307, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2347, 2348, 3132, 0, 0, 0, 0, 534, 534, 3393, 534, 534, 534, 534, 3398, 534, 534, 534, 534, 534, 534, 1290, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1267, 534, 534, 534, 534, 534, 534, 534, 3403, 534, 534, 556, 556, 3408, 556, 556, 556, 556, 3413, 556, 556, 556, 556, 556, 556, 1874, 556, 556, 556, 556, 556, 1881, 556, 556, 556, 3418, 556, 556, 556, 580, 580, 3424, 580, 580, 580, 580, 3429, 580, 580, 580, 580, 580, 1468, 580, 580, 580, 580, 580, 580, 580, 1476, 580, 580, 3434, 580, 580, 580, 0, 0, 0, 0, 0, 3441, 0, 0, 0, 0, 534, 534, 534, 534, 3497, 534, 534, 534, 534, 534, 534, 534, 534, 1731, 534, 534, 534, 534, 1735, 534, 534, 534, 3563, 3564, 534, 534, 556, 556, 556, 3569, 3570, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3212, 580, 580, 580, 3575, 3576, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 0, 580, 580, 979, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2358, 580, 580, 580, 580, 580, 341, 342, 343, 344, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 344, 344, 345, 344, 0, 343, 344, 448, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 480, 489, 489, 497, 489, 499, 489, 489, 499, 499, 489, 499, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 547, 570, 547, 570, 547, 547, 570, 547, 594, 570, 570, 570, 570, 570, 570, 570, 594, 594, 594, 547, 594, 594, 594, 594, 594, 594, 594, 570, 570, 547, 570, 594, 570, 594, 1, 12290, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 666, 0, 668, 669, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 1220, 1250, 1251, 0, 1220, 0, 534, 534, 534, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 692, 364, 364, 364, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1691, 0, 0, 0, 0, 712, 0, 714, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2138112, 0, 0, 0, 0, 0, 0, 639, 745, 746, 747, 0, 0, 0, 0, 0, 753, 754, 0, 0, 0, 0, 0, 748, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 1134592, 0, 0, 0, 0, 0, 685, 0, 0, 665, 0, 685, 0, 797, 668, 716, 0, 685, 798, 0, 0, 0, 0, 0, 1090, 1091, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 2948, 0, 0, 0, 0, 0, 2951, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 747, 807, 808, 0, 0, 0, 0, 0, 1119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3055616, 0, 0, 0, 3133440, 0, 0, 0, 0, 747, 0, 0, 812, 692, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0, 2073, 0, 2075, 0, 0, 0, 0, 0, 0, 0, 0, 1702, 0, 0, 1703, 0, 0, 1704, 0, 819, 0, 0, 0, 685, 692, 0, 0, 685, 817, 817, 0, 0, 0, 0, 0, 0, 0, 3131, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 756, 870, 873, 534, 534, 534, 885, 889, 534, 534, 534, 534, 556, 556, 556, 911, 915, 918, 556, 926, 556, 556, 556, 941, 943, 946, 556, 556, 556, 958, 962, 556, 556, 0, 580, 580, 980, 986, 580, 580, 580, 580, 1004, 580, 580, 580, 580, 580, 1469, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2627, 580, 580, 2630, 2631, 580, 1020, 580, 580, 580, 1032, 1036, 580, 580, 580, 580, 0, 0, 0, 1048, 1049, 1050, 838, 534, 885, 889, 1055, 911, 556, 958, 962, 1060, 0, 985, 580, 1032, 1036, 1065, 1101, 0, 0, 0, 0, 1105, 0, 0, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 1, 12290, 1298, 534, 534, 1302, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1312, 534, 534, 534, 534, 534, 1727, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1796, 534, 1341, 0, 556, 556, 534, 1319, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1332, 534, 534, 534, 534, 534, 534, 1304, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1266, 1273, 534, 534, 534, 534, 534, 556, 1383, 556, 556, 556, 556, 556, 556, 556, 1390, 556, 556, 1394, 556, 556, 556, 556, 556, 1385, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2595, 556, 556, 556, 556, 556, 580, 580, 580, 1482, 580, 580, 1486, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1929, 580, 580, 580, 580, 580, 580, 580, 1496, 580, 580, 1503, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1516, 1615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1655, 0, 0, 0, 1647, 0, 1649, 0, 0, 0, 1651, 0, 741, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 69632, 73728, 0, 418, 418, 0, 0, 65536, 418, 0, 0, 0, 534, 1709, 534, 534, 534, 534, 534, 534, 1715, 534, 534, 534, 534, 0, 0, 556, 2812, 556, 556, 556, 556, 556, 556, 556, 556, 3356, 556, 556, 556, 556, 556, 556, 556, 534, 534, 1787, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 1803, 556, 556, 556, 556, 1839, 556, 556, 556, 1843, 556, 556, 1848, 556, 556, 556, 556, 556, 556, 1892, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 1269, 1453, 1361, 534, 534, 534, 534, 534, 556, 580, 580, 580, 1906, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1917, 580, 580, 580, 1935, 580, 580, 580, 1939, 580, 580, 1944, 580, 580, 580, 580, 580, 580, 580, 580, 1945, 580, 580, 580, 580, 580, 580, 580, 0, 0, 2010, 0, 1077, 0, 0, 0, 2012, 0, 1081, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 3147, 0, 534, 534, 534, 2177, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 1800, 556, 556, 556, 556, 2263, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1850, 556, 556, 580, 580, 2350, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2346, 580, 580, 0, 2550, 0, 1800, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2569, 556, 2571, 556, 556, 2613, 556, 556, 556, 0, 0, 0, 2616, 0, 1896, 580, 580, 580, 580, 580, 580, 3219, 580, 580, 580, 580, 580, 580, 580, 580, 3225, 0, 0, 2761, 0, 0, 0, 534, 2765, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3166, 534, 534, 534, 534, 534, 3171, 534, 534, 2789, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1295, 534, 534, 556, 556, 2836, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1865, 556, 556, 534, 534, 2985, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1310, 534, 534, 534, 534, 534, 2998, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 1801, 556, 556, 556, 3025, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3205, 556, 556, 3038, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2247, 556, 556, 580, 580, 3067, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2643, 580, 580, 580, 580, 580, 3080, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2345, 580, 580, 580, 534, 534, 534, 534, 534, 3267, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2159, 534, 534, 534, 534, 2163, 3285, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2289, 3336, 534, 534, 534, 534, 3340, 534, 534, 534, 534, 534, 3346, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 0, 1545, 0, 0, 0, 0, 0, 1620, 0, 0, 1623, 0, 1625, 0, 0, 0, 0, 0, 0, 0, 2480, 0, 0, 0, 0, 0, 0, 0, 0, 555, 578, 555, 578, 555, 555, 578, 555, 556, 556, 3351, 556, 556, 556, 556, 3355, 556, 556, 556, 556, 556, 3361, 556, 556, 0, 580, 580, 981, 580, 580, 580, 580, 580, 580, 1010, 1012, 580, 580, 580, 580, 1029, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 3377, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3251, 0, 3132, 3253, 0, 0, 3256, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 3396, 534, 534, 534, 3400, 534, 534, 534, 534, 534, 1742, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2536, 534, 534, 534, 534, 534, 388, 0, 0, 0, 392, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233472, 0, 0, 0, 0, 0, 0, 0, 404, 0, 346, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 515, 515, 515, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 515, 515, 515, 515, 515, 515, 515, 548, 571, 548, 571, 548, 548, 571, 548, 595, 571, 571, 571, 571, 571, 571, 571, 595, 595, 595, 548, 595, 595, 595, 595, 595, 595, 595, 571, 571, 610, 615, 595, 615, 621, 1, 12290, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1668, 534, 534, 876, 534, 534, 534, 534, 894, 534, 534, 534, 556, 556, 905, 556, 556, 0, 580, 580, 982, 580, 580, 580, 580, 1001, 1005, 1011, 580, 1016, 580, 580, 1023, 580, 580, 580, 580, 1041, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 1544, 0, 0, 0, 0, 0, 0, 2764, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1268, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 1178, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 274432, 274432, 274432, 0, 274432, 274432, 274432, 274432, 1256, 534, 534, 534, 534, 534, 534, 534, 534, 1269, 534, 534, 534, 534, 1279, 534, 534, 534, 534, 534, 1757, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2197, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 901, 556, 556, 556, 1347, 556, 556, 556, 556, 556, 556, 556, 1877, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 1899, 580, 580, 580, 580, 556, 556, 1361, 556, 556, 556, 556, 1371, 556, 556, 556, 556, 556, 556, 556, 556, 3468, 556, 556, 3470, 556, 580, 580, 580, 556, 556, 556, 556, 1422, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1990, 1991, 1992, 534, 1994, 534, 534, 556, 1998, 556, 556, 580, 580, 580, 3367, 580, 580, 580, 580, 3371, 580, 580, 580, 580, 580, 580, 3232, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2384, 534, 534, 534, 2388, 556, 556, 556, 580, 580, 1439, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1453, 580, 580, 580, 580, 580, 2381, 2382, 2383, 534, 534, 534, 534, 556, 556, 556, 556, 3410, 556, 556, 556, 556, 556, 556, 556, 580, 1463, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1477, 580, 580, 1498, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1514, 580, 580, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 2034, 2035, 0, 2037, 2038, 0, 0, 0, 0, 0, 0, 0, 1555, 0, 0, 0, 1561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 1, 12290, 0, 0, 0, 1586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 1600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434, 0, 556, 1852, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3363, 0, 1556, 0, 0, 0, 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 305, 204800, 204800, 0, 205105, 204800, 1, 12290, 0, 0, 0, 2070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 2111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 0, 534, 2165, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2173, 534, 2250, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2584, 2337, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2375, 580, 2211, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2597, 556, 556, 556, 556, 556, 556, 2588, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2831, 556, 556, 556, 534, 3107, 556, 3109, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2138112, 1170, 0, 0, 0, 0, 0, 3132, 3330, 0, 0, 3332, 0, 0, 0, 0, 0, 534, 3335, 534, 534, 534, 534, 534, 1774, 534, 534, 534, 1778, 534, 534, 534, 534, 534, 534, 534, 1776, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2535, 534, 534, 534, 534, 534, 534, 534, 3337, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 3350, 556, 556, 3352, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2852, 556, 556, 556, 556, 556, 580, 3366, 580, 580, 3368, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1946, 580, 580, 580, 580, 580, 580, 3132, 0, 3388, 0, 3390, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 902, 556, 556, 0, 0, 0, 783, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 2557, 556, 556, 556, 556, 556, 556, 2848, 556, 556, 556, 556, 556, 556, 556, 556, 556, 947, 556, 556, 556, 556, 556, 556, 556, 922, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1381, 556, 556, 972, 0, 580, 580, 580, 580, 580, 580, 996, 580, 580, 580, 580, 580, 580, 1910, 580, 580, 580, 580, 1916, 580, 580, 580, 580, 78114, 1066, 0, 0, 1070, 1074, 0, 0, 1078, 1082, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 0, 0, 0, 1225, 0, 1181, 0, 534, 3162, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2201, 534, 580, 580, 580, 3218, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2629, 580, 580, 580, 347, 347, 349, 347, 0, 0, 347, 347, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 2125, 0, 0, 2128, 0, 534, 534, 2131, 534, 534, 0, 0, 0, 347, 347, 349, 347, 347, 347, 347, 347, 347, 506, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 549, 572, 549, 572, 549, 549, 572, 549, 596, 572, 572, 572, 572, 572, 572, 572, 596, 596, 596, 549, 596, 596, 596, 596, 596, 596, 596, 572, 572, 549, 572, 596, 572, 596, 1, 12290, 0, 0, 0, 715, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1147348, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 354, 355, 356, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 674, 0, 0, 0, 0, 0, 0, 0, 794, 795, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 795, 0, 0, 794, 809, 0, 803, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 534, 534, 839, 534, 534, 534, 534, 857, 534, 534, 534, 534, 534, 534, 1728, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3272, 534, 534, 534, 3273, 3274, 534, 534, 877, 879, 534, 534, 890, 534, 534, 534, 534, 556, 556, 906, 912, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 1543, 0, 0, 0, 1549, 556, 556, 556, 930, 556, 556, 556, 556, 556, 950, 952, 556, 556, 963, 556, 556, 556, 556, 556, 1840, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1831, 556, 556, 556, 556, 1835, 580, 1024, 1026, 580, 580, 1037, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 1540, 0, 0, 0, 1546, 0, 0, 0, 0, 0, 131072, 0, 131072, 131072, 131072, 131072, 0, 131072, 131072, 131072, 131072, 131072, 131072, 0, 0, 0, 0, 0, 131072, 0, 131072, 1, 12290, 839, 879, 534, 890, 534, 912, 952, 556, 963, 556, 0, 986, 1026, 580, 1037, 580, 580, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 2397, 0, 0, 0, 0, 0, 330, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2731, 0, 0, 0, 0, 0, 0, 1132, 364, 364, 0, 0, 1135, 0, 0, 0, 1138, 0, 1140, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 2556, 556, 556, 556, 556, 556, 556, 2577, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1897, 580, 580, 580, 580, 580, 580, 1142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 2555, 556, 556, 556, 556, 2559, 1158, 0, 0, 0, 0, 1163, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 0, 1168, 534, 534, 534, 534, 534, 534, 1743, 534, 534, 534, 534, 534, 534, 534, 534, 534, 897, 534, 556, 556, 556, 556, 914, 534, 534, 534, 1286, 1288, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 907, 556, 556, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 1348, 556, 556, 556, 556, 556, 556, 0, 2298, 580, 580, 580, 580, 580, 580, 580, 580, 2640, 580, 580, 580, 580, 580, 580, 2645, 580, 580, 580, 1440, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2670, 2671, 580, 580, 1494, 580, 580, 580, 580, 580, 580, 580, 1508, 580, 580, 580, 580, 580, 580, 580, 2678, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 1996, 556, 556, 556, 2000, 580, 580, 1519, 1520, 580, 580, 580, 0, 534, 580, 556, 534, 1528, 534, 534, 1531, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 1541, 0, 0, 0, 1547, 0, 0, 0, 0, 556, 556, 556, 2553, 556, 2554, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 2863, 580, 580, 580, 1532, 556, 556, 1535, 580, 1536, 580, 580, 1539, 1066, 0, 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1203, 0, 0, 0, 0, 1633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 1658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 1698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 0, 0, 534, 1738, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2207, 2549, 534, 534, 534, 1788, 534, 534, 534, 534, 1794, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 556, 1891, 556, 556, 26009, 1896, 580, 580, 580, 580, 580, 580, 1470, 1472, 580, 580, 580, 580, 580, 580, 580, 580, 1960, 580, 580, 1963, 580, 580, 580, 580, 556, 556, 1870, 556, 556, 556, 1875, 556, 556, 556, 556, 556, 556, 556, 556, 1884, 556, 556, 556, 556, 1890, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 1927, 580, 580, 580, 580, 1931, 580, 580, 580, 580, 580, 1904, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2672, 580, 580, 580, 1971, 580, 580, 580, 580, 580, 580, 580, 580, 1980, 580, 580, 580, 580, 580, 1504, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2316, 580, 580, 2320, 580, 580, 1986, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 2693, 0, 0, 0, 0, 0, 2099, 0, 2101, 2102, 2103, 0, 2105, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 424, 65536, 0, 0, 0, 0, 2123, 0, 0, 0, 0, 0, 0, 0, 2129, 534, 534, 534, 534, 0, 2211, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3045, 556, 556, 556, 556, 556, 534, 534, 2136, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1333, 534, 534, 534, 534, 534, 2166, 534, 2168, 534, 2171, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3271, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2178, 534, 534, 534, 534, 534, 2184, 534, 534, 534, 534, 534, 534, 534, 2792, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2519, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2206, 0, 0, 0, 0, 2213, 556, 556, 556, 556, 556, 556, 939, 556, 944, 556, 951, 556, 954, 556, 556, 968, 556, 2221, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1415, 556, 556, 556, 2251, 556, 2253, 556, 2256, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2607, 556, 556, 556, 2610, 556, 556, 556, 556, 556, 2264, 556, 556, 556, 556, 556, 2270, 556, 556, 556, 556, 556, 556, 1369, 556, 556, 556, 1374, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2293, 0, 0, 0, 0, 2300, 580, 580, 580, 580, 580, 580, 1942, 580, 580, 580, 1947, 580, 580, 580, 580, 580, 580, 2308, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2880, 580, 580, 580, 2338, 580, 2340, 580, 2343, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1961, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2351, 580, 580, 580, 580, 580, 2357, 580, 580, 580, 580, 580, 580, 1958, 1959, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3234, 580, 580, 580, 534, 580, 556, 0, 0, 2400, 2401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 2436, 0, 0, 2439, 0, 0, 0, 0, 2443, 0, 0, 0, 0, 0, 0, 0, 0, 2818048, 2846720, 0, 2916352, 0, 0, 3002368, 0, 0, 0, 2451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2459, 0, 0, 0, 0, 556, 556, 2552, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2851, 556, 556, 556, 556, 556, 556, 0, 0, 0, 2477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2485, 0, 0, 0, 0, 0, 1195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111044, 0, 0, 0, 0, 534, 534, 534, 534, 534, 2503, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2520, 534, 534, 534, 534, 534, 556, 556, 556, 556, 2562, 556, 556, 556, 556, 556, 2567, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 2304, 580, 580, 580, 2633, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2901, 580, 534, 534, 534, 2686, 556, 556, 556, 2688, 580, 580, 580, 2690, 2691, 0, 0, 0, 0, 0, 0, 2453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 2709, 0, 2710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 0, 0, 0, 2855, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 2864, 580, 2865, 580, 580, 2904, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3113, 0, 0, 0, 0, 0, 0, 0, 0, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 1, 12290, 556, 556, 556, 3053, 556, 556, 556, 556, 556, 556, 556, 580, 3061, 580, 580, 580, 580, 580, 2649, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2371, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3095, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 2386, 2387, 556, 556, 2390, 2391, 534, 534, 3338, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3347, 534, 534, 3349, 556, 556, 556, 556, 3353, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3362, 556, 556, 556, 556, 580, 580, 580, 580, 580, 3427, 580, 580, 580, 3431, 580, 580, 580, 580, 1031, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 3365, 580, 580, 580, 580, 3369, 580, 580, 580, 580, 580, 580, 580, 580, 2356, 580, 580, 580, 580, 580, 580, 580, 580, 3378, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 3449, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 3179, 556, 556, 556, 556, 556, 3462, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 3300, 580, 580, 580, 3303, 580, 580, 580, 580, 580, 3476, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 0, 3491, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3158, 534, 534, 534, 534, 534, 3565, 534, 556, 556, 556, 556, 556, 3571, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3372, 580, 580, 580, 580, 580, 580, 3577, 580, 580, 3579, 0, 3581, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 2224, 556, 556, 2227, 556, 556, 556, 556, 556, 556, 2235, 400, 0, 0, 0, 0, 0, 367, 375, 403, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2054, 408, 410, 0, 0, 367, 375, 0, 69632, 73728, 0, 0, 0, 0, 426, 65536, 0, 0, 0, 0, 556, 2551, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2271, 556, 556, 556, 556, 556, 426, 426, 0, 426, 0, 410, 426, 449, 0, 0, 0, 0, 0, 0, 0, 0, 534, 556, 534, 556, 534, 534, 556, 534, 367, 0, 0, 395, 0, 0, 0, 0, 0, 350, 0, 0, 367, 0, 0, 395, 0, 408, 0, 490, 490, 0, 490, 490, 490, 490, 490, 490, 490, 490, 516, 516, 516, 516, 449, 449, 449, 449, 524, 449, 449, 525, 449, 516, 530, 516, 516, 516, 530, 516, 516, 516, 516, 532, 550, 573, 550, 573, 550, 550, 573, 550, 597, 573, 573, 573, 573, 573, 573, 573, 597, 597, 597, 550, 597, 597, 597, 597, 597, 597, 597, 573, 573, 611, 616, 597, 616, 622, 1, 12290, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1567, 1568, 0, 789, 0, 0, 0, 0, 534, 834, 534, 534, 534, 534, 534, 534, 863, 865, 534, 534, 534, 534, 534, 1790, 1792, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 0, 580, 580, 580, 983, 987, 580, 580, 580, 580, 580, 580, 1013, 580, 556, 556, 556, 556, 936, 938, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2829, 556, 556, 2832, 556, 556, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1083, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2050, 0, 0, 0, 0, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 0, 0, 0, 0, 0, 1235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1581, 1582, 0, 0, 0, 0, 1085, 1208, 0, 0, 0, 0, 0, 0, 1215, 0, 0, 0, 0, 0, 0, 347, 348, 349, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 1220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 1229, 534, 534, 534, 1259, 534, 534, 534, 1263, 534, 534, 1274, 534, 534, 1278, 534, 534, 534, 534, 534, 534, 3001, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1327, 534, 534, 534, 534, 534, 534, 534, 1299, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2497, 534, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 1351, 556, 556, 556, 556, 556, 1423, 556, 556, 556, 1430, 556, 556, 26009, 1341, 975, 580, 1355, 556, 556, 1366, 556, 556, 1370, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2828, 556, 556, 556, 556, 556, 556, 1462, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3315, 580, 1479, 580, 580, 580, 1483, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2877, 580, 580, 580, 580, 0, 1571, 1572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1612, 0, 0, 0, 0, 0, 0, 1603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 696, 0, 1616, 0, 1618, 0, 0, 0, 1622, 0, 0, 0, 1626, 0, 0, 0, 1630, 0, 0, 0, 0, 1572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 695, 0, 534, 534, 534, 1724, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1782, 1783, 534, 534, 556, 1837, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1818, 556, 556, 556, 556, 1889, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 1976, 580, 580, 580, 580, 580, 1981, 580, 580, 580, 0, 0, 0, 2031, 0, 2032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200246, 151552, 2200246, 0, 0, 2175, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2186, 534, 534, 534, 534, 534, 534, 1758, 534, 534, 534, 534, 1764, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 2814, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 2301, 580, 580, 580, 580, 580, 1038, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 580, 580, 2394, 2395, 0, 1544, 0, 1550, 0, 1556, 0, 1562, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2052, 0, 0, 2476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2482, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 345, 344, 65536, 343, 534, 534, 534, 534, 2530, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1275, 534, 534, 534, 534, 580, 2661, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3075, 580, 580, 0, 0, 2722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1665, 0, 0, 534, 2797, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2511, 534, 556, 556, 2845, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2259, 556, 556, 0, 0, 2970, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 855, 534, 534, 534, 534, 0, 0, 0, 0, 3122, 3123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 3149, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1737, 3172, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 2242, 556, 556, 556, 556, 556, 556, 556, 556, 1406, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 3229, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 3426, 580, 580, 580, 580, 580, 580, 580, 2639, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2344, 580, 580, 580, 580, 580, 580, 534, 3236, 556, 3238, 580, 3240, 3241, 0, 0, 0, 0, 3245, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 397, 0, 0, 0, 323, 0, 0, 0, 3258, 0, 0, 0, 0, 0, 0, 0, 0, 3261, 0, 534, 534, 534, 534, 534, 534, 534, 3154, 3155, 534, 534, 534, 534, 3159, 3160, 3263, 534, 534, 534, 3266, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1330, 534, 534, 534, 534, 580, 580, 3318, 534, 3319, 556, 3320, 580, 0, 0, 0, 0, 0, 0, 0, 0, 543, 566, 543, 566, 543, 543, 566, 543, 556, 556, 3543, 556, 3544, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 3551, 580, 3552, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 3536, 534, 3537, 534, 534, 534, 534, 534, 534, 534, 1730, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2183, 534, 534, 534, 534, 534, 534, 409, 355, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 638, 0, 0, 641, 642, 0, 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, 1594, 0, 0, 0, 0, 466, 477, 466, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 517, 517, 521, 521, 521, 521, 466, 466, 466, 466, 466, 466, 466, 471, 466, 521, 517, 521, 521, 517, 521, 521, 521, 521, 533, 551, 574, 551, 574, 551, 551, 574, 551, 598, 574, 574, 574, 574, 574, 574, 574, 598, 598, 598, 551, 598, 598, 598, 598, 598, 598, 598, 574, 574, 612, 617, 598, 617, 623, 1, 12290, 0, 0, 731, 0, 0, 0, 637, 731, 0, 737, 738, 637, 0, 0, 0, 0, 0, 0, 656, 0, 0, 659, 660, 0, 0, 0, 0, 0, 0, 0, 2754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2420, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 791, 0, 0, 0, 0, 0, 1575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 303, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2016, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 349, 347, 65536, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 777, 777, 0, 637, 0, 0, 0, 786, 0, 791, 0, 777, 0, 806, 0, 0, 0, 658, 0, 777, 791, 829, 0, 534, 835, 534, 534, 534, 534, 854, 858, 864, 534, 869, 556, 556, 927, 931, 937, 556, 942, 556, 556, 556, 556, 556, 959, 556, 556, 556, 556, 556, 1424, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 534, 534, 886, 534, 534, 556, 556, 959, 556, 556, 0, 580, 580, 1033, 580, 580, 580, 580, 1033, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 1086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2449, 0, 0, 0, 0, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0, 1117, 1118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 208896, 0, 0, 0, 0, 0, 0, 1179, 0, 1182, 0, 0, 0, 0, 0, 1187, 0, 0, 0, 0, 0, 0, 2726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 1086, 0, 0, 0, 1211, 0, 1213, 0, 0, 0, 0, 0, 0, 0, 1638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2964, 2965, 0, 0, 1230, 1187, 0, 1211, 1233, 0, 1236, 0, 0, 0, 0, 0, 1117, 0, 0, 0, 0, 0, 0, 2739, 0, 0, 0, 0, 2744, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 303, 2424832, 2433024, 0, 0, 2457600, 0, 1245, 0, 0, 0, 0, 0, 1245, 0, 0, 1136, 1245, 0, 1252, 534, 534, 534, 534, 534, 534, 3279, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3514, 556, 556, 556, 580, 534, 534, 1258, 534, 534, 534, 534, 1264, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3455, 534, 534, 3457, 556, 556, 556, 534, 534, 1285, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1296, 534, 534, 534, 534, 534, 534, 3341, 534, 534, 534, 534, 534, 534, 534, 534, 556, 580, 3607, 3608, 3609, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 333, 0, 0, 333, 0, 0, 333, 0, 0, 0, 534, 534, 1301, 534, 534, 534, 534, 534, 534, 534, 534, 1308, 534, 534, 534, 1315, 1317, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2149, 534, 1339, 534, 1341, 901, 1343, 556, 556, 556, 556, 556, 1350, 556, 556, 556, 556, 556, 556, 2225, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2244, 556, 556, 556, 556, 2248, 556, 1356, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1377, 556, 556, 556, 556, 556, 556, 2241, 556, 2243, 556, 556, 556, 556, 556, 556, 556, 1425, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 556, 556, 1400, 556, 556, 556, 1407, 1409, 556, 556, 556, 556, 556, 556, 1386, 556, 556, 556, 556, 556, 556, 556, 1395, 556, 1480, 580, 580, 580, 580, 1485, 580, 580, 580, 580, 580, 580, 580, 580, 1492, 580, 580, 580, 580, 2352, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2628, 580, 580, 580, 580, 580, 580, 1499, 1501, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2878, 580, 580, 2881, 1550, 0, 0, 0, 1556, 0, 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 2957312, 0, 0, 0, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2094, 0, 0, 0, 1573, 1574, 0, 0, 0, 0, 0, 1580, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 373, 0, 65536, 0, 0, 0, 1601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1677, 0, 0, 0, 0, 0, 0, 1619, 0, 0, 0, 0, 0, 0, 0, 1627, 1628, 0, 0, 0, 0, 0, 1604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254407, 0, 0, 0, 0, 0, 0, 0, 0, 1635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 386, 0, 0, 0, 1685, 0, 0, 0, 0, 0, 1689, 0, 0, 1692, 0, 0, 0, 0, 0, 0, 3143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2756, 0, 0, 2759, 0, 0, 0, 0, 0, 0, 1689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1705, 0, 1707, 1681, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1719, 534, 534, 534, 534, 534, 1791, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 556, 2295, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2666, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1446, 580, 580, 580, 580, 580, 580, 534, 534, 534, 1725, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1736, 534, 534, 534, 534, 534, 2179, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2143, 534, 2145, 534, 534, 534, 534, 534, 534, 1740, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1751, 534, 534, 534, 534, 534, 2207, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1403, 556, 556, 556, 556, 556, 556, 556, 556, 1408, 556, 556, 556, 556, 556, 556, 556, 534, 534, 1756, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2172, 534, 534, 2002, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 2019, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 2055, 2056, 0, 0, 2058, 2059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2617344, 0, 0, 0, 0, 2081, 0, 0, 0, 0, 2084, 2085, 0, 0, 0, 0, 0, 2091, 0, 0, 0, 0, 0, 0, 3259, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 849, 534, 534, 534, 534, 534, 534, 534, 2152, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2161, 534, 534, 534, 534, 534, 534, 3452, 534, 3454, 534, 534, 3456, 534, 556, 556, 556, 556, 3509, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 0, 0, 3595, 534, 534, 2164, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2174, 534, 534, 534, 2191, 534, 534, 534, 2194, 534, 534, 534, 534, 2199, 534, 534, 534, 534, 534, 534, 1759, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1732, 534, 534, 534, 534, 534, 534, 556, 2237, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2246, 556, 556, 2249, 556, 556, 2277, 556, 556, 556, 556, 2281, 556, 556, 556, 556, 2286, 556, 556, 556, 556, 556, 1808, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2608, 556, 556, 556, 556, 556, 580, 2324, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2333, 580, 580, 2336, 580, 580, 2364, 580, 580, 580, 580, 2368, 580, 580, 580, 580, 2373, 580, 580, 580, 580, 580, 2665, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1979, 580, 580, 580, 580, 580, 2398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2408, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 770, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 534, 534, 2488, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2496, 534, 534, 534, 534, 534, 882, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3411, 556, 556, 556, 3415, 556, 556, 534, 534, 2514, 534, 534, 2516, 534, 2517, 534, 534, 534, 534, 534, 534, 534, 2524, 534, 534, 2528, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2539, 556, 556, 2560, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3472, 580, 580, 556, 556, 556, 2575, 556, 556, 556, 2578, 556, 556, 2580, 556, 2581, 556, 556, 556, 556, 556, 1827, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1814, 556, 556, 556, 556, 1820, 580, 2646, 580, 2647, 580, 580, 580, 580, 580, 580, 580, 580, 2655, 580, 580, 2659, 0, 2696, 2697, 0, 0, 2700, 2701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3178496, 2670592, 0, 2744320, 0, 0, 2772, 534, 2775, 534, 534, 534, 534, 2780, 534, 534, 534, 2783, 534, 534, 534, 534, 534, 534, 534, 3002, 3003, 534, 534, 534, 534, 534, 534, 534, 534, 2494, 534, 534, 534, 534, 534, 534, 534, 534, 1744, 534, 534, 534, 1748, 534, 534, 1753, 2808, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3358, 556, 556, 556, 556, 556, 2819, 556, 2822, 556, 556, 556, 556, 2827, 556, 556, 556, 2830, 556, 556, 556, 556, 556, 556, 2255, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2228, 556, 2230, 556, 556, 556, 556, 556, 556, 2857, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 2652, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2868, 580, 2871, 580, 580, 580, 580, 2876, 580, 580, 580, 2879, 580, 580, 580, 580, 1034, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 580, 580, 580, 580, 2906, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 3112, 0, 3114, 0, 0, 0, 3118, 0, 0, 534, 534, 534, 534, 3013, 534, 534, 534, 534, 534, 556, 556, 556, 3021, 556, 556, 556, 556, 556, 2266, 2267, 556, 556, 556, 556, 556, 556, 2274, 556, 556, 0, 580, 580, 580, 580, 580, 580, 994, 580, 580, 1008, 580, 580, 580, 580, 580, 2341, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 733, 534, 580, 556, 0, 0, 3121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1693, 0, 0, 534, 3173, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 2839, 556, 556, 556, 556, 556, 556, 556, 556, 1811, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3183, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3033, 556, 556, 556, 556, 3193, 556, 556, 556, 556, 556, 556, 3199, 556, 3201, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 2303, 580, 2305, 580, 580, 580, 3228, 580, 3230, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 556, 556, 556, 580, 3423, 580, 3425, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2888, 580, 580, 580, 580, 580, 580, 0, 0, 0, 3248, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3334, 534, 534, 0, 3257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2982, 534, 534, 3264, 534, 534, 534, 3268, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1328, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3277, 534, 534, 534, 556, 556, 556, 556, 556, 3282, 556, 556, 556, 556, 556, 2294, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 3482, 580, 580, 3484, 580, 0, 0, 0, 556, 3286, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1883, 556, 3295, 556, 556, 556, 556, 580, 580, 580, 580, 580, 3301, 580, 580, 580, 3305, 580, 580, 580, 580, 2380, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 534, 3601, 556, 3602, 580, 3603, 3489, 0, 0, 0, 534, 534, 534, 3496, 534, 534, 534, 534, 534, 534, 534, 534, 1265, 534, 534, 534, 534, 534, 534, 534, 3504, 556, 556, 556, 3508, 556, 556, 556, 556, 556, 556, 556, 556, 3516, 556, 580, 580, 580, 580, 2624, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1475, 580, 580, 580, 580, 580, 580, 3521, 580, 580, 580, 580, 580, 580, 580, 580, 3529, 580, 0, 0, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 0, 122880, 0, 2105631, 12290, 0, 3532, 0, 3534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3540, 3541, 534, 534, 534, 534, 534, 2208, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1387, 556, 556, 556, 1391, 556, 556, 556, 556, 556, 357, 358, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 735, 654, 467, 467, 481, 0, 0, 481, 358, 358, 358, 503, 358, 358, 358, 358, 467, 467, 599, 575, 575, 575, 575, 575, 575, 575, 599, 599, 599, 552, 599, 599, 599, 599, 599, 599, 599, 575, 575, 552, 575, 599, 575, 599, 1, 12290, 556, 556, 928, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 964, 556, 556, 556, 556, 556, 2294, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 2924, 0, 0, 0, 0, 0, 0, 534, 534, 534, 891, 534, 556, 556, 556, 964, 556, 0, 580, 580, 580, 1038, 580, 580, 580, 580, 2636, 580, 2638, 580, 580, 580, 580, 2642, 580, 580, 580, 580, 0, 0, 0, 3440, 0, 0, 0, 3443, 0, 0, 534, 534, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1084, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2432, 0, 0, 0, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2132, 2133, 534, 534, 1340, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1353, 556, 556, 556, 556, 580, 3590, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 1713, 534, 534, 534, 534, 534, 534, 534, 2140, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2990, 534, 534, 534, 534, 534, 534, 556, 556, 1362, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3047, 556, 556, 556, 0, 1551, 0, 0, 0, 1557, 0, 0, 0, 1563, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 1656, 0, 0, 0, 0, 0, 0, 0, 0, 1662, 0, 1664, 0, 0, 0, 0, 0, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 1, 12290, 534, 534, 1771, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2523, 534, 534, 556, 556, 1854, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1866, 556, 556, 556, 556, 932, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1815, 556, 556, 556, 556, 556, 1887, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 2312, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1488, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1924, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3073, 580, 580, 580, 580, 580, 1937, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1950, 580, 580, 580, 580, 2648, 580, 580, 580, 580, 580, 580, 580, 580, 2656, 580, 580, 580, 580, 580, 3231, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 580, 580, 580, 1973, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1983, 580, 580, 580, 580, 1484, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3222, 580, 580, 580, 580, 0, 0, 0, 2043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 1171, 0, 0, 534, 2151, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2795, 534, 2236, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2600, 2323, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3089, 580, 580, 580, 580, 2622, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3224, 580, 580, 2695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2120, 2734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2719, 534, 2774, 534, 2776, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2160, 534, 534, 534, 556, 2821, 556, 2823, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3190, 556, 556, 556, 580, 580, 580, 2870, 580, 2872, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2654, 580, 580, 580, 580, 580, 0, 0, 0, 0, 2933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2981, 534, 556, 556, 556, 556, 3289, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3202, 556, 556, 556, 556, 580, 3308, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3314, 580, 580, 556, 556, 3589, 556, 580, 580, 580, 580, 3593, 580, 0, 0, 0, 534, 534, 534, 3152, 534, 534, 534, 534, 534, 534, 534, 3157, 534, 534, 534, 0, 0, 359, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2600960, 0, 0, 2768896, 2777088, 2781184, 0, 0, 369, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2040, 2041, 0, 600, 576, 576, 576, 576, 576, 576, 576, 600, 600, 600, 553, 600, 600, 600, 600, 600, 600, 600, 576, 576, 553, 576, 600, 576, 600, 1, 12290, 556, 923, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2234, 556, 556, 556, 556, 556, 1367, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3547, 3548, 556, 556, 580, 580, 580, 580, 580, 1500, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3102, 3103, 3104, 534, 1646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2748, 0, 0, 1684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2065, 0, 0, 580, 580, 580, 1938, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3223, 580, 580, 580, 0, 0, 0, 2723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 2942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2760, 0, 0, 0, 0, 3249, 0, 3250, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 3333, 0, 534, 534, 534, 0, 0, 0, 360, 361, 362, 363, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2445, 0, 0, 0, 0, 0, 0, 361, 0, 360, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 427, 65536, 0, 0, 0, 0, 685, 534, 534, 838, 842, 845, 534, 853, 534, 534, 534, 868, 427, 427, 0, 427, 0, 361, 427, 450, 0, 0, 0, 0, 0, 0, 0, 0, 690, 691, 0, 364, 364, 364, 0, 0, 0, 0, 0, 491, 491, 0, 498, 498, 498, 498, 504, 505, 498, 498, 518, 518, 518, 518, 450, 450, 450, 450, 450, 450, 450, 450, 450, 518, 518, 518, 518, 518, 518, 518, 518, 554, 577, 554, 577, 554, 554, 577, 554, 601, 577, 577, 577, 577, 577, 577, 577, 601, 601, 601, 554, 601, 601, 601, 601, 601, 601, 601, 577, 577, 613, 618, 601, 618, 624, 1, 12290, 534, 534, 887, 534, 534, 556, 556, 960, 556, 556, 0, 580, 580, 1034, 580, 580, 580, 580, 1502, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2332, 580, 580, 580, 580, 534, 2513, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2806, 534, 534, 534, 534, 2542, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 2216, 556, 2218, 556, 580, 2674, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 534, 2491, 534, 534, 534, 534, 2495, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 2215, 556, 556, 556, 556, 602, 578, 578, 578, 578, 578, 578, 578, 602, 602, 602, 555, 602, 602, 602, 602, 602, 602, 602, 578, 578, 555, 578, 602, 578, 602, 1, 12290, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2410, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2952, 0, 0, 0, 728, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3145, 3146, 0, 0, 0, 556, 924, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2260, 2261, 0, 0, 1176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2433, 0, 0, 534, 1300, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2548, 0, 0, 1418, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 2664, 580, 580, 580, 580, 2668, 580, 580, 580, 580, 580, 580, 1505, 580, 580, 1509, 580, 580, 580, 580, 580, 1515, 0, 0, 1553, 0, 0, 0, 1559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2167, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1733, 534, 534, 534, 534, 556, 556, 556, 2252, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3471, 580, 580, 580, 580, 580, 580, 2339, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3485, 0, 0, 3488, 2499, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2202, 0, 0, 0, 0, 736, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1747, 534, 534, 534, 534, 1051, 534, 534, 892, 534, 1056, 556, 556, 965, 556, 0, 1061, 580, 580, 1039, 580, 580, 580, 580, 2885, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2680, 534, 580, 556, 534, 556, 556, 1420, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 2894, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2900, 580, 580, 580, 580, 534, 534, 534, 534, 1726, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2144, 534, 534, 2148, 534, 1821, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2843, 580, 580, 1954, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3313, 580, 580, 580, 580, 556, 2586, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2288, 556, 556, 556, 556, 556, 2614, 0, 0, 0, 0, 0, 0, 580, 580, 580, 580, 580, 1039, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 0, 0, 0, 2957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 2979, 534, 534, 534, 2983, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2498, 3065, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2889, 580, 580, 580, 580, 580, 3192, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3035, 1134592, 0, 1134592, 0, 0, 0, 1134592, 1135007, 1135007, 0, 0, 0, 0, 0, 1135007, 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, 0, 707, 0, 0, 0, 711, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2718, 0, 0, 1134592, 1134592, 0, 0, 0, 0, 1135196, 1135196, 1135196, 1135196, 1134592, 1135196, 1135196, 1135196, 1135196, 1135196, 1135196, 0, 1134592, 1134592, 1134592, 1134592, 1135196, 1134592, 1135196, 1, 12290, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 3137536, 2940928, 2940928, 2940928, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 0, 0, 0, 0, 2113, 0, 0, 0, 2113, 0, 0, 2118, 2119, 0, 0, 0, 0, 0, 1180, 0, 0, 0, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2474, 0, 1147348, 1147348, 1147348, 451, 451, 1147348, 451, 451, 451, 451, 451, 451, 451, 451, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 1147348, 1147348, 1147348, 1147399, 1147399, 1147348, 1147399, 1147399, 1, 12290, 3, 0, 0, 0, 0, 0, 253952, 0, 0, 0, 253952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2950, 0, 0, 0, 0, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 792, 0, 0, 1159168, 0, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1, 12290, 3, 0, 0, 0, 0, 249856, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 163840, 0, 0, 0, 0, 65536, 0, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 974, 2125824, 2125824, 2125824, 2125824, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2699264, 2125824, 2715648, 2125824, 2723840, 2125824, 0, 106496, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 106496, 0, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 369, 369, 0, 0, 65536, 369\n];\n\nXQueryParser.EXPECTED =\n[ 127, 143, 342, 950, 172, 201, 188, 217, 769, 963, 247, 263, 279, 295, 311, 327, 1395, 373, 1083, 374, 374, 374, 374, 374, 374, 374, 374, 374, 419, 391, 407, 466, 435, 589, 1682, 909, 574, 156, 1220, 451, 495, 511, 527, 543, 559, 634, 1096, 678, 694, 755, 649, 785, 801, 817, 833, 849, 865, 881, 897, 937, 979, 995, 1023, 1039, 1055, 479, 1112, 1128, 1473, 1144, 1160, 1206, 1236, 357, 662, 1266, 709, 1282, 1292, 1308, 1324, 1339, 1355, 1411, 1427, 1443, 618, 1459, 724, 1489, 604, 1518, 1528, 231, 1070, 1544, 1560, 1576, 1592, 1622, 1250, 1638, 1654, 1606, 921, 1670, 739, 1698, 1714, 1820, 1190, 1730, 1746, 1502, 1758, 1774, 1790, 1806, 1175, 1850, 1860, 1836, 1009, 1370, 1876, 1385, 375, 1892, 1896, 1903, 1903, 1903, 1898, 1902, 1903, 1910, 1907, 1914, 1918, 1922, 1926, 1929, 1933, 1937, 1941, 1945, 4040, 4040, 4040, 4106, 4040, 4040, 2020, 2279, 4040, 1949, 4040, 4040, 4040, 2429, 2379, 4040, 4040, 4040, 4040, 2438, 4040, 4040, 3112, 2651, 3443, 2444, 1955, 1984, 1994, 1998, 4040, 4040, 4040, 4040, 4040, 2017, 2042, 4040, 4040, 4040, 2024, 2285, 2030, 2034, 4040, 4040, 4040, 4040, 4040, 2041, 4040, 4040, 3002, 2285, 2285, 2285, 2285, 2285, 2111, 1988, 1988, 1988, 1988, 1988, 1990, 1955, 1955, 1955, 1955, 1955, 2101, 3099, 1988, 1988, 1988, 1988, 1988, 2120, 1955, 1955, 1955, 1955, 1955, 2046, 2055, 4040, 4040, 2212, 2349, 4040, 4040, 4040, 4137, 3441, 4040, 4040, 4040, 4040, 3531, 4040, 2745, 1988, 1988, 1988, 2066, 1955, 1955, 1955, 1957, 2073, 4040, 4040, 2473, 3002, 2285, 2285, 2026, 1988, 1988, 3101, 1955, 1955, 1956, 2072, 4040, 2471, 4040, 2284, 2285, 3098, 1988, 1988, 2078, 1955, 2068, 2129, 2446, 3554, 2285, 2112, 1988, 2120, 1955, 2083, 2281, 2286, 1988, 2067, 2089, 2095, 2113, 2049, 2107, 3097, 2114, 2079, 3096, 3100, 2079, 3096, 2114, 2051, 2118, 2126, 2135, 2139, 2143, 2156, 2160, 2170, 2170, 2170, 2163, 2167, 2170, 2173, 2177, 2181, 2185, 2189, 2193, 2197, 2201, 2205, 2209, 2216, 4040, 4040, 4040, 2131, 4040, 4040, 4040, 2220, 4040, 2226, 4040, 2283, 2287, 1988, 1954, 2122, 2098, 1961, 4040, 4040, 4040, 1970, 4040, 2474, 1980, 4040, 2321, 3139, 4040, 2440, 3145, 4427, 2277, 3219, 2796, 3151, 3505, 3155, 4040, 3263, 3161, 2906, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4041, 2255, 2259, 2262, 2266, 2270, 2274, 3465, 2291, 4040, 4040, 4040, 4040, 3213, 2296, 2312, 2303, 2396, 2240, 2243, 2309, 2316, 2320, 2649, 4006, 4040, 2726, 2326, 3670, 4040, 4040, 4040, 4040, 2231, 3466, 4040, 4040, 4040, 3429, 2237, 4040, 2618, 3123, 2249, 2253, 3877, 2348, 4040, 4040, 4013, 2355, 4040, 2359, 4040, 4040, 4040, 4040, 3173, 2321, 2227, 2367, 3192, 4040, 4040, 2459, 4040, 4040, 3192, 4040, 4040, 4348, 2989, 2882, 2918, 3129, 2349, 4040, 3014, 2311, 2670, 2331, 3577, 4417, 2336, 2379, 4040, 4040, 2549, 2340, 4040, 4040, 4040, 2984, 4040, 4040, 4040, 4040, 3591, 2979, 4040, 4040, 4040, 3390, 4180, 4419, 3131, 4040, 3190, 3194, 4040, 2950, 2989, 2918, 3210, 4040, 2469, 2788, 3212, 4040, 4005, 3283, 3279, 4282, 4040, 3281, 4226, 4226, 2601, 4283, 3283, 3283, 1966, 3282, 3279, 1966, 4227, 3283, 4191, 2462, 2478, 4040, 4040, 4040, 4040, 2588, 2522, 4040, 4040, 4040, 2007, 2858, 2484, 3025, 2492, 2495, 2498, 2502, 2503, 2507, 2511, 2515, 4040, 2521, 4040, 4040, 2526, 4040, 3968, 2913, 2541, 2545, 3867, 2553, 2563, 2574, 2578, 4040, 3387, 3385, 4040, 2582, 4040, 3458, 2587, 4040, 3120, 4040, 4040, 4040, 3174, 2074, 2409, 2537, 2432, 4040, 4040, 4040, 2536, 2416, 4040, 2373, 2377, 4040, 4040, 4040, 4040, 4255, 2378, 4040, 4040, 4040, 4040, 4256, 2379, 4040, 2838, 3503, 4040, 4040, 4040, 4040, 2839, 3504, 3974, 3509, 4040, 4040, 3730, 3536, 4040, 3349, 2906, 4040, 3326, 2556, 3181, 3383, 3394, 3403, 4040, 4397, 4040, 3553, 3551, 3545, 4040, 2668, 2912, 3478, 3399, 2548, 2592, 3456, 3471, 2600, 4040, 4040, 4040, 4242, 4040, 3147, 4040, 3818, 4040, 4037, 3923, 3990, 3561, 4003, 4040, 2655, 4039, 4040, 4040, 4040, 3167, 4040, 4040, 4040, 3331, 3171, 4040, 4040, 4040, 4040, 3632, 3179, 4040, 2638, 2611, 2615, 4040, 2388, 2622, 4040, 4040, 4040, 4040, 2389, 2349, 4040, 4040, 4040, 2397, 2390, 4040, 4040, 4040, 3141, 4040, 4040, 3846, 4040, 4040, 2630, 2517, 4070, 2637, 2412, 2989, 4040, 4040, 4040, 4040, 2344, 4040, 4040, 4040, 4040, 4040, 3269, 2989, 2380, 3207, 4040, 3463, 4040, 4040, 4040, 3861, 3470, 4040, 4040, 4040, 3475, 4040, 3482, 4040, 4040, 2631, 3905, 4040, 4040, 4040, 4040, 2631, 3905, 2424, 3909, 4040, 2152, 2595, 3785, 3915, 2631, 4365, 2642, 4040, 4040, 4040, 4040, 4085, 2646, 4040, 4040, 4040, 4040, 4085, 2646, 4040, 4040, 2464, 4040, 4040, 2285, 2285, 2285, 2285, 2025, 1988, 1988, 1988, 1988, 1988, 2120, 3610, 3833, 4040, 4040, 4040, 4365, 2656, 4040, 4040, 4040, 2660, 2665, 3980, 2516, 3196, 2674, 2678, 3830, 2685, 4040, 4040, 3830, 2685, 4040, 4040, 2299, 2690, 4040, 3184, 3458, 2004, 3969, 3197, 3312, 3251, 2696, 4040, 2037, 2690, 4040, 3251, 2696, 4040, 2702, 2709, 3195, 4000, 2713, 2717, 4040, 2715, 4040, 2679, 2723, 4040, 2730, 2734, 2739, 3644, 4040, 2705, 2583, 3646, 2583, 2749, 2753, 2704, 3203, 2944, 2566, 2570, 2956, 2945, 3843, 2568, 2568, 2761, 3815, 3641, 2765, 3607, 2769, 2773, 2775, 2779, 2783, 2787, 4040, 4040, 4040, 3316, 4040, 4040, 3564, 2792, 3570, 2800, 2804, 2808, 2810, 2814, 2818, 2821, 2823, 2824, 4040, 4040, 3315, 4040, 3428, 2828, 3896, 3248, 2833, 2843, 2434, 2453, 3918, 2849, 2907, 2853, 4040, 2150, 2148, 4040, 4040, 4040, 4040, 2405, 2349, 4040, 4040, 4040, 4040, 2405, 2349, 4040, 4040, 4040, 4040, 2362, 3442, 4040, 4040, 4040, 4040, 2363, 3773, 3950, 4040, 4040, 4040, 2857, 4040, 2559, 2968, 3853, 2862, 2937, 4379, 2869, 3988, 3295, 4040, 2873, 4040, 4040, 4040, 3554, 2285, 2285, 2285, 2285, 1987, 1988, 1988, 1988, 1989, 1955, 1955, 1955, 1955, 1956, 2103, 4040, 4040, 4040, 2472, 4040, 2109, 2285, 2285, 2285, 2113, 3527, 2877, 4040, 4040, 4040, 2886, 2890, 4040, 4040, 4040, 4040, 2980, 4040, 3336, 2829, 3897, 2895, 2899, 4040, 2911, 2917, 4040, 4040, 2922, 4040, 4040, 4040, 4040, 2844, 2923, 4040, 4040, 2626, 4289, 4040, 3453, 3038, 4353, 4386, 3183, 4040, 4040, 4041, 4370, 4040, 4040, 2845, 2924, 4040, 4040, 4040, 4040, 4040, 2990, 4040, 2558, 2928, 4420, 2935, 4040, 2943, 2949, 4040, 2970, 2954, 4040, 4040, 4040, 4040, 3855, 2960, 4040, 4040, 4040, 4040, 3855, 2960, 4040, 4040, 4040, 4040, 3389, 4040, 2966, 3897, 2974, 2327, 4275, 4040, 3590, 2978, 4040, 3535, 3379, 3488, 3521, 3230, 4040, 4040, 3540, 4040, 4040, 4040, 3439, 4040, 4040, 4040, 4364, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4378, 4040, 4040, 4040, 2605, 4040, 4040, 2245, 4040, 4040, 3459, 4040, 4040, 4038, 3923, 4040, 2013, 3616, 2411, 4040, 3631, 2988, 4040, 4040, 3631, 2988, 4040, 4040, 4040, 2994, 4040, 4040, 2350, 4262, 2381, 3617, 4040, 4040, 4346, 4040, 4040, 3000, 4040, 4040, 4346, 4040, 2350, 4208, 3615, 2881, 4040, 2795, 3174, 3112, 3180, 3024, 3111, 3180, 3180, 3933, 3014, 3113, 3113, 3006, 3181, 3014, 3013, 3014, 3175, 4047, 3018, 3029, 3053, 4040, 4040, 4040, 4040, 3634, 4040, 4221, 4040, 3650, 4040, 4040, 4040, 4040, 2631, 3651, 4040, 4040, 4040, 4040, 3648, 4287, 4291, 4040, 4010, 4017, 4303, 4022, 2632, 3182, 4040, 4032, 4040, 1950, 4012, 4040, 2865, 4045, 4051, 3043, 3047, 4064, 3061, 3065, 3069, 3073, 3077, 3081, 3105, 3084, 4040, 4040, 3633, 4040, 4040, 3443, 2444, 4040, 4040, 4040, 2450, 4040, 4040, 4040, 4349, 4040, 4040, 3014, 3276, 2487, 2961, 2691, 4276, 3109, 1976, 3117, 3127, 3289, 3135, 3305, 4040, 3324, 3322, 4040, 4040, 3734, 3779, 3739, 3744, 3969, 4040, 3748, 3754, 3761, 3943, 3887, 3765, 4057, 4040, 2488, 2962, 2692, 3163, 3224, 3188, 3412, 4040, 4040, 2085, 3201, 4040, 4040, 4040, 4040, 2343, 3217, 3223, 3228, 4040, 4040, 4040, 3234, 4040, 4040, 4040, 4040, 4040, 3238, 4040, 4040, 4040, 4040, 3422, 4040, 2529, 2686, 4354, 3245, 4040, 4040, 4040, 4342, 4040, 4040, 4040, 4040, 1972, 4040, 4040, 4040, 4040, 4040, 3255, 4040, 4040, 4040, 3423, 3952, 2686, 4355, 3261, 4040, 4040, 3267, 4040, 4040, 4040, 1974, 4040, 4040, 4040, 3273, 4040, 4220, 3981, 2680, 4356, 3895, 4040, 3287, 4040, 4040, 3293, 4040, 4040, 2062, 4040, 4220, 3953, 3299, 2146, 4040, 3303, 4040, 2607, 4040, 4040, 2061, 4040, 4248, 3309, 3894, 3498, 4040, 4360, 4040, 4040, 4040, 4369, 4040, 4374, 3056, 4383, 3622, 4040, 4040, 4390, 4040, 4040, 4424, 2742, 4040, 2633, 4040, 3056, 4040, 3039, 3157, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 2455, 4325, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 3320, 4040, 3330, 3911, 3335, 3629, 3588, 4213, 3943, 3587, 4213, 4213, 4040, 3341, 3589, 3589, 3628, 4214, 3341, 3340, 3341, 3630, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 3836, 2349, 3347, 4040, 3354, 3001, 4080, 4404, 3358, 3362, 3366, 3369, 3373, 3373, 3377, 4040, 4040, 3835, 4091, 3410, 4040, 4040, 3416, 4040, 4040, 3420, 3427, 4040, 3433, 4040, 4331, 3447, 4040, 4040, 3797, 4040, 3795, 4040, 4040, 4345, 4040, 2350, 1964, 4040, 2879, 4040, 3397, 4040, 2904, 4040, 3350, 3488, 4040, 3486, 2535, 3492, 3496, 4040, 4040, 4040, 3502, 4040, 4040, 4040, 4127, 4028, 2010, 4131, 4141, 4145, 4149, 4153, 4157, 4161, 4165, 4169, 4173, 4134, 4377, 4293, 2534, 3516, 4040, 4040, 4040, 2839, 3504, 4040, 4040, 4040, 4040, 2931, 3442, 4040, 3450, 4040, 2902, 4040, 3799, 4363, 3520, 4196, 3525, 3406, 2349, 2757, 2305, 2996, 4393, 4347, 3544, 4040, 3549, 4040, 4040, 3549, 4040, 4040, 3558, 2756, 2305, 4077, 4395, 3960, 4040, 3568, 4040, 3823, 2349, 4040, 3997, 3750, 3574, 3884, 3961, 4269, 4040, 4270, 4040, 3581, 3944, 3585, 3595, 3931, 3600, 2001, 3930, 3604, 3604, 4211, 3614, 3932, 3621, 3626, 3662, 3638, 3655, 3656, 3660, 3667, 3674, 3678, 3682, 3685, 4040, 4040, 4040, 3840, 2596, 3740, 3850, 2668, 2332, 3343, 4040, 3859, 4040, 4040, 4040, 2233, 3865, 2891, 3735, 2465, 2351, 3690, 3698, 3874, 3702, 3705, 3709, 3713, 3717, 3721, 3725, 3729, 4040, 2423, 2421, 3241, 3772, 4040, 4040, 2939, 3777, 3783, 3789, 3793, 4136, 2698, 3342, 2633, 2425, 3803, 4040, 4040, 3808, 2349, 4040, 4040, 4186, 3812, 4040, 4040, 4040, 3009, 3822, 3827, 4040, 3871, 2532, 4318, 3881, 4040, 3891, 3773, 4040, 4040, 4040, 4040, 3901, 4040, 4040, 4040, 4040, 4040, 2385, 4040, 4040, 4040, 4040, 3014, 4040, 2394, 4040, 2401, 2379, 4035, 3922, 4040, 4040, 2292, 3927, 4040, 4040, 4040, 4040, 3937, 4040, 4040, 4040, 4040, 2091, 3941, 3948, 4040, 3957, 3757, 3966, 2835, 3112, 4040, 4040, 2222, 3979, 4040, 4040, 2719, 3973, 2632, 3183, 3021, 4040, 4055, 4040, 4061, 2419, 4040, 3023, 4068, 4074, 4084, 4112, 4089, 4095, 3596, 4100, 4308, 4099, 4104, 4110, 4099, 4113, 4119, 3257, 4117, 4123, 4040, 4040, 4040, 4040, 4177, 4184, 2836, 3686, 4190, 3693, 4195, 4200, 4410, 4205, 4218, 4040, 3090, 2735, 4225, 3093, 4231, 4040, 4040, 4040, 3631, 4235, 2661, 4040, 2681, 4429, 2369, 4040, 4239, 4040, 4040, 4040, 4040, 3804, 4246, 4040, 4040, 4040, 4252, 4040, 4040, 4040, 2631, 4260, 4266, 4040, 4040, 4040, 4025, 4185, 2837, 2686, 2480, 4274, 4040, 4280, 4040, 4040, 4040, 4040, 4201, 3978, 4018, 4303, 3768, 4040, 3050, 4040, 4040, 3985, 4040, 4040, 3994, 4040, 4322, 4385, 4329, 4040, 4040, 4040, 4040, 4335, 4040, 4040, 4040, 4040, 3663, 4339, 4040, 4040, 4297, 4040, 3057, 3087, 4301, 3962, 3032, 4040, 4040, 4040, 4040, 2624, 4307, 4040, 4040, 4040, 4040, 2624, 4312, 4315, 4040, 2322, 3436, 2837, 2058, 4040, 4040, 3035, 4040, 4401, 4408, 3694, 4040, 4040, 3512, 4040, 2631, 4414, 4040, 3511, 4558, 4433, 6024, 6027, 4439, 4466, 4468, 4468, 4446, 4455, 4467, 4468, 4468, 4468, 4468, 4468, 4468, 4473, 4468, 4468, 4463, 4457, 4459, 4479, 4477, 4483, 4468, 4469, 4493, 4496, 4506, 4510, 4524, 4519, 4511, 4500, 4502, 4502, 4518, 4519, 4498, 4515, 4523, 4528, 4532, 4536, 4539, 4547, 4546, 4543, 4551, 4554, 4556, 4566, 5097, 4574, 6086, 5003, 5101, 5101, 5101, 4593, 4599, 4602, 4602, 4602, 4602, 4608, 4640, 4568, 4622, 4628, 5101, 4434, 5101, 5099, 5101, 6713, 5101, 6256, 5101, 5101, 4584, 5992, 5101, 5101, 4729, 5101, 5473, 6277, 5101, 5007, 4602, 5693, 4609, 5696, 5699, 5699, 5699, 5699, 4601, 4602, 5699, 4602, 4619, 4621, 4623, 4627, 6087, 5101, 4434, 6165, 6164, 5101, 5101, 6380, 6242, 5096, 5101, 4576, 5101, 6463, 5101, 5101, 5635, 4488, 5366, 6275, 5101, 4581, 5101, 4590, 5411, 5123, 5123, 5123, 5697, 5699, 4603, 4621, 4621, 4622, 4627, 4627, 4628, 5101, 4583, 5448, 6513, 5474, 5101, 5008, 5101, 5101, 4602, 4632, 5123, 5699, 4602, 4602, 4602, 5704, 5121, 4602, 4621, 4627, 5101, 4583, 6563, 5101, 4584, 6017, 5101, 5101, 5699, 5701, 4602, 4602, 4602, 4632, 4640, 5705, 5101, 5101, 5101, 4734, 5700, 4602, 4602, 4602, 5705, 4643, 5701, 5101, 5101, 4824, 5651, 4602, 4650, 5101, 5101, 4824, 6512, 5010, 5695, 5123, 5123, 5698, 5690, 4602, 4608, 5696, 5700, 5703, 5101, 4602, 5101, 5101, 5121, 5123, 5123, 5123, 5699, 5699, 5699, 5702, 5123, 5698, 5699, 5702, 4602, 4602, 5704, 4607, 4602, 5705, 5123, 5697, 5704, 5101, 5101, 4816, 4822, 5699, 4602, 5704, 5695, 5698, 5702, 5694, 5701, 4651, 4652, 4650, 5101, 4592, 5101, 5101, 5815, 5567, 5101, 5101, 5106, 6519, 6761, 6550, 6560, 4662, 4695, 4656, 4660, 4693, 4666, 4673, 4670, 4680, 4684, 4691, 4693, 4693, 4693, 4693, 4694, 4676, 4699, 4693, 4703, 4708, 4714, 4704, 4726, 4740, 4744, 4687, 4751, 4753, 4748, 4787, 4789, 4789, 4791, 4757, 4759, 4761, 4763, 4776, 4776, 4770, 4767, 4774, 4717, 4675, 4710, 4780, 4784, 4795, 4797, 4801, 4805, 4809, 5101, 4592, 6198, 6202, 4990, 5007, 5230, 6461, 5101, 6373, 5101, 5101, 4824, 6698, 4831, 5101, 5101, 5101, 4736, 5108, 5108, 5101, 5101, 4826, 6485, 5490, 5979, 4838, 5101, 4720, 4985, 5101, 4720, 5101, 5101, 4853, 5311, 4857, 5333, 4876, 4902, 4906, 4906, 4906, 4906, 4908, 4915, 4917, 4912, 4921, 4925, 4928, 4931, 4934, 4939, 4938, 4943, 4944, 4959, 4949, 4948, 4953, 4956, 4963, 5101, 5107, 5101, 4892, 5101, 5007, 5101, 5101, 5695, 5123, 5123, 5123, 5123, 5696, 5699, 5988, 5101, 5101, 5101, 4825, 5300, 5101, 5608, 5101, 4811, 5449, 6426, 4969, 5101, 5101, 4988, 6219, 5101, 5018, 4987, 5101, 5101, 4860, 5101, 5101, 4995, 5015, 5101, 6412, 5034, 5101, 5101, 5101, 4893, 6751, 6138, 5101, 5101, 5101, 4894, 6729, 5101, 5101, 5101, 4965, 5055, 5068, 5081, 5086, 5091, 5076, 5095, 5101, 4824, 5933, 5929, 5376, 5087, 4434, 5101, 5101, 5101, 4979, 5008, 6409, 5996, 5101, 5999, 5151, 5987, 5376, 5101, 4826, 6502, 6738, 6204, 5101, 6730, 5101, 5101, 4891, 5101, 4570, 5101, 5115, 5127, 5074, 4442, 5096, 5101, 5101, 5101, 4975, 5538, 5411, 5986, 5281, 5101, 4840, 5628, 5355, 5382, 4434, 4736, 5101, 4973, 5101, 5101, 5101, 4840, 5687, 5132, 5075, 5140, 5890, 5072, 5076, 5141, 6462, 4888, 5101, 5101, 4895, 5101, 5343, 5073, 6582, 4451, 5101, 4894, 5101, 5101, 6416, 5101, 5101, 5101, 6191, 5101, 5415, 5892, 5074, 6583, 5096, 5101, 5101, 4898, 5999, 5411, 5280, 5101, 5101, 4974, 4978, 5134, 5157, 5101, 5101, 5007, 5101, 5132, 5075, 5159, 5101, 4897, 5101, 5871, 4980, 5101, 5949, 5135, 5159, 5101, 4976, 5101, 5101, 5010, 5101, 5101, 5169, 4434, 5101, 5101, 5009, 5101, 5101, 5101, 4613, 4614, 4975, 5101, 4614, 5101, 5411, 4978, 6164, 6391, 5101, 4977, 6380, 5395, 5376, 5188, 4872, 5243, 5197, 5197, 5194, 5197, 5199, 5203, 5205, 5207, 5209, 5209, 5209, 5213, 5213, 5213, 5213, 5214, 5213, 5213, 5215, 5219, 5221, 5101, 5101, 5101, 5036, 5101, 5059, 5063, 5372, 5101, 5101, 5101, 6378, 6010, 5101, 4978, 6569, 5101, 4980, 5101, 5417, 5101, 5101, 5101, 5891, 5074, 5240, 5101, 5351, 6463, 5247, 5101, 5101, 5257, 5101, 5101, 5101, 5068, 5263, 6448, 5875, 5101, 4981, 5101, 5101, 5876, 6281, 5416, 5275, 4435, 5874, 5101, 4990, 6089, 5406, 5410, 5101, 5265, 5407, 5285, 5101, 5101, 5297, 6402, 5101, 5101, 5304, 5309, 5101, 5101, 5101, 5057, 5371, 5101, 5101, 5101, 5059, 5330, 4833, 5427, 5101, 5010, 4978, 5101, 5415, 5358, 5101, 5101, 5101, 5100, 5883, 5359, 5101, 5101, 5102, 6015, 4893, 5258, 5101, 5342, 5432, 5101, 5348, 5101, 5024, 6570, 5977, 5382, 4434, 5101, 5101, 5102, 6113, 5726, 5101, 6379, 5101, 5101, 5101, 5102, 5101, 5101, 6462, 5101, 4561, 5876, 5101, 6422, 6426, 5381, 6381, 6423, 6427, 5382, 5101, 5031, 5101, 5101, 4866, 4885, 4811, 5438, 6425, 5399, 6381, 5479, 5101, 5101, 5101, 5104, 5106, 5060, 5064, 5101, 5035, 5101, 5101, 5051, 5101, 5350, 5101, 5879, 4896, 5431, 5101, 5101, 5101, 5106, 5101, 4975, 5471, 5101, 5101, 5101, 5107, 6430, 5101, 5101, 5101, 5108, 4890, 6429, 6381, 5101, 5101, 5102, 6446, 5479, 5101, 5101, 5453, 5269, 5410, 5101, 4614, 5101, 5101, 6380, 5153, 5101, 5101, 5732, 5268, 5470, 5101, 5101, 5102, 6697, 5459, 5468, 6381, 5101, 5041, 5046, 5045, 5478, 5101, 5101, 5453, 4614, 5101, 5101, 5101, 5111, 6088, 5350, 5877, 5413, 5538, 5101, 5101, 5047, 5047, 5047, 5461, 5101, 6088, 6119, 5106, 5267, 5271, 5101, 5047, 6213, 5101, 5101, 5404, 4990, 5404, 5408, 5404, 4990, 5404, 5962, 5423, 5961, 5101, 6084, 5423, 5233, 6104, 5101, 4990, 5232, 5230, 5101, 5232, 4989, 5232, 5232, 5232, 5231, 6488, 5101, 5101, 5101, 5168, 5876, 5722, 5483, 4434, 5099, 5101, 5101, 6498, 6279, 5487, 5101, 4886, 6166, 5489, 5856, 5494, 5500, 5498, 5504, 5504, 5504, 5504, 5506, 5513, 5510, 5517, 5519, 5519, 5519, 5521, 5519, 5525, 5525, 5525, 5525, 5527, 6280, 5415, 5319, 5672, 5101, 5005, 6438, 5101, 5101, 5103, 5101, 5101, 5101, 6361, 6199, 5571, 5101, 5101, 5101, 5176, 5626, 6498, 5551, 5101, 6442, 5561, 5101, 5814, 5566, 5575, 5101, 5101, 5101, 5181, 6167, 5004, 6438, 5101, 5102, 6092, 6381, 5580, 5101, 5101, 5004, 6127, 5600, 5863, 5606, 5862, 5605, 5101, 5101, 5235, 5101, 5101, 5101, 5424, 5102, 6128, 5601, 5864, 5607, 5101, 5101, 5101, 5224, 5101, 6167, 5101, 5006, 6440, 5101, 5569, 5101, 5102, 6180, 5148, 5101, 5101, 5996, 5101, 6283, 5464, 5101, 5101, 5101, 5228, 5101, 5620, 5101, 5101, 5101, 5232, 5176, 5626, 6753, 5665, 5101, 5101, 5632, 5321, 4434, 5101, 5102, 6362, 6200, 5027, 5562, 5101, 5570, 5101, 5101, 5223, 5746, 5463, 5101, 5101, 5101, 5266, 4989, 5621, 5101, 5101, 5101, 5278, 6754, 5666, 5101, 5101, 5265, 5407, 6755, 5376, 5101, 5101, 4990, 5101, 5612, 5415, 5320, 6393, 5101, 5101, 5176, 5639, 5646, 4577, 5568, 5410, 5640, 5664, 5101, 5101, 5101, 5293, 5175, 5639, 5663, 5376, 5659, 5376, 5101, 5101, 5101, 4980, 5657, 5676, 5101, 5101, 5288, 5037, 5658, 5101, 5101, 5101, 5411, 5123, 5098, 5101, 5423, 5101, 5102, 6471, 6477, 5098, 5101, 5424, 5101, 5101, 5426, 5098, 5424, 5101, 5102, 6558, 5101, 5101, 5101, 6393, 5101, 5426, 5424, 5568, 5424, 5233, 5101, 5101, 5102, 6562, 5101, 5104, 5101, 5101, 5101, 4974, 6215, 5710, 4879, 5101, 6496, 5376, 5101, 5105, 5101, 5424, 5424, 5099, 5101, 5105, 5101, 5101, 5101, 5720, 4722, 5730, 5742, 5751, 5757, 5766, 5764, 5767, 5755, 5761, 5771, 5774, 5776, 5778, 5790, 5782, 5785, 5789, 5790, 5791, 5796, 5795, 5801, 5797, 5806, 5101, 5108, 4976, 5101, 5110, 6702, 5101, 5111, 6707, 5101, 5123, 5123, 5123, 5698, 5699, 5699, 5700, 4602, 5801, 5802, 5801, 5801, 4998, 5101, 5098, 5101, 5101, 5425, 5101, 5101, 5812, 5819, 5557, 5101, 5145, 5281, 5101, 4844, 5876, 4852, 5595, 5101, 4888, 5101, 5950, 5136, 4434, 5101, 4615, 5101, 5101, 5823, 5848, 5941, 5101, 5101, 5363, 5101, 5472, 5373, 5101, 5101, 5386, 5101, 5860, 4888, 5868, 5887, 5011, 5011, 5101, 5101, 5414, 5101, 6528, 5376, 5101, 5101, 5414, 6347, 5545, 5908, 6527, 4732, 5904, 6529, 5101, 5101, 5423, 5101, 5101, 5100, 5942, 5101, 5101, 5101, 5426, 5101, 5101, 5101, 5479, 5912, 5924, 5101, 5101, 5423, 5163, 5158, 5101, 5101, 5101, 4989, 5101, 5350, 5929, 5376, 5101, 5101, 5454, 5270, 6215, 5393, 5374, 5101, 5168, 5173, 5101, 5101, 5101, 5021, 5109, 5101, 5411, 5101, 5853, 5101, 6347, 5101, 5100, 5101, 5102, 5947, 5925, 5101, 5101, 5530, 4980, 4811, 5650, 5954, 5376, 4812, 5959, 5955, 5101, 5184, 5539, 6436, 5879, 5098, 5102, 5538, 5101, 6166, 5101, 5102, 5447, 5442, 4585, 5993, 5101, 5101, 5538, 6089, 5099, 4592, 5101, 5101, 5546, 5903, 4584, 5993, 5101, 5101, 5649, 5940, 5102, 4586, 5994, 5101, 5231, 4887, 5101, 4974, 5100, 5101, 5101, 6712, 5101, 5101, 4584, 5995, 5101, 5101, 5706, 5898, 4585, 5995, 5101, 5101, 5808, 5101, 5106, 5101, 5413, 6346, 5102, 6004, 5101, 5101, 5833, 5840, 6392, 5107, 5412, 5876, 4894, 5152, 5101, 5035, 5576, 5101, 5101, 5106, 6016, 5101, 5101, 5837, 5841, 5101, 5101, 5338, 5101, 6015, 5101, 5101, 5101, 5547, 5412, 5101, 5101, 5101, 5612, 5101, 6161, 5101, 5101, 5101, 5679, 5101, 5101, 6367, 5101, 5101, 5842, 6096, 5101, 6282, 5101, 4486, 6021, 6046, 6045, 6046, 6046, 6043, 6046, 6050, 6054, 6058, 6062, 6071, 6066, 6070, 6071, 6071, 6075, 6075, 6075, 6075, 6078, 6082, 5101, 5101, 5842, 6097, 5103, 5234, 5101, 5101, 5880, 5305, 5101, 5101, 5047, 5101, 5101, 6102, 5109, 6108, 5101, 5236, 5101, 5101, 5325, 5101, 6117, 5101, 6123, 5101, 5249, 6209, 6202, 5101, 6493, 5101, 5101, 5897, 5101, 5101, 6142, 6181, 5096, 5843, 6097, 5101, 5101, 5966, 5101, 5101, 5996, 5101, 5101, 5101, 5876, 5103, 6174, 5101, 5101, 5416, 5421, 5101, 5101, 5251, 6200, 6204, 5101, 5101, 5101, 5949, 6147, 6152, 6000, 4980, 4980, 4980, 5101, 5292, 4635, 5101, 5299, 5101, 5101, 5058, 5062, 5371, 6361, 5737, 5101, 5101, 5975, 4848, 5988, 6137, 5101, 5101, 5101, 5882, 5102, 5734, 5738, 5101, 5317, 6462, 5349, 6382, 5101, 6160, 6159, 5101, 6173, 5101, 5101, 5999, 5101, 5101, 6667, 5106, 4894, 6247, 4978, 5101, 5101, 6004, 5101, 6361, 6199, 6203, 5101, 5101, 5101, 5896, 6382, 6382, 5101, 5101, 6111, 5418, 5101, 5101, 6668, 4893, 6186, 5101, 6769, 5879, 5101, 5101, 5529, 6188, 5101, 5101, 6126, 5599, 5102, 6197, 6201, 6205, 5419, 6182, 4434, 5101, 5101, 6089, 5252, 6201, 6205, 5585, 5101, 5101, 5101, 6007, 6455, 4450, 5101, 5101, 6133, 5101, 5101, 5101, 5695, 6454, 4449, 4434, 5101, 5350, 5101, 5878, 5101, 6280, 4886, 4988, 6229, 5101, 5101, 6162, 4614, 5101, 6378, 4434, 5101, 5375, 5101, 4562, 6229, 5101, 4978, 6214, 6161, 4980, 5101, 5101, 6162, 5101, 5101, 5101, 5655, 5640, 6234, 5101, 5101, 5101, 6089, 5101, 6258, 4434, 6240, 5101, 6258, 4434, 5101, 5404, 5962, 5101, 5102, 5437, 6424, 6235, 5101, 5101, 5568, 5410, 5101, 5101, 6236, 5101, 6165, 5101, 5101, 5101, 6259, 5101, 5101, 6164, 5101, 5101, 5101, 5648, 5849, 5942, 5101, 6260, 5101, 6165, 5101, 5405, 5409, 5101, 5057, 5268, 5409, 5101, 5101, 5102, 6742, 5253, 5101, 5101, 5101, 6260, 5101, 5101, 6259, 5101, 6167, 6258, 5101, 5101, 5101, 6112, 6259, 5101, 6259, 6165, 4847, 5987, 5376, 5568, 6497, 6259, 5568, 6497, 6168, 6257, 6257, 6261, 6251, 6254, 6254, 5101, 5101, 5101, 6169, 5118, 5101, 5916, 5101, 5414, 5538, 5101, 5101, 5918, 4896, 5553, 4884, 5037, 6272, 6287, 6305, 6299, 6305, 6303, 6299, 6309, 6293, 6290, 6295, 6322, 6313, 6327, 6316, 6319, 6323, 6332, 6331, 6339, 6339, 6340, 6339, 6339, 6339, 6336, 6344, 5101, 5101, 5101, 6178, 5224, 5747, 5376, 5101, 5101, 5415, 5101, 5101, 6351, 4893, 4893, 4882, 5230, 5001, 5101, 6372, 5101, 5101, 6214, 4980, 5101, 6357, 5969, 5101, 5417, 5419, 6353, 6366, 4434, 5101, 6371, 6390, 6397, 6401, 5101, 5418, 4636, 5647, 6434, 5101, 5101, 5101, 6192, 5943, 5101, 5008, 5101, 4978, 5101, 4979, 5101, 5416, 5101, 6351, 4893, 5419, 6352, 4894, 6268, 6367, 5002, 5101, 5101, 6279, 5641, 5101, 5101, 5290, 5101, 6452, 5101, 5101, 5101, 6223, 5101, 6470, 6459, 6480, 6475, 6479, 6205, 5101, 5423, 5407, 5101, 5057, 5061, 5390, 6481, 5101, 5101, 5101, 6228, 5589, 5588, 5587, 5101, 5436, 5442, 6428, 5402, 5101, 5101, 5102, 6143, 6182, 5106, 5745, 6520, 5101, 5455, 5409, 5101, 5057, 5061, 5370, 6267, 5101, 5410, 5101, 5535, 5101, 5101, 5177, 5640, 5423, 5999, 5101, 5101, 6360, 5736, 6738, 6204, 5101, 5101, 6378, 5101, 5224, 5077, 5101, 5008, 6265, 5555, 5101, 5415, 5070, 5082, 5622, 5101, 5101, 6278, 6165, 5233, 5101, 5377, 6377, 6386, 5103, 5101, 5679, 5101, 5538, 5101, 5101, 5101, 5534, 5538, 4826, 5935, 6737, 6204, 4827, 5936, 6535, 6204, 6191, 6191, 5101, 5101, 6378, 6393, 5232, 5101, 5036, 5101, 5543, 5259, 5326, 6190, 5101, 5101, 5101, 6278, 5443, 6506, 4434, 5101, 5568, 6236, 5101, 5101, 5568, 5101, 5102, 6511, 5134, 6507, 5164, 4451, 5101, 5101, 6392, 5101, 6165, 5101, 6192, 6192, 6192, 5101, 5101, 6378, 6392, 5101, 5101, 6517, 5376, 5101, 5583, 5101, 5101, 5101, 6011, 6524, 5101, 6278, 5101, 5101, 5101, 5037, 6155, 5101, 5101, 5101, 6382, 6533, 6549, 5101, 5101, 5101, 6379, 6393, 5101, 6544, 6381, 5101, 5593, 5101, 5101, 5229, 5634, 5101, 6676, 6549, 5101, 5616, 6230, 5101, 5351, 5877, 4895, 5411, 5432, 5101, 5101, 5101, 5031, 5101, 6675, 6548, 5101, 5101, 5101, 6391, 5101, 6539, 5426, 5101, 5101, 5417, 5920, 4896, 5101, 5648, 6722, 5416, 6462, 5101, 5562, 5101, 6554, 6381, 5101, 5680, 5101, 5101, 6381, 5101, 5101, 5101, 5101, 4583, 5101, 6540, 5425, 5101, 5426, 5101, 5101, 6709, 5417, 4895, 5102, 4595, 5101, 5101, 6406, 5101, 4594, 5403, 6540, 5101, 5714, 5003, 4991, 6090, 6568, 5101, 5101, 6464, 4988, 5101, 6091, 6381, 5101, 5842, 5037, 5998, 5996, 5996, 5413, 4893, 5101, 5101, 5101, 6419, 5101, 6091, 5101, 5101, 6492, 6491, 5101, 6091, 5101, 4895, 4561, 4896, 5101, 5101, 6090, 6089, 4896, 5101, 5101, 6494, 6256, 4559, 5101, 5101, 6090, 5101, 5101, 6090, 4561, 6089, 4561, 5101, 6089, 4560, 5537, 6089, 5101, 5537, 6574, 6752, 4888, 4577, 5716, 5997, 6579, 5101, 5844, 5037, 5101, 5101, 5101, 6196, 5101, 6462, 6465, 6463, 4869, 5826, 5829, 6587, 4489, 4646, 6598, 6591, 6597, 6593, 6605, 6602, 6607, 6611, 6613, 6617, 6619, 6628, 6625, 6632, 6621, 6635, 6639, 6640, 6644, 6647, 6654, 6653, 6651, 6658, 6661, 6665, 5101, 6574, 6723, 5101, 5876, 6281, 5670, 5418, 5421, 5101, 5101, 5101, 6469, 5107, 5101, 4975, 5101, 4976, 6672, 5101, 5101, 5101, 6682, 6494, 5101, 5101, 5101, 6695, 6680, 5313, 6686, 5101, 5877, 5684, 4434, 6246, 5101, 5101, 6163, 5101, 5101, 5101, 6692, 5101, 5101, 6495, 5101, 5101, 6703, 5101, 5101, 5101, 6713, 5101, 5101, 6718, 6717, 4834, 6722, 5101, 5418, 5422, 5101, 6727, 6734, 5101, 5881, 5357, 5337, 6746, 5101, 5101, 5101, 6495, 6378, 5101, 6222, 6745, 5101, 5889, 5128, 5074, 4442, 6224, 6747, 5101, 5877, 5615, 5671, 5876, 5101, 5879, 5101, 5899, 6230, 5101, 5101, 6089, 5101, 5101, 4892, 5101, 5412, 5002, 6734, 5101, 5101, 6711, 5101, 5101, 5253, 5101, 5877, 5877, 5877, 5101, 5101, 5101, 6771, 5101, 5101, 6575, 5642, 4635, 5411, 6089, 5101, 4889, 5258, 5101, 5252, 4561, 5101, 5101, 6090, 5252, 4561, 5876, 5876, 5101, 5101, 5101, 5914, 6353, 6148, 5106, 4974, 5101, 5101, 5972, 5101, 4989, 5101, 6165, 5425, 5101, 6688, 5107, 5101, 6111, 5724, 6759, 5725, 4561, 5101, 5101, 5983, 5994, 5101, 5190, 5879, 5101, 5101, 5101, 5344, 5376, 5106, 5101, 5101, 5413, 6463, 5879, 5102, 6775, 6767, 5101, 5101, 5997, 5101, 5101, 5101, 4811, 4583, 6765, 5101, 5101, 5101, 5101, 6098, 5420, 5101, 5998, 5101, 5101, 5101, 4818, 5109, 5101, 5413, 5537, 5101, 5101, 6165, 5101, 6111, 6564, 5101, 5998, 5101, 6769, 5101, 5101, 6132, 6137, 5101, 6098, 5101, 5101, 6033, 6031, 6039, 5105, 5101, 5109, 5101, 4863, 5101, 6776, 5101, 5101, 5101, 6035, 4434, 5101, 6161, 5536, 5101, 5036, 5102, 5101, 5101, 6088, 5101, 5101, 5412, 6089, 1048576, 1073741824, 0, 0, 0, -872415232, 4194560, 4196352, 270532608, 2097152, 4194304, 117440512, 134217728, 4194304, 16777216, 4194432, 3145728, 16777216, 134217728, 536870912, 1073741824, 0, 541065216, 541065216, -2143289344, -2143289344, 4194304, 4194304, 4196352, -2143289344, 4194304, 4194432, 37748736, 541065216, -2143289344, 4194304, 4194304, 4194304, 4194304, 37748736, 4194304, 4194304, 4198144, 4196352, 8540160, 4194304, 4194304, 4194304, 4196352, 276901888, 4194304, 4194304, 8425488, 4194304, 1, 0, 1024, 1024, 0, 1024, 742391808, 239075328, -1405091840, 742391808, 742391808, 775946240, 239075328, 171966464, 775946240, 171966464, 171966464, 171966464, 171966464, -1405091840, 775946240, 775946240, -1405091840, -1371537408, 775946240, 775946240, 775946240, 171966464, 239075328, 239075328, 171966464, 775946240, -1371537408, 775946240, 775946240, -1371537408, 239075328, 775946240, 775946240, 775946240, 775946240, 4718592, 64, 4718592, 2097216, 4720640, 541589504, 4194368, 541589504, 4194400, 4194368, 541065280, 4194368, -2143289280, 4194368, -2143285440, -2143285408, -2143285408, -2109730976, -2143285408, -2143285408, -2143285408, -2143285408, 776470528, -2143285408, -2109730976, 775946336, 775946304, 776470528, 775946304, -1908404384, 2, 4, 8, 262144, 0, 0, 0, 0x80000000, 8, 262144, 262144, 1048576, 0, 128, 4096, 0, 4194304, 128, 128, 0, 1048576, 0, 0, 1536, 1792, 0, 0, 1, 2, 4, 128, 2097152, 8192, 8392704, 0, 0, 1, 4, 8, 262144, 536870912, 64, 64, 32, 96, 96, 96, 96, 128, 1536, 524288, 96, 64, 524288, 524288, 1536, 1024, 0, 0, 0, 29, 96, 1048576, 128, 128, 128, 128, 2048, 2048, 2048, 2048, 2048, 2048, 0, 96, 524288, 96, 64, 0, 0, 128, 1024, 524288, 64, 64, 96, 96, 524288, 524288, 4100, 1024, 100680704, 96, 524288, 64, 96, 524288, 64, 80, 528, 524304, 1048592, 2097168, 268435472, 16, 16, 2, 536936448, 16, 262160, 16, 536936448, 16, 17, 17, 20, 16, 48, 16, 16, 20, 560, 24, 560, 48, 2097680, 3145744, 1048592, 1048592, 2097168, 16, 1049104, 2228784, 2097168, 2097168, 16, 16, 16, 16, 20, 48, 48, 3146256, 2097680, 1048592, 16, 16, 16, 28, 0, 2097552, 3146256, 16, 16, 16, 21, 16, 16, 28, 16, 0, 16, 0, -2046820352, 0, 0, 2, 2, 2, 2098064, 17, 21, 266240, 1048576, 67108864, 0x80000000, 0, 0, 64, 65536, 1048576, 0, 16, 16, 163577856, 17, 528, 528, 16, 528, -161430188, -161429676, -161429676, -161430188, -161429680, -161430188, -161430188, -161429680, -161429676, -161349072, -161429675, -161349072, -161349072, -161349072, -161349072, -161347728, -161347728, -161347728, -161347728, -161298572, -160774288, -160299084, -161298572, -161298576, -160299088, -161298576, -160774284, -160774284, -161298572, -161298572, -161298572, -161298572, 112, 21, 53, 146804757, 146812949, 146862101, 146863389, -161429676, -160905388, -161429676, -161429676, -161429676, -161429676, -161429675, -161349072, 146863421, 148960541, 146863389, 146863389, 148960541, 146863421, 148960541, 148960541, -161429740, -161429676, -160905388, -161298572, -161298572, -18860267, -160774284, -18729163, 0, 0, 1, 6, 8, 16, 262144, 0, 0, 1, 8, 0, 24, 0, 0, 1, 14, 16, 32, 1024, 32768, 100663296, -1073741824, 0, 0, 0, 150528, 131072, 16777216, 0, 0, 1, 102, 1, 32768, 131328, 131072, 524288, 2097152, 8388608, 16777216, 164096, 0, 0, 0, 1007, 0, 1073741825, 0x80000000, 0x80000000, 1073741824, 8, 0, 0, 58368, 0, 0, 65536, 1048576, 4096, 1048576, 512, 512, 9476, 134218240, 0, 1073741824, 2621440, 1073741824, 0x80000000, 0x80000000, 0, 0, 66048, 0, 0, 0, 67108864, 0, 0, 0, 16384, 0, 0, 0, 8, 0, 0, 0, 9, 4456448, 8, 16777216, 1073774592, 1226014816, 100665360, 100665360, 100665360, 100665360, -2046818288, 1091799136, 1091799136, 1091803360, 1091799136, 1091799136, -2044196848, 1091799136, 1091799136, 1091799136, 1091799136, 1091799136, 1158908000, 1158908001, 1192462432, 1192462448, 1192462448, 1192462448, 1192462448, 1200851056, 1091799393, 1200851056, 1200851056, 1091799393, 1200851056, 1200851056, 1200851056, 1192462448, 1870638912, 1870638912, 1870655296, 1870638912, 1870655296, 1870655296, 1870655296, 1870655296, 1870655296, 1870655312, 1870655316, 1870655316, 1870655316, 1870655317, 1870655348, 1870655316, 1870655316, 1870655312, 1870655312, 1879027568, 1879043952, 1870655316, 1870655316, 1870655316, 1870638928, 1879043952, 1879043956, 0, 0, 1, 12288, 0, 229440, 1048576, 1224736768, 100663296, 0, 0, 0, 1024, 0, 0, 8192, 0, 0, 0, 576, 0, 231488, 1090519040, 0, 0, 0, 2048, 0, 0, 134217728, 0, 1157627904, 1191182336, 0, 0, 131584, 268435456, 49152, 0, 0, 0, 134217728, 0, 0, 0, 16, 0, 0, 0, 13, 0, 9437184, 231744, 0, 0, 235712, 0, 0, 131328, 0, 0, 131072, 32768, 0, 0, 134217728, 0, 520000, 7864320, 1862270976, 0, 0, 0, 4096, 0, 0, 0, 1862270976, 1862270976, 1862270976, 0, 16252928, 0, 0, 0, 8192, 64, 98304, 1048576, 150994944, 83886080, 117440512, 0, 0, 2, 4, 16, 32, 256, 1024, 8192, 33554432, 0, 0, 64, 256, 3584, 8192, 16384, 65536, 262144, 524288, 1048576, 2097152, 4194304, 0x80000000, 8192, 98304, 393216, 524288, 1048576, 1048576, 2097152, 4194304, 251658240, 536870912, 8192, 16384, 98304, 393216, 251658240, 536870912, 1073741824, 0, 0, 2097152, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 240, 0, 83886080, 117440512, 64, 0, 2, 0, 0, 524288, 524288, 524288, 524288, 256, 1536, 2048, 8192, 16384, 256, 1536, 8192, 65536, 262144, 524288, 2097152, 67108864, 4194304, 16777216, 100663296, 134217728, 536870912, 524288, 2097152, 134217728, 268435456, 536870912, 1073741824, 0, 0, 524288, 2097152, 0, 0, 1048576, 2097152, 67108864, 1073741824, 0, 0, 1536, 65536, 262144, 524288, 33554432, 0, 1024, 65536, 262144, 2097152, 2097152, 1073741824, 0, 0, 2, 8, 16, 32, 0, 8192, 4096, 0, 0, 605503, 1066401792, 9476, 512, 0, 32, 384, 8192, 4194312, 4194312, 541065224, 4194312, 4194312, 4194312, 4194312, 4194344, -869654016, -869654016, 4203820, -869654016, -869654016, -869654016, -869654016, 1279402504, 1279402504, 1279402504, 1279402504, 2143549415, 2143549415, 2143549415, 2143549415, 2143549423, 2143549423, 2143549423, 2143549423, 2143549423, 2143549423, 0, 0, 2, 16384, 32768, 260, 512, 0, 0, 0, 65536, 0, 0, 0, 384, 8192, 0, 32, 512, 0, 1050624, 262144, 512, 1275208192, 139264, 1275068416, 0, 0, 4, 128, 1024, 2048, 16384, 262144, 8, 4194304, 0, 0, 0, 82432, 0, 40, 0, 0, 4, 256, 1024, 98304, 131072, 16777216, 268435456, 0, 0, 300, 4203520, 0, 0, 2097152, 1073741824, 0x80000000, 0, 0, 520, 4333568, 1275068416, 0, 0, 4194304, 1024, 0, 4096, 8192, 0, 0, 0, 520, 520, 0, 0, 0, 164096, 999, 29619200, 2113929216, 0, 0, 0, 1007, 1007, 1007, 0, 0, 8, 124160, 32, 512, 0, 2048, 524288, 0, 536870912, 0, 139264, 0, 0, 0, 139264, 0, 40, 0, 2621440, 0, 0, 0x80000000, 1610612736, 0, 0, 0, 229376, 0, 40, 0, 524288, 2097152, 1073741824, 44, 0, 0, 0, 262144, 0, 0, 16384, 229376, 4194304, 25165824, 100663296, 402653184, 1610612736, 0, 110, 110, 110, 0, 0, 8388608, 8388608, 8192, 33554432, 67108864, 134217728, 1073741824, 0, 0x80000000, 0, 0, 0, 12545, 25165824, 33554432, 67108864, 402653184, 536870912, 0, 104, 104, 104, 8192, 33554432, 134217728, 0, 0, 8388608, 134217728, 1073741824, 0, 229376, 25165824, 33554432, 402653184, 536870912, 0, 0, 256, 1024, 65536, 16777216, 268435456, 0, 0, 0, 524288, 0, 0, 0, 64, 0, 0, 0, 128, 0, 0, 0, 256, 0, 0, 0, 300, 524288, 2097152, 0x80000000, 0, 0, 1, 6, 32, 64, 256, 512, 256, 1024, 4096, 8192, 65536, 2, 4, 32, 64, 256, 1024, 0, 2, 4, 256, 1024, 65536, 4, 64, 256, 1024, 0, 0, 8, 8388608, 0, 98304, 131072, 25165824, 268435456, 536870912, 0, 0, 8388608, 4096, 0, 0, 8, 8, 8, 0, 2048, 524288, 67108864, 536870912, 32, 4100, 67108864, 0, 32768, 0, 32768, 0, 1049088, 0, 134348800, 270532608, 0, 1049088, 1049088, 8192, 1049088, 12845065, 12845065, 12845065, 12845065, 147193865, 5505537, 5591557, 5587465, 5587457, 5587457, 147202057, 5587457, 5587457, 5591557, 5587457, 13894153, 13894153, 13894153, 13894153, 81003049, 13894153, -1881791493, -1881791493, -1881791493, -1881791493, 0, 0, 8, 33554432, 262144, 0, 33554432, 1024, 0, 4, 0, 0, 0, 867647, 1, 5505024, 0, 0, 15, 16, 32, 192, 86528, 9, 0, 0, 16, 8192, 0, 0, 23, 0, 75497472, 0, 0, 0, 1048576, 5505024, -1887436800, 0, 0, 0, 2097152, 268435456, 0, 0, 4096, 8192, 67108864, 0, 0, 262144, 4194304, 8388608, 0, 0, 33554432, 8192, 0, 0, 288, 8388608, 0, 0, 0, 81920, 0, 0, 24, 282624, 64, 896, 8192, 131072, 262144, 1048576, 16777216, 33554432, -1946157056, 0, 0, 0, 2621440, 0, 131072, 0, 32, 0, 0, 2048, 3145728, 0, 16384, 65536, 0, 0, 268435456, 32, 64, 384, 512, 5120, 8192, 0, 64, 0, 2048, 1048576, 0, 0, 32, 64, 384, 8192, 131072, 0, 0, 32768, 134217728, 0, 0, 8, 32, 64, 1024, 2048, 0, 2, 8, 32, 384, 8192, 131072, 33554432, 131072, 1048576, 33554432, 134217728, 0x80000000, 0, 0, 2048, 524288, 536870912, 0, 1073741824, 0, 131072, 33554432, 0x80000000, 0, 0, 33554432, 1073741824, 0, 32, 0, 524288, 0, 0, 67108864, 64, 64, 0, 96, 96, 0, 524288, 524288, 524288, 64, 64, 64, 64, 96, 96, 96, 0, 0, 0, 28, 0, 8396800, 4194304, 134217728, 2048, 134217728, 0, 0, 32, 1, 0, 8396800, 0, 0, 32, 64, 128, 1024, 2048, 262144, 0, 16384, 0, 2, 4, 64, 128, 3840, 16384, 19922944, 2080374784, 0, 16384, 16384, 16777216, 16384, 32768, 1048576, 2097152, 4194304, 16777216, 524288, 268567040, 16384, 2113544, 68489237, 72618005, 68423701, 68423701, 68423701, 68489237, 68423701, -2079059883, -2079059947, 68423701, 85200917, 68423701, 68423701, 68423701, 68423701, 68423765, -2079059883, 68425749, 68423703, 69488664, 85200919, 69488664, 69488664, 69488664, 69488664, 70537244, 70537245, 70537245, 70537245, 70537309, 70537245, -2076946339, -2076946403, 70537245, -2076946339, 70537245, 70537245, 70537245, 70537245, 70539293, -2022351745, -2022351745, -2022351617, -2022351745, -2022351617, -2022351617, -2022351617, -2022351617, -2022351617, -2022351617, -2022351745, -2022351617, -2022351617, 0, 0, 40, 67108864, 331776, 83886080, 0, 0, 59, 140224, 5505024, 5242880, -2080374784, -2080374784, 268288, 29, 0, 284672, 0, 0, 68157440, 137363456, 0, 66, 66, 0, 63, 64, 351232, 63, 192, 351232, 7340032, -2030043136, 0, 0, 0, 4194304, 1, 1024, 32, 64, 256, 32768, 65536, 512, 131072, 268435456, 0, 0, 134348800, 134348800, 16, 4096, 262144, 1048576, 4194304, 8388608, 16777216, 33554432, 5242880, 0, 7, 0, 0, 142606336, 0, -872415232, 0, 0, 0, 131072, 0, 0, 0, 999, 259072, 4194304, 25165824, 0, 20480, 0, 0, 64, 256, 1536, 8192, 16384, 0, 12, 3145728, 0, 0, 0, 3145728, 64, 3072, 20480, 65536, 262144, 32, 192, 3072, 20480, 4, 1048576, 0, 0, 128, 131072, 0, 134218752, 0, 0, 128, 134217728, 5242880, 0, 6, 0, 0, 16384, 65536, 7340032, 50331648, 32, 192, 1024, 2048, 4096, 8192, 65536, 32768, 65536, 4194304, 16777216, 0x80000000, 0, 0, 1, 4, 0, 0, 256, 1536, 65536, 65536, 2097152, 4194304, 50331648, 0x80000000, 32, 192, 1024, 65536, 268435456, 0, 0, 32768, 4194304, 16777216, 0, 0, 184549376, 0, 0, 243269632, 0, 0, 32768, 131072, 131072, 0, 32768, 32768, 1, 2, 4, 2097152, 16777216, 134217728, 268435456, 1073741824, 0x80000000, 128, 2097152, 4194304, 50331648, 0, 0, 0, 8388608, 0, 0, 0, 768, 2, 4, 50331648, 0, 0, 536870912, 9216, 0, 0, 0, 49152, 2, 4, 128, 50331648, 0, 0, 4096, 4194304, 268435456, 0, 0, 1075838976, 2097152, 2097152, 268435456, 4194432, 268435968, 268435968, 1073743872, 268435968, 0, 128, 6144, 0, 229376, 128, 268435968, 268436032, 256, 256, 536871168, 256, 256, 256, 256, 257, 256, 384, -1879046336, -1879046334, 1073744256, -1879046334, -1879046326, -1879046334, -1879046334, -1879046326, -1879046326, -1845491902, -1878784182, 268444480, 268444480, 268436288, 268436288, 268436288, 268436288, 268436289, 268444480, 268444480, 268444480, 268444480, 2100318149, 2100318149, 2100318149, 2100318149, 2100326341, 2100326341, 2100318149, 2100326341, 2100326341, 0, 0, 256, 2048, 2048, 0, 0, 0, 4, 8, 262144, 134217728, 1, 1024, 0, 4096, 0, 64, 1856, 0x80000000, 0, 0, 256, 65536, 2432, 0, 1864, 0, 1, 2, 16, 32, 64, 0, 301989888, 0, 262144, 131072, 0, 0, 832, 8192, 0, 1, 2, 56, 64, 896, 0, 1, 4036, 19939328, 2080374784, 2080374784, 0, 0, 0, 16252928, 1, 16, 32, 128, 512, 2304, 0, 8, 0, 512, 301989888, 0, 0, 262144, 524288, 134217728, 536870912, 0, 24576, 0, 0, 0, 33554432, 0, 0, 0, 32768, 0, 0, 2097152, 134217728, 0, 32768, 196608, 0, 0, 0, 1, 128, 512, 2048, 524288, 268435456, 536870912, 0, 33554432, 262144, 8192, 0, 0, 256, 8388608, 0, 0, 1, 4, 128, 3584, 16384, 3145728, 16777216, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1024, 2048, 16384, 3145728, 0, 8192, 0, 8192, 0, 536870912, 524288, 536870912, 1073741824, 0, 1, 2, 112, 128, 3072, 2048, 3145728, 16777216, 536870912, 1073741824, 0, 0, 2097152, 16777216, 1073741824, 0, 0, 0, 8192, 8192, 8192, 9216, 33554432, 32768, 33554432, 0, 0, 262144, 0, 16777216, 0, 16777216, 16777216, 16777216, 16777216, 0, 0, 2097152, 16777216, 0, 0, 16777216, 268500992, 4243456, 0, 0, 512, 65536, 0, 4096, 4096, 0, 4096, 4096, 4096, 4096, 0, 0, 0, 32, 0, 0, 0, 41, 0, 4243456, 4096, 12289, 1073754113, 12289, 12289, 1124073472, 12289, 12289, 1098920193, 1098920193, 1124073488, 1124073472, 1124073472, 1258292224, 1124073472, 1124073474, 1124073472, 1124073472, 1124073472, 1124073472, 1124073472, 1392574464, 1124073472, 12289, 1124085761, 1124085761, 1124085761, 1124085761, 1132474625, 1098920209, 1132474625, 1132474625, 1098920209, 1132474625, 1132474625, 1132474625, 1132474625, 1400975617, 1124085777, 1124085761, 1124085761, 1258304513, 2132360255, 2132360255, 2132622399, 2132360255, 2132622399, 2132622399, 2140749119, 2141011263, 2132622399, 2132622399, 2132622399, 2132622399, 2132360255, 2141011263, 2141011263, 0, 0, 512, 131072, 0, 128, 131072, 1024, 134217728, 0, 0, 0, 50331648, 1073741824, 0, 1, 4, 64, 128, 3584, 318767104, 0, 0, 0, 268435456, 0, 12289, 0, 0, 0, 159383552, 25165824, 0, 0, 0, 536870912, 0, 0, 0, 24576, 58720256, 0, 0, 12305, 13313, 0, 0, 0, 1073741824, 0, 0, 0, 12561, 0, 78081, 327155712, 0, 0, 0, 1275068416, 0, 605247, 1058013184, 1073741824, 1073741824, 8388608, 0, 0, 503616, 7864320, 867391, 1058013184, 1073741824, 0, 1, 6, 96, 384, 512, 1024, 4096, 8192, 16384, 229376, 25165824, 33554432, 268435456, 536870912, 0, 867647, 1066401792, 0, 0, 0, 512, 1048576, 0, 0, 9, 8388608, 12288, 0, 0, 0, 512, 2760704, 77824, 0, 0, 0, 1024, 2048, 3145728, 2048, 77824, 524288, 1048576, 0, 0, 0, 512, 0, 1048576, 0, 1, 30, 32, 1024, 2048, 1024, 2048, 339968, 524288, 1048576, 16777216, 100663296, 134217728, 805306368, 1073741824, 1024, 2048, 12288, 65536, 0, 65536, 0, 0, 19947520, 0, 0, 0, 16777216, 0, 0, 0, 5, 1024, 2048, 12288, 327680, 524288, 33554432, 134217728, 536870912, 1073741824, 14, 16, 1024, 4096, 8192, 229376, 0, 2, 16384, 4194304, 0x80000000, 0, 0, 0, 8, 0, 65536, 262144, 7340032, 50331648, 67108864, 0x80000000, 4096, 65536, 262144, 524288, 1048576, 33554432, 256, 0, 256, 0, 256, 1, 12, 1024, 134217728, 262144, 134217728, 536870912, 0, 0, 268435456, 1, 4, 8, 134217728, 4, 8, 536870912, 0, 2, 16, 64, 128, 0, 0, 262144, 536870912, 0, 0, 1073741824, 32768, 0, 8, 32, 512, 4096, 9437184, 0, 0, 1048576, 2097152, 4194304, 67108864, 134217728, 0, 1024, 137363456, 66, 25165824, 26214400, 92274688, 92274688, 25165952, 92274688, 25165824, 25165824, 92274688, 25165824, 25165824, 92274688, 92274688, 92274720, 92274688, 25165824, 92274688, 93323264, 25165890, 100721664, 100721664, 25165890, 100721928, 100721928, 100787464, 100853000, 100721928, 100721928, 125977600, 125977600, 125977600, 125977600, 127026176, 125977600, 125846528, 125846528, 125846560, 125846528, 125846528, 125846528, 126895104, 125846528, 125977600, 127026176, 125977600, 125977600, 127026176, 127026176, 281843, 281843, 1330419, 281843, 1330419, 281843, 1330419, 1330419, 281843, 281843, 281843, 5524723, 39079155, 72633587, 5524723, 5524723, 5524723, 5524723, 93605107, 72633587, 72633587, 92556531, 93605107, 127290611, 127290611, 97799411, 127290611, 131484915, 0, 0, 1536, 0x80000000, 0, 0, 17408, 33554432, 0, 1, 12, 1024, 262144, 0, 58624, 0, 0, 1536, 0, 189696, 0, 0, 0, 1792, 0x80000000, 0, 148480, 50331648, 0, 1, 14, 1024, 4096, 65536, 524288, 240, 19456, 262144, 0, 0, 19456, 262144, 0, 4194304, 0, 0, 1024, 2097152, 0, 0, 0, 150528, 0, 0, 0, 512, 4096, 8192, 131072, 0, 57344, 0, 0, 0, 2048, 100663296, 0, 0, 256, 0, 65536, 524288, 1048576, 33554432, 67108864, 2, 48, 64, 128, 3072, 16384, 262144, 0, 0, 32, 4096, 8192, 131072, 1048576, 8388608, 33554432, 134217728, 2048, 262144, 0, 0, 2048, 268435456, 16, 64, 128, 262144, 0, 0, 32768, 65536, 131072, 0, 1, 2, 16, 64, 0\n];\n\nXQueryParser.TOKEN =\n[\n  \"(0)\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSection\",\n  \"Wildcard\",\n  \"EQName\",\n  \"URILiteral\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"StringLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"PITarget\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'!='\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$'\",\n  \"'%'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"'+'\",\n  \"','\",\n  \"'-'\",\n  \"'-->'\",\n  \"'.'\",\n  \"'..'\",\n  \"'/'\",\n  \"'//'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"'::'\",\n  \"':='\",\n  \"';'\",\n  \"'<'\",\n  \"'<!--'\",\n  \"'</'\",\n  \"'<<'\",\n  \"'<='\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'>='\",\n  \"'>>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'@'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'{|'\",\n  \"'|'\",\n  \"'||'\",\n  \"'|}'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/tree_ops.js\":[function(_dereq_,module,exports){\n'use strict';\n\nexports.TreeOps = {\n    flatten: function(node){\n        var that = this;\n        var value = '';\n        if(!node) {\n            throw new Error('Invalid node found');\n        } else if (node.value === undefined) {\n            node.children.forEach(function(child){\n                value += that.flatten(child);\n            });\n        } else {\n            value += node.value;\n        }\n        return value;\n    },\n    \n    concat: function(obj1, obj2, copy){\n        var result = copy ? {} : obj1;\n        if(copy){\n            Object.keys(obj1).forEach(function(key){\n                result[key] = obj1[key];\n            });\n        }\n        var keys = Object.keys(obj2);\n        keys.forEach(function(key){\n            result[key] = obj2[key];\n        });\n        return result;\n    },\n    \n    removeParentPtr: function(ast){\n        if(ast.getParent !== undefined) {\n            delete ast.getParent;\n        }\n        for(var i in ast.children) {\n            var child = ast.children[i];\n            this.removeParentPtr(child);\n        }\n    },\n    \n    inRange: function(p, pos, exclusive){\n        if(p && p.sl <= pos.line && pos.line <= p.el) {\n            if(p.sl < pos.line && pos.line < p.el) {\n                return true;\n            } else if(p.sl === pos.line && pos.line < p.el) {\n                return p.sc <= pos.col;\n            } else if(p.sl === pos.line && p.el === pos.line) {\n                return p.sc <= pos.col && pos.col <= p.ec + (exclusive ? 1 : 0);\n            } else if(p.sl < pos.line && p.el === pos.line) {\n                return pos.col <= p.ec + (exclusive ? 1 : 0);\n            }\n        }\n    },\n    \n    findNode: function(ast, pos) {\n        if(!ast) {\n            return;\n        }\n        var p = ast.pos;\n        if(this.inRange(p, pos) === true) {\n            for(var i in ast.children) {\n                var child = ast.children[i];\n                var n = this.findNode(child, pos);\n                if(n !== undefined) {\n                    return n;\n                }\n            }\n            return ast;\n        } else {\n            return;\n        }\n    },\n    \n    astAsXML: function(node, indent){\n        var result =  '';\n        indent = indent ? indent : '';\n        if(node.value) {\n            result += (indent + '<' + node.name + '>' + node.value + '</' + node.name + '>\\n');\n        }\n        result += indent + '<' + node.name + '>\\n';\n        var that = this;\n        node.children.forEach(function(child){\n            result += that.astAsXML(child, indent + '  ');\n        });\n        result += indent + '</' + node.name + '>\\n';\n        return result;\n    }\n};\n},{}],\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\":[function(_dereq_,module,exports){\n'use strict';\n\nexports.parseComment = function(comment){\n    comment = comment.trim();\n    var isXQDoc = comment.substring(0, 3) === '(:~';\n    if(isXQDoc){\n        var lines = comment.split('\\n');\n        var ann = {\n            description: ''\n        };\n        lines.forEach(function(line, index){\n            if(index === 0) {\n                line = line.substring(3);\n            }\n            line = line.trim();\n            if(line[0] === ':') {\n                line = line.substring(1);\n            }\n            line = line.trim();\n            ann.description += ' ' + line;\n        });\n        ann.description = ann.description.trim();\n        ann.description = ann.description.substring(0, ann.description.length - 2).trim();\n        return ann;\n    }\n};\n},{}],\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\":[function(_dereq_,module,exports){\nvar _ = _dereq_('lodash');\nvar parseComment = _dereq_('./parse_comment').parseComment;\n\nexports.XQDoc = function(ast){\n    'use strict';\n\n    var doc = {};\n\n    this.getDoc = function(){\n        return doc;\n    };\n\n    this.WS = function(node){\n        if(node.value.trim().substring(0, 3) === '(:~') {\n            node.getParent.comment = parseComment(node.value);\n        }\n    };\n\n    this.AnnotatedDecl = function(node){\n        this.visitChildren(node);\n        node.comment = node.getParent.comment;\n        node.getParent.comment = undefined;\n    };\n    \n    this.XQuery = function(node){\n        this.visitChildren(node);\n    };\n\n    this.getXQDoc = function(sctx){\n        var doc = {\n            moduleNamespace: sctx.moduleNamespace,\n            description: sctx.description,\n            variables: [],\n            functions: []\n        };\n\n        _.forEach(sctx.variables, function(variable){\n            var varDecl = _.cloneDeep(variable.qname);\n            varDecl.annotations = variable.annotations;\n            varDecl.description = variable.description;\n            varDecl.type = variable.type;\n            varDecl.occurrence = variable.occurrence;\n            doc.variables.push(varDecl);\n        });\n\n        _.forEach(sctx.functions, function(fn, key){\n            if(key.substring(0, 'http://www.w3.org/2001/XMLSchema#'.length) === 'http://www.w3.org/2001/XMLSchema#') {\n                return;\n            }\n\n            var tokens = key.split('#');\n            doc.functions.push({\n                name: tokens[0],\n                uri: tokens[1],\n                params: fn.params\n            });\n        });\n\n        return doc;\n    };\n\n    this.visit = function (node) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    this.visit(ast);\n};\n\n},{\"./parse_comment\":\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\",\"lodash\":\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/lib/xqlint.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar _ = _dereq_('lodash');\n\nvar JSONiqParser = _dereq_('./parsers/JSONiqParser').JSONiqParser;\nvar XQueryParser = _dereq_('./parsers/XQueryParser').XQueryParser;\nvar JSONParseTreeHandler = _dereq_('./parsers/JSONParseTreeHandler').JSONParseTreeHandler;\nvar Translator = _dereq_('./compiler/translator').Translator;\nvar StyleChecker = _dereq_('./formatter/style_checker').StyleChecker;\nvar XQDoc = _dereq_('./xqdoc/xqdoc').XQDoc;\nvar completer = _dereq_('../lib/completion/completer');\nvar TreeOps = _dereq_('./tree_ops').TreeOps;\n\nvar createStaticContext = exports.createStaticContext = function(){\n    var StaticContext = _dereq_('./compiler/static_context').StaticContext;\n    return new StaticContext();\n};\n\nvar convertPosition = function (code, begin, end) {\n    var before = code.substring(0, begin);\n    var after = code.substring(0, end);\n    var startline = before.split('\\n').length;\n    var startcolumn = begin - before.lastIndexOf('\\n');\n    var endline = after.split('\\n').length;\n    var endcolumn = end - after.lastIndexOf('\\n');\n    var pos = {\n        sl: startline - 1,\n        sc: startcolumn - 1,\n        el: endline - 1,\n        ec: endcolumn - 1\n    };\n    return pos;\n};\n\nexports.JSONiqLexer = _dereq_('./lexers/jsoniq_lexer').JSONiqLexer;\nexports.XQueryLexer = _dereq_('./lexers/xquery_lexer').XQueryLexer;\nexports.XQLint = function (source, opts) {\n    if(_.defaults) {\n        opts = _.defaults(opts ? opts : {}, { styleCheck: false });\n    }\n\n    var ast, xqdoc;\n    var sctx = opts.staticContext ? opts.staticContext : createStaticContext();\n\n    this.getAST = function () {\n        return ast;\n    };\n    \n    this.printAST = function () {\n        return TreeOps.astAsXML(ast, '  ');\n    };\n\n    this.getXQDoc = function () {\n        return xqdoc.getXQDoc(sctx);\n    };\n\n    var markers = [];\n    this.getMarkers = function () {\n        return markers;\n    };\n    \n    this.getMarkers = function(type){\n        var m = [];\n        markers.forEach(function(marker){\n            if(marker.type === type || type === undefined){\n                m.push(marker);\n            }\n        });\n        return m;\n    };\n\n    this.getErrors = function(){\n        return this.getMarkers('error');\n    };\n\n    this.getWarnings = function(){\n        return this.getMarkers('warning');\n    };\n    \n    this.getCompletions = function(pos){\n        return completer.complete(source, ast, sctx, pos);\n    };\n\n    var syntaxError = false;\n    this.hasSyntaxError = function () {\n        return syntaxError;\n    };\n\n    var file = opts.fileName ? opts.fileName : '';\n    var isJSONiq = ((file.substring(file.length - '.jq'.length).indexOf('.jq') !== -1) && source.indexOf('xquery version') !== 0) || source.indexOf('jsoniq version') === 0;\n    var h = new JSONParseTreeHandler(source);\n    var parser = isJSONiq ? new JSONiqParser(source, h) : new XQueryParser(source, h);\n    try {\n        parser.parse_XQuery();\n    } catch (e) {\n        if (e instanceof parser.ParseException) {\n            syntaxError = true;\n            h.closeParseTree();\n            var pos = convertPosition(source, e.getBegin(), e.getEnd());\n            var message = parser.getErrorMessage(e);\n            if (pos.sc === pos.ec) {\n                pos.ec++;\n            }\n            markers.push({\n                pos: pos,\n                type: 'error',\n                level: 'error',\n                message: message\n            });\n        } else {\n            throw e;\n        }\n    }\n    ast = h.getParseTree();\n    if(opts.styleCheck) {\n        markers = markers.concat(new StyleChecker(ast, source).getMarkers());\n    }\n    xqdoc = new XQDoc(ast);\n    var translator = new Translator(sctx, ast);\n    markers = markers.concat(translator.getMarkers());\n};\n\n},{\"../lib/completion/completer\":\"/node_modules/xqlint/lib/completion/completer.js\",\"./compiler/static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\",\"./compiler/translator\":\"/node_modules/xqlint/lib/compiler/translator.js\",\"./formatter/style_checker\":\"/node_modules/xqlint/lib/formatter/style_checker.js\",\"./lexers/jsoniq_lexer\":\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\",\"./lexers/xquery_lexer\":\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\",\"./parsers/JSONParseTreeHandler\":\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\",\"./parsers/JSONiqParser\":\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\",\"./parsers/XQueryParser\":\"/node_modules/xqlint/lib/parsers/XQueryParser.js\",\"./tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./xqdoc/xqdoc\":\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\",\"lodash\":\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/node_modules/lodash/index.js\":[function(_dereq_,module,exports){\n(function (global){\n;(function() {\n  var undefined;\n  var VERSION = '3.10.1';\n  var BIND_FLAG = 1,\n      BIND_KEY_FLAG = 2,\n      CURRY_BOUND_FLAG = 4,\n      CURRY_FLAG = 8,\n      CURRY_RIGHT_FLAG = 16,\n      PARTIAL_FLAG = 32,\n      PARTIAL_RIGHT_FLAG = 64,\n      ARY_FLAG = 128,\n      REARG_FLAG = 256;\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n  var HOT_COUNT = 150,\n      HOT_SPAN = 16;\n  var LARGE_ARRAY_SIZE = 200;\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2;\n  var FUNC_ERROR_TEXT = 'Expected a function';\n  var PLACEHOLDER = '__lodash_placeholder__';\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      objectTag = '[object Object]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      weakMapTag = '[object WeakMap]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,\n      reUnescapedHtml = /[&<>\"'`]/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n  var reRegExpChars = /^[:!,]|[\\\\^$.*+?()[\\]{}|\\/]|(^[0-9a-fA-Fnrtuvx])|([\\n\\r\\u2028\\u2029])/g,\n      reHasRegExpChars = RegExp(reRegExpChars.source);\n  var reComboMark = /[\\u0300-\\u036f\\ufe20-\\ufe23]/g;\n  var reEscapeChar = /\\\\(\\\\)?/g;\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n  var reFlags = /\\w*$/;\n  var reHasHexPrefix = /^0[xX]/;\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n  var reIsUint = /^\\d+$/;\n  var reLatin1 = /[\\xc0-\\xd6\\xd8-\\xde\\xdf-\\xf6\\xf8-\\xff]/g;\n  var reNoMatch = /($^)/;\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n  var reWords = (function() {\n    var upper = '[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]',\n        lower = '[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]+';\n\n    return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');\n  }());\n  var contextProps = [\n    'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',\n    'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',\n    'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'\n  ];\n  var templateCounter = -1;\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[mapTag] = cloneableTags[setTag] =\n  cloneableTags[weakMapTag] = false;\n  var deburredLetters = {\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcC': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xeC': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss'\n  };\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;',\n    '`': '&#96;'\n  };\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\",\n    '&#96;': '`'\n  };\n  var objectTypes = {\n    'function': true,\n    'object': true\n  };\n  var regexpEscapes = {\n    '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',\n    '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',\n    'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',\n    'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',\n    'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'\n  };\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\n  function baseCompareAscending(value, other) {\n    if (value !== other) {\n      var valIsNull = value === null,\n          valIsUndef = value === undefined,\n          valIsReflexive = value === value;\n\n      var othIsNull = other === null,\n          othIsUndef = other === undefined,\n          othIsReflexive = other === other;\n\n      if ((value > other && !othIsNull) || !valIsReflexive ||\n          (valIsNull && !othIsUndef && othIsReflexive) ||\n          (valIsUndef && othIsReflexive)) {\n        return 1;\n      }\n      if ((value < other && !valIsNull) || !othIsReflexive ||\n          (othIsNull && !valIsUndef && valIsReflexive) ||\n          (othIsUndef && valIsReflexive)) {\n        return -1;\n      }\n    }\n    return 0;\n  }\n  function baseFindIndex(array, predicate, fromRight) {\n    var length = array.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  function baseIndexOf(array, value, fromIndex) {\n    if (value !== value) {\n      return indexOfNaN(array, fromIndex);\n    }\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  function baseIsFunction(value) {\n    return typeof value == 'function' || false;\n  }\n  function baseToString(value) {\n    return value == null ? '' : (value + '');\n  }\n  function charsLeftIndex(string, chars) {\n    var index = -1,\n        length = string.length;\n\n    while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}\n    return index;\n  }\n  function charsRightIndex(string, chars) {\n    var index = string.length;\n\n    while (index-- && chars.indexOf(string.charAt(index)) > -1) {}\n    return index;\n  }\n  function compareAscending(object, other) {\n    return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);\n  }\n  function compareMultiple(object, other, orders) {\n    var index = -1,\n        objCriteria = object.criteria,\n        othCriteria = other.criteria,\n        length = objCriteria.length,\n        ordersLength = orders.length;\n\n    while (++index < length) {\n      var result = baseCompareAscending(objCriteria[index], othCriteria[index]);\n      if (result) {\n        if (index >= ordersLength) {\n          return result;\n        }\n        var order = orders[index];\n        return result * ((order === 'asc' || order === true) ? 1 : -1);\n      }\n    }\n    return object.index - other.index;\n  }\n  function deburrLetter(letter) {\n    return deburredLetters[letter];\n  }\n  function escapeHtmlChar(chr) {\n    return htmlEscapes[chr];\n  }\n  function escapeRegExpChar(chr, leadingChar, whitespaceChar) {\n    if (leadingChar) {\n      chr = regexpEscapes[chr];\n    } else if (whitespaceChar) {\n      chr = stringEscapes[chr];\n    }\n    return '\\\\' + chr;\n  }\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n  function indexOfNaN(array, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 0 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var other = array[index];\n      if (other !== other) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  function isObjectLike(value) {\n    return !!value && typeof value == 'object';\n  }\n  function isSpace(charCode) {\n    return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||\n      (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));\n  }\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      if (array[index] === placeholder) {\n        array[index] = PLACEHOLDER;\n        result[++resIndex] = index;\n      }\n    }\n    return result;\n  }\n  function sortedUniq(array, iteratee) {\n    var seen,\n        index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index],\n          computed = iteratee ? iteratee(value, index, array) : value;\n\n      if (!index || seen !== computed) {\n        seen = computed;\n        result[++resIndex] = value;\n      }\n    }\n    return result;\n  }\n  function trimmedLeftIndex(string) {\n    var index = -1,\n        length = string.length;\n\n    while (++index < length && isSpace(string.charCodeAt(index))) {}\n    return index;\n  }\n  function trimmedRightIndex(string) {\n    var index = string.length;\n\n    while (index-- && isSpace(string.charCodeAt(index))) {}\n    return index;\n  }\n  function unescapeHtmlChar(chr) {\n    return htmlUnescapes[chr];\n  }\n  function runInContext(context) {\n    context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Number = context.Number,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n    var arrayProto = Array.prototype,\n        objectProto = Object.prototype,\n        stringProto = String.prototype;\n    var fnToString = Function.prototype.toString;\n    var hasOwnProperty = objectProto.hasOwnProperty;\n    var idCounter = 0;\n    var objToString = objectProto.toString;\n    var oldDash = root._;\n    var reIsNative = RegExp('^' +\n      fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n    var ArrayBuffer = context.ArrayBuffer,\n        clearTimeout = context.clearTimeout,\n        parseFloat = context.parseFloat,\n        pow = Math.pow,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        Set = getNative(context, 'Set'),\n        setTimeout = context.setTimeout,\n        splice = arrayProto.splice,\n        Uint8Array = context.Uint8Array,\n        WeakMap = getNative(context, 'WeakMap');\n    var nativeCeil = Math.ceil,\n        nativeCreate = getNative(Object, 'create'),\n        nativeFloor = Math.floor,\n        nativeIsArray = getNative(Array, 'isArray'),\n        nativeIsFinite = context.isFinite,\n        nativeKeys = getNative(Object, 'keys'),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = getNative(Date, 'now'),\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random;\n    var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,\n        POSITIVE_INFINITY = Number.POSITIVE_INFINITY;\n    var MAX_ARRAY_LENGTH = 4294967295,\n        MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n        HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n    var MAX_SAFE_INTEGER = 9007199254740991;\n    var metaMap = WeakMap && new WeakMap;\n    var realNames = {};\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n    function baseLodash() {\n    }\n    function LodashWrapper(value, chainAll, actions) {\n      this.__wrapped__ = value;\n      this.__actions__ = actions || [];\n      this.__chain__ = !!chainAll;\n    }\n    var support = lodash.support = {};\n    lodash.templateSettings = {\n      'escape': reEscape,\n      'evaluate': reEvaluate,\n      'interpolate': reInterpolate,\n      'variable': '',\n      'imports': {\n        '_': lodash\n      }\n    };\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = POSITIVE_INFINITY;\n      this.__views__ = [];\n    }\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = arrayCopy(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = arrayCopy(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = arrayCopy(this.__views__);\n      return result;\n    }\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {\n        return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n    function MapCache() {\n      this.__data__ = {};\n    }\n    function mapDelete(key) {\n      return this.has(key) && delete this.__data__[key];\n    }\n    function mapGet(key) {\n      return key == '__proto__' ? undefined : this.__data__[key];\n    }\n    function mapHas(key) {\n      return key != '__proto__' && hasOwnProperty.call(this.__data__, key);\n    }\n    function mapSet(key, value) {\n      if (key != '__proto__') {\n        this.__data__[key] = value;\n      }\n      return this;\n    }\n    function SetCache(values) {\n      var length = values ? values.length : 0;\n\n      this.data = { 'hash': nativeCreate(null), 'set': new Set };\n      while (length--) {\n        this.push(values[length]);\n      }\n    }\n    function cacheIndexOf(cache, value) {\n      var data = cache.data,\n          result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];\n\n      return result ? 0 : -1;\n    }\n    function cachePush(value) {\n      var data = this.data;\n      if (typeof value == 'string' || isObject(value)) {\n        data.set.add(value);\n      } else {\n        data.hash[value] = true;\n      }\n    }\n    function arrayConcat(array, other) {\n      var index = -1,\n          length = array.length,\n          othIndex = -1,\n          othLength = other.length,\n          result = Array(length + othLength);\n\n      while (++index < length) {\n        result[index] = array[index];\n      }\n      while (++othIndex < othLength) {\n        result[index++] = other[othIndex];\n      }\n      return result;\n    }\n    function arrayCopy(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n    function arrayEach(array, iteratee) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (iteratee(array[index], index, array) === false) {\n          break;\n        }\n      }\n      return array;\n    }\n    function arrayEachRight(array, iteratee) {\n      var length = array.length;\n\n      while (length--) {\n        if (iteratee(array[length], length, array) === false) {\n          break;\n        }\n      }\n      return array;\n    }\n    function arrayEvery(array, predicate) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (!predicate(array[index], index, array)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function arrayExtremum(array, iteratee, comparator, exValue) {\n      var index = -1,\n          length = array.length,\n          computed = exValue,\n          result = computed;\n\n      while (++index < length) {\n        var value = array[index],\n            current = +iteratee(value);\n\n        if (comparator(current, computed)) {\n          computed = current;\n          result = value;\n        }\n      }\n      return result;\n    }\n    function arrayFilter(array, predicate) {\n      var index = -1,\n          length = array.length,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result[++resIndex] = value;\n        }\n      }\n      return result;\n    }\n    function arrayMap(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = iteratee(array[index], index, array);\n      }\n      return result;\n    }\n    function arrayPush(array, values) {\n      var index = -1,\n          length = values.length,\n          offset = array.length;\n\n      while (++index < length) {\n        array[offset + index] = values[index];\n      }\n      return array;\n    }\n    function arrayReduce(array, iteratee, accumulator, initFromArray) {\n      var index = -1,\n          length = array.length;\n\n      if (initFromArray && length) {\n        accumulator = array[++index];\n      }\n      while (++index < length) {\n        accumulator = iteratee(accumulator, array[index], index, array);\n      }\n      return accumulator;\n    }\n    function arrayReduceRight(array, iteratee, accumulator, initFromArray) {\n      var length = array.length;\n      if (initFromArray && length) {\n        accumulator = array[--length];\n      }\n      while (length--) {\n        accumulator = iteratee(accumulator, array[length], length, array);\n      }\n      return accumulator;\n    }\n    function arraySome(array, predicate) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (predicate(array[index], index, array)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    function arraySum(array, iteratee) {\n      var length = array.length,\n          result = 0;\n\n      while (length--) {\n        result += +iteratee(array[length]) || 0;\n      }\n      return result;\n    }\n    function assignDefaults(objectValue, sourceValue) {\n      return objectValue === undefined ? sourceValue : objectValue;\n    }\n    function assignOwnDefaults(objectValue, sourceValue, key, object) {\n      return (objectValue === undefined || !hasOwnProperty.call(object, key))\n        ? sourceValue\n        : objectValue;\n    }\n    function assignWith(object, source, customizer) {\n      var index = -1,\n          props = keys(source),\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index],\n            value = object[key],\n            result = customizer(value, source[key], key, object, source);\n\n        if ((result === result ? (result !== value) : (value === value)) ||\n            (value === undefined && !(key in object))) {\n          object[key] = result;\n        }\n      }\n      return object;\n    }\n    function baseAssign(object, source) {\n      return source == null\n        ? object\n        : baseCopy(source, keys(source), object);\n    }\n    function baseAt(collection, props) {\n      var index = -1,\n          isNil = collection == null,\n          isArr = !isNil && isArrayLike(collection),\n          length = isArr ? collection.length : 0,\n          propsLength = props.length,\n          result = Array(propsLength);\n\n      while(++index < propsLength) {\n        var key = props[index];\n        if (isArr) {\n          result[index] = isIndex(key, length) ? collection[key] : undefined;\n        } else {\n          result[index] = isNil ? undefined : collection[key];\n        }\n      }\n      return result;\n    }\n    function baseCopy(source, props, object) {\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n        object[key] = source[key];\n      }\n      return object;\n    }\n    function baseCallback(func, thisArg, argCount) {\n      var type = typeof func;\n      if (type == 'function') {\n        return thisArg === undefined\n          ? func\n          : bindCallback(func, thisArg, argCount);\n      }\n      if (func == null) {\n        return identity;\n      }\n      if (type == 'object') {\n        return baseMatches(func);\n      }\n      return thisArg === undefined\n        ? property(func)\n        : baseMatchesProperty(func, thisArg);\n    }\n    function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n      var result;\n      if (customizer) {\n        result = object ? customizer(value, key, object) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return arrayCopy(value, result);\n        }\n      } else {\n        var tag = objToString.call(value),\n            isFunc = tag == funcTag;\n\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = initCloneObject(isFunc ? {} : value);\n          if (!isDeep) {\n            return baseAssign(result, value);\n          }\n        } else {\n          return cloneableTags[tag]\n            ? initCloneByTag(value, tag, isDeep)\n            : (object ? value : {});\n        }\n      }\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == value) {\n          return stackB[length];\n        }\n      }\n      stackA.push(value);\n      stackB.push(result);\n      (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n        result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n      });\n      return result;\n    }\n    var baseCreate = (function() {\n      function object() {}\n      return function(prototype) {\n        if (isObject(prototype)) {\n          object.prototype = prototype;\n          var result = new object;\n          object.prototype = undefined;\n        }\n        return result || {};\n      };\n    }());\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n    function baseDifference(array, values) {\n      var length = array ? array.length : 0,\n          result = [];\n\n      if (!length) {\n        return result;\n      }\n      var index = -1,\n          indexOf = getIndexOf(),\n          isCommon = indexOf == baseIndexOf,\n          cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,\n          valuesLength = values.length;\n\n      if (cache) {\n        indexOf = cacheIndexOf;\n        isCommon = false;\n        values = cache;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index];\n\n        if (isCommon && value === value) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === value) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (indexOf(values, value, 0) < 0) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n    var baseEach = createBaseEach(baseForOwn);\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n    function baseExtremum(collection, iteratee, comparator, exValue) {\n      var computed = exValue,\n          result = computed;\n\n      baseEach(collection, function(value, index, collection) {\n        var current = +iteratee(value, index, collection);\n        if (comparator(current, computed) || (current === exValue && current === result)) {\n          computed = current;\n          result = value;\n        }\n      });\n      return result;\n    }\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = start == null ? 0 : (+start || 0);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : (+end || 0);\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : (end >>> 0);\n      start >>>= 0;\n\n      while (start < length) {\n        array[start++] = value;\n      }\n      return array;\n    }\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n    function baseFind(collection, predicate, eachFunc, retKey) {\n      var result;\n      eachFunc(collection, function(value, key, collection) {\n        if (predicate(value, key, collection)) {\n          result = retKey ? key : value;\n          return false;\n        }\n      });\n      return result;\n    }\n    function baseFlatten(array, isDeep, isStrict, result) {\n      result || (result = []);\n\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index];\n        if (isObjectLike(value) && isArrayLike(value) &&\n            (isStrict || isArray(value) || isArguments(value))) {\n          if (isDeep) {\n            baseFlatten(value, isDeep, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n    var baseFor = createBaseFor();\n    var baseForRight = createBaseFor(true);\n    function baseForIn(object, iteratee) {\n      return baseFor(object, iteratee, keysIn);\n    }\n    function baseForOwn(object, iteratee) {\n      return baseFor(object, iteratee, keys);\n    }\n    function baseForOwnRight(object, iteratee) {\n      return baseForRight(object, iteratee, keys);\n    }\n    function baseFunctions(object, props) {\n      var index = -1,\n          length = props.length,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var key = props[index];\n        if (isFunction(object[key])) {\n          result[++resIndex] = key;\n        }\n      }\n      return result;\n    }\n    function baseGet(object, path, pathKey) {\n      if (object == null) {\n        return;\n      }\n      if (pathKey !== undefined && pathKey in toObject(object)) {\n        path = [pathKey];\n      }\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[path[index++]];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n    function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n    }\n    function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = arrayTag,\n          othTag = arrayTag;\n\n      if (!objIsArr) {\n        objTag = objToString.call(object);\n        if (objTag == argsTag) {\n          objTag = objectTag;\n        } else if (objTag != objectTag) {\n          objIsArr = isTypedArray(object);\n        }\n      }\n      if (!othIsArr) {\n        othTag = objToString.call(other);\n        if (othTag == argsTag) {\n          othTag = objectTag;\n        } else if (othTag != objectTag) {\n          othIsArr = isTypedArray(other);\n        }\n      }\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && !(objIsArr || objIsObj)) {\n        return equalByTag(object, other, objTag);\n      }\n      if (!isLoose) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == object) {\n          return stackB[length] == other;\n        }\n      }\n      stackA.push(object);\n      stackB.push(other);\n\n      var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n      stackA.pop();\n      stackB.pop();\n\n      return result;\n    }\n    function baseIsMatch(object, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = toObject(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var result = customizer ? customizer(objValue, srcValue, key) : undefined;\n          if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        var key = matchData[0][0],\n            value = matchData[0][1];\n\n        return function(object) {\n          if (object == null) {\n            return false;\n          }\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\n        };\n      }\n      return function(object) {\n        return baseIsMatch(object, matchData);\n      };\n    }\n    function baseMatchesProperty(path, srcValue) {\n      var isArr = isArray(path),\n          isCommon = isKey(path) && isStrictComparable(srcValue),\n          pathKey = (path + '');\n\n      path = toPath(path);\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        var key = pathKey;\n        object = toObject(object);\n        if ((isArr || !isCommon) && !(key in object)) {\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n          if (object == null) {\n            return false;\n          }\n          key = last(path);\n          object = toObject(object);\n        }\n        return object[key] === srcValue\n          ? (srcValue !== undefined || (key in object))\n          : baseIsEqual(srcValue, object[key], undefined, true);\n      };\n    }\n    function baseMerge(object, source, customizer, stackA, stackB) {\n      if (!isObject(object)) {\n        return object;\n      }\n      var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n          props = isSrcArr ? undefined : keys(source);\n\n      arrayEach(props || source, function(srcValue, key) {\n        if (props) {\n          key = srcValue;\n          srcValue = source[key];\n        }\n        if (isObjectLike(srcValue)) {\n          stackA || (stackA = []);\n          stackB || (stackB = []);\n          baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n        }\n        else {\n          var value = object[key],\n              result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n              isCommon = result === undefined;\n\n          if (isCommon) {\n            result = srcValue;\n          }\n          if ((result !== undefined || (isSrcArr && !(key in object))) &&\n              (isCommon || (result === result ? (result !== value) : (value === value)))) {\n            object[key] = result;\n          }\n        }\n      });\n      return object;\n    }\n    function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n      var length = stackA.length,\n          srcValue = source[key];\n\n      while (length--) {\n        if (stackA[length] == srcValue) {\n          object[key] = stackB[length];\n          return;\n        }\n      }\n      var value = object[key],\n          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n          isCommon = result === undefined;\n\n      if (isCommon) {\n        result = srcValue;\n        if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n          result = isArray(value)\n            ? value\n            : (isArrayLike(value) ? arrayCopy(value) : []);\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          result = isArguments(value)\n            ? toPlainObject(value)\n            : (isPlainObject(value) ? value : {});\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      stackA.push(srcValue);\n      stackB.push(result);\n\n      if (isCommon) {\n        object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n      } else if (result === result ? (result !== value) : (value === value)) {\n        object[key] = result;\n      }\n    }\n    function baseProperty(key) {\n      return function(object) {\n        return object == null ? undefined : object[key];\n      };\n    }\n    function basePropertyDeep(path) {\n      var pathKey = (path + '');\n      path = toPath(path);\n      return function(object) {\n        return baseGet(object, path, pathKey);\n      };\n    }\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0;\n      while (length--) {\n        var index = indexes[length];\n        if (index != previous && isIndex(index)) {\n          var previous = index;\n          splice.call(array, index, 1);\n        }\n      }\n      return array;\n    }\n    function baseRandom(min, max) {\n      return min + nativeFloor(nativeRandom() * (max - min + 1));\n    }\n    function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {\n      eachFunc(collection, function(value, index, collection) {\n        accumulator = initFromCollection\n          ? (initFromCollection = false, value)\n          : iteratee(accumulator, value, index, collection);\n      });\n      return accumulator;\n    }\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      start = start == null ? 0 : (+start || 0);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : (+end || 0);\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n    function baseSortBy(array, comparer) {\n      var length = array.length;\n\n      array.sort(comparer);\n      while (length--) {\n        array[length] = array[length].value;\n      }\n      return array;\n    }\n    function baseSortByOrder(collection, iteratees, orders) {\n      var callback = getCallback(),\n          index = -1;\n\n      iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });\n\n      var result = baseMap(collection, function(value) {\n        var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n    function baseSum(collection, iteratee) {\n      var result = 0;\n      baseEach(collection, function(value, index, collection) {\n        result += +iteratee(value, index, collection) || 0;\n      });\n      return result;\n    }\n    function baseUniq(array, iteratee) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = array.length,\n          isCommon = indexOf == baseIndexOf,\n          isLarge = isCommon && length >= LARGE_ARRAY_SIZE,\n          seen = isLarge ? createCache() : null,\n          result = [];\n\n      if (seen) {\n        indexOf = cacheIndexOf;\n        isCommon = false;\n      } else {\n        isLarge = false;\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value, index, array) : value;\n\n        if (isCommon && value === value) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (indexOf(seen, computed, 0) < 0) {\n          if (iteratee || isLarge) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n    function baseValues(object, props) {\n      var index = -1,\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = object[props[index]];\n      }\n      return result;\n    }\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      var index = -1,\n          length = actions.length;\n\n      while (++index < length) {\n        var action = actions[index];\n        result = action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }\n      return result;\n    }\n    function binaryIndex(array, value, retHighest) {\n      var low = 0,\n          high = array ? array.length : low;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return binaryIndexBy(array, value, identity, retHighest);\n    }\n    function binaryIndexBy(array, value, iteratee, retHighest) {\n      value = iteratee(value);\n\n      var low = 0,\n          high = array ? array.length : 0,\n          valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsUndef = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            isDef = computed !== undefined,\n            isReflexive = computed === computed;\n\n        if (valIsNaN) {\n          var setLow = isReflexive || retHighest;\n        } else if (valIsNull) {\n          setLow = isReflexive && isDef && (retHighest || computed != null);\n        } else if (valIsUndef) {\n          setLow = isReflexive && (retHighest || isDef);\n        } else if (computed == null) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n    function bindCallback(func, thisArg, argCount) {\n      if (typeof func != 'function') {\n        return identity;\n      }\n      if (thisArg === undefined) {\n        return func;\n      }\n      switch (argCount) {\n        case 1: return function(value) {\n          return func.call(thisArg, value);\n        };\n        case 3: return function(value, index, collection) {\n          return func.call(thisArg, value, index, collection);\n        };\n        case 4: return function(accumulator, value, index, collection) {\n          return func.call(thisArg, accumulator, value, index, collection);\n        };\n        case 5: return function(value, other, key, object, source) {\n          return func.call(thisArg, value, other, key, object, source);\n        };\n      }\n      return function() {\n        return func.apply(thisArg, arguments);\n      };\n    }\n    function bufferClone(buffer) {\n      var result = new ArrayBuffer(buffer.byteLength),\n          view = new Uint8Array(result);\n\n      view.set(new Uint8Array(buffer));\n      return result;\n    }\n    function composeArgs(args, partials, holders) {\n      var holdersLength = holders.length,\n          argsIndex = -1,\n          argsLength = nativeMax(args.length - holdersLength, 0),\n          leftIndex = -1,\n          leftLength = partials.length,\n          result = Array(leftLength + argsLength);\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        result[holders[argsIndex]] = args[argsIndex];\n      }\n      while (argsLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n    function composeArgsRight(args, partials, holders) {\n      var holdersIndex = -1,\n          holdersLength = holders.length,\n          argsIndex = -1,\n          argsLength = nativeMax(args.length - holdersLength, 0),\n          rightIndex = -1,\n          rightLength = partials.length,\n          result = Array(argsLength + rightLength);\n\n      while (++argsIndex < argsLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        result[offset + holders[holdersIndex]] = args[argsIndex++];\n      }\n      return result;\n    }\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee, thisArg) {\n        var result = initializer ? initializer() : {};\n        iteratee = getCallback(iteratee, thisArg, 3);\n\n        if (isArray(collection)) {\n          var index = -1,\n              length = collection.length;\n\n          while (++index < length) {\n            var value = collection[index];\n            setter(result, value, iteratee(value, index, collection), collection);\n          }\n        } else {\n          baseEach(collection, function(value, key, collection) {\n            setter(result, value, iteratee(value, key, collection), collection);\n          });\n        }\n        return result;\n      };\n    }\n    function createAssigner(assigner) {\n      return restParam(function(object, sources) {\n        var index = -1,\n            length = object == null ? 0 : sources.length,\n            customizer = length > 2 ? sources[length - 2] : undefined,\n            guard = length > 2 ? sources[2] : undefined,\n            thisArg = length > 1 ? sources[length - 1] : undefined;\n\n        if (typeof customizer == 'function') {\n          customizer = bindCallback(customizer, thisArg, 5);\n          length -= 2;\n        } else {\n          customizer = typeof thisArg == 'function' ? thisArg : undefined;\n          length -= (customizer ? 1 : 0);\n        }\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, customizer);\n          }\n        }\n        return object;\n      });\n    }\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        var length = collection ? getLength(collection) : 0;\n        if (!isLength(length)) {\n          return eachFunc(collection, iteratee);\n        }\n        var index = fromRight ? length : -1,\n            iterable = toObject(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var iterable = toObject(object),\n            props = keysFunc(object),\n            length = props.length,\n            index = fromRight ? length : -1;\n\n        while ((fromRight ? index-- : ++index < length)) {\n          var key = props[index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n    function createBindWrapper(func, thisArg) {\n      var Ctor = createCtorWrapper(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(thisArg, arguments);\n      }\n      return wrapper;\n    }\n    function createCache(values) {\n      return (nativeCreate && Set) ? new SetCache(values) : null;\n    }\n    function createCompounder(callback) {\n      return function(string) {\n        var index = -1,\n            array = words(deburr(string)),\n            length = array.length,\n            result = '';\n\n        while (++index < length) {\n          result = callback(result, array[index], index);\n        }\n        return result;\n      };\n    }\n    function createCtorWrapper(Ctor) {\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n    function createCurry(flag) {\n      function curryFunc(func, arity, guard) {\n        if (guard && isIterateeCall(func, arity, guard)) {\n          arity = undefined;\n        }\n        var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);\n        result.placeholder = curryFunc.placeholder;\n        return result;\n      }\n      return curryFunc;\n    }\n    function createDefaults(assigner, customizer) {\n      return restParam(function(args) {\n        var object = args[0];\n        if (object == null) {\n          return object;\n        }\n        args.push(customizer);\n        return assigner.apply(undefined, args);\n      });\n    }\n    function createExtremum(comparator, exValue) {\n      return function(collection, iteratee, thisArg) {\n        if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n          iteratee = undefined;\n        }\n        iteratee = getCallback(iteratee, thisArg, 3);\n        if (iteratee.length == 1) {\n          collection = isArray(collection) ? collection : toIterable(collection);\n          var result = arrayExtremum(collection, iteratee, comparator, exValue);\n          if (!(collection.length && result === exValue)) {\n            return result;\n          }\n        }\n        return baseExtremum(collection, iteratee, comparator, exValue);\n      };\n    }\n    function createFind(eachFunc, fromRight) {\n      return function(collection, predicate, thisArg) {\n        predicate = getCallback(predicate, thisArg, 3);\n        if (isArray(collection)) {\n          var index = baseFindIndex(collection, predicate, fromRight);\n          return index > -1 ? collection[index] : undefined;\n        }\n        return baseFind(collection, predicate, eachFunc);\n      };\n    }\n    function createFindIndex(fromRight) {\n      return function(array, predicate, thisArg) {\n        if (!(array && array.length)) {\n          return -1;\n        }\n        predicate = getCallback(predicate, thisArg, 3);\n        return baseFindIndex(array, predicate, fromRight);\n      };\n    }\n    function createFindKey(objectFunc) {\n      return function(object, predicate, thisArg) {\n        predicate = getCallback(predicate, thisArg, 3);\n        return baseFind(object, predicate, objectFunc, true);\n      };\n    }\n    function createFlow(fromRight) {\n      return function() {\n        var wrapper,\n            length = arguments.length,\n            index = fromRight ? length : -1,\n            leftIndex = 0,\n            funcs = Array(length);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          var func = funcs[leftIndex++] = arguments[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {\n            wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? -1 : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      };\n    }\n    function createForEach(arrayFunc, eachFunc) {\n      return function(collection, iteratee, thisArg) {\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n          ? arrayFunc(collection, iteratee)\n          : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n      };\n    }\n    function createForIn(objectFunc) {\n      return function(object, iteratee, thisArg) {\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\n          iteratee = bindCallback(iteratee, thisArg, 3);\n        }\n        return objectFunc(object, iteratee, keysIn);\n      };\n    }\n    function createForOwn(objectFunc) {\n      return function(object, iteratee, thisArg) {\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\n          iteratee = bindCallback(iteratee, thisArg, 3);\n        }\n        return objectFunc(object, iteratee);\n      };\n    }\n    function createObjectMapper(isMapKeys) {\n      return function(object, iteratee, thisArg) {\n        var result = {};\n        iteratee = getCallback(iteratee, thisArg, 3);\n\n        baseForOwn(object, function(value, key, object) {\n          var mapped = iteratee(value, key, object);\n          key = isMapKeys ? mapped : key;\n          value = isMapKeys ? value : mapped;\n          result[key] = value;\n        });\n        return result;\n      };\n    }\n    function createPadDir(fromRight) {\n      return function(string, length, chars) {\n        string = baseToString(string);\n        return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);\n      };\n    }\n    function createPartial(flag) {\n      var partialFunc = restParam(function(func, partials) {\n        var holders = replaceHolders(partials, partialFunc.placeholder);\n        return createWrapper(func, flag, undefined, partials, holders);\n      });\n      return partialFunc;\n    }\n    function createReduce(arrayFunc, eachFunc) {\n      return function(collection, iteratee, accumulator, thisArg) {\n        var initFromArray = arguments.length < 3;\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n          ? arrayFunc(collection, iteratee, accumulator, initFromArray)\n          : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);\n      };\n    }\n    function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & ARY_FLAG,\n          isBind = bitmask & BIND_FLAG,\n          isBindKey = bitmask & BIND_KEY_FLAG,\n          isCurry = bitmask & CURRY_FLAG,\n          isCurryBound = bitmask & CURRY_BOUND_FLAG,\n          isCurryRight = bitmask & CURRY_RIGHT_FLAG,\n          Ctor = isBindKey ? undefined : createCtorWrapper(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            index = length,\n            args = Array(length);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight);\n        }\n        if (isCurry || isCurryRight) {\n          var placeholder = wrapper.placeholder,\n              argsHolders = replaceHolders(args, placeholder);\n\n          length -= argsHolders.length;\n          if (length < arity) {\n            var newArgPos = argPos ? arrayCopy(argPos) : undefined,\n                newArity = nativeMax(arity - length, 0),\n                newsHolders = isCurry ? argsHolders : undefined,\n                newHoldersRight = isCurry ? undefined : argsHolders,\n                newPartials = isCurry ? args : undefined,\n                newPartialsRight = isCurry ? undefined : args;\n\n            bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\n            bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\n\n            if (!isCurryBound) {\n              bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\n            }\n            var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],\n                result = createHybridWrapper.apply(undefined, newData);\n\n            if (isLaziable(func)) {\n              setData(result, newData);\n            }\n            result.placeholder = placeholder;\n            return result;\n          }\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        if (argPos) {\n          args = reorder(args, argPos);\n        }\n        if (isAry && ary < args.length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtorWrapper(func);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n    function createPadding(string, length, chars) {\n      var strLength = string.length;\n      length = +length;\n\n      if (strLength >= length || !nativeIsFinite(length)) {\n        return '';\n      }\n      var padLength = length - strLength;\n      chars = chars == null ? ' ' : (chars + '');\n      return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);\n    }\n    function createPartialWrapper(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & BIND_FLAG,\n          Ctor = createCtorWrapper(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength);\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        precision = precision === undefined ? 0 : (+precision || 0);\n        if (precision) {\n          precision = pow(10, precision);\n          return func(number * precision) / precision;\n        }\n        return func(number);\n      };\n    }\n    function createSortedIndex(retHighest) {\n      return function(array, value, iteratee, thisArg) {\n        var callback = getCallback(iteratee);\n        return (iteratee == null && callback === baseCallback)\n          ? binaryIndex(array, value, retHighest)\n          : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);\n      };\n    }\n    function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      length -= (holders ? holders.length : 0);\n      if (bitmask & PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func),\n          newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\n\n      if (data) {\n        mergeData(newData, data);\n        bitmask = newData[1];\n        arity = newData[9];\n      }\n      newData[9] = arity == null\n        ? (isBindKey ? 0 : func.length)\n        : (nativeMax(arity - length, 0) || 0);\n\n      if (bitmask == BIND_FLAG) {\n        var result = createBindWrapper(newData[0], newData[2]);\n      } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {\n        result = createPartialWrapper.apply(undefined, newData);\n      } else {\n        result = createHybridWrapper.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setter(result, newData);\n    }\n    function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var index = -1,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n        return false;\n      }\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index],\n            result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\n\n        if (result !== undefined) {\n          if (result) {\n            continue;\n          }\n          return false;\n        }\n        if (isLoose) {\n          if (!arraySome(other, function(othValue) {\n                return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n              })) {\n            return false;\n          }\n        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function equalByTag(object, other, tag) {\n      switch (tag) {\n        case boolTag:\n        case dateTag:\n          return +object == +other;\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case numberTag:\n          return (object != +object)\n            ? other != +other\n            : object == +other;\n\n        case regexpTag:\n        case stringTag:\n          return object == (other + '');\n      }\n      return false;\n    }\n    function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var objProps = keys(object),\n          objLength = objProps.length,\n          othProps = keys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isLoose) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      var skipCtor = isLoose;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key],\n            result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\n        if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\n          return false;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (!skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function getCallback(func, thisArg, argCount) {\n      var result = lodash.callback || callback;\n      result = result === callback ? baseCallback : result;\n      return argCount ? result(func, thisArg, argCount) : result;\n    }\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n    function getFuncName(func) {\n      var result = func.name,\n          array = realNames[result],\n          length = array ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n    function getIndexOf(collection, target, fromIndex) {\n      var result = lodash.indexOf || indexOf;\n      result = result === indexOf ? baseIndexOf : result;\n      return collection ? result(collection, target, fromIndex) : result;\n    }\n    var getLength = baseProperty('length');\n    function getMatchData(object) {\n      var result = pairs(object),\n          length = result.length;\n\n      while (length--) {\n        result[length][2] = isStrictComparable(result[length][1]);\n      }\n      return result;\n    }\n    function getNative(object, key) {\n      var value = object == null ? undefined : object[key];\n      return isNative(value) ? value : undefined;\n    }\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n    function initCloneObject(object) {\n      var Ctor = object.constructor;\n      if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n        Ctor = Object;\n      }\n      return new Ctor;\n    }\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return bufferClone(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          var buffer = object.buffer;\n          return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          var result = new Ctor(object.source, reFlags.exec(object));\n          result.lastIndex = object.lastIndex;\n      }\n      return result;\n    }\n    function invokePath(object, path, args) {\n      if (object != null && !isKey(path, object)) {\n        path = toPath(path);\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        path = last(path);\n      }\n      var func = object == null ? object : object[path];\n      return func == null ? undefined : func.apply(object, args);\n    }\n    function isArrayLike(value) {\n      return value != null && isLength(getLength(value));\n    }\n    function isIndex(value, length) {\n      value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n      return value > -1 && value % 1 == 0 && value < length;\n    }\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n          ? (isArrayLike(object) && isIndex(index, object.length))\n          : (type == 'string' && index in object)) {\n        var other = object[index];\n        return value === value ? (value === other) : (other !== other);\n      }\n      return false;\n    }\n    function isKey(value, object) {\n      var type = typeof value;\n      if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n        return true;\n      }\n      if (isArray(value)) {\n        return false;\n      }\n      var result = !reIsDeepProp.test(value);\n      return result || (object != null && value in toObject(object));\n    }\n    function isLaziable(func) {\n      var funcName = getFuncName(func);\n      if (!(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      var other = lodash[funcName];\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n    function isLength(value) {\n      return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < ARY_FLAG;\n\n      var isCombo =\n        (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||\n        (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||\n        (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      if (srcBitmask & BIND_FLAG) {\n        data[2] = source[2];\n        newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;\n      }\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);\n      }\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);\n      }\n      value = source[7];\n      if (value) {\n        data[7] = arrayCopy(value);\n      }\n      if (srcBitmask & ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n    function mergeDefaults(objectValue, sourceValue) {\n      return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);\n    }\n    function pickByArray(object, props) {\n      object = toObject(object);\n\n      var index = -1,\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index];\n        if (key in object) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    }\n    function pickByCallback(object, predicate) {\n      var result = {};\n      baseForIn(object, function(value, key, object) {\n        if (predicate(value, key, object)) {\n          result[key] = value;\n        }\n      });\n      return result;\n    }\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = arrayCopy(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n    var setData = (function() {\n      var count = 0,\n          lastCalled = 0;\n\n      return function(key, value) {\n        var stamp = now(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return key;\n          }\n        } else {\n          count = 0;\n        }\n        return baseSetData(key, value);\n      };\n    }());\n    function shimKeys(object) {\n      var props = keysIn(object),\n          propsLength = props.length,\n          length = propsLength && object.length;\n\n      var allowIndexes = !!length && isLength(length) &&\n        (isArray(object) || isArguments(object));\n\n      var index = -1,\n          result = [];\n\n      while (++index < propsLength) {\n        var key = props[index];\n        if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    function toIterable(value) {\n      if (value == null) {\n        return [];\n      }\n      if (!isArrayLike(value)) {\n        return values(value);\n      }\n      return isObject(value) ? value : Object(value);\n    }\n    function toObject(value) {\n      return isObject(value) ? value : Object(value);\n    }\n    function toPath(value) {\n      if (isArray(value)) {\n        return value;\n      }\n      var result = [];\n      baseToString(value).replace(rePropName, function(match, number, quote, string) {\n        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    }\n    function wrapperClone(wrapper) {\n      return wrapper instanceof LazyWrapper\n        ? wrapper.clone()\n        : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));\n    }\n    function chunk(array, size, guard) {\n      if (guard ? isIterateeCall(array, size, guard) : size == null) {\n        size = 1;\n      } else {\n        size = nativeMax(nativeFloor(size) || 1, 1);\n      }\n      var index = 0,\n          length = array ? array.length : 0,\n          resIndex = -1,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[++resIndex] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n    function compact(array) {\n      var index = -1,\n          length = array ? array.length : 0,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[++resIndex] = value;\n        }\n      }\n      return result;\n    }\n    var difference = restParam(function(array, values) {\n      return (isObjectLike(array) && isArrayLike(array))\n        ? baseDifference(array, baseFlatten(values, false, true))\n        : [];\n    });\n    function drop(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      return baseSlice(array, n < 0 ? 0 : n);\n    }\n    function dropRight(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      n = length - (+n || 0);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n    function dropRightWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)\n        : [];\n    }\n    function dropWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true)\n        : [];\n    }\n    function fill(array, value, start, end) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n    var findIndex = createFindIndex();\n    var findLastIndex = createFindIndex(true);\n    function first(array) {\n      return array ? array[0] : undefined;\n    }\n    function flatten(array, isDeep, guard) {\n      var length = array ? array.length : 0;\n      if (guard && isIterateeCall(array, isDeep, guard)) {\n        isDeep = false;\n      }\n      return length ? baseFlatten(array, isDeep) : [];\n    }\n    function flattenDeep(array) {\n      var length = array ? array.length : 0;\n      return length ? baseFlatten(array, true) : [];\n    }\n    function indexOf(array, value, fromIndex) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return -1;\n      }\n      if (typeof fromIndex == 'number') {\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\n      } else if (fromIndex) {\n        var index = binaryIndex(array, value);\n        if (index < length &&\n            (value === value ? (value === array[index]) : (array[index] !== array[index]))) {\n          return index;\n        }\n        return -1;\n      }\n      return baseIndexOf(array, value, fromIndex || 0);\n    }\n    function initial(array) {\n      return dropRight(array, 1);\n    }\n    var intersection = restParam(function(arrays) {\n      var othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(length),\n          indexOf = getIndexOf(),\n          isCommon = indexOf == baseIndexOf,\n          result = [];\n\n      while (othIndex--) {\n        var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];\n        caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;\n      }\n      var array = arrays[0],\n          index = -1,\n          length = array ? array.length : 0,\n          seen = caches[0];\n\n      outer:\n      while (++index < length) {\n        value = array[index];\n        if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {\n          var othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(value);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    });\n    function last(array) {\n      var length = array ? array.length : 0;\n      return length ? array[length - 1] : undefined;\n    }\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (typeof fromIndex == 'number') {\n        index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;\n      } else if (fromIndex) {\n        index = binaryIndex(array, value, true) - 1;\n        var other = array[index];\n        if (value === value ? (value === other) : (other !== other)) {\n          return index;\n        }\n        return -1;\n      }\n      if (value !== value) {\n        return indexOfNaN(array, index, true);\n      }\n      while (index--) {\n        if (array[index] === value) {\n          return index;\n        }\n      }\n      return -1;\n    }\n    function pull() {\n      var args = arguments,\n          array = args[0];\n\n      if (!(array && array.length)) {\n        return array;\n      }\n      var index = 0,\n          indexOf = getIndexOf(),\n          length = args.length;\n\n      while (++index < length) {\n        var fromIndex = 0,\n            value = args[index];\n\n        while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n    var pullAt = restParam(function(array, indexes) {\n      indexes = baseFlatten(indexes);\n\n      var result = baseAt(array, indexes);\n      basePullAt(array, indexes.sort(baseCompareAscending));\n      return result;\n    });\n    function remove(array, predicate, thisArg) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getCallback(predicate, thisArg, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n    function rest(array) {\n      return drop(array, 1);\n    }\n    function slice(array, start, end) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      return baseSlice(array, start, end);\n    }\n    var sortedIndex = createSortedIndex();\n    var sortedLastIndex = createSortedIndex(true);\n    function take(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n    function takeRight(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      n = length - (+n || 0);\n      return baseSlice(array, n < 0 ? 0 : n);\n    }\n    function takeRightWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)\n        : [];\n    }\n    function takeWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3))\n        : [];\n    }\n    var union = restParam(function(arrays) {\n      return baseUniq(baseFlatten(arrays, false, true));\n    });\n    function uniq(array, isSorted, iteratee, thisArg) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (isSorted != null && typeof isSorted != 'boolean') {\n        thisArg = iteratee;\n        iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;\n        isSorted = false;\n      }\n      var callback = getCallback();\n      if (!(iteratee == null && callback === baseCallback)) {\n        iteratee = callback(iteratee, thisArg, 3);\n      }\n      return (isSorted && getIndexOf() == baseIndexOf)\n        ? sortedUniq(array, iteratee)\n        : baseUniq(array, iteratee);\n    }\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var index = -1,\n          length = 0;\n\n      array = arrayFilter(array, function(group) {\n        if (isArrayLike(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = arrayMap(array, baseProperty(index));\n      }\n      return result;\n    }\n    function unzipWith(array, iteratee, thisArg) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      iteratee = bindCallback(iteratee, thisArg, 4);\n      return arrayMap(result, function(group) {\n        return arrayReduce(group, iteratee, undefined, true);\n      });\n    }\n    var without = restParam(function(array, values) {\n      return isArrayLike(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n    function xor() {\n      var index = -1,\n          length = arguments.length;\n\n      while (++index < length) {\n        var array = arguments[index];\n        if (isArrayLike(array)) {\n          var result = result\n            ? arrayPush(baseDifference(result, array), baseDifference(array, result))\n            : array;\n        }\n      }\n      return result ? baseUniq(result) : [];\n    }\n    var zip = restParam(unzip);\n    function zipObject(props, values) {\n      var index = -1,\n          length = props ? props.length : 0,\n          result = {};\n\n      if (length && !values && !isArray(props[0])) {\n        values = [];\n      }\n      while (++index < length) {\n        var key = props[index];\n        if (values) {\n          result[key] = values[index];\n        } else if (key) {\n          result[key[0]] = key[1];\n        }\n      }\n      return result;\n    }\n    var zipWith = restParam(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 2 ? arrays[length - 2] : undefined,\n          thisArg = length > 1 ? arrays[length - 1] : undefined;\n\n      if (length > 2 && typeof iteratee == 'function') {\n        length -= 2;\n      } else {\n        iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;\n        thisArg = undefined;\n      }\n      arrays.length = length;\n      return unzipWith(arrays, iteratee, thisArg);\n    });\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n    function tap(value, interceptor, thisArg) {\n      interceptor.call(thisArg, value);\n      return value;\n    }\n    function thru(value, interceptor, thisArg) {\n      return interceptor.call(thisArg, value);\n    }\n    function wrapperChain() {\n      return chain(this);\n    }\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n    var wrapperConcat = restParam(function(values) {\n      values = baseFlatten(values);\n      return this.thru(function(array) {\n        return arrayConcat(isArray(array) ? array : [toObject(array)], values);\n      });\n    });\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n\n      var interceptor = function(value) {\n        return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();\n      };\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(interceptor);\n    }\n    function wrapperToString() {\n      return (this.value() + '');\n    }\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n    var at = restParam(function(collection, props) {\n      return baseAt(collection, baseFlatten(props));\n    });\n    var countBy = createAggregator(function(result, value, key) {\n      hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);\n    });\n    function every(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n        predicate = undefined;\n      }\n      if (typeof predicate != 'function' || thisArg !== undefined) {\n        predicate = getCallback(predicate, thisArg, 3);\n      }\n      return func(collection, predicate);\n    }\n    function filter(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      predicate = getCallback(predicate, thisArg, 3);\n      return func(collection, predicate);\n    }\n    var find = createFind(baseEach);\n    var findLast = createFind(baseEachRight, true);\n    function findWhere(collection, source) {\n      return find(collection, baseMatches(source));\n    }\n    var forEach = createForEach(arrayEach, baseEach);\n    var forEachRight = createForEach(arrayEachRight, baseEachRight);\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        result[key] = [value];\n      }\n    });\n    function includes(collection, target, fromIndex, guard) {\n      var length = collection ? getLength(collection) : 0;\n      if (!isLength(length)) {\n        collection = values(collection);\n        length = collection.length;\n      }\n      if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\n        fromIndex = 0;\n      } else {\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n      }\n      return (typeof collection == 'string' || !isArray(collection) && isString(collection))\n        ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)\n        : (!!length && getIndexOf(collection, target, fromIndex) > -1);\n    }\n    var indexBy = createAggregator(function(result, value, key) {\n      result[key] = value;\n    });\n    var invoke = restParam(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          isProp = isKey(path),\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);\n        result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);\n      });\n      return result;\n    });\n    function map(collection, iteratee, thisArg) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      iteratee = getCallback(iteratee, thisArg, 3);\n      return func(collection, iteratee);\n    }\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n    function pluck(collection, path) {\n      return map(collection, property(path));\n    }\n    var reduce = createReduce(arrayReduce, baseEach);\n    var reduceRight = createReduce(arrayReduceRight, baseEachRight);\n    function reject(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      predicate = getCallback(predicate, thisArg, 3);\n      return func(collection, function(value, index, collection) {\n        return !predicate(value, index, collection);\n      });\n    }\n    function sample(collection, n, guard) {\n      if (guard ? isIterateeCall(collection, n, guard) : n == null) {\n        collection = toIterable(collection);\n        var length = collection.length;\n        return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;\n      }\n      var index = -1,\n          result = toArray(collection),\n          length = result.length,\n          lastIndex = length - 1;\n\n      n = nativeMin(n < 0 ? 0 : (+n || 0), length);\n      while (++index < n) {\n        var rand = baseRandom(index, lastIndex),\n            value = result[rand];\n\n        result[rand] = result[index];\n        result[index] = value;\n      }\n      result.length = n;\n      return result;\n    }\n    function shuffle(collection) {\n      return sample(collection, POSITIVE_INFINITY);\n    }\n    function size(collection) {\n      var length = collection ? getLength(collection) : 0;\n      return isLength(length) ? length : keys(collection).length;\n    }\n    function some(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n        predicate = undefined;\n      }\n      if (typeof predicate != 'function' || thisArg !== undefined) {\n        predicate = getCallback(predicate, thisArg, 3);\n      }\n      return func(collection, predicate);\n    }\n    function sortBy(collection, iteratee, thisArg) {\n      if (collection == null) {\n        return [];\n      }\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n        iteratee = undefined;\n      }\n      var index = -1;\n      iteratee = getCallback(iteratee, thisArg, 3);\n\n      var result = baseMap(collection, function(value, key, collection) {\n        return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };\n      });\n      return baseSortBy(result, compareAscending);\n    }\n    var sortByAll = restParam(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var guard = iteratees[2];\n      if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {\n        iteratees.length = 1;\n      }\n      return baseSortByOrder(collection, baseFlatten(iteratees), []);\n    });\n    function sortByOrder(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (guard && isIterateeCall(iteratees, orders, guard)) {\n        orders = undefined;\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseSortByOrder(collection, iteratees, orders);\n    }\n    function where(collection, source) {\n      return filter(collection, baseMatches(source));\n    }\n    var now = nativeNow || function() {\n      return new Date().getTime();\n    };\n    function after(n, func) {\n      if (typeof func != 'function') {\n        if (typeof n == 'function') {\n          var temp = n;\n          n = func;\n          func = temp;\n        } else {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n      }\n      n = nativeIsFinite(n = +n) ? n : 0;\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n    function ary(func, n, guard) {\n      if (guard && isIterateeCall(func, n, guard)) {\n        n = undefined;\n      }\n      n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);\n      return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        if (typeof n == 'function') {\n          var temp = n;\n          n = func;\n          func = temp;\n        } else {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n      }\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n    var bind = restParam(function(func, thisArg, partials) {\n      var bitmask = BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, bind.placeholder);\n        bitmask |= PARTIAL_FLAG;\n      }\n      return createWrapper(func, bitmask, thisArg, partials, holders);\n    });\n    var bindAll = restParam(function(object, methodNames) {\n      methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);\n\n      var index = -1,\n          length = methodNames.length;\n\n      while (++index < length) {\n        var key = methodNames[index];\n        object[key] = createWrapper(object[key], BIND_FLAG, object);\n      }\n      return object;\n    });\n    var bindKey = restParam(function(object, key, partials) {\n      var bitmask = BIND_FLAG | BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, bindKey.placeholder);\n        bitmask |= PARTIAL_FLAG;\n      }\n      return createWrapper(key, bitmask, object, partials, holders);\n    });\n    var curry = createCurry(CURRY_FLAG);\n    var curryRight = createCurry(CURRY_RIGHT_FLAG);\n    function debounce(func, wait, options) {\n      var args,\n          maxTimeoutId,\n          result,\n          stamp,\n          thisArg,\n          timeoutId,\n          trailingCall,\n          lastCalled = 0,\n          maxWait = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = wait < 0 ? 0 : (+wait || 0);\n      if (options === true) {\n        var leading = true;\n        trailing = false;\n      } else if (isObject(options)) {\n        leading = !!options.leading;\n        maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function cancel() {\n        if (timeoutId) {\n          clearTimeout(timeoutId);\n        }\n        if (maxTimeoutId) {\n          clearTimeout(maxTimeoutId);\n        }\n        lastCalled = 0;\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n      }\n\n      function complete(isCalled, id) {\n        if (id) {\n          clearTimeout(id);\n        }\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n        if (isCalled) {\n          lastCalled = now();\n          result = func.apply(thisArg, args);\n          if (!timeoutId && !maxTimeoutId) {\n            args = thisArg = undefined;\n          }\n        }\n      }\n\n      function delayed() {\n        var remaining = wait - (now() - stamp);\n        if (remaining <= 0 || remaining > wait) {\n          complete(trailingCall, maxTimeoutId);\n        } else {\n          timeoutId = setTimeout(delayed, remaining);\n        }\n      }\n\n      function maxDelayed() {\n        complete(trailing, timeoutId);\n      }\n\n      function debounced() {\n        args = arguments;\n        stamp = now();\n        thisArg = this;\n        trailingCall = trailing && (timeoutId || !leading);\n\n        if (maxWait === false) {\n          var leadingCall = leading && !timeoutId;\n        } else {\n          if (!maxTimeoutId && !leading) {\n            lastCalled = stamp;\n          }\n          var remaining = maxWait - (stamp - lastCalled),\n              isCalled = remaining <= 0 || remaining > maxWait;\n\n          if (isCalled) {\n            if (maxTimeoutId) {\n              maxTimeoutId = clearTimeout(maxTimeoutId);\n            }\n            lastCalled = stamp;\n            result = func.apply(thisArg, args);\n          }\n          else if (!maxTimeoutId) {\n            maxTimeoutId = setTimeout(maxDelayed, remaining);\n          }\n        }\n        if (isCalled && timeoutId) {\n          timeoutId = clearTimeout(timeoutId);\n        }\n        else if (!timeoutId && wait !== maxWait) {\n          timeoutId = setTimeout(delayed, wait);\n        }\n        if (leadingCall) {\n          isCalled = true;\n          result = func.apply(thisArg, args);\n        }\n        if (isCalled && !timeoutId && !maxTimeoutId) {\n          args = thisArg = undefined;\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      return debounced;\n    }\n    var defer = restParam(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n    var delay = restParam(function(func, wait, args) {\n      return baseDelay(func, wait, args);\n    });\n    var flow = createFlow();\n    var flowRight = createFlow(true);\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result);\n        return result;\n      };\n      memoized.cache = new memoize.Cache;\n      return memoized;\n    }\n    var modArgs = restParam(function(func, transforms) {\n      transforms = baseFlatten(transforms);\n      if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = transforms.length;\n      return restParam(function(args) {\n        var index = nativeMin(args.length, length);\n        while (index--) {\n          args[index] = transforms[index](args[index]);\n        }\n        return func.apply(this, args);\n      });\n    });\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        return !predicate.apply(this, arguments);\n      };\n    }\n    function once(func) {\n      return before(2, func);\n    }\n    var partial = createPartial(PARTIAL_FLAG);\n    var partialRight = createPartial(PARTIAL_RIGHT_FLAG);\n    var rearg = restParam(function(func, indexes) {\n      return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));\n    });\n    function restParam(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            rest = Array(length);\n\n        while (++index < length) {\n          rest[index] = args[start + index];\n        }\n        switch (start) {\n          case 0: return func.call(this, rest);\n          case 1: return func.call(this, args[0], rest);\n          case 2: return func.call(this, args[0], args[1], rest);\n        }\n        var otherArgs = Array(start + 1);\n        index = -1;\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = rest;\n        return func.apply(this, otherArgs);\n      };\n    }\n    function spread(func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function(array) {\n        return func.apply(this, array);\n      };\n    }\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (options === false) {\n        leading = false;\n      } else if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n    }\n    function wrap(value, wrapper) {\n      wrapper = wrapper == null ? identity : wrapper;\n      return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);\n    }\n    function clone(value, isDeep, customizer, thisArg) {\n      if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\n        isDeep = false;\n      }\n      else if (typeof isDeep == 'function') {\n        thisArg = customizer;\n        customizer = isDeep;\n        isDeep = false;\n      }\n      return typeof customizer == 'function'\n        ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1))\n        : baseClone(value, isDeep);\n    }\n    function cloneDeep(value, customizer, thisArg) {\n      return typeof customizer == 'function'\n        ? baseClone(value, true, bindCallback(customizer, thisArg, 1))\n        : baseClone(value, true);\n    }\n    function gt(value, other) {\n      return value > other;\n    }\n    function gte(value, other) {\n      return value >= other;\n    }\n    function isArguments(value) {\n      return isObjectLike(value) && isArrayLike(value) &&\n        hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n    }\n    var isArray = nativeIsArray || function(value) {\n      return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n    };\n    function isBoolean(value) {\n      return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);\n    }\n    function isDate(value) {\n      return isObjectLike(value) && objToString.call(value) == dateTag;\n    }\n    function isElement(value) {\n      return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);\n    }\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||\n          (isObjectLike(value) && isFunction(value.splice)))) {\n        return !value.length;\n      }\n      return !keys(value).length;\n    }\n    function isEqual(value, other, customizer, thisArg) {\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return  result === undefined ? baseIsEqual(value, other, customizer) : !!result;\n    }\n    function isError(value) {\n      return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;\n    }\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n    function isFunction(value) {\n      return isObject(value) && objToString.call(value) == funcTag;\n    }\n    function isObject(value) {\n      var type = typeof value;\n      return !!value && (type == 'object' || type == 'function');\n    }\n    function isMatch(object, source, customizer, thisArg) {\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\n      return baseIsMatch(object, getMatchData(source), customizer);\n    }\n    function isNaN(value) {\n      return isNumber(value) && value != +value;\n    }\n    function isNative(value) {\n      if (value == null) {\n        return false;\n      }\n      if (isFunction(value)) {\n        return reIsNative.test(fnToString.call(value));\n      }\n      return isObjectLike(value) && reIsHostCtor.test(value);\n    }\n    function isNull(value) {\n      return value === null;\n    }\n    function isNumber(value) {\n      return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\n    }\n    function isPlainObject(value) {\n      var Ctor;\n      if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||\n          (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n        return false;\n      }\n      var result;\n      baseForIn(value, function(subValue, key) {\n        result = key;\n      });\n      return result === undefined || hasOwnProperty.call(value, result);\n    }\n    function isRegExp(value) {\n      return isObject(value) && objToString.call(value) == regexpTag;\n    }\n    function isString(value) {\n      return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n    }\n    function isTypedArray(value) {\n      return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n    }\n    function isUndefined(value) {\n      return value === undefined;\n    }\n    function lt(value, other) {\n      return value < other;\n    }\n    function lte(value, other) {\n      return value <= other;\n    }\n    function toArray(value) {\n      var length = value ? getLength(value) : 0;\n      if (!isLength(length)) {\n        return values(value);\n      }\n      if (!length) {\n        return [];\n      }\n      return arrayCopy(value);\n    }\n    function toPlainObject(value) {\n      return baseCopy(value, keysIn(value));\n    }\n    var merge = createAssigner(baseMerge);\n    var assign = createAssigner(function(object, source, customizer) {\n      return customizer\n        ? assignWith(object, source, customizer)\n        : baseAssign(object, source);\n    });\n    function create(prototype, properties, guard) {\n      var result = baseCreate(prototype);\n      if (guard && isIterateeCall(prototype, properties, guard)) {\n        properties = undefined;\n      }\n      return properties ? baseAssign(result, properties) : result;\n    }\n    var defaults = createDefaults(assign, assignDefaults);\n    var defaultsDeep = createDefaults(merge, mergeDefaults);\n    var findKey = createFindKey(baseForOwn);\n    var findLastKey = createFindKey(baseForOwnRight);\n    var forIn = createForIn(baseFor);\n    var forInRight = createForIn(baseForRight);\n    var forOwn = createForOwn(baseForOwn);\n    var forOwnRight = createForOwn(baseForOwnRight);\n    function functions(object) {\n      return baseFunctions(object, keysIn(object));\n    }\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, toPath(path), path + '');\n      return result === undefined ? defaultValue : result;\n    }\n    function has(object, path) {\n      if (object == null) {\n        return false;\n      }\n      var result = hasOwnProperty.call(object, path);\n      if (!result && !isKey(path)) {\n        path = toPath(path);\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        if (object == null) {\n          return false;\n        }\n        path = last(path);\n        result = hasOwnProperty.call(object, path);\n      }\n      return result || (isLength(object.length) && isIndex(path, object.length) &&\n        (isArray(object) || isArguments(object)));\n    }\n    function invert(object, multiValue, guard) {\n      if (guard && isIterateeCall(object, multiValue, guard)) {\n        multiValue = undefined;\n      }\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index],\n            value = object[key];\n\n        if (multiValue) {\n          if (hasOwnProperty.call(result, value)) {\n            result[value].push(key);\n          } else {\n            result[value] = [key];\n          }\n        }\n        else {\n          result[value] = key;\n        }\n      }\n      return result;\n    }\n    var keys = !nativeKeys ? shimKeys : function(object) {\n      var Ctor = object == null ? undefined : object.constructor;\n      if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n          (typeof object != 'function' && isArrayLike(object))) {\n        return shimKeys(object);\n      }\n      return isObject(object) ? nativeKeys(object) : [];\n    };\n    function keysIn(object) {\n      if (object == null) {\n        return [];\n      }\n      if (!isObject(object)) {\n        object = Object(object);\n      }\n      var length = object.length;\n      length = (length && isLength(length) &&\n        (isArray(object) || isArguments(object)) && length) || 0;\n\n      var Ctor = object.constructor,\n          index = -1,\n          isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n          result = Array(length),\n          skipIndexes = length > 0;\n\n      while (++index < length) {\n        result[index] = (index + '');\n      }\n      for (var key in object) {\n        if (!(skipIndexes && isIndex(key, length)) &&\n            !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    var mapKeys = createObjectMapper(true);\n    var mapValues = createObjectMapper();\n    var omit = restParam(function(object, props) {\n      if (object == null) {\n        return {};\n      }\n      if (typeof props[0] != 'function') {\n        var props = arrayMap(baseFlatten(props), String);\n        return pickByArray(object, baseDifference(keysIn(object), props));\n      }\n      var predicate = bindCallback(props[0], props[1], 3);\n      return pickByCallback(object, function(value, key, object) {\n        return !predicate(value, key, object);\n      });\n    });\n    function pairs(object) {\n      object = toObject(object);\n\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        var key = props[index];\n        result[index] = [key, object[key]];\n      }\n      return result;\n    }\n    var pick = restParam(function(object, props) {\n      if (object == null) {\n        return {};\n      }\n      return typeof props[0] == 'function'\n        ? pickByCallback(object, bindCallback(props[0], props[1], 3))\n        : pickByArray(object, baseFlatten(props));\n    });\n    function result(object, path, defaultValue) {\n      var result = object == null ? undefined : object[path];\n      if (result === undefined) {\n        if (object != null && !isKey(path, object)) {\n          path = toPath(path);\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n          result = object == null ? undefined : object[last(path)];\n        }\n        result = result === undefined ? defaultValue : result;\n      }\n      return isFunction(result) ? result.call(object) : result;\n    }\n    function set(object, path, value) {\n      if (object == null) {\n        return object;\n      }\n      var pathKey = (path + '');\n      path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = path[index];\n        if (isObject(nested)) {\n          if (index == lastIndex) {\n            nested[key] = value;\n          } else if (nested[key] == null) {\n            nested[key] = isIndex(path[index + 1]) ? [] : {};\n          }\n        }\n        nested = nested[key];\n      }\n      return object;\n    }\n    function transform(object, iteratee, accumulator, thisArg) {\n      var isArr = isArray(object) || isTypedArray(object);\n      iteratee = getCallback(iteratee, thisArg, 4);\n\n      if (accumulator == null) {\n        if (isArr || isObject(object)) {\n          var Ctor = object.constructor;\n          if (isArr) {\n            accumulator = isArray(object) ? new Ctor : [];\n          } else {\n            accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);\n          }\n        } else {\n          accumulator = {};\n        }\n      }\n      (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n    function values(object) {\n      return baseValues(object, keys(object));\n    }\n    function valuesIn(object) {\n      return baseValues(object, keysIn(object));\n    }\n    function inRange(value, start, end) {\n      start = +start || 0;\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = +end || 0;\n      }\n      return value >= nativeMin(start, end) && value < nativeMax(start, end);\n    }\n    function random(min, max, floating) {\n      if (floating && isIterateeCall(min, max, floating)) {\n        max = floating = undefined;\n      }\n      var noMin = min == null,\n          noMax = max == null;\n\n      if (floating == null) {\n        if (noMax && typeof min == 'boolean') {\n          floating = min;\n          min = 1;\n        }\n        else if (typeof max == 'boolean') {\n          floating = max;\n          noMax = true;\n        }\n      }\n      if (noMin && noMax) {\n        max = 1;\n        noMax = false;\n      }\n      min = +min || 0;\n      if (noMax) {\n        max = min;\n        min = 0;\n      } else {\n        max = +max || 0;\n      }\n      if (floating || min % 1 || max % 1) {\n        var rand = nativeRandom();\n        return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);\n      }\n      return baseRandom(min, max);\n    }\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);\n    });\n    function capitalize(string) {\n      string = baseToString(string);\n      return string && (string.charAt(0).toUpperCase() + string.slice(1));\n    }\n    function deburr(string) {\n      string = baseToString(string);\n      return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');\n    }\n    function endsWith(string, target, position) {\n      string = baseToString(string);\n      target = (target + '');\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : nativeMin(position < 0 ? 0 : (+position || 0), length);\n\n      position -= target.length;\n      return position >= 0 && string.indexOf(target, position) == position;\n    }\n    function escape(string) {\n      string = baseToString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n    function escapeRegExp(string) {\n      string = baseToString(string);\n      return (string && reHasRegExpChars.test(string))\n        ? string.replace(reRegExpChars, escapeRegExpChar)\n        : (string || '(?:)');\n    }\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n    function pad(string, length, chars) {\n      string = baseToString(string);\n      length = +length;\n\n      var strLength = string.length;\n      if (strLength >= length || !nativeIsFinite(length)) {\n        return string;\n      }\n      var mid = (length - strLength) / 2,\n          leftLength = nativeFloor(mid),\n          rightLength = nativeCeil(mid);\n\n      chars = createPadding('', rightLength, chars);\n      return chars.slice(0, leftLength) + string + chars;\n    }\n    var padLeft = createPadDir();\n    var padRight = createPadDir(true);\n    function parseInt(string, radix, guard) {\n      if (guard ? isIterateeCall(string, radix, guard) : radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      string = trim(string);\n      return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));\n    }\n    function repeat(string, n) {\n      var result = '';\n      string = baseToString(string);\n      n = +n;\n      if (n < 1 || !string || !nativeIsFinite(n)) {\n        return result;\n      }\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        string += string;\n      } while (n);\n\n      return result;\n    }\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));\n    });\n    function startsWith(string, target, position) {\n      string = baseToString(string);\n      position = position == null\n        ? 0\n        : nativeMin(position < 0 ? 0 : (+position || 0), string.length);\n\n      return string.lastIndexOf(target, position) == position;\n    }\n    function template(string, options, otherOptions) {\n      var settings = lodash.templateSettings;\n\n      if (otherOptions && isIterateeCall(string, options, otherOptions)) {\n        options = otherOptions = undefined;\n      }\n      string = baseToString(string);\n      options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);\n\n      var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n      var sourceURL = '//# sourceURL=' +\n        ('sourceURL' in options\n          ? options.sourceURL\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n        return match;\n      });\n\n      source += \"';\\n\";\n      var variable = options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);\n      });\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n    function trim(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);\n      }\n      chars = (chars + '');\n      return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);\n    }\n    function trimLeft(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(trimmedLeftIndex(string));\n      }\n      return string.slice(charsLeftIndex(string, (chars + '')));\n    }\n    function trimRight(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(0, trimmedRightIndex(string) + 1);\n      }\n      return string.slice(0, charsRightIndex(string, (chars + '')) + 1);\n    }\n    function trunc(string, options, guard) {\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (options != null) {\n        if (isObject(options)) {\n          var separator = 'separator' in options ? options.separator : separator;\n          length = 'length' in options ? (+options.length || 0) : length;\n          omission = 'omission' in options ? baseToString(options.omission) : omission;\n        } else {\n          length = +options || 0;\n        }\n      }\n      string = baseToString(string);\n      if (length >= string.length) {\n        return string;\n      }\n      var end = length - omission.length;\n      if (end < 1) {\n        return omission;\n      }\n      var result = string.slice(0, end);\n      if (separator == null) {\n        return result + omission;\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              newEnd,\n              substring = string.slice(0, end);\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            newEnd = match.index;\n          }\n          result = result.slice(0, newEnd == null ? end : newEnd);\n        }\n      } else if (string.indexOf(separator, end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n    function unescape(string) {\n      string = baseToString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n    function words(string, pattern, guard) {\n      if (guard && isIterateeCall(string, pattern, guard)) {\n        pattern = undefined;\n      }\n      string = baseToString(string);\n      return string.match(pattern || reWords) || [];\n    }\n    var attempt = restParam(function(func, args) {\n      try {\n        return func.apply(undefined, args);\n      } catch(e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n    function callback(func, thisArg, guard) {\n      if (guard && isIterateeCall(func, thisArg, guard)) {\n        thisArg = undefined;\n      }\n      return isObjectLike(func)\n        ? matches(func)\n        : baseCallback(func, thisArg);\n    }\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n    function identity(value) {\n      return value;\n    }\n    function matches(source) {\n      return baseMatches(baseClone(source, true));\n    }\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, true));\n    }\n    var method = restParam(function(path, args) {\n      return function(object) {\n        return invokePath(object, path, args);\n      };\n    });\n    var methodOf = restParam(function(object, args) {\n      return function(path) {\n        return invokePath(object, path, args);\n      };\n    });\n    function mixin(object, source, options) {\n      if (options == null) {\n        var isObj = isObject(source),\n            props = isObj ? keys(source) : undefined,\n            methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;\n\n        if (!(methodNames ? methodNames.length : isObj)) {\n          methodNames = false;\n          options = source;\n          source = object;\n          object = this;\n        }\n      }\n      if (!methodNames) {\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = true,\n          index = -1,\n          isFunc = isFunction(object),\n          length = methodNames.length;\n\n      if (options === false) {\n        chain = false;\n      } else if (isObject(options) && 'chain' in options) {\n        chain = options.chain;\n      }\n      while (++index < length) {\n        var methodName = methodNames[index],\n            func = source[methodName];\n\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = (function(func) {\n            return function() {\n              var chainAll = this.__chain__;\n              if (chain || chainAll) {\n                var result = object(this.__wrapped__),\n                    actions = result.__actions__ = arrayCopy(this.__actions__);\n\n                actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n                result.__chain__ = chainAll;\n                return result;\n              }\n              return func.apply(object, arrayPush([this.value()], arguments));\n            };\n          }(func));\n        }\n      }\n      return object;\n    }\n    function noConflict() {\n      root._ = oldDash;\n      return this;\n    }\n    function noop() {\n    }\n    function property(path) {\n      return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n    }\n    function propertyOf(object) {\n      return function(path) {\n        return baseGet(object, toPath(path), path + '');\n      };\n    }\n    function range(start, end, step) {\n      if (step && isIterateeCall(start, end, step)) {\n        end = step = undefined;\n      }\n      start = +start || 0;\n      step = step == null ? 1 : (+step || 0);\n\n      if (end == null) {\n        end = start;\n        start = 0;\n      } else {\n        end = +end || 0;\n      }\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = start;\n        start += step;\n      }\n      return result;\n    }\n    function times(n, iteratee, thisArg) {\n      n = nativeFloor(n);\n      if (n < 1 || !nativeIsFinite(n)) {\n        return [];\n      }\n      var index = -1,\n          result = Array(nativeMin(n, MAX_ARRAY_LENGTH));\n\n      iteratee = bindCallback(iteratee, thisArg, 1);\n      while (++index < n) {\n        if (index < MAX_ARRAY_LENGTH) {\n          result[index] = iteratee(index);\n        } else {\n          iteratee(index);\n        }\n      }\n      return result;\n    }\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return baseToString(prefix) + id;\n    }\n    function add(augend, addend) {\n      return (+augend || 0) + (+addend || 0);\n    }\n    var ceil = createRound('ceil');\n    var floor = createRound('floor');\n    var max = createExtremum(gt, NEGATIVE_INFINITY);\n    var min = createExtremum(lt, POSITIVE_INFINITY);\n    var round = createRound('round');\n    function sum(collection, iteratee, thisArg) {\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n        iteratee = undefined;\n      }\n      iteratee = getCallback(iteratee, thisArg, 3);\n      return iteratee.length == 1\n        ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)\n        : baseSum(collection, iteratee);\n    }\n    lodash.prototype = baseLodash.prototype;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n    MapCache.prototype['delete'] = mapDelete;\n    MapCache.prototype.get = mapGet;\n    MapCache.prototype.has = mapHas;\n    MapCache.prototype.set = mapSet;\n    SetCache.prototype.push = cachePush;\n    memoize.Cache = MapCache;\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.callback = callback;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.functions = functions;\n    lodash.groupBy = groupBy;\n    lodash.indexBy = indexBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.invert = invert;\n    lodash.invoke = invoke;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.modArgs = modArgs;\n    lodash.negate = negate;\n    lodash.omit = omit;\n    lodash.once = once;\n    lodash.pairs = pairs;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pluck = pluck;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.restParam = restParam;\n    lodash.set = set;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortByAll = sortByAll;\n    lodash.sortByOrder = sortByOrder;\n    lodash.spread = spread;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.times = times;\n    lodash.toArray = toArray;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.union = union;\n    lodash.uniq = uniq;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.where = where;\n    lodash.without = without;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipWith = zipWith;\n    lodash.backflow = flowRight;\n    lodash.collect = map;\n    lodash.compose = flowRight;\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.extend = assign;\n    lodash.iteratee = callback;\n    lodash.methods = functions;\n    lodash.object = zipObject;\n    lodash.select = filter;\n    lodash.tail = rest;\n    lodash.unique = uniq;\n    mixin(lodash, lodash);\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.deburr = deburr;\n    lodash.endsWith = endsWith;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.findWhere = findWhere;\n    lodash.first = first;\n    lodash.floor = floor;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isBoolean = isBoolean;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isMatch = isMatch;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isString = isString;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.min = min;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padLeft = padLeft;\n    lodash.padRight = padRight;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.sum = sum;\n    lodash.template = template;\n    lodash.trim = trim;\n    lodash.trimLeft = trimLeft;\n    lodash.trimRight = trimRight;\n    lodash.trunc = trunc;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.words = words;\n    lodash.all = every;\n    lodash.any = some;\n    lodash.contains = includes;\n    lodash.eq = isEqual;\n    lodash.detect = find;\n    lodash.foldl = reduce;\n    lodash.foldr = reduceRight;\n    lodash.head = first;\n    lodash.include = includes;\n    lodash.inject = reduce;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!lodash.prototype[methodName]) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), false);\n    lodash.sample = sample;\n\n    lodash.prototype.sample = function(n) {\n      if (!this.__chain__ && n == null) {\n        return sample(this.value());\n      }\n      return this.thru(function(value) {\n        return sample(value, n);\n      });\n    };\n    lodash.VERSION = VERSION;\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        var filtered = this.__filtered__;\n        if (filtered && !index) {\n          return new LazyWrapper(this);\n        }\n        n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);\n\n        var result = this.clone();\n        if (filtered) {\n          result.__takeCount__ = nativeMin(result.__takeCount__, n);\n        } else {\n          result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type != LAZY_MAP_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {\n        var result = this.clone();\n        result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n    arrayEach(['first', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n    arrayEach(['initial', 'rest'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n    arrayEach(['pluck', 'where'], function(methodName, index) {\n      var operationName = index ? 'filter' : 'map',\n          createCallback = index ? baseMatches : property;\n\n      LazyWrapper.prototype[methodName] = function(value) {\n        return this[operationName](createCallback(value));\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.reject = function(predicate, thisArg) {\n      predicate = getCallback(predicate, thisArg, 1);\n      return this.filter(function(value) {\n        return !predicate(value);\n      });\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = start == null ? 0 : (+start || 0);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = (+end || 0);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {\n      return this.reverse().takeWhile(predicate, thisArg).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(POSITIVE_INFINITY);\n    };\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),\n          retUnwrapped = /^(?:first|last)$/.test(methodName),\n          lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var args = retUnwrapped ? [1] : arguments,\n            chainAll = this.__chain__,\n            value = this.__wrapped__,\n            isHybrid = !!this.__actions__.length,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          isLazy = useLazy = false;\n        }\n        var interceptor = function(value) {\n          return (retUnwrapped && chainAll)\n            ? lodashFunc(value, 1)[0]\n            : lodashFunc.apply(undefined, arrayPush([value], args));\n        };\n\n        var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },\n            onlyLazy = isLazy && !isHybrid;\n\n        if (retUnwrapped && !chainAll) {\n          if (onlyLazy) {\n            value = value.clone();\n            value.__actions__.push(action);\n            return func.call(value);\n          }\n          return lodashFunc.call(undefined, this.value())[0];\n        }\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push(action);\n          return new LodashWrapper(result, chainAll);\n        }\n        return this.thru(interceptor);\n      };\n    });\n    arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {\n      var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          return func.apply(this.value(), args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(value, args);\n        });\n      };\n    });\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name,\n            names = realNames[key] || (realNames[key] = []);\n\n        names.push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.concat = wrapperConcat;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toString = wrapperToString;\n    lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n    lodash.prototype.collect = lodash.prototype.map;\n    lodash.prototype.head = lodash.prototype.first;\n    lodash.prototype.select = lodash.prototype.filter;\n    lodash.prototype.tail = lodash.prototype.rest;\n\n    return lodash;\n  }\n  var _ = runInContext();\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    root._ = _;\n    define(function() {\n      return _;\n    });\n  }\n  else if (freeExports && freeModule) {\n    if (moduleExports) {\n      (freeModule.exports = _)._ = _;\n    }\n    else {\n      freeExports._ = _;\n    }\n  }\n  else {\n    root._ = _;\n  }\n}.call(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}]},{},[\"/node_modules/xqlint/lib/xqlint.js\"]);\n\n});\n\ndefine(\"ace/mode/xquery_worker\",[], function(require, exports, module) {\n\"use strict\";\n    \nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar XQLintLib = require(\"./xquery/xqlint\");\nvar XQLint =  XQLintLib.XQLint;\n\nvar getModuleResolverFromModules = function(modules){\n    return function(uri){\n            var index = modules;\n            var mod = index[uri];\n            var variables = {};\n            var functions = {};\n            mod.functions.forEach(function(fn){\n                functions[uri + '#' + fn.name + '#' + fn.arity] = {\n                    params: []\n                };\n                fn.parameters.forEach(function(param){\n                    functions[uri + '#' + fn.name + '#' + fn.arity].params.push('$' + param.name);\n                });\n            });\n            mod.variables.forEach(function(variable){\n                var name = variable.name.substring(variable.name.indexOf(':') + 1);\n                variables[uri + '#' + name] = { type: 'VarDecl', annotations: [] };\n            });\n            return {\n                variables: variables,\n                functions: functions\n            };\n    };\n};\n\nvar XQueryWorker = exports.XQueryWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(200);\n    var that = this;\n\n    this.sender.on(\"complete\", function(e){\n        if(that.xqlint) {\n            var pos = { line: e.data.pos.row, col: e.data.pos.column };\n            var proposals = that.xqlint.getCompletions(pos);\n            that.sender.emit(\"complete\", proposals);\n        }\n    });\n\n    this.sender.on(\"setAvailableModuleNamespaces\", function(e){\n        that.availableModuleNamespaces = e.data;\n    });\n\n    this.sender.on(\"setFileName\", function(e){\n        that.fileName = e.data;\n    });\n\n    this.sender.on(\"setModuleResolver\", function(e){\n        that.moduleResolver = getModuleResolverFromModules(e.data);\n    });\n};\n\noop.inherits(XQueryWorker, Mirror);\n\n(function() {\n    \n    this.onUpdate = function() {\n        this.sender.emit(\"start\");\n        var value = this.doc.getValue();\n        var sctx = XQLintLib.createStaticContext();\n        if(this.moduleResolver) {\n            sctx.setModuleResolver(this.moduleResolver);\n        }\n        if(this.availableModuleNamespaces) {\n            sctx.availableModuleNamespaces = this.availableModuleNamespaces;\n        }\n        var opts = {\n            styleCheck: this.styleCheck,\n            staticContext: sctx,\n            fileName: this.fileName\n        };\n        this.xqlint = new XQLint(value, opts);\n        this.sender.emit(\"markers\", this.xqlint.getMarkers());\n    };\n}).call(XQueryWorker.prototype);\n\n});\n\ndefine(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src-min/ace.js",
    "content": "(function(){function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.define.packaged)t.original=i.define,i.define=t,i.define.packaged=!0;if(!i.require||!i.require.packaged)r.original=i.require,i.require=r,i.require.packaged=!0}var ACE_NAMESPACE=\"\",e=function(){return this}();!e&&typeof window!=\"undefined\"&&(e=window);if(!ACE_NAMESPACE&&typeof requirejs!=\"undefined\")return;var t=function(e,n,r){if(typeof e!=\"string\"){t.original?t.original.apply(this,arguments):(console.error(\"dropping module because define wasn't a string.\"),console.trace());return}arguments.length==2&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)};t.modules={},t.payloads={};var n=function(e,t,n){if(typeof t==\"string\"){var i=s(e,t);if(i!=undefined)return n&&n(),i}else if(Object.prototype.toString.call(t)===\"[object Array]\"){var o=[];for(var u=0,a=t.length;u<a;++u){var f=s(e,t[u]);if(f==undefined&&r.original)return;o.push(f)}return n&&n.apply(null,o)||!0}},r=function(e,t){var i=n(\"\",e,t);return i==undefined&&r.original?r.original.apply(this,arguments):i},i=function(e,t){if(t.indexOf(\"!\")!==-1){var n=t.split(\"!\");return i(e,n[0])+\"!\"+i(e,n[1])}if(t.charAt(0)==\".\"){var r=e.split(\"/\").slice(0,-1).join(\"/\");t=r+\"/\"+t;while(t.indexOf(\".\")!==-1&&s!=t){var s=t;t=t.replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return t},s=function(e,r){r=i(e,r);var s=t.modules[r];if(!s){s=t.payloads[r];if(typeof s==\"function\"){var o={},u={id:r,uri:\"\",exports:o,packaged:!0},a=function(e,t){return n(r,e,t)},f=s(a,o,u);o=f||u.exports,t.modules[r]=o,delete t.payloads[r]}s=t.modules[r]=o||s}return s};o(ACE_NAMESPACE)})(),define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function o(e){return(e.global?\"g\":\"\")+(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.extended?\"x\":\"\")+(e.sticky?\"y\":\"\")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,\"\")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,\"\"),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e==\"string\"&&t){!i&&t.length>1&&u(t,\"\")>-1&&(a=RegExp(this.source,r.replace.call(o(this),\"g\",\"\")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}}),define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"],function(e,t,n){\"use strict\";e(\"./regexp\"),e(\"./es5-shim\"),typeof Element!=\"undefined\"&&!Element.prototype.remove&&Object.defineProperty(Element.prototype,\"remove\",{enumerable:!1,writable:!0,configurable:!0,value:function(){this.parentNode&&this.parentNode.removeChild(this)}})}),define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};if(typeof navigator!=\"object\")return;var r=(navigator.platform.match(/mac|win|linux/i)||[\"other\"])[0].toLowerCase(),i=navigator.userAgent;t.isWin=r==\"win\",t.isMac=r==\"mac\",t.isLinux=r==\"linux\",t.isIE=navigator.appName==\"Microsoft Internet Explorer\"||navigator.appName.indexOf(\"MSAppHost\")>=0?parseFloat((i.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=i.match(/ Gecko\\/\\d+/),t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)==\"[object Opera]\",t.isWebKit=parseFloat(i.split(\"WebKit/\")[1])||undefined,t.isChrome=parseFloat(i.split(\" Chrome/\")[1])||undefined,t.isEdge=parseFloat(i.split(\" Edge/\")[1])||undefined,t.isAIR=i.indexOf(\"AdobeAIR\")>=0,t.isIPad=i.indexOf(\"iPad\")>=0,t.isAndroid=i.indexOf(\"Android\")>=0,t.isChromeOS=i.indexOf(\" CrOS \")>=0,t.isIOS=/iPad|iPhone|iPod/.test(i)&&!window.MSStream,t.isIOS&&(t.isMac=!0),t.isMobile=t.isIPad||t.isAndroid}),define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"./useragent\"),i=\"http://www.w3.org/1999/xhtml\";t.buildDom=function o(e,t,n){if(typeof e==\"string\"&&e){var r=document.createTextNode(e);return t&&t.appendChild(r),r}if(!Array.isArray(e))return e;if(typeof e[0]!=\"string\"||!e[0]){var i=[];for(var s=0;s<e.length;s++){var u=o(e[s],t,n);u&&i.push(u)}return i}var a=document.createElement(e[0]),f=e[1],l=1;f&&typeof f==\"object\"&&!Array.isArray(f)&&(l=2);for(var s=l;s<e.length;s++)o(e[s],a,n);return l==2&&Object.keys(f).forEach(function(e){var t=f[e];e===\"class\"?a.className=Array.isArray(t)?t.join(\" \"):t:typeof t==\"function\"||e==\"value\"?a[e]=t:e===\"ref\"?n&&(n[t]=a):t!=null&&a.setAttribute(e,t)}),t&&t.appendChild(a),a},t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName(\"head\")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||i,e):document.createElement(e)},t.removeChildren=function(e){e.innerHTML=\"\"},t.createTextNode=function(e,t){var n=t?t.ownerDocument:document;return n.createTextNode(e)},t.createFragment=function(e){var t=e?e.ownerDocument:document;return t.createDocumentFragment()},t.hasCssClass=function(e,t){var n=(e.className+\"\").split(/\\s+/g);return n.indexOf(t)!==-1},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=\" \"+n)},t.removeCssClass=function(e,t){var n=e.className.split(/\\s+/g);for(;;){var r=n.indexOf(t);if(r==-1)break;n.splice(r,1)}e.className=n.join(\" \")},t.toggleCssClass=function(e,t){var n=e.className.split(/\\s+/g),r=!0;for(;;){var i=n.indexOf(t);if(i==-1)break;r=!1,n.splice(i,1)}return r&&n.push(t),e.className=n.join(\" \"),r},t.setCssClass=function(e,n,r){r?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n=0,r;t=t||document;if(r=t.querySelectorAll(\"style\"))while(n<r.length)if(r[n++].id===e)return!0},t.importCssString=function(n,r,i){var s=i;if(!i||!i.getRootNode)s=document;else{s=i.getRootNode();if(!s||s==i)s=document}var o=s.ownerDocument||s;if(r&&t.hasCssString(r,s))return null;r&&(n+=\"\\n/*# sourceURL=ace/css/\"+r+\" */\");var u=t.createElement(\"style\");u.appendChild(o.createTextNode(n)),r&&(u.id=r),s==o&&(s=t.getDocumentHead(o)),s.insertBefore(u,s.firstChild)},t.importCssStylsheet=function(e,n){t.buildDom([\"link\",{rel:\"stylesheet\",href:e}],t.getDocumentHead(n))},t.scrollbarWidth=function(e){var n=t.createElement(\"ace_inner\");n.style.width=\"100%\",n.style.minWidth=\"0px\",n.style.height=\"200px\",n.style.display=\"block\";var r=t.createElement(\"ace_outer\"),i=r.style;i.position=\"absolute\",i.left=\"-10000px\",i.overflow=\"hidden\",i.width=\"200px\",i.minWidth=\"0px\",i.height=\"150px\",i.display=\"block\",r.appendChild(n);var s=e.documentElement;s.appendChild(r);var o=n.offsetWidth;i.overflow=\"scroll\";var u=n.offsetWidth;return o==u&&(u=r.clientWidth),s.removeChild(r),o-u},typeof document==\"undefined\"&&(t.importCssString=function(){}),t.computedStyle=function(e,t){return window.getComputedStyle(e,\"\")||{}},t.setStyle=function(e,t,n){e[t]!==n&&(e[t]=n)},t.HAS_CSS_ANIMATION=!1,t.HAS_CSS_TRANSFORMS=!1,t.HI_DPI=r.isWin?typeof window!=\"undefined\"&&window.devicePixelRatio>=1.5:!0;if(typeof document!=\"undefined\"){var s=document.createElement(\"div\");t.HI_DPI&&s.style.transform!==undefined&&(t.HAS_CSS_TRANSFORMS=!0),!r.isEdge&&typeof s.style.animationName!=\"undefined\"&&(t.HAS_CSS_ANIMATION=!0),s=null}t.HAS_CSS_TRANSFORMS?t.translate=function(e,t,n){e.style.transform=\"translate(\"+Math.round(t)+\"px, \"+Math.round(n)+\"px)\"}:t.translate=function(e,t,n){e.style.top=Math.round(n)+\"px\",e.style.left=Math.round(t)+\"px\"}}),define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./oop\"),i=function(){var e={MODIFIER_KEYS:{16:\"Shift\",17:\"Ctrl\",18:\"Alt\",224:\"Meta\"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,\"super\":8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",\"-13\":\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:\" \",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",59:\";\",61:\"=\",65:\"a\",66:\"b\",67:\"c\",68:\"d\",69:\"e\",70:\"f\",71:\"g\",72:\"h\",73:\"i\",74:\"j\",75:\"k\",76:\"l\",77:\"m\",78:\"n\",79:\"o\",80:\"p\",81:\"q\",82:\"r\",83:\"s\",84:\"t\",85:\"u\",86:\"v\",87:\"w\",88:\"x\",89:\"y\",90:\"z\",107:\"+\",109:\"-\",110:\".\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",111:\"/\",106:\"*\"}},t,n;for(n in e.FUNCTION_KEYS)t=e.FUNCTION_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);for(n in e.PRINTABLE_KEYS)t=e.PRINTABLE_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);return r.mixin(e,e.MODIFIER_KEYS),r.mixin(e,e.PRINTABLE_KEYS),r.mixin(e,e.FUNCTION_KEYS),e.enter=e[\"return\"],e.escape=e.esc,e.del=e[\"delete\"],e[173]=\"-\",function(){var t=[\"cmd\",\"ctrl\",\"alt\",\"shift\"];for(var n=Math.pow(2,t.length);n--;)e.KEY_MODS[n]=t.filter(function(t){return n&e.KEY_MODS[t]}).join(\"-\")+\"-\"}(),e.KEY_MODS[0]=\"\",e.KEY_MODS[-1]=\"input-\",e}();r.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return typeof t!=\"string\"&&(t=String.fromCharCode(e)),t.toLowerCase()}}),define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function a(e,t,n){var a=u(t);if(!i.isMac&&s){t.getModifierState&&(t.getModifierState(\"OS\")||t.getModifierState(\"Win\"))&&(a|=8);if(s.altGr){if((3&a)==3)return;s.altGr=0}if(n===18||n===17){var f=\"location\"in t?t.location:t.keyLocation;if(n===17&&f===1)s[n]==1&&(o=t.timeStamp);else if(n===18&&a===3&&f===2){var l=t.timeStamp-o;l<50&&(s.altGr=!0)}}}n in r.MODIFIER_KEYS&&(n=-1),a&8&&n>=91&&n<=93&&(n=-1);if(!a&&n===13){var f=\"location\"in t?t.location:t.keyLocation;if(f===3){e(t,a,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&a&8){e(t,a,n);if(t.defaultPrevented)return;a&=-9}return!!a||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,a,n):!1}function f(){s=Object.create(null)}var r=e(\"./keys\"),i=e(\"./useragent\"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent(\"on\"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent(\"on\"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type==\"dblclick\"?0:e.type==\"contextmenu\"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,\"mousemove\",n,!0),t.removeListener(document,\"mouseup\",i,!0),t.removeListener(document,\"dragstart\",i,!0)}return t.addListener(document,\"mousemove\",n,!0),t.addListener(document,\"mouseup\",i,!0),t.addListener(document,\"dragstart\",i,!0),i},t.addTouchMoveListener=function(e,n){var r,i;t.addListener(e,\"touchstart\",function(e){var t=e.touches,n=t[0];r=n.clientX,i=n.clientY}),t.addListener(e,\"touchmove\",function(e){var t=e.touches;if(t.length>1)return;var s=t[0];e.wheelX=r-s.clientX,e.wheelY=i-s.clientY,r=s.clientX,i=s.clientY,n(e)})},t.addMouseWheelListener=function(e,n){\"onmousewheel\"in e?t.addListener(e,\"mousewheel\",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):\"onwheel\"in e?t.addListener(e,\"wheel\",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,\"DOMMouseScroll\",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){function c(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s](\"mousedown\",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}function h(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s](\"mousedown\",e),r[s](l[o],e)}var o=0,u,a,f,l={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};Array.isArray(e)||(e=[e]),e.forEach(function(e){t.addListener(e,\"mousedown\",c),i.isOldIE&&t.addListener(e,\"dblclick\",h)})};var u=!i.isMac||!i.isOpera||\"KeyboardEvent\"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[u(e)]},t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!(\"KeyboardEvent\"in window)){var o=null;r(e,\"keydown\",function(e){o=e.keyCode}),r(e,\"keypress\",function(e){return a(n,e,o)})}else{var u=null;r(e,\"keydown\",function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=a(n,e,e.keyCode);return u=e.defaultPrevented,t}),r(e,\"keypress\",function(e){u&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),u=null)}),r(e,\"keyup\",function(e){s[e.keyCode]=null}),s||(f(),r(window,\"focus\",f))}};if(typeof window==\"object\"&&window.postMessage&&!i.isOldIE){var l=1;t.nextTick=function(e,n){n=n||window;var r=\"zero-timeout-message-\"+l++,i=function(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,\"message\",i),e())};t.addListener(n,\"message\",i),n.postMessage(r,\"*\")}}t.$idleBlocked=!1,t.onIdle=function(e,n){return setTimeout(function r(){t.$idleBlocked?setTimeout(r,100):e()},n)},t.$idleBlockId=null,t.blockIdle=function(e){t.$idleBlockId&&clearTimeout(t.$idleBlockId),t.$idleBlocked=!0,t.$idleBlockId=setTimeout(function(){t.$idleBlocked=!1},e||100)},t.nextFrame=typeof window==\"object\"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"../lib/dom\"),o=e(\"../lib/lang\"),u=i.isChrome<18,a=i.isIE,f=i.isChrome>63,l=400,c=e(\"../lib/keys\"),h=c.KEY_MODS,p=i.isIOS,d=p?/\\s/:/\\n/,v=function(e,t){function W(){x=!0,n.blur(),n.focus(),x=!1}function V(e){e.keyCode==27&&n.value.length<n.selectionStart&&(g||(T=n.value),N=C=-1,A()),X()}function J(){clearTimeout($),$=setTimeout(function(){b&&(n.style.cssText=b,b=\"\"),t.renderer.$keepTextAreaAtCursor==null&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())},0)}function Q(e,t,n){var r=null,i=!1;n.addEventListener(\"keydown\",function(e){r&&clearTimeout(r),i=!0},!0),n.addEventListener(\"keyup\",function(e){r=setTimeout(function(){i=!1},100)},!0);var s=function(e){if(document.activeElement!==n)return;if(i||g)return;if(v)return;var r=n.selectionStart,s=n.selectionEnd,o=null,u=0;console.log(r,s);if(r==0)o=c.up;else if(r==1)o=c.home;else if(s>C&&T[s]==\"\\n\")o=c.end;else if(r<N&&T[r-1]==\" \")o=c.left,u=h.option;else if(r<N||r==N&&C!=N&&r==s)o=c.left;else if(s>C&&T.slice(0,s).split(\"\\n\").length>2)o=c.down;else if(s>C&&T[s-1]==\" \")o=c.right,u=h.option;else if(s>C||s==C&&C!=N&&r==s)o=c.right;r!==s&&(u|=h.shift),o&&(t.onCommandKey(null,u,o),N=r,C=s,A(\"\"))};document.addEventListener(\"selectionchange\",s),t.on(\"destroy\",function(){document.removeEventListener(\"selectionchange\",s)})}var n=s.createElement(\"textarea\");n.className=\"ace_text-input\",n.setAttribute(\"wrap\",\"off\"),n.setAttribute(\"autocorrect\",\"off\"),n.setAttribute(\"autocapitalize\",\"off\"),n.setAttribute(\"spellcheck\",!1),n.style.opacity=\"0\",e.insertBefore(n,e.firstChild);var v=!1,m=!1,g=!1,y=!1,b=\"\",w=!0,E=!1;i.isMobile||(n.style.fontSize=\"1px\");var S=!1,x=!1,T=\"\",N=0,C=0;try{var k=document.activeElement===n}catch(L){}r.addListener(n,\"blur\",function(e){if(x)return;t.onBlur(e),k=!1}),r.addListener(n,\"focus\",function(e){if(x)return;k=!0;if(i.isEdge)try{if(!document.hasFocus())return}catch(e){}t.onFocus(e),i.isEdge?setTimeout(A):A()}),this.$focusScroll=!1,this.focus=function(){if(b||f||this.$focusScroll==\"browser\")return n.focus({preventScroll:!0});var e=n.style.top;n.style.position=\"fixed\",n.style.top=\"0px\";try{var t=n.getBoundingClientRect().top!=0}catch(r){return}var i=[];if(t){var s=n.parentElement;while(s&&s.nodeType==1)i.push(s),s.setAttribute(\"ace_nocontext\",!0),!s.parentElement&&s.getRootNode?s=s.getRootNode().host:s=s.parentElement}n.focus({preventScroll:!0}),t&&i.forEach(function(e){e.removeAttribute(\"ace_nocontext\")}),setTimeout(function(){n.style.position=\"\",n.style.top==\"0px\"&&(n.style.top=e)},0)},this.blur=function(){n.blur()},this.isFocused=function(){return k},t.on(\"beforeEndOperation\",function(){if(t.curOp&&t.curOp.command.name==\"insertstring\")return;g&&(T=n.value=\"\",z()),A()});var A=p?function(e){if(!k||v&&!e)return;e||(e=\"\");var r=\"\\n ab\"+e+\"cde fg\\n\";r!=n.value&&(n.value=T=r);var i=4,s=4+(e.length||(t.selection.isEmpty()?0:1));(N!=i||C!=s)&&n.setSelectionRange(i,s),N=i,C=s}:function(){if(g||y)return;if(!k&&!D)return;g=!0;var e=t.selection,r=e.getRange(),i=e.cursor.row,s=r.start.column,o=r.end.column,u=t.session.getLine(i);if(r.start.row!=i){var a=t.session.getLine(i-1);s=r.start.row<i-1?0:s,o+=a.length+1,u=a+\"\\n\"+u}else if(r.end.row!=i){var f=t.session.getLine(i+1);o=r.end.row>i+1?f.length:o,o+=u.length+1,u=u+\"\\n\"+f}u.length>l&&(s<l&&o<l?u=u.slice(0,l):(u=\"\\n\",s=0,o=1));var c=u+\"\\n\\n\";c!=T&&(n.value=T=c,N=C=c.length),D&&(N=n.selectionStart,C=n.selectionEnd);if(C!=o||N!=s||n.selectionEnd!=C)try{n.setSelectionRange(s,o),N=s,C=o}catch(h){}g=!1};k&&t.onFocus();var O=function(e){return e.selectionStart===0&&e.selectionEnd>=T.length&&e.value===T&&T&&e.selectionEnd!==C},M=function(e){if(g)return;v?v=!1:O(n)&&(t.selectAll(),A())},_=null;this.setInputHandler=function(e){_=e},this.getInputHandler=function(){return _};var D=!1,P=function(e,r){D&&(D=!1);if(m)return A(),e&&t.onPaste(e),m=!1,\"\";var i=n.selectionStart,s=n.selectionEnd,o=N,u=T.length-C,a=e,f=e.length-i,l=e.length-s,c=0;while(o>0&&T[c]==e[c])c++,o--;a=a.slice(c),c=1;while(u>0&&T.length-c>N-1&&T[T.length-c]==e[e.length-c])c++,u--;return f-=c-1,l-=c-1,a=a.slice(0,a.length-c+1),!r&&f==a.length&&!o&&!u&&!l?\"\":(y=!0,a&&!o&&!u&&!f&&!l||S?t.onTextInput(a):t.onTextInput(a,{extendLeft:o,extendRight:u,restoreStart:f,restoreEnd:l}),y=!1,T=e,N=i,C=s,a)},H=function(e){if(g)return U();var t=n.value,r=P(t,!0);(t.length>l+100||d.test(r))&&A()},B=function(e,t,n){var r=e.clipboardData||window.clipboardData;if(!r||u)return;var i=a||n?\"Text\":\"text/plain\";try{return t?r.setData(i,t)!==!1:r.getData(i)}catch(e){if(!n)return B(e,t,!0)}},j=function(e,i){var s=t.getCopyText();if(!s)return r.preventDefault(e);B(e,s)?(p&&(A(s),v=s,setTimeout(function(){v=!1},10)),i?t.onCut():t.onCopy(),r.preventDefault(e)):(v=!0,n.value=s,n.select(),setTimeout(function(){v=!1,A(),i?t.onCut():t.onCopy()}))},F=function(e){j(e,!0)},I=function(e){j(e,!1)},q=function(e){var s=B(e);typeof s==\"string\"?(s&&t.onPaste(s,e),i.isIE&&setTimeout(A),r.preventDefault(e)):(n.value=\"\",m=!0)};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,\"select\",M),r.addListener(n,\"input\",H),r.addListener(n,\"cut\",F),r.addListener(n,\"copy\",I),r.addListener(n,\"paste\",q),(!(\"oncut\"in n)||!(\"oncopy\"in n)||!(\"onpaste\"in n))&&r.addListener(e,\"keydown\",function(e){if(i.isMac&&!e.metaKey||!e.ctrlKey)return;switch(e.keyCode){case 67:I(e);break;case 86:q(e);break;case 88:F(e)}});var R=function(e){if(g||!t.onCompositionStart||t.$readOnly)return;g={};if(S)return;setTimeout(U,0),t.on(\"mousedown\",W);var r=t.getSelectionRange();r.end.row=r.start.row,r.end.column=r.start.column,g.markerRange=r,g.selectionStart=N,t.onCompositionStart(g),g.useTextareaForIME?(n.value=\"\",T=\"\",N=0,C=0):(n.msGetInputContext&&(g.context=n.msGetInputContext()),n.getInputContext&&(g.context=n.getInputContext()))},U=function(){if(!g||!t.onCompositionUpdate||t.$readOnly)return;if(S)return W();if(g.useTextareaForIME)t.onCompositionUpdate(n.value);else{var e=n.value;P(e),g.markerRange&&(g.context&&(g.markerRange.start.column=g.selectionStart=g.context.compositionStartOffset),g.markerRange.end.column=g.markerRange.start.column+C-g.selectionStart)}},z=function(e){if(!t.onCompositionEnd||t.$readOnly)return;g=!1,t.onCompositionEnd(),t.off(\"mousedown\",W),e&&H()},X=o.delayedCall(U,50).schedule.bind(null,null);r.addListener(n,\"compositionstart\",R),r.addListener(n,\"compositionupdate\",U),r.addListener(n,\"keyup\",V),r.addListener(n,\"keydown\",X),r.addListener(n,\"compositionend\",z),this.getElement=function(){return n},this.setCommandMode=function(e){S=e,n.readOnly=!1},this.setReadOnly=function(e){S||(n.readOnly=e)},this.setCopyWithEmptySelection=function(e){E=e},this.onContextMenu=function(e){D=!0,A(),t._emit(\"nativecontextmenu\",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){b||(b=n.style.cssText),n.style.cssText=(o?\"z-index:100000;\":\"\")+(i.isIE?\"opacity:0.1;\":\"\")+\"text-indent: -\"+(N+C)*t.renderer.characterWidth*.5+\"px;\";var u=t.container.getBoundingClientRect(),a=s.computedStyle(t.container),f=u.top+(parseInt(a.borderTopWidth)||0),l=u.left+(parseInt(u.borderLeftWidth)||0),c=u.bottom-f-n.clientHeight-2,h=function(e){n.style.left=e.clientX-l-2+\"px\",n.style.top=Math.min(e.clientY-f-2,c)+\"px\"};h(e);if(e.type!=\"mousedown\")return;t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout($),i.isWin&&r.capture(t.container,h,J)},this.onContextMenuClose=J;var $,K=function(e){t.textInput.onContextMenu(e),J()};r.addListener(n,\"mouseup\",K),r.addListener(n,\"mousedown\",function(e){e.preventDefault(),J()}),r.addListener(t.renderer.scroller,\"contextmenu\",K),r.addListener(n,\"contextmenu\",K),p&&Q(e,t,n)};t.TextInput=v}),define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(e)),t.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(e)),t.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(e)),t.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(e)),t.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(e)),t.setDefaultHandler(\"touchmove\",this.onTouchMove.bind(e));var n=[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"];n.forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,\"getLineRange\"),e.selectByWords=this.extendSelectionBy.bind(e,\"getWordRange\")}function u(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}function a(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row==e.end.row-1&&!e.start.column&&!e.end.column)var n=t.column-4;else var n=2*t.row-e.start.row-e.end.row;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}var r=e(\"../lib/useragent\"),i=0,s=550;(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var i=this.editor,s=e.getButton();if(s!==0){var o=i.getSelectionRange(),u=o.isEmpty();(u||s==1)&&i.selection.moveToPosition(n),s==2&&(i.textInput.onContextMenu(e.domEvent),r.isMozilla||e.preventDefault());return}this.mousedownEvent.time=Date.now();if(t&&!i.isFocused()){i.focus();if(this.$focusTimeout&&!this.$clickSelection&&!i.inMultiSelectMode){this.setState(\"focusWait\"),this.captureMouse(e);return}}return this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;if(!this.mousedownEvent)return;this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle(\"ace_selecting\"),this.setState(\"select\")},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=a(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=a(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle(\"ace_selecting\"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>i||t-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState(\"select\")):(i=n.selection.getWordRange(t.row,t.column),this.setState(\"selectByWords\")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState(\"selectByLines\");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState(\"selectAll\")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,r=e.domEvent.timeStamp,i=r-n.t,o=i?e.wheelX/i:n.vx,u=i?e.wheelY/i:n.vy;i<s&&(o=(o+n.vx)/2,u=(u+n.vy)/2);var a=Math.abs(o/u),f=!1;a>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(f=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(f=!0);if(f)n.allowed=r;else if(r-n.allowed<s){var l=Math.abs(o)<=1.5*Math.abs(n.vx)&&Math.abs(u)<=1.5*Math.abs(n.vy);l?(f=!0,n.allowed=r):n.allowed=0}n.t=r,n.vx=o,n.vy=u;if(f)return t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()},this.onTouchMove=function(e){this.editor._emit(\"mousewheel\",e)}}).call(o.prototype),t.DefaultHandlers=o}),define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\");(function(){this.$init=function(){return this.$element=i.createElement(\"div\"),this.$element.className=\"ace_tooltip\",this.$element.style.display=\"none\",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){this.getElement().textContent=e},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+\"px\",this.getElement().style.top=t+\"px\"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){e!=null&&this.setText(e),t!=null&&n!=null&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display=\"block\",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display=\"none\",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(s.prototype),t.Tooltip=s}),define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],function(e,t,n){\"use strict\";function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annotations[r];if(!s)return c();var o=t.session.getLength();if(r==o){var a=t.renderer.pixelToScreenCoordinates(0,u.y).row,l=u.$pos;if(a>t.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join(\"<br/>\"),i.setHtml(f),i.show(),t._signal(\"showGutterTooltip\",i),t.on(\"mousewheel\",c);if(e.$tooltipFollowsMouse)h(u);else{var p=u.domEvent.target,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+\"px\",v.top=d.bottom+\"px\"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t._signal(\"hideGutterTooltip\",i),t.removeEventListener(\"mousewheel\",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler(\"guttermousedown\",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i==\"foldWidgets\")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState(\"selectByLines\"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler(\"guttermousemove\",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,\"ace_fold-widget\"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,\"mouseout\",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on(\"changeSession\",c)}function a(e){o.call(this,e)}var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/event\"),o=e(\"../tooltip\").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.moveCursorToPosition(e),S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left<a.x.right?-3:2),l/i<=1&&(c.row+=a.y.top<a.y.bottom?-1:1);var h=e.row!=c.row,v=e.column!=c.column,m=!n||e.row!=n.row;h||v&&!m?E?r-E>=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,\"ace_selection\",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,\"mousemove\",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.selection.fromOrientedRange(m),t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,\"mousemove\",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e==\"text/plain\"||e==\"Text\"})}function _(e){var t=[\"copy\",\"copymove\",\"all\",\"uninitialized\"],n=[\"move\",\"copymove\",\"linkmove\",\"all\",\"uninitialized\"],r=s.isMac?e.altKey:e.ctrlKey,i=\"uninitialized\";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o=\"none\";return r&&t.indexOf(i)>=0?o=\"copy\":n.indexOf(i)>=0?o=\"move\":t.indexOf(i)>=0&&(o=\"copy\"),o}var t=e.editor,n=r.createElement(\"img\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",s.isOpera&&(n.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\");var f=[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener(\"mousedown\",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?\"copy\":\"copyMove\",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData(\"Text\",t.session.getTextRange()),w=!0,this.setState(\"drag\")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n==\"move\"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case\"move\":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case\"copy\":m=t.moveText(m,g,!0)}else{var r=n.getData(\"Text\");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,\"dragstart\",this.onDragStart.bind(e)),i.addListener(c,\"dragend\",this.onDragEnd.bind(e)),i.addListener(c,\"dragenter\",this.onDragEnter.bind(e)),i.addListener(c,\"dragover\",this.onDragOver.bind(e)),i.addListener(c,\"dragleave\",this.onDragLeave.bind(e)),i.addListener(c,\"drop\",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e(\"../lib/dom\"),i=e(\"../lib/event\"),s=e(\"../lib/useragent\"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle(\"ace_dragging\");var n=s.isWin?\"default\":\"move\";e.renderer.setCursorStyle(n),this.setState(\"dragReady\")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state==\"dragReady\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state===\"dragWait\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;\"unselectable\"in o&&(o.unselectable=\"on\");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState(\"dragWait\")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"./dom\");t.get=function(e,t){var n=new XMLHttpRequest;n.open(\"GET\",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement(\"script\");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState==\"loaded\"||i.readyState==\"complete\")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement(\"a\");return t.href=e,t.href}}),define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"no use strict\";function o(e){typeof console!=\"undefined\"&&console.warn&&console.warn.apply(console,arguments)}function u(e,t){var n=new Error(e);n.data=t,typeof console==\"object\"&&console.error&&console.error(n),setTimeout(function(){throw n})}var r=e(\"./oop\"),i=e(\"./event_emitter\").EventEmitter,s={setOptions:function(e){Object.keys(e).forEach(function(t){this.setOption(t,e[t])},this)},getOptions:function(e){var t={};if(!e){var n=this.$options;e=Object.keys(n).filter(function(e){return!n[e].hidden})}else Array.isArray(e)||(t=e,e=Object.keys(t));return e.forEach(function(e){t[e]=this.getOption(e)},this),t},setOption:function(e,t){if(this[\"$\"+e]===t)return;var n=this.$options[e];if(!n)return o('misspelled option \"'+e+'\"');if(n.forwardTo)return this[n.forwardTo]&&this[n.forwardTo].setOption(e,t);n.handlesSet||(this[\"$\"+e]=t),n&&n.set&&n.set.call(this,t)},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this[\"$\"+e]:o('misspelled option \"'+e+'\"')}},a=function(){this.$defaultOptions={}};(function(){r.implement(this,i),this.defineOptions=function(e,t,n){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(n).forEach(function(t){var r=n[t];typeof r==\"string\"&&(r={forwardTo:r}),r.name||(r.name=t),e.$options[r.name]=r,\"initialValue\"in r&&(e[\"$\"+r.name]=r.initialValue)}),r.implement(e,s),this},this.resetOptions=function(e){Object.keys(e.$options).forEach(function(t){var n=e.$options[t];\"value\"in n&&e.setOption(t,n.value)})},this.setDefaultValue=function(e,t,n){var r=this.$defaultOptions[e]||(this.$defaultOptions[e]={});r[t]&&(r.forwardTo?this.setDefaultValue(r.forwardTo,t,n):r[t].value=n)},this.setDefaultValues=function(e,t){Object.keys(t).forEach(function(n){this.setDefaultValue(e,n,t[n])},this)},this.warn=o,this.reportError=u}).call(a.prototype),t.AppConfig=a}),define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"],function(e,t,n){\"no use strict\";function l(r){if(!u||!u.document)return;a.packaged=r||e.packaged||n.packaged||u.define&&define.packaged;var i={},s=\"\",o=document.currentScript||document._currentScript,f=o&&o.ownerDocument||document,l=f.getElementsByTagName(\"script\");for(var h=0;h<l.length;h++){var p=l[h],d=p.src||p.getAttribute(\"src\");if(!d)continue;var v=p.attributes;for(var m=0,g=v.length;m<g;m++){var y=v[m];y.name.indexOf(\"data-ace-\")===0&&(i[c(y.name.replace(/^data-ace-/,\"\"))]=y.value)}var b=d.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);b&&(s=b[1])}s&&(i.base=i.base||s,i.packaged=!0),i.basePath=i.base,i.workerPath=i.workerPath||i.base,i.modePath=i.modePath||i.base,i.themePath=i.themePath||i.base,delete i.base;for(var w in i)typeof i[w]!=\"undefined\"&&t.set(w,i[w])}function c(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCase()})}var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./lib/net\"),o=e(\"./lib/app_config\").AppConfig;n.exports=t=new o;var u=function(){return this||typeof window!=\"undefined\"&&window}(),a={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:\"\",suffix:\".js\",$moduleUrls:{},loadWorkerFromBlob:!0};t.get=function(e){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);return a[e]},t.set=function(e,t){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);a[e]=t},t.all=function(){return r.copyObject(a)},t.$modes={},t.moduleUrl=function(e,t){if(a.$moduleUrls[e])return a.$moduleUrls[e];var n=e.split(\"/\");t=t||n[n.length-2]||\"\";var r=t==\"snippets\"?\"/\":\"-\",i=n[n.length-1];if(t==\"worker\"&&r==\"-\"){var s=new RegExp(\"^\"+t+\"[\\\\-_]|[\\\\-_]\"+t+\"$\",\"g\");i=i.replace(s,\"\")}(!i||i==t)&&n.length>1&&(i=n[n.length-2]);var o=a[t+\"Path\"];return o==null?o=a.basePath:r==\"/\"&&(t=r=\"\"),o&&o.slice(-1)!=\"/\"&&(o+=\"/\"),o+t+r+i+this.get(\"suffix\")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit(\"load.module\",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get(\"packaged\"))return a();s.loadScript(t.moduleUrl(n,o),a),f()};var f=function(){!a.basePath&&!a.workerPath&&!a.modePath&&!a.themePath&&!Object.keys(a.$moduleUrls).length&&(console.error(\"Unable to infer path to ace from script src,\",\"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\"or with webpack use ace/webpack-resolver\"),f=function(){})};t.init=l}),define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"./default_handlers\").DefaultHandlers,o=e(\"./default_gutter_handler\").GutterHandler,u=e(\"./mouse_event\").MouseEvent,a=e(\"./dragdrop_handler\").DragdropHandler,f=e(\"../config\"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,\"click\",this.onMouseEvent.bind(this,\"click\")),r.addListener(u,\"mousemove\",this.onMouseMove.bind(this,\"mousemove\")),r.addMultiMouseDownListener([u,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,\"onMouseEvent\"),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,\"mousewheel\")),r.addTouchMoveListener(e.container,this.onTouchMove.bind(this,\"touchmove\"));var f=e.renderer.$gutter;r.addListener(f,\"mousedown\",this.onMouseEvent.bind(this,\"guttermousedown\")),r.addListener(f,\"click\",this.onMouseEvent.bind(this,\"gutterclick\")),r.addListener(f,\"dblclick\",this.onMouseEvent.bind(this,\"gutterdblclick\")),r.addListener(f,\"mousemove\",this.onMouseEvent.bind(this,\"guttermousemove\")),r.addListener(u,\"mousedown\",n),r.addListener(f,\"mousedown\",n),i.isIE&&e.renderer.scrollBarV&&(r.addListener(e.renderer.scrollBarV.element,\"mousedown\",n),r.addListener(e.renderer.scrollBarH.element,\"mousedown\",n)),e.on(\"mousemove\",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle(\"default\"):s.setCursorStyle(\"\")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new u(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor,s=this.editor.renderer;s.$keepTextAreaAtCursor&&(s.$keepTextAreaAtCursor=null);var o=this,a=function(e){if(!e)return;if(i.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new u(e,o.editor),o.$mouseMoved=!0},f=function(e){n.off(\"beforeEndOperation\",c),clearInterval(h),l(),o[o.state+\"End\"]&&o[o.state+\"End\"](e),o.state=\"\",s.$keepTextAreaAtCursor==null&&(s.$keepTextAreaAtCursor=!0,s.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent(\"mouseup\",e),n.endOperation()},l=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type==\"dblclick\")return setTimeout(function(){f(e)});var c=function(e){if(!o.releaseMouse)return;n.curOp.command.name&&n.curOp.selectionChanged&&(o[o.state+\"End\"]&&o[o.state+\"End\"](),o.state=\"\",o.releaseMouse())};n.on(\"beforeEndOperation\",c),n.startOperation({command:{name:\"mouse\"}}),o.$onCaptureMouseMove=a,o.releaseMouse=r.capture(this.editor.container,a,f);var h=setInterval(l,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!=\"contextmenu\")return;this.editor.off(\"nativecontextmenu\",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on(\"nativecontextmenu\",e)}}).call(l.prototype),f.defineOptions(l.prototype,\"mouseHandler\",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimeout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function i(e){e.on(\"click\",function(t){var n=t.getDocumentPosition(),i=e.session,s=i.getFoldAt(n.row,n.column,1);s&&(t.getAccelKey()?i.removeFold(s):i.expandFold(s),t.stop());var o=t.domEvent&&t.domEvent.target;o&&r.hasCssClass(o,\"ace_inline_button\")&&r.hasCssClass(o,\"ace_toggle_wrap\")&&(i.setOption(\"wrap\",!0),e.renderer.scrollCursorIntoView())}),e.on(\"gutterclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on(\"gutterdblclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold(\"...\",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}var r=e(\"../lib/dom\");t.FoldHandler=i}),define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"../lib/keys\"),i=e(\"../lib/event\"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e==\"function\"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||\"\"}).filter(Boolean).join(\" \")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command==\"null\"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return!o&&e==-1&&(s={command:\"insertstring\"},o=u.exec(\"insertstring\",this.$editor,t)),o&&this.$editor._signal&&this.$editor._signal(\"keyboardActivity\",s),o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(s.prototype),t.KeyBinding=s}),define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function F(e,t,n,r){var i=s?d:p,c=null,h=null,v=null,m=0,g=null,y=null,b=-1,w=null,E=null,T=[];if(!r)for(w=0,r=[];w<n;w++)r[w]=R(e[w]);o=s,u=!1,a=!1,f=!1,l=!1;for(E=0;E<n;E++){c=m,T[E]=h=q(e,r,T,E),m=i[c][h],g=m&240,m&=15,t[E]=v=i[m][5];if(g>0)if(g==16){for(w=b;w<E;w++)t[w]=1;b=-1}else b=-1;y=i[m][6];if(y)b==-1&&(b=E);else if(b>-1){for(w=b;w<E;w++)t[w]=v;b=-1}r[E]==S&&(t[E]=0),o|=v}if(l)for(w=0;w<n;w++)if(r[w]==x){t[w]=s;for(var C=w-1;C>=0;C--){if(r[C]!=N)break;t[C]=s}}}function I(e,t,n){if(o<e)return;if(e==1&&s==m&&!f){n.reverse();return}var r=n.length,i=0,u,a,l,c;while(i<r){if(t[i]>=e){u=i+1;while(u<r&&t[u]>=e)u++;for(a=i,l=u-1;a<l;a++,l--)c=n[a],n[a]=n[l],n[l]=c;i=u}i++}}function q(e,t,n,r){var i=t[r],o,c,h,p;switch(i){case g:case y:u=!1;case E:case w:return i;case b:return u?w:b;case T:return u=!0,a=!0,y;case N:return E;case C:if(r<1||r+1>=t.length||(o=n[r-1])!=b&&o!=w||(c=t[r+1])!=b&&c!=w)return E;return u&&(c=w),c==o?c:E;case k:o=r>0?n[r-1]:S;if(o==b&&r+1<t.length&&t[r+1]==b)return b;return E;case L:if(r>0&&n[r-1]==b)return b;if(u)return E;p=r+1,h=t.length;while(p<h&&t[p]==L)p++;if(p<h&&t[p]==b)return b;return E;case A:h=t.length,p=r+1;while(p<h&&t[p]==A)p++;if(p<h){var d=e[r],v=d>=1425&&d<=2303||d==64286;o=t[p];if(v&&(o==y||o==T))return y}if(r<1||(o=t[r-1])==S)return E;return n[r-1];case S:return u=!1,f=!0,s;case x:return l=!0,E;case O:case M:case D:case P:case _:u=!1;case H:return E}}function R(e){var t=e.charCodeAt(0),n=t>>8;return n==0?t>191?g:B[t]:n==5?/[\\u0591-\\u05f4]/.test(e)?y:g:n==6?/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(e)?A:/[\\u0660-\\u0669\\u066b-\\u066c]/.test(e)?w:t==1642?L:/[\\u06f0-\\u06f9]/.test(e)?b:T:n==32&&t<=8287?j[t&255]:n==254?t>=65136?T:E:E}function U(e){return e>=\"\\u064b\"&&e<=\"\\u0655\"}var r=[\"\\u0621\",\"\\u0641\"],i=[\"\\u063a\",\"\\u064a\"],s=0,o=0,u=!1,a=!1,f=!1,l=!1,c=!1,h=!1,p=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],d=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],v=0,m=1,g=0,y=1,b=2,w=3,E=4,S=5,x=6,T=7,N=8,C=9,k=10,L=11,A=12,O=13,M=14,_=15,D=16,P=17,H=18,B=[H,H,H,H,H,H,H,H,H,x,S,x,N,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,S,S,S,x,N,E,E,L,L,L,E,E,E,E,E,k,C,k,C,C,b,b,b,b,b,b,b,b,b,b,C,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,H,H,H,H,H,H,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,C,E,L,L,L,L,E,E,E,E,g,E,E,H,E,E,L,L,b,b,E,g,E,E,E,b,g,E,E,E,E,E],j=[N,N,N,N,N,N,N,N,N,N,N,H,H,H,g,y,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,N,S,O,M,_,D,P,C,L,L,L,L,L,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,C,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,N];t.L=g,t.R=y,t.EN=b,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.RLE=7,t.DOT=\"\\u00b7\",t.doBidiReorder=function(e,n,r){if(e.length<2)return{};var i=e.split(\"\"),o=new Array(i.length),u=new Array(i.length),a=[];s=r?m:v,F(i,a,i.length,n);for(var f=0;f<o.length;o[f]=f,f++);I(2,a,o),I(1,a,o);for(var f=0;f<o.length-1;f++)n[f]===w?a[f]=t.AN:a[f]===y&&(n[f]>T&&n[f]<O||n[f]===E||n[f]===H)?a[f]=t.ON_R:f>0&&i[f-1]===\"\\u0644\"&&/\\u0622|\\u0623|\\u0625|\\u0627/.test(i[f])&&(a[f-1]=a[f]=t.R_H,f++);i[i.length-1]===t.DOT&&(a[i.length-1]=t.B),i[0]===\"\\u202b\"&&(a[0]=t.RLE);for(var f=0;f<o.length;f++)u[f]=a[o[f]];return{logicalFromVisual:o,bidiLevels:u}},t.hasBidiCharacters=function(e,t){var n=!1;for(var r=0;r<e.length;r++)t[r]=R(e.charAt(r)),!n&&(t[r]==y||t[r]==T||t[r]==w)&&(n=!0);return n},t.getVisualFromLogicalIdx=function(e,t){for(var n=0;n<t.logicalFromVisual.length;n++)if(t.logicalFromVisual[n]==e)return n;return 0}}),define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"./lib/bidiutil\"),i=e(\"./lib/lang\"),s=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/,o=function(e){this.session=e,this.bidiMap={},this.currentRow=null,this.bidiUtil=r,this.charWidths=[],this.EOL=\"\\u00ac\",this.showInvisibles=!0,this.isRtlDir=!1,this.$isRtl=!1,this.line=\"\",this.wrapIndent=0,this.EOF=\"\\u00b6\",this.RLE=\"\\u202b\",this.contentWidth=0,this.fontMetrics=null,this.rtlLineOffset=0,this.wrapOffset=0,this.isMoveLeftOperation=!1,this.seenBidi=s.test(e.getValue())};(function(){this.isBidiRow=function(e,t,n){return this.seenBidi?(e!==this.currentRow&&(this.currentRow=e,this.updateRowLine(t,n),this.updateBidiMap()),this.bidiMap.bidiLevels):!1},this.onChange=function(e){this.seenBidi?this.currentRow=null:e.action==\"insert\"&&s.test(e.lines.join(\"\\n\"))&&(this.seenBidi=!0,this.currentRow=null)},this.getDocumentRow=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n=this.session.$getRowCacheIndex(t,this.currentRow);n>=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n,r=this.session.$getRowCacheIndex(t,this.currentRow);while(this.currentRow-e>0){n=this.session.$getRowCacheIndex(t,this.currentRow-e-1);if(n!==r)break;r=n,e++}}else e=this.currentRow;return e},this.updateRowLine=function(e,t){e===undefined&&(e=this.getDocumentRow());var n=e===this.session.getLength()-1,s=n?this.EOF:this.EOL;this.wrapIndent=0,this.line=this.session.getLine(e),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE;if(this.session.$useWrapMode){var o=this.session.$wrapData[e];o&&(t===undefined&&(t=this.getSplitIndex()),t>0&&o.length?(this.wrapIndent=o.indent,this.wrapOffset=this.wrapIndent*this.charWidths[r.L],this.line=t<o.length?this.line.substring(o[t-1],o[t]):this.line.substring(o[o.length-1])):this.line=this.line.substring(0,o[t])),t==o.length&&(this.line+=this.showInvisibles?s:r.DOT)}else this.line+=this.showInvisibles?s:r.DOT;var u=this.session,a=0,f;this.line=this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g,function(e,t){return e===\"\t\"||u.isFullWidth(e.charCodeAt(0))?(f=e===\"\t\"?u.getScreenTabSize(t+a):2,a+=f-1,i.stringRepeat(r.DOT,f)):e}),this.isRtlDir&&(this.fontMetrics.$main.textContent=this.line.charAt(this.line.length-1)==r.DOT?this.line.substr(0,this.line.length-1):this.line,this.rtlLineOffset=this.contentWidth-this.fontMetrics.$main.getBoundingClientRect().width)},this.updateBidiMap=function(){var e=[];r.hasBidiCharacters(this.line,e)||this.isRtlDir?this.bidiMap=r.doBidiReorder(this.line,e,this.isRtlDir):this.bidiMap={}},this.markAsDirty=function(){this.currentRow=null},this.updateCharacterWidths=function(e){if(this.characterWidth===e.$characterSize.width)return;this.fontMetrics=e;var t=this.characterWidth=e.$characterSize.width,n=e.$measureCharWidth(\"\\u05d4\");this.charWidths[r.L]=this.charWidths[r.EN]=this.charWidths[r.ON_R]=t,this.charWidths[r.R]=this.charWidths[r.AN]=n,this.charWidths[r.R_H]=n*.45,this.charWidths[r.B]=this.charWidths[r.RLE]=0,this.currentRow=null},this.setShowInvisibles=function(e){this.showInvisibles=e,this.currentRow=null},this.setEolChar=function(e){this.EOL=e},this.setContentWidth=function(e){this.contentWidth=e},this.isRtlLine=function(e){return this.$isRtl?!0:e!=undefined?this.session.getLine(e).charAt(0)==this.RLE:this.isRtlDir},this.setRtlDirection=function(e,t){var n=e.getCursorPosition();for(var r=e.selection.getSelectionAnchor().row;r<=n.row;r++)!t&&e.session.getLine(r).charAt(0)===e.session.$bidiHandler.RLE?e.session.doc.removeInLine(r,0,1):t&&e.session.getLine(r).charAt(0)!==e.session.$bidiHandler.RLE&&e.session.doc.insert({column:0,row:r},e.session.$bidiHandler.RLE)},this.getPosLeft=function(e){e-=this.wrapIndent;var t=this.line.charAt(0)===this.RLE?1:0,n=e>t?this.session.getOverwrite()?e:e-1:t,i=r.getVisualFromLogicalIdx(n,this.bidiMap),s=this.bidiMap.bidiLevels,o=0;!this.session.getOverwrite()&&e<=t&&s[i]%2!==0&&i++;for(var u=0;u<i;u++)o+=this.charWidths[s[u]];return!this.session.getOverwrite()&&e>t&&s[i]%2===0&&(o+=this.charWidths[s[i]]),this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(o+=this.rtlLineOffset),o},this.getSelections=function(e,t){var n=this.bidiMap,r=n.bidiLevels,i,s=[],o=0,u=Math.min(e,t)-this.wrapIndent,a=Math.max(e,t)-this.wrapIndent,f=!1,l=!1,c=0;this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var h,p=0;p<r.length;p++)h=n.logicalFromVisual[p],i=r[p],f=h>=u&&h<a,f&&!l?c=o:!f&&l&&s.push({left:c,width:o-c}),o+=this.charWidths[i],l=f;f&&p===r.length&&s.push({left:c,width:o-c});if(this.isRtlDir)for(var d=0;d<s.length;d++)s[d].left+=this.rtlLineOffset;return s},this.offsetToCol=function(e){this.isRtlDir&&(e-=this.rtlLineOffset);var t=0,e=Math.max(e,0),n=0,r=0,i=this.bidiMap.bidiLevels,s=this.charWidths[i[r]];this.wrapIndent&&(e-=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);while(e>n+s/2){n+=s;if(r===i.length-1){s=0;break}s=this.charWidths[i[++r]]}return r>0&&i[r-1]%2!==0&&i[r]%2===0?(e<n&&r--,t=this.bidiMap.logicalFromVisual[r]):r>0&&i[r-1]%2===0&&i[r]%2!==0?t=1+(e>n?this.bidiMap.logicalFromVisual[r]:this.bidiMap.logicalFromVisual[r-1]):this.isRtlDir&&r===i.length-1&&s===0&&i[r-1]%2===0||!this.isRtlDir&&r===0&&i[r]%2!==0?t=1+this.bidiMap.logicalFromVisual[r]:(r>0&&i[r-1]%2!==0&&s!==0&&r--,t=this.bidiMap.logicalFromVisual[r]),t===0&&this.isRtlDir&&t++,t+this.wrapIndent}}).call(o.prototype),t.BidiHandler=o}),define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var t=this;this.cursor.on(\"change\",function(e){t.$cursorChanged=!0,t.$silent||t._emit(\"changeCursor\"),!t.$isEmpty&&!t.$silent&&t._emit(\"changeSelection\"),!t.$keepDesiredColumnOnChange&&e.old.column!=e.value.column&&(t.$desiredColumn=null)}),this.anchor.on(\"change\",function(){t.$anchorChanged=!0,!t.$isEmpty&&!t.$silent&&t._emit(\"changeSelection\")})};(function(){r.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.$isEmpty=!1,this.anchor.setPosition(e,t)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit(\"changeSelection\"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var n=t?e.end:e.start,r=t?e.start:e.end;this.$setSelection(n.row,n.column,r.row,r.column)},this.$setSelection=function(e,t,n,r){var i=this.$isEmpty,s=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(n,r),this.$isEmpty=!o.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit(\"changeCursor\"),(this.$cursorChanged||this.$anchorChanged||i!=this.$isEmpty||s)&&this._emit(\"changeSelection\")},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t==\"undefined\"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e==\"number\"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var r=e.column,i=e.column+t;return n<0&&(r=e.column-t,i=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(r,i).split(\" \").length-1==t},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(e,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var n=this.session.getTabSize(),e=this.lead;this.wouldMoveIntoSoftTab(e,n,1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,n):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,n=this.session.documentToScreenRow(e,t),r=this.session.screenToDocumentPosition(n,0),i=this.session.getDisplayLine(e,null,r.row,r.column),s=i.match(/^\\s*/);s[0].length!=t&&!this.session.$useEmacsStyleLineStart&&(r.column+=s[0].length),this.moveCursorToPosition(r)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var n=this.session.getLine(t.row);if(t.column==n.length){var r=n.search(/\\s+$/);r>0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var i=this.session.getFoldAt(e,t,1);if(i){this.moveCursorTo(i.end.row,i.end.column);return}this.session.nonTokenRe.exec(r)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t));if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e<this.doc.getLength()-1&&this.moveCursorWordRight();return}this.session.tokenRe.exec(r)&&(t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)},this.moveCursorLongWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1)){this.moveCursorTo(n.start.row,n.start.column);return}var r=this.session.getFoldStringAt(e,t,-1);r==null&&(r=this.doc.getLine(e).substring(0,t));var s=i.stringReverse(r);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0,this.session.nonTokenRe.exec(s)&&(t-=this.session.nonTokenRe.lastIndex,s=s.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0);if(t<=0){this.moveCursorTo(e,0),this.moveCursorLeft(),e>0&&this.moveCursorWordLeft();return}this.session.tokenRe.exec(s)&&(t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t=0,n,r=/\\s/,i=this.session.tokenRe;i.lastIndex=0;if(this.session.tokenRe.exec(e))t=this.session.tokenRe.lastIndex;else{while((n=e[t])&&r.test(n))t++;if(t<1){i.lastIndex=0;while((n=e[t])&&!i.test(n)){i.lastIndex=0,t++;if(r.test(n)){if(t>2){t--;break}while((n=e[t])&&r.test(n))t++;if(t>2)break}}}}return i.lastIndex=0,t},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e<s&&/^\\s*$/.test(r));/^\\s+/.test(r)||(r=\"\"),t=0}var o=this.$shortWordEndIndex(r);this.moveCursorTo(e,t+o)},this.moveCursorShortWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1))return this.moveCursorTo(n.start.row,n.start.column);var r=this.session.getLine(e).substring(0,t);if(t===0){do e--,r=this.doc.getLine(e);while(e>0&&/^\\s*$/.test(r));t=r.length,/\\s+$/.test(r)||(r=\"\")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column),r;t===0&&(e!==0&&(this.session.$bidiHandler.isBidiRow(n.row,this.lead.row)?(r=this.session.$bidiHandler.getPosLeft(n.column),n.column=Math.round(r/this.session.$bidiHandler.charWidths[0])):r=n.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var i=this.session.screenToDocumentPosition(n.row+e,n.column,r);e!==0&&t===0&&i.row===this.lead.row&&i.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[i.row]&&(i.row>0||e>0)&&i.row++,this.moveCursorTo(i.row,i.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0;var i=this.session.getLine(e);/[\\uDC00-\\uDFFF]/.test(i.charAt(t))&&i.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"./config\"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:\"text\"},o=\"g\",u=[];for(var a=0;a<n.length;a++){var f=n[a];f.defaultToken&&(s.defaultToken=f.defaultToken),f.caseInsensitive&&(o=\"gi\");if(f.regex==null)continue;f.regex instanceof RegExp&&(f.regex=f.regex.toString().slice(1,-1));var l=f.regex,c=(new RegExp(\"(?:(\"+l+\")|(.))\")).exec(\"a\").length-2;Array.isArray(f.token)?f.token.length==1||c==1?f.token=f.token[0]:c-1!=f.token.length?(this.reportError(\"number of classes and regexp groups doesn't match\",{rule:f,groupCount:c-1}),f.token=f.token[0]):(f.tokenArray=f.token,f.token=null,f.onMatch=this.$arrayTokens):typeof f.token==\"function\"&&!f.onMatch&&(c>1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\\\\d/.test(f.regex)?l=f.regex.replace(/\\\\([0-9]+)/g,function(e,t){return\"\\\\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!=\"string\"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push(\"$\")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp(\"(\"+r.join(\")|(\")+\")|($)\",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n==\"string\")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;i<s;i++)t[i]&&(r[r.length]={type:n[i],value:t[i]});return r},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return\"text\";var n=[],r=this.tokenArray;for(var i=0,s=r.length;i<s;i++)t[i+1]&&(n[n.length]={type:r[i],value:t[i+1]});return n},this.removeCapturingGroups=function(e){var t=e.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!]|(\\()/g,function(e,t){return t?\"(?:\":e});return t},this.createSplitterRegexp=function(e,t){if(e.indexOf(\"(?=\")!=-1){var n=0,r=!1,i={};e.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g,function(e,t,s,o,u,a){return r?r=u!=\"]\":u?r=!0:o?(n==i.stack&&(i.end=a+1,i.stack=-1),n--):s&&(n++,s.length!=1&&(i.stack=n,i.start=a)),e}),i.end!=null&&/^\\)*$/.test(e.substr(i.end))&&(e=e.substring(0,i.start)+e.substr(i.end))}return e.charAt(0)!=\"^\"&&(e=\"^\"+e),e.charAt(e.length-1)!=\"$\"&&(e+=\"$\"),new RegExp(e,(t||\"\").replace(\"g\",\"\"))},this.getLineTokens=function(e,t){if(t&&typeof t!=\"string\"){var n=t.slice(0);t=n[0],t===\"#tmp\"&&(n.shift(),t=n.shift())}else var n=[];var r=t||\"start\",s=this.states[r];s||(r=\"start\",s=this.states[r]);var o=this.matchMappings[r],u=this.regExps[r];u.lastIndex=0;var a,f=[],l=0,c=0,h={type:null,value:\"\"};while(a=u.exec(e)){var p=o.defaultToken,d=null,v=a[0],m=u.lastIndex;if(m-v.length>l){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;y<a.length-2;y++){if(a[y+1]===undefined)continue;d=s[o[y]],d.onMatch?p=d.onMatch(v,r,n,e):p=d.token,d.next&&(typeof d.next==\"string\"?r=d.next:r=d.next(r,n),s=this.states[r],s||(this.reportError(\"state doesn't exist\",r),r=\"start\",s=this.states[r]),o=this.matchMappings[r],l=m,u=this.regExps[r],u.lastIndex=m),d.consumeLineEnd&&(l=m);break}if(v)if(typeof p==\"string\")!!d&&d.merge===!1||h.type!==p?(h.type&&f.push(h),h={type:p,value:v}):h.value+=v;else if(p){h.type&&f.push(h),h={type:null,value:\"\"};for(var y=0;y<p.length;y++)f.push(p[y])}if(l==e.length)break;l=m;if(c++>i){c>2*e.length&&this.reportError(\"infinite loop with in ace tokenizer\",{startState:t,line:e});while(l<e.length)h.type&&f.push(h),h={value:e.substring(l,l+=2e3),type:\"overflow\"};r=\"start\",n=[];break}}return h.type&&f.push(h),n.length>1&&n[0]!==r&&n.unshift(\"#tmp\",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=function(){this.$rules={start:[{token:\"empty_line\",regex:\"^$\"},{defaultToken:\"text\"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i<r.length;i++){var s=r[i];if(s.next||s.onMatch)typeof s.next==\"string\"&&s.next.indexOf(t)!==0&&(s.next=t+s.next),s.nextState&&s.nextState.indexOf(t)!==0&&(s.nextState=t+s.nextState)}this.$rules[t+n]=r}},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,n,i,s){var o=typeof e==\"function\"?(new e).getRules():e;if(i)for(var u=0;u<i.length;u++)i[u]=t+i[u];else{i=[];for(var a in o)i.push(t+a)}this.addRules(o,t);if(n){var f=Array.prototype[s?\"push\":\"unshift\"];for(var u=0;u<i.length;u++)f.apply(this.$rules[i[u]],r.deepCopy(n))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds};var e=function(e,t){return(e!=\"start\"||t.length)&&t.unshift(this.nextState,e),this.nextState},t=function(e,t){return t.shift(),t.shift()||\"start\"};this.normalizeRules=function(){function i(s){var o=r[s];o.processed=!0;for(var u=0;u<o.length;u++){var a=o[u],f=null;Array.isArray(a)&&(f=a,a={}),!a.regex&&a.start&&(a.regex=a.start,a.next||(a.next=[]),a.next.push({defaultToken:a.token},{token:a.token+\".end\",regex:a.end||a.start,next:\"pop\"}),a.token=a.token+\".start\",a.push=!0);var l=a.next||a.push;if(l&&Array.isArray(l)){var c=a.stateName;c||(c=a.token,typeof c!=\"string\"&&(c=c[0]||\"\"),r[c]&&(c+=n++)),r[c]=l,a.next=c,i(c)}else l==\"pop\"&&(a.next=t);a.push&&(a.nextState=a.next||a.push,a.next=e,delete a.push);if(a.rules)for(var h in a.rules)r[h]?r[h].push&&r[h].push.apply(r[h],a.rules[h]):r[h]=a.rules[h];var p=typeof a==\"string\"?a:a.include;p&&(Array.isArray(p)?f=p.map(function(e){return r[e]}):f=r[p]);if(f){var d=[u,1].concat(f);a.noEscape&&(d=d.filter(function(e){return!e.next})),o.splice.apply(o,d),u--}a.keywordMap&&(a.token=this.createKeywordMapper(a.keywordMap,a.defaultToken||\"text\",a.caseInsensitive),delete a.defaultToken)}}var n=0,r=this.$rules;Object.keys(r).forEach(i,this)},this.createKeywordMapper=function(e,t,n,r){var i=Object.create(null);return Object.keys(e).forEach(function(t){var s=e[t];n&&(s=s.toLowerCase());var o=s.split(r||\"|\");for(var u=o.length;u--;)i[o[u]]=t}),Object.getPrototypeOf(i)&&(i.__proto__=null),this.$keywordList=Object.keys(i),e=null,n?function(e){return i[e.toLowerCase()]||t}:function(e){return i[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(i.prototype),t.TextHighlightRules=i}),define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(){this.$behaviours={}};(function(){this.add=function(e,t,n){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=n},this.addBehaviours=function(e){for(var t in e)for(var n in e[t])this.add(t,n,e[t][n])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if(typeof e==\"function\")var n=(new e).getBehaviours(t);else var n=e.getBehaviours(t);this.addBehaviours(n)},this.getBehaviours=function(e){if(!e)return this.$behaviours;var t={};for(var n=0;n<e.length;n++)this.$behaviours[e[n]]&&(t[e[n]]=this.$behaviours[e[n]]);return t}}).call(r.prototype),t.Behaviour=r}),define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=function(e,t,n){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var r=e.getTokenAt(t,n);this.$tokenIndex=r?r.index:-1};(function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){this.$tokenIndex+=1;var e;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new r(this.$row,t,this.$row,t+e.value.length)}}).call(i.prototype),t.TokenIterator=i}),define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c={'\"':'\"',\"'\":\"'\"},h=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},p=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},d=function(e){this.add(\"braces\",\"insertion\",function(t,n,r,i,s){var u=r.getCursorPosition(),a=i.doc.getLine(u.row);if(s==\"{\"){h(r);var l=r.getSelectionRange(),c=i.doc.getTextRange(l);if(c!==\"\"&&c!==\"{\"&&r.getWrapBehavioursEnabled())return p(l,c,\"{\",\"}\");if(d.isSaneInsertion(r,i))return/[\\]\\}\\)]/.test(a[u.column])||r.inMultiSelectMode||e&&e.braces?(d.recordAutoInsert(r,i,\"}\"),{text:\"{}\",selection:[1,1]}):(d.recordMaybeInsert(r,i,\"{\"),{text:\"{\",selection:[1,1]})}else if(s==\"}\"){h(r);var v=a.substring(u.column,u.column+1);if(v==\"}\"){var m=i.$findOpeningBracket(\"}\",{column:u.column+1,row:u.row});if(m!==null&&d.isAutoInsertedClosing(u,a,s))return d.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(s==\"\\n\"||s==\"\\r\\n\"){h(r);var g=\"\";d.isMaybeInsertedClosing(u,a)&&(g=o.stringRepeat(\"}\",f.maybeInsertedBrackets),d.clearMaybeInsertedClosing());var v=a.substring(u.column,u.column+1);if(v===\"}\"){var y=i.findMatchingBracket({row:u.row,column:u.column+1},\"}\");if(!y)return null;var b=this.$getIndent(i.getLine(y.row))}else{if(!g){d.clearMaybeInsertedClosing();return}var b=this.$getIndent(a)}var w=b+i.getTabString();return{text:\"\\n\"+w+\"\\n\"+b+g,selection:[1,w.length,1,w.length]}}d.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return p(s,o,\"(\",\")\");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return p(s,o,\"[\",\"]\");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){var s=r.$mode.$quotes||c;if(i.length==1&&s[i]){if(this.lineCommentStart&&this.lineCommentStart.indexOf(i)!=-1)return;h(n);var o=i,u=n.getSelectionRange(),a=r.doc.getTextRange(u);if(a!==\"\"&&(a.length!=1||!s[a])&&n.getWrapBehavioursEnabled())return p(u,a,o,o);if(!a){var f=n.getCursorPosition(),l=r.doc.getLine(f.row),d=l.substring(f.column-1,f.column),v=l.substring(f.column,f.column+1),m=r.getTokenAt(f.row,f.column),g=r.getTokenAt(f.row,f.column+1);if(d==\"\\\\\"&&m&&/escape/.test(m.type))return null;var y=m&&/string|escape/.test(m.type),b=!g||/string|escape/.test(g.type),w;if(v==o)w=y!==b,w&&/string\\.end/.test(g.type)&&(w=!1);else{if(y&&!b)return null;if(y&&b)return null;var E=r.$mode.tokenRe;E.lastIndex=0;var S=E.test(d);E.lastIndex=0;var x=E.test(d);if(S||x)return null;if(v&&!/[\\s;,.})\\]\\\\]/.test(v))return null;w=!0}return{text:w?o+o:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.$mode.$quotes||c,o=r.doc.getTextRange(i);if(!i.isMultiLine()&&s.hasOwnProperty(o)){h(n);var u=r.doc.getLine(i.start.row),a=u.substring(i.start.column+1,i.start.column+2);if(a==o)return i.end.column++,i}})};d.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},d.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},d.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},d.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},d.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},d.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},d.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},d.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(d,i),t.CstyleBehaviour=d}),define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],i=0,s=[];for(var o=0;o<r.length;o+=2)s.push(i+=r[o]),r[o+1]&&s.push(45,i+=r[o+1]);t.wordChars=String.fromCharCode.apply(null,s)}),define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../config\"),i=e(\"../tokenizer\").Tokenizer,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"../unicode\"),a=e(\"../lib/lang\"),f=e(\"../token_iterator\").TokenIterator,l=e(\"../range\").Range,c=function(){this.HighlightRules=s};(function(){this.$defaultBehaviour=new o,this.tokenRe=new RegExp(\"^[\"+u.wordChars+\"\\\\$_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+u.wordChars+\"\\\\$_]|\\\\s])+\",\"g\"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new i(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart=\"\",this.blockComment=\"\",this.toggleCommentLines=function(e,t,n,r){function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var i=t.doc,s=!0,o=!0,u=Infinity,f=t.getTabSize(),l=!1;if(!this.lineCommentStart){if(!this.blockComment)return!1;var c=this.blockComment.start,h=this.blockComment.end,p=new RegExp(\"^(\\\\s*)(?:\"+a.escapeRegExp(c)+\")\"),d=new RegExp(\"(?:\"+a.escapeRegExp(h)+\")\\\\s*$\"),v=function(e,t){if(g(e,t))return;if(!s||/\\S/.test(e))i.insertInLine({row:t,column:e.length},h),i.insertInLine({row:t,column:u},c)},m=function(e,t){var n;(n=e.match(d))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(p.test(e))return!0;var r=t.getTokens(n);for(var i=0;i<r.length;i++)if(r[i].type===\"comment\")return!0}}else{if(Array.isArray(this.lineCommentStart))var p=this.lineCommentStart.map(a.escapeRegExp).join(\"|\"),c=this.lineCommentStart[0];else var p=a.escapeRegExp(this.lineCommentStart),c=this.lineCommentStart;p=new RegExp(\"^(\\\\s*)(?:\"+p+\") ?\"),l=t.getUseSoftTabs();var m=function(e,t){var n=e.match(p);if(!n)return;var r=n[1].length,s=n[0].length;!b(e,r,s)&&n[0][s-1]==\" \"&&s--,i.removeInLine(t,r,s)},y=c+\" \",v=function(e,t){if(!s||/\\S/.test(e))b(e,u,u)?i.insertInLine({row:t,column:u},y):i.insertInLine({row:t,column:u},c)},g=function(e,t){return p.test(e)},b=function(e,t,n){var r=0;while(t--&&e.charAt(t)==\" \")r++;if(r%f!=0)return!1;var r=0;while(e.charAt(n++)==\" \")r++;return f>2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\\S/);n!==-1?(n<u&&(u=n),o&&!g(e,t)&&(o=!1)):E>e.length&&(E=e.length)}),u==Infinity&&(u=E,s=!1,o=!1),l&&u%f!=0&&(u=Math.floor(u/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new f(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,a=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new l(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new f(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new l(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);a.start.row==c&&(a.start.column+=h),a.end.row==c&&(a.end.column+=h),t.selection.fromOrientedRange(a)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)if(e[t]){var n=e[t],i=n.prototype.$id,s=r.$modes[i];s||(r.$modes[i]=s=new n),r.$modes[t]||(r.$modes[t]=s),this.$embeds.push(t),this.$modes[t]=s}var o=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(var t=0;t<o.length;t++)(function(e){var n=o[t],r=e[n];e[o[t]]=function(){return this.$delegator(n,arguments,r)}})(this)},this.$delegator=function(e,t,n){var r=t[0]||\"start\";if(typeof r!=\"string\"){if(Array.isArray(r[2])){var i=r[2][r[2].length-1],s=this.$modes[i];if(s)return s[e].apply(s,[r[1]].concat([].slice.call(t,1)))}r=r[0]||\"start\"}for(var o=0;o<this.$embeds.length;o++){if(!this.$modes[this.$embeds[o]])continue;var u=r.split(this.$embeds[o]);if(!u[0]&&u[1]){t[0]=u[1];var s=this.$modes[this.$embeds[o]];return s[e].apply(s,t)}}var a=n.apply(this,t);return n?a:undefined},this.transformAction=function(e,t,n,r,i){if(this.$behaviour){var s=this.$behaviour.getBehaviours();for(var o in s)if(s[o][t]){var u=s[o][t].apply(this,arguments);if(u)return u}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,n=[];for(var r in t){var i=t[r];for(var s=0,o=i.length;s<o;s++)if(typeof i[s].token==\"string\")/keyword|support|storage/.test(i[s].token)&&n.push(i[s].regex);else if(typeof i[s].token==\"object\")for(var u=0,a=i[s].token.length;u<a;u++)if(/keyword|support|storage/.test(i[s].token[u])){var r=i[s].regex.match(/\\(.+?\\)/g)[u];n.push(r.substr(1,r.length-2))}}this.completionKeywords=n}return e?n.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,n,r){var i=this.$keywordList||this.$createKeywordList();return i.map(function(e){return{name:e,value:e,score:0,meta:\"keyword\"}})},this.$id=\"ace/mode/text\"}).call(c.prototype),t.Mode=c}),define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var n=this;this.$worker=function(){if(!n.running)return;var e=new Date,t=n.currentLine,r=-1,i=n.doc,s=t;while(n.lines[t])t++;var o=i.getLength(),u=0;n.running=!1;while(t<o){n.$tokenizeRow(t),r=t;do t++;while(n.lines[t]);u++;if(u%5===0&&new Date-e>20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,r==-1&&(r=t),s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal(\"update\",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.lines[t]=null;else if(e.action==\"remove\")this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||\"start\"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+\"\"!=r.state+\"\"?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||\"text\"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+\"\"==e+\"\")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:\"\");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e(\"../range\").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f<i.length;f++){s=i[f],o=s.range.compareStart(t,n);if(o==-1){e(null,t,n,r,a);return}u=e(null,s.start.row,s.start.column,r,a),u=!u&&e(s.placeholder,s.start.row,s.start.column,r);if(u||o===0)return;a=!s.sameRow,r=s.end.column}e(null,t,n,r,a)},this.getNextFoldTo=function(e,t){var n,r;for(var i=0;i<this.folds.length;i++){n=this.folds[i],r=n.range.compareEnd(e,t);if(r==-1)return{fold:n,kind:\"after\"};if(r===0)return{fold:n,kind:\"inside\"}}return null},this.addRemoveChars=function(e,t,n){var r=this.getNextFoldTo(e,t),i,s;if(r){i=r.fold;if(r.kind==\"inside\"&&i.start.column!=t&&i.start.row!=e)window.console&&window.console.log(e,t,i);else if(i.start.row==e){s=this.folds;var o=s.indexOf(i);o===0&&(this.start.column+=n);for(o;o<s.length;o++){i=s[o],i.start.column+=n;if(!i.sameRow)return;i.end.column+=n}this.end.column+=n}}},this.split=function(e,t){var n=this.getNextFoldTo(e,t);if(!n||n.kind==\"inside\")return null;var r=n.fold,s=this.folds,o=this.foldData,u=s.indexOf(r),a=s[u-1];this.end.row=a.end.row,this.end.column=a.end.column,s=s.splice(u,s.length-u);var f=new i(o,s);return o.splice(o.indexOf(this)+1,0,f),f},this.merge=function(e){var t=e.folds;for(var n=0;n<t.length;n++)this.addFold(t[n]);var r=this.foldData;r.splice(r.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+\": [\"];return this.folds.forEach(function(t){e.push(\"  \"+t.toString())}),e.push(\"]\"),e.join(\"\\n\")},this.idxToPosition=function(e){var t=0;for(var n=0;n<this.folds.length;n++){var r=this.folds[n];e-=r.start.column-t;if(e<0)return{row:r.start.row,column:r.start.column+e};e-=r.placeholder.length;if(e<0)return r.start;t=r.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(i.prototype),t.FoldLine=i}),define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=r.comparePoints,s=function(){this.ranges=[]};(function(){this.comparePoints=i,this.pointIndex=function(e,t,n){var r=this.ranges;for(var s=n||0;s<r.length;s++){var o=r[s],u=i(e,o.end);if(u>0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s<t.length;s++){r=n,n=t[s];var o=i(r.end,n.start);if(o<0)continue;if(o==0&&!r.isEmpty()&&!n.isEmpty())continue;i(r.end,n.end)<0&&(r.end.row=n.end.row,r.end.column=n.end.column),t.splice(s,1),e.push(n),n=r,s--}return this.ranges=t,e},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row<e)return[];var r=this.pointIndex({row:e,column:0});r<0&&(r=-r-1);var i=this.pointIndex({row:t,column:0},r);i<0&&(i=-i-1);var s=[];for(var o=r;o<i;o++)s.push(n[o]);return s},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on(\"change\",this.onChange)},this.detach=function(){if(!this.session)return;this.session.removeListener(\"change\",this.onChange),this.session=null},this.$onChange=function(e){var t=e.start,n=e.end,r=t.row,i=n.row,s=this.ranges;for(var o=0,u=s.length;o<u;o++){var a=s[o];if(a.end.row>=r)break}if(e.action==\"insert\"){var f=i-r,l=-t.column+n.column;for(;o<u;o++){var a=s[o];if(a.start.row>r)break;a.start.row==r&&a.start.column>=t.column&&(a.start.column!=t.column||!this.$insertRight)&&(a.start.column+=l,a.start.row+=f);if(a.end.row==r&&a.end.column>=t.column){if(a.end.column==t.column&&this.$insertRight)continue;a.end.column==t.column&&l>0&&o<u-1&&a.end.column>a.start.column&&a.end.column==s[o+1].start.column&&(a.end.column-=l),a.end.column+=l,a.end.row+=f}}}else{var f=r-i,l=t.column-n.column;for(;o<u;o++){var a=s[o];if(a.start.row>i)break;if(a.end.row<i&&(r<a.end.row||r==a.end.row&&t.column<a.end.column))a.end.row=r,a.end.column=t.column;else if(a.end.row==i)if(a.end.column<=n.column){if(f||a.end.column>t.column)a.end.column=t.column,a.end.row=t.row}else a.end.column+=l,a.end.row+=f;else a.end.row>i&&(a.end.row+=f);if(a.start.row<i&&(r<a.start.row||r==a.start.row&&t.column<a.start.column))a.start.row=r,a.start.column=t.column;else if(a.start.row==i)if(a.start.column<=n.column){if(f||a.start.column>t.column)a.start.column=t.column,a.start.row=t.row}else a.start.column+=l,a.start.row+=f;else a.start.row>i&&(a.start.row+=f)}}if(f!=0&&o<u)for(;o<u;o++){var a=s[o];a.start.row+=f,a.end.row+=f}}}).call(s.prototype),t.RangeList=s}),define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function u(e,t){e.row-=t.row,e.row==0&&(e.column-=t.column)}function a(e,t){u(e.start,t),u(e.end,t)}function f(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row}function l(e,t){f(e.start,t),f(e.end,t)}var r=e(\"../range\").Range,i=e(\"../range_list\").RangeList,s=e(\"../lib/oop\"),o=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]};s.inherits(o,i),function(){this.toString=function(){return'\"'+this.placeholder+'\" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach(function(t){t.setFoldLine(e)})},this.clone=function(){var e=this.range.clone(),t=new o(e,this.placeholder);return this.subFolds.forEach(function(e){t.subFolds.push(e.clone())}),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(this.range.isEqual(e))return;if(!this.range.containsRange(e))throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);a(e,this.start);var t=e.start.row,n=e.start.column;for(var r=0,i=-1;r<this.subFolds.length;r++){i=this.subFolds[r].range.compare(t,n);if(i!=1)break}var s=this.subFolds[r];if(i==0)return s.addSubFold(e);var t=e.range.end.row,n=e.range.end.column;for(var o=r,i=-1;o<this.subFolds.length;o++){i=this.subFolds[o].range.compare(t,n);if(i!=1)break}var u=this.subFolds[o];if(i==0)throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);var f=this.subFolds.splice(r,o-r,e);return e.setFoldLine(this.foldLine),e},this.restoreRange=function(e){return l(e,this.start)}}.call(o.prototype)}),define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function u(){this.getFoldAt=function(e,t,n){var r=this.getFoldLine(e);if(!r)return null;var i=r.folds;for(var s=0;s<i.length;s++){var o=i[s];if(o.range.contains(e,t)){if(n==1&&o.range.isEnd(e,t))continue;if(n==-1&&o.range.isStart(e,t))continue;return o}}},this.getFoldsInRange=function(e){var t=e.start,n=e.end,r=this.$foldData,i=[];t.column+=1,n.column-=1;for(var s=0;s<r.length;s++){var o=r[s].range.compareRange(e);if(o==2)continue;if(o==-2)break;var u=r[s].folds;for(var a=0;a<u.length;a++){var f=u[a];o=f.range.compareRange(e);if(o==-2)break;if(o==2)continue;if(o==42)break;i.push(f)}}return t.column-=1,n.column+=1,i},this.getFoldsInRangeList=function(e){if(Array.isArray(e)){var t=[];e.forEach(function(e){t=t.concat(this.getFoldsInRange(e))},this)}else var t=this.getFoldsInRange(e);return t},this.getAllFolds=function(){var e=[],t=this.$foldData;for(var n=0;n<t.length;n++)for(var r=0;r<t[n].folds.length;r++)e.push(t[n].folds[r]);return e},this.getFoldStringAt=function(e,t,n,r){r=r||this.getFoldLine(e);if(!r)return null;var i={end:{column:0}},s,o;for(var u=0;u<r.folds.length;u++){o=r.folds[u];var a=o.range.compareEnd(e,t);if(a==-1){s=this.getLine(o.start.row).substring(i.end.column,o.start.column);break}if(a===0)return null;i=o}return s||(s=this.getLine(o.start.row).substring(i.end.column)),n==-1?s.substring(0,t-i.end.column):n==1?s.substring(t-i.end.column):s},this.getFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.start.row<=e&&i.end.row>=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.end.row>=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i<n.length;i++){var s=n[i],o=s.end.row,u=s.start.row;if(o>=t){u<t&&(u>=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u<f||u==f&&a<=l-2){var c=this.getFoldAt(u,a,1),h=this.getFoldAt(f,l,-1);if(c&&h==c)return c.addSubFold(o);c&&!c.range.isStart(u,a)&&this.removeFold(c),h&&!h.range.isEnd(f,l)&&this.removeFold(h);var p=this.getFoldsInRange(o.range);p.length>0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d<n.length;d++){var v=n[d];if(f==v.start.row){v.addFold(o),r=!0;break}if(u==v.end.row){v.addFold(o),r=!0;if(!o.sameRow){var m=n[d+1];if(m&&m.start.row==f){v.merge(m);break}}break}if(f<=v.start.row)break}return r||(v=this.$addFoldLine(new i(this.$foldData,o))),this.$useWrapMode?this.$updateWrapData(v.start.row,v.start.row):this.$updateRowLengthCache(v.start.row,v.start.row),this.$modified=!0,this._signal(\"changeFold\",{data:o,action:\"add\"}),o}throw new Error(\"The range has to be at least 2 characters width\")},this.addFolds=function(e){e.forEach(function(e){this.addFold(e)},this)},this.removeFold=function(e){var t=e.foldLine,n=t.start.row,r=t.end.row,i=this.$foldData,s=t.folds;if(s.length==1)i.splice(i.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))s.pop(),t.end.row=s[s.length-1].end.row,t.end.column=s[s.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))s.shift(),t.start.row=s[0].start.row,t.start.column=s[0].start.column;else if(e.sameRow)s.splice(s.indexOf(e),1);else{var o=t.split(e.start.row,e.start.column);s=o.folds,s.shift(),o.start.row=s[0].start.row,o.start.column=s[0].start.column}this.$updating||(this.$useWrapMode?this.$updateWrapData(n,r):this.$updateRowLengthCache(n,r)),this.$modified=!0,this._signal(\"changeFold\",{data:e,action:\"remove\"})},this.removeFolds=function(e){var t=[];for(var n=0;n<e.length;n++)t.push(e[n]);t.forEach(function(e){this.removeFold(e)},this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach(function(t){e.restoreRange(t),this.addFold(t)},this),e.collapseChildren>0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e==\"number\"?n=new r(e,0,e,this.getLine(e).length):\"row\"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o=\"\";return e.walk(function(e,t,n,u){if(t<r)return;if(t==r){if(n<i)return;u=Math.max(i,u)}e!=null?o+=e:o+=s.getLine(t).substring(u,n)},t,n),o},this.getDisplayLine=function(e,t,n,r){var i=this.getFoldLine(e);if(!i){var s;return s=this.doc.getLine(e),s.substring(r||0,t||s.length)}return this.getFoldDisplayLine(i,e,t,n,r)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map(function(t){var n=t.folds.map(function(e){return e.clone()});return new i(e,n)}),e},this.toggleFold=function(e){var t=this.selection,n=t.getRange(),r,i;if(n.isEmpty()){var s=n.start;r=this.getFoldAt(s.row,s.column);if(r){this.expandFold(r);return}(i=this.findMatchingBracket(s))?n.comparePoint(i)==1?n.end=i:(n.start=i,n.start.column++,n.end.column--):(i=this.findMatchingBracket({row:s.row,column:s.column+1}))?(n.comparePoint(i)==1?n.end=i:n.start=i,n.start.column++):n=this.getCommentFoldRange(s.row,s.column)||n}else{var o=this.getFoldsInRange(n);if(e&&o.length){this.expandFolds(o);return}o.length==1&&(r=o[0])}r||(r=this.getFoldAt(n.start.row,n.start.column));if(r&&r.range.toString()==n.toString()){this.expandFold(r);return}var u=\"...\";if(!n.isMultiLine()){u=this.getTextRange(n);if(u.length<4)return;u=u.trim().substring(0,2)+\"..\"}this.addFold(u,n)},this.getCommentFoldRange=function(e,t,n){var i=new o(this,e,t),s=i.getCurrentToken(),u=s.type;if(s&&/^comment|string/.test(u)){u=u.match(/comment|string/)[0],u==\"comment\"&&(u+=\"|doc-start\");var a=new RegExp(u),f=new r;if(n!=1){do s=i.stepBackward();while(s&&a.test(s.type));i.stepForward()}f.start.row=i.getCurrentTokenRow(),f.start.column=i.getCurrentTokenColumn()+2,i=new o(this,e,t);if(n!=-1){var l=-1;do{s=i.stepForward();if(l==-1){var c=this.getState(i.$row);a.test(c)||(l=i.$row)}else if(i.$row>l)break}while(s&&a.test(s.type));s=i.stepBackward()}else s=i.getCurrentToken();return f.end.row=i.getCurrentTokenRow(),f.end.column=i.getCurrentTokenColumn()+s.value.length-2,f}},this.foldAll=function(e,t,n){n==undefined&&(n=1e5);var r=this.foldWidgets;if(!r)return;t=t||this.getLength(),e=e||0;for(var i=e;i<t;i++){r[i]==null&&(r[i]=this.getFoldWidget(i));if(r[i]!=\"start\")continue;var s=this.getFoldWidgetRange(i);if(s&&s.isMultiLine()&&s.end.row<=t&&s.start.row>=e){i=s.end.row;try{var o=this.addFold(\"...\",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle=\"markbegin\",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error(\"invalid fold style: \"+e+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");if(this.$foldStyle==e)return;this.$foldStyle=e,e==\"manual\"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off(\"change\",this.$updateFoldWidgets),this.off(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets),this._signal(\"changeAnnotation\");if(!e||this.$foldStyle==\"manual\"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on(\"change\",this.$updateFoldWidgets),this.on(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s==\"start\"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=\" ace_invalid\")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n===\"end\"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range))return this.removeFold(s),s}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,f,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold(\"...\",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold(\"...\",n)}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.foldWidgets[t]=null;else if(e.action==\"remove\")this.foldWidgets.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,r)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e(\"../range\").Range,i=e(\"./fold_line\").FoldLine,s=e(\"./fold\").Fold,o=e(\"../token_iterator\").TokenIterator;t.Folding=u}),define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n==\"\")return null;var r=n.match(/([\\(\\[\\{])|([\\)\\]\\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\",\"<\":\">\",\">\":\"<\"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end)\\b/,\"(?:start|begin|end)\")+\")+\"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:start|begin)\\b/,\"(?:start|begin|end)\")+\")+\"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a<l){var c=f.charAt(a);if(c==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else c==e&&(s+=1);a+=1}do u=o.stepForward();while(u&&!n.test(u.type));if(u==null)break;a=0}return null}}var r=e(\"../token_iterator\").TokenIterator,i=e(\"../range\").Range;t.BracketMatch=s}),define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./bidihandler\").BidiHandler,o=e(\"./config\"),u=e(\"./lib/event_emitter\").EventEmitter,a=e(\"./selection\").Selection,f=e(\"./mode/text\").Mode,l=e(\"./range\").Range,c=e(\"./document\").Document,h=e(\"./background_tokenizer\").BackgroundTokenizer,p=e(\"./search_highlight\").SearchHighlight,d=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.id=\"session\"+ ++d.$uid,this.$foldData.toString=function(){return this.join(\"\\n\")},this.on(\"changeFold\",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this);if(typeof e!=\"object\"||!e.getLine)e=new c(e);this.setDocument(e),this.selection=new a(this),this.$bidiHandler=new s(this),o.resetOptions(this),this.setMode(t),o._signal(\"session\",this)};d.$uid=0,function(){function m(e){return e<4352?!1:e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,u),this.setDocument=function(e){this.doc&&this.doc.removeListener(\"change\",this.$onChange),this.doc=e,e.on(\"change\",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t<s))return i;r=i-1}}return n-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){this.$modified=!0,this.$bidiHandler.onChange(e),this.$resetRowCache(e.start.row);var t=this.$updateInternalDataOnChange(e);!this.$fromUndo&&this.$undoManager&&(t&&t.length&&(this.$undoManager.add({action:\"removeFolds\",folds:t},this.mergeUndoDeltas),this.mergeUndoDeltas=!0),this.$undoManager.add(e,this.mergeUndoDeltas),this.mergeUndoDeltas=!0,this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(e),this._signal(\"change\",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var n=this.bgTokenizer.getTokens(e),r,i=0;if(t==null){var s=n.length-1;i=this.getLine(e).length}else for(var s=0;s<n.length;s++){i+=n[s].value.length;if(i>=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(\" \",this.getTabSize()):\"\t\"},this.setUseSoftTabs=function(e){this.setOption(\"useSoftTabs\",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption(\"tabSize\",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.setNavigateWithinSoftTabs=function(e){this.setOption(\"navigateWithinSoftTabs\",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption(\"overwrite\",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=\"\"),this.$decorations[e]+=\" \"+t,this._signal(\"changeBreakpoint\",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||\"\").replace(\" \"+t,\"\"),this._signal(\"changeBreakpoint\",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]=\"ace_breakpoint\";this._signal(\"changeBreakpoint\",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal(\"changeBreakpoint\",{})},this.setBreakpoint=function(e,t){t===undefined&&(t=\"ace_breakpoint\"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.addMarker=function(e,t,n,r){var i=this.$markerId++,s={range:e,type:n||\"line\",renderer:typeof n==\"function\"?n:null,clazz:t,inFront:!!r,id:i};return r?(this.$frontMarkers[i]=s,this._signal(\"changeFrontMarker\")):(this.$backMarkers[i]=s,this._signal(\"changeBackMarker\")),i},this.addDynamicMarker=function(e,t){if(!e.update)return;var n=this.$markerId++;return e.id=n,e.inFront=!!t,t?(this.$frontMarkers[n]=e,this._signal(\"changeFrontMarker\")):(this.$backMarkers[n]=e,this._signal(\"changeBackMarker\")),e},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(!t)return;var n=t.inFront?this.$frontMarkers:this.$backMarkers;delete n[e],this._signal(t.inFront?\"changeFrontMarker\":\"changeBackMarker\")},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new p(null,\"ace_selected-word\",\"text\");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,n,r){typeof t!=\"number\"&&(n=t,t=e),n||(n=\"ace_step\");var i=new l(e,0,t,Infinity);return i.id=this.addMarker(i,n,\"fullLine\",r),i},this.setAnnotations=function(e){this.$annotations=e,this._signal(\"changeAnnotation\",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r?\\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine=\"\\n\"},this.getWordRange=function(e,t){var n=this.getLine(e),r=!1;t>0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\\s+$/.test(n.slice(t-1,t+1)))var i=/\\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(o<n.length&&n.charAt(o).match(i))o++;return new l(e,s,e,o)},this.getAWordRange=function(e,t){var n=this.getWordRange(e,t),r=this.getLine(n.end.row);while(r.charAt(n.end.column).match(/[ \\t]/))n.end.column+=1;return n},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption(\"useWorker\",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._signal(\"tokenizerUpdate\",e)},this.$modes=o.$modes,this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&typeof e==\"object\"){if(e.getTokenizer)return this.$onChangeMode(e);var n=e,r=n.path}else r=e||\"ace/mode/text\";this.$modes[\"ace/mode/text\"]||(this.$modes[\"ace/mode/text\"]=new f);if(this.$modes[r]&&!n){this.$onChangeMode(this.$modes[r]),t&&t();return}this.$modeId=r,o.loadModule([\"mode\",r],function(e){if(this.$modeId!==r)return t&&t();this.$modes[r]&&!n?this.$onChangeMode(this.$modes[r]):e&&e.Mode&&(e=new e.Mode(n),n||(this.$modes[r]=e,e.$id=r),this.$onChangeMode(e)),t&&t()}.bind(this)),this.$mode||this.$onChangeMode(this.$modes[\"ace/mode/text\"],!0)},this.$onChangeMode=function(e,t){t||(this.$modeId=e.$id);if(this.$mode===e)return;this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker();var n=e.getTokenizer();if(n.addEventListener!==undefined){var r=this.onReloadTokenizer.bind(this);n.addEventListener(\"update\",r)}if(!this.bgTokenizer){this.bgTokenizer=new h(n);var i=this;this.bgTokenizer.addEventListener(\"update\",function(e){i._signal(\"tokenizerUpdate\",e)})}else this.bgTokenizer.setTokenizer(n);this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit(\"changeMode\"))},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){o.warn(\"Could not load worker\",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){if(this.$scrollTop===e||isNaN(e))return;this.$scrollTop=e,this._signal(\"changeScrollTop\",e)},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){if(this.$scrollLeft===e||isNaN(e))return;this.$scrollLeft=e,this._signal(\"changeScrollLeft\",e)},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(this.lineWidgetsWidth!=null)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach(function(t){t&&t.screenWidth>e&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;a<u;a++){if(a>o){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=e.length-1;n!=-1;n--){var r=e[n];r.action==\"insert\"||r.action==\"remove\"?this.doc.revertDelta(r):r.folds&&this.addFolds(r.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=0;n<e.length;n++){var r=e[n];(r.action==\"insert\"||r.action==\"remove\")&&this.doc.applyDelta(r)}!t&&this.$undoSelect&&(e.selectionAfter?this.selection.fromJSON(e.selectionAfter):this.selection.setRange(this.$getUndoSelection(e,!1))),this.$fromUndo=!1},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t){function n(e){return t?e.action!==\"insert\":e.action===\"insert\"}var r,i,s;for(var o=0;o<e.length;o++){var u=e[o];if(!u.start)continue;if(!r){n(u)?(r=l.fromPoints(u.start,u.end),s=!0):(r=l.fromPoints(u.start,u.start),s=!1);continue}n(u)?(i=u.start,r.compare(i.row,i.column)==-1&&r.setStart(i),i=u.end,r.compare(i.row,i.column)==1&&r.setEnd(i),s=!0):(i=u.start,r.compare(i.row,i.column)==-1&&(r=l.fromPoints(u.start,u.start)),s=!1)}return r},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,n){var r=this.getTextRange(e),i=this.getFoldsInRange(e),s=l.fromPoints(t,t);if(!n){this.remove(e);var o=e.start.row-e.end.row,u=o?-e.end.column:e.start.column-e.end.column;u&&(s.start.row==e.end.row&&s.start.column>e.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,f=s.start,o=f.row-a.row,u=f.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new l(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o<r;++o)if(s.charAt(o)!=\" \")break;o<r&&s.charAt(o)==\"\t\"?(n.start.column=o,n.end.column=o+1):(n.start.column=0,n.end.column=o),this.remove(n)}},this.$moveLines=function(e,t,n){e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t);if(n<0){var r=this.getRowFoldStart(e+n);if(r<0)return 0;var i=r-e}else if(n>0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new l(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal(\"changeWrapMode\")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal(\"changeWrapMode\")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal(\"changeWrapLimit\")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=null;this.$updating=!0;if(u!=0)if(n===\"remove\"){this[t?\"$wrapData\":\"$rowLengthCache\"].splice(s,u);var f=this.$foldData;a=this.getFoldsInRange(e),this.removeFolds(a);var l=this.getFoldLine(i.row),c=0;if(l){l.addRemoveChars(i.row,i.column,r.column-i.column),l.shiftRow(-u);var h=this.getFoldLine(s);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=i.row&&l.shiftRow(-u)}o=s}else{var p=Array(u);p.unshift(s,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(s),c=0;if(l){var v=l.range.compareInside(r.row,r.column);v==0?(l=l.split(r.row,r.column),l&&(l.shiftRow(u),l.addRemoveChars(o,0,i.column-r.column))):v==-1&&(l.addRemoveChars(s,0,i.column-r.column),l.shiftRow(u)),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=s&&l.shiftRow(u)}}else{u=Math.abs(e.start.column-e.end.column),n===\"remove\"&&(a=this.getFoldsInRange(e),this.removeFolds(a),u=-u);var l=this.getFoldLine(s);l&&l.addRemoveChars(s,r.column,u)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error(\"doc.getLength() and $wrapData.length have to be the same!\"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),o=this.$wrapData,u=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,o){var u;if(e!=null){u=this.$getDisplayTokens(e,a.length),u[0]=n;for(var f=1;f<u.length;f++)u[f]=s}else u=this.$getDisplayTokens(r[t].substring(o,i),a.length);a=a.concat(u)}.bind(this),f.end.row,r[f.end.row].length+1),o[f.start.row]=this.$computeWrapSplits(a,u,i),l=f.end.row+1):(a=this.$getDisplayTokens(r[l]),o[l]=this.$computeWrapSplits(a,u,i),l++)};var e=1,t=2,n=3,s=4,a=9,c=10,d=11,v=12;this.$computeWrapSplits=function(e,r,i){function g(){var t=0;if(m===0)return t;if(p)for(var n=0;n<e.length;n++){var r=e[n];if(r==c)t+=1;else{if(r!=d){if(r==v)continue;break}t+=i}}return h&&p!==!1&&(t+=i),Math.min(t,m)}function y(t){var n=t-f;for(var r=f;r<t;r++){var i=e[r];if(i===12||i===2)n-=1}o.length||(b=g(),o.indent=b),l+=n,o.push(l),f=t}if(e.length==0)return[];var o=[],u=e.length,f=0,l=0,h=this.$wrapAsCode,p=this.$indentedSoftWrap,m=r<=Math.max(2*i,8)||p===!1?0:Math.floor(r/2),b=0;while(u-f>r-b){var w=f+r-b;if(e[w-1]>=c&&e[w]>=c){y(w);continue}if(e[w]==n||e[w]==s){for(w;w!=f-1;w--)if(e[w]==n)break;if(w>f){y(w);continue}w=f+r;for(w;w<e.length;w++)if(e[w]!=s)break;if(w==e.length)break;y(w);continue}var E=Math.max(w-(r-(r>>2)),f-1);while(w>E&&e[w]<n)w--;if(h){while(w>E&&e[w]<n)w--;while(w>E&&e[w]==a)w--}else while(w>E&&e[w]<c)w--;if(w>E){y(++w);continue}w=f+r,e[w]==t&&w--,y(w-b)}return o},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o<n.length;o++){var u=n.charCodeAt(o);if(u==9){s=this.getScreenTabSize(i.length+r),i.push(d);for(var f=1;f<s;f++)i.push(v)}else u==32?i.push(c):u>39&&u<48||u>57&&u<64?i.push(a):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i<e.length;i++){r=e.charCodeAt(i),r==9?n+=this.getScreenTabSize(n):r>=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]<t.column?n.indent:0}return 0},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:undefined},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t,n){if(e<0)return{row:0,column:0};var r,i=0,s=0,o,u=0,a=0,f=this.$screenRowCache,l=this.$getRowCacheIndex(f,e),c=f.length;if(c&&l>=0)var u=f[l],i=this.$docRowCache[l],h=e>f[c-1];else var h=!c;var p=this.getLength()-1,d=this.getNextFoldLine(i),v=d?d.start.row:Infinity;while(u<=e){a=this.getRowLength(i);if(u+a>e||i>=p)break;u+=a,i++,i>v&&(i=d.end.row+1,d=this.getNextFoldLine(i,d),v=d?d.start.row:Infinity),h&&(this.$docRowCache.push(i),this.$screenRowCache.push(u))}if(d&&d.start.row<=i)r=this.getFoldDisplayLine(d),i=d.start.row;else{if(u+a<=e||i>p)return{row:p,column:this.getLine(p).length};r=this.getLine(i),d=null}var m=0,g=Math.floor(e-u);if(this.$useWrapMode){var y=this.$wrapData[i];y&&(o=y[g],g>0&&y.length&&(m=y.indent,s=y[g-1]||y[y.length-1],r=r.substring(s)))}return n!==undefined&&this.$bidiHandler.isBidiRow(u+g,i,g)&&(t=this.$bidiHandler.offsetToCol(n)),s+=this.$getStringScreenWidth(r,t-m)[1],this.$useWrapMode&&s>=o&&(s=o-1),d?d.idxToPosition(s):{row:i,column:s}},this.documentToScreenPosition=function(e,t){if(typeof t==\"undefined\")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u<e){if(u>=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d=\"\";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);var v=0;if(this.$useWrapMode){var m=this.$wrapData[i];if(m){var g=0;while(d.length>=m[g])r++,g++;d=d.substring(m[g-1]||0,d.length),v=g>0?m.indent:0}}return{row:r,column:v+this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;r<n.length;r++)t=n[r],e-=t.end.row-t.start.row}else{var i=this.$wrapData.length,s=0,r=0,t=this.$foldData[r++],o=t?t.start.row:Infinity;while(s<i){var u=this.$wrapData[s];e+=u?u.length+1:1,s++,s>o&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){if(!this.$enableVarChar)return;this.$getStringScreenWidth=function(t,n,r){if(n===0)return[0,0];n||(n=Infinity),r=r||0;var i,s;for(s=0;s<t.length;s++){i=t.charAt(s),i===\"\t\"?r+=this.getScreenTabSize(r):r+=e.getCharacterWidth(i);if(r>n)break}return[r,s]}},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=m}.call(d.prototype),e(\"./edit_session/folding\").Folding.call(d.prototype),e(\"./edit_session/bracket_match\").BracketMatch.call(d.prototype),o.defineOptions(d.prototype,\"session\",{wrap:{set:function(e){!e||e==\"off\"?e=!1:e==\"free\"?e=!0:e==\"printMargin\"?e=-1:typeof e==\"string\"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;this.$wrap=e;if(!e)this.setUseWrapMode(!1);else{var t=typeof e==\"number\"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}},get:function(){return this.getUseWrapMode()?this.$wrap==-1?\"printMargin\":this.getWrapLimitRange().min?this.$wrap:\"free\":\"off\"},handlesSet:!0},wrapMethod:{set:function(e){e=e==\"auto\"?this.$mode.type!=\"text\":e!=\"text\",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:\"auto\"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){e=parseInt(e);if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal(\"changeTabSize\")},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(e){this.setFoldStyle(e)},handlesSet:!0},overwrite:{set:function(e){this._signal(\"changeOverwrite\")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId},handlesSet:!0}}),t.EditSession=d}),define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";function u(e,t){function n(e){return/\\w/.test(e)||t.regExp?\"\\\\b\":\"\"}return n(e[0])+e+n(e[e.length-1])}var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i,o){return r=new s(e,n,i,o),n==o&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start)?(r=null,!1):!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;h<a;h++)if(i[c+h].search(u[h])==-1)continue e;var p=i[c],d=i[c+a-1],v=p.length-p.match(u[0])[0].length,m=d.match(u[a-1])[0].length;if(l&&l.end.row===c&&l.end.column>v)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;g<i.length;g++){var y=r.getMatchOffsets(i[g],u);for(var h=0;h<y.length;h++){var b=y[h];o.push(new s(g,b.offset,g,b.offset+b.length))}}if(n){var w=n.start.column,E=n.start.column,g=0,h=o.length-1;while(g<h&&o[g].start.column<w&&o[g].start.row==n.start.row)g++;while(g<h&&o[h].end.column>E&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g<h;g++)o[g].start.row+=n.start.row,o[g].end.row+=n.start.row}return o},this.replace=function(e,t){var n=this.$options,r=this.$assembleRegExp(n);if(n.$isMultiLine)return t;if(!r)return;var i=r.exec(e);if(!i||i[0].length!=e.length)return null;t=e.replace(r,t);if(n.preserveCase){t=t.split(\"\");for(var s=Math.min(e.length,e.length);s--;){var o=e[s];o&&o.toLowerCase()!=o?t[s]=t[s].toUpperCase():t[s]=t[s].toLowerCase()}t=t.join(\"\")}return t},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var n=e.needle;if(!e.needle)return e.re=!1;e.regExp||(n=r.escapeRegExp(n)),e.wholeWord&&(n=u(n,e));var i=e.caseSensitive?\"gm\":\"gmi\";e.$isMultiLine=!t&&/[\\n\\r]/.test(n);if(e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(n,i);try{var s=new RegExp(n,i)}catch(o){s=!1}return e.re=s},this.$assembleMultilineRegExp=function(e,t){var n=e.replace(/\\r\\n|\\r|\\n/g,\"$\\n^\").split(\"\\n\"),r=[];for(var i=0;i<n.length;i++)try{r.push(new RegExp(n[i],t))}catch(s){return!1}return r},this.$matchIterator=function(e,t){var n=this.$assembleRegExp(t);if(!n)return!1;var r=t.backwards==1,i=t.skipCurrent!=0,s=t.range,o=t.start;o||(o=s?s[r?\"end\":\"start\"]:e.selection.getRange()),o.start&&(o=o[i!=r?\"end\":\"start\"]);var u=s?s.start.row:0,a=s?s.end.row:e.getLength()-1;if(r)var f=function(e){var n=o.row;if(c(n,o.column,e))return;for(n--;n>=u;n--)if(c(n,Number.MAX_VALUE,e))return;if(t.wrap==0)return;for(n=a,u=o.row;n>=u;n--)if(c(n,Number.MAX_VALUE,e))return};else var f=function(e){var n=o.row;if(c(n,o.column,e))return;for(n+=1;n<=a;n++)if(c(n,0,e))return;if(t.wrap==0)return;for(n=u,a=o.row;n<=a;n++)if(c(n,0,e))return};if(t.$isMultiLine)var l=n.length,c=function(t,i,s){var o=r?t-l+1:t;if(o<0)return;var u=e.getLine(o),a=u.search(n[0]);if(!r&&a<i||a===-1)return;for(var f=1;f<l;f++){u=e.getLine(o+f);if(u.search(n[f])==-1)return}var c=u.match(n[l-1])[0].length;if(r&&c>i)return;if(s(o,a,o+l-1,c))return!0};else if(r)var c=function(t,r,i){var s=e.getLine(t),o=[],u,a=0;n.lastIndex=0;while(u=n.exec(s)){var f=u[0].length;a=u.index;if(!f){if(a>=s.length)break;n.lastIndex=a+=1}if(u.index+f>r)break;o.push(u.index,f)}for(var l=o.length-1;l>=0;l-=2){var c=o[l-1],f=o[l];if(i(t,c,t,c+f))return!0}};else var c=function(t,r,i){var s=e.getLine(t),o,u;n.lastIndex=r;while(u=n.exec(s)){var a=u[0].length;o=u.index;if(i(t,o,t,o+a))return!0;if(!a){n.lastIndex=o+=1;if(o>=s.length)return!1}}};return{forEach:f}}}).call(o.prototype),t.Search=o}),define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e,t){this.platform=t||(i.isMac?\"mac\":\"win\"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e(\"../lib/keys\"),i=e(\"../lib/useragent\"),s=r.KEY_MODS;u.prototype=o.prototype,function(){function e(e){return typeof e==\"object\"&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e==\"string\"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e==\"object\"&&e&&(n==undefined&&(n=e.position),e=e[this.platform]);if(!e)return;if(typeof t==\"function\")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split(\"|\").forEach(function(e){var r=\"\";if(e.indexOf(\" \")!=-1){var i=e.split(/\\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?\" \":\"\")+n,this._addCommandToBinding(r,\"chainKeys\")},this),r+=\" \"}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(t,n,r){var i=this.commandKeyBinding,s;if(!n)delete i[t];else if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?(s=i[t].indexOf(n))!=-1&&i[t].splice(s,1):i[t]=[i[t]],typeof r!=\"number\"&&(r=e(n));var o=i[t];for(s=0;s<o.length;s++){var u=o[s],a=e(u);if(a>r)break}o.splice(s,0,n)}},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n==\"string\")return this.bindKey(n,t);typeof n==\"function\"&&(n={exec:n});if(typeof n!=\"object\")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]==\"shift\")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!=\"undefined\"&&console.error(\"invalid modifier \"+t[o]+\" in \"+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){if(r<0)return;var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=\" \"+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o==\"chainKeys\"||o[o.length-1]==\"chainKeys\")return e.$keyChain=e.$keyChain||i,{command:\"null\"};if(e.$keyChain)if(!!t&&t!=4||n.length!=1){if(t==-1||r>0)e.$keyChain=\"\"}else e.$keyChain=e.$keyChain.slice(0,-i.length-1);return{command:o}},this.getStatusText=function(e,t){return t.$keyChain||\"\"}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../keyboard/hash_handler\").MultiHashHandler,s=e(\"../lib/event_emitter\").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler(\"exec\",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e==\"string\"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(this.$checkCommandState!=0&&e.isAvailable&&!e.isAvailable(t))return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit(\"exec\",i),this._signal(\"afterExec\",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit(\"changeStatus\"),this.recording?(this.macro.pop(),this.removeEventListener(\"exec\",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on(\"exec\",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t==\"string\"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!=\"string\"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t){return{win:e,mac:t}}var r=e(\"../lib/lang\"),i=e(\"../config\"),s=e(\"../range\").Range;t.commands=[{name:\"showSettingsMenu\",bindKey:o(\"Ctrl-,\",\"Command-,\"),exec:function(e){i.loadModule(\"ace/ext/settings_menu\",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:\"goToNextError\",bindKey:o(\"Alt-E\",\"F4\"),exec:function(e){i.loadModule(\"./ext/error_marker\",function(t){t.showErrorMarker(e,1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"goToPreviousError\",bindKey:o(\"Alt-Shift-E\",\"Shift-F4\"),exec:function(e){i.loadModule(\"./ext/error_marker\",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"selectall\",bindKey:o(\"Ctrl-A\",\"Command-A\"),exec:function(e){e.selectAll()},readOnly:!0},{name:\"centerselection\",bindKey:o(null,\"Ctrl-L\"),exec:function(e){e.centerSelection()},readOnly:!0},{name:\"gotoline\",bindKey:o(\"Ctrl-L\",\"Command-L\"),exec:function(e,t){typeof t!=\"number\"&&(t=parseInt(prompt(\"Enter line number:\"),10)),isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:\"fold\",bindKey:o(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"unfold\",bindKey:o(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleFoldWidget\",bindKey:o(\"F2\",\"F2\"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleParentFoldWidget\",bindKey:o(\"Alt-F2\",\"Alt-F2\"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"foldall\",bindKey:o(null,\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAll()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldOther\",bindKey:o(\"Alt-0\",\"Command-Option-0\"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:\"center\",readOnly:!0},{name:\"unfoldall\",bindKey:o(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(e){e.session.unfold()},scrollIntoView:\"center\",readOnly:!0},{name:\"findnext\",bindKey:o(\"Ctrl-K\",\"Command-G\"),exec:function(e){e.findNext()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"findprevious\",bindKey:o(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(e){e.findPrevious()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"selectOrFindNext\",bindKey:o(\"Alt-K\",\"Ctrl-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:\"selectOrFindPrevious\",bindKey:o(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:\"find\",bindKey:o(\"Ctrl-F\",\"Command-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e)})},readOnly:!0},{name:\"overwrite\",bindKey:\"Insert\",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:\"selecttostart\",bindKey:o(\"Ctrl-Shift-Home\",\"Command-Shift-Home|Command-Shift-Up\"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",bindKey:o(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(e){e.navigateFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",bindKey:o(\"Shift-Up\",\"Shift-Up|Ctrl-Shift-P\"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golineup\",bindKey:o(\"Up\",\"Up|Ctrl-P\"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttoend\",bindKey:o(\"Ctrl-Shift-End\",\"Command-Shift-End|Command-Shift-Down\"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",bindKey:o(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(e){e.navigateFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",bindKey:o(\"Shift-Down\",\"Shift-Down|Ctrl-Shift-N\"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golinedown\",bindKey:o(\"Down\",\"Down|Ctrl-N\"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordleft\",bindKey:o(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordleft\",bindKey:o(\"Ctrl-Left\",\"Option-Left\"),exec:function(e){e.navigateWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolinestart\",bindKey:o(\"Alt-Shift-Left\",\"Command-Shift-Left|Ctrl-Shift-A\"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolinestart\",bindKey:o(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(e){e.navigateLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectleft\",bindKey:o(\"Shift-Left\",\"Shift-Left|Ctrl-Shift-B\"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoleft\",bindKey:o(\"Left\",\"Left|Ctrl-B\"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordright\",bindKey:o(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordright\",bindKey:o(\"Ctrl-Right\",\"Option-Right\"),exec:function(e){e.navigateWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolineend\",bindKey:o(\"Alt-Shift-Right\",\"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolineend\",bindKey:o(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(e){e.navigateLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectright\",bindKey:o(\"Shift-Right\",\"Shift-Right\"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoright\",bindKey:o(\"Right\",\"Right|Ctrl-F\"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectpagedown\",bindKey:\"Shift-PageDown\",exec:function(e){e.selectPageDown()},readOnly:!0},{name:\"pagedown\",bindKey:o(null,\"Option-PageDown\"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:\"gotopagedown\",bindKey:o(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:\"selectpageup\",bindKey:\"Shift-PageUp\",exec:function(e){e.selectPageUp()},readOnly:!0},{name:\"pageup\",bindKey:o(null,\"Option-PageUp\"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:\"gotopageup\",bindKey:\"PageUp\",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:\"scrollup\",bindKey:o(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"scrolldown\",bindKey:o(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"selectlinestart\",bindKey:\"Shift-Home\",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectlineend\",bindKey:\"Shift-End\",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"togglerecording\",bindKey:o(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:\"replaymacro\",bindKey:o(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:\"jumptomatching\",bindKey:o(\"Ctrl-P\",\"Ctrl-P\"),exec:function(e){e.jumpToMatching()},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"selecttomatching\",bindKey:o(\"Ctrl-Shift-P\",\"Ctrl-Shift-P\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"expandToMatching\",bindKey:o(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"passKeysToBrowser\",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:\"copy\",exec:function(e){},readOnly:!0},{name:\"cut\",exec:function(e){var t=e.$copyWithEmptySelection&&e.selection.isEmpty(),n=t?e.selection.getLineRange():e.selection.getRange();e._emit(\"cut\",n),n.isEmpty()||e.session.remove(n),e.clearSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"paste\",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:\"cursor\"},{name:\"removeline\",bindKey:o(\"Ctrl-D\",\"Command-D\"),exec:function(e){e.removeLines()},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",bindKey:o(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(e){e.duplicateSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",bindKey:o(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(e){e.sortLines()},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",bindKey:o(\"Ctrl-/\",\"Command-/\"),exec:function(e){e.toggleCommentLines()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",bindKey:o(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(e){e.toggleBlockComment()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",bindKey:o(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(e){e.modifyNumber(1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",bindKey:o(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",bindKey:o(\"Ctrl-H\",\"Command-Option-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e,!0)})}},{name:\"undo\",bindKey:o(\"Ctrl-Z\",\"Command-Z\"),exec:function(e){e.undo()}},{name:\"redo\",bindKey:o(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(e){e.redo()}},{name:\"copylinesup\",bindKey:o(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(e){e.copyLinesUp()},scrollIntoView:\"cursor\"},{name:\"movelinesup\",bindKey:o(\"Alt-Up\",\"Option-Up\"),exec:function(e){e.moveLinesUp()},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",bindKey:o(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(e){e.copyLinesDown()},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",bindKey:o(\"Alt-Down\",\"Option-Down\"),exec:function(e){e.moveLinesDown()},scrollIntoView:\"cursor\"},{name:\"del\",bindKey:o(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(e){e.remove(\"right\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",bindKey:o(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(e){e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",bindKey:o(\"Shift-Delete\",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",bindKey:o(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(e){e.removeToLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",bindKey:o(\"Alt-Delete\",\"Ctrl-K|Command-Delete\"),exec:function(e){e.removeToLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestarthard\",bindKey:o(\"Ctrl-Shift-Backspace\",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineendhard\",bindKey:o(\"Ctrl-Shift-Delete\",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",bindKey:o(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(e){e.removeWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",bindKey:o(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(e){e.removeWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",bindKey:o(\"Shift-Tab\",\"Shift-Tab\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",bindKey:o(\"Tab\",\"Tab\"),exec:function(e){e.indent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",bindKey:o(\"Ctrl-[\",\"Ctrl-[\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",bindKey:o(\"Ctrl-]\",\"Ctrl-]\"),exec:function(e){e.blockIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",exec:function(e,t){e.insert(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",exec:function(e,t){e.insert(r.stringRepeat(t.text||\"\",t.times||1))},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",bindKey:o(null,\"Ctrl-O\"),exec:function(e){e.splitLine()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",bindKey:o(\"Alt-Shift-X\",\"Ctrl-T\"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:\"cursor\"},{name:\"touppercase\",bindKey:o(\"Ctrl-U\",\"Ctrl-U\"),exec:function(e){e.toUpperCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",bindKey:o(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(e){e.toLowerCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"expandtoline\",bindKey:o(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"joinlines\",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\\n\\s*/,\" \").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=\" \"+c),f+=c}i.row+1<e.session.doc.getLength()-1&&(f+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new s(n.row,0,i.row+2,0),f),a>0?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:\"forEach\",readOnly:!0},{name:\"invertSelection\",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o<r.length;o++)o==r.length-1&&(r[o].end.row!==t||r[o].end.column!==n)&&i.push(new s(r[o].end.row,r[o].end.column,t,n)),o===0?(r[o].start.row!==0||r[o].start.column!==0)&&i.push(new s(0,0,r[o].start.row,r[o].start.column)):i.push(new s(r[o-1].end.row,r[o-1].end.column,r[o].start.row,r[o].start.column));e.exitMultiSelectMode(),e.clearSelection();for(var o=0;o<i.length;o++)e.selection.addRange(i[o],!1)},readOnly:!0,scrollIntoView:\"none\"}]}),define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";n.exports={lineMode:!1}}),define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/lang\"),o=e(\"./lib/useragent\"),u=e(\"./keyboard/textinput\").TextInput,a=e(\"./mouse/mouse_handler\").MouseHandler,f=e(\"./mouse/fold_handler\").FoldHandler,l=e(\"./keyboard/keybinding\").KeyBinding,c=e(\"./edit_session\").EditSession,h=e(\"./search\").Search,p=e(\"./range\").Range,d=e(\"./lib/event_emitter\").EventEmitter,v=e(\"./commands/command_manager\").CommandManager,m=e(\"./commands/default_commands\").commands,g=e(\"./config\"),y=e(\"./token_iterator\").TokenIterator,b=e(\"./clipboard\"),w=function(e,t,n){var r=e.getContainerElement();this.container=r,this.renderer=e,this.id=\"editor\"+ ++w.$uid,this.commands=new v(o.isMac?\"mac\":\"win\",m),typeof document==\"object\"&&(this.textInput=new u(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.$mouseHandler=new a(this),new f(this)),this.keyBinding=new l(this),this.$search=(new h).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on(\"exec\",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=s.delayedCall(function(){this._signal(\"input\",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on(\"change\",function(e,t){t._$emitInputEvent.schedule(31)}),this.setSession(t||n&&n.session||new c(\"\")),g.resetOptions(this),n&&this.setOptions(n),g._signal(\"editor\",this)};w.$uid=0,function(){r.implement(this,d),this.$initOperationListeners=function(){this.commands.on(\"exec\",this.startOperation.bind(this),!0),this.commands.on(\"afterExec\",this.endOperation.bind(this),!0),this.$opResetTimer=s.delayedCall(this.endOperation.bind(this,!0)),this.on(\"change\",function(){this.curOp||(this.startOperation(),this.curOp.selectionBefore=this.$lastSel),this.curOp.docChanged=!0}.bind(this),!0),this.on(\"changeSelection\",function(){this.curOp||(this.startOperation(),this.curOp.selectionBefore=this.$lastSel),this.curOp.selectionChanged=!0}.bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp=this.session.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.selectionBefore=this.selection.toJSON()},this.endOperation=function(e){if(this.curOp){if(e&&e.returnValue===!1)return this.curOp=null;if(e==1&&this.curOp.command&&this.curOp.command.name==\"mouse\")return;this._signal(\"beforeEndOperation\");if(!this.curOp)return;var t=this.curOp.command,n=t&&t.scrollIntoView;if(n){switch(n){case\"center-animate\":n=\"animate\";case\"center\":this.renderer.scrollCursorIntoView(null,.5);break;case\"animate\":case\"cursor\":this.renderer.scrollCursorIntoView();break;case\"selectionPart\":var r=this.selection.getRange(),i=this.renderer.layerConfig;(r.start.row>=i.lastRow||r.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}n==\"animate\"&&this.renderer.animateScrolling(this.curOp.scrollTop)}var s=this.selection.toJSON();this.curOp.selectionAfter=s,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(s),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name==\"insertstring\"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\\s/.test(i)||/\\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!=\"always\"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e==\"string\"&&e!=\"ace\"){this.$keybindingId=e;var n=this;g.loadModule([\"keybinding\",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off(\"change\",this.$onDocumentChange),this.session.off(\"changeMode\",this.$onChangeMode),this.session.off(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.session.off(\"changeTabSize\",this.$onChangeTabSize),this.session.off(\"changeWrapLimit\",this.$onChangeWrapLimit),this.session.off(\"changeWrapMode\",this.$onChangeWrapMode),this.session.off(\"changeFold\",this.$onChangeFold),this.session.off(\"changeFrontMarker\",this.$onChangeFrontMarker),this.session.off(\"changeBackMarker\",this.$onChangeBackMarker),this.session.off(\"changeBreakpoint\",this.$onChangeBreakpoint),this.session.off(\"changeAnnotation\",this.$onChangeAnnotation),this.session.off(\"changeOverwrite\",this.$onCursorChange),this.session.off(\"changeScrollTop\",this.$onScrollTopChange),this.session.off(\"changeScrollLeft\",this.$onScrollLeftChange);var n=this.session.getSelection();n.off(\"changeCursor\",this.$onCursorChange),n.off(\"changeSelection\",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on(\"change\",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on(\"changeMode\",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on(\"changeTabSize\",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on(\"changeWrapLimit\",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on(\"changeWrapMode\",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on(\"changeFold\",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on(\"changeFrontMarker\",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on(\"changeBackMarker\",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on(\"changeBreakpoint\",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on(\"changeAnnotation\",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on(\"changeOverwrite\",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on(\"changeScrollTop\",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on(\"changeScrollLeft\",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on(\"changeCursor\",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on(\"changeSelection\",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal(\"changeSession\",{session:e,oldSession:t}),this.curOp=null,t&&t._signal(\"changeEditor\",{oldEditor:this}),e&&e._signal(\"changeEditor\",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption(\"fontSize\")||i.computedStyle(this.container).fontSize},this.setFontSize=function(e){this.setOption(\"fontSize\",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,\"ace_bracket\",\"text\"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}if(i.type.indexOf(\"tag-open\")!=-1){i=r.stepForward();if(!i)return}var s=i.value,o=0,u=r.stepBackward();if(u.value==\"<\"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(i&&o>=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(u&&o<=0);r.stepForward()}if(!i){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}var a=r.getCurrentTokenRow(),f=r.getCurrentTokenColumn(),l=new p(a,f,a,f+i.value.length),c=t.$backMarkers[t.$tagHighlight];t.$tagHighlight&&c!=undefined&&l.compareRange(c.range)!==0&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),t.$tagHighlight||(t.$tagHighlight=t.addMarker(l,\"ace_bracket\",\"text\"))},50)},this.focus=function(){var e=this;setTimeout(function(){e.isFocused()||e.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){if(this.$isFocused)return;this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit(\"focus\",e)},this.onBlur=function(e){if(!this.$isFocused)return;this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit(\"blur\",e)},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=this.session.$useWrapMode,n=e.start.row==e.end.row?e.end.row:Infinity;this.renderer.updateLines(e.start.row,n,t),this._signal(\"change\",e),this.$cursorChange(),this.$updateHighlightActiveLine()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine(),this._signal(\"changeSelection\")},this.$updateHighlightActiveLine=function(){var e=this.getSession(),t;if(this.$highlightActiveLine){if(this.$selectionStyle!=\"line\"||!this.selection.isMultiLine())t=this.getCursorPosition();this.renderer.theme&&this.renderer.theme.$selectionColorConflict&&!this.selection.isEmpty()&&(t=!1),this.renderer.$maxLines&&this.session.getLength()===1&&!(this.renderer.$minLines>1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,\"ace_active-line\",\"screenLine\"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal(\"changeBackMarker\"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,\"ace_selection\",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal(\"changeSelection\")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column,r=t.end.column,i=e.getLine(t.start.row),s=i.substring(n,r);if(s.length>5e3||!/[\\w\\d]/.test(s))return;var o=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s}),u=i.substring(n-1,r+1);if(!o.test(u))return;return o},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit(\"changeMode\",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText(),t=this.session.doc.getNewLineCharacter(),n=!1;if(!e&&this.$copyWithEmptySelection){n=!0;var r=this.selection.getAllRanges();for(var i=0;i<r.length;i++){var s=r[i];if(i&&r[i-1].start.row==s.start.row)continue;e+=this.session.getLine(s.start.row)+t}}var o={text:e};return this._signal(\"copy\",o),b.lineMode=n?o.text:\"\",o.text},this.onCopy=function(){this.commands.exec(\"copy\",this)},this.onCut=function(){this.commands.exec(\"cut\",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec(\"paste\",this,n)},this.$handlePaste=function(e){typeof e==\"string\"&&(e={text:e}),this._signal(\"paste\",e);var t=e.text,n=t==b.lineMode,r=this.session;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)n?r.insert({row:this.selection.lead.row,column:0},t):this.insert(t);else if(n)this.selection.rangeList.ranges.forEach(function(e){r.insert({row:e.start.row,column:0},t)});else{var i=t.split(/\\r\\n|\\r|\\n/),s=this.selection.rangeList.ranges;if(i.length>s.length||i.length<2||!i[1])return this.commands.exec(\"insertstring\",this,t);for(var o=s.length;o--;){var u=s[o];u.isEmpty()||r.remove(u),r.insert(u.start,i[o])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),\"insertion\",this,n,e);s&&(e!==s.text&&(this.inVirtualSelectionMode||(this.session.mergeUndoDeltas=!1,this.mergeNextCommand=!1)),e=s.text)}e==\"\t\"&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()&&e.indexOf(\"\\n\")==-1){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e==\"\\n\"||e==\"\\r\\n\"){var u=n.getLine(i.row);if(i.column>u.search(/\\S|$/)){var a=u.substr(i.column).search(/\\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:\"insertstring\"}});var n=this.applyComposition.bind(this,e,t);this.selection.rangeCount?this.forEachSelection(n):n(),this.endOperation()},this.applyComposition=function(e,t){if(t.extendLeft||t.extendRight){var n=this.selection.getRange();n.start.column-=t.extendLeft,n.end.column+=t.extendRight,this.selection.setRange(n),!e&&!n.isEmpty()&&this.remove()}(e||!this.selection.isEmpty())&&this.insert(e,!0);if(t.restoreStart||t.restoreEnd){var n=this.selection.getRange();n.start.column-=t.restoreStart,n.end.column-=t.restoreEnd,this.selection.setRange(n)}},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption(\"scrollSpeed\",e)},this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\")},this.setDragDelay=function(e){this.setOption(\"dragDelay\",e)},this.getDragDelay=function(){return this.getOption(\"dragDelay\")},this.setSelectionStyle=function(e){this.setOption(\"selectionStyle\",e)},this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\")},this.setHighlightActiveLine=function(e){this.setOption(\"highlightActiveLine\",e)},this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\")},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.setHighlightSelectedWord=function(e){this.setOption(\"highlightSelectedWord\",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption(\"readOnly\",e)},this.getReadOnly=function(){return this.getOption(\"readOnly\")},this.setBehavioursEnabled=function(e){this.setOption(\"behavioursEnabled\",e)},this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\")},this.setWrapBehavioursEnabled=function(e){this.setOption(\"wrapBehavioursEnabled\",e)},this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\")},this.setShowFoldWidgets=function(e){this.setOption(\"showFoldWidgets\",e)},this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.remove=function(e){this.selection.isEmpty()&&(e==\"left\"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,\"deletion\",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]==\"\\n\"){var o=n.getLine(t.end.row);/^\\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert(\"\\n\"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;t<n.length?(r=n.charAt(t)+n.charAt(t-1),i=new p(e.row,t-1,e.row,t+1)):(r=n.charAt(t-1)+n.charAt(t-2),i=new p(e.row,t-2,e.row,t)),this.session.replace(i,r),this.session.selection.moveToPosition(i.end)},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(t.start.row<t.end.row){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}if(t.start.column<t.end.column){var r=e.getTextRange(t);if(!/^\\s+$/.test(r)){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}}var i=e.getLine(t.start.row),o=t.start,u=e.getTabSize(),a=e.documentToScreenColumn(o.row,o.column);if(this.session.getUseSoftTabs())var f=u-a%u,l=s.stringRepeat(\" \",f);else{var f=a%u;while(i[t.start.column-1]==\" \"&&f)t.start.column--,f--;this.selection.setSelectionRange(t),l=\"\t\"}return this.insert(l)},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,\"\t\")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){var e=this.$getSelectedRows(),t=this.session,n=[];for(var r=e.first;r<=e.last;r++)n.push(t.getLine(r));n.sort(function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0});var i=new p(0,0,0,0);for(var r=e.first;r<=e.last;r++){var s=t.getLine(r);i.start.row=r,i.end.row=r,i.end.column=s.length,t.replace(i,n[r-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex<t){var i=n.exec(r);if(i.index<=t&&i.index+i[0].length>=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(\".\")>=0?s.start+s.value.indexOf(\".\")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&n<o?e*=Math.pow(10,s.end-n-1):e*=Math.pow(10,s.end-n),a+=e,a/=Math.pow(10,u);var f=a.toFixed(u),l=new p(t,s.start,t,s.end);this.session.replace(l,f),this.moveCursorTo(t,Math.max(s.start+1,n+f.length-s.value.length))}}else this.toggleWord()},this.$toggleWordPairs=[[\"first\",\"last\"],[\"true\",\"false\"],[\"yes\",\"no\"],[\"width\",\"height\"],[\"top\",\"bottom\"],[\"right\",\"left\"],[\"on\",\"off\"],[\"x\",\"y\"],[\"get\",\"set\"],[\"max\",\"min\"],[\"horizontal\",\"vertical\"],[\"show\",\"hide\"],[\"add\",\"remove\"],[\"up\",\"down\"],[\"before\",\"after\"],[\"even\",\"odd\"],[\"inside\",\"outside\"],[\"next\",\"previous\"],[\"increase\",\"decrease\"],[\"attach\",\"detach\"],[\"&&\",\"||\"],[\"==\",\"!=\"]],this.toggleWord=function(){var e=this.selection.getCursor().row,t=this.selection.getCursor().column;this.selection.selectWord();var n=this.getSelectedText(),r=this.selection.getWordRange().start.column,i=n.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g,\"$1 \").split(/\\s/),o=t-r-1;o<0&&(o=0);var u=0,a=0,f=this;n.match(/[A-Za-z0-9_]+/)&&i.forEach(function(t,i){a=u+t.length,o>=u&&o<=a&&(n=t,f.selection.clearSelection(),f.moveCursorTo(e,u+r),f.selection.selectTo(e,a+r)),u=a});var l=this.$toggleWordPairs,c;for(var h=0;h<l.length;h++){var p=l[h];for(var d=0;d<=1;d++){var v=+!d,m=n.match(new RegExp(\"^\\\\s?_?(\"+s.escapeRegExp(p[d])+\")\\\\s?$\",\"i\"));if(m){var g=n.match(new RegExp(\"([_]|^|\\\\s)(\"+s.escapeRegExp(m[1])+\")($|\\\\s)\",\"g\"));g&&(c=n.replace(new RegExp(s.escapeRegExp(p[d]),\"i\"),function(e){var t=p[v];return e.toUpperCase()==e?t=t.toUpperCase():e.charAt(0).toUpperCase()==e.charAt(0)&&(t=t.substr(0,0)+p[v].charAt(0).toUpperCase()+t.substr(1)),t}),this.insert(c),c=\"\")}}}},this.removeLines=function(){var e=this.$getSelectedRows();this.session.removeFullLines(e.first,e.last),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,n=e.getRange(),r=e.isBackwards();if(n.isEmpty()){var i=n.start.row;t.duplicateLines(i,i)}else{var s=r?n.start:n.end,o=t.insert(s,t.getTextRange(n),!1);n.start=s,n.end=o,e.setSelectionRange(n,r)}},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,n){return this.session.moveText(e,t,n)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var n,r,i=this.selection;if(!i.inMultiSelectMode||this.inVirtualSelectionMode){var s=i.toOrientedRange();n=this.$getSelectedRows(s),r=this.session.$moveLines(n.first,n.last,t?0:e),t&&e==-1&&(r=0),s.moveBy(r,0),i.fromOrientedRange(s)}else{var o=i.rangeList.ranges;i.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;var u=0,a=0,f=o.length;for(var l=0;l<f;l++){var c=l;o[l].moveBy(u,0),n=this.$getSelectedRows(o[l]);var h=n.first,p=n.last;while(++l<f){a&&o[l].moveBy(a,0);var d=this.$getSelectedRows(o[l]);if(t&&d.first!=p)break;if(!t&&d.first>p+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection());var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(s.value.match(/[{}()\\[\\]]/g))for(;f<s.value.length&&!u;f++){if(!c[s.value[f]])continue;l=c[s.value[f]]+\".\"+s.type.replace(\"rparen\",\"lparen\"),isNaN(a[l])&&(a[l]=0);switch(s.value[f]){case\"(\":case\"[\":case\"{\":a[l]++;break;case\")\":case\"]\":case\"}\":a[l]--,a[l]===-1&&(o=\"bracket\",u=!0)}}else s.type.indexOf(\"tag-name\")!==-1&&(isNaN(a[s.value])&&(a[s.value]=0),i.value===\"<\"?a[s.value]++:i.value===\"</\"&&a[s.value]--,a[s.value]===-1&&(o=\"tag\",u=!0));u||(i=s,s=r.stepForward(),f=0)}while(s&&!u);if(!o)return;var h,d;if(o===\"bracket\"){h=this.session.getBracketRange(n);if(!h){h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1,r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1),d=h.start;if(t||d.row===n.row&&Math.abs(d.column-n.column)<2)h=this.session.getBracketRange(d)}}else if(o===\"tag\"){if(!s||s.type.indexOf(\"tag-name\")===-1)return;var v=s.value;h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2,r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2);if(h.compare(n.row,n.column)===0){u=!1;do s=i,i=r.stepBackward(),i&&(i.type.indexOf(\"tag-close\")!==-1&&h.setEnd(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+1),s.value===v&&s.type.indexOf(\"tag-name\")!==-1&&(i.value===\"<\"?a[v]++:i.value===\"</\"&&a[v]--,a[v]===0&&(u=!0)));while(i&&!u)}s&&s.type.indexOf(\"tag-name\")&&(d=h.start,d.row==n.row&&Math.abs(d.column-n.column)<2&&(d=h.end))}d=h&&h.cursor||d,d&&(e?h&&t?this.selection.setRange(h):h&&h.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(d.row,d.column):this.selection.moveTo(d.row,d.column))},this.gotoLine=function(e,t,n){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,n)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var n=this.$search.find(this.session),r=0;return n?(this.$tryReplace(n,e)&&(r=1),this.selection.setSelectionRange(n),this.renderer.scrollSelectionIntoView(n.start,n.end),r):r},this.replaceAll=function(e,t){t&&this.$search.set(t);var n=this.$search.findAll(this.session),r=0;if(!n.length)return r;var i=this.getSelectionRange();this.selection.moveTo(0,0);for(var s=n.length-1;s>=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e==\"string\"||e instanceof RegExp?t.needle=e:typeof e==\"object\"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.session.unfold(e),this.selection.setSelectionRange(e);var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal(\"destroy\",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement(\"div\"));var i=this.$scrollAnchor;i.style.cssText=\"position:absolute\",this.container.insertBefore(i,this.container.firstChild);var s=this.on(\"changeSelection\",function(){r=!0}),o=this.renderer.on(\"beforeRender\",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on(\"afterRender\",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.top<o.height&&s.top+t.top+o.lineHeight>window.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+\"px\",i.style.left=s.left+\"px\",i.style.height=o.lineHeight+\"px\",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.off(\"changeSelection\",s),this.renderer.off(\"afterRender\",u),this.renderer.off(\"beforeRender\",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||\"ace\",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!=\"wide\",i.setCssClass(t.element,\"ace_slim-cursors\",/slim/.test(e))}}.call(w.prototype),g.defineOptions(w.prototype,\"editor\",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal(\"changeSelectionStyle\",{data:e})},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[!1,!0,\"always\"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?E.attach(this):E.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?E.attach(this):E.detach(this)}},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",displayIndentGuides:\"renderer\",showGutter:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",hasCssTransforms:\"renderer\",maxPixelHeight:\"renderer\",useTextareaForIME:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimeout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",navigateWithinSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",indentedSoftWrap:\"session\",foldStyle:\"session\",mode:\"session\"});var E={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?\"\\u00b7\":\"\"))+\"\"},getWidth:function(e,t,n){return Math.max(t.toString().length,(n.lastRow+1).toString().length,2)*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on(\"changeSelection\",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off(\"changeSelection\",this.update),this.update(null,e)}};t.Editor=w}),define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";function i(e,t){for(var n=t;n--;){var r=e[n];if(r&&!r[0].ignore){while(n<t-1){var i=d(e[n],e[n+1]);e[n]=i[0],e[n+1]=i[1],n++}return!0}}}function a(e){var t=e.action==\"insert\",n=e.start,r=e.end,i=(r.row-n.row)*(t?1:-1),s=(r.column-n.column)*(t?1:-1);t&&(r=n);for(var o in this.marks){var a=this.marks[o],f=u(a,n);if(f<0)continue;if(f===0&&t){if(a.bias!=1){a.bias==-1;continue}f=1}var l=t?f:u(a,r);if(l>0){a.row+=i,a.column+=a.row==r.row?s:0;continue}!t&&l<=0&&(a.row=n.row,a.column=n.column,l===0&&(a.bias=1))}}function f(e){return{row:e.row,column:e.column}}function l(e){return{start:f(e.start),end:f(e.end),action:e.action,lines:e.lines.slice()}}function c(e){e=e||this;if(Array.isArray(e))return e.map(c).join(\"\\n\");var t=\"\";e.action?(t=e.action==\"insert\"?\"+\":\"-\",t+=\"[\"+e.lines+\"]\"):e.value&&(Array.isArray(e.value)?t=e.value.map(h).join(\"\\n\"):t=h(e.value)),e.start&&(t+=h(e));if(e.id||e.rev)t+=\"\t(\"+(e.id||e.rev)+\")\";return t}function h(e){return e.start.row+\":\"+e.start.column+\"=>\"+e.end.row+\":\"+e.end.column}function p(e,t){var n=e.action==\"insert\",r=t.action==\"insert\";if(n&&r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}else if(!n&&r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(!n&&!r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}return[t,e]}function d(e,t){for(var n=e.length;n--;)for(var r=0;r<t.length;r++)if(!p(e[n],t[r])){while(n<e.length){while(r--)p(t[r],e[n]);r=t.length,n++}return[e,t]}return e.selectionBefore=t.selectionBefore=e.selectionAfter=t.selectionAfter=null,[t,e]}function v(e,t){var n=e.action==\"insert\",r=t.action==\"insert\";if(n&&r)o(e.start,t.start)<0?m(t,e,1):m(e,t,1);else if(n&&!r)o(e.start,t.end)>=0?m(e,t,-1):o(e.start,t.start)<=0?m(t,e,1):(m(e,s.fromPoints(t.start,e.start),-1),m(t,e,1));else if(!n&&r)o(t.start,e.end)>=0?m(t,e,-1):o(t.start,e.start)<=0?m(e,t,1):(m(t,s.fromPoints(e.start,t.start),-1),m(e,t,1));else if(!n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0)){var i,u;return o(e.start,t.start)<0&&(i=e,e=y(e,t.start)),o(e.end,t.end)>0&&(u=y(e,t.end)),g(t.end,e.start,e.end,-1),u&&!i&&(e.lines=u.lines,e.start=u.start,e.end=u.end,u=e),[t,i,u].filter(Boolean)}m(e,t,-1)}return[t,e]}function m(e,t,n){g(e.start,t.start,t.end,n),g(e.end,t.start,t.end,n)}function g(e,t,n,r){e.row==(r==1?t:n).row&&(e.column+=r*(n.column-t.column)),e.row+=r*(n.row-t.row)}function y(e,t){var n=e.lines,r=e.end;e.end=f(t);var i=e.end.row-e.start.row,s=n.splice(i,n.length),o=i?t.column:t.column-e.start.column;n.push(s[0].substring(0,o)),s[0]=s[0].substr(o);var u={start:f(t),end:r,lines:s,action:e.action};return u}function b(e,t){t=l(t);for(var n=e.length;n--;){var r=e[n];for(var i=0;i<r.length;i++){var s=r[i],o=v(s,t);t=o[0],o.length!=2&&(o[2]?(r.splice(i+1,1,o[1],o[2]),i++):o[1]||(r.splice(i,1),i--))}r.length||e.splice(n,1)}return e}function w(e,t){for(var n=0;n<t.length;n++){var r=t[n];for(var i=0;i<r.length;i++)b(e,r[i])}}var r=function(){this.$maxRev=0,this.$fromUndo=!1,this.reset()};(function(){this.addSession=function(e){this.$session=e},this.add=function(e,t,n){if(this.$fromUndo)return;if(e==this.$lastDelta)return;if(t===!1||!this.lastDeltas)this.lastDeltas=[],this.$undoStack.push(this.lastDeltas),e.id=this.$rev=++this.$maxRev;if(e.action==\"remove\"||e.action==\"insert\")this.$lastDelta=e;this.lastDeltas.push(e)},this.addSelection=function(e,t){this.selections.push({value:e,rev:t||this.$rev})},this.startNewGroup=function(){return this.lastDeltas=null,this.$rev},this.markIgnored=function(e,t){t==null&&(t=this.$rev+1);var n=this.$undoStack;for(var r=n.length;r--;){var i=n[r][0];if(i.id<=e)break;i.id<t&&(i.ignore=!0)}this.lastDeltas=null},this.getSelection=function(e,t){var n=this.selections;for(var r=n.length;r--;){var i=n[r];if(i.rev<e)return t&&(i=n[r+1]),i}},this.getRevision=function(){return this.$rev},this.getDeltas=function(e,t){t==null&&(t=this.$rev+1);var n=this.$undoStack,r=null,i=0;for(var s=n.length;s--;){var o=n[s][0];o.id<t&&!r&&(r=s+1);if(o.id<=e){i=s+1;break}}return n.slice(i,r)},this.getChangedRanges=function(e,t){t==null&&(t=this.$rev+1)},this.getChangedLines=function(e,t){t==null&&(t=this.$rev+1)},this.undo=function(e,t){this.lastDeltas=null;var n=this.$undoStack;if(!i(n,n.length))return;e||(e=this.$session),this.$redoStackBaseRev!==this.$rev&&this.$redoStack.length&&(this.$redoStack=[]),this.$fromUndo=!0;var r=n.pop(),s=null;return r&&r.length&&(s=e.undoChanges(r,t),this.$redoStack.push(r),this.$syncRev()),this.$fromUndo=!1,s},this.redo=function(e,t){this.lastDeltas=null,e||(e=this.$session),this.$fromUndo=!0;if(this.$redoStackBaseRev!=this.$rev){var n=this.getDeltas(this.$redoStackBaseRev,this.$rev+1);w(this.$redoStack,n),this.$redoStackBaseRev=this.$rev,this.$redoStack.forEach(function(e){e[0].id=++this.$maxRev},this)}var r=this.$redoStack.pop(),i=null;return r&&(i=e.redoChanges(r,t),this.$undoStack.push(r),this.$syncRev()),this.$fromUndo=!1,i},this.$syncRev=function(){var e=this.$undoStack,t=e[e.length-1],n=t&&t[0].id||0;this.$redoStackBaseRev=n,this.$rev=n},this.reset=function(){this.lastDeltas=null,this.$lastDelta=null,this.$undoStack=[],this.$redoStack=[],this.$rev=0,this.mark=0,this.$redoStackBaseRev=this.$rev,this.selections=[]},this.canUndo=function(){return this.$undoStack.length>0},this.canRedo=function(){return this.$redoStack.length>0},this.bookmark=function(e){e==undefined&&(e=this.$rev),this.mark=e},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(e){return e?c(e):c(this.$undoStack)+\"\\n---\\n\"+c(this.$redoStack)}}).call(r.prototype);var s=e(\"./range\").Range,o=s.comparePoints,u=s.comparePoints;t.UndoManager=r}),define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=function(e,t){this.element=e,this.canvasHeight=t||5e5,this.element.style.height=this.canvasHeight*2+\"px\",this.cells=[],this.cellCache=[],this.$offsetCoefficient=0};(function(){this.moveContainer=function(e){r.translate(this.element,0,-(e.firstRowScreen*e.lineHeight%this.canvasHeight)-e.offset*this.$offsetCoefficient)},this.pageChanged=function(e,t){return Math.floor(e.firstRowScreen*e.lineHeight/this.canvasHeight)!==Math.floor(t.firstRowScreen*t.lineHeight/this.canvasHeight)},this.computeLineTop=function(e,t,n){var r=t.firstRowScreen*t.lineHeight,i=Math.floor(r/this.canvasHeight),s=n.documentToScreenRow(e,0)*t.lineHeight;return s-i*this.canvasHeight},this.computeLineHeight=function(e,t,n){return t.lineHeight*n.getRowLength(e)},this.getLength=function(){return this.cells.length},this.get=function(e){return this.cells[e]},this.shift=function(){this.$cacheCell(this.cells.shift())},this.pop=function(){this.$cacheCell(this.cells.pop())},this.push=function(e){if(Array.isArray(e)){this.cells.push.apply(this.cells,e);var t=r.createFragment(this.element);for(var n=0;n<e.length;n++)t.appendChild(e[n].element);this.element.appendChild(t)}else this.cells.push(e),this.element.appendChild(e.element)},this.unshift=function(e){if(Array.isArray(e)){this.cells.unshift.apply(this.cells,e);var t=r.createFragment(this.element);for(var n=0;n<e.length;n++)t.appendChild(e[n].element);this.element.firstChild?this.element.insertBefore(t,this.element.firstChild):this.element.appendChild(t)}else this.cells.unshift(e),this.element.insertAdjacentElement(\"afterbegin\",e.element)},this.last=function(){return this.cells.length?this.cells[this.cells.length-1]:null},this.$cacheCell=function(e){if(!e)return;e.element.remove(),this.cellCache.push(e)},this.createCell=function(e,t,n,i){var s=this.cellCache.pop();if(!s){var o=r.createElement(\"div\");i&&i(o),this.element.appendChild(o),s={element:o,text:\"\",row:e}}return s.row=e,s}}).call(i.prototype),t.Lines=i}),define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\"],function(e,t,n){\"use strict\";function f(e){var t=document.createTextNode(\"\");e.appendChild(t);var n=r.createElement(\"span\");return e.appendChild(n),e}var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"../lib/event_emitter\").EventEmitter,u=e(\"./lines\").Lines,a=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_gutter-layer\",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$lines=new u(this.element),this.$lines.$offsetCoefficient=1};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener(\"change\",this.$updateAnnotations),this.session=e,e&&e.on(\"change\",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.addGutterDecoration\"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.removeGutterDecoration\"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var n=e[t],r=n.row,i=this.$annotations[r];i||(i=this.$annotations[r]={text:[]});var o=n.text;o=o?s.escapeHTML(o):n.html||\"\",i.text.indexOf(o)===-1&&i.text.push(o);var u=n.type;u==\"error\"?i.className=\" ace_error\":u==\"warning\"&&i.className!=\" ace_error\"?i.className=\" ace_warning\":u==\"info\"&&!i.className&&(i.className=\" ace_info\")}},this.$updateAnnotations=function(e){if(!this.$annotations.length)return;var t=e.start.row,n=e.end.row-t;if(n!==0)if(e.action==\"remove\")this.$annotations.splice(t,n+1,null);else{var r=new Array(n+1);r.unshift(t,1),this.$annotations.splice.apply(this.$annotations,r)}},this.update=function(e){this.config=e;var t=this.session,n=e.firstRow,r=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1);this.oldLastRow=r,this.config=e,this.$lines.moveContainer(e),this.$updateCursorRow();var i=t.getNextFoldLine(n),s=i?i.start.row:Infinity,o=null,u=-1,a=n;for(;;){a>s&&(a=i.end.row+1,i=t.getNextFoldLine(a,i),s=i?i.start.row:Infinity);if(a>r){while(this.$lines.getLength()>u+1)this.$lines.pop();break}o=this.$lines.get(++u),o?o.row=a:(o=this.$lines.createCell(a,e,this.session,f),this.$lines.push(o)),this.$renderCell(o,e,i,a),a++}this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,n=t.gutterRenderer||this.$renderer,r=t.$firstLineNumber,i=this.$lines.last()?this.$lines.last().text:\"\";if(this.$fixedWidth||t.$useWrapMode)i=t.getLength()+r-1;var s=n?n.getWidth(t,i,e):i.toString().length*e.characterWidth,o=this.$padding||this.$computePadding();s+=o.left+o.right,s!==this.gutterWidth&&!isNaN(s)&&(this.gutterWidth=s,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+\"px\",this._signal(\"changeGutterWidth\",s))},this.$updateCursorRow=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.getCursor();if(this.$cursorRow===e.row)return;this.$cursorRow=e.row},this.updateLineHighlight=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.cursor.row;this.$cursorRow=e;if(this.$cursorCell&&this.$cursorCell.row==e)return;this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\"));var t=this.$lines.cells;this.$cursorCell=null;for(var n=0;n<t.length;n++){var r=t[n];if(r.row>=this.$cursorRow){if(r.row>this.$cursorRow){var i=this.session.getFoldLine(this.$cursorRow);if(!(n>0&&i&&i.start.row==t[n-1].row))break;r=t[n-1]}r.element.className=\"ace_gutter-active-line \"+r.element.className,this.$cursorCell=r;break}}},this.scrollLines=function(e){var t=this.config;this.config=e,this.$updateCursorRow();if(this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=Math.min(e.lastRow+e.gutterOffset,this.session.getLength()-1),r=this.oldLastRow;this.oldLastRow=n;if(!t||r<e.firstRow)return this.update(e);if(n<t.firstRow)return this.update(e);if(t.firstRow<e.firstRow)for(var i=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);i>0;i--)this.$lines.shift();if(r>n)for(var i=this.session.getFoldedRowCount(n+1,r);i>0;i--)this.$lines.pop();e.firstRow<t.firstRow&&this.$lines.unshift(this.$renderLines(e,e.firstRow,t.firstRow-1)),n>r&&this.$lines.push(this.$renderLines(e,r+1,n)),this.updateLineHighlight(),this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$renderLines=function(e,t,n){var r=[],i=t,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>n)break;var u=this.$lines.createCell(i,e,this.session,f);this.$renderCell(u,e,s,i),r.push(u),i++}return r},this.$renderCell=function(e,t,n,i){var s=e.element,o=this.session,u=s.childNodes[0],a=s.childNodes[1],f=o.$firstLineNumber,l=o.$breakpoints,c=o.$decorations,h=o.gutterRenderer||this.$renderer,p=this.$showFoldWidgets&&o.foldWidgets,d=n?n.start.row:Number.MAX_VALUE,v=\"ace_gutter-cell \";this.$highlightGutterLine&&(i==this.$cursorRow||n&&i<this.$cursorRow&&i>=d&&this.$cursorRow<=n.end.row)&&(v+=\"ace_gutter-active-line \",this.$cursorCell!=e&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\")),this.$cursorCell=e)),l[i]&&(v+=l[i]),c[i]&&(v+=c[i]),this.$annotations[i]&&(v+=this.$annotations[i].className),s.className!=v&&(s.className=v);if(p){var m=p[i];m==null&&(m=p[i]=o.getFoldWidget(i))}if(m){var v=\"ace_fold-widget ace_\"+m;m==\"start\"&&i==d&&i<n.end.row?v+=\" ace_closed\":v+=\" ace_open\",a.className!=v&&(a.className=v);var g=t.lineHeight+\"px\";r.setStyle(a.style,\"height\",g),r.setStyle(a.style,\"display\",\"inline-block\")}else a&&r.setStyle(a.style,\"display\",\"none\");var y=(h?h.getText(o,i):i+f).toString();return y!==u.data&&(u.data=y),r.setStyle(e.element.style,\"height\",this.$lines.computeLineHeight(i,t,o)+\"px\"),r.setStyle(e.element.style,\"top\",this.$lines.computeLineTop(i,t,o)+\"px\"),e.text=y,e},this.$fixedWidth=!1,this.$highlightGutterLine=!0,this.$renderer=\"\",this.setHighlightGutterLine=function(e){this.$highlightGutterLine=e},this.$showLineNumbers=!0,this.$renderer=\"\",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return 0},getText:function(){return\"\"}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?r.addCssClass(this.element,\"ace_folding-enabled\"):r.removeCssClass(this.element,\"ace_folding-enabled\"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=r.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=(parseInt(e.borderLeftWidth)||0)+(parseInt(e.paddingLeft)||0)+1,this.$padding.right=(parseInt(e.borderRightWidth)||0)+(parseInt(e.paddingRight)||0),this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),n=this.element.getBoundingClientRect();if(e.x<t.left+n.left)return\"markers\";if(this.$showFoldWidgets&&e.x>n.right-t.right)return\"foldWidgets\"}}).call(a.prototype),t.Gutter=a}),define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../lib/dom\"),s=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_marker-layer\",e.appendChild(this.element)};(function(){function e(e,t,n,r){return(e?1:0)|(t?2:0)|(n?4:0)|(r?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var n=this.i!=-1&&this.element.childNodes[this.i];n?this.i++:(n=document.createElement(\"div\"),this.element.appendChild(n),this.i=-1),n.style.cssText=t,n.className=e},this.update=function(e){if(!e)return;this.config=e,this.i=0;var t;for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type==\"fullLine\"?this.drawFullLineMarker(t,i,r.clazz,e):r.type==\"screenLine\"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type==\"text\"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+\" ace_start\"+\" ace_br15\",e)}if(this.i!=-1)while(this.i<this.element.childElementCount)this.element.removeChild(this.element.lastChild)},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,n,i,s,o){var u=this.session,a=n.start.row,f=n.end.row,l=a,c=0,h=0,p=u.getScreenLastRowColumn(l),d=new r(l,n.start.column,l,h);for(;l<=f;l++)d.start.row=d.end.row=l,d.start.column=l==a?n.start.column:u.getRowWrapIndent(l),d.end.column=p,c=h,h=p,p=l+1<f?u.getScreenLastRowColumn(l+1):l==f?0:n.end.column,this.drawSingleLineMarker(t,d,i+(l==a?\" ace_start\":\"\")+\" ace_br\"+e(l==a||l==a+1&&n.start.column,c<h,h>p,l==f),s,l==f?0:1,o)},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;i=i||\"\";if(this.session.$bidiHandler.isBidiRow(t.start.row)){var f=t.clone();f.end.row=f.start.row,f.end.column=this.session.getLine(f.start.row).length,this.drawBidiSingleLineMarker(e,f,n+\" ace_br1 ace_start\",r,null,i)}else this.elt(n+\" ace_br1 ace_start\",\"height:\"+o+\"px;\"+\"right:0;\"+\"top:\"+u+\"px;left:\"+a+\"px;\"+(i||\"\"));if(this.session.$bidiHandler.isBidiRow(t.end.row)){var f=t.clone();f.start.row=f.end.row,f.start.column=0,this.drawBidiSingleLineMarker(e,f,n+\" ace_br12\",r,null,i)}else{u=this.$getTop(t.end.row,r);var l=t.end.column*r.characterWidth;this.elt(n+\" ace_br12\",\"height:\"+o+\"px;\"+\"width:\"+l+\"px;\"+\"top:\"+u+\"px;\"+\"left:\"+s+\"px;\"+(i||\"\"))}o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<=0)return;u=this.$getTop(t.start.row+1,r);var c=(t.start.column?1:0)|(t.end.column?0:8);this.elt(n+(c?\" ace_br\"+c:\"\"),\"height:\"+o+\"px;\"+\"right:0;\"+\"top:\"+u+\"px;\"+\"left:\"+s+\"px;\"+(i||\"\"))},this.drawSingleLineMarker=function(e,t,n,r,i,s){if(this.session.$bidiHandler.isBidiRow(t.start.row))return this.drawBidiSingleLineMarker(e,t,n,r,i,s);var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;this.elt(n,\"height:\"+o+\"px;\"+\"width:\"+u+\"px;\"+\"top:\"+a+\"px;\"+\"left:\"+f+\"px;\"+(s||\"\"))},this.drawBidiSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=this.$getTop(t.start.row,r),a=this.$padding,f=this.session.$bidiHandler.getSelections(t.start.column,t.end.column);f.forEach(function(e){this.elt(n,\"height:\"+o+\"px;\"+\"width:\"+e.width+(i||0)+\"px;\"+\"top:\"+u+\"px;\"+\"left:\"+(a+e.left)+\"px;\"+(s||\"\"))},this)},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),this.elt(n,\"height:\"+o+\"px;\"+\"top:\"+s+\"px;\"+\"left:0;right:0;\"+(i||\"\"))},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;this.elt(n,\"height:\"+o+\"px;\"+\"top:\"+s+\"px;\"+\"left:0;right:0;\"+(i||\"\"))}}).call(s.prototype),t.Marker=s}),define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"./lines\").Lines,u=e(\"../lib/event_emitter\").EventEmitter,a=function(e){this.dom=i,this.element=this.dom.createElement(\"div\"),this.element.className=\"ace_layer ace_text-layer\",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new o(this.element)};(function(){r.implement(this,u),this.EOF_CHAR=\"\\u00b6\",this.EOL_CHAR_LF=\"\\u00ac\",this.EOL_CHAR_CRLF=\"\\u00a4\",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR=\"\\u2014\",this.SPACE_CHAR=\"\\u00b7\",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var e=this.session.doc,t=e.getNewLineCharacter()==\"\\n\"&&e.getNewLineMode()!=\"windows\",n=t?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=n)return this.EOL_CHAR=n,!0},this.setPadding=function(e){this.$padding=e,this.element.style.margin=\"0 \"+e+\"px\"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on(\"changeCharacterSize\",function(e){this._signal(\"changeCharacterSize\",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n<e+1;n++)if(this.showInvisibles){var r=this.dom.createElement(\"span\");r.className=\"ace_invisible ace_invisible_tab\",r.textContent=s.stringRepeat(this.TAB_CHAR,n),t.push(r)}else t.push(this.dom.createTextNode(s.stringRepeat(\" \",n),this.element));if(this.displayIndentGuides){this.$indentGuideRe=/\\s\\S| \\t|\\t |\\s$/;var i=\"ace_indent-guide\",o=\"\",u=\"\";if(this.showInvisibles){i+=\" ace_invisible\",o=\" ace_invisible_space\",u=\" ace_invisible_tab\";var a=s.stringRepeat(this.SPACE_CHAR,this.tabSize),f=s.stringRepeat(this.TAB_CHAR,this.tabSize)}else var a=s.stringRepeat(\" \",this.tabSize),f=a;var r=this.dom.createElement(\"span\");r.className=i+o,r.textContent=a,this.$tabStrings[\" \"]=r;var r=this.dom.createElement(\"span\");r.className=i+u,r.textContent=f,this.$tabStrings[\"\t\"]=r}},this.updateLines=function(e,t,n){if(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)return this.update(e);this.config=e;var r=Math.max(t,e.firstRow),i=Math.min(n,e.lastRow),s=this.element.childNodes,o=0;for(var u=e.firstRow;u<r;u++){var a=this.session.getFoldLine(u);if(a){if(a.containsRow(r)){r=a.start.row;break}u=a.end.row}o++}var f=!1,u=r,a=this.session.getNextFoldLine(u),l=a?a.start.row:Infinity;for(;;){u>l&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),l=a?a.start.row:Infinity);if(u>i)break;var c=s[o++];if(c){this.dom.removeChildren(c),this.$renderLine(c,u,u==l?a:!1);var h=e.lineHeight*this.session.getRowLength(u)+\"px\";c.style.height!=h&&(f=!0,c.style.height=h)}u++}if(f)while(o<this.$lines.cells.length){var p=this.$lines.cells[o++];p.element.style.top=this.$lines.computeLineTop(p.row,e,this.session)+\"px\"}},this.scrollLines=function(e){var t=this.config;this.config=e;if(this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=e.lastRow,r=t?t.lastRow:-1;if(!t||r<e.firstRow)return this.update(e);if(n<t.firstRow)return this.update(e);if(!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);if(t.firstRow<e.firstRow)for(var i=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);i>0;i--)this.$lines.shift();if(t.lastRow>e.lastRow)for(var i=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);i>0;i--)this.$lines.pop();e.firstRow<t.firstRow&&this.$lines.unshift(this.$renderLinesFragment(e,e.firstRow,t.firstRow-1)),e.lastRow>t.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,n){var r=[],s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=this.$lines.createCell(s,e,this.session),f=a.element;this.dom.removeChildren(f),i.setStyle(f.style,\"height\",this.$lines.computeLineHeight(s,e,this.session)+\"px\"),i.setStyle(f.style,\"top\",this.$lines.computeLineTop(s,e,this.session)+\"px\"),this.$renderLine(f,s,s==u?o:!1),this.$useLineGroups()?f.className=\"ace_line_group\":f.className=\"ace_line\",r.push(a),s++}return r},this.update=function(e){this.$lines.moveContainer(e),this.config=e;var t=e.firstRow,n=e.lastRow,r=this.$lines;while(r.getLength())r.pop();r.push(this.$renderLinesFragment(e,t,n))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var o=this,u=/(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g,a=this.dom.createFragment(this.element),f,l=0;while(f=u.exec(r)){var c=f[1],h=f[2],p=f[3],d=f[4],v=f[5];if(!o.showInvisibles&&h)continue;var m=l!=f.index?r.slice(l,f.index):\"\";l=f.index+f[0].length,m&&a.appendChild(this.dom.createTextNode(m,this.element));if(c){var g=o.session.getScreenTabSize(t+f.index);a.appendChild(o.$tabStrings[g].cloneNode(!0)),t+=g-1}else if(h)if(o.showInvisibles){var y=this.dom.createElement(\"span\");y.className=\"ace_invisible ace_invisible_space\",y.textContent=s.stringRepeat(o.SPACE_CHAR,h.length),a.appendChild(y)}else a.appendChild(this.com.createTextNode(h,this.element));else if(p){var y=this.dom.createElement(\"span\");y.className=\"ace_invisible ace_invisible_space ace_invalid\",y.textContent=s.stringRepeat(o.SPACE_CHAR,p.length),a.appendChild(y)}else if(d){var b=o.showInvisibles?o.SPACE_CHAR:\"\";t+=1;var y=this.dom.createElement(\"span\");y.style.width=o.config.characterWidth*2+\"px\",y.className=o.showInvisibles?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\",y.textContent=o.showInvisibles?o.SPACE_CHAR:\"\",a.appendChild(y)}else if(v){t+=1;var y=i.createElement(\"span\");y.style.width=o.config.characterWidth*2+\"px\",y.className=\"ace_cjk\",y.textContent=v,a.appendChild(y)}}a.appendChild(this.dom.createTextNode(l?r.slice(l):r,this.element));if(!this.$textToken[n.type]){var w=\"ace_\"+n.type.replace(/\\./g,\" ace_\"),y=this.dom.createElement(\"span\");n.type==\"fold\"&&(y.style.width=n.value.length*this.config.characterWidth+\"px\"),y.className=w,y.appendChild(a),e.appendChild(y)}else e.appendChild(a);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);if(r<=0||r>=n)return t;if(t[0]==\" \"){r-=r%this.tabSize;var i=r/this.tabSize;for(var s=0;s<i;s++)e.appendChild(this.$tabStrings[\" \"].cloneNode(!0));return t.substr(r)}if(t[0]==\"\t\"){for(var s=0;s<r;s++)e.appendChild(this.$tabStrings[\"\t\"].cloneNode(!0));return t.substr(r)}return t},this.$createLineElement=function(e){var t=this.dom.createElement(\"div\");return t.className=\"ace_line\",t.style.height=this.config.lineHeight+\"px\",t},this.$renderWrappedLine=function(e,t,n){var r=0,i=0,o=n[0],u=0,a=this.$createLineElement();e.appendChild(a);for(var f=0;f<t.length;f++){var l=t[f],c=l.value;if(f==0&&this.displayIndentGuides){r=c.length,c=this.renderIndentGuide(a,c,o);if(!c)continue;r-=c.length}if(r+c.length<o)u=this.$renderToken(a,u,l,c),r+=c.length;else{while(r+c.length>=o)u=this.$renderToken(a,u,l,c.substring(0,o-r)),c=c.substring(o-r),r=o,a=this.$createLineElement(),e.appendChild(a),a.appendChild(this.dom.createTextNode(s.stringRepeat(\"\\u00a0\",n.indent),this.element)),i++,u=0,o=n[i]||Number.MAX_VALUE;c.length!=0&&(r+=c.length,u=this.$renderToken(a,u,l,c))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s<t.length;s++){r=t[s],i=r.value;if(n+i.length>this.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,n,r,i);n=this.$renderToken(e,n,r,i)}},this.$renderOverflowMessage=function(e,t,n,r){this.$renderToken(e,t,n,r.slice(0,this.MAX_LINE_LENGTH-t));var i=this.dom.createElement(\"span\");i.className=\"ace_inline_button ace_keyword ace_toggle_wrap\",i.style.position=\"absolute\",i.style.right=\"0\",i.textContent=\"<click to see more...>\",e.appendChild(i)},this.$renderLine=function(e,t,n){!n&&n!=0&&(n=this.session.getFoldLine(t));if(n)var r=this.$getFoldLineTokens(t,n);else var r=this.session.getTokens(t);var i=e;if(r.length){var s=this.session.getRowSplitData(t);if(s&&s.length){this.$renderWrappedLine(e,r,s);var i=e.lastChild}else{var i=e;this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i)),this.$renderSimpleLine(i,r)}}else this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i));if(this.showInvisibles&&i){n&&(t=n.end.row);var o=this.dom.createElement(\"span\");o.className=\"ace_invisible ace_invisible_eol\",o.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,i.appendChild(o)}},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.length<t){s+=e[i].value.length,i++;if(i==e.length)return}if(s!=t){var o=e[i].value.substring(t-s);o.length>n-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(s<n&&i<e.length){var o=e[i].value;o.length+s>n?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:\"fold\",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(a.prototype),t.Text=a}),define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_cursor-layer\",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,\"ace_hidden-cursors\"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)r.setStyle(t[n].style,\"opacity\",e?\"\":\"0\")},this.$startCssAnimation=function(){var e=this.cursors;for(var t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+\"ms\";setTimeout(function(){r.addCssClass(this.element,\"ace_animate-blinking\")}.bind(this))},this.$stopCssAnimation=function(){r.removeCssClass(this.element,\"ace_animate-blinking\")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,r.setCssClass(this.element,\"ace_smooth-blinking\",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=r.createElement(\"div\");return e.className=\"ace_cursor\",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&r.removeCssClass(this.element,\"ace_smooth-blinking\"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible){this.$stopCssAnimation();return}this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,\"ace_smooth-blinking\")}.bind(this));if(r.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.isCursorInView=function(e,t){return e.top>=0&&e.top<t.maxHeight},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,i=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=0,s=t.length;n<s;n++){var o=this.getPixelPosition(t[n].cursor,!0);if((o.top>e.height+e.offset||o.top<0)&&n>1)continue;var u=this.cursors[i++]||this.addCursor(),a=u.style;this.drawCursor?this.drawCursor(u,o,e,t[n],this.session):this.isCursorInView(o,e)?(r.setStyle(a,\"display\",\"block\"),r.translate(u,o.left,o.top),r.setStyle(a,\"width\",Math.round(e.characterWidth)+\"px\"),r.setStyle(a,\"height\",e.lineHeight+\"px\")):r.setStyle(a,\"display\",\"none\")}while(this.cursors.length>i)this.removeCursor();var f=this.session.getOverwrite();this.$setOverwrite(f),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,\"ace_overwrite-cursors\"):r.removeCssClass(this.element,\"ace_overwrite-cursors\"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(i.prototype),t.Cursor=i}),define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/event\"),o=e(\"./lib/event_emitter\").EventEmitter,u=32768,a=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix,this.inner=i.createElement(\"div\"),this.inner.className=\"ace_scrollbar-inner\",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,\"scroll\",this.onScroll.bind(this)),s.addListener(this.element,\"mousedown\",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?\"\":\"none\",this.isVisible=e,this.coeff=1}}).call(a.prototype);var f=function(e,t){a.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\",this.$minWidth=0};r.inherits(f,a),function(){this.classSuffix=\"-v\",this.onScroll=function(){if(!this.skipEvent){this.scrollTop=this.element.scrollTop;if(this.coeff!=1){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit(\"scroll\",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+\"px\"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>u?(this.coeff=u/e,e=u):this.coeff!=1&&(this.coeff=1),this.inner.style.height=e+\"px\"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(f.prototype);var l=function(e,t){a.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\"};r.inherits(l,a),function(){this.classSuffix=\"-h\",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit(\"scroll\",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+\"px\"},this.setInnerWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(l.prototype),t.ScrollBar=f,t.ScrollBarV=f,t.ScrollBarH=l,t.VScrollBar=f,t.HScrollBar=l}),define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"./lib/event\"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var n=this;this._flush=function(e){n.pending=!1;var t=n.changes;t&&(r.blockIdle(100),n.changes=0,n.onRender(t));if(n.changes){if(n.$recursionLimit--<0)return;n.schedule()}else n.$recursionLimit=2}};(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(r.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call(i.prototype),t.RenderLoop=i}),define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"../lib/event\"),u=e(\"../lib/useragent\"),a=e(\"../lib/event_emitter\").EventEmitter,f=256,l=typeof ResizeObserver==\"function\",c=200,h=t.FontMetrics=function(e){this.el=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.innerHTML=s.stringRepeat(\"X\",f),this.$characterSize={width:0,height:0},l?this.$addObserver():this.checkForSizeChanges()};(function(){r.implement(this,a),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height=\"auto\",e.left=e.top=\"0px\",e.visibility=\"hidden\",e.position=\"absolute\",e.whiteSpace=\"pre\",u.isIE<8?e[\"font-family\"]=\"inherit\":e.font=\"inherit\",e.overflow=t?\"hidden\":\"visible\"},this.checkForSizeChanges=function(e){e===undefined&&(e=this.$measureSizes());if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight=\"bold\";var t=this.$measureSizes();this.$measureNode.style.fontWeight=\"\",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit(\"changeCharacterSize\",{data:e})}},this.$addObserver=function(){var e=this;this.$observer=new window.ResizeObserver(function(t){var n=t[0].contentRect;e.checkForSizeChanges({height:n.height,width:n.width/f})}),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=o.onIdle(function t(){e.checkForSizeChanges(),o.onIdle(t,500)},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){var t={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/f};return t.width===0||t.height===0?null:t},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,f);var t=this.$main.getBoundingClientRect();return t.width/f},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(e,t){return[\"div\",{style:\"position: absolute;top:\"+e+\"px;left:\"+t+\"px;\"}]};this.els=i.buildDom([e(0,0),e(c,0),e(0,c),e(c,c)],this.el)},this.transformCoordinates=function(e,t){function r(e,t,n){var r=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1])/r,(+e[1]*n[0]-e[0]*n[1])/r]}function i(e,t){return[e[0]-t[0],e[1]-t[1]]}function s(e,t){return[e[0]+t[0],e[1]+t[1]]}function o(e,t){return[e*t[0],e*t[1]]}function u(e){var t=e.getBoundingClientRect();return[t.left,t.top]}if(e){var n=this.$getZoom(this.el);e=o(1/n,e)}this.els||this.$initTransformMeasureNodes();var a=u(this.els[0]),f=u(this.els[1]),l=u(this.els[2]),h=u(this.els[3]),p=r(i(h,f),i(h,l),i(s(f,l),s(h,a))),d=o(1+p[0],i(f,a)),v=o(1+p[1],i(l,a));if(t){var m=t,g=p[0]*m[0]/c+p[1]*m[1]/c+1,y=s(o(m[0],d),o(m[1],v));return s(o(1/g/c,y),a)}var b=i(e,a),w=r(i(d,o(p[0],b)),i(v,o(p[1],b)),b);return o(c,w)}}).call(h.prototype)}),define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./config\"),o=e(\"./layer/gutter\").Gutter,u=e(\"./layer/marker\").Marker,a=e(\"./layer/text\").Text,f=e(\"./layer/cursor\").Cursor,l=e(\"./scrollbar\").HScrollBar,c=e(\"./scrollbar\").VScrollBar,h=e(\"./renderloop\").RenderLoop,p=e(\"./layer/font_metrics\").FontMetrics,d=e(\"./lib/event_emitter\").EventEmitter,v='.ace_br1 {border-top-left-radius    : 3px;}.ace_br2 {border-top-right-radius   : 3px;}.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'source-code-pro\\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \\'\\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block;   }.ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}',m=e(\"./lib/useragent\"),g=m.isIE;i.importCssString(v,\"ace_editor.css\");var y=function(e,t){var n=this;this.container=e||i.createElement(\"div\"),i.addCssClass(this.container,\"ace_editor\"),i.HI_DPI&&i.addCssClass(this.container,\"ace_hidpi\"),this.setTheme(t),this.$gutter=i.createElement(\"div\"),this.$gutter.className=\"ace_gutter\",this.container.appendChild(this.$gutter),this.$gutter.setAttribute(\"aria-hidden\",!0),this.scroller=i.createElement(\"div\"),this.scroller.className=\"ace_scroller\",this.container.appendChild(this.scroller),this.content=i.createElement(\"div\"),this.content.className=\"ace_content\",this.scroller.appendChild(this.content),this.$gutterLayer=new o(this.$gutter),this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this)),this.$markerBack=new u(this.content);var r=this.$textLayer=new a(this.content);this.canvas=r.element,this.$markerFront=new u(this.content),this.$cursorLayer=new f(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new c(this.container,this),this.scrollBarH=new l(this.container,this),this.scrollBarV.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener(\"changeCharacterSize\",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal(\"changeCharacterSize\",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!m.isIOS,this.$loop=new h(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit(\"renderer\",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,d),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle(\"ace_nobold\",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t};if(this.$changedLines.lastRow<this.layerConfig.firstRow){if(!n)return;this.$changedLines.lastRow=this.layerConfig.lastRow}if(this.$changedLines.firstRow>this.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var s=0,o=this.$size,u={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};r&&(e||o.height!=r)&&(o.height=r,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\",s|=this.CHANGE_SCROLL);if(n&&(e||o.width!=n)){s|=this.CHANGE_SIZE,o.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,i.setStyle(this.scrollBarH.element.style,\"left\",t+\"px\"),i.setStyle(this.scroller.style,\"left\",t+this.margin.left+\"px\"),o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()-this.margin.h),i.setStyle(this.$gutter.style,\"left\",this.margin.left+\"px\");var a=this.scrollBarV.getWidth()+\"px\";i.setStyle(this.scrollBarH.element.style,\"right\",a),i.setStyle(this.scroller.style,\"right\",a),i.setStyle(this.scroller.style,\"bottom\",this.scrollBarH.getHeight());if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)s|=this.CHANGE_FULL}return o.$dirty=!n||!r,s&&this._signal(\"resize\",u),s},this.onGutterResize=function(e){var t=this.$showGutter?e:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption(\"animatedScroll\",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption(\"showInvisibles\",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\")},this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\")},this.setDisplayIndentGuides=function(e){this.setOption(\"displayIndentGuides\",e)},this.setShowPrintMargin=function(e){this.setOption(\"showPrintMargin\",e)},this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\")},this.setPrintMarginColumn=function(e){this.setOption(\"printMarginColumn\",e)},this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\")},this.getShowGutter=function(){return this.getOption(\"showGutter\")},this.setShowGutter=function(e){return this.setOption(\"showGutter\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement(\"div\");e.className=\"ace_layer ace_print-margin-layer\",this.$printMarginEl=i.createElement(\"div\"),this.$printMarginEl.className=\"ace_print-margin\",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+\"px\",t.visibility=this.$showPrintMargin?\"visible\":\"hidden\",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){var e=this.textarea.style;if(!this.$keepTextAreaAtCursor){i.translate(this.textarea,-100,0);return}var t=this.$cursorLayer.$pixelPos;if(!t)return;var n=this.$composition;n&&n.markerRange&&(t=this.$cursorLayer.getPixelPosition(n.markerRange.start,!0));var r=this.layerConfig,s=t.top,o=t.left;s-=r.offset;var u=n&&n.useTextareaForIME?this.lineHeight:g?0:1;if(s<0||s>r.height-u){i.translate(this.textarea,0,0);return}var a=1;if(!n)s+=this.lineHeight;else if(n.useTextareaForIME){var f=this.textarea.value;a=this.characterWidth*this.session.$getStringScreenWidth(f)[0],u+=2}else s+=this.lineHeight+2;o-=this.scrollLeft,o>this.$size.scrollerWidth-a&&(o=this.$size.scrollerWidth-a),o+=this.gutterWidth+this.margin.left,i.setStyle(e,\"height\",u+\"px\"),i.setStyle(e,\"width\",a+\"px\"),i.translate(this.textarea,Math.min(o,this.$size.scrollerWidth-a),Math.min(s,this.$size.height-u))},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.setMargin=function(e,t,n,r){var i=this.margin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption(\"hScrollBarAlwaysVisible\",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption(\"vScrollBarAlwaysVisible\",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal(\"beforeRender\"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig()|this.$loop.clear();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig()|this.$loop.clear())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),i.translate(this.content,-this.scrollLeft,-n.offset);var s=n.width+2*this.$padding+\"px\",o=n.minHeight+\"px\";i.setStyle(this.content.style,\"width\",s),i.setStyle(this.content.style,\"height\",o)}e&this.CHANGE_H_SCROLL&&(i.translate(this.content,-this.scrollLeft,-n.offset),this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal(\"afterRender\");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&(e&this.CHANGE_GUTTER||e&this.CHANGE_LINES?this.$gutterLayer.update(n):this.$gutterLayer.scrollLines(n)),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal(\"afterRender\");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(n):e&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal(\"afterRender\")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var r=n<=2*this.lineHeight,i=!r&&e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var s=this.container.clientWidth;this.container.style.height=n+\"px\",this.$updateCachedSize(!0,this.$gutterWidth,s,n),this.desiredHeight=n,this._signal(\"autosize\")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),u=this.$horizScroll!==o;u&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var f=t.scrollerHeight+this.lineHeight,l=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=l;var c=this.scrollMargin;this.session.setScrollTop(Math.max(-c.top,Math.min(this.scrollTop,i-t.scrollerHeight+c.bottom))),this.session.setScrollLeft(Math.max(-c.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+c.right)));var h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+l<0||this.scrollTop>c.top),p=a!==h;p&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var d=this.scrollTop%this.lineHeight,v=Math.ceil(f/this.lineHeight)-1,m=Math.max(0,Math.round((this.scrollTop-d)/this.lineHeight)),g=m+v,y,b,w=this.lineHeight;m=e.screenToDocumentRow(m,0);var E=e.getFoldLine(m);E&&(m=E.start.row),y=e.documentToScreenRow(m,0),b=e.getRowLength(m)*w,g=Math.min(e.screenToDocumentRow(g,0),e.getLength()-1),f=t.scrollerHeight+e.getRowLength(g)*w+b,d=this.scrollTop-y*w;var S=0;if(this.layerConfig.width!=s||u)S=this.CHANGE_H_SCROLL;if(u||p)S=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal(\"scrollbarVisibilityChanged\"),p&&(s=this.$getLongestLine());return this.layerConfig={width:s,padding:this.$padding,firstRow:m,firstRowScreen:y,lastRow:g,lineHeight:w,characterWidth:this.characterWidth,minHeight:f,maxHeight:i,offset:d,gutterOffset:w?Math.max(0,Math.ceil((d+t.height-t.scrollerHeight)/w)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(s-this.$padding),S},this.$updateLines=function(){if(!this.$changedLines)return;var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(t<n.firstRow)return;if(t===Infinity){this.$showGutter&&this.$gutterLayer.update(n),this.$textLayer.update(n);return}return this.$textLayer.updateLines(n,e,t),!0},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),this.$textLayer&&e>this.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(this.$size.scrollerHeight===0)return;var r=this.$cursorLayer.getPixelPosition(e),i=r.left,s=r.top,o=n&&n.top||0,u=n&&n.bottom||0,a=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;a+o>s?(t&&a+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-u<s+this.lineHeight&&(t&&a+this.$size.scrollerHeight-u<s-this.lineHeight&&(s+=t*this.$size.scrollerHeight),this.session.setScrollTop(s+this.lineHeight+u-this.$size.scrollerHeight));var f=this.scrollLeft;f>i?(i<this.$padding+2*this.layerConfig.characterWidth&&(i=-this.scrollMargin.left),this.session.setScrollLeft(i)):f+this.$size.scrollerWidth<i+this.characterWidth?this.session.setScrollLeft(Math.round(i+this.characterWidth-this.$size.scrollerWidth)):f<=this.$padding&&i-f<this.characterWidth&&this.session.setScrollLeft(0)},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){typeof e==\"number\"&&(e={row:e,column:0});var n=this.$cursorLayer.getPixelPosition(e),r=this.$size.scrollerHeight-this.lineHeight,i=n.top-r*(t||0);return this.session.setScrollTop(i),i},this.STEPS=8,this.$calcSteps=function(e,t){var n=0,r=this.STEPS,i=[],s=function(e,t,n){return n*(Math.pow(e-1,3)+1)+t};for(n=0;n<r;++n)i.push(s(n/this.STEPS,e,t-e));return i},this.scrollToLine=function(e,t,n,r){var i=this.$cursorLayer.getPixelPosition({row:e,column:0}),s=i.top;t&&(s-=this.$size.scrollerHeight/2);var o=this.scrollTop;this.session.setScrollTop(s),n!==!1&&this.animateScrolling(o,r)},this.animateScrolling=function(e,t){var n=this.scrollTop;if(!this.$animatedScroll)return;var r=this;if(e==n)return;if(this.$scrollAnimation){var i=this.$scrollAnimation.steps;if(i.length){e=i[0];if(e==n)return}}var s=r.$calcSteps(e,n);this.$scrollAnimation={from:e,to:n,steps:s},clearInterval(this.$timer),r.session.setScrollTop(s.shift()),r.session.$scrollTop=n,this.$timer=setInterval(function(){s.length?(r.session.setScrollTop(s.shift()),r.session.$scrollTop=n):n!=null?(r.session.$scrollTop=-1,r.session.setScrollTop(n),n=null):(r.$timer=clearInterval(r.$timer),r.$scrollAnimation=null,t&&t())},10)},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){if(t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),u=this.$blockCursor?Math.floor(s):Math.round(s);return{row:o,column:u,side:s-u>0?1:-1,offsetX:i}},this.screenToTextCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=this.$blockCursor?Math.floor(s):Math.round(s),u=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(u,Math.max(o,0),i)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+(this.session.$bidiHandler.isBidiRow(r.row,e)?this.session.$bidiHandler.getPosLeft(r.column):Math.round(r.column*this.characterWidth)),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,\"ace_focus\")},this.visualizeBlur=function(){i.removeCssClass(this.container,\"ace_focus\")},this.showComposition=function(e){this.$composition=e,e.cssText||(e.cssText=this.textarea.style.cssText,e.keepTextAreaAtCursor=this.$keepTextAreaAtCursor),e.useTextareaForIME=this.$useTextareaForIME,this.$useTextareaForIME?(this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=\"\",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display=\"none\"):e.markerId=this.session.addMarker(e.markerRange,\"ace_composition_marker\",\"text\")},this.setCompositionText=function(e){var t=this.session.selection.cursor;this.addToken(e,\"composition_placeholder\",t.row,t.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),i.removeCssClass(this.textarea,\"ace_composition\"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null,this.$cursorLayer.element.style.display=\"\"},this.addToken=function(e,t,n,r){var i=this.session;i.bgTokenizer.lines[n]=null;var s={type:t,value:e},o=i.getTokens(n);if(r==null)o.push(s);else{var u=0;for(var a=0;a<o.length;a++){var f=o[a];u+=f.value.length;if(r<=u){var l=f.value.length-(u-r),c=f.value.slice(0,l),h=f.value.slice(l);o.splice(a,1,{type:f.type,value:c},s,{type:f.type,value:h});break}}}this.updateLines(n,n)},this.setTheme=function(e,t){function o(r){if(n.$themeId!=e)return t&&t();if(!r||!r.cssClass)throw new Error(\"couldn't load module \"+e+\" or it didn't call define\");r.$id&&(n.$themeId=r.$id),i.importCssString(r.cssText,r.cssClass,n.container),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s=\"padding\"in r?r.padding:\"padding\"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,\"ace_dark\",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent(\"themeLoaded\",{theme:r}),t&&t()}var n=this;this.$themeId=e,n._dispatchEvent(\"themeChange\",{theme:e});if(!e||typeof e==\"string\"){var r=e||this.$options.theme.initialValue;s.loadModule([\"theme\",r],o)}else o(e)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,t!==!1)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){i.setStyle(this.scroller.style,\"cursor\",e)},this.setMouseCursor=function(e){i.setStyle(this.scroller.style,\"cursor\",e)},this.attachToShadowRoot=function(){i.importCssString(v,\"ace_editor.css\",this.container)},this.destroy=function(){this.$fontMetrics.destroy(),this.$cursorLayer.destroy()}}).call(y.prototype),s.defineOptions(y.prototype,\"renderer\",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){typeof e==\"number\"&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?\"block\":\"none\",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,\"ace_fade-fold-widgets\",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){this.$gutterLayer.setHighlightGutterLine(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},hScrollBarAlwaysVisible:{set:function(e){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){typeof e==\"number\"&&(e+=\"px\"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.$minLines<562949953421311||(this.$minLines=0),this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0;if(this.$scrollPastEnd==e)return;this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:\"./theme/textmate\",handlesSet:!0},hasCssTransforms:{},useTextareaForIME:{initialValue:!m.isMobile&&!m.isIE}}),t.VirtualRenderer=y}),define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"],function(e,t,n){\"use strict\";function u(e){var t=\"importScripts('\"+i.qualifyURL(e)+\"');\";try{return new Blob([t],{type:\"application/javascript\"})}catch(n){var r=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new r;return s.append(t),s.getBlob(\"application/javascript\")}}function a(e){if(typeof Worker==\"undefined\")return{postMessage:function(){},terminate:function(){}};if(o.get(\"loadWorkerFromBlob\")){var t=u(e),n=window.URL||window.webkitURL,r=n.createObjectURL(t);return new Worker(r)}return new Worker(e)}var r=e(\"../lib/oop\"),i=e(\"../lib/net\"),s=e(\"../lib/event_emitter\").EventEmitter,o=e(\"../config\"),f=function(e){e.postMessage||(e=this.$createWorkerFromOldConfig.apply(this,arguments)),this.$worker=e,this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.$createWorkerFromOldConfig=function(t,n,r,i,s){e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl);if(o.get(\"packaged\")||!e.toUrl)i=i||o.moduleUrl(n,\"worker\");else{var u=this.$normalizePath;i=i||u(e.toUrl(\"ace/worker/worker.js\",null,\"_\"));var f={};t.forEach(function(t){f[t]=u(e.toUrl(t,null,\"_\").replace(/(\\.js)?(\\?.*)?$/,\"\"))})}return this.$worker=a(i),s&&this.send(\"importScripts\",s),this.$worker.postMessage({init:!0,tlns:f,module:n,classname:r}),this.$worker},this.onMessage=function(e){var t=e.data;switch(t.type){case\"event\":this._signal(t.name,{data:t.data});break;case\"call\":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case\"error\":this.reportError(t.data);break;case\"log\":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal(\"terminate\",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off(\"change\",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{t.data&&t.data.err&&(t.data.err={message:t.data.err.message,stack:t.data.err.stack,code:t.data.err.code}),this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call(\"setValue\",[e.getValue()]),e.on(\"change\",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),e.action==\"insert\"?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;if(!e)return;this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call(\"setValue\",[this.$doc.getValue()]):this.emit(\"change\",{data:e})}}).call(f.prototype);var l=function(e,t,n){var r=null,i=!1,u=Object.create(s),a=[],l=new f({messageBuffer:a,terminate:function(){},postMessage:function(e){a.push(e);if(!r)return;i?setTimeout(c):c()}});l.setEmitSync=function(e){i=e};var c=function(){var e=a.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};return u.postMessage=function(e){l.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:\"call\",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:\"event\",name:e,data:t})},o.loadModule([\"worker\",t],function(e){r=new e[n](u);while(a.length)c()}),l};t.UIWorkerClient=l,t.WorkerClient=f,t.createWorker=a}),define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/oop\"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on(\"change\",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on(\"changeCursor\",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);r.$insertRight=!0,r.detach(),e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)},this.onUpdate=function(e){if(this.$updating)return this.updateAnchors(e);var t=e;if(t.start.row!==t.end.row)return;if(t.start.row!==this.pos.row)return;this.$updating=!0;var n=e.action===\"insert\"?t.end.column-t.start.column:t.start.column-t.end.column,i=t.start.column>=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;this.updateAnchors(e),i&&(this.length+=n);if(i&&!this.session.$fromUndo)if(e.action===\"insert\")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.insertMergedLines(a,e.lines)}else if(e.action===\"remove\")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.remove(new r(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(this.$updating)return;var e=this,t=this.session,n=function(n,i){t.removeMarker(n.markerId),n.markerId=t.addMarker(new r(n.row,n.column,n.row,n.column+e.length),i,null,!1)};n(this.pos,this.mainClass);for(var i=this.others.length;i--;)n(this.others[i],this.othersClass)},this.onCursorChange=function(e){if(this.$updating||!this.session)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit(\"cursorEnter\",e)):(this.hideOtherMarkers(),this._emit(\"cursorLeave\",e))},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener(\"change\",this.$onUpdate),this.session.selection.removeEventListener(\"changeCursor\",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(this.$undoStackDepth===-1)return;var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n<t;n++)e.undo(this.session,!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}).call(o.prototype),t.PlaceHolder=o}),define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){function s(e,t){return e.row==t.row&&e.column==t.column}function o(e){var t=e.domEvent,n=t.altKey,o=t.shiftKey,u=t.ctrlKey,a=e.getAccelKey(),f=e.getButton();u&&i.isMac&&(f=t.button);if(e.editor.inMultiSelectMode&&f==2){e.editor.textInput.onContextMenu(e.domEvent);return}if(!u&&!n&&!a){f===0&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode();return}if(f!==0)return;var l=e.editor,c=l.selection,h=l.inMultiSelectMode,p=e.getDocumentPosition(),d=c.getCursor(),v=e.inSelection()||c.isEmpty()&&s(p,d),m=e.x,g=e.y,y=function(e){m=e.clientX,g=e.clientY},b=l.session,w=l.renderer.pixelToScreenCoordinates(m,g),E=w,S;if(l.$mouseHandler.$enableJumpToDef)u&&n||a&&n?S=o?\"block\":\"add\":n&&l.$blockSelectEnabled&&(S=\"block\");else if(a&&!n){S=\"add\";if(!h&&o)return}else n&&l.$blockSelectEnabled&&(S=\"block\");S&&i.isMac&&t.ctrlKey&&l.$mouseHandler.cancelContextMenu();if(S==\"add\"){if(!h&&v)return;if(!h){var x=c.toOrientedRange();l.addSelectionMarker(x)}var T=c.rangeList.rangeAtPoint(p);l.inVirtualSelectionMode=!0,o&&(T=null,x=c.ranges[0]||x,l.removeSelectionMarker(x)),l.once(\"mouseup\",function(){var e=c.toOrientedRange();T&&e.isEmpty()&&s(T.cursor,e.cursor)?c.substractPoint(e.cursor):(o?c.substractPoint(x.cursor):x&&(l.removeSelectionMarker(x),c.addRange(x)),c.addRange(e)),l.inVirtualSelectionMode=!1})}else if(S==\"block\"){e.stop(),l.inVirtualSelectionMode=!0;var N,C=[],k=function(){var e=l.renderer.pixelToScreenCoordinates(m,g),t=b.screenToDocumentPosition(e.row,e.column,e.offsetX);if(s(E,e)&&s(t,c.lead))return;E=e,l.selection.moveToPosition(t),l.renderer.scrollCursorIntoView(),l.removeSelectionMarkers(C),C=c.rectangularRangeBlock(E,w),l.$mouseHandler.$clickSelection&&C.length==1&&C[0].isEmpty()&&(C[0]=l.$mouseHandler.$clickSelection.clone()),C.forEach(l.addSelectionMarker,l),l.updateSelectionMarkers()};h&&!a?c.toSingleRange():!h&&a&&(N=c.toOrientedRange(),l.addSelectionMarker(N)),o?w=b.documentToScreenPosition(c.lead):c.moveToPosition(p),E={row:-1,column:-1};var L=function(e){k(),clearInterval(O),l.removeSelectionMarkers(C),C.length||(C=[c.toOrientedRange()]),N&&(l.removeSelectionMarker(N),c.toSingleRange(N));for(var t=0;t<C.length;t++)c.addRange(C[t]);l.inVirtualSelectionMode=!1,l.$mouseHandler.$clickSelection=null},A=k;r.capture(l.container,y,L);var O=setInterval(function(){A()},20);return e.preventDefault()}}var r=e(\"../lib/event\"),i=e(\"../lib/useragent\");t.onMouseDown=o}),define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"],function(e,t,n){t.defaultCommands=[{name:\"addCursorAbove\",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:\"Ctrl-Alt-Up\",mac:\"Ctrl-Alt-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelow\",exec:function(e){e.selectMoreLines(1)},bindKey:{win:\"Ctrl-Alt-Down\",mac:\"Ctrl-Alt-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorAboveSkipCurrent\",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Up\",mac:\"Ctrl-Alt-Shift-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelowSkipCurrent\",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Down\",mac:\"Ctrl-Alt-Shift-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreBefore\",exec:function(e){e.selectMore(-1)},bindKey:{win:\"Ctrl-Alt-Left\",mac:\"Ctrl-Alt-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreAfter\",exec:function(e){e.selectMore(1)},bindKey:{win:\"Ctrl-Alt-Right\",mac:\"Ctrl-Alt-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextBefore\",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Left\",mac:\"Ctrl-Alt-Shift-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextAfter\",exec:function(e){e.selectMore(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Right\",mac:\"Ctrl-Alt-Shift-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"splitIntoLines\",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:\"Ctrl-Alt-L\",mac:\"Ctrl-Alt-L\"},readOnly:!0},{name:\"alignCursors\",exec:function(e){e.alignCursors()},bindKey:{win:\"Ctrl-Alt-A\",mac:\"Ctrl-Alt-A\"},scrollIntoView:\"cursor\"},{name:\"findAll\",exec:function(e){e.findAll()},bindKey:{win:\"Ctrl-Alt-K\",mac:\"Ctrl-Alt-G\"},scrollIntoView:\"cursor\",readOnly:!0}],t.multiSelectCommands=[{name:\"singleSelection\",bindKey:\"esc\",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:\"cursor\",readOnly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var r=e(\"../keyboard/hash_handler\").HashHandler;t.keyboardHandler=new r(t.multiSelectCommands)}),define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"],function(e,t,n){function h(e,t,n){return c.$options.wrap=!0,c.$options.needle=t,c.$options.backwards=n==-1,c.find(e)}function v(e,t){return e.row==t.row&&e.column==t.column}function m(e){if(e.$multiselectOnSessionChange)return;e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on(\"changeSession\",e.$multiselectOnSessionChange),e.on(\"mousedown\",o),e.commands.addCommands(f.defaultCommands),g(e)}function g(e){function r(t){n&&(e.renderer.setMouseCursor(\"\"),n=!1)}var t=e.textInput.getElement(),n=!1;u.addListener(t,\"keydown\",function(t){var i=t.keyCode==18&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&i?n||(e.renderer.setMouseCursor(\"crosshair\"),n=!0):n&&r()}),u.addListener(t,\"keyup\",r),u.addListener(t,\"blur\",r)}var r=e(\"./range_list\").RangeList,i=e(\"./range\").Range,s=e(\"./selection\").Selection,o=e(\"./mouse/multi_select_handler\").onMouseDown,u=e(\"./lib/event\"),a=e(\"./lib/lang\"),f=e(\"./commands/multi_select_commands\");t.commands=f.defaultCommands.concat(f.multiSelectCommands);var l=e(\"./search\").Search,c=new l,p=e(\"./edit_session\").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(p.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(!e)return;if(!this.inMultiSelectMode&&this.rangeCount===0){var n=this.toOrientedRange();this.rangeList.add(n),this.rangeList.add(e);if(this.rangeList.ranges.length!=2)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(n),this.$onAddRange(n)}e.cursor||(e.cursor=e.end);var r=this.rangeList.add(e);return this.$onAddRange(e),r.length&&this.$onRemoveRange(r),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal(\"multiSelect\"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length&&this.$onRemoveRange(e)},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal(\"addRange\",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal(\"removeRange\",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal(\"singleSelect\"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c<o;c++)f.push(this.getLineRange(c,!0));l=this.getLineRange(o,!0),l.end.column=n.end.column,f.push(l),f.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.cursor),s=this.session.documentToScreenPosition(this.anchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column<t.column;if(s)var o=e.column,u=t.column,a=e.offsetX,f=t.offsetX;else var o=t.column,u=e.column,a=t.offsetX,f=e.offsetX;var l=e.row<t.row;if(l)var c=e.row,h=t.row;else var c=t.row,h=e.row;o<0&&(o=0),c<0&&(c=0),c==h&&(n=!0);var p;for(var d=c;d<=h;d++){var m=i.fromPoints(this.session.screenToDocumentPosition(d,o,a),this.session.screenToDocumentPosition(d,u,f));if(m.isEmpty()){if(p&&v(m.end,p))break;p=m.end}m.cursor=s?m.start:m.end,r.push(m)}l&&r.reverse();if(!n){var g=r.length-1;while(r[g].isEmpty()&&g>0)g--;if(g>0){var y=0;while(r[y].isEmpty())y++}for(var b=g;b>=y;b--)r[b].isEmpty()&&r.splice(b,1)}return r}}.call(s.prototype);var d=e(\"./editor\").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,\"ace_selection\",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle(\"ace_multiselect\"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle(\"ace_multiselect\"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit(\"changeSelection\")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction==\"forEach\"?r=n.forEachSelection(t,e.args):t.multiSelectAction==\"forEachLine\"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction==\"single\"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges(),u.ranges[0]&&u.fromOrientedRange(u.ranges[0]);var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r<t.length;r++)n.push(this.session.getTextRange(t[r]));var i=this.session.getDocument().getNewLineCharacter();e=n.join(i),e.length==(n.length-1)*i.length&&(e=\"\")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var n=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&t==this.multiSelect.anchor)return;var r=t==this.multiSelect.anchor?n.cursor==n.start?n.end:n.start:n.cursor;r.row!=t.row||this.session.$clipPositionToDocument(r.row,r.column).column!=t.column?this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()):this.multiSelect.mergeOverlappingRanges()}},this.findAll=function(e,t,n){t=t||{},t.needle=e||t.needle;if(t.needle==undefined){var r=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(r)}this.$search.set(t);var i=this.$search.findAll(this.session);if(!i.length)return 0;var s=this.multiSelect;n||s.toSingleRange(i[0]);for(var o=i.length;o--;)s.addRange(i[o],!0);return r&&s.rangeList.rangeAtPoint(r.start)&&s.addRange(r,!0),i.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),r=n.cursor==n.end,s=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(s.column=this.selection.$desiredColumn);var o=this.session.screenToDocumentPosition(s.row+e,s.column);if(!n.isEmpty())var u=this.session.documentToScreenPosition(r?n.end:n.start),a=this.session.screenToDocumentPosition(u.row+e,u.column);else var a=o;if(r){var f=i.fromPoints(o,a);f.cursor=f.start}else{var f=i.fromPoints(a,o);f.cursor=f.end}f.desiredColumn=s.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(n);else if(t)var l=n.cursor;this.selection.addRange(f),l&&this.selection.substractPoint(l)},this.transposeSelections=function(e){var t=this.session,n=t.multiSelect,r=n.ranges;for(var i=r.length;i--;){var s=r[i];if(s.isEmpty()){var o=t.getWordRange(s.start.row,s.start.column);s.start.row=o.start.row,s.start.column=o.start.column,s.end.row=o.end.row,s.end.column=o.end.column}}n.mergeOverlappingRanges();var u=[];for(var i=r.length;i--;){var s=r[i];u.unshift(t.getTextRange(s))}e<0?u.unshift(u.pop()):u.push(u.shift());for(var i=r.length;i--;){var s=r[i],o=s.clone();t.replace(s,u[i]),s.start.row=o.start.row,s.start.column=o.start.column}n.fromOrientedRange(n.ranges[0])},this.selectMore=function(e,t,n){var r=this.session,i=r.multiSelect,s=i.toOrientedRange();if(s.isEmpty()){s=r.getWordRange(s.start.row,s.start.column),s.cursor=e==-1?s.start:s.end,this.multiSelect.addRange(s);if(n)return}var o=r.getTextRange(s),u=h(r,o,e);u&&(u.cursor=e==-1?u.start:u.end,this.session.unfold(u),this.multiSelect.addRange(u),this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(s.cursor)},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges,r=-1,s=n.filter(function(e){if(e.cursor.row==r)return!0;r=e.cursor.row});if(!n.length||s.length==n.length-1){var o=this.selection.getRange(),u=o.start.row,f=o.end.row,l=u==f;if(l){var c=this.session.getLength(),h;do h=this.session.getLine(f);while(/[=:]/.test(h)&&++f<c);do h=this.session.getLine(u);while(/[=:]/.test(h)&&--u>0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.removeFullLines(u,f);p=this.$reAlignText(p,l),this.session.insert({row:u,column:0},p.join(\"\\n\")+\"\\n\"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),i<v&&(v=i),i});n.forEach(function(t,n){var r=t.cursor,s=d-r.column,o=m[n]-v;s>o?e.insert(r,a.stringRepeat(\" \",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(\" \",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),s<t[2].length&&(s=t[2].length),o>t[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off(\"addRange\",this.$onAddRange),n.multiSelect.off(\"removeRange\",this.$onRemoveRange),n.multiSelect.off(\"multiSelect\",this.$onMultiSelect),n.multiSelect.off(\"singleSelect\",this.$onSingleSelect),n.multiSelect.lead.off(\"change\",this.$checkMultiselectChange),n.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange)),t&&(t.multiSelect.on(\"addRange\",this.$onAddRange),t.multiSelect.on(\"removeRange\",this.$onRemoveRange),t.multiSelect.on(\"multiSelect\",this.$onMultiSelect),t.multiSelect.on(\"singleSelect\",this.$onSingleSelect),t.multiSelect.lead.on(\"change\",this.$checkMultiselectChange),t.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e(\"./config\").defineOptions(d.prototype,\"editor\",{enableMultiselect:{set:function(e){m(this),e?(this.on(\"changeSession\",this.$multiselectOnSessionChange),this.on(\"mousedown\",o)):(this.off(\"changeSession\",this.$multiselectOnSessionChange),this.off(\"mousedown\",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../range\").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?\"start\":t==\"markbeginend\"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?\"end\":\"\"},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++t<a){var c=e.getLine(t).search(i);if(c==-1)continue;if(c<=o)break;l=t}if(l>f){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a==\"start\"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.$id=\"ace/theme/textmate\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)}),define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on(\"change\",this.updateOnChange),this.session.on(\"changeFold\",this.updateOnFold),this.session.on(\"changeEditor\",this.$onChangeEditor)}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./range\").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on(\"beforeRender\",this.measureWidgets),e.renderer.on(\"afterRender\",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off(\"beforeRender\",this.measureWidgets),t.renderer.off(\"afterRender\",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(!n||!e.action)return;var r=e.data,i=r.start.row,s=r.end.row,o=e.action==\"add\";for(var u=i+1;u<s;u++)n[u]&&(n[u].hidden=o);n[s]&&(o?n[i]?n[s].hidden=o:n[i]=n[s]:(n[i]==n[s]&&(n[i]=undefined),n[s].hidden=o))},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(!t)return;var n=e.start.row,r=e.end.row-n;if(r!==0)if(e.action==\"remove\"){var i=t.splice(n+1,r);i.forEach(function(e){e&&this.removeLineWidget(e)},this),this.$updateRows()}else{var s=new Array(r);s.unshift(n,0),t.splice.apply(t,s),this.$updateRows()}},this.$updateRows=function(){var e=this.session.lineWidgets;if(!e)return;var t=!0;e.forEach(function(e,n){if(e){t=!1,e.row=n;while(e.$oldWidget)e.$oldWidget.row=n,e=e.$oldWidget}}),t&&(this.session.lineWidgets=null)},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength()));var t=this.session.lineWidgets[e.row];t&&(e.$oldWidget=t,t.el&&t.el.parentNode&&(t.el.parentNode.removeChild(t.el),t._inDocument=!1)),this.session.lineWidgets[e.row]=e,e.session=this.session;var n=this.editor.renderer;e.html&&!e.el&&(e.el=i.createElement(\"div\"),e.el.innerHTML=e.html),e.el&&(i.addCssClass(e.el,\"ace_lineWidgetContainer\"),e.el.style.position=\"absolute\",e.el.style.zIndex=5,n.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),e.pixelHeight==null&&(e.pixelHeight=e.el.offsetHeight),e.rowCount==null&&(e.rowCount=e.pixelHeight/n.layerConfig.lineHeight);var r=this.session.getFoldAt(e.row,0);e.$fold=r;if(r){var s=this.session.lineWidgets;e.row==r.end.row&&!s[r.start.row]?s[r.start.row]=e:e.hidden=!0}return this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,n),this.onWidgetChanged(e),e},this.removeLineWidget=function(e){e._inDocument=!1,e.session=null,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el);if(e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(t){}if(this.session.lineWidgets){var n=this.session.lineWidgets[e.row];if(n==e)this.session.lineWidgets[e.row]=e.$oldWidget,e.$oldWidget&&this.onWidgetChanged(e.$oldWidget);else while(n){if(n.$oldWidget==e){n.$oldWidget=e.$oldWidget;break}n=n.$oldWidget}}this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows()},this.getWidgetsAtRow=function(e){var t=this.session.lineWidgets,n=t&&t[e],r=[];while(n)r.push(n),n=n.$oldWidget;return r},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,r=t.layerConfig;if(!n||!n.length)return;var i=Infinity;for(var s=0;s<n.length;s++){var o=n[s];if(!o||!o.el)continue;if(o.session!=this.session)continue;if(!o._inDocument){if(this.session.lineWidgets[o.row]!=o)continue;o._inDocument=!0,t.container.appendChild(o.el)}o.h=o.el.offsetHeight,o.fixedWidth||(o.w=o.el.offsetWidth,o.screenWidth=Math.ceil(o.w/r.characterWidth));var u=o.h/r.lineHeight;o.coverLine&&(u-=this.session.getRowLineCount(o.row),u<0&&(u=0)),o.rowCount!=u&&(o.rowCount=u,o.row<i&&(i=o.row))}i!=Infinity&&(this.session._emit(\"changeFold\",{data:{start:{row:i}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]},this.renderWidgets=function(e,t){var n=t.layerConfig,r=this.session.lineWidgets;if(!r)return;var i=Math.min(this.firstRow,n.firstRow),s=Math.max(this.lastRow,n.lastRow,r.length);while(i>0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;if(u.hidden){u.el.style.top=-100-(u.pixelHeight||0)+\"px\";continue}u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+\"px\";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+\"px\",u.fullWidth&&u.screenWidth&&(u.el.style.minWidth=n.width+2*n.padding+\"px\"),u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+\"px\":u.el.style.right=\"\"}}}).call(o.prototype),t.LineWidgets=o}),define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?\"unshift\":\"push\"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e(\"../line_widgets\").LineWidgets,i=e(\"../lib/dom\"),s=e(\"../range\").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.widgetManager.getWidgetsAtRow(o).filter(function(e){return e.type==\"errorMarker\"})[0];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!=\"number\"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:[\"Looks good!\"],className:\"ace_ok\"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement(\"div\"),type:\"errorMarker\"},p=h.el.appendChild(i.createElement(\"div\")),d=h.el.appendChild(i.createElement(\"div\"));d.className=\"error_widget_arrow \"+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+\"px\",h.el.className=\"error_widget_wrapper\",p.className=\"error_widget \"+l.className,p.innerHTML=l.text.join(\"<br>\"),p.appendChild(i.createElement(\"div\"));var m=function(e,t,n){if(t===0&&(n===\"esc\"||n===\"return\"))return h.destroy(),{command:\"null\"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off(\"changeSelection\",h.destroy),e.off(\"changeSession\",h.destroy),e.off(\"mouseup\",h.destroy),e.off(\"change\",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on(\"changeSelection\",h.destroy),e.on(\"changeSession\",h.destroy),e.on(\"mouseup\",h.destroy),e.on(\"change\",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(\"    .error_widget_wrapper {        background: inherit;        color: inherit;        border:none    }    .error_widget {        border-top: solid 2px;        border-bottom: solid 2px;        margin: 5px 0;        padding: 10px 40px;        white-space: pre-wrap;    }    .error_widget.ace_error, .error_widget_arrow.ace_error{        border-color: #ff5a5a    }    .error_widget.ace_warning, .error_widget_arrow.ace_warning{        border-color: #F1D817    }    .error_widget.ace_info, .error_widget_arrow.ace_info{        border-color: #5a5a5a    }    .error_widget.ace_ok, .error_widget_arrow.ace_ok{        border-color: #5aaa5a    }    .error_widget_arrow {        position: absolute;        border: solid 5px;        border-top-color: transparent!important;        border-right-color: transparent!important;        border-left-color: transparent!important;        top: -5px;    }\",\"\")}),define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/dom\"),i=e(\"./lib/event\"),s=e(\"./range\").Range,o=e(\"./editor\").Editor,u=e(\"./edit_session\").EditSession,a=e(\"./undomanager\").UndoManager,f=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.require=e,typeof define==\"function\"&&(t.define=define),t.edit=function(e,n){if(typeof e==\"string\"){var s=e;e=document.getElementById(s);if(!e)throw new Error(\"ace.edit can't find div #\"+s)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var u=\"\";if(e&&/input|textarea/i.test(e.tagName)){var a=e;u=a.value,e=r.createElement(\"pre\"),a.parentNode.replaceChild(e,a)}else e&&(u=e.textContent,e.innerHTML=\"\");var l=t.createEditSession(u),c=new o(new f(e),l,n),h={document:l,editor:c,onResize:c.resize.bind(c,null)};return a&&(h.textarea=a),i.addListener(window,\"resize\",h.onResize),c.on(\"destroy\",function(){i.removeListener(window,\"resize\",h.onResize),h.editor.container.env=null}),c.container.env=c.env=h,c},t.createEditSession=function(e,t){var n=new u(e,t);return n.setUndoManager(new a),n},t.Range=s,t.Editor=o,t.EditSession=u,t.UndoManager=a,t.VirtualRenderer=f,t.version=\"1.4.3\"});            (function() {\n                window.require([\"ace/ace\"], function(a) {\n                    if (a) {\n                        a.config.init(true);\n                        a.define = window.define;\n                    }\n                    if (!window.ace)\n                        window.ace = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        window.ace[key] = a[key];\n                    window.ace[\"default\"] = window.ace;\n                    if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                        module.exports = window.ace;\n                    }\n                });\n            })();\n        "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-beautify.js",
    "content": "define(\"ace/ext/beautify\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function i(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../token_iterator\").TokenIterator;t.singletonTags=[\"area\",\"base\",\"br\",\"col\",\"command\",\"embed\",\"hr\",\"html\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"],t.blockTags=[\"article\",\"aside\",\"blockquote\",\"body\",\"div\",\"dl\",\"fieldset\",\"footer\",\"form\",\"head\",\"header\",\"html\",\"nav\",\"ol\",\"p\",\"script\",\"section\",\"style\",\"table\",\"tbody\",\"tfoot\",\"thead\",\"ul\"],t.beautify=function(e){var n=new r(e,0,0),s=n.getCurrentToken(),o=e.getTabString(),u=t.singletonTags,a=t.blockTags,f,l=!1,c=!1,h=!1,p=\"\",d=\"\",v=\"\",m=0,g=0,y=0,b=0,w=0,E=0,S=0,x,T=0,N=0,C=[],k=!1,L,A=!1,O=!1,M=!1,_=!1,D={0:0},P=[],H=function(){f&&f.value&&f.type!==\"string.regexp\"&&(f.value=f.value.trim())},B=function(){p=p.replace(/ +$/,\"\")},j=function(){p=p.trimRight(),l=!1};while(s!==null){T=n.getCurrentTokenRow(),C=n.$rowTokens,f=n.stepForward();if(typeof s!=\"undefined\"){d=s.value,w=0,M=v===\"style\"||e.$modeId===\"ace/mode/css\",i(s,\"tag-open\")?(O=!0,f&&(_=a.indexOf(f.value)!==-1),d===\"</\"&&(_&&!l&&N<1&&N++,M&&(N=1),w=1,_=!1)):i(s,\"tag-close\")?O=!1:i(s,\"comment.start\")?_=!0:i(s,\"comment.end\")&&(_=!1),!O&&!N&&s.type===\"paren.rparen\"&&s.value.substr(0,1)===\"}\"&&N++,T!==x&&(N=T,x&&(N-=x));if(N){j();for(;N>0;N--)p+=\"\\n\";l=!0,!i(s,\"comment\")&&!s.type.match(/^(comment|string)$/)&&(d=d.trimLeft())}if(d){s.type===\"keyword\"&&d.match(/^(if|else|elseif|for|foreach|while|switch)$/)?(P[m]=d,H(),h=!0,d.match(/^(else|elseif)$/)&&p.match(/\\}[\\s]*$/)&&(j(),c=!0)):s.type===\"paren.lparen\"?(H(),d.substr(-1)===\"{\"&&(h=!0,A=!1,O||(N=1)),d.substr(0,1)===\"{\"&&(c=!0,p.substr(-1)!==\"[\"&&p.trimRight().substr(-1)===\"[\"?(j(),c=!1):p.trimRight().substr(-1)===\")\"?j():B())):s.type===\"paren.rparen\"?(w=1,d.substr(0,1)===\"}\"&&(P[m-1]===\"case\"&&w++,p.trimRight().substr(-1)===\"{\"?j():(c=!0,M&&(N+=2))),d.substr(0,1)===\"]\"&&p.substr(-1)!==\"}\"&&p.trimRight().substr(-1)===\"}\"&&(c=!1,b++,j()),d.substr(0,1)===\")\"&&p.substr(-1)!==\"(\"&&p.trimRight().substr(-1)===\"(\"&&(c=!1,b++,j()),B()):s.type!==\"keyword.operator\"&&s.type!==\"keyword\"||!d.match(/^(=|==|===|!=|!==|&&|\\|\\||and|or|xor|\\+=|.=|>|>=|<|<=|=>)$/)?s.type===\"punctuation.operator\"&&d===\";\"?(j(),H(),h=!0,M&&N++):s.type===\"punctuation.operator\"&&d.match(/^(:|,)$/)?(j(),H(),d.match(/^(,)$/)&&S>0&&E===0?N++:(h=!0,l=!1)):s.type===\"support.php_tag\"&&d===\"?>\"&&!l?(j(),c=!0):i(s,\"attribute-name\")&&p.substr(-1).match(/^\\s$/)?c=!0:i(s,\"attribute-equals\")?(B(),H()):i(s,\"tag-close\")&&(B(),d===\"/>\"&&(c=!0)):(j(),H(),c=!0,h=!0);if(l&&(!s.type.match(/^(comment)$/)||!!d.substr(0,1).match(/^[/#]$/))&&(!s.type.match(/^(string)$/)||!!d.substr(0,1).match(/^['\"]$/))){b=y;if(m>g){b++;for(L=m;L>g;L--)D[L]=b}else m<g&&(b=D[m]);g=m,y=b,w&&(b-=w),A&&!E&&(b++,A=!1);for(L=0;L<b;L++)p+=o}s.type===\"keyword\"&&d.match(/^(case|default)$/)&&(P[m]=d,m++),s.type===\"keyword\"&&d.match(/^(break)$/)&&P[m-1]&&P[m-1].match(/^(case|default)$/)&&m--,s.type===\"paren.lparen\"&&(E+=(d.match(/\\(/g)||[]).length,S+=(d.match(/\\{/g)||[]).length,m+=d.length),s.type===\"keyword\"&&d.match(/^(if|else|elseif|for|while)$/)?(A=!0,E=0):!E&&d.trim()&&s.type!==\"comment\"&&(A=!1);if(s.type===\"paren.rparen\"){E-=(d.match(/\\)/g)||[]).length,S-=(d.match(/\\}/g)||[]).length;for(L=0;L<d.length;L++)m--,d.substr(L,1)===\"}\"&&P[m]===\"case\"&&m--}c&&!l&&(B(),p.substr(-1)!==\"\\n\"&&(p+=\" \")),p+=d,h&&(p+=\" \"),l=!1,c=!1,h=!1;if(i(s,\"tag-close\")&&(_||a.indexOf(v)!==-1)||i(s,\"doctype\")&&d===\">\")_&&f&&f.value===\"</\"?N=-1:N=1;i(s,\"tag-open\")&&d===\"</\"?m--:i(s,\"tag-open\")&&d===\"<\"&&u.indexOf(f.value)===-1?m++:i(s,\"tag-name\")?v=d:i(s,\"tag-close\")&&d===\"/>\"&&u.indexOf(v)===-1&&m--,x=T}}s=f}p=p.trim(),e.doc.setValue(p)},t.commands=[{name:\"beautify\",exec:function(e){t.beautify(e.session)},bindKey:\"Ctrl-Shift-B\"}]});                (function() {\n                    window.require([\"ace/ext/beautify\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-elastic_tabstops_lite.js",
    "content": "define(\"ace/ext/elastic_tabstops_lite\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=function(e){this.$editor=e;var t=this,n=[],r=!1;this.onAfterExec=function(){r=!1,t.processRows(n),n=[]},this.onExec=function(){r=!0},this.onChange=function(e){r&&(n.indexOf(e.start.row)==-1&&n.push(e.start.row),e.end.row!=e.start.row&&n.push(e.end.row))}};(function(){this.processRows=function(e){this.$inChange=!0;var t=[];for(var n=0,r=e.length;n<r;n++){var i=e[n];if(t.indexOf(i)>-1)continue;var s=this.$findCellWidthsForBlock(i),o=this.$setBlockCellWidthsToMax(s.cellWidths),u=s.firstRow;for(var a=0,f=o.length;a<f;a++){var l=o[a];t.push(u),this.$adjustRow(u,l),u++}}this.$inChange=!1},this.$findCellWidthsForBlock=function(e){var t=[],n,r=e;while(r>=0){n=this.$cellWidthsForRow(r);if(n.length==0)break;t.unshift(n),r--}var i=r+1;r=e;var s=this.$editor.session.getLength();while(r<s-1){r++,n=this.$cellWidthsForRow(r);if(n.length==0)break;t.push(n)}return{cellWidths:t,firstRow:i}},this.$cellWidthsForRow=function(e){var t=this.$selectionColumnsForRow(e),n=[-1].concat(this.$tabsForRow(e)),r=n.map(function(e){return 0}).slice(1),i=this.$editor.session.getLine(e);for(var s=0,o=n.length-1;s<o;s++){var u=n[s]+1,a=n[s+1],f=this.$rightmostSelectionInCell(t,a),l=i.substring(u,a);r[s]=Math.max(l.replace(/\\s+$/g,\"\").length,f-u)}return r},this.$selectionColumnsForRow=function(e){var t=[],n=this.$editor.getCursorPosition();return this.$editor.session.getSelection().isEmpty()&&e==n.row&&t.push(n.column),t},this.$setBlockCellWidthsToMax=function(e){var t=!0,n,r,i,s=this.$izip_longest(e);for(var o=0,u=s.length;o<u;o++){var a=s[o];if(!a.push){console.error(a);continue}a.push(NaN);for(var f=0,l=a.length;f<l;f++){var c=a[f];t&&(n=f,i=0,t=!1);if(isNaN(c)){r=f;for(var h=n;h<r;h++)e[h][o]=i;t=!0}i=Math.max(i,c)}}return e},this.$rightmostSelectionInCell=function(e,t){var n=0;if(e.length){var r=[];for(var i=0,s=e.length;i<s;i++)e[i]<=t?r.push(i):r.push(0);n=Math.max.apply(Math,r)}return n},this.$tabsForRow=function(e){var t=[],n=this.$editor.session.getLine(e),r=/\\t/g,i;while((i=r.exec(n))!=null)t.push(i.index);return t},this.$adjustRow=function(e,t){var n=this.$tabsForRow(e);if(n.length==0)return;var r=0,i=-1,s=this.$izip(t,n);for(var o=0,u=s.length;o<u;o++){var a=s[o][0],f=s[o][1];i+=1+a,f+=r;var l=i-f;if(l==0)continue;var c=this.$editor.session.getLine(e).substr(0,f),h=c.replace(/\\s*$/g,\"\"),p=c.length-h.length;l>0&&(this.$editor.session.getDocument().insertInLine({row:e,column:f+1},Array(l+1).join(\" \")+\"\t\"),this.$editor.session.getDocument().removeInLine(e,f,f+1),r+=l),l<0&&p>=-l&&(this.$editor.session.getDocument().removeInLine(e,f+l,f),r+=l)}},this.$izip_longest=function(e){if(!e[0])return[];var t=e[0].length,n=e.length;for(var r=1;r<n;r++){var i=e[r].length;i>t&&(t=i)}var s=[];for(var o=0;o<t;o++){var u=[];for(var r=0;r<n;r++)e[r][o]===\"\"?u.push(NaN):u.push(e[r][o]);s.push(u)}return s},this.$izip=function(e,t){var n=e.length>=t.length?t.length:e.length,r=[];for(var i=0;i<n;i++){var s=[e[i],t[i]];r.push(s)}return r}}).call(r.prototype),t.ElasticTabstopsLite=r;var i=e(\"../editor\").Editor;e(\"../config\").defineOptions(i.prototype,\"editor\",{useElasticTabstops:{set:function(e){e?(this.elasticTabstops||(this.elasticTabstops=new r(this)),this.commands.on(\"afterExec\",this.elasticTabstops.onAfterExec),this.commands.on(\"exec\",this.elasticTabstops.onExec),this.on(\"change\",this.elasticTabstops.onChange)):this.elasticTabstops&&(this.commands.removeListener(\"afterExec\",this.elasticTabstops.onAfterExec),this.commands.removeListener(\"exec\",this.elasticTabstops.onExec),this.removeListener(\"change\",this.elasticTabstops.onChange))}}})});                (function() {\n                    window.require([\"ace/ext/elastic_tabstops_lite\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-emmet.js",
    "content": "define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/lang\"),o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=e(\"./keyboard/hash_handler\").HashHandler,f=e(\"./tokenizer\").Tokenizer,l=o.comparePoints,c=function(){this.snippetMap={},this.snippetNameMap={}};(function(){r.implement(this,i),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}return c.$tokenizer=new f({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:n.inFormatString&&(r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\\n\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(\",\")},next:\"start\"},{regex:\"/(\"+t(\"/\")+\"+)/(?:(\"+t(\"/\")+\"*)/)(\\\\w*):?\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],\"\"},next:\"start\"},{regex:\"`\"+t(\"`\")+\"*`\",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),\"\"},next:\"start\"},{regex:\"\\\\?\",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:\"start\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:\"/(\"+t(\"/\")+\"+)/\",token:\"regex\"},{regex:\"\",onMatch:function(e,t,n){n.inFormatString=!0},next:\"start\"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+\"__\"]||{})[n]}if(/^\\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,\"\");if(!e)return;var r=e.session;switch(t){case\"CURRENT_WORD\":var i=r.getWordRange();case\"SELECTION\":case\"SELECTED_TEXT\":return r.getTextRange(i);case\"CURRENT_LINE\":return r.getLine(e.getCursorPosition().row);case\"PREV_LINE\":return r.getLine(e.getCursorPosition().row-1);case\"LINE_INDEX\":return e.getCursorPosition().column;case\"LINE_NUMBER\":return e.getCursorPosition().row+1;case\"SOFT_TABS\":return r.getUseSoftTabs()?\"YES\":\"NO\";case\"TAB_SIZE\":return r.getTabSize();case\"FILENAME\":case\"FILEPATH\":return\"\";case\"FULLNAME\":return\"Ace\"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||\"\":this.$getDefaultValue(e,t)||\"\"},this.tmStrFormat=function(e,t,n){var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,\"\"));var s=this.tokenizeTmSnippet(t.fmt,\"formatString\"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t=\"E\";for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"object\"){e[r]=\"\";if(i.changeCase&&i.local){var u=e[r+1];u&&typeof u==\"string\"&&(i.changeCase==\"u\"?e[r]=u[0].toUpperCase():e[r]=u[0].toLowerCase(),e[r+1]=u.substr(1))}else i.changeCase&&(t=i.changeCase)}else t==\"U\"?e[r]=i.toUpperCase():t==\"L\"&&(e[r]=i.toLowerCase())}return e.join(\"\")});return this.variables.__=null,u},this.resolveVariables=function(e,t){function o(t){var n=e.indexOf(t,r+1);n!=-1&&(r=n)}var n=[];for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"string\")n.push(i);else{if(typeof i!=\"object\")continue;if(i.skip)o(i);else{if(i.processed<r)continue;if(i.text){var s=this.getVariableValue(t,i.text);s&&i.fmtString&&(s=this.tmStrFormat(s,i)),i.processed=r,i.expectIf==null?s&&(n.push(s),o(i)):s?i.skip=i.elseBranch:o(i)}else i.tabstopId!=null?n.push(i):i.changeCase!=null&&n.push(i)}}}return n},this.insertSnippetForSelection=function(e,t){function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(a[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=e.session.getTabString(),s=r.match(/^\\s*/)[0];n.column<s.length&&(s=s.slice(0,n.column)),t=t.replace(/\\r/g,\"\");var o=this.tokenizeTmSnippet(t);o=this.resolveVariables(o,e),o=o.map(function(e){return e==\"\\n\"?e+s:typeof e==\"string\"?e.replace(/\\t/g,i):e});var u=[];o.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=u[n];r||(r=u[n]=[],r.index=n,r.value=\"\");if(r.indexOf(e)!==-1)return;r.push(e);var i=o.indexOf(e,t+1);if(i===-1)return;var s=o.slice(t+1,i),a=s.some(function(e){return typeof e==\"object\"});a&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),u.forEach(function(e){e.length=0});var a={};for(var l=0;l<o.length;l++){var c=o[l];if(typeof c!=\"object\")continue;var p=c.tabstopId,d=o.indexOf(c,l+1);if(a[p]){a[p]===c&&(a[p]=null);continue}var v=u[p],m=typeof v.value==\"string\"?[v.value]:f(v.value);m.unshift(l+1,Math.max(0,d-l)),m.push(c),a[p]=c,o.splice.apply(o,m),v.indexOf(c)===-1&&v.push(c)}var g=0,y=0,b=\"\";o.forEach(function(e){if(typeof e==\"string\"){var t=e.split(\"\\n\");t.length>1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e.start?e.end={row:g,column:y}:e.start={row:g,column:y}});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new h(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function o(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var o=r[t];if(e.name){var a=o[e.name];a&&i.unregister(a),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=s.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),e&&e.content?a(e):Array.isArray(e)&&e.forEach(a),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e,n=e.action[0]==\"r\",r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p<h.length;p++){var d=h[p];if(d.end.row<r.row)continue;if(n&&l(r,d.start)<0&&l(i,d.end)>0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e(\"./lib/dom\").importCssString(\".ace_snippet-marker {    -moz-box-sizing: border-box;    box-sizing: border-box;    background: rgba(194, 193, 208, 0.09);    border: 1px dotted rgba(211, 208, 235, 0.62);    position: absolute;}\"),t.snippetManager=new c;var m=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),define(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"resources\",\"resources\",\"tabStops\",\"resources\",\"utils\",\"actions\",\"ace/config\",\"ace/config\"],function(e,t,n){\"use strict\";function f(){}var r=e(\"ace/keyboard/hash_handler\").HashHandler,i=e(\"ace/editor\").Editor,s=e(\"ace/snippets\").snippetManager,o=e(\"ace/range\").Range,u,a;f.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),u||(u=window.emmet);var t=u.resources||u.require(\"resources\");t.setVariable(\"indentation\",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var n=this.ace.session.doc;this.ace.selection.setRange({start:n.indexToPosition(e),end:n.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,n=e.session.getLine(t).length,r=e.session.doc.positionToIndex({row:t,column:0});return{start:r,end:r+n}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,n,r){n==null&&(n=t==null?this.getContent().length:t),t==null&&(t=0);var i=this.ace,u=i.session.doc,a=o.fromPoints(u.indexToPosition(t),u.indexToPosition(n));i.session.remove(a),a.end=a.start,e=this.$updateTabstops(e),s.insertSnippet(i,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split(\"/\").pop();if(e==\"html\"||e==\"php\"){var t=this.ace.getCursorPosition(),n=this.ace.session.getState(t.row);typeof n!=\"string\"&&(n=n[0]),n&&(n=n.split(\"-\"),n.length>1?e=n[0]:e==\"php\"&&(e=\"html\"))}return e},getProfileName:function(){var e=u.resources||u.require(\"resources\");switch(this.getSyntax()){case\"css\":return\"css\";case\"xml\":case\"xsl\":return\"xml\";case\"html\":var t=e.getVariable(\"profile\");return t||(t=this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i)!=-1?\"xhtml\":\"html\"),t;default:var n=this.ace.session.$mode;return n.emmetConfig&&n.emmetConfig.profile||\"xhtml\"}},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return\"\"},$updateTabstops:function(e){var t=1e3,n=0,r=null,i=u.tabStops||u.require(\"tabStops\"),s=u.resources||u.require(\"resources\"),o=s.getVocabulary(\"user\"),a={tabstop:function(e){var s=parseInt(e.group,10),o=s===0;o?s=++n:s+=t;var u=e.placeholder;u&&(u=i.processText(u,a));var f=\"${\"+s+(u?\":\"+u:\"\")+\"}\";return o&&(r=[e.start,f]),f},escape:function(e){return e==\"$\"?\"\\\\$\":e==\"\\\\\"?\"\\\\\\\\\":e}};e=i.processText(e,a);if(o.variables.insert_final_tabstop&&!/\\$\\{0\\}$/.test(e))e+=\"${0}\";else if(r){var f=u.utils?u.utils.common:u.require(\"utils\");e=f.replaceSubstring(e,\"${0}\",r[0],r[1])}return e}};var l={expand_abbreviation:{mac:\"ctrl+alt+e\",win:\"alt+e\"},match_pair_outward:{mac:\"ctrl+d\",win:\"ctrl+,\"},match_pair_inward:{mac:\"ctrl+j\",win:\"ctrl+shift+0\"},matching_pair:{mac:\"ctrl+alt+j\",win:\"alt+j\"},next_edit_point:\"alt+right\",prev_edit_point:\"alt+left\",toggle_comment:{mac:\"command+/\",win:\"ctrl+/\"},split_join_tag:{mac:\"shift+command+'\",win:\"shift+ctrl+`\"},remove_tag:{mac:\"command+'\",win:\"shift+ctrl+;\"},evaluate_math_expression:{mac:\"shift+command+y\",win:\"shift+ctrl+y\"},increment_number_by_1:\"ctrl+up\",decrement_number_by_1:\"ctrl+down\",increment_number_by_01:\"alt+up\",decrement_number_by_01:\"alt+down\",increment_number_by_10:{mac:\"alt+command+up\",win:\"shift+alt+up\"},decrement_number_by_10:{mac:\"alt+command+down\",win:\"shift+alt+down\"},select_next_item:{mac:\"shift+command+.\",win:\"shift+ctrl+.\"},select_previous_item:{mac:\"shift+command+,\",win:\"shift+ctrl+,\"},reflect_css_value:{mac:\"shift+command+r\",win:\"shift+ctrl+r\"},encode_decode_data_url:{mac:\"shift+ctrl+d\",win:\"ctrl+'\"},expand_abbreviation_with_tab:\"Tab\",wrap_with_abbreviation:{mac:\"shift+ctrl+a\",win:\"shift+ctrl+a\"}},c=new f;t.commands=new r,t.runEmmetCommand=function d(e){try{c.setupContext(e);var n=u.actions||u.require(\"actions\");if(this.action==\"expand_abbreviation_with_tab\"){if(!e.selection.isEmpty())return!1;var r=e.selection.lead,i=e.session.getTokenAt(r.row,r.column);if(i&&/\\btag\\b/.test(i.type))return!1}if(this.action==\"wrap_with_abbreviation\")return setTimeout(function(){n.run(\"wrap_with_abbreviation\",c)},0);var s=n.run(this.action,c)}catch(o){if(!u)return t.load(d.bind(this,e)),!0;e._signal(\"changeStatus\",typeof o==\"string\"?o:o.message),console.log(o),s=!1}return s};for(var h in l)t.commands.addCommand({name:\"emmet:\"+h,action:h,bindKey:l[h],exec:t.runEmmetCommand,multiSelectAction:\"forEach\"});t.updateCommands=function(e,n){n?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){if(!e)return!1;if(e.emmetConfig)return!0;var t=e.$id||e;return/css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(t)},t.isAvailable=function(e,n){if(/(evaluate_math_expression|expand_abbreviation)$/.test(n))return!0;var r=e.session.$mode,i=t.isSupportedMode(r);if(i&&r.$modes)try{c.setupContext(e),/js|php/.test(c.getSyntax())&&(i=!1)}catch(s){}return i};var p=function(e,n){var r=n;if(!r)return;var i=t.isSupportedMode(r.session.$mode);e.enableEmmet===!1&&(i=!1),i&&t.load(),t.updateCommands(r,i)};t.load=function(t){typeof a==\"string\"&&e(\"ace/config\").loadModule(a,function(){a=null,t&&t()})},t.AceEmmetEditor=f,e(\"ace/config\").defineOptions(i.prototype,\"editor\",{enableEmmet:{set:function(e){this[e?\"on\":\"removeListener\"](\"changeMode\",p),p({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){typeof e==\"string\"?a=e:u=e}});                (function() {\n                    window.require([\"ace/ext/emmet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-error_marker.js",
    "content": ";                (function() {\n                    window.require([\"ace/ext/error_marker\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-keybinding_menu.js",
    "content": "define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/dom\"),i=\"#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 100000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {vertical-align: middle;}.ace_optionsMenuEntry button[ace_selected_button=true] {background: #e7e7e7;box-shadow: 1px 0px 2px 0px #adadad inset;border-color: #adadad;}.ace_optionsMenuEntry button {background: white;border: 1px solid lightgray;margin: 0px;}.ace_optionsMenuEntry button:hover{background: #f0f0f0;}\";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?\"top: \"+i+\";\":\"\",o=o?\"bottom: \"+o+\";\":\"\",s=s?\"right: \"+s+\";\":\"\",u=u?\"left: \"+u+\";\":\"\";var a=document.createElement(\"div\"),f=document.createElement(\"div\");a.style.cssText=\"margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);\",a.addEventListener(\"click\",function(){document.removeEventListener(\"keydown\",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener(\"keydown\",l),f.style.cssText=i+s+o+u,f.addEventListener(\"click\",function(e){e.stopPropagation()});var c=r.createElement(\"div\");c.style.position=\"relative\";var h=r.createElement(\"div\");h.className=\"ace_closeButton\",h.addEventListener(\"click\",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),define(\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/keys\");n.exports.getEditorKeybordShortcuts=function(e){var t=r.KEY_MODS,n=[],i={};return e.keyBinding.$handlers.forEach(function(e){var t=e.commandKeyBinding;for(var r in t){var s=r.replace(/(^|-)\\w/g,function(e){return e.toUpperCase()}),o=t[r];Array.isArray(o)||(o=[o]),o.forEach(function(e){typeof e!=\"string\"&&(e=e.name),i[e]?i[e].key+=\"|\"+s:(i[e]={key:s,command:e},n.push(i[e]))})}}),n}}),define(\"ace/ext/keybinding_menu\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/ext/menu_tools/overlay_page\",\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\"],function(e,t,n){\"use strict\";function i(t){if(!document.getElementById(\"kbshortcutmenu\")){var n=e(\"./menu_tools/overlay_page\").overlayPage,r=e(\"./menu_tools/get_editor_keyboard_shortcuts\").getEditorKeybordShortcuts,i=r(t),s=document.createElement(\"div\"),o=i.reduce(function(e,t){return e+'<div class=\"ace_optionsMenuEntry\"><span class=\"ace_optionsMenuCommand\">'+t.command+\"</span> : \"+'<span class=\"ace_optionsMenuKey\">'+t.key+\"</span></div>\"},\"\");s.id=\"kbshortcutmenu\",s.innerHTML=\"<h1>Keyboard Shortcuts</h1>\"+o+\"</div>\",n(t,s,\"0\",\"0\",\"0\",null)}}var r=e(\"ace/editor\").Editor;n.exports.init=function(e){r.prototype.showKeyboardShortcuts=function(){i(this)},e.commands.addCommands([{name:\"showKeyboardShortcuts\",bindKey:{win:\"Ctrl-Alt-h\",mac:\"Command-Alt-h\"},exec:function(e,t){e.showKeyboardShortcuts()}}])}});                (function() {\n                    window.require([\"ace/ext/keybinding_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-language_tools.js",
    "content": "define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/lang\"),o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=e(\"./keyboard/hash_handler\").HashHandler,f=e(\"./tokenizer\").Tokenizer,l=o.comparePoints,c=function(){this.snippetMap={},this.snippetNameMap={}};(function(){r.implement(this,i),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}return c.$tokenizer=new f({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:n.inFormatString&&(r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\\n\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(\",\")},next:\"start\"},{regex:\"/(\"+t(\"/\")+\"+)/(?:(\"+t(\"/\")+\"*)/)(\\\\w*):?\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],\"\"},next:\"start\"},{regex:\"`\"+t(\"`\")+\"*`\",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),\"\"},next:\"start\"},{regex:\"\\\\?\",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:\"start\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:\"/(\"+t(\"/\")+\"+)/\",token:\"regex\"},{regex:\"\",onMatch:function(e,t,n){n.inFormatString=!0},next:\"start\"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+\"__\"]||{})[n]}if(/^\\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,\"\");if(!e)return;var r=e.session;switch(t){case\"CURRENT_WORD\":var i=r.getWordRange();case\"SELECTION\":case\"SELECTED_TEXT\":return r.getTextRange(i);case\"CURRENT_LINE\":return r.getLine(e.getCursorPosition().row);case\"PREV_LINE\":return r.getLine(e.getCursorPosition().row-1);case\"LINE_INDEX\":return e.getCursorPosition().column;case\"LINE_NUMBER\":return e.getCursorPosition().row+1;case\"SOFT_TABS\":return r.getUseSoftTabs()?\"YES\":\"NO\";case\"TAB_SIZE\":return r.getTabSize();case\"FILENAME\":case\"FILEPATH\":return\"\";case\"FULLNAME\":return\"Ace\"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||\"\":this.$getDefaultValue(e,t)||\"\"},this.tmStrFormat=function(e,t,n){var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,\"\"));var s=this.tokenizeTmSnippet(t.fmt,\"formatString\"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t=\"E\";for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"object\"){e[r]=\"\";if(i.changeCase&&i.local){var u=e[r+1];u&&typeof u==\"string\"&&(i.changeCase==\"u\"?e[r]=u[0].toUpperCase():e[r]=u[0].toLowerCase(),e[r+1]=u.substr(1))}else i.changeCase&&(t=i.changeCase)}else t==\"U\"?e[r]=i.toUpperCase():t==\"L\"&&(e[r]=i.toLowerCase())}return e.join(\"\")});return this.variables.__=null,u},this.resolveVariables=function(e,t){function o(t){var n=e.indexOf(t,r+1);n!=-1&&(r=n)}var n=[];for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"string\")n.push(i);else{if(typeof i!=\"object\")continue;if(i.skip)o(i);else{if(i.processed<r)continue;if(i.text){var s=this.getVariableValue(t,i.text);s&&i.fmtString&&(s=this.tmStrFormat(s,i)),i.processed=r,i.expectIf==null?s&&(n.push(s),o(i)):s?i.skip=i.elseBranch:o(i)}else i.tabstopId!=null?n.push(i):i.changeCase!=null&&n.push(i)}}}return n},this.insertSnippetForSelection=function(e,t){function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(a[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=e.session.getTabString(),s=r.match(/^\\s*/)[0];n.column<s.length&&(s=s.slice(0,n.column)),t=t.replace(/\\r/g,\"\");var o=this.tokenizeTmSnippet(t);o=this.resolveVariables(o,e),o=o.map(function(e){return e==\"\\n\"?e+s:typeof e==\"string\"?e.replace(/\\t/g,i):e});var u=[];o.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=u[n];r||(r=u[n]=[],r.index=n,r.value=\"\");if(r.indexOf(e)!==-1)return;r.push(e);var i=o.indexOf(e,t+1);if(i===-1)return;var s=o.slice(t+1,i),a=s.some(function(e){return typeof e==\"object\"});a&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),u.forEach(function(e){e.length=0});var a={};for(var l=0;l<o.length;l++){var c=o[l];if(typeof c!=\"object\")continue;var p=c.tabstopId,d=o.indexOf(c,l+1);if(a[p]){a[p]===c&&(a[p]=null);continue}var v=u[p],m=typeof v.value==\"string\"?[v.value]:f(v.value);m.unshift(l+1,Math.max(0,d-l)),m.push(c),a[p]=c,o.splice.apply(o,m),v.indexOf(c)===-1&&v.push(c)}var g=0,y=0,b=\"\";o.forEach(function(e){if(typeof e==\"string\"){var t=e.split(\"\\n\");t.length>1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e.start?e.end={row:g,column:y}:e.start={row:g,column:y}});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new h(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function o(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var o=r[t];if(e.name){var a=o[e.name];a&&i.unregister(a),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=s.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),e&&e.content?a(e):Array.isArray(e)&&e.forEach(a),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e,n=e.action[0]==\"r\",r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p<h.length;p++){var d=h[p];if(d.end.row<r.row)continue;if(n&&l(r,d.start)<0&&l(i,d.end)>0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e(\"./lib/dom\").importCssString(\".ace_snippet-marker {    -moz-box-sizing: border-box;    box-sizing: border-box;    background: rgba(194, 193, 208, 0.09);    border: 1px dotted rgba(211, 208, 235, 0.62);    position: absolute;}\"),t.snippetManager=new c;var m=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../virtual_renderer\").VirtualRenderer,i=e(\"../editor\").Editor,s=e(\"../range\").Range,o=e(\"../lib/event\"),u=e(\"../lib/lang\"),a=e(\"../lib/dom\"),f=function(e){var t=new r(e);t.$maxLines=4;var n=new i(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusTimeout=0,n.$highlightTagPending=!0,n},l=function(e){var t=a.createElement(\"div\"),n=new f(t);e&&e.appendChild(t),t.style.display=\"none\",n.renderer.content.style.cursor=\"default\",n.renderer.setStyle(\"ace_autocomplete\"),n.setOption(\"displayIndentGuides\",!1),n.setOption(\"dragDelay\",150);var r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=0,n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(\"\"),n.session.$searchHighlight.clazz=\"ace_highlight-marker\",n.on(\"mousedown\",function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),c.start.row=c.end.row=t.row,e.stop()});var i,l=new s(-1,0,-1,Infinity),c=new s(-1,0,-1,Infinity);c.id=n.session.addMarker(c,\"ace_active-line\",\"fullLine\"),n.setSelectOnHover=function(e){e?l.id&&(n.session.removeMarker(l.id),l.id=null):l.id=n.session.addMarker(l,\"ace_line-hover\",\"fullLine\")},n.setSelectOnHover(!1),n.on(\"mousemove\",function(e){if(!i){i=e;return}if(i.x==e.x&&i.y==e.y)return;i=e,i.scrollTop=n.renderer.scrollTop;var t=i.getDocumentPosition().row;l.start.row!=t&&(l.id||n.setRow(t),p(t))}),n.renderer.on(\"beforeRender\",function(){if(i&&l.start.row!=-1){i.$pos=null;var e=i.getDocumentPosition().row;l.id||n.setRow(e),p(e,!0)}}),n.renderer.on(\"afterRender\",function(){var e=n.getRow(),t=n.renderer.$textLayer,r=t.element.childNodes[e-t.config.firstRow];r!==t.selectedNode&&t.selectedNode&&a.removeCssClass(t.selectedNode,\"ace_selected\"),t.selectedNode=r,r&&a.addCssClass(r,\"ace_selected\")});var h=function(){p(-1)},p=function(e,t){e!==l.start.row&&(l.start.row=l.end.row=e,t||n.session._emit(\"changeBackMarker\"),n._emit(\"changeHoverMarker\"))};n.getHoveredRow=function(){return l.start.row},o.addListener(n.container,\"mouseout\",h),n.on(\"hide\",h),n.on(\"changeSelection\",h),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return typeof t==\"string\"?t:t&&t.value||\"\"};var d=n.session.bgTokenizer;return d.$tokenizeRow=function(e){function s(e,n){e&&r.push({type:(t.className||\"\")+(n||\"\"),value:e})}var t=n.data[e],r=[];if(!t)return r;typeof t==\"string\"&&(t={value:t});var i=t.caption||t.value||t.name,o=i.toLowerCase(),u=(n.filterText||\"\").toLowerCase(),a=0,f=0;for(var l=0;l<=u.length;l++)if(l!=f&&(t.matchMask&1<<l||l==u.length)){var c=u.slice(f,l);f=l;var h=o.indexOf(c,a);if(h==-1)continue;s(i.slice(a,h),\"\"),a=h+c.length,s(i.slice(h,a),\"completion-highlight\")}return s(i.slice(a,i.length),\"\"),t.meta&&r.push({type:\"completion-meta\",value:t.meta}),r},d.$updateOnChange=r,d.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.isOpen=!1,n.isTopdown=!1,n.autoSelect=!0,n.filterText=\"\",n.data=[],n.setData=function(e,t){n.filterText=t||\"\",n.setValue(u.stringRepeat(\"\\n\",e.length),-1),n.data=e||[],n.setRow(0)},n.getData=function(e){return n.data[e]},n.getRow=function(){return c.start.row},n.setRow=function(e){e=Math.max(this.autoSelect?0:-1,Math.min(this.data.length,e)),c.start.row!=e&&(n.selection.clearSelection(),c.start.row=c.end.row=e||0,n.session._emit(\"changeBackMarker\"),n.moveCursorTo(e||0,0),n.isOpen&&n._signal(\"select\"))},n.on(\"changeSelection\",function(){n.isOpen&&n.setRow(n.selection.lead.row),n.renderer.scrollCursorIntoView()}),n.hide=function(){this.container.style.display=\"none\",this._signal(\"hide\"),n.isOpen=!1},n.show=function(e,t,r){var s=this.container,o=window.innerHeight,u=window.innerWidth,a=this.renderer,f=a.$maxLines*t*1.4,l=e.top+this.$borderSize,c=l>o/2&&!r;c&&l+t+f>o?(a.$maxPixelHeight=l-2*this.$borderSize,s.style.top=\"\",s.style.bottom=o-l+\"px\",n.isTopdown=!1):(l+=t,a.$maxPixelHeight=o-l-.2*t,s.style.top=l+\"px\",s.style.bottom=\"\",n.isTopdown=!0),s.style.display=\"\";var h=e.left;h+s.offsetWidth>u&&(h=u-s.offsetWidth),s.style.left=h+\"px\",this._signal(\"show\"),i=null,n.isOpen=!0},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n};a.importCssString(\".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {    background-color: #CAD6FA;    z-index: 1;}.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {    background-color: #3a674e;}.ace_editor.ace_autocomplete .ace_line-hover {    border: 1px solid #abbffe;    margin-top: -1px;    background: rgba(233,233,253,0.4);    position: absolute;    z-index: 2;}.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {    border: 1px solid rgba(109, 150, 13, 0.8);    background: rgba(58, 103, 78, 0.62);}.ace_completion-meta {    opacity: 0.5;    margin: 0.9em;}.ace_editor.ace_autocomplete .ace_completion-highlight{    color: #2d69c7;}.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{    color: #93ca12;}.ace_editor.ace_autocomplete {    width: 300px;    z-index: 200000;    border: 1px lightgray solid;    position: fixed;    box-shadow: 2px 3px 5px rgba(0,0,0,.2);    line-height: 1.4;    background: #fefefe;    color: #111;}.ace_dark.ace_editor.ace_autocomplete {    border: 1px #484747 solid;    box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);    line-height: 1.4;    background: #25282c;    color: #c1c1c1;}\",\"autocompletion.css\"),t.AcePopup=l}),define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.parForEach=function(e,t,n){var r=0,i=e.length;i===0&&n();for(var s=0;s<i;s++)t(e[s],function(e,t){r++,r===i&&n(e,t)})};var r=/[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;t.retrievePrecedingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;i.push(e[s])}return i.reverse().join(\"\")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t;s<e.length;s++){if(!n.test(e[s]))break;i.push(e[s])}return i},t.getCompletionPrefix=function(e){var t=e.getCursorPosition(),n=e.session.getLine(t.row),r;return e.completers.forEach(function(e){e.identifierRegexps&&e.identifierRegexps.forEach(function(e){!r&&e&&(r=this.retrievePrecedingIdentifier(n,t.column,e))}.bind(this))}.bind(this)),r||this.retrievePrecedingIdentifier(n,t.column)}}),define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\"],function(e,t,n){\"use strict\";var r=e(\"./keyboard/hash_handler\").HashHandler,i=e(\"./autocomplete/popup\").AcePopup,s=e(\"./autocomplete/util\"),o=e(\"./lib/event\"),u=e(\"./lib/lang\"),a=e(\"./lib/dom\"),f=e(\"./snippets\").snippetManager,l=function(){this.autoInsert=!1,this.autoSelect=!0,this.exactMatch=!1,this.gatherCompletionsId=0,this.keyboardHandler=new r,this.keyboardHandler.bindKeys(this.commands),this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.changeTimer=u.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=u.delayedCall(this.updateDocTooltip.bind(this),50)};(function(){this.$init=function(){return this.popup=new i(document.body||document.documentElement),this.popup.on(\"click\",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on(\"show\",this.tooltipTimer.bind(null,null)),this.popup.on(\"select\",this.tooltipTimer.bind(null,null)),this.popup.on(\"changeHoverMarker\",this.tooltipTimer.bind(null,null)),this.popup},this.getPopup=function(){return this.popup||this.$init()},this.openPopup=function(e,t,n){this.popup||this.$init(),this.popup.autoSelect=this.autoSelect,this.popup.setData(this.completions.filtered,this.completions.filterText),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var r=e.renderer;this.popup.setRow(this.autoSelect?0:-1);if(!n){this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize());var i=r.layerConfig.lineHeight,s=r.$cursorLayer.getPixelPosition(this.base,!0);s.left-=this.popup.getTextLeftOffset();var o=e.container.getBoundingClientRect();s.top+=o.top-r.layerConfig.offset,s.left+=o.left-e.renderer.scrollLeft,s.left+=r.gutterWidth,this.popup.show(s,i)}else n&&!t&&this.detach()},this.detach=function(){this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off(\"changeSelection\",this.changeListener),this.editor.off(\"blur\",this.blurListener),this.editor.off(\"mousedown\",this.mousedownListener),this.editor.off(\"mousewheel\",this.mousewheelListener),this.changeTimer.cancel(),this.hideDocTooltip(),this.gatherCompletionsId+=1,this.popup&&this.popup.isOpen&&this.popup.hide(),this.base&&this.base.detach(),this.activated=!1,this.completions=this.base=null},this.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.column<this.base.column)&&this.detach(),this.activated?this.changeTimer.schedule():this.detach()},this.blurListener=function(e){var t=document.activeElement,n=this.editor.textInput.getElement(),r=e.relatedTarget&&this.tooltipNode&&this.tooltipNode.contains(e.relatedTarget),i=this.popup&&this.popup.container;t!=n&&t.parentNode!=i&&!r&&t!=this.tooltipNode&&e.relatedTarget!=n&&this.detach()},this.mousedownListener=function(e){this.detach()},this.mousewheelListener=function(e){this.detach()},this.goTo=function(e){var t=this.popup.getRow(),n=this.popup.session.getLength()-1;switch(e){case\"up\":t=t<=0?n:t-1;break;case\"down\":t=t>=n?-1:t+1;break;case\"start\":t=0;break;case\"end\":t=n}this.popup.setRow(t)},this.insertMatch=function(e,t){e||(e=this.popup.getData(this.popup.getRow()));if(!e)return!1;if(e.completer&&e.completer.insertMatch)e.completer.insertMatch(this.editor,e);else{if(this.completions.filterText){var n=this.editor.selection.getAllRanges();for(var r=0,i;i=n[r];r++)i.start.column-=this.completions.filterText.length,this.editor.session.remove(i)}e.snippet?f.insertSnippet(this.editor,e.snippet):this.editor.execCommand(\"insertstring\",e.value||e)}this.detach()},this.commands={Up:function(e){e.completer.goTo(\"up\")},Down:function(e){e.completer.goTo(\"down\")},\"Ctrl-Up|Ctrl-Home\":function(e){e.completer.goTo(\"start\")},\"Ctrl-Down|Ctrl-End\":function(e){e.completer.goTo(\"end\")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},\"Shift-Return\":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(!!t||!!e.tabstopManager)return t;e.completer.goTo(\"down\")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},this.gatherCompletions=function(e,t){var n=e.getSession(),r=e.getCursorPosition(),i=s.getCompletionPrefix(e);this.base=n.doc.createAnchor(r.row,r.column-i.length),this.base.$insertRight=!0;var o=[],u=e.completers.length;return e.completers.forEach(function(a,f){a.getCompletions(e,n,r,i,function(n,r){!n&&r&&(o=o.concat(r)),t(null,{prefix:s.getCompletionPrefix(e),matches:o,finished:--u===0})})}),!0},this.showPopup=function(e){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on(\"changeSelection\",this.changeListener),e.on(\"blur\",this.blurListener),e.on(\"mousedown\",this.mousedownListener),e.on(\"mousewheel\",this.mousewheelListener),this.updateCompletions()},this.updateCompletions=function(e){if(e&&this.base&&this.completions){var t=this.editor.getCursorPosition(),n=this.editor.session.getTextRange({start:this.base,end:t});if(n==this.completions.filterText)return;this.completions.setFilter(n);if(!this.completions.filtered.length)return this.detach();if(this.completions.filtered.length==1&&this.completions.filtered[0].value==n&&!this.completions.filtered[0].snippet)return this.detach();this.openPopup(this.editor,n,e);return}var r=this.gatherCompletionsId;this.gatherCompletions(this.editor,function(t,n){var i=function(){if(!n.finished)return;return this.detach()}.bind(this),s=n.prefix,o=n&&n.matches;if(!o||!o.length)return i();if(s.indexOf(n.prefix)!==0||r!=this.gatherCompletionsId)return;this.completions=new c(o),this.exactMatch&&(this.completions.exactMatch=!0),this.completions.setFilter(s);var u=this.completions.filtered;if(!u.length)return i();if(u.length==1&&u[0].value==s&&!u[0].snippet)return i();if(this.autoInsert&&u.length==1&&n.finished)return this.insertMatch(u[0]);this.openPopup(this.editor,s,e)}.bind(this))},this.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},this.updateDocTooltip=function(){var e=this.popup,t=e.data,n=t&&(t[e.getHoveredRow()]||t[e.getRow()]),r=null;if(!n||!this.editor||!this.popup.isOpen)return this.hideDocTooltip();this.editor.completers.some(function(e){return e.getDocTooltip&&(r=e.getDocTooltip(n)),r}),r||(r=n),typeof r==\"string\"&&(r={docText:r});if(!r||!r.docHTML&&!r.docText)return this.hideDocTooltip();this.showDocTooltip(r)},this.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=a.createElement(\"div\"),this.tooltipNode.className=\"ace_tooltip ace_doc-tooltip\",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents=\"auto\",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this),this.tooltipNode.onclick=this.onTooltipClick.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var n=this.popup,r=n.container.getBoundingClientRect();t.style.top=n.container.style.top,t.style.bottom=n.container.style.bottom,t.style.display=\"block\",window.innerWidth-r.right<320?r.left<320?n.isTopdown?(t.style.top=r.bottom+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.top=n.container.offsetTop-t.offsetHeight+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.right=window.innerWidth-r.left+\"px\",t.style.left=\"\"):(t.style.left=r.right+1+\"px\",t.style.right=\"\")},this.hideDocTooltip=function(){this.tooltipTimer.cancel();if(!this.tooltipNode)return;var e=this.tooltipNode;!this.editor.isFocused()&&document.activeElement==e&&this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)},this.onTooltipClick=function(e){var t=e.target;while(t&&t!=this.tooltipNode){if(t.nodeName==\"A\"&&t.href){t.rel=\"noreferrer\",t.target=\"_blank\";break}t=t.parentNode}}}).call(l.prototype),l.startCommand={name:\"startAutocomplete\",exec:function(e){e.completer||(e.completer=new l),e.completer.autoInsert=!1,e.completer.autoSelect=!0,e.completer.showPopup(e),e.completer.cancelContextMenu()},bindKey:\"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"};var c=function(e,t){this.all=e,this.filtered=e,this.filterText=t||\"\",this.exactMatch=!1};(function(){this.setFilter=function(e){if(e.length>this.filterText&&e.lastIndexOf(this.filterText,0)===0)var t=this.filtered;else var t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort(function(e,t){return t.exactMatch-e.exactMatch||t.$score-e.$score||(e.caption||e.value)<(t.caption||t.value)});var n=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t===n?!1:(n=t,!0)}),this.filtered=t},this.filterCompletions=function(e,t){var n=[],r=t.toUpperCase(),i=t.toLowerCase();e:for(var s=0,o;o=e[s];s++){var u=o.caption||o.value||o.snippet;if(!u)continue;var a=-1,f=0,l=0,c,h;if(this.exactMatch){if(t!==u.substr(0,t.length))continue e}else{var p=u.toLowerCase().indexOf(i);if(p>-1)l=p;else for(var d=0;d<t.length;d++){var v=u.indexOf(i[d],a+1),m=u.indexOf(r[d],a+1);c=v>=0?m<0||v<m?v:m:m;if(c<0)continue e;h=c-a-1,h>0&&(a===-1&&(l+=10),l+=h,f|=1<<d),a=c}}o.matchMask=f,o.exactMatch=l?0:1,o.$score=(o.score||0)-l,n.push(o)}return n}}).call(c.prototype),t.Autocomplete=l,t.FilteredList=c}),define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){function s(e,t){var n=e.getTextRange(r.fromPoints({row:0,column:0},t));return n.split(i).length-1}function o(e,t){var n=s(e,t),r=e.getValue().split(i),o=Object.create(null),u=r[n];return r.forEach(function(e,t){if(!e||e===u)return;var i=Math.abs(n-t),s=r.length-i;o[e]?o[e]=Math.max(s,o[e]):o[e]=s}),o}var r=e(\"../range\").Range,i=/[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;t.getCompletions=function(e,t,n,r,i){var s=o(t,n),u=Object.keys(s);i(null,u.map(function(e){return{caption:e,value:e,score:s[e],meta:\"local\"}}))}}),define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../snippets\").snippetManager,i=e(\"../autocomplete\").Autocomplete,s=e(\"../config\"),o=e(\"../lib/lang\"),u=e(\"../autocomplete/util\"),a=e(\"../autocomplete/text_completer\"),f={getCompletions:function(e,t,n,r,i){if(t.$mode.completer)return t.$mode.completer.getCompletions(e,t,n,r,i);var s=e.session.getState(n.row),o=t.$mode.getCompletions(s,t,n,r);i(null,o)}},l={getCompletions:function(e,t,n,i,s){var o=[],u=t.getTokenAt(n.row,n.column);u&&u.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/)?o.push(\"html-tag\"):o=r.getActiveScopes(e);var a=r.snippetMap,f=[];o.forEach(function(e){var t=a[e]||[];for(var n=t.length;n--;){var r=t[n],i=r.name||r.tabTrigger;if(!i)continue;f.push({caption:i,snippet:r.content,meta:r.tabTrigger&&!r.name?r.tabTrigger+\"\\u21e5 \":\"snippet\",type:\"snippet\"})}},this),s(null,f)},getDocTooltip:function(e){e.type==\"snippet\"&&!e.docHTML&&(e.docHTML=[\"<b>\",o.escapeHTML(e.caption),\"</b>\",\"<hr></hr>\",o.escapeHTML(e.snippet)].join(\"\"))}},c=[l,a,f];t.setCompleters=function(e){c.length=0,e&&c.push.apply(c,e)},t.addCompleter=function(e){c.push(e)},t.textCompleter=a,t.keyWordCompleter=f,t.snippetCompleter=l;var h={name:\"expandSnippet\",exec:function(e){return r.expandWithTab(e)},bindKey:\"Tab\"},p=function(e,t){d(t.session.$mode)},d=function(e){var t=e.$id;r.files||(r.files={}),v(t),e.modes&&e.modes.forEach(d)},v=function(e){if(!e||r.files[e])return;var t=e.replace(\"mode\",\"snippets\");r.files[e]={},s.loadModule(t,function(t){t&&(r.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=r.parseSnippetFile(t.snippetText)),r.register(t.snippets||[],t.scope),t.includeScopes&&(r.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){v(\"ace/mode/\"+e)})))})},m=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if(e.command.name===\"backspace\")n&&!u.getCompletionPrefix(t)&&t.completer.detach();else if(e.command.name===\"insertstring\"){var r=u.getCompletionPrefix(t);r&&!n&&(t.completer||(t.completer=new i),t.completer.autoInsert=!1,t.completer.showPopup(t))}},g=e(\"../editor\").Editor;e(\"../config\").defineOptions(g.prototype,\"editor\",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.on(\"afterExec\",m)):this.commands.removeListener(\"afterExec\",m)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(h),this.on(\"changeMode\",p),p(null,this)):(this.commands.removeCommand(h),this.off(\"changeMode\",p))},value:!1}})});                (function() {\n                    window.require([\"ace/ext/language_tools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-linking.js",
    "content": "define(\"ace/ext/linking\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"],function(e,t,n){function i(e){var n=e.editor,r=e.getAccelKey();if(r){var n=e.editor,i=e.getDocumentPosition(),s=n.session,o=s.getTokenAt(i.row,i.column);t.previousLinkingHover&&t.previousLinkingHover!=o&&n._emit(\"linkHoverOut\"),n._emit(\"linkHover\",{position:i,token:o}),t.previousLinkingHover=o}else t.previousLinkingHover&&(n._emit(\"linkHoverOut\"),t.previousLinkingHover=!1)}function s(e){var t=e.getAccelKey(),n=e.getButton();if(n==0&&t){var r=e.editor,i=e.getDocumentPosition(),s=r.session,o=s.getTokenAt(i.row,i.column);r._emit(\"linkClick\",{position:i,token:o})}}var r=e(\"ace/editor\").Editor;e(\"../config\").defineOptions(r.prototype,\"editor\",{enableLinking:{set:function(e){e?(this.on(\"click\",s),this.on(\"mousemove\",i)):(this.off(\"click\",s),this.off(\"mousemove\",i))},value:!1}}),t.previousLinkingHover=!1});                (function() {\n                    window.require([\"ace/ext/linking\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-modelist.js",
    "content": "define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function i(e){var t=a.text,n=e.split(/[\\/\\\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode=\"ace/mode/\"+e,this.extensions=n;var r;/\\^/.test(n)?r=n.replace(/\\|(\\^)?/g,function(e,t){return\"$|\"+(t?\"^\":\"^.*\\\\.\")})+\"$\":r=\"^.*\\\\.(\"+n+\")$\",this.extRe=new RegExp(r,\"gi\")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:[\"abap\"],ABC:[\"abc\"],ActionScript:[\"as\"],ADA:[\"ada|adb\"],Apache_Conf:[\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],AsciiDoc:[\"asciidoc|adoc\"],ASL:[\"dsl|asl\"],Assembly_x86:[\"asm|a\"],AutoHotKey:[\"ahk\"],Apex:[\"apex|cls|trigger|tgr\"],BatchFile:[\"bat|cmd\"],Bro:[\"bro\"],C_Cpp:[\"cpp|c|cc|cxx|h|hh|hpp|ino\"],C9Search:[\"c9search_results\"],Cirru:[\"cirru|cr\"],Clojure:[\"clj|cljs\"],Cobol:[\"CBL|COB\"],coffee:[\"coffee|cf|cson|^Cakefile\"],ColdFusion:[\"cfm\"],CSharp:[\"cs\"],Csound_Document:[\"csd\"],Csound_Orchestra:[\"orc\"],Csound_Score:[\"sco\"],CSS:[\"css\"],Curly:[\"curly\"],D:[\"d|di\"],Dart:[\"dart\"],Diff:[\"diff|patch\"],Dockerfile:[\"^Dockerfile\"],Dot:[\"dot\"],Drools:[\"drl\"],Edifact:[\"edi\"],Eiffel:[\"e|ge\"],EJS:[\"ejs\"],Elixir:[\"ex|exs\"],Elm:[\"elm\"],Erlang:[\"erl|hrl\"],Forth:[\"frt|fs|ldr|fth|4th\"],Fortran:[\"f|f90\"],FSharp:[\"fsi|fs|ml|mli|fsx|fsscript\"],FSL:[\"fsl\"],FTL:[\"ftl\"],Gcode:[\"gcode\"],Gherkin:[\"feature\"],Gitignore:[\"^.gitignore\"],Glsl:[\"glsl|frag|vert\"],Gobstones:[\"gbs\"],golang:[\"go\"],GraphQLSchema:[\"gql\"],Groovy:[\"groovy\"],HAML:[\"haml\"],Handlebars:[\"hbs|handlebars|tpl|mustache\"],Haskell:[\"hs\"],Haskell_Cabal:[\"cabal\"],haXe:[\"hx\"],Hjson:[\"hjson\"],HTML:[\"html|htm|xhtml|vue|we|wpy\"],HTML_Elixir:[\"eex|html.eex\"],HTML_Ruby:[\"erb|rhtml|html.erb\"],INI:[\"ini|conf|cfg|prefs\"],Io:[\"io\"],Jack:[\"jack\"],Jade:[\"jade|pug\"],Java:[\"java\"],JavaScript:[\"js|jsm|jsx\"],JSON:[\"json\"],JSONiq:[\"jq\"],JSP:[\"jsp\"],JSSM:[\"jssm|jssm_state\"],JSX:[\"jsx\"],Julia:[\"jl\"],Kotlin:[\"kt|kts\"],LaTeX:[\"tex|latex|ltx|bib\"],LESS:[\"less\"],Liquid:[\"liquid\"],Lisp:[\"lisp\"],LiveScript:[\"ls\"],LogiQL:[\"logic|lql\"],LSL:[\"lsl\"],Lua:[\"lua\"],LuaPage:[\"lp\"],Lucene:[\"lucene\"],Makefile:[\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],Markdown:[\"md|markdown\"],Mask:[\"mask\"],MATLAB:[\"matlab\"],Maze:[\"mz\"],MEL:[\"mel\"],MIXAL:[\"mixal\"],MUSHCode:[\"mc|mush\"],MySQL:[\"mysql\"],Nix:[\"nix\"],NSIS:[\"nsi|nsh\"],ObjectiveC:[\"m|mm\"],OCaml:[\"ml|mli\"],Pascal:[\"pas|p\"],Perl:[\"pl|pm\"],Perl6:[\"p6|pl6|pm6\"],pgSQL:[\"pgsql\"],PHP_Laravel_blade:[\"blade.php\"],PHP:[\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],Puppet:[\"epp|pp\"],Pig:[\"pig\"],Powershell:[\"ps1\"],Praat:[\"praat|praatscript|psc|proc\"],Prolog:[\"plg|prolog\"],Properties:[\"properties\"],Protobuf:[\"proto\"],Python:[\"py\"],R:[\"r\"],Razor:[\"cshtml|asp\"],RDoc:[\"Rd\"],Red:[\"red|reds\"],RHTML:[\"Rhtml\"],RST:[\"rst\"],Ruby:[\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],Rust:[\"rs\"],SASS:[\"sass\"],SCAD:[\"scad\"],Scala:[\"scala\"],Scheme:[\"scm|sm|rkt|oak|scheme\"],SCSS:[\"scss\"],SH:[\"sh|bash|^.bashrc\"],SJS:[\"sjs\"],Slim:[\"slim|skim\"],Smarty:[\"smarty|tpl\"],snippets:[\"snippets\"],Soy_Template:[\"soy\"],Space:[\"space\"],SQL:[\"sql\"],SQLServer:[\"sqlserver\"],Stylus:[\"styl|stylus\"],SVG:[\"svg\"],Swift:[\"swift\"],Tcl:[\"tcl\"],Terraform:[\"tf\",\"tfvars\",\"terragrunt\"],Tex:[\"tex\"],Text:[\"txt\"],Textile:[\"textile\"],Toml:[\"toml\"],TSX:[\"tsx\"],Twig:[\"latte|twig|swig\"],Typescript:[\"ts|typescript|str\"],Vala:[\"vala\"],VBScript:[\"vbs|vb\"],Velocity:[\"vm\"],Verilog:[\"v|vh|sv|svh\"],VHDL:[\"vhd|vhdl\"],Visualforce:[\"vfp|component|page\"],Wollok:[\"wlk|wpgm|wtest\"],XML:[\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],XQuery:[\"xq\"],YAML:[\"yaml|yml\"],Django:[\"html\"]},u={ObjectiveC:\"Objective-C\",CSharp:\"C#\",golang:\"Go\",C_Cpp:\"C and C++\",Csound_Document:\"Csound Document\",Csound_Orchestra:\"Csound\",Csound_Score:\"Csound Score\",coffee:\"CoffeeScript\",HTML_Ruby:\"HTML (Ruby)\",HTML_Elixir:\"HTML (Elixir)\",FTL:\"FreeMarker\",PHP_Laravel_blade:\"PHP (Blade Template)\",Perl6:\"Perl 6\",AutoHotKey:\"AutoHotkey / AutoIt\"},a={};for(var f in o){var l=o[f],c=(u[f]||f).replace(/_/g,\" \"),h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}});                (function() {\n                    window.require([\"ace/ext/modelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-options.js",
    "content": "define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/dom\"),i=\"#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 100000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {vertical-align: middle;}.ace_optionsMenuEntry button[ace_selected_button=true] {background: #e7e7e7;box-shadow: 1px 0px 2px 0px #adadad inset;border-color: #adadad;}.ace_optionsMenuEntry button {background: white;border: 1px solid lightgray;margin: 0px;}.ace_optionsMenuEntry button:hover{background: #f0f0f0;}\";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?\"top: \"+i+\";\":\"\",o=o?\"bottom: \"+o+\";\":\"\",s=s?\"right: \"+s+\";\":\"\",u=u?\"left: \"+u+\";\":\"\";var a=document.createElement(\"div\"),f=document.createElement(\"div\");a.style.cssText=\"margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);\",a.addEventListener(\"click\",function(){document.removeEventListener(\"keydown\",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener(\"keydown\",l),f.style.cssText=i+s+o+u,f.addEventListener(\"click\",function(e){e.stopPropagation()});var c=r.createElement(\"div\");c.style.position=\"relative\";var h=r.createElement(\"div\");h.className=\"ace_closeButton\",h.addEventListener(\"click\",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function i(e){var t=a.text,n=e.split(/[\\/\\\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode=\"ace/mode/\"+e,this.extensions=n;var r;/\\^/.test(n)?r=n.replace(/\\|(\\^)?/g,function(e,t){return\"$|\"+(t?\"^\":\"^.*\\\\.\")})+\"$\":r=\"^.*\\\\.(\"+n+\")$\",this.extRe=new RegExp(r,\"gi\")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:[\"abap\"],ABC:[\"abc\"],ActionScript:[\"as\"],ADA:[\"ada|adb\"],Apache_Conf:[\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],AsciiDoc:[\"asciidoc|adoc\"],ASL:[\"dsl|asl\"],Assembly_x86:[\"asm|a\"],AutoHotKey:[\"ahk\"],Apex:[\"apex|cls|trigger|tgr\"],BatchFile:[\"bat|cmd\"],Bro:[\"bro\"],C_Cpp:[\"cpp|c|cc|cxx|h|hh|hpp|ino\"],C9Search:[\"c9search_results\"],Cirru:[\"cirru|cr\"],Clojure:[\"clj|cljs\"],Cobol:[\"CBL|COB\"],coffee:[\"coffee|cf|cson|^Cakefile\"],ColdFusion:[\"cfm\"],CSharp:[\"cs\"],Csound_Document:[\"csd\"],Csound_Orchestra:[\"orc\"],Csound_Score:[\"sco\"],CSS:[\"css\"],Curly:[\"curly\"],D:[\"d|di\"],Dart:[\"dart\"],Diff:[\"diff|patch\"],Dockerfile:[\"^Dockerfile\"],Dot:[\"dot\"],Drools:[\"drl\"],Edifact:[\"edi\"],Eiffel:[\"e|ge\"],EJS:[\"ejs\"],Elixir:[\"ex|exs\"],Elm:[\"elm\"],Erlang:[\"erl|hrl\"],Forth:[\"frt|fs|ldr|fth|4th\"],Fortran:[\"f|f90\"],FSharp:[\"fsi|fs|ml|mli|fsx|fsscript\"],FSL:[\"fsl\"],FTL:[\"ftl\"],Gcode:[\"gcode\"],Gherkin:[\"feature\"],Gitignore:[\"^.gitignore\"],Glsl:[\"glsl|frag|vert\"],Gobstones:[\"gbs\"],golang:[\"go\"],GraphQLSchema:[\"gql\"],Groovy:[\"groovy\"],HAML:[\"haml\"],Handlebars:[\"hbs|handlebars|tpl|mustache\"],Haskell:[\"hs\"],Haskell_Cabal:[\"cabal\"],haXe:[\"hx\"],Hjson:[\"hjson\"],HTML:[\"html|htm|xhtml|vue|we|wpy\"],HTML_Elixir:[\"eex|html.eex\"],HTML_Ruby:[\"erb|rhtml|html.erb\"],INI:[\"ini|conf|cfg|prefs\"],Io:[\"io\"],Jack:[\"jack\"],Jade:[\"jade|pug\"],Java:[\"java\"],JavaScript:[\"js|jsm|jsx\"],JSON:[\"json\"],JSONiq:[\"jq\"],JSP:[\"jsp\"],JSSM:[\"jssm|jssm_state\"],JSX:[\"jsx\"],Julia:[\"jl\"],Kotlin:[\"kt|kts\"],LaTeX:[\"tex|latex|ltx|bib\"],LESS:[\"less\"],Liquid:[\"liquid\"],Lisp:[\"lisp\"],LiveScript:[\"ls\"],LogiQL:[\"logic|lql\"],LSL:[\"lsl\"],Lua:[\"lua\"],LuaPage:[\"lp\"],Lucene:[\"lucene\"],Makefile:[\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],Markdown:[\"md|markdown\"],Mask:[\"mask\"],MATLAB:[\"matlab\"],Maze:[\"mz\"],MEL:[\"mel\"],MIXAL:[\"mixal\"],MUSHCode:[\"mc|mush\"],MySQL:[\"mysql\"],Nix:[\"nix\"],NSIS:[\"nsi|nsh\"],ObjectiveC:[\"m|mm\"],OCaml:[\"ml|mli\"],Pascal:[\"pas|p\"],Perl:[\"pl|pm\"],Perl6:[\"p6|pl6|pm6\"],pgSQL:[\"pgsql\"],PHP_Laravel_blade:[\"blade.php\"],PHP:[\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],Puppet:[\"epp|pp\"],Pig:[\"pig\"],Powershell:[\"ps1\"],Praat:[\"praat|praatscript|psc|proc\"],Prolog:[\"plg|prolog\"],Properties:[\"properties\"],Protobuf:[\"proto\"],Python:[\"py\"],R:[\"r\"],Razor:[\"cshtml|asp\"],RDoc:[\"Rd\"],Red:[\"red|reds\"],RHTML:[\"Rhtml\"],RST:[\"rst\"],Ruby:[\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],Rust:[\"rs\"],SASS:[\"sass\"],SCAD:[\"scad\"],Scala:[\"scala\"],Scheme:[\"scm|sm|rkt|oak|scheme\"],SCSS:[\"scss\"],SH:[\"sh|bash|^.bashrc\"],SJS:[\"sjs\"],Slim:[\"slim|skim\"],Smarty:[\"smarty|tpl\"],snippets:[\"snippets\"],Soy_Template:[\"soy\"],Space:[\"space\"],SQL:[\"sql\"],SQLServer:[\"sqlserver\"],Stylus:[\"styl|stylus\"],SVG:[\"svg\"],Swift:[\"swift\"],Tcl:[\"tcl\"],Terraform:[\"tf\",\"tfvars\",\"terragrunt\"],Tex:[\"tex\"],Text:[\"txt\"],Textile:[\"textile\"],Toml:[\"toml\"],TSX:[\"tsx\"],Twig:[\"latte|twig|swig\"],Typescript:[\"ts|typescript|str\"],Vala:[\"vala\"],VBScript:[\"vbs|vb\"],Velocity:[\"vm\"],Verilog:[\"v|vh|sv|svh\"],VHDL:[\"vhd|vhdl\"],Visualforce:[\"vfp|component|page\"],Wollok:[\"wlk|wpgm|wtest\"],XML:[\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],XQuery:[\"xq\"],YAML:[\"yaml|yml\"],Django:[\"html\"]},u={ObjectiveC:\"Objective-C\",CSharp:\"C#\",golang:\"Go\",C_Cpp:\"C and C++\",Csound_Document:\"Csound Document\",Csound_Orchestra:\"Csound\",Csound_Score:\"Csound Score\",coffee:\"CoffeeScript\",HTML_Ruby:\"HTML (Ruby)\",HTML_Elixir:\"HTML (Elixir)\",FTL:\"FreeMarker\",PHP_Laravel_blade:\"PHP (Blade Template)\",Perl6:\"Perl 6\",AutoHotKey:\"AutoHotkey / AutoIt\"},a={};for(var f in o){var l=o[f],c=(u[f]||f).replace(/_/g,\" \"),h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}}),define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=[[\"Chrome\"],[\"Clouds\"],[\"Crimson Editor\"],[\"Dawn\"],[\"Dreamweaver\"],[\"Eclipse\"],[\"GitHub\"],[\"IPlastic\"],[\"Solarized Light\"],[\"TextMate\"],[\"Tomorrow\"],[\"XCode\"],[\"Kuroir\"],[\"KatzenMilch\"],[\"SQL Server\",\"sqlserver\",\"light\"],[\"Ambiance\",\"ambiance\",\"dark\"],[\"Chaos\",\"chaos\",\"dark\"],[\"Clouds Midnight\",\"clouds_midnight\",\"dark\"],[\"Dracula\",\"\",\"dark\"],[\"Cobalt\",\"cobalt\",\"dark\"],[\"Gruvbox\",\"gruvbox\",\"dark\"],[\"Green on Black\",\"gob\",\"dark\"],[\"idle Fingers\",\"idle_fingers\",\"dark\"],[\"krTheme\",\"kr_theme\",\"dark\"],[\"Merbivore\",\"merbivore\",\"dark\"],[\"Merbivore Soft\",\"merbivore_soft\",\"dark\"],[\"Mono Industrial\",\"mono_industrial\",\"dark\"],[\"Monokai\",\"monokai\",\"dark\"],[\"Pastel on dark\",\"pastel_on_dark\",\"dark\"],[\"Solarized Dark\",\"solarized_dark\",\"dark\"],[\"Terminal\",\"terminal\",\"dark\"],[\"Tomorrow Night\",\"tomorrow_night\",\"dark\"],[\"Tomorrow Night Blue\",\"tomorrow_night_blue\",\"dark\"],[\"Tomorrow Night Bright\",\"tomorrow_night_bright\",\"dark\"],[\"Tomorrow Night 80s\",\"tomorrow_night_eighties\",\"dark\"],[\"Twilight\",\"twilight\",\"dark\"],[\"Vibrant Ink\",\"vibrant_ink\",\"dark\"]];t.themesByName={},t.themes=r.map(function(e){var n=e[1]||e[0].replace(/ /g,\"_\").toLowerCase(),r={caption:e[0],theme:\"ace/theme/\"+n,isDark:e[2]==\"dark\",name:n};return t.themesByName[n]=r,r})}),define(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"],function(e,t,n){\"use strict\";var r=e(\"./menu_tools/overlay_page\").overlayPage,i=e(\"../lib/dom\"),s=e(\"../lib/oop\"),o=e(\"../lib/event_emitter\").EventEmitter,u=i.buildDom,a=e(\"./modelist\"),f=e(\"./themelist\"),l={Bright:[],Dark:[]};f.themes.forEach(function(e){l[e.isDark?\"Dark\":\"Bright\"].push({caption:e.caption,value:e.theme})});var c=a.modes.map(function(e){return{caption:e.caption,value:e.mode}}),h={Main:{Mode:{path:\"mode\",type:\"select\",items:c},Theme:{path:\"theme\",type:\"select\",items:l},Keybinding:{type:\"buttonBar\",path:\"keyboardHandler\",items:[{caption:\"Ace\",value:null},{caption:\"Vim\",value:\"ace/keyboard/vim\"},{caption:\"Emacs\",value:\"ace/keyboard/emacs\"},{caption:\"Sublime\",value:\"ace/keyboard/sublime\"}]},\"Font Size\":{path:\"fontSize\",type:\"number\",defaultValue:12,defaults:[{caption:\"12px\",value:12},{caption:\"24px\",value:24}]},\"Soft Wrap\":{type:\"buttonBar\",path:\"wrap\",items:[{caption:\"Off\",value:\"off\"},{caption:\"View\",value:\"free\"},{caption:\"margin\",value:\"printMargin\"},{caption:\"40\",value:\"40\"}]},\"Cursor Style\":{path:\"cursorStyle\",items:[{caption:\"Ace\",value:\"ace\"},{caption:\"Slim\",value:\"slim\"},{caption:\"Smooth\",value:\"smooth\"},{caption:\"Smooth And Slim\",value:\"smooth slim\"},{caption:\"Wide\",value:\"wide\"}]},Folding:{path:\"foldStyle\",items:[{caption:\"Manual\",value:\"manual\"},{caption:\"Mark begin\",value:\"markbegin\"},{caption:\"Mark begin and end\",value:\"markbeginend\"}]},\"Soft Tabs\":[{path:\"useSoftTabs\"},{path:\"tabSize\",type:\"number\",values:[2,3,4,8,16]}],Overscroll:{type:\"buttonBar\",path:\"scrollPastEnd\",items:[{caption:\"None\",value:0},{caption:\"Half\",value:.5},{caption:\"Full\",value:1}]}},More:{\"Atomic soft tabs\":{path:\"navigateWithinSoftTabs\"},\"Enable Behaviours\":{path:\"behavioursEnabled\"},\"Full Line Selection\":{type:\"checkbox\",values:\"text|line\",path:\"selectionStyle\"},\"Highlight Active Line\":{path:\"highlightActiveLine\"},\"Show Invisibles\":{path:\"showInvisibles\"},\"Show Indent Guides\":{path:\"displayIndentGuides\"},\"Persistent Scrollbar\":[{path:\"hScrollBarAlwaysVisible\"},{path:\"vScrollBarAlwaysVisible\"}],\"Animate scrolling\":{path:\"animatedScroll\"},\"Show Gutter\":{path:\"showGutter\"},\"Show Line Numbers\":{path:\"showLineNumbers\"},\"Relative Line Numbers\":{path:\"relativeLineNumbers\"},\"Fixed Gutter Width\":{path:\"fixedWidthGutter\"},\"Show Print Margin\":[{path:\"showPrintMargin\"},{type:\"number\",path:\"printMarginColumn\"}],\"Indented Soft Wrap\":{path:\"indentedSoftWrap\"},\"Highlight selected word\":{path:\"highlightSelectedWord\"},\"Fade Fold Widgets\":{path:\"fadeFoldWidgets\"},\"Use textarea for IME\":{path:\"useTextareaForIME\"},\"Merge Undo Deltas\":{path:\"mergeUndoDeltas\",items:[{caption:\"Always\",value:\"always\"},{caption:\"Never\",value:\"false\"},{caption:\"Timed\",value:\"true\"}]},\"Elastic Tabstops\":{path:\"useElasticTabstops\"},\"Incremental Search\":{path:\"useIncrementalSearch\"},\"Read-only\":{path:\"readOnly\"},\"Copy without selection\":{path:\"copyWithEmptySelection\"},\"Live Autocompletion\":{path:\"enableLiveAutocompletion\"}}},p=function(e,t){this.editor=e,this.container=t||document.createElement(\"div\"),this.groups=[],this.options={}};(function(){s.implement(this,o),this.add=function(e){e.Main&&s.mixin(h.Main,e.Main),e.More&&s.mixin(h.More,e.More)},this.render=function(){this.container.innerHTML=\"\",u([\"table\",{id:\"controls\"},this.renderOptionGroup(h.Main),[\"tr\",null,[\"td\",{colspan:2},[\"table\",{id:\"more-controls\"},this.renderOptionGroup(h.More)]]]],this.container)},this.renderOptionGroup=function(e){return Object.keys(e).map(function(t,n){var r=e[t];return r.position||(r.position=n/1e4),r.label||(r.label=t),r}).sort(function(e,t){return e.position-t.position}).map(function(e){return this.renderOption(e.label,e)},this)},this.renderOptionControl=function(e,t){var n=this;if(Array.isArray(t))return t.map(function(t){return n.renderOptionControl(e,t)});var r,i=n.getOption(t);t.values&&t.type!=\"checkbox\"&&(typeof t.values==\"string\"&&(t.values=t.values.split(\"|\")),t.items=t.values.map(function(e){return{value:e,name:e}}));if(t.type==\"buttonBar\")r=[\"div\",t.items.map(function(e){return[\"button\",{value:e.value,ace_selected_button:i==e.value,onclick:function(){n.setOption(t,e.value);var r=this.parentNode.querySelectorAll(\"[ace_selected_button]\");for(var i=0;i<r.length;i++)r[i].removeAttribute(\"ace_selected_button\");this.setAttribute(\"ace_selected_button\",!0)}},e.desc||e.caption||e.name]})];else if(t.type==\"number\")r=[\"input\",{type:\"number\",value:i||t.defaultValue,style:\"width:3em\",oninput:function(){n.setOption(t,parseInt(this.value))}}],t.defaults&&(r=[r,t.defaults.map(function(e){return[\"button\",{onclick:function(){var t=this.parentNode.firstChild;t.value=e.value,t.oninput()}},e.caption]})]);else if(t.items){var s=function(e){return e.map(function(e){return[\"option\",{value:e.value||e.name},e.desc||e.caption||e.name]})},o=Array.isArray(t.items)?s(t.items):Object.keys(t.items).map(function(e){return[\"optgroup\",{label:e},s(t.items[e])]});r=[\"select\",{id:e,value:i,onchange:function(){n.setOption(t,this.value)}},o]}else typeof t.values==\"string\"&&(t.values=t.values.split(\"|\")),t.values&&(i=i==t.values[1]),r=[\"input\",{type:\"checkbox\",id:e,checked:i||null,onchange:function(){var e=this.checked;t.values&&(e=t.values[e?1:0]),n.setOption(t,e)}}],t.type==\"checkedNumber\"&&(r=[r,[]]);return r},this.renderOption=function(e,t){if(t.path&&!t.onchange&&!this.editor.$options[t.path])return;this.options[t.path]=t;var n=\"-\"+t.path,r=this.renderOptionControl(n,t);return[\"tr\",{\"class\":\"ace_optionsMenuEntry\"},[\"td\",[\"label\",{\"for\":n},e]],[\"td\",r]]},this.setOption=function(e,t){typeof e==\"string\"&&(e=this.options[e]),t==\"false\"&&(t=!1),t==\"true\"&&(t=!0),t==\"null\"&&(t=null),t==\"undefined\"&&(t=undefined),typeof t==\"string\"&&parseFloat(t).toString()==t&&(t=parseFloat(t)),e.onchange?e.onchange(t):e.path&&this.editor.setOption(e.path,t),this._signal(\"setOption\",{name:e.path,value:t})},this.getOption=function(e){return e.getValue?e.getValue():this.editor.getOption(e.path)}}).call(p.prototype),t.OptionPanel=p});                (function() {\n                    window.require([\"ace/ext/options\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-rtl.js",
    "content": "define(\"ace/ext/rtl\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";function u(e,t){var n=t.getSelection().lead;t.session.$bidiHandler.isRtlLine(n.row)&&n.column===0&&(t.session.$bidiHandler.isMoveLeftOperation&&n.row>0?t.getSelection().moveCursorTo(n.row-1,t.session.getLine(n.row-1).length):t.getSelection().isEmpty()?n.column+=1:n.setPosition(n.row,n.column+1))}function a(e){e.editor.session.$bidiHandler.isMoveLeftOperation=/gotoleft|selectleft|backspace|removewordleft/.test(e.command.name)}function f(e,t){var n=t.session;n.$bidiHandler.currentRow=null;if(n.$bidiHandler.isRtlLine(e.start.row)&&e.action===\"insert\"&&e.lines.length>1)for(var r=e.start.row;r<e.end.row;r++)n.getLine(r+1).charAt(0)!==n.$bidiHandler.RLE&&(n.doc.$lines[r+1]=n.$bidiHandler.RLE+n.getLine(r+1))}function l(e,t){var n=t.session,r=n.$bidiHandler,i=t.$textLayer.$lines.cells,s=t.layerConfig.width-t.layerConfig.padding+\"px\";i.forEach(function(e){var t=e.element.style;r&&r.isRtlLine(e.row)?(t.direction=\"rtl\",t.textAlign=\"right\",t.width=s):(t.direction=\"\",t.textAlign=\"\",t.width=\"\")})}function c(e){function n(e){var t=e.element.style;t.direction=t.textAlign=t.width=\"\"}var t=e.$textLayer.$lines;t.cells.forEach(n),t.cellCache.forEach(n)}var r=e(\"ace/lib/dom\"),i=e(\"ace/lib/lang\"),s=[{name:\"leftToRight\",bindKey:{win:\"Ctrl-Alt-Shift-L\",mac:\"Command-Alt-Shift-L\"},exec:function(e){e.session.$bidiHandler.setRtlDirection(e,!1)},readOnly:!0},{name:\"rightToLeft\",bindKey:{win:\"Ctrl-Alt-Shift-R\",mac:\"Command-Alt-Shift-R\"},exec:function(e){e.session.$bidiHandler.setRtlDirection(e,!0)},readOnly:!0}],o=e(\"../editor\").Editor;e(\"../config\").defineOptions(o.prototype,\"editor\",{rtlText:{set:function(e){e?(this.on(\"change\",f),this.on(\"changeSelection\",u),this.renderer.on(\"afterRender\",l),this.commands.on(\"exec\",a),this.commands.addCommands(s)):(this.off(\"change\",f),this.off(\"changeSelection\",u),this.renderer.off(\"afterRender\",l),this.commands.off(\"exec\",a),this.commands.removeCommands(s),c(this.renderer)),this.renderer.updateFull()}},rtl:{set:function(e){this.session.$bidiHandler.$isRtl=e,e?(this.setOption(\"rtlText\",!1),this.renderer.on(\"afterRender\",l),this.session.$bidiHandler.seenBidi=!0):(this.renderer.off(\"afterRender\",l),c(this.renderer)),this.renderer.updateFull()}}})});                (function() {\n                    window.require([\"ace/ext/rtl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-searchbox.js",
    "content": "define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/event\"),o='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: \"\";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width:  2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing:    border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/keys\"),f=999;r.importCssString(o,\"ace_searchbox\");var l=function(e,t,n){var i=r.createElement(\"div\");r.buildDom([\"div\",{\"class\":\"ace_search right\"},[\"span\",{action:\"hide\",\"class\":\"ace_searchbtn_close\"}],[\"div\",{\"class\":\"ace_search_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:\"Search for\",spellcheck:\"false\"}],[\"span\",{action:\"findPrev\",\"class\":\"ace_searchbtn prev\"},\"\\u200b\"],[\"span\",{action:\"findNext\",\"class\":\"ace_searchbtn next\"},\"\\u200b\"],[\"span\",{action:\"findAll\",\"class\":\"ace_searchbtn\",title:\"Alt-Enter\"},\"All\"]],[\"div\",{\"class\":\"ace_replace_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:\"Replace with\",spellcheck:\"false\"}],[\"span\",{action:\"replaceAndFindNext\",\"class\":\"ace_searchbtn\"},\"Replace\"],[\"span\",{action:\"replaceAll\",\"class\":\"ace_searchbtn\"},\"All\"]],[\"div\",{\"class\":\"ace_search_options\"},[\"span\",{action:\"toggleReplace\",\"class\":\"ace_button\",title:\"Toggle Replace mode\",style:\"float:left;margin-top:-2px;padding:0 5px;\"},\"+\"],[\"span\",{\"class\":\"ace_search_counter\"}],[\"span\",{action:\"toggleRegexpMode\",\"class\":\"ace_button\",title:\"RegExp Search\"},\".*\"],[\"span\",{action:\"toggleCaseSensitive\",\"class\":\"ace_button\",title:\"CaseSensitive Search\"},\"Aa\"],[\"span\",{action:\"toggleWholeWords\",\"class\":\"ace_button\",title:\"Whole Word Search\"},\"\\\\b\"],[\"span\",{action:\"searchInSelection\",\"class\":\"ace_button\",title:\"Search In Selection\"},\"S\"]]],i),this.element=i.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),r.importCssString(o,\"ace_searchbox\",e.container)};(function(){this.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},this.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOption=e.querySelector(\"[action=searchInSelection]\"),this.replaceOption=e.querySelector(\"[action=toggleReplace]\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\"),this.searchCounter=e.querySelector(\".ace_search_counter\")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,\"mousedown\",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,\"click\",function(e){var n=e.target||e.srcElement,r=n.getAttribute(\"action\");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,\"input\",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,\"focus\",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,\"focus\",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({\"Ctrl-f|Command-f\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},\"Ctrl-H|Command-Option-F\":function(e){if(e.editor.getReadOnly())return;e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus()},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:\"toggleReplace\",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:\"searchInSelection\",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]),this.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,\"ace_active-line\"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(e){r.setCssClass(this.replaceOption,\"checked\",this.searchRange),r.setCssClass(this.searchOption,\"checked\",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?\"-\":\"+\",r.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?\"none\":\"\",this.replaceBox.style.display=this.replaceOption.checked&&!t?\"\":\"none\",this.find(!1,!1,e)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var i=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange}),s=!i&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",s),this.editor._emit(\"findSearchBox\",{match:!s}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=0,r=0;if(t){var i=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),s=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(s-=e.session.doc.positionToIndex(this.searchRange.start));var o=t.lastIndex=0,u;while(u=t.exec(i)){n++,o=u.index,o<=s&&r++;if(n>f)break;if(!u[0]){t.lastIndex=o+=1;if(o>=i.length)break}}}this.searchCounter.textContent=r+\" of \"+(n>f?f+\"+\":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",t),this.editor._emit(\"findSearchBox\",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off(\"changeSession\",this.setSession),this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on(\"changeSession\",this.setSession),this.element.style.display=\"\",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}});                (function() {\n                    window.require([\"ace/ext/searchbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-settings_menu.js",
    "content": "define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/dom\"),i=\"#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 100000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {vertical-align: middle;}.ace_optionsMenuEntry button[ace_selected_button=true] {background: #e7e7e7;box-shadow: 1px 0px 2px 0px #adadad inset;border-color: #adadad;}.ace_optionsMenuEntry button {background: white;border: 1px solid lightgray;margin: 0px;}.ace_optionsMenuEntry button:hover{background: #f0f0f0;}\";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?\"top: \"+i+\";\":\"\",o=o?\"bottom: \"+o+\";\":\"\",s=s?\"right: \"+s+\";\":\"\",u=u?\"left: \"+u+\";\":\"\";var a=document.createElement(\"div\"),f=document.createElement(\"div\");a.style.cssText=\"margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);\",a.addEventListener(\"click\",function(){document.removeEventListener(\"keydown\",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener(\"keydown\",l),f.style.cssText=i+s+o+u,f.addEventListener(\"click\",function(e){e.stopPropagation()});var c=r.createElement(\"div\");c.style.position=\"relative\";var h=r.createElement(\"div\");h.className=\"ace_closeButton\",h.addEventListener(\"click\",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function i(e){var t=a.text,n=e.split(/[\\/\\\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode=\"ace/mode/\"+e,this.extensions=n;var r;/\\^/.test(n)?r=n.replace(/\\|(\\^)?/g,function(e,t){return\"$|\"+(t?\"^\":\"^.*\\\\.\")})+\"$\":r=\"^.*\\\\.(\"+n+\")$\",this.extRe=new RegExp(r,\"gi\")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:[\"abap\"],ABC:[\"abc\"],ActionScript:[\"as\"],ADA:[\"ada|adb\"],Apache_Conf:[\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],AsciiDoc:[\"asciidoc|adoc\"],ASL:[\"dsl|asl\"],Assembly_x86:[\"asm|a\"],AutoHotKey:[\"ahk\"],Apex:[\"apex|cls|trigger|tgr\"],BatchFile:[\"bat|cmd\"],Bro:[\"bro\"],C_Cpp:[\"cpp|c|cc|cxx|h|hh|hpp|ino\"],C9Search:[\"c9search_results\"],Cirru:[\"cirru|cr\"],Clojure:[\"clj|cljs\"],Cobol:[\"CBL|COB\"],coffee:[\"coffee|cf|cson|^Cakefile\"],ColdFusion:[\"cfm\"],CSharp:[\"cs\"],Csound_Document:[\"csd\"],Csound_Orchestra:[\"orc\"],Csound_Score:[\"sco\"],CSS:[\"css\"],Curly:[\"curly\"],D:[\"d|di\"],Dart:[\"dart\"],Diff:[\"diff|patch\"],Dockerfile:[\"^Dockerfile\"],Dot:[\"dot\"],Drools:[\"drl\"],Edifact:[\"edi\"],Eiffel:[\"e|ge\"],EJS:[\"ejs\"],Elixir:[\"ex|exs\"],Elm:[\"elm\"],Erlang:[\"erl|hrl\"],Forth:[\"frt|fs|ldr|fth|4th\"],Fortran:[\"f|f90\"],FSharp:[\"fsi|fs|ml|mli|fsx|fsscript\"],FSL:[\"fsl\"],FTL:[\"ftl\"],Gcode:[\"gcode\"],Gherkin:[\"feature\"],Gitignore:[\"^.gitignore\"],Glsl:[\"glsl|frag|vert\"],Gobstones:[\"gbs\"],golang:[\"go\"],GraphQLSchema:[\"gql\"],Groovy:[\"groovy\"],HAML:[\"haml\"],Handlebars:[\"hbs|handlebars|tpl|mustache\"],Haskell:[\"hs\"],Haskell_Cabal:[\"cabal\"],haXe:[\"hx\"],Hjson:[\"hjson\"],HTML:[\"html|htm|xhtml|vue|we|wpy\"],HTML_Elixir:[\"eex|html.eex\"],HTML_Ruby:[\"erb|rhtml|html.erb\"],INI:[\"ini|conf|cfg|prefs\"],Io:[\"io\"],Jack:[\"jack\"],Jade:[\"jade|pug\"],Java:[\"java\"],JavaScript:[\"js|jsm|jsx\"],JSON:[\"json\"],JSONiq:[\"jq\"],JSP:[\"jsp\"],JSSM:[\"jssm|jssm_state\"],JSX:[\"jsx\"],Julia:[\"jl\"],Kotlin:[\"kt|kts\"],LaTeX:[\"tex|latex|ltx|bib\"],LESS:[\"less\"],Liquid:[\"liquid\"],Lisp:[\"lisp\"],LiveScript:[\"ls\"],LogiQL:[\"logic|lql\"],LSL:[\"lsl\"],Lua:[\"lua\"],LuaPage:[\"lp\"],Lucene:[\"lucene\"],Makefile:[\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],Markdown:[\"md|markdown\"],Mask:[\"mask\"],MATLAB:[\"matlab\"],Maze:[\"mz\"],MEL:[\"mel\"],MIXAL:[\"mixal\"],MUSHCode:[\"mc|mush\"],MySQL:[\"mysql\"],Nix:[\"nix\"],NSIS:[\"nsi|nsh\"],ObjectiveC:[\"m|mm\"],OCaml:[\"ml|mli\"],Pascal:[\"pas|p\"],Perl:[\"pl|pm\"],Perl6:[\"p6|pl6|pm6\"],pgSQL:[\"pgsql\"],PHP_Laravel_blade:[\"blade.php\"],PHP:[\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],Puppet:[\"epp|pp\"],Pig:[\"pig\"],Powershell:[\"ps1\"],Praat:[\"praat|praatscript|psc|proc\"],Prolog:[\"plg|prolog\"],Properties:[\"properties\"],Protobuf:[\"proto\"],Python:[\"py\"],R:[\"r\"],Razor:[\"cshtml|asp\"],RDoc:[\"Rd\"],Red:[\"red|reds\"],RHTML:[\"Rhtml\"],RST:[\"rst\"],Ruby:[\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],Rust:[\"rs\"],SASS:[\"sass\"],SCAD:[\"scad\"],Scala:[\"scala\"],Scheme:[\"scm|sm|rkt|oak|scheme\"],SCSS:[\"scss\"],SH:[\"sh|bash|^.bashrc\"],SJS:[\"sjs\"],Slim:[\"slim|skim\"],Smarty:[\"smarty|tpl\"],snippets:[\"snippets\"],Soy_Template:[\"soy\"],Space:[\"space\"],SQL:[\"sql\"],SQLServer:[\"sqlserver\"],Stylus:[\"styl|stylus\"],SVG:[\"svg\"],Swift:[\"swift\"],Tcl:[\"tcl\"],Terraform:[\"tf\",\"tfvars\",\"terragrunt\"],Tex:[\"tex\"],Text:[\"txt\"],Textile:[\"textile\"],Toml:[\"toml\"],TSX:[\"tsx\"],Twig:[\"latte|twig|swig\"],Typescript:[\"ts|typescript|str\"],Vala:[\"vala\"],VBScript:[\"vbs|vb\"],Velocity:[\"vm\"],Verilog:[\"v|vh|sv|svh\"],VHDL:[\"vhd|vhdl\"],Visualforce:[\"vfp|component|page\"],Wollok:[\"wlk|wpgm|wtest\"],XML:[\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],XQuery:[\"xq\"],YAML:[\"yaml|yml\"],Django:[\"html\"]},u={ObjectiveC:\"Objective-C\",CSharp:\"C#\",golang:\"Go\",C_Cpp:\"C and C++\",Csound_Document:\"Csound Document\",Csound_Orchestra:\"Csound\",Csound_Score:\"Csound Score\",coffee:\"CoffeeScript\",HTML_Ruby:\"HTML (Ruby)\",HTML_Elixir:\"HTML (Elixir)\",FTL:\"FreeMarker\",PHP_Laravel_blade:\"PHP (Blade Template)\",Perl6:\"Perl 6\",AutoHotKey:\"AutoHotkey / AutoIt\"},a={};for(var f in o){var l=o[f],c=(u[f]||f).replace(/_/g,\" \"),h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}}),define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=[[\"Chrome\"],[\"Clouds\"],[\"Crimson Editor\"],[\"Dawn\"],[\"Dreamweaver\"],[\"Eclipse\"],[\"GitHub\"],[\"IPlastic\"],[\"Solarized Light\"],[\"TextMate\"],[\"Tomorrow\"],[\"XCode\"],[\"Kuroir\"],[\"KatzenMilch\"],[\"SQL Server\",\"sqlserver\",\"light\"],[\"Ambiance\",\"ambiance\",\"dark\"],[\"Chaos\",\"chaos\",\"dark\"],[\"Clouds Midnight\",\"clouds_midnight\",\"dark\"],[\"Dracula\",\"\",\"dark\"],[\"Cobalt\",\"cobalt\",\"dark\"],[\"Gruvbox\",\"gruvbox\",\"dark\"],[\"Green on Black\",\"gob\",\"dark\"],[\"idle Fingers\",\"idle_fingers\",\"dark\"],[\"krTheme\",\"kr_theme\",\"dark\"],[\"Merbivore\",\"merbivore\",\"dark\"],[\"Merbivore Soft\",\"merbivore_soft\",\"dark\"],[\"Mono Industrial\",\"mono_industrial\",\"dark\"],[\"Monokai\",\"monokai\",\"dark\"],[\"Pastel on dark\",\"pastel_on_dark\",\"dark\"],[\"Solarized Dark\",\"solarized_dark\",\"dark\"],[\"Terminal\",\"terminal\",\"dark\"],[\"Tomorrow Night\",\"tomorrow_night\",\"dark\"],[\"Tomorrow Night Blue\",\"tomorrow_night_blue\",\"dark\"],[\"Tomorrow Night Bright\",\"tomorrow_night_bright\",\"dark\"],[\"Tomorrow Night 80s\",\"tomorrow_night_eighties\",\"dark\"],[\"Twilight\",\"twilight\",\"dark\"],[\"Vibrant Ink\",\"vibrant_ink\",\"dark\"]];t.themesByName={},t.themes=r.map(function(e){var n=e[1]||e[0].replace(/ /g,\"_\").toLowerCase(),r={caption:e[0],theme:\"ace/theme/\"+n,isDark:e[2]==\"dark\",name:n};return t.themesByName[n]=r,r})}),define(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"],function(e,t,n){\"use strict\";var r=e(\"./menu_tools/overlay_page\").overlayPage,i=e(\"../lib/dom\"),s=e(\"../lib/oop\"),o=e(\"../lib/event_emitter\").EventEmitter,u=i.buildDom,a=e(\"./modelist\"),f=e(\"./themelist\"),l={Bright:[],Dark:[]};f.themes.forEach(function(e){l[e.isDark?\"Dark\":\"Bright\"].push({caption:e.caption,value:e.theme})});var c=a.modes.map(function(e){return{caption:e.caption,value:e.mode}}),h={Main:{Mode:{path:\"mode\",type:\"select\",items:c},Theme:{path:\"theme\",type:\"select\",items:l},Keybinding:{type:\"buttonBar\",path:\"keyboardHandler\",items:[{caption:\"Ace\",value:null},{caption:\"Vim\",value:\"ace/keyboard/vim\"},{caption:\"Emacs\",value:\"ace/keyboard/emacs\"},{caption:\"Sublime\",value:\"ace/keyboard/sublime\"}]},\"Font Size\":{path:\"fontSize\",type:\"number\",defaultValue:12,defaults:[{caption:\"12px\",value:12},{caption:\"24px\",value:24}]},\"Soft Wrap\":{type:\"buttonBar\",path:\"wrap\",items:[{caption:\"Off\",value:\"off\"},{caption:\"View\",value:\"free\"},{caption:\"margin\",value:\"printMargin\"},{caption:\"40\",value:\"40\"}]},\"Cursor Style\":{path:\"cursorStyle\",items:[{caption:\"Ace\",value:\"ace\"},{caption:\"Slim\",value:\"slim\"},{caption:\"Smooth\",value:\"smooth\"},{caption:\"Smooth And Slim\",value:\"smooth slim\"},{caption:\"Wide\",value:\"wide\"}]},Folding:{path:\"foldStyle\",items:[{caption:\"Manual\",value:\"manual\"},{caption:\"Mark begin\",value:\"markbegin\"},{caption:\"Mark begin and end\",value:\"markbeginend\"}]},\"Soft Tabs\":[{path:\"useSoftTabs\"},{path:\"tabSize\",type:\"number\",values:[2,3,4,8,16]}],Overscroll:{type:\"buttonBar\",path:\"scrollPastEnd\",items:[{caption:\"None\",value:0},{caption:\"Half\",value:.5},{caption:\"Full\",value:1}]}},More:{\"Atomic soft tabs\":{path:\"navigateWithinSoftTabs\"},\"Enable Behaviours\":{path:\"behavioursEnabled\"},\"Full Line Selection\":{type:\"checkbox\",values:\"text|line\",path:\"selectionStyle\"},\"Highlight Active Line\":{path:\"highlightActiveLine\"},\"Show Invisibles\":{path:\"showInvisibles\"},\"Show Indent Guides\":{path:\"displayIndentGuides\"},\"Persistent Scrollbar\":[{path:\"hScrollBarAlwaysVisible\"},{path:\"vScrollBarAlwaysVisible\"}],\"Animate scrolling\":{path:\"animatedScroll\"},\"Show Gutter\":{path:\"showGutter\"},\"Show Line Numbers\":{path:\"showLineNumbers\"},\"Relative Line Numbers\":{path:\"relativeLineNumbers\"},\"Fixed Gutter Width\":{path:\"fixedWidthGutter\"},\"Show Print Margin\":[{path:\"showPrintMargin\"},{type:\"number\",path:\"printMarginColumn\"}],\"Indented Soft Wrap\":{path:\"indentedSoftWrap\"},\"Highlight selected word\":{path:\"highlightSelectedWord\"},\"Fade Fold Widgets\":{path:\"fadeFoldWidgets\"},\"Use textarea for IME\":{path:\"useTextareaForIME\"},\"Merge Undo Deltas\":{path:\"mergeUndoDeltas\",items:[{caption:\"Always\",value:\"always\"},{caption:\"Never\",value:\"false\"},{caption:\"Timed\",value:\"true\"}]},\"Elastic Tabstops\":{path:\"useElasticTabstops\"},\"Incremental Search\":{path:\"useIncrementalSearch\"},\"Read-only\":{path:\"readOnly\"},\"Copy without selection\":{path:\"copyWithEmptySelection\"},\"Live Autocompletion\":{path:\"enableLiveAutocompletion\"}}},p=function(e,t){this.editor=e,this.container=t||document.createElement(\"div\"),this.groups=[],this.options={}};(function(){s.implement(this,o),this.add=function(e){e.Main&&s.mixin(h.Main,e.Main),e.More&&s.mixin(h.More,e.More)},this.render=function(){this.container.innerHTML=\"\",u([\"table\",{id:\"controls\"},this.renderOptionGroup(h.Main),[\"tr\",null,[\"td\",{colspan:2},[\"table\",{id:\"more-controls\"},this.renderOptionGroup(h.More)]]]],this.container)},this.renderOptionGroup=function(e){return Object.keys(e).map(function(t,n){var r=e[t];return r.position||(r.position=n/1e4),r.label||(r.label=t),r}).sort(function(e,t){return e.position-t.position}).map(function(e){return this.renderOption(e.label,e)},this)},this.renderOptionControl=function(e,t){var n=this;if(Array.isArray(t))return t.map(function(t){return n.renderOptionControl(e,t)});var r,i=n.getOption(t);t.values&&t.type!=\"checkbox\"&&(typeof t.values==\"string\"&&(t.values=t.values.split(\"|\")),t.items=t.values.map(function(e){return{value:e,name:e}}));if(t.type==\"buttonBar\")r=[\"div\",t.items.map(function(e){return[\"button\",{value:e.value,ace_selected_button:i==e.value,onclick:function(){n.setOption(t,e.value);var r=this.parentNode.querySelectorAll(\"[ace_selected_button]\");for(var i=0;i<r.length;i++)r[i].removeAttribute(\"ace_selected_button\");this.setAttribute(\"ace_selected_button\",!0)}},e.desc||e.caption||e.name]})];else if(t.type==\"number\")r=[\"input\",{type:\"number\",value:i||t.defaultValue,style:\"width:3em\",oninput:function(){n.setOption(t,parseInt(this.value))}}],t.defaults&&(r=[r,t.defaults.map(function(e){return[\"button\",{onclick:function(){var t=this.parentNode.firstChild;t.value=e.value,t.oninput()}},e.caption]})]);else if(t.items){var s=function(e){return e.map(function(e){return[\"option\",{value:e.value||e.name},e.desc||e.caption||e.name]})},o=Array.isArray(t.items)?s(t.items):Object.keys(t.items).map(function(e){return[\"optgroup\",{label:e},s(t.items[e])]});r=[\"select\",{id:e,value:i,onchange:function(){n.setOption(t,this.value)}},o]}else typeof t.values==\"string\"&&(t.values=t.values.split(\"|\")),t.values&&(i=i==t.values[1]),r=[\"input\",{type:\"checkbox\",id:e,checked:i||null,onchange:function(){var e=this.checked;t.values&&(e=t.values[e?1:0]),n.setOption(t,e)}}],t.type==\"checkedNumber\"&&(r=[r,[]]);return r},this.renderOption=function(e,t){if(t.path&&!t.onchange&&!this.editor.$options[t.path])return;this.options[t.path]=t;var n=\"-\"+t.path,r=this.renderOptionControl(n,t);return[\"tr\",{\"class\":\"ace_optionsMenuEntry\"},[\"td\",[\"label\",{\"for\":n},e]],[\"td\",r]]},this.setOption=function(e,t){typeof e==\"string\"&&(e=this.options[e]),t==\"false\"&&(t=!1),t==\"true\"&&(t=!0),t==\"null\"&&(t=null),t==\"undefined\"&&(t=undefined),typeof t==\"string\"&&parseFloat(t).toString()==t&&(t=parseFloat(t)),e.onchange?e.onchange(t):e.path&&this.editor.setOption(e.path,t),this._signal(\"setOption\",{name:e.path,value:t})},this.getOption=function(e){return e.getValue?e.getValue():this.editor.getOption(e.path)}}).call(p.prototype),t.OptionPanel=p}),define(\"ace/ext/settings_menu\",[\"require\",\"exports\",\"module\",\"ace/ext/options\",\"ace/ext/menu_tools/overlay_page\",\"ace/editor\"],function(e,t,n){\"use strict\";function s(e){if(!document.getElementById(\"ace_settingsmenu\")){var t=new r(e);t.render(),t.container.id=\"ace_settingsmenu\",i(e,t.container,\"0\",\"0\",\"0\"),t.container.querySelector(\"select,input,button,checkbox\").focus()}}var r=e(\"ace/ext/options\").OptionPanel,i=e(\"./menu_tools/overlay_page\").overlayPage;n.exports.init=function(t){var n=e(\"ace/editor\").Editor;n.prototype.showSettingsMenu=function(){s(this)}}});                (function() {\n                    window.require([\"ace/ext/settings_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-spellcheck.js",
    "content": "define(\"ace/ext/spellcheck\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\");t.contextMenuHandler=function(e){var t=e.target,n=t.textInput.getElement();if(!t.selection.isEmpty())return;var i=t.getCursorPosition(),s=t.session.getWordRange(i.row,i.column),o=t.session.getTextRange(s);t.session.tokenRe.lastIndex=0;if(!t.session.tokenRe.test(o))return;var u=\"\\x01\\x01\",a=o+\" \"+u;n.value=a,n.setSelectionRange(o.length,o.length+1),n.setSelectionRange(0,0),n.setSelectionRange(0,o.length);var f=!1;r.addListener(n,\"keydown\",function l(){r.removeListener(n,\"keydown\",l),f=!0}),t.textInput.setInputHandler(function(e){console.log(e,a,n.selectionStart,n.selectionEnd);if(e==a)return\"\";if(e.lastIndexOf(a,0)===0)return e.slice(a.length);if(e.substr(n.selectionEnd)==a)return e.slice(0,-a.length);if(e.slice(-2)==u){var r=e.slice(0,-2);if(r.slice(-1)==\" \")return f?r.substring(0,n.selectionEnd):(r=r.slice(0,-1),t.session.replace(s,r),\"\")}return e})};var i=e(\"../editor\").Editor;e(\"../config\").defineOptions(i.prototype,\"editor\",{spellcheck:{set:function(e){var n=this.textInput.getElement();n.spellcheck=!!e,e?this.on(\"nativecontextmenu\",t.contextMenuHandler):this.removeListener(\"nativecontextmenu\",t.contextMenuHandler)},value:!0}})});                (function() {\n                    window.require([\"ace/ext/spellcheck\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-split.js",
    "content": "define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./editor\").Editor,u=e(\"./virtual_renderer\").VirtualRenderer,a=e(\"./edit_session\").EditSession,f=function(e,t,n){this.BELOW=1,this.BESIDE=0,this.$container=e,this.$theme=t,this.$splits=0,this.$editorCSS=\"\",this.$editors=[],this.$orientation=this.BESIDE,this.setSplits(n||1),this.$cEditor=this.$editors[0],this.on(\"focus\",function(e){this.$cEditor=e}.bind(this))};(function(){r.implement(this,s),this.$createEditor=function(){var e=document.createElement(\"div\");e.className=this.$editorCSS,e.style.cssText=\"position: absolute; top:0px; bottom:0px\",this.$container.appendChild(e);var t=new o(new u(e,this.$theme));return t.on(\"focus\",function(){this._emit(\"focus\",t)}.bind(this)),this.$editors.push(t),t.setFontSize(this.$fontSize),t},this.setSplits=function(e){var t;if(e<1)throw\"The number of splits have to be > 0!\";if(e==this.$splits)return;if(e>this.$splits){while(this.$splits<this.$editors.length&&this.$splits<e)t=this.$editors[this.$splits],this.$container.appendChild(t.container),t.setFontSize(this.$fontSize),this.$splits++;while(this.$splits<e)this.$createEditor(),this.$splits++}else while(this.$splits>e)t=this.$editors[this.$splits-1],this.$container.removeChild(t.container),this.$splits--;this.resize()},this.getSplits=function(){return this.$splits},this.getEditor=function(e){return this.$editors[e]},this.getCurrentEditor=function(){return this.$cEditor},this.focus=function(){this.$cEditor.focus()},this.blur=function(){this.$cEditor.blur()},this.setTheme=function(e){this.$editors.forEach(function(t){t.setTheme(e)})},this.setKeyboardHandler=function(e){this.$editors.forEach(function(t){t.setKeyboardHandler(e)})},this.forEach=function(e,t){this.$editors.forEach(e,t)},this.$fontSize=\"\",this.setFontSize=function(e){this.$fontSize=e,this.forEach(function(t){t.setFontSize(e)})},this.$cloneSession=function(e){var t=new a(e.getDocument(),e.getMode()),n=e.getUndoManager();return t.setUndoManager(n),t.setTabSize(e.getTabSize()),t.setUseSoftTabs(e.getUseSoftTabs()),t.setOverwrite(e.getOverwrite()),t.setBreakpoints(e.getBreakpoints()),t.setUseWrapMode(e.getUseWrapMode()),t.setUseWorker(e.getUseWorker()),t.setWrapLimitRange(e.$wrapLimitRange.min,e.$wrapLimitRange.max),t.$foldData=e.$cloneFoldData(),t},this.setSession=function(e,t){var n;t==null?n=this.$cEditor:n=this.$editors[t];var r=this.$editors.some(function(t){return t.session===e});return r&&(e=this.$cloneSession(e)),n.setSession(e),e},this.getOrientation=function(){return this.$orientation},this.setOrientation=function(e){if(this.$orientation==e)return;this.$orientation=e,this.resize()},this.resize=function(){var e=this.$container.clientWidth,t=this.$container.clientHeight,n;if(this.$orientation==this.BESIDE){var r=e/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=r+\"px\",n.container.style.top=\"0px\",n.container.style.left=i*r+\"px\",n.container.style.height=t+\"px\",n.resize()}else{var s=t/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=e+\"px\",n.container.style.top=i*s+\"px\",n.container.style.left=\"0px\",n.container.style.height=s+\"px\",n.resize()}}}).call(f.prototype),t.Split=f}),define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"],function(e,t,n){\"use strict\";n.exports=e(\"../split\")});                (function() {\n                    window.require([\"ace/ext/split\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-static_highlight.js",
    "content": "define(\"ace/ext/static_highlight\",[\"require\",\"exports\",\"module\",\"ace/edit_session\",\"ace/layer/text\",\"ace/config\",\"ace/lib/dom\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function f(e){this.type=e,this.style={},this.textContent=\"\"}var r=e(\"../edit_session\").EditSession,i=e(\"../layer/text\").Text,s=\".ace_static_highlight {font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;font-size: 12px;white-space: pre-wrap}.ace_static_highlight .ace_gutter {width: 2em;text-align: right;padding: 0 3px 0 0;margin-right: 3px;contain: none;}.ace_static_highlight.ace_show_gutter .ace_line {padding-left: 2.6em;}.ace_static_highlight .ace_line { position: relative; }.ace_static_highlight .ace_gutter-cell {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;user-select: none;top: 0;bottom: 0;left: 0;position: absolute;}.ace_static_highlight .ace_gutter-cell:before {content: counter(ace_line, decimal);counter-increment: ace_line;}.ace_static_highlight {counter-reset: ace_line;}\",o=e(\"../config\"),u=e(\"../lib/dom\"),a=e(\"../lib/lang\").escapeHTML;f.prototype.cloneNode=function(){return this},f.prototype.appendChild=function(e){this.textContent+=e.toString()},f.prototype.toString=function(){var e=[];if(this.type!=\"fragment\"){e.push(\"<\",this.type),this.className&&e.push(\" class='\",this.className,\"'\");var t=[];for(var n in this.style)t.push(n,\":\",this.style[n]);t.length&&e.push(\" style='\",t.join(\"\"),\"'\"),e.push(\">\")}return this.textContent&&e.push(this.textContent),this.type!=\"fragment\"&&e.push(\"</\",this.type,\">\"),e.join(\"\")};var l={createTextNode:function(e,t){return a(e)},createElement:function(e){return new f(e)},createFragment:function(){return new f(\"fragment\")}},c=function(){this.config={},this.dom=l};c.prototype=i.prototype;var h=function(e,t,n){var r=e.className.match(/lang-(\\w+)/),i=t.mode||r&&\"ace/mode/\"+r[1];if(!i)return!1;var s=t.theme||\"ace/theme/textmate\",o=\"\",a=[];if(e.firstElementChild){var f=0;for(var l=0;l<e.childNodes.length;l++){var c=e.childNodes[l];c.nodeType==3?(f+=c.data.length,o+=c.data):a.push(f,c)}}else o=e.textContent,t.trim&&(o=o.trim());h.render(o,i,s,t.firstLineNumber,!t.showGutter,function(t){u.importCssString(t.css,\"ace_highlight\"),e.innerHTML=t.html;var r=e.firstChild.firstChild;for(var i=0;i<a.length;i+=2){var s=t.session.doc.indexToPosition(a[i]),o=a[i+1],f=r.children[s.row];f&&f.appendChild(o)}n&&n()})};h.render=function(e,t,n,i,s,u){function c(){var r=h.renderSync(e,t,n,i,s);return u?u(r):r}var a=1,f=r.prototype.$modes;typeof n==\"string\"&&(a++,o.loadModule([\"theme\",n],function(e){n=e,--a||c()}));var l;return t&&typeof t==\"object\"&&!t.getTokenizer&&(l=t,t=l.path),typeof t==\"string\"&&(a++,o.loadModule([\"mode\",t],function(e){if(!f[t]||l)f[t]=new e.Mode(l);t=f[t],--a||c()})),--a||c()},h.renderSync=function(e,t,n,i,o){i=parseInt(i||1,10);var u=new r(\"\");u.setUseWorker(!1),u.setMode(t);var a=new c;a.setSession(u),Object.keys(a.$tabStrings).forEach(function(e){if(typeof a.$tabStrings[e]==\"string\"){var t=l.createFragment();t.textContent=a.$tabStrings[e],a.$tabStrings[e]=t}}),u.setValue(e);var f=u.getLength(),h=l.createElement(\"div\");h.className=n.cssClass;var p=l.createElement(\"div\");p.className=\"ace_static_highlight\"+(o?\"\":\" ace_show_gutter\"),p.style[\"counter-reset\"]=\"ace_line \"+(i-1);for(var d=0;d<f;d++){var v=l.createElement(\"div\");v.className=\"ace_line\";if(!o){var m=l.createElement(\"span\");m.className=\"ace_gutter ace_gutter-cell\",m.textContent=\"\",v.appendChild(m)}a.$renderLine(v,d,!1),v.textContent+=\"\\n\",p.appendChild(v)}return h.appendChild(p),{css:s+n.cssText,html:h.toString(),session:u}},n.exports=h,n.exports.highlight=h});                (function() {\n                    window.require([\"ace/ext/static_highlight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-statusbar.js",
    "content": "define(\"ace/ext/statusbar\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"ace/lib/dom\"),i=e(\"ace/lib/lang\"),s=function(e,t){this.element=r.createElement(\"div\"),this.element.className=\"ace_status-indicator\",this.element.style.cssText=\"display: inline-block;\",t.appendChild(this.element);var n=i.delayedCall(function(){this.updateStatus(e)}.bind(this)).schedule.bind(null,100);e.on(\"changeStatus\",n),e.on(\"changeSelection\",n),e.on(\"keyboardActivity\",n)};(function(){this.updateStatus=function(e){function n(e,n){e&&t.push(e,n||\"|\")}var t=[];n(e.keyBinding.getStatusText(e)),e.commands.recording&&n(\"REC\");var r=e.selection,i=r.lead;if(!r.isEmpty()){var s=e.getSelectionRange();n(\"(\"+(s.end.row-s.start.row)+\":\"+(s.end.column-s.start.column)+\")\",\" \")}n(i.row+\":\"+i.column,\" \"),r.rangeCount&&n(\"[\"+r.rangeCount+\"]\",\" \"),t.pop(),this.element.textContent=t.join(\"\")}}).call(s.prototype),t.StatusBar=s});                (function() {\n                    window.require([\"ace/ext/statusbar\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-textarea.js",
    "content": "define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.$id=\"ace/theme/textmate\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)}),define(\"ace/ext/textarea\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/net\",\"ace/ace\",\"ace/theme/textmate\"],function(e,t,n){\"use strict\";function a(e,t){for(var n in t)e.style[n]=t[n]}function f(e,t){if(e.type!=\"textarea\")throw new Error(\"Textarea required!\");var n=e.parentNode,i=document.createElement(\"div\"),s=function(){var t=\"position:relative;\";[\"margin-top\",\"margin-left\",\"margin-right\",\"margin-bottom\"].forEach(function(n){t+=n+\":\"+u(e,i,n)+\";\"});var n=u(e,i,\"width\")||e.clientWidth+\"px\",r=u(e,i,\"height\")||e.clientHeight+\"px\";t+=\"height:\"+r+\";width:\"+n+\";\",t+=\"display:inline-block;\",i.setAttribute(\"style\",t)};r.addListener(window,\"resize\",s),s(),n.insertBefore(i,e.nextSibling);while(n!==document){if(n.tagName.toUpperCase()===\"FORM\"){var o=n.onsubmit;n.onsubmit=function(n){e.value=t(),o&&o.call(this,n)};break}n=n.parentNode}return i}function l(t,n,r){s.loadScript(t,function(){e([n],r)})}function c(e,t,n,r,i){function u(e){return e===\"true\"||e==1}var s=e.getSession(),o=e.renderer;return e.setDisplaySettings=function(t){t==null&&(t=n.style.display==\"none\"),t?(n.style.display=\"block\",n.hideButton.focus(),e.on(\"focus\",function r(){e.removeListener(\"focus\",r),n.style.display=\"none\"})):e.focus()},e.$setOption=e.setOption,e.$getOption=e.getOption,e.setOption=function(t,n){switch(t){case\"mode\":e.$setOption(\"mode\",\"ace/mode/\"+n);break;case\"theme\":e.$setOption(\"theme\",\"ace/theme/\"+n);break;case\"keybindings\":switch(n){case\"vim\":e.setKeyboardHandler(\"ace/keyboard/vim\");break;case\"emacs\":e.setKeyboardHandler(\"ace/keyboard/emacs\");break;default:e.setKeyboardHandler(null)}break;case\"wrap\":case\"fontSize\":e.$setOption(t,n);break;default:e.$setOption(t,u(n))}},e.getOption=function(t){switch(t){case\"mode\":return e.$getOption(\"mode\").substr(\"ace/mode/\".length);case\"theme\":return e.$getOption(\"theme\").substr(\"ace/theme/\".length);case\"keybindings\":var n=e.getKeyboardHandler();switch(n&&n.$id){case\"ace/keyboard/vim\":return\"vim\";case\"ace/keyboard/emacs\":return\"emacs\";default:return\"ace\"}break;default:return e.$getOption(t)}},e.setOptions(i),e}function h(e,n,i){function f(e,t,n,r){if(!n){e.push(\"<input type='checkbox' title='\",t,\"' \",r+\"\"==\"true\"?\"checked='true'\":\"\",\"'></input>\");return}e.push(\"<select title='\"+t+\"'>\");for(var i in n)e.push(\"<option value='\"+i+\"' \"),r==i&&e.push(\" selected \"),e.push(\">\",n[i],\"</option>\");e.push(\"</select>\")}var s=null,o={mode:\"Mode:\",wrap:\"Soft Wrap:\",theme:\"Theme:\",fontSize:\"Font Size:\",showGutter:\"Display Gutter:\",keybindings:\"Keyboard\",showPrintMargin:\"Show Print Margin:\",useSoftTabs:\"Use Soft Tabs:\",showInvisibles:\"Show Invisibles\"},u={mode:{text:\"Plain\",javascript:\"JavaScript\",xml:\"XML\",html:\"HTML\",css:\"CSS\",scss:\"SCSS\",python:\"Python\",php:\"PHP\",java:\"Java\",ruby:\"Ruby\",c_cpp:\"C/C++\",coffee:\"CoffeeScript\",json:\"json\",perl:\"Perl\",clojure:\"Clojure\",ocaml:\"OCaml\",csharp:\"C#\",haxe:\"haXe\",svg:\"SVG\",textile:\"Textile\",groovy:\"Groovy\",liquid:\"Liquid\",Scala:\"Scala\"},theme:{clouds:\"Clouds\",clouds_midnight:\"Clouds Midnight\",cobalt:\"Cobalt\",crimson_editor:\"Crimson Editor\",dawn:\"Dawn\",gob:\"Green on Black\",eclipse:\"Eclipse\",idle_fingers:\"Idle Fingers\",kr_theme:\"Kr Theme\",merbivore:\"Merbivore\",merbivore_soft:\"Merbivore Soft\",mono_industrial:\"Mono Industrial\",monokai:\"Monokai\",pastel_on_dark:\"Pastel On Dark\",solarized_dark:\"Solarized Dark\",solarized_light:\"Solarized Light\",textmate:\"Textmate\",twilight:\"Twilight\",vibrant_ink:\"Vibrant Ink\"},showGutter:s,fontSize:{\"10px\":\"10px\",\"11px\":\"11px\",\"12px\":\"12px\",\"14px\":\"14px\",\"16px\":\"16px\"},wrap:{off:\"Off\",40:\"40\",80:\"80\",free:\"Free\"},keybindings:{ace:\"ace\",vim:\"vim\",emacs:\"emacs\"},showPrintMargin:s,useSoftTabs:s,showInvisibles:s},a=[];a.push(\"<table><tr><th>Setting</th><th>Value</th></tr>\");for(var l in t.defaultOptions)a.push(\"<tr><td>\",o[l],\"</td>\"),a.push(\"<td>\"),f(a,l,u[l],i.getOption(l)),a.push(\"</td></tr>\");a.push(\"</table>\"),e.innerHTML=a.join(\"\");var c=function(e){var t=e.currentTarget;i.setOption(t.title,t.value)},h=function(e){var t=e.currentTarget;i.setOption(t.title,t.checked)},p=e.getElementsByTagName(\"select\");for(var d=0;d<p.length;d++)p[d].onchange=c;var v=e.getElementsByTagName(\"input\");for(var d=0;d<v.length;d++)v[d].onclick=h;var m=document.createElement(\"input\");m.type=\"button\",m.value=\"Hide\",r.addListener(m,\"click\",function(){i.setDisplaySettings(!1)}),e.appendChild(m),e.hideButton=m}var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"../lib/net\"),o=e(\"../ace\");e(\"../theme/textmate\"),n.exports=t=o;var u=function(e,t,n){var r=e.style[n];r||(window.getComputedStyle?r=window.getComputedStyle(e,\"\").getPropertyValue(n):r=e.currentStyle[n]);if(!r||r==\"auto\"||r==\"intrinsic\")r=t.style[n];return r};t.transformTextarea=function(e,n){var s=e.autofocus||document.activeElement==e,u,l=f(e,function(){return u.getValue()});e.style.display=\"none\",l.style.background=\"white\";var p=document.createElement(\"div\");a(p,{top:\"0px\",left:\"0px\",right:\"0px\",bottom:\"0px\",border:\"1px solid gray\",position:\"absolute\"}),l.appendChild(p);var d=document.createElement(\"div\");a(d,{position:\"absolute\",right:\"0px\",bottom:\"0px\",cursor:\"nw-resize\",border:\"solid 9px\",borderColor:\"lightblue gray gray #ceade6\",zIndex:101});var v=document.createElement(\"div\"),m={top:\"0px\",left:\"20%\",right:\"0px\",bottom:\"0px\",position:\"absolute\",padding:\"5px\",zIndex:100,color:\"white\",display:\"none\",overflow:\"auto\",fontSize:\"14px\",boxShadow:\"-5px 2px 3px gray\"};i.isOldIE?m.backgroundColor=\"#333\":m.backgroundColor=\"rgba(0, 0, 0, 0.6)\",a(v,m),l.appendChild(v),n=n||t.defaultOptions;var g=o.edit(p);u=g.getSession(),u.setValue(e.value||e.innerHTML),s&&g.focus(),l.appendChild(d),c(g,p,v,o,n),h(v,d,g);var y=\"\";return r.addListener(d,\"mousemove\",function(e){var t=this.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;n+r<(t.width+t.height)/2?(this.style.cursor=\"pointer\",y=\"toggle\"):(y=\"resize\",this.style.cursor=\"nw-resize\")}),r.addListener(d,\"mousedown\",function(e){e.preventDefault();if(y==\"toggle\"){g.setDisplaySettings();return}l.style.zIndex=1e5;var t=l.getBoundingClientRect(),n=t.width+t.left-e.clientX,i=t.height+t.top-e.clientY;r.capture(d,function(e){l.style.width=e.clientX-t.left+n+\"px\",l.style.height=e.clientY-t.top+i+\"px\",g.resize()},function(){})}),g},t.defaultOptions={mode:\"javascript\",theme:\"textmate\",wrap:\"off\",fontSize:\"12px\",showGutter:\"false\",keybindings:\"ace\",showPrintMargin:\"false\",useSoftTabs:\"true\",showInvisibles:\"false\"}});                (function() {\n                    window.require([\"ace/ext/textarea\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-themelist.js",
    "content": "define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=[[\"Chrome\"],[\"Clouds\"],[\"Crimson Editor\"],[\"Dawn\"],[\"Dreamweaver\"],[\"Eclipse\"],[\"GitHub\"],[\"IPlastic\"],[\"Solarized Light\"],[\"TextMate\"],[\"Tomorrow\"],[\"XCode\"],[\"Kuroir\"],[\"KatzenMilch\"],[\"SQL Server\",\"sqlserver\",\"light\"],[\"Ambiance\",\"ambiance\",\"dark\"],[\"Chaos\",\"chaos\",\"dark\"],[\"Clouds Midnight\",\"clouds_midnight\",\"dark\"],[\"Dracula\",\"\",\"dark\"],[\"Cobalt\",\"cobalt\",\"dark\"],[\"Gruvbox\",\"gruvbox\",\"dark\"],[\"Green on Black\",\"gob\",\"dark\"],[\"idle Fingers\",\"idle_fingers\",\"dark\"],[\"krTheme\",\"kr_theme\",\"dark\"],[\"Merbivore\",\"merbivore\",\"dark\"],[\"Merbivore Soft\",\"merbivore_soft\",\"dark\"],[\"Mono Industrial\",\"mono_industrial\",\"dark\"],[\"Monokai\",\"monokai\",\"dark\"],[\"Pastel on dark\",\"pastel_on_dark\",\"dark\"],[\"Solarized Dark\",\"solarized_dark\",\"dark\"],[\"Terminal\",\"terminal\",\"dark\"],[\"Tomorrow Night\",\"tomorrow_night\",\"dark\"],[\"Tomorrow Night Blue\",\"tomorrow_night_blue\",\"dark\"],[\"Tomorrow Night Bright\",\"tomorrow_night_bright\",\"dark\"],[\"Tomorrow Night 80s\",\"tomorrow_night_eighties\",\"dark\"],[\"Twilight\",\"twilight\",\"dark\"],[\"Vibrant Ink\",\"vibrant_ink\",\"dark\"]];t.themesByName={},t.themes=r.map(function(e){var n=e[1]||e[0].replace(/ /g,\"_\").toLowerCase(),r={caption:e[0],theme:\"ace/theme/\"+n,isDark:e[2]==\"dark\",name:n};return t.themesByName[n]=r,r})});                (function() {\n                    window.require([\"ace/ext/themelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/ext-whitespace.js",
    "content": "define(\"ace/ext/whitespace\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\");t.$detectIndentation=function(e,t){function c(e){var t=0;for(var r=e;r<n.length;r+=e)t+=n[r]||0;return t}var n=[],r=[],i=0,s=0,o=Math.min(e.length,1e3);for(var u=0;u<o;u++){var a=e[u];if(!/^\\s*[^*+\\-\\s]/.test(a))continue;if(a[0]==\"\t\")i++,s=-Number.MAX_VALUE;else{var f=a.match(/^ */)[0].length;if(f&&a[f]!=\"\t\"){var l=f-s;l>0&&!(s%l)&&!(f%l)&&(r[l]=(r[l]||0)+1),n[f]=(n[f]||0)+1}s=f}while(u<o&&a[a.length-1]==\"\\\\\")a=e[u++]}var h=r.reduce(function(e,t){return e+t},0),p={score:0,length:0},d=0;for(var u=1;u<12;u++){var v=c(u);u==1?(d=v,v=n[1]?.9:.8,n.length||(v=0)):v/=d,r[u]&&(v+=r[u]/h),v>p.score&&(p={score:v,length:u})}if(p.score&&p.score>1.4)var m=p.length;if(i>d+1){if(m==1||d<i/4||p.score<1.8)m=undefined;return{ch:\"\t\",length:m}}if(d>i+1)return{ch:\" \",length:m}},t.detectIndentation=function(e){var n=e.getLines(0,1e3),r=t.$detectIndentation(n)||{};return r.ch&&e.setUseSoftTabs(r.ch==\" \"),r.length&&e.setTabSize(r.length),r},t.trimTrailingSpace=function(e,t){var n=e.getDocument(),r=n.getAllLines(),i=t&&t.trimEmpty?-1:0,s=[],o=-1;t&&t.keepCursorPosition&&(e.selection.rangeCount?e.selection.rangeList.ranges.forEach(function(e,t,n){var r=n[t+1];if(r&&r.cursor.row==e.cursor.row)return;s.push(e.cursor)}):s.push(e.selection.getCursor()),o=0);var u=s[o]&&s[o].row;for(var a=0,f=r.length;a<f;a++){var l=r[a],c=l.search(/\\s+$/);a==u&&(c<s[o].column&&c>i&&(c=s[o].column),o++,u=s[o]?s[o].row:-1),c>i&&n.removeInLine(a,c,l.length)}},t.convertIndentation=function(e,t,n){var i=e.getTabString()[0],s=e.getTabSize();n||(n=s),t||(t=i);var o=t==\"\t\"?t:r.stringRepeat(t,n),u=e.doc,a=u.getAllLines(),f={},l={};for(var c=0,h=a.length;c<h;c++){var p=a[c],d=p.match(/^\\s*/)[0];if(d){var v=e.$getStringScreenWidth(d)[0],m=Math.floor(v/s),g=v%s,y=f[m]||(f[m]=r.stringRepeat(o,m));y+=l[g]||(l[g]=r.stringRepeat(\" \",g)),y!=d&&(u.removeInLine(c,0,d.length),u.insertInLine({row:c,column:0},y))}}e.setTabSize(n),e.setUseSoftTabs(t==\" \")},t.$parseStringArg=function(e){var t={};/t/.test(e)?t.ch=\"\t\":/s/.test(e)&&(t.ch=\" \");var n=e.match(/\\d+/);return n&&(t.length=parseInt(n[0],10)),t},t.$parseArg=function(e){return e?typeof e==\"string\"?t.$parseStringArg(e):typeof e.text==\"string\"?t.$parseStringArg(e.text):e:{}},t.commands=[{name:\"detectIndentation\",exec:function(e){t.detectIndentation(e.session)}},{name:\"trimTrailingSpace\",exec:function(e,n){t.trimTrailingSpace(e.session,n)}},{name:\"convertIndentation\",exec:function(e,n){var r=t.$parseArg(n);t.convertIndentation(e.session,r.ch,r.length)}},{name:\"setIndentation\",exec:function(e,n){var r=t.$parseArg(n);r.length&&e.session.setTabSize(r.length),r.ch&&e.session.setUseSoftTabs(r.ch==\" \")}}]});                (function() {\n                    window.require([\"ace/ext/whitespace\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/keybinding-emacs.js",
    "content": "define(\"ace/occur\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/edit_session\",\"ace/search_highlight\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function a(){}var r=e(\"./lib/oop\"),i=e(\"./range\").Range,s=e(\"./search\").Search,o=e(\"./edit_session\").EditSession,u=e(\"./search_highlight\").SearchHighlight;r.inherits(a,s),function(){this.enter=function(e,t){if(!t.needle)return!1;var n=e.getCursorPosition();this.displayOccurContent(e,t);var r=this.originalToOccurPosition(e.session,n);return e.moveCursorToPosition(r),!0},this.exit=function(e,t){var n=t.translatePosition&&e.getCursorPosition(),r=n&&this.occurToOriginalPosition(e.session,n);return this.displayOriginalContent(e),r&&e.moveCursorToPosition(r),!0},this.highlight=function(e,t){var n=e.$occurHighlight=e.$occurHighlight||e.addDynamicMarker(new u(null,\"ace_occur-highlight\",\"text\"));n.setRegexp(t),e._emit(\"changeBackMarker\")},this.displayOccurContent=function(e,t){this.$originalSession=e.session;var n=this.matchingLines(e.session,t),r=n.map(function(e){return e.content}),i=new o(r.join(\"\\n\"));i.$occur=this,i.$occurMatchingLines=n,e.setSession(i),this.$useEmacsStyleLineStart=this.$originalSession.$useEmacsStyleLineStart,i.$useEmacsStyleLineStart=this.$useEmacsStyleLineStart,this.highlight(i,t.re),i._emit(\"changeBackMarker\")},this.displayOriginalContent=function(e){e.setSession(this.$originalSession),this.$originalSession.$useEmacsStyleLineStart=this.$useEmacsStyleLineStart},this.originalToOccurPosition=function(e,t){var n=e.$occurMatchingLines,r={row:0,column:0};if(!n)return r;for(var i=0;i<n.length;i++)if(n[i].row===t.row)return{row:i,column:t.column};return r},this.occurToOriginalPosition=function(e,t){var n=e.$occurMatchingLines;return!n||!n[t.row]?t:{row:n[t.row].row,column:t.column}},this.matchingLines=function(e,t){t=r.mixin({},t);if(!e||!t.needle)return[];var n=new s;return n.set(t),n.findAll(e).reduce(function(t,n){var r=n.start.row,i=t[t.length-1];return i&&i.row===r?t:t.concat({row:r,content:e.getLine(r)})},[])}}.call(a.prototype);var f=e(\"./lib/dom\");f.importCssString(\".ace_occur-highlight {\\n    border-radius: 4px;\\n    background-color: rgba(87, 255, 8, 0.25);\\n    position: absolute;\\n    z-index: 4;\\n    box-sizing: border-box;\\n    box-shadow: 0 0 4px rgb(91, 255, 50);\\n}\\n.ace_dark .ace_occur-highlight {\\n    background-color: rgb(80, 140, 85);\\n    box-shadow: 0 0 4px rgb(60, 120, 70);\\n}\\n\",\"incremental-occur-highlighting\"),t.Occur=a}),define(\"ace/commands/occur_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/occur\",\"ace/keyboard/hash_handler\",\"ace/lib/oop\"],function(e,t,n){function f(){}var r=e(\"../config\"),i=e(\"../occur\").Occur,s={name:\"occur\",exec:function(e,t){var n=!!e.session.$occur,r=(new i).enter(e,t);r&&!n&&f.installIn(e)},readOnly:!0},o=[{name:\"occurexit\",bindKey:\"esc|Ctrl-G\",exec:function(e){var t=e.session.$occur;if(!t)return;t.exit(e,{}),e.session.$occur||f.uninstallFrom(e)},readOnly:!0},{name:\"occuraccept\",bindKey:\"enter\",exec:function(e){var t=e.session.$occur;if(!t)return;t.exit(e,{translatePosition:!0}),e.session.$occur||f.uninstallFrom(e)},readOnly:!0}],u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/oop\");a.inherits(f,u),function(){this.isOccurHandler=!0,this.attach=function(e){u.call(this,o,e.commands.platform),this.$editor=e};var e=this.handleKeyboard;this.handleKeyboard=function(t,n,r,i){var s=e.call(this,t,n,r,i);return s&&s.command?s:undefined}}.call(f.prototype),f.installIn=function(e){var t=new this;e.keyBinding.addKeyboardHandler(t),e.commands.addCommands(o)},f.uninstallFrom=function(e){e.commands.removeCommands(o);var t=e.getKeyboardHandler();t.isOccurHandler&&e.keyBinding.removeKeyboardHandler(t)},t.occurStartCommand=s}),define(\"ace/commands/incremental_search_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/commands/occur_commands\"],function(e,t,n){function u(e){this.$iSearch=e}var r=e(\"../config\"),i=e(\"../lib/oop\"),s=e(\"../keyboard/hash_handler\").HashHandler,o=e(\"./occur_commands\").occurStartCommand;t.iSearchStartCommands=[{name:\"iSearch\",bindKey:{win:\"Ctrl-F\",mac:\"Command-F\"},exec:function(e,t){r.loadModule([\"core\",\"ace/incremental_search\"],function(n){var r=n.iSearch=n.iSearch||new n.IncrementalSearch;r.activate(e,t.backwards),t.jumpToFirstMatch&&r.next(t)})},readOnly:!0},{name:\"iSearchBackwards\",exec:function(e,t){e.execCommand(\"iSearch\",{backwards:!0})},readOnly:!0},{name:\"iSearchAndGo\",bindKey:{win:\"Ctrl-K\",mac:\"Command-G\"},exec:function(e,t){e.execCommand(\"iSearch\",{jumpToFirstMatch:!0,useCurrentOrPrevSearch:!0})},readOnly:!0},{name:\"iSearchBackwardsAndGo\",bindKey:{win:\"Ctrl-Shift-K\",mac:\"Command-Shift-G\"},exec:function(e){e.execCommand(\"iSearch\",{jumpToFirstMatch:!0,backwards:!0,useCurrentOrPrevSearch:!0})},readOnly:!0}],t.iSearchCommands=[{name:\"restartSearch\",bindKey:{win:\"Ctrl-F\",mac:\"Command-F\"},exec:function(e){e.cancelSearch(!0)}},{name:\"searchForward\",bindKey:{win:\"Ctrl-S|Ctrl-K\",mac:\"Ctrl-S|Command-G\"},exec:function(e,t){t.useCurrentOrPrevSearch=!0,e.next(t)}},{name:\"searchBackward\",bindKey:{win:\"Ctrl-R|Ctrl-Shift-K\",mac:\"Ctrl-R|Command-Shift-G\"},exec:function(e,t){t.useCurrentOrPrevSearch=!0,t.backwards=!0,e.next(t)}},{name:\"extendSearchTerm\",exec:function(e,t){e.addString(t)}},{name:\"extendSearchTermSpace\",bindKey:\"space\",exec:function(e){e.addString(\" \")}},{name:\"shrinkSearchTerm\",bindKey:\"backspace\",exec:function(e){e.removeChar()}},{name:\"confirmSearch\",bindKey:\"return\",exec:function(e){e.deactivate()}},{name:\"cancelSearch\",bindKey:\"esc|Ctrl-G\",exec:function(e){e.deactivate(!0)}},{name:\"occurisearch\",bindKey:\"Ctrl-O\",exec:function(e){var t=i.mixin({},e.$options);e.deactivate(),o.exec(e.$editor,t)}},{name:\"yankNextWord\",bindKey:\"Ctrl-w\",exec:function(e){var t=e.$editor,n=t.selection.getRangeOfMovements(function(e){e.moveCursorWordRight()}),r=t.session.getTextRange(n);e.addString(r)}},{name:\"yankNextChar\",bindKey:\"Ctrl-Alt-y\",exec:function(e){var t=e.$editor,n=t.selection.getRangeOfMovements(function(e){e.moveCursorRight()}),r=t.session.getTextRange(n);e.addString(r)}},{name:\"recenterTopBottom\",bindKey:\"Ctrl-l\",exec:function(e){e.$editor.execCommand(\"recenterTopBottom\")}},{name:\"selectAllMatches\",bindKey:\"Ctrl-space\",exec:function(e){var t=e.$editor,n=t.session.$isearchHighlight,r=n&&n.cache?n.cache.reduce(function(e,t){return e.concat(t?t:[])},[]):[];e.deactivate(!1),r.forEach(t.selection.addRange.bind(t.selection))}},{name:\"searchAsRegExp\",bindKey:\"Alt-r\",exec:function(e){e.convertNeedleToRegExp()}}].map(function(e){return e.readOnly=!0,e.isIncrementalSearchCommand=!0,e.scrollIntoView=\"animate-cursor\",e}),i.inherits(u,s),function(){this.attach=function(e){var n=this.$iSearch;s.call(this,t.iSearchCommands,e.commands.platform),this.$commandExecHandler=e.commands.addEventListener(\"exec\",function(t){if(!t.command.isIncrementalSearchCommand)return n.deactivate();t.stopPropagation(),t.preventDefault();var r=e.session.getScrollTop(),i=t.command.exec(n,t.args||{});return e.renderer.scrollCursorIntoView(null,.5),e.renderer.animateScrolling(r),i})},this.detach=function(e){if(!this.$commandExecHandler)return;e.commands.removeEventListener(\"exec\",this.$commandExecHandler),delete this.$commandExecHandler};var e=this.handleKeyboard;this.handleKeyboard=function(t,n,r,i){if((n===1||n===8)&&r===\"v\"||n===1&&r===\"y\")return null;var s=e.call(this,t,n,r,i);if(s.command)return s;if(n==-1){var o=this.commands.extendSearchTerm;if(o)return{command:o,args:r}}return!1}}.call(u.prototype),t.IncrementalSearchKeyboardHandler=u}),define(\"ace/incremental_search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/search_highlight\",\"ace/commands/incremental_search_commands\",\"ace/lib/dom\",\"ace/commands/command_manager\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";function f(){this.$options={wrap:!1,skipCurrent:!1},this.$keyboardHandler=new a(this)}function l(e){return e instanceof RegExp}function c(e){var t=String(e),n=t.indexOf(\"/\"),r=t.lastIndexOf(\"/\");return{expression:t.slice(n+1,r),flags:t.slice(r+1)}}function h(e,t){try{return new RegExp(e,t)}catch(n){return e}}function p(e){return h(e.expression,e.flags)}var r=e(\"./lib/oop\"),i=e(\"./range\").Range,s=e(\"./search\").Search,o=e(\"./search_highlight\").SearchHighlight,u=e(\"./commands/incremental_search_commands\"),a=u.IncrementalSearchKeyboardHandler;r.inherits(f,s),function(){this.activate=function(e,t){this.$editor=e,this.$startPos=this.$currentPos=e.getCursorPosition(),this.$options.needle=\"\",this.$options.backwards=t,e.keyBinding.addKeyboardHandler(this.$keyboardHandler),this.$originalEditorOnPaste=e.onPaste,e.onPaste=this.onPaste.bind(this),this.$mousedownHandler=e.addEventListener(\"mousedown\",this.onMouseDown.bind(this)),this.selectionFix(e),this.statusMessage(!0)},this.deactivate=function(e){this.cancelSearch(e);var t=this.$editor;t.keyBinding.removeKeyboardHandler(this.$keyboardHandler),this.$mousedownHandler&&(t.removeEventListener(\"mousedown\",this.$mousedownHandler),delete this.$mousedownHandler),t.onPaste=this.$originalEditorOnPaste,this.message(\"\")},this.selectionFix=function(e){e.selection.isEmpty()&&!e.session.$emacsMark&&e.clearSelection()},this.highlight=function(e){var t=this.$editor.session,n=t.$isearchHighlight=t.$isearchHighlight||t.addDynamicMarker(new o(null,\"ace_isearch-result\",\"text\"));n.setRegexp(e),t._emit(\"changeBackMarker\")},this.cancelSearch=function(e){var t=this.$editor;return this.$prevNeedle=this.$options.needle,this.$options.needle=\"\",e?(t.moveCursorToPosition(this.$startPos),this.$currentPos=this.$startPos):t.pushEmacsMark&&t.pushEmacsMark(this.$startPos,!1),this.highlight(null),i.fromPoints(this.$currentPos,this.$currentPos)},this.highlightAndFindWithNeedle=function(e,t){if(!this.$editor)return null;var n=this.$options;t&&(n.needle=t.call(this,n.needle||\"\")||\"\");if(n.needle.length===0)return this.statusMessage(!0),this.cancelSearch(!0);n.start=this.$currentPos;var r=this.$editor.session,s=this.find(r),o=this.$editor.emacsMark?!!this.$editor.emacsMark():!this.$editor.selection.isEmpty();return s&&(n.backwards&&(s=i.fromPoints(s.end,s.start)),this.$editor.selection.setRange(i.fromPoints(o?this.$startPos:s.end,s.end)),e&&(this.$currentPos=s.end),this.highlight(n.re)),this.statusMessage(s),s},this.addString=function(e){return this.highlightAndFindWithNeedle(!1,function(t){if(!l(t))return t+e;var n=c(t);return n.expression+=e,p(n)})},this.removeChar=function(e){return this.highlightAndFindWithNeedle(!1,function(e){if(!l(e))return e.substring(0,e.length-1);var t=c(e);return t.expression=t.expression.substring(0,t.expression.length-1),p(t)})},this.next=function(e){return e=e||{},this.$options.backwards=!!e.backwards,this.$currentPos=this.$editor.getCursorPosition(),this.highlightAndFindWithNeedle(!0,function(t){return e.useCurrentOrPrevSearch&&t.length===0?this.$prevNeedle||\"\":t})},this.onMouseDown=function(e){return this.deactivate(),!0},this.onPaste=function(e){this.addString(e)},this.convertNeedleToRegExp=function(){return this.highlightAndFindWithNeedle(!1,function(e){return l(e)?e:h(e,\"ig\")})},this.convertNeedleToString=function(){return this.highlightAndFindWithNeedle(!1,function(e){return l(e)?c(e).expression:e})},this.statusMessage=function(e){var t=this.$options,n=\"\";n+=t.backwards?\"reverse-\":\"\",n+=\"isearch: \"+t.needle,n+=e?\"\":\" (not found)\",this.message(n)},this.message=function(e){this.$editor.showCommandLine?(this.$editor.showCommandLine(e),this.$editor.focus()):console.log(e)}}.call(f.prototype),t.IncrementalSearch=f;var d=e(\"./lib/dom\");d.importCssString&&d.importCssString(\".ace_marker-layer .ace_isearch-result {  position: absolute;  z-index: 6;  box-sizing: border-box;}div.ace_isearch-result {  border-radius: 4px;  background-color: rgba(255, 200, 0, 0.5);  box-shadow: 0 0 4px rgb(255, 200, 0);}.ace_dark div.ace_isearch-result {  background-color: rgb(100, 110, 160);  box-shadow: 0 0 4px rgb(80, 90, 140);}\",\"incremental-search-highlighting\");var v=e(\"./commands/command_manager\");(function(){this.setupIncrementalSearch=function(e,t){if(this.usesIncrementalSearch==t)return;this.usesIncrementalSearch=t;var n=u.iSearchStartCommands,r=t?\"addCommands\":\"removeCommands\";this[r](n)}}).call(v.CommandManager.prototype);var m=e(\"./editor\").Editor;e(\"./config\").defineOptions(m.prototype,\"editor\",{useIncrementalSearch:{set:function(e){this.keyBinding.$handlers.forEach(function(t){t.setupIncrementalSearch&&t.setupIncrementalSearch(this,e)}),this._emit(\"incrementalSearchSettingChanged\",{isEnabled:e})}}})}),define(\"ace/keyboard/emacs\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/incremental_search\",\"ace/commands/incremental_search_commands\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\");e(\"../incremental_search\");var i=e(\"../commands/incremental_search_commands\"),s=e(\"./hash_handler\").HashHandler;t.handler=new s,t.handler.isEmacs=!0,t.handler.$id=\"ace/keyboard/emacs\";var o=!1,u,a;t.handler.attach=function(e){o||(o=!0,r.importCssString(\"            .emacs-mode .ace_cursor{                border: 1px rgba(50,250,50,0.8) solid!important;                box-sizing: border-box!important;                background-color: rgba(0,250,0,0.9);                opacity: 0.5;            }            .emacs-mode .ace_hidden-cursors .ace_cursor{                opacity: 1;                background-color: transparent;            }            .emacs-mode .ace_overwrite-cursors .ace_cursor {                opacity: 1;                background-color: transparent;                border-width: 0 0 2px 2px !important;            }            .emacs-mode .ace_text-layer {                z-index: 4            }            .emacs-mode .ace_cursor-layer {                z-index: 2            }\",\"emacsMode\")),u=e.session.$selectLongWords,e.session.$selectLongWords=!0,a=e.session.$useEmacsStyleLineStart,e.session.$useEmacsStyleLineStart=!0,e.session.$emacsMark=null,e.session.$emacsMarkRing=e.session.$emacsMarkRing||[],e.emacsMark=function(){return this.session.$emacsMark},e.setEmacsMark=function(e){this.session.$emacsMark=e},e.pushEmacsMark=function(e,t){var n=this.session.$emacsMark;n&&this.session.$emacsMarkRing.push(n),!e||t?this.setEmacsMark(e):this.session.$emacsMarkRing.push(e)},e.popEmacsMark=function(){var e=this.emacsMark();return e?(this.setEmacsMark(null),e):this.session.$emacsMarkRing.pop()},e.getLastEmacsMark=function(e){return this.session.$emacsMark||this.session.$emacsMarkRing.slice(-1)[0]},e.emacsMarkForSelection=function(e){var t=this.selection,n=this.multiSelect?this.multiSelect.getAllRanges().length:1,r=t.index||0,i=this.session.$emacsMarkRing,s=i.length-(n-r),o=i[s]||t.anchor;return e&&i.splice(s,1,\"row\"in e&&\"column\"in e?e:undefined),o},e.on(\"click\",l),e.on(\"changeSession\",f),e.renderer.$blockCursor=!0,e.setStyle(\"emacs-mode\"),e.commands.addCommands(d),t.handler.platform=e.commands.platform,e.$emacsModeHandler=this,e.addEventListener(\"copy\",this.onCopy),e.addEventListener(\"paste\",this.onPaste)},t.handler.detach=function(e){e.renderer.$blockCursor=!1,e.session.$selectLongWords=u,e.session.$useEmacsStyleLineStart=a,e.removeEventListener(\"click\",l),e.removeEventListener(\"changeSession\",f),e.unsetStyle(\"emacs-mode\"),e.commands.removeCommands(d),e.removeEventListener(\"copy\",this.onCopy),e.removeEventListener(\"paste\",this.onPaste),e.$emacsModeHandler=null};var f=function(e){e.oldSession&&(e.oldSession.$selectLongWords=u,e.oldSession.$useEmacsStyleLineStart=a),u=e.session.$selectLongWords,e.session.$selectLongWords=!0,a=e.session.$useEmacsStyleLineStart,e.session.$useEmacsStyleLineStart=!0,e.session.hasOwnProperty(\"$emacsMark\")||(e.session.$emacsMark=null),e.session.hasOwnProperty(\"$emacsMarkRing\")||(e.session.$emacsMarkRing=[])},l=function(e){e.editor.session.$emacsMark=null},c=e(\"../lib/keys\").KEY_MODS,h={C:\"ctrl\",S:\"shift\",M:\"alt\",CMD:\"command\"},p=[\"C-S-M-CMD\",\"S-M-CMD\",\"C-M-CMD\",\"C-S-CMD\",\"C-S-M\",\"M-CMD\",\"S-CMD\",\"S-M\",\"C-CMD\",\"C-M\",\"C-S\",\"CMD\",\"M\",\"S\",\"C\"];p.forEach(function(e){var t=0;e.split(\"-\").forEach(function(e){t|=c[h[e]]}),h[t]=e.toLowerCase()+\"-\"}),t.handler.onCopy=function(e,n){if(n.$handlesEmacsOnCopy)return;n.$handlesEmacsOnCopy=!0,t.handler.commands.killRingSave.exec(n),n.$handlesEmacsOnCopy=!1},t.handler.onPaste=function(e,t){t.pushEmacsMark(t.getCursorPosition())},t.handler.bindKey=function(e,t){typeof e==\"object\"&&(e=e[this.platform]);if(!e)return;var n=this.commandKeyBinding;e.split(\"|\").forEach(function(e){e=e.toLowerCase(),n[e]=t;var r=e.split(\" \").slice(0,-1);r.reduce(function(e,t,n){var r=e[n-1]?e[n-1]+\" \":\"\";return e.concat([r+t])},[]).forEach(function(e){n[e]||(n[e]=\"null\")})},this)},t.handler.getStatusText=function(e,t){var n=\"\";return t.count&&(n+=t.count),t.keyChain&&(n+=\" \"+t.keyChain),n},t.handler.handleKeyboard=function(e,t,n,r){if(r===-1)return undefined;var i=e.editor;i._signal(\"changeStatus\");if(t==-1){i.pushEmacsMark();if(e.count){var s=(new Array(e.count+1)).join(n);return e.count=null,{command:\"insertstring\",args:s}}}var o=h[t];if(o==\"c-\"||e.count){var u=parseInt(n[n.length-1]);if(typeof u==\"number\"&&!isNaN(u))return e.count=Math.max(e.count,0)||0,e.count=10*e.count+u,{command:\"null\"}}o&&(n=o+n),e.keyChain&&(n=e.keyChain+=\" \"+n);var a=this.commandKeyBinding[n];e.keyChain=a==\"null\"?n:\"\";if(!a)return undefined;if(a===\"null\")return{command:\"null\"};if(a===\"universalArgument\")return e.count=-4,{command:\"null\"};var f;typeof a!=\"string\"&&(f=a.args,a.command&&(a=a.command),a===\"goorselect\"&&(a=i.emacsMark()?f[1]:f[0],f=null));if(typeof a==\"string\"){(a===\"insertstring\"||a===\"splitline\"||a===\"togglecomment\")&&i.pushEmacsMark(),a=this.commands[a]||i.commands.commands[a];if(!a)return undefined}!a.readOnly&&!a.isYank&&(e.lastCommand=null),!a.readOnly&&i.emacsMark()&&i.setEmacsMark(null);if(e.count){var u=e.count;e.count=0;if(!a||!a.handlesCount)return{args:f,command:{exec:function(e,t){for(var n=0;n<u;n++)a.exec(e,t)},multiSelectAction:a.multiSelectAction}};f||(f={}),typeof f==\"object\"&&(f.count=u)}return{command:a,args:f}},t.emacsKeys={\"Up|C-p\":{command:\"goorselect\",args:[\"golineup\",\"selectup\"]},\"Down|C-n\":{command:\"goorselect\",args:[\"golinedown\",\"selectdown\"]},\"Left|C-b\":{command:\"goorselect\",args:[\"gotoleft\",\"selectleft\"]},\"Right|C-f\":{command:\"goorselect\",args:[\"gotoright\",\"selectright\"]},\"C-Left|M-b\":{command:\"goorselect\",args:[\"gotowordleft\",\"selectwordleft\"]},\"C-Right|M-f\":{command:\"goorselect\",args:[\"gotowordright\",\"selectwordright\"]},\"Home|C-a\":{command:\"goorselect\",args:[\"gotolinestart\",\"selecttolinestart\"]},\"End|C-e\":{command:\"goorselect\",args:[\"gotolineend\",\"selecttolineend\"]},\"C-Home|S-M-,\":{command:\"goorselect\",args:[\"gotostart\",\"selecttostart\"]},\"C-End|S-M-.\":{command:\"goorselect\",args:[\"gotoend\",\"selecttoend\"]},\"S-Up|S-C-p\":\"selectup\",\"S-Down|S-C-n\":\"selectdown\",\"S-Left|S-C-b\":\"selectleft\",\"S-Right|S-C-f\":\"selectright\",\"S-C-Left|S-M-b\":\"selectwordleft\",\"S-C-Right|S-M-f\":\"selectwordright\",\"S-Home|S-C-a\":\"selecttolinestart\",\"S-End|S-C-e\":\"selecttolineend\",\"S-C-Home\":\"selecttostart\",\"S-C-End\":\"selecttoend\",\"C-l\":\"recenterTopBottom\",\"M-s\":\"centerselection\",\"M-g\":\"gotoline\",\"C-x C-p\":\"selectall\",\"C-Down\":{command:\"goorselect\",args:[\"gotopagedown\",\"selectpagedown\"]},\"C-Up\":{command:\"goorselect\",args:[\"gotopageup\",\"selectpageup\"]},\"PageDown|C-v\":{command:\"goorselect\",args:[\"gotopagedown\",\"selectpagedown\"]},\"PageUp|M-v\":{command:\"goorselect\",args:[\"gotopageup\",\"selectpageup\"]},\"S-C-Down\":\"selectpagedown\",\"S-C-Up\":\"selectpageup\",\"C-s\":\"iSearch\",\"C-r\":\"iSearchBackwards\",\"M-C-s\":\"findnext\",\"M-C-r\":\"findprevious\",\"S-M-5\":\"replace\",Backspace:\"backspace\",\"Delete|C-d\":\"del\",\"Return|C-m\":{command:\"insertstring\",args:\"\\n\"},\"C-o\":\"splitline\",\"M-d|C-Delete\":{command:\"killWord\",args:\"right\"},\"C-Backspace|M-Backspace|M-Delete\":{command:\"killWord\",args:\"left\"},\"C-k\":\"killLine\",\"C-y|S-Delete\":\"yank\",\"M-y\":\"yankRotate\",\"C-g\":\"keyboardQuit\",\"C-w|C-S-W\":\"killRegion\",\"M-w\":\"killRingSave\",\"C-Space\":\"setMark\",\"C-x C-x\":\"exchangePointAndMark\",\"C-t\":\"transposeletters\",\"M-u\":\"touppercase\",\"M-l\":\"tolowercase\",\"M-/\":\"autocomplete\",\"C-u\":\"universalArgument\",\"M-;\":\"togglecomment\",\"C-/|C-x u|S-C--|C-z\":\"undo\",\"S-C-/|S-C-x u|C--|S-C-z\":\"redo\",\"C-x r\":\"selectRectangularRegion\",\"M-x\":{command:\"focusCommandLine\",args:\"M-x \"}},t.handler.bindKeys(t.emacsKeys),t.handler.addCommands({recenterTopBottom:function(e){var t=e.renderer,n=t.$cursorLayer.getPixelPosition(),r=t.$size.scrollerHeight-t.lineHeight,i=t.scrollTop;Math.abs(n.top-i)<2?i=n.top-r:Math.abs(n.top-i-r*.5)<2?i=n.top:i=n.top-r*.5,e.session.setScrollTop(i)},selectRectangularRegion:function(e){e.multiSelect.toggleBlockSelection()},setMark:{exec:function(e,t){function u(){var t=e.popEmacsMark();t&&e.moveCursorToPosition(t)}if(t&&t.count){e.inMultiSelectMode?e.forEachSelection(u):u(),u();return}var n=e.emacsMark(),r=e.selection.getAllRanges(),i=r.map(function(e){return{row:e.start.row,column:e.start.column}}),s=!0,o=r.every(function(e){return e.isEmpty()});if(s&&(n||!o)){e.inMultiSelectMode?e.forEachSelection({exec:e.clearSelection.bind(e)}):e.clearSelection(),n&&e.pushEmacsMark(null);return}if(!n){i.forEach(function(t){e.pushEmacsMark(t)}),e.setEmacsMark(i[i.length-1]);return}},readOnly:!0,handlesCount:!0},exchangePointAndMark:{exec:function(t,n){var r=t.selection;if(!n.count&&!r.isEmpty()){r.setSelectionRange(r.getRange(),!r.isBackwards());return}if(n.count){var i={row:r.lead.row,column:r.lead.column};r.clearSelection(),r.moveCursorToPosition(t.emacsMarkForSelection(i))}else r.selectToPosition(t.emacsMarkForSelection())},readOnly:!0,handlesCount:!0,multiSelectAction:\"forEach\"},killWord:{exec:function(e,n){e.clearSelection(),n==\"left\"?e.selection.selectWordLeft():e.selection.selectWordRight();var r=e.getSelectionRange(),i=e.session.getTextRange(r);t.killRing.add(i),e.session.remove(r),e.clearSelection()},multiSelectAction:\"forEach\"},killLine:function(e){e.pushEmacsMark(null),e.clearSelection();var n=e.getSelectionRange(),r=e.session.getLine(n.start.row);n.end.column=r.length,r=r.substr(n.start.column);var i=e.session.getFoldLine(n.start.row);i&&n.end.row!=i.end.row&&(n.end.row=i.end.row,r=\"x\"),/^\\s*$/.test(r)&&(n.end.row++,r=e.session.getLine(n.end.row),n.end.column=/^\\s*$/.test(r)?r.length:0);var s=e.session.getTextRange(n);e.prevOp.command==this?t.killRing.append(s):t.killRing.add(s),e.session.remove(n),e.clearSelection()},yank:function(e){e.onPaste(t.killRing.get()||\"\"),e.keyBinding.$data.lastCommand=\"yank\"},yankRotate:function(e){if(e.keyBinding.$data.lastCommand!=\"yank\")return;e.undo(),e.session.$emacsMarkRing.pop(),e.onPaste(t.killRing.rotate()),e.keyBinding.$data.lastCommand=\"yank\"},killRegion:{exec:function(e){t.killRing.add(e.getCopyText()),e.commands.byName.cut.exec(e),e.setEmacsMark(null)},readOnly:!0,multiSelectAction:\"forEach\"},killRingSave:{exec:function(e){e.$handlesEmacsOnCopy=!0;var n=e.session.$emacsMarkRing.slice(),r=[];t.killRing.add(e.getCopyText()),setTimeout(function(){function t(){var t=e.selection,n=t.getRange(),i=t.isBackwards()?n.end:n.start;r.push({row:i.row,column:i.column}),t.clearSelection()}e.$handlesEmacsOnCopy=!1,e.inMultiSelectMode?e.forEachSelection({exec:t}):t(),e.session.$emacsMarkRing=n.concat(r.reverse())},0)},readOnly:!0},keyboardQuit:function(e){e.selection.clearSelection(),e.setEmacsMark(null),e.keyBinding.$data.count=null},focusCommandLine:function(e,t){e.showCommandLine&&e.showCommandLine(t)}}),t.handler.addCommands(i.iSearchStartCommands);var d=t.handler.commands;d.yank.isYank=!0,d.yankRotate.isYank=!0,t.killRing={$data:[],add:function(e){e&&this.$data.push(e),this.$data.length>30&&this.$data.shift()},append:function(e){var t=this.$data.length-1,n=this.$data[t]||\"\";e&&(n+=e),n&&(this.$data[t]=n)},get:function(e){return e=e||1,this.$data.slice(this.$data.length-e,this.$data.length).reverse().join(\"\\n\")},pop:function(){return this.$data.length>1&&this.$data.pop(),this.get()},rotate:function(){return this.$data.unshift(this.$data.pop()),this.get()}}});                (function() {\n                    window.require([\"ace/keyboard/emacs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/keybinding-sublime.js",
    "content": "define(\"ace/keyboard/sublime\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/oop\",\"ace/lib/useragent\",\"ace/keyboard/hash_handler\"],function(e,t,n){\"use strict\";function u(e,t,n){function f(e){return e?/\\s/.test(e)?\"s\":e==\"_\"?\"_\":e.toUpperCase()==e&&e.toLowerCase()!=e?\"W\":e.toUpperCase()!=e&&e.toLowerCase()==e?\"w\":\"o\":\"-\"}var r=e.selection,i=r.lead.row,s=r.lead.column,o=e.session.getLine(i);if(!o[s+t]){var u=(n?\"selectWord\":\"moveCursorShortWord\")+(t==1?\"Right\":\"Left\");return e.selection[u]()}t==-1&&s--;while(o[s]){var a=f(o[s])+f(o[s+t]);s+=t;if(t==1){if(a==\"WW\"&&f(o[s+1])==\"w\")break}else{if(a==\"wW\"){if(f(o[s-1])==\"W\"){s-=1;break}continue}if(a==\"Ww\")break}if(/w[s_oW]|_[sWo]|o[s_wW]|s[W]|W[so]/.test(a))break}t==-1&&s++,n?e.selection.moveCursorTo(i,s):e.selection.moveTo(i,s)}var r=e(\"../lib/keys\"),i=e(\"../lib/oop\"),s=e(\"../lib/useragent\"),o=e(\"../keyboard/hash_handler\").HashHandler;t.handler=new o,t.handler.addCommands([{name:\"find_all_under\",exec:function(e){e.selection.isEmpty()&&e.selection.selectWord(),e.findAll()},readOnly:!0},{name:\"find_under\",exec:function(e){e.selection.isEmpty()&&e.selection.selectWord(),e.findNext()},readOnly:!0},{name:\"find_under_prev\",exec:function(e){e.selection.isEmpty()&&e.selection.selectWord(),e.findPrevious()},readOnly:!0},{name:\"find_under_expand\",exec:function(e){e.selectMore(1,!1,!0)},scrollIntoView:\"animate\",readOnly:!0},{name:\"find_under_expand_skip\",exec:function(e){e.selectMore(1,!0,!0)},scrollIntoView:\"animate\",readOnly:!0},{name:\"delete_to_hard_bol\",exec:function(e){var t=e.selection.getCursor();e.session.remove({start:{row:t.row,column:0},end:t})},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"delete_to_hard_eol\",exec:function(e){var t=e.selection.getCursor();e.session.remove({start:t,end:{row:t.row,column:Infinity}})},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"moveToWordStartLeft\",exec:function(e){e.selection.moveCursorLongWordLeft(),e.clearSelection()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"moveToWordEndRight\",exec:function(e){e.selection.moveCursorLongWordRight(),e.clearSelection()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"selectToWordStartLeft\",exec:function(e){var t=e.selection;t.$moveSelection(t.moveCursorLongWordLeft)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"selectToWordEndRight\",exec:function(e){var t=e.selection;t.$moveSelection(t.moveCursorLongWordRight)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"selectSubWordRight\",exec:function(e){u(e,1,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectSubWordLeft\",exec:function(e){u(e,-1,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"moveSubWordRight\",exec:function(e){u(e,1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"moveSubWordLeft\",exec:function(e){u(e,-1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0}]),[{bindKey:{mac:\"cmd-k cmd-backspace|cmd-backspace\",win:\"ctrl-shift-backspace|ctrl-k ctrl-backspace\"},name:\"removetolinestarthard\"},{bindKey:{mac:\"cmd-k cmd-k|cmd-delete|ctrl-k\",win:\"ctrl-shift-delete|ctrl-k ctrl-k\"},name:\"removetolineendhard\"},{bindKey:{mac:\"cmd-shift-d\",win:\"ctrl-shift-d\"},name:\"duplicateSelection\"},{bindKey:{mac:\"cmd-l\",win:\"ctrl-l\"},name:\"expandtoline\"},{bindKey:{mac:\"cmd-shift-a\",win:\"ctrl-shift-a\"},name:\"expandSelection\",args:{to:\"tag\"}},{bindKey:{mac:\"cmd-shift-j\",win:\"ctrl-shift-j\"},name:\"expandSelection\",args:{to:\"indentation\"}},{bindKey:{mac:\"ctrl-shift-m\",win:\"ctrl-shift-m\"},name:\"expandSelection\",args:{to:\"brackets\"}},{bindKey:{mac:\"cmd-shift-space\",win:\"ctrl-shift-space\"},name:\"expandSelection\",args:{to:\"scope\"}},{bindKey:{mac:\"ctrl-cmd-g\",win:\"alt-f3\"},name:\"find_all_under\"},{bindKey:{mac:\"alt-cmd-g\",win:\"ctrl-f3\"},name:\"find_under\"},{bindKey:{mac:\"shift-alt-cmd-g\",win:\"ctrl-shift-f3\"},name:\"find_under_prev\"},{bindKey:{mac:\"cmd-g\",win:\"f3\"},name:\"findnext\"},{bindKey:{mac:\"shift-cmd-g\",win:\"shift-f3\"},name:\"findprevious\"},{bindKey:{mac:\"cmd-d\",win:\"ctrl-d\"},name:\"find_under_expand\"},{bindKey:{mac:\"cmd-k cmd-d\",win:\"ctrl-k ctrl-d\"},name:\"find_under_expand_skip\"},{bindKey:{mac:\"cmd-alt-[\",win:\"ctrl-shift-[\"},name:\"toggleFoldWidget\"},{bindKey:{mac:\"cmd-alt-]\",win:\"ctrl-shift-]\"},name:\"unfold\"},{bindKey:{mac:\"cmd-k cmd-0|cmd-k cmd-j\",win:\"ctrl-k ctrl-0|ctrl-k ctrl-j\"},name:\"unfoldall\"},{bindKey:{mac:\"cmd-k cmd-1\",win:\"ctrl-k ctrl-1\"},name:\"foldOther\",args:{level:1}},{bindKey:{win:\"ctrl-left\",mac:\"alt-left\"},name:\"moveToWordStartLeft\"},{bindKey:{win:\"ctrl-right\",mac:\"alt-right\"},name:\"moveToWordEndRight\"},{bindKey:{win:\"ctrl-shift-left\",mac:\"alt-shift-left\"},name:\"selectToWordStartLeft\"},{bindKey:{win:\"ctrl-shift-right\",mac:\"alt-shift-right\"},name:\"selectToWordEndRight\"},{bindKey:{mac:\"ctrl-alt-shift-right|ctrl-shift-right\",win:\"alt-shift-right\"},name:\"selectSubWordRight\"},{bindKey:{mac:\"ctrl-alt-shift-left|ctrl-shift-left\",win:\"alt-shift-left\"},name:\"selectSubWordLeft\"},{bindKey:{mac:\"ctrl-alt-right|ctrl-right\",win:\"alt-right\"},name:\"moveSubWordRight\"},{bindKey:{mac:\"ctrl-alt-left|ctrl-left\",win:\"alt-left\"},name:\"moveSubWordLeft\"},{bindKey:{mac:\"ctrl-m\",win:\"ctrl-m\"},name:\"jumptomatching\",args:{to:\"brackets\"}},{bindKey:{mac:\"ctrl-f6\",win:\"ctrl-f6\"},name:\"goToNextError\"},{bindKey:{mac:\"ctrl-shift-f6\",win:\"ctrl-shift-f6\"},name:\"goToPreviousError\"},{bindKey:{mac:\"ctrl-o\"},name:\"splitline\"},{bindKey:{mac:\"ctrl-shift-w\",win:\"alt-shift-w\"},name:\"surrowndWithTag\"},{bindKey:{mac:\"cmd-alt-.\",win:\"alt-.\"},name:\"close_tag\"},{bindKey:{mac:\"cmd-j\",win:\"ctrl-j\"},name:\"joinlines\"},{bindKey:{mac:\"ctrl--\",win:\"alt--\"},name:\"jumpBack\"},{bindKey:{mac:\"ctrl-shift--\",win:\"alt-shift--\"},name:\"jumpForward\"},{bindKey:{mac:\"cmd-k cmd-l\",win:\"ctrl-k ctrl-l\"},name:\"tolowercase\"},{bindKey:{mac:\"cmd-k cmd-u\",win:\"ctrl-k ctrl-u\"},name:\"touppercase\"},{bindKey:{mac:\"cmd-shift-v\",win:\"ctrl-shift-v\"},name:\"paste_and_indent\"},{bindKey:{mac:\"cmd-k cmd-v|cmd-alt-v\",win:\"ctrl-k ctrl-v\"},name:\"paste_from_history\"},{bindKey:{mac:\"cmd-shift-enter\",win:\"ctrl-shift-enter\"},name:\"addLineBefore\"},{bindKey:{mac:\"cmd-enter\",win:\"ctrl-enter\"},name:\"addLineAfter\"},{bindKey:{mac:\"ctrl-shift-k\",win:\"ctrl-shift-k\"},name:\"removeline\"},{bindKey:{mac:\"ctrl-alt-up\",win:\"ctrl-up\"},name:\"scrollup\"},{bindKey:{mac:\"ctrl-alt-down\",win:\"ctrl-down\"},name:\"scrolldown\"},{bindKey:{mac:\"cmd-a\",win:\"ctrl-a\"},name:\"selectall\"},{bindKey:{linux:\"alt-shift-down\",mac:\"ctrl-shift-down\",win:\"ctrl-alt-down\"},name:\"addCursorBelow\"},{bindKey:{linux:\"alt-shift-up\",mac:\"ctrl-shift-up\",win:\"ctrl-alt-up\"},name:\"addCursorAbove\"},{bindKey:{mac:\"cmd-k cmd-c|ctrl-l\",win:\"ctrl-k ctrl-c\"},name:\"centerselection\"},{bindKey:{mac:\"f5\",win:\"f9\"},name:\"sortlines\"},{bindKey:{mac:\"ctrl-f5\",win:\"ctrl-f9\"},name:\"sortlines\",args:{caseSensitive:!0}},{bindKey:{mac:\"cmd-shift-l\",win:\"ctrl-shift-l\"},name:\"splitIntoLines\"},{bindKey:{mac:\"ctrl-cmd-down\",win:\"ctrl-shift-down\"},name:\"movelinesdown\"},{bindKey:{mac:\"ctrl-cmd-up\",win:\"ctrl-shift-up\"},name:\"movelinesup\"},{bindKey:{mac:\"alt-down\",win:\"alt-down\"},name:\"modifyNumberDown\"},{bindKey:{mac:\"alt-up\",win:\"alt-up\"},name:\"modifyNumberUp\"},{bindKey:{mac:\"cmd-/\",win:\"ctrl-/\"},name:\"togglecomment\"},{bindKey:{mac:\"cmd-alt-/\",win:\"ctrl-shift-/\"},name:\"toggleBlockComment\"},{bindKey:{linux:\"ctrl-alt-q\",mac:\"ctrl-q\",win:\"ctrl-q\"},name:\"togglerecording\"},{bindKey:{linux:\"ctrl-alt-shift-q\",mac:\"ctrl-shift-q\",win:\"ctrl-shift-q\"},name:\"replaymacro\"},{bindKey:{mac:\"ctrl-t\",win:\"ctrl-t\"},name:\"transpose\"}].forEach(function(e){var n=t.handler.commands[e.name];n&&(n.bindKey=e.bindKey),t.handler.bindKey(e.bindKey,n||e.name)})});                (function() {\n                    window.require([\"ace/keyboard/sublime\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/keybinding-vim.js",
    "content": "define(\"ace/keyboard/vim\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/search\",\"ace/lib/useragent\",\"ace/search_highlight\",\"ace/commands/multi_select_commands\",\"ace/mode/text\",\"ace/multi_select\"],function(e,t,n){\"use strict\";function r(){function t(e){return typeof e!=\"object\"?e+\"\":\"line\"in e?e.line+\":\"+e.ch:\"anchor\"in e?t(e.anchor)+\"->\"+t(e.head):Array.isArray(e)?\"[\"+e.map(function(e){return t(e)})+\"]\":JSON.stringify(e)}var e=\"\";for(var n=0;n<arguments.length;n++){var r=arguments[n],i=t(r);e+=i+\"  \"}console.log(e)}function m(e){return{row:e.line,column:e.ch}}function g(e){return new E(e.row,e.column)}function x(e){e.setOption(\"disableInput\",!0),e.setOption(\"showCursorWhenSelecting\",!1),v.signal(e,\"vim-mode-change\",{mode:\"normal\"}),e.on(\"cursorActivity\",Gn),tt(e),v.on(e.getInputField(),\"paste\",M(e))}function T(e){e.setOption(\"disableInput\",!1),e.off(\"cursorActivity\",Gn),v.off(e.getInputField(),\"paste\",M(e)),e.state.vim=null}function N(e,t){this==v.keyMap.vim&&v.rmClass(e.getWrapperElement(),\"cm-fat-cursor\"),(!t||t.attach!=C)&&T(e)}function C(e,t){this==v.keyMap.vim&&v.addClass(e.getWrapperElement(),\"cm-fat-cursor\"),(!t||t.attach!=C)&&x(e)}function k(e,t){if(!t)return undefined;if(this[e])return this[e];var n=O(e);if(!n)return!1;var r=v.Vim.findKey(t,n);return typeof r==\"function\"&&v.signal(t,\"vim-keypress\",n),r}function O(e){if(e.charAt(0)==\"'\")return e.charAt(1);var t=e.split(/-(?!$)/),n=t[t.length-1];if(t.length==1&&t[0].length==1)return!1;if(t.length==2&&t[0]==\"Shift\"&&n.length==1)return!1;var r=!1;for(var i=0;i<t.length;i++){var s=t[i];s in L?t[i]=L[s]:r=!0,s in A&&(t[i]=A[s])}return r?(X(n)&&(t[t.length-1]=n.toLowerCase()),\"<\"+t.join(\"-\")+\">\"):!1}function M(e){var t=e.state.vim;return t.onPasteFn||(t.onPasteFn=function(){t.insertMode||(e.setCursor(St(e.getCursor(),0,1)),yt.enterInsertMode(e,{},t))}),t.onPasteFn}function H(e,t){var n=[];for(var r=e;r<e+t;r++)n.push(String.fromCharCode(r));return n}function R(e,t){return t>=e.firstLine()&&t<=e.lastLine()}function U(e){return/^[a-z]$/.test(e)}function z(e){return\"()[]{}\".indexOf(e)!=-1}function W(e){return _.test(e)}function X(e){return/^[A-Z]$/.test(e)}function V(e){return/^\\s*$/.test(e)}function $(e,t){for(var n=0;n<t.length;n++)if(t[n]==e)return!0;return!1}function K(e,t,n,r,i){if(t===undefined&&!i)throw Error(\"defaultValue is required unless callback is provided\");n||(n=\"string\"),J[e]={type:n,defaultValue:t,callback:i};if(r)for(var s=0;s<r.length;s++)J[r[s]]=J[e];t&&Q(e,t)}function Q(e,t,n,r){var i=J[e];r=r||{};var s=r.scope;if(!i)return new Error(\"Unknown option: \"+e);if(i.type==\"boolean\"){if(t&&t!==!0)return new Error(\"Invalid argument: \"+e+\"=\"+t);t!==!1&&(t=!0)}i.callback?(s!==\"local\"&&i.callback(t,undefined),s!==\"global\"&&n&&i.callback(t,n)):(s!==\"local\"&&(i.value=i.type==\"boolean\"?!!t:t),s!==\"global\"&&n&&(n.state.vim.options[e]={value:t}))}function G(e,t,n){var r=J[e];n=n||{};var i=n.scope;if(!r)return new Error(\"Unknown option: \"+e);if(r.callback){var s=t&&r.callback(undefined,t);if(i!==\"global\"&&s!==undefined)return s;if(i!==\"local\")return r.callback();return}var s=i!==\"global\"&&t&&t.state.vim.options[e];return(s||i!==\"local\"&&r||{}).value}function et(){this.latestRegister=undefined,this.isPlaying=!1,this.isRecording=!1,this.replaySearchQueries=[],this.onRecordingDone=undefined,this.lastInsertModeChanges=Z()}function tt(e){return e.state.vim||(e.state.vim={inputState:new ot,lastEditInputState:undefined,lastEditActionCommand:undefined,lastHPos:-1,lastHSPos:-1,lastMotion:null,marks:{},fakeCursor:null,insertMode:!1,insertModeRepeat:undefined,visualMode:!1,visualLine:!1,visualBlock:!1,lastSelection:null,lastPastedText:null,sel:{},options:{}}),e.state.vim}function rt(){nt={searchQuery:null,searchIsReversed:!1,lastSubstituteReplacePart:undefined,jumpList:Y(),macroModeState:new et,lastCharacterSearch:{increment:0,forward:!0,selectedCharacter:\"\"},registerController:new lt({}),searchHistoryController:new ct,exCommandHistoryController:new ct};for(var e in J){var t=J[e];t.value=t.defaultValue}}function ot(){this.prefixRepeat=[],this.motionRepeat=[],this.operator=null,this.operatorArgs=null,this.motion=null,this.motionArgs=null,this.keyBuffer=[],this.registerName=null}function ut(e,t){e.state.vim.inputState=new ot,v.signal(e,\"vim-command-done\",t)}function at(e,t,n){this.clear(),this.keyBuffer=[e||\"\"],this.insertModeChanges=[],this.searchQueries=[],this.linewise=!!t,this.blockwise=!!n}function ft(e,t){var n=nt.registerController.registers;if(!e||e.length!=1)throw Error(\"Register name must be 1 character\");n[e]=t,q.push(e)}function lt(e){this.registers=e,this.unnamedRegister=e['\"']=new at,e[\".\"]=new at,e[\":\"]=new at,e[\"/\"]=new at}function ct(){this.historyBuffer=[],this.iterator=0,this.initialPrefix=null}function dt(e,t){pt[e]=t}function vt(e,t){var n=[];for(var r=0;r<t;r++)n.push(e);return n}function gt(e,t){mt[e]=t}function bt(e,t){yt[e]=t}function wt(e,t,n){var r=Math.min(Math.max(e.firstLine(),t.line),e.lastLine()),i=Pt(e,r)-1;i=n?i+1:i;var s=Math.min(Math.max(0,t.ch),i);return E(r,s)}function Et(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function St(e,t,n){return typeof t==\"object\"&&(n=t.ch,t=t.line),E(e.line+t,e.ch+n)}function xt(e,t){return{line:t.line-e.line,ch:t.line-e.line}}function Tt(e,t,n,r){var i,s=[],o=[];for(var u=0;u<t.length;u++){var a=t[u];if(n==\"insert\"&&a.context!=\"insert\"||a.context&&a.context!=n||r.operator&&a.type==\"action\"||!(i=Nt(e,a.keys)))continue;i==\"partial\"&&s.push(a),i==\"full\"&&o.push(a)}return{partial:s.length&&s,full:o.length&&o}}function Nt(e,t){if(t.slice(-11)==\"<character>\"){var n=t.length-11,r=e.slice(0,n),i=t.slice(0,n);return r==i&&e.length>n?\"full\":i.indexOf(r)==0?\"partial\":!1}return e==t?\"full\":t.indexOf(e)==0?\"partial\":!1}function Ct(e){var t=/^.*(<[^>]+>)$/.exec(e),n=t?t[1]:e.slice(-1);if(n.length>1)switch(n){case\"<CR>\":n=\"\\n\";break;case\"<Space>\":n=\" \";break;default:n=\"\"}return n}function kt(e,t,n){return function(){for(var r=0;r<n;r++)t(e)}}function Lt(e){return E(e.line,e.ch)}function At(e,t){return e.ch==t.ch&&e.line==t.line}function Ot(e,t){return e.line<t.line?!0:e.line==t.line&&e.ch<t.ch?!0:!1}function Mt(e,t){return arguments.length>2&&(t=Mt.apply(undefined,Array.prototype.slice.call(arguments,1))),Ot(e,t)?e:t}function _t(e,t){return arguments.length>2&&(t=_t.apply(undefined,Array.prototype.slice.call(arguments,1))),Ot(e,t)?t:e}function Dt(e,t,n){var r=Ot(e,t),i=Ot(t,n);return r&&i}function Pt(e,t){return e.getLine(t).length}function Ht(e){return e.trim?e.trim():e.replace(/^\\s+|\\s+$/g,\"\")}function Bt(e){return e.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g,\"\\\\$1\")}function jt(e,t,n){var r=Pt(e,t),i=(new Array(n-r+1)).join(\" \");e.setCursor(E(t,r)),e.replaceRange(i,e.getCursor())}function Ft(e,t){var n=[],r=e.listSelections(),i=Lt(e.clipPos(t)),s=!At(t,i),o=e.getCursor(\"head\"),u=qt(r,o),a=At(r[u].head,r[u].anchor),f=r.length-1,l=f-u>u?f:0,c=r[l].anchor,h=Math.min(c.line,i.line),p=Math.max(c.line,i.line),d=c.ch,v=i.ch,m=r[l].head.ch-d,g=v-d;m>0&&g<=0?(d++,s||v--):m<0&&g>=0?(d--,a||v++):m<0&&g==-1&&(d--,v++);for(var y=h;y<=p;y++){var b={anchor:new E(y,d),head:new E(y,v)};n.push(b)}return e.setSelections(n),t.ch=v,c.ch=d,c}function It(e,t,n){var r=[];for(var i=0;i<n;i++){var s=St(t,i,0);r.push({anchor:s,head:s})}e.setSelections(r,0)}function qt(e,t,n){for(var r=0;r<e.length;r++){var i=n!=\"head\"&&At(e[r].anchor,t),s=n!=\"anchor\"&&At(e[r].head,t);if(i||s)return r}return-1}function Rt(e,t){var n=t.lastSelection,r=function(){var t=e.listSelections(),n=t[0],r=t[t.length-1],i=Ot(n.anchor,n.head)?n.anchor:n.head,s=Ot(r.anchor,r.head)?r.head:r.anchor;return[i,s]},i=function(){var t=e.getCursor(),r=e.getCursor(),i=n.visualBlock;if(i){var s=i.width,o=i.height;r=E(t.line+o,t.ch+s);var u=[];for(var a=t.line;a<r.line;a++){var f=E(a,t.ch),l=E(a,r.ch),c={anchor:f,head:l};u.push(c)}e.setSelections(u)}else{var h=n.anchorMark.find(),p=n.headMark.find(),d=p.line-h.line,v=p.ch-h.ch;r={line:r.line+d,ch:d?r.ch:v+r.ch},n.visualLine&&(t=E(t.line,0),r=E(r.line,Pt(e,r.line))),e.setSelection(t,r)}return[t,r]};return t.visualMode?r():i()}function Ut(e,t){var n=t.sel.anchor,r=t.sel.head;t.lastPastedText&&(r=e.posFromIndex(e.indexFromPos(n)+t.lastPastedText.length),t.lastPastedText=null),t.lastSelection={anchorMark:e.setBookmark(n),headMark:e.setBookmark(r),anchor:Lt(n),head:Lt(r),visualMode:t.visualMode,visualLine:t.visualLine,visualBlock:t.visualBlock}}function zt(e,t,n){var r=e.state.vim.sel,i=r.head,s=r.anchor,o;return Ot(n,t)&&(o=n,n=t,t=o),Ot(i,s)?(i=Mt(t,i),s=_t(s,n)):(s=Mt(t,s),i=_t(i,n),i=St(i,0,-1),i.ch==-1&&i.line!=e.firstLine()&&(i=E(i.line-1,Pt(e,i.line-1)))),[s,i]}function Wt(e,t,n){var r=e.state.vim;t=t||r.sel;var n=n||r.visualLine?\"line\":r.visualBlock?\"block\":\"char\",i=Xt(e,t,n);e.setSelections(i.ranges,i.primary),Yn(e)}function Xt(e,t,n,r){var i=Lt(t.head),s=Lt(t.anchor);if(n==\"char\"){var o=!r&&!Ot(t.head,t.anchor)?1:0,u=Ot(t.head,t.anchor)?1:0;return i=St(t.head,0,o),s=St(t.anchor,0,u),{ranges:[{anchor:s,head:i}],primary:0}}if(n==\"line\"){if(!Ot(t.head,t.anchor)){s.ch=0;var a=e.lastLine();i.line>a&&(i.line=a),i.ch=Pt(e,i.line)}else i.ch=0,s.ch=Pt(e,s.line);return{ranges:[{anchor:s,head:i}],primary:0}}if(n==\"block\"){var f=Math.min(s.line,i.line),l=Math.min(s.ch,i.ch),c=Math.max(s.line,i.line),h=Math.max(s.ch,i.ch)+1,p=c-f+1,d=i.line==f?0:p-1,v=[];for(var m=0;m<p;m++)v.push({anchor:E(f+m,l),head:E(f+m,h)});return{ranges:v,primary:d}}}function Vt(e){var t=e.getCursor(\"head\");return e.getSelection().length==1&&(t=Mt(t,e.getCursor(\"anchor\"))),t}function $t(e,t){var n=e.state.vim;t!==!1&&e.setCursor(wt(e,n.sel.head)),Ut(e,n),n.visualMode=!1,n.visualLine=!1,n.visualBlock=!1,v.signal(e,\"vim-mode-change\",{mode:\"normal\"}),n.fakeCursor&&n.fakeCursor.clear()}function Jt(e,t,n){var r=e.getRange(t,n);if(/\\n\\s*$/.test(r)){var i=r.split(\"\\n\");i.pop();var s;for(var s=i.pop();i.length>0&&s&&V(s);s=i.pop())n.line--,n.ch=0;s?(n.line--,n.ch=Pt(e,n.line)):n.ch=0}}function Kt(e,t,n){t.ch=0,n.ch=0,n.line++}function Qt(e){if(!e)return 0;var t=e.search(/\\S/);return t==-1?e.length:t}function Gt(e,t,n,r,i){var s=Vt(e),o=e.getLine(s.line),u=s.ch,a=i?D[0]:P[0];while(!a(o.charAt(u))){u++;if(u>=o.length)return null}r?a=P[0]:(a=D[0],a(o.charAt(u))||(a=D[1]));var f=u,l=u;while(a(o.charAt(f))&&f<o.length)f++;while(a(o.charAt(l))&&l>=0)l--;l++;if(t){var c=f;while(/\\s/.test(o.charAt(f))&&f<o.length)f++;if(c==f){var h=l;while(/\\s/.test(o.charAt(l-1))&&l>0)l--;l||(l=h)}}return{start:E(s.line,l),end:E(s.line,f)}}function Yt(e,t,n){At(t,n)||nt.jumpList.add(e,t,n)}function Zt(e,t){nt.lastCharacterSearch.increment=e,nt.lastCharacterSearch.forward=t.forward,nt.lastCharacterSearch.selectedCharacter=t.selectedCharacter}function nn(e,t,n,r){var i=Lt(e.getCursor()),s=n?1:-1,o=n?e.lineCount():-1,u=i.ch,a=i.line,f=e.getLine(a),l={lineText:f,nextCh:f.charAt(u),lastCh:null,index:u,symb:r,reverseSymb:(n?{\")\":\"(\",\"}\":\"{\"}:{\"(\":\")\",\"{\":\"}\"})[r],forward:n,depth:0,curMoveThrough:!1},c=en[r];if(!c)return i;var h=tn[c].init,p=tn[c].isComplete;h&&h(l);while(a!==o&&t){l.index+=s,l.nextCh=l.lineText.charAt(l.index);if(!l.nextCh){a+=s,l.lineText=e.getLine(a)||\"\";if(s>0)l.index=0;else{var d=l.lineText.length;l.index=d>0?d-1:0}l.nextCh=l.lineText.charAt(l.index)}p(l)&&(i.line=a,i.ch=l.index,t--)}return l.nextCh||l.curMoveThrough?E(a,l.index):i}function rn(e,t,n,r,i){var s=t.line,o=t.ch,u=e.getLine(s),a=n?1:-1,f=r?P:D;if(i&&u==\"\"){s+=a,u=e.getLine(s);if(!R(e,s))return null;o=n?0:u.length}for(;;){if(i&&u==\"\")return{from:0,to:0,line:s};var l=a>0?u.length:-1,c=l,h=l;while(o!=l){var p=!1;for(var d=0;d<f.length&&!p;++d)if(f[d](u.charAt(o))){c=o;while(o!=l&&f[d](u.charAt(o)))o+=a;h=o,p=c!=h;if(c==t.ch&&s==t.line&&h==c+a)continue;return{from:Math.min(c,h+1),to:Math.max(c,h),line:s}}p||(o+=a)}s+=a;if(!R(e,s))return null;u=e.getLine(s),o=a>0?0:u.length}}function sn(e,t,n,r,i,s){var o=Lt(t),u=[];(r&&!i||!r&&i)&&n++;var a=!r||!i;for(var f=0;f<n;f++){var l=rn(e,t,r,s,a);if(!l){var c=Pt(e,e.lastLine());u.push(r?{line:e.lastLine(),from:c,to:c}:{line:0,from:0,to:0});break}u.push(l),t=E(l.line,r?l.to-1:l.from)}var h=u.length!=n,p=u[0],d=u.pop();return r&&!i?(!h&&(p.from!=o.ch||p.line!=o.line)&&(d=u.pop()),E(d.line,d.from)):r&&i?E(d.line,d.to-1):!r&&i?(!h&&(p.to!=o.ch||p.line!=o.line)&&(d=u.pop()),E(d.line,d.to)):E(d.line,d.from)}function on(e,t,n,r){var i=e.getCursor(),s=i.ch,o;for(var u=0;u<t;u++){var a=e.getLine(i.line);o=fn(s,a,r,n,!0);if(o==-1)return null;s=o}return E(e.getCursor().line,o)}function un(e,t){var n=e.getCursor().line;return wt(e,E(n,t-1))}function an(e,t,n,r){if(!$(n,I))return;t.marks[n]&&t.marks[n].clear(),t.marks[n]=e.setBookmark(r)}function fn(e,t,n,r,i){var s;return r?(s=t.indexOf(n,e+1),s!=-1&&!i&&(s-=1)):(s=t.lastIndexOf(n,e-1),s!=-1&&!i&&(s+=1)),s}function ln(e,t,n,r,i){function c(t){return!/\\S/.test(e.getLine(t))}function h(e,t,n){return n?c(e)!=c(e+t):!c(e)&&c(e+t)}function p(t){r=r>0?1:-1;var n=e.ace.session.getFoldLine(t);n&&t+r>n.start.row&&t+r<n.end.row&&(r=(r>0?n.end.row:n.start.row)-t)}var s=t.line,o=e.firstLine(),u=e.lastLine(),a,f,l=s;if(r){while(o<=l&&l<=u&&n>0)p(l),h(l,r)&&n--,l+=r;return new E(l,0)}var d=e.state.vim;if(d.visualLine&&h(s,1,!0)){var v=d.sel.anchor;h(v.line,-1,!0)&&(!i||v.line!=s)&&(s+=1)}var m=c(s);for(l=s;l<=u&&n;l++)h(l,1,!0)&&(!i||c(l)!=m)&&n--;f=new E(l,0),l>u&&!m?m=!0:i=!1;for(l=s;l>o;l--)if(!i||c(l)==m||l==s)if(h(l,-1,!0))break;return a=new E(l,0),{start:a,end:f}}function cn(e,t,n,r){var i=t,s,o,u={\"(\":/[()]/,\")\":/[()]/,\"[\":/[[\\]]/,\"]\":/[[\\]]/,\"{\":/[{}]/,\"}\":/[{}]/,\"<\":/[<>]/,\">\":/[<>]/}[n],a={\"(\":\"(\",\")\":\"(\",\"[\":\"[\",\"]\":\"[\",\"{\":\"{\",\"}\":\"{\",\"<\":\"<\",\">\":\"<\"}[n],f=e.getLine(i.line).charAt(i.ch),l=f===a?1:0;s=e.scanForBracket(E(i.line,i.ch+l),-1,null,{bracketRegex:u}),o=e.scanForBracket(E(i.line,i.ch+l),1,null,{bracketRegex:u});if(!s||!o)return{start:i,end:i};s=s.pos,o=o.pos;if(s.line==o.line&&s.ch>o.ch||s.line>o.line){var c=s;s=o,o=c}return r?o.ch+=1:s.ch+=1,{start:s,end:o}}function hn(e,t,n,r){var i=Lt(t),s=e.getLine(i.line),o=s.split(\"\"),u,a,f,l,c=o.indexOf(n);i.ch<c?i.ch=c:c<i.ch&&o[i.ch]==n&&(a=i.ch,--i.ch);if(o[i.ch]==n&&!a)u=i.ch+1;else for(f=i.ch;f>-1&&!u;f--)o[f]==n&&(u=f+1);if(u&&!a)for(f=u,l=o.length;f<l&&!a;f++)o[f]==n&&(a=f);return!u||!a?{start:i,end:i}:(r&&(--u,++a),{start:E(i.line,u),end:E(i.line,a)})}function pn(){}function dn(e){var t=e.state.vim;return t.searchState_||(t.searchState_=new pn)}function vn(e,t,n,r,i){e.openDialog?e.openDialog(t,r,{bottom:!0,value:i.value,onKeyDown:i.onKeyDown,onKeyUp:i.onKeyUp,selectValueOnOpen:!1,onClose:function(){e.state.vim&&(e.state.vim.status=\"\",e.ace.renderer.$loop.schedule(e.ace.renderer.CHANGE_CURSOR))}}):r(prompt(n,\"\"))}function mn(e){return yn(e,\"/\")}function gn(e){return bn(e,\"/\")}function yn(e,t){var n=bn(e,t)||[];if(!n.length)return[];var r=[];if(n[0]!==0)return;for(var i=0;i<n.length;i++)typeof n[i]==\"number\"&&r.push(e.substring(n[i]+1,n[i+1]));return r}function bn(e,t){t||(t=\"/\");var n=!1,r=[];for(var i=0;i<e.length;i++){var s=e.charAt(i);!n&&s==t&&r.push(i),n=!n&&s==\"\\\\\"}return r}function wn(e){var t=\"|(){\",n=\"}\",r=!1,i=[];for(var s=-1;s<e.length;s++){var o=e.charAt(s)||\"\",u=e.charAt(s+1)||\"\",a=u&&t.indexOf(u)!=-1;r?((o!==\"\\\\\"||!a)&&i.push(o),r=!1):o===\"\\\\\"?(r=!0,u&&n.indexOf(u)!=-1&&(a=!0),(!a||u===\"\\\\\")&&i.push(o)):(i.push(o),a&&u!==\"\\\\\"&&i.push(\"\\\\\"))}return i.join(\"\")}function Sn(e){var t=!1,n=[];for(var r=-1;r<e.length;r++){var i=e.charAt(r)||\"\",s=e.charAt(r+1)||\"\";En[i+s]?(n.push(En[i+s]),r++):t?(n.push(i),t=!1):i===\"\\\\\"?(t=!0,W(s)||s===\"$\"?n.push(\"$\"):s!==\"/\"&&s!==\"\\\\\"&&n.push(\"\\\\\")):(i===\"$\"&&n.push(\"$\"),n.push(i),s===\"/\"&&n.push(\"\\\\\"))}return n.join(\"\")}function Tn(e){var t=new v.StringStream(e),n=[];while(!t.eol()){while(t.peek()&&t.peek()!=\"\\\\\")n.push(t.next());var r=!1;for(var i in xn)if(t.match(i,!0)){r=!0,n.push(xn[i]);break}r||n.push(t.next())}return n.join(\"\")}function Nn(e,t,n){var r=nt.registerController.getRegister(\"/\");r.setText(e);if(e instanceof RegExp)return e;var i=gn(e),s,o;if(!i.length)s=e;else{s=e.substring(0,i[0]);var u=e.substring(i[0]);o=u.indexOf(\"i\")!=-1}if(!s)return null;G(\"pcre\")||(s=wn(s)),n&&(t=/^[^A-Z]*$/.test(s));var a=new RegExp(s,t||o?\"i\":undefined);return a}function Cn(e,t){e.openNotification?e.openNotification('<span style=\"color: red\">'+t+\"</span>\",{bottom:!0,duration:5e3}):alert(t)}function kn(e,t){var n='<span style=\"font-family: monospace; white-space: pre\">'+(e||\"\")+'<input type=\"text\" autocorrect=\"off\" autocapitalize=\"none\" autocomplete=\"off\"></span>';return t&&(n+=' <span style=\"color: #888\">'+t+\"</span>\"),n}function An(e,t){var n=(t.prefix||\"\")+\" \"+(t.desc||\"\"),r=kn(t.prefix,t.desc);vn(e,r,n,t.onClose,t)}function On(e,t){if(e instanceof RegExp&&t instanceof RegExp){var n=[\"global\",\"multiline\",\"ignoreCase\",\"source\"];for(var r=0;r<n.length;r++){var i=n[r];if(e[i]!==t[i])return!1}return!0}return!1}function Mn(e,t,n,r){if(!t)return;var i=dn(e),s=Nn(t,!!n,!!r);if(!s)return;return Dn(e,s),On(s,i.getQuery())?s:(i.setQuery(s),s)}function _n(e){if(e.source.charAt(0)==\"^\")var t=!0;return{token:function(n){if(t&&!n.sol()){n.skipToEnd();return}var r=n.match(e,!1);if(r){if(r[0].length==0)return n.next(),\"searching\";if(!n.sol()){n.backUp(1);if(!e.exec(n.next()+r[0]))return n.next(),null}return n.match(e),\"searching\"}while(!n.eol()){n.next();if(n.match(e,!1))break}},query:e}}function Dn(e,t){var n=dn(e),r=n.getOverlay();if(!r||t!=r.query)r&&e.removeOverlay(r),r=_n(t),e.addOverlay(r),e.showMatchesOnScrollbar&&(n.getScrollbarAnnotate()&&n.getScrollbarAnnotate().clear(),n.setScrollbarAnnotate(e.showMatchesOnScrollbar(t))),n.setOverlay(r)}function Pn(e,t,n,r){return r===undefined&&(r=1),e.operation(function(){var i=e.getCursor(),s=e.getSearchCursor(n,i);for(var o=0;o<r;o++){var u=s.find(t);o==0&&u&&At(s.from(),i)&&(u=s.find(t));if(!u){s=e.getSearchCursor(n,t?E(e.lastLine()):E(e.firstLine(),0));if(!s.find(t))return}}return s.from()})}function Hn(e){var t=dn(e);e.removeOverlay(dn(e).getOverlay()),t.setOverlay(null),t.getScrollbarAnnotate()&&(t.getScrollbarAnnotate().clear(),t.setScrollbarAnnotate(null))}function Bn(e,t,n){return typeof e!=\"number\"&&(e=e.line),t instanceof Array?$(e,t):n?e>=t&&e<=n:e==t}function jn(e){var t=e.ace.renderer;return{top:t.getFirstFullyVisibleRow(),bottom:t.getLastFullyVisibleRow()}}function Fn(e,t,n){var r=t.marks[n];return r&&r.find()}function Un(e,t,n,r,i,s,o,u,a){function c(){e.operation(function(){while(!f)h(),p();d()})}function h(){var t=e.getRange(s.from(),s.to()),n=t.replace(o,u);s.replace(n)}function p(){while(s.findNext()&&Bn(s.from(),r,i)){if(!n&&l&&s.from().line==l.line)continue;e.scrollIntoView(s.from(),30),e.setSelection(s.from(),s.to()),l=s.from(),f=!1;return}f=!0}function d(t){t&&t(),e.focus();if(l){e.setCursor(l);var n=e.state.vim;n.exMode=!1,n.lastHPos=n.lastHSPos=l.ch}a&&a()}function m(t,n,r){v.e_stop(t);var i=v.keyName(t);switch(i){case\"Y\":h(),p();break;case\"N\":p();break;case\"A\":var s=a;a=undefined,e.operation(c),a=s;break;case\"L\":h();case\"Q\":case\"Esc\":case\"Ctrl-C\":case\"Ctrl-[\":d(r)}return f&&d(r),!0}e.state.vim.exMode=!0;var f=!1,l=s.from();p();if(f){Cn(e,\"No matches for \"+o.source);return}if(!t){c(),a&&a();return}An(e,{prefix:\"replace with <strong>\"+u+\"</strong> (y/n/a/q/l)\",onKeyDown:m})}function zn(e){var t=e.state.vim,n=nt.macroModeState,r=nt.registerController.getRegister(\".\"),i=n.isPlaying,s=n.lastInsertModeChanges;i||(e.off(\"change\",Qn),v.off(e.getInputField(),\"keydown\",tr)),!i&&t.insertModeRepeat>1&&(nr(e,t,t.insertModeRepeat-1,!0),t.lastEditInputState.repeatOverride=t.insertModeRepeat),delete t.insertModeRepeat,t.insertMode=!1,e.setCursor(e.getCursor().line,e.getCursor().ch-1),e.setOption(\"keyMap\",\"vim\"),e.setOption(\"disableInput\",!0),e.toggleOverwrite(!1),r.setText(s.changes.join(\"\")),v.signal(e,\"vim-mode-change\",{mode:\"normal\"}),n.isRecording&&Jn(n)}function Wn(e){b.unshift(e)}function Xn(e,t,n,r,i){var s={keys:e,type:t};s[t]=n,s[t+\"Args\"]=r;for(var o in i)s[o]=i[o];Wn(s)}function Vn(e,t,n,r){var i=nt.registerController.getRegister(r);if(r==\":\"){i.keyBuffer[0]&&Rn.processCommand(e,i.keyBuffer[0]),n.isPlaying=!1;return}var s=i.keyBuffer,o=0;n.isPlaying=!0,n.replaySearchQueries=i.searchQueries.slice(0);for(var u=0;u<s.length;u++){var a=s[u],f,l;while(a){f=/<\\w+-.+?>|<\\w+>|./.exec(a),l=f[0],a=a.substring(f.index+l.length),v.Vim.handleKey(e,l,\"macro\");if(t.insertMode){var c=i.insertModeChanges[o++].changes;nt.macroModeState.lastInsertModeChanges.changes=c,rr(e,c,1),zn(e)}}}n.isPlaying=!1}function $n(e,t){if(e.isPlaying)return;var n=e.latestRegister,r=nt.registerController.getRegister(n);r&&r.pushText(t)}function Jn(e){if(e.isPlaying)return;var t=e.latestRegister,n=nt.registerController.getRegister(t);n&&n.pushInsertModeChanges&&n.pushInsertModeChanges(e.lastInsertModeChanges)}function Kn(e,t){if(e.isPlaying)return;var n=e.latestRegister,r=nt.registerController.getRegister(n);r&&r.pushSearchQuery&&r.pushSearchQuery(t)}function Qn(e,t){var n=nt.macroModeState,r=n.lastInsertModeChanges;if(!n.isPlaying)while(t){r.expectCursorActivityForChange=!0;if(r.ignoreCount>1)r.ignoreCount--;else if(t.origin==\"+input\"||t.origin==\"paste\"||t.origin===undefined){var i=e.listSelections().length;i>1&&(r.ignoreCount=i);var s=t.text.join(\"\\n\");r.maybeReset&&(r.changes=[],r.maybeReset=!1),e.state.overwrite&&!/\\n/.test(s)?r.changes.push([s]):r.changes.push(s)}t=t.next}}function Gn(e){var t=e.state.vim;if(t.insertMode){var n=nt.macroModeState;if(n.isPlaying)return;var r=n.lastInsertModeChanges;r.expectCursorActivityForChange?r.expectCursorActivityForChange=!1:r.maybeReset=!0}else e.curOp.isVimOp||Zn(e,t);t.visualMode&&Yn(e)}function Yn(e){var t=e.state.vim,n=wt(e,Lt(t.sel.head)),r=St(n,0,1);t.fakeCursor&&t.fakeCursor.clear(),t.fakeCursor=e.markText(n,r,{className:\"cm-animate-fat-cursor\"})}function Zn(e,t){var n=e.getCursor(\"anchor\"),r=e.getCursor(\"head\");t.visualMode&&!e.somethingSelected()?$t(e,!1):!t.visualMode&&!t.insertMode&&e.somethingSelected()&&(t.visualMode=!0,t.visualLine=!1,v.signal(e,\"vim-mode-change\",{mode:\"visual\"}));if(t.visualMode){var i=Ot(r,n)?0:-1,s=Ot(r,n)?-1:0;r=St(r,0,i),n=St(n,0,s),t.sel={anchor:n,head:r},an(e,t,\"<\",Mt(r,n)),an(e,t,\">\",_t(r,n))}else t.insertMode||(t.lastHPos=e.getCursor().ch)}function er(e){this.keyName=e}function tr(e){function i(){return n.maybeReset&&(n.changes=[],n.maybeReset=!1),n.changes.push(new er(r)),!0}var t=nt.macroModeState,n=t.lastInsertModeChanges,r=v.keyName(e);if(!r)return;(r.indexOf(\"Delete\")!=-1||r.indexOf(\"Backspace\")!=-1)&&v.lookupKey(r,\"vim-insert\",i)}function nr(e,t,n,r){function u(){s?ht.processAction(e,t,t.lastEditActionCommand):ht.evalInput(e,t)}function a(n){if(i.lastInsertModeChanges.changes.length>0){n=t.lastEditActionCommand?n:1;var r=i.lastInsertModeChanges;rr(e,r.changes,n)}}var i=nt.macroModeState;i.isPlaying=!0;var s=!!t.lastEditActionCommand,o=t.inputState;t.inputState=t.lastEditInputState;if(s&&t.lastEditActionCommand.interlaceInsertRepeat)for(var f=0;f<n;f++)u(),a(1);else r||u(),a(n);t.inputState=o,t.insertMode&&!r&&zn(e),i.isPlaying=!1}function rr(e,t,n){function r(t){return typeof t==\"string\"?v.commands[t](e):t(e),!0}var i=e.getCursor(\"head\"),s=nt.macroModeState.lastInsertModeChanges.inVisualBlock;if(s){var o=e.state.vim,u=o.lastSelection,a=xt(u.anchor,u.head);It(e,i,a.line+1),n=e.listSelections().length,e.setCursor(i)}for(var f=0;f<n;f++){s&&e.setCursor(St(i,f,0));for(var l=0;l<t.length;l++){var c=t[l];if(c instanceof er)v.lookupKey(c.keyName,\"vim-insert\",r);else if(typeof c==\"string\"){var h=e.getCursor();e.replaceRange(c,h,h)}else{var p=e.getCursor(),d=St(p,0,c[0].length);e.replaceRange(c[0],p,d)}}}s&&e.setCursor(St(i,0,1))}function sr(e,t,n){t.length>1&&t[0]==\"n\"&&(t=t.replace(\"numpad\",\"\")),t=ir[t]||t;var r=\"\";return n.ctrlKey&&(r+=\"C-\"),n.altKey&&(r+=\"A-\"),(r||t.length>1)&&n.shiftKey&&(r+=\"S-\"),r+=t,r.length>1&&(r=\"<\"+r+\">\"),r}function ur(e){var t=new e.constructor;return Object.keys(e).forEach(function(n){var r=e[n];Array.isArray(r)?r=r.slice():r&&typeof r==\"object\"&&r.constructor!=Object&&(r=ur(r)),t[n]=r}),e.sel&&(t.sel={head:e.sel.head&&Lt(e.sel.head),anchor:e.sel.anchor&&Lt(e.sel.anchor)}),t}function ar(e,t,n){var r=!1,i=S.maybeInitVimState_(e),s=i.visualBlock||i.wasInVisualBlock;i.wasInVisualBlock&&!e.ace.inMultiSelectMode?i.wasInVisualBlock=!1:e.ace.inMultiSelectMode&&i.visualBlock&&(i.wasInVisualBlock=!0);if(t==\"<Esc>\"&&!i.insertMode&&!i.visualMode&&e.ace.inMultiSelectMode)e.ace.exitMultiSelectMode();else if(s||!e.ace.inMultiSelectMode||e.ace.inVirtualSelectionMode)r=S.handleKey(e,t,n);else{var o=ur(i);e.operation(function(){e.ace.forEachSelection(function(){var i=e.ace.selection;e.state.vim.lastHPos=i.$desiredColumn==null?i.lead.column:i.$desiredColumn;var s=e.getCursor(\"head\"),u=e.getCursor(\"anchor\"),a=Ot(s,u)?0:-1,f=Ot(s,u)?-1:0;s=St(s,0,a),u=St(u,0,f),e.state.vim.sel.head=s,e.state.vim.sel.anchor=u,r=or(e,t,n),i.$desiredColumn=e.state.vim.lastHPos==-1?null:e.state.vim.lastHPos,e.virtualSelectionMode()&&(e.state.vim=ur(o))}),e.curOp.cursorActivity&&!r&&(e.curOp.cursorActivity=!1)},!0)}return r&&!i.visualMode&&!i.insert&&Zn(e,i),r}function lr(e,t){t.off(\"beforeEndOperation\",lr);var n=t.state.cm.vimCmd;n&&t.execCommand(n.exec?n:n.name,n.args),t.curOp=t.prevOp}var i=e(\"../range\").Range,s=e(\"../lib/event_emitter\").EventEmitter,o=e(\"../lib/dom\"),u=e(\"../lib/oop\"),a=e(\"../lib/keys\"),f=e(\"../lib/event\"),l=e(\"../search\").Search,c=e(\"../lib/useragent\"),h=e(\"../search_highlight\").SearchHighlight,p=e(\"../commands/multi_select_commands\"),d=e(\"../mode/text\").Mode.prototype.tokenRe;e(\"../multi_select\");var v=function(e){this.ace=e,this.state={},this.marks={},this.$uid=0,this.onChange=this.onChange.bind(this),this.onSelectionChange=this.onSelectionChange.bind(this),this.onBeforeEndOperation=this.onBeforeEndOperation.bind(this),this.ace.on(\"change\",this.onChange),this.ace.on(\"changeSelection\",this.onSelectionChange),this.ace.on(\"beforeEndOperation\",this.onBeforeEndOperation)};v.Pos=function(e,t){if(!(this instanceof E))return new E(e,t);this.line=e,this.ch=t},v.defineOption=function(e,t,n){},v.commands={redo:function(e){e.ace.redo()},undo:function(e){e.ace.undo()},newlineAndIndent:function(e){e.ace.insert(\"\\n\")}},v.keyMap={},v.addClass=v.rmClass=function(){},v.e_stop=v.e_preventDefault=f.stopEvent,v.keyName=function(e){var t=a[e.keyCode]||e.key||\"\";return t.length==1&&(t=t.toUpperCase()),t=f.getModifierString(e).replace(/(^|-)\\w/g,function(e){return e.toUpperCase()})+t,t},v.keyMap[\"default\"]=function(e){return function(t){var n=t.ace.commands.commandKeyBinding[e.toLowerCase()];return n&&t.ace.execCommand(n)!==!1}},v.lookupKey=function cr(e,t,n){typeof t==\"string\"&&(t=v.keyMap[t]);var r=typeof t==\"function\"?t(e):t[e];if(r===!1)return\"nothing\";if(r===\"...\")return\"multi\";if(r!=null&&n(r))return\"handled\";if(t.fallthrough){if(!Array.isArray(t.fallthrough))return cr(e,t.fallthrough,n);for(var i=0;i<t.fallthrough.length;i++){var s=cr(e,t.fallthrough[i],n);if(s)return s}}},v.signal=function(e,t,n){return e._signal(t,n)},v.on=f.addListener,v.off=f.removeListener,v.isWordChar=function(e){return e<\"\"?/^\\w$/.test(e):(d.lastIndex=0,d.test(e))},function(){u.implement(v.prototype,s),this.destroy=function(){this.ace.off(\"change\",this.onChange),this.ace.off(\"changeSelection\",this.onSelectionChange),this.ace.off(\"beforeEndOperation\",this.onBeforeEndOperation),this.removeOverlay()},this.virtualSelectionMode=function(){return this.ace.inVirtualSelectionMode&&this.ace.selection.index},this.onChange=function(e){var t={text:e.action[0]==\"i\"?e.lines:[]},n=this.curOp=this.curOp||{};n.changeHandlers||(n.changeHandlers=this._eventRegistry.change&&this._eventRegistry.change.slice()),n.lastChange?n.lastChange.next=n.lastChange=t:n.lastChange=n.change=t,this.$updateMarkers(e)},this.onSelectionChange=function(){var e=this.curOp=this.curOp||{};e.cursorActivityHandlers||(e.cursorActivityHandlers=this._eventRegistry.cursorActivity&&this._eventRegistry.cursorActivity.slice()),this.curOp.cursorActivity=!0,this.ace.inMultiSelectMode&&this.ace.keyBinding.removeKeyboardHandler(p.keyboardHandler)},this.operation=function(e,t){if(!t&&this.curOp||t&&this.curOp&&this.curOp.force)return e();(t||!this.ace.curOp)&&this.curOp&&this.onBeforeEndOperation();if(!this.ace.curOp){var n=this.ace.prevOp;this.ace.startOperation({command:{name:\"vim\",scrollIntoView:\"cursor\"}})}var r=this.curOp=this.curOp||{};this.curOp.force=t;var i=e();return this.ace.curOp&&this.ace.curOp.command.name==\"vim\"&&(this.state.dialog&&(this.ace.curOp.command.scrollIntoView=!1),this.ace.endOperation(),!r.cursorActivity&&!r.lastChange&&n&&(this.ace.prevOp=n)),(t||!this.ace.curOp)&&this.curOp&&this.onBeforeEndOperation(),i},this.onBeforeEndOperation=function(){var e=this.curOp;e&&(e.change&&this.signal(\"change\",e.change,e),e&&e.cursorActivity&&this.signal(\"cursorActivity\",null,e),this.curOp=null)},this.signal=function(e,t,n){var r=n?n[e+\"Handlers\"]:(this._eventRegistry||{})[e];if(!r)return;r=r.slice();for(var i=0;i<r.length;i++)r[i](this,t)},this.firstLine=function(){return 0},this.lastLine=function(){return this.ace.session.getLength()-1},this.lineCount=function(){return this.ace.session.getLength()},this.setCursor=function(e,t){typeof e==\"object\"&&(t=e.ch,e=e.line),this.ace.inVirtualSelectionMode||this.ace.exitMultiSelectMode(),this.ace.session.unfold({row:e,column:t}),this.ace.selection.moveTo(e,t)},this.getCursor=function(e){var t=this.ace.selection,n=e==\"anchor\"?t.isEmpty()?t.lead:t.anchor:e==\"head\"||!e?t.lead:t.getRange()[e];return g(n)},this.listSelections=function(e){var t=this.ace.multiSelect.rangeList.ranges;return!t.length||this.ace.inVirtualSelectionMode?[{anchor:this.getCursor(\"anchor\"),head:this.getCursor(\"head\")}]:t.map(function(e){return{anchor:this.clipPos(g(e.cursor==e.end?e.start:e.end)),head:this.clipPos(g(e.cursor))}},this)},this.setSelections=function(e,t){var n=this.ace.multiSelect,r=e.map(function(e){var t=m(e.anchor),n=m(e.head),r=i.comparePoints(t,n)<0?new i.fromPoints(t,n):new i.fromPoints(n,t);return r.cursor=i.comparePoints(r.start,n)?r.end:r.start,r});if(this.ace.inVirtualSelectionMode){this.ace.selection.fromOrientedRange(r[0]);return}t?r[t]&&r.push(r.splice(t,1)[0]):r=r.reverse(),n.toSingleRange(r[0].clone());var s=this.ace.session;for(var o=0;o<r.length;o++){var u=s.$clipRangeToDocument(r[o]);n.addRange(u)}},this.setSelection=function(e,t,n){var r=this.ace.selection;r.moveTo(e.line,e.ch),r.selectTo(t.line,t.ch),n&&n.origin==\"*mouse\"&&this.onBeforeEndOperation()},this.somethingSelected=function(e){return!this.ace.selection.isEmpty()},this.clipPos=function(e){var t=this.ace.session.$clipPositionToDocument(e.line,e.ch);return g(t)},this.markText=function(e){return{clear:function(){},find:function(){}}},this.$updateMarkers=function(e){var t=e.action==\"insert\",n=e.start,r=e.end,s=(r.row-n.row)*(t?1:-1),o=(r.column-n.column)*(t?1:-1);t&&(r=n);for(var u in this.marks){var a=this.marks[u],f=i.comparePoints(a,n);if(f<0)continue;if(f===0&&t){if(a.bias!=1){a.bias=-1;continue}f=1}var l=t?f:i.comparePoints(a,r);if(l>0){a.row+=s,a.column+=a.row==r.row?o:0;continue}!t&&l<=0&&(a.row=n.row,a.column=n.column,l===0&&(a.bias=1))}};var e=function(e,t,n,r){this.cm=e,this.id=t,this.row=n,this.column=r,e.marks[this.id]=this};e.prototype.clear=function(){delete this.cm.marks[this.id]},e.prototype.find=function(){return g(this)},this.setBookmark=function(t,n){var r=new e(this,this.$uid++,t.line,t.ch);if(!n||!n.insertLeft)r.$insertRight=!0;return this.marks[r.id]=r,r},this.moveH=function(e,t){if(t==\"char\"){var n=this.ace.selection;n.clearSelection(),n.moveCursorBy(0,e)}},this.findPosV=function(e,t,n,r){if(n==\"page\"){var i=this.ace.renderer,s=i.layerConfig;t*=Math.floor(s.height/s.lineHeight),n=\"line\"}if(n==\"line\"){var o=this.ace.session.documentToScreenPosition(e.line,e.ch);r!=null&&(o.column=r),o.row+=t,o.row=Math.min(Math.max(0,o.row),this.ace.session.getScreenLength()-1);var u=this.ace.session.screenToDocumentPosition(o.row,o.column);return g(u)}debugger},this.charCoords=function(e,t){if(t==\"div\"||!t){var n=this.ace.session.documentToScreenPosition(e.line,e.ch);return{left:n.column,top:n.row}}if(t==\"local\"){var r=this.ace.renderer,n=this.ace.session.documentToScreenPosition(e.line,e.ch),i=r.layerConfig.lineHeight,s=r.layerConfig.characterWidth,o=i*n.row;return{left:n.column*s,top:o,bottom:o+i}}},this.coordsChar=function(e,t){var n=this.ace.renderer;if(t==\"local\"){var r=Math.max(0,Math.floor(e.top/n.lineHeight)),i=Math.max(0,Math.floor(e.left/n.characterWidth)),s=n.session.screenToDocumentPosition(r,i);return g(s)}if(t==\"div\")throw\"not implemented\"},this.getSearchCursor=function(e,t,n){var r=!1,i=!1;e instanceof RegExp&&!e.global&&(r=!e.ignoreCase,e=e.source,i=!0);var s=new l;t.ch==undefined&&(t.ch=Number.MAX_VALUE);var o={row:t.line,column:t.ch},u=this,a=null;return{findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(t){s.setOptions({needle:e,caseSensitive:r,wrap:!1,backwards:t,regExp:i,start:a||o});var n=s.find(u.ace.session);return n&&n.isEmpty()&&u.getLine(n.start.row).length==n.start.column&&(s.$options.start=n,n=s.find(u.ace.session)),a=n,a},from:function(){return a&&g(a.start)},to:function(){return a&&g(a.end)},replace:function(e){a&&(a.end=u.ace.session.doc.replace(a,e))}}},this.scrollTo=function(e,t){var n=this.ace.renderer,r=n.layerConfig,i=r.maxHeight;i-=(n.$size.scrollerHeight-n.lineHeight)*n.$scrollPastEnd,t!=null&&this.ace.session.setScrollTop(Math.max(0,Math.min(t,i))),e!=null&&this.ace.session.setScrollLeft(Math.max(0,Math.min(e,r.width)))},this.scrollInfo=function(){return 0},this.scrollIntoView=function(e,t){if(e){var n=this.ace.renderer,r={top:0,bottom:t};n.scrollCursorIntoView(m(e),n.lineHeight*2/n.$size.scrollerHeight,r)}},this.getLine=function(e){return this.ace.session.getLine(e)},this.getRange=function(e,t){return this.ace.session.getTextRange(new i(e.line,e.ch,t.line,t.ch))},this.replaceRange=function(e,t,n){return n||(n=t),this.ace.session.replace(new i(t.line,t.ch,n.line,n.ch),e)},this.replaceSelections=function(e){var t=this.ace.selection;if(this.ace.inVirtualSelectionMode){this.ace.session.replace(t.getRange(),e[0]||\"\");return}t.inVirtualSelectionMode=!0;var n=t.rangeList.ranges;n.length||(n=[this.ace.multiSelect.getRange()]);for(var r=n.length;r--;)this.ace.session.replace(n[r],e[r]||\"\");t.inVirtualSelectionMode=!1},this.getSelection=function(){return this.ace.getSelectedText()},this.getSelections=function(){return this.listSelections().map(function(e){return this.getRange(e.anchor,e.head)},this)},this.getInputField=function(){return this.ace.textInput.getElement()},this.getWrapperElement=function(){return this.ace.container};var t={indentWithTabs:\"useSoftTabs\",indentUnit:\"tabSize\",tabSize:\"tabSize\",firstLineNumber:\"firstLineNumber\",readOnly:\"readOnly\"};this.setOption=function(e,n){this.state[e]=n;switch(e){case\"indentWithTabs\":e=t[e],n=!n;break;default:e=t[e]}e&&this.ace.setOption(e,n)},this.getOption=function(e,n){var r=t[e];r&&(n=this.ace.getOption(r));switch(e){case\"indentWithTabs\":return e=t[e],!n}return r?n:this.state[e]},this.toggleOverwrite=function(e){return this.state.overwrite=e,this.ace.setOverwrite(e)},this.addOverlay=function(e){if(!this.$searchHighlight||!this.$searchHighlight.session){var t=new h(null,\"ace_highlight-marker\",\"text\"),n=this.ace.session.addDynamicMarker(t);t.id=n.id,t.session=this.ace.session,t.destroy=function(e){t.session.off(\"change\",t.updateOnChange),t.session.off(\"changeEditor\",t.destroy),t.session.removeMarker(t.id),t.session=null},t.updateOnChange=function(e){var n=e.start.row;n==e.end.row?t.cache[n]=undefined:t.cache.splice(n,t.cache.length)},t.session.on(\"changeEditor\",t.destroy),t.session.on(\"change\",t.updateOnChange)}var r=new RegExp(e.query.source,\"gmi\");this.$searchHighlight=e.highlight=t,this.$searchHighlight.setRegexp(r),this.ace.renderer.updateBackMarkers()},this.removeOverlay=function(e){this.$searchHighlight&&this.$searchHighlight.session&&this.$searchHighlight.destroy()},this.getScrollInfo=function(){var e=this.ace.renderer,t=e.layerConfig;return{left:e.scrollLeft,top:e.scrollTop,height:t.maxHeight,width:t.width,clientHeight:t.height,clientWidth:t.width}},this.getValue=function(){return this.ace.getValue()},this.setValue=function(e){return this.ace.setValue(e)},this.getTokenTypeAt=function(e){var t=this.ace.session.getTokenAt(e.line,e.ch);return t&&/comment|string/.test(t.type)?\"string\":\"\"},this.findMatchingBracket=function(e){var t=this.ace.session.findMatchingBracket(m(e));return{to:t&&g(t)}},this.indentLine=function(e,t){t===!0?this.ace.session.indentRows(e,e,\"\t\"):t===!1&&this.ace.session.outdentRows(new i(e,0,e,0))},this.indexFromPos=function(e){return this.ace.session.doc.positionToIndex(m(e))},this.posFromIndex=function(e){return g(this.ace.session.doc.indexToPosition(e))},this.focus=function(e){return this.ace.textInput.focus()},this.blur=function(e){return this.ace.blur()},this.defaultTextHeight=function(e){return this.ace.renderer.layerConfig.lineHeight},this.scanForBracket=function(e,t,n,r){var i=r.bracketRegex.source,s=/paren|text|operator|tag/;if(t==1)var o=this.ace.session.$findClosingBracket(i.slice(1,2),m(e),s);else var o=this.ace.session.$findOpeningBracket(i.slice(-2,-1),{row:e.line,column:e.ch+1},s);return o&&{pos:g(o)}},this.refresh=function(){return this.ace.resize(!0)},this.getMode=function(){return{name:this.getOption(\"mode\")}}}.call(v.prototype);var y=v.StringStream=function(e,t){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0};y.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||undefined},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(e){var t=this.string.charAt(this.pos);if(typeof e==\"string\")var n=t==e;else var n=t&&(e.test?e.test(t):e(t));if(n)return++this.pos,t},eatWhile:function(e){var t=this.pos;while(this.eat(e));return this.pos>t},eatSpace:function(){var e=this.pos;while(/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},backUp:function(e){this.pos-=e},column:function(){throw\"not implemented\"},indentation:function(){throw\"not implemented\"},match:function(e,t,n){if(typeof e!=\"string\"){var s=this.string.slice(this.pos).match(e);return s&&s.index>0?null:(s&&t!==!1&&(this.pos+=s[0].length),s)}var r=function(e){return n?e.toLowerCase():e},i=this.string.substr(this.pos,e.length);if(r(i)==r(e))return t!==!1&&(this.pos+=e.length),!0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}}},v.defineExtension=function(e,t){v.prototype[e]=t},o.importCssString(\".normal-mode .ace_cursor{    border: none;    background-color: rgba(255,0,0,0.5);}.normal-mode .ace_hidden-cursors .ace_cursor{  background-color: transparent;  border: 1px solid red;  opacity: 0.7}.ace_dialog {  position: absolute;  left: 0; right: 0;  background: inherit;  z-index: 15;  padding: .1em .8em;  overflow: hidden;  color: inherit;}.ace_dialog-top {  border-bottom: 1px solid #444;  top: 0;}.ace_dialog-bottom {  border-top: 1px solid #444;  bottom: 0;}.ace_dialog input {  border: none;  outline: none;  background: transparent;  width: 20em;  color: inherit;  font-family: monospace;}\",\"vimMode\"),function(){function e(e,t,n){var r=e.ace.container,i;return i=r.appendChild(document.createElement(\"div\")),n?i.className=\"ace_dialog ace_dialog-bottom\":i.className=\"ace_dialog ace_dialog-top\",typeof t==\"string\"?i.innerHTML=t:i.appendChild(t),i}function t(e,t){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=t}v.defineExtension(\"openDialog\",function(n,r,i){function a(e){if(typeof e==\"string\")f.value=e;else{if(o)return;if(e&&e.type==\"blur\"&&document.activeElement===f)return;u.state.dialog=null,o=!0,s.parentNode.removeChild(s),u.focus(),i.onClose&&i.onClose(s)}}if(this.virtualSelectionMode())return;i||(i={}),t(this,null);var s=e(this,n,i.bottom),o=!1,u=this;this.state.dialog=s;var f=s.getElementsByTagName(\"input\")[0],l;if(f)i.value&&(f.value=i.value,i.selectValueOnOpen!==!1&&f.select()),i.onInput&&v.on(f,\"input\",function(e){i.onInput(e,f.value,a)}),i.onKeyUp&&v.on(f,\"keyup\",function(e){i.onKeyUp(e,f.value,a)}),v.on(f,\"keydown\",function(e){if(i&&i.onKeyDown&&i.onKeyDown(e,f.value,a))return;e.keyCode==13&&r(f.value);if(e.keyCode==27||i.closeOnEnter!==!1&&e.keyCode==13)f.blur(),v.e_stop(e),a()}),i.closeOnBlur!==!1&&v.on(f,\"blur\",a),f.focus();else if(l=s.getElementsByTagName(\"button\")[0])v.on(l,\"click\",function(){a(),u.focus()}),i.closeOnBlur!==!1&&v.on(l,\"blur\",a),l.focus();return a}),v.defineExtension(\"openNotification\",function(n,r){function a(){if(s)return;s=!0,clearTimeout(o),i.parentNode.removeChild(i)}if(this.virtualSelectionMode())return;t(this,a);var i=e(this,n,r&&r.bottom),s=!1,o,u=r&&typeof r.duration!=\"undefined\"?r.duration:5e3;return v.on(i,\"click\",function(e){v.e_preventDefault(e),a()}),u&&(o=setTimeout(a,u)),a})}();var b=[{keys:\"<Left>\",type:\"keyToKey\",toKeys:\"h\"},{keys:\"<Right>\",type:\"keyToKey\",toKeys:\"l\"},{keys:\"<Up>\",type:\"keyToKey\",toKeys:\"k\"},{keys:\"<Down>\",type:\"keyToKey\",toKeys:\"j\"},{keys:\"<Space>\",type:\"keyToKey\",toKeys:\"l\"},{keys:\"<BS>\",type:\"keyToKey\",toKeys:\"h\",context:\"normal\"},{keys:\"<C-Space>\",type:\"keyToKey\",toKeys:\"W\"},{keys:\"<C-BS>\",type:\"keyToKey\",toKeys:\"B\",context:\"normal\"},{keys:\"<S-Space>\",type:\"keyToKey\",toKeys:\"w\"},{keys:\"<S-BS>\",type:\"keyToKey\",toKeys:\"b\",context:\"normal\"},{keys:\"<C-n>\",type:\"keyToKey\",toKeys:\"j\"},{keys:\"<C-p>\",type:\"keyToKey\",toKeys:\"k\"},{keys:\"<C-[>\",type:\"keyToKey\",toKeys:\"<Esc>\"},{keys:\"<C-c>\",type:\"keyToKey\",toKeys:\"<Esc>\"},{keys:\"<C-[>\",type:\"keyToKey\",toKeys:\"<Esc>\",context:\"insert\"},{keys:\"<C-c>\",type:\"keyToKey\",toKeys:\"<Esc>\",context:\"insert\"},{keys:\"s\",type:\"keyToKey\",toKeys:\"cl\",context:\"normal\"},{keys:\"s\",type:\"keyToKey\",toKeys:\"c\",context:\"visual\"},{keys:\"S\",type:\"keyToKey\",toKeys:\"cc\",context:\"normal\"},{keys:\"S\",type:\"keyToKey\",toKeys:\"VdO\",context:\"visual\"},{keys:\"<Home>\",type:\"keyToKey\",toKeys:\"0\"},{keys:\"<End>\",type:\"keyToKey\",toKeys:\"$\"},{keys:\"<PageUp>\",type:\"keyToKey\",toKeys:\"<C-b>\"},{keys:\"<PageDown>\",type:\"keyToKey\",toKeys:\"<C-f>\"},{keys:\"<CR>\",type:\"keyToKey\",toKeys:\"j^\",context:\"normal\"},{keys:\"<Ins>\",type:\"action\",action:\"toggleOverwrite\",context:\"insert\"},{keys:\"H\",type:\"motion\",motion:\"moveToTopLine\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\"M\",type:\"motion\",motion:\"moveToMiddleLine\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\"L\",type:\"motion\",motion:\"moveToBottomLine\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\"h\",type:\"motion\",motion:\"moveByCharacters\",motionArgs:{forward:!1}},{keys:\"l\",type:\"motion\",motion:\"moveByCharacters\",motionArgs:{forward:!0}},{keys:\"j\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!0,linewise:!0}},{keys:\"k\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!1,linewise:!0}},{keys:\"gj\",type:\"motion\",motion:\"moveByDisplayLines\",motionArgs:{forward:!0}},{keys:\"gk\",type:\"motion\",motion:\"moveByDisplayLines\",motionArgs:{forward:!1}},{keys:\"w\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!1}},{keys:\"W\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!1,bigWord:!0}},{keys:\"e\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!0,inclusive:!0}},{keys:\"E\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\"b\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!1}},{keys:\"B\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!1,bigWord:!0}},{keys:\"ge\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!0,inclusive:!0}},{keys:\"gE\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\"{\",type:\"motion\",motion:\"moveByParagraph\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\"}\",type:\"motion\",motion:\"moveByParagraph\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\"<C-f>\",type:\"motion\",motion:\"moveByPage\",motionArgs:{forward:!0}},{keys:\"<C-b>\",type:\"motion\",motion:\"moveByPage\",motionArgs:{forward:!1}},{keys:\"<C-d>\",type:\"motion\",motion:\"moveByScroll\",motionArgs:{forward:!0,explicitRepeat:!0}},{keys:\"<C-u>\",type:\"motion\",motion:\"moveByScroll\",motionArgs:{forward:!1,explicitRepeat:!0}},{keys:\"gg\",type:\"motion\",motion:\"moveToLineOrEdgeOfDocument\",motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\"G\",type:\"motion\",motion:\"moveToLineOrEdgeOfDocument\",motionArgs:{forward:!0,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\"0\",type:\"motion\",motion:\"moveToStartOfLine\"},{keys:\"^\",type:\"motion\",motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\"+\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!0,toFirstChar:!0}},{keys:\"-\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!1,toFirstChar:!0}},{keys:\"_\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!0,toFirstChar:!0,repeatOffset:-1}},{keys:\"$\",type:\"motion\",motion:\"moveToEol\",motionArgs:{inclusive:!0}},{keys:\"%\",type:\"motion\",motion:\"moveToMatchedSymbol\",motionArgs:{inclusive:!0,toJumplist:!0}},{keys:\"f<character>\",type:\"motion\",motion:\"moveToCharacter\",motionArgs:{forward:!0,inclusive:!0}},{keys:\"F<character>\",type:\"motion\",motion:\"moveToCharacter\",motionArgs:{forward:!1}},{keys:\"t<character>\",type:\"motion\",motion:\"moveTillCharacter\",motionArgs:{forward:!0,inclusive:!0}},{keys:\"T<character>\",type:\"motion\",motion:\"moveTillCharacter\",motionArgs:{forward:!1}},{keys:\";\",type:\"motion\",motion:\"repeatLastCharacterSearch\",motionArgs:{forward:!0}},{keys:\",\",type:\"motion\",motion:\"repeatLastCharacterSearch\",motionArgs:{forward:!1}},{keys:\"'<character>\",type:\"motion\",motion:\"goToMark\",motionArgs:{toJumplist:!0,linewise:!0}},{keys:\"`<character>\",type:\"motion\",motion:\"goToMark\",motionArgs:{toJumplist:!0}},{keys:\"]`\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!0}},{keys:\"[`\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!1}},{keys:\"]'\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!0,linewise:!0}},{keys:\"['\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!1,linewise:!0}},{keys:\"]p\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!0,isEdit:!0,matchIndent:!0}},{keys:\"[p\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!1,isEdit:!0,matchIndent:!0}},{keys:\"]<character>\",type:\"motion\",motion:\"moveToSymbol\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\"[<character>\",type:\"motion\",motion:\"moveToSymbol\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\"|\",type:\"motion\",motion:\"moveToColumn\"},{keys:\"o\",type:\"motion\",motion:\"moveToOtherHighlightedEnd\",context:\"visual\"},{keys:\"O\",type:\"motion\",motion:\"moveToOtherHighlightedEnd\",motionArgs:{sameLine:!0},context:\"visual\"},{keys:\"d\",type:\"operator\",operator:\"delete\"},{keys:\"y\",type:\"operator\",operator:\"yank\"},{keys:\"c\",type:\"operator\",operator:\"change\"},{keys:\">\",type:\"operator\",operator:\"indent\",operatorArgs:{indentRight:!0}},{keys:\"<\",type:\"operator\",operator:\"indent\",operatorArgs:{indentRight:!1}},{keys:\"g~\",type:\"operator\",operator:\"changeCase\"},{keys:\"gu\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!0},isEdit:!0},{keys:\"gU\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!1},isEdit:!0},{keys:\"n\",type:\"motion\",motion:\"findNext\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\"N\",type:\"motion\",motion:\"findNext\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\"x\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveByCharacters\",motionArgs:{forward:!0},operatorMotionArgs:{visualLine:!1}},{keys:\"X\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveByCharacters\",motionArgs:{forward:!1},operatorMotionArgs:{visualLine:!0}},{keys:\"D\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveToEol\",motionArgs:{inclusive:!0},context:\"normal\"},{keys:\"D\",type:\"operator\",operator:\"delete\",operatorArgs:{linewise:!0},context:\"visual\"},{keys:\"Y\",type:\"operatorMotion\",operator:\"yank\",motion:\"moveToEol\",motionArgs:{inclusive:!0},context:\"normal\"},{keys:\"Y\",type:\"operator\",operator:\"yank\",operatorArgs:{linewise:!0},context:\"visual\"},{keys:\"C\",type:\"operatorMotion\",operator:\"change\",motion:\"moveToEol\",motionArgs:{inclusive:!0},context:\"normal\"},{keys:\"C\",type:\"operator\",operator:\"change\",operatorArgs:{linewise:!0},context:\"visual\"},{keys:\"~\",type:\"operatorMotion\",operator:\"changeCase\",motion:\"moveByCharacters\",motionArgs:{forward:!0},operatorArgs:{shouldMoveCursor:!0},context:\"normal\"},{keys:\"~\",type:\"operator\",operator:\"changeCase\",context:\"visual\"},{keys:\"<C-w>\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!1},context:\"insert\"},{keys:\"<C-i>\",type:\"action\",action:\"jumpListWalk\",actionArgs:{forward:!0}},{keys:\"<C-o>\",type:\"action\",action:\"jumpListWalk\",actionArgs:{forward:!1}},{keys:\"<C-e>\",type:\"action\",action:\"scroll\",actionArgs:{forward:!0,linewise:!0}},{keys:\"<C-y>\",type:\"action\",action:\"scroll\",actionArgs:{forward:!1,linewise:!0}},{keys:\"a\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"charAfter\"},context:\"normal\"},{keys:\"A\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"eol\"},context:\"normal\"},{keys:\"A\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"endOfSelectedArea\"},context:\"visual\"},{keys:\"i\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"inplace\"},context:\"normal\"},{keys:\"I\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"firstNonBlank\"},context:\"normal\"},{keys:\"I\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"startOfSelectedArea\"},context:\"visual\"},{keys:\"o\",type:\"action\",action:\"newLineAndEnterInsertMode\",isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!0},context:\"normal\"},{keys:\"O\",type:\"action\",action:\"newLineAndEnterInsertMode\",isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!1},context:\"normal\"},{keys:\"v\",type:\"action\",action:\"toggleVisualMode\"},{keys:\"V\",type:\"action\",action:\"toggleVisualMode\",actionArgs:{linewise:!0}},{keys:\"<C-v>\",type:\"action\",action:\"toggleVisualMode\",actionArgs:{blockwise:!0}},{keys:\"<C-q>\",type:\"action\",action:\"toggleVisualMode\",actionArgs:{blockwise:!0}},{keys:\"gv\",type:\"action\",action:\"reselectLastSelection\"},{keys:\"J\",type:\"action\",action:\"joinLines\",isEdit:!0},{keys:\"p\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!0,isEdit:!0}},{keys:\"P\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!1,isEdit:!0}},{keys:\"r<character>\",type:\"action\",action:\"replace\",isEdit:!0},{keys:\"@<character>\",type:\"action\",action:\"replayMacro\"},{keys:\"q<character>\",type:\"action\",action:\"enterMacroRecordMode\"},{keys:\"R\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{replace:!0}},{keys:\"u\",type:\"action\",action:\"undo\",context:\"normal\"},{keys:\"u\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!0},context:\"visual\",isEdit:!0},{keys:\"U\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!1},context:\"visual\",isEdit:!0},{keys:\"<C-r>\",type:\"action\",action:\"redo\"},{keys:\"m<character>\",type:\"action\",action:\"setMark\"},{keys:'\"<character>',type:\"action\",action:\"setRegister\"},{keys:\"zz\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"center\"}},{keys:\"z.\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"center\"},motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\"zt\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"top\"}},{keys:\"z<CR>\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"top\"},motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\"z-\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"bottom\"}},{keys:\"zb\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"bottom\"},motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\".\",type:\"action\",action:\"repeatLastEdit\"},{keys:\"<C-a>\",type:\"action\",action:\"incrementNumberToken\",isEdit:!0,actionArgs:{increase:!0,backtrack:!1}},{keys:\"<C-x>\",type:\"action\",action:\"incrementNumberToken\",isEdit:!0,actionArgs:{increase:!1,backtrack:!1}},{keys:\"<C-t>\",type:\"action\",action:\"indent\",actionArgs:{indentRight:!0},context:\"insert\"},{keys:\"<C-d>\",type:\"action\",action:\"indent\",actionArgs:{indentRight:!1},context:\"insert\"},{keys:\"a<character>\",type:\"motion\",motion:\"textObjectManipulation\"},{keys:\"i<character>\",type:\"motion\",motion:\"textObjectManipulation\",motionArgs:{textObjectInner:!0}},{keys:\"/\",type:\"search\",searchArgs:{forward:!0,querySrc:\"prompt\",toJumplist:!0}},{keys:\"?\",type:\"search\",searchArgs:{forward:!1,querySrc:\"prompt\",toJumplist:!0}},{keys:\"*\",type:\"search\",searchArgs:{forward:!0,querySrc:\"wordUnderCursor\",wholeWordOnly:!0,toJumplist:!0}},{keys:\"#\",type:\"search\",searchArgs:{forward:!1,querySrc:\"wordUnderCursor\",wholeWordOnly:!0,toJumplist:!0}},{keys:\"g*\",type:\"search\",searchArgs:{forward:!0,querySrc:\"wordUnderCursor\",toJumplist:!0}},{keys:\"g#\",type:\"search\",searchArgs:{forward:!1,querySrc:\"wordUnderCursor\",toJumplist:!0}},{keys:\":\",type:\"ex\"}],w=[{name:\"colorscheme\",shortName:\"colo\"},{name:\"map\"},{name:\"imap\",shortName:\"im\"},{name:\"nmap\",shortName:\"nm\"},{name:\"vmap\",shortName:\"vm\"},{name:\"unmap\"},{name:\"write\",shortName:\"w\"},{name:\"undo\",shortName:\"u\"},{name:\"redo\",shortName:\"red\"},{name:\"set\",shortName:\"se\"},{name:\"set\",shortName:\"se\"},{name:\"setlocal\",shortName:\"setl\"},{name:\"setglobal\",shortName:\"setg\"},{name:\"sort\",shortName:\"sor\"},{name:\"substitute\",shortName:\"s\",possiblyAsync:!0},{name:\"nohlsearch\",shortName:\"noh\"},{name:\"yank\",shortName:\"y\"},{name:\"delmarks\",shortName:\"delm\"},{name:\"registers\",shortName:\"reg\",excludeFromCommandHistory:!0},{name:\"global\",shortName:\"g\"}],E=v.Pos,S=function(){return st};v.defineOption(\"vimMode\",!1,function(e,t,n){t&&e.getOption(\"keyMap\")!=\"vim\"?e.setOption(\"keyMap\",\"vim\"):!t&&n!=v.Init&&/^vim/.test(e.getOption(\"keyMap\"))&&e.setOption(\"keyMap\",\"default\")});var L={Shift:\"S\",Ctrl:\"C\",Alt:\"A\",Cmd:\"D\",Mod:\"A\"},A={Enter:\"CR\",Backspace:\"BS\",Delete:\"Del\",Insert:\"Ins\"},_=/[\\d]/,D=[v.isWordChar,function(e){return e&&!v.isWordChar(e)&&!/\\s/.test(e)}],P=[function(e){return/\\S/.test(e)}],B=H(65,26),j=H(97,26),F=H(48,10),I=[].concat(B,j,F,[\"<\",\">\"]),q=[].concat(B,j,F,[\"-\",'\"',\".\",\":\",\"/\"]),J={};K(\"filetype\",undefined,\"string\",[\"ft\"],function(e,t){if(t===undefined)return;if(e===undefined){var n=t.getOption(\"mode\");return n==\"null\"?\"\":n}var n=e==\"\"?\"null\":e;t.setOption(\"mode\",n)});var Y=function(){function s(s,o,u){function l(n){var r=++t%e,o=i[r];o&&o.clear(),i[r]=s.setBookmark(n)}var a=t%e,f=i[a];if(f){var c=f.find();c&&!At(c,o)&&l(o)}else l(o);l(u),n=t,r=t-e+1,r<0&&(r=0)}function o(s,o){t+=o,t>n?t=n:t<r&&(t=r);var u=i[(e+t)%e];if(u&&!u.find()){var a=o>0?1:-1,f,l=s.getCursor();do{t+=a,u=i[(e+t)%e];if(u&&(f=u.find())&&!At(l,f))break}while(t<n&&t>r)}return u}var e=100,t=-1,n=0,r=0,i=new Array(e);return{cachedCursor:undefined,add:s,move:o}},Z=function(e){return e?{changes:e.changes,expectCursorActivityForChange:e.expectCursorActivityForChange}:{changes:[],expectCursorActivityForChange:!1}};et.prototype={exitMacroRecordMode:function(){var e=nt.macroModeState;e.onRecordingDone&&e.onRecordingDone(),e.onRecordingDone=undefined,e.isRecording=!1},enterMacroRecordMode:function(e,t){var n=nt.registerController.getRegister(t);n&&(n.clear(),this.latestRegister=t,e.openDialog&&(this.onRecordingDone=e.openDialog(\"(recording)[\"+t+\"]\",null,{bottom:!0})),this.isRecording=!0)}};var nt,it,st={buildKeyMap:function(){},getRegisterController:function(){return nt.registerController},resetVimGlobalState_:rt,getVimGlobalState_:function(){return nt},maybeInitVimState_:tt,suppressErrorLogging:!1,InsertModeKey:er,map:function(e,t,n){Rn.map(e,t,n)},unmap:function(e,t){Rn.unmap(e,t)},setOption:Q,getOption:G,defineOption:K,defineEx:function(e,t,n){if(!t)t=e;else if(e.indexOf(t)!==0)throw new Error('(Vim.defineEx) \"'+t+'\" is not a prefix of \"'+e+'\", command not registered');qn[e]=n,Rn.commandMap_[t]={name:e,shortName:t,type:\"api\"}},handleKey:function(e,t,n){var r=this.findKey(e,t,n);if(typeof r==\"function\")return r()},findKey:function(e,t,n){function i(){var r=nt.macroModeState;if(r.isRecording){if(t==\"q\")return r.exitMacroRecordMode(),ut(e),!0;n!=\"mapping\"&&$n(r,t)}}function s(){if(t==\"<Esc>\")return ut(e),r.visualMode?$t(e):r.insertMode&&zn(e),!0}function o(n){var r;while(n)r=/<\\w+-.+?>|<\\w+>|./.exec(n),t=r[0],n=n.substring(r.index+t.length),v.Vim.handleKey(e,t,\"mapping\")}function u(){if(s())return!0;var n=r.inputState.keyBuffer=r.inputState.keyBuffer+t,i=t.length==1,o=ht.matchCommand(n,b,r.inputState,\"insert\");while(n.length>1&&o.type!=\"full\"){var n=r.inputState.keyBuffer=n.slice(1),u=ht.matchCommand(n,b,r.inputState,\"insert\");u.type!=\"none\"&&(o=u)}if(o.type==\"none\")return ut(e),!1;if(o.type==\"partial\")return it&&window.clearTimeout(it),it=window.setTimeout(function(){r.insertMode&&r.inputState.keyBuffer&&ut(e)},G(\"insertModeEscKeysTimeout\")),!i;it&&window.clearTimeout(it);if(i){var a=e.listSelections();for(var f=0;f<a.length;f++){var l=a[f].head;e.replaceRange(\"\",St(l,0,-(n.length-1)),l,\"+input\")}nt.macroModeState.lastInsertModeChanges.changes.pop()}return ut(e),o.command}function a(){if(i()||s())return!0;var n=r.inputState.keyBuffer=r.inputState.keyBuffer+t;if(/^[1-9]\\d*$/.test(n))return!0;var o=/^(\\d*)(.*)$/.exec(n);if(!o)return ut(e),!1;var u=r.visualMode?\"visual\":\"normal\",a=ht.matchCommand(o[2]||o[1],b,r.inputState,u);if(a.type==\"none\")return ut(e),!1;if(a.type==\"partial\")return!0;r.inputState.keyBuffer=\"\";var o=/^(\\d*)(.*)$/.exec(n);return o[1]&&o[1]!=\"0\"&&r.inputState.pushRepeatDigit(o[1]),a.command}var r=tt(e),f;return r.insertMode?f=u():f=a(),f===!1?undefined:f===!0?function(){return!0}:function(){if((f.operator||f.isEdit)&&e.getOption(\"readOnly\"))return;return e.operation(function(){e.curOp.isVimOp=!0;try{f.type==\"keyToKey\"?o(f.toKeys):ht.processCommand(e,r,f)}catch(t){throw e.state.vim=undefined,tt(e),v.Vim.suppressErrorLogging||console.log(t),t}return!0})}},handleEx:function(e,t){Rn.processCommand(e,t)},defineMotion:dt,defineAction:bt,defineOperator:gt,mapCommand:Xn,_mapCommand:Wn,defineRegister:ft,exitVisualMode:$t,exitInsertMode:zn};ot.prototype.pushRepeatDigit=function(e){this.operator?this.motionRepeat=this.motionRepeat.concat(e):this.prefixRepeat=this.prefixRepeat.concat(e)},ot.prototype.getRepeat=function(){var e=0;if(this.prefixRepeat.length>0||this.motionRepeat.length>0)e=1,this.prefixRepeat.length>0&&(e*=parseInt(this.prefixRepeat.join(\"\"),10)),this.motionRepeat.length>0&&(e*=parseInt(this.motionRepeat.join(\"\"),10));return e},at.prototype={setText:function(e,t,n){this.keyBuffer=[e||\"\"],this.linewise=!!t,this.blockwise=!!n},pushText:function(e,t){t&&(this.linewise||this.keyBuffer.push(\"\\n\"),this.linewise=!0),this.keyBuffer.push(e)},pushInsertModeChanges:function(e){this.insertModeChanges.push(Z(e))},pushSearchQuery:function(e){this.searchQueries.push(e)},clear:function(){this.keyBuffer=[],this.insertModeChanges=[],this.searchQueries=[],this.linewise=!1},toString:function(){return this.keyBuffer.join(\"\")}},lt.prototype={pushText:function(e,t,n,r,i){r&&n.charAt(n.length-1)!==\"\\n\"&&(n+=\"\\n\");var s=this.isValidRegister(e)?this.getRegister(e):null;if(!s){switch(t){case\"yank\":this.registers[0]=new at(n,r,i);break;case\"delete\":case\"change\":n.indexOf(\"\\n\")==-1?this.registers[\"-\"]=new at(n,r):(this.shiftNumericRegisters_(),this.registers[1]=new at(n,r))}this.unnamedRegister.setText(n,r,i);return}var o=X(e);o?s.pushText(n,r):s.setText(n,r,i),this.unnamedRegister.setText(s.toString(),r)},getRegister:function(e){return this.isValidRegister(e)?(e=e.toLowerCase(),this.registers[e]||(this.registers[e]=new at),this.registers[e]):this.unnamedRegister},isValidRegister:function(e){return e&&$(e,q)},shiftNumericRegisters_:function(){for(var e=9;e>=2;e--)this.registers[e]=this.getRegister(\"\"+(e-1))}},ct.prototype={nextMatch:function(e,t){var n=this.historyBuffer,r=t?-1:1;this.initialPrefix===null&&(this.initialPrefix=e);for(var i=this.iterator+r;t?i>=0:i<n.length;i+=r){var s=n[i];for(var o=0;o<=s.length;o++)if(this.initialPrefix==s.substring(0,o))return this.iterator=i,s}if(i>=n.length)return this.iterator=n.length,this.initialPrefix;if(i<0)return e},pushInput:function(e){var t=this.historyBuffer.indexOf(e);t>-1&&this.historyBuffer.splice(t,1),e.length&&this.historyBuffer.push(e)},reset:function(){this.initialPrefix=null,this.iterator=this.historyBuffer.length}};var ht={matchCommand:function(e,t,n,r){var i=Tt(e,t,r,n);if(!i.full&&!i.partial)return{type:\"none\"};if(!i.full&&i.partial)return{type:\"partial\"};var s;for(var o=0;o<i.full.length;o++){var u=i.full[o];s||(s=u)}if(s.keys.slice(-11)==\"<character>\"){var a=Ct(e);if(/<C-.>/.test(a))return{type:\"none\"};n.selectedCharacter=a}return{type:\"full\",command:s}},processCommand:function(e,t,n){t.inputState.repeatOverride=n.repeatOverride;switch(n.type){case\"motion\":this.processMotion(e,t,n);break;case\"operator\":this.processOperator(e,t,n);break;case\"operatorMotion\":this.processOperatorMotion(e,t,n);break;case\"action\":this.processAction(e,t,n);break;case\"search\":this.processSearch(e,t,n);break;case\"ex\":case\"keyToEx\":this.processEx(e,t,n);break;default:}},processMotion:function(e,t,n){t.inputState.motion=n.motion,t.inputState.motionArgs=Et(n.motionArgs),this.evalInput(e,t)},processOperator:function(e,t,n){var r=t.inputState;if(r.operator){if(r.operator==n.operator){r.motion=\"expandToLine\",r.motionArgs={linewise:!0},this.evalInput(e,t);return}ut(e)}r.operator=n.operator,r.operatorArgs=Et(n.operatorArgs),t.visualMode&&this.evalInput(e,t)},processOperatorMotion:function(e,t,n){var r=t.visualMode,i=Et(n.operatorMotionArgs);i&&r&&i.visualLine&&(t.visualLine=!0),this.processOperator(e,t,n),r||this.processMotion(e,t,n)},processAction:function(e,t,n){var r=t.inputState,i=r.getRepeat(),s=!!i,o=Et(n.actionArgs)||{};r.selectedCharacter&&(o.selectedCharacter=r.selectedCharacter),n.operator&&this.processOperator(e,t,n),n.motion&&this.processMotion(e,t,n),(n.motion||n.operator)&&this.evalInput(e,t),o.repeat=i||1,o.repeatIsExplicit=s,o.registerName=r.registerName,ut(e),t.lastMotion=null,n.isEdit&&this.recordLastEdit(t,r,n),yt[n.action](e,o,t)},processSearch:function(e,t,n){function a(r,i,s){nt.searchHistoryController.pushInput(r),nt.searchHistoryController.reset();try{Mn(e,r,i,s)}catch(o){Cn(e,\"Invalid regex: \"+r),ut(e);return}ht.processMotion(e,t,{type:\"motion\",motion:\"findNext\",motionArgs:{forward:!0,toJumplist:n.searchArgs.toJumplist}})}function f(e){a(e,!0,!0);var t=nt.macroModeState;t.isRecording&&Kn(t,e)}function l(t,n,i){var s=v.keyName(t),o,a;s==\"Up\"||s==\"Down\"?(o=s==\"Up\"?!0:!1,a=t.target?t.target.selectionEnd:0,n=nt.searchHistoryController.nextMatch(n,o)||\"\",i(n),a&&t.target&&(t.target.selectionEnd=t.target.selectionStart=Math.min(a,t.target.value.length))):s!=\"Left\"&&s!=\"Right\"&&s!=\"Ctrl\"&&s!=\"Alt\"&&s!=\"Shift\"&&nt.searchHistoryController.reset();var f;try{f=Mn(e,n,!0,!0)}catch(t){}f?e.scrollIntoView(Pn(e,!r,f),30):(Hn(e),e.scrollTo(u.left,u.top))}function c(t,n,r){var i=v.keyName(t);i==\"Esc\"||i==\"Ctrl-C\"||i==\"Ctrl-[\"||i==\"Backspace\"&&n==\"\"?(nt.searchHistoryController.pushInput(n),nt.searchHistoryController.reset(),Mn(e,o),Hn(e),e.scrollTo(u.left,u.top),v.e_stop(t),ut(e),r(),e.focus()):i==\"Up\"||i==\"Down\"?v.e_stop(t):i==\"Ctrl-U\"&&(v.e_stop(t),r(\"\"))}if(!e.getSearchCursor)return;var r=n.searchArgs.forward,i=n.searchArgs.wholeWordOnly;dn(e).setReversed(!r);var s=r?\"/\":\"?\",o=dn(e).getQuery(),u=e.getScrollInfo();switch(n.searchArgs.querySrc){case\"prompt\":var h=nt.macroModeState;if(h.isPlaying){var p=h.replaySearchQueries.shift();a(p,!0,!1)}else An(e,{onClose:f,prefix:s,desc:Ln,onKeyUp:l,onKeyDown:c});break;case\"wordUnderCursor\":var d=Gt(e,!1,!0,!1,!0),m=!0;d||(d=Gt(e,!1,!0,!1,!1),m=!1);if(!d)return;var p=e.getLine(d.start.line).substring(d.start.ch,d.end.ch);m&&i?p=\"\\\\b\"+p+\"\\\\b\":p=Bt(p),nt.jumpList.cachedCursor=e.getCursor(),e.setCursor(d.start),a(p,!0,!1)}},processEx:function(e,t,n){function r(t){nt.exCommandHistoryController.pushInput(t),nt.exCommandHistoryController.reset(),Rn.processCommand(e,t)}function i(t,n,r){var i=v.keyName(t),s,o;if(i==\"Esc\"||i==\"Ctrl-C\"||i==\"Ctrl-[\"||i==\"Backspace\"&&n==\"\")nt.exCommandHistoryController.pushInput(n),nt.exCommandHistoryController.reset(),v.e_stop(t),ut(e),r(),e.focus();i==\"Up\"||i==\"Down\"?(v.e_stop(t),s=i==\"Up\"?!0:!1,o=t.target?t.target.selectionEnd:0,n=nt.exCommandHistoryController.nextMatch(n,s)||\"\",r(n),o&&t.target&&(t.target.selectionEnd=t.target.selectionStart=Math.min(o,t.target.value.length))):i==\"Ctrl-U\"?(v.e_stop(t),r(\"\")):i!=\"Left\"&&i!=\"Right\"&&i!=\"Ctrl\"&&i!=\"Alt\"&&i!=\"Shift\"&&nt.exCommandHistoryController.reset()}n.type==\"keyToEx\"?Rn.processCommand(e,n.exArgs.input):t.visualMode?An(e,{onClose:r,prefix:\":\",value:\"'<,'>\",onKeyDown:i,selectValueOnOpen:!1}):An(e,{onClose:r,prefix:\":\",onKeyDown:i})},evalInput:function(e,t){var n=t.inputState,r=n.motion,i=n.motionArgs||{},s=n.operator,o=n.operatorArgs||{},u=n.registerName,a=t.sel,f=Lt(t.visualMode?wt(e,a.head):e.getCursor(\"head\")),l=Lt(t.visualMode?wt(e,a.anchor):e.getCursor(\"anchor\")),c=Lt(f),h=Lt(l),p,d,v;s&&this.recordLastEdit(t,n),n.repeatOverride!==undefined?v=n.repeatOverride:v=n.getRepeat();if(v>0&&i.explicitRepeat)i.repeatIsExplicit=!0;else if(i.noRepeat||!i.explicitRepeat&&v===0)v=1,i.repeatIsExplicit=!1;n.selectedCharacter&&(i.selectedCharacter=o.selectedCharacter=n.selectedCharacter),i.repeat=v,ut(e);if(r){var m=pt[r](e,f,i,t);t.lastMotion=pt[r];if(!m)return;if(i.toJumplist){!s&&e.ace.curOp!=null&&(e.ace.curOp.command.scrollIntoView=\"center-animate\");var g=nt.jumpList,y=g.cachedCursor;y?(Yt(e,y,m),delete g.cachedCursor):Yt(e,f,m)}m instanceof Array?(d=m[0],p=m[1]):p=m,p||(p=Lt(f));if(t.visualMode){if(!t.visualBlock||p.ch!==Infinity)p=wt(e,p,t.visualBlock);d&&(d=wt(e,d,!0)),d=d||h,a.anchor=d,a.head=p,Wt(e),an(e,t,\"<\",Ot(d,p)?d:p),an(e,t,\">\",Ot(d,p)?p:d)}else s||(p=wt(e,p),e.setCursor(p.line,p.ch))}if(s){if(o.lastSel){d=h;var b=o.lastSel,w=Math.abs(b.head.line-b.anchor.line),S=Math.abs(b.head.ch-b.anchor.ch);b.visualLine?p=E(h.line+w,h.ch):b.visualBlock?p=E(h.line+w,h.ch+S):b.head.line==b.anchor.line?p=E(h.line,h.ch+S):p=E(h.line+w,h.ch),t.visualMode=!0,t.visualLine=b.visualLine,t.visualBlock=b.visualBlock,a=t.sel={anchor:d,head:p},Wt(e)}else t.visualMode&&(o.lastSel={anchor:Lt(a.anchor),head:Lt(a.head),visualBlock:t.visualBlock,visualLine:t.visualLine});var x,T,N,C,k;if(t.visualMode){x=Mt(a.head,a.anchor),T=_t(a.head,a.anchor),N=t.visualLine||o.linewise,C=t.visualBlock?\"block\":N?\"line\":\"char\",k=Xt(e,{anchor:x,head:T},C);if(N){var L=k.ranges;if(C==\"block\")for(var A=0;A<L.length;A++)L[A].head.ch=Pt(e,L[A].head.line);else C==\"line\"&&(L[0].head=E(L[0].head.line+1,0))}}else{x=Lt(d||h),T=Lt(p||c);if(Ot(T,x)){var O=x;x=T,T=O}N=i.linewise||o.linewise,N?Kt(e,x,T):i.forward&&Jt(e,x,T),C=\"char\";var M=!i.inclusive||N;k=Xt(e,{anchor:x,head:T},C,M)}e.setSelections(k.ranges,k.primary),t.lastMotion=null,o.repeat=v,o.registerName=u,o.linewise=N;var _=mt[s](e,o,k.ranges,h,p);t.visualMode&&$t(e,_!=null),_&&e.setCursor(_)}},recordLastEdit:function(e,t,n){var r=nt.macroModeState;if(r.isPlaying)return;e.lastEditInputState=t,e.lastEditActionCommand=n,r.lastInsertModeChanges.changes=[],r.lastInsertModeChanges.expectCursorActivityForChange=!1}},pt={moveToTopLine:function(e,t,n){var r=jn(e).top+n.repeat-1;return E(r,Qt(e.getLine(r)))},moveToMiddleLine:function(e){var t=jn(e),n=Math.floor((t.top+t.bottom)*.5);return E(n,Qt(e.getLine(n)))},moveToBottomLine:function(e,t,n){var r=jn(e).bottom-n.repeat+1;return E(r,Qt(e.getLine(r)))},expandToLine:function(e,t,n){var r=t;return E(r.line+n.repeat-1,Infinity)},findNext:function(e,t,n){var r=dn(e),i=r.getQuery();if(!i)return;var s=!n.forward;return s=r.isReversed()?!s:s,Dn(e,i),Pn(e,s,i,n.repeat)},goToMark:function(e,t,n,r){var i=Fn(e,r,n.selectedCharacter);return i?n.linewise?{line:i.line,ch:Qt(e.getLine(i.line))}:i:null},moveToOtherHighlightedEnd:function(e,t,n,r){if(r.visualBlock&&n.sameLine){var i=r.sel;return[wt(e,E(i.anchor.line,i.head.ch)),wt(e,E(i.head.line,i.anchor.ch))]}return[r.sel.head,r.sel.anchor]},jumpToMark:function(e,t,n,r){var i=t;for(var s=0;s<n.repeat;s++){var o=i;for(var u in r.marks){if(!U(u))continue;var a=r.marks[u].find(),f=n.forward?Ot(a,o):Ot(o,a);if(f)continue;if(n.linewise&&a.line==o.line)continue;var l=At(o,i),c=n.forward?Dt(o,a,i):Dt(i,a,o);if(l||c)i=a}}return n.linewise&&(i=E(i.line,Qt(e.getLine(i.line)))),i},moveByCharacters:function(e,t,n){var r=t,i=n.repeat,s=n.forward?r.ch+i:r.ch-i;return E(r.line,s)},moveByLines:function(e,t,n,r){var i=t,s=i.ch;switch(r.lastMotion){case this.moveByLines:case this.moveByDisplayLines:case this.moveByScroll:case this.moveToColumn:case this.moveToEol:s=r.lastHPos;break;default:r.lastHPos=s}var o=n.repeat+(n.repeatOffset||0),u=n.forward?i.line+o:i.line-o,a=e.firstLine(),f=e.lastLine();if(u<a&&i.line==a)return this.moveToStartOfLine(e,t,n,r);if(u>f&&i.line==f)return this.moveToEol(e,t,n,r);var l=e.ace.session.getFoldLine(u);return l&&(n.forward?u>l.start.row&&(u=l.end.row+1):u=l.start.row),n.toFirstChar&&(s=Qt(e.getLine(u)),r.lastHPos=s),r.lastHSPos=e.charCoords(E(u,s),\"div\").left,E(u,s)},moveByDisplayLines:function(e,t,n,r){var i=t;switch(r.lastMotion){case this.moveByDisplayLines:case this.moveByScroll:case this.moveByLines:case this.moveToColumn:case this.moveToEol:break;default:r.lastHSPos=e.charCoords(i,\"div\").left}var s=n.repeat,o=e.findPosV(i,n.forward?s:-s,\"line\",r.lastHSPos);if(o.hitSide)if(n.forward)var u=e.charCoords(o,\"div\"),a={top:u.top+8,left:r.lastHSPos},o=e.coordsChar(a,\"div\");else{var f=e.charCoords(E(e.firstLine(),0),\"div\");f.left=r.lastHSPos,o=e.coordsChar(f,\"div\")}return r.lastHPos=o.ch,o},moveByPage:function(e,t,n){var r=t,i=n.repeat;return e.findPosV(r,n.forward?i:-i,\"page\")},moveByParagraph:function(e,t,n){var r=n.forward?1:-1;return ln(e,t,n.repeat,r)},moveByScroll:function(e,t,n,r){var i=e.getScrollInfo(),s=null,o=n.repeat;o||(o=i.clientHeight/(2*e.defaultTextHeight()));var u=e.charCoords(t,\"local\");n.repeat=o;var s=pt.moveByDisplayLines(e,t,n,r);if(!s)return null;var a=e.charCoords(s,\"local\");return e.scrollTo(null,i.top+a.top-u.top),s},moveByWords:function(e,t,n){return sn(e,t,n.repeat,!!n.forward,!!n.wordEnd,!!n.bigWord)},moveTillCharacter:function(e,t,n){var r=n.repeat,i=on(e,r,n.forward,n.selectedCharacter),s=n.forward?-1:1;return Zt(s,n),i?(i.ch+=s,i):null},moveToCharacter:function(e,t,n){var r=n.repeat;return Zt(0,n),on(e,r,n.forward,n.selectedCharacter)||t},moveToSymbol:function(e,t,n){var r=n.repeat;return nn(e,r,n.forward,n.selectedCharacter)||t},moveToColumn:function(e,t,n,r){var i=n.repeat;return r.lastHPos=i-1,r.lastHSPos=e.charCoords(t,\"div\").left,un(e,i)},moveToEol:function(e,t,n,r){var i=t;r.lastHPos=Infinity;var s=E(i.line+n.repeat-1,Infinity),o=e.clipPos(s);return o.ch--,r.lastHSPos=e.charCoords(o,\"div\").left,s},moveToFirstNonWhiteSpaceCharacter:function(e,t){var n=t;return E(n.line,Qt(e.getLine(n.line)))},moveToMatchedSymbol:function(e,t){var n=t,r=n.line,i=n.ch,s=e.getLine(r),o;do{o=s.charAt(i++);if(o&&z(o)){var u=e.getTokenTypeAt(E(r,i));if(u!==\"string\"&&u!==\"comment\")break}}while(o);if(o){var a=e.findMatchingBracket(E(r,i));return a.to}return n},moveToStartOfLine:function(e,t){return E(t.line,0)},moveToLineOrEdgeOfDocument:function(e,t,n){var r=n.forward?e.lastLine():e.firstLine();return n.repeatIsExplicit&&(r=n.repeat-e.getOption(\"firstLineNumber\")),E(r,Qt(e.getLine(r)))},textObjectManipulation:function(e,t,n,r){var i={\"(\":\")\",\")\":\"(\",\"{\":\"}\",\"}\":\"{\",\"[\":\"]\",\"]\":\"[\",\"<\":\">\",\">\":\"<\"},s={\"'\":!0,'\"':!0,\"`\":!0},o=n.selectedCharacter;o==\"b\"?o=\"(\":o==\"B\"&&(o=\"{\");var u=!n.textObjectInner,a;if(i[o])a=cn(e,t,o,u);else if(s[o])a=hn(e,t,o,u);else if(o===\"W\")a=Gt(e,u,!0,!0);else if(o===\"w\")a=Gt(e,u,!0,!1);else{if(o!==\"p\")return null;a=ln(e,t,n.repeat,0,u),n.linewise=!0;if(r.visualMode)r.visualLine||(r.visualLine=!0);else{var f=r.inputState.operatorArgs;f&&(f.linewise=!0),a.end.line--}}return e.state.vim.visualMode?zt(e,a.start,a.end):[a.start,a.end]},repeatLastCharacterSearch:function(e,t,n){var r=nt.lastCharacterSearch,i=n.repeat,s=n.forward===r.forward,o=(r.increment?1:0)*(s?-1:1);e.moveH(-o,\"char\"),n.inclusive=s?!0:!1;var u=on(e,i,s,r.selectedCharacter);return u?(u.ch+=o,u):(e.moveH(o,\"char\"),t)}},mt={change:function(e,t,n){var r,i,s=e.state.vim;nt.macroModeState.lastInsertModeChanges.inVisualBlock=s.visualBlock;if(!s.visualMode){var o=n[0].anchor,u=n[0].head;i=e.getRange(o,u);var a=s.lastEditInputState||{};if(a.motion==\"moveByWords\"&&!V(i)){var f=/\\s+$/.exec(i);f&&a.motionArgs&&a.motionArgs.forward&&(u=St(u,0,-f[0].length),i=i.slice(0,-f[0].length))}var l=new E(o.line-1,Number.MAX_VALUE),c=e.firstLine()==e.lastLine();u.line>e.lastLine()&&t.linewise&&!c?e.replaceRange(\"\",l,u):e.replaceRange(\"\",o,u),t.linewise&&(c||(e.setCursor(l),v.commands.newlineAndIndent(e)),o.ch=Number.MAX_VALUE),r=o}else{i=e.getSelection();var h=vt(\"\",n.length);e.replaceSelections(h),r=Mt(n[0].head,n[0].anchor)}nt.registerController.pushText(t.registerName,\"change\",i,t.linewise,n.length>1),yt.enterInsertMode(e,{head:r},e.state.vim)},\"delete\":function(e,t,n){var r,i,s=e.state.vim;if(!s.visualBlock){var o=n[0].anchor,u=n[0].head;t.linewise&&u.line!=e.firstLine()&&o.line==e.lastLine()&&o.line==u.line-1&&(o.line==e.firstLine()?o.ch=0:o=E(o.line-1,Pt(e,o.line-1))),i=e.getRange(o,u),e.replaceRange(\"\",o,u),r=o,t.linewise&&(r=pt.moveToFirstNonWhiteSpaceCharacter(e,o))}else{i=e.getSelection();var a=vt(\"\",n.length);e.replaceSelections(a),r=n[0].anchor}nt.registerController.pushText(t.registerName,\"delete\",i,t.linewise,s.visualBlock);var f=s.insertMode;return wt(e,r,f)},indent:function(e,t,n){var r=e.state.vim,i=n[0].anchor.line,s=r.visualBlock?n[n.length-1].anchor.line:n[0].head.line,o=r.visualMode?t.repeat:1;t.linewise&&s--;for(var u=i;u<=s;u++)for(var a=0;a<o;a++)e.indentLine(u,t.indentRight);return pt.moveToFirstNonWhiteSpaceCharacter(e,n[0].anchor)},changeCase:function(e,t,n,r,i){var s=e.getSelections(),o=[],u=t.toLower;for(var a=0;a<s.length;a++){var f=s[a],l=\"\";if(u===!0)l=f.toLowerCase();else if(u===!1)l=f.toUpperCase();else for(var c=0;c<f.length;c++){var h=f.charAt(c);l+=X(h)?h.toLowerCase():h.toUpperCase()}o.push(l)}return e.replaceSelections(o),t.shouldMoveCursor?i:!e.state.vim.visualMode&&t.linewise&&n[0].anchor.line+1==n[0].head.line?pt.moveToFirstNonWhiteSpaceCharacter(e,r):t.linewise?r:Mt(n[0].anchor,n[0].head)},yank:function(e,t,n,r){var i=e.state.vim,s=e.getSelection(),o=i.visualMode?Mt(i.sel.anchor,i.sel.head,n[0].head,n[0].anchor):r;return nt.registerController.pushText(t.registerName,\"yank\",s,t.linewise,i.visualBlock),o}},yt={jumpListWalk:function(e,t,n){if(n.visualMode)return;var r=t.repeat,i=t.forward,s=nt.jumpList,o=s.move(e,i?r:-r),u=o?o.find():undefined;u=u?u:e.getCursor(),e.setCursor(u),e.ace.curOp.command.scrollIntoView=\"center-animate\"},scroll:function(e,t,n){if(n.visualMode)return;var r=t.repeat||1,i=e.defaultTextHeight(),s=e.getScrollInfo().top,o=i*r,u=t.forward?s+o:s-o,a=Lt(e.getCursor()),f=e.charCoords(a,\"local\");if(t.forward)u>f.top?(a.line+=(u-f.top)/i,a.line=Math.ceil(a.line),e.setCursor(a),f=e.charCoords(a,\"local\"),e.scrollTo(null,f.top)):e.scrollTo(null,u);else{var l=u+e.getScrollInfo().clientHeight;l<f.bottom?(a.line-=(f.bottom-l)/i,a.line=Math.floor(a.line),e.setCursor(a),f=e.charCoords(a,\"local\"),e.scrollTo(null,f.bottom-e.getScrollInfo().clientHeight)):e.scrollTo(null,u)}},scrollToCursor:function(e,t){var n=e.getCursor().line,r=e.charCoords(E(n,0),\"local\"),i=e.getScrollInfo().clientHeight,s=r.top,o=r.bottom-s;switch(t.position){case\"center\":s=s-i/2+o;break;case\"bottom\":s=s-i+o*1.4;break;case\"top\":s+=o*.4}e.scrollTo(null,s)},replayMacro:function(e,t,n){var r=t.selectedCharacter,i=t.repeat,s=nt.macroModeState;r==\"@\"&&(r=s.latestRegister);while(i--)Vn(e,n,s,r)},enterMacroRecordMode:function(e,t){var n=nt.macroModeState,r=t.selectedCharacter;nt.registerController.isValidRegister(r)&&n.enterMacroRecordMode(e,r)},toggleOverwrite:function(e){e.state.overwrite?(e.toggleOverwrite(!1),e.setOption(\"keyMap\",\"vim-insert\"),v.signal(e,\"vim-mode-change\",{mode:\"insert\"})):(e.toggleOverwrite(!0),e.setOption(\"keyMap\",\"vim-replace\"),v.signal(e,\"vim-mode-change\",{mode:\"replace\"}))},enterInsertMode:function(e,t,n){if(e.getOption(\"readOnly\"))return;n.insertMode=!0,n.insertModeRepeat=t&&t.repeat||1;var r=t?t.insertAt:null,i=n.sel,s=t.head||e.getCursor(\"head\"),o=e.listSelections().length;if(r==\"eol\")s=E(s.line,Pt(e,s.line));else if(r==\"charAfter\")s=St(s,0,1);else if(r==\"firstNonBlank\")s=pt.moveToFirstNonWhiteSpaceCharacter(e,s);else if(r==\"startOfSelectedArea\")n.visualBlock?(s=E(Math.min(i.head.line,i.anchor.line),Math.min(i.head.ch,i.anchor.ch)),o=Math.abs(i.head.line-i.anchor.line)+1):i.head.line<i.anchor.line?s=i.head:s=E(i.anchor.line,0);else if(r==\"endOfSelectedArea\")n.visualBlock?(s=E(Math.min(i.head.line,i.anchor.line),Math.max(i.head.ch+1,i.anchor.ch)),o=Math.abs(i.head.line-i.anchor.line)+1):i.head.line>=i.anchor.line?s=St(i.head,0,1):s=E(i.anchor.line,0);else if(r==\"inplace\"&&n.visualMode)return;e.setOption(\"disableInput\",!1),t&&t.replace?(e.toggleOverwrite(!0),e.setOption(\"keyMap\",\"vim-replace\"),v.signal(e,\"vim-mode-change\",{mode:\"replace\"})):(e.toggleOverwrite(!1),e.setOption(\"keyMap\",\"vim-insert\"),v.signal(e,\"vim-mode-change\",{mode:\"insert\"})),nt.macroModeState.isPlaying||(e.on(\"change\",Qn),v.on(e.getInputField(),\"keydown\",tr)),n.visualMode&&$t(e),It(e,s,o)},toggleVisualMode:function(e,t,n){var r=t.repeat,i=e.getCursor(),s;n.visualMode?n.visualLine^t.linewise||n.visualBlock^t.blockwise?(n.visualLine=!!t.linewise,n.visualBlock=!!t.blockwise,v.signal(e,\"vim-mode-change\",{mode:\"visual\",subMode:n.visualLine?\"linewise\":n.visualBlock?\"blockwise\":\"\"}),Wt(e)):$t(e):(n.visualMode=!0,n.visualLine=!!t.linewise,n.visualBlock=!!t.blockwise,s=wt(e,E(i.line,i.ch+r-1),!0),n.sel={anchor:i,head:s},v.signal(e,\"vim-mode-change\",{mode:\"visual\",subMode:n.visualLine?\"linewise\":n.visualBlock?\"blockwise\":\"\"}),Wt(e),an(e,n,\"<\",Mt(i,s)),an(e,n,\">\",_t(i,s)))},reselectLastSelection:function(e,t,n){var r=n.lastSelection;n.visualMode&&Ut(e,n);if(r){var i=r.anchorMark.find(),s=r.headMark.find();if(!i||!s)return;n.sel={anchor:i,head:s},n.visualMode=!0,n.visualLine=r.visualLine,n.visualBlock=r.visualBlock,Wt(e),an(e,n,\"<\",Mt(i,s)),an(e,n,\">\",_t(i,s)),v.signal(e,\"vim-mode-change\",{mode:\"visual\",subMode:n.visualLine?\"linewise\":n.visualBlock?\"blockwise\":\"\"})}},joinLines:function(e,t,n){var r,i;if(n.visualMode){r=e.getCursor(\"anchor\"),i=e.getCursor(\"head\");if(Ot(i,r)){var s=i;i=r,r=s}i.ch=Pt(e,i.line)-1}else{var o=Math.max(t.repeat,2);r=e.getCursor(),i=wt(e,E(r.line+o-1,Infinity))}var u=0;for(var a=r.line;a<i.line;a++){u=Pt(e,r.line);var s=E(r.line+1,Pt(e,r.line+1)),f=e.getRange(r,s);f=f.replace(/\\n\\s*/g,\" \"),e.replaceRange(f,r,s)}var l=E(r.line,u);n.visualMode&&$t(e,!1),e.setCursor(l)},newLineAndEnterInsertMode:function(e,t,n){n.insertMode=!0;var r=Lt(e.getCursor());if(r.line===e.firstLine()&&!t.after)e.replaceRange(\"\\n\",E(e.firstLine(),0)),e.setCursor(e.firstLine(),0);else{r.line=t.after?r.line:r.line-1,r.ch=Pt(e,r.line),e.setCursor(r);var i=v.commands.newlineAndIndentContinueComment||v.commands.newlineAndIndent;i(e)}this.enterInsertMode(e,{repeat:t.repeat},n)},paste:function(e,t,n){var r=Lt(e.getCursor()),i=nt.registerController.getRegister(t.registerName),s=i.toString();if(!s)return;if(t.matchIndent){var o=e.getOption(\"tabSize\"),u=function(e){var t=e.split(\"\t\").length-1,n=e.split(\" \").length-1;return t*o+n*1},a=e.getLine(e.getCursor().line),f=u(a.match(/^\\s*/)[0]),l=s.replace(/\\n$/,\"\"),c=s!==l,h=u(s.match(/^\\s*/)[0]),s=l.replace(/^\\s*/gm,function(t){var n=f+(u(t)-h);if(n<0)return\"\";if(e.getOption(\"indentWithTabs\")){var r=Math.floor(n/o);return Array(r+1).join(\"\t\")}return Array(n+1).join(\" \")});s+=c?\"\\n\":\"\"}if(t.repeat>1)var s=Array(t.repeat+1).join(s);var p=i.linewise,d=i.blockwise;if(p&&!d)n.visualMode?s=n.visualLine?s.slice(0,-1):\"\\n\"+s.slice(0,s.length-1)+\"\\n\":t.after?(s=\"\\n\"+s.slice(0,s.length-1),r.ch=Pt(e,r.line)):r.ch=0;else{if(d){s=s.split(\"\\n\");for(var v=0;v<s.length;v++)s[v]=s[v]==\"\"?\" \":s[v]}r.ch+=t.after?1:0}var m,g;if(n.visualMode){n.lastPastedText=s;var y,b=Rt(e,n),w=b[0],S=b[1],x=e.getSelection(),T=e.listSelections(),N=(new Array(T.length)).join(\"1\").split(\"1\");n.lastSelection&&(y=n.lastSelection.headMark.find()),nt.registerController.unnamedRegister.setText(x),d?(e.replaceSelections(N),S=E(w.line+s.length-1,w.ch),e.setCursor(w),Ft(e,S),e.replaceSelections(s),m=w):n.visualBlock?(e.replaceSelections(N),e.setCursor(w),e.replaceRange(s,w,w),m=w):(e.replaceRange(s,w,S),m=e.posFromIndex(e.indexFromPos(w)+s.length-1)),y&&(n.lastSelection.headMark=e.setBookmark(y)),p&&(m.ch=0)}else if(d){e.setCursor(r);for(var v=0;v<s.length;v++){var C=r.line+v;C>e.lastLine()&&e.replaceRange(\"\\n\",E(C,0));var k=Pt(e,C);k<r.ch&&jt(e,C,r.ch)}e.setCursor(r),Ft(e,E(r.line+s.length-1,r.ch)),e.replaceSelections(s),m=r}else e.replaceRange(s,r),p&&t.after?m=E(r.line+1,Qt(e.getLine(r.line+1))):p&&!t.after?m=E(r.line,Qt(e.getLine(r.line))):!p&&t.after?(g=e.indexFromPos(r),m=e.posFromIndex(g+s.length-1)):(g=e.indexFromPos(r),m=e.posFromIndex(g+s.length));n.visualMode&&$t(e,!1),e.setCursor(m)},undo:function(e,t){e.operation(function(){kt(e,v.commands.undo,t.repeat)(),e.setCursor(e.getCursor(\"anchor\"))})},redo:function(e,t){kt(e,v.commands.redo,t.repeat)()},setRegister:function(e,t,n){n.inputState.registerName=t.selectedCharacter},setMark:function(e,t,n){var r=t.selectedCharacter;an(e,n,r,e.getCursor())},replace:function(e,t,n){var r=t.selectedCharacter,i=e.getCursor(),s,o,u=e.listSelections();if(n.visualMode)i=e.getCursor(\"start\"),o=e.getCursor(\"end\");else{var a=e.getLine(i.line);s=i.ch+t.repeat,s>a.length&&(s=a.length),o=E(i.line,s)}if(r==\"\\n\")n.visualMode||e.replaceRange(\"\",i,o),(v.commands.newlineAndIndentContinueComment||v.commands.newlineAndIndent)(e);else{var f=e.getRange(i,o);f=f.replace(/[^\\n]/g,r);if(n.visualBlock){var l=(new Array(e.getOption(\"tabSize\")+1)).join(\" \");f=e.getSelection(),f=f.replace(/\\t/g,l).replace(/[^\\n]/g,r).split(\"\\n\"),e.replaceSelections(f)}else e.replaceRange(f,i,o);n.visualMode?(i=Ot(u[0].anchor,u[0].head)?u[0].anchor:u[0].head,e.setCursor(i),$t(e,!1)):e.setCursor(St(o,0,-1))}},incrementNumberToken:function(e,t){var n=e.getCursor(),r=e.getLine(n.line),i=/(-?)(?:(0x)([\\da-f]+)|(0b|0|)(\\d+))/gi,s,o,u,a;while((s=i.exec(r))!==null){o=s.index,u=o+s[0].length;if(n.ch<u)break}if(!t.backtrack&&u<=n.ch)return;if(!s)return;var f=s[2]||s[4],l=s[3]||s[5],c=t.increase?1:-1,h={\"0b\":2,0:8,\"\":10,\"0x\":16}[f.toLowerCase()],p=parseInt(s[1]+l,h)+c*t.repeat;a=p.toString(h);var d=f?(new Array(l.length-a.length+1+s[1].length)).join(\"0\"):\"\";a.charAt(0)===\"-\"?a=\"-\"+f+d+a.substr(1):a=f+d+a;var v=E(n.line,o),m=E(n.line,u);e.replaceRange(a,v,m),e.setCursor(E(n.line,o+a.length-1))},repeatLastEdit:function(e,t,n){var r=n.lastEditInputState;if(!r)return;var i=t.repeat;i&&t.repeatIsExplicit?n.lastEditInputState.repeatOverride=i:i=n.lastEditInputState.repeatOverride||i,nr(e,n,i,!1)},indent:function(e,t){e.indentLine(e.getCursor().line,t.indentRight)},exitInsertMode:zn},en={\"(\":\"bracket\",\")\":\"bracket\",\"{\":\"bracket\",\"}\":\"bracket\",\"[\":\"section\",\"]\":\"section\",\"*\":\"comment\",\"/\":\"comment\",m:\"method\",M:\"method\",\"#\":\"preprocess\"},tn={bracket:{isComplete:function(e){if(e.nextCh===e.symb){e.depth++;if(e.depth>=1)return!0}else e.nextCh===e.reverseSymb&&e.depth--;return!1}},section:{init:function(e){e.curMoveThrough=!0,e.symb=(e.forward?\"]\":\"[\")===e.symb?\"{\":\"}\"},isComplete:function(e){return e.index===0&&e.nextCh===e.symb}},comment:{isComplete:function(e){var t=e.lastCh===\"*\"&&e.nextCh===\"/\";return e.lastCh=e.nextCh,t}},method:{init:function(e){e.symb=e.symb===\"m\"?\"{\":\"}\",e.reverseSymb=e.symb===\"{\"?\"}\":\"{\"},isComplete:function(e){return e.nextCh===e.symb?!0:!1}},preprocess:{init:function(e){e.index=0},isComplete:function(e){if(e.nextCh===\"#\"){var t=e.lineText.match(/#(\\w+)/)[1];if(t===\"endif\"){if(e.forward&&e.depth===0)return!0;e.depth++}else if(t===\"if\"){if(!e.forward&&e.depth===0)return!0;e.depth--}if(t===\"else\"&&e.depth===0)return!0}return!1}}};K(\"pcre\",!0,\"boolean\"),pn.prototype={getQuery:function(){return nt.query},setQuery:function(e){nt.query=e},getOverlay:function(){return this.searchOverlay},setOverlay:function(e){this.searchOverlay=e},isReversed:function(){return nt.isReversed},setReversed:function(e){nt.isReversed=e},getScrollbarAnnotate:function(){return this.annotate},setScrollbarAnnotate:function(e){this.annotate=e}};var En={\"\\\\n\":\"\\n\",\"\\\\r\":\"\\r\",\"\\\\t\":\"\t\"},xn={\"\\\\/\":\"/\",\"\\\\\\\\\":\"\\\\\",\"\\\\n\":\"\\n\",\"\\\\r\":\"\\r\",\"\\\\t\":\"\t\"},Ln=\"(Javascript regexp)\",In=function(){this.buildCommandMap_()};In.prototype={processCommand:function(e,t,n){var r=this;e.operation(function(){e.curOp.isVimOp=!0,r._processCommand(e,t,n)})},_processCommand:function(e,t,n){var r=e.state.vim,i=nt.registerController.getRegister(\":\"),s=i.toString();r.visualMode&&$t(e);var o=new v.StringStream(t);i.setText(t);var u=n||{};u.input=t;try{this.parseInput_(e,o,u)}catch(a){throw Cn(e,a),a}var f,l;if(!u.commandName)u.line!==undefined&&(l=\"move\");else{f=this.matchCommand_(u.commandName);if(f){l=f.name,f.excludeFromCommandHistory&&i.setText(s),this.parseCommandArgs_(o,u,f);if(f.type==\"exToKey\"){for(var c=0;c<f.toKeys.length;c++)v.Vim.handleKey(e,f.toKeys[c],\"mapping\");return}if(f.type==\"exToEx\"){this.processCommand(e,f.toInput);return}}}if(!l){Cn(e,'Not an editor command \":'+t+'\"');return}try{qn[l](e,u),(!f||!f.possiblyAsync)&&u.callback&&u.callback()}catch(a){throw Cn(e,a),a}},parseInput_:function(e,t,n){t.eatWhile(\":\"),t.eat(\"%\")?(n.line=e.firstLine(),n.lineEnd=e.lastLine()):(n.line=this.parseLineSpec_(e,t),n.line!==undefined&&t.eat(\",\")&&(n.lineEnd=this.parseLineSpec_(e,t)));var r=t.match(/^(\\w+)/);return r?n.commandName=r[1]:n.commandName=t.match(/.*/)[0],n},parseLineSpec_:function(e,t){var n=t.match(/^(\\d+)/);if(n)return parseInt(n[1],10)-1;switch(t.next()){case\".\":return this.parseLineSpecOffset_(t,e.getCursor().line);case\"$\":return this.parseLineSpecOffset_(t,e.lastLine());case\"'\":var r=t.next(),i=Fn(e,e.state.vim,r);if(!i)throw new Error(\"Mark not set\");return this.parseLineSpecOffset_(t,i.line);case\"-\":case\"+\":return t.backUp(1),this.parseLineSpecOffset_(t,e.getCursor().line);default:return t.backUp(1),undefined}},parseLineSpecOffset_:function(e,t){var n=e.match(/^([+-])?(\\d+)/);if(n){var r=parseInt(n[2],10);n[1]==\"-\"?t-=r:t+=r}return t},parseCommandArgs_:function(e,t,n){if(e.eol())return;t.argString=e.match(/.*/)[0];var r=n.argDelimiter||/\\s+/,i=Ht(t.argString).split(r);i.length&&i[0]&&(t.args=i)},matchCommand_:function(e){for(var t=e.length;t>0;t--){var n=e.substring(0,t);if(this.commandMap_[n]){var r=this.commandMap_[n];if(r.name.indexOf(e)===0)return r}}return null},buildCommandMap_:function(){this.commandMap_={};for(var e=0;e<w.length;e++){var t=w[e],n=t.shortName||t.name;this.commandMap_[n]=t}},map:function(e,t,n){if(e!=\":\"&&e.charAt(0)==\":\"){if(n)throw Error(\"Mode not supported for ex mappings\");var r=e.substring(1);t!=\":\"&&t.charAt(0)==\":\"?this.commandMap_[r]={name:r,type:\"exToEx\",toInput:t.substring(1),user:!0}:this.commandMap_[r]={name:r,type:\"exToKey\",toKeys:t,user:!0}}else if(t!=\":\"&&t.charAt(0)==\":\"){var i={keys:e,type:\"keyToEx\",exArgs:{input:t.substring(1)}};n&&(i.context=n),b.unshift(i)}else{var i={keys:e,type:\"keyToKey\",toKeys:t};n&&(i.context=n),b.unshift(i)}},unmap:function(e,t){if(e!=\":\"&&e.charAt(0)==\":\"){if(t)throw Error(\"Mode not supported for ex mappings\");var n=e.substring(1);if(this.commandMap_[n]&&this.commandMap_[n].user){delete this.commandMap_[n];return}}else{var r=e;for(var i=0;i<b.length;i++)if(r==b[i].keys&&b[i].context===t){b.splice(i,1);return}}}};var qn={colorscheme:function(e,t){if(!t.args||t.args.length<1){Cn(e,e.getOption(\"theme\"));return}e.setOption(\"theme\",t.args[0])},map:function(e,t,n){var r=t.args;if(!r||r.length<2){e&&Cn(e,\"Invalid mapping: \"+t.input);return}Rn.map(r[0],r[1],n)},imap:function(e,t){this.map(e,t,\"insert\")},nmap:function(e,t){this.map(e,t,\"normal\")},vmap:function(e,t){this.map(e,t,\"visual\")},unmap:function(e,t,n){var r=t.args;if(!r||r.length<1){e&&Cn(e,\"No such mapping: \"+t.input);return}Rn.unmap(r[0],n)},move:function(e,t){ht.processCommand(e,e.state.vim,{type:\"motion\",motion:\"moveToLineOrEdgeOfDocument\",motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0},repeatOverride:t.line+1})},set:function(e,t){var n=t.args,r=t.setCfg||{};if(!n||n.length<1){e&&Cn(e,\"Invalid mapping: \"+t.input);return}var i=n[0].split(\"=\"),s=i[0],o=i[1],u=!1;if(s.charAt(s.length-1)==\"?\"){if(o)throw Error(\"Trailing characters: \"+t.argString);s=s.substring(0,s.length-1),u=!0}o===undefined&&s.substring(0,2)==\"no\"&&(s=s.substring(2),o=!1);var a=J[s]&&J[s].type==\"boolean\";a&&o==undefined&&(o=!0);if(!a&&o===undefined||u){var f=G(s,e,r);f instanceof Error?Cn(e,f.message):f===!0||f===!1?Cn(e,\" \"+(f?\"\":\"no\")+s):Cn(e,\"  \"+s+\"=\"+f)}else{var l=Q(s,o,e,r);l instanceof Error&&Cn(e,l.message)}},setlocal:function(e,t){t.setCfg={scope:\"local\"},this.set(e,t)},setglobal:function(e,t){t.setCfg={scope:\"global\"},this.set(e,t)},registers:function(e,t){var n=t.args,r=nt.registerController.registers,i=\"----------Registers----------<br><br>\";if(!n)for(var s in r){var o=r[s].toString();o.length&&(i+='\"'+s+\"    \"+o+\"<br>\")}else{var s;n=n.join(\"\");for(var u=0;u<n.length;u++){s=n.charAt(u);if(!nt.registerController.isValidRegister(s))continue;var a=r[s]||new at;i+='\"'+s+\"    \"+a.toString()+\"<br>\"}}Cn(e,i)},sort:function(e,t){function u(){if(t.argString){var e=new v.StringStream(t.argString);e.eat(\"!\")&&(n=!0);if(e.eol())return;if(!e.eatSpace())return\"Invalid arguments\";var u=e.match(/([dinuox]+)?\\s*(\\/.+\\/)?\\s*/);if(!u&&!e.eol())return\"Invalid arguments\";if(u[1]){r=u[1].indexOf(\"i\")!=-1,i=u[1].indexOf(\"u\")!=-1;var a=u[1].indexOf(\"d\")!=-1||u[1].indexOf(\"n\")!=-1&&1,f=u[1].indexOf(\"x\")!=-1&&1,l=u[1].indexOf(\"o\")!=-1&&1;if(a+f+l>1)return\"Invalid arguments\";s=a&&\"decimal\"||f&&\"hex\"||l&&\"octal\"}u[2]&&(o=new RegExp(u[2].substr(1,u[2].length-2),r?\"i\":\"\"))}}function S(e,t){if(n){var i;i=e,e=t,t=i}r&&(e=e.toLowerCase(),t=t.toLowerCase());var o=s&&d.exec(e),u=s&&d.exec(t);return o?(o=parseInt((o[1]+o[2]).toLowerCase(),m),u=parseInt((u[1]+u[2]).toLowerCase(),m),o-u):e<t?-1:1}function x(e,t){if(n){var i;i=e,e=t,t=i}return r&&(e[0]=e[0].toLowerCase(),t[0]=t[0].toLowerCase()),e[0]<t[0]?-1:1}var n,r,i,s,o,a=u();if(a){Cn(e,a+\": \"+t.argString);return}var f=t.line||e.firstLine(),l=t.lineEnd||t.line||e.lastLine();if(f==l)return;var c=E(f,0),h=E(l,Pt(e,l)),p=e.getRange(c,h).split(\"\\n\"),d=o?o:s==\"decimal\"?/(-?)([\\d]+)/:s==\"hex\"?/(-?)(?:0x)?([0-9a-f]+)/i:s==\"octal\"?/([0-7]+)/:null,m=s==\"decimal\"?10:s==\"hex\"?16:s==\"octal\"?8:null,g=[],y=[];if(s||o)for(var b=0;b<p.length;b++){var w=o?p[b].match(o):null;w&&w[0]!=\"\"?g.push(w):!o&&d.exec(p[b])?g.push(p[b]):y.push(p[b])}else y=p;g.sort(o?x:S);if(o)for(var b=0;b<g.length;b++)g[b]=g[b].input;else s||y.sort(S);p=n?g.concat(y):y.concat(g);if(i){var T=p,N;p=[];for(var b=0;b<T.length;b++)T[b]!=N&&p.push(T[b]),N=T[b]}e.replaceRange(p.join(\"\\n\"),c,h)},global:function(e,t){var n=t.argString;if(!n){Cn(e,\"Regular Expression missing from global\");return}var r=t.line!==undefined?t.line:e.firstLine(),i=t.lineEnd||t.line||e.lastLine(),s=mn(n),o=n,u;s.length&&(o=s[0],u=s.slice(1,s.length).join(\"/\"));if(o)try{Mn(e,o,!0,!0)}catch(a){Cn(e,\"Invalid regex: \"+o);return}var f=dn(e).getQuery(),l=[],c=\"\";for(var h=r;h<=i;h++){var p=f.test(e.getLine(h));p&&(l.push(h+1),c+=e.getLine(h)+\"<br>\")}if(!u){Cn(e,c);return}var d=0,v=function(){if(d<l.length){var t=l[d]+u;Rn.processCommand(e,t,{callback:v})}d++};v()},substitute:function(e,t){if(!e.getSearchCursor)throw new Error(\"Search feature not available. Requires searchcursor.js or any other getSearchCursor implementation.\");var n=t.argString,r=n?yn(n,n[0]):[],i,s=\"\",o,u,a,f=!1,l=!1;if(r.length)i=r[0],s=r[1],i&&i[i.length-1]===\"$\"&&(i=i.slice(0,i.length-1)+\"\\\\n\",s=s?s+\"\\n\":\"\\n\"),s!==undefined&&(G(\"pcre\")?s=Tn(s):s=Sn(s),nt.lastSubstituteReplacePart=s),o=r[2]?r[2].split(\" \"):[];else if(n&&n.length){Cn(e,\"Substitutions should be of the form :s/pattern/replace/\");return}o&&(u=o[0],a=parseInt(o[1]),u&&(u.indexOf(\"c\")!=-1&&(f=!0,u.replace(\"c\",\"\")),u.indexOf(\"g\")!=-1&&(l=!0,u.replace(\"g\",\"\")),i=i.replace(/\\//g,\"\\\\/\")+\"/\"+u));if(i)try{Mn(e,i,!0,!0)}catch(c){Cn(e,\"Invalid regex: \"+i);return}s=s||nt.lastSubstituteReplacePart;if(s===undefined){Cn(e,\"No previous substitute regular expression\");return}var h=dn(e),p=h.getQuery(),d=t.line!==undefined?t.line:e.getCursor().line,v=t.lineEnd||d;d==e.firstLine()&&v==e.lastLine()&&(v=Infinity),a&&(d=v,v=d+a-1);var m=wt(e,E(d,0)),g=e.getSearchCursor(p,m);Un(e,f,l,d,v,g,p,s,t.callback)},redo:v.commands.redo,undo:v.commands.undo,write:function(e){v.commands.save?v.commands.save(e):e.save&&e.save()},nohlsearch:function(e){Hn(e)},yank:function(e){var t=Lt(e.getCursor()),n=t.line,r=e.getLine(n);nt.registerController.pushText(\"0\",\"yank\",r,!0,!0)},delmarks:function(e,t){if(!t.argString||!Ht(t.argString)){Cn(e,\"Argument required\");return}var n=e.state.vim,r=new v.StringStream(Ht(t.argString));while(!r.eol()){r.eatSpace();var i=r.pos;if(!r.match(/[a-zA-Z]/,!1)){Cn(e,\"Invalid argument: \"+t.argString.substring(i));return}var s=r.next();if(r.match(\"-\",!0)){if(!r.match(/[a-zA-Z]/,!1)){Cn(e,\"Invalid argument: \"+t.argString.substring(i));return}var o=s,u=r.next();if(!(U(o)&&U(u)||X(o)&&X(u))){Cn(e,\"Invalid argument: \"+o+\"-\");return}var a=o.charCodeAt(0),f=u.charCodeAt(0);if(a>=f){Cn(e,\"Invalid argument: \"+t.argString.substring(i));return}for(var l=0;l<=f-a;l++){var c=String.fromCharCode(a+l);delete n.marks[c]}}else delete n.marks[s]}}},Rn=new In;v.keyMap.vim={attach:C,detach:N,call:k},K(\"insertModeEscKeysTimeout\",200,\"number\"),v.keyMap[\"vim-insert\"]={\"Ctrl-N\":\"autocomplete\",\"Ctrl-P\":\"autocomplete\",Enter:function(e){var t=v.commands.newlineAndIndentContinueComment||v.commands.newlineAndIndent;t(e)},fallthrough:[\"default\"],attach:C,detach:N,call:k},v.keyMap[\"vim-replace\"]={Backspace:\"goCharLeft\",fallthrough:[\"vim-insert\"],attach:C,detach:N,call:k},rt(),v.Vim=S(),S=v.Vim;var ir={\"return\":\"CR\",backspace:\"BS\",\"delete\":\"Del\",esc:\"Esc\",left:\"Left\",right:\"Right\",up:\"Up\",down:\"Down\",space:\"Space\",home:\"Home\",end:\"End\",pageup:\"PageUp\",pagedown:\"PageDown\",enter:\"CR\"},or=S.handleKey.bind(S);S.handleKey=function(e,t,n){return e.operation(function(){return or(e,t,n)},!0)},t.CodeMirror=v;var fr=S.maybeInitVimState_;t.handler={$id:\"ace/keyboard/vim\",drawCursor:function(e,t,n,r,s){var u=this.state.vim||{},a=n.characterWidth,f=n.lineHeight,l=t.top,c=t.left;if(!u.insertMode){var h=r.cursor?i.comparePoints(r.cursor,r.start)<=0:s.selection.isBackwards()||s.selection.isEmpty();!h&&c>a&&(c-=a)}!u.insertMode&&u.status&&(f/=2,l+=f),o.translate(e,c,l),o.setStyle(e.style,\"width\",a+\"px\"),o.setStyle(e.style,\"height\",f+\"px\")},handleKeyboard:function(e,t,n,r,i){var s=e.editor,o=s.state.cm,u=fr(o);if(r==-1)return;u.insertMode||(t==-1?(n.charCodeAt(0)>255&&e.inputKey&&(n=e.inputKey,n&&e.inputHash==4&&(n=n.toUpperCase())),e.inputChar=n):t==4||t==0?e.inputKey==n&&e.inputHash==t&&e.inputChar?(n=e.inputChar,t=-1):(e.inputChar=null,e.inputKey=n,e.inputHash=t):e.inputChar=e.inputKey=null);if(n==\"c\"&&t==1&&!c.isMac&&s.getCopyText())return s.once(\"copy\",function(){s.selection.clearSelection()}),{command:\"null\",passEvent:!0};if(n==\"esc\"&&!u.insertMode&&!u.visualMode&&!o.ace.inMultiSelectMode){var a=dn(o),f=a.getOverlay();f&&o.removeOverlay(f)}if(t==-1||t&1||t===0&&n.length>1){var l=u.insertMode,h=sr(t,n,i||{});u.status==null&&(u.status=\"\");var p=ar(o,h,\"user\");u=fr(o),p&&u.status!=null?u.status+=h:u.status==null&&(u.status=\"\"),o._signal(\"changeStatus\");if(!p&&(t!=-1||l))return;return{command:\"null\",passEvent:!p}}},attach:function(e){function n(){var n=fr(t).insertMode;t.ace.renderer.setStyle(\"normal-mode\",!n),e.textInput.setCommandMode(!n),e.renderer.$keepTextAreaAtCursor=n,e.renderer.$blockCursor=!n}e.state||(e.state={});var t=new v(e);e.state.cm=t,e.$vimModeHandler=this,v.keyMap.vim.attach(t),fr(t).status=null,t.on(\"vim-command-done\",function(){if(t.virtualSelectionMode())return;fr(t).status=null,t.ace._signal(\"changeStatus\"),t.ace.session.markUndoGroup()}),t.on(\"changeStatus\",function(){t.ace.renderer.updateCursor(),t.ace._signal(\"changeStatus\")}),t.on(\"vim-mode-change\",function(){if(t.virtualSelectionMode())return;n(),t._signal(\"changeStatus\")}),n(),e.renderer.$cursorLayer.drawCursor=this.drawCursor.bind(t)},detach:function(e){var t=e.state.cm;v.keyMap.vim.detach(t),t.destroy(),e.state.cm=null,e.$vimModeHandler=null,e.renderer.$cursorLayer.drawCursor=null,e.renderer.setStyle(\"normal-mode\",!1),e.textInput.setCommandMode(!1),e.renderer.$keepTextAreaAtCursor=!0},getStatusText:function(e){var t=e.state.cm,n=fr(t);if(n.insertMode)return\"INSERT\";var r=\"\";return n.visualMode&&(r+=\"VISUAL\",n.visualLine&&(r+=\" LINE\"),n.visualBlock&&(r+=\" BLOCK\")),n.status&&(r+=(r?\" \":\"\")+n.status),r}},S.defineOption({name:\"wrap\",set:function(e,t){t&&t.ace.setOption(\"wrap\",e)},type:\"boolean\"},!1),S.defineEx(\"write\",\"w\",function(){console.log(\":write is not implemented\")}),b.push({keys:\"zc\",type:\"action\",action:\"fold\",actionArgs:{open:!1}},{keys:\"zC\",type:\"action\",action:\"fold\",actionArgs:{open:!1,all:!0}},{keys:\"zo\",type:\"action\",action:\"fold\",actionArgs:{open:!0}},{keys:\"zO\",type:\"action\",action:\"fold\",actionArgs:{open:!0,all:!0}},{keys:\"za\",type:\"action\",action:\"fold\",actionArgs:{toggle:!0}},{keys:\"zA\",type:\"action\",action:\"fold\",actionArgs:{toggle:!0,all:!0}},{keys:\"zf\",type:\"action\",action:\"fold\",actionArgs:{open:!0,all:!0}},{keys:\"zd\",type:\"action\",action:\"fold\",actionArgs:{open:!0,all:!0}},{keys:\"<C-A-k>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorAbove\"}},{keys:\"<C-A-j>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorBelow\"}},{keys:\"<C-A-S-k>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorAboveSkipCurrent\"}},{keys:\"<C-A-S-j>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorBelowSkipCurrent\"}},{keys:\"<C-A-h>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectMoreBefore\"}},{keys:\"<C-A-l>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectMoreAfter\"}},{keys:\"<C-A-S-h>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectNextBefore\"}},{keys:\"<C-A-S-l>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectNextAfter\"}}),yt.aceCommand=function(e,t,n){e.vimCmd=t,e.ace.inVirtualSelectionMode?e.ace.on(\"beforeEndOperation\",lr):lr(null,e.ace)},yt.fold=function(e,t,n){e.ace.execCommand([\"toggleFoldWidget\",\"toggleFoldWidget\",\"foldOther\",\"unfoldall\"][(t.all?2:0)+(t.open?1:0)])},t.handler.defaultKeymap=b,t.handler.actions=yt,t.Vim=S,S.map(\"Y\",\"yy\",\"normal\")});                (function() {\n                    window.require([\"ace/keyboard/vim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-abap.js",
    "content": "define(\"ace/mode/abap_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"ADD ALIAS ALIASES ASCENDING ASSERT ASSIGN ASSIGNING AT BACK CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY DATA DEFINE DEFINITION DEFERRED DELETE DESCENDING DESCRIBE DETAIL DIVIDE DO ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT FETCH FIELDS FORM FORMAT FREE FROM FUNCTION GENERATE GET HIDE IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION LEAVE LIKE LINE LOAD LOCAL LOOP MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY ON OVERLAY OPTIONAL OTHERS PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURN RETURNING ROLLBACK SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES UNASSIGN ULINE UNPACK UPDATE WHEN WHILE WINDOW WRITE OCCURS STRUCTURE OBJECT PROPERTY CASTING APPEND RAISING VALUE COLOR CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT ID NUMBER FOR TITLE OUTPUT WITH EXIT USING INTO WHERE GROUP BY HAVING ORDER BY SINGLE APPENDING CORRESPONDING FIELDS OF TABLE LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN\",\"constant.language\":\"TRUE FALSE NULL SPACE\",\"support.type\":\"c n i p f d t x string xstring decfloat16 decfloat34\",\"keyword.operator\":\"abs sign ceil floor trunc frac acos asin atan cos sin tan abapOperator cosh sinh tanh exp log log10 sqrt strlen xstrlen charlen numofchar dbmaxlen lines\"},\"text\",!0,\" \"),t=\"WITH\\\\W+(?:HEADER\\\\W+LINE|FRAME|KEY)|NO\\\\W+STANDARD\\\\W+PAGE\\\\W+HEADING|EXIT\\\\W+FROM\\\\W+STEP\\\\W+LOOP|BEGIN\\\\W+OF\\\\W+(?:BLOCK|LINE)|BEGIN\\\\W+OF|END\\\\W+OF\\\\W+(?:BLOCK|LINE)|END\\\\W+OF|NO\\\\W+INTERVALS|RESPECTING\\\\W+BLANKS|SEPARATED\\\\W+BY|USING\\\\W+(?:EDIT\\\\W+MASK)|WHERE\\\\W+(?:LINE)|RADIOBUTTON\\\\W+GROUP|REF\\\\W+TO|(?:PUBLIC|PRIVATE|PROTECTED)(?:\\\\W+SECTION)?|DELETING\\\\W+(?:TRAILING|LEADING)(?:ALL\\\\W+OCCURRENCES)|(?:FIRST|LAST)\\\\W+OCCURRENCE|INHERITING\\\\W+FROM|LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|IS\\\\W+(?:NOT\\\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)\";this.$rules={start:[{token:\"string\",regex:\"`\",next:\"string\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"doc.comment\",regex:/^\\*.+/},{token:\"comment\",regex:/\".+$/},{token:\"invalid\",regex:\"\\\\.{2,}\"},{token:\"keyword.operator\",regex:/\\W[\\-+%=<>*]\\W|\\*\\*|[~:,\\.&$]|->*?|=>/},{token:\"paren.lparen\",regex:\"[\\\\[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+\\\\b\"},{token:\"variable.parameter\",regex:/sy|pa?\\d\\d\\d\\d\\|t\\d\\d\\d\\.|innnn/},{token:\"keyword\",regex:t},{token:\"variable.parameter\",regex:/\\w+-\\w[\\-\\w]*/},{token:e,regex:\"\\\\b\\\\w+\\\\b\"},{caseInsensitive:!0}],qstring:[{token:\"constant.language.escape\",regex:\"''\"},{token:\"string\",regex:\"'\",next:\"start\"},{defaultToken:\"string\"}],string:[{token:\"constant.language.escape\",regex:\"``\"},{token:\"string\",regex:\"`\",next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.AbapHighlightRules=s}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/abap\",[\"require\",\"exports\",\"module\",\"ace/mode/abap_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function a(){this.HighlightRules=r,this.foldingRules=new i}var r=e(\"./abap_highlight_rules\").AbapHighlightRules,i=e(\"./folding/coffee\").FoldMode,s=e(\"../range\").Range,o=e(\"./text\").Mode,u=e(\"../lib/oop\");u.inherits(a,o),function(){this.lineCommentStart='\"',this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);return r},this.$id=\"ace/mode/abap\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-abc.js",
    "content": "define(\"ace/mode/abc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"zupfnoter.information.comment.line.percentage\",\"information.keyword\",\"in formation.keyword.embedded\"],regex:\"(%%%%)(hn\\\\.[a-z]*)(.*)\",comment:\"Instruction Comment\"},{token:[\"information.comment.line.percentage\",\"information.keyword.embedded\"],regex:\"(%%)(.*)\",comment:\"Instruction Comment\"},{token:\"comment.line.percentage\",regex:\"%.*\",comment:\"Comments\"},{token:\"barline.keyword.operator\",regex:\"[\\\\[:]*[|:][|\\\\]:]*(?:\\\\[?[0-9]+)?|\\\\[[0-9]+\",comment:\"Bar lines\"},{token:[\"information.keyword.embedded\",\"information.argument.string.unquoted\"],regex:\"(\\\\[[A-Za-z]:)([^\\\\]]*\\\\])\",comment:\"embedded Header lines\"},{token:[\"information.keyword\",\"information.argument.string.unquoted\"],regex:\"^([A-Za-z]:)([^%\\\\\\\\]*)\",comment:\"Header lines\"},{token:[\"text\",\"entity.name.function\",\"string.unquoted\",\"text\"],regex:\"(\\\\[)([A-Z]:)(.*?)(\\\\])\",comment:\"Inline fields\"},{token:[\"accent.constant.language\",\"pitch.constant.numeric\",\"duration.constant.numeric\"],regex:\"([\\\\^=_]*)([A-Ga-gz][,']*)([0-9]*/*[><0-9]*)\",comment:\"Notes\"},{token:\"zupfnoter.jumptarget.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\:.*?[\\\\\"!]',comment:\"Zupfnoter jumptarget\"},{token:\"zupfnoter.goto.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\@.*?[\\\\\"!]',comment:\"Zupfnoter goto\"},{token:\"zupfnoter.annotation.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\!.*?[\\\\\"!]',comment:\"Zupfnoter annoation\"},{token:\"zupfnoter.annotationref.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\#.*?[\\\\\"!]',comment:\"Zupfnoter annotation reference\"},{token:\"chordname.string.quoted\",regex:'[\\\\\"!]\\\\^.*?[\\\\\"!]',comment:\"abc chord\"},{token:\"string.quoted\",regex:'[\\\\\"!].*?[\\\\\"!]',comment:\"abc annotation\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"abc\"],name:\"ABC\",scopeName:\"text.abcnotation\"},r.inherits(s,i),t.ABCHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/abc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/abc_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./abc_highlight_rules\").ABCHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.$id=\"ace/mode/abc\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-actionscript.js",
    "content": "define(\"ace/mode/actionscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"support.class.actionscript.2\",regex:\"\\\\b(?:R(?:ecordset|DBMSResolver|adioButton(?:Group)?)|X(?:ML(?:Socket|Node|Connector)?|UpdateResolverDataHolder)|M(?:M(?:Save|Execute)|icrophoneMicrophone|o(?:use|vieClip(?:Loader)?)|e(?:nu(?:Bar)?|dia(?:Controller|Display|Playback))|ath)|B(?:yName|inding|utton)|S(?:haredObject|ystem|crollPane|t(?:yleSheet|age|ream)|ound|e(?:ndEvent|rviceObject)|OAPCall|lide)|N(?:umericStepper|et(?:stream|S(?:tream|ervices)|Connection|Debug(?:Config)?))|C(?:heckBox|o(?:ntextMenu(?:Item)?|okie|lor|m(?:ponentMixins|boBox))|ustomActions|lient|amera)|T(?:ypedValue|ext(?:Snapshot|Input|F(?:ield|ormat)|Area)|ree|AB)|Object|D(?:ownload|elta(?:Item|Packet)?|at(?:e(?:Chooser|Field)?|a(?:G(?:lue|rid)|Set|Type)))|U(?:RL|TC|IScrollBar)|P(?:opUpManager|endingCall|r(?:intJob|o(?:duct|gressBar)))|E(?:ndPoint|rror)|Video|Key|F(?:RadioButton|GridColumn|MessageBox|BarChart|S(?:croll(?:Bar|Pane)|tyleFormat|plitView)|orm|C(?:heckbox|omboBox|alendar)|unction|T(?:icker|ooltip(?:Lite)?|ree(?:Node)?)|IconButton|D(?:ataGrid|raggablePane)|P(?:ieChart|ushButton|ro(?:gressBar|mptBox))|L(?:i(?:stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(?:indow|SDLURL|ebService(?:Connector)?)|L(?:ist|o(?:calConnection|ad(?:er|Vars)|g)|a(?:unch|bel))|A(?:sBroadcaster|cc(?:ordion|essibility)|S(?:Set(?:Native|PropFlags)|N(?:ew|ative)|C(?:onstructor|lamp(?:2)?)|InstanceOf)|pplication|lert|rray))\\\\b\"},{token:\"support.function.actionscript.2\",regex:\"\\\\b(?:s(?:h(?:ift|ow(?:GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(?:ow|ePane))|c(?:hema|ale(?:X|Mode|Y|Content)|r(?:oll(?:Track|Drag)?|een(?:Resolution|Color|DPI)))|t(?:yleSheet|op(?:Drag|A(?:nimation|llSounds|gent))?|epSize|a(?:tus|rt(?:Drag|A(?:nimation|gent))?))|i(?:n|ze|lence(?:TimeOut|Level))|o(?:ngname|urce|rt(?:Items(?:By)?|On(?:HeaderRelease)?|able(?:Columns)?)?)|u(?:ppressInvalidCalls|bstr(?:ing)?)|p(?:li(?:ce|t)|aceCol(?:umnsEqually|lumnsEqually))|e(?:nd(?:DefaultPushButtonEvent|AndLoad)?|curity|t(?:R(?:GB|o(?:otNode|w(?:Height|Count))|esizable(?:Columns)?|a(?:nge|te))|G(?:ain|roupName)|X(?:AxisTitle)?|M(?:i(?:n(?:imum|utes)|lliseconds)|o(?:nth(?:Names)?|tionLevel|de)|ultilineMode|e(?:ssage|nu(?:ItemEnabled(?:At)?|EnabledAt)|dia)|a(?:sk|ximum))|B(?:u(?:tton(?:s|Width)|fferTime)|a(?:seTabIndex|ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Target|P(?:osition|roperties)|barState|Location)|t(?:yle(?:Property)?|opOnFocus|at(?:us|e))|i(?:ze|lenceLevel)|ort(?:able(?:Columns)?|Function)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)?|Style|Color|ed(?:Node(?:s)?|Cell|I(?:nd(?:ices|ex)|tem(?:s)?))?|able))|kin|m(?:oothness|allScroll))|H(?:ighlight(?:s|Color)|Scroll|o(?:urs|rizontal)|eader(?:Symbol|Height|Text|Property|Format|Width|Location)?|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:ode(?:Properties|ExpansionHandler)|ewTextFormat)|C(?:h(?:ildNodes|a(?:ngeHandler|rt(?:Title|EventHandler)))|o(?:ntent(?:Size)?|okie|lumns)|ell(?:Symbol|Data)|l(?:i(?:ckHandler|pboard)|oseHandler)|redentials)|T(?:ype(?:dVaule)?|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:out(?:Handler)?)?)|oggle|extFormat|ransform)|I(?:s(?:Branch|Open)|n(?:terval|putProperty)|con(?:SymbolName)?|te(?:rator|m(?:ByKey|Symbol)))|Orientation|D(?:i(?:splay(?:Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(?:pth(?:Below|To|Above)|fault(?:GatewayURL|Mappings|NodeIconSymbolName)|l(?:iveryMode|ay)|bug(?:ID)?)|a(?:yOfWeekNames|t(?:e(?:Filter)?|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Provider|All(?:Height|Property|Format|Width))?))|ra(?:wConnectors|gContent))|U(?:se(?:Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(?:osition|ercentComplete|an(?:e(?:M(?:inimumSize|aximumSize)|Size|Title))?|ro(?:pert(?:y(?:Data)?|iesAt)|gress))|E(?:nabled|dit(?:Handler|able)|xpand(?:NodeTrigger|erSymbolName))|V(?:Scroll|olume|alue(?:Source)?)|KeyFrameInterval|Quality|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:opback|adTarget)|a(?:rgeScroll|bel(?:Source|Placement)?))|A(?:s(?:Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:e(?:State(?:Handler)?|Handler)|ateHandler)|utoH(?:ideScrollBar|eight)))?|paratorBefore|ek|lect(?:ion(?:Disabled|Unfocused)?|ed(?:Node(?:s)?|Child|I(?:nd(?:ices|ex)|tem(?:s)?)|Dat(?:e|a))?|able(?:Ranges)?)|rver(?:String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(?:scroll(?:Policy)?|tml(?:Text)?|i(?:t(?:Test(?:TextNearPos)?|Area)|de(?:BuiltInItems|Child)?|ghlight(?:2D|3D)?)|orizontal|e(?:ight|ader(?:Re(?:nderer|lease)|Height|Text))|P(?:osition|ageScrollSize)|a(?:s(?:childNodes|MP3|S(?:creen(?:Broadcast|Playback)|treaming(?:Video|Audio)|ort)|Next|OwnProperty|Pr(?:inting|evious)|EmbeddedVideo|VideoEncoder|A(?:ccesibility|udio(?:Encoder)?))|ndlerName)|LineScrollSize)|ye(?:sLabel|ar)|n(?:o(?:t|de(?:Name|Close|Type|Open|Value)|Label)|u(?:llValue|mChild(?:S(?:creens|lides)|ren|Forms))|e(?:w(?:Item|line|Value|LocationDialog)|xt(?:S(?:cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(?:s)?)|c(?:h(?:ildNodes|eck|a(?:nge(?:sPending)?|r(?:CodeAt|At))|r)|o(?:s|n(?:st(?:ant|ructor)|nect|c(?:urrency|at)|t(?:ent(?:Type|Path)?|ains|rol(?:Placement|lerPolicy))|denseWhite|version)|py|l(?:or|umn(?:Stretch|Name(?:s)?|Count))|m(?:p(?:onent|lete)|ment))|u(?:stomItems|ePoint(?:s)?|r(?:veTo|Value|rent(?:Slide|ChildSlide|Item|F(?:ocused(?:S(?:creen|lide)|Form)|ps))))|e(?:il|ll(?:Renderer|Press|Edit|Focus(?:In|Out)))|l(?:i(?:ck|ents)|o(?:se(?:Button|Pane)?|ne(?:Node)?)|ear(?:S(?:haredObjects|treams)|Timeout|Interval)?)|a(?:ncelLabel|tch|p(?:tion|abilities)|l(?:cFields|l(?:e(?:e|r))?))|reate(?:GatewayConnection|Menu|Se(?:rver|gment)|C(?:hild(?:AtDepth)?|l(?:ient|ass(?:ChildAtDepth|Object(?:AtDepth)?))|all)|Text(?:Node|Field)|Item|Object(?:AtDepth)?|PopUp|E(?:lement|mptyMovieClip)))|t(?:h(?:is|row)|ype(?:of|Name)?|i(?:tle(?:StyleDeclaration)?|me(?:out)?)|o(?:talTime|String|olTipText|p|UpperCase|ggle(?:HighQuality)?|Lo(?:caleString|werCase))|e(?:st|llTarget|xt(?:RightMargin|Bold|S(?:ize|elected)|Height|Color|I(?:ndent|talic)|Disabled|Underline|F(?:ield|ont)|Width|LeftMargin|Align)?)|a(?:n|rget(?:Path)?|b(?:Stops|Children|Index|Enabled|leName))|r(?:y|igger|ac(?:e|k(?:AsMenu)?)))|i(?:s(?:Running|Branch|NaN|Con(?:soleOpen|nected)|Toggled|Installed|Open|D(?:own|ebugger)|P(?:urchased|ro(?:totypeOf|pertyEnumerable))|Empty|F(?:inite|ullyPopulated)|Local|Active)|n(?:s(?:tall|ertBefore)|cludeDeltaPacketInfo|t|it(?:ialize|Component|Pod|A(?:pplication|gent))?|de(?:nt|terminate|x(?:InParent(?:Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(?:F(?:ield|unction))?|t(?:e(?:ratorScrolled|m(?:s|RollO(?:ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(?:Case|White))|o(?:s|n(?:R(?:ollO(?:ut|ver)|e(?:s(?:ize|ult)|l(?:ease(?:Outside)?|aseOutside)))|XML|Mouse(?:Move|Down|Up|Wheel)|S(?:ync|croller|tatus|oundComplete|e(?:tFocus|lect(?:edItem)?))|N(?:oticeEvent|etworkChange)|C(?:hanged|onnect|l(?:ipEvent|ose))|ID3|D(?:isconnect|eactivate|ata|ragO(?:ut|ver))|Un(?:install|load)|P(?:aymentResult|ress)|EnterFrame|K(?:illFocus|ey(?:Down|Up))|Fault|Lo(?:ad|g)|A(?:ctiv(?:ity|ate)|ppSt(?:op|art)))?|pe(?:n|ration)|verLayChildren|kLabel|ldValue|r(?:d)?)|d(?:i(?:s(?:connect|play(?:Normal|ed(?:Month|Year)|Full)|able(?:Shader|d(?:Ranges|Days)|CloseBox|Events))|rection)|o(?:cTypeDecl|tall|Decoding|main|LazyDecoding)|u(?:plicateMovieClip|ration)|e(?:stroy(?:ChildAt|Object)|code|fault(?:PushButton(?:Enabled)?|KeydownHandler)?|l(?:ta(?:Packet(?:Changed)?)?|ete(?:PopUp|All)?)|blocking)|a(?:shBoardSave|yNames|ta(?:Provider)?|rkshadow)|r(?:opdown(?:Width)?|a(?:w|gO(?:ut|ver))))|u(?:se(?:Sort|HandCursor|Codepage|EchoSuppression)|n(?:shift|install|derline|escape|format|watch|lo(?:ck|ad(?:Movie(?:Num)?)?))|pdate(?:Results|Mode|I(?:nputProperties|tem(?:ByIndex)?)|P(?:acket|roperties)|View|AfterEvent)|rl)|join|p(?:ixelAspectRatio|o(?:sition|p|w)|u(?:sh|rge|blish)|ercen(?:tComplete|Loaded)|lay(?:head(?:Change|Time)|ing|Hidden|erType)?|a(?:ssword|use|r(?:se(?:XML|CSS|Int|Float)|ent(?:Node|Is(?:S(?:creen|lide)|Form))|ams))|r(?:int(?:Num|AsBitmap(?:Num)?)?|o(?:to(?:type)?|pert(?:y|ies)|gress)|e(?:ss|v(?:ious(?:S(?:ibling|lide)|Value)?|Scene|Frame)|ferred(?:Height|Width))))|e(?:scape|n(?:code(?:r)?|ter(?:Frame)?|dFill|able(?:Shader|d|CloseBox|Events))|dit(?:able|Field|LocationDialog)|v(?:ent|al(?:uate)?)|q|x(?:tended|p|ec(?:ute)?|actSettings)|m(?:phasized(?:StyleDeclaration)?|bedFonts))|v(?:i(?:sible|ewPod)|ScrollPolicy|o(?:id|lume)|ersion|P(?:osition|ageScrollSize)|a(?:l(?:idat(?:ionError|e(?:Property|ActivationKey)?)|ue(?:Of)?)|riable)|LineScrollSize)|k(?:ind|ey(?:Down|Up|Press|FrameInterval))|q(?:sort|uality)|f(?:scommand|i(?:n(?:d(?:Text|First|Last)?|ally)|eldInfo|lter(?:ed|Func)?|rst(?:Slide|Child|DayOfWeek|VisibleNode)?)|o(?:nt|cus(?:In|edCell|Out|Enabled)|r(?:egroundDisabled|mat(?:ter)?))|unctionName|ps|l(?:oor|ush)|ace|romCharCode)|w(?:i(?:th|dth)|ordWrap|atch|riteAccess)|l(?:t|i(?:st(?:Owner)?|ne(?:Style|To))|o(?:c(?:k|a(?:t(?:ion|eByld)|l(?:ToGlobal|FileReadDisable)))|opback|ad(?:Movie(?:Num)?|S(?:crollContent|ound)|ed|Variables(?:Num)?|Application)?|g(?:Changes)?)|e(?:ngth|ft(?:Margin)?|ading)?|a(?:st(?:Slide|Child|Index(?:Of)?)?|nguage|b(?:el(?:Placement|F(?:ield|unction))?|leField)))|a(?:s(?:scociate(?:Controller|Display)|in|pectRatio|function)|nd|c(?:ceptConnection|tiv(?:ityLevel|ePlayControl)|os)|t(?:t(?:ach(?:Movie|Sound|Video|Audio)|ributes)|an(?:2)?)|dd(?:header|RequestHeader|Menu(?:Item(?:At)?|At)?|Sort|Header|No(?:tice|de(?:At)?)|C(?:olumn(?:At)?|uePoint)|T(?:oLocalInternetCache|reeNode(?:At)?)|I(?:con|tem(?:s(?:At)?|At)?)|DeltaItem|P(?:od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(?:Size|Play|KeyNav|Load)|pp(?:endChild|ly(?:Changes|Updates)?)|vHardwareDisable|fterLoaded|l(?:ternateRowColors|ign|l(?:ow(?:InsecureDomain|Domain)|Transitions(?:InDone|OutDone))|bum)|r(?:tist|row|g(?:uments|List))|gent|bs)|r(?:ight(?:Margin)?|o(?:ot(?:S(?:creen|lide)|Form)|und|w(?:Height|Count)|llO(?:ut|ver))|e(?:s(?:yncDepth|t(?:orePane|artAnimation|rict)|iz(?:e|able(?:Columns)?)|olveDelta|ult(?:s)?|ponse)|c(?:o(?:ncile(?:Results|Updates)|rd)|eive(?:Video|Audio))|draw|jectConnection|place(?:Sel|ItemAt|AllItems)?|ve(?:al(?:Child)?|rse)|quest(?:SizeChange|Payment)?|f(?:errer|resh(?:ScrollContent|Destinations|Pane|FromSources)?)|lease(?:Outside)?|ad(?:Only|Access)|gister(?:SkinElement|C(?:olor(?:Style|Name)|lass)|InheritingStyle|Proxy)|move(?:Range|M(?:ovieClip|enu(?:Item(?:At)?|At))|Background|Sort|No(?:tice|de(?:sAt|At)?)|C(?:olum(?:nAt|At)|uePoints)|T(?:extField|reeNode(?:At)?)|Item(?:At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(?:C(?:olumns|uePoints)|Items)?))|a(?:ndom|te|dioDot))|g(?:t|oto(?:Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(?:Stop|Play))|e(?:nre|t(?:R(?:GB|o(?:otNode|wCount)|e(?:sizable|mote))|X(?:AxisTitle)?|M(?:i(?:n(?:imum(?:Size)?|utes)|lliseconds)|onth(?:Names)?|ultilineMode|e(?:ssage|nu(?:ItemAt|EnabledAt|At))|aximum(?:Size)?)|B(?:ytes(?:Total|Loaded)|ounds|utton(?:s|Width)|eginIndex|a(?:ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Position|barState|Location)|t(?:yle(?:Names)?|opOnFocus|ate)|ize|o(?:urce|rtState)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)|Style|ed(?:Node(?:s)?|Cell|Text|I(?:nd(?:ices|ex)|tem(?:s)?))?)|rvice)|moothness|WFVersion)|H(?:ighlight(?:s|Color)|ours|e(?:ight|ader(?:Height|Text|Property|Format|Width|Location)?)|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:o(?:tices|de(?:DisplayedAt|At))|um(?:Children|berAvailable)|e(?:wTextFormat|xtHighestDepth))|C(?:h(?:ild(?:S(?:creen|lide)|Nodes|Form|At)|artTitle)|o(?:n(?:tent|figInfo)|okie|de|unt|lumn(?:Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(?:ll|retIndex))|T(?:ypedValue|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:stamp|zoneOffset|out(?:State|Handler)|r)?)|oggle|ext(?:Extent|Format)?|r(?:ee(?:NodeAt|Length)|ans(?:form|actionId)))|I(?:s(?:Branch|Open)|n(?:stanceAtDepth|d(?:icesByKey|exByKey))|con(?:SymbolName)?|te(?:rator|m(?:sByKey|By(?:Name|Key)|id|ID|At))|d)|O(?:utput(?:Parameter(?:s|ByName)?|Value(?:s)?)|peration|ri(?:entation|ginalCellData))|D(?:i(?:s(?:play(?:Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(?:pth|faultNodeIconSymbolName|l(?:taPacket|ay)|bug(?:Config|ID)?)|a(?:y(?:OfWeekNames)?|t(?:e|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Label|All(?:Height|Property|Format|Width))?))|rawConnectors)|U(?:se(?:Shadow|HandCursor|rInput|Fade)|RL|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear))|P(?:o(?:sition|ds)|ercentComplete|a(?:n(?:e(?:M(?:inimums|aximums)|Height|Title|Width))?|rentNode)|r(?:operty(?:Name|Data)?|efer(?:ences|red(?:Height|Width))))|E(?:n(?:dIndex|abled)|ditingData|x(?:panderSymbolName|andNodeTrigger))|V(?:iewed(?:Pods|Applications)|olume|ersion|alue(?:Source)?)|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|o(?:ntList|cus)|ullYear|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:cal|adTarget)|ength|a(?:stTabIndex|bel(?:Source)?))|A(?:s(?:cii|Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:eState(?:Handler)?|ateHandler)|utoH(?:ideScrollBar|eight)|llItems|gent))?)?|lobal(?:StyleFormat|ToLocal)?|ain|roupName)|x(?:updatePackety|mlDecl)?|m(?:y(?:MethodName|Call)|in(?:imum)?|o(?:nthNames|tion(?:TimeOut|Level)|de(?:lChanged)?|use(?:Move|O(?:ut|ver)|Down(?:Somewhere|Outside)?|Up(?:Somewhere)?|WheelEnabled)|ve(?:To)?)|u(?:ted|lti(?:pleS(?:imultaneousAllowed|elections)|line))|e(?:ssage|nu(?:Show|Hide)?|th(?:od)?|diaType)|a(?:nufacturer|tch|x(?:scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(?:substring|chr|ord|length))|b(?:ytes(?:Total|Loaded)|indFormat(?:Strings|Function)|o(?:ttom(?:Scroll)?|ld|rder(?:Color)?)|u(?:tton(?:Height|Width)|iltInItems|ffer(?:Time|Length)|llet)|e(?:foreApplyUpdates|gin(?:GradientFill|Fill))|lockIndent|a(?:ndwidth|ckground(?:Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\\\\b\"},{token:\"support.constant.actionscript.2\",regex:\"\\\\b(?:__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\\\\b\"},{token:\"keyword.control.actionscript.2\",regex:\"\\\\b(?:dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\\\\b\"},{token:\"storage.type.actionscript.2\",regex:\"\\\\b(?:Boolean|Number|String|Void)\\\\b\"},{token:\"constant.language.actionscript.2\",regex:\"\\\\b(?:null|undefined|true|false)\\\\b\"},{token:\"constant.numeric.actionscript.2\",regex:\"\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"punctuation.definition.string.begin.actionscript.2\",regex:'\"',push:[{token:\"punctuation.definition.string.end.actionscript.2\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.actionscript.2\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.actionscript.2\"}]},{token:\"punctuation.definition.string.begin.actionscript.2\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.actionscript.2\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.actionscript.2\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.actionscript.2\"}]},{token:\"support.constant.actionscript.2\",regex:\"\\\\b(?:BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\\\\b\"},{token:\"punctuation.definition.comment.actionscript.2\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.actionscript.2\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.actionscript.2\"}]},{token:\"punctuation.definition.comment.actionscript.2\",regex:\"//.*$\",push_:[{token:\"comment.line.double-slash.actionscript.2\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-slash.actionscript.2\"}]},{token:\"keyword.operator.actionscript.2\",regex:\"\\\\binstanceof\\\\b\"},{token:\"keyword.operator.symbolic.actionscript.2\",regex:\"[-!%&*+=/?:]\"},{token:[\"meta.preprocessor.actionscript.2\",\"punctuation.definition.preprocessor.actionscript.2\",\"meta.preprocessor.actionscript.2\"],regex:\"^([ \\\\t]*)(#)([a-zA-Z]+)\"},{token:[\"storage.type.function.actionscript.2\",\"meta.function.actionscript.2\",\"entity.name.function.actionscript.2\",\"meta.function.actionscript.2\",\"punctuation.definition.parameters.begin.actionscript.2\"],regex:\"\\\\b(function)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()\",push:[{token:\"punctuation.definition.parameters.end.actionscript.2\",regex:\"\\\\)\",next:\"pop\"},{token:\"variable.parameter.function.actionscript.2\",regex:\"[^,)$]+\"},{defaultToken:\"meta.function.actionscript.2\"}]},{token:[\"storage.type.class.actionscript.2\",\"meta.class.actionscript.2\",\"entity.name.type.class.actionscript.2\",\"meta.class.actionscript.2\",\"storage.modifier.extends.actionscript.2\",\"meta.class.actionscript.2\",\"entity.other.inherited-class.actionscript.2\"],regex:\"\\\\b(class)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*)(?:(\\\\s+)(extends)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*))?\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"as\"],keyEquivalent:\"^~A\",name:\"ActionScript\",scopeName:\"source.actionscript.2\"},r.inherits(s,i),t.ActionScriptHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/actionscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/actionscript_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./actionscript_highlight_rules\").ActionScriptHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/actionscript\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-ada.js",
    "content": "define(\"ace/mode/ada_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|body|private|then|if|procedure|type|case|in|protected|constant|interface|until||is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor\",t=\"true|false|null\",n=\"count|min|max|avg|sum|rank|now|coalesce|main\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.AdaHighlightRules=s}),define(\"ace/mode/ada\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ada_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ada_highlight_rules\").AdaHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*(begin|loop|then|is|do)\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){var r=t+n;return r.match(/^\\s*(begin|end)$/)?!0:!1},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=t.getLine(n-1),s=this.$getIndent(i).length,u=this.$getIndent(r).length;if(u<=s)return;t.outdentRows(new o(n,0,n+2,0))},this.$id=\"ace/mode/ada\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-apache_conf.js",
    "content": "define(\"ace/mode/apache_conf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"punctuation.definition.comment.apacheconf\",\"comment.line.hash.ini\",\"comment.line.hash.ini\"],regex:\"^((?:\\\\s)*)(#)(.*$)\"},{token:[\"punctuation.definition.tag.apacheconf\",\"entity.tag.apacheconf\",\"text\",\"string.value.apacheconf\",\"punctuation.definition.tag.apacheconf\"],regex:\"(<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(?:(\\\\s)(.+?))?(>)\"},{token:[\"punctuation.definition.tag.apacheconf\",\"entity.tag.apacheconf\",\"punctuation.definition.tag.apacheconf\"],regex:\"(</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(>)\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"string.regexp.apacheconf\",\"text\",\"string.replacement.apacheconf\",\"text\"],regex:\"(Rewrite(?:Rule|Cond))(\\\\s+)(.+?)(\\\\s+)(.+?)($|\\\\s)\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"entity.status.apacheconf\",\"text\",\"string.regexp.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(RedirectMatch)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"entity.status.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(Redirect)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"string.regexp.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(ScriptAliasMatch|AliasMatch)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)(\\\\s))?\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?\"},{token:\"keyword.core.apacheconf\",regex:\"\\\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\\\b\"},{token:\"keyword.mpm.apacheconf\",regex:\"\\\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\\\b\"},{token:\"keyword.access.apacheconf\",regex:\"\\\\b(?:Allow|Deny|Order)\\\\b\"},{token:\"keyword.actions.apacheconf\",regex:\"\\\\b(?:Action|Script)\\\\b\"},{token:\"keyword.alias.apacheconf\",regex:\"\\\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\\\b\"},{token:\"keyword.auth.apacheconf\",regex:\"\\\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\\\b\"},{token:\"keyword.auth_anon.apacheconf\",regex:\"\\\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\\\b\"},{token:\"keyword.auth_dbm.apacheconf\",regex:\"\\\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\\\b\"},{token:\"keyword.auth_digest.apacheconf\",regex:\"\\\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\\\b\"},{token:\"keyword.auth_ldap.apacheconf\",regex:\"\\\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\\\b\"},{token:\"keyword.autoindex.apacheconf\",regex:\"\\\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\\\b\"},{token:\"keyword.cache.apacheconf\",regex:\"\\\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\\\b\"},{token:\"keyword.cern_meta.apacheconf\",regex:\"\\\\b(?:MetaDir|MetaFiles|MetaSuffix)\\\\b\"},{token:\"keyword.cgi.apacheconf\",regex:\"\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\\\b\"},{token:\"keyword.cgid.apacheconf\",regex:\"\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\\\b\"},{token:\"keyword.charset_lite.apacheconf\",regex:\"\\\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\\\b\"},{token:\"keyword.dav.apacheconf\",regex:\"\\\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\\\b\"},{token:\"keyword.deflate.apacheconf\",regex:\"\\\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\\\b\"},{token:\"keyword.dir.apacheconf\",regex:\"\\\\b(?:DirectoryIndex|DirectorySlash)\\\\b\"},{token:\"keyword.disk_cache.apacheconf\",regex:\"\\\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\\\b\"},{token:\"keyword.dumpio.apacheconf\",regex:\"\\\\b(?:DumpIOInput|DumpIOOutput)\\\\b\"},{token:\"keyword.env.apacheconf\",regex:\"\\\\b(?:PassEnv|SetEnv|UnsetEnv)\\\\b\"},{token:\"keyword.expires.apacheconf\",regex:\"\\\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\\\b\"},{token:\"keyword.ext_filter.apacheconf\",regex:\"\\\\b(?:ExtFilterDefine|ExtFilterOptions)\\\\b\"},{token:\"keyword.file_cache.apacheconf\",regex:\"\\\\b(?:CacheFile|MMapFile)\\\\b\"},{token:\"keyword.headers.apacheconf\",regex:\"\\\\b(?:Header|RequestHeader)\\\\b\"},{token:\"keyword.imap.apacheconf\",regex:\"\\\\b(?:ImapBase|ImapDefault|ImapMenu)\\\\b\"},{token:\"keyword.include.apacheconf\",regex:\"\\\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\\\b\"},{token:\"keyword.isapi.apacheconf\",regex:\"\\\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\\\b\"},{token:\"keyword.ldap.apacheconf\",regex:\"\\\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\\\b\"},{token:\"keyword.log.apacheconf\",regex:\"\\\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\\\b\"},{token:\"keyword.mem_cache.apacheconf\",regex:\"\\\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\\\b\"},{token:\"keyword.mime.apacheconf\",regex:\"\\\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\\\b\"},{token:\"keyword.misc.apacheconf\",regex:\"\\\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\\\b\"},{token:\"keyword.negotiation.apacheconf\",regex:\"\\\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\\\b\"},{token:\"keyword.nw_ssl.apacheconf\",regex:\"\\\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\\\b\"},{token:\"keyword.proxy.apacheconf\",regex:\"\\\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\\\b\"},{token:\"keyword.rewrite.apacheconf\",regex:\"\\\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\\\b\"},{token:\"keyword.setenvif.apacheconf\",regex:\"\\\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\\\b\"},{token:\"keyword.so.apacheconf\",regex:\"\\\\b(?:LoadFile|LoadModule)\\\\b\"},{token:\"keyword.ssl.apacheconf\",regex:\"\\\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\\\b\"},{token:\"keyword.usertrack.apacheconf\",regex:\"\\\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\\\b\"},{token:\"keyword.vhost_alias.apacheconf\",regex:\"\\\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\\\b\"},{token:[\"keyword.php.apacheconf\",\"text\",\"entity.property.apacheconf\",\"text\",\"string.value.apacheconf\",\"text\"],regex:\"\\\\b(php_value|php_flag)\\\\b(?:(\\\\s+)(.+?)(?:(\\\\s+)(.+?))?)?(\\\\s)\"},{token:[\"punctuation.variable.apacheconf\",\"variable.env.apacheconf\",\"variable.misc.apacheconf\",\"punctuation.variable.apacheconf\"],regex:\"(%\\\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\\\})\"},{token:[\"entity.mime-type.apacheconf\",\"text\"],regex:\"\\\\b((?:text|image|application|video|audio)/.+?)(\\\\s)\"},{token:\"entity.helper.apacheconf\",regex:\"\\\\b(?:from|unset|set|on|off)\\\\b\",caseInsensitive:!0},{token:\"constant.integer.apacheconf\",regex:\"\\\\b\\\\d+\\\\b\"},{token:[\"text\",\"punctuation.definition.flag.apacheconf\",\"string.flag.apacheconf\",\"punctuation.definition.flag.apacheconf\",\"text\"],regex:\"(\\\\s)(\\\\[)(.*?)(\\\\])(\\\\s)\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"conf\",\"CONF\",\"htaccess\",\"HTACCESS\",\"htgroups\",\"HTGROUPS\",\"htpasswd\",\"HTPASSWD\",\".htaccess\",\".HTACCESS\",\".htgroups\",\".HTGROUPS\",\".htpasswd\",\".HTPASSWD\"],name:\"Apache Conf\",scopeName:\"source.apacheconf\"},r.inherits(s,i),t.ApacheConfHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/apache_conf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apache_conf_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./apache_conf_highlight_rules\").ApacheConfHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/apache_conf\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-apex.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/apex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../mode/text_highlight_rules\").TextHighlightRules,s=e(\"../mode/doc_comment_highlight_rules\").DocCommentHighlightRules,o=function(){function t(t){return t.slice(-3)==\"__c\"?\"support.function\":e(t)}function n(e,t){return{regex:e+(t.multiline?\"\":\"(?=.)\"),token:\"string.start\",next:[{regex:t.escape,token:\"character.escape\"},{regex:t.error,token:\"error.invalid\"},{regex:e+(t.multiline?\"\":\"|$\"),token:\"string.end\",next:t.next||\"start\"},{defaultToken:\"string\"}]}}function r(){return[{token:\"comment\",regex:\"\\\\/\\\\/(?=.)\",next:[s.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}]},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:[s.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var e=this.createKeywordMapper({\"variable.language\":\"activate|any|autonomous|begin|bigdecimal|byte|cast|char|collect|const|end|exit|export|float|goto|group|having|hint|import|inner|into|join|loop|number|object|of|outer|parallel|pragma|retrieve|returning|search|short|stat|synchronized|then|this_month|transaction|type|when\",keyword:\"private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final|and|array|as|asc|break|bulk|by|catch|class|commit|continue|convertcurrency|delete|desc|do|else|enum|extends|false|final|finally|for|from|future|global|if|implements|in|insert|instanceof|interface|last_90_days|last_month|last_n_days|last_week|like|limit|list|map|merge|new|next_90_days|next_month|next_n_days|next_week|not|null|nulls|on|or|override|package|return|rollback|savepoint|select|set|sort|super|testmethod|this|this_week|throw|today|tolabel|tomorrow|trigger|true|try|undelete|update|upsert|using|virtual|webservice|where|while|yesterday|switch|case|default\",\"storage.type\":\"def|boolean|byte|char|short|int|float|pblob|date|datetime|decimal|double|id|integer|long|string|time|void|blob|Object\",\"constant.language\":\"true|false|null|after|before|count|excludes|first|includes|last|order|sharing|with\",\"support.function\":\"system|apex|label|apexpages|userinfo|schema\"},\"identifier\",!0);this.$rules={start:[n(\"'\",{escape:/\\\\[nb'\"\\\\]/,error:/\\\\./,multiline:!1}),r(\"c\"),{type:\"decoration\",token:[\"meta.package.apex\",\"keyword.other.package.apex\",\"meta.package.apex\",\"storage.modifier.package.apex\",\"meta.package.apex\",\"punctuation.terminator.apex\"],regex:/^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*)((?:;)?))?/},{regex:/@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,token:\"constant.language\"},{regex:/[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,token:t},{regex:\"`#%\",token:\"error.invalid\"},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[LlDdEe][+-]?\\d+)?)\\b|\\.\\d+[LlDdEe]/},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[]/,next:\"maybe_soql\",merge:!1},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\",merge:!1},{token:\"paren.rparen\",regex:/[\\])}]/,merge:!1}],maybe_soql:[{regex:/\\s+/,token:\"text\"},{regex:/(SELECT|FIND)\\b/,token:\"keyword\",caseInsensitive:!0,next:\"soql\"},{regex:\"\",token:\"none\",next:\"start\"}],soql:[{regex:\"(:?ASC|BY|CATEGORY|CUBE|DATA|DESC|END|FIND|FIRST|FOR|FROM|GROUP|HAVING|IN|LAST|LIMIT|NETWORK|NULLS|OFFSET|ORDER|REFERENCE|RETURNING|ROLLUP|SCOPE|SELECT|SNIPPET|TRACKING|TYPEOF|UPDATE|USING|VIEW|VIEWSTAT|WHERE|WITH|AND|OR)\\\\b\",token:\"keyword\",caseInsensitive:!0},{regex:\"(:?target_length|toLabel|convertCurrency|count|Contact|Account|User|FIELDS)\\\\b\",token:\"support.function\",caseInsensitive:!0},{token:\"paren.rparen\",regex:/[\\]]/,next:\"start\",merge:!1},n(\"'\",{escape:/\\\\[nb'\"\\\\]/,error:/\\\\./,multiline:!1,next:\"soql\"}),n('\"',{escape:/\\\\[nb'\"\\\\]/,error:/\\\\./,multiline:!1,next:\"soql\"}),{regex:/\\\\./,token:\"character.escape\"},{regex:/[\\?\\&\\|\\!\\{\\}\\[\\]\\(\\)\\^\\~\\*\\:\\\"\\'\\+\\-\\,\\.=\\\\\\/]/,token:\"keyword.operator\"}],\"log-start\":[{token:\"timestamp.invisible\",regex:/^[\\d:.() ]+\\|/,next:\"log-header\"},{token:\"timestamp.invisible\",regex:/^  (Number of|Maximum)[^:]*:/,next:\"log-comment\"},{token:\"invisible\",regex:/^Execute Anonymous:/,next:\"log-comment\"},{defaultToken:\"text\"}],\"log-comment\":[{token:\"log-comment\",regex:/.*$/,next:\"log-start\"}],\"log-header\":[{token:\"timestamp.invisible\",regex:/((USER_DEBUG|\\[\\d+\\]|DEBUG)\\|)+/},{token:\"keyword\",regex:\"(?:EXECUTION_FINISHED|EXECUTION_STARTED|CODE_UNIT_STARTED|CUMULATIVE_LIMIT_USAGE|LIMIT_USAGE_FOR_NS|CUMULATIVE_LIMIT_USAGE_END|CODE_UNIT_FINISHED)\"},{regex:\"\",next:\"log-start\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,i),t.ApexHighlightRules=o}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/apex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apex_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";function a(){i.call(this),this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=new u}var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./apex_highlight_rules\").ApexHighlightRules,o=e(\"../mode/folding/cstyle\").FoldMode,u=e(\"../mode/behaviour/cstyle\").CstyleBehaviour;r.inherits(a,i),a.prototype.lineCommentStart=\"//\",a.prototype.blockComment={start:\"/*\",end:\"*/\"},t.Mode=a});                (function() {\n                    window.require([\"ace/mode/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-applescript.js",
    "content": "define(\"ace/mode/applescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"about|above|after|against|and|around|as|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|contain|contains|continue|copy|div|does|eighth|else|end|equal|equals|error|every|exit|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|into|is|it|its|last|local|me|middle|mod|my|ninth|not|of|on|onto|or|over|prop|property|put|ref|reference|repeat|returning|script|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|try|until|where|while|whose|with|without\",t=\"AppleScript|false|linefeed|return|pi|quote|result|space|tab|true\",n=\"activate|beep|count|delay|launch|log|offset|read|round|run|say|summarize|write\",r=\"alias|application|boolean|class|constant|date|file|integer|list|number|real|record|string|text|character|characters|contents|day|frontmost|id|item|length|month|name|paragraph|paragraphs|rest|reverse|running|time|version|weekday|word|words|year\",i=this.createKeywordMapper({\"support.function\":n,\"constant.language\":t,\"support.type\":r,keyword:e},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\(\\\\*\",next:\"comment\"},{token:\"string\",regex:'\".*?\"'},{token:\"support.type\",regex:\"\\\\b(POSIX file|POSIX path|(date|time) string|quoted form)\\\\b\"},{token:\"support.function\",regex:\"\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\\\b|^\\\\s*return\\\\b\"},{token:\"constant.language\",regex:\"\\\\b(text item delimiters|current application|missing value)\\\\b\"},{token:\"keyword\",regex:\"\\\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference))\\\\b\"},{token:i,regex:\"[a-zA-Z][a-zA-Z0-9_]*\\\\b\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\)\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.AppleScriptHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/applescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/applescript_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./applescript_highlight_rules\").AppleScriptHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"(*\",end:\"*)\"},this.$id=\"ace/mode/applescript\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-asciidoc.js",
    "content": "define(\"ace/mode/asciidoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){function t(e){var t=/\\w/.test(e)?\"\\\\b\":\"(?:\\\\B|^)\";return t+e+\"[^\"+e+\"].*?\"+e+\"(?![\\\\w*])\"}var e=\"[a-zA-Z\\u00a1-\\uffff]+\\\\b\";this.$rules={start:[{token:\"empty\",regex:/$/},{token:\"literal\",regex:/^\\.{4,}\\s*$/,next:\"listingBlock\"},{token:\"literal\",regex:/^-{4,}\\s*$/,next:\"literalBlock\"},{token:\"string\",regex:/^\\+{4,}\\s*$/,next:\"passthroughBlock\"},{token:\"keyword\",regex:/^={4,}\\s*$/},{token:\"text\",regex:/^\\s*$/},{token:\"empty\",regex:\"\",next:\"dissallowDelimitedBlock\"}],dissallowDelimitedBlock:[{include:\"paragraphEnd\"},{token:\"comment\",regex:\"^//.+$\"},{token:\"keyword\",regex:\"^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):\"},{include:\"listStart\"},{token:\"literal\",regex:/^\\s+.+$/,next:\"indentedBlock\"},{token:\"empty\",regex:\"\",next:\"text\"}],paragraphEnd:[{token:\"doc.comment\",regex:/^\\/{4,}\\s*$/,next:\"commentBlock\"},{token:\"tableBlock\",regex:/^\\s*[|!]=+\\s*$/,next:\"tableBlock\"},{token:\"keyword\",regex:/^(?:--|''')\\s*$/,next:\"start\"},{token:\"option\",regex:/^\\[.*\\]\\s*$/,next:\"start\"},{token:\"pageBreak\",regex:/^>{3,}$/,next:\"start\"},{token:\"literal\",regex:/^\\.{4,}\\s*$/,next:\"listingBlock\"},{token:\"titleUnderline\",regex:/^(?:={2,}|-{2,}|~{2,}|\\^{2,}|\\+{2,})\\s*$/,next:\"start\"},{token:\"singleLineTitle\",regex:/^={1,5}\\s+\\S.*$/,next:\"start\"},{token:\"otherBlock\",regex:/^(?:\\*{2,}|_{2,})\\s*$/,next:\"start\"},{token:\"optionalTitle\",regex:/^\\.[^.\\s].+$/,next:\"start\"}],listStart:[{token:\"keyword\",regex:/^\\s*(?:\\d+\\.|[a-zA-Z]\\.|[ixvmIXVM]+\\)|\\*{1,5}|-|\\.{1,5})\\s/,next:\"listText\"},{token:\"meta.tag\",regex:/^.+(?::{2,4}|;;)(?: |$)/,next:\"listText\"},{token:\"support.function.list.callout\",regex:/^(?:<\\d+>|\\d+>|>) /,next:\"text\"},{token:\"keyword\",regex:/^\\+\\s*$/,next:\"start\"}],text:[{token:[\"link\",\"variable.language\"],regex:/((?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+)(\\[.*?\\])/},{token:\"link\",regex:/(?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+/},{token:\"link\",regex:/\\b[\\w\\.\\/\\-]+@[\\w\\.\\/\\-]+\\b/},{include:\"macros\"},{include:\"paragraphEnd\"},{token:\"literal\",regex:/\\+{3,}/,next:\"smallPassthrough\"},{token:\"escape\",regex:/\\((?:C|TM|R)\\)|\\.{3}|->|<-|=>|<=|&#(?:\\d+|x[a-fA-F\\d]+);|(?: |^)--(?=\\s+\\S)/},{token:\"escape\",regex:/\\\\[_*'`+#]|\\\\{2}[_*'`+#]{2}/},{token:\"keyword\",regex:/\\s\\+$/},{token:\"text\",regex:e},{token:[\"keyword\",\"string\",\"keyword\"],regex:/(<<[\\w\\d\\-$]+,)(.*?)(>>|$)/},{token:\"keyword\",regex:/<<[\\w\\d\\-$]+,?|>>/},{token:\"constant.character\",regex:/\\({2,3}.*?\\){2,3}/},{token:\"keyword\",regex:/\\[\\[.+?\\]\\]/},{token:\"support\",regex:/^\\[{3}[\\w\\d =\\-]+\\]{3}/},{include:\"quotes\"},{token:\"empty\",regex:/^\\s*$/,next:\"start\"}],listText:[{include:\"listStart\"},{include:\"text\"}],indentedBlock:[{token:\"literal\",regex:/^[\\s\\w].+$/,next:\"indentedBlock\"},{token:\"literal\",regex:\"\",next:\"start\"}],listingBlock:[{token:\"literal\",regex:/^\\.{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"constant.numeric\",regex:\"<\\\\d+>\"},{token:\"literal\",regex:\"[^<]+\"},{token:\"literal\",regex:\"<\"}],literalBlock:[{token:\"literal\",regex:/^-{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"constant.numeric\",regex:\"<\\\\d+>\"},{token:\"literal\",regex:\"[^<]+\"},{token:\"literal\",regex:\"<\"}],passthroughBlock:[{token:\"literal\",regex:/^\\+{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"literal\",regex:e+\"|\\\\d+\"},{include:\"macros\"},{token:\"literal\",regex:\".\"}],smallPassthrough:[{token:\"literal\",regex:/[+]{3,}/,next:\"dissallowDelimitedBlock\"},{token:\"literal\",regex:/^\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"literal\",regex:e+\"|\\\\d+\"},{include:\"macros\"}],commentBlock:[{token:\"doc.comment\",regex:/^\\/{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"doc.comment\",regex:\"^.*$\"}],tableBlock:[{token:\"tableBlock\",regex:/^\\s*\\|={3,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"tableBlock\",regex:/^\\s*!={3,}\\s*$/,next:\"innerTableBlock\"},{token:\"tableBlock\",regex:/\\|/},{include:\"text\",noEscape:!0}],innerTableBlock:[{token:\"tableBlock\",regex:/^\\s*!={3,}\\s*$/,next:\"tableBlock\"},{token:\"tableBlock\",regex:/^\\s*|={3,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"tableBlock\",regex:/!/}],macros:[{token:\"macro\",regex:/{[\\w\\-$]+}/},{token:[\"text\",\"string\",\"text\",\"constant.character\",\"text\"],regex:/({)([\\w\\-$]+)(:)?(.+)?(})/},{token:[\"text\",\"markup.list.macro\",\"keyword\",\"string\"],regex:/(\\w+)(footnote(?:ref)?::?)([^\\s\\[]+)?(\\[.*?\\])?/},{token:[\"markup.list.macro\",\"keyword\",\"string\"],regex:/([a-zA-Z\\-][\\w\\.\\/\\-]*::?)([^\\s\\[]+)(\\[.*?\\])?/},{token:[\"markup.list.macro\",\"keyword\"],regex:/([a-zA-Z\\-][\\w\\.\\/\\-]+::?)(\\[.*?\\])/},{token:\"keyword\",regex:/^:.+?:(?= |$)/}],quotes:[{token:\"string.italic\",regex:/__[^_\\s].*?__/},{token:\"string.italic\",regex:t(\"_\")},{token:\"keyword.bold\",regex:/\\*\\*[^*\\s].*?\\*\\*/},{token:\"keyword.bold\",regex:t(\"\\\\*\")},{token:\"literal\",regex:t(\"\\\\+\")},{token:\"literal\",regex:/\\+\\+[^+\\s].*?\\+\\+/},{token:\"literal\",regex:/\\$\\$.+?\\$\\$/},{token:\"literal\",regex:t(\"`\")},{token:\"keyword\",regex:t(\"^\")},{token:\"keyword\",regex:t(\"~\")},{token:\"keyword\",regex:/##?/},{token:\"keyword\",regex:/(?:\\B|^)``|\\b''/}]};var n={macro:\"constant.character\",tableBlock:\"doc.comment\",titleUnderline:\"markup.heading\",singleLineTitle:\"markup.heading\",pageBreak:\"string\",option:\"string.regexp\",otherBlock:\"markup.list\",literal:\"support.function\",optionalTitle:\"constant.numeric\",escape:\"constant.language.escape\",link:\"markup.underline.list\"};for(var r in this.$rules){var i=this.$rules[r];for(var s=i.length;s--;){var o=i[s];if(o.include||typeof o==\"string\"){var u=[s,1].concat(this.$rules[o.include||o]);o.noEscape&&(u=u.filter(function(e){return!e.next})),i.splice.apply(i,u)}else o.token in n&&(o.token=n[o.token])}}};r.inherits(s,i),t.AsciidocHighlightRules=s}),define(\"ace/mode/folding/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:\\|={10,}|[\\.\\/=\\-~^+]{4,}\\s*$|={1,5} )/,this.singleLineHeadingRe=/^={1,5}(?=\\s+\\S)/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]==\"=\"?this.singleLineHeadingRe.test(r)?\"start\":e.getLine(n-1).length!=e.getLine(n).length?\"\":\"start\":e.bgTokenizer.getState(n)==\"dissallowDelimitedBlock\"?\"end\":\"start\":\"\"},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type}function d(){var t=f.value.match(p);if(t)return t[0].length;var r=c.indexOf(f.value[0])+1;return r==1&&e.getLine(n-1).length!=e.getLine(n).length?Infinity:r}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;var f,c=[\"=\",\"-\",\"~\",\"^\",\"+\"],h=\"markup.heading\",p=this.singleLineHeadingRe;if(l(n)==h){var v=d();while(++n<o){if(l(n)!=h)continue;var m=d();if(m<=v)break}var g=f&&f.value.match(this.singleLineHeadingRe);a=g?n-1:n-2;if(a>u)while(a>u&&(!l(a)||f.value[0]==\"[\"))a--;if(a>u){var y=e.getLine(a).length;return new s(u,i,a,y)}}else{var b=e.bgTokenizer.getState(n);if(b==\"dissallowDelimitedBlock\"){while(n-->0)if(e.bgTokenizer.getState(n).lastIndexOf(\"Block\")==-1)break;a=n+1;if(a<u){var y=e.getLine(n).length;return new s(a,5,u,i-5)}}else{while(++n<o)if(e.bgTokenizer.getState(n)==\"dissallowDelimitedBlock\")break;a=n;if(a>u){var y=e.getLine(n).length;return new s(u,5,a,y-5)}}}}}.call(o.prototype)}),define(\"ace/mode/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asciidoc_highlight_rules\",\"ace/mode/folding/asciidoc\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./asciidoc_highlight_rules\").AsciidocHighlightRules,o=e(\"./folding/asciidoc\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,n){if(e==\"listblock\"){var r=/^((?:.+)?)([-+*][ ]+)/.exec(t);return r?(new Array(r[1].length+1)).join(\" \")+r[2]:\"\"}return this.$getIndent(t)},this.$id=\"ace/mode/asciidoc\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-asl.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/asl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"Default|DefinitionBlock|Device|Method|Else|ElseIf|For|Function|If|Include|Method|Return|Scope|Switch|Case|While|Break|BreakPoint|Continue|NoOp|Wait\",t=\"Add|And|Decrement|Divide|Increment|Index|LAnd|LEqual|LGreater|LGreaterEqual|LLess|LLessEqual|LNot|LNotEqual|LOr|Mod|Multiply|NAnd|NOr|Not|Or|RefOf|Revision|ShiftLeft|ShiftRight|Subtract|XOr|DerefOf\",n=\"AccessAs|Acquire|Alias|BankField|Buffer|Concatenate|ConcatenateResTemplate|CondRefOf|Connection|CopyObject|CreateBitField|CreateByteField|CreateDWordField|CreateField|CreateQWordField|CreateWordField|DataTableRegion|Debug|DMA|DWordIO|DWordMemory|DWordSpace|EisaId|EISAID|EndDependentFn|Event|ExtendedIO|ExtendedMemory|ExtendedSpace|External|Fatal|Field|FindSetLeftBit|FindSetRightBit|FixedDMA|FixedIO|Fprintf|FromBCD|GpioInt|GpioIo|I2CSerialBusV2|IndexField|Interrupt|IO|IRQ|IRQNoFlags|Load|LoadTable|Match|Memory32|Memory32Fixed|Mid|Mutex|Name|Notify|Offset|ObjectType|OperationRegion|Package|PowerResource|Printf|QWordIO|QWordMemory|QWordSpace|RawDataBuffer|Register|Release|Reset|ResourceTemplate|Signal|SizeOf|Sleep|SPISerialBusV2|Stall|StartDependentFn|StartDependentFnNoPri|Store|ThermalZone|Timer|ToBCD|ToBuffer|ToDecimalString|ToInteger|ToPLD|ToString|ToUUID|UARTSerialBusV2|Unicode|Unload|VendorLong|VendorShort|WordBusNumber|WordIO|WordSpace\",r=\"AttribQuick|AttribSendReceive|AttribByte|AttribBytes|AttribRawBytes|AttribRawProcessBytes|AttribWord|AttribBlock|AttribProcessCall|AttribBlockProcessCall|AnyAcc|ByteAcc|WordAcc|DWordAcc|QWordAcc|BufferAcc|AddressRangeMemory|AddressRangeReserved|AddressRangeNVS|AddressRangeACPI|RegionSpaceKeyword|FFixedHW|PCC|AddressingMode7Bit|AddressingMode10Bit|DataBitsFive|DataBitsSix|DataBitsSeven|DataBitsEight|DataBitsNine|BusMaster|NotBusMaster|ClockPhaseFirst|ClockPhaseSecond|ClockPolarityLow|ClockPolarityHigh|SubDecode|PosDecode|BigEndianing|LittleEndian|FlowControlNone|FlowControlXon|FlowControlHardware|Edge|Level|ActiveHigh|ActiveLow|ActiveBoth|Decode16|Decode10|IoRestrictionNone|IoRestrictionInputOnly|IoRestrictionOutputOnly|IoRestrictionNoneAndPreserve|Lock|NoLock|MTR|MEQ|MLE|MLT|MGE|MGT|MaxFixed|MaxNotFixed|Cacheable|WriteCombining|Prefetchable|NonCacheable|MinFixed|MinNotFixed|ParityTypeNone|ParityTypeSpace|ParityTypeMark|ParityTypeOdd|ParityTypeEven|PullDefault|PullUp|PullDown|PullNone|PolarityHigh|PolarityLow|ISAOnlyRanges|NonISAOnlyRanges|EntireRange|ReadWrite|ReadOnly|UserDefRegionSpace|SystemIO|SystemMemory|PCI_Config|EmbeddedControl|SMBus|SystemCMOS|PciBarTarget|IPMI|GeneralPurposeIO|GenericSerialBus|ResourceConsumer|ResourceProducer|Serialized|NotSerialized|Shared|Exclusive|SharedAndWake|ExclusiveAndWake|ControllerInitiated|DeviceInitiated|StopBitsZero|StopBitsOne|StopBitsOnePlusHalf|StopBitsTwo|Width8Bit|Width16Bit|Width32Bit|Width64Bit|Width128Bit|Width256Bit|SparseTranslation|DenseTranslation|TypeTranslation|TypeStatic|Preserve|WriteAsOnes|WriteAsZeros|Transfer8|Transfer16|Transfer8_16|ThreeWireMode|FourWireMode\",s=\"UnknownObj|IntObj|StrObj|BuffObj|PkgObj|FieldUnitObj|DeviceObj|EventObj|MethodObj|MutexObj|OpRegionObj|PowerResObj|ProcessorObj|ThermalZoneObj|BuffFieldObj|DDBHandleObj\",o=\"__FILE__|__PATH__|__LINE__|__DATE__|__IASL__\",u=\"Memory24|Processor\",a=this.createKeywordMapper({keyword:e,\"keyword.operator\":t,\"function.buildin\":n,\"constant.language\":o,\"storage.type\":s,\"constant.character\":r,\"invalid.deprecated\":u},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\[\",next:\"ignoredfield\"},{token:\"variable\",regex:\"\\\\Local[0-7]|\\\\Arg[0-6]\"},{token:\"keyword\",regex:\"#\\\\s*(?:define|elif|else|endif|error|if|ifdef|ifndef|include|includebuffer|line|pragma|undef|warning)\\\\b\",next:\"directive\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"constant.character\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/(One(s)?|Zero|True|False|[0-9]+)\\b/},{token:a,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"/|!|\\\\$|%|&|\\\\||\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|\\\\^|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\|=\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],ignoredfield:[{token:\"comment\",regex:\"\\\\]\",next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>*s\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]*s',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.ASLHighlightRules=o}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/asl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asl_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./asl_highlight_rules\").ASLHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.$id=\"ace/mode/asl\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-assembly_x86.js",
    "content": "define(\"ace/mode/assembly_x86_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.control.assembly\",regex:\"\\\\b(?:aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vtestps|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(?:n?e|n?z)?|call|j(?:mp|n?e|ge?|ae?|le?|be?|n?o|n?z))\\\\b\",caseInsensitive:!0},{token:\"variable.parameter.register.assembly\",regex:\"\\\\b(?:CS|DS|ES|FS|GS|SS|RAX|EAX|RBX|EBX|RCX|ECX|RDX|EDX|RCX|RIP|EIP|IP|RSP|ESP|SP|RSI|ESI|SI|RDI|EDI|DI|RFLAGS|EFLAGS|FLAGS|R8-15|(?:Y|X)MM(?:[0-9]|10|11|12|13|14|15)|(?:A|B|C|D)(?:X|H|L)|CR(?:[0-4]|DR(?:[0-7]|TR6|TR7|EFER)))\\\\b\",caseInsensitive:!0},{token:\"constant.character.decimal.assembly\",regex:\"\\\\b[0-9]+\\\\b\"},{token:\"constant.character.hexadecimal.assembly\",regex:\"\\\\b0x[A-F0-9]+\\\\b\",caseInsensitive:!0},{token:\"constant.character.hexadecimal.assembly\",regex:\"\\\\b[A-F0-9]+h\\\\b\",caseInsensitive:!0},{token:\"string.assembly\",regex:/'([^\\\\']|\\\\.)*'/},{token:\"string.assembly\",regex:/\"([^\\\\\"]|\\\\.)*\"/},{token:\"support.function.directive.assembly\",regex:\"^\\\\[\",push:[{token:\"support.function.directive.assembly\",regex:\"\\\\]$\",next:\"pop\"},{defaultToken:\"support.function.directive.assembly\"}]},{token:[\"support.function.directive.assembly\",\"support.function.directive.assembly\",\"entity.name.function.assembly\"],regex:\"(^struc)( )([_a-zA-Z][_a-zA-Z0-9]*)\"},{token:\"support.function.directive.assembly\",regex:\"^endstruc\\\\b\"},{token:[\"support.function.directive.assembly\",\"entity.name.function.assembly\",\"support.function.directive.assembly\",\"constant.character.assembly\"],regex:\"^(%macro )([_a-zA-Z][_a-zA-Z0-9]*)( )([0-9]+)\"},{token:\"support.function.directive.assembly\",regex:\"^%endmacro\"},{token:[\"text\",\"support.function.directive.assembly\",\"text\",\"entity.name.function.assembly\"],regex:\"(\\\\s*)(%define|%xdefine|%idefine|%undef|%assign|%defstr|%strcat|%strlen|%substr|%00|%0|%rotate|%rep|%endrep|%include|\\\\$\\\\$|\\\\$|%unmacro|%if|%elif|%else|%endif|%(?:el)?ifdef|%(?:el)?ifmacro|%(?:el)?ifctx|%(?:el)?ifidn|%(?:el)?ifidni|%(?:el)?ifid|%(?:el)?ifnum|%(?:el)?ifstr|%(?:el)?iftoken|%(?:el)?ifempty|%(?:el)?ifenv|%pathsearch|%depend|%use|%push|%pop|%repl|%arg|%stacksize|%local|%error|%warning|%fatal|%line|%!|%comment|%endcomment|__NASM_VERSION_ID__|__NASM_VER__|__FILE__|__LINE__|__BITS__|__OUTPUT_FORMAT__|__DATE__|__TIME__|__DATE_NUM__|_TIME__NUM__|__UTC_DATE__|__UTC_TIME__|__UTC_DATE_NUM__|__UTC_TIME_NUM__|__POSIX_TIME__|__PASS__|ISTRUC|AT|IEND|BITS 16|BITS 32|BITS 64|USE16|USE32|__SECT__|ABSOLUTE|EXTERN|GLOBAL|COMMON|CPU|FLOAT)\\\\b( ?)((?:[_a-zA-Z][_a-zA-Z0-9]*)?)\",caseInsensitive:!0},{token:\"support.function.directive.assembly\",regex:\"\\\\b(?:d[bwdqtoy]|res[bwdqto]|equ|times|align|alignb|sectalign|section|ptr|byte|word|dword|qword|incbin)\\\\b\",caseInsensitive:!0},{token:\"entity.name.function.assembly\",regex:\"^\\\\s*%%[\\\\w.]+?:$\"},{token:\"entity.name.function.assembly\",regex:\"^\\\\s*%\\\\$[\\\\w.]+?:$\"},{token:\"entity.name.function.assembly\",regex:\"^[\\\\w.]+?:\"},{token:\"entity.name.function.assembly\",regex:\"^[\\\\w.]+?\\\\b\"},{token:\"comment.assembly\",regex:\";.*$\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"asm\"],name:\"Assembly x86\",scopeName:\"source.assembly\"},r.inherits(s,i),t.AssemblyX86HighlightRules=s}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/assembly_x86\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/assembly_x86_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./assembly_x86_highlight_rules\").AssemblyX86HighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=[\";\"],this.$id=\"ace/mode/assembly_x86\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-autohotkey.js",
    "content": "define(\"ace/mode/autohotkey_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"And|ByRef|Case|Const|ContinueCase|ContinueLoop|Default|Dim|Do|Else|ElseIf|EndFunc|EndIf|EndSelect|EndSwitch|EndWith|Enum|Exit|ExitLoop|False|For|Func|Global|If|In|Local|Next|Not|Or|ReDim|Return|Select|Step|Switch|Then|To|True|Until|WEnd|While|With|Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitRotate|BitShift|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|ControlTreeView|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCallbackFree|DllCallbackGetPtr|DllCallbackRegister|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFSLink|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GUICreate|GUICtrlCreateAvi|GUICtrlCreateButton|GUICtrlCreateCheckbox|GUICtrlCreateCombo|GUICtrlCreateContextMenu|GUICtrlCreateDate|GUICtrlCreateDummy|GUICtrlCreateEdit|GUICtrlCreateGraphic|GUICtrlCreateGroup|GUICtrlCreateIcon|GUICtrlCreateInput|GUICtrlCreateLabel|GUICtrlCreateList|GUICtrlCreateListView|GUICtrlCreateListViewItem|GUICtrlCreateMenu|GUICtrlCreateMenuItem|GUICtrlCreateMonthCal|GUICtrlCreateObj|GUICtrlCreatePic|GUICtrlCreateProgress|GUICtrlCreateRadio|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTabItem|GUICtrlCreateTreeView|GUICtrlCreateTreeViewItem|GUICtrlCreateUpdown|GUICtrlDelete|GUICtrlGetHandle|GUICtrlGetState|GUICtrlRead|GUICtrlRecvMsg|GUICtrlRegisterListViewSort|GUICtrlSendMsg|GUICtrlSendToDummy|GUICtrlSetBkColor|GUICtrlSetColor|GUICtrlSetCursor|GUICtrlSetData|GUICtrlSetFont|GUICtrlSetDefColor|GUICtrlSetDefBkColor|GUICtrlSetGraphic|GUICtrlSetImage|GUICtrlSetLimit|GUICtrlSetOnEvent|GUICtrlSetPos|GUICtrlSetResizing|GUICtrlSetState|GUICtrlSetStyle|GUICtrlSetTip|GUIDelete|GUIGetCursorInfo|GUIGetMsg|GUIGetStyle|GUIRegisterMsg|GUISetAccelerators()|GUISetBkColor|GUISetCoord|GUISetCursor|GUISetFont|GUISetHelp|GUISetIcon|GUISetOnEvent|GUISetState|GUISetStyle|GUIStartGroup|GUISwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsPtr|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Opt|Ping|PixelChecksum|PixelGetColor|PixelSearch|PluginClose|PluginOpen|ProcessClose|ProcessExists|ProcessGetStats|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProgressOn|ProgressSet|Ptr|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAs|RunAsWait|RunWait|Send|SendKeepActive|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdioClose|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPRecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|UDPShutdown|UDPStartup|VarGetType|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive|ArrayAdd|ArrayBinarySearch|ArrayConcatenate|ArrayDelete|ArrayDisplay|ArrayFindAll|ArrayInsert|ArrayMax|ArrayMaxIndex|ArrayMin|ArrayMinIndex|ArrayPop|ArrayPush|ArrayReverse|ArraySearch|ArraySort|ArraySwap|ArrayToClip|ArrayToString|ArrayTrim|ChooseColor|ChooseFont|ClipBoard_ChangeChain|ClipBoard_Close|ClipBoard_CountFormats|ClipBoard_Empty|ClipBoard_EnumFormats|ClipBoard_FormatStr|ClipBoard_GetData|ClipBoard_GetDataEx|ClipBoard_GetFormatName|ClipBoard_GetOpenWindow|ClipBoard_GetOwner|ClipBoard_GetPriorityFormat|ClipBoard_GetSequenceNumber|ClipBoard_GetViewer|ClipBoard_IsFormatAvailable|ClipBoard_Open|ClipBoard_RegisterFormat|ClipBoard_SetData|ClipBoard_SetDataEx|ClipBoard_SetViewer|ClipPutFile|ColorConvertHSLtoRGB|ColorConvertRGBtoHSL|ColorGetBlue|ColorGetGreen|ColorGetRed|Date_Time_CompareFileTime|Date_Time_DOSDateTimeToArray|Date_Time_DOSDateTimeToFileTime|Date_Time_DOSDateTimeToStr|Date_Time_DOSDateToArray|Date_Time_DOSDateToStr|Date_Time_DOSTimeToArray|Date_Time_DOSTimeToStr|Date_Time_EncodeFileTime|Date_Time_EncodeSystemTime|Date_Time_FileTimeToArray|Date_Time_FileTimeToDOSDateTime|Date_Time_FileTimeToLocalFileTime|Date_Time_FileTimeToStr|Date_Time_FileTimeToSystemTime|Date_Time_GetFileTime|Date_Time_GetLocalTime|Date_Time_GetSystemTime|Date_Time_GetSystemTimeAdjustment|Date_Time_GetSystemTimeAsFileTime|Date_Time_GetSystemTimes|Date_Time_GetTickCount|Date_Time_GetTimeZoneInformation|Date_Time_LocalFileTimeToFileTime|Date_Time_SetFileTime|Date_Time_SetLocalTime|Date_Time_SetSystemTime|Date_Time_SetSystemTimeAdjustment|Date_Time_SetTimeZoneInformation|Date_Time_SystemTimeToArray|Date_Time_SystemTimeToDateStr|Date_Time_SystemTimeToDateTimeStr|Date_Time_SystemTimeToFileTime|Date_Time_SystemTimeToTimeStr|Date_Time_SystemTimeToTzSpecificLocalTime|Date_Time_TzSpecificLocalTimeToSystemTime|DateAdd|DateDayOfWeek|DateDaysInMonth|DateDiff|DateIsLeapYear|DateIsValid|DateTimeFormat|DateTimeSplit|DateToDayOfWeek|DateToDayOfWeekISO|DateToDayValue|DateToMonth|DayValueToDate|DebugBugReportEnv|DebugOut|DebugSetup|Degree|EventLog__Backup|EventLog__Clear|EventLog__Close|EventLog__Count|EventLog__DeregisterSource|EventLog__Full|EventLog__Notify|EventLog__Oldest|EventLog__Open|EventLog__OpenBackup|EventLog__Read|EventLog__RegisterSource|EventLog__Report|FileCountLines|FileCreate|FileListToArray|FilePrint|FileReadToArray|FileWriteFromArray|FileWriteLog|FileWriteToLine|GDIPlus_ArrowCapCreate|GDIPlus_ArrowCapDispose|GDIPlus_ArrowCapGetFillState|GDIPlus_ArrowCapGetHeight|GDIPlus_ArrowCapGetMiddleInset|GDIPlus_ArrowCapGetWidth|GDIPlus_ArrowCapSetFillState|GDIPlus_ArrowCapSetHeight|GDIPlus_ArrowCapSetMiddleInset|GDIPlus_ArrowCapSetWidth|GDIPlus_BitmapCloneArea|GDIPlus_BitmapCreateFromFile|GDIPlus_BitmapCreateFromGraphics|GDIPlus_BitmapCreateFromHBITMAP|GDIPlus_BitmapCreateHBITMAPFromBitmap|GDIPlus_BitmapDispose|GDIPlus_BitmapLockBits|GDIPlus_BitmapUnlockBits|GDIPlus_BrushClone|GDIPlus_BrushCreateSolid|GDIPlus_BrushDispose|GDIPlus_BrushGetType|GDIPlus_CustomLineCapDispose|GDIPlus_Decoders|GDIPlus_DecodersGetCount|GDIPlus_DecodersGetSize|GDIPlus_Encoders|GDIPlus_EncodersGetCLSID|GDIPlus_EncodersGetCount|GDIPlus_EncodersGetParamList|GDIPlus_EncodersGetParamListSize|GDIPlus_EncodersGetSize|GDIPlus_FontCreate|GDIPlus_FontDispose|GDIPlus_FontFamilyCreate|GDIPlus_FontFamilyDispose|GDIPlus_GraphicsClear|GDIPlus_GraphicsCreateFromHDC|GDIPlus_GraphicsCreateFromHWND|GDIPlus_GraphicsDispose|GDIPlus_GraphicsDrawArc|GDIPlus_GraphicsDrawBezier|GDIPlus_GraphicsDrawClosedCurve|GDIPlus_GraphicsDrawCurve|GDIPlus_GraphicsDrawEllipse|GDIPlus_GraphicsDrawImage|GDIPlus_GraphicsDrawImageRect|GDIPlus_GraphicsDrawImageRectRect|GDIPlus_GraphicsDrawLine|GDIPlus_GraphicsDrawPie|GDIPlus_GraphicsDrawPolygon|GDIPlus_GraphicsDrawRect|GDIPlus_GraphicsDrawString|GDIPlus_GraphicsDrawStringEx|GDIPlus_GraphicsFillClosedCurve|GDIPlus_GraphicsFillEllipse|GDIPlus_GraphicsFillPie|GDIPlus_GraphicsFillRect|GDIPlus_GraphicsGetDC|GDIPlus_GraphicsGetSmoothingMode|GDIPlus_GraphicsMeasureString|GDIPlus_GraphicsReleaseDC|GDIPlus_GraphicsSetSmoothingMode|GDIPlus_GraphicsSetTransform|GDIPlus_ImageDispose|GDIPlus_ImageGetGraphicsContext|GDIPlus_ImageGetHeight|GDIPlus_ImageGetWidth|GDIPlus_ImageLoadFromFile|GDIPlus_ImageSaveToFile|GDIPlus_ImageSaveToFileEx|GDIPlus_MatrixCreate|GDIPlus_MatrixDispose|GDIPlus_MatrixRotate|GDIPlus_ParamAdd|GDIPlus_ParamInit|GDIPlus_PenCreate|GDIPlus_PenDispose|GDIPlus_PenGetAlignment|GDIPlus_PenGetColor|GDIPlus_PenGetCustomEndCap|GDIPlus_PenGetDashCap|GDIPlus_PenGetDashStyle|GDIPlus_PenGetEndCap|GDIPlus_PenGetWidth|GDIPlus_PenSetAlignment|GDIPlus_PenSetColor|GDIPlus_PenSetCustomEndCap|GDIPlus_PenSetDashCap|GDIPlus_PenSetDashStyle|GDIPlus_PenSetEndCap|GDIPlus_PenSetWidth|GDIPlus_RectFCreate|GDIPlus_Shutdown|GDIPlus_Startup|GDIPlus_StringFormatCreate|GDIPlus_StringFormatDispose|GetIP|GUICtrlAVI_Close|GUICtrlAVI_Create|GUICtrlAVI_Destroy|GUICtrlAVI_Open|GUICtrlAVI_OpenEx|GUICtrlAVI_Play|GUICtrlAVI_Seek|GUICtrlAVI_Show|GUICtrlAVI_Stop|GUICtrlButton_Click|GUICtrlButton_Create|GUICtrlButton_Destroy|GUICtrlButton_Enable|GUICtrlButton_GetCheck|GUICtrlButton_GetFocus|GUICtrlButton_GetIdealSize|GUICtrlButton_GetImage|GUICtrlButton_GetImageList|GUICtrlButton_GetState|GUICtrlButton_GetText|GUICtrlButton_GetTextMargin|GUICtrlButton_SetCheck|GUICtrlButton_SetFocus|GUICtrlButton_SetImage|GUICtrlButton_SetImageList|GUICtrlButton_SetSize|GUICtrlButton_SetState|GUICtrlButton_SetStyle|GUICtrlButton_SetText|GUICtrlButton_SetTextMargin|GUICtrlButton_Show|GUICtrlComboBox_AddDir|GUICtrlComboBox_AddString|GUICtrlComboBox_AutoComplete|GUICtrlComboBox_BeginUpdate|GUICtrlComboBox_Create|GUICtrlComboBox_DeleteString|GUICtrlComboBox_Destroy|GUICtrlComboBox_EndUpdate|GUICtrlComboBox_FindString|GUICtrlComboBox_FindStringExact|GUICtrlComboBox_GetComboBoxInfo|GUICtrlComboBox_GetCount|GUICtrlComboBox_GetCurSel|GUICtrlComboBox_GetDroppedControlRect|GUICtrlComboBox_GetDroppedControlRectEx|GUICtrlComboBox_GetDroppedState|GUICtrlComboBox_GetDroppedWidth|GUICtrlComboBox_GetEditSel|GUICtrlComboBox_GetEditText|GUICtrlComboBox_GetExtendedUI|GUICtrlComboBox_GetHorizontalExtent|GUICtrlComboBox_GetItemHeight|GUICtrlComboBox_GetLBText|GUICtrlComboBox_GetLBTextLen|GUICtrlComboBox_GetList|GUICtrlComboBox_GetListArray|GUICtrlComboBox_GetLocale|GUICtrlComboBox_GetLocaleCountry|GUICtrlComboBox_GetLocaleLang|GUICtrlComboBox_GetLocalePrimLang|GUICtrlComboBox_GetLocaleSubLang|GUICtrlComboBox_GetMinVisible|GUICtrlComboBox_GetTopIndex|GUICtrlComboBox_InitStorage|GUICtrlComboBox_InsertString|GUICtrlComboBox_LimitText|GUICtrlComboBox_ReplaceEditSel|GUICtrlComboBox_ResetContent|GUICtrlComboBox_SelectString|GUICtrlComboBox_SetCurSel|GUICtrlComboBox_SetDroppedWidth|GUICtrlComboBox_SetEditSel|GUICtrlComboBox_SetEditText|GUICtrlComboBox_SetExtendedUI|GUICtrlComboBox_SetHorizontalExtent|GUICtrlComboBox_SetItemHeight|GUICtrlComboBox_SetMinVisible|GUICtrlComboBox_SetTopIndex|GUICtrlComboBox_ShowDropDown|GUICtrlComboBoxEx_AddDir|GUICtrlComboBoxEx_AddString|GUICtrlComboBoxEx_BeginUpdate|GUICtrlComboBoxEx_Create|GUICtrlComboBoxEx_CreateSolidBitMap|GUICtrlComboBoxEx_DeleteString|GUICtrlComboBoxEx_Destroy|GUICtrlComboBoxEx_EndUpdate|GUICtrlComboBoxEx_FindStringExact|GUICtrlComboBoxEx_GetComboBoxInfo|GUICtrlComboBoxEx_GetComboControl|GUICtrlComboBoxEx_GetCount|GUICtrlComboBoxEx_GetCurSel|GUICtrlComboBoxEx_GetDroppedControlRect|GUICtrlComboBoxEx_GetDroppedControlRectEx|GUICtrlComboBoxEx_GetDroppedState|GUICtrlComboBoxEx_GetDroppedWidth|GUICtrlComboBoxEx_GetEditControl|GUICtrlComboBoxEx_GetEditSel|GUICtrlComboBoxEx_GetEditText|GUICtrlComboBoxEx_GetExtendedStyle|GUICtrlComboBoxEx_GetExtendedUI|GUICtrlComboBoxEx_GetImageList|GUICtrlComboBoxEx_GetItem|GUICtrlComboBoxEx_GetItemEx|GUICtrlComboBoxEx_GetItemHeight|GUICtrlComboBoxEx_GetItemImage|GUICtrlComboBoxEx_GetItemIndent|GUICtrlComboBoxEx_GetItemOverlayImage|GUICtrlComboBoxEx_GetItemParam|GUICtrlComboBoxEx_GetItemSelectedImage|GUICtrlComboBoxEx_GetItemText|GUICtrlComboBoxEx_GetItemTextLen|GUICtrlComboBoxEx_GetList|GUICtrlComboBoxEx_GetListArray|GUICtrlComboBoxEx_GetLocale|GUICtrlComboBoxEx_GetLocaleCountry|GUICtrlComboBoxEx_GetLocaleLang|GUICtrlComboBoxEx_GetLocalePrimLang|GUICtrlComboBoxEx_GetLocaleSubLang|GUICtrlComboBoxEx_GetMinVisible|GUICtrlComboBoxEx_GetTopIndex|GUICtrlComboBoxEx_InitStorage|GUICtrlComboBoxEx_InsertString|GUICtrlComboBoxEx_LimitText|GUICtrlComboBoxEx_ReplaceEditSel|GUICtrlComboBoxEx_ResetContent|GUICtrlComboBoxEx_SetCurSel|GUICtrlComboBoxEx_SetDroppedWidth|GUICtrlComboBoxEx_SetEditSel|GUICtrlComboBoxEx_SetEditText|GUICtrlComboBoxEx_SetExtendedStyle|GUICtrlComboBoxEx_SetExtendedUI|GUICtrlComboBoxEx_SetImageList|GUICtrlComboBoxEx_SetItem|GUICtrlComboBoxEx_SetItemEx|GUICtrlComboBoxEx_SetItemHeight|GUICtrlComboBoxEx_SetItemImage|GUICtrlComboBoxEx_SetItemIndent|GUICtrlComboBoxEx_SetItemOverlayImage|GUICtrlComboBoxEx_SetItemParam|GUICtrlComboBoxEx_SetItemSelectedImage|GUICtrlComboBoxEx_SetMinVisible|GUICtrlComboBoxEx_SetTopIndex|GUICtrlComboBoxEx_ShowDropDown|GUICtrlDTP_Create|GUICtrlDTP_Destroy|GUICtrlDTP_GetMCColor|GUICtrlDTP_GetMCFont|GUICtrlDTP_GetMonthCal|GUICtrlDTP_GetRange|GUICtrlDTP_GetRangeEx|GUICtrlDTP_GetSystemTime|GUICtrlDTP_GetSystemTimeEx|GUICtrlDTP_SetFormat|GUICtrlDTP_SetMCColor|GUICtrlDTP_SetMCFont|GUICtrlDTP_SetRange|GUICtrlDTP_SetRangeEx|GUICtrlDTP_SetSystemTime|GUICtrlDTP_SetSystemTimeEx|GUICtrlEdit_AppendText|GUICtrlEdit_BeginUpdate|GUICtrlEdit_CanUndo|GUICtrlEdit_CharFromPos|GUICtrlEdit_Create|GUICtrlEdit_Destroy|GUICtrlEdit_EmptyUndoBuffer|GUICtrlEdit_EndUpdate|GUICtrlEdit_Find|GUICtrlEdit_FmtLines|GUICtrlEdit_GetFirstVisibleLine|GUICtrlEdit_GetLimitText|GUICtrlEdit_GetLine|GUICtrlEdit_GetLineCount|GUICtrlEdit_GetMargins|GUICtrlEdit_GetModify|GUICtrlEdit_GetPasswordChar|GUICtrlEdit_GetRECT|GUICtrlEdit_GetRECTEx|GUICtrlEdit_GetSel|GUICtrlEdit_GetText|GUICtrlEdit_GetTextLen|GUICtrlEdit_HideBalloonTip|GUICtrlEdit_InsertText|GUICtrlEdit_LineFromChar|GUICtrlEdit_LineIndex|GUICtrlEdit_LineLength|GUICtrlEdit_LineScroll|GUICtrlEdit_PosFromChar|GUICtrlEdit_ReplaceSel|GUICtrlEdit_Scroll|GUICtrlEdit_SetLimitText|GUICtrlEdit_SetMargins|GUICtrlEdit_SetModify|GUICtrlEdit_SetPasswordChar|GUICtrlEdit_SetReadOnly|GUICtrlEdit_SetRECT|GUICtrlEdit_SetRECTEx|GUICtrlEdit_SetRECTNP|GUICtrlEdit_SetRectNPEx|GUICtrlEdit_SetSel|GUICtrlEdit_SetTabStops|GUICtrlEdit_SetText|GUICtrlEdit_ShowBalloonTip|GUICtrlEdit_Undo|GUICtrlHeader_AddItem|GUICtrlHeader_ClearFilter|GUICtrlHeader_ClearFilterAll|GUICtrlHeader_Create|GUICtrlHeader_CreateDragImage|GUICtrlHeader_DeleteItem|GUICtrlHeader_Destroy|GUICtrlHeader_EditFilter|GUICtrlHeader_GetBitmapMargin|GUICtrlHeader_GetImageList|GUICtrlHeader_GetItem|GUICtrlHeader_GetItemAlign|GUICtrlHeader_GetItemBitmap|GUICtrlHeader_GetItemCount|GUICtrlHeader_GetItemDisplay|GUICtrlHeader_GetItemFlags|GUICtrlHeader_GetItemFormat|GUICtrlHeader_GetItemImage|GUICtrlHeader_GetItemOrder|GUICtrlHeader_GetItemParam|GUICtrlHeader_GetItemRect|GUICtrlHeader_GetItemRectEx|GUICtrlHeader_GetItemText|GUICtrlHeader_GetItemWidth|GUICtrlHeader_GetOrderArray|GUICtrlHeader_GetUnicodeFormat|GUICtrlHeader_HitTest|GUICtrlHeader_InsertItem|GUICtrlHeader_Layout|GUICtrlHeader_OrderToIndex|GUICtrlHeader_SetBitmapMargin|GUICtrlHeader_SetFilterChangeTimeout|GUICtrlHeader_SetHotDivider|GUICtrlHeader_SetImageList|GUICtrlHeader_SetItem|GUICtrlHeader_SetItemAlign|GUICtrlHeader_SetItemBitmap|GUICtrlHeader_SetItemDisplay|GUICtrlHeader_SetItemFlags|GUICtrlHeader_SetItemFormat|GUICtrlHeader_SetItemImage|GUICtrlHeader_SetItemOrder|GUICtrlHeader_SetItemParam|GUICtrlHeader_SetItemText|GUICtrlHeader_SetItemWidth|GUICtrlHeader_SetOrderArray|GUICtrlHeader_SetUnicodeFormat|GUICtrlIpAddress_ClearAddress|GUICtrlIpAddress_Create|GUICtrlIpAddress_Destroy|GUICtrlIpAddress_Get|GUICtrlIpAddress_GetArray|GUICtrlIpAddress_GetEx|GUICtrlIpAddress_IsBlank|GUICtrlIpAddress_Set|GUICtrlIpAddress_SetArray|GUICtrlIpAddress_SetEx|GUICtrlIpAddress_SetFocus|GUICtrlIpAddress_SetFont|GUICtrlIpAddress_SetRange|GUICtrlIpAddress_ShowHide|GUICtrlListBox_AddFile|GUICtrlListBox_AddString|GUICtrlListBox_BeginUpdate|GUICtrlListBox_Create|GUICtrlListBox_DeleteString|GUICtrlListBox_Destroy|GUICtrlListBox_Dir|GUICtrlListBox_EndUpdate|GUICtrlListBox_FindInText|GUICtrlListBox_FindString|GUICtrlListBox_GetAnchorIndex|GUICtrlListBox_GetCaretIndex|GUICtrlListBox_GetCount|GUICtrlListBox_GetCurSel|GUICtrlListBox_GetHorizontalExtent|GUICtrlListBox_GetItemData|GUICtrlListBox_GetItemHeight|GUICtrlListBox_GetItemRect|GUICtrlListBox_GetItemRectEx|GUICtrlListBox_GetListBoxInfo|GUICtrlListBox_GetLocale|GUICtrlListBox_GetLocaleCountry|GUICtrlListBox_GetLocaleLang|GUICtrlListBox_GetLocalePrimLang|GUICtrlListBox_GetLocaleSubLang|GUICtrlListBox_GetSel|GUICtrlListBox_GetSelCount|GUICtrlListBox_GetSelItems|GUICtrlListBox_GetSelItemsText|GUICtrlListBox_GetText|GUICtrlListBox_GetTextLen|GUICtrlListBox_GetTopIndex|GUICtrlListBox_InitStorage|GUICtrlListBox_InsertString|GUICtrlListBox_ItemFromPoint|GUICtrlListBox_ReplaceString|GUICtrlListBox_ResetContent|GUICtrlListBox_SelectString|GUICtrlListBox_SelItemRange|GUICtrlListBox_SelItemRangeEx|GUICtrlListBox_SetAnchorIndex|GUICtrlListBox_SetCaretIndex|GUICtrlListBox_SetColumnWidth|GUICtrlListBox_SetCurSel|GUICtrlListBox_SetHorizontalExtent|GUICtrlListBox_SetItemData|GUICtrlListBox_SetItemHeight|GUICtrlListBox_SetLocale|GUICtrlListBox_SetSel|GUICtrlListBox_SetTabStops|GUICtrlListBox_SetTopIndex|GUICtrlListBox_Sort|GUICtrlListBox_SwapString|GUICtrlListBox_UpdateHScroll|GUICtrlListView_AddArray|GUICtrlListView_AddColumn|GUICtrlListView_AddItem|GUICtrlListView_AddSubItem|GUICtrlListView_ApproximateViewHeight|GUICtrlListView_ApproximateViewRect|GUICtrlListView_ApproximateViewWidth|GUICtrlListView_Arrange|GUICtrlListView_BeginUpdate|GUICtrlListView_CancelEditLabel|GUICtrlListView_ClickItem|GUICtrlListView_CopyItems|GUICtrlListView_Create|GUICtrlListView_CreateDragImage|GUICtrlListView_CreateSolidBitMap|GUICtrlListView_DeleteAllItems|GUICtrlListView_DeleteColumn|GUICtrlListView_DeleteItem|GUICtrlListView_DeleteItemsSelected|GUICtrlListView_Destroy|GUICtrlListView_DrawDragImage|GUICtrlListView_EditLabel|GUICtrlListView_EnableGroupView|GUICtrlListView_EndUpdate|GUICtrlListView_EnsureVisible|GUICtrlListView_FindInText|GUICtrlListView_FindItem|GUICtrlListView_FindNearest|GUICtrlListView_FindParam|GUICtrlListView_FindText|GUICtrlListView_GetBkColor|GUICtrlListView_GetBkImage|GUICtrlListView_GetCallbackMask|GUICtrlListView_GetColumn|GUICtrlListView_GetColumnCount|GUICtrlListView_GetColumnOrder|GUICtrlListView_GetColumnOrderArray|GUICtrlListView_GetColumnWidth|GUICtrlListView_GetCounterPage|GUICtrlListView_GetEditControl|GUICtrlListView_GetExtendedListViewStyle|GUICtrlListView_GetGroupInfo|GUICtrlListView_GetGroupViewEnabled|GUICtrlListView_GetHeader|GUICtrlListView_GetHotCursor|GUICtrlListView_GetHotItem|GUICtrlListView_GetHoverTime|GUICtrlListView_GetImageList|GUICtrlListView_GetISearchString|GUICtrlListView_GetItem|GUICtrlListView_GetItemChecked|GUICtrlListView_GetItemCount|GUICtrlListView_GetItemCut|GUICtrlListView_GetItemDropHilited|GUICtrlListView_GetItemEx|GUICtrlListView_GetItemFocused|GUICtrlListView_GetItemGroupID|GUICtrlListView_GetItemImage|GUICtrlListView_GetItemIndent|GUICtrlListView_GetItemParam|GUICtrlListView_GetItemPosition|GUICtrlListView_GetItemPositionX|GUICtrlListView_GetItemPositionY|GUICtrlListView_GetItemRect|GUICtrlListView_GetItemRectEx|GUICtrlListView_GetItemSelected|GUICtrlListView_GetItemSpacing|GUICtrlListView_GetItemSpacingX|GUICtrlListView_GetItemSpacingY|GUICtrlListView_GetItemState|GUICtrlListView_GetItemStateImage|GUICtrlListView_GetItemText|GUICtrlListView_GetItemTextArray|GUICtrlListView_GetItemTextString|GUICtrlListView_GetNextItem|GUICtrlListView_GetNumberOfWorkAreas|GUICtrlListView_GetOrigin|GUICtrlListView_GetOriginX|GUICtrlListView_GetOriginY|GUICtrlListView_GetOutlineColor|GUICtrlListView_GetSelectedColumn|GUICtrlListView_GetSelectedCount|GUICtrlListView_GetSelectedIndices|GUICtrlListView_GetSelectionMark|GUICtrlListView_GetStringWidth|GUICtrlListView_GetSubItemRect|GUICtrlListView_GetTextBkColor|GUICtrlListView_GetTextColor|GUICtrlListView_GetToolTips|GUICtrlListView_GetTopIndex|GUICtrlListView_GetUnicodeFormat|GUICtrlListView_GetView|GUICtrlListView_GetViewDetails|GUICtrlListView_GetViewLarge|GUICtrlListView_GetViewList|GUICtrlListView_GetViewRect|GUICtrlListView_GetViewSmall|GUICtrlListView_GetViewTile|GUICtrlListView_HideColumn|GUICtrlListView_HitTest|GUICtrlListView_InsertColumn|GUICtrlListView_InsertGroup|GUICtrlListView_InsertItem|GUICtrlListView_JustifyColumn|GUICtrlListView_MapIDToIndex|GUICtrlListView_MapIndexToID|GUICtrlListView_RedrawItems|GUICtrlListView_RegisterSortCallBack|GUICtrlListView_RemoveAllGroups|GUICtrlListView_RemoveGroup|GUICtrlListView_Scroll|GUICtrlListView_SetBkColor|GUICtrlListView_SetBkImage|GUICtrlListView_SetCallBackMask|GUICtrlListView_SetColumn|GUICtrlListView_SetColumnOrder|GUICtrlListView_SetColumnOrderArray|GUICtrlListView_SetColumnWidth|GUICtrlListView_SetExtendedListViewStyle|GUICtrlListView_SetGroupInfo|GUICtrlListView_SetHotItem|GUICtrlListView_SetHoverTime|GUICtrlListView_SetIconSpacing|GUICtrlListView_SetImageList|GUICtrlListView_SetItem|GUICtrlListView_SetItemChecked|GUICtrlListView_SetItemCount|GUICtrlListView_SetItemCut|GUICtrlListView_SetItemDropHilited|GUICtrlListView_SetItemEx|GUICtrlListView_SetItemFocused|GUICtrlListView_SetItemGroupID|GUICtrlListView_SetItemImage|GUICtrlListView_SetItemIndent|GUICtrlListView_SetItemParam|GUICtrlListView_SetItemPosition|GUICtrlListView_SetItemPosition32|GUICtrlListView_SetItemSelected|GUICtrlListView_SetItemState|GUICtrlListView_SetItemStateImage|GUICtrlListView_SetItemText|GUICtrlListView_SetOutlineColor|GUICtrlListView_SetSelectedColumn|GUICtrlListView_SetSelectionMark|GUICtrlListView_SetTextBkColor|GUICtrlListView_SetTextColor|GUICtrlListView_SetToolTips|GUICtrlListView_SetUnicodeFormat|GUICtrlListView_SetView|GUICtrlListView_SetWorkAreas|GUICtrlListView_SimpleSort|GUICtrlListView_SortItems|GUICtrlListView_SubItemHitTest|GUICtrlListView_UnRegisterSortCallBack|GUICtrlMenu_AddMenuItem|GUICtrlMenu_AppendMenu|GUICtrlMenu_CheckMenuItem|GUICtrlMenu_CheckRadioItem|GUICtrlMenu_CreateMenu|GUICtrlMenu_CreatePopup|GUICtrlMenu_DeleteMenu|GUICtrlMenu_DestroyMenu|GUICtrlMenu_DrawMenuBar|GUICtrlMenu_EnableMenuItem|GUICtrlMenu_FindItem|GUICtrlMenu_FindParent|GUICtrlMenu_GetItemBmp|GUICtrlMenu_GetItemBmpChecked|GUICtrlMenu_GetItemBmpUnchecked|GUICtrlMenu_GetItemChecked|GUICtrlMenu_GetItemCount|GUICtrlMenu_GetItemData|GUICtrlMenu_GetItemDefault|GUICtrlMenu_GetItemDisabled|GUICtrlMenu_GetItemEnabled|GUICtrlMenu_GetItemGrayed|GUICtrlMenu_GetItemHighlighted|GUICtrlMenu_GetItemID|GUICtrlMenu_GetItemInfo|GUICtrlMenu_GetItemRect|GUICtrlMenu_GetItemRectEx|GUICtrlMenu_GetItemState|GUICtrlMenu_GetItemStateEx|GUICtrlMenu_GetItemSubMenu|GUICtrlMenu_GetItemText|GUICtrlMenu_GetItemType|GUICtrlMenu_GetMenu|GUICtrlMenu_GetMenuBackground|GUICtrlMenu_GetMenuBarInfo|GUICtrlMenu_GetMenuContextHelpID|GUICtrlMenu_GetMenuData|GUICtrlMenu_GetMenuDefaultItem|GUICtrlMenu_GetMenuHeight|GUICtrlMenu_GetMenuInfo|GUICtrlMenu_GetMenuStyle|GUICtrlMenu_GetSystemMenu|GUICtrlMenu_InsertMenuItem|GUICtrlMenu_InsertMenuItemEx|GUICtrlMenu_IsMenu|GUICtrlMenu_LoadMenu|GUICtrlMenu_MapAccelerator|GUICtrlMenu_MenuItemFromPoint|GUICtrlMenu_RemoveMenu|GUICtrlMenu_SetItemBitmaps|GUICtrlMenu_SetItemBmp|GUICtrlMenu_SetItemBmpChecked|GUICtrlMenu_SetItemBmpUnchecked|GUICtrlMenu_SetItemChecked|GUICtrlMenu_SetItemData|GUICtrlMenu_SetItemDefault|GUICtrlMenu_SetItemDisabled|GUICtrlMenu_SetItemEnabled|GUICtrlMenu_SetItemGrayed|GUICtrlMenu_SetItemHighlighted|GUICtrlMenu_SetItemID|GUICtrlMenu_SetItemInfo|GUICtrlMenu_SetItemState|GUICtrlMenu_SetItemSubMenu|GUICtrlMenu_SetItemText|GUICtrlMenu_SetItemType|GUICtrlMenu_SetMenu|GUICtrlMenu_SetMenuBackground|GUICtrlMenu_SetMenuContextHelpID|GUICtrlMenu_SetMenuData|GUICtrlMenu_SetMenuDefaultItem|GUICtrlMenu_SetMenuHeight|GUICtrlMenu_SetMenuInfo|GUICtrlMenu_SetMenuStyle|GUICtrlMenu_TrackPopupMenu|GUICtrlMonthCal_Create|GUICtrlMonthCal_Destroy|GUICtrlMonthCal_GetColor|GUICtrlMonthCal_GetColorArray|GUICtrlMonthCal_GetCurSel|GUICtrlMonthCal_GetCurSelStr|GUICtrlMonthCal_GetFirstDOW|GUICtrlMonthCal_GetFirstDOWStr|GUICtrlMonthCal_GetMaxSelCount|GUICtrlMonthCal_GetMaxTodayWidth|GUICtrlMonthCal_GetMinReqHeight|GUICtrlMonthCal_GetMinReqRect|GUICtrlMonthCal_GetMinReqRectArray|GUICtrlMonthCal_GetMinReqWidth|GUICtrlMonthCal_GetMonthDelta|GUICtrlMonthCal_GetMonthRange|GUICtrlMonthCal_GetMonthRangeMax|GUICtrlMonthCal_GetMonthRangeMaxStr|GUICtrlMonthCal_GetMonthRangeMin|GUICtrlMonthCal_GetMonthRangeMinStr|GUICtrlMonthCal_GetMonthRangeSpan|GUICtrlMonthCal_GetRange|GUICtrlMonthCal_GetRangeMax|GUICtrlMonthCal_GetRangeMaxStr|GUICtrlMonthCal_GetRangeMin|GUICtrlMonthCal_GetRangeMinStr|GUICtrlMonthCal_GetSelRange|GUICtrlMonthCal_GetSelRangeMax|GUICtrlMonthCal_GetSelRangeMaxStr|GUICtrlMonthCal_GetSelRangeMin|GUICtrlMonthCal_GetSelRangeMinStr|GUICtrlMonthCal_GetToday|GUICtrlMonthCal_GetTodayStr|GUICtrlMonthCal_GetUnicodeFormat|GUICtrlMonthCal_HitTest|GUICtrlMonthCal_SetColor|GUICtrlMonthCal_SetCurSel|GUICtrlMonthCal_SetDayState|GUICtrlMonthCal_SetFirstDOW|GUICtrlMonthCal_SetMaxSelCount|GUICtrlMonthCal_SetMonthDelta|GUICtrlMonthCal_SetRange|GUICtrlMonthCal_SetSelRange|GUICtrlMonthCal_SetToday|GUICtrlMonthCal_SetUnicodeFormat|GUICtrlRebar_AddBand|GUICtrlRebar_AddToolBarBand|GUICtrlRebar_BeginDrag|GUICtrlRebar_Create|GUICtrlRebar_DeleteBand|GUICtrlRebar_Destroy|GUICtrlRebar_DragMove|GUICtrlRebar_EndDrag|GUICtrlRebar_GetBandBackColor|GUICtrlRebar_GetBandBorders|GUICtrlRebar_GetBandBordersEx|GUICtrlRebar_GetBandChildHandle|GUICtrlRebar_GetBandChildSize|GUICtrlRebar_GetBandCount|GUICtrlRebar_GetBandForeColor|GUICtrlRebar_GetBandHeaderSize|GUICtrlRebar_GetBandID|GUICtrlRebar_GetBandIdealSize|GUICtrlRebar_GetBandLength|GUICtrlRebar_GetBandLParam|GUICtrlRebar_GetBandMargins|GUICtrlRebar_GetBandMarginsEx|GUICtrlRebar_GetBandRect|GUICtrlRebar_GetBandRectEx|GUICtrlRebar_GetBandStyle|GUICtrlRebar_GetBandStyleBreak|GUICtrlRebar_GetBandStyleChildEdge|GUICtrlRebar_GetBandStyleFixedBMP|GUICtrlRebar_GetBandStyleFixedSize|GUICtrlRebar_GetBandStyleGripperAlways|GUICtrlRebar_GetBandStyleHidden|GUICtrlRebar_GetBandStyleHideTitle|GUICtrlRebar_GetBandStyleNoGripper|GUICtrlRebar_GetBandStyleTopAlign|GUICtrlRebar_GetBandStyleUseChevron|GUICtrlRebar_GetBandStyleVariableHeight|GUICtrlRebar_GetBandText|GUICtrlRebar_GetBarHeight|GUICtrlRebar_GetBKColor|GUICtrlRebar_GetColorScheme|GUICtrlRebar_GetRowCount|GUICtrlRebar_GetRowHeight|GUICtrlRebar_GetTextColor|GUICtrlRebar_GetToolTips|GUICtrlRebar_GetUnicodeFormat|GUICtrlRebar_HitTest|GUICtrlRebar_IDToIndex|GUICtrlRebar_MaximizeBand|GUICtrlRebar_MinimizeBand|GUICtrlRebar_MoveBand|GUICtrlRebar_SetBandBackColor|GUICtrlRebar_SetBandForeColor|GUICtrlRebar_SetBandHeaderSize|GUICtrlRebar_SetBandID|GUICtrlRebar_SetBandIdealSize|GUICtrlRebar_SetBandLength|GUICtrlRebar_SetBandLParam|GUICtrlRebar_SetBandStyle|GUICtrlRebar_SetBandStyleBreak|GUICtrlRebar_SetBandStyleChildEdge|GUICtrlRebar_SetBandStyleFixedBMP|GUICtrlRebar_SetBandStyleFixedSize|GUICtrlRebar_SetBandStyleGripperAlways|GUICtrlRebar_SetBandStyleHidden|GUICtrlRebar_SetBandStyleHideTitle|GUICtrlRebar_SetBandStyleNoGripper|GUICtrlRebar_SetBandStyleTopAlign|GUICtrlRebar_SetBandStyleUseChevron|GUICtrlRebar_SetBandStyleVariableHeight|GUICtrlRebar_SetBandText|GUICtrlRebar_SetBKColor|GUICtrlRebar_SetColorScheme|GUICtrlRebar_SetTextColor|GUICtrlRebar_SetToolTips|GUICtrlRebar_SetUnicodeFormat|GUICtrlRebar_ShowBand|GUICtrlSlider_ClearSel|GUICtrlSlider_ClearTics|GUICtrlSlider_Create|GUICtrlSlider_Destroy|GUICtrlSlider_GetBuddy|GUICtrlSlider_GetChannelRect|GUICtrlSlider_GetLineSize|GUICtrlSlider_GetNumTics|GUICtrlSlider_GetPageSize|GUICtrlSlider_GetPos|GUICtrlSlider_GetPTics|GUICtrlSlider_GetRange|GUICtrlSlider_GetRangeMax|GUICtrlSlider_GetRangeMin|GUICtrlSlider_GetSel|GUICtrlSlider_GetSelEnd|GUICtrlSlider_GetSelStart|GUICtrlSlider_GetThumbLength|GUICtrlSlider_GetThumbRect|GUICtrlSlider_GetThumbRectEx|GUICtrlSlider_GetTic|GUICtrlSlider_GetTicPos|GUICtrlSlider_GetToolTips|GUICtrlSlider_GetUnicodeFormat|GUICtrlSlider_SetBuddy|GUICtrlSlider_SetLineSize|GUICtrlSlider_SetPageSize|GUICtrlSlider_SetPos|GUICtrlSlider_SetRange|GUICtrlSlider_SetRangeMax|GUICtrlSlider_SetRangeMin|GUICtrlSlider_SetSel|GUICtrlSlider_SetSelEnd|GUICtrlSlider_SetSelStart|GUICtrlSlider_SetThumbLength|GUICtrlSlider_SetTic|GUICtrlSlider_SetTicFreq|GUICtrlSlider_SetTipSide|GUICtrlSlider_SetToolTips|GUICtrlSlider_SetUnicodeFormat|GUICtrlStatusBar_Create|GUICtrlStatusBar_Destroy|GUICtrlStatusBar_EmbedControl|GUICtrlStatusBar_GetBorders|GUICtrlStatusBar_GetBordersHorz|GUICtrlStatusBar_GetBordersRect|GUICtrlStatusBar_GetBordersVert|GUICtrlStatusBar_GetCount|GUICtrlStatusBar_GetHeight|GUICtrlStatusBar_GetIcon|GUICtrlStatusBar_GetParts|GUICtrlStatusBar_GetRect|GUICtrlStatusBar_GetRectEx|GUICtrlStatusBar_GetText|GUICtrlStatusBar_GetTextFlags|GUICtrlStatusBar_GetTextLength|GUICtrlStatusBar_GetTextLengthEx|GUICtrlStatusBar_GetTipText|GUICtrlStatusBar_GetUnicodeFormat|GUICtrlStatusBar_GetWidth|GUICtrlStatusBar_IsSimple|GUICtrlStatusBar_Resize|GUICtrlStatusBar_SetBkColor|GUICtrlStatusBar_SetIcon|GUICtrlStatusBar_SetMinHeight|GUICtrlStatusBar_SetParts|GUICtrlStatusBar_SetSimple|GUICtrlStatusBar_SetText|GUICtrlStatusBar_SetTipText|GUICtrlStatusBar_SetUnicodeFormat|GUICtrlStatusBar_ShowHide|GUICtrlTab_Create|GUICtrlTab_DeleteAllItems|GUICtrlTab_DeleteItem|GUICtrlTab_DeselectAll|GUICtrlTab_Destroy|GUICtrlTab_FindTab|GUICtrlTab_GetCurFocus|GUICtrlTab_GetCurSel|GUICtrlTab_GetDisplayRect|GUICtrlTab_GetDisplayRectEx|GUICtrlTab_GetExtendedStyle|GUICtrlTab_GetImageList|GUICtrlTab_GetItem|GUICtrlTab_GetItemCount|GUICtrlTab_GetItemImage|GUICtrlTab_GetItemParam|GUICtrlTab_GetItemRect|GUICtrlTab_GetItemRectEx|GUICtrlTab_GetItemState|GUICtrlTab_GetItemText|GUICtrlTab_GetRowCount|GUICtrlTab_GetToolTips|GUICtrlTab_GetUnicodeFormat|GUICtrlTab_HighlightItem|GUICtrlTab_HitTest|GUICtrlTab_InsertItem|GUICtrlTab_RemoveImage|GUICtrlTab_SetCurFocus|GUICtrlTab_SetCurSel|GUICtrlTab_SetExtendedStyle|GUICtrlTab_SetImageList|GUICtrlTab_SetItem|GUICtrlTab_SetItemImage|GUICtrlTab_SetItemParam|GUICtrlTab_SetItemSize|GUICtrlTab_SetItemState|GUICtrlTab_SetItemText|GUICtrlTab_SetMinTabWidth|GUICtrlTab_SetPadding|GUICtrlTab_SetToolTips|GUICtrlTab_SetUnicodeFormat|GUICtrlToolbar_AddBitmap|GUICtrlToolbar_AddButton|GUICtrlToolbar_AddButtonSep|GUICtrlToolbar_AddString|GUICtrlToolbar_ButtonCount|GUICtrlToolbar_CheckButton|GUICtrlToolbar_ClickAccel|GUICtrlToolbar_ClickButton|GUICtrlToolbar_ClickIndex|GUICtrlToolbar_CommandToIndex|GUICtrlToolbar_Create|GUICtrlToolbar_Customize|GUICtrlToolbar_DeleteButton|GUICtrlToolbar_Destroy|GUICtrlToolbar_EnableButton|GUICtrlToolbar_FindToolbar|GUICtrlToolbar_GetAnchorHighlight|GUICtrlToolbar_GetBitmapFlags|GUICtrlToolbar_GetButtonBitmap|GUICtrlToolbar_GetButtonInfo|GUICtrlToolbar_GetButtonInfoEx|GUICtrlToolbar_GetButtonParam|GUICtrlToolbar_GetButtonRect|GUICtrlToolbar_GetButtonRectEx|GUICtrlToolbar_GetButtonSize|GUICtrlToolbar_GetButtonState|GUICtrlToolbar_GetButtonStyle|GUICtrlToolbar_GetButtonText|GUICtrlToolbar_GetColorScheme|GUICtrlToolbar_GetDisabledImageList|GUICtrlToolbar_GetExtendedStyle|GUICtrlToolbar_GetHotImageList|GUICtrlToolbar_GetHotItem|GUICtrlToolbar_GetImageList|GUICtrlToolbar_GetInsertMark|GUICtrlToolbar_GetInsertMarkColor|GUICtrlToolbar_GetMaxSize|GUICtrlToolbar_GetMetrics|GUICtrlToolbar_GetPadding|GUICtrlToolbar_GetRows|GUICtrlToolbar_GetString|GUICtrlToolbar_GetStyle|GUICtrlToolbar_GetStyleAltDrag|GUICtrlToolbar_GetStyleCustomErase|GUICtrlToolbar_GetStyleFlat|GUICtrlToolbar_GetStyleList|GUICtrlToolbar_GetStyleRegisterDrop|GUICtrlToolbar_GetStyleToolTips|GUICtrlToolbar_GetStyleTransparent|GUICtrlToolbar_GetStyleWrapable|GUICtrlToolbar_GetTextRows|GUICtrlToolbar_GetToolTips|GUICtrlToolbar_GetUnicodeFormat|GUICtrlToolbar_HideButton|GUICtrlToolbar_HighlightButton|GUICtrlToolbar_HitTest|GUICtrlToolbar_IndexToCommand|GUICtrlToolbar_InsertButton|GUICtrlToolbar_InsertMarkHitTest|GUICtrlToolbar_IsButtonChecked|GUICtrlToolbar_IsButtonEnabled|GUICtrlToolbar_IsButtonHidden|GUICtrlToolbar_IsButtonHighlighted|GUICtrlToolbar_IsButtonIndeterminate|GUICtrlToolbar_IsButtonPressed|GUICtrlToolbar_LoadBitmap|GUICtrlToolbar_LoadImages|GUICtrlToolbar_MapAccelerator|GUICtrlToolbar_MoveButton|GUICtrlToolbar_PressButton|GUICtrlToolbar_SetAnchorHighlight|GUICtrlToolbar_SetBitmapSize|GUICtrlToolbar_SetButtonBitMap|GUICtrlToolbar_SetButtonInfo|GUICtrlToolbar_SetButtonInfoEx|GUICtrlToolbar_SetButtonParam|GUICtrlToolbar_SetButtonSize|GUICtrlToolbar_SetButtonState|GUICtrlToolbar_SetButtonStyle|GUICtrlToolbar_SetButtonText|GUICtrlToolbar_SetButtonWidth|GUICtrlToolbar_SetCmdID|GUICtrlToolbar_SetColorScheme|GUICtrlToolbar_SetDisabledImageList|GUICtrlToolbar_SetDrawTextFlags|GUICtrlToolbar_SetExtendedStyle|GUICtrlToolbar_SetHotImageList|GUICtrlToolbar_SetHotItem|GUICtrlToolbar_SetImageList|GUICtrlToolbar_SetIndent|GUICtrlToolbar_SetIndeterminate|GUICtrlToolbar_SetInsertMark|GUICtrlToolbar_SetInsertMarkColor|GUICtrlToolbar_SetMaxTextRows|GUICtrlToolbar_SetMetrics|GUICtrlToolbar_SetPadding|GUICtrlToolbar_SetParent|GUICtrlToolbar_SetRows|GUICtrlToolbar_SetStyle|GUICtrlToolbar_SetStyleAltDrag|GUICtrlToolbar_SetStyleCustomErase|GUICtrlToolbar_SetStyleFlat|GUICtrlToolbar_SetStyleList|GUICtrlToolbar_SetStyleRegisterDrop|GUICtrlToolbar_SetStyleToolTips|GUICtrlToolbar_SetStyleTransparent|GUICtrlToolbar_SetStyleWrapable|GUICtrlToolbar_SetToolTips|GUICtrlToolbar_SetUnicodeFormat|GUICtrlToolbar_SetWindowTheme|GUICtrlTreeView_Add|GUICtrlTreeView_AddChild|GUICtrlTreeView_AddChildFirst|GUICtrlTreeView_AddFirst|GUICtrlTreeView_BeginUpdate|GUICtrlTreeView_ClickItem|GUICtrlTreeView_Create|GUICtrlTreeView_CreateDragImage|GUICtrlTreeView_CreateSolidBitMap|GUICtrlTreeView_Delete|GUICtrlTreeView_DeleteAll|GUICtrlTreeView_DeleteChildren|GUICtrlTreeView_Destroy|GUICtrlTreeView_DisplayRect|GUICtrlTreeView_DisplayRectEx|GUICtrlTreeView_EditText|GUICtrlTreeView_EndEdit|GUICtrlTreeView_EndUpdate|GUICtrlTreeView_EnsureVisible|GUICtrlTreeView_Expand|GUICtrlTreeView_ExpandedOnce|GUICtrlTreeView_FindItem|GUICtrlTreeView_FindItemEx|GUICtrlTreeView_GetBkColor|GUICtrlTreeView_GetBold|GUICtrlTreeView_GetChecked|GUICtrlTreeView_GetChildCount|GUICtrlTreeView_GetChildren|GUICtrlTreeView_GetCount|GUICtrlTreeView_GetCut|GUICtrlTreeView_GetDropTarget|GUICtrlTreeView_GetEditControl|GUICtrlTreeView_GetExpanded|GUICtrlTreeView_GetFirstChild|GUICtrlTreeView_GetFirstItem|GUICtrlTreeView_GetFirstVisible|GUICtrlTreeView_GetFocused|GUICtrlTreeView_GetHeight|GUICtrlTreeView_GetImageIndex|GUICtrlTreeView_GetImageListIconHandle|GUICtrlTreeView_GetIndent|GUICtrlTreeView_GetInsertMarkColor|GUICtrlTreeView_GetISearchString|GUICtrlTreeView_GetItemByIndex|GUICtrlTreeView_GetItemHandle|GUICtrlTreeView_GetItemParam|GUICtrlTreeView_GetLastChild|GUICtrlTreeView_GetLineColor|GUICtrlTreeView_GetNext|GUICtrlTreeView_GetNextChild|GUICtrlTreeView_GetNextSibling|GUICtrlTreeView_GetNextVisible|GUICtrlTreeView_GetNormalImageList|GUICtrlTreeView_GetParentHandle|GUICtrlTreeView_GetParentParam|GUICtrlTreeView_GetPrev|GUICtrlTreeView_GetPrevChild|GUICtrlTreeView_GetPrevSibling|GUICtrlTreeView_GetPrevVisible|GUICtrlTreeView_GetScrollTime|GUICtrlTreeView_GetSelected|GUICtrlTreeView_GetSelectedImageIndex|GUICtrlTreeView_GetSelection|GUICtrlTreeView_GetSiblingCount|GUICtrlTreeView_GetState|GUICtrlTreeView_GetStateImageIndex|GUICtrlTreeView_GetStateImageList|GUICtrlTreeView_GetText|GUICtrlTreeView_GetTextColor|GUICtrlTreeView_GetToolTips|GUICtrlTreeView_GetTree|GUICtrlTreeView_GetUnicodeFormat|GUICtrlTreeView_GetVisible|GUICtrlTreeView_GetVisibleCount|GUICtrlTreeView_HitTest|GUICtrlTreeView_HitTestEx|GUICtrlTreeView_HitTestItem|GUICtrlTreeView_Index|GUICtrlTreeView_InsertItem|GUICtrlTreeView_IsFirstItem|GUICtrlTreeView_IsParent|GUICtrlTreeView_Level|GUICtrlTreeView_SelectItem|GUICtrlTreeView_SelectItemByIndex|GUICtrlTreeView_SetBkColor|GUICtrlTreeView_SetBold|GUICtrlTreeView_SetChecked|GUICtrlTreeView_SetCheckedByIndex|GUICtrlTreeView_SetChildren|GUICtrlTreeView_SetCut|GUICtrlTreeView_SetDropTarget|GUICtrlTreeView_SetFocused|GUICtrlTreeView_SetHeight|GUICtrlTreeView_SetIcon|GUICtrlTreeView_SetImageIndex|GUICtrlTreeView_SetIndent|GUICtrlTreeView_SetInsertMark|GUICtrlTreeView_SetInsertMarkColor|GUICtrlTreeView_SetItemHeight|GUICtrlTreeView_SetItemParam|GUICtrlTreeView_SetLineColor|GUICtrlTreeView_SetNormalImageList|GUICtrlTreeView_SetScrollTime|GUICtrlTreeView_SetSelected|GUICtrlTreeView_SetSelectedImageIndex|GUICtrlTreeView_SetState|GUICtrlTreeView_SetStateImageIndex|GUICtrlTreeView_SetStateImageList|GUICtrlTreeView_SetText|GUICtrlTreeView_SetTextColor|GUICtrlTreeView_SetToolTips|GUICtrlTreeView_SetUnicodeFormat|GUICtrlTreeView_Sort|GUIImageList_Add|GUIImageList_AddBitmap|GUIImageList_AddIcon|GUIImageList_AddMasked|GUIImageList_BeginDrag|GUIImageList_Copy|GUIImageList_Create|GUIImageList_Destroy|GUIImageList_DestroyIcon|GUIImageList_DragEnter|GUIImageList_DragLeave|GUIImageList_DragMove|GUIImageList_Draw|GUIImageList_DrawEx|GUIImageList_Duplicate|GUIImageList_EndDrag|GUIImageList_GetBkColor|GUIImageList_GetIcon|GUIImageList_GetIconHeight|GUIImageList_GetIconSize|GUIImageList_GetIconSizeEx|GUIImageList_GetIconWidth|GUIImageList_GetImageCount|GUIImageList_GetImageInfoEx|GUIImageList_Remove|GUIImageList_ReplaceIcon|GUIImageList_SetBkColor|GUIImageList_SetIconSize|GUIImageList_SetImageCount|GUIImageList_Swap|GUIScrollBars_EnableScrollBar|GUIScrollBars_GetScrollBarInfoEx|GUIScrollBars_GetScrollBarRect|GUIScrollBars_GetScrollBarRGState|GUIScrollBars_GetScrollBarXYLineButton|GUIScrollBars_GetScrollBarXYThumbBottom|GUIScrollBars_GetScrollBarXYThumbTop|GUIScrollBars_GetScrollInfo|GUIScrollBars_GetScrollInfoEx|GUIScrollBars_GetScrollInfoMax|GUIScrollBars_GetScrollInfoMin|GUIScrollBars_GetScrollInfoPage|GUIScrollBars_GetScrollInfoPos|GUIScrollBars_GetScrollInfoTrackPos|GUIScrollBars_GetScrollPos|GUIScrollBars_GetScrollRange|GUIScrollBars_Init|GUIScrollBars_ScrollWindow|GUIScrollBars_SetScrollInfo|GUIScrollBars_SetScrollInfoMax|GUIScrollBars_SetScrollInfoMin|GUIScrollBars_SetScrollInfoPage|GUIScrollBars_SetScrollInfoPos|GUIScrollBars_SetScrollRange|GUIScrollBars_ShowScrollBar|GUIToolTip_Activate|GUIToolTip_AddTool|GUIToolTip_AdjustRect|GUIToolTip_BitsToTTF|GUIToolTip_Create|GUIToolTip_DelTool|GUIToolTip_Destroy|GUIToolTip_EnumTools|GUIToolTip_GetBubbleHeight|GUIToolTip_GetBubbleSize|GUIToolTip_GetBubbleWidth|GUIToolTip_GetCurrentTool|GUIToolTip_GetDelayTime|GUIToolTip_GetMargin|GUIToolTip_GetMarginEx|GUIToolTip_GetMaxTipWidth|GUIToolTip_GetText|GUIToolTip_GetTipBkColor|GUIToolTip_GetTipTextColor|GUIToolTip_GetTitleBitMap|GUIToolTip_GetTitleText|GUIToolTip_GetToolCount|GUIToolTip_GetToolInfo|GUIToolTip_HitTest|GUIToolTip_NewToolRect|GUIToolTip_Pop|GUIToolTip_PopUp|GUIToolTip_SetDelayTime|GUIToolTip_SetMargin|GUIToolTip_SetMaxTipWidth|GUIToolTip_SetTipBkColor|GUIToolTip_SetTipTextColor|GUIToolTip_SetTitle|GUIToolTip_SetToolInfo|GUIToolTip_SetWindowTheme|GUIToolTip_ToolExists|GUIToolTip_ToolToArray|GUIToolTip_TrackActivate|GUIToolTip_TrackPosition|GUIToolTip_TTFToBits|GUIToolTip_Update|GUIToolTip_UpdateTipText|HexToString|IE_Example|IE_Introduction|IE_VersionInfo|IEAction|IEAttach|IEBodyReadHTML|IEBodyReadText|IEBodyWriteHTML|IECreate|IECreateEmbedded|IEDocGetObj|IEDocInsertHTML|IEDocInsertText|IEDocReadHTML|IEDocWriteHTML|IEErrorHandlerDeRegister|IEErrorHandlerRegister|IEErrorNotify|IEFormElementCheckBoxSelect|IEFormElementGetCollection|IEFormElementGetObjByName|IEFormElementGetValue|IEFormElementOptionSelect|IEFormElementRadioSelect|IEFormElementSetValue|IEFormGetCollection|IEFormGetObjByName|IEFormImageClick|IEFormReset|IEFormSubmit|IEFrameGetCollection|IEFrameGetObjByName|IEGetObjById|IEGetObjByName|IEHeadInsertEventScript|IEImgClick|IEImgGetCollection|IEIsFrameSet|IELinkClickByIndex|IELinkClickByText|IELinkGetCollection|IELoadWait|IELoadWaitTimeout|IENavigate|IEPropertyGet|IEPropertySet|IEQuit|IETableGetCollection|IETableWriteToArray|IETagNameAllGetCollection|IETagNameGetCollection|Iif|INetExplorerCapable|INetGetSource|INetMail|INetSmtpMail|IsPressed|MathCheckDiv|Max|MemGlobalAlloc|MemGlobalFree|MemGlobalLock|MemGlobalSize|MemGlobalUnlock|MemMoveMemory|MemMsgBox|MemShowError|MemVirtualAlloc|MemVirtualAllocEx|MemVirtualFree|MemVirtualFreeEx|Min|MouseTrap|NamedPipes_CallNamedPipe|NamedPipes_ConnectNamedPipe|NamedPipes_CreateNamedPipe|NamedPipes_CreatePipe|NamedPipes_DisconnectNamedPipe|NamedPipes_GetNamedPipeHandleState|NamedPipes_GetNamedPipeInfo|NamedPipes_PeekNamedPipe|NamedPipes_SetNamedPipeHandleState|NamedPipes_TransactNamedPipe|NamedPipes_WaitNamedPipe|Net_Share_ConnectionEnum|Net_Share_FileClose|Net_Share_FileEnum|Net_Share_FileGetInfo|Net_Share_PermStr|Net_Share_ResourceStr|Net_Share_SessionDel|Net_Share_SessionEnum|Net_Share_SessionGetInfo|Net_Share_ShareAdd|Net_Share_ShareCheck|Net_Share_ShareDel|Net_Share_ShareEnum|Net_Share_ShareGetInfo|Net_Share_ShareSetInfo|Net_Share_StatisticsGetSvr|Net_Share_StatisticsGetWrk|Now|NowCalc|NowCalcDate|NowDate|NowTime|PathFull|PathMake|PathSplit|ProcessGetName|ProcessGetPriority|Radian|ReplaceStringInFile|RunDOS|ScreenCapture_Capture|ScreenCapture_CaptureWnd|ScreenCapture_SaveImage|ScreenCapture_SetBMPFormat|ScreenCapture_SetJPGQuality|ScreenCapture_SetTIFColorDepth|ScreenCapture_SetTIFCompression|Security__AdjustTokenPrivileges|Security__GetAccountSid|Security__GetLengthSid|Security__GetTokenInformation|Security__ImpersonateSelf|Security__IsValidSid|Security__LookupAccountName|Security__LookupAccountSid|Security__LookupPrivilegeValue|Security__OpenProcessToken|Security__OpenThreadToken|Security__OpenThreadTokenEx|Security__SetPrivilege|Security__SidToStringSid|Security__SidTypeStr|Security__StringSidToSid|SendMessage|SendMessageA|SetDate|SetTime|Singleton|SoundClose|SoundLength|SoundOpen|SoundPause|SoundPlay|SoundPos|SoundResume|SoundSeek|SoundStatus|SoundStop|SQLite_Changes|SQLite_Close|SQLite_Display2DResult|SQLite_Encode|SQLite_ErrCode|SQLite_ErrMsg|SQLite_Escape|SQLite_Exec|SQLite_FetchData|SQLite_FetchNames|SQLite_GetTable|SQLite_GetTable2d|SQLite_LastInsertRowID|SQLite_LibVersion|SQLite_Open|SQLite_Query|SQLite_QueryFinalize|SQLite_QueryReset|SQLite_QuerySingleRow|SQLite_SaveMode|SQLite_SetTimeout|SQLite_Shutdown|SQLite_SQLiteExe|SQLite_Startup|SQLite_TotalChanges|StringAddComma|StringBetween|StringEncrypt|StringInsert|StringProper|StringRepeat|StringReverse|StringSplit|StringToHex|TCPIpToName|TempFile|TicksToTime|Timer_Diff|Timer_GetTimerID|Timer_Init|Timer_KillAllTimers|Timer_KillTimer|Timer_SetTimer|TimeToTicks|VersionCompare|viClose|viExecCommand|viFindGpib|viGpibBusReset|viGTL|viOpen|viSetAttribute|viSetTimeout|WeekNumberISO|WinAPI_AttachConsole|WinAPI_AttachThreadInput|WinAPI_Beep|WinAPI_BitBlt|WinAPI_CallNextHookEx|WinAPI_Check|WinAPI_ClientToScreen|WinAPI_CloseHandle|WinAPI_CommDlgExtendedError|WinAPI_CopyIcon|WinAPI_CreateBitmap|WinAPI_CreateCompatibleBitmap|WinAPI_CreateCompatibleDC|WinAPI_CreateEvent|WinAPI_CreateFile|WinAPI_CreateFont|WinAPI_CreateFontIndirect|WinAPI_CreateProcess|WinAPI_CreateSolidBitmap|WinAPI_CreateSolidBrush|WinAPI_CreateWindowEx|WinAPI_DefWindowProc|WinAPI_DeleteDC|WinAPI_DeleteObject|WinAPI_DestroyIcon|WinAPI_DestroyWindow|WinAPI_DrawEdge|WinAPI_DrawFrameControl|WinAPI_DrawIcon|WinAPI_DrawIconEx|WinAPI_DrawText|WinAPI_EnableWindow|WinAPI_EnumDisplayDevices|WinAPI_EnumWindows|WinAPI_EnumWindowsPopup|WinAPI_EnumWindowsTop|WinAPI_ExpandEnvironmentStrings|WinAPI_ExtractIconEx|WinAPI_FatalAppExit|WinAPI_FillRect|WinAPI_FindExecutable|WinAPI_FindWindow|WinAPI_FlashWindow|WinAPI_FlashWindowEx|WinAPI_FloatToInt|WinAPI_FlushFileBuffers|WinAPI_FormatMessage|WinAPI_FrameRect|WinAPI_FreeLibrary|WinAPI_GetAncestor|WinAPI_GetAsyncKeyState|WinAPI_GetClassName|WinAPI_GetClientHeight|WinAPI_GetClientRect|WinAPI_GetClientWidth|WinAPI_GetCurrentProcess|WinAPI_GetCurrentProcessID|WinAPI_GetCurrentThread|WinAPI_GetCurrentThreadId|WinAPI_GetCursorInfo|WinAPI_GetDC|WinAPI_GetDesktopWindow|WinAPI_GetDeviceCaps|WinAPI_GetDIBits|WinAPI_GetDlgCtrlID|WinAPI_GetDlgItem|WinAPI_GetFileSizeEx|WinAPI_GetFocus|WinAPI_GetForegroundWindow|WinAPI_GetIconInfo|WinAPI_GetLastError|WinAPI_GetLastErrorMessage|WinAPI_GetModuleHandle|WinAPI_GetMousePos|WinAPI_GetMousePosX|WinAPI_GetMousePosY|WinAPI_GetObject|WinAPI_GetOpenFileName|WinAPI_GetOverlappedResult|WinAPI_GetParent|WinAPI_GetProcessAffinityMask|WinAPI_GetSaveFileName|WinAPI_GetStdHandle|WinAPI_GetStockObject|WinAPI_GetSysColor|WinAPI_GetSysColorBrush|WinAPI_GetSystemMetrics|WinAPI_GetTextExtentPoint32|WinAPI_GetWindow|WinAPI_GetWindowDC|WinAPI_GetWindowHeight|WinAPI_GetWindowLong|WinAPI_GetWindowRect|WinAPI_GetWindowText|WinAPI_GetWindowThreadProcessId|WinAPI_GetWindowWidth|WinAPI_GetXYFromPoint|WinAPI_GlobalMemStatus|WinAPI_GUIDFromString|WinAPI_GUIDFromStringEx|WinAPI_HiWord|WinAPI_InProcess|WinAPI_IntToFloat|WinAPI_InvalidateRect|WinAPI_IsClassName|WinAPI_IsWindow|WinAPI_IsWindowVisible|WinAPI_LoadBitmap|WinAPI_LoadImage|WinAPI_LoadLibrary|WinAPI_LoadLibraryEx|WinAPI_LoadShell32Icon|WinAPI_LoadString|WinAPI_LocalFree|WinAPI_LoWord|WinAPI_MakeDWord|WinAPI_MAKELANGID|WinAPI_MAKELCID|WinAPI_MakeLong|WinAPI_MessageBeep|WinAPI_Mouse_Event|WinAPI_MoveWindow|WinAPI_MsgBox|WinAPI_MulDiv|WinAPI_MultiByteToWideChar|WinAPI_MultiByteToWideCharEx|WinAPI_OpenProcess|WinAPI_PointFromRect|WinAPI_PostMessage|WinAPI_PrimaryLangId|WinAPI_PtInRect|WinAPI_ReadFile|WinAPI_ReadProcessMemory|WinAPI_RectIsEmpty|WinAPI_RedrawWindow|WinAPI_RegisterWindowMessage|WinAPI_ReleaseCapture|WinAPI_ReleaseDC|WinAPI_ScreenToClient|WinAPI_SelectObject|WinAPI_SetBkColor|WinAPI_SetCapture|WinAPI_SetCursor|WinAPI_SetDefaultPrinter|WinAPI_SetDIBits|WinAPI_SetEvent|WinAPI_SetFocus|WinAPI_SetFont|WinAPI_SetHandleInformation|WinAPI_SetLastError|WinAPI_SetParent|WinAPI_SetProcessAffinityMask|WinAPI_SetSysColors|WinAPI_SetTextColor|WinAPI_SetWindowLong|WinAPI_SetWindowPos|WinAPI_SetWindowsHookEx|WinAPI_SetWindowText|WinAPI_ShowCursor|WinAPI_ShowError|WinAPI_ShowMsg|WinAPI_ShowWindow|WinAPI_StringFromGUID|WinAPI_SubLangId|WinAPI_SystemParametersInfo|WinAPI_TwipsPerPixelX|WinAPI_TwipsPerPixelY|WinAPI_UnhookWindowsHookEx|WinAPI_UpdateLayeredWindow|WinAPI_UpdateWindow|WinAPI_ValidateClassName|WinAPI_WaitForInputIdle|WinAPI_WaitForMultipleObjects|WinAPI_WaitForSingleObject|WinAPI_WideCharToMultiByte|WinAPI_WindowFromPoint|WinAPI_WriteConsole|WinAPI_WriteFile|WinAPI_WriteProcessMemory|WinNet_AddConnection|WinNet_AddConnection2|WinNet_AddConnection3|WinNet_CancelConnection|WinNet_CancelConnection2|WinNet_CloseEnum|WinNet_ConnectionDialog|WinNet_ConnectionDialog1|WinNet_DisconnectDialog|WinNet_DisconnectDialog1|WinNet_EnumResource|WinNet_GetConnection|WinNet_GetConnectionPerformance|WinNet_GetLastError|WinNet_GetNetworkInformation|WinNet_GetProviderName|WinNet_GetResourceInformation|WinNet_GetResourceParent|WinNet_GetUniversalName|WinNet_GetUser|WinNet_OpenEnum|WinNet_RestoreConnection|WinNet_UseConnection|Word_VersionInfo|WordAttach|WordCreate|WordDocAdd|WordDocAddLink|WordDocAddPicture|WordDocClose|WordDocFindReplace|WordDocGetCollection|WordDocLinkGetCollection|WordDocOpen|WordDocPrint|WordDocPropertyGet|WordDocPropertySet|WordDocSave|WordDocSaveAs|WordErrorHandlerDeRegister|WordErrorHandlerRegister|WordErrorNotify|WordMacroRun|WordPropertyGet|WordPropertySet|WordQuit|ce|comments-end|comments-start|cs|include|include-once|NoTrayIcon|RequireAdmin|AutoIt3Wrapper_Au3Check_Parameters|AutoIt3Wrapper_Au3Check_Stop_OnWarning|AutoIt3Wrapper_Change2CUI|AutoIt3Wrapper_Compression|AutoIt3Wrapper_cvsWrapper_Parameters|AutoIt3Wrapper_Icon|AutoIt3Wrapper_Outfile|AutoIt3Wrapper_Outfile_Type|AutoIt3Wrapper_Plugin_Funcs|AutoIt3Wrapper_Res_Comment|AutoIt3Wrapper_Res_Description|AutoIt3Wrapper_Res_Field|AutoIt3Wrapper_Res_File_Add|AutoIt3Wrapper_Res_Fileversion|AutoIt3Wrapper_Res_FileVersion_AutoIncrement|AutoIt3Wrapper_Res_Icon_Add|AutoIt3Wrapper_Res_Language|AutoIt3Wrapper_Res_LegalCopyright|AutoIt3Wrapper_res_requestedExecutionLevel|AutoIt3Wrapper_Res_SaveSource|AutoIt3Wrapper_Run_After|AutoIt3Wrapper_Run_Au3check|AutoIt3Wrapper_Run_Before|AutoIt3Wrapper_Run_cvsWrapper|AutoIt3Wrapper_Run_Debug_Mode|AutoIt3Wrapper_Run_Obfuscator|AutoIt3Wrapper_Run_Tidy|AutoIt3Wrapper_Tidy_Stop_OnError|AutoIt3Wrapper_UseAnsi|AutoIt3Wrapper_UseUpx|AutoIt3Wrapper_UseX64|AutoIt3Wrapper_Version|EndRegion|forceref|Obfuscator_Ignore_Funcs|Obfuscator_Ignore_Variables|Obfuscator_Parameters|Region|Tidy_Parameters\",t=\"AppDataCommonDir|AppDataDir|AutoItExe|AutoItPID|AutoItUnicode|AutoItVersion|AutoItX64|COM_EventObj|CommonFilesDir|Compiled|ComputerName|ComSpec|CR|CRLF|DesktopCommonDir|DesktopDepth|DesktopDir|DesktopHeight|DesktopRefresh|DesktopWidth|DocumentsCommonDir|error|exitCode|exitMethod|extended|FavoritesCommonDir|FavoritesDir|GUI_CtrlHandle|GUI_CtrlId|GUI_DragFile|GUI_DragId|GUI_DropId|GUI_WinHandle|HomeDrive|HomePath|HomeShare|HotKeyPressed|HOUR|InetGetActive|InetGetBytesRead|IPAddress1|IPAddress2|IPAddress3|IPAddress4|KBLayout|LF|LogonDNSDomain|LogonDomain|LogonServer|MDAY|MIN|MON|MyDocumentsDir|NumParams|OSBuild|OSLang|OSServicePack|OSTYPE|OSVersion|ProcessorArch|ProgramFilesDir|ProgramsCommonDir|ProgramsDir|ScriptDir|ScriptFullPath|ScriptLineNumber|ScriptName|SEC|StartMenuCommonDir|StartMenuDir|StartupCommonDir|StartupDir|SW_DISABLE|SW_ENABLE|SW_HIDE|SW_LOCK|SW_MAXIMIZE|SW_MINIMIZE|SW_RESTORE|SW_SHOW|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWMINNOACTIVE|SW_SHOWNA|SW_SHOWNOACTIVATE|SW_SHOWNORMAL|SW_UNLOCK|SystemDir|TAB|TempDir|TRAY_ID|TrayIconFlashing|TrayIconVisible|UserName|UserProfileDir|WDAY|WindowsDir|WorkingDir|YDAY|YEAR\";this.$rules={start:[{token:\"comment.line.ahk\",regex:\"(?:^| );.*$\"},{token:\"comment.block.ahk\",regex:\"/\\\\*\",push:[{token:\"comment.block.ahk\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.ahk\"}]},{token:\"doc.comment.ahk\",regex:\"#cs\",push:[{token:\"doc.comment.ahk\",regex:\"#ce\",next:\"pop\"},{defaultToken:\"doc.comment.ahk\"}]},{token:\"keyword.command.ahk\",regex:\"(?:\\\\b|^)(?:allowsamelinecomments|clipboardtimeout|commentflag|errorstdout|escapechar|hotkeyinterval|hotkeymodifiertimeout|hotstring|include|includeagain|installkeybdhook|installmousehook|keyhistory|ltrim|maxhotkeysperinterval|maxmem|maxthreads|maxthreadsbuffer|maxthreadsperhotkey|noenv|notrayicon|persistent|singleinstance|usehook|winactivateforce|autotrim|blockinput|click|clipwait|continue|control|controlclick|controlfocus|controlget|controlgetfocus|controlgetpos|controlgettext|controlmove|controlsend|controlsendraw|controlsettext|coordmode|critical|detecthiddentext|detecthiddenwindows|drive|driveget|drivespacefree|edit|endrepeat|envadd|envdiv|envget|envmult|envset|envsub|envupdate|exit|exitapp|fileappend|filecopy|filecopydir|filecreatedir|filecreateshortcut|filedelete|filegetattrib|filegetshortcut|filegetsize|filegettime|filegetversion|fileinstall|filemove|filemovedir|fileread|filereadline|filerecycle|filerecycleempty|fileremovedir|fileselectfile|fileselectfolder|filesetattrib|filesettime|formattime|getkeystate|gosub|goto|groupactivate|groupadd|groupclose|groupdeactivate|gui|guicontrol|guicontrolget|hideautoitwin|hotkey|ifequal|ifexist|ifgreater|ifgreaterorequal|ifinstring|ifless|iflessorequal|ifmsgbox|ifnotequal|ifnotexist|ifnotinstring|ifwinactive|ifwinexist|ifwinnotactive|ifwinnotexist|imagesearch|inidelete|iniread|iniwrite|input|inputbox|keyhistory|keywait|listhotkeys|listlines|listvars|menu|mouseclick|mouseclickdrag|mousegetpos|mousemove|msgbox|onexit|outputdebug|pause|pixelgetcolor|pixelsearch|postmessage|process|progress|random|regdelete|regread|regwrite|reload|repeat|run|runas|runwait|send|sendevent|sendinput|sendmode|sendplay|sendmessage|sendraw|setbatchlines|setcapslockstate|setcontroldelay|setdefaultmousespeed|setenv|setformat|setkeydelay|setmousedelay|setnumlockstate|setscrolllockstate|setstorecapslockmode|settimer|settitlematchmode|setwindelay|setworkingdir|shutdown|sleep|sort|soundbeep|soundget|soundgetwavevolume|soundplay|soundset|soundsetwavevolume|splashimage|splashtextoff|splashtexton|splitpath|statusbargettext|statusbarwait|stringcasesense|stringgetpos|stringleft|stringlen|stringlower|stringmid|stringreplace|stringright|stringsplit|stringtrimleft|stringtrimright|stringupper|suspend|sysget|thread|tooltip|transform|traytip|urldownloadtofile|while|winactivate|winactivatebottom|winclose|winget|wingetactivestats|wingetactivetitle|wingetclass|wingetpos|wingettext|wingettitle|winhide|winkill|winmaximize|winmenuselectitem|winminimize|winminimizeall|winminimizeallundo|winmove|winrestore|winset|winsettitle|winshow|winwait|winwaitactive|winwaitclose|winwaitnotactive)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.ahk\",regex:\"(?:\\\\b|^)(?:if|else|return|loop|break|for|while|global|local|byref)\\\\b\",caseInsensitive:!0},{token:\"support.function.ahk\",regex:\"(?:\\\\b|^)(?:abs|acos|asc|asin|atan|ceil|chr|cos|dllcall|exp|fileexist|floor|getkeystate|il_add|il_create|il_destroy|instr|substr|isfunc|islabel|ln|log|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|onmessage|numget|numput|registercallback|regexmatch|regexreplace|round|sin|tan|sqrt|strlen|sb_seticon|sb_setparts|sb_settext|tv_add|tv_delete|tv_getchild|tv_getcount|tv_getnext|tv_get|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist)\\\\b\",caseInsensitive:!0},{token:\"variable.predefined.ahk\",regex:\"(?:\\\\b|^)(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_formatfloat|a_formatinteger|a_gui|a_guievent|a_guicontrol|a_guicontrolevent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|programfiles|a_programfiles|a_programs|a_programscommon|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel)\\\\b\",caseInsensitive:!0},{token:\"support.constant.ahk\",regex:\"(?:\\\\b|^)(?:shift|lshift|rshift|alt|lalt|ralt|control|lcontrol|rcontrol|ctrl|lctrl|rctrl|lwin|rwin|appskey|altdown|altup|shiftdown|shiftup|ctrldown|ctrlup|lwindown|lwinup|rwindown|rwinup|lbutton|rbutton|mbutton|wheelup|wheelleft|wheelright|wheeldown|xbutton1|xbutton2|joy1|joy2|joy3|joy4|joy5|joy6|joy7|joy8|joy9|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy30|joy31|joy32|joyx|joyy|joyz|joyr|joyu|joyv|joypov|joyname|joybuttons|joyaxes|joyinfo|space|tab|enter|escape|esc|backspace|bs|delete|del|insert|ins|pgup|pgdn|home|end|up|down|left|right|printscreen|ctrlbreak|pause|scrolllock|capslock|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadmult|numpadadd|numpadsub|numpaddiv|numpaddot|numpaddel|numpadins|numpadclear|numpadup|numpaddown|numpadleft|numpadright|numpadhome|numpadend|numpadpgup|numpadpgdn|numpadenter|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f20|f21|f22|f23|f24|browser_back|browser_forward|browser_refresh|browser_stop|browser_search|browser_favorites|browser_home|volume_mute|volume_down|volume_up|media_next|media_prev|media_stop|media_play_pause|launch_mail|launch_media|launch_app1|launch_app2)\\\\b\",caseInsensitive:!0},{token:\"variable.parameter\",regex:\"(?:\\\\b|^)(?:pixel|mouse|screen|relative|rgb|ltrim|rtrim|join|low|belownormal|normal|abovenormal|high|realtime|ahk_id|ahk_pid|ahk_class|ahk_group|between|contains|in|is|integer|float|integerfast|floatfast|number|digit|xdigit|alpha|upper|lower|alnum|time|date|not|or|and|alwaysontop|topmost|top|bottom|transparent|transcolor|redraw|region|id|idlast|processname|minmax|controllist|count|list|capacity|statuscd|eject|lock|unlock|label|filesystem|label|setlabel|serial|type|status|static|seconds|minutes|hours|days|read|parse|logoff|close|error|single|tray|add|rename|check|uncheck|togglecheck|enable|disable|toggleenable|default|nodefault|standard|nostandard|color|delete|deleteall|icon|noicon|tip|click|show|mainwindow|nomainwindow|useerrorlevel|text|picture|pic|groupbox|button|checkbox|radio|dropdownlist|ddl|combobox|listbox|listview|datetime|monthcal|updown|slider|tab|tab2|statusbar|treeview|iconsmall|tile|report|sortdesc|nosort|nosorthdr|grid|hdr|autosize|range|xm|ym|ys|xs|xp|yp|font|resize|owner|submit|nohide|minimize|maximize|restore|noactivate|na|cancel|destroy|center|margin|maxsize|minsize|owndialogs|guiescape|guiclose|guisize|guicontextmenu|guidropfiles|tabstop|section|altsubmit|wrap|hscroll|vscroll|border|top|bottom|buttons|expand|first|imagelist|lines|wantctrla|wantf2|vis|visfirst|number|uppercase|lowercase|limit|password|multi|wantreturn|group|background|bold|italic|strike|underline|norm|backgroundtrans|theme|caption|delimiter|minimizebox|maximizebox|sysmenu|toolwindow|flash|style|exstyle|check3|checked|checkedgray|readonly|password|hidden|left|right|center|notab|section|move|focus|hide|choose|choosestring|text|pos|enabled|disabled|visible|lastfound|lastfoundexist|alttab|shiftalttab|alttabmenu|alttabandmenu|alttabmenudismiss|notimers|interrupt|priority|waitclose|blind|raw|unicode|deref|pow|bitnot|bitand|bitor|bitxor|bitshiftleft|bitshiftright|yes|no|ok|cancel|abort|retry|ignore|tryagain|on|off|all|hkey_local_machine|hkey_users|hkey_current_user|hkey_classes_root|hkey_current_config|hklm|hku|hkcu|hkcr|hkcc|reg_sz|reg_expand_sz|reg_multi_sz|reg_dword|reg_qword|reg_binary|reg_link|reg_resource_list|reg_full_resource_descriptor|reg_resource_requirements_list|reg_dword_big_endian)\\\\b\",caseInsensitive:!0},{keywordMap:{\"constant.language\":e},regex:\"\\\\w+\\\\b\"},{keywordMap:{\"variable.function\":t},regex:\"@\\\\w+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"keyword.operator.ahk\",regex:\"=|==|<>|:=|<|>|\\\\*|\\\\/|\\\\+|:|\\\\?|\\\\-\"},{token:\"punctuation.ahk\",regex:\"#|`|::|,|\\\\{|\\\\}|\\\\(|\\\\)|\\\\%\"},{token:[\"punctuation.quote.double\",\"string.quoted.ahk\",\"punctuation.quote.double\"],regex:'(\")((?:[^\"]|\"\")*)(\")'},{token:[\"label.ahk\",\"punctuation.definition.label.ahk\"],regex:\"^([^: ]+)(:)(?!:)\"}]},this.normalizeRules()};s.metaData={name:\"AutoHotKey\",scopeName:\"source.ahk\",fileTypes:[\"ahk\"],foldingStartMarker:\"^\\\\s*/\\\\*|^(?![^{]*?;|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|;|/\\\\*(?!.*?\\\\*/.*\\\\S))\",foldingStopMarker:\"^\\\\s*\\\\*/|^\\\\s*\\\\}\"},r.inherits(s,i),t.AutoHotKeyHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/autohotkey\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/autohotkey_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./autohotkey_highlight_rules\").AutoHotKeyHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/autohotkey\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-batchfile.js",
    "content": "define(\"ace/mode/batchfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.command.dosbatch\",regex:\"\\\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.statement.dosbatch\",regex:\"\\\\b(?:goto|call|exit)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.conditional.if.dosbatch\",regex:\"\\\\bif\\\\s+not\\\\s+(?:exist|defined|errorlevel|cmdextversion)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.conditional.dosbatch\",regex:\"\\\\b(?:if|else)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.repeat.dosbatch\",regex:\"\\\\bfor\\\\b\",caseInsensitive:!0},{token:\"keyword.operator.dosbatch\",regex:\"\\\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\\\b\"},{token:[\"doc.comment\",\"comment\"],regex:\"(?:^|\\\\b)(rem)($|\\\\s.*$)\",caseInsensitive:!0},{token:\"comment.line.colons.dosbatch\",regex:\"::.*$\"},{include:\"variable\"},{token:\"punctuation.definition.string.begin.shell\",regex:'\"',push:[{token:\"punctuation.definition.string.end.shell\",regex:'\"',next:\"pop\"},{include:\"variable\"},{defaultToken:\"string.quoted.double.dosbatch\"}]},{token:\"keyword.operator.pipe.dosbatch\",regex:\"[|]\"},{token:\"keyword.operator.redirect.shell\",regex:\"&>|\\\\d*>&\\\\d*|\\\\d*(?:>>|>|<)|\\\\d*<&|\\\\d*<>\"}],variable:[{token:\"constant.numeric\",regex:\"%%\\\\w+|%[*\\\\d]|%\\\\w+%\"},{token:\"constant.numeric\",regex:\"%~\\\\d+\"},{token:[\"markup.list\",\"constant.other\",\"markup.list\"],regex:\"(%)(\\\\w+)(%?)\"}]},this.normalizeRules()};s.metaData={name:\"Batch File\",scopeName:\"source.dosbatch\",fileTypes:[\"bat\"]},r.inherits(s,i),t.BatchFileHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/batchfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/batchfile_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./batchfile_highlight_rules\").BatchFileHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"::\",this.blockComment=\"\",this.$id=\"ace/mode/batchfile\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-bro.js",
    "content": "define(\"ace/mode/bro_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"punctuation.definition.comment.bro\",regex:/#/,push:[{token:\"comment.line.number-sign.bro\",regex:/$/,next:\"pop\"},{defaultToken:\"comment.line.number-sign.bro\"}]},{token:\"keyword.control.bro\",regex:/\\b(?:break|case|continue|else|for|if|return|switch|next|when|timeout|schedule)\\b/},{token:[\"meta.function.bro\",\"meta.function.bro\",\"storage.type.bro\",\"meta.function.bro\",\"entity.name.function.bro\",\"meta.function.bro\"],regex:/^(\\s*)(?:function|hook|event)(\\s*)(.*)(\\s*\\()(.*)(\\).*$)/},{token:\"storage.type.bro\",regex:/\\b(?:bool|enum|double|int|count|port|addr|subnet|any|file|interval|time|string|table|vector|set|record|pattern|hook)\\b/},{token:\"storage.modifier.bro\",regex:/\\b(?:global|const|redef|local|&(?:optional|rotate_interval|rotate_size|add_func|del_func|expire_func|expire_create|expire_read|expire_write|persistent|synchronized|encrypt|mergeable|priority|group|type_column|log|error_handler))\\b/},{token:\"keyword.operator.bro\",regex:/\\s*(?:\\||&&|(?:>|<|!)=?|==)\\s*|\\b!?in\\b/},{token:\"constant.language.bro\",regex:/\\b(?:T|F)\\b/},{token:\"constant.numeric.bro\",regex:/\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:\\/(?:tcp|udp|icmp)|\\s*(?:u?sec|min|hr|day)s?)?\\b/},{token:\"punctuation.definition.string.begin.bro\",regex:/\"/,push:[{token:\"punctuation.definition.string.end.bro\",regex:/\"/,next:\"pop\"},{include:\"#string_escaped_char\"},{include:\"#string_placeholder\"},{defaultToken:\"string.quoted.double.bro\"}]},{token:\"punctuation.definition.string.begin.bro\",regex:/\\//,push:[{token:\"punctuation.definition.string.end.bro\",regex:/\\//,next:\"pop\"},{include:\"#string_escaped_char\"},{include:\"#string_placeholder\"},{defaultToken:\"string.quoted.regex.bro\"}]},{token:[\"meta.preprocessor.bro.load\",\"keyword.other.special-method.bro\"],regex:/^(\\s*)(\\@load(?:-sigs)?)\\b/,push:[{token:[],regex:/(?=\\#)|$/,next:\"pop\"},{defaultToken:\"meta.preprocessor.bro.load\"}]},{token:[\"meta.preprocessor.bro.if\",\"keyword.other.special-method.bro\",\"meta.preprocessor.bro.if\"],regex:/^(\\s*)(\\@endif|\\@if(?:n?def)?)(.*$)/,push:[{token:[],regex:/$/,next:\"pop\"},{defaultToken:\"meta.preprocessor.bro.if\"}]}],\"#disabled\":[{token:\"text\",regex:/^\\s*\\@if(?:n?def)?\\b.*$/,push:[{token:\"text\",regex:/^\\s*\\@endif\\b.*$/,next:\"pop\"},{include:\"#disabled\"},{include:\"#pragma-mark\"}],comment:\"eat nested preprocessor ifdefs\"}],\"#preprocessor-rule-other\":[{token:[\"text\",\"meta.preprocessor.bro\",\"meta.preprocessor.bro\",\"text\"],regex:/^(\\s*)(@if)((?:n?def)?)\\b(.*?)(?:(?=)|$)/,push:[{token:[\"text\",\"meta.preprocessor.bro\",\"text\"],regex:/^(\\s*)(@endif)\\b(.*$)/,next:\"pop\"},{include:\"$base\"}]}],\"#string_escaped_char\":[{token:\"constant.character.escape.bro\",regex:/\\\\(?:\\\\|[abefnprtv'\"?]|[0-3]\\d{,2}|[4-7]\\d?|x[a-fA-F0-9]{,2})/},{token:\"invalid.illegal.unknown-escape.bro\",regex:/\\\\./}],\"#string_placeholder\":[{token:\"constant.other.placeholder.bro\",regex:/%(?:\\d+\\$)?[#0\\- +']*[,;:_]?(?:-?\\d+|\\*(?:-?\\d+\\$)?)?(?:\\.(?:-?\\d+|\\*(?:-?\\d+\\$)?)?)?(?:hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?[diouxXDOUeEfFgGaACcSspn%]/},{token:\"invalid.illegal.placeholder.bro\",regex:/%/}]},this.normalizeRules()};s.metaData={fileTypes:[\"bro\"],foldingStartMarker:\"^(\\\\@if(n?def)?)\",foldingStopMarker:\"^\\\\@endif\",keyEquivalent:\"@B\",name:\"Bro\",scopeName:\"source.bro\"},r.inherits(s,i),t.BroHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/bro\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/bro_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./bro_highlight_rules\").BroHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/bro\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/bro\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-c9search.js",
    "content": "define(\"ace/mode/c9search_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function o(e,t){try{return new RegExp(e,t)}catch(n){}}var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){this.$rules={start:[{tokenNames:[\"c9searchresults.constant.numeric\",\"c9searchresults.text\",\"c9searchresults.text\",\"c9searchresults.keyword\"],regex:/(^\\s+[0-9]+)(:)(\\d*\\s?)([^\\r\\n]+)/,onMatch:function(e,t,n){var r=this.splitRegex.exec(e),i=this.tokenNames,s=[{type:i[0],value:r[1]},{type:i[1],value:r[2]}];r[3]&&(r[3]==\" \"?s[1]={type:i[1],value:r[2]+\" \"}:s.push({type:i[1],value:r[3]}));var o=n[1],u=r[4],a,f=0;if(o&&o.exec){o.lastIndex=0;while(a=o.exec(u)){var l=u.substring(f,a.index);f=o.lastIndex,l&&s.push({type:i[2],value:l});if(a[0])s.push({type:i[3],value:a[0]});else if(!l)break}}return f<u.length&&s.push({type:i[2],value:u.substr(f)}),s}},{regex:\"^Searching for [^\\\\r\\\\n]*$\",onMatch:function(e,t,n){var r=e.split(\"\\x01\");if(r.length<3)return\"text\";var s,u,a=0,f=[{value:r[a++]+\"'\",type:\"text\"},{value:u=r[a++],type:\"text\"},{value:\"'\"+r[a++],type:\"text\"}];r[2]!==\" in\"&&f.push({value:\"'\"+r[a++]+\"'\",type:\"text\"},{value:r[a++],type:\"text\"}),f.push({value:\" \"+r[a++]+\" \",type:\"text\"}),r[a+1]?(s=r[a+1],f.push({value:\"(\"+r[a+1]+\")\",type:\"text\"}),a+=1):a-=1;while(a++<r.length)r[a]&&f.push({value:r[a],type:\"text\"});u&&(/regex/.test(s)||(u=i.escapeRegExp(u)),/whole/.test(s)&&(u=\"\\\\b\"+u+\"\\\\b\"));var l=u&&o(\"(\"+u+\")\",/ sensitive/.test(s)?\"g\":\"ig\");return l&&(n[0]=t,n[1]=l),f}},{regex:\"^(?=Found \\\\d+ matches)\",token:\"text\",next:\"numbers\"},{token:\"string\",regex:\"^\\\\S:?[^:]+\",next:\"numbers\"}],numbers:[{regex:\"\\\\d+\",token:\"constant.numeric\"},{regex:\"$\",token:\"text\",next:\"start\"}]},this.normalizeRules()};r.inherits(u,s),t.C9SearchHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^(\\S.*:|Searching for.*)$/,this.foldingStopMarker=/^(\\s+|Found.*)$/,this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getAllLines(n),s=r[n],o=/^(Found.*|Searching for.*)$/,u=/^(\\S.*:|\\s*)$/,a=o.test(s)?o:u,f=n,l=n;if(this.foldingStartMarker.test(s)){for(var c=n+1,h=e.getLength();c<h;c++)if(a.test(r[c]))break;l=c}else if(this.foldingStopMarker.test(s)){for(var c=n-1;c>=0;c--){s=r[c];if(a.test(s))break}f=c}if(f!=l){var p=s.length;return a===o&&(p=s.search(/\\(Found[^)]+\\)$|$/)),new i(f,p,l,0)}}}.call(o.prototype)}),define(\"ace/mode/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c9search_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/c9search\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c9search_highlight_rules\").C9SearchHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/c9search\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u};r.inherits(a,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c9search\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-c_cpp.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-cirru.js",
    "content": "define(\"ace/mode/cirru_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"constant.numeric\",regex:/[\\d\\.]+/},{token:\"comment.line.double-dash\",regex:/--/,next:\"comment\"},{token:\"storage.modifier\",regex:/\\(/},{token:\"storage.modifier\",regex:/,/,next:\"line\"},{token:\"support.function\",regex:/[^\\(\\)\"\\s]+/,next:\"line\"},{token:\"string.quoted.double\",regex:/\"/,next:\"string\"},{token:\"storage.modifier\",regex:/\\)/}],comment:[{token:\"comment.line.double-dash\",regex:/ +[^\\n]+/,next:\"start\"}],string:[{token:\"string.quoted.double\",regex:/\"/,next:\"line\"},{token:\"constant.character.escape\",regex:/\\\\/,next:\"escape\"},{token:\"string.quoted.double\",regex:/[^\\\\\"]+/}],escape:[{token:\"constant.character.escape\",regex:/./,next:\"string\"}],line:[{token:\"constant.numeric\",regex:/[\\d\\.]+/},{token:\"markup.raw\",regex:/^\\s*/,next:\"start\"},{token:\"storage.modifier\",regex:/\\$/,next:\"start\"},{token:\"variable.parameter\",regex:/[^\\(\\)\"\\s]+/},{token:\"storage.modifier\",regex:/\\(/,next:\"start\"},{token:\"storage.modifier\",regex:/\\)/},{token:\"markup.raw\",regex:/^ */,next:\"start\"},{token:\"string.quoted.double\",regex:/\"/,next:\"string\"}]}};r.inherits(s,i),t.CirruHighlightRules=s}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/cirru\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cirru_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./cirru_highlight_rules\").CirruHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/cirru\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-clojure.js",
    "content": "define(\"ace/mode/clojure_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - -> ->> .. / < <= = == > &gt; >= &gt;= accessor aclone add-classpath add-watch agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq zero? zipmap\",t=\"throw try var def do fn if let loop monitor-enter monitor-exit new quote recur set!\",n=\"true false nil\",r=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"support.function\":e},\"identifier\",!1,\" \");this.$rules={start:[{token:\"comment\",regex:\";.*$\"},{token:\"keyword\",regex:\"[\\\\(|\\\\)]\"},{token:\"keyword\",regex:\"[\\\\'\\\\(]\"},{token:\"keyword\",regex:\"[\\\\[|\\\\]]\"},{token:\"keyword\",regex:\"[\\\\{|\\\\}|\\\\#\\\\{|\\\\#\\\\}]\"},{token:\"keyword\",regex:\"[\\\\&]\"},{token:\"keyword\",regex:\"[\\\\#\\\\^\\\\{]\"},{token:\"keyword\",regex:\"[\\\\%]\"},{token:\"keyword\",regex:\"[@]\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language\",regex:\"[!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+||=|!=|<=|>=|<>|<|>|!|&&]\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant\",regex:/:[^()\\[\\]{}'\"\\^%`,;\\s]+/},{token:\"string.regexp\",regex:'/#\"(?:\\\\.|(?:\\\\\")|[^\"\"\\n])*\"/g'}],string:[{token:\"constant.language.escape\",regex:\"\\\\\\\\.|\\\\\\\\$\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:'\"',next:\"start\"}]}};r.inherits(s,i),t.ClojureHighlightRules=s}),define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\)/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\))/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\\s+)/);return t?t[1]:\"\"}}).call(i.prototype),t.MatchingParensOutdent=i}),define(\"ace/mode/clojure\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/clojure_highlight_rules\",\"ace/mode/matching_parens_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./clojure_highlight_rules\").ClojureHighlightRules,o=e(\"./matching_parens_outdent\").MatchingParensOutdent,u=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.minorIndentFunctions=[\"defn\",\"defn-\",\"defmacro\",\"def\",\"deftest\",\"testing\"],this.$toIndent=function(e){return e.split(\"\").map(function(e){return/\\s/.exec(e)?e:\" \"}).join(\"\")},this.$calculateIndent=function(e,t){var n=this.$getIndent(e),r=0,i,s;for(var o=e.length-1;o>=0;o--){s=e[o],s===\"(\"?(r--,i=!0):s===\"(\"||s===\"[\"||s===\"{\"?(r--,i=!1):(s===\")\"||s===\"]\"||s===\"}\")&&r++;if(r<0)break}if(!(r<0&&i))return r<0&&!i?this.$toIndent(e.substring(0,o+1)):r>0?(n=n.substring(0,n.length-t.length),n):n;o+=1;var u=o,a=\"\";for(;;){s=e[o];if(s===\" \"||s===\"\t\")return this.minorIndentFunctions.indexOf(a)!==-1?this.$toIndent(e.substring(0,u-1)+t):this.$toIndent(e.substring(0,o+1));if(s===undefined)return this.$toIndent(e.substring(0,u-1)+t);a+=e[o],o++}},this.getNextLineIndent=function(e,t,n){return this.$calculateIndent(t,n)},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/clojure\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-cobol.js",
    "content": "define(\"ace/mode/cobol_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT\",t=\"true|false|null\",n=\"count|min|max|avg|sum|rank|now|coalesce|main\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\*.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.CobolHighlightRules=s}),define(\"ace/mode/cobol\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cobol_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./cobol_highlight_rules\").CobolHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"*\",this.$id=\"ace/mode/cobol\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-coffee.js",
    "content": "define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=\"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\",t=\"this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|own|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes|yield|export|import|default\",n=\"true|false|null|undefined|NaN|Infinity\",r=\"case|const|function|var|void|with|enum|implements|interface|let|package|private|protected|public|static\",i=\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\",s=\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|\",o=\"window|arguments|prototype|document\",u=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"invalid.illegal\":r,\"language.support.class\":i,\"language.support.function\":s,\"variable.language\":o},\"identifier\"),a={token:[\"paren.lparen\",\"variable.parameter\",\"paren.rparen\",\"text\",\"storage.type\"],regex:/(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source},f=/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"},{stateName:\"qdoc\",token:\"string\",regex:\"'''\",next:[{token:\"string\",regex:\"'''\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqdoc\",token:\"string\",regex:'\"\"\"',next:[{token:\"string\",regex:'\"\"\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qstring\",token:\"string\",regex:\"'\",next:[{token:\"string\",regex:\"'\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqstring\",token:\"string.start\",regex:'\"',next:[{token:\"string.end\",regex:'\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"js\",token:\"string\",regex:\"`\",next:[{token:\"string\",regex:\"`\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{regex:\"[{}]\",onMatch:function(e,t,n){this.next=\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift()||\"\";if(this.next.indexOf(\"string\")!=-1)return\"paren.string\"}return\"paren\"}},{token:\"string.regex\",regex:\"///\",next:\"heregex\"},{token:\"string.regex\",regex:/(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/},{token:\"comment\",regex:\"###(?!#)\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:[\"punctuation.operator\",\"text\",\"identifier\"],regex:\"(\\\\.)(\\\\s*)(\"+r+\")\"},{token:\"punctuation.operator\",regex:\"\\\\.{1,3}\"},{token:[\"keyword\",\"text\",\"language.support.class\",\"text\",\"keyword\",\"text\",\"language.support.class\"],regex:\"(class)(\\\\s+)(\"+e+\")(?:(\\\\s+)(extends)(\\\\s+)(\"+e+\"))?\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\"].concat(a.token),regex:\"(\"+e+\")(\\\\s*)([=:])(\\\\s*)\"+a.regex},a,{token:\"variable\",regex:\"@(?:\"+e+\")?\"},{token:u,regex:e},{token:\"punctuation.operator\",regex:\"\\\\,|\\\\.\"},{token:\"storage.type\",regex:\"[\\\\-=]>\"},{token:\"keyword.operator\",regex:\"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"},{token:\"paren.lparen\",regex:\"[({[]\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?///[imgy]{0,4}\",next:\"start\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{token:\"string.regex\",regex:\"\\\\S+\"}],comment:[{token:\"comment\",regex:\"###\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function l(){this.HighlightRules=r,this.$outdent=new i,this.foldingRules=new s}var r=e(\"./coffee_highlight_rules\").CoffeeHighlightRules,i=e(\"./matching_brace_outdent\").MatchingBraceOutdent,s=e(\"./folding/coffee\").FoldMode,o=e(\"../range\").Range,u=e(\"./text\").Mode,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"../lib/oop\");f.inherits(l,u),function(){var e=/(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;this.lineCommentStart=\"#\",this.blockComment={start:\"###\",end:\"###\"},this.getNextLineIndent=function(t,n,r){var i=this.$getIndent(n),s=this.getTokenizer().getLineTokens(n,t).tokens;return(!s.length||s[s.length-1].type!==\"comment\")&&t===\"start\"&&e.test(n)&&(i+=r),i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/coffee_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/coffee\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-coldfusion.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/coldfusion_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=function(){s.call(this),this.$rules.tag[2].token=function(e,t){var n=t.slice(0,2)==\"cf\"?\"keyword\":\"meta.tag\";return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",n+\".tag-name.xml\"]};var e=Object.keys(this.$rules).filter(function(e){return/^(js|css)-/.test(e)});this.embedRules({cfmlComment:[{regex:\"<!---\",token:\"comment.start\",push:\"cfmlComment\"},{regex:\"--->\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}]},\"\",[{regex:\"<!---\",token:\"comment.start\",push:\"cfmlComment\"}],[\"comment\",\"start\",\"tag_whitespace\",\"cdata\"].concat(e)),this.$rules.cfTag=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"pop\"}];var t={token:function(e,t){return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"keyword.tag-name.xml\"]},regex:\"(</?)(cf[-_a-zA-Z0-9:.]+)\",push:\"cfTag\"};e.forEach(function(e){this.$rules[e].unshift(t)},this),this.embedTagRules((new i({jsx:!1})).getRules(),\"cfjs-\",\"cfscript\"),this.normalizeRules()};r.inherits(o,s),t.ColdfusionHighlightRules=o}),define(\"ace/mode/coldfusion\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html\",\"ace/mode/coldfusion_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./html\").Mode,o=e(\"./coldfusion_highlight_rules\").ColdfusionHighlightRules,u=\"cfabort|cfapplication|cfargument|cfassociate|cfbreak|cfcache|cfcollection|cfcookie|cfdbinfo|cfdirectory|cfdump|cfelse|cfelseif|cferror|cfexchangecalendar|cfexchangeconnection|cfexchangecontact|cfexchangefilter|cfexchangetask|cfexit|cffeed|cffile|cfflush|cfftp|cfheader|cfhtmlhead|cfhttpparam|cfimage|cfimport|cfinclude|cfindex|cfinsert|cfinvokeargument|cflocation|cflog|cfmailparam|cfNTauthenticate|cfobject|cfobjectcache|cfparam|cfpdfformparam|cfprint|cfprocparam|cfprocresult|cfproperty|cfqueryparam|cfregistry|cfreportparam|cfrethrow|cfreturn|cfschedule|cfsearch|cfset|cfsetting|cfthrow|cfzipparam)\".split(\"|\"),a=function(){s.call(this),this.HighlightRules=o};r.inherits(a,s),function(){this.voidElements=r.mixin(i.arrayToMap(u),this.voidElements),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.$id=\"ace/mode/coldfusion\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-csharp.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\"constant.language\":\"null|true|false\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:/'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/},{token:\"string\",start:'\"',end:'\"|$',next:[{token:\"constant.language.escape\",regex:/\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},{token:\"invalid\",regex:/\\\\./}]},{token:\"string\",start:'@\"',end:'\"',next:[{token:\"constant.language.escape\",regex:'\"\"'}]},{token:\"string\",start:/\\$\"/,end:'\"|$',next:[{token:\"constant.language.escape\",regex:/\\\\(:?$)|{{/},{token:\"constant.language.escape\",regex:/\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},{token:\"invalid\",regex:/\\\\./}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"keyword\",regex:\"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.CSharpHighlightRules=o}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/folding/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./cstyle\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.usingRe=/^\\s*using \\S/,this.getFoldWidgetRangeBase=this.getFoldWidgetRange,this.getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=this.getFoldWidgetBase(e,t,n);if(!r){var i=e.getLine(n);if(/^\\s*#region\\b/.test(i))return\"start\";var s=this.usingRe;if(s.test(i)){var o=e.getLine(n-1),u=e.getLine(n+1);if(!s.test(o)&&s.test(u))return\"start\"}}return r},this.getFoldWidgetRange=function(e,t,n){var r=this.getFoldWidgetRangeBase(e,t,n);if(r)return r;var i=e.getLine(n);if(this.usingRe.test(i))return this.getUsingStatementBlock(e,i,n);if(/^\\s*#region\\b/.test(i))return this.getRegionBlock(e,i,n)},this.getUsingStatementBlock=function(e,t,n){var r=t.match(this.usingRe)[0].length-1,s=e.getLength(),o=n,u=n;while(++n<s){t=e.getLine(n);if(/^\\s*$/.test(t))continue;if(!this.usingRe.test(t))break;u=n}if(u>o){var a=e.getLine(u).length;return new i(o,r,u,a)}},this.getRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*#(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csharp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/csharp\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./csharp_highlight_rules\").CSharpHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/csharp\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null},this.$id=\"ace/mode/csharp\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-csound_document.js",
    "content": "define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.semicolonComments={token:\"comment.line.semicolon.csound\",regex:\";.*$\"},this.comments=[{token:\"punctuation.definition.comment.begin.csound\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.end.csound\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.csound\"}]},{token:\"comment.line.double-slash.csound\",regex:\"//.*$\"},this.semicolonComments],this.macroUses=[{token:[\"entity.name.function.preprocessor.csound\",\"punctuation.definition.macro-parameter-value-list.begin.csound\"],regex:/(\\$[A-Z_a-z]\\w*\\.?)(\\()/,next:\"macro parameter value list\"},{token:\"entity.name.function.preprocessor.csound\",regex:/\\$[A-Z_a-z]\\w*(?:\\.|\\b)/}],this.numbers=[{token:\"constant.numeric.float.csound\",regex:/(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/},{token:[\"storage.type.number.csound\",\"constant.numeric.integer.hexadecimal.csound\"],regex:/(0[Xx])([0-9A-Fa-f]+)/},{token:\"constant.numeric.integer.decimal.csound\",regex:/\\d+/}],this.bracedStringContents=[{token:\"constant.character.escape.csound\",regex:/\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/},{token:\"constant.character.placeholder.csound\",regex:/%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/},{token:\"constant.character.escape.csound\",regex:/%%/}],this.quotedStringContents=[this.macroUses,this.bracedStringContents];var e=[this.comments,{token:\"keyword.preprocessor.csound\",regex:/#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/},{token:\"keyword.preprocessor.csound\",regex:/#include/,push:[this.comments,{token:\"string.csound\",regex:/([^ \\t])(?:.*?\\1)/,next:\"pop\"}]},{token:\"keyword.preprocessor.csound\",regex:/#[ \\t]*define/,next:\"define directive\"},{token:\"keyword.preprocessor.csound\",regex:/#(?:ifn?def|undef)\\b/,next:\"macro directive\"},this.macroUses];this.$rules={start:e,\"define directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.begin.csound\",regex:/\\(/,next:\"macro parameter name list\"},{token:\"punctuation.definition.macro.begin.csound\",regex:/#/,next:\"macro body\"}],\"macro parameter name list\":[{token:\"variable.parameter.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.end.csound\",regex:/\\)/,next:\"define directive\"}],\"macro body\":[{token:\"constant.character.escape.csound\",regex:/\\\\#/},{token:\"punctuation.definition.macro.end.csound\",regex:/#/,next:\"start\"},e],\"macro directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"macro parameter value list\":[{token:\"punctuation.definition.macro-parameter-value-list.end.csound\",regex:/\\)/,next:\"start\"},{token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"macro parameter value quoted string\"},this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),{token:\"punctuation.macro-parameter-value-separator.csound\",regex:\"[#']\"}],\"macro parameter value quoted string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/\"/,next:\"macro parameter value list\"},this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"macro parameter value parenthetical\":[{token:\"constant.character.escape.csound\",regex:/\\\\\\)/},this.popRule({token:\"punctuation.macro-parameter-value-parenthetical.end.csound\",regex:/\\)/}),this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),e]}};r.inherits(s,i),function(){this.pushRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){r.length===0&&r.push(n);if(Array.isArray(e.next))for(var s=0;s<e.next.length;s++)r.push(e.next[s]);else r.push(e.next);return this.next=r[r.length-1],e.token},get next(){return Array.isArray(e.next)?e.next[e.next.length-1]:e.next},set next(t){if(Array.isArray(e.next)){var n=e.next[e.next.length-1],r=n.length-1,i=t.length-1;if(i>r)while(r>=0&&i>=0){if(n.charAt(r)!==t.charAt(i)){var s=t.substr(0,i);for(var o=0;o<e.next.length;o++)e.next[o]=s+e.next[o];break}r--,i--}}else e.next=t},get token(){return e.token}}},this.popRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){return r.pop(),e.next?(r.push(e.next),this.next=r[r.length-1]):this.next=r.length>1?r[r.length-1]:r.pop(),e.token}}}}.call(s.prototype),t.CsoundPreprocessorHighlightRules=s}),define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,s=function(){i.call(this),this.quotedStringContents.push({token:\"invalid.illegal.csound-score\",regex:/[^\"]*$/});var e=this.$rules.start;e.push({token:\"keyword.control.csound-score\",regex:/[abCdefiqstvxy]/},{token:\"invalid.illegal.csound-score\",regex:/w/},{token:\"constant.numeric.language.csound-score\",regex:/z/},{token:[\"keyword.control.csound-score\",\"constant.numeric.integer.decimal.csound-score\"],regex:/([nNpP][pP])(\\d+)/},{token:\"keyword.other.csound-score\",regex:/[mn]/,push:[{token:\"empty\",regex:/$/,next:\"pop\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/}]},{token:\"keyword.preprocessor.csound-score\",regex:/r\\b/,next:\"repeat section\"},this.numbers,{token:\"keyword.operator.csound-score\",regex:\"[!+\\\\-*/^%&|<>#~.]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound-score\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.braced-loop.begin.csound-score\",regex:/{/,next:\"loop after left brace\"})),this.addRules({\"repeat section\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"repeat section before label\"}],\"repeat section before label\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound-score\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound-score\"}],\"loop after left brace\":[this.popRule({token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"loop after repeat count\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after repeat count\":[this.popRule({token:\"entity.name.function.preprocessor.csound-score\",regex:/[A-Z_a-z]\\w*\\b/,next:\"loop after macro name\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after macro name\":[e,this.popRule({token:\"punctuation.braced-loop.end.csound-score\",regex:/}/})]}),this.normalizeRules()};r.inherits(s,i),t.CsoundScoreHighlightRules=s}),define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"setn|foreach|foreachi|gcinfo|log10|maxn\",s=this.createKeywordMapper({keyword:e,\"support.function\":n,\"keyword.deprecated\":i,\"constant.library\":r,\"constant.language\":t,\"variable.language\":\"self\"},\"identifier\"),o=\"(?:(?:[1-9]\\\\d*)|(?:0))\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:\"+o+\"|\"+u+\")\",f=\"(?:\\\\.\\\\d+)\",l=\"(?:\\\\d+)\",c=\"(?:(?:\"+l+\"?\"+f+\")|(?:\"+l+\"\\\\.))\",h=\"(?:\"+c+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"string.start\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"string.end\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:h},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"variable.language\":\"self|cls\",\"constant.language\":t,keyword:e},\"identifier\"),i=\"[uU]?\",s=\"[rR]\",o=\"[fF]\",u=\"(?:[rR][fF]|[fF][rR])\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:s+'\"{3}',next:\"rawqqstring3\"},{token:\"string\",regex:s+'\"(?=.)',next:\"rawqqstring\"},{token:\"string\",regex:s+\"'{3}\",next:\"rawqstring3\"},{token:\"string\",regex:s+\"'(?=.)\",next:\"rawqstring\"},{token:\"string\",regex:o+'\"{3}',next:\"fqqstring3\"},{token:\"string\",regex:o+'\"(?=.)',next:\"fqqstring\"},{token:\"string\",regex:o+\"'{3}\",next:\"fqstring3\"},{token:\"string\",regex:o+\"'(?=.)\",next:\"fqstring\"},{token:\"string\",regex:u+'\"{3}',next:\"rfqqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"rfqqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"rfqstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"rfqstring\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"punctuation\",regex:\",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"},{include:\"constants\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],rawqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],rawqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],fqqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"fqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rfqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring:[{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstringParRules:[{token:\"paren.lparen\",regex:\"[\\\\[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)]\"},{token:\"string\",regex:\"\\\\s+\"},{token:\"string\",regex:\"'(.)*'\"},{token:\"string\",regex:'\"(.)*\"'},{token:\"function.support\",regex:\"(!s|!r|!a)\"},{include:\"constants\"},{token:\"paren.rparen\",regex:\"}\",next:\"pop\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"}],constants:[{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:[\"punctuation\",\"function.support\"],regex:\"(\\\\.)([a-zA-Z_]+)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),define(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=e(\"../lib/oop\"),s=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,o=e(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules,u=e(\"./lua_highlight_rules\").LuaHighlightRules,a=e(\"./python_highlight_rules\").PythonHighlightRules,f=function(){s.call(this);var e=[\"ATSadd\",\"ATSaddnz\",\"ATSbufread\",\"ATScross\",\"ATSinfo\",\"ATSinterpread\",\"ATSpartialtap\",\"ATSread\",\"ATSreadnz\",\"ATSsinnoi\",\"FLbox\",\"FLbutBank\",\"FLbutton\",\"FLcloseButton\",\"FLcolor\",\"FLcolor2\",\"FLcount\",\"FLexecButton\",\"FLgetsnap\",\"FLgroup\",\"FLgroupEnd\",\"FLgroup_end\",\"FLhide\",\"FLhvsBox\",\"FLhvsBoxSetValue\",\"FLjoy\",\"FLkeyIn\",\"FLknob\",\"FLlabel\",\"FLloadsnap\",\"FLmouse\",\"FLpack\",\"FLpackEnd\",\"FLpack_end\",\"FLpanel\",\"FLpanelEnd\",\"FLpanel_end\",\"FLprintk\",\"FLprintk2\",\"FLroller\",\"FLrun\",\"FLsavesnap\",\"FLscroll\",\"FLscrollEnd\",\"FLscroll_end\",\"FLsetAlign\",\"FLsetBox\",\"FLsetColor\",\"FLsetColor2\",\"FLsetFont\",\"FLsetPosition\",\"FLsetSize\",\"FLsetSnapGroup\",\"FLsetText\",\"FLsetTextColor\",\"FLsetTextSize\",\"FLsetTextType\",\"FLsetVal\",\"FLsetVal_i\",\"FLsetVali\",\"FLsetsnap\",\"FLshow\",\"FLslidBnk\",\"FLslidBnk2\",\"FLslidBnk2Set\",\"FLslidBnk2Setk\",\"FLslidBnkGetHandle\",\"FLslidBnkSet\",\"FLslidBnkSetk\",\"FLslider\",\"FLtabs\",\"FLtabsEnd\",\"FLtabs_end\",\"FLtext\",\"FLupdate\",\"FLvalue\",\"FLvkeybd\",\"FLvslidBnk\",\"FLvslidBnk2\",\"FLxyin\",\"JackoAudioIn\",\"JackoAudioInConnect\",\"JackoAudioOut\",\"JackoAudioOutConnect\",\"JackoFreewheel\",\"JackoInfo\",\"JackoInit\",\"JackoMidiInConnect\",\"JackoMidiOut\",\"JackoMidiOutConnect\",\"JackoNoteOut\",\"JackoOn\",\"JackoTransport\",\"K35_hpf\",\"K35_lpf\",\"MixerClear\",\"MixerGetLevel\",\"MixerReceive\",\"MixerSend\",\"MixerSetLevel\",\"MixerSetLevel_i\",\"OSCbundle\",\"OSCcount\",\"OSCinit\",\"OSCinitM\",\"OSClisten\",\"OSCraw\",\"OSCsend\",\"OSCsend_lo\",\"S\",\"STKBandedWG\",\"STKBeeThree\",\"STKBlowBotl\",\"STKBlowHole\",\"STKBowed\",\"STKBrass\",\"STKClarinet\",\"STKDrummer\",\"STKFMVoices\",\"STKFlute\",\"STKHevyMetl\",\"STKMandolin\",\"STKModalBar\",\"STKMoog\",\"STKPercFlut\",\"STKPlucked\",\"STKResonate\",\"STKRhodey\",\"STKSaxofony\",\"STKShakers\",\"STKSimple\",\"STKSitar\",\"STKStifKarp\",\"STKTubeBell\",\"STKVoicForm\",\"STKWhistle\",\"STKWurley\",\"a\",\"abs\",\"active\",\"adsr\",\"adsyn\",\"adsynt\",\"adsynt2\",\"aftouch\",\"alpass\",\"alwayson\",\"ampdb\",\"ampdbfs\",\"ampmidi\",\"ampmidid\",\"areson\",\"aresonk\",\"atone\",\"atonek\",\"atonex\",\"babo\",\"balance\",\"balance2\",\"bamboo\",\"barmodel\",\"bbcutm\",\"bbcuts\",\"beadsynt\",\"beosc\",\"betarand\",\"bexprnd\",\"bformdec1\",\"bformenc1\",\"binit\",\"biquad\",\"biquada\",\"birnd\",\"bpf\",\"bpfcos\",\"bqrez\",\"butbp\",\"butbr\",\"buthp\",\"butlp\",\"butterbp\",\"butterbr\",\"butterhp\",\"butterlp\",\"button\",\"buzz\",\"c2r\",\"cabasa\",\"cauchy\",\"cauchyi\",\"cbrt\",\"ceil\",\"cell\",\"cent\",\"centroid\",\"ceps\",\"cepsinv\",\"chanctrl\",\"changed\",\"changed2\",\"chani\",\"chano\",\"chebyshevpoly\",\"checkbox\",\"chn_S\",\"chn_a\",\"chn_k\",\"chnclear\",\"chnexport\",\"chnget\",\"chngetks\",\"chnmix\",\"chnparams\",\"chnset\",\"chnsetks\",\"chuap\",\"clear\",\"clfilt\",\"clip\",\"clockoff\",\"clockon\",\"cmp\",\"cmplxprod\",\"comb\",\"combinv\",\"compilecsd\",\"compileorc\",\"compilestr\",\"compress\",\"compress2\",\"connect\",\"control\",\"convle\",\"convolve\",\"copya2ftab\",\"copyf2array\",\"cos\",\"cosh\",\"cosinv\",\"cosseg\",\"cossegb\",\"cossegr\",\"cps2pch\",\"cpsmidi\",\"cpsmidib\",\"cpsmidinn\",\"cpsoct\",\"cpspch\",\"cpstmid\",\"cpstun\",\"cpstuni\",\"cpsxpch\",\"cpumeter\",\"cpuprc\",\"cross2\",\"crossfm\",\"crossfmi\",\"crossfmpm\",\"crossfmpmi\",\"crosspm\",\"crosspmi\",\"crunch\",\"ctlchn\",\"ctrl14\",\"ctrl21\",\"ctrl7\",\"ctrlinit\",\"cuserrnd\",\"dam\",\"date\",\"dates\",\"db\",\"dbamp\",\"dbfsamp\",\"dcblock\",\"dcblock2\",\"dconv\",\"dct\",\"dctinv\",\"deinterleave\",\"delay\",\"delay1\",\"delayk\",\"delayr\",\"delayw\",\"deltap\",\"deltap3\",\"deltapi\",\"deltapn\",\"deltapx\",\"deltapxw\",\"denorm\",\"diff\",\"diode_ladder\",\"directory\",\"diskgrain\",\"diskin\",\"diskin2\",\"dispfft\",\"display\",\"distort\",\"distort1\",\"divz\",\"doppler\",\"dot\",\"downsamp\",\"dripwater\",\"dssiactivate\",\"dssiaudio\",\"dssictls\",\"dssiinit\",\"dssilist\",\"dumpk\",\"dumpk2\",\"dumpk3\",\"dumpk4\",\"duserrnd\",\"dust\",\"dust2\",\"envlpx\",\"envlpxr\",\"ephasor\",\"eqfil\",\"evalstr\",\"event\",\"event_i\",\"exciter\",\"exitnow\",\"exp\",\"expcurve\",\"expon\",\"exprand\",\"exprandi\",\"expseg\",\"expsega\",\"expsegb\",\"expsegba\",\"expsegr\",\"fareylen\",\"fareyleni\",\"faustaudio\",\"faustcompile\",\"faustctl\",\"faustdsp\",\"faustgen\",\"faustplay\",\"fft\",\"fftinv\",\"ficlose\",\"filebit\",\"filelen\",\"filenchnls\",\"filepeak\",\"filescal\",\"filesr\",\"filevalid\",\"fillarray\",\"filter2\",\"fin\",\"fini\",\"fink\",\"fiopen\",\"flanger\",\"flashtxt\",\"flooper\",\"flooper2\",\"floor\",\"fmanal\",\"fmax\",\"fmb3\",\"fmbell\",\"fmin\",\"fmmetal\",\"fmod\",\"fmpercfl\",\"fmrhode\",\"fmvoice\",\"fmwurlie\",\"fof\",\"fof2\",\"fofilter\",\"fog\",\"fold\",\"follow\",\"follow2\",\"foscil\",\"foscili\",\"fout\",\"fouti\",\"foutir\",\"foutk\",\"fprintks\",\"fprints\",\"frac\",\"fractalnoise\",\"framebuffer\",\"freeverb\",\"ftaudio\",\"ftchnls\",\"ftconv\",\"ftcps\",\"ftfree\",\"ftgen\",\"ftgenonce\",\"ftgentmp\",\"ftlen\",\"ftload\",\"ftloadk\",\"ftlptim\",\"ftmorf\",\"ftom\",\"ftprint\",\"ftresize\",\"ftresizei\",\"ftsamplebank\",\"ftsave\",\"ftsavek\",\"ftslice\",\"ftsr\",\"gain\",\"gainslider\",\"gauss\",\"gaussi\",\"gausstrig\",\"gbuzz\",\"genarray\",\"genarray_i\",\"gendy\",\"gendyc\",\"gendyx\",\"getcfg\",\"getcol\",\"getftargs\",\"getrow\",\"getrowlin\",\"getseed\",\"gogobel\",\"grain\",\"grain2\",\"grain3\",\"granule\",\"guiro\",\"harmon\",\"harmon2\",\"harmon3\",\"harmon4\",\"hdf5read\",\"hdf5write\",\"hilbert\",\"hilbert2\",\"hrtfearly\",\"hrtfmove\",\"hrtfmove2\",\"hrtfreverb\",\"hrtfstat\",\"hsboscil\",\"hvs1\",\"hvs2\",\"hvs3\",\"hypot\",\"i\",\"ihold\",\"imagecreate\",\"imagefree\",\"imagegetpixel\",\"imageload\",\"imagesave\",\"imagesetpixel\",\"imagesize\",\"in\",\"in32\",\"inch\",\"inh\",\"init\",\"initc14\",\"initc21\",\"initc7\",\"inleta\",\"inletf\",\"inletk\",\"inletkid\",\"inletv\",\"ino\",\"inq\",\"inrg\",\"ins\",\"insglobal\",\"insremot\",\"int\",\"integ\",\"interleave\",\"interp\",\"invalue\",\"inx\",\"inz\",\"jacktransport\",\"jitter\",\"jitter2\",\"joystick\",\"jspline\",\"k\",\"la_i_add_mc\",\"la_i_add_mr\",\"la_i_add_vc\",\"la_i_add_vr\",\"la_i_assign_mc\",\"la_i_assign_mr\",\"la_i_assign_t\",\"la_i_assign_vc\",\"la_i_assign_vr\",\"la_i_conjugate_mc\",\"la_i_conjugate_mr\",\"la_i_conjugate_vc\",\"la_i_conjugate_vr\",\"la_i_distance_vc\",\"la_i_distance_vr\",\"la_i_divide_mc\",\"la_i_divide_mr\",\"la_i_divide_vc\",\"la_i_divide_vr\",\"la_i_dot_mc\",\"la_i_dot_mc_vc\",\"la_i_dot_mr\",\"la_i_dot_mr_vr\",\"la_i_dot_vc\",\"la_i_dot_vr\",\"la_i_get_mc\",\"la_i_get_mr\",\"la_i_get_vc\",\"la_i_get_vr\",\"la_i_invert_mc\",\"la_i_invert_mr\",\"la_i_lower_solve_mc\",\"la_i_lower_solve_mr\",\"la_i_lu_det_mc\",\"la_i_lu_det_mr\",\"la_i_lu_factor_mc\",\"la_i_lu_factor_mr\",\"la_i_lu_solve_mc\",\"la_i_lu_solve_mr\",\"la_i_mc_create\",\"la_i_mc_set\",\"la_i_mr_create\",\"la_i_mr_set\",\"la_i_multiply_mc\",\"la_i_multiply_mr\",\"la_i_multiply_vc\",\"la_i_multiply_vr\",\"la_i_norm1_mc\",\"la_i_norm1_mr\",\"la_i_norm1_vc\",\"la_i_norm1_vr\",\"la_i_norm_euclid_mc\",\"la_i_norm_euclid_mr\",\"la_i_norm_euclid_vc\",\"la_i_norm_euclid_vr\",\"la_i_norm_inf_mc\",\"la_i_norm_inf_mr\",\"la_i_norm_inf_vc\",\"la_i_norm_inf_vr\",\"la_i_norm_max_mc\",\"la_i_norm_max_mr\",\"la_i_print_mc\",\"la_i_print_mr\",\"la_i_print_vc\",\"la_i_print_vr\",\"la_i_qr_eigen_mc\",\"la_i_qr_eigen_mr\",\"la_i_qr_factor_mc\",\"la_i_qr_factor_mr\",\"la_i_qr_sym_eigen_mc\",\"la_i_qr_sym_eigen_mr\",\"la_i_random_mc\",\"la_i_random_mr\",\"la_i_random_vc\",\"la_i_random_vr\",\"la_i_size_mc\",\"la_i_size_mr\",\"la_i_size_vc\",\"la_i_size_vr\",\"la_i_subtract_mc\",\"la_i_subtract_mr\",\"la_i_subtract_vc\",\"la_i_subtract_vr\",\"la_i_t_assign\",\"la_i_trace_mc\",\"la_i_trace_mr\",\"la_i_transpose_mc\",\"la_i_transpose_mr\",\"la_i_upper_solve_mc\",\"la_i_upper_solve_mr\",\"la_i_vc_create\",\"la_i_vc_set\",\"la_i_vr_create\",\"la_i_vr_set\",\"la_k_a_assign\",\"la_k_add_mc\",\"la_k_add_mr\",\"la_k_add_vc\",\"la_k_add_vr\",\"la_k_assign_a\",\"la_k_assign_f\",\"la_k_assign_mc\",\"la_k_assign_mr\",\"la_k_assign_t\",\"la_k_assign_vc\",\"la_k_assign_vr\",\"la_k_conjugate_mc\",\"la_k_conjugate_mr\",\"la_k_conjugate_vc\",\"la_k_conjugate_vr\",\"la_k_current_f\",\"la_k_current_vr\",\"la_k_distance_vc\",\"la_k_distance_vr\",\"la_k_divide_mc\",\"la_k_divide_mr\",\"la_k_divide_vc\",\"la_k_divide_vr\",\"la_k_dot_mc\",\"la_k_dot_mc_vc\",\"la_k_dot_mr\",\"la_k_dot_mr_vr\",\"la_k_dot_vc\",\"la_k_dot_vr\",\"la_k_f_assign\",\"la_k_get_mc\",\"la_k_get_mr\",\"la_k_get_vc\",\"la_k_get_vr\",\"la_k_invert_mc\",\"la_k_invert_mr\",\"la_k_lower_solve_mc\",\"la_k_lower_solve_mr\",\"la_k_lu_det_mc\",\"la_k_lu_det_mr\",\"la_k_lu_factor_mc\",\"la_k_lu_factor_mr\",\"la_k_lu_solve_mc\",\"la_k_lu_solve_mr\",\"la_k_mc_set\",\"la_k_mr_set\",\"la_k_multiply_mc\",\"la_k_multiply_mr\",\"la_k_multiply_vc\",\"la_k_multiply_vr\",\"la_k_norm1_mc\",\"la_k_norm1_mr\",\"la_k_norm1_vc\",\"la_k_norm1_vr\",\"la_k_norm_euclid_mc\",\"la_k_norm_euclid_mr\",\"la_k_norm_euclid_vc\",\"la_k_norm_euclid_vr\",\"la_k_norm_inf_mc\",\"la_k_norm_inf_mr\",\"la_k_norm_inf_vc\",\"la_k_norm_inf_vr\",\"la_k_norm_max_mc\",\"la_k_norm_max_mr\",\"la_k_qr_eigen_mc\",\"la_k_qr_eigen_mr\",\"la_k_qr_factor_mc\",\"la_k_qr_factor_mr\",\"la_k_qr_sym_eigen_mc\",\"la_k_qr_sym_eigen_mr\",\"la_k_random_mc\",\"la_k_random_mr\",\"la_k_random_vc\",\"la_k_random_vr\",\"la_k_subtract_mc\",\"la_k_subtract_mr\",\"la_k_subtract_vc\",\"la_k_subtract_vr\",\"la_k_t_assign\",\"la_k_trace_mc\",\"la_k_trace_mr\",\"la_k_upper_solve_mc\",\"la_k_upper_solve_mr\",\"la_k_vc_set\",\"la_k_vr_set\",\"lenarray\",\"lfo\",\"limit\",\"limit1\",\"lincos\",\"line\",\"linen\",\"linenr\",\"lineto\",\"link_beat_force\",\"link_beat_get\",\"link_beat_request\",\"link_create\",\"link_enable\",\"link_is_enabled\",\"link_metro\",\"link_peers\",\"link_tempo_get\",\"link_tempo_set\",\"linlin\",\"linrand\",\"linseg\",\"linsegb\",\"linsegr\",\"liveconv\",\"locsend\",\"locsig\",\"log\",\"log10\",\"log2\",\"logbtwo\",\"logcurve\",\"loopseg\",\"loopsegp\",\"looptseg\",\"loopxseg\",\"lorenz\",\"loscil\",\"loscil3\",\"loscil3phs\",\"loscilphs\",\"loscilx\",\"lowpass2\",\"lowres\",\"lowresx\",\"lpf18\",\"lpform\",\"lpfreson\",\"lphasor\",\"lpinterp\",\"lposcil\",\"lposcil3\",\"lposcila\",\"lposcilsa\",\"lposcilsa2\",\"lpread\",\"lpreson\",\"lpshold\",\"lpsholdp\",\"lpslot\",\"lua_exec\",\"lua_iaopcall\",\"lua_iaopcall_off\",\"lua_ikopcall\",\"lua_ikopcall_off\",\"lua_iopcall\",\"lua_iopcall_off\",\"lua_opdef\",\"mac\",\"maca\",\"madsr\",\"mags\",\"mandel\",\"mandol\",\"maparray\",\"maparray_i\",\"marimba\",\"massign\",\"max\",\"max_k\",\"maxabs\",\"maxabsaccum\",\"maxaccum\",\"maxalloc\",\"maxarray\",\"mclock\",\"mdelay\",\"median\",\"mediank\",\"metro\",\"mfb\",\"midglobal\",\"midiarp\",\"midic14\",\"midic21\",\"midic7\",\"midichannelaftertouch\",\"midichn\",\"midicontrolchange\",\"midictrl\",\"mididefault\",\"midifilestatus\",\"midiin\",\"midinoteoff\",\"midinoteoncps\",\"midinoteonkey\",\"midinoteonoct\",\"midinoteonpch\",\"midion\",\"midion2\",\"midiout\",\"midiout_i\",\"midipgm\",\"midipitchbend\",\"midipolyaftertouch\",\"midiprogramchange\",\"miditempo\",\"midremot\",\"min\",\"minabs\",\"minabsaccum\",\"minaccum\",\"minarray\",\"mincer\",\"mirror\",\"mode\",\"modmatrix\",\"monitor\",\"moog\",\"moogladder\",\"moogladder2\",\"moogvcf\",\"moogvcf2\",\"moscil\",\"mp3bitrate\",\"mp3in\",\"mp3len\",\"mp3nchnls\",\"mp3scal\",\"mp3sr\",\"mpulse\",\"mrtmsg\",\"mtof\",\"mton\",\"multitap\",\"mute\",\"mvchpf\",\"mvclpf1\",\"mvclpf2\",\"mvclpf3\",\"mvclpf4\",\"mxadsr\",\"nchnls_hw\",\"nestedap\",\"nlalp\",\"nlfilt\",\"nlfilt2\",\"noise\",\"noteoff\",\"noteon\",\"noteondur\",\"noteondur2\",\"notnum\",\"nreverb\",\"nrpn\",\"nsamp\",\"nstance\",\"nstrnum\",\"ntom\",\"ntrpol\",\"nxtpow2\",\"octave\",\"octcps\",\"octmidi\",\"octmidib\",\"octmidinn\",\"octpch\",\"olabuffer\",\"oscbnk\",\"oscil\",\"oscil1\",\"oscil1i\",\"oscil3\",\"oscili\",\"oscilikt\",\"osciliktp\",\"oscilikts\",\"osciln\",\"oscils\",\"oscilx\",\"out\",\"out32\",\"outc\",\"outch\",\"outh\",\"outiat\",\"outic\",\"outic14\",\"outipat\",\"outipb\",\"outipc\",\"outkat\",\"outkc\",\"outkc14\",\"outkpat\",\"outkpb\",\"outkpc\",\"outleta\",\"outletf\",\"outletk\",\"outletkid\",\"outletv\",\"outo\",\"outq\",\"outq1\",\"outq2\",\"outq3\",\"outq4\",\"outrg\",\"outs\",\"outs1\",\"outs2\",\"outvalue\",\"outx\",\"outz\",\"p\",\"p5gconnect\",\"p5gdata\",\"pan\",\"pan2\",\"pareq\",\"part2txt\",\"partials\",\"partikkel\",\"partikkelget\",\"partikkelset\",\"partikkelsync\",\"passign\",\"paulstretch\",\"pcauchy\",\"pchbend\",\"pchmidi\",\"pchmidib\",\"pchmidinn\",\"pchoct\",\"pchtom\",\"pconvolve\",\"pcount\",\"pdclip\",\"pdhalf\",\"pdhalfy\",\"peak\",\"pgmassign\",\"pgmchn\",\"phaser1\",\"phaser2\",\"phasor\",\"phasorbnk\",\"phs\",\"pindex\",\"pinker\",\"pinkish\",\"pitch\",\"pitchac\",\"pitchamdf\",\"planet\",\"platerev\",\"plltrack\",\"pluck\",\"poisson\",\"pol2rect\",\"polyaft\",\"polynomial\",\"port\",\"portk\",\"poscil\",\"poscil3\",\"pow\",\"powershape\",\"powoftwo\",\"pows\",\"prealloc\",\"prepiano\",\"print\",\"print_type\",\"printarray\",\"printf\",\"printf_i\",\"printk\",\"printk2\",\"printks\",\"printks2\",\"prints\",\"product\",\"pset\",\"ptable\",\"ptable3\",\"ptablei\",\"ptableiw\",\"ptablew\",\"ptrack\",\"puts\",\"pvadd\",\"pvbufread\",\"pvcross\",\"pvinterp\",\"pvoc\",\"pvread\",\"pvs2array\",\"pvs2tab\",\"pvsadsyn\",\"pvsanal\",\"pvsarp\",\"pvsbandp\",\"pvsbandr\",\"pvsbin\",\"pvsblur\",\"pvsbuffer\",\"pvsbufread\",\"pvsbufread2\",\"pvscale\",\"pvscent\",\"pvsceps\",\"pvscross\",\"pvsdemix\",\"pvsdiskin\",\"pvsdisp\",\"pvsenvftw\",\"pvsfilter\",\"pvsfread\",\"pvsfreeze\",\"pvsfromarray\",\"pvsftr\",\"pvsftw\",\"pvsfwrite\",\"pvsgain\",\"pvshift\",\"pvsifd\",\"pvsin\",\"pvsinfo\",\"pvsinit\",\"pvslock\",\"pvsmaska\",\"pvsmix\",\"pvsmooth\",\"pvsmorph\",\"pvsosc\",\"pvsout\",\"pvspitch\",\"pvstanal\",\"pvstencil\",\"pvstrace\",\"pvsvoc\",\"pvswarp\",\"pvsynth\",\"pwd\",\"pyassign\",\"pyassigni\",\"pyassignt\",\"pycall\",\"pycall1\",\"pycall1i\",\"pycall1t\",\"pycall2\",\"pycall2i\",\"pycall2t\",\"pycall3\",\"pycall3i\",\"pycall3t\",\"pycall4\",\"pycall4i\",\"pycall4t\",\"pycall5\",\"pycall5i\",\"pycall5t\",\"pycall6\",\"pycall6i\",\"pycall6t\",\"pycall7\",\"pycall7i\",\"pycall7t\",\"pycall8\",\"pycall8i\",\"pycall8t\",\"pycalli\",\"pycalln\",\"pycallni\",\"pycallt\",\"pyeval\",\"pyevali\",\"pyevalt\",\"pyexec\",\"pyexeci\",\"pyexect\",\"pyinit\",\"pylassign\",\"pylassigni\",\"pylassignt\",\"pylcall\",\"pylcall1\",\"pylcall1i\",\"pylcall1t\",\"pylcall2\",\"pylcall2i\",\"pylcall2t\",\"pylcall3\",\"pylcall3i\",\"pylcall3t\",\"pylcall4\",\"pylcall4i\",\"pylcall4t\",\"pylcall5\",\"pylcall5i\",\"pylcall5t\",\"pylcall6\",\"pylcall6i\",\"pylcall6t\",\"pylcall7\",\"pylcall7i\",\"pylcall7t\",\"pylcall8\",\"pylcall8i\",\"pylcall8t\",\"pylcalli\",\"pylcalln\",\"pylcallni\",\"pylcallt\",\"pyleval\",\"pylevali\",\"pylevalt\",\"pylexec\",\"pylexeci\",\"pylexect\",\"pylrun\",\"pylruni\",\"pylrunt\",\"pyrun\",\"pyruni\",\"pyrunt\",\"qinf\",\"qnan\",\"r2c\",\"rand\",\"randh\",\"randi\",\"random\",\"randomh\",\"randomi\",\"rbjeq\",\"readclock\",\"readf\",\"readfi\",\"readk\",\"readk2\",\"readk3\",\"readk4\",\"readks\",\"readscore\",\"readscratch\",\"rect2pol\",\"release\",\"remoteport\",\"remove\",\"repluck\",\"reshapearray\",\"reson\",\"resonk\",\"resonr\",\"resonx\",\"resonxk\",\"resony\",\"resonz\",\"resyn\",\"reverb\",\"reverb2\",\"reverbsc\",\"rewindscore\",\"rezzy\",\"rfft\",\"rifft\",\"rms\",\"rnd\",\"rnd31\",\"round\",\"rspline\",\"rtclock\",\"s16b14\",\"s32b14\",\"samphold\",\"sandpaper\",\"sc_lag\",\"sc_lagud\",\"sc_phasor\",\"sc_trig\",\"scale\",\"scalearray\",\"scanhammer\",\"scans\",\"scantable\",\"scanu\",\"schedkwhen\",\"schedkwhennamed\",\"schedule\",\"schedwhen\",\"scoreline\",\"scoreline_i\",\"seed\",\"sekere\",\"select\",\"semitone\",\"sense\",\"sensekey\",\"seqtime\",\"seqtime2\",\"serialBegin\",\"serialEnd\",\"serialFlush\",\"serialPrint\",\"serialRead\",\"serialWrite\",\"serialWrite_i\",\"setcol\",\"setctrl\",\"setksmps\",\"setrow\",\"setscorepos\",\"sfilist\",\"sfinstr\",\"sfinstr3\",\"sfinstr3m\",\"sfinstrm\",\"sfload\",\"sflooper\",\"sfpassign\",\"sfplay\",\"sfplay3\",\"sfplay3m\",\"sfplaym\",\"sfplist\",\"sfpreset\",\"shaker\",\"shiftin\",\"shiftout\",\"signum\",\"sin\",\"sinh\",\"sininv\",\"sinsyn\",\"sleighbells\",\"slicearray\",\"slicearray_i\",\"slider16\",\"slider16f\",\"slider16table\",\"slider16tablef\",\"slider32\",\"slider32f\",\"slider32table\",\"slider32tablef\",\"slider64\",\"slider64f\",\"slider64table\",\"slider64tablef\",\"slider8\",\"slider8f\",\"slider8table\",\"slider8tablef\",\"sliderKawai\",\"sndloop\",\"sndwarp\",\"sndwarpst\",\"sockrecv\",\"sockrecvs\",\"socksend\",\"socksends\",\"sorta\",\"sortd\",\"soundin\",\"space\",\"spat3d\",\"spat3di\",\"spat3dt\",\"spdist\",\"splitrig\",\"sprintf\",\"sprintfk\",\"spsend\",\"sqrt\",\"squinewave\",\"statevar\",\"stix\",\"strcat\",\"strcatk\",\"strchar\",\"strchark\",\"strcmp\",\"strcmpk\",\"strcpy\",\"strcpyk\",\"strecv\",\"streson\",\"strfromurl\",\"strget\",\"strindex\",\"strindexk\",\"strlen\",\"strlenk\",\"strlower\",\"strlowerk\",\"strrindex\",\"strrindexk\",\"strset\",\"strsub\",\"strsubk\",\"strtod\",\"strtodk\",\"strtol\",\"strtolk\",\"strupper\",\"strupperk\",\"stsend\",\"subinstr\",\"subinstrinit\",\"sum\",\"sumarray\",\"svfilter\",\"syncgrain\",\"syncloop\",\"syncphasor\",\"system\",\"system_i\",\"tab\",\"tab2array\",\"tab2pvs\",\"tab_i\",\"tabifd\",\"table\",\"table3\",\"table3kt\",\"tablecopy\",\"tablefilter\",\"tablefilteri\",\"tablegpw\",\"tablei\",\"tableicopy\",\"tableigpw\",\"tableikt\",\"tableimix\",\"tableiw\",\"tablekt\",\"tablemix\",\"tableng\",\"tablera\",\"tableseg\",\"tableshuffle\",\"tableshufflei\",\"tablew\",\"tablewa\",\"tablewkt\",\"tablexkt\",\"tablexseg\",\"tabmorph\",\"tabmorpha\",\"tabmorphak\",\"tabmorphi\",\"tabplay\",\"tabrec\",\"tabrowlin\",\"tabsum\",\"tabw\",\"tabw_i\",\"tambourine\",\"tan\",\"tanh\",\"taninv\",\"taninv2\",\"tbvcf\",\"tempest\",\"tempo\",\"temposcal\",\"tempoval\",\"timedseq\",\"timeinstk\",\"timeinsts\",\"timek\",\"times\",\"tival\",\"tlineto\",\"tone\",\"tonek\",\"tonex\",\"tradsyn\",\"trandom\",\"transeg\",\"transegb\",\"transegr\",\"trcross\",\"trfilter\",\"trhighest\",\"trigger\",\"trigseq\",\"trim\",\"trim_i\",\"trirand\",\"trlowest\",\"trmix\",\"trscale\",\"trshift\",\"trsplit\",\"turnoff\",\"turnoff2\",\"turnon\",\"tvconv\",\"unirand\",\"unwrap\",\"upsamp\",\"urandom\",\"urd\",\"vactrol\",\"vadd\",\"vadd_i\",\"vaddv\",\"vaddv_i\",\"vaget\",\"valpass\",\"vaset\",\"vbap\",\"vbapg\",\"vbapgmove\",\"vbaplsinit\",\"vbapmove\",\"vbapz\",\"vbapzmove\",\"vcella\",\"vco\",\"vco2\",\"vco2ft\",\"vco2ift\",\"vco2init\",\"vcomb\",\"vcopy\",\"vcopy_i\",\"vdel_k\",\"vdelay\",\"vdelay3\",\"vdelayk\",\"vdelayx\",\"vdelayxq\",\"vdelayxs\",\"vdelayxw\",\"vdelayxwq\",\"vdelayxws\",\"vdivv\",\"vdivv_i\",\"vecdelay\",\"veloc\",\"vexp\",\"vexp_i\",\"vexpseg\",\"vexpv\",\"vexpv_i\",\"vibes\",\"vibr\",\"vibrato\",\"vincr\",\"vlimit\",\"vlinseg\",\"vlowres\",\"vmap\",\"vmirror\",\"vmult\",\"vmult_i\",\"vmultv\",\"vmultv_i\",\"voice\",\"vosim\",\"vphaseseg\",\"vport\",\"vpow\",\"vpow_i\",\"vpowv\",\"vpowv_i\",\"vpvoc\",\"vrandh\",\"vrandi\",\"vsubv\",\"vsubv_i\",\"vtaba\",\"vtabi\",\"vtabk\",\"vtable1k\",\"vtablea\",\"vtablei\",\"vtablek\",\"vtablewa\",\"vtablewi\",\"vtablewk\",\"vtabwa\",\"vtabwi\",\"vtabwk\",\"vwrap\",\"waveset\",\"websocket\",\"weibull\",\"wgbow\",\"wgbowedbar\",\"wgbrass\",\"wgclar\",\"wgflute\",\"wgpluck\",\"wgpluck2\",\"wguide1\",\"wguide2\",\"wiiconnect\",\"wiidata\",\"wiirange\",\"wiisend\",\"window\",\"wrap\",\"writescratch\",\"wterrain\",\"xadsr\",\"xin\",\"xout\",\"xscanmap\",\"xscans\",\"xscansmap\",\"xscanu\",\"xtratim\",\"xyscale\",\"zacl\",\"zakinit\",\"zamod\",\"zar\",\"zarg\",\"zaw\",\"zawm\",\"zdf_1pole\",\"zdf_1pole_mode\",\"zdf_2pole\",\"zdf_2pole_mode\",\"zdf_ladder\",\"zfilter2\",\"zir\",\"ziw\",\"ziwm\",\"zkcl\",\"zkmod\",\"zkr\",\"zkw\",\"zkwm\"],t=[\"array\",\"bformdec\",\"bformenc\",\"copy2ftab\",\"copy2ttab\",\"hrtfer\",\"ktableseg\",\"lentab\",\"maxtab\",\"mintab\",\"pop\",\"pop_f\",\"push\",\"push_f\",\"scalet\",\"sndload\",\"soundout\",\"soundouts\",\"specaddm\",\"specdiff\",\"specdisp\",\"specfilt\",\"spechist\",\"specptrk\",\"specscal\",\"specsum\",\"spectrum\",\"stack\",\"sumtab\",\"tabgen\",\"tabmap\",\"tabmap_i\",\"tabslice\",\"tb0\",\"tb0_init\",\"tb1\",\"tb10\",\"tb10_init\",\"tb11\",\"tb11_init\",\"tb12\",\"tb12_init\",\"tb13\",\"tb13_init\",\"tb14\",\"tb14_init\",\"tb15\",\"tb15_init\",\"tb1_init\",\"tb2\",\"tb2_init\",\"tb3\",\"tb3_init\",\"tb4\",\"tb4_init\",\"tb5\",\"tb5_init\",\"tb6\",\"tb6_init\",\"tb7\",\"tb7_init\",\"tb8\",\"tb8_init\",\"tb9\",\"tb9_init\",\"vbap16\",\"vbap4\",\"vbap4move\",\"vbap8\",\"vbap8move\",\"xyin\"];e=r.arrayToMap(e),t=r.arrayToMap(t),this.lineContinuations=[{token:\"constant.character.escape.line-continuation.csound\",regex:/\\\\$/},this.pushRule({token:\"constant.character.escape.line-continuation.csound\",regex:/\\\\/,next:\"line continuation\"})],this.comments.push(this.lineContinuations),this.quotedStringContents.push(this.lineContinuations,{token:\"invalid.illegal\",regex:/[^\"\\\\]*$/});var n=this.$rules.start;n.splice(1,0,{token:[\"text.csound\",\"entity.name.label.csound\",\"entity.punctuation.label.csound\",\"text.csound\"],regex:/^([ \\t]*)(\\w+)(:)([ \\t]+|$)/}),n.push(this.pushRule({token:\"keyword.function.csound\",regex:/\\binstr\\b/,next:\"instrument numbers and identifiers\"}),this.pushRule({token:\"keyword.function.csound\",regex:/\\bopcode\\b/,next:\"after opcode keyword\"}),{token:\"keyword.other.csound\",regex:/\\bend(?:in|op)\\b/},{token:\"variable.language.csound\",regex:/\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/},this.numbers,{token:\"keyword.operator.csound\",regex:\"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~\\u00ac]|[=!+\\\\-*/^%&|<>#?:]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"braced string\"}),{token:\"keyword.control.csound\",regex:/\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/},this.pushRule({token:\"keyword.control.csound\",regex:/\\b[ik]?goto\\b/,next:\"goto before label\"}),this.pushRule({token:\"keyword.control.csound\",regex:/\\b(?:r(?:einit|igoto)|tigoto)\\b/,next:\"goto before label\"}),this.pushRule({token:\"keyword.control.csound\",regex:/\\bc(?:g|in?|k|nk?)goto\\b/,next:[\"goto before label\",\"goto before argument\"]}),this.pushRule({token:\"keyword.control.csound\",regex:/\\btimout\\b/,next:[\"goto before label\",\"goto before argument\",\"goto before argument\"]}),this.pushRule({token:\"keyword.control.csound\",regex:/\\bloop_[gl][et]\\b/,next:[\"goto before label\",\"goto before argument\",\"goto before argument\",\"goto before argument\"]}),this.pushRule({token:\"support.function.csound\",regex:/\\b(?:readscore|scoreline(?:_i)?)\\b/,next:\"Csound score opcode\"}),this.pushRule({token:\"support.function.csound\",regex:/\\bpyl?run[it]?\\b(?!$)/,next:\"Python opcode\"}),this.pushRule({token:\"support.function.csound\",regex:/\\blua_(?:exec|opdef)\\b(?!$)/,next:\"Lua opcode\"}),{token:\"support.variable.csound\",regex:/\\bp\\d+\\b/},{regex:/\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/,onMatch:function(n,r,i,s){var o=n.split(this.splitRegex),u=o[1],a;return e.hasOwnProperty(u)?a=\"support.function.csound\":t.hasOwnProperty(u)&&(a=\"invalid.deprecated.csound\"),a?o[2]?[{type:a,value:u},{type:\"punctuation.type-annotation.csound\",value:o[2]},{type:\"type-annotation.storage.type.csound\",value:o[3]}]:a:\"text.csound\"}}),this.$rules[\"macro parameter value list\"].splice(2,0,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"macro parameter value braced string\"}),this.addRules({\"macro parameter value braced string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/}}/,next:\"macro parameter value list\"},{defaultToken:\"string.braced.csound\"}],\"instrument numbers and identifiers\":[this.comments,{token:\"entity.name.function.csound\",regex:/\\d+|[A-Z_a-z]\\w*/},this.popRule({token:\"empty\",regex:/$/})],\"after opcode keyword\":[this.comments,this.popRule({token:\"empty\",regex:/$/}),this.popRule({token:\"entity.name.function.opcode.csound\",regex:/[A-Z_a-z]\\w*/,next:\"opcode type signatures\"})],\"opcode type signatures\":[this.comments,this.popRule({token:\"empty\",regex:/$/}),{token:\"storage.type.csound\",regex:/\\b(?:0|[afijkKoOpPStV\\[\\]]+)/}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"braced string\":[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/}}/}),this.bracedStringContents,{defaultToken:\"string.braced.csound\"}],\"goto before argument\":[this.popRule({token:\"text.csound\",regex:/,/}),n],\"goto before label\":[{token:\"text.csound\",regex:/\\s+/},this.comments,this.popRule({token:\"entity.name.label.csound\",regex:/\\w+/}),this.popRule({token:\"empty\",regex:/(?!\\w)/})],\"Csound score opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"csound-score-start\"},this.popRule({token:\"empty\",regex:/$/})],\"Python opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"python-start\"},this.popRule({token:\"empty\",regex:/$/})],\"Lua opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"lua-start\"},this.popRule({token:\"empty\",regex:/$/})],\"line continuation\":[this.popRule({token:\"empty\",regex:/$/}),this.semicolonComments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}]});var i=[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/}}/})];this.embedRules(o,\"csound-score-\",i),this.embedRules(a,\"python-\",i),this.embedRules(u,\"lua-\",i),this.normalizeRules()};i.inherits(f,s),t.CsoundOrchestraHighlightRules=f}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/csound_document_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_orchestra_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules,s=e(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules,o=e(\"./html_highlight_rules\").HtmlHighlightRules,u=e(\"./text_highlight_rules\").TextHighlightRules,a=function(){this.$rules={start:[{token:[\"meta.tag.punctuation.tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:/(<)(CsoundSynthesi[sz]er)(>)/,next:\"synthesizer\"},{defaultToken:\"text.csound-document\"}],synthesizer:[{token:[\"meta.tag.punctuation.end-tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(</)(CsoundSynthesi[sz]er)(>)\",next:\"start\"},{token:[\"meta.tag.punctuation.tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(<)(CsInstruments)(>)\",next:\"csound-start\"},{token:[\"meta.tag.punctuation.tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(<)(CsScore)(>)\",next:\"csound-score-start\"},{token:[\"meta.tag.punctuation.tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(<)([Hh][Tt][Mm][Ll])(>)\",next:\"html-start\"}]},this.embedRules(i,\"csound-\",[{token:[\"meta.tag.punctuation.end-tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(</)(CsInstruments)(>)\",next:\"synthesizer\"}]),this.embedRules(s,\"csound-score-\",[{token:[\"meta.tag.punctuation.end-tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(</)(CsScore)(>)\",next:\"synthesizer\"}]),this.embedRules(o,\"html-\",[{token:[\"meta.tag.punctuation.end-tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(</)([Hh][Tt][Mm][Ll])(>)\",next:\"synthesizer\"}]),this.normalizeRules()};r.inherits(a,u),t.CsoundDocumentHighlightRules=a}),define(\"ace/mode/csound_document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_document_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./csound_document_highlight_rules\").CsoundDocumentHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-csound_orchestra.js",
    "content": "define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.semicolonComments={token:\"comment.line.semicolon.csound\",regex:\";.*$\"},this.comments=[{token:\"punctuation.definition.comment.begin.csound\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.end.csound\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.csound\"}]},{token:\"comment.line.double-slash.csound\",regex:\"//.*$\"},this.semicolonComments],this.macroUses=[{token:[\"entity.name.function.preprocessor.csound\",\"punctuation.definition.macro-parameter-value-list.begin.csound\"],regex:/(\\$[A-Z_a-z]\\w*\\.?)(\\()/,next:\"macro parameter value list\"},{token:\"entity.name.function.preprocessor.csound\",regex:/\\$[A-Z_a-z]\\w*(?:\\.|\\b)/}],this.numbers=[{token:\"constant.numeric.float.csound\",regex:/(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/},{token:[\"storage.type.number.csound\",\"constant.numeric.integer.hexadecimal.csound\"],regex:/(0[Xx])([0-9A-Fa-f]+)/},{token:\"constant.numeric.integer.decimal.csound\",regex:/\\d+/}],this.bracedStringContents=[{token:\"constant.character.escape.csound\",regex:/\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/},{token:\"constant.character.placeholder.csound\",regex:/%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/},{token:\"constant.character.escape.csound\",regex:/%%/}],this.quotedStringContents=[this.macroUses,this.bracedStringContents];var e=[this.comments,{token:\"keyword.preprocessor.csound\",regex:/#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/},{token:\"keyword.preprocessor.csound\",regex:/#include/,push:[this.comments,{token:\"string.csound\",regex:/([^ \\t])(?:.*?\\1)/,next:\"pop\"}]},{token:\"keyword.preprocessor.csound\",regex:/#[ \\t]*define/,next:\"define directive\"},{token:\"keyword.preprocessor.csound\",regex:/#(?:ifn?def|undef)\\b/,next:\"macro directive\"},this.macroUses];this.$rules={start:e,\"define directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.begin.csound\",regex:/\\(/,next:\"macro parameter name list\"},{token:\"punctuation.definition.macro.begin.csound\",regex:/#/,next:\"macro body\"}],\"macro parameter name list\":[{token:\"variable.parameter.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.end.csound\",regex:/\\)/,next:\"define directive\"}],\"macro body\":[{token:\"constant.character.escape.csound\",regex:/\\\\#/},{token:\"punctuation.definition.macro.end.csound\",regex:/#/,next:\"start\"},e],\"macro directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"macro parameter value list\":[{token:\"punctuation.definition.macro-parameter-value-list.end.csound\",regex:/\\)/,next:\"start\"},{token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"macro parameter value quoted string\"},this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),{token:\"punctuation.macro-parameter-value-separator.csound\",regex:\"[#']\"}],\"macro parameter value quoted string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/\"/,next:\"macro parameter value list\"},this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"macro parameter value parenthetical\":[{token:\"constant.character.escape.csound\",regex:/\\\\\\)/},this.popRule({token:\"punctuation.macro-parameter-value-parenthetical.end.csound\",regex:/\\)/}),this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),e]}};r.inherits(s,i),function(){this.pushRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){r.length===0&&r.push(n);if(Array.isArray(e.next))for(var s=0;s<e.next.length;s++)r.push(e.next[s]);else r.push(e.next);return this.next=r[r.length-1],e.token},get next(){return Array.isArray(e.next)?e.next[e.next.length-1]:e.next},set next(t){if(Array.isArray(e.next)){var n=e.next[e.next.length-1],r=n.length-1,i=t.length-1;if(i>r)while(r>=0&&i>=0){if(n.charAt(r)!==t.charAt(i)){var s=t.substr(0,i);for(var o=0;o<e.next.length;o++)e.next[o]=s+e.next[o];break}r--,i--}}else e.next=t},get token(){return e.token}}},this.popRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){return r.pop(),e.next?(r.push(e.next),this.next=r[r.length-1]):this.next=r.length>1?r[r.length-1]:r.pop(),e.token}}}}.call(s.prototype),t.CsoundPreprocessorHighlightRules=s}),define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,s=function(){i.call(this),this.quotedStringContents.push({token:\"invalid.illegal.csound-score\",regex:/[^\"]*$/});var e=this.$rules.start;e.push({token:\"keyword.control.csound-score\",regex:/[abCdefiqstvxy]/},{token:\"invalid.illegal.csound-score\",regex:/w/},{token:\"constant.numeric.language.csound-score\",regex:/z/},{token:[\"keyword.control.csound-score\",\"constant.numeric.integer.decimal.csound-score\"],regex:/([nNpP][pP])(\\d+)/},{token:\"keyword.other.csound-score\",regex:/[mn]/,push:[{token:\"empty\",regex:/$/,next:\"pop\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/}]},{token:\"keyword.preprocessor.csound-score\",regex:/r\\b/,next:\"repeat section\"},this.numbers,{token:\"keyword.operator.csound-score\",regex:\"[!+\\\\-*/^%&|<>#~.]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound-score\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.braced-loop.begin.csound-score\",regex:/{/,next:\"loop after left brace\"})),this.addRules({\"repeat section\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"repeat section before label\"}],\"repeat section before label\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound-score\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound-score\"}],\"loop after left brace\":[this.popRule({token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"loop after repeat count\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after repeat count\":[this.popRule({token:\"entity.name.function.preprocessor.csound-score\",regex:/[A-Z_a-z]\\w*\\b/,next:\"loop after macro name\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after macro name\":[e,this.popRule({token:\"punctuation.braced-loop.end.csound-score\",regex:/}/})]}),this.normalizeRules()};r.inherits(s,i),t.CsoundScoreHighlightRules=s}),define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"setn|foreach|foreachi|gcinfo|log10|maxn\",s=this.createKeywordMapper({keyword:e,\"support.function\":n,\"keyword.deprecated\":i,\"constant.library\":r,\"constant.language\":t,\"variable.language\":\"self\"},\"identifier\"),o=\"(?:(?:[1-9]\\\\d*)|(?:0))\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:\"+o+\"|\"+u+\")\",f=\"(?:\\\\.\\\\d+)\",l=\"(?:\\\\d+)\",c=\"(?:(?:\"+l+\"?\"+f+\")|(?:\"+l+\"\\\\.))\",h=\"(?:\"+c+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"string.start\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"string.end\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:h},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"variable.language\":\"self|cls\",\"constant.language\":t,keyword:e},\"identifier\"),i=\"[uU]?\",s=\"[rR]\",o=\"[fF]\",u=\"(?:[rR][fF]|[fF][rR])\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:s+'\"{3}',next:\"rawqqstring3\"},{token:\"string\",regex:s+'\"(?=.)',next:\"rawqqstring\"},{token:\"string\",regex:s+\"'{3}\",next:\"rawqstring3\"},{token:\"string\",regex:s+\"'(?=.)\",next:\"rawqstring\"},{token:\"string\",regex:o+'\"{3}',next:\"fqqstring3\"},{token:\"string\",regex:o+'\"(?=.)',next:\"fqqstring\"},{token:\"string\",regex:o+\"'{3}\",next:\"fqstring3\"},{token:\"string\",regex:o+\"'(?=.)\",next:\"fqstring\"},{token:\"string\",regex:u+'\"{3}',next:\"rfqqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"rfqqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"rfqstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"rfqstring\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"punctuation\",regex:\",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"},{include:\"constants\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],rawqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],rawqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],fqqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"fqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rfqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring:[{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstringParRules:[{token:\"paren.lparen\",regex:\"[\\\\[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)]\"},{token:\"string\",regex:\"\\\\s+\"},{token:\"string\",regex:\"'(.)*'\"},{token:\"string\",regex:'\"(.)*\"'},{token:\"function.support\",regex:\"(!s|!r|!a)\"},{include:\"constants\"},{token:\"paren.rparen\",regex:\"}\",next:\"pop\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"}],constants:[{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:[\"punctuation\",\"function.support\"],regex:\"(\\\\.)([a-zA-Z_]+)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),define(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=e(\"../lib/oop\"),s=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,o=e(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules,u=e(\"./lua_highlight_rules\").LuaHighlightRules,a=e(\"./python_highlight_rules\").PythonHighlightRules,f=function(){s.call(this);var e=[\"ATSadd\",\"ATSaddnz\",\"ATSbufread\",\"ATScross\",\"ATSinfo\",\"ATSinterpread\",\"ATSpartialtap\",\"ATSread\",\"ATSreadnz\",\"ATSsinnoi\",\"FLbox\",\"FLbutBank\",\"FLbutton\",\"FLcloseButton\",\"FLcolor\",\"FLcolor2\",\"FLcount\",\"FLexecButton\",\"FLgetsnap\",\"FLgroup\",\"FLgroupEnd\",\"FLgroup_end\",\"FLhide\",\"FLhvsBox\",\"FLhvsBoxSetValue\",\"FLjoy\",\"FLkeyIn\",\"FLknob\",\"FLlabel\",\"FLloadsnap\",\"FLmouse\",\"FLpack\",\"FLpackEnd\",\"FLpack_end\",\"FLpanel\",\"FLpanelEnd\",\"FLpanel_end\",\"FLprintk\",\"FLprintk2\",\"FLroller\",\"FLrun\",\"FLsavesnap\",\"FLscroll\",\"FLscrollEnd\",\"FLscroll_end\",\"FLsetAlign\",\"FLsetBox\",\"FLsetColor\",\"FLsetColor2\",\"FLsetFont\",\"FLsetPosition\",\"FLsetSize\",\"FLsetSnapGroup\",\"FLsetText\",\"FLsetTextColor\",\"FLsetTextSize\",\"FLsetTextType\",\"FLsetVal\",\"FLsetVal_i\",\"FLsetVali\",\"FLsetsnap\",\"FLshow\",\"FLslidBnk\",\"FLslidBnk2\",\"FLslidBnk2Set\",\"FLslidBnk2Setk\",\"FLslidBnkGetHandle\",\"FLslidBnkSet\",\"FLslidBnkSetk\",\"FLslider\",\"FLtabs\",\"FLtabsEnd\",\"FLtabs_end\",\"FLtext\",\"FLupdate\",\"FLvalue\",\"FLvkeybd\",\"FLvslidBnk\",\"FLvslidBnk2\",\"FLxyin\",\"JackoAudioIn\",\"JackoAudioInConnect\",\"JackoAudioOut\",\"JackoAudioOutConnect\",\"JackoFreewheel\",\"JackoInfo\",\"JackoInit\",\"JackoMidiInConnect\",\"JackoMidiOut\",\"JackoMidiOutConnect\",\"JackoNoteOut\",\"JackoOn\",\"JackoTransport\",\"K35_hpf\",\"K35_lpf\",\"MixerClear\",\"MixerGetLevel\",\"MixerReceive\",\"MixerSend\",\"MixerSetLevel\",\"MixerSetLevel_i\",\"OSCbundle\",\"OSCcount\",\"OSCinit\",\"OSCinitM\",\"OSClisten\",\"OSCraw\",\"OSCsend\",\"OSCsend_lo\",\"S\",\"STKBandedWG\",\"STKBeeThree\",\"STKBlowBotl\",\"STKBlowHole\",\"STKBowed\",\"STKBrass\",\"STKClarinet\",\"STKDrummer\",\"STKFMVoices\",\"STKFlute\",\"STKHevyMetl\",\"STKMandolin\",\"STKModalBar\",\"STKMoog\",\"STKPercFlut\",\"STKPlucked\",\"STKResonate\",\"STKRhodey\",\"STKSaxofony\",\"STKShakers\",\"STKSimple\",\"STKSitar\",\"STKStifKarp\",\"STKTubeBell\",\"STKVoicForm\",\"STKWhistle\",\"STKWurley\",\"a\",\"abs\",\"active\",\"adsr\",\"adsyn\",\"adsynt\",\"adsynt2\",\"aftouch\",\"alpass\",\"alwayson\",\"ampdb\",\"ampdbfs\",\"ampmidi\",\"ampmidid\",\"areson\",\"aresonk\",\"atone\",\"atonek\",\"atonex\",\"babo\",\"balance\",\"balance2\",\"bamboo\",\"barmodel\",\"bbcutm\",\"bbcuts\",\"beadsynt\",\"beosc\",\"betarand\",\"bexprnd\",\"bformdec1\",\"bformenc1\",\"binit\",\"biquad\",\"biquada\",\"birnd\",\"bpf\",\"bpfcos\",\"bqrez\",\"butbp\",\"butbr\",\"buthp\",\"butlp\",\"butterbp\",\"butterbr\",\"butterhp\",\"butterlp\",\"button\",\"buzz\",\"c2r\",\"cabasa\",\"cauchy\",\"cauchyi\",\"cbrt\",\"ceil\",\"cell\",\"cent\",\"centroid\",\"ceps\",\"cepsinv\",\"chanctrl\",\"changed\",\"changed2\",\"chani\",\"chano\",\"chebyshevpoly\",\"checkbox\",\"chn_S\",\"chn_a\",\"chn_k\",\"chnclear\",\"chnexport\",\"chnget\",\"chngetks\",\"chnmix\",\"chnparams\",\"chnset\",\"chnsetks\",\"chuap\",\"clear\",\"clfilt\",\"clip\",\"clockoff\",\"clockon\",\"cmp\",\"cmplxprod\",\"comb\",\"combinv\",\"compilecsd\",\"compileorc\",\"compilestr\",\"compress\",\"compress2\",\"connect\",\"control\",\"convle\",\"convolve\",\"copya2ftab\",\"copyf2array\",\"cos\",\"cosh\",\"cosinv\",\"cosseg\",\"cossegb\",\"cossegr\",\"cps2pch\",\"cpsmidi\",\"cpsmidib\",\"cpsmidinn\",\"cpsoct\",\"cpspch\",\"cpstmid\",\"cpstun\",\"cpstuni\",\"cpsxpch\",\"cpumeter\",\"cpuprc\",\"cross2\",\"crossfm\",\"crossfmi\",\"crossfmpm\",\"crossfmpmi\",\"crosspm\",\"crosspmi\",\"crunch\",\"ctlchn\",\"ctrl14\",\"ctrl21\",\"ctrl7\",\"ctrlinit\",\"cuserrnd\",\"dam\",\"date\",\"dates\",\"db\",\"dbamp\",\"dbfsamp\",\"dcblock\",\"dcblock2\",\"dconv\",\"dct\",\"dctinv\",\"deinterleave\",\"delay\",\"delay1\",\"delayk\",\"delayr\",\"delayw\",\"deltap\",\"deltap3\",\"deltapi\",\"deltapn\",\"deltapx\",\"deltapxw\",\"denorm\",\"diff\",\"diode_ladder\",\"directory\",\"diskgrain\",\"diskin\",\"diskin2\",\"dispfft\",\"display\",\"distort\",\"distort1\",\"divz\",\"doppler\",\"dot\",\"downsamp\",\"dripwater\",\"dssiactivate\",\"dssiaudio\",\"dssictls\",\"dssiinit\",\"dssilist\",\"dumpk\",\"dumpk2\",\"dumpk3\",\"dumpk4\",\"duserrnd\",\"dust\",\"dust2\",\"envlpx\",\"envlpxr\",\"ephasor\",\"eqfil\",\"evalstr\",\"event\",\"event_i\",\"exciter\",\"exitnow\",\"exp\",\"expcurve\",\"expon\",\"exprand\",\"exprandi\",\"expseg\",\"expsega\",\"expsegb\",\"expsegba\",\"expsegr\",\"fareylen\",\"fareyleni\",\"faustaudio\",\"faustcompile\",\"faustctl\",\"faustdsp\",\"faustgen\",\"faustplay\",\"fft\",\"fftinv\",\"ficlose\",\"filebit\",\"filelen\",\"filenchnls\",\"filepeak\",\"filescal\",\"filesr\",\"filevalid\",\"fillarray\",\"filter2\",\"fin\",\"fini\",\"fink\",\"fiopen\",\"flanger\",\"flashtxt\",\"flooper\",\"flooper2\",\"floor\",\"fmanal\",\"fmax\",\"fmb3\",\"fmbell\",\"fmin\",\"fmmetal\",\"fmod\",\"fmpercfl\",\"fmrhode\",\"fmvoice\",\"fmwurlie\",\"fof\",\"fof2\",\"fofilter\",\"fog\",\"fold\",\"follow\",\"follow2\",\"foscil\",\"foscili\",\"fout\",\"fouti\",\"foutir\",\"foutk\",\"fprintks\",\"fprints\",\"frac\",\"fractalnoise\",\"framebuffer\",\"freeverb\",\"ftaudio\",\"ftchnls\",\"ftconv\",\"ftcps\",\"ftfree\",\"ftgen\",\"ftgenonce\",\"ftgentmp\",\"ftlen\",\"ftload\",\"ftloadk\",\"ftlptim\",\"ftmorf\",\"ftom\",\"ftprint\",\"ftresize\",\"ftresizei\",\"ftsamplebank\",\"ftsave\",\"ftsavek\",\"ftslice\",\"ftsr\",\"gain\",\"gainslider\",\"gauss\",\"gaussi\",\"gausstrig\",\"gbuzz\",\"genarray\",\"genarray_i\",\"gendy\",\"gendyc\",\"gendyx\",\"getcfg\",\"getcol\",\"getftargs\",\"getrow\",\"getrowlin\",\"getseed\",\"gogobel\",\"grain\",\"grain2\",\"grain3\",\"granule\",\"guiro\",\"harmon\",\"harmon2\",\"harmon3\",\"harmon4\",\"hdf5read\",\"hdf5write\",\"hilbert\",\"hilbert2\",\"hrtfearly\",\"hrtfmove\",\"hrtfmove2\",\"hrtfreverb\",\"hrtfstat\",\"hsboscil\",\"hvs1\",\"hvs2\",\"hvs3\",\"hypot\",\"i\",\"ihold\",\"imagecreate\",\"imagefree\",\"imagegetpixel\",\"imageload\",\"imagesave\",\"imagesetpixel\",\"imagesize\",\"in\",\"in32\",\"inch\",\"inh\",\"init\",\"initc14\",\"initc21\",\"initc7\",\"inleta\",\"inletf\",\"inletk\",\"inletkid\",\"inletv\",\"ino\",\"inq\",\"inrg\",\"ins\",\"insglobal\",\"insremot\",\"int\",\"integ\",\"interleave\",\"interp\",\"invalue\",\"inx\",\"inz\",\"jacktransport\",\"jitter\",\"jitter2\",\"joystick\",\"jspline\",\"k\",\"la_i_add_mc\",\"la_i_add_mr\",\"la_i_add_vc\",\"la_i_add_vr\",\"la_i_assign_mc\",\"la_i_assign_mr\",\"la_i_assign_t\",\"la_i_assign_vc\",\"la_i_assign_vr\",\"la_i_conjugate_mc\",\"la_i_conjugate_mr\",\"la_i_conjugate_vc\",\"la_i_conjugate_vr\",\"la_i_distance_vc\",\"la_i_distance_vr\",\"la_i_divide_mc\",\"la_i_divide_mr\",\"la_i_divide_vc\",\"la_i_divide_vr\",\"la_i_dot_mc\",\"la_i_dot_mc_vc\",\"la_i_dot_mr\",\"la_i_dot_mr_vr\",\"la_i_dot_vc\",\"la_i_dot_vr\",\"la_i_get_mc\",\"la_i_get_mr\",\"la_i_get_vc\",\"la_i_get_vr\",\"la_i_invert_mc\",\"la_i_invert_mr\",\"la_i_lower_solve_mc\",\"la_i_lower_solve_mr\",\"la_i_lu_det_mc\",\"la_i_lu_det_mr\",\"la_i_lu_factor_mc\",\"la_i_lu_factor_mr\",\"la_i_lu_solve_mc\",\"la_i_lu_solve_mr\",\"la_i_mc_create\",\"la_i_mc_set\",\"la_i_mr_create\",\"la_i_mr_set\",\"la_i_multiply_mc\",\"la_i_multiply_mr\",\"la_i_multiply_vc\",\"la_i_multiply_vr\",\"la_i_norm1_mc\",\"la_i_norm1_mr\",\"la_i_norm1_vc\",\"la_i_norm1_vr\",\"la_i_norm_euclid_mc\",\"la_i_norm_euclid_mr\",\"la_i_norm_euclid_vc\",\"la_i_norm_euclid_vr\",\"la_i_norm_inf_mc\",\"la_i_norm_inf_mr\",\"la_i_norm_inf_vc\",\"la_i_norm_inf_vr\",\"la_i_norm_max_mc\",\"la_i_norm_max_mr\",\"la_i_print_mc\",\"la_i_print_mr\",\"la_i_print_vc\",\"la_i_print_vr\",\"la_i_qr_eigen_mc\",\"la_i_qr_eigen_mr\",\"la_i_qr_factor_mc\",\"la_i_qr_factor_mr\",\"la_i_qr_sym_eigen_mc\",\"la_i_qr_sym_eigen_mr\",\"la_i_random_mc\",\"la_i_random_mr\",\"la_i_random_vc\",\"la_i_random_vr\",\"la_i_size_mc\",\"la_i_size_mr\",\"la_i_size_vc\",\"la_i_size_vr\",\"la_i_subtract_mc\",\"la_i_subtract_mr\",\"la_i_subtract_vc\",\"la_i_subtract_vr\",\"la_i_t_assign\",\"la_i_trace_mc\",\"la_i_trace_mr\",\"la_i_transpose_mc\",\"la_i_transpose_mr\",\"la_i_upper_solve_mc\",\"la_i_upper_solve_mr\",\"la_i_vc_create\",\"la_i_vc_set\",\"la_i_vr_create\",\"la_i_vr_set\",\"la_k_a_assign\",\"la_k_add_mc\",\"la_k_add_mr\",\"la_k_add_vc\",\"la_k_add_vr\",\"la_k_assign_a\",\"la_k_assign_f\",\"la_k_assign_mc\",\"la_k_assign_mr\",\"la_k_assign_t\",\"la_k_assign_vc\",\"la_k_assign_vr\",\"la_k_conjugate_mc\",\"la_k_conjugate_mr\",\"la_k_conjugate_vc\",\"la_k_conjugate_vr\",\"la_k_current_f\",\"la_k_current_vr\",\"la_k_distance_vc\",\"la_k_distance_vr\",\"la_k_divide_mc\",\"la_k_divide_mr\",\"la_k_divide_vc\",\"la_k_divide_vr\",\"la_k_dot_mc\",\"la_k_dot_mc_vc\",\"la_k_dot_mr\",\"la_k_dot_mr_vr\",\"la_k_dot_vc\",\"la_k_dot_vr\",\"la_k_f_assign\",\"la_k_get_mc\",\"la_k_get_mr\",\"la_k_get_vc\",\"la_k_get_vr\",\"la_k_invert_mc\",\"la_k_invert_mr\",\"la_k_lower_solve_mc\",\"la_k_lower_solve_mr\",\"la_k_lu_det_mc\",\"la_k_lu_det_mr\",\"la_k_lu_factor_mc\",\"la_k_lu_factor_mr\",\"la_k_lu_solve_mc\",\"la_k_lu_solve_mr\",\"la_k_mc_set\",\"la_k_mr_set\",\"la_k_multiply_mc\",\"la_k_multiply_mr\",\"la_k_multiply_vc\",\"la_k_multiply_vr\",\"la_k_norm1_mc\",\"la_k_norm1_mr\",\"la_k_norm1_vc\",\"la_k_norm1_vr\",\"la_k_norm_euclid_mc\",\"la_k_norm_euclid_mr\",\"la_k_norm_euclid_vc\",\"la_k_norm_euclid_vr\",\"la_k_norm_inf_mc\",\"la_k_norm_inf_mr\",\"la_k_norm_inf_vc\",\"la_k_norm_inf_vr\",\"la_k_norm_max_mc\",\"la_k_norm_max_mr\",\"la_k_qr_eigen_mc\",\"la_k_qr_eigen_mr\",\"la_k_qr_factor_mc\",\"la_k_qr_factor_mr\",\"la_k_qr_sym_eigen_mc\",\"la_k_qr_sym_eigen_mr\",\"la_k_random_mc\",\"la_k_random_mr\",\"la_k_random_vc\",\"la_k_random_vr\",\"la_k_subtract_mc\",\"la_k_subtract_mr\",\"la_k_subtract_vc\",\"la_k_subtract_vr\",\"la_k_t_assign\",\"la_k_trace_mc\",\"la_k_trace_mr\",\"la_k_upper_solve_mc\",\"la_k_upper_solve_mr\",\"la_k_vc_set\",\"la_k_vr_set\",\"lenarray\",\"lfo\",\"limit\",\"limit1\",\"lincos\",\"line\",\"linen\",\"linenr\",\"lineto\",\"link_beat_force\",\"link_beat_get\",\"link_beat_request\",\"link_create\",\"link_enable\",\"link_is_enabled\",\"link_metro\",\"link_peers\",\"link_tempo_get\",\"link_tempo_set\",\"linlin\",\"linrand\",\"linseg\",\"linsegb\",\"linsegr\",\"liveconv\",\"locsend\",\"locsig\",\"log\",\"log10\",\"log2\",\"logbtwo\",\"logcurve\",\"loopseg\",\"loopsegp\",\"looptseg\",\"loopxseg\",\"lorenz\",\"loscil\",\"loscil3\",\"loscil3phs\",\"loscilphs\",\"loscilx\",\"lowpass2\",\"lowres\",\"lowresx\",\"lpf18\",\"lpform\",\"lpfreson\",\"lphasor\",\"lpinterp\",\"lposcil\",\"lposcil3\",\"lposcila\",\"lposcilsa\",\"lposcilsa2\",\"lpread\",\"lpreson\",\"lpshold\",\"lpsholdp\",\"lpslot\",\"lua_exec\",\"lua_iaopcall\",\"lua_iaopcall_off\",\"lua_ikopcall\",\"lua_ikopcall_off\",\"lua_iopcall\",\"lua_iopcall_off\",\"lua_opdef\",\"mac\",\"maca\",\"madsr\",\"mags\",\"mandel\",\"mandol\",\"maparray\",\"maparray_i\",\"marimba\",\"massign\",\"max\",\"max_k\",\"maxabs\",\"maxabsaccum\",\"maxaccum\",\"maxalloc\",\"maxarray\",\"mclock\",\"mdelay\",\"median\",\"mediank\",\"metro\",\"mfb\",\"midglobal\",\"midiarp\",\"midic14\",\"midic21\",\"midic7\",\"midichannelaftertouch\",\"midichn\",\"midicontrolchange\",\"midictrl\",\"mididefault\",\"midifilestatus\",\"midiin\",\"midinoteoff\",\"midinoteoncps\",\"midinoteonkey\",\"midinoteonoct\",\"midinoteonpch\",\"midion\",\"midion2\",\"midiout\",\"midiout_i\",\"midipgm\",\"midipitchbend\",\"midipolyaftertouch\",\"midiprogramchange\",\"miditempo\",\"midremot\",\"min\",\"minabs\",\"minabsaccum\",\"minaccum\",\"minarray\",\"mincer\",\"mirror\",\"mode\",\"modmatrix\",\"monitor\",\"moog\",\"moogladder\",\"moogladder2\",\"moogvcf\",\"moogvcf2\",\"moscil\",\"mp3bitrate\",\"mp3in\",\"mp3len\",\"mp3nchnls\",\"mp3scal\",\"mp3sr\",\"mpulse\",\"mrtmsg\",\"mtof\",\"mton\",\"multitap\",\"mute\",\"mvchpf\",\"mvclpf1\",\"mvclpf2\",\"mvclpf3\",\"mvclpf4\",\"mxadsr\",\"nchnls_hw\",\"nestedap\",\"nlalp\",\"nlfilt\",\"nlfilt2\",\"noise\",\"noteoff\",\"noteon\",\"noteondur\",\"noteondur2\",\"notnum\",\"nreverb\",\"nrpn\",\"nsamp\",\"nstance\",\"nstrnum\",\"ntom\",\"ntrpol\",\"nxtpow2\",\"octave\",\"octcps\",\"octmidi\",\"octmidib\",\"octmidinn\",\"octpch\",\"olabuffer\",\"oscbnk\",\"oscil\",\"oscil1\",\"oscil1i\",\"oscil3\",\"oscili\",\"oscilikt\",\"osciliktp\",\"oscilikts\",\"osciln\",\"oscils\",\"oscilx\",\"out\",\"out32\",\"outc\",\"outch\",\"outh\",\"outiat\",\"outic\",\"outic14\",\"outipat\",\"outipb\",\"outipc\",\"outkat\",\"outkc\",\"outkc14\",\"outkpat\",\"outkpb\",\"outkpc\",\"outleta\",\"outletf\",\"outletk\",\"outletkid\",\"outletv\",\"outo\",\"outq\",\"outq1\",\"outq2\",\"outq3\",\"outq4\",\"outrg\",\"outs\",\"outs1\",\"outs2\",\"outvalue\",\"outx\",\"outz\",\"p\",\"p5gconnect\",\"p5gdata\",\"pan\",\"pan2\",\"pareq\",\"part2txt\",\"partials\",\"partikkel\",\"partikkelget\",\"partikkelset\",\"partikkelsync\",\"passign\",\"paulstretch\",\"pcauchy\",\"pchbend\",\"pchmidi\",\"pchmidib\",\"pchmidinn\",\"pchoct\",\"pchtom\",\"pconvolve\",\"pcount\",\"pdclip\",\"pdhalf\",\"pdhalfy\",\"peak\",\"pgmassign\",\"pgmchn\",\"phaser1\",\"phaser2\",\"phasor\",\"phasorbnk\",\"phs\",\"pindex\",\"pinker\",\"pinkish\",\"pitch\",\"pitchac\",\"pitchamdf\",\"planet\",\"platerev\",\"plltrack\",\"pluck\",\"poisson\",\"pol2rect\",\"polyaft\",\"polynomial\",\"port\",\"portk\",\"poscil\",\"poscil3\",\"pow\",\"powershape\",\"powoftwo\",\"pows\",\"prealloc\",\"prepiano\",\"print\",\"print_type\",\"printarray\",\"printf\",\"printf_i\",\"printk\",\"printk2\",\"printks\",\"printks2\",\"prints\",\"product\",\"pset\",\"ptable\",\"ptable3\",\"ptablei\",\"ptableiw\",\"ptablew\",\"ptrack\",\"puts\",\"pvadd\",\"pvbufread\",\"pvcross\",\"pvinterp\",\"pvoc\",\"pvread\",\"pvs2array\",\"pvs2tab\",\"pvsadsyn\",\"pvsanal\",\"pvsarp\",\"pvsbandp\",\"pvsbandr\",\"pvsbin\",\"pvsblur\",\"pvsbuffer\",\"pvsbufread\",\"pvsbufread2\",\"pvscale\",\"pvscent\",\"pvsceps\",\"pvscross\",\"pvsdemix\",\"pvsdiskin\",\"pvsdisp\",\"pvsenvftw\",\"pvsfilter\",\"pvsfread\",\"pvsfreeze\",\"pvsfromarray\",\"pvsftr\",\"pvsftw\",\"pvsfwrite\",\"pvsgain\",\"pvshift\",\"pvsifd\",\"pvsin\",\"pvsinfo\",\"pvsinit\",\"pvslock\",\"pvsmaska\",\"pvsmix\",\"pvsmooth\",\"pvsmorph\",\"pvsosc\",\"pvsout\",\"pvspitch\",\"pvstanal\",\"pvstencil\",\"pvstrace\",\"pvsvoc\",\"pvswarp\",\"pvsynth\",\"pwd\",\"pyassign\",\"pyassigni\",\"pyassignt\",\"pycall\",\"pycall1\",\"pycall1i\",\"pycall1t\",\"pycall2\",\"pycall2i\",\"pycall2t\",\"pycall3\",\"pycall3i\",\"pycall3t\",\"pycall4\",\"pycall4i\",\"pycall4t\",\"pycall5\",\"pycall5i\",\"pycall5t\",\"pycall6\",\"pycall6i\",\"pycall6t\",\"pycall7\",\"pycall7i\",\"pycall7t\",\"pycall8\",\"pycall8i\",\"pycall8t\",\"pycalli\",\"pycalln\",\"pycallni\",\"pycallt\",\"pyeval\",\"pyevali\",\"pyevalt\",\"pyexec\",\"pyexeci\",\"pyexect\",\"pyinit\",\"pylassign\",\"pylassigni\",\"pylassignt\",\"pylcall\",\"pylcall1\",\"pylcall1i\",\"pylcall1t\",\"pylcall2\",\"pylcall2i\",\"pylcall2t\",\"pylcall3\",\"pylcall3i\",\"pylcall3t\",\"pylcall4\",\"pylcall4i\",\"pylcall4t\",\"pylcall5\",\"pylcall5i\",\"pylcall5t\",\"pylcall6\",\"pylcall6i\",\"pylcall6t\",\"pylcall7\",\"pylcall7i\",\"pylcall7t\",\"pylcall8\",\"pylcall8i\",\"pylcall8t\",\"pylcalli\",\"pylcalln\",\"pylcallni\",\"pylcallt\",\"pyleval\",\"pylevali\",\"pylevalt\",\"pylexec\",\"pylexeci\",\"pylexect\",\"pylrun\",\"pylruni\",\"pylrunt\",\"pyrun\",\"pyruni\",\"pyrunt\",\"qinf\",\"qnan\",\"r2c\",\"rand\",\"randh\",\"randi\",\"random\",\"randomh\",\"randomi\",\"rbjeq\",\"readclock\",\"readf\",\"readfi\",\"readk\",\"readk2\",\"readk3\",\"readk4\",\"readks\",\"readscore\",\"readscratch\",\"rect2pol\",\"release\",\"remoteport\",\"remove\",\"repluck\",\"reshapearray\",\"reson\",\"resonk\",\"resonr\",\"resonx\",\"resonxk\",\"resony\",\"resonz\",\"resyn\",\"reverb\",\"reverb2\",\"reverbsc\",\"rewindscore\",\"rezzy\",\"rfft\",\"rifft\",\"rms\",\"rnd\",\"rnd31\",\"round\",\"rspline\",\"rtclock\",\"s16b14\",\"s32b14\",\"samphold\",\"sandpaper\",\"sc_lag\",\"sc_lagud\",\"sc_phasor\",\"sc_trig\",\"scale\",\"scalearray\",\"scanhammer\",\"scans\",\"scantable\",\"scanu\",\"schedkwhen\",\"schedkwhennamed\",\"schedule\",\"schedwhen\",\"scoreline\",\"scoreline_i\",\"seed\",\"sekere\",\"select\",\"semitone\",\"sense\",\"sensekey\",\"seqtime\",\"seqtime2\",\"serialBegin\",\"serialEnd\",\"serialFlush\",\"serialPrint\",\"serialRead\",\"serialWrite\",\"serialWrite_i\",\"setcol\",\"setctrl\",\"setksmps\",\"setrow\",\"setscorepos\",\"sfilist\",\"sfinstr\",\"sfinstr3\",\"sfinstr3m\",\"sfinstrm\",\"sfload\",\"sflooper\",\"sfpassign\",\"sfplay\",\"sfplay3\",\"sfplay3m\",\"sfplaym\",\"sfplist\",\"sfpreset\",\"shaker\",\"shiftin\",\"shiftout\",\"signum\",\"sin\",\"sinh\",\"sininv\",\"sinsyn\",\"sleighbells\",\"slicearray\",\"slicearray_i\",\"slider16\",\"slider16f\",\"slider16table\",\"slider16tablef\",\"slider32\",\"slider32f\",\"slider32table\",\"slider32tablef\",\"slider64\",\"slider64f\",\"slider64table\",\"slider64tablef\",\"slider8\",\"slider8f\",\"slider8table\",\"slider8tablef\",\"sliderKawai\",\"sndloop\",\"sndwarp\",\"sndwarpst\",\"sockrecv\",\"sockrecvs\",\"socksend\",\"socksends\",\"sorta\",\"sortd\",\"soundin\",\"space\",\"spat3d\",\"spat3di\",\"spat3dt\",\"spdist\",\"splitrig\",\"sprintf\",\"sprintfk\",\"spsend\",\"sqrt\",\"squinewave\",\"statevar\",\"stix\",\"strcat\",\"strcatk\",\"strchar\",\"strchark\",\"strcmp\",\"strcmpk\",\"strcpy\",\"strcpyk\",\"strecv\",\"streson\",\"strfromurl\",\"strget\",\"strindex\",\"strindexk\",\"strlen\",\"strlenk\",\"strlower\",\"strlowerk\",\"strrindex\",\"strrindexk\",\"strset\",\"strsub\",\"strsubk\",\"strtod\",\"strtodk\",\"strtol\",\"strtolk\",\"strupper\",\"strupperk\",\"stsend\",\"subinstr\",\"subinstrinit\",\"sum\",\"sumarray\",\"svfilter\",\"syncgrain\",\"syncloop\",\"syncphasor\",\"system\",\"system_i\",\"tab\",\"tab2array\",\"tab2pvs\",\"tab_i\",\"tabifd\",\"table\",\"table3\",\"table3kt\",\"tablecopy\",\"tablefilter\",\"tablefilteri\",\"tablegpw\",\"tablei\",\"tableicopy\",\"tableigpw\",\"tableikt\",\"tableimix\",\"tableiw\",\"tablekt\",\"tablemix\",\"tableng\",\"tablera\",\"tableseg\",\"tableshuffle\",\"tableshufflei\",\"tablew\",\"tablewa\",\"tablewkt\",\"tablexkt\",\"tablexseg\",\"tabmorph\",\"tabmorpha\",\"tabmorphak\",\"tabmorphi\",\"tabplay\",\"tabrec\",\"tabrowlin\",\"tabsum\",\"tabw\",\"tabw_i\",\"tambourine\",\"tan\",\"tanh\",\"taninv\",\"taninv2\",\"tbvcf\",\"tempest\",\"tempo\",\"temposcal\",\"tempoval\",\"timedseq\",\"timeinstk\",\"timeinsts\",\"timek\",\"times\",\"tival\",\"tlineto\",\"tone\",\"tonek\",\"tonex\",\"tradsyn\",\"trandom\",\"transeg\",\"transegb\",\"transegr\",\"trcross\",\"trfilter\",\"trhighest\",\"trigger\",\"trigseq\",\"trim\",\"trim_i\",\"trirand\",\"trlowest\",\"trmix\",\"trscale\",\"trshift\",\"trsplit\",\"turnoff\",\"turnoff2\",\"turnon\",\"tvconv\",\"unirand\",\"unwrap\",\"upsamp\",\"urandom\",\"urd\",\"vactrol\",\"vadd\",\"vadd_i\",\"vaddv\",\"vaddv_i\",\"vaget\",\"valpass\",\"vaset\",\"vbap\",\"vbapg\",\"vbapgmove\",\"vbaplsinit\",\"vbapmove\",\"vbapz\",\"vbapzmove\",\"vcella\",\"vco\",\"vco2\",\"vco2ft\",\"vco2ift\",\"vco2init\",\"vcomb\",\"vcopy\",\"vcopy_i\",\"vdel_k\",\"vdelay\",\"vdelay3\",\"vdelayk\",\"vdelayx\",\"vdelayxq\",\"vdelayxs\",\"vdelayxw\",\"vdelayxwq\",\"vdelayxws\",\"vdivv\",\"vdivv_i\",\"vecdelay\",\"veloc\",\"vexp\",\"vexp_i\",\"vexpseg\",\"vexpv\",\"vexpv_i\",\"vibes\",\"vibr\",\"vibrato\",\"vincr\",\"vlimit\",\"vlinseg\",\"vlowres\",\"vmap\",\"vmirror\",\"vmult\",\"vmult_i\",\"vmultv\",\"vmultv_i\",\"voice\",\"vosim\",\"vphaseseg\",\"vport\",\"vpow\",\"vpow_i\",\"vpowv\",\"vpowv_i\",\"vpvoc\",\"vrandh\",\"vrandi\",\"vsubv\",\"vsubv_i\",\"vtaba\",\"vtabi\",\"vtabk\",\"vtable1k\",\"vtablea\",\"vtablei\",\"vtablek\",\"vtablewa\",\"vtablewi\",\"vtablewk\",\"vtabwa\",\"vtabwi\",\"vtabwk\",\"vwrap\",\"waveset\",\"websocket\",\"weibull\",\"wgbow\",\"wgbowedbar\",\"wgbrass\",\"wgclar\",\"wgflute\",\"wgpluck\",\"wgpluck2\",\"wguide1\",\"wguide2\",\"wiiconnect\",\"wiidata\",\"wiirange\",\"wiisend\",\"window\",\"wrap\",\"writescratch\",\"wterrain\",\"xadsr\",\"xin\",\"xout\",\"xscanmap\",\"xscans\",\"xscansmap\",\"xscanu\",\"xtratim\",\"xyscale\",\"zacl\",\"zakinit\",\"zamod\",\"zar\",\"zarg\",\"zaw\",\"zawm\",\"zdf_1pole\",\"zdf_1pole_mode\",\"zdf_2pole\",\"zdf_2pole_mode\",\"zdf_ladder\",\"zfilter2\",\"zir\",\"ziw\",\"ziwm\",\"zkcl\",\"zkmod\",\"zkr\",\"zkw\",\"zkwm\"],t=[\"array\",\"bformdec\",\"bformenc\",\"copy2ftab\",\"copy2ttab\",\"hrtfer\",\"ktableseg\",\"lentab\",\"maxtab\",\"mintab\",\"pop\",\"pop_f\",\"push\",\"push_f\",\"scalet\",\"sndload\",\"soundout\",\"soundouts\",\"specaddm\",\"specdiff\",\"specdisp\",\"specfilt\",\"spechist\",\"specptrk\",\"specscal\",\"specsum\",\"spectrum\",\"stack\",\"sumtab\",\"tabgen\",\"tabmap\",\"tabmap_i\",\"tabslice\",\"tb0\",\"tb0_init\",\"tb1\",\"tb10\",\"tb10_init\",\"tb11\",\"tb11_init\",\"tb12\",\"tb12_init\",\"tb13\",\"tb13_init\",\"tb14\",\"tb14_init\",\"tb15\",\"tb15_init\",\"tb1_init\",\"tb2\",\"tb2_init\",\"tb3\",\"tb3_init\",\"tb4\",\"tb4_init\",\"tb5\",\"tb5_init\",\"tb6\",\"tb6_init\",\"tb7\",\"tb7_init\",\"tb8\",\"tb8_init\",\"tb9\",\"tb9_init\",\"vbap16\",\"vbap4\",\"vbap4move\",\"vbap8\",\"vbap8move\",\"xyin\"];e=r.arrayToMap(e),t=r.arrayToMap(t),this.lineContinuations=[{token:\"constant.character.escape.line-continuation.csound\",regex:/\\\\$/},this.pushRule({token:\"constant.character.escape.line-continuation.csound\",regex:/\\\\/,next:\"line continuation\"})],this.comments.push(this.lineContinuations),this.quotedStringContents.push(this.lineContinuations,{token:\"invalid.illegal\",regex:/[^\"\\\\]*$/});var n=this.$rules.start;n.splice(1,0,{token:[\"text.csound\",\"entity.name.label.csound\",\"entity.punctuation.label.csound\",\"text.csound\"],regex:/^([ \\t]*)(\\w+)(:)([ \\t]+|$)/}),n.push(this.pushRule({token:\"keyword.function.csound\",regex:/\\binstr\\b/,next:\"instrument numbers and identifiers\"}),this.pushRule({token:\"keyword.function.csound\",regex:/\\bopcode\\b/,next:\"after opcode keyword\"}),{token:\"keyword.other.csound\",regex:/\\bend(?:in|op)\\b/},{token:\"variable.language.csound\",regex:/\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/},this.numbers,{token:\"keyword.operator.csound\",regex:\"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~\\u00ac]|[=!+\\\\-*/^%&|<>#?:]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"braced string\"}),{token:\"keyword.control.csound\",regex:/\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/},this.pushRule({token:\"keyword.control.csound\",regex:/\\b[ik]?goto\\b/,next:\"goto before label\"}),this.pushRule({token:\"keyword.control.csound\",regex:/\\b(?:r(?:einit|igoto)|tigoto)\\b/,next:\"goto before label\"}),this.pushRule({token:\"keyword.control.csound\",regex:/\\bc(?:g|in?|k|nk?)goto\\b/,next:[\"goto before label\",\"goto before argument\"]}),this.pushRule({token:\"keyword.control.csound\",regex:/\\btimout\\b/,next:[\"goto before label\",\"goto before argument\",\"goto before argument\"]}),this.pushRule({token:\"keyword.control.csound\",regex:/\\bloop_[gl][et]\\b/,next:[\"goto before label\",\"goto before argument\",\"goto before argument\",\"goto before argument\"]}),this.pushRule({token:\"support.function.csound\",regex:/\\b(?:readscore|scoreline(?:_i)?)\\b/,next:\"Csound score opcode\"}),this.pushRule({token:\"support.function.csound\",regex:/\\bpyl?run[it]?\\b(?!$)/,next:\"Python opcode\"}),this.pushRule({token:\"support.function.csound\",regex:/\\blua_(?:exec|opdef)\\b(?!$)/,next:\"Lua opcode\"}),{token:\"support.variable.csound\",regex:/\\bp\\d+\\b/},{regex:/\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/,onMatch:function(n,r,i,s){var o=n.split(this.splitRegex),u=o[1],a;return e.hasOwnProperty(u)?a=\"support.function.csound\":t.hasOwnProperty(u)&&(a=\"invalid.deprecated.csound\"),a?o[2]?[{type:a,value:u},{type:\"punctuation.type-annotation.csound\",value:o[2]},{type:\"type-annotation.storage.type.csound\",value:o[3]}]:a:\"text.csound\"}}),this.$rules[\"macro parameter value list\"].splice(2,0,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"macro parameter value braced string\"}),this.addRules({\"macro parameter value braced string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/}}/,next:\"macro parameter value list\"},{defaultToken:\"string.braced.csound\"}],\"instrument numbers and identifiers\":[this.comments,{token:\"entity.name.function.csound\",regex:/\\d+|[A-Z_a-z]\\w*/},this.popRule({token:\"empty\",regex:/$/})],\"after opcode keyword\":[this.comments,this.popRule({token:\"empty\",regex:/$/}),this.popRule({token:\"entity.name.function.opcode.csound\",regex:/[A-Z_a-z]\\w*/,next:\"opcode type signatures\"})],\"opcode type signatures\":[this.comments,this.popRule({token:\"empty\",regex:/$/}),{token:\"storage.type.csound\",regex:/\\b(?:0|[afijkKoOpPStV\\[\\]]+)/}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"braced string\":[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/}}/}),this.bracedStringContents,{defaultToken:\"string.braced.csound\"}],\"goto before argument\":[this.popRule({token:\"text.csound\",regex:/,/}),n],\"goto before label\":[{token:\"text.csound\",regex:/\\s+/},this.comments,this.popRule({token:\"entity.name.label.csound\",regex:/\\w+/}),this.popRule({token:\"empty\",regex:/(?!\\w)/})],\"Csound score opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"csound-score-start\"},this.popRule({token:\"empty\",regex:/$/})],\"Python opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"python-start\"},this.popRule({token:\"empty\",regex:/$/})],\"Lua opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"lua-start\"},this.popRule({token:\"empty\",regex:/$/})],\"line continuation\":[this.popRule({token:\"empty\",regex:/$/}),this.semicolonComments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}]});var i=[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/}}/})];this.embedRules(o,\"csound-score-\",i),this.embedRules(a,\"python-\",i),this.embedRules(u,\"lua-\",i),this.normalizeRules()};i.inherits(f,s),t.CsoundOrchestraHighlightRules=f}),define(\"ace/mode/csound_orchestra\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_orchestra_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"/*\",end:\"*/\"}}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-csound_score.js",
    "content": "define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.semicolonComments={token:\"comment.line.semicolon.csound\",regex:\";.*$\"},this.comments=[{token:\"punctuation.definition.comment.begin.csound\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.end.csound\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.csound\"}]},{token:\"comment.line.double-slash.csound\",regex:\"//.*$\"},this.semicolonComments],this.macroUses=[{token:[\"entity.name.function.preprocessor.csound\",\"punctuation.definition.macro-parameter-value-list.begin.csound\"],regex:/(\\$[A-Z_a-z]\\w*\\.?)(\\()/,next:\"macro parameter value list\"},{token:\"entity.name.function.preprocessor.csound\",regex:/\\$[A-Z_a-z]\\w*(?:\\.|\\b)/}],this.numbers=[{token:\"constant.numeric.float.csound\",regex:/(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/},{token:[\"storage.type.number.csound\",\"constant.numeric.integer.hexadecimal.csound\"],regex:/(0[Xx])([0-9A-Fa-f]+)/},{token:\"constant.numeric.integer.decimal.csound\",regex:/\\d+/}],this.bracedStringContents=[{token:\"constant.character.escape.csound\",regex:/\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/},{token:\"constant.character.placeholder.csound\",regex:/%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/},{token:\"constant.character.escape.csound\",regex:/%%/}],this.quotedStringContents=[this.macroUses,this.bracedStringContents];var e=[this.comments,{token:\"keyword.preprocessor.csound\",regex:/#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/},{token:\"keyword.preprocessor.csound\",regex:/#include/,push:[this.comments,{token:\"string.csound\",regex:/([^ \\t])(?:.*?\\1)/,next:\"pop\"}]},{token:\"keyword.preprocessor.csound\",regex:/#[ \\t]*define/,next:\"define directive\"},{token:\"keyword.preprocessor.csound\",regex:/#(?:ifn?def|undef)\\b/,next:\"macro directive\"},this.macroUses];this.$rules={start:e,\"define directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.begin.csound\",regex:/\\(/,next:\"macro parameter name list\"},{token:\"punctuation.definition.macro.begin.csound\",regex:/#/,next:\"macro body\"}],\"macro parameter name list\":[{token:\"variable.parameter.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.end.csound\",regex:/\\)/,next:\"define directive\"}],\"macro body\":[{token:\"constant.character.escape.csound\",regex:/\\\\#/},{token:\"punctuation.definition.macro.end.csound\",regex:/#/,next:\"start\"},e],\"macro directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"macro parameter value list\":[{token:\"punctuation.definition.macro-parameter-value-list.end.csound\",regex:/\\)/,next:\"start\"},{token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"macro parameter value quoted string\"},this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),{token:\"punctuation.macro-parameter-value-separator.csound\",regex:\"[#']\"}],\"macro parameter value quoted string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/\"/,next:\"macro parameter value list\"},this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"macro parameter value parenthetical\":[{token:\"constant.character.escape.csound\",regex:/\\\\\\)/},this.popRule({token:\"punctuation.macro-parameter-value-parenthetical.end.csound\",regex:/\\)/}),this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),e]}};r.inherits(s,i),function(){this.pushRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){r.length===0&&r.push(n);if(Array.isArray(e.next))for(var s=0;s<e.next.length;s++)r.push(e.next[s]);else r.push(e.next);return this.next=r[r.length-1],e.token},get next(){return Array.isArray(e.next)?e.next[e.next.length-1]:e.next},set next(t){if(Array.isArray(e.next)){var n=e.next[e.next.length-1],r=n.length-1,i=t.length-1;if(i>r)while(r>=0&&i>=0){if(n.charAt(r)!==t.charAt(i)){var s=t.substr(0,i);for(var o=0;o<e.next.length;o++)e.next[o]=s+e.next[o];break}r--,i--}}else e.next=t},get token(){return e.token}}},this.popRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){return r.pop(),e.next?(r.push(e.next),this.next=r[r.length-1]):this.next=r.length>1?r[r.length-1]:r.pop(),e.token}}}}.call(s.prototype),t.CsoundPreprocessorHighlightRules=s}),define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,s=function(){i.call(this),this.quotedStringContents.push({token:\"invalid.illegal.csound-score\",regex:/[^\"]*$/});var e=this.$rules.start;e.push({token:\"keyword.control.csound-score\",regex:/[abCdefiqstvxy]/},{token:\"invalid.illegal.csound-score\",regex:/w/},{token:\"constant.numeric.language.csound-score\",regex:/z/},{token:[\"keyword.control.csound-score\",\"constant.numeric.integer.decimal.csound-score\"],regex:/([nNpP][pP])(\\d+)/},{token:\"keyword.other.csound-score\",regex:/[mn]/,push:[{token:\"empty\",regex:/$/,next:\"pop\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/}]},{token:\"keyword.preprocessor.csound-score\",regex:/r\\b/,next:\"repeat section\"},this.numbers,{token:\"keyword.operator.csound-score\",regex:\"[!+\\\\-*/^%&|<>#~.]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound-score\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.braced-loop.begin.csound-score\",regex:/{/,next:\"loop after left brace\"})),this.addRules({\"repeat section\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"repeat section before label\"}],\"repeat section before label\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound-score\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound-score\"}],\"loop after left brace\":[this.popRule({token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"loop after repeat count\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after repeat count\":[this.popRule({token:\"entity.name.function.preprocessor.csound-score\",regex:/[A-Z_a-z]\\w*\\b/,next:\"loop after macro name\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after macro name\":[e,this.popRule({token:\"punctuation.braced-loop.end.csound-score\",regex:/}/})]}),this.normalizeRules()};r.inherits(s,i),t.CsoundScoreHighlightRules=s}),define(\"ace/mode/csound_score\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_score_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"/*\",end:\"*/\"}}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-csp.js",
    "content": "define(\"ace/mode/csp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"constant.language\":\"child-src|connect-src|default-src|font-src|frame-src|img-src|manifest-src|media-src|object-src|script-src|style-src|worker-src|base-uri|plugin-types|sandbox|disown-opener|form-action|frame-ancestors|report-uri|report-to|upgrade-insecure-requests|block-all-mixed-content|require-sri-for|reflected-xss|referrer|policy-uri\",variable:\"'none'|'self'|'unsafe-inline'|'unsafe-eval'|'strict-dynamic'|'unsafe-hashed-attributes'\"},\"identifier\",!0);this.$rules={start:[{token:\"string.link\",regex:/https?:[^;\\s]*/},{token:\"operator.punctuation\",regex:/;/},{token:e,regex:/[^\\s;]+/}]}};r.inherits(s,i),t.CspHighlightRules=s}),define(\"ace/mode/csp\",[\"require\",\"exports\",\"module\",\"ace/mode/text\",\"ace/mode/csp_highlight_rules\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./text\").Mode,i=e(\"./csp_highlight_rules\").CspHighlightRules,s=e(\"../lib/oop\"),o=function(){this.HighlightRules=i};s.inherits(o,r),function(){this.$id=\"ace/mode/csp\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-css.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c});                (function() {\n                    window.require([\"ace/mode/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-curly.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/curly_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=function(){i.call(this),this.$rules.start.unshift({token:\"variable\",regex:\"{{\",push:\"curly-start\"}),this.$rules[\"curly-start\"]=[{token:\"variable\",regex:\"}}\",next:\"pop\"}],this.normalizeRules()};r.inherits(s,i),t.CurlyHighlightRules=s}),define(\"ace/mode/curly\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/html\",\"ace/mode/curly_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,o=e(\"./folding/html\").FoldMode,u=e(\"./curly_highlight_rules\").CurlyHighlightRules,a=function(){i.call(this),this.HighlightRules=u,this.$outdent=new s,this.foldingRules=new o};r.inherits(a,i),function(){this.$id=\"ace/mode/curly\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-d.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/d_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"this|super|import|module|body|mixin|__traits|invariant|alias|asm|delete|typeof|typeid|sizeof|cast|new|in|is|typedef|__vector|__parameters\",t=\"break|case|continue|default|do|else|for|foreach|foreach_reverse|goto|if|return|switch|while|catch|try|throw|finally|version|assert|unittest|with\",n=\"auto|bool|char|dchar|wchar|byte|ubyte|float|double|real|cfloat|creal|cdouble|cent|ifloat|ireal|idouble|int|long|short|void|uint|ulong|ushort|ucent|function|delegate|string|wstring|dstring|size_t|ptrdiff_t|hash_t|Object\",r=\"abstract|align|debug|deprecated|export|extern|const|final|in|inout|out|ref|immutable|lazy|nothrow|override|package|pragma|private|protected|public|pure|scope|shared|__gshared|synchronized|static|volatile\",s=\"class|struct|union|template|interface|enum|macro\",o={token:\"constant.language.escape\",regex:\"\\\\\\\\(?:(?:x[0-9A-F]{2})|(?:[0-7]{1,3})|(?:['\\\"\\\\?0abfnrtv\\\\\\\\])|(?:u[0-9a-fA-F]{4})|(?:U[0-9a-fA-F]{8}))\"},u=\"null|true|false|__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__|__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__\",a=\"/|/\\\\=|&|&\\\\=|&&|\\\\|\\\\|\\\\=|\\\\|\\\\||\\\\-|\\\\-\\\\=|\\\\-\\\\-|\\\\+|\\\\+\\\\=|\\\\+\\\\+|\\\\<|\\\\<\\\\=|\\\\<\\\\<|\\\\<\\\\<\\\\=|\\\\<\\\\>|\\\\<\\\\>\\\\=|\\\\>|\\\\>\\\\=|\\\\>\\\\>\\\\=|\\\\>\\\\>\\\\>\\\\=|\\\\>\\\\>|\\\\>\\\\>\\\\>|\\\\!|\\\\!\\\\=|\\\\!\\\\<\\\\>|\\\\!\\\\<\\\\>\\\\=|\\\\!\\\\<|\\\\!\\\\<\\\\=|\\\\!\\\\>|\\\\!\\\\>\\\\=|\\\\?|\\\\$|\\\\=|\\\\=\\\\=|\\\\*|\\\\*\\\\=|%|%\\\\=|\\\\^|\\\\^\\\\=|\\\\^\\\\^|\\\\^\\\\^\\\\=|~|~\\\\=|\\\\=\\\\>|#\",f=this.$keywords=this.createKeywordMapper({\"keyword.modifier\":r,\"keyword.control\":t,\"keyword.type\":n,keyword:e,\"keyword.storage\":s,punctation:\"\\\\.|\\\\,|;|\\\\.\\\\.|\\\\.\\\\.\\\\.\",\"keyword.operator\":a,\"constant.language\":u},\"identifier\"),l=\"[a-zA-Z_\\u00a1-\\uffff][a-zA-Z\\\\d_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"star-comment\"},{token:\"comment.shebang\",regex:\"^\\\\s*#!.*\"},{token:\"comment\",regex:\"\\\\/\\\\+\",next:\"plus-comment\"},{onMatch:function(e,t,n){return n.unshift(this.next,e.substr(2)),\"string\"},regex:'q\"(?:[\\\\[\\\\(\\\\{\\\\<]+)',next:\"operator-heredoc-string\"},{onMatch:function(e,t,n){return n.unshift(this.next,e.substr(2)),\"string\"},regex:'q\"(?:[a-zA-Z_]+)$',next:\"identifier-heredoc-string\"},{token:\"string\",regex:'[xr]?\"',next:\"quote-string\"},{token:\"string\",regex:\"[xr]?`\",next:\"backtick-string\"},{token:\"string\",regex:\"[xr]?['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?['][cdw]?\"},{token:[\"keyword\",\"text\",\"paren.lparen\"],regex:/(asm)(\\s*)({)/,next:\"d-asm\"},{token:[\"keyword\",\"text\",\"paren.lparen\",\"constant.language\"],regex:\"(__traits)(\\\\s*)(\\\\()(\"+l+\")\"},{token:[\"keyword\",\"text\",\"variable.module\"],regex:\"(import|module)(\\\\s+)((?:\"+l+\"\\\\.?)*)\"},{token:[\"keyword.storage\",\"text\",\"entity.name.type\"],regex:\"(\"+s+\")(\\\\s*)(\"+l+\")\"},{token:[\"keyword\",\"text\",\"variable.storage\",\"text\"],regex:\"(alias|typedef)(\\\\s*)(\"+l+\")(\\\\s*)\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F_]+(l|ul|u|f|F|L|U|UL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d[\\\\d_]*(?:(?:\\\\.[\\\\d_]*)?(?:[eE][+-]?[\\\\d_]+)?)?(l|ul|u|f|F|L|U|UL)?\\\\b\"},{token:\"entity.other.attribute-name\",regex:\"@\"+l},{token:f,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:a},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.|\\\\:\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],\"star-comment\":[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],\"plus-comment\":[{token:\"comment\",regex:\"\\\\+\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],\"quote-string\":[o,{token:\"string\",regex:'\"[cdw]?',next:\"start\"},{defaultToken:\"string\"}],\"backtick-string\":[o,{token:\"string\",regex:\"`[cdw]?\",next:\"start\"},{defaultToken:\"string\"}],\"operator-heredoc-string\":[{onMatch:function(e,t,n){e=e.substring(e.length-2,e.length-1);var r={\">\":\"<\",\"]\":\"[\",\")\":\"(\",\"}\":\"{\"};return Object.keys(r).indexOf(e)!=-1&&(e=r[e]),e!=n[1]?\"string\":(n.shift(),n.shift(),\"string\")},regex:'(?:[\\\\]\\\\)}>]+)\"',next:\"start\"},{token:\"string\",regex:\"[^\\\\]\\\\)}>]+\"}],\"identifier-heredoc-string\":[{onMatch:function(e,t,n){return e=e.substring(0,e.length-1),e!=n[1]?\"string\":(n.shift(),n.shift(),\"string\")},regex:'^(?:[A-Za-z_][a-zA-Z0-9]+)\"',next:\"start\"},{token:\"string\",regex:\"[^\\\\]\\\\)}>]+\"}],\"d-asm\":[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"keyword.instruction\",regex:\"[a-zA-Z]+\",next:\"d-asm-instruction\"},{token:\"text\",regex:\"\\\\s+\"}],\"d-asm-instruction\":[{token:\"constant.language\",regex:/AL|AH|AX|EAX|BL|BH|BX|EBX|CL|CH|CX|ECX|DL|DH|DX|EDX|BP|EBP|SP|ESP|DI|EDI|SI|ESI/i},{token:\"identifier\",regex:\"[a-zA-Z]+\"},{token:\"string\",regex:'\".*\"'},{token:\"comment\",regex:\"//.*$\"},{token:\"constant.numeric\",regex:\"[0-9.xA-F]+\"},{token:\"punctuation.operator\",regex:\"\\\\,\"},{token:\"punctuation.operator\",regex:\";\",next:\"d-asm\"},{token:\"text\",regex:\"\\\\s+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};o.metaData={comment:\"D language\",fileTypes:[\"d\",\"di\"],firstLineMatch:\"^#!.*\\\\b[glr]?dmd\\\\b.\",foldingStartMarker:\"(?x)/\\\\*\\\\*(?!\\\\*)|^(?![^{]*?//|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|//|/\\\\*(?!.*?\\\\*/.*\\\\S))\",foldingStopMarker:\"(?<!\\\\*)\\\\*\\\\*/|^\\\\s*\\\\}\",keyEquivalent:\"^~D\",name:\"D\",scopeName:\"source.d\"},r.inherits(o,s),t.DHighlightRules=o}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/d\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/d_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./d_highlight_rules\").DHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/d\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-dart.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/dart_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"true|false|null\",t=\"this|super\",n=\"try|catch|finally|throw|rethrow|assert|break|case|continue|default|do|else|for|if|in|return|switch|while|new|deferred|async|await\",r=\"abstract|class|extends|external|factory|implements|get|native|operator|set|typedef|with|enum\",s=\"static|final|const\",o=\"void|bool|num|int|double|dynamic|var|String\",u=this.createKeywordMapper({\"constant.language.dart\":e,\"variable.language.dart\":t,\"keyword.control.dart\":n,\"keyword.declaration.dart\":r,\"storage.modifier.dart\":s,\"storage.type.primitive.dart\":o},\"identifier\"),a=[{token:\"constant.language.escape\",regex:/\\\\./},{token:\"text\",regex:/\\$(?:\\w+|{[^\"'}]+})?/},{defaultToken:\"string\"}];this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:[\"meta.preprocessor.script.dart\"],regex:\"^(#!.*)$\"},{token:\"keyword.other.import.dart\",regex:\"(?:\\\\b)(?:library|import|export|part|of|show|hide)(?:\\\\b)\"},{token:[\"keyword.other.import.dart\",\"text\"],regex:\"(?:\\\\b)(prefix)(\\\\s*:)\"},{regex:\"\\\\bas\\\\b\",token:\"keyword.cast.dart\"},{regex:\"\\\\?|:\",token:\"keyword.control.ternary.dart\"},{regex:\"(?:\\\\b)(is\\\\!?)(?:\\\\b)\",token:[\"keyword.operator.dart\"]},{regex:\"(<<|>>>?|~|\\\\^|\\\\||&)\",token:[\"keyword.operator.bitwise.dart\"]},{regex:\"((?:&|\\\\^|\\\\||<<|>>>?)=)\",token:[\"keyword.operator.assignment.bitwise.dart\"]},{regex:\"(===?|!==?|<=?|>=?)\",token:[\"keyword.operator.comparison.dart\"]},{regex:\"((?:[+*/%-]|\\\\~)=)\",token:[\"keyword.operator.assignment.arithmetic.dart\"]},{regex:\"=\",token:\"keyword.operator.assignment.dart\"},{token:\"string\",regex:\"'''\",next:\"qdoc\"},{token:\"string\",regex:'\"\"\"',next:\"qqdoc\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{regex:\"(\\\\-\\\\-|\\\\+\\\\+)\",token:[\"keyword.operator.increment-decrement.dart\"]},{regex:\"(\\\\-|\\\\+|\\\\*|\\\\/|\\\\~\\\\/|%)\",token:[\"keyword.operator.arithmetic.dart\"]},{regex:\"(!|&&|\\\\|\\\\|)\",token:[\"keyword.operator.logical.dart\"]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qdoc:[{token:\"string\",regex:\"'''\",next:\"start\"}].concat(a),qqdoc:[{token:\"string\",regex:'\"\"\"',next:\"start\"}].concat(a),qstring:[{token:\"string\",regex:\"'|$\",next:\"start\"}].concat(a),qqstring:[{token:\"string\",regex:'\"|$',next:\"start\"}].concat(a)},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.DartHighlightRules=o}),define(\"ace/mode/dart\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/dart_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./dart_highlight_rules\").DartHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/dart\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-diff.js",
    "content": "define(\"ace/mode/diff_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{regex:\"^(?:\\\\*{15}|={67}|-{3}|\\\\+{3})$\",token:\"punctuation.definition.separator.diff\",name:\"keyword\"},{regex:\"^(@@)(\\\\s*.+?\\\\s*)(@@)(.*)$\",token:[\"constant\",\"constant.numeric\",\"constant\",\"comment.doc.tag\"]},{regex:\"^(\\\\d+)([,\\\\d]+)(a|d|c)(\\\\d+)([,\\\\d]+)(.*)$\",token:[\"constant.numeric\",\"punctuation.definition.range.diff\",\"constant.function\",\"constant.numeric\",\"punctuation.definition.range.diff\",\"invalid\"],name:\"meta.\"},{regex:\"^(\\\\-{3}|\\\\+{3}|\\\\*{3})( .+)$\",token:[\"constant.numeric\",\"meta.tag\"]},{regex:\"^([!+>])(.*?)(\\\\s*)$\",token:[\"support.constant\",\"text\",\"invalid\"]},{regex:\"^([<\\\\-])(.*?)(\\\\s*)$\",token:[\"support.function\",\"string\",\"invalid\"]},{regex:\"^(diff)(\\\\s+--\\\\w+)?(.+?)( .+)?$\",token:[\"variable\",\"variable\",\"keyword\",\"variable\"]},{regex:\"^Index.+$\",token:\"variable\"},{regex:\"^\\\\s+$\",token:\"text\"},{regex:\"\\\\s*$\",token:\"invalid\"},{defaultToken:\"invisible\",caseInsensitive:!0}]}};r.inherits(s,i),t.DiffHighlightRules=s}),define(\"ace/mode/folding/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(e,t){this.regExpList=e,this.flag=t,this.foldingStartMarker=RegExp(\"^(\"+e.join(\"|\")+\")\",this.flag)};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i={row:n,column:r.length},o=this.regExpList;for(var u=1;u<=o.length;u++){var a=RegExp(\"^(\"+o.slice(0,u).join(\"|\")+\")\",this.flag);if(a.test(r))break}for(var f=e.getLength();++n<f;){r=e.getLine(n);if(a.test(r))break}if(n==i.row+1)return;return new s(i.row,i.column,n-1,r.length)}}.call(o.prototype)}),define(\"ace/mode/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/diff_highlight_rules\",\"ace/mode/folding/diff\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./diff_highlight_rules\").DiffHighlightRules,o=e(\"./folding/diff\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o([\"diff\",\"@@|\\\\*{5}\"],\"i\")};r.inherits(u,i),function(){this.$id=\"ace/mode/diff\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-django.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/django\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){this.$rules={start:[{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant\",regex:\"[0-9]+\"},{token:\"variable\",regex:\"[-_a-zA-Z0-9:]+\"}],tag:[{token:\"entity.name.function\",regex:\"[a-zA-Z][_a-zA-Z0-9]*\",next:\"start\"}]}};r.inherits(u,o);var a=function(){this.$rules=(new s).getRules();for(var e in this.$rules)this.$rules[e].unshift({token:\"comment.line\",regex:\"\\\\{#.*?#\\\\}\"},{token:\"comment.block\",regex:\"\\\\{\\\\%\\\\s*comment\\\\s*\\\\%\\\\}\",merge:!0,next:\"django-comment\"},{token:\"constant.language\",regex:\"\\\\{\\\\{\",next:\"django-start\"},{token:\"constant.language\",regex:\"\\\\{\\\\%\",next:\"django-tag\"}),this.embedRules(u,\"django-\",[{token:\"comment.block\",regex:\"\\\\{\\\\%\\\\s*endcomment\\\\s*\\\\%\\\\}\",merge:!0,next:\"start\"},{token:\"constant.language\",regex:\"\\\\%\\\\}\",next:\"start\"},{token:\"constant.language\",regex:\"\\\\}\\\\}\",next:\"start\"}])};r.inherits(a,s);var f=function(){i.call(this),this.HighlightRules=a};r.inherits(f,i),function(){this.$id=\"ace/mode/django\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-dockerfile.js",
    "content": "define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f}),define(\"ace/mode/dockerfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./sh_highlight_rules\").ShHighlightRules,s=function(){i.call(this);var e=this.$rules.start;for(var t=0;t<e.length;t++)if(e[t].token==\"variable.language\"){e.splice(t,0,{token:\"constant.language\",regex:\"(?:^(?:FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|COPY|LABEL)\\\\b)\",caseInsensitive:!0});break}};r.inherits(s,i),t.DockerfileHighlightRules=s}),define(\"ace/mode/dockerfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh\",\"ace/mode/dockerfile_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./sh\").Mode,s=e(\"./dockerfile_highlight_rules\").DockerfileHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/dockerfile\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-dot.js",
    "content": "define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/dot_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,u=function(){var e=i.arrayToMap(\"strict|node|edge|graph|digraph|subgraph\".split(\"|\")),t=i.arrayToMap(\"damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z\".split(\"|\"));this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},{token:\"comment\",regex:/#.*$/},{token:\"comment\",merge:!0,regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/[+\\-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?\\b/},{token:\"keyword.operator\",regex:/\\+|=|\\->/},{token:\"punctuation.operator\",regex:/,|;/},{token:\"paren.lparen\",regex:/[\\[{]/},{token:\"paren.rparen\",regex:/[\\]}]/},{token:\"comment\",regex:/^#!.*$/},{token:function(n){return e.hasOwnProperty(n.toLowerCase())?\"keyword\":t.hasOwnProperty(n.toLowerCase())?\"variable\":\"text\"},regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'[^\"\\\\\\\\]+',merge:!0},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\",merge:!0},{token:\"string\",regex:'\"|$',next:\"start\",merge:!0}],qstring:[{token:\"string\",regex:\"[^'\\\\\\\\]+\",merge:!0},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\",merge:!0},{token:\"string\",regex:\"'|$\",next:\"start\",merge:!0}]}};r.inherits(u,s),t.DotHighlightRules=u}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/dot\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matching_brace_outdent\",\"ace/mode/dot_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,o=e(\"./dot_highlight_rules\").DotHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=o,this.$outdent=new s,this.foldingRules=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=[\"//\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/dot\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-drools.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|var\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{regex:\"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",token:\"keyword\",next:[{regex:\"{\",token:\"paren.lparen\",next:[{regex:\"}\",token:\"paren.rparen\",next:\"start\"},{regex:\"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",token:\"keyword\"}]},{token:\"text\",regex:\"\\\\s+\"},{token:\"identifier\",regex:\"\\\\w+\"},{token:\"punctuation.operator\",regex:\".\"},{token:\"text\",regex:\"\\\\s+\"},{regex:\"\",next:\"start\"}]},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.JavaHighlightRules=o}),define(\"ace/mode/drools_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/java_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./java_highlight_rules\").JavaHighlightRules,o=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,u=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][\\\\.a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",f=function(){var e=\"date|effective|expires|lock|on|active|no|loop|auto|focus|activation|group|agenda|ruleflow|duration|timer|calendars|refract|direct|dialect|salience|enabled|attributes|extends|template|function|contains|matches|eval|excludes|soundslike|memberof|not|in|or|and|exists|forall|over|from|entry|point|accumulate|acc|collect|action|reverse|result|end|init|instanceof|extends|super|boolean|char|byte|short|int|long|float|double|this|void|class|new|case|final|if|else|for|while|do|default|try|catch|finally|switch|synchronized|return|throw|break|continue|assert|modify|static|public|protected|private|abstract|native|transient|volatile|strictfp|throws|interface|enum|implements|type|window|trait|no-loop|str\",t=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",n=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":\"null\",\"support.class\":t,\"support.function\":\"retract|update|modify|insert\"},\"identifier\"),r=function(){return[{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"}]},i=function(e){return[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},o.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:e},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"}]},f=function(e){return[{token:\"comment.block\",regex:\"\\\\*\\\\/\",next:e},{defaultToken:\"comment.block\"}]},l=function(){return[{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}]};this.$rules={start:[].concat(i(\"block.comment\"),[{token:\"entity.name.type\",regex:\"@[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:[\"keyword\",\"text\",\"entity.name.type\"],regex:\"(package)(\\\\s+)(\"+a+\")\"},{token:[\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],regex:\"(import)(\\\\s+)(function)(\\\\s+)(\"+a+\")\"},{token:[\"keyword\",\"text\",\"entity.name.type\"],regex:\"(import)(\\\\s+)(\"+a+\")\"},{token:[\"keyword\",\"text\",\"entity.name.type\",\"text\",\"variable\"],regex:\"(global)(\\\\s+)(\"+a+\")(\\\\s+)(\"+u+\")\"},{token:[\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],regex:\"(declare)(\\\\s+)(trait)(\\\\s+)(\"+u+\")\"},{token:[\"keyword\",\"text\",\"entity.name.type\"],regex:\"(declare)(\\\\s+)(\"+u+\")\"},{token:[\"keyword\",\"text\",\"entity.name.type\"],regex:\"(extends)(\\\\s+)(\"+a+\")\"},{token:[\"keyword\",\"text\"],regex:\"(rule)(\\\\s+)\",next:\"asset.name\"}],r(),[{token:[\"variable.other\",\"text\",\"text\"],regex:\"(\"+u+\")(\\\\s*)(:)\"},{token:[\"keyword\",\"text\"],regex:\"(query)(\\\\s+)\",next:\"asset.name\"},{token:[\"keyword\",\"text\"],regex:\"(when)(\\\\s*)\"},{token:[\"keyword\",\"text\"],regex:\"(then)(\\\\s*)\",next:\"java-start\"},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/}],l()),\"block.comment\":f(\"start\"),\"asset.name\":[{token:\"entity.name\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"entity.name\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"entity.name\",regex:u},{regex:\"\",token:\"empty\",next:\"start\"}]},this.embedRules(o,\"doc-\",[o.getEndRule(\"start\")]),this.embedRules(s,\"java-\",[{token:\"support.function\",regex:\"\\\\b(insert|modify|retract|update)\\\\b\"},{token:\"keyword\",regex:\"\\\\bend\\\\b\",next:\"start\"}])};r.inherits(f,i),t.DroolsHighlightRules=f}),define(\"ace/mode/folding/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,s),function(){this.foldingStartMarker=/\\b(rule|declare|query|when|then)\\b/,this.foldingStopMarker=/\\bend\\b/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),s=r.match(this.foldingStartMarker);if(s){var u=s.index;if(s[1]){var a={row:n,column:r.length},f=new o(e,a.row,a.column),l=\"end\",c=f.getCurrentToken();c.value==\"when\"&&(l=\"then\");while(c){if(c.value==l)return i.fromPoints(a,{row:f.getCurrentTokenRow(),column:f.getCurrentTokenColumn()});c=f.stepForward()}}}}}.call(u.prototype)}),define(\"ace/mode/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/drools_highlight_rules\",\"ace/mode/folding/drools\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./drools_highlight_rules\").DroolsHighlightRules,o=e(\"./folding/drools\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/drools\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-edifact.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/edifact_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"UNH\",t=\"ADR|AGR|AJT|ALC|ALI|APP|APR|ARD|ARR|ASI|ATT|AUT|BAS|BGM|BII|BUS|CAV|CCD|CCI|CDI|CDS|CDV|CED|CIN|CLA|CLI|CMP|CNI|CNT|COD|COM|COT|CPI|CPS|CPT|CST|CTA|CUX|DAM|DFN|DGS|DII|DIM|DLI|DLM|DMS|DOC|DRD|DSG|DSI|DTM|EDT|EFI|ELM|ELU|ELV|EMP|EQA|EQD|EQN|ERC|ERP|EVE|FCA|FII|FNS|FNT|FOR|FSQ|FTX|GDS|GEI|GID|GIN|GIR|GOR|GPO|GRU|HAN|HYN|ICD|IDE|IFD|IHC|IMD|IND|INP|INV|IRQ|LAN|LIN|LOC|MEA|MEM|MKS|MOA|MSG|MTD|NAD|NAT|PAC|PAI|PAS|PCC|PCD|PCI|PDI|PER|PGI|PIA|PNA|POC|PRC|PRI|PRV|PSD|PTY|PYT|QRS|QTY|QUA|QVR|RCS|REL|RFF|RJL|RNG|ROD|RSL|RTE|SAL|SCC|SCD|SEG|SEL|SEQ|SFI|SGP|SGU|SPR|SPS|STA|STC|STG|STS|TAX|TCC|TDT|TEM|TMD|TMP|TOD|TPL|TRU|TSR|UNB|UNZ|UNT|UGH|UGT|UNS|VLI\",e=\"UNH\",n=\"null|Infinity|NaN|undefined\",r=\"\",s=\"BY|SE|ON|INV|JP|UNOA\",o=this.createKeywordMapper({\"variable.language\":\"this\",keyword:s,\"entity.name.segment\":t,\"entity.name.header\":e,\"constant.language\":n,\"support.function\":r},\"identifier\");this.$rules={start:[{token:\"punctuation.operator\",regex:\"\\\\+.\\\\+\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:o,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+\"},{token:\"punctuation.operator\",regex:\"\\\\:|'\"},{token:\"identifier\",regex:\"\\\\:D\\\\:\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};o.metaData={fileTypes:[\"edi\"],keyEquivalent:\"^~E\",name:\"Edifact\",scopeName:\"source.edifact\"},r.inherits(o,s),t.EdifactHighlightRules=o}),define(\"ace/mode/edifact\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/edifact_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./edifact_highlight_rules\").EdifactHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/edifact\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-eiffel.js",
    "content": "define(\"ace/mode/eiffel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"across|agent|alias|all|attached|as|assign|attribute|check|class|convert|create|debug|deferred|detachable|do|else|elseif|end|ensure|expanded|export|external|feature|from|frozen|if|inherit|inspect|invariant|like|local|loop|not|note|obsolete|old|once|Precursor|redefine|rename|require|rescue|retry|select|separate|some|then|undefine|until|variant|when\",t=\"and|implies|or|xor\",n=\"Void\",r=\"True|False\",i=\"Current|Result\",s=this.createKeywordMapper({\"constant.language\":n,\"constant.language.boolean\":r,\"variable.language\":i,\"keyword.operator\":t,keyword:e},\"identifier\",!0),o=/(?:[^\"%\\b\\f\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)+?/;this.$rules={start:[{token:\"string.quoted.other\",regex:/\"\\[/,next:\"aligned_verbatim_string\"},{token:\"string.quoted.other\",regex:/\"\\{/,next:\"non-aligned_verbatim_string\"},{token:\"string.quoted.double\",regex:/\"(?:[^%\\b\\f\\n\\r\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)*?\"/},{token:\"comment.line.double-dash\",regex:/--.*/},{token:\"constant.character\",regex:/'(?:[^%\\b\\f\\n\\r\\t\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)'/},{token:\"constant.numeric\",regex:/\\b0(?:[xX][\\da-fA-F](?:_*[\\da-fA-F])*|[cC][0-7](?:_*[0-7])*|[bB][01](?:_*[01])*)\\b/},{token:\"constant.numeric\",regex:/(?:\\d(?:_*\\d)*)?\\.(?:(?:\\d(?:_*\\d)*)?[eE][+-]?)?\\d(?:_*\\d)*|\\d(?:_*\\d)*\\.?/},{token:\"paren.lparen\",regex:/[\\[({]|<<|\\|\\(/},{token:\"paren.rparen\",regex:/[\\])}]|>>|\\|\\)/},{token:\"keyword.operator\",regex:/:=|->|\\.(?=\\w)|[;,:?]/},{token:\"keyword.operator\",regex:/\\\\\\\\|\\|\\.\\.\\||\\.\\.|\\/[~\\/]?|[><\\/]=?|[-+*^=~]/},{token:function(e){var t=s(e);return t===\"identifier\"&&e===e.toUpperCase()&&(t=\"entity.name.type\"),t},regex:/[a-zA-Z][a-zA-Z\\d_]*\\b/},{token:\"text\",regex:/\\s+/}],aligned_verbatim_string:[{token:\"string\",regex:/]\"/,next:\"start\"},{token:\"string\",regex:o}],\"non-aligned_verbatim_string\":[{token:\"string.quoted.other\",regex:/}\"/,next:\"start\"},{token:\"string.quoted.other\",regex:o}]}};r.inherits(s,i),t.EiffelHighlightRules=s}),define(\"ace/mode/eiffel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/eiffel_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./eiffel_highlight_rules\").EiffelHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/eiffel\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-ejs.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/ejs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=function(e,t){i.call(this),e||(e=\"(?:<%|<\\\\?|{{)\"),t||(t=\"(?:%>|\\\\?>|}})\");for(var n in this.$rules)this.$rules[n].unshift({token:\"markup.list.meta.tag\",regex:e+\"(?![>}])[-=]?\",push:\"ejs-start\"});this.embedRules((new s({jsx:!1})).getRules(),\"ejs-\",[{token:\"markup.list.meta.tag\",regex:\"-?\"+t,next:\"pop\"},{token:\"comment\",regex:\"//.*?\"+t,next:\"pop\"}]),this.normalizeRules()};r.inherits(o,i),t.EjsHighlightRules=o;var r=e(\"../lib/oop\"),u=e(\"./html\").Mode,a=e(\"./javascript\").Mode,f=e(\"./css\").Mode,l=e(\"./ruby\").Mode,c=function(){u.call(this),this.HighlightRules=o,this.createModeDelegates({\"js-\":a,\"css-\":f,\"ejs-\":a})};r.inherits(c,u),function(){this.$id=\"ace/mode/ejs\"}.call(c.prototype),t.Mode=c});                (function() {\n                    window.require([\"ace/mode/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-elixir.js",
    "content": "define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"meta.module.elixir\",\"keyword.control.module.elixir\",\"meta.module.elixir\",\"entity.name.type.module.elixir\"],regex:\"^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc (?:~[a-z])?\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc ~[A-Z]\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc (?:~[a-z])?'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc ~[A-Z]'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.false\",regex:\"@(?:module|type)?doc false\",comment:\"@doc false is treated as documentation\"},{token:\"comment.documentation.string\",regex:'@(?:module|type)?doc \"',push:[{token:\"comment.documentation.string\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.string\"}],comment:\"@doc with string is treated as documentation\"},{token:\"keyword.control.elixir\",regex:\"\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\"},{token:\"keyword.operator.elixir\",regex:\"\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b\",comment:\" as above, just doesn't need a 'end' and does a logic operation\"},{token:\"constant.language.elixir\",regex:\"\\\\b(?:nil|true|false)\\\\b(?![?!])\"},{token:\"variable.language.elixir\",regex:\"\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.readwrite.module.elixir\"],regex:\"(@)([a-zA-Z_]\\\\w*)\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.anonymous.elixir\"],regex:\"(&)(\\\\d*)\"},{token:\"variable.other.constant.elixir\",regex:\"\\\\b[A-Z]\\\\w*\\\\b\"},{token:\"constant.numeric.elixir\",regex:\"\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\"},{token:\"punctuation.definition.constant.elixir\",regex:\":'\",push:[{token:\"punctuation.definition.constant.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.single-quoted.elixir\"}]},{token:\"punctuation.definition.constant.elixir\",regex:':\"',push:[{token:\"punctuation.definition.constant.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.double-quoted.elixir\"}]},{token:\"punctuation.definition.string.begin.elixir\",regex:\"(?:''')\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>''')\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"^\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.heredoc.elixir\"}],comment:\"Single-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.elixir\"}],comment:\"single quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'(?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'(?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'\"',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.elixir\"}],comment:\"double quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[a-z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[a-z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[A-Z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[A-Z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:[\"punctuation.definition.constant.elixir\",\"constant.other.symbol.elixir\"],regex:\"(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)\",comment:\"symbols\"},{token:\"punctuation.definition.constant.elixir\",regex:\"(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)\",comment:\"symbols\"},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(#)(.*)\"},{token:\"constant.numeric.elixir\",regex:\"\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",comment:'\\n\t\t\tmatches questionmark-letters.\\n\\n\t\t\texamples (1st alternation = hex):\\n\t\t\t?\\\\x1     ?\\\\x61\\n\\n\t\t\texamples (2rd alternation = escaped):\\n\t\t\t?\\\\n      ?\\\\b\\n\\n\t\t\texamples (3rd alternation = normal):\\n\t\t\t?a       ?A       ?0 \\n\t\t\t?*       ?\"       ?( \\n\t\t\t?.       ?#\\n\t\t\t\\n\t\t\tthe negative lookbehind prevents against matching\\n\t\t\tp(42.tainted?)\\n\t\t\t'},{token:\"keyword.operator.assignment.augmented.elixir\",regex:\"\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=\"},{token:\"keyword.operator.comparison.elixir\",regex:\"===?|!==?|<=?|>=?\"},{token:\"keyword.operator.bitwise.elixir\",regex:\"\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}\"},{token:\"keyword.operator.logical.elixir\",regex:\"!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\",originalRegex:\"(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\"},{token:\"keyword.operator.arithmetic.elixir\",regex:\"\\\\*|\\\\+|\\\\-|/\"},{token:\"keyword.operator.other.elixir\",regex:\"\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>\"},{token:\"keyword.operator.assignment.elixir\",regex:\"=\"},{token:\"punctuation.separator.other.elixir\",regex:\":\"},{token:\"punctuation.separator.statement.elixir\",regex:\"\\\\;\"},{token:\"punctuation.separator.object.elixir\",regex:\",\"},{token:\"punctuation.separator.method.elixir\",regex:\"\\\\.\"},{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{|\\\\}\"},{token:\"punctuation.section.array.elixir\",regex:\"\\\\[|\\\\]\"},{token:\"punctuation.section.function.elixir\",regex:\"\\\\(|\\\\)\"}],\"#escaped_char\":[{token:\"constant.character.escape.elixir\",regex:\"\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)\"}],\"#interpolated_elixir\":[{token:[\"source.elixir.embedded.source\",\"source.elixir.embedded.source.empty\"],regex:\"(#\\\\{)(\\\\})\"},{todo:{token:\"punctuation.section.embedded.elixir\",regex:\"#\\\\{\",push:[{token:\"punctuation.section.embedded.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"},{include:\"$self\"},{defaultToken:\"source.elixir.embedded.source\"}]}}],\"#nest_curly_and_self\":[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{\",push:[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"}]},{include:\"$self\"}],\"#regex_sub\":[{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{token:[\"punctuation.definition.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"punctuation.definition.arbitrary-repitition.elixir\"],regex:\"(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})\"},{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\[(?:\\\\^?\\\\])?\",push:[{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\]\",next:\"pop\"},{include:\"#escaped_char\"},{defaultToken:\"string.regexp.character-class.elixir\"}]},{token:\"punctuation.definition.group.elixir\",regex:\"\\\\(\",push:[{token:\"punctuation.definition.group.elixir\",regex:\"\\\\)\",next:\"pop\"},{include:\"#regex_sub\"},{defaultToken:\"string.regexp.group.elixir\"}]},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)\",originalRegex:\"(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$\",comment:\"We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.\"}]},this.normalizeRules()};s.metaData={comment:\"Textmate bundle for Elixir Programming Language.\",fileTypes:[\"ex\",\"exs\"],firstLineMatch:\"^#!/.*\\\\belixir\",foldingStartMarker:\"(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$\",foldingStopMarker:\"^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)\",keyEquivalent:\"^~E\",name:\"Elixir\",scopeName:\"source.elixir\"},r.inherits(s,i),t.ElixirHighlightRules=s}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./elixir_highlight_rules\").ElixirHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/elixir\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-elm.js",
    "content": "define(\"ace/mode/elm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({keyword:\"as|case|class|data|default|deriving|do|else|export|foreign|hiding|jsevent|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|open|then|type|where|_|port|\\u03bb\"},\"identifier\"),t=/\\\\(\\d+|['\"\\\\&trnbvf])/,n=/[a-z_]/.source,r=/[A-Z]/.source,i=/[a-z_A-Z0-9']/.source;this.$rules={start:[{token:\"string.start\",regex:'\"',next:\"string\"},{token:\"string.character\",regex:\"'(?:\"+t.source+\"|.)'?\"},{regex:/0(?:[xX][0-9A-Fa-f]+|[oO][0-7]+)|\\d+(\\.\\d+)?([eE][-+]?\\d*)?/,token:\"constant.numeric\"},{token:\"comment\",regex:\"--.*\"},{token:\"keyword\",regex:/\\.\\.|\\||:|=|\\\\|\"|->|<-|\\u2192/},{token:\"keyword.operator\",regex:/[-!#$%&*+.\\/<=>?@\\\\^|~:\\u03BB\\u2192]+/},{token:\"operator.punctuation\",regex:/[,;`]/},{regex:r+i+\"+\\\\.?\",token:function(e){return e[e.length-1]==\".\"?\"entity.name.function\":\"constant.language\"}},{regex:\"^\"+n+i+\"+\",token:function(e){return\"constant.language\"}},{token:e,regex:\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"},{regex:\"{-#?\",token:\"comment.start\",onMatch:function(e,t,n){return this.next=e.length==2?\"blockComment\":\"docComment\",this.token}},{token:\"variable.language\",regex:/\\[markdown\\|/,next:\"markdown\"},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/}],markdown:[{regex:/\\|\\]/,next:\"start\"},{defaultToken:\"string\"}],blockComment:[{regex:\"{-\",token:\"comment.start\",push:\"blockComment\"},{regex:\"-}\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}],docComment:[{regex:\"{-\",token:\"comment.start\",push:\"docComment\"},{regex:\"-}\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"doc.comment\"}],string:[{token:\"constant.language.escape\",regex:t},{token:\"text\",regex:/\\\\(\\s|$)/,next:\"stringGap\"},{token:\"string.end\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}],stringGap:[{token:\"text\",regex:/\\\\/,next:\"string\"},{token:\"error\",regex:\"\",next:\"start\"}]},this.normalizeRules()};r.inherits(s,i),t.ElmHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/elm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elm_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./elm_highlight_rules\").ElmHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"{-\",end:\"-}\",nestable:!0},this.$id=\"ace/mode/elm\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-erlang.js",
    "content": "define(\"ace/mode/erlang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#module-directive\"},{include:\"#import-export-directive\"},{include:\"#behaviour-directive\"},{include:\"#record-directive\"},{include:\"#define-directive\"},{include:\"#macro-directive\"},{include:\"#directive\"},{include:\"#function\"},{include:\"#everything-else\"}],\"#atom\":[{token:\"punctuation.definition.symbol.begin.erlang\",regex:\"'\",push:[{token:\"punctuation.definition.symbol.end.erlang\",regex:\"'\",next:\"pop\"},{token:[\"punctuation.definition.escape.erlang\",\"constant.other.symbol.escape.erlang\",\"punctuation.definition.escape.erlang\",\"constant.other.symbol.escape.erlang\",\"constant.other.symbol.escape.erlang\"],regex:\"(\\\\\\\\)(?:([bdefnrstv\\\\\\\\'\\\"])|(\\\\^)([@-_])|([0-7]{1,3}))\"},{token:\"invalid.illegal.atom.erlang\",regex:\"\\\\\\\\\\\\^?.?\"},{defaultToken:\"constant.other.symbol.quoted.single.erlang\"}]},{token:\"constant.other.symbol.unquoted.erlang\",regex:\"[a-z][a-zA-Z\\\\d@_]*\"}],\"#behaviour-directive\":[{token:[\"meta.directive.behaviour.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.behaviour.erlang\",\"keyword.control.directive.behaviour.erlang\",\"meta.directive.behaviour.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.behaviour.erlang\",\"entity.name.type.class.behaviour.definition.erlang\",\"meta.directive.behaviour.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.behaviour.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(behaviour)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"}],\"#binary\":[{token:\"punctuation.definition.binary.begin.erlang\",regex:\"<<\",push:[{token:\"punctuation.definition.binary.end.erlang\",regex:\">>\",next:\"pop\"},{token:[\"punctuation.separator.binary.erlang\",\"punctuation.separator.value-size.erlang\"],regex:\"(,)|(:)\"},{include:\"#internal-type-specifiers\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.binary.erlang\"}]}],\"#character\":[{token:[\"punctuation.definition.character.erlang\",\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"constant.character.escape.erlang\"],regex:\"(\\\\$)(\\\\\\\\)(?:([bdefnrstv\\\\\\\\'\\\"])|(\\\\^)([@-_])|([0-7]{1,3}))\"},{token:\"invalid.illegal.character.erlang\",regex:\"\\\\$\\\\\\\\\\\\^?.?\"},{token:[\"punctuation.definition.character.erlang\",\"constant.character.erlang\"],regex:\"(\\\\$)(\\\\S)\"},{token:\"invalid.illegal.character.erlang\",regex:\"\\\\$.?\"}],\"#comment\":[{token:\"punctuation.definition.comment.erlang\",regex:\"%.*$\",push_:[{token:\"comment.line.percentage.erlang\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.percentage.erlang\"}]}],\"#define-directive\":[{token:[\"meta.directive.define.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.define.erlang\",\"keyword.control.directive.define.erlang\",\"meta.directive.define.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.define.erlang\",\"entity.name.function.macro.definition.erlang\",\"meta.directive.define.erlang\",\"punctuation.separator.parameters.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(,)\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.define.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.directive.define.erlang\"}]},{token:\"meta.directive.define.erlang\",regex:\"(?=^\\\\s*-\\\\s*define\\\\s*\\\\(\\\\s*[a-zA-Z\\\\d@_]+\\\\s*\\\\()\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.define.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{token:[\"text\",\"punctuation.section.directive.begin.erlang\",\"text\",\"keyword.control.directive.define.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\",\"text\",\"entity.name.function.macro.definition.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\()\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"text\",\"punctuation.separator.parameters.erlang\"],regex:\"(\\\\))(\\\\s*)(,)\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{token:\"punctuation.separator.define.erlang\",regex:\"\\\\|\\\\||\\\\||:|;|,|\\\\.|->\"},{include:\"#everything-else\"},{defaultToken:\"meta.directive.define.erlang\"}]}],\"#directive\":[{token:[\"meta.directive.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.erlang\",\"keyword.control.directive.erlang\",\"meta.directive.erlang\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\(?)\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\)?)(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.directive.erlang\"}]},{token:[\"meta.directive.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.erlang\",\"keyword.control.directive.erlang\",\"meta.directive.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\.)\"}],\"#everything-else\":[{include:\"#comment\"},{include:\"#record-usage\"},{include:\"#macro-usage\"},{include:\"#expression\"},{include:\"#keyword\"},{include:\"#textual-operator\"},{include:\"#function-call\"},{include:\"#tuple\"},{include:\"#list\"},{include:\"#binary\"},{include:\"#parenthesized-expression\"},{include:\"#character\"},{include:\"#number\"},{include:\"#atom\"},{include:\"#string\"},{include:\"#symbolic-operator\"},{include:\"#variable\"}],\"#expression\":[{token:\"keyword.control.if.erlang\",regex:\"\\\\bif\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.if.erlang\"}]},{token:\"keyword.control.case.erlang\",regex:\"\\\\bcase\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.case.erlang\"}]},{token:\"keyword.control.receive.erlang\",regex:\"\\\\breceive\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.receive.erlang\"}]},{token:[\"keyword.control.fun.erlang\",\"text\",\"entity.name.type.class.module.erlang\",\"text\",\"punctuation.separator.module-function.erlang\",\"text\",\"entity.name.function.erlang\",\"text\",\"punctuation.separator.function-arity.erlang\"],regex:\"\\\\b(fun)(\\\\s*)(?:([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(/)\"},{token:\"keyword.control.fun.erlang\",regex:\"\\\\bfun\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{token:\"text\",regex:\"(?=\\\\()\",push:[{token:\"punctuation.separator.clauses.erlang\",regex:\";|(?=\\\\bend\\\\b)\",next:\"pop\"},{include:\"#internal-function-parts\"}]},{include:\"#everything-else\"},{defaultToken:\"meta.expression.fun.erlang\"}]},{token:\"keyword.control.try.erlang\",regex:\"\\\\btry\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.try.erlang\"}]},{token:\"keyword.control.begin.erlang\",regex:\"\\\\bbegin\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.begin.erlang\"}]},{token:\"keyword.control.query.erlang\",regex:\"\\\\bquery\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.query.erlang\"}]}],\"#function\":[{token:[\"meta.function.erlang\",\"entity.name.function.definition.erlang\",\"meta.function.erlang\"],regex:\"^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(?=\\\\()\",push:[{token:\"punctuation.terminator.function.erlang\",regex:\"\\\\.\",next:\"pop\"},{token:[\"text\",\"entity.name.function.erlang\",\"text\"],regex:\"^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(?=\\\\()\"},{token:\"text\",regex:\"(?=\\\\()\",push:[{token:\"punctuation.separator.clauses.erlang\",regex:\";|(?=\\\\.)\",next:\"pop\"},{include:\"#parenthesized-expression\"},{include:\"#internal-function-parts\"}]},{include:\"#everything-else\"},{defaultToken:\"meta.function.erlang\"}]}],\"#function-call\":[{token:\"meta.function-call.erlang\",regex:\"(?=(?:[a-z][a-zA-Z\\\\d@_]*|'[^']*')\\\\s*(?:\\\\(|:\\\\s*(?:[a-z][a-zA-Z\\\\d@_]*|'[^']*')\\\\s*\\\\())\",push:[{token:\"punctuation.definition.parameters.end.erlang\",regex:\"\\\\)\",next:\"pop\"},{token:[\"entity.name.type.class.module.erlang\",\"text\",\"punctuation.separator.module-function.erlang\",\"text\",\"entity.name.function.guard.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"(?:(erlang)(\\\\s*)(:)(\\\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\\\s*)(\\\\()\",push:[{token:\"text\",regex:\"(?=\\\\))\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{token:[\"entity.name.type.class.module.erlang\",\"text\",\"punctuation.separator.module-function.erlang\",\"text\",\"entity.name.function.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"(?:([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(\\\\()\",push:[{token:\"text\",regex:\"(?=\\\\))\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{defaultToken:\"meta.function-call.erlang\"}]}],\"#import-export-directive\":[{token:[\"meta.directive.import.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.import.erlang\",\"keyword.control.directive.import.erlang\",\"meta.directive.import.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.import.erlang\",\"entity.name.type.class.module.erlang\",\"meta.directive.import.erlang\",\"punctuation.separator.parameters.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(import)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(,)\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.import.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#internal-function-list\"},{defaultToken:\"meta.directive.import.erlang\"}]},{token:[\"meta.directive.export.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.export.erlang\",\"keyword.control.directive.export.erlang\",\"meta.directive.export.erlang\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(export)(\\\\s*)(\\\\()\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.export.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#internal-function-list\"},{defaultToken:\"meta.directive.export.erlang\"}]}],\"#internal-expression-punctuation\":[{token:[\"punctuation.separator.clause-head-body.erlang\",\"punctuation.separator.clauses.erlang\",\"punctuation.separator.expressions.erlang\"],regex:\"(->)|(;)|(,)\"}],\"#internal-function-list\":[{token:\"punctuation.definition.list.begin.erlang\",regex:\"\\\\[\",push:[{token:\"punctuation.definition.list.end.erlang\",regex:\"\\\\]\",next:\"pop\"},{token:[\"entity.name.function.erlang\",\"text\",\"punctuation.separator.function-arity.erlang\"],regex:\"([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(/)\",push:[{token:\"punctuation.separator.list.erlang\",regex:\",|(?=\\\\])\",next:\"pop\"},{include:\"#everything-else\"}]},{include:\"#everything-else\"},{defaultToken:\"meta.structure.list.function.erlang\"}]}],\"#internal-function-parts\":[{token:\"text\",regex:\"(?=\\\\()\",push:[{token:\"punctuation.separator.clause-head-body.erlang\",regex:\"->\",next:\"pop\"},{token:\"punctuation.definition.parameters.begin.erlang\",regex:\"\\\\(\",push:[{token:\"punctuation.definition.parameters.end.erlang\",regex:\"\\\\)\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{token:\"punctuation.separator.guards.erlang\",regex:\",|;\"},{include:\"#everything-else\"}]},{token:\"punctuation.separator.expressions.erlang\",regex:\",\"},{include:\"#everything-else\"}],\"#internal-record-body\":[{token:\"punctuation.definition.class.record.begin.erlang\",regex:\"\\\\{\",push:[{token:\"meta.structure.record.erlang\",regex:\"(?=\\\\})\",next:\"pop\"},{token:[\"variable.other.field.erlang\",\"variable.language.omitted.field.erlang\",\"text\",\"keyword.operator.assignment.erlang\"],regex:\"(?:([a-z][a-zA-Z\\\\d@_]*|'[^']*')|(_))(\\\\s*)(=|::)\",push:[{token:\"punctuation.separator.class.record.erlang\",regex:\",|(?=\\\\})\",next:\"pop\"},{include:\"#everything-else\"}]},{token:[\"variable.other.field.erlang\",\"text\",\"punctuation.separator.class.record.erlang\"],regex:\"([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)((?:,)?)\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.record.erlang\"}]}],\"#internal-type-specifiers\":[{token:\"punctuation.separator.value-type.erlang\",regex:\"/\",push:[{token:\"text\",regex:\"(?=,|:|>>)\",next:\"pop\"},{token:[\"storage.type.erlang\",\"storage.modifier.signedness.erlang\",\"storage.modifier.endianness.erlang\",\"storage.modifier.unit.erlang\",\"punctuation.separator.type-specifiers.erlang\"],regex:\"(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)\"}]}],\"#keyword\":[{token:\"keyword.control.erlang\",regex:\"\\\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\\\b\"}],\"#list\":[{token:\"punctuation.definition.list.begin.erlang\",regex:\"\\\\[\",push:[{token:\"punctuation.definition.list.end.erlang\",regex:\"\\\\]\",next:\"pop\"},{token:\"punctuation.separator.list.erlang\",regex:\"\\\\||\\\\|\\\\||,\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.list.erlang\"}]}],\"#macro-directive\":[{token:[\"meta.directive.ifdef.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.ifdef.erlang\",\"keyword.control.directive.ifdef.erlang\",\"meta.directive.ifdef.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.ifdef.erlang\",\"entity.name.function.macro.erlang\",\"meta.directive.ifdef.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.ifdef.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(ifdef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"},{token:[\"meta.directive.ifndef.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.ifndef.erlang\",\"keyword.control.directive.ifndef.erlang\",\"meta.directive.ifndef.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.ifndef.erlang\",\"entity.name.function.macro.erlang\",\"meta.directive.ifndef.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.ifndef.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(ifndef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"},{token:[\"meta.directive.undef.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.undef.erlang\",\"keyword.control.directive.undef.erlang\",\"meta.directive.undef.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.undef.erlang\",\"entity.name.function.macro.erlang\",\"meta.directive.undef.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.undef.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(undef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"}],\"#macro-usage\":[{token:[\"keyword.operator.macro.erlang\",\"meta.macro-usage.erlang\",\"entity.name.function.macro.erlang\"],regex:\"(\\\\?\\\\??)(\\\\s*)([a-zA-Z\\\\d@_]+)\"}],\"#module-directive\":[{token:[\"meta.directive.module.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.module.erlang\",\"keyword.control.directive.module.erlang\",\"meta.directive.module.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.module.erlang\",\"entity.name.type.class.module.definition.erlang\",\"meta.directive.module.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.module.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(module)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"}],\"#number\":[{token:\"text\",regex:\"(?=\\\\d)\",push:[{token:\"text\",regex:\"(?!\\\\d)\",next:\"pop\"},{token:[\"constant.numeric.float.erlang\",\"punctuation.separator.integer-float.erlang\",\"constant.numeric.float.erlang\",\"punctuation.separator.float-exponent.erlang\"],regex:\"(\\\\d+)(\\\\.)(\\\\d+)((?:[eE][\\\\+\\\\-]?\\\\d+)?)\"},{token:[\"constant.numeric.integer.binary.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.binary.erlang\"],regex:\"(2)(#)([0-1]+)\"},{token:[\"constant.numeric.integer.base-3.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-3.erlang\"],regex:\"(3)(#)([0-2]+)\"},{token:[\"constant.numeric.integer.base-4.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-4.erlang\"],regex:\"(4)(#)([0-3]+)\"},{token:[\"constant.numeric.integer.base-5.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-5.erlang\"],regex:\"(5)(#)([0-4]+)\"},{token:[\"constant.numeric.integer.base-6.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-6.erlang\"],regex:\"(6)(#)([0-5]+)\"},{token:[\"constant.numeric.integer.base-7.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-7.erlang\"],regex:\"(7)(#)([0-6]+)\"},{token:[\"constant.numeric.integer.octal.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.octal.erlang\"],regex:\"(8)(#)([0-7]+)\"},{token:[\"constant.numeric.integer.base-9.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-9.erlang\"],regex:\"(9)(#)([0-8]+)\"},{token:[\"constant.numeric.integer.decimal.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.decimal.erlang\"],regex:\"(10)(#)(\\\\d+)\"},{token:[\"constant.numeric.integer.base-11.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-11.erlang\"],regex:\"(11)(#)([\\\\daA]+)\"},{token:[\"constant.numeric.integer.base-12.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-12.erlang\"],regex:\"(12)(#)([\\\\da-bA-B]+)\"},{token:[\"constant.numeric.integer.base-13.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-13.erlang\"],regex:\"(13)(#)([\\\\da-cA-C]+)\"},{token:[\"constant.numeric.integer.base-14.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-14.erlang\"],regex:\"(14)(#)([\\\\da-dA-D]+)\"},{token:[\"constant.numeric.integer.base-15.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-15.erlang\"],regex:\"(15)(#)([\\\\da-eA-E]+)\"},{token:[\"constant.numeric.integer.hexadecimal.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.hexadecimal.erlang\"],regex:\"(16)(#)([\\\\da-fA-F]+)\"},{token:[\"constant.numeric.integer.base-17.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-17.erlang\"],regex:\"(17)(#)([\\\\da-gA-G]+)\"},{token:[\"constant.numeric.integer.base-18.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-18.erlang\"],regex:\"(18)(#)([\\\\da-hA-H]+)\"},{token:[\"constant.numeric.integer.base-19.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-19.erlang\"],regex:\"(19)(#)([\\\\da-iA-I]+)\"},{token:[\"constant.numeric.integer.base-20.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-20.erlang\"],regex:\"(20)(#)([\\\\da-jA-J]+)\"},{token:[\"constant.numeric.integer.base-21.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-21.erlang\"],regex:\"(21)(#)([\\\\da-kA-K]+)\"},{token:[\"constant.numeric.integer.base-22.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-22.erlang\"],regex:\"(22)(#)([\\\\da-lA-L]+)\"},{token:[\"constant.numeric.integer.base-23.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-23.erlang\"],regex:\"(23)(#)([\\\\da-mA-M]+)\"},{token:[\"constant.numeric.integer.base-24.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-24.erlang\"],regex:\"(24)(#)([\\\\da-nA-N]+)\"},{token:[\"constant.numeric.integer.base-25.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-25.erlang\"],regex:\"(25)(#)([\\\\da-oA-O]+)\"},{token:[\"constant.numeric.integer.base-26.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-26.erlang\"],regex:\"(26)(#)([\\\\da-pA-P]+)\"},{token:[\"constant.numeric.integer.base-27.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-27.erlang\"],regex:\"(27)(#)([\\\\da-qA-Q]+)\"},{token:[\"constant.numeric.integer.base-28.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-28.erlang\"],regex:\"(28)(#)([\\\\da-rA-R]+)\"},{token:[\"constant.numeric.integer.base-29.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-29.erlang\"],regex:\"(29)(#)([\\\\da-sA-S]+)\"},{token:[\"constant.numeric.integer.base-30.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-30.erlang\"],regex:\"(30)(#)([\\\\da-tA-T]+)\"},{token:[\"constant.numeric.integer.base-31.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-31.erlang\"],regex:\"(31)(#)([\\\\da-uA-U]+)\"},{token:[\"constant.numeric.integer.base-32.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-32.erlang\"],regex:\"(32)(#)([\\\\da-vA-V]+)\"},{token:[\"constant.numeric.integer.base-33.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-33.erlang\"],regex:\"(33)(#)([\\\\da-wA-W]+)\"},{token:[\"constant.numeric.integer.base-34.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-34.erlang\"],regex:\"(34)(#)([\\\\da-xA-X]+)\"},{token:[\"constant.numeric.integer.base-35.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-35.erlang\"],regex:\"(35)(#)([\\\\da-yA-Y]+)\"},{token:[\"constant.numeric.integer.base-36.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-36.erlang\"],regex:\"(36)(#)([\\\\da-zA-Z]+)\"},{token:\"invalid.illegal.integer.erlang\",regex:\"\\\\d+#[\\\\da-zA-Z]+\"},{token:\"constant.numeric.integer.decimal.erlang\",regex:\"\\\\d+\"}]}],\"#parenthesized-expression\":[{token:\"punctuation.section.expression.begin.erlang\",regex:\"\\\\(\",push:[{token:\"punctuation.section.expression.end.erlang\",regex:\"\\\\)\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.parenthesized\"}]}],\"#record-directive\":[{token:[\"meta.directive.record.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.record.erlang\",\"keyword.control.directive.import.erlang\",\"meta.directive.record.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.record.erlang\",\"entity.name.type.class.record.definition.erlang\",\"meta.directive.record.erlang\",\"punctuation.separator.parameters.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(record)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(,)\",push:[{token:[\"punctuation.definition.class.record.end.erlang\",\"meta.directive.record.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.record.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\})(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#internal-record-body\"},{defaultToken:\"meta.directive.record.erlang\"}]}],\"#record-usage\":[{token:[\"keyword.operator.record.erlang\",\"meta.record-usage.erlang\",\"entity.name.type.class.record.erlang\",\"meta.record-usage.erlang\",\"punctuation.separator.record-field.erlang\",\"meta.record-usage.erlang\",\"variable.other.field.erlang\"],regex:\"(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(\\\\.)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')\"},{token:[\"keyword.operator.record.erlang\",\"meta.record-usage.erlang\",\"entity.name.type.class.record.erlang\"],regex:\"(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')\",push:[{token:\"punctuation.definition.class.record.end.erlang\",regex:\"\\\\}\",next:\"pop\"},{include:\"#internal-record-body\"},{defaultToken:\"meta.record-usage.erlang\"}]}],\"#string\":[{token:\"punctuation.definition.string.begin.erlang\",regex:'\"',push:[{token:\"punctuation.definition.string.end.erlang\",regex:'\"',next:\"pop\"},{token:[\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"constant.character.escape.erlang\"],regex:\"(\\\\\\\\)(?:([bdefnrstv\\\\\\\\'\\\"])|(\\\\^)([@-_])|([0-7]{1,3}))\"},{token:\"invalid.illegal.string.erlang\",regex:\"\\\\\\\\\\\\^?.?\"},{token:[\"punctuation.definition.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"constant.other.placeholder.erlang\"],regex:\"(~)(?:((?:\\\\-)?)(\\\\d+)|(\\\\*))?(?:(\\\\.)(?:(\\\\d+)|(\\\\*)))?(?:(\\\\.)(?:(\\\\*)|(.)))?([~cfegswpWPBX#bx\\\\+ni])\"},{token:[\"punctuation.definition.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"constant.other.placeholder.erlang\"],regex:\"(~)((?:\\\\*)?)((?:\\\\d+)?)([~du\\\\-#fsacl])\"},{token:\"invalid.illegal.string.erlang\",regex:\"~.?\"},{defaultToken:\"string.quoted.double.erlang\"}]}],\"#symbolic-operator\":[{token:\"keyword.operator.symbolic.erlang\",regex:\"\\\\+\\\\+|\\\\+|--|-|\\\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::\"}],\"#textual-operator\":[{token:\"keyword.operator.textual.erlang\",regex:\"\\\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\\\b\"}],\"#tuple\":[{token:\"punctuation.definition.tuple.begin.erlang\",regex:\"\\\\{\",push:[{token:\"punctuation.definition.tuple.end.erlang\",regex:\"\\\\}\",next:\"pop\"},{token:\"punctuation.separator.tuple.erlang\",regex:\",\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.tuple.erlang\"}]}],\"#variable\":[{token:[\"variable.other.erlang\",\"variable.language.omitted.erlang\"],regex:\"(_[a-zA-Z\\\\d@_]+|[A-Z][a-zA-Z\\\\d@_]*)|(_)\"}]},this.normalizeRules()};s.metaData={comment:\"The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace).  Also, the function/module/record/macro names must be given unquoted.  -- desp\",fileTypes:[\"erl\",\"hrl\"],keyEquivalent:\"^~E\",name:\"Erlang\",scopeName:\"source.erlang\"},r.inherits(s,i),t.ErlangHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/erlang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/erlang_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./erlang_highlight_rules\").ErlangHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"%\",this.blockComment=null,this.$id=\"ace/mode/erlang\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-forth.js",
    "content": "define(\"ace/mode/forth_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#forth\"}],\"#comment\":[{token:\"comment.line.double-dash.forth\",regex:\"(?:^|\\\\s)--\\\\s.*$\",comment:\"line comments for iForth\"},{token:\"comment.line.backslash.forth\",regex:\"(?:^|\\\\s)\\\\\\\\[\\\\s\\\\S]*$\",comment:\"ANSI line comment\"},{token:\"comment.line.backslash-g.forth\",regex:\"(?:^|\\\\s)\\\\\\\\[Gg] .*$\",comment:\"gForth line comment\"},{token:\"comment.block.forth\",regex:\"(?:^|\\\\s)\\\\(\\\\*(?=\\\\s|$)\",push:[{token:\"comment.block.forth\",regex:\"(?:^|\\\\s)\\\\*\\\\)(?=\\\\s|$)\",next:\"pop\"},{defaultToken:\"comment.block.forth\"}],comment:\"multiline comments for iForth\"},{token:\"comment.block.documentation.forth\",regex:\"\\\\bDOC\\\\b\",caseInsensitive:!0,push:[{token:\"comment.block.documentation.forth\",regex:\"\\\\bENDDOC\\\\b\",caseInsensitive:!0,next:\"pop\"},{defaultToken:\"comment.block.documentation.forth\"}],comment:\"documentation comments for iForth\"},{token:\"comment.line.parentheses.forth\",regex:\"(?:^|\\\\s)\\\\.?\\\\( [^)]*\\\\)\",comment:\"ANSI line comment\"}],\"#constant\":[{token:\"constant.language.forth\",regex:\"(?:^|\\\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\\\s|$)\",caseInsensitive:!0},{token:\"constant.numeric.forth\",regex:\"(?:^|\\\\s)[$#%]?[-+]?[0-9]+(?:\\\\.[0-9]*e-?[0-9]+|\\\\.?[0-9a-fA-F]*)(?=\\\\s|$)\"},{token:\"constant.character.forth\",regex:\"(?:^|\\\\s)(?:[&^]\\\\S|(?:\\\"|')\\\\S(?:\\\"|'))(?=\\\\s|$)\"}],\"#forth\":[{include:\"#constant\"},{include:\"#comment\"},{include:\"#string\"},{include:\"#word\"},{include:\"#variable\"},{include:\"#storage\"},{include:\"#word-def\"}],\"#storage\":[{token:\"storage.type.forth\",regex:\"(?:^|\\\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\\\s|$)\",caseInsensitive:!0}],\"#string\":[{token:\"string.quoted.double.forth\",regex:'(ABORT\" |BREAK\" |\\\\.\" |C\" |0\"|S\\\\\\\\?\" )([^\"]+\")',caseInsensitive:!0},{token:\"string.unquoted.forth\",regex:\"(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\\\S+(?=\\\\s|$)\",caseInsensitive:!0}],\"#variable\":[{token:\"variable.language.forth\",regex:\"\\\\b(?:I|J)\\\\b\",caseInsensitive:!0}],\"#word\":[{token:\"keyword.control.immediate.forth\",regex:\"(?:^|\\\\s)\\\\[(?:\\\\?DO|\\\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\\\](?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.other.immediate.forth\",regex:\"(?:^|\\\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT'S|])(?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.control.compile-only.forth\",regex:'(?:^|\\\\s)(?:-DO|\\\\-LOOP|\\\\?DO|\\\\?LEAVE|\\\\+DO|\\\\+LOOP|ABORT\\\\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\\\-DO|U\\\\+DO|UNTIL|WHILE)(?=\\\\s|$)',caseInsensitive:!0},{token:\"keyword.other.compile-only.forth\",regex:\"(?:^|\\\\s)(?:\\\\?DUP-0=-IF|\\\\?DUP-IF|\\\\)|\\\\[|\\\\['\\\\]|\\\\[CHAR\\\\]|\\\\[COMPILE\\\\]|\\\\[IS\\\\]|\\\\[TO\\\\]|<COMPILATION|<INTERPRETATION|ASSERT\\\\(|ASSERT0\\\\(|ASSERT1\\\\(|ASSERT2\\\\(|ASSERT3\\\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.other.non-immediate.forth\",regex:\"(?:^|\\\\s)(?:'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.other.warning.forth\",regex:'(?:^|\\\\s)(?:~~|BREAK:|BREAK\"|DBG)(?=\\\\s|$)',caseInsensitive:!0}],\"#word-def\":[{token:[\"keyword.other.compile-only.forth\",\"keyword.other.compile-only.forth\",\"meta.block.forth\",\"entity.name.function.forth\"],regex:\"(:NONAME)|(^:|\\\\s:)(\\\\s)(\\\\S+)(?=\\\\s|$)\",caseInsensitive:!0,push:[{token:\"keyword.other.compile-only.forth\",regex:\";(?:CODE)?\",caseInsensitive:!0,next:\"pop\"},{include:\"#constant\"},{include:\"#comment\"},{include:\"#string\"},{include:\"#word\"},{include:\"#variable\"},{include:\"#storage\"},{defaultToken:\"meta.block.forth\"}]}]},this.normalizeRules()};s.metaData={fileTypes:[\"frt\",\"fs\",\"ldr\",\"fth\",\"4th\"],foldingStartMarker:\"/\\\\*\\\\*|\\\\{\\\\s*$\",foldingStopMarker:\"\\\\*\\\\*/|^\\\\s*\\\\}\",keyEquivalent:\"^~F\",name:\"Forth\",scopeName:\"source.forth\"},r.inherits(s,i),t.ForthHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/forth\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/forth_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./forth_highlight_rules\").ForthHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment=null,this.$id=\"ace/mode/forth\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-fortran.js",
    "content": "define(\"ace/mode/fortran_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"call|case|contains|continue|cycle|do|else|elseif|end|enddo|endif|function|if|implicit|in|include|inout|intent|module|none|only|out|print|program|return|select|status|stop|subroutine|return|then|use|while|write|CALL|CASE|CONTAINS|CONTINUE|CYCLE|DO|ELSE|ELSEIF|END|ENDDO|ENDIF|FUNCTION|IF|IMPLICIT|IN|INCLUDE|INOUT|INTENT|MODULE|NONE|ONLY|OUT|PRINT|PROGRAM|RETURN|SELECT|STATUS|STOP|SUBROUTINE|RETURN|THEN|USE|WHILE|WRITE\",t=\"and|or|not|eq|ne|gt|ge|lt|le|AND|OR|NOT|EQ|NE|GT|GE|LT|LE\",n=\"true|false|TRUE|FALSE\",r=\"abs|achar|acos|acosh|adjustl|adjustr|aimag|aint|all|allocate|anint|any|asin|asinh|associated|atan|atan2|atanh|bessel_j0|bessel_j1|bessel_jn|bessel_y0|bessel_y1|bessel_yn|bge|bgt|bit_size|ble|blt|btest|ceiling|char|cmplx|conjg|cos|cosh|count|cpu_time|cshift|date_and_time|dble|deallocate|digits|dim|dot_product|dprod|dshiftl|dshiftr|dsqrt|eoshift|epsilon|erf|erfc|erfc_scaled|exp|float|floor|format|fraction|gamma|input|len|lge|lgt|lle|llt|log|log10|maskl|maskr|matmul|max|maxloc|maxval|merge|min|minloc|minval|mod|modulo|nint|not|norm2|null|nullify|pack|parity|popcnt|poppar|precision|present|product|radix|random_number|random_seed|range|repeat|reshape|round|rrspacing|same_type_as|scale|scan|selected_char_kind|selected_int_kind|selected_real_kind|set_exponent|shape|shifta|shiftl|shiftr|sign|sin|sinh|size|sngl|spacing|spread|sqrt|sum|system_clock|tan|tanh|tiny|trailz|transfer|transpose|trim|ubound|unpack|verify|ABS|ACHAR|ACOS|ACOSH|ADJUSTL|ADJUSTR|AIMAG|AINT|ALL|ALLOCATE|ANINT|ANY|ASIN|ASINH|ASSOCIATED|ATAN|ATAN2|ATANH|BESSEL_J0|BESSEL_J1|BESSEL_JN|BESSEL_Y0|BESSEL_Y1|BESSEL_YN|BGE|BGT|BIT_SIZE|BLE|BLT|BTEST|CEILING|CHAR|CMPLX|CONJG|COS|COSH|COUNT|CPU_TIME|CSHIFT|DATE_AND_TIME|DBLE|DEALLOCATE|DIGITS|DIM|DOT_PRODUCT|DPROD|DSHIFTL|DSHIFTR|DSQRT|EOSHIFT|EPSILON|ERF|ERFC|ERFC_SCALED|EXP|FLOAT|FLOOR|FORMAT|FRACTION|GAMMA|INPUT|LEN|LGE|LGT|LLE|LLT|LOG|LOG10|MASKL|MASKR|MATMUL|MAX|MAXLOC|MAXVAL|MERGE|MIN|MINLOC|MINVAL|MOD|MODULO|NINT|NOT|NORM2|NULL|NULLIFY|PACK|PARITY|POPCNT|POPPAR|PRECISION|PRESENT|PRODUCT|RADIX|RANDOM_NUMBER|RANDOM_SEED|RANGE|REPEAT|RESHAPE|ROUND|RRSPACING|SAME_TYPE_AS|SCALE|SCAN|SELECTED_CHAR_KIND|SELECTED_INT_KIND|SELECTED_REAL_KIND|SET_EXPONENT|SHAPE|SHIFTA|SHIFTL|SHIFTR|SIGN|SIN|SINH|SIZE|SNGL|SPACING|SPREAD|SQRT|SUM|SYSTEM_CLOCK|TAN|TANH|TINY|TRAILZ|TRANSFER|TRANSPOSE|TRIM|UBOUND|UNPACK|VERIFY\",i=\"logical|character|integer|real|type|LOGICAL|CHARACTER|INTEGER|REAL|TYPE\",s=\"allocatable|dimension|intent|parameter|pointer|target|private|public|ALLOCATABLE|DIMENSION|INTENT|PARAMETER|POINTER|TARGET|PRIVATE|PUBLIC\",o=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":r,\"constant.language\":n,keyword:e,\"keyword.operator\":t,\"storage.type\":i,\"storage.modifier\":s},\"identifier\"),u=\"(?:r|u|ur|R|U|UR|Ur|uR)?\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"!.*$\"},{token:\"string\",regex:u+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|define|undef|INCLUDE|IMPORT|DEFINE|UNDEF)\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|ifdef|else|elseif|ifndef|ENDIF|IFDEF|ELSE|ELSEIF|IFNDEF)\\\\b\"},{token:o,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.FortranHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/fortran\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fortran_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./fortran_highlight_rules\").FortranHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"!\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={\"return\":1,\"break\":1,\"continue\":1,RETURN:1,BREAK:1,CONTINUE:1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/fortran\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-fsharp.js",
    "content": "define(\"ace/mode/fsharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({variable:\"this\",keyword:\"abstract|assert|base|begin|class|default|delegate|done|downcast|downto|elif|else|exception|extern|false|finally|function|global|inherit|inline|interface|internal|lazy|match|member|module|mutable|namespace|open|or|override|private|public|rec|return|return!|select|static|struct|then|to|true|try|typeof|upcast|use|use!|val|void|when|while|with|yield|yield!|__SOURCE_DIRECTORY__|as|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall|trait|virtual|volatile|and|do|end|for|fun|if|in|let|let!|new|not|null|of|endif\",constant:\"true|false\"},\"identifier\"),t=\"(?:(?:(?:(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.))|(?:\\\\d+))(?:[eE][+-]?\\\\d+))|(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.)))\";this.$rules={start:[{token:\"variable.classes\",regex:\"\\\\[\\\\<[.]*\\\\>\\\\]\"},{token:\"comment\",regex:\"//.*$\"},{token:\"comment.start\",regex:/\\(\\*(?!\\))/,push:\"blockComment\"},{token:\"string\",regex:\"'.'\"},{token:\"string\",regex:'\"\"\"',next:[{token:\"constant.language.escape\",regex:/\\\\./,next:\"qqstring\"},{token:\"string\",regex:'\"\"\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"',next:[{token:\"constant.language.escape\",regex:/\\\\./,next:\"qqstring\"},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}]},{token:[\"verbatim.string\",\"string\"],regex:'(@?)(\")',stateName:\"qqstring\",next:[{token:\"constant.language.escape\",regex:'\"\"'},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.float\",regex:\"(?:\"+t+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.float\",regex:t},{token:\"constant.integer\",regex:\"(?:(?:(?:[1-9]\\\\d*)|(?:0))|(?:0[oO]?[0-7]+)|(?:0[xX][\\\\dA-Fa-f]+)|(?:0[bB][01]+))\\\\b\"},{token:[\"keyword.type\",\"variable\"],regex:\"(type\\\\s)([a-zA-Z0-9_$-]*\\\\b)\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|\\\\(\\\\*\\\\)\"},{token:\"paren.lpar\",regex:\"[[({]\"},{token:\"paren.rpar\",regex:\"[\\\\])}]\"}],blockComment:[{regex:/\\(\\*\\)/,token:\"comment\"},{regex:/\\(\\*(?!\\))/,token:\"comment.start\",push:\"blockComment\"},{regex:/\\*\\)/,token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.FSharpHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/fsharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsharp_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./fsharp_highlight_rules\").FSharpHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"(*\",end:\"*)\",nestable:!0},this.$id=\"ace/mode/fsharp\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-fsl.js",
    "content": "define(\"ace/mode/fsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"punctuation.definition.comment.mn\",regex:/\\/\\*/,push:[{token:\"punctuation.definition.comment.mn\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.fsl\"}]},{token:\"comment.line.fsl\",regex:/\\/\\//,push:[{token:\"comment.line.fsl\",regex:/$/,next:\"pop\"},{defaultToken:\"comment.line.fsl\"}]},{token:\"entity.name.function\",regex:/\\${/,push:[{token:\"entity.name.function\",regex:/}/,next:\"pop\"},{defaultToken:\"keyword.other\"}],comment:\"js outcalls\"},{token:\"constant.numeric\",regex:/[0-9]*\\.[0-9]*\\.[0-9]*/,comment:\"semver\"},{token:\"constant.language.fslLanguage\",regex:\"(?:graph_layout|machine_name|machine_author|machine_license|machine_comment|machine_language|machine_version|machine_reference|npm_name|graph_layout|on_init|on_halt|on_end|on_terminate|on_finalize|on_transition|on_action|on_stochastic_action|on_legal|on_main|on_forced|on_validation|on_validation_failure|on_transition_refused|on_forced_transition_refused|on_action_refused|on_enter|on_exit|start_states|end_states|terminal_states|final_states|fsl_version)\\\\s*:\"},{token:\"keyword.control.transition.fslArrow\",regex:/<->|<-|->|<=>|=>|<=|<~>|~>|<~|<-=>|<=->|<-~>|<~->|<=~>|<~=>/},{token:\"constant.numeric.fslProbability\",regex:/[0-9]+%/,comment:\"edge probability annotation\"},{token:\"constant.character.fslAction\",regex:/\\'[^']*\\'/,comment:\"action annotation\"},{token:\"string.quoted.double.fslLabel.doublequoted\",regex:/\\\"[^\"]*\\\"/,comment:\"fsl label annotation\"},{token:\"entity.name.tag.fslLabel.atom\",regex:/[a-zA-Z0-9_.+&()#@!?,]/,comment:\"fsl label annotation\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"fsl\",\"fsl_state\"],name:\"FSL\",scopeName:\"source.fsl\"},r.inherits(s,i),t.FSLHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/fsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsl_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./fsl_highlight_rules\").FSLHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/fsl\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-ftl.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/ftl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"\\\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|upper_case|word_list|xhtml|xml\",t=\"c|round|floor|ceiling\",n=\"iso_[a-z_]+\",r=\"first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk\",i=\"keys|values\",s=\"children|parent|root|ancestors|node_name|node_type|node_namespace\",o=\"byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|eval|has_content|interpret|is_[a-z_]+|namespacenew\",u=e+t+n+r+i+s+o,a=\"default|exists|if_exists|web_safe\",f=\"data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|now|output_encoding|template_name|url_escaping_charset|vars|version\",l=\"gt|gte|lt|lte|as|in|using\",c=\"true|false\",h=\"encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|attributes\";this.$rules={start:[{token:\"constant.character.entity\",regex:/&[^;]+;/},{token:\"support.function\",regex:\"\\\\?(\"+u+\")\"},{token:\"support.function.deprecated\",regex:\"\\\\?(\"+a+\")\"},{token:\"language.variable\",regex:\"\\\\.(?:\"+f+\")\"},{token:\"constant.language\",regex:\"\\\\b(\"+c+\")\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\b(?:\"+l+\")\\\\b\"},{token:\"entity.other.attribute-name\",regex:h},{token:\"string\",regex:/['\"]/,next:\"qstring\"},{token:function(e){return e.match(\"^[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?$\")?\"constant.numeric\":\"variable\"},regex:/[\\w.+\\-]+/},{token:\"keyword.operator\",regex:\"!|\\\\.|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qstring:[{token:\"constant.character.escape\",regex:'\\\\\\\\[nrtvef\\\\\\\\\"$]'},{token:\"string\",regex:/['\"]/,next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(o,s);var u=function(){i.call(this);var e=\"assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|setting|stop|switch|t|visit\",t=[{token:\"comment\",regex:\"<#--\",next:\"ftl-dcomment\"},{token:\"string.interpolated\",regex:\"\\\\${\",push:\"ftl-start\"},{token:\"keyword.function\",regex:\"</?#(\"+e+\")\",push:\"ftl-start\"},{token:\"keyword.other\",regex:\"</?@[a-zA-Z\\\\.]+\",push:\"ftl-start\"}],n=[{token:\"keyword\",regex:\"/?>\",next:\"pop\"},{token:\"string.interpolated\",regex:\"}\",next:\"pop\"}];for(var r in this.$rules)this.$rules[r].unshift.apply(this.$rules[r],t);this.embedRules(o,\"ftl-\",n,[\"start\"]),this.addRules({\"ftl-dcomment\":[{token:\"comment\",regex:\"-->\",next:\"pop\"},{defaultToken:\"comment\"}]}),this.normalizeRules()};r.inherits(u,i),t.FtlHighlightRules=u}),define(\"ace/mode/ftl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ftl_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ftl_highlight_rules\").FtlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.$id=\"ace/mode/ftl\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-gcode.js",
    "content": "define(\"ace/mode/gcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"IF|DO|WHILE|ENDWHILE|CALL|ENDIF|SUB|ENDSUB|GOTO|REPEAT|ENDREPEAT|CALL\",t=\"PI\",n=\"ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\(.*\\\\)\"},{token:\"comment\",regex:\"([N])([0-9]+)\"},{token:\"string\",regex:\"([G])([0-9]+\\\\.?[0-9]?)\"},{token:\"string\",regex:\"([M])([0-9]+\\\\.?[0-9]?)\"},{token:\"constant.numeric\",regex:\"([-+]?([0-9]*\\\\.?[0-9]+\\\\.?))|(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\"},{token:r,regex:\"[A-Z]\"},{token:\"keyword.operator\",regex:\"EQ|LT|GT|NE|GE|LE|OR|XOR\"},{token:\"paren.lparen\",regex:\"[\\\\[]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.GcodeHighlightRules=s}),define(\"ace/mode/gcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gcode_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./gcode_highlight_rules\").GcodeHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.$id=\"ace/mode/gcode\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-gherkin.js",
    "content": "define(\"ace/mode/gherkin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\",o=function(){var e=[{name:\"en\",labels:\"Feature|Background|Scenario(?: Outline)?|Examples\",keywords:\"Given|When|Then|And|But\"}],t=e.map(function(e){return e.labels}).join(\"|\"),n=e.map(function(e){return e.keywords}).join(\"|\");this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:(?:[1-9]\\\\d*)|(?:0))\"},{token:\"comment\",regex:\"#.*$\"},{token:\"keyword\",regex:\"(?:\"+t+\"):|(?:\"+n+\")\\\\b\"},{token:\"keyword\",regex:\"\\\\*\"},{token:\"string\",regex:'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"text\",regex:\"^\\\\s*(?=@[\\\\w])\",next:[{token:\"text\",regex:\"\\\\s+\"},{token:\"variable.parameter\",regex:\"@[\\\\w]+\"},{token:\"empty\",regex:\"\",next:\"start\"}]},{token:\"comment\",regex:\"<[^>]+>\"},{token:\"comment\",regex:\"\\\\|(?=.)\",next:\"table-item\"},{token:\"comment\",regex:\"\\\\|$\",next:\"start\"}],qqstring3:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],\"table-item\":[{token:\"comment\",regex:/$/,next:\"start\"},{token:\"comment\",regex:/\\|/},{token:\"string\",regex:/\\\\./},{defaultToken:\"string\"}]},this.normalizeRules()};r.inherits(o,i),t.GherkinHighlightRules=o}),define(\"ace/mode/gherkin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gherkin_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./gherkin_highlight_rules\").GherkinHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/gherkin\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=\"  \",s=this.getTokenizer().getLineTokens(t,e),o=s.tokens;return console.log(e),t.match(\"[ ]*\\\\|\")&&(r+=\"| \"),o.length&&o[o.length-1].type==\"comment\"?r:(e==\"start\"&&(t.match(\"Scenario:|Feature:|Scenario Outline:|Background:\")?r+=i:t.match(\"(Given|Then).+(:)$|Examples:\")?r+=i:t.match(\"\\\\*.+\")&&(r+=\"* \")),r)}}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-gitignore.js",
    "content": "define(\"ace/mode/gitignore_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:/^\\s*#.*$/},{token:\"keyword\",regex:/^\\s*!.*$/}]},this.normalizeRules()};s.metaData={fileTypes:[\"gitignore\"],name:\"Gitignore\"},r.inherits(s,i),t.GitignoreHighlightRules=s}),define(\"ace/mode/gitignore\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gitignore_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./gitignore_highlight_rules\").GitignoreHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/gitignore\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-glsl.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/glsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,s=function(){var e=\"attribute|const|uniform|varying|break|continue|do|for|while|if|else|in|out|inout|float|int|void|bool|true|false|lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|samplerCube|struct\",t=\"radians|degrees|sin|cos|tan|asin|acos|atan|pow|exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|normalize|faceforward|reflect|refract|matrixCompMult|lessThan|lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|texture2DProjLod|textureCube|textureCubeLod|gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|gl_DepthRangeParameters|gl_DepthRange|gl_Position|gl_PointSize|gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData\",n=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t},\"identifier\");this.$rules=(new i).$rules,this.$rules.start.forEach(function(e){typeof e.token==\"function\"&&(e.token=n)})};r.inherits(s,i),t.glslHighlightRules=s}),define(\"ace/mode/glsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/glsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./glsl_highlight_rules\").glslHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.$id=\"ace/mode/glsl\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-gobstones.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/gobstones_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"program|procedure|function|interactive|if|then|else|switch|repeat|while|foreach|in|not|div|mod|Skip|return\",t=\"False|True\",n=\"Poner|Sacar|Mover|IrAlBorde|VaciarTablero|nroBolitas|hayBolitas|puedeMover|siguiente|previo|opuesto|minBool|maxBool|minDir|maxDir|minColor|maxColor\",r=\"Verde|Rojo|Azul|Negro|Norte|Sur|Este|Oeste\",s=this.createKeywordMapper({keyword:e,\"constant.language\":t,\"support.function\":n,\"support.type\":r},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{token:\"comment\",regex:\"#.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:True|False)\\\\b\"},{token:\"keyword.operator\",regex:\":=|\\\\.\\\\.|,|;|\\\\|\\\\||\\\\/\\\\/|\\\\+|\\\\-|\\\\^|\\\\*|>|<|>=|=>|==|&&\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.GobstonesHighlightRules=o}),define(\"ace/mode/gobstones\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/gobstones_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./gobstones_highlight_rules\").GobstonesHighlightRules,o=function(){i.call(this),this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/gobstones\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-golang.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/golang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"else|break|case|return|goto|if|const|select|continue|struct|default|switch|for|range|func|import|package|chan|defer|fallthrough|go|interface|map|range|select|type|var\",t=\"string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error\",n=\"new|close|cap|copy|panic|panicln|print|println|len|make|delete|real|recover|imag|append\",r=\"nil|true|false|iota\",s=this.createKeywordMapper({keyword:e,\"constant.language\":r,\"support.function\":n,\"support.type\":t},\"\"),o=\"\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u{4}|U\\\\h{6}|[abfnrtv'\\\"\\\\\\\\])\".replace(/\\\\h/g,\"[a-fA-F\\\\d]\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:/\"(?:[^\"\\\\]|\\\\.)*?\"/},{token:\"string\",regex:\"`\",next:\"bqstring\"},{token:\"constant.numeric\",regex:\"'(?:[^\\\\'\\ud800-\\udbff]|[\\ud800-\\udbff][\\udc00-\\udfff]|\"+o.replace('\"',\"\")+\")'\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:[\"keyword\",\"text\",\"entity.name.function\"],regex:\"(func)(\\\\s+)([a-zA-Z_$][a-zA-Z0-9_$]*)\\\\b\"},{token:function(e){return e[e.length-1]==\"(\"?[{type:s(e.slice(0,-1))||\"support.function\",value:e.slice(0,-1)},{type:\"paren.lparen\",value:e.slice(-1)}]:s(e)||\"identifier\"},regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\\\\(?\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],bqstring:[{token:\"string\",regex:\"`\",next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.GolangHighlightRules=o}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/golang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/golang_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./golang_highlight_rules\").GolangHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new a,this.$behaviour=new u};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/golang\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-graphqlschema.js",
    "content": "define(\"ace/mode/graphqlschema_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"type|interface|union|enum|schema|input|implements|extends|scalar\",t=\"Int|Float|String|ID|Boolean\",n=this.createKeywordMapper({keyword:e,\"storage.type\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.GraphQLSchemaHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/graphqlschema\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/graphqlschema_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./graphqlschema_highlight_rules\").GraphQLSchemaHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/graphqlschema\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-groovy.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/groovy_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"assert|with|abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|def|float|native|super|while\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"support.function\":n,\"constant.language\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"\"\"',next:\"qqstring\"},{token:\"string\",regex:\"'''\",next:\"qstring\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\?:|\\\\?\\\\.|\\\\*\\\\.|<=>|=~|==~|\\\\.@|\\\\*\\\\.@|\\\\.&|as|in|is|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"constant.language.escape\",regex:/\\\\(?:u[0-9A-Fa-f]{4}|.|$)/},{token:\"constant.language.escape\",regex:/\\$[\\w\\d]+/},{token:\"constant.language.escape\",regex:/\\$\\{[^\"\\}]+\\}?/},{token:\"string\",regex:'\"{3,5}',next:\"start\"},{token:\"string\",regex:\".+?\"}],qstring:[{token:\"constant.language.escape\",regex:/\\\\(?:u[0-9A-Fa-f]{4}|.|$)/},{token:\"string\",regex:\"'{3,5}\",next:\"start\"},{token:\"string\",regex:\".+?\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.GroovyHighlightRules=o}),define(\"ace/mode/groovy\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/groovy_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./groovy_highlight_rules\").GroovyHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/groovy\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-haml.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),define(\"ace/mode/haml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./ruby_highlight_rules\"),o=s.RubyHighlightRules,u=function(){i.call(this),this.$rules={start:[{token:\"comment.block\",regex:/^\\/$/,next:\"comment\"},{token:\"comment.block\",regex:/^\\-#$/,next:\"comment\"},{token:\"comment.line\",regex:/\\/\\s*.*/},{token:\"comment.line\",regex:/-#\\s*.*/},{token:\"keyword.other.doctype\",regex:\"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"},s.qString,s.qqString,s.tString,{token:\"meta.tag.haml\",regex:/(%[\\w:\\-]+)/},{token:\"keyword.attribute-name.class.haml\",regex:/\\.[\\w-]+/},{token:\"keyword.attribute-name.id.haml\",regex:/#[\\w-]+/,next:\"element_class\"},s.constantNumericHex,s.constantNumericFloat,s.constantOtherSymbol,{token:\"text\",regex:/=|-|~/,next:\"embedded_ruby\"}],element_class:[{token:\"keyword.attribute-name.class.haml\",regex:/\\.[\\w-]+/},{token:\"punctuation.section\",regex:/\\{/,next:\"element_attributes\"},s.constantOtherSymbol,{token:\"empty\",regex:\"$|(?!\\\\.|#|\\\\{|\\\\[|=|-|~|\\\\/])\",next:\"start\"}],element_attributes:[s.constantOtherSymbol,s.qString,s.qqString,s.tString,s.constantNumericHex,s.constantNumericFloat,{token:\"punctuation.section\",regex:/$|\\}/,next:\"start\"}],embedded_ruby:[s.constantNumericHex,s.constantNumericFloat,s.instanceVariable,s.qString,s.qqString,s.tString,{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},{token:(new o).getKeywords(),regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:[\"keyword\",\"text\",\"text\"],regex:\"(?:do|\\\\{)(?: \\\\|[^|]+\\\\|)?$\",next:\"start\"},{token:[\"text\"],regex:\"^$\",next:\"start\"},{token:[\"text\"],regex:\"^(?!.*\\\\|\\\\s*$)\",next:\"start\"}],comment:[{token:\"comment.block\",regex:/^$/,next:\"start\"},{token:\"comment.block\",regex:/\\s+.*/}]},this.normalizeRules()};r.inherits(u,i),t.HamlHighlightRules=u}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/haml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haml_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haml_highlight_rules\").HamlHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/haml\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-handlebars.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/handlebars_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";function s(e,t){return t.splice(0,3),t.shift()||\"start\"}var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,o=function(){i.call(this);var e={regex:\"(?={{)\",push:\"handlebars\"};for(var t in this.$rules)this.$rules[t].unshift(e);this.$rules.handlebars=[{token:\"comment.start\",regex:\"{{!--\",push:[{token:\"comment.end\",regex:\"--}}\",next:s},{defaultToken:\"comment\"}]},{token:\"comment.start\",regex:\"{{!\",push:[{token:\"comment.end\",regex:\"}}\",next:s},{defaultToken:\"comment\"}]},{token:\"support.function\",regex:\"{{{\",push:[{token:\"support.function\",regex:\"}}}\",next:s},{token:\"variable.parameter\",regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"}]},{token:\"storage.type.start\",regex:\"{{[#\\\\^/&]?\",push:[{token:\"storage.type.end\",regex:\"}}\",next:s},{token:\"variable.parameter\",regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"}]}],this.normalizeRules()};r.inherits(o,i),t.HandlebarsHighlightRules=o}),define(\"ace/mode/behaviour/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour/xml\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour/xml\").XmlBehaviour,s=function(){i.call(this)};r.inherits(s,i),t.HtmlBehaviour=s}),define(\"ace/mode/handlebars\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/handlebars_highlight_rules\",\"ace/mode/behaviour/html\",\"ace/mode/folding/html\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./handlebars_highlight_rules\").HandlebarsHighlightRules,o=e(\"./behaviour/html\").HtmlBehaviour,u=e(\"./folding/html\").FoldMode,a=function(){i.call(this),this.HighlightRules=s,this.$behaviour=new o};r.inherits(a,i),function(){this.blockComment={start:\"{{!--\",end:\"--}}\"},this.$id=\"ace/mode/handlebars\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-haskell.js",
    "content": "define(\"ace/mode/haskell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"punctuation.definition.entity.haskell\",\"keyword.operator.function.infix.haskell\",\"punctuation.definition.entity.haskell\"],regex:\"(`)([a-zA-Z_']*?)(`)\",comment:\"In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).\"},{token:\"constant.language.unit.haskell\",regex:\"\\\\(\\\\)\"},{token:\"constant.language.empty-list.haskell\",regex:\"\\\\[\\\\]\"},{token:\"keyword.other.haskell\",regex:\"\\\\b(module|signature)\\\\b\",push:[{token:\"keyword.other.haskell\",regex:\"\\\\bwhere\\\\b\",next:\"pop\"},{include:\"#module_name\"},{include:\"#module_exports\"},{token:\"invalid\",regex:\"[a-z]+\"},{defaultToken:\"meta.declaration.module.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"\\\\bclass\\\\b\",push:[{token:\"keyword.other.haskell\",regex:\"\\\\bwhere\\\\b\",next:\"pop\"},{token:\"support.class.prelude.haskell\",regex:\"\\\\b(?:Monad|Functor|Eq|Ord|Read|Show|Num|(?:Frac|Ra)tional|Enum|Bounded|Real(?:Frac|Float)?|Integral|Floating)\\\\b\"},{token:\"entity.other.inherited-class.haskell\",regex:\"[A-Z][A-Za-z_']*\"},{token:\"variable.other.generic-type.haskell\",regex:\"\\\\b[a-z][a-zA-Z0-9_']*\\\\b\"},{defaultToken:\"meta.declaration.class.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"\\\\binstance\\\\b\",push:[{token:\"keyword.other.haskell\",regex:\"\\\\bwhere\\\\b|$\",next:\"pop\"},{include:\"#type_signature\"},{defaultToken:\"meta.declaration.instance.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"import\",push:[{token:\"meta.import.haskell\",regex:\"$|;|^\",next:\"pop\"},{token:\"keyword.other.haskell\",regex:\"qualified|as|hiding\"},{include:\"#module_name\"},{include:\"#module_exports\"},{defaultToken:\"meta.import.haskell\"}]},{token:[\"keyword.other.haskell\",\"meta.deriving.haskell\"],regex:\"(deriving)(\\\\s*\\\\()\",push:[{token:\"meta.deriving.haskell\",regex:\"\\\\)\",next:\"pop\"},{token:\"entity.other.inherited-class.haskell\",regex:\"\\\\b[A-Z][a-zA-Z_']*\"},{defaultToken:\"meta.deriving.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"\\\\b(?:deriving|where|data|type|case|of|let|in|newtype|default)\\\\b\"},{token:\"keyword.operator.haskell\",regex:\"\\\\binfix[lr]?\\\\b\"},{token:\"keyword.control.haskell\",regex:\"\\\\b(?:do|if|then|else)\\\\b\"},{token:\"constant.numeric.float.haskell\",regex:\"\\\\b(?:[0-9]+\\\\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\\\b\",comment:\"Floats are always decimal\"},{token:\"constant.numeric.haskell\",regex:\"\\\\b(?:[0-9]+|0(?:[xX][0-9a-fA-F]+|[oO][0-7]+))\\\\b\"},{token:[\"meta.preprocessor.c\",\"punctuation.definition.preprocessor.c\",\"meta.preprocessor.c\"],regex:\"^(\\\\s*)(#)(\\\\s*\\\\w+)\",comment:'In addition to Haskell\\'s \"native\" syntax, GHC permits the C preprocessor to be run on a source file.'},{include:\"#pragma\"},{token:\"punctuation.definition.string.begin.haskell\",regex:'\"',push:[{token:\"punctuation.definition.string.end.haskell\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.haskell\",regex:\"\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\\\"'\\\\&])\"},{token:\"constant.character.escape.octal.haskell\",regex:\"\\\\\\\\o[0-7]+|\\\\\\\\x[0-9A-Fa-f]+|\\\\\\\\[0-9]+\"},{token:\"constant.character.escape.control.haskell\",regex:\"\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]\"},{defaultToken:\"string.quoted.double.haskell\"}]},{token:[\"punctuation.definition.string.begin.haskell\",\"string.quoted.single.haskell\",\"constant.character.escape.haskell\",\"constant.character.escape.octal.haskell\",\"constant.character.escape.hexadecimal.haskell\",\"constant.character.escape.control.haskell\",\"punctuation.definition.string.end.haskell\"],regex:\"(')(?:([\\\\ -\\\\[\\\\]-~])|(\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\\\"'\\\\&]))|(\\\\\\\\o[0-7]+)|(\\\\\\\\x[0-9A-Fa-f]+)|(\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]))(')\"},{token:[\"meta.function.type-declaration.haskell\",\"entity.name.function.haskell\",\"meta.function.type-declaration.haskell\",\"keyword.other.double-colon.haskell\"],regex:\"^(\\\\s*)([a-z_][a-zA-Z0-9_']*|\\\\([|!%$+\\\\-.,=</>]+\\\\))(\\\\s*)(::)\",push:[{token:\"meta.function.type-declaration.haskell\",regex:\"$\",next:\"pop\"},{include:\"#type_signature\"},{defaultToken:\"meta.function.type-declaration.haskell\"}]},{token:\"support.constant.haskell\",regex:\"\\\\b(?:Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\\\(\\\\)|\\\\[\\\\])\\\\b\"},{token:\"constant.other.haskell\",regex:\"\\\\b[A-Z]\\\\w*\\\\b\"},{include:\"#comments\"},{token:\"support.function.prelude.haskell\",regex:\"\\\\b(?:abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\\\b\"},{include:\"#infix_op\"},{token:\"keyword.operator.haskell\",regex:\"[|!%$?~+:\\\\-.=</>\\\\\\\\]+\",comment:\"In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.\"},{token:\"punctuation.separator.comma.haskell\",regex:\",\"}],\"#block_comment\":[{token:\"punctuation.definition.comment.haskell\",regex:\"\\\\{-(?!#)\",push:[{include:\"#block_comment\"},{token:\"punctuation.definition.comment.haskell\",regex:\"-\\\\}\",next:\"pop\"},{defaultToken:\"comment.block.haskell\"}]}],\"#comments\":[{token:\"punctuation.definition.comment.haskell\",regex:\"--.*\",push_:[{token:\"comment.line.double-dash.haskell\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-dash.haskell\"}]},{include:\"#block_comment\"}],\"#infix_op\":[{token:\"entity.name.function.infix.haskell\",regex:\"\\\\([|!%$+:\\\\-.=</>]+\\\\)|\\\\(,+\\\\)\"}],\"#module_exports\":[{token:\"meta.declaration.exports.haskell\",regex:\"\\\\(\",push:[{token:\"meta.declaration.exports.haskell.end\",regex:\"\\\\)\",next:\"pop\"},{token:\"entity.name.function.haskell\",regex:\"\\\\b[a-z][a-zA-Z_']*\"},{token:\"storage.type.haskell\",regex:\"\\\\b[A-Z][A-Za-z_']*\"},{token:\"punctuation.separator.comma.haskell\",regex:\",\"},{include:\"#infix_op\"},{token:\"meta.other.unknown.haskell\",regex:\"\\\\(.*?\\\\)\",comment:\"So named because I don't know what to call this.\"},{defaultToken:\"meta.declaration.exports.haskell.end\"}]}],\"#module_name\":[{token:\"support.other.module.haskell\",regex:\"[A-Z][A-Za-z._']*\"}],\"#pragma\":[{token:\"meta.preprocessor.haskell\",regex:\"\\\\{-#\",push:[{token:\"meta.preprocessor.haskell\",regex:\"#-\\\\}\",next:\"pop\"},{token:\"keyword.other.preprocessor.haskell\",regex:\"\\\\b(?:LANGUAGE|UNPACK|INLINE)\\\\b\"},{defaultToken:\"meta.preprocessor.haskell\"}]}],\"#type_signature\":[{token:[\"meta.class-constraint.haskell\",\"entity.other.inherited-class.haskell\",\"meta.class-constraint.haskell\",\"variable.other.generic-type.haskell\",\"meta.class-constraint.haskell\",\"keyword.other.big-arrow.haskell\"],regex:\"(\\\\(\\\\s*)([A-Z][A-Za-z]*)(\\\\s+)([a-z][A-Za-z_']*)(\\\\)\\\\s*)(=>)\"},{include:\"#pragma\"},{token:\"keyword.other.arrow.haskell\",regex:\"->\"},{token:\"keyword.other.big-arrow.haskell\",regex:\"=>\"},{token:\"support.type.prelude.haskell\",regex:\"\\\\b(?:Int(?:eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(?:Error)?)\\\\b\"},{token:\"variable.other.generic-type.haskell\",regex:\"\\\\b[a-z][a-zA-Z0-9_']*\\\\b\"},{token:\"storage.type.haskell\",regex:\"\\\\b[A-Z][a-zA-Z0-9_']*\\\\b\"},{token:\"support.constant.unit.haskell\",regex:\"\\\\(\\\\)\"},{include:\"#comments\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"hs\"],keyEquivalent:\"^~H\",name:\"Haskell\",scopeName:\"source.haskell\"},r.inherits(s,i),t.HaskellHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/haskell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haskell_highlight_rules\").HaskellHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment=null,this.$id=\"ace/mode/haskell\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-haskell_cabal.js",
    "content": "define(\"ace/mode/haskell_cabal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"^\\\\s*--.*$\"},{token:[\"keyword\"],regex:/^(\\s*\\w.*?)(:(?:\\s+|$))/},{token:\"constant.numeric\",regex:/[\\d_]+(?:(?:[\\.\\d_]*)?)/},{token:\"constant.language.boolean\",regex:\"(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"},{token:\"markup.heading\",regex:/^(\\w.*)$/}]}};r.inherits(s,i),t.CabalHighlightRules=s}),define(\"ace/mode/folding/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.isHeading=function(e,t){var n=\"markup.heading\",r=e.getTokens(t)[0];return t==0||r&&r.type.lastIndexOf(n,0)===0},this.getFoldWidget=function(e,t,n){if(this.isHeading(e,n))return\"start\";if(t===\"markbeginend\"&&!/^\\s*$/.test(e.getLine(n))){var r=e.getLength();while(++n<r)if(!/^\\s*$/.test(e.getLine(n)))break;if(n==r||this.isHeading(e,n))return\"end\"}return\"\"},this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(this.isHeading(e,n)){while(++n<o)if(this.isHeading(e,n)){n--;break}a=n;if(a>u)while(a>u&&/^\\s*$/.test(e.getLine(a)))a--;if(a>u){var f=e.getLine(a).length;return new s(u,i,a,f)}}else if(this.getFoldWidget(e,t,n)===\"end\"){var a=n,f=e.getLine(a).length;while(--n>=0)if(this.isHeading(e,n))break;var r=e.getLine(n),i=r.length;return new s(n,i,a,f)}}}.call(o.prototype)}),define(\"ace/mode/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_cabal_highlight_rules\",\"ace/mode/folding/haskell_cabal\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haskell_cabal_highlight_rules\").CabalHighlightRules,o=e(\"./folding/haskell_cabal\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment=null,this.$id=\"ace/mode/haskell_cabal\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-haxe.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/haxe_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std\",t=\"null|true|false\",n=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({<]\"},{token:\"paren.rparen\",regex:\"[\\\\])}>]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.HaxeHighlightRules=o}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/haxe\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haxe_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haxe_highlight_rules\").HaxeHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/haxe\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-hjson.js",
    "content": "define(\"ace/mode/hjson_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comments\"},{include:\"#rootObject\"},{include:\"#value\"}],\"#array\":[{token:\"paren.lparen\",regex:/\\[/,push:[{token:\"paren.rparen\",regex:/\\]/,next:\"pop\"},{include:\"#value\"},{include:\"#comments\"},{token:\"text\",regex:/,|$/},{token:\"invalid.illegal\",regex:/[^\\s\\]]/},{defaultToken:\"array\"}]}],\"#comments\":[{token:[\"comment.punctuation\",\"comment.line\"],regex:/(#)(.*$)/},{token:\"comment.punctuation\",regex:/\\/\\*/,push:[{token:\"comment.punctuation\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block\"}]},{token:[\"comment.punctuation\",\"comment.line\"],regex:/(\\/\\/)(.*$)/}],\"#constant\":[{token:\"constant\",regex:/\\b(?:true|false|null)\\b/}],\"#keyname\":[{token:\"keyword\",regex:/(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*(?=:)/}],\"#mstring\":[{token:\"string\",regex:/'''/,push:[{token:\"string\",regex:/'''/,next:\"pop\"},{defaultToken:\"string\"}]}],\"#number\":[{token:\"constant.numeric\",regex:/-?(?:0|[1-9]\\d*)(?:(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)?/,comment:\"handles integer and decimal numbers\"}],\"#object\":[{token:\"paren.lparen\",regex:/\\{/,push:[{token:\"paren.rparen\",regex:/\\}/,next:\"pop\"},{include:\"#keyname\"},{include:\"#value\"},{token:\"text\",regex:/:/},{token:\"text\",regex:/,/},{defaultToken:\"paren\"}]}],\"#rootObject\":[{token:\"paren\",regex:/(?=\\s*(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*:)/,push:[{token:\"paren.rparen\",regex:/---none---/,next:\"pop\"},{include:\"#keyname\"},{include:\"#value\"},{token:\"text\",regex:/:/},{token:\"text\",regex:/,/},{defaultToken:\"paren\"}]}],\"#string\":[{token:\"string\",regex:/\"/,push:[{token:\"string\",regex:/\"/,next:\"pop\"},{token:\"constant.language.escape\",regex:/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/},{token:\"invalid.illegal\",regex:/\\\\./},{defaultToken:\"string\"}]}],\"#ustring\":[{token:\"string\",regex:/\\b[^:,0-9\\-\\{\\[\\}\\]\\s].*$/}],\"#value\":[{include:\"#constant\"},{include:\"#number\"},{include:\"#string\"},{include:\"#array\"},{include:\"#object\"},{include:\"#comments\"},{include:\"#mstring\"},{include:\"#ustring\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"hjson\"],foldingStartMarker:\"(?x:     # turn on extended mode\\n              ^    # a line beginning with\\n              \\\\s*    # some optional space\\n              [{\\\\[]  # the start of an object or array\\n              (?!    # but not followed by\\n              .*   # whatever\\n              [}\\\\]]  # and the close of an object or array\\n              ,?   # an optional comma\\n              \\\\s*  # some optional space\\n              $    # at the end of the line\\n              )\\n              |    # ...or...\\n              [{\\\\[]  # the start of an object or array\\n              \\\\s*    # some optional space\\n              $    # at the end of the line\\n            )\",foldingStopMarker:\"(?x:   # turn on extended mode\\n             ^    # a line beginning with\\n             \\\\s*  # some optional space\\n             [}\\\\]]  # and the close of an object or array\\n             )\",keyEquivalent:\"^~J\",name:\"Hjson\",scopeName:\"source.hjson\"},r.inherits(s,i),t.HjsonHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/hjson\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/hjson_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./hjson_highlight_rules\").HjsonHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/hjson\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-html.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v});                (function() {\n                    window.require([\"ace/mode/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-html_elixir.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"meta.module.elixir\",\"keyword.control.module.elixir\",\"meta.module.elixir\",\"entity.name.type.module.elixir\"],regex:\"^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc (?:~[a-z])?\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc ~[A-Z]\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc (?:~[a-z])?'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc ~[A-Z]'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.false\",regex:\"@(?:module|type)?doc false\",comment:\"@doc false is treated as documentation\"},{token:\"comment.documentation.string\",regex:'@(?:module|type)?doc \"',push:[{token:\"comment.documentation.string\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.string\"}],comment:\"@doc with string is treated as documentation\"},{token:\"keyword.control.elixir\",regex:\"\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\"},{token:\"keyword.operator.elixir\",regex:\"\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b\",comment:\" as above, just doesn't need a 'end' and does a logic operation\"},{token:\"constant.language.elixir\",regex:\"\\\\b(?:nil|true|false)\\\\b(?![?!])\"},{token:\"variable.language.elixir\",regex:\"\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.readwrite.module.elixir\"],regex:\"(@)([a-zA-Z_]\\\\w*)\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.anonymous.elixir\"],regex:\"(&)(\\\\d*)\"},{token:\"variable.other.constant.elixir\",regex:\"\\\\b[A-Z]\\\\w*\\\\b\"},{token:\"constant.numeric.elixir\",regex:\"\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\"},{token:\"punctuation.definition.constant.elixir\",regex:\":'\",push:[{token:\"punctuation.definition.constant.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.single-quoted.elixir\"}]},{token:\"punctuation.definition.constant.elixir\",regex:':\"',push:[{token:\"punctuation.definition.constant.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.double-quoted.elixir\"}]},{token:\"punctuation.definition.string.begin.elixir\",regex:\"(?:''')\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>''')\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"^\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.heredoc.elixir\"}],comment:\"Single-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.elixir\"}],comment:\"single quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'(?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'(?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'\"',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.elixir\"}],comment:\"double quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[a-z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[a-z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[A-Z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[A-Z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:[\"punctuation.definition.constant.elixir\",\"constant.other.symbol.elixir\"],regex:\"(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)\",comment:\"symbols\"},{token:\"punctuation.definition.constant.elixir\",regex:\"(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)\",comment:\"symbols\"},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(#)(.*)\"},{token:\"constant.numeric.elixir\",regex:\"\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",comment:'\\n\t\t\tmatches questionmark-letters.\\n\\n\t\t\texamples (1st alternation = hex):\\n\t\t\t?\\\\x1     ?\\\\x61\\n\\n\t\t\texamples (2rd alternation = escaped):\\n\t\t\t?\\\\n      ?\\\\b\\n\\n\t\t\texamples (3rd alternation = normal):\\n\t\t\t?a       ?A       ?0 \\n\t\t\t?*       ?\"       ?( \\n\t\t\t?.       ?#\\n\t\t\t\\n\t\t\tthe negative lookbehind prevents against matching\\n\t\t\tp(42.tainted?)\\n\t\t\t'},{token:\"keyword.operator.assignment.augmented.elixir\",regex:\"\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=\"},{token:\"keyword.operator.comparison.elixir\",regex:\"===?|!==?|<=?|>=?\"},{token:\"keyword.operator.bitwise.elixir\",regex:\"\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}\"},{token:\"keyword.operator.logical.elixir\",regex:\"!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\",originalRegex:\"(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\"},{token:\"keyword.operator.arithmetic.elixir\",regex:\"\\\\*|\\\\+|\\\\-|/\"},{token:\"keyword.operator.other.elixir\",regex:\"\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>\"},{token:\"keyword.operator.assignment.elixir\",regex:\"=\"},{token:\"punctuation.separator.other.elixir\",regex:\":\"},{token:\"punctuation.separator.statement.elixir\",regex:\"\\\\;\"},{token:\"punctuation.separator.object.elixir\",regex:\",\"},{token:\"punctuation.separator.method.elixir\",regex:\"\\\\.\"},{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{|\\\\}\"},{token:\"punctuation.section.array.elixir\",regex:\"\\\\[|\\\\]\"},{token:\"punctuation.section.function.elixir\",regex:\"\\\\(|\\\\)\"}],\"#escaped_char\":[{token:\"constant.character.escape.elixir\",regex:\"\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)\"}],\"#interpolated_elixir\":[{token:[\"source.elixir.embedded.source\",\"source.elixir.embedded.source.empty\"],regex:\"(#\\\\{)(\\\\})\"},{todo:{token:\"punctuation.section.embedded.elixir\",regex:\"#\\\\{\",push:[{token:\"punctuation.section.embedded.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"},{include:\"$self\"},{defaultToken:\"source.elixir.embedded.source\"}]}}],\"#nest_curly_and_self\":[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{\",push:[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"}]},{include:\"$self\"}],\"#regex_sub\":[{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{token:[\"punctuation.definition.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"punctuation.definition.arbitrary-repitition.elixir\"],regex:\"(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})\"},{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\[(?:\\\\^?\\\\])?\",push:[{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\]\",next:\"pop\"},{include:\"#escaped_char\"},{defaultToken:\"string.regexp.character-class.elixir\"}]},{token:\"punctuation.definition.group.elixir\",regex:\"\\\\(\",push:[{token:\"punctuation.definition.group.elixir\",regex:\"\\\\)\",next:\"pop\"},{include:\"#regex_sub\"},{defaultToken:\"string.regexp.group.elixir\"}]},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)\",originalRegex:\"(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$\",comment:\"We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.\"}]},this.normalizeRules()};s.metaData={comment:\"Textmate bundle for Elixir Programming Language.\",fileTypes:[\"ex\",\"exs\"],firstLineMatch:\"^#!/.*\\\\belixir\",foldingStartMarker:\"(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$\",foldingStopMarker:\"^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)\",keyEquivalent:\"^~E\",name:\"Elixir\",scopeName:\"source.elixir\"},r.inherits(s,i),t.ElixirHighlightRules=s}),define(\"ace/mode/html_elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/elixir_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./elixir_highlight_rules\").ElixirHighlightRules,o=function(){i.call(this);var e=[{regex:\"<%%|%%>\",token:\"constant.language.escape\"},{token:\"comment.start.eex\",regex:\"<%#\",push:[{token:\"comment.end.eex\",regex:\"%>\",next:\"pop\",defaultToken:\"comment\"}]},{token:\"support.elixir_tag\",regex:\"<%+(?!>)[-=]?\",push:\"elixir-start\"}],t=[{token:\"support.elixir_tag\",regex:\"%>\",next:\"pop\"},{token:\"comment\",regex:\"#(?:[^%]|%[^>])*\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(s,\"elixir-\",t,[\"start\"]),this.normalizeRules()};r.inherits(o,i),t.HtmlElixirHighlightRules=o}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./elixir_highlight_rules\").ElixirHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/elixir\"}.call(u.prototype),t.Mode=u}),define(\"ace/mode/html_elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_elixir_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/elixir\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_elixir_highlight_rules\").HtmlElixirHighlightRules,s=e(\"./html\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./elixir\").Mode,f=function(){s.call(this),this.HighlightRules=i,this.createModeDelegates({\"js-\":o,\"css-\":u,\"elixir-\":a})};r.inherits(f,s),function(){this.$id=\"ace/mode/html_elixir\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-html_ruby.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),define(\"ace/mode/html_ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=function(){i.call(this);var e=[{regex:\"<%%|%%>\",token:\"constant.language.escape\"},{token:\"comment.start.erb\",regex:\"<%#\",push:[{token:\"comment.end.erb\",regex:\"%>\",next:\"pop\",defaultToken:\"comment\"}]},{token:\"support.ruby_tag\",regex:\"<%+(?!>)[-=]?\",push:\"ruby-start\"}],t=[{token:\"support.ruby_tag\",regex:\"%>\",next:\"pop\"},{token:\"comment\",regex:\"#(?:[^%]|%[^>])*\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(s,\"ruby-\",t,[\"start\"]),this.normalizeRules()};r.inherits(o,i),t.HtmlRubyHighlightRules=o}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/html_ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_ruby_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_ruby_highlight_rules\").HtmlRubyHighlightRules,s=e(\"./html\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./ruby\").Mode,f=function(){s.call(this),this.HighlightRules=i,this.createModeDelegates({\"js-\":o,\"css-\":u,\"ruby-\":a})};r.inherits(f,s),function(){this.$id=\"ace/mode/html_ruby\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-ini.js",
    "content": "define(\"ace/mode/ini_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=\"\\\\\\\\(?:[\\\\\\\\0abtrn;#=:]|x[a-fA-F\\\\d]{4})\",o=function(){this.$rules={start:[{token:\"punctuation.definition.comment.ini\",regex:\"#.*\",push_:[{token:\"comment.line.number-sign.ini\",regex:\"$|^\",next:\"pop\"},{defaultToken:\"comment.line.number-sign.ini\"}]},{token:\"punctuation.definition.comment.ini\",regex:\";.*\",push_:[{token:\"comment.line.semicolon.ini\",regex:\"$|^\",next:\"pop\"},{defaultToken:\"comment.line.semicolon.ini\"}]},{token:[\"keyword.other.definition.ini\",\"text\",\"punctuation.separator.key-value.ini\"],regex:\"\\\\b([a-zA-Z0-9_.-]+)\\\\b(\\\\s*)(=)\"},{token:[\"punctuation.definition.entity.ini\",\"constant.section.group-title.ini\",\"punctuation.definition.entity.ini\"],regex:\"^(\\\\[)(.*?)(\\\\])\"},{token:\"punctuation.definition.string.begin.ini\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.ini\",regex:\"'\",next:\"pop\"},{token:\"constant.language.escape\",regex:s},{defaultToken:\"string.quoted.single.ini\"}]},{token:\"punctuation.definition.string.begin.ini\",regex:'\"',push:[{token:\"constant.language.escape\",regex:s},{token:\"punctuation.definition.string.end.ini\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.ini\"}]}]},this.normalizeRules()};o.metaData={fileTypes:[\"ini\",\"conf\"],keyEquivalent:\"^~I\",name:\"Ini\",scopeName:\"source.ini\"},r.inherits(o,i),t.IniHighlightRules=o}),define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/,this.getFoldWidgetRange=function(e,t,n){var r=this.foldingStartMarker,s=e.getLine(n),o=s.match(r);if(!o)return;var u=o[1]+\".\",a=s.length,f=e.getLength(),l=n,c=n;while(++n<f){s=e.getLine(n);if(/^\\s*$/.test(s))continue;o=s.match(r);if(o&&o[1].lastIndexOf(u,0)!==0)break;c=n}if(c>l){var h=e.getLine(c).length;return new i(l,a,c,h)}}}.call(o.prototype)}),define(\"ace/mode/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ini_highlight_rules\",\"ace/mode/folding/ini\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ini_highlight_rules\").IniHighlightRules,o=e(\"./folding/ini\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.blockComment=null,this.$id=\"ace/mode/ini\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-io.js",
    "content": "define(\"ace/mode/io_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"text\",\"meta.empty-parenthesis.io\"],regex:\"(\\\\()(\\\\))\",comment:\"we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob\"},{token:[\"text\",\"meta.comma-parenthesis.io\"],regex:\"(\\\\,)(\\\\))\",comment:\"We want to do the same for ,) -- Seckar; same as above -- Rob\"},{token:\"keyword.control.io\",regex:\"\\\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\\\b\"},{token:\"punctuation.definition.comment.io\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.io\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.io\"}]},{token:\"punctuation.definition.comment.io\",regex:\"//\",push:[{token:\"comment.line.double-slash.io\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-slash.io\"}]},{token:\"punctuation.definition.comment.io\",regex:\"#\",push:[{token:\"comment.line.number-sign.io\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.number-sign.io\"}]},{token:\"variable.language.io\",regex:\"\\\\b(?:self|sender|target|proto|protos|parent)\\\\b\",comment:\"I wonder if some of this isn't variable.other.language? --Allan; scoping this as variable.language to match Objective-C's handling of 'self', which is inconsistent with C++'s handling of 'this' but perhaps intentionally so -- Rob\"},{token:\"keyword.operator.io\",regex:\"<=|>=|=|:=|\\\\*|\\\\||\\\\|\\\\||\\\\+|-|/|&|&&|>|<|\\\\?|@|@@|\\\\b(?:and|or)\\\\b\"},{token:\"constant.other.io\",regex:\"\\\\bGL[\\\\w_]+\\\\b\"},{token:\"support.class.io\",regex:\"\\\\b[A-Z](?:\\\\w+)?\\\\b\"},{token:\"support.function.io\",regex:\"\\\\b(?:clone|call|init|method|list|vector|block|\\\\w+(?=\\\\s*\\\\())\\\\b\"},{token:\"support.function.open-gl.io\",regex:\"\\\\bgl(?:u|ut)?[A-Z]\\\\w+\\\\b\"},{token:\"punctuation.definition.string.begin.io\",regex:'\"\"\"',push:[{token:\"punctuation.definition.string.end.io\",regex:'\"\"\"',next:\"pop\"},{token:\"constant.character.escape.io\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.triple.io\"}]},{token:\"punctuation.definition.string.begin.io\",regex:'\"',push:[{token:\"punctuation.definition.string.end.io\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.io\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.io\"}]},{token:\"constant.numeric.io\",regex:\"\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"variable.other.global.io\",regex:\"Lobby\\\\b\"},{token:\"constant.language.io\",regex:\"\\\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\\\b\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"io\"],keyEquivalent:\"^~I\",name:\"Io\",scopeName:\"source.io\"},r.inherits(s,i),t.IoHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/io\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/io_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./io_highlight_rules\").IoHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/io\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-jack.js",
    "content": "define(\"ace/mode/jack_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"string\",regex:'\"',next:\"string2\"},{token:\"string\",regex:\"'\",next:\"string1\"},{token:\"constant.numeric\",regex:\"-?0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"(?:0|[-+]?[1-9][0-9]*)\\\\b\"},{token:\"constant.binary\",regex:\"<[0-9A-Fa-f][0-9A-Fa-f](\\\\s+[0-9A-Fa-f][0-9A-Fa-f])*>\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"constant.language.null\",regex:\"null\\\\b\"},{token:\"storage.type\",regex:\"(?:Integer|Boolean|Null|String|Buffer|Tuple|List|Object|Function|Coroutine|Form)\\\\b\"},{token:\"keyword\",regex:\"(?:return|abort|vars|for|delete|in|is|escape|exec|split|and|if|elif|else|while)\\\\b\"},{token:\"language.builtin\",regex:\"(?:lines|source|parse|read-stream|interval|substr|parseint|write|print|range|rand|inspect|bind|i-values|i-pairs|i-map|i-filter|i-chunk|i-all\\\\?|i-any\\\\?|i-collect|i-zip|i-merge|i-each)\\\\b\"},{token:\"comment\",regex:\"--.*$\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"storage.form\",regex:\"@[a-z]+\"},{token:\"constant.other.symbol\",regex:\":+[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?\"},{token:\"variable\",regex:\"[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?\"},{token:\"keyword.operator\",regex:\"\\\\|\\\\||\\\\^\\\\^|&&|!=|==|<=|<|>=|>|\\\\+|-|\\\\*|\\\\/|\\\\^|\\\\%|\\\\#|\\\\!\"},{token:\"text\",regex:\"\\\\s+\"}],string1:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/},{token:\"string\",regex:\"[^'\\\\\\\\]+\"},{token:\"string\",regex:\"'\",next:\"start\"},{token:\"string\",regex:\"\",next:\"start\"}],string2:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:'\"',next:\"start\"},{token:\"string\",regex:\"\",next:\"start\"}]}};r.inherits(s,i),t.JackHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/jack\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jack_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jack_highlight_rules\").JackHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"--\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e==\"start\"){var i=t.match(/^.*[\\{\\(\\[]\\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/jack\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-jade.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(e){return\"(?:[^\"+s.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},f=function(){u.call(this);var e={token:\"support.function\",regex:/^\\s*(```+[^`]*|~~~+[^~]*)$/,onMatch:function(e,t,n,i){var s=e.match(/^(\\s*)([`~]+)(.*)/),o=/[\\w-]+|$/.exec(s[3])[0];return r[o]||(o=\"\"),n.unshift(\"githubblock\",[],[s[1],s[2],o],t),this.token},next:\"githubblock\"},t=[{token:\"support.function\",regex:\".*\",onMatch:function(e,t,n,i){var s=n[1],o=n[2][0],u=n[2][1],a=n[2][2],f=/^(\\s*)(`+|~+)\\s*$/.exec(e);if(f&&f[1].length<o.length+3&&f[2].length>=u.length&&f[2][0]==u[0])return n.splice(0,3),this.next=n.shift(),this.token;this.next=\"\";if(a&&r[a]){var l=r[a].getTokenizer().getLineTokens(e,s.slice(0));return n[1]=l.state,l.tokens}return this.token}}];this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s|$)/,next:\"header\"},e,{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\s*\\\\[)(\"+a(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\!?\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+a('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},e,{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:t}),this.normalizeRules()};i.inherits(f,o),t.MarkdownHighlightRules=f}),define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./css_highlight_rules\"),u=function(){var e=i.arrayToMap(o.supportType.split(\"|\")),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unquote\".split(\"|\")),n=i.arrayToMap(o.supportConstant.split(\"|\")),r=i.arrayToMap(o.supportConstantColor.split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),u=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":u.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./css_highlight_rules\"),o=function(){var e=\"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|or|and|when|not\",t=e.split(\"|\"),n=s.supportType.split(\"|\"),r=this.createKeywordMapper({\"support.constant\":s.supportConstant,keyword:e,\"support.constant.color\":s.supportConstantColor,\"support.constant.fonts\":s.supportConstantFonts},\"identifier\",!0),i=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+i+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:i},{token:[\"support.function\",\"paren.lparen\",\"string\",\"paren.rparen\"],regex:\"(url)(\\\\()(.*)(\\\\))\"},{token:[\"support.function\",\"paren.lparen\"],regex:\"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"},{token:function(e){return t.indexOf(e.toLowerCase())>-1?\"keyword\":\"variable\"},regex:\"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"},{token:\"variable\",regex:\"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"},{token:function(e,t){return n.indexOf(e.toLowerCase())>-1?[\"support.type.property\",\"text\"]:[\"support.type.unknownProperty\",\"text\"]},regex:\"([a-z0-9-_]+)(\\\\s*:)\"},{token:\"keyword\",regex:\"&\"},{token:r,regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z_][a-z0-9-_]*\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(o,i),t.LessHighlightRules=o}),define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=\"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\",t=\"this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|own|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes|yield|export|import|default\",n=\"true|false|null|undefined|NaN|Infinity\",r=\"case|const|function|var|void|with|enum|implements|interface|let|package|private|protected|public|static\",i=\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\",s=\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|\",o=\"window|arguments|prototype|document\",u=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"invalid.illegal\":r,\"language.support.class\":i,\"language.support.function\":s,\"variable.language\":o},\"identifier\"),a={token:[\"paren.lparen\",\"variable.parameter\",\"paren.rparen\",\"text\",\"storage.type\"],regex:/(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source},f=/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"},{stateName:\"qdoc\",token:\"string\",regex:\"'''\",next:[{token:\"string\",regex:\"'''\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqdoc\",token:\"string\",regex:'\"\"\"',next:[{token:\"string\",regex:'\"\"\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qstring\",token:\"string\",regex:\"'\",next:[{token:\"string\",regex:\"'\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqstring\",token:\"string.start\",regex:'\"',next:[{token:\"string.end\",regex:'\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"js\",token:\"string\",regex:\"`\",next:[{token:\"string\",regex:\"`\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{regex:\"[{}]\",onMatch:function(e,t,n){this.next=\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift()||\"\";if(this.next.indexOf(\"string\")!=-1)return\"paren.string\"}return\"paren\"}},{token:\"string.regex\",regex:\"///\",next:\"heregex\"},{token:\"string.regex\",regex:/(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/},{token:\"comment\",regex:\"###(?!#)\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:[\"punctuation.operator\",\"text\",\"identifier\"],regex:\"(\\\\.)(\\\\s*)(\"+r+\")\"},{token:\"punctuation.operator\",regex:\"\\\\.{1,3}\"},{token:[\"keyword\",\"text\",\"language.support.class\",\"text\",\"keyword\",\"text\",\"language.support.class\"],regex:\"(class)(\\\\s+)(\"+e+\")(?:(\\\\s+)(extends)(\\\\s+)(\"+e+\"))?\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\"].concat(a.token),regex:\"(\"+e+\")(\\\\s*)([=:])(\\\\s*)\"+a.regex},a,{token:\"variable\",regex:\"@(?:\"+e+\")?\"},{token:u,regex:e},{token:\"punctuation.operator\",regex:\"\\\\,|\\\\.\"},{token:\"storage.type\",regex:\"[\\\\-=]>\"},{token:\"keyword.operator\",regex:\"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"},{token:\"paren.lparen\",regex:\"[({[]\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?///[imgy]{0,4}\",next:\"start\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{token:\"string.regex\",regex:\"\\\\S+\"}],comment:[{token:\"comment\",regex:\"###\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),define(\"ace/mode/jade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/scss_highlight_rules\",\"ace/mode/less_highlight_rules\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){\"use strict\";function l(e,t){return{token:\"entity.name.function.jade\",regex:\"^\\\\s*\\\\:\"+e,next:t+\"start\"}}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,o=e(\"./scss_highlight_rules\").ScssHighlightRules,u=e(\"./less_highlight_rules\").LessHighlightRules,a=e(\"./coffee_highlight_rules\").CoffeeHighlightRules,f=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,c=function(){var e=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={start:[{token:\"keyword.control.import.include.jade\",regex:\"\\\\s*\\\\binclude\\\\b\"},{token:\"keyword.other.doctype.jade\",regex:\"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"},{onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/^\\s*\\/\\//,next:\"comment_block\"},l(\"markdown\",\"markdown-\"),l(\"sass\",\"sass-\"),l(\"less\",\"less-\"),l(\"coffee\",\"coffee-\"),{token:[\"storage.type.function.jade\",\"entity.name.function.jade\",\"punctuation.definition.parameters.begin.jade\",\"variable.parameter.function.jade\",\"punctuation.definition.parameters.end.jade\"],regex:\"^(\\\\s*mixin)( [\\\\w\\\\-]+)(\\\\s*\\\\()(.*?)(\\\\))\"},{token:[\"storage.type.function.jade\",\"entity.name.function.jade\"],regex:\"^(\\\\s*mixin)( [\\\\w\\\\-]+)\"},{token:\"source.js.embedded.jade\",regex:\"^\\\\s*(?:-|=|!=)\",next:\"js-start\"},{token:\"string.interpolated.jade\",regex:\"[#!]\\\\{[^\\\\}]+\\\\}\"},{token:\"meta.tag.any.jade\",regex:/^\\s*(?!\\w+:)(?:[\\w-]+|(?=\\.|#)])/,next:\"tag_single\"},{token:\"suport.type.attribute.id.jade\",regex:\"#\\\\w+\"},{token:\"suport.type.attribute.class.jade\",regex:\"\\\\.\\\\w+\"},{token:\"punctuation\",regex:\"\\\\s*(?:\\\\()\",next:\"tag_attributes\"}],comment_block:[{regex:/^\\s*(?:\\/\\/)?/,onMatch:function(e,t,n){return e.length<=n[1]?e.slice(-1)==\"/\"?(n[1]=e.length-2,this.next=\"\",\"comment\"):(n.shift(),n.shift(),this.next=n.shift(),\"text\"):(this.next=\"\",\"comment\")},next:\"start\"},{defaultToken:\"comment\"}],tag_single:[{token:\"entity.other.attribute-name.class.jade\",regex:\"\\\\.[\\\\w-]+\"},{token:\"entity.other.attribute-name.id.jade\",regex:\"#[\\\\w-]+\"},{token:[\"text\",\"punctuation\"],regex:\"($)|((?!\\\\.|#|=|-))\",next:\"start\"}],tag_attributes:[{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:[\"entity.other.attribute-name.jade\",\"punctuation\"],regex:\"([a-zA-Z:\\\\.-]+)(=)?\",next:\"attribute_strings\"},{token:\"punctuation\",regex:\"\\\\)\",next:\"start\"}],attribute_strings:[{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:\"(?=\\\\S)\",next:\"tag_attributes\"}],qqstring:[{token:\"constant.language.escape\",regex:e},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"tag_attributes\"}],qstring:[{token:\"constant.language.escape\",regex:e},{token:\"string\",regex:\"[^'\\\\\\\\]+\"},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"tag_attributes\"}]},this.embedRules(f,\"js-\",[{token:\"text\",regex:\".$\",next:\"start\"}])};r.inherits(c,i),t.JadeHighlightRules=c}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/jade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jade_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jade_highlight_rules\").JadeHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/jade\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-java.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|var\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{regex:\"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",token:\"keyword\",next:[{regex:\"{\",token:\"paren.lparen\",next:[{regex:\"}\",token:\"paren.rparen\",next:\"start\"},{regex:\"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",token:\"keyword\"}]},{token:\"text\",regex:\"\\\\s+\"},{token:\"identifier\",regex:\"\\\\w+\"},{token:\"punctuation.operator\",regex:\".\"},{token:\"text\",regex:\"\\\\s+\"},{regex:\"\",next:\"start\"}]},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.JavaHighlightRules=o}),define(\"ace/mode/folding/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./cstyle\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.importRegex=/^import /,this.getCStyleFoldWidget=this.getFoldWidget,this.getFoldWidget=function(e,t,n){if(t===\"markbegin\"){var r=e.getLine(n);if(this.importRegex.test(r))if(n==0||!this.importRegex.test(e.getLine(n-1)))return\"start\"}return this.getCStyleFoldWidget(e,t,n)},this.getCstyleFoldWidgetRange=this.getFoldWidgetRange,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n),o=i.match(this.importRegex);if(!o||t!==\"markbegin\")return this.getCstyleFoldWidgetRange(e,t,n,r);var u=o[0].length,a=e.getLength(),f=n,l=n;while(++n<a){var i=e.getLine(n);if(i.match(/^\\s*$/))continue;if(!i.match(this.importRegex))break;l=n}if(l>f){var c=e.getLine(l).length;return new s(f,u,l,c)}}}.call(o.prototype)}),define(\"ace/mode/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/java_highlight_rules\",\"ace/mode/folding/java\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./java_highlight_rules\").JavaHighlightRules,o=e(\"./folding/java\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/java\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-javascript.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-json.js",
    "content": "define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"text\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./json_highlight_rules\").JsonHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e==\"start\"){var i=t.match(/^.*[\\{\\(\\[]\\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/json_worker\",\"JsonWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/json\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-jsoniq.js",
    "content": "define(\"ace/mode/xquery/jsoniq_lexer\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=function r(t,n,i){function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(s)return s(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return o(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var s=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)o(i[u]);return o(i[0])}({\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(e,t,n){var r=n.JSONiqTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 80:f(80);break;case 94:f(94);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 143:f(143);break;case 150:f(150);break;case 163:f(163);break;case 183:f(183);break;case 189:f(189);break;case 214:f(214);break;case 224:f(224);break;case 225:f(225);break;case 241:f(241);break;case 242:f(242);break;case 251:f(251);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 17:f(17);break;case 68:f(68);break;case 71:f(71);break;case 72:f(72);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 91:f(91);break;case 92:f(92);break;case 101:f(101);break;case 103:f(103);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 111:f(111);break;case 116:f(116);break;case 117:f(117);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 127:f(127);break;case 129:f(129);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 151:f(151);break;case 157:f(157);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 168:f(168);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 180:f(180);break;case 182:f(182);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 216:f(216);break;case 217:f(217);break;case 218:f(218);break;case 222:f(222);break;case 227:f(227);break;case 233:f(233);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 248:f(248);break;case 252:f(252);break;case 254:f(254);break;case 258:f(258);break;case 264:f(264);break;case 268:f(268);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 260:f(260);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 28:f(28);break;case 68:f(68);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 92:f(92);break;case 103:f(103);break;case 107:f(107);break;case 111:f(111);break;case 116:f(116);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 218:f(218);break;case 222:f(222);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 264:f(264);break;case 268:f(268);break;case 71:f(71);break;case 72:f(72);break;case 80:f(80);break;case 91:f(91);break;case 94:f(94);break;case 101:f(101);break;case 106:f(106);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 117:f(117);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 127:f(127);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 143:f(143);break;case 150:f(150);break;case 151:f(151);break;case 157:f(157);break;case 163:f(163);break;case 168:f(168);break;case 180:f(180);break;case 182:f(182);break;case 183:f(183);break;case 189:f(189);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 214:f(214);break;case 216:f(216);break;case 217:f(217);break;case 224:f(224);break;case 225:f(225);break;case 227:f(227);break;case 233:f(233);break;case 241:f(241);break;case 242:f(242);break;case 248:f(248);break;case 251:f(251);break;case 254:f(254);break;case 258:f(258);break;case 260:f(260);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=30)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 58:f(58);break;case 57:f(57);break;case 59:f(59);break;case 43:f(43);break;case 45:f(45);break;case 44:f(44);break;case 37:f(37);break;case 41:f(41);break;case 277:f(277);break;case 274:f(274);break;case 42:f(42);break;case 46:f(46);break;case 52:f(52);break;case 65:f(65);break;case 66:f(66);break;case 49:f(49);break;case 51:f(51);break;case 56:f(56);break;case 54:f(54);break;case 36:f(36);break;case 276:f(276);break;case 40:f(40);break;case 5:f(5);break;case 4:f(4);break;case 6:f(6);break;case 15:f(15);break;case 16:f(16);break;case 18:f(18);break;case 19:f(19);break;case 20:f(20);break;case 8:f(8);break;case 9:f(9);break;case 7:f(7);break;case 35:f(35);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 61:f(61);break;case 53:f(53);break;case 29:f(29);break;case 60:f(60);break;case 37:f(37);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 25:f(25);break;case 9:f(9);break;case 10:f(10);break;case 58:f(58);break;case 57:f(57);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;default:f(35)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 23:f(23);break;case 27:f(27);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 22:f(22);break;case 26:f(26);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 14:f(14);break;case 67:f(67);break;default:f(35)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 12:f(12);break;case 50:f(50);break;default:f(35)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 13:f(13);break;case 62:f(62);break;case 63:f(63);break;default:f(35)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 11:f(11);break;case 38:f(38);break;case 39:f(39);break;default:f(35)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 55:f(55);break;case 44:f(44);break;case 32:f(32);break;default:f(35)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(6);switch(y){case 33:f(33);break;case 34:f(34);break;case 55:f(55);break;case 44:f(44);break;default:f(35)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(5);switch(y){case 3:f(3);break;case 2:f(2);break;case 1:f(1);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 21:f(21);break;case 31:f(31);break;case 23:f(23);break;case 24:f(24);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<279;i+=32){var s=i,o=(i>>5)*2066+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,37,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37,37,37,37,37,37,37,37,37,37,37,37,31,31,37,37,37,37,37,37,37,66,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,37,31,37,31,31,37],r.INITIAL=[1,2,49155,57348,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,17408,19288,17439,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19074,36169,17439,36866,17466,36890,36866,22314,19105,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22182,19288,19121,36866,17466,18345,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19273,19552,19304,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19332,17423,19363,36866,17466,17537,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,18614,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19391,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19427,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36154,19288,19457,36866,17466,17740,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22780,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22375,22197,18469,36866,17466,36890,36866,21991,24018,22987,17556,17575,22288,17486,17509,17525,18373,21331,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,19485,19501,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19537,22390,19568,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19596,19611,19457,36866,17466,36890,36866,18246,19627,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22242,20553,19457,36866,17466,36890,36866,18648,30477,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36472,19288,19457,36866,17466,17809,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,21770,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19643,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19672,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20538,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,17975,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22345,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19726,19742,21529,24035,23112,26225,23511,27749,27397,24035,34360,24035,24036,23114,35166,23114,23114,19758,23511,35247,23511,23511,28447,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,19821,23511,23511,23511,23511,23512,19441,36539,24035,24035,24035,24035,19846,19869,23114,23114,23114,28618,32187,19892,23511,23511,23511,34585,20402,36647,24035,24035,24036,23114,33757,23114,23114,23029,20271,23511,27070,23511,23511,30562,24035,24035,29274,26576,23114,23114,31118,23036,29695,23511,23511,32431,23634,30821,24035,23110,19913,23114,23467,31261,23261,34299,19932,24035,32609,19965,35389,19984,27689,19830,29391,29337,20041,22643,35619,33728,20062,20121,20166,35100,26145,20211,23008,19876,20208,20227,25670,20132,26578,27685,20141,20243,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36094,19288,19457,36866,17466,21724,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22735,19552,20287,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22750,19288,21529,24035,23112,28056,23511,29483,28756,24035,24035,24035,24036,23114,23114,23114,23114,20327,23511,23511,23511,23511,31156,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,20371,23511,23511,23511,23511,27443,20395,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,29457,29700,23511,23511,23511,23511,33444,20402,24035,24035,24035,24036,23114,23114,23114,23114,28350,20421,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,20447,20475,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20523,22257,20569,20783,21715,17603,20699,20837,20614,20630,21149,20670,21405,17486,17509,17525,18373,19179,20695,20716,20732,20755,19194,18042,21641,20592,20779,20598,21412,17470,17591,20896,17468,17619,20799,20700,21031,20744,20699,20828,18075,21259,20581,20853,18048,20868,20884,17756,17784,17800,17825,17854,21171,21200,20931,20947,21378,20955,20971,18086,20645,21002,20986,18178,17960,18012,18381,18064,29176,21044,21438,21018,21122,21393,21060,21844,21094,20654,17493,18150,18166,18214,25967,20763,21799,21110,21830,21138,21246,21301,18336,18361,21165,21187,20812,21216,21232,21287,21317,18553,21347,21363,21428,21454,21271,21483,21499,21515,21575,21467,18712,21591,21633,21078,18189,18198,20679,21657,21701,21074,21687,21740,21756,21786,21815,21860,21876,21892,21946,21962,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36457,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,36813,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,21981,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,22151,22007,18884,17900,17922,17944,18178,17960,18012,18381,18064,27898,17884,18890,17906,17928,22042,25022,18130,36931,36963,17493,18150,18166,22070,22112,25026,18134,36935,18262,18278,18294,18320,18336,18361,22142,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36109,19288,18469,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22167,19288,19457,36866,17466,17768,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22227,36487,22273,36866,17466,36890,36866,19316,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18749,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,22304,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19580,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22330,19089,19457,36866,17466,18721,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22765,19347,19457,36866,17466,36890,36866,18114,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34541,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,22540,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29908,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22561,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,23837,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22584,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36442,19288,21605,24035,23112,28137,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,31568,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22690,19288,19457,36866,17466,36890,36866,21991,27584,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,22659,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22360,19552,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22675,22811,19457,36866,17466,36890,36866,19133,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22827,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36064,19288,22865,22881,32031,22897,22913,22956,29939,24035,24035,24035,23003,23114,23114,23114,23024,22420,23511,23511,23511,23052,29116,23073,29268,24035,25563,26915,23106,23131,23114,23114,23159,23181,23197,23248,23511,23511,23282,23305,22493,32364,24035,33472,30138,26325,31770,33508,27345,33667,23114,23321,23473,23351,35793,36576,23511,23375,22500,24145,24035,29197,20192,24533,23440,23114,19017,23459,22839,23489,23510,23511,33563,23528,32076,25389,24035,26576,23561,23583,23114,32683,22516,23622,23655,23511,23634,35456,37144,23110,23683,34153,20499,32513,25824,23705,24035,24035,23111,23114,19874,27078,33263,19830,24035,23112,19872,27741,23266,24036,23114,30243,20507,32241,20150,31862,27464,35108,23727,23007,35895,34953,26578,27685,20141,24569,31691,19787,33967,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36427,19552,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,27027,26576,23114,23114,23114,31471,23756,22468,23511,23511,23511,34687,23772,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,23788,24035,24035,24035,21559,23828,23114,23114,23114,25086,22839,23853,23511,23511,23511,23876,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,31761,23909,23953,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36049,19288,21605,30825,23112,23987,23511,24003,31001,27617,24034,24035,24036,24052,24089,23114,23114,22420,24109,24168,23511,23511,29116,24188,27609,20017,29516,24035,26576,24222,19968,23114,24252,33811,22468,24270,33587,23511,24320,27443,22493,24035,24035,24035,24035,24339,23113,23114,23114,23114,28128,28618,29700,23511,23511,23511,28276,34564,20402,24035,24035,32929,24036,23114,23114,23114,24357,23029,22839,23511,23511,23511,24377,25645,24035,34112,24035,26576,23114,26643,23114,32683,22516,23511,25638,23511,23711,24035,24395,27809,23114,24414,20499,24432,30917,23628,24035,30680,23111,23114,30233,27078,25748,24452,24035,23112,19872,27741,23266,24036,23114,24475,19829,26577,26597,26154,24519,24556,24596,23007,20046,20132,26578,24634,20141,24569,31691,24679,24727,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36412,19288,21605,19943,34861,32618,26027,29483,32016,32050,36233,24776,35574,24801,24819,32671,31289,22420,24868,24886,20087,26849,29116,19803,24035,24035,24035,36228,26576,23114,23114,23114,24981,33811,22468,23511,23511,23511,29028,27443,22493,24923,27965,24035,24035,32797,24946,23443,23114,23114,29636,24997,22849,28252,23511,23511,23511,25042,25110,24035,24035,34085,24036,25133,23114,23114,25152,23029,22839,25169,23511,36764,23511,25645,30403,24035,25186,26576,31806,24093,25212,32683,22516,32713,26245,34293,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,32406,23111,23114,28676,30944,27689,25234,24035,23112,19872,37063,23266,24036,23114,30243,20379,26100,29218,20211,30105,25257,25284,23007,20046,20132,26578,27685,20141,24569,24834,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36034,19288,21671,25314,25072,25330,25346,25362,29939,29951,35288,29984,23812,27216,25405,25424,30456,22584,26292,25461,25480,31592,29116,25516,34963,25545,27007,25579,33937,25614,25661,25686,34872,25702,25718,25734,25769,25795,25811,25840,22493,26533,25856,24035,25876,30763,27481,25909,23114,28987,25936,25954,29700,25983,23511,31412,26043,26063,22568,29241,29592,26116,31216,35383,26170,34783,26194,26221,22839,26241,26261,22477,26283,26308,27306,31035,24655,26576,29854,33386,26341,32683,22516,32153,30926,26361,19996,26381,35463,26397,26424,34646,26478,35605,31386,26494,35567,31964,22940,23689,25218,30309,32289,19830,33605,23112,32109,27733,27084,24496,35886,35221,26525,36602,26549,26558,26574,26594,26613,26629,26666,26700,26578,27685,23740,24285,31691,26733,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36397,19552,18991,25887,28117,32618,26776,29483,29939,26802,24035,24035,24036,28664,23114,23114,23114,22420,30297,23511,23511,23511,29116,19803,24035,24035,24035,25559,26576,23114,23114,23114,30525,33811,22468,23511,23511,23511,28725,27443,22493,24035,24035,27249,24035,24035,23113,23114,23114,26827,23114,28618,29700,23511,23511,26845,23511,34564,20402,24035,24035,26979,24036,23114,23114,23114,24974,23029,22839,23511,23511,23511,26865,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,33305,24035,25598,23114,19874,34253,27689,19830,24035,23112,19872,27741,23266,24036,23114,26886,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,26931,24569,26439,26947,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36019,19288,26995,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,27043,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,27061,23511,23511,23511,23511,23512,24694,24035,24035,29978,24035,24035,23113,23114,33114,23114,23114,30010,29700,23511,35913,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,27155,26576,23114,23114,30447,23036,29695,23511,23511,30935,20099,24152,25529,27100,34461,27121,22625,29156,26009,27137,30422,31903,31655,28870,27171,32439,31731,19830,27232,22612,27265,26786,25494,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,20342,27288,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,27322,27339,28020,27361,27382,29939,24035,24035,32581,24036,23114,23114,23114,27425,22420,23511,23511,23511,27442,28306,19803,24035,24035,24035,24035,26710,23114,23114,23114,23114,32261,22468,23511,23511,23511,23511,35719,24694,29510,24035,24035,24035,24035,26717,23114,23114,23114,23114,28618,32217,23511,23511,23511,23511,34585,20402,24035,24035,24035,27459,23114,23114,23114,36252,23029,20271,23511,23511,23511,28840,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,27480,34483,28401,29761,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36382,19288,21605,27497,27517,28504,28898,27569,29939,29401,27600,27323,27633,19025,27662,23114,27705,22420,20483,27721,23511,27765,28306,19803,23540,24035,24610,27781,27805,26650,23114,28573,32990,25920,22468,26870,23511,26684,34262,34737,25057,34622,24035,24035,23971,24206,27825,27847,23114,23114,27865,27885,35766,27914,23511,23511,32766,32844,27934,28795,26909,27955,26092,27988,25445,28005,28036,28052,21965,23511,32196,19897,28072,28102,36534,21541,23801,28153,28180,28197,28221,23036,32695,28251,28268,28292,23667,34825,23930,24580,28322,28344,31627,28366,25996,23628,24035,24035,23111,23114,19874,27078,27689,35625,33477,33359,27674,28393,33992,24036,23114,30243,19829,28417,28433,28463,23008,19876,20208,23007,20046,20132,28489,28520,20141,24569,31691,19787,28550,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,28589,24035,24035,24035,24035,28608,23114,23114,23114,23114,28618,20431,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36004,19288,28634,31951,28565,28702,28718,28741,32544,20175,28792,32086,20105,28811,29059,29862,28856,22420,28886,30354,23359,28922,28306,28952,23888,26320,36506,24035,29331,28968,36609,23114,29003,31661,27061,30649,27366,23511,29023,27918,24694,24035,24035,23893,33094,30867,23113,23114,23114,29044,34184,30010,29700,23511,23511,29081,29102,34585,20402,27789,24035,24035,24036,23114,29132,23114,23114,23029,20271,23511,29153,23511,23511,30562,30174,24035,24035,27409,25438,23114,23114,29172,36668,31332,23511,23511,29192,30144,24035,23110,30203,23114,23467,31544,23261,23628,24035,22545,23111,23114,29213,27078,27689,29234,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,29257,23008,19876,20208,28768,29290,29320,34776,29353,20141,22435,29378,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36367,19288,21605,34616,19006,32618,31497,31507,36216,20184,24035,34393,29424,34668,23114,34900,29447,22420,30360,23511,37089,29473,28306,19803,29499,24398,24035,24035,26576,31799,29532,29550,23114,33811,22468,32298,29571,31184,23511,23512,37127,36628,29589,24035,24135,24035,23113,29608,23114,27831,29634,28618,29652,30037,23511,24172,29671,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,29555,29690,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,29719,24035,23110,29738,23114,23467,34035,29756,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,29777,34364,28181,30243,29799,31920,27272,27185,23008,31126,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29828,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35989,19552,19687,35139,28649,29878,29894,29924,29939,23224,23085,31969,24036,35173,24752,24803,23114,22420,31190,30318,24870,23511,28306,29967,23967,24035,24035,24035,26576,3e4,23114,23114,23114,33811,22468,30026,23511,23511,23511,23512,26078,24035,24035,24035,30053,37137,30071,23114,23114,33368,25136,28618,30723,23511,23511,37096,31356,34585,20402,30092,30127,30160,24036,35740,30219,24960,30259,23029,20271,34042,30285,30342,30376,23289,30055,30400,30419,30438,32640,33532,33514,30472,18792,26267,24323,23057,30493,23639,20008,30196,33188,30517,20075,23511,30541,23628,30578,33928,28776,30594,19874,30610,30637,19830,30677,27646,19872,25779,23266,23232,35016,30243,30696,29812,30712,30746,27206,30779,30807,23007,33395,20132,26578,27685,31703,22928,31691,19787,31079,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36352,19288,23335,30841,26131,30888,30904,30986,29939,24035,24704,31017,20025,23114,26178,31051,31095,22420,23511,22524,31142,31172,28534,31206,35497,25196,24035,28592,24503,23114,31239,31285,23114,31305,31321,31355,31372,31407,23511,30556,24694,24035,27501,19805,24035,24035,23113,23114,31428,24066,23114,28618,29700,23511,31837,18809,23511,34585,31448,24035,24035,24035,23090,23114,23114,23114,23114,31619,35038,23511,23511,23511,23511,33714,24035,33085,24035,29431,23114,31467,23114,23143,31487,23511,31523,23511,35195,36783,24035,30111,23567,23114,23467,31543,31560,23628,24035,24035,23111,23114,19874,30953,31584,34508,24035,31608,26345,37055,23266,31643,31677,31719,31747,31786,31822,26898,23008,19876,31859,23007,20046,20132,26578,27685,20141,24569,31691,31878,31936,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35974,19288,21605,27972,35663,31985,29655,32001,36715,24785,25893,23545,31912,19853,19916,25938,24540,22420,31843,29674,29573,32735,28936,19803,24035,24035,32047,24035,26576,23114,23114,27544,23114,33811,22468,23511,23511,32161,23511,23512,32066,24035,33313,24035,24035,24035,23113,27426,32102,23114,23114,28618,32125,23511,32144,23511,23511,33569,20402,24035,27045,24035,24036,23114,23114,28328,23114,30076,32177,23511,23511,30384,23511,30562,24035,24035,24035,26576,23114,23114,23114,23595,32212,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,22635,25753,32233,32257,32277,19829,26577,26597,20211,23008,19876,32322,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,32352,35285,32380,34196,33016,30661,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,32404,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,32422,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,30269,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,19949,24035,23111,32455,19874,31269,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36337,19552,19209,21617,26509,32475,32491,32529,29939,24035,32578,25241,32597,23114,32634,29007,32656,22420,23511,32729,26365,32751,28306,32788,32882,24035,24035,32813,36727,23114,33182,23114,27553,33235,32829,23511,32706,23511,28906,28377,26962,32881,32904,32898,32920,24035,32953,23114,32977,26408,23114,28164,33006,23511,33039,35774,23511,32306,20402,33076,30872,24035,24036,25408,33110,28979,23114,23029,20271,35835,33130,33054,23511,30562,33148,24035,24035,33167,23114,23114,33775,23036,20459,23511,23511,25464,24646,24035,24035,22446,23114,23114,25627,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,31391,33204,33220,33251,33287,26577,26597,20211,33329,19876,33345,23007,20046,20132,26578,27685,28473,22599,31691,33411,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35959,19288,21907,27243,29843,32618,33427,31507,29939,33460,34090,24035,24036,33493,24416,33530,23114,22420,33548,24379,33585,23511,28306,19803,33603,24202,24035,24035,25593,33749,28205,23114,23114,32388,22468,33853,33060,23511,23511,31339,33621,24035,24035,34397,24618,30757,33663,23114,23114,33683,35684,28618,26678,23511,23511,32506,33699,34585,20402,24035,32562,26973,24036,23114,23114,33377,33773,23029,20271,23511,23511,30621,23511,23860,24035,33791,21553,26576,36558,23114,33809,23036,32857,26047,23511,33827,23634,24035,24035,23110,23114,23114,31252,23511,33845,23628,24035,24459,23111,23114,33869,27078,30791,29783,24035,24742,19872,33895,23266,26462,19710,33879,33919,26577,26597,24123,24930,21930,20208,30501,33953,25268,20252,33983,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36322,19552,23390,33634,35154,34008,34024,34058,35544,34106,34128,26811,33151,34144,34169,34212,23114,34228,34244,34278,34315,23511,34331,34347,34380,34413,24035,24663,26576,34429,34453,34477,29534,33811,22468,34499,34524,34557,25170,34580,35436,23937,34601,24035,24341,26453,23113,34638,34662,23114,24236,28618,34684,34703,34729,23511,35352,34753,34799,24035,34815,32558,34848,34888,35814,34923,23165,29137,23606,30326,30730,34939,33023,30562,36848,34979,24035,24847,34996,23114,23114,35032,29695,35054,23511,23511,35091,33296,35124,24296,28235,24361,36276,32772,35067,35189,27301,30855,24852,22452,35211,35237,35316,25500,35270,23405,24304,35304,29362,24036,23114,35332,19829,26577,26597,20211,23008,19876,20208,35368,28823,23920,32336,35405,20141,24569,31691,35421,35479,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35944,22795,21605,33647,35877,35513,30962,35529,34073,35557,24035,24035,20405,31107,23114,23114,23114,35590,34713,23511,23511,23511,35641,19803,29408,32937,25298,24035,35657,23115,27849,24760,35679,26205,22468,23511,35700,24907,24901,35075,31893,34980,24035,24035,24035,24035,23113,35009,23114,23114,23114,28618,35716,30970,23511,23511,23511,34585,23215,24035,24035,24035,24036,35735,23114,23114,23114,27105,35756,35790,23511,23511,23511,35254,35446,24035,24035,31223,35809,23114,23114,23036,36825,35830,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,31031,20355,19872,33903,23266,24036,23114,28686,19829,26577,26597,20211,23008,23424,20208,24711,31065,24486,26578,27685,20141,19773,35851,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36307,19288,21605,35494,19702,32618,33437,31507,29939,25117,24035,27939,24036,27869,23114,26829,23114,22420,23494,23511,33132,23511,28306,19803,24035,34832,24035,24035,26576,23114,25153,23114,23114,33811,22468,23511,23511,35911,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35929,19288,21605,25860,23112,36185,23511,36201,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,26748,24035,24035,24035,24035,24035,36249,23114,23114,23114,23114,28618,28835,23511,23511,23511,23511,34585,20402,24035,27151,24035,26760,23114,27989,23114,23114,36268,20271,23511,24436,23511,29703,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36292,19288,21605,36503,21922,32618,34534,31507,36522,24035,33793,24035,35864,23114,23114,36555,23417,22420,23511,23511,36574,26020,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,36592,24035,24035,36625,24035,24035,23113,23114,32961,23114,23114,29618,29700,23511,29086,23511,23511,34585,20402,36644,24035,24035,24036,29740,23114,23114,23114,29065,36663,31527,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,31451,23112,36684,23511,36700,29939,24035,24035,24035,30185,23114,23114,23114,27526,22420,23511,23511,23511,32865,28306,19803,36743,24035,27017,24035,26576,27535,23114,31432,23114,33811,22468,33271,23511,32128,23511,23512,24694,24035,27196,24035,24035,24035,23113,32459,23114,23114,23114,28618,29700,33829,36762,23511,23511,34585,20402,24035,36746,24035,29722,23114,23114,34437,23114,34907,20271,23511,23511,18801,23511,23206,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,36837,24035,24035,33739,23114,23114,25094,23511,23261,23628,24035,36780,23111,24073,19874,27078,35344,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22720,19288,36799,36866,17466,36890,36864,21991,22211,22987,17556,17575,22288,17486,17509,17525,18373,17631,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22705,19288,19457,36866,17466,36890,36866,19375,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36124,19288,36951,36866,17466,36890,36866,21991,22404,22987,17556,17575,22288,17486,17509,17525,18373,18567,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36979,36995,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18027,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,21529,24035,23112,23033,23511,31507,25377,24035,24035,24035,24036,23114,23114,23114,23114,37040,23511,23511,23511,23511,28086,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,37079,23511,23511,23511,23511,23512,34766,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,37112,37160,18469,36866,17466,36890,36866,17656,37174,22987,17556,17575,22288,17486,17509,17525,18373,18537,22984,17553,17572,22285,18780,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,53264,18,49172,57366,24,8192,28,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,0,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,127011,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,3002368,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2576384,2215936,2215936,2215936,2416640,2424832,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2543616,2215936,2215936,2215936,2215936,2215936,2629632,2215936,2617344,2215936,2215936,2215936,2215936,2215936,2215936,2691072,2215936,2707456,2215936,2715648,2215936,2723840,2764800,2215936,2215936,2797568,2215936,2822144,2215936,2215936,2854912,2215936,2215936,2215936,2912256,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,180224,0,0,2174976,0,0,2170880,2617344,2170880,2170880,2170880,2170880,2170880,2170880,2691072,2170880,2707456,2170880,2715648,2170880,2723840,2764800,2170880,2170880,2797568,2170880,2170880,2797568,2170880,2822144,2170880,2170880,2854912,2170880,2170880,2170880,2912256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2609152,2215936,2215936,2215936,2215936,2215936,2215936,2654208,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,184599,280,0,2174976,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,544,0,546,0,0,2179072,0,0,0,552,0,0,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2158592,2158592,2232320,2232320,0,2240512,2240512,0,0,0,644,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2711552,2170880,2170880,2170880,2170880,2170880,2760704,2768896,2789376,2813952,2170880,2170880,2170880,2875392,2904064,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,167936,0,0,0,0,2174976,0,0,2215936,2215936,2514944,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2592768,2215936,2215936,2215936,2215936,2215936,2215936,2215936,32768,0,0,0,0,0,2174976,32768,0,2633728,2215936,2215936,2215936,2215936,2215936,2215936,2711552,2215936,2215936,2215936,2215936,2215936,2760704,2768896,2789376,2813952,2215936,2215936,2215936,2875392,2904064,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,65819,2215936,2215936,3031040,2215936,3055616,2215936,2215936,2215936,2215936,3092480,2215936,2215936,3125248,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2170880,2170880,2494464,2170880,2170880,0,0,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2641920,2170880,2170880,2170880,2699264,2170880,2727936,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3026944,2170880,2170880,3063808,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,2379776,2215936,2523136,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2596864,2215936,2621440,2215936,2215936,2641920,2215936,2215936,0,0,0,0,0,0,2179072,548,0,0,0,0,287,2170880,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2215936,2215936,2699264,2215936,2727936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2879488,2215936,2916352,2215936,2215936,0,0,0,0,188416,0,2179072,0,0,0,0,0,287,2170880,0,2171019,2171019,2171019,2400395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3031179,2171019,3055755,2171019,2171019,2215936,3133440,2215936,2215936,2215936,3162112,2215936,2215936,3182592,3186688,2215936,0,0,0,0,0,0,0,0,0,0,2171019,2171019,2171019,2171019,2171019,2171019,2523275,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2597003,2171019,2621579,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,4337664,28,2170880,2170880,2170880,2629632,2170880,2170880,2170880,2170880,2719744,2744320,2170880,2170880,2170880,2834432,2838528,2170880,2908160,2170880,2170880,2936832,2215936,2215936,2215936,2215936,2719744,2744320,2215936,2215936,2215936,2834432,2838528,2215936,2908160,2215936,2215936,2936832,2215936,2215936,2985984,2215936,2994176,2215936,2215936,3014656,2215936,3059712,3076096,3088384,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2445312,2215936,2465792,2473984,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171019,2171019,2494603,2171019,2171019,2215936,2215936,2215936,3215360,0,0,0,0,0,0,0,0,0,0,0,0,0,2379776,2170880,2170880,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3016168,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,124,124,0,128,128,2170880,2170880,2170880,3215360,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2535424,2539520,2170880,2170880,2588672,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,0,2387968,2392064,2170880,2170880,2433024,2170880,2170880,2170880,3170304,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,2215936,2215936,2215936,2535424,2539520,2215936,2215936,2588672,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,136,0,2215936,2215936,2920448,2215936,2215936,2215936,2990080,2215936,2215936,2215936,2215936,3051520,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3108864,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3026944,2215936,2215936,3063808,2215936,2215936,3112960,2215936,2215936,2215936,3170304,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2537049,2539520,2170880,2170880,2588672,2170880,2170880,2170880,1508,2170880,2170880,2170880,1512,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2686976,2748416,2170880,2170880,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3121152,2170880,2170880,3145728,3158016,3166208,2170880,2420736,2428928,2170880,2478080,2170880,2170880,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2646016,2670592,0,0,3145728,3158016,3166208,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,0,2170880,2215936,2215936,2580480,2215936,2605056,2637824,2215936,2215936,2686976,2748416,2215936,2215936,2215936,2924544,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,286,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2387968,2392064,2170880,2170880,2433024,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,1625,2170880,2170880,2580480,2170880,2605056,2637824,2170880,647,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2686976,0,0,2748416,2170880,2170880,0,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,0,0,28,28,2170880,3141632,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2170880,2420736,2428928,2752512,2756608,0,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2170880,3141632,2170880,2170880,2490368,2215936,2490368,2215936,2215936,2215936,2547712,2555904,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,245760,0,3129344,2170880,2170880,2490368,2170880,2170880,2170880,0,0,2547712,2555904,2170880,2170880,2170880,0,0,0,0,0,0,0,0,0,2220032,0,0,45056,0,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2158592,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1482,97,97,97,97,97,97,97,1354,97,97,97,97,97,97,97,97,1148,97,97,97,97,97,97,97,2584576,2170880,2170880,1512,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2170880,2850816,2170880,2170880,2170880,3022848,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,287,2170880,2215936,3022848,2170880,2441216,2170880,2527232,0,0,2170880,2600960,2170880,0,2850816,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2596864,2170880,2621440,2170880,2170880,2641920,2170880,2170880,2170880,3022848,2170880,2519040,2170880,2170880,2170880,2170880,2170880,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2170880,2170880,2170880,2514944,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2519040,0,2024,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,2024,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,2170880,2215936,2650112,2965504,2215936,0,0,2170880,2650112,2965504,2170880,2551808,2170880,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,141,45,45,67,67,67,67,67,224,67,67,238,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,0,2551808,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2977792,2977792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53264,18,49172,57366,24,8192,29,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,49172,0,0,0,24,24,24,0,28,28,28,28,102432,127,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,0,0,0,2220032,110630,0,0,0,114730,106539,136,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,4256099,4256099,24,24,0,28,28,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,0,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,2170880,2547712,2555904,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2215936,2215936,543,543,545,545,0,0,2179072,0,550,551,551,0,287,2171166,2171166,18,0,0,0,0,0,0,0,0,2220032,0,0,645,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,149,2584576,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2519040,0,0,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,0,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,53264,18,49172,57366,24,155648,28,102432,155648,155687,114730,106539,0,0,155648,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,0,0,2220032,0,94208,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,208896,18,278528,24,24,0,28,28,53264,18,159765,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,0,28,139394,28,28,102432,131,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,32768,53264,0,18,18,24,24,0,28,28,0,546,0,0,2183168,0,0,552,832,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2170880,2170880,2170880,2170880,2654208,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,1084,0,1088,0,1092,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,937,0,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,644,0,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,826,0,828,0,0,2183168,0,0,830,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2170880,2170880,2633728,2170880,2170880,2170880,2170880,2170880,2170880,2711552,2170880,2170880,2170880,2170880,2170880,2760704,53264,18,49172,57366,24,8192,28,172066,172032,110630,172066,106539,0,0,172032,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,102432,0,98304,0,0,2220032,110630,0,0,0,0,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,45056,0,0,0,53264,18,49172,57366,25,8192,30,102432,0,110630,114730,106539,0,0,176219,53264,18,18,49172,0,57366,0,124,124,124,0,128,128,128,128,102432,128,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,546,0,0,2183168,0,65536,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2646016,2670592,2752512,2756608,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,65536,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,143,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,67,1824,67,1826,67,67,67,67,17,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,120,121,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,67,67,37139,37139,24853,24853,0,0,2179072,548,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,45,45,2033,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,0,369,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,978,0,546,70179,0,2183168,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1013,67,67,67,67,67,67,67,67,67,67,473,67,67,67,67,483,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,97,97,1359,97,97,97,67,67,1584,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,1659,45,45,45,45,45,45,45,45,45,1667,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,45,1668,45,45,45,45,67,67,1694,67,67,67,67,67,67,67,67,67,67,67,67,67,774,67,67,1713,97,97,97,97,97,97,97,0,97,97,1723,97,97,97,97,0,45,45,45,45,45,45,1538,45,45,45,45,45,1559,45,45,1561,45,45,45,45,45,45,45,687,45,45,45,45,45,45,45,45,448,45,45,45,45,45,45,67,67,67,67,1771,1772,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,97,67,67,67,67,67,1821,67,67,67,67,67,67,1827,67,67,67,0,0,0,0,0,0,97,97,1614,97,97,97,97,97,603,97,97,605,97,97,608,97,97,97,97,0,1532,45,45,45,45,45,45,45,45,45,45,450,45,45,45,45,67,67,97,97,97,97,97,97,0,0,1839,97,97,97,97,0,0,97,97,97,97,97,45,45,45,45,45,45,45,67,67,67,67,67,67,67,97,1883,97,1885,97,0,1888,0,97,97,0,97,97,1848,97,97,97,97,1852,45,45,45,45,45,45,45,384,391,45,45,45,45,45,45,45,385,45,45,45,45,45,45,45,45,1237,45,45,45,45,45,45,67,0,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,1951,45,45,45,45,45,45,45,45,67,67,67,67,1963,97,2023,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,1994,67,1995,67,67,67,67,67,67,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,0,0,0,0,2220032,110630,0,0,0,114730,106539,137,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2793472,2805760,2170880,2830336,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,67,67,37139,37139,24853,24853,0,0,281,549,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,2031,2032,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1769,67,0,546,70179,549,549,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,1858,45,641,0,0,0,0,41606,926,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,456,67,0,0,0,1313,0,0,0,1096,1319,0,0,0,0,97,97,97,97,97,97,97,97,1110,97,97,97,97,67,67,67,67,1301,1476,0,0,0,0,1307,1478,0,0,0,0,0,0,0,0,97,97,97,97,1486,97,1487,97,1313,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,67,67,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,97,45,1853,45,1855,45,45,45,45,53264,18,49172,57366,26,8192,31,102432,0,110630,114730,106539,0,0,225368,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,18,49172,163840,57366,0,24,24,229376,0,28,28,28,229376,102432,0,0,0,0,2220167,110630,0,0,0,114730,106539,0,2171019,2171019,2171019,2171019,2592907,2171019,2171019,2171019,2171019,2633867,2171019,2171019,2171019,2171019,2171019,2171019,2654347,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3117195,2171019,2171019,2171019,2171019,2240641,0,0,0,0,0,0,0,0,368,0,140,2171019,2171019,2171019,2416779,2424971,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2617483,2171019,2171019,2642059,2171019,2171019,2171019,2699403,2171019,2728075,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3215499,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2171019,2822283,2171019,2171019,2855051,2171019,2171019,2171019,2912395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3002507,2171019,2171019,2215936,2215936,2494464,2215936,2215936,2215936,2171166,2171166,2416926,2425118,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2576670,2171166,2617630,2171166,2171166,2171166,2171166,2171166,2171166,2691358,2171166,2707742,2171166,2715934,2171166,2724126,2765086,2171166,2171166,2797854,2171166,2822430,2171166,2171166,2855198,2171166,2171166,2171166,2912542,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2793758,2806046,2171166,2830622,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3109150,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2543902,2171166,2171166,2171166,2171166,2171166,2629918,2793611,2805899,2171019,2830475,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,0,546,0,0,2183168,0,0,552,0,2171166,2171166,2171166,2400542,2171166,2171166,2171166,0,2171166,2171166,2171166,0,2171166,2920734,2171166,2171166,2171166,2990366,2171166,2171166,2171166,2171166,3117342,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,0,53264,0,18,18,4329472,2232445,0,2240641,4337664,2711691,2171019,2171019,2171019,2171019,2171019,2760843,2769035,2789515,2814091,2171019,2171019,2171019,2875531,2904203,2171019,2171019,3092619,2171019,2171019,3125387,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3199115,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2793472,2805760,2215936,2830336,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2494464,2170880,2170880,2171166,2171166,2634014,2171166,2171166,2171166,2171166,2171166,2171166,2711838,2171166,2171166,2171166,2171166,2171166,2760990,2769182,2789662,2814238,2171166,2171166,2171166,2875678,2904350,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3199262,2171166,0,0,0,0,0,0,0,0,0,2379915,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2445451,2171019,2465931,2474123,2171019,2171019,3113099,2171019,2171019,3133579,2171019,2171019,2171019,3162251,2171019,2171019,3182731,3186827,2171019,2379776,2879627,2171019,2916491,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3027083,2171019,2171019,3063947,2699550,2171166,2728222,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2879774,2171166,2916638,2171166,2171166,2171166,2171166,2171166,2609438,2171166,2171166,2171166,2171166,2171166,2171166,2654494,2171166,2171166,2171166,2171166,2171166,2445598,2171166,2466078,2474270,2171166,2171166,2171166,2171166,2171166,2171166,2523422,2171019,2437259,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2543755,2171019,2171019,2171019,2584715,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2908299,2171019,2171019,2936971,2171019,2171019,2986123,2171019,2994315,2171019,2171019,3014795,2171019,3059851,3076235,3088523,2171166,2171166,2986270,2171166,2994462,2171166,2171166,3014942,2171166,3059998,3076382,3088670,2171166,2171166,2171166,2171166,2171166,2171166,3027230,2171166,2171166,3064094,2171166,2171166,3113246,2171166,2171166,3133726,2506891,2171019,2171019,2171019,2535563,2539659,2171019,2171019,2588811,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2691211,2171019,2707595,2171019,2715787,2171019,2723979,2764939,2171019,2171019,2797707,2215936,2215936,3170304,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2453790,2457886,2171166,2171166,2171166,2486558,2171166,2171166,2507038,2171166,2171166,2171166,2535710,2539806,2171166,2171166,2588958,2171166,2171166,2171166,2171166,2515230,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2593054,2171166,2171166,2171166,2171166,3051806,2171166,2171166,2171166,2171166,2171166,2171166,3170590,0,2388107,2392203,2171019,2171019,2433163,2171019,2461835,2171019,2171019,2171019,2510987,2171019,2171019,2171019,2171019,2580619,2171019,2605195,2637963,2171019,2171019,2171019,2920587,2171019,2171019,2171019,2990219,2171019,2171019,2171019,2171019,3051659,2171019,2171019,2171019,2453643,2457739,2171019,2171019,2171019,2171019,2171019,2171019,2515083,2171019,2171019,2171019,2171019,2646155,2670731,2752651,2756747,2846859,2961547,2171019,2998411,2171019,3010699,2171019,2171019,2687115,2748555,2171019,2171019,2171019,2924683,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3121291,2171019,2171019,2171019,3170443,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,3145867,3158155,3166347,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,553,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2388254,2392350,2171166,2171166,2433310,2171166,2461982,2171166,2171166,2171166,2511134,2171166,2171166,0,2171166,2171166,2580766,2171166,2605342,2638110,2171166,2171166,2171166,2171166,3031326,2171166,3055902,2171166,2171166,2171166,2171166,3092766,2171166,2171166,3125534,2171166,2171166,2171166,3162398,2171166,2171166,3182878,3186974,2171166,0,0,0,2171019,2171019,2171019,2171019,3109003,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2171166,2687262,0,0,2748702,2171166,2171166,0,2171166,2924830,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2597150,2171166,2621726,2171166,2171166,2642206,2171166,2171166,2171166,2171166,3121438,2171166,2171166,3146014,3158302,3166494,2171019,2420875,2429067,2171019,2478219,2171019,2171019,2171019,2171019,2547851,2556043,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3129483,2215936,2171019,3141771,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2171166,2421022,2429214,2171166,2478366,2171166,2171166,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2646302,2670878,0,0,0,0,37,110630,0,0,0,114730,106539,0,45,45,45,45,45,1405,1406,45,45,45,45,1409,45,45,45,45,45,1415,45,45,45,45,45,45,45,45,45,45,1238,45,45,45,45,67,2752798,2756894,0,2847006,2961694,2171166,2998558,2171166,3010846,2171166,2171166,2171166,3141918,2171019,2171019,2490507,3129344,2171166,2171166,2490654,2171166,2171166,2171166,0,0,2547998,2556190,2171166,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,167,45,45,45,45,185,187,45,45,198,45,45,0,2171166,2171166,2171166,2171166,2171166,2171166,3129630,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2576523,2171019,2171019,2171019,2171019,2171019,2609291,2171019,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2171166,2171166,2494750,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,147,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,3002654,2171166,2171166,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2175257,0,0,2584862,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2171166,2171019,2441355,2171019,2527371,2171019,2601099,2171019,2850955,2171019,2171019,2171019,3022987,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,69632,287,2170880,2215936,3022848,2171166,2441502,2171166,2527518,0,0,2171166,2601246,2171166,0,2851102,2171166,2171166,2171166,2171166,2720030,2744606,2171166,2171166,2171166,2834718,2838814,2171166,2908446,2171166,2171166,2937118,3023134,2171019,2519179,2171019,2171019,2171019,2171019,2171019,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,3215646,0,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2486411,2171019,2171019,2171019,2629771,2171019,2171019,2171019,2171019,2719883,2744459,2171019,2171019,2171019,2834571,2838667,2171019,2519326,0,0,2171166,2171166,0,2171166,2171166,2171166,2396299,2171019,2171019,2171019,2171019,3018891,2396160,2215936,2215936,2215936,2215936,3018752,2396446,0,0,2171166,2171166,2171166,2171166,3019038,2171019,2650251,2965643,2171019,2215936,2650112,2965504,2215936,0,0,2171166,2650398,2965790,2171166,2551947,2171019,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,144,45,45,67,67,67,67,67,228,67,67,67,67,67,67,67,67,67,1929,97,97,97,97,0,0,0,2552094,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2977931,2977792,2978078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,1321,97,131072,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,28,28,0,140,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2584576,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,140,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3002368,2170880,2170880,2215936,2215936,2494464,2215936,2215936,2215936,2215936,2215936,2215936,3215360,544,0,0,0,544,0,546,0,0,0,546,0,0,2183168,0,0,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,0,2170880,2170880,2170880,0,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,552,0,0,0,552,0,287,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,644,0,2215936,2215936,3170304,544,0,546,0,552,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,140,0,0,53264,18,49172,57366,24,8192,28,102432,249856,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,151640,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640,53264,18,49172,57366,24,8192,28,102432,253952,110630,114730,106539,0,0,32856,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,192512,53264,18,18,49172,0,57366,0,2232445,184320,2232445,0,2240641,2240641,184320,2240641,102432,0,0,0,221184,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3108864,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,0,0,0,45056,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,127,127,53264,18,49172,258071,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,204800,53264,18,49172,57366,24,27,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,33,0,33,33,33,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,0,0,0,0,0,0,0,0,0,0,139,2170880,2170880,2170880,2416640,67,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,0,0,97,97,0,97,97,97,45,2030,45,45,45,45,67,1573,67,67,67,67,67,67,67,67,67,67,67,1699,67,67,67,67,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,97,97,97,1355,97,97,97,1358,97,97,97,641,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,45,1187,45,45,45,45,45,0,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,592,97,97,97,97,97,97,97,97,97,97,1531,45,45,45,45,45,45,45,45,45,45,45,45,1680,45,45,45,641,0,924,0,925,41606,0,0,0,0,45,45,45,45,45,45,1186,45,45,45,45,45,45,67,67,37139,37139,24853,24853,0,70179,282,0,0,65820,65820,369,287,97,0,0,97,97,0,97,2028,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1767,67,67,67,0,0,0,0,0,0,1612,97,97,97,97,97,97,0,1785,97,97,97,97,97,97,0,0,97,97,97,97,1790,97,0,0,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,241664,2387968,2392064,2170880,2170880,2433024,53264,19,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,274432,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,270336,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,1134711,53264,18,49172,57366,24,8192,28,102432,0,1126440,1126440,1126440,0,0,1126400,53264,18,49172,57366,24,8192,28,102432,36,110630,114730,106539,0,0,217088,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,94,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,96,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,24666,53264,18,18,49172,0,57366,0,24,24,24,126,28,28,28,28,102432,53264,122,123,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,2170880,2170880,4256099,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1319,0,0,0,0,97,97,97,97,97,97,97,1109,97,97,97,97,1113,132,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,146,150,45,45,45,45,45,175,45,180,45,186,45,189,45,45,203,67,256,67,67,270,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,293,297,97,97,97,97,97,322,97,327,97,333,97,0,0,97,2026,0,2027,97,97,45,45,45,45,45,45,67,67,67,1685,67,67,67,67,67,67,67,1690,67,336,97,97,350,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,2424832,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2617344,2170880,45,439,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,525,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,97,622,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,1527,369,648,45,45,45,45,45,45,45,45,45,659,45,45,45,45,408,45,45,45,45,45,45,45,45,45,45,45,1239,45,45,45,67,729,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,762,67,746,67,67,67,67,67,67,67,67,67,759,67,67,67,67,0,0,0,1477,0,1086,0,0,0,1479,0,1090,67,67,796,67,67,799,67,67,67,67,67,67,67,67,67,67,67,67,1291,67,67,67,811,67,67,67,67,67,816,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,833,97,97,97,97,97,97,97,97,1380,0,0,0,45,45,45,45,45,1185,45,45,45,45,45,45,45,386,45,45,45,45,45,45,45,45,1810,45,45,45,45,45,45,67,97,97,844,97,97,97,97,97,97,97,97,97,857,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,45,45,97,97,97,894,97,97,897,97,97,97,97,97,97,97,97,97,0,0,0,1382,45,45,45,97,909,97,97,97,97,97,914,97,97,97,97,97,97,97,923,67,67,1079,67,67,67,67,67,37689,1085,25403,1089,66365,1093,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,148,1114,97,97,97,97,97,97,1122,97,97,97,97,97,97,97,97,97,606,97,97,97,97,97,97,97,97,97,97,1173,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,145,45,45,67,67,67,67,67,1762,67,67,67,1766,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,1934,67,67,1255,67,67,67,67,67,67,67,67,67,67,67,67,67,1035,67,67,67,67,67,67,1297,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,97,1327,97,97,97,97,97,97,97,97,97,97,97,97,33344,97,97,97,1335,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,97,97,1377,97,97,97,97,97,97,0,1179,0,45,45,45,45,670,45,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,67,67,1438,67,67,1442,67,67,67,67,67,67,67,67,67,67,67,67,1592,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,0,0,1305,0,0,0,0,0,1311,0,0,0,1317,0,0,0,0,0,0,0,97,97,1322,97,97,1491,97,97,1495,97,97,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,1551,45,1553,45,1504,97,97,97,97,97,97,97,97,97,97,1513,97,97,97,97,0,45,45,45,45,1536,45,45,45,45,1540,45,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,67,67,67,1700,67,67,67,97,1648,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,1541,0,97,97,97,97,0,1940,0,97,97,97,97,97,97,45,45,2011,45,45,45,2015,67,67,2017,67,67,67,2021,97,67,67,812,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,97,97,910,97,97,97,97,97,97,97,97,97,97,97,923,0,0,0,45,45,45,45,1184,45,45,45,45,1188,45,45,45,45,1414,45,45,45,1417,45,1419,45,45,45,45,45,443,45,45,45,45,45,45,453,45,45,67,67,67,67,1244,67,67,67,67,1248,67,67,67,67,67,67,67,0,37139,24853,0,0,0,282,41098,65820,97,1324,97,97,97,97,1328,97,97,97,97,97,97,97,97,97,0,0,930,45,45,45,45,97,97,97,97,1378,97,97,97,97,0,1179,0,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,45,975,45,45,45,45,67,67,1923,67,1925,67,67,1927,67,97,97,97,97,97,0,0,97,97,97,97,1985,45,45,45,45,45,45,1560,45,45,45,45,45,45,45,45,45,946,45,45,950,45,45,45,0,97,97,97,1939,0,0,0,97,1943,97,97,1945,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,990,45,45,45,67,257,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,337,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,370,2170880,2170880,2170880,2416640,401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,459,461,67,67,67,67,67,67,67,67,475,67,480,67,67,67,67,67,67,1054,67,67,67,67,67,67,67,67,67,67,1698,67,67,67,67,67,484,67,67,487,67,67,67,67,67,67,67,67,67,67,67,67,67,1459,67,67,97,556,558,97,97,97,97,97,97,97,97,572,97,577,97,97,0,0,1896,97,97,97,97,97,97,1903,45,45,45,45,983,45,45,45,45,988,45,45,45,45,45,45,1195,45,45,45,45,45,45,45,45,45,45,1549,45,45,45,45,45,581,97,97,584,97,97,97,97,97,97,97,97,97,97,97,97,97,1153,97,97,369,0,45,45,45,45,45,45,45,45,45,45,45,662,45,45,45,684,45,45,45,45,45,45,45,45,45,45,45,45,1004,45,45,45,67,67,67,749,67,67,67,67,67,67,67,67,67,761,67,67,67,67,67,67,1068,67,67,67,1071,67,67,67,67,1076,794,795,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,544,97,97,97,97,847,97,97,97,97,97,97,97,97,97,859,97,0,0,2025,97,20480,97,97,2029,45,45,45,45,45,45,67,67,67,1575,67,67,67,67,67,67,67,67,67,1775,67,67,67,97,97,97,97,892,893,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1515,97,993,994,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,992,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,67,1607,67,67,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,97,97,596,97,45,1556,1557,45,45,45,45,45,45,45,45,45,45,45,45,45,45,696,45,1596,1597,67,67,67,67,67,67,67,67,67,67,67,67,67,67,499,67,97,97,97,1621,97,97,97,97,97,97,97,97,97,97,97,97,97,1346,97,97,97,97,1740,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,45,45,67,97,97,97,97,97,97,1836,0,97,97,97,97,97,0,0,97,97,97,1984,97,45,45,45,45,45,45,1808,45,45,45,45,45,45,45,45,67,739,67,67,67,67,67,744,45,45,1909,45,45,45,45,45,45,45,67,1917,67,1918,67,67,67,67,67,67,1247,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,1922,67,67,67,67,67,67,67,97,1930,97,1931,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,1576,67,67,67,67,1580,67,67,0,97,97,1938,97,0,0,0,97,97,97,97,97,97,45,45,45,699,45,45,45,704,45,45,45,45,45,45,45,45,987,45,45,45,45,45,45,45,67,67,97,97,97,97,0,0,97,97,97,2006,97,97,97,97,0,45,1533,45,45,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,722,723,45,45,45,45,45,45,2045,67,67,67,2047,0,0,97,97,97,2051,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,409,45,45,45,45,45,45,45,45,45,1957,45,67,67,67,67,67,1836,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,45,67,67,67,1761,67,67,67,1764,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,45,45,420,45,45,422,45,45,425,45,45,45,45,45,45,45,387,45,45,45,45,397,45,45,45,67,460,67,67,67,67,67,67,67,67,67,67,67,67,67,67,515,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,97,0,2039,97,97,97,97,97,45,45,45,45,1426,45,45,45,67,67,67,67,67,67,67,67,67,1689,67,67,67,97,557,97,97,97,97,97,97,97,97,97,97,97,97,97,97,612,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,896,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,97,45,939,45,45,45,45,943,45,45,45,45,45,45,45,45,45,45,1916,67,67,67,67,67,45,67,67,67,67,67,67,67,1015,67,67,67,67,1019,67,67,67,67,67,67,1271,67,67,67,67,67,67,1277,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,67,67,67,804,67,67,67,67,67,1077,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2543616,2170880,2170880,2170880,2170880,2170880,2629632,1169,97,1171,97,97,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,936,45,45,67,67,214,67,220,67,67,233,67,243,67,248,67,67,67,67,67,67,1298,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,1617,97,0,0,0,45,45,45,1183,45,45,45,45,45,45,45,45,45,393,45,45,45,45,45,45,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,1281,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,776,1323,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,907,45,1412,45,45,45,45,45,45,45,1418,45,45,45,45,45,45,686,45,45,45,690,45,45,695,45,45,67,67,67,67,67,1465,67,67,67,67,67,67,67,67,67,67,67,97,97,97,1712,97,97,97,97,1741,97,97,97,45,45,45,45,45,45,45,45,45,426,45,45,45,45,45,45,67,67,67,1924,67,67,67,67,67,97,97,97,97,97,0,0,97,97,1983,97,97,45,45,1987,45,1988,45,0,97,97,97,97,0,0,0,1942,97,97,97,97,97,45,45,45,700,45,45,45,45,45,45,45,45,45,45,711,45,45,153,45,45,166,45,176,45,181,45,45,188,191,196,45,204,255,258,263,67,271,67,67,0,37139,24853,0,0,0,282,41098,65820,97,97,97,294,97,300,97,97,313,97,323,97,328,97,97,335,338,343,97,351,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,41098,0,140,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,45,1411,67,67,486,67,67,67,67,67,67,67,67,67,67,67,67,67,1251,67,67,501,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,67,67,67,67,1443,67,67,67,67,67,67,67,67,67,67,1263,67,67,67,67,67,97,97,583,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1526,97,598,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,0,97,97,1796,97,97,97,97,97,97,97,45,45,45,45,45,1744,45,45,45,369,0,651,45,653,45,654,45,656,45,45,45,660,45,45,45,45,1558,45,45,45,45,45,45,45,45,1566,45,45,681,45,683,45,45,45,45,45,45,45,45,691,692,694,45,45,45,716,45,45,45,45,45,45,45,45,45,45,45,45,709,45,45,712,45,714,45,45,45,718,45,45,45,45,45,45,45,726,45,45,45,733,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,747,67,67,67,67,67,67,67,67,67,760,67,67,67,0,0,0,0,0,0,97,1613,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,67,764,67,67,67,67,768,67,770,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,1977,67,778,779,781,67,67,67,67,67,67,788,789,67,67,792,793,67,67,67,813,67,67,67,67,67,67,67,67,67,824,37689,544,25403,546,70179,0,0,66365,66365,552,0,836,97,838,97,839,97,841,97,97,97,845,97,97,97,97,97,97,97,97,97,858,97,97,0,1728,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,1802,45,97,97,862,97,97,97,97,866,97,868,97,97,97,97,97,97,0,0,97,97,1788,97,97,97,0,0,97,97,876,877,879,97,97,97,97,97,97,886,887,97,97,890,891,97,97,97,97,97,97,97,899,97,97,97,903,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,1646,97,97,97,97,911,97,97,97,97,97,97,97,97,97,922,923,45,955,45,957,45,45,45,45,45,45,45,45,45,45,45,45,195,45,45,45,45,45,981,982,45,45,45,45,45,45,989,45,45,45,45,45,170,45,45,45,45,45,45,45,45,45,45,411,45,45,45,45,45,67,1023,67,67,67,67,67,67,1031,67,1033,67,67,67,67,67,67,67,817,819,67,67,67,67,67,37689,544,67,1065,67,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,1078,67,67,1081,1082,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2437406,2171166,2171166,97,1115,97,1117,97,97,97,97,97,97,1125,97,1127,97,97,97,0,97,97,97,0,97,97,97,97,1644,97,97,97,0,97,97,97,0,97,97,1642,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,97,316,97,97,97,97,97,97,97,97,97,1159,97,97,97,97,97,97,97,97,97,97,97,97,97,1502,97,97,97,97,97,1172,97,97,1175,1176,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,935,45,45,45,1233,45,45,45,1236,45,45,45,45,45,45,45,67,67,67,67,67,67,1873,67,67,45,45,1218,45,45,45,1223,45,45,45,45,45,45,45,1230,45,45,67,67,215,219,222,67,230,67,67,244,246,249,67,67,67,67,67,67,1882,97,97,97,97,0,0,0,97,97,97,97,97,97,45,1904,45,1905,45,67,67,67,67,67,1258,67,1260,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,67,67,67,1283,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,67,818,67,67,67,67,67,67,37689,544,67,67,1295,67,67,67,67,67,67,67,67,0,0,0,0,0,0,2174976,0,0,97,97,97,1326,97,97,97,97,97,97,97,97,97,97,97,97,97,1514,97,97,97,97,97,1338,97,1340,97,97,97,97,97,97,97,97,97,97,97,1500,97,97,1503,97,1363,97,97,97,97,97,97,97,1370,97,97,97,97,97,97,97,563,97,97,97,97,97,97,578,97,1375,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,685,45,45,45,45,45,45,45,45,45,45,45,1003,45,45,45,45,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1778,97,97,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,609,97,97,97,45,1542,45,45,45,45,45,45,45,1548,45,45,45,45,45,1554,45,1570,1571,45,67,67,67,67,67,67,1578,67,67,67,67,67,67,67,1055,67,67,67,67,67,1061,67,67,1582,67,67,67,67,67,67,67,1588,67,67,67,67,67,1594,67,67,67,67,67,97,2038,0,97,97,97,97,97,2044,45,45,45,995,45,45,45,45,1e3,45,45,45,45,45,45,45,1809,45,1811,45,45,45,45,45,67,1610,1611,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,1618,1647,1649,97,97,97,1652,97,1654,1655,97,0,45,45,45,1658,45,45,67,67,216,67,67,67,67,234,67,67,67,67,252,254,1845,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,945,45,947,45,45,45,45,45,67,67,67,67,67,1881,97,97,97,97,97,0,0,0,97,97,97,97,97,1902,45,45,45,45,45,45,1908,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1921,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,0,97,1937,97,97,1940,0,0,97,97,97,97,97,97,1947,1948,1949,45,45,45,1952,45,1954,45,45,45,45,1959,1960,1961,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,67,67,67,757,67,67,67,67,67,67,1964,67,1966,67,67,67,67,1971,1972,1973,97,0,0,0,97,97,1104,97,97,97,97,97,97,97,97,97,97,884,97,97,97,889,97,97,1978,97,0,0,1981,97,97,97,97,45,45,45,45,45,45,736,45,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,45,67,67,67,67,0,2049,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,933,45,45,45,45,1234,45,45,45,45,45,45,45,45,45,45,67,97,97,288,97,97,97,97,97,97,317,97,97,97,97,97,97,0,0,97,1787,97,97,97,97,0,0,45,45,378,45,45,45,45,45,390,45,45,45,45,45,45,45,424,45,45,45,431,433,45,45,45,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,67,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,97,97,632,97,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,97,97,855,97,97,97,97,67,97,97,97,97,97,97,1837,0,97,97,97,97,97,0,0,0,1897,97,97,97,97,97,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,97,2010,45,45,45,45,45,45,2016,67,67,67,67,67,67,2022,45,2046,67,67,67,0,0,2050,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,932,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,45,45,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,701,702,45,45,705,706,45,45,45,45,45,45,703,45,45,45,45,45,45,45,45,45,719,45,45,45,45,45,725,45,45,45,369,649,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1216,25403,546,70179,0,0,66365,66365,552,834,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,97,1799,97,97,45,45,45,1569,45,45,45,1572,67,67,67,67,67,67,67,67,67,67,67,0,0,0,1306,0,67,67,67,1598,67,67,67,67,67,67,67,67,1606,67,67,1609,97,97,97,1650,97,97,1653,97,97,97,0,45,45,1657,45,45,45,1206,45,45,45,45,45,45,45,45,45,45,45,45,1421,45,45,45,1703,67,67,67,67,67,67,67,67,67,67,97,97,1711,97,97,0,1895,0,97,97,97,97,97,97,45,45,45,45,45,958,45,960,45,45,45,45,45,45,45,45,1913,45,45,1915,67,67,67,67,67,67,67,466,67,67,67,67,67,67,481,67,45,1749,45,45,45,45,45,45,45,45,1755,45,45,45,45,45,173,45,45,45,45,45,45,45,45,45,45,974,45,45,45,45,45,67,67,67,67,67,1773,67,67,67,67,67,67,67,97,97,97,97,1886,0,0,0,97,97,67,2035,2036,67,67,97,0,0,97,2041,2042,97,97,45,45,45,45,1662,45,45,45,45,45,45,45,45,45,45,45,1397,45,45,45,45,151,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,437,205,45,67,67,67,218,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,67,97,97,97,97,298,97,97,97,97,97,97,97,97,97,97,97,870,97,97,97,97,97,97,97,97,352,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,365,0,41098,0,140,45,45,45,45,45,1427,45,45,67,67,67,67,67,67,67,1435,520,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1037,617,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,923,45,1232,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,1919,67,1759,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1021,45,154,45,162,45,45,45,45,45,45,45,45,45,45,45,45,964,45,45,45,206,45,67,67,67,67,221,67,229,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,67,67,755,67,67,67,67,67,67,67,67,785,67,67,67,67,67,67,67,67,802,67,67,67,807,67,67,67,97,97,97,97,353,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,366,0,0,0,140,2170880,2170880,2170880,2416640,402,45,45,45,45,45,45,45,410,45,45,45,45,45,45,45,674,45,45,45,45,45,45,45,45,389,45,394,45,45,398,45,45,45,45,441,45,45,45,45,45,447,45,45,45,454,45,45,67,67,67,67,67,67,67,67,67,67,67,1768,67,67,67,67,67,488,67,67,67,67,67,67,67,496,67,67,67,67,67,67,67,1774,67,67,67,67,67,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,97,97,67,67,523,67,67,527,67,67,67,67,67,533,67,67,67,540,97,97,97,585,97,97,97,97,97,97,97,593,97,97,97,97,97,97,1784,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,0,0,18,18,24,24,0,28,28,97,97,620,97,97,624,97,97,97,97,97,630,97,97,97,637,713,45,45,45,45,45,45,721,45,45,45,45,45,45,45,45,1197,45,45,45,45,45,45,45,45,730,732,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1581,67,45,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,67,775,67,67,67,67,1066,67,67,67,67,67,67,67,67,67,67,67,67,479,67,67,67,67,67,67,1080,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,287,0,0,0,287,0,2379776,2170880,2170880,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,97,920,97,97,0,0,0,0,45,1181,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,45,1219,45,45,45,45,45,45,1226,45,45,45,45,45,45,959,45,45,45,45,45,45,45,45,45,184,45,45,45,45,202,45,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1266,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1279,67,67,67,67,67,272,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,67,1286,67,67,67,67,67,67,67,67,67,1293,67,67,67,1296,67,67,67,67,67,67,67,0,0,0,0,0,281,94,0,0,97,97,97,1366,97,97,97,97,97,97,97,97,97,1373,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,0,97,1376,97,97,97,97,97,97,97,0,0,0,45,45,1384,45,45,67,208,67,67,67,67,67,67,237,67,67,67,67,67,67,67,1069,1070,67,67,67,67,67,67,67,0,37140,24854,0,0,0,0,41098,65821,45,1423,45,45,45,45,45,45,67,67,1431,67,67,67,67,67,67,67,1083,37689,0,25403,0,66365,0,0,0,1436,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1830,67,1452,1453,67,67,67,67,1456,67,67,67,67,67,67,67,67,67,771,67,67,67,67,67,67,1461,67,67,67,1464,67,1466,67,67,67,67,67,67,1470,67,67,67,67,67,67,1587,67,67,67,67,67,67,67,67,1595,1489,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1129,97,1505,1506,97,97,97,97,1510,97,97,97,97,97,97,97,97,97,1163,1164,97,97,97,97,97,1516,97,97,97,1519,97,1521,97,97,97,97,97,97,1525,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,67,67,67,1600,67,67,67,67,67,67,67,67,67,67,67,1301,0,0,0,1307,97,97,1620,97,97,97,97,97,97,97,1627,97,97,97,97,97,97,913,97,97,97,97,919,97,97,97,0,97,97,97,1781,97,97,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,1792,1860,45,1862,1863,45,1865,45,67,67,67,67,67,67,67,67,1875,67,1877,1878,67,1880,67,97,97,97,97,97,1887,0,1889,97,97,18,0,139621,0,0,0,0,0,0,364,237568,0,367,0,97,1893,0,0,0,97,1898,1899,97,1901,97,45,45,45,45,45,2014,45,67,67,67,67,67,2020,67,97,1989,45,1990,45,45,45,67,67,67,67,67,67,1996,67,1997,67,67,67,67,67,273,67,0,37139,24853,0,0,0,0,41098,65820,67,67,97,97,97,97,0,0,97,97,2005,0,97,2007,97,97,18,0,139621,0,0,0,642,0,133,364,0,0,367,41606,0,97,97,2056,2057,0,2059,45,67,0,97,45,67,0,97,45,45,67,209,67,67,67,223,67,67,67,67,67,67,67,67,67,786,67,67,67,791,67,67,45,45,940,45,45,45,45,45,45,45,45,45,45,45,45,45,45,727,45,45,67,67,67,67,67,67,67,67,1016,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,142,45,45,67,210,67,67,67,225,67,67,239,67,67,67,250,67,67,67,67,67,464,67,67,67,67,67,476,67,67,67,67,67,67,67,1709,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,1843,0,67,259,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,289,97,97,97,303,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,97,339,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,0,358,0,0,0,0,0,0,41098,0,140,45,45,45,45,45,1953,45,1955,45,45,45,67,67,67,67,67,67,67,1687,1688,67,67,67,67,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1203,45,458,67,67,67,67,67,67,67,67,67,470,477,67,67,67,67,67,67,67,1970,97,97,97,1974,0,0,0,97,1103,97,97,97,97,97,97,97,97,97,97,97,1372,97,97,97,97,67,522,67,67,67,67,67,67,67,67,67,67,67,536,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,1701,67,555,97,97,97,97,97,97,97,97,97,567,574,97,97,97,97,97,301,97,309,97,97,97,97,97,97,97,97,97,900,97,97,97,905,97,97,97,619,97,97,97,97,97,97,97,97,97,97,97,633,97,97,18,0,139621,0,0,362,0,0,0,364,0,0,367,41606,369,649,45,45,45,45,45,45,45,45,45,45,45,45,663,664,67,67,67,67,750,751,67,67,67,67,758,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,67,1057,1058,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,67,67,67,67,67,67,512,67,67,67,97,97,97,97,895,97,97,97,97,97,97,97,97,97,97,97,902,97,97,97,97,67,67,1051,67,67,67,67,67,67,67,67,67,67,67,1062,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1302,0,0,0,1308,97,97,97,97,1145,97,97,97,97,97,97,97,97,97,97,97,1139,97,97,97,97,1156,97,97,97,97,97,97,1161,97,97,97,97,97,1166,97,97,18,640,139621,0,641,0,0,0,0,364,0,0,367,41606,67,67,67,67,1257,67,67,67,67,67,67,67,67,67,67,67,0,0,1305,0,0,97,97,1337,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1630,97,67,1474,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,2380062,2171166,2171166,97,1529,97,97,0,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,45,45,67,67,67,67,1707,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1891,1739,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,1198,45,1200,45,45,45,45,97,97,1894,0,0,97,97,97,97,97,97,45,45,45,45,45,672,45,45,45,45,45,45,45,45,45,45,45,1420,45,45,45,45,67,67,1965,67,1967,67,67,67,97,97,97,97,0,1976,0,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,97,97,1979,0,0,97,1982,97,97,97,1986,45,45,45,45,45,735,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,1770,67,67,2e3,97,97,97,2002,0,97,97,97,0,97,97,97,97,97,97,1798,97,97,97,45,45,45,2034,67,67,67,67,97,0,0,2040,97,97,97,97,45,45,45,45,1752,45,45,45,1753,1754,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,675,45,45,45,45,45,45,438,45,45,45,45,45,445,45,45,45,45,45,45,45,45,67,1430,67,67,67,67,67,67,67,67,67,524,67,67,67,67,67,531,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1096,97,97,97,621,97,97,97,97,97,628,97,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,665,45,45,45,45,45,45,45,45,45,676,45,45,45,45,45,942,45,45,45,45,45,45,45,45,45,45,707,708,45,45,45,45,763,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,809,810,67,67,67,67,783,67,67,67,67,67,67,67,67,67,67,67,0,1303,0,0,0,97,861,97,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,45,45,956,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,67,67,67,67,1027,67,67,67,67,1032,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1097,1064,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,67,1098,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,331,97,97,97,97,1158,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,1309,0,0,0,1315,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1374,97,45,45,1543,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1240,67,67,1583,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1252,67,97,97,97,1635,97,97,97,0,97,97,97,97,97,97,97,97,1800,97,45,45,45,97,97,1793,97,97,97,97,97,97,97,97,97,97,45,45,45,1743,45,45,45,1746,45,0,97,97,97,97,97,1851,97,45,45,45,45,1856,45,45,45,45,1864,45,45,67,67,1869,67,67,67,67,1874,67,0,97,97,45,67,2058,97,45,67,0,97,45,67,0,97,45,45,67,211,67,67,67,67,67,67,240,67,67,67,67,67,67,67,1444,67,67,67,67,67,67,67,67,67,509,67,67,67,67,67,67,67,67,67,268,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,290,97,97,97,305,97,97,319,97,97,97,330,97,97,18,640,139621,0,641,0,0,0,0,364,0,643,367,41606,97,97,348,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,45,45,380,45,45,45,45,45,45,395,45,45,45,400,369,0,45,45,45,45,45,45,45,45,658,45,45,45,45,45,972,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,745,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,67,67,37689,1086,25403,1090,66365,1094,0,0,97,843,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,1121,97,97,97,97,1126,97,97,97,97,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1400,45,67,67,67,1011,67,67,67,67,67,67,67,67,67,67,67,0,1304,0,0,0,1190,45,45,1193,1194,45,45,45,45,45,1199,45,1201,45,45,45,45,1911,45,45,45,45,45,67,67,67,67,67,67,67,1579,67,67,67,67,45,1205,45,45,45,45,45,45,45,45,1211,45,45,45,45,45,984,45,45,45,45,45,45,45,45,45,45,45,1550,45,45,45,45,45,1217,45,45,45,45,45,45,1225,45,45,45,45,1229,45,45,45,1388,45,45,45,45,45,45,1396,45,45,45,45,45,444,45,45,45,45,45,45,45,45,45,67,67,1574,67,67,67,67,67,67,67,67,67,67,1590,67,67,67,67,67,1254,67,67,67,67,67,1259,67,1261,67,67,67,67,1265,67,67,67,67,67,67,1708,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,0,0,67,67,67,67,1285,67,67,67,67,1289,67,67,67,67,67,67,67,67,37689,1087,25403,1091,66365,1095,0,0,97,97,97,97,1339,97,1341,97,97,97,97,1345,97,97,97,97,97,561,97,97,97,97,97,573,97,97,97,97,97,97,1717,97,0,97,97,97,97,97,97,97,591,97,97,97,97,97,97,97,97,97,1329,97,97,97,97,97,97,97,97,97,97,1351,97,97,97,97,97,97,1357,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,568,97,97,97,97,97,97,97,1365,97,97,97,97,1369,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1399,45,45,45,1413,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1669,45,1422,45,45,1425,45,45,1428,45,1429,67,67,67,67,67,67,67,67,1468,67,67,67,67,67,67,67,67,529,67,67,67,67,67,67,539,67,67,1475,67,0,0,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,97,97,1530,97,0,45,45,1534,45,45,45,45,45,45,45,45,1956,45,45,67,67,67,67,67,67,67,67,67,1599,67,67,1601,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,67,1632,97,1634,0,97,97,97,1640,97,97,97,1643,97,97,1645,97,97,97,97,97,912,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,1660,1661,45,45,45,45,1665,1666,45,45,45,45,45,1670,1692,1693,67,67,67,67,67,1697,67,67,67,67,67,67,67,1702,97,97,1714,1715,97,97,97,97,0,1721,1722,97,97,97,97,97,97,1353,97,97,97,97,97,97,97,97,1362,1726,97,0,0,97,97,97,0,97,97,97,1734,97,97,97,97,97,848,849,97,97,97,97,856,97,97,97,97,97,354,0,53264,0,18,18,24,24,0,28,28,45,45,1750,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1681,45,0,1846,97,97,97,97,97,97,45,45,1854,45,45,45,45,1859,67,67,67,1879,67,67,97,97,1884,97,97,0,0,0,97,97,97,1105,97,97,97,97,97,97,97,97,97,97,1344,97,97,97,1347,97,1892,97,0,0,0,97,97,97,1900,97,97,45,45,45,45,45,997,45,45,45,45,45,45,45,45,45,45,1002,45,45,1005,1006,45,67,67,67,67,67,1926,67,67,1928,97,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,1737,97,0,97,97,97,97,0,0,0,97,97,1944,97,97,1946,45,45,45,1544,45,45,45,45,45,45,45,45,45,45,45,45,190,45,45,45,152,155,45,163,45,45,177,179,182,45,45,45,193,197,45,45,45,1672,45,45,45,45,45,1677,45,1679,45,45,45,45,996,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,67,260,264,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,295,299,302,97,310,97,97,324,326,329,97,97,97,0,97,97,1639,0,1641,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,97,97,97,1523,97,97,97,97,97,97,97,97,1719,97,97,97,97,97,97,97,97,1720,97,97,97,97,97,97,97,312,97,97,97,97,97,97,97,97,1123,97,97,97,97,97,97,97,340,344,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,373,375,419,45,45,45,45,45,45,45,45,45,428,45,45,435,45,45,45,1751,45,45,45,45,45,45,45,45,45,45,45,45,1410,45,45,45,67,67,67,505,67,67,67,67,67,67,67,67,67,514,67,67,67,67,67,67,1969,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,0,97,2064,2065,0,2066,45,521,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,465,67,67,67,474,67,67,67,67,67,67,67,1467,67,67,67,67,67,67,67,67,67,97,97,97,97,97,1933,0,97,97,97,602,97,97,97,97,97,97,97,97,97,611,97,97,18,640,139621,358,641,0,0,0,0,364,0,0,367,0,618,97,97,97,97,97,97,97,97,97,97,631,97,97,97,97,97,881,97,97,97,97,97,97,97,97,97,97,569,97,97,97,97,97,369,0,45,652,45,45,45,45,45,657,45,45,45,45,45,45,1235,45,45,45,45,45,45,45,45,67,67,67,1432,67,67,67,67,67,67,67,766,67,67,67,67,67,67,67,67,773,67,67,67,0,1305,0,1311,0,1317,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,97,0,97,97,97,1724,97,97,97,777,67,67,782,67,67,67,67,67,67,67,67,67,67,67,67,535,67,67,67,67,67,67,67,814,67,67,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,0,97,837,97,97,97,97,97,97,1496,97,97,97,97,97,97,97,97,97,97,918,97,97,97,97,0,842,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1168,97,97,97,97,864,97,97,97,97,97,97,97,97,871,97,97,97,0,1637,97,97,0,97,97,97,97,97,97,97,97,97,97,1801,45,45,97,875,97,97,880,97,97,97,97,97,97,97,97,97,97,97,1151,1152,97,97,97,67,67,67,1040,67,67,67,67,67,67,67,67,67,67,67,67,790,67,67,67,1180,0,649,45,45,45,45,45,45,45,45,45,45,45,45,45,200,45,45,67,67,67,1454,67,67,67,67,67,67,67,67,67,67,67,67,806,67,67,67,0,0,0,1481,0,1094,0,0,97,1483,97,97,97,97,97,97,304,97,97,318,97,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,97,97,1332,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,1633,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,1381,0,0,45,45,45,45,97,97,1727,0,97,97,97,0,97,97,97,97,97,97,97,97,626,97,97,97,97,97,97,636,45,45,1760,67,67,67,67,67,67,67,1765,67,67,67,67,67,67,67,1299,67,67,67,0,0,0,0,0,0,97,97,97,97,1616,97,97,1803,45,45,45,45,1807,45,45,45,45,45,1813,45,45,45,67,67,1684,67,67,67,67,67,67,67,67,67,67,67,822,67,67,37689,544,67,67,1818,67,67,67,67,1822,67,67,67,67,67,1828,67,67,67,67,67,97,0,0,97,97,97,97,97,45,45,45,2012,2013,45,45,67,67,67,2018,2019,67,67,97,67,97,97,97,1833,97,97,0,0,97,97,1840,97,97,0,0,97,97,97,0,97,97,1733,97,1735,97,97,97,0,97,97,97,1849,97,97,97,45,45,45,45,45,1857,45,45,45,1910,45,1912,45,45,1914,45,67,67,67,67,67,67,67,67,67,67,1017,67,67,1020,67,45,1861,45,45,45,45,45,67,67,67,67,67,1872,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,67,1446,67,67,67,67,67,1876,67,67,67,67,67,97,97,97,97,97,0,0,0,1890,97,97,97,97,97,1134,97,97,97,97,97,97,97,97,97,97,570,97,97,97,97,580,1935,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1906,45,67,67,67,67,2048,0,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,931,45,45,45,45,45,45,1674,45,1676,45,45,45,45,45,45,45,446,45,45,45,45,45,45,45,67,67,67,67,1871,67,67,67,67,0,97,97,45,67,0,97,2060,2061,0,2063,45,67,0,97,45,45,156,45,45,45,45,45,45,45,45,45,192,45,45,45,45,1673,45,45,45,45,45,45,45,45,45,45,45,429,45,45,45,45,67,67,67,269,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,349,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,374,45,45,67,67,213,217,67,67,67,67,67,242,67,247,67,253,45,45,698,45,45,45,45,45,45,45,45,45,45,45,45,45,399,45,45,0,0,0,0,925,41606,0,929,0,0,45,45,45,45,45,45,1391,45,45,1395,45,45,45,45,45,45,423,45,45,45,45,45,45,45,436,45,67,67,67,67,1041,67,1043,67,67,67,67,67,67,67,67,67,67,1776,67,67,97,97,97,1099,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,888,97,97,97,1131,97,97,97,97,1135,97,1137,97,97,97,97,97,97,97,1497,97,97,97,97,97,97,97,97,97,883,97,97,97,97,97,97,1310,0,0,0,1316,0,0,0,0,1100,0,0,0,97,97,97,97,97,1107,97,97,97,97,97,97,97,97,1343,97,97,97,97,97,97,1348,0,0,1317,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,1112,97,45,1804,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1868,67,1870,67,67,67,67,67,1817,67,67,1819,67,67,67,67,67,67,67,67,67,67,67,67,823,67,37689,544,67,97,1832,97,97,1834,97,0,0,97,97,97,97,97,0,0,97,97,97,0,1732,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,97,1177,0,0,925,0,0,0,0,97,97,97,97,0,0,1941,97,97,97,97,97,97,45,45,45,1991,1992,45,67,67,67,67,67,67,67,67,67,1998,134,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,941,45,45,944,45,45,45,45,45,45,952,45,45,207,67,67,67,67,67,226,67,67,67,67,67,67,67,67,67,820,67,67,67,67,37689,544,369,650,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1682,25403,546,70179,0,0,66365,66365,552,835,97,97,97,97,97,97,97,1522,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,1725,67,67,67,1695,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,1036,67,67,67,265,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,296,97,97,97,97,314,97,97,97,97,332,334,97,97,97,97,97,1146,1147,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,97,97,345,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,372,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,1213,45,45,45,45,404,406,45,45,45,45,45,45,45,45,45,45,45,45,45,434,45,45,45,440,45,45,45,45,45,45,45,45,451,452,45,45,45,67,1683,67,67,67,1686,67,67,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,490,492,67,67,67,67,67,67,67,67,67,67,67,1447,67,67,1450,67,67,67,67,67,526,67,67,67,67,67,67,67,67,537,538,67,67,67,67,67,506,67,67,508,67,67,511,67,67,67,67,0,1476,0,0,0,0,0,1478,0,0,0,0,0,0,0,0,97,97,1484,97,97,97,97,97,97,865,97,97,97,97,97,97,97,97,97,97,1499,97,97,97,97,97,97,97,97,97,587,589,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,97,97,97,97,623,97,97,97,97,97,97,97,97,634,635,97,97,97,97,97,1160,97,97,97,97,97,97,97,97,97,97,97,1628,97,97,97,97,369,0,45,45,45,45,45,655,45,45,45,45,45,45,45,45,999,45,1001,45,45,45,45,45,45,45,45,715,45,45,45,720,45,45,45,45,45,45,45,45,728,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,840,97,97,97,97,97,1174,97,97,97,97,0,0,925,0,0,0,0,0,0,0,1100,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,97,938,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,680,45,968,45,970,45,973,45,45,45,45,45,45,45,45,45,45,962,45,45,45,45,45,979,45,45,45,45,45,985,45,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,688,45,45,45,45,45,45,45,1007,1008,67,67,67,67,67,1014,67,67,67,67,67,67,67,67,67,1045,67,67,67,67,67,67,67,1038,67,67,67,67,67,67,1044,67,1046,67,1049,67,67,67,67,67,67,800,67,67,67,67,67,67,808,67,67,0,0,0,1102,97,97,97,97,97,1108,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,97,1371,97,97,97,97,97,97,97,97,1132,97,97,97,97,97,97,1138,97,1140,97,1143,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,45,1191,45,45,45,45,45,1196,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,991,45,67,67,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,1048,67,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,97,1386,45,1387,45,45,45,45,45,45,45,45,45,45,45,45,45,455,45,457,45,45,1424,45,45,45,45,45,67,67,67,67,1433,67,1434,67,67,67,67,67,767,67,67,67,67,67,67,67,67,67,67,67,1591,67,1593,67,67,45,45,1805,45,45,45,45,45,45,45,45,45,1814,45,45,1816,67,67,67,67,1820,67,67,67,67,67,67,67,67,67,1829,67,67,67,67,67,815,67,67,67,67,821,67,67,67,37689,544,67,1831,97,97,97,97,1835,0,0,97,97,97,97,97,0,0,97,97,97,1731,97,97,97,97,97,97,97,97,97,853,97,97,97,97,97,97,0,97,97,97,97,1850,97,97,45,45,45,45,45,45,45,45,1547,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,961,45,45,45,45,965,45,967,1907,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1920,0,1936,97,97,97,0,0,0,97,97,97,97,97,97,45,45,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,67,67,97,97,97,97,0,0,28672,97,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,2054,97,97,291,97,97,97,97,97,97,320,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,97,12288,0,925,926,1179,0,45,377,45,45,45,381,45,45,392,45,45,396,45,45,45,45,971,45,45,45,45,45,45,45,45,45,45,45,45,1756,45,45,45,67,67,67,67,463,67,67,67,467,67,67,478,67,67,482,67,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,1472,67,502,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1460,67,97,97,97,97,560,97,97,97,564,97,97,575,97,97,579,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,930,97,599,97,97,97,97,97,97,97,97,97,97,97,97,97,97,872,97,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1758,0,362,0,0,925,41606,0,0,0,0,45,45,934,45,45,45,164,168,174,178,45,45,45,45,45,194,45,45,45,165,45,45,45,45,45,45,45,45,45,199,45,45,45,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,67,1060,67,67,67,67,67,67,1052,1053,67,67,67,67,67,67,67,67,67,67,1063,97,1157,97,97,97,97,97,97,97,97,97,97,97,97,1167,97,97,97,97,97,1379,97,97,97,0,0,0,45,1383,45,45,45,1806,45,45,45,45,45,45,1812,45,45,45,45,67,67,67,67,67,1577,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,1282,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1471,67,45,1402,45,45,45,45,45,45,45,45,45,45,45,45,45,45,417,45,67,1462,67,67,67,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,1517,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1128,97,97,97,97,1636,97,97,97,0,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,1705,67,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,1842,0,0,1779,97,97,97,1782,97,0,0,97,97,97,97,97,97,0,0,97,97,97,1789,97,97,0,0,0,97,1847,97,97,97,97,97,45,45,45,45,45,45,45,45,1675,45,45,45,45,45,45,45,45,737,738,67,740,67,741,67,743,67,67,67,67,67,67,1968,67,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,2062,97,45,67,0,97,45,67,67,97,97,2001,97,0,0,2004,97,97,0,97,97,97,97,1797,97,97,97,97,97,45,45,45,67,261,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,292,97,97,97,97,311,315,321,325,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,97,97,1330,97,97,1333,1334,97,341,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,363,364,0,367,41098,369,140,45,45,45,45,1221,45,45,45,45,45,45,45,45,45,45,45,413,45,45,416,45,376,45,45,45,45,382,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,45,45,403,45,45,45,45,45,45,45,45,45,45,414,45,45,45,418,67,67,67,462,67,67,67,67,468,67,67,67,67,67,67,67,67,1602,67,1604,67,67,67,67,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,500,67,67,67,67,67,1067,67,67,67,67,67,1072,67,67,67,67,67,67,274,0,37139,24853,0,0,0,0,41098,65820,67,67,504,67,67,67,67,67,67,67,510,67,67,67,517,519,541,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,554,97,97,97,559,97,97,97,97,565,97,97,97,97,97,97,97,1718,0,97,97,97,97,97,97,97,898,97,97,97,97,97,97,906,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,597,97,97,97,97,97,1520,97,97,97,97,97,97,97,97,97,97,0,45,1656,45,45,45,97,97,601,97,97,97,97,97,97,97,607,97,97,97,614,616,638,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,369,0,45,45,45,45,45,45,45,45,45,45,661,45,45,45,407,45,45,45,45,45,45,45,45,45,45,45,45,45,1815,45,67,45,667,45,45,45,45,45,45,45,45,45,45,678,45,45,45,421,45,45,45,45,45,45,45,45,45,45,45,45,976,977,45,45,45,682,45,45,45,45,45,45,45,45,45,45,693,45,45,697,67,67,748,67,67,67,67,754,67,67,67,67,67,67,67,67,67,1274,67,67,67,67,67,67,67,67,765,67,67,67,67,769,67,67,67,67,67,67,67,67,67,1589,67,67,67,67,67,67,67,67,780,67,67,784,67,67,67,67,67,67,67,67,67,67,67,1777,67,97,97,97,97,97,97,846,97,97,97,97,852,97,97,97,97,97,97,97,1742,45,45,45,45,45,45,45,1747,97,97,97,863,97,97,97,97,867,97,97,97,97,97,97,97,308,97,97,97,97,97,97,97,97,97,97,12288,1178,925,0,1179,0,97,97,97,878,97,97,882,97,97,97,97,97,97,97,97,97,97,12288,0,925,0,1179,0,908,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,0,954,45,45,45,45,45,45,45,45,45,45,963,45,45,966,45,45,157,45,45,171,45,45,45,45,45,45,45,45,45,45,948,45,45,45,45,45,1022,67,67,1026,67,67,67,1030,67,67,67,67,67,67,67,67,67,1603,1605,67,67,67,1608,67,67,67,1039,67,67,1042,67,67,67,67,67,67,67,67,67,67,471,67,67,67,67,67,0,1100,0,97,97,97,97,97,97,97,97,97,97,97,97,97,904,97,97,97,97,1116,97,97,1120,97,97,97,1124,97,97,97,97,97,97,562,97,97,97,571,97,97,97,97,97,97,97,97,97,1133,97,97,1136,97,97,97,97,97,97,97,97,915,917,97,97,97,97,97,0,97,1170,97,97,97,97,97,97,97,97,0,0,925,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,45,1993,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,1278,67,0,0,0,45,45,1182,45,45,45,45,45,45,45,45,45,1189,1204,45,45,45,1207,45,45,1209,45,1210,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,45,689,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,236,67,67,67,67,67,67,67,801,67,67,67,805,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,1249,67,67,67,67,67,67,507,67,67,67,67,67,67,67,67,67,67,1300,0,0,0,0,0,1267,67,67,1269,67,1270,67,67,67,67,67,67,67,67,67,1280,97,1349,97,1350,97,97,97,97,97,97,97,97,97,1360,97,97,97,0,1980,97,97,97,97,97,45,45,45,45,45,45,673,45,45,45,45,677,45,45,45,45,1401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,953,67,1437,67,1440,67,67,67,67,1445,67,67,67,1448,67,67,67,67,67,67,1029,67,67,67,67,67,67,67,67,67,67,1825,67,67,67,67,67,1473,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,1320,0,834,97,97,97,97,1490,97,1493,97,97,97,97,1498,97,97,97,1501,97,97,97,0,97,1638,97,0,97,97,97,97,97,97,97,97,916,97,97,97,97,97,97,0,1528,97,97,97,0,45,45,45,1535,45,45,45,45,45,45,45,1867,67,67,67,67,67,67,67,67,67,97,97,97,97,1932,0,0,1555,45,45,45,45,45,45,45,45,45,45,45,45,45,1567,45,45,158,45,45,172,45,45,45,183,45,45,45,45,201,45,45,67,212,67,67,67,67,231,235,241,245,67,67,67,67,67,67,493,67,67,67,67,67,67,67,67,67,67,472,67,67,67,67,67,97,97,97,97,1651,97,97,97,97,97,0,45,45,45,45,45,45,45,1539,45,45,45,67,1704,67,1706,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,1841,97,0,1844,97,97,97,97,1716,97,97,97,0,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1385,1748,45,45,45,45,45,45,45,45,45,45,45,45,45,1757,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,97,97,1780,97,97,97,0,0,1786,97,97,97,97,97,0,0,97,97,1730,0,97,97,97,97,97,1736,97,1738,67,97,97,97,97,97,97,0,1838,97,97,97,97,97,0,0,97,1729,97,0,97,97,97,97,97,97,97,97,1162,97,97,97,1165,97,97,97,45,1950,45,45,45,45,45,45,45,45,1958,67,67,67,1962,67,67,67,67,67,1246,67,67,67,67,67,67,67,67,67,67,67,97,1710,97,97,97,1999,67,97,97,97,97,0,2003,97,97,97,0,97,97,2008,2009,45,67,67,67,67,0,0,97,97,97,97,45,2052,67,2053,0,0,0,0,925,41606,0,0,930,0,45,45,45,45,45,45,1392,45,1394,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,45,1563,1565,45,45,45,1568,0,97,2055,45,67,0,97,45,67,0,97,45,67,28672,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,679,45,45,67,67,266,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,346,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,362,0,364,0,367,41098,369,140,371,45,45,45,379,45,45,45,388,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,449,45,45,45,45,45,67,67,542,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,97,97,97,97,1622,97,97,97,97,97,97,97,1629,97,97,0,1794,1795,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1745,45,45,97,639,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,45,731,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,251,67,67,67,67,67,798,67,67,67,67,67,67,67,67,67,67,67,67,1073,67,67,67,860,97,97,97,97,97,97,97,97,97,97,97,97,97,97,873,0,0,1101,97,97,97,97,97,97,97,97,97,97,97,97,97,921,97,0,67,67,67,67,1245,67,67,67,67,67,67,67,67,67,67,67,67,1250,67,67,1253,0,0,1312,0,0,0,1318,0,0,0,0,0,0,97,97,97,97,1106,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,97,1155,97,97,1325,97,97,97,97,97,97,97,97,97,97,97,97,97,1141,97,97,67,67,1439,67,1441,67,67,67,67,67,67,67,67,67,67,67,67,1264,67,67,67,97,97,1492,97,1494,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,97,67,67,67,2037,67,97,0,0,97,97,97,2043,97,45,45,45,442,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,232,67,67,67,67,67,67,67,67,1823,67,67,67,67,67,67,67,67,97,97,97,97,1975,0,0,97,874,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1142,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,65,86,117,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,63,84,115,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,61,82,113,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,59,80,111,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,57,78,109,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,55,76,107,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,53,74,105,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,51,72,103,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,49,70,101,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,47,68,99,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,45,67,97,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,213085,53264,18,49172,57366,24,8192,28,102432,0,0,0,44,0,0,32863,53264,18,49172,57366,24,8192,28,102432,0,41,41,41,0,0,1138688,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,89,53264,18,18,49172,0,57366,0,24,24,24,0,127,127,127,127,102432,67,262,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,342,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,360,0,0,364,0,367,41098,369,140,45,45,45,45,717,45,45,45,45,45,45,45,45,45,45,45,412,45,45,45,45,45,67,1009,67,67,67,67,67,67,67,67,67,67,67,67,67,1292,67,67,1294,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,1615,97,97,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,66,87,118,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,64,85,116,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,62,83,114,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,60,81,112,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,58,79,110,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,56,77,108,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,54,75,106,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,52,73,104,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,50,71,102,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,48,69,100,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,46,67,98,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,233472,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,69724,53264,18,18,49172,0,57366,262144,24,24,24,0,28,28,28,28,102432,45,45,161,45,45,45,45,45,45,45,45,45,45,45,45,45,710,45,45,28,139621,359,0,0,0,364,0,367,41098,369,140,45,45,45,45,1389,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,45,67,503,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1449,67,67,97,600,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1154,97,0,0,0,0,925,41606,927,0,0,0,45,45,45,45,45,45,1866,67,67,67,67,67,67,67,67,67,67,772,67,67,67,67,67,45,45,969,45,45,45,45,45,45,45,45,45,45,45,45,45,951,45,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,45,0,0,0,1314,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1488,67,67,267,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,347,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,361,0,0,364,0,367,41098,369,140,45,45,45,45,734,45,45,45,67,67,67,67,67,742,67,67,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,1214,45,45,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1361,97,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,45,45,0,0,0,0,2220032,0,0,1130496,0,0,0,0,2170880,2171020,2170880,2170880,18,0,0,131072,0,0,0,90112,0,2220032,0,0,0,0,0,0,0,0,97,97,97,1485,97,97,97,97,0,45,45,45,45,45,1537,45,45,45,45,45,1390,45,1393,45,45,45,45,1398,45,45,45,2170880,2171167,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,0,0,0,0,0,2183168,0,0,0,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2721252,2744320,2170880,2170880,2170880,2834432,2840040,2170880,2908160,2170880,2170880,2936832,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3014656,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,0,0,0,0,2220032,0,0,0,1142784,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3215360,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,543,0,545,0,0,2183168,0,0,831,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,2170880,2170880,3092480,2170880,2170880,3125248,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,0,0,0,67,67,37139,37139,24853,24853,0,0,0,0,0,65820,65820,0,287,97,97,97,97,97,1783,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,1791,0,0,546,70179,0,0,0,0,552,0,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,97,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,0,0,147456,0,0,0,0,925,41606,0,928,0,0,45,45,45,45,45,45,998,45,45,45,45,45,45,45,45,45,1562,45,1564,45,45,45,45,0,2158592,2158592,0,0,0,0,2232320,2232320,2232320,0,2240512,2240512,2240512,2240512,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640],r.EXPECTED=[291,300,304,341,315,309,305,295,319,323,327,329,296,333,337,339,342,346,350,294,356,360,312,367,352,371,363,375,379,383,387,391,395,726,399,405,518,684,405,405,405,405,808,405,405,405,512,405,405,405,431,405,405,406,405,405,404,405,405,405,405,405,405,405,908,631,410,415,405,414,419,608,405,429,602,405,435,443,405,441,641,478,405,447,451,450,456,643,461,460,762,679,465,469,741,473,477,482,486,492,932,931,523,498,504,720,405,510,596,405,516,941,580,522,929,527,590,589,897,939,534,538,547,551,555,559,563,567,571,969,575,708,690,689,579,584,634,405,594,731,405,600,882,405,606,895,786,452,612,405,615,620,876,624,628,638,647,651,655,659,663,667,676,683,688,695,694,791,405,699,437,405,706,714,405,712,825,870,405,718,724,769,768,823,730,735,745,751,422,755,759,425,766,902,810,587,775,888,887,405,773,992,405,779,962,405,785,781,986,790,795,797,506,500,499,801,805,814,820,829,833,837,841,845,849,853,857,861,616,865,869,868,488,405,874,816,405,880,738,405,886,892,543,405,901,906,913,912,918,494,541,922,926,936,945,949,953,957,530,966,973,960,702,701,405,979,981,405,985,747,405,990,998,914,405,996,1004,672,975,974,1014,1002,1008,670,1012,405,405,405,405,405,401,1018,1022,1026,1106,1071,1111,1111,1111,1082,1145,1030,1101,1034,1038,1106,1106,1106,1106,1046,1206,1052,1106,1072,1111,1111,1042,1134,1065,1111,1112,1056,1160,1207,1062,1204,1208,1069,1106,1106,1106,1076,1111,1207,1161,1122,1205,1064,1094,1106,1106,1107,1111,1111,1111,1078,1086,1207,1092,1098,1046,1058,1106,1106,1110,1111,1111,1116,1120,1161,1126,1202,1104,1106,1145,1146,1129,1138,1088,1151,1048,1157,1153,1132,1141,1165,1107,1111,1172,1179,1109,1183,1175,1143,1147,1187,1108,1191,1195,1144,1199,1168,1212,1216,1220,1224,1228,1232,1236,1557,1247,1241,1241,1038,1434,1241,1241,1241,1241,1254,1275,1617,1241,1280,1287,1241,1241,1241,1287,1241,2114,1291,1241,1243,1241,2049,1824,2094,2095,1520,1309,1241,1241,1302,1241,1321,1311,1241,1241,1313,1778,1325,1336,1241,1241,1325,1330,1353,1241,1241,1695,1354,1241,1241,1241,1294,1686,1331,1241,1696,1368,1241,1338,1370,1241,1392,1399,1364,2017,1406,2016,1405,1716,1406,1407,1422,1417,1421,1241,1241,1241,1349,1426,1241,1774,1756,1241,1773,1241,1241,1345,1964,1812,1432,1241,1241,1345,1993,1459,1241,1241,1241,1395,1848,1767,1465,1241,1241,1394,1847,1242,1477,1241,1241,1428,1241,1445,1492,1241,1241,1438,1241,1499,1241,1241,1241,1455,1241,1818,1448,1241,1250,1241,2026,1623,1449,1241,1612,1616,1241,1614,1241,1257,1241,1241,1985,1292,1586,1512,1241,1517,2050,1526,1674,1519,1524,1647,2051,1532,1537,1551,1544,1550,1555,1561,1571,1578,1584,1590,1591,1653,1595,1602,1606,1610,1634,1628,1640,1633,1645,1241,1241,1241,1469,1241,1970,1651,1241,1270,1241,1241,1819,1449,1241,1293,1664,1241,1241,1481,1485,1574,1672,1241,1241,1513,1317,1487,1684,1241,1241,1533,1299,1694,1241,1241,1295,1241,1241,1241,1546,1700,1241,1241,1707,1241,1713,1241,1849,1715,1241,1720,1241,1276,1267,1241,1241,2107,1657,1864,1241,1881,1241,1326,1292,1241,1685,1358,1724,1338,1241,1363,1362,1342,1340,1361,1339,1833,1372,1360,1833,1833,1342,1343,1835,1341,1731,1738,1344,1241,1745,1241,1379,1241,1241,2092,1241,1388,1761,1754,1241,1386,1241,1400,1760,1241,1241,1241,1598,1734,1241,1241,1241,1635,1645,1241,1780,1766,1241,1241,1332,1771,1241,1241,1629,2079,1241,1242,1784,1241,1241,1680,1639,2063,1790,1241,1241,1741,1241,1241,1800,1241,1241,1762,1473,1241,1806,1241,1241,1786,1240,1709,1241,1241,1241,1668,1811,1241,1940,1241,1401,1974,1241,1408,1413,1382,1241,1816,1241,1241,1802,2086,1811,1241,1817,1945,1823,2095,2095,2047,2094,2046,2080,1241,1409,1312,1376,2096,2048,1241,1241,1807,1241,1241,1241,2035,1241,1241,1828,1241,2057,2061,1241,1241,1843,1241,2059,1241,1241,1241,1690,1847,1241,1241,1241,1703,2102,1848,1241,1241,1853,1292,1848,1241,2016,1857,1241,2002,1868,1241,1436,1241,1241,1271,1305,1241,1874,1241,1241,1884,2037,1892,1241,1890,1241,1461,1241,1241,1795,1241,1241,1891,1241,1878,1241,1888,1241,1888,1905,1896,2087,1912,1903,1241,1911,1906,1916,1905,2027,1863,1925,2088,1859,1861,1922,1927,1931,1935,1494,1241,1241,1918,1907,1939,1917,1944,1949,1241,1241,1451,1955,1241,1241,1241,1796,1727,2061,1241,1241,1899,1241,1660,1968,1241,1241,1951,1678,1978,1241,1241,1241,1839,1241,1241,1984,1982,1241,1488,1241,1241,1624,1450,1989,1241,1241,1241,1870,1995,1292,1241,1241,1958,1261,1241,1996,1241,1241,1241,2039,2008,1241,1241,1750,2e3,1241,1256,2001,1960,1241,1564,1241,1504,1241,1241,1442,1241,1241,1564,1528,1263,1241,1508,1241,1241,1468,1498,2006,1540,2015,1539,2014,1748,2013,1539,1831,2014,2012,1500,1567,2022,2021,1241,1580,1241,1241,2033,2037,1791,2045,2031,1241,1621,1241,1641,2044,1241,1241,1241,2093,1241,1241,2055,1241,1241,2067,1241,1283,1241,1241,1241,2101,2071,1241,1241,1241,2073,1848,2040,1241,1241,1241,2077,1241,1241,2106,1241,1241,2084,1241,2111,1241,1241,1381,1380,1241,1241,1241,2100,1241,2129,2118,2122,2126,2197,2133,3010,2825,2145,2698,2156,2226,2160,2161,2165,2174,2293,2194,2630,2201,2203,2152,3019,2226,2263,2209,2213,2218,2269,2292,2269,2269,2184,2226,2238,2148,2151,3017,2245,2214,2269,2269,2185,2226,2292,2269,2291,2269,2269,2269,2292,2205,3019,2226,2226,2160,2160,2160,2261,2160,2160,2160,2262,2276,2160,2160,2277,2216,2283,2216,2269,2269,2268,2269,2267,2269,2269,2269,2271,2568,2292,2269,2293,2269,2182,2190,2269,2186,2226,2226,2226,2226,2227,2160,2160,2160,2160,2263,2160,2275,2277,2282,2215,2217,2269,2269,2291,2269,2269,2293,2291,2269,2220,2269,2295,2294,2269,2269,2305,2233,2262,2278,2218,2269,2234,2226,2226,2228,2160,2160,2160,2289,2220,2294,2294,2269,2269,2304,2269,2160,2160,2287,2269,2269,2305,2269,2269,2312,2269,2269,2225,2226,2160,2287,2289,2219,2304,2295,2314,2234,2226,2314,2269,2226,2226,2160,2288,2219,2222,2304,2296,2269,2224,2160,2160,2269,2302,2294,2314,2224,2226,2288,2220,2294,2269,2290,2269,2269,2293,2269,2269,2269,2269,2270,2221,2313,2225,2227,2160,2300,2269,2225,2261,2309,2234,2229,2223,2318,2318,2318,2328,2336,2340,2344,2350,2637,2712,2358,2362,2372,2135,2378,2398,2135,2135,2135,2135,2136,2417,2241,2135,2378,2135,2135,2980,2984,2135,3006,2135,2135,2135,2945,2931,2425,2400,2135,2135,2135,2954,2135,2481,2433,2135,2135,2988,2824,2135,2135,2482,2434,2135,2135,2440,2445,2452,2135,2135,2998,3002,2961,2441,2446,2453,2463,2974,2135,2135,2135,2140,2642,2709,2459,2470,2465,2135,2135,3005,2135,2135,2987,2823,2458,2469,2464,2975,2135,2135,2135,2353,2488,2447,2324,2974,2135,2409,2459,2448,2135,2961,2487,2446,2476,2323,2973,2135,2135,2135,2354,2476,2974,2135,2135,2135,2957,2135,2135,2960,2135,2135,2135,2363,2409,2459,2474,2465,2487,2571,2973,2135,2135,2168,2973,2135,2135,2135,2959,2135,2135,2135,2506,2135,2957,2488,2170,2135,2135,2135,2960,2135,2818,2493,2135,2135,3033,2135,2135,2135,2934,2819,2494,2135,2135,2135,2976,2780,2499,2135,2135,2135,3e3,2968,2135,2935,2135,2135,2135,2364,2507,2135,2135,2934,2135,2135,2780,2492,2507,2135,2135,2506,2780,2135,2135,2782,2780,2135,2782,2135,2783,2374,2514,2135,2135,2135,3007,2530,2974,2135,2135,2135,3008,2135,2135,2134,2135,2526,2531,2975,2135,2135,3042,2581,2575,2956,2135,2135,2135,2394,2135,2508,2535,2840,2844,2495,2135,2135,2136,2684,2537,2842,2846,2135,2136,2561,2581,2551,2536,2841,2845,2975,3043,2582,2843,2555,2135,3040,3044,2538,2844,2975,2135,2135,2253,2644,2672,2542,2554,2135,2135,2346,2873,2551,2555,2135,2135,2135,2381,2559,2565,2538,2553,2135,2560,2914,2576,2590,2135,2135,2135,2408,2136,2596,2624,2135,2135,2135,2409,2135,2618,2597,3008,2135,2135,2380,2956,2601,2135,2135,2135,2410,2620,2624,2135,2136,2383,2135,2135,2783,2623,2135,2135,2393,2888,2136,2621,3008,2135,2618,2618,2622,2135,2135,2405,2414,2619,2384,2624,2135,2136,2950,2135,2138,2135,2139,2135,2604,2623,2135,2140,2878,2665,2957,2622,2135,2135,2428,2762,2606,2612,2135,2135,2501,2586,2604,3038,2135,2604,3036,2387,2958,2386,2135,2141,2135,2421,2387,2385,2135,2385,2384,2384,2135,2386,2628,2384,2135,2135,2501,2596,2591,2135,2135,2135,2400,2135,2634,2135,2135,2559,2580,2575,2648,2135,2135,2135,2429,2649,2135,2135,2135,2435,2654,2658,2135,2135,2135,2436,2649,2178,2659,2135,2135,2595,2601,2669,2677,2135,2135,2616,2957,2879,2665,2691,2135,2363,2367,2900,2878,2664,2690,2975,2877,2643,2670,2974,2671,2975,2135,2135,2619,2608,2669,2673,2135,2135,2653,2177,2672,2135,2135,2135,2486,2168,2251,2255,2695,2974,2709,2135,2135,2135,2487,2169,2399,2716,2975,2135,2363,2770,2776,2640,2717,2135,2135,2729,2135,2135,2641,2718,2135,2135,2135,2505,2135,2640,2257,2974,2135,2727,2975,2135,2365,2332,2895,2957,2135,2959,2135,2365,2749,2754,2959,2958,2958,2135,2380,2793,2799,2135,2735,2738,2135,2381,2135,2135,2940,2974,2135,2744,2135,2135,2739,2519,2976,2745,2135,2135,2135,2509,2755,2135,2135,2135,2510,2772,2778,2135,2135,2740,2520,2135,2771,2777,2135,2135,2759,2750,2792,2798,2135,2135,2781,2392,2779,2135,2135,2135,2521,2135,2679,2248,2135,2135,2681,2480,2135,2135,2786,3e3,2135,2679,2683,2135,2135,2416,2135,2135,2135,2525,2135,2730,2135,2135,2135,2560,2581,2135,2805,2135,2135,2804,2962,2832,2974,2135,2382,2135,2135,2958,2135,2135,2960,2135,2829,2833,2975,2961,2965,2969,2973,2968,2972,2135,2135,2135,2641,2135,2515,2966,2970,2851,2478,2135,2135,2808,2135,2809,2135,2135,2135,2722,2852,2479,2135,2135,2815,2135,2135,2766,2853,2480,2135,2857,2479,2135,2388,2723,2135,2364,2331,2894,2858,2480,2135,2135,2850,2478,2135,2135,2135,2806,2864,2135,2399,2256,2974,2865,2135,2135,2862,2135,2135,2135,2685,2807,2865,2135,2135,2807,2863,2135,2135,2135,2686,2884,2807,2135,2809,2807,2135,2135,2807,2806,2705,2810,2808,2700,2869,2702,2702,2702,2704,2883,2135,2135,2135,2730,2884,2135,2135,2135,2731,2321,2546,2135,2135,2876,2255,2889,2322,2547,2135,2401,2135,2135,2135,2949,2367,2893,2544,2973,2906,2973,2135,2135,2877,2663,2368,2901,2907,2974,2366,2899,2905,2972,2920,2974,2135,2135,2911,2900,2920,2363,2913,2918,2465,2941,2975,2135,2135,2924,2928,2974,2945,2931,2135,2135,2135,2765,2136,2955,2135,2135,2939,2931,2380,2135,2135,2380,2135,2135,2135,2780,2507,2137,2135,2137,2135,2139,2135,2806,2810,2135,2135,2135,2992,2135,2135,2962,2966,2970,2974,2135,2135,2787,3014,2135,2521,2993,2135,2135,2135,2803,2135,2135,2135,2618,2607,2997,3001,2135,2135,2963,2967,2971,2975,2135,2135,2791,2797,2135,3009,2999,3003,2787,3001,2135,2135,2964,2968,2785,2999,3003,2135,2135,2135,2804,2785,2999,3004,2135,2135,2135,2807,2135,2135,3023,2135,2135,2135,2811,2135,2135,3027,2135,2135,2135,2837,2968,3028,2135,2135,2135,2875,2135,2784,3029,2135,2408,2457,2446,0,14,0,-2120220672,1610612736,-2074083328,-2002780160,-2111830528,1073872896,1342177280,1075807216,4096,16384,2048,8192,0,8192,0,0,0,0,1,0,0,0,2,0,-2145386496,8388608,1073741824,0,2147483648,2147483648,2097152,2097152,2097152,536870912,0,0,134217728,33554432,1536,268435456,268435456,268435456,268435456,128,256,32,0,65536,131072,524288,16777216,268435456,2147483648,1572864,1835008,640,32768,65536,262144,1048576,2097152,196608,196800,196608,196608,0,131072,131072,131072,196608,196624,196608,196624,196608,196608,128,4096,16384,16384,2048,0,4,0,0,2147483648,2097152,0,1024,32,32,0,65536,1572864,1048576,32768,32768,32768,32768,196608,196608,196608,64,64,196608,196608,131072,131072,131072,131072,268435456,268435456,64,196736,196608,196608,196608,131072,196608,196608,16384,4,4,4,2,32,32,65536,1048576,12582912,1073741824,0,0,2,8,16,96,2048,32768,0,0,131072,268435456,268435456,268435456,256,256,196608,196672,196608,196608,196608,196608,4,0,256,256,256,256,32,32,32768,32,32,32,32,32768,268435456,268435456,268435456,196608,196608,196608,196624,196608,196608,196608,16,16,16,268435456,196608,64,64,64,196608,196608,196608,196672,268435456,64,64,196608,196608,16,196608,196608,196608,268435456,64,196608,131072,262144,4194304,25165824,33554432,134217728,268435456,268435456,196608,262152,8,256,512,3072,16384,200,-1073741816,8392713,40,8392718,520,807404072,40,520,100663304,0,0,-540651761,-540651761,257589048,0,262144,0,0,3,8,256,0,4,6,4100,8388612,0,0,0,3,4,8,256,512,1024,0,2097152,0,0,-537854471,-537854471,0,100663296,0,0,1,2,0,0,0,16384,0,0,0,96,14336,0,0,0,7,8,234881024,0,0,0,8,0,0,0,0,262144,0,0,16,64,384,512,0,1,1,0,12582912,0,0,0,0,33554432,67108864,-606084144,-606084144,-606084138,0,0,28,32,768,1966080,-608174080,0,0,0,14,35056,16,64,896,24576,98304,98304,131072,262144,524288,1048576,4194304,25165824,1048576,62914560,134217728,-805306368,0,384,512,16384,65536,131072,262144,29360128,33554432,134217728,268435456,1073741824,2147483648,262144,524288,1048576,29360128,33554432,524288,1048576,16777216,33554432,134217728,268435456,1073741824,0,0,0,123856,1966080,0,64,384,16384,65536,131072,16384,65536,524288,268435456,2147483648,0,0,524288,2147483648,0,0,1,16,0,256,524288,0,0,0,25,96,128,-537854471,0,0,0,32,7404800,-545259520,0,0,0,60,0,249,64768,1048576,6291456,6291456,25165824,100663296,402653184,1073741824,96,128,1280,2048,4096,57344,6291456,57344,6291456,8388608,16777216,33554432,201326592,1342177280,2147483648,0,57344,6291456,8388608,100663296,134217728,2147483648,0,0,0,1,8,16,64,128,64,128,256,1024,131072,131072,131072,262144,524288,16777216,57344,6291456,8388608,67108864,134217728,64,256,1024,2048,4096,57344,64,256,0,24576,32768,6291456,67108864,134217728,0,1,64,256,24576,32768,4194304,32768,4194304,67108864,0,0,64,256,0,0,24576,32768,0,16384,4194304,67108864,64,16384,0,0,1,64,256,16384,4194304,67108864,0,0,0,16384,0,16384,16384,0,-470447874,-470447874,-470447874,0,0,128,0,0,8,96,2048,32768,262144,8388608,35056,1376256,-471859200,0,0,14,16,224,2048,32768,2097152,4194304,8388608,-486539264,0,96,128,2048,32768,262144,2097152,262144,2097152,8388608,33554432,536870912,1073741824,2147483648,0,1610612736,2147483648,0,0,1,524288,1048576,12582912,0,0,0,151311,264503296,2097152,8388608,33554432,1610612736,2147483648,262144,8388608,33554432,536870912,67108864,4194304,0,4194304,0,4194304,4194304,0,0,524288,8388608,536870912,1073741824,2147483648,1,4097,8388609,96,2048,32768,1073741824,2147483648,0,96,2048,2147483648,0,0,96,2048,0,0,1,12582912,0,0,0,0,1641895695,1641895695,0,0,0,249,7404800,15,87808,1835008,1639972864,0,768,5120,16384,65536,1835008,1835008,12582912,16777216,1610612736,0,3,4,8,768,4096,65536,0,0,256,512,786432,8,256,512,4096,16384,1835008,16384,1835008,12582912,1610612736,0,0,0,256,0,0,0,4,8,16,32,1,2,8,256,16384,524288,16384,524288,1048576,12582912,1610612736,0,0,0,8388608,0,0,0,524288,4194304,0,0,0,8388608,-548662288,-548662288,-548662288,0,0,256,16384,65536,520093696,-1073741824,0,0,0,16777216,0,16,32,960,4096,4980736,520093696,1073741824,0,32,896,4096,57344,1048576,6291456,8388608,16777216,100663296,134217728,268435456,2147483648,0,512,786432,4194304,33554432,134217728,268435456,0,786432,4194304,134217728,268435456,0,524288,4194304,268435456,0,0,0,0,0,4194304,4194304,-540651761,0,0,0,2,4,8,16,96,128,264503296,-805306368,0,0,0,8,256,512,19456,131072,3072,16384,131072,262144,8388608,16777216,512,1024,2048,16384,131072,262144,131072,262144,8388608,33554432,201326592,268435456,0,3,4,256,1024,2048,57344,16384,131072,8388608,33554432,134217728,268435456,0,3,256,1024,16384,131072,33554432,134217728,1073741824,2147483648,0,0,256,524288,2147483648,0,3,256,33554432,134217728,1073741824,0,1,2,33554432,1,2,134217728,1073741824,0,1,2,134217728,0,0,0,64,0,0,0,16,32,896,4096,786432,4194304,16777216,33554432,201326592,268435456,1073741824,2147483648,0,0,0,15,0,4980736,4980736,4980736,70460,70460,3478332,0,0,1008,4984832,520093696,60,4864,65536,0,0,0,12,16,32,256,512,4096,65536,0,0,0,67108864,0,0,0,12,0,256,512,65536,0,0,1024,512,131072,131072,4,16,32,65536,0,4,16,32,0,0,0,4,16,0,0,16384,67108864,0,0,1,24,96,128,256,1024],r.TOKEN=[\"(0)\",\"JSONChar\",\"JSONCharRef\",\"JSONPredefinedCharRef\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$$'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(e,t,n){\"use strict\";var r=e(\"./JSONiqTokenizer\").JSONiqTokenizer,i=e(\"./lexer\").Lexer,s=\"NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"JSONPredefinedCharRef\",token:\"constant.language.escape\"},{name:\"JSONCharRef\",token:\"constant.language.escape\"},{name:\"JSONChar\",token:\"string\"}]};n.JSONiqLexer=function(){return new i(r,d)}},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(e,t,n){\"use strict\";var r=function(e){var t=e;this.tokens=[],this.reset=function(){t=t,this.tokens=[]},this.startNonterminal=function(){},this.endNonterminal=function(){},this.terminal=function(e,n,r){this.tokens.push({name:e,value:t.substring(n,r)})},this.whitespace=function(e,n){this.tokens.push({name:\"WS\",value:t.substring(e,n)})}};n.Lexer=function(e,t){this.tokens=[],this.getLineTokens=function(n,i){i=i===\"start\"||!i?'[\"start\"]':i;var s=JSON.parse(i),o=new r(n),u=new e(n,o),a=[];for(;;){var f=s[s.length-1];try{o.tokens=[],u[\"parse_\"+f]();var l=null;o.tokens.length>1&&o.tokens[0].name===\"WS\"&&(a.push({type:\"text\",value:o.tokens[0].value}),o.tokens.splice(0,1));var c=o.tokens[0],h=t[f];for(var p=0;p<h.length;p++){var d=t[f][p];if(typeof d.name==\"function\"&&d.name(c)||d.name===c.name){l=d;break}}if(c.name===\"EOF\")break;if(c.value===\"\")throw\"Encountered empty string lexical rule.\";a.push({type:l===null?\"text\":typeof l.token==\"function\"?l.token(c.value):l.token,value:c.value}),l&&l.next&&l.next(s)}catch(v){if(v instanceof u.ParseException){var m=0;for(var g=0;g<a.length;g++)m+=a[g].value.length;return a.push({type:\"text\",value:n.substring(m)}),{tokens:a,state:JSON.stringify([\"start\"])}}throw v}}return{tokens:a,state:JSON.stringify(s)}}}},{}]},{},[\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\"])}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function a(e,t){var n=!0,r=e.type.split(\".\"),i=t.split(\".\");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../behaviour/xml\").XmlBehaviour,u=e(\"../../token_iterator\").TokenIterator,f=function(){this.inherit(s,[\"braces\",\"parens\",\"string_dquotes\"]),this.inherit(o),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var s=n.getCursorPosition(),o=new u(r,s.row,s.column),f=o.getCurrentToken(),l=!1,e=JSON.parse(e).pop();if(f&&f.value===\">\"||e!==\"StartTag\")return;if(!f||!a(f,\"meta.tag\")&&(!a(f,\"text\")||!f.value.match(\"/\"))){do f=o.stepBackward();while(f&&(a(f,\"string\")||a(f,\"keyword.operator\")||a(f,\"entity.attribute-name\")||a(f,\"text\")))}else l=!0;var c=o.stepBackward();if(!f||!a(f,\"meta.tag\")||c!==null&&c.value.match(\"/\"))return;var h=f.value.substring(1);if(l)var h=h.substring(0,s.column-f.start);return{text:\"></\"+h+\">\",selection:[1,1]}}})};r.inherits(f,i),t.XQueryBehaviour=f}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/jsoniq\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/jsoniq_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"../worker/worker_client\").WorkerClient,i=e(\"../lib/oop\"),s=e(\"./text\").Mode,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./xquery/jsoniq_lexer\").JSONiqLexer,a=e(\"../range\").Range,f=e(\"./behaviour/xquery\").XQueryBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=e(\"../anchor\").Anchor,h=function(){this.$tokenizer=new u,this.$behaviour=new f,this.foldingRules=new l,this.$highlightRules=new o};i.inherits(h,s),function(){this.completer={getCompletions:function(e,t,n,r,i){if(!t.$worker)return i();t.$worker.emit(\"complete\",{data:{pos:n,prefix:r}}),t.$worker.on(\"complete\",function(e){i(null,e.data)})}},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=t.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);return i&&(r+=n),r},this.checkOutdent=function(e,t,n){return/^\\s+$/.test(t)?/^\\s*[\\}\\)]/.test(n):!1},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=r.match(/^(\\s*[\\}\\)])/);if(!i)return 0;var s=i[1].length,o=t.findMatchingBracket({row:n,column:s});if(!o||o.row==n)return 0;var u=this.$getIndent(t.getLine(o.row));t.replace(new a(n,0,n,s-1),u)},this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,u=/^\\s*\\(:(.*):\\)/;for(i=n;i<=r;i++)if(!u.test(t.getLine(i))){o=!1;break}var f=new a(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(u)[1]:\"(:\"+s+\":)\")},this.createWorker=function(e){var t=new r([\"ace\"],\"ace/mode/xquery_worker\",\"XQueryWorker\"),n=this;return t.attachToDocument(e.getDocument()),t.on(\"ok\",function(t){e.clearAnnotations()}),t.on(\"markers\",function(t){e.clearAnnotations(),n.addMarkers(t.data,e)}),t},this.removeMarkers=function(e){var t=e.getMarkers(!1);for(var n in t)t[n].clazz.indexOf(\"language_highlight_\")===0&&e.removeMarker(n);for(var r=0;r<e.markerAnchors.length;r++)e.markerAnchors[r].detach();e.markerAnchors=[]},this.addMarkers=function(e,t){var n=this;t.markerAnchors||(t.markerAnchors=[]),this.removeMarkers(t),t.languageAnnos=[],e.forEach(function(e){function u(i){r&&t.removeMarker(r),o.row=n.row;if(e.pos.sc!==undefined&&e.pos.ec!==undefined){var s=new a(e.pos.sl,e.pos.sc,e.pos.el,e.pos.ec);r=t.addMarker(s,\"language_highlight_\"+(e.type?e.type:\"default\"))}i&&t.setAnnotations(t.languageAnnos)}var n=new c(t.getDocument(),e.pos.sl,e.pos.sc||0);t.markerAnchors.push(n);var r,i=e.pos.ec-e.pos.sc,s=e.pos.el-e.pos.sl,o={guttertext:e.message,type:e.level||\"warning\",text:e.message};u(),n.on(\"change\",function(){u(!0)}),e.message&&t.languageAnnos.push(o)}),t.setAnnotations(t.languageAnnos)},this.$id=\"ace/mode/jsoniq\"}.call(h.prototype),t.Mode=h});                (function() {\n                    window.require([\"ace/mode/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-jsp.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|var\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{regex:\"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",token:\"keyword\",next:[{regex:\"{\",token:\"paren.lparen\",next:[{regex:\"}\",token:\"paren.rparen\",next:\"start\"},{regex:\"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",token:\"keyword\"}]},{token:\"text\",regex:\"\\\\s+\"},{token:\"identifier\",regex:\"\\\\w+\"},{token:\"punctuation.operator\",regex:\".\"},{token:\"text\",regex:\"\\\\s+\"},{regex:\"\",next:\"start\"}]},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.JavaHighlightRules=o}),define(\"ace/mode/jsp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/java_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./java_highlight_rules\").JavaHighlightRules,o=function(){i.call(this);var e=\"request|response|out|session|application|config|pageContext|page|Exception\",t=\"page|include|taglib\",n=[{token:\"comment\",regex:\"<%--\",push:\"jsp-dcomment\"},{token:\"meta.tag\",regex:\"<%@?|<%=?|<%!?|<jsp:[^>]+>\",push:\"jsp-start\"}],r=[{token:\"meta.tag\",regex:\"%>|<\\\\/jsp:[^>]+>\",next:\"pop\"},{token:\"variable.language\",regex:e},{token:\"keyword\",regex:t}];for(var o in this.$rules)this.$rules[o].unshift.apply(this.$rules[o],n);this.embedRules(s,\"jsp-\",r,[\"start\"]),this.addRules({\"jsp-dcomment\":[{token:\"comment\",regex:\".*?--%>\",next:\"pop\"}]}),this.normalizeRules()};r.inherits(o,i),t.JspHighlightRules=o}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/jsp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jsp_highlight_rules\").JspHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.$id=\"ace/mode/jsp\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-jssm.js",
    "content": "define(\"ace/mode/jssm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"punctuation.definition.comment.mn\",regex:/\\/\\*/,push:[{token:\"punctuation.definition.comment.mn\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.jssm\"}],comment:\"block comment\"},{token:\"comment.line.jssm\",regex:/\\/\\//,push:[{token:\"comment.line.jssm\",regex:/$/,next:\"pop\"},{defaultToken:\"comment.line.jssm\"}],comment:\"block comment\"},{token:\"entity.name.function\",regex:/\\${/,push:[{token:\"entity.name.function\",regex:/}/,next:\"pop\"},{defaultToken:\"keyword.other\"}],comment:\"js outcalls\"},{token:\"constant.numeric\",regex:/[0-9]*\\.[0-9]*\\.[0-9]*/,comment:\"semver\"},{token:\"constant.language.jssmLanguage\",regex:/graph_layout\\s*:/,comment:\"jssm language tokens\"},{token:\"constant.language.jssmLanguage\",regex:/machine_name\\s*:/,comment:\"jssm language tokens\"},{token:\"constant.language.jssmLanguage\",regex:/machine_version\\s*:/,comment:\"jssm language tokens\"},{token:\"constant.language.jssmLanguage\",regex:/jssm_version\\s*:/,comment:\"jssm language tokens\"},{token:\"keyword.control.transition.jssmArrow.legal_legal\",regex:/<->/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.legal_none\",regex:/<-/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.none_legal\",regex:/->/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.main_main\",regex:/<=>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.none_main\",regex:/=>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.main_none\",regex:/<=/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.forced_forced\",regex:/<~>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.none_forced\",regex:/~>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.forced_none\",regex:/<~/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.legal_main\",regex:/<-=>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.main_legal\",regex:/<=->/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.legal_forced\",regex:/<-~>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.forced_legal\",regex:/<~->/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.main_forced\",regex:/<=~>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.forced_main\",regex:/<~=>/,comment:\"transitions\"},{token:\"constant.numeric.jssmProbability\",regex:/[0-9]+%/,comment:\"edge probability annotation\"},{token:\"constant.character.jssmAction\",regex:/\\'[^']*\\'/,comment:\"action annotation\"},{token:\"entity.name.tag.jssmLabel.doublequoted\",regex:/\\\"[^\"]*\\\"/,comment:\"jssm label annotation\"},{token:\"entity.name.tag.jssmLabel.atom\",regex:/[a-zA-Z0-9_.+&()#@!?,]/,comment:\"jssm label annotation\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"jssm\",\"jssm_state\"],name:\"JSSM\",scopeName:\"source.jssm\"},r.inherits(s,i),t.JSSMHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/jssm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jssm_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jssm_highlight_rules\").JSSMHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/jssm\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-jsx.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/jsx_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){var e=i.arrayToMap(\"break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|if|throw|delete|in|try|class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|number|int|string|boolean|variant|log|assert\".split(\"|\")),t=i.arrayToMap(\"null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined\".split(\"|\")),n=i.arrayToMap(\"debugger|with|const|export|let|private|public|yield|protected|extern|native|as|operator|__fake__|__readonly__\".split(\"|\")),r=\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:[\"storage.type\",\"text\",\"entity.name.function\"],regex:\"(function)(\\\\s+)(\"+r+\")\"},{token:function(r){return r==\"this\"?\"variable.language\":r==\"function\"?\"storage.type\":e.hasOwnProperty(r)||n.hasOwnProperty(r)?\"keyword\":t.hasOwnProperty(r)?\"constant.language\":/^_?[A-Z][a-zA-Z0-9_]*$/.test(r)?\"language.support.class\":\"identifier\"},regex:r},{token:\"keyword.operator\",regex:\"!|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({<]\"},{token:\"paren.rparen\",regex:\"[\\\\])}>]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(u,o),t.JsxHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/jsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsx_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";function f(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a}var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jsx_highlight_rules\").JsxHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode;r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/jsx\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-julia.js",
    "content": "define(\"ace/mode/julia_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#function_decl\"},{include:\"#function_call\"},{include:\"#type_decl\"},{include:\"#keyword\"},{include:\"#operator\"},{include:\"#number\"},{include:\"#string\"},{include:\"#comment\"}],\"#bracket\":[{token:\"keyword.bracket.julia\",regex:\"\\\\(|\\\\)|\\\\[|\\\\]|\\\\{|\\\\}|,\"}],\"#comment\":[{token:[\"punctuation.definition.comment.julia\",\"comment.line.number-sign.julia\"],regex:\"(#)(?!\\\\{)(.*$)\"}],\"#function_call\":[{token:[\"support.function.julia\",\"text\"],regex:\"([a-zA-Z0-9_]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*\\\\()\"}],\"#function_decl\":[{token:[\"keyword.other.julia\",\"meta.function.julia\",\"entity.name.function.julia\",\"meta.function.julia\",\"text\"],regex:\"(function|macro)(\\\\s*)([a-zA-Z0-9_\\\\{]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*)([(\\\\\\\\{])\"}],\"#keyword\":[{token:\"keyword.other.julia\",regex:\"\\\\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\\\\b\"},{token:\"keyword.control.julia\",regex:\"\\\\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\\\\b\"},{token:\"storage.modifier.variable.julia\",regex:\"\\\\b(?:global|local|const|export|import|importall|using)\\\\b\"},{token:\"variable.macro.julia\",regex:\"@[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"}],\"#number\":[{token:\"constant.numeric.julia\",regex:\"\\\\b0(?:x|X)[0-9a-fA-F]*|(?:\\\\b[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]*)?(?:im)?|\\\\bInf(?:32)?\\\\b|\\\\bNaN(?:32)?\\\\b|\\\\btrue\\\\b|\\\\bfalse\\\\b\"}],\"#operator\":[{token:\"keyword.operator.update.julia\",regex:\"=|:=|\\\\+=|-=|\\\\*=|/=|//=|\\\\.//=|\\\\.\\\\*=|\\\\\\\\=|\\\\.\\\\\\\\=|^=|\\\\.^=|%=|\\\\|=|&=|\\\\$=|<<=|>>=\"},{token:\"keyword.operator.ternary.julia\",regex:\"\\\\?|:\"},{token:\"keyword.operator.boolean.julia\",regex:\"\\\\|\\\\||&&|!\"},{token:\"keyword.operator.arrow.julia\",regex:\"->|<-|-->\"},{token:\"keyword.operator.relation.julia\",regex:\">|<|>=|<=|==|!=|\\\\.>|\\\\.<|\\\\.>=|\\\\.>=|\\\\.==|\\\\.!=|\\\\.=|\\\\.!|<:|:>\"},{token:\"keyword.operator.range.julia\",regex:\":\"},{token:\"keyword.operator.shift.julia\",regex:\"<<|>>\"},{token:\"keyword.operator.bitwise.julia\",regex:\"\\\\||\\\\&|~\"},{token:\"keyword.operator.arithmetic.julia\",regex:\"\\\\+|-|\\\\*|\\\\.\\\\*|/|\\\\./|//|\\\\.//|%|\\\\.%|\\\\\\\\|\\\\.\\\\\\\\|\\\\^|\\\\.\\\\^\"},{token:\"keyword.operator.isa.julia\",regex:\"::\"},{token:\"keyword.operator.dots.julia\",regex:\"\\\\.(?=[a-zA-Z])|\\\\.\\\\.+\"},{token:\"keyword.operator.interpolation.julia\",regex:\"\\\\$#?(?=.)\"},{token:[\"variable\",\"keyword.operator.transposed-variable.julia\"],regex:\"([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+)((?:'|\\\\.')*\\\\.?')\"},{token:\"text\",regex:\"\\\\[|\\\\(\"},{token:[\"text\",\"keyword.operator.transposed-matrix.julia\"],regex:\"([\\\\]\\\\)])((?:'|\\\\.')*\\\\.?')\"}],\"#string\":[{token:\"punctuation.definition.string.begin.julia\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.julia\",regex:\"'\",next:\"pop\"},{include:\"#string_escaped_char\"},{defaultToken:\"string.quoted.single.julia\"}]},{token:\"punctuation.definition.string.begin.julia\",regex:'\"',push:[{token:\"punctuation.definition.string.end.julia\",regex:'\"',next:\"pop\"},{include:\"#string_escaped_char\"},{defaultToken:\"string.quoted.double.julia\"}]},{token:\"punctuation.definition.string.begin.julia\",regex:'\\\\b[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\"',push:[{token:\"punctuation.definition.string.end.julia\",regex:'\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*',next:\"pop\"},{include:\"#string_custom_escaped_char\"},{defaultToken:\"string.quoted.custom-double.julia\"}]},{token:\"punctuation.definition.string.begin.julia\",regex:\"`\",push:[{token:\"punctuation.definition.string.end.julia\",regex:\"`\",next:\"pop\"},{include:\"#string_escaped_char\"},{defaultToken:\"string.quoted.backtick.julia\"}]}],\"#string_custom_escaped_char\":[{token:\"constant.character.escape.julia\",regex:'\\\\\\\\\"'}],\"#string_escaped_char\":[{token:\"constant.character.escape.julia\",regex:\"\\\\\\\\(?:\\\\\\\\|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)\"}],\"#type_decl\":[{token:[\"keyword.control.type.julia\",\"meta.type.julia\",\"entity.name.type.julia\",\"entity.other.inherited-class.julia\",\"punctuation.separator.inheritance.julia\",\"entity.other.inherited-class.julia\"],regex:\"(type|immutable)(\\\\s+)([a-zA-Z0-9_]+)(?:(\\\\s*)(<:)(\\\\s*[.a-zA-Z0-9_:]+))?\"},{token:[\"other.typed-variable.julia\",\"support.type.julia\"],regex:\"([a-zA-Z0-9_]+)(::[a-zA-Z0-9_{}]+)\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"jl\"],firstLineMatch:\"^#!.*\\\\bjulia\\\\s*$\",foldingStartMarker:\"^\\\\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\\\\b(?!.*\\\\bend\\\\b).*$\",foldingStopMarker:\"^\\\\s*(?:end)\\\\b.*$\",name:\"Julia\",scopeName:\"source.julia\"},r.inherits(s,i),t.JuliaHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/julia\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/julia_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./julia_highlight_rules\").JuliaHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.blockComment=\"\",this.$id=\"ace/mode/julia\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-kotlin.js",
    "content": "define(\"ace/mode/kotlin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comments\"},{token:[\"text\",\"keyword.other.kotlin\",\"text\",\"entity.name.package.kotlin\",\"text\"],regex:/^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*))?/},{include:\"#imports\"},{include:\"#statements\"}],\"#classes\":[{token:\"text\",regex:/(?=\\s*(?:companion|class|object|interface))/,push:[{token:\"text\",regex:/}|(?=$)/,next:\"pop\"},{token:[\"keyword.other.kotlin\",\"text\"],regex:/\\b((?:companion\\s*)?)(class|object|interface)\\b/,push:[{token:\"text\",regex:/(?=<|{|\\(|:)/,next:\"pop\"},{token:\"keyword.other.kotlin\",regex:/\\bobject\\b/},{token:\"entity.name.type.class.kotlin\",regex:/\\w+/}]},{token:\"text\",regex:/</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#generics\"}]},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#parameters\"}]},{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?={|$)/,next:\"pop\"},{token:\"entity.other.inherited-class.kotlin\",regex:/\\w+/},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#expressions\"}]}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#statements\"}]}]}],\"#comments\":[{token:\"punctuation.definition.comment.kotlin\",regex:/\\/\\*/,push:[{token:\"punctuation.definition.comment.kotlin\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.kotlin\"}]},{token:[\"text\",\"punctuation.definition.comment.kotlin\",\"comment.line.double-slash.kotlin\"],regex:/(\\s*)(\\/\\/)(.*$)/}],\"#constants\":[{token:\"constant.language.kotlin\",regex:/\\b(?:true|false|null|this|super)\\b/},{token:\"constant.numeric.kotlin\",regex:/\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\b/},{token:\"constant.other.kotlin\",regex:/\\b[A-Z][A-Z0-9_]+\\b/}],\"#expressions\":[{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#expressions\"}]},{include:\"#types\"},{include:\"#strings\"},{include:\"#constants\"},{include:\"#comments\"},{include:\"#keywords\"}],\"#functions\":[{token:\"text\",regex:/(?=\\s*fun)/,push:[{token:\"text\",regex:/}|(?=$)/,next:\"pop\"},{token:\"keyword.other.kotlin\",regex:/\\bfun\\b/,push:[{token:\"text\",regex:/(?=\\()/,next:\"pop\"},{token:\"text\",regex:/</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#generics\"}]},{token:[\"text\",\"entity.name.function.kotlin\"],regex:/((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/}]},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#parameters\"}]},{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?={|=|$)/,next:\"pop\"},{include:\"#types\"}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/(?=\\})/,next:\"pop\"},{include:\"#statements\"}]},{token:\"keyword.operator.assignment.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=$)/,next:\"pop\"},{include:\"#expressions\"}]}]}],\"#generics\":[{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?=,|>)/,next:\"pop\"},{include:\"#types\"}]},{include:\"#keywords\"},{token:\"storage.type.generic.kotlin\",regex:/\\w+/}],\"#getters-and-setters\":[{token:[\"entity.name.function.kotlin\",\"text\"],regex:/\\b(get)\\b(\\s*\\(\\s*\\))/,push:[{token:\"text\",regex:/\\}|(?=\\bset\\b)|$/,next:\"pop\"},{token:\"keyword.operator.assignment.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=$|\\bset\\b)/,next:\"pop\"},{include:\"#expressions\"}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#expressions\"}]}]},{token:[\"entity.name.function.kotlin\",\"text\"],regex:/\\b(set)\\b(\\s*)(?=\\()/,push:[{token:\"text\",regex:/\\}|(?=\\bget\\b)|$/,next:\"pop\"},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#parameters\"}]},{token:\"keyword.operator.assignment.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=$|\\bset\\b)/,next:\"pop\"},{include:\"#expressions\"}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#expressions\"}]}]}],\"#imports\":[{token:[\"text\",\"keyword.other.kotlin\",\"text\",\"keyword.other.kotlin\"],regex:/^(\\s*)(import)(\\s+[^ $]+\\s+)((?:as)?)/}],\"#keywords\":[{token:\"storage.modifier.kotlin\",regex:/\\b(?:var|val|public|private|protected|abstract|final|enum|open|attribute|annotation|override|inline|var|val|vararg|lazy|in|out|internal|data|tailrec|operator|infix|const|yield|typealias|typeof)\\b/},{token:\"keyword.control.catch-exception.kotlin\",regex:/\\b(?:try|catch|finally|throw)\\b/},{token:\"keyword.control.kotlin\",regex:/\\b(?:if|else|while|for|do|return|when|where|break|continue)\\b/},{token:\"keyword.operator.kotlin\",regex:/\\b(?:in|is|as|assert)\\b/},{token:\"keyword.operator.comparison.kotlin\",regex:/==|!=|===|!==|<=|>=|<|>/},{token:\"keyword.operator.assignment.kotlin\",regex:/=/},{token:\"keyword.operator.declaration.kotlin\",regex:/:/},{token:\"keyword.operator.dot.kotlin\",regex:/\\./},{token:\"keyword.operator.increment-decrement.kotlin\",regex:/\\-\\-|\\+\\+/},{token:\"keyword.operator.arithmetic.kotlin\",regex:/\\-|\\+|\\*|\\/|%/},{token:\"keyword.operator.arithmetic.assign.kotlin\",regex:/\\+=|\\-=|\\*=|\\/=/},{token:\"keyword.operator.logical.kotlin\",regex:/!|&&|\\|\\|/},{token:\"keyword.operator.range.kotlin\",regex:/\\.\\./},{token:\"punctuation.terminator.kotlin\",regex:/;/}],\"#namespaces\":[{token:\"keyword.other.kotlin\",regex:/\\bnamespace\\b/},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#statements\"}]}],\"#parameters\":[{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?=,|\\)|=)/,next:\"pop\"},{include:\"#types\"}]},{token:\"keyword.operator.declaration.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=,|\\))/,next:\"pop\"},{include:\"#expressions\"}]},{include:\"#keywords\"},{token:\"variable.parameter.function.kotlin\",regex:/\\w+/}],\"#statements\":[{include:\"#namespaces\"},{include:\"#typedefs\"},{include:\"#classes\"},{include:\"#functions\"},{include:\"#variables\"},{include:\"#getters-and-setters\"},{include:\"#expressions\"}],\"#strings\":[{token:\"punctuation.definition.string.begin.kotlin\",regex:/\"\"\"/,push:[{token:\"punctuation.definition.string.end.kotlin\",regex:/\"\"\"/,next:\"pop\"},{token:\"variable.parameter.template.kotlin\",regex:/\\$\\w+|\\$\\{[^\\}]+\\}/},{token:\"constant.character.escape.kotlin\",regex:/\\\\./},{defaultToken:\"string.quoted.third.kotlin\"}]},{token:\"punctuation.definition.string.begin.kotlin\",regex:/\"/,push:[{token:\"punctuation.definition.string.end.kotlin\",regex:/\"/,next:\"pop\"},{token:\"variable.parameter.template.kotlin\",regex:/\\$\\w+|\\$\\{[^\\}]+\\}/},{token:\"constant.character.escape.kotlin\",regex:/\\\\./},{defaultToken:\"string.quoted.double.kotlin\"}]},{token:\"punctuation.definition.string.begin.kotlin\",regex:/'/,push:[{token:\"punctuation.definition.string.end.kotlin\",regex:/'/,next:\"pop\"},{token:\"constant.character.escape.kotlin\",regex:/\\\\./},{defaultToken:\"string.quoted.single.kotlin\"}]},{token:\"punctuation.definition.string.begin.kotlin\",regex:/`/,push:[{token:\"punctuation.definition.string.end.kotlin\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quoted.single.kotlin\"}]}],\"#typedefs\":[{token:\"text\",regex:/(?=\\s*type)/,push:[{token:\"text\",regex:/(?=$)/,next:\"pop\"},{token:\"keyword.other.kotlin\",regex:/\\btype\\b/},{token:\"text\",regex:/</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#generics\"}]},{include:\"#expressions\"}]}],\"#types\":[{token:\"storage.type.buildin.kotlin\",regex:/\\b(?:Any|Unit|String|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic)\\b/},{token:\"storage.type.buildin.array.kotlin\",regex:/\\b(?:IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray)\\b/},{token:[\"storage.type.buildin.collection.kotlin\",\"text\"],regex:/\\b(Array|List|Map)(<\\b)/,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#types\"},{include:\"#keywords\"}]},{token:\"text\",regex:/\\w+</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#types\"},{include:\"#keywords\"}]},{token:[\"keyword.operator.tuple.kotlin\",\"text\"],regex:/(#)(\\()/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#expressions\"}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#statements\"}]},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#types\"}]},{token:\"keyword.operator.declaration.kotlin\",regex:/->/}],\"#variables\":[{token:\"text\",regex:/(?=\\s*(?:var|val))/,push:[{token:\"text\",regex:/(?=:|=|$)/,next:\"pop\"},{token:\"keyword.other.kotlin\",regex:/\\b(?:var|val)\\b/,push:[{token:\"text\",regex:/(?=:|=|$)/,next:\"pop\"},{token:\"text\",regex:/</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#generics\"}]},{token:[\"text\",\"entity.name.variable.kotlin\"],regex:/((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/}]},{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?==|$)/,next:\"pop\"},{include:\"#types\"},{include:\"#getters-and-setters\"}]},{token:\"keyword.operator.assignment.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=$)/,next:\"pop\"},{include:\"#expressions\"},{include:\"#getters-and-setters\"}]}]}]},this.normalizeRules()};s.metaData={fileTypes:[\"kt\",\"kts\"],name:\"Kotlin\",scopeName:\"source.Kotlin\"},r.inherits(s,i),t.KotlinHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/kotlin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/kotlin_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./kotlin_highlight_rules\").KotlinHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new o};r.inherits(a,i),function(){this.$id=\"ace/mode/kotlin\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-latex.js",
    "content": "define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\",\"lparen\",\"storage.type\",\"rparen\"],regex:\"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\begin)({)(verbatim)(})\",next:\"verbatim\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\begin)({)(lstlisting)(})\",next:\"lstlisting\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"},{token:\"storage.type\",regex:/\\\\verb\\b\\*?/,next:[{token:[\"keyword.operator\",\"string\",\"keyword.operator\"],regex:\"(.)(.*?)(\\\\1|$)|\",next:\"start\"}]},{token:\"storage.type\",regex:\"\\\\\\\\[a-zA-Z]+\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\[^a-zA-Z]?\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"equation\"}],equation:[{token:\"comment\",regex:\"%.*$\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"start\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"},{token:\"error\",regex:\"^\\\\s*$\",next:\"start\"},{defaultToken:\"string\"}],verbatim:[{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\end)({)(verbatim)(})\",next:\"start\"},{defaultToken:\"text\"}],lstlisting:[{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\end)({)(lstlisting)(})\",next:\"start\"},{defaultToken:\"text\"}]},this.normalizeRules()};r.inherits(s,i),t.LatexHighlightRules=s}),define(\"ace/mode/folding/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u={\"\\\\subparagraph\":1,\"\\\\paragraph\":2,\"\\\\subsubsubsection\":3,\"\\\\subsubsection\":4,\"\\\\subsection\":5,\"\\\\section\":6,\"\\\\chapter\":7,\"\\\\part\":8,\"\\\\begin\":9,\"\\\\end\":10},a=t.FoldMode=function(){};r.inherits(a,i),function(){this.foldingStartMarker=/^\\s*\\\\(begin)|\\s*\\\\(part|chapter|(?:sub)*(?:section|paragraph))\\b|{\\s*$/,this.foldingStopMarker=/^\\s*\\\\(end)\\b|^\\s*}/,this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.latexBlock(e,n,i[0].length-1):i[2]?this.latexSection(e,n,i[0].length-1):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[1]?this.latexBlock(e,n,i[0].length-1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.latexBlock=function(e,t,n,r){var i={\"\\\\begin\":1,\"\\\\end\":-1},u=new o(e,t,n),a=u.getCurrentToken();if(!a||a.type!=\"storage.type\"&&a.type!=\"constant.character.escape\")return;var f=a.value,l=i[f],c=function(){var e=u.stepForward(),t=e.type==\"lparen\"?u.stepForward().value:\"\";return l===-1&&(u.stepBackward(),t&&u.stepBackward()),t},h=[c()],p=l===-1?u.getCurrentTokenColumn():e.getLine(t).length,d=t;u.step=l===-1?u.stepBackward:u.stepForward;while(a=u.step()){if(!a||a.type!=\"storage.type\"&&a.type!=\"constant.character.escape\")continue;var v=i[a.value];if(!v)continue;var m=c();if(v===l)h.unshift(m);else if(h.shift()!==m||!h.length)break}if(h.length)return;l==1&&(u.stepBackward(),u.stepBackward());if(r)return u.getCurrentTokenRange();var t=u.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,d,p):new s(d,p,t,u.getCurrentTokenColumn())},this.latexSection=function(e,t,n){var r=new o(e,t,n),i=r.getCurrentToken();if(!i||i.type!=\"storage.type\")return;var a=u[i.value]||0,f=0,l=t;while(i=r.stepForward()){if(i.type!==\"storage.type\")continue;var c=u[i.value]||0;if(c>=9){f||(l=r.getCurrentTokenRow()-1),f+=c==9?1:-1;if(f<0)break}else if(c>=a)break}f||(l=r.getCurrentTokenRow()-1);while(l>t&&!/\\S/.test(e.getLine(l)))l--;return new s(t,e.getLine(t).length,l,e.getLine(l).length)}}.call(a.prototype)}),define(\"ace/mode/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/latex_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/latex\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./latex_highlight_rules\").LatexHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/latex\").FoldMode,a=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new o({braces:!0})};r.inherits(a,i),function(){this.type=\"text\",this.lineCommentStart=\"%\",this.$id=\"ace/mode/latex\",this.getMatching=function(e,t,n){t==undefined&&(t=e.selection.lead),typeof t==\"object\"&&(n=t.column,t=t.row);var r=e.getTokenAt(t,n);if(!r)return;if(r.value==\"\\\\begin\"||r.value==\"\\\\end\")return this.foldingRules.latexBlock(e,t,n,!0)}}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-less.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./css_highlight_rules\"),o=function(){var e=\"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|or|and|when|not\",t=e.split(\"|\"),n=s.supportType.split(\"|\"),r=this.createKeywordMapper({\"support.constant\":s.supportConstant,keyword:e,\"support.constant.color\":s.supportConstantColor,\"support.constant.fonts\":s.supportConstantFonts},\"identifier\",!0),i=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+i+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:i},{token:[\"support.function\",\"paren.lparen\",\"string\",\"paren.rparen\"],regex:\"(url)(\\\\()(.*)(\\\\))\"},{token:[\"support.function\",\"paren.lparen\"],regex:\"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"},{token:function(e){return t.indexOf(e.toLowerCase())>-1?\"keyword\":\"variable\"},regex:\"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"},{token:\"variable\",regex:\"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"},{token:function(e,t){return n.indexOf(e.toLowerCase())>-1?[\"support.type.property\",\"text\"]:[\"support.type.unknownProperty\",\"text\"]},regex:\"([a-z0-9-_]+)(\\\\s*:)\"},{token:\"keyword\",regex:\"&\"},{token:r,regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z_][a-z0-9-_]*\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(o,i),t.LessHighlightRules=o}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./less_highlight_rules\").LessHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./css_completions\").CssCompletions,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(\"ruleset\",t,n,r)},this.$id=\"ace/mode/less\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-liquid.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/behaviour/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function a(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./xml\").XmlBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=e(\"../../lib/lang\"),f=function(){s.call(this),this.add(\"autoBraceTagClosing\",\"insertion\",function(e,t,n,r,i){if(i==\"}\"){var s=n.getSelectionRange().start,u=new o(r,s.row,s.column),f=u.getCurrentToken()||u.stepBackward();if(!f||!(f.value.trim()===\"%\"||a(f,\"tag-name\")||a(f,\"tag-whitespace\")||a(f,\"attribute-name\")||a(f,\"attribute-equals\")||a(f,\"attribute-value\")))return;if(a(f,\"reference.attribute-value\"))return;if(a(f,\"attribute-value\")){var l=u.getCurrentTokenColumn()+f.value.length;if(s.column<l)return;if(s.column==l){var c=u.stepForward();if(c&&a(c,\"attribute-value\"))return;u.stepBackward()}}if(/{%\\s*%/.test(r.getLine(s.row)))return;if(/^\\s*}/.test(r.getLine(s.row).slice(s.column)))return;while(!f.type!=\"keyword.block\"){f=u.stepBackward();if(f.value==\"{%\"){for(;;){f=u.stepForward();if(f.type===\"keyword.block\")break;if(f.value.trim()==\"%\"){f=null;break}}break}}if(!f)return;var h=u.getCurrentTokenRow(),p=u.getCurrentTokenColumn();if(a(u.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==s.row&&(d=d.substring(0,s.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"}{% end\"+d+\" %}\",selection:[1,1]}}})};r.inherits(f,i),t.LiquidBehaviour=f}),define(\"ace/mode/liquid_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=function(){s.call(this);var e=\"date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split\",t=\"capture|endcapture|case|endcase|when|comment|endcomment|cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow\",n=\"for|if|case|capture|unless|tablerow|marker|comment\",r=\"forloop|tablerowloop\",i=\"assign\",o=this.createKeywordMapper({\"variable.language\":r,keyword:t,\"keyword.block\":n,\"support.function\":e,\"keyword.definition\":i},\"identifier\");for(var u in this.$rules)this.$rules[u].unshift({token:\"variable\",regex:\"{%\",push:\"liquid-start\"},{token:\"variable\",regex:\"{{\",push:\"liquid-start\"});this.addRules({\"liquid-start\":[{token:\"variable\",regex:\"}}\",next:\"pop\"},{token:\"variable\",regex:\"%}\",next:\"pop\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:o,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"/|\\\\*|\\\\-|\\\\+|=|!=|\\\\?\\\\:\"},{token:\"paren.lparen\",regex:/[\\[\\({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"text\",regex:\"\\\\s+\"}]}),this.normalizeRules()};r.inherits(o,i),t.LiquidHighlightRules=o}),define(\"ace/mode/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/html\",\"ace/mode/html_completions\",\"ace/mode/behaviour/liquid\",\"ace/mode/liquid_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./html\").Mode,o=e(\"./html_completions\").HtmlCompletions,u=e(\"./behaviour/liquid\").LiquidBehaviour,a=e(\"./liquid_highlight_rules\").LiquidHighlightRules,f=e(\"./matching_brace_outdent\").MatchingBraceOutdent,l=function(){this.HighlightRules=a,this.$outdent=new f,this.$behaviour=new u,this.$completer=new o};r.inherits(l,i),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=(new s).voidElements,this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/liquid\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-lisp.js",
    "content": "define(\"ace/mode/lisp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"case|do|let|loop|if|else|when\",t=\"eq|neq|and|or\",n=\"null|nil\",r=\"cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn\",i=this.createKeywordMapper({\"keyword.control\":e,\"keyword.operator\":t,\"constant.language\":n,\"support.function\":r},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\";.*$\"},{token:[\"storage.type.function-type.lisp\",\"text\",\"entity.name.function.lisp\"],regex:\"(?:\\\\b(?:(defun|defmethod|defmacro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"},{token:[\"punctuation.definition.constant.character.lisp\",\"constant.character.lisp\"],regex:\"(#)((?:\\\\w|[\\\\\\\\+-=<>'\\\"&#])+)\"},{token:[\"punctuation.definition.variable.lisp\",\"variable.other.global.lisp\",\"punctuation.definition.variable.lisp\"],regex:\"(\\\\*)(\\\\S*)(\\\\*)\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"}],qqstring:[{token:\"constant.character.escape.lisp\",regex:\"\\\\\\\\.\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"}]}};r.inherits(s,i),t.LispHighlightRules=s}),define(\"ace/mode/lisp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lisp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lisp_highlight_rules\").LispHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\";\",this.$id=\"ace/mode/lisp\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-livescript.js",
    "content": "define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/livescript\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/text\"],function(e,t,n){function u(e,t){function n(){}return n.prototype=(e.superclass=t).prototype,(e.prototype=new n).constructor=e,typeof t.extended==\"function\"&&t.extended(e),e}function a(e,t){var n={}.hasOwnProperty;for(var r in t)n.call(t,r)&&(e[r]=t[r]);return e}var r,i,s,o;r=\"(?![\\\\d\\\\s])[$\\\\w\\\\xAA-\\\\uFFDC](?:(?!\\\\s)[$\\\\w\\\\xAA-\\\\uFFDC]|-[A-Za-z])*\",t.Mode=i=function(t){function o(){var t;this.$tokenizer=new(e(\"../tokenizer\").Tokenizer)(o.Rules);if(t=e(\"../mode/matching_brace_outdent\"))this.$outdent=new t.MatchingBraceOutdent;this.$id=\"ace/mode/livescript\",this.$behaviour=new(e(\"./behaviour/cstyle\").CstyleBehaviour)}var n,i=u((a(o,t).displayName=\"LiveScriptMode\",o),t).prototype,s=o;return n=RegExp(\"(?:[({[=:]|[-~]>|\\\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\\\s*all)?|const|var|let|new|catch(?:\\\\s*\"+r+\")?))\\\\s*$\"),i.getNextLineIndent=function(e,t,r){var i,s;return i=this.$getIndent(t),s=this.$tokenizer.getLineTokens(t,e).tokens,(!s.length||s[s.length-1].type!==\"comment\")&&e===\"start\"&&n.test(t)&&(i+=r),i},i.lineCommentStart=\"#\",i.blockComment={start:\"###\",end:\"###\"},i.checkOutdent=function(e,t,n){var r;return(r=this.$outdent)!=null?r.checkOutdent(t,n):void 8},i.autoOutdent=function(e,t,n){var r;return(r=this.$outdent)!=null?r.autoOutdent(t,n):void 8},o}(e(\"../mode/text\").Mode),s=\"(?![$\\\\w]|-[A-Za-z]|\\\\s*:(?![:=]))\",o={defaultToken:\"string\"},i.Rules={start:[{token:\"keyword\",regex:\"(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)\"+s},{token:\"constant.language\",regex:\"(?:true|false|yes|no|on|off|null|void|undefined)\"+s},{token:\"invalid.illegal\",regex:\"(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)\"+s},{token:\"language.support.class\",regex:\"(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)\"+s},{token:\"language.support.function\",regex:\"(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)\"+s},{token:\"variable.language\",regex:\"(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)\"+s},{token:\"identifier\",regex:r+\"\\\\s*:(?![:=])\"},{token:\"variable\",regex:r},{token:\"keyword.operator\",regex:\"(?:\\\\.{3}|\\\\s+\\\\?)\"},{token:\"keyword.variable\",regex:\"(?:@+|::|\\\\.\\\\.)\",next:\"key\"},{token:\"keyword.operator\",regex:\"\\\\.\\\\s*\",next:\"key\"},{token:\"string\",regex:\"\\\\\\\\\\\\S[^\\\\s,;)}\\\\]]*\"},{token:\"string.doc\",regex:\"'''\",next:\"qdoc\"},{token:\"string.doc\",regex:'\"\"\"',next:\"qqdoc\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"string\",regex:\"`\",next:\"js\"},{token:\"string\",regex:\"<\\\\[\",next:\"words\"},{token:\"string.regex\",regex:\"//\",next:\"heregex\"},{token:\"comment.doc\",regex:\"/\\\\*\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:\"string.regex\",regex:\"\\\\/(?:[^[\\\\/\\\\n\\\\\\\\]*(?:(?:\\\\\\\\.|\\\\[[^\\\\]\\\\n\\\\\\\\]*(?:\\\\\\\\.[^\\\\]\\\\n\\\\\\\\]*)*\\\\])[^[\\\\/\\\\n\\\\\\\\]*)*)\\\\/[gimy$]{0,4}\",next:\"key\"},{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*|(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*|(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)(?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)\"},{token:\"lparen\",regex:\"[({[]\"},{token:\"rparen\",regex:\"[)}\\\\]]\",next:\"key\"},{token:\"keyword.operator\",regex:\"[\\\\^!|&%+\\\\-]+\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?//[gimy$?]{0,4}\",next:\"start\"},{token:\"string.regex\",regex:\"\\\\s*#{\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{defaultToken:\"string.regex\"}],key:[{token:\"keyword.operator\",regex:\"[.?@!]+\"},{token:\"identifier\",regex:r,next:\"start\"},{token:\"text\",regex:\"\",next:\"start\"}],comment:[{token:\"comment.doc\",regex:\".*?\\\\*/\",next:\"start\"},{defaultToken:\"comment.doc\"}],qdoc:[{token:\"string\",regex:\".*?'''\",next:\"key\"},o],qqdoc:[{token:\"string\",regex:'.*?\"\"\"',next:\"key\"},o],qstring:[{token:\"string\",regex:\"[^\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\']*)*'\",next:\"key\"},o],qqstring:[{token:\"string\",regex:'[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',next:\"key\"},o],js:[{token:\"string\",regex:\"[^\\\\\\\\`]*(?:\\\\\\\\.[^\\\\\\\\`]*)*`\",next:\"key\"},o],words:[{token:\"string\",regex:\".*?\\\\]>\",next:\"key\"},o]}});                (function() {\n                    window.require([\"ace/mode/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-logiql.js",
    "content": "define(\"ace/mode/logiql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.block\",regex:\"/\\\\*\",push:[{token:\"comment.block\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block\"}]},{token:\"comment.single\",regex:\"//.*\"},{token:\"constant.numeric\",regex:\"\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?[fd]?\"},{token:\"string\",regex:'\"',push:[{token:\"string\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"constant.language\",regex:\"\\\\b(true|false)\\\\b\"},{token:\"entity.name.type.logicblox\",regex:\"`[a-zA-Z_:]+(\\\\d|\\\\a)*\\\\b\"},{token:\"keyword.start\",regex:\"->\",comment:\"Constraint\"},{token:\"keyword.start\",regex:\"-->\",comment:\"Level 1 Constraint\"},{token:\"keyword.start\",regex:\"<-\",comment:\"Rule\"},{token:\"keyword.start\",regex:\"<--\",comment:\"Level 1 Rule\"},{token:\"keyword.end\",regex:\"\\\\.\",comment:\"Terminator\"},{token:\"keyword.other\",regex:\"!\",comment:\"Negation\"},{token:\"keyword.other\",regex:\",\",comment:\"Conjunction\"},{token:\"keyword.other\",regex:\";\",comment:\"Disjunction\"},{token:\"keyword.operator\",regex:\"<=|>=|!=|<|>\",comment:\"Equality\"},{token:\"keyword.other\",regex:\"@\",comment:\"Equality\"},{token:\"keyword.operator\",regex:\"\\\\+|-|\\\\*|/\",comment:\"Arithmetic operations\"},{token:\"keyword\",regex:\"::\",comment:\"Colon colon\"},{token:\"support.function\",regex:\"\\\\b(agg\\\\s*<<)\",push:[{include:\"$self\"},{token:\"support.function\",regex:\">>\",next:\"pop\"}]},{token:\"storage.modifier\",regex:\"\\\\b(lang:[\\\\w:]*)\"},{token:[\"storage.type\",\"text\"],regex:\"(export|sealed|clauses|block|alias|alias_all)(\\\\s*\\\\()(?=`)\"},{token:\"entity.name\",regex:\"[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\\\(|\\\\[))\"},{token:\"variable.parameter\",regex:\"([a-zA-Z][a-zA-Z_0-9]*|_)\\\\s*(?=(,|\\\\.|<-|->|\\\\)|\\\\]|=))\"}]},this.normalizeRules()};r.inherits(s,i),t.LogiQLHighlightRules=s}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/logiql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/logiql_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/token_iterator\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./logiql_highlight_rules\").LogiQLHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=e(\"../token_iterator\").TokenIterator,a=e(\"../range\").Range,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./matching_brace_outdent\").MatchingBraceOutdent,c=function(){this.HighlightRules=s,this.foldingRules=new o,this.$outdent=new l,this.$behaviour=new f};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(/comment|string/.test(o))return r;if(s.length&&s[s.length-1].type==\"comment.single\")return r;var u=t.match();return/(-->|<--|<-|->|{)\\s*$/.test(t)&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)?!0:n!==\"\\n\"&&n!==\"\\r\\n\"?!1:/^\\s+/.test(t)?!0:!1},this.autoOutdent=function(e,t,n){if(this.$outdent.autoOutdent(t,n))return;var r=t.getLine(n),i=r.match(/^\\s+/),s=r.lastIndexOf(\".\")+1;if(!i||!n||!s)return 0;var o=t.getLine(n+1),u=this.getMatching(t,{row:n,column:s});if(!u||u.start.row==n)return 0;s=i[0].length;var f=this.$getIndent(t.getLine(u.start.row));t.replace(new a(n+1,0,n+1,s),f)},this.getMatching=function(e,t,n){t==undefined&&(t=e.selection.lead),typeof t==\"object\"&&(n=t.column,t=t.row);var r=e.getTokenAt(t,n),i=\"keyword.start\",s=\"keyword.end\",o;if(!r)return;if(r.type==i){var f=new u(e,t,n);f.step=f.stepForward}else{if(r.type!=s)return;var f=new u(e,t,n);f.step=f.stepBackward}while(o=f.step())if(o.type==i||o.type==s)break;if(!o||o.type==r.type)return;var l=f.getCurrentTokenColumn(),t=f.getCurrentTokenRow();return new a(t,l,t,l+o.value.length)},this.$id=\"ace/mode/logiql\"}.call(c.prototype),t.Mode=c});                (function() {\n                    window.require([\"ace/mode/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-logtalk.js",
    "content": "define(\"ace/mode/logtalk_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"punctuation.definition.comment.logtalk\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.logtalk\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.logtalk\"}]},{todo:\"fix grouping\",token:[\"comment.line.percentage.logtalk\",\"punctuation.definition.comment.logtalk\"],regex:\"%.*$\\\\n?\"},{todo:\"fix grouping\",token:[\"storage.type.opening.logtalk\",\"punctuation.definition.storage.type.logtalk\"],regex:\":-\\\\s(?:object|protocol|category|module)(?=[(])\"},{todo:\"fix grouping\",token:[\"storage.type.closing.logtalk\",\"punctuation.definition.storage.type.logtalk\"],regex:\":-\\\\send_(?:object|protocol|category)(?=[.])\"},{caseInsensitive:!1,token:\"storage.type.relations.logtalk\",regex:\"\\\\b(?:complements|extends|i(?:nstantiates|mp(?:orts|lements))|specializes)(?=[(])\"},{caseInsensitive:!1,todo:\"fix grouping\",token:[\"storage.modifier.others.logtalk\",\"punctuation.definition.storage.modifier.logtalk\"],regex:\":-\\\\s(?:e(?:lse|ndif)|built_in|dynamic|synchronized|threaded)(?=[.])\"},{caseInsensitive:!1,todo:\"fix grouping\",token:[\"storage.modifier.others.logtalk\",\"punctuation.definition.storage.modifier.logtalk\"],regex:\":-\\\\s(?:c(?:alls|oinductive)|e(?:lif|n(?:coding|sure_loaded)|xport)|i(?:f|n(?:clude|itialization|fo))|reexport|set_(?:logtalk|prolog)_flag|uses)(?=[(])\"},{caseInsensitive:!1,todo:\"fix grouping\",token:[\"storage.modifier.others.logtalk\",\"punctuation.definition.storage.modifier.logtalk\"],regex:\":-\\\\s(?:alias|info|d(?:ynamic|iscontiguous)|m(?:eta_(?:non_terminal|predicate)|ode|ultifile)|p(?:ublic|r(?:otected|ivate))|op|use(?:s|_module)|synchronized)(?=[(])\"},{token:\"keyword.operator.message-sending.logtalk\",regex:\"(:|::|\\\\^\\\\^)\"},{token:\"keyword.operator.external-call.logtalk\",regex:\"([{}])\"},{token:\"keyword.operator.mode.logtalk\",regex:\"(\\\\?|@)\"},{token:\"keyword.operator.comparison.term.logtalk\",regex:\"(@=<|@<|@>|@>=|==|\\\\\\\\==)\"},{token:\"keyword.operator.comparison.arithmetic.logtalk\",regex:\"(=<|<|>|>=|=:=|=\\\\\\\\=)\"},{token:\"keyword.operator.bitwise.logtalk\",regex:\"(<<|>>|/\\\\\\\\|\\\\\\\\/|\\\\\\\\)\"},{token:\"keyword.operator.evaluable.logtalk\",regex:\"\\\\b(?:e|pi|div|mod|rem)\\\\b(?![-!(^~])\"},{token:\"keyword.operator.evaluable.logtalk\",regex:\"(\\\\*\\\\*|\\\\+|-|\\\\*|/|//)\"},{token:\"keyword.operator.misc.logtalk\",regex:\"(:-|!|\\\\\\\\+|,|;|-->|->|=|\\\\=|\\\\.|=\\\\.\\\\.|\\\\^|\\\\bas\\\\b|\\\\bis\\\\b)\"},{caseInsensitive:!1,token:\"support.function.evaluable.logtalk\",regex:\"\\\\b(a(bs|cos|sin|tan|tan2)|c(eiling|os)|div|exp|flo(at(_(integer|fractional)_part)?|or)|log|m(ax|in|od)|r(em|ound)|s(i(n|gn)|qrt)|t(an|runcate)|xor)(?=[(])\"},{token:\"support.function.control.logtalk\",regex:\"\\\\b(?:true|fa(?:il|lse)|repeat|(?:instantiation|system)_error)\\\\b(?![-!(^~])\"},{token:\"support.function.control.logtalk\",regex:\"\\\\b((?:type|domain|existence|permission|representation|evaluation|resource|syntax)_error)(?=[(])\"},{token:\"support.function.control.logtalk\",regex:\"\\\\b(?:ca(?:ll|tch)|ignore|throw|once)(?=[(])\"},{token:\"support.function.chars-and-bytes-io.logtalk\",regex:\"\\\\b(?:(?:get|p(?:eek|ut))_(c(?:har|ode)|byte)|nl)(?=[(])\"},{token:\"support.function.chars-and-bytes-io.logtalk\",regex:\"\\\\bnl\\\\b\"},{token:\"support.function.atom-term-processing.logtalk\",regex:\"\\\\b(?:atom_(?:length|c(?:hars|o(?:ncat|des)))|sub_atom|char_code|number_c(?:har|ode)s)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.term-testing.logtalk\",regex:\"\\\\b(?:var|atom(ic)?|integer|float|c(?:allable|ompound)|n(?:onvar|umber)|ground|acyclic_term)(?=[(])\"},{token:\"support.function.term-comparison.logtalk\",regex:\"\\\\b(compare)(?=[(])\"},{token:\"support.function.term-io.logtalk\",regex:\"\\\\b(?:read(_term)?|write(?:q|_(?:canonical|term))?|(current_)?(?:char_conversion|op))(?=[(])\"},{caseInsensitive:!1,token:\"support.function.term-creation-and-decomposition.logtalk\",regex:\"\\\\b(arg|copy_term|functor|numbervars|term_variables)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.term-unification.logtalk\",regex:\"\\\\b(subsumes_term|unify_with_occurs_check)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.stream-selection-and-control.logtalk\",regex:\"\\\\b(?:(?:se|curren)t_(?:in|out)put|open|close|flush_output|stream_property|at_end_of_stream|set_stream_position)(?=[(])\"},{token:\"support.function.stream-selection-and-control.logtalk\",regex:\"\\\\b(?:flush_output|at_end_of_stream)\\\\b\"},{token:\"support.function.prolog-flags.logtalk\",regex:\"\\\\b((?:se|curren)t_prolog_flag)(?=[(])\"},{token:\"support.function.compiling-and-loading.logtalk\",regex:\"\\\\b(logtalk_(?:compile|l(?:ibrary_path|oad|oad_context)|make(_target_action)?))(?=[(])\"},{token:\"support.function.compiling-and-loading.logtalk\",regex:\"\\\\b(logtalk_make)\\\\b\"},{caseInsensitive:!1,token:\"support.function.event-handling.logtalk\",regex:\"\\\\b(?:(?:abolish|define)_events|current_event)(?=[(])\"},{token:\"support.function.implementation-defined-hooks.logtalk\",regex:\"\\\\b(?:(?:create|current|set)_logtalk_flag|halt)(?=[(])\"},{token:\"support.function.implementation-defined-hooks.logtalk\",regex:\"\\\\b(halt)\\\\b\"},{token:\"support.function.sorting.logtalk\",regex:\"\\\\b((key)?(sort))(?=[(])\"},{caseInsensitive:!1,token:\"support.function.entity-creation-and-abolishing.logtalk\",regex:\"\\\\b((c(?:reate|urrent)|abolish)_(?:object|protocol|category))(?=[(])\"},{caseInsensitive:!1,token:\"support.function.reflection.logtalk\",regex:\"\\\\b((object|protocol|category)_property|co(mplements_object|nforms_to_protocol)|extends_(object|protocol|category)|imp(orts_category|lements_protocol)|(instantiat|specializ)es_class)(?=[(])\"},{token:\"support.function.logtalk\",regex:\"\\\\b((?:for|retract)all)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.execution-context.logtalk\",regex:\"\\\\b(?:context|parameter|se(?:lf|nder)|this)(?=[(])\"},{token:\"support.function.database.logtalk\",regex:\"\\\\b(?:a(?:bolish|ssert(?:a|z))|clause|retract(all)?)(?=[(])\"},{token:\"support.function.all-solutions.logtalk\",regex:\"\\\\b((?:bag|set)of|f(?:ind|or)all)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.multi-threading.logtalk\",regex:\"\\\\b(threaded(_(call|once|ignore|exit|peek|wait|notify))?)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.engines.logtalk\",regex:\"\\\\b(threaded_engine(_(create|destroy|self|next(?:_reified)?|yield|post|fetch))?)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.reflection.logtalk\",regex:\"\\\\b(?:current_predicate|predicate_property)(?=[(])\"},{token:\"support.function.event-handler.logtalk\",regex:\"\\\\b(?:before|after)(?=[(])\"},{token:\"support.function.message-forwarding-handler.logtalk\",regex:\"\\\\b(forward)(?=[(])\"},{token:\"support.function.grammar-rule.logtalk\",regex:\"\\\\b(?:expand_(?:goal|term)|(?:goal|term)_expansion|phrase)(?=[(])\"},{token:\"punctuation.definition.string.begin.logtalk\",regex:\"'\",push:[{token:\"constant.character.escape.logtalk\",regex:\"\\\\\\\\([\\\\\\\\abfnrtv\\\"']|(x[a-fA-F0-9]+|[0-7]+)\\\\\\\\)\"},{token:\"punctuation.definition.string.end.logtalk\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.quoted.single.logtalk\"}]},{token:\"punctuation.definition.string.begin.logtalk\",regex:'\"',push:[{token:\"constant.character.escape.logtalk\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.logtalk\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.logtalk\"}]},{token:\"constant.numeric.logtalk\",regex:\"\\\\b(0b[0-1]+|0o[0-7]+|0x[0-9a-fA-F]+)\\\\b\"},{token:\"constant.numeric.logtalk\",regex:\"\\\\b(0'\\\\\\\\.|0'.|0''|0'\\\")\"},{token:\"constant.numeric.logtalk\",regex:\"\\\\b(\\\\d+\\\\.?\\\\d*((e|E)(\\\\+|-)?\\\\d+)?)\\\\b\"},{token:\"variable.other.logtalk\",regex:\"\\\\b([A-Z_][A-Za-z0-9_]*)\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.LogtalkHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/logtalk\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/logtalk_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"../tokenizer\").Tokenizer,o=e(\"./logtalk_highlight_rules\").LogtalkHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=o,this.foldingRules=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"%\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/logtalk\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-lsl.js",
    "content": "define(\"ace/mode/lsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=this.createKeywordMapper({\"constant.language.float.lsl\":\"DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI\",\"constant.language.integer.lsl\":\"ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|CHARACTER_RADIUS|CHARACTER_STAY_WITHIN_PARCEL|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DENSITY|ERR_GENERIC|ERR_MALFORMED_PARAMS|ERR_PARCEL_PERMISSIONS|ERR_RUNTIME_PERMISSIONS|ERR_THROTTLED|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|FALSE|FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_BODY_SHAPE_TYPE|OBJECT_CHARACTER_TIME|OBJECT_CLICK_ACTION|OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_HOVER_HEIGHT|OBJECT_LAST_OWNER_ID|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_PHYSICS_COST|OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_RENDER_WEIGHT|OBJECT_RETURN_PARCEL|OBJECT_RETURN_PARCEL_OWNER|OBJECT_RETURN_REGION|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|OBJECT_TEMP_ON_REZ|OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|PARCEL_DETAILS_SEE_AVATARS|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|PARCEL_FLAG_ALLOW_TERRAFORM|PARCEL_FLAG_LOCAL_SOUND_ONLY|PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|PARCEL_FLAG_USE_LAND_PASS_LIST|PARCEL_MEDIA_COMMAND_AGENT|PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|PARCEL_MEDIA_COMMAND_PAUSE|PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASS_ALWAYS|PASS_IF_NOT_HANDLED|PASS_NEVER|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|PERMISSION_RETURN_OBJECTS|PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_ALPHA_MODE|PRIM_ALPHA_MODE_BLEND|PRIM_ALPHA_MODE_EMISSIVE|PRIM_ALPHA_MODE_MASK|PRIM_ALPHA_MODE_NONE|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CONTROLS_STANDARD|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|PRIM_MEDIA_WIDTH_PIXELS|PRIM_NAME|PRIM_NORMAL|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|PRIM_SLICE|PRIM_SPECULAR|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|PROFILE_SCRIPT_MEMORY|PSYS_PART_BF_DEST_COLOR|PSYS_PART_BF_ONE|PSYS_PART_BF_ONE_MINUS_DEST_COLOR|PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA|PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR|PSYS_PART_BF_SOURCE_ALPHA|PSYS_PART_BF_SOURCE_COLOR|PSYS_PART_BF_ZERO|PSYS_PART_BLEND_FUNC_DEST|PSYS_PART_BLEND_FUNC_SOURCE|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|PSYS_PART_END_COLOR|PSYS_PART_END_GLOW|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_MAX_AGE|PSYS_PART_RIBBON_MASK|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_GLOW|PSYS_PART_START_SCALE|PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|RC_REJECT_TYPES|REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|TRUE|TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|WANDER_PAUSE_AT_WAYPOINTS|XP_ERROR_EXPERIENCES_DISABLED|XP_ERROR_EXPERIENCE_DISABLED|XP_ERROR_EXPERIENCE_SUSPENDED|XP_ERROR_INVALID_EXPERIENCE|XP_ERROR_INVALID_PARAMETERS|XP_ERROR_KEY_NOT_FOUND|XP_ERROR_MATURITY_EXCEEDED|XP_ERROR_NONE|XP_ERROR_NOT_FOUND|XP_ERROR_NOT_PERMITTED|XP_ERROR_NO_EXPERIENCE|XP_ERROR_QUOTA_EXCEEDED|XP_ERROR_RETRY_UPDATE|XP_ERROR_STORAGE_EXCEPTION|XP_ERROR_STORE_DISABLED|XP_ERROR_THROTTLED|XP_ERROR_UNKNOWN_ERROR\",\"constant.language.integer.boolean.lsl\":\"FALSE|TRUE\",\"constant.language.quaternion.lsl\":\"ZERO_ROTATION\",\"constant.language.string.lsl\":\"EOF|JSON_ARRAY|JSON_DELETE|JSON_FALSE|JSON_INVALID|JSON_NULL|JSON_NUMBER|JSON_OBJECT|JSON_STRING|JSON_TRUE|NULL_KEY|TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED\",\"constant.language.vector.lsl\":\"TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR\",\"invalid.broken.lsl\":\"LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH\",\"invalid.deprecated.lsl\":\"ATTACH_LPEC|ATTACH_RPEC|DATA_RATING|OBJECT_ATTACHMENT_GEOMETRY_BYTES|OBJECT_ATTACHMENT_SURFACE_AREA|PRIM_CAST_SHADOWS|PRIM_MATERIAL_LIGHT|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP|llClearExperiencePermissions|llCloud|llGetExperienceList|llMakeExplosion|llMakeFire|llMakeFountain|llMakeSmoke|llRemoteDataSetRegion|llSound|llSoundPreload|llXorBase64Strings|llXorBase64StringsCorrect\",\"invalid.illegal.lsl\":\"event\",\"invalid.unimplemented.lsl\":\"CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|PERMISSION_CHANGE_JOINTS|PERMISSION_CHANGE_PERMISSIONS|PERMISSION_EXPERIENCE|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|PRIM_PHYSICS_MATERIAL|PSYS_SRC_OBJ_REL_MASK|llCollisionSprite|llPointAt|llRefreshPrimURL|llReleaseCamera|llRemoteLoadScript|llSetPrimURL|llStopPointAt|llTakeCamera\",\"reserved.godmode.lsl\":\"llGodLikeRezObject|llSetInventoryPermMask|llSetObjectPermMask\",\"reserved.log.lsl\":\"print\",\"keyword.control.lsl\":\"do|else|for|if|jump|return|while\",\"storage.type.lsl\":\"float|integer|key|list|quaternion|rotation|string|vector\",\"support.function.lsl\":\"llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|llAdjustSoundVolume|llAgentInExperience|llAllowInventoryDrop|llAngleBetween|llApplyImpulse|llApplyRotationalImpulse|llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|llAvatarOnLinkSitTarget|llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|llBase64ToInteger|llBase64ToString|llBreakAllLinks|llBreakLink|llCSV2List|llCastRay|llCeil|llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|llCollisionFilter|llCollisionSound|llCos|llCreateCharacter|llCreateKeyValue|llCreateLink|llDataSizeKeyValue|llDeleteCharacter|llDeleteKeyValue|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|llDetectedGrab|llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llEvade|llExecCharacterCmd|llFabs|llFleeFrom|llFloor|llForceMouselook|llFrand|llGenerateKey|llGetAccel|llGetAgentInfo|llGetAgentLanguage|llGetAgentList|llGetAgentSize|llGetAlpha|llGetAndResetTime|llGetAnimation|llGetAnimationList|llGetAnimationOverride|llGetAttached|llGetAttachedList|llGetBoundingBox|llGetCameraPos|llGetCameraRot|llGetCenterOfMass|llGetClosestNavPoint|llGetColor|llGetCreator|llGetDate|llGetDisplayName|llGetEnergy|llGetEnv|llGetExperienceDetails|llGetExperienceErrorMessage|llGetForce|llGetFreeMemory|llGetFreeURLs|llGetGMTclock|llGetGeometricCenter|llGetHTTPHeader|llGetInventoryCreator|llGetInventoryKey|llGetInventoryName|llGetInventoryNumber|llGetInventoryPermMask|llGetInventoryType|llGetKey|llGetLandOwnerAt|llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|llGetListLength|llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|llGetMaxScaleFactor|llGetMemoryLimit|llGetMinScaleFactor|llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|llGetNumberOfPrims|llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|llGetObjectMass|llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|llGetOmega|llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|llGetParcelMaxPrims|llGetParcelMusicURL|llGetParcelPrimCount|llGetParcelPrimOwners|llGetPermissions|llGetPermissionsKey|llGetPhysicsMaterial|llGetPos|llGetPrimMediaParams|llGetPrimitiveParams|llGetRegionAgentCount|llGetRegionCorner|llGetRegionFPS|llGetRegionFlags|llGetRegionName|llGetRegionTimeDilation|llGetRootPosition|llGetRootRotation|llGetRot|llGetSPMaxMemory|llGetScale|llGetScriptName|llGetScriptState|llGetSimStats|llGetSimulatorHostname|llGetStartParameter|llGetStaticPath|llGetStatus|llGetSubString|llGetSunDirection|llGetTexture|llGetTextureOffset|llGetTextureRot|llGetTextureScale|llGetTime|llGetTimeOfDay|llGetTimestamp|llGetTorque|llGetUnixTime|llGetUsedMemory|llGetUsername|llGetVel|llGetWallclock|llGiveInventory|llGiveInventoryList|llGiveMoney|llGround|llGroundContour|llGroundNormal|llGroundRepel|llGroundSlope|llHTTPRequest|llHTTPResponse|llInsertString|llInstantMessage|llIntegerToBase64|llJson2List|llJsonGetValue|llJsonSetValue|llJsonValueType|llKey2Name|llKeyCountKeyValue|llKeysKeyValue|llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|llList2Json|llList2Key|llList2List|llList2ListStrided|llList2Rot|llList2String|llList2Vector|llListFindList|llListInsertList|llListRandomize|llListReplaceList|llListSort|llListStatistics|llListen|llListenControl|llListenRemove|llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|llLoopSoundSlave|llMD5String|llManageEstateAccess|llMapDestination|llMessageLinked|llMinEventDelay|llModPow|llModifyLand|llMoveToTarget|llNavigateTo|llOffsetTexture|llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|llPassCollisions|llPassTouches|llPatrolPoints|llPlaySound|llPlaySoundSlave|llPow|llPreloadSound|llPursue|llPushObject|llReadKeyValue|llRegionSay|llRegionSayTo|llReleaseControls|llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|llRemoveFromLandBanList|llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|llRequestAgentData|llRequestDisplayName|llRequestExperiencePermissions|llRequestInventoryData|llRequestPermissions|llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|llResetScript|llResetTime|llReturnObjectsByID|llReturnObjectsByOwner|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|llRot2Fwd|llRot2Left|llRot2Up|llRotBetween|llRotLookAt|llRotTarget|llRotTargetRemove|llRotateTexture|llRound|llSHA1String|llSameGroup|llSay|llScaleByFactor|llScaleTexture|llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetAnimationOverride|llSetBuoyancy|llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|llSetHoverHeight|llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|llSetLinkColor|llSetLinkMedia|llSetLinkPrimitiveParams|llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|llSetParcelMusicURL|llSetPayPrice|llSetPhysicsMaterial|llSetPos|llSetPrimMediaParams|llSetPrimitiveParams|llSetRegionPos|llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|llSetSitText|llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|llSetTexture|llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|llSetVehicleFlags|llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|llSetVehicleVectorParam|llSetVelocity|llShout|llSin|llSitTarget|llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|llUnSit|llUnescapeURL|llUpdateCharacter|llUpdateKeyValue|llVecDist|llVecMag|llVecNorm|llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64\",\"support.function.event.lsl\":\"at_rot_target|at_target|attach|changed|collision|collision_end|collision_start|control|dataserver|email|experience_permissions|experience_permissions_denied|http_request|http_response|land_collision|land_collision_end|land_collision_start|link_message|listen|money|moving_end|moving_start|no_sensor|not_at_rot_target|not_at_target|object_rez|on_rez|path_update|remote_data|run_time_permissions|sensor|state_entry|state_exit|timer|touch|touch_end|touch_start|transaction_result\"},\"identifier\");this.$rules={start:[{token:\"comment.line.double-slash.lsl\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.block.begin.lsl\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.quoted.double.lsl\",start:'\"',end:'\"',next:[{token:\"constant.character.escape.lsl\",regex:/\\\\[tn\"\\\\]/}]},{token:\"constant.numeric.lsl\",regex:\"(0[xX][0-9a-fA-F]+|[+-]?[0-9]+(?:(?:\\\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)?)\\\\b\"},{token:\"entity.name.state.lsl\",regex:\"\\\\b((state)\\\\s+[A-Za-z_]\\\\w*|default)\\\\b\"},{token:e,regex:\"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"support.function.user-defined.lsl\",regex:/\\b([a-zA-Z_]\\w*)(?=\\(.*?\\))/},{token:\"keyword.operator.lsl\",regex:\"\\\\+\\\\+|\\\\-\\\\-|<<|>>|&&?|\\\\|\\\\|?|\\\\^|~|[!%<>=*+\\\\-\\\\/]=?\"},{token:\"invalid.illegal.keyword.operator.lsl\",regex:\":=?\"},{token:\"punctuation.operator.lsl\",regex:\"\\\\,|\\\\;\"},{token:\"paren.lparen.lsl\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen.lsl\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text.lsl\",regex:\"\\\\s+\"}],comment:[{token:\"comment.block.end.lsl\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment.block.lsl\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.LSLHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/lsl\",[\"require\",\"exports\",\"module\",\"ace/mode/lsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/text\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./lsl_highlight_rules\").LSLHighlightRules,i=e(\"./matching_brace_outdent\").MatchingBraceOutdent,s=e(\"../range\").Range,o=e(\"./text\").Mode,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"../lib/oop\"),l=function(){this.HighlightRules=r,this.$outdent=new i,this.$behaviour=new u,this.foldingRules=new a};f.inherits(l,o),function(){this.lineCommentStart=[\"//\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type===\"comment.block.lsl\")return r;if(e===\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/lsl\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-lua.js",
    "content": "define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"setn|foreach|foreachi|gcinfo|log10|maxn\",s=this.createKeywordMapper({keyword:e,\"support.function\":n,\"keyword.deprecated\":i,\"constant.library\":r,\"constant.language\":t,\"variable.language\":\"self\"},\"identifier\"),o=\"(?:(?:[1-9]\\\\d*)|(?:0))\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:\"+o+\"|\"+u+\")\",f=\"(?:\\\\.\\\\d+)\",l=\"(?:\\\\d+)\",c=\"(?:(?:\"+l+\"?\"+f+\")|(?:\"+l+\"\\\\.))\",h=\"(?:\"+c+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"string.start\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"string.end\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:h},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/,this.foldingStopMarker=/\\bend\\b|^\\s*}|\\]=*\\]/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]==\"then\"&&/\\belseif\\b/.test(r))return;if(o[1]){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"start\"}else{if(!o[2])return\"start\";var u=e.bgTokenizer.getState(n)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[0]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(o[0][0]!==\"]\")return\"end\";var u=e.bgTokenizer.getState(n-1)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.luaBlock(e,n,i.index+1):i[2]?e.getCommentFoldRange(n,i.index+1):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[0]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.luaBlock(e,n,i.index+1):i[0][0]===\"]\"?e.getCommentFoldRange(n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.luaBlock=function(e,t,n){var r=new o(e,t,n),i={\"function\":1,\"do\":1,then:1,elseif:-1,end:-1,repeat:1,until:-1},u=r.getCurrentToken();if(!u||u.type!=\"keyword\")return;var a=u.value,f=[a],l=i[a];if(!l)return;var c=l===-1?r.getCurrentTokenColumn():e.getLine(t).length,h=t;r.step=l===-1?r.stepBackward:r.stepForward;while(u=r.step()){if(u.type!==\"keyword\")continue;var p=l*i[u.value];if(p>0)f.unshift(u.value);else if(p<=0){f.shift();if(!f.length&&u.value!=\"elseif\")break;p===0&&f.unshift(u.value)}}var t=r.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,h,c):new s(h,c,t,r.getCurrentTokenColumn())}}.call(u.prototype)}),define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lua_highlight_rules\").LuaHighlightRules,o=e(\"./folding/lua\").FoldMode,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){function n(t){var n=0;for(var r=0;r<t.length;r++){var i=t[r];i.type==\"keyword\"?i.value in e&&(n+=e[i.value]):i.type==\"paren.lparen\"?n+=i.value.length:i.type==\"paren.rparen\"&&(n-=i.value.length)}return n<0?-1:n>0?1:0}this.lineCommentStart=\"--\",this.blockComment={start:\"--[\",end:\"]--\"};var e={\"function\":1,then:1,\"do\":1,\"else\":1,elseif:1,repeat:1,end:-1,until:-1},t=[\"else\",\"elseif\",\"end\",\"until\"];this.getNextLineIndent=function(e,t,r){var i=this.$getIndent(t),s=0,o=this.getTokenizer().getLineTokens(t,e),u=o.tokens;return e==\"start\"&&(s=n(u)),s>0?i+r:s<0&&i.substr(i.length-r.length)==r&&!this.checkOutdent(e,t,\"\\n\")?i.substr(0,i.length-r.length):i},this.checkOutdent=function(e,n,r){if(r!=\"\\n\"&&r!=\"\\r\"&&r!=\"\\r\\n\")return!1;if(n.match(/^\\s*[\\)\\}\\]]$/))return!0;var i=this.getTokenizer().getLineTokens(n.trim(),e).tokens;return!i||!i.length?!1:i[0].type==\"keyword\"&&t.indexOf(i[0].value)!=-1},this.autoOutdent=function(e,t,r){var i=t.getLine(r-1),s=this.$getIndent(i).length,o=this.getTokenizer().getLineTokens(i,\"start\").tokens,a=t.getTabString().length,f=s+a*n(o),l=this.$getIndent(t.getLine(r)).length;if(l<=f)return;t.outdentRows(new u(r,0,r+2,0))},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/lua_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/lua\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-luapage.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"setn|foreach|foreachi|gcinfo|log10|maxn\",s=this.createKeywordMapper({keyword:e,\"support.function\":n,\"keyword.deprecated\":i,\"constant.library\":r,\"constant.language\":t,\"variable.language\":\"self\"},\"identifier\"),o=\"(?:(?:[1-9]\\\\d*)|(?:0))\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:\"+o+\"|\"+u+\")\",f=\"(?:\\\\.\\\\d+)\",l=\"(?:\\\\d+)\",c=\"(?:(?:\"+l+\"?\"+f+\")|(?:\"+l+\"\\\\.))\",h=\"(?:\"+c+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"string.start\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"string.end\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:h},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/,this.foldingStopMarker=/\\bend\\b|^\\s*}|\\]=*\\]/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]==\"then\"&&/\\belseif\\b/.test(r))return;if(o[1]){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"start\"}else{if(!o[2])return\"start\";var u=e.bgTokenizer.getState(n)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[0]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(o[0][0]!==\"]\")return\"end\";var u=e.bgTokenizer.getState(n-1)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.luaBlock(e,n,i.index+1):i[2]?e.getCommentFoldRange(n,i.index+1):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[0]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.luaBlock(e,n,i.index+1):i[0][0]===\"]\"?e.getCommentFoldRange(n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.luaBlock=function(e,t,n){var r=new o(e,t,n),i={\"function\":1,\"do\":1,then:1,elseif:-1,end:-1,repeat:1,until:-1},u=r.getCurrentToken();if(!u||u.type!=\"keyword\")return;var a=u.value,f=[a],l=i[a];if(!l)return;var c=l===-1?r.getCurrentTokenColumn():e.getLine(t).length,h=t;r.step=l===-1?r.stepBackward:r.stepForward;while(u=r.step()){if(u.type!==\"keyword\")continue;var p=l*i[u.value];if(p>0)f.unshift(u.value);else if(p<=0){f.shift();if(!f.length&&u.value!=\"elseif\")break;p===0&&f.unshift(u.value)}}var t=r.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,h,c):new s(h,c,t,r.getCurrentTokenColumn())}}.call(u.prototype)}),define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lua_highlight_rules\").LuaHighlightRules,o=e(\"./folding/lua\").FoldMode,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){function n(t){var n=0;for(var r=0;r<t.length;r++){var i=t[r];i.type==\"keyword\"?i.value in e&&(n+=e[i.value]):i.type==\"paren.lparen\"?n+=i.value.length:i.type==\"paren.rparen\"&&(n-=i.value.length)}return n<0?-1:n>0?1:0}this.lineCommentStart=\"--\",this.blockComment={start:\"--[\",end:\"]--\"};var e={\"function\":1,then:1,\"do\":1,\"else\":1,elseif:1,repeat:1,end:-1,until:-1},t=[\"else\",\"elseif\",\"end\",\"until\"];this.getNextLineIndent=function(e,t,r){var i=this.$getIndent(t),s=0,o=this.getTokenizer().getLineTokens(t,e),u=o.tokens;return e==\"start\"&&(s=n(u)),s>0?i+r:s<0&&i.substr(i.length-r.length)==r&&!this.checkOutdent(e,t,\"\\n\")?i.substr(0,i.length-r.length):i},this.checkOutdent=function(e,n,r){if(r!=\"\\n\"&&r!=\"\\r\"&&r!=\"\\r\\n\")return!1;if(n.match(/^\\s*[\\)\\}\\]]$/))return!0;var i=this.getTokenizer().getLineTokens(n.trim(),e).tokens;return!i||!i.length?!1:i[0].type==\"keyword\"&&t.indexOf(i[0].value)!=-1},this.autoOutdent=function(e,t,r){var i=t.getLine(r-1),s=this.$getIndent(i).length,o=this.getTokenizer().getLineTokens(i,\"start\").tokens,a=t.getTabString().length,f=s+a*n(o),l=this.$getIndent(t.getLine(r)).length;if(l<=f)return;t.outdentRows(new u(r,0,r+2,0))},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/lua_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/lua\"}.call(f.prototype),t.Mode=f}),define(\"ace/mode/luapage_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/lua_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./lua_highlight_rules\").LuaHighlightRules,o=function(){i.call(this);var e=[{token:\"keyword\",regex:\"<\\\\%\\\\=?\",push:\"lua-start\"},{token:\"keyword\",regex:\"<\\\\?lua\\\\=?\",push:\"lua-start\"}],t=[{token:\"keyword\",regex:\"\\\\%>\",next:\"pop\"},{token:\"keyword\",regex:\"\\\\?>\",next:\"pop\"}];this.embedRules(s,\"lua-\",t,[\"start\"]);for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.normalizeRules()};r.inherits(o,i),t.LuaPageHighlightRules=o}),define(\"ace/mode/luapage\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/lua\",\"ace/mode/luapage_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./lua\").Mode,o=e(\"./luapage_highlight_rules\").LuaPageHighlightRules,u=function(){i.call(this),this.HighlightRules=o,this.createModeDelegates({\"lua-\":s})};r.inherits(u,i),function(){this.$id=\"ace/mode/luapage\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-lucene.js",
    "content": "define(\"ace/mode/lucene_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"constant.language.escape\",regex:/\\\\[\\+\\-&\\|!\\(\\)\\{\\}\\[\\]^\"~\\*\\?:\\\\]/},{token:\"constant.character.negation\",regex:\"\\\\-\"},{token:\"constant.character.interro\",regex:\"\\\\?\"},{token:\"constant.character.required\",regex:\"\\\\+\"},{token:\"constant.character.asterisk\",regex:\"\\\\*\"},{token:\"constant.character.proximity\",regex:\"~(?:0\\\\.[0-9]+|[0-9]+)?\"},{token:\"keyword.operator\",regex:\"(AND|OR|NOT|TO)\\\\b\"},{token:\"paren.lparen\",regex:\"[\\\\(\\\\{\\\\[]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}\\\\]]\"},{token:\"keyword\",regex:\"(?:\\\\\\\\.|[^\\\\s:\\\\\\\\])+:\"},{token:\"string\",regex:'\"(?:\\\\\\\\\"|[^\"])*\"'},{token:\"term\",regex:\"\\\\w+\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(o,s),t.LuceneHighlightRules=o}),define(\"ace/mode/lucene\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lucene_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lucene_highlight_rules\").LuceneHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.$id=\"ace/mode/lucene\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-makefile.js",
    "content": "define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),define(\"ace/mode/makefile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/sh_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./sh_highlight_rules\"),o=function(){var e=this.createKeywordMapper({keyword:s.reservedKeywords,\"support.function.builtin\":s.languageConstructs,\"invalid.deprecated\":\"debugger\"},\"string\");this.$rules={start:[{token:\"string.interpolated.backtick.makefile\",regex:\"`\",next:\"shell-start\"},{token:\"punctuation.definition.comment.makefile\",regex:/#(?=.)/,next:\"comment\"},{token:[\"keyword.control.makefile\"],regex:\"^(?:\\\\s*\\\\b)(\\\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\\\b)\"},{token:[\"entity.name.function.makefile\",\"text\"],regex:\"^([^\\\\t ]+(?:\\\\s[^\\\\t ]+)*:)(\\\\s*.*)\"}],comment:[{token:\"punctuation.definition.comment.makefile\",regex:/.+\\\\/},{token:\"punctuation.definition.comment.makefile\",regex:\".+\",next:\"start\"}],\"shell-start\":[{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"string\",regex:\"\\\\w+\"},{token:\"string.interpolated.backtick.makefile\",regex:\"`\",next:\"start\"}]}};r.inherits(o,i),t.MakefileHighlightRules=o}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/makefile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/makefile_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./makefile_highlight_rules\").MakefileHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$indentWithTabs=!0,this.$id=\"ace/mode/makefile\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-markdown.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(e){return\"(?:[^\"+s.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},f=function(){u.call(this);var e={token:\"support.function\",regex:/^\\s*(```+[^`]*|~~~+[^~]*)$/,onMatch:function(e,t,n,i){var s=e.match(/^(\\s*)([`~]+)(.*)/),o=/[\\w-]+|$/.exec(s[3])[0];return r[o]||(o=\"\"),n.unshift(\"githubblock\",[],[s[1],s[2],o],t),this.token},next:\"githubblock\"},t=[{token:\"support.function\",regex:\".*\",onMatch:function(e,t,n,i){var s=n[1],o=n[2][0],u=n[2][1],a=n[2][2],f=/^(\\s*)(`+|~+)\\s*$/.exec(e);if(f&&f[1].length<o.length+3&&f[2].length>=u.length&&f[2][0]==u[0])return n.splice(0,3),this.next=n.shift(),this.token;this.next=\"\";if(a&&r[a]){var l=r[a].getTokenizer().getLineTokens(e,s.slice(0));return n[1]=l.state,l.tokens}return this.token}}];this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s|$)/,next:\"header\"},e,{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\s*\\\\[)(\"+a(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\!?\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+a('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},e,{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:t}),this.normalizeRules()};i.inherits(f,o),t.MarkdownHighlightRules=f}),define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:[=-]+\\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]==\"`\"?e.bgTokenizer.getState(n)==\"start\"?\"end\":\"start\":\"start\":\"\"},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}function h(){var e=f.value[0];return e==\"=\"?6:e==\"-\"?5:7-f.value.search(/[^#]|$/)}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;if(r[0]==\"`\"){if(e.bgTokenizer.getState(n)!==\"start\"){while(++n<o){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(u,i,n,0)}while(n-->0){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(n,r.length,u,0)}var f,c=\"markup.heading\";if(l(n)){var p=h();while(++n<o){if(!l(n))continue;var d=h();if(d>=p)break}a=n-(!f||[\"=\",\"-\"].indexOf(f.value[0])==-1?1:2);if(a>u)while(a>u&&/^\\s*$/.test(e.getLine(a)))a--;if(a>u){var v=e.getLine(a).length;return new s(u,i,a,v)}}}}.call(o.prototype)}),define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f}),define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript\").Mode,o=e(\"./xml\").Mode,u=e(\"./html\").Mode,a=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,f=e(\"./folding/markdown\").FoldMode,l=function(){this.HighlightRules=a,this.createModeDelegates({javascript:e(\"./javascript\").Mode,html:e(\"./html\").Mode,bash:e(\"./sh\").Mode,sh:e(\"./sh\").Mode,xml:e(\"./xml\").Mode,css:e(\"./css\").Mode}),this.foldingRules=new f,this.$behaviour=this.$defaultBehaviour};r.inherits(l,i),function(){this.type=\"text\",this.blockComment={start:\"<!--\",end:\"-->\"},this.getNextLineIndent=function(e,t,n){if(e==\"listblock\"){var r=/^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(t);if(!r)return\"\";var i=r[2];return i||(i=parseInt(r[3],10)+1+\".\"),r[1]+i+r[4]}return this.$getIndent(t)},this.$id=\"ace/mode/markdown\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-mask.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(e){return\"(?:[^\"+s.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},f=function(){u.call(this);var e={token:\"support.function\",regex:/^\\s*(```+[^`]*|~~~+[^~]*)$/,onMatch:function(e,t,n,i){var s=e.match(/^(\\s*)([`~]+)(.*)/),o=/[\\w-]+|$/.exec(s[3])[0];return r[o]||(o=\"\"),n.unshift(\"githubblock\",[],[s[1],s[2],o],t),this.token},next:\"githubblock\"},t=[{token:\"support.function\",regex:\".*\",onMatch:function(e,t,n,i){var s=n[1],o=n[2][0],u=n[2][1],a=n[2][2],f=/^(\\s*)(`+|~+)\\s*$/.exec(e);if(f&&f[1].length<o.length+3&&f[2].length>=u.length&&f[2][0]==u[0])return n.splice(0,3),this.next=n.shift(),this.token;this.next=\"\";if(a&&r[a]){var l=r[a].getTokenizer().getLineTokens(e,s.slice(0));return n[1]=l.state,l.tokens}return this.token}}];this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s|$)/,next:\"header\"},e,{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\s*\\\\[)(\"+a(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\!?\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+a('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},e,{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:t}),this.normalizeRules()};i.inherits(f,o),t.MarkdownHighlightRules=f}),define(\"ace/mode/mask_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/css_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";function N(){function t(e,t,n){var r=\"js-\"+e+\"-\",i=e===\"block\"?[\"start\"]:[\"start\",\"no_regex\"];s(o,r,t,i,n)}function n(){s(u,\"css-block-\",/\\}/)}function r(){s(a,\"md-multiline-\",/(\"\"\"|''')/,[])}function i(){s(f,\"html-multiline-\",/(\"\"\"|''')/)}function s(t,n,r,i,s){var o=\"pop\",u=i||[\"start\"];u.length===0&&(u=null),/block|multiline/.test(n)&&(o=n+\"end\",e.$rules[o]=[k(\"empty\",\"\",\"start\")]),e.embedRules(t,n,[k(s||w,r,o)],u,u==null?!0:!1)}this.$rules={start:[k(\"comment\",\"\\\\/\\\\/.*$\"),k(\"comment\",\"\\\\/\\\\*\",[k(\"comment\",\".*?\\\\*\\\\/\",\"start\"),k(\"comment\",\".+\")]),C.string(\"'''\"),C.string('\"\"\"'),C.string('\"'),C.string(\"'\"),C.syntax(/(markdown|md)\\b/,\"md-multiline\",\"multiline\"),C.syntax(/html\\b/,\"html-multiline\",\"multiline\"),C.syntax(/(slot|event)\\b/,\"js-block\",\"block\"),C.syntax(/style\\b/,\"css-block\",\"block\"),C.syntax(/var\\b/,\"js-statement\",\"attr\"),C.tag(),k(b,\"[[({>]\"),k(w,\"[\\\\])};]\",\"start\"),{caseInsensitive:!0}]};var e=this;t(\"interpolation\",/\\]/,w+\".\"+g),t(\"statement\",/\\)|}|;/),t(\"block\",/\\}/),n(),r(),i(),this.normalizeRules()}function k(e,t,n){var r,i,s;return arguments.length===4?(r=n,i=arguments[3]):typeof n==\"string\"?i=n:r=n,typeof e==\"function\"&&(s=e,e=\"empty\"),{token:e,regex:t,push:r,next:i,onMatch:s}}t.MaskHighlightRules=N;var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./css_highlight_rules\").CssHighlightRules,a=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,f=e(\"./html_highlight_rules\").HtmlHighlightRules,l=\"keyword.support.constant.language\",c=\"support.function.markup.bold\",h=\"keyword\",p=\"constant.language\",d=\"keyword.control.markup.italic\",v=\"support.variable.class\",m=\"keyword.operator\",g=\"markup.italic\",y=\"markup.bold\",b=\"paren.lparen\",w=\"paren.rparen\",E,S,x,T;(function(){E=i.arrayToMap(\"log\".split(\"|\")),x=i.arrayToMap(\":dualbind|:bind|:import|slot|event|style|html|markdown|md\".split(\"|\")),S=i.arrayToMap(\"debugger|define|var|if|each|for|of|else|switch|case|with|visible|+if|+each|+for|+switch|+with|+visible|include|import\".split(\"|\")),T=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\"))})(),r.inherits(N,s);var C={string:function(e,t){var n=k(\"string.start\",e,[k(b+\".\"+g,/~\\[/,C.interpolation()),k(\"string.end\",e,\"pop\"),{defaultToken:\"string\"}],t);if(e.length===1){var r=k(\"string.escape\",\"\\\\\\\\\"+e);n.push.unshift(r)}return n},interpolation:function(){return[k(d,/\\s*\\w*\\s*:/),\"js-interpolation-start\"]},tagHead:function(e){return k(v,e,[k(v,/[\\w\\-_]+/),k(b+\".\"+g,/~\\[/,C.interpolation()),C.goUp()])},tag:function(){return{token:\"tag\",onMatch:function(e){return void 0!==S[e]?h:void 0!==x[e]?p:void 0!==E[e]?\"support.function\":void 0!==T[e.toLowerCase()]?l:c},regex:/([@\\w\\-_:+]+)|((^|\\s)(?=\\s*(\\.|#)))/,push:[C.tagHead(/\\./),C.tagHead(/#/),C.expression(),C.attribute(),k(b,/[;>{]/,\"pop\")]}},syntax:function(e,t,n){return{token:p,regex:e,push:{attr:[t+\"-start\",k(m,/;/,\"start\")],multiline:[C.tagHead(/\\./),C.tagHead(/#/),C.attribute(),C.expression(),k(b,/[>\\{]/),k(m,/;/,\"start\"),k(b,/'''|\"\"\"/,[t+\"-start\"])],block:[C.tagHead(/\\./),C.tagHead(/#/),C.attribute(),C.expression(),k(b,/\\{/,[t+\"-start\"])]}[n]}},attribute:function(){return k(function(e){return/^x\\-/.test(e)?v+\".\"+y:v},/[\\w_-]+/,[k(m,/\\s*=\\s*/,[C.string('\"'),C.string(\"'\"),C.word(),C.goUp()]),C.goUp()])},expression:function(){return k(b,/\\(/,[\"js-statement-start\"])},word:function(){return k(\"string\",/[\\w-_]+/)},goUp:function(){return k(\"text\",\"\",\"pop\")},goStart:function(){return k(\"text\",\"\",\"start\")}}}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/mask\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mask_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mask_highlight_rules\").MaskHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/mask\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-matlab.js",
    "content": "define(\"ace/mode/matlab_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while\",t=\"true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout\",n=\"abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:.(?:close|closeVar|computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab.io.MatFile|matlab.mixin.(?:Copyable|Heterogeneous(?:.getDefaultScalarElement)?)|matlabrc|matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta.(?:class(?:.fromName)?|DynamicProperty|EnumeratedValue|event|MetaData|method|package(?:.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|ncwriteschema|ndgrid|ndims|ne|NET(?:.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|NetException|setStaticProperty))?|netcdf.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:.(?:create|getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:.isPlatformSupported)?|VideoWriter(?:.getProfiles)?|view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|ylabel|ylim|zeros|zip|zlabel|zlim|zoom|addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|cholcov|Classification(?:BaggedEnsemble|Discriminant(?:.(?:fit|make|template))?|Ensemble|KNN(?:.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:.fit)?|geo(?:cdf|inv|mean|pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|LinearModel(?:.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:.fit)?|nan(?:cov|max|mean|median|min|std|sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|regstats|relieff|ridge|robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztestadapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|reflect|regionprops|registration.metric.(?:MattesMutualInformation|MeanSquares)|registration.optimizer.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb|bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog\",r=\"cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse\",i=this.createKeywordMapper({\"storage.type\":r,\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"string\",regex:\"'\",stateName:\"qstring\",next:[{token:\"constant.language.escape\",regex:\"''\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}]},{token:\"text\",regex:\"\\\\s+\"},{regex:\"\",next:\"noQstring\"}],noQstring:[{regex:\"^\\\\s*%{\\\\s*$\",token:\"comment.start\",push:\"blockComment\"},{token:\"comment\",regex:\"%[^\\r\\n]*\"},{token:\"string\",regex:'\"',stateName:\"qqstring\",next:[{token:\"constant.language.escape\",regex:/\\\\./},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\",next:\"start\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\",next:\"start\"},{token:\"paren.lparen\",regex:\"[({\\\\[]\",next:\"start\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"},{token:\"text\",regex:\"$\",next:\"start\"}],blockComment:[{regex:\"^\\\\s*%{\\\\s*$\",token:\"comment.start\",push:\"blockComment\"},{regex:\"^\\\\s*%}\\\\s*$\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.MatlabHighlightRules=s}),define(\"ace/mode/matlab\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matlab_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./matlab_highlight_rules\").MatlabHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"%\",this.blockComment={start:\"%{\",end:\"%}\"},this.$id=\"ace/mode/matlab\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-maze.js",
    "content": "define(\"ace/mode/maze_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.control\",regex:/##|``/,comment:\"Wall\"},{token:\"entity.name.tag\",regex:/\\.\\./,comment:\"Path\"},{token:\"keyword.control\",regex:/<>/,comment:\"Splitter\"},{token:\"entity.name.tag\",regex:/\\*[\\*A-Za-z0-9]/,comment:\"Signal\"},{token:\"constant.numeric\",regex:/[0-9]{2}/,comment:\"Pause\"},{token:\"keyword.control\",regex:/\\^\\^/,comment:\"Start\"},{token:\"keyword.control\",regex:/\\(\\)/,comment:\"Hole\"},{token:\"support.function\",regex:/>>/,comment:\"Out\"},{token:\"support.function\",regex:/>\\//,comment:\"Ln Out\"},{token:\"support.function\",regex:/<</,comment:\"In\"},{token:\"keyword.control\",regex:/--/,comment:\"One use\"},{token:\"constant.language\",regex:/%[LRUDNlrudn]/,comment:\"Direction\"},{token:[\"entity.name.function\",\"keyword.other\",\"keyword.operator\",\"keyword.other\",\"keyword.operator\",\"constant.numeric\",\"keyword.operator\",\"keyword.other\",\"keyword.operator\",\"constant.numeric\",\"string.quoted.double\",\"string.quoted.single\"],regex:/([A-Za-z][A-Za-z0-9])( *-> *)(?:([-+*\\/]=)( *)((?:-)?)([0-9]+)|(=)( *)(?:((?:-)?)([0-9]+)|(\"[^\"]*\")|('[^']*')))/,comment:\"Assignment function\"},{token:[\"entity.name.function\",\"keyword.other\",\"keyword.control\",\"keyword.other\",\"keyword.operator\",\"keyword.other\",\"keyword.operator\",\"constant.numeric\",\"entity.name.tag\",\"keyword.other\",\"keyword.control\",\"keyword.other\",\"constant.language\",\"keyword.other\",\"keyword.control\",\"keyword.other\",\"constant.language\"],regex:/([A-Za-z][A-Za-z0-9])( *-> *)(IF|if)( *)(?:([<>]=?|==)( *)((?:-)?)([0-9]+)|(\\*[\\*A-Za-z0-9]))( *)(THEN|then)( *)(%[LRUDNlrudn])(?:( *)(ELSE|else)( *)(%[LRUDNlrudn]))?/,comment:\"Equality Function\"},{token:\"entity.name.function\",regex:/[A-Za-z][A-Za-z0-9]/,comment:\"Function cell\"},{token:\"comment.line.double-slash\",regex:/ *\\/\\/.*/,comment:\"Comment\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"mz\"],name:\"Maze\",scopeName:\"source.maze\"},r.inherits(s,i),t.MazeHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/maze\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/maze_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./maze_highlight_rules\").MazeHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/maze\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-mel.js",
    "content": "define(\"ace/mode/mel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{caseInsensitive:!0,token:\"storage.type.mel\",regex:\"\\\\b(matrix|string|vector|float|int|void)\\\\b\"},{caseInsensitive:!0,token:\"support.function.mel\",regex:\"\\\\b((s(h(ow(ManipCtx|S(hadingGroupAttrEditor|electionInTitle)|H(idden|elp)|Window)|el(f(Button|TabLayout|Layout)|lField)|ading(GeometryRelCtx|Node|Connection|LightRelCtx))|y(s(tem|File)|mbol(Button|CheckBox))|nap(shot|Mode|2to2 |TogetherCtx|Key)|c(ulpt|ene(UIReplacement|Editor)|ale(BrushBrightness |Constraint|Key(Ctx)?)?|r(ipt(Node|Ctx|Table|edPanel(Type)?|Job|EditorInfo)|oll(Field|Layout))|mh)|t(itch(Surface(Points)?|AndExplodeShell )|a(ckTrace|rt(sWith |String ))|r(cmp|i(ng(ToStringArray |Array(Remove(Duplicates | )|C(ount |atenate )|ToString |Intersector))|p )|oke))|i(n(gleProfileBirailSurface)?|ze|gn|mplify)|o(u(nd(Control)?|rce)|ft(Mod(Ctx)?)?|rt)|u(perCtx|rface(S(haderList|ampler))?|b(st(itute(Geometry|AllString )?|ring)|d(M(irror|a(tchTopology|p(SewMove|Cut)))|iv(Crease|DisplaySmoothness)?|C(ollapse|leanTopology)|T(o(Blind|Poly)|ransferUVsToCache)|DuplicateAndConnect|EditUV|ListComponentConversion|AutoProjection)))|p(h(ere|rand)|otLight(PreviewPort)?|aceLocator|r(ing|eadSheetEditor))|e(t(s|MenuMode|Sta(te |rtupMessage|mpDensity )|NodeTypeFlag|ConstraintRestPosition |ToolTo|In(putDeviceMapping|finity)|D(ynamic|efaultShadingGroup|rivenKeyframe)|UITemplate|P(ar(ticleAttr|ent)|roject )|E(scapeCtx|dit(or|Ctx))|Key(Ctx|frame|Path)|F(ocus|luidAttr)|Attr(Mapping)?)|parator|ed|l(ect(Mode|ionConnection|Context|Type|edNodes|Pr(iority|ef)|Key(Ctx)?)?|LoadSettings)|archPathArray )|kin(Cluster|Percent)|q(uareSurface|rt)|w(itchTable|atchDisplayPort)|a(ve(Menu|Shelf|ToolSettings|I(nitialState|mage)|Pref(s|Objects)|Fluid|A(ttrPreset |llShelves))|mpleImage)|rtContext|mooth(step|Curve|TangentSurface))|h(sv_to_rgb|yp(ot|er(Graph|Shade|Panel))|i(tTest|de|lite)|ot(Box|key(Check)?)|ud(Button|Slider(Button)?)|e(lp(Line)?|adsUpDisplay|rmite)|wRe(nder(Load)?|flectionMap)|ard(enPointCurve|ware(RenderPanel)?))|n(o(nLinear|ise|de(Type|IconButton|Outliner|Preset)|rmal(ize |Constraint))|urbs(Boolean|S(elect|quare)|C(opyUVSet|ube)|To(Subdiv|Poly(gonsPref)?)|Plane|ViewDirectionVector )|ew(ton|PanelItems)|ame(space(Info)?|Command|Field))|c(h(oice|dir|eck(Box(Grp)?|DefaultRenderGlobals)|a(n(nelBox|geSubdiv(Region|ComponentDisplayLevel))|racter(Map|OutlineEditor)?))|y(cleCheck|linder)|tx(Completion|Traverse|EditMode|Abort)|irc(ularFillet|le)|o(s|n(str(uctionHistory|ain(Value)?)|nect(ionInfo|Control|Dynamic|Joint|Attr)|t(extInfo|rol)|dition|e|vert(SolidTx|Tessellation|Unit|FromOldLayers |Lightmap)|firmDialog)|py(SkinWeights|Key|Flexor|Array )|l(or(Slider(Grp|ButtonGrp)|Index(SliderGrp)?|Editor|AtPoint)?|umnLayout|lision)|arsenSubdivSelectionList|m(p(onentEditor|utePolysetVolume |actHairSystem )|mand(Port|Echo|Line)))|u(tKey|r(ve(MoveEPCtx|SketchCtx|CVCtx|Intersect|OnSurface|E(ditorCtx|PCtx)|AddPtCtx)?|rent(Ctx|Time(Ctx)?|Unit)))|p(GetSolverAttr|Button|S(olver(Types)?|e(t(SolverAttr|Edit)|am))|C(o(nstraint|llision)|ache)|Tool|P(anel|roperty))|eil|l(ip(Schedule(rOutliner)?|TrimBefore |Editor(CurrentTimeCtx)?)?|ose(Surface|Curve)|uster|ear(Cache)?|amp)|a(n(CreateManip|vas)|tch(Quiet)?|pitalizeString |mera(View)?)|r(oss(Product )?|eate(RenderLayer|MotionField |SubdivRegion|N(ode|ewShelf )|D(isplayLayer|rawCtx)|Editor))|md(Shell|FileOutput))|M(R(ender(ShadowData|Callback|Data|Util|View|Line(Array)?)|ampAttribute)|G(eometryData|lobal)|M(odelMessage|essage|a(nipData|t(erial|rix)))|BoundingBox|S(yntax|ceneMessage|t(atus|ring(Array)?)|imple|pace|elect(ion(Mask|List)|Info)|watchRender(Register|Base))|H(ardwareRenderer|WShaderSwatchGenerator)|NodeMessage|C(o(nditionMessage|lor(Array)?|m(putation|mand(Result|Message)))|ursor|loth(Material|S(ystem|olverRegister)|Con(straint|trol)|Triangle|Particle|Edge|Force)|allbackIdArray)|T(ypeId|ime(r(Message)?|Array)?|oolsInfo|esselationParams|r(imBoundaryArray|ansformationMatrix))|I(ntArray|t(Geometry|Mesh(Polygon|Edge|Vertex|FaceVertex)|S(urfaceCV|electionList)|CurveCV|Instancer|eratorType|D(ependency(Graph|Nodes)|ag)|Keyframe)|k(System|HandleGroup)|mage)|3dView|Object(SetMessage|Handle|Array)?|D(G(M(odifier|essage)|Context)|ynSwept(Triangle|Line)|istance|oubleArray|evice(State|Channel)|a(ta(Block|Handle)|g(M(odifier|essage)|Path(Array)?))|raw(Request(Queue)?|Info|Data|ProcedureBase))|U(serEventMessage|i(nt(Array|64Array)|Message))|P(o(int(Array)?|lyMessage)|lug(Array)?|rogressWindow|x(G(eometry(Iterator|Data)|lBuffer)|M(idiInputDevice|odelEditorCommand|anipContainer)|S(urfaceShape(UI)?|pringNode|electionContext)|HwShaderNode|Node|Co(ntext(Command)?|m(ponentShape|mand))|T(oolCommand|ransform(ationMatrix)?)|IkSolver(Node)?|3dModelView|ObjectSet|D(eformerNode|ata|ragAndDropBehavior)|PolyT(weakUVCommand|rg)|EmitterNode|F(i(eldNode|leTranslator)|luidEmitterNode)|LocatorNode))|E(ulerRotation|vent(Message)?)|ayatomr|Vector(Array)?|Quaternion|F(n(R(otateManip|eflectShader|adialField)|G(e(nericAttribute|ometry(Data|Filter))|ravityField)|M(otionPath|es(sageAttribute|h(Data)?)|a(nip3D|trix(Data|Attribute)))|B(l(innShader|endShapeDeformer)|ase)|S(caleManip|t(ateManip|ring(Data|ArrayData))|ingleIndexedComponent|ubd(Names|Data)?|p(hereData|otLight)|et|kinCluster)|HikEffector|N(on(ExtendedLight|AmbientLight)|u(rbs(Surface(Data)?|Curve(Data)?)|meric(Data|Attribute))|ewtonField)|C(haracter|ircleSweepManip|ompo(nent(ListData)?|undAttribute)|urveSegmentManip|lip|amera)|T(ypedAttribute|oggleManip|urbulenceField|r(ipleIndexedComponent|ansform))|I(ntArrayData|k(Solver|Handle|Joint|Effector))|D(ynSweptGeometryData|i(s(cManip|tanceManip)|rection(Manip|alLight))|ouble(IndexedComponent|ArrayData)|ependencyNode|a(ta|gNode)|ragField)|U(ni(tAttribute|formField)|Int64ArrayData)|P(hong(Shader|EShader)|oint(On(SurfaceManip|CurveManip)|Light|ArrayData)|fxGeometry|lugin(Data)?|arti(cleSystem|tion))|E(numAttribute|xpression)|V(o(lume(Light|AxisField)|rtexField)|ectorArrayData)|KeyframeDelta(Move|B(lockAddRemove|reakdown)|Scale|Tangent|InfType|Weighted|AddRemove)?|F(ield|luid|reePointTriadManip)|W(ireDeformer|eightGeometryFilter)|L(ight(DataAttribute)?|a(yeredShader|ttice(D(eformer|ata))?|mbertShader))|A(ni(sotropyShader|mCurve)|ttribute|irField|r(eaLight|rayAttrsData)|mbientLight))?|ile(IO|Object)|eedbackLine|loat(Matrix|Point(Array)?|Vector(Array)?|Array))|L(i(ghtLinks|brary)|ockMessage)|A(n(im(Message|C(ontrol|urveC(hange|lipboard(Item(Array)?)?))|Util)|gle)|ttribute(Spec(Array)?|Index)|r(rayData(Builder|Handle)|g(Database|Parser|List))))|t(hreePointArcCtx|ime(Control|Port|rX)|o(ol(Button|HasOptions|Collection|Dropped|PropertyWindow)|NativePath |upper|kenize(List )?|l(ower|erance)|rus|ggle(WindowVisibility|Axis)?)|u(rbulence|mble(Ctx)?)|ex(RotateContext|M(oveContext|anipContext)|t(ScrollList|Curves|ure(HairColor |DisplacePlane |PlacementContext|Window)|ToShelf |Field(Grp|ButtonGrp)?)?|S(caleContext|electContext|mudgeUVContext)|WinToolCtx)|woPointArcCtx|a(n(gentConstraint)?|bLayout)|r(im|unc(ate(HairCache|FluidCache))?|a(ns(formLimits|lator)|c(e|k(Ctx)?))))|i(s(olateSelect|Connected|True|Dirty|ParentOf |Valid(String |ObjectName |UiName )|AnimCurve )|n(s(tance(r)?|ert(Joint(Ctx)?|K(not(Surface|Curve)|eyCtx)))|heritTransform|t(S(crollBar|lider(Grp)?)|er(sect|nalVar|ToUI )|Field(Grp)?))|conText(Radio(Button|Collection)|Button|StaticLabel|CheckBox)|temFilter(Render|Type|Attr)?|prEngine|k(S(ystem(Info)?|olver|plineHandleCtx)|Handle(Ctx|DisplayScale)?|fkDisplayMethod)|m(portComposerCurves |fPlugins|age))|o(ceanNurbsPreviewPlane |utliner(Panel|Editor)|p(tion(Menu(Grp)?|Var)|en(GLExtension|MayaPref))|verrideModifier|ffset(Surface|Curve(OnSurface)?)|r(ientConstraint|bit(Ctx)?)|b(soleteProc |j(ect(Center|Type(UI)?|Layer )|Exists)))|d(yn(RelEd(itor|Panel)|Globals|C(ontrol|ache)|P(a(intEditor|rticleCtx)|ref)|Exp(ort|ression)|amicLoad)|i(s(connect(Joint|Attr)|tanceDim(Context|ension)|pla(y(RGBColor|S(tats|urface|moothness)|C(olor|ull)|Pref|LevelOfDetail|Affected)|cementToPoly)|kCache|able)|r(name |ect(ionalLight|KeyCtx)|map)|mWhen)|o(cServer|Blur|t(Product )?|ubleProfileBirailSurface|peSheetEditor|lly(Ctx)?)|uplicate(Surface|Curve)?|e(tach(Surface|Curve|DeviceAttr)|vice(Panel|Editor)|f(ine(DataServer|VirtualDevice)|ormer|ault(Navigation|LightListCheckBox))|l(ete(Sh(elfTab |adingGroupsAndMaterials )|U(nusedBrushes |I)|Attr)?|randstr)|g_to_rad)|agPose|r(opoffLocator|ag(gerContext)?)|g(timer|dirty|Info|eval))|CBG |u(serCtx|n(t(angleUV|rim)|i(t|form)|do(Info)?|loadPlugin|assignInputDevice|group)|iTemplate|p(dateAE |Axis)|v(Snapshot|Link))|joint(C(tx|luster)|DisplayScale|Lattice)?|p(sd(ChannelOutliner|TextureFile|E(ditTextureFile|xport))|close|i(c(ture|kWalk)|xelMove)|o(se|int(MatrixMult |C(onstraint|urveConstraint)|On(Surface|Curve)|Position|Light)|p(upMenu|en)|w|l(y(Reduce|GeoSampler|M(irrorFace|ove(UV|Edge|Vertex|Facet(UV)?)|erge(UV|Edge(Ctx)?|Vertex|Facet(Ctx)?)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|l(indData|endColor))|S(traightenUVBorder|oftEdge|u(perCtx|bdivide(Edge|Facet))|p(her(icalProjection|e)|lit(Ring|Ctx|Edge|Vertex)?)|e(tToFaceNormal|parate|wEdge|lect(Constraint(Monitor)?|EditCtx))|mooth)|Normal(izeUV|PerVertex)?|C(hipOff|ylind(er|ricalProjection)|o(ne|pyUV|l(or(BlindData|Set|PerVertex)|lapse(Edge|Facet)))|u(t(Ctx)?|be)|l(ipboard|oseBorder)|acheMonitor|rea(seEdge|teFacet(Ctx)?))|T(o(Subdiv|rus)|r(iangulate|ansfer))|In(stallAction|fo)|Options|D(uplicate(Edge|AndConnect)|el(Edge|Vertex|Facet))|U(nite|VSet)|P(yramid|oke|lan(e|arProjection)|r(ism|ojection))|E(ditUV|valuate|xtrude(Edge|Facet))|Qu(eryBlindData|ad)|F(orceUV|lip(UV|Edge))|WedgeFace|L(istComponentConversion|ayoutUV)|A(utoProjection|ppend(Vertex|FacetCtx)?|verage(Normal|Vertex)))|eVectorConstraint))|utenv|er(cent|formanceOptions)|fxstrokes|wd|l(uginInfo|a(y(b(last|ackOptions))?|n(e|arSrf)))|a(steKey|ne(l(History|Configuration)?|Layout)|thAnimation|irBlend|use|lettePort|r(ti(cle(RenderInfo|Instancer|Exists)?|tion)|ent(Constraint)?|am(Dim(Context|ension)|Locator)))|r(int|o(j(ect(ion(Manip|Context)|Curve|Tangent)|FileViewer)|pMo(dCtx|ve)|gress(Bar|Window)|mptDialog)|eloadRefEd))|e(n(codeString|d(sWith |String )|v|ableDevice)|dit(RenderLayer(Globals|Members)|or(Template)?|DisplayLayer(Globals|Members)|AttrLimits )|v(ent|al(Deferred|Echo)?)|quivalent(Tol | )|ffector|r(f|ror)|x(clusiveLightCheckBox|t(end(Surface|Curve)|rude)|ists|p(ortComposerCurves |ression(EditorListen)?)?|ec(uteForEachObject )?|actWorldBoundingBox)|mit(ter)?)|v(i(sor|ew(Set|HeadOn|2dToolCtx|C(lipPlane|amera)|Place|Fit|LookAt))|o(lumeAxis|rtex)|e(ctorize|rifyCmd )|alidateShelfName )|key(Tangent|frame(Region(MoveKeyCtx|S(caleKeyCtx|e(tKeyCtx|lectKeyCtx))|CurrentTimeCtx|TrackCtx|InsertKeyCtx|D(irectKeyCtx|ollyCtx))|Stats|Outliner)?)|qu(it|erySubdiv)|f(c(heck|lose)|i(nd(RelatedSkinCluster |MenuItem |er|Keyframe|AllIntersections )|tBspline|l(ter(StudioImport|Curve|Expand)?|e(BrowserDialog|test|Info|Dialog|Extension )?|letCurve)|rstParentOf )|o(ntDialog|pen|rmLayout)|print|eof|flush|write|l(o(or|w|at(S(crollBar|lider(Grp|ButtonGrp|2)?)|Eq |Field(Grp)?))|u(shUndo|id(CacheInfo|Emitter|VoxelInfo))|exor)|r(omNativePath |e(eFormFillet|wind|ad)|ameLayout)|get(word|line)|mod)|w(hatIs|i(ndow(Pref)?|re(Context)?)|orkspace|ebBrowser(Prefs)?|a(itCursor|rning)|ri(nkle(Context)?|teTake))|l(s(T(hroughFilter|ype )|UI)?|i(st(Relatives|MenuAnnotation |Sets|History|NodeTypes|C(onnections|ameras)|Transforms |InputDevice(s|Buttons|Axes)|erEditor|DeviceAttachments|Unselected |A(nimatable|ttr))|n(step|eIntersection )|ght(link|List(Panel|Editor)?))|o(ckNode|okThru|ft|ad(NewShelf |P(lugin|refObjects)|Fluid)|g)|a(ssoContext|y(out|er(Button|ed(ShaderPort|TexturePort)))|ttice(DeformKeyCtx)?|unch(ImageEditor)?))|a(ssign(Command|InputDevice)|n(notate|im(C(one|urveEditor)|Display|View)|gle(Between)?)|tt(ach(Surface|Curve|DeviceAttr)|r(ibute(Menu|Info|Exists|Query)|NavigationControlGrp|Co(ntrolGrp|lorSliderGrp|mpatibility)|PresetEditWin|EnumOptionMenu(Grp)?|Field(Grp|SliderGrp)))|i(r|mConstraint)|d(d(NewShelfTab|Dynamic|PP|Attr(ibuteEditorNodeHelp)?)|vanceToNextDrivenKey)|uto(Place|Keyframe)|pp(endStringArray|l(y(Take|AttrPreset)|icationName))|ffect(s|edNet)|l(i(as(Attr)?|gn(Surface|C(tx|urve))?)|lViewFit)|r(c(len|Len(DimContext|gthDimension))|t(BuildPaintMenu|Se(tPaintCtx|lectCtx)|3dPaintCtx|UserPaintCtx|PuttyCtx|FluidAttrCtx|Attr(SkinPaintCtx|Ctx|PaintVertexCtx))|rayMapper)|mbientLight|b(s|out))|r(igid(Body|Solver)|o(t(at(ionInterpolation|e))?|otOf |undConstantRadius|w(ColumnLayout|Layout)|ll(Ctx)?)|un(up|TimeCommand)|e(s(olutionNode|et(Tool|AE )|ampleFluid)|hash|n(der(GlobalsNode|Manip|ThumbnailUpdate|Info|er|Partition|QualityNode|Window(SelectContext|Editor)|LayerButton)?|ame(SelectionList |UI|Attr)?)|cord(Device|Attr)|target|order(Deformers)?|do|v(olve|erse(Surface|Curve))|quires|f(ineSubdivSelectionList|erence(Edit|Query)?|resh(AE )?)|loadImage|adTake|root|move(MultiInstance|Joint)|build(Surface|Curve))|a(n(d(state|omizeFollicles )?|geControl)|d(i(o(MenuItemCollection|Button(Grp)?|Collection)|al)|_to_deg)|mpColorPort)|gb_to_hsv)|g(o(toBindPose |al)|e(t(M(odifiers|ayaPanelTypes )|Classification|InputDeviceRange|pid|env|DefaultBrush|Pa(nel|rticleAttr)|F(ileList|luidAttr)|A(ttr|pplicationVersionAsFloat ))|ometryConstraint)|l(Render(Editor)?|obalStitch)|a(uss|mma)|r(id(Layout)?|oup(ObjectsByName )?|a(dientControl(NoAttr)?|ph(SelectContext|TrackCtx|DollyCtx)|vity|bColor))|match)|x(pmPicker|form|bmLangPathList )|m(i(n(imizeApp)?|rrorJoint)|o(del(CurrentTimeCtx|Panel|Editor)|use|v(In|e(IKtoFK |VertexAlongDirection|KeyCtx)?|Out))|u(te|ltiProfileBirailSurface)|e(ssageLine|nu(BarLayout|Item(ToShelf )?|Editor)?|mory)|a(nip(Rotate(Context|LimitsCtx)|Move(Context|LimitsCtx)|Scale(Context|LimitsCtx)|Options)|tch|ke(Roll |SingleSurface|TubeOn |Identity|Paintable|bot|Live)|rker|g|x))|b(in(Membership|d(Skin|Pose))|o(neLattice|undary|x(ZoomCtx|DollyCtx))|u(tton(Manip)?|ild(BookmarkMenu|KeyframeMenu)|fferCurve)|e(ssel|vel(Plus)?)|l(indDataType|end(Shape(Panel|Editor)?|2|TwoAttr))|a(sename(Ex | )|tchRender|ke(Results|Simulation|Clip|PartialHistory|FluidShading )))))\\\\b\"},{caseInsensitive:!0,token:\"support.constant.mel\",regex:\"\\\\b(s(h(ellTessellate|a(d(ing(Map|Engine)|erGlow)|pe))|n(ow|apshot(Shape)?)|c(ulpt|aleConstraint|ript)|t(yleCurve|itch(Srf|AsNurbsShell)|u(cco|dioClearCoat)|encil|roke(Globals)?)|i(ngleShadingSwitch|mpleVolumeShader)|o(ftMod(Manip|Handle)?|lidFractal)|u(rface(Sha(der|pe)|Info|EdManip|VarGroup|Luminance)|b(Surface|d(M(odifier(UV|World)?|ap(SewMove|Cut|pingManip))|B(lindData|ase)|iv(ReverseFaces|SurfaceVarGroup|Co(llapse|mponentId)|To(Nurbs|Poly))?|HierBlind|CleanTopology|Tweak(UV)?|P(lanarProj|rojManip)|LayoutUV|A(ddTopology|utoProj))|Curve))|p(BirailSrf|otLight|ring)|e(tRange|lectionListOperator)|k(inCluster|etchPlane)|quareSrf|ampler(Info)?|m(ooth(Curve|TangentSrf)|ear))|h(svToRgb|yper(GraphInfo|View|Layout)|ik(Solver|Handle|Effector)|oldMatrix|eightField|w(Re(nderGlobals|flectionMap)|Shader)|a(ir(System|Constraint|TubeShader)|rd(enPoint|wareRenderGlobals)))|n(o(n(ExtendedLightShapeNode|Linear|AmbientLightShapeNode)|ise|rmalConstraint)|urbs(Surface|Curve|T(oSubdiv(Proc)?|essellate)|DimShape)|e(twork|wtonField))|c(h(o(ice|oser)|ecker|aracter(Map|Offset)?)|o(n(straint|tr(olPoint|ast)|dition)|py(ColorSet|UVSet))|urve(Range|Shape|Normalizer(Linear|Angle)?|In(tersect|fo)|VarGroup|From(Mesh(CoM|Edge)?|Su(rface(Bnd|CoS|Iso)?|bdiv(Edge|Face)?)))|l(ip(Scheduler|Library)|o(se(stPointOnSurface|Surface|Curve)|th|ud)|uster(Handle)?|amp)|amera(View)?|r(eate(BPManip|ColorSet|UVSet)|ater))|t(ime(ToUnitConversion|Function)?|oo(nLineAttributes|lDrawManip)|urbulenceField|ex(BaseDeformManip|ture(BakeSet|2d|ToGeom|3d|Env)|SmudgeUVManip|LatticeDeformManip)|weak|angentConstraint|r(i(pleShadingSwitch|m(WithBoundaries)?)|ansform(Geometry)?))|i(n(s(tancer|ertKnot(Surface|Curve))|tersectSurface)|k(RPsolver|MCsolver|S(ystem|olver|Csolver|plineSolver)|Handle|PASolver|Effector)|m(plicit(Box|Sphere|Cone)|agePlane))|o(cean(Shader)?|pticalFX|ffset(Surface|C(os|urve))|ldBlindDataBase|rient(Constraint|ationMarker)|bject(RenderFilter|MultiFilter|BinFilter|S(criptFilter|et)|NameFilter|TypeFilter|Filter|AttrFilter))|d(yn(Globals|Base)|i(s(tance(Between|DimShape)|pla(yLayer(Manager)?|cementShader)|kCache)|rect(ionalLight|edDisc)|mensionShape)|o(ubleShadingSwitch|f)|pBirailSrf|e(tach(Surface|Curve)|pendNode|f(orm(Bend|S(ine|quash)|Twist|ableShape|F(unc|lare)|Wave)|ault(RenderUtilityList|ShaderList|TextureList|LightList))|lete(Co(lorSet|mponent)|UVSet))|ag(Node|Pose)|r(opoffLocator|agField))|u(seBackground|n(trim|i(t(Conversion|ToTimeConversion)|formField)|known(Transform|Dag)?)|vChooser)|j(iggle|oint(Cluster|Ffd|Lattice)?)|p(sdFileTex|hong(E)?|o(s(tProcessList|itionMarker)|int(MatrixMult|Constraint|On(SurfaceInfo|CurveInfo)|Emitter|Light)|l(y(Reduce|M(irror|o(difier(UV|World)?|ve(UV|Edge|Vertex|Face(tUV)?))|erge(UV|Edge|Vert|Face)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|lindData|ase)|S(traightenUVBorder|oftEdge|ubd(Edge|Face)|p(h(ere|Proj)|lit(Ring|Edge|Vert)?)|e(parate|wEdge)|mooth(Proxy|Face)?)|Normal(izeUV|PerVertex)?|C(hipOff|yl(inder|Proj)|o(ne|pyUV|l(orPerVertex|lapse(Edge|F)))|u(t(Manip(Container)?)?|be)|loseBorder|rea(seEdge|t(or|eFace)))|T(o(Subdiv|rus)|weak(UV)?|r(iangulate|ansfer))|OptUvs|D(uplicateEdge|el(Edge|Vertex|Facet))|Unite|P(yramid|oke(Manip)?|lan(e|arProj)|r(i(sm|mitive)|oj))|Extrude(Edge|Vertex|Face)|VertexNormalManip|Quad|Flip(UV|Edge)|WedgeFace|LayoutUV|A(utoProj|ppend(Vertex)?|verageVertex))|eVectorConstraint))|fx(Geometry|Hair|Toon)|l(usMinusAverage|a(n(e|arTrimSurface)|ce(2dTexture|3dTexture)))|a(ssMatrix|irBlend|r(ti(cle(SamplerInfo|C(olorMapper|loud)|TranspMapper|IncandMapper|AgeMapper)?|tion)|ent(Constraint|Tessellate)|amDimension))|r(imitive|o(ject(ion|Curve|Tangent)|xyManager)))|e(n(tity|v(Ball|ironmentFog|S(phere|ky)|C(hrome|ube)|Fog))|x(t(end(Surface|Curve)|rude)|p(lodeNurbsShell|ression)))|v(iewManip|o(lume(Shader|Noise|Fog|Light|AxisField)|rtexField)|e(ctor(RenderGlobals|Product)|rtexBakeSet))|quadShadingSwitch|f(i(tBspline|eld|l(ter(Resample|Simplify|ClosestSample|Euler)?|e|letCurve))|o(urByFourMatrix|llicle)|urPointOn(MeshInfo|Subd)|f(BlendSrf(Obsolete)?|d|FilletSrf)|l(ow|uid(S(hape|liceManip)|Texture(2D|3D)|Emitter)|exorShape)|ra(ctal|meCache))|w(tAddMatrix|ire|ood|eightGeometryFilter|ater|rap)|l(ight(Info|Fog|Li(st|nker))?|o(cator|okAt|d(Group|Thresholds)|ft)|uminance|ea(stSquaresModifier|ther)|a(yered(Shader|Texture)|ttice|mbert))|a(n(notationShape|i(sotropic|m(Blend(InOut)?|C(urve(T(T|U|L|A)|U(T|U|L|A))?|lip)))|gleBetween)|tt(ach(Surface|Curve)|rHierarchyTest)|i(rField|mConstraint)|dd(Matrix|DoubleLinear)|udio|vg(SurfacePoints|NurbsSurfacePoints|Curves)|lign(Manip|Surface|Curve)|r(cLengthDimension|tAttrPaintTest|eaLight|rayMapper)|mbientLight|bstractBase(NurbsConversion|Create))|r(igid(Body|Solver|Constraint)|o(ck|undConstantRadius)|e(s(olution|ultCurve(TimeTo(Time|Unitless|Linear|Angular))?)|nder(Rect|Globals(List)?|Box|Sphere|Cone|Quality|L(ight|ayer(Manager)?))|cord|v(olve(dPrimitive)?|erse(Surface|Curve)?)|f(erence|lect)|map(Hsv|Color|Value)|build(Surface|Curve))|a(dialField|mp(Shader)?)|gbToHsv|bfSrf)|g(uide|eo(Connect(or|able)|metry(Shape|Constraint|VarGroup|Filter))|lobal(Stitch|CacheControl)|ammaCorrect|r(id|oup(Id|Parts)|a(nite|vityField)))|Fur(Globals|Description|Feedback|Attractors)|xformManip|m(o(tionPath|untain|vie)|u(te|lt(Matrix|i(plyDivide|listerLight)|DoubleLinear))|pBirailSrf|e(sh(VarGroup)?|ntalray(Texture|IblShape))|a(terialInfo|ke(Group|Nurb(sSquare|Sphere|C(ylinder|ircle|one|ube)|Torus|Plane)|CircularArc|T(hreePointCircularArc|extCurves|woPointCircularArc))|rble))|b(irailSrf|o(neLattice|olean|undary(Base)?)|u(lge|mp(2d|3d))|evel(Plus)?|l(in(n|dDataTemplate)|end(Shape|Color(s|Sets)|TwoAttr|Device|Weighted)?)|a(se(GeometryVarGroup|ShadingSwitch|Lattice)|keSet)|r(ownian|ush)))\\\\b\"},{caseInsensitive:!0,token:\"keyword.control.mel\",regex:\"\\\\b(if|in|else|for|while|break|continue|case|default|do|switch|return|switch|case|source|catch|alias)\\\\b\"},{token:\"keyword.other.mel\",regex:\"\\\\b(global)\\\\b\"},{caseInsensitive:!0,token:\"constant.language.mel\",regex:\"\\\\b(null|undefined)\\\\b\"},{token:\"constant.numeric.mel\",regex:\"\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"punctuation.definition.string.begin.mel\",regex:'\"',push:[{token:\"constant.character.escape.mel\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.mel\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.mel\"}]},{token:[\"variable.other.mel\",\"punctuation.definition.variable.mel\"],regex:\"(\\\\$)([a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*?\\\\b)\"},{token:\"punctuation.definition.string.begin.mel\",regex:\"'\",push:[{token:\"constant.character.escape.mel\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.mel\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.quoted.single.mel\"}]},{token:\"constant.language.mel\",regex:\"\\\\b(false|true|yes|no|on|off)\\\\b\"},{token:\"punctuation.definition.comment.mel\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.mel\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.mel\"}]},{token:[\"comment.line.double-slash.mel\",\"punctuation.definition.comment.mel\"],regex:\"(//)(.*$\\\\n?)\"},{caseInsensitive:!0,token:\"keyword.operator.mel\",regex:\"\\\\b(instanceof)\\\\b\"},{token:\"keyword.operator.symbolic.mel\",regex:\"[-\\\\!\\\\%\\\\&\\\\*\\\\+\\\\=\\\\/\\\\?\\\\:]\"},{token:[\"meta.preprocessor.mel\",\"punctuation.definition.preprocessor.mel\"],regex:\"(^[ \\\\t]*)((?:#)[a-zA-Z]+)\"},{token:[\"meta.function.mel\",\"keyword.other.mel\",\"storage.type.mel\",\"entity.name.function.mel\",\"punctuation.section.function.mel\"],regex:\"(global\\\\s*)?(proc\\\\s*)(\\\\w+\\\\s*\\\\[?\\\\]?\\\\s+|\\\\s+)([A-Za-z_][A-Za-z0-9_\\\\.]*)(\\\\s*\\\\()\",push:[{include:\"$self\"},{token:\"punctuation.section.function.mel\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"meta.function.mel\"}]}]},this.normalizeRules()};r.inherits(s,i),t.MELHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/mel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mel_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mel_highlight_rules\").MELHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.$behaviour=new o,this.foldingRules=new u};r.inherits(a,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/mel\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-mixal.js",
    "content": "define(\"ace/mode/mixal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=function(e){return e&&e.search(/^[A-Z\\u0394\\u03a0\\u03a30-9]{1,10}$/)>-1&&e.search(/[A-Z\\u0394\\u03a0\\u03a3]/)>-1},t=function(e){return e&&[\"NOP\",\"ADD\",\"FADD\",\"SUB\",\"FSUB\",\"MUL\",\"FMUL\",\"DIV\",\"FDIV\",\"NUM\",\"CHAR\",\"HLT\",\"SLA\",\"SRA\",\"SLAX\",\"SRAX\",\"SLC\",\"SRC\",\"MOVE\",\"LDA\",\"LD1\",\"LD2\",\"LD3\",\"LD4\",\"LD5\",\"LD6\",\"LDX\",\"LDAN\",\"LD1N\",\"LD2N\",\"LD3N\",\"LD4N\",\"LD5N\",\"LD6N\",\"LDXN\",\"STA\",\"ST1\",\"ST2\",\"ST3\",\"ST4\",\"ST5\",\"ST6\",\"STX\",\"STJ\",\"STZ\",\"JBUS\",\"IOC\",\"IN\",\"OUT\",\"JRED\",\"JMP\",\"JSJ\",\"JOV\",\"JNOV\",\"JL\",\"JE\",\"JG\",\"JGE\",\"JNE\",\"JLE\",\"JAN\",\"JAZ\",\"JAP\",\"JANN\",\"JANZ\",\"JANP\",\"J1N\",\"J1Z\",\"J1P\",\"J1NN\",\"J1NZ\",\"J1NP\",\"J2N\",\"J2Z\",\"J2P\",\"J2NN\",\"J2NZ\",\"J2NP\",\"J3N\",\"J3Z\",\"J3P\",\"J3NN\",\"J3NZ\",\"J3NP\",\"J4N\",\"J4Z\",\"J4P\",\"J4NN\",\"J4NZ\",\"J4NP\",\"J5N\",\"J5Z\",\"J5P\",\"J5NN\",\"J5NZ\",\"J5NP\",\"J6N\",\"J6Z\",\"J6P\",\"J6NN\",\"J6NZ\",\"J6NP\",\"JXAN\",\"JXZ\",\"JXP\",\"JXNN\",\"JXNZ\",\"JXNP\",\"INCA\",\"DECA\",\"ENTA\",\"ENNA\",\"INC1\",\"DEC1\",\"ENT1\",\"ENN1\",\"INC2\",\"DEC2\",\"ENT2\",\"ENN2\",\"INC3\",\"DEC3\",\"ENT3\",\"ENN3\",\"INC4\",\"DEC4\",\"ENT4\",\"ENN4\",\"INC5\",\"DEC5\",\"ENT5\",\"ENN5\",\"INC6\",\"DEC6\",\"ENT6\",\"ENN6\",\"INCX\",\"DECX\",\"ENTX\",\"ENNX\",\"CMPA\",\"FCMP\",\"CMP1\",\"CMP2\",\"CMP3\",\"CMP4\",\"CMP5\",\"CMP6\",\"CMPX\",\"EQU\",\"ORIG\",\"CON\",\"ALF\",\"END\"].indexOf(e)>-1},n=function(e){return e&&e.search(/[^ A-Z\\u0394\\u03a0\\u03a30-9.,()+*/=$<>@;:'-]/)==-1};this.$rules={start:[{token:\"comment.line.character\",regex:/^ *\\*.*$/},{token:function(t,r,i,s,o,u){return[e(t)?\"variable.other\":\"invalid.illegal\",\"text\",\"keyword.control\",\"text\",n(o)?\"text\":\"invalid.illegal\",\"comment.line.character\"]},regex:/^(\\S+)?( +)(ALF)(  )(.{5})(\\s+.*)?$/},{token:function(t,r,i,s,o,u){return[e(t)?\"variable.other\":\"invalid.illegal\",\"text\",\"keyword.control\",\"text\",n(o)?\"text\":\"invalid.illegal\",\"comment.line.character\"]},regex:/^(\\S+)?( +)(ALF)( )(\\S.{4})(\\s+.*)?$/},{token:function(n,r,i,s){return[e(n)?\"variable.other\":\"invalid.illegal\",\"text\",t(i)?\"keyword.control\":\"invalid.illegal\",\"comment.line.character\"]},regex:/^(\\S+)?( +)(\\S+)(?:\\s*)$/},{token:function(r,i,s,o,u,a){return[e(r)?\"variable.other\":\"invalid.illegal\",\"text\",t(s)?\"keyword.control\":\"invalid.illegal\",\"text\",n(u)?\"text\":\"invalid.illegal\",\"comment.line.character\"]},regex:/^(\\S+)?( +)(\\S+)( +)(\\S+)(\\s+.*)?$/},{defaultToken:\"text\"}]}};r.inherits(s,i),t.MixalHighlightRules=s}),define(\"ace/mode/mixal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mixal_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mixal_highlight_rules\").MixalHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/mixal\",this.lineCommentStart=\"*\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-mushcode.js",
    "content": "define(\"ace/mode/mushcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"@if|@ifelse|@switch|@halt|@dolist|@create|@scent|@sound|@touch|@ataste|@osound|@ahear|@aahear|@amhear|@otouch|@otaste|@drop|@odrop|@adrop|@dropfail|@odropfail|@smell|@oemit|@emit|@pemit|@parent|@clone|@taste|whisper|page|say|pose|semipose|teach|touch|taste|smell|listen|look|move|go|home|follow|unfollow|desert|dismiss|@tel\",t=\"=#0\",n=\"default|edefault|eval|get_eval|get|grep|grepi|hasattr|hasattrp|hasattrval|hasattrpval|lattr|nattr|poss|udefault|ufun|u|v|uldefault|xget|zfun|band|bnand|bnot|bor|bxor|shl|shr|and|cand|cor|eq|gt|gte|lt|lte|nand|neq|nor|not|or|t|xor|con|entrances|exit|followers|home|lcon|lexits|loc|locate|lparent|lsearch|next|num|owner|parent|pmatch|rloc|rnum|room|where|zone|worn|held|carried|acos|asin|atan|ceil|cos|e|exp|fdiv|fmod|floor|log|ln|pi|power|round|sin|sqrt|tan|aposs|andflags|conn|commandssent|controls|doing|elock|findable|flags|fullname|hasflag|haspower|hastype|hidden|idle|isbaker|lock|lstats|money|who|name|nearby|obj|objflags|photo|poll|powers|pendingtext|receivedtext|restarts|restarttime|subj|shortestpath|tmoney|type|visible|cat|element|elements|extract|filter|filterbool|first|foreach|fold|grab|graball|index|insert|itemize|items|iter|last|ldelete|map|match|matchall|member|mix|munge|pick|remove|replace|rest|revwords|setdiff|setinter|setunion|shuffle|sort|sortby|splice|step|wordpos|words|add|lmath|max|mean|median|min|mul|percent|sign|stddev|sub|val|bound|abs|inc|dec|dist2d|dist3d|div|floordiv|mod|modulo|remainder|vadd|vdim|vdot|vmag|vmax|vmin|vmul|vsub|vunit|regedit|regeditall|regeditalli|regediti|regmatch|regmatchi|regrab|regraball|regraballi|regrabi|regrep|regrepi|after|alphamin|alphamax|art|before|brackets|capstr|case|caseall|center|containsfansi|comp|decompose|decrypt|delete|edit|encrypt|escape|if|ifelse|lcstr|left|lit|ljust|merge|mid|ostrlen|pos|repeat|reverse|right|rjust|scramble|secure|space|spellnum|squish|strcat|strmatch|strinsert|stripansi|stripfansi|strlen|switch|switchall|table|tr|trim|ucstr|unsafe|wrap|ctitle|cwho|channels|clock|cflags|ilev|itext|inum|convsecs|convutcsecs|convtime|ctime|etimefmt|isdaylight|mtime|secs|msecs|starttime|time|timefmt|timestring|utctime|atrlock|clone|create|cook|dig|emit|lemit|link|oemit|open|pemit|remit|set|tel|wipe|zemit|fbcreate|fbdestroy|fbwrite|fbclear|fbcopy|fbcopyto|fbclip|fbdump|fbflush|fbhset|fblist|fbstats|qentries|qentry|play|ansi|break|c|asc|die|isdbref|isint|isnum|isletters|linecoords|localize|lnum|nameshort|null|objeval|r|rand|s|setq|setr|soundex|soundslike|valid|vchart|vchart2|vlabel|@@|bakerdays|bodybuild|box|capall|catalog|children|ctrailer|darttime|debt|detailbar|exploredroom|fansitoansi|fansitoxansi|fullbar|halfbar|isdarted|isnewbie|isword|lambda|lobjects|lplayers|lthings|lvexits|lvobjects|lvplayers|lvthings|newswrap|numsuffix|playerson|playersthisweek|randomad|randword|realrandword|replacechr|second|splitamount|strlenall|text|third|tofansi|totalac|unique|getaddressroom|listpropertycomm|listpropertyres|lotowner|lotrating|lotratingcount|lotvalue|boughtproduct|companyabb|companyicon|companylist|companyname|companyowners|companyvalue|employees|invested|productlist|productname|productowners|productrating|productratingcount|productsoldat|producttype|ratedproduct|soldproduct|topproducts|totalspentonproduct|totalstock|transfermoney|uniquebuyercount|uniqueproductsbought|validcompany|deletepicture|fbsave|getpicturesecurity|haspicture|listpictures|picturesize|replacecolor|rgbtocolor|savepicture|setpicturesecurity|showpicture|piechart|piechartlabel|createmaze|drawmaze|drawwireframe\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"constant.language\":t,keyword:e},\"identifier\"),i=\"(?:r|u|ur|R|U|UR|Ur|uR)?\",s=\"(?:(?:[1-9]\\\\d*)|(?:0))\",o=\"(?:0[oO]?[0-7]+)\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:0[bB][01]+)\",f=\"(?:\"+s+\"|\"+o+\"|\"+u+\"|\"+a+\")\",l=\"(?:[eE][+-]?\\\\d+)\",c=\"(?:\\\\.\\\\d+)\",h=\"(?:\\\\d+)\",p=\"(?:(?:\"+h+\"?\"+c+\")|(?:\"+h+\"\\\\.))\",d=\"(?:(?:\"+p+\"|\"+h+\")\"+l+\")\",v=\"(?:\"+d+\"|\"+p+\")\";this.$rules={start:[{token:\"variable\",regex:\"%[0-9]{1}\"},{token:\"variable\",regex:\"%q[0-9A-Za-z]{1}\"},{token:\"variable\",regex:\"%[a-zA-Z]{1}\"},{token:\"variable.language\",regex:\"%[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:\"(?:\"+v+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:v},{token:\"constant.numeric\",regex:f+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:f+\"\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|#|%|<<|>>|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.MushCodeRules=s}),define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\"+e+\")(?:\\\\s*)(?:#.*)?$\")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)}),define(\"ace/mode/mushcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mushcode_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mushcode_highlight_rules\").MushCodeRules,o=e(\"./folding/pythonic\").FoldMode,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o(\"\\\\:\"),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/mushcode\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-mysql.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/mysql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){function i(e){var t=e.start,n=e.escape;return{token:\"string.start\",regex:t,next:[{token:\"constant.language.escape\",regex:n},{token:\"string.end\",next:\"start\",regex:t},{defaultToken:\"string\"}]}}var e=\"alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat\",t=\"by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl\",n=\"charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee\",r=this.createKeywordMapper({\"support.function\":t,keyword:e,constant:\"false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat\",\"variable.language\":n},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"(?:-- |#).*$\"},i({start:'\"',escape:/\\\\[0'\"bnrtZ\\\\%_]?/}),i({start:\"'\",escape:/\\\\[0'\"bnrtZ\\\\%_]?/}),s.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"constant.class\",regex:\"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"constant.buildin\",regex:\"`[^`]*`\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,o),t.MysqlHighlightRules=u}),define(\"ace/mode/mysql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mysql_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./mysql_highlight_rules\").MysqlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=[\"--\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/mysql\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-nix.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/nix_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"true|false\",t=\"with|import|if|else|then|inherit\",n=\"let|in|rec\",r=this.createKeywordMapper({\"constant.language.nix\":e,\"keyword.control.nix\":t,\"keyword.declaration.nix\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:/#.*$/},{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"constant\",regex:\"<[^>]+>\"},{regex:\"(==|!=|<=?|>=?)\",token:[\"keyword.operator.comparison.nix\"]},{regex:\"((?:[+*/%-]|\\\\~)=)\",token:[\"keyword.operator.assignment.arithmetic.nix\"]},{regex:\"=\",token:\"keyword.operator.assignment.nix\"},{token:\"string\",regex:\"''\",next:\"qqdoc\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"string\",regex:'\"',push:\"qqstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{regex:\"}\",token:function(e,t,n){return n[1]&&n[1].charAt(0)==\"q\"?\"constant.language.escape\":\"text\"},next:\"pop\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqdoc:[{token:\"constant.language.escape\",regex:/\\$\\{/,push:\"start\"},{token:\"string\",regex:\"''\",next:\"pop\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:/\\$\\{/,push:\"start\"},{token:\"string\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:/\\$\\{/,push:\"start\"},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},this.normalizeRules()};r.inherits(s,i),t.NixHighlightRules=s}),define(\"ace/mode/nix\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/nix_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./nix_highlight_rules\").NixHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/nix\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-nsis.js",
    "content": "define(\"ace/mode/nsis_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.compiler.nsis\",regex:/^\\s*!(?:include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|pragma|finalize|getdllversion|gettlbversion|system|tempfile|warning|verbose|define|undef|insertmacro|macro|macroend|makensis|searchparse|searchreplace)\\b/,caseInsensitive:!0},{token:\"keyword.command.nsis\",regex:/^\\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEDllCharacteristics|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\\b/,caseInsensitive:!0},{token:\"keyword.control.nsis\",regex:/^\\s*!(?:ifdef|ifndef|if|ifmacrodef|ifmacrondef|else|endif)\\b/,caseInsensitive:!0},{token:\"keyword.plugin.nsis\",regex:/^\\s*\\w+::\\w+/,caseInsensitive:!0},{token:\"keyword.operator.comparison.nsis\",regex:/[!<>]?=|<>|<|>/},{token:\"support.function.nsis\",regex:/(?:\\b|^\\s*)(?:Function|FunctionEnd|Section|SectionEnd|SectionGroup|SectionGroupEnd|PageEx|PageExEnd)\\b/,caseInsensitive:!0},{token:\"support.library.nsis\",regex:/\\${[\\w\\.:-]+}/},{token:\"constant.nsis\",regex:/\\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\\b/,caseInsensitive:!0},{token:\"constant.library.nsis\",regex:/\\${(?:AtLeastServicePack|AtLeastWin7|AtLeastWin8|AtLeastWin10|AtLeastWin95|AtLeastWin98|AtLeastWin2000|AtLeastWin2003|AtLeastWin2008|AtLeastWin2008R2|AtLeastWinME|AtLeastWinNT4|AtLeastWinVista|AtLeastWinXP|AtMostServicePack|AtMostWin7|AtMostWin8|AtMostWin10|AtMostWin95|AtMostWin98|AtMostWin2000|AtMostWin2003|AtMostWin2008|AtMostWin2008R2|AtMostWinME|AtMostWinNT4|AtMostWinVista|AtMostWinXP|IsDomainController|IsNT|IsServer|IsServicePack|IsWin7|IsWin8|IsWin10|IsWin95|IsWin98|IsWin2000|IsWin2003|IsWin2008|IsWin2008R2|IsWinME|IsWinNT4|IsWinVista|IsWinXP)}/},{token:\"constant.language.boolean.true.nsis\",regex:/\\b(?:true|on)\\b/},{token:\"constant.language.boolean.false.nsis\",regex:/\\b(?:false|off)\\b/},{token:\"constant.language.option.nsis\",regex:/(?:\\b|^\\s*)(?:(?:un\\.)?components|(?:un\\.)?custom|(?:un\\.)?directory|(?:un\\.)?instfiles|(?:un\\.)?license|uninstConfirm|admin|all|auto|both|bottom|bzip2|current|force|hide|highest|ifdiff|ifnewer|lastused|leave|left|listonly|lzma|nevershow|none|normal|notset|right|show|silent|silentlog|textonly|top|try|user|Win10|Win7|Win8|WinVista|zlib)\\b/,caseInsensitive:!0},{token:\"constant.language.slash-option.nsis\",regex:/\\b\\/(?:a|BRANDING|CENTER|COMPONENTSONLYONCUSTOM|CUSTOMSTRING=|date|e|ENABLECANCEL|FILESONLY|file|FINAL|GLOBAL|gray|ifempty|ifndef|ignorecase|IMGID=|ITALIC|LANG=|NOCUSTOM|noerrors|NONFATAL|nonfatal|oname=|o|REBOOTOK|redef|RESIZETOFIT|r|SHORT|SILENT|SOLID|STRIKE|TRIM|UNDERLINE|utcdate|windows|x)\\b/,caseInsensitive:!0},{token:\"constant.numeric.nsis\",regex:/\\b(?:0(?:x|X)[0-9a-fA-F]+|[0-9]+(?:\\.[0-9]+)?)\\b/},{token:\"entity.name.function.nsis\",regex:/\\$\\([\\w\\.:-]+\\)/},{token:\"storage.type.function.nsis\",regex:/\\$\\w+/},{token:\"punctuation.definition.string.begin.nsis\",regex:/`/,push:[{token:\"punctuation.definition.string.end.nsis\",regex:/`/,next:\"pop\"},{token:\"constant.character.escape.nsis\",regex:/\\$\\\\./},{defaultToken:\"string.quoted.back.nsis\"}]},{token:\"punctuation.definition.string.begin.nsis\",regex:/\"/,push:[{token:\"punctuation.definition.string.end.nsis\",regex:/\"/,next:\"pop\"},{token:\"constant.character.escape.nsis\",regex:/\\$\\\\./},{defaultToken:\"string.quoted.double.nsis\"}]},{token:\"punctuation.definition.string.begin.nsis\",regex:/'/,push:[{token:\"punctuation.definition.string.end.nsis\",regex:/'/,next:\"pop\"},{token:\"constant.character.escape.nsis\",regex:/\\$\\\\./},{defaultToken:\"string.quoted.single.nsis\"}]},{token:[\"punctuation.definition.comment.nsis\",\"comment.line.nsis\"],regex:/(;|#)(.*$)/},{token:\"punctuation.definition.comment.nsis\",regex:/\\/\\*/,push:[{token:\"punctuation.definition.comment.nsis\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.nsis\"}]},{token:\"text\",regex:/(?:!include|!insertmacro)\\b/}]},this.normalizeRules()};s.metaData={comment:\"\\n\ttodo: - highlight functions\\n\t\",fileTypes:[\"nsi\",\"nsh\"],name:\"NSIS\",scopeName:\"source.nsis\"},r.inherits(s,i),t.NSISHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/nsis\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/nsis_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./nsis_highlight_rules\").NSISHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=[\";\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/nsis\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-objectivec.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),define(\"ace/mode/objectivec_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/c_cpp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./c_cpp_highlight_rules\"),o=s.c_cppHighlightRules,u=function(){var e=\"\\\\\\\\(?:[abefnrtv'\\\"?\\\\\\\\]|[0-3]\\\\d{1,2}|[4-7]\\\\d?|222|x[a-zA-Z0-9]+)\",t=[{regex:\"\\\\b_cmd\\\\b\",token:\"variable.other.selector.objc\"},{regex:\"\\\\b(?:self|super)\\\\b\",token:\"variable.language.objc\"}],n=new o,r=n.getRules();this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:[\"storage.type.objc\",\"punctuation.definition.storage.type.objc\",\"entity.name.type.objc\",\"text\",\"entity.other.inherited-class.objc\"],regex:\"(@)(interface|protocol)(?!.+;)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*:\\\\s*)([A-Za-z]+)\"},{token:[\"storage.type.objc\"],regex:\"(@end)\"},{token:[\"storage.type.objc\",\"entity.name.type.objc\",\"entity.other.inherited-class.objc\"],regex:\"(@implementation)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*?::\\\\s*(?:[A-Za-z][A-Za-z0-9]*))?\"},{token:\"string.begin.objc\",regex:'@\"',next:\"constant_NSString\"},{token:\"storage.type.objc\",regex:\"\\\\bid\\\\s*<\",next:\"protocol_list\"},{token:\"keyword.control.macro.objc\",regex:\"\\\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\\\b\"},{token:[\"punctuation.definition.keyword.objc\",\"keyword.control.exception.objc\"],regex:\"(@)(try|catch|finally|throw)\\\\b\"},{token:[\"punctuation.definition.keyword.objc\",\"keyword.other.objc\"],regex:\"(@)(defs|encode)\\\\b\"},{token:[\"storage.type.id.objc\",\"text\"],regex:\"(\\\\bid\\\\b)(\\\\s|\\\\n)?\"},{token:\"storage.type.objc\",regex:\"\\\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\\\b\"},{token:[\"punctuation.definition.storage.type.objc\",\"storage.type.objc\"],regex:\"(@)(class|protocol)\\\\b\"},{token:[\"punctuation.definition.storage.type.objc\",\"punctuation\"],regex:\"(@selector)(\\\\s*\\\\()\",next:\"selectors\"},{token:[\"punctuation.definition.storage.modifier.objc\",\"storage.modifier.objc\"],regex:\"(@)(synchronized|public|private|protected|package)\\\\b\"},{token:\"constant.language.objc\",regex:\"\\\\bYES|NO|Nil|nil\\\\b\"},{token:\"support.variable.foundation\",regex:\"\\\\bNSApp\\\\b\"},{token:[\"support.function.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\\\b)\"},{token:[\"support.function.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\\\b)\"},{token:[\"support.class.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\\\b)\"},{token:[\"support.class.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"},{token:[\"support.type.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"},{token:[\"support.class.quartz\"],regex:\"(?:\\\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\\\b)\"},{token:[\"support.type.quartz\"],regex:\"(?:\\\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\\\b)\"},{token:[\"support.type.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\\\b)\"},{token:[\"support.constant.cocoa\"],regex:\"(?:\\\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\\\b)\"},{token:[\"support.constant.notification.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\\\b)\"},{token:[\"support.constant.notification.cocoa\"],regex:\"(?:\\\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\\\b)\"},{token:[\"support.constant.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\\\b)\"},{token:[\"support.constant.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\\\b)\"},{token:\"support.function.C99.c\",regex:s.cFunctions},{token:n.getKeywords(),regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.section.scope.begin.objc\",regex:\"\\\\[\",next:\"bracketed_content\"},{token:\"meta.function.objc\",regex:\"^(?:-|\\\\+)\\\\s*\"}],constant_NSString:[{token:\"constant.character.escape.objc\",regex:e},{token:\"invalid.illegal.unknown-escape.objc\",regex:\"\\\\\\\\.\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"punctuation.definition.string.end\",regex:'\"',next:\"start\"}],protocol_list:[{token:\"punctuation.section.scope.end.objc\",regex:\">\",next:\"start\"},{token:\"support.other.protocol.objc\",regex:\"\\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\\b\"}],selectors:[{token:\"support.function.any-method.name-of-parameter.objc\",regex:\"\\\\b(?:[a-zA-Z_:][\\\\w]*)+\"},{token:\"punctuation\",regex:\"\\\\)\",next:\"start\"}],bracketed_content:[{token:\"punctuation.section.scope.end.objc\",regex:\"]\",next:\"start\"},{token:[\"support.function.any-method.objc\"],regex:\"(?:predicateWithFormat:| NSPredicate predicateWithFormat:)\",next:\"start\"},{token:\"support.function.any-method.objc\",regex:\"\\\\w+(?::|(?=]))\",next:\"start\"}],bracketed_strings:[{token:\"punctuation.section.scope.end.objc\",regex:\"]\",next:\"start\"},{token:\"keyword.operator.logical.predicate.cocoa\",regex:\"\\\\b(?:AND|OR|NOT|IN)\\\\b\"},{token:[\"invalid.illegal.unknown-method.objc\",\"punctuation.separator.arguments.objc\"],regex:\"\\\\b(\\\\w+)(:)\"},{regex:\"\\\\b(?:ALL|ANY|SOME|NONE)\\\\b\",token:\"constant.language.predicate.cocoa\"},{regex:\"\\\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\\\b\",token:\"constant.language.predicate.cocoa\"},{regex:\"\\\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\\\b\",token:\"keyword.operator.comparison.predicate.cocoa\"},{regex:\"\\\\bC(?:ASEINSENSITIVE|I)\\\\b\",token:\"keyword.other.modifier.predicate.cocoa\"},{regex:\"\\\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\\\b\",token:\"keyword.other.predicate.cocoa\"},{regex:e,token:\"constant.character.escape.objc\"},{regex:\"\\\\\\\\.\",token:\"invalid.illegal.unknown-escape.objc\"},{token:\"string\",regex:'[^\"\\\\\\\\]'},{token:\"punctuation.definition.string.end.objc\",regex:'\"',next:\"predicates\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],methods:[{token:\"meta.function.objc\",regex:\"(?=\\\\{|#)|;\",next:\"start\"}]};for(var u in r)this.$rules[u]?this.$rules[u].push&&this.$rules[u].push.apply(this.$rules[u],r[u]):this.$rules[u]=r[u];this.$rules.bracketed_content=this.$rules.bracketed_content.concat(this.$rules.start,t),this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(u,o),t.ObjectiveCHighlightRules=u}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/objectivec\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/objectivec_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./objectivec_highlight_rules\").ObjectiveCHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/objectivec\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-ocaml.js",
    "content": "define(\"ace/mode/ocaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|or|private|rec|sig|struct|then|to|try|type|val|virtual|when|while|with\",t=\"true|false\",n=\"abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|add_available_units|add_big_int|add_buffer|add_channel|add_char|add_initializer|add_int_big_int|add_interfaces|add_num|add_string|add_substitute|add_substring|alarm|allocated_bytes|allow_only|allow_unsafe_modules|always|append|appname_get|appname_set|approx_num_exp|approx_num_fix|arg|argv|arith_status|array|array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|chown|chr|chroot|classify_float|clear|clear_available_units|clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|close_out|close_out_noerr|close_process|close_process|close_process_full|close_process_in|close_process_out|close_subwindow|close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|combine|combine|command|compact|compare|compare_big_int|compare_num|complex32|complex64|concat|conj|connect|contains|contains_from|contents|copy|cos|cosh|count|count|counters|create|create_alarm|create_image|create_matrix|create_matrix|create_matrix|create_object|create_object_and_run_initializers|create_object_opt|create_process|create_process|create_process_env|create_process_env|create_table|current|current_dir_name|current_point|current_x|current_y|curveto|custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|error_message|escaped|establish_server|executable_name|execv|execve|execvp|execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|float|float32|float64|float_of_big_int|float_of_bits|float_of_int|float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|for_all|for_all2|force|force_newline|force_val|foreground|fork|format_of_string|formatter_of_buffer|formatter_of_out_channel|fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|genarray_of_array1|genarray_of_array2|genarray_of_array3|get|get_all_formatter_output_functions|get_approx_printing|get_copy|get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|get_formatter_output_functions|get_formatter_tag_functions|get_image|get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|global_replace|global_substitute|gmtime|green|grid|group_beginning|group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|marshal|match_beginning|match_end|matched_group|matched_string|max|max_array_length|max_big_int|max_elt|max_float|max_int|max_num|max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|output_char|output_string|output_value|over_max_boxes|pack|params|parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|power_big_int_positive_big_int|power_big_int_positive_int|power_int_positive_big_int|power_int_positive_int|power_num|pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|pp_get_all_formatter_output_functions|pp_get_ellipsis_text|pp_get_formatter_output_functions|pp_get_formatter_tag_functions|pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|pp_set_all_formatter_output_functions|pp_set_ellipsis_text|pp_set_formatter_out_channel|pp_set_formatter_output_functions|pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|print_bool|print_break|print_char|print_cut|print_endline|print_float|print_flush|print_if_newline|print_int|print_newline|print_space|print_stat|print_string|print_tab|print_tbreak|printf|prohibit|public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|regexp_string_case_fold|register|register_exception|rem|remember_mode|remove|remove_assoc|remove_assq|rename|replace|replace_first|replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|run_initializers|run_initializers_opt|scanf|search_backward|search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|set_all_formatter_output_functions|set_approx_printing|set_binary_mode_in|set_binary_mode_out|set_close_on_exec|set_close_on_exec|set_color|set_ellipsis_text|set_error_when_null_denominator|set_field|set_floating_precision|set_font|set_formatter_out_channel|set_formatter_output_functions|set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|str_formatter|string|string_after|string_before|string_match|string_of_big_int|string_of_bool|string_of_float|string_of_format|string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|sub_right|subset|subset|substitute_first|substring|succ|succ|succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|temp_file|text_size|time|time|time|timed_read|timed_write|times|times|tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|wait_timed_read|wait_timed_write|wait_write|waitpid|white|widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\"),i=\"(?:(?:[1-9]\\\\d*)|(?:0))\",s=\"(?:0[oO]?[0-7]+)\",o=\"(?:0[xX][\\\\dA-Fa-f]+)\",u=\"(?:0[bB][01]+)\",a=\"(?:\"+i+\"|\"+s+\"|\"+o+\"|\"+u+\")\",f=\"(?:[eE][+-]?\\\\d+)\",l=\"(?:\\\\.\\\\d+)\",c=\"(?:\\\\d+)\",h=\"(?:(?:\"+c+\"?\"+l+\")|(?:\"+c+\"\\\\.))\",p=\"(?:(?:\"+h+\"|\"+c+\")\"+f+\")\",d=\"(?:\"+p+\"|\"+h+\")\";this.$rules={start:[{token:\"comment\",regex:\"\\\\(\\\\*.*?\\\\*\\\\)\\\\s*?$\"},{token:\"comment\",regex:\"\\\\(\\\\*.*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"'.'\"},{token:\"string\",regex:'\"',next:\"qstring\"},{token:\"constant.numeric\",regex:\"(?:\"+d+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:d},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\)\",next:\"start\"},{defaultToken:\"comment\"}],qstring:[{token:\"string\",regex:'\"',next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(s,i),t.OcamlHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/ocaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ocaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ocaml_highlight_rules\").OcamlHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour,this.$outdent=new o};r.inherits(a,i);var f=/(?:[({[=:]|[-=]>|\\b(?:else|try|with))\\s*$/;(function(){this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,a=/^\\s*\\(\\*(.*)\\*\\)/;for(i=n;i<=r;i++)if(!a.test(t.getLine(i))){o=!1;break}var f=new u(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(a)[1]:\"(*\"+s+\"*)\")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return(!i.length||i[i.length-1].type!==\"comment\")&&e===\"start\"&&f.test(t)&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/ocaml\"}).call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-pascal.js",
    "content": "define(\"ace/mode/pascal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{caseInsensitive:!0,token:\"keyword.control.pascal\",regex:\"\\\\b(?:(absolute|abstract|all|and|and_then|array|as|asm|attribute|begin|bindable|case|class|const|constructor|destructor|div|do|do|else|end|except|export|exports|external|far|file|finalization|finally|for|forward|goto|if|implementation|import|in|inherited|initialization|interface|interrupt|is|label|library|mod|module|name|near|nil|not|object|of|only|operator|or|or_else|otherwise|packed|pow|private|program|property|protected|public|published|qualified|record|repeat|resident|restricted|segment|set|shl|shr|then|to|try|type|unit|until|uses|value|var|view|virtual|while|with|xor))\\\\b\"},{caseInsensitive:!0,token:[\"variable.pascal\",\"text\",\"storage.type.prototype.pascal\",\"entity.name.function.prototype.pascal\"],regex:\"\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?(?=(?:\\\\(.*?\\\\))?;\\\\s*(?:attribute|forward|external))\"},{caseInsensitive:!0,token:[\"variable.pascal\",\"text\",\"storage.type.function.pascal\",\"entity.name.function.pascal\"],regex:\"\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?\"},{token:\"constant.numeric.pascal\",regex:\"\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"punctuation.definition.comment.pascal\",regex:\"--.*$\",push_:[{token:\"comment.line.double-dash.pascal.one\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-dash.pascal.one\"}]},{token:\"punctuation.definition.comment.pascal\",regex:\"//.*$\",push_:[{token:\"comment.line.double-slash.pascal.two\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-slash.pascal.two\"}]},{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\(\\\\*\",push:[{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\*\\\\)\",next:\"pop\"},{defaultToken:\"comment.block.pascal.one\"}]},{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\{\",push:[{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\}\",next:\"pop\"},{defaultToken:\"comment.block.pascal.two\"}]},{token:\"punctuation.definition.string.begin.pascal\",regex:'\"',push:[{token:\"constant.character.escape.pascal\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.pascal\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.pascal\"}]},{token:\"punctuation.definition.string.begin.pascal\",regex:\"'\",push:[{token:\"constant.character.escape.apostrophe.pascal\",regex:\"''\"},{token:\"punctuation.definition.string.end.pascal\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.quoted.single.pascal\"}]},{token:\"keyword.operator\",regex:\"[+\\\\-;,/*%]|:=|=\"}]},this.normalizeRules()};r.inherits(s,i),t.PascalHighlightRules=s}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/pascal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pascal_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./pascal_highlight_rules\").PascalHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=[\"--\",\"//\"],this.blockComment=[{start:\"(*\",end:\"*)\"},{start:\"{\",end:\"}\"}],this.$id=\"ace/mode/pascal\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-perl.js",
    "content": "define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\",t=\"ARGV|ENV|INC|SIG\",n=\"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do\",r=this.createKeywordMapper({keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment.doc\",regex:\"^=(?:begin|item)\\\\b\",next:\"block_comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0x[0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"},{token:\"comment\",regex:\"#.*$\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}],block_comment:[{token:\"comment.doc\",regex:\"^=cut\\\\b\",next:\"start\"},{defaultToken:\"comment.doc\"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/perl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./perl_highlight_rules\").PerlHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u({start:\"^=(begin|item)\\\\b\",end:\"^=(cut)\\\\b\"}),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.blockComment=[{start:\"=begin\",end:\"=cut\",lineStartOnly:!0},{start:\"=item\",end:\"=cut\",lineStartOnly:!0}],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/perl\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-perl6.js",
    "content": "define(\"ace/mode/perl6_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"my|our|class|role|grammar|is|does|sub|method|submethod|try|default|when|if|elsif|else|unless|with|orwith|without|for|given|proceed|succeed|loop|while|until|repeat|module|use|need|import|require|unit|constant|enum|multi|return|has|token|rule|make|made|proto|state|augment|but|anon|supersede|let|subset|gather|returns|return-rw|temp|BEGIN|CHECK|INIT|END|CLOSE|ENTER|LEAVE|KEEP|UNDO|PRE|POST|FIRST|NEXT|LAST|CATCH|CONTROL|QUIT|DOC\",t=\"Any|Array|Associative|AST|atomicint|Attribute|Backtrace|Backtrace::Frame|Bag|Baggy|BagHash|Blob|Block|Bool|Buf|Callable|CallFrame|Cancellation|Capture|Channel|Code|compiler|Complex|ComplexStr|Cool|CurrentThreadScheduler|Cursor|Date|Dateish|DateTime|Distro|Duration|Encoding|Exception|Failure|FatRat|Grammar|Hash|HyperWhatever|Instant|Int|IntStr|IO|IO::ArgFiles|IO::CatHandle|IO::Handle|IO::Notification|IO::Path|IO::Path::Cygwin|IO::Path::QNX|IO::Path::Unix|IO::Path::Win32|IO::Pipe|IO::Socket|IO::Socket::Async|IO::Socket::INET|IO::Spec|IO::Spec::Cygwin|IO::Spec::QNX|IO::Spec::Unix|IO::Spec::Win32|IO::Special|Iterable|Iterator|Junction|Kernel|Label|List|Lock|Lock::Async|Macro|Map|Match|Metamodel::AttributeContainer|Metamodel::C3MRO|Metamodel::ClassHOW|Metamodel::EnumHOW|Metamodel::Finalization|Metamodel::MethodContainer|Metamodel::MROBasedMethodDispatch|Metamodel::MultipleInheritance|Metamodel::Naming|Metamodel::Primitives|Metamodel::PrivateMethodContainer|Metamodel::RoleContainer|Metamodel::Trusting|Method|Mix|MixHash|Mixy|Mu|NFC|NFD|NFKC|NFKD|Nil|Num|Numeric|NumStr|ObjAt|Order|Pair|Parameter|Perl|Pod::Block|Pod::Block::Code|Pod::Block::Comment|Pod::Block::Declarator|Pod::Block::Named|Pod::Block::Para|Pod::Block::Table|Pod::Heading|Pod::Item|Positional|PositionalBindFailover|Proc|Proc::Async|Promise|Proxy|PseudoStash|QuantHash|Range|Rat|Rational|RatStr|Real|Regex|Routine|Scalar|Scheduler|Semaphore|Seq|Set|SetHash|Setty|Signature|Slip|Stash|Str|StrDistance|Stringy|Sub|Submethod|Supplier|Supplier::Preserving|Supply|Systemic|Tap|Telemetry|Telemetry::Instrument::Thread|Telemetry::Instrument::Usage|Telemetry::Period|Telemetry::Sampler|Thread|ThreadPoolScheduler|UInt|Uni|utf8|Variable|Version|VM|Whatever|WhateverCode|WrapHandle|int|uint|num|str|int8|int16|int32|int64|uint8|uint16|uint32|uint64|long|longlong|num32|num64|size_t|bool|CArray|Pointer|Backtrace|Backtrace::Frame|Exception|Failure|X::AdHoc|X::Anon::Augment|X::Anon::Multi|X::Assignment::RO|X::Attribute::NoPackage|X::Attribute::Package|X::Attribute::Undeclared|X::Augment::NoSuchType|X::Bind|X::Bind::NativeType|X::Bind::Slice|X::Caller::NotDynamic|X::Channel::ReceiveOnClosed|X::Channel::SendOnClosed|X::Comp|X::Composition::NotComposable|X::Constructor::Positional|X::ControlFlow|X::ControlFlow::Return|X::DateTime::TimezoneClash|X::Declaration::Scope|X::Declaration::Scope::Multi|X::Does::TypeObject|X::Eval::NoSuchLang|X::Export::NameClash|X::IO|X::IO::Chdir|X::IO::Chmod|X::IO::Copy|X::IO::Cwd|X::IO::Dir|X::IO::DoesNotExist|X::IO::Link|X::IO::Mkdir|X::IO::Move|X::IO::Rename|X::IO::Rmdir|X::IO::Symlink|X::IO::Unlink|X::Inheritance::NotComposed|X::Inheritance::Unsupported|X::Method::InvalidQualifier|X::Method::NotFound|X::Method::Private::Permission|X::Method::Private::Unqualified|X::Mixin::NotComposable|X::NYI|X::NoDispatcher|X::Numeric::Real|X::OS|X::Obsolete|X::OutOfRange|X::Package::Stubbed|X::Parameter::Default|X::Parameter::MultipleTypeConstraints|X::Parameter::Placeholder|X::Parameter::Twigil|X::Parameter::WrongOrder|X::Phaser::Multiple|X::Phaser::PrePost|X::Placeholder::Block|X::Placeholder::Mainline|X::Pod|X::Proc::Async|X::Proc::Async::AlreadyStarted|X::Proc::Async::CharsOrBytes|X::Proc::Async::MustBeStarted|X::Proc::Async::OpenForWriting|X::Proc::Async::TapBeforeSpawn|X::Proc::Unsuccessful|X::Promise::CauseOnlyValidOnBroken|X::Promise::Vowed|X::Redeclaration|X::Role::Initialization|X::Seq::Consumed|X::Sequence::Deduction|X::Signature::NameClash|X::Signature::Placeholder|X::Str::Numeric|X::StubCode|X::Syntax|X::Syntax::Augment::WithoutMonkeyTyping|X::Syntax::Comment::Embedded|X::Syntax::Confused|X::Syntax::InfixInTermPosition|X::Syntax::Malformed|X::Syntax::Missing|X::Syntax::NegatedPair|X::Syntax::NoSelf|X::Syntax::Number::RadixOutOfRange|X::Syntax::P5|X::Syntax::Regex::Adverb|X::Syntax::Regex::SolitaryQuantifier|X::Syntax::Reserved|X::Syntax::Self::WithoutObject|X::Syntax::Signature::InvocantMarker|X::Syntax::Term::MissingInitializer|X::Syntax::UnlessElse|X::Syntax::Variable::Match|X::Syntax::Variable::Numeric|X::Syntax::Variable::Twigil|X::Temporal|X::Temporal::InvalidFormat|X::TypeCheck|X::TypeCheck::Assignment|X::TypeCheck::Binding|X::TypeCheck::Return|X::TypeCheck::Splice|X::Undeclared\",n=\"abs|abs2rel|absolute|accept|ACCEPTS|accessed|acos|acosec|acosech|acosh|acotan|acotanh|acquire|act|action|actions|add|add_attribute|add_enum_value|add_fallback|add_method|add_parent|add_private_method|add_role|add_trustee|adverb|after|all|allocate|allof|allowed|alternative-names|annotations|antipair|antipairs|any|anyof|app_lifetime|append|arch|archname|args|arity|asec|asech|asin|asinh|ASSIGN-KEY|ASSIGN-POS|assuming|ast|at|atan|atan2|atanh|AT-KEY|atomic-assign|atomic-dec-fetch|atomic-fetch|atomic-fetch-add|atomic-fetch-dec|atomic-fetch-inc|atomic-fetch-sub|atomic-inc-fetch|AT-POS|attributes|auth|await|backtrace|Bag|BagHash|base|basename|base-repeating|batch|BIND-KEY|BIND-POS|bind-stderr|bind-stdin|bind-stdout|bind-udp|bits|bless|block|bool-only|bounds|break|Bridge|broken|BUILD|build-date|bytes|cache|callframe|calling-package|CALL-ME|callsame|callwith|can|cancel|candidates|cando|canonpath|caps|caption|Capture|cas|catdir|categorize|categorize-list|catfile|catpath|cause|ceiling|cglobal|changed|Channel|chars|chdir|child|child-name|child-typename|chmod|chomp|chop|chr|chrs|chunks|cis|classify|classify-list|cleanup|clone|close|closed|close-stdin|code|codes|collate|column|comb|combinations|command|comment|compiler|Complex|compose|compose_type|composer|condition|config|configure_destroy|configure_type_checking|conj|connect|constraints|construct|contains|contents|copy|cos|cosec|cosech|cosh|cotan|cotanh|count|count-only|cpu-cores|cpu-usage|CREATE|create_type|cross|cue|curdir|curupdir|d|Date|DateTime|day|daycount|day-of-month|day-of-week|day-of-year|days-in-month|declaration|decode|decoder|deepmap|defined|DEFINITE|delayed|DELETE-KEY|DELETE-POS|denominator|desc|DESTROY|destroyers|devnull|did-you-mean|die|dir|dirname|dir-sep|DISTROnames|do|done|duckmap|dynamic|e|eager|earlier|elems|emit|enclosing|encode|encoder|encoding|end|ends-with|enum_from_value|enum_value_list|enum_values|enums|eof|EVAL|EVALFILE|exception|excludes-max|excludes-min|EXISTS-KEY|EXISTS-POS|exit|exitcode|exp|expected|explicitly-manage|expmod|extension|f|fail|fc|feature|file|filename|find_method|find_method_qualified|finish|first|flat|flatmap|flip|floor|flush|fmt|format|formatter|freeze|from|from-list|from-loop|from-posix|full|full-barrier|get|get_value|getc|gist|got|grab|grabpairs|grep|handle|handled|handles|hardware|has_accessor|head|headers|hh-mm-ss|hidden|hides|hour|how|hyper|id|illegal|im|in|indent|index|indices|indir|infinite|infix|install_method_cache|Instant|instead|int-bounds|interval|in-timezone|invalid-str|invert|invocant|IO|IO::Notification.watch-path|is_trusted|is_type|isa|is-absolute|is-hidden|is-initial-thread|is-int|is-lazy|is-leap-year|isNaN|is-prime|is-relative|is-routine|is-setting|is-win|item|iterator|join|keep|kept|KERNELnames|key|keyof|keys|kill|kv|kxxv|l|lang|last|lastcall|later|lazy|lc|leading|level|line|lines|link|listen|live|local|lock|log|log10|lookup|lsb|MAIN|match|max|maxpairs|merge|message|method_table|methods|migrate|min|minmax|minpairs|minute|misplaced|Mix|MixHash|mkdir|mode|modified|month|move|mro|msb|multiness|name|named|named_names|narrow|nativecast|native-descriptor|nativesizeof|new|new_type|new-from-daycount|new-from-pairs|next|nextcallee|next-handle|nextsame|nextwith|NFC|NFD|NFKC|NFKD|nl-in|nl-out|nodemap|none|norm|not|note|now|nude|numerator|Numeric|of|offset|offset-in-hours|offset-in-minutes|old|on-close|one|on-switch|open|opened|operation|optional|ord|ords|orig|os-error|osname|out-buffer|pack|package|package-kind|package-name|packages|pair|pairs|pairup|parameter|params|parent|parent-name|parents|parse|parse-base|parsefile|parse-names|parts|path|path-sep|payload|peer-host|peer-port|periods|perl|permutations|phaser|pick|pickpairs|pid|placeholder|plus|polar|poll|polymod|pop|pos|positional|posix|postfix|postmatch|precomp-ext|precomp-target|pred|prefix|prematch|prepend|print|printf|print-nl|print-to|private|private_method_table|proc|produce|Promise|prompt|protect|pull-one|push|push-all|push-at-least|push-exactly|push-until-lazy|put|qualifier-type|quit|r|race|radix|rand|range|raw|re|read|readchars|readonly|ready|Real|reallocate|reals|reason|rebless|receive|recv|redispatcher|redo|reduce|rel2abs|relative|release|rename|repeated|replacement|report|reserved|resolve|restore|result|resume|rethrow|reverse|right|rindex|rmdir|roles_to_compose|rolish|roll|rootdir|roots|rotate|rotor|round|roundrobin|routine-type|run|rwx|s|samecase|samemark|samewith|say|schedule-on|scheduler|scope|sec|sech|second|seek|self|send|Set|set_hidden|set_name|set_package|set_rw|set_value|SetHash|set-instruments|setup_finalization|shape|share|shell|shift|sibling|sigil|sign|signal|signals|signature|sin|sinh|sink|sink-all|skip|skip-at-least|skip-at-least-pull-one|skip-one|sleep|sleep-timer|sleep-until|Slip|slurp|slurp-rest|slurpy|snap|snapper|so|socket-host|socket-port|sort|source|source-package|spawn|SPEC|splice|split|splitdir|splitpath|sprintf|spurt|sqrt|squish|srand|stable|start|started|starts-with|status|stderr|stdout|sub_signature|subbuf|subbuf-rw|subname|subparse|subst|subst-mutate|substr|substr-eq|substr-rw|succ|sum|Supply|symlink|t|tail|take|take-rw|tan|tanh|tap|target|target-name|tc|tclc|tell|then|throttle|throw|timezone|tmpdir|to|today|toggle|to-posix|total|trailing|trans|tree|trim|trim-leading|trim-trailing|truncate|truncated-to|trusts|try_acquire|trying|twigil|type|type_captures|typename|uc|udp|uncaught_handler|unimatch|uniname|uninames|uniparse|uniprop|uniprops|unique|unival|univals|unlink|unlock|unpack|unpolar|unshift|unwrap|updir|USAGE|utc|val|value|values|VAR|variable|verbose-config|version|VMnames|volume|vow|w|wait|warn|watch|watch-path|week|weekday-of-month|week-number|week-year|WHAT|WHERE|WHEREFORE|WHICH|WHO|whole-second|WHY|wordcase|words|workaround|wrap|write|write-to|yada|year|yield|yyyy-mm-dd|z|zip|zip-latest|plan|done-testing|bail-out|todo|skip|skip-rest|diag|subtest|pass|flunk|ok|nok|cmp-ok|is-deeply|isnt|is-approx|like|unlike|use-ok|isa-ok|does-ok|can-ok|dies-ok|lives-ok|eval-dies-ok|eval-lives-ok|throws-like|fails-like|rw|required|native|repr|export|symbol\",r=\"pi|Inf|tau|time\",i=\"eq|ne|gt|lt|le|ge|div|gcd|lcm|leg|cmp|ff|fff|x|before|after|Z|X|and|or|andthen|notandthen|orelse|xor\",s=this.createKeywordMapper({keyword:e,\"storage.type\":t,\"constant.language\":r,\"support.function\":n,\"keyword.operator\":i},\"identifier\"),o=\"[a-zA-Z_][a-zA-Z_0-9:-]*\\\\b\",u={token:\"constant.numeric\",regex:\"0x[0-9a-fA-F]+\\\\b\"},a={token:\"constant.numeric\",regex:\"[+-.]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},f={token:\"constant.numeric\",regex:\"(?:\\\\d+_?\\\\d+)+\\\\b\"},l={token:\"constant.numeric\",regex:\"\\\\+?\\\\d+i\\\\b\"},c={token:\"constant.language.boolean\",regex:\"(?:True|False)\\\\b\"},h={token:\"constant.other\",regex:\"v[0-9](?:\\\\.[a-zA-Z0-9*])*\\\\b\"},p={token:s,regex:\"[a-zA-Z][\\\\:a-zA-Z0-9_-]*\\\\b\"},d={token:\"variable.language\",regex:\"[$@%&][?*!.]?[a-zA-Z0-9_-]+\\\\b\"},v={token:\"variable.language\",regex:\"\\\\$[/|!]?|@\\\\$/\"},m={token:\"keyword.operator\",regex:\"=|<|>|\\\\+|\\\\*|-|/|~|%|\\\\?|!|\\\\^|\\\\.|\\\\:|\\\\,|\\u00bb|\\u00ab|\\\\||\\\\&|\\u269b|\\u2218\"},g={token:\"constant.language\",regex:\"\\ud835\\udc52|\\u03c0|\\u03c4|\\u221e\"},y={token:\"string.quoted.single\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},b={token:\"string.quoted.single\",regex:\"[<](?:[a-zA-Z0-9 ])*[>]\"},w={token:\"string.regexp\",regex:\"[m|rx]?[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"};this.$rules={start:[{token:\"comment.block\",regex:\"#[`|=]\\\\(.*\\\\)\"},{token:\"comment.block\",regex:\"#[`|=]\\\\[.*\\\\]\"},{token:\"comment.doc\",regex:\"^=(?:begin)\\\\b\",next:\"block_comment\"},{token:\"string.unquoted\",regex:\"q[x|w]?\\\\:to/END/;\",next:\"qheredoc\"},{token:\"string.unquoted\",regex:\"qq[x|w]?\\\\:to/END/;\",next:\"qqheredoc\"},w,y,{token:\"string.quoted.double\",regex:'\"',next:\"qqstring\"},b,{token:[\"keyword\",\"text\",\"variable.module\"],regex:\"(use)(\\\\s+)((?:\"+o+\"\\\\.?)*)\"},u,a,f,l,c,h,p,d,v,m,g,{token:\"comment\",regex:\"#.*$\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"constant.language.escape\",regex:'\\\\\\\\(?:[nrtef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},d,v,{token:\"lparen\",regex:\"{\",next:\"qqinterpolation\"},{token:\"string.quoted.double\",regex:'\"',next:\"start\"},{defaultToken:\"string.quoted.double\"}],qqinterpolation:[u,a,f,l,c,h,p,d,v,m,g,y,w,{token:\"rparen\",regex:\"}\",next:\"qqstring\"}],block_comment:[{token:\"comment.doc\",regex:\"^=end +[a-zA-Z_0-9]*\",next:\"start\"},{defaultToken:\"comment.doc\"}],qheredoc:[{token:\"string.unquoted\",regex:\"END$\",next:\"start\"},{defaultToken:\"string.unquoted\"}],qqheredoc:[d,v,{token:\"lparen\",regex:\"{\",next:\"qqheredocinterpolation\"},{token:\"string.unquoted\",regex:\"END$\",next:\"start\"},{defaultToken:\"string.unquoted\"}],qqheredocinterpolation:[u,a,f,l,c,h,p,d,v,m,g,y,w,{token:\"rparen\",regex:\"}\",next:\"qqheredoc\"}]}};r.inherits(s,i),t.Perl6HighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/perl6\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl6_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./perl6_highlight_rules\").Perl6HighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u({start:\"^=(begin)\\\\b\",end:\"^=(end)\\\\b\"}),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.blockComment=[{start:\"=begin\",end:\"=end\",lineStartOnly:!0},{start:\"=item\",end:\"=end\",lineStartOnly:!0}],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/perl6\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/perl6\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-pgsql.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\",t=\"ARGV|ENV|INC|SIG\",n=\"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do\",r=this.createKeywordMapper({keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment.doc\",regex:\"^=(?:begin|item)\\\\b\",next:\"block_comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0x[0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"},{token:\"comment\",regex:\"#.*$\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}],block_comment:[{token:\"comment.doc\",regex:\"^=cut\\\\b\",next:\"start\"},{defaultToken:\"comment.doc\"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"variable.language\":\"self|cls\",\"constant.language\":t,keyword:e},\"identifier\"),i=\"[uU]?\",s=\"[rR]\",o=\"[fF]\",u=\"(?:[rR][fF]|[fF][rR])\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:s+'\"{3}',next:\"rawqqstring3\"},{token:\"string\",regex:s+'\"(?=.)',next:\"rawqqstring\"},{token:\"string\",regex:s+\"'{3}\",next:\"rawqstring3\"},{token:\"string\",regex:s+\"'(?=.)\",next:\"rawqstring\"},{token:\"string\",regex:o+'\"{3}',next:\"fqqstring3\"},{token:\"string\",regex:o+'\"(?=.)',next:\"fqqstring\"},{token:\"string\",regex:o+\"'{3}\",next:\"fqstring3\"},{token:\"string\",regex:o+\"'(?=.)\",next:\"fqstring\"},{token:\"string\",regex:u+'\"{3}',next:\"rfqqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"rfqqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"rfqstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"rfqstring\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"punctuation\",regex:\",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"},{include:\"constants\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],rawqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],rawqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],fqqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"fqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rfqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring:[{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstringParRules:[{token:\"paren.lparen\",regex:\"[\\\\[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)]\"},{token:\"string\",regex:\"\\\\s+\"},{token:\"string\",regex:\"'(.)*'\"},{token:\"string\",regex:'\"(.)*\"'},{token:\"function.support\",regex:\"(!s|!r|!a)\"},{include:\"constants\"},{token:\"paren.rparen\",regex:\"}\",next:\"pop\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"}],constants:[{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:[\"punctuation\",\"function.support\"],regex:\"(\\\\.)([a-zA-Z_]+)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"text\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/pgsql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/perl_highlight_rules\",\"ace/mode/python_highlight_rules\",\"ace/mode/json_highlight_rules\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./perl_highlight_rules\").PerlHighlightRules,a=e(\"./python_highlight_rules\").PythonHighlightRules,f=e(\"./json_highlight_rules\").JsonHighlightRules,l=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,c=function(){var e=\"abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|anyrange|array|as|asc|assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|create|cross|cstring|csv|current|current_catalog|current_date|current_role|current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|date|daterange|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|event|event_trigger|except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|int4|int4range|int8|int8range|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|json|key|label|language|language_handler|large|last|lateral|lc_collate|lc_ctype|leading|leakproof|least|left|level|like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|match|materialized|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|numrange|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|procedural|procedure|program|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|references|refresh|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|simple|smallint|smgr|snapshot|some|stable|standalone|start|statement|statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsrange|tstzrange|tsvector|txid_snapshot|type|types|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone\",t=\"RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|acldefault|aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anyrange_in|anyrange_out|anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_remove|array_replace|array_send|array_smaller|array_to_json|array_to_string|array_typanalyze|array_upper|arraycontained|arraycontains|arraycontjoinsel|arraycontsel|arrayoverlap|ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcanreturn|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|btfloat4sortsupport|btfloat84cmp|btfloat8cmp|btfloat8sortsupport|btgetbitmap|btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint2sortsupport|btint42cmp|btint48cmp|btint4cmp|btint4sortsupport|btint82cmp|btint84cmp|btint8cmp|btint8sortsupport|btmarkpos|btnamecmp|btnamesortsupport|btoidcmp|btoidsortsupport|btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|bytea_string_agg_finalfn|bytea_string_agg_transfn|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|date_sortsupport|date_trunc|daterange|daterange_canonical|daterange_subdiff|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|dsynonym_lexize|dtrunc|elem_contained_by_range|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|euc_tw_to_utf8|event_trigger_in|event_trigger_out|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|has_function_privilege|has_language_privilege|has_schema_privilege|has_sequence_privilege|has_server_privilege|has_table_privilege|has_tablespace_privilege|has_type_privilege|hash_aclitem|hash_array|hash_numeric|hash_range|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4range|int4range_canonical|int4range_subdiff|int4recv|int4send|int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|int8range|int8range_canonical|int8range_subdiff|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_transform|interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isempty|isfinite|ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|json_agg|json_agg_finalfn|json_agg_transfn|json_array_element|json_array_element_text|json_array_elements|json_array_length|json_each|json_each_text|json_extract_path|json_extract_path_op|json_extract_path_text|json_extract_path_text_op|json_in|json_object_field|json_object_field_text|json_object_keys|json_out|json_populate_record|json_populate_recordset|json_recv|json_send|justify_days|justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|lo_lseek64|lo_open|lo_tell|lo_tell64|lo_truncate|lo_truncate64|lo_unlink|log|loread|lower|lower_inc|lower_inf|lowrite|lpad|lseg|lseg_center|lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_and|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_not|macaddr_or|macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_transform|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|numrange|numrange_subdiff|obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|pg_available_extension_versions|pg_available_extensions|pg_backend_pid|pg_backup_start_time|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_for|pg_collation_is_visible|pg_column_is_updatable|pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|pg_event_trigger_dropped_objects|pg_export_snapshot|pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|pg_get_multixact_members|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_identify_object|pg_indexes_size|pg_is_in_backup|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|pg_opfamily_is_visible|pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|pg_relation_is_updatable|pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|pg_stat_get_buf_written_backend|pg_stat_get_checkpoint_sync_time|pg_stat_get_checkpoint_write_time|pg_stat_get_db_blk_read_time|pg_stat_get_db_blk_write_time|pg_stat_get_db_blocks_fetched|pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|pg_stat_get_db_conflict_tablespace|pg_stat_get_db_deadlocks|pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|pg_stat_get_db_temp_bytes|pg_stat_get_db_temp_files|pg_stat_get_db_tuples_deleted|pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|pg_stat_get_function_calls|pg_stat_get_function_self_time|pg_stat_get_function_total_time|pg_stat_get_last_analyze_time|pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_total_time|pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|pg_tablespace_databases|pg_tablespace_location|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|pg_trigger_depth|pg_try_advisory_lock|pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|pg_xlog_location_diff|pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|range_adjacent|range_after|range_before|range_cmp|range_contained_by|range_contains|range_contains_elem|range_eq|range_ge|range_gist_compress|range_gist_consistent|range_gist_decompress|range_gist_penalty|range_gist_picksplit|range_gist_same|range_gist_union|range_gt|range_in|range_intersect|range_le|range_lt|range_minus|range_ne|range_out|range_overlaps|range_overleft|range_overright|range_recv|range_send|range_typanalyze|range_union|rangesel|rank|record_eq|record_ge|record_gt|record_in|record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|row_to_json|rpad|rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|smgrout|spg_kd_choose|spg_kd_config|spg_kd_inner_consistent|spg_kd_picksplit|spg_quad_choose|spg_quad_config|spg_quad_inner_consistent|spg_quad_leaf_consistent|spg_quad_picksplit|spg_range_quad_choose|spg_range_quad_config|spg_range_quad_inner_consistent|spg_range_quad_leaf_consistent|spg_range_quad_picksplit|spg_text_choose|spg_text_config|spg_text_inner_consistent|spg_text_leaf_consistent|spg_text_picksplit|spgbeginscan|spgbuild|spgbuildempty|spgbulkdelete|spgcanreturn|spgcostestimate|spgendscan|spggetbitmap|spggettuple|spginsert|spgmarkpos|spgoptions|spgrescan|spgrestrpos|spgvacuumcleanup|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|time_smaller|time_transform|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|timestamp_sortsupport|timestamp_transform|timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|to_json|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsrange|tsrange_subdiff|tstzrange|tstzrange_subdiff|tsvector_cmp|tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|upper|upper_inc|upper_inf|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|varbit_recv|varbit_send|varbit_transform|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|varbitlt|varbitne|varbittypmodin|varbittypmodout|varchar_transform|varcharin|varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists\",n=this.createKeywordMapper({\"support.function\":t,keyword:e},\"identifier\",!0),r=[{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"variable.language\",regex:'\".*?\"'},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:n,regex:\"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|~=|~>=~|~>~|~~|~~\\\\*\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}];this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"keyword.statementBegin\",regex:\"[a-zA-Z]+\",next:\"statement\"},{token:\"support.buildin\",regex:\"^\\\\\\\\[\\\\S]+.*$\"}],statement:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentStatement\"},{token:\"statementEnd\",regex:\";\",next:\"start\"},{token:\"string\",regex:\"\\\\$perl\\\\$\",next:\"perl-start\"},{token:\"string\",regex:\"\\\\$python\\\\$\",next:\"python-start\"},{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"json-start\"},{token:\"string\",regex:\"\\\\$(js|javascript)\\\\$\",next:\"javascript-start\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$$\",next:\"dollarSql\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarStatementString\"}].concat(r),dollarSql:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentDollarSql\"},{token:\"string\",regex:\"^\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSqlString\"}].concat(r),comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],commentStatement:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"statement\"},{defaultToken:\"comment\"}],commentDollarSql:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"dollarSql\"},{defaultToken:\"comment\"}],dollarStatementString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\".+\"}],dollarSqlString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSql\"},{token:\"string\",regex:\".+\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.embedRules(u,\"perl-\",[{token:\"string\",regex:\"\\\\$perl\\\\$\",next:\"statement\"}]),this.embedRules(a,\"python-\",[{token:\"string\",regex:\"\\\\$python\\\\$\",next:\"statement\"}]),this.embedRules(f,\"json-\",[{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"statement\"}]),this.embedRules(l,\"javascript-\",[{token:\"string\",regex:\"\\\\$(js|javascript)\\\\$\",next:\"statement\"}])};r.inherits(c,o),t.PgsqlHighlightRules=c}),define(\"ace/mode/pgsql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pgsql_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./pgsql_highlight_rules\").PgsqlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){return e==\"start\"||e==\"keyword.statementEnd\"?\"\":this.$getIndent(t)},this.$id=\"ace/mode/pgsql\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-php.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(){var e=s,t=i.arrayToMap(\"abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|mysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|mysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|mysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|mysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|mysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|mysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|mysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|mysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|mysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|mysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|mysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|mysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|mysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|mysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|mysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|mysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|mysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|mysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type\".split(\"|\")),n=i.arrayToMap(\"abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|public|static|switch|throw|trait|try|use|var|while|xor|yield\".split(\"|\")),r=i.arrayToMap(\"__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset\".split(\"|\")),o=i.arrayToMap(\"true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__\".split(\"|\")),u=i.arrayToMap(\"$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv\".split(\"|\")),a=i.arrayToMap(\"key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase\".split(\"|\")),f=i.arrayToMap(\"cfunction|old_function\".split(\"|\")),l=i.arrayToMap([]);this.$rules={start:[{token:\"comment\",regex:/(?:#|\\/\\/)(?:[^?]|\\?[^>])*/},e.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language\",regex:\"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"},{token:[\"keyword\",\"text\",\"support.class\"],regex:\"\\\\b(new)(\\\\s+)(\\\\w+)\"},{token:[\"support.class\",\"keyword.operator\"],regex:\"\\\\b(\\\\w+)(::)\"},{token:\"constant.language\",regex:\"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"},{token:function(e){return n.hasOwnProperty(e)?\"keyword\":o.hasOwnProperty(e)?\"constant.language\":u.hasOwnProperty(e)?\"variable.language\":l.hasOwnProperty(e)?\"invalid.illegal\":t.hasOwnProperty(e)?\"support.function\":e==\"debugger\"?\"invalid.deprecated\":e.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/)?\"variable\":\"identifier\"},regex:/[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{onMatch:function(e,t,n){e=e.substr(3);if(e[0]==\"'\"||e[0]=='\"')e=e.slice(1,-1);return n.unshift(this.next,e),\"markup.list\"},regex:/<<<(?:\\w+|'\\w+'|\"\\w+\")$/,next:\"heredoc\"},{token:\"keyword.operator\",regex:\"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:/[,;]/},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],heredoc:[{onMatch:function(e,t,n){return n[1]!=e?\"string\":(n.shift(),n.shift(),\"markup.list\")},regex:\"^\\\\w+(?=;?$)\",next:\"start\"},{token:\"string\",regex:\".*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"constant.language.escape\",regex:'\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:\"variable\",regex:/\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/},{token:\"variable\",regex:/\\$\\{[^\"\\}]+\\}?/},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string\",regex:\"'\",next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(a,o);var f=function(){u.call(this);var e=[{token:\"support.php_tag\",regex:\"<\\\\?(?:php|=)?\",push:\"php-start\"}],t=[{token:\"support.php_tag\",regex:\"\\\\?>\",next:\"pop\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(a,\"php-\",t,[\"start\"]),this.normalizeRules()};r.inherits(f,u),t.PhpHighlightRules=f,t.PhpLangHighlightRules=a}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function s(e,t){return e.type.lastIndexOf(t)>-1}var r={abs:[\"int abs(int number)\",\"Return the absolute value of the number\"],acos:[\"float acos(float number)\",\"Return the arc cosine of the number in radians\"],acosh:[\"float acosh(float number)\",\"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"],addGlob:[\"bool addGlob(string pattern[,int flags [, array options]])\",\"Add files matching the glob pattern. See php's glob for the pattern syntax.\"],addPattern:[\"bool addPattern(string pattern[, string path [, array options]])\",\"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"],addcslashes:[\"string addcslashes(string str, string charlist)\",\"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"],addslashes:[\"string addslashes(string str)\",\"Escapes single quote, double quotes and backslash characters in a string with backslashes\"],apache_child_terminate:[\"bool apache_child_terminate(void)\",\"Terminate apache process after this request\"],apache_get_modules:[\"array apache_get_modules(void)\",\"Get a list of loaded Apache modules\"],apache_get_version:[\"string apache_get_version(void)\",\"Fetch Apache version\"],apache_getenv:[\"bool apache_getenv(string variable [, bool walk_to_top])\",\"Get an Apache subprocess_env variable\"],apache_lookup_uri:[\"object apache_lookup_uri(string URI)\",\"Perform a partial request of the given URI to obtain information about it\"],apache_note:[\"string apache_note(string note_name [, string note_value])\",\"Get and set Apache request notes\"],apache_request_auth_name:[\"string apache_request_auth_name()\",\"\"],apache_request_auth_type:[\"string apache_request_auth_type()\",\"\"],apache_request_discard_request_body:[\"long apache_request_discard_request_body()\",\"\"],apache_request_err_headers_out:[\"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all headers that go out in case of an error or a subrequest\"],apache_request_headers:[\"array apache_request_headers(void)\",\"Fetch all HTTP request headers\"],apache_request_headers_in:[\"array apache_request_headers_in()\",\"* fetch all incoming request headers\"],apache_request_headers_out:[\"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all outgoing request headers\"],apache_request_is_initial_req:[\"bool apache_request_is_initial_req()\",\"\"],apache_request_log_error:[\"boolean apache_request_log_error(string message, [long facility])\",\"\"],apache_request_meets_conditions:[\"long apache_request_meets_conditions()\",\"\"],apache_request_remote_host:[\"int apache_request_remote_host([int type])\",\"\"],apache_request_run:[\"long apache_request_run()\",\"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"],apache_request_satisfies:[\"long apache_request_satisfies()\",\"\"],apache_request_server_port:[\"int apache_request_server_port()\",\"\"],apache_request_set_etag:[\"void apache_request_set_etag()\",\"\"],apache_request_set_last_modified:[\"void apache_request_set_last_modified()\",\"\"],apache_request_some_auth_required:[\"bool apache_request_some_auth_required()\",\"\"],apache_request_sub_req_lookup_file:[\"object apache_request_sub_req_lookup_file(string file)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_sub_req_lookup_uri:[\"object apache_request_sub_req_lookup_uri(string uri)\",\"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"],apache_request_sub_req_method_uri:[\"object apache_request_sub_req_method_uri(string method, string uri)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_update_mtime:[\"long apache_request_update_mtime([int dependency_mtime])\",\"\"],apache_reset_timeout:[\"bool apache_reset_timeout(void)\",\"Reset the Apache write timer\"],apache_response_headers:[\"array apache_response_headers(void)\",\"Fetch all HTTP response headers\"],apache_setenv:[\"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\"Set an Apache subprocess_env variable\"],array_change_key_case:[\"array array_change_key_case(array input [, int case=CASE_LOWER])\",\"Retuns an array with all string keys lowercased [or uppercased]\"],array_chunk:[\"array array_chunk(array input, int size [, bool preserve_keys])\",\"Split array into chunks\"],array_combine:[\"array array_combine(array keys, array values)\",\"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"],array_count_values:[\"array array_count_values(array input)\",\"Return the value as key and the frequency of that value in input as value\"],array_diff:[\"array array_diff(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"],array_diff_assoc:[\"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"],array_diff_key:[\"array array_diff_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"],array_diff_uassoc:[\"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"],array_diff_ukey:[\"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"],array_fill:[\"array array_fill(int start_key, int num, mixed val)\",\"Create an array containing num elements starting with index start_key each initialized to val\"],array_fill_keys:[\"array array_fill_keys(array keys, mixed val)\",\"Create an array using the elements of the first parameter as keys each initialized to val\"],array_filter:[\"array array_filter(array input [, mixed callback])\",\"Filters elements from the array via the callback.\"],array_flip:[\"array array_flip(array input)\",\"Return array with key <-> value flipped\"],array_intersect:[\"array array_intersect(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments\"],array_intersect_assoc:[\"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"],array_intersect_key:[\"array array_intersect_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"],array_intersect_uassoc:[\"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"],array_intersect_ukey:[\"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"],array_key_exists:[\"bool array_key_exists(mixed key, array search)\",\"Checks if the given key or index exists in the array\"],array_keys:[\"array array_keys(array input [, mixed search_value[, bool strict]])\",\"Return just the keys from the input array, optionally only for the specified search_value\"],array_map:[\"array array_map(mixed callback, array input1 [, array input2 ,...])\",\"Applies the callback to the elements in given arrays.\"],array_merge:[\"array array_merge(array arr1, array arr2 [, array ...])\",\"Merges elements from passed arrays into one array\"],array_merge_recursive:[\"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\"Recursively merges elements from passed arrays into one array\"],array_multisort:[\"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"],array_pad:[\"array array_pad(array input, int pad_size, mixed pad_value)\",\"Returns a copy of input array padded with pad_value to size pad_size\"],array_pop:[\"mixed array_pop(array stack)\",\"Pops an element off the end of the array\"],array_product:[\"mixed array_product(array input)\",\"Returns the product of the array entries\"],array_push:[\"int array_push(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the end of the array\"],array_rand:[\"mixed array_rand(array input [, int num_req])\",\"Return key/keys for random entry/entries in the array\"],array_reduce:[\"mixed array_reduce(array input, mixed callback [, mixed initial])\",\"Iteratively reduce the array to a single value via the callback.\"],array_replace:[\"array array_replace(array arr1, array arr2 [, array ...])\",\"Replaces elements from passed arrays into one array\"],array_replace_recursive:[\"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\"Recursively replaces elements from passed arrays into one array\"],array_reverse:[\"array array_reverse(array input [, bool preserve keys])\",\"Return input as a new array with the order of the entries reversed\"],array_search:[\"mixed array_search(mixed needle, array haystack [, bool strict])\",\"Searches the array for a given value and returns the corresponding key if successful\"],array_shift:[\"mixed array_shift(array stack)\",\"Pops an element off the beginning of the array\"],array_slice:[\"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\"Returns elements specified by offset and length\"],array_splice:[\"array array_splice(array input, int offset [, int length [, array replacement]])\",\"Removes the elements designated by offset and length and replace them with supplied array\"],array_sum:[\"mixed array_sum(array input)\",\"Returns the sum of the array entries\"],array_udiff:[\"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"],array_udiff_assoc:[\"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"],array_udiff_uassoc:[\"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"],array_uintersect:[\"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"],array_uintersect_assoc:[\"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"],array_uintersect_uassoc:[\"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"],array_unique:[\"array array_unique(array input [, int sort_flags])\",\"Removes duplicate values from array\"],array_unshift:[\"int array_unshift(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the beginning of the array\"],array_values:[\"array array_values(array input)\",\"Return just the values from the input array\"],array_walk:[\"bool array_walk(array input, string funcname [, mixed userdata])\",\"Apply a user function to every member of an array\"],array_walk_recursive:[\"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\"Apply a user function recursively to every member of an array\"],arsort:[\"bool arsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order and maintain index association\"],asin:[\"float asin(float number)\",\"Returns the arc sine of the number in radians\"],asinh:[\"float asinh(float number)\",\"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"],asort:[\"bool asort(array &array_arg [, int sort_flags])\",\"Sort an array and maintain index association\"],assert:[\"int assert(string|bool assertion)\",\"Checks if assertion is false\"],assert_options:[\"mixed assert_options(int what [, mixed value])\",\"Set/get the various assert flags\"],atan:[\"float atan(float number)\",\"Returns the arc tangent of the number in radians\"],atan2:[\"float atan2(float y, float x)\",\"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"],atanh:[\"float atanh(float number)\",\"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"],attachIterator:[\"void attachIterator(Iterator iterator[, mixed info])\",\"Attach a new iterator\"],base64_decode:[\"string base64_decode(string str[, bool strict])\",\"Decodes string using MIME base64 algorithm\"],base64_encode:[\"string base64_encode(string str)\",\"Encodes string using MIME base64 algorithm\"],base_convert:[\"string base_convert(string number, int frombase, int tobase)\",\"Converts a number in a string from any base <= 36 to any base <= 36\"],basename:[\"string basename(string path [, string suffix])\",\"Returns the filename component of the path\"],bcadd:[\"string bcadd(string left_operand, string right_operand [, int scale])\",\"Returns the sum of two arbitrary precision numbers\"],bccomp:[\"int bccomp(string left_operand, string right_operand [, int scale])\",\"Compares two arbitrary precision numbers\"],bcdiv:[\"string bcdiv(string left_operand, string right_operand [, int scale])\",\"Returns the quotient of two arbitrary precision numbers (division)\"],bcmod:[\"string bcmod(string left_operand, string right_operand)\",\"Returns the modulus of the two arbitrary precision operands\"],bcmul:[\"string bcmul(string left_operand, string right_operand [, int scale])\",\"Returns the multiplication of two arbitrary precision numbers\"],bcpow:[\"string bcpow(string x, string y [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another\"],bcpowmod:[\"string bcpowmod(string x, string y, string mod [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"],bcscale:[\"bool bcscale(int scale)\",\"Sets default scale parameter for all bc math functions\"],bcsqrt:[\"string bcsqrt(string operand [, int scale])\",\"Returns the square root of an arbitray precision number\"],bcsub:[\"string bcsub(string left_operand, string right_operand [, int scale])\",\"Returns the difference between two arbitrary precision numbers\"],bin2hex:[\"string bin2hex(string data)\",\"Converts the binary representation of data to hex\"],bind_textdomain_codeset:[\"string bind_textdomain_codeset (string domain, string codeset)\",\"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"],bindec:[\"int bindec(string binary_number)\",\"Returns the decimal equivalent of the binary number\"],bindtextdomain:[\"string bindtextdomain(string domain_name, string dir)\",\"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"],birdstep_autocommit:[\"bool birdstep_autocommit(int index)\",\"\"],birdstep_close:[\"bool birdstep_close(int id)\",\"\"],birdstep_commit:[\"bool birdstep_commit(int index)\",\"\"],birdstep_connect:[\"int birdstep_connect(string server, string user, string pass)\",\"\"],birdstep_exec:[\"int birdstep_exec(int index, string exec_str)\",\"\"],birdstep_fetch:[\"bool birdstep_fetch(int index)\",\"\"],birdstep_fieldname:[\"string birdstep_fieldname(int index, int col)\",\"\"],birdstep_fieldnum:[\"int birdstep_fieldnum(int index)\",\"\"],birdstep_freeresult:[\"bool birdstep_freeresult(int index)\",\"\"],birdstep_off_autocommit:[\"bool birdstep_off_autocommit(int index)\",\"\"],birdstep_result:[\"mixed birdstep_result(int index, mixed col)\",\"\"],birdstep_rollback:[\"bool birdstep_rollback(int index)\",\"\"],bzcompress:[\"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\"Compresses a string into BZip2 encoded data\"],bzdecompress:[\"string bzdecompress(string source [, int small])\",\"Decompresses BZip2 compressed data\"],bzerrno:[\"int bzerrno(resource bz)\",\"Returns the error number\"],bzerror:[\"array bzerror(resource bz)\",\"Returns the error number and error string in an associative array\"],bzerrstr:[\"string bzerrstr(resource bz)\",\"Returns the error string\"],bzopen:[\"resource bzopen(string|int file|fp, string mode)\",\"Opens a new BZip2 stream\"],bzread:[\"string bzread(resource bz[, int length])\",\"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"],cal_days_in_month:[\"int cal_days_in_month(int calendar, int month, int year)\",\"Returns the number of days in a month for a given year and calendar\"],cal_from_jd:[\"array cal_from_jd(int jd, int calendar)\",\"Converts from Julian Day Count to a supported calendar and return extended information\"],cal_info:[\"array cal_info([int calendar])\",\"Returns information about a particular calendar\"],cal_to_jd:[\"int cal_to_jd(int calendar, int month, int day, int year)\",\"Converts from a supported calendar to Julian Day Count\"],call_user_func:[\"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],call_user_func_array:[\"mixed call_user_func_array(string function_name, array parameters)\",\"Call a user function which is the first parameter with the arguments contained in array\"],call_user_method:[\"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\"Call a user method on a specific object or class\"],call_user_method_array:[\"mixed call_user_method_array(string method_name, mixed object, array params)\",\"Call a user method on a specific object or class using a parameter array\"],ceil:[\"float ceil(float number)\",\"Returns the next highest integer value of the number\"],chdir:[\"bool chdir(string directory)\",\"Change the current directory\"],checkdate:[\"bool checkdate(int month, int day, int year)\",\"Returns true(1) if it is a valid date in gregorian calendar\"],chgrp:[\"bool chgrp(string filename, mixed group)\",\"Change file group\"],chmod:[\"bool chmod(string filename, int mode)\",\"Change file mode\"],chown:[\"bool chown (string filename, mixed user)\",\"Change file owner\"],chr:[\"string chr(int ascii)\",\"Converts ASCII code to a character\"],chroot:[\"bool chroot(string directory)\",\"Change root directory\"],chunk_split:[\"string chunk_split(string str [, int chunklen [, string ending]])\",\"Returns split line\"],class_alias:[\"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\"Creates an alias for user defined class\"],class_exists:[\"bool class_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],class_implements:[\"array class_implements(mixed what [, bool autoload ])\",\"Return all classes and interfaces implemented by SPL\"],class_parents:[\"array class_parents(object instance [, boolean autoload = true])\",\"Return an array containing the names of all parent classes\"],clearstatcache:[\"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\"Clear file stat cache\"],closedir:[\"void closedir([resource dir_handle])\",\"Close directory connection identified by the dir_handle\"],closelog:[\"bool closelog(void)\",\"Close connection to system logger\"],collator_asort:[\"bool collator_asort( Collator $coll, array(string) $arr )\",\"* Sort array using specified collator, maintaining index association.\"],collator_compare:[\"int collator_compare( Collator $coll, string $str1, string $str2 )\",\"* Compare two strings.\"],collator_create:[\"Collator collator_create( string $locale )\",\"* Create collator.\"],collator_get_attribute:[\"int collator_get_attribute( Collator $coll, int $attr )\",\"* Get collation attribute value.\"],collator_get_error_code:[\"int collator_get_error_code( Collator $coll )\",\"* Get collator's last error code.\"],collator_get_error_message:[\"string collator_get_error_message( Collator $coll )\",\"* Get text description for collator's last error code.\"],collator_get_locale:[\"string collator_get_locale( Collator $coll, int $type )\",\"* Gets the locale name of the collator.\"],collator_get_sort_key:[\"bool collator_get_sort_key( Collator $coll, string $str )\",\"* Get a sort key for a string from a Collator. }}}\"],collator_get_strength:[\"int collator_get_strength(Collator coll)\",\"* Returns the current collation strength.\"],collator_set_attribute:[\"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\"* Set collation attribute.\"],collator_set_strength:[\"bool collator_set_strength(Collator coll, int strength)\",\"* Set the collation strength.\"],collator_sort:[\"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\"* Sort array using specified collator.\"],collator_sort_with_sort_keys:[\"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"],com_create_guid:[\"string com_create_guid()\",\"Generate a globally unique identifier (GUID)\"],com_event_sink:[\"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\"Connect events from a COM object to a PHP object\"],com_get_active_object:[\"object com_get_active_object(string progid [, int code_page ])\",\"Returns a handle to an already running instance of a COM object\"],com_load_typelib:[\"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\"Loads a Typelibrary and registers its constants\"],com_message_pump:[\"bool com_message_pump([int timeoutms])\",\"Process COM messages, sleeping for up to timeoutms milliseconds\"],com_print_typeinfo:[\"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\"Print out a PHP class definition for a dispatchable interface\"],compact:[\"array compact(mixed var_names [, mixed ...])\",\"Creates a hash containing variables and their values\"],compose_locale:[\"static string compose_locale($array)\",\"* Creates a locale by combining the parts of locale-ID passed  * }}}\"],confirm_extname_compiled:[\"string confirm_extname_compiled(string arg)\",\"Return a string to confirm that the module is compiled in\"],connection_aborted:[\"int connection_aborted(void)\",\"Returns true if client disconnected\"],connection_status:[\"int connection_status(void)\",\"Returns the connection status bitfield\"],constant:[\"mixed constant(string const_name)\",\"Given the name of a constant this function will return the constant's associated value\"],convert_cyr_string:[\"string convert_cyr_string(string str, string from, string to)\",\"Convert from one Cyrillic character set to another\"],convert_uudecode:[\"string convert_uudecode(string data)\",\"decode a uuencoded string\"],convert_uuencode:[\"string convert_uuencode(string data)\",\"uuencode a string\"],copy:[\"bool copy(string source_file, string destination_file [, resource context])\",\"Copy a file\"],cos:[\"float cos(float number)\",\"Returns the cosine of the number in radians\"],cosh:[\"float cosh(float number)\",\"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"],count:[\"int count(mixed var [, int mode])\",\"Count the number of elements in a variable (usually an array)\"],count_chars:[\"mixed count_chars(string input [, int mode])\",\"Returns info about what characters are used in input\"],crc32:[\"string crc32(string str)\",\"Calculate the crc32 polynomial of a string\"],create_function:[\"string create_function(string args, string code)\",\"Creates an anonymous function, and returns its name (funny, eh?)\"],crypt:[\"string crypt(string str [, string salt])\",\"Hash a string\"],ctype_alnum:[\"bool ctype_alnum(mixed c)\",\"Checks for alphanumeric character(s)\"],ctype_alpha:[\"bool ctype_alpha(mixed c)\",\"Checks for alphabetic character(s)\"],ctype_cntrl:[\"bool ctype_cntrl(mixed c)\",\"Checks for control character(s)\"],ctype_digit:[\"bool ctype_digit(mixed c)\",\"Checks for numeric character(s)\"],ctype_graph:[\"bool ctype_graph(mixed c)\",\"Checks for any printable character(s) except space\"],ctype_lower:[\"bool ctype_lower(mixed c)\",\"Checks for lowercase character(s)\"],ctype_print:[\"bool ctype_print(mixed c)\",\"Checks for printable character(s)\"],ctype_punct:[\"bool ctype_punct(mixed c)\",\"Checks for any printable character which is not whitespace or an alphanumeric character\"],ctype_space:[\"bool ctype_space(mixed c)\",\"Checks for whitespace character(s)\"],ctype_upper:[\"bool ctype_upper(mixed c)\",\"Checks for uppercase character(s)\"],ctype_xdigit:[\"bool ctype_xdigit(mixed c)\",\"Checks for character(s) representing a hexadecimal digit\"],curl_close:[\"void curl_close(resource ch)\",\"Close a cURL session\"],curl_copy_handle:[\"resource curl_copy_handle(resource ch)\",\"Copy a cURL handle along with all of it's preferences\"],curl_errno:[\"int curl_errno(resource ch)\",\"Return an integer containing the last error number\"],curl_error:[\"string curl_error(resource ch)\",\"Return a string contain the last error for the current session\"],curl_exec:[\"bool curl_exec(resource ch)\",\"Perform a cURL session\"],curl_getinfo:[\"mixed curl_getinfo(resource ch [, int option])\",\"Get information regarding a specific transfer\"],curl_init:[\"resource curl_init([string url])\",\"Initialize a cURL session\"],curl_multi_add_handle:[\"int curl_multi_add_handle(resource mh, resource ch)\",\"Add a normal cURL handle to a cURL multi handle\"],curl_multi_close:[\"void curl_multi_close(resource mh)\",\"Close a set of cURL handles\"],curl_multi_exec:[\"int curl_multi_exec(resource mh, int &still_running)\",\"Run the sub-connections of the current cURL handle\"],curl_multi_getcontent:[\"string curl_multi_getcontent(resource ch)\",\"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"],curl_multi_info_read:[\"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\"Get information about the current transfers\"],curl_multi_init:[\"resource curl_multi_init(void)\",\"Returns a new cURL multi handle\"],curl_multi_remove_handle:[\"int curl_multi_remove_handle(resource mh, resource ch)\",\"Remove a multi handle from a set of cURL handles\"],curl_multi_select:[\"int curl_multi_select(resource mh[, double timeout])\",'Get all the sockets associated with the cURL extension, which can then be \"selected\"'],curl_setopt:[\"bool curl_setopt(resource ch, int option, mixed value)\",\"Set an option for a cURL transfer\"],curl_setopt_array:[\"bool curl_setopt_array(resource ch, array options)\",\"Set an array of option for a cURL transfer\"],curl_version:[\"array curl_version([int version])\",\"Return cURL version information.\"],current:[\"mixed current(array array_arg)\",\"Return the element currently pointed to by the internal array pointer\"],date:[\"string date(string format [, long timestamp])\",\"Format a local date/time\"],date_add:[\"DateTime date_add(DateTime object, DateInterval interval)\",\"Adds an interval to the current date in object.\"],date_create:[\"DateTime date_create([string time[, DateTimeZone object]])\",\"Returns new DateTime object\"],date_create_from_format:[\"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\"Returns new DateTime object formatted according to the specified format\"],date_date_set:[\"DateTime date_date_set(DateTime object, long year, long month, long day)\",\"Sets the date.\"],date_default_timezone_get:[\"string date_default_timezone_get()\",\"Gets the default timezone used by all date/time functions in a script\"],date_default_timezone_set:[\"bool date_default_timezone_set(string timezone_identifier)\",\"Sets the default timezone used by all date/time functions in a script\"],date_diff:[\"DateInterval date_diff(DateTime object [, bool absolute])\",\"Returns the difference between two DateTime objects.\"],date_format:[\"string date_format(DateTime object, string format)\",\"Returns date formatted according to given format\"],date_get_last_errors:[\"array date_get_last_errors()\",\"Returns the warnings and errors found while parsing a date/time string.\"],date_interval_create_from_date_string:[\"DateInterval date_interval_create_from_date_string(string time)\",\"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"],date_interval_format:[\"string date_interval_format(DateInterval object, string format)\",\"Formats the interval.\"],date_isodate_set:[\"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\"Sets the ISO date.\"],date_modify:[\"DateTime date_modify(DateTime object, string modify)\",\"Alters the timestamp.\"],date_offset_get:[\"long date_offset_get(DateTime object)\",\"Returns the DST offset.\"],date_parse:[\"array date_parse(string date)\",\"Returns associative array with detailed info about given date\"],date_parse_from_format:[\"array date_parse_from_format(string format, string date)\",\"Returns associative array with detailed info about given date\"],date_sub:[\"DateTime date_sub(DateTime object, DateInterval interval)\",\"Subtracts an interval to the current date in object.\"],date_sun_info:[\"array date_sun_info(long time, float latitude, float longitude)\",\"Returns an array with information about sun set/rise and twilight begin/end\"],date_sunrise:[\"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunrise for a given day and location\"],date_sunset:[\"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunset for a given day and location\"],date_time_set:[\"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\"Sets the time.\"],date_timestamp_get:[\"long date_timestamp_get(DateTime object)\",\"Gets the Unix timestamp.\"],date_timestamp_set:[\"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\"Sets the date and time based on an Unix timestamp.\"],date_timezone_get:[\"DateTimeZone date_timezone_get(DateTime object)\",\"Return new DateTimeZone object relative to give DateTime\"],date_timezone_set:[\"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\"Sets the timezone for the DateTime object.\"],datefmt_create:[\"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\"* Create formatter.\"],datefmt_format:[\"string datefmt_format( [mixed]int $args or array $args )\",\"* Format the time value as a string. }}}\"],datefmt_get_calendar:[\"string datefmt_get_calendar( IntlDateFormatter $mf )\",\"* Get formatter calendar.\"],datefmt_get_datetype:[\"string datefmt_get_datetype( IntlDateFormatter $mf )\",\"* Get formatter datetype.\"],datefmt_get_error_code:[\"int datefmt_get_error_code( IntlDateFormatter $nf )\",\"* Get formatter's last error code.\"],datefmt_get_error_message:[\"string datefmt_get_error_message( IntlDateFormatter $coll )\",\"* Get text description for formatter's last error code.\"],datefmt_get_locale:[\"string datefmt_get_locale(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_get_pattern:[\"string datefmt_get_pattern( IntlDateFormatter $mf )\",\"* Get formatter pattern.\"],datefmt_get_timetype:[\"string datefmt_get_timetype( IntlDateFormatter $mf )\",\"* Get formatter timetype.\"],datefmt_get_timezone_id:[\"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\"* Get formatter timezone_id.\"],datefmt_isLenient:[\"string datefmt_isLenient(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_localtime:[\"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\"* Parse the string $value to a localtime array  }}}\"],datefmt_parse:[\"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"],datefmt_setLenient:[\"string datefmt_setLenient(IntlDateFormatter $mf)\",\"* Set formatter lenient.\"],datefmt_set_calendar:[\"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\"* Set formatter calendar.\"],datefmt_set_pattern:[\"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],datefmt_set_timezone_id:[\"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\"* Set formatter timezone_id.\"],dba_close:[\"void dba_close(resource handle)\",\"Closes database\"],dba_delete:[\"bool dba_delete(string key, resource handle)\",\"Deletes the entry associated with key    If inifile: remove all other key lines\"],dba_exists:[\"bool dba_exists(string key, resource handle)\",\"Checks, if the specified key exists\"],dba_fetch:[\"string dba_fetch(string key, [int skip ,] resource handle)\",\"Fetches the data associated with key\"],dba_firstkey:[\"string dba_firstkey(resource handle)\",\"Resets the internal key pointer and returns the first key\"],dba_handlers:[\"array dba_handlers([bool full_info])\",\"List configured database handlers\"],dba_insert:[\"bool dba_insert(string key, string value, resource handle)\",\"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"],dba_key_split:[\"array|false dba_key_split(string key)\",\"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"],dba_list:[\"array dba_list()\",\"List opened databases\"],dba_nextkey:[\"string dba_nextkey(resource handle)\",\"Returns the next key\"],dba_open:[\"resource dba_open(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode\"],dba_optimize:[\"bool dba_optimize(resource handle)\",\"Optimizes (e.g. clean up, vacuum) database\"],dba_popen:[\"resource dba_popen(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode persistently\"],dba_replace:[\"bool dba_replace(string key, string value, resource handle)\",\"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"],dba_sync:[\"bool dba_sync(resource handle)\",\"Synchronizes database\"],dcgettext:[\"string dcgettext(string domain_name, string msgid, long category)\",\"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"],dcngettext:[\"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\"Plural version of dcgettext()\"],debug_backtrace:[\"array debug_backtrace([bool provide_object])\",\"Return backtrace as array\"],debug_print_backtrace:[\"void debug_print_backtrace(void) */\",\"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);\",\"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"],dom_document_relaxNG_validate_xml:[\"boolean dom_document_relaxNG_validate_xml(string source); */\",\"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"],dom_document_rename_node:[\"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"],dom_document_save:[\"int dom_document_save(string file);\",\"Convenience method to save to file\"],dom_document_save_html:[\"string dom_document_save_html();\",\"Convenience method to output as html\"],dom_document_save_html_file:[\"int dom_document_save_html_file(string file);\",\"Convenience method to save to file as html\"],dom_document_savexml:[\"string dom_document_savexml([node n]);\",\"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"],dom_document_schema_validate:[\"boolean dom_document_schema_validate(string source); */\",\"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"],dom_document_schema_validate_file:[\"boolean dom_document_schema_validate_file(string filename); */\",\"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"],dom_document_validate:[\"boolean dom_document_validate();\",\"Since: DOM extended\"],dom_document_xinclude:[\"int dom_document_xinclude([int options])\",\"Substitutues xincludes in a DomDocument\"],dom_domconfiguration_can_set_parameter:[\"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"],dom_domconfiguration_get_parameter:[\"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"],dom_domconfiguration_set_parameter:[\"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"],dom_domerrorhandler_handle_error:[\"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"],dom_domimplementation_create_document:[\"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"],dom_domimplementation_create_document_type:[\"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"],dom_domimplementation_get_feature:[\"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"],dom_domimplementation_has_feature:[\"boolean dom_domimplementation_has_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"],dom_domimplementationlist_item:[\"domdomimplementation dom_domimplementationlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"],dom_domimplementationsource_get_domimplementation:[\"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"],dom_domimplementationsource_get_domimplementations:[\"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"],dom_domstringlist_item:[\"domstring dom_domstringlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"],dom_element_get_attribute:[\"string dom_element_get_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"],dom_element_get_attribute_node:[\"DOMAttr dom_element_get_attribute_node(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"],dom_element_get_attribute_node_ns:[\"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"],dom_element_get_attribute_ns:[\"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"],dom_element_get_elements_by_tag_name:[\"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"],dom_element_get_elements_by_tag_name_ns:[\"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"],dom_element_has_attribute:[\"boolean dom_element_has_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"],dom_element_has_attribute_ns:[\"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"],dom_element_remove_attribute:[\"void dom_element_remove_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"],dom_element_remove_attribute_node:[\"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"],dom_element_remove_attribute_ns:[\"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"],dom_element_set_attribute:[\"void dom_element_set_attribute(string name, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"],dom_element_set_attribute_node:[\"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"],dom_element_set_attribute_node_ns:[\"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"],dom_element_set_attribute_ns:[\"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"],dom_element_set_id_attribute:[\"void dom_element_set_id_attribute(string name, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"],dom_element_set_id_attribute_node:[\"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"],dom_element_set_id_attribute_ns:[\"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"],dom_import_simplexml:[\"somNode dom_import_simplexml(sxeobject node)\",\"Get a simplexml_element object from dom to allow for processing\"],dom_namednodemap_get_named_item:[\"DOMNode dom_namednodemap_get_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"],dom_namednodemap_get_named_item_ns:[\"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"],dom_namednodemap_item:[\"DOMNode dom_namednodemap_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"],dom_namednodemap_remove_named_item:[\"DOMNode dom_namednodemap_remove_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"],dom_namednodemap_remove_named_item_ns:[\"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"],dom_namednodemap_set_named_item:[\"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"],dom_namednodemap_set_named_item_ns:[\"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"],dom_namelist_get_name:[\"string dom_namelist_get_name(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"],dom_namelist_get_namespace_uri:[\"string dom_namelist_get_namespace_uri(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"],dom_node_append_child:[\"DomNode dom_node_append_child(DomNode newChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"],dom_node_clone_node:[\"DomNode dom_node_clone_node(boolean deep);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"],dom_node_compare_document_position:[\"short dom_node_compare_document_position(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"],dom_node_get_feature:[\"DomNode dom_node_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"],dom_node_get_user_data:[\"mixed dom_node_get_user_data(string key);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"],dom_node_has_attributes:[\"boolean dom_node_has_attributes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"],dom_node_has_child_nodes:[\"boolean dom_node_has_child_nodes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"],dom_node_insert_before:[\"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"],dom_node_is_default_namespace:[\"boolean dom_node_is_default_namespace(string namespaceURI);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"],dom_node_is_equal_node:[\"boolean dom_node_is_equal_node(DomNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"],dom_node_is_same_node:[\"boolean dom_node_is_same_node(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"],dom_node_is_supported:[\"boolean dom_node_is_supported(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"],dom_node_lookup_namespace_uri:[\"string dom_node_lookup_namespace_uri(string prefix);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"],dom_node_lookup_prefix:[\"string dom_node_lookup_prefix(string namespaceURI);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"],dom_node_normalize:[\"void dom_node_normalize();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"],dom_node_remove_child:[\"DomNode dom_node_remove_child(DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"],dom_node_replace_child:[\"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"],dom_node_set_user_data:[\"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"],dom_nodelist_item:[\"DOMNode dom_nodelist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"],dom_string_extend_find_offset16:[\"int dom_string_extend_find_offset16(int offset32);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"],dom_string_extend_find_offset32:[\"int dom_string_extend_find_offset32(int offset16);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"],dom_text_is_whitespace_in_element_content:[\"boolean dom_text_is_whitespace_in_element_content();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"],dom_text_replace_whole_text:[\"DOMText dom_text_replace_whole_text(string content);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"],dom_text_split_text:[\"DOMText dom_text_split_text(int offset);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"],dom_userdatahandler_handle:[\"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"],dom_xpath_evaluate:[\"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"],dom_xpath_query:[\"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"],dom_xpath_register_ns:[\"boolean dom_xpath_register_ns(string prefix, string uri); */\",'PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Oss\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid XPath Context\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}'],dom_xpath_register_php_functions:[\"void dom_xpath_register_php_functions() */\",'PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"a\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions'],each:[\"array each(array arr)\",\"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"],easter_date:[\"int easter_date([int year])\",\"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"],easter_days:[\"int easter_days([int year, [int method]])\",\"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"],echo:[\"void echo(string arg1 [, string ...])\",\"Output one or more strings\"],empty:[\"bool empty( mixed var )\",\"Determine whether a variable is empty\"],enchant_broker_describe:[\"array enchant_broker_describe(resource broker)\",\"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"],enchant_broker_dict_exists:[\"bool enchant_broker_dict_exists(resource broker, string tag)\",\"Whether a dictionary exists or not. Using non-empty tag\"],enchant_broker_free:[\"boolean enchant_broker_free(resource broker)\",\"Destroys the broker object and its dictionnaries\"],enchant_broker_free_dict:[\"resource enchant_broker_free_dict(resource dict)\",\"Free the dictionary resource\"],enchant_broker_get_dict_path:[\"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\"Get the directory path for a given backend, works with ispell and myspell\"],enchant_broker_get_error:[\"string enchant_broker_get_error(resource broker)\",\"Returns the last error of the broker\"],enchant_broker_init:[\"resource enchant_broker_init()\",\"create a new broker object capable of requesting\"],enchant_broker_list_dicts:[\"string enchant_broker_list_dicts(resource broker)\",\"Lists the dictionaries available for the given broker\"],enchant_broker_request_dict:[\"resource enchant_broker_request_dict(resource broker, string tag)\",'create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\"en_US\", \"de_DE\", ...)'],enchant_broker_request_pwl_dict:[\"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"],enchant_broker_set_dict_path:[\"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\"Set the directory path for a given backend, works with ispell and myspell\"],enchant_broker_set_ordering:[\"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"],enchant_dict_add_to_personal:[\"void enchant_dict_add_to_personal(resource dict, string word)\",\"add 'word' to personal word list\"],enchant_dict_add_to_session:[\"void enchant_dict_add_to_session(resource dict, string word)\",\"add 'word' to this spell-checking session\"],enchant_dict_check:[\"bool enchant_dict_check(resource dict, string word)\",\"If the word is correctly spelled return true, otherwise return false\"],enchant_dict_describe:[\"array enchant_dict_describe(resource dict)\",\"Describes an individual dictionary 'dict'\"],enchant_dict_get_error:[\"string enchant_dict_get_error(resource dict)\",\"Returns the last error of the current spelling-session\"],enchant_dict_is_in_session:[\"bool enchant_dict_is_in_session(resource dict, string word)\",\"whether or not 'word' exists in this spelling-session\"],enchant_dict_quick_check:[\"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"],enchant_dict_store_replacement:[\"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"],enchant_dict_suggest:[\"array enchant_dict_suggest(resource dict, string word)\",\"Will return a list of values if any of those pre-conditions are not met.\"],end:[\"mixed end(array array_arg)\",\"Advances array argument's internal pointer to the last element and return it\"],ereg:[\"int ereg(string pattern, string string [, array registers])\",\"Regular expression match\"],ereg_replace:[\"string ereg_replace(string pattern, string replacement, string string)\",\"Replace regular expression\"],eregi:[\"int eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match\"],eregi_replace:[\"string eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression\"],error_get_last:[\"array error_get_last()\",\"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"],error_log:[\"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\"Send an error message somewhere\"],error_reporting:[\"int error_reporting([int new_error_level])\",\"Return the current error_reporting level, and if an argument was passed - change to the new level\"],escapeshellarg:[\"string escapeshellarg(string arg)\",\"Quote and escape an argument for use in a shell command\"],escapeshellcmd:[\"string escapeshellcmd(string command)\",\"Escape shell metacharacters\"],exec:[\"string exec(string command [, array &output [, int &return_value]])\",\"Execute an external program\"],exif_imagetype:[\"int exif_imagetype(string imagefile)\",\"Get the type of an image\"],exif_read_data:[\"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"],exif_tagname:[\"string exif_tagname(index)\",\"Get headername for index or false if not defined\"],exif_thumbnail:[\"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\"Reads the embedded thumbnail\"],exit:[\"void exit([mixed status])\",\"Output a message and terminate the current script\"],exp:[\"float exp(float number)\",\"Returns e raised to the power of the number\"],explode:[\"array explode(string separator, string str [, int limit])\",\"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"],expm1:[\"float expm1(float number)\",\"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"],extension_loaded:[\"bool extension_loaded(string extension_name)\",\"Returns true if the named extension is loaded\"],extract:[\"int extract(array var_array [, int extract_type [, string prefix]])\",\"Imports variables into symbol table from an array\"],ezmlm_hash:[\"int ezmlm_hash(string addr)\",\"Calculate EZMLM list hash value.\"],fclose:[\"bool fclose(resource fp)\",\"Close an open file pointer\"],feof:[\"bool feof(resource fp)\",\"Test for end-of-file on a file pointer\"],fflush:[\"bool fflush(resource fp)\",\"Flushes output\"],fgetc:[\"string fgetc(resource fp)\",\"Get a character from file pointer\"],fgetcsv:[\"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\"Get line from file pointer and parse for CSV fields\"],fgets:[\"string fgets(resource fp[, int length])\",\"Get a line from file pointer\"],fgetss:[\"string fgetss(resource fp [, int length [, string allowable_tags]])\",\"Get a line from file pointer and strip HTML tags\"],file:[\"array file(string filename [, int flags[, resource context]])\",\"Read entire file into an array\"],file_exists:[\"bool file_exists(string filename)\",\"Returns true if filename exists\"],file_get_contents:[\"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\"Read the entire file into a string\"],file_put_contents:[\"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\"Write/Create a file with contents data and return the number of bytes written\"],fileatime:[\"int fileatime(string filename)\",\"Get last access time of file\"],filectime:[\"int filectime(string filename)\",\"Get inode modification time of file\"],filegroup:[\"int filegroup(string filename)\",\"Get file group\"],fileinode:[\"int fileinode(string filename)\",\"Get file inode\"],filemtime:[\"int filemtime(string filename)\",\"Get last modification time of file\"],fileowner:[\"int fileowner(string filename)\",\"Get file owner\"],fileperms:[\"int fileperms(string filename)\",\"Get file permissions\"],filesize:[\"int filesize(string filename)\",\"Get file size\"],filetype:[\"string filetype(string filename)\",\"Get file type\"],filter_has_var:[\"mixed filter_has_var(constant type, string variable_name)\",\"* Returns true if the variable with the name 'name' exists in source.\"],filter_input:[\"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\"* Returns the filtered variable 'name'* from source `type`.\"],filter_input_array:[\"mixed filter_input_array(constant type, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],filter_var:[\"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\"* Returns the filtered version of the vriable.\"],filter_var_array:[\"mixed filter_var_array(array data, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],finfo_buffer:[\"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\"Return infromation about a string buffer.\"],finfo_close:[\"resource finfo_close(resource finfo)\",\"Close fileinfo resource.\"],finfo_file:[\"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\"Return information about a file.\"],finfo_open:[\"resource finfo_open([int options [, string arg]])\",\"Create a new fileinfo resource.\"],finfo_set_flags:[\"bool finfo_set_flags(resource finfo, int options)\",\"Set libmagic configuration options.\"],floatval:[\"float floatval(mixed var)\",\"Get the float value of a variable\"],flock:[\"bool flock(resource fp, int operation [, int &wouldblock])\",\"Portable file locking\"],floor:[\"float floor(float number)\",\"Returns the next lowest integer value from the number\"],flush:[\"void flush(void)\",\"Flush the output buffer\"],fmod:[\"float fmod(float x, float y)\",\"Returns the remainder of dividing x by y as a float\"],fnmatch:[\"bool fnmatch(string pattern, string filename [, int flags])\",\"Match filename against pattern\"],fopen:[\"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\"Open a file or a URL and return a file pointer\"],forward_static_call:[\"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],fpassthru:[\"int fpassthru(resource fp)\",\"Output all remaining data from a file pointer\"],fprintf:[\"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string into a stream\"],fputcsv:[\"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\"Format line as CSV and write to file pointer\"],fread:[\"string fread(resource fp, int length)\",\"Binary-safe file read\"],frenchtojd:[\"int frenchtojd(int month, int day, int year)\",\"Converts a french republic calendar date to julian day count\"],fscanf:[\"mixed fscanf(resource stream, string format [, string ...])\",\"Implements a mostly ANSI compatible fscanf()\"],fseek:[\"int fseek(resource fp, int offset [, int whence])\",\"Seek on a file pointer\"],fsockopen:[\"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open Internet or Unix domain socket connection\"],fstat:[\"array fstat(resource fp)\",\"Stat() on a filehandle\"],ftell:[\"int ftell(resource fp)\",\"Get file pointer's read/write position\"],ftok:[\"int ftok(string pathname, string proj)\",\"Convert a pathname and a project identifier to a System V IPC key\"],ftp_alloc:[\"bool ftp_alloc(resource stream, int size[, &response])\",\"Attempt to allocate space on the remote FTP server\"],ftp_cdup:[\"bool ftp_cdup(resource stream)\",\"Changes to the parent directory\"],ftp_chdir:[\"bool ftp_chdir(resource stream, string directory)\",\"Changes directories\"],ftp_chmod:[\"int ftp_chmod(resource stream, int mode, string filename)\",\"Sets permissions on a file\"],ftp_close:[\"bool ftp_close(resource stream)\",\"Closes the FTP stream\"],ftp_connect:[\"resource ftp_connect(string host [, int port [, int timeout]])\",\"Opens a FTP stream\"],ftp_delete:[\"bool ftp_delete(resource stream, string file)\",\"Deletes a file\"],ftp_exec:[\"bool ftp_exec(resource stream, string command)\",\"Requests execution of a program on the FTP server\"],ftp_fget:[\"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server and writes it to an open file\"],ftp_fput:[\"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server\"],ftp_get:[\"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server and writes it to a local file\"],ftp_get_option:[\"mixed ftp_get_option(resource stream, int option)\",\"Gets an FTP option\"],ftp_login:[\"bool ftp_login(resource stream, string username, string password)\",\"Logs into the FTP server\"],ftp_mdtm:[\"int ftp_mdtm(resource stream, string filename)\",\"Returns the last modification time of the file, or -1 on error\"],ftp_mkdir:[\"string ftp_mkdir(resource stream, string directory)\",\"Creates a directory and returns the absolute path for the new directory or false on error\"],ftp_nb_continue:[\"int ftp_nb_continue(resource stream)\",\"Continues retrieving/sending a file nbronously\"],ftp_nb_fget:[\"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server asynchronly and writes it to an open file\"],ftp_nb_fput:[\"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server nbronly\"],ftp_nb_get:[\"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server nbhronly and writes it to a local file\"],ftp_nb_put:[\"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_nlist:[\"array ftp_nlist(resource stream, string directory)\",\"Returns an array of filenames in the given directory\"],ftp_pasv:[\"bool ftp_pasv(resource stream, bool pasv)\",\"Turns passive mode on or off\"],ftp_put:[\"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_pwd:[\"string ftp_pwd(resource stream)\",\"Returns the present working directory\"],ftp_raw:[\"array ftp_raw(resource stream, string command)\",\"Sends a literal command to the FTP server\"],ftp_rawlist:[\"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\"Returns a detailed listing of a directory as an array of output lines\"],ftp_rename:[\"bool ftp_rename(resource stream, string src, string dest)\",\"Renames the given file to a new path\"],ftp_rmdir:[\"bool ftp_rmdir(resource stream, string directory)\",\"Removes a directory\"],ftp_set_option:[\"bool ftp_set_option(resource stream, int option, mixed value)\",\"Sets an FTP option\"],ftp_site:[\"bool ftp_site(resource stream, string cmd)\",\"Sends a SITE command to the server\"],ftp_size:[\"int ftp_size(resource stream, string filename)\",\"Returns the size of the file, or -1 on error\"],ftp_ssl_connect:[\"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\"Opens a FTP-SSL stream\"],ftp_systype:[\"string ftp_systype(resource stream)\",\"Returns the system type identifier\"],ftruncate:[\"bool ftruncate(resource fp, int size)\",\"Truncate file to 'size' length\"],func_get_arg:[\"mixed func_get_arg(int arg_num)\",\"Get the $arg_num'th argument that was passed to the function\"],func_get_args:[\"array func_get_args()\",\"Get an array of the arguments that were passed to the function\"],func_num_args:[\"int func_num_args(void)\",\"Get the number of arguments that were passed to the function\"],\"function \":[\"\",\"\"],\"foreach \":[\"\",\"\"],function_exists:[\"bool function_exists(string function_name)\",\"Checks if the function exists\"],fwrite:[\"int fwrite(resource fp, string str [, int length])\",\"Binary-safe file write\"],gc_collect_cycles:[\"int gc_collect_cycles(void)\",\"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"],gc_disable:[\"void gc_disable(void)\",\"Deactivates the circular reference collector\"],gc_enable:[\"void gc_enable(void)\",\"Activates the circular reference collector\"],gc_enabled:[\"void gc_enabled(void)\",\"Returns status of the circular reference collector\"],gd_info:[\"array gd_info()\",\"\"],getKeywords:[\"static array getKeywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"],get_browser:[\"mixed get_browser([string browser_name [, bool return_array]])\",\"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"],get_called_class:[\"string get_called_class()\",'Retrieves the \"Late Static Binding\" class name'],get_cfg_var:[\"mixed get_cfg_var(string option_name)\",\"Get the value of a PHP configuration option\"],get_class:[\"string get_class([object object])\",\"Retrieves the class name\"],get_class_methods:[\"array get_class_methods(mixed class)\",\"Returns an array of method names for class or class instance.\"],get_class_vars:[\"array get_class_vars(string class_name)\",\"Returns an array of default properties of the class.\"],get_current_user:[\"string get_current_user(void)\",\"Get the name of the owner of the current PHP script\"],get_declared_classes:[\"array get_declared_classes()\",\"Returns an array of all declared classes.\"],get_declared_interfaces:[\"array get_declared_interfaces()\",\"Returns an array of all declared interfaces.\"],get_defined_constants:[\"array get_defined_constants([bool categorize])\",\"Return an array containing the names and values of all defined constants\"],get_defined_functions:[\"array get_defined_functions(void)\",\"Returns an array of all defined functions\"],get_defined_vars:[\"array get_defined_vars(void)\",\"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"],get_display_language:[\"static string get_display_language($locale[, $in_locale = null])\",\"* gets the language for the $locale in $in_locale or default_locale\"],get_display_name:[\"static string get_display_name($locale[, $in_locale = null])\",\"* gets the name for the $locale in $in_locale or default_locale\"],get_display_region:[\"static string get_display_region($locale, $in_locale = null)\",\"* gets the region for the $locale in $in_locale or default_locale\"],get_display_script:[\"static string get_display_script($locale, $in_locale = null)\",\"* gets the script for the $locale in $in_locale or default_locale\"],get_extension_funcs:[\"array get_extension_funcs(string extension_name)\",\"Returns an array with the names of functions belonging to the named extension\"],get_headers:[\"array get_headers(string url[, int format])\",\"fetches all the headers sent by the server in response to a HTTP request\"],get_html_translation_table:[\"array get_html_translation_table([int table [, int quote_style]])\",\"Returns the internal translation table used by htmlspecialchars and htmlentities\"],get_include_path:[\"string get_include_path()\",\"Get the current include_path configuration option\"],get_included_files:[\"array get_included_files(void)\",\"Returns an array with the file names that were include_once()'d\"],get_loaded_extensions:[\"array get_loaded_extensions([bool zend_extensions])\",\"Return an array containing names of loaded extensions\"],get_magic_quotes_gpc:[\"int get_magic_quotes_gpc(void)\",\"Get the current active configuration setting of magic_quotes_gpc\"],get_magic_quotes_runtime:[\"int get_magic_quotes_runtime(void)\",\"Get the current active configuration setting of magic_quotes_runtime\"],get_meta_tags:[\"array get_meta_tags(string filename [, bool use_include_path])\",\"Extracts all meta tag content attributes from a file and returns an array\"],get_object_vars:[\"array get_object_vars(object obj)\",\"Returns an array of object properties\"],get_parent_class:[\"string get_parent_class([mixed object])\",\"Retrieves the parent class name for object or class or current scope.\"],get_resource_type:[\"string get_resource_type(resource res)\",\"Get the resource type name for a given resource\"],getallheaders:[\"array getallheaders(void)\",\"\"],getcwd:[\"mixed getcwd(void)\",\"Gets the current directory\"],getdate:[\"array getdate([int timestamp])\",\"Get date/time information\"],getenv:[\"string getenv(string varname)\",\"Get the value of an environment variable\"],gethostbyaddr:[\"string gethostbyaddr(string ip_address)\",\"Get the Internet host name corresponding to a given IP address\"],gethostbyname:[\"string gethostbyname(string hostname)\",\"Get the IP address corresponding to a given Internet host name\"],gethostbynamel:[\"array gethostbynamel(string hostname)\",\"Return a list of IP addresses that a given hostname resolves to.\"],gethostname:[\"string gethostname()\",\"Get the host name of the current machine\"],getimagesize:[\"array getimagesize(string imagefile [, array info])\",\"Get the size of an image as 4-element array\"],getlastmod:[\"int getlastmod(void)\",\"Get time of last page modification\"],getmygid:[\"int getmygid(void)\",\"Get PHP script owner's GID\"],getmyinode:[\"int getmyinode(void)\",\"Get the inode of the current script being parsed\"],getmypid:[\"int getmypid(void)\",\"Get current process ID\"],getmyuid:[\"int getmyuid(void)\",\"Get PHP script owner's UID\"],getopt:[\"array getopt(string options [, array longopts])\",\"Get options from the command line argument list\"],getprotobyname:[\"int getprotobyname(string name)\",\"Returns protocol number associated with name as per /etc/protocols\"],getprotobynumber:[\"string getprotobynumber(int proto)\",\"Returns protocol name associated with protocol number proto\"],getrandmax:[\"int getrandmax(void)\",\"Returns the maximum value a random number can have\"],getrusage:[\"array getrusage([int who])\",\"Returns an array of usage statistics\"],getservbyname:[\"int getservbyname(string service, string protocol)\",'Returns port associated with service. Protocol must be \"tcp\" or \"udp\"'],getservbyport:[\"string getservbyport(int port, string protocol)\",'Returns service name associated with port. Protocol must be \"tcp\" or \"udp\"'],gettext:[\"string gettext(string msgid)\",\"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"],gettimeofday:[\"array gettimeofday([bool get_as_float])\",\"Returns the current time as array\"],gettype:[\"string gettype(mixed var)\",\"Returns the type of the variable\"],glob:[\"array glob(string pattern [, int flags])\",\"Find pathnames matching a pattern\"],gmdate:[\"string gmdate(string format [, long timestamp])\",\"Format a GMT date/time\"],gmmktime:[\"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a GMT date\"],gmp_abs:[\"resource gmp_abs(resource a)\",\"Calculates absolute value\"],gmp_add:[\"resource gmp_add(resource a, resource b)\",\"Add a and b\"],gmp_and:[\"resource gmp_and(resource a, resource b)\",\"Calculates logical AND of a and b\"],gmp_clrbit:[\"void gmp_clrbit(resource &a, int index)\",\"Clears bit in a\"],gmp_cmp:[\"int gmp_cmp(resource a, resource b)\",\"Compares two numbers\"],gmp_com:[\"resource gmp_com(resource a)\",\"Calculates one's complement of a\"],gmp_div_q:[\"resource gmp_div_q(resource a, resource b [, int round])\",\"Divide a by b, returns quotient only\"],gmp_div_qr:[\"array gmp_div_qr(resource a, resource b [, int round])\",\"Divide a by b, returns quotient and reminder\"],gmp_div_r:[\"resource gmp_div_r(resource a, resource b [, int round])\",\"Divide a by b, returns reminder only\"],gmp_divexact:[\"resource gmp_divexact(resource a, resource b)\",\"Divide a by b using exact division algorithm\"],gmp_fact:[\"resource gmp_fact(int a)\",\"Calculates factorial function\"],gmp_gcd:[\"resource gmp_gcd(resource a, resource b)\",\"Computes greatest common denominator (gcd) of a and b\"],gmp_gcdext:[\"array gmp_gcdext(resource a, resource b)\",\"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"],gmp_hamdist:[\"int gmp_hamdist(resource a, resource b)\",\"Calculates hamming distance between a and b\"],gmp_init:[\"resource gmp_init(mixed number [, int base])\",\"Initializes GMP number\"],gmp_intval:[\"int gmp_intval(resource gmpnumber)\",\"Gets signed long value of GMP number\"],gmp_invert:[\"resource gmp_invert(resource a, resource b)\",\"Computes the inverse of a modulo b\"],gmp_jacobi:[\"int gmp_jacobi(resource a, resource b)\",\"Computes Jacobi symbol\"],gmp_legendre:[\"int gmp_legendre(resource a, resource b)\",\"Computes Legendre symbol\"],gmp_mod:[\"resource gmp_mod(resource a, resource b)\",\"Computes a modulo b\"],gmp_mul:[\"resource gmp_mul(resource a, resource b)\",\"Multiply a and b\"],gmp_neg:[\"resource gmp_neg(resource a)\",\"Negates a number\"],gmp_nextprime:[\"resource gmp_nextprime(resource a)\",\"Finds next prime of a\"],gmp_or:[\"resource gmp_or(resource a, resource b)\",\"Calculates logical OR of a and b\"],gmp_perfect_square:[\"bool gmp_perfect_square(resource a)\",\"Checks if a is an exact square\"],gmp_popcount:[\"int gmp_popcount(resource a)\",\"Calculates the population count of a\"],gmp_pow:[\"resource gmp_pow(resource base, int exp)\",\"Raise base to power exp\"],gmp_powm:[\"resource gmp_powm(resource base, resource exp, resource mod)\",\"Raise base to power exp and take result modulo mod\"],gmp_prob_prime:[\"int gmp_prob_prime(resource a[, int reps])\",'Checks if a is \"probably prime\"'],gmp_random:[\"resource gmp_random([int limiter])\",\"Gets random number\"],gmp_scan0:[\"int gmp_scan0(resource a, int start)\",\"Finds first zero bit\"],gmp_scan1:[\"int gmp_scan1(resource a, int start)\",\"Finds first non-zero bit\"],gmp_setbit:[\"void gmp_setbit(resource &a, int index[, bool set_clear])\",\"Sets or clear bit in a\"],gmp_sign:[\"int gmp_sign(resource a)\",\"Gets the sign of the number\"],gmp_sqrt:[\"resource gmp_sqrt(resource a)\",\"Takes integer part of square root of a\"],gmp_sqrtrem:[\"array gmp_sqrtrem(resource a)\",\"Square root with remainder\"],gmp_strval:[\"string gmp_strval(resource gmpnumber [, int base])\",\"Gets string representation of GMP number\"],gmp_sub:[\"resource gmp_sub(resource a, resource b)\",\"Subtract b from a\"],gmp_testbit:[\"bool gmp_testbit(resource a, int index)\",\"Tests if bit is set in a\"],gmp_xor:[\"resource gmp_xor(resource a, resource b)\",\"Calculates logical exclusive OR of a and b\"],gmstrftime:[\"string gmstrftime(string format [, int timestamp])\",\"Format a GMT/UCT time/date according to locale settings\"],grapheme_extract:[\"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\"Function to extract a sequence of default grapheme clusters\"],grapheme_stripos:[\"int grapheme_stripos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another, ignoring case differences\"],grapheme_stristr:[\"string grapheme_stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_strlen:[\"int grapheme_strlen(string str)\",\"Get number of graphemes in a string\"],grapheme_strpos:[\"int grapheme_strpos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another\"],grapheme_strripos:[\"int grapheme_strripos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another, ignoring case\"],grapheme_strrpos:[\"int grapheme_strrpos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another\"],grapheme_strstr:[\"string grapheme_strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_substr:[\"string grapheme_substr(string str, int start [, int length])\",\"Returns part of a string\"],gregoriantojd:[\"int gregoriantojd(int month, int day, int year)\",\"Converts a gregorian calendar date to julian day count\"],gzcompress:[\"string gzcompress(string data [, int level])\",\"Gzip-compress a string\"],gzdeflate:[\"string gzdeflate(string data [, int level])\",\"Gzip-compress a string\"],gzencode:[\"string gzencode(string data [, int level [, int encoding_mode]])\",\"GZ encode a string\"],gzfile:[\"array gzfile(string filename [, int use_include_path])\",\"Read und uncompress entire .gz-file into an array\"],gzinflate:[\"string gzinflate(string data [, int length])\",\"Unzip a gzip-compressed string\"],gzopen:[\"resource gzopen(string filename, string mode [, int use_include_path])\",\"Open a .gz-file and return a .gz-file pointer\"],gzuncompress:[\"string gzuncompress(string data [, int length])\",\"Unzip a gzip-compressed string\"],hash:[\"string hash(string algo, string data[, bool raw_output = false])\",\"Generate a hash of a given input string Returns lowercase hexits by default\"],hash_algos:[\"array hash_algos(void)\",\"Return a list of registered hashing algorithms\"],hash_copy:[\"resource hash_copy(resource context)\",\"Copy hash resource\"],hash_file:[\"string hash_file(string algo, string filename[, bool raw_output = false])\",\"Generate a hash of a given file Returns lowercase hexits by default\"],hash_final:[\"string hash_final(resource context[, bool raw_output=false])\",\"Output resulting digest\"],hash_hmac:[\"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"],hash_hmac_file:[\"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"],hash_init:[\"resource hash_init(string algo[, int options, string key])\",\"Initialize a hashing context\"],hash_update:[\"bool hash_update(resource context, string data)\",\"Pump data into the hashing algorithm\"],hash_update_file:[\"bool hash_update_file(resource context, string filename[, resource context])\",\"Pump data into the hashing algorithm from a file\"],hash_update_stream:[\"int hash_update_stream(resource context, resource handle[, integer length])\",\"Pump data into the hashing algorithm from an open stream\"],header:[\"void header(string header [, bool replace, [int http_response_code]])\",\"Sends a raw HTTP header\"],header_remove:[\"void header_remove([string name])\",\"Removes an HTTP header previously set using header()\"],headers_list:[\"array headers_list(void)\",\"Return list of headers to be sent / already sent\"],headers_sent:[\"bool headers_sent([string &$file [, int &$line]])\",\"Returns true if headers have already been sent, false otherwise\"],hebrev:[\"string hebrev(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text\"],hebrevc:[\"string hebrevc(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text with newline conversion\"],hexdec:[\"int hexdec(string hexadecimal_number)\",\"Returns the decimal equivalent of the hexadecimal number\"],highlight_file:[\"bool highlight_file(string file_name [, bool return] )\",\"Syntax highlight a source file\"],highlight_string:[\"bool highlight_string(string string [, bool return] )\",\"Syntax highlight a string or optionally return it\"],html_entity_decode:[\"string html_entity_decode(string string [, int quote_style][, string charset])\",\"Convert all HTML entities to their applicable characters\"],htmlentities:[\"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert all applicable characters to HTML entities\"],htmlspecialchars:[\"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert special characters to HTML entities\"],htmlspecialchars_decode:[\"string htmlspecialchars_decode(string string [, int quote_style])\",\"Convert special HTML entities back to characters\"],http_build_query:[\"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\"Generates a form-encoded query string from an associative array or object.\"],hypot:[\"float hypot(float num1, float num2)\",\"Returns sqrt(num1*num1 + num2*num2)\"],ibase_add_user:[\"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Add a user to security database\"],ibase_affected_rows:[\"int ibase_affected_rows( [ resource link_identifier ] )\",\"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"],ibase_backup:[\"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\"Initiates a backup task in the service manager and returns immediately\"],ibase_blob_add:[\"bool ibase_blob_add(resource blob_handle, string data)\",\"Add data into created blob\"],ibase_blob_cancel:[\"bool ibase_blob_cancel(resource blob_handle)\",\"Cancel creating blob\"],ibase_blob_close:[\"string ibase_blob_close(resource blob_handle)\",\"Close blob\"],ibase_blob_create:[\"resource ibase_blob_create([resource link_identifier])\",\"Create blob for adding data\"],ibase_blob_echo:[\"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\"Output blob contents to browser\"],ibase_blob_get:[\"string ibase_blob_get(resource blob_handle, int len)\",\"Get len bytes data from open blob\"],ibase_blob_import:[\"string ibase_blob_import([ resource link_identifier, ] resource file)\",\"Create blob, copy file in it, and close it\"],ibase_blob_info:[\"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\"Return blob length and other useful info\"],ibase_blob_open:[\"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\"Open blob for retrieving data parts\"],ibase_close:[\"bool ibase_close([resource link_identifier])\",\"Close an InterBase connection\"],ibase_commit:[\"bool ibase_commit( resource link_identifier )\",\"Commit transaction\"],ibase_commit_ret:[\"bool ibase_commit_ret( resource link_identifier )\",\"Commit transaction and retain the transaction context\"],ibase_connect:[\"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a connection to an InterBase database\"],ibase_db_info:[\"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\"Request statistics about a database\"],ibase_delete_user:[\"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Delete a user from security database\"],ibase_drop_db:[\"bool ibase_drop_db([resource link_identifier])\",\"Drop an InterBase database\"],ibase_errcode:[\"int ibase_errcode(void)\",\"Return error code\"],ibase_errmsg:[\"string ibase_errmsg(void)\",\"Return error message\"],ibase_execute:[\"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a previously prepared query\"],ibase_fetch_assoc:[\"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_fetch_object:[\"object ibase_fetch_object(resource result [, int fetch_flags])\",\"Fetch a object from the results of a query\"],ibase_fetch_row:[\"array ibase_fetch_row(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_field_info:[\"array ibase_field_info(resource query_result, int field_number)\",\"Get information about a field\"],ibase_free_event_handler:[\"bool ibase_free_event_handler(resource event)\",\"Frees the event handler set by ibase_set_event_handler()\"],ibase_free_query:[\"bool ibase_free_query(resource query)\",\"Free memory used by a query\"],ibase_free_result:[\"bool ibase_free_result(resource result)\",\"Free the memory used by a result\"],ibase_gen_id:[\"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\"Increments the named generator and returns its new value\"],ibase_maintain_db:[\"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\"Execute a maintenance command on the database server\"],ibase_modify_user:[\"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Modify a user in security database\"],ibase_name_result:[\"bool ibase_name_result(resource result, string name)\",\"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"],ibase_num_fields:[\"int ibase_num_fields(resource query_result)\",\"Get the number of fields in result\"],ibase_num_params:[\"int ibase_num_params(resource query)\",\"Get the number of params in a prepared query\"],ibase_num_rows:[\"int ibase_num_rows( resource result_identifier )\",\"Return the number of rows that are available in a result\"],ibase_param_info:[\"array ibase_param_info(resource query, int field_number)\",\"Get information about a parameter\"],ibase_pconnect:[\"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a persistent connection to an InterBase database\"],ibase_prepare:[\"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\"Prepare a query for later execution\"],ibase_query:[\"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a query\"],ibase_restore:[\"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\"Initiates a restore task in the service manager and returns immediately\"],ibase_rollback:[\"bool ibase_rollback( resource link_identifier )\",\"Rollback transaction\"],ibase_rollback_ret:[\"bool ibase_rollback_ret( resource link_identifier )\",\"Rollback transaction and retain the transaction context\"],ibase_server_info:[\"string ibase_server_info(resource service_handle, int action)\",\"Request information about a database server\"],ibase_service_attach:[\"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\"Connect to the service manager\"],ibase_service_detach:[\"bool ibase_service_detach(resource service_handle)\",\"Disconnect from the service manager\"],ibase_set_event_handler:[\"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\"Register the callback for handling each of the named events\"],ibase_trans:[\"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\"Start a transaction over one or several databases\"],ibase_wait_event:[\"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"],iconv:[\"string iconv(string in_charset, string out_charset, string str)\",\"Returns str converted to the out_charset character set\"],iconv_get_encoding:[\"mixed iconv_get_encoding([string type])\",\"Get internal encoding and output encoding for ob_iconv_handler()\"],iconv_mime_decode:[\"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\"Decodes a mime header field\"],iconv_mime_decode_headers:[\"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\"Decodes multiple mime header fields\"],iconv_mime_encode:[\"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\"Composes a mime header field with field_name and field_value in a specified scheme\"],iconv_set_encoding:[\"bool iconv_set_encoding(string type, string charset)\",\"Sets internal encoding and output encoding for ob_iconv_handler()\"],iconv_strlen:[\"int iconv_strlen(string str [, string charset])\",\"Returns the character count of str\"],iconv_strpos:[\"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\"Finds position of first occurrence of needle within part of haystack beginning with offset\"],iconv_strrpos:[\"int iconv_strrpos(string haystack, string needle [, string charset])\",\"Finds position of last occurrence of needle within part of haystack beginning with offset\"],iconv_substr:[\"string iconv_substr(string str, int offset, [int length, string charset])\",\"Returns specified part of a string\"],idate:[\"int idate(string format [, int timestamp])\",\"Format a local time/date as integer\"],idn_to_ascii:[\"int idn_to_ascii(string domain[, int options])\",\"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"],idn_to_utf8:[\"int idn_to_utf8(string domain[, int options])\",\"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"],ignore_user_abort:[\"int ignore_user_abort([string value])\",\"Set whether we want to ignore a user abort event or not\"],image2wbmp:[\"bool image2wbmp(resource im [, string filename [, int threshold]])\",\"Output WBMP image to browser or file\"],image_type_to_extension:[\"string image_type_to_extension(int imagetype [, bool include_dot])\",\"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],image_type_to_mime_type:[\"string image_type_to_mime_type(int imagetype)\",\"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],imagealphablending:[\"bool imagealphablending(resource im, bool on)\",\"Turn alpha blending mode on or off for the given image\"],imageantialias:[\"bool imageantialias(resource im, bool on)\",\"Should antialiased functions used or not\"],imagearc:[\"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\"Draw a partial ellipse\"],imagechar:[\"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\"Draw a character\"],imagecharup:[\"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\"Draw a character rotated 90 degrees counter-clockwise\"],imagecolorallocate:[\"int imagecolorallocate(resource im, int red, int green, int blue)\",\"Allocate a color for an image\"],imagecolorallocatealpha:[\"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\"Allocate a color with an alpha level.  Works for true color and palette based images\"],imagecolorat:[\"int imagecolorat(resource im, int x, int y)\",\"Get the index of the color of a pixel\"],imagecolorclosest:[\"int imagecolorclosest(resource im, int red, int green, int blue)\",\"Get the index of the closest color to the specified color\"],imagecolorclosestalpha:[\"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\"Find the closest matching colour with alpha transparency\"],imagecolorclosesthwb:[\"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\"Get the index of the color which has the hue, white and blackness nearest to the given color\"],imagecolordeallocate:[\"bool imagecolordeallocate(resource im, int index)\",\"De-allocate a color for an image\"],imagecolorexact:[\"int imagecolorexact(resource im, int red, int green, int blue)\",\"Get the index of the specified color\"],imagecolorexactalpha:[\"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\"Find exact match for colour with transparency\"],imagecolormatch:[\"bool imagecolormatch(resource im1, resource im2)\",\"Makes the colors of the palette version of an image more closely match the true color version\"],imagecolorresolve:[\"int imagecolorresolve(resource im, int red, int green, int blue)\",\"Get the index of the specified color or its closest possible alternative\"],imagecolorresolvealpha:[\"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"],imagecolorset:[\"void imagecolorset(resource im, int col, int red, int green, int blue)\",\"Set the color for the specified palette index\"],imagecolorsforindex:[\"array imagecolorsforindex(resource im, int col)\",\"Get the colors for an index\"],imagecolorstotal:[\"int imagecolorstotal(resource im)\",\"Find out the number of colors in an image's palette\"],imagecolortransparent:[\"int imagecolortransparent(resource im [, int col])\",\"Define a color as transparent\"],imageconvolution:[\"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\"Apply a 3x3 convolution matrix, using coefficient div and offset\"],imagecopy:[\"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\"Copy part of an image\"],imagecopymerge:[\"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopymergegray:[\"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopyresampled:[\"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image using resampling to help ensure clarity\"],imagecopyresized:[\"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image\"],imagecreate:[\"resource imagecreate(int x_size, int y_size)\",\"Create a new image\"],imagecreatefromgd:[\"resource imagecreatefromgd(string filename)\",\"Create a new image from GD file or URL\"],imagecreatefromgd2:[\"resource imagecreatefromgd2(string filename)\",\"Create a new image from GD2 file or URL\"],imagecreatefromgd2part:[\"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\"Create a new image from a given part of GD2 file or URL\"],imagecreatefromgif:[\"resource imagecreatefromgif(string filename)\",\"Create a new image from GIF file or URL\"],imagecreatefromjpeg:[\"resource imagecreatefromjpeg(string filename)\",\"Create a new image from JPEG file or URL\"],imagecreatefrompng:[\"resource imagecreatefrompng(string filename)\",\"Create a new image from PNG file or URL\"],imagecreatefromstring:[\"resource imagecreatefromstring(string image)\",\"Create a new image from the image stream in the string\"],imagecreatefromwbmp:[\"resource imagecreatefromwbmp(string filename)\",\"Create a new image from WBMP file or URL\"],imagecreatefromxbm:[\"resource imagecreatefromxbm(string filename)\",\"Create a new image from XBM file or URL\"],imagecreatefromxpm:[\"resource imagecreatefromxpm(string filename)\",\"Create a new image from XPM file or URL\"],imagecreatetruecolor:[\"resource imagecreatetruecolor(int x_size, int y_size)\",\"Create a new true color image\"],imagedashedline:[\"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a dashed line\"],imagedestroy:[\"bool imagedestroy(resource im)\",\"Destroy an image\"],imageellipse:[\"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefill:[\"bool imagefill(resource im, int x, int y, int col)\",\"Flood fill\"],imagefilledarc:[\"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\"Draw a filled partial ellipse\"],imagefilledellipse:[\"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefilledpolygon:[\"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\"Draw a filled polygon\"],imagefilledrectangle:[\"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a filled rectangle\"],imagefilltoborder:[\"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\"Flood fill to specific color\"],imagefilter:[\"bool imagefilter(resource src_im, int filtertype, [args] )\",\"Applies Filter an image using a custom angle\"],imagefontheight:[\"int imagefontheight(int font)\",\"Get font height\"],imagefontwidth:[\"int imagefontwidth(int font)\",\"Get font width\"],imageftbbox:[\"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\"Give the bounding box of a text using fonts via freetype2\"],imagefttext:[\"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\"Write text to the image using fonts via freetype2\"],imagegammacorrect:[\"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\"Apply a gamma correction to a GD image\"],imagegd:[\"bool imagegd(resource im [, string filename])\",\"Output GD image to browser or file\"],imagegd2:[\"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\"Output GD2 image to browser or file\"],imagegif:[\"bool imagegif(resource im [, string filename])\",\"Output GIF image to browser or file\"],imagegrabscreen:[\"resource imagegrabscreen()\",\"Grab a screenshot\"],imagegrabwindow:[\"resource imagegrabwindow(int window_handle [, int client_area])\",\"Grab a window or its client area using a windows handle (HWND property in COM instance)\"],imageinterlace:[\"int imageinterlace(resource im [, int interlace])\",\"Enable or disable interlace\"],imageistruecolor:[\"bool imageistruecolor(resource im)\",\"return true if the image uses truecolor\"],imagejpeg:[\"bool imagejpeg(resource im [, string filename [, int quality]])\",\"Output JPEG image to browser or file\"],imagelayereffect:[\"bool imagelayereffect(resource im, int effect)\",\"Set the alpha blending flag to use the bundled libgd layering effects\"],imageline:[\"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a line\"],imageloadfont:[\"int imageloadfont(string filename)\",\"Load a new font\"],imagepalettecopy:[\"void imagepalettecopy(resource dst, resource src)\",\"Copy the palette from the src image onto the dst image\"],imagepng:[\"bool imagepng(resource im [, string filename])\",\"Output PNG image to browser or file\"],imagepolygon:[\"bool imagepolygon(resource im, array point, int num_points, int col)\",\"Draw a polygon\"],imagepsbbox:[\"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\"Return the bounding box needed by a string if rasterized\"],imagepscopyfont:[\"int imagepscopyfont(int font_index)\",\"Make a copy of a font for purposes like extending or reenconding\"],imagepsencodefont:[\"bool imagepsencodefont(resource font_index, string filename)\",\"To change a fonts character encoding vector\"],imagepsextendfont:[\"bool imagepsextendfont(resource font_index, float extend)\",\"Extend or or condense (if extend < 1) a font\"],imagepsfreefont:[\"bool imagepsfreefont(resource font_index)\",\"Free memory used by a font\"],imagepsloadfont:[\"resource imagepsloadfont(string pathname)\",\"Load a new font from specified file\"],imagepsslantfont:[\"bool imagepsslantfont(resource font_index, float slant)\",\"Slant a font\"],imagepstext:[\"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\"Rasterize a string over an image\"],imagerectangle:[\"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a rectangle\"],imagerotate:[\"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\"Rotate an image using a custom angle\"],imagesavealpha:[\"bool imagesavealpha(resource im, bool on)\",\"Include alpha channel to a saved image\"],imagesetbrush:[\"bool imagesetbrush(resource image, resource brush)\",'Set the brush image to $brush when filling $image with the \"IMG_COLOR_BRUSHED\" color'],imagesetpixel:[\"bool imagesetpixel(resource im, int x, int y, int col)\",\"Set a single pixel\"],imagesetstyle:[\"bool imagesetstyle(resource im, array styles)\",\"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"],imagesetthickness:[\"bool imagesetthickness(resource im, int thickness)\",\"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"],imagesettile:[\"bool imagesettile(resource image, resource tile)\",'Set the tile image to $tile when filling $image with the \"IMG_COLOR_TILED\" color'],imagestring:[\"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\"Draw a string horizontally\"],imagestringup:[\"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\"Draw a string vertically - rotated 90 degrees counter-clockwise\"],imagesx:[\"int imagesx(resource im)\",\"Get image width\"],imagesy:[\"int imagesy(resource im)\",\"Get image height\"],imagetruecolortopalette:[\"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"],imagettfbbox:[\"array imagettfbbox(float size, float angle, string font_file, string text)\",\"Give the bounding box of a text using TrueType fonts\"],imagettftext:[\"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\"Write text to the image using a TrueType font\"],imagetypes:[\"int imagetypes(void)\",\"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"],imagewbmp:[\"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\"Output WBMP image to browser or file\"],imagexbm:[\"int imagexbm(int im, string filename [, int foreground])\",\"Output XBM image to browser or file\"],imap_8bit:[\"string imap_8bit(string text)\",\"Convert an 8-bit string to a quoted-printable string\"],imap_alerts:[\"array imap_alerts(void)\",\"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"],imap_append:[\"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\"Append a new message to a specified mailbox\"],imap_base64:[\"string imap_base64(string text)\",\"Decode BASE64 encoded text\"],imap_binary:[\"string imap_binary(string text)\",\"Convert an 8bit string to a base64 string\"],imap_body:[\"string imap_body(resource stream_id, int msg_no [, int options])\",\"Read the message body\"],imap_bodystruct:[\"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\"Read the structure of a specified body section of a specific message\"],imap_check:[\"object imap_check(resource stream_id)\",\"Get mailbox properties\"],imap_clearflag_full:[\"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Clears flags on messages\"],imap_close:[\"bool imap_close(resource stream_id [, int options])\",\"Close an IMAP stream\"],imap_createmailbox:[\"bool imap_createmailbox(resource stream_id, string mailbox)\",\"Create a new mailbox\"],imap_delete:[\"bool imap_delete(resource stream_id, int msg_no [, int options])\",\"Mark a message for deletion\"],imap_deletemailbox:[\"bool imap_deletemailbox(resource stream_id, string mailbox)\",\"Delete a mailbox\"],imap_errors:[\"array imap_errors(void)\",\"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"],imap_expunge:[\"bool imap_expunge(resource stream_id)\",\"Permanently delete all messages marked for deletion\"],imap_fetch_overview:[\"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\"Read an overview of the information in the headers of the given message sequence\"],imap_fetchbody:[\"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\"Get a specific body section\"],imap_fetchheader:[\"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\"Get the full unfiltered header for a message\"],imap_fetchstructure:[\"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\"Read the full structure of a message\"],imap_gc:[\"bool imap_gc(resource stream_id, int flags)\",\"This function garbage collects (purges) the cache of entries of a specific type.\"],imap_get_quota:[\"array imap_get_quota(resource stream_id, string qroot)\",\"Returns the quota set to the mailbox account qroot\"],imap_get_quotaroot:[\"array imap_get_quotaroot(resource stream_id, string mbox)\",\"Returns the quota set to the mailbox account mbox\"],imap_getacl:[\"array imap_getacl(resource stream_id, string mailbox)\",\"Gets the ACL for a given mailbox\"],imap_getmailboxes:[\"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"],imap_getsubscribed:[\"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"],imap_headerinfo:[\"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\"Read the headers of the message\"],imap_headers:[\"array imap_headers(resource stream_id)\",\"Returns headers for all messages in a mailbox\"],imap_last_error:[\"string imap_last_error(void)\",\"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"],imap_list:[\"array imap_list(resource stream_id, string ref, string pattern)\",\"Read the list of mailboxes\"],imap_listscan:[\"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\"Read list of mailboxes containing a certain string\"],imap_lsub:[\"array imap_lsub(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes\"],imap_mail:[\"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\"Send an email message\"],imap_mail_compose:[\"string imap_mail_compose(array envelope, array body)\",\"Create a MIME message based on given envelope and body sections\"],imap_mail_copy:[\"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\"Copy specified message to a mailbox\"],imap_mail_move:[\"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\"Move specified message to a mailbox\"],imap_mailboxmsginfo:[\"object imap_mailboxmsginfo(resource stream_id)\",\"Returns info about the current mailbox\"],imap_mime_header_decode:[\"array imap_mime_header_decode(string str)\",\"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"],imap_msgno:[\"int imap_msgno(resource stream_id, int unique_msg_id)\",\"Get the sequence number associated with a UID\"],imap_mutf7_to_utf8:[\"string imap_mutf7_to_utf8(string in)\",\"Decode a modified UTF-7 string to UTF-8\"],imap_num_msg:[\"int imap_num_msg(resource stream_id)\",\"Gives the number of messages in the current mailbox\"],imap_num_recent:[\"int imap_num_recent(resource stream_id)\",\"Gives the number of recent messages in current mailbox\"],imap_open:[\"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\"Open an IMAP stream to a mailbox\"],imap_ping:[\"bool imap_ping(resource stream_id)\",\"Check if the IMAP stream is still active\"],imap_qprint:[\"string imap_qprint(string text)\",\"Convert a quoted-printable string to an 8-bit string\"],imap_renamemailbox:[\"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\"Rename a mailbox\"],imap_reopen:[\"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\"Reopen an IMAP stream to a new mailbox\"],imap_rfc822_parse_adrlist:[\"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\"Parses an address string\"],imap_rfc822_parse_headers:[\"object imap_rfc822_parse_headers(string headers [, string default_host])\",\"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"],imap_rfc822_write_address:[\"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\"Returns a properly formatted email address given the mailbox, host, and personal info\"],imap_savebody:['bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \"\"[, int options = 0]])',\"Save a specific body section to a file\"],imap_search:[\"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\"Return a list of messages matching the given criteria\"],imap_set_quota:[\"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\"Will set the quota for qroot mailbox\"],imap_setacl:[\"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\"Sets the ACL for a given mailbox\"],imap_setflag_full:[\"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Sets flags on messages\"],imap_sort:[\"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\"Sort an array of message headers, optionally including only messages that meet specified criteria.\"],imap_status:[\"object imap_status(resource stream_id, string mailbox, int options)\",\"Get status info from a mailbox\"],imap_subscribe:[\"bool imap_subscribe(resource stream_id, string mailbox)\",\"Subscribe to a mailbox\"],imap_thread:[\"array imap_thread(resource stream_id [, int options])\",\"Return threaded by REFERENCES tree\"],imap_timeout:[\"mixed imap_timeout(int timeout_type [, int timeout])\",\"Set or fetch imap timeout\"],imap_uid:[\"int imap_uid(resource stream_id, int msg_no)\",\"Get the unique message id associated with a standard sequential message number\"],imap_undelete:[\"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\"Remove the delete flag from a message\"],imap_unsubscribe:[\"bool imap_unsubscribe(resource stream_id, string mailbox)\",\"Unsubscribe from a mailbox\"],imap_utf7_decode:[\"string imap_utf7_decode(string buf)\",\"Decode a modified UTF-7 string\"],imap_utf7_encode:[\"string imap_utf7_encode(string buf)\",\"Encode a string in modified UTF-7\"],imap_utf8:[\"string imap_utf8(string mime_encoded_text)\",\"Convert a mime-encoded text to UTF-8\"],imap_utf8_to_mutf7:[\"string imap_utf8_to_mutf7(string in)\",\"Encode a UTF-8 string to modified UTF-7\"],implode:[\"string implode([string glue,] array pieces)\",\"Joins array elements placing glue string between items and return one string\"],import_request_variables:[\"bool import_request_variables(string types [, string prefix])\",\"Import GET/POST/Cookie variables into the global scope\"],in_array:[\"bool in_array(mixed needle, array haystack [, bool strict])\",\"Checks if the given value exists in the array\"],include:[\"bool include(string path)\",\"Includes and evaluates the specified file\"],include_once:[\"bool include_once(string path)\",\"Includes and evaluates the specified file\"],inet_ntop:[\"string inet_ntop(string in_addr)\",\"Converts a packed inet address to a human readable IP address string\"],inet_pton:[\"string inet_pton(string ip_address)\",\"Converts a human readable IP address to a packed binary string\"],ini_get:[\"string ini_get(string varname)\",\"Get a configuration option\"],ini_get_all:[\"array ini_get_all([string extension[, bool details = true]])\",\"Get all configuration options\"],ini_restore:[\"void ini_restore(string varname)\",\"Restore the value of a configuration option specified by varname\"],ini_set:[\"string ini_set(string varname, string newvalue)\",\"Set a configuration option, returns false on error and the old value of the configuration option on success\"],interface_exists:[\"bool interface_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],intl_error_name:[\"string intl_error_name()\",\"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"],intl_get_error_code:[\"int intl_get_error_code()\",\"* Get code of the last occured error.\"],intl_get_error_message:[\"string intl_get_error_message()\",\"* Get text description of the last occured error.\"],intl_is_failure:[\"bool intl_is_failure()\",\"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"],intval:[\"int intval(mixed var [, int base])\",\"Get the integer value of a variable using the optional base for the conversion\"],ip2long:[\"int ip2long(string ip_address)\",\"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"],iptcembed:[\"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\"Embed binary IPTC data into a JPEG image.\"],iptcparse:[\"array iptcparse(string iptcdata)\",\"Parse binary IPTC-data into associative array\"],is_a:[\"bool is_a(object object, string class_name)\",\"Returns true if the object is of this class or has this class as one of its parents\"],is_array:[\"bool is_array(mixed var)\",\"Returns true if variable is an array\"],is_bool:[\"bool is_bool(mixed var)\",\"Returns true if variable is a boolean\"],is_callable:[\"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\"Returns true if var is callable.\"],is_dir:[\"bool is_dir(string filename)\",\"Returns true if file is directory\"],is_executable:[\"bool is_executable(string filename)\",\"Returns true if file is executable\"],is_file:[\"bool is_file(string filename)\",\"Returns true if file is a regular file\"],is_finite:[\"bool is_finite(float val)\",\"Returns whether argument is finite\"],is_float:[\"bool is_float(mixed var)\",\"Returns true if variable is float point\"],is_infinite:[\"bool is_infinite(float val)\",\"Returns whether argument is infinite\"],is_link:[\"bool is_link(string filename)\",\"Returns true if file is symbolic link\"],is_long:[\"bool is_long(mixed var)\",\"Returns true if variable is a long (integer)\"],is_nan:[\"bool is_nan(float val)\",\"Returns whether argument is not a number\"],is_null:[\"bool is_null(mixed var)\",\"Returns true if variable is null\"],is_numeric:[\"bool is_numeric(mixed value)\",\"Returns true if value is a number or a numeric string\"],is_object:[\"bool is_object(mixed var)\",\"Returns true if variable is an object\"],is_readable:[\"bool is_readable(string filename)\",\"Returns true if file can be read\"],is_resource:[\"bool is_resource(mixed var)\",\"Returns true if variable is a resource\"],is_scalar:[\"bool is_scalar(mixed value)\",\"Returns true if value is a scalar\"],is_string:[\"bool is_string(mixed var)\",\"Returns true if variable is a string\"],is_subclass_of:[\"bool is_subclass_of(object object, string class_name)\",\"Returns true if the object has this class as one of its parents\"],is_uploaded_file:[\"bool is_uploaded_file(string path)\",\"Check if file was created by rfc1867 upload\"],is_writable:[\"bool is_writable(string filename)\",\"Returns true if file can be written\"],isset:[\"bool isset(mixed var [, mixed var])\",\"Determine whether a variable is set\"],iterator_apply:[\"int iterator_apply(Traversable it, mixed function [, mixed params])\",\"Calls a function for every element in an iterator\"],iterator_count:[\"int iterator_count(Traversable it)\",\"Count the elements in an iterator\"],iterator_to_array:[\"array iterator_to_array(Traversable it [, bool use_keys = true])\",\"Copy the iterator into an array\"],jddayofweek:[\"mixed jddayofweek(int juliandaycount [, int mode])\",\"Returns name or number of day of week from julian day count\"],jdmonthname:[\"string jdmonthname(int juliandaycount, int mode)\",\"Returns name of month for julian day count\"],jdtofrench:[\"string jdtofrench(int juliandaycount)\",\"Converts a julian day count to a french republic calendar date\"],jdtogregorian:[\"string jdtogregorian(int juliandaycount)\",\"Converts a julian day count to a gregorian calendar date\"],jdtojewish:[\"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\"Converts a julian day count to a jewish calendar date\"],jdtojulian:[\"string jdtojulian(int juliandaycount)\",\"Convert a julian day count to a julian calendar date\"],jdtounix:[\"int jdtounix(int jday)\",\"Convert Julian Day to UNIX timestamp\"],jewishtojd:[\"int jewishtojd(int month, int day, int year)\",\"Converts a jewish calendar date to a julian day count\"],join:[\"string join(array src, string glue)\",\"An alias for implode\"],jpeg2wbmp:[\"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert JPEG image to WBMP image\"],json_decode:[\"mixed json_decode(string json [, bool assoc [, long depth]])\",\"Decodes the JSON representation into a PHP value\"],json_encode:[\"string json_encode(mixed data [, int options])\",\"Returns the JSON representation of a value\"],json_last_error:[\"int json_last_error()\",\"Returns the error code of the last json_decode().\"],juliantojd:[\"int juliantojd(int month, int day, int year)\",\"Converts a julian calendar date to julian day count\"],key:[\"mixed key(array array_arg)\",\"Return the key of the element currently pointed to by the internal array pointer\"],krsort:[\"bool krsort(array &array_arg [, int sort_flags])\",\"Sort an array by key value in reverse order\"],ksort:[\"bool ksort(array &array_arg [, int sort_flags])\",\"Sort an array by key\"],lcfirst:[\"string lcfirst(string str)\",\"Make a string's first character lowercase\"],lcg_value:[\"float lcg_value()\",\"Returns a value from the combined linear congruential generator\"],lchgrp:[\"bool lchgrp(string filename, mixed group)\",\"Change symlink group\"],ldap_8859_to_t61:[\"string ldap_8859_to_t61(string value)\",\"Translate 8859 characters to t61 characters\"],ldap_add:[\"bool ldap_add(resource link, string dn, array entry)\",\"Add entries to LDAP directory\"],ldap_bind:[\"bool ldap_bind(resource link [, string dn [, string password]])\",\"Bind to LDAP directory\"],ldap_compare:[\"bool ldap_compare(resource link, string dn, string attr, string value)\",\"Determine if an entry has a specific value for one of its attributes\"],ldap_connect:[\"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\"Connect to an LDAP server\"],ldap_count_entries:[\"int ldap_count_entries(resource link, resource result)\",\"Count the number of entries in a search result\"],ldap_delete:[\"bool ldap_delete(resource link, string dn)\",\"Delete an entry from a directory\"],ldap_dn2ufn:[\"string ldap_dn2ufn(string dn)\",\"Convert DN to User Friendly Naming format\"],ldap_err2str:[\"string ldap_err2str(int errno)\",\"Convert error number to error string\"],ldap_errno:[\"int ldap_errno(resource link)\",\"Get the current ldap error number\"],ldap_error:[\"string ldap_error(resource link)\",\"Get the current ldap error string\"],ldap_explode_dn:[\"array ldap_explode_dn(string dn, int with_attrib)\",\"Splits DN into its component parts\"],ldap_first_attribute:[\"string ldap_first_attribute(resource link, resource result_entry)\",\"Return first attribute\"],ldap_first_entry:[\"resource ldap_first_entry(resource link, resource result)\",\"Return first result id\"],ldap_first_reference:[\"resource ldap_first_reference(resource link, resource result)\",\"Return first reference\"],ldap_free_result:[\"bool ldap_free_result(resource result)\",\"Free result memory\"],ldap_get_attributes:[\"array ldap_get_attributes(resource link, resource result_entry)\",\"Get attributes from a search result entry\"],ldap_get_dn:[\"string ldap_get_dn(resource link, resource result_entry)\",\"Get the DN of a result entry\"],ldap_get_entries:[\"array ldap_get_entries(resource link, resource result)\",\"Get all result entries\"],ldap_get_option:[\"bool ldap_get_option(resource link, int option, mixed retval)\",\"Get the current value of various session-wide parameters\"],ldap_get_values_len:[\"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\"Get all values with lengths from a result entry\"],ldap_list:[\"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Single-level search\"],ldap_mod_add:[\"bool ldap_mod_add(resource link, string dn, array entry)\",\"Add attribute values to current\"],ldap_mod_del:[\"bool ldap_mod_del(resource link, string dn, array entry)\",\"Delete attribute values\"],ldap_mod_replace:[\"bool ldap_mod_replace(resource link, string dn, array entry)\",\"Replace attribute values with new ones\"],ldap_next_attribute:[\"string ldap_next_attribute(resource link, resource result_entry)\",\"Get the next attribute in result\"],ldap_next_entry:[\"resource ldap_next_entry(resource link, resource result_entry)\",\"Get next result entry\"],ldap_next_reference:[\"resource ldap_next_reference(resource link, resource reference_entry)\",\"Get next reference\"],ldap_parse_reference:[\"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\"Extract information from reference entry\"],ldap_parse_result:[\"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\"Extract information from result\"],ldap_read:[\"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Read an entry\"],ldap_rename:[\"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\"Modify the name of an entry\"],ldap_sasl_bind:[\"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\"Bind to LDAP directory using SASL\"],ldap_search:[\"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Search LDAP tree under base_dn\"],ldap_set_option:[\"bool ldap_set_option(resource link, int option, mixed newval)\",\"Set the value of various session-wide parameters\"],ldap_set_rebind_proc:[\"bool ldap_set_rebind_proc(resource link, string callback)\",\"Set a callback function to do re-binds on referral chasing.\"],ldap_sort:[\"bool ldap_sort(resource link, resource result, string sortfilter)\",\"Sort LDAP result entries\"],ldap_start_tls:[\"bool ldap_start_tls(resource link)\",\"Start TLS\"],ldap_t61_to_8859:[\"string ldap_t61_to_8859(string value)\",\"Translate t61 characters to 8859 characters\"],ldap_unbind:[\"bool ldap_unbind(resource link)\",\"Unbind from LDAP directory\"],leak:[\"void leak(int num_bytes=3)\",\"Cause an intentional memory leak, for testing/debugging purposes\"],levenshtein:[\"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\"Calculate Levenshtein distance between two strings\"],libxml_clear_errors:[\"void libxml_clear_errors()\",\"Clear last error from libxml\"],libxml_disable_entity_loader:[\"bool libxml_disable_entity_loader([boolean disable])\",\"Disable/Enable ability to load external entities\"],libxml_get_errors:[\"object libxml_get_errors()\",\"Retrieve array of errors\"],libxml_get_last_error:[\"object libxml_get_last_error()\",\"Retrieve last error from libxml\"],libxml_set_streams_context:[\"void libxml_set_streams_context(resource streams_context)\",\"Set the streams context for the next libxml document load or write\"],libxml_use_internal_errors:[\"bool libxml_use_internal_errors([boolean use_errors])\",\"Disable libxml errors and allow user to fetch error information as needed\"],link:[\"int link(string target, string link)\",\"Create a hard link\"],linkinfo:[\"int linkinfo(string filename)\",\"Returns the st_dev field of the UNIX C stat structure describing the link\"],litespeed_request_headers:[\"array litespeed_request_headers(void)\",\"Fetch all HTTP request headers\"],litespeed_response_headers:[\"array litespeed_response_headers(void)\",\"Fetch all HTTP response headers\"],locale_accept_from_http:[\"string locale_accept_from_http(string $http_accept)\",null],locale_canonicalize:[\"static string locale_canonicalize(Locale $loc, string $locale)\",\"* @param string $locale The locale string to canonicalize\"],locale_filter_matches:[\"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"],locale_get_all_variants:[\"static array locale_get_all_variants($locale)\",\"* gets an array containing the list of variants, or null\"],locale_get_default:[\"static string locale_get_default( )\",\"Get default locale\"],locale_get_keywords:[\"static array locale_get_keywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"],locale_get_primary_language:[\"static string locale_get_primary_language($locale)\",\"* gets the primary language for the $locale\"],locale_get_region:[\"static string locale_get_region($locale)\",\"* gets the region for the $locale\"],locale_get_script:[\"static string locale_get_script($locale)\",\"* gets the script for the $locale\"],locale_lookup:[\"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\"* Searchs the items in $langtag for the best match to the language * range\"],locale_set_default:[\"static string locale_set_default( string $locale )\",\"Set default locale\"],localeconv:[\"array localeconv(void)\",\"Returns numeric formatting information based on the current locale\"],localtime:[\"array localtime([int timestamp [, bool associative_array]])\",\"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"],log:[\"float log(float number, [float base])\",\"Returns the natural logarithm of the number, or the base log if base is specified\"],log10:[\"float log10(float number)\",\"Returns the base-10 logarithm of the number\"],log1p:[\"float log1p(float number)\",\"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"],long2ip:[\"string long2ip(int proper_address)\",\"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"],lstat:[\"array lstat(string filename)\",\"Give information about a file or symbolic link\"],ltrim:[\"string ltrim(string str [, string character_mask])\",\"Strips whitespace from the beginning of a string\"],mail:[\"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"Send an email message\"],max:[\"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the highest value in an array or a series of arguments\"],mb_check_encoding:[\"bool mb_check_encoding([string var[, string encoding]])\",\"Check if the string is valid for the specified encoding\"],mb_convert_case:[\"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\"Returns a case-folded version of sourcestring\"],mb_convert_encoding:[\"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\"Returns converted string in desired encoding\"],mb_convert_kana:[\"string mb_convert_kana(string str [, string option] [, string encoding])\",\"Conversion between full-width character and half-width character (Japanese)\"],mb_convert_variables:[\"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\"Converts the string resource in variables to desired encoding\"],mb_decode_mimeheader:[\"string mb_decode_mimeheader(string string)\",'Decodes the MIME \"encoded-word\" in the string'],mb_decode_numericentity:[\"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\"Converts HTML numeric entities to character code\"],mb_detect_encoding:[\"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\"Encodings of the given string is returned (as a string)\"],mb_detect_order:[\"bool|array mb_detect_order([mixed encoding-list])\",\"Sets the current detect_order or Return the current detect_order as a array\"],mb_encode_mimeheader:[\"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",'Converts the string to MIME \"encoded-word\" in the format of =?charset?(B|Q)?encoded_string?='],mb_encode_numericentity:[\"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\"Converts specified characters to HTML numeric entities\"],mb_encoding_aliases:[\"array mb_encoding_aliases(string encoding)\",\"Returns an array of the aliases of a given encoding name\"],mb_ereg:[\"int mb_ereg(string pattern, string string [, array registers])\",\"Regular expression match for multibyte string\"],mb_ereg_match:[\"bool mb_ereg_match(string pattern, string string [,string option])\",\"Regular expression match for multibyte string\"],mb_ereg_replace:[\"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\"Replace regular expression for multibyte string\"],mb_ereg_search:[\"bool mb_ereg_search([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_getpos:[\"int mb_ereg_search_getpos(void)\",\"Get search start position\"],mb_ereg_search_getregs:[\"array mb_ereg_search_getregs(void)\",\"Get matched substring of the last time\"],mb_ereg_search_init:[\"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\"Initialize string and regular expression for search.\"],mb_ereg_search_pos:[\"array mb_ereg_search_pos([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_regs:[\"array mb_ereg_search_regs([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_setpos:[\"bool mb_ereg_search_setpos(int position)\",\"Set search start position\"],mb_eregi:[\"int mb_eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match for multibyte string\"],mb_eregi_replace:[\"string mb_eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression for multibyte string\"],mb_get_info:[\"mixed mb_get_info([string type])\",\"Returns the current settings of mbstring\"],mb_http_input:[\"mixed mb_http_input([string type])\",\"Returns the input encoding\"],mb_http_output:[\"string mb_http_output([string encoding])\",\"Sets the current output_encoding or returns the current output_encoding as a string\"],mb_internal_encoding:[\"string mb_internal_encoding([string encoding])\",\"Sets the current internal encoding or Returns the current internal encoding as a string\"],mb_language:[\"string mb_language([string language])\",\"Sets the current language or Returns the current language as a string\"],mb_list_encodings:[\"mixed mb_list_encodings()\",\"Returns an array of all supported entity encodings\"],mb_output_handler:[\"string mb_output_handler(string contents, int status)\",\"Returns string in output buffer converted to the http_output encoding\"],mb_parse_str:[\"bool mb_parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],mb_preferred_mime_name:[\"string mb_preferred_mime_name(string encoding)\",\"Return the preferred MIME name (charset) as a string\"],mb_regex_encoding:[\"string mb_regex_encoding([string encoding])\",\"Returns the current encoding for regex as a string.\"],mb_regex_set_options:[\"string mb_regex_set_options([string options])\",\"Set or get the default options for mbregex functions\"],mb_send_mail:[\"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"*  Sends an email message with MIME scheme\"],mb_split:[\"array mb_split(string pattern, string string [, int limit])\",\"split multibyte string into array by regular expression\"],mb_strcut:[\"string mb_strcut(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_strimwidth:[\"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\"Trim the string in terminal width\"],mb_stripos:[\"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of first occurrence of a string within another, case insensitive\"],mb_stristr:[\"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another, case insensitive\"],mb_strlen:[\"int mb_strlen(string str [, string encoding])\",\"Get character numbers of a string\"],mb_strpos:[\"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of first occurrence of a string within another\"],mb_strrchr:[\"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another\"],mb_strrichr:[\"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another, case insensitive\"],mb_strripos:[\"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of last occurrence of a string within another, case insensitive\"],mb_strrpos:[\"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of last occurrence of a string within another\"],mb_strstr:[\"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another\"],mb_strtolower:[\"string mb_strtolower(string sourcestring [, string encoding])\",\"*  Returns a lowercased version of sourcestring\"],mb_strtoupper:[\"string mb_strtoupper(string sourcestring [, string encoding])\",\"*  Returns a uppercased version of sourcestring\"],mb_strwidth:[\"int mb_strwidth(string str [, string encoding])\",\"Gets terminal width of a string\"],mb_substitute_character:[\"mixed mb_substitute_character([mixed substchar])\",\"Sets the current substitute_character or returns the current substitute_character\"],mb_substr:[\"string mb_substr(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_substr_count:[\"int mb_substr_count(string haystack, string needle [, string encoding])\",\"Count the number of substring occurrences\"],mcrypt_cbc:[\"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_cfb:[\"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_create_iv:[\"string mcrypt_create_iv(int size, int source)\",\"Create an initialization vector (IV)\"],mcrypt_decrypt:[\"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_ecb:[\"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_enc_get_algorithms_name:[\"string mcrypt_enc_get_algorithms_name(resource td)\",\"Returns the name of the algorithm specified by the descriptor td\"],mcrypt_enc_get_block_size:[\"int mcrypt_enc_get_block_size(resource td)\",\"Returns the block size of the cipher specified by the descriptor td\"],mcrypt_enc_get_iv_size:[\"int mcrypt_enc_get_iv_size(resource td)\",\"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_key_size:[\"int mcrypt_enc_get_key_size(resource td)\",\"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_modes_name:[\"string mcrypt_enc_get_modes_name(resource td)\",\"Returns the name of the mode specified by the descriptor td\"],mcrypt_enc_get_supported_key_sizes:[\"array mcrypt_enc_get_supported_key_sizes(resource td)\",\"This function decrypts the crypttext\"],mcrypt_enc_is_block_algorithm:[\"bool mcrypt_enc_is_block_algorithm(resource td)\",\"Returns TRUE if the alrogithm is a block algorithms\"],mcrypt_enc_is_block_algorithm_mode:[\"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_enc_is_block_mode:[\"bool mcrypt_enc_is_block_mode(resource td)\",\"Returns TRUE if the mode outputs blocks\"],mcrypt_enc_self_test:[\"int mcrypt_enc_self_test(resource td)\",\"This function runs the self test on the algorithm specified by the descriptor td\"],mcrypt_encrypt:[\"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_generic:[\"string mcrypt_generic(resource td, string data)\",\"This function encrypts the plaintext\"],mcrypt_generic_deinit:[\"bool mcrypt_generic_deinit(resource td)\",\"This function terminates encrypt specified by the descriptor td\"],mcrypt_generic_init:[\"int mcrypt_generic_init(resource td, string key, string iv)\",\"This function initializes all buffers for the specific module\"],mcrypt_get_block_size:[\"int mcrypt_get_block_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_get_cipher_name:[\"string mcrypt_get_cipher_name(string cipher)\",\"Get the key size of cipher\"],mcrypt_get_iv_size:[\"int mcrypt_get_iv_size(string cipher, string module)\",\"Get the IV size of cipher (Usually the same as the blocksize)\"],mcrypt_get_key_size:[\"int mcrypt_get_key_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_list_algorithms:[\"array mcrypt_list_algorithms([string lib_dir])\",'List all algorithms in \"module_dir\"'],mcrypt_list_modes:[\"array mcrypt_list_modes([string lib_dir])\",'List all modes \"module_dir\"'],mcrypt_module_close:[\"bool mcrypt_module_close(resource td)\",\"Free the descriptor td\"],mcrypt_module_get_algo_block_size:[\"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\"Returns the block size of the algorithm\"],mcrypt_module_get_algo_key_size:[\"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\"Returns the maximum supported key size of the algorithm\"],mcrypt_module_get_supported_key_sizes:[\"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\"This function decrypts the crypttext\"],mcrypt_module_is_block_algorithm:[\"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\"Returns TRUE if the algorithm is a block algorithm\"],mcrypt_module_is_block_algorithm_mode:[\"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_module_is_block_mode:[\"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode outputs blocks of bytes\"],mcrypt_module_open:[\"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\"Opens the module of the algorithm and the mode to be used\"],mcrypt_module_self_test:[\"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",'Does a self test of the module \"module\"'],mcrypt_ofb:[\"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],md5:[\"string md5(string str, [ bool raw_output])\",\"Calculate the md5 hash of a string\"],md5_file:[\"string md5_file(string filename [, bool raw_output])\",\"Calculate the md5 hash of given filename\"],mdecrypt_generic:[\"string mdecrypt_generic(resource td, string data)\",\"This function decrypts the plaintext\"],memory_get_peak_usage:[\"int memory_get_peak_usage([real_usage])\",\"Returns the peak allocated by PHP memory\"],memory_get_usage:[\"int memory_get_usage([real_usage])\",\"Returns the allocated by PHP memory\"],metaphone:[\"string metaphone(string text[, int phones])\",\"Break english phrases down into their phonemes\"],method_exists:[\"bool method_exists(object object, string method)\",\"Checks if the class method exists\"],mhash:[\"string mhash(int hash, string data [, string key])\",\"Hash data with hash\"],mhash_count:[\"int mhash_count(void)\",\"Gets the number of available hashes\"],mhash_get_block_size:[\"int mhash_get_block_size(int hash)\",\"Gets the block size of hash\"],mhash_get_hash_name:[\"string mhash_get_hash_name(int hash)\",\"Gets the name of hash\"],mhash_keygen_s2k:[\"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\"Generates a key using hash functions\"],microtime:[\"mixed microtime([bool get_as_float])\",\"Returns either a string or a float containing the current time in seconds and microseconds\"],mime_content_type:[\"string mime_content_type(string filename|resource stream)\",\"Return content-type for file\"],min:[\"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the lowest value in an array or a series of arguments\"],mkdir:[\"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\"Create a directory\"],mktime:[\"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a date\"],money_format:[\"string money_format(string format , float value)\",\"Convert monetary value(s) to string\"],move_uploaded_file:[\"bool move_uploaded_file(string path, string new_path)\",\"Move a file if and only if it was created by an upload\"],msg_get_queue:[\"resource msg_get_queue(int key [, int perms])\",\"Attach to a message queue\"],msg_queue_exists:[\"bool msg_queue_exists(int key)\",\"Check whether a message queue exists\"],msg_receive:[\"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_remove_queue:[\"bool msg_remove_queue(resource queue)\",\"Destroy the queue\"],msg_send:[\"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_set_queue:[\"bool msg_set_queue(resource queue, array data)\",\"Set information for a message queue\"],msg_stat_queue:[\"array msg_stat_queue(resource queue)\",\"Returns information about a message queue\"],msgfmt_create:[\"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\"* Create formatter.\"],msgfmt_format:[\"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\"* Format a message.\"],msgfmt_format_message:[\"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\"* Format a message.\"],msgfmt_get_error_code:[\"int msgfmt_get_error_code( MessageFormatter $nf )\",\"* Get formatter's last error code.\"],msgfmt_get_error_message:[\"string msgfmt_get_error_message( MessageFormatter $coll )\",\"* Get text description for formatter's last error code.\"],msgfmt_get_locale:[\"string msgfmt_get_locale(MessageFormatter $mf)\",\"* Get formatter locale.\"],msgfmt_get_pattern:[\"string msgfmt_get_pattern( MessageFormatter $mf )\",\"* Get formatter pattern.\"],msgfmt_parse:[\"array msgfmt_parse( MessageFormatter $nf, string $source )\",\"* Parse a message.\"],msgfmt_set_pattern:[\"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],mssql_bind:[\"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\"Adds a parameter to a stored procedure or a remote stored procedure\"],mssql_close:[\"bool mssql_close([resource conn_id])\",\"Closes a connection to a MS-SQL server\"],mssql_connect:[\"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a connection to a MS-SQL server\"],mssql_data_seek:[\"bool mssql_data_seek(resource result_id, int offset)\",\"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"],mssql_execute:[\"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\"Executes a stored procedure on a MS-SQL server database\"],mssql_fetch_array:[\"array mssql_fetch_array(resource result_id [, int result_type])\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_assoc:[\"array mssql_fetch_assoc(resource result_id)\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_batch:[\"int mssql_fetch_batch(resource result_index)\",\"Returns the next batch of records\"],mssql_fetch_field:[\"object mssql_fetch_field(resource result_id [, int offset])\",\"Gets information about certain fields in a query result\"],mssql_fetch_object:[\"object mssql_fetch_object(resource result_id)\",\"Returns a pseudo-object of the current row in the result set specified by result_id\"],mssql_fetch_row:[\"array mssql_fetch_row(resource result_id)\",\"Returns an array of the current row in the result set specified by result_id\"],mssql_field_length:[\"int mssql_field_length(resource result_id [, int offset])\",\"Get the length of a MS-SQL field\"],mssql_field_name:[\"string mssql_field_name(resource result_id [, int offset])\",\"Returns the name of the field given by offset in the result set given by result_id\"],mssql_field_seek:[\"bool mssql_field_seek(resource result_id, int offset)\",\"Seeks to the specified field offset\"],mssql_field_type:[\"string mssql_field_type(resource result_id [, int offset])\",\"Returns the type of a field\"],mssql_free_result:[\"bool mssql_free_result(resource result_index)\",\"Free a MS-SQL result index\"],mssql_free_statement:[\"bool mssql_free_statement(resource result_index)\",\"Free a MS-SQL statement index\"],mssql_get_last_message:[\"string mssql_get_last_message(void)\",\"Gets the last message from the MS-SQL server\"],mssql_guid_string:[\"string mssql_guid_string(string binary [,bool short_format])\",\"Converts a 16 byte binary GUID to a string\"],mssql_init:[\"int mssql_init(string sp_name [, resource conn_id])\",\"Initializes a stored procedure or a remote stored procedure\"],mssql_min_error_severity:[\"void mssql_min_error_severity(int severity)\",\"Sets the lower error severity\"],mssql_min_message_severity:[\"void mssql_min_message_severity(int severity)\",\"Sets the lower message severity\"],mssql_next_result:[\"bool mssql_next_result(resource result_id)\",\"Move the internal result pointer to the next result\"],mssql_num_fields:[\"int mssql_num_fields(resource mssql_result_index)\",\"Returns the number of fields fetched in from the result id specified\"],mssql_num_rows:[\"int mssql_num_rows(resource mssql_result_index)\",\"Returns the number of rows fetched in from the result id specified\"],mssql_pconnect:[\"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a persistent connection to a MS-SQL server\"],mssql_query:[\"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\"Perform an SQL query on a MS-SQL server database\"],mssql_result:[\"string mssql_result(resource result_id, int row, mixed field)\",\"Returns the contents of one cell from a MS-SQL result set\"],mssql_rows_affected:[\"int mssql_rows_affected(resource conn_id)\",\"Returns the number of records affected by the query\"],mssql_select_db:[\"bool mssql_select_db(string database_name [, resource conn_id])\",\"Select a MS-SQL database\"],mt_getrandmax:[\"int mt_getrandmax(void)\",\"Returns the maximum value a random number from Mersenne Twister can have\"],mt_rand:[\"int mt_rand([int min, int max])\",\"Returns a random number from Mersenne Twister\"],mt_srand:[\"void mt_srand([int seed])\",\"Seeds Mersenne Twister random number generator\"],mysql_affected_rows:[\"int mysql_affected_rows([int link_identifier])\",\"Gets number of affected rows in previous MySQL operation\"],mysql_client_encoding:[\"string mysql_client_encoding([int link_identifier])\",\"Returns the default character set for the current connection\"],mysql_close:[\"bool mysql_close([int link_identifier])\",\"Close a MySQL connection\"],mysql_connect:[\"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\"Opens a connection to a MySQL Server\"],mysql_create_db:[\"bool mysql_create_db(string database_name [, int link_identifier])\",\"Create a MySQL database\"],mysql_data_seek:[\"bool mysql_data_seek(resource result, int row_number)\",\"Move internal result pointer\"],mysql_db_query:[\"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_drop_db:[\"bool mysql_drop_db(string database_name [, int link_identifier])\",\"Drops (delete) a MySQL database\"],mysql_errno:[\"int mysql_errno([int link_identifier])\",\"Returns the number of the error message from previous MySQL operation\"],mysql_error:[\"string mysql_error([int link_identifier])\",\"Returns the text of the error message from previous MySQL operation\"],mysql_escape_string:[\"string mysql_escape_string(string to_be_escaped)\",\"Escape string for mysql query\"],mysql_fetch_array:[\"array mysql_fetch_array(resource result [, int result_type])\",\"Fetch a result row as an array (associative, numeric or both)\"],mysql_fetch_assoc:[\"array mysql_fetch_assoc(resource result)\",\"Fetch a result row as an associative array\"],mysql_fetch_field:[\"object mysql_fetch_field(resource result [, int field_offset])\",\"Gets column information from a result and return as an object\"],mysql_fetch_lengths:[\"array mysql_fetch_lengths(resource result)\",\"Gets max data size of each column in a result\"],mysql_fetch_object:[\"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysql_fetch_row:[\"array mysql_fetch_row(resource result)\",\"Gets a result row as an enumerated array\"],mysql_field_flags:[\"string mysql_field_flags(resource result, int field_offset)\",\"Gets the flags associated with the specified field in a result\"],mysql_field_len:[\"int mysql_field_len(resource result, int field_offset)\",\"Returns the length of the specified field\"],mysql_field_name:[\"string mysql_field_name(resource result, int field_index)\",\"Gets the name of the specified field in a result\"],mysql_field_seek:[\"bool mysql_field_seek(resource result, int field_offset)\",\"Sets result pointer to a specific field offset\"],mysql_field_table:[\"string mysql_field_table(resource result, int field_offset)\",\"Gets name of the table the specified field is in\"],mysql_field_type:[\"string mysql_field_type(resource result, int field_offset)\",\"Gets the type of the specified field in a result\"],mysql_free_result:[\"bool mysql_free_result(resource result)\",\"Free result memory\"],mysql_get_client_info:[\"string mysql_get_client_info(void)\",\"Returns a string that represents the client library version\"],mysql_get_host_info:[\"string mysql_get_host_info([int link_identifier])\",\"Returns a string describing the type of connection in use, including the server host name\"],mysql_get_proto_info:[\"int mysql_get_proto_info([int link_identifier])\",\"Returns the protocol version used by current connection\"],mysql_get_server_info:[\"string mysql_get_server_info([int link_identifier])\",\"Returns a string that represents the server version number\"],mysql_info:[\"string mysql_info([int link_identifier])\",\"Returns a string containing information about the most recent query\"],mysql_insert_id:[\"int mysql_insert_id([int link_identifier])\",\"Gets the ID generated from the previous INSERT operation\"],mysql_list_dbs:[\"resource mysql_list_dbs([int link_identifier])\",\"List databases available on a MySQL server\"],mysql_list_fields:[\"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\"List MySQL result fields\"],mysql_list_processes:[\"resource mysql_list_processes([int link_identifier])\",\"Returns a result set describing the current server threads\"],mysql_list_tables:[\"resource mysql_list_tables(string database_name [, int link_identifier])\",\"List tables in a MySQL database\"],mysql_num_fields:[\"int mysql_num_fields(resource result)\",\"Gets number of fields in a result\"],mysql_num_rows:[\"int mysql_num_rows(resource result)\",\"Gets number of rows in a result\"],mysql_pconnect:[\"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\"Opens a persistent connection to a MySQL Server\"],mysql_ping:[\"bool mysql_ping([int link_identifier])\",\"Ping a server connection. If no connection then reconnect.\"],mysql_query:[\"resource mysql_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_real_escape_string:[\"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysql_result:[\"mixed mysql_result(resource result, int row [, mixed field])\",\"Gets result data\"],mysql_select_db:[\"bool mysql_select_db(string database_name [, int link_identifier])\",\"Selects a MySQL database\"],mysql_set_charset:[\"bool mysql_set_charset(string csname [, int link_identifier])\",\"sets client character set\"],mysql_stat:[\"string mysql_stat([int link_identifier])\",\"Returns a string containing status information\"],mysql_thread_id:[\"int mysql_thread_id([int link_identifier])\",\"Returns the thread id of current connection\"],mysql_unbuffered_query:[\"resource mysql_unbuffered_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL, without fetching and buffering the result rows\"],mysqli_affected_rows:[\"mixed mysqli_affected_rows(object link)\",\"Get number of affected rows in previous MySQL operation\"],mysqli_autocommit:[\"bool mysqli_autocommit(object link, bool mode)\",\"Turn auto commit on or of\"],mysqli_cache_stats:[\"array mysqli_cache_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_change_user:[\"bool mysqli_change_user(object link, string user, string password, string database)\",\"Change logged-in user of the active connection\"],mysqli_character_set_name:[\"string mysqli_character_set_name(object link)\",\"Returns the name of the character set used for this connection\"],mysqli_close:[\"bool mysqli_close(object link)\",\"Close connection\"],mysqli_commit:[\"bool mysqli_commit(object link)\",\"Commit outstanding actions and close transaction\"],mysqli_connect:[\"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\"Open a connection to a mysql server\"],mysqli_connect_errno:[\"int mysqli_connect_errno(void)\",\"Returns the numerical value of the error message from last connect command\"],mysqli_connect_error:[\"string mysqli_connect_error(void)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_data_seek:[\"bool mysqli_data_seek(object result, int offset)\",\"Move internal result pointer\"],mysqli_debug:[\"void mysqli_debug(string debug)\",\"\"],mysqli_dump_debug_info:[\"bool mysqli_dump_debug_info(object link)\",\"\"],mysqli_embedded_server_end:[\"void mysqli_embedded_server_end(void)\",\"\"],mysqli_embedded_server_start:[\"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\"initialize and start embedded server\"],mysqli_errno:[\"int mysqli_errno(object link)\",\"Returns the numerical value of the error message from previous MySQL operation\"],mysqli_error:[\"string mysqli_error(object link)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_fetch_all:[\"mixed mysqli_fetch_all (object result [,int resulttype])\",\"Fetches all result rows as an associative array, a numeric array, or both\"],mysqli_fetch_array:[\"mixed mysqli_fetch_array (object result [,int resulttype])\",\"Fetch a result row as an associative array, a numeric array, or both\"],mysqli_fetch_assoc:[\"mixed mysqli_fetch_assoc (object result)\",\"Fetch a result row as an associative array\"],mysqli_fetch_field:[\"mixed mysqli_fetch_field (object result)\",\"Get column information from a result and return as an object\"],mysqli_fetch_field_direct:[\"mixed mysqli_fetch_field_direct (object result, int offset)\",\"Fetch meta-data for a single field\"],mysqli_fetch_fields:[\"mixed mysqli_fetch_fields (object result)\",\"Return array of objects containing field meta-data\"],mysqli_fetch_lengths:[\"mixed mysqli_fetch_lengths (object result)\",\"Get the length of each output in a result\"],mysqli_fetch_object:[\"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysqli_fetch_row:[\"array mysqli_fetch_row (object result)\",\"Get a result row as an enumerated array\"],mysqli_field_count:[\"int mysqli_field_count(object link)\",\"Fetch the number of fields returned by the last query for the given link\"],mysqli_field_seek:[\"int mysqli_field_seek(object result, int fieldnr)\",\"Set result pointer to a specified field offset\"],mysqli_field_tell:[\"int mysqli_field_tell(object result)\",\"Get current field offset of result pointer\"],mysqli_free_result:[\"void mysqli_free_result(object result)\",\"Free query result memory for the given result handle\"],mysqli_get_charset:[\"object mysqli_get_charset(object link)\",\"returns a character set object\"],mysqli_get_client_info:[\"string mysqli_get_client_info(void)\",\"Get MySQL client info\"],mysqli_get_client_stats:[\"array mysqli_get_client_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_client_version:[\"int mysqli_get_client_version(void)\",\"Get MySQL client info\"],mysqli_get_connection_stats:[\"array mysqli_get_connection_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_host_info:[\"string mysqli_get_host_info (object link)\",\"Get MySQL host info\"],mysqli_get_proto_info:[\"int mysqli_get_proto_info(object link)\",\"Get MySQL protocol information\"],mysqli_get_server_info:[\"string mysqli_get_server_info(object link)\",\"Get MySQL server info\"],mysqli_get_server_version:[\"int mysqli_get_server_version(object link)\",\"Return the MySQL version for the server referenced by the given link\"],mysqli_get_warnings:[\"object mysqli_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}'],mysqli_info:[\"string mysqli_info(object link)\",\"Get information about the most recent query\"],mysqli_init:[\"resource mysqli_init(void)\",\"Initialize mysqli and return a resource for use with mysql_real_connect\"],mysqli_insert_id:[\"mixed mysqli_insert_id(object link)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_kill:[\"bool mysqli_kill(object link, int processid)\",\"Kill a mysql process on the server\"],mysqli_link_construct:[\"object mysqli_link_construct()\",\"\"],mysqli_more_results:[\"bool mysqli_more_results(object link)\",\"check if there any more query results from a multi query\"],mysqli_multi_query:[\"bool mysqli_multi_query(object link, string query)\",\"allows to execute multiple queries\"],mysqli_next_result:[\"bool mysqli_next_result(object link)\",\"read next result from multi_query\"],mysqli_num_fields:[\"int mysqli_num_fields(object result)\",\"Get number of fields in result\"],mysqli_num_rows:[\"mixed mysqli_num_rows(object result)\",\"Get number of rows in result\"],mysqli_options:[\"bool mysqli_options(object link, int flags, mixed values)\",\"Set options\"],mysqli_ping:[\"bool mysqli_ping(object link)\",\"Ping a server connection or reconnect if there is no connection\"],mysqli_poll:[\"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\"Poll connections\"],mysqli_prepare:[\"mixed mysqli_prepare(object link, string query)\",\"Prepare a SQL statement for execution\"],mysqli_query:[\"mixed mysqli_query(object link, string query [,int resultmode]) */\",'PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Os|l\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Empty query\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid value for resultmode\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT'],mysqli_real_connect:[\"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\"Open a connection to a mysql server\"],mysqli_real_escape_string:[\"string mysqli_real_escape_string(object link, string escapestr)\",\"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysqli_real_query:[\"bool mysqli_real_query(object link, string query)\",\"Binary-safe version of mysql_query()\"],mysqli_reap_async_query:[\"int mysqli_reap_async_query(object link)\",\"Poll connections\"],mysqli_refresh:[\"bool mysqli_refresh(object link, long options)\",\"Flush tables or caches, or reset replication server information\"],mysqli_report:[\"bool mysqli_report(int flags)\",\"sets report level\"],mysqli_rollback:[\"bool mysqli_rollback(object link)\",\"Undo actions from current transaction\"],mysqli_select_db:[\"bool mysqli_select_db(object link, string dbname)\",\"Select a MySQL database\"],mysqli_set_charset:[\"bool mysqli_set_charset(object link, string csname)\",\"sets client character set\"],mysqli_set_local_infile_default:[\"void mysqli_set_local_infile_default(object link)\",\"unsets user defined handler for load local infile command\"],mysqli_set_local_infile_handler:[\"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\"Set callback functions for LOAD DATA LOCAL INFILE\"],mysqli_sqlstate:[\"string mysqli_sqlstate(object link)\",\"Returns the SQLSTATE error from previous MySQL operation\"],mysqli_ssl_set:[\"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\"\"],mysqli_stat:[\"mixed mysqli_stat(object link)\",\"Get current system status\"],mysqli_stmt_affected_rows:[\"mixed mysqli_stmt_affected_rows(object stmt)\",\"Return the number of rows affected in the last query for the given link\"],mysqli_stmt_attr_get:[\"int mysqli_stmt_attr_get(object stmt, long attr)\",\"\"],mysqli_stmt_attr_set:[\"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\"\"],mysqli_stmt_bind_param:[\"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\"Bind variables to a prepared statement as parameters\"],mysqli_stmt_bind_result:[\"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\"Bind variables to a prepared statement for result storage\"],mysqli_stmt_close:[\"bool mysqli_stmt_close(object stmt)\",\"Close statement\"],mysqli_stmt_data_seek:[\"void mysqli_stmt_data_seek(object stmt, int offset)\",\"Move internal result pointer\"],mysqli_stmt_errno:[\"int mysqli_stmt_errno(object stmt)\",\"\"],mysqli_stmt_error:[\"string mysqli_stmt_error(object stmt)\",\"\"],mysqli_stmt_execute:[\"bool mysqli_stmt_execute(object stmt)\",\"Execute a prepared statement\"],mysqli_stmt_fetch:[\"mixed mysqli_stmt_fetch(object stmt)\",\"Fetch results from a prepared statement into the bound variables\"],mysqli_stmt_field_count:[\"int mysqli_stmt_field_count(object stmt) {\",\"Return the number of result columns for the given statement\"],mysqli_stmt_free_result:[\"void mysqli_stmt_free_result(object stmt)\",\"Free stored result memory for the given statement handle\"],mysqli_stmt_get_result:[\"object mysqli_stmt_get_result(object link)\",\"Buffer result set on client\"],mysqli_stmt_get_warnings:[\"object mysqli_stmt_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \"mysqli_stmt\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_stmt_init:[\"mixed mysqli_stmt_init(object link)\",\"Initialize statement object\"],mysqli_stmt_insert_id:[\"mixed mysqli_stmt_insert_id(object stmt)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_stmt_next_result:[\"bool mysqli_stmt_next_result(object link)\",\"read next result from multi_query\"],mysqli_stmt_num_rows:[\"mixed mysqli_stmt_num_rows(object stmt)\",\"Return the number of rows in statements result set\"],mysqli_stmt_param_count:[\"int mysqli_stmt_param_count(object stmt)\",\"Return the number of parameter for the given statement\"],mysqli_stmt_prepare:[\"bool mysqli_stmt_prepare(object stmt, string query)\",\"prepare server side statement with query\"],mysqli_stmt_reset:[\"bool mysqli_stmt_reset(object stmt)\",\"reset a prepared statement\"],mysqli_stmt_result_metadata:[\"mixed mysqli_stmt_result_metadata(object stmt)\",\"return result set from statement\"],mysqli_stmt_send_long_data:[\"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\"\"],mysqli_stmt_sqlstate:[\"string mysqli_stmt_sqlstate(object stmt)\",\"\"],mysqli_stmt_store_result:[\"bool mysqli_stmt_store_result(stmt)\",\"\"],mysqli_store_result:[\"object mysqli_store_result(object link)\",\"Buffer result set on client\"],mysqli_thread_id:[\"int mysqli_thread_id(object link)\",\"Return the current thread ID\"],mysqli_thread_safe:[\"bool mysqli_thread_safe(void)\",\"Return whether thread safety is given or not\"],mysqli_use_result:[\"mixed mysqli_use_result(object link)\",\"Directly retrieve query results - do not buffer results on client side\"],mysqli_warning_count:[\"int mysqli_warning_count (object link)\",\"Return number of warnings from the last query for the given link\"],natcasesort:[\"void natcasesort(array &array_arg)\",\"Sort an array using case-insensitive natural sort\"],natsort:[\"void natsort(array &array_arg)\",\"Sort an array using natural sort\"],next:[\"mixed next(array array_arg)\",\"Move array argument's internal pointer to the next element and return it\"],ngettext:[\"string ngettext(string MSGID1, string MSGID2, int N)\",\"Plural version of gettext()\"],nl2br:[\"string nl2br(string str [, bool is_xhtml])\",\"Converts newlines to HTML line breaks\"],nl_langinfo:[\"string nl_langinfo(int item)\",\"Query language and locale information\"],normalizer_is_normalize:[\"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\"* Test if a string is in a given normalization form.\"],normalizer_normalize:[\"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\"* Normalize a string.\"],nsapi_request_headers:[\"array nsapi_request_headers(void)\",\"Get all headers from the request\"],nsapi_response_headers:[\"array nsapi_response_headers(void)\",\"Get all headers from the response\"],nsapi_virtual:[\"bool nsapi_virtual(string uri)\",\"Perform an NSAPI sub-request\"],number_format:[\"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\"Formats a number with grouped thousands\"],numfmt_create:[\"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\"* Create number formatter.\"],numfmt_format:[\"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\"* Format a number.\"],numfmt_format_currency:[\"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\"* Format a number as currency.\"],numfmt_get_attribute:[\"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_get_error_code:[\"int numfmt_get_error_code( NumberFormatter $nf )\",\"* Get formatter's last error code.\"],numfmt_get_error_message:[\"string numfmt_get_error_message( NumberFormatter $nf )\",\"* Get text description for formatter's last error code.\"],numfmt_get_locale:[\"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\"* Get formatter locale.\"],numfmt_get_pattern:[\"string numfmt_get_pattern( NumberFormatter $nf )\",\"* Get formatter pattern.\"],numfmt_get_symbol:[\"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\"* Get formatter symbol value.\"],numfmt_get_text_attribute:[\"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_parse:[\"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\"* Parse a number.\"],numfmt_parse_currency:[\"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\"* Parse a number as currency.\"],numfmt_parse_message:[\"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\"* Parse a message.\"],numfmt_set_attribute:[\"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\"* Get formatter attribute value.\"],numfmt_set_pattern:[\"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\"* Set formatter pattern.\"],numfmt_set_symbol:[\"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\"* Set formatter symbol value.\"],numfmt_set_text_attribute:[\"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\"* Get formatter attribute value.\"],ob_clean:[\"bool ob_clean(void)\",\"Clean (delete) the current output buffer\"],ob_end_clean:[\"bool ob_end_clean(void)\",\"Clean the output buffer, and delete current output buffer\"],ob_end_flush:[\"bool ob_end_flush(void)\",\"Flush (send) the output buffer, and delete current output buffer\"],ob_flush:[\"bool ob_flush(void)\",\"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"],ob_get_clean:[\"bool ob_get_clean(void)\",\"Get current buffer contents and delete current output buffer\"],ob_get_contents:[\"string ob_get_contents(void)\",\"Return the contents of the output buffer\"],ob_get_flush:[\"bool ob_get_flush(void)\",\"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"],ob_get_length:[\"int ob_get_length(void)\",\"Return the length of the output buffer\"],ob_get_level:[\"int ob_get_level(void)\",\"Return the nesting level of the output buffer\"],ob_get_status:[\"false|array ob_get_status([bool full_status])\",\"Return the status of the active or all output buffers\"],ob_gzhandler:[\"string ob_gzhandler(string str, int mode)\",\"Encode str based on accept-encoding setting - designed to be called from ob_start()\"],ob_iconv_handler:[\"string ob_iconv_handler(string contents, int status)\",\"Returns str in output buffer converted to the iconv.output_encoding character set\"],ob_implicit_flush:[\"void ob_implicit_flush([int flag])\",\"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"],ob_list_handlers:[\"false|array ob_list_handlers()\",\"*  List all output_buffers in an array\"],ob_start:[\"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\"Turn on Output Buffering (specifying an optional output handler).\"],oci_bind_array_by_name:[\"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\"Bind a PHP array to an Oracle PL/SQL type by name\"],oci_bind_by_name:[\"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\"Bind a PHP variable to an Oracle placeholder by name\"],oci_cancel:[\"bool oci_cancel(resource stmt)\",\"Cancel reading from a cursor\"],oci_close:[\"bool oci_close(resource connection)\",\"Disconnect from database\"],oci_collection_append:[\"bool oci_collection_append(string value)\",\"Append an object to the collection\"],oci_collection_assign:[\"bool oci_collection_assign(object from)\",\"Assign a collection from another existing collection\"],oci_collection_element_assign:[\"bool oci_collection_element_assign(int index, string val)\",\"Assign element val to collection at index ndx\"],oci_collection_element_get:[\"string oci_collection_element_get(int ndx)\",\"Retrieve the value at collection index ndx\"],oci_collection_max:[\"int oci_collection_max()\",\"Return the max value of a collection. For a varray this is the maximum length of the array\"],oci_collection_size:[\"int oci_collection_size()\",\"Return the size of a collection\"],oci_collection_trim:[\"bool oci_collection_trim(int num)\",\"Trim num elements from the end of a collection\"],oci_commit:[\"bool oci_commit(resource connection)\",\"Commit the current context\"],oci_connect:[\"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_define_by_name:[\"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\"Define a PHP variable to an Oracle column by name\"],oci_error:[\"array oci_error([resource stmt|connection|global])\",\"Return the last error of stmt|connection|global. If no error happened returns false.\"],oci_execute:[\"bool oci_execute(resource stmt [, int mode])\",\"Execute a parsed statement\"],oci_fetch:[\"bool oci_fetch(resource stmt)\",\"Prepare a new row of data for reading\"],oci_fetch_all:[\"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\"Fetch all rows of result data into an array\"],oci_fetch_array:[\"array oci_fetch_array( resource stmt [, int mode ])\",\"Fetch a result row as an array\"],oci_fetch_assoc:[\"array oci_fetch_assoc( resource stmt )\",\"Fetch a result row as an associative array\"],oci_fetch_object:[\"object oci_fetch_object( resource stmt )\",\"Fetch a result row as an object\"],oci_fetch_row:[\"array oci_fetch_row( resource stmt )\",\"Fetch a result row as an enumerated array\"],oci_field_is_null:[\"bool oci_field_is_null(resource stmt, int col)\",\"Tell whether a column is NULL\"],oci_field_name:[\"string oci_field_name(resource stmt, int col)\",\"Tell the name of a column\"],oci_field_precision:[\"int oci_field_precision(resource stmt, int col)\",\"Tell the precision of a column\"],oci_field_scale:[\"int oci_field_scale(resource stmt, int col)\",\"Tell the scale of a column\"],oci_field_size:[\"int oci_field_size(resource stmt, int col)\",\"Tell the maximum data size of a column\"],oci_field_type:[\"mixed oci_field_type(resource stmt, int col)\",\"Tell the data type of a column\"],oci_field_type_raw:[\"int oci_field_type_raw(resource stmt, int col)\",\"Tell the raw oracle data type of a column\"],oci_free_collection:[\"bool oci_free_collection()\",\"Deletes collection object\"],oci_free_descriptor:[\"bool oci_free_descriptor()\",\"Deletes large object description\"],oci_free_statement:[\"bool oci_free_statement(resource stmt)\",\"Free all resources associated with a statement\"],oci_internal_debug:[\"void oci_internal_debug(int onoff)\",\"Toggle internal debugging output for the OCI extension\"],oci_lob_append:[\"bool oci_lob_append( object lob )\",\"Appends data from a LOB to another LOB\"],oci_lob_close:[\"bool oci_lob_close()\",\"Closes lob descriptor\"],oci_lob_copy:[\"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\"Copies data from a LOB to another LOB\"],oci_lob_eof:[\"bool oci_lob_eof()\",\"Checks if EOF is reached\"],oci_lob_erase:[\"int oci_lob_erase( [ int offset [, int length ] ] )\",\"Erases a specified portion of the internal LOB, starting at a specified offset\"],oci_lob_export:[\"bool oci_lob_export([string filename [, int start [, int length]]])\",\"Writes a large object into a file\"],oci_lob_flush:[\"bool oci_lob_flush( [ int flag ] )\",\"Flushes the LOB buffer\"],oci_lob_import:[\"bool oci_lob_import( string filename )\",\"Loads file into a LOB\"],oci_lob_is_equal:[\"bool oci_lob_is_equal( object lob1, object lob2 )\",\"Tests to see if two LOB/FILE locators are equal\"],oci_lob_load:[\"string oci_lob_load()\",\"Loads a large object\"],oci_lob_read:[\"string oci_lob_read( int length )\",\"Reads particular part of a large object\"],oci_lob_rewind:[\"bool oci_lob_rewind()\",\"Rewind pointer of a LOB\"],oci_lob_save:[\"bool oci_lob_save( string data [, int offset ])\",\"Saves a large object\"],oci_lob_seek:[\"bool oci_lob_seek( int offset [, int whence ])\",\"Moves the pointer of a LOB\"],oci_lob_size:[\"int oci_lob_size()\",\"Returns size of a large object\"],oci_lob_tell:[\"int oci_lob_tell()\",\"Tells LOB pointer position\"],oci_lob_truncate:[\"bool oci_lob_truncate( [ int length ])\",\"Truncates a LOB\"],oci_lob_write:[\"int oci_lob_write( string string [, int length ])\",\"Writes data to current position of a LOB\"],oci_lob_write_temporary:[\"bool oci_lob_write_temporary(string var [, int lob_type])\",\"Writes temporary blob\"],oci_new_collection:[\"object oci_new_collection(resource connection, string tdo [, string schema])\",\"Initialize a new collection\"],oci_new_connect:[\"resource oci_new_connect(string user, string pass [, string db])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_new_cursor:[\"resource oci_new_cursor(resource connection)\",\"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"],oci_new_descriptor:[\"object oci_new_descriptor(resource connection [, int type])\",\"Initialize a new empty descriptor LOB/FILE (LOB is default)\"],oci_num_fields:[\"int oci_num_fields(resource stmt)\",\"Return the number of result columns in a statement\"],oci_num_rows:[\"int oci_num_rows(resource stmt)\",\"Return the row count of an OCI statement\"],oci_parse:[\"resource oci_parse(resource connection, string query)\",\"Parse a query and return a statement\"],oci_password_change:[\"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\"Changes the password of an account\"],oci_pconnect:[\"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"],oci_result:[\"string oci_result(resource stmt, mixed column)\",\"Return a single column of result data\"],oci_rollback:[\"bool oci_rollback(resource connection)\",\"Rollback the current context\"],oci_server_version:[\"string oci_server_version(resource connection)\",\"Return a string containing server version information\"],oci_set_action:[\"bool oci_set_action(resource connection, string value)\",\"Sets the action attribute on the connection\"],oci_set_client_identifier:[\"bool oci_set_client_identifier(resource connection, string value)\",\"Sets the client identifier attribute on the connection\"],oci_set_client_info:[\"bool oci_set_client_info(resource connection, string value)\",\"Sets the client info attribute on the connection\"],oci_set_edition:[\"bool oci_set_edition(string value)\",\"Sets the edition attribute for all subsequent connections created\"],oci_set_module_name:[\"bool oci_set_module_name(resource connection, string value)\",\"Sets the module attribute on the connection\"],oci_set_prefetch:[\"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"],oci_statement_type:[\"string oci_statement_type(resource stmt)\",\"Return the query type of an OCI statement\"],ocifetchinto:[\"int ocifetchinto(resource stmt, array &output [, int mode])\",\"Fetch a row of result data into an array\"],ocigetbufferinglob:[\"bool ocigetbufferinglob()\",\"Returns current state of buffering for a LOB\"],ocisetbufferinglob:[\"bool ocisetbufferinglob( boolean flag )\",\"Enables/disables buffering for a LOB\"],octdec:[\"int octdec(string octal_number)\",\"Returns the decimal equivalent of an octal string\"],odbc_autocommit:[\"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\"Toggle autocommit mode or get status\"],odbc_binmode:[\"bool odbc_binmode(int result_id, int mode)\",\"Handle binary column data\"],odbc_close:[\"void odbc_close(resource connection_id)\",\"Close an ODBC connection\"],odbc_close_all:[\"void odbc_close_all(void)\",\"Close all ODBC connections\"],odbc_columnprivileges:[\"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"],odbc_columns:[\"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\"Returns a result identifier that can be used to fetch a list of column names in specified tables\"],odbc_commit:[\"bool odbc_commit(resource connection_id)\",\"Commit an ODBC transaction\"],odbc_connect:[\"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\"Connect to a datasource\"],odbc_cursor:[\"string odbc_cursor(resource result_id)\",\"Get cursor name\"],odbc_data_source:[\"array odbc_data_source(resource connection_id, int fetch_type)\",\"Return information about the currently connected data source\"],odbc_error:[\"string odbc_error([resource connection_id])\",\"Get the last error code\"],odbc_errormsg:[\"string odbc_errormsg([resource connection_id])\",\"Get the last error message\"],odbc_exec:[\"resource odbc_exec(resource connection_id, string query [, int flags])\",\"Prepare and execute an SQL statement\"],odbc_execute:[\"bool odbc_execute(resource result_id [, array parameters_array])\",\"Execute a prepared statement\"],odbc_fetch_array:[\"array odbc_fetch_array(int result [, int rownumber])\",\"Fetch a result row as an associative array\"],odbc_fetch_into:[\"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\"Fetch one result row into an array\"],odbc_fetch_object:[\"object odbc_fetch_object(int result [, int rownumber])\",\"Fetch a result row as an object\"],odbc_fetch_row:[\"bool odbc_fetch_row(resource result_id [, int row_number])\",\"Fetch a row\"],odbc_field_len:[\"int odbc_field_len(resource result_id, int field_number)\",\"Get the length (precision) of a column\"],odbc_field_name:[\"string odbc_field_name(resource result_id, int field_number)\",\"Get a column name\"],odbc_field_num:[\"int odbc_field_num(resource result_id, string field_name)\",\"Return column number\"],odbc_field_scale:[\"int odbc_field_scale(resource result_id, int field_number)\",\"Get the scale of a column\"],odbc_field_type:[\"string odbc_field_type(resource result_id, int field_number)\",\"Get the datatype of a column\"],odbc_foreignkeys:[\"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"],odbc_free_result:[\"bool odbc_free_result(resource result_id)\",\"Free resources associated with a result\"],odbc_gettypeinfo:[\"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\"Returns a result identifier containing information about data types supported by the data source\"],odbc_longreadlen:[\"bool odbc_longreadlen(int result_id, int length)\",\"Handle LONG columns\"],odbc_next_result:[\"bool odbc_next_result(resource result_id)\",\"Checks if multiple results are avaiable\"],odbc_num_fields:[\"int odbc_num_fields(resource result_id)\",\"Get number of columns in a result\"],odbc_num_rows:[\"int odbc_num_rows(resource result_id)\",\"Get number of rows in a result\"],odbc_pconnect:[\"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\"Establish a persistent connection to a datasource\"],odbc_prepare:[\"resource odbc_prepare(resource connection_id, string query)\",\"Prepares a statement for execution\"],odbc_primarykeys:[\"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\"Returns a result identifier listing the column names that comprise the primary key for a table\"],odbc_procedurecolumns:[\"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"],odbc_procedures:[\"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\"Returns a result identifier containg the list of procedure names in a datasource\"],odbc_result:[\"mixed odbc_result(resource result_id, mixed field)\",\"Get result data\"],odbc_result_all:[\"int odbc_result_all(resource result_id [, string format])\",\"Print result as HTML table\"],odbc_rollback:[\"bool odbc_rollback(resource connection_id)\",\"Rollback a transaction\"],odbc_setoption:[\"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\"Sets connection or statement options\"],odbc_specialcolumns:[\"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"],odbc_statistics:[\"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"],odbc_tableprivileges:[\"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\"Returns a result identifier containing a list of tables and the privileges associated with each table\"],odbc_tables:[\"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\"Call the SQLTables function\"],opendir:[\"mixed opendir(string path[, resource context])\",\"Open a directory and return a dir_handle\"],openlog:[\"bool openlog(string ident, int option, int facility)\",\"Open connection to system logger\"],openssl_csr_export:[\"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\"Exports a CSR to file or a var\"],openssl_csr_export_to_file:[\"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\"Exports a CSR to file\"],openssl_csr_get_public_key:[\"mixed openssl_csr_get_public_key(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_get_subject:[\"mixed openssl_csr_get_subject(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_new:[\"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\"Generates a privkey and CSR\"],openssl_csr_sign:[\"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\"Signs a cert with another CERT\"],openssl_decrypt:[\"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\"Takes raw or base64 encoded string and dectupt it using given method and key\"],openssl_dh_compute_key:[\"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\"Computes shared sicret for public value of remote DH key and local DH key\"],openssl_digest:[\"string openssl_digest(string data, string method [, bool raw_output=false])\",\"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"],openssl_encrypt:[\"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\"Encrypts given data with given method and key, returns raw or base64 encoded string\"],openssl_error_string:[\"mixed openssl_error_string(void)\",\"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"],openssl_get_cipher_methods:[\"array openssl_get_cipher_methods([bool aliases = false])\",\"Return array of available cipher methods\"],openssl_get_md_methods:[\"array openssl_get_md_methods([bool aliases = false])\",\"Return array of available digest methods\"],openssl_open:[\"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\"Opens data\"],openssl_pkcs12_export:[\"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS12 to a var\"],openssl_pkcs12_export_to_file:[\"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS to file\"],openssl_pkcs12_read:[\"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\"Parses a PKCS12 to an array\"],openssl_pkcs7_decrypt:[\"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"],openssl_pkcs7_encrypt:[\"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"],openssl_pkcs7_sign:[\"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"],openssl_pkcs7_verify:[\"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"],openssl_pkey_export:[\"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\"Gets an exportable representation of a key into a string or file\"],openssl_pkey_export_to_file:[\"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\"Gets an exportable representation of a key into a file\"],openssl_pkey_free:[\"void openssl_pkey_free(int key)\",\"Frees a key\"],openssl_pkey_get_details:[\"resource openssl_pkey_get_details(resource key)\",\"returns an array with the key details (bits, pkey, type)\"],openssl_pkey_get_private:[\"int openssl_pkey_get_private(string key [, string passphrase])\",\"Gets private keys\"],openssl_pkey_get_public:[\"int openssl_pkey_get_public(mixed cert)\",\"Gets public key from X.509 certificate\"],openssl_pkey_new:[\"resource openssl_pkey_new([array configargs])\",\"Generates a new private key\"],openssl_private_decrypt:[\"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\"Decrypts data with private key\"],openssl_private_encrypt:[\"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with private key\"],openssl_public_decrypt:[\"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\"Decrypts data with public key\"],openssl_public_encrypt:[\"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with public key\"],openssl_random_pseudo_bytes:[\"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\"Returns a string of the length specified filled with random pseudo bytes\"],openssl_seal:[\"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\"Seals data\"],openssl_sign:[\"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\"Signs data\"],openssl_verify:[\"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\"Verifys data\"],openssl_x509_check_private_key:[\"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\"Checks if a private key corresponds to a CERT\"],openssl_x509_checkpurpose:[\"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"],openssl_x509_export:[\"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_export_to_file:[\"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_free:[\"void openssl_x509_free(resource x509)\",\"Frees X.509 certificates\"],openssl_x509_parse:[\"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\"Returns an array of the fields/values of the CERT\"],openssl_x509_read:[\"resource openssl_x509_read(mixed cert)\",\"Reads X.509 certificates\"],ord:[\"int ord(string character)\",\"Returns ASCII value of character\"],output_add_rewrite_var:[\"bool output_add_rewrite_var(string name, string value)\",\"Add URL rewriter values\"],output_reset_rewrite_vars:[\"bool output_reset_rewrite_vars(void)\",\"Reset(clear) URL rewriter values\"],pack:[\"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Takes one or more arguments and packs them into a binary string according to the format argument\"],parse_ini_file:[\"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\"Parse configuration file\"],parse_ini_string:[\"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\"Parse configuration string\"],parse_locale:[\"static array parse_locale($locale)\",\"* parses a locale-id into an array the different parts of it\"],parse_str:[\"void parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],parse_url:[\"mixed parse_url(string url, [int url_component])\",\"Parse a URL and return its components\"],passthru:[\"void passthru(string command [, int &return_value])\",\"Execute an external program and display raw output\"],pathinfo:[\"array pathinfo(string path[, int options])\",\"Returns information about a certain string\"],pclose:[\"int pclose(resource fp)\",\"Close a file pointer opened by popen()\"],pcnlt_sigwaitinfo:[\"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\"Synchronously wait for queued signals\"],pcntl_alarm:[\"int pcntl_alarm(int seconds)\",\"Set an alarm clock for delivery of a signal\"],pcntl_exec:[\"bool pcntl_exec(string path [, array args [, array envs]])\",\"Executes specified program in current process space as defined by exec(2)\"],pcntl_fork:[\"int pcntl_fork(void)\",\"Forks the currently running process following the same behavior as the UNIX fork() system call\"],pcntl_getpriority:[\"int pcntl_getpriority([int pid [, int process_identifier]])\",\"Get the priority of any process\"],pcntl_setpriority:[\"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\"Change the priority of any process\"],pcntl_signal:[\"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\"Assigns a system signal handler to a PHP function\"],pcntl_signal_dispatch:[\"bool pcntl_signal_dispatch()\",\"Dispatch signals to signal handlers\"],pcntl_sigprocmask:[\"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\"Examine and change blocked signals\"],pcntl_sigtimedwait:[\"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\"Wait for queued signals\"],pcntl_wait:[\"int pcntl_wait(int &status)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_waitpid:[\"int pcntl_waitpid(int pid, int &status, int options)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_wexitstatus:[\"int pcntl_wexitstatus(int status)\",\"Returns the status code of a child's exit\"],pcntl_wifexited:[\"bool pcntl_wifexited(int status)\",\"Returns true if the child status code represents a successful exit\"],pcntl_wifsignaled:[\"bool pcntl_wifsignaled(int status)\",\"Returns true if the child status code represents a process that was terminated due to a signal\"],pcntl_wifstopped:[\"bool pcntl_wifstopped(int status)\",\"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"],pcntl_wstopsig:[\"int pcntl_wstopsig(int status)\",\"Returns the number of the signal that caused the process to stop who's status code is passed\"],pcntl_wtermsig:[\"int pcntl_wtermsig(int status)\",\"Returns the number of the signal that terminated the process who's status code is passed\"],pdo_drivers:[\"array pdo_drivers()\",\"Return array of available PDO drivers\"],pfsockopen:[\"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open persistent Internet or Unix domain socket connection\"],pg_affected_rows:[\"int pg_affected_rows(resource result)\",\"Returns the number of affected tuples\"],pg_cancel_query:[\"bool pg_cancel_query(resource connection)\",\"Cancel request\"],pg_client_encoding:[\"string pg_client_encoding([resource connection])\",\"Get the current client encoding\"],pg_close:[\"bool pg_close([resource connection])\",\"Close a PostgreSQL connection\"],pg_connect:[\"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a PostgreSQL connection\"],pg_connection_busy:[\"bool pg_connection_busy(resource connection)\",\"Get connection is busy or not\"],pg_connection_reset:[\"bool pg_connection_reset(resource connection)\",\"Reset connection (reconnect)\"],pg_connection_status:[\"int pg_connection_status(resource connnection)\",\"Get connection status\"],pg_convert:[\"array pg_convert(resource db, string table, array values[, int options])\",\"Check and convert values for PostgreSQL SQL statement\"],pg_copy_from:[\"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\"Copy table from array\"],pg_copy_to:[\"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\"Copy table to array\"],pg_dbname:[\"string pg_dbname([resource connection])\",\"Get the database name\"],pg_delete:[\"mixed pg_delete(resource db, string table, array ids[, int options])\",\"Delete records has ids (id=>value)\"],pg_end_copy:[\"bool pg_end_copy([resource connection])\",\"Sync with backend. Completes the Copy command\"],pg_escape_bytea:[\"string pg_escape_bytea([resource connection,] string data)\",\"Escape binary for bytea type\"],pg_escape_string:[\"string pg_escape_string([resource connection,] string data)\",\"Escape string for text/char type\"],pg_execute:[\"resource pg_execute([resource connection,] string stmtname, array params)\",\"Execute a prepared query\"],pg_fetch_all:[\"array pg_fetch_all(resource result)\",\"Fetch all rows into array\"],pg_fetch_all_columns:[\"array pg_fetch_all_columns(resource result [, int column_number])\",\"Fetch all rows into array\"],pg_fetch_array:[\"array pg_fetch_array(resource result [, int row [, int result_type]])\",\"Fetch a row as an array\"],pg_fetch_assoc:[\"array pg_fetch_assoc(resource result [, int row])\",\"Fetch a row as an assoc array\"],pg_fetch_object:[\"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\"Fetch a row as an object\"],pg_fetch_result:[\"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\"Returns values from a result identifier\"],pg_fetch_row:[\"array pg_fetch_row(resource result [, int row [, int result_type]])\",\"Get a row as an enumerated array\"],pg_field_is_null:[\"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\"Test if a field is NULL\"],pg_field_name:[\"string pg_field_name(resource result, int field_number)\",\"Returns the name of the field\"],pg_field_num:[\"int pg_field_num(resource result, string field_name)\",\"Returns the field number of the named field\"],pg_field_prtlen:[\"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\"Returns the printed length\"],pg_field_size:[\"int pg_field_size(resource result, int field_number)\",\"Returns the internal size of the field\"],pg_field_table:[\"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\"Returns the name of the table field belongs to, or table's oid if oid_only is true\"],pg_field_type:[\"string pg_field_type(resource result, int field_number)\",\"Returns the type name for the given field\"],pg_field_type_oid:[\"string pg_field_type_oid(resource result, int field_number)\",\"Returns the type oid for the given field\"],pg_free_result:[\"bool pg_free_result(resource result)\",\"Free result memory\"],pg_get_notify:[\"array pg_get_notify([resource connection[, result_type]])\",\"Get asynchronous notification\"],pg_get_pid:[\"int pg_get_pid([resource connection)\",\"Get backend(server) pid\"],pg_get_result:[\"resource pg_get_result(resource connection)\",\"Get asynchronous query result\"],pg_host:[\"string pg_host([resource connection])\",\"Returns the host name associated with the connection\"],pg_insert:[\"mixed pg_insert(resource db, string table, array values[, int options])\",\"Insert values (filed=>value) to table\"],pg_last_error:[\"string pg_last_error([resource connection])\",\"Get the error message string\"],pg_last_notice:[\"string pg_last_notice(resource connection)\",\"Returns the last notice set by the backend\"],pg_last_oid:[\"string pg_last_oid(resource result)\",\"Returns the last object identifier\"],pg_lo_close:[\"bool pg_lo_close(resource large_object)\",\"Close a large object\"],pg_lo_create:[\"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\"Create a large object\"],pg_lo_export:[\"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\"Export large object direct to filesystem\"],pg_lo_import:[\"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\"Import large object direct from filesystem\"],pg_lo_open:[\"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\"Open a large object and return fd\"],pg_lo_read:[\"string pg_lo_read(resource large_object [, int len])\",\"Read a large object\"],pg_lo_read_all:[\"int pg_lo_read_all(resource large_object)\",\"Read a large object and send straight to browser\"],pg_lo_seek:[\"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\"Seeks position of large object\"],pg_lo_tell:[\"int pg_lo_tell(resource large_object)\",\"Returns current position of large object\"],pg_lo_unlink:[\"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\"Delete a large object\"],pg_lo_write:[\"int pg_lo_write(resource large_object, string buf [, int len])\",\"Write a large object\"],pg_meta_data:[\"array pg_meta_data(resource db, string table)\",\"Get meta_data\"],pg_num_fields:[\"int pg_num_fields(resource result)\",\"Return the number of fields in the result\"],pg_num_rows:[\"int pg_num_rows(resource result)\",\"Return the number of rows in the result\"],pg_options:[\"string pg_options([resource connection])\",\"Get the options associated with the connection\"],pg_parameter_status:[\"string|false pg_parameter_status([resource connection,] string param_name)\",\"Returns the value of a server parameter\"],pg_pconnect:[\"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a persistent PostgreSQL connection\"],pg_ping:[\"bool pg_ping([resource connection])\",\"Ping database. If connection is bad, try to reconnect.\"],pg_port:[\"int pg_port([resource connection])\",\"Return the port number associated with the connection\"],pg_prepare:[\"resource pg_prepare([resource connection,] string stmtname, string query)\",\"Prepare a query for future execution\"],pg_put_line:[\"bool pg_put_line([resource connection,] string query)\",\"Send null-terminated string to backend server\"],pg_query:[\"resource pg_query([resource connection,] string query)\",\"Execute a query\"],pg_query_params:[\"resource pg_query_params([resource connection,] string query, array params)\",\"Execute a query\"],pg_result_error:[\"string pg_result_error(resource result)\",\"Get error message associated with result\"],pg_result_error_field:[\"string pg_result_error_field(resource result, int fieldcode)\",\"Get error message field associated with result\"],pg_result_seek:[\"bool pg_result_seek(resource result, int offset)\",\"Set internal row offset\"],pg_result_status:[\"mixed pg_result_status(resource result[, long result_type])\",\"Get status of query result\"],pg_select:[\"mixed pg_select(resource db, string table, array ids[, int options])\",\"Select records that has ids (id=>value)\"],pg_send_execute:[\"bool pg_send_execute(resource connection, string stmtname, array params)\",\"Executes prevriously prepared stmtname asynchronously\"],pg_send_prepare:[\"bool pg_send_prepare(resource connection, string stmtname, string query)\",\"Asynchronously prepare a query for future execution\"],pg_send_query:[\"bool pg_send_query(resource connection, string query)\",\"Send asynchronous query\"],pg_send_query_params:[\"bool pg_send_query_params(resource connection, string query, array params)\",\"Send asynchronous parameterized query\"],pg_set_client_encoding:[\"int pg_set_client_encoding([resource connection,] string encoding)\",\"Set client encoding\"],pg_set_error_verbosity:[\"int pg_set_error_verbosity([resource connection,] int verbosity)\",\"Set error verbosity\"],pg_trace:[\"bool pg_trace(string filename [, string mode [, resource connection]])\",\"Enable tracing a PostgreSQL connection\"],pg_transaction_status:[\"int pg_transaction_status(resource connnection)\",\"Get transaction status\"],pg_tty:[\"string pg_tty([resource connection])\",\"Return the tty name associated with the connection\"],pg_unescape_bytea:[\"string pg_unescape_bytea(string data)\",\"Unescape binary for bytea type\"],pg_untrace:[\"bool pg_untrace([resource connection])\",\"Disable tracing of a PostgreSQL connection\"],pg_update:[\"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\"Update table using values (field=>value) and ids (id=>value)\"],pg_version:[\"array pg_version([resource connection])\",\"Returns an array with client, protocol and server version (when available)\"],php_egg_logo_guid:[\"string php_egg_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_ini_loaded_file:[\"string php_ini_loaded_file(void)\",\"Return the actual loaded ini filename\"],php_ini_scanned_files:[\"string php_ini_scanned_files(void)\",\"Return comma-separated string of .ini files parsed from the additional ini dir\"],php_logo_guid:[\"string php_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_real_logo_guid:[\"string php_real_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_sapi_name:[\"string php_sapi_name(void)\",\"Return the current SAPI module name\"],php_snmpv3:[\"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"],php_strip_whitespace:[\"string php_strip_whitespace(string file_name)\",\"Return source with stripped comments and whitespace\"],php_uname:[\"string php_uname(void)\",\"Return information about the system PHP was built on\"],phpcredits:[\"void phpcredits([int flag])\",\"Prints the list of people who've contributed to the PHP project\"],phpinfo:[\"void phpinfo([int what])\",\"Output a page of useful information about PHP and the current request\"],phpversion:[\"string phpversion([string extension])\",\"Return the current PHP version\"],pi:[\"float pi(void)\",\"Returns an approximation of pi\"],png2wbmp:[\"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert PNG image to WBMP image\"],popen:[\"resource popen(string command, string mode)\",\"Execute a command and open either a read or a write pipe to it\"],posix_access:[\"bool posix_access(string file [, int mode])\",\"Determine accessibility of a file (POSIX.1 5.6.3)\"],posix_ctermid:[\"string posix_ctermid(void)\",\"Generate terminal path name (POSIX.1, 4.7.1)\"],posix_get_last_error:[\"int posix_get_last_error(void)\",\"Retrieve the error number set by the last posix function which failed.\"],posix_getcwd:[\"string posix_getcwd(void)\",\"Get working directory pathname (POSIX.1, 5.2.2)\"],posix_getegid:[\"int posix_getegid(void)\",\"Get the current effective group id (POSIX.1, 4.2.1)\"],posix_geteuid:[\"int posix_geteuid(void)\",\"Get the current effective user id (POSIX.1, 4.2.1)\"],posix_getgid:[\"int posix_getgid(void)\",\"Get the current group id (POSIX.1, 4.2.1)\"],posix_getgrgid:[\"array posix_getgrgid(long gid)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgrnam:[\"array posix_getgrnam(string groupname)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgroups:[\"array posix_getgroups(void)\",\"Get supplementary group id's (POSIX.1, 4.2.3)\"],posix_getlogin:[\"string posix_getlogin(void)\",\"Get user name (POSIX.1, 4.2.4)\"],posix_getpgid:[\"int posix_getpgid(void)\",\"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"],posix_getpgrp:[\"int posix_getpgrp(void)\",\"Get current process group id (POSIX.1, 4.3.1)\"],posix_getpid:[\"int posix_getpid(void)\",\"Get the current process id (POSIX.1, 4.1.1)\"],posix_getppid:[\"int posix_getppid(void)\",\"Get the parent process id (POSIX.1, 4.1.1)\"],posix_getpwnam:[\"array posix_getpwnam(string groupname)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getpwuid:[\"array posix_getpwuid(long uid)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getrlimit:[\"array posix_getrlimit(void)\",\"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"],posix_getsid:[\"int posix_getsid(void)\",\"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"],posix_getuid:[\"int posix_getuid(void)\",\"Get the current user id (POSIX.1, 4.2.1)\"],posix_initgroups:[\"bool posix_initgroups(string name, int base_group_id)\",\"Calculate the group access list for the user specified in name.\"],posix_isatty:[\"bool posix_isatty(int fd)\",\"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"],posix_kill:[\"bool posix_kill(int pid, int sig)\",\"Send a signal to a process (POSIX.1, 3.3.2)\"],posix_mkfifo:[\"bool posix_mkfifo(string pathname, int mode)\",\"Make a FIFO special file (POSIX.1, 5.4.2)\"],posix_mknod:[\"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\"Make a special or ordinary file (POSIX.1)\"],posix_setegid:[\"bool posix_setegid(long uid)\",\"Set effective group id\"],posix_seteuid:[\"bool posix_seteuid(long uid)\",\"Set effective user id\"],posix_setgid:[\"bool posix_setgid(int uid)\",\"Set group id (POSIX.1, 4.2.2)\"],posix_setpgid:[\"bool posix_setpgid(int pid, int pgid)\",\"Set process group id for job control (POSIX.1, 4.3.3)\"],posix_setsid:[\"int posix_setsid(void)\",\"Create session and set process group id (POSIX.1, 4.3.2)\"],posix_setuid:[\"bool posix_setuid(long uid)\",\"Set user id (POSIX.1, 4.2.2)\"],posix_strerror:[\"string posix_strerror(int errno)\",\"Retrieve the system error message associated with the given errno.\"],posix_times:[\"array posix_times(void)\",\"Get process times (POSIX.1, 4.5.2)\"],posix_ttyname:[\"string posix_ttyname(int fd)\",\"Determine terminal device name (POSIX.1, 4.7.2)\"],posix_uname:[\"array posix_uname(void)\",\"Get system name (POSIX.1, 4.4.1)\"],pow:[\"number pow(number base, number exponent)\",\"Returns base raised to the power of exponent. Returns integer result when possible\"],preg_filter:[\"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement and only return matches.\"],preg_grep:[\"array preg_grep(string regex, array input [, int flags])\",\"Searches array and returns entries which match regex\"],preg_last_error:[\"int preg_last_error()\",\"Returns the error code of the last regexp execution.\"],preg_match:[\"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\"Perform a Perl-style regular expression match\"],preg_match_all:[\"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\"Perform a Perl-style global regular expression match\"],preg_quote:[\"string preg_quote(string str [, string delim_char])\",\"Quote regular expression characters plus an optional character\"],preg_replace:[\"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement.\"],preg_replace_callback:[\"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement using replacement callback.\"],preg_split:[\"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\"Split string into an array using a perl-style regular expression as a delimiter\"],prev:[\"mixed prev(array array_arg)\",\"Move array argument's internal pointer to the previous element and return it\"],print:[\"int print(string arg)\",\"Output a string\"],print_r:[\"mixed print_r(mixed var [, bool return])\",\"Prints out or returns information about the specified variable\"],printf:[\"int printf(string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string\"],proc_close:[\"int proc_close(resource process)\",\"close a process opened by proc_open\"],proc_get_status:[\"array proc_get_status(resource process)\",\"get information about a process opened by proc_open\"],proc_nice:[\"bool proc_nice(int priority)\",\"Change the priority of the current process\"],proc_open:[\"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\"Run a process with more control over it's file descriptors\"],proc_terminate:[\"bool proc_terminate(resource process [, long signal])\",\"kill a process opened by proc_open\"],property_exists:[\"bool property_exists(mixed object_or_class, string property_name)\",\"Checks if the object or class has a property\"],pspell_add_to_personal:[\"bool pspell_add_to_personal(int pspell, string word)\",\"Adds a word to a personal list\"],pspell_add_to_session:[\"bool pspell_add_to_session(int pspell, string word)\",\"Adds a word to the current session\"],pspell_check:[\"bool pspell_check(int pspell, string word)\",\"Returns true if word is valid\"],pspell_clear_session:[\"bool pspell_clear_session(int pspell)\",\"Clears the current session\"],pspell_config_create:[\"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\"Create a new config to be used later to create a manager\"],pspell_config_data_dir:[\"bool pspell_config_data_dir(int conf, string directory)\",\"location of language data files\"],pspell_config_dict_dir:[\"bool pspell_config_dict_dir(int conf, string directory)\",\"location of the main word list\"],pspell_config_ignore:[\"bool pspell_config_ignore(int conf, int ignore)\",\"Ignore words <= n chars\"],pspell_config_mode:[\"bool pspell_config_mode(int conf, long mode)\",\"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"],pspell_config_personal:[\"bool pspell_config_personal(int conf, string personal)\",\"Use a personal dictionary for this config\"],pspell_config_repl:[\"bool pspell_config_repl(int conf, string repl)\",\"Use a personal dictionary with replacement pairs for this config\"],pspell_config_runtogether:[\"bool pspell_config_runtogether(int conf, bool runtogether)\",\"Consider run-together words as valid components\"],pspell_config_save_repl:[\"bool pspell_config_save_repl(int conf, bool save)\",\"Save replacement pairs when personal list is saved for this config\"],pspell_new:[\"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary\"],pspell_new_config:[\"int pspell_new_config(int config)\",\"Load a dictionary based on the given config\"],pspell_new_personal:[\"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary with a personal wordlist\"],pspell_save_wordlist:[\"bool pspell_save_wordlist(int pspell)\",\"Saves the current (personal) wordlist\"],pspell_store_replacement:[\"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\"Notify the dictionary of a user-selected replacement\"],pspell_suggest:[\"array pspell_suggest(int pspell, string word)\",\"Returns array of suggestions\"],putenv:[\"bool putenv(string setting)\",\"Set the value of an environment variable\"],quoted_printable_decode:[\"string quoted_printable_decode(string str)\",\"Convert a quoted-printable string to an 8 bit string\"],quoted_printable_encode:[\"string quoted_printable_encode(string str) */\",'PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \"s\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}'],quotemeta:[\"string quotemeta(string str)\",\"Quotes meta characters\"],rad2deg:[\"float rad2deg(float number)\",\"Converts the radian number to the equivalent number in degrees\"],rand:[\"int rand([int min, int max])\",\"Returns a random number\"],range:[\"array range(mixed low, mixed high[, int step])\",\"Create an array containing the range of integers or characters from low to high (inclusive)\"],rawurldecode:[\"string rawurldecode(string str)\",\"Decodes URL-encodes string\"],rawurlencode:[\"string rawurlencode(string str)\",\"URL-encodes string\"],readdir:[\"string readdir([resource dir_handle])\",\"Read directory entry from dir_handle\"],readfile:[\"int readfile(string filename [, bool use_include_path[, resource context]])\",\"Output a file or a URL\"],readgzfile:[\"int readgzfile(string filename [, int use_include_path])\",\"Output a .gz-file\"],readline:[\"string readline([string prompt])\",\"Reads a line\"],readline_add_history:[\"bool readline_add_history(string prompt)\",\"Adds a line to the history\"],readline_callback_handler_install:[\"void readline_callback_handler_install(string prompt, mixed callback)\",\"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"],readline_callback_handler_remove:[\"bool readline_callback_handler_remove()\",\"Removes a previously installed callback handler and restores terminal settings\"],readline_callback_read_char:[\"void readline_callback_read_char()\",\"Informs the readline callback interface that a character is ready for input\"],readline_clear_history:[\"bool readline_clear_history(void)\",\"Clears the history\"],readline_completion_function:[\"bool readline_completion_function(string funcname)\",\"Readline completion function?\"],readline_info:[\"mixed readline_info([string varname [, string newvalue]])\",\"Gets/sets various internal readline variables.\"],readline_list_history:[\"array readline_list_history(void)\",\"Lists the history\"],readline_on_new_line:[\"void readline_on_new_line(void)\",\"Inform readline that the cursor has moved to a new line\"],readline_read_history:[\"bool readline_read_history([string filename])\",\"Reads the history\"],readline_redisplay:[\"void readline_redisplay(void)\",\"Ask readline to redraw the display\"],readline_write_history:[\"bool readline_write_history([string filename])\",\"Writes the history\"],readlink:[\"string readlink(string filename)\",\"Return the target of a symbolic link\"],realpath:[\"string realpath(string path)\",\"Return the resolved path\"],realpath_cache_get:[\"bool realpath_cache_get()\",\"Get current size of realpath cache\"],realpath_cache_size:[\"bool realpath_cache_size()\",\"Get current size of realpath cache\"],recode_file:[\"bool recode_file(string request, resource input, resource output)\",\"Recode file input into file output according to request\"],recode_string:[\"string recode_string(string request, string str)\",\"Recode string str according to request string\"],register_shutdown_function:[\"void register_shutdown_function(string function_name)\",\"Register a user-level function to be called on request termination\"],register_tick_function:[\"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\"Registers a tick callback function\"],rename:[\"bool rename(string old_name, string new_name[, resource context])\",\"Rename a file\"],require:[\"bool require(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],require_once:[\"bool require_once(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],reset:[\"mixed reset(array array_arg)\",\"Set array argument's internal pointer to the first element and return it\"],restore_error_handler:[\"void restore_error_handler(void)\",\"Restores the previously defined error handler function\"],restore_exception_handler:[\"void restore_exception_handler(void)\",\"Restores the previously defined exception handler function\"],restore_include_path:[\"void restore_include_path()\",\"Restore the value of the include_path configuration option\"],rewind:[\"bool rewind(resource fp)\",\"Rewind the position of a file pointer\"],rewinddir:[\"void rewinddir([resource dir_handle])\",\"Rewind dir_handle back to the start\"],rmdir:[\"bool rmdir(string dirname[, resource context])\",\"Remove a directory\"],round:[\"float round(float number [, int precision [, int mode]])\",\"Returns the number rounded to specified precision\"],rsort:[\"bool rsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order\"],rtrim:[\"string rtrim(string str [, string character_mask])\",\"Removes trailing whitespace\"],scandir:[\"array scandir(string dir [, int sorting_order [, resource context]])\",\"List files & directories inside the specified path\"],sem_acquire:[\"bool sem_acquire(resource id)\",\"Acquires the semaphore with the given id, blocking if necessary\"],sem_get:[\"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"],sem_release:[\"bool sem_release(resource id)\",\"Releases the semaphore with the given id\"],sem_remove:[\"bool sem_remove(resource id)\",\"Removes semaphore from Unix systems\"],serialize:[\"string serialize(mixed variable)\",\"Returns a string representation of variable (which can later be unserialized)\"],session_cache_expire:[\"int session_cache_expire([int new_cache_expire])\",\"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"],session_cache_limiter:[\"string session_cache_limiter([string new_cache_limiter])\",\"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"],session_decode:[\"bool session_decode(string data)\",\"Deserializes data and reinitializes the variables\"],session_destroy:[\"bool session_destroy(void)\",\"Destroy the current session and all data associated with it\"],session_encode:[\"string session_encode(void)\",\"Serializes the current setup and returns the serialized representation\"],session_get_cookie_params:[\"array session_get_cookie_params(void)\",\"Return the session cookie parameters\"],session_id:[\"string session_id([string newid])\",\"Return the current session id. If newid is given, the session id is replaced with newid\"],session_is_registered:[\"bool session_is_registered(string varname)\",\"Checks if a variable is registered in session\"],session_module_name:[\"string session_module_name([string newname])\",\"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"],session_name:[\"string session_name([string newname])\",\"Return the current session name. If newname is given, the session name is replaced with newname\"],session_regenerate_id:[\"bool session_regenerate_id([bool delete_old_session])\",\"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"],session_register:[\"bool session_register(mixed var_names [, mixed ...])\",\"Adds varname(s) to the list of variables which are freezed at the session end\"],session_save_path:[\"string session_save_path([string newname])\",\"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"],session_set_cookie_params:[\"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\"Set session cookie parameters\"],session_set_save_handler:[\"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\"Sets user-level functions\"],session_start:[\"bool session_start(void)\",\"Begin session - reinitializes freezed variables, registers browsers etc\"],session_unregister:[\"bool session_unregister(string varname)\",\"Removes varname from the list of variables which are freezed at the session end\"],session_unset:[\"void session_unset(void)\",\"Unset all registered variables\"],session_write_close:[\"void session_write_close(void)\",\"Write session data and end session\"],set_error_handler:[\"string set_error_handler(string error_handler [, int error_types])\",\"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"],set_exception_handler:[\"string set_exception_handler(callable exception_handler)\",\"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"],set_include_path:[\"string set_include_path(string new_include_path)\",\"Sets the include_path configuration option\"],set_magic_quotes_runtime:[\"bool set_magic_quotes_runtime(int new_setting)\",\"Set the current active configuration setting of magic_quotes_runtime and return previous\"],set_time_limit:[\"bool set_time_limit(int seconds)\",\"Sets the maximum time a script can run\"],setcookie:[\"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie\"],setlocale:[\"string setlocale(mixed category, string locale [, string ...])\",\"Set locale information\"],setrawcookie:[\"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie with no url encoding of the value\"],settype:[\"bool settype(mixed var, string type)\",\"Set the type of the variable\"],sha1:[\"string sha1(string str [, bool raw_output])\",\"Calculate the sha1 hash of a string\"],sha1_file:[\"string sha1_file(string filename [, bool raw_output])\",\"Calculate the sha1 hash of given filename\"],shell_exec:[\"string shell_exec(string cmd)\",\"Execute command via shell and return complete output as string\"],shm_attach:[\"int shm_attach(int key [, int memsize [, int perm]])\",\"Creates or open a shared memory segment\"],shm_detach:[\"bool shm_detach(resource shm_identifier)\",\"Disconnects from shared memory segment\"],shm_get_var:[\"mixed shm_get_var(resource id, int variable_key)\",\"Returns a variable from shared memory\"],shm_has_var:[\"bool shm_has_var(resource id, int variable_key)\",\"Checks whether a specific entry exists\"],shm_put_var:[\"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\"Inserts or updates a variable in shared memory\"],shm_remove:[\"bool shm_remove(resource shm_identifier)\",\"Removes shared memory from Unix systems\"],shm_remove_var:[\"bool shm_remove_var(resource id, int variable_key)\",\"Removes variable from shared memory\"],shmop_close:[\"void shmop_close (int shmid)\",\"closes a shared memory segment\"],shmop_delete:[\"bool shmop_delete (int shmid)\",\"mark segment for deletion\"],shmop_open:[\"int shmop_open (int key, string flags, int mode, int size)\",\"gets and attaches a shared memory segment\"],shmop_read:[\"string shmop_read (int shmid, int start, int count)\",\"reads from a shm segment\"],shmop_size:[\"int shmop_size (int shmid)\",\"returns the shm size\"],shmop_write:[\"int shmop_write (int shmid, string data, int offset)\",\"writes to a shared memory segment\"],shuffle:[\"bool shuffle(array array_arg)\",\"Randomly shuffle the contents of an array\"],similar_text:[\"int similar_text(string str1, string str2 [, float percent])\",\"Calculates the similarity between two strings\"],simplexml_import_dom:[\"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\"Get a simplexml_element object from dom to allow for processing\"],simplexml_load_file:[\"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a filename and return a simplexml_element object to allow for processing\"],simplexml_load_string:[\"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a string and return a simplexml_element object to allow for processing\"],sin:[\"float sin(float number)\",\"Returns the sine of the number in radians\"],sinh:[\"float sinh(float number)\",\"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"],sleep:[\"void sleep(int seconds)\",\"Delay for a given number of seconds\"],smfi_addheader:[\"bool smfi_addheader(string headerf, string headerv)\",\"Adds a header to the current message.\"],smfi_addrcpt:[\"bool smfi_addrcpt(string rcpt)\",\"Add a recipient to the message envelope.\"],smfi_chgheader:[\"bool smfi_chgheader(string headerf, string headerv)\",\"Changes a header's value for the current message.\"],smfi_delrcpt:[\"bool smfi_delrcpt(string rcpt)\",\"Removes the named recipient from the current message's envelope.\"],smfi_getsymval:[\"string smfi_getsymval(string macro)\",\"Returns the value of the given macro or NULL if the macro is not defined.\"],smfi_replacebody:[\"bool smfi_replacebody(string body)\",\"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"],smfi_setflags:[\"void smfi_setflags(long flags)\",\"Sets the flags describing the actions the filter may take.\"],smfi_setreply:[\"bool smfi_setreply(string rcode, string xcode, string message)\",\"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"],smfi_settimeout:[\"void smfi_settimeout(long timeout)\",\"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"],snmp2_get:[\"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_getnext:[\"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_real_walk:[\"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmp2_set:[\"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmp2_walk:[\"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],snmp3_get:[\"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_getnext:[\"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_real_walk:[\"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_set:[\"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_walk:[\"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp_get_quick_print:[\"bool snmp_get_quick_print(void)\",\"Return the current status of quick_print\"],snmp_get_valueretrieval:[\"int snmp_get_valueretrieval()\",\"Return the method how the SNMP values will be returned\"],snmp_read_mib:[\"int snmp_read_mib(string filename)\",\"Reads and parses a MIB file into the active MIB tree.\"],snmp_set_enum_print:[\"void snmp_set_enum_print(int enum_print)\",\"Return all values that are enums with their enum value instead of the raw integer\"],snmp_set_oid_output_format:[\"void snmp_set_oid_output_format(int oid_format)\",\"Set the OID output format.\"],snmp_set_quick_print:[\"void snmp_set_quick_print(int quick_print)\",\"Return all objects including their respective object id withing the specified one\"],snmp_set_valueretrieval:[\"void snmp_set_valueretrieval(int method)\",\"Specify the method how the SNMP values will be returned\"],snmpget:[\"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmpgetnext:[\"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmprealwalk:[\"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmpset:[\"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmpwalk:[\"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],socket_accept:[\"resource socket_accept(resource socket)\",\"Accepts a connection on the listening socket fd\"],socket_bind:[\"bool socket_bind(resource socket, string addr [, int port])\",\"Binds an open socket to a listening port, port is only specified in AF_INET family.\"],socket_clear_error:[\"void socket_clear_error([resource socket])\",\"Clears the error on the socket or the last error code.\"],socket_close:[\"void socket_close(resource socket)\",\"Closes a file descriptor\"],socket_connect:[\"bool socket_connect(resource socket, string addr [, int port])\",\"Opens a connection to addr:port on the socket specified by socket\"],socket_create:[\"resource socket_create(int domain, int type, int protocol)\",\"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"],socket_create_listen:[\"resource socket_create_listen(int port[, int backlog])\",\"Opens a socket on port to accept connections\"],socket_create_pair:[\"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\"Creates a pair of indistinguishable sockets and stores them in fds.\"],socket_get_option:[\"mixed socket_get_option(resource socket, int level, int optname)\",\"Gets socket options for the socket\"],socket_getpeername:[\"bool socket_getpeername(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_getsockname:[\"bool socket_getsockname(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_last_error:[\"int socket_last_error([resource socket])\",\"Returns the last socket error (either the last used or the provided socket resource)\"],socket_listen:[\"bool socket_listen(resource socket[, int backlog])\",\"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"],socket_read:[\"string socket_read(resource socket, int length [, int type])\",\"Reads a maximum of length bytes from socket\"],socket_recv:[\"int socket_recv(resource socket, string &buf, int len, int flags)\",\"Receives data from a connected socket\"],socket_recvfrom:[\"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\"Receives data from a socket, connected or not\"],socket_select:[\"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"],socket_send:[\"int socket_send(resource socket, string buf, int len, int flags)\",\"Sends data to a connected socket\"],socket_sendto:[\"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\"Sends a message to a socket, whether it is connected or not\"],socket_set_block:[\"bool socket_set_block(resource socket)\",\"Sets blocking mode on a socket resource\"],socket_set_nonblock:[\"bool socket_set_nonblock(resource socket)\",\"Sets nonblocking mode on a socket resource\"],socket_set_option:[\"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\"Sets socket options for the socket\"],socket_shutdown:[\"bool socket_shutdown(resource socket[, int how])\",\"Shuts down a socket for receiving, sending, or both.\"],socket_strerror:[\"string socket_strerror(int errno)\",\"Returns a string describing an error\"],socket_write:[\"int socket_write(resource socket, string buf[, int length])\",\"Writes the buffer to the socket resource, length is optional\"],solid_fetch_prev:[\"bool solid_fetch_prev(resource result_id)\",\"\"],sort:[\"bool sort(array &array_arg [, int sort_flags])\",\"Sort an array\"],soundex:[\"string soundex(string str)\",\"Calculate the soundex key of a string\"],spl_autoload:[\"void spl_autoload(string class_name [, string file_extensions])\",\"Default implementation for __autoload()\"],spl_autoload_call:[\"void spl_autoload_call(string class_name)\",\"Try all registerd autoload function to load the requested class\"],spl_autoload_extensions:[\"string spl_autoload_extensions([string file_extensions])\",\"Register and return default file extensions for spl_autoload\"],spl_autoload_functions:[\"false|array spl_autoload_functions()\",\"Return all registered __autoload() functionns\"],spl_autoload_register:['bool spl_autoload_register([mixed autoload_function = \"spl_autoload\" [, throw = true [, prepend]]])',\"Register given function as __autoload() implementation\"],spl_autoload_unregister:[\"bool spl_autoload_unregister(mixed autoload_function)\",\"Unregister given function as __autoload() implementation\"],spl_classes:[\"array spl_classes()\",\"Return an array containing the names of all clsses and interfaces defined in SPL\"],spl_object_hash:[\"string spl_object_hash(object obj)\",\"Return hash id for given object\"],split:[\"array split(string pattern, string string [, int limit])\",\"Split string into array by regular expression\"],spliti:[\"array spliti(string pattern, string string [, int limit])\",\"Split string into array by regular expression case-insensitive\"],sprintf:[\"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\"Return a formatted string\"],sql_regcase:[\"string sql_regcase(string string)\",\"Make regular expression for case insensitive match\"],sqlite_array_query:[\"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\"Executes a query against a given database and returns an array of arrays.\"],sqlite_busy_timeout:[\"void sqlite_busy_timeout(resource db, int ms)\",\"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"],sqlite_changes:[\"int sqlite_changes(resource db)\",\"Returns the number of rows that were changed by the most recent SQL statement.\"],sqlite_close:[\"void sqlite_close(resource db)\",\"Closes an open sqlite database.\"],sqlite_column:[\"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\"Fetches a column from the current row of a result set.\"],sqlite_create_aggregate:[\"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\"Registers an aggregate function for queries.\"],sqlite_create_function:[\"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",'Registers a \"regular\" function for queries.'],sqlite_current:[\"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the current row from a result set as an array.\"],sqlite_error_string:[\"string sqlite_error_string(int error_code)\",\"Returns the textual description of an error code.\"],sqlite_escape_string:[\"string sqlite_escape_string(string item)\",\"Escapes a string for use as a query parameter.\"],sqlite_exec:[\"boolean sqlite_exec(string query, resource db[, string &error_message])\",\"Executes a result-less query against a given database\"],sqlite_factory:[\"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"],sqlite_fetch_all:[\"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\"Fetches all rows from a result set as an array of arrays.\"],sqlite_fetch_array:[\"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the next row from a result set as an array.\"],sqlite_fetch_column_types:[\"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\"Return an array of column types from a particular table.\"],sqlite_fetch_object:[\"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\"Fetches the next row from a result set as an object.\"],sqlite_fetch_single:[\"string sqlite_fetch_single(resource result [, bool decode_binary])\",\"Fetches the first column of a result set as a string.\"],sqlite_field_name:[\"string sqlite_field_name(resource result, int field_index)\",\"Returns the name of a particular field of a result set.\"],sqlite_has_prev:[\"bool sqlite_has_prev(resource result)\",\"* Returns whether a previous row is available.\"],sqlite_key:[\"int sqlite_key(resource result)\",\"Return the current row index of a buffered result.\"],sqlite_last_error:[\"int sqlite_last_error(resource db)\",\"Returns the error code of the last error for a database.\"],sqlite_last_insert_rowid:[\"int sqlite_last_insert_rowid(resource db)\",\"Returns the rowid of the most recently inserted row.\"],sqlite_libencoding:[\"string sqlite_libencoding()\",\"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"],sqlite_libversion:[\"string sqlite_libversion()\",\"Returns the version of the linked SQLite library.\"],sqlite_next:[\"bool sqlite_next(resource result)\",\"Seek to the next row number of a result set.\"],sqlite_num_fields:[\"int sqlite_num_fields(resource result)\",\"Returns the number of fields in a result set.\"],sqlite_num_rows:[\"int sqlite_num_rows(resource result)\",\"Returns the number of rows in a buffered result set.\"],sqlite_open:[\"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database. Will create the database if it does not exist.\"],sqlite_popen:[\"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"],sqlite_prev:[\"bool sqlite_prev(resource result)\",\"* Seek to the previous row number of a result set.\"],sqlite_query:[\"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\"Executes a query against a given database and returns a result handle.\"],sqlite_rewind:[\"bool sqlite_rewind(resource result)\",\"Seek to the first row number of a buffered result set.\"],sqlite_seek:[\"bool sqlite_seek(resource result, int row)\",\"Seek to a particular row number of a buffered result set.\"],sqlite_single_query:[\"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\"Executes a query and returns either an array for one single column or the value of the first row.\"],sqlite_udf_decode_binary:[\"string sqlite_udf_decode_binary(string data)\",\"Decode binary encoding on a string parameter passed to an UDF.\"],sqlite_udf_encode_binary:[\"string sqlite_udf_encode_binary(string data)\",\"Apply binary encoding (if required) to a string to return from an UDF.\"],sqlite_unbuffered_query:[\"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\"Executes a query that does not prefetch and buffer all data.\"],sqlite_valid:[\"bool sqlite_valid(resource result)\",\"Returns whether more rows are available.\"],sqrt:[\"float sqrt(float number)\",\"Returns the square root of the number\"],srand:[\"void srand([int seed])\",\"Seeds random number generator\"],sscanf:[\"mixed sscanf(string str, string format [, string ...])\",\"Implements an ANSI C compatible sscanf\"],stat:[\"array stat(string filename)\",\"Give information about a file\"],str_getcsv:[\"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\"Parse a CSV string into an array\"],str_ireplace:[\"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace / case-insensitive\"],str_pad:[\"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\"Returns input string padded on the left or right to specified length with pad_string\"],str_repeat:[\"string str_repeat(string input, int mult)\",\"Returns the input string repeat mult times\"],str_replace:[\"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace\"],str_rot13:[\"string str_rot13(string str)\",\"Perform the rot13 transform on a string\"],str_shuffle:[\"void str_shuffle(string str)\",\"Shuffles string. One permutation of all possible is created\"],str_split:[\"array str_split(string str [, int split_length])\",\"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"],str_word_count:[\"mixed str_word_count(string str, [int format [, string charlist]])\",'Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, \\'word\\' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \"\\'\" and \"-\" characters.'],strcasecmp:[\"int strcasecmp(string str1, string str2)\",\"Binary safe case-insensitive string comparison\"],strchr:[\"string strchr(string haystack, string needle)\",\"An alias for strstr\"],strcmp:[\"int strcmp(string str1, string str2)\",\"Binary safe string comparison\"],strcoll:[\"int strcoll(string str1, string str2)\",\"Compares two strings using the current locale\"],strcspn:[\"int strcspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"],stream_bucket_append:[\"void stream_bucket_append(resource brigade, resource bucket)\",\"Append bucket to brigade\"],stream_bucket_make_writeable:[\"object stream_bucket_make_writeable(resource brigade)\",\"Return a bucket object from the brigade for operating on\"],stream_bucket_new:[\"resource stream_bucket_new(resource stream, string buffer)\",\"Create a new bucket for use on the current stream\"],stream_bucket_prepend:[\"void stream_bucket_prepend(resource brigade, resource bucket)\",\"Prepend bucket to brigade\"],stream_context_create:[\"resource stream_context_create([array options[, array params]])\",\"Create a file context and optionally set parameters\"],stream_context_get_default:[\"resource stream_context_get_default([array options])\",\"Get a handle on the default file/stream context and optionally set parameters\"],stream_context_get_options:[\"array stream_context_get_options(resource context|resource stream)\",\"Retrieve options for a stream/wrapper/context\"],stream_context_get_params:[\"array stream_context_get_params(resource context|resource stream)\",\"Get parameters of a file context\"],stream_context_set_default:[\"resource stream_context_set_default(array options)\",\"Set default file/stream context, returns the context as a resource\"],stream_context_set_option:[\"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\"Set an option for a wrapper\"],stream_context_set_params:[\"bool stream_context_set_params(resource context|resource stream, array options)\",\"Set parameters for a file context\"],stream_copy_to_stream:[\"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\"Reads up to maxlen bytes from source stream and writes them to dest stream.\"],stream_filter_append:[\"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Append a filter to a stream\"],stream_filter_prepend:[\"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Prepend a filter to a stream\"],stream_filter_register:[\"bool stream_filter_register(string filtername, string classname)\",\"Registers a custom filter handler class\"],stream_filter_remove:[\"bool stream_filter_remove(resource stream_filter)\",\"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"],stream_get_contents:[\"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"],stream_get_filters:[\"array stream_get_filters(void)\",\"Returns a list of registered filters\"],stream_get_line:[\"string stream_get_line(resource stream, int maxlen [, string ending])\",\"Read up to maxlen bytes from a stream or until the ending string is found\"],stream_get_meta_data:[\"array stream_get_meta_data(resource fp)\",\"Retrieves header/meta data from streams/file pointers\"],stream_get_transports:[\"array stream_get_transports()\",\"Retrieves list of registered socket transports\"],stream_get_wrappers:[\"array stream_get_wrappers()\",\"Retrieves list of registered stream wrappers\"],stream_is_local:[\"bool stream_is_local(resource stream|string url)\",\"\"],stream_resolve_include_path:[\"string stream_resolve_include_path(string filename)\",\"Determine what file will be opened by calls to fopen() with a relative path\"],stream_select:[\"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"],stream_set_blocking:[\"bool stream_set_blocking(resource socket, int mode)\",\"Set blocking/non-blocking mode on a socket or stream\"],stream_set_timeout:[\"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\"Set timeout on stream read to seconds + microseonds\"],stream_set_write_buffer:[\"int stream_set_write_buffer(resource fp, int buffer)\",\"Set file write buffer\"],stream_socket_accept:[\"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\"Accept a client connection from a server socket\"],stream_socket_client:[\"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\"Open a client connection to a remote address\"],stream_socket_enable_crypto:[\"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\"Enable or disable a specific kind of crypto on the stream\"],stream_socket_get_name:[\"string stream_socket_get_name(resource stream, bool want_peer)\",\"Returns either the locally bound or remote name for a socket stream\"],stream_socket_pair:[\"array stream_socket_pair(int domain, int type, int protocol)\",\"Creates a pair of connected, indistinguishable socket streams\"],stream_socket_recvfrom:[\"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\"Receives data from a socket stream\"],stream_socket_sendto:[\"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"],stream_socket_server:[\"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\"Create a server socket bound to localaddress\"],stream_socket_shutdown:[\"int stream_socket_shutdown(resource stream, int how)\",\"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"],stream_supports_lock:[\"bool stream_supports_lock(resource stream)\",\"Tells whether the stream supports locking through flock().\"],stream_wrapper_register:[\"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\"Registers a custom URL protocol handler class\"],stream_wrapper_restore:[\"bool stream_wrapper_restore(string protocol)\",\"Restore the original protocol handler, overriding if necessary\"],stream_wrapper_unregister:[\"bool stream_wrapper_unregister(string protocol)\",\"Unregister a wrapper for the life of the current request.\"],strftime:[\"string strftime(string format [, int timestamp])\",\"Format a local time/date according to locale settings\"],strip_tags:[\"string strip_tags(string str [, string allowable_tags])\",\"Strips HTML and PHP tags from a string\"],stripcslashes:[\"string stripcslashes(string str)\",\"Strips backslashes from a string. Uses C-style conventions\"],stripos:[\"int stripos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another, case insensitive\"],stripslashes:[\"string stripslashes(string str)\",\"Strips backslashes from a string\"],stristr:[\"string stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another, case insensitive\"],strlen:[\"int strlen(string str)\",\"Get string length\"],strnatcasecmp:[\"int strnatcasecmp(string s1, string s2)\",\"Returns the result of case-insensitive string comparison using 'natural' algorithm\"],strnatcmp:[\"int strnatcmp(string s1, string s2)\",\"Returns the result of string comparison using 'natural' algorithm\"],strncasecmp:[\"int strncasecmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strncmp:[\"int strncmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strpbrk:[\"array strpbrk(string haystack, string char_list)\",\"Search a string for any of a set of characters\"],strpos:[\"int strpos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another\"],strptime:[\"string strptime(string timestamp, string format)\",\"Parse a time/date generated with strftime()\"],strrchr:[\"string strrchr(string haystack, string needle)\",\"Finds the last occurrence of a character in a string within another\"],strrev:[\"string strrev(string str)\",\"Reverse a string\"],strripos:[\"int strripos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strrpos:[\"int strrpos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strspn:[\"int strspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"],strstr:[\"string strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],strtok:[\"string strtok([string str,] string token)\",\"Tokenize a string\"],strtolower:[\"string strtolower(string str)\",\"Makes a string lowercase\"],strtotime:[\"int strtotime(string time [, int now ])\",\"Convert string representation of date and time to a timestamp\"],strtoupper:[\"string strtoupper(string str)\",\"Makes a string uppercase\"],strtr:[\"string strtr(string str, string from[, string to])\",\"Translates characters in str using given translation tables\"],strval:[\"string strval(mixed var)\",\"Get the string value of a variable\"],substr:[\"string substr(string str, int start [, int length])\",\"Returns part of a string\"],substr_compare:[\"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"],substr_count:[\"int substr_count(string haystack, string needle [, int offset [, int length]])\",\"Returns the number of times a substring occurs in the string\"],substr_replace:[\"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\"Replaces part of a string with another string\"],sybase_affected_rows:[\"int sybase_affected_rows([resource link_id])\",\"Get number of affected rows in last query\"],sybase_close:[\"bool sybase_close([resource link_id])\",\"Close Sybase connection\"],sybase_connect:[\"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\"Open Sybase server connection\"],sybase_data_seek:[\"bool sybase_data_seek(resource result, int offset)\",\"Move internal row pointer\"],sybase_deadlock_retry_count:[\"void sybase_deadlock_retry_count(int retry_count)\",\"Sets deadlock retry count\"],sybase_fetch_array:[\"array sybase_fetch_array(resource result)\",\"Fetch row as array\"],sybase_fetch_assoc:[\"array sybase_fetch_assoc(resource result)\",\"Fetch row as array without numberic indices\"],sybase_fetch_field:[\"object sybase_fetch_field(resource result [, int offset])\",\"Get field information\"],sybase_fetch_object:[\"object sybase_fetch_object(resource result [, mixed object])\",\"Fetch row as object\"],sybase_fetch_row:[\"array sybase_fetch_row(resource result)\",\"Get row as enumerated array\"],sybase_field_seek:[\"bool sybase_field_seek(resource result, int offset)\",\"Set field offset\"],sybase_free_result:[\"bool sybase_free_result(resource result)\",\"Free result memory\"],sybase_get_last_message:[\"string sybase_get_last_message(void)\",\"Returns the last message from server (over min_message_severity)\"],sybase_min_client_severity:[\"void sybase_min_client_severity(int severity)\",\"Sets minimum client severity\"],sybase_min_server_severity:[\"void sybase_min_server_severity(int severity)\",\"Sets minimum server severity\"],sybase_num_fields:[\"int sybase_num_fields(resource result)\",\"Get number of fields in result\"],sybase_num_rows:[\"int sybase_num_rows(resource result)\",\"Get number of rows in result\"],sybase_pconnect:[\"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\"Open persistent Sybase connection\"],sybase_query:[\"int sybase_query(string query [, resource link_id])\",\"Send Sybase query\"],sybase_result:[\"string sybase_result(resource result, int row, mixed field)\",\"Get result data\"],sybase_select_db:[\"bool sybase_select_db(string database [, resource link_id])\",\"Select Sybase database\"],sybase_set_message_handler:[\"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"],sybase_unbuffered_query:[\"int sybase_unbuffered_query(string query [, resource link_id])\",\"Send Sybase query\"],symlink:[\"int symlink(string target, string link)\",\"Create a symbolic link\"],sys_get_temp_dir:[\"string sys_get_temp_dir()\",\"Returns directory path used for temporary files\"],sys_getloadavg:[\"array sys_getloadavg()\",\"\"],syslog:[\"bool syslog(int priority, string message)\",\"Generate a system log message\"],system:[\"int system(string command [, int &return_value])\",\"Execute an external program and display output\"],tan:[\"float tan(float number)\",\"Returns the tangent of the number in radians\"],tanh:[\"float tanh(float number)\",\"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"],tempnam:[\"string tempnam(string dir, string prefix)\",\"Create a unique filename in a directory\"],textdomain:[\"string textdomain(string domain)\",'Set the textdomain to \"domain\". Returns the current domain'],tidy_access_count:[\"int tidy_access_count()\",\"Returns the Number of Tidy accessibility warnings encountered for specified document.\"],tidy_clean_repair:[\"boolean tidy_clean_repair()\",\"Execute configured cleanup and repair operations on parsed markup\"],tidy_config_count:[\"int tidy_config_count()\",\"Returns the Number of Tidy configuration errors encountered for specified document.\"],tidy_diagnose:[\"boolean tidy_diagnose()\",\"Run configured diagnostics on parsed and repaired markup.\"],tidy_error_count:[\"int tidy_error_count()\",\"Returns the Number of Tidy errors encountered for specified document.\"],tidy_get_body:[\"TidyNode tidy_get_body(resource tidy)\",\"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"],tidy_get_config:[\"array tidy_get_config()\",\"Get current Tidy configuarion\"],tidy_get_error_buffer:[\"string tidy_get_error_buffer([boolean detailed])\",\"Return warnings and errors which occured parsing the specified document\"],tidy_get_head:[\"TidyNode tidy_get_head()\",\"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"],tidy_get_html:[\"TidyNode tidy_get_html()\",\"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"],tidy_get_html_ver:[\"int tidy_get_html_ver()\",\"Get the Detected HTML version for the specified document.\"],tidy_get_opt_doc:[\"string tidy_get_opt_doc(tidy resource, string optname)\",\"Returns the documentation for the given option name\"],tidy_get_output:[\"string tidy_get_output()\",\"Return a string representing the parsed tidy markup\"],tidy_get_release:[\"string tidy_get_release()\",\"Get release date (version) for Tidy library\"],tidy_get_root:[\"TidyNode tidy_get_root()\",\"Returns a TidyNode Object representing the root of the tidy parse tree\"],tidy_get_status:[\"int tidy_get_status()\",\"Get status of specfied document.\"],tidy_getopt:[\"mixed tidy_getopt(string option)\",\"Returns the value of the specified configuration option for the tidy document.\"],tidy_is_xhtml:[\"boolean tidy_is_xhtml()\",\"Indicates if the document is a XHTML document.\"],tidy_is_xml:[\"boolean tidy_is_xml()\",\"Indicates if the document is a generic (non HTML/XHTML) XML document.\"],tidy_parse_file:[\"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\"Parse markup in file or URI\"],tidy_parse_string:[\"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\"Parse a document stored in a string\"],tidy_repair_file:[\"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\"Repair a file using an optionally provided configuration file\"],tidy_repair_string:[\"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\"Repair a string using an optionally provided configuration file\"],tidy_warning_count:[\"int tidy_warning_count()\",\"Returns the Number of Tidy warnings encountered for specified document.\"],time:[\"int time(void)\",\"Return current UNIX timestamp\"],time_nanosleep:[\"mixed time_nanosleep(long seconds, long nanoseconds)\",\"Delay for a number of seconds and nano seconds\"],time_sleep_until:[\"mixed time_sleep_until(float timestamp)\",\"Make the script sleep until the specified time\"],timezone_abbreviations_list:[\"array timezone_abbreviations_list()\",\"Returns associative array containing dst, offset and the timezone name\"],timezone_identifiers_list:[\"array timezone_identifiers_list([long what[, string country]])\",\"Returns numerically index array with all timezone identifiers.\"],timezone_location_get:[\"array timezone_location_get()\",\"Returns location information for a timezone, including country code, latitude/longitude and comments\"],timezone_name_from_abbr:[\"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\"Returns the timezone name from abbrevation\"],timezone_name_get:[\"string timezone_name_get(DateTimeZone object)\",\"Returns the name of the timezone.\"],timezone_offset_get:[\"long timezone_offset_get(DateTimeZone object, DateTime object)\",\"Returns the timezone offset.\"],timezone_open:[\"DateTimeZone timezone_open(string timezone)\",\"Returns new DateTimeZone object\"],timezone_transitions_get:[\"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"],timezone_version_get:[\"array timezone_version_get()\",\"Returns the Olson database version number.\"],tmpfile:[\"resource tmpfile(void)\",\"Create a temporary file that will be deleted automatically after use\"],token_get_all:[\"array token_get_all(string source)\",\"\"],token_name:[\"string token_name(int type)\",\"\"],touch:[\"bool touch(string filename [, int time [, int atime]])\",\"Set modification time of file\"],trigger_error:[\"void trigger_error(string messsage [, int error_type])\",\"Generates a user-level error/warning/notice message\"],trim:[\"string trim(string str [, string character_mask])\",\"Strips whitespace from the beginning and end of a string\"],uasort:[\"bool uasort(array array_arg, string cmp_function)\",\"Sort an array with a user-defined comparison function and maintain index association\"],ucfirst:[\"string ucfirst(string str)\",\"Make a string's first character lowercase\"],ucwords:[\"string ucwords(string str)\",\"Uppercase the first character of every word in a string\"],uksort:[\"bool uksort(array array_arg, string cmp_function)\",\"Sort an array by keys using a user-defined comparison function\"],umask:[\"int umask([int mask])\",\"Return or change the umask\"],uniqid:[\"string uniqid([string prefix [, bool more_entropy]])\",\"Generates a unique ID\"],unixtojd:[\"int unixtojd([int timestamp])\",\"Convert UNIX timestamp to Julian Day\"],unlink:[\"bool unlink(string filename[, context context])\",\"Delete a file\"],unpack:[\"array unpack(string format, string input)\",\"Unpack binary string into named array elements according to format argument\"],unregister_tick_function:[\"void unregister_tick_function(string function_name)\",\"Unregisters a tick callback function\"],unserialize:[\"mixed unserialize(string variable_representation)\",\"Takes a string representation of variable and recreates it\"],unset:[\"void unset (mixed var [, mixed var])\",\"Unset a given variable\"],urldecode:[\"string urldecode(string str)\",\"Decodes URL-encoded string\"],urlencode:[\"string urlencode(string str)\",\"URL-encodes string\"],usleep:[\"void usleep(int micro_seconds)\",\"Delay for a given number of micro seconds\"],usort:[\"bool usort(array array_arg, string cmp_function)\",\"Sort an array by values using a user-defined comparison function\"],utf8_decode:[\"string utf8_decode(string data)\",\"Converts a UTF-8 encoded string to ISO-8859-1\"],utf8_encode:[\"string utf8_encode(string data)\",\"Encodes an ISO-8859-1 string to UTF-8\"],var_dump:[\"void var_dump(mixed var)\",\"Dumps a string representation of variable to output\"],var_export:[\"mixed var_export(mixed var [, bool return])\",\"Outputs or returns a string representation of a variable\"],variant_abs:[\"mixed variant_abs(mixed left)\",\"Returns the absolute value of a variant\"],variant_add:[\"mixed variant_add(mixed left, mixed right)\",'\"Adds\" two variant values together and returns the result'],variant_and:[\"mixed variant_and(mixed left, mixed right)\",\"performs a bitwise AND operation between two variants and returns the result\"],variant_cast:[\"object variant_cast(object variant, int type)\",\"Convert a variant into a new variant object of another type\"],variant_cat:[\"mixed variant_cat(mixed left, mixed right)\",\"concatenates two variant values together and returns the result\"],variant_cmp:[\"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\"Compares two variants\"],variant_date_from_timestamp:[\"object variant_date_from_timestamp(int timestamp)\",\"Returns a variant date representation of a unix timestamp\"],variant_date_to_timestamp:[\"int variant_date_to_timestamp(object variant)\",\"Converts a variant date/time value to unix timestamp\"],variant_div:[\"mixed variant_div(mixed left, mixed right)\",\"Returns the result from dividing two variants\"],variant_eqv:[\"mixed variant_eqv(mixed left, mixed right)\",\"Performs a bitwise equivalence on two variants\"],variant_fix:[\"mixed variant_fix(mixed left)\",\"Returns the integer part ? of a variant\"],variant_get_type:[\"int variant_get_type(object variant)\",\"Returns the VT_XXX type code for a variant\"],variant_idiv:[\"mixed variant_idiv(mixed left, mixed right)\",\"Converts variants to integers and then returns the result from dividing them\"],variant_imp:[\"mixed variant_imp(mixed left, mixed right)\",\"Performs a bitwise implication on two variants\"],variant_int:[\"mixed variant_int(mixed left)\",\"Returns the integer portion of a variant\"],variant_mod:[\"mixed variant_mod(mixed left, mixed right)\",\"Divides two variants and returns only the remainder\"],variant_mul:[\"mixed variant_mul(mixed left, mixed right)\",\"multiplies the values of the two variants and returns the result\"],variant_neg:[\"mixed variant_neg(mixed left)\",\"Performs logical negation on a variant\"],variant_not:[\"mixed variant_not(mixed left)\",\"Performs bitwise not negation on a variant\"],variant_or:[\"mixed variant_or(mixed left, mixed right)\",\"Performs a logical disjunction on two variants\"],variant_pow:[\"mixed variant_pow(mixed left, mixed right)\",\"Returns the result of performing the power function with two variants\"],variant_round:[\"mixed variant_round(mixed left, int decimals)\",\"Rounds a variant to the specified number of decimal places\"],variant_set:[\"void variant_set(object variant, mixed value)\",\"Assigns a new value for a variant object\"],variant_set_type:[\"void variant_set_type(object variant, int type)\",'Convert a variant into another type.  Variant is modified \"in-place\"'],variant_sub:[\"mixed variant_sub(mixed left, mixed right)\",\"subtracts the value of the right variant from the left variant value and returns the result\"],variant_xor:[\"mixed variant_xor(mixed left, mixed right)\",\"Performs a logical exclusion on two variants\"],version_compare:[\"int version_compare(string ver1, string ver2 [, string oper])\",'Compares two \"PHP-standardized\" version number strings'],vfprintf:[\"int vfprintf(resource stream, string format, array args)\",\"Output a formatted string into a stream\"],virtual:[\"bool virtual(string filename)\",\"Perform an Apache sub-request\"],vprintf:[\"int vprintf(string format, array args)\",\"Output a formatted string\"],vsprintf:[\"string vsprintf(string format, array args)\",\"Return a formatted string\"],wddx_add_vars:[\"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\"Serializes given variables and adds them to packet given by packet_id\"],wddx_deserialize:[\"mixed wddx_deserialize(mixed packet)\",\"Deserializes given packet and returns a PHP value\"],wddx_packet_end:[\"string wddx_packet_end(resource packet_id)\",\"Ends specified WDDX packet and returns the string containing the packet\"],wddx_packet_start:[\"resource wddx_packet_start([string comment])\",\"Starts a WDDX packet with optional comment and returns the packet id\"],wddx_serialize_value:[\"string wddx_serialize_value(mixed var [, string comment])\",\"Creates a new packet and serializes the given value\"],wddx_serialize_vars:[\"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\"Creates a new packet and serializes given variables into a struct\"],wordwrap:[\"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\"Wraps buffer to selected number of characters using string break char\"],xml_error_string:[\"string xml_error_string(int code)\",\"Get XML parser error string\"],xml_get_current_byte_index:[\"int xml_get_current_byte_index(resource parser)\",\"Get current byte index for an XML parser\"],xml_get_current_column_number:[\"int xml_get_current_column_number(resource parser)\",\"Get current column number for an XML parser\"],xml_get_current_line_number:[\"int xml_get_current_line_number(resource parser)\",\"Get current line number for an XML parser\"],xml_get_error_code:[\"int xml_get_error_code(resource parser)\",\"Get XML parser error code\"],xml_parse:[\"int xml_parse(resource parser, string data [, int isFinal])\",\"Start parsing an XML document\"],xml_parse_into_struct:[\"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\"Parsing a XML document\"],xml_parser_create:[\"resource xml_parser_create([string encoding])\",\"Create an XML parser\"],xml_parser_create_ns:[\"resource xml_parser_create_ns([string encoding [, string sep]])\",\"Create an XML parser\"],xml_parser_free:[\"int xml_parser_free(resource parser)\",\"Free an XML parser\"],xml_parser_get_option:[\"int xml_parser_get_option(resource parser, int option)\",\"Get options from an XML parser\"],xml_parser_set_option:[\"int xml_parser_set_option(resource parser, int option, mixed value)\",\"Set options in an XML parser\"],xml_set_character_data_handler:[\"int xml_set_character_data_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_default_handler:[\"int xml_set_default_handler(resource parser, string hdl)\",\"Set up default handler\"],xml_set_element_handler:[\"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\"Set up start and end element handlers\"],xml_set_end_namespace_decl_handler:[\"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_external_entity_ref_handler:[\"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\"Set up external entity reference handler\"],xml_set_notation_decl_handler:[\"int xml_set_notation_decl_handler(resource parser, string hdl)\",\"Set up notation declaration handler\"],xml_set_object:[\"int xml_set_object(resource parser, object &obj)\",\"Set up object which should be used for callbacks\"],xml_set_processing_instruction_handler:[\"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\"Set up processing instruction (PI) handler\"],xml_set_start_namespace_decl_handler:[\"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_unparsed_entity_decl_handler:[\"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\"Set up unparsed entity declaration handler\"],xmlrpc_decode:[\"array xmlrpc_decode(string xml [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_decode_request:[\"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_encode:[\"string xmlrpc_encode(mixed value)\",\"Generates XML for a PHP value\"],xmlrpc_encode_request:[\"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\"Generates XML for a method request\"],xmlrpc_get_type:[\"string xmlrpc_get_type(mixed value)\",\"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"],xmlrpc_is_fault:[\"bool xmlrpc_is_fault(array)\",\"Determines if an array value represents an XMLRPC fault.\"],xmlrpc_parse_method_descriptions:[\"array xmlrpc_parse_method_descriptions(string xml)\",\"Decodes XML into a list of method descriptions\"],xmlrpc_server_add_introspection_data:[\"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\"Adds introspection documentation\"],xmlrpc_server_call_method:[\"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\"Parses XML requests and call methods\"],xmlrpc_server_create:[\"resource xmlrpc_server_create(void)\",\"Creates an xmlrpc server\"],xmlrpc_server_destroy:[\"int xmlrpc_server_destroy(resource server)\",\"Destroys server resources\"],xmlrpc_server_register_introspection_callback:[\"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\"Register a PHP function to generate documentation\"],xmlrpc_server_register_method:[\"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\"Register a PHP function to handle method matching method_name\"],xmlrpc_set_type:[\"bool xmlrpc_set_type(string value, string type)\",\"Sets xmlrpc type, base64 or datetime, for a PHP string value\"],xmlwriter_end_attribute:[\"bool xmlwriter_end_attribute(resource xmlwriter)\",\"End attribute - returns FALSE on error\"],xmlwriter_end_cdata:[\"bool xmlwriter_end_cdata(resource xmlwriter)\",\"End current CDATA - returns FALSE on error\"],xmlwriter_end_comment:[\"bool xmlwriter_end_comment(resource xmlwriter)\",\"Create end comment - returns FALSE on error\"],xmlwriter_end_document:[\"bool xmlwriter_end_document(resource xmlwriter)\",\"End current document - returns FALSE on error\"],xmlwriter_end_dtd:[\"bool xmlwriter_end_dtd(resource xmlwriter)\",\"End current DTD - returns FALSE on error\"],xmlwriter_end_dtd_attlist:[\"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\"End current DTD AttList - returns FALSE on error\"],xmlwriter_end_dtd_element:[\"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\"End current DTD element - returns FALSE on error\"],xmlwriter_end_dtd_entity:[\"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\"End current DTD Entity - returns FALSE on error\"],xmlwriter_end_element:[\"bool xmlwriter_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_end_pi:[\"bool xmlwriter_end_pi(resource xmlwriter)\",\"End current PI - returns FALSE on error\"],xmlwriter_flush:[\"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\"Output current buffer\"],xmlwriter_full_end_element:[\"bool xmlwriter_full_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_open_memory:[\"resource xmlwriter_open_memory()\",\"Create new xmlwriter using memory for string output\"],xmlwriter_open_uri:[\"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\"Create new xmlwriter using source uri for output\"],xmlwriter_output_memory:[\"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\"Output current buffer as string\"],xmlwriter_set_indent:[\"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\"Toggle indentation on/off - returns FALSE on error\"],xmlwriter_set_indent_string:[\"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\"Set string used for indenting - returns FALSE on error\"],xmlwriter_start_attribute:[\"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\"Create start attribute - returns FALSE on error\"],xmlwriter_start_attribute_ns:[\"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced attribute - returns FALSE on error\"],xmlwriter_start_cdata:[\"bool xmlwriter_start_cdata(resource xmlwriter)\",\"Create start CDATA tag - returns FALSE on error\"],xmlwriter_start_comment:[\"bool xmlwriter_start_comment(resource xmlwriter)\",\"Create start comment - returns FALSE on error\"],xmlwriter_start_document:[\"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\"Create document tag - returns FALSE on error\"],xmlwriter_start_dtd:[\"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\"Create start DTD tag - returns FALSE on error\"],xmlwriter_start_dtd_attlist:[\"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\"Create start DTD AttList - returns FALSE on error\"],xmlwriter_start_dtd_element:[\"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\"Create start DTD element - returns FALSE on error\"],xmlwriter_start_dtd_entity:[\"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\"Create start DTD Entity - returns FALSE on error\"],xmlwriter_start_element:[\"bool xmlwriter_start_element(resource xmlwriter, string name)\",\"Create start element tag - returns FALSE on error\"],xmlwriter_start_element_ns:[\"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced element tag - returns FALSE on error\"],xmlwriter_start_pi:[\"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\"Create start PI tag - returns FALSE on error\"],xmlwriter_text:[\"bool xmlwriter_text(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xmlwriter_write_attribute:[\"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\"Write full attribute - returns FALSE on error\"],xmlwriter_write_attribute_ns:[\"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\"Write full namespaced attribute - returns FALSE on error\"],xmlwriter_write_cdata:[\"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\"Write full CDATA tag - returns FALSE on error\"],xmlwriter_write_comment:[\"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\"Write full comment tag - returns FALSE on error\"],xmlwriter_write_dtd:[\"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\"Write full DTD tag - returns FALSE on error\"],xmlwriter_write_dtd_attlist:[\"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\"Write full DTD AttList tag - returns FALSE on error\"],xmlwriter_write_dtd_element:[\"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\"Write full DTD element tag - returns FALSE on error\"],xmlwriter_write_dtd_entity:[\"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\"Write full DTD Entity tag - returns FALSE on error\"],xmlwriter_write_element:[\"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\"Write full element tag - returns FALSE on error\"],xmlwriter_write_element_ns:[\"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\"Write full namesapced element tag - returns FALSE on error\"],xmlwriter_write_pi:[\"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\"Write full PI tag - returns FALSE on error\"],xmlwriter_write_raw:[\"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xsl_xsltprocessor_get_parameter:[\"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_has_exslt_support:[\"bool xsl_xsltprocessor_has_exslt_support();\",\"\"],xsl_xsltprocessor_import_stylesheet:[\"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_register_php_functions:[\"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\"\"],xsl_xsltprocessor_remove_parameter:[\"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_set_parameter:[\"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\"\"],xsl_xsltprocessor_set_profiling:[\"bool xsl_xsltprocessor_set_profiling(string filename) */\",'PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s!\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling'],xsl_xsltprocessor_transform_to_doc:[\"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_transform_to_uri:[\"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\"\"],xsl_xsltprocessor_transform_to_xml:[\"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\"\"],zend_logo_guid:[\"string zend_logo_guid(void)\",\"Return the special ID used to request the Zend logo in phpinfo screens\"],zend_version:[\"string zend_version(void)\",\"Get the version of the Zend Engine\"],zip_close:[\"void zip_close(resource zip)\",\"Close a Zip archive\"],zip_entry_close:[\"void zip_entry_close(resource zip_ent)\",\"Close a zip entry\"],zip_entry_compressedsize:[\"int zip_entry_compressedsize(resource zip_entry)\",\"Return the compressed size of a ZZip entry\"],zip_entry_compressionmethod:[\"string zip_entry_compressionmethod(resource zip_entry)\",\"Return a string containing the compression method used on a particular entry\"],zip_entry_filesize:[\"int zip_entry_filesize(resource zip_entry)\",\"Return the actual filesize of a ZZip entry\"],zip_entry_name:[\"string zip_entry_name(resource zip_entry)\",\"Return the name given a ZZip entry\"],zip_entry_open:[\"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\"Open a Zip File, pointed by the resource entry\"],zip_entry_read:[\"mixed zip_entry_read(resource zip_entry [, int len])\",\"Read from an open directory entry\"],zip_open:[\"resource zip_open(string filename)\",\"Create new zip using source uri for output\"],zip_read:[\"resource zip_read(resource zip)\",\"Returns the next file in the archive\"],zlib_get_coding_type:[\"string zlib_get_coding_type(void)\",\"Returns the coding type used for output compression\"]},i={$_COOKIE:{type:\"array\"},$_ENV:{type:\"array\"},$_FILES:{type:\"array\"},$_GET:{type:\"array\"},$_POST:{type:\"array\"},$_REQUEST:{type:\"array\"},$_SERVER:{type:\"array\",value:{DOCUMENT_ROOT:1,GATEWAY_INTERFACE:1,HTTP_ACCEPT:1,HTTP_ACCEPT_CHARSET:1,HTTP_ACCEPT_ENCODING:1,HTTP_ACCEPT_LANGUAGE:1,HTTP_CONNECTION:1,HTTP_HOST:1,HTTP_REFERER:1,HTTP_USER_AGENT:1,PATH_TRANSLATED:1,PHP_SELF:1,QUERY_STRING:1,REMOTE_ADDR:1,REMOTE_PORT:1,REQUEST_METHOD:1,REQUEST_URI:1,SCRIPT_FILENAME:1,SCRIPT_NAME:1,SERVER_ADMIN:1,SERVER_NAME:1,SERVER_PORT:1,SERVER_PROTOCOL:1,SERVER_SIGNATURE:1,SERVER_SOFTWARE:1}},$_SESSION:{type:\"array\"},$GLOBALS:{type:\"array\"}},o=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(i.type===\"support.php_tag\"&&i.value===\"<?\")return this.getTagCompletions(e,t,n,r);if(i.type===\"identifier\"){if(i.index>0){var o=t.getTokenAt(n.row,i.start);if(o.type===\"support.php_tag\")return this.getTagCompletions(e,t,n,r)}return this.getFunctionCompletions(e,t,n,r)}if(s(i,\"variable\"))return this.getVariableCompletions(e,t,n,r);var u=t.getLine(n.row).substr(0,n.column);return i.type===\"string\"&&/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(u)?this.getArrayKeyCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return[{caption:\"php\",value:\"php\",meta:\"php tag\",score:1e6},{caption:\"=\",value:\"=\",meta:\"php tag\",score:1e6}]},this.getFunctionCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\"($0)\",meta:\"php function\",score:1e6,docHTML:r[e][1]}})},this.getVariableCompletions=function(e,t,n,r){var s=Object.keys(i);return s.map(function(e){return{caption:e,value:e,meta:\"php variable\",score:1e6}})},this.getArrayKeyCompletions=function(e,t,n,r){var s=t.getLine(n.row).substr(0,n.column),o=s.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];if(!i[o])return[];var u=[];return i[o].type===\"array\"&&i[o].value&&(u=Object.keys(i[o].value)),u.map(function(e){return{caption:e,value:e,meta:\"php array key\",score:1e6}})}}).call(o.prototype),t.PhpCompletions=o}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./php_highlight_rules\").PhpHighlightRules,o=e(\"./php_highlight_rules\").PhpLangHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=e(\"../worker/worker_client\").WorkerClient,l=e(\"./php_completions\").PhpCompletions,c=e(\"./behaviour/cstyle\").CstyleBehaviour,h=e(\"./folding/cstyle\").FoldMode,p=e(\"../unicode\"),d=e(\"./html\").Mode,v=e(\"./javascript\").Mode,m=e(\"./css\").Mode,g=function(e){this.HighlightRules=o,this.$outdent=new u,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new h};r.inherits(g,i),function(){this.tokenRe=new RegExp(\"^[\"+p.wordChars+\"_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+p.wordChars+\"_]|\\\\s])+\",\"g\"),this.lineCommentStart=[\"//\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[:]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o!=\"doc-start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id=\"ace/mode/php-inline\"}.call(g.prototype);var y=function(e){if(e&&e.inline){var t=new g;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}d.call(this),this.HighlightRules=s,this.createModeDelegates({\"js-\":v,\"css-\":m,\"php-\":g}),this.foldingRules.subModes[\"php-\"]=new h};r.inherits(y,d),function(){this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/php_worker\",\"PhpWorker\");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call(\"setOptions\",[{inline:!0}]),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/php\"}.call(y.prototype),t.Mode=y});                (function() {\n                    window.require([\"ace/mode/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-php_laravel_blade.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(){var e=s,t=i.arrayToMap(\"abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|mysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|mysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|mysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|mysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|mysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|mysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|mysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|mysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|mysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|mysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|mysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|mysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|mysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|mysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|mysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|mysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|mysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|mysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type\".split(\"|\")),n=i.arrayToMap(\"abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|public|static|switch|throw|trait|try|use|var|while|xor|yield\".split(\"|\")),r=i.arrayToMap(\"__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset\".split(\"|\")),o=i.arrayToMap(\"true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__\".split(\"|\")),u=i.arrayToMap(\"$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv\".split(\"|\")),a=i.arrayToMap(\"key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase\".split(\"|\")),f=i.arrayToMap(\"cfunction|old_function\".split(\"|\")),l=i.arrayToMap([]);this.$rules={start:[{token:\"comment\",regex:/(?:#|\\/\\/)(?:[^?]|\\?[^>])*/},e.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language\",regex:\"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"},{token:[\"keyword\",\"text\",\"support.class\"],regex:\"\\\\b(new)(\\\\s+)(\\\\w+)\"},{token:[\"support.class\",\"keyword.operator\"],regex:\"\\\\b(\\\\w+)(::)\"},{token:\"constant.language\",regex:\"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"},{token:function(e){return n.hasOwnProperty(e)?\"keyword\":o.hasOwnProperty(e)?\"constant.language\":u.hasOwnProperty(e)?\"variable.language\":l.hasOwnProperty(e)?\"invalid.illegal\":t.hasOwnProperty(e)?\"support.function\":e==\"debugger\"?\"invalid.deprecated\":e.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/)?\"variable\":\"identifier\"},regex:/[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{onMatch:function(e,t,n){e=e.substr(3);if(e[0]==\"'\"||e[0]=='\"')e=e.slice(1,-1);return n.unshift(this.next,e),\"markup.list\"},regex:/<<<(?:\\w+|'\\w+'|\"\\w+\")$/,next:\"heredoc\"},{token:\"keyword.operator\",regex:\"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:/[,;]/},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],heredoc:[{onMatch:function(e,t,n){return n[1]!=e?\"string\":(n.shift(),n.shift(),\"markup.list\")},regex:\"^\\\\w+(?=;?$)\",next:\"start\"},{token:\"string\",regex:\".*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"constant.language.escape\",regex:'\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:\"variable\",regex:/\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/},{token:\"variable\",regex:/\\$\\{[^\"\\}]+\\}?/},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string\",regex:\"'\",next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(a,o);var f=function(){u.call(this);var e=[{token:\"support.php_tag\",regex:\"<\\\\?(?:php|=)?\",push:\"php-start\"}],t=[{token:\"support.php_tag\",regex:\"\\\\?>\",next:\"pop\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(a,\"php-\",t,[\"start\"]),this.normalizeRules()};r.inherits(f,u),t.PhpHighlightRules=f,t.PhpLangHighlightRules=a}),define(\"ace/mode/php_laravel_blade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./php_highlight_rules\").PhpHighlightRules,s=function(){i.call(this);var e={start:[{include:\"comments\"},{include:\"directives\"},{include:\"parenthesis\"}],comments:[{token:\"punctuation.definition.comment.blade\",regex:\"(\\\\/\\\\/(.)*)|(\\\\#(.)*)\",next:\"pop\"},{token:\"punctuation.definition.comment.begin.php\",regex:\"(?:\\\\/\\\\*)\",push:[{token:\"punctuation.definition.comment.end.php\",regex:\"(?:\\\\*\\\\/)\",next:\"pop\"},{defaultToken:\"comment.block.blade\"}]},{token:\"punctuation.definition.comment.begin.blade\",regex:\"(?:\\\\{\\\\{\\\\-\\\\-)\",push:[{token:\"punctuation.definition.comment.end.blade\",regex:\"(?:\\\\-\\\\-\\\\}\\\\})\",next:\"pop\"},{defaultToken:\"comment.block.blade\"}]}],parenthesis:[{token:\"parenthesis.begin.blade\",regex:\"\\\\(\",push:[{token:\"parenthesis.end.blade\",regex:\"\\\\)\",next:\"pop\"},{include:\"strings\"},{include:\"variables\"},{include:\"lang\"},{include:\"parenthesis\"},{defaultToken:\"source.blade\"}]}],directives:[{token:[\"directive.declaration.blade\",\"keyword.directives.blade\"],regex:\"(@)(endunless|endisset|endempty|endauth|endguest|endcomponent|endslot|endalert|endverbatim|endsection|show|php|endphp|endpush|endprepend|endenv|endforelse|isset|empty|component|slot|alert|json|verbatim|section|auth|guest|hasSection|forelse|includeIf|includeWhen|includeFirst|each|push|stack|prepend|inject|env|elseenv|unless|yield|extends|parent|include|acfrepeater|block|can|cannot|choice|debug|elsecan|elsecannot|embed|hipchat|lang|layout|macro|macrodef|minify|partial|render|servers|set|slack|story|task|unset|wpposts|acfend|after|append|breakpoint|endafter|endcan|endcannot|endembed|endmacro|endmarkdown|endminify|endpartial|endsetup|endstory|endtask|endunless|markdown|overwrite|setup|stop|wpempty|wpend|wpquery)\"},{token:[\"directive.declaration.blade\",\"keyword.control.blade\"],regex:\"(@)(if|else|elseif|endif|foreach|endforeach|switch|case|break|default|endswitch|for|endfor|while|endwhile|continue)\"},{token:[\"directive.ignore.blade\",\"injections.begin.blade\"],regex:\"(@?)(\\\\{\\\\{)\",push:[{token:\"injections.end.blade\",regex:\"\\\\}\\\\}\",next:\"pop\"},{include:\"strings\"},{include:\"variables\"},{defaultToken:\"source.blade\"}]},{token:\"injections.unescaped.begin.blade\",regex:\"\\\\{\\\\!\\\\!\",push:[{token:\"injections.unescaped.end.blade\",regex:\"\\\\!\\\\!\\\\}\",next:\"pop\"},{include:\"strings\"},{include:\"variables\"},{defaultToken:\"source.blade\"}]}],lang:[{token:\"keyword.operator.blade\",regex:\"(?:!=|!|<=|>=|<|>|===|==|=|\\\\+\\\\+|\\\\;|\\\\,|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod|as)\\\\b\"},{token:\"constant.language.blade\",regex:\"\\\\b(?:TRUE|FALSE|true|false)\\\\b\"}],strings:[{token:\"punctuation.definition.string.begin.blade\",regex:'\"',push:[{token:\"punctuation.definition.string.end.blade\",regex:'\"',next:\"pop\"},{token:\"string.character.escape.blade\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.blade\"}]},{token:\"punctuation.definition.string.begin.blade\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.blade\",regex:\"'\",next:\"pop\"},{token:\"string.character.escape.blade\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.blade\"}]}],variables:[{token:\"variable.blade\",regex:\"\\\\$([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.blade\",\"constant.other.property.blade\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.blade\",\"meta.function-call.object.blade\",\"punctuation.definition.variable.blade\",\"variable.blade\",\"punctuation.definition.variable.blade\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))\"}]},t=e.start;for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],t);Object.keys(e).forEach(function(t){this.$rules[t]||(this.$rules[t]=e[t])},this),this.normalizeRules()};r.inherits(s,i),t.PHPLaravelBladeHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function s(e,t){return e.type.lastIndexOf(t)>-1}var r={abs:[\"int abs(int number)\",\"Return the absolute value of the number\"],acos:[\"float acos(float number)\",\"Return the arc cosine of the number in radians\"],acosh:[\"float acosh(float number)\",\"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"],addGlob:[\"bool addGlob(string pattern[,int flags [, array options]])\",\"Add files matching the glob pattern. See php's glob for the pattern syntax.\"],addPattern:[\"bool addPattern(string pattern[, string path [, array options]])\",\"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"],addcslashes:[\"string addcslashes(string str, string charlist)\",\"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"],addslashes:[\"string addslashes(string str)\",\"Escapes single quote, double quotes and backslash characters in a string with backslashes\"],apache_child_terminate:[\"bool apache_child_terminate(void)\",\"Terminate apache process after this request\"],apache_get_modules:[\"array apache_get_modules(void)\",\"Get a list of loaded Apache modules\"],apache_get_version:[\"string apache_get_version(void)\",\"Fetch Apache version\"],apache_getenv:[\"bool apache_getenv(string variable [, bool walk_to_top])\",\"Get an Apache subprocess_env variable\"],apache_lookup_uri:[\"object apache_lookup_uri(string URI)\",\"Perform a partial request of the given URI to obtain information about it\"],apache_note:[\"string apache_note(string note_name [, string note_value])\",\"Get and set Apache request notes\"],apache_request_auth_name:[\"string apache_request_auth_name()\",\"\"],apache_request_auth_type:[\"string apache_request_auth_type()\",\"\"],apache_request_discard_request_body:[\"long apache_request_discard_request_body()\",\"\"],apache_request_err_headers_out:[\"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all headers that go out in case of an error or a subrequest\"],apache_request_headers:[\"array apache_request_headers(void)\",\"Fetch all HTTP request headers\"],apache_request_headers_in:[\"array apache_request_headers_in()\",\"* fetch all incoming request headers\"],apache_request_headers_out:[\"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all outgoing request headers\"],apache_request_is_initial_req:[\"bool apache_request_is_initial_req()\",\"\"],apache_request_log_error:[\"boolean apache_request_log_error(string message, [long facility])\",\"\"],apache_request_meets_conditions:[\"long apache_request_meets_conditions()\",\"\"],apache_request_remote_host:[\"int apache_request_remote_host([int type])\",\"\"],apache_request_run:[\"long apache_request_run()\",\"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"],apache_request_satisfies:[\"long apache_request_satisfies()\",\"\"],apache_request_server_port:[\"int apache_request_server_port()\",\"\"],apache_request_set_etag:[\"void apache_request_set_etag()\",\"\"],apache_request_set_last_modified:[\"void apache_request_set_last_modified()\",\"\"],apache_request_some_auth_required:[\"bool apache_request_some_auth_required()\",\"\"],apache_request_sub_req_lookup_file:[\"object apache_request_sub_req_lookup_file(string file)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_sub_req_lookup_uri:[\"object apache_request_sub_req_lookup_uri(string uri)\",\"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"],apache_request_sub_req_method_uri:[\"object apache_request_sub_req_method_uri(string method, string uri)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_update_mtime:[\"long apache_request_update_mtime([int dependency_mtime])\",\"\"],apache_reset_timeout:[\"bool apache_reset_timeout(void)\",\"Reset the Apache write timer\"],apache_response_headers:[\"array apache_response_headers(void)\",\"Fetch all HTTP response headers\"],apache_setenv:[\"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\"Set an Apache subprocess_env variable\"],array_change_key_case:[\"array array_change_key_case(array input [, int case=CASE_LOWER])\",\"Retuns an array with all string keys lowercased [or uppercased]\"],array_chunk:[\"array array_chunk(array input, int size [, bool preserve_keys])\",\"Split array into chunks\"],array_combine:[\"array array_combine(array keys, array values)\",\"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"],array_count_values:[\"array array_count_values(array input)\",\"Return the value as key and the frequency of that value in input as value\"],array_diff:[\"array array_diff(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"],array_diff_assoc:[\"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"],array_diff_key:[\"array array_diff_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"],array_diff_uassoc:[\"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"],array_diff_ukey:[\"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"],array_fill:[\"array array_fill(int start_key, int num, mixed val)\",\"Create an array containing num elements starting with index start_key each initialized to val\"],array_fill_keys:[\"array array_fill_keys(array keys, mixed val)\",\"Create an array using the elements of the first parameter as keys each initialized to val\"],array_filter:[\"array array_filter(array input [, mixed callback])\",\"Filters elements from the array via the callback.\"],array_flip:[\"array array_flip(array input)\",\"Return array with key <-> value flipped\"],array_intersect:[\"array array_intersect(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments\"],array_intersect_assoc:[\"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"],array_intersect_key:[\"array array_intersect_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"],array_intersect_uassoc:[\"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"],array_intersect_ukey:[\"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"],array_key_exists:[\"bool array_key_exists(mixed key, array search)\",\"Checks if the given key or index exists in the array\"],array_keys:[\"array array_keys(array input [, mixed search_value[, bool strict]])\",\"Return just the keys from the input array, optionally only for the specified search_value\"],array_map:[\"array array_map(mixed callback, array input1 [, array input2 ,...])\",\"Applies the callback to the elements in given arrays.\"],array_merge:[\"array array_merge(array arr1, array arr2 [, array ...])\",\"Merges elements from passed arrays into one array\"],array_merge_recursive:[\"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\"Recursively merges elements from passed arrays into one array\"],array_multisort:[\"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"],array_pad:[\"array array_pad(array input, int pad_size, mixed pad_value)\",\"Returns a copy of input array padded with pad_value to size pad_size\"],array_pop:[\"mixed array_pop(array stack)\",\"Pops an element off the end of the array\"],array_product:[\"mixed array_product(array input)\",\"Returns the product of the array entries\"],array_push:[\"int array_push(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the end of the array\"],array_rand:[\"mixed array_rand(array input [, int num_req])\",\"Return key/keys for random entry/entries in the array\"],array_reduce:[\"mixed array_reduce(array input, mixed callback [, mixed initial])\",\"Iteratively reduce the array to a single value via the callback.\"],array_replace:[\"array array_replace(array arr1, array arr2 [, array ...])\",\"Replaces elements from passed arrays into one array\"],array_replace_recursive:[\"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\"Recursively replaces elements from passed arrays into one array\"],array_reverse:[\"array array_reverse(array input [, bool preserve keys])\",\"Return input as a new array with the order of the entries reversed\"],array_search:[\"mixed array_search(mixed needle, array haystack [, bool strict])\",\"Searches the array for a given value and returns the corresponding key if successful\"],array_shift:[\"mixed array_shift(array stack)\",\"Pops an element off the beginning of the array\"],array_slice:[\"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\"Returns elements specified by offset and length\"],array_splice:[\"array array_splice(array input, int offset [, int length [, array replacement]])\",\"Removes the elements designated by offset and length and replace them with supplied array\"],array_sum:[\"mixed array_sum(array input)\",\"Returns the sum of the array entries\"],array_udiff:[\"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"],array_udiff_assoc:[\"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"],array_udiff_uassoc:[\"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"],array_uintersect:[\"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"],array_uintersect_assoc:[\"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"],array_uintersect_uassoc:[\"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"],array_unique:[\"array array_unique(array input [, int sort_flags])\",\"Removes duplicate values from array\"],array_unshift:[\"int array_unshift(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the beginning of the array\"],array_values:[\"array array_values(array input)\",\"Return just the values from the input array\"],array_walk:[\"bool array_walk(array input, string funcname [, mixed userdata])\",\"Apply a user function to every member of an array\"],array_walk_recursive:[\"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\"Apply a user function recursively to every member of an array\"],arsort:[\"bool arsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order and maintain index association\"],asin:[\"float asin(float number)\",\"Returns the arc sine of the number in radians\"],asinh:[\"float asinh(float number)\",\"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"],asort:[\"bool asort(array &array_arg [, int sort_flags])\",\"Sort an array and maintain index association\"],assert:[\"int assert(string|bool assertion)\",\"Checks if assertion is false\"],assert_options:[\"mixed assert_options(int what [, mixed value])\",\"Set/get the various assert flags\"],atan:[\"float atan(float number)\",\"Returns the arc tangent of the number in radians\"],atan2:[\"float atan2(float y, float x)\",\"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"],atanh:[\"float atanh(float number)\",\"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"],attachIterator:[\"void attachIterator(Iterator iterator[, mixed info])\",\"Attach a new iterator\"],base64_decode:[\"string base64_decode(string str[, bool strict])\",\"Decodes string using MIME base64 algorithm\"],base64_encode:[\"string base64_encode(string str)\",\"Encodes string using MIME base64 algorithm\"],base_convert:[\"string base_convert(string number, int frombase, int tobase)\",\"Converts a number in a string from any base <= 36 to any base <= 36\"],basename:[\"string basename(string path [, string suffix])\",\"Returns the filename component of the path\"],bcadd:[\"string bcadd(string left_operand, string right_operand [, int scale])\",\"Returns the sum of two arbitrary precision numbers\"],bccomp:[\"int bccomp(string left_operand, string right_operand [, int scale])\",\"Compares two arbitrary precision numbers\"],bcdiv:[\"string bcdiv(string left_operand, string right_operand [, int scale])\",\"Returns the quotient of two arbitrary precision numbers (division)\"],bcmod:[\"string bcmod(string left_operand, string right_operand)\",\"Returns the modulus of the two arbitrary precision operands\"],bcmul:[\"string bcmul(string left_operand, string right_operand [, int scale])\",\"Returns the multiplication of two arbitrary precision numbers\"],bcpow:[\"string bcpow(string x, string y [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another\"],bcpowmod:[\"string bcpowmod(string x, string y, string mod [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"],bcscale:[\"bool bcscale(int scale)\",\"Sets default scale parameter for all bc math functions\"],bcsqrt:[\"string bcsqrt(string operand [, int scale])\",\"Returns the square root of an arbitray precision number\"],bcsub:[\"string bcsub(string left_operand, string right_operand [, int scale])\",\"Returns the difference between two arbitrary precision numbers\"],bin2hex:[\"string bin2hex(string data)\",\"Converts the binary representation of data to hex\"],bind_textdomain_codeset:[\"string bind_textdomain_codeset (string domain, string codeset)\",\"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"],bindec:[\"int bindec(string binary_number)\",\"Returns the decimal equivalent of the binary number\"],bindtextdomain:[\"string bindtextdomain(string domain_name, string dir)\",\"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"],birdstep_autocommit:[\"bool birdstep_autocommit(int index)\",\"\"],birdstep_close:[\"bool birdstep_close(int id)\",\"\"],birdstep_commit:[\"bool birdstep_commit(int index)\",\"\"],birdstep_connect:[\"int birdstep_connect(string server, string user, string pass)\",\"\"],birdstep_exec:[\"int birdstep_exec(int index, string exec_str)\",\"\"],birdstep_fetch:[\"bool birdstep_fetch(int index)\",\"\"],birdstep_fieldname:[\"string birdstep_fieldname(int index, int col)\",\"\"],birdstep_fieldnum:[\"int birdstep_fieldnum(int index)\",\"\"],birdstep_freeresult:[\"bool birdstep_freeresult(int index)\",\"\"],birdstep_off_autocommit:[\"bool birdstep_off_autocommit(int index)\",\"\"],birdstep_result:[\"mixed birdstep_result(int index, mixed col)\",\"\"],birdstep_rollback:[\"bool birdstep_rollback(int index)\",\"\"],bzcompress:[\"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\"Compresses a string into BZip2 encoded data\"],bzdecompress:[\"string bzdecompress(string source [, int small])\",\"Decompresses BZip2 compressed data\"],bzerrno:[\"int bzerrno(resource bz)\",\"Returns the error number\"],bzerror:[\"array bzerror(resource bz)\",\"Returns the error number and error string in an associative array\"],bzerrstr:[\"string bzerrstr(resource bz)\",\"Returns the error string\"],bzopen:[\"resource bzopen(string|int file|fp, string mode)\",\"Opens a new BZip2 stream\"],bzread:[\"string bzread(resource bz[, int length])\",\"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"],cal_days_in_month:[\"int cal_days_in_month(int calendar, int month, int year)\",\"Returns the number of days in a month for a given year and calendar\"],cal_from_jd:[\"array cal_from_jd(int jd, int calendar)\",\"Converts from Julian Day Count to a supported calendar and return extended information\"],cal_info:[\"array cal_info([int calendar])\",\"Returns information about a particular calendar\"],cal_to_jd:[\"int cal_to_jd(int calendar, int month, int day, int year)\",\"Converts from a supported calendar to Julian Day Count\"],call_user_func:[\"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],call_user_func_array:[\"mixed call_user_func_array(string function_name, array parameters)\",\"Call a user function which is the first parameter with the arguments contained in array\"],call_user_method:[\"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\"Call a user method on a specific object or class\"],call_user_method_array:[\"mixed call_user_method_array(string method_name, mixed object, array params)\",\"Call a user method on a specific object or class using a parameter array\"],ceil:[\"float ceil(float number)\",\"Returns the next highest integer value of the number\"],chdir:[\"bool chdir(string directory)\",\"Change the current directory\"],checkdate:[\"bool checkdate(int month, int day, int year)\",\"Returns true(1) if it is a valid date in gregorian calendar\"],chgrp:[\"bool chgrp(string filename, mixed group)\",\"Change file group\"],chmod:[\"bool chmod(string filename, int mode)\",\"Change file mode\"],chown:[\"bool chown (string filename, mixed user)\",\"Change file owner\"],chr:[\"string chr(int ascii)\",\"Converts ASCII code to a character\"],chroot:[\"bool chroot(string directory)\",\"Change root directory\"],chunk_split:[\"string chunk_split(string str [, int chunklen [, string ending]])\",\"Returns split line\"],class_alias:[\"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\"Creates an alias for user defined class\"],class_exists:[\"bool class_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],class_implements:[\"array class_implements(mixed what [, bool autoload ])\",\"Return all classes and interfaces implemented by SPL\"],class_parents:[\"array class_parents(object instance [, boolean autoload = true])\",\"Return an array containing the names of all parent classes\"],clearstatcache:[\"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\"Clear file stat cache\"],closedir:[\"void closedir([resource dir_handle])\",\"Close directory connection identified by the dir_handle\"],closelog:[\"bool closelog(void)\",\"Close connection to system logger\"],collator_asort:[\"bool collator_asort( Collator $coll, array(string) $arr )\",\"* Sort array using specified collator, maintaining index association.\"],collator_compare:[\"int collator_compare( Collator $coll, string $str1, string $str2 )\",\"* Compare two strings.\"],collator_create:[\"Collator collator_create( string $locale )\",\"* Create collator.\"],collator_get_attribute:[\"int collator_get_attribute( Collator $coll, int $attr )\",\"* Get collation attribute value.\"],collator_get_error_code:[\"int collator_get_error_code( Collator $coll )\",\"* Get collator's last error code.\"],collator_get_error_message:[\"string collator_get_error_message( Collator $coll )\",\"* Get text description for collator's last error code.\"],collator_get_locale:[\"string collator_get_locale( Collator $coll, int $type )\",\"* Gets the locale name of the collator.\"],collator_get_sort_key:[\"bool collator_get_sort_key( Collator $coll, string $str )\",\"* Get a sort key for a string from a Collator. }}}\"],collator_get_strength:[\"int collator_get_strength(Collator coll)\",\"* Returns the current collation strength.\"],collator_set_attribute:[\"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\"* Set collation attribute.\"],collator_set_strength:[\"bool collator_set_strength(Collator coll, int strength)\",\"* Set the collation strength.\"],collator_sort:[\"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\"* Sort array using specified collator.\"],collator_sort_with_sort_keys:[\"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"],com_create_guid:[\"string com_create_guid()\",\"Generate a globally unique identifier (GUID)\"],com_event_sink:[\"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\"Connect events from a COM object to a PHP object\"],com_get_active_object:[\"object com_get_active_object(string progid [, int code_page ])\",\"Returns a handle to an already running instance of a COM object\"],com_load_typelib:[\"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\"Loads a Typelibrary and registers its constants\"],com_message_pump:[\"bool com_message_pump([int timeoutms])\",\"Process COM messages, sleeping for up to timeoutms milliseconds\"],com_print_typeinfo:[\"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\"Print out a PHP class definition for a dispatchable interface\"],compact:[\"array compact(mixed var_names [, mixed ...])\",\"Creates a hash containing variables and their values\"],compose_locale:[\"static string compose_locale($array)\",\"* Creates a locale by combining the parts of locale-ID passed  * }}}\"],confirm_extname_compiled:[\"string confirm_extname_compiled(string arg)\",\"Return a string to confirm that the module is compiled in\"],connection_aborted:[\"int connection_aborted(void)\",\"Returns true if client disconnected\"],connection_status:[\"int connection_status(void)\",\"Returns the connection status bitfield\"],constant:[\"mixed constant(string const_name)\",\"Given the name of a constant this function will return the constant's associated value\"],convert_cyr_string:[\"string convert_cyr_string(string str, string from, string to)\",\"Convert from one Cyrillic character set to another\"],convert_uudecode:[\"string convert_uudecode(string data)\",\"decode a uuencoded string\"],convert_uuencode:[\"string convert_uuencode(string data)\",\"uuencode a string\"],copy:[\"bool copy(string source_file, string destination_file [, resource context])\",\"Copy a file\"],cos:[\"float cos(float number)\",\"Returns the cosine of the number in radians\"],cosh:[\"float cosh(float number)\",\"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"],count:[\"int count(mixed var [, int mode])\",\"Count the number of elements in a variable (usually an array)\"],count_chars:[\"mixed count_chars(string input [, int mode])\",\"Returns info about what characters are used in input\"],crc32:[\"string crc32(string str)\",\"Calculate the crc32 polynomial of a string\"],create_function:[\"string create_function(string args, string code)\",\"Creates an anonymous function, and returns its name (funny, eh?)\"],crypt:[\"string crypt(string str [, string salt])\",\"Hash a string\"],ctype_alnum:[\"bool ctype_alnum(mixed c)\",\"Checks for alphanumeric character(s)\"],ctype_alpha:[\"bool ctype_alpha(mixed c)\",\"Checks for alphabetic character(s)\"],ctype_cntrl:[\"bool ctype_cntrl(mixed c)\",\"Checks for control character(s)\"],ctype_digit:[\"bool ctype_digit(mixed c)\",\"Checks for numeric character(s)\"],ctype_graph:[\"bool ctype_graph(mixed c)\",\"Checks for any printable character(s) except space\"],ctype_lower:[\"bool ctype_lower(mixed c)\",\"Checks for lowercase character(s)\"],ctype_print:[\"bool ctype_print(mixed c)\",\"Checks for printable character(s)\"],ctype_punct:[\"bool ctype_punct(mixed c)\",\"Checks for any printable character which is not whitespace or an alphanumeric character\"],ctype_space:[\"bool ctype_space(mixed c)\",\"Checks for whitespace character(s)\"],ctype_upper:[\"bool ctype_upper(mixed c)\",\"Checks for uppercase character(s)\"],ctype_xdigit:[\"bool ctype_xdigit(mixed c)\",\"Checks for character(s) representing a hexadecimal digit\"],curl_close:[\"void curl_close(resource ch)\",\"Close a cURL session\"],curl_copy_handle:[\"resource curl_copy_handle(resource ch)\",\"Copy a cURL handle along with all of it's preferences\"],curl_errno:[\"int curl_errno(resource ch)\",\"Return an integer containing the last error number\"],curl_error:[\"string curl_error(resource ch)\",\"Return a string contain the last error for the current session\"],curl_exec:[\"bool curl_exec(resource ch)\",\"Perform a cURL session\"],curl_getinfo:[\"mixed curl_getinfo(resource ch [, int option])\",\"Get information regarding a specific transfer\"],curl_init:[\"resource curl_init([string url])\",\"Initialize a cURL session\"],curl_multi_add_handle:[\"int curl_multi_add_handle(resource mh, resource ch)\",\"Add a normal cURL handle to a cURL multi handle\"],curl_multi_close:[\"void curl_multi_close(resource mh)\",\"Close a set of cURL handles\"],curl_multi_exec:[\"int curl_multi_exec(resource mh, int &still_running)\",\"Run the sub-connections of the current cURL handle\"],curl_multi_getcontent:[\"string curl_multi_getcontent(resource ch)\",\"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"],curl_multi_info_read:[\"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\"Get information about the current transfers\"],curl_multi_init:[\"resource curl_multi_init(void)\",\"Returns a new cURL multi handle\"],curl_multi_remove_handle:[\"int curl_multi_remove_handle(resource mh, resource ch)\",\"Remove a multi handle from a set of cURL handles\"],curl_multi_select:[\"int curl_multi_select(resource mh[, double timeout])\",'Get all the sockets associated with the cURL extension, which can then be \"selected\"'],curl_setopt:[\"bool curl_setopt(resource ch, int option, mixed value)\",\"Set an option for a cURL transfer\"],curl_setopt_array:[\"bool curl_setopt_array(resource ch, array options)\",\"Set an array of option for a cURL transfer\"],curl_version:[\"array curl_version([int version])\",\"Return cURL version information.\"],current:[\"mixed current(array array_arg)\",\"Return the element currently pointed to by the internal array pointer\"],date:[\"string date(string format [, long timestamp])\",\"Format a local date/time\"],date_add:[\"DateTime date_add(DateTime object, DateInterval interval)\",\"Adds an interval to the current date in object.\"],date_create:[\"DateTime date_create([string time[, DateTimeZone object]])\",\"Returns new DateTime object\"],date_create_from_format:[\"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\"Returns new DateTime object formatted according to the specified format\"],date_date_set:[\"DateTime date_date_set(DateTime object, long year, long month, long day)\",\"Sets the date.\"],date_default_timezone_get:[\"string date_default_timezone_get()\",\"Gets the default timezone used by all date/time functions in a script\"],date_default_timezone_set:[\"bool date_default_timezone_set(string timezone_identifier)\",\"Sets the default timezone used by all date/time functions in a script\"],date_diff:[\"DateInterval date_diff(DateTime object [, bool absolute])\",\"Returns the difference between two DateTime objects.\"],date_format:[\"string date_format(DateTime object, string format)\",\"Returns date formatted according to given format\"],date_get_last_errors:[\"array date_get_last_errors()\",\"Returns the warnings and errors found while parsing a date/time string.\"],date_interval_create_from_date_string:[\"DateInterval date_interval_create_from_date_string(string time)\",\"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"],date_interval_format:[\"string date_interval_format(DateInterval object, string format)\",\"Formats the interval.\"],date_isodate_set:[\"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\"Sets the ISO date.\"],date_modify:[\"DateTime date_modify(DateTime object, string modify)\",\"Alters the timestamp.\"],date_offset_get:[\"long date_offset_get(DateTime object)\",\"Returns the DST offset.\"],date_parse:[\"array date_parse(string date)\",\"Returns associative array with detailed info about given date\"],date_parse_from_format:[\"array date_parse_from_format(string format, string date)\",\"Returns associative array with detailed info about given date\"],date_sub:[\"DateTime date_sub(DateTime object, DateInterval interval)\",\"Subtracts an interval to the current date in object.\"],date_sun_info:[\"array date_sun_info(long time, float latitude, float longitude)\",\"Returns an array with information about sun set/rise and twilight begin/end\"],date_sunrise:[\"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunrise for a given day and location\"],date_sunset:[\"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunset for a given day and location\"],date_time_set:[\"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\"Sets the time.\"],date_timestamp_get:[\"long date_timestamp_get(DateTime object)\",\"Gets the Unix timestamp.\"],date_timestamp_set:[\"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\"Sets the date and time based on an Unix timestamp.\"],date_timezone_get:[\"DateTimeZone date_timezone_get(DateTime object)\",\"Return new DateTimeZone object relative to give DateTime\"],date_timezone_set:[\"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\"Sets the timezone for the DateTime object.\"],datefmt_create:[\"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\"* Create formatter.\"],datefmt_format:[\"string datefmt_format( [mixed]int $args or array $args )\",\"* Format the time value as a string. }}}\"],datefmt_get_calendar:[\"string datefmt_get_calendar( IntlDateFormatter $mf )\",\"* Get formatter calendar.\"],datefmt_get_datetype:[\"string datefmt_get_datetype( IntlDateFormatter $mf )\",\"* Get formatter datetype.\"],datefmt_get_error_code:[\"int datefmt_get_error_code( IntlDateFormatter $nf )\",\"* Get formatter's last error code.\"],datefmt_get_error_message:[\"string datefmt_get_error_message( IntlDateFormatter $coll )\",\"* Get text description for formatter's last error code.\"],datefmt_get_locale:[\"string datefmt_get_locale(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_get_pattern:[\"string datefmt_get_pattern( IntlDateFormatter $mf )\",\"* Get formatter pattern.\"],datefmt_get_timetype:[\"string datefmt_get_timetype( IntlDateFormatter $mf )\",\"* Get formatter timetype.\"],datefmt_get_timezone_id:[\"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\"* Get formatter timezone_id.\"],datefmt_isLenient:[\"string datefmt_isLenient(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_localtime:[\"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\"* Parse the string $value to a localtime array  }}}\"],datefmt_parse:[\"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"],datefmt_setLenient:[\"string datefmt_setLenient(IntlDateFormatter $mf)\",\"* Set formatter lenient.\"],datefmt_set_calendar:[\"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\"* Set formatter calendar.\"],datefmt_set_pattern:[\"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],datefmt_set_timezone_id:[\"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\"* Set formatter timezone_id.\"],dba_close:[\"void dba_close(resource handle)\",\"Closes database\"],dba_delete:[\"bool dba_delete(string key, resource handle)\",\"Deletes the entry associated with key    If inifile: remove all other key lines\"],dba_exists:[\"bool dba_exists(string key, resource handle)\",\"Checks, if the specified key exists\"],dba_fetch:[\"string dba_fetch(string key, [int skip ,] resource handle)\",\"Fetches the data associated with key\"],dba_firstkey:[\"string dba_firstkey(resource handle)\",\"Resets the internal key pointer and returns the first key\"],dba_handlers:[\"array dba_handlers([bool full_info])\",\"List configured database handlers\"],dba_insert:[\"bool dba_insert(string key, string value, resource handle)\",\"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"],dba_key_split:[\"array|false dba_key_split(string key)\",\"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"],dba_list:[\"array dba_list()\",\"List opened databases\"],dba_nextkey:[\"string dba_nextkey(resource handle)\",\"Returns the next key\"],dba_open:[\"resource dba_open(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode\"],dba_optimize:[\"bool dba_optimize(resource handle)\",\"Optimizes (e.g. clean up, vacuum) database\"],dba_popen:[\"resource dba_popen(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode persistently\"],dba_replace:[\"bool dba_replace(string key, string value, resource handle)\",\"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"],dba_sync:[\"bool dba_sync(resource handle)\",\"Synchronizes database\"],dcgettext:[\"string dcgettext(string domain_name, string msgid, long category)\",\"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"],dcngettext:[\"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\"Plural version of dcgettext()\"],debug_backtrace:[\"array debug_backtrace([bool provide_object])\",\"Return backtrace as array\"],debug_print_backtrace:[\"void debug_print_backtrace(void) */\",\"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);\",\"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"],dom_document_relaxNG_validate_xml:[\"boolean dom_document_relaxNG_validate_xml(string source); */\",\"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"],dom_document_rename_node:[\"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"],dom_document_save:[\"int dom_document_save(string file);\",\"Convenience method to save to file\"],dom_document_save_html:[\"string dom_document_save_html();\",\"Convenience method to output as html\"],dom_document_save_html_file:[\"int dom_document_save_html_file(string file);\",\"Convenience method to save to file as html\"],dom_document_savexml:[\"string dom_document_savexml([node n]);\",\"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"],dom_document_schema_validate:[\"boolean dom_document_schema_validate(string source); */\",\"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"],dom_document_schema_validate_file:[\"boolean dom_document_schema_validate_file(string filename); */\",\"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"],dom_document_validate:[\"boolean dom_document_validate();\",\"Since: DOM extended\"],dom_document_xinclude:[\"int dom_document_xinclude([int options])\",\"Substitutues xincludes in a DomDocument\"],dom_domconfiguration_can_set_parameter:[\"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"],dom_domconfiguration_get_parameter:[\"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"],dom_domconfiguration_set_parameter:[\"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"],dom_domerrorhandler_handle_error:[\"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"],dom_domimplementation_create_document:[\"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"],dom_domimplementation_create_document_type:[\"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"],dom_domimplementation_get_feature:[\"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"],dom_domimplementation_has_feature:[\"boolean dom_domimplementation_has_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"],dom_domimplementationlist_item:[\"domdomimplementation dom_domimplementationlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"],dom_domimplementationsource_get_domimplementation:[\"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"],dom_domimplementationsource_get_domimplementations:[\"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"],dom_domstringlist_item:[\"domstring dom_domstringlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"],dom_element_get_attribute:[\"string dom_element_get_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"],dom_element_get_attribute_node:[\"DOMAttr dom_element_get_attribute_node(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"],dom_element_get_attribute_node_ns:[\"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"],dom_element_get_attribute_ns:[\"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"],dom_element_get_elements_by_tag_name:[\"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"],dom_element_get_elements_by_tag_name_ns:[\"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"],dom_element_has_attribute:[\"boolean dom_element_has_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"],dom_element_has_attribute_ns:[\"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"],dom_element_remove_attribute:[\"void dom_element_remove_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"],dom_element_remove_attribute_node:[\"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"],dom_element_remove_attribute_ns:[\"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"],dom_element_set_attribute:[\"void dom_element_set_attribute(string name, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"],dom_element_set_attribute_node:[\"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"],dom_element_set_attribute_node_ns:[\"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"],dom_element_set_attribute_ns:[\"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"],dom_element_set_id_attribute:[\"void dom_element_set_id_attribute(string name, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"],dom_element_set_id_attribute_node:[\"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"],dom_element_set_id_attribute_ns:[\"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"],dom_import_simplexml:[\"somNode dom_import_simplexml(sxeobject node)\",\"Get a simplexml_element object from dom to allow for processing\"],dom_namednodemap_get_named_item:[\"DOMNode dom_namednodemap_get_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"],dom_namednodemap_get_named_item_ns:[\"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"],dom_namednodemap_item:[\"DOMNode dom_namednodemap_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"],dom_namednodemap_remove_named_item:[\"DOMNode dom_namednodemap_remove_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"],dom_namednodemap_remove_named_item_ns:[\"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"],dom_namednodemap_set_named_item:[\"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"],dom_namednodemap_set_named_item_ns:[\"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"],dom_namelist_get_name:[\"string dom_namelist_get_name(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"],dom_namelist_get_namespace_uri:[\"string dom_namelist_get_namespace_uri(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"],dom_node_append_child:[\"DomNode dom_node_append_child(DomNode newChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"],dom_node_clone_node:[\"DomNode dom_node_clone_node(boolean deep);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"],dom_node_compare_document_position:[\"short dom_node_compare_document_position(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"],dom_node_get_feature:[\"DomNode dom_node_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"],dom_node_get_user_data:[\"mixed dom_node_get_user_data(string key);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"],dom_node_has_attributes:[\"boolean dom_node_has_attributes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"],dom_node_has_child_nodes:[\"boolean dom_node_has_child_nodes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"],dom_node_insert_before:[\"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"],dom_node_is_default_namespace:[\"boolean dom_node_is_default_namespace(string namespaceURI);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"],dom_node_is_equal_node:[\"boolean dom_node_is_equal_node(DomNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"],dom_node_is_same_node:[\"boolean dom_node_is_same_node(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"],dom_node_is_supported:[\"boolean dom_node_is_supported(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"],dom_node_lookup_namespace_uri:[\"string dom_node_lookup_namespace_uri(string prefix);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"],dom_node_lookup_prefix:[\"string dom_node_lookup_prefix(string namespaceURI);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"],dom_node_normalize:[\"void dom_node_normalize();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"],dom_node_remove_child:[\"DomNode dom_node_remove_child(DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"],dom_node_replace_child:[\"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"],dom_node_set_user_data:[\"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"],dom_nodelist_item:[\"DOMNode dom_nodelist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"],dom_string_extend_find_offset16:[\"int dom_string_extend_find_offset16(int offset32);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"],dom_string_extend_find_offset32:[\"int dom_string_extend_find_offset32(int offset16);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"],dom_text_is_whitespace_in_element_content:[\"boolean dom_text_is_whitespace_in_element_content();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"],dom_text_replace_whole_text:[\"DOMText dom_text_replace_whole_text(string content);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"],dom_text_split_text:[\"DOMText dom_text_split_text(int offset);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"],dom_userdatahandler_handle:[\"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"],dom_xpath_evaluate:[\"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"],dom_xpath_query:[\"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"],dom_xpath_register_ns:[\"boolean dom_xpath_register_ns(string prefix, string uri); */\",'PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Oss\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid XPath Context\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}'],dom_xpath_register_php_functions:[\"void dom_xpath_register_php_functions() */\",'PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"a\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions'],each:[\"array each(array arr)\",\"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"],easter_date:[\"int easter_date([int year])\",\"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"],easter_days:[\"int easter_days([int year, [int method]])\",\"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"],echo:[\"void echo(string arg1 [, string ...])\",\"Output one or more strings\"],empty:[\"bool empty( mixed var )\",\"Determine whether a variable is empty\"],enchant_broker_describe:[\"array enchant_broker_describe(resource broker)\",\"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"],enchant_broker_dict_exists:[\"bool enchant_broker_dict_exists(resource broker, string tag)\",\"Whether a dictionary exists or not. Using non-empty tag\"],enchant_broker_free:[\"boolean enchant_broker_free(resource broker)\",\"Destroys the broker object and its dictionnaries\"],enchant_broker_free_dict:[\"resource enchant_broker_free_dict(resource dict)\",\"Free the dictionary resource\"],enchant_broker_get_dict_path:[\"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\"Get the directory path for a given backend, works with ispell and myspell\"],enchant_broker_get_error:[\"string enchant_broker_get_error(resource broker)\",\"Returns the last error of the broker\"],enchant_broker_init:[\"resource enchant_broker_init()\",\"create a new broker object capable of requesting\"],enchant_broker_list_dicts:[\"string enchant_broker_list_dicts(resource broker)\",\"Lists the dictionaries available for the given broker\"],enchant_broker_request_dict:[\"resource enchant_broker_request_dict(resource broker, string tag)\",'create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\"en_US\", \"de_DE\", ...)'],enchant_broker_request_pwl_dict:[\"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"],enchant_broker_set_dict_path:[\"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\"Set the directory path for a given backend, works with ispell and myspell\"],enchant_broker_set_ordering:[\"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"],enchant_dict_add_to_personal:[\"void enchant_dict_add_to_personal(resource dict, string word)\",\"add 'word' to personal word list\"],enchant_dict_add_to_session:[\"void enchant_dict_add_to_session(resource dict, string word)\",\"add 'word' to this spell-checking session\"],enchant_dict_check:[\"bool enchant_dict_check(resource dict, string word)\",\"If the word is correctly spelled return true, otherwise return false\"],enchant_dict_describe:[\"array enchant_dict_describe(resource dict)\",\"Describes an individual dictionary 'dict'\"],enchant_dict_get_error:[\"string enchant_dict_get_error(resource dict)\",\"Returns the last error of the current spelling-session\"],enchant_dict_is_in_session:[\"bool enchant_dict_is_in_session(resource dict, string word)\",\"whether or not 'word' exists in this spelling-session\"],enchant_dict_quick_check:[\"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"],enchant_dict_store_replacement:[\"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"],enchant_dict_suggest:[\"array enchant_dict_suggest(resource dict, string word)\",\"Will return a list of values if any of those pre-conditions are not met.\"],end:[\"mixed end(array array_arg)\",\"Advances array argument's internal pointer to the last element and return it\"],ereg:[\"int ereg(string pattern, string string [, array registers])\",\"Regular expression match\"],ereg_replace:[\"string ereg_replace(string pattern, string replacement, string string)\",\"Replace regular expression\"],eregi:[\"int eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match\"],eregi_replace:[\"string eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression\"],error_get_last:[\"array error_get_last()\",\"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"],error_log:[\"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\"Send an error message somewhere\"],error_reporting:[\"int error_reporting([int new_error_level])\",\"Return the current error_reporting level, and if an argument was passed - change to the new level\"],escapeshellarg:[\"string escapeshellarg(string arg)\",\"Quote and escape an argument for use in a shell command\"],escapeshellcmd:[\"string escapeshellcmd(string command)\",\"Escape shell metacharacters\"],exec:[\"string exec(string command [, array &output [, int &return_value]])\",\"Execute an external program\"],exif_imagetype:[\"int exif_imagetype(string imagefile)\",\"Get the type of an image\"],exif_read_data:[\"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"],exif_tagname:[\"string exif_tagname(index)\",\"Get headername for index or false if not defined\"],exif_thumbnail:[\"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\"Reads the embedded thumbnail\"],exit:[\"void exit([mixed status])\",\"Output a message and terminate the current script\"],exp:[\"float exp(float number)\",\"Returns e raised to the power of the number\"],explode:[\"array explode(string separator, string str [, int limit])\",\"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"],expm1:[\"float expm1(float number)\",\"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"],extension_loaded:[\"bool extension_loaded(string extension_name)\",\"Returns true if the named extension is loaded\"],extract:[\"int extract(array var_array [, int extract_type [, string prefix]])\",\"Imports variables into symbol table from an array\"],ezmlm_hash:[\"int ezmlm_hash(string addr)\",\"Calculate EZMLM list hash value.\"],fclose:[\"bool fclose(resource fp)\",\"Close an open file pointer\"],feof:[\"bool feof(resource fp)\",\"Test for end-of-file on a file pointer\"],fflush:[\"bool fflush(resource fp)\",\"Flushes output\"],fgetc:[\"string fgetc(resource fp)\",\"Get a character from file pointer\"],fgetcsv:[\"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\"Get line from file pointer and parse for CSV fields\"],fgets:[\"string fgets(resource fp[, int length])\",\"Get a line from file pointer\"],fgetss:[\"string fgetss(resource fp [, int length [, string allowable_tags]])\",\"Get a line from file pointer and strip HTML tags\"],file:[\"array file(string filename [, int flags[, resource context]])\",\"Read entire file into an array\"],file_exists:[\"bool file_exists(string filename)\",\"Returns true if filename exists\"],file_get_contents:[\"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\"Read the entire file into a string\"],file_put_contents:[\"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\"Write/Create a file with contents data and return the number of bytes written\"],fileatime:[\"int fileatime(string filename)\",\"Get last access time of file\"],filectime:[\"int filectime(string filename)\",\"Get inode modification time of file\"],filegroup:[\"int filegroup(string filename)\",\"Get file group\"],fileinode:[\"int fileinode(string filename)\",\"Get file inode\"],filemtime:[\"int filemtime(string filename)\",\"Get last modification time of file\"],fileowner:[\"int fileowner(string filename)\",\"Get file owner\"],fileperms:[\"int fileperms(string filename)\",\"Get file permissions\"],filesize:[\"int filesize(string filename)\",\"Get file size\"],filetype:[\"string filetype(string filename)\",\"Get file type\"],filter_has_var:[\"mixed filter_has_var(constant type, string variable_name)\",\"* Returns true if the variable with the name 'name' exists in source.\"],filter_input:[\"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\"* Returns the filtered variable 'name'* from source `type`.\"],filter_input_array:[\"mixed filter_input_array(constant type, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],filter_var:[\"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\"* Returns the filtered version of the vriable.\"],filter_var_array:[\"mixed filter_var_array(array data, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],finfo_buffer:[\"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\"Return infromation about a string buffer.\"],finfo_close:[\"resource finfo_close(resource finfo)\",\"Close fileinfo resource.\"],finfo_file:[\"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\"Return information about a file.\"],finfo_open:[\"resource finfo_open([int options [, string arg]])\",\"Create a new fileinfo resource.\"],finfo_set_flags:[\"bool finfo_set_flags(resource finfo, int options)\",\"Set libmagic configuration options.\"],floatval:[\"float floatval(mixed var)\",\"Get the float value of a variable\"],flock:[\"bool flock(resource fp, int operation [, int &wouldblock])\",\"Portable file locking\"],floor:[\"float floor(float number)\",\"Returns the next lowest integer value from the number\"],flush:[\"void flush(void)\",\"Flush the output buffer\"],fmod:[\"float fmod(float x, float y)\",\"Returns the remainder of dividing x by y as a float\"],fnmatch:[\"bool fnmatch(string pattern, string filename [, int flags])\",\"Match filename against pattern\"],fopen:[\"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\"Open a file or a URL and return a file pointer\"],forward_static_call:[\"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],fpassthru:[\"int fpassthru(resource fp)\",\"Output all remaining data from a file pointer\"],fprintf:[\"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string into a stream\"],fputcsv:[\"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\"Format line as CSV and write to file pointer\"],fread:[\"string fread(resource fp, int length)\",\"Binary-safe file read\"],frenchtojd:[\"int frenchtojd(int month, int day, int year)\",\"Converts a french republic calendar date to julian day count\"],fscanf:[\"mixed fscanf(resource stream, string format [, string ...])\",\"Implements a mostly ANSI compatible fscanf()\"],fseek:[\"int fseek(resource fp, int offset [, int whence])\",\"Seek on a file pointer\"],fsockopen:[\"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open Internet or Unix domain socket connection\"],fstat:[\"array fstat(resource fp)\",\"Stat() on a filehandle\"],ftell:[\"int ftell(resource fp)\",\"Get file pointer's read/write position\"],ftok:[\"int ftok(string pathname, string proj)\",\"Convert a pathname and a project identifier to a System V IPC key\"],ftp_alloc:[\"bool ftp_alloc(resource stream, int size[, &response])\",\"Attempt to allocate space on the remote FTP server\"],ftp_cdup:[\"bool ftp_cdup(resource stream)\",\"Changes to the parent directory\"],ftp_chdir:[\"bool ftp_chdir(resource stream, string directory)\",\"Changes directories\"],ftp_chmod:[\"int ftp_chmod(resource stream, int mode, string filename)\",\"Sets permissions on a file\"],ftp_close:[\"bool ftp_close(resource stream)\",\"Closes the FTP stream\"],ftp_connect:[\"resource ftp_connect(string host [, int port [, int timeout]])\",\"Opens a FTP stream\"],ftp_delete:[\"bool ftp_delete(resource stream, string file)\",\"Deletes a file\"],ftp_exec:[\"bool ftp_exec(resource stream, string command)\",\"Requests execution of a program on the FTP server\"],ftp_fget:[\"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server and writes it to an open file\"],ftp_fput:[\"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server\"],ftp_get:[\"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server and writes it to a local file\"],ftp_get_option:[\"mixed ftp_get_option(resource stream, int option)\",\"Gets an FTP option\"],ftp_login:[\"bool ftp_login(resource stream, string username, string password)\",\"Logs into the FTP server\"],ftp_mdtm:[\"int ftp_mdtm(resource stream, string filename)\",\"Returns the last modification time of the file, or -1 on error\"],ftp_mkdir:[\"string ftp_mkdir(resource stream, string directory)\",\"Creates a directory and returns the absolute path for the new directory or false on error\"],ftp_nb_continue:[\"int ftp_nb_continue(resource stream)\",\"Continues retrieving/sending a file nbronously\"],ftp_nb_fget:[\"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server asynchronly and writes it to an open file\"],ftp_nb_fput:[\"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server nbronly\"],ftp_nb_get:[\"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server nbhronly and writes it to a local file\"],ftp_nb_put:[\"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_nlist:[\"array ftp_nlist(resource stream, string directory)\",\"Returns an array of filenames in the given directory\"],ftp_pasv:[\"bool ftp_pasv(resource stream, bool pasv)\",\"Turns passive mode on or off\"],ftp_put:[\"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_pwd:[\"string ftp_pwd(resource stream)\",\"Returns the present working directory\"],ftp_raw:[\"array ftp_raw(resource stream, string command)\",\"Sends a literal command to the FTP server\"],ftp_rawlist:[\"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\"Returns a detailed listing of a directory as an array of output lines\"],ftp_rename:[\"bool ftp_rename(resource stream, string src, string dest)\",\"Renames the given file to a new path\"],ftp_rmdir:[\"bool ftp_rmdir(resource stream, string directory)\",\"Removes a directory\"],ftp_set_option:[\"bool ftp_set_option(resource stream, int option, mixed value)\",\"Sets an FTP option\"],ftp_site:[\"bool ftp_site(resource stream, string cmd)\",\"Sends a SITE command to the server\"],ftp_size:[\"int ftp_size(resource stream, string filename)\",\"Returns the size of the file, or -1 on error\"],ftp_ssl_connect:[\"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\"Opens a FTP-SSL stream\"],ftp_systype:[\"string ftp_systype(resource stream)\",\"Returns the system type identifier\"],ftruncate:[\"bool ftruncate(resource fp, int size)\",\"Truncate file to 'size' length\"],func_get_arg:[\"mixed func_get_arg(int arg_num)\",\"Get the $arg_num'th argument that was passed to the function\"],func_get_args:[\"array func_get_args()\",\"Get an array of the arguments that were passed to the function\"],func_num_args:[\"int func_num_args(void)\",\"Get the number of arguments that were passed to the function\"],\"function \":[\"\",\"\"],\"foreach \":[\"\",\"\"],function_exists:[\"bool function_exists(string function_name)\",\"Checks if the function exists\"],fwrite:[\"int fwrite(resource fp, string str [, int length])\",\"Binary-safe file write\"],gc_collect_cycles:[\"int gc_collect_cycles(void)\",\"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"],gc_disable:[\"void gc_disable(void)\",\"Deactivates the circular reference collector\"],gc_enable:[\"void gc_enable(void)\",\"Activates the circular reference collector\"],gc_enabled:[\"void gc_enabled(void)\",\"Returns status of the circular reference collector\"],gd_info:[\"array gd_info()\",\"\"],getKeywords:[\"static array getKeywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"],get_browser:[\"mixed get_browser([string browser_name [, bool return_array]])\",\"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"],get_called_class:[\"string get_called_class()\",'Retrieves the \"Late Static Binding\" class name'],get_cfg_var:[\"mixed get_cfg_var(string option_name)\",\"Get the value of a PHP configuration option\"],get_class:[\"string get_class([object object])\",\"Retrieves the class name\"],get_class_methods:[\"array get_class_methods(mixed class)\",\"Returns an array of method names for class or class instance.\"],get_class_vars:[\"array get_class_vars(string class_name)\",\"Returns an array of default properties of the class.\"],get_current_user:[\"string get_current_user(void)\",\"Get the name of the owner of the current PHP script\"],get_declared_classes:[\"array get_declared_classes()\",\"Returns an array of all declared classes.\"],get_declared_interfaces:[\"array get_declared_interfaces()\",\"Returns an array of all declared interfaces.\"],get_defined_constants:[\"array get_defined_constants([bool categorize])\",\"Return an array containing the names and values of all defined constants\"],get_defined_functions:[\"array get_defined_functions(void)\",\"Returns an array of all defined functions\"],get_defined_vars:[\"array get_defined_vars(void)\",\"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"],get_display_language:[\"static string get_display_language($locale[, $in_locale = null])\",\"* gets the language for the $locale in $in_locale or default_locale\"],get_display_name:[\"static string get_display_name($locale[, $in_locale = null])\",\"* gets the name for the $locale in $in_locale or default_locale\"],get_display_region:[\"static string get_display_region($locale, $in_locale = null)\",\"* gets the region for the $locale in $in_locale or default_locale\"],get_display_script:[\"static string get_display_script($locale, $in_locale = null)\",\"* gets the script for the $locale in $in_locale or default_locale\"],get_extension_funcs:[\"array get_extension_funcs(string extension_name)\",\"Returns an array with the names of functions belonging to the named extension\"],get_headers:[\"array get_headers(string url[, int format])\",\"fetches all the headers sent by the server in response to a HTTP request\"],get_html_translation_table:[\"array get_html_translation_table([int table [, int quote_style]])\",\"Returns the internal translation table used by htmlspecialchars and htmlentities\"],get_include_path:[\"string get_include_path()\",\"Get the current include_path configuration option\"],get_included_files:[\"array get_included_files(void)\",\"Returns an array with the file names that were include_once()'d\"],get_loaded_extensions:[\"array get_loaded_extensions([bool zend_extensions])\",\"Return an array containing names of loaded extensions\"],get_magic_quotes_gpc:[\"int get_magic_quotes_gpc(void)\",\"Get the current active configuration setting of magic_quotes_gpc\"],get_magic_quotes_runtime:[\"int get_magic_quotes_runtime(void)\",\"Get the current active configuration setting of magic_quotes_runtime\"],get_meta_tags:[\"array get_meta_tags(string filename [, bool use_include_path])\",\"Extracts all meta tag content attributes from a file and returns an array\"],get_object_vars:[\"array get_object_vars(object obj)\",\"Returns an array of object properties\"],get_parent_class:[\"string get_parent_class([mixed object])\",\"Retrieves the parent class name for object or class or current scope.\"],get_resource_type:[\"string get_resource_type(resource res)\",\"Get the resource type name for a given resource\"],getallheaders:[\"array getallheaders(void)\",\"\"],getcwd:[\"mixed getcwd(void)\",\"Gets the current directory\"],getdate:[\"array getdate([int timestamp])\",\"Get date/time information\"],getenv:[\"string getenv(string varname)\",\"Get the value of an environment variable\"],gethostbyaddr:[\"string gethostbyaddr(string ip_address)\",\"Get the Internet host name corresponding to a given IP address\"],gethostbyname:[\"string gethostbyname(string hostname)\",\"Get the IP address corresponding to a given Internet host name\"],gethostbynamel:[\"array gethostbynamel(string hostname)\",\"Return a list of IP addresses that a given hostname resolves to.\"],gethostname:[\"string gethostname()\",\"Get the host name of the current machine\"],getimagesize:[\"array getimagesize(string imagefile [, array info])\",\"Get the size of an image as 4-element array\"],getlastmod:[\"int getlastmod(void)\",\"Get time of last page modification\"],getmygid:[\"int getmygid(void)\",\"Get PHP script owner's GID\"],getmyinode:[\"int getmyinode(void)\",\"Get the inode of the current script being parsed\"],getmypid:[\"int getmypid(void)\",\"Get current process ID\"],getmyuid:[\"int getmyuid(void)\",\"Get PHP script owner's UID\"],getopt:[\"array getopt(string options [, array longopts])\",\"Get options from the command line argument list\"],getprotobyname:[\"int getprotobyname(string name)\",\"Returns protocol number associated with name as per /etc/protocols\"],getprotobynumber:[\"string getprotobynumber(int proto)\",\"Returns protocol name associated with protocol number proto\"],getrandmax:[\"int getrandmax(void)\",\"Returns the maximum value a random number can have\"],getrusage:[\"array getrusage([int who])\",\"Returns an array of usage statistics\"],getservbyname:[\"int getservbyname(string service, string protocol)\",'Returns port associated with service. Protocol must be \"tcp\" or \"udp\"'],getservbyport:[\"string getservbyport(int port, string protocol)\",'Returns service name associated with port. Protocol must be \"tcp\" or \"udp\"'],gettext:[\"string gettext(string msgid)\",\"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"],gettimeofday:[\"array gettimeofday([bool get_as_float])\",\"Returns the current time as array\"],gettype:[\"string gettype(mixed var)\",\"Returns the type of the variable\"],glob:[\"array glob(string pattern [, int flags])\",\"Find pathnames matching a pattern\"],gmdate:[\"string gmdate(string format [, long timestamp])\",\"Format a GMT date/time\"],gmmktime:[\"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a GMT date\"],gmp_abs:[\"resource gmp_abs(resource a)\",\"Calculates absolute value\"],gmp_add:[\"resource gmp_add(resource a, resource b)\",\"Add a and b\"],gmp_and:[\"resource gmp_and(resource a, resource b)\",\"Calculates logical AND of a and b\"],gmp_clrbit:[\"void gmp_clrbit(resource &a, int index)\",\"Clears bit in a\"],gmp_cmp:[\"int gmp_cmp(resource a, resource b)\",\"Compares two numbers\"],gmp_com:[\"resource gmp_com(resource a)\",\"Calculates one's complement of a\"],gmp_div_q:[\"resource gmp_div_q(resource a, resource b [, int round])\",\"Divide a by b, returns quotient only\"],gmp_div_qr:[\"array gmp_div_qr(resource a, resource b [, int round])\",\"Divide a by b, returns quotient and reminder\"],gmp_div_r:[\"resource gmp_div_r(resource a, resource b [, int round])\",\"Divide a by b, returns reminder only\"],gmp_divexact:[\"resource gmp_divexact(resource a, resource b)\",\"Divide a by b using exact division algorithm\"],gmp_fact:[\"resource gmp_fact(int a)\",\"Calculates factorial function\"],gmp_gcd:[\"resource gmp_gcd(resource a, resource b)\",\"Computes greatest common denominator (gcd) of a and b\"],gmp_gcdext:[\"array gmp_gcdext(resource a, resource b)\",\"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"],gmp_hamdist:[\"int gmp_hamdist(resource a, resource b)\",\"Calculates hamming distance between a and b\"],gmp_init:[\"resource gmp_init(mixed number [, int base])\",\"Initializes GMP number\"],gmp_intval:[\"int gmp_intval(resource gmpnumber)\",\"Gets signed long value of GMP number\"],gmp_invert:[\"resource gmp_invert(resource a, resource b)\",\"Computes the inverse of a modulo b\"],gmp_jacobi:[\"int gmp_jacobi(resource a, resource b)\",\"Computes Jacobi symbol\"],gmp_legendre:[\"int gmp_legendre(resource a, resource b)\",\"Computes Legendre symbol\"],gmp_mod:[\"resource gmp_mod(resource a, resource b)\",\"Computes a modulo b\"],gmp_mul:[\"resource gmp_mul(resource a, resource b)\",\"Multiply a and b\"],gmp_neg:[\"resource gmp_neg(resource a)\",\"Negates a number\"],gmp_nextprime:[\"resource gmp_nextprime(resource a)\",\"Finds next prime of a\"],gmp_or:[\"resource gmp_or(resource a, resource b)\",\"Calculates logical OR of a and b\"],gmp_perfect_square:[\"bool gmp_perfect_square(resource a)\",\"Checks if a is an exact square\"],gmp_popcount:[\"int gmp_popcount(resource a)\",\"Calculates the population count of a\"],gmp_pow:[\"resource gmp_pow(resource base, int exp)\",\"Raise base to power exp\"],gmp_powm:[\"resource gmp_powm(resource base, resource exp, resource mod)\",\"Raise base to power exp and take result modulo mod\"],gmp_prob_prime:[\"int gmp_prob_prime(resource a[, int reps])\",'Checks if a is \"probably prime\"'],gmp_random:[\"resource gmp_random([int limiter])\",\"Gets random number\"],gmp_scan0:[\"int gmp_scan0(resource a, int start)\",\"Finds first zero bit\"],gmp_scan1:[\"int gmp_scan1(resource a, int start)\",\"Finds first non-zero bit\"],gmp_setbit:[\"void gmp_setbit(resource &a, int index[, bool set_clear])\",\"Sets or clear bit in a\"],gmp_sign:[\"int gmp_sign(resource a)\",\"Gets the sign of the number\"],gmp_sqrt:[\"resource gmp_sqrt(resource a)\",\"Takes integer part of square root of a\"],gmp_sqrtrem:[\"array gmp_sqrtrem(resource a)\",\"Square root with remainder\"],gmp_strval:[\"string gmp_strval(resource gmpnumber [, int base])\",\"Gets string representation of GMP number\"],gmp_sub:[\"resource gmp_sub(resource a, resource b)\",\"Subtract b from a\"],gmp_testbit:[\"bool gmp_testbit(resource a, int index)\",\"Tests if bit is set in a\"],gmp_xor:[\"resource gmp_xor(resource a, resource b)\",\"Calculates logical exclusive OR of a and b\"],gmstrftime:[\"string gmstrftime(string format [, int timestamp])\",\"Format a GMT/UCT time/date according to locale settings\"],grapheme_extract:[\"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\"Function to extract a sequence of default grapheme clusters\"],grapheme_stripos:[\"int grapheme_stripos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another, ignoring case differences\"],grapheme_stristr:[\"string grapheme_stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_strlen:[\"int grapheme_strlen(string str)\",\"Get number of graphemes in a string\"],grapheme_strpos:[\"int grapheme_strpos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another\"],grapheme_strripos:[\"int grapheme_strripos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another, ignoring case\"],grapheme_strrpos:[\"int grapheme_strrpos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another\"],grapheme_strstr:[\"string grapheme_strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_substr:[\"string grapheme_substr(string str, int start [, int length])\",\"Returns part of a string\"],gregoriantojd:[\"int gregoriantojd(int month, int day, int year)\",\"Converts a gregorian calendar date to julian day count\"],gzcompress:[\"string gzcompress(string data [, int level])\",\"Gzip-compress a string\"],gzdeflate:[\"string gzdeflate(string data [, int level])\",\"Gzip-compress a string\"],gzencode:[\"string gzencode(string data [, int level [, int encoding_mode]])\",\"GZ encode a string\"],gzfile:[\"array gzfile(string filename [, int use_include_path])\",\"Read und uncompress entire .gz-file into an array\"],gzinflate:[\"string gzinflate(string data [, int length])\",\"Unzip a gzip-compressed string\"],gzopen:[\"resource gzopen(string filename, string mode [, int use_include_path])\",\"Open a .gz-file and return a .gz-file pointer\"],gzuncompress:[\"string gzuncompress(string data [, int length])\",\"Unzip a gzip-compressed string\"],hash:[\"string hash(string algo, string data[, bool raw_output = false])\",\"Generate a hash of a given input string Returns lowercase hexits by default\"],hash_algos:[\"array hash_algos(void)\",\"Return a list of registered hashing algorithms\"],hash_copy:[\"resource hash_copy(resource context)\",\"Copy hash resource\"],hash_file:[\"string hash_file(string algo, string filename[, bool raw_output = false])\",\"Generate a hash of a given file Returns lowercase hexits by default\"],hash_final:[\"string hash_final(resource context[, bool raw_output=false])\",\"Output resulting digest\"],hash_hmac:[\"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"],hash_hmac_file:[\"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"],hash_init:[\"resource hash_init(string algo[, int options, string key])\",\"Initialize a hashing context\"],hash_update:[\"bool hash_update(resource context, string data)\",\"Pump data into the hashing algorithm\"],hash_update_file:[\"bool hash_update_file(resource context, string filename[, resource context])\",\"Pump data into the hashing algorithm from a file\"],hash_update_stream:[\"int hash_update_stream(resource context, resource handle[, integer length])\",\"Pump data into the hashing algorithm from an open stream\"],header:[\"void header(string header [, bool replace, [int http_response_code]])\",\"Sends a raw HTTP header\"],header_remove:[\"void header_remove([string name])\",\"Removes an HTTP header previously set using header()\"],headers_list:[\"array headers_list(void)\",\"Return list of headers to be sent / already sent\"],headers_sent:[\"bool headers_sent([string &$file [, int &$line]])\",\"Returns true if headers have already been sent, false otherwise\"],hebrev:[\"string hebrev(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text\"],hebrevc:[\"string hebrevc(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text with newline conversion\"],hexdec:[\"int hexdec(string hexadecimal_number)\",\"Returns the decimal equivalent of the hexadecimal number\"],highlight_file:[\"bool highlight_file(string file_name [, bool return] )\",\"Syntax highlight a source file\"],highlight_string:[\"bool highlight_string(string string [, bool return] )\",\"Syntax highlight a string or optionally return it\"],html_entity_decode:[\"string html_entity_decode(string string [, int quote_style][, string charset])\",\"Convert all HTML entities to their applicable characters\"],htmlentities:[\"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert all applicable characters to HTML entities\"],htmlspecialchars:[\"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert special characters to HTML entities\"],htmlspecialchars_decode:[\"string htmlspecialchars_decode(string string [, int quote_style])\",\"Convert special HTML entities back to characters\"],http_build_query:[\"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\"Generates a form-encoded query string from an associative array or object.\"],hypot:[\"float hypot(float num1, float num2)\",\"Returns sqrt(num1*num1 + num2*num2)\"],ibase_add_user:[\"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Add a user to security database\"],ibase_affected_rows:[\"int ibase_affected_rows( [ resource link_identifier ] )\",\"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"],ibase_backup:[\"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\"Initiates a backup task in the service manager and returns immediately\"],ibase_blob_add:[\"bool ibase_blob_add(resource blob_handle, string data)\",\"Add data into created blob\"],ibase_blob_cancel:[\"bool ibase_blob_cancel(resource blob_handle)\",\"Cancel creating blob\"],ibase_blob_close:[\"string ibase_blob_close(resource blob_handle)\",\"Close blob\"],ibase_blob_create:[\"resource ibase_blob_create([resource link_identifier])\",\"Create blob for adding data\"],ibase_blob_echo:[\"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\"Output blob contents to browser\"],ibase_blob_get:[\"string ibase_blob_get(resource blob_handle, int len)\",\"Get len bytes data from open blob\"],ibase_blob_import:[\"string ibase_blob_import([ resource link_identifier, ] resource file)\",\"Create blob, copy file in it, and close it\"],ibase_blob_info:[\"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\"Return blob length and other useful info\"],ibase_blob_open:[\"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\"Open blob for retrieving data parts\"],ibase_close:[\"bool ibase_close([resource link_identifier])\",\"Close an InterBase connection\"],ibase_commit:[\"bool ibase_commit( resource link_identifier )\",\"Commit transaction\"],ibase_commit_ret:[\"bool ibase_commit_ret( resource link_identifier )\",\"Commit transaction and retain the transaction context\"],ibase_connect:[\"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a connection to an InterBase database\"],ibase_db_info:[\"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\"Request statistics about a database\"],ibase_delete_user:[\"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Delete a user from security database\"],ibase_drop_db:[\"bool ibase_drop_db([resource link_identifier])\",\"Drop an InterBase database\"],ibase_errcode:[\"int ibase_errcode(void)\",\"Return error code\"],ibase_errmsg:[\"string ibase_errmsg(void)\",\"Return error message\"],ibase_execute:[\"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a previously prepared query\"],ibase_fetch_assoc:[\"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_fetch_object:[\"object ibase_fetch_object(resource result [, int fetch_flags])\",\"Fetch a object from the results of a query\"],ibase_fetch_row:[\"array ibase_fetch_row(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_field_info:[\"array ibase_field_info(resource query_result, int field_number)\",\"Get information about a field\"],ibase_free_event_handler:[\"bool ibase_free_event_handler(resource event)\",\"Frees the event handler set by ibase_set_event_handler()\"],ibase_free_query:[\"bool ibase_free_query(resource query)\",\"Free memory used by a query\"],ibase_free_result:[\"bool ibase_free_result(resource result)\",\"Free the memory used by a result\"],ibase_gen_id:[\"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\"Increments the named generator and returns its new value\"],ibase_maintain_db:[\"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\"Execute a maintenance command on the database server\"],ibase_modify_user:[\"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Modify a user in security database\"],ibase_name_result:[\"bool ibase_name_result(resource result, string name)\",\"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"],ibase_num_fields:[\"int ibase_num_fields(resource query_result)\",\"Get the number of fields in result\"],ibase_num_params:[\"int ibase_num_params(resource query)\",\"Get the number of params in a prepared query\"],ibase_num_rows:[\"int ibase_num_rows( resource result_identifier )\",\"Return the number of rows that are available in a result\"],ibase_param_info:[\"array ibase_param_info(resource query, int field_number)\",\"Get information about a parameter\"],ibase_pconnect:[\"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a persistent connection to an InterBase database\"],ibase_prepare:[\"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\"Prepare a query for later execution\"],ibase_query:[\"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a query\"],ibase_restore:[\"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\"Initiates a restore task in the service manager and returns immediately\"],ibase_rollback:[\"bool ibase_rollback( resource link_identifier )\",\"Rollback transaction\"],ibase_rollback_ret:[\"bool ibase_rollback_ret( resource link_identifier )\",\"Rollback transaction and retain the transaction context\"],ibase_server_info:[\"string ibase_server_info(resource service_handle, int action)\",\"Request information about a database server\"],ibase_service_attach:[\"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\"Connect to the service manager\"],ibase_service_detach:[\"bool ibase_service_detach(resource service_handle)\",\"Disconnect from the service manager\"],ibase_set_event_handler:[\"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\"Register the callback for handling each of the named events\"],ibase_trans:[\"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\"Start a transaction over one or several databases\"],ibase_wait_event:[\"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"],iconv:[\"string iconv(string in_charset, string out_charset, string str)\",\"Returns str converted to the out_charset character set\"],iconv_get_encoding:[\"mixed iconv_get_encoding([string type])\",\"Get internal encoding and output encoding for ob_iconv_handler()\"],iconv_mime_decode:[\"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\"Decodes a mime header field\"],iconv_mime_decode_headers:[\"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\"Decodes multiple mime header fields\"],iconv_mime_encode:[\"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\"Composes a mime header field with field_name and field_value in a specified scheme\"],iconv_set_encoding:[\"bool iconv_set_encoding(string type, string charset)\",\"Sets internal encoding and output encoding for ob_iconv_handler()\"],iconv_strlen:[\"int iconv_strlen(string str [, string charset])\",\"Returns the character count of str\"],iconv_strpos:[\"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\"Finds position of first occurrence of needle within part of haystack beginning with offset\"],iconv_strrpos:[\"int iconv_strrpos(string haystack, string needle [, string charset])\",\"Finds position of last occurrence of needle within part of haystack beginning with offset\"],iconv_substr:[\"string iconv_substr(string str, int offset, [int length, string charset])\",\"Returns specified part of a string\"],idate:[\"int idate(string format [, int timestamp])\",\"Format a local time/date as integer\"],idn_to_ascii:[\"int idn_to_ascii(string domain[, int options])\",\"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"],idn_to_utf8:[\"int idn_to_utf8(string domain[, int options])\",\"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"],ignore_user_abort:[\"int ignore_user_abort([string value])\",\"Set whether we want to ignore a user abort event or not\"],image2wbmp:[\"bool image2wbmp(resource im [, string filename [, int threshold]])\",\"Output WBMP image to browser or file\"],image_type_to_extension:[\"string image_type_to_extension(int imagetype [, bool include_dot])\",\"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],image_type_to_mime_type:[\"string image_type_to_mime_type(int imagetype)\",\"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],imagealphablending:[\"bool imagealphablending(resource im, bool on)\",\"Turn alpha blending mode on or off for the given image\"],imageantialias:[\"bool imageantialias(resource im, bool on)\",\"Should antialiased functions used or not\"],imagearc:[\"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\"Draw a partial ellipse\"],imagechar:[\"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\"Draw a character\"],imagecharup:[\"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\"Draw a character rotated 90 degrees counter-clockwise\"],imagecolorallocate:[\"int imagecolorallocate(resource im, int red, int green, int blue)\",\"Allocate a color for an image\"],imagecolorallocatealpha:[\"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\"Allocate a color with an alpha level.  Works for true color and palette based images\"],imagecolorat:[\"int imagecolorat(resource im, int x, int y)\",\"Get the index of the color of a pixel\"],imagecolorclosest:[\"int imagecolorclosest(resource im, int red, int green, int blue)\",\"Get the index of the closest color to the specified color\"],imagecolorclosestalpha:[\"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\"Find the closest matching colour with alpha transparency\"],imagecolorclosesthwb:[\"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\"Get the index of the color which has the hue, white and blackness nearest to the given color\"],imagecolordeallocate:[\"bool imagecolordeallocate(resource im, int index)\",\"De-allocate a color for an image\"],imagecolorexact:[\"int imagecolorexact(resource im, int red, int green, int blue)\",\"Get the index of the specified color\"],imagecolorexactalpha:[\"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\"Find exact match for colour with transparency\"],imagecolormatch:[\"bool imagecolormatch(resource im1, resource im2)\",\"Makes the colors of the palette version of an image more closely match the true color version\"],imagecolorresolve:[\"int imagecolorresolve(resource im, int red, int green, int blue)\",\"Get the index of the specified color or its closest possible alternative\"],imagecolorresolvealpha:[\"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"],imagecolorset:[\"void imagecolorset(resource im, int col, int red, int green, int blue)\",\"Set the color for the specified palette index\"],imagecolorsforindex:[\"array imagecolorsforindex(resource im, int col)\",\"Get the colors for an index\"],imagecolorstotal:[\"int imagecolorstotal(resource im)\",\"Find out the number of colors in an image's palette\"],imagecolortransparent:[\"int imagecolortransparent(resource im [, int col])\",\"Define a color as transparent\"],imageconvolution:[\"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\"Apply a 3x3 convolution matrix, using coefficient div and offset\"],imagecopy:[\"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\"Copy part of an image\"],imagecopymerge:[\"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopymergegray:[\"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopyresampled:[\"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image using resampling to help ensure clarity\"],imagecopyresized:[\"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image\"],imagecreate:[\"resource imagecreate(int x_size, int y_size)\",\"Create a new image\"],imagecreatefromgd:[\"resource imagecreatefromgd(string filename)\",\"Create a new image from GD file or URL\"],imagecreatefromgd2:[\"resource imagecreatefromgd2(string filename)\",\"Create a new image from GD2 file or URL\"],imagecreatefromgd2part:[\"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\"Create a new image from a given part of GD2 file or URL\"],imagecreatefromgif:[\"resource imagecreatefromgif(string filename)\",\"Create a new image from GIF file or URL\"],imagecreatefromjpeg:[\"resource imagecreatefromjpeg(string filename)\",\"Create a new image from JPEG file or URL\"],imagecreatefrompng:[\"resource imagecreatefrompng(string filename)\",\"Create a new image from PNG file or URL\"],imagecreatefromstring:[\"resource imagecreatefromstring(string image)\",\"Create a new image from the image stream in the string\"],imagecreatefromwbmp:[\"resource imagecreatefromwbmp(string filename)\",\"Create a new image from WBMP file or URL\"],imagecreatefromxbm:[\"resource imagecreatefromxbm(string filename)\",\"Create a new image from XBM file or URL\"],imagecreatefromxpm:[\"resource imagecreatefromxpm(string filename)\",\"Create a new image from XPM file or URL\"],imagecreatetruecolor:[\"resource imagecreatetruecolor(int x_size, int y_size)\",\"Create a new true color image\"],imagedashedline:[\"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a dashed line\"],imagedestroy:[\"bool imagedestroy(resource im)\",\"Destroy an image\"],imageellipse:[\"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefill:[\"bool imagefill(resource im, int x, int y, int col)\",\"Flood fill\"],imagefilledarc:[\"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\"Draw a filled partial ellipse\"],imagefilledellipse:[\"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefilledpolygon:[\"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\"Draw a filled polygon\"],imagefilledrectangle:[\"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a filled rectangle\"],imagefilltoborder:[\"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\"Flood fill to specific color\"],imagefilter:[\"bool imagefilter(resource src_im, int filtertype, [args] )\",\"Applies Filter an image using a custom angle\"],imagefontheight:[\"int imagefontheight(int font)\",\"Get font height\"],imagefontwidth:[\"int imagefontwidth(int font)\",\"Get font width\"],imageftbbox:[\"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\"Give the bounding box of a text using fonts via freetype2\"],imagefttext:[\"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\"Write text to the image using fonts via freetype2\"],imagegammacorrect:[\"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\"Apply a gamma correction to a GD image\"],imagegd:[\"bool imagegd(resource im [, string filename])\",\"Output GD image to browser or file\"],imagegd2:[\"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\"Output GD2 image to browser or file\"],imagegif:[\"bool imagegif(resource im [, string filename])\",\"Output GIF image to browser or file\"],imagegrabscreen:[\"resource imagegrabscreen()\",\"Grab a screenshot\"],imagegrabwindow:[\"resource imagegrabwindow(int window_handle [, int client_area])\",\"Grab a window or its client area using a windows handle (HWND property in COM instance)\"],imageinterlace:[\"int imageinterlace(resource im [, int interlace])\",\"Enable or disable interlace\"],imageistruecolor:[\"bool imageistruecolor(resource im)\",\"return true if the image uses truecolor\"],imagejpeg:[\"bool imagejpeg(resource im [, string filename [, int quality]])\",\"Output JPEG image to browser or file\"],imagelayereffect:[\"bool imagelayereffect(resource im, int effect)\",\"Set the alpha blending flag to use the bundled libgd layering effects\"],imageline:[\"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a line\"],imageloadfont:[\"int imageloadfont(string filename)\",\"Load a new font\"],imagepalettecopy:[\"void imagepalettecopy(resource dst, resource src)\",\"Copy the palette from the src image onto the dst image\"],imagepng:[\"bool imagepng(resource im [, string filename])\",\"Output PNG image to browser or file\"],imagepolygon:[\"bool imagepolygon(resource im, array point, int num_points, int col)\",\"Draw a polygon\"],imagepsbbox:[\"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\"Return the bounding box needed by a string if rasterized\"],imagepscopyfont:[\"int imagepscopyfont(int font_index)\",\"Make a copy of a font for purposes like extending or reenconding\"],imagepsencodefont:[\"bool imagepsencodefont(resource font_index, string filename)\",\"To change a fonts character encoding vector\"],imagepsextendfont:[\"bool imagepsextendfont(resource font_index, float extend)\",\"Extend or or condense (if extend < 1) a font\"],imagepsfreefont:[\"bool imagepsfreefont(resource font_index)\",\"Free memory used by a font\"],imagepsloadfont:[\"resource imagepsloadfont(string pathname)\",\"Load a new font from specified file\"],imagepsslantfont:[\"bool imagepsslantfont(resource font_index, float slant)\",\"Slant a font\"],imagepstext:[\"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\"Rasterize a string over an image\"],imagerectangle:[\"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a rectangle\"],imagerotate:[\"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\"Rotate an image using a custom angle\"],imagesavealpha:[\"bool imagesavealpha(resource im, bool on)\",\"Include alpha channel to a saved image\"],imagesetbrush:[\"bool imagesetbrush(resource image, resource brush)\",'Set the brush image to $brush when filling $image with the \"IMG_COLOR_BRUSHED\" color'],imagesetpixel:[\"bool imagesetpixel(resource im, int x, int y, int col)\",\"Set a single pixel\"],imagesetstyle:[\"bool imagesetstyle(resource im, array styles)\",\"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"],imagesetthickness:[\"bool imagesetthickness(resource im, int thickness)\",\"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"],imagesettile:[\"bool imagesettile(resource image, resource tile)\",'Set the tile image to $tile when filling $image with the \"IMG_COLOR_TILED\" color'],imagestring:[\"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\"Draw a string horizontally\"],imagestringup:[\"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\"Draw a string vertically - rotated 90 degrees counter-clockwise\"],imagesx:[\"int imagesx(resource im)\",\"Get image width\"],imagesy:[\"int imagesy(resource im)\",\"Get image height\"],imagetruecolortopalette:[\"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"],imagettfbbox:[\"array imagettfbbox(float size, float angle, string font_file, string text)\",\"Give the bounding box of a text using TrueType fonts\"],imagettftext:[\"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\"Write text to the image using a TrueType font\"],imagetypes:[\"int imagetypes(void)\",\"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"],imagewbmp:[\"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\"Output WBMP image to browser or file\"],imagexbm:[\"int imagexbm(int im, string filename [, int foreground])\",\"Output XBM image to browser or file\"],imap_8bit:[\"string imap_8bit(string text)\",\"Convert an 8-bit string to a quoted-printable string\"],imap_alerts:[\"array imap_alerts(void)\",\"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"],imap_append:[\"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\"Append a new message to a specified mailbox\"],imap_base64:[\"string imap_base64(string text)\",\"Decode BASE64 encoded text\"],imap_binary:[\"string imap_binary(string text)\",\"Convert an 8bit string to a base64 string\"],imap_body:[\"string imap_body(resource stream_id, int msg_no [, int options])\",\"Read the message body\"],imap_bodystruct:[\"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\"Read the structure of a specified body section of a specific message\"],imap_check:[\"object imap_check(resource stream_id)\",\"Get mailbox properties\"],imap_clearflag_full:[\"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Clears flags on messages\"],imap_close:[\"bool imap_close(resource stream_id [, int options])\",\"Close an IMAP stream\"],imap_createmailbox:[\"bool imap_createmailbox(resource stream_id, string mailbox)\",\"Create a new mailbox\"],imap_delete:[\"bool imap_delete(resource stream_id, int msg_no [, int options])\",\"Mark a message for deletion\"],imap_deletemailbox:[\"bool imap_deletemailbox(resource stream_id, string mailbox)\",\"Delete a mailbox\"],imap_errors:[\"array imap_errors(void)\",\"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"],imap_expunge:[\"bool imap_expunge(resource stream_id)\",\"Permanently delete all messages marked for deletion\"],imap_fetch_overview:[\"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\"Read an overview of the information in the headers of the given message sequence\"],imap_fetchbody:[\"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\"Get a specific body section\"],imap_fetchheader:[\"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\"Get the full unfiltered header for a message\"],imap_fetchstructure:[\"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\"Read the full structure of a message\"],imap_gc:[\"bool imap_gc(resource stream_id, int flags)\",\"This function garbage collects (purges) the cache of entries of a specific type.\"],imap_get_quota:[\"array imap_get_quota(resource stream_id, string qroot)\",\"Returns the quota set to the mailbox account qroot\"],imap_get_quotaroot:[\"array imap_get_quotaroot(resource stream_id, string mbox)\",\"Returns the quota set to the mailbox account mbox\"],imap_getacl:[\"array imap_getacl(resource stream_id, string mailbox)\",\"Gets the ACL for a given mailbox\"],imap_getmailboxes:[\"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"],imap_getsubscribed:[\"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"],imap_headerinfo:[\"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\"Read the headers of the message\"],imap_headers:[\"array imap_headers(resource stream_id)\",\"Returns headers for all messages in a mailbox\"],imap_last_error:[\"string imap_last_error(void)\",\"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"],imap_list:[\"array imap_list(resource stream_id, string ref, string pattern)\",\"Read the list of mailboxes\"],imap_listscan:[\"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\"Read list of mailboxes containing a certain string\"],imap_lsub:[\"array imap_lsub(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes\"],imap_mail:[\"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\"Send an email message\"],imap_mail_compose:[\"string imap_mail_compose(array envelope, array body)\",\"Create a MIME message based on given envelope and body sections\"],imap_mail_copy:[\"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\"Copy specified message to a mailbox\"],imap_mail_move:[\"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\"Move specified message to a mailbox\"],imap_mailboxmsginfo:[\"object imap_mailboxmsginfo(resource stream_id)\",\"Returns info about the current mailbox\"],imap_mime_header_decode:[\"array imap_mime_header_decode(string str)\",\"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"],imap_msgno:[\"int imap_msgno(resource stream_id, int unique_msg_id)\",\"Get the sequence number associated with a UID\"],imap_mutf7_to_utf8:[\"string imap_mutf7_to_utf8(string in)\",\"Decode a modified UTF-7 string to UTF-8\"],imap_num_msg:[\"int imap_num_msg(resource stream_id)\",\"Gives the number of messages in the current mailbox\"],imap_num_recent:[\"int imap_num_recent(resource stream_id)\",\"Gives the number of recent messages in current mailbox\"],imap_open:[\"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\"Open an IMAP stream to a mailbox\"],imap_ping:[\"bool imap_ping(resource stream_id)\",\"Check if the IMAP stream is still active\"],imap_qprint:[\"string imap_qprint(string text)\",\"Convert a quoted-printable string to an 8-bit string\"],imap_renamemailbox:[\"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\"Rename a mailbox\"],imap_reopen:[\"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\"Reopen an IMAP stream to a new mailbox\"],imap_rfc822_parse_adrlist:[\"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\"Parses an address string\"],imap_rfc822_parse_headers:[\"object imap_rfc822_parse_headers(string headers [, string default_host])\",\"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"],imap_rfc822_write_address:[\"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\"Returns a properly formatted email address given the mailbox, host, and personal info\"],imap_savebody:['bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \"\"[, int options = 0]])',\"Save a specific body section to a file\"],imap_search:[\"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\"Return a list of messages matching the given criteria\"],imap_set_quota:[\"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\"Will set the quota for qroot mailbox\"],imap_setacl:[\"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\"Sets the ACL for a given mailbox\"],imap_setflag_full:[\"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Sets flags on messages\"],imap_sort:[\"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\"Sort an array of message headers, optionally including only messages that meet specified criteria.\"],imap_status:[\"object imap_status(resource stream_id, string mailbox, int options)\",\"Get status info from a mailbox\"],imap_subscribe:[\"bool imap_subscribe(resource stream_id, string mailbox)\",\"Subscribe to a mailbox\"],imap_thread:[\"array imap_thread(resource stream_id [, int options])\",\"Return threaded by REFERENCES tree\"],imap_timeout:[\"mixed imap_timeout(int timeout_type [, int timeout])\",\"Set or fetch imap timeout\"],imap_uid:[\"int imap_uid(resource stream_id, int msg_no)\",\"Get the unique message id associated with a standard sequential message number\"],imap_undelete:[\"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\"Remove the delete flag from a message\"],imap_unsubscribe:[\"bool imap_unsubscribe(resource stream_id, string mailbox)\",\"Unsubscribe from a mailbox\"],imap_utf7_decode:[\"string imap_utf7_decode(string buf)\",\"Decode a modified UTF-7 string\"],imap_utf7_encode:[\"string imap_utf7_encode(string buf)\",\"Encode a string in modified UTF-7\"],imap_utf8:[\"string imap_utf8(string mime_encoded_text)\",\"Convert a mime-encoded text to UTF-8\"],imap_utf8_to_mutf7:[\"string imap_utf8_to_mutf7(string in)\",\"Encode a UTF-8 string to modified UTF-7\"],implode:[\"string implode([string glue,] array pieces)\",\"Joins array elements placing glue string between items and return one string\"],import_request_variables:[\"bool import_request_variables(string types [, string prefix])\",\"Import GET/POST/Cookie variables into the global scope\"],in_array:[\"bool in_array(mixed needle, array haystack [, bool strict])\",\"Checks if the given value exists in the array\"],include:[\"bool include(string path)\",\"Includes and evaluates the specified file\"],include_once:[\"bool include_once(string path)\",\"Includes and evaluates the specified file\"],inet_ntop:[\"string inet_ntop(string in_addr)\",\"Converts a packed inet address to a human readable IP address string\"],inet_pton:[\"string inet_pton(string ip_address)\",\"Converts a human readable IP address to a packed binary string\"],ini_get:[\"string ini_get(string varname)\",\"Get a configuration option\"],ini_get_all:[\"array ini_get_all([string extension[, bool details = true]])\",\"Get all configuration options\"],ini_restore:[\"void ini_restore(string varname)\",\"Restore the value of a configuration option specified by varname\"],ini_set:[\"string ini_set(string varname, string newvalue)\",\"Set a configuration option, returns false on error and the old value of the configuration option on success\"],interface_exists:[\"bool interface_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],intl_error_name:[\"string intl_error_name()\",\"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"],intl_get_error_code:[\"int intl_get_error_code()\",\"* Get code of the last occured error.\"],intl_get_error_message:[\"string intl_get_error_message()\",\"* Get text description of the last occured error.\"],intl_is_failure:[\"bool intl_is_failure()\",\"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"],intval:[\"int intval(mixed var [, int base])\",\"Get the integer value of a variable using the optional base for the conversion\"],ip2long:[\"int ip2long(string ip_address)\",\"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"],iptcembed:[\"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\"Embed binary IPTC data into a JPEG image.\"],iptcparse:[\"array iptcparse(string iptcdata)\",\"Parse binary IPTC-data into associative array\"],is_a:[\"bool is_a(object object, string class_name)\",\"Returns true if the object is of this class or has this class as one of its parents\"],is_array:[\"bool is_array(mixed var)\",\"Returns true if variable is an array\"],is_bool:[\"bool is_bool(mixed var)\",\"Returns true if variable is a boolean\"],is_callable:[\"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\"Returns true if var is callable.\"],is_dir:[\"bool is_dir(string filename)\",\"Returns true if file is directory\"],is_executable:[\"bool is_executable(string filename)\",\"Returns true if file is executable\"],is_file:[\"bool is_file(string filename)\",\"Returns true if file is a regular file\"],is_finite:[\"bool is_finite(float val)\",\"Returns whether argument is finite\"],is_float:[\"bool is_float(mixed var)\",\"Returns true if variable is float point\"],is_infinite:[\"bool is_infinite(float val)\",\"Returns whether argument is infinite\"],is_link:[\"bool is_link(string filename)\",\"Returns true if file is symbolic link\"],is_long:[\"bool is_long(mixed var)\",\"Returns true if variable is a long (integer)\"],is_nan:[\"bool is_nan(float val)\",\"Returns whether argument is not a number\"],is_null:[\"bool is_null(mixed var)\",\"Returns true if variable is null\"],is_numeric:[\"bool is_numeric(mixed value)\",\"Returns true if value is a number or a numeric string\"],is_object:[\"bool is_object(mixed var)\",\"Returns true if variable is an object\"],is_readable:[\"bool is_readable(string filename)\",\"Returns true if file can be read\"],is_resource:[\"bool is_resource(mixed var)\",\"Returns true if variable is a resource\"],is_scalar:[\"bool is_scalar(mixed value)\",\"Returns true if value is a scalar\"],is_string:[\"bool is_string(mixed var)\",\"Returns true if variable is a string\"],is_subclass_of:[\"bool is_subclass_of(object object, string class_name)\",\"Returns true if the object has this class as one of its parents\"],is_uploaded_file:[\"bool is_uploaded_file(string path)\",\"Check if file was created by rfc1867 upload\"],is_writable:[\"bool is_writable(string filename)\",\"Returns true if file can be written\"],isset:[\"bool isset(mixed var [, mixed var])\",\"Determine whether a variable is set\"],iterator_apply:[\"int iterator_apply(Traversable it, mixed function [, mixed params])\",\"Calls a function for every element in an iterator\"],iterator_count:[\"int iterator_count(Traversable it)\",\"Count the elements in an iterator\"],iterator_to_array:[\"array iterator_to_array(Traversable it [, bool use_keys = true])\",\"Copy the iterator into an array\"],jddayofweek:[\"mixed jddayofweek(int juliandaycount [, int mode])\",\"Returns name or number of day of week from julian day count\"],jdmonthname:[\"string jdmonthname(int juliandaycount, int mode)\",\"Returns name of month for julian day count\"],jdtofrench:[\"string jdtofrench(int juliandaycount)\",\"Converts a julian day count to a french republic calendar date\"],jdtogregorian:[\"string jdtogregorian(int juliandaycount)\",\"Converts a julian day count to a gregorian calendar date\"],jdtojewish:[\"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\"Converts a julian day count to a jewish calendar date\"],jdtojulian:[\"string jdtojulian(int juliandaycount)\",\"Convert a julian day count to a julian calendar date\"],jdtounix:[\"int jdtounix(int jday)\",\"Convert Julian Day to UNIX timestamp\"],jewishtojd:[\"int jewishtojd(int month, int day, int year)\",\"Converts a jewish calendar date to a julian day count\"],join:[\"string join(array src, string glue)\",\"An alias for implode\"],jpeg2wbmp:[\"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert JPEG image to WBMP image\"],json_decode:[\"mixed json_decode(string json [, bool assoc [, long depth]])\",\"Decodes the JSON representation into a PHP value\"],json_encode:[\"string json_encode(mixed data [, int options])\",\"Returns the JSON representation of a value\"],json_last_error:[\"int json_last_error()\",\"Returns the error code of the last json_decode().\"],juliantojd:[\"int juliantojd(int month, int day, int year)\",\"Converts a julian calendar date to julian day count\"],key:[\"mixed key(array array_arg)\",\"Return the key of the element currently pointed to by the internal array pointer\"],krsort:[\"bool krsort(array &array_arg [, int sort_flags])\",\"Sort an array by key value in reverse order\"],ksort:[\"bool ksort(array &array_arg [, int sort_flags])\",\"Sort an array by key\"],lcfirst:[\"string lcfirst(string str)\",\"Make a string's first character lowercase\"],lcg_value:[\"float lcg_value()\",\"Returns a value from the combined linear congruential generator\"],lchgrp:[\"bool lchgrp(string filename, mixed group)\",\"Change symlink group\"],ldap_8859_to_t61:[\"string ldap_8859_to_t61(string value)\",\"Translate 8859 characters to t61 characters\"],ldap_add:[\"bool ldap_add(resource link, string dn, array entry)\",\"Add entries to LDAP directory\"],ldap_bind:[\"bool ldap_bind(resource link [, string dn [, string password]])\",\"Bind to LDAP directory\"],ldap_compare:[\"bool ldap_compare(resource link, string dn, string attr, string value)\",\"Determine if an entry has a specific value for one of its attributes\"],ldap_connect:[\"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\"Connect to an LDAP server\"],ldap_count_entries:[\"int ldap_count_entries(resource link, resource result)\",\"Count the number of entries in a search result\"],ldap_delete:[\"bool ldap_delete(resource link, string dn)\",\"Delete an entry from a directory\"],ldap_dn2ufn:[\"string ldap_dn2ufn(string dn)\",\"Convert DN to User Friendly Naming format\"],ldap_err2str:[\"string ldap_err2str(int errno)\",\"Convert error number to error string\"],ldap_errno:[\"int ldap_errno(resource link)\",\"Get the current ldap error number\"],ldap_error:[\"string ldap_error(resource link)\",\"Get the current ldap error string\"],ldap_explode_dn:[\"array ldap_explode_dn(string dn, int with_attrib)\",\"Splits DN into its component parts\"],ldap_first_attribute:[\"string ldap_first_attribute(resource link, resource result_entry)\",\"Return first attribute\"],ldap_first_entry:[\"resource ldap_first_entry(resource link, resource result)\",\"Return first result id\"],ldap_first_reference:[\"resource ldap_first_reference(resource link, resource result)\",\"Return first reference\"],ldap_free_result:[\"bool ldap_free_result(resource result)\",\"Free result memory\"],ldap_get_attributes:[\"array ldap_get_attributes(resource link, resource result_entry)\",\"Get attributes from a search result entry\"],ldap_get_dn:[\"string ldap_get_dn(resource link, resource result_entry)\",\"Get the DN of a result entry\"],ldap_get_entries:[\"array ldap_get_entries(resource link, resource result)\",\"Get all result entries\"],ldap_get_option:[\"bool ldap_get_option(resource link, int option, mixed retval)\",\"Get the current value of various session-wide parameters\"],ldap_get_values_len:[\"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\"Get all values with lengths from a result entry\"],ldap_list:[\"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Single-level search\"],ldap_mod_add:[\"bool ldap_mod_add(resource link, string dn, array entry)\",\"Add attribute values to current\"],ldap_mod_del:[\"bool ldap_mod_del(resource link, string dn, array entry)\",\"Delete attribute values\"],ldap_mod_replace:[\"bool ldap_mod_replace(resource link, string dn, array entry)\",\"Replace attribute values with new ones\"],ldap_next_attribute:[\"string ldap_next_attribute(resource link, resource result_entry)\",\"Get the next attribute in result\"],ldap_next_entry:[\"resource ldap_next_entry(resource link, resource result_entry)\",\"Get next result entry\"],ldap_next_reference:[\"resource ldap_next_reference(resource link, resource reference_entry)\",\"Get next reference\"],ldap_parse_reference:[\"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\"Extract information from reference entry\"],ldap_parse_result:[\"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\"Extract information from result\"],ldap_read:[\"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Read an entry\"],ldap_rename:[\"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\"Modify the name of an entry\"],ldap_sasl_bind:[\"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\"Bind to LDAP directory using SASL\"],ldap_search:[\"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Search LDAP tree under base_dn\"],ldap_set_option:[\"bool ldap_set_option(resource link, int option, mixed newval)\",\"Set the value of various session-wide parameters\"],ldap_set_rebind_proc:[\"bool ldap_set_rebind_proc(resource link, string callback)\",\"Set a callback function to do re-binds on referral chasing.\"],ldap_sort:[\"bool ldap_sort(resource link, resource result, string sortfilter)\",\"Sort LDAP result entries\"],ldap_start_tls:[\"bool ldap_start_tls(resource link)\",\"Start TLS\"],ldap_t61_to_8859:[\"string ldap_t61_to_8859(string value)\",\"Translate t61 characters to 8859 characters\"],ldap_unbind:[\"bool ldap_unbind(resource link)\",\"Unbind from LDAP directory\"],leak:[\"void leak(int num_bytes=3)\",\"Cause an intentional memory leak, for testing/debugging purposes\"],levenshtein:[\"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\"Calculate Levenshtein distance between two strings\"],libxml_clear_errors:[\"void libxml_clear_errors()\",\"Clear last error from libxml\"],libxml_disable_entity_loader:[\"bool libxml_disable_entity_loader([boolean disable])\",\"Disable/Enable ability to load external entities\"],libxml_get_errors:[\"object libxml_get_errors()\",\"Retrieve array of errors\"],libxml_get_last_error:[\"object libxml_get_last_error()\",\"Retrieve last error from libxml\"],libxml_set_streams_context:[\"void libxml_set_streams_context(resource streams_context)\",\"Set the streams context for the next libxml document load or write\"],libxml_use_internal_errors:[\"bool libxml_use_internal_errors([boolean use_errors])\",\"Disable libxml errors and allow user to fetch error information as needed\"],link:[\"int link(string target, string link)\",\"Create a hard link\"],linkinfo:[\"int linkinfo(string filename)\",\"Returns the st_dev field of the UNIX C stat structure describing the link\"],litespeed_request_headers:[\"array litespeed_request_headers(void)\",\"Fetch all HTTP request headers\"],litespeed_response_headers:[\"array litespeed_response_headers(void)\",\"Fetch all HTTP response headers\"],locale_accept_from_http:[\"string locale_accept_from_http(string $http_accept)\",null],locale_canonicalize:[\"static string locale_canonicalize(Locale $loc, string $locale)\",\"* @param string $locale The locale string to canonicalize\"],locale_filter_matches:[\"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"],locale_get_all_variants:[\"static array locale_get_all_variants($locale)\",\"* gets an array containing the list of variants, or null\"],locale_get_default:[\"static string locale_get_default( )\",\"Get default locale\"],locale_get_keywords:[\"static array locale_get_keywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"],locale_get_primary_language:[\"static string locale_get_primary_language($locale)\",\"* gets the primary language for the $locale\"],locale_get_region:[\"static string locale_get_region($locale)\",\"* gets the region for the $locale\"],locale_get_script:[\"static string locale_get_script($locale)\",\"* gets the script for the $locale\"],locale_lookup:[\"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\"* Searchs the items in $langtag for the best match to the language * range\"],locale_set_default:[\"static string locale_set_default( string $locale )\",\"Set default locale\"],localeconv:[\"array localeconv(void)\",\"Returns numeric formatting information based on the current locale\"],localtime:[\"array localtime([int timestamp [, bool associative_array]])\",\"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"],log:[\"float log(float number, [float base])\",\"Returns the natural logarithm of the number, or the base log if base is specified\"],log10:[\"float log10(float number)\",\"Returns the base-10 logarithm of the number\"],log1p:[\"float log1p(float number)\",\"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"],long2ip:[\"string long2ip(int proper_address)\",\"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"],lstat:[\"array lstat(string filename)\",\"Give information about a file or symbolic link\"],ltrim:[\"string ltrim(string str [, string character_mask])\",\"Strips whitespace from the beginning of a string\"],mail:[\"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"Send an email message\"],max:[\"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the highest value in an array or a series of arguments\"],mb_check_encoding:[\"bool mb_check_encoding([string var[, string encoding]])\",\"Check if the string is valid for the specified encoding\"],mb_convert_case:[\"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\"Returns a case-folded version of sourcestring\"],mb_convert_encoding:[\"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\"Returns converted string in desired encoding\"],mb_convert_kana:[\"string mb_convert_kana(string str [, string option] [, string encoding])\",\"Conversion between full-width character and half-width character (Japanese)\"],mb_convert_variables:[\"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\"Converts the string resource in variables to desired encoding\"],mb_decode_mimeheader:[\"string mb_decode_mimeheader(string string)\",'Decodes the MIME \"encoded-word\" in the string'],mb_decode_numericentity:[\"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\"Converts HTML numeric entities to character code\"],mb_detect_encoding:[\"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\"Encodings of the given string is returned (as a string)\"],mb_detect_order:[\"bool|array mb_detect_order([mixed encoding-list])\",\"Sets the current detect_order or Return the current detect_order as a array\"],mb_encode_mimeheader:[\"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",'Converts the string to MIME \"encoded-word\" in the format of =?charset?(B|Q)?encoded_string?='],mb_encode_numericentity:[\"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\"Converts specified characters to HTML numeric entities\"],mb_encoding_aliases:[\"array mb_encoding_aliases(string encoding)\",\"Returns an array of the aliases of a given encoding name\"],mb_ereg:[\"int mb_ereg(string pattern, string string [, array registers])\",\"Regular expression match for multibyte string\"],mb_ereg_match:[\"bool mb_ereg_match(string pattern, string string [,string option])\",\"Regular expression match for multibyte string\"],mb_ereg_replace:[\"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\"Replace regular expression for multibyte string\"],mb_ereg_search:[\"bool mb_ereg_search([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_getpos:[\"int mb_ereg_search_getpos(void)\",\"Get search start position\"],mb_ereg_search_getregs:[\"array mb_ereg_search_getregs(void)\",\"Get matched substring of the last time\"],mb_ereg_search_init:[\"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\"Initialize string and regular expression for search.\"],mb_ereg_search_pos:[\"array mb_ereg_search_pos([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_regs:[\"array mb_ereg_search_regs([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_setpos:[\"bool mb_ereg_search_setpos(int position)\",\"Set search start position\"],mb_eregi:[\"int mb_eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match for multibyte string\"],mb_eregi_replace:[\"string mb_eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression for multibyte string\"],mb_get_info:[\"mixed mb_get_info([string type])\",\"Returns the current settings of mbstring\"],mb_http_input:[\"mixed mb_http_input([string type])\",\"Returns the input encoding\"],mb_http_output:[\"string mb_http_output([string encoding])\",\"Sets the current output_encoding or returns the current output_encoding as a string\"],mb_internal_encoding:[\"string mb_internal_encoding([string encoding])\",\"Sets the current internal encoding or Returns the current internal encoding as a string\"],mb_language:[\"string mb_language([string language])\",\"Sets the current language or Returns the current language as a string\"],mb_list_encodings:[\"mixed mb_list_encodings()\",\"Returns an array of all supported entity encodings\"],mb_output_handler:[\"string mb_output_handler(string contents, int status)\",\"Returns string in output buffer converted to the http_output encoding\"],mb_parse_str:[\"bool mb_parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],mb_preferred_mime_name:[\"string mb_preferred_mime_name(string encoding)\",\"Return the preferred MIME name (charset) as a string\"],mb_regex_encoding:[\"string mb_regex_encoding([string encoding])\",\"Returns the current encoding for regex as a string.\"],mb_regex_set_options:[\"string mb_regex_set_options([string options])\",\"Set or get the default options for mbregex functions\"],mb_send_mail:[\"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"*  Sends an email message with MIME scheme\"],mb_split:[\"array mb_split(string pattern, string string [, int limit])\",\"split multibyte string into array by regular expression\"],mb_strcut:[\"string mb_strcut(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_strimwidth:[\"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\"Trim the string in terminal width\"],mb_stripos:[\"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of first occurrence of a string within another, case insensitive\"],mb_stristr:[\"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another, case insensitive\"],mb_strlen:[\"int mb_strlen(string str [, string encoding])\",\"Get character numbers of a string\"],mb_strpos:[\"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of first occurrence of a string within another\"],mb_strrchr:[\"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another\"],mb_strrichr:[\"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another, case insensitive\"],mb_strripos:[\"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of last occurrence of a string within another, case insensitive\"],mb_strrpos:[\"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of last occurrence of a string within another\"],mb_strstr:[\"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another\"],mb_strtolower:[\"string mb_strtolower(string sourcestring [, string encoding])\",\"*  Returns a lowercased version of sourcestring\"],mb_strtoupper:[\"string mb_strtoupper(string sourcestring [, string encoding])\",\"*  Returns a uppercased version of sourcestring\"],mb_strwidth:[\"int mb_strwidth(string str [, string encoding])\",\"Gets terminal width of a string\"],mb_substitute_character:[\"mixed mb_substitute_character([mixed substchar])\",\"Sets the current substitute_character or returns the current substitute_character\"],mb_substr:[\"string mb_substr(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_substr_count:[\"int mb_substr_count(string haystack, string needle [, string encoding])\",\"Count the number of substring occurrences\"],mcrypt_cbc:[\"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_cfb:[\"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_create_iv:[\"string mcrypt_create_iv(int size, int source)\",\"Create an initialization vector (IV)\"],mcrypt_decrypt:[\"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_ecb:[\"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_enc_get_algorithms_name:[\"string mcrypt_enc_get_algorithms_name(resource td)\",\"Returns the name of the algorithm specified by the descriptor td\"],mcrypt_enc_get_block_size:[\"int mcrypt_enc_get_block_size(resource td)\",\"Returns the block size of the cipher specified by the descriptor td\"],mcrypt_enc_get_iv_size:[\"int mcrypt_enc_get_iv_size(resource td)\",\"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_key_size:[\"int mcrypt_enc_get_key_size(resource td)\",\"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_modes_name:[\"string mcrypt_enc_get_modes_name(resource td)\",\"Returns the name of the mode specified by the descriptor td\"],mcrypt_enc_get_supported_key_sizes:[\"array mcrypt_enc_get_supported_key_sizes(resource td)\",\"This function decrypts the crypttext\"],mcrypt_enc_is_block_algorithm:[\"bool mcrypt_enc_is_block_algorithm(resource td)\",\"Returns TRUE if the alrogithm is a block algorithms\"],mcrypt_enc_is_block_algorithm_mode:[\"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_enc_is_block_mode:[\"bool mcrypt_enc_is_block_mode(resource td)\",\"Returns TRUE if the mode outputs blocks\"],mcrypt_enc_self_test:[\"int mcrypt_enc_self_test(resource td)\",\"This function runs the self test on the algorithm specified by the descriptor td\"],mcrypt_encrypt:[\"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_generic:[\"string mcrypt_generic(resource td, string data)\",\"This function encrypts the plaintext\"],mcrypt_generic_deinit:[\"bool mcrypt_generic_deinit(resource td)\",\"This function terminates encrypt specified by the descriptor td\"],mcrypt_generic_init:[\"int mcrypt_generic_init(resource td, string key, string iv)\",\"This function initializes all buffers for the specific module\"],mcrypt_get_block_size:[\"int mcrypt_get_block_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_get_cipher_name:[\"string mcrypt_get_cipher_name(string cipher)\",\"Get the key size of cipher\"],mcrypt_get_iv_size:[\"int mcrypt_get_iv_size(string cipher, string module)\",\"Get the IV size of cipher (Usually the same as the blocksize)\"],mcrypt_get_key_size:[\"int mcrypt_get_key_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_list_algorithms:[\"array mcrypt_list_algorithms([string lib_dir])\",'List all algorithms in \"module_dir\"'],mcrypt_list_modes:[\"array mcrypt_list_modes([string lib_dir])\",'List all modes \"module_dir\"'],mcrypt_module_close:[\"bool mcrypt_module_close(resource td)\",\"Free the descriptor td\"],mcrypt_module_get_algo_block_size:[\"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\"Returns the block size of the algorithm\"],mcrypt_module_get_algo_key_size:[\"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\"Returns the maximum supported key size of the algorithm\"],mcrypt_module_get_supported_key_sizes:[\"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\"This function decrypts the crypttext\"],mcrypt_module_is_block_algorithm:[\"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\"Returns TRUE if the algorithm is a block algorithm\"],mcrypt_module_is_block_algorithm_mode:[\"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_module_is_block_mode:[\"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode outputs blocks of bytes\"],mcrypt_module_open:[\"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\"Opens the module of the algorithm and the mode to be used\"],mcrypt_module_self_test:[\"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",'Does a self test of the module \"module\"'],mcrypt_ofb:[\"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],md5:[\"string md5(string str, [ bool raw_output])\",\"Calculate the md5 hash of a string\"],md5_file:[\"string md5_file(string filename [, bool raw_output])\",\"Calculate the md5 hash of given filename\"],mdecrypt_generic:[\"string mdecrypt_generic(resource td, string data)\",\"This function decrypts the plaintext\"],memory_get_peak_usage:[\"int memory_get_peak_usage([real_usage])\",\"Returns the peak allocated by PHP memory\"],memory_get_usage:[\"int memory_get_usage([real_usage])\",\"Returns the allocated by PHP memory\"],metaphone:[\"string metaphone(string text[, int phones])\",\"Break english phrases down into their phonemes\"],method_exists:[\"bool method_exists(object object, string method)\",\"Checks if the class method exists\"],mhash:[\"string mhash(int hash, string data [, string key])\",\"Hash data with hash\"],mhash_count:[\"int mhash_count(void)\",\"Gets the number of available hashes\"],mhash_get_block_size:[\"int mhash_get_block_size(int hash)\",\"Gets the block size of hash\"],mhash_get_hash_name:[\"string mhash_get_hash_name(int hash)\",\"Gets the name of hash\"],mhash_keygen_s2k:[\"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\"Generates a key using hash functions\"],microtime:[\"mixed microtime([bool get_as_float])\",\"Returns either a string or a float containing the current time in seconds and microseconds\"],mime_content_type:[\"string mime_content_type(string filename|resource stream)\",\"Return content-type for file\"],min:[\"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the lowest value in an array or a series of arguments\"],mkdir:[\"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\"Create a directory\"],mktime:[\"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a date\"],money_format:[\"string money_format(string format , float value)\",\"Convert monetary value(s) to string\"],move_uploaded_file:[\"bool move_uploaded_file(string path, string new_path)\",\"Move a file if and only if it was created by an upload\"],msg_get_queue:[\"resource msg_get_queue(int key [, int perms])\",\"Attach to a message queue\"],msg_queue_exists:[\"bool msg_queue_exists(int key)\",\"Check whether a message queue exists\"],msg_receive:[\"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_remove_queue:[\"bool msg_remove_queue(resource queue)\",\"Destroy the queue\"],msg_send:[\"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_set_queue:[\"bool msg_set_queue(resource queue, array data)\",\"Set information for a message queue\"],msg_stat_queue:[\"array msg_stat_queue(resource queue)\",\"Returns information about a message queue\"],msgfmt_create:[\"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\"* Create formatter.\"],msgfmt_format:[\"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\"* Format a message.\"],msgfmt_format_message:[\"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\"* Format a message.\"],msgfmt_get_error_code:[\"int msgfmt_get_error_code( MessageFormatter $nf )\",\"* Get formatter's last error code.\"],msgfmt_get_error_message:[\"string msgfmt_get_error_message( MessageFormatter $coll )\",\"* Get text description for formatter's last error code.\"],msgfmt_get_locale:[\"string msgfmt_get_locale(MessageFormatter $mf)\",\"* Get formatter locale.\"],msgfmt_get_pattern:[\"string msgfmt_get_pattern( MessageFormatter $mf )\",\"* Get formatter pattern.\"],msgfmt_parse:[\"array msgfmt_parse( MessageFormatter $nf, string $source )\",\"* Parse a message.\"],msgfmt_set_pattern:[\"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],mssql_bind:[\"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\"Adds a parameter to a stored procedure or a remote stored procedure\"],mssql_close:[\"bool mssql_close([resource conn_id])\",\"Closes a connection to a MS-SQL server\"],mssql_connect:[\"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a connection to a MS-SQL server\"],mssql_data_seek:[\"bool mssql_data_seek(resource result_id, int offset)\",\"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"],mssql_execute:[\"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\"Executes a stored procedure on a MS-SQL server database\"],mssql_fetch_array:[\"array mssql_fetch_array(resource result_id [, int result_type])\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_assoc:[\"array mssql_fetch_assoc(resource result_id)\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_batch:[\"int mssql_fetch_batch(resource result_index)\",\"Returns the next batch of records\"],mssql_fetch_field:[\"object mssql_fetch_field(resource result_id [, int offset])\",\"Gets information about certain fields in a query result\"],mssql_fetch_object:[\"object mssql_fetch_object(resource result_id)\",\"Returns a pseudo-object of the current row in the result set specified by result_id\"],mssql_fetch_row:[\"array mssql_fetch_row(resource result_id)\",\"Returns an array of the current row in the result set specified by result_id\"],mssql_field_length:[\"int mssql_field_length(resource result_id [, int offset])\",\"Get the length of a MS-SQL field\"],mssql_field_name:[\"string mssql_field_name(resource result_id [, int offset])\",\"Returns the name of the field given by offset in the result set given by result_id\"],mssql_field_seek:[\"bool mssql_field_seek(resource result_id, int offset)\",\"Seeks to the specified field offset\"],mssql_field_type:[\"string mssql_field_type(resource result_id [, int offset])\",\"Returns the type of a field\"],mssql_free_result:[\"bool mssql_free_result(resource result_index)\",\"Free a MS-SQL result index\"],mssql_free_statement:[\"bool mssql_free_statement(resource result_index)\",\"Free a MS-SQL statement index\"],mssql_get_last_message:[\"string mssql_get_last_message(void)\",\"Gets the last message from the MS-SQL server\"],mssql_guid_string:[\"string mssql_guid_string(string binary [,bool short_format])\",\"Converts a 16 byte binary GUID to a string\"],mssql_init:[\"int mssql_init(string sp_name [, resource conn_id])\",\"Initializes a stored procedure or a remote stored procedure\"],mssql_min_error_severity:[\"void mssql_min_error_severity(int severity)\",\"Sets the lower error severity\"],mssql_min_message_severity:[\"void mssql_min_message_severity(int severity)\",\"Sets the lower message severity\"],mssql_next_result:[\"bool mssql_next_result(resource result_id)\",\"Move the internal result pointer to the next result\"],mssql_num_fields:[\"int mssql_num_fields(resource mssql_result_index)\",\"Returns the number of fields fetched in from the result id specified\"],mssql_num_rows:[\"int mssql_num_rows(resource mssql_result_index)\",\"Returns the number of rows fetched in from the result id specified\"],mssql_pconnect:[\"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a persistent connection to a MS-SQL server\"],mssql_query:[\"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\"Perform an SQL query on a MS-SQL server database\"],mssql_result:[\"string mssql_result(resource result_id, int row, mixed field)\",\"Returns the contents of one cell from a MS-SQL result set\"],mssql_rows_affected:[\"int mssql_rows_affected(resource conn_id)\",\"Returns the number of records affected by the query\"],mssql_select_db:[\"bool mssql_select_db(string database_name [, resource conn_id])\",\"Select a MS-SQL database\"],mt_getrandmax:[\"int mt_getrandmax(void)\",\"Returns the maximum value a random number from Mersenne Twister can have\"],mt_rand:[\"int mt_rand([int min, int max])\",\"Returns a random number from Mersenne Twister\"],mt_srand:[\"void mt_srand([int seed])\",\"Seeds Mersenne Twister random number generator\"],mysql_affected_rows:[\"int mysql_affected_rows([int link_identifier])\",\"Gets number of affected rows in previous MySQL operation\"],mysql_client_encoding:[\"string mysql_client_encoding([int link_identifier])\",\"Returns the default character set for the current connection\"],mysql_close:[\"bool mysql_close([int link_identifier])\",\"Close a MySQL connection\"],mysql_connect:[\"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\"Opens a connection to a MySQL Server\"],mysql_create_db:[\"bool mysql_create_db(string database_name [, int link_identifier])\",\"Create a MySQL database\"],mysql_data_seek:[\"bool mysql_data_seek(resource result, int row_number)\",\"Move internal result pointer\"],mysql_db_query:[\"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_drop_db:[\"bool mysql_drop_db(string database_name [, int link_identifier])\",\"Drops (delete) a MySQL database\"],mysql_errno:[\"int mysql_errno([int link_identifier])\",\"Returns the number of the error message from previous MySQL operation\"],mysql_error:[\"string mysql_error([int link_identifier])\",\"Returns the text of the error message from previous MySQL operation\"],mysql_escape_string:[\"string mysql_escape_string(string to_be_escaped)\",\"Escape string for mysql query\"],mysql_fetch_array:[\"array mysql_fetch_array(resource result [, int result_type])\",\"Fetch a result row as an array (associative, numeric or both)\"],mysql_fetch_assoc:[\"array mysql_fetch_assoc(resource result)\",\"Fetch a result row as an associative array\"],mysql_fetch_field:[\"object mysql_fetch_field(resource result [, int field_offset])\",\"Gets column information from a result and return as an object\"],mysql_fetch_lengths:[\"array mysql_fetch_lengths(resource result)\",\"Gets max data size of each column in a result\"],mysql_fetch_object:[\"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysql_fetch_row:[\"array mysql_fetch_row(resource result)\",\"Gets a result row as an enumerated array\"],mysql_field_flags:[\"string mysql_field_flags(resource result, int field_offset)\",\"Gets the flags associated with the specified field in a result\"],mysql_field_len:[\"int mysql_field_len(resource result, int field_offset)\",\"Returns the length of the specified field\"],mysql_field_name:[\"string mysql_field_name(resource result, int field_index)\",\"Gets the name of the specified field in a result\"],mysql_field_seek:[\"bool mysql_field_seek(resource result, int field_offset)\",\"Sets result pointer to a specific field offset\"],mysql_field_table:[\"string mysql_field_table(resource result, int field_offset)\",\"Gets name of the table the specified field is in\"],mysql_field_type:[\"string mysql_field_type(resource result, int field_offset)\",\"Gets the type of the specified field in a result\"],mysql_free_result:[\"bool mysql_free_result(resource result)\",\"Free result memory\"],mysql_get_client_info:[\"string mysql_get_client_info(void)\",\"Returns a string that represents the client library version\"],mysql_get_host_info:[\"string mysql_get_host_info([int link_identifier])\",\"Returns a string describing the type of connection in use, including the server host name\"],mysql_get_proto_info:[\"int mysql_get_proto_info([int link_identifier])\",\"Returns the protocol version used by current connection\"],mysql_get_server_info:[\"string mysql_get_server_info([int link_identifier])\",\"Returns a string that represents the server version number\"],mysql_info:[\"string mysql_info([int link_identifier])\",\"Returns a string containing information about the most recent query\"],mysql_insert_id:[\"int mysql_insert_id([int link_identifier])\",\"Gets the ID generated from the previous INSERT operation\"],mysql_list_dbs:[\"resource mysql_list_dbs([int link_identifier])\",\"List databases available on a MySQL server\"],mysql_list_fields:[\"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\"List MySQL result fields\"],mysql_list_processes:[\"resource mysql_list_processes([int link_identifier])\",\"Returns a result set describing the current server threads\"],mysql_list_tables:[\"resource mysql_list_tables(string database_name [, int link_identifier])\",\"List tables in a MySQL database\"],mysql_num_fields:[\"int mysql_num_fields(resource result)\",\"Gets number of fields in a result\"],mysql_num_rows:[\"int mysql_num_rows(resource result)\",\"Gets number of rows in a result\"],mysql_pconnect:[\"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\"Opens a persistent connection to a MySQL Server\"],mysql_ping:[\"bool mysql_ping([int link_identifier])\",\"Ping a server connection. If no connection then reconnect.\"],mysql_query:[\"resource mysql_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_real_escape_string:[\"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysql_result:[\"mixed mysql_result(resource result, int row [, mixed field])\",\"Gets result data\"],mysql_select_db:[\"bool mysql_select_db(string database_name [, int link_identifier])\",\"Selects a MySQL database\"],mysql_set_charset:[\"bool mysql_set_charset(string csname [, int link_identifier])\",\"sets client character set\"],mysql_stat:[\"string mysql_stat([int link_identifier])\",\"Returns a string containing status information\"],mysql_thread_id:[\"int mysql_thread_id([int link_identifier])\",\"Returns the thread id of current connection\"],mysql_unbuffered_query:[\"resource mysql_unbuffered_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL, without fetching and buffering the result rows\"],mysqli_affected_rows:[\"mixed mysqli_affected_rows(object link)\",\"Get number of affected rows in previous MySQL operation\"],mysqli_autocommit:[\"bool mysqli_autocommit(object link, bool mode)\",\"Turn auto commit on or of\"],mysqli_cache_stats:[\"array mysqli_cache_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_change_user:[\"bool mysqli_change_user(object link, string user, string password, string database)\",\"Change logged-in user of the active connection\"],mysqli_character_set_name:[\"string mysqli_character_set_name(object link)\",\"Returns the name of the character set used for this connection\"],mysqli_close:[\"bool mysqli_close(object link)\",\"Close connection\"],mysqli_commit:[\"bool mysqli_commit(object link)\",\"Commit outstanding actions and close transaction\"],mysqli_connect:[\"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\"Open a connection to a mysql server\"],mysqli_connect_errno:[\"int mysqli_connect_errno(void)\",\"Returns the numerical value of the error message from last connect command\"],mysqli_connect_error:[\"string mysqli_connect_error(void)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_data_seek:[\"bool mysqli_data_seek(object result, int offset)\",\"Move internal result pointer\"],mysqli_debug:[\"void mysqli_debug(string debug)\",\"\"],mysqli_dump_debug_info:[\"bool mysqli_dump_debug_info(object link)\",\"\"],mysqli_embedded_server_end:[\"void mysqli_embedded_server_end(void)\",\"\"],mysqli_embedded_server_start:[\"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\"initialize and start embedded server\"],mysqli_errno:[\"int mysqli_errno(object link)\",\"Returns the numerical value of the error message from previous MySQL operation\"],mysqli_error:[\"string mysqli_error(object link)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_fetch_all:[\"mixed mysqli_fetch_all (object result [,int resulttype])\",\"Fetches all result rows as an associative array, a numeric array, or both\"],mysqli_fetch_array:[\"mixed mysqli_fetch_array (object result [,int resulttype])\",\"Fetch a result row as an associative array, a numeric array, or both\"],mysqli_fetch_assoc:[\"mixed mysqli_fetch_assoc (object result)\",\"Fetch a result row as an associative array\"],mysqli_fetch_field:[\"mixed mysqli_fetch_field (object result)\",\"Get column information from a result and return as an object\"],mysqli_fetch_field_direct:[\"mixed mysqli_fetch_field_direct (object result, int offset)\",\"Fetch meta-data for a single field\"],mysqli_fetch_fields:[\"mixed mysqli_fetch_fields (object result)\",\"Return array of objects containing field meta-data\"],mysqli_fetch_lengths:[\"mixed mysqli_fetch_lengths (object result)\",\"Get the length of each output in a result\"],mysqli_fetch_object:[\"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysqli_fetch_row:[\"array mysqli_fetch_row (object result)\",\"Get a result row as an enumerated array\"],mysqli_field_count:[\"int mysqli_field_count(object link)\",\"Fetch the number of fields returned by the last query for the given link\"],mysqli_field_seek:[\"int mysqli_field_seek(object result, int fieldnr)\",\"Set result pointer to a specified field offset\"],mysqli_field_tell:[\"int mysqli_field_tell(object result)\",\"Get current field offset of result pointer\"],mysqli_free_result:[\"void mysqli_free_result(object result)\",\"Free query result memory for the given result handle\"],mysqli_get_charset:[\"object mysqli_get_charset(object link)\",\"returns a character set object\"],mysqli_get_client_info:[\"string mysqli_get_client_info(void)\",\"Get MySQL client info\"],mysqli_get_client_stats:[\"array mysqli_get_client_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_client_version:[\"int mysqli_get_client_version(void)\",\"Get MySQL client info\"],mysqli_get_connection_stats:[\"array mysqli_get_connection_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_host_info:[\"string mysqli_get_host_info (object link)\",\"Get MySQL host info\"],mysqli_get_proto_info:[\"int mysqli_get_proto_info(object link)\",\"Get MySQL protocol information\"],mysqli_get_server_info:[\"string mysqli_get_server_info(object link)\",\"Get MySQL server info\"],mysqli_get_server_version:[\"int mysqli_get_server_version(object link)\",\"Return the MySQL version for the server referenced by the given link\"],mysqli_get_warnings:[\"object mysqli_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}'],mysqli_info:[\"string mysqli_info(object link)\",\"Get information about the most recent query\"],mysqli_init:[\"resource mysqli_init(void)\",\"Initialize mysqli and return a resource for use with mysql_real_connect\"],mysqli_insert_id:[\"mixed mysqli_insert_id(object link)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_kill:[\"bool mysqli_kill(object link, int processid)\",\"Kill a mysql process on the server\"],mysqli_link_construct:[\"object mysqli_link_construct()\",\"\"],mysqli_more_results:[\"bool mysqli_more_results(object link)\",\"check if there any more query results from a multi query\"],mysqli_multi_query:[\"bool mysqli_multi_query(object link, string query)\",\"allows to execute multiple queries\"],mysqli_next_result:[\"bool mysqli_next_result(object link)\",\"read next result from multi_query\"],mysqli_num_fields:[\"int mysqli_num_fields(object result)\",\"Get number of fields in result\"],mysqli_num_rows:[\"mixed mysqli_num_rows(object result)\",\"Get number of rows in result\"],mysqli_options:[\"bool mysqli_options(object link, int flags, mixed values)\",\"Set options\"],mysqli_ping:[\"bool mysqli_ping(object link)\",\"Ping a server connection or reconnect if there is no connection\"],mysqli_poll:[\"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\"Poll connections\"],mysqli_prepare:[\"mixed mysqli_prepare(object link, string query)\",\"Prepare a SQL statement for execution\"],mysqli_query:[\"mixed mysqli_query(object link, string query [,int resultmode]) */\",'PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Os|l\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Empty query\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid value for resultmode\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT'],mysqli_real_connect:[\"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\"Open a connection to a mysql server\"],mysqli_real_escape_string:[\"string mysqli_real_escape_string(object link, string escapestr)\",\"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysqli_real_query:[\"bool mysqli_real_query(object link, string query)\",\"Binary-safe version of mysql_query()\"],mysqli_reap_async_query:[\"int mysqli_reap_async_query(object link)\",\"Poll connections\"],mysqli_refresh:[\"bool mysqli_refresh(object link, long options)\",\"Flush tables or caches, or reset replication server information\"],mysqli_report:[\"bool mysqli_report(int flags)\",\"sets report level\"],mysqli_rollback:[\"bool mysqli_rollback(object link)\",\"Undo actions from current transaction\"],mysqli_select_db:[\"bool mysqli_select_db(object link, string dbname)\",\"Select a MySQL database\"],mysqli_set_charset:[\"bool mysqli_set_charset(object link, string csname)\",\"sets client character set\"],mysqli_set_local_infile_default:[\"void mysqli_set_local_infile_default(object link)\",\"unsets user defined handler for load local infile command\"],mysqli_set_local_infile_handler:[\"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\"Set callback functions for LOAD DATA LOCAL INFILE\"],mysqli_sqlstate:[\"string mysqli_sqlstate(object link)\",\"Returns the SQLSTATE error from previous MySQL operation\"],mysqli_ssl_set:[\"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\"\"],mysqli_stat:[\"mixed mysqli_stat(object link)\",\"Get current system status\"],mysqli_stmt_affected_rows:[\"mixed mysqli_stmt_affected_rows(object stmt)\",\"Return the number of rows affected in the last query for the given link\"],mysqli_stmt_attr_get:[\"int mysqli_stmt_attr_get(object stmt, long attr)\",\"\"],mysqli_stmt_attr_set:[\"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\"\"],mysqli_stmt_bind_param:[\"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\"Bind variables to a prepared statement as parameters\"],mysqli_stmt_bind_result:[\"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\"Bind variables to a prepared statement for result storage\"],mysqli_stmt_close:[\"bool mysqli_stmt_close(object stmt)\",\"Close statement\"],mysqli_stmt_data_seek:[\"void mysqli_stmt_data_seek(object stmt, int offset)\",\"Move internal result pointer\"],mysqli_stmt_errno:[\"int mysqli_stmt_errno(object stmt)\",\"\"],mysqli_stmt_error:[\"string mysqli_stmt_error(object stmt)\",\"\"],mysqli_stmt_execute:[\"bool mysqli_stmt_execute(object stmt)\",\"Execute a prepared statement\"],mysqli_stmt_fetch:[\"mixed mysqli_stmt_fetch(object stmt)\",\"Fetch results from a prepared statement into the bound variables\"],mysqli_stmt_field_count:[\"int mysqli_stmt_field_count(object stmt) {\",\"Return the number of result columns for the given statement\"],mysqli_stmt_free_result:[\"void mysqli_stmt_free_result(object stmt)\",\"Free stored result memory for the given statement handle\"],mysqli_stmt_get_result:[\"object mysqli_stmt_get_result(object link)\",\"Buffer result set on client\"],mysqli_stmt_get_warnings:[\"object mysqli_stmt_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \"mysqli_stmt\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_stmt_init:[\"mixed mysqli_stmt_init(object link)\",\"Initialize statement object\"],mysqli_stmt_insert_id:[\"mixed mysqli_stmt_insert_id(object stmt)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_stmt_next_result:[\"bool mysqli_stmt_next_result(object link)\",\"read next result from multi_query\"],mysqli_stmt_num_rows:[\"mixed mysqli_stmt_num_rows(object stmt)\",\"Return the number of rows in statements result set\"],mysqli_stmt_param_count:[\"int mysqli_stmt_param_count(object stmt)\",\"Return the number of parameter for the given statement\"],mysqli_stmt_prepare:[\"bool mysqli_stmt_prepare(object stmt, string query)\",\"prepare server side statement with query\"],mysqli_stmt_reset:[\"bool mysqli_stmt_reset(object stmt)\",\"reset a prepared statement\"],mysqli_stmt_result_metadata:[\"mixed mysqli_stmt_result_metadata(object stmt)\",\"return result set from statement\"],mysqli_stmt_send_long_data:[\"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\"\"],mysqli_stmt_sqlstate:[\"string mysqli_stmt_sqlstate(object stmt)\",\"\"],mysqli_stmt_store_result:[\"bool mysqli_stmt_store_result(stmt)\",\"\"],mysqli_store_result:[\"object mysqli_store_result(object link)\",\"Buffer result set on client\"],mysqli_thread_id:[\"int mysqli_thread_id(object link)\",\"Return the current thread ID\"],mysqli_thread_safe:[\"bool mysqli_thread_safe(void)\",\"Return whether thread safety is given or not\"],mysqli_use_result:[\"mixed mysqli_use_result(object link)\",\"Directly retrieve query results - do not buffer results on client side\"],mysqli_warning_count:[\"int mysqli_warning_count (object link)\",\"Return number of warnings from the last query for the given link\"],natcasesort:[\"void natcasesort(array &array_arg)\",\"Sort an array using case-insensitive natural sort\"],natsort:[\"void natsort(array &array_arg)\",\"Sort an array using natural sort\"],next:[\"mixed next(array array_arg)\",\"Move array argument's internal pointer to the next element and return it\"],ngettext:[\"string ngettext(string MSGID1, string MSGID2, int N)\",\"Plural version of gettext()\"],nl2br:[\"string nl2br(string str [, bool is_xhtml])\",\"Converts newlines to HTML line breaks\"],nl_langinfo:[\"string nl_langinfo(int item)\",\"Query language and locale information\"],normalizer_is_normalize:[\"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\"* Test if a string is in a given normalization form.\"],normalizer_normalize:[\"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\"* Normalize a string.\"],nsapi_request_headers:[\"array nsapi_request_headers(void)\",\"Get all headers from the request\"],nsapi_response_headers:[\"array nsapi_response_headers(void)\",\"Get all headers from the response\"],nsapi_virtual:[\"bool nsapi_virtual(string uri)\",\"Perform an NSAPI sub-request\"],number_format:[\"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\"Formats a number with grouped thousands\"],numfmt_create:[\"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\"* Create number formatter.\"],numfmt_format:[\"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\"* Format a number.\"],numfmt_format_currency:[\"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\"* Format a number as currency.\"],numfmt_get_attribute:[\"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_get_error_code:[\"int numfmt_get_error_code( NumberFormatter $nf )\",\"* Get formatter's last error code.\"],numfmt_get_error_message:[\"string numfmt_get_error_message( NumberFormatter $nf )\",\"* Get text description for formatter's last error code.\"],numfmt_get_locale:[\"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\"* Get formatter locale.\"],numfmt_get_pattern:[\"string numfmt_get_pattern( NumberFormatter $nf )\",\"* Get formatter pattern.\"],numfmt_get_symbol:[\"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\"* Get formatter symbol value.\"],numfmt_get_text_attribute:[\"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_parse:[\"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\"* Parse a number.\"],numfmt_parse_currency:[\"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\"* Parse a number as currency.\"],numfmt_parse_message:[\"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\"* Parse a message.\"],numfmt_set_attribute:[\"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\"* Get formatter attribute value.\"],numfmt_set_pattern:[\"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\"* Set formatter pattern.\"],numfmt_set_symbol:[\"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\"* Set formatter symbol value.\"],numfmt_set_text_attribute:[\"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\"* Get formatter attribute value.\"],ob_clean:[\"bool ob_clean(void)\",\"Clean (delete) the current output buffer\"],ob_end_clean:[\"bool ob_end_clean(void)\",\"Clean the output buffer, and delete current output buffer\"],ob_end_flush:[\"bool ob_end_flush(void)\",\"Flush (send) the output buffer, and delete current output buffer\"],ob_flush:[\"bool ob_flush(void)\",\"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"],ob_get_clean:[\"bool ob_get_clean(void)\",\"Get current buffer contents and delete current output buffer\"],ob_get_contents:[\"string ob_get_contents(void)\",\"Return the contents of the output buffer\"],ob_get_flush:[\"bool ob_get_flush(void)\",\"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"],ob_get_length:[\"int ob_get_length(void)\",\"Return the length of the output buffer\"],ob_get_level:[\"int ob_get_level(void)\",\"Return the nesting level of the output buffer\"],ob_get_status:[\"false|array ob_get_status([bool full_status])\",\"Return the status of the active or all output buffers\"],ob_gzhandler:[\"string ob_gzhandler(string str, int mode)\",\"Encode str based on accept-encoding setting - designed to be called from ob_start()\"],ob_iconv_handler:[\"string ob_iconv_handler(string contents, int status)\",\"Returns str in output buffer converted to the iconv.output_encoding character set\"],ob_implicit_flush:[\"void ob_implicit_flush([int flag])\",\"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"],ob_list_handlers:[\"false|array ob_list_handlers()\",\"*  List all output_buffers in an array\"],ob_start:[\"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\"Turn on Output Buffering (specifying an optional output handler).\"],oci_bind_array_by_name:[\"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\"Bind a PHP array to an Oracle PL/SQL type by name\"],oci_bind_by_name:[\"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\"Bind a PHP variable to an Oracle placeholder by name\"],oci_cancel:[\"bool oci_cancel(resource stmt)\",\"Cancel reading from a cursor\"],oci_close:[\"bool oci_close(resource connection)\",\"Disconnect from database\"],oci_collection_append:[\"bool oci_collection_append(string value)\",\"Append an object to the collection\"],oci_collection_assign:[\"bool oci_collection_assign(object from)\",\"Assign a collection from another existing collection\"],oci_collection_element_assign:[\"bool oci_collection_element_assign(int index, string val)\",\"Assign element val to collection at index ndx\"],oci_collection_element_get:[\"string oci_collection_element_get(int ndx)\",\"Retrieve the value at collection index ndx\"],oci_collection_max:[\"int oci_collection_max()\",\"Return the max value of a collection. For a varray this is the maximum length of the array\"],oci_collection_size:[\"int oci_collection_size()\",\"Return the size of a collection\"],oci_collection_trim:[\"bool oci_collection_trim(int num)\",\"Trim num elements from the end of a collection\"],oci_commit:[\"bool oci_commit(resource connection)\",\"Commit the current context\"],oci_connect:[\"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_define_by_name:[\"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\"Define a PHP variable to an Oracle column by name\"],oci_error:[\"array oci_error([resource stmt|connection|global])\",\"Return the last error of stmt|connection|global. If no error happened returns false.\"],oci_execute:[\"bool oci_execute(resource stmt [, int mode])\",\"Execute a parsed statement\"],oci_fetch:[\"bool oci_fetch(resource stmt)\",\"Prepare a new row of data for reading\"],oci_fetch_all:[\"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\"Fetch all rows of result data into an array\"],oci_fetch_array:[\"array oci_fetch_array( resource stmt [, int mode ])\",\"Fetch a result row as an array\"],oci_fetch_assoc:[\"array oci_fetch_assoc( resource stmt )\",\"Fetch a result row as an associative array\"],oci_fetch_object:[\"object oci_fetch_object( resource stmt )\",\"Fetch a result row as an object\"],oci_fetch_row:[\"array oci_fetch_row( resource stmt )\",\"Fetch a result row as an enumerated array\"],oci_field_is_null:[\"bool oci_field_is_null(resource stmt, int col)\",\"Tell whether a column is NULL\"],oci_field_name:[\"string oci_field_name(resource stmt, int col)\",\"Tell the name of a column\"],oci_field_precision:[\"int oci_field_precision(resource stmt, int col)\",\"Tell the precision of a column\"],oci_field_scale:[\"int oci_field_scale(resource stmt, int col)\",\"Tell the scale of a column\"],oci_field_size:[\"int oci_field_size(resource stmt, int col)\",\"Tell the maximum data size of a column\"],oci_field_type:[\"mixed oci_field_type(resource stmt, int col)\",\"Tell the data type of a column\"],oci_field_type_raw:[\"int oci_field_type_raw(resource stmt, int col)\",\"Tell the raw oracle data type of a column\"],oci_free_collection:[\"bool oci_free_collection()\",\"Deletes collection object\"],oci_free_descriptor:[\"bool oci_free_descriptor()\",\"Deletes large object description\"],oci_free_statement:[\"bool oci_free_statement(resource stmt)\",\"Free all resources associated with a statement\"],oci_internal_debug:[\"void oci_internal_debug(int onoff)\",\"Toggle internal debugging output for the OCI extension\"],oci_lob_append:[\"bool oci_lob_append( object lob )\",\"Appends data from a LOB to another LOB\"],oci_lob_close:[\"bool oci_lob_close()\",\"Closes lob descriptor\"],oci_lob_copy:[\"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\"Copies data from a LOB to another LOB\"],oci_lob_eof:[\"bool oci_lob_eof()\",\"Checks if EOF is reached\"],oci_lob_erase:[\"int oci_lob_erase( [ int offset [, int length ] ] )\",\"Erases a specified portion of the internal LOB, starting at a specified offset\"],oci_lob_export:[\"bool oci_lob_export([string filename [, int start [, int length]]])\",\"Writes a large object into a file\"],oci_lob_flush:[\"bool oci_lob_flush( [ int flag ] )\",\"Flushes the LOB buffer\"],oci_lob_import:[\"bool oci_lob_import( string filename )\",\"Loads file into a LOB\"],oci_lob_is_equal:[\"bool oci_lob_is_equal( object lob1, object lob2 )\",\"Tests to see if two LOB/FILE locators are equal\"],oci_lob_load:[\"string oci_lob_load()\",\"Loads a large object\"],oci_lob_read:[\"string oci_lob_read( int length )\",\"Reads particular part of a large object\"],oci_lob_rewind:[\"bool oci_lob_rewind()\",\"Rewind pointer of a LOB\"],oci_lob_save:[\"bool oci_lob_save( string data [, int offset ])\",\"Saves a large object\"],oci_lob_seek:[\"bool oci_lob_seek( int offset [, int whence ])\",\"Moves the pointer of a LOB\"],oci_lob_size:[\"int oci_lob_size()\",\"Returns size of a large object\"],oci_lob_tell:[\"int oci_lob_tell()\",\"Tells LOB pointer position\"],oci_lob_truncate:[\"bool oci_lob_truncate( [ int length ])\",\"Truncates a LOB\"],oci_lob_write:[\"int oci_lob_write( string string [, int length ])\",\"Writes data to current position of a LOB\"],oci_lob_write_temporary:[\"bool oci_lob_write_temporary(string var [, int lob_type])\",\"Writes temporary blob\"],oci_new_collection:[\"object oci_new_collection(resource connection, string tdo [, string schema])\",\"Initialize a new collection\"],oci_new_connect:[\"resource oci_new_connect(string user, string pass [, string db])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_new_cursor:[\"resource oci_new_cursor(resource connection)\",\"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"],oci_new_descriptor:[\"object oci_new_descriptor(resource connection [, int type])\",\"Initialize a new empty descriptor LOB/FILE (LOB is default)\"],oci_num_fields:[\"int oci_num_fields(resource stmt)\",\"Return the number of result columns in a statement\"],oci_num_rows:[\"int oci_num_rows(resource stmt)\",\"Return the row count of an OCI statement\"],oci_parse:[\"resource oci_parse(resource connection, string query)\",\"Parse a query and return a statement\"],oci_password_change:[\"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\"Changes the password of an account\"],oci_pconnect:[\"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"],oci_result:[\"string oci_result(resource stmt, mixed column)\",\"Return a single column of result data\"],oci_rollback:[\"bool oci_rollback(resource connection)\",\"Rollback the current context\"],oci_server_version:[\"string oci_server_version(resource connection)\",\"Return a string containing server version information\"],oci_set_action:[\"bool oci_set_action(resource connection, string value)\",\"Sets the action attribute on the connection\"],oci_set_client_identifier:[\"bool oci_set_client_identifier(resource connection, string value)\",\"Sets the client identifier attribute on the connection\"],oci_set_client_info:[\"bool oci_set_client_info(resource connection, string value)\",\"Sets the client info attribute on the connection\"],oci_set_edition:[\"bool oci_set_edition(string value)\",\"Sets the edition attribute for all subsequent connections created\"],oci_set_module_name:[\"bool oci_set_module_name(resource connection, string value)\",\"Sets the module attribute on the connection\"],oci_set_prefetch:[\"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"],oci_statement_type:[\"string oci_statement_type(resource stmt)\",\"Return the query type of an OCI statement\"],ocifetchinto:[\"int ocifetchinto(resource stmt, array &output [, int mode])\",\"Fetch a row of result data into an array\"],ocigetbufferinglob:[\"bool ocigetbufferinglob()\",\"Returns current state of buffering for a LOB\"],ocisetbufferinglob:[\"bool ocisetbufferinglob( boolean flag )\",\"Enables/disables buffering for a LOB\"],octdec:[\"int octdec(string octal_number)\",\"Returns the decimal equivalent of an octal string\"],odbc_autocommit:[\"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\"Toggle autocommit mode or get status\"],odbc_binmode:[\"bool odbc_binmode(int result_id, int mode)\",\"Handle binary column data\"],odbc_close:[\"void odbc_close(resource connection_id)\",\"Close an ODBC connection\"],odbc_close_all:[\"void odbc_close_all(void)\",\"Close all ODBC connections\"],odbc_columnprivileges:[\"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"],odbc_columns:[\"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\"Returns a result identifier that can be used to fetch a list of column names in specified tables\"],odbc_commit:[\"bool odbc_commit(resource connection_id)\",\"Commit an ODBC transaction\"],odbc_connect:[\"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\"Connect to a datasource\"],odbc_cursor:[\"string odbc_cursor(resource result_id)\",\"Get cursor name\"],odbc_data_source:[\"array odbc_data_source(resource connection_id, int fetch_type)\",\"Return information about the currently connected data source\"],odbc_error:[\"string odbc_error([resource connection_id])\",\"Get the last error code\"],odbc_errormsg:[\"string odbc_errormsg([resource connection_id])\",\"Get the last error message\"],odbc_exec:[\"resource odbc_exec(resource connection_id, string query [, int flags])\",\"Prepare and execute an SQL statement\"],odbc_execute:[\"bool odbc_execute(resource result_id [, array parameters_array])\",\"Execute a prepared statement\"],odbc_fetch_array:[\"array odbc_fetch_array(int result [, int rownumber])\",\"Fetch a result row as an associative array\"],odbc_fetch_into:[\"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\"Fetch one result row into an array\"],odbc_fetch_object:[\"object odbc_fetch_object(int result [, int rownumber])\",\"Fetch a result row as an object\"],odbc_fetch_row:[\"bool odbc_fetch_row(resource result_id [, int row_number])\",\"Fetch a row\"],odbc_field_len:[\"int odbc_field_len(resource result_id, int field_number)\",\"Get the length (precision) of a column\"],odbc_field_name:[\"string odbc_field_name(resource result_id, int field_number)\",\"Get a column name\"],odbc_field_num:[\"int odbc_field_num(resource result_id, string field_name)\",\"Return column number\"],odbc_field_scale:[\"int odbc_field_scale(resource result_id, int field_number)\",\"Get the scale of a column\"],odbc_field_type:[\"string odbc_field_type(resource result_id, int field_number)\",\"Get the datatype of a column\"],odbc_foreignkeys:[\"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"],odbc_free_result:[\"bool odbc_free_result(resource result_id)\",\"Free resources associated with a result\"],odbc_gettypeinfo:[\"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\"Returns a result identifier containing information about data types supported by the data source\"],odbc_longreadlen:[\"bool odbc_longreadlen(int result_id, int length)\",\"Handle LONG columns\"],odbc_next_result:[\"bool odbc_next_result(resource result_id)\",\"Checks if multiple results are avaiable\"],odbc_num_fields:[\"int odbc_num_fields(resource result_id)\",\"Get number of columns in a result\"],odbc_num_rows:[\"int odbc_num_rows(resource result_id)\",\"Get number of rows in a result\"],odbc_pconnect:[\"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\"Establish a persistent connection to a datasource\"],odbc_prepare:[\"resource odbc_prepare(resource connection_id, string query)\",\"Prepares a statement for execution\"],odbc_primarykeys:[\"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\"Returns a result identifier listing the column names that comprise the primary key for a table\"],odbc_procedurecolumns:[\"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"],odbc_procedures:[\"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\"Returns a result identifier containg the list of procedure names in a datasource\"],odbc_result:[\"mixed odbc_result(resource result_id, mixed field)\",\"Get result data\"],odbc_result_all:[\"int odbc_result_all(resource result_id [, string format])\",\"Print result as HTML table\"],odbc_rollback:[\"bool odbc_rollback(resource connection_id)\",\"Rollback a transaction\"],odbc_setoption:[\"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\"Sets connection or statement options\"],odbc_specialcolumns:[\"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"],odbc_statistics:[\"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"],odbc_tableprivileges:[\"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\"Returns a result identifier containing a list of tables and the privileges associated with each table\"],odbc_tables:[\"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\"Call the SQLTables function\"],opendir:[\"mixed opendir(string path[, resource context])\",\"Open a directory and return a dir_handle\"],openlog:[\"bool openlog(string ident, int option, int facility)\",\"Open connection to system logger\"],openssl_csr_export:[\"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\"Exports a CSR to file or a var\"],openssl_csr_export_to_file:[\"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\"Exports a CSR to file\"],openssl_csr_get_public_key:[\"mixed openssl_csr_get_public_key(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_get_subject:[\"mixed openssl_csr_get_subject(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_new:[\"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\"Generates a privkey and CSR\"],openssl_csr_sign:[\"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\"Signs a cert with another CERT\"],openssl_decrypt:[\"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\"Takes raw or base64 encoded string and dectupt it using given method and key\"],openssl_dh_compute_key:[\"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\"Computes shared sicret for public value of remote DH key and local DH key\"],openssl_digest:[\"string openssl_digest(string data, string method [, bool raw_output=false])\",\"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"],openssl_encrypt:[\"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\"Encrypts given data with given method and key, returns raw or base64 encoded string\"],openssl_error_string:[\"mixed openssl_error_string(void)\",\"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"],openssl_get_cipher_methods:[\"array openssl_get_cipher_methods([bool aliases = false])\",\"Return array of available cipher methods\"],openssl_get_md_methods:[\"array openssl_get_md_methods([bool aliases = false])\",\"Return array of available digest methods\"],openssl_open:[\"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\"Opens data\"],openssl_pkcs12_export:[\"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS12 to a var\"],openssl_pkcs12_export_to_file:[\"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS to file\"],openssl_pkcs12_read:[\"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\"Parses a PKCS12 to an array\"],openssl_pkcs7_decrypt:[\"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"],openssl_pkcs7_encrypt:[\"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"],openssl_pkcs7_sign:[\"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"],openssl_pkcs7_verify:[\"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"],openssl_pkey_export:[\"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\"Gets an exportable representation of a key into a string or file\"],openssl_pkey_export_to_file:[\"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\"Gets an exportable representation of a key into a file\"],openssl_pkey_free:[\"void openssl_pkey_free(int key)\",\"Frees a key\"],openssl_pkey_get_details:[\"resource openssl_pkey_get_details(resource key)\",\"returns an array with the key details (bits, pkey, type)\"],openssl_pkey_get_private:[\"int openssl_pkey_get_private(string key [, string passphrase])\",\"Gets private keys\"],openssl_pkey_get_public:[\"int openssl_pkey_get_public(mixed cert)\",\"Gets public key from X.509 certificate\"],openssl_pkey_new:[\"resource openssl_pkey_new([array configargs])\",\"Generates a new private key\"],openssl_private_decrypt:[\"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\"Decrypts data with private key\"],openssl_private_encrypt:[\"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with private key\"],openssl_public_decrypt:[\"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\"Decrypts data with public key\"],openssl_public_encrypt:[\"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with public key\"],openssl_random_pseudo_bytes:[\"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\"Returns a string of the length specified filled with random pseudo bytes\"],openssl_seal:[\"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\"Seals data\"],openssl_sign:[\"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\"Signs data\"],openssl_verify:[\"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\"Verifys data\"],openssl_x509_check_private_key:[\"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\"Checks if a private key corresponds to a CERT\"],openssl_x509_checkpurpose:[\"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"],openssl_x509_export:[\"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_export_to_file:[\"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_free:[\"void openssl_x509_free(resource x509)\",\"Frees X.509 certificates\"],openssl_x509_parse:[\"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\"Returns an array of the fields/values of the CERT\"],openssl_x509_read:[\"resource openssl_x509_read(mixed cert)\",\"Reads X.509 certificates\"],ord:[\"int ord(string character)\",\"Returns ASCII value of character\"],output_add_rewrite_var:[\"bool output_add_rewrite_var(string name, string value)\",\"Add URL rewriter values\"],output_reset_rewrite_vars:[\"bool output_reset_rewrite_vars(void)\",\"Reset(clear) URL rewriter values\"],pack:[\"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Takes one or more arguments and packs them into a binary string according to the format argument\"],parse_ini_file:[\"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\"Parse configuration file\"],parse_ini_string:[\"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\"Parse configuration string\"],parse_locale:[\"static array parse_locale($locale)\",\"* parses a locale-id into an array the different parts of it\"],parse_str:[\"void parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],parse_url:[\"mixed parse_url(string url, [int url_component])\",\"Parse a URL and return its components\"],passthru:[\"void passthru(string command [, int &return_value])\",\"Execute an external program and display raw output\"],pathinfo:[\"array pathinfo(string path[, int options])\",\"Returns information about a certain string\"],pclose:[\"int pclose(resource fp)\",\"Close a file pointer opened by popen()\"],pcnlt_sigwaitinfo:[\"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\"Synchronously wait for queued signals\"],pcntl_alarm:[\"int pcntl_alarm(int seconds)\",\"Set an alarm clock for delivery of a signal\"],pcntl_exec:[\"bool pcntl_exec(string path [, array args [, array envs]])\",\"Executes specified program in current process space as defined by exec(2)\"],pcntl_fork:[\"int pcntl_fork(void)\",\"Forks the currently running process following the same behavior as the UNIX fork() system call\"],pcntl_getpriority:[\"int pcntl_getpriority([int pid [, int process_identifier]])\",\"Get the priority of any process\"],pcntl_setpriority:[\"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\"Change the priority of any process\"],pcntl_signal:[\"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\"Assigns a system signal handler to a PHP function\"],pcntl_signal_dispatch:[\"bool pcntl_signal_dispatch()\",\"Dispatch signals to signal handlers\"],pcntl_sigprocmask:[\"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\"Examine and change blocked signals\"],pcntl_sigtimedwait:[\"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\"Wait for queued signals\"],pcntl_wait:[\"int pcntl_wait(int &status)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_waitpid:[\"int pcntl_waitpid(int pid, int &status, int options)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_wexitstatus:[\"int pcntl_wexitstatus(int status)\",\"Returns the status code of a child's exit\"],pcntl_wifexited:[\"bool pcntl_wifexited(int status)\",\"Returns true if the child status code represents a successful exit\"],pcntl_wifsignaled:[\"bool pcntl_wifsignaled(int status)\",\"Returns true if the child status code represents a process that was terminated due to a signal\"],pcntl_wifstopped:[\"bool pcntl_wifstopped(int status)\",\"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"],pcntl_wstopsig:[\"int pcntl_wstopsig(int status)\",\"Returns the number of the signal that caused the process to stop who's status code is passed\"],pcntl_wtermsig:[\"int pcntl_wtermsig(int status)\",\"Returns the number of the signal that terminated the process who's status code is passed\"],pdo_drivers:[\"array pdo_drivers()\",\"Return array of available PDO drivers\"],pfsockopen:[\"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open persistent Internet or Unix domain socket connection\"],pg_affected_rows:[\"int pg_affected_rows(resource result)\",\"Returns the number of affected tuples\"],pg_cancel_query:[\"bool pg_cancel_query(resource connection)\",\"Cancel request\"],pg_client_encoding:[\"string pg_client_encoding([resource connection])\",\"Get the current client encoding\"],pg_close:[\"bool pg_close([resource connection])\",\"Close a PostgreSQL connection\"],pg_connect:[\"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a PostgreSQL connection\"],pg_connection_busy:[\"bool pg_connection_busy(resource connection)\",\"Get connection is busy or not\"],pg_connection_reset:[\"bool pg_connection_reset(resource connection)\",\"Reset connection (reconnect)\"],pg_connection_status:[\"int pg_connection_status(resource connnection)\",\"Get connection status\"],pg_convert:[\"array pg_convert(resource db, string table, array values[, int options])\",\"Check and convert values for PostgreSQL SQL statement\"],pg_copy_from:[\"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\"Copy table from array\"],pg_copy_to:[\"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\"Copy table to array\"],pg_dbname:[\"string pg_dbname([resource connection])\",\"Get the database name\"],pg_delete:[\"mixed pg_delete(resource db, string table, array ids[, int options])\",\"Delete records has ids (id=>value)\"],pg_end_copy:[\"bool pg_end_copy([resource connection])\",\"Sync with backend. Completes the Copy command\"],pg_escape_bytea:[\"string pg_escape_bytea([resource connection,] string data)\",\"Escape binary for bytea type\"],pg_escape_string:[\"string pg_escape_string([resource connection,] string data)\",\"Escape string for text/char type\"],pg_execute:[\"resource pg_execute([resource connection,] string stmtname, array params)\",\"Execute a prepared query\"],pg_fetch_all:[\"array pg_fetch_all(resource result)\",\"Fetch all rows into array\"],pg_fetch_all_columns:[\"array pg_fetch_all_columns(resource result [, int column_number])\",\"Fetch all rows into array\"],pg_fetch_array:[\"array pg_fetch_array(resource result [, int row [, int result_type]])\",\"Fetch a row as an array\"],pg_fetch_assoc:[\"array pg_fetch_assoc(resource result [, int row])\",\"Fetch a row as an assoc array\"],pg_fetch_object:[\"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\"Fetch a row as an object\"],pg_fetch_result:[\"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\"Returns values from a result identifier\"],pg_fetch_row:[\"array pg_fetch_row(resource result [, int row [, int result_type]])\",\"Get a row as an enumerated array\"],pg_field_is_null:[\"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\"Test if a field is NULL\"],pg_field_name:[\"string pg_field_name(resource result, int field_number)\",\"Returns the name of the field\"],pg_field_num:[\"int pg_field_num(resource result, string field_name)\",\"Returns the field number of the named field\"],pg_field_prtlen:[\"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\"Returns the printed length\"],pg_field_size:[\"int pg_field_size(resource result, int field_number)\",\"Returns the internal size of the field\"],pg_field_table:[\"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\"Returns the name of the table field belongs to, or table's oid if oid_only is true\"],pg_field_type:[\"string pg_field_type(resource result, int field_number)\",\"Returns the type name for the given field\"],pg_field_type_oid:[\"string pg_field_type_oid(resource result, int field_number)\",\"Returns the type oid for the given field\"],pg_free_result:[\"bool pg_free_result(resource result)\",\"Free result memory\"],pg_get_notify:[\"array pg_get_notify([resource connection[, result_type]])\",\"Get asynchronous notification\"],pg_get_pid:[\"int pg_get_pid([resource connection)\",\"Get backend(server) pid\"],pg_get_result:[\"resource pg_get_result(resource connection)\",\"Get asynchronous query result\"],pg_host:[\"string pg_host([resource connection])\",\"Returns the host name associated with the connection\"],pg_insert:[\"mixed pg_insert(resource db, string table, array values[, int options])\",\"Insert values (filed=>value) to table\"],pg_last_error:[\"string pg_last_error([resource connection])\",\"Get the error message string\"],pg_last_notice:[\"string pg_last_notice(resource connection)\",\"Returns the last notice set by the backend\"],pg_last_oid:[\"string pg_last_oid(resource result)\",\"Returns the last object identifier\"],pg_lo_close:[\"bool pg_lo_close(resource large_object)\",\"Close a large object\"],pg_lo_create:[\"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\"Create a large object\"],pg_lo_export:[\"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\"Export large object direct to filesystem\"],pg_lo_import:[\"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\"Import large object direct from filesystem\"],pg_lo_open:[\"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\"Open a large object and return fd\"],pg_lo_read:[\"string pg_lo_read(resource large_object [, int len])\",\"Read a large object\"],pg_lo_read_all:[\"int pg_lo_read_all(resource large_object)\",\"Read a large object and send straight to browser\"],pg_lo_seek:[\"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\"Seeks position of large object\"],pg_lo_tell:[\"int pg_lo_tell(resource large_object)\",\"Returns current position of large object\"],pg_lo_unlink:[\"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\"Delete a large object\"],pg_lo_write:[\"int pg_lo_write(resource large_object, string buf [, int len])\",\"Write a large object\"],pg_meta_data:[\"array pg_meta_data(resource db, string table)\",\"Get meta_data\"],pg_num_fields:[\"int pg_num_fields(resource result)\",\"Return the number of fields in the result\"],pg_num_rows:[\"int pg_num_rows(resource result)\",\"Return the number of rows in the result\"],pg_options:[\"string pg_options([resource connection])\",\"Get the options associated with the connection\"],pg_parameter_status:[\"string|false pg_parameter_status([resource connection,] string param_name)\",\"Returns the value of a server parameter\"],pg_pconnect:[\"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a persistent PostgreSQL connection\"],pg_ping:[\"bool pg_ping([resource connection])\",\"Ping database. If connection is bad, try to reconnect.\"],pg_port:[\"int pg_port([resource connection])\",\"Return the port number associated with the connection\"],pg_prepare:[\"resource pg_prepare([resource connection,] string stmtname, string query)\",\"Prepare a query for future execution\"],pg_put_line:[\"bool pg_put_line([resource connection,] string query)\",\"Send null-terminated string to backend server\"],pg_query:[\"resource pg_query([resource connection,] string query)\",\"Execute a query\"],pg_query_params:[\"resource pg_query_params([resource connection,] string query, array params)\",\"Execute a query\"],pg_result_error:[\"string pg_result_error(resource result)\",\"Get error message associated with result\"],pg_result_error_field:[\"string pg_result_error_field(resource result, int fieldcode)\",\"Get error message field associated with result\"],pg_result_seek:[\"bool pg_result_seek(resource result, int offset)\",\"Set internal row offset\"],pg_result_status:[\"mixed pg_result_status(resource result[, long result_type])\",\"Get status of query result\"],pg_select:[\"mixed pg_select(resource db, string table, array ids[, int options])\",\"Select records that has ids (id=>value)\"],pg_send_execute:[\"bool pg_send_execute(resource connection, string stmtname, array params)\",\"Executes prevriously prepared stmtname asynchronously\"],pg_send_prepare:[\"bool pg_send_prepare(resource connection, string stmtname, string query)\",\"Asynchronously prepare a query for future execution\"],pg_send_query:[\"bool pg_send_query(resource connection, string query)\",\"Send asynchronous query\"],pg_send_query_params:[\"bool pg_send_query_params(resource connection, string query, array params)\",\"Send asynchronous parameterized query\"],pg_set_client_encoding:[\"int pg_set_client_encoding([resource connection,] string encoding)\",\"Set client encoding\"],pg_set_error_verbosity:[\"int pg_set_error_verbosity([resource connection,] int verbosity)\",\"Set error verbosity\"],pg_trace:[\"bool pg_trace(string filename [, string mode [, resource connection]])\",\"Enable tracing a PostgreSQL connection\"],pg_transaction_status:[\"int pg_transaction_status(resource connnection)\",\"Get transaction status\"],pg_tty:[\"string pg_tty([resource connection])\",\"Return the tty name associated with the connection\"],pg_unescape_bytea:[\"string pg_unescape_bytea(string data)\",\"Unescape binary for bytea type\"],pg_untrace:[\"bool pg_untrace([resource connection])\",\"Disable tracing of a PostgreSQL connection\"],pg_update:[\"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\"Update table using values (field=>value) and ids (id=>value)\"],pg_version:[\"array pg_version([resource connection])\",\"Returns an array with client, protocol and server version (when available)\"],php_egg_logo_guid:[\"string php_egg_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_ini_loaded_file:[\"string php_ini_loaded_file(void)\",\"Return the actual loaded ini filename\"],php_ini_scanned_files:[\"string php_ini_scanned_files(void)\",\"Return comma-separated string of .ini files parsed from the additional ini dir\"],php_logo_guid:[\"string php_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_real_logo_guid:[\"string php_real_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_sapi_name:[\"string php_sapi_name(void)\",\"Return the current SAPI module name\"],php_snmpv3:[\"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"],php_strip_whitespace:[\"string php_strip_whitespace(string file_name)\",\"Return source with stripped comments and whitespace\"],php_uname:[\"string php_uname(void)\",\"Return information about the system PHP was built on\"],phpcredits:[\"void phpcredits([int flag])\",\"Prints the list of people who've contributed to the PHP project\"],phpinfo:[\"void phpinfo([int what])\",\"Output a page of useful information about PHP and the current request\"],phpversion:[\"string phpversion([string extension])\",\"Return the current PHP version\"],pi:[\"float pi(void)\",\"Returns an approximation of pi\"],png2wbmp:[\"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert PNG image to WBMP image\"],popen:[\"resource popen(string command, string mode)\",\"Execute a command and open either a read or a write pipe to it\"],posix_access:[\"bool posix_access(string file [, int mode])\",\"Determine accessibility of a file (POSIX.1 5.6.3)\"],posix_ctermid:[\"string posix_ctermid(void)\",\"Generate terminal path name (POSIX.1, 4.7.1)\"],posix_get_last_error:[\"int posix_get_last_error(void)\",\"Retrieve the error number set by the last posix function which failed.\"],posix_getcwd:[\"string posix_getcwd(void)\",\"Get working directory pathname (POSIX.1, 5.2.2)\"],posix_getegid:[\"int posix_getegid(void)\",\"Get the current effective group id (POSIX.1, 4.2.1)\"],posix_geteuid:[\"int posix_geteuid(void)\",\"Get the current effective user id (POSIX.1, 4.2.1)\"],posix_getgid:[\"int posix_getgid(void)\",\"Get the current group id (POSIX.1, 4.2.1)\"],posix_getgrgid:[\"array posix_getgrgid(long gid)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgrnam:[\"array posix_getgrnam(string groupname)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgroups:[\"array posix_getgroups(void)\",\"Get supplementary group id's (POSIX.1, 4.2.3)\"],posix_getlogin:[\"string posix_getlogin(void)\",\"Get user name (POSIX.1, 4.2.4)\"],posix_getpgid:[\"int posix_getpgid(void)\",\"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"],posix_getpgrp:[\"int posix_getpgrp(void)\",\"Get current process group id (POSIX.1, 4.3.1)\"],posix_getpid:[\"int posix_getpid(void)\",\"Get the current process id (POSIX.1, 4.1.1)\"],posix_getppid:[\"int posix_getppid(void)\",\"Get the parent process id (POSIX.1, 4.1.1)\"],posix_getpwnam:[\"array posix_getpwnam(string groupname)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getpwuid:[\"array posix_getpwuid(long uid)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getrlimit:[\"array posix_getrlimit(void)\",\"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"],posix_getsid:[\"int posix_getsid(void)\",\"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"],posix_getuid:[\"int posix_getuid(void)\",\"Get the current user id (POSIX.1, 4.2.1)\"],posix_initgroups:[\"bool posix_initgroups(string name, int base_group_id)\",\"Calculate the group access list for the user specified in name.\"],posix_isatty:[\"bool posix_isatty(int fd)\",\"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"],posix_kill:[\"bool posix_kill(int pid, int sig)\",\"Send a signal to a process (POSIX.1, 3.3.2)\"],posix_mkfifo:[\"bool posix_mkfifo(string pathname, int mode)\",\"Make a FIFO special file (POSIX.1, 5.4.2)\"],posix_mknod:[\"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\"Make a special or ordinary file (POSIX.1)\"],posix_setegid:[\"bool posix_setegid(long uid)\",\"Set effective group id\"],posix_seteuid:[\"bool posix_seteuid(long uid)\",\"Set effective user id\"],posix_setgid:[\"bool posix_setgid(int uid)\",\"Set group id (POSIX.1, 4.2.2)\"],posix_setpgid:[\"bool posix_setpgid(int pid, int pgid)\",\"Set process group id for job control (POSIX.1, 4.3.3)\"],posix_setsid:[\"int posix_setsid(void)\",\"Create session and set process group id (POSIX.1, 4.3.2)\"],posix_setuid:[\"bool posix_setuid(long uid)\",\"Set user id (POSIX.1, 4.2.2)\"],posix_strerror:[\"string posix_strerror(int errno)\",\"Retrieve the system error message associated with the given errno.\"],posix_times:[\"array posix_times(void)\",\"Get process times (POSIX.1, 4.5.2)\"],posix_ttyname:[\"string posix_ttyname(int fd)\",\"Determine terminal device name (POSIX.1, 4.7.2)\"],posix_uname:[\"array posix_uname(void)\",\"Get system name (POSIX.1, 4.4.1)\"],pow:[\"number pow(number base, number exponent)\",\"Returns base raised to the power of exponent. Returns integer result when possible\"],preg_filter:[\"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement and only return matches.\"],preg_grep:[\"array preg_grep(string regex, array input [, int flags])\",\"Searches array and returns entries which match regex\"],preg_last_error:[\"int preg_last_error()\",\"Returns the error code of the last regexp execution.\"],preg_match:[\"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\"Perform a Perl-style regular expression match\"],preg_match_all:[\"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\"Perform a Perl-style global regular expression match\"],preg_quote:[\"string preg_quote(string str [, string delim_char])\",\"Quote regular expression characters plus an optional character\"],preg_replace:[\"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement.\"],preg_replace_callback:[\"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement using replacement callback.\"],preg_split:[\"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\"Split string into an array using a perl-style regular expression as a delimiter\"],prev:[\"mixed prev(array array_arg)\",\"Move array argument's internal pointer to the previous element and return it\"],print:[\"int print(string arg)\",\"Output a string\"],print_r:[\"mixed print_r(mixed var [, bool return])\",\"Prints out or returns information about the specified variable\"],printf:[\"int printf(string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string\"],proc_close:[\"int proc_close(resource process)\",\"close a process opened by proc_open\"],proc_get_status:[\"array proc_get_status(resource process)\",\"get information about a process opened by proc_open\"],proc_nice:[\"bool proc_nice(int priority)\",\"Change the priority of the current process\"],proc_open:[\"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\"Run a process with more control over it's file descriptors\"],proc_terminate:[\"bool proc_terminate(resource process [, long signal])\",\"kill a process opened by proc_open\"],property_exists:[\"bool property_exists(mixed object_or_class, string property_name)\",\"Checks if the object or class has a property\"],pspell_add_to_personal:[\"bool pspell_add_to_personal(int pspell, string word)\",\"Adds a word to a personal list\"],pspell_add_to_session:[\"bool pspell_add_to_session(int pspell, string word)\",\"Adds a word to the current session\"],pspell_check:[\"bool pspell_check(int pspell, string word)\",\"Returns true if word is valid\"],pspell_clear_session:[\"bool pspell_clear_session(int pspell)\",\"Clears the current session\"],pspell_config_create:[\"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\"Create a new config to be used later to create a manager\"],pspell_config_data_dir:[\"bool pspell_config_data_dir(int conf, string directory)\",\"location of language data files\"],pspell_config_dict_dir:[\"bool pspell_config_dict_dir(int conf, string directory)\",\"location of the main word list\"],pspell_config_ignore:[\"bool pspell_config_ignore(int conf, int ignore)\",\"Ignore words <= n chars\"],pspell_config_mode:[\"bool pspell_config_mode(int conf, long mode)\",\"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"],pspell_config_personal:[\"bool pspell_config_personal(int conf, string personal)\",\"Use a personal dictionary for this config\"],pspell_config_repl:[\"bool pspell_config_repl(int conf, string repl)\",\"Use a personal dictionary with replacement pairs for this config\"],pspell_config_runtogether:[\"bool pspell_config_runtogether(int conf, bool runtogether)\",\"Consider run-together words as valid components\"],pspell_config_save_repl:[\"bool pspell_config_save_repl(int conf, bool save)\",\"Save replacement pairs when personal list is saved for this config\"],pspell_new:[\"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary\"],pspell_new_config:[\"int pspell_new_config(int config)\",\"Load a dictionary based on the given config\"],pspell_new_personal:[\"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary with a personal wordlist\"],pspell_save_wordlist:[\"bool pspell_save_wordlist(int pspell)\",\"Saves the current (personal) wordlist\"],pspell_store_replacement:[\"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\"Notify the dictionary of a user-selected replacement\"],pspell_suggest:[\"array pspell_suggest(int pspell, string word)\",\"Returns array of suggestions\"],putenv:[\"bool putenv(string setting)\",\"Set the value of an environment variable\"],quoted_printable_decode:[\"string quoted_printable_decode(string str)\",\"Convert a quoted-printable string to an 8 bit string\"],quoted_printable_encode:[\"string quoted_printable_encode(string str) */\",'PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \"s\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}'],quotemeta:[\"string quotemeta(string str)\",\"Quotes meta characters\"],rad2deg:[\"float rad2deg(float number)\",\"Converts the radian number to the equivalent number in degrees\"],rand:[\"int rand([int min, int max])\",\"Returns a random number\"],range:[\"array range(mixed low, mixed high[, int step])\",\"Create an array containing the range of integers or characters from low to high (inclusive)\"],rawurldecode:[\"string rawurldecode(string str)\",\"Decodes URL-encodes string\"],rawurlencode:[\"string rawurlencode(string str)\",\"URL-encodes string\"],readdir:[\"string readdir([resource dir_handle])\",\"Read directory entry from dir_handle\"],readfile:[\"int readfile(string filename [, bool use_include_path[, resource context]])\",\"Output a file or a URL\"],readgzfile:[\"int readgzfile(string filename [, int use_include_path])\",\"Output a .gz-file\"],readline:[\"string readline([string prompt])\",\"Reads a line\"],readline_add_history:[\"bool readline_add_history(string prompt)\",\"Adds a line to the history\"],readline_callback_handler_install:[\"void readline_callback_handler_install(string prompt, mixed callback)\",\"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"],readline_callback_handler_remove:[\"bool readline_callback_handler_remove()\",\"Removes a previously installed callback handler and restores terminal settings\"],readline_callback_read_char:[\"void readline_callback_read_char()\",\"Informs the readline callback interface that a character is ready for input\"],readline_clear_history:[\"bool readline_clear_history(void)\",\"Clears the history\"],readline_completion_function:[\"bool readline_completion_function(string funcname)\",\"Readline completion function?\"],readline_info:[\"mixed readline_info([string varname [, string newvalue]])\",\"Gets/sets various internal readline variables.\"],readline_list_history:[\"array readline_list_history(void)\",\"Lists the history\"],readline_on_new_line:[\"void readline_on_new_line(void)\",\"Inform readline that the cursor has moved to a new line\"],readline_read_history:[\"bool readline_read_history([string filename])\",\"Reads the history\"],readline_redisplay:[\"void readline_redisplay(void)\",\"Ask readline to redraw the display\"],readline_write_history:[\"bool readline_write_history([string filename])\",\"Writes the history\"],readlink:[\"string readlink(string filename)\",\"Return the target of a symbolic link\"],realpath:[\"string realpath(string path)\",\"Return the resolved path\"],realpath_cache_get:[\"bool realpath_cache_get()\",\"Get current size of realpath cache\"],realpath_cache_size:[\"bool realpath_cache_size()\",\"Get current size of realpath cache\"],recode_file:[\"bool recode_file(string request, resource input, resource output)\",\"Recode file input into file output according to request\"],recode_string:[\"string recode_string(string request, string str)\",\"Recode string str according to request string\"],register_shutdown_function:[\"void register_shutdown_function(string function_name)\",\"Register a user-level function to be called on request termination\"],register_tick_function:[\"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\"Registers a tick callback function\"],rename:[\"bool rename(string old_name, string new_name[, resource context])\",\"Rename a file\"],require:[\"bool require(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],require_once:[\"bool require_once(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],reset:[\"mixed reset(array array_arg)\",\"Set array argument's internal pointer to the first element and return it\"],restore_error_handler:[\"void restore_error_handler(void)\",\"Restores the previously defined error handler function\"],restore_exception_handler:[\"void restore_exception_handler(void)\",\"Restores the previously defined exception handler function\"],restore_include_path:[\"void restore_include_path()\",\"Restore the value of the include_path configuration option\"],rewind:[\"bool rewind(resource fp)\",\"Rewind the position of a file pointer\"],rewinddir:[\"void rewinddir([resource dir_handle])\",\"Rewind dir_handle back to the start\"],rmdir:[\"bool rmdir(string dirname[, resource context])\",\"Remove a directory\"],round:[\"float round(float number [, int precision [, int mode]])\",\"Returns the number rounded to specified precision\"],rsort:[\"bool rsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order\"],rtrim:[\"string rtrim(string str [, string character_mask])\",\"Removes trailing whitespace\"],scandir:[\"array scandir(string dir [, int sorting_order [, resource context]])\",\"List files & directories inside the specified path\"],sem_acquire:[\"bool sem_acquire(resource id)\",\"Acquires the semaphore with the given id, blocking if necessary\"],sem_get:[\"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"],sem_release:[\"bool sem_release(resource id)\",\"Releases the semaphore with the given id\"],sem_remove:[\"bool sem_remove(resource id)\",\"Removes semaphore from Unix systems\"],serialize:[\"string serialize(mixed variable)\",\"Returns a string representation of variable (which can later be unserialized)\"],session_cache_expire:[\"int session_cache_expire([int new_cache_expire])\",\"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"],session_cache_limiter:[\"string session_cache_limiter([string new_cache_limiter])\",\"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"],session_decode:[\"bool session_decode(string data)\",\"Deserializes data and reinitializes the variables\"],session_destroy:[\"bool session_destroy(void)\",\"Destroy the current session and all data associated with it\"],session_encode:[\"string session_encode(void)\",\"Serializes the current setup and returns the serialized representation\"],session_get_cookie_params:[\"array session_get_cookie_params(void)\",\"Return the session cookie parameters\"],session_id:[\"string session_id([string newid])\",\"Return the current session id. If newid is given, the session id is replaced with newid\"],session_is_registered:[\"bool session_is_registered(string varname)\",\"Checks if a variable is registered in session\"],session_module_name:[\"string session_module_name([string newname])\",\"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"],session_name:[\"string session_name([string newname])\",\"Return the current session name. If newname is given, the session name is replaced with newname\"],session_regenerate_id:[\"bool session_regenerate_id([bool delete_old_session])\",\"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"],session_register:[\"bool session_register(mixed var_names [, mixed ...])\",\"Adds varname(s) to the list of variables which are freezed at the session end\"],session_save_path:[\"string session_save_path([string newname])\",\"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"],session_set_cookie_params:[\"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\"Set session cookie parameters\"],session_set_save_handler:[\"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\"Sets user-level functions\"],session_start:[\"bool session_start(void)\",\"Begin session - reinitializes freezed variables, registers browsers etc\"],session_unregister:[\"bool session_unregister(string varname)\",\"Removes varname from the list of variables which are freezed at the session end\"],session_unset:[\"void session_unset(void)\",\"Unset all registered variables\"],session_write_close:[\"void session_write_close(void)\",\"Write session data and end session\"],set_error_handler:[\"string set_error_handler(string error_handler [, int error_types])\",\"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"],set_exception_handler:[\"string set_exception_handler(callable exception_handler)\",\"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"],set_include_path:[\"string set_include_path(string new_include_path)\",\"Sets the include_path configuration option\"],set_magic_quotes_runtime:[\"bool set_magic_quotes_runtime(int new_setting)\",\"Set the current active configuration setting of magic_quotes_runtime and return previous\"],set_time_limit:[\"bool set_time_limit(int seconds)\",\"Sets the maximum time a script can run\"],setcookie:[\"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie\"],setlocale:[\"string setlocale(mixed category, string locale [, string ...])\",\"Set locale information\"],setrawcookie:[\"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie with no url encoding of the value\"],settype:[\"bool settype(mixed var, string type)\",\"Set the type of the variable\"],sha1:[\"string sha1(string str [, bool raw_output])\",\"Calculate the sha1 hash of a string\"],sha1_file:[\"string sha1_file(string filename [, bool raw_output])\",\"Calculate the sha1 hash of given filename\"],shell_exec:[\"string shell_exec(string cmd)\",\"Execute command via shell and return complete output as string\"],shm_attach:[\"int shm_attach(int key [, int memsize [, int perm]])\",\"Creates or open a shared memory segment\"],shm_detach:[\"bool shm_detach(resource shm_identifier)\",\"Disconnects from shared memory segment\"],shm_get_var:[\"mixed shm_get_var(resource id, int variable_key)\",\"Returns a variable from shared memory\"],shm_has_var:[\"bool shm_has_var(resource id, int variable_key)\",\"Checks whether a specific entry exists\"],shm_put_var:[\"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\"Inserts or updates a variable in shared memory\"],shm_remove:[\"bool shm_remove(resource shm_identifier)\",\"Removes shared memory from Unix systems\"],shm_remove_var:[\"bool shm_remove_var(resource id, int variable_key)\",\"Removes variable from shared memory\"],shmop_close:[\"void shmop_close (int shmid)\",\"closes a shared memory segment\"],shmop_delete:[\"bool shmop_delete (int shmid)\",\"mark segment for deletion\"],shmop_open:[\"int shmop_open (int key, string flags, int mode, int size)\",\"gets and attaches a shared memory segment\"],shmop_read:[\"string shmop_read (int shmid, int start, int count)\",\"reads from a shm segment\"],shmop_size:[\"int shmop_size (int shmid)\",\"returns the shm size\"],shmop_write:[\"int shmop_write (int shmid, string data, int offset)\",\"writes to a shared memory segment\"],shuffle:[\"bool shuffle(array array_arg)\",\"Randomly shuffle the contents of an array\"],similar_text:[\"int similar_text(string str1, string str2 [, float percent])\",\"Calculates the similarity between two strings\"],simplexml_import_dom:[\"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\"Get a simplexml_element object from dom to allow for processing\"],simplexml_load_file:[\"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a filename and return a simplexml_element object to allow for processing\"],simplexml_load_string:[\"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a string and return a simplexml_element object to allow for processing\"],sin:[\"float sin(float number)\",\"Returns the sine of the number in radians\"],sinh:[\"float sinh(float number)\",\"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"],sleep:[\"void sleep(int seconds)\",\"Delay for a given number of seconds\"],smfi_addheader:[\"bool smfi_addheader(string headerf, string headerv)\",\"Adds a header to the current message.\"],smfi_addrcpt:[\"bool smfi_addrcpt(string rcpt)\",\"Add a recipient to the message envelope.\"],smfi_chgheader:[\"bool smfi_chgheader(string headerf, string headerv)\",\"Changes a header's value for the current message.\"],smfi_delrcpt:[\"bool smfi_delrcpt(string rcpt)\",\"Removes the named recipient from the current message's envelope.\"],smfi_getsymval:[\"string smfi_getsymval(string macro)\",\"Returns the value of the given macro or NULL if the macro is not defined.\"],smfi_replacebody:[\"bool smfi_replacebody(string body)\",\"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"],smfi_setflags:[\"void smfi_setflags(long flags)\",\"Sets the flags describing the actions the filter may take.\"],smfi_setreply:[\"bool smfi_setreply(string rcode, string xcode, string message)\",\"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"],smfi_settimeout:[\"void smfi_settimeout(long timeout)\",\"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"],snmp2_get:[\"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_getnext:[\"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_real_walk:[\"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmp2_set:[\"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmp2_walk:[\"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],snmp3_get:[\"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_getnext:[\"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_real_walk:[\"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_set:[\"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_walk:[\"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp_get_quick_print:[\"bool snmp_get_quick_print(void)\",\"Return the current status of quick_print\"],snmp_get_valueretrieval:[\"int snmp_get_valueretrieval()\",\"Return the method how the SNMP values will be returned\"],snmp_read_mib:[\"int snmp_read_mib(string filename)\",\"Reads and parses a MIB file into the active MIB tree.\"],snmp_set_enum_print:[\"void snmp_set_enum_print(int enum_print)\",\"Return all values that are enums with their enum value instead of the raw integer\"],snmp_set_oid_output_format:[\"void snmp_set_oid_output_format(int oid_format)\",\"Set the OID output format.\"],snmp_set_quick_print:[\"void snmp_set_quick_print(int quick_print)\",\"Return all objects including their respective object id withing the specified one\"],snmp_set_valueretrieval:[\"void snmp_set_valueretrieval(int method)\",\"Specify the method how the SNMP values will be returned\"],snmpget:[\"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmpgetnext:[\"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmprealwalk:[\"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmpset:[\"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmpwalk:[\"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],socket_accept:[\"resource socket_accept(resource socket)\",\"Accepts a connection on the listening socket fd\"],socket_bind:[\"bool socket_bind(resource socket, string addr [, int port])\",\"Binds an open socket to a listening port, port is only specified in AF_INET family.\"],socket_clear_error:[\"void socket_clear_error([resource socket])\",\"Clears the error on the socket or the last error code.\"],socket_close:[\"void socket_close(resource socket)\",\"Closes a file descriptor\"],socket_connect:[\"bool socket_connect(resource socket, string addr [, int port])\",\"Opens a connection to addr:port on the socket specified by socket\"],socket_create:[\"resource socket_create(int domain, int type, int protocol)\",\"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"],socket_create_listen:[\"resource socket_create_listen(int port[, int backlog])\",\"Opens a socket on port to accept connections\"],socket_create_pair:[\"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\"Creates a pair of indistinguishable sockets and stores them in fds.\"],socket_get_option:[\"mixed socket_get_option(resource socket, int level, int optname)\",\"Gets socket options for the socket\"],socket_getpeername:[\"bool socket_getpeername(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_getsockname:[\"bool socket_getsockname(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_last_error:[\"int socket_last_error([resource socket])\",\"Returns the last socket error (either the last used or the provided socket resource)\"],socket_listen:[\"bool socket_listen(resource socket[, int backlog])\",\"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"],socket_read:[\"string socket_read(resource socket, int length [, int type])\",\"Reads a maximum of length bytes from socket\"],socket_recv:[\"int socket_recv(resource socket, string &buf, int len, int flags)\",\"Receives data from a connected socket\"],socket_recvfrom:[\"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\"Receives data from a socket, connected or not\"],socket_select:[\"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"],socket_send:[\"int socket_send(resource socket, string buf, int len, int flags)\",\"Sends data to a connected socket\"],socket_sendto:[\"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\"Sends a message to a socket, whether it is connected or not\"],socket_set_block:[\"bool socket_set_block(resource socket)\",\"Sets blocking mode on a socket resource\"],socket_set_nonblock:[\"bool socket_set_nonblock(resource socket)\",\"Sets nonblocking mode on a socket resource\"],socket_set_option:[\"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\"Sets socket options for the socket\"],socket_shutdown:[\"bool socket_shutdown(resource socket[, int how])\",\"Shuts down a socket for receiving, sending, or both.\"],socket_strerror:[\"string socket_strerror(int errno)\",\"Returns a string describing an error\"],socket_write:[\"int socket_write(resource socket, string buf[, int length])\",\"Writes the buffer to the socket resource, length is optional\"],solid_fetch_prev:[\"bool solid_fetch_prev(resource result_id)\",\"\"],sort:[\"bool sort(array &array_arg [, int sort_flags])\",\"Sort an array\"],soundex:[\"string soundex(string str)\",\"Calculate the soundex key of a string\"],spl_autoload:[\"void spl_autoload(string class_name [, string file_extensions])\",\"Default implementation for __autoload()\"],spl_autoload_call:[\"void spl_autoload_call(string class_name)\",\"Try all registerd autoload function to load the requested class\"],spl_autoload_extensions:[\"string spl_autoload_extensions([string file_extensions])\",\"Register and return default file extensions for spl_autoload\"],spl_autoload_functions:[\"false|array spl_autoload_functions()\",\"Return all registered __autoload() functionns\"],spl_autoload_register:['bool spl_autoload_register([mixed autoload_function = \"spl_autoload\" [, throw = true [, prepend]]])',\"Register given function as __autoload() implementation\"],spl_autoload_unregister:[\"bool spl_autoload_unregister(mixed autoload_function)\",\"Unregister given function as __autoload() implementation\"],spl_classes:[\"array spl_classes()\",\"Return an array containing the names of all clsses and interfaces defined in SPL\"],spl_object_hash:[\"string spl_object_hash(object obj)\",\"Return hash id for given object\"],split:[\"array split(string pattern, string string [, int limit])\",\"Split string into array by regular expression\"],spliti:[\"array spliti(string pattern, string string [, int limit])\",\"Split string into array by regular expression case-insensitive\"],sprintf:[\"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\"Return a formatted string\"],sql_regcase:[\"string sql_regcase(string string)\",\"Make regular expression for case insensitive match\"],sqlite_array_query:[\"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\"Executes a query against a given database and returns an array of arrays.\"],sqlite_busy_timeout:[\"void sqlite_busy_timeout(resource db, int ms)\",\"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"],sqlite_changes:[\"int sqlite_changes(resource db)\",\"Returns the number of rows that were changed by the most recent SQL statement.\"],sqlite_close:[\"void sqlite_close(resource db)\",\"Closes an open sqlite database.\"],sqlite_column:[\"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\"Fetches a column from the current row of a result set.\"],sqlite_create_aggregate:[\"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\"Registers an aggregate function for queries.\"],sqlite_create_function:[\"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",'Registers a \"regular\" function for queries.'],sqlite_current:[\"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the current row from a result set as an array.\"],sqlite_error_string:[\"string sqlite_error_string(int error_code)\",\"Returns the textual description of an error code.\"],sqlite_escape_string:[\"string sqlite_escape_string(string item)\",\"Escapes a string for use as a query parameter.\"],sqlite_exec:[\"boolean sqlite_exec(string query, resource db[, string &error_message])\",\"Executes a result-less query against a given database\"],sqlite_factory:[\"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"],sqlite_fetch_all:[\"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\"Fetches all rows from a result set as an array of arrays.\"],sqlite_fetch_array:[\"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the next row from a result set as an array.\"],sqlite_fetch_column_types:[\"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\"Return an array of column types from a particular table.\"],sqlite_fetch_object:[\"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\"Fetches the next row from a result set as an object.\"],sqlite_fetch_single:[\"string sqlite_fetch_single(resource result [, bool decode_binary])\",\"Fetches the first column of a result set as a string.\"],sqlite_field_name:[\"string sqlite_field_name(resource result, int field_index)\",\"Returns the name of a particular field of a result set.\"],sqlite_has_prev:[\"bool sqlite_has_prev(resource result)\",\"* Returns whether a previous row is available.\"],sqlite_key:[\"int sqlite_key(resource result)\",\"Return the current row index of a buffered result.\"],sqlite_last_error:[\"int sqlite_last_error(resource db)\",\"Returns the error code of the last error for a database.\"],sqlite_last_insert_rowid:[\"int sqlite_last_insert_rowid(resource db)\",\"Returns the rowid of the most recently inserted row.\"],sqlite_libencoding:[\"string sqlite_libencoding()\",\"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"],sqlite_libversion:[\"string sqlite_libversion()\",\"Returns the version of the linked SQLite library.\"],sqlite_next:[\"bool sqlite_next(resource result)\",\"Seek to the next row number of a result set.\"],sqlite_num_fields:[\"int sqlite_num_fields(resource result)\",\"Returns the number of fields in a result set.\"],sqlite_num_rows:[\"int sqlite_num_rows(resource result)\",\"Returns the number of rows in a buffered result set.\"],sqlite_open:[\"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database. Will create the database if it does not exist.\"],sqlite_popen:[\"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"],sqlite_prev:[\"bool sqlite_prev(resource result)\",\"* Seek to the previous row number of a result set.\"],sqlite_query:[\"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\"Executes a query against a given database and returns a result handle.\"],sqlite_rewind:[\"bool sqlite_rewind(resource result)\",\"Seek to the first row number of a buffered result set.\"],sqlite_seek:[\"bool sqlite_seek(resource result, int row)\",\"Seek to a particular row number of a buffered result set.\"],sqlite_single_query:[\"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\"Executes a query and returns either an array for one single column or the value of the first row.\"],sqlite_udf_decode_binary:[\"string sqlite_udf_decode_binary(string data)\",\"Decode binary encoding on a string parameter passed to an UDF.\"],sqlite_udf_encode_binary:[\"string sqlite_udf_encode_binary(string data)\",\"Apply binary encoding (if required) to a string to return from an UDF.\"],sqlite_unbuffered_query:[\"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\"Executes a query that does not prefetch and buffer all data.\"],sqlite_valid:[\"bool sqlite_valid(resource result)\",\"Returns whether more rows are available.\"],sqrt:[\"float sqrt(float number)\",\"Returns the square root of the number\"],srand:[\"void srand([int seed])\",\"Seeds random number generator\"],sscanf:[\"mixed sscanf(string str, string format [, string ...])\",\"Implements an ANSI C compatible sscanf\"],stat:[\"array stat(string filename)\",\"Give information about a file\"],str_getcsv:[\"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\"Parse a CSV string into an array\"],str_ireplace:[\"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace / case-insensitive\"],str_pad:[\"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\"Returns input string padded on the left or right to specified length with pad_string\"],str_repeat:[\"string str_repeat(string input, int mult)\",\"Returns the input string repeat mult times\"],str_replace:[\"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace\"],str_rot13:[\"string str_rot13(string str)\",\"Perform the rot13 transform on a string\"],str_shuffle:[\"void str_shuffle(string str)\",\"Shuffles string. One permutation of all possible is created\"],str_split:[\"array str_split(string str [, int split_length])\",\"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"],str_word_count:[\"mixed str_word_count(string str, [int format [, string charlist]])\",'Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, \\'word\\' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \"\\'\" and \"-\" characters.'],strcasecmp:[\"int strcasecmp(string str1, string str2)\",\"Binary safe case-insensitive string comparison\"],strchr:[\"string strchr(string haystack, string needle)\",\"An alias for strstr\"],strcmp:[\"int strcmp(string str1, string str2)\",\"Binary safe string comparison\"],strcoll:[\"int strcoll(string str1, string str2)\",\"Compares two strings using the current locale\"],strcspn:[\"int strcspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"],stream_bucket_append:[\"void stream_bucket_append(resource brigade, resource bucket)\",\"Append bucket to brigade\"],stream_bucket_make_writeable:[\"object stream_bucket_make_writeable(resource brigade)\",\"Return a bucket object from the brigade for operating on\"],stream_bucket_new:[\"resource stream_bucket_new(resource stream, string buffer)\",\"Create a new bucket for use on the current stream\"],stream_bucket_prepend:[\"void stream_bucket_prepend(resource brigade, resource bucket)\",\"Prepend bucket to brigade\"],stream_context_create:[\"resource stream_context_create([array options[, array params]])\",\"Create a file context and optionally set parameters\"],stream_context_get_default:[\"resource stream_context_get_default([array options])\",\"Get a handle on the default file/stream context and optionally set parameters\"],stream_context_get_options:[\"array stream_context_get_options(resource context|resource stream)\",\"Retrieve options for a stream/wrapper/context\"],stream_context_get_params:[\"array stream_context_get_params(resource context|resource stream)\",\"Get parameters of a file context\"],stream_context_set_default:[\"resource stream_context_set_default(array options)\",\"Set default file/stream context, returns the context as a resource\"],stream_context_set_option:[\"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\"Set an option for a wrapper\"],stream_context_set_params:[\"bool stream_context_set_params(resource context|resource stream, array options)\",\"Set parameters for a file context\"],stream_copy_to_stream:[\"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\"Reads up to maxlen bytes from source stream and writes them to dest stream.\"],stream_filter_append:[\"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Append a filter to a stream\"],stream_filter_prepend:[\"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Prepend a filter to a stream\"],stream_filter_register:[\"bool stream_filter_register(string filtername, string classname)\",\"Registers a custom filter handler class\"],stream_filter_remove:[\"bool stream_filter_remove(resource stream_filter)\",\"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"],stream_get_contents:[\"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"],stream_get_filters:[\"array stream_get_filters(void)\",\"Returns a list of registered filters\"],stream_get_line:[\"string stream_get_line(resource stream, int maxlen [, string ending])\",\"Read up to maxlen bytes from a stream or until the ending string is found\"],stream_get_meta_data:[\"array stream_get_meta_data(resource fp)\",\"Retrieves header/meta data from streams/file pointers\"],stream_get_transports:[\"array stream_get_transports()\",\"Retrieves list of registered socket transports\"],stream_get_wrappers:[\"array stream_get_wrappers()\",\"Retrieves list of registered stream wrappers\"],stream_is_local:[\"bool stream_is_local(resource stream|string url)\",\"\"],stream_resolve_include_path:[\"string stream_resolve_include_path(string filename)\",\"Determine what file will be opened by calls to fopen() with a relative path\"],stream_select:[\"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"],stream_set_blocking:[\"bool stream_set_blocking(resource socket, int mode)\",\"Set blocking/non-blocking mode on a socket or stream\"],stream_set_timeout:[\"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\"Set timeout on stream read to seconds + microseonds\"],stream_set_write_buffer:[\"int stream_set_write_buffer(resource fp, int buffer)\",\"Set file write buffer\"],stream_socket_accept:[\"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\"Accept a client connection from a server socket\"],stream_socket_client:[\"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\"Open a client connection to a remote address\"],stream_socket_enable_crypto:[\"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\"Enable or disable a specific kind of crypto on the stream\"],stream_socket_get_name:[\"string stream_socket_get_name(resource stream, bool want_peer)\",\"Returns either the locally bound or remote name for a socket stream\"],stream_socket_pair:[\"array stream_socket_pair(int domain, int type, int protocol)\",\"Creates a pair of connected, indistinguishable socket streams\"],stream_socket_recvfrom:[\"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\"Receives data from a socket stream\"],stream_socket_sendto:[\"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"],stream_socket_server:[\"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\"Create a server socket bound to localaddress\"],stream_socket_shutdown:[\"int stream_socket_shutdown(resource stream, int how)\",\"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"],stream_supports_lock:[\"bool stream_supports_lock(resource stream)\",\"Tells whether the stream supports locking through flock().\"],stream_wrapper_register:[\"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\"Registers a custom URL protocol handler class\"],stream_wrapper_restore:[\"bool stream_wrapper_restore(string protocol)\",\"Restore the original protocol handler, overriding if necessary\"],stream_wrapper_unregister:[\"bool stream_wrapper_unregister(string protocol)\",\"Unregister a wrapper for the life of the current request.\"],strftime:[\"string strftime(string format [, int timestamp])\",\"Format a local time/date according to locale settings\"],strip_tags:[\"string strip_tags(string str [, string allowable_tags])\",\"Strips HTML and PHP tags from a string\"],stripcslashes:[\"string stripcslashes(string str)\",\"Strips backslashes from a string. Uses C-style conventions\"],stripos:[\"int stripos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another, case insensitive\"],stripslashes:[\"string stripslashes(string str)\",\"Strips backslashes from a string\"],stristr:[\"string stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another, case insensitive\"],strlen:[\"int strlen(string str)\",\"Get string length\"],strnatcasecmp:[\"int strnatcasecmp(string s1, string s2)\",\"Returns the result of case-insensitive string comparison using 'natural' algorithm\"],strnatcmp:[\"int strnatcmp(string s1, string s2)\",\"Returns the result of string comparison using 'natural' algorithm\"],strncasecmp:[\"int strncasecmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strncmp:[\"int strncmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strpbrk:[\"array strpbrk(string haystack, string char_list)\",\"Search a string for any of a set of characters\"],strpos:[\"int strpos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another\"],strptime:[\"string strptime(string timestamp, string format)\",\"Parse a time/date generated with strftime()\"],strrchr:[\"string strrchr(string haystack, string needle)\",\"Finds the last occurrence of a character in a string within another\"],strrev:[\"string strrev(string str)\",\"Reverse a string\"],strripos:[\"int strripos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strrpos:[\"int strrpos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strspn:[\"int strspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"],strstr:[\"string strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],strtok:[\"string strtok([string str,] string token)\",\"Tokenize a string\"],strtolower:[\"string strtolower(string str)\",\"Makes a string lowercase\"],strtotime:[\"int strtotime(string time [, int now ])\",\"Convert string representation of date and time to a timestamp\"],strtoupper:[\"string strtoupper(string str)\",\"Makes a string uppercase\"],strtr:[\"string strtr(string str, string from[, string to])\",\"Translates characters in str using given translation tables\"],strval:[\"string strval(mixed var)\",\"Get the string value of a variable\"],substr:[\"string substr(string str, int start [, int length])\",\"Returns part of a string\"],substr_compare:[\"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"],substr_count:[\"int substr_count(string haystack, string needle [, int offset [, int length]])\",\"Returns the number of times a substring occurs in the string\"],substr_replace:[\"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\"Replaces part of a string with another string\"],sybase_affected_rows:[\"int sybase_affected_rows([resource link_id])\",\"Get number of affected rows in last query\"],sybase_close:[\"bool sybase_close([resource link_id])\",\"Close Sybase connection\"],sybase_connect:[\"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\"Open Sybase server connection\"],sybase_data_seek:[\"bool sybase_data_seek(resource result, int offset)\",\"Move internal row pointer\"],sybase_deadlock_retry_count:[\"void sybase_deadlock_retry_count(int retry_count)\",\"Sets deadlock retry count\"],sybase_fetch_array:[\"array sybase_fetch_array(resource result)\",\"Fetch row as array\"],sybase_fetch_assoc:[\"array sybase_fetch_assoc(resource result)\",\"Fetch row as array without numberic indices\"],sybase_fetch_field:[\"object sybase_fetch_field(resource result [, int offset])\",\"Get field information\"],sybase_fetch_object:[\"object sybase_fetch_object(resource result [, mixed object])\",\"Fetch row as object\"],sybase_fetch_row:[\"array sybase_fetch_row(resource result)\",\"Get row as enumerated array\"],sybase_field_seek:[\"bool sybase_field_seek(resource result, int offset)\",\"Set field offset\"],sybase_free_result:[\"bool sybase_free_result(resource result)\",\"Free result memory\"],sybase_get_last_message:[\"string sybase_get_last_message(void)\",\"Returns the last message from server (over min_message_severity)\"],sybase_min_client_severity:[\"void sybase_min_client_severity(int severity)\",\"Sets minimum client severity\"],sybase_min_server_severity:[\"void sybase_min_server_severity(int severity)\",\"Sets minimum server severity\"],sybase_num_fields:[\"int sybase_num_fields(resource result)\",\"Get number of fields in result\"],sybase_num_rows:[\"int sybase_num_rows(resource result)\",\"Get number of rows in result\"],sybase_pconnect:[\"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\"Open persistent Sybase connection\"],sybase_query:[\"int sybase_query(string query [, resource link_id])\",\"Send Sybase query\"],sybase_result:[\"string sybase_result(resource result, int row, mixed field)\",\"Get result data\"],sybase_select_db:[\"bool sybase_select_db(string database [, resource link_id])\",\"Select Sybase database\"],sybase_set_message_handler:[\"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"],sybase_unbuffered_query:[\"int sybase_unbuffered_query(string query [, resource link_id])\",\"Send Sybase query\"],symlink:[\"int symlink(string target, string link)\",\"Create a symbolic link\"],sys_get_temp_dir:[\"string sys_get_temp_dir()\",\"Returns directory path used for temporary files\"],sys_getloadavg:[\"array sys_getloadavg()\",\"\"],syslog:[\"bool syslog(int priority, string message)\",\"Generate a system log message\"],system:[\"int system(string command [, int &return_value])\",\"Execute an external program and display output\"],tan:[\"float tan(float number)\",\"Returns the tangent of the number in radians\"],tanh:[\"float tanh(float number)\",\"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"],tempnam:[\"string tempnam(string dir, string prefix)\",\"Create a unique filename in a directory\"],textdomain:[\"string textdomain(string domain)\",'Set the textdomain to \"domain\". Returns the current domain'],tidy_access_count:[\"int tidy_access_count()\",\"Returns the Number of Tidy accessibility warnings encountered for specified document.\"],tidy_clean_repair:[\"boolean tidy_clean_repair()\",\"Execute configured cleanup and repair operations on parsed markup\"],tidy_config_count:[\"int tidy_config_count()\",\"Returns the Number of Tidy configuration errors encountered for specified document.\"],tidy_diagnose:[\"boolean tidy_diagnose()\",\"Run configured diagnostics on parsed and repaired markup.\"],tidy_error_count:[\"int tidy_error_count()\",\"Returns the Number of Tidy errors encountered for specified document.\"],tidy_get_body:[\"TidyNode tidy_get_body(resource tidy)\",\"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"],tidy_get_config:[\"array tidy_get_config()\",\"Get current Tidy configuarion\"],tidy_get_error_buffer:[\"string tidy_get_error_buffer([boolean detailed])\",\"Return warnings and errors which occured parsing the specified document\"],tidy_get_head:[\"TidyNode tidy_get_head()\",\"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"],tidy_get_html:[\"TidyNode tidy_get_html()\",\"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"],tidy_get_html_ver:[\"int tidy_get_html_ver()\",\"Get the Detected HTML version for the specified document.\"],tidy_get_opt_doc:[\"string tidy_get_opt_doc(tidy resource, string optname)\",\"Returns the documentation for the given option name\"],tidy_get_output:[\"string tidy_get_output()\",\"Return a string representing the parsed tidy markup\"],tidy_get_release:[\"string tidy_get_release()\",\"Get release date (version) for Tidy library\"],tidy_get_root:[\"TidyNode tidy_get_root()\",\"Returns a TidyNode Object representing the root of the tidy parse tree\"],tidy_get_status:[\"int tidy_get_status()\",\"Get status of specfied document.\"],tidy_getopt:[\"mixed tidy_getopt(string option)\",\"Returns the value of the specified configuration option for the tidy document.\"],tidy_is_xhtml:[\"boolean tidy_is_xhtml()\",\"Indicates if the document is a XHTML document.\"],tidy_is_xml:[\"boolean tidy_is_xml()\",\"Indicates if the document is a generic (non HTML/XHTML) XML document.\"],tidy_parse_file:[\"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\"Parse markup in file or URI\"],tidy_parse_string:[\"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\"Parse a document stored in a string\"],tidy_repair_file:[\"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\"Repair a file using an optionally provided configuration file\"],tidy_repair_string:[\"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\"Repair a string using an optionally provided configuration file\"],tidy_warning_count:[\"int tidy_warning_count()\",\"Returns the Number of Tidy warnings encountered for specified document.\"],time:[\"int time(void)\",\"Return current UNIX timestamp\"],time_nanosleep:[\"mixed time_nanosleep(long seconds, long nanoseconds)\",\"Delay for a number of seconds and nano seconds\"],time_sleep_until:[\"mixed time_sleep_until(float timestamp)\",\"Make the script sleep until the specified time\"],timezone_abbreviations_list:[\"array timezone_abbreviations_list()\",\"Returns associative array containing dst, offset and the timezone name\"],timezone_identifiers_list:[\"array timezone_identifiers_list([long what[, string country]])\",\"Returns numerically index array with all timezone identifiers.\"],timezone_location_get:[\"array timezone_location_get()\",\"Returns location information for a timezone, including country code, latitude/longitude and comments\"],timezone_name_from_abbr:[\"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\"Returns the timezone name from abbrevation\"],timezone_name_get:[\"string timezone_name_get(DateTimeZone object)\",\"Returns the name of the timezone.\"],timezone_offset_get:[\"long timezone_offset_get(DateTimeZone object, DateTime object)\",\"Returns the timezone offset.\"],timezone_open:[\"DateTimeZone timezone_open(string timezone)\",\"Returns new DateTimeZone object\"],timezone_transitions_get:[\"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"],timezone_version_get:[\"array timezone_version_get()\",\"Returns the Olson database version number.\"],tmpfile:[\"resource tmpfile(void)\",\"Create a temporary file that will be deleted automatically after use\"],token_get_all:[\"array token_get_all(string source)\",\"\"],token_name:[\"string token_name(int type)\",\"\"],touch:[\"bool touch(string filename [, int time [, int atime]])\",\"Set modification time of file\"],trigger_error:[\"void trigger_error(string messsage [, int error_type])\",\"Generates a user-level error/warning/notice message\"],trim:[\"string trim(string str [, string character_mask])\",\"Strips whitespace from the beginning and end of a string\"],uasort:[\"bool uasort(array array_arg, string cmp_function)\",\"Sort an array with a user-defined comparison function and maintain index association\"],ucfirst:[\"string ucfirst(string str)\",\"Make a string's first character lowercase\"],ucwords:[\"string ucwords(string str)\",\"Uppercase the first character of every word in a string\"],uksort:[\"bool uksort(array array_arg, string cmp_function)\",\"Sort an array by keys using a user-defined comparison function\"],umask:[\"int umask([int mask])\",\"Return or change the umask\"],uniqid:[\"string uniqid([string prefix [, bool more_entropy]])\",\"Generates a unique ID\"],unixtojd:[\"int unixtojd([int timestamp])\",\"Convert UNIX timestamp to Julian Day\"],unlink:[\"bool unlink(string filename[, context context])\",\"Delete a file\"],unpack:[\"array unpack(string format, string input)\",\"Unpack binary string into named array elements according to format argument\"],unregister_tick_function:[\"void unregister_tick_function(string function_name)\",\"Unregisters a tick callback function\"],unserialize:[\"mixed unserialize(string variable_representation)\",\"Takes a string representation of variable and recreates it\"],unset:[\"void unset (mixed var [, mixed var])\",\"Unset a given variable\"],urldecode:[\"string urldecode(string str)\",\"Decodes URL-encoded string\"],urlencode:[\"string urlencode(string str)\",\"URL-encodes string\"],usleep:[\"void usleep(int micro_seconds)\",\"Delay for a given number of micro seconds\"],usort:[\"bool usort(array array_arg, string cmp_function)\",\"Sort an array by values using a user-defined comparison function\"],utf8_decode:[\"string utf8_decode(string data)\",\"Converts a UTF-8 encoded string to ISO-8859-1\"],utf8_encode:[\"string utf8_encode(string data)\",\"Encodes an ISO-8859-1 string to UTF-8\"],var_dump:[\"void var_dump(mixed var)\",\"Dumps a string representation of variable to output\"],var_export:[\"mixed var_export(mixed var [, bool return])\",\"Outputs or returns a string representation of a variable\"],variant_abs:[\"mixed variant_abs(mixed left)\",\"Returns the absolute value of a variant\"],variant_add:[\"mixed variant_add(mixed left, mixed right)\",'\"Adds\" two variant values together and returns the result'],variant_and:[\"mixed variant_and(mixed left, mixed right)\",\"performs a bitwise AND operation between two variants and returns the result\"],variant_cast:[\"object variant_cast(object variant, int type)\",\"Convert a variant into a new variant object of another type\"],variant_cat:[\"mixed variant_cat(mixed left, mixed right)\",\"concatenates two variant values together and returns the result\"],variant_cmp:[\"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\"Compares two variants\"],variant_date_from_timestamp:[\"object variant_date_from_timestamp(int timestamp)\",\"Returns a variant date representation of a unix timestamp\"],variant_date_to_timestamp:[\"int variant_date_to_timestamp(object variant)\",\"Converts a variant date/time value to unix timestamp\"],variant_div:[\"mixed variant_div(mixed left, mixed right)\",\"Returns the result from dividing two variants\"],variant_eqv:[\"mixed variant_eqv(mixed left, mixed right)\",\"Performs a bitwise equivalence on two variants\"],variant_fix:[\"mixed variant_fix(mixed left)\",\"Returns the integer part ? of a variant\"],variant_get_type:[\"int variant_get_type(object variant)\",\"Returns the VT_XXX type code for a variant\"],variant_idiv:[\"mixed variant_idiv(mixed left, mixed right)\",\"Converts variants to integers and then returns the result from dividing them\"],variant_imp:[\"mixed variant_imp(mixed left, mixed right)\",\"Performs a bitwise implication on two variants\"],variant_int:[\"mixed variant_int(mixed left)\",\"Returns the integer portion of a variant\"],variant_mod:[\"mixed variant_mod(mixed left, mixed right)\",\"Divides two variants and returns only the remainder\"],variant_mul:[\"mixed variant_mul(mixed left, mixed right)\",\"multiplies the values of the two variants and returns the result\"],variant_neg:[\"mixed variant_neg(mixed left)\",\"Performs logical negation on a variant\"],variant_not:[\"mixed variant_not(mixed left)\",\"Performs bitwise not negation on a variant\"],variant_or:[\"mixed variant_or(mixed left, mixed right)\",\"Performs a logical disjunction on two variants\"],variant_pow:[\"mixed variant_pow(mixed left, mixed right)\",\"Returns the result of performing the power function with two variants\"],variant_round:[\"mixed variant_round(mixed left, int decimals)\",\"Rounds a variant to the specified number of decimal places\"],variant_set:[\"void variant_set(object variant, mixed value)\",\"Assigns a new value for a variant object\"],variant_set_type:[\"void variant_set_type(object variant, int type)\",'Convert a variant into another type.  Variant is modified \"in-place\"'],variant_sub:[\"mixed variant_sub(mixed left, mixed right)\",\"subtracts the value of the right variant from the left variant value and returns the result\"],variant_xor:[\"mixed variant_xor(mixed left, mixed right)\",\"Performs a logical exclusion on two variants\"],version_compare:[\"int version_compare(string ver1, string ver2 [, string oper])\",'Compares two \"PHP-standardized\" version number strings'],vfprintf:[\"int vfprintf(resource stream, string format, array args)\",\"Output a formatted string into a stream\"],virtual:[\"bool virtual(string filename)\",\"Perform an Apache sub-request\"],vprintf:[\"int vprintf(string format, array args)\",\"Output a formatted string\"],vsprintf:[\"string vsprintf(string format, array args)\",\"Return a formatted string\"],wddx_add_vars:[\"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\"Serializes given variables and adds them to packet given by packet_id\"],wddx_deserialize:[\"mixed wddx_deserialize(mixed packet)\",\"Deserializes given packet and returns a PHP value\"],wddx_packet_end:[\"string wddx_packet_end(resource packet_id)\",\"Ends specified WDDX packet and returns the string containing the packet\"],wddx_packet_start:[\"resource wddx_packet_start([string comment])\",\"Starts a WDDX packet with optional comment and returns the packet id\"],wddx_serialize_value:[\"string wddx_serialize_value(mixed var [, string comment])\",\"Creates a new packet and serializes the given value\"],wddx_serialize_vars:[\"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\"Creates a new packet and serializes given variables into a struct\"],wordwrap:[\"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\"Wraps buffer to selected number of characters using string break char\"],xml_error_string:[\"string xml_error_string(int code)\",\"Get XML parser error string\"],xml_get_current_byte_index:[\"int xml_get_current_byte_index(resource parser)\",\"Get current byte index for an XML parser\"],xml_get_current_column_number:[\"int xml_get_current_column_number(resource parser)\",\"Get current column number for an XML parser\"],xml_get_current_line_number:[\"int xml_get_current_line_number(resource parser)\",\"Get current line number for an XML parser\"],xml_get_error_code:[\"int xml_get_error_code(resource parser)\",\"Get XML parser error code\"],xml_parse:[\"int xml_parse(resource parser, string data [, int isFinal])\",\"Start parsing an XML document\"],xml_parse_into_struct:[\"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\"Parsing a XML document\"],xml_parser_create:[\"resource xml_parser_create([string encoding])\",\"Create an XML parser\"],xml_parser_create_ns:[\"resource xml_parser_create_ns([string encoding [, string sep]])\",\"Create an XML parser\"],xml_parser_free:[\"int xml_parser_free(resource parser)\",\"Free an XML parser\"],xml_parser_get_option:[\"int xml_parser_get_option(resource parser, int option)\",\"Get options from an XML parser\"],xml_parser_set_option:[\"int xml_parser_set_option(resource parser, int option, mixed value)\",\"Set options in an XML parser\"],xml_set_character_data_handler:[\"int xml_set_character_data_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_default_handler:[\"int xml_set_default_handler(resource parser, string hdl)\",\"Set up default handler\"],xml_set_element_handler:[\"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\"Set up start and end element handlers\"],xml_set_end_namespace_decl_handler:[\"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_external_entity_ref_handler:[\"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\"Set up external entity reference handler\"],xml_set_notation_decl_handler:[\"int xml_set_notation_decl_handler(resource parser, string hdl)\",\"Set up notation declaration handler\"],xml_set_object:[\"int xml_set_object(resource parser, object &obj)\",\"Set up object which should be used for callbacks\"],xml_set_processing_instruction_handler:[\"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\"Set up processing instruction (PI) handler\"],xml_set_start_namespace_decl_handler:[\"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_unparsed_entity_decl_handler:[\"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\"Set up unparsed entity declaration handler\"],xmlrpc_decode:[\"array xmlrpc_decode(string xml [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_decode_request:[\"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_encode:[\"string xmlrpc_encode(mixed value)\",\"Generates XML for a PHP value\"],xmlrpc_encode_request:[\"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\"Generates XML for a method request\"],xmlrpc_get_type:[\"string xmlrpc_get_type(mixed value)\",\"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"],xmlrpc_is_fault:[\"bool xmlrpc_is_fault(array)\",\"Determines if an array value represents an XMLRPC fault.\"],xmlrpc_parse_method_descriptions:[\"array xmlrpc_parse_method_descriptions(string xml)\",\"Decodes XML into a list of method descriptions\"],xmlrpc_server_add_introspection_data:[\"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\"Adds introspection documentation\"],xmlrpc_server_call_method:[\"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\"Parses XML requests and call methods\"],xmlrpc_server_create:[\"resource xmlrpc_server_create(void)\",\"Creates an xmlrpc server\"],xmlrpc_server_destroy:[\"int xmlrpc_server_destroy(resource server)\",\"Destroys server resources\"],xmlrpc_server_register_introspection_callback:[\"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\"Register a PHP function to generate documentation\"],xmlrpc_server_register_method:[\"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\"Register a PHP function to handle method matching method_name\"],xmlrpc_set_type:[\"bool xmlrpc_set_type(string value, string type)\",\"Sets xmlrpc type, base64 or datetime, for a PHP string value\"],xmlwriter_end_attribute:[\"bool xmlwriter_end_attribute(resource xmlwriter)\",\"End attribute - returns FALSE on error\"],xmlwriter_end_cdata:[\"bool xmlwriter_end_cdata(resource xmlwriter)\",\"End current CDATA - returns FALSE on error\"],xmlwriter_end_comment:[\"bool xmlwriter_end_comment(resource xmlwriter)\",\"Create end comment - returns FALSE on error\"],xmlwriter_end_document:[\"bool xmlwriter_end_document(resource xmlwriter)\",\"End current document - returns FALSE on error\"],xmlwriter_end_dtd:[\"bool xmlwriter_end_dtd(resource xmlwriter)\",\"End current DTD - returns FALSE on error\"],xmlwriter_end_dtd_attlist:[\"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\"End current DTD AttList - returns FALSE on error\"],xmlwriter_end_dtd_element:[\"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\"End current DTD element - returns FALSE on error\"],xmlwriter_end_dtd_entity:[\"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\"End current DTD Entity - returns FALSE on error\"],xmlwriter_end_element:[\"bool xmlwriter_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_end_pi:[\"bool xmlwriter_end_pi(resource xmlwriter)\",\"End current PI - returns FALSE on error\"],xmlwriter_flush:[\"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\"Output current buffer\"],xmlwriter_full_end_element:[\"bool xmlwriter_full_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_open_memory:[\"resource xmlwriter_open_memory()\",\"Create new xmlwriter using memory for string output\"],xmlwriter_open_uri:[\"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\"Create new xmlwriter using source uri for output\"],xmlwriter_output_memory:[\"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\"Output current buffer as string\"],xmlwriter_set_indent:[\"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\"Toggle indentation on/off - returns FALSE on error\"],xmlwriter_set_indent_string:[\"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\"Set string used for indenting - returns FALSE on error\"],xmlwriter_start_attribute:[\"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\"Create start attribute - returns FALSE on error\"],xmlwriter_start_attribute_ns:[\"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced attribute - returns FALSE on error\"],xmlwriter_start_cdata:[\"bool xmlwriter_start_cdata(resource xmlwriter)\",\"Create start CDATA tag - returns FALSE on error\"],xmlwriter_start_comment:[\"bool xmlwriter_start_comment(resource xmlwriter)\",\"Create start comment - returns FALSE on error\"],xmlwriter_start_document:[\"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\"Create document tag - returns FALSE on error\"],xmlwriter_start_dtd:[\"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\"Create start DTD tag - returns FALSE on error\"],xmlwriter_start_dtd_attlist:[\"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\"Create start DTD AttList - returns FALSE on error\"],xmlwriter_start_dtd_element:[\"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\"Create start DTD element - returns FALSE on error\"],xmlwriter_start_dtd_entity:[\"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\"Create start DTD Entity - returns FALSE on error\"],xmlwriter_start_element:[\"bool xmlwriter_start_element(resource xmlwriter, string name)\",\"Create start element tag - returns FALSE on error\"],xmlwriter_start_element_ns:[\"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced element tag - returns FALSE on error\"],xmlwriter_start_pi:[\"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\"Create start PI tag - returns FALSE on error\"],xmlwriter_text:[\"bool xmlwriter_text(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xmlwriter_write_attribute:[\"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\"Write full attribute - returns FALSE on error\"],xmlwriter_write_attribute_ns:[\"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\"Write full namespaced attribute - returns FALSE on error\"],xmlwriter_write_cdata:[\"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\"Write full CDATA tag - returns FALSE on error\"],xmlwriter_write_comment:[\"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\"Write full comment tag - returns FALSE on error\"],xmlwriter_write_dtd:[\"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\"Write full DTD tag - returns FALSE on error\"],xmlwriter_write_dtd_attlist:[\"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\"Write full DTD AttList tag - returns FALSE on error\"],xmlwriter_write_dtd_element:[\"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\"Write full DTD element tag - returns FALSE on error\"],xmlwriter_write_dtd_entity:[\"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\"Write full DTD Entity tag - returns FALSE on error\"],xmlwriter_write_element:[\"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\"Write full element tag - returns FALSE on error\"],xmlwriter_write_element_ns:[\"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\"Write full namesapced element tag - returns FALSE on error\"],xmlwriter_write_pi:[\"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\"Write full PI tag - returns FALSE on error\"],xmlwriter_write_raw:[\"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xsl_xsltprocessor_get_parameter:[\"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_has_exslt_support:[\"bool xsl_xsltprocessor_has_exslt_support();\",\"\"],xsl_xsltprocessor_import_stylesheet:[\"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_register_php_functions:[\"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\"\"],xsl_xsltprocessor_remove_parameter:[\"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_set_parameter:[\"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\"\"],xsl_xsltprocessor_set_profiling:[\"bool xsl_xsltprocessor_set_profiling(string filename) */\",'PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s!\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling'],xsl_xsltprocessor_transform_to_doc:[\"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_transform_to_uri:[\"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\"\"],xsl_xsltprocessor_transform_to_xml:[\"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\"\"],zend_logo_guid:[\"string zend_logo_guid(void)\",\"Return the special ID used to request the Zend logo in phpinfo screens\"],zend_version:[\"string zend_version(void)\",\"Get the version of the Zend Engine\"],zip_close:[\"void zip_close(resource zip)\",\"Close a Zip archive\"],zip_entry_close:[\"void zip_entry_close(resource zip_ent)\",\"Close a zip entry\"],zip_entry_compressedsize:[\"int zip_entry_compressedsize(resource zip_entry)\",\"Return the compressed size of a ZZip entry\"],zip_entry_compressionmethod:[\"string zip_entry_compressionmethod(resource zip_entry)\",\"Return a string containing the compression method used on a particular entry\"],zip_entry_filesize:[\"int zip_entry_filesize(resource zip_entry)\",\"Return the actual filesize of a ZZip entry\"],zip_entry_name:[\"string zip_entry_name(resource zip_entry)\",\"Return the name given a ZZip entry\"],zip_entry_open:[\"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\"Open a Zip File, pointed by the resource entry\"],zip_entry_read:[\"mixed zip_entry_read(resource zip_entry [, int len])\",\"Read from an open directory entry\"],zip_open:[\"resource zip_open(string filename)\",\"Create new zip using source uri for output\"],zip_read:[\"resource zip_read(resource zip)\",\"Returns the next file in the archive\"],zlib_get_coding_type:[\"string zlib_get_coding_type(void)\",\"Returns the coding type used for output compression\"]},i={$_COOKIE:{type:\"array\"},$_ENV:{type:\"array\"},$_FILES:{type:\"array\"},$_GET:{type:\"array\"},$_POST:{type:\"array\"},$_REQUEST:{type:\"array\"},$_SERVER:{type:\"array\",value:{DOCUMENT_ROOT:1,GATEWAY_INTERFACE:1,HTTP_ACCEPT:1,HTTP_ACCEPT_CHARSET:1,HTTP_ACCEPT_ENCODING:1,HTTP_ACCEPT_LANGUAGE:1,HTTP_CONNECTION:1,HTTP_HOST:1,HTTP_REFERER:1,HTTP_USER_AGENT:1,PATH_TRANSLATED:1,PHP_SELF:1,QUERY_STRING:1,REMOTE_ADDR:1,REMOTE_PORT:1,REQUEST_METHOD:1,REQUEST_URI:1,SCRIPT_FILENAME:1,SCRIPT_NAME:1,SERVER_ADMIN:1,SERVER_NAME:1,SERVER_PORT:1,SERVER_PROTOCOL:1,SERVER_SIGNATURE:1,SERVER_SOFTWARE:1}},$_SESSION:{type:\"array\"},$GLOBALS:{type:\"array\"}},o=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(i.type===\"support.php_tag\"&&i.value===\"<?\")return this.getTagCompletions(e,t,n,r);if(i.type===\"identifier\"){if(i.index>0){var o=t.getTokenAt(n.row,i.start);if(o.type===\"support.php_tag\")return this.getTagCompletions(e,t,n,r)}return this.getFunctionCompletions(e,t,n,r)}if(s(i,\"variable\"))return this.getVariableCompletions(e,t,n,r);var u=t.getLine(n.row).substr(0,n.column);return i.type===\"string\"&&/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(u)?this.getArrayKeyCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return[{caption:\"php\",value:\"php\",meta:\"php tag\",score:1e6},{caption:\"=\",value:\"=\",meta:\"php tag\",score:1e6}]},this.getFunctionCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\"($0)\",meta:\"php function\",score:1e6,docHTML:r[e][1]}})},this.getVariableCompletions=function(e,t,n,r){var s=Object.keys(i);return s.map(function(e){return{caption:e,value:e,meta:\"php variable\",score:1e6}})},this.getArrayKeyCompletions=function(e,t,n,r){var s=t.getLine(n.row).substr(0,n.column),o=s.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];if(!i[o])return[];var u=[];return i[o].type===\"array\"&&i[o].value&&(u=Object.keys(i[o].value)),u.map(function(e){return{caption:e,value:e,meta:\"php array key\",score:1e6}})}}).call(o.prototype),t.PhpCompletions=o}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./php_highlight_rules\").PhpHighlightRules,o=e(\"./php_highlight_rules\").PhpLangHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=e(\"../worker/worker_client\").WorkerClient,l=e(\"./php_completions\").PhpCompletions,c=e(\"./behaviour/cstyle\").CstyleBehaviour,h=e(\"./folding/cstyle\").FoldMode,p=e(\"../unicode\"),d=e(\"./html\").Mode,v=e(\"./javascript\").Mode,m=e(\"./css\").Mode,g=function(e){this.HighlightRules=o,this.$outdent=new u,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new h};r.inherits(g,i),function(){this.tokenRe=new RegExp(\"^[\"+p.wordChars+\"_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+p.wordChars+\"_]|\\\\s])+\",\"g\"),this.lineCommentStart=[\"//\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[:]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o!=\"doc-start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id=\"ace/mode/php-inline\"}.call(g.prototype);var y=function(e){if(e&&e.inline){var t=new g;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}d.call(this),this.HighlightRules=s,this.createModeDelegates({\"js-\":v,\"css-\":m,\"php-\":g}),this.foldingRules.subModes[\"php-\"]=new h};r.inherits(y,d),function(){this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/php_worker\",\"PhpWorker\");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call(\"setOptions\",[{inline:!0}]),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/php\"}.call(y.prototype),t.Mode=y}),define(\"ace/mode/php_laravel_blade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_laravel_blade_highlight_rules\",\"ace/mode/php\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./php_laravel_blade_highlight_rules\").PHPLaravelBladeHighlightRules,s=e(\"./php\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html\").Mode,f=function(){s.call(this),this.HighlightRules=i,this.createModeDelegates({\"js-\":o,\"css-\":u,\"html-\":a})};r.inherits(f,s),function(){this.$id=\"ace/mode/php_laravel_blade\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-pig.js",
    "content": "define(\"ace/mode/pig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.block.pig\",regex:/\\/\\*/,push:[{token:\"comment.block.pig\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.pig\"}]},{token:\"comment.line.double-dash.asciidoc\",regex:/--.*$/},{token:\"keyword.control.pig\",regex:/\\b(?:ASSERT|LOAD|STORE|DUMP|FILTER|DISTINCT|FOREACH|GENERATE|STREAM|JOIN|COGROUP|GROUP|CROSS|ORDER|LIMIT|UNION|SPLIT|DESCRIBE|EXPLAIN|ILLUSTRATE|AS|BY|INTO|USING|LIMIT|PARALLEL|OUTER|INNER|DEFAULT|LEFT|SAMPLE|RANK|CUBE|ALL|KILL|QUIT|MAPREDUCE|ASC|DESC|THROUGH|SHIP|CACHE|DECLARE|CASE|WHEN|THEN|END|IN|PARTITION|FULL|IMPORT|IF|ONSCHEMA|INPUT|OUTPUT)\\b/,caseInsensitive:!0},{token:\"storage.datatypes.pig\",regex:/\\b(?:int|long|float|double|chararray|bytearray|boolean|datetime|biginteger|bigdecimal|tuple|bag|map)\\b/,caseInsensitive:!0},{token:\"support.function.storage.pig\",regex:/\\b(?:PigStorage|BinStorage|BinaryStorage|PigDump|HBaseStorage|JsonLoader|JsonStorage|AvroStorage|TextLoader|PigStreaming|TrevniStorage|AccumuloStorage)\\b/},{token:\"support.function.udf.pig\",regex:/\\b(?:DIFF|TOBAG|TOMAP|TOP|TOTUPLE|RANDOM|FLATTEN|flatten|CUBE|ROLLUP|IsEmpty|ARITY|PluckTuple|SUBTRACT|BagToString)\\b/},{token:\"support.function.udf.math.pig\",regex:/\\b(?:ABS|ACOS|ASIN|ATAN|CBRT|CEIL|COS|COSH|EXP|FLOOR|LOG|LOG10|ROUND|ROUND_TO|SIN|SINH|SQRT|TAN|TANH|AVG|COUNT|COUNT_STAR|MAX|MIN|SUM|COR|COV)\\b/},{token:\"support.function.udf.string.pig\",regex:/\\b(?:CONCAT|INDEXOF|LAST_INDEX_OF|LCFIRST|LOWER|REGEX_EXTRACT|REGEX_EXTRACT_ALL|REPLACE|SIZE|STRSPLIT|SUBSTRING|TOKENIZE|TRIM|UCFIRST|UPPER|LTRIM|RTRIM|ENDSWITH|STARTSWITH|TRIM)\\b/},{token:\"support.function.udf.datetime.pig\",regex:/\\b(?:AddDuration|CurrentTime|DaysBetween|GetDay|GetHour|GetMilliSecond|GetMinute|GetMonth|GetSecond|GetWeek|GetWeekYear|GetYear|HoursBetween|MilliSecondsBetween|MinutesBetween|MonthsBetween|SecondsBetween|SubtractDuration|ToDate|WeeksBetween|YearsBetween|ToMilliSeconds|ToString|ToUnixTime)\\b/},{token:\"support.function.command.pig\",regex:/\\b(?:cat|cd|copyFromLocal|copyToLocal|cp|ls|mkdir|mv|pwd|rm)\\b/},{token:\"variable.pig\",regex:/\\$[a_zA-Z0-9_]+/},{token:\"constant.language.pig\",regex:/\\b(?:NULL|true|false|stdin|stdout|stderr)\\b/,caseInsensitive:!0},{token:\"constant.numeric.pig\",regex:/\\b\\d+(?:\\.\\d+)?\\b/},{token:\"keyword.operator.comparison.pig\",regex:/!=|==|<|>|<=|>=|\\b(?:MATCHES|IS|OR|AND|NOT)\\b/,caseInsensitive:!0},{token:\"keyword.operator.arithmetic.pig\",regex:/\\+|\\-|\\*|\\/|\\%|\\?|:|::|\\.\\.|#/},{token:\"string.quoted.double.pig\",regex:/\"/,push:[{token:\"string.quoted.double.pig\",regex:/\"/,next:\"pop\"},{token:\"constant.character.escape.pig\",regex:/\\\\./},{defaultToken:\"string.quoted.double.pig\"}]},{token:\"string.quoted.single.pig\",regex:/'/,push:[{token:\"string.quoted.single.pig\",regex:/'/,next:\"pop\"},{token:\"constant.character.escape.pig\",regex:/\\\\./},{defaultToken:\"string.quoted.single.pig\"}]},{todo:{token:[\"text\",\"keyword.parameter.pig\",\"text\",\"storage.type.parameter.pig\"],regex:/^(\\s*)(set)(\\s+)(\\S+)/,caseInsensitive:!0,push:[{token:\"text\",regex:/$/,next:\"pop\"},{include:\"$self\"}]}},{token:[\"text\",\"keyword.alias.pig\",\"text\",\"storage.type.alias.pig\"],regex:/(\\s*)(DEFINE|DECLARE|REGISTER)(\\s+)(\\S+)/,caseInsensitive:!0,push:[{token:\"text\",regex:/;?$/,next:\"pop\"}]}]},this.normalizeRules()};s.metaData={fileTypes:[\"pig\"],name:\"Pig\",scopeName:\"source.pig\"},r.inherits(s,i),t.PigHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/pig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pig_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./pig_highlight_rules\").PigHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/pig\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-plain_text.js",
    "content": "define(\"ace/mode/plain_text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./behaviour\").Behaviour,u=function(){this.HighlightRules=s,this.$behaviour=new o};r.inherits(u,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,n){return\"\"},this.$id=\"ace/mode/plain_text\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-powershell.js",
    "content": "define(\"ace/mode/powershell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"begin|break|catch|continue|data|do|dynamicparam|else|elseif|end|exit|filter|finally|for|foreach|from|function|if|in|inlinescript|hidden|parallel|param|process|return|sequence|switch|throw|trap|try|until|while|workflow\",t=\"Get-AppBackgroundTask|Start-AppBackgroundTask|Unregister-AppBackgroundTask|Disable-AppBackgroundTaskDiagnosticLog|Enable-AppBackgroundTaskDiagnosticLog|Set-AppBackgroundTaskResourcePolicy|Get-AppLockerFileInformation|Get-AppLockerPolicy|New-AppLockerPolicy|Set-AppLockerPolicy|Test-AppLockerPolicy|Get-AppxLastError|Get-AppxLog|Add-AppxPackage|Add-AppxVolume|Dismount-AppxVolume|Get-AppxDefaultVolume|Get-AppxPackage|Get-AppxPackageManifest|Get-AppxVolume|Mount-AppxVolume|Move-AppxPackage|Remove-AppxPackage|Remove-AppxVolume|Set-AppxDefaultVolume|Clear-AssignedAccess|Get-AssignedAccess|Set-AssignedAccess|Add-BitLockerKeyProtector|Backup-BitLockerKeyProtector|Clear-BitLockerAutoUnlock|Disable-BitLocker|Disable-BitLockerAutoUnlock|Enable-BitLocker|Enable-BitLockerAutoUnlock|Get-BitLockerVolume|Lock-BitLocker|Remove-BitLockerKeyProtector|Resume-BitLocker|Suspend-BitLocker|Unlock-BitLocker|Add-BitsFile|Complete-BitsTransfer|Get-BitsTransfer|Remove-BitsTransfer|Resume-BitsTransfer|Set-BitsTransfer|Start-BitsTransfer|Suspend-BitsTransfer|Add-BCDataCacheExtension|Clear-BCCache|Disable-BC|Disable-BCDowngrading|Disable-BCServeOnBattery|Enable-BCDistributed|Enable-BCDowngrading|Enable-BCHostedClient|Enable-BCHostedServer|Enable-BCLocal|Enable-BCServeOnBattery|Export-BCCachePackage|Export-BCSecretKey|Get-BCClientConfiguration|Get-BCContentServerConfiguration|Get-BCDataCache|Get-BCDataCacheExtension|Get-BCHashCache|Get-BCHostedCacheServerConfiguration|Get-BCNetworkConfiguration|Get-BCStatus|Import-BCCachePackage|Import-BCSecretKey|Publish-BCFileContent|Publish-BCWebContent|Remove-BCDataCacheExtension|Reset-BC|Set-BCAuthentication|Set-BCCache|Set-BCDataCacheEntryMaxAge|Set-BCMinSMBLatency|Set-BCSecretKey|Export-BinaryMiLog|Get-CimAssociatedInstance|Get-CimClass|Get-CimInstance|Get-CimSession|Import-BinaryMiLog|Invoke-CimMethod|New-CimInstance|New-CimSession|New-CimSessionOption|Register-CimIndicationEvent|Remove-CimInstance|Remove-CimSession|Set-CimInstance|ConvertFrom-CIPolicy|Add-SignerRule|Edit-CIPolicyRule|Get-CIPolicy|Get-CIPolicyInfo|Get-SystemDriver|Merge-CIPolicy|New-CIPolicy|New-CIPolicyRule|Remove-CIPolicyRule|Set-CIPolicyVersion|Set-HVCIOptions|Set-RuleOption|Add-MpPreference|Get-MpComputerStatus|Get-MpPreference|Get-MpThreat|Get-MpThreatCatalog|Get-MpThreatDetection|Remove-MpPreference|Remove-MpThreat|Set-MpPreference|Start-MpScan|Start-MpWDOScan|Update-MpSignature|Disable-DAManualEntryPointSelection|Enable-DAManualEntryPointSelection|Get-DAClientExperienceConfiguration|Get-DAEntryPointTableItem|New-DAEntryPointTableItem|Remove-DAEntryPointTableItem|Rename-DAEntryPointTableItem|Reset-DAClientExperienceConfiguration|Reset-DAEntryPointTableItem|Set-DAClientExperienceConfiguration|Set-DAEntryPointTableItem|Add-ProvisionedAppxPackage|Apply-WindowsUnattend|Get-ProvisionedAppxPackage|Remove-ProvisionedAppxPackage|Add-AppxProvisionedPackage|Add-WindowsCapability|Add-WindowsDriver|Add-WindowsImage|Add-WindowsPackage|Clear-WindowsCorruptMountPoint|Disable-WindowsOptionalFeature|Dismount-WindowsImage|Enable-WindowsOptionalFeature|Expand-WindowsCustomDataImage|Expand-WindowsImage|Export-WindowsDriver|Export-WindowsImage|Get-AppxProvisionedPackage|Get-WIMBootEntry|Get-WindowsCapability|Get-WindowsDriver|Get-WindowsEdition|Get-WindowsImage|Get-WindowsImageContent|Get-WindowsOptionalFeature|Get-WindowsPackage|Mount-WindowsImage|New-WindowsCustomImage|New-WindowsImage|Optimize-WindowsImage|Remove-AppxProvisionedPackage|Remove-WindowsCapability|Remove-WindowsDriver|Remove-WindowsImage|Remove-WindowsPackage|Repair-WindowsImage|Save-WindowsImage|Set-AppXProvisionedDataFile|Set-WindowsEdition|Set-WindowsProductKey|Split-WindowsImage|Update-WIMBootEntry|Use-WindowsUnattend|Add-DnsClientNrptRule|Clear-DnsClientCache|Get-DnsClient|Get-DnsClientCache|Get-DnsClientGlobalSetting|Get-DnsClientNrptGlobal|Get-DnsClientNrptPolicy|Get-DnsClientNrptRule|Get-DnsClientServerAddress|Register-DnsClient|Remove-DnsClientNrptRule|Set-DnsClient|Set-DnsClientGlobalSetting|Set-DnsClientNrptGlobal|Set-DnsClientNrptRule|Set-DnsClientServerAddress|Resolve-DnsName|Add-EtwTraceProvider|Get-AutologgerConfig|Get-EtwTraceProvider|Get-EtwTraceSession|New-AutologgerConfig|New-EtwTraceSession|Remove-AutologgerConfig|Remove-EtwTraceProvider|Remove-EtwTraceSession|Send-EtwTraceSession|Set-AutologgerConfig|Set-EtwTraceProvider|Set-EtwTraceSession|Get-WinAcceptLanguageFromLanguageListOptOut|Get-WinCultureFromLanguageListOptOut|Get-WinDefaultInputMethodOverride|Get-WinHomeLocation|Get-WinLanguageBarOption|Get-WinSystemLocale|Get-WinUILanguageOverride|Get-WinUserLanguageList|New-WinUserLanguageList|Set-Culture|Set-WinAcceptLanguageFromLanguageListOptOut|Set-WinCultureFromLanguageListOptOut|Set-WinDefaultInputMethodOverride|Set-WinHomeLocation|Set-WinLanguageBarOption|Set-WinSystemLocale|Set-WinUILanguageOverride|Set-WinUserLanguageList|Connect-IscsiTarget|Disconnect-IscsiTarget|Get-IscsiConnection|Get-IscsiSession|Get-IscsiTarget|Get-IscsiTargetPortal|New-IscsiTargetPortal|Register-IscsiSession|Remove-IscsiTargetPortal|Set-IscsiChapSecret|Unregister-IscsiSession|Update-IscsiTarget|Update-IscsiTargetPortal|Get-IseSnippet|Import-IseSnippet|New-IseSnippet|Add-KdsRootKey|Clear-KdsCache|Get-KdsConfiguration|Get-KdsRootKey|Set-KdsConfiguration|Test-KdsRootKey|Compress-Archive|Expand-Archive|Export-Counter|Get-Counter|Get-WinEvent|Import-Counter|New-WinEvent|Start-Transcript|Stop-Transcript|Add-Computer|Add-Content|Checkpoint-Computer|Clear-Content|Clear-EventLog|Clear-Item|Clear-ItemProperty|Clear-RecycleBin|Complete-Transaction|Convert-Path|Copy-Item|Copy-ItemProperty|Debug-Process|Disable-ComputerRestore|Enable-ComputerRestore|Get-ChildItem|Get-Clipboard|Get-ComputerRestorePoint|Get-Content|Get-ControlPanelItem|Get-EventLog|Get-HotFix|Get-Item|Get-ItemProperty|Get-ItemPropertyValue|Get-Location|Get-Process|Get-PSDrive|Get-PSProvider|Get-Service|Get-Transaction|Get-WmiObject|Invoke-Item|Invoke-WmiMethod|Join-Path|Limit-EventLog|Move-Item|Move-ItemProperty|New-EventLog|New-Item|New-ItemProperty|New-PSDrive|New-Service|New-WebServiceProxy|Pop-Location|Push-Location|Register-WmiEvent|Remove-Computer|Remove-EventLog|Remove-Item|Remove-ItemProperty|Remove-PSDrive|Remove-WmiObject|Rename-Computer|Rename-Item|Rename-ItemProperty|Reset-ComputerMachinePassword|Resolve-Path|Restart-Computer|Restart-Service|Restore-Computer|Resume-Service|Set-Clipboard|Set-Content|Set-Item|Set-ItemProperty|Set-Location|Set-Service|Set-WmiInstance|Show-ControlPanelItem|Show-EventLog|Split-Path|Start-Process|Start-Service|Start-Transaction|Stop-Computer|Stop-Process|Stop-Service|Suspend-Service|Test-ComputerSecureChannel|Test-Connection|Test-Path|Undo-Transaction|Use-Transaction|Wait-Process|Write-EventLog|Export-ODataEndpointProxy|ConvertFrom-SecureString|ConvertTo-SecureString|Get-Acl|Get-AuthenticodeSignature|Get-CmsMessage|Get-Credential|Get-ExecutionPolicy|Get-PfxCertificate|Protect-CmsMessage|Set-Acl|Set-AuthenticodeSignature|Set-ExecutionPolicy|Unprotect-CmsMessage|ConvertFrom-SddlString|Format-Hex|Get-FileHash|Import-PowerShellDataFile|New-Guid|New-TemporaryFile|Add-Member|Add-Type|Clear-Variable|Compare-Object|ConvertFrom-Csv|ConvertFrom-Json|ConvertFrom-String|ConvertFrom-StringData|Convert-String|ConvertTo-Csv|ConvertTo-Html|ConvertTo-Json|ConvertTo-Xml|Debug-Runspace|Disable-PSBreakpoint|Disable-RunspaceDebug|Enable-PSBreakpoint|Enable-RunspaceDebug|Export-Alias|Export-Clixml|Export-Csv|Export-FormatData|Export-PSSession|Format-Custom|Format-List|Format-Table|Format-Wide|Get-Alias|Get-Culture|Get-Date|Get-Event|Get-EventSubscriber|Get-FormatData|Get-Host|Get-Member|Get-PSBreakpoint|Get-PSCallStack|Get-Random|Get-Runspace|Get-RunspaceDebug|Get-TraceSource|Get-TypeData|Get-UICulture|Get-Unique|Get-Variable|Group-Object|Import-Alias|Import-Clixml|Import-Csv|Import-LocalizedData|Import-PSSession|Invoke-Expression|Invoke-RestMethod|Invoke-WebRequest|Measure-Command|Measure-Object|New-Alias|New-Event|New-Object|New-TimeSpan|New-Variable|Out-File|Out-GridView|Out-Printer|Out-String|Read-Host|Register-EngineEvent|Register-ObjectEvent|Remove-Event|Remove-PSBreakpoint|Remove-TypeData|Remove-Variable|Select-Object|Select-String|Select-Xml|Send-MailMessage|Set-Alias|Set-Date|Set-PSBreakpoint|Set-TraceSource|Set-Variable|Show-Command|Sort-Object|Start-Sleep|Tee-Object|Trace-Command|Unblock-File|Unregister-Event|Update-FormatData|Update-List|Update-TypeData|Wait-Debugger|Wait-Event|Write-Debug|Write-Error|Write-Host|Write-Information|Write-Output|Write-Progress|Write-Verbose|Write-Warning|Connect-WSMan|Disable-WSManCredSSP|Disconnect-WSMan|Enable-WSManCredSSP|Get-WSManCredSSP|Get-WSManInstance|Invoke-WSManAction|New-WSManInstance|New-WSManSessionOption|Remove-WSManInstance|Set-WSManInstance|Set-WSManQuickConfig|Test-WSMan|Debug-MMAppPrelaunch|Disable-MMAgent|Enable-MMAgent|Get-MMAgent|Set-MMAgent|Add-DtcClusterTMMapping|Get-Dtc|Get-DtcAdvancedHostSetting|Get-DtcAdvancedSetting|Get-DtcClusterDefault|Get-DtcClusterTMMapping|Get-DtcDefault|Get-DtcLog|Get-DtcNetworkSetting|Get-DtcTransaction|Get-DtcTransactionsStatistics|Get-DtcTransactionsTraceSession|Get-DtcTransactionsTraceSetting|Install-Dtc|Remove-DtcClusterTMMapping|Reset-DtcLog|Set-DtcAdvancedHostSetting|Set-DtcAdvancedSetting|Set-DtcClusterDefault|Set-DtcClusterTMMapping|Set-DtcDefault|Set-DtcLog|Set-DtcNetworkSetting|Set-DtcTransaction|Set-DtcTransactionsTraceSession|Set-DtcTransactionsTraceSetting|Start-Dtc|Start-DtcTransactionsTraceSession|Stop-Dtc|Stop-DtcTransactionsTraceSession|Test-Dtc|Uninstall-Dtc|Write-DtcTransactionsTraceSession|Complete-DtcDiagnosticTransaction|Join-DtcDiagnosticResourceManager|New-DtcDiagnosticTransaction|Receive-DtcDiagnosticTransaction|Send-DtcDiagnosticTransaction|Start-DtcDiagnosticResourceManager|Stop-DtcDiagnosticResourceManager|Undo-DtcDiagnosticTransaction|Disable-NetAdapter|Disable-NetAdapterBinding|Disable-NetAdapterChecksumOffload|Disable-NetAdapterEncapsulatedPacketTaskOffload|Disable-NetAdapterIPsecOffload|Disable-NetAdapterLso|Disable-NetAdapterPacketDirect|Disable-NetAdapterPowerManagement|Disable-NetAdapterQos|Disable-NetAdapterRdma|Disable-NetAdapterRsc|Disable-NetAdapterRss|Disable-NetAdapterSriov|Disable-NetAdapterVmq|Enable-NetAdapter|Enable-NetAdapterBinding|Enable-NetAdapterChecksumOffload|Enable-NetAdapterEncapsulatedPacketTaskOffload|Enable-NetAdapterIPsecOffload|Enable-NetAdapterLso|Enable-NetAdapterPacketDirect|Enable-NetAdapterPowerManagement|Enable-NetAdapterQos|Enable-NetAdapterRdma|Enable-NetAdapterRsc|Enable-NetAdapterRss|Enable-NetAdapterSriov|Enable-NetAdapterVmq|Get-NetAdapter|Get-NetAdapterAdvancedProperty|Get-NetAdapterBinding|Get-NetAdapterChecksumOffload|Get-NetAdapterEncapsulatedPacketTaskOffload|Get-NetAdapterHardwareInfo|Get-NetAdapterIPsecOffload|Get-NetAdapterLso|Get-NetAdapterPacketDirect|Get-NetAdapterPowerManagement|Get-NetAdapterQos|Get-NetAdapterRdma|Get-NetAdapterRsc|Get-NetAdapterRss|Get-NetAdapterSriov|Get-NetAdapterSriovVf|Get-NetAdapterStatistics|Get-NetAdapterVmq|Get-NetAdapterVmqQueue|Get-NetAdapterVPort|New-NetAdapterAdvancedProperty|Remove-NetAdapterAdvancedProperty|Rename-NetAdapter|Reset-NetAdapterAdvancedProperty|Restart-NetAdapter|Set-NetAdapter|Set-NetAdapterAdvancedProperty|Set-NetAdapterBinding|Set-NetAdapterChecksumOffload|Set-NetAdapterEncapsulatedPacketTaskOffload|Set-NetAdapterIPsecOffload|Set-NetAdapterLso|Set-NetAdapterPacketDirect|Set-NetAdapterPowerManagement|Set-NetAdapterQos|Set-NetAdapterRdma|Set-NetAdapterRsc|Set-NetAdapterRss|Set-NetAdapterSriov|Set-NetAdapterVmq|Get-NetConnectionProfile|Set-NetConnectionProfile|Add-NetEventNetworkAdapter|Add-NetEventPacketCaptureProvider|Add-NetEventProvider|Add-NetEventVmNetworkAdapter|Add-NetEventVmSwitch|Add-NetEventWFPCaptureProvider|Get-NetEventNetworkAdapter|Get-NetEventPacketCaptureProvider|Get-NetEventProvider|Get-NetEventSession|Get-NetEventVmNetworkAdapter|Get-NetEventVmSwitch|Get-NetEventWFPCaptureProvider|New-NetEventSession|Remove-NetEventNetworkAdapter|Remove-NetEventPacketCaptureProvider|Remove-NetEventProvider|Remove-NetEventSession|Remove-NetEventVmNetworkAdapter|Remove-NetEventVmSwitch|Remove-NetEventWFPCaptureProvider|Set-NetEventPacketCaptureProvider|Set-NetEventProvider|Set-NetEventSession|Set-NetEventWFPCaptureProvider|Start-NetEventSession|Stop-NetEventSession|Add-NetLbfoTeamMember|Add-NetLbfoTeamNic|Get-NetLbfoTeam|Get-NetLbfoTeamMember|Get-NetLbfoTeamNic|New-NetLbfoTeam|Remove-NetLbfoTeam|Remove-NetLbfoTeamMember|Remove-NetLbfoTeamNic|Rename-NetLbfoTeam|Set-NetLbfoTeam|Set-NetLbfoTeamMember|Set-NetLbfoTeamNic|Add-NetNatExternalAddress|Add-NetNatStaticMapping|Get-NetNat|Get-NetNatExternalAddress|Get-NetNatGlobal|Get-NetNatSession|Get-NetNatStaticMapping|New-NetNat|Remove-NetNat|Remove-NetNatExternalAddress|Remove-NetNatStaticMapping|Set-NetNat|Set-NetNatGlobal|Get-NetQosPolicy|New-NetQosPolicy|Remove-NetQosPolicy|Set-NetQosPolicy|Copy-NetFirewallRule|Copy-NetIPsecMainModeCryptoSet|Copy-NetIPsecMainModeRule|Copy-NetIPsecPhase1AuthSet|Copy-NetIPsecPhase2AuthSet|Copy-NetIPsecQuickModeCryptoSet|Copy-NetIPsecRule|Disable-NetFirewallRule|Disable-NetIPsecMainModeRule|Disable-NetIPsecRule|Enable-NetFirewallRule|Enable-NetIPsecMainModeRule|Enable-NetIPsecRule|Find-NetIPsecRule|Get-NetFirewallAddressFilter|Get-NetFirewallApplicationFilter|Get-NetFirewallInterfaceFilter|Get-NetFirewallInterfaceTypeFilter|Get-NetFirewallPortFilter|Get-NetFirewallProfile|Get-NetFirewallRule|Get-NetFirewallSecurityFilter|Get-NetFirewallServiceFilter|Get-NetFirewallSetting|Get-NetIPsecDospSetting|Get-NetIPsecMainModeCryptoSet|Get-NetIPsecMainModeRule|Get-NetIPsecMainModeSA|Get-NetIPsecPhase1AuthSet|Get-NetIPsecPhase2AuthSet|Get-NetIPsecQuickModeCryptoSet|Get-NetIPsecQuickModeSA|Get-NetIPsecRule|New-NetFirewallRule|New-NetIPsecDospSetting|New-NetIPsecMainModeCryptoSet|New-NetIPsecMainModeRule|New-NetIPsecPhase1AuthSet|New-NetIPsecPhase2AuthSet|New-NetIPsecQuickModeCryptoSet|New-NetIPsecRule|Open-NetGPO|Remove-NetFirewallRule|Remove-NetIPsecDospSetting|Remove-NetIPsecMainModeCryptoSet|Remove-NetIPsecMainModeRule|Remove-NetIPsecMainModeSA|Remove-NetIPsecPhase1AuthSet|Remove-NetIPsecPhase2AuthSet|Remove-NetIPsecQuickModeCryptoSet|Remove-NetIPsecQuickModeSA|Remove-NetIPsecRule|Rename-NetFirewallRule|Rename-NetIPsecMainModeCryptoSet|Rename-NetIPsecMainModeRule|Rename-NetIPsecPhase1AuthSet|Rename-NetIPsecPhase2AuthSet|Rename-NetIPsecQuickModeCryptoSet|Rename-NetIPsecRule|Save-NetGPO|Set-NetFirewallAddressFilter|Set-NetFirewallApplicationFilter|Set-NetFirewallInterfaceFilter|Set-NetFirewallInterfaceTypeFilter|Set-NetFirewallPortFilter|Set-NetFirewallProfile|Set-NetFirewallRule|Set-NetFirewallSecurityFilter|Set-NetFirewallServiceFilter|Set-NetFirewallSetting|Set-NetIPsecDospSetting|Set-NetIPsecMainModeCryptoSet|Set-NetIPsecMainModeRule|Set-NetIPsecPhase1AuthSet|Set-NetIPsecPhase2AuthSet|Set-NetIPsecQuickModeCryptoSet|Set-NetIPsecRule|Show-NetFirewallRule|Show-NetIPsecRule|Sync-NetIPsecRule|Update-NetIPsecRule|Get-DAPolicyChange|New-NetIPsecAuthProposal|New-NetIPsecMainModeCryptoProposal|New-NetIPsecQuickModeCryptoProposal|Add-NetSwitchTeamMember|Get-NetSwitchTeam|Get-NetSwitchTeamMember|New-NetSwitchTeam|Remove-NetSwitchTeam|Remove-NetSwitchTeamMember|Rename-NetSwitchTeam|Find-NetRoute|Get-NetCompartment|Get-NetIPAddress|Get-NetIPConfiguration|Get-NetIPInterface|Get-NetIPv4Protocol|Get-NetIPv6Protocol|Get-NetNeighbor|Get-NetOffloadGlobalSetting|Get-NetPrefixPolicy|Get-NetRoute|Get-NetTCPConnection|Get-NetTCPSetting|Get-NetTransportFilter|Get-NetUDPEndpoint|Get-NetUDPSetting|New-NetIPAddress|New-NetNeighbor|New-NetRoute|New-NetTransportFilter|Remove-NetIPAddress|Remove-NetNeighbor|Remove-NetRoute|Remove-NetTransportFilter|Set-NetIPAddress|Set-NetIPInterface|Set-NetIPv4Protocol|Set-NetIPv6Protocol|Set-NetNeighbor|Set-NetOffloadGlobalSetting|Set-NetRoute|Set-NetTCPSetting|Set-NetUDPSetting|Test-NetConnection|Get-DAConnectionStatus|Get-NCSIPolicyConfiguration|Reset-NCSIPolicyConfiguration|Set-NCSIPolicyConfiguration|Disable-NetworkSwitchEthernetPort|Disable-NetworkSwitchFeature|Disable-NetworkSwitchVlan|Enable-NetworkSwitchEthernetPort|Enable-NetworkSwitchFeature|Enable-NetworkSwitchVlan|Get-NetworkSwitchEthernetPort|Get-NetworkSwitchFeature|Get-NetworkSwitchGlobalData|Get-NetworkSwitchVlan|New-NetworkSwitchVlan|Remove-NetworkSwitchEthernetPortIPAddress|Remove-NetworkSwitchVlan|Restore-NetworkSwitchConfiguration|Save-NetworkSwitchConfiguration|Set-NetworkSwitchEthernetPortIPAddress|Set-NetworkSwitchPortMode|Set-NetworkSwitchPortProperty|Set-NetworkSwitchVlanProperty|Add-NetIPHttpsCertBinding|Disable-NetDnsTransitionConfiguration|Disable-NetIPHttpsProfile|Disable-NetNatTransitionConfiguration|Enable-NetDnsTransitionConfiguration|Enable-NetIPHttpsProfile|Enable-NetNatTransitionConfiguration|Get-Net6to4Configuration|Get-NetDnsTransitionConfiguration|Get-NetDnsTransitionMonitoring|Get-NetIPHttpsConfiguration|Get-NetIPHttpsState|Get-NetIsatapConfiguration|Get-NetNatTransitionConfiguration|Get-NetNatTransitionMonitoring|Get-NetTeredoConfiguration|Get-NetTeredoState|New-NetIPHttpsConfiguration|New-NetNatTransitionConfiguration|Remove-NetIPHttpsCertBinding|Remove-NetIPHttpsConfiguration|Remove-NetNatTransitionConfiguration|Rename-NetIPHttpsConfiguration|Reset-Net6to4Configuration|Reset-NetDnsTransitionConfiguration|Reset-NetIPHttpsConfiguration|Reset-NetIsatapConfiguration|Reset-NetTeredoConfiguration|Set-Net6to4Configuration|Set-NetDnsTransitionConfiguration|Set-NetIPHttpsConfiguration|Set-NetIsatapConfiguration|Set-NetNatTransitionConfiguration|Set-NetTeredoConfiguration|Find-Package|Find-PackageProvider|Get-Package|Get-PackageProvider|Get-PackageSource|Import-PackageProvider|Install-Package|Install-PackageProvider|Register-PackageSource|Save-Package|Set-PackageSource|Uninstall-Package|Unregister-PackageSource|Clear-PcsvDeviceLog|Get-PcsvDevice|Get-PcsvDeviceLog|Restart-PcsvDevice|Set-PcsvDeviceBootConfiguration|Set-PcsvDeviceNetworkConfiguration|Set-PcsvDeviceUserPassword|Start-PcsvDevice|Stop-PcsvDevice|AfterAll|AfterEach|Assert-MockCalled|Assert-VerifiableMocks|BeforeAll|BeforeEach|Context|Describe|Get-MockDynamicParameters|Get-TestDriveItem|In|InModuleScope|Invoke-Mock|Invoke-Pester|It|Mock|New-Fixture|Set-DynamicParameterVariables|Setup|Should|Add-CertificateEnrollmentPolicyServer|Export-Certificate|Export-PfxCertificate|Get-Certificate|Get-CertificateAutoEnrollmentPolicy|Get-CertificateEnrollmentPolicyServer|Get-CertificateNotificationTask|Get-PfxData|Import-Certificate|Import-PfxCertificate|New-CertificateNotificationTask|New-SelfSignedCertificate|Remove-CertificateEnrollmentPolicyServer|Remove-CertificateNotificationTask|Set-CertificateAutoEnrollmentPolicy|Switch-Certificate|Test-Certificate|Disable-PnpDevice|Enable-PnpDevice|Get-PnpDevice|Get-PnpDeviceProperty|Find-DscResource|Find-Module|Find-Script|Get-InstalledModule|Get-InstalledScript|Get-PSRepository|Install-Module|Install-Script|New-ScriptFileInfo|Publish-Module|Publish-Script|Register-PSRepository|Save-Module|Save-Script|Set-PSRepository|Test-ScriptFileInfo|Uninstall-Module|Uninstall-Script|Unregister-PSRepository|Update-Module|Update-ModuleManifest|Update-Script|Update-ScriptFileInfo|Add-Printer|Add-PrinterDriver|Add-PrinterPort|Get-PrintConfiguration|Get-Printer|Get-PrinterDriver|Get-PrinterPort|Get-PrinterProperty|Get-PrintJob|Read-PrinterNfcTag|Remove-Printer|Remove-PrinterDriver|Remove-PrinterPort|Remove-PrintJob|Rename-Printer|Restart-PrintJob|Resume-PrintJob|Set-PrintConfiguration|Set-Printer|Set-PrinterProperty|Suspend-PrintJob|Write-PrinterNfcTag|Configuration|Disable-DscDebug|Enable-DscDebug|Get-DscConfiguration|Get-DscConfigurationStatus|Get-DscLocalConfigurationManager|Get-DscResource|New-DscChecksum|Remove-DscConfigurationDocument|Restore-DscConfiguration|Stop-DscConfiguration|Invoke-DscResource|Publish-DscConfiguration|Set-DscLocalConfigurationManager|Start-DscConfiguration|Test-DscConfiguration|Update-DscConfiguration|Disable-PSTrace|Disable-PSWSManCombinedTrace|Disable-WSManTrace|Enable-PSTrace|Enable-PSWSManCombinedTrace|Enable-WSManTrace|Get-LogProperties|Set-LogProperties|Start-Trace|Stop-Trace|PSConsoleHostReadline|Get-PSReadlineKeyHandler|Get-PSReadlineOption|Remove-PSReadlineKeyHandler|Set-PSReadlineKeyHandler|Set-PSReadlineOption|Add-JobTrigger|Disable-JobTrigger|Disable-ScheduledJob|Enable-JobTrigger|Enable-ScheduledJob|Get-JobTrigger|Get-ScheduledJob|Get-ScheduledJobOption|New-JobTrigger|New-ScheduledJobOption|Register-ScheduledJob|Remove-JobTrigger|Set-JobTrigger|Set-ScheduledJob|Set-ScheduledJobOption|Unregister-ScheduledJob|New-PSWorkflowSession|New-PSWorkflowExecutionOption|Invoke-AsWorkflow|Disable-ScheduledTask|Enable-ScheduledTask|Export-ScheduledTask|Get-ClusteredScheduledTask|Get-ScheduledTask|Get-ScheduledTaskInfo|New-ScheduledTask|New-ScheduledTaskAction|New-ScheduledTaskPrincipal|New-ScheduledTaskSettingsSet|New-ScheduledTaskTrigger|Register-ClusteredScheduledTask|Register-ScheduledTask|Set-ClusteredScheduledTask|Set-ScheduledTask|Start-ScheduledTask|Stop-ScheduledTask|Unregister-ClusteredScheduledTask|Unregister-ScheduledTask|Confirm-SecureBootUEFI|Format-SecureBootUEFI|Get-SecureBootPolicy|Get-SecureBootUEFI|Set-SecureBootUEFI|Block-SmbShareAccess|Close-SmbOpenFile|Close-SmbSession|Disable-SmbDelegation|Enable-SmbDelegation|Get-SmbBandwidthLimit|Get-SmbClientConfiguration|Get-SmbClientNetworkInterface|Get-SmbConnection|Get-SmbDelegation|Get-SmbMapping|Get-SmbMultichannelConnection|Get-SmbMultichannelConstraint|Get-SmbOpenFile|Get-SmbServerConfiguration|Get-SmbServerNetworkInterface|Get-SmbSession|Get-SmbShare|Get-SmbShareAccess|Grant-SmbShareAccess|New-SmbMapping|New-SmbMultichannelConstraint|New-SmbShare|Remove-SmbBandwidthLimit|Remove-SmbMapping|Remove-SmbMultichannelConstraint|Remove-SmbShare|Revoke-SmbShareAccess|Set-SmbBandwidthLimit|Set-SmbClientConfiguration|Set-SmbPathAcl|Set-SmbServerConfiguration|Set-SmbShare|Unblock-SmbShareAccess|Update-SmbMultichannelConnection|Move-SmbClient|Get-SmbWitnessClient|Move-SmbWitnessClient|Get-StartApps|Export-StartLayout|Import-StartLayout|Disable-PhysicalDiskIndication|Disable-StorageDiagnosticLog|Enable-PhysicalDiskIndication|Enable-StorageDiagnosticLog|Flush-Volume|Get-DiskSNV|Get-PhysicalDiskSNV|Get-StorageEnclosureSNV|Initialize-Volume|Write-FileSystemCache|Add-InitiatorIdToMaskingSet|Add-PartitionAccessPath|Add-PhysicalDisk|Add-TargetPortToMaskingSet|Add-VirtualDiskToMaskingSet|Block-FileShareAccess|Clear-Disk|Clear-FileStorageTier|Clear-StorageDiagnosticInfo|Connect-VirtualDisk|Debug-FileShare|Debug-StorageSubSystem|Debug-Volume|Disable-PhysicalDiskIdentification|Disable-StorageEnclosureIdentification|Disable-StorageHighAvailability|Disconnect-VirtualDisk|Dismount-DiskImage|Enable-PhysicalDiskIdentification|Enable-StorageEnclosureIdentification|Enable-StorageHighAvailability|Format-Volume|Get-DedupProperties|Get-Disk|Get-DiskImage|Get-DiskStorageNodeView|Get-FileIntegrity|Get-FileShare|Get-FileShareAccessControlEntry|Get-FileStorageTier|Get-InitiatorId|Get-InitiatorPort|Get-MaskingSet|Get-OffloadDataTransferSetting|Get-Partition|Get-PartitionSupportedSize|Get-PhysicalDisk|Get-PhysicalDiskStorageNodeView|Get-ResiliencySetting|Get-StorageAdvancedProperty|Get-StorageDiagnosticInfo|Get-StorageEnclosure|Get-StorageEnclosureStorageNodeView|Get-StorageEnclosureVendorData|Get-StorageFaultDomain|Get-StorageFileServer|Get-StorageFirmwareInformation|Get-StorageHealthAction|Get-StorageHealthReport|Get-StorageHealthSetting|Get-StorageJob|Get-StorageNode|Get-StoragePool|Get-StorageProvider|Get-StorageReliabilityCounter|Get-StorageSetting|Get-StorageSubSystem|Get-StorageTier|Get-StorageTierSupportedSize|Get-SupportedClusterSizes|Get-SupportedFileSystems|Get-TargetPort|Get-TargetPortal|Get-VirtualDisk|Get-VirtualDiskSupportedSize|Get-Volume|Get-VolumeCorruptionCount|Get-VolumeScrubPolicy|Grant-FileShareAccess|Hide-VirtualDisk|Initialize-Disk|Mount-DiskImage|New-FileShare|New-MaskingSet|New-Partition|New-StorageFileServer|New-StoragePool|New-StorageSubsystemVirtualDisk|New-StorageTier|New-VirtualDisk|New-VirtualDiskClone|New-VirtualDiskSnapshot|New-Volume|Optimize-StoragePool|Optimize-Volume|Register-StorageSubsystem|Remove-FileShare|Remove-InitiatorId|Remove-InitiatorIdFromMaskingSet|Remove-MaskingSet|Remove-Partition|Remove-PartitionAccessPath|Remove-PhysicalDisk|Remove-StorageFileServer|Remove-StorageHealthSetting|Remove-StoragePool|Remove-StorageTier|Remove-TargetPortFromMaskingSet|Remove-VirtualDisk|Remove-VirtualDiskFromMaskingSet|Rename-MaskingSet|Repair-FileIntegrity|Repair-VirtualDisk|Repair-Volume|Reset-PhysicalDisk|Reset-StorageReliabilityCounter|Resize-Partition|Resize-StorageTier|Resize-VirtualDisk|Revoke-FileShareAccess|Set-Disk|Set-FileIntegrity|Set-FileShare|Set-FileStorageTier|Set-InitiatorPort|Set-Partition|Set-PhysicalDisk|Set-ResiliencySetting|Set-StorageFileServer|Set-StorageHealthSetting|Set-StoragePool|Set-StorageProvider|Set-StorageSetting|Set-StorageSubSystem|Set-StorageTier|Set-VirtualDisk|Set-Volume|Set-VolumeScrubPolicy|Show-VirtualDisk|Start-StorageDiagnosticLog|Stop-StorageDiagnosticLog|Stop-StorageJob|Unblock-FileShareAccess|Unregister-StorageSubsystem|Update-Disk|Update-HostStorageCache|Update-StorageFirmware|Update-StoragePool|Update-StorageProviderCache|Write-VolumeCache|Disable-TlsCipherSuite|Disable-TlsSessionTicketKey|Enable-TlsCipherSuite|Enable-TlsSessionTicketKey|Export-TlsSessionTicketKey|Get-TlsCipherSuite|New-TlsSessionTicketKey|Get-TroubleshootingPack|Invoke-TroubleshootingPack|Clear-Tpm|ConvertTo-TpmOwnerAuth|Disable-TpmAutoProvisioning|Enable-TpmAutoProvisioning|Get-Tpm|Get-TpmEndorsementKeyInfo|Get-TpmSupportedFeature|Import-TpmOwnerAuth|Initialize-Tpm|Set-TpmOwnerAuth|Unblock-Tpm|Add-VpnConnection|Add-VpnConnectionRoute|Add-VpnConnectionTriggerApplication|Add-VpnConnectionTriggerDnsConfiguration|Add-VpnConnectionTriggerTrustedNetwork|Get-VpnConnection|Get-VpnConnectionTrigger|New-EapConfiguration|New-VpnServerAddress|Remove-VpnConnection|Remove-VpnConnectionRoute|Remove-VpnConnectionTriggerApplication|Remove-VpnConnectionTriggerDnsConfiguration|Remove-VpnConnectionTriggerTrustedNetwork|Set-VpnConnection|Set-VpnConnectionIPsecConfiguration|Set-VpnConnectionProxy|Set-VpnConnectionTriggerDnsConfiguration|Set-VpnConnectionTriggerTrustedNetwork|Add-OdbcDsn|Disable-OdbcPerfCounter|Disable-WdacBidTrace|Enable-OdbcPerfCounter|Enable-WdacBidTrace|Get-OdbcDriver|Get-OdbcDsn|Get-OdbcPerfCounter|Get-WdacBidTrace|Remove-OdbcDsn|Set-OdbcDriver|Set-OdbcDsn|Get-WindowsDeveloperLicense|Show-WindowsDeveloperLicenseRegistration|Unregister-WindowsDeveloperLicense|Disable-WindowsErrorReporting|Enable-WindowsErrorReporting|Get-WindowsErrorReporting|Get-WindowsSearchSetting|Set-WindowsSearchSetting|Get-WindowsUpdateLog\",n=this.createKeywordMapper({\"support.function\":t,keyword:e},\"identifier\"),r=\"eq|ne|gt|lt|le|ge|like|notlike|match|notmatch|contains|notcontains|in|notin|band|bor|bxor|bnot|ceq|cne|cgt|clt|cle|cge|clike|cnotlike|cmatch|cnotmatch|ccontains|cnotcontains|cin|cnotin|ieq|ine|igt|ilt|ile|ige|ilike|inotlike|imatch|inotmatch|icontains|inotcontains|iin|inotin|and|or|xor|not|split|join|replace|f|csplit|creplace|isplit|ireplace|is|isnot|as|shl|shr\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment.start\",regex:\"<#\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"[$](?:[Tt]rue|[Ff]alse)\\\\b\"},{token:\"constant.language\",regex:\"[$][Nn]ull\\\\b\"},{token:\"variable.instance\",regex:\"[$][a-zA-Z][a-zA-Z0-9_]*\\\\b\"},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\-(?:\"+r+\")\"},{token:\"keyword.operator\",regex:\"&|\\\\+|\\\\-|\\\\*|\\\\/|\\\\%|\\\\=|\\\\>|\\\\&|\\\\!|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment.end\",regex:\"#>\",next:\"start\"},{token:\"doc.comment.tag\",regex:\"^\\\\.\\\\w+\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.PowershellHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/powershell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/powershell_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./powershell_highlight_rules\").PowershellHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a({start:\"^\\\\s*(<#)\",end:\"^[#\\\\s]>\\\\s*$\"})};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.blockComment={start:\"<#\",end:\"#>\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null},this.$id=\"ace/mode/powershell\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-praat.js",
    "content": "define(\"ace/mode/praat_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"if|then|else|elsif|elif|endif|fi|endfor|endproc|while|endwhile|repeat|until|select|plus|minus|assert|asserterror\",t=\"macintosh|windows|unix|praatVersion|praatVersion\\\\$pi|undefined|newline\\\\$|tab\\\\$|shellDirectory\\\\$|homeDirectory\\\\$|preferencesDirectory\\\\$|temporaryDirectory\\\\$|defaultDirectory\\\\$\",n=\"clearinfo|endSendPraat\",r=\"writeInfo|writeInfoLine|appendInfo|appendInfoLine|info\\\\$|writeFile|writeFileLine|appendFile|appendFileLine|abs|round|floor|ceiling|min|max|imin|imax|sqrt|sin|cos|tan|arcsin|arccos|arctan|arctan2|sinc|sincpi|exp|ln|lnBeta|lnGamma|log10|log2|sinh|cosh|tanh|arcsinh|arccosh|arctanh|sigmoid|invSigmoid|erf|erfc|random(?:Uniform|Integer|Gauss|Poisson|Binomial)|gaussP|gaussQ|invGaussQ|incompleteGammaP|incompleteBeta|chiSquareP|chiSquareQ|invChiSquareQ|studentP|studentQ|invStudentQ|fisherP|fisherQ|invFisherQ|binomialP|binomialQ|invBinomialP|invBinomialQ|hertzToBark|barkToHerz|hertzToMel|melToHertz|hertzToSemitones|semitonesToHerz|erb|hertzToErb|erbToHertz|phonToDifferenceLimens|differenceLimensToPhon|soundPressureToPhon|beta|beta2|besselI|besselK|numberOfColumns|numberOfRows|selected|selected\\\\$|numberOfSelected|variableExists|index|rindex|startsWith|endsWith|index_regex|rindex_regex|replace_regex\\\\$|length|extractWord\\\\$|extractLine\\\\$|extractNumber|left\\\\$|right\\\\$|mid\\\\$|replace\\\\$|date\\\\$|fixed\\\\$|percent\\\\$|zero#|linear#|randomUniform#|randomInteger#|randomGauss#|beginPause|endPause|demoShow|demoWindowTitle|demoInput|demoWaitForInput|demoClicked|demoClickedIn|demoX|demoY|demoKeyPressed|demoKey\\\\$|demoExtraControlKeyPressed|demoShiftKeyPressed|demoCommandKeyPressed|demoOptionKeyPressed|environment\\\\$|chooseReadFile\\\\$|chooseDirectory\\\\$|createDirectory|fileReadable|deleteFile|selectObject|removeObject|plusObject|minusObject|runScript|exitScript|beginSendPraat|endSendPraat|objectsAreIdentical\",i=\"Activation|AffineTransform|AmplitudeTier|Art|Artword|Autosegment|BarkFilter|CCA|Categories|Cepstrum|Cepstrumc|ChebyshevSeries|ClassificationTable|Cochleagram|Collection|Configuration|Confusion|ContingencyTable|Corpus|Correlation|Covariance|CrossCorrelationTable|CrossCorrelationTables|DTW|Diagonalizer|Discriminant|Dissimilarity|Distance|Distributions|DurationTier|EEG|ERP|ERPTier|Eigen|Excitation|Excitations|ExperimentMFC|FFNet|FeatureWeights|Formant|FormantFilter|FormantGrid|FormantPoint|FormantTier|GaussianMixture|HMM|HMM_Observation|HMM_ObservationSequence|HMM_State|HMM_StateSequence|Harmonicity|ISpline|Index|Intensity|IntensityTier|IntervalTier|KNN|KlattGrid|KlattTable|LFCC|LPC|Label|LegendreSeries|LinearRegression|LogisticRegression|LongSound|Ltas|MFCC|MSpline|ManPages|Manipulation|Matrix|MelFilter|MixingMatrix|Movie|Network|OTGrammar|OTHistory|OTMulti|PCA|PairDistribution|ParamCurve|Pattern|Permutation|Pitch|PitchTier|PointProcess|Polygon|Polynomial|Procrustes|RealPoint|RealTier|ResultsMFC|Roots|SPINET|SSCP|SVD|Salience|ScalarProduct|Similarity|SimpleString|SortedSetOfString|Sound|Speaker|Spectrogram|Spectrum|SpectrumTier|SpeechSynthesizer|SpellingChecker|Strings|StringsIndex|Table|TableOfReal|TextGrid|TextInterval|TextPoint|TextTier|Tier|Transition|VocalTract|Weight|WordList\";this.$rules={start:[{token:\"string.interpolated\",regex:/'((?:\\.?[a-z][a-zA-Z0-9_.]*)(?:\\$|#|:[0-9]+)?)'/},{token:[\"text\",\"text\",\"keyword.operator\",\"text\",\"keyword\"],regex:/(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(stopwatch)/},{token:[\"text\",\"keyword\",\"text\",\"string\"],regex:/(^\\s*)(print(?:line|tab)?|echo|exit|pause|send(?:praat|socket)|include|execute|system(?:_nocheck)?)(\\s+)(.*)/},{token:[\"text\",\"keyword\"],regex:\"(^\\\\s*)(\"+n+\")$\"},{token:[\"text\",\"keyword.operator\",\"text\"],regex:/(\\s+)((?:\\+|-|\\/|\\*|<|>)=?|==?|!=|%|\\^|\\||and|or|not)(\\s+)/},{token:[\"text\",\"text\",\"keyword.operator\",\"text\",\"keyword\",\"text\",\"keyword\"],regex:/(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(?:((?:no)?warn|(?:unix_)?nocheck|noprogress)(\\s+))?((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/},{token:[\"text\",\"keyword\",\"text\",\"keyword\"],regex:/(^\\s*)((?:no(?:warn|check))?)(\\s*)(\\b(?:editor(?::?)|endeditor)\\b)/},{token:[\"text\",\"keyword\",\"text\",\"keyword\"],regex:/(^\\s*)(?:(demo)?(\\s+))((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/},{token:[\"text\",\"keyword\",\"text\",\"keyword\"],regex:/^(\\s*)(?:(demo)(\\s+))?(10|12|14|16|24)$/},{token:[\"text\",\"support.function\",\"text\"],regex:/(\\s*)(do\\$?)(\\s*:\\s*|\\s*\\(\\s*)/},{token:\"entity.name.type\",regex:\"(\"+i+\")\"},{token:\"variable.language\",regex:\"(\"+t+\")\"},{token:[\"support.function\",\"text\"],regex:\"((?:\"+r+\")\\\\$?)(\\\\s*(?::|\\\\())\"},{token:\"keyword\",regex:/(\\bfor\\b)/,next:\"for\"},{token:\"keyword\",regex:\"(\\\\b(?:\"+e+\")\\\\b)\"},{token:\"string\",regex:/\"[^\"]*\"/},{token:\"string\",regex:/\"[^\"]*$/,next:\"brokenstring\"},{token:[\"text\",\"keyword\",\"text\",\"entity.name.section\"],regex:/(^\\s*)(\\bform\\b)(\\s+)(.*)/,next:\"form\"},{token:\"constant.numeric\",regex:/\\b[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"keyword\",\"text\",\"entity.name.function\"],regex:/(procedure)(\\s+)([^:\\s]+)/},{token:[\"entity.name.function\",\"text\"],regex:/(@\\S+)(:|\\s*\\()/},{token:[\"text\",\"keyword\",\"text\",\"entity.name.function\"],regex:/(^\\s*)(call)(\\s+)(\\S+)/},{token:\"comment\",regex:/(^\\s*#|;).*$/},{token:\"text\",regex:/\\s+/}],form:[{token:[\"keyword\",\"text\",\"constant.numeric\"],regex:/((?:optionmenu|choice)\\s+)(\\S+:\\s+)([0-9]+)/},{token:[\"keyword\",\"constant.numeric\"],regex:/((?:option|button)\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/},{token:[\"keyword\",\"string\"],regex:/((?:option|button)\\s+)(.*)/},{token:[\"keyword\",\"text\",\"string\"],regex:/((?:sentence|text)\\s+)(\\S+\\s*)(.*)/},{token:[\"keyword\",\"text\",\"string\",\"invalid.illegal\"],regex:/(word\\s+)(\\S+\\s*)(\\S+)?(\\s.*)?/},{token:[\"keyword\",\"text\",\"constant.language\"],regex:/(boolean\\s+)(\\S+\\s*)(0|1|\"?(?:yes|no)\"?)/},{token:[\"keyword\",\"text\",\"constant.numeric\"],regex:/((?:real|natural|positive|integer)\\s+)(\\S+\\s*)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/},{token:[\"keyword\",\"string\"],regex:/(comment\\s+)(.*)/},{token:\"keyword\",regex:\"endform\",next:\"start\"}],\"for\":[{token:[\"keyword\",\"text\",\"constant.numeric\",\"text\"],regex:/(from|to)(\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?)(\\s*)/},{token:[\"keyword\",\"text\"],regex:/(from|to)(\\s+\\S+\\s*)/},{token:\"text\",regex:/$/,next:\"start\"}],brokenstring:[{token:[\"text\",\"string\"],regex:/(\\s*\\.{3})([^\"]*)/},{token:\"string\",regex:/\"/,next:\"start\"}]}};r.inherits(s,i),t.PraatHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/praat\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/praat_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./praat_highlight_rules\").PraatHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/praat\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-prolog.js",
    "content": "define(\"ace/mode/prolog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comment\"},{include:\"#basic_fact\"},{include:\"#rule\"},{include:\"#directive\"},{include:\"#fact\"}],\"#atom\":[{token:\"constant.other.atom.prolog\",regex:\"\\\\b[a-z][a-zA-Z0-9_]*\\\\b\"},{token:\"constant.numeric.prolog\",regex:\"-?\\\\d+(?:\\\\.\\\\d+)?\"},{include:\"#string\"}],\"#basic_elem\":[{include:\"#comment\"},{include:\"#statement\"},{include:\"#constants\"},{include:\"#operators\"},{include:\"#builtins\"},{include:\"#list\"},{include:\"#atom\"},{include:\"#variable\"}],\"#basic_fact\":[{token:[\"entity.name.function.fact.basic.prolog\",\"punctuation.end.fact.basic.prolog\"],regex:\"([a-z]\\\\w*)(\\\\.)\"}],\"#builtins\":[{token:\"support.function.builtin.prolog\",regex:\"\\\\b(?:abolish|abort|ancestors|arg|ascii|assert[az]|atom(?:ic)?|body|char|close|conc|concat|consult|define|definition|dynamic|dump|fail|file|free|free_proc|functor|getc|goal|halt|head|head|integer|length|listing|match_args|member|next_clause|nl|nonvar|nth|number|cvars|nvars|offset|op|print?|prompt|putc|quoted|ratom|read|redefine|rename|retract(?:all)?|see|seeing|seen|skip|spy|statistics|system|tab|tell|telling|term|time|told|univ|unlink_clause|unspy_predicate|var|write)\\\\b\"}],\"#comment\":[{token:[\"punctuation.definition.comment.prolog\",\"comment.line.percentage.prolog\"],regex:\"(%)(.*$)\"},{token:\"punctuation.definition.comment.prolog\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.prolog\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.prolog\"}]}],\"#constants\":[{token:\"constant.language.prolog\",regex:\"\\\\b(?:true|false|yes|no)\\\\b\"}],\"#directive\":[{token:\"keyword.operator.directive.prolog\",regex:\":-\",push:[{token:\"meta.directive.prolog\",regex:\"\\\\.\",next:\"pop\"},{include:\"#comment\"},{include:\"#statement\"},{defaultToken:\"meta.directive.prolog\"}]}],\"#expr\":[{include:\"#comments\"},{token:\"meta.expression.prolog\",regex:\"\\\\(\",push:[{token:\"meta.expression.prolog\",regex:\"\\\\)\",next:\"pop\"},{include:\"#expr\"},{defaultToken:\"meta.expression.prolog\"}]},{token:\"keyword.control.cutoff.prolog\",regex:\"!\"},{token:\"punctuation.control.and.prolog\",regex:\",\"},{token:\"punctuation.control.or.prolog\",regex:\";\"},{include:\"#basic_elem\"}],\"#fact\":[{token:[\"entity.name.function.fact.prolog\",\"punctuation.begin.fact.parameters.prolog\"],regex:\"([a-z]\\\\w*)(\\\\()(?!.*:-)\",push:[{token:[\"punctuation.end.fact.parameters.prolog\",\"punctuation.end.fact.prolog\"],regex:\"(\\\\))(\\\\.?)\",next:\"pop\"},{include:\"#parameter\"},{defaultToken:\"meta.fact.prolog\"}]}],\"#list\":[{token:\"punctuation.begin.list.prolog\",regex:\"\\\\[(?=.*\\\\])\",push:[{token:\"punctuation.end.list.prolog\",regex:\"\\\\]\",next:\"pop\"},{include:\"#comment\"},{token:\"punctuation.separator.list.prolog\",regex:\",\"},{token:\"punctuation.concat.list.prolog\",regex:\"\\\\|\",push:[{token:\"meta.list.concat.prolog\",regex:\"(?=\\\\s*\\\\])\",next:\"pop\"},{include:\"#basic_elem\"},{defaultToken:\"meta.list.concat.prolog\"}]},{include:\"#basic_elem\"},{defaultToken:\"meta.list.prolog\"}]}],\"#operators\":[{token:\"keyword.operator.prolog\",regex:\"\\\\\\\\\\\\+|\\\\bnot\\\\b|\\\\bis\\\\b|->|[><]|[><\\\\\\\\:=]?=|(?:=\\\\\\\\|\\\\\\\\=)=\"}],\"#parameter\":[{token:\"variable.language.anonymous.prolog\",regex:\"\\\\b_\\\\b\"},{token:\"variable.parameter.prolog\",regex:\"\\\\b[A-Z_]\\\\w*\\\\b\"},{token:\"punctuation.separator.parameters.prolog\",regex:\",\"},{include:\"#basic_elem\"},{token:\"text\",regex:\"[^\\\\s]\"}],\"#rule\":[{token:\"meta.rule.prolog\",regex:\"(?=[a-z]\\\\w*.*:-)\",push:[{token:\"punctuation.rule.end.prolog\",regex:\"\\\\.\",next:\"pop\"},{token:\"meta.rule.signature.prolog\",regex:\"(?=[a-z]\\\\w*.*:-)\",push:[{token:\"meta.rule.signature.prolog\",regex:\"(?=:-)\",next:\"pop\"},{token:\"entity.name.function.rule.prolog\",regex:\"[a-z]\\\\w*(?=\\\\(|\\\\s*:-)\"},{token:\"punctuation.rule.parameters.begin.prolog\",regex:\"\\\\(\",push:[{token:\"punctuation.rule.parameters.end.prolog\",regex:\"\\\\)\",next:\"pop\"},{include:\"#parameter\"},{defaultToken:\"meta.rule.parameters.prolog\"}]},{defaultToken:\"meta.rule.signature.prolog\"}]},{token:\"keyword.operator.definition.prolog\",regex:\":-\",push:[{token:\"meta.rule.definition.prolog\",regex:\"(?=\\\\.)\",next:\"pop\"},{include:\"#comment\"},{include:\"#expr\"},{defaultToken:\"meta.rule.definition.prolog\"}]},{defaultToken:\"meta.rule.prolog\"}]}],\"#statement\":[{token:\"meta.statement.prolog\",regex:\"(?=[a-z]\\\\w*\\\\()\",push:[{token:\"punctuation.end.statement.parameters.prolog\",regex:\"\\\\)\",next:\"pop\"},{include:\"#builtins\"},{include:\"#atom\"},{token:\"punctuation.begin.statement.parameters.prolog\",regex:\"\\\\(\",push:[{token:\"meta.statement.parameters.prolog\",regex:\"(?=\\\\))\",next:\"pop\"},{token:\"punctuation.separator.statement.prolog\",regex:\",\"},{include:\"#basic_elem\"},{defaultToken:\"meta.statement.parameters.prolog\"}]},{defaultToken:\"meta.statement.prolog\"}]}],\"#string\":[{token:\"punctuation.definition.string.begin.prolog\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.prolog\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.prolog\",regex:\"\\\\\\\\.\"},{token:\"constant.character.escape.quote.prolog\",regex:\"''\"},{defaultToken:\"string.quoted.single.prolog\"}]}],\"#variable\":[{token:\"variable.language.anonymous.prolog\",regex:\"\\\\b_\\\\b\"},{token:\"variable.other.prolog\",regex:\"\\\\b[A-Z_][a-zA-Z0-9_]*\\\\b\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"plg\",\"prolog\"],foldingStartMarker:\"(%\\\\s*region \\\\w*)|([a-z]\\\\w*.*:- ?)\",foldingStopMarker:\"(%\\\\s*end(\\\\s*region)?)|(?=\\\\.)\",keyEquivalent:\"^~P\",name:\"Prolog\",scopeName:\"source.prolog\"},r.inherits(s,i),t.PrologHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/prolog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/prolog_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./prolog_highlight_rules\").PrologHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"%\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/prolog\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-properties.js",
    "content": "define(\"ace/mode/properties_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=/\\\\u[0-9a-fA-F]{4}|\\\\/;this.$rules={start:[{token:\"comment\",regex:/[!#].*$/},{token:\"keyword\",regex:/[=:]$/},{token:\"keyword\",regex:/[=:]/,next:\"value\"},{token:\"constant.language.escape\",regex:e},{defaultToken:\"variable\"}],value:[{regex:/\\\\$/,token:\"string\",next:\"value\"},{regex:/$/,token:\"string\",next:\"start\"},{token:\"constant.language.escape\",regex:e},{defaultToken:\"string\"}]}};r.inherits(s,i),t.PropertiesHighlightRules=s}),define(\"ace/mode/properties\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/properties_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./properties_highlight_rules\").PropertiesHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.$id=\"ace/mode/properties\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-protobuf.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/protobuf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|bool|string|bytes\",t=\"message|required|optional|repeated|package|import|option|enum\",n=this.createKeywordMapper({\"keyword.declaration.protobuf\":t,\"support.type\":e},\"identifier\");this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"constant\",regex:\"<[^>]+>\"},{regex:\"=\",token:\"keyword.operator.assignment.protobuf\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.ProtobufHighlightRules=s}),define(\"ace/mode/protobuf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/protobuf_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./protobuf_highlight_rules\").ProtobufHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.foldingRules=new o,this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/protobuf\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-puppet.js",
    "content": "define(\"ace/mode/puppet_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"keyword.type.puppet\",\"constant.class.puppet\",\"keyword.inherits.puppet\",\"constant.class.puppet\"],regex:'^\\\\s*(class)(\\\\s+(?:[-_A-Za-z0-9\".]+::)*[-_A-Za-z0-9\".]+\\\\s*)(?:(inherits\\\\s*)(\\\\s+(?:[-_A-Za-z0-9\".]+::)*[-_A-Za-z0-9\".]+\\\\s*))?'},{token:[\"storage.function.puppet\",\"name.function.puppet\",\"punctuation.lpar\"],regex:\"(^\\\\s*define)(\\\\s+[a-zA-Z0-9_:]+\\\\s*)(\\\\()\",push:[{token:\"punctuation.rpar.puppet\",regex:\"\\\\)\",next:\"pop\"},{include:\"constants\"},{include:\"variable\"},{include:\"strings\"},{include:\"operators\"},{defaultToken:\"string\"}]},{token:[\"language.support.class\",\"keyword.operator\"],regex:\"\\\\b([a-zA-Z_]+)(\\\\s+=>)\"},{token:[\"exported.resource.puppet\",\"keyword.name.resource.puppet\",\"paren.lpar\"],regex:\"(\\\\@\\\\@)?(\\\\s*[a-zA-Z_]*)(\\\\s*\\\\{)\"},{token:\"qualified.variable.puppet\",regex:\"(\\\\$([a-z][a-z0-9_]*)?(::[a-z][a-z0-9_]*)*::[a-z0-9_][a-zA-Z0-9_]*)\"},{token:\"singleline.comment.puppet\",regex:\"#(.)*$\"},{token:\"multiline.comment.begin.puppet\",regex:\"^\\\\s*\\\\/\\\\*\\\\s*$\",push:\"blockComment\"},{token:\"keyword.control.puppet\",regex:\"\\\\b(case|if|unless|else|elsif|in|default:|and|or)\\\\s+(?!::)\"},{token:\"keyword.control.puppet\",regex:\"\\\\b(import|default|inherits|include|require|contain|node|application|consumes|environment|site|function|produces)\\\\b\"},{token:\"support.function.puppet\",regex:\"\\\\b(lest|str2bool|escape|gsub|Timestamp|Timespan|with|alert|crit|debug|notice|sprintf|split|step|strftime|slice|shellquote|type|sha1|defined|scanf|reverse_each|regsubst|return|emerg|reduce|err|failed|fail|versioncmp|file|generate|then|info|realize|search|tag|tagged|template|epp|warning|hiera_include|each|assert_type|binary_file|create_resources|dig|digest|filter|lookup|find_file|fqdn_rand|hiera_array|hiera_hash|inline_epp|inline_template|map|match|md5|new|next)\\\\b\"},{token:\"constant.types.puppet\",regex:\"\\\\b(String|File|Package|Service|Class|Integer|Array|Catalogentry|Variant|Boolean|Undef|Number|Hash|Float|Numeric|NotUndef|Callable|Optional|Any|Regexp|Sensitive|Sensitive.new|Type|Resource|Default|Enum|Scalar|Collection|Data|Pattern|Tuple|Struct)\\\\b\"},{token:\"paren.lpar\",regex:\"[[({]\"},{token:\"paren.rpar\",regex:\"[\\\\])}]\"},{include:\"variable\"},{include:\"constants\"},{include:\"strings\"},{include:\"operators\"},{token:\"regexp.begin.string.puppet\",regex:\"\\\\s*(\\\\/(\\\\S)+)\\\\/\"}],blockComment:[{regex:\"^\\\\s*\\\\/\\\\*\\\\s*$\",token:\"multiline.comment.begin.puppet\",push:\"blockComment\"},{regex:\"^\\\\s*\\\\*\\\\/\\\\s*$\",token:\"multiline.comment.end.puppet\",next:\"pop\"},{defaultToken:\"comment\"}],constants:[{token:\"constant.language.puppet\",regex:\"\\\\b(false|true|running|stopped|installed|purged|latest|file|directory|held|undef|present|absent|link|mounted|unmounted)\\\\b\"}],variable:[{token:\"variable.puppet\",regex:\"(\\\\$[a-z0-9_{][a-zA-Z0-9_]*)\"}],strings:[{token:\"punctuation.quote.puppet\",regex:\"'\",push:[{token:\"punctuation.quote.puppet\",regex:\"'\",next:\"pop\"},{include:\"escaped_chars\"},{defaultToken:\"string\"}]},{token:\"punctuation.quote.puppet\",regex:'\"',push:[{token:\"punctuation.quote.puppet\",regex:'\"',next:\"pop\"},{include:\"escaped_chars\"},{include:\"variable\"},{defaultToken:\"string\"}]}],escaped_chars:[{token:\"constant.escaped_char.puppet\",regex:\"\\\\\\\\.\"}],operators:[{token:\"keyword.operator\",regex:\"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|::|,\"}]},this.normalizeRules()};r.inherits(s,i),t.PuppetHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/puppet\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/puppet_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./puppet_highlight_rules\").PuppetHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=function(){i.call(this),this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.$id=\"ace/mode/puppet\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-python.js",
    "content": "define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"variable.language\":\"self|cls\",\"constant.language\":t,keyword:e},\"identifier\"),i=\"[uU]?\",s=\"[rR]\",o=\"[fF]\",u=\"(?:[rR][fF]|[fF][rR])\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:s+'\"{3}',next:\"rawqqstring3\"},{token:\"string\",regex:s+'\"(?=.)',next:\"rawqqstring\"},{token:\"string\",regex:s+\"'{3}\",next:\"rawqstring3\"},{token:\"string\",regex:s+\"'(?=.)\",next:\"rawqstring\"},{token:\"string\",regex:o+'\"{3}',next:\"fqqstring3\"},{token:\"string\",regex:o+'\"(?=.)',next:\"fqqstring\"},{token:\"string\",regex:o+\"'{3}\",next:\"fqstring3\"},{token:\"string\",regex:o+\"'(?=.)\",next:\"fqstring\"},{token:\"string\",regex:u+'\"{3}',next:\"rfqqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"rfqqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"rfqstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"rfqstring\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"punctuation\",regex:\",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"},{include:\"constants\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],rawqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],rawqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],fqqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"fqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rfqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring:[{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstringParRules:[{token:\"paren.lparen\",regex:\"[\\\\[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)]\"},{token:\"string\",regex:\"\\\\s+\"},{token:\"string\",regex:\"'(.)*'\"},{token:\"string\",regex:'\"(.)*\"'},{token:\"function.support\",regex:\"(!s|!r|!a)\"},{include:\"constants\"},{token:\"paren.rparen\",regex:\"}\",next:\"pop\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"}],constants:[{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:[\"punctuation\",\"function.support\"],regex:\"(\\\\.)([a-zA-Z_]+)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\"+e+\")(?:\\\\s*)(?:#.*)?$\")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)}),define(\"ace/mode/python\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/python_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./python_highlight_rules\").PythonHighlightRules,o=e(\"./folding/pythonic\").FoldMode,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o(\"\\\\:\"),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/python\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-r.js",
    "content": "define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){e||(e=\"text\"),this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:e,regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\s+\"},{token:\"nospell.\"+e,regex:\"\\\\w+\"}]}};r.inherits(o,s),t.TexHighlightRules=o}),define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./tex_highlight_rules\").TexHighlightRules,u=function(){var e=i.arrayToMap(\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\".split(\"|\")),t=i.arrayToMap(\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|NA_complex_\".split(\"|\"));this.$rules={start:[{token:\"comment.sectionhead\",regex:\"#+(?!').*(?:----|====|####)\\\\s*$\"},{token:\"comment\",regex:\"#+'\",next:\"rd-start\"},{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:'[\"]',next:\"qqstring\"},{token:\"string\",regex:\"[']\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+L\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:TRUE|FALSE|T|F)\\\\b\"},{token:\"identifier\",regex:\"`.*?`\"},{onMatch:function(n){return e[n]?\"keyword\":t[n]?\"constant.language\":n==\"...\"||n.match(/^\\.\\.\\d+$/)?\"variable.language\":\"identifier\"},regex:\"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"},{token:\"keyword.operator\",regex:\"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"},{token:\"keyword.operator\",regex:\"%.*?%\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]};var n=(new o(\"comment\")).getRules();for(var r=0;r<n.start.length;r++)n.start[r].token+=\".virtual-comment\";this.addRules(n,\"rd-\"),this.$rules[\"rd-start\"].unshift({token:\"text\",regex:\"^\",next:\"start\"}),this.$rules[\"rd-start\"].unshift({token:\"keyword\",regex:\"@(?!@)[^ ]*\"}),this.$rules[\"rd-start\"].unshift({token:\"comment\",regex:\"@@\"}),this.$rules[\"rd-start\"].push({token:\"comment\",regex:\"[^%\\\\\\\\[({\\\\])}]+\"})};r.inherits(u,s),t.RHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/r\",[\"require\",\"exports\",\"module\",\"ace/unicode\",\"ace/range\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/r_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../unicode\"),i=e(\"../range\").Range,s=e(\"../lib/oop\"),o=e(\"./text\").Mode,u=e(\"./text_highlight_rules\").TextHighlightRules,a=e(\"./r_highlight_rules\").RHighlightRules,f=e(\"./matching_brace_outdent\").MatchingBraceOutdent,l=function(){this.HighlightRules=a,this.$outdent=new f,this.$behaviour=this.$defaultBehaviour};s.inherits(l,o),function(){this.lineCommentStart=\"#\",this.tokenRe=new RegExp(\"^[\"+r.wordChars+\"._]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+r.wordChars+\"._]|s])+\",\"g\"),this.$id=\"ace/mode/r\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-razor.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\"constant.language\":\"null|true|false\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:/'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/},{token:\"string\",start:'\"',end:'\"|$',next:[{token:\"constant.language.escape\",regex:/\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},{token:\"invalid\",regex:/\\\\./}]},{token:\"string\",start:'@\"',end:'\"',next:[{token:\"constant.language.escape\",regex:'\"\"'}]},{token:\"string\",start:/\\$\"/,end:'\"|$',next:[{token:\"constant.language.escape\",regex:/\\\\(:?$)|{{/},{token:\"constant.language.escape\",regex:/\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},{token:\"invalid\",regex:/\\\\./}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"keyword\",regex:\"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.CSharpHighlightRules=o}),define(\"ace/mode/razor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/csharp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./html_highlight_rules\").HtmlHighlightRules,u=e(\"./csharp_highlight_rules\").CSharpHighlightRules,a=\"razor-block-\",f=function(){u.call(this);var e=function(e,t){return typeof t==\"function\"?t(e):t},t=\"in-braces\";this.$rules.start.unshift({regex:\"[\\\\[({]\",onMatch:function(e,n,r){var i=/razor-[^\\-]+-/.exec(n)[0];return r.unshift(e),r.unshift(i+t),this.next=i+t,\"paren.lparen\"}},{start:\"@\\\\*\",end:\"\\\\*@\",token:\"comment\"});var n={\"{\":\"}\",\"[\":\"]\",\"(\":\")\"};this.$rules[t]=i.deepCopy(this.$rules.start),this.$rules[t].unshift({regex:\"[\\\\])}]\",onMatch:function(t,r,i){var s=i[1];return n[s]!==t?\"invalid.illegal\":(i.shift(),i.shift(),this.next=e(t,i[0])||\"start\",\"paren.rparen\")}})};r.inherits(f,u);var l=function(){o.call(this);var e={regex:\"@[({]|@functions{\",onMatch:function(e,t,n){return n.unshift(e),n.unshift(\"razor-block-start\"),this.next=\"razor-block-start\",\"punctuation.block.razor\"}},t={\"@{\":\"}\",\"@(\":\")\",\"@functions{\":\"}\"},n={regex:\"[})]\",onMatch:function(e,n,r){var i=r[1];return t[i]!==e?\"invalid.illegal\":(r.shift(),r.shift(),this.next=r.shift()||\"start\",\"punctuation.block.razor\")}},r={regex:\"@(?![{(])\",onMatch:function(e,t,n){return n.unshift(\"razor-short-start\"),this.next=\"razor-short-start\",\"punctuation.short.razor\"}},i={token:\"\",regex:\"(?=[^A-Za-z_\\\\.()\\\\[\\\\]])\",next:\"pop\"},s={regex:\"@(?=if)\",onMatch:function(e,t,n){return n.unshift(function(e){return e!==\"}\"?\"start\":n.shift()||\"start\"}),this.next=\"razor-block-start\",\"punctuation.control.razor\"}},u=[{start:\"@\\\\*\",end:\"\\\\*@\",token:\"comment\"},{token:[\"meta.directive.razor\",\"text\",\"identifier\"],regex:\"^(\\\\s*@model)(\\\\s+)(.+)$\"},e,r];for(var a in this.$rules)this.$rules[a].unshift.apply(this.$rules[a],u);this.embedRules(f,\"razor-block-\",[n],[\"start\"]),this.embedRules(f,\"razor-short-\",[i],[\"start\"]),this.normalizeRules()};r.inherits(l,o),t.RazorHighlightRules=l,t.RazorLangHighlightRules=f}),define(\"ace/mode/razor_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../token_iterator\").TokenIterator,i=[\"abstract\",\"as\",\"base\",\"bool\",\"break\",\"byte\",\"case\",\"catch\",\"char\",\"checked\",\"class\",\"const\",\"continue\",\"decimal\",\"default\",\"delegate\",\"do\",\"double\",\"else\",\"enum\",\"event\",\"explicit\",\"extern\",\"false\",\"finally\",\"fixed\",\"float\",\"for\",\"foreach\",\"goto\",\"if\",\"implicit\",\"in\",\"int\",\"interface\",\"internal\",\"is\",\"lock\",\"long\",\"namespace\",\"new\",\"null\",\"object\",\"operator\",\"out\",\"override\",\"params\",\"private\",\"protected\",\"public\",\"readonly\",\"ref\",\"return\",\"sbyte\",\"sealed\",\"short\",\"sizeof\",\"stackalloc\",\"static\",\"string\",\"struct\",\"switch\",\"this\",\"throw\",\"true\",\"try\",\"typeof\",\"uint\",\"ulong\",\"unchecked\",\"unsafe\",\"ushort\",\"using\",\"var\",\"virtual\",\"void\",\"volatile\",\"while\"],s=[\"Html\",\"Model\",\"Url\",\"Layout\"],o=function(){};(function(){this.getCompletions=function(e,t,n,r){if(e.lastIndexOf(\"razor-short-start\")==-1&&e.lastIndexOf(\"razor-block-start\")==-1)return[];var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(e.lastIndexOf(\"razor-short-start\")!=-1)return this.getShortStartCompletions(e,t,n,r);if(e.lastIndexOf(\"razor-block-start\")!=-1)return this.getKeywordCompletions(e,t,n,r)},this.getShortStartCompletions=function(e,t,n,r){return s.map(function(e){return{value:e,meta:\"keyword\",score:1e6}})},this.getKeywordCompletions=function(e,t,n,r){return s.concat(i).map(function(e){return{value:e,meta:\"keyword\",score:1e6}})}}).call(o.prototype),t.RazorCompletions=o}),define(\"ace/mode/razor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/razor_highlight_rules\",\"ace/mode/razor_completions\",\"ace/mode/html_completions\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./razor_highlight_rules\").RazorHighlightRules,o=e(\"./razor_completions\").RazorCompletions,u=e(\"./html_completions\").HtmlCompletions,a=function(){i.call(this),this.$highlightRules=new s,this.$completer=new o,this.$htmlCompleter=new u};r.inherits(a,i),function(){this.getCompletions=function(e,t,n,r){var i=this.$completer.getCompletions(e,t,n,r),s=this.$htmlCompleter.getCompletions(e,t,n,r);return i.concat(s)},this.createWorker=function(e){return null},this.$id=\"ace/mode/razor\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-rdoc.js",
    "content": "define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\",\"lparen\",\"storage.type\",\"rparen\"],regex:\"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\begin)({)(verbatim)(})\",next:\"verbatim\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\begin)({)(lstlisting)(})\",next:\"lstlisting\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"},{token:\"storage.type\",regex:/\\\\verb\\b\\*?/,next:[{token:[\"keyword.operator\",\"string\",\"keyword.operator\"],regex:\"(.)(.*?)(\\\\1|$)|\",next:\"start\"}]},{token:\"storage.type\",regex:\"\\\\\\\\[a-zA-Z]+\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\[^a-zA-Z]?\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"equation\"}],equation:[{token:\"comment\",regex:\"%.*$\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"start\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"},{token:\"error\",regex:\"^\\\\s*$\",next:\"start\"},{defaultToken:\"string\"}],verbatim:[{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\end)({)(verbatim)(})\",next:\"start\"},{defaultToken:\"text\"}],lstlisting:[{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\end)({)(lstlisting)(})\",next:\"start\"},{defaultToken:\"text\"}]},this.normalizeRules()};r.inherits(s,i),t.LatexHighlightRules=s}),define(\"ace/mode/rdoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/latex_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./latex_highlight_rules\"),u=function(){this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:\"text\",regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.text\",regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.text\",regex:\"\\\\s+\"},{token:\"nospell.text\",regex:\"\\\\w+\"}]}};r.inherits(u,s),t.RDocHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/rdoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rdoc_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./rdoc_highlight_rules\").RDocHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=function(e){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.$id=\"ace/mode/rdoc\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-red.js",
    "content": "define(\"ace/mode/red_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"\";this.$rules={start:[{token:\"keyword.operator\",regex:/\\s([\\-+%/=<>*]|(?:\\*\\*\\|\\/\\/|==|>>>?|<>|<<|=>|<=|=\\?))(\\s|(?=:))/},{token:\"string.email\",regex:/\\w[-\\w._]*\\@\\w[-\\w._]*/},{token:\"value.time\",regex:/\\b\\d+:\\d+(:\\d+)?/},{token:\"string.url\",regex:/\\w[-\\w_]*\\:(\\/\\/)?\\w[-\\w._]*(:\\d+)?/},{token:\"value.date\",regex:/(\\b\\d{1,4}[-/]\\d{1,2}[-/]\\d{1,2}|\\d{1,2}[-/]\\d{1,2}[-/]\\d{1,4})\\b/},{token:\"value.tuple\",regex:/\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(\\.\\d{1,3}){0,9}/},{token:\"value.pair\",regex:/[+-]?\\d+x[-+]?\\d+/},{token:\"value.binary\",regex:/\\b2#{([01]{8})+}/},{token:\"value.binary\",regex:/\\b64#{([\\w/=+])+}/},{token:\"value.binary\",regex:/(16)?#{([\\dabcdefABCDEF][\\dabcdefABCDEF])*}/},{token:\"value.issue\",regex:/#\\w[-\\w'*.]*/},{token:\"value.numeric\",regex:/[+-]?\\d['\\d]*(?:\\.\\d+)?e[-+]?\\d{1,3}\\%?(?!\\w)/},{token:\"invalid.illegal\",regex:/[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?[a-zA-Z]/},{token:\"value.numeric\",regex:/[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?(?![a-zA-Z])/},{token:\"value.character\",regex:/#\"(\\^[-@/_~^\"HKLM\\[]|.)\"/},{token:\"string.file\",regex:/%[-\\w\\.\\/]+/},{token:\"string.tag\",regex:/</,next:\"tag\"},{token:\"string\",regex:/\"/,next:\"string\"},{token:\"string.other\",regex:\"{\",next:\"string.other\"},{token:\"comment\",regex:\"comment [{]\",next:\"comment\"},{token:\"comment\",regex:/;.+$/},{token:\"paren.map-start\",regex:\"#\\\\(\"},{token:\"paren.block-start\",regex:\"[\\\\[]\"},{token:\"paren.block-end\",regex:\"[\\\\]]\"},{token:\"paren.parens-start\",regex:\"[(]\"},{token:\"paren.parens-end\",regex:\"\\\\)\"},{token:\"keyword\",regex:\"/local|/external\"},{token:\"keyword.preprocessor\",regex:\"#(if|either|switch|case|include|do|macrolocal|reset|process|trace)\"},{token:\"constant.datatype!\",regex:\"(?:datatype|unset|none|logic|block|paren|string|file|url|char|integer|float|word|set-word|lit-word|get-word|refinement|issue|native|action|op|function|path|lit-path|set-path|get-path|routine|bitset|point|object|typeset|error|vector|hash|pair|percent|tuple|map|binary|time|tag|email|handle|date|image|event|series|any-type|number|any-object|scalar|any-string|any-word|any-function|any-block|any-list|any-path|immediate|all-word|internal|external|default)!(?![-!?\\\\w~])\"},{token:\"keyword.function\",regex:\"\\\\b(?:collect|quote|on-parse-event|math|last|source|expand|show|context|object|input|quit|dir|make-dir|cause-error|error\\\\?|none\\\\?|block\\\\?|any-list\\\\?|word\\\\?|char\\\\?|any-string\\\\?|series\\\\?|binary\\\\?|attempt|url\\\\?|string\\\\?|suffix\\\\?|file\\\\?|object\\\\?|body-of|first|second|third|mod|clean-path|dir\\\\?|to-red-file|normalize-dir|list-dir|pad|empty\\\\?|dirize|offset\\\\?|what-dir|expand-directives|load|split-path|change-dir|to-file|path-thru|save|load-thru|View|float\\\\?|to-float|charset|\\\\?|probe|set-word\\\\?|q|words-of|replace|repend|react|function\\\\?|spec-of|unset\\\\?|halt|op\\\\?|any-function\\\\?|to-paren|tag\\\\?|routine|class-of|size-text|draw|handle\\\\?|link-tabs-to-parent|link-sub-to-parent|on-face-deep-change*|update-font-faces|do-actor|do-safe|do-events|pair\\\\?|foreach-face|hex-to-rgb|issue\\\\?|alter|path\\\\?|typeset\\\\?|datatype\\\\?|set-flag|layout|extract|image\\\\?|get-word\\\\?|to-logic|to-set-word|to-block|center-face|dump-face|request-font|request-file|request-dir|rejoin|ellipsize-at|any-block\\\\?|any-object\\\\?|map\\\\?|keys-of|a-an|also|parse-func-spec|help-string|what|routine\\\\?|action\\\\?|native\\\\?|refinement\\\\?|common-substr|red-complete-file|red-complete-path|unview|comment|\\\\?\\\\?|fourth|fifth|values-of|bitset\\\\?|email\\\\?|get-path\\\\?|hash\\\\?|integer\\\\?|lit-path\\\\?|lit-word\\\\?|logic\\\\?|paren\\\\?|percent\\\\?|set-path\\\\?|time\\\\?|tuple\\\\?|date\\\\?|vector\\\\?|any-path\\\\?|any-word\\\\?|number\\\\?|immediate\\\\?|scalar\\\\?|all-word\\\\?|to-bitset|to-binary|to-char|to-email|to-get-path|to-get-word|to-hash|to-integer|to-issue|to-lit-path|to-lit-word|to-map|to-none|to-pair|to-path|to-percent|to-refinement|to-set-path|to-string|to-tag|to-time|to-typeset|to-tuple|to-unset|to-url|to-word|to-image|to-date|parse-trace|modulo|eval-set-path|extract-boot-args|flip-exe-flag|split|do-file|exists-thru\\\\?|read-thru|do-thru|cos|sin|tan|acos|asin|atan|atan2|sqrt|clear-reactions|dump-reactions|react\\\\?|within\\\\?|overlap\\\\?|distance\\\\?|face\\\\?|metrics\\\\?|get-scroller|insert-event-func|remove-event-func|set-focus|help|fetch-help|about|ls|ll|pwd|cd|red-complete-input|matrix)(?![-!?\\\\w~])\"},{token:\"keyword.action\",regex:\"\\\\b(?:to|remove|copy|insert|change|clear|move|poke|put|random|reverse|sort|swap|take|trim|add|subtract|divide|multiply|make|reflect|form|mold|modify|absolute|negate|power|remainder|round|even\\\\?|odd\\\\?|and~|complement|or~|xor~|append|at|back|find|skip|tail|head|head\\\\?|index\\\\?|length\\\\?|next|pick|select|tail\\\\?|delete|read|write)(?![-_!?\\\\w~])\"},{token:\"keyword.native\",regex:\"\\\\b(?:not|any|set|uppercase|lowercase|checksum|try|catch|browse|throw|all|as|remove-each|func|function|does|has|do|reduce|compose|get|print|prin|equal\\\\?|not-equal\\\\?|strict-equal\\\\?|lesser\\\\?|greater\\\\?|lesser-or-equal\\\\?|greater-or-equal\\\\?|same\\\\?|type\\\\?|stats|bind|in|parse|union|unique|intersect|difference|exclude|complement\\\\?|dehex|negative\\\\?|positive\\\\?|max|min|shift|to-hex|sine|cosine|tangent|arcsine|arccosine|arctangent|arctangent2|NaN\\\\?|zero\\\\?|log-2|log-10|log-e|exp|square-root|construct|value\\\\?|as-pair|extend|debase|enbase|to-local-file|wait|unset|new-line|new-line\\\\?|context\\\\?|set-env|get-env|list-env|now|sign\\\\?|call|size\\\\?)(?![-!?\\\\w~])\"},{token:\"keyword\",regex:\"\\\\b(?:Red(?=\\\\s+\\\\[)|object|context|make|self|keep)(?![-!?\\\\w~])\"},{token:\"variable.language\",regex:\"this\"},{token:\"keyword.control\",regex:\"(?:while|if|return|case|unless|either|until|loop|repeat|forever|foreach|forall|switch|break|continue|exit)(?![-!?\\\\w~])\"},{token:\"constant.language\",regex:\"\\\\b(?:true|false|on|off|yes|none|no)(?![-!?\\\\w~])\"},{token:\"constant.numeric\",regex:/\\bpi(?![^-_])/},{token:\"constant.character\",regex:\"\\\\b(space|tab|newline|cr|lf)(?![-!?\\\\w~])\"},{token:\"keyword.operator\",regex:\"s(or|and|xor|is)s\"},{token:\"variable.get-path\",regex:/:\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},{token:\"variable.set-path\",regex:/\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*:/},{token:\"variable.lit-path\",regex:/'\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},{token:\"variable.path\",regex:/\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},{token:\"variable.refinement\",regex:/\\/\\w[-\\w'*.?!]*/},{token:\"keyword.view.style\",regex:\"\\\\b(?:window|base|button|text|field|area|check|radio|progress|slider|camera|text-list|drop-list|drop-down|panel|group-box|tab-panel|h1|h2|h3|h4|h5|box|image|init)(?![-!?\\\\w~])\"},{token:\"keyword.view.event\",regex:\"\\\\b(?:detect|on-detect|time|on-time|drawing|on-drawing|scroll|on-scroll|down|on-down|up|on-up|mid-down|on-mid-down|mid-up|on-mid-up|alt-down|on-alt-down|alt-up|on-alt-up|aux-down|on-aux-down|aux-up|on-aux-up|wheel|on-wheel|drag-start|on-drag-start|drag|on-drag|drop|on-drop|click|on-click|dbl-click|on-dbl-click|over|on-over|key|on-key|key-down|on-key-down|key-up|on-key-up|ime|on-ime|focus|on-focus|unfocus|on-unfocus|select|on-select|change|on-change|enter|on-enter|menu|on-menu|close|on-close|move|on-move|resize|on-resize|moving|on-moving|resizing|on-resizing|zoom|on-zoom|pan|on-pan|rotate|on-rotate|two-tap|on-two-tap|press-tap|on-press-tap|create|on-create|created|on-created)(?![-!?\\\\w~])\"},{token:\"keyword.view.option\",regex:\"\\\\b(?:all-over|center|color|default|disabled|down|flags|focus|font|font-color|font-name|font-size|hidden|hint|left|loose|name|no-border|now|rate|react|select|size|space)(?![-!?\\\\w~])\"},{token:\"constant.other.colour\",regex:\"\\\\b(?:Red|white|transparent|black|gray|aqua|beige|blue|brick|brown|coal|coffee|crimson|cyan|forest|gold|green|ivory|khaki|leaf|linen|magenta|maroon|mint|navy|oldrab|olive|orange|papaya|pewter|pink|purple|reblue|rebolor|sienna|silver|sky|snow|tanned|teal|violet|water|wheat|yello|yellow|glass)(?![-!?\\\\w~])\"},{token:\"variable.get-word\",regex:/\\:\\w[-\\w'*.?!]*/},{token:\"variable.set-word\",regex:/\\w[-\\w'*.?!]*\\:/},{token:\"variable.lit-word\",regex:/'\\w[-\\w'*.?!]*/},{token:\"variable.word\",regex:/\\b\\w+[-\\w'*.!?]*/},{caseInsensitive:!0}],string:[{token:\"string\",regex:/\"/,next:\"start\"},{defaultToken:\"string\"}],\"string.other\":[{token:\"string.other\",regex:/}/,next:\"start\"},{defaultToken:\"string.other\"}],tag:[{token:\"string.tag\",regex:/>/,next:\"start\"},{defaultToken:\"string.tag\"}],comment:[{token:\"comment\",regex:/}/,next:\"start\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.RedHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/red\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/red_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./red_highlight_rules\").RedHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=function(){this.HighlightRules=s,this.foldingRules=new o,this.$outdent=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"comment {\",end:\"}\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\[\\(]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/red\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-redshift.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"text\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),define(\"ace/mode/redshift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/json_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./json_highlight_rules\").JsonHighlightRules,a=function(){var e=\"aes128|aes256|all|allowoverwrite|analyse|analyze|and|any|array|as|asc|authorization|backup|between|binary|blanksasnull|both|bytedict|bzip2|case|cast|check|collate|column|constraint|create|credentials|cross|current_date|current_time|current_timestamp|current_user|current_user_id|default|deferrable|deflate|defrag|delta|delta32k|desc|disable|distinct|do|else|emptyasnull|enable|encode|encrypt|encryption|end|except|explicit|false|for|foreign|freeze|from|full|globaldict256|globaldict64k|grant|group|gzip|having|identity|ignore|ilike|in|initially|inner|intersect|into|is|isnull|join|leading|left|like|limit|localtime|localtimestamp|lun|luns|lzo|lzop|minus|mostly13|mostly32|mostly8|natural|new|not|notnull|null|nulls|off|offline|offset|old|on|only|open|or|order|outer|overlaps|parallel|partition|percent|permissions|placing|primary|raw|readratio|recover|references|rejectlog|resort|restore|right|select|session_user|similar|some|sysdate|system|table|tag|tdes|text255|text32k|then|timestamp|to|top|trailing|true|truncatecolumns|union|unique|user|using|verbose|wallet|when|where|with|without\",t=\"current_schema|current_schemas|has_database_privilege|has_schema_privilege|has_table_privilege|age|current_time|current_timestamp|localtime|isfinite|now|ascii|get_bit|get_byte|octet_length|set_bit|set_byte|to_ascii|avg|count|listagg|max|min|stddev_samp|stddev_pop|sum|var_samp|var_pop|bit_and|bit_or|bool_and|bool_or|avg|count|cume_dist|dense_rank|first_value|last_value|lag|lead|listagg|max|median|min|nth_value|ntile|percent_rank|percentile_cont|percentile_disc|rank|ratio_to_report|row_number|case|coalesce|decode|greatest|least|nvl|nvl2|nullif|add_months|age|convert_timezone|current_date|timeofday|current_time|current_timestamp|date_cmp|date_cmp_timestamp|date_part_year|dateadd|datediff|date_part|date_trunc|extract|getdate|interval_cmp|isfinite|last_day|localtime|localtimestamp|months_between|next_day|now|sysdate|timestamp_cmp|timestamp_cmp_date|trunc|abs|acos|asin|atan|atan2|cbrt|ceiling|ceil|checksum|cos|cot|degrees|dexp|dlog1|dlog10|exp|floor|ln|log|mod|pi|power|radians|random|round|sin|sign|sqrt|tan|trunc|ascii|bpcharcmp|btrim|bttext_pattern_cmp|char_length|character_length|charindex|chr|concat|crc32|func_sha1|get_bit|get_byte|initcap|left|right|len|length|lower|lpad|rpad|ltrim|md5|octet_length|position|quote_ident|quote_literal|regexp_count|regexp_instr|regexp_replace|regexp_substr|repeat|replace|replicate|reverse|rtrim|set_bit|set_byte|split_part|strpos|strtol|substring|textlen|to_ascii|to_hex|translate|trim|upper|json_array_length|json_extract_array_element_text|json_extract_path_text|cast|convert|to_char|to_date|to_number|current_database|current_schema|current_schemas|current_user|current_user_id|has_database_privilege|has_schema_privilege|has_table_privilege|pg_backend_pid|pg_last_copy_count|pg_last_copy_id|pg_last_query_id|pg_last_unload_count|session_user|slice_num|user|version\",n=this.createKeywordMapper({\"support.function\":t,keyword:e},\"identifier\",!0),r=[{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"variable.language\",regex:'\".*?\"'},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:n,regex:\"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|~=|~>=~|~>~|~~|~~\\\\*\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}];this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"keyword.statementBegin\",regex:\"^[a-zA-Z]+\",next:\"statement\"},{token:\"support.buildin\",regex:\"^\\\\\\\\[\\\\S]+.*$\"}],statement:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentStatement\"},{token:\"statementEnd\",regex:\";\",next:\"start\"},{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"json-start\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$$\",next:\"dollarSql\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarStatementString\"}].concat(r),dollarSql:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentDollarSql\"},{token:\"string\",regex:\"^\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSqlString\"}].concat(r),comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],commentStatement:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"statement\"},{token:\"comment\",regex:\".+\"}],commentDollarSql:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"dollarSql\"},{token:\"comment\",regex:\".+\"}],dollarStatementString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\".+\"}],dollarSqlString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSql\"},{token:\"string\",regex:\".+\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.embedRules(u,\"json-\",[{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"statement\"}])};r.inherits(a,o),t.RedshiftHighlightRules=a}),define(\"ace/mode/redshift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/redshift_highlight_rules\",\"ace/range\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./redshift_highlight_rules\").RedshiftHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){return e==\"start\"||e==\"keyword.statementEnd\"?\"\":this.$getIndent(t)},this.$id=\"ace/mode/redshift\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-rhtml.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){e||(e=\"text\"),this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:e,regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\s+\"},{token:\"nospell.\"+e,regex:\"\\\\w+\"}]}};r.inherits(o,s),t.TexHighlightRules=o}),define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./tex_highlight_rules\").TexHighlightRules,u=function(){var e=i.arrayToMap(\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\".split(\"|\")),t=i.arrayToMap(\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|NA_complex_\".split(\"|\"));this.$rules={start:[{token:\"comment.sectionhead\",regex:\"#+(?!').*(?:----|====|####)\\\\s*$\"},{token:\"comment\",regex:\"#+'\",next:\"rd-start\"},{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:'[\"]',next:\"qqstring\"},{token:\"string\",regex:\"[']\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+L\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:TRUE|FALSE|T|F)\\\\b\"},{token:\"identifier\",regex:\"`.*?`\"},{onMatch:function(n){return e[n]?\"keyword\":t[n]?\"constant.language\":n==\"...\"||n.match(/^\\.\\.\\d+$/)?\"variable.language\":\"identifier\"},regex:\"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"},{token:\"keyword.operator\",regex:\"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"},{token:\"keyword.operator\",regex:\"%.*?%\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]};var n=(new o(\"comment\")).getRules();for(var r=0;r<n.start.length;r++)n.start[r].token+=\".virtual-comment\";this.addRules(n,\"rd-\"),this.$rules[\"rd-start\"].unshift({token:\"text\",regex:\"^\",next:\"start\"}),this.$rules[\"rd-start\"].unshift({token:\"keyword\",regex:\"@(?!@)[^ ]*\"}),this.$rules[\"rd-start\"].unshift({token:\"comment\",regex:\"@@\"}),this.$rules[\"rd-start\"].push({token:\"comment\",regex:\"[^%\\\\\\\\[({\\\\])}]+\"})};r.inherits(u,s),t.RHighlightRules=u}),define(\"ace/mode/rhtml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/r_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./r_highlight_rules\").RHighlightRules,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){s.call(this),this.$rules.start.unshift({token:\"support.function.codebegin\",regex:\"^<!--\\\\s*begin.rcode\\\\s*(?:.*)\",next:\"r-start\"}),this.embedRules(i,\"r-\",[{token:\"support.function.codeend\",regex:\"^\\\\s*end.rcode\\\\s*-->\",next:\"start\"}],[\"start\"]),this.normalizeRules()};r.inherits(u,o),t.RHtmlHighlightRules=u}),define(\"ace/mode/rhtml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/rhtml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./rhtml_highlight_rules\").RHtmlHighlightRules,o=function(e,t){i.call(this),this.$session=t,this.HighlightRules=s};r.inherits(o,i),function(){this.insertChunkInfo={value:\"<!--begin.rcode\\n\\nend.rcode-->\\n\",position:{row:0,column:15}},this.getLanguageMode=function(e){return this.$session.getState(e.row).match(/^r-/)?\"R\":\"HTML\"},this.$id=\"ace/mode/rhtml\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-rst.js",
    "content": "define(\"ace/mode/rst_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e={title:\"markup.heading\",list:\"markup.heading\",table:\"constant\",directive:\"keyword.operator\",entity:\"string\",link:\"markup.underline.list\",bold:\"markup.bold\",italic:\"markup.italic\",literal:\"support.function\",comment:\"comment\"},t=\"(^|\\\\s|[\\\"'(<\\\\[{\\\\-/:])\",n=\"(?:$|(?=\\\\s|[\\\\\\\\.,;!?\\\\-/:\\\"')>\\\\]}]))\";this.$rules={start:[{token:e.title,regex:\"(^)([\\\\=\\\\-`:\\\\.'\\\"~\\\\^_\\\\*\\\\+#])(\\\\2{2,}\\\\s*$)\"},{token:[\"text\",e.directive,e.literal],regex:\"(^\\\\s*\\\\.\\\\. )([^: ]+::)(.*$)\",next:\"codeblock\"},{token:e.directive,regex:\"::$\",next:\"codeblock\"},{token:[e.entity,e.link],regex:\"(^\\\\.\\\\. _[^:]+:)(.*$)\"},{token:[e.entity,e.link],regex:\"(^__ )(https?://.*$)\"},{token:e.entity,regex:\"^\\\\.\\\\. \\\\[[^\\\\]]+\\\\] \"},{token:e.comment,regex:\"^\\\\.\\\\. .*$\",next:\"comment\"},{token:e.list,regex:\"^\\\\s*[\\\\*\\\\+-] \"},{token:e.list,regex:\"^\\\\s*(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\. \"},{token:e.list,regex:\"^\\\\s*\\\\(?(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\) \"},{token:e.table,regex:\"^={2,}(?: +={2,})+$\"},{token:e.table,regex:\"^\\\\+-{2,}(?:\\\\+-{2,})+\\\\+$\"},{token:e.table,regex:\"^\\\\+={2,}(?:\\\\+={2,})+\\\\+$\"},{token:[\"text\",e.literal],regex:t+\"(``)(?=\\\\S)\",next:\"code\"},{token:[\"text\",e.bold],regex:t+\"(\\\\*\\\\*)(?=\\\\S)\",next:\"bold\"},{token:[\"text\",e.italic],regex:t+\"(\\\\*)(?=\\\\S)\",next:\"italic\"},{token:e.entity,regex:\"\\\\|[\\\\w\\\\-]+?\\\\|\"},{token:e.entity,regex:\":[\\\\w-:]+:`\\\\S\",next:\"entity\"},{token:[\"text\",e.entity],regex:t+\"(_`)(?=\\\\S)\",next:\"entity\"},{token:e.entity,regex:\"_[A-Za-z0-9\\\\-]+?\"},{token:[\"text\",e.link],regex:t+\"(`)(?=\\\\S)\",next:\"link\"},{token:e.link,regex:\"[A-Za-z0-9\\\\-]+?__?\"},{token:e.link,regex:\"\\\\[[^\\\\]]+?\\\\]_\"},{token:e.link,regex:\"https?://\\\\S+\"},{token:e.table,regex:\"\\\\|\"}],codeblock:[{token:e.literal,regex:\"^ +.+$\",next:\"codeblock\"},{token:e.literal,regex:\"^$\",next:\"codeblock\"},{token:\"empty\",regex:\"\",next:\"start\"}],code:[{token:e.literal,regex:\"\\\\S``\"+n,next:\"start\"},{defaultToken:e.literal}],bold:[{token:e.bold,regex:\"\\\\S\\\\*\\\\*\"+n,next:\"start\"},{defaultToken:e.bold}],italic:[{token:e.italic,regex:\"\\\\S\\\\*\"+n,next:\"start\"},{defaultToken:e.italic}],entity:[{token:e.entity,regex:\"\\\\S`\"+n,next:\"start\"},{defaultToken:e.entity}],link:[{token:e.link,regex:\"\\\\S`__?\"+n,next:\"start\"},{defaultToken:e.link}],comment:[{token:e.comment,regex:\"^ +.+$\",next:\"comment\"},{token:e.comment,regex:\"^$\",next:\"comment\"},{token:\"empty\",regex:\"\",next:\"start\"}]}};r.inherits(o,s),t.RSTHighlightRules=o}),define(\"ace/mode/rst\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rst_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./rst_highlight_rules\").RSTHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.type=\"text\",this.$id=\"ace/mode/rst\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-ruby.js",
    "content": "define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-rust.js",
    "content": "define(\"ace/mode/rust_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=/\\\\(?:[nrt0'\"\\\\]|x[\\da-fA-F]{2}|u\\{[\\da-fA-F]{6}\\})/.source,o=function(){this.$rules={start:[{token:\"variable.other.source.rust\",regex:\"'[a-zA-Z_][a-zA-Z0-9_]*(?![\\\\'])\"},{token:\"string.quoted.single.source.rust\",regex:\"'(?:[^'\\\\\\\\]|\"+s+\")'\"},{token:\"identifier\",regex:/r#[a-zA-Z_][a-zA-Z0-9_]*\\b/},{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-1,t),\"string.quoted.raw.source.rust\"},regex:/r#*\"/,next:[{onMatch:function(e,t,n){var r=\"string.quoted.raw.source.rust\";return e.length>=n[1]?(e.length>n[1]&&(r=\"invalid\"),n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",r},regex:/\"#*/,next:\"start\"},{defaultToken:\"string.quoted.raw.source.rust\"}]},{token:\"string.quoted.double.source.rust\",regex:'\"',push:[{token:\"string.quoted.double.source.rust\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.source.rust\",regex:s},{defaultToken:\"string.quoted.double.source.rust\"}]},{token:[\"keyword.source.rust\",\"text\",\"entity.name.function.source.rust\"],regex:\"\\\\b(fn)(\\\\s+)((?:r#)?[a-zA-Z_][a-zA-Z0-9_]*)\"},{token:\"support.constant\",regex:\"\\\\b[a-zA-Z_][\\\\w\\\\d]*::\"},{token:\"keyword.source.rust\",regex:\"\\\\b(?:abstract|alignof|as|become|box|break|catch|continue|const|crate|default|do|dyn|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\\\b\"},{token:\"storage.type.source.rust\",regex:\"\\\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|u128|f16|f32|f64|i8|i16|i32|i64|i128|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\\\b\"},{token:\"variable.language.source.rust\",regex:\"\\\\bself\\\\b\"},{token:\"comment.line.doc.source.rust\",regex:\"//!.*$\"},{token:\"comment.line.double-dash.source.rust\",regex:\"//.*$\"},{token:\"comment.start.block.source.rust\",regex:\"/\\\\*\",stateName:\"comment\",push:[{token:\"comment.start.block.source.rust\",regex:\"/\\\\*\",push:\"comment\"},{token:\"comment.end.block.source.rust\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.source.rust\"}]},{token:\"keyword.operator\",regex:/\\$|[-=]>|[-+%^=!&|<>]=?|[*/](?![*/])=?/},{token:\"punctuation.operator\",regex:/[?:,;.]/},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"constant.language.source.rust\",regex:\"\\\\b(?:true|false|Some|None|Ok|Err)\\\\b\"},{token:\"support.constant.source.rust\",regex:\"\\\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\\\b\"},{token:\"meta.preprocessor.source.rust\",regex:\"\\\\b\\\\w\\\\(\\\\w\\\\)*!|#\\\\[[\\\\w=\\\\(\\\\)_]+\\\\]\\\\b\"},{token:\"constant.numeric.source.rust\",regex:/\\b(?:0x[a-fA-F0-9_]+|0o[0-7_]+|0b[01_]+|[0-9][0-9_]*(?!\\.))(?:[iu](?:size|8|16|32|64|128))?\\b/},{token:\"constant.numeric.source.rust\",regex:/\\b(?:[0-9][0-9_]*)(?:\\.[0-9][0-9_]*)?(?:[Ee][+-][0-9][0-9_]*)?(?:f32|f64)?\\b/}]},this.normalizeRules()};o.metaData={fileTypes:[\"rs\",\"rc\"],foldingStartMarker:\"^.*\\\\bfn\\\\s*(\\\\w+\\\\s*)?\\\\([^\\\\)]*\\\\)(\\\\s*\\\\{[^\\\\}]*)?\\\\s*$\",foldingStopMarker:\"^\\\\s*\\\\}\",name:\"Rust\",scopeName:\"source.rust\"},r.inherits(o,i),t.RustHighlightRules=o}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/rust\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rust_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./rust_highlight_rules\").RustHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\",nestable:!0},this.$quotes={'\"':'\"'},this.$id=\"ace/mode/rust\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-sass.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./css_highlight_rules\"),u=function(){var e=i.arrayToMap(o.supportType.split(\"|\")),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unquote\".split(\"|\")),n=i.arrayToMap(o.supportConstant.split(\"|\")),r=i.arrayToMap(o.supportConstantColor.split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),u=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":u.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=function(){s.call(this);var e=this.$rules.start;e[1].token==\"comment\"&&(e.splice(1,1,{onMatch:function(e,t,n){return n.unshift(this.next,-1,e.length-2,t),\"comment\"},regex:/^\\s*\\/\\*/,next:\"comment\"},{token:\"error.invalid\",regex:\"/\\\\*|[{;}]\"},{token:\"support.type\",regex:/^\\s*:[\\w\\-]+\\s/}),this.$rules.comment=[{regex:/^\\s*/,onMatch:function(e,t,n){return n[1]===-1&&(n[1]=Math.max(n[2],e.length-1)),e.length<=n[1]?(n.shift(),n.shift(),n.shift(),this.next=n.shift(),\"text\"):(this.next=\"\",\"comment\")},next:\"start\"},{defaultToken:\"comment\"}])};r.inherits(o,s),t.SassHighlightRules=o}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sass_highlight_rules\").SassHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/sass\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-scad.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/scad_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"module|if|else|for\",\"constant.language\":\"NULL\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},s.getStartRule(\"start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant\",regex:\"<[a-zA-Z0-9.]+>\"},{token:\"keyword\",regex:\"(?:use|include)\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(u,o),t.scadHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/scad\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scad_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scad_highlight_rules\").scadHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/scad\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-scala.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/scala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"case|default|do|else|for|if|match|while|throw|return|try|trye|catch|finally|yield|abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|null|override|package|private|protected|sealed|super|this|trait|type|val|var|with|assert|assume|require|print|println|printf|readLine|readBoolean|readByte|readShort|readChar|readInt|readLong|readFloat|readDouble\",t=\"true|false\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object|Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|Option|Array|Char|Byte|Int|Long|Nothing|App|Application|BufferedIterator|BigDecimal|BigInt|Console|Either|Enumeration|Equiv|Fractional|Function|IndexedSeq|Integral|Iterator|Map|Numeric|Nil|NotNull|Ordered|Ordering|PartialFunction|PartialOrdering|Product|Proxy|Range|Responder|Seq|Serializable|Set|Specializable|Stream|StringContext|Symbol|Traversable|TraversableOnce|Tuple|Vector|Pair|Triple\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"support.function\":n,\"constant.language\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"\"\"',next:\"tstring\"},{token:\"string\",regex:'\"(?=.)',next:\"string\"},{token:\"symbol.constant\",regex:\"'[\\\\w\\\\d_]+\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],string:[{token:\"escape\",regex:'\\\\\\\\\"'},{token:\"string\",regex:'\"',next:\"start\"},{token:\"string.invalid\",regex:'[^\"\\\\\\\\]*$',next:\"start\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'}],tstring:[{token:\"string\",regex:'\"{3,5}',next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.ScalaHighlightRules=o}),define(\"ace/mode/scala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/scala_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./scala_highlight_rules\").ScalaHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/scala\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-scheme.js",
    "content": "define(\"ace/mode/scheme_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"case|do|let|loop|if|else|when\",t=\"eq?|eqv?|equal?|and|or|not|null?\",n=\"#t|#f\",r=\"cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load\",i=this.createKeywordMapper({\"keyword.control\":e,\"keyword.operator\":t,\"constant.language\":n,\"support.function\":r},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\";.*$\"},{token:[\"storage.type.function-type.scheme\",\"text\",\"entity.name.function.scheme\"],regex:\"(?:\\\\b(?:(define|define-syntax|define-macro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"},{token:\"punctuation.definition.constant.character.scheme\",regex:\"#:\\\\S+\"},{token:[\"punctuation.definition.variable.scheme\",\"variable.other.global.scheme\",\"punctuation.definition.variable.scheme\"],regex:\"(\\\\*)(\\\\S*)(\\\\*)\"},{token:\"constant.numeric\",regex:\"#[xXoObB][0-9a-fA-F]+\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\"},{token:i,regex:\"[a-zA-Z_#][a-zA-Z0-9_\\\\-\\\\?\\\\!\\\\*]*\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"}],qqstring:[{token:\"constant.character.escape.scheme\",regex:\"\\\\\\\\.\"},{token:\"string\",regex:'[^\"\\\\\\\\]+',merge:!0},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\",merge:!0},{token:\"string\",regex:'\"|$',next:\"start\",merge:!0}]}};r.inherits(s,i),t.SchemeHighlightRules=s}),define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\)/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\))/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\\s+)/);return t?t[1]:\"\"}}).call(i.prototype),t.MatchingParensOutdent=i}),define(\"ace/mode/scheme\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scheme_highlight_rules\",\"ace/mode/matching_parens_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scheme_highlight_rules\").SchemeHighlightRules,o=e(\"./matching_parens_outdent\").MatchingParensOutdent,u=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.minorIndentFunctions=[\"define\",\"lambda\",\"define-macro\",\"define-syntax\",\"syntax-rules\",\"define-record-type\",\"define-structure\"],this.$toIndent=function(e){return e.split(\"\").map(function(e){return/\\s/.exec(e)?e:\" \"}).join(\"\")},this.$calculateIndent=function(e,t){var n=this.$getIndent(e),r=0,i,s;for(var o=e.length-1;o>=0;o--){s=e[o],s===\"(\"?(r--,i=!0):s===\"(\"||s===\"[\"||s===\"{\"?(r--,i=!1):(s===\")\"||s===\"]\"||s===\"}\")&&r++;if(r<0)break}if(!(r<0&&i))return r<0&&!i?this.$toIndent(e.substring(0,o+1)):r>0?(n=n.substring(0,n.length-t.length),n):n;o+=1;var u=o,a=\"\";for(;;){s=e[o];if(s===\" \"||s===\"\t\")return this.minorIndentFunctions.indexOf(a)!==-1?this.$toIndent(e.substring(0,u-1)+t):this.$toIndent(e.substring(0,o+1));if(s===undefined)return this.$toIndent(e.substring(0,u-1)+t);a+=e[o],o++}},this.getNextLineIndent=function(e,t,n){return this.$calculateIndent(t,n)},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/scheme\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-scss.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./css_highlight_rules\"),u=function(){var e=i.arrayToMap(o.supportType.split(\"|\")),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unquote\".split(\"|\")),n=i.arrayToMap(o.supportConstant.split(\"|\")),r=i.arrayToMap(o.supportConstantColor.split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),u=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":u.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"./css_completions\").CssCompletions,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new f,this.foldingRules=new a};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id=\"ace/mode/scss\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-sh.js",
    "content": "define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-sjs.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/sjs_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=new i({noES6:!0}),t=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\",n=function(e){return e.isContextAware=!0,e},r=function(e){return{token:e.token,regex:e.regex,next:n(function(t,n){return n.length===0&&n.unshift(t),n.unshift(e.next),e.next})}},s=function(e){return{token:e.token,regex:e.regex,next:n(function(e,t){return t.shift(),t[0]||\"start\"})}};this.$rules=e.$rules,this.$rules.no_regex=[{token:\"keyword\",regex:\"(waitfor|or|and|collapse|spawn|retract)\\\\b\"},{token:\"keyword.operator\",regex:\"(->|=>|\\\\.\\\\.)\"},{token:\"variable.language\",regex:\"(hold|default)\\\\b\"},r({token:\"string\",regex:\"`\",next:\"bstring\"}),r({token:\"string\",regex:'\"',next:\"qqstring\"}),r({token:\"string\",regex:'\"',next:\"qqstring\"}),{token:[\"paren.lparen\",\"text\",\"paren.rparen\"],regex:\"(\\\\{)(\\\\s*)(\\\\|)\",next:\"block_arguments\"}].concat(this.$rules.no_regex),this.$rules.block_arguments=[{token:\"paren.rparen\",regex:\"\\\\|\",next:\"no_regex\"}].concat(this.$rules.function_arguments),this.$rules.bstring=[{token:\"constant.language.escape\",regex:t},{token:\"string\",regex:\"\\\\\\\\$\",next:\"bstring\"},r({token:\"paren.lparen\",regex:\"\\\\$\\\\{\",next:\"string_interp\"}),r({token:\"paren.lparen\",regex:\"\\\\$\",next:\"bstring_interp_single\"}),s({token:\"string\",regex:\"`\"}),{defaultToken:\"string\"}],this.$rules.qqstring=[{token:\"constant.language.escape\",regex:t},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},r({token:\"paren.lparen\",regex:\"#\\\\{\",next:\"string_interp\"}),s({token:\"string\",regex:'\"'}),{defaultToken:\"string\"}];var o=[];for(var u=0;u<this.$rules.no_regex.length;u++){var a=this.$rules.no_regex[u],f=String(a.token);f.indexOf(\"paren\")==-1&&(!a.next||a.next.isContextAware)&&o.push(a)}this.$rules.string_interp=[s({token:\"paren.rparen\",regex:\"\\\\}\"}),r({token:\"paren.lparen\",regex:\"{\",next:\"string_interp\"})].concat(o),this.$rules.bstring_interp_single=[{token:[\"identifier\",\"paren.lparen\"],regex:\"(\\\\w+)(\\\\()\",next:\"bstring_interp_single_call\"},s({token:\"identifier\",regex:\"\\\\w*\"})],this.$rules.bstring_interp_single_call=[r({token:\"paren.lparen\",regex:\"\\\\(\",next:\"bstring_interp_single_call\"}),s({token:\"paren.rparen\",regex:\"\\\\)\"})].concat(o)};r.inherits(o,s),t.SJSHighlightRules=o}),define(\"ace/mode/sjs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/sjs_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./sjs_highlight_rules\").SJSHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/sjs\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-slim.js",
    "content": "define(\"ace/mode/slim_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"keyword\",regex:/^(\\s*)(\\w+):\\s*/,onMatch:function(e,t,n,r){var i=/^\\s*/.exec(r)[0],s=e.match(/^(\\s*)(\\w+):/),o=s[2];return/^(javascript|ruby|coffee|markdown|css|scss|sass|less)$/.test(o)||(o=\"\"),n.unshift(\"language-embed\",[],[i,o],t),this.token},stateName:\"language-embed\",next:[{token:\"string\",regex:/^(\\s*)/,onMatch:function(e,t,n,r){var i=n[2][0];return i.length>=e.length?(n.splice(0,3),this.next=n.shift(),this.token):(this.next=\"\",[{type:\"text\",value:i}])},next:\"\"},{token:\"string\",regex:/.+/,onMatch:function(e,t,n,i){var s=n[2][0],o=n[2][1],u=n[1];if(r[o]){var a=r[o].getTokenizer().getLineTokens(i.slice(s.length),u.slice(0));return n[1]=a.state,a.tokens}return this.token}}]},{token:\"constant.begin.javascript.filter.slim\",regex:\"^(\\\\s*)():$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(ruby):$\"},{token:\"constant.begin.coffeescript.filter.slim\",regex:\"^(\\\\s*)():$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(markdown):$\"},{token:\"constant.begin.css.filter.slim\",regex:\"^(\\\\s*)():$\"},{token:\"constant.begin.scss.filter.slim\",regex:\"^(\\\\s*)():$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(sass):$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(less):$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(erb):$\"},{token:\"keyword.html.tags.slim\",regex:\"^(\\\\s*)((:?\\\\*(\\\\w)+)|doctype html|abbr|acronym|address|applet|area|article|aside|audio|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dialog|dfn|dir|div|dl|dt|embed|fieldset|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|link|li|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|source|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video|xmp|b|u|s|em|a)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)?\\\\b\"},{token:\"keyword.slim\",regex:\"^(\\\\s*)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)\"},{token:\"string\",regex:/^(\\s*)('|\\||\\/|(\\/!))\\s*/,onMatch:function(e,t,n,r){var i=/^\\s*/.exec(r)[0];return n.length<1?n.push(this.next):n[0]=\"mlString\",n.length<2?n.push(i.length):n[1]=i.length,this.token},next:\"mlString\"},{token:\"keyword.control.slim\",regex:\"^(\\\\s*)(\\\\-|==|=)\",push:[{token:\"control.end.slim\",regex:\"$\",next:\"pop\"},{include:\"rubyline\"},{include:\"misc\"}]},{token:\"paren\",regex:\"\\\\(\",push:[{token:\"paren\",regex:\"\\\\)\",next:\"pop\"},{include:\"misc\"}]},{token:\"paren\",regex:\"\\\\[\",push:[{token:\"paren\",regex:\"\\\\]\",next:\"pop\"},{include:\"misc\"}]},{include:\"misc\"}],mlString:[{token:\"indent\",regex:/^\\s*/,onMatch:function(e,t,n){var r=n[1];return r>=e.length?(this.next=\"start\",n.splice(0)):this.next=\"mlString\",this.token},next:\"start\"},{defaultToken:\"string\"}],rubyline:[{token:\"keyword.operator.ruby.embedded.slim\",regex:\"(==|=)(<>|><|<'|'<|<|>)?|-\"},{token:\"list.ruby.operators.slim\",regex:\"(\\\\b)(for|in|do|if|else|elsif|unless|while|yield|not|and|or)\\\\b\"},{token:\"string\",regex:\"['](.)*?[']\"},{token:\"string\",regex:'[\"](.)*?[\"]'}],misc:[{token:\"class.variable.slim\",regex:\"\\\\@([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:\"list.meta.slim\",regex:\"(\\\\b)(true|false|nil)(\\\\b)\"},{token:\"keyword.operator.equals.slim\",regex:\"=\"},{token:\"string\",regex:\"['](.)*?[']\"},{token:\"string\",regex:'[\"](.)*?[\"]'}]},this.normalizeRules()};i.inherits(o,s),t.SlimHighlightRules=o}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(e){return\"(?:[^\"+s.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},f=function(){u.call(this);var e={token:\"support.function\",regex:/^\\s*(```+[^`]*|~~~+[^~]*)$/,onMatch:function(e,t,n,i){var s=e.match(/^(\\s*)([`~]+)(.*)/),o=/[\\w-]+|$/.exec(s[3])[0];return r[o]||(o=\"\"),n.unshift(\"githubblock\",[],[s[1],s[2],o],t),this.token},next:\"githubblock\"},t=[{token:\"support.function\",regex:\".*\",onMatch:function(e,t,n,i){var s=n[1],o=n[2][0],u=n[2][1],a=n[2][2],f=/^(\\s*)(`+|~+)\\s*$/.exec(e);if(f&&f[1].length<o.length+3&&f[2].length>=u.length&&f[2][0]==u[0])return n.splice(0,3),this.next=n.shift(),this.token;this.next=\"\";if(a&&r[a]){var l=r[a].getTokenizer().getLineTokens(e,s.slice(0));return n[1]=l.state,l.tokens}return this.token}}];this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s|$)/,next:\"header\"},e,{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\s*\\\\[)(\"+a(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\!?\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+a('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},e,{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:t}),this.normalizeRules()};i.inherits(f,o),t.MarkdownHighlightRules=f}),define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:[=-]+\\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]==\"`\"?e.bgTokenizer.getState(n)==\"start\"?\"end\":\"start\":\"start\":\"\"},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}function h(){var e=f.value[0];return e==\"=\"?6:e==\"-\"?5:7-f.value.search(/[^#]|$/)}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;if(r[0]==\"`\"){if(e.bgTokenizer.getState(n)!==\"start\"){while(++n<o){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(u,i,n,0)}while(n-->0){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(n,r.length,u,0)}var f,c=\"markup.heading\";if(l(n)){var p=h();while(++n<o){if(!l(n))continue;var d=h();if(d>=p)break}a=n-(!f||[\"=\",\"-\"].indexOf(f.value[0])==-1?1:2);if(a>u)while(a>u&&/^\\s*$/.test(e.getLine(a)))a--;if(a>u){var v=e.getLine(a).length;return new s(u,i,a,v)}}}}.call(o.prototype)}),define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f}),define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript\").Mode,o=e(\"./xml\").Mode,u=e(\"./html\").Mode,a=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,f=e(\"./folding/markdown\").FoldMode,l=function(){this.HighlightRules=a,this.createModeDelegates({javascript:e(\"./javascript\").Mode,html:e(\"./html\").Mode,bash:e(\"./sh\").Mode,sh:e(\"./sh\").Mode,xml:e(\"./xml\").Mode,css:e(\"./css\").Mode}),this.foldingRules=new f,this.$behaviour=this.$defaultBehaviour};r.inherits(l,i),function(){this.type=\"text\",this.blockComment={start:\"<!--\",end:\"-->\"},this.getNextLineIndent=function(e,t,n){if(e==\"listblock\"){var r=/^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(t);if(!r)return\"\";var i=r[2];return i||(i=parseInt(r[3],10)+1+\".\"),r[1]+i+r[4]}return this.$getIndent(t)},this.$id=\"ace/mode/markdown\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=\"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\",t=\"this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|own|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes|yield|export|import|default\",n=\"true|false|null|undefined|NaN|Infinity\",r=\"case|const|function|var|void|with|enum|implements|interface|let|package|private|protected|public|static\",i=\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\",s=\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|\",o=\"window|arguments|prototype|document\",u=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"invalid.illegal\":r,\"language.support.class\":i,\"language.support.function\":s,\"variable.language\":o},\"identifier\"),a={token:[\"paren.lparen\",\"variable.parameter\",\"paren.rparen\",\"text\",\"storage.type\"],regex:/(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source},f=/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"},{stateName:\"qdoc\",token:\"string\",regex:\"'''\",next:[{token:\"string\",regex:\"'''\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqdoc\",token:\"string\",regex:'\"\"\"',next:[{token:\"string\",regex:'\"\"\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qstring\",token:\"string\",regex:\"'\",next:[{token:\"string\",regex:\"'\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqstring\",token:\"string.start\",regex:'\"',next:[{token:\"string.end\",regex:'\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"js\",token:\"string\",regex:\"`\",next:[{token:\"string\",regex:\"`\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{regex:\"[{}]\",onMatch:function(e,t,n){this.next=\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift()||\"\";if(this.next.indexOf(\"string\")!=-1)return\"paren.string\"}return\"paren\"}},{token:\"string.regex\",regex:\"///\",next:\"heregex\"},{token:\"string.regex\",regex:/(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/},{token:\"comment\",regex:\"###(?!#)\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:[\"punctuation.operator\",\"text\",\"identifier\"],regex:\"(\\\\.)(\\\\s*)(\"+r+\")\"},{token:\"punctuation.operator\",regex:\"\\\\.{1,3}\"},{token:[\"keyword\",\"text\",\"language.support.class\",\"text\",\"keyword\",\"text\",\"language.support.class\"],regex:\"(class)(\\\\s+)(\"+e+\")(?:(\\\\s+)(extends)(\\\\s+)(\"+e+\"))?\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\"].concat(a.token),regex:\"(\"+e+\")(\\\\s*)([=:])(\\\\s*)\"+a.regex},a,{token:\"variable\",regex:\"@(?:\"+e+\")?\"},{token:u,regex:e},{token:\"punctuation.operator\",regex:\"\\\\,|\\\\.\"},{token:\"storage.type\",regex:\"[\\\\-=]>\"},{token:\"keyword.operator\",regex:\"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"},{token:\"paren.lparen\",regex:\"[({[]\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?///[imgy]{0,4}\",next:\"start\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{token:\"string.regex\",regex:\"\\\\S+\"}],comment:[{token:\"comment\",regex:\"###\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function l(){this.HighlightRules=r,this.$outdent=new i,this.foldingRules=new s}var r=e(\"./coffee_highlight_rules\").CoffeeHighlightRules,i=e(\"./matching_brace_outdent\").MatchingBraceOutdent,s=e(\"./folding/coffee\").FoldMode,o=e(\"../range\").Range,u=e(\"./text\").Mode,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"../lib/oop\");f.inherits(l,u),function(){var e=/(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;this.lineCommentStart=\"#\",this.blockComment={start:\"###\",end:\"###\"},this.getNextLineIndent=function(t,n,r){var i=this.$getIndent(n),s=this.getTokenizer().getLineTokens(n,t).tokens;return(!s.length||s[s.length-1].type!==\"comment\")&&t===\"start\"&&e.test(n)&&(i+=r),i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/coffee_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/coffee\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./css_highlight_rules\"),u=function(){var e=i.arrayToMap(o.supportType.split(\"|\")),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unquote\".split(\"|\")),n=i.arrayToMap(o.supportConstant.split(\"|\")),r=i.arrayToMap(o.supportConstantColor.split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),u=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":u.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"./css_completions\").CssCompletions,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new f,this.foldingRules=new a};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id=\"ace/mode/scss\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=function(){s.call(this);var e=this.$rules.start;e[1].token==\"comment\"&&(e.splice(1,1,{onMatch:function(e,t,n){return n.unshift(this.next,-1,e.length-2,t),\"comment\"},regex:/^\\s*\\/\\*/,next:\"comment\"},{token:\"error.invalid\",regex:\"/\\\\*|[{;}]\"},{token:\"support.type\",regex:/^\\s*:[\\w\\-]+\\s/}),this.$rules.comment=[{regex:/^\\s*/,onMatch:function(e,t,n){return n[1]===-1&&(n[1]=Math.max(n[2],e.length-1)),e.length<=n[1]?(n.shift(),n.shift(),n.shift(),this.next=n.shift(),\"text\"):(this.next=\"\",\"comment\")},next:\"start\"},{defaultToken:\"comment\"}])};r.inherits(o,s),t.SassHighlightRules=o}),define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sass_highlight_rules\").SassHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/sass\"}.call(u.prototype),t.Mode=u}),define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./css_highlight_rules\"),o=function(){var e=\"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|or|and|when|not\",t=e.split(\"|\"),n=s.supportType.split(\"|\"),r=this.createKeywordMapper({\"support.constant\":s.supportConstant,keyword:e,\"support.constant.color\":s.supportConstantColor,\"support.constant.fonts\":s.supportConstantFonts},\"identifier\",!0),i=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+i+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:i},{token:[\"support.function\",\"paren.lparen\",\"string\",\"paren.rparen\"],regex:\"(url)(\\\\()(.*)(\\\\))\"},{token:[\"support.function\",\"paren.lparen\"],regex:\"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"},{token:function(e){return t.indexOf(e.toLowerCase())>-1?\"keyword\":\"variable\"},regex:\"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"},{token:\"variable\",regex:\"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"},{token:function(e,t){return n.indexOf(e.toLowerCase())>-1?[\"support.type.property\",\"text\"]:[\"support.type.unknownProperty\",\"text\"]},regex:\"([a-z0-9-_]+)(\\\\s*:)\"},{token:\"keyword\",regex:\"&\"},{token:r,regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z_][a-z0-9-_]*\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(o,i),t.LessHighlightRules=o}),define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./less_highlight_rules\").LessHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./css_completions\").CssCompletions,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(\"ruleset\",t,n,r)},this.$id=\"ace/mode/less\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/slim\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/slim_highlight_rules\",\"ace/mode/javascript\",\"ace/mode/markdown\",\"ace/mode/coffee\",\"ace/mode/scss\",\"ace/mode/sass\",\"ace/mode/less\",\"ace/mode/ruby\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./slim_highlight_rules\").SlimHighlightRules,o=function(){i.call(this),this.HighlightRules=s,this.createModeDelegates({javascript:e(\"./javascript\").Mode,markdown:e(\"./markdown\").Mode,coffee:e(\"./coffee\").Mode,scss:e(\"./scss\").Mode,sass:e(\"./sass\").Mode,less:e(\"./less\").Mode,ruby:e(\"./ruby\").Mode,css:e(\"./css\").Mode})};r.inherits(o,i),function(){this.$id=\"ace/mode/slim\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-smarty.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/smarty_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=function(){i.call(this);var e={start:[{include:\"#comments\"},{include:\"#blocks\"}],\"#blocks\":[{token:\"punctuation.section.embedded.begin.smarty\",regex:\"\\\\{%?\",push:[{token:\"punctuation.section.embedded.end.smarty\",regex:\"%?\\\\}\",next:\"pop\"},{include:\"#strings\"},{include:\"#variables\"},{include:\"#lang\"},{defaultToken:\"source.smarty\"}]}],\"#comments\":[{token:[\"punctuation.definition.comment.smarty\",\"comment.block.smarty\"],regex:\"(\\\\{%?)(\\\\*)\",push:[{token:\"comment.block.smarty\",regex:\"\\\\*%?\\\\}\",next:\"pop\"},{defaultToken:\"comment.block.smarty\"}]}],\"#lang\":[{token:\"keyword.operator.smarty\",regex:\"(?:!=|!|<=|>=|<|>|===|==|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod)\\\\b\"},{token:\"constant.language.smarty\",regex:\"\\\\b(?:TRUE|FALSE|true|false)\\\\b\"},{token:\"keyword.control.smarty\",regex:\"\\\\b(?:if|else|elseif|foreach|foreachelse|section|switch|case|break|default)\\\\b\"},{token:\"variable.parameter.smarty\",regex:\"\\\\b[a-zA-Z]+=\"},{token:\"support.function.built-in.smarty\",regex:\"\\\\b(?:capture|config_load|counter|cycle|debug|eval|fetch|include_php|include|insert|literal|math|strip|rdelim|ldelim|assign|constant|block|html_[a-z_]*)\\\\b\"},{token:\"support.function.variable-modifier.smarty\",regex:\"\\\\|(?:capitalize|cat|count_characters|count_paragraphs|count_sentences|count_words|date_format|default|escape|indent|lower|nl2br|regex_replace|replace|spacify|string_format|strip_tags|strip|truncate|upper|wordwrap)\"}],\"#strings\":[{token:\"punctuation.definition.string.begin.smarty\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.smarty\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.smarty\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.smarty\"}]},{token:\"punctuation.definition.string.begin.smarty\",regex:'\"',push:[{token:\"punctuation.definition.string.end.smarty\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.smarty\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.smarty\"}]}],\"#variables\":[{token:[\"punctuation.definition.variable.smarty\",\"variable.other.global.smarty\"],regex:\"\\\\b(\\\\$)(Smarty\\\\.)\"},{token:[\"punctuation.definition.variable.smarty\",\"variable.other.smarty\"],regex:\"(\\\\$)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.smarty\",\"variable.other.property.smarty\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.smarty\",\"meta.function-call.object.smarty\",\"punctuation.definition.variable.smarty\",\"variable.other.smarty\",\"punctuation.definition.variable.smarty\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))\"}]},t=e.start;for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],t);Object.keys(e).forEach(function(t){this.$rules[t]||(this.$rules[t]=e[t])},this),this.normalizeRules()};s.metaData={fileTypes:[\"tpl\"],foldingStartMarker:\"\\\\{%?\",foldingStopMarker:\"%?\\\\}\",name:\"Smarty\",scopeName:\"text.html.smarty\"},r.inherits(s,i),t.SmartyHighlightRules=s}),define(\"ace/mode/smarty\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/smarty_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./smarty_highlight_rules\").SmartyHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/smarty\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-snippets.js",
    "content": "define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME\";this.$rules={start:[{token:\"constant.language.escape\",regex:/\\\\[\\$}`\\\\]/},{token:\"keyword\",regex:\"\\\\$(?:TM_)?(?:\"+e+\")\\\\b\"},{token:\"variable\",regex:\"\\\\$\\\\w+\"},{onMatch:function(e,t,n){return n[1]?n[1]++:n.unshift(t,1),this.tokenName},tokenName:\"markup.list\",regex:\"\\\\${\",next:\"varDecl\"},{onMatch:function(e,t,n){return n[1]?(n[1]--,n[1]||n.splice(0,2),this.tokenName):\"text\"},tokenName:\"markup.list\",regex:\"}\"},{token:\"doc.comment\",regex:/^\\${2}-{5,}$/}],varDecl:[{regex:/\\d+\\b/,token:\"constant.numeric\"},{token:\"keyword\",regex:\"(?:TM_)?(?:\"+e+\")\\\\b\"},{token:\"variable\",regex:\"\\\\w+\"},{regex:/:/,token:\"punctuation.operator\",next:\"start\"},{regex:/\\//,token:\"string.regex\",next:\"regexp\"},{regex:\"\",next:\"start\"}],regexp:[{regex:/\\\\./,token:\"escape\"},{regex:/\\[/,token:\"regex.start\",next:\"charClass\"},{regex:\"/\",token:\"string.regex\",next:\"format\"},{token:\"string.regex\",regex:\".\"}],charClass:[{regex:\"\\\\.\",token:\"escape\"},{regex:\"\\\\]\",token:\"regex.end\",next:\"regexp\"},{token:\"string.regex\",regex:\".\"}],format:[{regex:/\\\\[ulULE]/,token:\"keyword\"},{regex:/\\$\\d+/,token:\"variable\"},{regex:\"/[gim]*:?\",token:\"string.regex\",next:\"start\"},{token:\"string\",regex:\".\"}]}};r.inherits(o,s),t.SnippetHighlightRules=o;var u=function(){this.$rules={start:[{token:\"text\",regex:\"^\\\\t\",next:\"sn-start\"},{token:\"invalid\",regex:/^ \\s*/},{token:\"comment\",regex:/^#.*/},{token:\"constant.language.escape\",regex:\"^regex \",next:\"regex\"},{token:\"constant.language.escape\",regex:\"^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\\\b\"}],regex:[{token:\"text\",regex:\"\\\\.\"},{token:\"keyword\",regex:\"/\"},{token:\"empty\",regex:\"$\",next:\"start\"}]},this.embedRules(o,\"sn-\",[{token:\"text\",regex:\"^\\\\t\",next:\"sn-start\"},{onMatch:function(e,t,n){return n.splice(n.length),this.tokenName},tokenName:\"text\",regex:\"^(?!\t)\",next:\"start\"}])};r.inherits(u,s),t.SnippetGroupHighlightRules=u;var a=e(\"./folding/coffee\").FoldMode,f=function(){this.HighlightRules=u,this.foldingRules=new a,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){this.$indentWithTabs=!0,this.lineCommentStart=\"#\",this.$id=\"ace/mode/snippets\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-soy_template.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/soy_template_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=function(){i.call(this);var e={start:[{include:\"#template\"},{include:\"#if\"},{include:\"#comment-line\"},{include:\"#comment-block\"},{include:\"#comment-doc\"},{include:\"#call\"},{include:\"#css\"},{include:\"#param\"},{include:\"#print\"},{include:\"#msg\"},{include:\"#for\"},{include:\"#foreach\"},{include:\"#switch\"},{include:\"#tag\"},{include:\"text.html.basic\"}],\"#call\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.call.soy\"],regex:\"(\\\\{/?)(\\\\s*)(?=call|delcall)\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{token:[\"entity.name.tag.soy\",\"variable.parameter.soy\"],regex:\"(call|delcall)(\\\\s+[\\\\.\\\\w]+)\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\"],regex:\"\\\\b(data)(\\\\s*)(=)\"},{defaultToken:\"meta.tag.call.soy\"}]}],\"#comment-line\":[{token:[\"comment.line.double-slash.soy\",\"comment.line.double-slash.soy\"],regex:\"(//)(.*$)\"}],\"#comment-block\":[{token:\"punctuation.definition.comment.begin.soy\",regex:\"/\\\\*(?!\\\\*)\",push:[{token:\"punctuation.definition.comment.end.soy\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.soy\"}]}],\"#comment-doc\":[{token:\"punctuation.definition.comment.begin.soy\",regex:\"/\\\\*\\\\*(?!/)\",push:[{token:\"punctuation.definition.comment.end.soy\",regex:\"\\\\*/\",next:\"pop\"},{token:[\"support.type.soy\",\"text\",\"variable.parameter.soy\"],regex:\"(@param|@param\\\\?)(\\\\s+)(\\\\w+)\"},{defaultToken:\"comment.block.documentation.soy\"}]}],\"#css\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.css.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(css)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:\"support.constant.soy\",regex:\"\\\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\\\b\"},{defaultToken:\"meta.tag.css.soy\"}]}],\"#for\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.for.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(for)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword.operator.soy\",regex:\"\\\\bin\\\\b\"},{token:\"support.function.soy\",regex:\"\\\\brange\\\\b\"},{include:\"#variable\"},{include:\"#number\"},{include:\"#primitive\"},{defaultToken:\"meta.tag.for.soy\"}]}],\"#foreach\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.foreach.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(foreach)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword.operator.soy\",regex:\"\\\\bin\\\\b\"},{include:\"#variable\"},{defaultToken:\"meta.tag.foreach.soy\"}]}],\"#function\":[{token:\"support.function.soy\",regex:\"\\\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\\\b\"}],\"#if\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.if.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(if|elseif)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{include:\"#operator\"},{include:\"#function\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{defaultToken:\"meta.tag.if.soy\"}]}],\"#namespace\":[{token:[\"entity.name.tag.soy\",\"text\",\"variable.parameter.soy\"],regex:\"(namespace|delpackage)(\\\\s+)([\\\\w\\\\.]+)\"}],\"#number\":[{token:\"constant.numeric\",regex:\"[\\\\d]+\"}],\"#operator\":[{token:\"keyword.operator.soy\",regex:\"==|!=|\\\\band\\\\b|\\\\bor\\\\b|\\\\bnot\\\\b|-|\\\\+|/|\\\\?:\"}],\"#param\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.param.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(param)\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\"],regex:\"\\\\b([\\\\w]+)(\\\\s*)((?::)?)\"},{defaultToken:\"meta.tag.param.soy\"}]}],\"#primitive\":[{token:\"constant.language.soy\",regex:\"\\\\b(?:null|false|true)\\\\b\"}],\"#msg\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.msg.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(msg)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\"],regex:\"\\\\b(meaning|desc)(\\\\s*)(=)\"},{defaultToken:\"meta.tag.msg.soy\"}]}],\"#print\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.print.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(print)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{include:\"#print-parameter\"},{include:\"#number\"},{include:\"#primitive\"},{include:\"#attribute-lookup\"},{defaultToken:\"meta.tag.print.soy\"}]}],\"#print-parameter\":[{token:\"keyword.operator.soy\",regex:\"\\\\|\"},{token:\"variable.parameter.soy\",regex:\"noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate\"}],\"#special-character\":[{token:\"support.constant.soy\",regex:\"\\\\bsp\\\\b|\\\\bnil\\\\b|\\\\\\\\r|\\\\\\\\n|\\\\\\\\t|\\\\blb\\\\b|\\\\brb\\\\b\"}],\"#string-quoted-double\":[{token:\"string.quoted.double\",regex:'\"[^\"]*\"'}],\"#string-quoted-single\":[{token:\"string.quoted.single\",regex:\"'[^']*'\"}],\"#switch\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.switch.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(switch|case)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{include:\"#function\"},{include:\"#number\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{defaultToken:\"meta.tag.switch.soy\"}]}],\"#attribute-lookup\":[{token:\"punctuation.definition.attribute-lookup.begin.soy\",regex:\"\\\\[\",push:[{token:\"punctuation.definition.attribute-lookup.end.soy\",regex:\"\\\\]\",next:\"pop\"},{include:\"#variable\"},{include:\"#function\"},{include:\"#operator\"},{include:\"#number\"},{include:\"#primitive\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"}]}],\"#tag\":[{token:\"punctuation.definition.tag.begin.soy\",regex:\"\\\\{\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#namespace\"},{include:\"#variable\"},{include:\"#special-character\"},{include:\"#tag-simple\"},{include:\"#function\"},{include:\"#operator\"},{include:\"#attribute-lookup\"},{include:\"#number\"},{include:\"#primitive\"},{include:\"#print-parameter\"}]}],\"#tag-simple\":[{token:\"entity.name.tag.soy\",regex:\"{{\\\\s*(?:literal|else|ifempty|default)\\\\s*(?=\\\\})\"}],\"#template\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.template.soy\"],regex:\"(\\\\{/?)(\\\\s*)(?=template|deltemplate)\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:[\"entity.name.tag.soy\",\"text\",\"entity.name.function.soy\"],regex:\"(template|deltemplate)(\\\\s+)([\\\\.\\\\w]+)\",originalRegex:\"(?<=template|deltemplate)\\\\s+([\\\\.\\\\w]+)\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.double.soy\"],regex:'\\\\b(private)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\")'},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.single.soy\"],regex:\"\\\\b(private)(\\\\s*)(=)(\\\\s*)('true'|'false')\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.double.soy\"],regex:'\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\"|\"contextual\")'},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.single.soy\"],regex:\"\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)('true'|'false'|'contextual')\"},{defaultToken:\"meta.tag.template.soy\"}]}],\"#variable\":[{token:\"variable.other.soy\",regex:\"\\\\$[\\\\w\\\\.]+\"}]};for(var t in e)this.$rules[t]?this.$rules[t].unshift.apply(this.$rules[t],e[t]):this.$rules[t]=e[t];this.normalizeRules()};s.metaData={comment:\"SoyTemplate\",fileTypes:[\"soy\"],firstLineMatch:\"\\\\{\\\\s*namespace\\\\b\",foldingStartMarker:\"\\\\{\\\\s*template\\\\s+[^\\\\}]*\\\\}\",foldingStopMarker:\"\\\\{\\\\s*/\\\\s*template\\\\s*\\\\}\",name:\"SoyTemplate\",scopeName:\"source.soy\"},r.inherits(s,i),t.SoyTemplateHighlightRules=s}),define(\"ace/mode/soy_template\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/soy_template_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./soy_template_highlight_rules\").SoyTemplateHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/soy_template\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-space.js",
    "content": "define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/space_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"empty_line\",regex:/ */,next:\"key\"},{token:\"empty_line\",regex:/$/,next:\"key\"}],key:[{token:\"variable\",regex:/\\S+/},{token:\"empty_line\",regex:/$/,next:\"start\"},{token:\"keyword.operator\",regex:/ /,next:\"value\"}],value:[{token:\"keyword.operator\",regex:/$/,next:\"start\"},{token:\"string\",regex:/[^$]/}]}};r.inherits(s,i),t.SpaceHighlightRules=s}),define(\"ace/mode/space\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/coffee\",\"ace/mode/space_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./folding/coffee\").FoldMode,o=e(\"./space_highlight_rules\").SpaceHighlightRules,u=function(){this.HighlightRules=o,this.foldingRules=new s,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.$id=\"ace/mode/space\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-sparql.js",
    "content": "define(\"ace/mode/sparql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comments\"},{include:\"#strings\"},{include:\"#string-language-suffixes\"},{include:\"#string-datatype-suffixes\"},{include:\"#logic-operators\"},{include:\"#relative-urls\"},{include:\"#xml-schema-types\"},{include:\"#rdf-schema-types\"},{include:\"#owl-types\"},{include:\"#qnames\"},{include:\"#keywords\"},{include:\"#built-in-functions\"},{include:\"#variables\"},{include:\"#boolean-literal\"},{include:\"#punctuation-operators\"}],\"#boolean-literal\":[{token:\"constant.language.boolean.sparql\",regex:/true|false/}],\"#built-in-functions\":[{token:\"support.function.sparql\",regex:/[Aa][Bb][Ss]|[Aa][Vv][Gg]|[Bb][Nn][Oo][Dd][Ee]|[Bb][Oo][Uu][Nn][Dd]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Aa][Ll][Ee][Ss][Cc][Ee]|[Cc][Oo][Nn][Cc][Aa][Tt]|[Cc][Oo][Nn][Tt][Aa][Ii][Nn][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Dd][Aa][Tt][Aa][Tt][Yy][Pp][Ee]|[Dd][Aa][Yy]|[Ee][Nn][Cc][Oo][Dd][Ee]_[Ff][Oo][Rr]_[Uu][Rr][Ii]|[Ee][Xx][Ii][Ss][Tt][Ss]|[Ff][Ll][Oo][Oo][Rr]|[Gg][Rr][Oo][Uu][Pp]_[Cc][Oo][Nn][Cc][Aa][Tt]|[Hh][Oo][Uu][Rr][Ss]|[Ii][Ff]|[Ii][Rr][Ii]|[Ii][Ss][Bb][Ll][Aa][Nn][Kk]|[Ii][Ss][Ii][Rr][Ii]|[Ii][Ss][Ll][Ii][Tt][Ee][Rr][Aa][Ll]|[Ii][Ss][Nn][Uu][Mm][Ee][Rr][Ii][Cc]|[Ii][Ss][Uu][Rr][Ii]|[Ll][Aa][Nn][Gg]|[Ll][Aa][Nn][Gg][Mm][Aa][Tt][Cc][Hh][Ee][Ss]|[Ll][Cc][Aa][Ss][Ee]|[Mm][Aa][Xx]|[Mm][Dd]5|[Mm][Ii][Nn]|[Mm][Ii][Nn][Uu][Tt][Ee][Ss]|[Mm][Oo][Nn][Tt][Hh]|[Nn][Oo][Ww]|[Rr][Aa][Nn][Dd]|[Rr][Ee][Gg][Ee][Xx]|[Rr][Ee][Pp][Ll][Aa][Cc][Ee]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Aa][Mm][Ee][Tt][Ee][Rr][Mm]|[Ss][Aa][Mm][Pp][Ll][Ee]|[Ss][Ee][Cc][Oo][Nn][Dd][Ss]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Hh][Aa](?:1|256|384|512)|[Ss][Tt][Rr]|[Ss][Tt][Rr][Aa][Ff][Tt][Ee][Rr]|[Ss][Tt][Rr][Bb][Ee][Ff][Oo][Rr][Ee]|[Ss][Tt][Rr][Dd][Tt]|[Ss][Tt][Rr][Ee][Nn][Dd][Ss]|[Ss][Tt][Rr][Ll][Aa][Nn][Gg]|[Ss][Tt][Rr][Ll][Ee][Nn]|[Ss][Tt][Rr][Ss][Tt][Aa][Rr][Tt][Ss]|[Ss][Tt][Rr][Uu][Uu][Ii][Dd]|[Ss][Uu][Bb][Ss][Tt][Rr]|[Ss][Uu][Mm]|[Tt][Ii][Mm][Ee][Zz][Oo][Nn][Ee]|[Tt][Zz]|[Uu][Cc][Aa][Ss][Ee]|[Uu][Rr][Ii]|[Uu][Uu][Ii][Dd]|[Yy][Ee][Aa][Rr]/}],\"#comments\":[{token:[\"punctuation.definition.comment.sparql\",\"comment.line.hash.sparql\"],regex:/(#)(.*$)/}],\"#keywords\":[{token:\"keyword.other.sparql\",regex:/[Aa][Dd][Dd]|[Aa][Ll][Ll]|[Aa][Ss]|[As][Ss][Cc]|[Aa][Ss][Kk]|[Bb][Aa][Ss][Ee]|[Bb][Ii][Nn][Dd]|[Bb][Yy]|[Cc][Ll][Ee][Aa][Rr]|[Cc][Oo][Nn][Ss][Tt][Rr][Uu][Cc][Tt]|[Cc][Oo][Pp][Yy]|[Cc][Rr][Ee][Aa][Tt][Ee]|[Dd][Aa][Tt][Aa]|[Dd][Ee][Ff][Aa][Uu][Ll][Tt]|[Dd][Ee][Ll][Ee][Tt][Ee]|[Dd][Ee][Sc][Cc]|[Dd][Ee][Ss][Cc][Rr][Ii][Bb][Ee]|[Dd][Ii][Ss][Tt][Ii][Nn][Cc][Tt]|[Dd][Rr][Oo][Pp]|[Ff][Ii][Ll][Tt][Ee][Rr]|[Ff][Rr][Oo][Mm]|[Gg][Rr][Aa][Pp][Hh]|[Gg][Rr][Oo][Uu][Pp]|[Hh][Aa][Vv][Ii][Nn][Gg]|[Ii][Nn][Ss][Ee][Rr][Tt]|[Ll][Ii][Mm][Ii][Tt]|[Ll][Oo][Aa][Dd]|[Mm][Ii][Nn][Uu][Ss]|[Mm][Oo][Vv][Ee]|[Nn][Aa][Mm][Ee][Dd]|[Oo][Ff][Ff][Ss][Ee][Tt]|[Oo][Pp][Tt][Ii][Oo][Nn][Aa][Ll]|[Oo][Rr][Dd][Ee][Rr]|[Pp][Rr][Ee][Ff][Ii][Xx]|[Rr][Ee][Dd][Uu][Cc][Ee][Dd]|[Ss][Ee][Ll][Ee][Cc][Tt]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Ee][Rr][Vv][Ii][Cc][Ee]|[Ss][Ii][Ll][Ee][Nn][Tt]|[Tt][Oo]|[Uu][Nn][Dd][Ee][Ff]|[Uu][Nn][Ii][Oo][Nn]|[Uu][Ss][Ii][Nn][Gg]|[Vv][Aa][Ll][Uu][Ee][Ss]|[Ww][He][Ee][Rr][Ee]|[Ww][Ii][Tt][Hh]/}],\"#logic-operators\":[{token:\"keyword.operator.logical.sparql\",regex:/\\|\\||&&|=|!=|<|>|<=|>=|(?:^|!?\\s)IN(?:!?\\s|$)|(?:^|!?\\s)NOT(?:!?\\s|$)|-|\\+|\\*|\\/|\\!/}],\"#owl-types\":[{token:\"support.type.datatype.owl.sparql\",regex:/owl:[a-zA-Z]+/}],\"#punctuation-operators\":[{token:\"keyword.operator.punctuation.sparql\",regex:/;|,|\\.|\\(|\\)|\\{|\\}|\\|/}],\"#qnames\":[{token:\"entity.name.other.qname.sparql\",regex:/(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/}],\"#rdf-schema-types\":[{token:\"support.type.datatype.rdf.schema.sparql\",regex:/rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/}],\"#relative-urls\":[{token:\"string.quoted.other.relative.url.sparql\",regex:/</,push:[{token:\"string.quoted.other.relative.url.sparql\",regex:/>/,next:\"pop\"},{defaultToken:\"string.quoted.other.relative.url.sparql\"}]}],\"#string-datatype-suffixes\":[{token:\"keyword.operator.datatype.suffix.sparql\",regex:/\\^\\^/}],\"#string-language-suffixes\":[{token:[\"keyword.operator.language.suffix.sparql\",\"constant.language.suffix.sparql\"],regex:/(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/}],\"#strings\":[{token:\"string.quoted.triple.sparql\",regex:/\"\"\"/,push:[{token:\"string.quoted.triple.sparql\",regex:/\"\"\"/,next:\"pop\"},{defaultToken:\"string.quoted.triple.sparql\"}]},{token:\"string.quoted.double.sparql\",regex:/\"/,push:[{token:\"string.quoted.double.sparql\",regex:/\"/,next:\"pop\"},{token:\"invalid.string.newline\",regex:/$/},{token:\"constant.character.escape.sparql\",regex:/\\\\./},{defaultToken:\"string.quoted.double.sparql\"}]}],\"#variables\":[{token:\"variable.other.sparql\",regex:/(?:\\?|\\$)[-_a-zA-Z0-9]+/}],\"#xml-schema-types\":[{token:\"support.type.datatype.schema.sparql\",regex:/xsd?:[a-z][a-zA-Z]+/}]},this.normalizeRules()};s.metaData={fileTypes:[\"rq\",\"sparql\"],name:\"SPARQL\",scopeName:\"source.sparql\"},r.inherits(s,i),t.SPARQLHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/sparql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sparql_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sparql_highlight_rules\").SPARQLHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/sparql\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-sql.js",
    "content": "define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|foreign|not|references|default|null|inner|cross|natural|database|drop|grant\",t=\"true|false\",n=\"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl\",r=\"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|money|real|number|integer\",i=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t,\"storage.type\":r},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",start:\"/\\\\*\",end:\"\\\\*/\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"string\",regex:\"`.*?`\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]},this.normalizeRules()};r.inherits(s,i),t.SqlHighlightRules=s}),define(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sql_highlight_rules\").SqlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/sql\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-sqlserver.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/sqlserver_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"ALL|AND|ANY|BETWEEN|EXISTS|IN|LIKE|NOT|OR|SOME\";e+=\"|NULL|IS|APPLY|INNER|OUTER|LEFT|RIGHT|JOIN|CROSS\";var t=\"OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|AVG|CHECKSUM_AGG|COUNT|COUNT_BIG|GROUPING|GROUPING_ID|MAX|MIN|STDEV|STDEVP|SUM|VAR|VARP|DENSE_RANK|NTILE|RANK|ROW_NUMBER@@DATEFIRST|@@DBTS|@@LANGID|@@LANGUAGE|@@LOCK_TIMEOUT|@@MAX_CONNECTIONS|@@MAX_PRECISION|@@NESTLEVEL|@@OPTIONS|@@REMSERVER|@@SERVERNAME|@@SERVICENAME|@@SPID|@@TEXTSIZE|@@VERSION|CAST|CONVERT|PARSE|TRY_CAST|TRY_CONVERT|TRY_PARSE@@CURSOR_ROWS|@@FETCH_STATUS|CURSOR_STATUS|@@DATEFIRST|@@LANGUAGE|CURRENT_TIMESTAMP|DATEADD|DATEDIFF|DATEFROMPARTS|DATENAME|DATEPART|DATETIME2FROMPARTS|DATETIMEFROMPARTS|DATETIMEOFFSETFROMPARTS|DAY|EOMONTH|GETDATE|GETUTCDATE|ISDATE|MONTH|SET DATEFIRST|SET DATEFORMAT|SET LANGUAGE|SMALLDATETIMEFROMPARTS|SP_HELPLANGUAGE|SWITCHOFFSET|SYSDATETIME|SYSDATETIMEOFFSET|SYSUTCDATETIME|TIMEFROMPARTS|TODATETIMEOFFSET|YEAR|CHOOSE|IIF|ABS|ACOS|ASIN|ATAN|ATN2|CEILING|COS|COT|DEGREES|EXP|FLOOR|LOG|LOG10|PI|POWER|RADIANS|RAND|ROUND|SIGN|SIN|SQRT|SQUARE|TAN|@@PROCID|APPLOCK_MODE|APPLOCK_TEST|APP_NAME|ASSEMBLYPROPERTY|COLUMNPROPERTY|COL_LENGTH|COL_NAME|DATABASEPROPERTYEX|DATABASE_PRINCIPAL_ID|DB_ID|DB_NAME|FILEGROUPPROPERTY|FILEGROUP_ID|FILEGROUP_NAME|FILEPROPERTY|FILE_ID|FILE_IDEX|FILE_NAME|FULLTEXTCATALOGPROPERTY|FULLTEXTSERVICEPROPERTY|INDEXKEY_PROPERTY|INDEXPROPERTY|INDEX_COL|OBJECTPROPERTY|OBJECTPROPERTYEX|OBJECT_DEFINITION|OBJECT_ID|OBJECT_NAME|OBJECT_SCHEMA_NAME|ORIGINAL_DB_NAME|PARSENAME|SCHEMA_ID|SCHEMA_NAME|SCOPE_IDENTITY|SERVERPROPERTY|STATS_DATE|TYPEPROPERTY|TYPE_ID|TYPE_NAME|CERTENCODED|CERTPRIVATEKEY|CURRENT_USER|DATABASE_PRINCIPAL_ID|HAS_PERMS_BY_NAME|IS_MEMBER|IS_ROLEMEMBER|IS_SRVROLEMEMBER|ORIGINAL_LOGIN|PERMISSIONS|PWDCOMPARE|PWDENCRYPT|SCHEMA_ID|SCHEMA_NAME|SESSION_USER|SUSER_ID|SUSER_NAME|SUSER_SID|SUSER_SNAME|SYS.FN_BUILTIN_PERMISSIONS|SYS.FN_GET_AUDIT_FILE|SYS.FN_MY_PERMISSIONS|SYSTEM_USER|USER_ID|USER_NAME|ASCII|CHAR|CHARINDEX|CONCAT|DIFFERENCE|FORMAT|LEN|LOWER|LTRIM|NCHAR|PATINDEX|QUOTENAME|REPLACE|REPLICATE|REVERSE|RTRIM|SOUNDEX|SPACE|STR|STUFF|SUBSTRING|UNICODE|UPPER|$PARTITION|@@ERROR|@@IDENTITY|@@PACK_RECEIVED|@@ROWCOUNT|@@TRANCOUNT|BINARY_CHECKSUM|CHECKSUM|CONNECTIONPROPERTY|CONTEXT_INFO|CURRENT_REQUEST_ID|ERROR_LINE|ERROR_MESSAGE|ERROR_NUMBER|ERROR_PROCEDURE|ERROR_SEVERITY|ERROR_STATE|FORMATMESSAGE|GETANSINULL|GET_FILESTREAM_TRANSACTION_CONTEXT|HOST_ID|HOST_NAME|ISNULL|ISNUMERIC|MIN_ACTIVE_ROWVERSION|NEWID|NEWSEQUENTIALID|ROWCOUNT_BIG|XACT_STATE|@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|PATINDEX|TEXTPTR|TEXTVALID|COALESCE|NULLIF\",n=\"BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML\",r=\"sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool\",s=\"ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE\";s+=\"|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT\",s+=\"|LOOP|HASH|MERGE|REMOTE\",s+=\"|TRY|CATCH|THROW\",s+=\"|TYPE\",s=s.split(\"|\"),s=s.filter(function(r,i,s){return e.split(\"|\").indexOf(r)===-1&&t.split(\"|\").indexOf(r)===-1&&n.split(\"|\").indexOf(r)===-1}),s=s.sort().join(\"|\");var o=this.createKeywordMapper({\"constant.language\":e,\"storage.type\":n,\"support.function\":t,\"support.storedprocedure\":r,keyword:s},\"identifier\",!0),u=\"SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT\".split(\"|\"),a=\"READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE\".split(\"|\");for(var f=0;f<a.length;f++)u.push(\"SET TRANSACTION ISOLATION LEVEL \"+a[f]);this.$rules={start:[{token:\"string.start\",regex:\"'\",next:[{token:\"constant.language.escape\",regex:/''/},{token:\"string.end\",next:\"start\",regex:\"'\"},{defaultToken:\"string\"}]},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",start:\"/\\\\*\",end:\"\\\\*/\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:o,regex:\"@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b(?!])\"},{token:\"constant.class\",regex:\"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=|\\\\*\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"punctuation\",regex:\",|;\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}]};for(var f=0;f<u.length;f++)this.$rules.start.unshift({token:\"set.statement\",regex:u[f]});this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules();var l=[],c=function(e,t){e.forEach(function(e){l.push({name:e,value:e,score:0,meta:t})})};c(r.split(\"|\"),\"procedure\"),c(e.split(\"|\"),\"operator\"),c(t.split(\"|\"),\"function\"),c(n.split(\"|\"),\"type\"),c(u,\"statement\"),c(s.split(\"|\"),\"keyword\"),this.completions=l};r.inherits(o,s),t.SqlHighlightRules=o}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/folding/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./cstyle\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\\bCASE\\b|\\bBEGIN\\b)|^\\s*(\\/\\*)/i,this.startRegionRe=/^\\s*(\\/\\*|--)#?region\\b/,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.getBeginEndBlock(e,n,o,s[1]);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;return},this.getBeginEndBlock=function(e,t,n,r){var s={row:t,column:n+r.length},o=e.getLength(),u,a=1,f=/(\\bCASE\\b|\\bBEGIN\\b)|(\\bEND\\b)/i;while(++t<o){u=e.getLine(t);var l=f.exec(u);if(!l)continue;l[1]?a++:a--;if(!a)break}var c=t;if(c>s.row)return new i(s.row,s.column,c,u.length)}}.call(o.prototype)}),define(\"ace/mode/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sqlserver_highlight_rules\",\"ace/mode/folding/sqlserver\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sqlserver_highlight_rules\").SqlHighlightRules,o=e(\"./folding/sqlserver\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.getCompletions=function(e,t,n,r){return t.$mode.$highlightRules.completions},this.$id=\"ace/mode/sql\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-stylus.js",
    "content": "define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/stylus_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./css_highlight_rules\"),o=function(){var e=this.createKeywordMapper({\"support.type\":s.supportType,\"support.function\":s.supportFunction,\"support.constant\":s.supportConstant,\"support.constant.color\":s.supportConstantColor,\"support.constant.fonts\":s.supportConstantFonts},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:[\"entity.name.function.stylus\",\"text\"],regex:\"^([-a-zA-Z_][-\\\\w]*)?(\\\\()\"},{token:[\"entity.other.attribute-name.class.stylus\"],regex:\"\\\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*\"},{token:[\"entity.language.stylus\"],regex:\"^ *&\"},{token:[\"variable.language.stylus\"],regex:\"(arguments)\"},{token:[\"keyword.stylus\"],regex:\"@[-\\\\w]+\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:s.pseudoElements},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:s.pseudoClasses},{token:[\"entity.name.tag.stylus\"],regex:\"(?:\\\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\\\b)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation.definition.entity.stylus\",\"entity.other.attribute-name.id.stylus\"],regex:\"(#)([a-zA-Z][a-zA-Z0-9_-]*)\"},{token:\"meta.vendor-prefix.stylus\",regex:\"-webkit-|-moz\\\\-|-ms-|-o-\"},{token:\"keyword.control.stylus\",regex:\"(?:!important|for|in|return|true|false|null|if|else|unless|return)\\\\b\"},{token:\"keyword.operator.stylus\",regex:\"!|~|\\\\+|-|(?:\\\\*)?\\\\*|\\\\/|%|(?:\\\\.)\\\\.\\\\.|<|>|(?:=|:|\\\\?|\\\\+|-|\\\\*|\\\\/|%|<|>)?=|!=\"},{token:\"keyword.operator.stylus\",regex:\"(?:in|is(?:nt)?|not)\\\\b\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:s.numRe},{token:\"keyword\",regex:\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\\\\b\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"}],qstring:[{token:\"string\",regex:\"[^'\\\\\\\\]+\"},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"}]}};r.inherits(o,i),t.StylusHighlightRules=o}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/stylus\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/stylus_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./stylus_highlight_rules\").StylusHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/stylus\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-svg.js",
    "content": "define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/svg_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./xml_highlight_rules\").XmlHighlightRules,o=function(){s.call(this),this.embedTagRules(i,\"js-\",\"script\"),this.normalizeRules()};r.inherits(o,s),t.SvgHighlightRules=o}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/svg\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/xml\",\"ace/mode/javascript\",\"ace/mode/svg_highlight_rules\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./xml\").Mode,s=e(\"./javascript\").Mode,o=e(\"./svg_highlight_rules\").SvgHighlightRules,u=e(\"./folding/mixed\").FoldMode,a=e(\"./folding/xml\").FoldMode,f=e(\"./folding/cstyle\").FoldMode,l=function(){i.call(this),this.HighlightRules=o,this.createModeDelegates({\"js-\":s}),this.foldingRules=new u(new a,{\"js-\":new f})};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.$id=\"ace/mode/svg\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-swift.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/swift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){function t(e,t){var n=t.nestable||t.interpolation,r=t.interpolation&&t.interpolation.nextState||\"start\",s={regex:e+(t.multiline?\"\":\"(?=.)\"),token:\"string.start\"},o=[t.escape&&{regex:t.escape,token:\"character.escape\"},t.interpolation&&{token:\"paren.quasi.start\",regex:i.escapeRegExp(t.interpolation.lead+t.interpolation.open),push:r},t.error&&{regex:t.error,token:\"error.invalid\"},{regex:e+(t.multiline?\"\":\"|$\"),token:\"string.end\",next:n?\"pop\":\"start\"},{defaultToken:\"string\"}].filter(Boolean);n?s.push=o:s.next=o;if(!t.interpolation)return s;var u=t.interpolation.open,a=t.interpolation.close,f={regex:\"[\"+i.escapeRegExp(u+a)+\"]\",onMatch:function(e,t,n){this.next=e==u?this.nextState:\"\";if(e==u&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==a&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==u?\"paren.lparen\":\"paren.rparen\"},nextState:r};return[f,s]}function n(){return[{token:\"comment\",regex:\"\\\\/\\\\/(?=.)\",next:[s.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}]},s.getStartRule(\"doc-start\"),{token:\"comment.start\",regex:/\\/\\*/,stateName:\"nested_comment\",push:[s.getTagRule(),{token:\"comment.start\",regex:/\\/\\*/,push:\"nested_comment\"},{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var e=this.createKeywordMapper({\"variable.language\":\"\",keyword:\"__COLUMN__|__FILE__|__FUNCTION__|__LINE__|as|associativity|break|case|class|continue|default|deinit|didSet|do|dynamicType|else|enum|extension|fallthrough|for|func|get|if|import|in|infix|init|inout|is|left|let|let|mutating|new|none|nonmutating|operator|override|postfix|precedence|prefix|protocol|return|right|safe|Self|self|set|struct|subscript|switch|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|convenience|dynamic|final|infix|lazy|mutating|nonmutating|optional|override|postfix|prefix|required|static|guard|defer\",\"storage.type\":\"bool|double|Double|extension|float|Float|int|Int|open|internal|fileprivate|private|public|string|String\",\"constant.language\":\"false|Infinity|NaN|nil|no|null|null|off|on|super|this|true|undefined|yes\",\"support.function\":\"\"},\"identifier\");this.$rules={start:[t('\"',{escape:/\\\\(?:[0\\\\tnr\"']|u{[a-fA-F1-9]{0,8}})/,interpolation:{lead:\"\\\\\",open:\"(\",close:\")\"},error:/\\\\./,multiline:!1}),n(),{regex:/@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,token:\"variable.parameter\"},{regex:/[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,token:e},{token:\"constant.numeric\",regex:/[+-]?(?:0(?:b[01]+|o[0-7]+|x[\\da-fA-F])|\\d+(?:(?:\\.\\d*)?(?:[PpEe][+-]?\\d+)?)\\b)/},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,o),t.HighlightRules=u}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/swift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/swift_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./swift_highlight_rules\").HighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\",nestable:!0},this.$id=\"ace/mode/swift\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-tcl.js",
    "content": "define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/tcl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"#.*\\\\\\\\$\",next:\"commentfollow\"},{token:\"comment\",regex:\"#.*$\"},{token:\"support.function\",regex:\"[\\\\\\\\]$\",next:\"splitlineStart\"},{token:\"text\",regex:/\\\\(?:[\"{}\\[\\]$\\\\])/},{token:\"text\",regex:\"^|[^{][;][^}]|[/\\r/]\",next:\"commandItem\"},{token:\"string\",regex:'[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[ ]*[\"]',next:\"qqstring\"},{token:\"variable.instance\",regex:\"[$]\",next:\"variable\"},{token:\"support.function\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"},{token:\"identifier\",regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"paren.lparen\",regex:\"[[{]\",next:\"commandItem\"},{token:\"paren.lparen\",regex:\"[(]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],commandItem:[{token:\"comment\",regex:\"#.*\\\\\\\\$\",next:\"commentfollow\"},{token:\"comment\",regex:\"#.*$\",next:\"start\"},{token:\"string\",regex:'[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"variable.instance\",regex:\"[$]\",next:\"variable\"},{token:\"support.function\",regex:\"(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])\",next:\"commandItem\"},{token:\"support.function\",regex:\"[a-zA-Z0-9_/]+(?:[:][:])\",next:\"commandItem\"},{token:\"support.function\",regex:\"(?:[:][:])\",next:\"commandItem\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"support.function\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"},{token:\"keyword\",regex:\"[a-zA-Z0-9_/]+\",next:\"start\"}],commentfollow:[{token:\"comment\",regex:\".*\\\\\\\\$\",next:\"commentfollow\"},{token:\"comment\",regex:\".+\",next:\"start\"}],splitlineStart:[{token:\"text\",regex:\"^.\",next:\"start\"}],variable:[{token:\"variable.instance\",regex:\"[a-zA-Z_\\\\d]+(?:[(][a-zA-Z_\\\\d]+[)])?\",next:\"start\"},{token:\"variable.instance\",regex:\"{?[a-zA-Z_\\\\d]+}?\",next:\"start\"}],qqstring:[{token:\"string\",regex:'(?:[^\\\\\\\\]|\\\\\\\\.)*?[\"]',next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(s,i),t.TclHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/tcl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/cstyle\",\"ace/mode/tcl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./folding/cstyle\").FoldMode,o=e(\"./tcl_highlight_rules\").TclHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=function(){this.HighlightRules=o,this.$outdent=new u,this.foldingRules=new s,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/tcl\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-terraform.js",
    "content": "define(\"ace/mode/terraform_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"storage.function.terraform\"],regex:\"\\\\b(output|resource|data|variable|module|export)\\\\b\"},{token:\"variable.terraform\",regex:\"\\\\$\\\\s\",push:[{token:\"keyword.terraform\",regex:\"(-var-file|-var)\"},{token:\"variable.terraform\",regex:\"\\\\n|$\",next:\"pop\"},{include:\"strings\"},{include:\"variables\"},{include:\"operators\"},{defaultToken:\"text\"}]},{token:\"language.support.class\",regex:\"\\\\b(timeouts|provider|connection|provisioner|lifecycleprovider|atlas)\\\\b\"},{token:\"singleline.comment.terraform\",regex:\"#(.)*$\"},{token:\"multiline.comment.begin.terraform\",regex:\"^\\\\s*\\\\/\\\\*\",push:\"blockComment\"},{token:\"storage.function.terraform\",regex:\"^\\\\s*(locals|terraform)\\\\s*{\"},{token:\"paren.lpar\",regex:\"[[({]\"},{token:\"paren.rpar\",regex:\"[\\\\])}]\"},{include:\"constants\"},{include:\"strings\"},{include:\"operators\"},{include:\"variables\"}],blockComment:[{regex:\"^\\\\s*\\\\/\\\\*\",token:\"multiline.comment.begin.terraform\",push:\"blockComment\"},{regex:\"\\\\*\\\\/\\\\s*$\",token:\"multiline.comment.end.terraform\",next:\"pop\"},{defaultToken:\"comment\"}],constants:[{token:\"constant.language.terraform\",regex:\"\\\\b(true|false|yes|no|on|off|EOF)\\\\b\"},{token:\"constant.numeric.terraform\",regex:\"(\\\\b([0-9]+)([kKmMgG]b?)?\\\\b)|(\\\\b(0x[0-9A-Fa-f]+)([kKmMgG]b?)?\\\\b)\"}],variables:[{token:[\"variable.assignment.terraform\",\"keyword.operator\"],regex:\"\\\\b([a-zA-Z_]+)(\\\\s*=)\"}],interpolated_variables:[{token:\"variable.terraform\",regex:\"\\\\b(var|self|count|path|local)\\\\b(?:\\\\.*[a-zA-Z_-]*)?\"}],strings:[{token:\"punctuation.quote.terraform\",regex:\"'\",push:[{token:\"punctuation.quote.terraform\",regex:\"'\",next:\"pop\"},{include:\"escaped_chars\"},{defaultToken:\"string\"}]},{token:\"punctuation.quote.terraform\",regex:'\"',push:[{token:\"punctuation.quote.terraform\",regex:'\"',next:\"pop\"},{include:\"interpolation\"},{include:\"escaped_chars\"},{defaultToken:\"string\"}]}],escaped_chars:[{token:\"constant.escaped_char.terraform\",regex:\"\\\\\\\\.\"}],operators:[{token:\"keyword.operator\",regex:\"\\\\?|:|==|!=|>|<|>=|<=|&&|\\\\|\\\\||!|%|&|\\\\*|\\\\+|\\\\-|/|=\"}],interpolation:[{token:\"punctuation.interpolated.begin.terraform\",regex:\"\\\\$?\\\\$\\\\{\",push:[{token:\"punctuation.interpolated.end.terraform\",regex:\"\\\\}\",next:\"pop\"},{include:\"interpolated_variables\"},{include:\"operators\"},{include:\"constants\"},{include:\"strings\"},{include:\"functions\"},{include:\"parenthesis\"},{defaultToken:\"punctuation\"}]}],functions:[{token:\"keyword.function.terraform\",regex:\"\\\\b(abs|basename|base64decode|base64encode|base64gzip|base64sha256|base64sha512|bcrypt|ceil|chomp|chunklist|cidrhost|cidrnetmask|cidrsubnet|coalesce|coalescelist|compact|concat|contains|dirname|distinct|element|file|floor|flatten|format|formatlist|indent|index|join|jsonencode|keys|length|list|log|lookup|lower|map|matchkeys|max|merge|min|md5|pathexpand|pow|replace|rsadecrypt|sha1|sha256|sha512|signum|slice|sort|split|substr|timestamp|timeadd|title|transpose|trimspace|upper|urlencode|uuid|values|zipmap)\\\\b\"}],parenthesis:[{token:\"paren.lpar\",regex:\"\\\\[\"},{token:\"paren.rpar\",regex:\"\\\\]\"}]},this.normalizeRules()};r.inherits(s,i),t.TerraformHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/terraform\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/terraform_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./terraform_highlight_rules\").TerraformHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=function(){i.call(this),this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.$id=\"ace/mode/terraform\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-tex.js",
    "content": "define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){e||(e=\"text\"),this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:e,regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\s+\"},{token:\"nospell.\"+e,regex:\"\\\\w+\"}]}};r.inherits(o,s),t.TexHighlightRules=o}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/tex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./tex_highlight_rules\").TexHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=function(e){e?this.HighlightRules=s:this.HighlightRules=o,this.$outdent=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"%\",this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.allowAutoInsert=function(){return!1},this.$id=\"ace/mode/tex\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-text.js",
    "content": ";                (function() {\n                    window.require([\"ace/mode/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-textile.js",
    "content": "define(\"ace/mode/textile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:function(e){return e.charAt(0)==\"h\"?\"markup.heading.\"+e.charAt(1):\"markup.heading\"},regex:\"h1|h2|h3|h4|h5|h6|bq|p|bc|pre\",next:\"blocktag\"},{token:\"keyword\",regex:\"[\\\\*]+|[#]+\"},{token:\"text\",regex:\".+\"}],blocktag:[{token:\"keyword\",regex:\"\\\\. \",next:\"start\"},{token:\"keyword\",regex:\"\\\\(\",next:\"blocktagproperties\"}],blocktagproperties:[{token:\"keyword\",regex:\"\\\\)\",next:\"blocktag\"},{token:\"string\",regex:\"[a-zA-Z0-9\\\\-_]+\"},{token:\"keyword\",regex:\"#\"}]}};r.inherits(s,i),t.TextileHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/textile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/textile_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./textile_highlight_rules\").TextileHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,n){return e==\"intag\"?n:\"\"},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/textile\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-toml.js",
    "content": "define(\"ace/mode/toml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"constant.language.boolean\":\"true|false\"},\"identifier\"),t=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment.toml\",regex:/#.*$/},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:[\"variable.keygroup.toml\"],regex:\"(?:^\\\\s*)(\\\\[\\\\[([^\\\\]]+)\\\\]\\\\])\"},{token:[\"variable.keygroup.toml\"],regex:\"(?:^\\\\s*)(\\\\[([^\\\\]]+)\\\\])\"},{token:e,regex:t},{token:\"support.date.toml\",regex:\"\\\\d{4}-\\\\d{2}-\\\\d{2}(T)\\\\d{2}:\\\\d{2}:\\\\d{2}(Z)\"},{token:\"constant.numeric.toml\",regex:\"-?\\\\d+(\\\\.?\\\\d+)?\"}],qqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"constant.language.escape\",regex:'\\\\\\\\[0tnr\"\\\\\\\\]'},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.TomlHighlightRules=s}),define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/,this.getFoldWidgetRange=function(e,t,n){var r=this.foldingStartMarker,s=e.getLine(n),o=s.match(r);if(!o)return;var u=o[1]+\".\",a=s.length,f=e.getLength(),l=n,c=n;while(++n<f){s=e.getLine(n);if(/^\\s*$/.test(s))continue;o=s.match(r);if(o&&o[1].lastIndexOf(u,0)!==0)break;c=n}if(c>l){var h=e.getLine(c).length;return new i(l,a,c,h)}}}.call(o.prototype)}),define(\"ace/mode/toml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/toml_highlight_rules\",\"ace/mode/folding/ini\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./toml_highlight_rules\").TomlHighlightRules,o=e(\"./folding/ini\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/toml\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-tsx.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=function(e){var t=[{token:[\"storage.type\",\"text\",\"entity.name.function.ts\"],regex:\"(function)(\\\\s+)([a-zA-Z0-9$_\\u00a1-\\uffff][a-zA-Z0-9d$_\\u00a1-\\uffff]*)\"},{token:\"keyword\",regex:\"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"},{token:[\"keyword\",\"storage.type.variable.ts\"],regex:\"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"},{token:\"keyword\",regex:\"\\\\b(?:super|export|import|keyof|infer)\\\\b\"},{token:[\"storage.type.variable.ts\"],regex:\"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"}],n=(new i({jsx:(e&&e.jsx)==1})).getRules();n.no_regex=t.concat(n.no_regex),this.$rules=n};r.inherits(s,i),t.TypeScriptHighlightRules=s}),define(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./typescript_highlight_rules\").TypeScriptHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=function(){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/typescript\"}.call(f.prototype),t.Mode=f}),define(\"ace/mode/tsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/typescript\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./typescript\").Mode,s=function(){i.call(this),this.$highlightRuleConfig={jsx:!0}};r.inherits(s,i),function(){this.$id=\"ace/mode/tsx\"}.call(s.prototype),t.Mode=s});                (function() {\n                    window.require([\"ace/mode/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-turtle.js",
    "content": "define(\"ace/mode/turtle_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comments\"},{include:\"#strings\"},{include:\"#base-prefix-declarations\"},{include:\"#string-language-suffixes\"},{include:\"#string-datatype-suffixes\"},{include:\"#relative-urls\"},{include:\"#xml-schema-types\"},{include:\"#rdf-schema-types\"},{include:\"#owl-types\"},{include:\"#qnames\"},{include:\"#punctuation-operators\"}],\"#base-prefix-declarations\":[{token:\"keyword.other.prefix.turtle\",regex:/@(?:base|prefix)/}],\"#comments\":[{token:[\"punctuation.definition.comment.turtle\",\"comment.line.hash.turtle\"],regex:/(#)(.*$)/}],\"#owl-types\":[{token:\"support.type.datatype.owl.turtle\",regex:/owl:[a-zA-Z]+/}],\"#punctuation-operators\":[{token:\"keyword.operator.punctuation.turtle\",regex:/;|,|\\.|\\(|\\)|\\[|\\]/}],\"#qnames\":[{token:\"entity.name.other.qname.turtle\",regex:/(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/}],\"#rdf-schema-types\":[{token:\"support.type.datatype.rdf.schema.turtle\",regex:/rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/}],\"#relative-urls\":[{token:\"string.quoted.other.relative.url.turtle\",regex:/</,push:[{token:\"string.quoted.other.relative.url.turtle\",regex:/>/,next:\"pop\"},{defaultToken:\"string.quoted.other.relative.url.turtle\"}]}],\"#string-datatype-suffixes\":[{token:\"keyword.operator.datatype.suffix.turtle\",regex:/\\^\\^/}],\"#string-language-suffixes\":[{token:[\"keyword.operator.language.suffix.turtle\",\"constant.language.suffix.turtle\"],regex:/(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/}],\"#strings\":[{token:\"string.quoted.triple.turtle\",regex:/\"\"\"/,push:[{token:\"string.quoted.triple.turtle\",regex:/\"\"\"/,next:\"pop\"},{defaultToken:\"string.quoted.triple.turtle\"}]},{token:\"string.quoted.double.turtle\",regex:/\"/,push:[{token:\"string.quoted.double.turtle\",regex:/\"/,next:\"pop\"},{token:\"invalid.string.newline\",regex:/$/},{token:\"constant.character.escape.turtle\",regex:/\\\\./},{defaultToken:\"string.quoted.double.turtle\"}]}],\"#xml-schema-types\":[{token:\"support.type.datatype.xml.schema.turtle\",regex:/xsd?:[a-z][a-zA-Z]+/}]},this.normalizeRules()};s.metaData={fileTypes:[\"ttl\",\"nt\"],name:\"Turtle\",scopeName:\"source.turtle\"},r.inherits(s,i),t.TurtleHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/turtle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/turtle_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./turtle_highlight_rules\").TurtleHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/turtle\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-twig.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/twig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){s.call(this);var e=\"autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim\";e=e+\"|end\"+e.replace(/\\|/g,\"|end\");var t=\"abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode\",n=\"attribute|constant|cycle|date|dump|parent|random|range|template_from_string\",r=\"constant|divisibleby|sameas|defined|empty|even|iterable|odd\",i=\"null|none|true|false\",o=\"b-and|b-xor|b-or|in|is|and|or|not\",u=this.createKeywordMapper({\"keyword.control.twig\":e,\"support.function.twig\":[t,n,r].join(\"|\"),\"keyword.operator.twig\":o,\"constant.language.twig\":i},\"identifier\");for(var a in this.$rules)this.$rules[a].unshift({token:\"variable.other.readwrite.local.twig\",regex:\"\\\\{\\\\{-?\",push:\"twig-start\"},{token:\"meta.tag.twig\",regex:\"\\\\{%-?\",push:\"twig-start\"},{token:\"comment.block.twig\",regex:\"\\\\{#-?\",push:\"twig-comment\"});this.$rules[\"twig-comment\"]=[{token:\"comment.block.twig\",regex:\".*-?#\\\\}\",next:\"pop\"}],this.$rules[\"twig-start\"]=[{token:\"variable.other.readwrite.local.twig\",regex:\"-?\\\\}\\\\}\",next:\"pop\"},{token:\"meta.tag.twig\",regex:\"-?%\\\\}\",next:\"pop\"},{token:\"string\",regex:\"'\",next:\"twig-qstring\"},{token:\"string\",regex:'\"',next:\"twig-qqstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator.assignment\",regex:\"=|~\"},{token:\"keyword.operator.comparison\",regex:\"==|!=|<|>|>=|<=|===\"},{token:\"keyword.operator.arithmetic\",regex:\"\\\\+|-|/|%|//|\\\\*|\\\\*\\\\*\"},{token:\"keyword.operator.other\",regex:\"\\\\.\\\\.|\\\\|\"},{token:\"punctuation.operator\",regex:/\\?|:|,|;|\\./},{token:\"paren.lparen\",regex:/[\\[\\({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"text\",regex:\"\\\\s+\"}],this.$rules[\"twig-qqstring\"]=[{token:\"constant.language.escape\",regex:/\\\\[\\\\\"$#ntr]|#{[^\"}]*}/},{token:\"string\",regex:'\"',next:\"twig-start\"},{defaultToken:\"string\"}],this.$rules[\"twig-qstring\"]=[{token:\"constant.language.escape\",regex:/\\\\[\\\\'ntr]}/},{token:\"string\",regex:\"'\",next:\"twig-start\"},{defaultToken:\"string\"}],this.normalizeRules()};r.inherits(u,o),t.TwigHighlightRules=u}),define(\"ace/mode/twig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/twig_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./twig_highlight_rules\").TwigHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=function(){i.call(this),this.HighlightRules=s,this.$outdent=new o};r.inherits(u,i),function(){this.blockComment={start:\"{#\",end:\"#}\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/twig\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-typescript.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=function(e){var t=[{token:[\"storage.type\",\"text\",\"entity.name.function.ts\"],regex:\"(function)(\\\\s+)([a-zA-Z0-9$_\\u00a1-\\uffff][a-zA-Z0-9d$_\\u00a1-\\uffff]*)\"},{token:\"keyword\",regex:\"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"},{token:[\"keyword\",\"storage.type.variable.ts\"],regex:\"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"},{token:\"keyword\",regex:\"\\\\b(?:super|export|import|keyof|infer)\\\\b\"},{token:[\"storage.type.variable.ts\"],regex:\"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"}],n=(new i({jsx:(e&&e.jsx)==1})).getRules();n.no_regex=t.concat(n.no_regex),this.$rules=n};r.inherits(s,i),t.TypeScriptHighlightRules=s}),define(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./typescript_highlight_rules\").TypeScriptHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=function(){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/typescript\"}.call(f.prototype),t.Mode=f});                (function() {\n                    window.require([\"ace/mode/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-vala.js",
    "content": "define(\"ace/mode/vala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"meta.using.vala\",\"keyword.other.using.vala\",\"meta.using.vala\",\"storage.modifier.using.vala\",\"meta.using.vala\",\"punctuation.terminator.vala\"],regex:\"^(\\\\s*)(using)\\\\b(?:(\\\\s*)([^ ;$]+)(\\\\s*)((?:;)?))?\"},{include:\"#code\"}],\"#all-types\":[{include:\"#primitive-arrays\"},{include:\"#primitive-types\"},{include:\"#object-types\"}],\"#annotations\":[{token:[\"storage.type.annotation.vala\",\"punctuation.definition.annotation-arguments.begin.vala\"],regex:\"(@[^ (]+)(\\\\()\",push:[{token:\"punctuation.definition.annotation-arguments.end.vala\",regex:\"\\\\)\",next:\"pop\"},{token:[\"constant.other.key.vala\",\"text\",\"keyword.operator.assignment.vala\"],regex:\"(\\\\w*)(\\\\s*)(=)\"},{include:\"#code\"},{token:\"punctuation.seperator.property.vala\",regex:\",\"},{defaultToken:\"meta.declaration.annotation.vala\"}]},{token:\"storage.type.annotation.vala\",regex:\"@\\\\w*\"}],\"#anonymous-classes-and-new\":[{token:\"keyword.control.new.vala\",regex:\"\\\\bnew\\\\b\",push_disabled:[{token:\"text\",regex:\"(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)\",next:\"pop\"},{token:[\"storage.type.vala\",\"text\"],regex:\"(\\\\w+)(\\\\s*)(?=\\\\[)\",push:[{token:\"text\",regex:\"}|(?=;|\\\\))\",next:\"pop\"},{token:\"text\",regex:\"\\\\[\",push:[{token:\"text\",regex:\"\\\\]\",next:\"pop\"},{include:\"#code\"}]},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"(?=})\",next:\"pop\"},{include:\"#code\"}]}]},{token:\"text\",regex:\"(?=\\\\w.*\\\\()\",push:[{token:\"text\",regex:\"(?<=\\\\))\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<=\\\\))\",next:\"pop\"},{include:\"#object-types\"},{token:\"text\",regex:\"\\\\(\",push:[{token:\"text\",regex:\"\\\\)\",next:\"pop\"},{include:\"#code\"}]}]},{token:\"meta.inner-class.vala\",regex:\"{\",push:[{token:\"meta.inner-class.vala\",regex:\"}\",next:\"pop\"},{include:\"#class-body\"},{defaultToken:\"meta.inner-class.vala\"}]}]}],\"#assertions\":[{token:[\"keyword.control.assert.vala\",\"meta.declaration.assertion.vala\"],regex:\"\\\\b(assert|requires|ensures)(\\\\s)\",push:[{token:\"meta.declaration.assertion.vala\",regex:\"$\",next:\"pop\"},{token:\"keyword.operator.assert.expression-seperator.vala\",regex:\":\"},{include:\"#code\"},{defaultToken:\"meta.declaration.assertion.vala\"}]}],\"#class\":[{token:\"meta.class.vala\",regex:\"(?=\\\\w?[\\\\w\\\\s]*(?:class|(?:@)?interface|enum|struct|namespace)\\\\s+\\\\w+)\",push:[{token:\"paren.vala\",regex:\"}\",next:\"pop\"},{include:\"#storage-modifiers\"},{include:\"#comments\"},{token:[\"storage.modifier.vala\",\"meta.class.identifier.vala\",\"entity.name.type.class.vala\"],regex:\"(class|(?:@)?interface|enum|struct|namespace)(\\\\s+)([\\\\w\\\\.]+)\"},{token:\"storage.modifier.extends.vala\",regex:\":\",push:[{token:\"meta.definition.class.inherited.classes.vala\",regex:\"(?={|,)\",next:\"pop\"},{include:\"#object-types-inherited\"},{include:\"#comments\"},{defaultToken:\"meta.definition.class.inherited.classes.vala\"}]},{token:[\"storage.modifier.implements.vala\",\"meta.definition.class.implemented.interfaces.vala\"],regex:\"(,)(\\\\s)\",push:[{token:\"meta.definition.class.implemented.interfaces.vala\",regex:\"(?=\\\\{)\",next:\"pop\"},{include:\"#object-types-inherited\"},{include:\"#comments\"},{defaultToken:\"meta.definition.class.implemented.interfaces.vala\"}]},{token:\"paren.vala\",regex:\"{\",push:[{token:\"paren.vala\",regex:\"(?=})\",next:\"pop\"},{include:\"#class-body\"},{defaultToken:\"meta.class.body.vala\"}]},{defaultToken:\"meta.class.vala\"}],comment:\"attempting to put namespace in here.\"}],\"#class-body\":[{include:\"#comments\"},{include:\"#class\"},{include:\"#enums\"},{include:\"#methods\"},{include:\"#annotations\"},{include:\"#storage-modifiers\"},{include:\"#code\"}],\"#code\":[{include:\"#comments\"},{include:\"#class\"},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"}\",next:\"pop\"},{include:\"#code\"}]},{include:\"#assertions\"},{include:\"#parens\"},{include:\"#constants-and-special-vars\"},{include:\"#anonymous-classes-and-new\"},{include:\"#keywords\"},{include:\"#storage-modifiers\"},{include:\"#strings\"},{include:\"#all-types\"}],\"#comments\":[{token:\"punctuation.definition.comment.vala\",regex:\"/\\\\*\\\\*/\"},{include:\"text.html.javadoc\"},{include:\"#comments-inline\"}],\"#comments-inline\":[{token:\"punctuation.definition.comment.vala\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.vala\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.vala\"}]},{token:[\"text\",\"punctuation.definition.comment.vala\",\"comment.line.double-slash.vala\"],regex:\"(\\\\s*)(//)(.*$)\"}],\"#constants-and-special-vars\":[{token:\"constant.language.vala\",regex:\"\\\\b(?:true|false|null)\\\\b\"},{token:\"variable.language.vala\",regex:\"\\\\b(?:this|base)\\\\b\"},{token:\"constant.numeric.vala\",regex:\"\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\\\b\"},{token:[\"keyword.operator.dereference.vala\",\"constant.other.vala\"],regex:\"((?:\\\\.)?)\\\\b([A-Z][A-Z0-9_]+)(?!<|\\\\.class|\\\\s*\\\\w+\\\\s*=)\\\\b\"}],\"#enums\":[{token:\"text\",regex:\"^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))\",push:[{token:\"text\",regex:\"(?=;|})\",next:\"pop\"},{token:\"constant.other.enum.vala\",regex:\"\\\\w+\",push:[{token:\"meta.enum.vala\",regex:\"(?=,|;|})\",next:\"pop\"},{include:\"#parens\"},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"}\",next:\"pop\"},{include:\"#class-body\"}]},{defaultToken:\"meta.enum.vala\"}]}]}],\"#keywords\":[{token:\"keyword.control.catch-exception.vala\",regex:\"\\\\b(?:try|catch|finally|throw)\\\\b\"},{token:\"keyword.control.vala\",regex:\"\\\\?|:|\\\\?\\\\?\"},{token:\"keyword.control.vala\",regex:\"\\\\b(?:return|break|case|continue|default|do|while|for|foreach|switch|if|else|in|yield|get|set|value)\\\\b\"},{token:\"keyword.operator.vala\",regex:\"\\\\b(?:typeof|is|as)\\\\b\"},{token:\"keyword.operator.comparison.vala\",regex:\"==|!=|<=|>=|<>|<|>\"},{token:\"keyword.operator.assignment.vala\",regex:\"=\"},{token:\"keyword.operator.increment-decrement.vala\",regex:\"\\\\-\\\\-|\\\\+\\\\+\"},{token:\"keyword.operator.arithmetic.vala\",regex:\"\\\\-|\\\\+|\\\\*|\\\\/|%\"},{token:\"keyword.operator.logical.vala\",regex:\"!|&&|\\\\|\\\\|\"},{token:\"keyword.operator.dereference.vala\",regex:\"\\\\.(?=\\\\S)\",originalRegex:\"(?<=\\\\S)\\\\.(?=\\\\S)\"},{token:\"punctuation.terminator.vala\",regex:\";\"},{token:\"keyword.operator.ownership\",regex:\"owned|unowned\"}],\"#methods\":[{token:\"meta.method.vala\",regex:\"(?!new)(?=\\\\w.*\\\\s+)(?=[^=]+\\\\()\",push:[{token:\"paren.vala\",regex:\"}|(?=;)\",next:\"pop\"},{include:\"#storage-modifiers\"},{token:[\"entity.name.function.vala\",\"meta.method.identifier.vala\"],regex:\"([\\\\~\\\\w\\\\.]+)(\\\\s*\\\\()\",push:[{token:\"meta.method.identifier.vala\",regex:\"\\\\)\",next:\"pop\"},{include:\"#parameters\"},{defaultToken:\"meta.method.identifier.vala\"}]},{token:\"meta.method.return-type.vala\",regex:\"(?=\\\\w.*\\\\s+\\\\w+\\\\s*\\\\()\",push:[{token:\"meta.method.return-type.vala\",regex:\"(?=\\\\w+\\\\s*\\\\()\",next:\"pop\"},{include:\"#all-types\"},{defaultToken:\"meta.method.return-type.vala\"}]},{include:\"#throws\"},{token:\"paren.vala\",regex:\"{\",push:[{token:\"paren.vala\",regex:\"(?=})\",next:\"pop\"},{include:\"#code\"},{defaultToken:\"meta.method.body.vala\"}]},{defaultToken:\"meta.method.vala\"}]}],\"#namespace\":[{token:\"text\",regex:\"^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))\",push:[{token:\"text\",regex:\"(?=;|})\",next:\"pop\"},{token:\"constant.other.namespace.vala\",regex:\"\\\\w+\",push:[{token:\"meta.namespace.vala\",regex:\"(?=,|;|})\",next:\"pop\"},{include:\"#parens\"},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"}\",next:\"pop\"},{include:\"#code\"}]},{defaultToken:\"meta.namespace.vala\"}]}],comment:\"This is not quite right. See the class grammar right now\"}],\"#object-types\":[{token:\"storage.type.generic.vala\",regex:\"\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<\",push:[{token:\"storage.type.generic.vala\",regex:\">|[^\\\\w\\\\s,\\\\?<\\\\[()\\\\]]\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\">|[^\\\\w\\\\s,\\\\?<\\\\[(?:[,]+)\\\\]]\",next:\"pop\"},{include:\"#object-types\"},{token:\"storage.type.generic.vala\",regex:\"<\",push:[{token:\"storage.type.generic.vala\",regex:\">|[^\\\\w\\\\s,\\\\[\\\\]<]\",next:\"pop\"},{defaultToken:\"storage.type.generic.vala\"}],comment:\"This is just to support <>'s with no actual type prefix\"},{defaultToken:\"storage.type.generic.vala\"}]},{token:\"storage.type.object.array.vala\",regex:\"\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*(?=\\\\[)\",push:[{token:\"storage.type.object.array.vala\",regex:\"(?=[^\\\\]\\\\s])\",next:\"pop\"},{token:\"text\",regex:\"\\\\[\",push:[{token:\"text\",regex:\"\\\\]\",next:\"pop\"},{include:\"#code\"}]},{defaultToken:\"storage.type.object.array.vala\"}]},{token:[\"storage.type.vala\",\"keyword.operator.dereference.vala\",\"storage.type.vala\"],regex:\"\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*\\\\b)\"}],\"#object-types-inherited\":[{token:\"entity.other.inherited-class.vala\",regex:\"\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<\",push:[{token:\"entity.other.inherited-class.vala\",regex:\">|[^\\\\w\\\\s,<]\",next:\"pop\"},{include:\"#object-types\"},{token:\"storage.type.generic.vala\",regex:\"<\",push:[{token:\"storage.type.generic.vala\",regex:\">|[^\\\\w\\\\s,<]\",next:\"pop\"},{defaultToken:\"storage.type.generic.vala\"}],comment:\"This is just to support <>'s with no actual type prefix\"},{defaultToken:\"entity.other.inherited-class.vala\"}]},{token:[\"entity.other.inherited-class.vala\",\"keyword.operator.dereference.vala\",\"entity.other.inherited-class.vala\"],regex:\"\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*)\"}],\"#parameters\":[{token:\"storage.modifier.vala\",regex:\"final\"},{include:\"#primitive-arrays\"},{include:\"#primitive-types\"},{include:\"#object-types\"},{token:\"variable.parameter.vala\",regex:\"\\\\w+\"}],\"#parens\":[{token:\"text\",regex:\"\\\\(\",push:[{token:\"text\",regex:\"\\\\)\",next:\"pop\"},{include:\"#code\"}]}],\"#primitive-arrays\":[{token:\"storage.type.primitive.array.vala\",regex:\"\\\\b(?:bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|int8|int16|int32|int64|uint8|uint16|uint32|uint64)(?:\\\\[\\\\])*\\\\b\"}],\"#primitive-types\":[{token:\"storage.type.primitive.vala\",regex:\"\\\\b(?:var|bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\\\\b\",comment:\"var is not really a primitive, but acts like one in most cases\"}],\"#storage-modifiers\":[{token:\"storage.modifier.vala\",regex:\"\\\\b(?:public|private|protected|internal|static|final|sealed|virtual|override|abstract|readonly|volatile|dynamic|async|unsafe|out|ref|weak|owned|unowned|const)\\\\b\",comment:\"Not sure about unsafe and readonly\"}],\"#strings\":[{token:\"punctuation.definition.string.begin.vala\",regex:'@\"',push:[{token:\"punctuation.definition.string.end.vala\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"\\\\\\\\.|%[\\\\w\\\\.\\\\-]+|\\\\$(?:\\\\w+|\\\\([\\\\w\\\\s\\\\+\\\\-\\\\*\\\\/]+\\\\))\"},{defaultToken:\"string.quoted.interpolated.vala\"}]},{token:\"punctuation.definition.string.begin.vala\",regex:'\"',push:[{token:\"punctuation.definition.string.end.vala\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"\\\\\\\\.\"},{token:\"constant.character.escape.vala\",regex:\"%[\\\\w\\\\.\\\\-]+\"},{defaultToken:\"string.quoted.double.vala\"}]},{token:\"punctuation.definition.string.begin.vala\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.vala\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.vala\"}]},{token:\"punctuation.definition.string.begin.vala\",regex:'\"\"\"',push:[{token:\"punctuation.definition.string.end.vala\",regex:'\"\"\"',next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"%[\\\\w\\\\.\\\\-]+\"},{defaultToken:\"string.quoted.triple.vala\"}]}],\"#throws\":[{token:\"storage.modifier.vala\",regex:\"throws\",push:[{token:\"meta.throwables.vala\",regex:\"(?={|;)\",next:\"pop\"},{include:\"#object-types\"},{defaultToken:\"meta.throwables.vala\"}]}],\"#values\":[{include:\"#strings\"},{include:\"#object-types\"},{include:\"#constants-and-special-vars\"}]},this.normalizeRules()};s.metaData={comment:\"Based heavily on the Java bundle's language syntax. TODO:\\n* Closures\\n* Delegates\\n* Properties: Better support for properties.\\n* Annotations\\n* Error domains\\n* Named arguments\\n* Array slicing, negative indexes, multidimensional\\n* construct blocks\\n* lock blocks?\\n* regex literals\\n* DocBlock syntax highlighting. (Currently importing javadoc)\\n* Folding rule for comments.\\n\",fileTypes:[\"vala\"],foldingStartMarker:\"(\\\\{\\\\s*(//.*)?$|^\\\\s*// \\\\{\\\\{\\\\{)\",foldingStopMarker:\"^\\\\s*(\\\\}|// \\\\}\\\\}\\\\}$)\",name:\"Vala\",scopeName:\"source.vala\"},r.inherits(s,i),t.ValaHighlightRules=s}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/vala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/vala_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"../tokenizer\").Tokenizer,o=e(\"./vala_highlight_rules\").ValaHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=e(\"./matching_brace_outdent\").MatchingBraceOutdent,c=function(){this.HighlightRules=o,this.$outdent=new l,this.$behaviour=new a,this.foldingRules=new f};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/vala\"}.call(c.prototype),t.Mode=c});                (function() {\n                    window.require([\"ace/mode/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-vbscript.js",
    "content": "define(\"ace/mode/vbscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"keyword.control.asp\":\"If|Then|Else|ElseIf|End|While|Wend|For|To|Each|Case|Select|Return|Continue|Do|Until|Loop|Next|With|Exit|Function|Property|Type|Enum|Sub|IIf\",\"storage.type.asp\":\"Dim|Call|Class|Const|Dim|Redim|Set|Let|Get|New|Randomize|Option|Explicit\",\"storage.modifier.asp\":\"Private|Public|Default\",\"keyword.operator.asp\":\"Mod|And|Not|Or|Xor|as\",\"constant.language.asp\":\"Empty|False|Nothing|Null|True\",\"support.class.asp\":\"Application|ObjectContext|Request|Response|Server|Session\",\"support.class.collection.asp\":\"Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables\",\"support.constant.asp\":\"TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout\",\"support.function.asp\":\"Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog|BinaryWrite|Clear|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex\",\"support.function.event.asp\":\"Application_OnEnd|Application_OnStart|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart\",\"support.function.vb.asp\":\"Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year\",\"support.type.vb.asp\":\"vbtrue|vbfalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|int32|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant|vbDataObject|vbDecimal|vbByte|vbArray\"},\"identifier\",!0);this.$rules={start:[{token:[\"meta.ending-space\"],regex:\"$\"},{token:[null],regex:\"^(?=\\\\t)\",next:\"state_3\"},{token:[null],regex:\"^(?= )\",next:\"state_4\"},{token:[\"text\",\"storage.type.function.asp\",\"text\",\"entity.name.function.asp\",\"text\",\"punctuation.definition.parameters.asp\",\"variable.parameter.function.asp\",\"punctuation.definition.parameters.asp\"],regex:\"^(\\\\s*)(Function|Sub)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()([^)]*)(\\\\))\"},{token:\"punctuation.definition.comment.asp\",regex:\"'|REM(?=\\\\s|$)\",next:\"comment\",caseInsensitive:!0},{token:\"storage.type.asp\",regex:\"On Error Resume Next|On Error GoTo\",caseInsensitive:!0},{token:\"punctuation.definition.string.begin.asp\",regex:'\"',next:\"string\"},{token:[\"punctuation.definition.variable.asp\"],regex:\"(\\\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b\\\\s*\"},{token:\"constant.numeric.asp\",regex:\"-?\\\\b(?:(?:0(?:x|X)[0-9a-fA-F]*)|(?:(?:[0-9]+\\\\.?[0-9]*)|(?:\\\\.[0-9]+))(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"},{regex:\"\\\\w+\",token:e},{token:[\"entity.name.function.asp\"],regex:\"(?:(\\\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b)(?=\\\\(\\\\)?))\"},{token:[\"keyword.operator.asp\"],regex:\"\\\\-|\\\\+|\\\\*\\\\/|\\\\>|\\\\<|\\\\=|\\\\&\"}],state_3:[{token:[\"meta.odd-tab.tabs\",\"meta.even-tab.tabs\"],regex:\"(\\\\t)(\\\\t)?\"},{token:\"meta.leading-space\",regex:\"(?=[^\\\\t])\",next:\"start\"},{token:\"meta.leading-space\",regex:\".\",next:\"state_3\"}],state_4:[{token:[\"meta.odd-tab.spaces\",\"meta.even-tab.spaces\"],regex:\"(  )(  )?\"},{token:\"meta.leading-space\",regex:\"(?=[^ ])\",next:\"start\"},{defaultToken:\"meta.leading-space\"}],comment:[{token:\"comment.line.apostrophe.asp\",regex:\"$|(?=(?:%>))\",next:\"start\"},{defaultToken:\"comment.line.apostrophe.asp\"}],string:[{token:\"constant.character.escape.apostrophe.asp\",regex:'\"\"'},{token:\"string.quoted.double.asp\",regex:'\"',next:\"start\"},{defaultToken:\"string.quoted.double.asp\"}]}};r.inherits(s,i),t.VBScriptHighlightRules=s}),define(\"ace/mode/vbscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vbscript_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./vbscript_highlight_rules\").VBScriptHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=[\"'\",\"REM\"],this.$id=\"ace/mode/vbscript\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-velocity.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/velocity_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./html_highlight_rules\").HtmlHighlightRules,u=function(){o.call(this);var e=i.arrayToMap(\"true|false|null\".split(\"|\")),t=i.arrayToMap(\"_DateTool|_DisplayTool|_EscapeTool|_FieldTool|_MathTool|_NumberTool|_SerializerTool|_SortTool|_StringTool|_XPathTool\".split(\"|\")),n=i.arrayToMap(\"$contentRoot|$foreach\".split(\"|\")),r=i.arrayToMap(\"#set|#macro|#include|#parse|#if|#elseif|#else|#foreach|#break|#end|#stop\".split(\"|\"));this.$rules.start.push({token:\"comment\",regex:\"##.*$\"},{token:\"comment.block\",regex:\"#\\\\*\",next:\"vm_comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:function(i){return r.hasOwnProperty(i)?\"keyword\":e.hasOwnProperty(i)?\"constant.language\":n.hasOwnProperty(i)?\"variable.language\":t.hasOwnProperty(i)||t.hasOwnProperty(i.substring(1))?\"support.function\":i==\"debugger\"?\"invalid.deprecated\":i.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*)$/)?\"variable\":\"identifier\"},regex:\"[a-zA-Z$#][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}),this.$rules.vm_comment=[{token:\"comment\",regex:\"\\\\*#|-->\",next:\"start\"},{defaultToken:\"comment\"}],this.$rules.vm_start=[{token:\"variable\",regex:\"}\",next:\"pop\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:function(i){return r.hasOwnProperty(i)?\"keyword\":e.hasOwnProperty(i)?\"constant.language\":n.hasOwnProperty(i)?\"variable.language\":t.hasOwnProperty(i)||t.hasOwnProperty(i.substring(1))?\"support.function\":i==\"debugger\"?\"invalid.deprecated\":i.match(/^(\\$[a-zA-Z_$][a-zA-Z0-9_]*)$/)?\"variable\":\"identifier\"},regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}];for(var s in this.$rules)this.$rules[s].unshift({token:\"variable\",regex:\"\\\\${\",push:\"vm_start\"});this.normalizeRules()};r.inherits(u,s),t.VelocityHighlightRules=u}),define(\"ace/mode/folding/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"##\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"##\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"##\"&&s[i]==\"##\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"##\"&&o[i]==\"##\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/velocity_highlight_rules\",\"ace/mode/folding/velocity\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./velocity_highlight_rules\").VelocityHighlightRules,o=e(\"./folding/velocity\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"##\",this.blockComment={start:\"#*\",end:\"*#\"},this.$id=\"ace/mode/velocity\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-verilog.js",
    "content": "define(\"ace/mode/verilog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xorbegin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|macromodule|module|primitive|repeat|specify|table|task|while\",t=\"true|false|null\",n=\"count|min|max|avg|sum|rank|now|coalesce|main\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"//.*$\"},{token:\"comment.start\",regex:\"/\\\\*\",next:[{token:\"comment.end\",regex:\"\\\\*/\",next:\"start\"},{defaultToken:\"comment\"}]},{token:\"string.start\",regex:'\"',next:[{token:\"constant.language.escape\",regex:/\\\\(?:[ntvfa\\\\\"]|[0-7]{1,3}|\\x[a-fA-F\\d]{1,2}|)/,consumeLineEnd:!0},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"'^[']'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]},this.normalizeRules()};r.inherits(s,i),t.VerilogHighlightRules=s}),define(\"ace/mode/verilog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/verilog_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./verilog_highlight_rules\").VerilogHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"'},this.$id=\"ace/mode/verilog\"}.call(u.prototype),t.Mode=u});                (function() {\n                    window.require([\"ace/mode/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-vhdl.js",
    "content": "define(\"ace/mode/vhdl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"access|after|ailas|all|architecture|assert|attribute|begin|block|buffer|bus|case|component|configuration|disconnect|downto|else|elsif|end|entity|file|for|function|generate|generic|guarded|if|impure|in|inertial|inout|is|label|linkage|literal|loop|mapnew|next|of|on|open|others|out|port|process|pure|range|record|reject|report|return|select|shared|subtype|then|to|transport|type|unaffected|united|until|wait|when|while|with\",t=\"bit|bit_vector|boolean|character|integer|line|natural|positive|real|register|severity|signal|signed|std_logic|std_logic_vector|string||text|time|unsigned|variable\",n=\"array|constant\",r=\"abs|and|mod|nand|nor|not|rem|rol|ror|sla|sll|srasrl|xnor|xor\",i=\"true|false|null\",s=this.createKeywordMapper({\"keyword.operator\":r,keyword:e,\"constant.language\":i,\"storage.modifier\":n,\"storage.type\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"keyword\",regex:\"\\\\s*(?:library|package|use)\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"&|\\\\*|\\\\+|\\\\-|\\\\/|<|=|>|\\\\||=>|\\\\*\\\\*|:=|\\\\/=|>=|<=|<>\"},{token:\"punctuation.operator\",regex:\"\\\\'|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[(]\"},{token:\"paren.rparen\",regex:\"[\\\\])]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.VHDLHighlightRules=s}),define(\"ace/mode/vhdl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vhdl_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./vhdl_highlight_rules\").VHDLHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/vhdl\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-visualforce.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),define(\"ace/mode/visualforce_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";function s(e){return{token:e.token+\".start\",regex:e.start,push:[{token:\"constant.language.escape\",regex:e.escape},{token:e.token+\".end\",regex:e.start,next:\"pop\"},{defaultToken:e.token}]}}var r=e(\"../lib/oop\"),i=e(\"../mode/html_highlight_rules\").HtmlHighlightRules,o=function(){var e=this.createKeywordMapper({\"variable.language\":\"$Action|$Api|$Component|$ComponentLabel|$CurrentPage|$FieldSet|$Label|$Label|$ObjectType|$Organization|$Page|$Permission|$Profile|$Resource|$SControl|$Setup|$Site|$System.OriginDateTime|$User|$UserRole|Site|UITheme|UIThemeDisplayed\",keyword:\"\",\"storage.type\":\"\",\"constant.language\":\"true|false|null|TRUE|FALSE|NULL\",\"support.function\":\"DATE|DATEVALUE|DATETIMEVALUE|DAY|MONTH|NOW|TODAY|YEAR|BLANKVALUE|ISBLANK|NULLVALUE|PRIORVALUE|AND|CASE|IF|ISCHANGED|ISNEW|ISNUMBER|NOT|OR|ABS|CEILING|EXP|FLOOR|LN|LOG|MAX|MIN|MOD|ROUND|SQRT|BEGINS|BR|CASESAFEID|CONTAINS|FIND|GETSESSIONID|HTMLENCODE|ISPICKVAL|JSENCODE|JSINHTMLENCODE|LEFT|LEN|LOWER|LPAD|MID|RIGHT|RPAD|SUBSTITUTE|TEXT|TRIM|UPPER|URLENCODE|VALUE|GETRECORDIDS|INCLUDE|LINKTO|REGEX|REQUIRESCRIPT|URLFOR|VLOOKUP|HTMLENCODE|JSENCODE|JSINHTMLENCODE|URLENCODE\"},\"identifier\");i.call(this);var t={token:\"keyword.start\",regex:\"{!\",push:\"Visualforce\"};for(var n in this.$rules)this.$rules[n].unshift(t);this.$rules.Visualforce=[s({start:'\"',escape:/\\\\[btnfr\"'\\\\]/,token:\"string\",multiline:!0}),s({start:\"'\",escape:/\\\\[btnfr\"'\\\\]/,token:\"string\",multiline:!0}),{token:\"comment.start\",regex:\"\\\\/\\\\*\",push:[{token:\"comment.end\",regex:\"\\\\*\\\\/|(?=})\",next:\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"keyword.end\",regex:\"}\",next:\"pop\"},{token:e,regex:/[a-zA-Z$_\\u00a1-\\uffff][a-zA-Z\\d$_\\u00a1-\\uffff]*\\b/},{token:\"keyword.operator\",regex:/==|<>|!=|<=|>=|&&|\\|\\||[+\\-*/^()=<>&]/},{token:\"punctuation.operator\",regex:/[?:,;.]/},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/}],this.normalizeRules()};r.inherits(o,i),t.VisualforceHighlightRules=o}),define(\"ace/mode/visualforce\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/visualforce_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\"],function(e,t,n){\"use strict\";function a(){i.call(this),this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new o}var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./visualforce_highlight_rules\").VisualforceHighlightRules,o=e(\"./behaviour/xml\").XmlBehaviour,u=e(\"./folding/html\").FoldMode;r.inherits(a,i),a.prototype.emmetConfig={profile:\"xhtml\"},t.Mode=a});                (function() {\n                    window.require([\"ace/mode/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-wollok.js",
    "content": "define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),define(\"ace/mode/wollok_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"test|describe|package|inherits|false|import|else|or|class|and|not|native|override|program|self|try|const|var|catch|object|super|throw|if|null|return|true|new|constructor|method|mixin\",t=\"null|assert|console\",n=\"Object|Pair|String|Boolean|Number|Integer|Double|Collection|Set|List|Exception|Range|StackTraceElement\",r=this.createKeywordMapper({\"variable.language\":\"self\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"===|&&|\\\\*=|\\\\.\\\\.|\\\\*\\\\*|#|!|%|\\\\*|\\\\?:|\\\\+|\\\\/|,|\\\\+=|\\\\-|\\\\.\\\\.<|!==|:|\\\\/=|\\\\?\\\\.|\\\\+\\\\+|>|=|<|>=|=>|==|\\\\]|\\\\[|\\\\-=|\\\\->|\\\\||\\\\-\\\\-|<>|!=|%=|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.WollokHighlightRules=o}),define(\"ace/mode/wollok\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/wollok_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./wollok_highlight_rules\").WollokHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/wollok\"}.call(o.prototype),t.Mode=o});                (function() {\n                    window.require([\"ace/mode/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-xml.js",
    "content": "define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l});                (function() {\n                    window.require([\"ace/mode/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-xquery.js",
    "content": "define(\"ace/mode/xquery/xquery_lexer\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=function r(t,n,i){function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(s)return s(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return o(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var s=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)o(i[u]);return o(i[0])}({\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(e,t,n){var r=n.XQueryTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 77:f(77);break;case 91:f(91);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 140:f(140);break;case 147:f(147);break;case 160:f(160);break;case 180:f(180);break;case 186:f(186);break;case 211:f(211);break;case 221:f(221);break;case 222:f(222);break;case 238:f(238);break;case 239:f(239);break;case 248:f(248);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 14:f(14);break;case 65:f(65);break;case 68:f(68);break;case 69:f(69);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 88:f(88);break;case 89:f(89);break;case 98:f(98);break;case 100:f(100);break;case 103:f(103);break;case 104:f(104);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 113:f(113);break;case 114:f(114);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 148:f(148);break;case 154:f(154);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 165:f(165);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 177:f(177);break;case 179:f(179);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 213:f(213);break;case 214:f(214);break;case 215:f(215);break;case 219:f(219);break;case 224:f(224);break;case 230:f(230);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 245:f(245);break;case 249:f(249);break;case 251:f(251);break;case 255:f(255);break;case 261:f(261);break;case 265:f(265);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 257:f(257);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 26:f(26);break;case 65:f(65);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 89:f(89);break;case 100:f(100);break;case 104:f(104);break;case 108:f(108);break;case 113:f(113);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 126:f(126);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 215:f(215);break;case 219:f(219);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 249:f(249);break;case 261:f(261);break;case 265:f(265);break;case 68:f(68);break;case 69:f(69);break;case 77:f(77);break;case 88:f(88);break;case 91:f(91);break;case 98:f(98);break;case 103:f(103);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 114:f(114);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 124:f(124);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 140:f(140);break;case 147:f(147);break;case 148:f(148);break;case 154:f(154);break;case 160:f(160);break;case 165:f(165);break;case 177:f(177);break;case 179:f(179);break;case 180:f(180);break;case 186:f(186);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 211:f(211);break;case 213:f(213);break;case 214:f(214);break;case 221:f(221);break;case 222:f(222);break;case 224:f(224);break;case 230:f(230);break;case 238:f(238);break;case 239:f(239);break;case 245:f(245);break;case 248:f(248);break;case 251:f(251);break;case 255:f(255);break;case 257:f(257);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=28)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 55:f(55);break;case 54:f(54);break;case 56:f(56);break;case 40:f(40);break;case 42:f(42);break;case 41:f(41);break;case 35:f(35);break;case 38:f(38);break;case 274:f(274);break;case 271:f(271);break;case 39:f(39);break;case 43:f(43);break;case 49:f(49);break;case 62:f(62);break;case 63:f(63);break;case 46:f(46);break;case 48:f(48);break;case 53:f(53);break;case 51:f(51);break;case 34:f(34);break;case 273:f(273);break;case 2:f(2);break;case 1:f(1);break;case 3:f(3);break;case 12:f(12);break;case 13:f(13);break;case 15:f(15);break;case 16:f(16);break;case 17:f(17);break;case 5:f(5);break;case 6:f(6);break;case 4:f(4);break;case 33:f(33);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 58:f(58);break;case 50:f(50);break;case 27:f(27);break;case 57:f(57);break;case 35:f(35);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 23:f(23);break;case 6:f(6);break;case 7:f(7);break;case 55:f(55);break;case 54:f(54);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;default:f(33)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 20:f(20);break;case 25:f(25);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 19:f(19);break;case 24:f(24);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 11:f(11);break;case 64:f(64);break;default:f(33)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 9:f(9);break;case 47:f(47);break;default:f(33)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 10:f(10);break;case 59:f(59);break;case 60:f(60);break;default:f(33)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 8:f(8);break;case 36:f(36);break;case 37:f(37);break;default:f(33)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 52:f(52);break;case 41:f(41);break;case 30:f(30);break;default:f(33)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(5);switch(y){case 31:f(31);break;case 32:f(32);break;case 52:f(52);break;case 41:f(41);break;default:f(33)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(6);switch(y){case 18:f(18);break;case 29:f(29);break;case 19:f(19);break;case 21:f(21);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 18:f(18);break;case 29:f(29);break;case 20:f(20);break;case 22:f(22);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<276;i+=32){var s=i,o=(i>>5)*2062+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,35,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35,35,35,35,35,35,35,35,35,35,35,35,31,31,35,35,35,35,35,35,35,65,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,35,31,35,31,31,35],r.INITIAL=[1,2,36867,45060,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22908,18836,17152,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18579,21711,17152,19008,19233,20367,19008,28684,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20116,18836,18637,19008,19233,21267,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18763,18778,18794,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18821,22923,18906,19008,19233,17431,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18937,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19054,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,18953,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21843,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21696,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22429,20131,18720,19008,19233,20367,19008,17173,23559,36437,17330,17349,18921,17189,17208,17281,20355,18087,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,21242,19111,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19024,18836,18609,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19081,22444,18987,19008,19233,20367,19008,19065,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21992,22007,18987,19008,19233,20367,19008,18690,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22414,18836,18987,19008,19233,30651,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19138,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19280,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,19172,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21783,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19218,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21651,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19249,19265,19307,18888,27857,30536,24401,31444,23357,18888,19351,18888,18890,27211,19370,27211,27211,19392,24401,31911,24401,24401,25467,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,17994,24060,18888,18888,18888,18890,19468,27211,27211,27211,27211,19484,35367,19520,24401,24401,24401,19628,18888,29855,18888,18888,23086,27211,19538,27211,27211,30756,24012,24401,19560,24401,24401,26750,18888,18888,19327,27855,27211,27211,19580,17590,24017,24401,24401,19600,25665,18888,18888,28518,27211,27212,24016,19620,19868,28435,25722,18889,19644,27211,32888,35852,19868,31018,19694,19376,19717,22215,19735,22098,19751,35203,19776,19797,19817,19840,25783,31738,24135,19701,19856,31015,23516,31008,28311,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21768,18836,19307,18888,27857,27904,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,19888,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22399,18836,19918,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21666,18836,19307,18888,27857,27525,24401,29183,21467,18888,18888,18888,18890,27211,27211,27211,27211,19946,24401,24401,24401,24401,32382,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19998,24401,24401,24401,24401,31500,18467,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,20021,24401,24401,24401,24401,24401,34271,18888,18888,18888,18888,23086,27211,27211,27211,27211,32926,29908,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,20050,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20101,19039,20191,20412,20903,17569,20309,20872,25633,20623,20505,20218,20242,17189,17208,17281,20355,20265,20306,20328,20383,22490,20796,20619,21354,20654,20410,20956,21232,20765,17421,20535,17192,18127,22459,20312,25531,22470,20309,20428,18964,20466,20491,21342,21070,20521,20682,17714,18326,17543,17559,17585,22497,20559,19504,20279,20575,20290,20475,20604,20639,20226,20670,17661,21190,17703,21176,17730,19494,20698,20711,22480,21046,21116,18971,21130,20727,20755,17675,17753,17832,17590,25518,20394,20781,20831,20202,20847,21401,17292,17934,17979,18549,20863,20588,25542,20888,20919,18072,18117,20935,20972,21032,21062,21086,18239,21102,18563,21146,21162,21206,18351,20949,20902,18340,21222,21258,21283,18360,20249,17405,21295,21311,21327,20739,20343,21370,21386,21417,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21977,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,21452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,21504,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,36501,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,28674,21946,17617,36473,18223,17237,17477,19152,17860,17892,17675,17753,17832,21575,21534,17481,19156,17864,18731,17918,36551,17292,17934,21560,30628,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21798,18836,21612,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21636,18836,18987,19008,19233,17902,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21753,19096,21903,19008,19233,20367,19008,19291,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17379,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,21931,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18280,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21962,18594,18987,19008,19233,22043,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21681,21858,18987,19008,19233,20367,19008,21544,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,32319,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,22231,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,31678,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,33588,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,35019,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22248,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22324,18836,22059,18888,27857,30501,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,34365,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22354,18836,18987,19008,19233,20367,19008,17173,27086,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,19930,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22309,22513,18987,19008,19233,20367,19008,19122,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,22544,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22608,18836,22988,23004,27585,23020,23036,23067,22087,18888,18888,18888,23083,27211,27211,27211,23102,22121,24401,24401,24401,23122,31386,26154,19674,18888,28119,28232,19424,23705,27211,27211,23142,23173,23189,23212,24401,24401,23246,34427,31693,23262,18888,23290,23308,27783,27620,23327,35263,35107,33383,23346,18193,23393,32748,23968,24401,23414,35153,23463,18888,33913,23442,23482,27211,27211,23532,23552,21431,23575,24401,24401,23604,26095,23635,23657,18888,33482,23685,33251,27211,22187,18851,23721,35536,24401,18887,23750,32641,27211,23769,23787,20080,33012,24384,25659,18888,18889,27211,27211,19719,23889,23803,31018,18890,27211,31833,19406,19447,23086,23330,19828,28224,31826,23823,26917,34978,23850,26493,25782,23878,23914,23516,31008,22105,19419,27963,19659,29781,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22623,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,28909,25783,27211,27211,27211,34048,23933,22164,24401,24401,24401,28409,23949,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,26583,18888,18888,18888,35585,23984,27211,27211,27211,24005,22201,24033,24401,24401,24401,24052,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,26496,24076,24126,24151,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22638,18836,22059,19678,27857,24185,24401,24201,24217,26592,18888,18888,18890,24252,24268,27211,27211,22121,24287,24303,24401,24401,30613,19781,35432,36007,32649,18888,25783,24322,28966,23771,27211,35072,22164,24358,32106,26829,24400,31500,31693,18888,18888,18888,24801,18890,27211,27211,27211,27211,24418,19484,24401,24401,24401,24401,20167,31181,18888,18888,18888,27833,23086,27211,27211,33540,27211,30756,21431,24401,24401,22972,24401,26095,18888,36131,18888,27855,27211,24440,27211,22187,22968,24401,24459,24401,31699,28454,18888,34528,34570,35779,24478,24402,24494,25659,18888,36228,27211,27211,24515,30981,23734,31018,18890,27211,31833,19406,19447,23086,23330,24538,31017,27856,31741,30059,23377,24563,19837,25782,19760,31015,23516,25374,22105,19419,29793,24579,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22653,18836,22059,25756,19982,34097,23196,29183,24614,24110,23641,24673,26103,24697,24443,24713,28558,22121,24748,24462,24764,23398,30613,18888,18888,18888,18888,24798,25783,27211,27211,27211,34232,35072,22164,24401,24401,24401,33302,31500,22559,24106,24232,18888,18888,34970,24817,30411,27211,27211,32484,19484,29750,35127,24401,24401,19872,31181,24852,18888,18888,24871,29221,27211,27211,32072,27211,30756,34441,24401,24401,31571,24401,26095,33141,27802,27011,27855,25295,25607,24888,22187,22968,19195,34593,24906,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,33663,27211,27211,24924,24947,23588,31018,18890,27211,31833,22135,19447,23086,23330,19828,30904,31042,24972,19840,25e3,31738,30898,25782,19760,31015,23516,31008,22105,19419,25016,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22668,18836,25041,25057,31320,25073,25089,25105,22087,34796,24236,36138,34870,34125,25121,23106,35497,22248,36613,25137,30671,27365,30613,25153,26447,25199,25233,22574,23274,25249,25265,25281,25318,25344,25360,25400,25428,25452,26731,25504,31693,23669,25558,27407,25575,28599,25934,25599,27211,28180,27304,25623,25839,25649,24401,34820,25681,25698,22586,27775,30190,25745,25778,25799,25817,28995,33569,30756,21518,33443,25837,25855,25893,26095,31254,26677,30136,27855,25930,25950,27211,22187,22968,25966,25986,24401,23428,27763,36330,26959,26002,26029,26045,26085,26119,26170,26203,26222,26239,30527,26372,26274,28404,31018,33757,27211,34262,26316,36729,26345,26366,35337,31017,26388,26407,30954,26350,33861,26434,26463,26479,26512,23516,33189,26531,26547,27963,31293,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22683,18836,26568,26181,26608,34097,26643,29183,22087,26669,18888,18888,18890,26693,27211,27211,27211,22121,26720,24401,24401,24401,30613,18888,18888,18888,18888,26774,25783,27211,27211,27211,26619,35072,22164,24401,24401,24401,21596,31500,31693,18888,18888,33978,18888,18890,27211,27211,25801,27211,27211,19484,24401,24401,24401,26792,24401,31181,18888,18888,18888,35464,23086,27211,27211,27211,26809,30756,21431,24401,24401,24401,26828,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,31948,18889,35707,27211,19719,26845,19868,31018,18890,27211,31833,19406,19447,23086,23330,26905,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,24984,31088,19419,26945,27651,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22698,18836,26999,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23051,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,27033,24401,24401,24401,24401,24036,31693,18888,18888,27056,18888,18890,27211,27211,30320,27211,27211,27075,24401,24401,29032,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,33986,27855,27211,27211,27102,17590,24017,24401,24401,27123,27144,36254,27162,27210,27228,28500,18187,34842,33426,27244,35980,27277,27302,27320,36048,34013,20999,31882,21478,27895,27356,30287,27381,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,26329,30087,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,27406,27423,27445,35294,27461,22087,18888,18888,30140,18890,27211,27211,27989,27211,22121,24401,24401,25682,24401,18866,18888,18888,18888,18888,18888,34042,27211,27211,27211,27211,29700,22164,24401,24401,24401,24401,27128,31693,27477,18888,18888,18888,18890,27194,27211,27211,27211,27211,19484,35299,24401,24401,24401,24401,19628,18888,18888,18888,27059,23086,27211,27211,27211,33366,30756,24012,24401,24401,24401,35044,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,20815,27211,30818,19960,33969,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22713,18836,22059,27496,27516,27541,35231,27557,22087,29662,26292,23292,27573,24836,27601,27211,27636,22121,35544,27686,24401,27721,18866,18888,27799,18888,27818,22071,27853,32260,27211,26013,27873,27920,22164,29419,24401,29946,33413,26742,27751,26881,18888,18888,27261,36776,27936,27211,27211,27211,27988,28005,28031,28052,24401,24401,28069,28088,28135,25488,28152,26069,28167,27211,28340,24657,28196,30756,31523,24401,28212,34176,36174,24956,28248,28266,28290,21488,33077,28327,28356,17590,20986,23126,28391,28425,28102,28451,28470,28490,28516,28534,20034,33728,25868,25659,18888,18889,27211,27211,19719,23889,19868,30241,28274,28553,28574,19406,28590,23086,23330,19828,19452,28615,28660,26147,25783,31738,19837,25782,19760,29613,35958,29276,22105,19419,27963,23157,28700,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,22528,18888,18888,18888,18888,18890,27333,27211,27211,27211,27211,19484,30853,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22728,18836,28747,28782,28817,28841,28857,28880,28896,24161,28943,32011,36261,27340,28961,29492,28982,29011,24522,29027,25436,29048,23051,27500,29090,29110,30713,18888,23512,29130,25183,27211,29155,28927,27033,29173,23230,24401,29199,35373,31693,18888,18888,25583,32629,29218,27211,27211,31461,30692,29237,27075,24401,24401,24401,29262,29302,19628,18888,34329,18888,18888,23086,27211,29329,27211,27211,30756,24012,35933,24401,24401,24401,27705,31612,18888,18888,29346,29374,27211,35650,17590,21436,29393,24401,25970,18887,33895,18888,27211,32528,27212,24016,32769,19868,25659,18888,26889,27211,27211,29412,23889,24371,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31768,19840,25783,31738,19837,29435,29508,31102,29550,29606,22105,30300,29462,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22743,18836,22059,29629,29473,34097,33285,29183,29651,27254,18888,29678,33329,32535,27211,29694,29716,22121,19202,24401,32742,29741,18866,26776,33921,28474,18888,18888,25783,29766,27211,29809,27211,35072,22164,35825,24401,29828,24401,24036,36769,25217,18888,18888,29848,18890,27211,29871,27211,26258,27211,29894,24401,29929,24401,36587,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,29725,29962,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18473,18888,18888,19584,27211,27212,24016,29982,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19902,19447,32052,19544,19828,29998,30097,30031,19840,25783,30047,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,30075,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22758,18836,30121,30156,30206,30257,30273,30336,22087,35624,32837,25762,18890,29878,34934,26812,27211,22121,24931,23223,29202,24401,18866,34373,30352,18888,18888,18888,23447,24828,27211,27211,27211,35072,30370,35052,24401,24401,24401,24036,29523,18888,18888,27146,18888,31308,30386,27211,27211,30405,30558,19484,30427,24401,24401,29938,35686,19628,28766,30447,34506,35614,23086,28731,30482,30517,30552,30756,24012,20156,30574,30598,30667,26283,33464,28945,27670,30687,32915,33504,25328,17590,23963,20450,33837,21016,32397,26300,30708,30729,27885,30748,21588,36373,30779,26653,24628,33220,32514,30806,31835,25412,25906,26515,18890,28825,31833,26133,19447,28304,31730,23834,26057,30869,30885,32181,30920,30942,32797,25782,30970,31015,23516,31008,30997,31034,27963,19659,29450,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22773,18836,31058,31074,32463,31125,31141,31197,22087,18888,29534,35471,36738,27211,24342,31213,24424,22121,24401,20175,31229,31917,27736,31245,34334,27175,18888,29094,27286,27211,31278,31336,27211,31355,31371,24401,31402,31418,24401,31437,31693,18888,31619,32841,18888,18890,27211,27211,31460,31477,27211,19484,24401,24401,31497,36581,24401,33020,18888,18888,18888,18888,30007,27211,27211,27211,27211,31516,32310,24401,24401,24401,24401,31539,18888,28762,18888,24651,35740,27211,27211,28644,31565,35796,24401,24401,19318,32188,18888,24334,28366,27212,29966,29832,19868,25659,18888,18889,27211,27211,19719,31587,19868,31635,32435,33693,30105,31663,20005,31715,31757,31784,31812,30015,31851,31878,25783,31898,19837,25782,19760,31015,23516,31008,22105,19419,27963,31933,30221,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22788,18836,22059,25729,30466,31968,24306,31984,32e3,32807,35160,27017,29590,34941,19801,29377,33700,22121,27040,30431,29396,28864,29565,18888,18888,18888,32027,18888,25783,27211,27211,23698,27211,35072,22164,24401,24401,30845,24401,24036,32045,18888,26929,18888,18888,18890,27211,31481,32068,27211,27211,32088,24401,33058,32122,24401,24401,33736,18888,18888,33162,18888,23086,27211,27211,29484,27211,28375,32144,24401,24401,33831,24401,26750,18888,18888,18888,27855,27211,27211,27211,36704,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,33107,22171,33224,24271,32169,31017,27856,31741,19840,25783,31738,30234,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,32204,32232,32252,32677,33295,29074,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23619,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,32276,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,32299,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,33886,18889,36065,27211,19719,35326,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22803,18836,32335,31647,34666,32351,32367,32417,22087,18888,32433,19335,32451,27211,32479,27107,32500,22121,24401,32551,20085,32572,18866,22287,23753,18888,18888,32602,32665,27211,32693,27211,26972,32713,32729,24401,32764,24401,25877,32785,34768,18888,27390,32823,24594,24855,32857,24890,32878,32904,27211,32942,32977,24401,33e3,29313,24401,30790,26206,27666,33904,18888,23086,36353,27211,33036,27211,30756,24012,32153,24401,33056,24401,35861,18888,18888,30354,27972,27211,27211,33800,17590,20145,24401,24401,34638,20811,18888,18888,33074,27211,27212,36167,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,34616,24169,33093,33123,33157,27856,31741,23862,26552,34302,19837,25782,19760,31015,23516,31008,33178,19973,27963,23497,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22818,18836,33205,28113,33240,34097,33275,29183,22087,33318,35438,18888,18890,33345,26391,33382,27211,22121,33399,28072,33442,24401,18866,22232,18888,33459,18888,18888,33480,33498,25175,27211,27211,26704,22164,24775,35239,24401,24401,25914,29580,18888,18888,31109,25211,33520,33539,27211,27211,33556,36284,19484,33585,24401,24401,33604,32556,19628,18888,18888,31262,33658,23086,27211,27211,33679,27211,30756,24012,24401,24401,33716,24401,26854,27480,18888,33752,27855,33259,34701,27211,17590,32102,24782,23807,24401,18887,18888,18888,27211,27211,27212,33773,36105,19868,25659,18888,23368,27211,29157,19719,23889,34454,29286,18890,33794,25302,33816,19447,34079,33853,31862,31017,27856,31741,33877,28920,33937,19837,30461,34002,22276,36041,34029,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22833,18836,34064,32616,34113,34141,34157,34192,34208,32216,36013,31549,31952,34224,34248,34287,29330,34350,34389,34413,34481,26793,18866,26187,29635,22293,18888,36654,25783,34522,34544,34566,25821,35072,22164,34586,34609,34632,19604,24036,36644,36674,24681,18888,32401,34654,31339,34682,34698,27211,34717,34753,28053,34812,34836,24401,33619,19628,34858,32236,34906,24598,33523,27612,34890,34922,24732,29246,36717,33634,34465,32984,34168,26750,34957,18888,18888,34994,35010,27211,33040,17590,29913,35035,24401,36304,25482,30171,35883,35068,35088,26627,20441,31173,35123,35143,35176,24640,30492,29358,19719,35192,35219,25384,28801,35255,35279,32586,34496,23086,23330,29061,31017,27856,31741,19840,25783,31738,24547,25164,35315,31796,35353,34316,22105,19419,27963,24091,28630,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22848,18836,22059,34782,34088,35389,21008,35405,35421,35454,18888,18888,23466,35487,27211,27211,27211,35513,31154,24401,24401,24401,35560,18888,26863,36664,35601,24872,25783,30389,23536,26250,35647,35666,22164,19522,19564,30582,35682,27697,35575,29114,18888,18888,18888,18890,27211,35702,27211,27211,27211,35723,24401,35527,24401,24401,24401,19628,30184,18888,18888,18888,23086,35739,27211,27211,27211,29139,22938,24401,24401,24401,24401,23898,35756,18888,18888,25025,35778,27211,27211,17590,20064,35795,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,23917,18890,34550,31833,22262,19447,23086,23330,26418,31017,27856,31741,19840,25783,35812,19837,27187,35841,33135,23516,31008,22105,22148,28712,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22863,18836,22059,35877,28723,34097,31164,29183,22087,26758,18888,22592,18890,23989,27211,29812,27211,22121,33778,24401,31421,24401,18866,18888,18888,26872,18888,18888,25783,27211,30732,27211,27211,35072,22164,24401,24908,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22878,18836,22059,27837,27857,35899,24401,35915,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31602,18888,18888,18888,18888,26223,27211,27211,27211,27211,27211,19484,35931,24401,24401,24401,24401,19628,18888,28136,18888,18888,35949,27211,32862,27211,32697,30756,24012,24401,32283,24401,32128,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22893,18836,22059,35974,34882,34097,33960,29183,35996,18888,23311,18888,36029,27211,27211,36064,36081,22121,24401,24401,36104,33950,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,36121,18888,25559,18888,18888,18890,27211,27211,30313,27211,27211,36154,24401,24401,34397,24401,24401,19628,28250,18888,18888,18888,23086,30926,27211,27211,27211,26983,24012,33642,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,19354,27857,36190,24401,36206,22087,18888,18888,18888,18007,27211,27211,27211,24724,22121,24401,24401,24401,30827,18866,18888,36222,18888,28795,18888,25783,35100,27211,27429,27211,35072,22164,30836,24401,24499,24401,24036,31693,18888,36244,18888,18888,18890,27211,36088,27211,27211,27211,19484,24401,28036,24401,24401,24401,19628,18888,18888,35631,18888,35762,27211,27211,36277,27211,34730,24012,24401,24401,36300,24401,36320,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,25712,18888,18888,36346,27211,27212,19184,24402,19868,25659,32029,18889,27211,33359,19719,23889,36369,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22384,18836,36389,19008,19233,20367,36434,17173,17595,36437,17330,17349,18921,17189,17208,17281,20355,36453,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22369,18836,18987,19008,19233,20367,19008,21737,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21813,18836,36489,19008,19233,20367,19008,17173,17737,36437,17330,17349,18921,17189,17208,17281,20355,17768,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20543,22022,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,36517,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,19307,18888,27857,30756,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,36567,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,36603,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,36629,36690,18720,19008,19233,20367,19008,17454,17595,36437,17330,17349,18921,17189,17208,17281,20355,17223,17308,17327,17346,18918,36754,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,0,94242,0,118820,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2482176,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,27,27,27,2207744,2404352,2412544,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3104768,2605056,2207744,2207744,2207744,2207744,2207744,2207744,2678784,2207744,2695168,2207744,2703360,2207744,2711552,2752512,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,0,2158592,2158592,3170304,3174400,2158592,0,139,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2158592,2158592,2158592,2863104,2891776,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2785280,2207744,2809856,2207744,2207744,2842624,2207744,2207744,2207744,2899968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2473984,2207744,2207744,2494464,2207744,2207744,2207744,2523136,2158592,2404352,2412544,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2605056,2158592,2158592,2158592,2158592,2158592,2158592,2678784,2158592,2695168,2158592,2703360,2158592,2711552,2752512,2158592,2158592,2785280,2158592,2158592,2785280,2158592,2809856,2158592,2158592,2842624,2158592,2158592,2158592,2899968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,18,0,0,0,0,0,0,0,2211840,0,0,641,0,2158592,0,0,0,0,0,0,0,0,2211840,0,0,32768,0,2158592,0,2158592,2158592,2158592,2383872,2158592,2158592,2158592,2158592,3006464,2383872,2207744,2207744,2207744,2207744,2158877,2158877,2158877,2158877,0,0,0,2158877,2572573,2158877,2158877,0,2207744,2207744,2596864,2207744,2207744,2207744,2207744,2207744,2207744,2641920,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,167936,0,0,2162688,0,0,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,0,0,2146304,2146304,2224128,2224128,2232320,2232320,2232320,641,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2531328,2158592,2158592,2158592,2158592,2158592,2617344,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,2158592,2502656,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2158592,2158592,2158592,2158592,2158592,2699264,2158592,2158592,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2207744,2863104,2891776,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3018752,2207744,3043328,2207744,2207744,2207744,2207744,3080192,2207744,2207744,3112960,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,172310,279,0,2162688,0,0,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2158592,2158592,2158592,2404352,2412544,2158592,2510848,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2584576,2158592,2609152,2158592,2158592,2629632,2158592,2158592,2158592,2686976,2158592,2715648,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2158592,2158592,3170304,3174400,2158592,2367488,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,0,2207744,2207744,2207744,2433024,2207744,2453504,2461696,2207744,2207744,2207744,2207744,2207744,2207744,2510848,2207744,2207744,2207744,2207744,2207744,2531328,2207744,2207744,2207744,2207744,2207744,2617344,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,1508,2715648,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2867200,2207744,2904064,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2580480,2207744,2207744,2207744,2207744,2621440,2207744,2207744,2207744,3149824,2207744,2207744,3170304,3174400,2207744,0,0,0,0,0,0,0,0,0,0,138,2158592,2158592,2158592,2404352,2412544,2707456,2732032,2207744,2207744,2207744,2822144,2826240,2207744,2895872,2207744,2207744,2924544,2207744,2207744,2973696,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,285,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3186688,2158592,2207744,2207744,2158592,2158592,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2158592,0,0,2535424,2543616,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2990080,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2572288,2981888,2207744,2207744,3002368,2207744,3047424,3063808,3076096,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3203072,2708960,2732032,2158592,2158592,2158592,2822144,2827748,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2981888,2158592,2158592,3002368,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2981888,2158592,2158592,3003876,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,20480,0,0,0,0,0,2162688,20480,0,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2908160,2527232,2207744,2207744,2576384,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2908160,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,286,2158592,2158592,0,0,2158592,2158592,2158592,2158592,2633728,2658304,0,0,2740224,2744320,0,2834432,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,0,0,29315,0,0,0,0,45,45,45,45,45,933,45,45,45,45,442,45,45,45,45,45,45,45,45,45,67,67,2494464,2158592,2158592,2158592,2524757,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,1504,2158592,2498560,2158592,2158592,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,2736128,2158592,2158592,0,2158592,2912256,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3108864,2158592,2158592,3133440,3145728,3153920,2375680,2379776,2207744,2207744,2420736,2207744,2449408,2207744,2207744,2207744,2498560,2207744,2207744,2207744,2207744,2568192,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,551,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,2020,2158592,2592768,2625536,2207744,2207744,2674688,2736128,2207744,2207744,2207744,2912256,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,542,0,544,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,641,0,0,0,0,0,0,2367488,2158592,2498560,2158592,2158592,1621,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,1608,97,97,97,97,97,97,97,97,97,97,1107,97,97,1110,97,97,3133440,3145728,3153920,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3014656,2158592,2158592,3051520,2158592,2158592,3100672,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2416640,2207744,2465792,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2633728,2658304,2740224,2744320,2834432,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,32768,0,0,0,0,0,0,2367488,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2158592,2158592,2478080,2158592,2158592,2158592,2535424,2543616,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3117056,2207744,2207744,2478080,2207744,2207744,2207744,2207744,2699264,2207744,2207744,2207744,2207744,2207744,2748416,2756608,2777088,2801664,2207744,2207744,2158877,2158877,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,0,0,2535709,2543901,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2990365,2158877,2158877,2158730,2158730,2158730,2158730,2158730,2572426,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158592,2158592,2478080,2207744,2207744,2990080,2207744,2207744,2158592,2158592,2482176,2158592,2158592,0,0,0,2158592,2158592,2158592,0,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,3010560,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158592,2428928,2158592,2514944,0,0,2158592,2588672,2158592,0,2838528,2158592,2158592,2158592,3010560,2158592,2506752,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,0,29315,922,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,1539,45,3006464,2383872,0,2020,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,2207744,0,0,2158592,2637824,2953216,2158592,2539520,2158592,2539520,2207744,0,0,2539520,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,0,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2965504,2965504,2965504,0,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2474269,2158877,2158877,0,0,2158877,2158877,2158877,2158877,2634013,2658589,0,0,2740509,2744605,0,2834717,40976,18,36884,45078,24,28,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,36884,0,0,0,24,24,24,27,27,27,27,90143,0,0,86016,0,0,2211840,102439,0,0,0,98347,0,2158592,2158592,2158592,2158592,2158592,3158016,0,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,0,94242,0,0,0,2211840,102439,0,0,106538,98347,135,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2158592,2158592,2158592,2596864,2158592,2158592,2158592,2158592,2158592,2158592,2641920,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2494464,2158592,2158592,2158592,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,0,27,27,0,2158592,2498560,2158592,2158592,0,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2494464,2158592,2158592,2158592,3006464,2383872,0,0,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,40976,18,36884,45078,24,27,147488,94242,147456,147488,106538,98347,0,0,147456,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,81920,0,94242,0,0,0,2211840,0,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2428928,2158592,2514944,2158592,2588672,2158592,2838528,2158592,2158592,40976,18,151573,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,1487,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,0,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,130,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,3096576,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,644,2207744,2207744,2207744,3186688,2207744,0,1080,0,1084,0,1088,0,0,0,0,0,0,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2531466,2158730,2158730,2158730,2158730,2158730,2617482,0,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2158592,2818048,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,159779,159744,102439,159779,98347,0,0,159744,40976,18,18,36884,0,45078,0,2224253,172032,2224253,2232448,2232448,172032,2232448,90143,0,0,2170880,0,0,550,829,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,124,124,127,127,127,40976,18,36884,45078,25,29,90143,94242,0,102439,106538,98347,0,0,163931,40976,18,18,36884,0,45078,249856,24,24,24,27,27,27,27,90143,0,0,2170880,0,0,827,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,4243810,4243810,24,24,27,27,27,2207744,0,0,0,0,0,0,2166784,0,0,0,0,57344,286,2158592,2158592,2158592,2158592,2707456,2732032,2158592,2158592,2158592,2822144,2826240,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,53248,0,0,0,0,0,97,97,97,97,97,1613,97,97,97,97,97,97,1495,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,2207744,0,0,0,0,0,0,2166784,546,0,0,0,0,286,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,17,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,120,121,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,2170880,0,53248,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,196608,18,266240,24,24,27,27,27,0,94242,0,0,0,38,102439,0,0,106538,98347,0,45,45,45,45,45,45,45,1535,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,424,45,45,45,45,45,45,45,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,199,45,45,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1766,67,67,67,1767,67,24850,24850,12564,12564,0,0,2166784,546,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,743,57889,0,2170880,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1856,45,1858,1859,67,67,67,1009,67,67,67,67,67,67,67,67,67,67,67,1021,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,0,2367773,2158877,2158877,2158877,2158877,2158877,2158877,2699549,2158877,2158877,2158877,2158877,2158877,2748701,2756893,2777373,2801949,97,1115,97,97,97,97,97,97,97,97,97,97,97,97,97,97,857,97,67,67,67,67,67,1258,67,67,67,67,67,67,67,67,67,67,67,1826,67,97,97,97,97,97,97,1338,97,97,97,97,97,97,97,97,97,97,97,97,97,870,97,97,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1579,67,67,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,97,904,905,97,97,97,97,1620,97,97,97,97,97,97,97,97,97,97,97,0,921,0,0,0,0,0,0,45,1679,67,67,67,1682,67,67,67,67,67,67,67,67,67,1690,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,189,45,45,45,1748,45,45,45,1749,1750,45,45,45,45,45,45,45,45,67,67,67,67,1959,67,67,67,67,1768,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,1791,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1802,67,1817,67,67,67,67,67,67,1823,67,67,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,1848,45,45,45,45,45,45,45,45,45,45,45,659,45,45,45,45,45,45,45,1863,67,67,67,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,1878,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,67,67,67,67,97,97,97,97,0,0,0,1973,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1165,97,1167,67,24850,24850,12564,12564,0,0,2166784,0,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,1789,97,0,94242,0,0,0,2211840,102439,0,0,106538,98347,136,2158592,2158592,2158592,2158592,2158592,3158016,229376,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,67,24850,24850,12564,12564,0,0,280,547,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,1788,97,97,0,97,2024,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,235,67,67,67,67,67,57889,547,547,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,1799,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1092,0,0,0,0,0,97,97,97,97,1612,97,97,97,97,1616,97,1297,1472,0,0,0,0,1303,1474,0,0,0,0,1309,1476,0,0,0,0,97,97,97,1481,97,97,97,97,97,97,1488,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,97,607,97,97,97,97,40976,18,36884,45078,26,30,90143,94242,0,102439,106538,98347,0,0,213080,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,143448,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,0,0,0,97,97,97,97,1482,97,1483,97,97,97,97,97,97,1326,97,97,1329,1330,97,97,97,97,97,97,1159,1160,97,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,0,94242,0,0,0,2211974,102439,0,0,106538,98347,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2474122,2158730,2158730,2494602,2158730,2158730,2158730,2809994,2158730,2158730,2842762,2158730,2158730,2158730,2900106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3014794,2158730,2158730,3051658,2158730,2158730,3100810,2158730,2158730,2158730,2158730,3096714,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,2207744,541,541,543,543,0,0,2166784,0,548,549,549,0,286,2158877,2158877,2158877,2863389,2892061,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3186973,2158877,0,0,0,0,0,0,0,0,2367626,2158877,2404637,2412829,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2564381,2158877,2158877,2605341,2158877,2158877,2158877,2158877,2158877,2158877,2679069,2158877,2695453,2158877,2703645,2158877,2711837,2752797,2158877,0,2158877,2158877,2158877,2384010,2158730,2158730,2158730,2158730,3006602,2383872,2207744,2207744,2207744,2207744,2207744,2207744,3096576,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,0,2158877,2785565,2158877,2810141,2158877,2158877,2842909,2158877,2158877,2158877,2900253,2158877,2158877,2158877,2158877,2158877,2531613,2158877,2158877,2158877,2158877,2158877,2617629,2158877,2158877,2158877,2158877,2158730,2818186,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3105053,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,0,0,0,0,0,97,97,97,1611,97,97,97,97,97,97,97,1496,97,97,1499,97,97,97,97,97,2441354,2445450,2158730,2158730,2158730,2158730,2158730,2158730,2502794,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2433162,2158730,2453642,2461834,2158730,2158730,2158730,2158730,2158730,2158730,2580618,2158730,2158730,2158730,2158730,2621578,2158730,2158730,2158730,2158730,2158730,2158730,2699402,2158730,2158730,2158730,2158730,2678922,2158730,2695306,2158730,2703498,2158730,2711690,2752650,2158730,2158730,2785418,2158730,2158730,2158730,3113098,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3186826,2158730,2207744,2207744,2207744,2207744,2781184,2793472,2207744,2818048,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,541,0,543,2158877,2502941,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2580765,2158877,2158877,2158877,2158877,2621725,2158877,3019037,2158877,3043613,2158877,2158877,2158877,2158877,3080477,2158877,2158877,3113245,2158877,2158877,2158877,2158877,0,2158877,2908445,2158877,2158877,2158877,2978077,2158877,2158877,2158877,2158877,3039517,2158877,2158730,2510986,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2584714,2158730,2609290,2158730,2158730,2629770,2158730,2158730,2158730,2388106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2605194,2158730,2158730,2158730,2158730,2687114,2158730,2715786,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2867338,2158730,2904202,2158730,2158730,2158730,2642058,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2781322,2793610,2158730,3121290,2158730,2158730,2158730,3149962,2158730,2158730,3170442,3174538,2158730,2367488,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2441216,2445312,2207744,2207744,2207744,2207744,2207744,2207744,2502656,2158877,2433309,2158877,2453789,2461981,2158877,2158877,2158877,2158877,2158877,2158877,2511133,2158877,2158877,2158877,2158877,2584861,2158877,2609437,2158877,2158877,2629917,2158877,2158877,2158877,2687261,2158877,2715933,2158877,2158730,2158730,2973834,2158730,2982026,2158730,2158730,3002506,2158730,3047562,3063946,3076234,2158730,2158730,2158730,2158730,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158877,2507037,0,0,2158877,2158730,2158730,2158730,3203210,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2564096,2207744,2207744,2207744,2707741,2732317,2158877,2158877,2158877,2822429,2826525,2158877,2896157,2158877,2158877,2924829,2158877,2158877,2973981,2158877,18,0,0,0,0,0,0,0,2211840,0,0,642,0,2158592,0,45,1529,45,45,45,45,45,45,45,45,45,45,45,45,45,1755,45,67,67,2982173,2158877,2158877,3002653,2158877,3047709,3064093,3076381,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3203357,2523274,2527370,2158730,2158730,2576522,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2908298,2494749,2158877,2158877,2158877,2523421,2527517,2158877,2158877,2576669,2158877,2158877,2158877,2158877,2158877,2158877,0,40976,0,18,18,4321280,2224253,2232448,4329472,2232448,2158730,2498698,2158730,2158730,2158730,2158730,2568330,2158730,2592906,2625674,2158730,2158730,2674826,2736266,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2158730,2912394,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3109002,2158730,2158730,3133578,3145866,3154058,2375680,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375965,2380061,2158877,2158877,2421021,2158877,2449693,2158877,2158877,2158877,3117341,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3104906,2158730,2158730,2158730,2158730,2158730,2158730,2158877,2498845,2158877,2158877,0,2158877,2158877,2568477,2158877,2593053,2625821,2158877,2158877,2674973,0,0,0,0,97,97,1480,97,97,97,97,97,1485,97,97,97,0,97,97,1729,97,1731,97,97,97,97,97,97,97,311,97,97,97,97,97,97,97,97,1520,97,97,1523,97,97,1526,97,2736413,2158877,2158877,0,2158877,2912541,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3109149,2158877,2158877,3014941,2158877,2158877,3051805,2158877,2158877,3100957,2158877,2158877,3121437,2158877,2158877,2158877,3150109,3133725,3146013,3154205,2158730,2408586,2416778,2158730,2465930,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3018890,2158730,3043466,2158730,2158730,2158730,2158730,3080330,2633866,2658442,2740362,2744458,2834570,2949258,2158730,2986122,2158730,2998410,2158730,2158730,2158730,3129482,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158877,2408733,2416925,2158877,2466077,2158877,2158877,3170589,3174685,2158877,0,0,0,2158730,2158730,2158730,2158730,2158730,2424970,2158730,2158730,2158730,2158730,2707594,2732170,2158730,2158730,2158730,2822282,2826378,2158730,2896010,2158730,2158730,2924682,2949405,2158877,2986269,2158877,2998557,2158877,2158877,2158877,3129629,2158730,2158730,2478218,2158730,2158730,2158730,2535562,2543754,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3117194,2207744,2207744,2478080,2207744,2207744,2207744,2207744,3014656,2207744,2207744,3051520,2207744,2207744,3100672,2207744,2207744,3121152,2207744,2207744,2207744,2207744,2207744,2584576,2207744,2609152,2207744,2207744,2629632,2207744,2207744,2207744,2686976,2207744,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158877,2158877,2478365,0,2158877,2158877,2158877,2158877,2158877,2158877,2158730,2158730,2482314,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,823,0,825,2158730,2158730,2158730,2990218,2158730,2158730,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,135,0,2207744,2207744,2990080,2207744,2207744,2158877,2158877,2482461,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,2158877,2158730,2429066,2158730,2515082,2158730,2588810,2158730,2838666,2158730,2158730,2158730,3010698,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158877,2429213,2158877,2515229,0,0,2158877,2588957,2158877,0,2838813,2158877,2158877,2158877,3010845,2158730,2506890,2158730,2158730,2158730,2748554,2756746,2777226,2801802,2158730,2158730,2158730,2863242,2891914,2158730,2158730,2158730,2158730,2158730,2158730,2564234,2158730,2158730,2158730,2158730,2158730,2597002,2158730,2158730,2158730,3006464,2384157,0,0,2158877,2158877,2158877,2158877,3006749,2158730,2637962,2953354,2158730,2207744,2637824,2953216,2207744,0,0,2158877,2638109,2953501,2158877,2539658,2158730,2539520,2207744,0,0,2539805,2158877,2158730,2158730,2158730,2977930,2158730,2158730,2158730,2158730,3039370,2158730,2158730,2158730,2158730,2158730,2158730,3158154,2207744,0,2158877,2158730,2207744,0,2158877,2158730,2207744,0,2158877,2965642,2965504,2965789,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,97,1484,97,97,97,97,2158592,18,0,122880,0,0,0,77824,0,2211840,0,0,0,0,2158592,0,356,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,45,1751,45,45,45,45,45,45,45,67,67,1427,67,67,67,67,67,1432,67,67,67,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,122880,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,1322,550,0,286,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,4329472,27,27,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,542,0,0,0,542,0,544,0,0,0,544,0,550,0,0,0,0,0,97,97,1610,97,97,97,97,97,97,97,97,898,97,97,97,97,97,97,97,0,94242,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,94242,237568,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,192512,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,94,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,96,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,12378,40976,18,18,36884,0,45078,0,24,24,24,126,126,126,126,90143,0,0,2170880,0,0,0,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,20480,40976,0,18,18,24,24,27,27,27,40976,18,36884,45078,24,27,90143,94242,241664,102439,106538,98347,0,0,20568,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,200797,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,0,0,44,0,0,20575,40976,18,36884,45078,24,27,90143,94242,0,41,41,41,0,0,1126400,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,89,40976,18,18,36884,0,45078,0,24,24,24,27,131201,27,27,90143,0,0,2170880,0,0,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,208896,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,0,0,0,0,0,0,2367488,32768,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2433024,2158592,2453504,2461696,2158592,2158592,2158592,2158592,2158592,2158592,2510848,2158592,2158592,2158592,2158592,40976,18,36884,245783,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,221184,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,180224,40976,18,18,36884,155648,45078,0,24,24,217088,27,27,27,217088,90143,0,0,2170880,0,0,828,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,233472,0,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,718,45,45,45,45,45,45,45,45,45,727,131427,0,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,45,1808,45,45,45,45,67,67,67,67,67,67,67,97,97,0,0,97,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,0,0,97,97,97,97,97,97,1787,0,97,97,0,97,97,97,45,45,45,45,2029,45,67,67,67,67,2033,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,97,45,1798,45,45,1800,45,45,0,1472,0,0,0,0,0,1474,0,0,0,0,0,1476,0,0,0,0,1315,0,0,0,0,97,97,97,97,1320,97,97,0,0,97,97,97,97,1786,97,0,0,97,97,0,1790,1527,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,663,67,24850,24850,12564,12564,0,57889,281,0,0,53531,53531,367,286,97,97,0,0,97,97,97,1785,97,97,0,0,97,97,0,97,97,1979,97,97,45,45,1983,45,1984,45,45,45,45,45,652,45,45,45,45,45,45,45,45,45,45,690,45,45,694,45,45,40976,19,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,262144,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,46,67,98,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,45,67,97,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,258048,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,1122423,40976,18,36884,45078,24,27,90143,94242,0,1114152,1114152,1114152,0,0,1114112,40976,18,36884,45078,24,27,90143,94242,37,102439,106538,98347,0,0,204800,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,57436,40976,18,36884,45078,24,27,33,33,0,33,33,33,0,0,0,40976,18,18,36884,0,45078,0,124,124,124,127,127,127,127,90143,0,0,2170880,0,0,550,0,2158877,2158877,2158877,2388253,2158877,2158877,2158877,2158877,2158877,2781469,2793757,2158877,2818333,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2867485,2158877,2904349,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3096861,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2441501,2445597,2158877,2158877,2158877,2158877,2158877,40976,122,123,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,936,2158592,4243810,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,935,45,45,45,715,45,45,45,45,45,45,45,723,45,45,45,45,45,1182,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,45,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,47,68,99,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,48,69,100,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,49,70,101,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,50,71,102,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,51,72,103,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,52,73,104,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,53,74,105,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,54,75,106,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,55,76,107,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,56,77,108,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,57,78,109,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,58,79,110,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,59,80,111,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,60,81,112,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,61,82,113,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,62,83,114,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,63,84,115,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,64,85,116,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,65,86,117,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,66,87,118,40976,18,36884,45078,24,27,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,0,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1314,0,0,0,0,0,0,97,97,97,97,97,1321,97,18,131427,0,0,0,0,0,0,362,0,0,365,0,367,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1360,97,97,131,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,145,149,45,45,45,45,45,174,45,179,45,185,45,188,45,45,202,67,255,67,67,269,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,292,296,97,97,97,97,97,321,97,326,97,332,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,646,335,97,97,349,97,97,0,40976,0,18,18,24,24,27,27,27,437,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,523,67,67,67,67,67,67,67,67,67,67,67,67,511,67,67,67,97,97,97,620,97,97,97,97,97,97,97,97,97,97,97,97,97,1501,1502,97,793,67,67,796,67,67,67,67,67,67,67,67,67,67,808,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,2052,67,67,67,67,813,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,830,97,97,97,97,97,97,97,97,97,315,97,97,97,97,97,97,841,97,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,589,97,97,97,97,97,97,97,97,97,867,97,97,97,97,97,97,97,891,97,97,894,97,97,97,97,97,97,97,97,97,97,906,45,937,45,45,940,45,45,45,45,45,45,948,45,45,45,45,45,734,735,67,737,67,738,67,740,67,67,67,45,967,45,45,45,45,45,45,45,45,45,45,45,45,45,45,435,45,45,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,67,67,67,67,67,25398,1081,13112,1085,54074,1089,0,0,0,0,0,0,363,0,28809,0,139,45,45,45,45,45,45,1674,45,45,45,45,45,45,45,45,67,1913,67,1914,67,67,67,1918,67,67,97,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,630,97,97,97,97,97,1169,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,45,1534,45,45,45,45,45,1538,45,45,45,45,1233,45,45,45,45,45,45,67,67,67,67,67,67,67,67,742,67,45,45,1191,45,45,45,45,45,45,45,45,45,45,45,45,45,454,67,67,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,1251,67,0,0,97,97,97,97,45,45,67,67,2050,0,97,97,45,45,45,732,45,45,67,67,67,67,67,67,67,67,67,67,67,67,97,97,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,772,67,67,67,1293,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,368,2158592,2158592,2158592,2404352,2412544,1323,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,1737,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,1373,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,647,45,45,1387,45,45,1391,45,45,45,45,45,45,45,45,45,45,410,45,45,45,45,45,1400,45,45,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,941,45,943,45,45,45,45,45,45,951,45,67,1438,67,67,67,67,67,67,67,67,67,67,1447,67,67,67,67,67,67,782,67,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,97,1491,97,97,97,97,97,97,97,97,97,97,1500,97,97,97,0,97,97,97,97,97,97,97,97,97,97,1736,97,45,45,1541,45,45,45,45,45,45,45,45,45,45,45,45,45,677,45,45,67,1581,67,67,67,67,67,67,67,67,67,67,67,67,67,67,791,792,67,67,67,67,1598,67,1600,67,67,67,67,67,67,67,67,1472,97,97,97,1727,97,97,97,97,97,97,97,97,97,97,97,97,97,1513,97,97,67,67,97,1879,97,1881,97,0,1884,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,1842,97,97,67,67,67,67,67,97,97,97,97,1928,0,0,0,97,97,97,97,97,97,45,45,45,45,45,1903,45,45,45,67,67,67,67,97,97,97,97,1971,0,0,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1381,45,45,45,45,1976,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1747,809,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,97,907,97,97,97,97,97,97,97,97,97,97,97,638,0,0,0,0,1478,97,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,67,67,67,67,1244,67,67,67,67,67,67,67,67,67,67,67,477,67,67,67,67,67,67,1294,67,67,67,67,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1324,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,0,1374,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,945,45,45,45,45,45,45,45,45,1908,45,45,1910,45,67,67,67,67,67,67,67,67,1919,67,0,0,97,97,97,97,45,2048,67,2049,0,0,97,2051,45,45,45,939,45,45,45,45,45,45,45,45,45,45,45,45,397,45,45,45,1921,67,67,1923,67,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1947,45,1935,0,0,0,97,1939,97,97,1941,97,45,45,45,45,45,45,382,389,45,45,45,45,45,45,45,45,1810,45,45,1812,67,67,67,67,67,256,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,336,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,45,371,373,45,45,45,955,45,45,45,45,45,45,45,45,45,45,45,45,413,45,45,45,457,459,67,67,67,67,67,67,67,67,473,67,478,67,67,482,67,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,97,1828,97,554,556,97,97,97,97,97,97,97,97,570,97,575,97,97,579,97,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,330,97,97,67,746,67,67,67,67,67,67,67,67,67,758,67,67,67,67,67,67,67,1575,67,67,67,67,67,67,67,67,493,67,67,67,67,67,67,67,97,97,844,97,97,97,97,97,97,97,97,97,856,97,97,97,0,97,97,97,97,97,97,97,97,1735,97,97,97,0,97,97,97,97,97,97,97,1642,97,1644,97,97,890,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,67,67,67,67,1065,1066,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,67,67,67,496,67,67,97,97,1505,97,97,97,97,97,97,97,97,97,97,97,97,97,593,97,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,1617,97,97,1635,0,1637,97,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,67,67,1704,67,67,67,67,97,97,97,97,97,97,97,97,97,565,572,97,97,97,97,97,97,97,97,1832,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,1946,45,45,67,67,67,67,67,97,1926,97,1927,97,0,0,0,97,97,1934,2043,0,0,97,97,97,2047,45,45,67,67,0,1832,97,97,45,45,45,981,45,45,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,131427,0,0,0,0,362,0,365,28809,367,139,45,45,372,45,45,45,45,1661,1662,45,45,45,45,45,1666,45,45,45,45,45,1673,45,1675,45,45,45,45,45,45,45,67,1426,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,67,67,45,418,45,45,420,45,45,423,45,45,45,45,45,45,45,45,959,45,45,962,45,45,45,45,458,67,67,67,67,67,67,67,67,67,67,67,67,67,67,483,67,67,67,67,504,67,67,506,67,67,509,67,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,555,97,97,97,97,97,97,97,97,97,97,97,97,97,97,580,97,97,97,97,601,97,97,603,97,97,606,97,97,97,97,97,97,848,97,97,97,97,97,97,97,97,97,1498,97,97,97,97,97,97,45,45,714,45,45,45,45,45,45,45,45,45,45,45,45,45,989,990,45,67,67,67,67,67,1011,67,67,67,67,1015,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,467,67,67,67,67,67,67,67,45,45,1179,45,45,45,45,45,45,45,45,45,45,45,45,45,1003,1004,67,1217,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,728,67,1461,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,97,1516,97,97,97,97,97,97,97,97,97,97,97,97,97,97,871,97,67,67,67,1705,67,67,67,97,97,97,97,97,97,97,97,97,567,97,97,97,97,97,97,97,97,97,97,1715,97,97,97,97,97,97,97,97,97,0,0,0,45,45,1380,45,45,45,45,45,67,67,97,97,97,97,97,0,0,0,97,1887,97,97,0,0,97,97,97,0,97,97,97,97,97,2006,45,45,1907,45,45,45,45,45,67,67,67,67,67,67,67,67,67,1920,67,97,0,2035,97,97,97,97,97,45,45,45,45,67,67,67,1428,67,67,67,67,67,67,1435,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,146,45,152,45,45,165,45,175,45,180,45,45,187,190,195,45,203,254,257,262,67,270,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,293,97,299,97,97,312,97,322,97,327,97,97,334,337,342,97,350,97,97,0,40976,0,18,18,24,24,27,27,27,67,484,67,67,67,67,67,67,67,67,67,67,67,67,67,499,97,581,97,97,97,97,97,97,97,97,97,97,97,97,97,596,648,45,650,45,651,45,653,45,45,45,657,45,45,45,45,45,45,1954,67,67,67,1958,67,67,67,67,67,67,67,768,67,67,67,67,67,67,67,67,769,67,67,67,67,67,67,67,680,45,45,45,45,45,45,45,45,688,689,691,45,45,45,45,45,983,45,45,45,45,45,45,45,45,45,45,947,45,45,45,45,952,45,45,698,699,45,45,702,703,45,45,45,45,45,45,45,711,744,67,67,67,67,67,67,67,67,67,757,67,67,67,67,761,67,67,67,67,765,67,767,67,67,67,67,67,67,67,67,775,776,778,67,67,67,67,67,67,785,786,67,67,789,790,67,67,67,67,67,67,1442,67,67,67,67,67,67,67,67,67,97,97,97,1775,97,97,97,67,67,67,67,67,798,67,67,67,802,67,67,67,67,67,67,67,67,1465,67,67,1468,67,67,1471,67,67,810,67,67,67,67,67,67,67,67,67,821,25398,542,13112,544,57889,0,0,54074,54074,550,0,833,97,835,97,836,97,838,97,97,0,0,97,97,97,2002,97,97,97,97,97,45,45,45,45,45,1740,45,45,45,1744,45,45,45,97,842,97,97,97,97,97,97,97,97,97,855,97,97,97,97,0,1717,1718,97,97,97,97,97,1722,97,0,0,859,97,97,97,97,863,97,865,97,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,873,874,876,97,97,97,97,97,97,883,884,97,97,887,888,97,18,131427,0,0,0,0,0,0,362,225280,0,365,0,367,0,45,45,45,1531,45,45,45,45,45,45,45,45,45,45,45,1199,45,45,45,45,45,97,97,908,97,97,97,97,97,97,97,97,97,919,638,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2425117,2158877,2158877,2158877,2158877,2158877,2158877,2597149,2158877,2158877,2158877,2158877,2158877,2158877,2642205,2158877,2158877,2158877,2158877,2158877,3158301,0,2375818,2379914,2158730,2158730,2420874,2158730,2449546,2158730,2158730,953,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,965,978,45,45,45,45,45,45,985,45,45,45,45,45,45,45,45,971,45,45,45,45,45,45,45,67,67,67,67,67,1027,67,1029,67,67,67,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,1077,1078,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,366,0,139,2158730,2158730,2158730,2404490,2412682,1113,97,97,97,97,97,97,1121,97,1123,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1540,1155,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,1168,97,97,1171,1172,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,1533,45,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,183,45,45,45,45,201,45,45,45,1219,45,45,45,45,45,45,45,1226,45,45,45,45,45,168,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1046,67,67,1254,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,806,807,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,1351,97,97,97,1354,97,97,97,1359,97,97,97,0,97,97,97,97,1640,97,97,97,97,97,97,97,897,97,97,97,902,97,97,97,97,97,97,97,97,1366,97,97,97,97,97,97,97,1371,97,97,97,0,97,97,97,1730,97,97,97,97,97,97,97,97,915,97,97,97,97,0,360,0,67,67,67,1440,67,67,67,67,67,67,67,67,67,67,67,67,1017,67,1019,67,67,67,67,67,1453,67,67,67,67,67,67,67,67,67,67,1459,97,97,97,1493,97,97,97,97,97,97,97,97,97,97,97,97,97,1525,97,97,97,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,1514,67,67,67,67,1584,67,67,67,67,67,1590,67,67,67,67,67,67,67,783,67,67,67,788,67,67,67,67,67,67,67,67,67,1599,1601,67,67,67,1604,67,1606,1607,67,1472,0,1474,0,1476,0,97,97,97,97,97,97,1614,97,97,97,97,45,45,1850,45,45,45,45,1855,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,1229,97,1618,97,97,97,97,97,97,97,1625,97,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,447,45,45,45,45,45,67,67,1633,97,97,0,97,97,97,97,97,97,97,97,1643,1645,97,97,0,0,97,97,1784,97,97,97,0,0,97,97,0,97,1894,1895,97,1897,97,45,45,45,45,45,45,45,45,45,656,45,45,45,45,45,45,97,1648,97,1650,1651,97,0,45,45,45,1654,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,658,45,45,45,45,664,45,45,1659,45,45,45,45,45,45,45,45,45,45,45,45,45,1187,45,45,1669,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1005,67,67,1681,67,67,67,67,67,67,67,1686,67,67,67,67,67,67,67,784,67,67,67,67,67,67,67,67,1055,67,67,67,67,1060,67,67,97,97,1713,97,0,97,97,97,97,97,97,97,97,97,0,0,0,1378,45,45,45,45,45,45,45,408,45,45,45,45,45,45,45,45,1547,45,1549,45,45,45,45,45,97,97,1780,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,2027,2028,45,45,67,67,2031,2032,67,45,45,1804,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1917,67,67,67,67,67,67,67,1819,67,67,67,67,67,67,67,67,97,97,97,1708,97,97,97,97,97,45,45,1862,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,67,1877,97,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,1839,0,0,97,97,97,97,1936,0,0,97,97,97,97,97,97,1943,1944,1945,45,45,45,45,670,45,45,45,45,674,45,45,45,45,678,45,1948,45,1950,45,45,45,45,1955,1956,1957,67,67,67,1960,67,1962,67,67,67,67,1967,1968,1969,97,0,0,0,97,97,1974,97,0,1936,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1906,0,1977,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,1746,45,45,45,45,2011,67,67,2013,67,67,67,2017,97,97,0,0,2021,97,8192,97,97,2025,45,45,45,45,45,45,67,67,67,67,67,1916,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,140,45,45,45,1180,45,45,45,45,1184,45,45,45,45,45,45,45,387,45,392,45,45,396,45,45,399,45,45,67,207,67,67,67,67,67,67,236,67,67,67,67,67,67,67,800,67,67,67,67,67,67,67,67,67,1603,67,67,67,67,67,0,97,97,287,97,97,97,97,97,97,316,97,97,97,97,97,97,0,45,45,45,45,45,45,45,1656,1657,45,376,45,45,45,45,45,388,45,45,45,45,45,45,45,45,1406,45,45,45,45,45,45,45,67,67,67,67,462,67,67,67,67,67,474,67,67,67,67,67,67,67,817,67,67,67,67,25398,542,13112,544,97,97,97,97,559,97,97,97,97,97,571,97,97,97,97,97,97,896,97,97,97,900,97,97,97,97,97,97,912,914,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,45,391,45,45,45,45,45,45,45,45,713,45,45,45,45,45,45,45,45,45,45,45,45,45,45,662,45,1140,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,636,67,67,1283,67,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,1363,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,889,97,97,97,1714,0,97,97,97,97,97,97,97,97,97,0,0,926,45,45,45,45,45,45,45,45,672,45,45,45,45,45,45,45,45,686,45,45,45,45,45,45,45,45,944,45,45,45,45,45,45,45,45,1676,45,45,45,45,45,45,67,97,97,97,1833,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1902,45,45,45,45,45,957,45,45,45,45,961,45,963,45,45,45,67,97,2034,0,97,97,97,97,97,2040,45,45,45,2042,67,67,67,67,67,67,1574,67,67,67,67,67,1578,67,67,67,67,67,67,799,67,67,67,804,67,67,67,67,67,67,67,1298,0,0,0,1304,0,0,0,1310,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,1414,45,45,45,45,45,45,45,45,45,45,428,45,45,45,45,45,57889,0,0,54074,54074,550,831,97,97,97,97,97,97,97,97,97,568,97,97,97,97,578,97,45,45,968,45,45,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,67,67,67,67,67,25398,1082,13112,1086,54074,1090,0,0,0,0,0,0,364,0,0,0,139,2158592,2158592,2158592,2404352,2412544,67,67,67,67,1464,67,67,67,67,67,67,67,67,67,67,67,510,67,67,67,67,97,97,97,97,1519,97,97,97,97,97,97,97,97,97,97,97,918,97,0,0,0,0,1528,45,45,45,45,45,45,45,45,45,45,45,45,45,45,976,45,1554,45,45,45,45,45,45,45,45,1562,45,45,1565,45,45,45,45,683,45,45,45,687,45,45,692,45,45,45,45,45,1953,45,67,67,67,67,67,67,67,67,67,1014,67,67,67,67,67,67,1568,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,1594,97,97,1649,97,97,97,0,45,45,1653,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,45,45,1670,45,1672,45,45,45,45,45,45,45,45,45,45,67,736,67,67,67,67,67,741,67,67,67,1680,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,67,1692,67,67,67,67,67,67,67,1697,67,1699,67,67,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,468,475,67,67,67,67,67,67,1769,67,67,67,67,67,67,67,97,97,97,97,97,97,97,624,97,97,97,97,97,97,634,97,97,1792,97,97,97,97,97,97,97,45,45,45,45,45,45,45,958,45,45,45,45,45,45,964,45,150,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,977,204,45,67,67,67,217,67,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,67,67,67,67,271,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,351,97,0,40976,0,18,18,24,24,27,27,27,45,45,938,45,45,45,45,45,45,45,45,45,45,45,45,45,1398,45,45,45,153,45,161,45,45,45,45,45,45,45,45,45,45,45,45,660,661,45,45,205,45,67,67,67,67,220,67,228,67,67,67,67,67,67,67,0,0,0,0,0,280,94,0,0,67,67,67,67,67,272,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,352,97,0,40976,0,18,18,24,24,27,27,27,45,439,45,45,45,45,45,445,45,45,45,452,45,45,67,67,212,216,67,67,67,67,67,241,67,246,67,252,67,67,486,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,1245,67,67,67,67,67,67,67,67,1013,67,67,1016,67,67,67,67,67,521,67,67,525,67,67,67,67,67,531,67,67,67,538,67,0,0,2046,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,1418,45,45,1421,97,97,583,97,97,97,97,97,97,97,591,97,97,97,97,97,97,913,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,1384,97,618,97,97,622,97,97,97,97,97,628,97,97,97,635,97,18,131427,0,0,0,639,0,132,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,932,45,45,45,45,45,1544,45,45,45,45,45,1550,45,45,45,45,45,1194,45,1196,45,45,45,45,45,45,45,45,999,45,45,45,45,45,67,67,45,45,667,45,45,45,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,696,45,45,45,701,45,45,45,45,45,45,45,45,710,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,194,45,45,45,729,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,805,67,67,67,67,67,67,67,1587,67,1589,67,67,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,0,0,0,0,0,0,2162968,0,0,67,67,67,67,67,814,816,67,67,67,67,67,25398,542,13112,544,67,67,1008,67,67,67,67,67,67,67,67,67,67,67,1020,67,0,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,45,67,67,67,67,1429,67,1430,67,67,67,67,67,1062,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,1076,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,97,97,97,97,1102,97,97,97,97,97,97,97,97,97,97,97,1124,97,1126,97,97,1114,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1112,97,97,1156,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,97,97,1170,97,97,97,97,0,921,0,0,0,0,0,0,45,45,45,45,1532,45,45,45,45,1536,45,45,45,45,45,172,45,45,45,45,45,45,45,45,45,45,706,45,45,709,45,45,1177,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,1204,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,45,45,1232,45,45,45,45,45,45,45,67,1237,67,67,67,67,67,67,1053,1054,67,67,67,67,67,67,1061,67,67,1282,67,67,67,67,67,67,67,67,67,1289,67,67,67,1292,97,97,97,97,1339,97,97,97,97,97,97,1344,97,97,97,97,45,1849,45,1851,45,45,45,45,45,45,45,45,721,45,45,45,45,45,726,45,1385,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1188,45,45,1401,1402,45,45,45,45,1405,45,45,45,45,45,45,45,45,1752,45,45,45,45,45,67,67,1410,45,45,45,1413,45,1415,45,45,45,45,45,45,1419,45,45,45,45,1806,45,45,45,45,45,45,67,67,67,67,67,67,67,97,97,2019,0,97,67,67,67,1452,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,1259,67,67,67,67,67,67,1264,67,67,1460,67,1462,67,67,67,67,67,67,1466,67,67,67,67,67,67,67,67,1588,67,67,67,67,67,67,67,0,1300,0,0,0,1306,0,0,0,97,97,97,1506,97,97,97,97,97,97,97,97,1512,97,97,97,0,1728,97,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,1515,97,1517,97,97,97,97,97,97,1521,97,97,97,97,97,97,0,45,1652,45,45,45,1655,45,45,45,45,45,1542,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,1553,45,45,45,1556,45,45,45,45,45,45,45,45,45,45,45,45,45,693,45,45,45,67,67,67,67,1572,67,67,67,67,1576,67,67,67,67,67,67,67,67,1602,67,67,1605,67,67,67,0,67,1582,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1580,67,67,1596,67,67,67,67,67,67,67,67,67,67,67,67,67,0,542,0,544,67,67,67,67,1759,67,67,67,67,67,67,67,67,67,67,67,533,67,67,67,67,67,67,67,1770,67,67,67,67,67,97,97,97,97,97,97,1777,97,97,97,1793,97,97,97,97,97,45,45,45,45,45,45,45,998,45,45,1001,1002,45,45,67,67,45,1861,45,67,67,67,67,67,67,67,67,1871,67,1873,1874,67,0,97,45,67,0,97,45,67,16384,97,45,67,97,0,0,0,1473,0,1082,0,0,0,1475,0,1086,0,0,0,1477,1876,67,97,97,97,97,97,1883,0,1885,97,97,97,1889,0,0,0,286,0,0,0,286,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,126,126,126,2053,0,2055,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,2039,97,45,45,45,45,67,67,67,67,67,226,67,67,67,67,67,67,67,67,1246,67,67,1249,1250,67,67,67,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,141,45,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,1186,45,45,1189,45,45,155,45,45,45,45,45,45,45,45,45,191,45,45,45,45,700,45,45,45,45,45,45,45,45,45,45,45,1753,45,45,45,67,67,45,45,67,208,67,67,67,222,67,67,67,67,67,67,67,67,67,1764,67,67,67,67,67,67,67,258,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,288,97,97,97,302,97,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,338,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,370,45,45,45,45,716,45,45,45,45,45,722,45,45,45,45,45,45,1912,67,67,67,67,67,67,67,67,67,819,67,67,25398,542,13112,544,45,403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1409,45,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,67,771,67,67,67,67,520,67,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,1271,67,67,67,1274,67,67,67,1279,67,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,553,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,97,1138,97,97,97,97,617,97,97,97,97,97,97,97,97,97,97,97,631,97,97,97,0,1834,97,97,97,97,97,0,0,0,97,97,97,97,97,353,0,40976,0,18,18,24,24,27,27,27,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,682,45,45,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,67,67,747,748,67,67,67,67,755,67,67,67,67,67,67,67,0,0,0,1302,0,0,0,1308,0,67,794,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1701,67,97,97,97,845,846,97,97,97,97,853,97,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,97,892,97,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,45,992,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,1239,67,67,67,1063,67,67,67,67,67,1068,67,67,67,67,67,67,67,0,0,1301,0,0,0,1307,0,0,97,1141,97,97,97,97,97,97,97,97,97,97,97,1152,97,97,0,0,97,97,2001,0,97,2003,97,97,97,45,45,45,1739,45,45,45,1742,45,45,45,45,45,97,97,97,97,1157,97,97,97,97,97,1162,97,97,97,97,97,97,1145,97,97,97,97,97,1151,97,97,97,1253,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,539,45,1423,45,45,67,67,67,67,67,67,67,1431,67,67,67,67,67,67,67,1695,67,67,67,67,67,1700,67,1702,67,67,1439,67,67,67,67,67,67,67,67,67,67,67,67,67,514,67,67,97,97,1492,97,97,97,97,97,97,97,97,97,97,97,97,97,611,97,97,1703,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,852,97,97,97,97,97,97,45,1949,45,1951,45,45,45,67,67,67,67,67,67,67,1961,67,0,97,45,67,0,97,2060,2061,0,2062,45,67,97,0,0,2036,97,97,97,97,45,45,45,45,67,67,67,67,67,223,67,67,237,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,507,67,67,67,67,67,67,67,1963,67,67,67,97,97,97,97,0,1972,0,97,97,97,1975,0,921,29315,0,0,0,0,45,45,45,931,45,45,45,45,45,407,45,45,45,45,45,45,45,45,45,417,45,45,1989,67,67,67,67,67,67,67,67,67,67,67,1996,97,18,131427,0,0,360,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,930,45,45,45,45,45,45,444,45,45,45,45,45,45,45,67,67,97,97,1998,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,1985,45,1986,45,45,45,156,45,45,170,45,45,45,45,45,45,45,45,45,45,675,45,45,45,45,679,131427,0,358,0,0,362,0,365,28809,367,139,45,45,45,45,45,381,45,45,45,45,45,45,45,45,45,400,45,45,419,45,45,45,45,45,45,45,45,45,45,45,45,436,67,67,67,67,67,505,67,67,67,67,67,67,67,67,67,67,820,67,25398,542,13112,544,67,67,522,67,67,67,67,67,529,67,67,67,67,67,67,67,0,1299,0,0,0,1305,0,0,0,97,97,619,97,97,97,97,97,626,97,97,97,97,97,97,97,1105,97,97,97,97,1109,97,97,97,67,67,67,67,749,67,67,67,67,67,67,67,67,67,760,67,0,97,45,67,2058,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,2041,67,67,67,67,67,780,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,97,97,97,878,97,97,97,97,97,97,97,97,97,97,97,97,97,1629,97,0,45,979,45,45,45,45,984,45,45,45,45,45,45,45,45,45,1198,45,45,45,45,45,45,67,1023,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,470,67,67,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1094,0,0,0,1092,1315,0,0,0,0,97,97,97,97,97,97,97,97,97,1486,97,1489,97,97,97,1117,97,97,97,97,1122,97,97,97,97,97,97,97,1146,97,97,97,97,97,97,97,97,881,97,97,97,886,97,97,97,1311,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1615,97,97,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,97,1847,97,45,45,45,45,1852,45,45,45,45,45,45,45,1235,45,45,45,67,67,67,67,67,1868,67,67,67,1872,67,67,67,67,67,97,97,97,97,1882,0,0,0,97,97,97,97,0,1891,67,67,67,67,67,97,97,97,97,97,1929,0,0,97,97,97,97,97,97,45,1900,45,1901,45,45,45,1905,45,67,2054,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,2037,2038,97,97,45,45,45,45,67,67,67,67,1867,67,67,67,67,67,67,67,67,67,1774,97,97,97,97,97,97,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,142,45,45,45,1412,45,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,157,45,45,171,45,45,45,182,45,45,45,45,200,45,45,45,1543,45,45,45,45,45,45,45,45,1551,45,45,45,45,1181,45,45,45,45,45,45,45,45,45,45,45,1211,45,45,45,1214,45,45,45,67,209,67,67,67,224,67,67,238,67,67,67,249,67,0,97,2056,2057,0,2059,45,67,0,97,45,67,97,0,0,1937,97,97,97,97,97,97,45,45,45,45,45,45,1741,45,45,45,45,45,45,67,67,67,267,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,289,97,97,97,304,97,97,318,97,97,97,329,97,97,0,0,97,1783,97,97,97,97,0,0,97,97,0,97,97,97,45,2026,45,45,45,45,67,2030,67,67,67,67,67,67,1041,67,67,67,67,67,67,67,67,67,1044,67,67,67,67,67,67,97,97,347,97,97,97,0,40976,0,18,18,24,24,27,27,27,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1420,45,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,840,67,1007,67,67,67,67,67,67,67,67,67,67,67,67,67,67,759,67,67,67,67,67,67,67,1052,67,67,67,67,67,67,67,67,67,67,1031,67,67,67,67,67,97,97,97,1101,97,97,97,97,97,97,97,97,97,97,97,97,592,97,97,97,1190,45,45,45,45,45,1195,45,1197,45,45,45,45,1201,45,45,45,45,1952,45,45,67,67,67,67,67,67,67,67,67,67,67,67,250,67,67,67,1255,67,1257,67,67,67,67,1261,67,67,67,67,67,67,67,67,1685,67,67,67,67,67,67,67,0,24851,12565,0,0,0,0,28809,53532,67,67,1267,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,0,0,0,0,0,0,2162688,0,0,1281,67,67,67,67,1285,67,67,67,67,67,67,67,67,67,67,1070,67,67,67,67,67,1335,97,1337,97,97,97,97,1341,97,97,97,97,97,97,97,97,882,97,97,97,97,97,97,97,1347,97,97,97,97,97,97,1353,97,97,97,97,97,97,1361,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,0,544,0,550,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2158592,2990080,2158592,2158592,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,53530,97,97,97,1365,97,97,97,97,97,97,97,97,97,97,97,97,608,97,97,97,45,45,1424,45,1425,67,67,67,67,67,67,67,67,67,67,67,1058,67,67,67,67,45,1555,45,45,1557,45,45,45,45,45,45,45,45,45,45,45,707,45,45,45,45,67,67,1570,67,67,67,67,67,67,67,67,67,67,67,67,67,773,67,67,1595,67,67,1597,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,139,2158592,2158592,2158592,2404352,2412544,97,97,97,1636,97,97,97,1639,97,97,1641,97,97,97,97,97,97,1173,0,921,0,0,0,0,0,0,45,67,67,67,1693,67,67,67,67,67,67,67,1698,67,67,67,67,67,67,67,1773,67,97,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,880,97,97,97,97,97,97,97,97,1106,97,97,97,97,97,97,97,1860,45,45,67,67,1865,67,67,67,67,1870,67,67,67,67,1875,67,67,97,97,1880,97,97,0,0,0,97,97,1888,97,0,0,0,1938,97,97,97,97,97,45,45,45,45,45,45,1854,45,45,45,45,45,45,45,1909,45,45,1911,67,67,67,67,67,67,67,67,67,67,1248,67,67,67,67,67,67,1922,67,67,1924,97,97,97,97,97,0,0,0,97,97,97,97,97,1898,45,45,45,45,45,45,1904,45,45,67,67,67,67,97,97,97,97,0,0,16384,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,1724,2008,2009,45,45,67,67,67,2014,2015,67,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,45,2022,0,2023,97,97,45,45,45,45,45,45,67,67,67,67,67,67,1869,67,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,147,151,154,45,162,45,45,176,178,181,45,45,45,192,196,45,45,45,45,2012,67,67,67,67,67,67,2018,97,0,0,97,1978,97,97,97,1982,45,45,45,45,45,45,45,45,45,972,973,45,45,45,45,45,67,259,263,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,294,298,301,97,309,97,97,323,325,328,97,97,97,97,97,560,97,97,97,569,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,339,343,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,67,67,503,67,67,67,67,67,67,67,67,67,512,67,67,519,97,97,600,97,97,97,97,97,97,97,97,97,609,97,97,616,45,649,45,45,45,45,45,654,45,45,45,45,45,45,45,45,1393,45,45,45,45,45,45,45,45,1209,45,45,45,45,45,45,45,67,763,67,67,67,67,67,67,67,67,770,67,67,67,774,67,0,2045,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,994,45,45,45,45,45,45,45,45,45,45,67,67,213,67,219,67,67,232,67,242,67,247,67,67,67,779,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,67,811,67,67,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,834,97,97,97,97,97,839,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,645,97,97,861,97,97,97,97,97,97,97,97,868,97,97,97,872,97,97,877,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,97,97,97,97,909,97,97,97,97,97,97,97,97,97,0,0,0,18,18,24,24,27,27,27,1036,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,1033,67,67,67,97,97,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,0,67,67,67,1295,67,67,67,0,0,0,0,0,0,0,0,0,97,1317,97,97,97,97,97,97,1375,97,97,97,0,0,0,45,1379,45,45,45,45,45,45,422,45,45,45,429,431,45,45,45,45,0,1090,0,0,97,1479,97,97,97,97,97,97,97,97,97,97,1357,97,97,97,97,97,97,97,97,97,1716,97,97,97,97,97,97,97,97,97,1723,0,921,29315,0,0,0,0,45,929,45,45,45,45,45,45,45,1392,45,45,45,45,45,45,45,45,45,960,45,45,45,45,45,45,97,97,97,1738,45,45,45,45,45,45,45,1743,45,45,45,45,166,45,45,45,45,184,186,45,45,197,45,45,97,1779,0,0,97,97,97,97,97,97,0,0,97,97,0,97,18,131427,0,638,0,0,0,0,362,0,640,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,1537,45,45,45,45,45,1803,45,45,45,45,45,1809,45,45,45,67,67,67,1814,67,67,67,67,67,67,1821,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,0,0,67,67,67,1818,67,67,67,67,67,1824,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,1890,0,1829,97,97,0,0,97,97,1836,97,97,0,0,0,97,97,97,97,1981,45,45,45,45,45,45,45,45,45,1987,1845,97,97,97,45,45,45,45,45,1853,45,45,45,1857,45,45,45,67,1864,67,1866,67,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,1710,1711,67,67,97,97,97,97,97,0,0,0,1886,97,97,97,0,0,97,97,97,97,1838,0,0,0,97,1843,97,0,1893,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1745,45,45,67,67,67,67,67,97,97,97,97,97,0,0,1931,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,67,2044,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1660,45,45,45,45,45,45,45,45,45,45,45,45,453,45,455,67,67,67,67,268,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,348,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,359,0,0,362,0,365,28809,367,139,45,45,45,45,45,421,45,45,45,45,45,45,45,434,45,45,695,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1667,45,0,921,29315,0,925,0,0,45,45,45,45,45,45,45,45,45,1811,45,67,67,67,67,67,67,1037,67,1039,67,67,67,67,67,67,67,67,67,67,67,67,1277,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1095,0,0,0,1096,97,97,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,97,1131,97,1133,97,97,97,97,97,97,97,97,97,97,1370,97,97,97,97,97,1312,0,0,0,0,1096,0,0,0,97,97,97,97,97,97,97,1327,97,97,97,97,97,1332,97,97,97,1830,97,0,0,97,97,97,97,97,0,0,0,97,97,97,1896,97,97,45,45,45,45,45,45,45,45,45,1548,45,45,45,45,45,45,133,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,380,45,45,45,45,45,45,45,45,45,45,401,45,45,158,45,45,45,45,45,45,45,45,45,45,45,45,45,1200,45,45,45,45,206,67,67,67,67,67,225,67,67,67,67,67,67,67,67,754,67,67,67,67,67,67,67,57889,0,0,54074,54074,550,832,97,97,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,67,67,67,67,67,25398,1083,13112,1087,54074,1091,0,0,0,0,0,0,1316,0,831,97,97,97,97,97,97,97,1174,921,0,1175,0,0,0,0,45,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,148,67,67,264,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,295,97,97,97,97,313,97,97,97,97,331,333,97,18,131427,356,638,0,0,0,0,362,0,0,365,0,367,0,45,45,1530,45,45,45,45,45,45,45,45,45,45,45,45,988,45,45,45,97,344,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,402,404,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1756,67,438,45,45,45,45,45,45,45,45,449,450,45,45,45,67,67,214,218,221,67,229,67,67,243,245,248,67,67,67,67,67,488,490,67,67,67,67,67,67,67,67,67,67,67,1071,67,1073,67,67,67,67,67,524,67,67,67,67,67,67,67,67,535,536,67,67,67,67,67,67,1683,1684,67,67,67,67,1688,1689,67,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,97,97,97,585,587,97,97,97,97,97,97,97,97,97,97,97,1163,97,97,97,97,97,97,97,621,97,97,97,97,97,97,97,97,632,633,97,97,0,0,1782,97,97,97,97,97,0,0,97,97,0,97,712,45,45,45,717,45,45,45,45,45,45,45,45,725,45,45,45,163,167,173,177,45,45,45,45,45,193,45,45,45,45,982,45,45,45,45,45,45,987,45,45,45,45,45,1558,45,1560,45,45,45,45,45,45,45,45,704,705,45,45,45,45,45,45,45,45,731,45,45,45,67,67,67,67,67,739,67,67,67,67,67,67,273,0,24850,12564,0,0,0,0,28809,53531,67,67,67,764,67,67,67,67,67,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,812,67,67,67,67,818,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,97,97,97,97,837,97,97,97,97,97,602,97,97,97,97,97,97,97,97,97,97,1137,97,97,97,97,97,97,97,97,97,862,97,97,97,97,97,97,97,97,97,97,97,1627,97,97,97,0,97,97,97,97,910,97,97,97,97,916,97,97,97,0,0,0,97,97,1940,97,97,1942,45,45,45,45,45,45,385,45,45,45,45,395,45,45,45,45,966,45,969,45,45,45,45,45,45,45,45,45,45,975,45,45,45,406,45,45,45,45,45,45,45,45,45,45,45,45,974,45,45,45,67,67,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,67,67,1040,67,1042,67,1045,67,67,67,67,67,67,67,97,1706,97,97,97,1709,97,97,97,67,67,67,67,1051,67,67,67,67,67,1057,67,67,67,67,67,67,67,1443,67,67,1446,67,67,67,67,67,67,67,1297,0,0,0,1303,0,0,0,1309,67,67,67,67,1079,25398,0,13112,0,54074,0,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,1098,97,97,97,97,97,1104,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,1128,97,97,97,97,97,97,1134,97,1136,97,1139,97,97,97,97,97,97,1622,97,97,97,97,97,97,97,97,0,921,0,0,0,1176,0,646,45,67,67,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,67,97,1348,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1127,97,67,1569,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1448,1449,67,1816,67,67,67,67,67,67,67,67,67,1825,67,67,1827,97,97,0,1781,97,97,97,97,97,97,0,0,97,97,0,97,97,97,1831,0,0,97,97,97,97,97,0,0,0,97,97,97,1980,97,45,45,45,45,45,45,45,45,45,45,1395,45,45,45,45,45,97,1846,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,45,45,2010,45,67,67,67,67,67,2016,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,2007,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,143,45,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,67,1813,67,67,1815,45,45,67,210,67,67,67,67,67,67,239,67,67,67,67,67,67,67,1454,67,67,67,67,67,67,67,67,67,1445,67,67,67,67,67,67,97,97,290,97,97,97,97,97,97,319,97,97,97,97,97,97,303,97,97,317,97,97,97,97,97,97,305,97,97,97,97,97,97,97,97,97,899,97,97,97,97,97,97,375,45,45,45,379,45,45,390,45,45,394,45,45,45,45,45,443,45,45,45,45,45,45,45,45,67,67,67,67,67,461,67,67,67,465,67,67,476,67,67,480,67,67,67,67,67,67,1694,67,67,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,500,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,97,97,97,558,97,97,97,562,97,97,573,97,97,577,97,97,97,97,97,895,97,97,97,97,97,97,903,97,97,97,0,97,97,1638,97,97,97,97,97,97,97,97,1646,597,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1334,45,681,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1396,45,45,1399,45,45,730,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1434,67,67,67,67,67,67,750,67,67,67,67,67,67,67,67,67,67,1456,67,67,67,67,67,45,45,993,45,45,45,45,45,45,45,45,45,45,45,67,67,1238,67,67,1006,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1280,1048,1049,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,67,1286,67,67,67,67,67,67,67,1291,67,97,97,1100,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,920,97,97,1142,1143,97,97,97,97,97,97,97,97,97,97,1153,97,97,97,97,97,1158,97,97,97,1161,97,97,97,97,1166,97,97,97,97,97,1325,97,97,97,97,97,97,97,97,97,97,1328,97,97,97,97,97,97,97,45,1218,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,67,67,67,67,67,1269,67,67,67,67,67,67,67,67,1278,67,67,67,67,67,67,1761,67,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,97,97,1349,97,97,97,97,97,97,97,97,1358,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,0,921,0,0,926,0,0,0,45,45,1411,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1754,45,45,67,67,1301,0,1307,0,1313,97,97,97,97,97,97,97,97,97,97,97,21054,97,97,97,97,67,1757,67,67,67,1760,67,67,67,67,67,67,67,67,67,67,1467,67,67,67,67,67,1778,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,67,67,67,67,67,1820,67,1822,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1933,97,1892,97,97,97,97,97,97,1899,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,673,45,45,45,45,45,45,45,67,67,67,67,67,1925,97,97,97,97,0,0,0,97,97,97,97,97,623,97,97,97,97,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,1796,97,45,45,45,45,45,45,45,970,45,45,45,45,45,45,45,45,1417,45,45,45,45,45,45,45,67,1964,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,97,97,1721,97,97,0,0,1997,97,0,0,2e3,97,97,0,97,97,97,97,97,45,45,45,45,733,45,67,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,144,45,45,45,1805,45,1807,45,45,45,45,45,67,67,67,67,67,67,231,67,67,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,45,45,67,211,67,67,67,67,230,234,240,244,67,67,67,67,67,67,464,67,67,67,67,67,67,479,67,67,67,260,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,291,97,97,97,97,310,314,320,324,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,1355,97,97,97,97,97,97,1362,340,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,360,0,362,0,365,28809,367,139,369,45,45,45,374,67,67,460,67,67,67,67,466,67,67,67,67,67,67,67,67,801,67,67,67,67,67,67,67,67,67,487,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,67,1772,67,67,97,97,97,97,97,97,97,0,921,922,1175,0,0,0,0,45,67,502,67,67,67,67,67,67,67,508,67,67,67,515,517,67,67,67,67,67,97,97,97,97,97,0,0,0,1932,97,97,0,1999,97,97,97,0,97,97,2004,2005,97,45,45,45,45,1193,45,45,45,45,45,45,45,45,45,45,45,676,45,45,45,45,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,552,97,97,97,97,97,1377,0,0,45,45,45,45,45,45,45,45,655,45,45,45,45,45,45,45,97,97,557,97,97,97,97,563,97,97,97,97,97,97,97,97,1135,97,97,97,97,97,97,97,97,97,584,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,911,97,97,97,97,97,97,97,638,0,0,0,0,1315,0,0,0,0,97,97,97,1319,97,97,97,0,97,97,97,97,97,97,1733,97,97,97,97,97,97,1340,97,97,97,1343,97,97,1345,97,1346,97,599,97,97,97,97,97,97,97,605,97,97,97,612,614,97,97,97,97,97,1794,97,97,97,45,45,45,45,45,45,45,1207,45,45,45,45,45,45,1213,45,45,745,67,67,67,67,751,67,67,67,67,67,67,67,67,67,67,1577,67,67,67,67,67,762,67,67,67,67,766,67,67,67,67,67,67,67,67,67,67,1765,67,67,67,67,67,777,67,67,781,67,67,67,67,67,67,67,67,67,67,67,67,1592,1593,67,67,97,843,97,97,97,97,849,97,97,97,97,97,97,97,97,97,1510,97,97,97,97,97,97,97,860,97,97,97,97,864,97,97,97,97,97,97,97,97,97,1797,45,45,45,45,1801,45,97,875,97,97,879,97,97,97,97,97,97,97,97,97,97,97,1522,97,97,97,97,97,991,45,45,45,45,996,45,45,45,45,45,45,45,45,67,67,215,67,67,67,67,233,67,67,67,67,251,253,1022,67,67,67,1026,67,67,67,67,67,67,67,67,67,67,1035,67,67,1038,67,67,67,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,67,1064,67,67,67,1067,67,67,67,67,1072,67,67,67,67,67,67,1296,0,0,0,0,0,0,0,0,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,1096,0,921,29315,0,0,0,0,928,45,45,45,45,45,934,45,45,45,164,45,45,45,45,45,45,45,45,45,198,45,45,45,378,45,45,45,45,45,45,393,45,45,45,398,45,97,97,1116,97,97,97,1120,97,97,97,97,97,97,97,97,97,1147,1148,97,97,97,97,97,97,97,1129,97,97,1132,97,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,0,45,1178,45,45,45,45,45,45,45,45,45,1185,45,45,45,45,441,45,45,45,45,45,45,451,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,1260,67,67,67,1263,67,67,1265,1203,45,45,1205,45,1206,45,45,45,45,45,45,45,45,45,1216,67,1266,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,492,67,67,67,67,67,67,67,67,67,471,67,67,67,67,481,67,45,1386,45,1389,45,45,45,45,1394,45,45,45,1397,45,45,45,45,995,45,997,45,45,45,45,45,45,45,67,67,67,67,1915,67,67,67,67,67,1422,45,45,45,67,67,67,67,67,67,67,67,67,1433,67,1436,67,67,67,67,1441,67,67,67,1444,67,67,67,67,67,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,97,1494,97,97,97,1497,97,97,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,67,1571,67,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,67,67,1583,67,67,67,67,67,67,67,67,1591,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,97,1634,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1125,97,97,97,1647,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,1183,45,45,45,45,45,45,45,45,45,409,45,45,45,45,45,45,1658,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1668,1712,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,1835,97,97,97,97,0,0,0,97,97,1844,97,97,1726,0,97,97,97,97,97,1732,97,1734,97,97,97,97,97,300,97,308,97,97,97,97,97,97,97,97,866,97,97,97,97,97,97,97,67,67,67,1758,67,67,67,1762,67,67,67,67,67,67,67,67,1043,67,67,67,67,67,67,67,67,67,67,67,67,1771,67,67,67,97,97,97,97,97,1776,97,97,97,97,297,97,97,97,97,97,97,97,97,97,97,97,1108,97,97,97,97,67,67,67,1966,97,97,97,1970,0,0,0,97,97,97,97,0,97,97,97,1720,97,97,97,97,97,0,0,97,97,97,1837,97,0,1840,1841,97,97,97,1988,45,67,67,67,67,67,67,67,67,67,1994,1995,67,97,97,97,97,97,1103,97,97,97,97,97,97,97,97,97,97,917,97,97,0,0,0,67,67,265,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,345,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,361,362,0,365,28809,367,139,45,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,411,45,45,414,45,45,45,45,377,45,45,45,386,45,45,45,45,45,45,45,45,45,1223,45,45,45,45,45,45,45,45,45,426,45,45,433,45,45,45,67,67,67,67,67,463,67,67,67,472,67,67,67,67,67,67,67,527,67,67,67,67,67,67,537,67,540,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,564,97,97,97,97,97,97,97,637,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,927,45,45,45,45,45,45,45,45,45,1234,45,45,45,45,67,67,67,67,1240,45,697,45,45,45,45,45,45,45,45,45,45,708,45,45,45,45,1221,45,45,45,45,1225,45,45,45,45,45,45,384,45,45,45,45,45,45,45,45,45,1210,45,45,45,45,45,45,67,67,795,67,67,67,67,67,67,67,67,67,67,67,67,67,1470,67,67,67,67,67,67,67,815,67,67,67,67,67,67,25398,542,13112,544,97,97,97,893,97,97,97,97,97,97,97,97,97,97,97,97,1164,97,97,97,67,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,1687,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,1097,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1450,45,45,1388,45,1390,45,45,45,45,45,45,45,45,45,45,45,1236,67,67,67,67,67,1437,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1472,1490,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1503,67,67,67,67,67,97,97,97,97,97,0,1930,0,97,97,97,97,97,847,97,97,97,97,97,97,97,97,97,858,67,67,1965,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,1719,97,97,97,97,97,97,0,0,0,45,45,45,45,1382,45,1383,45,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,1563,45,45,45,45,45,67,261,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,341,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,1099,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1333,97,1230,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1992,67,1993,67,67,67,97,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,1665,45,45,45,45,45,131427,357,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,684,45,45,45,45,45,45,45,45,45,45,412,45,45,45,416,45,45,45,440,45,45,45,45,45,45,45,45,45,45,45,67,67,1990,67,1991,67,67,67,67,67,67,67,97,97,1707,97,97,97,97,97,97,501,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,67,67,67,526,67,67,67,67,67,67,67,67,67,67,1030,67,1032,67,67,67,67,598,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1632,0,921,29315,923,0,0,0,45,45,45,45,45,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,425,45,45,45,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1093,0,0,0,0,0,97,1609,97,97,97,97,97,97,97,97,97,1369,97,97,97,1372,97,97,67,67,266,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,346,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,665,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1677,45,45,45,45,67,45,45,954,45,956,45,45,45,45,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,448,45,45,45,45,67,456,67,67,67,67,67,1270,67,67,67,67,67,67,67,67,67,67,1069,67,67,67,67,67,67,97,97,97,1350,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,97,97,97,97,97,1376,0,0,0,45,45,45,45,45,45,45,45,1559,1561,45,45,45,1564,45,1566,1567,45,67,67,67,67,67,1573,67,67,67,67,67,67,67,67,67,67,1247,67,67,67,67,67,1252,97,1725,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1628,97,1630,0,0,94242,0,0,0,2211840,0,1118208,0,0,0,0,2158592,2158731,2158592,2158592,2158592,3117056,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3018752,2158592,3043328,2158592,2158592,2158592,2158592,3080192,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158878,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2605056,2158592,2158592,2207744,0,542,0,544,0,0,2166784,0,0,0,550,0,0,2158592,2158592,2686976,2158592,2715648,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2867200,2158592,2904064,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,0,2211840,0,0,1130496,0,0,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,139,0,0,0,139,0,2367488,2207744,0,0,0,0,176128,0,2166784,0,0,0,0,0,286,2158592,2158592,3170304,3174400,2158592,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,1508,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,2158592,2158592,2158592,2158592,3158016,67,24850,24850,12564,12564,0,0,0,0,0,53531,53531,0,286,97,97,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,1154,57889,0,0,0,0,550,0,97,97,97,97,97,97,97,97,97,561,97,97,97,97,97,97,576,97,97,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,0,0,139264,0,921,29315,0,0,926,0,45,45,45,45,45,45,45,45,45,719,720,45,45,45,45,45,45,45,45,685,45,45,45,45,45,45,45,45,45,942,45,45,946,45,45,45,950,45,45,0,2146304,2146304,0,0,0,0,2224128,2224128,2224128,2232320,2232320,2232320,2232320,0,0,1301,0,0,0,0,0,1307,0,0,0,0,0,1313,0,0,0,0,0,0,0,97,97,1318,97,97,97,97,97,97,1795,97,97,45,45,45,45,45,45,45,446,45,45,45,45,45,45,67,67,2158592,2146304,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,924,0,0,45,45,45,45,45,45,45,45,45,1e3,45,45,45,45,67,67],r.EXPECTED=[290,300,304,353,296,309,305,319,315,324,328,352,354,334,338,330,320,345,349,293,358,362,341,366,312,370,374,378,382,386,390,394,398,737,402,634,439,604,634,634,634,634,408,634,634,634,404,634,634,634,457,634,634,963,634,634,413,634,634,634,634,634,634,634,663,418,422,903,902,426,431,548,634,437,521,919,443,615,409,449,455,624,731,751,634,461,465,672,470,469,474,481,485,477,489,493,629,542,497,505,603,602,991,648,510,804,634,515,958,526,525,530,768,634,546,552,711,710,593,558,562,618,566,570,574,578,582,586,590,608,612,660,822,821,634,622,596,444,628,533,724,633,640,653,647,652,536,1008,451,450,445,657,670,676,685,689,693,697,701,704,707,715,719,798,815,634,723,762,996,634,728,969,730,735,908,634,741,679,889,511,747,634,750,755,499,666,499,501,759,772,776,780,634,787,784,797,802,809,808,427,814,1006,517,634,519,853,634,813,850,793,634,819,826,833,832,837,843,847,857,861,863,867,871,875,879,883,643,887,539,980,979,634,893,944,634,900,896,634,907,933,506,912,917,828,433,636,635,554,961,923,930,927,937,941,634,634,634,974,948,952,985,913,968,967,743,634,973,839,634,978,599,634,984,989,765,444,995,1e3,634,1003,790,955,1012,681,634,634,634,634,634,414,1016,1020,1024,1085,1027,1090,1090,1046,1080,1137,1108,1215,1049,1032,1039,1085,1085,1085,1085,1058,1062,1068,1085,1086,1090,1090,1091,1072,1064,1107,1090,1090,1090,1118,1123,1138,1078,1074,1084,1085,1085,1085,1087,1090,1062,1052,1060,1114,1062,1104,1085,1085,1090,1090,1028,1122,1063,1128,1139,1127,1158,1085,1085,1151,1090,1090,1090,1095,1090,1132,1073,1136,1143,1061,1150,1085,1155,1098,1101,1146,1162,1169,1101,1185,1151,1090,1110,1173,1054,1087,1109,1177,1165,1089,1204,1184,1107,1189,1193,1088,1197,1180,1201,1208,1042,1212,1219,1223,1227,1231,1235,1245,1777,1527,1686,1686,1238,1686,1254,1686,1686,1686,1294,1669,1686,1686,1686,1322,1625,1534,1268,1624,1275,1281,1443,1292,1300,1686,1686,1686,1350,1826,1306,1686,1686,1240,2032,1317,1321,1686,1686,1253,1686,1326,1686,1686,1686,1418,1709,1446,1686,1686,1686,1492,1686,1295,1447,1686,1686,1258,1686,1736,1686,1686,1520,1355,1686,1288,1348,1361,1686,1359,1686,1364,1498,1368,1302,1362,1381,1389,1395,1486,1686,1371,1377,1370,1686,1375,1382,1384,1402,1408,1385,1383,1619,1413,1423,1428,1433,1686,1686,1270,1686,1338,1686,1440,1686,1686,1686,1499,1465,1686,1686,1686,1639,1473,1884,1686,1686,1293,1864,1686,1686,1296,1321,1483,1686,1686,1686,1646,1686,1748,1496,1686,1418,1675,1686,1418,1702,1686,1418,1981,1686,1429,1409,1427,1504,1692,1686,1686,1313,1448,1651,1508,1686,1686,1340,1686,1903,1686,1686,1435,1513,1686,1283,1287,1519,1686,1524,1363,1568,1938,1539,1566,1579,1479,1533,1538,1553,1544,1552,1557,1563,1574,1557,1583,1589,1590,1759,1594,1603,1607,1611,1686,1436,1514,1686,1434,1656,1686,1434,1680,1686,1453,1686,1686,1686,1559,1617,1686,1770,1418,1623,1769,1629,1686,1515,1335,1686,1285,1686,1671,1921,1650,1686,1686,1344,1308,1666,1686,1686,1686,1659,1685,1686,1686,1686,1686,1241,1686,1686,1844,1691,1686,1630,1977,1970,1362,1686,1686,1686,1693,1698,1686,1686,1686,1697,1686,1764,1715,1686,1634,1638,1686,1599,1585,1686,1271,1686,1269,1686,1721,1686,1686,1354,1686,1801,1686,1799,1686,1640,1686,1686,1461,1686,1686,1732,1686,1944,1686,1740,1686,1746,1415,1396,1686,1598,1547,1417,1597,1416,1577,1546,1397,1577,1547,1548,1570,1398,1753,1686,1652,1509,1686,1686,1686,1757,1686,1419,1686,1763,1418,1768,1781,1686,1686,1686,1705,1686,2048,1792,1686,1686,1686,1735,1686,1797,1686,1686,1404,1686,1639,1815,1686,1686,1418,2017,1820,1686,1686,1803,1686,1686,1686,1736,1489,1686,1686,1825,1338,1260,1263,1686,1686,1785,1686,1686,1728,1686,1686,1749,1497,1830,1830,1262,1248,1261,1329,1260,1264,1329,1248,1249,1259,1540,1849,1842,1686,1686,1835,1686,1686,1816,1686,1686,1831,1882,1848,1686,1686,1686,1774,2071,1854,1686,1686,1469,1884,1686,1821,1859,1686,1686,1350,1883,1686,1686,1686,1781,1391,1875,1686,1686,1613,1644,1686,1686,1889,1686,1686,1662,1884,1686,1885,1890,1686,1686,1686,1894,1686,1686,1678,1686,1907,1686,1686,1529,1914,1686,1838,1686,1686,1881,1686,1686,1872,1876,1836,1919,1686,1837,1692,1910,1686,1925,1928,1742,1686,1811,1811,1930,1810,1929,1935,1928,1900,1942,1867,1868,1931,1035,1788,1948,1952,1956,1960,1964,1686,1976,1686,1686,1686,2065,1686,1992,2037,1686,1686,1998,2009,1972,2002,1686,1686,1686,2077,1300,2023,1686,1686,1686,1807,2031,1686,1686,1686,1860,1500,2032,1686,1686,1686,2083,1686,2036,1686,1277,1276,2042,1877,1686,1686,2041,1686,1686,2027,2037,2012,1686,2012,1855,1850,1686,2046,1686,1686,2054,1996,1686,1897,1309,2059,2052,1686,2058,1686,1686,2081,1686,1717,1477,1686,1331,1686,1686,1687,1686,1860,1681,1686,1686,1686,1966,1724,1686,1686,1686,1984,2015,1686,1686,1686,1988,1686,2063,1686,1686,1686,2005,1686,1727,1686,1686,1711,1457,2069,1686,1686,1686,2019,2075,1686,1686,1915,1686,1686,1793,1874,1686,1686,1491,1362,1449,1686,1686,1460,2098,2087,2091,2095,2184,2102,2113,2780,2117,2134,2142,2281,2146,2146,2146,2304,2296,2181,2639,2591,2872,2592,2873,2313,2195,2200,2281,2146,2273,2226,2204,2152,2219,2276,2167,2177,2276,2235,2276,2276,2230,2281,2276,2296,2276,2293,2276,2276,2276,2276,2234,2276,2311,2314,2210,2199,2217,2222,2276,2276,2276,2240,2276,2294,2276,2276,2173,2276,2198,2281,2281,2281,2281,2282,2146,2146,2146,2146,2205,2146,2204,2248,2276,2235,2276,2297,2276,2276,2276,2277,2256,2281,2283,2146,2146,2146,2275,2276,2295,2276,2276,2293,2146,2304,2264,2269,2221,2276,2276,2276,2293,2295,2276,2276,2276,2295,2263,2205,2268,2220,2172,2276,2276,2276,2296,2276,2276,2296,2294,2276,2276,2278,2281,2281,2280,2281,2281,2281,2283,2206,2223,2276,2276,2279,2281,2281,2146,2273,2276,2276,2281,2281,2281,2276,2292,2276,2298,2225,2276,2298,2169,2224,2292,2298,2171,2229,2281,2281,2171,2236,2281,2281,2281,2146,2275,2225,2292,2299,2276,2229,2281,2146,2276,2290,2297,2283,2146,2146,2274,2224,2227,2298,2225,2297,2276,2230,2170,2230,2282,2146,2147,2151,2156,2288,2276,2230,2303,2308,2236,2284,2228,2318,2318,2318,2326,2335,2339,2343,2349,2416,2693,2357,2592,2109,2592,2592,2162,2943,2823,2646,2592,2361,2592,2122,2592,2592,2122,2470,2592,2592,2592,2109,2107,2592,2592,2592,2123,2592,2592,2592,2125,2592,2413,2592,2592,2592,2127,2592,2592,2414,2592,2592,2592,2130,2952,2592,2594,2592,2592,2212,2609,2252,2592,2592,2592,2446,2434,2592,2592,2592,2212,2446,2450,2456,2431,2435,2592,2592,2243,2478,2448,2439,2946,2592,2592,2592,2368,2809,2813,2450,2441,2212,2812,2449,2440,2947,2592,2592,2592,2345,2451,2457,2948,2592,2124,2592,2592,2650,2823,2449,2455,2946,2592,2128,2592,2592,2649,2952,2592,2810,2448,2461,2991,2467,2592,2592,2329,2817,2474,2990,2466,2592,2592,2373,2447,2992,2469,2592,2592,2592,2373,2447,2477,2468,2592,2592,2353,2469,2592,2495,2592,2592,2415,2483,2592,2415,2496,2592,2592,2352,2592,2592,2352,2352,2469,2592,2592,2363,2331,2494,2592,2592,2592,2375,2592,2375,2415,2504,2592,2592,2367,2372,2503,2592,2592,2592,2389,2418,2415,2592,2592,2373,2592,2592,2592,2593,2732,2417,2415,2592,2417,2520,2592,2592,2592,2390,2521,2521,2592,2592,2592,2401,2599,2585,2526,2531,2120,2592,2212,2426,2450,2463,2948,2592,2592,2592,2213,2389,2527,2532,2121,2542,2551,2105,2592,2213,2592,2592,2592,2558,2538,2544,2553,2557,2537,2543,2552,2421,2572,2576,2546,2543,2547,2592,2592,2373,2615,2575,2545,2105,2592,2244,2479,2592,2129,2592,2592,2628,2690,2469,2562,2566,2592,2592,2592,2415,2928,2934,2401,2570,2574,2564,2572,2585,2590,2592,2592,2585,2965,2592,2592,2592,2445,2251,2592,2592,2592,2474,2592,2609,2892,2592,2362,2592,2592,2138,2851,2159,2592,2592,2592,2509,2888,2892,2592,2592,2592,2490,2418,2891,2592,2592,2376,2592,2592,2374,2592,2889,2388,2592,2373,2373,2890,2592,2592,2387,2592,2887,2505,2892,2592,2373,2610,2388,2592,2592,2376,2373,2592,2887,2891,2592,2374,2592,2592,2608,2159,2614,2620,2592,2592,2394,2594,2887,2399,2592,2887,2397,2508,2374,2507,2592,2375,2592,2592,2592,2595,2508,2506,2592,2506,2505,2505,2592,2507,2637,2505,2592,2592,2401,2661,2592,2643,2592,2592,2417,2592,2655,2592,2592,2592,2510,2414,2656,2592,2592,2592,2516,2592,2593,2660,2665,2880,2592,2592,2592,2522,2767,2666,2881,2592,2592,2420,2571,2696,2592,2592,2592,2580,2572,2686,2632,2698,2592,2383,2514,2592,2163,2932,2465,2685,2631,2697,2592,2388,2592,2592,2212,2604,2671,2632,2678,2592,2401,2405,2409,2592,2592,2592,2679,2592,2592,2592,2592,2108,2677,2591,2592,2592,2592,2419,2592,2683,2187,2191,2469,2671,2189,2467,2592,2401,2629,2633,2702,2468,2592,2592,2421,2536,2703,2469,2592,2592,2422,2573,2593,2672,2467,2592,2402,2406,2592,2402,2979,2592,2592,2626,2673,2467,2592,2446,2259,2947,2592,2377,2709,2592,2592,2522,2862,2713,2468,2592,2592,2581,2572,2562,2374,2374,2592,2376,2721,2724,2592,2592,2624,2373,2731,2592,2592,2592,2626,2732,2592,2592,2592,2755,2656,2726,2736,2741,2592,2486,2593,2381,2592,2727,2737,2742,2715,2747,2753,2592,2498,2469,2873,2743,2592,2592,2592,2791,2759,2763,2592,2592,2627,2704,2592,2592,2522,2789,2593,2761,2753,2592,2498,2863,2592,2592,2767,2592,2592,2592,2792,2789,2592,2592,2592,2803,2126,2592,2592,2592,2811,2122,2592,2592,2592,2834,2777,2592,2592,2592,2848,2936,2591,2489,2797,2592,2592,2670,2631,2490,2798,2592,2592,2592,2963,2807,2592,2592,2592,2965,2838,2592,2592,2592,2975,2330,2818,2829,2592,2498,2939,2592,2498,2592,2791,2331,2819,2830,2592,2592,2592,2982,2834,2817,2828,2106,2592,2592,2592,2405,2405,2817,2828,2592,2592,2415,2849,2842,2592,2522,2773,2592,2522,2868,2592,2580,2600,2586,2137,2850,2843,2592,2592,2855,2937,2844,2592,2592,2592,2987,2936,2591,2592,2592,2684,2630,2592,2856,2938,2592,2592,2860,2939,2592,2592,2872,2592,2861,2591,2592,2592,2887,2616,2592,2867,2592,2592,2708,2592,2498,2469,2498,2497,2785,2773,2499,2783,2770,2877,2877,2877,2772,2592,2592,2345,2885,2592,2592,2592,2715,2762,2515,2896,2592,2592,2715,2917,2516,2897,2592,2592,2592,2901,2906,2911,2592,2592,2956,2960,2715,2902,2907,2912,2593,2916,2920,2820,2922,2822,2592,2592,2715,2927,2921,2821,2106,2592,2592,2974,2408,2321,2821,2106,2592,2592,2983,2592,2593,2404,2408,2592,2592,2717,2749,2716,2928,2322,2822,2593,2926,2919,2820,2934,2823,2592,2592,2592,2651,2824,2592,2592,2592,2130,2952,2592,2592,2592,2592,2964,2592,2592,2716,2748,2592,2969,2592,2592,2716,2918,2368,2970,2592,2592,2592,2403,2407,2592,2592,2787,2211,2404,2409,2592,2592,2802,2837,2987,2592,2592,2592,2809,2427,2592,2793,2592,2592,2809,2447,1073741824,2147483648,539754496,542375936,402653184,554434560,571736064,545521856,268451840,335544320,268693630,512,2048,256,1024,0,1024,0,1073741824,2147483648,0,0,0,8388608,0,0,1073741824,1073741824,0,2147483648,537133056,4194304,1048576,268435456,-1073741824,0,0,0,1048576,0,0,0,1572864,0,0,0,4194304,0,134217728,16777216,0,0,32,64,98304,0,33554432,8388608,192,67108864,67108864,67108864,67108864,16,32,4,0,8192,196608,196608,229376,80,4096,524288,8388608,0,0,32,128,256,24576,24600,24576,24576,2,24576,24576,24576,24584,24592,24576,24578,24576,24578,24576,24576,16,512,2048,2048,256,4096,32768,1048576,4194304,67108864,134217728,268435456,262144,134217728,0,128,128,64,16384,16384,16384,67108864,32,32,4,4,4096,262144,134217728,0,0,0,2,0,8192,131072,131072,4096,4096,4096,4096,24576,24576,24576,8,8,24576,24576,16384,16384,16384,24576,24584,24576,24576,24576,16384,24576,536870912,262144,0,0,32,2048,8192,4,4096,4096,4096,786432,8388608,16777216,0,128,16384,16384,16384,32768,65536,2097152,32,32,32,32,4,4,4,4,4,4096,67108864,67108864,67108864,24576,24576,24576,24576,0,16384,16384,16384,16384,67108864,67108864,8,67108864,24576,8,8,8,24576,24576,24576,24578,24576,24576,24576,2,2,2,16384,67108864,67108864,67108864,32,67108864,8,8,24576,2048,2147483648,536870912,262144,262144,262144,67108864,8,24576,16384,32768,1048576,4194304,25165824,67108864,24576,32770,2,4,112,512,98304,524288,50,402653186,1049090,1049091,10,66,100925514,10,66,12582914,0,0,-1678194207,-1678194207,-1041543218,0,32768,0,0,32,65536,268435456,1,1,513,1048577,0,12582912,0,0,0,4,1792,0,0,0,7,29360128,0,0,0,8,0,0,0,12,1,1,0,0,-604102721,-604102721,4194304,8388608,0,0,0,31,925600,997981306,997981306,997981306,0,0,2048,8388608,0,0,1,2,4,32,64,512,8192,0,0,0,245760,997720064,0,0,0,32,0,0,0,3,12,16,32,8,112,3072,12288,16384,32768,65536,131072,7864320,16777216,973078528,0,0,65536,131072,3670016,4194304,16777216,33554432,2,8,48,2048,8192,16384,32768,65536,131072,524288,131072,524288,3145728,4194304,16777216,33554432,65536,131072,2097152,4194304,16777216,33554432,134217728,268435456,536870912,0,0,0,1024,0,8,48,2048,8192,65536,33554432,268435456,536870912,65536,268435456,536870912,0,0,32768,0,0,126,623104,65011712,0,32,65536,536870912,0,0,65536,524288,0,32,65536,0,0,0,2048,0,0,0,15482,245760,-604102721,0,0,0,18913,33062912,925600,-605028352,0,0,0,65536,31,8096,131072,786432,3145728,3145728,12582912,50331648,134217728,268435456,160,256,512,7168,131072,786432,131072,786432,1048576,2097152,12582912,16777216,268435456,1073741824,2147483648,12582912,16777216,33554432,268435456,1073741824,2147483648,3,12,16,160,256,7168,786432,1048576,12582912,16777216,268435456,1073741824,0,8,16,32,128,256,512,7168,786432,1048576,2097152,0,1,2,8,16,7168,786432,1048576,8388608,16777216,16777216,1073741824,0,0,0,0,1,0,0,8,32,128,256,7168,8,32,0,3072,0,8,32,3072,4096,524288,8,32,0,0,3072,4096,0,2048,524288,8388608,8,2048,0,0,1,12,256,4096,32768,262144,1048576,4194304,67108864,0,2048,0,2048,2048,1073741824,-58805985,-58805985,-58805985,0,0,262144,0,0,32,4194304,16777216,134217728,4382,172032,-58982400,0,0,2,28,256,4096,8192,8192,32768,131072,262144,524288,1,2,12,256,4096,0,0,4194304,67108864,134217728,805306368,1073741824,0,0,1,2,12,16,256,4096,1048576,67108864,134217728,268435456,0,512,1048576,4194304,201326592,1879048192,0,0,12,256,4096,134217728,268435456,536870912,12,256,268435456,536870912,0,12,256,0,0,1,32,64,512,0,0,205236961,205236961,0,0,0,1,96,640,1,10976,229376,204996608,0,640,2048,8192,229376,1572864,1572864,2097152,201326592,0,0,0,64,512,2048,229376,1572864,201326592,1572864,201326592,0,0,1,4382,0,1,32,2048,65536,131072,1572864,201326592,131072,1572864,134217728,0,0,524288,524288,0,0,0,-68582786,-68582786,-68582786,0,0,2097152,524288,0,524288,0,0,65536,131072,1572864,0,0,2,4,0,0,65011712,-134217728,0,0,0,0,2,4,120,512,-268435456,0,0,0,2,8,48,64,2048,8192,98304,524288,2097152,4194304,25165824,33554432,134217728,268435456,2147483648,0,0,25165824,33554432,134217728,1879048192,2147483648,0,0,4,112,512,622592,65011712,134217728,-268435456,16777216,33554432,134217728,1610612736,0,0,0,64,98304,524288,4194304,16777216,33554432,0,98304,524288,16777216,33554432,0,65536,524288,33554432,536870912,1073741824,0,65536,524288,536870912,1073741824,0,0,65536,524288,536870912,0,524288,0,524288,524288,1048576,2086666240,2147483648,0,-1678194207,0,0,0,8,32,2048,524288,8388608,0,0,33062912,436207616,2147483648,0,0,32,64,2432,16384,32768,32768,524288,3145728,4194304,25165824,25165824,167772160,268435456,2147483648,0,32,64,384,2048,16384,32768,1048576,2097152,4194304,25165824,32,64,128,256,2048,16384,2048,16384,1048576,4194304,16777216,33554432,134217728,536870912,1073741824,0,0,2048,16384,4194304,16777216,33554432,134217728,805306368,0,0,16777216,134217728,268435456,2147483648,0,622592,622592,622592,8807,8807,434791,0,0,16777216,0,0,0,7,608,8192,0,0,0,3,4,96,512,32,64,8192,0,0,16777216,134217728,0,0,2,4,8192,16384,65536,2097152,33554432,268435456],r.TOKEN=[\"(0)\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"QuotChar\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(e,t,n){\"use strict\";var r=function(e){var t=e;this.tokens=[],this.reset=function(){t=t,this.tokens=[]},this.startNonterminal=function(){},this.endNonterminal=function(){},this.terminal=function(e,n,r){this.tokens.push({name:e,value:t.substring(n,r)})},this.whitespace=function(e,n){this.tokens.push({name:\"WS\",value:t.substring(e,n)})}};n.Lexer=function(e,t){this.tokens=[],this.getLineTokens=function(n,i){i=i===\"start\"||!i?'[\"start\"]':i;var s=JSON.parse(i),o=new r(n),u=new e(n,o),a=[];for(;;){var f=s[s.length-1];try{o.tokens=[],u[\"parse_\"+f]();var l=null;o.tokens.length>1&&o.tokens[0].name===\"WS\"&&(a.push({type:\"text\",value:o.tokens[0].value}),o.tokens.splice(0,1));var c=o.tokens[0],h=t[f];for(var p=0;p<h.length;p++){var d=t[f][p];if(typeof d.name==\"function\"&&d.name(c)||d.name===c.name){l=d;break}}if(c.name===\"EOF\")break;if(c.value===\"\")throw\"Encountered empty string lexical rule.\";a.push({type:l===null?\"text\":typeof l.token==\"function\"?l.token(c.value):l.token,value:c.value}),l&&l.next&&l.next(s)}catch(v){if(v instanceof u.ParseException){var m=0;for(var g=0;g<a.length;g++)m+=a[g].value.length;return a.push({type:\"text\",value:n.substring(m)}),{tokens:a,state:JSON.stringify([\"start\"])}}throw v}}return{tokens:a,state:JSON.stringify(s)}}}},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(e,t,n){\"use strict\";var r=e(\"./XQueryTokenizer\").XQueryTokenizer,i=e(\"./lexer\").Lexer,s=\"after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotChar\",token:\"string\"}]};n.XQueryLexer=function(){return new i(r,d)}},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}]},{},[\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\"])}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function a(e,t){var n=!0,r=e.type.split(\".\"),i=t.split(\".\");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../behaviour/xml\").XmlBehaviour,u=e(\"../../token_iterator\").TokenIterator,f=function(){this.inherit(s,[\"braces\",\"parens\",\"string_dquotes\"]),this.inherit(o),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var s=n.getCursorPosition(),o=new u(r,s.row,s.column),f=o.getCurrentToken(),l=!1,e=JSON.parse(e).pop();if(f&&f.value===\">\"||e!==\"StartTag\")return;if(!f||!a(f,\"meta.tag\")&&(!a(f,\"text\")||!f.value.match(\"/\"))){do f=o.stepBackward();while(f&&(a(f,\"string\")||a(f,\"keyword.operator\")||a(f,\"entity.attribute-name\")||a(f,\"text\")))}else l=!0;var c=o.stepBackward();if(!f||!a(f,\"meta.tag\")||c!==null&&c.value.match(\"/\"))return;var h=f.value.substring(1);if(l)var h=h.substring(0,s.column-f.start);return{text:\"></\"+h+\">\",selection:[1,1]}}})};r.inherits(f,i),t.XQueryBehaviour=f}),define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),define(\"ace/mode/xquery\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/xquery_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"../worker/worker_client\").WorkerClient,i=e(\"../lib/oop\"),s=e(\"./text\").Mode,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./xquery/xquery_lexer\").XQueryLexer,a=e(\"../range\").Range,f=e(\"./behaviour/xquery\").XQueryBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=e(\"../anchor\").Anchor,h=function(){this.$tokenizer=new u,this.$behaviour=new f,this.foldingRules=new l,this.$highlightRules=new o};i.inherits(h,s),function(){this.completer={getCompletions:function(e,t,n,r,i){if(!t.$worker)return i();t.$worker.emit(\"complete\",{data:{pos:n,prefix:r}}),t.$worker.on(\"complete\",function(e){i(null,e.data)})}},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=t.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);return i&&(r+=n),r},this.checkOutdent=function(e,t,n){return/^\\s+$/.test(t)?/^\\s*[\\}\\)]/.test(n):!1},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=r.match(/^(\\s*[\\}\\)])/);if(!i)return 0;var s=i[1].length,o=t.findMatchingBracket({row:n,column:s});if(!o||o.row==n)return 0;var u=this.$getIndent(t.getLine(o.row));t.replace(new a(n,0,n,s-1),u)},this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,u=/^\\s*\\(:(.*):\\)/;for(i=n;i<=r;i++)if(!u.test(t.getLine(i))){o=!1;break}var f=new a(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(u)[1]:\"(:\"+s+\":)\")},this.createWorker=function(e){var t=new r([\"ace\"],\"ace/mode/xquery_worker\",\"XQueryWorker\"),n=this;return t.attachToDocument(e.getDocument()),t.on(\"ok\",function(t){e.clearAnnotations()}),t.on(\"markers\",function(t){e.clearAnnotations(),n.addMarkers(t.data,e)}),t.on(\"highlight\",function(t){n.$tokenizer.tokens=t.data.tokens,n.$tokenizer.lines=e.getDocument().getAllLines();var r=Object.keys(n.$tokenizer.tokens);for(var i=0;i<r.length;i++){var s=parseInt(r[i]);delete e.bgTokenizer.lines[s],delete e.bgTokenizer.states[s],e.bgTokenizer.fireUpdateEvent(s,s)}}),t},this.removeMarkers=function(e){var t=e.getMarkers(!1);for(var n in t)t[n].clazz.indexOf(\"language_highlight_\")===0&&e.removeMarker(n);for(var r=0;r<e.markerAnchors.length;r++)e.markerAnchors[r].detach();e.markerAnchors=[]},this.addMarkers=function(e,t){var n=this;t.markerAnchors||(t.markerAnchors=[]),this.removeMarkers(t),t.languageAnnos=[],e.forEach(function(e){function u(i){r&&t.removeMarker(r),o.row=n.row;if(e.pos.sc!==undefined&&e.pos.ec!==undefined){var s=new a(e.pos.sl,e.pos.sc,e.pos.el,e.pos.ec);r=t.addMarker(s,\"language_highlight_\"+(e.type?e.type:\"default\"))}i&&t.setAnnotations(t.languageAnnos)}var n=new c(t.getDocument(),e.pos.sl,e.pos.sc||0);t.markerAnchors.push(n);var r,i=e.pos.ec-e.pos.sc,s=e.pos.el-e.pos.sl,o={guttertext:e.message,type:e.level||\"warning\",text:e.message};u(),n.on(\"change\",function(){u(!0)}),e.message&&t.languageAnnos.push(o)}),t.setAnnotations(t.languageAnnos)},this.$id=\"ace/mode/xquery\"}.call(h.prototype),t.Mode=h});                (function() {\n                    window.require([\"ace/mode/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/mode-yaml.js",
    "content": "define(\"ace/mode/yaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"list.markup\",regex:/^(?:-{3}|\\.{3})\\s*(?=#|$)/},{token:\"list.markup\",regex:/^\\s*[\\-?](?:$|\\s)/},{token:\"constant\",regex:\"!![\\\\w//]+\"},{token:\"constant.language\",regex:\"[&\\\\*][a-zA-Z0-9-_]+\"},{token:[\"meta.tag\",\"keyword\"],regex:/^(\\s*\\w.*?)(:(?=\\s|$))/},{token:[\"meta.tag\",\"keyword\"],regex:/(\\w+?)(\\s*:(?=\\s|$))/},{token:\"keyword.operator\",regex:\"<<\\\\w*:\\\\w*\"},{token:\"keyword.operator\",regex:\"-\\\\s*(?=[{])\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:/[|>][-+\\d\\s]*$/,onMatch:function(e,t,n,r){var i=/^\\s*/.exec(r)[0];return n.length<1?n.push(this.next):n[0]=\"mlString\",n.length<2?n.push(i.length):n[1]=i.length,this.token},next:\"mlString\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)(?=[^\\d-\\w]|$)/},{token:\"constant.numeric\",regex:/[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/},{token:\"constant.language.boolean\",regex:\"\\\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:/[^\\s,:\\[\\]\\{\\}]+/}],mlString:[{token:\"indent\",regex:/^\\s*$/},{token:\"indent\",regex:/^\\s*/,onMatch:function(e,t,n){var r=n[1];return r>=e.length?(this.next=\"start\",n.splice(0)):this.next=\"mlString\",this.token},next:\"mlString\"},{token:\"string\",regex:\".+\"}]},this.normalizeRules()};r.inherits(s,i),t.YamlHighlightRules=s}),define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),define(\"ace/mode/yaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/yaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./yaml_highlight_rules\").YamlHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/coffee\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=[\"#\"],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e==\"start\"){var i=t.match(/^.*[\\{\\(\\[]\\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/yaml\"}.call(a.prototype),t.Mode=a});                (function() {\n                    window.require([\"ace/mode/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/abap.js",
    "content": "define(\"ace/snippets/abap\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"abap\"});                (function() {\n                    window.require([\"ace/snippets/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/abc.js",
    "content": "define(\"ace/snippets/abc\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='\\nsnippet zupfnoter.print\\n\t%%%%hn.print {\"startpos\": ${1:pos_y}, \"t\":\"${2:title}\", \"v\":[${3:voices}], \"s\":[[${4:syncvoices}1,2]], \"f\":[${5:flowlines}],  \"sf\":[${6:subflowlines}], \"j\":[${7:jumplines}]}\\n\\nsnippet zupfnoter.note\\n\t%%%%hn.note {\"pos\": [${1:pos_x},${2:pos_y}], \"text\": \"${3:text}\", \"style\": \"${4:style}\"}\\n\\nsnippet zupfnoter.annotation\\n\t%%%%hn.annotation {\"id\": \"${1:id}\", \"pos\": [${2:pos}], \"text\": \"${3:text}\"}\\n\\nsnippet zupfnoter.lyrics\\n\t%%%%hn.lyrics {\"pos\": [${1:x_pos},${2:y_pos}]}\\n\\nsnippet zupfnoter.legend\\n\t%%%%hn.legend {\"pos\": [${1:x_pos},${2:y_pos}]}\\n\\n\\n\\nsnippet zupfnoter.target\\n\t\"^:${1:target}\"\\n\\nsnippet zupfnoter.goto\\n\t\"^@${1:target}@${2:distance}\"\\n\\nsnippet zupfnoter.annotationref\\n\t\"^#${1:target}\"\\n\\nsnippet zupfnoter.annotation\\n\t\"^!${1:text}@${2:x_offset},${3:y_offset}\"\\n\\n\\n',t.scope=\"abc\"});                (function() {\n                    window.require([\"ace/snippets/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/actionscript.js",
    "content": "define(\"ace/snippets/actionscript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet main\\n\tpackage {\\n\t\timport flash.display.*;\\n\t\timport flash.Events.*;\\n\t\\n\t\tpublic class Main extends Sprite {\\n\t\t\tpublic function Main (\t) {\\n\t\t\t\ttrace(\"start\");\\n\t\t\t\tstage.scaleMode = StageScaleMode.NO_SCALE;\\n\t\t\t\tstage.addEventListener(Event.RESIZE, resizeListener);\\n\t\t\t}\\n\t\\n\t\t\tprivate function resizeListener (e:Event):void {\\n\t\t\t\ttrace(\"The application window changed size!\");\\n\t\t\t\ttrace(\"New width:  \" + stage.stageWidth);\\n\t\t\t\ttrace(\"New height: \" + stage.stageHeight);\\n\t\t\t}\\n\t\\n\t\t}\\n\t\\n\t}\\nsnippet class\\n\t${1:public|internal} class ${2:name} ${3:extends } {\\n\t\tpublic function $2 (\t) {\\n\t\t\t(\"start\");\\n\t\t}\\n\t}\\nsnippet all\\n\tpackage name {\\n\\n\t\t${1:public|internal|final} class ${2:name} ${3:extends } {\\n\t\t\tprivate|public| static const FOO = \"abc\";\\n\t\t\tprivate|public| static var BAR = \"abc\";\\n\\n\t\t\t// class initializer - no JIT !! one time setup\\n\t\t\tif Cababilities.os == \"Linux|MacOS\" {\\n\t\t\t\tFOO = \"other\";\\n\t\t\t}\\n\\n\t\t\t// constructor:\\n\t\t\tpublic function $2 (\t){\\n\t\t\t\tsuper2();\\n\t\t\t\ttrace(\"start\");\\n\t\t\t}\\n\t\t\tpublic function name (a, b...){\\n\t\t\t\tsuper.name(..);\\n\t\t\t\tlable:break\\n\t\t\t}\\n\t\t}\\n\t}\\n\\n\tfunction A(){\\n\t\t// A can only be accessed within this file\\n\t}\\nsnippet switch\\n\tswitch(${1}){\\n\t\tcase ${2}:\\n\t\t\t${3}\\n\t\tbreak;\\n\t\tdefault:\\n\t}\\nsnippet case\\n\t\tcase ${1}:\\n\t\t\t${2}\\n\t\tbreak;\\nsnippet package\\n\tpackage ${1:package}{\\n\t\t${2}\\n\t}\\nsnippet wh\\n\twhile ${1:cond}{\\n\t\t${2}\\n\t}\\nsnippet do\\n\tdo {\\n\t\t${2}\\n\t} while (${1:cond})\\nsnippet while\\n\twhile ${1:cond}{\\n\t\t${2}\\n\t}\\nsnippet for enumerate names\\n\tfor (${1:var} in ${2:object}){\\n\t\t${3}\\n\t}\\nsnippet for enumerate values\\n\tfor each (${1:var} in ${2:object}){\\n\t\t${3}\\n\t}\\nsnippet get_set\\n\tfunction get ${1:name} {\\n\t\treturn ${2}\\n\t}\\n\tfunction set $1 (newValue) {\\n\t\t${3}\\n\t}\\nsnippet interface\\n\tinterface name {\\n\t\tfunction method(${1}):${2:returntype};\\n\t}\\nsnippet try\\n\ttry {\\n\t\t${1}\\n\t} catch (error:ErrorType) {\\n\t\t${2}\\n\t} finally {\\n\t\t${3}\\n\t}\\n# For Loop (same as c.snippet)\\nsnippet for for (..) {..}\\n\tfor (${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\t\t${4:/* code */}\\n\t}\\n# Custom For Loop\\nsnippet forr\\n\tfor (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {\\n\t\t${5:/* code */}\\n\t}\\n# If Condition\\nsnippet if\\n\tif (${1:/* condition */}) {\\n\t\t${2:/* code */}\\n\t}\\nsnippet el\\n\telse {\\n\t\t${1}\\n\t}\\n# Ternary conditional\\nsnippet t\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\nsnippet fun\\n\tfunction ${1:function_name}(${2})${3}\\n\t{\\n\t\t${4:/* code */}\\n\t}\\n# FlxSprite (usefull when using the flixel library)\\nsnippet FlxSprite\\n\tpackage\\n\t{\\n\t\timport org.flixel.*\\n\\n\t\tpublic class ${1:ClassName} extends ${2:FlxSprite}\\n\t\t{\\n\t\t\tpublic function $1(${3: X:Number, Y:Number}):void\\n\t\t\t{\\n\t\t\t\tsuper(X,Y);\\n\t\t\t\t${4: //code...}\\n\t\t\t}\\n\\n\t\t\toverride public function update():void\\n\t\t\t{\\n\t\t\t\tsuper.update();\\n\t\t\t\t${5: //code...}\\n\t\t\t}\\n\t\t}\\n\t}\\n\\n',t.scope=\"actionscript\"});                (function() {\n                    window.require([\"ace/snippets/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/ada.js",
    "content": "define(\"ace/snippets/ada\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ada\"});                (function() {\n                    window.require([\"ace/snippets/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/apache_conf.js",
    "content": "define(\"ace/snippets/apache_conf\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"apache_conf\"});                (function() {\n                    window.require([\"ace/snippets/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/apex.js",
    "content": "define(\"ace/snippets/apex\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"apex\"});                (function() {\n                    window.require([\"ace/snippets/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/applescript.js",
    "content": "define(\"ace/snippets/applescript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"applescript\"});                (function() {\n                    window.require([\"ace/snippets/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/asciidoc.js",
    "content": "define(\"ace/snippets/asciidoc\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"asciidoc\"});                (function() {\n                    window.require([\"ace/snippets/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/asl.js",
    "content": "define(\"ace/snippets/asl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"asl\"});                (function() {\n                    window.require([\"ace/snippets/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/assembly_x86.js",
    "content": "define(\"ace/snippets/assembly_x86\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"assembly_x86\"});                (function() {\n                    window.require([\"ace/snippets/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/autohotkey.js",
    "content": "define(\"ace/snippets/autohotkey\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"autohotkey\"});                (function() {\n                    window.require([\"ace/snippets/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/batchfile.js",
    "content": "define(\"ace/snippets/batchfile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"batchfile\"});                (function() {\n                    window.require([\"ace/snippets/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/bro.js",
    "content": "define(\"ace/snippets/bro\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/bro\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/c9search.js",
    "content": "define(\"ace/snippets/c9search\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"c9search\"});                (function() {\n                    window.require([\"ace/snippets/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/c_cpp.js",
    "content": "define(\"ace/snippets/c_cpp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"## STL Collections\\n# std::array\\nsnippet array\\n\tstd::array<${1:T}, ${2:N}> ${3};${4}\\n# std::vector\\nsnippet vector\\n\tstd::vector<${1:T}> ${2};${3}\\n# std::deque\\nsnippet deque\\n\tstd::deque<${1:T}> ${2};${3}\\n# std::forward_list\\nsnippet flist\\n\tstd::forward_list<${1:T}> ${2};${3}\\n# std::list\\nsnippet list\\n\tstd::list<${1:T}> ${2};${3}\\n# std::set\\nsnippet set\\n\tstd::set<${1:T}> ${2};${3}\\n# std::map\\nsnippet map\\n\tstd::map<${1:Key}, ${2:T}> ${3};${4}\\n# std::multiset\\nsnippet mset\\n\tstd::multiset<${1:T}> ${2};${3}\\n# std::multimap\\nsnippet mmap\\n\tstd::multimap<${1:Key}, ${2:T}> ${3};${4}\\n# std::unordered_set\\nsnippet uset\\n\tstd::unordered_set<${1:T}> ${2};${3}\\n# std::unordered_map\\nsnippet umap\\n\tstd::unordered_map<${1:Key}, ${2:T}> ${3};${4}\\n# std::unordered_multiset\\nsnippet umset\\n\tstd::unordered_multiset<${1:T}> ${2};${3}\\n# std::unordered_multimap\\nsnippet ummap\\n\tstd::unordered_multimap<${1:Key}, ${2:T}> ${3};${4}\\n# std::stack\\nsnippet stack\\n\tstd::stack<${1:T}> ${2};${3}\\n# std::queue\\nsnippet queue\\n\tstd::queue<${1:T}> ${2};${3}\\n# std::priority_queue\\nsnippet pqueue\\n\tstd::priority_queue<${1:T}> ${2};${3}\\n##\\n## Access Modifiers\\n# private\\nsnippet pri\\n\tprivate\\n# protected\\nsnippet pro\\n\tprotected\\n# public\\nsnippet pub\\n\tpublic\\n# friend\\nsnippet fr\\n\tfriend\\n# mutable\\nsnippet mu\\n\tmutable\\n## \\n## Class\\n# class\\nsnippet cl\\n\tclass ${1:`Filename('$1', 'name')`} \\n\t{\\n\tpublic:\\n\t\t$1(${2});\\n\t\t~$1();\\n\\n\tprivate:\\n\t\t${3:/* data */}\\n\t};\\n# member function implementation\\nsnippet mfun\\n\t${4:void} ${1:`Filename('$1', 'ClassName')`}::${2:memberFunction}(${3}) {\\n\t\t${5:/* code */}\\n\t}\\n# namespace\\nsnippet ns\\n\tnamespace ${1:`Filename('', 'my')`} {\\n\t\t${2}\\n\t} /* namespace $1 */\\n##\\n## Input/Output\\n# std::cout\\nsnippet cout\\n\tstd::cout << ${1} << std::endl;${2}\\n# std::cin\\nsnippet cin\\n\tstd::cin >> ${1};${2}\\n##\\n## Iteration\\n# for i \\nsnippet fori\\n\tfor (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\t\t${4:/* code */}\\n\t}${5}\\n\\n# foreach\\nsnippet fore\\n\tfor (${1:auto} ${2:i} : ${3:container}) {\\n\t\t${4:/* code */}\\n\t}${5}\\n# iterator\\nsnippet iter\\n\tfor (${1:std::vector}<${2:type}>::${3:const_iterator} ${4:i} = ${5:container}.begin(); $4 != $5.end(); ++$4) {\\n\t\t${6}\\n\t}${7}\\n\\n# auto iterator\\nsnippet itera\\n\tfor (auto ${1:i} = $1.begin(); $1 != $1.end(); ++$1) {\\n\t\t${2:std::cout << *$1 << std::endl;}\\n\t}${3}\\n##\\n## Lambdas\\n# lamda (one line)\\nsnippet ld\\n\t[${1}](${2}){${3:/* code */}}${4}\\n# lambda (multi-line)\\nsnippet lld\\n\t[${1}](${2}){\\n\t\t${3:/* code */}\\n\t}${4}\\n\",t.scope=\"c_cpp\"});                (function() {\n                    window.require([\"ace/snippets/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/cirru.js",
    "content": "define(\"ace/snippets/cirru\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"cirru\"});                (function() {\n                    window.require([\"ace/snippets/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/clojure.js",
    "content": "define(\"ace/snippets/clojure\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet comm\\n\t(comment\\n\t  ${1}\\n\t  )\\nsnippet condp\\n\t(condp ${1:pred} ${2:expr}\\n\t  ${3})\\nsnippet def\\n\t(def ${1})\\nsnippet defm\\n\t(defmethod ${1:multifn} \"${2:doc-string}\" ${3:dispatch-val} [${4:args}]\\n\t  ${5})\\nsnippet defmm\\n\t(defmulti ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\\nsnippet defma\\n\t(defmacro ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\\nsnippet defn\\n\t(defn ${1:name} \"${2:doc-string}\" [${3:arg-list}]\\n\t  ${4})\\nsnippet defp\\n\t(defprotocol ${1:name}\\n\t  ${2})\\nsnippet defr\\n\t(defrecord ${1:name} [${2:fields}]\\n\t  ${3:protocol}\\n\t  ${4})\\nsnippet deft\\n\t(deftest ${1:name}\\n\t    (is (= ${2:assertion})))\\n\t  ${3})\\nsnippet is\\n\t(is (= ${1} ${2}))\\nsnippet defty\\n\t(deftype ${1:Name} [${2:fields}]\\n\t  ${3:Protocol}\\n\t  ${4})\\nsnippet doseq\\n\t(doseq [${1:elem} ${2:coll}]\\n\t  ${3})\\nsnippet fn\\n\t(fn [${1:arg-list}] ${2})\\nsnippet if\\n\t(if ${1:test-expr}\\n\t  ${2:then-expr}\\n\t  ${3:else-expr})\\nsnippet if-let \\n\t(if-let [${1:result} ${2:test-expr}]\\n\t\t(${3:then-expr} $1)\\n\t\t(${4:else-expr}))\\nsnippet imp\\n\t(:import [${1:package}])\\n\t& {:keys [${1:keys}] :or {${2:defaults}}}\\nsnippet let\\n\t(let [${1:name} ${2:expr}]\\n\t\t${3})\\nsnippet letfn\\n\t(letfn [(${1:name) [${2:args}]\\n\t          ${3})])\\nsnippet map\\n\t(map ${1:func} ${2:coll})\\nsnippet mapl\\n\t(map #(${1:lambda}) ${2:coll})\\nsnippet met\\n\t(${1:name} [${2:this} ${3:args}]\\n\t  ${4})\\nsnippet ns\\n\t(ns ${1:name}\\n\t  ${2})\\nsnippet dotimes\\n\t(dotimes [_ 10]\\n\t  (time\\n\t    (dotimes [_ ${1:times}]\\n\t      ${2})))\\nsnippet pmethod\\n\t(${1:name} [${2:this} ${3:args}])\\nsnippet refer\\n\t(:refer-clojure :exclude [${1}])\\nsnippet require\\n\t(:require [${1:namespace} :as [${2}]])\\nsnippet use\\n\t(:use [${1:namespace} :only [${2}]])\\nsnippet print\\n\t(println ${1})\\nsnippet reduce\\n\t(reduce ${1:(fn [p n] ${3})} ${2})\\nsnippet when\\n\t(when ${1:test} ${2:body})\\nsnippet when-let\\n\t(when-let [${1:result} ${2:test}]\\n\t\t${3:body})\\n',t.scope=\"clojure\"});                (function() {\n                    window.require([\"ace/snippets/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/cobol.js",
    "content": "define(\"ace/snippets/cobol\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"cobol\"});                (function() {\n                    window.require([\"ace/snippets/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/coffee.js",
    "content": "define(\"ace/snippets/coffee\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Closure loop\\nsnippet forindo\\n\tfor ${1:name} in ${2:array}\\n\t\tdo ($1) ->\\n\t\t\t${3:// body}\\n# Array comprehension\\nsnippet fora\\n\tfor ${1:name} in ${2:array}\\n\t\t${3:// body...}\\n# Object comprehension\\nsnippet foro\\n\tfor ${1:key}, ${2:value} of ${3:object}\\n\t\t${4:// body...}\\n# Range comprehension (inclusive)\\nsnippet forr\\n\tfor ${1:name} in [${2:start}..${3:finish}]\\n\t\t${4:// body...}\\nsnippet forrb\\n\tfor ${1:name} in [${2:start}..${3:finish}] by ${4:step}\\n\t\t${5:// body...}\\n# Range comprehension (exclusive)\\nsnippet forrex\\n\tfor ${1:name} in [${2:start}...${3:finish}]\\n\t\t${4:// body...}\\nsnippet forrexb\\n\tfor ${1:name} in [${2:start}...${3:finish}] by ${4:step}\\n\t\t${5:// body...}\\n# Function\\nsnippet fun\\n\t(${1:args}) ->\\n\t\t${2:// body...}\\n# Function (bound)\\nsnippet bfun\\n\t(${1:args}) =>\\n\t\t${2:// body...}\\n# Class\\nsnippet cla class ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\t\t${2}\\nsnippet cla class .. constructor: ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\t\tconstructor: (${2:args}) ->\\n\t\t\t${3}\\n\\n\t\t${4}\\nsnippet cla class .. extends ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\t\t${3}\\nsnippet cla class .. extends .. constructor: ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\t\tconstructor: (${3:args}) ->\\n\t\t\t${4}\\n\\n\t\t${5}\\n# If\\nsnippet if\\n\tif ${1:condition}\\n\t\t${2:// body...}\\n# If __ Else\\nsnippet ife\\n\tif ${1:condition}\\n\t\t${2:// body...}\\n\telse\\n\t\t${3:// body...}\\n# Else if\\nsnippet elif\\n\telse if ${1:condition}\\n\t\t${2:// body...}\\n# Ternary If\\nsnippet ifte\\n\tif ${1:condition} then ${2:value} else ${3:other}\\n# Unless\\nsnippet unl\\n\t${1:action} unless ${2:condition}\\n# Switch\\nsnippet swi\\n\tswitch ${1:object}\\n\t\twhen ${2:value}\\n\t\t\t${3:// body...}\\n\\n# Log\\nsnippet log\\n\tconsole.log ${1}\\n# Try __ Catch\\nsnippet try\\n\ttry\\n\t\t${1}\\n\tcatch ${2:error}\\n\t\t${3}\\n# Require\\nsnippet req\\n\t${2:$1} = require '${1:sys}'${3}\\n# Export\\nsnippet exp\\n\t${1:root} = exports ? this\\n\",t.scope=\"coffee\"});                (function() {\n                    window.require([\"ace/snippets/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/coldfusion.js",
    "content": "define(\"ace/snippets/coldfusion\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"coldfusion\"});                (function() {\n                    window.require([\"ace/snippets/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/csharp.js",
    "content": "define(\"ace/snippets/csharp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"csharp\"});                (function() {\n                    window.require([\"ace/snippets/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/csound_document.js",
    "content": "define(\"ace/snippets/csound_document\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# <CsoundSynthesizer>\\nsnippet synth\\n\t<CsoundSynthesizer>\\n\t<CsInstruments>\\n\t${1}\\n\t</CsInstruments>\\n\t<CsScore>\\n\te\\n\t</CsScore>\\n\t</CsoundSynthesizer>\\n\",t.scope=\"csound_document\"});                (function() {\n                    window.require([\"ace/snippets/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/csound_orchestra.js",
    "content": "define(\"ace/snippets/csound_orchestra\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# else\\nsnippet else\\n\telse\\n\t\t${1:/* statements */}\\n# elseif\\nsnippet elseif\\n\telseif ${1:/* condition */} then\\n\t\t${2:/* statements */}\\n# if\\nsnippet if\\n\tif ${1:/* condition */} then\\n\t\t${2:/* statements */}\\n\tendif\\n# instrument block\\nsnippet instr\\n\tinstr ${1:name}\\n\t\t${2:/* statements */}\\n\tendin\\n# i-time while loop\\nsnippet iwhile\\n\ti${1:Index} = ${2:0}\\n\twhile i${1:Index} < ${3:/* count */} do\\n\t\t${4:/* statements */}\\n\t\ti${1:Index} += 1\\n\tod\\n# k-rate while loop\\nsnippet kwhile\\n\tk${1:Index} = ${2:0}\\n\twhile k${1:Index} < ${3:/* count */} do\\n\t\t${4:/* statements */}\\n\t\tk${1:Index} += 1\\n\tod\\n# opcode\\nsnippet opcode\\n\topcode ${1:name}, ${2:/* output types */ 0}, ${3:/* input types */ 0}\\n\t\t${4:/* statements */}\\n\tendop\\n# until loop\\nsnippet until\\n\tuntil ${1:/* condition */} do\\n\t\t${2:/* statements */}\\n\tod\\n# while loop\\nsnippet while\\n\twhile ${1:/* condition */} do\\n\t\t${2:/* statements */}\\n\tod\\n\",t.scope=\"csound_orchestra\"});                (function() {\n                    window.require([\"ace/snippets/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/csound_score.js",
    "content": "define(\"ace/snippets/csound_score\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"csound_score\"});                (function() {\n                    window.require([\"ace/snippets/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/csp.js",
    "content": "define(\"ace/snippets/csp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/css.js",
    "content": "define(\"ace/snippets/css\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet .\\n\t${1} {\\n\t\t${2}\\n\t}\\nsnippet !\\n\t !important\\nsnippet bdi:m+\\n\t-moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:m\\n\t-moz-border-image: ${1};\\nsnippet bdrz:m\\n\t-moz-border-radius: ${1};\\nsnippet bxsh:m+\\n\t-moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh:m\\n\t-moz-box-shadow: ${1};\\nsnippet bdi:w+\\n\t-webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:w\\n\t-webkit-border-image: ${1};\\nsnippet bdrz:w\\n\t-webkit-border-radius: ${1};\\nsnippet bxsh:w+\\n\t-webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh:w\\n\t-webkit-box-shadow: ${1};\\nsnippet @f\\n\t@font-face {\\n\t\tfont-family: ${1};\\n\t\tsrc: url(${2});\\n\t}\\nsnippet @i\\n\t@import url(${1});\\nsnippet @m\\n\t@media ${1:print} {\\n\t\t${2}\\n\t}\\nsnippet bg+\\n\tbackground: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\\nsnippet bga\\n\tbackground-attachment: ${1};\\nsnippet bga:f\\n\tbackground-attachment: fixed;\\nsnippet bga:s\\n\tbackground-attachment: scroll;\\nsnippet bgbk\\n\tbackground-break: ${1};\\nsnippet bgbk:bb\\n\tbackground-break: bounding-box;\\nsnippet bgbk:c\\n\tbackground-break: continuous;\\nsnippet bgbk:eb\\n\tbackground-break: each-box;\\nsnippet bgcp\\n\tbackground-clip: ${1};\\nsnippet bgcp:bb\\n\tbackground-clip: border-box;\\nsnippet bgcp:cb\\n\tbackground-clip: content-box;\\nsnippet bgcp:nc\\n\tbackground-clip: no-clip;\\nsnippet bgcp:pb\\n\tbackground-clip: padding-box;\\nsnippet bgc\\n\tbackground-color: #${1:FFF};\\nsnippet bgc:t\\n\tbackground-color: transparent;\\nsnippet bgi\\n\tbackground-image: url(${1});\\nsnippet bgi:n\\n\tbackground-image: none;\\nsnippet bgo\\n\tbackground-origin: ${1};\\nsnippet bgo:bb\\n\tbackground-origin: border-box;\\nsnippet bgo:cb\\n\tbackground-origin: content-box;\\nsnippet bgo:pb\\n\tbackground-origin: padding-box;\\nsnippet bgpx\\n\tbackground-position-x: ${1};\\nsnippet bgpy\\n\tbackground-position-y: ${1};\\nsnippet bgp\\n\tbackground-position: ${1:0} ${2:0};\\nsnippet bgr\\n\tbackground-repeat: ${1};\\nsnippet bgr:n\\n\tbackground-repeat: no-repeat;\\nsnippet bgr:x\\n\tbackground-repeat: repeat-x;\\nsnippet bgr:y\\n\tbackground-repeat: repeat-y;\\nsnippet bgr:r\\n\tbackground-repeat: repeat;\\nsnippet bgz\\n\tbackground-size: ${1};\\nsnippet bgz:a\\n\tbackground-size: auto;\\nsnippet bgz:ct\\n\tbackground-size: contain;\\nsnippet bgz:cv\\n\tbackground-size: cover;\\nsnippet bg\\n\tbackground: ${1};\\nsnippet bg:ie\\n\tfilter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\\nsnippet bg:n\\n\tbackground: none;\\nsnippet bd+\\n\tborder: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdb+\\n\tborder-bottom: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdbc\\n\tborder-bottom-color: #${1:000};\\nsnippet bdbi\\n\tborder-bottom-image: url(${1});\\nsnippet bdbi:n\\n\tborder-bottom-image: none;\\nsnippet bdbli\\n\tborder-bottom-left-image: url(${1});\\nsnippet bdbli:c\\n\tborder-bottom-left-image: continue;\\nsnippet bdbli:n\\n\tborder-bottom-left-image: none;\\nsnippet bdblrz\\n\tborder-bottom-left-radius: ${1};\\nsnippet bdbri\\n\tborder-bottom-right-image: url(${1});\\nsnippet bdbri:c\\n\tborder-bottom-right-image: continue;\\nsnippet bdbri:n\\n\tborder-bottom-right-image: none;\\nsnippet bdbrrz\\n\tborder-bottom-right-radius: ${1};\\nsnippet bdbs\\n\tborder-bottom-style: ${1};\\nsnippet bdbs:n\\n\tborder-bottom-style: none;\\nsnippet bdbw\\n\tborder-bottom-width: ${1};\\nsnippet bdb\\n\tborder-bottom: ${1};\\nsnippet bdb:n\\n\tborder-bottom: none;\\nsnippet bdbk\\n\tborder-break: ${1};\\nsnippet bdbk:c\\n\tborder-break: close;\\nsnippet bdcl\\n\tborder-collapse: ${1};\\nsnippet bdcl:c\\n\tborder-collapse: collapse;\\nsnippet bdcl:s\\n\tborder-collapse: separate;\\nsnippet bdc\\n\tborder-color: #${1:000};\\nsnippet bdci\\n\tborder-corner-image: url(${1});\\nsnippet bdci:c\\n\tborder-corner-image: continue;\\nsnippet bdci:n\\n\tborder-corner-image: none;\\nsnippet bdf\\n\tborder-fit: ${1};\\nsnippet bdf:c\\n\tborder-fit: clip;\\nsnippet bdf:of\\n\tborder-fit: overwrite;\\nsnippet bdf:ow\\n\tborder-fit: overwrite;\\nsnippet bdf:r\\n\tborder-fit: repeat;\\nsnippet bdf:sc\\n\tborder-fit: scale;\\nsnippet bdf:sp\\n\tborder-fit: space;\\nsnippet bdf:st\\n\tborder-fit: stretch;\\nsnippet bdi\\n\tborder-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:n\\n\tborder-image: none;\\nsnippet bdl+\\n\tborder-left: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdlc\\n\tborder-left-color: #${1:000};\\nsnippet bdli\\n\tborder-left-image: url(${1});\\nsnippet bdli:n\\n\tborder-left-image: none;\\nsnippet bdls\\n\tborder-left-style: ${1};\\nsnippet bdls:n\\n\tborder-left-style: none;\\nsnippet bdlw\\n\tborder-left-width: ${1};\\nsnippet bdl\\n\tborder-left: ${1};\\nsnippet bdl:n\\n\tborder-left: none;\\nsnippet bdlt\\n\tborder-length: ${1};\\nsnippet bdlt:a\\n\tborder-length: auto;\\nsnippet bdrz\\n\tborder-radius: ${1};\\nsnippet bdr+\\n\tborder-right: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdrc\\n\tborder-right-color: #${1:000};\\nsnippet bdri\\n\tborder-right-image: url(${1});\\nsnippet bdri:n\\n\tborder-right-image: none;\\nsnippet bdrs\\n\tborder-right-style: ${1};\\nsnippet bdrs:n\\n\tborder-right-style: none;\\nsnippet bdrw\\n\tborder-right-width: ${1};\\nsnippet bdr\\n\tborder-right: ${1};\\nsnippet bdr:n\\n\tborder-right: none;\\nsnippet bdsp\\n\tborder-spacing: ${1};\\nsnippet bds\\n\tborder-style: ${1};\\nsnippet bds:ds\\n\tborder-style: dashed;\\nsnippet bds:dtds\\n\tborder-style: dot-dash;\\nsnippet bds:dtdtds\\n\tborder-style: dot-dot-dash;\\nsnippet bds:dt\\n\tborder-style: dotted;\\nsnippet bds:db\\n\tborder-style: double;\\nsnippet bds:g\\n\tborder-style: groove;\\nsnippet bds:h\\n\tborder-style: hidden;\\nsnippet bds:i\\n\tborder-style: inset;\\nsnippet bds:n\\n\tborder-style: none;\\nsnippet bds:o\\n\tborder-style: outset;\\nsnippet bds:r\\n\tborder-style: ridge;\\nsnippet bds:s\\n\tborder-style: solid;\\nsnippet bds:w\\n\tborder-style: wave;\\nsnippet bdt+\\n\tborder-top: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdtc\\n\tborder-top-color: #${1:000};\\nsnippet bdti\\n\tborder-top-image: url(${1});\\nsnippet bdti:n\\n\tborder-top-image: none;\\nsnippet bdtli\\n\tborder-top-left-image: url(${1});\\nsnippet bdtli:c\\n\tborder-corner-image: continue;\\nsnippet bdtli:n\\n\tborder-corner-image: none;\\nsnippet bdtlrz\\n\tborder-top-left-radius: ${1};\\nsnippet bdtri\\n\tborder-top-right-image: url(${1});\\nsnippet bdtri:c\\n\tborder-top-right-image: continue;\\nsnippet bdtri:n\\n\tborder-top-right-image: none;\\nsnippet bdtrrz\\n\tborder-top-right-radius: ${1};\\nsnippet bdts\\n\tborder-top-style: ${1};\\nsnippet bdts:n\\n\tborder-top-style: none;\\nsnippet bdtw\\n\tborder-top-width: ${1};\\nsnippet bdt\\n\tborder-top: ${1};\\nsnippet bdt:n\\n\tborder-top: none;\\nsnippet bdw\\n\tborder-width: ${1};\\nsnippet bd\\n\tborder: ${1};\\nsnippet bd:n\\n\tborder: none;\\nsnippet b\\n\tbottom: ${1};\\nsnippet b:a\\n\tbottom: auto;\\nsnippet bxsh+\\n\tbox-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh\\n\tbox-shadow: ${1};\\nsnippet bxsh:n\\n\tbox-shadow: none;\\nsnippet bxz\\n\tbox-sizing: ${1};\\nsnippet bxz:bb\\n\tbox-sizing: border-box;\\nsnippet bxz:cb\\n\tbox-sizing: content-box;\\nsnippet cps\\n\tcaption-side: ${1};\\nsnippet cps:b\\n\tcaption-side: bottom;\\nsnippet cps:t\\n\tcaption-side: top;\\nsnippet cl\\n\tclear: ${1};\\nsnippet cl:b\\n\tclear: both;\\nsnippet cl:l\\n\tclear: left;\\nsnippet cl:n\\n\tclear: none;\\nsnippet cl:r\\n\tclear: right;\\nsnippet cp\\n\tclip: ${1};\\nsnippet cp:a\\n\tclip: auto;\\nsnippet cp:r\\n\tclip: rect(${1:0} ${2:0} ${3:0} ${4:0});\\nsnippet c\\n\tcolor: #${1:000};\\nsnippet ct\\n\tcontent: ${1};\\nsnippet ct:a\\n\tcontent: attr(${1});\\nsnippet ct:cq\\n\tcontent: close-quote;\\nsnippet ct:c\\n\tcontent: counter(${1});\\nsnippet ct:cs\\n\tcontent: counters(${1});\\nsnippet ct:ncq\\n\tcontent: no-close-quote;\\nsnippet ct:noq\\n\tcontent: no-open-quote;\\nsnippet ct:n\\n\tcontent: normal;\\nsnippet ct:oq\\n\tcontent: open-quote;\\nsnippet coi\\n\tcounter-increment: ${1};\\nsnippet cor\\n\tcounter-reset: ${1};\\nsnippet cur\\n\tcursor: ${1};\\nsnippet cur:a\\n\tcursor: auto;\\nsnippet cur:c\\n\tcursor: crosshair;\\nsnippet cur:d\\n\tcursor: default;\\nsnippet cur:ha\\n\tcursor: hand;\\nsnippet cur:he\\n\tcursor: help;\\nsnippet cur:m\\n\tcursor: move;\\nsnippet cur:p\\n\tcursor: pointer;\\nsnippet cur:t\\n\tcursor: text;\\nsnippet d\\n\tdisplay: ${1};\\nsnippet d:mib\\n\tdisplay: -moz-inline-box;\\nsnippet d:mis\\n\tdisplay: -moz-inline-stack;\\nsnippet d:b\\n\tdisplay: block;\\nsnippet d:cp\\n\tdisplay: compact;\\nsnippet d:ib\\n\tdisplay: inline-block;\\nsnippet d:itb\\n\tdisplay: inline-table;\\nsnippet d:i\\n\tdisplay: inline;\\nsnippet d:li\\n\tdisplay: list-item;\\nsnippet d:n\\n\tdisplay: none;\\nsnippet d:ri\\n\tdisplay: run-in;\\nsnippet d:tbcp\\n\tdisplay: table-caption;\\nsnippet d:tbc\\n\tdisplay: table-cell;\\nsnippet d:tbclg\\n\tdisplay: table-column-group;\\nsnippet d:tbcl\\n\tdisplay: table-column;\\nsnippet d:tbfg\\n\tdisplay: table-footer-group;\\nsnippet d:tbhg\\n\tdisplay: table-header-group;\\nsnippet d:tbrg\\n\tdisplay: table-row-group;\\nsnippet d:tbr\\n\tdisplay: table-row;\\nsnippet d:tb\\n\tdisplay: table;\\nsnippet ec\\n\tempty-cells: ${1};\\nsnippet ec:h\\n\tempty-cells: hide;\\nsnippet ec:s\\n\tempty-cells: show;\\nsnippet exp\\n\texpression()\\nsnippet fl\\n\tfloat: ${1};\\nsnippet fl:l\\n\tfloat: left;\\nsnippet fl:n\\n\tfloat: none;\\nsnippet fl:r\\n\tfloat: right;\\nsnippet f+\\n\tfont: ${1:1em} ${2:Arial},${3:sans-serif};\\nsnippet fef\\n\tfont-effect: ${1};\\nsnippet fef:eb\\n\tfont-effect: emboss;\\nsnippet fef:eg\\n\tfont-effect: engrave;\\nsnippet fef:n\\n\tfont-effect: none;\\nsnippet fef:o\\n\tfont-effect: outline;\\nsnippet femp\\n\tfont-emphasize-position: ${1};\\nsnippet femp:a\\n\tfont-emphasize-position: after;\\nsnippet femp:b\\n\tfont-emphasize-position: before;\\nsnippet fems\\n\tfont-emphasize-style: ${1};\\nsnippet fems:ac\\n\tfont-emphasize-style: accent;\\nsnippet fems:c\\n\tfont-emphasize-style: circle;\\nsnippet fems:ds\\n\tfont-emphasize-style: disc;\\nsnippet fems:dt\\n\tfont-emphasize-style: dot;\\nsnippet fems:n\\n\tfont-emphasize-style: none;\\nsnippet fem\\n\tfont-emphasize: ${1};\\nsnippet ff\\n\tfont-family: ${1};\\nsnippet ff:c\\n\tfont-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\\nsnippet ff:f\\n\tfont-family: ${1:Capitals,Impact},fantasy;\\nsnippet ff:m\\n\tfont-family: ${1:Monaco,'Courier New'},monospace;\\nsnippet ff:ss\\n\tfont-family: ${1:Helvetica,Arial},sans-serif;\\nsnippet ff:s\\n\tfont-family: ${1:Georgia,'Times New Roman'},serif;\\nsnippet fza\\n\tfont-size-adjust: ${1};\\nsnippet fza:n\\n\tfont-size-adjust: none;\\nsnippet fz\\n\tfont-size: ${1};\\nsnippet fsm\\n\tfont-smooth: ${1};\\nsnippet fsm:aw\\n\tfont-smooth: always;\\nsnippet fsm:a\\n\tfont-smooth: auto;\\nsnippet fsm:n\\n\tfont-smooth: never;\\nsnippet fst\\n\tfont-stretch: ${1};\\nsnippet fst:c\\n\tfont-stretch: condensed;\\nsnippet fst:e\\n\tfont-stretch: expanded;\\nsnippet fst:ec\\n\tfont-stretch: extra-condensed;\\nsnippet fst:ee\\n\tfont-stretch: extra-expanded;\\nsnippet fst:n\\n\tfont-stretch: normal;\\nsnippet fst:sc\\n\tfont-stretch: semi-condensed;\\nsnippet fst:se\\n\tfont-stretch: semi-expanded;\\nsnippet fst:uc\\n\tfont-stretch: ultra-condensed;\\nsnippet fst:ue\\n\tfont-stretch: ultra-expanded;\\nsnippet fs\\n\tfont-style: ${1};\\nsnippet fs:i\\n\tfont-style: italic;\\nsnippet fs:n\\n\tfont-style: normal;\\nsnippet fs:o\\n\tfont-style: oblique;\\nsnippet fv\\n\tfont-variant: ${1};\\nsnippet fv:n\\n\tfont-variant: normal;\\nsnippet fv:sc\\n\tfont-variant: small-caps;\\nsnippet fw\\n\tfont-weight: ${1};\\nsnippet fw:b\\n\tfont-weight: bold;\\nsnippet fw:br\\n\tfont-weight: bolder;\\nsnippet fw:lr\\n\tfont-weight: lighter;\\nsnippet fw:n\\n\tfont-weight: normal;\\nsnippet f\\n\tfont: ${1};\\nsnippet h\\n\theight: ${1};\\nsnippet h:a\\n\theight: auto;\\nsnippet l\\n\tleft: ${1};\\nsnippet l:a\\n\tleft: auto;\\nsnippet lts\\n\tletter-spacing: ${1};\\nsnippet lh\\n\tline-height: ${1};\\nsnippet lisi\\n\tlist-style-image: url(${1});\\nsnippet lisi:n\\n\tlist-style-image: none;\\nsnippet lisp\\n\tlist-style-position: ${1};\\nsnippet lisp:i\\n\tlist-style-position: inside;\\nsnippet lisp:o\\n\tlist-style-position: outside;\\nsnippet list\\n\tlist-style-type: ${1};\\nsnippet list:c\\n\tlist-style-type: circle;\\nsnippet list:dclz\\n\tlist-style-type: decimal-leading-zero;\\nsnippet list:dc\\n\tlist-style-type: decimal;\\nsnippet list:d\\n\tlist-style-type: disc;\\nsnippet list:lr\\n\tlist-style-type: lower-roman;\\nsnippet list:n\\n\tlist-style-type: none;\\nsnippet list:s\\n\tlist-style-type: square;\\nsnippet list:ur\\n\tlist-style-type: upper-roman;\\nsnippet lis\\n\tlist-style: ${1};\\nsnippet lis:n\\n\tlist-style: none;\\nsnippet mb\\n\tmargin-bottom: ${1};\\nsnippet mb:a\\n\tmargin-bottom: auto;\\nsnippet ml\\n\tmargin-left: ${1};\\nsnippet ml:a\\n\tmargin-left: auto;\\nsnippet mr\\n\tmargin-right: ${1};\\nsnippet mr:a\\n\tmargin-right: auto;\\nsnippet mt\\n\tmargin-top: ${1};\\nsnippet mt:a\\n\tmargin-top: auto;\\nsnippet m\\n\tmargin: ${1};\\nsnippet m:4\\n\tmargin: ${1:0} ${2:0} ${3:0} ${4:0};\\nsnippet m:3\\n\tmargin: ${1:0} ${2:0} ${3:0};\\nsnippet m:2\\n\tmargin: ${1:0} ${2:0};\\nsnippet m:0\\n\tmargin: 0;\\nsnippet m:a\\n\tmargin: auto;\\nsnippet mah\\n\tmax-height: ${1};\\nsnippet mah:n\\n\tmax-height: none;\\nsnippet maw\\n\tmax-width: ${1};\\nsnippet maw:n\\n\tmax-width: none;\\nsnippet mih\\n\tmin-height: ${1};\\nsnippet miw\\n\tmin-width: ${1};\\nsnippet op\\n\topacity: ${1};\\nsnippet op:ie\\n\tfilter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\\nsnippet op:ms\\n\t-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\\nsnippet orp\\n\torphans: ${1};\\nsnippet o+\\n\toutline: ${1:1px} ${2:solid} #${3:000};\\nsnippet oc\\n\toutline-color: ${1:#000};\\nsnippet oc:i\\n\toutline-color: invert;\\nsnippet oo\\n\toutline-offset: ${1};\\nsnippet os\\n\toutline-style: ${1};\\nsnippet ow\\n\toutline-width: ${1};\\nsnippet o\\n\toutline: ${1};\\nsnippet o:n\\n\toutline: none;\\nsnippet ovs\\n\toverflow-style: ${1};\\nsnippet ovs:a\\n\toverflow-style: auto;\\nsnippet ovs:mq\\n\toverflow-style: marquee;\\nsnippet ovs:mv\\n\toverflow-style: move;\\nsnippet ovs:p\\n\toverflow-style: panner;\\nsnippet ovs:s\\n\toverflow-style: scrollbar;\\nsnippet ovx\\n\toverflow-x: ${1};\\nsnippet ovx:a\\n\toverflow-x: auto;\\nsnippet ovx:h\\n\toverflow-x: hidden;\\nsnippet ovx:s\\n\toverflow-x: scroll;\\nsnippet ovx:v\\n\toverflow-x: visible;\\nsnippet ovy\\n\toverflow-y: ${1};\\nsnippet ovy:a\\n\toverflow-y: auto;\\nsnippet ovy:h\\n\toverflow-y: hidden;\\nsnippet ovy:s\\n\toverflow-y: scroll;\\nsnippet ovy:v\\n\toverflow-y: visible;\\nsnippet ov\\n\toverflow: ${1};\\nsnippet ov:a\\n\toverflow: auto;\\nsnippet ov:h\\n\toverflow: hidden;\\nsnippet ov:s\\n\toverflow: scroll;\\nsnippet ov:v\\n\toverflow: visible;\\nsnippet pb\\n\tpadding-bottom: ${1};\\nsnippet pl\\n\tpadding-left: ${1};\\nsnippet pr\\n\tpadding-right: ${1};\\nsnippet pt\\n\tpadding-top: ${1};\\nsnippet p\\n\tpadding: ${1};\\nsnippet p:4\\n\tpadding: ${1:0} ${2:0} ${3:0} ${4:0};\\nsnippet p:3\\n\tpadding: ${1:0} ${2:0} ${3:0};\\nsnippet p:2\\n\tpadding: ${1:0} ${2:0};\\nsnippet p:0\\n\tpadding: 0;\\nsnippet pgba\\n\tpage-break-after: ${1};\\nsnippet pgba:aw\\n\tpage-break-after: always;\\nsnippet pgba:a\\n\tpage-break-after: auto;\\nsnippet pgba:l\\n\tpage-break-after: left;\\nsnippet pgba:r\\n\tpage-break-after: right;\\nsnippet pgbb\\n\tpage-break-before: ${1};\\nsnippet pgbb:aw\\n\tpage-break-before: always;\\nsnippet pgbb:a\\n\tpage-break-before: auto;\\nsnippet pgbb:l\\n\tpage-break-before: left;\\nsnippet pgbb:r\\n\tpage-break-before: right;\\nsnippet pgbi\\n\tpage-break-inside: ${1};\\nsnippet pgbi:a\\n\tpage-break-inside: auto;\\nsnippet pgbi:av\\n\tpage-break-inside: avoid;\\nsnippet pos\\n\tposition: ${1};\\nsnippet pos:a\\n\tposition: absolute;\\nsnippet pos:f\\n\tposition: fixed;\\nsnippet pos:r\\n\tposition: relative;\\nsnippet pos:s\\n\tposition: static;\\nsnippet q\\n\tquotes: ${1};\\nsnippet q:en\\n\tquotes: '\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019';\\nsnippet q:n\\n\tquotes: none;\\nsnippet q:ru\\n\tquotes: '\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C';\\nsnippet rz\\n\tresize: ${1};\\nsnippet rz:b\\n\tresize: both;\\nsnippet rz:h\\n\tresize: horizontal;\\nsnippet rz:n\\n\tresize: none;\\nsnippet rz:v\\n\tresize: vertical;\\nsnippet r\\n\tright: ${1};\\nsnippet r:a\\n\tright: auto;\\nsnippet tbl\\n\ttable-layout: ${1};\\nsnippet tbl:a\\n\ttable-layout: auto;\\nsnippet tbl:f\\n\ttable-layout: fixed;\\nsnippet tal\\n\ttext-align-last: ${1};\\nsnippet tal:a\\n\ttext-align-last: auto;\\nsnippet tal:c\\n\ttext-align-last: center;\\nsnippet tal:l\\n\ttext-align-last: left;\\nsnippet tal:r\\n\ttext-align-last: right;\\nsnippet ta\\n\ttext-align: ${1};\\nsnippet ta:c\\n\ttext-align: center;\\nsnippet ta:l\\n\ttext-align: left;\\nsnippet ta:r\\n\ttext-align: right;\\nsnippet td\\n\ttext-decoration: ${1};\\nsnippet td:l\\n\ttext-decoration: line-through;\\nsnippet td:n\\n\ttext-decoration: none;\\nsnippet td:o\\n\ttext-decoration: overline;\\nsnippet td:u\\n\ttext-decoration: underline;\\nsnippet te\\n\ttext-emphasis: ${1};\\nsnippet te:ac\\n\ttext-emphasis: accent;\\nsnippet te:a\\n\ttext-emphasis: after;\\nsnippet te:b\\n\ttext-emphasis: before;\\nsnippet te:c\\n\ttext-emphasis: circle;\\nsnippet te:ds\\n\ttext-emphasis: disc;\\nsnippet te:dt\\n\ttext-emphasis: dot;\\nsnippet te:n\\n\ttext-emphasis: none;\\nsnippet th\\n\ttext-height: ${1};\\nsnippet th:a\\n\ttext-height: auto;\\nsnippet th:f\\n\ttext-height: font-size;\\nsnippet th:m\\n\ttext-height: max-size;\\nsnippet th:t\\n\ttext-height: text-size;\\nsnippet ti\\n\ttext-indent: ${1};\\nsnippet ti:-\\n\ttext-indent: -9999px;\\nsnippet tj\\n\ttext-justify: ${1};\\nsnippet tj:a\\n\ttext-justify: auto;\\nsnippet tj:d\\n\ttext-justify: distribute;\\nsnippet tj:ic\\n\ttext-justify: inter-cluster;\\nsnippet tj:ii\\n\ttext-justify: inter-ideograph;\\nsnippet tj:iw\\n\ttext-justify: inter-word;\\nsnippet tj:k\\n\ttext-justify: kashida;\\nsnippet tj:t\\n\ttext-justify: tibetan;\\nsnippet to+\\n\ttext-outline: ${1:0} ${2:0} #${3:000};\\nsnippet to\\n\ttext-outline: ${1};\\nsnippet to:n\\n\ttext-outline: none;\\nsnippet tr\\n\ttext-replace: ${1};\\nsnippet tr:n\\n\ttext-replace: none;\\nsnippet tsh+\\n\ttext-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet tsh\\n\ttext-shadow: ${1};\\nsnippet tsh:n\\n\ttext-shadow: none;\\nsnippet tt\\n\ttext-transform: ${1};\\nsnippet tt:c\\n\ttext-transform: capitalize;\\nsnippet tt:l\\n\ttext-transform: lowercase;\\nsnippet tt:n\\n\ttext-transform: none;\\nsnippet tt:u\\n\ttext-transform: uppercase;\\nsnippet tw\\n\ttext-wrap: ${1};\\nsnippet tw:no\\n\ttext-wrap: none;\\nsnippet tw:n\\n\ttext-wrap: normal;\\nsnippet tw:s\\n\ttext-wrap: suppress;\\nsnippet tw:u\\n\ttext-wrap: unrestricted;\\nsnippet t\\n\ttop: ${1};\\nsnippet t:a\\n\ttop: auto;\\nsnippet va\\n\tvertical-align: ${1};\\nsnippet va:bl\\n\tvertical-align: baseline;\\nsnippet va:b\\n\tvertical-align: bottom;\\nsnippet va:m\\n\tvertical-align: middle;\\nsnippet va:sub\\n\tvertical-align: sub;\\nsnippet va:sup\\n\tvertical-align: super;\\nsnippet va:tb\\n\tvertical-align: text-bottom;\\nsnippet va:tt\\n\tvertical-align: text-top;\\nsnippet va:t\\n\tvertical-align: top;\\nsnippet v\\n\tvisibility: ${1};\\nsnippet v:c\\n\tvisibility: collapse;\\nsnippet v:h\\n\tvisibility: hidden;\\nsnippet v:v\\n\tvisibility: visible;\\nsnippet whsc\\n\twhite-space-collapse: ${1};\\nsnippet whsc:ba\\n\twhite-space-collapse: break-all;\\nsnippet whsc:bs\\n\twhite-space-collapse: break-strict;\\nsnippet whsc:k\\n\twhite-space-collapse: keep-all;\\nsnippet whsc:l\\n\twhite-space-collapse: loose;\\nsnippet whsc:n\\n\twhite-space-collapse: normal;\\nsnippet whs\\n\twhite-space: ${1};\\nsnippet whs:n\\n\twhite-space: normal;\\nsnippet whs:nw\\n\twhite-space: nowrap;\\nsnippet whs:pl\\n\twhite-space: pre-line;\\nsnippet whs:pw\\n\twhite-space: pre-wrap;\\nsnippet whs:p\\n\twhite-space: pre;\\nsnippet wid\\n\twidows: ${1};\\nsnippet w\\n\twidth: ${1};\\nsnippet w:a\\n\twidth: auto;\\nsnippet wob\\n\tword-break: ${1};\\nsnippet wob:ba\\n\tword-break: break-all;\\nsnippet wob:bs\\n\tword-break: break-strict;\\nsnippet wob:k\\n\tword-break: keep-all;\\nsnippet wob:l\\n\tword-break: loose;\\nsnippet wob:n\\n\tword-break: normal;\\nsnippet wos\\n\tword-spacing: ${1};\\nsnippet wow\\n\tword-wrap: ${1};\\nsnippet wow:no\\n\tword-wrap: none;\\nsnippet wow:n\\n\tword-wrap: normal;\\nsnippet wow:s\\n\tword-wrap: suppress;\\nsnippet wow:u\\n\tword-wrap: unrestricted;\\nsnippet z\\n\tz-index: ${1};\\nsnippet z:a\\n\tz-index: auto;\\nsnippet zoo\\n\tzoom: 1;\\n\",t.scope=\"css\"});                (function() {\n                    window.require([\"ace/snippets/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/curly.js",
    "content": "define(\"ace/snippets/curly\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"curly\"});                (function() {\n                    window.require([\"ace/snippets/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/d.js",
    "content": "define(\"ace/snippets/d\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"d\"});                (function() {\n                    window.require([\"ace/snippets/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/dart.js",
    "content": "define(\"ace/snippets/dart\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet lib\\n\tlibrary ${1};\\n\t${2}\\nsnippet im\\n\timport '${1}';\\n\t${2}\\nsnippet pa\\n\tpart '${1}';\\n\t${2}\\nsnippet pao\\n\tpart of ${1};\\n\t${2}\\nsnippet main\\n\tvoid main() {\\n\t  ${1:/* code */}\\n\t}\\nsnippet st\\n\tstatic ${1}\\nsnippet fi\\n\tfinal ${1}\\nsnippet re\\n\treturn ${1}\\nsnippet br\\n\tbreak;\\nsnippet th\\n\tthrow ${1}\\nsnippet cl\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\nsnippet imp\\n\timplements ${1}\\nsnippet ext\\n\textends ${1}\\nsnippet if\\n\tif (${1:true}) {\\n\t  ${2}\\n\t}\\nsnippet ife\\n\tif (${1:true}) {\\n\t  ${2}\\n\t} else {\\n\t  ${3}\\n\t}\\nsnippet el\\n\telse\\nsnippet sw\\n\tswitch (${1}) {\\n\t  ${2}\\n\t}\\nsnippet cs\\n\tcase ${1}:\\n\t  ${2}\\nsnippet de\\n\tdefault:\\n\t  ${1}\\nsnippet for\\n\tfor (var ${2:i} = 0, len = ${1:things}.length; $2 < len; ${3:++}$2) {\\n\t  ${4:$1[$2]}\\n\t}\\nsnippet fore\\n\tfor (final ${2:item} in ${1:itemList}) {\\n\t  ${3:/* code */}\\n\t}\\nsnippet wh\\n\twhile (${1:/* condition */}) {\\n\t  ${2:/* code */}\\n\t}\\nsnippet dowh\\n\tdo {\\n\t  ${2:/* code */}\\n\t} while (${1:/* condition */});\\nsnippet as\\n\tassert(${1:/* condition */});\\nsnippet try\\n\ttry {\\n\t  ${2}\\n\t} catch (${1:Exception e}) {\\n\t}\\nsnippet tryf\\n\ttry {\\n\t  ${2}\\n\t} catch (${1:Exception e}) {\\n\t} finally {\\n\t}\\n\",t.scope=\"dart\"});                (function() {\n                    window.require([\"ace/snippets/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/diff.js",
    "content": "define(\"ace/snippets/diff\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# DEP-3 (http://dep.debian.net/deps/dep3/) style patch header\\nsnippet header DEP-3 style header\\n\tDescription: ${1}\\n\tOrigin: ${2:vendor|upstream|other}, ${3:url of the original patch}\\n\tBug: ${4:url in upstream bugtracker}\\n\tForwarded: ${5:no|not-needed|url}\\n\tAuthor: ${6:`g:snips_author`}\\n\tReviewed-by: ${7:name and email}\\n\tLast-Update: ${8:`strftime(\"%Y-%m-%d\")`}\\n\tApplied-Upstream: ${9:upstream version|url|commit}\\n\\n',t.scope=\"diff\"});                (function() {\n                    window.require([\"ace/snippets/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/django.js",
    "content": "define(\"ace/snippets/django\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Model Fields\\n\\n# Note: Optional arguments are using defaults that match what Django will use\\n# as a default, e.g. with max_length fields.  Doing this as a form of self\\n# documentation and to make it easy to know whether you should override the\\n# default or not.\\n\\n# Note: Optional arguments that are booleans will use the opposite since you\\n# can either not specify them, or override them, e.g. auto_now_add=False.\\n\\nsnippet auto\\n\t${1:FIELDNAME} = models.AutoField(${2})\\nsnippet bool\\n\t${1:FIELDNAME} = models.BooleanField(${2:default=True})\\nsnippet char\\n\t${1:FIELDNAME} = models.CharField(max_length=${2}${3:, blank=True})\\nsnippet comma\\n\t${1:FIELDNAME} = models.CommaSeparatedIntegerField(max_length=${2}${3:, blank=True})\\nsnippet date\\n\t${1:FIELDNAME} = models.DateField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet datetime\\n\t${1:FIELDNAME} = models.DateTimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet decimal\\n\t${1:FIELDNAME} = models.DecimalField(max_digits=${2}, decimal_places=${3})\\nsnippet email\\n\t${1:FIELDNAME} = models.EmailField(max_length=${2:75}${3:, blank=True})\\nsnippet file\\n\t${1:FIELDNAME} = models.FileField(upload_to=${2:path/for/upload}${3:, max_length=100})\\nsnippet filepath\\n\t${1:FIELDNAME} = models.FilePathField(path=${2:\\\"/abs/path/to/dir\\\"}${3:, max_length=100}${4:, match=\\\"*.ext\\\"}${5:, recursive=True}${6:, blank=True, })\\nsnippet float\\n\t${1:FIELDNAME} = models.FloatField(${2})\\nsnippet image\\n\t${1:FIELDNAME} = models.ImageField(upload_to=${2:path/for/upload}${3:, height_field=height, width_field=width}${4:, max_length=100})\\nsnippet int\\n\t${1:FIELDNAME} = models.IntegerField(${2})\\nsnippet ip\\n\t${1:FIELDNAME} = models.IPAddressField(${2})\\nsnippet nullbool\\n\t${1:FIELDNAME} = models.NullBooleanField(${2})\\nsnippet posint\\n\t${1:FIELDNAME} = models.PositiveIntegerField(${2})\\nsnippet possmallint\\n\t${1:FIELDNAME} = models.PositiveSmallIntegerField(${2})\\nsnippet slug\\n\t${1:FIELDNAME} = models.SlugField(max_length=${2:50}${3:, blank=True})\\nsnippet smallint\\n\t${1:FIELDNAME} = models.SmallIntegerField(${2})\\nsnippet text\\n\t${1:FIELDNAME} = models.TextField(${2:blank=True})\\nsnippet time\\n\t${1:FIELDNAME} = models.TimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet url\\n\t${1:FIELDNAME} = models.URLField(${2:verify_exists=False}${3:, max_length=200}${4:, blank=True})\\nsnippet xml\\n\t${1:FIELDNAME} = models.XMLField(schema_path=${2:None}${3:, blank=True})\\n# Relational Fields\\nsnippet fk\\n\t${1:FIELDNAME} = models.ForeignKey(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, to_field=''})\\nsnippet m2m\\n\t${1:FIELDNAME} = models.ManyToManyField(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, symmetrical=False}${6:, through=''}${7:, db_table=''})\\nsnippet o2o\\n\t${1:FIELDNAME} = models.OneToOneField(${2:OtherModel}${3:, parent_link=True}${4:, related_name=''}${5:, limit_choices_to=}${6:, to_field=''})\\n\\n# Code Skeletons\\n\\nsnippet form\\n\tclass ${1:FormName}(forms.Form):\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\t\t${3}\\n\\nsnippet model\\n\tclass ${1:ModelName}(models.Model):\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\t\t${3}\\n\t\t\\n\t\tclass Meta:\\n\t\t\t${4}\\n\t\t\\n\t\tdef __unicode__(self):\\n\t\t\t${5}\\n\t\t\\n\t\tdef save(self, force_insert=False, force_update=False):\\n\t\t\t${6}\\n\t\t\\n\t\t@models.permalink\\n\t\tdef get_absolute_url(self):\\n\t\t\treturn ('${7:view_or_url_name}' ${8})\\n\\nsnippet modeladmin\\n\tclass ${1:ModelName}Admin(admin.ModelAdmin):\\n\t\t${2}\\n\t\\n\tadmin.site.register($1, $1Admin)\\n\t\\nsnippet tabularinline\\n\tclass ${1:ModelName}Inline(admin.TabularInline):\\n\t\tmodel = $1\\n\\nsnippet stackedinline\\n\tclass ${1:ModelName}Inline(admin.StackedInline):\\n\t\tmodel = $1\\n\\nsnippet r2r\\n\treturn render_to_response('${1:template.html}', {\\n\t\t\t${2}\\n\t\t}${3:, context_instance=RequestContext(request)}\\n\t)\\n\",t.scope=\"django\"});                (function() {\n                    window.require([\"ace/snippets/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/dockerfile.js",
    "content": "define(\"ace/snippets/dockerfile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"dockerfile\"});                (function() {\n                    window.require([\"ace/snippets/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/dot.js",
    "content": "define(\"ace/snippets/dot\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"dot\"});                (function() {\n                    window.require([\"ace/snippets/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/drools.js",
    "content": "define(\"ace/snippets/drools\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='\\nsnippet rule\\n\trule \"${1?:rule_name}\"\\n\twhen\\n\t\t${2:// when...} \\n\tthen\\n\t\t${3:// then...}\\n\tend\\n\\nsnippet query\\n\tquery ${1?:query_name}\\n\t\t${2:// find} \\n\tend\\n\t\\nsnippet declare\\n\tdeclare ${1?:type_name}\\n\t\t${2:// attributes} \\n\tend\\n\\n',t.scope=\"drools\"});                (function() {\n                    window.require([\"ace/snippets/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/edifact.js",
    "content": "define(\"ace/snippets/edifact\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='## Access Modifiers\\nsnippet u\\n\tUN\\nsnippet un\\n\tUNB\\nsnippet pr\\n\tprivate\\n##\\n## Annotations\\nsnippet before\\n\t@Before\\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\\nsnippet mm\\n\t@ManyToMany\\n\t${1}\\nsnippet mo\\n\t@ManyToOne\\n\t${1}\\nsnippet om\\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\t${2}\\nsnippet oo\\n\t@OneToOne\\n\t${1}\\n##\\n## Basic Java packages and import\\nsnippet im\\n\timport\\nsnippet j.b\\n\tjava.beans.\\nsnippet j.i\\n\tjava.io.\\nsnippet j.m\\n\tjava.math.\\nsnippet j.n\\n\tjava.net.\\nsnippet j.u\\n\tjava.util.\\n##\\n## Class\\nsnippet cl\\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\\nsnippet in\\n\tinterface ${1:`Filename(\"\", \"untitled\")`} ${2:extends Parent}${3}\\nsnippet tc\\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n##\\n## Class Enhancements\\nsnippet ext\\n\textends \\nsnippet imp\\n\timplements\\n##\\n## Comments\\nsnippet /*\\n\t/*\\n\t * ${1}\\n\t */\\n##\\n## Constants\\nsnippet co\\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\\nsnippet cos\\n\tstatic public final String ${1:var} = \"${2}\";${3}\\n##\\n## Control Statements\\nsnippet case\\n\tcase ${1}:\\n\t\t${2}\\nsnippet def\\n\tdefault:\\n\t\t${2}\\nsnippet el\\n\telse\\nsnippet elif\\n\telse if (${1}) ${2}\\nsnippet if\\n\tif (${1}) ${2}\\nsnippet sw\\n\tswitch (${1}) {\\n\t\t${2}\\n\t}\\n##\\n## Create a Method\\nsnippet m\\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n##\\n## Create a Variable\\nsnippet v\\n\t${1:String} ${2:var}${3: = null}${4};${5}\\n##\\n## Enhancements to Methods, variables, classes, etc.\\nsnippet ab\\n\tabstract\\nsnippet fi\\n\tfinal\\nsnippet st\\n\tstatic\\nsnippet sy\\n\tsynchronized\\n##\\n## Error Methods\\nsnippet err\\n\tSystem.err.print(\"${1:Message}\");\\nsnippet errf\\n\tSystem.err.printf(\"${1:Message}\", ${2:exception});\\nsnippet errln\\n\tSystem.err.println(\"${1:Message}\");\\n##\\n## Exception Handling\\nsnippet as\\n\tassert ${1:test} : \"${2:Failure message}\";${3}\\nsnippet ca\\n\tcatch(${1:Exception} ${2:e}) ${3}\\nsnippet thr\\n\tthrow\\nsnippet ths\\n\tthrows\\nsnippet try\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t}\\nsnippet tryf\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t} finally {\\n\t}\\n##\\n## Find Methods\\nsnippet findall\\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\nsnippet findbyid\\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n##\\n## Javadocs\\nsnippet /**\\n\t/**\\n\t * ${1}\\n\t */\\nsnippet @au\\n\t@author `system(\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\":\\\\\" -f5 | cut -d \\\\\",\\\\\" -f1\")`\\nsnippet @br\\n\t@brief ${1:Description}\\nsnippet @fi\\n\t@file ${1:`Filename()`}.java\\nsnippet @pa\\n\t@param ${1:param}\\nsnippet @re\\n\t@return ${1:param}\\n##\\n## Logger Methods\\nsnippet debug\\n\tLogger.debug(${1:param});${2}\\nsnippet error\\n\tLogger.error(${1:param});${2}\\nsnippet info\\n\tLogger.info(${1:param});${2}\\nsnippet warn\\n\tLogger.warn(${1:param});${2}\\n##\\n## Loops\\nsnippet enfor\\n\tfor (${1} : ${2}) ${3}\\nsnippet for\\n\tfor (${1}; ${2}; ${3}) ${4}\\nsnippet wh\\n\twhile (${1}) ${2}\\n##\\n## Main method\\nsnippet main\\n\tpublic static void main (String[] args) {\\n\t\t${1:/* code */}\\n\t}\\n##\\n## Print Methods\\nsnippet print\\n\tSystem.out.print(\"${1:Message}\");\\nsnippet printf\\n\tSystem.out.printf(\"${1:Message}\", ${2:args});\\nsnippet println\\n\tSystem.out.println(${1});\\n##\\n## Render Methods\\nsnippet ren\\n\trender(${1:param});${2}\\nsnippet rena\\n\trenderArgs.put(\"${1}\", ${2});${3}\\nsnippet renb\\n\trenderBinary(${1:param});${2}\\nsnippet renj\\n\trenderJSON(${1:param});${2}\\nsnippet renx\\n\trenderXml(${1:param});${2}\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\t${1:public} void set${3:}(${2:String} ${4:}){\\n\t\tthis.$4 = $4;\\n\t}\\nsnippet get\\n\t${1:public} ${2:String} get${3:}(){\\n\t\treturn this.${4:};\\n\t}\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\treturn\\nsnippet br\\n\tbreak;\\n##\\n## Test Methods\\nsnippet t\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\nsnippet test\\n\t@Test\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\n##\\n## Utils\\nsnippet Sc\\n\tScanner\\n##\\n## Miscellaneous\\nsnippet action\\n\tpublic static void ${1:index}(${2:args}) { ${3} }\\nsnippet rnf\\n\tnotFound(${1:param});${2}\\nsnippet rnfin\\n\tnotFoundIfNull(${1:param});${2}\\nsnippet rr\\n\tredirect(${1:param});${2}\\nsnippet ru\\n\tunauthorized(${1:param});${2}\\nsnippet unless\\n\t(unless=${1:param});${2}\\n',t.scope=\"edifact\"});                (function() {\n                    window.require([\"ace/snippets/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/eiffel.js",
    "content": "define(\"ace/snippets/eiffel\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"eiffel\"});                (function() {\n                    window.require([\"ace/snippets/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/ejs.js",
    "content": "define(\"ace/snippets/ejs\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ejs\"});                (function() {\n                    window.require([\"ace/snippets/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/elixir.js",
    "content": "define(\"ace/snippets/elixir\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/elm.js",
    "content": "define(\"ace/snippets/elm\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"elm\"});                (function() {\n                    window.require([\"ace/snippets/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/erlang.js",
    "content": "define(\"ace/snippets/erlang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# module and export all\\nsnippet mod\\n\t-module(${1:`Filename('', 'my')`}).\\n\t\\n\t-compile([export_all]).\\n\t\\n\tstart() ->\\n\t    ${2}\\n\t\\n\tstop() ->\\n\t    ok.\\n# define directive\\nsnippet def\\n\t-define(${1:macro}, ${2:body}).${3}\\n# export directive\\nsnippet exp\\n\t-export([${1:function}/${2:arity}]).\\n# include directive\\nsnippet inc\\n\t-include(\\\"${1:file}\\\").${2}\\n# behavior directive\\nsnippet beh\\n\t-behaviour(${1:behaviour}).${2}\\n# if expression\\nsnippet if\\n\tif\\n\t    ${1:guard} ->\\n\t        ${2:body}\\n\tend\\n# case expression\\nsnippet case\\n\tcase ${1:expression} of\\n\t    ${2:pattern} ->\\n\t        ${3:body};\\n\tend\\n# anonymous function\\nsnippet fun\\n\tfun (${1:Parameters}) -> ${2:body} end${3}\\n# try...catch\\nsnippet try\\n\ttry\\n\t    ${1}\\n\tcatch\\n\t    ${2:_:_} -> ${3:got_some_exception}\\n\tend\\n# record directive\\nsnippet rec\\n\t-record(${1:record}, {\\n\t    ${2:field}=${3:value}}).${4}\\n# todo comment\\nsnippet todo\\n\t%% TODO: ${1}\\n## Snippets below (starting with '%') are in EDoc format.\\n## See http://www.erlang.org/doc/apps/edoc/chapter.html#id56887 for more details\\n# doc comment\\nsnippet %d\\n\t%% @doc ${1}\\n# end of doc comment\\nsnippet %e\\n\t%% @end\\n# specification comment\\nsnippet %s\\n\t%% @spec ${1}\\n# private function marker\\nsnippet %p\\n\t%% @private\\n# OTP application\\nsnippet application\\n\t-module(${1:`Filename('', 'my')`}).\\n\\n\t-behaviour(application).\\n\\n\t-export([start/2, stop/1]).\\n\\n\tstart(_Type, _StartArgs) ->\\n\t    case ${2:root_supervisor}:start_link() of\\n\t        {ok, Pid} ->\\n\t            {ok, Pid};\\n\t        Other ->\\n\t\t          {error, Other}\\n\t    end.\\n\\n\tstop(_State) ->\\n\t    ok.\t\\n# OTP supervisor\\nsnippet supervisor\\n\t-module(${1:`Filename('', 'my')`}).\\n\\n\t-behaviour(supervisor).\\n\\n\t%% API\\n\t-export([start_link/0]).\\n\\n\t%% Supervisor callbacks\\n\t-export([init/1]).\\n\\n\t-define(SERVER, ?MODULE).\\n\\n\tstart_link() ->\\n\t    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\\n\\n\tinit([]) ->\\n\t    Server = {${2:my_server}, {$2, start_link, []},\\n\t      permanent, 2000, worker, [$2]},\\n\t    Children = [Server],\\n\t    RestartStrategy = {one_for_one, 0, 1},\\n\t    {ok, {RestartStrategy, Children}}.\\n# OTP gen_server\\nsnippet gen_server\\n\t-module(${1:`Filename('', 'my')`}).\\n\\n\t-behaviour(gen_server).\\n\\n\t%% API\\n\t-export([\\n\t         start_link/0\\n\t        ]).\\n\\n\t%% gen_server callbacks\\n\t-export([init/1, handle_call/3, handle_cast/2, handle_info/2,\\n\t         terminate/2, code_change/3]).\\n\\n\t-define(SERVER, ?MODULE).\\n\\n\t-record(state, {}).\\n\\n\t%%%===================================================================\\n\t%%% API\\n\t%%%===================================================================\\n\\n\tstart_link() ->\\n\t    gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).\\n\\n\t%%%===================================================================\\n\t%%% gen_server callbacks\\n\t%%%===================================================================\\n\\n\tinit([]) ->\\n\t    {ok, #state{}}.\\n\\n\thandle_call(_Request, _From, State) ->\\n\t    Reply = ok,\\n\t    {reply, Reply, State}.\\n\\n\thandle_cast(_Msg, State) ->\\n\t    {noreply, State}.\\n\\n\thandle_info(_Info, State) ->\\n\t    {noreply, State}.\\n\\n\tterminate(_Reason, _State) ->\\n\t    ok.\\n\\n\tcode_change(_OldVsn, State, _Extra) ->\\n\t    {ok, State}.\\n\\n\t%%%===================================================================\\n\t%%% Internal functions\\n\t%%%===================================================================\\n\\n\",t.scope=\"erlang\"});                (function() {\n                    window.require([\"ace/snippets/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/forth.js",
    "content": "define(\"ace/snippets/forth\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"forth\"});                (function() {\n                    window.require([\"ace/snippets/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/fortran.js",
    "content": "define(\"ace/snippets/fortran\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"fortran\"});                (function() {\n                    window.require([\"ace/snippets/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/fsharp.js",
    "content": "define(\"ace/snippets/fsharp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"fsharp\"});                (function() {\n                    window.require([\"ace/snippets/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/fsl.js",
    "content": "define(\"ace/snippets/fsl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/ftl.js",
    "content": "define(\"ace/snippets/ftl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ftl\"});                (function() {\n                    window.require([\"ace/snippets/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/gcode.js",
    "content": "define(\"ace/snippets/gcode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"gcode\"});                (function() {\n                    window.require([\"ace/snippets/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/gherkin.js",
    "content": "define(\"ace/snippets/gherkin\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"gherkin\"});                (function() {\n                    window.require([\"ace/snippets/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/gitignore.js",
    "content": "define(\"ace/snippets/gitignore\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"gitignore\"});                (function() {\n                    window.require([\"ace/snippets/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/glsl.js",
    "content": "define(\"ace/snippets/glsl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"glsl\"});                (function() {\n                    window.require([\"ace/snippets/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/gobstones.js",
    "content": "define(\"ace/snippets/gobstones\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Procedure\\nsnippet proc\\n\tprocedure ${1?:name}(${2:argument}) {\\n\t\t${3:// body...}\\n\t}\\n\\n# Function\\nsnippet fun\\n\tfunction ${1?:name}(${2:argument}) {\\n\t\treturn ${3:// body...}\\n\t}\\n\\n# Repeat\\nsnippet rep\\n\trepeat ${1?:times} {\\n\t\t${2:// body...}\\n\t}\\n\\n# For\\nsnippet for\\n\tforeach ${1?:e} in ${2?:list} {\\n\t\t${3:// body...}\t\\n\t}\\n\\n# If\\nsnippet if\\n\tif (${1?:condition}) {\\n\t\t${3:// body...}\t\\n\t}\\n\\n# While\\n  while (${1?:condition}) {\\n    ${2:// body...}\t\\n  }\\n\",t.scope=\"gobstones\"});                (function() {\n                    window.require([\"ace/snippets/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/golang.js",
    "content": "define(\"ace/snippets/golang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"golang\"});                (function() {\n                    window.require([\"ace/snippets/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/graphqlschema.js",
    "content": "define(\"ace/snippets/graphqlschema\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Type Snippet\\ntrigger type\\nsnippet type\\n\ttype ${1:type_name} {\\n\t\t${2:type_siblings}\\n\t}\\n\\n# Input Snippet\\ntrigger input\\nsnippet input\\n\tinput ${1:input_name} {\\n\t\t${2:input_siblings}\\n\t}\\n\\n# Interface Snippet\\ntrigger interface\\nsnippet interface\\n\tinterface ${1:interface_name} {\\n\t\t${2:interface_siblings}\\n\t}\\n\\n# Interface Snippet\\ntrigger union\\nsnippet union\\n\tunion ${1:union_name} = ${2:type} | ${3: type}\\n\\n# Enum Snippet\\ntrigger enum\\nsnippet enum\\n\tenum ${1:enum_name} {\\n\t\t${2:enum_siblings}\\n\t}\\n\",t.scope=\"graphqlschema\"});                (function() {\n                    window.require([\"ace/snippets/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/groovy.js",
    "content": "define(\"ace/snippets/groovy\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"groovy\"});                (function() {\n                    window.require([\"ace/snippets/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/haml.js",
    "content": "define(\"ace/snippets/haml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet t\\n\t%table\\n\t\t%tr\\n\t\t\t%th\\n\t\t\t\t${1:headers}\\n\t\t%tr\\n\t\t\t%td\\n\t\t\t\t${2:headers}\\nsnippet ul\\n\t%ul\\n\t\t%li\\n\t\t\t${1:item}\\n\t\t%li\\nsnippet =rp\\n\t= render :partial => '${1:partial}'\\nsnippet =rpl\\n\t= render :partial => '${1:partial}', :locals => {}\\nsnippet =rpc\\n\t= render :partial => '${1:partial}', :collection => @$1\\n\\n\",t.scope=\"haml\"});                (function() {\n                    window.require([\"ace/snippets/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/handlebars.js",
    "content": "define(\"ace/snippets/handlebars\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"handlebars\"});                (function() {\n                    window.require([\"ace/snippets/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/haskell.js",
    "content": "define(\"ace/snippets/haskell\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet lang\\n\t{-# LANGUAGE ${1:OverloadedStrings} #-}\\nsnippet info\\n\t-- |\\n\t-- Module      :  ${1:Module.Namespace}\\n\t-- Copyright   :  ${2:Author} ${3:2011-2012}\\n\t-- License     :  ${4:BSD3}\\n\t--\\n\t-- Maintainer  :  ${5:email@something.com}\\n\t-- Stability   :  ${6:experimental}\\n\t-- Portability :  ${7:unknown}\\n\t--\\n\t-- ${8:Description}\\n\t--\\nsnippet import\\n\timport           ${1:Data.Text}\\nsnippet import2\\n\timport           ${1:Data.Text} (${2:head})\\nsnippet importq\\n\timport qualified ${1:Data.Text} as ${2:T}\\nsnippet inst\\n\tinstance ${1:Monoid} ${2:Type} where\\n\t\t${3}\\nsnippet type\\n\ttype ${1:Type} = ${2:Type}\\nsnippet data\\n\tdata ${1:Type} = ${2:$1} ${3:Int}\\nsnippet newtype\\n\tnewtype ${1:Type} = ${2:$1} ${3:Int}\\nsnippet class\\n\tclass ${1:Class} a where\\n\t\t${2}\\nsnippet module\\n\tmodule `substitute(substitute(expand('%:r'), '[/\\\\\\\\]','.','g'),'^\\\\%(\\\\l*\\\\.\\\\)\\\\?','','')` (\\n\t)\twhere\\n\t`expand('%') =~ 'Main' ? \\\"\\\\n\\\\nmain = do\\\\n  print \\\\\\\"hello world\\\\\\\"\\\" : \\\"\\\"`\\n\\nsnippet const\\n\t${1:name} :: ${2:a}\\n\t$1 = ${3:undefined}\\nsnippet fn\\n\t${1:fn} :: ${2:a} -> ${3:a}\\n\t$1 ${4} = ${5:undefined}\\nsnippet fn2\\n\t${1:fn} :: ${2:a} -> ${3:a} -> ${4:a}\\n\t$1 ${5} = ${6:undefined}\\nsnippet ap\\n\t${1:map} ${2:fn} ${3:list}\\nsnippet do\\n\tdo\\n\t\t\\nsnippet \\u03bb\\n\t\\\\${1:x} -> ${2}\\nsnippet \\\\\\n\t\\\\${1:x} -> ${2}\\nsnippet <-\\n\t${1:a} <- ${2:m a}\\nsnippet \\u2190\\n\t${1:a} <- ${2:m a}\\nsnippet ->\\n\t${1:m a} -> ${2:a}\\nsnippet \\u2192\\n\t${1:m a} -> ${2:a}\\nsnippet tup\\n\t(${1:a}, ${2:b})\\nsnippet tup2\\n\t(${1:a}, ${2:b}, ${3:c})\\nsnippet tup3\\n\t(${1:a}, ${2:b}, ${3:c}, ${4:d})\\nsnippet rec\\n\t${1:Record} { ${2:recFieldA} = ${3:undefined}\\n\t\t\t\t, ${4:recFieldB} = ${5:undefined}\\n\t\t\t\t}\\nsnippet case\\n\tcase ${1:something} of\\n\t\t${2} -> ${3}\\nsnippet let\\n\tlet ${1} = ${2}\\n\tin ${3}\\nsnippet where\\n\twhere\\n\t\t${1:fn} = ${2:undefined}\\n\",t.scope=\"haskell\"});                (function() {\n                    window.require([\"ace/snippets/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/haskell_cabal.js",
    "content": "define(\"ace/snippets/haskell_cabal\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"haskell_cabal\"});                (function() {\n                    window.require([\"ace/snippets/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/haxe.js",
    "content": "define(\"ace/snippets/haxe\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"haxe\"});                (function() {\n                    window.require([\"ace/snippets/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/hjson.js",
    "content": "define(\"ace/snippets/hjson\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/html.js",
    "content": "define(\"ace/snippets/html\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Some useful Unicode entities\\n# Non-Breaking Space\\nsnippet nbs\\n\t&nbsp;\\n# \\u2190\\nsnippet left\\n\t&#x2190;\\n# \\u2192\\nsnippet right\\n\t&#x2192;\\n# \\u2191\\nsnippet up\\n\t&#x2191;\\n# \\u2193\\nsnippet down\\n\t&#x2193;\\n# \\u21a9\\nsnippet return\\n\t&#x21A9;\\n# \\u21e4\\nsnippet backtab\\n\t&#x21E4;\\n# \\u21e5\\nsnippet tab\\n\t&#x21E5;\\n# \\u21e7\\nsnippet shift\\n\t&#x21E7;\\n# \\u2303\\nsnippet ctrl\\n\t&#x2303;\\n# \\u2305\\nsnippet enter\\n\t&#x2305;\\n# \\u2318\\nsnippet cmd\\n\t&#x2318;\\n# \\u2325\\nsnippet option\\n\t&#x2325;\\n# \\u2326\\nsnippet delete\\n\t&#x2326;\\n# \\u232b\\nsnippet backspace\\n\t&#x232B;\\n# \\u238b\\nsnippet esc\\n\t&#x238B;\\n# Generic Doctype\\nsnippet doctype HTML 4.01 Strict\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\nsnippet doctype HTML 4.01 Transitional\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\nsnippet doctype HTML 5\\n\t<!DOCTYPE HTML>\\nsnippet doctype XHTML 1.0 Frameset\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Strict\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Transitional\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\nsnippet doctype XHTML 1.1\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# HTML Doctype 4.01 Strict\\nsnippet docts\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\n# HTML Doctype 4.01 Transitional\\nsnippet doct\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\n# HTML Doctype 5\\nsnippet doct5\\n\t<!DOCTYPE html>\\n# XHTML Doctype 1.0 Frameset\\nsnippet docxf\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\\n# XHTML Doctype 1.0 Strict\\nsnippet docxs\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\n# XHTML Doctype 1.0 Transitional\\nsnippet docxt\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\n# XHTML Doctype 1.1\\nsnippet docx\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# html5shiv\\nsnippet html5shiv\\n\t<!--[if lte IE 8]>\\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\"><\\/script>\\n\t<![endif]-->\\nsnippet html5printshiv\\n\t<!--[if lte IE 8]>\\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\"><\\/script>\\n\t<![endif]-->\\n# Attributes\\nsnippet attr\\n\t${1:attribute}=\"${2:property}\"\\nsnippet attr+\\n\t${1:attribute}=\"${2:property}\" attr+${3}\\nsnippet .\\n\tclass=\"${1}\"${2}\\nsnippet #\\n\tid=\"${1}\"${2}\\nsnippet alt\\n\talt=\"${1}\"${2}\\nsnippet charset\\n\tcharset=\"${1:utf-8}\"${2}\\nsnippet data\\n\tdata-${1}=\"${2:$1}\"${3}\\nsnippet for\\n\tfor=\"${1}\"${2}\\nsnippet height\\n\theight=\"${1}\"${2}\\nsnippet href\\n\thref=\"${1:#}\"${2}\\nsnippet lang\\n\tlang=\"${1:en}\"${2}\\nsnippet media\\n\tmedia=\"${1}\"${2}\\nsnippet name\\n\tname=\"${1}\"${2}\\nsnippet rel\\n\trel=\"${1}\"${2}\\nsnippet scope\\n\tscope=\"${1:row}\"${2}\\nsnippet src\\n\tsrc=\"${1}\"${2}\\nsnippet title=\\n\ttitle=\"${1}\"${2}\\nsnippet type\\n\ttype=\"${1}\"${2}\\nsnippet value\\n\tvalue=\"${1}\"${2}\\nsnippet width\\n\twidth=\"${1}\"${2}\\n# Elements\\nsnippet a\\n\t<a href=\"${1:#}\">${2:$1}</a>\\nsnippet a.\\n\t<a class=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a#\\n\t<a id=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a:ext\\n\t<a href=\"http://${1:example.com}\">${2:$1}</a>\\nsnippet a:mail\\n\t<a href=\"mailto:${1:joe@example.com}?subject=${2:feedback}\">${3:email me}</a>\\nsnippet abbr\\n\t<abbr title=\"${1}\">${2}</abbr>\\nsnippet address\\n\t<address>\\n\t\t${1}\\n\t</address>\\nsnippet area\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\nsnippet area+\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\n\tarea+${5}\\nsnippet area:c\\n\t<area shape=\"circle\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:d\\n\t<area shape=\"default\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:p\\n\t<area shape=\"poly\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:r\\n\t<area shape=\"rect\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet article\\n\t<article>\\n\t\t${1}\\n\t</article>\\nsnippet article.\\n\t<article class=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet article#\\n\t<article id=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet aside\\n\t<aside>\\n\t\t${1}\\n\t</aside>\\nsnippet aside.\\n\t<aside class=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet aside#\\n\t<aside id=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet audio\\n\t<audio src=\"${1}>${2}</audio>\\nsnippet b\\n\t<b>${1}</b>\\nsnippet base\\n\t<base href=\"${1}\" target=\"${2}\" />\\nsnippet bdi\\n\t<bdi>${1}</bdo>\\nsnippet bdo\\n\t<bdo dir=\"${1}\">${2}</bdo>\\nsnippet bdo:l\\n\t<bdo dir=\"ltr\">${1}</bdo>\\nsnippet bdo:r\\n\t<bdo dir=\"rtl\">${1}</bdo>\\nsnippet blockquote\\n\t<blockquote>\\n\t\t${1}\\n\t</blockquote>\\nsnippet body\\n\t<body>\\n\t\t${1}\\n\t</body>\\nsnippet br\\n\t<br />${1}\\nsnippet button\\n\t<button type=\"${1:submit}\">${2}</button>\\nsnippet button.\\n\t<button class=\"${1:button}\" type=\"${2:submit}\">${3}</button>\\nsnippet button#\\n\t<button id=\"${1}\" type=\"${2:submit}\">${3}</button>\\nsnippet button:s\\n\t<button type=\"submit\">${1}</button>\\nsnippet button:r\\n\t<button type=\"reset\">${1}</button>\\nsnippet canvas\\n\t<canvas>\\n\t\t${1}\\n\t</canvas>\\nsnippet caption\\n\t<caption>${1}</caption>\\nsnippet cite\\n\t<cite>${1}</cite>\\nsnippet code\\n\t<code>${1}</code>\\nsnippet col\\n\t<col />${1}\\nsnippet col+\\n\t<col />\\n\tcol+${1}\\nsnippet colgroup\\n\t<colgroup>\\n\t\t${1}\\n\t</colgroup>\\nsnippet colgroup+\\n\t<colgroup>\\n\t\t<col />\\n\t\tcol+${1}\\n\t</colgroup>\\nsnippet command\\n\t<command type=\"command\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:c\\n\t<command type=\"checkbox\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:r\\n\t<command type=\"radio\" radiogroup=\"${1}\" label=\"${2}\" icon=\"${3}\" />\\nsnippet datagrid\\n\t<datagrid>\\n\t\t${1}\\n\t</datagrid>\\nsnippet datalist\\n\t<datalist>\\n\t\t${1}\\n\t</datalist>\\nsnippet datatemplate\\n\t<datatemplate>\\n\t\t${1}\\n\t</datatemplate>\\nsnippet dd\\n\t<dd>${1}</dd>\\nsnippet dd.\\n\t<dd class=\"${1}\">${2}</dd>\\nsnippet dd#\\n\t<dd id=\"${1}\">${2}</dd>\\nsnippet del\\n\t<del>${1}</del>\\nsnippet details\\n\t<details>${1}</details>\\nsnippet dfn\\n\t<dfn>${1}</dfn>\\nsnippet dialog\\n\t<dialog>\\n\t\t${1}\\n\t</dialog>\\nsnippet div\\n\t<div>\\n\t\t${1}\\n\t</div>\\nsnippet div.\\n\t<div class=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet div#\\n\t<div id=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet dl\\n\t<dl>\\n\t\t${1}\\n\t</dl>\\nsnippet dl.\\n\t<dl class=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl#\\n\t<dl id=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl+\\n\t<dl>\\n\t\t<dt>${1}</dt>\\n\t\t<dd>${2}</dd>\\n\t\tdt+${3}\\n\t</dl>\\nsnippet dt\\n\t<dt>${1}</dt>\\nsnippet dt.\\n\t<dt class=\"${1}\">${2}</dt>\\nsnippet dt#\\n\t<dt id=\"${1}\">${2}</dt>\\nsnippet dt+\\n\t<dt>${1}</dt>\\n\t<dd>${2}</dd>\\n\tdt+${3}\\nsnippet em\\n\t<em>${1}</em>\\nsnippet embed\\n\t<embed src=${1} type=\"${2} />\\nsnippet fieldset\\n\t<fieldset>\\n\t\t${1}\\n\t</fieldset>\\nsnippet fieldset.\\n\t<fieldset class=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset#\\n\t<fieldset id=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset+\\n\t<fieldset>\\n\t\t<legend><span>${1}</span></legend>\\n\t\t${2}\\n\t</fieldset>\\n\tfieldset+${3}\\nsnippet figcaption\\n\t<figcaption>${1}</figcaption>\\nsnippet figure\\n\t<figure>${1}</figure>\\nsnippet footer\\n\t<footer>\\n\t\t${1}\\n\t</footer>\\nsnippet footer.\\n\t<footer class=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet footer#\\n\t<footer id=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet form\\n\t<form action=\"${1}\" method=\"${2:get}\" accept-charset=\"utf-8\">\\n\t\t${3}\\n\t</form>\\nsnippet form.\\n\t<form class=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet form#\\n\t<form id=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet h1\\n\t<h1>${1}</h1>\\nsnippet h1.\\n\t<h1 class=\"${1}\">${2}</h1>\\nsnippet h1#\\n\t<h1 id=\"${1}\">${2}</h1>\\nsnippet h2\\n\t<h2>${1}</h2>\\nsnippet h2.\\n\t<h2 class=\"${1}\">${2}</h2>\\nsnippet h2#\\n\t<h2 id=\"${1}\">${2}</h2>\\nsnippet h3\\n\t<h3>${1}</h3>\\nsnippet h3.\\n\t<h3 class=\"${1}\">${2}</h3>\\nsnippet h3#\\n\t<h3 id=\"${1}\">${2}</h3>\\nsnippet h4\\n\t<h4>${1}</h4>\\nsnippet h4.\\n\t<h4 class=\"${1}\">${2}</h4>\\nsnippet h4#\\n\t<h4 id=\"${1}\">${2}</h4>\\nsnippet h5\\n\t<h5>${1}</h5>\\nsnippet h5.\\n\t<h5 class=\"${1}\">${2}</h5>\\nsnippet h5#\\n\t<h5 id=\"${1}\">${2}</h5>\\nsnippet h6\\n\t<h6>${1}</h6>\\nsnippet h6.\\n\t<h6 class=\"${1}\">${2}</h6>\\nsnippet h6#\\n\t<h6 id=\"${1}\">${2}</h6>\\nsnippet head\\n\t<head>\\n\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\\n\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t${2}\\n\t</head>\\nsnippet header\\n\t<header>\\n\t\t${1}\\n\t</header>\\nsnippet header.\\n\t<header class=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet header#\\n\t<header id=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet hgroup\\n\t<hgroup>\\n\t\t${1}\\n\t</hgroup>\\nsnippet hgroup.\\n\t<hgroup class=\"${1}>\\n\t\t${2}\\n\t</hgroup>\\nsnippet hr\\n\t<hr />${1}\\nsnippet html\\n\t<html>\\n\t${1}\\n\t</html>\\nsnippet xhtml\\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\\n\t${1}\\n\t</html>\\nsnippet html5\\n\t<!DOCTYPE html>\\n\t<html>\\n\t\t<head>\\n\t\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\t\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t\t${2:meta}\\n\t\t</head>\\n\t\t<body>\\n\t\t\t${3:body}\\n\t\t</body>\\n\t</html>\\nsnippet xhtml5\\n\t<!DOCTYPE html>\\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\\n\t\t<head>\\n\t\t\t<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=utf-8\" />\\n\t\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t\t${2:meta}\\n\t\t</head>\\n\t\t<body>\\n\t\t\t${3:body}\\n\t\t</body>\\n\t</html>\\nsnippet i\\n\t<i>${1}</i>\\nsnippet iframe\\n\t<iframe src=\"${1}\" frameborder=\"0\"></iframe>${2}\\nsnippet iframe.\\n\t<iframe class=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet iframe#\\n\t<iframe id=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet img\\n\t<img src=\"${1}\" alt=\"${2}\" />${3}\\nsnippet img.\\n\t<img class=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet img#\\n\t<img id=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet input\\n\t<input type=\"${1:text/submit/hidden/button/image}\" name=\"${2}\" id=\"${3:$2}\" value=\"${4}\" />${5}\\nsnippet input.\\n\t<input class=\"${1}\" type=\"${2:text/submit/hidden/button/image}\" name=\"${3}\" id=\"${4:$3}\" value=\"${5}\" />${6}\\nsnippet input:text\\n\t<input type=\"text\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:submit\\n\t<input type=\"submit\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:hidden\\n\t<input type=\"hidden\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:button\\n\t<input type=\"button\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:image\\n\t<input type=\"image\" name=\"${1}\" id=\"${2:$1}\" src=\"${3}\" alt=\"${4}\" />${5}\\nsnippet input:checkbox\\n\t<input type=\"checkbox\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:radio\\n\t<input type=\"radio\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:color\\n\t<input type=\"color\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:date\\n\t<input type=\"date\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime\\n\t<input type=\"datetime\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime-local\\n\t<input type=\"datetime-local\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:email\\n\t<input type=\"email\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:file\\n\t<input type=\"file\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:month\\n\t<input type=\"month\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:number\\n\t<input type=\"number\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:password\\n\t<input type=\"password\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:range\\n\t<input type=\"range\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:reset\\n\t<input type=\"reset\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:search\\n\t<input type=\"search\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:time\\n\t<input type=\"time\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:url\\n\t<input type=\"url\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:week\\n\t<input type=\"week\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet ins\\n\t<ins>${1}</ins>\\nsnippet kbd\\n\t<kbd>${1}</kbd>\\nsnippet keygen\\n\t<keygen>${1}</keygen>\\nsnippet label\\n\t<label for=\"${2:$1}\">${1}</label>\\nsnippet label:i\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<input type=\"${3:text/submit/hidden/button}\" name=\"${4:$2}\" id=\"${5:$2}\" value=\"${6}\" />${7}\\nsnippet label:s\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<select name=\"${3:$2}\" id=\"${4:$2}\">\\n\t\t<option value=\"${5}\">${6:$5}</option>\\n\t</select>\\nsnippet legend\\n\t<legend>${1}</legend>\\nsnippet legend+\\n\t<legend><span>${1}</span></legend>\\nsnippet li\\n\t<li>${1}</li>\\nsnippet li.\\n\t<li class=\"${1}\">${2}</li>\\nsnippet li+\\n\t<li>${1}</li>\\n\tli+${2}\\nsnippet lia\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\nsnippet lia+\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\n\tlia+${3}\\nsnippet link\\n\t<link rel=\"${1}\" href=\"${2}\" title=\"${3}\" type=\"${4}\" />${5}\\nsnippet link:atom\\n\t<link rel=\"alternate\" href=\"${1:atom.xml}\" title=\"Atom\" type=\"application/atom+xml\" />${2}\\nsnippet link:css\\n\t<link rel=\"stylesheet\" href=\"${2:style.css}\" type=\"text/css\" media=\"${3:all}\" />${4}\\nsnippet link:favicon\\n\t<link rel=\"shortcut icon\" href=\"${1:favicon.ico}\" type=\"image/x-icon\" />${2}\\nsnippet link:rss\\n\t<link rel=\"alternate\" href=\"${1:rss.xml}\" title=\"RSS\" type=\"application/atom+xml\" />${2}\\nsnippet link:touch\\n\t<link rel=\"apple-touch-icon\" href=\"${1:favicon.png}\" />${2}\\nsnippet map\\n\t<map name=\"${1}\">\\n\t\t${2}\\n\t</map>\\nsnippet map.\\n\t<map class=\"${1}\" name=\"${2}\">\\n\t\t${3}\\n\t</map>\\nsnippet map#\\n\t<map name=\"${1}\" id=\"${2:$1}>\\n\t\t${3}\\n\t</map>\\nsnippet map+\\n\t<map name=\"${1}\">\\n\t\t<area shape=\"${2}\" coords=\"${3}\" href=\"${4}\" alt=\"${5}\" />${6}\\n\t</map>${7}\\nsnippet mark\\n\t<mark>${1}</mark>\\nsnippet menu\\n\t<menu>\\n\t\t${1}\\n\t</menu>\\nsnippet menu:c\\n\t<menu type=\"context\">\\n\t\t${1}\\n\t</menu>\\nsnippet menu:t\\n\t<menu type=\"toolbar\">\\n\t\t${1}\\n\t</menu>\\nsnippet meta\\n\t<meta http-equiv=\"${1}\" content=\"${2}\" />${3}\\nsnippet meta:compat\\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=${1:7,8,edge}\" />${3}\\nsnippet meta:refresh\\n\t<meta http-equiv=\"refresh\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meta:utf\\n\t<meta http-equiv=\"content-type\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meter\\n\t<meter>${1}</meter>\\nsnippet nav\\n\t<nav>\\n\t\t${1}\\n\t</nav>\\nsnippet nav.\\n\t<nav class=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet nav#\\n\t<nav id=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet noscript\\n\t<noscript>\\n\t\t${1}\\n\t</noscript>\\nsnippet object\\n\t<object data=\"${1}\" type=\"${2}\">\\n\t\t${3}\\n\t</object>${4}\\n# Embed QT Movie\\nsnippet movie\\n\t<object width=\"$2\" height=\"$3\" classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\"\\n\t codebase=\"http://www.apple.com/qtactivex/qtplugin.cab\">\\n\t\t<param name=\"src\" value=\"$1\" />\\n\t\t<param name=\"controller\" value=\"$4\" />\\n\t\t<param name=\"autoplay\" value=\"$5\" />\\n\t\t<embed src=\"${1:movie.mov}\"\\n\t\t\twidth=\"${2:320}\" height=\"${3:240}\"\\n\t\t\tcontroller=\"${4:true}\" autoplay=\"${5:true}\"\\n\t\t\tscale=\"tofit\" cache=\"true\"\\n\t\t\tpluginspage=\"http://www.apple.com/quicktime/download/\" />\\n\t</object>${6}\\nsnippet ol\\n\t<ol>\\n\t\t${1}\\n\t</ol>\\nsnippet ol.\\n\t<ol class=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol#\\n\t<ol id=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol+\\n\t<ol>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ol>\\nsnippet opt\\n\t<option value=\"${1}\">${2:$1}</option>\\nsnippet opt+\\n\t<option value=\"${1}\">${2:$1}</option>\\n\topt+${3}\\nsnippet optt\\n\t<option>${1}</option>\\nsnippet optgroup\\n\t<optgroup>\\n\t\t<option value=\"${1}\">${2:$1}</option>\\n\t\topt+${3}\\n\t</optgroup>\\nsnippet output\\n\t<output>${1}</output>\\nsnippet p\\n\t<p>${1}</p>\\nsnippet param\\n\t<param name=\"${1}\" value=\"${2}\" />${3}\\nsnippet pre\\n\t<pre>\\n\t\t${1}\\n\t</pre>\\nsnippet progress\\n\t<progress>${1}</progress>\\nsnippet q\\n\t<q>${1}</q>\\nsnippet rp\\n\t<rp>${1}</rp>\\nsnippet rt\\n\t<rt>${1}</rt>\\nsnippet ruby\\n\t<ruby>\\n\t\t<rp><rt>${1}</rt></rp>\\n\t</ruby>\\nsnippet s\\n\t<s>${1}</s>\\nsnippet samp\\n\t<samp>\\n\t\t${1}\\n\t</samp>\\nsnippet script\\n\t<script type=\"text/javascript\" charset=\"utf-8\">\\n\t\t${1}\\n\t<\\/script>\\nsnippet scriptsrc\\n\t<script src=\"${1}.js\" type=\"text/javascript\" charset=\"utf-8\"><\\/script>\\nsnippet newscript\\n\t<script type=\"application/javascript\" charset=\"utf-8\">\\n\t\t${1}\\n\t<\\/script>\\nsnippet newscriptsrc\\n\t<script src=\"${1}.js\" type=\"application/javascript\" charset=\"utf-8\"><\\/script>\\nsnippet section\\n\t<section>\\n\t\t${1}\\n\t</section>\\nsnippet section.\\n\t<section class=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet section#\\n\t<section id=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet select\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t${3}\\n\t</select>\\nsnippet select.\\n\t<select name=\"${1}\" id=\"${2:$1}\" class=\"${3}>\\n\t\t${4}\\n\t</select>\\nsnippet select+\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t<option value=\"${3}\">${4:$3}</option>\\n\t\topt+${5}\\n\t</select>\\nsnippet small\\n\t<small>${1}</small>\\nsnippet source\\n\t<source src=\"${1}\" type=\"${2}\" media=\"${3}\" />\\nsnippet span\\n\t<span>${1}</span>\\nsnippet strong\\n\t<strong>${1}</strong>\\nsnippet style\\n\t<style type=\"text/css\" media=\"${1:all}\">\\n\t\t${2}\\n\t</style>\\nsnippet sub\\n\t<sub>${1}</sub>\\nsnippet summary\\n\t<summary>\\n\t\t${1}\\n\t</summary>\\nsnippet sup\\n\t<sup>${1}</sup>\\nsnippet table\\n\t<table border=\"${1:0}\">\\n\t\t${2}\\n\t</table>\\nsnippet table.\\n\t<table class=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet table#\\n\t<table id=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet tbody\\n\t<tbody>\\n\t\t${1}\\n\t</tbody>\\nsnippet td\\n\t<td>${1}</td>\\nsnippet td.\\n\t<td class=\"${1}\">${2}</td>\\nsnippet td#\\n\t<td id=\"${1}\">${2}</td>\\nsnippet td+\\n\t<td>${1}</td>\\n\ttd+${2}\\nsnippet textarea\\n\t<textarea name=\"${1}\" id=${2:$1} rows=\"${3:8}\" cols=\"${4:40}\">${5}</textarea>${6}\\nsnippet tfoot\\n\t<tfoot>\\n\t\t${1}\\n\t</tfoot>\\nsnippet th\\n\t<th>${1}</th>\\nsnippet th.\\n\t<th class=\"${1}\">${2}</th>\\nsnippet th#\\n\t<th id=\"${1}\">${2}</th>\\nsnippet th+\\n\t<th>${1}</th>\\n\tth+${2}\\nsnippet thead\\n\t<thead>\\n\t\t${1}\\n\t</thead>\\nsnippet time\\n\t<time datetime=\"${1}\" pubdate=\"${2:$1}>${3:$1}</time>\\nsnippet title\\n\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\nsnippet tr\\n\t<tr>\\n\t\t${1}\\n\t</tr>\\nsnippet tr+\\n\t<tr>\\n\t\t<td>${1}</td>\\n\t\ttd+${2}\\n\t</tr>\\nsnippet track\\n\t<track src=\"${1}\" srclang=\"${2}\" label=\"${3}\" default=\"${4:default}>${5}</track>${6}\\nsnippet ul\\n\t<ul>\\n\t\t${1}\\n\t</ul>\\nsnippet ul.\\n\t<ul class=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul#\\n\t<ul id=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul+\\n\t<ul>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ul>\\nsnippet var\\n\t<var>${1}</var>\\nsnippet video\\n\t<video src=\"${1} height=\"${2}\" width=\"${3}\" preload=\"${5:none}\" autoplay=\"${6:autoplay}>${7}</video>${8}\\nsnippet wbr\\n\t<wbr />${1}\\n',t.scope=\"html\"});                (function() {\n                    window.require([\"ace/snippets/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/html_elixir.js",
    "content": "define(\"ace/snippets/html_elixir\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"html_elixir\"});                (function() {\n                    window.require([\"ace/snippets/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/html_ruby.js",
    "content": "define(\"ace/snippets/html_ruby\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"html_ruby\"});                (function() {\n                    window.require([\"ace/snippets/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/ini.js",
    "content": "define(\"ace/snippets/ini\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ini\"});                (function() {\n                    window.require([\"ace/snippets/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/io.js",
    "content": "define(\"ace/snippets/io\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippets=[{content:\"assertEquals(${1:expected}, ${2:expr})\",name:\"assertEquals\",scope:\"io\",tabTrigger:\"ae\"},{content:\"${1:${2:newValue} := ${3:Object} }clone do(\\n\t$0\\n)\",name:\"clone do\",scope:\"io\",tabTrigger:\"cdo\"},{content:'docSlot(\"${1:slotName}\", \"${2:documentation}\")',name:\"docSlot\",scope:\"io\",tabTrigger:\"ds\"},{content:\"(${1:header,}\\n\t${2:body}\\n)$0\",keyEquivalent:\"@(\",name:\"Indented Bracketed Line\",scope:\"io\",tabTrigger:\"(\"},{content:\"\\n\t$0\\n\",keyEquivalent:\"\\r\",name:\"Special: Return Inside Empty Parenthesis\",scope:\"io meta.empty-parenthesis.io, io meta.comma-parenthesis.io\"},{content:\"${1:methodName} := method(${2:args,}\\n\t$0\\n)\",name:\"method\",scope:\"io\",tabTrigger:\"m\"},{content:'newSlot(\"${1:slotName}\", ${2:defaultValue}, \"${3:docString}\")$0',name:\"newSlot\",scope:\"io\",tabTrigger:\"ns\"},{content:\"${1:name} := Object clone do(\\n\t$0\\n)\",name:\"Object clone do\",scope:\"io\",tabTrigger:\"ocdo\"},{content:\"test${1:SomeFeature} := method(\\n\t$0\\n)\",name:\"testMethod\",scope:\"io\",tabTrigger:\"ts\"},{content:\"${1:Something}Test := ${2:UnitTest} clone do(\\n\t$0\\n)\",name:\"UnitTest\",scope:\"io\",tabTrigger:\"ut\"}],t.scope=\"io\"});                (function() {\n                    window.require([\"ace/snippets/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/jack.js",
    "content": "define(\"ace/snippets/jack\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"jack\"});                (function() {\n                    window.require([\"ace/snippets/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/jade.js",
    "content": "define(\"ace/snippets/jade\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"jade\"});                (function() {\n                    window.require([\"ace/snippets/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/java.js",
    "content": "define(\"ace/snippets/java\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='## Access Modifiers\\nsnippet po\\n\tprotected\\nsnippet pu\\n\tpublic\\nsnippet pr\\n\tprivate\\n##\\n## Annotations\\nsnippet before\\n\t@Before\\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\\nsnippet mm\\n\t@ManyToMany\\n\t${1}\\nsnippet mo\\n\t@ManyToOne\\n\t${1}\\nsnippet om\\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\t${2}\\nsnippet oo\\n\t@OneToOne\\n\t${1}\\n##\\n## Basic Java packages and import\\nsnippet im\\n\timport\\nsnippet j.b\\n\tjava.beans.\\nsnippet j.i\\n\tjava.io.\\nsnippet j.m\\n\tjava.math.\\nsnippet j.n\\n\tjava.net.\\nsnippet j.u\\n\tjava.util.\\n##\\n## Class\\nsnippet cl\\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\\nsnippet in\\n\tinterface ${1:`Filename(\"\", \"untitled\")`} ${2:extends Parent}${3}\\nsnippet tc\\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n##\\n## Class Enhancements\\nsnippet ext\\n\textends \\nsnippet imp\\n\timplements\\n##\\n## Comments\\nsnippet /*\\n\t/*\\n\t * ${1}\\n\t */\\n##\\n## Constants\\nsnippet co\\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\\nsnippet cos\\n\tstatic public final String ${1:var} = \"${2}\";${3}\\n##\\n## Control Statements\\nsnippet case\\n\tcase ${1}:\\n\t\t${2}\\nsnippet def\\n\tdefault:\\n\t\t${2}\\nsnippet el\\n\telse\\nsnippet elif\\n\telse if (${1}) ${2}\\nsnippet if\\n\tif (${1}) ${2}\\nsnippet sw\\n\tswitch (${1}) {\\n\t\t${2}\\n\t}\\n##\\n## Create a Method\\nsnippet m\\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n##\\n## Create a Variable\\nsnippet v\\n\t${1:String} ${2:var}${3: = null}${4};${5}\\n##\\n## Enhancements to Methods, variables, classes, etc.\\nsnippet ab\\n\tabstract\\nsnippet fi\\n\tfinal\\nsnippet st\\n\tstatic\\nsnippet sy\\n\tsynchronized\\n##\\n## Error Methods\\nsnippet err\\n\tSystem.err.print(\"${1:Message}\");\\nsnippet errf\\n\tSystem.err.printf(\"${1:Message}\", ${2:exception});\\nsnippet errln\\n\tSystem.err.println(\"${1:Message}\");\\n##\\n## Exception Handling\\nsnippet as\\n\tassert ${1:test} : \"${2:Failure message}\";${3}\\nsnippet ca\\n\tcatch(${1:Exception} ${2:e}) ${3}\\nsnippet thr\\n\tthrow\\nsnippet ths\\n\tthrows\\nsnippet try\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t}\\nsnippet tryf\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t} finally {\\n\t}\\n##\\n## Find Methods\\nsnippet findall\\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\nsnippet findbyid\\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n##\\n## Javadocs\\nsnippet /**\\n\t/**\\n\t * ${1}\\n\t */\\nsnippet @au\\n\t@author `system(\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\":\\\\\" -f5 | cut -d \\\\\",\\\\\" -f1\")`\\nsnippet @br\\n\t@brief ${1:Description}\\nsnippet @fi\\n\t@file ${1:`Filename()`}.java\\nsnippet @pa\\n\t@param ${1:param}\\nsnippet @re\\n\t@return ${1:param}\\n##\\n## Logger Methods\\nsnippet debug\\n\tLogger.debug(${1:param});${2}\\nsnippet error\\n\tLogger.error(${1:param});${2}\\nsnippet info\\n\tLogger.info(${1:param});${2}\\nsnippet warn\\n\tLogger.warn(${1:param});${2}\\n##\\n## Loops\\nsnippet enfor\\n\tfor (${1} : ${2}) ${3}\\nsnippet for\\n\tfor (${1}; ${2}; ${3}) ${4}\\nsnippet wh\\n\twhile (${1}) ${2}\\n##\\n## Main method\\nsnippet main\\n\tpublic static void main (String[] args) {\\n\t\t${1:/* code */}\\n\t}\\n##\\n## Print Methods\\nsnippet print\\n\tSystem.out.print(\"${1:Message}\");\\nsnippet printf\\n\tSystem.out.printf(\"${1:Message}\", ${2:args});\\nsnippet println\\n\tSystem.out.println(${1});\\n##\\n## Render Methods\\nsnippet ren\\n\trender(${1:param});${2}\\nsnippet rena\\n\trenderArgs.put(\"${1}\", ${2});${3}\\nsnippet renb\\n\trenderBinary(${1:param});${2}\\nsnippet renj\\n\trenderJSON(${1:param});${2}\\nsnippet renx\\n\trenderXml(${1:param});${2}\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\t${1:public} void set${3:}(${2:String} ${4:}){\\n\t\tthis.$4 = $4;\\n\t}\\nsnippet get\\n\t${1:public} ${2:String} get${3:}(){\\n\t\treturn this.${4:};\\n\t}\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\treturn\\nsnippet br\\n\tbreak;\\n##\\n## Test Methods\\nsnippet t\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\nsnippet test\\n\t@Test\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\n##\\n## Utils\\nsnippet Sc\\n\tScanner\\n##\\n## Miscellaneous\\nsnippet action\\n\tpublic static void ${1:index}(${2:args}) { ${3} }\\nsnippet rnf\\n\tnotFound(${1:param});${2}\\nsnippet rnfin\\n\tnotFoundIfNull(${1:param});${2}\\nsnippet rr\\n\tredirect(${1:param});${2}\\nsnippet ru\\n\tunauthorized(${1:param});${2}\\nsnippet unless\\n\t(unless=${1:param});${2}\\n',t.scope=\"java\"});                (function() {\n                    window.require([\"ace/snippets/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/javascript.js",
    "content": "define(\"ace/snippets/javascript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Prototype\\nsnippet proto\\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\\n\t\t${4:// body...}\\n\t};\\n# Function\\nsnippet fun\\n\tfunction ${1?:function_name}(${2:argument}) {\\n\t\t${3:// body...}\\n\t}\\n# Anonymous Function\\nregex /((=)\\\\s*|(:)\\\\s*|(\\\\()|\\\\b)/f/(\\\\))?/\\nsnippet f\\n\tfunction${M1?: ${1:functionName}}($2) {\\n\t\t${0:$TM_SELECTED_TEXT}\\n\t}${M2?;}${M3?,}${M4?)}\\n# Immediate function\\ntrigger \\\\(?f\\\\(\\nendTrigger \\\\)?\\nsnippet f(\\n\t(function(${1}) {\\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\\n\t}(${1}));\\n# if\\nsnippet if\\n\tif (${1:true}) {\\n\t\t${0}\\n\t}\\n# if ... else\\nsnippet ife\\n\tif (${1:true}) {\\n\t\t${2}\\n\t} else {\\n\t\t${0}\\n\t}\\n# tertiary conditional\\nsnippet ter\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\n# switch\\nsnippet switch\\n\tswitch (${1:expression}) {\\n\t\tcase \\'${3:case}\\':\\n\t\t\t${4:// code}\\n\t\t\tbreak;\\n\t\t${5}\\n\t\tdefault:\\n\t\t\t${2:// code}\\n\t}\\n# case\\nsnippet case\\n\tcase \\'${1:case}\\':\\n\t\t${2:// code}\\n\t\tbreak;\\n\t${3}\\n\\n# while (...) {...}\\nsnippet wh\\n\twhile (${1:/* condition */}) {\\n\t\t${0:/* code */}\\n\t}\\n# try\\nsnippet try\\n\ttry {\\n\t\t${0:/* code */}\\n\t} catch (e) {}\\n# do...while\\nsnippet do\\n\tdo {\\n\t\t${2:/* code */}\\n\t} while (${1:/* condition */});\\n# Object Method\\nsnippet :f\\nregex /([,{[])|^\\\\s*/:f/\\n\t${1:method_name}: function(${2:attribute}) {\\n\t\t${0}\\n\t}${3:,}\\n# setTimeout function\\nsnippet setTimeout\\nregex /\\\\b/st|timeout|setTimeo?u?t?/\\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\\n# Get Elements\\nsnippet gett\\n\tgetElementsBy${1:TagName}(\\'${2}\\')${3}\\n# Get Element\\nsnippet get\\n\tgetElementBy${1:Id}(\\'${2}\\')${3}\\n# console.log (Firebug)\\nsnippet cl\\n\tconsole.log(${1});\\n# return\\nsnippet ret\\n\treturn ${1:result}\\n# for (property in object ) { ... }\\nsnippet fori\\n\tfor (var ${1:prop} in ${2:Things}) {\\n\t\t${0:$2[$1]}\\n\t}\\n# hasOwnProperty\\nsnippet has\\n\thasOwnProperty(${1})\\n# docstring\\nsnippet /**\\n\t/**\\n\t * ${1:description}\\n\t *\\n\t */\\nsnippet @par\\nregex /^\\\\s*\\\\*\\\\s*/@(para?m?)?/\\n\t@param {${1:type}} ${2:name} ${3:description}\\nsnippet @ret\\n\t@return {${1:type}} ${2:description}\\n# JSON.parse\\nsnippet jsonp\\n\tJSON.parse(${1:jstr});\\n# JSON.stringify\\nsnippet jsons\\n\tJSON.stringify(${1:object});\\n# self-defining function\\nsnippet sdf\\n\tvar ${1:function_name} = function(${2:argument}) {\\n\t\t${3:// initial code ...}\\n\\n\t\t$1 = function($2) {\\n\t\t\t${4:// main code}\\n\t\t};\\n\t}\\n# singleton\\nsnippet sing\\n\tfunction ${1:Singleton} (${2:argument}) {\\n\t\t// the cached instance\\n\t\tvar instance;\\n\\n\t\t// rewrite the constructor\\n\t\t$1 = function $1($2) {\\n\t\t\treturn instance;\\n\t\t};\\n\t\t\\n\t\t// carry over the prototype properties\\n\t\t$1.prototype = this;\\n\\n\t\t// the instance\\n\t\tinstance = new $1();\\n\\n\t\t// reset the constructor pointer\\n\t\tinstance.constructor = $1;\\n\\n\t\t${3:// code ...}\\n\\n\t\treturn instance;\\n\t}\\n# class\\nsnippet class\\nregex /^\\\\s*/clas{0,2}/\\n\tvar ${1:class} = function(${20}) {\\n\t\t$40$0\\n\t};\\n\t\\n\t(function() {\\n\t\t${60:this.prop = \"\"}\\n\t}).call(${1:class}.prototype);\\n\t\\n\texports.${1:class} = ${1:class};\\n# \\nsnippet for-\\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\\n\t\t${0:${2:Things}[${1:i}];}\\n\t}\\n# for (...) {...}\\nsnippet for\\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\\n\t\t${3:$2[$1]}$0\\n\t}\\n# for (...) {...} (Improved Native For-Loop)\\nsnippet forr\\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\\n\t\t${3:$2[$1]}$0\\n\t}\\n\\n\\n#modules\\nsnippet def\\n\tdefine(function(require, exports, module) {\\n\t\"use strict\";\\n\tvar ${1/.*\\\\///} = require(\"${1}\");\\n\t\\n\t$TM_SELECTED_TEXT\\n\t});\\nsnippet req\\nguard ^\\\\s*\\n\tvar ${1/.*\\\\///} = require(\"${1}\");\\n\t$0\\nsnippet requ\\nguard ^\\\\s*\\n\tvar ${1/.*\\\\/(.)/\\\\u$1/} = require(\"${1}\").${1/.*\\\\/(.)/\\\\u$1/};\\n\t$0\\n',t.scope=\"javascript\"});                (function() {\n                    window.require([\"ace/snippets/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/json.js",
    "content": "define(\"ace/snippets/json\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"json\"});                (function() {\n                    window.require([\"ace/snippets/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/jsoniq.js",
    "content": "define(\"ace/snippets/jsoniq\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet for\\n\tfor $${1:item} in ${2:expr}\\nsnippet return\\n\treturn ${1:expr}\\nsnippet import\\n\timport module namespace ${1:ns} = \"${2:http://www.example.com/}\";\\nsnippet some\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet every\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet if\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\nsnippet switch\\n\tswitch(${1:\"foo\"})\\n\tcase ${2:\"foo\"}\\n\treturn ${3:true}\\n\tdefault return ${4:false}\\nsnippet try\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\nsnippet tumbling\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet sliding\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet let\\n\tlet $${1:varname} := ${2:expr}\\nsnippet group\\n\tgroup by $${1:varname} := ${2:expr}\\nsnippet order\\n\torder by ${1:expr} ${2:descending}\\nsnippet stable\\n\tstable order by ${1:expr}\\nsnippet count\\n\tcount $${1:varname}\\nsnippet ordered\\n\tordered { ${1:expr} }\\nsnippet unordered\\n\tunordered { ${1:expr} }\\nsnippet treat \\n\ttreat as ${1:expr}\\nsnippet castable\\n\tcastable as ${1:atomicType}\\nsnippet cast\\n\tcast as ${1:atomicType}\\nsnippet typeswitch\\n\ttypeswitch(${1:expr})\\n\tcase ${2:type}  return ${3:expr}\\n\tdefault return ${4:expr}\\nsnippet var\\n\tdeclare variable $${1:varname} := ${2:expr};\\nsnippet fn\\n\tdeclare function ${1:ns}:${2:name}(){\\n\t${3:expr}\\n\t};\\nsnippet module\\n\tmodule namespace ${1:ns} = \"${2:http://www.example.com}\";\\n',t.scope=\"jsoniq\"});                (function() {\n                    window.require([\"ace/snippets/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/jsp.js",
    "content": "define(\"ace/snippets/jsp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet @page\\n\t<%@page contentType=\"text/html\" pageEncoding=\"UTF-8\"%>\\nsnippet jstl\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\\nsnippet jstl:c\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\\nsnippet jstl:fn\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\\nsnippet cpath\\n\t${pageContext.request.contextPath}\\nsnippet cout\\n\t<c:out value=\"${1}\" default=\"${2}\" />\\nsnippet cset\\n\t<c:set var=\"${1}\" value=\"${2}\" />\\nsnippet cremove\\n\t<c:remove var=\"${1}\" scope=\"${2:page}\" />\\nsnippet ccatch\\n\t<c:catch var=\"${1}\" />\\nsnippet cif\\n\t<c:if test=\"${${1}}\">\\n\t\t${2}\\n\t</c:if>\\nsnippet cchoose\\n\t<c:choose>\\n\t\t${1}\\n\t</c:choose>\\nsnippet cwhen\\n\t<c:when test=\"${${1}}\">\\n\t\t${2}\\n\t</c:when>\\nsnippet cother\\n\t<c:otherwise>\\n\t\t${1}\\n\t</c:otherwise>\\nsnippet cfore\\n\t<c:forEach items=\"${${1}}\" var=\"${2}\" varStatus=\"${3}\">\\n\t\t${4:<c:out value=\"$2\" />}\\n\t</c:forEach>\\nsnippet cfort\\n\t<c:set var=\"${1}\">${2:item1,item2,item3}</c:set>\\n\t<c:forTokens var=\"${3}\" items=\"${$1}\" delims=\"${4:,}\">\\n\t\t${5:<c:out value=\"$3\" />}\\n\t</c:forTokens>\\nsnippet cparam\\n\t<c:param name=\"${1}\" value=\"${2}\" />\\nsnippet cparam+\\n\t<c:param name=\"${1}\" value=\"${2}\" />\\n\tcparam+${3}\\nsnippet cimport\\n\t<c:import url=\"${1}\" />\\nsnippet cimport+\\n\t<c:import url=\"${1}\">\\n\t\t<c:param name=\"${2}\" value=\"${3}\" />\\n\t\tcparam+${4}\\n\t</c:import>\\nsnippet curl\\n\t<c:url value=\"${1}\" var=\"${2}\" />\\n\t<a href=\"${$2}\">${3}</a>\\nsnippet curl+\\n\t<c:url value=\"${1}\" var=\"${2}\">\\n\t\t<c:param name=\"${4}\" value=\"${5}\" />\\n\t\tcparam+${6}\\n\t</c:url>\\n\t<a href=\"${$2}\">${3}</a>\\nsnippet credirect\\n\t<c:redirect url=\"${1}\" />\\nsnippet contains\\n\t${fn:contains(${1:string}, ${2:substr})}\\nsnippet contains:i\\n\t${fn:containsIgnoreCase(${1:string}, ${2:substr})}\\nsnippet endswith\\n\t${fn:endsWith(${1:string}, ${2:suffix})}\\nsnippet escape\\n\t${fn:escapeXml(${1:string})}\\nsnippet indexof\\n\t${fn:indexOf(${1:string}, ${2:substr})}\\nsnippet join\\n\t${fn:join(${1:collection}, ${2:delims})}\\nsnippet length\\n\t${fn:length(${1:collection_or_string})}\\nsnippet replace\\n\t${fn:replace(${1:string}, ${2:substr}, ${3:replace})}\\nsnippet split\\n\t${fn:split(${1:string}, ${2:delims})}\\nsnippet startswith\\n\t${fn:startsWith(${1:string}, ${2:prefix})}\\nsnippet substr\\n\t${fn:substring(${1:string}, ${2:begin}, ${3:end})}\\nsnippet substr:a\\n\t${fn:substringAfter(${1:string}, ${2:substr})}\\nsnippet substr:b\\n\t${fn:substringBefore(${1:string}, ${2:substr})}\\nsnippet lc\\n\t${fn:toLowerCase(${1:string})}\\nsnippet uc\\n\t${fn:toUpperCase(${1:string})}\\nsnippet trim\\n\t${fn:trim(${1:string})}\\n',t.scope=\"jsp\"});                (function() {\n                    window.require([\"ace/snippets/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/jssm.js",
    "content": "define(\"ace/snippets/jssm\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/jsx.js",
    "content": "define(\"ace/snippets/jsx\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"jsx\"});                (function() {\n                    window.require([\"ace/snippets/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/julia.js",
    "content": "define(\"ace/snippets/julia\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"julia\"});                (function() {\n                    window.require([\"ace/snippets/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/kotlin.js",
    "content": "define(\"ace/snippets/kotlin\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/latex.js",
    "content": "define(\"ace/snippets/latex\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"latex\"});                (function() {\n                    window.require([\"ace/snippets/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/less.js",
    "content": "define(\"ace/snippets/less\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"less\"});                (function() {\n                    window.require([\"ace/snippets/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/liquid.js",
    "content": "define(\"ace/snippets/liquid\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='\\n# liquid specific snippets\\nsnippet ife\\n\t{% if ${1:condition} %}\\n\\n\t{% else %}\\n\\n\t{% endif %}\\nsnippet if\\n\t{% if ${1:condition} %}\\n\t\t\\n\t{% endif %}\\nsnippet for\\n\t{% for in ${1:iterator} %}\\n\\n\t{% endfor %}\\nsnippet capture\\n\t{% capture ${1} %}\\n\\n\t{% endcapture %}\\nsnippet comment\\n\t{% comment %}\\n\t  ${1:comment}\\n\t{% endcomment %}\\n\\n# Include html.snippets\\n# Some useful Unicode entities\\n# Non-Breaking Space\\nsnippet nbs\\n\t&nbsp;\\n# \\u2190\\nsnippet left\\n\t&#x2190;\\n# \\u2192\\nsnippet right\\n\t&#x2192;\\n# \\u2191\\nsnippet up\\n\t&#x2191;\\n# \\u2193\\nsnippet down\\n\t&#x2193;\\n# \\u21a9\\nsnippet return\\n\t&#x21A9;\\n# \\u21e4\\nsnippet backtab\\n\t&#x21E4;\\n# \\u21e5\\nsnippet tab\\n\t&#x21E5;\\n# \\u21e7\\nsnippet shift\\n\t&#x21E7;\\n# \\u2303\\nsnippet ctrl\\n\t&#x2303;\\n# \\u2305\\nsnippet enter\\n\t&#x2305;\\n# \\u2318\\nsnippet cmd\\n\t&#x2318;\\n# \\u2325\\nsnippet option\\n\t&#x2325;\\n# \\u2326\\nsnippet delete\\n\t&#x2326;\\n# \\u232b\\nsnippet backspace\\n\t&#x232B;\\n# \\u238b\\nsnippet esc\\n\t&#x238B;\\n# Generic Doctype\\nsnippet doctype HTML 4.01 Strict\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\nsnippet doctype HTML 4.01 Transitional\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\nsnippet doctype HTML 5\\n\t<!DOCTYPE HTML>\\nsnippet doctype XHTML 1.0 Frameset\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Strict\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Transitional\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\nsnippet doctype XHTML 1.1\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# HTML Doctype 4.01 Strict\\nsnippet docts\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\n# HTML Doctype 4.01 Transitional\\nsnippet doct\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\n# HTML Doctype 5\\nsnippet doct5\\n\t<!DOCTYPE html>\\n# XHTML Doctype 1.0 Frameset\\nsnippet docxf\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\\n# XHTML Doctype 1.0 Strict\\nsnippet docxs\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\n# XHTML Doctype 1.0 Transitional\\nsnippet docxt\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\n# XHTML Doctype 1.1\\nsnippet docx\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# html5shiv\\nsnippet html5shiv\\n\t<!--[if lte IE 8]>\\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\"><\\/script>\\n\t<![endif]-->\\nsnippet html5printshiv\\n\t<!--[if lte IE 8]>\\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\"><\\/script>\\n\t<![endif]-->\\n# Attributes\\nsnippet attr\\n\t${1:attribute}=\"${2:property}\"\\nsnippet attr+\\n\t${1:attribute}=\"${2:property}\" attr+${3}\\nsnippet .\\n\tclass=\"${1}\"${2}\\nsnippet #\\n\tid=\"${1}\"${2}\\nsnippet alt\\n\talt=\"${1}\"${2}\\nsnippet charset\\n\tcharset=\"${1:utf-8}\"${2}\\nsnippet data\\n\tdata-${1}=\"${2:$1}\"${3}\\nsnippet for\\n\tfor=\"${1}\"${2}\\nsnippet height\\n\theight=\"${1}\"${2}\\nsnippet href\\n\thref=\"${1:#}\"${2}\\nsnippet lang\\n\tlang=\"${1:en}\"${2}\\nsnippet media\\n\tmedia=\"${1}\"${2}\\nsnippet name\\n\tname=\"${1}\"${2}\\nsnippet rel\\n\trel=\"${1}\"${2}\\nsnippet scope\\n\tscope=\"${1:row}\"${2}\\nsnippet src\\n\tsrc=\"${1}\"${2}\\nsnippet title=\\n\ttitle=\"${1}\"${2}\\nsnippet type\\n\ttype=\"${1}\"${2}\\nsnippet value\\n\tvalue=\"${1}\"${2}\\nsnippet width\\n\twidth=\"${1}\"${2}\\n# Elements\\nsnippet a\\n\t<a href=\"${1:#}\">${2:$1}</a>\\nsnippet a.\\n\t<a class=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a#\\n\t<a id=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a:ext\\n\t<a href=\"http://${1:example.com}\">${2:$1}</a>\\nsnippet a:mail\\n\t<a href=\"mailto:${1:joe@example.com}?subject=${2:feedback}\">${3:email me}</a>\\nsnippet abbr\\n\t<abbr title=\"${1}\">${2}</abbr>\\nsnippet address\\n\t<address>\\n\t\t${1}\\n\t</address>\\nsnippet area\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\nsnippet area+\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\n\tarea+${5}\\nsnippet area:c\\n\t<area shape=\"circle\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:d\\n\t<area shape=\"default\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:p\\n\t<area shape=\"poly\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:r\\n\t<area shape=\"rect\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet article\\n\t<article>\\n\t\t${1}\\n\t</article>\\nsnippet article.\\n\t<article class=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet article#\\n\t<article id=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet aside\\n\t<aside>\\n\t\t${1}\\n\t</aside>\\nsnippet aside.\\n\t<aside class=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet aside#\\n\t<aside id=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet audio\\n\t<audio src=\"${1}>${2}</audio>\\nsnippet b\\n\t<b>${1}</b>\\nsnippet base\\n\t<base href=\"${1}\" target=\"${2}\" />\\nsnippet bdi\\n\t<bdi>${1}</bdo>\\nsnippet bdo\\n\t<bdo dir=\"${1}\">${2}</bdo>\\nsnippet bdo:l\\n\t<bdo dir=\"ltr\">${1}</bdo>\\nsnippet bdo:r\\n\t<bdo dir=\"rtl\">${1}</bdo>\\nsnippet blockquote\\n\t<blockquote>\\n\t\t${1}\\n\t</blockquote>\\nsnippet body\\n\t<body>\\n\t\t${1}\\n\t</body>\\nsnippet br\\n\t<br />${1}\\nsnippet button\\n\t<button type=\"${1:submit}\">${2}</button>\\nsnippet button.\\n\t<button class=\"${1:button}\" type=\"${2:submit}\">${3}</button>\\nsnippet button#\\n\t<button id=\"${1}\" type=\"${2:submit}\">${3}</button>\\nsnippet button:s\\n\t<button type=\"submit\">${1}</button>\\nsnippet button:r\\n\t<button type=\"reset\">${1}</button>\\nsnippet canvas\\n\t<canvas>\\n\t\t${1}\\n\t</canvas>\\nsnippet caption\\n\t<caption>${1}</caption>\\nsnippet cite\\n\t<cite>${1}</cite>\\nsnippet code\\n\t<code>${1}</code>\\nsnippet col\\n\t<col />${1}\\nsnippet col+\\n\t<col />\\n\tcol+${1}\\nsnippet colgroup\\n\t<colgroup>\\n\t\t${1}\\n\t</colgroup>\\nsnippet colgroup+\\n\t<colgroup>\\n\t\t<col />\\n\t\tcol+${1}\\n\t</colgroup>\\nsnippet command\\n\t<command type=\"command\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:c\\n\t<command type=\"checkbox\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:r\\n\t<command type=\"radio\" radiogroup=\"${1}\" label=\"${2}\" icon=\"${3}\" />\\nsnippet datagrid\\n\t<datagrid>\\n\t\t${1}\\n\t</datagrid>\\nsnippet datalist\\n\t<datalist>\\n\t\t${1}\\n\t</datalist>\\nsnippet datatemplate\\n\t<datatemplate>\\n\t\t${1}\\n\t</datatemplate>\\nsnippet dd\\n\t<dd>${1}</dd>\\nsnippet dd.\\n\t<dd class=\"${1}\">${2}</dd>\\nsnippet dd#\\n\t<dd id=\"${1}\">${2}</dd>\\nsnippet del\\n\t<del>${1}</del>\\nsnippet details\\n\t<details>${1}</details>\\nsnippet dfn\\n\t<dfn>${1}</dfn>\\nsnippet dialog\\n\t<dialog>\\n\t\t${1}\\n\t</dialog>\\nsnippet div\\n\t<div>\\n\t\t${1}\\n\t</div>\\nsnippet div.\\n\t<div class=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet div#\\n\t<div id=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet dl\\n\t<dl>\\n\t\t${1}\\n\t</dl>\\nsnippet dl.\\n\t<dl class=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl#\\n\t<dl id=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl+\\n\t<dl>\\n\t\t<dt>${1}</dt>\\n\t\t<dd>${2}</dd>\\n\t\tdt+${3}\\n\t</dl>\\nsnippet dt\\n\t<dt>${1}</dt>\\nsnippet dt.\\n\t<dt class=\"${1}\">${2}</dt>\\nsnippet dt#\\n\t<dt id=\"${1}\">${2}</dt>\\nsnippet dt+\\n\t<dt>${1}</dt>\\n\t<dd>${2}</dd>\\n\tdt+${3}\\nsnippet em\\n\t<em>${1}</em>\\nsnippet embed\\n\t<embed src=${1} type=\"${2} />\\nsnippet fieldset\\n\t<fieldset>\\n\t\t${1}\\n\t</fieldset>\\nsnippet fieldset.\\n\t<fieldset class=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset#\\n\t<fieldset id=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset+\\n\t<fieldset>\\n\t\t<legend><span>${1}</span></legend>\\n\t\t${2}\\n\t</fieldset>\\n\tfieldset+${3}\\nsnippet figcaption\\n\t<figcaption>${1}</figcaption>\\nsnippet figure\\n\t<figure>${1}</figure>\\nsnippet footer\\n\t<footer>\\n\t\t${1}\\n\t</footer>\\nsnippet footer.\\n\t<footer class=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet footer#\\n\t<footer id=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet form\\n\t<form action=\"${1}\" method=\"${2:get}\" accept-charset=\"utf-8\">\\n\t\t${3}\\n\t</form>\\nsnippet form.\\n\t<form class=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet form#\\n\t<form id=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet h1\\n\t<h1>${1}</h1>\\nsnippet h1.\\n\t<h1 class=\"${1}\">${2}</h1>\\nsnippet h1#\\n\t<h1 id=\"${1}\">${2}</h1>\\nsnippet h2\\n\t<h2>${1}</h2>\\nsnippet h2.\\n\t<h2 class=\"${1}\">${2}</h2>\\nsnippet h2#\\n\t<h2 id=\"${1}\">${2}</h2>\\nsnippet h3\\n\t<h3>${1}</h3>\\nsnippet h3.\\n\t<h3 class=\"${1}\">${2}</h3>\\nsnippet h3#\\n\t<h3 id=\"${1}\">${2}</h3>\\nsnippet h4\\n\t<h4>${1}</h4>\\nsnippet h4.\\n\t<h4 class=\"${1}\">${2}</h4>\\nsnippet h4#\\n\t<h4 id=\"${1}\">${2}</h4>\\nsnippet h5\\n\t<h5>${1}</h5>\\nsnippet h5.\\n\t<h5 class=\"${1}\">${2}</h5>\\nsnippet h5#\\n\t<h5 id=\"${1}\">${2}</h5>\\nsnippet h6\\n\t<h6>${1}</h6>\\nsnippet h6.\\n\t<h6 class=\"${1}\">${2}</h6>\\nsnippet h6#\\n\t<h6 id=\"${1}\">${2}</h6>\\nsnippet head\\n\t<head>\\n\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\\n\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t${2}\\n\t</head>\\nsnippet header\\n\t<header>\\n\t\t${1}\\n\t</header>\\nsnippet header.\\n\t<header class=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet header#\\n\t<header id=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet hgroup\\n\t<hgroup>\\n\t\t${1}\\n\t</hgroup>\\nsnippet hgroup.\\n\t<hgroup class=\"${1}>\\n\t\t${2}\\n\t</hgroup>\\nsnippet hr\\n\t<hr />${1}\\nsnippet html\\n\t<html>\\n\t${1}\\n\t</html>\\nsnippet xhtml\\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\\n\t${1}\\n\t</html>\\nsnippet html5\\n\t<!DOCTYPE html>\\n\t<html>\\n\t\t<head>\\n\t\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\t\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t\t${2:meta}\\n\t\t</head>\\n\t\t<body>\\n\t\t\t${3:body}\\n\t\t</body>\\n\t</html>\\nsnippet xhtml5\\n\t<!DOCTYPE html>\\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\\n\t\t<head>\\n\t\t\t<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=utf-8\" />\\n\t\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t\t${2:meta}\\n\t\t</head>\\n\t\t<body>\\n\t\t\t${3:body}\\n\t\t</body>\\n\t</html>\\nsnippet i\\n\t<i>${1}</i>\\nsnippet iframe\\n\t<iframe src=\"${1}\" frameborder=\"0\"></iframe>${2}\\nsnippet iframe.\\n\t<iframe class=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet iframe#\\n\t<iframe id=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet img\\n\t<img src=\"${1}\" alt=\"${2}\" />${3}\\nsnippet img.\\n\t<img class=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet img#\\n\t<img id=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet input\\n\t<input type=\"${1:text/submit/hidden/button/image}\" name=\"${2}\" id=\"${3:$2}\" value=\"${4}\" />${5}\\nsnippet input.\\n\t<input class=\"${1}\" type=\"${2:text/submit/hidden/button/image}\" name=\"${3}\" id=\"${4:$3}\" value=\"${5}\" />${6}\\nsnippet input:text\\n\t<input type=\"text\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:submit\\n\t<input type=\"submit\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:hidden\\n\t<input type=\"hidden\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:button\\n\t<input type=\"button\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:image\\n\t<input type=\"image\" name=\"${1}\" id=\"${2:$1}\" src=\"${3}\" alt=\"${4}\" />${5}\\nsnippet input:checkbox\\n\t<input type=\"checkbox\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:radio\\n\t<input type=\"radio\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:color\\n\t<input type=\"color\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:date\\n\t<input type=\"date\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime\\n\t<input type=\"datetime\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime-local\\n\t<input type=\"datetime-local\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:email\\n\t<input type=\"email\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:file\\n\t<input type=\"file\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:month\\n\t<input type=\"month\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:number\\n\t<input type=\"number\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:password\\n\t<input type=\"password\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:range\\n\t<input type=\"range\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:reset\\n\t<input type=\"reset\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:search\\n\t<input type=\"search\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:time\\n\t<input type=\"time\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:url\\n\t<input type=\"url\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:week\\n\t<input type=\"week\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet ins\\n\t<ins>${1}</ins>\\nsnippet kbd\\n\t<kbd>${1}</kbd>\\nsnippet keygen\\n\t<keygen>${1}</keygen>\\nsnippet label\\n\t<label for=\"${2:$1}\">${1}</label>\\nsnippet label:i\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<input type=\"${3:text/submit/hidden/button}\" name=\"${4:$2}\" id=\"${5:$2}\" value=\"${6}\" />${7}\\nsnippet label:s\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<select name=\"${3:$2}\" id=\"${4:$2}\">\\n\t\t<option value=\"${5}\">${6:$5}</option>\\n\t</select>\\nsnippet legend\\n\t<legend>${1}</legend>\\nsnippet legend+\\n\t<legend><span>${1}</span></legend>\\nsnippet li\\n\t<li>${1}</li>\\nsnippet li.\\n\t<li class=\"${1}\">${2}</li>\\nsnippet li+\\n\t<li>${1}</li>\\n\tli+${2}\\nsnippet lia\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\nsnippet lia+\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\n\tlia+${3}\\nsnippet link\\n\t<link rel=\"${1}\" href=\"${2}\" title=\"${3}\" type=\"${4}\" />${5}\\nsnippet link:atom\\n\t<link rel=\"alternate\" href=\"${1:atom.xml}\" title=\"Atom\" type=\"application/atom+xml\" />${2}\\nsnippet link:css\\n\t<link rel=\"stylesheet\" href=\"${2:style.css}\" type=\"text/css\" media=\"${3:all}\" />${4}\\nsnippet link:favicon\\n\t<link rel=\"shortcut icon\" href=\"${1:favicon.ico}\" type=\"image/x-icon\" />${2}\\nsnippet link:rss\\n\t<link rel=\"alternate\" href=\"${1:rss.xml}\" title=\"RSS\" type=\"application/atom+xml\" />${2}\\nsnippet link:touch\\n\t<link rel=\"apple-touch-icon\" href=\"${1:favicon.png}\" />${2}\\nsnippet map\\n\t<map name=\"${1}\">\\n\t\t${2}\\n\t</map>\\nsnippet map.\\n\t<map class=\"${1}\" name=\"${2}\">\\n\t\t${3}\\n\t</map>\\nsnippet map#\\n\t<map name=\"${1}\" id=\"${2:$1}>\\n\t\t${3}\\n\t</map>\\nsnippet map+\\n\t<map name=\"${1}\">\\n\t\t<area shape=\"${2}\" coords=\"${3}\" href=\"${4}\" alt=\"${5}\" />${6}\\n\t</map>${7}\\nsnippet mark\\n\t<mark>${1}</mark>\\nsnippet menu\\n\t<menu>\\n\t\t${1}\\n\t</menu>\\nsnippet menu:c\\n\t<menu type=\"context\">\\n\t\t${1}\\n\t</menu>\\nsnippet menu:t\\n\t<menu type=\"toolbar\">\\n\t\t${1}\\n\t</menu>\\nsnippet meta\\n\t<meta http-equiv=\"${1}\" content=\"${2}\" />${3}\\nsnippet meta:compat\\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=${1:7,8,edge}\" />${3}\\nsnippet meta:refresh\\n\t<meta http-equiv=\"refresh\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meta:utf\\n\t<meta http-equiv=\"content-type\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meter\\n\t<meter>${1}</meter>\\nsnippet nav\\n\t<nav>\\n\t\t${1}\\n\t</nav>\\nsnippet nav.\\n\t<nav class=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet nav#\\n\t<nav id=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet noscript\\n\t<noscript>\\n\t\t${1}\\n\t</noscript>\\nsnippet object\\n\t<object data=\"${1}\" type=\"${2}\">\\n\t\t${3}\\n\t</object>${4}\\n# Embed QT Movie\\nsnippet movie\\n\t<object width=\"$2\" height=\"$3\" classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\"\\n\t codebase=\"http://www.apple.com/qtactivex/qtplugin.cab\">\\n\t\t<param name=\"src\" value=\"$1\" />\\n\t\t<param name=\"controller\" value=\"$4\" />\\n\t\t<param name=\"autoplay\" value=\"$5\" />\\n\t\t<embed src=\"${1:movie.mov}\"\\n\t\t\twidth=\"${2:320}\" height=\"${3:240}\"\\n\t\t\tcontroller=\"${4:true}\" autoplay=\"${5:true}\"\\n\t\t\tscale=\"tofit\" cache=\"true\"\\n\t\t\tpluginspage=\"http://www.apple.com/quicktime/download/\" />\\n\t</object>${6}\\nsnippet ol\\n\t<ol>\\n\t\t${1}\\n\t</ol>\\nsnippet ol.\\n\t<ol class=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol#\\n\t<ol id=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol+\\n\t<ol>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ol>\\nsnippet opt\\n\t<option value=\"${1}\">${2:$1}</option>\\nsnippet opt+\\n\t<option value=\"${1}\">${2:$1}</option>\\n\topt+${3}\\nsnippet optt\\n\t<option>${1}</option>\\nsnippet optgroup\\n\t<optgroup>\\n\t\t<option value=\"${1}\">${2:$1}</option>\\n\t\topt+${3}\\n\t</optgroup>\\nsnippet output\\n\t<output>${1}</output>\\nsnippet p\\n\t<p>${1}</p>\\nsnippet param\\n\t<param name=\"${1}\" value=\"${2}\" />${3}\\nsnippet pre\\n\t<pre>\\n\t\t${1}\\n\t</pre>\\nsnippet progress\\n\t<progress>${1}</progress>\\nsnippet q\\n\t<q>${1}</q>\\nsnippet rp\\n\t<rp>${1}</rp>\\nsnippet rt\\n\t<rt>${1}</rt>\\nsnippet ruby\\n\t<ruby>\\n\t\t<rp><rt>${1}</rt></rp>\\n\t</ruby>\\nsnippet s\\n\t<s>${1}</s>\\nsnippet samp\\n\t<samp>\\n\t\t${1}\\n\t</samp>\\nsnippet script\\n\t<script type=\"text/javascript\" charset=\"utf-8\">\\n\t\t${1}\\n\t<\\/script>\\nsnippet scriptsrc\\n\t<script src=\"${1}.js\" type=\"text/javascript\" charset=\"utf-8\"><\\/script>\\nsnippet newscript\\n\t<script type=\"application/javascript\" charset=\"utf-8\">\\n\t\t${1}\\n\t<\\/script>\\nsnippet newscriptsrc\\n\t<script src=\"${1}.js\" type=\"application/javascript\" charset=\"utf-8\"><\\/script>\\nsnippet section\\n\t<section>\\n\t\t${1}\\n\t</section>\\nsnippet section.\\n\t<section class=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet section#\\n\t<section id=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet select\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t${3}\\n\t</select>\\nsnippet select.\\n\t<select name=\"${1}\" id=\"${2:$1}\" class=\"${3}>\\n\t\t${4}\\n\t</select>\\nsnippet select+\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t<option value=\"${3}\">${4:$3}</option>\\n\t\topt+${5}\\n\t</select>\\nsnippet small\\n\t<small>${1}</small>\\nsnippet source\\n\t<source src=\"${1}\" type=\"${2}\" media=\"${3}\" />\\nsnippet span\\n\t<span>${1}</span>\\nsnippet strong\\n\t<strong>${1}</strong>\\nsnippet style\\n\t<style type=\"text/css\" media=\"${1:all}\">\\n\t\t${2}\\n\t</style>\\nsnippet sub\\n\t<sub>${1}</sub>\\nsnippet summary\\n\t<summary>\\n\t\t${1}\\n\t</summary>\\nsnippet sup\\n\t<sup>${1}</sup>\\nsnippet table\\n\t<table border=\"${1:0}\">\\n\t\t${2}\\n\t</table>\\nsnippet table.\\n\t<table class=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet table#\\n\t<table id=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet tbody\\n\t<tbody>\\n\t\t${1}\\n\t</tbody>\\nsnippet td\\n\t<td>${1}</td>\\nsnippet td.\\n\t<td class=\"${1}\">${2}</td>\\nsnippet td#\\n\t<td id=\"${1}\">${2}</td>\\nsnippet td+\\n\t<td>${1}</td>\\n\ttd+${2}\\nsnippet textarea\\n\t<textarea name=\"${1}\" id=${2:$1} rows=\"${3:8}\" cols=\"${4:40}\">${5}</textarea>${6}\\nsnippet tfoot\\n\t<tfoot>\\n\t\t${1}\\n\t</tfoot>\\nsnippet th\\n\t<th>${1}</th>\\nsnippet th.\\n\t<th class=\"${1}\">${2}</th>\\nsnippet th#\\n\t<th id=\"${1}\">${2}</th>\\nsnippet th+\\n\t<th>${1}</th>\\n\tth+${2}\\nsnippet thead\\n\t<thead>\\n\t\t${1}\\n\t</thead>\\nsnippet time\\n\t<time datetime=\"${1}\" pubdate=\"${2:$1}>${3:$1}</time>\\nsnippet title\\n\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\nsnippet tr\\n\t<tr>\\n\t\t${1}\\n\t</tr>\\nsnippet tr+\\n\t<tr>\\n\t\t<td>${1}</td>\\n\t\ttd+${2}\\n\t</tr>\\nsnippet track\\n\t<track src=\"${1}\" srclang=\"${2}\" label=\"${3}\" default=\"${4:default}>${5}</track>${6}\\nsnippet ul\\n\t<ul>\\n\t\t${1}\\n\t</ul>\\nsnippet ul.\\n\t<ul class=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul#\\n\t<ul id=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul+\\n\t<ul>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ul>\\nsnippet var\\n\t<var>${1}</var>\\nsnippet video\\n\t<video src=\"${1} height=\"${2}\" width=\"${3}\" preload=\"${5:none}\" autoplay=\"${6:autoplay}>${7}</video>${8}\\nsnippet wbr\\n\t<wbr />${1}\\n',t.scope=\"liquid\"});                (function() {\n                    window.require([\"ace/snippets/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/lisp.js",
    "content": "define(\"ace/snippets/lisp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"lisp\"});                (function() {\n                    window.require([\"ace/snippets/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/livescript.js",
    "content": "define(\"ace/snippets/livescript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"livescript\"});                (function() {\n                    window.require([\"ace/snippets/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/logiql.js",
    "content": "define(\"ace/snippets/logiql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"logiql\"});                (function() {\n                    window.require([\"ace/snippets/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/logtalk.js",
    "content": "define(\"ace/snippets/logtalk\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"logtalk\"});                (function() {\n                    window.require([\"ace/snippets/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/lsl.js",
    "content": "define(\"ace/snippets/lsl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet @\\n\t@${1:label};\\nsnippet CAMERA_ACTIVE\\n\tCAMERA_ACTIVE, ${1:integer isActive}, $0\\nsnippet CAMERA_BEHINDNESS_ANGLE\\n\tCAMERA_BEHINDNESS_ANGLE, ${1:float degrees}, $0\\nsnippet CAMERA_BEHINDNESS_LAG\\n\tCAMERA_BEHINDNESS_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_DISTANCE\\n\tCAMERA_DISTANCE, ${1:float meters}, $0\\nsnippet CAMERA_FOCUS\\n\tCAMERA_FOCUS, ${1:vector position}, $0\\nsnippet CAMERA_FOCUS_LAG\\n\tCAMERA_FOCUS_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_FOCUS_LOCKED\\n\tCAMERA_FOCUS_LOCKED, ${1:integer isLocked}, $0\\nsnippet CAMERA_FOCUS_OFFSET\\n\tCAMERA_FOCUS_OFFSET, ${1:vector meters}, $0\\nsnippet CAMERA_FOCUS_THRESHOLD\\n\tCAMERA_FOCUS_THRESHOLD, ${1:float meters}, $0\\nsnippet CAMERA_PITCH\\n\tCAMERA_PITCH, ${1:float degrees}, $0\\nsnippet CAMERA_POSITION\\n\tCAMERA_POSITION, ${1:vector position}, $0\\nsnippet CAMERA_POSITION_LAG\\n\tCAMERA_POSITION_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_POSITION_LOCKED\\n\tCAMERA_POSITION_LOCKED, ${1:integer isLocked}, $0\\nsnippet CAMERA_POSITION_THRESHOLD\\n\tCAMERA_POSITION_THRESHOLD, ${1:float meters}, $0\\nsnippet CHARACTER_AVOIDANCE_MODE\\n\tCHARACTER_AVOIDANCE_MODE, ${1:integer flags}, $0\\nsnippet CHARACTER_DESIRED_SPEED\\n\tCHARACTER_DESIRED_SPEED, ${1:float speed}, $0\\nsnippet CHARACTER_DESIRED_TURN_SPEED\\n\tCHARACTER_DESIRED_TURN_SPEED, ${1:float speed}, $0\\nsnippet CHARACTER_LENGTH\\n\tCHARACTER_LENGTH, ${1:float length}, $0\\nsnippet CHARACTER_MAX_TURN_RADIUS\\n\tCHARACTER_MAX_TURN_RADIUS, ${1:float radius}, $0\\nsnippet CHARACTER_ORIENTATION\\n\tCHARACTER_ORIENTATION, ${1:integer orientation}, $0\\nsnippet CHARACTER_RADIUS\\n\tCHARACTER_RADIUS, ${1:float radius}, $0\\nsnippet CHARACTER_STAY_WITHIN_PARCEL\\n\tCHARACTER_STAY_WITHIN_PARCEL, ${1:boolean stay}, $0\\nsnippet CHARACTER_TYPE\\n\tCHARACTER_TYPE, ${1:integer type}, $0\\nsnippet HTTP_BODY_MAXLENGTH\\n\tHTTP_BODY_MAXLENGTH, ${1:integer length}, $0\\nsnippet HTTP_CUSTOM_HEADER\\n\tHTTP_CUSTOM_HEADER, ${1:string name}, ${2:string value}, $0\\nsnippet HTTP_METHOD\\n\tHTTP_METHOD, ${1:string method}, $0\\nsnippet HTTP_MIMETYPE\\n\tHTTP_MIMETYPE, ${1:string mimeType}, $0\\nsnippet HTTP_PRAGMA_NO_CACHE\\n\tHTTP_PRAGMA_NO_CACHE, ${1:integer send_header}, $0\\nsnippet HTTP_VERBOSE_THROTTLE\\n\tHTTP_VERBOSE_THROTTLE, ${1:integer noisy}, $0\\nsnippet HTTP_VERIFY_CERT\\n\tHTTP_VERIFY_CERT, ${1:integer verify}, $0\\nsnippet RC_DATA_FLAGS\\n\tRC_DATA_FLAGS, ${1:integer flags}, $0\\nsnippet RC_DETECT_PHANTOM\\n\tRC_DETECT_PHANTOM, ${1:integer dectedPhantom}, $0\\nsnippet RC_MAX_HITS\\n\tRC_MAX_HITS, ${1:integer maxHits}, $0\\nsnippet RC_REJECT_TYPES\\n\tRC_REJECT_TYPES, ${1:integer filterMask}, $0\\nsnippet at_rot_target\\n\tat_rot_target(${1:integer handle}, ${2:rotation targetrot}, ${3:rotation ourrot})\\n\t{\\n\t\t$0\\n\t}\\nsnippet at_target\\n\tat_target(${1:integer tnum}, ${2:vector targetpos}, ${3:vector ourpos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet attach\\n\tattach(${1:key id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet changed\\n\tchanged(${1:integer change})\\n\t{\\n\t\t$0\\n\t}\\nsnippet collision\\n\tcollision(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet collision_end\\n\tcollision_end(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet collision_start\\n\tcollision_start(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet control\\n\tcontrol(${1:key id}, ${2:integer level}, ${3:integer edge})\\n\t{\\n\t\t$0\\n\t}\\nsnippet dataserver\\n\tdataserver(${1:key query_id}, ${2:string data})\\n\t{\\n\t\t$0\\n\t}\\nsnippet do\\n\tdo\\n\t{\\n\t\t$0\\n\t}\\n\twhile (${1:condition});\\nsnippet else\\n\telse\\n\t{\\n\t\t$0\\n\t}\\nsnippet email\\n\temail(${1:string time}, ${2:string address}, ${3:string subject}, ${4:string message}, ${5:integer num_left})\\n\t{\\n\t\t$0\\n\t}\\nsnippet experience_permissions\\n\texperience_permissions(${1:key agent_id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet experience_permissions_denied\\n\texperience_permissions_denied(${1:key agent_id}, ${2:integer reason})\\n\t{\\n\t\t$0\\n\t}\\nsnippet for\\n\tfor (${1:start}; ${3:condition}; ${3:step})\\n\t{\\n\t\t$0\\n\t}\\nsnippet http_request\\n\thttp_request(${1:key request_id}, ${2:string method}, ${3:string body})\\n\t{\\n\t\t$0\\n\t}\\nsnippet http_response\\n\thttp_response(${1:key request_id}, ${2:integer status}, ${3:list metadata}, ${4:string body})\\n\t{\\n\t\t$0\\n\t}\\nsnippet if\\n\tif (${1:condition})\\n\t{\\n\t\t$0\\n\t}\\nsnippet jump\\n\tjump ${1:label};\\nsnippet land_collision\\n\tland_collision(${1:vector pos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet land_collision_end\\n\tland_collision_end(${1:vector pos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet land_collision_start\\n\tland_collision_start(${1:vector pos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet link_message\\n\tlink_message(${1:integer sender_num}, ${2:integer num}, ${3:string str}, ${4:key id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet listen\\n\tlisten(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string message})\\n\t{\\n\t\t$0\\n\t}\\nsnippet llAbs\\n\tllAbs(${1:integer val})\\nsnippet llAcos\\n\tllAcos(${1:float val})\\nsnippet llAddToLandBanList\\n\tllAddToLandBanList(${1:key agent}, ${2:float hours});\\n\t$0\\nsnippet llAddToLandPassList\\n\tllAddToLandPassList(${1:key agent}, ${2:float hours});\\n\t$0\\nsnippet llAdjustSoundVolume\\n\tllAdjustSoundVolume(${1:float volume});\\n\t$0\\nsnippet llAgentInExperience\\n\tllAgentInExperience(${1:key agent})\\nsnippet llAllowInventoryDrop\\n\tllAllowInventoryDrop(${1:integer add});\\n\t$0\\nsnippet llAngleBetween\\n\tllAngleBetween(${1:rotation a}, ${2:rotation b})\\nsnippet llApplyImpulse\\n\tllApplyImpulse(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llApplyRotationalImpulse\\n\tllApplyRotationalImpulse(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llAsin\\n\tllAsin(${1:float val})\\nsnippet llAtan2\\n\tllAtan2(${1:float y}, ${2:float x})\\nsnippet llAttachToAvatar\\n\tllAttachToAvatar(${1:integer attach_point});\\n\t$0\\nsnippet llAttachToAvatarTemp\\n\tllAttachToAvatarTemp(${1:integer attach_point});\\n\t$0\\nsnippet llAvatarOnLinkSitTarget\\n\tllAvatarOnLinkSitTarget(${1:integer link})\\nsnippet llAvatarOnSitTarget\\n\tllAvatarOnSitTarget()\\nsnippet llAxes2Rot\\n\tllAxes2Rot(${1:vector fwd}, ${2:vector left}, ${3:vector up})\\nsnippet llAxisAngle2Rot\\n\tllAxisAngle2Rot(${1:vector axis}, ${2:float angle})\\nsnippet llBase64ToInteger\\n\tllBase64ToInteger(${1:string str})\\nsnippet llBase64ToString\\n\tllBase64ToString(${1:string str})\\nsnippet llBreakAllLinks\\n\tllBreakAllLinks();\\n\t$0\\nsnippet llBreakLink\\n\tllBreakLink(${1:integer link});\\n\t$0\\nsnippet llCastRay\\n\tllCastRay(${1:vector start}, ${2:vector end}, ${3:list options});\\n\t$0\\nsnippet llCeil\\n\tllCeil(${1:float val})\\nsnippet llClearCameraParams\\n\tllClearCameraParams();\\n\t$0\\nsnippet llClearLinkMedia\\n\tllClearLinkMedia(${1:integer link}, ${2:integer face});\\n\t$0\\nsnippet llClearPrimMedia\\n\tllClearPrimMedia(${1:integer face});\\n\t$0\\nsnippet llCloseRemoteDataChannel\\n\tllCloseRemoteDataChannel(${1:key channel});\\n\t$0\\nsnippet llCollisionFilter\\n\tllCollisionFilter(${1:string name}, ${2:key id}, ${3:integer accept});\\n\t$0\\nsnippet llCollisionSound\\n\tllCollisionSound(${1:string impact_sound}, ${2:float impact_volume});\\n\t$0\\nsnippet llCos\\n\tllCos(${1:float theta})\\nsnippet llCreateCharacter\\n\tllCreateCharacter(${1:list options});\\n\t$0\\nsnippet llCreateKeyValue\\n\tllCreateKeyValue(${1:string k})\\nsnippet llCreateLink\\n\tllCreateLink(${1:key target}, ${2:integer parent});\\n\t$0\\nsnippet llCSV2List\\n\tllCSV2List(${1:string src})\\nsnippet llDataSizeKeyValue\\n\tllDataSizeKeyValue()\\nsnippet llDeleteCharacter\\n\tllDeleteCharacter();\\n\t$0\\nsnippet llDeleteKeyValue\\n\tllDeleteKeyValue(${1:string k})\\nsnippet llDeleteSubList\\n\tllDeleteSubList(${1:list src}, ${2:integer start}, ${3:integer end})\\nsnippet llDeleteSubString\\n\tllDeleteSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\nsnippet llDetachFromAvatar\\n\tllDetachFromAvatar();\\n\t$0\\nsnippet llDetectedGrab\\n\tllDetectedGrab(${1:integer number})\\nsnippet llDetectedGroup\\n\tllDetectedGroup(${1:integer number})\\nsnippet llDetectedKey\\n\tllDetectedKey(${1:integer number})\\nsnippet llDetectedLinkNumber\\n\tllDetectedLinkNumber(${1:integer number})\\nsnippet llDetectedName\\n\tllDetectedName(${1:integer number})\\nsnippet llDetectedOwner\\n\tllDetectedOwner(${1:integer number})\\nsnippet llDetectedPos\\n\tllDetectedPosl(${1:integer number})\\nsnippet llDetectedRot\\n\tllDetectedRot(${1:integer number})\\nsnippet llDetectedTouchBinormal\\n\tllDetectedTouchBinormal(${1:integer number})\\nsnippet llDetectedTouchFace\\n\tllDetectedTouchFace(${1:integer number})\\nsnippet llDetectedTouchNormal\\n\tllDetectedTouchNormal(${1:integer number})\\nsnippet llDetectedTouchPos\\n\tllDetectedTouchPos(${1:integer number})\\nsnippet llDetectedTouchST\\n\tllDetectedTouchST(${1:integer number})\\nsnippet llDetectedTouchUV\\n\tllDetectedTouchUV(${1:integer number})\\nsnippet llDetectedType\\n\tllDetectedType(${1:integer number})\\nsnippet llDetectedVel\\n\tllDetectedVel(${1:integer number})\\nsnippet llDialog\\n\tllDialog(${1:key agent}, ${2:string message}, ${3:list buttons}, ${4:integer channel});\\n\t$0\\nsnippet llDie\\n\tllDie();\\n\t$0\\nsnippet llDumpList2String\\n\tllDumpList2String(${1:list src}, ${2:string separator})\\nsnippet llEdgeOfWorld\\n\tllEdgeOfWorld(${1:vector pos}, ${2:vector dir})\\nsnippet llEjectFromLand\\n\tllEjectFromLand(${1:key agent});\\n\t$0\\nsnippet llEmail\\n\tllEmail(${1:string address}, ${2:string subject}, ${3:string message});\\n\t$0\\nsnippet llEscapeURL\\n\tllEscapeURL(${1:string url})\\nsnippet llEuler2Rot\\n\tllEuler2Rot(${1:vector v})\\nsnippet llExecCharacterCmd\\n\tllExecCharacterCmd(${1:integer command}, ${2:list options});\\n\t$0\\nsnippet llEvade\\n\tllEvade(${1:key target}, ${2:list options});\\n\t$0\\nsnippet llFabs\\n\tllFabs(${1:float val})\\nsnippet llFleeFrom\\n\tllFleeFrom(${1:vector position}, ${2:float distance}, ${3:list options});\\n\t$0\\nsnippet llFloor\\n\tllFloor(${1:float val})\\nsnippet llForceMouselook\\n\tllForceMouselook(${1:integer mouselook});\\n\t$0\\nsnippet llFrand\\n\tllFrand(${1:float mag})\\nsnippet llGenerateKey\\n\tllGenerateKey()\\nsnippet llGetAccel\\n\tllGetAccel()\\nsnippet llGetAgentInfo\\n\tllGetAgentInfo(${1:key id})\\nsnippet llGetAgentLanguage\\n\tllGetAgentLanguage(${1:key agent})\\nsnippet llGetAgentList\\n\tllGetAgentList(${1:integer scope}, ${2:list options})\\nsnippet llGetAgentSize\\n\tllGetAgentSize(${1:key agent})\\nsnippet llGetAlpha\\n\tllGetAlpha(${1:integer face})\\nsnippet llGetAndResetTime\\n\tllGetAndResetTime()\\nsnippet llGetAnimation\\n\tllGetAnimation(${1:key id})\\nsnippet llGetAnimationList\\n\tllGetAnimationList(${1:key agent})\\nsnippet llGetAnimationOverride\\n\tllGetAnimationOverride(${1:string anim_state})\\nsnippet llGetAttached\\n\tllGetAttached()\\nsnippet llGetAttachedList\\n\tllGetAttachedList(${1:key id})\\nsnippet llGetBoundingBox\\n\tllGetBoundingBox(${1:key object})\\nsnippet llGetCameraPos\\n\tllGetCameraPos()\\nsnippet llGetCameraRot\\n\tllGetCameraRot()\\nsnippet llGetCenterOfMass\\n\tllGetCenterOfMass()\\nsnippet llGetClosestNavPoint\\n\tllGetClosestNavPoint(${1:vector point}, ${2:list options})\\nsnippet llGetColor\\n\tllGetColor(${1:integer face})\\nsnippet llGetCreator\\n\tllGetCreator()\\nsnippet llGetDate\\n\tllGetDate()\\nsnippet llGetDisplayName\\n\tllGetDisplayName(${1:key id})\\nsnippet llGetEnergy\\n\tllGetEnergy()\\nsnippet llGetEnv\\n\tllGetEnv(${1:string name})\\nsnippet llGetExperienceDetails\\n\tllGetExperienceDetails(${1:key experience_id})\\nsnippet llGetExperienceErrorMessage\\n\tllGetExperienceErrorMessage(${1:integer error})\\nsnippet llGetForce\\n\tllGetForce()\\nsnippet llGetFreeMemory\\n\tllGetFreeMemory()\\nsnippet llGetFreeURLs\\n\tllGetFreeURLs()\\nsnippet llGetGeometricCenter\\n\tllGetGeometricCenter()\\nsnippet llGetGMTclock\\n\tllGetGMTclock()\\nsnippet llGetHTTPHeader\\n\tllGetHTTPHeader(${1:key request_id}, ${2:string header})\\nsnippet llGetInventoryCreator\\n\tllGetInventoryCreator(${1:string item})\\nsnippet llGetInventoryKey\\n\tllGetInventoryKey(${1:string name})\\nsnippet llGetInventoryName\\n\tllGetInventoryName(${1:integer type}, ${2:integer number})\\nsnippet llGetInventoryNumber\\n\tllGetInventoryNumber(${1:integer type})\\nsnippet llGetInventoryPermMask\\n\tllGetInventoryPermMask(${1:string item}, ${2:integer mask})\\nsnippet llGetInventoryType\\n\tllGetInventoryType(${1:string name})\\nsnippet llGetKey\\n\tllGetKey()\\nsnippet llGetLandOwnerAt\\n\tllGetLandOwnerAt(${1:vector pos})\\nsnippet llGetLinkKey\\n\tllGetLinkKey(${1:integer link})\\nsnippet llGetLinkMedia\\n\tllGetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params})\\nsnippet llGetLinkName\\n\tllGetLinkName(${1:integer link})\\nsnippet llGetLinkNumber\\n\tllGetLinkNumber()\\nsnippet llGetLinkNumberOfSides\\n\tllGetLinkNumberOfSides(${1:integer link})\\nsnippet llGetLinkPrimitiveParams\\n\tllGetLinkPrimitiveParams(${1:integer link}, ${2:list params})\\nsnippet llGetListEntryType\\n\tllGetListEntryType(${1:list src}, ${2:integer index})\\nsnippet llGetListLength\\n\tllGetListLength(${1:list src})\\nsnippet llGetLocalPos\\n\tllGetLocalPos()\\nsnippet llGetLocalRot\\n\tllGetLocalRot()\\nsnippet llGetMass\\n\tllGetMass()\\nsnippet llGetMassMKS\\n\tllGetMassMKS()\\nsnippet llGetMaxScaleFactor\\n\tllGetMaxScaleFactor()\\nsnippet llGetMemoryLimit\\n\tllGetMemoryLimit()\\nsnippet llGetMinScaleFactor\\n\tllGetMinScaleFactor()\\nsnippet llGetNextEmail\\n\tllGetNextEmail(${1:string address}, ${2:string subject});\\n\t$0\\nsnippet llGetNotecardLine\\n\tllGetNotecardLine(${1:string name}, ${2:integer line})\\nsnippet llGetNumberOfNotecardLines\\n\tllGetNumberOfNotecardLines(${1:string name})\\nsnippet llGetNumberOfPrims\\n\tllGetNumberOfPrims()\\nsnippet llGetNumberOfSides\\n\tllGetNumberOfSides()\\nsnippet llGetObjectDesc\\n\tllGetObjectDesc()\\nsnippet llGetObjectDetails\\n\tllGetObjectDetails(${1:key id}, ${2:list params})\\nsnippet llGetObjectMass\\n\tllGetObjectMass(${1:key id})\\nsnippet llGetObjectName\\n\tllGetObjectName()\\nsnippet llGetObjectPermMask\\n\tllGetObjectPermMask(${1:integer mask})\\nsnippet llGetObjectPrimCount\\n\tllGetObjectPrimCount(${1:key prim})\\nsnippet llGetOmega\\n\tllGetOmega()\\nsnippet llGetOwner\\n\tllGetOwner()\\nsnippet llGetOwnerKey\\n\tllGetOwnerKey(${1:key id})\\nsnippet llGetParcelDetails\\n\tllGetParcelDetails(${1:vector pos}, ${2:list params})\\nsnippet llGetParcelFlags\\n\tllGetParcelFlags(${1:vector pos})\\nsnippet llGetParcelMaxPrims\\n\tllGetParcelMaxPrims(${1:vector pos}, ${2:integer sim_wide})\\nsnippet llGetParcelMusicURL\\n\tllGetParcelMusicURL()\\nsnippet llGetParcelPrimCount\\n\tllGetParcelPrimCount(${1:vector pos}, ${2:integer category}, ${3:integer sim_wide})\\nsnippet llGetParcelPrimOwners\\n\tllGetParcelPrimOwners(${1:vector pos})\\nsnippet llGetPermissions\\n\tllGetPermissions()\\nsnippet llGetPermissionsKey\\n\tllGetPermissionsKey()\\nsnippet llGetPhysicsMaterial\\n\tllGetPhysicsMaterial()\\nsnippet llGetPos\\n\tllGetPos()\\nsnippet llGetPrimitiveParams\\n\tllGetPrimitiveParams(${1:list params})\\nsnippet llGetPrimMediaParams\\n\tllGetPrimMediaParams(${1:integer face}, ${2:list params})\\nsnippet llGetRegionAgentCount\\n\tllGetRegionAgentCount()\\nsnippet llGetRegionCorner\\n\tllGetRegionCorner()\\nsnippet llGetRegionFlags\\n\tllGetRegionFlags()\\nsnippet llGetRegionFPS\\n\tllGetRegionFPS()\\nsnippet llGetRegionName\\n\tllGetRegionName()\\nsnippet llGetRegionTimeDilation\\n\tllGetRegionTimeDilation()\\nsnippet llGetRootPosition\\n\tllGetRootPosition()\\nsnippet llGetRootRotation\\n\tllGetRootRotation()\\nsnippet llGetRot\\n\tllGetRot()\\nsnippet llGetScale\\n\tllGetScale()\\nsnippet llGetScriptName\\n\tllGetScriptName()\\nsnippet llGetScriptState\\n\tllGetScriptState(${1:string script})\\nsnippet llGetSimStats\\n\tllGetSimStats(${1:integer stat_type})\\nsnippet llGetSimulatorHostname\\n\tllGetSimulatorHostname()\\nsnippet llGetSPMaxMemory\\n\tllGetSPMaxMemory()\\nsnippet llGetStartParameter\\n\tllGetStartParameter()\\nsnippet llGetStaticPath\\n\tllGetStaticPath(${1:vector start}, ${2:vector end}, ${3:float radius}, ${4:list params})\\nsnippet llGetStatus\\n\tllGetStatus(${1:integer status})\\nsnippet llGetSubString\\n\tllGetSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\nsnippet llGetSunDirection\\n\tllGetSunDirection()\\nsnippet llGetTexture\\n\tllGetTexture(${1:integer face})\\nsnippet llGetTextureOffset\\n\tllGetTextureOffset(${1:integer face})\\nsnippet llGetTextureRot\\n\tllGetTextureRot(${1:integer face})\\nsnippet llGetTextureScale\\n\tllGetTextureScale(${1:integer face})\\nsnippet llGetTime\\n\tllGetTime()\\nsnippet llGetTimeOfDay\\n\tllGetTimeOfDay()\\nsnippet llGetTimestamp\\n\tllGetTimestamp()\\nsnippet llGetTorque\\n\tllGetTorque()\\nsnippet llGetUnixTime\\n\tllGetUnixTime()\\nsnippet llGetUsedMemory\\n\tllGetUsedMemory()\\nsnippet llGetUsername\\n\tllGetUsername(${1:key id})\\nsnippet llGetVel\\n\tllGetVel()\\nsnippet llGetWallclock\\n\tllGetWallclock()\\nsnippet llGiveInventory\\n\tllGiveInventory(${1:key destination}, ${2:string inventory});\\n\t$0\\nsnippet llGiveInventoryList\\n\tllGiveInventoryList(${1:key target}, ${2:string folder}, ${3:list inventory});\\n\t$0\\nsnippet llGiveMoney\\n\tllGiveMoney(${1:key destination}, ${2:integer amount})\\nsnippet llGround\\n\tllGround(${1:vector offset})\\nsnippet llGroundContour\\n\tllGroundContour(${1:vector offset})\\nsnippet llGroundNormal\\n\tllGroundNormal(${1:vector offset})\\nsnippet llGroundRepel\\n\tllGroundRepel(${1:float height}, ${2:integer water}, ${3:float tau});\\n\t$0\\nsnippet llGroundSlope\\n\tllGroundSlope(${1:vector offset})\\nsnippet llHTTPRequest\\n\tllHTTPRequest(${1:string url}, ${2:list parameters}, ${3:string body})\\nsnippet llHTTPResponse\\n\tllHTTPResponse(${1:key request_id}, ${2:integer status}, ${3:string body});\\n\t$0\\nsnippet llInsertString\\n\tllInsertString(${1:string dst}, ${2:integer pos}, ${3:string src})\\nsnippet llInstantMessage\\n\tllInstantMessage(${1:key user}, ${2:string message});\\n\t$0\\nsnippet llIntegerToBase64\\n\tllIntegerToBase64(${1:integer number})\\nsnippet llJson2List\\n\tllJson2List(${1:string json})\\nsnippet llJsonGetValue\\n\tllJsonGetValue(${1:string json}, ${2:list specifiers})\\nsnippet llJsonSetValue\\n\tllJsonSetValue(${1:string json}, ${2:list specifiers}, ${3:string newValue})\\nsnippet llJsonValueType\\n\tllJsonValueType(${1:string json}, ${2:list specifiers})\\nsnippet llKey2Name\\n\tllKey2Name(${1:key id})\\nsnippet llKeyCountKeyValue\\n\tllKeyCountKeyValue()\\nsnippet llKeysKeyValue\\n\tllKeysKeyValue(${1:integer first}, ${2:integer count})\\nsnippet llLinkParticleSystem\\n\tllLinkParticleSystem(${1:integer link}, ${2:list rules});\\n\t$0\\nsnippet llLinkSitTarget\\n\tllLinkSitTarget(${1:integer link}, ${2:vector offset}, ${3:rotation rot});\\n\t$0\\nsnippet llList2CSV\\n\tllList2CSV(${1:list src})\\nsnippet llList2Float\\n\tllList2Float(${1:list src}, ${2:integer index})\\nsnippet llList2Integer\\n\tllList2Integer(${1:list src}, ${2:integer index})\\nsnippet llList2Json\\n\tllList2Json(${1:string type}, ${2:list values})\\nsnippet llList2Key\\n\tllList2Key(${1:list src}, ${2:integer index})\\nsnippet llList2List\\n\tllList2List(${1:list src}, ${2:integer start}, ${3:integer end})\\nsnippet llList2ListStrided\\n\tllList2ListStrided(${1:list src}, ${2:integer start}, ${3:integer end}, ${4:integer stride})\\nsnippet llList2Rot\\n\tllList2Rot(${1:list src}, ${2:integer index})\\nsnippet llList2String\\n\tllList2String(${1:list src}, ${2:integer index})\\nsnippet llList2Vector\\n\tllList2Vector(${1:list src}, ${2:integer index})\\nsnippet llListen\\n\tllListen(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string msg})\\nsnippet llListenControl\\n\tllListenControl(${1:integer handle}, ${2:integer active});\\n\t$0\\nsnippet llListenRemove\\n\tllListenRemove(${1:integer handle});\\n\t$0\\nsnippet llListFindList\\n\tllListFindList(${1:list src}, ${2:list test})\\nsnippet llListInsertList\\n\tllListInsertList(${1:list dest}, ${2:list src}, ${3:integer start})\\nsnippet llListRandomize\\n\tllListRandomize(${1:list src}, ${2:integer stride})\\nsnippet llListReplaceList\\n\tllListReplaceList(${1:list dest}, ${2:list src}, ${3:integer start}, ${4:integer end})\\nsnippet llListSort\\n\tllListSort(${1:list src}, ${2:integer stride}, ${3:integer ascending})\\nsnippet llListStatistics\\n\tllListStatistics(${1:integer operation}, ${2:list src})\\nsnippet llLoadURL\\n\tllLoadURL(${1:key agent}, ${2:string message}, ${3:string url});\\n\t$0\\nsnippet llLog\\n\tllLog(${1:float val})\\nsnippet llLog10\\n\tllLog10(${1:float val})\\nsnippet llLookAt\\n\tllLookAt(${1:vector target}, ${2:float strength}, ${3:float damping});\\n\t$0\\nsnippet llLoopSound\\n\tllLoopSound(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llLoopSoundMaster\\n\tllLoopSoundMaster(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llLoopSoundSlave\\n\tllLoopSoundSlave(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llManageEstateAccess\\n\tllManageEstateAccess(${1:integer action}, ${2:key agent})\\nsnippet llMapDestination\\n\tllMapDestination(${1:string simname}, ${2:vector pos}, ${3:vector look_at});\\n\t$0\\nsnippet llMD5String\\n\tllMD5String(${1:string src}, ${2:integer nonce})\\nsnippet llMessageLinked\\n\tllMessageLinked(${1:integer link}, ${2:integer num}, ${3:string str}, ${4:key id});\\n\t$0\\nsnippet llMinEventDelay\\n\tllMinEventDelay(${1:float delay});\\n\t$0\\nsnippet llModifyLand\\n\tllModifyLand(${1:integer action}, ${2:integer brush});\\n\t$0\\nsnippet llModPow\\n\tllModPow(${1:integer a}, ${2:integer b}, ${3:integer c})\\nsnippet llMoveToTarget\\n\tllMoveToTarget(${1:vector target}, ${2:float tau});\\n\t$0\\nsnippet llNavigateTo\\n\tllNavigateTo(${1:vector pos}, ${2:list options});\\n\t$0\\nsnippet llOffsetTexture\\n\tllOffsetTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\t$0\\nsnippet llOpenRemoteDataChannel\\n\tllOpenRemoteDataChannel();\\n\t$0\\nsnippet llOverMyLand\\n\tllOverMyLand(${1:key id})\\nsnippet llOwnerSay\\n\tllOwnerSay(${1:string msg});\\n\t$0\\nsnippet llParcelMediaCommandList\\n\tllParcelMediaCommandList(${1:list commandList});\\n\t$0\\nsnippet llParcelMediaQuery\\n\tllParcelMediaQuery(${1:list query})\\nsnippet llParseString2List\\n\tllParseString2List(${1:string src}, ${2:list separators}, ${3:list spacers})\\nsnippet llParseStringKeepNulls\\n\tllParseStringKeepNulls(${1:string src}, ${2:list separators}, ${3:list spacers})\\nsnippet llParticleSystem\\n\tllParticleSystem(${1:list rules});\\n\t$0\\nsnippet llPassCollisions\\n\tllPassCollisions(${1:integer pass});\\n\t$0\\nsnippet llPassTouches\\n\tllPassTouches(${1:integer pass});\\n\t$0\\nsnippet llPatrolPoints\\n\tllPatrolPoints(${1:list patrolPoints}, ${2:list options});\\n\t$0\\nsnippet llPlaySound\\n\tllPlaySound(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llPlaySoundSlave\\n\tllPlaySoundSlave(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llPow\\n\tllPow(${1:float base}, ${2:float exponent})\\nsnippet llPreloadSound\\n\tllPreloadSound(${1:string sound});\\n\t$0\\nsnippet llPursue\\n\tllPursue(${1:key target}, ${2:list options});\\n\t$0\\nsnippet llPushObject\\n\tllPushObject(${1:key target}, ${2:vector impulse}, ${3:vector ang_impulse}, ${4:integer local});\\n\t$0\\nsnippet llReadKeyValue\\n\tllReadKeyValue(${1:string k})\\nsnippet llRegionSay\\n\tllRegionSay(${1:integer channel}, ${2:string msg});\\n\t$0\\nsnippet llRegionSayTo\\n\tllRegionSayTo(${1:key target}, ${2:integer channel}, ${3:string msg});\\n\t$0\\nsnippet llReleaseControls\\n\tllReleaseControls();\\n\t$0\\nsnippet llReleaseURL\\n\tllReleaseURL(${1:string url});\\n\t$0\\nsnippet llRemoteDataReply\\n\tllRemoteDataReply(${1:key channel}, ${2:key message_id}, ${3:string sdata}, ${4:integer idata});\\n\t$0\\nsnippet llRemoteLoadScriptPin\\n\tllRemoteLoadScriptPin(${1:key target}, ${2:string name}, ${3:integer pin}, ${4:integer running}, ${5:integer start_param});\\n\t$0\\nsnippet llRemoveFromLandBanList\\n\tllRemoveFromLandBanList(${1:key agent});\\n\t$0\\nsnippet llRemoveFromLandPassList\\n\tllRemoveFromLandPassList(${1:key agent});\\n\t$0\\nsnippet llRemoveInventory\\n\tllRemoveInventory(${1:string item});\\n\t$0\\nsnippet llRemoveVehicleFlags\\n\tllRemoveVehicleFlags(${1:integer flags});\\n\t$0\\nsnippet llRequestAgentData\\n\tllRequestAgentData(${1:key id}, ${2:integer data})\\nsnippet llRequestDisplayName\\n\tllRequestDisplayName(${1:key id})\\nsnippet llRequestExperiencePermissions\\n\tllRequestExperiencePermissions(${1:key agent}, ${2:string name})\\nsnippet llRequestInventoryData\\n\tllRequestInventoryData(${1:string name})\\nsnippet llRequestPermissions\\n\tllRequestPermissions(${1:key agent}, ${2:integer permissions})\\nsnippet llRequestSecureURL\\n\tllRequestSecureURL()\\nsnippet llRequestSimulatorData\\n\tllRequestSimulatorData(${1:string region}, ${2:integer data})\\nsnippet llRequestURL\\n\tllRequestURL()\\nsnippet llRequestUsername\\n\tllRequestUsername(${1:key id})\\nsnippet llResetAnimationOverride\\n\tllResetAnimationOverride(${1:string anim_state});\\n\t$0\\nsnippet llResetLandBanList\\n\tllResetLandBanList();\\n\t$0\\nsnippet llResetLandPassList\\n\tllResetLandPassList();\\n\t$0\\nsnippet llResetOtherScript\\n\tllResetOtherScript(${1:string name});\\n\t$0\\nsnippet llResetScript\\n\tllResetScript();\\n\t$0\\nsnippet llResetTime\\n\tllResetTime();\\n\t$0\\nsnippet llReturnObjectsByID\\n\tllReturnObjectsByID(${1:list objects})\\nsnippet llReturnObjectsByOwner\\n\tllReturnObjectsByOwner(${1:key owner}, ${2:integer scope})\\nsnippet llRezAtRoot\\n\tllRezAtRoot(${1:string inventory}, ${2:vector position}, ${3:vector velocity}, ${4:rotation rot}, ${5:integer param});\\n\t$0\\nsnippet llRezObject\\n\tllRezObject(${1:string inventory}, ${2:vector pos}, ${3:vector vel}, ${4:rotation rot}, ${5:integer param});\\n\t$0\\nsnippet llRot2Angle\\n\tllRot2Angle(${1:rotation rot})\\nsnippet llRot2Axis\\n\tllRot2Axis(${1:rotation rot})\\nsnippet llRot2Euler\\n\tllRot2Euler(${1:rotation quat})\\nsnippet llRot2Fwd\\n\tllRot2Fwd(${1:rotation q})\\nsnippet llRot2Left\\n\tllRot2Left(${1:rotation q})\\nsnippet llRot2Up\\n\tllRot2Up(${1:rotation q})\\nsnippet llRotateTexture\\n\tllRotateTexture(${1:float angle}, ${2:integer face});\\n\t$0\\nsnippet llRotBetween\\n\tllRotBetween(${1:vector start}, ${2:vector end})\\nsnippet llRotLookAt\\n\tllRotLookAt(${1:rotation target_direction}, ${2:float strength}, ${3:float damping});\\n\t$0\\nsnippet llRotTarget\\n\tllRotTarget(${1:rotation rot}, ${2:float error})\\nsnippet llRotTargetRemove\\n\tllRotTargetRemove(${1:integer handle});\\n\t$0\\nsnippet llRound\\n\tllRound(${1:float val})\\nsnippet llSameGroup\\n\tllSameGroup(${1:key group})\\nsnippet llSay\\n\tllSay(${1:integer channel}, ${2:string msg});\\n\t$0\\nsnippet llScaleByFactor\\n\tllScaleByFactor(${1:float scaling_factor})\\nsnippet llScaleTexture\\n\tllScaleTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\t$0\\nsnippet llScriptDanger\\n\tllScriptDanger(${1:vector pos})\\nsnippet llScriptProfiler\\n\tllScriptProfiler(${1:integer flags});\\n\t$0\\nsnippet llSendRemoteData\\n\tllSendRemoteData(${1:key channel}, ${2:string dest}, ${3:integer idata}, ${4:string sdata})\\nsnippet llSensor\\n\tllSensor(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc});\\n\t$0\\nsnippet llSensorRepeat\\n\tllSensorRepeat(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc}, ${6:float rate});\\n\t$0\\nsnippet llSetAlpha\\n\tllSetAlpha(${1:float alpha}, ${2:integer face});\\n\t$0\\nsnippet llSetAngularVelocity\\n\tllSetAngularVelocity(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llSetAnimationOverride\\n\tllSetAnimationOverride(${1:string anim_state}, ${2:string anim})\\nsnippet llSetBuoyancy\\n\tllSetBuoyancy(${1:float buoyancy});\\n\t$0\\nsnippet llSetCameraAtOffset\\n\tllSetCameraAtOffset(${1:vector offset});\\n\t$0\\nsnippet llSetCameraEyeOffset\\n\tllSetCameraEyeOffset(${1:vector offset});\\n\t$0\\nsnippet llSetCameraParams\\n\tllSetCameraParams(${1:list rules});\\n\t$0\\nsnippet llSetClickAction\\n\tllSetClickAction(${1:integer action});\\n\t$0\\nsnippet llSetColor\\n\tllSetColor(${1:vector color}, ${2:integer face});\\n\t$0\\nsnippet llSetContentType\\n\tllSetContentType(${1:key request_id}, ${2:integer content_type});\\n\t$0\\nsnippet llSetDamage\\n\tllSetDamage(${1:float damage});\\n\t$0\\nsnippet llSetForce\\n\tllSetForce(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llSetForceAndTorque\\n\tllSetForceAndTorque(${1:vector force}, ${2:vector torque}, ${3:integer local});\\n\t$0\\nsnippet llSetHoverHeight\\n\tllSetHoverHeight(${1:float height}, ${2:integer water}, ${3:float tau});\\n\t$0\\nsnippet llSetKeyframedMotion\\n\tllSetKeyframedMotion(${1:list keyframes}, ${2:list options});\\n\t$0\\nsnippet llSetLinkAlpha\\n\tllSetLinkAlpha(${1:integer link}, ${2:float alpha}, ${3:integer face});\\n\t$0\\nsnippet llSetLinkCamera\\n\tllSetLinkCamera(${1:integer link}, ${2:vector eye}, ${3:vector at});\\n\t$0\\nsnippet llSetLinkColor\\n\tllSetLinkColor(${1:integer link}, ${2:vector color}, ${3:integer face});\\n\t$0\\nsnippet llSetLinkMedia\\n\tllSetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params});\\n\t$0\\nsnippet llSetLinkPrimitiveParams\\n\tllSetLinkPrimitiveParams(${1:integer link}, ${2:list rules});\\n\t$0\\nsnippet llSetLinkPrimitiveParamsFast\\n\tllSetLinkPrimitiveParamsFast(${1:integer link}, ${2:list rules});\\n\t$0\\nsnippet llSetLinkTexture\\n\tllSetLinkTexture(${1:integer link}, ${2:string texture}, ${3:integer face});\\n\t$0\\nsnippet llSetLinkTextureAnim\\n\tllSetLinkTextureAnim(${1:integer link}, ${2:integer mode}, ${3:integer face}, ${4:integer sizex}, ${5:integer sizey}, ${6:float start}, ${7:float length}, ${8:float rate});\\n\t$0\\nsnippet llSetLocalRot\\n\tllSetLocalRot(${1:rotation rot});\\n\t$0\\nsnippet llSetMemoryLimit\\n\tllSetMemoryLimit(${1:integer limit})\\nsnippet llSetObjectDesc\\n\tllSetObjectDesc(${1:string description});\\n\t$0\\nsnippet llSetObjectName\\n\tllSetObjectName(${1:string name});\\n\t$0\\nsnippet llSetParcelMusicURL\\n\tllSetParcelMusicURL(${1:string url});\\n\t$0\\nsnippet llSetPayPrice\\n\tllSetPayPrice(${1:integer price}, [${2:integer price_button_a}, ${3:integer price_button_b}, ${4:integer price_button_c}, ${5:integer price_button_d}]);\\n\t$0\\nsnippet llSetPhysicsMaterial\\n\tllSetPhysicsMaterial(${1:integer mask}, ${2:float gravity_multiplier}, ${3:float restitution}, ${4:float friction}, ${5:float density});\\n\t$0\\nsnippet llSetPos\\n\tllSetPos(${1:vector pos});\\n\t$0\\nsnippet llSetPrimitiveParams\\n\tllSetPrimitiveParams(${1:list rules});\\n\t$0\\nsnippet llSetPrimMediaParams\\n\tllSetPrimMediaParams(${1:integer face}, ${2:list params});\\n\t$0\\nsnippet llSetRegionPos\\n\tllSetRegionPos(${1:vector position})\\nsnippet llSetRemoteScriptAccessPin\\n\tllSetRemoteScriptAccessPin(${1:integer pin});\\n\t$0\\nsnippet llSetRot\\n\tllSetRot(${1:rotation rot});\\n\t$0\\nsnippet llSetScale\\n\tllSetScale(${1:vector size});\\n\t$0\\nsnippet llSetScriptState\\n\tllSetScriptState(${1:string name}, ${2:integer run});\\n\t$0\\nsnippet llSetSitText\\n\tllSetSitText(${1:string text});\\n\t$0\\nsnippet llSetSoundQueueing\\n\tllSetSoundQueueing(${1:integer queue});\\n\t$0\\nsnippet llSetSoundRadius\\n\tllSetSoundRadius(${1:float radius});\\n\t$0\\nsnippet llSetStatus\\n\tllSetStatus(${1:integer status}, ${2:integer value});\\n\t$0\\nsnippet llSetText\\n\tllSetText(${1:string text}, ${2:vector color}, ${3:float alpha});\\n\t$0\\nsnippet llSetTexture\\n\tllSetTexture(${1:string texture}, ${2:integer face});\\n\t$0\\nsnippet llSetTextureAnim\\n\tllSetTextureAnim(${1:integer mode}, ${2:integer face}, ${3:integer sizex}, ${4:integer sizey}, ${5:float start}, ${6:float length}, ${7:float rate});\\n\t$0\\nsnippet llSetTimerEvent\\n\tllSetTimerEvent(${1:float sec});\\n\t$0\\nsnippet llSetTorque\\n\tllSetTorque(${1:vector torque}, ${2:integer local});\\n\t$0\\nsnippet llSetTouchText\\n\tllSetTouchText(${1:string text});\\n\t$0\\nsnippet llSetVehicleFlags\\n\tllSetVehicleFlags(${1:integer flags});\\n\t$0\\nsnippet llSetVehicleFloatParam\\n\tllSetVehicleFloatParam(${1:integer param}, ${2:float value});\\n\t$0\\nsnippet llSetVehicleRotationParam\\n\tllSetVehicleRotationParam(${1:integer param}, ${2:rotation rot});\\n\t$0\\nsnippet llSetVehicleType\\n\tllSetVehicleType(${1:integer type});\\n\t$0\\nsnippet llSetVehicleVectorParam\\n\tllSetVehicleVectorParam(${1:integer param}, ${2:vector vec});\\n\t$0\\nsnippet llSetVelocity\\n\tllSetVelocity(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llSHA1String\\n\tllSHA1String(${1:string src})\\nsnippet llShout\\n\tllShout(${1:integer channel}, ${2:string msg});\\n\t$0\\nsnippet llSin\\n\tllSin(${1:float theta})\\nsnippet llSitTarget\\n\tllSitTarget(${1:vector offset}, ${2:rotation rot});\\n\t$0\\nsnippet llSleep\\n\tllSleep(${1:float sec});\\n\t$0\\nsnippet llSqrt\\n\tllSqrt(${1:float val})\\nsnippet llStartAnimation\\n\tllStartAnimation(${1:string anim});\\n\t$0\\nsnippet llStopAnimation\\n\tllStopAnimation(${1:string anim});\\n\t$0\\nsnippet llStopHover\\n\tllStopHover();\\n\t$0\\nsnippet llStopLookAt\\n\tllStopLookAt();\\n\t$0\\nsnippet llStopMoveToTarget\\n\tllStopMoveToTarget();\\n\t$0\\nsnippet llStopSound\\n\tllStopSound();\\n\t$0\\nsnippet llStringLength\\n\tllStringLength(${1:string str})\\nsnippet llStringToBase64\\n\tllStringToBase64(${1:string str})\\nsnippet llStringTrim\\n\tllStringTrim(${1:string src}, ${2:integer type})\\nsnippet llSubStringIndex\\n\tllSubStringIndex(${1:string source}, ${2:string pattern})\\nsnippet llTakeControls\\n\tllTakeControls(${1:integer controls}, ${2:integer accept}, ${3:integer pass_on});\\n\t$0\\nsnippet llTan\\n\tllTan(${1:float theta})\\nsnippet llTarget\\n\tllTarget(${1:vector position}, ${2:float range})\\nsnippet llTargetOmega\\n\tllTargetOmega(${1:vector axis}, ${2:float spinrate}, ${3:float gain});\\n\t$0\\nsnippet llTargetRemove\\n\tllTargetRemove(${1:integer handle});\\n\t$0\\nsnippet llTeleportAgent\\n\tllTeleportAgent(${1:key agent}, ${2:string landmark}, ${3:vector position}, ${4:vector look_at});\\n\t$0\\nsnippet llTeleportAgentGlobalCoords\\n\tllTeleportAgentGlobalCoords(${1:key agent}, ${2:vector global_coordinates}, ${3:vector region_coordinates}, ${4:vector look_at});\\n\t$0\\nsnippet llTeleportAgentHome\\n\tllTeleportAgentHome(${1:key agent});\\n\t$0\\nsnippet llTextBox\\n\tllTextBox(${1:key agent}, ${2:string message}, ${3:integer channel});\\n\t$0\\nsnippet llToLower\\n\tllToLower(${1:string src})\\nsnippet llToUpper\\n\tllToUpper(${1:string src})\\nsnippet llTransferLindenDollars\\n\tllTransferLindenDollars(${1:key destination}, ${2:integer amount})\\nsnippet llTriggerSound\\n\tllTriggerSound(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llTriggerSoundLimited\\n\tllTriggerSoundLimited(${1:string sound}, ${2:float volume}, ${3:vector top_north_east}, ${4:vector bottom_south_west});\\n\t$0\\nsnippet llUnescapeURL\\n\tllUnescapeURL(${1:string url})\\nsnippet llUnSit\\n\tllUnSit(${1:key id});\\n\t$0\\nsnippet llUpdateCharacter\\n\tllUpdateCharacter(${1:list options})\\nsnippet llUpdateKeyValue\\n\tllUpdateKeyValue(${1:string k}, ${2:string v}, ${3:integer checked}, ${4:string ov})\\nsnippet llVecDist\\n\tllVecDist(${1:vector vec_a}, ${2:vector vec_b})\\nsnippet llVecMag\\n\tllVecMag(${1:vector vec})\\nsnippet llVecNorm\\n\tllVecNorm(${1:vector vec})\\nsnippet llVolumeDetect\\n\tllVolumeDetect(${1:integer detect});\\n\t$0\\nsnippet llWanderWithin\\n\tllWanderWithin(${1:vector origin}, ${2:vector dist}, ${3:list options});\\n\t$0\\nsnippet llWater\\n\tllWater(${1:vector offset});\\n\t$0\\nsnippet llWhisper\\n\tllWhisper(${1:integer channel}, ${2:string msg});\\n\t$0\\nsnippet llWind\\n\tllWind(${1:vector offset});\\n\t$0\\nsnippet llXorBase64\\n\tllXorBase64(${1:string str1}, ${2:string str2})\\nsnippet money\\n\tmoney(${1:key id}, ${2:integer amount})\\n\t{\\n\t\t$0\\n\t}\\nsnippet object_rez\\n\tobject_rez(${1:key id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet on_rez\\n\ton_rez(${1:integer start_param})\\n\t{\\n\t\t$0\\n\t}\\nsnippet path_update\\n\tpath_update(${1:integer type}, ${2:list reserved})\\n\t{\\n\t\t$0\\n\t}\\nsnippet remote_data\\n\tremote_data(${1:integer event_type}, ${2:key channel}, ${3:key message_id}, ${4:string sender}, ${5:integer idata}, ${6:string sdata})\\n\t{\\n\t\t$0\\n\t}\\nsnippet run_time_permissions\\n\trun_time_permissions(${1:integer perm})\\n\t{\\n\t\t$0\\n\t}\\nsnippet sensor\\n\tsensor(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet state\\n\tstate ${1:name}\\nsnippet touch\\n\ttouch(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet touch_end\\n\ttouch_end(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet touch_start\\n\ttouch_start(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet transaction_result\\n\ttransaction_result(${1:key id}, ${2:integer success}, ${3:string data})\\n\t{\\n\t\t$0\\n\t}\\nsnippet while\\n\twhile (${1:condition})\\n\t{\\n\t\t$0\\n\t}\\n\",t.scope=\"lsl\"});                (function() {\n                    window.require([\"ace/snippets/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/lua.js",
    "content": "define(\"ace/snippets/lua\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet #!\\n\t#!/usr/bin/env lua\\n\t$1\\nsnippet local\\n\tlocal ${1:x} = ${2:1}\\nsnippet fun\\n\tfunction ${1:fname}(${2:...})\\n\t\t${3:-- body}\\n\tend\\nsnippet for\\n\tfor ${1:i}=${2:1},${3:10} do\\n\t\t${4:print(i)}\\n\tend\\nsnippet forp\\n\tfor ${1:i},${2:v} in pairs(${3:table_name}) do\\n\t   ${4:-- body}\\n\tend\\nsnippet fori\\n\tfor ${1:i},${2:v} in ipairs(${3:table_name}) do\\n\t   ${4:-- body}\\n\tend\\n\",t.scope=\"lua\"});                (function() {\n                    window.require([\"ace/snippets/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/luapage.js",
    "content": "define(\"ace/snippets/luapage\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"luapage\"});                (function() {\n                    window.require([\"ace/snippets/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/lucene.js",
    "content": "define(\"ace/snippets/lucene\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"lucene\"});                (function() {\n                    window.require([\"ace/snippets/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/makefile.js",
    "content": "define(\"ace/snippets/makefile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet ifeq\\n\tifeq (${1:cond0},${2:cond1})\\n\t\t${3:code}\\n\tendif\\n\",t.scope=\"makefile\"});                (function() {\n                    window.require([\"ace/snippets/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/markdown.js",
    "content": "define(\"ace/snippets/markdown\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Markdown\\n\\n# Includes octopress (http://octopress.org/) snippets\\n\\nsnippet [\\n\t[${1:text}](http://${2:address} \"${3:title}\")\\nsnippet [*\\n\t[${1:link}](${2:`@*`} \"${3:title}\")${4}\\n\\nsnippet [:\\n\t[${1:id}]: http://${2:url} \"${3:title}\"\\nsnippet [:*\\n\t[${1:id}]: ${2:`@*`} \"${3:title}\"\\n\\nsnippet ![\\n\t![${1:alttext}](${2:/images/image.jpg} \"${3:title}\")\\nsnippet ![*\\n\t![${1:alt}](${2:`@*`} \"${3:title}\")${4}\\n\\nsnippet ![:\\n\t![${1:id}]: ${2:url} \"${3:title}\"\\nsnippet ![:*\\n\t![${1:id}]: ${2:`@*`} \"${3:title}\"\\n\\nsnippet ===\\nregex /^/=+/=*//\\n\t${PREV_LINE/./=/g}\\n\t\\n\t${0}\\nsnippet ---\\nregex /^/-+/-*//\\n\t${PREV_LINE/./-/g}\\n\t\\n\t${0}\\nsnippet blockquote\\n\t{% blockquote %}\\n\t${1:quote}\\n\t{% endblockquote %}\\n\\nsnippet blockquote-author\\n\t{% blockquote ${1:author}, ${2:title} %}\\n\t${3:quote}\\n\t{% endblockquote %}\\n\\nsnippet blockquote-link\\n\t{% blockquote ${1:author} ${2:URL} ${3:link_text} %}\\n\t${4:quote}\\n\t{% endblockquote %}\\n\\nsnippet bt-codeblock-short\\n\t```\\n\t${1:code_snippet}\\n\t```\\n\\nsnippet bt-codeblock-full\\n\t``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\\n\t${5:code_snippet}\\n\t```\\n\\nsnippet codeblock-short\\n\t{% codeblock %}\\n\t${1:code_snippet}\\n\t{% endcodeblock %}\\n\\nsnippet codeblock-full\\n\t{% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\\n\t${5:code_snippet}\\n\t{% endcodeblock %}\\n\\nsnippet gist-full\\n\t{% gist ${1:gist_id} ${2:filename} %}\\n\\nsnippet gist-short\\n\t{% gist ${1:gist_id} %}\\n\\nsnippet img\\n\t{% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\\n\\nsnippet youtube\\n\t{% youtube ${1:video_id} %}\\n\\n# The quote should appear only once in the text. It is inherently part of it.\\n# See http://octopress.org/docs/plugins/pullquote/ for more info.\\n\\nsnippet pullquote\\n\t{% pullquote %}\\n\t${1:text} {\" ${2:quote} \"} ${3:text}\\n\t{% endpullquote %}\\n',t.scope=\"markdown\"});                (function() {\n                    window.require([\"ace/snippets/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/mask.js",
    "content": "define(\"ace/snippets/mask\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mask\"});                (function() {\n                    window.require([\"ace/snippets/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/matlab.js",
    "content": "define(\"ace/snippets/matlab\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"matlab\"});                (function() {\n                    window.require([\"ace/snippets/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/maze.js",
    "content": "define(\"ace/snippets/maze\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet >\\ndescription assignment\\nscope maze\\n\t-> ${1}= ${2}\\n\\nsnippet >\\ndescription if\\nscope maze\\n\t-> IF ${2:**} THEN %${3:L} ELSE %${4:R}\\n\",t.scope=\"maze\"});                (function() {\n                    window.require([\"ace/snippets/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/mel.js",
    "content": "define(\"ace/snippets/mel\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mel\"});                (function() {\n                    window.require([\"ace/snippets/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/mixal.js",
    "content": "define(\"ace/snippets/mixal\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mixal\"});                (function() {\n                    window.require([\"ace/snippets/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/mushcode.js",
    "content": "define(\"ace/snippets/mushcode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mushcode\"});                (function() {\n                    window.require([\"ace/snippets/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/mysql.js",
    "content": "define(\"ace/snippets/mysql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mysql\"});                (function() {\n                    window.require([\"ace/snippets/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/nix.js",
    "content": "define(\"ace/snippets/nix\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"nix\"});                (function() {\n                    window.require([\"ace/snippets/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/nsis.js",
    "content": "define(\"ace/snippets/nsis\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/objectivec.js",
    "content": "define(\"ace/snippets/objectivec\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"objectivec\"});                (function() {\n                    window.require([\"ace/snippets/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/ocaml.js",
    "content": "define(\"ace/snippets/ocaml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ocaml\"});                (function() {\n                    window.require([\"ace/snippets/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/pascal.js",
    "content": "define(\"ace/snippets/pascal\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"pascal\"});                (function() {\n                    window.require([\"ace/snippets/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/perl.js",
    "content": "define(\"ace/snippets/perl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# #!/usr/bin/perl\\nsnippet #!\\n\t#!/usr/bin/env perl\\n\\n# Hash Pointer\\nsnippet .\\n\t =>\\n# Function\\nsnippet sub\\n\tsub ${1:function_name} {\\n\t\t${2:#body ...}\\n\t}\\n# Conditional\\nsnippet if\\n\tif (${1}) {\\n\t\t${2:# body...}\\n\t}\\n# Conditional if..else\\nsnippet ife\\n\tif (${1}) {\\n\t\t${2:# body...}\\n\t}\\n\telse {\\n\t\t${3:# else...}\\n\t}\\n# Conditional if..elsif..else\\nsnippet ifee\\n\tif (${1}) {\\n\t\t${2:# body...}\\n\t}\\n\telsif (${3}) {\\n\t\t${4:# elsif...}\\n\t}\\n\telse {\\n\t\t${5:# else...}\\n\t}\\n# Conditional One-line\\nsnippet xif\\n\t${1:expression} if ${2:condition};${3}\\n# Unless conditional\\nsnippet unless\\n\tunless (${1}) {\\n\t\t${2:# body...}\\n\t}\\n# Unless conditional One-line\\nsnippet xunless\\n\t${1:expression} unless ${2:condition};${3}\\n# Try/Except\\nsnippet eval\\n\tlocal $@;\\n\teval {\\n\t\t${1:# do something risky...}\\n\t};\\n\tif (my $e = $@) {\\n\t\t${2:# handle failure...}\\n\t}\\n# While Loop\\nsnippet wh\\n\twhile (${1}) {\\n\t\t${2:# body...}\\n\t}\\n# While Loop One-line\\nsnippet xwh\\n\t${1:expression} while ${2:condition};${3}\\n# C-style For Loop\\nsnippet cfor\\n\tfor (my $${2:var} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\t\t${4:# body...}\\n\t}\\n# For loop one-line\\nsnippet xfor\\n\t${1:expression} for @${2:array};${3}\\n# Foreach Loop\\nsnippet for\\n\tforeach my $${1:x} (@${2:array}) {\\n\t\t${3:# body...}\\n\t}\\n# Foreach Loop One-line\\nsnippet fore\\n\t${1:expression} foreach @${2:array};${3}\\n# Package\\nsnippet package\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`};\\n\\n\t${2}\\n\\n\t1;\\n\\n\t__END__\\n# Package syntax perl >= 5.14\\nsnippet packagev514\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`} ${2:0.99};\\n\\n\t${3}\\n\\n\t1;\\n\\n\t__END__\\n#moose\\nsnippet moose\\n\tuse Moose;\\n\tuse namespace::autoclean;\\n\t${1:#}BEGIN {extends '${2:ParentClass}'};\\n\\n\t${3}\\n# parent\\nsnippet parent\\n\tuse parent qw(${1:Parent Class});\\n# Read File\\nsnippet slurp\\n\tmy $${1:var} = do { local $/; open my $file, '<', \\\"${2:file}\\\"; <$file> };\\n\t${3}\\n# strict warnings\\nsnippet strwar\\n\tuse strict;\\n\tuse warnings;\\n# older versioning with perlcritic bypass\\nsnippet vers\\n\t## no critic\\n\tour $VERSION = '${1:version}';\\n\teval $VERSION;\\n\t## use critic\\n# new 'switch' like feature\\nsnippet switch\\n\tuse feature 'switch';\\n\\n# Anonymous subroutine\\nsnippet asub\\n\tsub {\\n\t \t${1:# body }\\n\t}\\n\\n\\n\\n# Begin block\\nsnippet begin\\n\tBEGIN {\\n\t\t${1:# begin body}\\n\t}\\n\\n# call package function with some parameter\\nsnippet pkgmv\\n\t__PACKAGE__->${1:package_method}(${2:var})\\n\\n# call package function without a parameter\\nsnippet pkgm\\n\t__PACKAGE__->${1:package_method}()\\n\\n# call package \\\"get_\\\" function without a parameter\\nsnippet pkget\\n\t__PACKAGE__->get_${1:package_method}()\\n\\n# call package function with a parameter\\nsnippet pkgetv\\n\t__PACKAGE__->get_${1:package_method}(${2:var})\\n\\n# complex regex\\nsnippet qrx\\n\tqr/\\n\t     ${1:regex}\\n\t/xms\\n\\n#simpler regex\\nsnippet qr/\\n\tqr/${1:regex}/x\\n\\n#given\\nsnippet given\\n\tgiven ($${1:var}) {\\n\t\t${2:# cases}\\n\t\t${3:# default}\\n\t}\\n\\n# switch-like case\\nsnippet when\\n\twhen (${1:case}) {\\n\t\t${2:# body}\\n\t}\\n\\n# hash slice\\nsnippet hslice\\n\t@{ ${1:hash}  }{ ${2:array} }\\n\\n\\n# map\\nsnippet map\\n\tmap {  ${2: body }    }  ${1: @array } ;\\n\\n\\n\\n# Pod stub\\nsnippet ppod\\n\t=head1 NAME\\n\\n\t${1:ClassName} - ${2:ShortDesc}\\n\\n\t=head1 SYNOPSIS\\n\\n\t  use $1;\\n\\n\t  ${3:# synopsis...}\\n\\n\t=head1 DESCRIPTION\\n\\n\t${4:# longer description...}\\n\\n\\n\t=head1 INTERFACE\\n\\n\\n\t=head1 DEPENDENCIES\\n\\n\\n\t=head1 SEE ALSO\\n\\n\\n# Heading for a subroutine stub\\nsnippet psub\\n\t=head2 ${1:MethodName}\\n\\n\t${2:Summary....}\\n\\n# Heading for inline subroutine pod\\nsnippet psubi\\n\t=head2 ${1:MethodName}\\n\\n\t${2:Summary...}\\n\\n\\n\t=cut\\n# inline documented subroutine\\nsnippet subpod\\n\t=head2 $1\\n\\n\tSummary of $1\\n\\n\t=cut\\n\\n\tsub ${1:subroutine_name} {\\n\t\t${2:# body...}\\n\t}\\n# Subroutine signature\\nsnippet parg\\n\t=over 2\\n\\n\t=item\\n\tArguments\\n\\n\\n\t=over 3\\n\\n\t=item\\n\tC<${1:DataStructure}>\\n\\n\t  ${2:Sample}\\n\\n\\n\t=back\\n\\n\\n\t=item\\n\tReturn\\n\\n\t=over 3\\n\\n\\n\t=item\\n\tC<${3:...return data}>\\n\\n\\n\t=back\\n\\n\\n\t=back\\n\\n\\n\\n# Moose has\\nsnippet has\\n\thas ${1:attribute} => (\\n\t\tis\t    => '${2:ro|rw}',\\n\t\tisa \t=> '${3:Str|Int|HashRef|ArrayRef|etc}',\\n\t\tdefault => sub {\\n\t\t\t${4:defaultvalue}\\n\t\t},\\n\t\t${5:# other attributes}\\n\t);\\n\\n\\n# override\\nsnippet override\\n\toverride ${1:attribute} => sub {\\n\t\t${2:# my $self = shift;};\\n\t\t${3:# my ($self, $args) = @_;};\\n\t};\\n\\n\\n# use test classes\\nsnippet tuse\\n\tuse Test::More;\\n\tuse Test::Deep; # (); # uncomment to stop prototype errors\\n\tuse Test::Exception;\\n\\n# local test lib\\nsnippet tlib\\n\tuse lib qw{ ./t/lib };\\n\\n#test methods\\nsnippet tmeths\\n\t$ENV{TEST_METHOD} = '${1:regex}';\\n\\n# runtestclass\\nsnippet trunner\\n\tuse ${1:test_class};\\n\t$1->runtests();\\n\\n# Test::Class-style test\\nsnippet tsub\\n\tsub t${1:number}_${2:test_case} :Test(${3:num_of_tests}) {\\n\t\tmy $self = shift;\\n\t\t${4:#  body}\\n\\n\t}\\n\\n# Test::Routine-style test\\nsnippet trsub\\n\ttest ${1:test_name} => { description => '${2:Description of test.}'} => sub {\\n\t\tmy ($self) = @_;\\n\t\t${3:# test code}\\n\t};\\n\\n#prep test method\\nsnippet tprep\\n\tsub prep${1:number}_${2:test_case} :Test(startup) {\\n\t\tmy $self = shift;\\n\t\t${4:#  body}\\n\t}\\n\\n# cause failures to print stack trace\\nsnippet debug_trace\\n\tuse Carp; # 'verbose';\\n\t# cloak \\\"die\\\"\\n\t# warn \\\"warning\\\"\\n\t$SIG{'__DIE__'} = sub {\\n\t\trequire Carp; Carp::confess\\n\t};\\n\\n\",t.scope=\"perl\"});                (function() {\n                    window.require([\"ace/snippets/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/perl6.js",
    "content": "define(\"ace/snippets/perl6\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"perl6\"});                (function() {\n                    window.require([\"ace/snippets/perl6\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/pgsql.js",
    "content": "define(\"ace/snippets/pgsql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"pgsql\"});                (function() {\n                    window.require([\"ace/snippets/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/php.js",
    "content": "define(\"ace/snippets/php\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet ec\\n\techo ${1};\\nsnippet ns\\n\tnamespace ${1:Foo\\\\Bar\\\\Baz};\\n\t${2}\\nsnippet use\\n\tuse ${1:Foo\\\\Bar\\\\Baz};\\n\t${2}\\nsnippet c\\n\t${1:abstract }class ${2:$FILENAME}\\n\t{\\n\t\t${3}\\n\t}\\nsnippet i\\n\tinterface ${1:$FILENAME}\\n\t{\\n\t\t${2}\\n\t}\\nsnippet t.\\n\t$this->${1}\\nsnippet f\\n\tfunction ${1:foo}(${2:array }${3:$bar})\\n\t{\\n\t\t${4}\\n\t}\\n# method\\nsnippet m\\n\t${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\\n\t{\\n\t\t${7}\\n\t}\\n# setter method\\nsnippet sm\\n\t/**\\n\t * Sets the value of ${1:foo}\\n\t *\\n\t * @param ${2:$1} $$1 ${3:description}\\n\t *\\n\t * @return ${4:$FILENAME}\\n\t */\\n\t${5:public} function set${6:$2}(${7:$2 }$$1)\\n\t{\\n\t\t$this->${8:$1} = $$1;\\n\t\treturn $this;\\n\t}${9}\\n# getter method\\nsnippet gm\\n\t/**\\n\t * Gets the value of ${1:foo}\\n\t *\\n\t * @return ${2:$1}\\n\t */\\n\t${3:public} function get${4:$2}()\\n\t{\\n\t\treturn $this->${5:$1};\\n\t}${6}\\n#setter\\nsnippet $s\\n\t${1:$foo}->set${2:Bar}(${3});\\n#getter\\nsnippet $g\\n\t${1:$foo}->get${2:Bar}();\\n\\n# Tertiary conditional\\nsnippet =?:\\n\t$${1:foo} = ${2:true} ? ${3:a} : ${4};\\nsnippet ?:\\n\t${1:true} ? ${2:a} : ${3}\\n\\nsnippet C\\n\t$_COOKIE['${1:variable}']${2}\\nsnippet E\\n\t$_ENV['${1:variable}']${2}\\nsnippet F\\n\t$_FILES['${1:variable}']${2}\\nsnippet G\\n\t$_GET['${1:variable}']${2}\\nsnippet P\\n\t$_POST['${1:variable}']${2}\\nsnippet R\\n\t$_REQUEST['${1:variable}']${2}\\nsnippet S\\n\t$_SERVER['${1:variable}']${2}\\nsnippet SS\\n\t$_SESSION['${1:variable}']${2}\\n\\n# the following are old ones\\nsnippet inc\\n\tinclude '${1:file}';${2}\\nsnippet inc1\\n\tinclude_once '${1:file}';${2}\\nsnippet req\\n\trequire '${1:file}';${2}\\nsnippet req1\\n\trequire_once '${1:file}';${2}\\n# Start Docblock\\nsnippet /*\\n\t/**\\n\t * ${1}\\n\t */\\n# Class - post doc\\nsnippet doc_cp\\n\t/**\\n\t * ${1:undocumented class}\\n\t *\\n\t * @package ${2:default}\\n\t * @subpackage ${3:default}\\n\t * @author ${4:`g:snips_author`}\\n\t */${5}\\n# Class Variable - post doc\\nsnippet doc_vp\\n\t/**\\n\t * ${1:undocumented class variable}\\n\t *\\n\t * @var ${2:string}\\n\t */${3}\\n# Class Variable\\nsnippet doc_v\\n\t/**\\n\t * ${3:undocumented class variable}\\n\t *\\n\t * @var ${4:string}\\n\t */\\n\t${1:var} $${2};${5}\\n# Class\\nsnippet doc_c\\n\t/**\\n\t * ${3:undocumented class}\\n\t *\\n\t * @package ${4:default}\\n\t * @subpackage ${5:default}\\n\t * @author ${6:`g:snips_author`}\\n\t */\\n\t${1:}class ${2:}\\n\t{\\n\t\t${7}\\n\t} // END $1class $2\\n# Constant Definition - post doc\\nsnippet doc_dp\\n\t/**\\n\t * ${1:undocumented constant}\\n\t */${2}\\n# Constant Definition\\nsnippet doc_d\\n\t/**\\n\t * ${3:undocumented constant}\\n\t */\\n\tdefine(${1}, ${2});${4}\\n# Function - post doc\\nsnippet doc_fp\\n\t/**\\n\t * ${1:undocumented function}\\n\t *\\n\t * @return ${2:void}\\n\t * @author ${3:`g:snips_author`}\\n\t */${4}\\n# Function signature\\nsnippet doc_s\\n\t/**\\n\t * ${4:undocumented function}\\n\t *\\n\t * @return ${5:void}\\n\t * @author ${6:`g:snips_author`}\\n\t */\\n\t${1}function ${2}(${3});${7}\\n# Function\\nsnippet doc_f\\n\t/**\\n\t * ${4:undocumented function}\\n\t *\\n\t * @return ${5:void}\\n\t * @author ${6:`g:snips_author`}\\n\t */\\n\t${1}function ${2}(${3})\\n\t{${7}\\n\t}\\n# Header\\nsnippet doc_h\\n\t/**\\n\t * ${1}\\n\t *\\n\t * @author ${2:`g:snips_author`}\\n\t * @version ${3:$Id$}\\n\t * @copyright ${4:$2}, `strftime('%d %B, %Y')`\\n\t * @package ${5:default}\\n\t */\\n\\n# Interface\\nsnippet interface\\n\t/**\\n\t * ${2:undocumented class}\\n\t *\\n\t * @package ${3:default}\\n\t * @author ${4:`g:snips_author`}\\n\t */\\n\tinterface ${1:$FILENAME}\\n\t{\\n\t\t${5}\\n\t}\\n# class ...\\nsnippet class\\n\t/**\\n\t * ${1}\\n\t */\\n\tclass ${2:$FILENAME}\\n\t{\\n\t\t${3}\\n\t\t/**\\n\t\t * ${4}\\n\t\t */\\n\t\t${5:public} function ${6:__construct}(${7:argument})\\n\t\t{\\n\t\t\t${8:// code...}\\n\t\t}\\n\t}\\n# define(...)\\nsnippet def\\n\tdefine('${1}'${2});${3}\\n# defined(...)\\nsnippet def?\\n\t${1}defined('${2}')${3}\\nsnippet wh\\n\twhile (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t}\\n# do ... while\\nsnippet do\\n\tdo {\\n\t\t${2:// code... }\\n\t} while (${1:/* condition */});\\nsnippet if\\n\tif (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t}\\nsnippet ife\\n\tif (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t} else {\\n\t\t${3:// code...}\\n\t}\\n\t${4}\\nsnippet else\\n\telse {\\n\t\t${1:// code...}\\n\t}\\nsnippet elseif\\n\telseif (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t}\\nsnippet switch\\n\tswitch ($${1:variable}) {\\n\t\tcase '${2:value}':\\n\t\t\t${3:// code...}\\n\t\t\tbreak;\\n\t\t${5}\\n\t\tdefault:\\n\t\t\t${4:// code...}\\n\t\t\tbreak;\\n\t}\\nsnippet case\\n\tcase '${1:value}':\\n\t\t${2:// code...}\\n\t\tbreak;${3}\\nsnippet for\\n\tfor ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\t\t${4: // code...}\\n\t}\\nsnippet foreach\\n\tforeach ($${1:variable} as $${2:value}) {\\n\t\t${3:// code...}\\n\t}\\nsnippet foreachk\\n\tforeach ($${1:variable} as $${2:key} => $${3:value}) {\\n\t\t${4:// code...}\\n\t}\\n# $... = array (...)\\nsnippet array\\n\t$${1:arrayName} = array('${2}' => ${3});${4}\\nsnippet try\\n\ttry {\\n\t\t${2}\\n\t} catch (${1:Exception} $e) {\\n\t}\\n# lambda with closure\\nsnippet lambda\\n\t${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\\n\t\t${4}\\n\t};\\n# pre_dump();\\nsnippet pd\\n\techo '<pre>'; var_dump(${1}); echo '</pre>';\\n# pre_dump(); die();\\nsnippet pdd\\n\techo '<pre>'; var_dump(${1}); echo '</pre>'; die(${2:});\\nsnippet vd\\n\tvar_dump(${1});\\nsnippet vdd\\n\tvar_dump(${1}); die(${2:});\\nsnippet http_redirect\\n\theader (\\\"HTTP/1.1 301 Moved Permanently\\\");\\n\theader (\\\"Location: \\\".URL);\\n\texit();\\n# Getters & Setters\\nsnippet gs\\n\t/**\\n\t * Gets the value of ${1:foo}\\n\t *\\n\t * @return ${2:$1}\\n\t */\\n\tpublic function get${3:$2}()\\n\t{\\n\t\treturn $this->${4:$1};\\n\t}\\n\\n\t/**\\n\t * Sets the value of $1\\n\t *\\n\t * @param $2 $$1 ${5:description}\\n\t *\\n\t * @return ${6:$FILENAME}\\n\t */\\n\tpublic function set$3(${7:$2 }$$1)\\n\t{\\n\t\t$this->$4 = $$1;\\n\t\treturn $this;\\n\t}${8}\\n# anotation, get, and set, useful for doctrine\\nsnippet ags\\n\t/**\\n\t * ${1:description}\\n\t *\\n\t * @${7}\\n\t */\\n\t${2:protected} $${3:foo};\\n\\n\tpublic function get${4:$3}()\\n\t{\\n\t\treturn $this->$3;\\n\t}\\n\\n\tpublic function set$4(${5:$4 }$${6:$3})\\n\t{\\n\t\t$this->$3 = $$6;\\n\t\treturn $this;\\n\t}\\nsnippet rett\\n\treturn true;\\nsnippet retf\\n\treturn false;\\nscope html\\nsnippet <?\\n\t<?php\\n\\n\t${1}\\nsnippet <?e\\n\t<?php echo ${1} ?>\\n# this one is for php5.4\\nsnippet <?=\\n\t<?=${1}?>\\nsnippet ifil\\n\t<?php if (${1:/* condition */}): ?>\\n\t\t${2:<!-- code... -->}\\n\t<?php endif; ?>\\nsnippet ifeil\\n\t<?php if (${1:/* condition */}): ?>\\n\t\t${2:<!-- html... -->}\\n\t<?php else: ?>\\n\t\t${3:<!-- html... -->}\\n\t<?php endif; ?>\\n\t${4}\\nsnippet foreachil\\n\t<?php foreach ($${1:variable} as $${2:value}): ?>\\n\t\t${3:<!-- html... -->}\\n\t<?php endforeach; ?>\\nsnippet foreachkil\\n\t<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?>\\n\t\t${4:<!-- html... -->}\\n\t<?php endforeach; ?>\\nscope html-tag\\nsnippet ifil\\\\n\\\\\\n\t<?php if (${1:true}): ?>${2:code}<?php endif; ?>\\nsnippet ifeil\\\\n\\\\\\n\t<?php if (${1:true}): ?>${2:code}<?php else: ?>${3:code}<?php endif; ?>${4}\\n\",t.scope=\"php\"});                (function() {\n                    window.require([\"ace/snippets/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/php_laravel_blade.js",
    "content": "define(\"ace/snippets/php_laravel_blade\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"php\"});                (function() {\n                    window.require([\"ace/snippets/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/pig.js",
    "content": "define(\"ace/snippets/pig\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"pig\"});                (function() {\n                    window.require([\"ace/snippets/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/plain_text.js",
    "content": "define(\"ace/snippets/plain_text\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"plain_text\"});                (function() {\n                    window.require([\"ace/snippets/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/powershell.js",
    "content": "define(\"ace/snippets/powershell\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"powershell\"});                (function() {\n                    window.require([\"ace/snippets/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/praat.js",
    "content": "define(\"ace/snippets/praat\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"praat\"});                (function() {\n                    window.require([\"ace/snippets/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/prolog.js",
    "content": "define(\"ace/snippets/prolog\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"prolog\"});                (function() {\n                    window.require([\"ace/snippets/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/properties.js",
    "content": "define(\"ace/snippets/properties\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"properties\"});                (function() {\n                    window.require([\"ace/snippets/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/protobuf.js",
    "content": "define(\"ace/snippets/protobuf\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"\",t.scope=\"protobuf\"});                (function() {\n                    window.require([\"ace/snippets/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/puppet.js",
    "content": "define(\"ace/snippets/puppet\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"puppet\"});                (function() {\n                    window.require([\"ace/snippets/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/python.js",
    "content": "define(\"ace/snippets/python\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet #!\\n\t#!/usr/bin/env python\\nsnippet imp\\n\timport ${1:module}\\nsnippet from\\n\tfrom ${1:package} import ${2:module}\\n# Module Docstring\\nsnippet docs\\n\t\\'\\'\\'\\n\tFile: ${1:FILENAME:file_name}\\n\tAuthor: ${2:author}\\n\tDescription: ${3}\\n\t\\'\\'\\'\\nsnippet wh\\n\twhile ${1:condition}:\\n\t\t${2:# TODO: write code...}\\n# dowh - does the same as do...while in other languages\\nsnippet dowh\\n\twhile True:\\n\t\t${1:# TODO: write code...}\\n\t\tif ${2:condition}:\\n\t\t\tbreak\\nsnippet with\\n\twith ${1:expr} as ${2:var}:\\n\t\t${3:# TODO: write code...}\\n# New Class\\nsnippet cl\\n\tclass ${1:ClassName}(${2:object}):\\n\t\t\"\"\"${3:docstring for $1}\"\"\"\\n\t\tdef __init__(self, ${4:arg}):\\n\t\t\t${5:super($1, self).__init__()}\\n\t\t\tself.$4 = $4\\n\t\t\t${6}\\n# New Function\\nsnippet def\\n\tdef ${1:fname}(${2:`indent(\\'.\\') ? \\'self\\' : \\'\\'`}):\\n\t\t\"\"\"${3:docstring for $1}\"\"\"\\n\t\t${4:# TODO: write code...}\\nsnippet deff\\n\tdef ${1:fname}(${2:`indent(\\'.\\') ? \\'self\\' : \\'\\'`}):\\n\t\t${3:# TODO: write code...}\\n# New Method\\nsnippet defs\\n\tdef ${1:mname}(self, ${2:arg}):\\n\t\t${3:# TODO: write code...}\\n# New Property\\nsnippet property\\n\tdef ${1:foo}():\\n\t\tdoc = \"${2:The $1 property.}\"\\n\t\tdef fget(self):\\n\t\t\t${3:return self._$1}\\n\t\tdef fset(self, value):\\n\t\t\t${4:self._$1 = value}\\n# Ifs\\nsnippet if\\n\tif ${1:condition}:\\n\t\t${2:# TODO: write code...}\\nsnippet el\\n\telse:\\n\t\t${1:# TODO: write code...}\\nsnippet ei\\n\telif ${1:condition}:\\n\t\t${2:# TODO: write code...}\\n# For\\nsnippet for\\n\tfor ${1:item} in ${2:items}:\\n\t\t${3:# TODO: write code...}\\n# Encodes\\nsnippet cutf8\\n\t# -*- coding: utf-8 -*-\\nsnippet clatin1\\n\t# -*- coding: latin-1 -*-\\nsnippet cascii\\n\t# -*- coding: ascii -*-\\n# Lambda\\nsnippet ld\\n\t${1:var} = lambda ${2:vars} : ${3:action}\\nsnippet .\\n\tself.\\nsnippet try Try/Except\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\nsnippet try Try/Except/Else\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\n\telse:\\n\t\t${5:# TODO: write code...}\\nsnippet try Try/Except/Finally\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\n\tfinally:\\n\t\t${5:# TODO: write code...}\\nsnippet try Try/Except/Else/Finally\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\n\telse:\\n\t\t${5:# TODO: write code...}\\n\tfinally:\\n\t\t${6:# TODO: write code...}\\n# if __name__ == \\'__main__\\':\\nsnippet ifmain\\n\tif __name__ == \\'__main__\\':\\n\t\t${1:main()}\\n# __magic__\\nsnippet _\\n\t__${1:init}__${2}\\n# python debugger (pdb)\\nsnippet pdb\\n\timport pdb; pdb.set_trace()\\n# ipython debugger (ipdb)\\nsnippet ipdb\\n\timport ipdb; ipdb.set_trace()\\n# ipython debugger (pdbbb)\\nsnippet pdbbb\\n\timport pdbpp; pdbpp.set_trace()\\nsnippet pprint\\n\timport pprint; pprint.pprint(${1})${2}\\nsnippet \"\\n\t\"\"\"\\n\t${1:doc}\\n\t\"\"\"\\n# test function/method\\nsnippet test\\n\tdef test_${1:description}(${2:self}):\\n\t\t${3:# TODO: write code...}\\n# test case\\nsnippet testcase\\n\tclass ${1:ExampleCase}(unittest.TestCase):\\n\t\t\\n\t\tdef test_${2:description}(self):\\n\t\t\t${3:# TODO: write code...}\\nsnippet fut\\n\tfrom __future__ import ${1}\\n#getopt\\nsnippet getopt\\n\ttry:\\n\t\t# Short option syntax: \"hv:\"\\n\t\t# Long option syntax: \"help\" or \"verbose=\"\\n\t\topts, args = getopt.getopt(sys.argv[1:], \"${1:short_options}\", [${2:long_options}])\\n\t\\n\texcept getopt.GetoptError, err:\\n\t\t# Print debug info\\n\t\tprint str(err)\\n\t\t${3:error_action}\\n\\n\tfor option, argument in opts:\\n\t\tif option in (\"-h\", \"--help\"):\\n\t\t\t${4}\\n\t\telif option in (\"-v\", \"--verbose\"):\\n\t\t\tverbose = argument\\n',t.scope=\"python\"});                (function() {\n                    window.require([\"ace/snippets/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/r.js",
    "content": "define(\"ace/snippets/r\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet #!\\n\t#!/usr/bin/env Rscript\\n\\n# includes\\nsnippet lib\\n\tlibrary(${1:package})\\nsnippet req\\n\trequire(${1:package})\\nsnippet source\\n\tsource(\\'${1:file}\\')\\n\\n# conditionals\\nsnippet if\\n\tif (${1:condition}) {\\n\t\t${2:code}\\n\t}\\nsnippet el\\n\telse {\\n\t\t${1:code}\\n\t}\\nsnippet ei\\n\telse if (${1:condition}) {\\n\t\t${2:code}\\n\t}\\n\\n# functions\\nsnippet fun\\n\t${1:name} = function (${2:variables}) {\\n\t\t${3:code}\\n\t}\\nsnippet ret\\n\treturn(${1:code})\\n\\n# dataframes, lists, etc\\nsnippet df\\n\t${1:name}[${2:rows}, ${3:cols}]\\nsnippet c\\n\tc(${1:items})\\nsnippet li\\n\tlist(${1:items})\\nsnippet mat\\n\tmatrix(${1:data}, nrow=${2:rows}, ncol=${3:cols})\\n\\n# apply functions\\nsnippet apply\\n\tapply(${1:array}, ${2:margin}, ${3:function})\\nsnippet lapply\\n\tlapply(${1:list}, ${2:function})\\nsnippet sapply\\n\tsapply(${1:list}, ${2:function})\\nsnippet vapply\\n\tvapply(${1:list}, ${2:function}, ${3:type})\\nsnippet mapply\\n\tmapply(${1:function}, ${2:...})\\nsnippet tapply\\n\ttapply(${1:vector}, ${2:index}, ${3:function})\\nsnippet rapply\\n\trapply(${1:list}, ${2:function})\\n\\n# plyr functions\\nsnippet dd\\n\tddply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet dl\\n\tdlply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet da\\n\tdaply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet d_\\n\td_ply(${1:frame}, ${2:variables}, ${3:function})\\n\\nsnippet ad\\n\tadply(${1:array}, ${2:margin}, ${3:function})\\nsnippet al\\n\talply(${1:array}, ${2:margin}, ${3:function})\\nsnippet aa\\n\taaply(${1:array}, ${2:margin}, ${3:function})\\nsnippet a_\\n\ta_ply(${1:array}, ${2:margin}, ${3:function})\\n\\nsnippet ld\\n\tldply(${1:list}, ${2:function})\\nsnippet ll\\n\tllply(${1:list}, ${2:function})\\nsnippet la\\n\tlaply(${1:list}, ${2:function})\\nsnippet l_\\n\tl_ply(${1:list}, ${2:function})\\n\\nsnippet md\\n\tmdply(${1:matrix}, ${2:function})\\nsnippet ml\\n\tmlply(${1:matrix}, ${2:function})\\nsnippet ma\\n\tmaply(${1:matrix}, ${2:function})\\nsnippet m_\\n\tm_ply(${1:matrix}, ${2:function})\\n\\n# plot functions\\nsnippet pl\\n\tplot(${1:x}, ${2:y})\\nsnippet ggp\\n\tggplot(${1:data}, aes(${2:aesthetics}))\\nsnippet img\\n\t${1:(jpeg,bmp,png,tiff)}(filename=\"${2:filename}\", width=${3}, height=${4}, unit=\"${5}\")\\n\t${6:plot}\\n\tdev.off()\\n\\n# statistical test functions\\nsnippet fis\\n\tfisher.test(${1:x}, ${2:y})\\nsnippet chi\\n\tchisq.test(${1:x}, ${2:y})\\nsnippet tt\\n\tt.test(${1:x}, ${2:y})\\nsnippet wil\\n\twilcox.test(${1:x}, ${2:y})\\nsnippet cor\\n\tcor.test(${1:x}, ${2:y})\\nsnippet fte\\n\tvar.test(${1:x}, ${2:y})\\nsnippet kvt \\n\tkv.test(${1:x}, ${2:y})\\n',t.scope=\"r\"});                (function() {\n                    window.require([\"ace/snippets/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/razor.js",
    "content": "define(\"ace/snippets/razor\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet if\\n(${1} == ${2}) {\\n\t${3}\\n}\",t.scope=\"razor\"});                (function() {\n                    window.require([\"ace/snippets/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/rdoc.js",
    "content": "define(\"ace/snippets/rdoc\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"rdoc\"});                (function() {\n                    window.require([\"ace/snippets/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/red.js",
    "content": "define(\"ace/snippets/red\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\" \",t.scope=\"red\"});                (function() {\n                    window.require([\"ace/snippets/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/redshift.js",
    "content": "define(\"ace/snippets/redshift\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"redshift\"});                (function() {\n                    window.require([\"ace/snippets/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/rhtml.js",
    "content": "define(\"ace/snippets/rhtml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"rhtml\"});                (function() {\n                    window.require([\"ace/snippets/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/rst.js",
    "content": "define(\"ace/snippets/rst\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# rst\\n\\nsnippet :\\n\t:${1:field name}: ${2:field body}\\nsnippet *\\n\t*${1:Emphasis}*\\nsnippet **\\n\t**${1:Strong emphasis}**\\nsnippet _\\n\t\\\\`${1:hyperlink-name}\\\\`_\\n\t.. _\\\\`$1\\\\`: ${2:link-block}\\nsnippet =\\n\t${1:Title}\\n\t=====${2:=}\\n\t${3}\\nsnippet -\\n\t${1:Title}\\n\t-----${2:-}\\n\t${3}\\nsnippet cont:\\n\t.. contents::\\n\t\\n\",t.scope=\"rst\"});                (function() {\n                    window.require([\"ace/snippets/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/ruby.js",
    "content": "define(\"ace/snippets/ruby\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='########################################\\n# Ruby snippets - for Rails, see below #\\n########################################\\n\\n# encoding for Ruby 1.9\\nsnippet enc\\n\t# encoding: utf-8\\n\\n# #!/usr/bin/env ruby\\nsnippet #!\\n\t#!/usr/bin/env ruby\\n\t# encoding: utf-8\\n\\n# New Block\\nsnippet =b\\n\t=begin rdoc\\n\t\t${1}\\n\t=end\\nsnippet y\\n\t:yields: ${1:arguments}\\nsnippet rb\\n\t#!/usr/bin/env ruby -wKU\\nsnippet beg\\n\tbegin\\n\t\t${3}\\n\trescue ${1:Exception} => ${2:e}\\n\tend\\n\\nsnippet req require\\n\trequire \"${1}\"${2}\\nsnippet #\\n\t# =>\\nsnippet end\\n\t__END__\\nsnippet case\\n\tcase ${1:object}\\n\twhen ${2:condition}\\n\t\t${3}\\n\tend\\nsnippet when\\n\twhen ${1:condition}\\n\t\t${2}\\nsnippet def\\n\tdef ${1:method_name}\\n\t\t${2}\\n\tend\\nsnippet deft\\n\tdef test_${1:case_name}\\n\t\t${2}\\n\tend\\nsnippet if\\n\tif ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet ife\\n\tif ${1:condition}\\n\t\t${2}\\n\telse\\n\t\t${3}\\n\tend\\nsnippet elsif\\n\telsif ${1:condition}\\n\t\t${2}\\nsnippet unless\\n\tunless ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet while\\n\twhile ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet for\\n\tfor ${1:e} in ${2:c}\\n\t\t${3}\\n\tend\\nsnippet until\\n\tuntil ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet cla class .. end\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\t${2}\\n\tend\\nsnippet cla class .. initialize .. end\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\tdef initialize(${2:args})\\n\t\t\t${3}\\n\t\tend\\n\tend\\nsnippet cla class .. < ParentClass .. initialize .. end\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`} < ${2:ParentClass}\\n\t\tdef initialize(${3:args})\\n\t\t\t${4}\\n\t\tend\\n\tend\\nsnippet cla ClassName = Struct .. do .. end\\n\t${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`} = Struct.new(:${2:attr_names}) do\\n\t\tdef ${3:method_name}\\n\t\t\t${4}\\n\t\tend\\n\tend\\nsnippet cla class BlankSlate .. initialize .. end\\n\tclass ${1:BlankSlate}\\n\t\tinstance_methods.each { |meth| undef_method(meth) unless meth =~ /\\\\A__/ }\\n\tend\\nsnippet cla class << self .. end\\n\tclass << ${1:self}\\n\t\t${2}\\n\tend\\n# class .. < DelegateClass .. initialize .. end\\nsnippet cla-\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`} < DelegateClass(${2:ParentClass})\\n\t\tdef initialize(${3:args})\\n\t\t\tsuper(${4:del_obj})\\n\\n\t\t\t${5}\\n\t\tend\\n\tend\\nsnippet mod module .. end\\n\tmodule ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\t${2}\\n\tend\\nsnippet mod module .. module_function .. end\\n\tmodule ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\tmodule_function\\n\\n\t\t${2}\\n\tend\\nsnippet mod module .. ClassMethods .. end\\n\tmodule ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\tmodule ClassMethods\\n\t\t\t${2}\\n\t\tend\\n\\n\t\tmodule InstanceMethods\\n\\n\t\tend\\n\\n\t\tdef self.included(receiver)\\n\t\t\treceiver.extend         ClassMethods\\n\t\t\treceiver.send :include, InstanceMethods\\n\t\tend\\n\tend\\n# attr_reader\\nsnippet r\\n\tattr_reader :${1:attr_names}\\n# attr_writer\\nsnippet w\\n\tattr_writer :${1:attr_names}\\n# attr_accessor\\nsnippet rw\\n\tattr_accessor :${1:attr_names}\\nsnippet atp\\n\tattr_protected :${1:attr_names}\\nsnippet ata\\n\tattr_accessible :${1:attr_names}\\n# include Enumerable\\nsnippet Enum\\n\tinclude Enumerable\\n\\n\tdef each(&block)\\n\t\t${1}\\n\tend\\n# include Comparable\\nsnippet Comp\\n\tinclude Comparable\\n\\n\tdef <=>(other)\\n\t\t${1}\\n\tend\\n# extend Forwardable\\nsnippet Forw-\\n\textend Forwardable\\n# def self\\nsnippet defs\\n\tdef self.${1:class_method_name}\\n\t\t${2}\\n\tend\\n# def method_missing\\nsnippet defmm\\n\tdef method_missing(meth, *args, &blk)\\n\t\t${1}\\n\tend\\nsnippet defd\\n\tdef_delegator :${1:@del_obj}, :${2:del_meth}, :${3:new_name}\\nsnippet defds\\n\tdef_delegators :${1:@del_obj}, :${2:del_methods}\\nsnippet am\\n\talias_method :${1:new_name}, :${2:old_name}\\nsnippet app\\n\tif __FILE__ == $PROGRAM_NAME\\n\t\t${1}\\n\tend\\n# usage_if()\\nsnippet usai\\n\tif ARGV.${1}\\n\t\tabort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\\n\tend\\n# usage_unless()\\nsnippet usau\\n\tunless ARGV.${1}\\n\t\tabort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\\n\tend\\nsnippet array\\n\tArray.new(${1:10}) { |${2:i}| ${3} }\\nsnippet hash\\n\tHash.new { |${1:hash}, ${2:key}| $1[$2] = ${3} }\\nsnippet file File.foreach() { |line| .. }\\n\tFile.foreach(${1:\"path/to/file\"}) { |${2:line}| ${3} }\\nsnippet file File.read()\\n\tFile.read(${1:\"path/to/file\"})${2}\\nsnippet Dir Dir.global() { |file| .. }\\n\tDir.glob(${1:\"dir/glob/*\"}) { |${2:file}| ${3} }\\nsnippet Dir Dir[\"..\"]\\n\tDir[${1:\"glob/**/*.rb\"}]${2}\\nsnippet dir\\n\tFilename.dirname(__FILE__)\\nsnippet deli\\n\tdelete_if { |${1:e}| ${2} }\\nsnippet fil\\n\tfill(${1:range}) { |${2:i}| ${3} }\\n# flatten_once()\\nsnippet flao\\n\tinject(Array.new) { |${1:arr}, ${2:a}| $1.push(*$2)}${3}\\nsnippet zip\\n\tzip(${1:enums}) { |${2:row}| ${3} }\\n# downto(0) { |n| .. }\\nsnippet dow\\n\tdownto(${1:0}) { |${2:n}| ${3} }\\nsnippet ste\\n\tstep(${1:2}) { |${2:n}| ${3} }\\nsnippet tim\\n\ttimes { |${1:n}| ${2} }\\nsnippet upt\\n\tupto(${1:1.0/0.0}) { |${2:n}| ${3} }\\nsnippet loo\\n\tloop { ${1} }\\nsnippet ea\\n\teach { |${1:e}| ${2} }\\nsnippet ead\\n\teach do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet eab\\n\teach_byte { |${1:byte}| ${2} }\\nsnippet eac- each_char { |chr| .. }\\n\teach_char { |${1:chr}| ${2} }\\nsnippet eac- each_cons(..) { |group| .. }\\n\teach_cons(${1:2}) { |${2:group}| ${3} }\\nsnippet eai\\n\teach_index { |${1:i}| ${2} }\\nsnippet eaid\\n\teach_index do |${1:i}|\\n\t\t${2}\\n\tend\\nsnippet eak\\n\teach_key { |${1:key}| ${2} }\\nsnippet eakd\\n\teach_key do |${1:key}|\\n\t\t${2}\\n\tend\\nsnippet eal\\n\teach_line { |${1:line}| ${2} }\\nsnippet eald\\n\teach_line do |${1:line}|\\n\t\t${2}\\n\tend\\nsnippet eap\\n\teach_pair { |${1:name}, ${2:val}| ${3} }\\nsnippet eapd\\n\teach_pair do |${1:name}, ${2:val}|\\n\t\t${3}\\n\tend\\nsnippet eas-\\n\teach_slice(${1:2}) { |${2:group}| ${3} }\\nsnippet easd-\\n\teach_slice(${1:2}) do |${2:group}|\\n\t\t${3}\\n\tend\\nsnippet eav\\n\teach_value { |${1:val}| ${2} }\\nsnippet eavd\\n\teach_value do |${1:val}|\\n\t\t${2}\\n\tend\\nsnippet eawi\\n\teach_with_index { |${1:e}, ${2:i}| ${3} }\\nsnippet eawid\\n\teach_with_index do |${1:e},${2:i}|\\n\t\t${3}\\n\tend\\nsnippet reve\\n\treverse_each { |${1:e}| ${2} }\\nsnippet reved\\n\treverse_each do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet inj\\n\tinject(${1:init}) { |${2:mem}, ${3:var}| ${4} }\\nsnippet injd\\n\tinject(${1:init}) do |${2:mem}, ${3:var}|\\n\t\t${4}\\n\tend\\nsnippet map\\n\tmap { |${1:e}| ${2} }\\nsnippet mapd\\n\tmap do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet mapwi-\\n\tenum_with_index.map { |${1:e}, ${2:i}| ${3} }\\nsnippet sor\\n\tsort { |a, b| ${1} }\\nsnippet sorb\\n\tsort_by { |${1:e}| ${2} }\\nsnippet ran\\n\tsort_by { rand }\\nsnippet all\\n\tall? { |${1:e}| ${2} }\\nsnippet any\\n\tany? { |${1:e}| ${2} }\\nsnippet cl\\n\tclassify { |${1:e}| ${2} }\\nsnippet col\\n\tcollect { |${1:e}| ${2} }\\nsnippet cold\\n\tcollect do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet det\\n\tdetect { |${1:e}| ${2} }\\nsnippet detd\\n\tdetect do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet fet\\n\tfetch(${1:name}) { |${2:key}| ${3} }\\nsnippet fin\\n\tfind { |${1:e}| ${2} }\\nsnippet find\\n\tfind do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet fina\\n\tfind_all { |${1:e}| ${2} }\\nsnippet finad\\n\tfind_all do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet gre\\n\tgrep(${1:/pattern/}) { |${2:match}| ${3} }\\nsnippet sub\\n\t${1:g}sub(${2:/pattern/}) { |${3:match}| ${4} }\\nsnippet sca\\n\tscan(${1:/pattern/}) { |${2:match}| ${3} }\\nsnippet scad\\n\tscan(${1:/pattern/}) do |${2:match}|\\n\t\t${3}\\n\tend\\nsnippet max\\n\tmax { |a, b| ${1} }\\nsnippet min\\n\tmin { |a, b| ${1} }\\nsnippet par\\n\tpartition { |${1:e}| ${2} }\\nsnippet pard\\n\tpartition do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet rej\\n\treject { |${1:e}| ${2} }\\nsnippet rejd\\n\treject do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet sel\\n\tselect { |${1:e}| ${2} }\\nsnippet seld\\n\tselect do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet lam\\n\tlambda { |${1:args}| ${2} }\\nsnippet doo\\n\tdo\\n\t\t${1}\\n\tend\\nsnippet dov\\n\tdo |${1:variable}|\\n\t\t${2}\\n\tend\\nsnippet :\\n\t:${1:key} => ${2:\"value\"}${3}\\nsnippet ope\\n\topen(${1:\"path/or/url/or/pipe\"}, \"${2:w}\") { |${3:io}| ${4} }\\n# path_from_here()\\nsnippet fpath\\n\tFile.join(File.dirname(__FILE__), *%2[${1:rel path here}])${2}\\n# unix_filter {}\\nsnippet unif\\n\tARGF.each_line${1} do |${2:line}|\\n\t\t${3}\\n\tend\\n# option_parse {}\\nsnippet optp\\n\trequire \"optparse\"\\n\\n\toptions = {${1:default => \"args\"}}\\n\\n\tARGV.options do |opts|\\n\t\topts.banner = \"Usage: #{File.basename($PROGRAM_NAME)}\\nsnippet opt\\n\topts.on( \"-${1:o}\", \"--${2:long-option-name}\", ${3:String},\\n\t         \"${4:Option description.}\") do |${5:opt}|\\n\t\t${6}\\n\tend\\nsnippet tc\\n\trequire \"test/unit\"\\n\\n\trequire \"${1:library_file_name}\"\\n\\n\tclass Test${2:$1} < Test::Unit::TestCase\\n\t\tdef test_${3:case_name}\\n\t\t\t${4}\\n\t\tend\\n\tend\\nsnippet ts\\n\trequire \"test/unit\"\\n\\n\trequire \"tc_${1:test_case_file}\"\\n\trequire \"tc_${2:test_case_file}\"${3}\\nsnippet as\\n\tassert ${1:test}, \"${2:Failure message.}\"${3}\\nsnippet ase\\n\tassert_equal ${1:expected}, ${2:actual}${3}\\nsnippet asne\\n\tassert_not_equal ${1:unexpected}, ${2:actual}${3}\\nsnippet asid\\n\tassert_in_delta ${1:expected_float}, ${2:actual_float}, ${3:2 ** -20}${4}\\nsnippet asio\\n\tassert_instance_of ${1:ExpectedClass}, ${2:actual_instance}${3}\\nsnippet asko\\n\tassert_kind_of ${1:ExpectedKind}, ${2:actual_instance}${3}\\nsnippet asn\\n\tassert_nil ${1:instance}${2}\\nsnippet asnn\\n\tassert_not_nil ${1:instance}${2}\\nsnippet asm\\n\tassert_match /${1:expected_pattern}/, ${2:actual_string}${3}\\nsnippet asnm\\n\tassert_no_match /${1:unexpected_pattern}/, ${2:actual_string}${3}\\nsnippet aso\\n\tassert_operator ${1:left}, :${2:operator}, ${3:right}${4}\\nsnippet asr\\n\tassert_raise ${1:Exception} { ${2} }\\nsnippet asrd\\n\tassert_raise ${1:Exception} do\\n\t\t${2}\\n\tend\\nsnippet asnr\\n\tassert_nothing_raised ${1:Exception} { ${2} }\\nsnippet asnrd\\n\tassert_nothing_raised ${1:Exception} do\\n\t\t${2}\\n\tend\\nsnippet asrt\\n\tassert_respond_to ${1:object}, :${2:method}${3}\\nsnippet ass assert_same(..)\\n\tassert_same ${1:expected}, ${2:actual}${3}\\nsnippet ass assert_send(..)\\n\tassert_send [${1:object}, :${2:message}, ${3:args}]${4}\\nsnippet asns\\n\tassert_not_same ${1:unexpected}, ${2:actual}${3}\\nsnippet ast\\n\tassert_throws :${1:expected} { ${2} }\\nsnippet astd\\n\tassert_throws :${1:expected} do\\n\t\t${2}\\n\tend\\nsnippet asnt\\n\tassert_nothing_thrown { ${1} }\\nsnippet asntd\\n\tassert_nothing_thrown do\\n\t\t${1}\\n\tend\\nsnippet fl\\n\tflunk \"${1:Failure message.}\"${2}\\n# Benchmark.bmbm do .. end\\nsnippet bm-\\n\tTESTS = ${1:10_000}\\n\tBenchmark.bmbm do |results|\\n\t\t${2}\\n\tend\\nsnippet rep\\n\tresults.report(\"${1:name}:\") { TESTS.times { ${2} }}\\n# Marshal.dump(.., file)\\nsnippet Md\\n\tFile.open(${1:\"path/to/file.dump\"}, \"wb\") { |${2:file}| Marshal.dump(${3:obj}, $2) }${4}\\n# Mashal.load(obj)\\nsnippet Ml\\n\tFile.open(${1:\"path/to/file.dump\"}, \"rb\") { |${2:file}| Marshal.load($2) }${3}\\n# deep_copy(..)\\nsnippet deec\\n\tMarshal.load(Marshal.dump(${1:obj_to_copy}))${2}\\nsnippet Pn-\\n\tPStore.new(${1:\"file_name.pstore\"})${2}\\nsnippet tra\\n\ttransaction(${1:true}) { ${2} }\\n# xmlread(..)\\nsnippet xml-\\n\tREXML::Document.new(File.read(${1:\"path/to/file\"}))${2}\\n# xpath(..) { .. }\\nsnippet xpa\\n\telements.each(${1:\"//Xpath\"}) do |${2:node}|\\n\t\t${3}\\n\tend\\n# class_from_name()\\nsnippet clafn\\n\tsplit(\"::\").inject(Object) { |par, const| par.const_get(const) }\\n# singleton_class()\\nsnippet sinc\\n\tclass << self; self end\\nsnippet nam\\n\tnamespace :${1:`Filename()`} do\\n\t\t${2}\\n\tend\\nsnippet tas\\n\tdesc \"${1:Task description}\"\\n\ttask :${2:task_name => [:dependent, :tasks]} do\\n\t\t${3}\\n\tend\\n# block\\nsnippet b\\n\t{ |${1:var}| ${2} }\\nsnippet begin\\n\tbegin\\n\t\traise \\'A test exception.\\'\\n\trescue Exception => e\\n\t\tputs e.message\\n\t\tputs e.backtrace.inspect\\n\telse\\n\t\t# other exception\\n\tensure\\n\t\t# always executed\\n\tend\\n\\n#debugging\\nsnippet debug\\n\trequire \\'ruby-debug\\'; debugger; true;\\nsnippet pry\\n\trequire \\'pry\\'; binding.pry\\n\\n#############################################\\n# Rails snippets - for pure Ruby, see above #\\n#############################################\\nsnippet art\\n\tassert_redirected_to ${1::action => \"${2:index}\"}\\nsnippet artnp\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1}, ${4:@$2})\\nsnippet artnpp\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1})\\nsnippet artp\\n\tassert_redirected_to ${1:model}_path(${2:@$1})\\nsnippet artpp\\n\tassert_redirected_to ${1:model}s_path\\nsnippet asd\\n\tassert_difference \"${1:Model}.${2:count}\", $1 do\\n\t\t${3}\\n\tend\\nsnippet asnd\\n\tassert_no_difference \"${1:Model}.${2:count}\" do\\n\t\t${3}\\n\tend\\nsnippet asre\\n\tassert_response :${1:success}, @response.body${2}\\nsnippet asrj\\n\tassert_rjs :${1:replace}, \"${2:dom id}\"\\nsnippet ass assert_select(..)\\n\tassert_select \\'${1:path}\\', :${2:text} => \\'${3:inner_html\\' ${4:do}\\nsnippet bf\\n\tbefore_filter :${1:method}\\nsnippet bt\\n\tbelongs_to :${1:association}\\nsnippet crw\\n\tcattr_accessor :${1:attr_names}\\nsnippet defcreate\\n\tdef create\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new(params[:$1])\\n\\n\t\trespond_to do |wants|\\n\t\t\tif @$1.save\\n\t\t\t\tflash[:notice] = \\'$2 was successfully created.\\'\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\t\t\t\twants.xml  { render :xml => @$1, :status => :created, :location => @$1 }\\n\t\t\telse\\n\t\t\t\twants.html { render :action => \"new\" }\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\t\t\tend\\n\t\tend\\n\tend${3}\\nsnippet defdestroy\\n\tdef destroy\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\t\t@$1.destroy\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html { redirect_to($1s_url) }\\n\t\t\twants.xml  { head :ok }\\n\t\tend\\n\tend${3}\\nsnippet defedit\\n\tdef edit\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\tend\\nsnippet defindex\\n\tdef index\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.all\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html # index.html.erb\\n\t\t\twants.xml  { render :xml => @$1s }\\n\t\tend\\n\tend${3}\\nsnippet defnew\\n\tdef new\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html # new.html.erb\\n\t\t\twants.xml  { render :xml => @$1 }\\n\t\tend\\n\tend${3}\\nsnippet defshow\\n\tdef show\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html # show.html.erb\\n\t\t\twants.xml  { render :xml => @$1 }\\n\t\tend\\n\tend${3}\\nsnippet defupdate\\n\tdef update\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\n\t\trespond_to do |wants|\\n\t\t\tif @$1.update_attributes(params[:$1])\\n\t\t\t\tflash[:notice] = \\'$2 was successfully updated.\\'\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\t\t\t\twants.xml  { head :ok }\\n\t\t\telse\\n\t\t\t\twants.html { render :action => \"edit\" }\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\t\t\tend\\n\t\tend\\n\tend${3}\\nsnippet flash\\n\tflash[:${1:notice}] = \"${2}\"\\nsnippet habtm\\n\thas_and_belongs_to_many :${1:object}, :join_table => \"${2:table_name}\", :foreign_key => \"${3}_id\"${4}\\nsnippet hm\\n\thas_many :${1:object}\\nsnippet hmd\\n\thas_many :${1:other}s, :class_name => \"${2:$1}\", :foreign_key => \"${3:$1}_id\", :dependent => :destroy${4}\\nsnippet hmt\\n\thas_many :${1:object}, :through => :${2:object}\\nsnippet ho\\n\thas_one :${1:object}\\nsnippet i18\\n\tI18n.t(\\'${1:type.key}\\')${2}\\nsnippet ist\\n\t<%= image_submit_tag(\"${1:agree.png}\", :id => \"${2:id}\"${3} %>\\nsnippet log\\n\tRails.logger.${1:debug} ${2}\\nsnippet log2\\n\tRAILS_DEFAULT_LOGGER.${1:debug} ${2}\\nsnippet logd\\n\tlogger.debug { \"${1:message}\" }${2}\\nsnippet loge\\n\tlogger.error { \"${1:message}\" }${2}\\nsnippet logf\\n\tlogger.fatal { \"${1:message}\" }${2}\\nsnippet logi\\n\tlogger.info { \"${1:message}\" }${2}\\nsnippet logw\\n\tlogger.warn { \"${1:message}\" }${2}\\nsnippet mapc\\n\t${1:map}.${2:connect} \\'${3:controller/:action/:id}\\'\\nsnippet mapca\\n\t${1:map}.catch_all \"*${2:anything}\", :controller => \"${3:default}\", :action => \"${4:error}\"${5}\\nsnippet mapr\\n\t${1:map}.resource :${2:resource}\\nsnippet maprs\\n\t${1:map}.resources :${2:resource}\\nsnippet mapwo\\n\t${1:map}.with_options :${2:controller} => \\'${3:thing}\\' do |$3|\\n\t\t${4}\\n\tend\\nsnippet mbs\\n\tbefore_save :${1:method}\\nsnippet mcht\\n\tchange_table :${1:table_name} do |t|\\n\t\t${2}\\n\tend\\nsnippet mp\\n\tmap(&:${1:id})\\nsnippet mrw\\n\tmattr_accessor :${1:attr_names}\\nsnippet oa\\n\torder(\"${1:field}\")\\nsnippet od\\n\torder(\"${1:field} DESC\")\\nsnippet pa\\n\tparams[:${1:id}]${2}\\nsnippet ra\\n\trender :action => \"${1:action}\"\\nsnippet ral\\n\trender :action => \"${1:action}\", :layout => \"${2:layoutname}\"\\nsnippet rest\\n\trespond_to do |wants|\\n\t\twants.${1:html} { ${2} }\\n\tend\\nsnippet rf\\n\trender :file => \"${1:filepath}\"\\nsnippet rfu\\n\trender :file => \"${1:filepath}\", :use_full_path => ${2:false}\\nsnippet ri\\n\trender :inline => \"${1:<%= \\'hello\\' %>}\"\\nsnippet ril\\n\trender :inline => \"${1:<%= \\'hello\\' %>}\", :locals => { ${2::name} => \"${3:value}\"${4} }\\nsnippet rit\\n\trender :inline => \"${1:<%= \\'hello\\' %>}\", :type => ${2::rxml}\\nsnippet rjson\\n\trender :json => ${1:text to render}\\nsnippet rl\\n\trender :layout => \"${1:layoutname}\"\\nsnippet rn\\n\trender :nothing => ${1:true}\\nsnippet rns\\n\trender :nothing => ${1:true}, :status => ${2:401}\\nsnippet rp\\n\trender :partial => \"${1:item}\"\\nsnippet rpc\\n\trender :partial => \"${1:item}\", :collection => ${2:@$1s}\\nsnippet rpl\\n\trender :partial => \"${1:item}\", :locals => { :${2:$1} => ${3:@$1}\\nsnippet rpo\\n\trender :partial => \"${1:item}\", :object => ${2:@$1}\\nsnippet rps\\n\trender :partial => \"${1:item}\", :status => ${2:500}\\nsnippet rt\\n\trender :text => \"${1:text to render}\"\\nsnippet rtl\\n\trender :text => \"${1:text to render}\", :layout => \"${2:layoutname}\"\\nsnippet rtlt\\n\trender :text => \"${1:text to render}\", :layout => ${2:true}\\nsnippet rts\\n\trender :text => \"${1:text to render}\", :status => ${2:401}\\nsnippet ru\\n\trender :update do |${1:page}|\\n\t\t$1.${2}\\n\tend\\nsnippet rxml\\n\trender :xml => ${1:text to render}\\nsnippet sc\\n\tscope :${1:name}, :where(:@${2:field} => ${3:value})\\nsnippet sl\\n\tscope :${1:name}, lambda do |${2:value}|\\n\t\twhere(\"${3:field = ?}\", ${4:bind var})\\n\tend\\nsnippet sha1\\n\tDigest::SHA1.hexdigest(${1:string})\\nsnippet sweeper\\n\tclass ${1:ModelClassName}Sweeper < ActionController::Caching::Sweeper\\n\t\tobserve $1\\n\\n\t\tdef after_save(${2:model_class_name})\\n\t\t\texpire_cache($2)\\n\t\tend\\n\\n\t\tdef after_destroy($2)\\n\t\t\texpire_cache($2)\\n\t\tend\\n\\n\t\tdef expire_cache($2)\\n\t\t\texpire_page\\n\t\tend\\n\tend\\nsnippet tcb\\n\tt.boolean :${1:title}\\n\t${2}\\nsnippet tcbi\\n\tt.binary :${1:title}, :limit => ${2:2}.megabytes\\n\t${3}\\nsnippet tcd\\n\tt.decimal :${1:title}, :precision => ${2:10}, :scale => ${3:2}\\n\t${4}\\nsnippet tcda\\n\tt.date :${1:title}\\n\t${2}\\nsnippet tcdt\\n\tt.datetime :${1:title}\\n\t${2}\\nsnippet tcf\\n\tt.float :${1:title}\\n\t${2}\\nsnippet tch\\n\tt.change :${1:name}, :${2:string}, :${3:limit} => ${4:80}\\n\t${5}\\nsnippet tci\\n\tt.integer :${1:title}\\n\t${2}\\nsnippet tcl\\n\tt.integer :lock_version, :null => false, :default => 0\\n\t${1}\\nsnippet tcr\\n\tt.references :${1:taggable}, :polymorphic => { :default => \\'${2:Photo}\\' }\\n\t${3}\\nsnippet tcs\\n\tt.string :${1:title}\\n\t${2}\\nsnippet tct\\n\tt.text :${1:title}\\n\t${2}\\nsnippet tcti\\n\tt.time :${1:title}\\n\t${2}\\nsnippet tcts\\n\tt.timestamp :${1:title}\\n\t${2}\\nsnippet tctss\\n\tt.timestamps\\n\t${1}\\nsnippet va\\n\tvalidates_associated :${1:attribute}\\nsnippet vao\\n\tvalidates_acceptance_of :${1:terms}\\nsnippet vc\\n\tvalidates_confirmation_of :${1:attribute}\\nsnippet ve\\n\tvalidates_exclusion_of :${1:attribute}, :in => ${2:%w( mov avi )}\\nsnippet vf\\n\tvalidates_format_of :${1:attribute}, :with => /${2:regex}/\\nsnippet vi\\n\tvalidates_inclusion_of :${1:attribute}, :in => %w(${2: mov avi })\\nsnippet vl\\n\tvalidates_length_of :${1:attribute}, :within => ${2:3}..${3:20}\\nsnippet vn\\n\tvalidates_numericality_of :${1:attribute}\\nsnippet vpo\\n\tvalidates_presence_of :${1:attribute}\\nsnippet vu\\n\tvalidates_uniqueness_of :${1:attribute}\\nsnippet wants\\n\twants.${1:js|xml|html} { ${2} }\\nsnippet wc\\n\twhere(${1:\"conditions\"}${2:, bind_var})\\nsnippet wh\\n\twhere(${1:field} => ${2:value})\\nsnippet xdelete\\n\txhr :delete, :${1:destroy}, :id => ${2:1}${3}\\nsnippet xget\\n\txhr :get, :${1:show}, :id => ${2:1}${3}\\nsnippet xpost\\n\txhr :post, :${1:create}, :${2:object} => { ${3} }\\nsnippet xput\\n\txhr :put, :${1:update}, :id => ${2:1}, :${3:object} => { ${4} }${5}\\nsnippet test\\n\ttest \"should ${1:do something}\" do\\n\t\t${2}\\n\tend\\n#migrations\\nsnippet mac\\n\tadd_column :${1:table_name}, :${2:column_name}, :${3:data_type}\\nsnippet mrc\\n\tremove_column :${1:table_name}, :${2:column_name}\\nsnippet mrnc\\n\trename_column :${1:table_name}, :${2:old_column_name}, :${3:new_column_name}\\nsnippet mcc\\n\tchange_column :${1:table}, :${2:column}, :${3:type}\\nsnippet mccc\\n\tt.column :${1:title}, :${2:string}\\nsnippet mct\\n\tcreate_table :${1:table_name} do |t|\\n\t\tt.column :${2:name}, :${3:type}\\n\tend\\nsnippet migration\\n\tclass ${1:class_name} < ActiveRecord::Migration\\n\t\tdef self.up\\n\t\t\t${2}\\n\t\tend\\n\\n\t\tdef self.down\\n\t\tend\\n\tend\\n\\nsnippet trc\\n\tt.remove :${1:column}\\nsnippet tre\\n\tt.rename :${1:old_column_name}, :${2:new_column_name}\\n\t${3}\\nsnippet tref\\n\tt.references :${1:model}\\n\\n#rspec\\nsnippet it\\n\tit \"${1:spec_name}\" do\\n\t\t${2}\\n\tend\\nsnippet itp\\n\tit \"${1:spec_name}\"\\n\t${2}\\nsnippet desc\\n\tdescribe ${1:class_name} do\\n\t\t${2}\\n\tend\\nsnippet cont\\n\tcontext \"${1:message}\" do\\n\t\t${2}\\n\tend\\nsnippet bef\\n\tbefore :${1:each} do\\n\t\t${2}\\n\tend\\nsnippet aft\\n\tafter :${1:each} do\\n\t\t${2}\\n\tend\\n',t.scope=\"ruby\"});                (function() {\n                    window.require([\"ace/snippets/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/rust.js",
    "content": "define(\"ace/snippets/rust\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"rust\"});                (function() {\n                    window.require([\"ace/snippets/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/sass.js",
    "content": "define(\"ace/snippets/sass\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"sass\"});                (function() {\n                    window.require([\"ace/snippets/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/scad.js",
    "content": "define(\"ace/snippets/scad\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scad\"});                (function() {\n                    window.require([\"ace/snippets/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/scala.js",
    "content": "define(\"ace/snippets/scala\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scala\"});                (function() {\n                    window.require([\"ace/snippets/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/scheme.js",
    "content": "define(\"ace/snippets/scheme\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scheme\"});                (function() {\n                    window.require([\"ace/snippets/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/scss.js",
    "content": "define(\"ace/snippets/scss\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scss\"});                (function() {\n                    window.require([\"ace/snippets/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/sh.js",
    "content": "define(\"ace/snippets/sh\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Shebang. Executing bash via /usr/bin/env makes scripts more portable.\\nsnippet #!\\n\t#!/usr/bin/env bash\\n\t\\nsnippet if\\n\tif [[ ${1:condition} ]]; then\\n\t\t${2:#statements}\\n\tfi\\nsnippet elif\\n\telif [[ ${1:condition} ]]; then\\n\t\t${2:#statements}\\nsnippet for\\n\tfor (( ${2:i} = 0; $2 < ${1:count}; $2++ )); do\\n\t\t${3:#statements}\\n\tdone\\nsnippet fori\\n\tfor ${1:needle} in ${2:haystack} ; do\\n\t\t${3:#statements}\\n\tdone\\nsnippet wh\\n\twhile [[ ${1:condition} ]]; do\\n\t\t${2:#statements}\\n\tdone\\nsnippet until\\n\tuntil [[ ${1:condition} ]]; do\\n\t\t${2:#statements}\\n\tdone\\nsnippet case\\n\tcase ${1:word} in\\n\t\t${2:pattern})\\n\t\t\t${3};;\\n\tesac\\nsnippet go \\n\twhile getopts \\'${1:o}\\' ${2:opts} \\n\tdo \\n\t\tcase $$2 in\\n\t\t${3:o0})\\n\t\t\t${4:#staments};;\\n\t\tesac\\n\tdone\\n# Set SCRIPT_DIR variable to directory script is located.\\nsnippet sdir\\n\tSCRIPT_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\\n# getopt\\nsnippet getopt\\n\t__ScriptVersion=\"${1:version}\"\\n\\n\t#===  FUNCTION  ================================================================\\n\t#         NAME:  usage\\n\t#  DESCRIPTION:  Display usage information.\\n\t#===============================================================================\\n\tfunction usage ()\\n\t{\\n\t\t\tcat <<- EOT\\n\\n\t  Usage :  $${0:0} [options] [--] \\n\\n\t  Options: \\n\t  -h|help       Display this message\\n\t  -v|version    Display script version\\n\\n\tEOT\\n\t}    # ----------  end of function usage  ----------\\n\\n\t#-----------------------------------------------------------------------\\n\t#  Handle command line arguments\\n\t#-----------------------------------------------------------------------\\n\\n\twhile getopts \":hv\" opt\\n\tdo\\n\t  case $opt in\\n\\n\t\th|help     )  usage; exit 0   ;;\\n\\n\t\tv|version  )  echo \"$${0:0} -- Version $__ScriptVersion\"; exit 0   ;;\\n\\n\t\t\\\\? )  echo -e \"\\\\n  Option does not exist : $OPTARG\\\\n\"\\n\t\t\t  usage; exit 1   ;;\\n\\n\t  esac    # --- end of case ---\\n\tdone\\n\tshift $(($OPTIND-1))\\n\\n',t.scope=\"sh\"});                (function() {\n                    window.require([\"ace/snippets/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/sjs.js",
    "content": "define(\"ace/snippets/sjs\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"sjs\"});                (function() {\n                    window.require([\"ace/snippets/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/slim.js",
    "content": "define(\"ace/snippets/slim\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"slim\"});                (function() {\n                    window.require([\"ace/snippets/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/smarty.js",
    "content": "define(\"ace/snippets/smarty\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"smarty\"});                (function() {\n                    window.require([\"ace/snippets/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/snippets.js",
    "content": "define(\"ace/snippets/snippets\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# snippets for making snippets :)\\nsnippet snip\\n\tsnippet ${1:trigger}\\n\t\t${2}\\nsnippet msnip\\n\tsnippet ${1:trigger} ${2:description}\\n\t\t${3}\\nsnippet v\\n\t{VISUAL}\\n\",t.scope=\"snippets\"});                (function() {\n                    window.require([\"ace/snippets/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/soy_template.js",
    "content": "define(\"ace/snippets/soy_template\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"soy_template\"});                (function() {\n                    window.require([\"ace/snippets/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/space.js",
    "content": "define(\"ace/snippets/space\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"space\"});                (function() {\n                    window.require([\"ace/snippets/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/sparql.js",
    "content": "define(\"ace/snippets/sparql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/sql.js",
    "content": "define(\"ace/snippets/sql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet tbl\\n\tcreate table ${1:table} (\\n\t\t${2:columns}\\n\t);\\nsnippet col\\n\t${1:name}\t${2:type}\t${3:default ''}\t${4:not null}\\nsnippet ccol\\n\t${1:name}\tvarchar2(${2:size})\t${3:default ''}\t${4:not null}\\nsnippet ncol\\n\t${1:name}\tnumber\t${3:default 0}\t${4:not null}\\nsnippet dcol\\n\t${1:name}\tdate\t${3:default sysdate}\t${4:not null}\\nsnippet ind\\n\tcreate index ${3:$1_$2} on ${1:table}(${2:column});\\nsnippet uind\\n\tcreate unique index ${1:name} on ${2:table}(${3:column});\\nsnippet tblcom\\n\tcomment on table ${1:table} is '${2:comment}';\\nsnippet colcom\\n\tcomment on column ${1:table}.${2:column} is '${3:comment}';\\nsnippet addcol\\n\talter table ${1:table} add (${2:column} ${3:type});\\nsnippet seq\\n\tcreate sequence ${1:name} start with ${2:1} increment by ${3:1} minvalue ${4:1};\\nsnippet s*\\n\tselect * from ${1:table}\\n\",t.scope=\"sql\"});                (function() {\n                    window.require([\"ace/snippets/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/sqlserver.js",
    "content": "define(\"ace/snippets/sqlserver\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# ISNULL\\nsnippet isnull\\n\tISNULL(${1:check_expression}, ${2:replacement_value})\\n# FORMAT\\nsnippet format\\n\tFORMAT(${1:value}, ${2:format})\\n# CAST\\nsnippet cast\\n\tCAST(${1:expression} AS ${2:data_type})\\n# CONVERT\\nsnippet convert\\n\tCONVERT(${1:data_type}, ${2:expression})\\n# DATEPART\\nsnippet datepart\\n\tDATEPART(${1:datepart}, ${2:date})\\n# DATEDIFF\\nsnippet datediff\\n\tDATEDIFF(${1:datepart}, ${2:startdate}, ${3:enddate})\\n# DATEADD\\nsnippet dateadd\\n\tDATEADD(${1:datepart}, ${2:number}, ${3:date})\\n# DATEFROMPARTS \\nsnippet datefromparts\\n\tDATEFROMPARTS(${1:year}, ${2:month}, ${3:day})\\n# OBJECT_DEFINITION\\nsnippet objectdef\\n\tSELECT OBJECT_DEFINITION(OBJECT_ID('${1:sys.server_permissions /*object name*/}'))\\n# STUFF XML\\nsnippet stuffxml\\n\tSTUFF((SELECT ', ' + ${1:ColumnName}\\n\t\tFROM ${2:TableName}\\n\t\tWHERE ${3:WhereClause}\\n\t\tFOR XML PATH('')), 1, 1, '') AS ${4:Alias}\\n\t${5:/*https://msdn.microsoft.com/en-us/library/ms188043.aspx*/}\\n# Create Procedure\\nsnippet createproc\\n\t-- =============================================\\n\t-- Author:\t\t${1:Author}\\n\t-- Create date: ${2:Date}\\n\t-- Description:\t${3:Description}\\n\t-- =============================================\\n\tCREATE PROCEDURE ${4:Procedure_Name}\\n\t\t${5:/*Add the parameters for the stored procedure here*/}\\n\tAS\\n\tBEGIN\\n\t\t-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.\\n\t\tSET NOCOUNT ON;\\n\t\t\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\t\t\\n\tEND\\n\tGO\\n# Create Scalar Function\\nsnippet createfn\\n\t-- =============================================\\n\t-- Author:\t\t${1:Author}\\n\t-- Create date: ${2:Date}\\n\t-- Description:\t${3:Description}\\n\t-- =============================================\\n\tCREATE FUNCTION ${4:Scalar_Function_Name}\\n\t\t-- Add the parameters for the function here\\n\tRETURNS ${5:Function_Data_Type}\\n\tAS\\n\tBEGIN\\n\t\tDECLARE @Result ${5:Function_Data_Type}\\n\t\t\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\t\t\\n\tEND\\n\tGO\",t.scope=\"sqlserver\"});                (function() {\n                    window.require([\"ace/snippets/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/stylus.js",
    "content": "define(\"ace/snippets/stylus\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"stylus\"});                (function() {\n                    window.require([\"ace/snippets/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/svg.js",
    "content": "define(\"ace/snippets/svg\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"svg\"});                (function() {\n                    window.require([\"ace/snippets/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/swift.js",
    "content": "define(\"ace/snippets/swift\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"swift\"});                (function() {\n                    window.require([\"ace/snippets/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/tcl.js",
    "content": "define(\"ace/snippets/tcl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# #!/usr/bin/env tclsh\\nsnippet #!\\n\t#!/usr/bin/env tclsh\\n\t\\n# Process\\nsnippet pro\\n\tproc ${1:function_name} {${2:args}} {\\n\t\t${3:#body ...}\\n\t}\\n#xif\\nsnippet xif\\n\t${1:expr}? ${2:true} : ${3:false}\\n# Conditional\\nsnippet if\\n\tif {${1}} {\\n\t\t${2:# body...}\\n\t}\\n# Conditional if..else\\nsnippet ife\\n\tif {${1}} {\\n\t\t${2:# body...}\\n\t} else {\\n\t\t${3:# else...}\\n\t}\\n# Conditional if..elsif..else\\nsnippet ifee\\n\tif {${1}} {\\n\t\t${2:# body...}\\n\t} elseif {${3}} {\\n\t\t${4:# elsif...}\\n\t} else {\\n\t\t${5:# else...}\\n\t}\\n# If catch then\\nsnippet ifc\\n\tif { [catch {${1:#do something...}} ${2:err}] } {\\n\t\t${3:# handle failure...}\\n\t}\\n# Catch\\nsnippet catch\\n\tcatch {${1}} ${2:err} ${3:options}\\n# While Loop\\nsnippet wh\\n\twhile {${1}} {\\n\t\t${2:# body...}\\n\t}\\n# For Loop\\nsnippet for\\n\tfor {set ${2:var} 0} {$$2 < ${1:count}} {${3:incr} $2} {\\n\t\t${4:# body...}\\n\t}\\n# Foreach Loop\\nsnippet fore\\n\tforeach ${1:x} {${2:#list}} {\\n\t\t${3:# body...}\\n\t}\\n# after ms script...\\nsnippet af\\n\tafter ${1:ms} ${2:#do something}\\n# after cancel id\\nsnippet afc\\n\tafter cancel ${1:id or script}\\n# after idle\\nsnippet afi\\n\tafter idle ${1:script}\\n# after info id\\nsnippet afin\\n\tafter info ${1:id}\\n# Expr\\nsnippet exp\\n\texpr {${1:#expression here}}\\n# Switch\\nsnippet sw\\n\tswitch ${1:var} {\\n\t\t${3:pattern 1} {\\n\t\t\t${4:#do something}\\n\t\t}\\n\t\tdefault {\\n\t\t\t${2:#do something}\\n\t\t}\\n\t}\\n# Case\\nsnippet ca\\n\t${1:pattern} {\\n\t\t${2:#do something}\\n\t}${3}\\n# Namespace eval\\nsnippet ns\\n\tnamespace eval ${1:path} {${2:#script...}}\\n# Namespace current\\nsnippet nsc\\n\tnamespace current\\n\",t.scope=\"tcl\"});                (function() {\n                    window.require([\"ace/snippets/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/terraform.js",
    "content": "define(\"ace/snippets/terraform\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"terraform\"});                (function() {\n                    window.require([\"ace/snippets/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/tex.js",
    "content": "define(\"ace/snippets/tex\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"#PREAMBLE\\n#newcommand\\nsnippet nc\\n\t\\\\newcommand{\\\\${1:cmd}}[${2:opt}]{${3:realcmd}}${4}\\n#usepackage\\nsnippet up\\n\t\\\\usepackage[${1:[options}]{${2:package}}\\n#newunicodechar\\nsnippet nuc\\n\t\\\\newunicodechar{${1}}{${2:\\\\ensuremath}${3:tex-substitute}}}\\n#DeclareMathOperator\\nsnippet dmo\\n\t\\\\DeclareMathOperator{${1}}{${2}}\\n\\n#DOCUMENT\\n# \\\\begin{}...\\\\end{}\\nsnippet begin\\n\t\\\\begin{${1:env}}\\n\t\t${2}\\n\t\\\\end{$1}\\n# Tabular\\nsnippet tab\\n\t\\\\begin{${1:tabular}}{${2:c}}\\n\t${3}\\n\t\\\\end{$1}\\nsnippet thm\\n\t\\\\begin[${1:author}]{${2:thm}}\\n\t${3}\\n\t\\\\end{$1}\\nsnippet center\\n\t\\\\begin{center}\\n\t\t${1}\\n\t\\\\end{center}\\n# Align(ed)\\nsnippet ali\\n\t\\\\begin{align${1:ed}}\\n\t\t${2}\\n\t\\\\end{align$1}\\n# Gather(ed)\\nsnippet gat\\n\t\\\\begin{gather${1:ed}}\\n\t\t${2}\\n\t\\\\end{gather$1}\\n# Equation\\nsnippet eq\\n\t\\\\begin{equation}\\n\t\t${1}\\n\t\\\\end{equation}\\n# Equation\\nsnippet eq*\\n\t\\\\begin{equation*}\\n\t\t${1}\\n\t\\\\end{equation*}\\n# Unnumbered Equation\\nsnippet \\\\\\n\t\\\\[\\n\t\t${1}\\n\t\\\\]\\n# Enumerate\\nsnippet enum\\n\t\\\\begin{enumerate}\\n\t\t\\\\item ${1}\\n\t\\\\end{enumerate}\\n# Itemize\\nsnippet itemize\\n\t\\\\begin{itemize}\\n\t\t\\\\item ${1}\\n\t\\\\end{itemize}\\n# Description\\nsnippet desc\\n\t\\\\begin{description}\\n\t\t\\\\item[${1}] ${2}\\n\t\\\\end{description}\\n# Matrix\\nsnippet mat\\n\t\\\\begin{${1:p/b/v/V/B/small}matrix}\\n\t\t${2}\\n\t\\\\end{$1matrix}\\n# Cases\\nsnippet cas\\n\t\\\\begin{cases}\\n\t\t${1:equation}, &\\\\text{ if }${2:case}\\\\\\\\\\n\t\t${3}\\n\t\\\\end{cases}\\n# Split\\nsnippet spl\\n\t\\\\begin{split}\\n\t\t${1}\\n\t\\\\end{split}\\n# Part\\nsnippet part\\n\t\\\\part{${1:part name}} % (fold)\\n\t\\\\label{prt:${2:$1}}\\n\t${3}\\n\t% part $2 (end)\\n# Chapter\\nsnippet cha\\n\t\\\\chapter{${1:chapter name}}\\n\t\\\\label{cha:${2:$1}}\\n\t${3}\\n# Section\\nsnippet sec\\n\t\\\\section{${1:section name}}\\n\t\\\\label{sec:${2:$1}}\\n\t${3}\\n# Sub Section\\nsnippet sub\\n\t\\\\subsection{${1:subsection name}}\\n\t\\\\label{sub:${2:$1}}\\n\t${3}\\n# Sub Sub Section\\nsnippet subs\\n\t\\\\subsubsection{${1:subsubsection name}}\\n\t\\\\label{ssub:${2:$1}}\\n\t${3}\\n# Paragraph\\nsnippet par\\n\t\\\\paragraph{${1:paragraph name}}\\n\t\\\\label{par:${2:$1}}\\n\t${3}\\n# Sub Paragraph\\nsnippet subp\\n\t\\\\subparagraph{${1:subparagraph name}}\\n\t\\\\label{subp:${2:$1}}\\n\t${3}\\n#References\\nsnippet itd\\n\t\\\\item[${1:description}] ${2:item}\\nsnippet figure\\n\t${1:Figure}~\\\\ref{${2:fig:}}${3}\\nsnippet table\\n\t${1:Table}~\\\\ref{${2:tab:}}${3}\\nsnippet listing\\n\t${1:Listing}~\\\\ref{${2:list}}${3}\\nsnippet section\\n\t${1:Section}~\\\\ref{${2:sec:}}${3}\\nsnippet page\\n\t${1:page}~\\\\pageref{${2}}${3}\\nsnippet index\\n\t\\\\index{${1:index}}${2}\\n#Citations\\nsnippet cite\\n\t\\\\cite[${1}]{${2}}${3}\\nsnippet fcite\\n\t\\\\footcite[${1}]{${2}}${3}\\n#Formating text: italic, bold, underline, small capital, emphase ..\\nsnippet it\\n\t\\\\textit{${1:text}}\\nsnippet bf\\n\t\\\\textbf{${1:text}}\\nsnippet under\\n\t\\\\underline{${1:text}}\\nsnippet emp\\n\t\\\\emph{${1:text}}\\nsnippet sc\\n\t\\\\textsc{${1:text}}\\n#Choosing font\\nsnippet sf\\n\t\\\\textsf{${1:text}}\\nsnippet rm\\n\t\\\\textrm{${1:text}}\\nsnippet tt\\n\t\\\\texttt{${1:text}}\\n#misc\\nsnippet ft\\n\t\\\\footnote{${1:text}}\\nsnippet fig\\n\t\\\\begin{figure}\\n\t\\\\begin{center}\\n\t    \\\\includegraphics[scale=${1}]{Figures/${2}}\\n\t\\\\end{center}\\n\t\\\\caption{${3}}\\n\t\\\\label{fig:${4}}\\n\t\\\\end{figure}\\nsnippet tikz\\n\t\\\\begin{figure}\\n\t\\\\begin{center}\\n\t\\\\begin{tikzpicture}[scale=${1:1}]\\n\t\t${2}\\n\t\\\\end{tikzpicture}\\n\t\\\\end{center}\\n\t\\\\caption{${3}}\\n\t\\\\label{fig:${4}}\\n\t\\\\end{figure}\\n#math\\nsnippet stackrel\\n\t\\\\stackrel{${1:above}}{${2:below}} ${3}\\nsnippet frac\\n\t\\\\frac{${1:num}}{${2:denom}}\\nsnippet sum\\n\t\\\\sum^{${1:n}}_{${2:i=1}}{${3}}\",t.scope=\"tex\"});                (function() {\n                    window.require([\"ace/snippets/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/text.js",
    "content": "define(\"ace/snippets/text\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"text\"});                (function() {\n                    window.require([\"ace/snippets/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/textile.js",
    "content": "define(\"ace/snippets/textile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Jekyll post header\\nsnippet header\\n\t---\\n\ttitle: ${1:title}\\n\tlayout: post\\n\tdate: ${2:date} ${3:hour:minute:second} -05:00\\n\t---\\n\\n# Image\\nsnippet img\\n\t!${1:url}(${2:title}):${3:link}!\\n\\n# Table\\nsnippet |\\n\t|${1}|${2}\\n\\n# Link\\nsnippet link\\n\t\"${1:link text}\":${2:url}\\n\\n# Acronym\\nsnippet (\\n\t(${1:Expand acronym})${2}\\n\\n# Footnote\\nsnippet fn\\n\t[${1:ref number}] ${3}\\n\\n\tfn$1. ${2:footnote}\\n\t\\n',t.scope=\"textile\"});                (function() {\n                    window.require([\"ace/snippets/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/toml.js",
    "content": "define(\"ace/snippets/toml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"toml\"});                (function() {\n                    window.require([\"ace/snippets/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/tsx.js",
    "content": "define(\"ace/snippets/tsx\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"tsx\"});                (function() {\n                    window.require([\"ace/snippets/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/turtle.js",
    "content": "define(\"ace/snippets/turtle\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/twig.js",
    "content": "define(\"ace/snippets/twig\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"twig\"});                (function() {\n                    window.require([\"ace/snippets/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/typescript.js",
    "content": "define(\"ace/snippets/typescript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"typescript\"});                (function() {\n                    window.require([\"ace/snippets/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/vala.js",
    "content": "define(\"ace/snippets/vala\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippets=[{content:\"case ${1:condition}:\\n\t$0\\n\tbreak;\\n\",name:\"case\",scope:\"vala\",tabTrigger:\"case\"},{content:\"/**\\n * ${6}\\n */\\n${1:public} class ${2:MethodName}${3: : GLib.Object} {\\n\\n\t/**\\n\t * ${7}\\n\t */\\n\tpublic ${2}(${4}) {\\n\t\t${5}\\n\t}\\n\\n\t$0\\n}\",name:\"class\",scope:\"vala\",tabTrigger:\"class\"},{content:\"(${1}) => {\\n\t${0}\\n}\\n\",name:\"closure\",scope:\"vala\",tabTrigger:\"=>\"},{content:\"/*\\n * $0\\n */\",name:\"Comment (multiline)\",scope:\"vala\",tabTrigger:\"/*\"},{content:\"Console.WriteLine($1);\\n$0\",name:\"Console.WriteLine (writeline)\",scope:\"vala\",tabTrigger:\"writeline\"},{content:'[DBus(name = \"$0\")]',name:\"DBus annotation\",scope:\"vala\",tabTrigger:\"[DBus\"},{content:\"delegate ${1:void} ${2:DelegateName}($0);\",name:\"delegate\",scope:\"vala\",tabTrigger:\"delegate\"},{content:\"do {\\n\t$0\\n} while ($1);\\n\",name:\"do while\",scope:\"vala\",tabTrigger:\"dowhile\"},{content:\"/**\\n * $0\\n */\",name:\"DocBlock\",scope:\"vala\",tabTrigger:\"/**\"},{content:\"else if ($1) {\\n\t$0\\n}\\n\",name:\"else if (elseif)\",scope:\"vala\",tabTrigger:\"elseif\"},{content:\"else {\\n\t$0\\n}\",name:\"else\",scope:\"vala\",tabTrigger:\"else\"},{content:\"enum {$1:EnumName} {\\n\t$0\\n}\",name:\"enum\",scope:\"vala\",tabTrigger:\"enum\"},{content:\"public errordomain ${1:Error} {\\n\t$0\\n}\",name:\"error domain\",scope:\"vala\",tabTrigger:\"errordomain\"},{content:\"for ($1;$2;$3) {\\n\t$0\\n}\",name:\"for\",scope:\"vala\",tabTrigger:\"for\"},{content:\"foreach ($1 in $2) {\\n\t$0\\n}\",name:\"foreach\",scope:\"vala\",tabTrigger:\"foreach\"},{content:\"Gee.ArrayList<${1:G}>($0);\",name:\"Gee.ArrayList\",scope:\"vala\",tabTrigger:\"ArrayList\"},{content:\"Gee.HashMap<${1:K},${2:V}>($0);\",name:\"Gee.HashMap\",scope:\"vala\",tabTrigger:\"HashMap\"},{content:\"Gee.HashSet<${1:G}>($0);\",name:\"Gee.HashSet\",scope:\"vala\",tabTrigger:\"HashSet\"},{content:\"if ($1) {\\n\t$0\\n}\",name:\"if\",scope:\"vala\",tabTrigger:\"if\"},{content:\"interface ${1:InterfaceName}{$2: : SuperInterface} {\\n\t$0\\n}\",name:\"interface\",scope:\"vala\",tabTrigger:\"interface\"},{content:\"public static int main(string [] argv) {\\n\t${0}\\n\treturn 0;\\n}\",name:\"Main function\",scope:\"vala\",tabTrigger:\"main\"},{content:\"namespace $1 {\\n\t$0\\n}\\n\",name:\"namespace (ns)\",scope:\"vala\",tabTrigger:\"ns\"},{content:\"stdout.printf($0);\",name:\"printf\",scope:\"vala\",tabTrigger:\"printf\"},{content:\"${1:public} ${2:Type} ${3:Name} {\\n\tset {\\n\t\t$0\\n\t}\\n\tget {\\n\\n\t}\\n}\",name:\"property (prop)\",scope:\"vala\",tabTrigger:\"prop\"},{content:\"${1:public} ${2:Type} ${3:Name} {\\n\tget {\\n\t\t$0\\n\t}\\n}\",name:\"read-only property (roprop)\",scope:\"vala\",tabTrigger:\"roprop\"},{content:'@\"${1:\\\\$var}\"',name:\"String template (@)\",scope:\"vala\",tabTrigger:\"@\"},{content:\"struct ${1:StructName} {\\n\t$0\\n}\",name:\"struct\",scope:\"vala\",tabTrigger:\"struct\"},{content:\"switch ($1) {\\n\t$0\\n}\",name:\"switch\",scope:\"vala\",tabTrigger:\"switch\"},{content:\"try {\\n\t$2\\n} catch (${1:Error} e) {\\n\t$0\\n}\",name:\"try/catch\",scope:\"vala\",tabTrigger:\"try\"},{content:'\"\"\"$0\"\"\";',name:'Verbatim string (\"\"\")',scope:\"vala\",tabTrigger:\"verbatim\"},{content:\"while ($1) {\\n\t$0\\n}\",name:\"while\",scope:\"vala\",tabTrigger:\"while\"}],t.scope=\"\"});                (function() {\n                    window.require([\"ace/snippets/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/vbscript.js",
    "content": "define(\"ace/snippets/vbscript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"vbscript\"});                (function() {\n                    window.require([\"ace/snippets/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/velocity.js",
    "content": "define(\"ace/snippets/velocity\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# macro\\nsnippet #macro\\n\t#macro ( ${1:macroName} ${2:\\\\$var1, [\\\\$var2, ...]} )\\n\t\t${3:## macro code}\\n\t#end\\n# foreach\\nsnippet #foreach\\n\t#foreach ( ${1:\\\\$item} in ${2:\\\\$collection} )\\n\t\t${3:## foreach code}\\n\t#end\\n# if\\nsnippet #if\\n\t#if ( ${1:true} )\\n\t\t${0}\\n\t#end\\n# if ... else\\nsnippet #ife\\n\t#if ( ${1:true} )\\n\t\t${2}\\n\t#else\\n\t\t${0}\\n\t#end\\n#import\\nsnippet #import\\n\t#import ( \"${1:path/to/velocity/format}\" )\\n# set\\nsnippet #set\\n\t#set ( $${1:var} = ${0} )\\n',t.scope=\"velocity\",t.includeScopes=[\"html\",\"javascript\",\"css\"]});                (function() {\n                    window.require([\"ace/snippets/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/verilog.js",
    "content": "define(\"ace/snippets/verilog\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"verilog\"});                (function() {\n                    window.require([\"ace/snippets/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/vhdl.js",
    "content": "define(\"ace/snippets/vhdl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"vhdl\"});                (function() {\n                    window.require([\"ace/snippets/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/visualforce.js",
    "content": "define(\"ace/snippets/visualforce\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"visualforce\"});                (function() {\n                    window.require([\"ace/snippets/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/wollok.js",
    "content": "define(\"ace/snippets/wollok\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='##\\n## Basic Java packages and import\\nsnippet im\\n\timport\\nsnippet w.l\\n\twollok.lang\\nsnippet w.i\\n\twollok.lib\\n\\n## Class and object\\nsnippet cl\\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\\nsnippet obj\\n\tobject ${1:`Filename(\"\", \"untitled\")`} ${2:inherits Parent}${3}\\nsnippet te\\n\ttest ${1:`Filename(\"\", \"untitled\")`}\\n\\n##\\n## Enhancements\\nsnippet inh\\n\tinherits\\n\\n##\\n## Comments\\nsnippet /*\\n\t/*\\n\t * ${1}\\n\t */\\n\\n##\\n## Control Statements\\nsnippet el\\n\telse\\nsnippet if\\n\tif (${1}) ${2}\\n\\n##\\n## Create a Method\\nsnippet m\\n\tmethod ${1:method}(${2}) ${5}\\n\\n##  \\n## Tests\\nsnippet as\\n\tassert.equals(${1:expected}, ${2:actual})\\n\\n##\\n## Exceptions\\nsnippet ca\\n\tcatch ${1:e} : (${2:Exception} ) ${3}\\nsnippet thr\\n\tthrow\\nsnippet try\\n\ttry {\\n\t\t${3}\\n\t} catch ${1:e} : ${2:Exception} {\\n\t}\\n\\n##\\n## Javadocs\\nsnippet /**\\n\t/**\\n\t * ${1}\\n\t */\\n\\n##\\n## Print Methods\\nsnippet print\\n\tconsole.println(\"${1:Message}\")\\n\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\tmethod set${1:}(${2:}) {\\n\t\t$1 = $2\\n\t}\\nsnippet get\\n\tmethod get${1:}() {\\n\t\treturn ${1:};\\n\t}\\n\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\treturn',t.scope=\"wollok\"});                (function() {\n                    window.require([\"ace/snippets/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/xml.js",
    "content": "define(\"ace/snippets/xml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"xml\"});                (function() {\n                    window.require([\"ace/snippets/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/xquery.js",
    "content": "define(\"ace/snippets/xquery\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet for\\n\tfor $${1:item} in ${2:expr}\\nsnippet return\\n\treturn ${1:expr}\\nsnippet import\\n\timport module namespace ${1:ns} = \"${2:http://www.example.com/}\";\\nsnippet some\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet every\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet if\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\nsnippet switch\\n\tswitch(${1:\"foo\"})\\n\tcase ${2:\"foo\"}\\n\treturn ${3:true}\\n\tdefault return ${4:false}\\nsnippet try\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\nsnippet tumbling\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet sliding\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet let\\n\tlet $${1:varname} := ${2:expr}\\nsnippet group\\n\tgroup by $${1:varname} := ${2:expr}\\nsnippet order\\n\torder by ${1:expr} ${2:descending}\\nsnippet stable\\n\tstable order by ${1:expr}\\nsnippet count\\n\tcount $${1:varname}\\nsnippet ordered\\n\tordered { ${1:expr} }\\nsnippet unordered\\n\tunordered { ${1:expr} }\\nsnippet treat \\n\ttreat as ${1:expr}\\nsnippet castable\\n\tcastable as ${1:atomicType}\\nsnippet cast\\n\tcast as ${1:atomicType}\\nsnippet typeswitch\\n\ttypeswitch(${1:expr})\\n\tcase ${2:type}  return ${3:expr}\\n\tdefault return ${4:expr}\\nsnippet var\\n\tdeclare variable $${1:varname} := ${2:expr};\\nsnippet fn\\n\tdeclare function ${1:ns}:${2:name}(){\\n\t${3:expr}\\n\t};\\nsnippet module\\n\tmodule namespace ${1:ns} = \"${2:http://www.example.com}\";\\n',t.scope=\"xquery\"});                (function() {\n                    window.require([\"ace/snippets/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/snippets/yaml.js",
    "content": "define(\"ace/snippets/yaml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"yaml\"});                (function() {\n                    window.require([\"ace/snippets/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-ambiance.js",
    "content": "define(\"ace/theme/ambiance\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-ambiance\",t.cssText=\".ace-ambiance .ace_gutter {background-color: #3d3d3d;background-image: linear-gradient(left, #3D3D3D, #333);background-repeat: repeat-x;border-right: 1px solid #4d4d4d;text-shadow: 0px 1px 1px #4d4d4d;color: #222;}.ace-ambiance .ace_gutter-layer {background: repeat left top;}.ace-ambiance .ace_gutter-active-line {background-color: #3F3F3F;}.ace-ambiance .ace_fold-widget {text-align: center;}.ace-ambiance .ace_fold-widget:hover {color: #777;}.ace-ambiance .ace_fold-widget.ace_start,.ace-ambiance .ace_fold-widget.ace_end,.ace-ambiance .ace_fold-widget.ace_closed{background: none;border: none;box-shadow: none;}.ace-ambiance .ace_fold-widget.ace_start:after {content: '\\u25be'}.ace-ambiance .ace_fold-widget.ace_end:after {content: '\\u25b4'}.ace-ambiance .ace_fold-widget.ace_closed:after {content: '\\u2023'}.ace-ambiance .ace_print-margin {border-left: 1px dotted #2D2D2D;right: 0;background: #262626;}.ace-ambiance .ace_scroller {-webkit-box-shadow: inset 0 0 10px black;-moz-box-shadow: inset 0 0 10px black;-o-box-shadow: inset 0 0 10px black;box-shadow: inset 0 0 10px black;}.ace-ambiance {color: #E6E1DC;background-color: #202020;}.ace-ambiance .ace_cursor {border-left: 1px solid #7991E8;}.ace-ambiance .ace_overwrite-cursors .ace_cursor {border: 1px solid #FFE300;background: #766B13;}.ace-ambiance.normal-mode .ace_cursor-layer {z-index: 0;}.ace-ambiance .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20);}.ace-ambiance .ace_marker-layer .ace_selected-word {border-radius: 4px;border: 8px solid #3f475d;box-shadow: 0 0 4px black;}.ace-ambiance .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-ambiance .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25);}.ace-ambiance .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031);}.ace-ambiance .ace_invisible {color: #333;}.ace-ambiance .ace_paren {color: #24C2C7;}.ace-ambiance .ace_keyword {color: #cda869;}.ace-ambiance .ace_keyword.ace_operator {color: #fa8d6a;}.ace-ambiance .ace_punctuation.ace_operator {color: #fa8d6a;}.ace-ambiance .ace_identifier {}.ace-ambiance .ace-statement {color: #cda869;}.ace-ambiance .ace_constant {color: #CF7EA9;}.ace-ambiance .ace_constant.ace_language {color: #CF7EA9;}.ace-ambiance .ace_constant.ace_library {}.ace-ambiance .ace_constant.ace_numeric {color: #78CF8A;}.ace-ambiance .ace_invalid {text-decoration: underline;}.ace-ambiance .ace_invalid.ace_illegal {color:#F8F8F8;background-color: rgba(86, 45, 86, 0.75);}.ace-ambiance .ace_invalid,.ace-ambiance .ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1;}.ace-ambiance .ace_support {color: #9B859D;}.ace-ambiance .ace_support.ace_function {color: #DAD085;}.ace-ambiance .ace_function.ace_buildin {color: #9b859d;}.ace-ambiance .ace_string {color: #8f9d6a;}.ace-ambiance .ace_string.ace_regexp {color: #DAD085;}.ace-ambiance .ace_comment {font-style: italic;color: #555;}.ace-ambiance .ace_comment.ace_doc {}.ace-ambiance .ace_comment.ace_doc.ace_tag {color: #666;font-style: normal;}.ace-ambiance .ace_definition,.ace-ambiance .ace_type {color: #aac6e3;}.ace-ambiance .ace_variable {color: #9999cc;}.ace-ambiance .ace_variable.ace_language {color: #9b859d;}.ace-ambiance .ace_xml-pe {color: #494949;}.ace-ambiance .ace_gutter-layer,.ace-ambiance .ace_text-layer {background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\\\");}.ace-ambiance .ace_indent-guide {background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/ambiance\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-chaos.js",
    "content": "define(\"ace/theme/chaos\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-chaos\",t.cssText=\".ace-chaos .ace_gutter {background: #141414;color: #595959;border-right: 1px solid #282828;}.ace-chaos .ace_gutter-cell.ace_warning {background-image: none;background: #FC0;border-left: none;padding-left: 0;color: #000;}.ace-chaos .ace_gutter-cell.ace_error {background-position: -6px center;background-image: none;background: #F10;border-left: none;padding-left: 0;color: #000;}.ace-chaos .ace_print-margin {border-left: 1px solid #555;right: 0;background: #1D1D1D;}.ace-chaos {background-color: #161616;color: #E6E1DC;}.ace-chaos .ace_cursor {border-left: 2px solid #FFFFFF;}.ace-chaos .ace_cursor.ace_overwrite {border-left: 0px;border-bottom: 1px solid #FFFFFF;}.ace-chaos .ace_marker-layer .ace_selection {background: #494836;}.ace-chaos .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-chaos .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #FCE94F;}.ace-chaos .ace_marker-layer .ace_active-line {background: #333;}.ace-chaos .ace_gutter-active-line {background-color: #222;}.ace-chaos .ace_invisible {color: #404040;}.ace-chaos .ace_keyword {color:#00698F;}.ace-chaos .ace_keyword.ace_operator {color:#FF308F;}.ace-chaos .ace_constant {color:#1EDAFB;}.ace-chaos .ace_constant.ace_language {color:#FDC251;}.ace-chaos .ace_constant.ace_library {color:#8DFF0A;}.ace-chaos .ace_constant.ace_numeric {color:#58C554;}.ace-chaos .ace_invalid {color:#FFFFFF;background-color:#990000;}.ace-chaos .ace_invalid.ace_deprecated {color:#FFFFFF;background-color:#990000;}.ace-chaos .ace_support {color: #999;}.ace-chaos .ace_support.ace_function {color:#00AEEF;}.ace-chaos .ace_function {color:#00AEEF;}.ace-chaos .ace_string {color:#58C554;}.ace-chaos .ace_comment {color:#555;font-style:italic;padding-bottom: 0px;}.ace-chaos .ace_variable {color:#997744;}.ace-chaos .ace_meta.ace_tag {color:#BE53E6;}.ace-chaos .ace_entity.ace_other.ace_attribute-name {color:#FFFF89;}.ace-chaos .ace_markup.ace_underline {text-decoration: underline;}.ace-chaos .ace_fold-widget {text-align: center;}.ace-chaos .ace_fold-widget:hover {color: #777;}.ace-chaos .ace_fold-widget.ace_start,.ace-chaos .ace_fold-widget.ace_end,.ace-chaos .ace_fold-widget.ace_closed{background: none;border: none;box-shadow: none;}.ace-chaos .ace_fold-widget.ace_start:after {content: '\\u25be'}.ace-chaos .ace_fold-widget.ace_end:after {content: '\\u25b4'}.ace-chaos .ace_fold-widget.ace_closed:after {content: '\\u2023'}.ace-chaos .ace_indent-guide {border-right:1px dotted #333;margin-right:-1px;}.ace-chaos .ace_fold { background: #222; border-radius: 3px; color: #7AF; border: none; }.ace-chaos .ace_fold:hover {background: #CCC; color: #000;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/chaos\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-chrome.js",
    "content": "define(\"ace/theme/chrome\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-chrome\",t.cssText='.ace-chrome .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-chrome .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-chrome {background-color: #FFFFFF;color: black;}.ace-chrome .ace_cursor {color: black;}.ace-chrome .ace_invisible {color: rgb(191, 191, 191);}.ace-chrome .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-chrome .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-chrome .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-chrome .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-chrome .ace_fold {}.ace-chrome .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-chrome .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-chrome .ace_support.ace_type,.ace-chrome .ace_support.ace_class.ace-chrome .ace_support.ace_other {color: rgb(109, 121, 222);}.ace-chrome .ace_variable.ace_parameter {font-style:italic;color:#FD971F;}.ace-chrome .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-chrome .ace_comment {color: #236e24;}.ace-chrome .ace_comment.ace_doc {color: #236e24;}.ace-chrome .ace_comment.ace_doc.ace_tag {color: #236e24;}.ace-chrome .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-chrome .ace_variable {color: rgb(49, 132, 149);}.ace-chrome .ace_xml-pe {color: rgb(104, 104, 91);}.ace-chrome .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-chrome .ace_heading {color: rgb(12, 7, 255);}.ace-chrome .ace_list {color:rgb(185, 6, 144);}.ace-chrome .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-chrome .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-chrome .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-chrome .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-chrome .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-chrome .ace_gutter-active-line {background-color : #dcdcdc;}.ace-chrome .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-chrome .ace_storage,.ace-chrome .ace_keyword,.ace-chrome .ace_meta.ace_tag {color: rgb(147, 15, 128);}.ace-chrome .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-chrome .ace_string {color: #1A1AA6;}.ace-chrome .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-chrome .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/chrome\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-clouds.js",
    "content": "define(\"ace/theme/clouds\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-clouds\",t.cssText='.ace-clouds .ace_gutter {background: #ebebeb;color: #333}.ace-clouds .ace_print-margin {width: 1px;background: #e8e8e8}.ace-clouds {background-color: #FFFFFF;color: #000000}.ace-clouds .ace_cursor {color: #000000}.ace-clouds .ace_marker-layer .ace_selection {background: #BDD5FC}.ace-clouds.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;}.ace-clouds .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-clouds .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-clouds .ace_marker-layer .ace_active-line {background: #FFFBD1}.ace-clouds .ace_gutter-active-line {background-color : #dcdcdc}.ace-clouds .ace_marker-layer .ace_selected-word {border: 1px solid #BDD5FC}.ace-clouds .ace_invisible {color: #BFBFBF}.ace-clouds .ace_keyword,.ace-clouds .ace_meta,.ace-clouds .ace_support.ace_constant.ace_property-value {color: #AF956F}.ace-clouds .ace_keyword.ace_operator {color: #484848}.ace-clouds .ace_keyword.ace_other.ace_unit {color: #96DC5F}.ace-clouds .ace_constant.ace_language {color: #39946A}.ace-clouds .ace_constant.ace_numeric {color: #46A609}.ace-clouds .ace_constant.ace_character.ace_entity {color: #BF78CC}.ace-clouds .ace_invalid {background-color: #FF002A}.ace-clouds .ace_fold {background-color: #AF956F;border-color: #000000}.ace-clouds .ace_storage,.ace-clouds .ace_support.ace_class,.ace-clouds .ace_support.ace_function,.ace-clouds .ace_support.ace_other,.ace-clouds .ace_support.ace_type {color: #C52727}.ace-clouds .ace_string {color: #5D90CD}.ace-clouds .ace_comment {color: #BCC8BA}.ace-clouds .ace_entity.ace_name.ace_tag,.ace-clouds .ace_entity.ace_other.ace_attribute-name {color: #606060}.ace-clouds .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/clouds\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-clouds_midnight.js",
    "content": "define(\"ace/theme/clouds_midnight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-clouds-midnight\",t.cssText=\".ace-clouds-midnight .ace_gutter {background: #232323;color: #929292}.ace-clouds-midnight .ace_print-margin {width: 1px;background: #232323}.ace-clouds-midnight {background-color: #191919;color: #929292}.ace-clouds-midnight .ace_cursor {color: #7DA5DC}.ace-clouds-midnight .ace_marker-layer .ace_selection {background: #000000}.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #191919;}.ace-clouds-midnight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-clouds-midnight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-clouds-midnight .ace_marker-layer .ace_active-line {background: rgba(215, 215, 215, 0.031)}.ace-clouds-midnight .ace_gutter-active-line {background-color: rgba(215, 215, 215, 0.031)}.ace-clouds-midnight .ace_marker-layer .ace_selected-word {border: 1px solid #000000}.ace-clouds-midnight .ace_invisible {color: #666}.ace-clouds-midnight .ace_keyword,.ace-clouds-midnight .ace_meta,.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {color: #927C5D}.ace-clouds-midnight .ace_keyword.ace_operator {color: #4B4B4B}.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {color: #366F1A}.ace-clouds-midnight .ace_constant.ace_language {color: #39946A}.ace-clouds-midnight .ace_constant.ace_numeric {color: #46A609}.ace-clouds-midnight .ace_constant.ace_character.ace_entity {color: #A165AC}.ace-clouds-midnight .ace_invalid {color: #FFFFFF;background-color: #E92E2E}.ace-clouds-midnight .ace_fold {background-color: #927C5D;border-color: #929292}.ace-clouds-midnight .ace_storage,.ace-clouds-midnight .ace_support.ace_class,.ace-clouds-midnight .ace_support.ace_function,.ace-clouds-midnight .ace_support.ace_other,.ace-clouds-midnight .ace_support.ace_type {color: #E92E2E}.ace-clouds-midnight .ace_string {color: #5D90CD}.ace-clouds-midnight .ace_comment {color: #3C403B}.ace-clouds-midnight .ace_entity.ace_name.ace_tag,.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {color: #606060}.ace-clouds-midnight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/clouds_midnight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-cobalt.js",
    "content": "define(\"ace/theme/cobalt\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-cobalt\",t.cssText=\".ace-cobalt .ace_gutter {background: #011e3a;color: rgb(128,145,160)}.ace-cobalt .ace_print-margin {width: 1px;background: #555555}.ace-cobalt {background-color: #002240;color: #FFFFFF}.ace-cobalt .ace_cursor {color: #FFFFFF}.ace-cobalt .ace_marker-layer .ace_selection {background: rgba(179, 101, 57, 0.75)}.ace-cobalt.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002240;}.ace-cobalt .ace_marker-layer .ace_step {background: rgb(127, 111, 19)}.ace-cobalt .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.15)}.ace-cobalt .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.35)}.ace-cobalt .ace_gutter-active-line {background-color: rgba(0, 0, 0, 0.35)}.ace-cobalt .ace_marker-layer .ace_selected-word {border: 1px solid rgba(179, 101, 57, 0.75)}.ace-cobalt .ace_invisible {color: rgba(255, 255, 255, 0.15)}.ace-cobalt .ace_keyword,.ace-cobalt .ace_meta {color: #FF9D00}.ace-cobalt .ace_constant,.ace-cobalt .ace_constant.ace_character,.ace-cobalt .ace_constant.ace_character.ace_escape,.ace-cobalt .ace_constant.ace_other {color: #FF628C}.ace-cobalt .ace_invalid {color: #F8F8F8;background-color: #800F00}.ace-cobalt .ace_support {color: #80FFBB}.ace-cobalt .ace_support.ace_constant {color: #EB939A}.ace-cobalt .ace_fold {background-color: #FF9D00;border-color: #FFFFFF}.ace-cobalt .ace_support.ace_function {color: #FFB054}.ace-cobalt .ace_storage {color: #FFEE80}.ace-cobalt .ace_entity {color: #FFDD00}.ace-cobalt .ace_string {color: #3AD900}.ace-cobalt .ace_string.ace_regexp {color: #80FFC2}.ace-cobalt .ace_comment {font-style: italic;color: #0088FF}.ace-cobalt .ace_heading,.ace-cobalt .ace_markup.ace_heading {color: #C8E4FD;background-color: #001221}.ace-cobalt .ace_list,.ace-cobalt .ace_markup.ace_list {background-color: #130D26}.ace-cobalt .ace_variable {color: #CCCCCC}.ace-cobalt .ace_variable.ace_language {color: #FF80E1}.ace-cobalt .ace_meta.ace_tag {color: #9EFFFF}.ace-cobalt .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/cobalt\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-crimson_editor.js",
    "content": "define(\"ace/theme/crimson_editor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssText='.ace-crimson-editor .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-crimson-editor .ace_gutter-layer {width: 100%;text-align: right;}.ace-crimson-editor .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-crimson-editor {background-color: #FFFFFF;color: rgb(64, 64, 64);}.ace-crimson-editor .ace_cursor {color: black;}.ace-crimson-editor .ace_invisible {color: rgb(191, 191, 191);}.ace-crimson-editor .ace_identifier {color: black;}.ace-crimson-editor .ace_keyword {color: blue;}.ace-crimson-editor .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-crimson-editor .ace_constant.ace_language {color: rgb(255, 156, 0);}.ace-crimson-editor .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-crimson-editor .ace_invalid {text-decoration: line-through;color: rgb(224, 0, 0);}.ace-crimson-editor .ace_fold {}.ace-crimson-editor .ace_support.ace_function {color: rgb(192, 0, 0);}.ace-crimson-editor .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-crimson-editor .ace_support.ace_type,.ace-crimson-editor .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-crimson-editor .ace_keyword.ace_operator {color: rgb(49, 132, 149);}.ace-crimson-editor .ace_string {color: rgb(128, 0, 128);}.ace-crimson-editor .ace_comment {color: rgb(76, 136, 107);}.ace-crimson-editor .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-crimson-editor .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-crimson-editor .ace_constant.ace_numeric {color: rgb(0, 0, 64);}.ace-crimson-editor .ace_variable {color: rgb(0, 64, 128);}.ace-crimson-editor .ace_xml-pe {color: rgb(104, 104, 91);}.ace-crimson-editor .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-crimson-editor .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-crimson-editor .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-crimson-editor .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-crimson-editor .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254);}.ace-crimson-editor .ace_gutter-active-line {background-color : #dcdcdc;}.ace-crimson-editor .ace_meta.ace_tag {color:rgb(28, 2, 255);}.ace-crimson-editor .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-crimson-editor .ace_string.ace_regex {color: rgb(192, 0, 192);}.ace-crimson-editor .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.cssClass=\"ace-crimson-editor\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/crimson_editor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-dawn.js",
    "content": "define(\"ace/theme/dawn\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-dawn\",t.cssText=\".ace-dawn .ace_gutter {background: #ebebeb;color: #333}.ace-dawn .ace_print-margin {width: 1px;background: #e8e8e8}.ace-dawn {background-color: #F9F9F9;color: #080808}.ace-dawn .ace_cursor {color: #000000}.ace-dawn .ace_marker-layer .ace_selection {background: rgba(39, 95, 255, 0.30)}.ace-dawn.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #F9F9F9;}.ace-dawn .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-dawn .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(75, 75, 126, 0.50)}.ace-dawn .ace_marker-layer .ace_active-line {background: rgba(36, 99, 180, 0.12)}.ace-dawn .ace_gutter-active-line {background-color : #dcdcdc}.ace-dawn .ace_marker-layer .ace_selected-word {border: 1px solid rgba(39, 95, 255, 0.30)}.ace-dawn .ace_invisible {color: rgba(75, 75, 126, 0.50)}.ace-dawn .ace_keyword,.ace-dawn .ace_meta {color: #794938}.ace-dawn .ace_constant,.ace-dawn .ace_constant.ace_character,.ace-dawn .ace_constant.ace_character.ace_escape,.ace-dawn .ace_constant.ace_other {color: #811F24}.ace-dawn .ace_invalid.ace_illegal {text-decoration: underline;font-style: italic;color: #F8F8F8;background-color: #B52A1D}.ace-dawn .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #B52A1D}.ace-dawn .ace_support {color: #691C97}.ace-dawn .ace_support.ace_constant {color: #B4371F}.ace-dawn .ace_fold {background-color: #794938;border-color: #080808}.ace-dawn .ace_list,.ace-dawn .ace_markup.ace_list,.ace-dawn .ace_support.ace_function {color: #693A17}.ace-dawn .ace_storage {font-style: italic;color: #A71D5D}.ace-dawn .ace_string {color: #0B6125}.ace-dawn .ace_string.ace_regexp {color: #CF5628}.ace-dawn .ace_comment {font-style: italic;color: #5A525F}.ace-dawn .ace_heading,.ace-dawn .ace_markup.ace_heading {color: #19356D}.ace-dawn .ace_variable {color: #234A97}.ace-dawn .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/dawn\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-dracula.js",
    "content": "define(\"ace/theme/dracula\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-dracula\",t.cssText=\".ace-dracula .ace_gutter {background: #282a36;color: rgb(144,145,148)}.ace-dracula .ace_print-margin {width: 1px;background: #44475a}.ace-dracula {background-color: #282a36;color: #f8f8f2}.ace-dracula .ace_cursor {color: #f8f8f0}.ace-dracula .ace_marker-layer .ace_selection {background: #44475a}.ace-dracula.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #282a36;border-radius: 2px}.ace-dracula .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-dracula .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #a29709}.ace-dracula .ace_marker-layer .ace_active-line {background: #44475a}.ace-dracula .ace_gutter-active-line {background-color: #44475a}.ace-dracula .ace_marker-layer .ace_selected-word {box-shadow: 0px 0px 0px 1px #a29709;border-radius: 3px;}.ace-dracula .ace_fold {background-color: #50fa7b;border-color: #f8f8f2}.ace-dracula .ace_keyword {color: #ff79c6}.ace-dracula .ace_constant.ace_language {color: #bd93f9}.ace-dracula .ace_constant.ace_numeric {color: #bd93f9}.ace-dracula .ace_constant.ace_character {color: #bd93f9}.ace-dracula .ace_constant.ace_character.ace_escape {color: #ff79c6}.ace-dracula .ace_constant.ace_other {color: #bd93f9}.ace-dracula .ace_support.ace_function {color: #8be9fd}.ace-dracula .ace_support.ace_constant {color: #6be5fd}.ace-dracula .ace_support.ace_class {font-style: italic;color: #66d9ef}.ace-dracula .ace_support.ace_type {font-style: italic;color: #66d9ef}.ace-dracula .ace_storage {color: #ff79c6}.ace-dracula .ace_storage.ace_type {font-style: italic;color: #8be9fd}.ace-dracula .ace_invalid {color: #F8F8F0;background-color: #ff79c6}.ace-dracula .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #bd93f9}.ace-dracula .ace_string {color: #f1fa8c}.ace-dracula .ace_comment {color: #6272a4}.ace-dracula .ace_variable {color: #50fa7b}.ace-dracula .ace_variable.ace_parameter {font-style: italic;color: #ffb86c}.ace-dracula .ace_entity.ace_other.ace_attribute-name {color: #50fa7b}.ace-dracula .ace_entity.ace_name.ace_function {color: #50fa7b}.ace-dracula .ace_entity.ace_name.ace_tag {color: #ff79c6}.ace-dracula .ace_invisible {color: #626680;}.ace-dracula .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}\",t.$selectionColorConflict=!0;var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/dracula\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-dreamweaver.js",
    "content": "define(\"ace/theme/dreamweaver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-dreamweaver\",t.cssText='.ace-dreamweaver .ace_gutter {background: #e8e8e8;color: #333;}.ace-dreamweaver .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-dreamweaver {background-color: #FFFFFF;color: black;}.ace-dreamweaver .ace_fold {background-color: #757AD8;}.ace-dreamweaver .ace_cursor {color: black;}.ace-dreamweaver .ace_invisible {color: rgb(191, 191, 191);}.ace-dreamweaver .ace_storage,.ace-dreamweaver .ace_keyword {color: blue;}.ace-dreamweaver .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-dreamweaver .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-dreamweaver .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-dreamweaver .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-dreamweaver .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-dreamweaver .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-dreamweaver .ace_support.ace_type,.ace-dreamweaver .ace_support.ace_class {color: #009;}.ace-dreamweaver .ace_support.ace_php_tag {color: #f00;}.ace-dreamweaver .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-dreamweaver .ace_string {color: #00F;}.ace-dreamweaver .ace_comment {color: rgb(76, 136, 107);}.ace-dreamweaver .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-dreamweaver .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-dreamweaver .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-dreamweaver .ace_variable {color: #06F}.ace-dreamweaver .ace_xml-pe {color: rgb(104, 104, 91);}.ace-dreamweaver .ace_entity.ace_name.ace_function {color: #00F;}.ace-dreamweaver .ace_heading {color: rgb(12, 7, 255);}.ace-dreamweaver .ace_list {color:rgb(185, 6, 144);}.ace-dreamweaver .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-dreamweaver .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-dreamweaver .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-dreamweaver .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-dreamweaver .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-dreamweaver .ace_gutter-active-line {background-color : #DCDCDC;}.ace-dreamweaver .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-dreamweaver .ace_meta.ace_tag {color:#009;}.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {color:#060;}.ace-dreamweaver .ace_meta.ace_tag.ace_form {color:#F90;}.ace-dreamweaver .ace_meta.ace_tag.ace_image {color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_script {color:#900;}.ace-dreamweaver .ace_meta.ace_tag.ace_style {color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_table {color:#099;}.ace-dreamweaver .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-dreamweaver .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/dreamweaver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-eclipse.js",
    "content": "define(\"ace/theme/eclipse\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssText='.ace-eclipse .ace_gutter {background: #ebebeb;border-right: 1px solid rgb(159, 159, 159);color: rgb(136, 136, 136);}.ace-eclipse .ace_print-margin {width: 1px;background: #ebebeb;}.ace-eclipse {background-color: #FFFFFF;color: black;}.ace-eclipse .ace_fold {background-color: rgb(60, 76, 114);}.ace-eclipse .ace_cursor {color: black;}.ace-eclipse .ace_storage,.ace-eclipse .ace_keyword,.ace-eclipse .ace_variable {color: rgb(127, 0, 85);}.ace-eclipse .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-eclipse .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-eclipse .ace_function {color: rgb(60, 76, 114);}.ace-eclipse .ace_string {color: rgb(42, 0, 255);}.ace-eclipse .ace_comment {color: rgb(113, 150, 130);}.ace-eclipse .ace_comment.ace_doc {color: rgb(63, 95, 191);}.ace-eclipse .ace_comment.ace_doc.ace_tag {color: rgb(127, 159, 191);}.ace-eclipse .ace_constant.ace_numeric {color: darkblue;}.ace-eclipse .ace_tag {color: rgb(25, 118, 116);}.ace-eclipse .ace_type {color: rgb(127, 0, 127);}.ace-eclipse .ace_xml-pe {color: rgb(104, 104, 91);}.ace-eclipse .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-eclipse .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-eclipse .ace_meta.ace_tag {color:rgb(25, 118, 116);}.ace-eclipse .ace_invisible {color: #ddd;}.ace-eclipse .ace_entity.ace_other.ace_attribute-name {color:rgb(127, 0, 127);}.ace-eclipse .ace_marker-layer .ace_step {background: rgb(255, 255, 0);}.ace-eclipse .ace_active-line {background: rgb(232, 242, 254);}.ace-eclipse .ace_gutter-active-line {background-color : #DADADA;}.ace-eclipse .ace_marker-layer .ace_selected-word {border: 1px solid rgb(181, 213, 255);}.ace-eclipse .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.cssClass=\"ace-eclipse\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/eclipse\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-github.js",
    "content": "define(\"ace/theme/github\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-github\",t.cssText='.ace-github .ace_gutter {background: #e8e8e8;color: #AAA;}.ace-github  {background: #fff;color: #000;}.ace-github .ace_keyword {font-weight: bold;}.ace-github .ace_string {color: #D14;}.ace-github .ace_variable.ace_class {color: teal;}.ace-github .ace_constant.ace_numeric {color: #099;}.ace-github .ace_constant.ace_buildin {color: #0086B3;}.ace-github .ace_support.ace_function {color: #0086B3;}.ace-github .ace_comment {color: #998;font-style: italic;}.ace-github .ace_variable.ace_language  {color: #0086B3;}.ace-github .ace_paren {font-weight: bold;}.ace-github .ace_boolean {font-weight: bold;}.ace-github .ace_string.ace_regexp {color: #009926;font-weight: normal;}.ace-github .ace_variable.ace_instance {color: teal;}.ace-github .ace_constant.ace_language {font-weight: bold;}.ace-github .ace_cursor {color: black;}.ace-github.ace_focus .ace_marker-layer .ace_active-line {background: rgb(255, 255, 204);}.ace-github .ace_marker-layer .ace_active-line {background: rgb(245, 245, 245);}.ace-github .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-github.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-github.ace_nobold .ace_line > span {font-weight: normal !important;}.ace-github .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-github .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-github .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-github .ace_gutter-active-line {background-color : rgba(0, 0, 0, 0.07);}.ace-github .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-github .ace_invisible {color: #BFBFBF}.ace-github .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-github .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/github\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-gob.js",
    "content": "define(\"ace/theme/gob\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-gob\",t.cssText=\".ace-gob .ace_gutter {background: #0B1818;color: #03EE03}.ace-gob .ace_print-margin {width: 1px;background: #131313}.ace-gob {background-color: #0B0B0B;color: #00FF00}.ace-gob .ace_cursor {border-color: rgba(16, 248, 255, 0.90);background-color: rgba(16, 240, 248, 0.70);opacity: 0.4;}.ace-gob .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-gob.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #141414;}.ace-gob .ace_marker-layer .ace_step {background: rgb(16, 128, 0)}.ace-gob .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(64, 255, 255, 0.25)}.ace-gob .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.04)}.ace-gob .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.04)}.ace-gob .ace_marker-layer .ace_selected-word {border: 1px solid rgba(192, 240, 255, 0.20)}.ace-gob .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-gob .ace_keyword,.ace-gob .ace_meta {color: #10D8E8}.ace-gob .ace_constant,.ace-gob .ace_constant.ace_character,.ace-gob .ace_constant.ace_character.ace_escape,.ace-gob .ace_constant.ace_other,.ace-gob .ace_heading,.ace-gob .ace_markup.ace_heading,.ace-gob .ace_support.ace_constant {color: #10F0A0}.ace-gob .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-gob .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #20F8C0}.ace-gob .ace_support {color: #20E8B0}.ace-gob .ace_fold {background-color: #50B8B8;border-color: #70F8F8}.ace-gob .ace_support.ace_function {color: #00F800}.ace-gob .ace_list,.ace-gob .ace_markup.ace_list,.ace-gob .ace_storage {color: #10FF98}.ace-gob .ace_entity.ace_name.ace_function,.ace-gob .ace_meta.ace_tag,.ace-gob .ace_variable {color: #00F868}.ace-gob .ace_string {color: #10F060}.ace-gob .ace_string.ace_regexp {color: #20F090;}.ace-gob .ace_comment {font-style: italic;color: #00E060;}.ace-gob .ace_variable {color: #00F888;}.ace-gob .ace_xml-pe {color: #488858;}.ace-gob .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/gob\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-gruvbox.js",
    "content": "define(\"ace/theme/gruvbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-gruvbox\",t.cssText='.ace-gruvbox .ace_gutter-active-line {background-color: #3C3836;}.ace-gruvbox {color: #EBDAB4;background-color: #1D2021;}.ace-gruvbox .ace_invisible {color: #504945;}.ace-gruvbox .ace_marker-layer .ace_selection {background: rgba(179, 101, 57, 0.75)}.ace-gruvbox.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002240;}.ace-gruvbox .ace_keyword {color: #8ec07c;}.ace-gruvbox .ace_comment {font-style: italic;color: #928375;}.ace-gruvbox .ace-statement {color: red;}.ace-gruvbox .ace_variable {color: #84A598;}.ace-gruvbox .ace_variable.ace_language {color: #D2879B;}.ace-gruvbox .ace_constant {color: #C2859A;}.ace-gruvbox .ace_constant.ace_language {color: #C2859A;}.ace-gruvbox .ace_constant.ace_numeric {color: #C2859A;}.ace-gruvbox .ace_string {color: #B8BA37;}.ace-gruvbox .ace_support {color: #F9BC41;}.ace-gruvbox .ace_support.ace_function {color: #F84B3C;}.ace-gruvbox .ace_storage {color: #8FBF7F;}.ace-gruvbox .ace_keyword.ace_operator {color: #EBDAB4;}.ace-gruvbox .ace_punctuation.ace_operator {color: yellow;}.ace-gruvbox .ace_marker-layer .ace_active-line {background: #3C3836;}.ace-gruvbox .ace_marker-layer .ace_selected-word {border-radius: 4px;border: 8px solid #3f475d;}.ace-gruvbox .ace_print-margin {width: 5px;background: #3C3836;}.ace-gruvbox .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/gruvbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-idle_fingers.js",
    "content": "define(\"ace/theme/idle_fingers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-idle-fingers\",t.cssText=\".ace-idle-fingers .ace_gutter {background: #3b3b3b;color: rgb(153,153,153)}.ace-idle-fingers .ace_print-margin {width: 1px;background: #3b3b3b}.ace-idle-fingers {background-color: #323232;color: #FFFFFF}.ace-idle-fingers .ace_cursor {color: #91FF00}.ace-idle-fingers .ace_marker-layer .ace_selection {background: rgba(90, 100, 126, 0.88)}.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #323232;}.ace-idle-fingers .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-idle-fingers .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-idle-fingers .ace_marker-layer .ace_active-line {background: #353637}.ace-idle-fingers .ace_gutter-active-line {background-color: #353637}.ace-idle-fingers .ace_marker-layer .ace_selected-word {border: 1px solid rgba(90, 100, 126, 0.88)}.ace-idle-fingers .ace_invisible {color: #404040}.ace-idle-fingers .ace_keyword,.ace-idle-fingers .ace_meta {color: #CC7833}.ace-idle-fingers .ace_constant,.ace-idle-fingers .ace_constant.ace_character,.ace-idle-fingers .ace_constant.ace_character.ace_escape,.ace-idle-fingers .ace_constant.ace_other,.ace-idle-fingers .ace_support.ace_constant {color: #6C99BB}.ace-idle-fingers .ace_invalid {color: #FFFFFF;background-color: #FF0000}.ace-idle-fingers .ace_fold {background-color: #CC7833;border-color: #FFFFFF}.ace-idle-fingers .ace_support.ace_function {color: #B83426}.ace-idle-fingers .ace_variable.ace_parameter {font-style: italic}.ace-idle-fingers .ace_string {color: #A5C261}.ace-idle-fingers .ace_string.ace_regexp {color: #CCCC33}.ace-idle-fingers .ace_comment {font-style: italic;color: #BC9458}.ace-idle-fingers .ace_meta.ace_tag {color: #FFE5BB}.ace-idle-fingers .ace_entity.ace_name {color: #FFC66D}.ace-idle-fingers .ace_collab.ace_user1 {color: #323232;background-color: #FFF980}.ace-idle-fingers .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/idle_fingers\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-iplastic.js",
    "content": "define(\"ace/theme/iplastic\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-iplastic\",t.cssText=\".ace-iplastic .ace_gutter {background: #dddddd;color: #666666}.ace-iplastic .ace_print-margin {width: 1px;background: #bbbbbb}.ace-iplastic {background-color: #eeeeee;color: #333333}.ace-iplastic .ace_cursor {color: #333}.ace-iplastic .ace_marker-layer .ace_selection {background: #BAD6FD;}.ace-iplastic.ace_multiselect .ace_selection.ace_start {border-radius: 4px}.ace-iplastic .ace_marker-layer .ace_step {background: #444444}.ace-iplastic .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E;background: #FFF799}.ace-iplastic .ace_marker-layer .ace_active-line {background: #e5e5e5}.ace-iplastic .ace_gutter-active-line {background-color: #eeeeee}.ace-iplastic .ace_marker-layer .ace_selected-word {border: 1px solid #555555;border-radius:4px}.ace-iplastic .ace_invisible {color: #999999}.ace-iplastic .ace_entity.ace_name.ace_tag,.ace-iplastic .ace_keyword,.ace-iplastic .ace_meta.ace_tag,.ace-iplastic .ace_storage {color: #0000FF}.ace-iplastic .ace_punctuation,.ace-iplastic .ace_punctuation.ace_tag {color: #000}.ace-iplastic .ace_constant {color: #333333;font-weight: 700}.ace-iplastic .ace_constant.ace_character,.ace-iplastic .ace_constant.ace_language,.ace-iplastic .ace_constant.ace_numeric,.ace-iplastic .ace_constant.ace_other {color: #0066FF;font-weight: 700}.ace-iplastic .ace_constant.ace_numeric{font-weight: 100}.ace-iplastic .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-iplastic .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-iplastic .ace_support.ace_constant,.ace-iplastic .ace_support.ace_function {color: #333333;font-weight: 700}.ace-iplastic .ace_fold {background-color: #464646;border-color: #F8F8F2}.ace-iplastic .ace_storage.ace_type,.ace-iplastic .ace_support.ace_class,.ace-iplastic .ace_support.ace_type {color: #3333fc;font-weight: 700}.ace-iplastic .ace_entity.ace_name.ace_function,.ace-iplastic .ace_entity.ace_other,.ace-iplastic .ace_entity.ace_other.ace_attribute-name,.ace-iplastic .ace_variable {color: #3366cc;font-style: italic}.ace-iplastic .ace_variable.ace_parameter {font-style: italic;color: #2469E0}.ace-iplastic .ace_string {color: #a55f03}.ace-iplastic .ace_comment {color: #777777;font-style: italic}.ace-iplastic .ace_fold-widget {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);}.ace-iplastic .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAABlJREFUeNpi+P//PwMzMzPzfwAAAAD//wMAGRsECSML/RIAAAAASUVORK5CYII=) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/iplastic\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-katzenmilch.js",
    "content": "define(\"ace/theme/katzenmilch\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-katzenmilch\",t.cssText=\".ace-katzenmilch .ace_gutter,.ace-katzenmilch .ace_gutter {background: #e8e8e8;color: #333}.ace-katzenmilch .ace_print-margin {width: 1px;background: #e8e8e8}.ace-katzenmilch {background-color: #f3f2f3;color: rgba(15, 0, 9, 1.0)}.ace-katzenmilch .ace_cursor {border-left: 2px solid #100011}.ace-katzenmilch .ace_overwrite-cursors .ace_cursor {border-left: 0px;border-bottom: 1px solid #100011}.ace-katzenmilch .ace_marker-layer .ace_selection {background: rgba(100, 5, 208, 0.27)}.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #f3f2f3;}.ace-katzenmilch .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-katzenmilch .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(0, 0, 0, 0.33);}.ace-katzenmilch .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254)}.ace-katzenmilch .ace_gutter-active-line {background-color: rgb(232, 242, 254)}.ace-katzenmilch .ace_marker-layer .ace_selected-word {border: 1px solid rgba(100, 5, 208, 0.27)}.ace-katzenmilch .ace_invisible {color: #BFBFBF}.ace-katzenmilch .ace_fold {background-color: rgba(2, 95, 73, 0.97);border-color: rgba(15, 0, 9, 1.0)}.ace-katzenmilch .ace_keyword {color: #674Aa8;rbackground-color: rgba(163, 170, 216, 0.055)}.ace-katzenmilch .ace_constant.ace_language {color: #7D7e52;rbackground-color: rgba(189, 190, 130, 0.059)}.ace-katzenmilch .ace_constant.ace_numeric {color: rgba(79, 130, 123, 0.93);rbackground-color: rgba(119, 194, 187, 0.059)}.ace-katzenmilch .ace_constant.ace_character,.ace-katzenmilch .ace_constant.ace_other {color: rgba(2, 95, 105, 1.0);rbackground-color: rgba(127, 34, 153, 0.063)}.ace-katzenmilch .ace_support.ace_function {color: #9D7e62;rbackground-color: rgba(189, 190, 130, 0.039)}.ace-katzenmilch .ace_support.ace_class {color: rgba(239, 106, 167, 1.0);rbackground-color: rgba(239, 106, 167, 0.063)}.ace-katzenmilch .ace_storage {color: rgba(123, 92, 191, 1.0);rbackground-color: rgba(139, 93, 223, 0.051)}.ace-katzenmilch .ace_invalid {color: #DFDFD5;rbackground-color: #CC1B27}.ace-katzenmilch .ace_string {color: #5a5f9b;rbackground-color: rgba(170, 175, 219, 0.035)}.ace-katzenmilch .ace_comment {font-style: italic;color: rgba(64, 79, 80, 0.67);rbackground-color: rgba(95, 15, 255, 0.0078)}.ace-katzenmilch .ace_entity.ace_name.ace_function,.ace-katzenmilch .ace_variable {color: rgba(2, 95, 73, 0.97);rbackground-color: rgba(34, 255, 73, 0.12)}.ace-katzenmilch .ace_variable.ace_language {color: #316fcf;rbackground-color: rgba(58, 175, 255, 0.039)}.ace-katzenmilch .ace_variable.ace_parameter {font-style: italic;color: rgba(51, 150, 159, 0.87);rbackground-color: rgba(5, 214, 249, 0.043)}.ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {color: rgba(73, 70, 194, 0.93);rbackground-color: rgba(73, 134, 194, 0.035)}.ace-katzenmilch .ace_entity.ace_name.ace_tag {color: #3976a2;rbackground-color: rgba(73, 166, 210, 0.039)}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/katzenmilch\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-kr_theme.js",
    "content": "define(\"ace/theme/kr_theme\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-kr-theme\",t.cssText=\".ace-kr-theme .ace_gutter {background: #1c1917;color: #FCFFE0}.ace-kr-theme .ace_print-margin {width: 1px;background: #1c1917}.ace-kr-theme {background-color: #0B0A09;color: #FCFFE0}.ace-kr-theme .ace_cursor {color: #FF9900}.ace-kr-theme .ace_marker-layer .ace_selection {background: rgba(170, 0, 255, 0.45)}.ace-kr-theme.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #0B0A09;}.ace-kr-theme .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-kr-theme .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 177, 111, 0.32)}.ace-kr-theme .ace_marker-layer .ace_active-line {background: #38403D}.ace-kr-theme .ace_gutter-active-line {background-color : #38403D}.ace-kr-theme .ace_marker-layer .ace_selected-word {border: 1px solid rgba(170, 0, 255, 0.45)}.ace-kr-theme .ace_invisible {color: rgba(255, 177, 111, 0.32)}.ace-kr-theme .ace_keyword,.ace-kr-theme .ace_meta {color: #949C8B}.ace-kr-theme .ace_constant,.ace-kr-theme .ace_constant.ace_character,.ace-kr-theme .ace_constant.ace_character.ace_escape,.ace-kr-theme .ace_constant.ace_other {color: rgba(210, 117, 24, 0.76)}.ace-kr-theme .ace_invalid {color: #F8F8F8;background-color: #A41300}.ace-kr-theme .ace_support {color: #9FC28A}.ace-kr-theme .ace_support.ace_constant {color: #C27E66}.ace-kr-theme .ace_fold {background-color: #949C8B;border-color: #FCFFE0}.ace-kr-theme .ace_support.ace_function {color: #85873A}.ace-kr-theme .ace_storage {color: #FFEE80}.ace-kr-theme .ace_string {color: rgba(164, 161, 181, 0.8)}.ace-kr-theme .ace_string.ace_regexp {color: rgba(125, 255, 192, 0.65)}.ace-kr-theme .ace_comment {font-style: italic;color: #706D5B}.ace-kr-theme .ace_variable {color: #D1A796}.ace-kr-theme .ace_list,.ace-kr-theme .ace_markup.ace_list {background-color: #0F0040}.ace-kr-theme .ace_variable.ace_language {color: #FF80E1}.ace-kr-theme .ace_meta.ace_tag {color: #BABD9C}.ace-kr-theme .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/kr_theme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-kuroir.js",
    "content": "define(\"ace/theme/kuroir\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-kuroir\",t.cssText=\".ace-kuroir .ace_gutter {background: #e8e8e8;color: #333;}.ace-kuroir .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-kuroir {background-color: #E8E9E8;color: #363636;}.ace-kuroir .ace_cursor {color: #202020;}.ace-kuroir .ace_marker-layer .ace_selection {background: rgba(245, 170, 0, 0.57);}.ace-kuroir.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #E8E9E8;}.ace-kuroir .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-kuroir .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(0, 0, 0, 0.29);}.ace-kuroir .ace_marker-layer .ace_active-line {background: rgba(203, 220, 47, 0.22);}.ace-kuroir .ace_gutter-active-line {background-color: rgba(203, 220, 47, 0.22);}.ace-kuroir .ace_marker-layer .ace_selected-word {border: 1px solid rgba(245, 170, 0, 0.57);}.ace-kuroir .ace_invisible {color: #BFBFBF}.ace-kuroir .ace_fold {border-color: #363636;}.ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;background-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;font-style:italic;color:#FD1732;background-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;background-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);background-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;background-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/kuroir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-merbivore.js",
    "content": "define(\"ace/theme/merbivore\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-merbivore\",t.cssText=\".ace-merbivore .ace_gutter {background: #202020;color: #E6E1DC}.ace-merbivore .ace_print-margin {width: 1px;background: #555651}.ace-merbivore {background-color: #161616;color: #E6E1DC}.ace-merbivore .ace_cursor {color: #FFFFFF}.ace-merbivore .ace_marker-layer .ace_selection {background: #454545}.ace-merbivore.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #161616;}.ace-merbivore .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-merbivore .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-merbivore .ace_marker-layer .ace_active-line {background: #333435}.ace-merbivore .ace_gutter-active-line {background-color: #333435}.ace-merbivore .ace_marker-layer .ace_selected-word {border: 1px solid #454545}.ace-merbivore .ace_invisible {color: #404040}.ace-merbivore .ace_entity.ace_name.ace_tag,.ace-merbivore .ace_keyword,.ace-merbivore .ace_meta,.ace-merbivore .ace_meta.ace_tag,.ace-merbivore .ace_storage,.ace-merbivore .ace_support.ace_function {color: #FC6F09}.ace-merbivore .ace_constant,.ace-merbivore .ace_constant.ace_character,.ace-merbivore .ace_constant.ace_character.ace_escape,.ace-merbivore .ace_constant.ace_other,.ace-merbivore .ace_support.ace_type {color: #1EDAFB}.ace-merbivore .ace_constant.ace_character.ace_escape {color: #519F50}.ace-merbivore .ace_constant.ace_language {color: #FDC251}.ace-merbivore .ace_constant.ace_library,.ace-merbivore .ace_string,.ace-merbivore .ace_support.ace_constant {color: #8DFF0A}.ace-merbivore .ace_constant.ace_numeric {color: #58C554}.ace-merbivore .ace_invalid {color: #FFFFFF;background-color: #990000}.ace-merbivore .ace_fold {background-color: #FC6F09;border-color: #E6E1DC}.ace-merbivore .ace_comment {font-style: italic;color: #AD2EA4}.ace-merbivore .ace_entity.ace_other.ace_attribute-name {color: #FFFF89}.ace-merbivore .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/merbivore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-merbivore_soft.js",
    "content": "define(\"ace/theme/merbivore_soft\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-merbivore-soft\",t.cssText=\".ace-merbivore-soft .ace_gutter {background: #262424;color: #E6E1DC}.ace-merbivore-soft .ace_print-margin {width: 1px;background: #262424}.ace-merbivore-soft {background-color: #1C1C1C;color: #E6E1DC}.ace-merbivore-soft .ace_cursor {color: #FFFFFF}.ace-merbivore-soft .ace_marker-layer .ace_selection {background: #494949}.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1C1C1C;}.ace-merbivore-soft .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-merbivore-soft .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-merbivore-soft .ace_marker-layer .ace_active-line {background: #333435}.ace-merbivore-soft .ace_gutter-active-line {background-color: #333435}.ace-merbivore-soft .ace_marker-layer .ace_selected-word {border: 1px solid #494949}.ace-merbivore-soft .ace_invisible {color: #404040}.ace-merbivore-soft .ace_entity.ace_name.ace_tag,.ace-merbivore-soft .ace_keyword,.ace-merbivore-soft .ace_meta,.ace-merbivore-soft .ace_meta.ace_tag,.ace-merbivore-soft .ace_storage {color: #FC803A}.ace-merbivore-soft .ace_constant,.ace-merbivore-soft .ace_constant.ace_character,.ace-merbivore-soft .ace_constant.ace_character.ace_escape,.ace-merbivore-soft .ace_constant.ace_other,.ace-merbivore-soft .ace_support.ace_type {color: #68C1D8}.ace-merbivore-soft .ace_constant.ace_character.ace_escape {color: #B3E5B4}.ace-merbivore-soft .ace_constant.ace_language {color: #E1C582}.ace-merbivore-soft .ace_constant.ace_library,.ace-merbivore-soft .ace_string,.ace-merbivore-soft .ace_support.ace_constant {color: #8EC65F}.ace-merbivore-soft .ace_constant.ace_numeric {color: #7FC578}.ace-merbivore-soft .ace_invalid,.ace-merbivore-soft .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #FE3838}.ace-merbivore-soft .ace_fold {background-color: #FC803A;border-color: #E6E1DC}.ace-merbivore-soft .ace_comment,.ace-merbivore-soft .ace_meta {font-style: italic;color: #AC4BB8}.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {color: #EAF1A3}.ace-merbivore-soft .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/merbivore_soft\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-mono_industrial.js",
    "content": "define(\"ace/theme/mono_industrial\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-mono-industrial\",t.cssText=\".ace-mono-industrial .ace_gutter {background: #1d2521;color: #C5C9C9}.ace-mono-industrial .ace_print-margin {width: 1px;background: #555651}.ace-mono-industrial {background-color: #222C28;color: #FFFFFF}.ace-mono-industrial .ace_cursor {color: #FFFFFF}.ace-mono-industrial .ace_marker-layer .ace_selection {background: rgba(145, 153, 148, 0.40)}.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #222C28;}.ace-mono-industrial .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-mono-industrial .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(102, 108, 104, 0.50)}.ace-mono-industrial .ace_marker-layer .ace_active-line {background: rgba(12, 13, 12, 0.25)}.ace-mono-industrial .ace_gutter-active-line {background-color: rgba(12, 13, 12, 0.25)}.ace-mono-industrial .ace_marker-layer .ace_selected-word {border: 1px solid rgba(145, 153, 148, 0.40)}.ace-mono-industrial .ace_invisible {color: rgba(102, 108, 104, 0.50)}.ace-mono-industrial .ace_string {background-color: #151C19;color: #FFFFFF}.ace-mono-industrial .ace_keyword,.ace-mono-industrial .ace_meta {color: #A39E64}.ace-mono-industrial .ace_constant,.ace-mono-industrial .ace_constant.ace_character,.ace-mono-industrial .ace_constant.ace_character.ace_escape,.ace-mono-industrial .ace_constant.ace_numeric,.ace-mono-industrial .ace_constant.ace_other {color: #E98800}.ace-mono-industrial .ace_entity.ace_name.ace_function,.ace-mono-industrial .ace_keyword.ace_operator,.ace-mono-industrial .ace_variable {color: #A8B3AB}.ace-mono-industrial .ace_invalid {color: #FFFFFF;background-color: rgba(153, 0, 0, 0.68)}.ace-mono-industrial .ace_support.ace_constant {color: #C87500}.ace-mono-industrial .ace_fold {background-color: #A8B3AB;border-color: #FFFFFF}.ace-mono-industrial .ace_support.ace_function {color: #588E60}.ace-mono-industrial .ace_entity.ace_name,.ace-mono-industrial .ace_support.ace_class,.ace-mono-industrial .ace_support.ace_type {color: #5778B6}.ace-mono-industrial .ace_storage {color: #C23B00}.ace-mono-industrial .ace_variable.ace_language,.ace-mono-industrial .ace_variable.ace_parameter {color: #648BD2}.ace-mono-industrial .ace_comment {color: #666C68;background-color: #151C19}.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {color: #909993}.ace-mono-industrial .ace_entity.ace_name.ace_tag {color: #A65EFF}.ace-mono-industrial .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/mono_industrial\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-monokai.js",
    "content": "define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-monokai\",t.cssText=\".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/monokai\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-pastel_on_dark.js",
    "content": "define(\"ace/theme/pastel_on_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-pastel-on-dark\",t.cssText=\".ace-pastel-on-dark .ace_gutter {background: #353030;color: #8F938F}.ace-pastel-on-dark .ace_print-margin {width: 1px;background: #353030}.ace-pastel-on-dark {background-color: #2C2828;color: #8F938F}.ace-pastel-on-dark .ace_cursor {color: #A7A7A7}.ace-pastel-on-dark .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #2C2828;}.ace-pastel-on-dark .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-pastel-on-dark .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-pastel-on-dark .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-pastel-on-dark .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-pastel-on-dark .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-pastel-on-dark .ace_keyword,.ace-pastel-on-dark .ace_meta {color: #757aD8}.ace-pastel-on-dark .ace_constant,.ace-pastel-on-dark .ace_constant.ace_character,.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,.ace-pastel-on-dark .ace_constant.ace_other {color: #4FB7C5}.ace-pastel-on-dark .ace_keyword.ace_operator {color: #797878}.ace-pastel-on-dark .ace_constant.ace_character {color: #AFA472}.ace-pastel-on-dark .ace_constant.ace_language {color: #DE8E30}.ace-pastel-on-dark .ace_constant.ace_numeric {color: #CCCCCC}.ace-pastel-on-dark .ace_invalid,.ace-pastel-on-dark .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-pastel-on-dark .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-pastel-on-dark .ace_fold {background-color: #757aD8;border-color: #8F938F}.ace-pastel-on-dark .ace_support.ace_function {color: #AEB2F8}.ace-pastel-on-dark .ace_string {color: #66A968}.ace-pastel-on-dark .ace_string.ace_regexp {color: #E9C062}.ace-pastel-on-dark .ace_comment {color: #A6C6FF}.ace-pastel-on-dark .ace_variable {color: #BEBF55}.ace-pastel-on-dark .ace_variable.ace_language {color: #C1C144}.ace-pastel-on-dark .ace_xml-pe {color: #494949}.ace-pastel-on-dark .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/pastel_on_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-solarized_dark.js",
    "content": "define(\"ace/theme/solarized_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-solarized-dark\",t.cssText=\".ace-solarized-dark .ace_gutter {background: #01313f;color: #d0edf7}.ace-solarized-dark .ace_print-margin {width: 1px;background: #33555E}.ace-solarized-dark {background-color: #002B36;color: #93A1A1}.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,.ace-solarized-dark .ace_storage {color: #93A1A1}.ace-solarized-dark .ace_cursor,.ace-solarized-dark .ace_string.ace_regexp {color: #D30102}.ace-solarized-dark .ace_marker-layer .ace_active-line,.ace-solarized-dark .ace_marker-layer .ace_selection {background: rgba(255, 255, 255, 0.1)}.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002B36;}.ace-solarized-dark .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-solarized-dark .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_gutter-active-line {background-color: #0d3440}.ace-solarized-dark .ace_marker-layer .ace_selected-word {border: 1px solid #073642}.ace-solarized-dark .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_keyword,.ace-solarized-dark .ace_meta,.ace-solarized-dark .ace_support.ace_class,.ace-solarized-dark .ace_support.ace_type {color: #859900}.ace-solarized-dark .ace_constant.ace_character,.ace-solarized-dark .ace_constant.ace_other {color: #CB4B16}.ace-solarized-dark .ace_constant.ace_language {color: #B58900}.ace-solarized-dark .ace_constant.ace_numeric {color: #D33682}.ace-solarized-dark .ace_fold {background-color: #268BD2;border-color: #93A1A1}.ace-solarized-dark .ace_entity.ace_name.ace_function,.ace-solarized-dark .ace_entity.ace_name.ace_tag,.ace-solarized-dark .ace_support.ace_function,.ace-solarized-dark .ace_variable,.ace-solarized-dark .ace_variable.ace_language {color: #268BD2}.ace-solarized-dark .ace_string {color: #2AA198}.ace-solarized-dark .ace_comment {font-style: italic;color: #657B83}.ace-solarized-dark .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/solarized_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-solarized_light.js",
    "content": "define(\"ace/theme/solarized_light\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-solarized-light\",t.cssText=\".ace-solarized-light .ace_gutter {background: #fbf1d3;color: #333}.ace-solarized-light .ace_print-margin {width: 1px;background: #e8e8e8}.ace-solarized-light {background-color: #FDF6E3;color: #586E75}.ace-solarized-light .ace_cursor {color: #000000}.ace-solarized-light .ace_marker-layer .ace_selection {background: rgba(7, 54, 67, 0.09)}.ace-solarized-light.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FDF6E3;}.ace-solarized-light .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-solarized-light .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_marker-layer .ace_active-line {background: #EEE8D5}.ace-solarized-light .ace_gutter-active-line {background-color : #EDE5C1}.ace-solarized-light .ace_marker-layer .ace_selected-word {border: 1px solid #7f9390}.ace-solarized-light .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_keyword,.ace-solarized-light .ace_meta,.ace-solarized-light .ace_support.ace_class,.ace-solarized-light .ace_support.ace_type {color: #859900}.ace-solarized-light .ace_constant.ace_character,.ace-solarized-light .ace_constant.ace_other {color: #CB4B16}.ace-solarized-light .ace_constant.ace_language {color: #B58900}.ace-solarized-light .ace_constant.ace_numeric {color: #D33682}.ace-solarized-light .ace_fold {background-color: #268BD2;border-color: #586E75}.ace-solarized-light .ace_entity.ace_name.ace_function,.ace-solarized-light .ace_entity.ace_name.ace_tag,.ace-solarized-light .ace_support.ace_function,.ace-solarized-light .ace_variable,.ace-solarized-light .ace_variable.ace_language {color: #268BD2}.ace-solarized-light .ace_storage {color: #073642}.ace-solarized-light .ace_string {color: #2AA198}.ace-solarized-light .ace_string.ace_regexp {color: #D30102}.ace-solarized-light .ace_comment,.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {color: #93A1A1}.ace-solarized-light .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/solarized_light\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-sqlserver.js",
    "content": "define(\"ace/theme/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-sqlserver\",t.cssText='.ace-sqlserver .ace_gutter {background: #ebebeb;color: #333;overflow: hidden;}.ace-sqlserver .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-sqlserver {background-color: #FFFFFF;color: black;}.ace-sqlserver .ace_identifier {color: black;}.ace-sqlserver .ace_keyword {color: #0000FF;}.ace-sqlserver .ace_numeric {color: black;}.ace-sqlserver .ace_storage {color: #11B7BE;}.ace-sqlserver .ace_keyword.ace_operator,.ace-sqlserver .ace_lparen,.ace-sqlserver .ace_rparen,.ace-sqlserver .ace_punctuation {color: #808080;}.ace-sqlserver .ace_set.ace_statement {color: #0000FF;text-decoration: underline;}.ace-sqlserver .ace_cursor {color: black;}.ace-sqlserver .ace_invisible {color: rgb(191, 191, 191);}.ace-sqlserver .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-sqlserver .ace_constant.ace_language {color: #979797;}.ace-sqlserver .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-sqlserver .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-sqlserver .ace_support.ace_function {color: #FF00FF;}.ace-sqlserver .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-sqlserver .ace_class {color: #008080;}.ace-sqlserver .ace_support.ace_other {color: #6D79DE;}.ace-sqlserver .ace_variable.ace_parameter {font-style: italic;color: #FD971F;}.ace-sqlserver .ace_comment {color: #008000;}.ace-sqlserver .ace_constant.ace_numeric {color: black;}.ace-sqlserver .ace_variable {color: rgb(49, 132, 149);}.ace-sqlserver .ace_xml-pe {color: rgb(104, 104, 91);}.ace-sqlserver .ace_support.ace_storedprocedure {color: #800000;}.ace-sqlserver .ace_heading {color: rgb(12, 7, 255);}.ace-sqlserver .ace_list {color: rgb(185, 6, 144);}.ace-sqlserver .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-sqlserver .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-sqlserver .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-sqlserver .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-sqlserver .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-sqlserver .ace_gutter-active-line {background-color: #dcdcdc;}.ace-sqlserver .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-sqlserver .ace_meta.ace_tag {color: #0000FF;}.ace-sqlserver .ace_string.ace_regex {color: #FF0000;}.ace-sqlserver .ace_string {color: #FF0000;}.ace-sqlserver .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-sqlserver .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-terminal.js",
    "content": "define(\"ace/theme/terminal\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-terminal-theme\",t.cssText=\".ace-terminal-theme .ace_gutter {background: #1a0005;color: steelblue}.ace-terminal-theme .ace_print-margin {width: 1px;background: #1a1a1a}.ace-terminal-theme {background-color: black;color: #DEDEDE}.ace-terminal-theme .ace_cursor {color: #9F9F9F}.ace-terminal-theme .ace_marker-layer .ace_selection {background: #424242}.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px black;}.ace-terminal-theme .ace_marker-layer .ace_step {background: rgb(0, 0, 0)}.ace-terminal-theme .ace_marker-layer .ace_bracket {background: #090;}.ace-terminal-theme .ace_marker-layer .ace_bracket-start {background: #090;}.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {margin: -1px 0 0 -1px;border: 1px solid #900}.ace-terminal-theme .ace_marker-layer .ace_active-line {background: #2A2A2A}.ace-terminal-theme .ace_gutter-active-line {background-color: #2A112A}.ace-terminal-theme .ace_marker-layer .ace_selected-word {border: 1px solid #424242}.ace-terminal-theme .ace_invisible {color: #343434}.ace-terminal-theme .ace_keyword,.ace-terminal-theme .ace_meta,.ace-terminal-theme .ace_storage,.ace-terminal-theme .ace_storage.ace_type,.ace-terminal-theme .ace_support.ace_type {color: tomato}.ace-terminal-theme .ace_keyword.ace_operator {color: deeppink}.ace-terminal-theme .ace_constant.ace_character,.ace-terminal-theme .ace_constant.ace_language,.ace-terminal-theme .ace_constant.ace_numeric,.ace-terminal-theme .ace_keyword.ace_other.ace_unit,.ace-terminal-theme .ace_support.ace_constant,.ace-terminal-theme .ace_variable.ace_parameter {color: #E78C45}.ace-terminal-theme .ace_constant.ace_other {color: gold}.ace-terminal-theme .ace_invalid {color: yellow;background-color: red}.ace-terminal-theme .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-terminal-theme .ace_fold {background-color: #7AA6DA;border-color: #DEDEDE}.ace-terminal-theme .ace_entity.ace_name.ace_function,.ace-terminal-theme .ace_support.ace_function,.ace-terminal-theme .ace_variable {color: #7AA6DA}.ace-terminal-theme .ace_support.ace_class,.ace-terminal-theme .ace_support.ace_type {color: #E7C547}.ace-terminal-theme .ace_heading,.ace-terminal-theme .ace_string {color: #B9CA4A}.ace-terminal-theme .ace_entity.ace_name.ace_tag,.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,.ace-terminal-theme .ace_meta.ace_tag,.ace-terminal-theme .ace_string.ace_regexp,.ace-terminal-theme .ace_variable {color: #D54E53}.ace-terminal-theme .ace_comment {color: orangered}.ace-terminal-theme .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/terminal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-textmate.js",
    "content": "define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.$id=\"ace/theme/textmate\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/textmate\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-tomorrow.js",
    "content": "define(\"ace/theme/tomorrow\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-tomorrow\",t.cssText=\".ace-tomorrow .ace_gutter {background: #f6f6f6;color: #4D4D4C}.ace-tomorrow .ace_print-margin {width: 1px;background: #f6f6f6}.ace-tomorrow {background-color: #FFFFFF;color: #4D4D4C}.ace-tomorrow .ace_cursor {color: #AEAFAD}.ace-tomorrow .ace_marker-layer .ace_selection {background: #D6D6D6}.ace-tomorrow.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;}.ace-tomorrow .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-tomorrow .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #D1D1D1}.ace-tomorrow .ace_marker-layer .ace_active-line {background: #EFEFEF}.ace-tomorrow .ace_gutter-active-line {background-color : #dcdcdc}.ace-tomorrow .ace_marker-layer .ace_selected-word {border: 1px solid #D6D6D6}.ace-tomorrow .ace_invisible {color: #D1D1D1}.ace-tomorrow .ace_keyword,.ace-tomorrow .ace_meta,.ace-tomorrow .ace_storage,.ace-tomorrow .ace_storage.ace_type,.ace-tomorrow .ace_support.ace_type {color: #8959A8}.ace-tomorrow .ace_keyword.ace_operator {color: #3E999F}.ace-tomorrow .ace_constant.ace_character,.ace-tomorrow .ace_constant.ace_language,.ace-tomorrow .ace_constant.ace_numeric,.ace-tomorrow .ace_keyword.ace_other.ace_unit,.ace-tomorrow .ace_support.ace_constant,.ace-tomorrow .ace_variable.ace_parameter {color: #F5871F}.ace-tomorrow .ace_constant.ace_other {color: #666969}.ace-tomorrow .ace_invalid {color: #FFFFFF;background-color: #C82829}.ace-tomorrow .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #8959A8}.ace-tomorrow .ace_fold {background-color: #4271AE;border-color: #4D4D4C}.ace-tomorrow .ace_entity.ace_name.ace_function,.ace-tomorrow .ace_support.ace_function,.ace-tomorrow .ace_variable {color: #4271AE}.ace-tomorrow .ace_support.ace_class,.ace-tomorrow .ace_support.ace_type {color: #C99E00}.ace-tomorrow .ace_heading,.ace-tomorrow .ace_markup.ace_heading,.ace-tomorrow .ace_string {color: #718C00}.ace-tomorrow .ace_entity.ace_name.ace_tag,.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow .ace_meta.ace_tag,.ace-tomorrow .ace_string.ace_regexp,.ace-tomorrow .ace_variable {color: #C82829}.ace-tomorrow .ace_comment {color: #8E908C}.ace-tomorrow .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/tomorrow\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-tomorrow_night.js",
    "content": "define(\"ace/theme/tomorrow_night\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night\",t.cssText=\".ace-tomorrow-night .ace_gutter {background: #25282c;color: #C5C8C6}.ace-tomorrow-night .ace_print-margin {width: 1px;background: #25282c}.ace-tomorrow-night {background-color: #1D1F21;color: #C5C8C6}.ace-tomorrow-night .ace_cursor {color: #AEAFAD}.ace-tomorrow-night .ace_marker-layer .ace_selection {background: #373B41}.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1D1F21;}.ace-tomorrow-night .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #4B4E55}.ace-tomorrow-night .ace_marker-layer .ace_active-line {background: #282A2E}.ace-tomorrow-night .ace_gutter-active-line {background-color: #282A2E}.ace-tomorrow-night .ace_marker-layer .ace_selected-word {border: 1px solid #373B41}.ace-tomorrow-night .ace_invisible {color: #4B4E55}.ace-tomorrow-night .ace_keyword,.ace-tomorrow-night .ace_meta,.ace-tomorrow-night .ace_storage,.ace-tomorrow-night .ace_storage.ace_type,.ace-tomorrow-night .ace_support.ace_type {color: #B294BB}.ace-tomorrow-night .ace_keyword.ace_operator {color: #8ABEB7}.ace-tomorrow-night .ace_constant.ace_character,.ace-tomorrow-night .ace_constant.ace_language,.ace-tomorrow-night .ace_constant.ace_numeric,.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night .ace_support.ace_constant,.ace-tomorrow-night .ace_variable.ace_parameter {color: #DE935F}.ace-tomorrow-night .ace_constant.ace_other {color: #CED1CF}.ace-tomorrow-night .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night .ace_fold {background-color: #81A2BE;border-color: #C5C8C6}.ace-tomorrow-night .ace_entity.ace_name.ace_function,.ace-tomorrow-night .ace_support.ace_function,.ace-tomorrow-night .ace_variable {color: #81A2BE}.ace-tomorrow-night .ace_support.ace_class,.ace-tomorrow-night .ace_support.ace_type {color: #F0C674}.ace-tomorrow-night .ace_heading,.ace-tomorrow-night .ace_markup.ace_heading,.ace-tomorrow-night .ace_string {color: #B5BD68}.ace-tomorrow-night .ace_entity.ace_name.ace_tag,.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night .ace_meta.ace_tag,.ace-tomorrow-night .ace_string.ace_regexp,.ace-tomorrow-night .ace_variable {color: #CC6666}.ace-tomorrow-night .ace_comment {color: #969896}.ace-tomorrow-night .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/tomorrow_night\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-tomorrow_night_blue.js",
    "content": "define(\"ace/theme/tomorrow_night_blue\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night-blue\",t.cssText=\".ace-tomorrow-night-blue .ace_gutter {background: #00204b;color: #7388b5}.ace-tomorrow-night-blue .ace_print-margin {width: 1px;background: #00204b}.ace-tomorrow-night-blue {background-color: #002451;color: #FFFFFF}.ace-tomorrow-night-blue .ace_constant.ace_other,.ace-tomorrow-night-blue .ace_cursor {color: #FFFFFF}.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {background: #003F8E}.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002451;}.ace-tomorrow-night-blue .ace_marker-layer .ace_step {background: rgb(127, 111, 19)}.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404F7D}.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {background: #00346E}.ace-tomorrow-night-blue .ace_gutter-active-line {background-color: #022040}.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {border: 1px solid #003F8E}.ace-tomorrow-night-blue .ace_invisible {color: #404F7D}.ace-tomorrow-night-blue .ace_keyword,.ace-tomorrow-night-blue .ace_meta,.ace-tomorrow-night-blue .ace_storage,.ace-tomorrow-night-blue .ace_storage.ace_type,.ace-tomorrow-night-blue .ace_support.ace_type {color: #EBBBFF}.ace-tomorrow-night-blue .ace_keyword.ace_operator {color: #99FFFF}.ace-tomorrow-night-blue .ace_constant.ace_character,.ace-tomorrow-night-blue .ace_constant.ace_language,.ace-tomorrow-night-blue .ace_constant.ace_numeric,.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-blue .ace_support.ace_constant,.ace-tomorrow-night-blue .ace_variable.ace_parameter {color: #FFC58F}.ace-tomorrow-night-blue .ace_invalid {color: #FFFFFF;background-color: #F99DA5}.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #EBBBFF}.ace-tomorrow-night-blue .ace_fold {background-color: #BBDAFF;border-color: #FFFFFF}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,.ace-tomorrow-night-blue .ace_support.ace_function,.ace-tomorrow-night-blue .ace_variable {color: #BBDAFF}.ace-tomorrow-night-blue .ace_support.ace_class,.ace-tomorrow-night-blue .ace_support.ace_type {color: #FFEEAD}.ace-tomorrow-night-blue .ace_heading,.ace-tomorrow-night-blue .ace_markup.ace_heading,.ace-tomorrow-night-blue .ace_string {color: #D1F1A9}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-blue .ace_meta.ace_tag,.ace-tomorrow-night-blue .ace_string.ace_regexp,.ace-tomorrow-night-blue .ace_variable {color: #FF9DA4}.ace-tomorrow-night-blue .ace_comment {color: #7285B7}.ace-tomorrow-night-blue .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/tomorrow_night_blue\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-tomorrow_night_bright.js",
    "content": "define(\"ace/theme/tomorrow_night_bright\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night-bright\",t.cssText=\".ace-tomorrow-night-bright .ace_gutter {background: #1a1a1a;color: #DEDEDE}.ace-tomorrow-night-bright .ace_print-margin {width: 1px;background: #1a1a1a}.ace-tomorrow-night-bright {background-color: #000000;color: #DEDEDE}.ace-tomorrow-night-bright .ace_cursor {color: #9F9F9F}.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {background: #424242}.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #000000;}.ace-tomorrow-night-bright .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #888888}.ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {border: 1px solid rgb(110, 119, 0);border-bottom: 0;box-shadow: inset 0 -1px rgb(110, 119, 0);margin: -1px 0 0 -1px;background: rgba(255, 235, 0, 0.1)}.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {background: #2A2A2A}.ace-tomorrow-night-bright .ace_gutter-active-line {background-color: #2A2A2A}.ace-tomorrow-night-bright .ace_stack {background-color: rgb(66, 90, 44)}.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {border: 1px solid #888888}.ace-tomorrow-night-bright .ace_invisible {color: #343434}.ace-tomorrow-night-bright .ace_keyword,.ace-tomorrow-night-bright .ace_meta,.ace-tomorrow-night-bright .ace_storage,.ace-tomorrow-night-bright .ace_storage.ace_type,.ace-tomorrow-night-bright .ace_support.ace_type {color: #C397D8}.ace-tomorrow-night-bright .ace_keyword.ace_operator {color: #70C0B1}.ace-tomorrow-night-bright .ace_constant.ace_character,.ace-tomorrow-night-bright .ace_constant.ace_language,.ace-tomorrow-night-bright .ace_constant.ace_numeric,.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-bright .ace_support.ace_constant,.ace-tomorrow-night-bright .ace_variable.ace_parameter {color: #E78C45}.ace-tomorrow-night-bright .ace_constant.ace_other {color: #EEEEEE}.ace-tomorrow-night-bright .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night-bright .ace_fold {background-color: #7AA6DA;border-color: #DEDEDE}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,.ace-tomorrow-night-bright .ace_support.ace_function,.ace-tomorrow-night-bright .ace_variable {color: #7AA6DA}.ace-tomorrow-night-bright .ace_support.ace_class,.ace-tomorrow-night-bright .ace_support.ace_type {color: #E7C547}.ace-tomorrow-night-bright .ace_heading,.ace-tomorrow-night-bright .ace_markup.ace_heading,.ace-tomorrow-night-bright .ace_string {color: #B9CA4A}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-bright .ace_meta.ace_tag,.ace-tomorrow-night-bright .ace_string.ace_regexp,.ace-tomorrow-night-bright .ace_variable {color: #D54E53}.ace-tomorrow-night-bright .ace_comment {color: #969896}.ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {color: #C2C280}.ace-tomorrow-night-bright .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/tomorrow_night_bright\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-tomorrow_night_eighties.js",
    "content": "define(\"ace/theme/tomorrow_night_eighties\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night-eighties\",t.cssText=\".ace-tomorrow-night-eighties .ace_gutter {background: #272727;color: #CCC}.ace-tomorrow-night-eighties .ace_print-margin {width: 1px;background: #272727}.ace-tomorrow-night-eighties {background-color: #2D2D2D;color: #CCCCCC}.ace-tomorrow-night-eighties .ace_constant.ace_other,.ace-tomorrow-night-eighties .ace_cursor {color: #CCCCCC}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {background: #515151}.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #2D2D2D;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #6A6A6A}.ace-tomorrow-night-bright .ace_stack {background: rgb(66, 90, 44)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {background: #393939}.ace-tomorrow-night-eighties .ace_gutter-active-line {background-color: #393939}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {border: 1px solid #515151}.ace-tomorrow-night-eighties .ace_invisible {color: #6A6A6A}.ace-tomorrow-night-eighties .ace_keyword,.ace-tomorrow-night-eighties .ace_meta,.ace-tomorrow-night-eighties .ace_storage,.ace-tomorrow-night-eighties .ace_storage.ace_type,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #CC99CC}.ace-tomorrow-night-eighties .ace_keyword.ace_operator {color: #66CCCC}.ace-tomorrow-night-eighties .ace_constant.ace_character,.ace-tomorrow-night-eighties .ace_constant.ace_language,.ace-tomorrow-night-eighties .ace_constant.ace_numeric,.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-eighties .ace_support.ace_constant,.ace-tomorrow-night-eighties .ace_variable.ace_parameter {color: #F99157}.ace-tomorrow-night-eighties .ace_invalid {color: #CDCDCD;background-color: #F2777A}.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {color: #CDCDCD;background-color: #CC99CC}.ace-tomorrow-night-eighties .ace_fold {background-color: #6699CC;border-color: #CCCCCC}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,.ace-tomorrow-night-eighties .ace_support.ace_function,.ace-tomorrow-night-eighties .ace_variable {color: #6699CC}.ace-tomorrow-night-eighties .ace_support.ace_class,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #FFCC66}.ace-tomorrow-night-eighties .ace_heading,.ace-tomorrow-night-eighties .ace_markup.ace_heading,.ace-tomorrow-night-eighties .ace_string {color: #99CC99}.ace-tomorrow-night-eighties .ace_comment {color: #999999}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-eighties .ace_meta.ace_tag,.ace-tomorrow-night-eighties .ace_variable {color: #F2777A}.ace-tomorrow-night-eighties .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/tomorrow_night_eighties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-twilight.js",
    "content": "define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-twilight\",t.cssText=\".ace-twilight .ace_gutter {background: #232323;color: #E2E2E2}.ace-twilight .ace_print-margin {width: 1px;background: #232323}.ace-twilight {background-color: #141414;color: #F8F8F8}.ace-twilight .ace_cursor {color: #A7A7A7}.ace-twilight .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-twilight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #141414;}.ace-twilight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-twilight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-twilight .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-twilight .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-twilight .ace_keyword,.ace-twilight .ace_meta {color: #CDA869}.ace-twilight .ace_constant,.ace-twilight .ace_constant.ace_character,.ace-twilight .ace_constant.ace_character.ace_escape,.ace-twilight .ace_constant.ace_other,.ace-twilight .ace_heading,.ace-twilight .ace_markup.ace_heading,.ace-twilight .ace_support.ace_constant {color: #CF6A4C}.ace-twilight .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-twilight .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-twilight .ace_support {color: #9B859D}.ace-twilight .ace_fold {background-color: #AC885B;border-color: #F8F8F8}.ace-twilight .ace_support.ace_function {color: #DAD085}.ace-twilight .ace_list,.ace-twilight .ace_markup.ace_list,.ace-twilight .ace_storage {color: #F9EE98}.ace-twilight .ace_entity.ace_name.ace_function,.ace-twilight .ace_meta.ace_tag,.ace-twilight .ace_variable {color: #AC885B}.ace-twilight .ace_string {color: #8F9D6A}.ace-twilight .ace_string.ace_regexp {color: #E9C062}.ace-twilight .ace_comment {font-style: italic;color: #5F5A60}.ace-twilight .ace_variable {color: #7587A6}.ace-twilight .ace_xml-pe {color: #494949}.ace-twilight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/twilight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-vibrant_ink.js",
    "content": "define(\"ace/theme/vibrant_ink\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-vibrant-ink\",t.cssText=\".ace-vibrant-ink .ace_gutter {background: #1a1a1a;color: #BEBEBE}.ace-vibrant-ink .ace_print-margin {width: 1px;background: #1a1a1a}.ace-vibrant-ink {background-color: #0F0F0F;color: #FFFFFF}.ace-vibrant-ink .ace_cursor {color: #FFFFFF}.ace-vibrant-ink .ace_marker-layer .ace_selection {background: #6699CC}.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #0F0F0F;}.ace-vibrant-ink .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-vibrant-ink .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-vibrant-ink .ace_marker-layer .ace_active-line {background: #333333}.ace-vibrant-ink .ace_gutter-active-line {background-color: #333333}.ace-vibrant-ink .ace_marker-layer .ace_selected-word {border: 1px solid #6699CC}.ace-vibrant-ink .ace_invisible {color: #404040}.ace-vibrant-ink .ace_keyword,.ace-vibrant-ink .ace_meta {color: #FF6600}.ace-vibrant-ink .ace_constant,.ace-vibrant-ink .ace_constant.ace_character,.ace-vibrant-ink .ace_constant.ace_character.ace_escape,.ace-vibrant-ink .ace_constant.ace_other {color: #339999}.ace-vibrant-ink .ace_constant.ace_numeric {color: #99CC99}.ace-vibrant-ink .ace_invalid,.ace-vibrant-ink .ace_invalid.ace_deprecated {color: #CCFF33;background-color: #000000}.ace-vibrant-ink .ace_fold {background-color: #FFCC00;border-color: #FFFFFF}.ace-vibrant-ink .ace_entity.ace_name.ace_function,.ace-vibrant-ink .ace_support.ace_function,.ace-vibrant-ink .ace_variable {color: #FFCC00}.ace-vibrant-ink .ace_variable.ace_parameter {font-style: italic}.ace-vibrant-ink .ace_string {color: #66FF00}.ace-vibrant-ink .ace_string.ace_regexp {color: #44B4CC}.ace-vibrant-ink .ace_comment {color: #9933CC}.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {font-style: italic;color: #99CC99}.ace-vibrant-ink .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/vibrant_ink\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/theme-xcode.js",
    "content": "define(\"ace/theme/xcode\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-xcode\",t.cssText=\".ace-xcode .ace_gutter {background: #e8e8e8;color: #333}.ace-xcode .ace_print-margin {width: 1px;background: #e8e8e8}.ace-xcode {background-color: #FFFFFF;color: #000000}.ace-xcode .ace_cursor {color: #000000}.ace-xcode .ace_marker-layer .ace_selection {background: #B5D5FF}.ace-xcode.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;}.ace-xcode .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-xcode .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-xcode .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_gutter-active-line {background-color: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_marker-layer .ace_selected-word {border: 1px solid #B5D5FF}.ace-xcode .ace_constant.ace_language,.ace-xcode .ace_keyword,.ace-xcode .ace_meta,.ace-xcode .ace_variable.ace_language {color: #C800A4}.ace-xcode .ace_invisible {color: #BFBFBF}.ace-xcode .ace_constant.ace_character,.ace-xcode .ace_constant.ace_other {color: #275A5E}.ace-xcode .ace_constant.ace_numeric {color: #3A00DC}.ace-xcode .ace_entity.ace_other.ace_attribute-name,.ace-xcode .ace_support.ace_constant,.ace-xcode .ace_support.ace_function {color: #450084}.ace-xcode .ace_fold {background-color: #C800A4;border-color: #000000}.ace-xcode .ace_entity.ace_name.ace_tag,.ace-xcode .ace_support.ace_class,.ace-xcode .ace_support.ace_type {color: #790EAD}.ace-xcode .ace_storage {color: #C900A4}.ace-xcode .ace_string {color: #DF0002}.ace-xcode .ace_comment {color: #008E00}.ace-xcode .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    window.require([\"ace/theme/xcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min/worker-coffee.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/coffee/coffee\",[],function(require,exports,module){function define(e){module.exports=e()}function _toArray(e){return Array.isArray(e)?e:Array.from(e)}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function _inherits(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function _toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}define.amd={};var _typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},_get=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(i===void 0){var s=Object.getPrototypeOf(t);return null===s?void 0:e(s,n,r)}if(\"value\"in i)return i.value;var o=i.get;return void 0===o?void 0:o.call(r)},_slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o=e[Symbol.iterator](),u;!(r=(u=o.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{!r&&o[\"return\"]&&o[\"return\"]()}finally{if(i)throw s}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),_createClass=function(){function e(e,t){for(var n=0,r;n<t.length;n++)r=t[n],r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();(function(root){var CoffeeScript=function(){function require(e){return require[e]}var _Mathabs=Math.abs,_StringfromCharCode=String.fromCharCode,_Mathfloor=Math.floor;return require[\"../../package.json\"]=function(){return{name:\"coffeescript\",description:\"Unfancy JavaScript\",keywords:[\"javascript\",\"language\",\"coffeescript\",\"compiler\"],author:\"Jeremy Ashkenas\",version:\"2.2.1\",license:\"MIT\",engines:{node:\">=6\"},directories:{lib:\"./lib/coffeescript\"},main:\"./lib/coffeescript/index\",browser:\"./lib/coffeescript/browser\",bin:{coffee:\"./bin/coffee\",cake:\"./bin/cake\"},files:[\"bin\",\"lib\",\"register.js\",\"repl.js\"],scripts:{test:\"node ./bin/cake test\",\"test-harmony\":\"node --harmony ./bin/cake test\"},homepage:\"http://coffeescript.org\",bugs:\"https://github.com/jashkenas/coffeescript/issues\",repository:{type:\"git\",url:\"git://github.com/jashkenas/coffeescript.git\"},devDependencies:{\"babel-core\":\"~6.26.0\",\"babel-preset-babili\":\"~0.1.4\",\"babel-preset-env\":\"~1.6.1\",\"babel-preset-minify\":\"^0.3.0\",codemirror:\"^5.32.0\",docco:\"~0.8.0\",\"highlight.js\":\"~9.12.0\",jison:\">=0.4.18\",\"markdown-it\":\"~8.4.0\",underscore:\"~1.8.3\",webpack:\"~3.10.0\"},dependencies:{}}}(),require[\"./helpers\"]=function(){var e={};return function(){var t,n,r,i,s,o,u,a;e.starts=function(e,t,n){return t===e.substr(n,t.length)},e.ends=function(e,t,n){var r;return r=t.length,t===e.substr(e.length-r-(n||0),r)},e.repeat=u=function(e,t){var n;for(n=\"\";0<t;)1&t&&(n+=e),t>>>=1,e+=e;return n},e.compact=function(e){var t,n,r,i;for(i=[],t=0,r=e.length;t<r;t++)n=e[t],n&&i.push(n);return i},e.count=function(e,t){var n,r;if(n=r=0,!t.length)return 1/0;for(;r=1+e.indexOf(t,r);)n++;return n},e.merge=function(e,t){return i(i({},e),t)},i=e.extend=function(e,t){var n,r;for(n in t)r=t[n],e[n]=r;return e},e.flatten=s=function(t){var n,r,i,o;for(r=[],i=0,o=t.length;i<o;i++)n=t[i],\"[object Array]\"===Object.prototype.toString.call(n)?r=r.concat(s(n)):r.push(n);return r},e.del=function(e,t){var n;return n=e[t],delete e[t],n},e.some=null==(o=Array.prototype.some)?function(e){var t,n,r,i;for(i=this,n=0,r=i.length;n<r;n++)if(t=i[n],e(t))return!0;return!1}:o,e.invertLiterate=function(e){var t,n,r,i,s,o,u,a,f;for(a=[],t=/^\\s*$/,r=/^[\\t ]/,u=/^(?:\\t?| {0,3})(?:[\\*\\-\\+]|[0-9]{1,9}\\.)[ \\t]/,i=!1,f=e.split(\"\\n\"),n=0,s=f.length;n<s;n++)o=f[n],t.test(o)?(i=!1,a.push(o)):i||u.test(o)?(i=!0,a.push(\"# \"+o)):!i&&r.test(o)?a.push(o):(i=!0,a.push(\"# \"+o));return a.join(\"\\n\")},n=function(e,t){return t?{first_line:e.first_line,first_column:e.first_column,last_line:t.last_line,last_column:t.last_column}:e},r=function(e){return e.first_line+\"x\"+e.first_column+\"-\"+e.last_line+\"x\"+e.last_column},e.addDataToNode=function(e,i,s){return function(o){var u,a,f,l,c,h;if(null!=(null==o?void 0:o.updateLocationDataIfMissing)&&null!=i&&o.updateLocationDataIfMissing(n(i,s)),!e.tokenComments)for(e.tokenComments={},l=e.parser.tokens,u=0,a=l.length;u<a;u++)if(c=l[u],!!c.comments)if(h=r(c[2]),null==e.tokenComments[h])e.tokenComments[h]=c.comments;else{var p;(p=e.tokenComments[h]).push.apply(p,_toConsumableArray(c.comments))}return null!=o.locationData&&(f=r(o.locationData),null!=e.tokenComments[f]&&t(e.tokenComments[f],o)),o}},e.attachCommentsToNode=t=function(e,t){var n;if(null!=e&&0!==e.length)return null==t.comments&&(t.comments=[]),(n=t.comments).push.apply(n,_toConsumableArray(e))},e.locationDataToString=function(e){var t;return\"2\"in e&&\"first_line\"in e[2]?t=e[2]:\"first_line\"in e&&(t=e),t?t.first_line+1+\":\"+(t.first_column+1)+\"-\"+(t.last_line+1+\":\"+(t.last_column+1)):\"No location data\"},e.baseFileName=function(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],r,i;return(i=n?/\\\\|\\//:/\\//,r=e.split(i),e=r[r.length-1],!(t&&0<=e.indexOf(\".\")))?e:(r=e.split(\".\"),r.pop(),\"coffee\"===r[r.length-1]&&1<r.length&&r.pop(),r.join(\".\"))},e.isCoffee=function(e){return/\\.((lit)?coffee|coffee\\.md)$/.test(e)},e.isLiterate=function(e){return/\\.(litcoffee|coffee\\.md)$/.test(e)},e.throwSyntaxError=function(e,t){var n;throw n=new SyntaxError(e),n.location=t,n.toString=a,n.stack=n.toString(),n},e.updateSyntaxError=function(e,t,n){return e.toString===a&&(e.code||(e.code=t),e.filename||(e.filename=n),e.stack=e.toString()),e},a=function(){var e,t,n,r,i,s,o,a,f,l,c,h,p,d;if(!this.code||!this.location)return Error.prototype.toString.call(this);var v=this.location;return o=v.first_line,s=v.first_column,f=v.last_line,a=v.last_column,null==f&&(f=o),null==a&&(a=s),i=this.filename||\"[stdin]\",e=this.code.split(\"\\n\")[o],d=s,r=o===f?a+1:e.length,l=e.slice(0,d).replace(/[^\\s]/g,\" \")+u(\"^\",r-d),\"undefined\"!=typeof process&&null!==process&&(n=(null==(c=process.stdout)?void 0:c.isTTY)&&(null==(h=process.env)||!h.NODE_DISABLE_COLORS)),(null==(p=this.colorful)?n:p)&&(t=function(e){return\"\u001b[1;31m\"+e+\"\u001b[0m\"},e=e.slice(0,d)+t(e.slice(d,r))+e.slice(r),l=t(l)),i+\":\"+(o+1)+\":\"+(s+1)+\": error: \"+this.message+\"\\n\"+e+\"\\n\"+l},e.nameWhitespaceCharacter=function(e){return\" \"===e?\"space\":\"\\n\"===e?\"newline\":\"\\r\"===e?\"carriage return\":\"\t\"===e?\"tab\":e}}.call(this),{exports:e}.exports}(),require[\"./rewriter\"]=function(){var e={};return function(){var t=[].indexOf,n=require(\"./helpers\"),r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N;for(N=n.throwSyntaxError,x=function(e,t){var n,r,i,s,o;if(e.comments){if(t.comments&&0!==t.comments.length){for(o=[],s=e.comments,r=0,i=s.length;r<i;r++)n=s[r],n.unshift?o.push(n):t.comments.push(n);t.comments=o.concat(t.comments)}else t.comments=e.comments;return delete e.comments}},b=function(e,t,n,r){var i;return i=[e,t],i.generated=!0,n&&(i.origin=n),r&&x(r,i),i},e.Rewriter=m=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"rewrite\",value:function(t){var n,r,i;return this.tokens=t,(\"undefined\"!=typeof process&&null!==process?null==(n=process.env)?void 0:n.DEBUG_TOKEN_STREAM:void 0)&&(process.env.DEBUG_REWRITTEN_TOKEN_STREAM&&console.log(\"Initial token stream:\"),console.log(function(){var e,t,n,r;for(n=this.tokens,r=[],e=0,t=n.length;e<t;e++)i=n[e],r.push(i[0]+\"/\"+i[1]+(i.comments?\"*\":\"\"));return r}.call(this).join(\" \"))),this.removeLeadingNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.normalizeLines(),this.tagPostfixConditionals(),this.addImplicitBracesAndParens(),this.addParensToChainedDoIife(),this.rescueStowawayComments(),this.addLocationDataToGeneratedTokens(),this.enforceValidCSXAttributes(),this.fixOutdentLocationData(),(\"undefined\"!=typeof process&&null!==process?null==(r=process.env)?void 0:r.DEBUG_REWRITTEN_TOKEN_STREAM:void 0)&&(process.env.DEBUG_TOKEN_STREAM&&console.log(\"Rewritten token stream:\"),console.log(function(){var e,t,n,r;for(n=this.tokens,r=[],e=0,t=n.length;e<t;e++)i=n[e],r.push(i[0]+\"/\"+i[1]+(i.comments?\"*\":\"\"));return r}.call(this).join(\" \"))),this.tokens}},{key:\"scanTokens\",value:function(t){var n,r,i;for(i=this.tokens,n=0;r=i[n];)n+=t.call(this,r,n,i);return!0}},{key:\"detectEnd\",value:function(n,r,i){var s=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{},o,u,l,c,h;for(h=this.tokens,o=0;c=h[n];){if(0===o&&r.call(this,c,n))return i.call(this,c,n);if((u=c[0],0<=t.call(f,u))?o+=1:(l=c[0],0<=t.call(a,l))&&(o-=1),0>o)return s.returnOnNegativeLevel?void 0:i.call(this,c,n);n+=1}return n-1}},{key:\"removeLeadingNewlines\",value:function(){var t,n,r,i,s,o,u,a,f;for(u=this.tokens,t=n=0,s=u.length;n<s;t=++n){var l=_slicedToArray(u[t],1);if(f=l[0],\"TERMINATOR\"!==f)break}if(0!==t){for(a=this.tokens.slice(0,t),r=0,o=a.length;r<o;r++)i=a[r],x(i,this.tokens[t]);return this.tokens.splice(0,t)}}},{key:\"closeOpenCalls\",value:function(){var t,n;return n=function(e){var t;return\")\"===(t=e[0])||\"CALL_END\"===t},t=function(e){return e[0]=\"CALL_END\"},this.scanTokens(function(e,r){return\"CALL_START\"===e[0]&&this.detectEnd(r+1,n,t),1})}},{key:\"closeOpenIndexes\",value:function(){var t,n;return n=function(e){var t;return\"]\"===(t=e[0])||\"INDEX_END\"===t},t=function(e){return e[0]=\"INDEX_END\"},this.scanTokens(function(e,r){return\"INDEX_START\"===e[0]&&this.detectEnd(r+1,n,t),1})}},{key:\"indexOfTag\",value:function(n){var r,i,s,o,u;r=0;for(var a=arguments.length,f=Array(1<a?a-1:0),l=1;l<a;l++)f[l-1]=arguments[l];for(i=s=0,o=f.length;0<=o?0<=s&&s<o:0>=s&&s>o;i=0<=o?++s:--s)if(null!=f[i]&&(\"string\"==typeof f[i]&&(f[i]=[f[i]]),u=this.tag(n+i+r),0>t.call(f[i],u)))return-1;return n+i+r-1}},{key:\"looksObjectish\",value:function(n){var r,i;return-1!==this.indexOfTag(n,\"@\",null,\":\")||-1!==this.indexOfTag(n,null,\":\")||(i=this.indexOfTag(n,f),-1!==i&&(r=null,this.detectEnd(i+1,function(e){var n;return n=e[0],0<=t.call(a,n)},function(e,t){return r=t}),\":\"===this.tag(r+1)))}},{key:\"findTagsBackwards\",value:function(n,r){var i,s,o,u,l,c,h;for(i=[];0<=n&&(i.length||(u=this.tag(n),0>t.call(r,u))&&((l=this.tag(n),0>t.call(f,l))||this.tokens[n].generated)&&(c=this.tag(n),0>t.call(v,c)));)(s=this.tag(n),0<=t.call(a,s))&&i.push(this.tag(n)),(o=this.tag(n),0<=t.call(f,o))&&i.length&&i.pop(),n-=1;return h=this.tag(n),0<=t.call(r,h)}},{key:\"addImplicitBracesAndParens\",value:function(){var n,r;return n=[],r=null,this.scanTokens(function(e,o,u){var d=this,m=_slicedToArray(e,1),g,y,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q;Q=m[0];var G=B=0<o?u[o-1]:[],Y=_slicedToArray(G,1);H=Y[0];var Z=D=o<u.length-1?u[o+1]:[],et=_slicedToArray(Z,1);if(_=et[0],X=function(){return n[n.length-1]},V=o,w=function(e){return o-V+e},k=function(e){var t;return null==e||null==(t=e[2])?void 0:t.ours},A=function(e){return k(e)&&\"{\"===(null==e?void 0:e[0])},L=function(e){return k(e)&&\"(\"===(null==e?void 0:e[0])},x=function(){return k(X())},T=function(){return L(X())},C=function(){return A(X())},N=function(){var e;return x()&&\"CONTROL\"===(null==(e=X())?void 0:e[0])},$=function(t){return n.push([\"(\",t,{ours:!0}]),u.splice(t,0,b(\"CALL_START\",\"(\",[\"\",\"implicit function call\",e[2]],B))},g=function(){return n.pop(),u.splice(o,0,b(\"CALL_END\",\")\",[\"\",\"end of input\",e[2]],B)),o+=1},J=function(t){var r=!(1<arguments.length&&void 0!==arguments[1])||arguments[1],i;return n.push([\"{\",t,{sameLine:!0,startsLine:r,ours:!0}]),i=new String(\"{\"),i.generated=!0,u.splice(t,0,b(\"{\",i,e,B))},y=function(t){return t=null==t?o:t,n.pop(),u.splice(t,0,b(\"}\",\"}\",e,B)),o+=1},E=function(e){var t;return t=null,d.detectEnd(e,function(e){return\"TERMINATOR\"===e[0]},function(e,n){return t=n},{returnOnNegativeLevel:!0}),null!=t&&d.looksObjectish(t+1)},(T()||C())&&0<=t.call(s,Q)||C()&&\":\"===H&&\"FOR\"===Q)return n.push([\"CONTROL\",o,{ours:!0}]),w(1);if(\"INDENT\"===Q&&x()){if(\"=>\"!==H&&\"->\"!==H&&\"[\"!==H&&\"(\"!==H&&\",\"!==H&&\"{\"!==H&&\"ELSE\"!==H&&\"=\"!==H)for(;T()||C()&&\":\"!==H;)T()?g():y();return N()&&n.pop(),n.push([Q,o]),w(1)}if(0<=t.call(f,Q))return n.push([Q,o]),w(1);if(0<=t.call(a,Q)){for(;x();)T()?g():C()?y():n.pop();r=n.pop()}if(S=function(){var n,r,i,s;return(i=d.findTagsBackwards(o,[\"FOR\"])&&d.findTagsBackwards(o,[\"FORIN\",\"FOROF\",\"FORFROM\"]),n=i||d.findTagsBackwards(o,[\"WHILE\",\"UNTIL\",\"LOOP\",\"LEADING_WHEN\"]),!!n)&&(r=!1,s=e[2].first_line,d.detectEnd(o,function(e){var n;return n=e[0],0<=t.call(v,n)},function(e,t){var n=u[t-1]||[],i=_slicedToArray(n,3),o;return H=i[0],o=i[2].first_line,r=s===o&&(\"->\"===H||\"=>\"===H)},{returnOnNegativeLevel:!0}),r)},(0<=t.call(h,Q)&&e.spaced||\"?\"===Q&&0<o&&!u[o-1].spaced)&&(0<=t.call(l,_)||\"...\"===_&&(j=this.tag(o+2),0<=t.call(l,j))&&!this.findTagsBackwards(o,[\"INDEX_START\",\"[\"])||0<=t.call(p,_)&&!D.spaced&&!D.newLine)&&!S())return\"?\"===Q&&(Q=e[0]=\"FUNC_EXIST\"),$(o+1),w(2);if(0<=t.call(h,Q)&&-1<this.indexOfTag(o+1,\"INDENT\")&&this.looksObjectish(o+2)&&!this.findTagsBackwards(o,[\"CLASS\",\"EXTENDS\",\"IF\",\"CATCH\",\"SWITCH\",\"LEADING_WHEN\",\"FOR\",\"WHILE\",\"UNTIL\"]))return $(o+1),n.push([\"INDENT\",o+2]),w(3);if(\":\"===Q){if(q=function(){var e;switch(!1){case e=this.tag(o-1),0>t.call(a,e):return r[1];case\"@\"!==this.tag(o-2):return o-2;default:return o-1}}.call(this),K=0>=q||(F=this.tag(q-1),0<=t.call(v,F))||u[q-1].newLine,X()){var tt=X(),nt=_slicedToArray(tt,2);if(W=nt[0],U=nt[1],(\"{\"===W||\"INDENT\"===W&&\"{\"===this.tag(U-1))&&(K||\",\"===this.tag(q-1)||\"{\"===this.tag(q-1)))return w(1)}return J(q,!!K),w(2)}if(0<=t.call(v,Q))for(O=n.length-1;0<=O&&(z=n[O],!!k(z));O+=-1)A(z)&&(z[2].sameLine=!1);if(M=\"OUTDENT\"===H||B.newLine,0<=t.call(c,Q)||0<=t.call(i,Q)&&M||(\"..\"===Q||\"...\"===Q)&&this.findTagsBackwards(o,[\"INDEX_START\"]))for(;x();){var rt=X(),it=_slicedToArray(rt,3);W=it[0],U=it[1];var st=it[2];if(R=st.sameLine,K=st.startsLine,T()&&\",\"!==H||\",\"===H&&\"TERMINATOR\"===Q&&null==_)g();else if(C()&&R&&\"TERMINATOR\"!==Q&&\":\"!==H&&(\"POST_IF\"!==Q&&\"FOR\"!==Q&&\"WHILE\"!==Q&&\"UNTIL\"!==Q||!K||!E(o+1)))y();else{if(!C()||\"TERMINATOR\"!==Q||\",\"===H||!!K&&!!this.looksObjectish(o+1))break;y()}}if(\",\"===Q&&!this.looksObjectish(o+1)&&C()&&\"FOROF\"!==(I=this.tag(o+2))&&\"FORIN\"!==I&&(\"TERMINATOR\"!==_||!this.looksObjectish(o+2)))for(P=\"OUTDENT\"===_?1:0;C();)y(o+P);return w(1)})}},{key:\"enforceValidCSXAttributes\",value:function(){return this.scanTokens(function(e,t,n){var r,i;return e.csxColon&&(r=n[t+1],\"STRING_START\"!==(i=r[0])&&\"STRING\"!==i&&\"(\"!==i&&N(\"expected wrapped or quoted JSX attribute\",r[2])),1})}},{key:\"rescueStowawayComments\",value:function(){var n,r,i;return n=function(e,t,n,r){return\"TERMINATOR\"!==n[t][0]&&n[r](b(\"TERMINATOR\",\"\\n\",n[t])),n[r](b(\"JS\",\"\",n[t],e))},i=function(e,r,i){var s,u,a,f,l,c,h;for(u=r;u!==i.length&&(l=i[u][0],0<=t.call(o,l));)u++;if(u===i.length||(c=i[u][0],0<=t.call(o,c)))return u=i.length-1,n(e,u,i,\"push\"),1;for(h=e.comments,a=0,f=h.length;a<f;a++)s=h[a],s.unshift=!0;return x(e,i[u]),1},r=function(e,r,i){var s,u,a;for(s=r;-1!==s&&(u=i[s][0],0<=t.call(o,u));)s--;return-1===s||(a=i[s][0],0<=t.call(o,a))?(n(e,0,i,\"unshift\"),3):(x(e,i[s]),1)},this.scanTokens(function(e,n,s){var u,a,f,l,c;if(!e.comments)return 1;if(c=1,f=e[0],0<=t.call(o,f)){for(u={comments:[]},a=e.comments.length-1;-1!==a;)!1===e.comments[a].newLine&&!1===e.comments[a].here&&(u.comments.unshift(e.comments[a]),e.comments.splice(a,1)),a--;0!==u.comments.length&&(c=r(u,n-1,s)),0!==e.comments.length&&i(e,n,s)}else{for(u={comments:[]},a=e.comments.length-1;-1!==a;)!e.comments[a].newLine||e.comments[a].unshift||\"JS\"===e[0]&&e.generated||(u.comments.unshift(e.comments[a]),e.comments.splice(a,1)),a--;0!==u.comments.length&&(c=i(u,n+1,s))}return 0===(null==(l=e.comments)?void 0:l.length)&&delete e.comments,c})}},{key:\"addLocationDataToGeneratedTokens\",value:function(){return this.scanTokens(function(e,t,n){var r,i,s,o,u,a;if(e[2])return 1;if(!e.generated&&!e.explicit)return 1;if(\"{\"===e[0]&&(s=null==(u=n[t+1])?void 0:u[2])){var f=s;i=f.first_line,r=f.first_column}else if(o=null==(a=n[t-1])?void 0:a[2]){var l=o;i=l.last_line,r=l.last_column}else i=r=0;return e[2]={first_line:i,first_column:r,last_line:i,last_column:r},1})}},{key:\"fixOutdentLocationData\",value:function(){return this.scanTokens(function(e,t,n){var r;return\"OUTDENT\"===e[0]||e.generated&&\"CALL_END\"===e[0]||e.generated&&\"}\"===e[0]?(r=n[t-1][2],e[2]={first_line:r.last_line,first_column:r.last_column,last_line:r.last_line,last_column:r.last_column},1):1})}},{key:\"addParensToChainedDoIife\",value:function(){var n,r,s;return r=function(e,t){return\"OUTDENT\"===this.tag(t-1)},n=function(e,n){var r;if(r=e[0],!(0>t.call(i,r)))return this.tokens.splice(s,0,b(\"(\",\"(\",this.tokens[s])),this.tokens.splice(n+1,0,b(\")\",\")\",this.tokens[n]))},s=null,this.scanTokens(function(e,t){var i,o;return\"do\"===e[1]?(s=t,i=t+1,\"PARAM_START\"===this.tag(t+1)&&(i=null,this.detectEnd(t+1,function(e,t){return\"PARAM_END\"===this.tag(t-1)},function(e,t){return i=t})),null==i||\"->\"!==(o=this.tag(i))&&\"=>\"!==o||\"INDENT\"!==this.tag(i+1))?1:(this.detectEnd(i+1,r,n),2):1})}},{key:\"normalizeLines\",value:function(){var n=this,r,s,o,a,f,l,c,h,p;return p=f=h=null,c=null,l=null,a=[],o=function(e,n){var r,s,o,a;return\";\"!==e[1]&&(r=e[0],0<=t.call(g,r))&&!(\"TERMINATOR\"===e[0]&&(s=this.tag(n+1),0<=t.call(u,s)))&&(\"ELSE\"!==e[0]||\"THEN\"===p&&!l&&!c)&&(\"CATCH\"!==(o=e[0])&&\"FINALLY\"!==o||\"->\"!==p&&\"=>\"!==p)||(a=e[0],0<=t.call(i,a))&&(this.tokens[n-1].newLine||\"OUTDENT\"===this.tokens[n-1][0])},r=function(e,t){return\"ELSE\"===e[0]&&\"THEN\"===p&&a.pop(),this.tokens.splice(\",\"===this.tag(t-1)?t-1:t,0,h)},s=function(e,t){var r,i,s;if(s=a.length,0<s){r=a.pop();var o=n.indentation(e[r]),u=_slicedToArray(o,2);return i=u[1],i[1]=2*s,e.splice(t,0,i),i[1]=2,e.splice(t+1,0,i),n.detectEnd(t+2,function(e){var t;return\"OUTDENT\"===(t=e[0])||\"TERMINATOR\"===t},function(t,n){if(\"OUTDENT\"===this.tag(n)&&\"OUTDENT\"===this.tag(n+1))return e.splice(n,2)}),t+2}return t},this.scanTokens(function(e,n,i){var d=_slicedToArray(e,1),v,m,g,b,w,E;if(E=d[0],v=(\"->\"===E||\"=>\"===E)&&this.findTagsBackwards(n,[\"IF\",\"WHILE\",\"FOR\",\"UNTIL\",\"SWITCH\",\"WHEN\",\"LEADING_WHEN\",\"[\",\"INDEX_START\"])&&!this.findTagsBackwards(n,[\"THEN\",\"..\",\"...\"]),\"TERMINATOR\"===E){if(\"ELSE\"===this.tag(n+1)&&\"OUTDENT\"!==this.tag(n-1))return i.splice.apply(i,[n,1].concat(_toConsumableArray(this.indentation()))),1;if(b=this.tag(n+1),0<=t.call(u,b))return i.splice(n,1),0}if(\"CATCH\"===E)for(m=g=1;2>=g;m=++g)if(\"OUTDENT\"===(w=this.tag(n+m))||\"TERMINATOR\"===w||\"FINALLY\"===w)return i.splice.apply(i,[n+m,0].concat(_toConsumableArray(this.indentation()))),2+m;if(\"->\"!==E&&\"=>\"!==E||!(\",\"===this.tag(n+1)||\".\"===this.tag(n+1)&&e.newLine)){if(0<=t.call(y,E)&&\"INDENT\"!==this.tag(n+1)&&(\"ELSE\"!==E||\"IF\"!==this.tag(n+1))&&!v){p=E;var T=this.indentation(i[n]),N=_slicedToArray(T,2);return f=N[0],h=N[1],\"THEN\"===p&&(f.fromThen=!0),\"THEN\"===E&&(c=this.findTagsBackwards(n,[\"LEADING_WHEN\"])&&\"IF\"===this.tag(n+1),l=this.findTagsBackwards(n,[\"IF\"])&&\"IF\"===this.tag(n+1)),\"THEN\"===E&&this.findTagsBackwards(n,[\"IF\"])&&a.push(n),\"ELSE\"===E&&\"OUTDENT\"!==this.tag(n-1)&&(n=s(i,n)),i.splice(n+1,0,f),this.detectEnd(n+2,o,r),\"THEN\"===E&&i.splice(n,1),1}return 1}var S=this.indentation(i[n]),x=_slicedToArray(S,2);return f=x[0],h=x[1],i.splice(n+1,0,f,h),1})}},{key:\"tagPostfixConditionals\",value:function(){var n,r,i;return i=null,r=function(e,n){var r=_slicedToArray(e,1),i,s;s=r[0];var o=_slicedToArray(this.tokens[n-1],1);return i=o[0],\"TERMINATOR\"===s||\"INDENT\"===s&&0>t.call(y,i)},n=function(e){if(\"INDENT\"!==e[0]||e.generated&&!e.fromThen)return i[0]=\"POST_\"+i[0]},this.scanTokens(function(e,t){return\"IF\"===e[0]?(i=e,this.detectEnd(t+1,r,n),1):1})}},{key:\"indentation\",value:function(t){var n,r;return n=[\"INDENT\",2],r=[\"OUTDENT\",2],t?(n.generated=r.generated=!0,n.origin=r.origin=t):n.explicit=r.explicit=!0,[n,r]}},{key:\"tag\",value:function(t){var n;return null==(n=this.tokens[t])?void 0:n[0]}}]),e}();return e.prototype.generate=b,e}.call(this),r=[[\"(\",\")\"],[\"[\",\"]\"],[\"{\",\"}\"],[\"INDENT\",\"OUTDENT\"],[\"CALL_START\",\"CALL_END\"],[\"PARAM_START\",\"PARAM_END\"],[\"INDEX_START\",\"INDEX_END\"],[\"STRING_START\",\"STRING_END\"],[\"REGEX_START\",\"REGEX_END\"]],e.INVERSES=d={},f=[],a=[],w=0,S=r.length;w<S;w++){var C=_slicedToArray(r[w],2);E=C[0],T=C[1],f.push(d[T]=E),a.push(d[E]=T)}u=[\"CATCH\",\"THEN\",\"ELSE\",\"FINALLY\"].concat(a),h=[\"IDENTIFIER\",\"PROPERTY\",\"SUPER\",\")\",\"CALL_END\",\"]\",\"INDEX_END\",\"@\",\"THIS\"],l=[\"IDENTIFIER\",\"CSX_TAG\",\"PROPERTY\",\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_START\",\"REGEX\",\"REGEX_START\",\"JS\",\"NEW\",\"PARAM_START\",\"CLASS\",\"IF\",\"TRY\",\"SWITCH\",\"THIS\",\"UNDEFINED\",\"NULL\",\"BOOL\",\"UNARY\",\"YIELD\",\"AWAIT\",\"UNARY_MATH\",\"SUPER\",\"THROW\",\"@\",\"->\",\"=>\",\"[\",\"(\",\"{\",\"--\",\"++\"],p=[\"+\",\"-\"],c=[\"POST_IF\",\"FOR\",\"WHILE\",\"UNTIL\",\"WHEN\",\"BY\",\"LOOP\",\"TERMINATOR\"],y=[\"ELSE\",\"->\",\"=>\",\"TRY\",\"FINALLY\",\"THEN\"],g=[\"TERMINATOR\",\"CATCH\",\"FINALLY\",\"ELSE\",\"OUTDENT\",\"LEADING_WHEN\"],v=[\"TERMINATOR\",\"INDENT\",\"OUTDENT\"],i=[\".\",\"?.\",\"::\",\"?::\"],s=[\"IF\",\"TRY\",\"FINALLY\",\"CATCH\",\"CLASS\",\"SWITCH\"],o=[\"(\",\")\",\"[\",\"]\",\"{\",\"}\",\".\",\"..\",\"...\",\",\",\"=\",\"++\",\"--\",\"?\",\"AS\",\"AWAIT\",\"CALL_START\",\"CALL_END\",\"DEFAULT\",\"ELSE\",\"EXTENDS\",\"EXPORT\",\"FORIN\",\"FOROF\",\"FORFROM\",\"IMPORT\",\"INDENT\",\"INDEX_SOAK\",\"LEADING_WHEN\",\"OUTDENT\",\"PARAM_END\",\"REGEX_START\",\"REGEX_END\",\"RETURN\",\"STRING_END\",\"THROW\",\"UNARY\",\"YIELD\"].concat(p.concat(c.concat(i.concat(s))))}.call(this),{exports:e}.exports}(),require[\"./lexer\"]=function(){var e={};return function(){var t=[].indexOf,n=[].slice,r=require(\"./rewriter\"),i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q,G,Y,Z,et,tt,nt,rt,it,st,ot,ut,at,ft,lt,ct,ht,pt,dt,vt,mt,gt,yt,bt,wt,Et,St,xt;K=r.Rewriter,O=r.INVERSES;var Tt=require(\"./helpers\");dt=Tt.count,St=Tt.starts,pt=Tt.compact,Et=Tt.repeat,vt=Tt.invertLiterate,wt=Tt.merge,ht=Tt.attachCommentsToNode,bt=Tt.locationDataToString,xt=Tt.throwSyntaxError,e.Lexer=B=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"tokenize\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r,i,s,o;for(this.literate=n.literate,this.indent=0,this.baseIndent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.indentLiteral=\"\",this.ends=[],this.tokens=[],this.seenFor=!1,this.seenImport=!1,this.seenExport=!1,this.importSpecifierList=!1,this.exportSpecifierList=!1,this.csxDepth=0,this.csxObjAttribute={},this.chunkLine=n.line||0,this.chunkColumn=n.column||0,t=this.clean(t),s=0;this.chunk=t.slice(s);){r=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.stringToken()||this.numberToken()||this.csxToken()||this.regexToken()||this.jsToken()||this.literalToken();var u=this.getLineAndColumnFromChunk(r),a=_slicedToArray(u,2);if(this.chunkLine=a[0],this.chunkColumn=a[1],s+=r,n.untilBalanced&&0===this.ends.length)return{tokens:this.tokens,index:s}}return this.closeIndentation(),(i=this.ends.pop())&&this.error(\"missing \"+i.tag,(null==(o=i.origin)?i:o)[2]),!1===n.rewrite?this.tokens:(new K).rewrite(this.tokens)}},{key:\"clean\",value:function(t){return t.charCodeAt(0)===i&&(t=t.slice(1)),t=t.replace(/\\r/g,\"\").replace(st,\"\"),ct.test(t)&&(t=\"\\n\"+t,this.chunkLine--),this.literate&&(t=vt(t)),t}},{key:\"identifierToken\",value:function(){var n,r,i,s,u,c,h,p,d,m,g,y,b,w,E,S,x,T,N,k,L,A,O,M,D,H,B,j;if(h=this.atCSXTag(),D=h?v:C,!(d=D.exec(this.chunk)))return 0;var F=d,I=_slicedToArray(F,3);if(p=I[0],u=I[1],r=I[2],c=u.length,m=void 0,\"own\"===u&&\"FOR\"===this.tag())return this.token(\"OWN\",u),u.length;if(\"from\"===u&&\"YIELD\"===this.tag())return this.token(\"FROM\",u),u.length;if(\"as\"===u&&this.seenImport){if(\"*\"===this.value())this.tokens[this.tokens.length-1][0]=\"IMPORT_ALL\";else if(b=this.value(!0),0<=t.call(l,b)){g=this.prev();var q=[\"IDENTIFIER\",this.value(!0)];g[0]=q[0],g[1]=q[1]}if(\"DEFAULT\"===(w=this.tag())||\"IMPORT_ALL\"===w||\"IDENTIFIER\"===w)return this.token(\"AS\",u),u.length}if(\"as\"===u&&this.seenExport){if(\"IDENTIFIER\"===(S=this.tag())||\"DEFAULT\"===S)return this.token(\"AS\",u),u.length;if(x=this.value(!0),0<=t.call(l,x)){g=this.prev();var R=[\"IDENTIFIER\",this.value(!0)];return g[0]=R[0],g[1]=R[1],this.token(\"AS\",u),u.length}}if(\"default\"!==u||!this.seenExport||\"EXPORT\"!==(T=this.tag())&&\"AS\"!==T){if(\"do\"===u&&(M=/^(\\s*super)(?!\\(\\))/.exec(this.chunk.slice(3)))){this.token(\"SUPER\",\"super\"),this.token(\"CALL_START\",\"(\"),this.token(\"CALL_END\",\")\");var U=M,z=_slicedToArray(U,2);return p=z[0],H=z[1],H.length+3}if(g=this.prev(),B=r||null!=g&&(\".\"===(N=g[0])||\"?.\"===N||\"::\"===N||\"?::\"===N||!g.spaced&&\"@\"===g[0])?\"PROPERTY\":\"IDENTIFIER\",\"IDENTIFIER\"===B&&(0<=t.call(_,u)||0<=t.call(l,u))&&!(this.exportSpecifierList&&0<=t.call(l,u))?(B=u.toUpperCase(),\"WHEN\"===B&&(k=this.tag(),0<=t.call(P,k))?B=\"LEADING_WHEN\":\"FOR\"===B?this.seenFor=!0:\"UNLESS\"===B?B=\"IF\":\"IMPORT\"===B?this.seenImport=!0:\"EXPORT\"===B?this.seenExport=!0:0<=t.call(ot,B)?B=\"UNARY\":0<=t.call($,B)&&(\"INSTANCEOF\"!==B&&this.seenFor?(B=\"FOR\"+B,this.seenFor=!1):(B=\"RELATION\",\"!\"===this.value()&&(m=this.tokens.pop(),u=\"!\"+u)))):\"IDENTIFIER\"===B&&this.seenFor&&\"from\"===u&&mt(g)?(B=\"FORFROM\",this.seenFor=!1):\"PROPERTY\"===B&&g&&(g.spaced&&(L=g[0],0<=t.call(o,L))&&/^[gs]et$/.test(g[1])&&1<this.tokens.length&&\".\"!==(A=this.tokens[this.tokens.length-2][0])&&\"?.\"!==A&&\"@\"!==A?this.error(\"'\"+g[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",g[2]):2<this.tokens.length&&(y=this.tokens[this.tokens.length-2],(\"@\"===(O=g[0])||\"THIS\"===O)&&y&&y.spaced&&/^[gs]et$/.test(y[1])&&\".\"!==(E=this.tokens[this.tokens.length-3][0])&&\"?.\"!==E&&\"@\"!==E&&this.error(\"'\"+y[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",y[2]))),\"IDENTIFIER\"===B&&0<=t.call(J,u)&&this.error(\"reserved word '\"+u+\"'\",{length:u.length}),\"PROPERTY\"===B||this.exportSpecifierList||(0<=t.call(a,u)&&(n=u,u=f[u]),B=function(){return\"!\"===u?\"UNARY\":\"==\"===u||\"!=\"===u?\"COMPARE\":\"true\"===u||\"false\"===u?\"BOOL\":\"break\"===u||\"continue\"===u||\"debugger\"===u?\"STATEMENT\":\"&&\"===u||\"||\"===u?u:B}()),j=this.token(B,u,0,c),n&&(j.origin=[B,n,j[2]]),m){var W=[m[2].first_line,m[2].first_column];j[2].first_line=W[0],j[2].first_column=W[1]}return r&&(i=p.lastIndexOf(h?\"=\":\":\"),s=this.token(\":\",\":\",i,r.length),h&&(s.csxColon=!0)),h&&\"IDENTIFIER\"===B&&\":\"!==g[0]&&this.token(\",\",\",\",0,0,j),p.length}return this.token(\"DEFAULT\",u),u.length}},{key:\"numberToken\",value:function(){var t,n,r,i,s,o;if(!(r=q.exec(this.chunk)))return 0;switch(i=r[0],n=i.length,!1){case!/^0[BOX]/.test(i):this.error(\"radix prefix in '\"+i+\"' must be lowercase\",{offset:1});break;case!/^(?!0x).*E/.test(i):this.error(\"exponential notation in '\"+i+\"' must be indicated with a lowercase 'e'\",{offset:i.indexOf(\"E\")});break;case!/^0\\d*[89]/.test(i):this.error(\"decimal literal '\"+i+\"' must not be prefixed with '0'\",{length:n});break;case!/^0\\d+/.test(i):this.error(\"octal literal '\"+i+\"' must be prefixed with '0o'\",{length:n})}return t=function(){switch(i.charAt(1)){case\"b\":return 2;case\"o\":return 8;case\"x\":return 16;default:return null}}(),s=null==t?parseFloat(i):parseInt(i.slice(2),t),o=Infinity===s?\"INFINITY\":\"NUMBER\",this.token(o,i,0,n),n}},{key:\"stringToken\",value:function(){var t=this,n=rt.exec(this.chunk)||[],r=_slicedToArray(n,1),i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b;if(v=r[0],!v)return 0;d=this.prev(),d&&\"from\"===this.value()&&(this.seenImport||this.seenExport)&&(d[0]=\"FROM\"),g=function(){return\"'\"===v?nt:'\"'===v?Z:\"'''\"===v?S:'\"\"\"'===v?w:void 0}(),f=3===v.length;var x=this.matchWithInterpolations(g,v);if(b=x.tokens,a=x.index,i=b.length-1,o=v.charAt(0),f){for(c=null,u=function(){var e,t,n;for(n=[],l=e=0,t=b.length;e<t;l=++e)y=b[l],\"NEOSTRING\"===y[0]&&n.push(y[1]);return n}().join(\"#{}\");p=E.exec(u);)s=p[1],(null===c||0<(m=s.length)&&m<c.length)&&(c=s);c&&(h=RegExp(\"\\\\n\"+c,\"g\")),this.mergeInterpolationTokens(b,{delimiter:o},function(e,n){return e=t.formatString(e,{delimiter:v}),h&&(e=e.replace(h,\"\\n\")),0===n&&(e=e.replace(D,\"\")),n===i&&(e=e.replace(it,\"\")),e})}else this.mergeInterpolationTokens(b,{delimiter:o},function(e,n){return e=t.formatString(e,{delimiter:v}),e=e.replace(G,function(t,r){return 0===n&&0===r||n===i&&r+t.length===e.length?\"\":\" \"}),e});return this.atCSXTag()&&this.token(\",\",\",\",0,0,this.prev),a}},{key:\"commentToken\",value:function(){var n=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,r,i,s,o,u,a,f,l,h,p,d;if(!(f=n.match(c)))return 0;var v=f,m=_slicedToArray(v,2);return r=m[0],u=m[1],o=null,h=/^\\s*\\n+\\s*#/.test(r),u?(l=b.exec(r),l&&this.error(\"block comments cannot contain \"+l[0],{offset:l.index,length:l[0].length}),n=n.replace(\"###\"+u+\"###\",\"\"),n=n.replace(/^\\n+/,\"\"),this.lineToken(n),s=u,0<=t.call(s,\"\\n\")&&(s=s.replace(RegExp(\"\\\\n\"+Et(\" \",this.indent),\"g\"),\"\\n\")),o=[s]):(s=r.replace(/^(\\n*)/,\"\"),s=s.replace(/^([ |\\t]*)#/gm,\"\"),o=s.split(\"\\n\")),i=function(){var e,t,n;for(n=[],a=e=0,t=o.length;e<t;a=++e)s=o[a],n.push({content:s,here:null!=u,newLine:h||0!==a});return n}(),d=this.prev(),d?ht(i,d):(i[0].newLine=!0,this.lineToken(this.chunk.slice(r.length)),p=this.makeToken(\"JS\",\"\"),p.generated=!0,p.comments=i,this.tokens.push(p),this.newlineToken(0)),r.length}},{key:\"jsToken\",value:function(){var t,n;return\"`\"===this.chunk.charAt(0)&&(t=N.exec(this.chunk)||M.exec(this.chunk))?(n=t[1].replace(/\\\\+(`|$)/g,function(e){return e.slice(-Math.ceil(e.length/2))}),this.token(\"JS\",n,0,t[0].length),t[0].length):0}},{key:\"regexToken\",value:function(){var n=this,r,i,s,u,a,f,l,c,h,p,d,v,m,g,y,b;switch(!1){case!(p=X.exec(this.chunk)):this.error(\"regular expressions cannot begin with \"+p[2],{offset:p.index+p[1].length});break;case!(p=this.matchWithInterpolations(x,\"///\")):var w=p;if(b=w.tokens,l=w.index,u=this.chunk.slice(0,l).match(/\\s+(#(?!{).*)/g),u)for(c=0,h=u.length;c<h;c++)s=u[c],this.commentToken(s);break;case!(p=z.exec(this.chunk)):var E=p,S=_slicedToArray(E,3);if(y=S[0],r=S[1],i=S[2],this.validateEscapes(r,{isRegex:!0,offsetInChunk:1}),l=y.length,v=this.prev(),v)if(v.spaced&&(m=v[0],0<=t.call(o,m))){if(!i||U.test(y))return 0}else if(g=v[0],0<=t.call(I,g))return 0;i||this.error(\"missing / (unclosed regex)\");break;default:return 0}var T=W.exec(this.chunk.slice(l)),N=_slicedToArray(T,1);switch(f=N[0],a=l+f.length,d=this.makeToken(\"REGEX\",null,0,a),!1){case!!lt.test(f):this.error(\"invalid regular expression flags \"+f,{offset:l,length:f.length});break;case!y&&1!==b.length:r=r?this.formatRegex(r,{flags:f,delimiter:\"/\"}):this.formatHeregex(b[0][1],{flags:f}),this.token(\"REGEX\",\"\"+this.makeDelimitedLiteral(r,{delimiter:\"/\"})+f,0,a,d);break;default:this.token(\"REGEX_START\",\"(\",0,0,d),this.token(\"IDENTIFIER\",\"RegExp\",0,0),this.token(\"CALL_START\",\"(\",0,0),this.mergeInterpolationTokens(b,{delimiter:'\"',\"double\":!0},function(e){return n.formatHeregex(e,{flags:f})}),f&&(this.token(\",\",\",\",l-1,0),this.token(\"STRING\",'\"'+f+'\"',l-1,f.length)),this.token(\")\",\")\",a-1,0),this.token(\"REGEX_END\",\")\",a-1,0)}return a}},{key:\"lineToken\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,n,r,i,s,o,u,a,f,l;if(!(s=F.exec(t)))return 0;if(i=s[0],f=this.prev(),n=null!=f&&\"\\\\\"===f[0],n&&this.seenFor||(this.seenFor=!1),this.importSpecifierList||(this.seenImport=!1),this.exportSpecifierList||(this.seenExport=!1),l=i.length-1-i.lastIndexOf(\"\\n\"),a=this.unfinished(),u=0<l?i.slice(-l):\"\",!/^(.?)\\1*$/.exec(u))return this.error(\"mixed indentation\",{offset:i.length}),i.length;if(o=Math.min(u.length,this.indentLiteral.length),u.slice(0,o)!==this.indentLiteral.slice(0,o))return this.error(\"indentation mismatch\",{offset:i.length}),i.length;if(l-this.indebt===this.indent)return a?this.suppressNewlines():this.newlineToken(0),i.length;if(l>this.indent){if(a)return this.indebt=l-this.indent,this.suppressNewlines(),i.length;if(!this.tokens.length)return this.baseIndent=this.indent=l,this.indentLiteral=u,i.length;r=l-this.indent+this.outdebt,this.token(\"INDENT\",r,i.length-l,l),this.indents.push(r),this.ends.push({tag:\"OUTDENT\"}),this.outdebt=this.indebt=0,this.indent=l,this.indentLiteral=u}else l<this.baseIndent?this.error(\"missing indentation\",{offset:i.length}):(this.indebt=0,this.outdentToken(this.indent-l,a,i.length));return i.length}},{key:\"outdentToken\",value:function(n,r,i){var s,o,u,a;for(s=this.indent-n;0<n;)u=this.indents[this.indents.length-1],u?this.outdebt&&n<=this.outdebt?(this.outdebt-=n,n=0):(o=this.indents.pop()+this.outdebt,i&&(a=this.chunk[i],0<=t.call(k,a))&&(s-=o-n,n=o),this.outdebt=0,this.pair(\"OUTDENT\"),this.token(\"OUTDENT\",n,0,i),n-=o):this.outdebt=n=0;return o&&(this.outdebt-=n),this.suppressSemicolons(),\"TERMINATOR\"===this.tag()||r||this.token(\"TERMINATOR\",\"\\n\",i,0),this.indent=s,this.indentLiteral=this.indentLiteral.slice(0,s),this}},{key:\"whitespaceToken\",value:function(){var t,n,r;return(t=ct.exec(this.chunk))||(n=\"\\n\"===this.chunk.charAt(0))?(r=this.prev(),r&&(r[t?\"spaced\":\"newLine\"]=!0),t?t[0].length:0):0}},{key:\"newlineToken\",value:function(t){return this.suppressSemicolons(),\"TERMINATOR\"!==this.tag()&&this.token(\"TERMINATOR\",\"\\n\",t,0),this}},{key:\"suppressNewlines\",value:function(){var t;return t=this.prev(),\"\\\\\"===t[1]&&(t.comments&&1<this.tokens.length&&ht(t.comments,this.tokens[this.tokens.length-2]),this.tokens.pop()),this}},{key:\"csxToken\",value:function(){var n=this,r,i,s,o,u,a,f,l,c,p,d,v,b,w;if(u=this.chunk[0],d=0<this.tokens.length?this.tokens[this.tokens.length-1][0]:\"\",\"<\"===u){if(l=g.exec(this.chunk.slice(1))||m.exec(this.chunk.slice(1)),!l||!(0<this.csxDepth||!(p=this.prev())||p.spaced||(v=p[0],0>t.call(h,v))))return 0;var E=l,S=_slicedToArray(E,3);return f=S[0],a=S[1],i=S[2],c=this.token(\"CSX_TAG\",a,1,a.length),this.token(\"CALL_START\",\"(\"),this.token(\"[\",\"[\"),this.ends.push({tag:\"/>\",origin:c,name:a}),this.csxDepth++,a.length+1}if(s=this.atCSXTag()){if(\"/>\"===this.chunk.slice(0,2))return this.pair(\"/>\"),this.token(\"]\",\"]\",0,2),this.token(\"CALL_END\",\")\",0,2),this.csxDepth--,2;if(\"{\"===u)return\":\"===d?(b=this.token(\"(\",\"(\"),this.csxObjAttribute[this.csxDepth]=!1):(b=this.token(\"{\",\"{\"),this.csxObjAttribute[this.csxDepth]=!0),this.ends.push({tag:\"}\",origin:b}),1;if(\">\"===u){this.pair(\"/>\"),c=this.token(\"]\",\"]\"),this.token(\",\",\",\");var x=this.matchWithInterpolations(A,\">\",\"</\",y);return w=x.tokens,o=x.index,this.mergeInterpolationTokens(w,{delimiter:'\"'},function(e){return n.formatString(e,{delimiter:\">\"})}),l=g.exec(this.chunk.slice(o))||m.exec(this.chunk.slice(o)),l&&l[1]===s.name||this.error(\"expected corresponding CSX closing tag for \"+s.name,s.origin[2]),r=o+s.name.length,\">\"!==this.chunk[r]&&this.error(\"missing closing > after tag name\",{offset:r,length:1}),this.token(\"CALL_END\",\")\",o,s.name.length+1),this.csxDepth--,r+1}return 0}return this.atCSXTag(1)?\"}\"===u?(this.pair(u),this.csxObjAttribute[this.csxDepth]?(this.token(\"}\",\"}\"),this.csxObjAttribute[this.csxDepth]=!1):this.token(\")\",\")\"),this.token(\",\",\",\"),1):0:0}},{key:\"atCSXTag\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,n,r,i;if(0===this.csxDepth)return!1;for(n=this.ends.length-1;\"OUTDENT\"===(null==(i=this.ends[n])?void 0:i.tag)||0<t--;)n--;return r=this.ends[n],\"/>\"===(null==r?void 0:r.tag)&&r}},{key:\"literalToken\",value:function(){var n,r,i,s,a,f,l,c,h,v,m,g,y;if(n=R.exec(this.chunk)){var b=n,w=_slicedToArray(b,1);y=w[0],u.test(y)&&this.tagParameters()}else y=this.chunk.charAt(0);if(m=y,s=this.prev(),s&&0<=t.call([\"=\"].concat(_toConsumableArray(d)),y)&&(v=!1,\"=\"!==y||\"||\"!==(a=s[1])&&\"&&\"!==a||s.spaced||(s[0]=\"COMPOUND_ASSIGN\",s[1]+=\"=\",s=this.tokens[this.tokens.length-2],v=!0),s&&\"PROPERTY\"!==s[0]&&(i=null==(f=s.origin)?s:f,r=gt(s[1],i[1]),r&&this.error(r,i[2])),v))return y.length;if(\"{\"===y&&this.seenImport?this.importSpecifierList=!0:this.importSpecifierList&&\"}\"===y?this.importSpecifierList=!1:\"{\"===y&&\"EXPORT\"===(null==s?void 0:s[0])?this.exportSpecifierList=!0:this.exportSpecifierList&&\"}\"===y&&(this.exportSpecifierList=!1),\";\"===y)(l=null==s?void 0:s[0],0<=t.call([\"=\"].concat(_toConsumableArray(at)),l))&&this.error(\"unexpected ;\"),this.seenFor=this.seenImport=this.seenExport=!1,m=\"TERMINATOR\";else if(\"*\"===y&&\"EXPORT\"===(null==s?void 0:s[0]))m=\"EXPORT_ALL\";else if(0<=t.call(j,y))m=\"MATH\";else if(0<=t.call(p,y))m=\"COMPARE\";else if(0<=t.call(d,y))m=\"COMPOUND_ASSIGN\";else if(0<=t.call(ot,y))m=\"UNARY\";else if(0<=t.call(ut,y))m=\"UNARY_MATH\";else if(0<=t.call(Q,y))m=\"SHIFT\";else if(\"?\"===y&&(null==s?void 0:s.spaced))m=\"BIN?\";else if(s)if(\"(\"===y&&!s.spaced&&(c=s[0],0<=t.call(o,c)))\"?\"===s[0]&&(s[0]=\"FUNC_EXIST\"),m=\"CALL_START\";else if(\"[\"===y&&((h=s[0],0<=t.call(L,h))&&!s.spaced||\"::\"===s[0]))switch(m=\"INDEX_START\",s[0]){case\"?\":s[0]=\"INDEX_SOAK\"}return g=this.makeToken(m,y),\"(\"===y||\"{\"===y||\"[\"===y?this.ends.push({tag:O[y],origin:g}):\")\"===y||\"}\"===y||\"]\"===y?this.pair(y):void 0,this.tokens.push(this.makeToken(m,y)),y.length}},{key:\"tagParameters\",value:function(){var t,n,r,i,s;if(\")\"!==this.tag())return this;for(r=[],s=this.tokens,t=s.length,n=s[--t],n[0]=\"PARAM_END\";i=s[--t];)switch(i[0]){case\")\":r.push(i);break;case\"(\":case\"CALL_START\":if(!r.length)return\"(\"===i[0]?(i[0]=\"PARAM_START\",this):(n[0]=\"CALL_END\",this);r.pop()}return this}},{key:\"closeIndentation\",value:function(){return this.outdentToken(this.indent)}},{key:\"matchWithInterpolations\",value:function(r,i,s,o){var u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L;if(null==s&&(s=i),null==o&&(o=/^#\\{/),L=[],S=i.length,this.chunk.slice(0,S)!==i)return null;for(C=this.chunk.slice(S);;){var A=r.exec(C),O=_slicedToArray(A,1);if(k=O[0],this.validateEscapes(k,{isRegex:\"/\"===i.charAt(0),offsetInChunk:S}),L.push(this.makeToken(\"NEOSTRING\",k,S)),C=C.slice(k.length),S+=k.length,!(w=o.exec(C)))break;var M=w,_=_slicedToArray(M,1);g=_[0],m=g.length-1;var D=this.getLineAndColumnFromChunk(S+m),P=_slicedToArray(D,2);b=P[0],p=P[1],N=C.slice(m);var H=(new e).tokenize(N,{line:b,column:p,untilBalanced:!0});if(E=H.tokens,v=H.index,v+=m,c=\"}\"===C[v-1],c){var B,j,F,I;B=E,j=_slicedToArray(B,1),x=j[0],B,F=n.call(E,-1),I=_slicedToArray(F,1),h=I[0],F,x[0]=x[1]=\"(\",h[0]=h[1]=\")\",h.origin=[\"\",\"end of interpolation\",h[2]]}\"TERMINATOR\"===(null==(T=E[1])?void 0:T[0])&&E.splice(1,1),c||(x=this.makeToken(\"(\",\"(\",S,0),h=this.makeToken(\")\",\")\",S+v,0),E=[x].concat(_toConsumableArray(E),[h])),L.push([\"TOKENS\",E]),C=C.slice(v),S+=v}return C.slice(0,s.length)!==s&&this.error(\"missing \"+s,{length:i.length}),u=L,a=_slicedToArray(u,1),d=a[0],u,f=n.call(L,-1),l=_slicedToArray(f,1),y=l[0],f,d[2].first_column-=i.length,\"\\n\"===y[1].substr(-1)?(y[2].last_line+=1,y[2].last_column=s.length-1):y[2].last_column+=s.length,0===y[1].length&&(y[2].last_column-=1),{tokens:L,index:S+s.length}}},{key:\"mergeInterpolationTokens\",value:function(t,r,i){var s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x;for(1<t.length&&(v=this.token(\"STRING_START\",\"(\",0,0)),u=this.tokens.length,a=f=0,h=t.length;f<h;a=++f){var T;w=t[a];var N=w,C=_slicedToArray(N,2);switch(b=C[0],x=C[1],b){case\"TOKENS\":if(2===x.length){if(!x[0].comments&&!x[1].comments)continue;for(m=0===this.csxDepth?this.makeToken(\"STRING\",\"''\"):this.makeToken(\"JS\",\"\"),m[2]=x[0][2],l=0,p=x.length;l<p;l++){var k;(S=x[l],!!S.comments)&&(null==m.comments&&(m.comments=[]),(k=m.comments).push.apply(k,_toConsumableArray(S.comments)))}x.splice(1,0,m)}d=x[0],E=x;break;case\"NEOSTRING\":if(s=i.call(this,w[1],a),0===s.length){if(0!==a)continue;o=this.tokens.length}2===a&&null!=o&&this.tokens.splice(o,2),w[0]=\"STRING\",w[1]=this.makeDelimitedLiteral(s,r),d=w,E=[w]}this.tokens.length>u&&(g=this.token(\"+\",\"+\"),g[2]={first_line:d[2].first_line,first_column:d[2].first_column,last_line:d[2].first_line,last_column:d[2].first_column}),(T=this.tokens).push.apply(T,_toConsumableArray(E))}if(v){var L=n.call(t,-1),A=_slicedToArray(L,1);return c=A[0],v.origin=[\"STRING\",null,{first_line:v[2].first_line,first_column:v[2].first_column,last_line:c[2].last_line,last_column:c[2].last_column}],v[2]=v.origin[2],y=this.token(\"STRING_END\",\")\"),y[2]={first_line:c[2].last_line,first_column:c[2].last_column,last_line:c[2].last_line,last_column:c[2].last_column}}}},{key:\"pair\",value:function(t){var r,i,s,o,u,a,f;if(u=this.ends,r=n.call(u,-1),i=_slicedToArray(r,1),o=i[0],r,t!==(f=null==o?void 0:o.tag)){var l,c;return\"OUTDENT\"!==f&&this.error(\"unmatched \"+t),a=this.indents,l=n.call(a,-1),c=_slicedToArray(l,1),s=c[0],l,this.outdentToken(s,!0),this.pair(t)}return this.ends.pop()}},{key:\"getLineAndColumnFromChunk\",value:function(t){var r,i,s,o,u;if(0===t)return[this.chunkLine,this.chunkColumn];if(u=t>=this.chunk.length?this.chunk:this.chunk.slice(0,+(t-1)+1||9e9),s=dt(u,\"\\n\"),r=this.chunkColumn,0<s){var a,f;o=u.split(\"\\n\"),a=n.call(o,-1),f=_slicedToArray(a,1),i=f[0],a,r=i.length}else r+=u.length;return[this.chunkLine+s,r]}},{key:\"makeToken\",value:function(t,n){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:n.length,s,o,u;o={};var a=this.getLineAndColumnFromChunk(r),f=_slicedToArray(a,2);o.first_line=f[0],o.first_column=f[1],s=0<i?i-1:0;var l=this.getLineAndColumnFromChunk(r+s),c=_slicedToArray(l,2);return o.last_line=c[0],o.last_column=c[1],u=[t,n,o],u}},{key:\"token\",value:function(e,t,n,r,i){var s;return s=this.makeToken(e,t,n,r),i&&(s.origin=i),this.tokens.push(s),s}},{key:\"tag\",value:function(){var t,r,i,s;return i=this.tokens,t=n.call(i,-1),r=_slicedToArray(t,1),s=r[0],t,null==s?void 0:s[0]}},{key:\"value\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0],r,i,s,o,u;return s=this.tokens,r=n.call(s,-1),i=_slicedToArray(r,1),u=i[0],r,t&&null!=(null==u?void 0:u.origin)?null==(o=u.origin)?void 0:o[1]:null==u?void 0:u[1]}},{key:\"prev\",value:function(){return this.tokens[this.tokens.length-1]}},{key:\"unfinished\",value:function(){var n;return H.test(this.chunk)||(n=this.tag(),0<=t.call(at,n))}},{key:\"formatString\",value:function(t,n){return this.replaceUnicodeCodePointEscapes(t.replace(tt,\"$1\"),n)}},{key:\"formatHeregex\",value:function(t,n){return this.formatRegex(t.replace(T,\"$1$2\"),wt(n,{delimiter:\"///\"}))}},{key:\"formatRegex\",value:function(t,n){return this.replaceUnicodeCodePointEscapes(t,n)}},{key:\"unicodeCodePointToUnicodeEscapes\",value:function(t){var n,r,i;return(i=function(e){var t;return t=e.toString(16),\"\\\\u\"+Et(\"0\",4-t.length)+t},65536>t)?i(t):(n=_Mathfloor((t-65536)/1024)+55296,r=(t-65536)%1024+56320,\"\"+i(n)+i(r))}},{key:\"replaceUnicodeCodePointEscapes\",value:function(n,r){var i=this,s;return s=null!=r.flags&&0>t.call(r.flags,\"u\"),n.replace(ft,function(e,t,n,o){var u;return t?t:(u=parseInt(n,16),1114111<u&&i.error(\"unicode code point escapes greater than \\\\u{10ffff} are not allowed\",{offset:o+r.delimiter.length,length:n.length+4}),s?i.unicodeCodePointToUnicodeEscapes(u):e)})}},{key:\"validateEscapes\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r,i,s,o,u,a,f,l,c,h;if(o=n.isRegex?V:et,u=o.exec(t),!!u)return u[0],r=u[1],f=u[2],i=u[3],h=u[4],c=u[5],a=f?\"octal escape sequences are not allowed\":\"invalid escape sequence\",s=\"\\\\\"+(f||i||h||c),this.error(a+\" \"+s,{offset:(null==(l=n.offsetInChunk)?0:l)+u.index+r.length,length:s.length})}},{key:\"makeDelimitedLiteral\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r;return\"\"===t&&\"/\"===n.delimiter&&(t=\"(?:)\"),r=RegExp(\"(\\\\\\\\\\\\\\\\)|(\\\\\\\\0(?=[1-7]))|\\\\\\\\?(\"+n.delimiter+\")|\\\\\\\\?(?:(\\\\n)|(\\\\r)|(\\\\u2028)|(\\\\u2029))|(\\\\\\\\.)\",\"g\"),t=t.replace(r,function(e,t,r,i,s,o,u,a,f){switch(!1){case!t:return n.double?t+t:t;case!r:return\"\\\\x00\";case!i:return\"\\\\\"+i;case!s:return\"\\\\n\";case!o:return\"\\\\r\";case!u:return\"\\\\u2028\";case!a:return\"\\\\u2029\";case!f:return n.double?\"\\\\\"+f:f}}),\"\"+n.delimiter+t+n.delimiter}},{key:\"suppressSemicolons\",value:function(){var n,r,i;for(i=[];\";\"===this.value();)this.tokens.pop(),(n=null==(r=this.prev())?void 0:r[0],0<=t.call([\"=\"].concat(_toConsumableArray(at)),n))?i.push(this.error(\"unexpected ;\")):i.push(void 0);return i}},{key:\"error\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r,i,s,o,u,a,f;return u=\"first_line\"in n?n:(r=this.getLineAndColumnFromChunk(null==(a=n.offset)?0:a),i=_slicedToArray(r,2),o=i[0],s=i[1],r,{first_line:o,first_column:s,last_column:s+(null==(f=n.length)?1:f)-1}),xt(t,u)}}]),e}(),gt=function(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:e;switch(!1){case 0>t.call([].concat(_toConsumableArray(_),_toConsumableArray(l)),e):return\"keyword '\"+n+\"' can't be assigned\";case 0>t.call(Y,e):return\"'\"+n+\"' can't be assigned\";case 0>t.call(J,e):return\"reserved word '\"+n+\"' can't be assigned\";default:return!1}},e.isUnassignable=gt,mt=function(e){var t;return\"IDENTIFIER\"===e[0]?(\"from\"===e[1]&&(e[1][0]=\"IDENTIFIER\",!0),!0):\"FOR\"!==e[0]&&\"{\"!==(t=e[1])&&\"[\"!==t&&\",\"!==t&&\":\"!==t},_=[\"true\",\"false\",\"null\",\"this\",\"new\",\"delete\",\"typeof\",\"in\",\"instanceof\",\"return\",\"throw\",\"break\",\"continue\",\"debugger\",\"yield\",\"await\",\"if\",\"else\",\"switch\",\"for\",\"while\",\"do\",\"try\",\"catch\",\"finally\",\"class\",\"extends\",\"super\",\"import\",\"export\",\"default\"],l=[\"undefined\",\"Infinity\",\"NaN\",\"then\",\"unless\",\"until\",\"loop\",\"of\",\"by\",\"when\"],f={and:\"&&\",or:\"||\",is:\"==\",isnt:\"!=\",not:\"!\",yes:\"true\",no:\"false\",on:\"true\",off:\"false\"},a=function(){var e;for(yt in e=[],f)e.push(yt);return e}(),l=l.concat(a),J=[\"case\",\"function\",\"var\",\"void\",\"with\",\"const\",\"let\",\"enum\",\"native\",\"implements\",\"interface\",\"package\",\"private\",\"protected\",\"public\",\"static\"],Y=[\"arguments\",\"eval\"],e.JS_FORBIDDEN=_.concat(J).concat(Y),i=65279,C=/^(?!\\d)((?:(?!\\s)[$\\w\\x7f-\\uffff])+)([^\\n\\S]*:(?!:))?/,g=/^(?![\\d<])((?:(?!\\s)[\\.\\-$\\w\\x7f-\\uffff])+)/,m=/^()>/,v=/^(?!\\d)((?:(?!\\s)[\\-$\\w\\x7f-\\uffff])+)([^\\S]*=(?!=))?/,q=/^0b[01]+|^0o[0-7]+|^0x[\\da-f]+|^\\d*\\.?\\d+(?:e[+-]?\\d+)?/i,R=/^(?:[-=]>|[-+*\\/%<>&|^!?=]=|>>>=?|([-+:])\\1|([&|<>*\\/%])\\2=?|\\?(\\.|::)|\\.{2,3})/,ct=/^[^\\n\\S]+/,c=/^\\s*###([^#][\\s\\S]*?)(?:###[^\\n\\S]*|###$)|^(?:\\s*#(?!##[^#]).*)+/,u=/^[-=]>/,F=/^(?:\\n[^\\n\\S]*)+/,M=/^`(?!``)((?:[^`\\\\]|\\\\[\\s\\S])*)`/,N=/^```((?:[^`\\\\]|\\\\[\\s\\S]|`(?!``))*)```/,rt=/^(?:'''|\"\"\"|'|\")/,nt=/^(?:[^\\\\']|\\\\[\\s\\S])*/,Z=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\\#(?!\\{))*/,S=/^(?:[^\\\\']|\\\\[\\s\\S]|'(?!''))*/,w=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\"(?!\"\")|\\#(?!\\{))*/,A=/^(?:[^\\{<])*/,y=/^(?:\\{|<(?!\\/))/,tt=/((?:\\\\\\\\)+)|\\\\[^\\S\\n]*\\n\\s*/g,G=/\\s*\\n\\s*/g,E=/\\n+([^\\n\\S]*)(?=\\S)/g,z=/^\\/(?!\\/)((?:[^[\\/\\n\\\\]|\\\\[^\\n]|\\[(?:\\\\[^\\n]|[^\\]\\n\\\\])*\\])*)(\\/)?/,W=/^\\w*/,lt=/^(?!.*(.).*\\1)[imguy]*$/,x=/^(?:[^\\\\\\/#\\s]|\\\\[\\s\\S]|\\/(?!\\/\\/)|\\#(?!\\{)|\\s+(?:#(?!\\{).*)?)*/,T=/((?:\\\\\\\\)+)|\\\\(\\s)|\\s+(?:#.*)?/g,X=/^(\\/|\\/{3}\\s*)(\\*)/,U=/^\\/=?\\s/,b=/\\*\\//,H=/^\\s*(?:,|\\??\\.(?![.\\d])|::)/,et=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7]|[1-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,V=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,ft=/(\\\\\\\\)|\\\\u\\{([\\da-fA-F]+)\\}/g,D=/^[^\\n\\S]*\\n/,it=/\\n[^\\n\\S]*$/,st=/\\s+$/,d=[\"-=\",\"+=\",\"/=\",\"*=\",\"%=\",\"||=\",\"&&=\",\"?=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"^=\",\"|=\",\"**=\",\"//=\",\"%%=\"],ot=[\"NEW\",\"TYPEOF\",\"DELETE\",\"DO\"],ut=[\"!\",\"~\"],Q=[\"<<\",\">>\",\">>>\"],p=[\"==\",\"!=\",\"<\",\">\",\"<=\",\">=\"],j=[\"*\",\"/\",\"%\",\"//\",\"%%\"],$=[\"IN\",\"OF\",\"INSTANCEOF\"],s=[\"TRUE\",\"FALSE\"],o=[\"IDENTIFIER\",\"PROPERTY\",\")\",\"]\",\"?\",\"@\",\"THIS\",\"SUPER\"],L=o.concat([\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_END\",\"REGEX\",\"REGEX_END\",\"BOOL\",\"NULL\",\"UNDEFINED\",\"}\",\"::\"]),h=[\"IDENTIFIER\",\")\",\"]\",\"NUMBER\"],I=L.concat([\"++\",\"--\"]),P=[\"INDENT\",\"OUTDENT\",\"TERMINATOR\"],k=[\")\",\"}\",\"]\"],at=[\"\\\\\",\".\",\"?.\",\"?::\",\"UNARY\",\"MATH\",\"UNARY_MATH\",\"+\",\"-\",\"**\",\"SHIFT\",\"RELATION\",\"COMPARE\",\"&\",\"^\",\"|\",\"&&\",\"||\",\"BIN?\",\"EXTENDS\"]}.call(this),{exports:e}.exports}(),require[\"./parser\"]=function(){var e={},t={exports:e},n=function(){function e(){this.yy={}}var t=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},n=[1,24],r=[1,56],i=[1,91],s=[1,92],o=[1,87],u=[1,93],a=[1,94],f=[1,89],l=[1,90],c=[1,64],h=[1,66],p=[1,67],d=[1,68],v=[1,69],m=[1,70],g=[1,72],y=[1,73],b=[1,58],w=[1,42],E=[1,36],S=[1,76],x=[1,77],T=[1,86],N=[1,54],C=[1,59],k=[1,60],L=[1,74],A=[1,75],O=[1,47],M=[1,55],_=[1,71],D=[1,81],P=[1,82],H=[1,83],B=[1,84],j=[1,53],F=[1,80],I=[1,38],q=[1,39],R=[1,40],U=[1,41],z=[1,43],W=[1,44],X=[1,95],V=[1,6,36,47,146],$=[1,6,35,36,47,69,70,93,127,135,146,149,157],J=[1,113],K=[1,114],Q=[1,115],G=[1,110],Y=[1,98],Z=[1,97],et=[1,96],tt=[1,99],nt=[1,100],rt=[1,101],it=[1,102],st=[1,103],ot=[1,104],ut=[1,105],at=[1,106],ft=[1,107],lt=[1,108],ct=[1,109],ht=[1,117],pt=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],dt=[2,196],vt=[1,123],mt=[1,128],gt=[1,124],yt=[1,125],bt=[1,126],wt=[1,129],Et=[1,122],St=[1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174],xt=[1,6,35,36,45,46,47,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Tt=[2,122],Nt=[2,126],Ct=[6,35,88,93],kt=[2,99],Lt=[1,141],At=[1,135],Ot=[1,140],Mt=[1,144],_t=[1,149],Dt=[1,147],Pt=[1,151],Ht=[1,155],Bt=[1,153],jt=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Ft=[2,119],It=[1,6,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],qt=[2,31],Rt=[1,183],Ut=[2,86],zt=[1,187],Wt=[1,193],Xt=[1,208],Vt=[1,203],$t=[1,212],Jt=[1,209],Kt=[1,214],Qt=[1,215],Gt=[1,217],Yt=[14,32,35,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Zt=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],en=[1,228],tn=[2,142],nn=[1,250],rn=[1,245],sn=[1,256],on=[1,6,35,36,45,46,47,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],un=[1,6,33,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,117,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],an=[1,6,35,36,45,46,47,52,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],fn=[1,286],ln=[45,46,126],cn=[1,297],hn=[1,296],pn=[6,35],dn=[2,97],vn=[1,303],mn=[6,35,36,88,93],gn=[6,35,36,61,70,88,93],yn=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],bn=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,184,185,186,187,188,189,190,191,192,193],wn=[2,347],En=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,185,186,187,188,189,190,191,192,193],Sn=[45,46,80,81,101,102,103,105,125,126],xn=[1,330],Tn=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174],Nn=[2,84],Cn=[1,346],kn=[1,348],Ln=[1,353],An=[1,355],On=[6,35,69,93],Mn=[2,221],_n=[2,222],Dn=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Pn=[1,369],Hn=[6,14,32,35,36,38,39,43,45,46,49,50,54,55,56,57,58,59,68,69,70,77,84,85,86,90,91,93,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Bn=[6,35,36,69,93],jn=[6,35,36,69,93,127],Fn=[1,6,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],In=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,157,174],qn=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,149,157,174],Rn=[2,273],Un=[164,165,166],zn=[93,164,165,166],Wn=[6,35,109],Xn=[1,393],Vn=[6,35,36,93,109],$n=[6,35,36,65,93,109],Jn=[1,399],Kn=[1,400],Qn=[6,35,36,61,65,70,80,81,93,109,126],Gn=[6,35,36,70,80,81,93,109,126],Yn=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,185,186,187,188,189,190,191,192,193],Zn=[2,339],er=[2,338],tr=[1,6,35,36,45,46,47,52,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],nr=[1,422],rr=[14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,83,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ir=[2,207],sr=[6,35,36],or=[2,98],ur=[1,431],ar=[1,432],fr=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,142,143,146,148,149,150,156,157,169,171,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],lr=[1,312],cr=[36,169,171],hr=[1,6,36,47,69,70,83,88,93,109,127,135,146,149,157,174],pr=[1,467],dr=[1,473],vr=[1,6,35,36,47,69,70,93,127,135,146,149,157,174],mr=[2,113],gr=[1,486],yr=[1,487],br=[6,35,36,69],wr=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,169,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Er=[1,6,35,36,47,69,70,93,127,135,146,149,157,169],Sr=[2,286],xr=[2,287],Tr=[2,302],Nr=[1,510],Cr=[1,511],kr=[6,35,36,109],Lr=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,157,174],Ar=[1,532],Or=[6,35,36,93,127],Mr=[6,35,36,93],_r=[1,6,35,36,47,69,70,83,88,93,109,127,135,142,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Dr=[35,93],Pr=[1,560],Hr=[1,561],Br=[1,567],jr=[1,568],Fr=[2,258],Ir=[2,261],qr=[2,274],Rr=[1,617],Ur=[1,618],zr=[2,288],Wr=[2,292],Xr=[2,289],Vr=[2,293],$r=[2,290],Jr=[2,291],Kr=[2,303],Qr=[2,304],Gr=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174],Yr=[2,294],Zr=[2,296],ei=[2,298],ti=[2,300],ni=[2,295],ri=[2,297],ii=[2,299],si=[2,301],oi={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Line:5,TERMINATOR:6,Expression:7,ExpressionLine:8,Statement:9,FuncDirective:10,YieldReturn:11,AwaitReturn:12,Return:13,STATEMENT:14,Import:15,Export:16,Value:17,Code:18,Operation:19,Assign:20,If:21,Try:22,While:23,For:24,Switch:25,Class:26,Throw:27,Yield:28,CodeLine:29,IfLine:30,OperationLine:31,YIELD:32,FROM:33,Block:34,INDENT:35,OUTDENT:36,Identifier:37,IDENTIFIER:38,CSX_TAG:39,Property:40,PROPERTY:41,AlphaNumeric:42,NUMBER:43,String:44,STRING:45,STRING_START:46,STRING_END:47,Regex:48,REGEX:49,REGEX_START:50,Invocation:51,REGEX_END:52,Literal:53,JS:54,UNDEFINED:55,NULL:56,BOOL:57,INFINITY:58,NAN:59,Assignable:60,\"=\":61,AssignObj:62,ObjAssignable:63,ObjRestValue:64,\":\":65,SimpleObjAssignable:66,ThisProperty:67,\"[\":68,\"]\":69,\"...\":70,ObjSpreadExpr:71,ObjSpreadIdentifier:72,Object:73,Parenthetical:74,Super:75,This:76,SUPER:77,Arguments:78,ObjSpreadAccessor:79,\".\":80,INDEX_START:81,IndexValue:82,INDEX_END:83,RETURN:84,AWAIT:85,PARAM_START:86,ParamList:87,PARAM_END:88,FuncGlyph:89,\"->\":90,\"=>\":91,OptComma:92,\",\":93,Param:94,ParamVar:95,Array:96,Splat:97,SimpleAssignable:98,Accessor:99,Range:100,\"?.\":101,\"::\":102,\"?::\":103,Index:104,INDEX_SOAK:105,Slice:106,\"{\":107,AssignList:108,\"}\":109,CLASS:110,EXTENDS:111,IMPORT:112,ImportDefaultSpecifier:113,ImportNamespaceSpecifier:114,ImportSpecifierList:115,ImportSpecifier:116,AS:117,DEFAULT:118,IMPORT_ALL:119,EXPORT:120,ExportSpecifierList:121,EXPORT_ALL:122,ExportSpecifier:123,OptFuncExist:124,FUNC_EXIST:125,CALL_START:126,CALL_END:127,ArgList:128,THIS:129,\"@\":130,Elisions:131,ArgElisionList:132,OptElisions:133,RangeDots:134,\"..\":135,Arg:136,ArgElision:137,Elision:138,SimpleArgs:139,TRY:140,Catch:141,FINALLY:142,CATCH:143,THROW:144,\"(\":145,\")\":146,WhileLineSource:147,WHILE:148,WHEN:149,UNTIL:150,WhileSource:151,Loop:152,LOOP:153,ForBody:154,ForLineBody:155,FOR:156,BY:157,ForStart:158,ForSource:159,ForLineSource:160,ForVariables:161,OWN:162,ForValue:163,FORIN:164,FOROF:165,FORFROM:166,SWITCH:167,Whens:168,ELSE:169,When:170,LEADING_WHEN:171,IfBlock:172,IF:173,POST_IF:174,IfBlockLine:175,UNARY:176,UNARY_MATH:177,\"-\":178,\"+\":179,\"--\":180,\"++\":181,\"?\":182,MATH:183,\"**\":184,SHIFT:185,COMPARE:186,\"&\":187,\"^\":188,\"|\":189,\"&&\":190,\"||\":191,\"BIN?\":192,RELATION:193,COMPOUND_ASSIGN:194,$accept:0,$end:1},terminals_:{2:\"error\",6:\"TERMINATOR\",14:\"STATEMENT\",32:\"YIELD\",33:\"FROM\",35:\"INDENT\",36:\"OUTDENT\",38:\"IDENTIFIER\",39:\"CSX_TAG\",41:\"PROPERTY\",43:\"NUMBER\",45:\"STRING\",46:\"STRING_START\",47:\"STRING_END\",49:\"REGEX\",50:\"REGEX_START\",52:\"REGEX_END\",54:\"JS\",55:\"UNDEFINED\",56:\"NULL\",57:\"BOOL\",58:\"INFINITY\",59:\"NAN\",61:\"=\",65:\":\",68:\"[\",69:\"]\",70:\"...\",77:\"SUPER\",80:\".\",81:\"INDEX_START\",83:\"INDEX_END\",84:\"RETURN\",85:\"AWAIT\",86:\"PARAM_START\",88:\"PARAM_END\",90:\"->\",91:\"=>\",93:\",\",101:\"?.\",102:\"::\",103:\"?::\",105:\"INDEX_SOAK\",107:\"{\",109:\"}\",110:\"CLASS\",111:\"EXTENDS\",112:\"IMPORT\",117:\"AS\",118:\"DEFAULT\",119:\"IMPORT_ALL\",120:\"EXPORT\",122:\"EXPORT_ALL\",125:\"FUNC_EXIST\",126:\"CALL_START\",127:\"CALL_END\",129:\"THIS\",130:\"@\",135:\"..\",140:\"TRY\",142:\"FINALLY\",143:\"CATCH\",144:\"THROW\",145:\"(\",146:\")\",148:\"WHILE\",149:\"WHEN\",150:\"UNTIL\",153:\"LOOP\",156:\"FOR\",157:\"BY\",162:\"OWN\",164:\"FORIN\",165:\"FOROF\",166:\"FORFROM\",167:\"SWITCH\",169:\"ELSE\",171:\"LEADING_WHEN\",173:\"IF\",174:\"POST_IF\",176:\"UNARY\",177:\"UNARY_MATH\",178:\"-\",179:\"+\",180:\"--\",181:\"++\",182:\"?\",183:\"MATH\",184:\"**\",185:\"SHIFT\",186:\"COMPARE\",187:\"&\",188:\"^\",189:\"|\",190:\"&&\",191:\"||\",192:\"BIN?\",193:\"RELATION\",194:\"COMPOUND_ASSIGN\"},productions_:[0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[5,1],[5,1],[10,1],[10,1],[9,1],[9,1],[9,1],[9,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[8,1],[8,1],[8,1],[28,1],[28,2],[28,3],[34,2],[34,3],[37,1],[37,1],[40,1],[42,1],[42,1],[44,1],[44,3],[48,1],[48,3],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[20,3],[20,4],[20,5],[62,1],[62,1],[62,3],[62,5],[62,3],[62,5],[66,1],[66,1],[66,1],[66,3],[63,1],[63,1],[64,2],[64,2],[64,2],[64,2],[71,1],[71,1],[71,1],[71,1],[71,1],[71,2],[71,2],[71,2],[72,2],[72,2],[79,2],[79,3],[13,2],[13,4],[13,1],[11,3],[11,2],[12,3],[12,2],[18,5],[18,2],[29,5],[29,2],[89,1],[89,1],[92,0],[92,1],[87,0],[87,1],[87,3],[87,4],[87,6],[94,1],[94,2],[94,2],[94,3],[94,1],[95,1],[95,1],[95,1],[95,1],[97,2],[97,2],[98,1],[98,2],[98,2],[98,1],[60,1],[60,1],[60,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[75,3],[75,4],[99,2],[99,2],[99,2],[99,2],[99,1],[99,1],[104,3],[104,2],[82,1],[82,1],[73,4],[108,0],[108,1],[108,3],[108,4],[108,6],[26,1],[26,2],[26,3],[26,4],[26,2],[26,3],[26,4],[26,5],[15,2],[15,4],[15,4],[15,5],[15,7],[15,6],[15,9],[115,1],[115,3],[115,4],[115,4],[115,6],[116,1],[116,3],[116,1],[116,3],[113,1],[114,3],[16,3],[16,5],[16,2],[16,4],[16,5],[16,6],[16,3],[16,5],[16,4],[16,7],[121,1],[121,3],[121,4],[121,4],[121,6],[123,1],[123,3],[123,3],[123,1],[123,3],[51,3],[51,3],[51,3],[124,0],[124,1],[78,2],[78,4],[76,1],[76,1],[67,2],[96,2],[96,3],[96,4],[134,1],[134,1],[100,5],[100,5],[106,3],[106,2],[106,3],[106,2],[106,2],[106,1],[128,1],[128,3],[128,4],[128,4],[128,6],[136,1],[136,1],[136,1],[136,1],[132,1],[132,3],[132,4],[132,4],[132,6],[137,1],[137,2],[133,1],[133,2],[131,1],[131,2],[138,1],[139,1],[139,1],[139,3],[139,3],[22,2],[22,3],[22,4],[22,5],[141,3],[141,3],[141,2],[27,2],[27,4],[74,3],[74,5],[147,2],[147,4],[147,2],[147,4],[151,2],[151,4],[151,4],[151,2],[151,4],[151,4],[23,2],[23,2],[23,2],[23,2],[23,1],[152,2],[152,2],[24,2],[24,2],[24,2],[24,2],[154,2],[154,4],[154,2],[155,4],[155,2],[158,2],[158,3],[163,1],[163,1],[163,1],[163,1],[161,1],[161,3],[159,2],[159,2],[159,4],[159,4],[159,4],[159,4],[159,4],[159,4],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,2],[159,4],[159,4],[160,2],[160,2],[160,4],[160,4],[160,4],[160,4],[160,4],[160,4],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,2],[160,4],[160,4],[25,5],[25,5],[25,7],[25,7],[25,4],[25,6],[168,1],[168,2],[170,3],[170,4],[172,3],[172,5],[21,1],[21,3],[21,3],[21,3],[175,3],[175,5],[30,1],[30,3],[30,3],[30,3],[31,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,5],[19,4]],performAction:function(e,t,n,r,i,s,o){var u=s.length-1;switch(i){case 1:return this.$=r.addDataToNode(r,o[u],o[u])(new r.Block);case 2:return this.$=s[u];case 3:this.$=r.addDataToNode(r,o[u],o[u])(r.Block.wrap([s[u]]));break;case 4:this.$=r.addDataToNode(r,o[u-2],o[u])(s[u-2].push(s[u]));break;case 5:this.$=s[u-1];break;case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 40:case 45:case 47:case 57:case 62:case 63:case 64:case 66:case 67:case 72:case 73:case 74:case 75:case 76:case 97:case 98:case 109:case 110:case 111:case 112:case 118:case 119:case 122:case 127:case 136:case 221:case 222:case 223:case 225:case 237:case 238:case 280:case 281:case 330:case 336:case 342:this.$=s[u];break;case 13:this.$=r.addDataToNode(r,o[u],o[u])(new r.StatementLiteral(s[u]));break;case 31:this.$=r.addDataToNode(r,o[u],o[u])(new r.Op(s[u],new r.Value(new r.Literal(\"\"))));break;case 32:case 346:case 347:case 348:case 351:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(s[u-1],s[u]));break;case 33:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Op(s[u-2].concat(s[u-1]),s[u]));break;case 34:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Block);break;case 35:case 83:case 137:this.$=r.addDataToNode(r,o[u-2],o[u])(s[u-1]);break;case 36:this.$=r.addDataToNode(r,o[u],o[u])(new r.IdentifierLiteral(s[u]));break;case 37:this.$=r.addDataToNode(r,o[u],o[u])(new r.CSXTag(s[u]));break;case 38:this.$=r.addDataToNode(r,o[u],o[u])(new r.PropertyName(s[u]));break;case 39:this.$=r.addDataToNode(r,o[u],o[u])(new r.NumberLiteral(s[u]));break;case 41:this.$=r.addDataToNode(r,o[u],o[u])(new r.StringLiteral(s[u]));break;case 42:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.StringWithInterpolations(s[u-1]));break;case 43:this.$=r.addDataToNode(r,o[u],o[u])(new r.RegexLiteral(s[u]));break;case 44:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.RegexWithInterpolations(s[u-1].args));break;case 46:this.$=r.addDataToNode(r,o[u],o[u])(new r.PassthroughLiteral(s[u]));break;case 48:this.$=r.addDataToNode(r,o[u],o[u])(new r.UndefinedLiteral(s[u]));break;case 49:this.$=r.addDataToNode(r,o[u],o[u])(new r.NullLiteral(s[u]));break;case 50:this.$=r.addDataToNode(r,o[u],o[u])(new r.BooleanLiteral(s[u]));break;case 51:this.$=r.addDataToNode(r,o[u],o[u])(new r.InfinityLiteral(s[u]));break;case 52:this.$=r.addDataToNode(r,o[u],o[u])(new r.NaNLiteral(s[u]));break;case 53:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Assign(s[u-2],s[u]));break;case 54:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Assign(s[u-3],s[u]));break;case 55:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Assign(s[u-4],s[u-1]));break;case 56:case 115:case 120:case 121:case 123:case 124:case 125:case 126:case 128:case 282:case 283:this.$=r.addDataToNode(r,o[u],o[u])(new r.Value(s[u]));break;case 58:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Assign(r.addDataToNode(r,o[u-2])(new r.Value(s[u-2])),s[u],\"object\",{operatorToken:r.addDataToNode(r,o[u-1])(new r.Literal(s[u-1]))}));break;case 59:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Assign(r.addDataToNode(r,o[u-4])(new r.Value(s[u-4])),s[u-1],\"object\",{operatorToken:r.addDataToNode(r,o[u-3])(new r.Literal(s[u-3]))}));break;case 60:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Assign(r.addDataToNode(r,o[u-2])(new r.Value(s[u-2])),s[u],null,{operatorToken:r.addDataToNode(r,o[u-1])(new r.Literal(s[u-1]))}));break;case 61:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Assign(r.addDataToNode(r,o[u-4])(new r.Value(s[u-4])),s[u-1],null,{operatorToken:r.addDataToNode(r,o[u-3])(new r.Literal(s[u-3]))}));break;case 65:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Value(new r.ComputedPropertyName(s[u-1])));break;case 68:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Splat(new r.Value(s[u-1])));break;case 69:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Splat(new r.Value(s[u])));break;case 70:case 113:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Splat(s[u-1]));break;case 71:case 114:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Splat(s[u]));break;case 77:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.SuperCall(r.addDataToNode(r,o[u-1])(new r.Super),s[u],!1,s[u-1]));break;case 78:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Call(new r.Value(s[u-1]),s[u]));break;case 79:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Call(s[u-1],s[u]));break;case 80:case 81:this.$=r.addDataToNode(r,o[u-1],o[u])((new r.Value(s[u-1])).add(s[u]));break;case 82:case 131:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Access(s[u]));break;case 84:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Return(s[u]));break;case 85:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Return(new r.Value(s[u-1])));break;case 86:this.$=r.addDataToNode(r,o[u],o[u])(new r.Return);break;case 87:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.YieldReturn(s[u]));break;case 88:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.YieldReturn);break;case 89:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.AwaitReturn(s[u]));break;case 90:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.AwaitReturn);break;case 91:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Code(s[u-3],s[u],s[u-1],r.addDataToNode(r,o[u-4])(new r.Literal(s[u-4]))));break;case 92:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Code([],s[u],s[u-1]));break;case 93:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Code(s[u-3],r.addDataToNode(r,o[u])(r.Block.wrap([s[u]])),s[u-1],r.addDataToNode(r,o[u-4])(new r.Literal(s[u-4]))));break;case 94:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Code([],r.addDataToNode(r,o[u])(r.Block.wrap([s[u]])),s[u-1]));break;case 95:case 96:this.$=r.addDataToNode(r,o[u],o[u])(new r.FuncGlyph(s[u]));break;case 99:case 142:case 232:this.$=r.addDataToNode(r,o[u],o[u])([]);break;case 100:case 143:case 162:case 183:case 216:case 230:case 234:case 284:this.$=r.addDataToNode(r,o[u],o[u])([s[u]]);break;case 101:case 144:case 163:case 184:case 217:case 226:this.$=r.addDataToNode(r,o[u-2],o[u])(s[u-2].concat(s[u]));break;case 102:case 145:case 164:case 185:case 218:this.$=r.addDataToNode(r,o[u-3],o[u])(s[u-3].concat(s[u]));break;case 103:case 146:case 166:case 187:case 220:this.$=r.addDataToNode(r,o[u-5],o[u])(s[u-5].concat(s[u-2]));break;case 104:this.$=r.addDataToNode(r,o[u],o[u])(new r.Param(s[u]));break;case 105:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Param(s[u-1],null,!0));break;case 106:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Param(s[u],null,!0));break;case 107:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Param(s[u-2],s[u]));break;case 108:case 224:this.$=r.addDataToNode(r,o[u],o[u])(new r.Expansion);break;case 116:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u-1].add(s[u]));break;case 117:this.$=r.addDataToNode(r,o[u-1],o[u])((new r.Value(s[u-1])).add(s[u]));break;case 129:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Super(r.addDataToNode(r,o[u])(new r.Access(s[u])),[],!1,s[u-2]));break;case 130:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Super(r.addDataToNode(r,o[u-1])(new r.Index(s[u-1])),[],!1,s[u-3]));break;case 132:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Access(s[u],\"soak\"));break;case 133:this.$=r.addDataToNode(r,o[u-1],o[u])([r.addDataToNode(r,o[u-1])(new r.Access(new r.PropertyName(\"prototype\"))),r.addDataToNode(r,o[u])(new r.Access(s[u]))]);break;case 134:this.$=r.addDataToNode(r,o[u-1],o[u])([r.addDataToNode(r,o[u-1])(new r.Access(new r.PropertyName(\"prototype\"),\"soak\")),r.addDataToNode(r,o[u])(new r.Access(s[u]))]);break;case 135:this.$=r.addDataToNode(r,o[u],o[u])(new r.Access(new r.PropertyName(\"prototype\")));break;case 138:this.$=r.addDataToNode(r,o[u-1],o[u])(r.extend(s[u],{soak:!0}));break;case 139:this.$=r.addDataToNode(r,o[u],o[u])(new r.Index(s[u]));break;case 140:this.$=r.addDataToNode(r,o[u],o[u])(new r.Slice(s[u]));break;case 141:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Obj(s[u-2],s[u-3].generated));break;case 147:this.$=r.addDataToNode(r,o[u],o[u])(new r.Class);break;case 148:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Class(null,null,s[u]));break;case 149:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Class(null,s[u]));break;case 150:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Class(null,s[u-1],s[u]));break;case 151:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Class(s[u]));break;case 152:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Class(s[u-1],null,s[u]));break;case 153:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Class(s[u-2],s[u]));break;case 154:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Class(s[u-3],s[u-1],s[u]));break;case 155:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.ImportDeclaration(null,s[u]));break;case 156:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.ImportDeclaration(new r.ImportClause(s[u-2],null),s[u]));break;case 157:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.ImportDeclaration(new r.ImportClause(null,s[u-2]),s[u]));break;case 158:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.ImportDeclaration(new r.ImportClause(null,new r.ImportSpecifierList([])),s[u]));break;case 159:this.$=r.addDataToNode(r,o[u-6],o[u])(new r.ImportDeclaration(new r.ImportClause(null,new r.ImportSpecifierList(s[u-4])),s[u]));break;case 160:this.$=r.addDataToNode(r,o[u-5],o[u])(new r.ImportDeclaration(new r.ImportClause(s[u-4],s[u-2]),s[u]));break;case 161:this.$=r.addDataToNode(r,o[u-8],o[u])(new r.ImportDeclaration(new r.ImportClause(s[u-7],new r.ImportSpecifierList(s[u-4])),s[u]));break;case 165:case 186:case 199:case 219:this.$=r.addDataToNode(r,o[u-3],o[u])(s[u-2]);break;case 167:this.$=r.addDataToNode(r,o[u],o[u])(new r.ImportSpecifier(s[u]));break;case 168:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ImportSpecifier(s[u-2],s[u]));break;case 169:this.$=r.addDataToNode(r,o[u],o[u])(new r.ImportSpecifier(new r.Literal(s[u])));break;case 170:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ImportSpecifier(new r.Literal(s[u-2]),s[u]));break;case 171:this.$=r.addDataToNode(r,o[u],o[u])(new r.ImportDefaultSpecifier(s[u]));break;case 172:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ImportNamespaceSpecifier(new r.Literal(s[u-2]),s[u]));break;case 173:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportNamedDeclaration(new r.ExportSpecifierList([])));break;case 174:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.ExportNamedDeclaration(new r.ExportSpecifierList(s[u-2])));break;case 175:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.ExportNamedDeclaration(s[u]));break;case 176:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.ExportNamedDeclaration(new r.Assign(s[u-2],s[u],null,{moduleDeclaration:\"export\"})));break;case 177:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.ExportNamedDeclaration(new r.Assign(s[u-3],s[u],null,{moduleDeclaration:\"export\"})));break;case 178:this.$=r.addDataToNode(r,o[u-5],o[u])(new r.ExportNamedDeclaration(new r.Assign(s[u-4],s[u-1],null,{moduleDeclaration:\"export\"})));break;case 179:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportDefaultDeclaration(s[u]));break;case 180:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.ExportDefaultDeclaration(new r.Value(s[u-1])));break;case 181:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.ExportAllDeclaration(new r.Literal(s[u-2]),s[u]));break;case 182:this.$=r.addDataToNode(r,o[u-6],o[u])(new r.ExportNamedDeclaration(new r.ExportSpecifierList(s[u-4]),s[u]));break;case 188:this.$=r.addDataToNode(r,o[u],o[u])(new r.ExportSpecifier(s[u]));break;case 189:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportSpecifier(s[u-2],s[u]));break;case 190:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportSpecifier(s[u-2],new r.Literal(s[u])));break;case 191:this.$=r.addDataToNode(r,o[u],o[u])(new r.ExportSpecifier(new r.Literal(s[u])));break;case 192:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportSpecifier(new r.Literal(s[u-2]),s[u]));break;case 193:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.TaggedTemplateCall(s[u-2],s[u],s[u-1]));break;case 194:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Call(s[u-2],s[u],s[u-1]));break;case 195:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.SuperCall(r.addDataToNode(r,o[u-2])(new r.Super),s[u],s[u-1],s[u-2]));break;case 196:this.$=r.addDataToNode(r,o[u],o[u])(!1);break;case 197:this.$=r.addDataToNode(r,o[u],o[u])(!0);break;case 198:this.$=r.addDataToNode(r,o[u-1],o[u])([]);break;case 200:case 201:this.$=r.addDataToNode(r,o[u],o[u])(new r.Value(new r.ThisLiteral(s[u])));break;case 202:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Value(r.addDataToNode(r,o[u-1])(new r.ThisLiteral(s[u-1])),[r.addDataToNode(r,o[u])(new r.Access(s[u]))],\"this\"));break;case 203:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Arr([]));break;case 204:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Arr(s[u-1]));break;case 205:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Arr([].concat(s[u-2],s[u-1])));break;case 206:this.$=r.addDataToNode(r,o[u],o[u])(\"inclusive\");break;case 207:this.$=r.addDataToNode(r,o[u],o[u])(\"exclusive\");break;case 208:case 209:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Range(s[u-3],s[u-1],s[u-2]));break;case 210:case 212:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Range(s[u-2],s[u],s[u-1]));break;case 211:case 213:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Range(s[u-1],null,s[u]));break;case 214:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Range(null,s[u],s[u-1]));break;case 215:this.$=r.addDataToNode(r,o[u],o[u])(new r.Range(null,null,s[u]));break;case 227:this.$=r.addDataToNode(r,o[u-3],o[u])(s[u-3].concat(s[u-2],s[u]));break;case 228:this.$=r.addDataToNode(r,o[u-3],o[u])(s[u-2].concat(s[u-1]));break;case 229:this.$=r.addDataToNode(r,o[u-5],o[u])(s[u-5].concat(s[u-4],s[u-2],s[u-1]));break;case 231:case 235:case 331:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u-1].concat(s[u]));break;case 233:this.$=r.addDataToNode(r,o[u-1],o[u])([].concat(s[u]));break;case 236:this.$=r.addDataToNode(r,o[u],o[u])(new r.Elision);break;case 239:case 240:this.$=r.addDataToNode(r,o[u-2],o[u])([].concat(s[u-2],s[u]));break;case 241:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Try(s[u]));break;case 242:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Try(s[u-1],s[u][0],s[u][1]));break;case 243:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Try(s[u-2],null,null,s[u]));break;case 244:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Try(s[u-3],s[u-2][0],s[u-2][1],s[u]));break;case 245:this.$=r.addDataToNode(r,o[u-2],o[u])([s[u-1],s[u]]);break;case 246:this.$=r.addDataToNode(r,o[u-2],o[u])([r.addDataToNode(r,o[u-1])(new r.Value(s[u-1])),s[u]]);break;case 247:this.$=r.addDataToNode(r,o[u-1],o[u])([null,s[u]]);break;case 248:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Throw(s[u]));break;case 249:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Throw(new r.Value(s[u-1])));break;case 250:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Parens(s[u-1]));break;case 251:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Parens(s[u-2]));break;case 252:case 256:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.While(s[u]));break;case 253:case 257:case 258:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.While(s[u-2],{guard:s[u]}));break;case 254:case 259:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.While(s[u],{invert:!0}));break;case 255:case 260:case 261:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.While(s[u-2],{invert:!0,guard:s[u]}));break;case 262:case 263:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u-1].addBody(s[u]));break;case 264:case 265:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u].addBody(r.addDataToNode(r,o[u-1])(r.Block.wrap([s[u-1]]))));break;case 266:this.$=r.addDataToNode(r,o[u],o[u])(s[u]);break;case 267:this.$=r.addDataToNode(r,o[u-1],o[u])((new r.While(r.addDataToNode(r,o[u-1])(new r.BooleanLiteral(\"true\")))).addBody(s[u]));break;case 268:this.$=r.addDataToNode(r,o[u-1],o[u])((new r.While(r.addDataToNode(r,o[u-1])(new r.BooleanLiteral(\"true\")))).addBody(r.addDataToNode(r,o[u])(r.Block.wrap([s[u]]))));break;case 269:case 270:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.For(s[u-1],s[u]));break;case 271:case 272:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.For(s[u],s[u-1]));break;case 273:this.$=r.addDataToNode(r,o[u-1],o[u])({source:r.addDataToNode(r,o[u])(new r.Value(s[u]))});break;case 274:case 276:this.$=r.addDataToNode(r,o[u-3],o[u])({source:r.addDataToNode(r,o[u-2])(new r.Value(s[u-2])),step:s[u]});break;case 275:case 277:this.$=r.addDataToNode(r,o[u-1],o[u])(function(){return s[u].own=s[u-1].own,s[u].ownTag=s[u-1].ownTag,s[u].name=s[u-1][0],s[u].index=s[u-1][1],s[u]}());break;case 278:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u]);break;case 279:this.$=r.addDataToNode(r,o[u-2],o[u])(function(){return s[u].own=!0,s[u].ownTag=r.addDataToNode(r,o[u-1])(new r.Literal(s[u-1])),s[u]}());break;case 285:this.$=r.addDataToNode(r,o[u-2],o[u])([s[u-2],s[u]]);break;case 286:case 305:this.$=r.addDataToNode(r,o[u-1],o[u])({source:s[u]});break;case 287:case 306:this.$=r.addDataToNode(r,o[u-1],o[u])({source:s[u],object:!0});break;case 288:case 289:case 307:case 308:this.$=r.addDataToNode(r,o[u-3],o[u])({source:s[u-2],guard:s[u]});break;case 290:case 291:case 309:case 310:this.$=r.addDataToNode(r,o[u-3],o[u])({source:s[u-2],guard:s[u],object:!0});break;case 292:case 293:case 311:case 312:this.$=r.addDataToNode(r,o[u-3],o[u])({source:s[u-2],step:s[u]});break;case 294:case 295:case 296:case 297:case 313:case 314:case 315:case 316:this.$=r.addDataToNode(r,o[u-5],o[u])({source:s[u-4],guard:s[u-2],step:s[u]});break;case 298:case 299:case 300:case 301:case 317:case 318:case 319:case 320:this.$=r.addDataToNode(r,o[u-5],o[u])({source:s[u-4],step:s[u-2],guard:s[u]});break;case 302:case 321:this.$=r.addDataToNode(r,o[u-1],o[u])({source:s[u],from:!0});break;case 303:case 304:case 322:case 323:this.$=r.addDataToNode(r,o[u-3],o[u])({source:s[u-2],guard:s[u],from:!0});break;case 324:case 325:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Switch(s[u-3],s[u-1]));break;case 326:case 327:this.$=r.addDataToNode(r,o[u-6],o[u])(new r.Switch(s[u-5],s[u-3],s[u-1]));break;case 328:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Switch(null,s[u-1]));break;case 329:this.$=r.addDataToNode(r,o[u-5],o[u])(new r.Switch(null,s[u-3],s[u-1]));break;case 332:this.$=r.addDataToNode(r,o[u-2],o[u])([[s[u-1],s[u]]]);break;case 333:this.$=r.addDataToNode(r,o[u-3],o[u])([[s[u-2],s[u-1]]]);break;case 334:case 340:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.If(s[u-1],s[u],{type:s[u-2]}));break;case 335:case 341:this.$=r.addDataToNode(r,o[u-4],o[u])(s[u-4].addElse(r.addDataToNode(r,o[u-2],o[u])(new r.If(s[u-1],s[u],{type:s[u-2]}))));break;case 337:case 343:this.$=r.addDataToNode(r,o[u-2],o[u])(s[u-2].addElse(s[u]));break;case 338:case 339:case 344:case 345:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.If(s[u],r.addDataToNode(r,o[u-2])(r.Block.wrap([s[u-2]])),{type:s[u-1],statement:!0}));break;case 349:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"-\",s[u]));break;case 350:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"+\",s[u]));break;case 352:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"--\",s[u]));break;case 353:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"++\",s[u]));break;case 354:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"--\",s[u-1],null,!0));break;case 355:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"++\",s[u-1],null,!0));break;case 356:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Existence(s[u-1]));break;case 357:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Op(\"+\",s[u-2],s[u]));break;case 358:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Op(\"-\",s[u-2],s[u]));break;case 359:case 360:case 361:case 362:case 363:case 364:case 365:case 366:case 367:case 368:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Op(s[u-1],s[u-2],s[u]));break;case 369:this.$=r.addDataToNode(r,o[u-2],o[u])(function(){return\"!\"===s[u-1].charAt(0)?(new r.Op(s[u-1].slice(1),s[u-2],s[u])).invert():new r.Op(s[u-1],s[u-2],s[u])}());break;case 370:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Assign(s[u-2],s[u],s[u-1]));break;case 371:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Assign(s[u-4],s[u-1],s[u-3]));break;case 372:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Assign(s[u-3],s[u],s[u-2]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{1:[3]},{1:[2,2],6:X},t(V,[2,3]),t($,[2,6],{151:111,154:112,158:116,148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,7]),t($,[2,8],{158:116,151:118,154:119,148:J,150:K,156:Q,174:ht}),t($,[2,9]),t(pt,[2,16],{124:120,99:121,104:127,45:dt,46:dt,126:dt,80:vt,81:mt,101:gt,102:yt,103:bt,105:wt,125:Et}),t(pt,[2,17],{104:127,99:130,80:vt,81:mt,101:gt,102:yt,103:bt,105:wt}),t(pt,[2,18]),t(pt,[2,19]),t(pt,[2,20]),t(pt,[2,21]),t(pt,[2,22]),t(pt,[2,23]),t(pt,[2,24]),t(pt,[2,25]),t(pt,[2,26]),t(pt,[2,27]),t($,[2,28]),t($,[2,29]),t($,[2,30]),t(St,[2,12]),t(St,[2,13]),t(St,[2,14]),t(St,[2,15]),t($,[2,10]),t($,[2,11]),t(xt,Tt,{61:[1,131]}),t(xt,[2,123]),t(xt,[2,124]),t(xt,[2,125]),t(xt,Nt),t(xt,[2,127]),t(xt,[2,128]),t(Ct,kt,{87:132,94:133,95:134,37:136,67:137,96:138,73:139,38:i,39:s,68:Lt,70:At,107:T,130:Ot}),{5:143,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,34:142,35:Mt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:145,8:146,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:150,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:156,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:157,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:158,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:[1,159],85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{17:161,18:162,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:163,67:79,68:g,73:62,74:31,75:35,76:34,77:y,86:Pt,89:152,90:S,91:x,96:61,98:160,100:32,107:T,129:L,130:A,145:_},{17:161,18:162,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:163,67:79,68:g,73:62,74:31,75:35,76:34,77:y,86:Pt,89:152,90:S,91:x,96:61,98:164,100:32,107:T,129:L,130:A,145:_},t(jt,Ft,{180:[1,165],181:[1,166],194:[1,167]}),t(pt,[2,336],{169:[1,168]}),{34:169,35:Mt},{34:170,35:Mt},{34:171,35:Mt},t(pt,[2,266]),{34:172,35:Mt},{34:173,35:Mt},{7:174,8:175,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:[1,176],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(It,[2,147],{53:30,74:31,100:32,51:33,76:34,75:35,96:61,73:62,42:63,48:65,37:78,67:79,44:88,89:152,17:161,18:162,60:163,34:177,98:179,35:Mt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,86:Pt,90:S,91:x,107:T,111:[1,178],129:L,130:A,145:_}),{7:180,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,181],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t([1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],qt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:n,32:_t,33:Rt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:[1,184],85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),t($,[2,342],{169:[1,185]}),t([1,6,36,47,69,70,93,127,135,146,148,149,150,156,157,174],Ut,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:186,14:n,32:_t,35:zt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),{37:192,38:i,39:s,44:188,45:u,46:a,107:[1,191],113:189,114:190,119:Wt},{26:195,37:196,38:i,39:s,107:[1,194],110:N,118:[1,197],122:[1,198]},t(jt,[2,120]),t(jt,[2,121]),t(xt,[2,45]),t(xt,[2,46]),t(xt,[2,47]),t(xt,[2,48]),t(xt,[2,49]),t(xt,[2,50]),t(xt,[2,51]),t(xt,[2,52]),{4:199,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,35:[1,200],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:201,8:202,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:Xt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,69:Vt,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:204,132:205,136:210,137:207,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{80:Kt,81:Qt,124:213,125:Et,126:dt},t(xt,[2,200]),t(xt,[2,201],{40:216,41:Gt}),t(Yt,[2,95]),t(Yt,[2,96]),t(Zt,[2,115]),t(Zt,[2,118]),{7:218,8:219,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:220,8:221,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:222,8:223,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:225,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,34:224,35:Mt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{37:230,38:i,39:s,67:231,68:g,73:233,96:232,100:226,107:T,130:Ot,161:227,162:en,163:229},{159:234,160:235,164:[1,236],165:[1,237],166:[1,238]},t([6,35,93,109],tn,{44:88,108:239,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,38:i,39:s,41:Gt,43:o,45:u,46:a,68:nn,70:rn,77:sn,107:T,129:L,130:A,145:_}),t(on,[2,39]),t(on,[2,40]),t(xt,[2,43]),{17:161,18:162,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:257,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:163,67:79,68:g,73:62,74:31,75:35,76:34,77:y,86:Pt,89:152,90:S,91:x,96:61,98:258,100:32,107:T,129:L,130:A,145:_},t(un,[2,36]),t(un,[2,37]),t(an,[2,41]),{4:259,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(V,[2,5],{7:4,8:5,9:6,10:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,11:27,12:28,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,5:260,14:n,32:r,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:w,86:E,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:F,176:I,177:q,178:R,179:U,180:z,181:W}),t(pt,[2,356]),{7:261,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:262,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:263,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:264,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:265,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:266,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:267,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:268,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:269,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:270,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:271,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:272,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:273,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:274,8:275,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(pt,[2,265]),t(pt,[2,270]),{7:220,8:276,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:222,8:277,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{37:230,38:i,39:s,67:231,68:g,73:233,96:232,100:278,107:T,130:Ot,161:227,162:en,163:229},{159:234,164:[1,279],165:[1,280],166:[1,281]},{7:282,8:283,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(pt,[2,264]),t(pt,[2,269]),{44:284,45:u,46:a,78:285,126:fn},t(Zt,[2,116]),t(ln,[2,197]),{40:287,41:Gt},{40:288,41:Gt},t(Zt,[2,135],{40:289,41:Gt}),{40:290,41:Gt},t(Zt,[2,136]),{7:292,8:294,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:cn,73:62,74:31,75:35,76:34,77:y,82:291,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,106:293,107:T,110:N,112:C,120:k,129:L,130:A,134:295,135:hn,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{81:mt,104:298,105:wt},t(Zt,[2,117]),{6:[1,300],7:299,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,301],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(pn,dn,{92:304,88:[1,302],93:vn}),t(mn,[2,100]),t(mn,[2,104],{61:[1,306],70:[1,305]}),t(mn,[2,108],{37:136,67:137,96:138,73:139,95:307,38:i,39:s,68:Lt,107:T,130:Ot}),t(gn,[2,109]),t(gn,[2,110]),t(gn,[2,111]),t(gn,[2,112]),{40:216,41:Gt},{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:Xt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,69:Vt,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:204,132:205,136:210,137:207,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(yn,[2,92]),t($,[2,94]),{4:311,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,36:[1,310],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(bn,wn,{151:111,154:112,158:116,182:et}),t($,[2,346]),{7:158,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{148:J,150:K,151:118,154:119,156:Q,158:116,174:ht},t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],qt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:n,32:_t,33:Rt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),t(En,[2,348],{151:111,154:112,158:116,182:et,184:nt}),t(Ct,kt,{94:133,95:134,37:136,67:137,96:138,73:139,87:313,38:i,39:s,68:Lt,70:At,107:T,130:Ot}),{34:142,35:Mt},{7:314,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{148:J,150:K,151:118,154:119,156:Q,158:116,174:[1,315]},{7:316,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(En,[2,349],{151:111,154:112,158:116,182:et,184:nt}),t(En,[2,350],{151:111,154:112,158:116,182:et,184:nt}),t(bn,[2,351],{151:111,154:112,158:116,182:et}),t($,[2,90],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:317,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:Ut,150:Ut,156:Ut,174:Ut,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),t(pt,[2,352],{45:Ft,46:Ft,80:Ft,81:Ft,101:Ft,102:Ft,103:Ft,105:Ft,125:Ft,126:Ft}),t(ln,dt,{124:120,99:121,104:127,80:vt,81:mt,101:gt,102:yt,103:bt,105:wt,125:Et}),{80:vt,81:mt,99:130,101:gt,102:yt,103:bt,104:127,105:wt},t(Sn,Tt),t(pt,[2,353],{45:Ft,46:Ft,80:Ft,81:Ft,101:Ft,102:Ft,103:Ft,105:Ft,125:Ft,126:Ft}),t(pt,[2,354]),t(pt,[2,355]),{6:[1,320],7:318,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,319],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{34:321,35:Mt,173:[1,322]},t(pt,[2,241],{141:323,142:[1,324],143:[1,325]}),t(pt,[2,262]),t(pt,[2,263]),t(pt,[2,271]),t(pt,[2,272]),{35:[1,326],148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[1,327]},{168:328,170:329,171:xn},t(pt,[2,148]),{7:331,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(It,[2,151],{34:332,35:Mt,45:Ft,46:Ft,80:Ft,81:Ft,101:Ft,102:Ft,103:Ft,105:Ft,125:Ft,126:Ft,111:[1,333]}),t(Tn,[2,248],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{73:334,107:T},t(Tn,[2,32],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:335,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t([1,6,36,47,69,70,93,127,135,146,149,157],[2,88],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:336,14:n,32:_t,35:zt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:Ut,150:Ut,156:Ut,174:Ut,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),{34:337,35:Mt,173:[1,338]},t(St,Nn,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{73:339,107:T},t(St,[2,155]),{33:[1,340],93:[1,341]},{33:[1,342]},{35:Cn,37:347,38:i,39:s,109:[1,343],115:344,116:345,118:kn},t([33,93],[2,171]),{117:[1,349]},{35:Ln,37:354,38:i,39:s,109:[1,350],118:An,121:351,123:352},t(St,[2,175]),{61:[1,356]},{7:357,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,358],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{33:[1,359]},{6:X,146:[1,360]},{4:361,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(On,Mn,{151:111,154:112,158:116,134:362,70:[1,363],135:hn,148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(On,_n,{134:364,70:cn,135:hn}),t(Dn,[2,203]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,69:[1,365],70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,136:367,138:366,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t([6,35,69],dn,{133:368,92:370,93:Pn}),t(Hn,[2,234]),t(Bn,[2,225]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:Xt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:372,132:371,136:210,137:207,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Hn,[2,236]),t(Bn,[2,230]),t(jn,[2,223]),t(jn,[2,224],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:373,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),{78:374,126:fn},{40:375,41:Gt},{7:376,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Fn,[2,202]),t(Fn,[2,38]),{34:377,35:Mt,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{34:378,35:Mt},t(In,[2,256],{151:111,154:112,158:116,148:J,149:[1,379],150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:[2,252],149:[1,380]},t(In,[2,259],{151:111,154:112,158:116,148:J,149:[1,381],150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:[2,254],149:[1,382]},t(pt,[2,267]),t(qn,[2,268],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:Rn,157:[1,383]},t(Un,[2,278]),{37:230,38:i,39:s,67:231,68:Lt,73:233,96:232,107:T,130:Ot,161:384,163:229},t(Un,[2,284],{93:[1,385]}),t(zn,[2,280]),t(zn,[2,281]),t(zn,[2,282]),t(zn,[2,283]),t(pt,[2,275]),{35:[2,277]},{7:386,8:387,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:388,8:389,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:390,8:391,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Wn,dn,{92:392,93:Xn}),t(Vn,[2,143]),t(Vn,[2,56],{65:[1,394]}),t(Vn,[2,57]),t($n,[2,66],{78:397,79:398,61:[1,395],70:[1,396],80:Jn,81:Kn,126:fn}),t($n,[2,67]),{37:247,38:i,39:s,40:248,41:Gt,66:401,67:249,68:nn,71:402,72:251,73:252,74:253,75:254,76:255,77:sn,107:T,129:L,130:A,145:_},{70:[1,403],78:404,79:405,80:Jn,81:Kn,126:fn},t(Qn,[2,62]),t(Qn,[2,63]),t(Qn,[2,64]),{7:406,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Gn,[2,72]),t(Gn,[2,73]),t(Gn,[2,74]),t(Gn,[2,75]),t(Gn,[2,76]),{78:407,80:Kt,81:Qt,126:fn},t(Sn,Nt,{52:[1,408]}),t(Sn,Ft),{6:X,47:[1,409]},t(V,[2,4]),t(Yn,[2,357],{151:111,154:112,158:116,182:et,183:tt,184:nt}),t(Yn,[2,358],{151:111,154:112,158:116,182:et,183:tt,184:nt}),t(En,[2,359],{151:111,154:112,158:116,182:et,184:nt}),t(En,[2,360],{151:111,154:112,158:116,182:et,184:nt}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,185,186,187,188,189,190,191,192,193],[2,361],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192],[2,362],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,187,188,189,190,191,192],[2,363],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,188,189,190,191,192],[2,364],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,189,190,191,192],[2,365],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,190,191,192],[2,366],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,191,192],[2,367],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,192],[2,368],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192,193],[2,369],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt}),t(qn,Zn,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,345]),{149:[1,410]},{149:[1,411]},t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Rn,{157:[1,412]}),{7:413,8:414,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:415,8:416,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:417,8:418,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(qn,er,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,344]),t(tr,[2,193]),t(tr,[2,194]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:nr,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,127:[1,419],128:420,129:L,130:A,136:421,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Zt,[2,131]),t(Zt,[2,132]),t(Zt,[2,133]),t(Zt,[2,134]),{83:[1,423]},{70:cn,83:[2,139],134:424,135:hn,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{83:[2,140]},{70:cn,134:425,135:hn},{7:426,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,83:[2,215],84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(rr,[2,206]),t(rr,ir),t(Zt,[2,138]),t(Tn,[2,53],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:427,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:428,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{89:429,90:S,91:x},t(sr,or,{95:134,37:136,67:137,96:138,73:139,94:430,38:i,39:s,68:Lt,70:At,107:T,130:Ot}),{6:ur,35:ar},t(mn,[2,105]),{7:433,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(mn,[2,106]),t(jn,Mn,{151:111,154:112,158:116,70:[1,434],148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(jn,_n),t(fr,[2,34]),{6:X,36:[1,435]},{7:436,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(pn,dn,{92:304,88:[1,437],93:vn}),t(bn,wn,{151:111,154:112,158:116,182:et}),{7:438,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{34:377,35:Mt,148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t($,[2,89],{151:111,154:112,158:116,148:Nn,150:Nn,156:Nn,174:Nn,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,[2,370],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:439,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:440,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(pt,[2,337]),{7:441,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(pt,[2,242],{142:[1,442]}),{34:443,35:Mt},{34:446,35:Mt,37:444,38:i,39:s,73:445,107:T},{168:447,170:329,171:xn},{168:448,170:329,171:xn},{36:[1,449],169:[1,450],170:451,171:xn},t(cr,[2,330]),{7:453,8:454,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,139:452,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(hr,[2,149],{151:111,154:112,158:116,34:455,35:Mt,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(pt,[2,152]),{7:456,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{36:[1,457]},t(Tn,[2,33],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,87],{151:111,154:112,158:116,148:Nn,150:Nn,156:Nn,174:Nn,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,343]),{7:459,8:458,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{36:[1,460]},{44:461,45:u,46:a},{107:[1,463],114:462,119:Wt},{44:464,45:u,46:a},{33:[1,465]},t(Wn,dn,{92:466,93:pr}),t(Vn,[2,162]),{35:Cn,37:347,38:i,39:s,115:468,116:345,118:kn},t(Vn,[2,167],{117:[1,469]}),t(Vn,[2,169],{117:[1,470]}),{37:471,38:i,39:s},t(St,[2,173]),t(Wn,dn,{92:472,93:dr}),t(Vn,[2,183]),{35:Ln,37:354,38:i,39:s,118:An,121:474,123:352},t(Vn,[2,188],{117:[1,475]}),t(Vn,[2,191],{117:[1,476]}),{6:[1,478],7:477,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,479],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(vr,[2,179],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{73:480,107:T},{44:481,45:u,46:a},t(xt,[2,250]),{6:X,36:[1,482]},{7:483,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t([14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ir,{6:mr,35:mr,69:mr,93:mr}),{7:484,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Dn,[2,204]),t(Hn,[2,235]),t(Bn,[2,231]),{6:gr,35:yr,69:[1,485]},t(br,or,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,138:206,136:210,97:211,7:308,8:309,137:488,131:489,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,70:$t,77:y,84:b,85:Dt,86:E,90:S,91:x,93:Jt,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:F,176:I,177:q,178:R,179:U,180:z,181:W}),t(br,[2,232]),t(sr,dn,{92:370,133:490,93:Pn}),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,136:367,138:366,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(jn,[2,114],{151:111,154:112,158:116,148:J,150:K,156:Q,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(tr,[2,195]),t(xt,[2,129]),{83:[1,491],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(wr,[2,334]),t(Er,[2,340]),{7:492,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:493,8:494,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:495,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:496,8:497,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:498,8:499,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Un,[2,279]),{37:230,38:i,39:s,67:231,68:Lt,73:233,96:232,107:T,130:Ot,163:500},{35:Sr,148:J,149:[1,501],150:K,151:111,154:112,156:Q,157:[1,502],158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,305],149:[1,503],157:[1,504]},{35:xr,148:J,149:[1,505],150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,306],149:[1,506]},{35:Tr,148:J,149:[1,507],150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,321],149:[1,508]},{6:Nr,35:Cr,109:[1,509]},t(kr,or,{44:88,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,62:512,38:i,39:s,41:Gt,43:o,45:u,46:a,68:nn,70:rn,77:sn,107:T,129:L,130:A,145:_}),{7:513,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,514],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:515,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,516],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Vn,[2,68]),t(Gn,[2,78]),t(Gn,[2,80]),{40:517,41:Gt},{7:292,8:294,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:cn,73:62,74:31,75:35,76:34,77:y,82:518,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,106:293,107:T,110:N,112:C,120:k,129:L,130:A,134:295,135:hn,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Vn,[2,69],{78:397,79:398,80:Jn,81:Kn,126:fn}),t(Vn,[2,71],{78:404,79:405,80:Jn,81:Kn,126:fn}),t(Vn,[2,70]),t(Gn,[2,79]),t(Gn,[2,81]),{69:[1,519],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Gn,[2,77]),t(xt,[2,44]),t(an,[2,42]),{7:520,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:521,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:522,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,174],Sr,{151:111,154:112,158:116,149:[1,523],157:[1,524],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,525],157:[1,526]},t(Lr,xr,{151:111,154:112,158:116,149:[1,527],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,528]},t(Lr,Tr,{151:111,154:112,158:116,149:[1,529],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,530]},t(tr,[2,198]),t([6,35,127],dn,{92:531,93:Ar}),t(Or,[2,216]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:nr,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,128:533,129:L,130:A,136:421,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Zt,[2,137]),{7:534,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,83:[2,211],84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:535,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,83:[2,213],84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{83:[2,214],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Tn,[2,54],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{36:[1,536],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{5:538,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,34:537,35:Mt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(mn,[2,101]),{37:136,38:i,39:s,67:137,68:Lt,70:At,73:139,94:539,95:134,96:138,107:T,130:Ot},t(Mr,kt,{94:133,95:134,37:136,67:137,96:138,73:139,87:540,38:i,39:s,68:Lt,70:At,107:T,130:Ot}),t(mn,[2,107],{151:111,154:112,158:116,148:J,150:K,156:Q,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(jn,mr),t(fr,[2,35]),t(qn,Zn,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{89:541,90:S,91:x},t(qn,er,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{36:[1,542],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Tn,[2,372],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{34:543,35:Mt,148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{34:544,35:Mt},t(pt,[2,243]),{34:545,35:Mt},{34:546,35:Mt},t(_r,[2,247]),{36:[1,547],169:[1,548],170:451,171:xn},{36:[1,549],169:[1,550],170:451,171:xn},t(pt,[2,328]),{34:551,35:Mt},t(cr,[2,331]),{34:552,35:Mt,93:[1,553]},t(Dr,[2,237],{151:111,154:112,158:116,148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Dr,[2,238]),t(pt,[2,150]),t(hr,[2,153],{151:111,154:112,158:116,34:554,35:Mt,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(pt,[2,249]),{34:555,35:Mt},{148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(St,[2,85]),t(St,[2,156]),{33:[1,556]},{35:Cn,37:347,38:i,39:s,115:557,116:345,118:kn},t(St,[2,157]),{44:558,45:u,46:a},{6:Pr,35:Hr,109:[1,559]},t(kr,or,{37:347,116:562,38:i,39:s,118:kn}),t(sr,dn,{92:563,93:pr}),{37:564,38:i,39:s},{37:565,38:i,39:s},{33:[2,172]},{6:Br,35:jr,109:[1,566]},t(kr,or,{37:354,123:569,38:i,39:s,118:An}),t(sr,dn,{92:570,93:dr}),{37:571,38:i,39:s,118:[1,572]},{37:573,38:i,39:s},t(vr,[2,176],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:574,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:575,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{36:[1,576]},t(St,[2,181]),{146:[1,577]},{69:[1,578],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{69:[1,579],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Dn,[2,205]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:372,136:210,137:580,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:Xt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:372,132:581,136:210,137:207,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Bn,[2,226]),t(br,[2,233],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,138:366,136:367,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,70:$t,77:y,84:b,85:Dt,86:E,90:S,91:x,93:Jt,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:F,176:I,177:q,178:R,179:U,180:z,181:W}),{6:gr,35:yr,36:[1,582]},t(xt,[2,130]),t(qn,[2,257],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:Fr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,253]},t(qn,[2,260],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:Ir,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,255]},{35:qr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,276]},t(Un,[2,285]),{7:583,8:584,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:585,8:586,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:587,8:588,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:589,8:590,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:591,8:592,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:593,8:594,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:595,8:596,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:597,8:598,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Dn,[2,141]),{37:247,38:i,39:s,40:248,41:Gt,42:244,43:o,44:88,45:u,46:a,62:599,63:241,64:242,66:243,67:249,68:nn,70:rn,71:246,72:251,73:252,74:253,75:254,76:255,77:sn,107:T,129:L,130:A,145:_},t(Mr,tn,{44:88,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,108:600,38:i,39:s,41:Gt,43:o,45:u,46:a,68:nn,70:rn,77:sn,107:T,129:L,130:A,145:_}),t(Vn,[2,144]),t(Vn,[2,58],{151:111,154:112,158:116,148:J,150:K,156:Q,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:601,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Vn,[2,60],{151:111,154:112,158:116,148:J,150:K,156:Q,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:602,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Gn,[2,82]),{83:[1,603]},t(Qn,[2,65]),t(qn,Fr,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(qn,Ir,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(qn,qr,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:604,8:605,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:606,8:607,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:608,8:609,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:610,8:611,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:612,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:613,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:614,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:615,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{6:Rr,35:Ur,127:[1,616]},t([6,35,36,127],or,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,136:619,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,70:$t,77:y,84:b,85:Dt,86:E,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:F,176:I,177:q,178:R,179:U,180:z,181:W}),t(sr,dn,{92:620,93:Ar}),{83:[2,210],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{83:[2,212],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(pt,[2,55]),t(yn,[2,91]),t($,[2,93]),t(mn,[2,102]),t(sr,dn,{92:621,93:vn}),{34:537,35:Mt},t(pt,[2,371]),t(wr,[2,335]),t(pt,[2,244]),t(_r,[2,245]),t(_r,[2,246]),t(pt,[2,324]),{34:622,35:Mt},t(pt,[2,325]),{34:623,35:Mt},{36:[1,624]},t(cr,[2,332],{6:[1,625]}),{7:626,8:627,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(pt,[2,154]),t(Er,[2,341]),{44:628,45:u,46:a},t(Wn,dn,{92:629,93:pr}),t(St,[2,158]),{33:[1,630]},{37:347,38:i,39:s,116:631,118:kn},{35:Cn,37:347,38:i,39:s,115:632,116:345,118:kn},t(Vn,[2,163]),{6:Pr,35:Hr,36:[1,633]},t(Vn,[2,168]),t(Vn,[2,170]),t(St,[2,174],{33:[1,634]}),{37:354,38:i,39:s,118:An,123:635},{35:Ln,37:354,38:i,39:s,118:An,121:636,123:352},t(Vn,[2,184]),{6:Br,35:jr,36:[1,637]},t(Vn,[2,189]),t(Vn,[2,190]),t(Vn,[2,192]),t(vr,[2,177],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{36:[1,638],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(St,[2,180]),t(xt,[2,251]),t(xt,[2,208]),t(xt,[2,209]),t(Bn,[2,227]),t(sr,dn,{92:370,133:639,93:Pn}),t(Bn,[2,228]),{35:zr,148:J,150:K,151:111,154:112,156:Q,157:[1,640],158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,307],157:[1,641]},{35:Wr,148:J,149:[1,642],150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,311],149:[1,643]},{35:Xr,148:J,150:K,151:111,154:112,156:Q,157:[1,644],158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,308],157:[1,645]},{35:Vr,148:J,149:[1,646],150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,312],149:[1,647]},{35:$r,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,309]},{35:Jr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,310]},{35:Kr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,322]},{35:Qr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,323]},t(Vn,[2,145]),t(sr,dn,{92:648,93:Xn}),{36:[1,649],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{36:[1,650],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Gn,[2,83]),t(Gr,zr,{151:111,154:112,158:116,157:[1,651],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{157:[1,652]},t(Lr,Wr,{151:111,154:112,158:116,149:[1,653],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,654]},t(Gr,Xr,{151:111,154:112,158:116,157:[1,655],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{157:[1,656]},t(Lr,Vr,{151:111,154:112,158:116,149:[1,657],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,658]},t(Tn,$r,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,Jr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,Kr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,Qr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(tr,[2,199]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,136:659,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:nr,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,128:660,129:L,130:A,136:421,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Or,[2,217]),{6:Rr,35:Ur,36:[1,661]},{6:ur,35:ar,36:[1,662]},{36:[1,663]},{36:[1,664]},t(pt,[2,329]),t(cr,[2,333]),t(Dr,[2,239],{151:111,154:112,158:116,148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Dr,[2,240]),t(St,[2,160]),{6:Pr,35:Hr,109:[1,665]},{44:666,45:u,46:a},t(Vn,[2,164]),t(sr,dn,{92:667,93:pr}),t(Vn,[2,165]),{44:668,45:u,46:a},t(Vn,[2,185]),t(sr,dn,{92:669,93:dr}),t(Vn,[2,186]),t(St,[2,178]),{6:gr,35:yr,36:[1,670]},{7:671,8:672,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:673,8:674,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:675,8:676,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:677,8:678,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:679,8:680,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:681,8:682,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:683,8:684,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:685,8:686,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{6:Nr,35:Cr,36:[1,687]},t(Vn,[2,59]),t(Vn,[2,61]),{7:688,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:689,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:690,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:691,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:692,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:693,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:694,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:695,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Or,[2,218]),t(sr,dn,{92:696,93:Ar}),t(Or,[2,219]),t(mn,[2,103]),t(pt,[2,326]),t(pt,[2,327]),{33:[1,697]},t(St,[2,159]),{6:Pr,35:Hr,36:[1,698]},t(St,[2,182]),{6:Br,35:jr,36:[1,699]},t(Bn,[2,229]),{35:Yr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,313]},{35:Zr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,315]},{35:ei,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,317]},{35:ti,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,319]},{35:ni,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,314]},{35:ri,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,316]},{35:ii,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,318]},{35:si,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,320]},t(Vn,[2,146]),t(Tn,Yr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,Zr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ei,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ti,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ni,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ri,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ii,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,si,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{6:Rr,35:Ur,36:[1,700]},{44:701,45:u,46:a},t(Vn,[2,166]),t(Vn,[2,187]),t(Or,[2,220]),t(St,[2,161])],defaultActions:{235:[2,277],293:[2,140],471:[2,172],494:[2,253],497:[2,255],499:[2,276],592:[2,309],594:[2,310],596:[2,322],598:[2,323],672:[2,313],674:[2,315],676:[2,317],678:[2,319],680:[2,314],682:[2,316],684:[2,318],686:[2,320]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],i=[],s=this.table,o=\"\",u=0,a=0,f=0,l=1,c=i.slice.call(arguments,1),h=Object.create(this.lexer),p={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(p.yy[d]=this.yy[d]);h.setInput(e,p.yy),p.yy.lexer=h,p.yy.parser=this,\"undefined\"==typeof h.yylloc&&(h.yylloc={});var v=h.yylloc;i.push(v);var m=h.options&&h.options.ranges;this.parseError=\"function\"==typeof p.yy.parseError?p.yy.parseError:Object.getPrototypeOf(this).parseError;var g=function(){var e;return e=h.lex()||l,\"number\"!=typeof e&&(e=t.symbols_[e]||e),e};for(var y={},b,w,E,S,x,T,N,C,k;;){if(E=n[n.length-1],this.defaultActions[E]?S=this.defaultActions[E]:((null===b||\"undefined\"==typeof b)&&(b=g()),S=s[E]&&s[E][b]),\"undefined\"==typeof S||!S.length||!S[0]){var L=\"\";for(T in k=[],s[E])this.terminals_[T]&&T>2&&k.push(\"'\"+this.terminals_[T]+\"'\");L=h.showPosition?\"Parse error on line \"+(u+1)+\":\\n\"+h.showPosition()+\"\\nExpecting \"+k.join(\", \")+\", got '\"+(this.terminals_[b]||b)+\"'\":\"Parse error on line \"+(u+1)+\": Unexpected \"+(b==l?\"end of input\":\"'\"+(this.terminals_[b]||b)+\"'\"),this.parseError(L,{text:h.match,token:this.terminals_[b]||b,line:h.yylineno,loc:v,expected:k})}if(S[0]instanceof Array&&1<S.length)throw new Error(\"Parse Error: multiple actions possible at state: \"+E+\", token: \"+b);switch(S[0]){case 1:n.push(b),r.push(h.yytext),i.push(h.yylloc),n.push(S[1]),b=null,w?(b=w,w=null):(a=h.yyleng,o=h.yytext,u=h.yylineno,v=h.yylloc,0<f&&f--);break;case 2:if(N=this.productions_[S[1]][1],y.$=r[r.length-N],y._$={first_line:i[i.length-(N||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(N||1)].first_column,last_column:i[i.length-1].last_column},m&&(y._$.range=[i[i.length-(N||1)].range[0],i[i.length-1].range[1]]),x=this.performAction.apply(y,[o,a,u,p.yy,S[1],r,i].concat(c)),\"undefined\"!=typeof x)return x;N&&(n=n.slice(0,2*-1*N),r=r.slice(0,-1*N),i=i.slice(0,-1*N)),n.push(this.productions_[S[1]][0]),r.push(y.$),i.push(y._$),C=s[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}};return e.prototype=oi,oi.Parser=e,new e}();return\"undefined\"!=typeof require&&\"undefined\"!=typeof e&&(e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(){},require.main===t&&e.main(process.argv.slice(1))),t.exports}(),require[\"./scope\"]=function(){var e={};return function(){var t=[].indexOf,n;e.Scope=n=function(){function e(t,n,r,i){_classCallCheck(this,e);var s,o;this.parent=t,this.expressions=n,this.method=r,this.referencedVars=i,this.variables=[{name:\"arguments\",type:\"arguments\"}],this.comments={},this.positions={},this.parent||(this.utilities={}),this.root=null==(s=null==(o=this.parent)?void 0:o.root)?this:s}return _createClass(e,[{key:\"add\",value:function(t,n,r){return this.shared&&!r?this.parent.add(t,n,r):Object.prototype.hasOwnProperty.call(this.positions,t)?this.variables[this.positions[t]].type=n:this.positions[t]=this.variables.push({name:t,type:n})-1}},{key:\"namedMethod\",value:function(){var t;return(null==(t=this.method)?void 0:t.name)||!this.parent?this.method:this.parent.namedMethod()}},{key:\"find\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:\"var\";return!!this.check(t)||(this.add(t,n),!1)}},{key:\"parameter\",value:function(t){return this.shared&&this.parent.check(t,!0)?void 0:this.add(t,\"param\")}},{key:\"check\",value:function(t){var n;return!!(this.type(t)||(null==(n=this.parent)?void 0:n.check(t)))}},{key:\"temporary\",value:function(t,n){var r=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i,s,o,u,a,f;return r?(f=t.charCodeAt(0),s=122,i=s-f,u=f+n%(i+1),o=_StringfromCharCode(u),a=_Mathfloor(n/(i+1)),\"\"+o+(a||\"\")):\"\"+t+(n||\"\")}},{key:\"type\",value:function(t){var n,r,i,s;for(i=this.variables,n=0,r=i.length;n<r;n++)if(s=i[n],s.name===t)return s.type;return null}},{key:\"freeVariable\",value:function(n){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i,s,o;for(i=0;o=this.temporary(n,i,r.single),!!(this.check(o)||0<=t.call(this.root.referencedVars,o));)i++;return(null==(s=r.reserve)||s)&&this.add(o,\"var\",!0),o}},{key:\"assign\",value:function(t,n){return this.add(t,{value:n,assigned:!0},!0),this.hasAssignments=!0}},{key:\"hasDeclarations\",value:function(){return!!this.declaredVariables().length}},{key:\"declaredVariables\",value:function(){var t;return function(){var e,n,r,i;for(r=this.variables,i=[],e=0,n=r.length;e<n;e++)t=r[e],\"var\"===t.type&&i.push(t.name);return i}.call(this).sort()}},{key:\"assignedVariables\",value:function(){var t,n,r,i,s;for(r=this.variables,i=[],t=0,n=r.length;t<n;t++)s=r[t],s.type.assigned&&i.push(s.name+\" = \"+s.type.value);return i}}]),e}()}.call(this),{exports:e}.exports}(),require[\"./nodes\"]=function(){var e={};return function(){var t=[].indexOf,n=[].splice,r=[].slice,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q,G,Y,Z,et,tt,nt,rt,it,st,ot,ut,at,ft,lt,ct,ht,pt,dt,vt,mt,gt,yt,bt,wt,Et,St,xt,Tt,Nt,Ct,kt,Lt,At,Ot,Mt,_t,Dt,Pt,Ht,Bt,jt,Ft,It,qt,Rt,Ut,zt,Wt,Xt,Vt,$t,Jt,Kt,Qt,Gt,Yt,Zt,en,tn,nn,rn,sn,on,un,an;Error.stackTraceLimit=Infinity;var fn=require(\"./scope\");gt=fn.Scope;var ln=require(\"./lexer\");Qt=ln.isUnassignable,z=ln.JS_FORBIDDEN;var cn=require(\"./helpers\");qt=cn.compact,Wt=cn.flatten,zt=cn.extend,Yt=cn.merge,Rt=cn.del,rn=cn.starts,Ut=cn.ends,nn=cn.some,Ft=cn.addDataToNode,It=cn.attachCommentsToNode,Gt=cn.locationDataToString,sn=cn.throwSyntaxError,e.extend=zt,e.addDataToNode=Ft,Bt=function(){return!0},nt=function(){return!1},kt=function(){return this},tt=function(){return this.negated=!this.negated,this},e.CodeFragment=v=function(){function e(t,n){_classCallCheck(this,e);var r;this.code=\"\"+n,this.type=(null==t||null==(r=t.constructor)?void 0:r.name)||\"unknown\",this.locationData=null==t?void 0:t.locationData,this.comments=null==t?void 0:t.comments}return _createClass(e,[{key:\"toString\",value:function t(){return\"\"+this.code+(this.locationData?\": \"+Gt(this.locationData):\"\")}}]),e}(),Xt=function(e){var t;return function(){var n,r,i;for(i=[],n=0,r=e.length;n<r;n++)t=e[n],i.push(t.code);return i}().join(\"\")},e.Base=a=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"compile\",value:function(t,n){return Xt(this.compileToFragments(t,n))}},{key:\"compileWithoutComments\",value:function(t,n){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:\"compile\",i,s;return this.comments&&(this.ignoreTheseCommentsTemporarily=this.comments,delete this.comments),s=this.unwrapAll(),s.comments&&(s.ignoreTheseCommentsTemporarily=s.comments,delete s.comments),i=this[r](t,n),this.ignoreTheseCommentsTemporarily&&(this.comments=this.ignoreTheseCommentsTemporarily,delete this.ignoreTheseCommentsTemporarily),s.ignoreTheseCommentsTemporarily&&(s.comments=s.ignoreTheseCommentsTemporarily,delete s.ignoreTheseCommentsTemporarily),i}},{key:\"compileNodeWithoutComments\",value:function(t,n){return this.compileWithoutComments(t,n,\"compileNode\")}},{key:\"compileToFragments\",value:function(t,n){var r,i;return t=zt({},t),n&&(t.level=n),i=this.unfoldSoak(t)||this,i.tab=t.indent,r=t.level!==K&&i.isStatement(t)?i.compileClosure(t):i.compileNode(t),this.compileCommentFragments(t,i,r),r}},{key:\"compileToFragmentsWithoutComments\",value:function(t,n){return this.compileWithoutComments(t,n,\"compileToFragments\")}},{key:\"compileClosure\",value:function(t){var n,r,s,o,u,a,l,c;switch((o=this.jumps())&&o.error(\"cannot use a pure statement in an expression\"),t.sharedScope=!0,s=new d([],f.wrap([this])),n=[],this.contains(function(e){return e instanceof Tt})?s.bound=!0:((r=this.contains(Jt))||this.contains(Kt))&&(n=[new At],r?(u=\"apply\",n.push(new _(\"arguments\"))):u=\"call\",s=new Pt(s,[new i(new ct(u))])),a=(new h(s,n)).compileNode(t),!1){case!(s.isGenerator||(null==(l=s.base)?void 0:l.isGenerator)):a.unshift(this.makeCode(\"(yield* \")),a.push(this.makeCode(\")\"));break;case!(s.isAsync||(null==(c=s.base)?void 0:c.isAsync)):a.unshift(this.makeCode(\"(await \")),a.push(this.makeCode(\")\"))}return a}},{key:\"compileCommentFragments\",value:function(n,r,i){var s,o,u,a,f,l,c,h;if(!r.comments)return i;for(h=function(e){var t;return e.unshift?un(i,e):(0!==i.length&&(t=i[i.length-1],e.newLine&&\"\"!==t.code&&!/\\n\\s*$/.test(t.code)&&(e.code=\"\\n\"+e.code)),i.push(e))},c=r.comments,f=0,l=c.length;f<l;f++)(u=c[f],0>t.call(this.compiledComments,u))&&(this.compiledComments.push(u),a=u.here?(new O(u)).compileNode(n):(new Q(u)).compileNode(n),a.isHereComment&&!a.newLine||r.includeCommentFragments()?h(a):(0===i.length&&i.push(this.makeCode(\"\")),a.unshift?(null==(s=i[0]).precedingComments&&(s.precedingComments=[]),i[0].precedingComments.push(a)):(null==(o=i[i.length-1]).followingComments&&(o.followingComments=[]),i[i.length-1].followingComments.push(a))));return i}},{key:\"cache\",value:function(t,n,r){var i,s,u;return i=null==r?this.shouldCache():r(this),i?(s=new _(t.scope.freeVariable(\"ref\")),u=new o(s,this),n?[u.compileToFragments(t,n),[this.makeCode(s.value)]]:[u,s]):(s=n?this.compileToFragments(t,n):this,[s,s])}},{key:\"hoist\",value:function(){var t,n,r;return this.hoisted=!0,r=new M(this),t=this.compileNode,n=this.compileToFragments,this.compileNode=function(e){return r.update(t,e)},this.compileToFragments=function(e){return r.update(n,e)},r}},{key:\"cacheToCodeFragments\",value:function(t){return[Xt(t[0]),Xt(t[1])]}},{key:\"makeReturn\",value:function(t){var n;return n=this.unwrapAll(),t?new h(new G(t+\".push\"),[n]):new vt(n)}},{key:\"contains\",value:function(t){var n;return n=void 0,this.traverseChildren(!1,function(e){if(t(e))return n=e,!1}),n}},{key:\"lastNode\",value:function(t){return 0===t.length?null:t[t.length-1]}},{key:\"toString\",value:function r(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:\"\",t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.constructor.name,n;return n=\"\\n\"+e+t,this.soak&&(n+=\"?\"),this.eachChild(function(t){return n+=t.toString(e+Ct)}),n}},{key:\"eachChild\",value:function(t){var n,r,i,s,o,u,a,f;if(!this.children)return this;for(a=this.children,i=0,o=a.length;i<o;i++)if(n=a[i],this[n])for(f=Wt([this[n]]),s=0,u=f.length;s<u;s++)if(r=f[s],!1===t(r))return this;return this}},{key:\"traverseChildren\",value:function(t,n){return this.eachChild(function(e){var r;if(r=n(e),!1!==r)return e.traverseChildren(t,n)})}},{key:\"replaceInContext\",value:function(t,r){var i,s,o,u,a,f,l,c,h,p;if(!this.children)return!1;for(h=this.children,a=0,l=h.length;a<l;a++)if(i=h[a],o=this[i])if(Array.isArray(o))for(u=f=0,c=o.length;f<c;u=++f){if(s=o[u],t(s))return n.apply(o,[u,u-u+1].concat(p=r(s,this))),p,!0;if(s.replaceInContext(t,r))return!0}else{if(t(o))return this[i]=r(o,this),!0;if(o.replaceInContext(t,r))return!0}}},{key:\"invert\",value:function(){return new ut(\"!\",this)}},{key:\"unwrapAll\",value:function(){var t;for(t=this;t!==(t=t.unwrap());)continue;return t}},{key:\"updateLocationDataIfMissing\",value:function(t){return this.locationData&&!this.forceUpdateLocation?this:(delete this.forceUpdateLocation,this.locationData=t,this.eachChild(function(e){return e.updateLocationDataIfMissing(t)}))}},{key:\"error\",value:function(t){return sn(t,this.locationData)}},{key:\"makeCode\",value:function(t){return new v(this,t)}},{key:\"wrapInParentheses\",value:function(t){return[this.makeCode(\"(\")].concat(_toConsumableArray(t),[this.makeCode(\")\")])}},{key:\"wrapInBraces\",value:function(t){return[this.makeCode(\"{\")].concat(_toConsumableArray(t),[this.makeCode(\"}\")])}},{key:\"joinFragmentArrays\",value:function(t,n){var r,i,s,o,u;for(r=[],s=o=0,u=t.length;o<u;s=++o)i=t[s],s&&r.push(this.makeCode(n)),r=r.concat(i);return r}}]),e}();return e.prototype.children=[],e.prototype.isStatement=nt,e.prototype.compiledComments=[],e.prototype.includeCommentFragments=nt,e.prototype.jumps=nt,e.prototype.shouldCache=Bt,e.prototype.isChainable=nt,e.prototype.isAssignable=nt,e.prototype.isNumber=nt,e.prototype.unwrap=kt,e.prototype.unfoldSoak=nt,e.prototype.assigns=nt,e}.call(this),e.HoistTarget=M=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.source=e,n.options={},n.targetFragments={fragments:[]},n}return _inherits(t,e),_createClass(t,null,[{key:\"expand\",value:function(t){var r,i,s,o;for(i=s=t.length-1;0<=s;i=s+=-1)r=t[i],r.fragments&&(n.apply(t,[i,i-i+1].concat(o=this.expand(r.fragments))),o);return t}}]),_createClass(t,[{key:\"isStatement\",value:function(t){return this.source.isStatement(t)}},{key:\"update\",value:function(t,n){return this.targetFragments.fragments=t.call(this.source,Yt(n,this.options))}},{key:\"compileToFragments\",value:function(t,n){return this.options.indent=t.indent,this.options.level=null==n?t.level:n,[this.targetFragments]}},{key:\"compileNode\",value:function(t){return this.compileToFragments(t)}},{key:\"compileClosure\",value:function(t){return this.compileToFragments(t)}}]),t}(a),e.Block=f=function(){var e=function(e){function n(e){_classCallCheck(this,n);var t=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return t.expressions=qt(Wt(e||[])),t}return _inherits(n,e),_createClass(n,[{key:\"push\",value:function(t){return this.expressions.push(t),this}},{key:\"pop\",value:function(){return this.expressions.pop()}},{key:\"unshift\",value:function(t){return this.expressions.unshift(t),this}},{key:\"unwrap\",value:function(){return 1===this.expressions.length?this.expressions[0]:this}},{key:\"isEmpty\",value:function(){return!this.expressions.length}},{key:\"isStatement\",value:function(t){var n,r,i,s;for(s=this.expressions,r=0,i=s.length;r<i;r++)if(n=s[r],n.isStatement(t))return!0;return!1}},{key:\"jumps\",value:function(t){var n,r,i,s,o;for(o=this.expressions,r=0,s=o.length;r<s;r++)if(n=o[r],i=n.jumps(t))return i}},{key:\"makeReturn\",value:function(t){var n,r;for(r=this.expressions.length;r--;){n=this.expressions[r],this.expressions[r]=n.makeReturn(t),n instanceof vt&&!n.expression&&this.expressions.splice(r,1);break}return this}},{key:\"compileToFragments\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},r=arguments[1];return t.scope?_get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"compileToFragments\",this).call(this,t,r):this.compileRoot(t)}},{key:\"compileNode\",value:function(t){var i,s,o,u,a,f,l,c,h,p;for(this.tab=t.indent,p=t.level===K,s=[],h=this.expressions,u=a=0,l=h.length;a<l;u=++a){if(c=h[u],c.hoisted){c.compileToFragments(t);continue}if(c=c.unfoldSoak(t)||c,c instanceof n)s.push(c.compileNode(t));else if(p){if(c.front=!0,o=c.compileToFragments(t),!c.isStatement(t)){o=$t(o,this);var d=r.call(o,-1),v=_slicedToArray(d,1);f=v[0],\"\"===f.code||f.isComment||o.push(this.makeCode(\";\"))}s.push(o)}else s.push(c.compileToFragments(t,V))}return p?this.spaced?[].concat(this.joinFragmentArrays(s,\"\\n\\n\"),this.makeCode(\"\\n\")):this.joinFragmentArrays(s,\"\\n\"):(i=s.length?this.joinFragmentArrays(s,\", \"):[this.makeCode(\"void 0\")],1<s.length&&t.level>=V?this.wrapInParentheses(i):i)}},{key:\"compileRoot\",value:function(t){var n,r,i,s,o,u;for(t.indent=t.bare?\"\":Ct,t.level=K,this.spaced=!0,t.scope=new gt(null,this,null,null==(o=t.referencedVars)?[]:o),u=t.locals||[],r=0,i=u.length;r<i;r++)s=u[r],t.scope.parameter(s);return n=this.compileWithDeclarations(t),M.expand(n),n=this.compileComments(n),t.bare?n:[].concat(this.makeCode(\"(function() {\\n\"),n,this.makeCode(\"\\n}).call(this);\\n\"))}},{key:\"compileWithDeclarations\",value:function(t){var n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y;for(a=[],d=[],v=this.expressions,f=l=0,h=v.length;l<h&&(u=v[f],u=u.unwrap(),u instanceof G);f=++l);if(t=Yt(t,{level:K}),f){m=this.expressions.splice(f,9e9);var b=[this.spaced,!1];y=b[0],this.spaced=b[1];var w=[this.compileNode(t),y];a=w[0],this.spaced=w[1],this.expressions=m}d=this.compileNode(t);var E=t;if(g=E.scope,g.expressions===this)if(o=t.scope.hasDeclarations(),n=g.hasAssignments,o||n){if(f&&a.push(this.makeCode(\"\\n\")),a.push(this.makeCode(this.tab+\"var \")),o)for(i=g.declaredVariables(),s=c=0,p=i.length;c<p;s=++c){if(r=i[s],a.push(this.makeCode(r)),Object.prototype.hasOwnProperty.call(t.scope.comments,r)){var S;(S=a).push.apply(S,_toConsumableArray(t.scope.comments[r]))}s!==i.length-1&&a.push(this.makeCode(\", \"))}n&&(o&&a.push(this.makeCode(\",\\n\"+(this.tab+Ct))),a.push(this.makeCode(g.assignedVariables().join(\",\\n\"+(this.tab+Ct))))),a.push(this.makeCode(\";\\n\"+(this.spaced?\"\\n\":\"\")))}else a.length&&d.length&&a.push(this.makeCode(\"\\n\"));return a.concat(d)}},{key:\"compileComments\",value:function(n){var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k;for(u=f=0,h=n.length;f<h;u=++f){if(s=n[u],s.precedingComments){for(o=\"\",E=n.slice(0,u+1),l=E.length-1;0<=l;l+=-1){if(g=E[l],a=/^ {2,}/m.exec(g.code),a){o=a[0];break}if(0<=t.call(g.code,\"\\n\"))break}for(r=\"\\n\"+o+function(){var e,t,n,r;for(n=s.precedingComments,r=[],e=0,t=n.length;e<t;e++)i=n[e],i.isHereComment&&i.multiline?r.push(en(i.code,o,!1)):r.push(i.code);return r}().join(\"\\n\"+o).replace(/^(\\s*)$/gm,\"\"),S=n.slice(0,u+1),y=c=S.length-1;0<=c;y=c+=-1){if(g=S[y],v=g.code.lastIndexOf(\"\\n\"),-1===v)if(0===y)g.code=\"\\n\"+g.code,v=0;else{if(!g.isStringWithInterpolations||\"{\"!==g.code)continue;r=r.slice(1)+\"\\n\",v=1}delete s.precedingComments,g.code=g.code.slice(0,v)+r+g.code.slice(v);break}}if(s.followingComments){if(N=s.followingComments[0].trail,o=\"\",!N||1!==s.followingComments.length)for(m=!1,x=n.slice(u),b=0,p=x.length;b<p;b++)if(C=x[b],!m){if(!(0<=t.call(C.code,\"\\n\")))continue;m=!0}else{if(a=/^ {2,}/m.exec(C.code),a){o=a[0];break}if(0<=t.call(C.code,\"\\n\"))break}for(r=1===u&&/^\\s+$/.test(n[0].code)?\"\":N?\" \":\"\\n\"+o,r+=function(){var e,t,n,r;for(n=s.followingComments,r=[],t=0,e=n.length;t<e;t++)i=n[t],i.isHereComment&&i.multiline?r.push(en(i.code,o,!1)):r.push(i.code);return r}().join(\"\\n\"+o).replace(/^(\\s*)$/gm,\"\"),T=n.slice(u),k=w=0,d=T.length;w<d;k=++w){if(C=T[k],v=C.code.indexOf(\"\\n\"),-1===v)if(k===n.length-1)C.code+=\"\\n\",v=C.code.length;else{if(!C.isStringWithInterpolations||\"}\"!==C.code)continue;r+=\"\\n\",v=0}delete s.followingComments,\"\\n\"===C.code&&(r=r.replace(/^\\n/,\"\")),C.code=C.code.slice(0,v)+r+C.code.slice(v);break}}}return n}}],[{key:\"wrap\",value:function(t){return 1===t.length&&t[0]instanceof n?t[0]:new n(t)}}]),n}(a);return e.prototype.children=[\"expressions\"],e}.call(this),e.Literal=G=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.value=e,n}return _inherits(t,e),_createClass(t,[{key:\"assigns\",value:function(t){return t===this.value}},{key:\"compileNode\",value:function(){return[this.makeCode(this.value)]}},{key:\"toString\",value:function n(){return\" \"+(this.isStatement()?_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"toString\",this).call(this):this.constructor.name)+\": \"+this.value}}]),t}(a);return e.prototype.shouldCache=nt,e}.call(this),e.NumberLiteral=st=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G),e.InfinityLiteral=U=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(){return[this.makeCode(\"2e308\")]}}]),t}(st),e.NaNLiteral=rt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"NaN\"))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n;return n=[this.makeCode(\"0/0\")],t.level>=$?this.wrapInParentheses(n):n}}]),t}(st),e.StringLiteral=Et=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(){var n;return n=this.csx?[this.makeCode(this.unquote(!0,!0))]:_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this)}},{key:\"unquote\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0],n=1<arguments.length&&void 0!==arguments[1]&&arguments[1],r;return r=this.value.slice(1,-1),t&&(r=r.replace(/\\\\\"/g,'\"')),n&&(r=r.replace(/\\\\n/g,\"\\n\")),r}}]),t}(G),e.RegexLiteral=pt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G),e.PassthroughLiteral=lt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G),e.IdentifierLiteral=_=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"eachName\",value:function(t){return t(this)}}]),t}(G);return e.prototype.isAssignable=Bt,e}.call(this),e.CSXTag=c=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(_),e.PropertyName=ct=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G);return e.prototype.isAssignable=Bt,e}.call(this),e.ComputedPropertyName=m=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){return[this.makeCode(\"[\")].concat(_toConsumableArray(this.value.compileToFragments(t,V)),[this.makeCode(\"]\")])}}]),t}(ct),e.StatementLiteral=wt=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"jumps\",value:function(t){return\"break\"!==this.value||(null==t?void 0:t.loop)||(null==t?void 0:t.block)?\"continue\"!==this.value||null!=t&&t.loop?void 0:this:this}},{key:\"compileNode\",value:function(){return[this.makeCode(\"\"+this.tab+this.value+\";\")]}}]),t}(G);return e.prototype.isStatement=Bt,e.prototype.makeReturn=kt,e}.call(this),e.ThisLiteral=At=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"this\"))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r;return n=(null==(r=t.scope.method)?void 0:r.bound)?t.scope.method.context:this.value,[this.makeCode(n)]}}]),t}(G),e.UndefinedLiteral=Dt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"undefined\"))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){return[this.makeCode(t.level>=W?\"(void 0)\":\"void 0\")]}}]),t}(G),e.NullLiteral=it=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"null\"))}return _inherits(t,e),t}(G),e.BooleanLiteral=l=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G),e.Return=vt=function(){var e=function(e){function n(e){_classCallCheck(this,n);var t=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return t.expression=e,t}return _inherits(n,e),_createClass(n,[{key:\"compileToFragments\",value:function(t,r){var i,s;return i=null==(s=this.expression)?void 0:s.makeReturn(),!i||i instanceof n?_get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"compileToFragments\",this).call(this,t,r):i.compileToFragments(t,r)}},{key:\"compileNode\",value:function(n){var r,i,s,o;if(r=[],this.expression)for(r=this.expression.compileToFragments(n,J),un(r,this.makeCode(this.tab+\"return \")),s=0,o=r.length;s<o;s++)if(i=r[s],i.isHereComment&&0<=t.call(i.code,\"\\n\"))i.code=en(i.code,this.tab);else{if(!i.isLineComment)break;i.code=\"\"+this.tab+i.code}else r.push(this.makeCode(this.tab+\"return\"));return r.push(this.makeCode(\";\")),r}}]),n}(a);return e.prototype.children=[\"expression\"],e.prototype.isStatement=Bt,e.prototype.makeReturn=kt,e.prototype.jumps=kt,e}.call(this),e.YieldReturn=jt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(n){return null==n.scope.parent&&this.error(\"yield can only occur inside functions\"),_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,n)}}]),t}(vt),e.AwaitReturn=u=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(n){return null==n.scope.parent&&this.error(\"await can only occur inside functions\"),_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,n)}}]),t}(vt),e.Value=Pt=function(){var e=function(e){function t(e,n,r){var i=3<arguments.length&&void 0!==arguments[3]&&arguments[3];_classCallCheck(this,t);var s=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),o,u;if(!n&&e instanceof t){var a;return a=e,_possibleConstructorReturn(s,a)}if(e instanceof ft&&e.contains(function(e){return e instanceof wt})){var f;return f=e.unwrap(),_possibleConstructorReturn(s,f)}return s.base=e,s.properties=n||[],r&&(s[r]=!0),s.isDefaultValue=i,(null==(o=s.base)?void 0:o.comments)&&s.base instanceof At&&null!=(null==(u=s.properties[0])?void 0:u.name)&&Zt(s.base,s.properties[0].name),s}return _inherits(t,e),_createClass(t,[{key:\"add\",value:function(t){return this.properties=this.properties.concat(t),this.forceUpdateLocation=!0,this}},{key:\"hasProperties\",value:function(){return 0!==this.properties.length}},{key:\"bareLiteral\",value:function(t){return!this.properties.length&&this.base instanceof t}},{key:\"isArray\",value:function(){return this.bareLiteral(s)}},{key:\"isRange\",value:function(){return this.bareLiteral(ht)}},{key:\"shouldCache\",value:function(){return this.hasProperties()||this.base.shouldCache()}},{key:\"isAssignable\",value:function(){return this.hasProperties()||this.base.isAssignable()}},{key:\"isNumber\",value:function(){return this.bareLiteral(st)}},{key:\"isString\",value:function(){return this.bareLiteral(Et)}},{key:\"isRegex\",value:function(){return this.bareLiteral(pt)}},{key:\"isUndefined\",value:function(){return this.bareLiteral(Dt)}},{key:\"isNull\",value:function(){return this.bareLiteral(it)}},{key:\"isBoolean\",value:function(){return this.bareLiteral(l)}},{key:\"isAtomic\",value:function(){var t,n,r,i;for(i=this.properties.concat(this.base),t=0,n=i.length;t<n;t++)if(r=i[t],r.soak||r instanceof h)return!1;return!0}},{key:\"isNotCallable\",value:function(){return this.isNumber()||this.isString()||this.isRegex()||this.isArray()||this.isRange()||this.isSplice()||this.isObject()||this.isUndefined()||this.isNull()||this.isBoolean()}},{key:\"isStatement\",value:function(t){return!this.properties.length&&this.base.isStatement(t)}},{key:\"assigns\",value:function(t){return!this.properties.length&&this.base.assigns(t)}},{key:\"jumps\",value:function(t){return!this.properties.length&&this.base.jumps(t)}},{key:\"isObject\",value:function(t){return!this.properties.length&&this.base instanceof ot&&(!t||this.base.generated)}},{key:\"isElision\",value:function(){return this.base instanceof s&&this.base.hasElision()}},{key:\"isSplice\",value:function(){var t,n,i,s;return s=this.properties,t=r.call(s,-1),n=_slicedToArray(t,1),i=n[0],t,i instanceof yt}},{key:\"looksStatic\",value:function(t){var n;return(this.this||this.base instanceof At||this.base.value===t)&&1===this.properties.length&&\"prototype\"!==(null==(n=this.properties[0].name)?void 0:n.value)}},{key:\"unwrap\",value:function(){return this.properties.length?this:this.base}},{key:\"cacheReference\",value:function(n){var i,s,u,a,f,l,c;return(c=this.properties,i=r.call(c,-1),s=_slicedToArray(i,1),f=s[0],i,2>this.properties.length&&!this.base.shouldCache()&&(null==f||!f.shouldCache()))?[this,this]:(u=new t(this.base,this.properties.slice(0,-1)),u.shouldCache()&&(a=new _(n.scope.freeVariable(\"base\")),u=new t(new ft(new o(a,u)))),!f)?[u,a]:(f.shouldCache()&&(l=new _(n.scope.freeVariable(\"name\")),f=new R(new o(l,f.index)),l=new R(l)),[u.add(f),new t(a||u.base,[l||f])])}},{key:\"compileNode\",value:function(t){var n,r,i,s,o;for(this.base.front=this.front,o=this.properties,n=o.length&&null!=this.base.cached?this.base.cached:this.base.compileToFragments(t,o.length?W:null),o.length&&mt.test(Xt(n))&&n.push(this.makeCode(\".\")),r=0,i=o.length;r<i;r++){var u;s=o[r],(u=n).push.apply(u,_toConsumableArray(s.compileToFragments(t)))}return n}},{key:\"unfoldSoak\",value:function(n){var r=this;return null==this.unfoldedSoak?this.unfoldedSoak=function(){var e,i,s,u,a,f,l,c,h;if(s=r.base.unfoldSoak(n),s){var p;return(p=s.body.properties).push.apply(p,_toConsumableArray(r.properties)),s}for(c=r.properties,i=u=0,a=c.length;u<a;i=++u)if(f=c[i],!!f.soak)return f.soak=!1,e=new t(r.base,r.properties.slice(0,i)),h=new t(r.base,r.properties.slice(i)),e.shouldCache()&&(l=new _(n.scope.freeVariable(\"ref\")),e=new ft(new o(l,e)),h.base=l),new D(new b(e),h,{soak:!0});return!1}():this.unfoldedSoak}},{key:\"eachName\",value:function(t){return this.hasProperties()?t(this):this.base.isAssignable()?this.base.eachName(t):this.error(\"tried to assign to unassignable value\")}}]),t}(a);return e.prototype.children=[\"base\",\"properties\"],e}.call(this),e.HereComment=O=function(e){function n(e){var t=e.content,r=e.newLine,i=e.unshift;_classCallCheck(this,n);var s=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return s.content=t,s.newLine=r,s.unshift=i,s}return _inherits(n,e),_createClass(n,[{key:\"compileNode\",value:function(){var n,r,i,s,o,u,a,f,l;if(f=0<=t.call(this.content,\"\\n\"),r=/\\n\\s*[#|\\*]/.test(this.content),r&&(this.content=this.content.replace(/^([ \\t]*)#(?=\\s)/gm,\" *\")),f){for(s=\"\",l=this.content.split(\"\\n\"),i=0,u=l.length;i<u;i++)a=l[i],o=/^\\s*/.exec(a)[0],o.length>s.length&&(s=o);this.content=this.content.replace(RegExp(\"^(\"+o+\")\",\"gm\"),\"\")}return this.content=\"/*\"+this.content+(r?\" \":\"\")+\"*/\",n=this.makeCode(this.content),n.newLine=this.newLine,n.unshift=this.unshift,n.multiline=f,n.isComment=n.isHereComment=!0,n}}]),n}(a),e.LineComment=Q=function(e){function t(e){var n=e.content,r=e.newLine,i=e.unshift;_classCallCheck(this,t);var s=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return s.content=n,s.newLine=r,s.unshift=i,s}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(){var t;return t=this.makeCode(/^\\s*$/.test(this.content)?\"\":\"//\"+this.content),t.newLine=this.newLine,t.unshift=this.unshift,t.trail=!this.newLine&&!this.unshift,t.isComment=t.isLineComment=!0,t}}]),t}(a),e.Call=h=function(){var e=function(e){function t(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],r=arguments[2],i=arguments[3];_classCallCheck(this,t);var s=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),o;return s.variable=e,s.args=n,s.soak=r,s.token=i,s.isNew=!1,s.variable instanceof Pt&&s.variable.isNotCallable()&&s.variable.error(\"literal is not a function\"),s.csx=s.variable.base instanceof c,\"RegExp\"===(null==(o=s.variable.base)?void 0:o.value)&&0!==s.args.length&&Zt(s.variable,s.args[0]),s}return _inherits(t,e),_createClass(t,[{key:\"updateLocationDataIfMissing\",value:function(n){var r,i;return this.locationData&&this.needsUpdatedStartLocation&&(this.locationData.first_line=n.first_line,this.locationData.first_column=n.first_column,r=(null==(i=this.variable)?void 0:i.base)||this.variable,r.needsUpdatedStartLocation&&(this.variable.locationData.first_line=n.first_line,this.variable.locationData.first_column=n.first_column,r.updateLocationDataIfMissing(n)),delete this.needsUpdatedStartLocation),_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"updateLocationDataIfMissing\",this).call(this,n)}},{key:\"newInstance\",value:function(){var n,r;return n=(null==(r=this.variable)?void 0:r.base)||this.variable,n instanceof t&&!n.isNew?n.newInstance():this.isNew=!0,this.needsUpdatedStartLocation=!0,this}},{key:\"unfoldSoak\",value:function(n){var r,i,s,o,u,a,f,l;if(this.soak){if(this.variable instanceof xt)o=new G(this.variable.compile(n)),l=new Pt(o),null==this.variable.accessor&&this.variable.error(\"Unsupported reference to 'super'\");else{if(i=on(n,this,\"variable\"))return i;var c=(new Pt(this.variable)).cacheReference(n),h=_slicedToArray(c,2);o=h[0],l=h[1]}return l=new t(l,this.args),l.isNew=this.isNew,o=new G(\"typeof \"+o.compile(n)+' === \"function\"'),new D(o,new Pt(l),{soak:!0})}for(r=this,a=[];;){if(r.variable instanceof t){a.push(r),r=r.variable;continue}if(!(r.variable instanceof Pt))break;if(a.push(r),!((r=r.variable.base)instanceof t))break}for(f=a.reverse(),s=0,u=f.length;s<u;s++)r=f[s],i&&(r.variable instanceof t?r.variable=i:r.variable.base=i),i=on(n,r,\"variable\");return i}},{key:\"compileNode\",value:function(t){var n,r,s,o,u,a,f,l,c,h,p,v,m,g,y;if(this.csx)return this.compileCSX(t);if(null!=(p=this.variable)&&(p.front=this.front),f=[],y=(null==(v=this.variable)||null==(m=v.properties)?void 0:m[0])instanceof i,o=function(){var e,t,n,r;for(n=this.args||[],r=[],e=0,t=n.length;e<t;e++)s=n[e],s instanceof d&&r.push(s);return r}.call(this),0<o.length&&y&&!this.variable.base.cached){var b=this.variable.base.cache(t,W,function(){return!1}),w=_slicedToArray(b,1);a=w[0],this.variable.base.cached=a}for(g=this.args,u=c=0,h=g.length;c<h;u=++c){var E;s=g[u],u&&f.push(this.makeCode(\", \")),(E=f).push.apply(E,_toConsumableArray(s.compileToFragments(t,V)))}return l=[],this.isNew&&(this.variable instanceof xt&&this.variable.error(\"Unsupported reference to 'super'\"),l.push(this.makeCode(\"new \"))),(n=l).push.apply(n,_toConsumableArray(this.variable.compileToFragments(t,W))),(r=l).push.apply(r,[this.makeCode(\"(\")].concat(_toConsumableArray(f),[this.makeCode(\")\")])),l}},{key:\"compileCSX\",value:function(t){var n=_slicedToArray(this.args,2),r,i,o,u,a,f,l,c,h,p,d;if(u=n[0],a=n[1],u.base.csx=!0,null!=a&&(a.base.csx=!0),f=[this.makeCode(\"<\")],(r=f).push.apply(r,_toConsumableArray(d=this.variable.compileToFragments(t,W))),u.base instanceof s)for(p=u.base.objects,l=0,c=p.length;l<c;l++){var v;h=p[l],i=h.base,o=(null==i?void 0:i.properties)||[],(i instanceof ot||i instanceof _)&&(!(i instanceof ot)||i.generated||!(1<o.length)&&o[0]instanceof bt)||h.error('Unexpected token. Allowed CSX attributes are: id=\"val\", src={source}, {props...} or attribute.'),h.base instanceof ot&&(h.base.csx=!0),f.push(this.makeCode(\" \")),(v=f).push.apply(v,_toConsumableArray(h.compileToFragments(t,J)))}if(a){var m,g;f.push(this.makeCode(\">\")),(m=f).push.apply(m,_toConsumableArray(a.compileNode(t,V))),(g=f).push.apply(g,[this.makeCode(\"</\")].concat(_toConsumableArray(d),[this.makeCode(\">\")]))}else f.push(this.makeCode(\" />\"));return f}}]),t}(a);return e.prototype.children=[\"variable\",\"args\"],e}.call(this),e.SuperCall=Tt=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"isStatement\",value:function(t){var n;return(null==(n=this.expressions)?void 0:n.length)&&t.level===K}},{key:\"compileNode\",value:function(n){var r,i,s,o;if(null==(i=this.expressions)||!i.length)return _get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,n);if(o=new G(Xt(_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,n))),s=new f(this.expressions.slice()),n.level>K){var u=o.cache(n,null,Bt),a=_slicedToArray(u,2);o=a[0],r=a[1],s.push(r)}return s.unshift(o),s.compileToFragments(n,n.level===K?n.level:V)}}]),t}(h);return e.prototype.children=h.prototype.children.concat([\"expressions\"]),e}.call(this),e.Super=xt=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.accessor=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r,i,s,u,a,f,l;if(r=t.scope.namedMethod(),(null==r?void 0:r.isMethod)||this.error(\"cannot use super outside of an instance method\"),null==r.ctor&&null==this.accessor){var c=r;i=c.name,l=c.variable,(i.shouldCache()||i instanceof R&&i.index.isAssignable())&&(s=new _(t.scope.parent.freeVariable(\"name\")),i.index=new o(s,i.index)),this.accessor=null==s?i:new R(s)}return(null==(u=this.accessor)||null==(a=u.name)?void 0:a.comments)&&(f=this.accessor.name.comments,delete this.accessor.name.comments),n=(new Pt(new G(\"super\"),this.accessor?[this.accessor]:[])).compileToFragments(t),f&&It(f,this.accessor.name),n}}]),t}(a);return e.prototype.children=[\"accessor\"],e}.call(this),e.RegexWithInterpolations=dt=function(e){function t(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,new Pt(new _(\"RegExp\")),e,!1))}return _inherits(t,e),t}(h),e.TaggedTemplateCall=Lt=function(e){function t(e,n,r){return _classCallCheck(this,t),n instanceof Et&&(n=new St(f.wrap([new Pt(n)]))),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,[n],r))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){return this.variable.compileToFragments(t,W).concat(this.args[0].compileToFragments(t,V))}}]),t}(h),e.Extends=k=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.child=e,r.parent=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function(t){return(new h(new Pt(new G(an(\"extend\",t))),[this.child,this.parent])).compileToFragments(t)}}]),t}(a);return e.prototype.children=[\"child\",\"parent\"],e}.call(this),e.Access=i=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.name=e,r.soak=\"soak\"===n,r}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function(t){var n,r;return n=this.name.compileToFragments(t),r=this.name.unwrap(),r instanceof ct?[this.makeCode(\".\")].concat(_toConsumableArray(n)):[this.makeCode(\"[\")].concat(_toConsumableArray(n),[this.makeCode(\"]\")])}}]),t}(a);return e.prototype.children=[\"name\"],e.prototype.shouldCache=nt,e}.call(this),e.Index=R=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.index=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function(t){return[].concat(this.makeCode(\"[\"),this.index.compileToFragments(t,J),this.makeCode(\"]\"))}},{key:\"shouldCache\",value:function(){return this.index.shouldCache()}}]),t}(a);return e.prototype.children=[\"index\"],e}.call(this),e.Range=ht=function(){var e=function(e){function t(e,n,r){_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.from=e,i.to=n,i.exclusive=\"exclusive\"===r,i.equals=i.exclusive?\"\":\"=\",i}return _inherits(t,e),_createClass(t,[{key:\"compileVariables\",value:function(t){var n,r;t=Yt(t,{top:!0}),n=Rt(t,\"shouldCache\");var i=this.cacheToCodeFragments(this.from.cache(t,V,n)),s=_slicedToArray(i,2);this.fromC=s[0],this.fromVar=s[1];var o=this.cacheToCodeFragments(this.to.cache(t,V,n)),u=_slicedToArray(o,2);if(this.toC=u[0],this.toVar=u[1],r=Rt(t,\"step\")){var a=this.cacheToCodeFragments(r.cache(t,V,n)),f=_slicedToArray(a,2);this.step=f[0],this.stepVar=f[1]}return this.fromNum=this.from.isNumber()?+this.fromVar:null,this.toNum=this.to.isNumber()?+this.toVar:null,this.stepNum=(null==r?void 0:r.isNumber())?+this.stepVar:null}},{key:\"compileNode\",value:function(t){var n,r,i,s,o,u,a,f,l,c,h,p,d,v,m;if(this.fromVar||this.compileVariables(t),!t.index)return this.compileArray(t);a=null!=this.fromNum&&null!=this.toNum,o=Rt(t,\"index\"),u=Rt(t,\"name\"),c=u&&u!==o,m=a&&!c?\"var \"+o+\" = \"+this.fromC:o+\" = \"+this.fromC,this.toC!==this.toVar&&(m+=\", \"+this.toC),this.step!==this.stepVar&&(m+=\", \"+this.step),l=o+\" <\"+this.equals,s=o+\" >\"+this.equals;var g=[this.fromNum,this.toNum];return i=g[0],d=g[1],h=this.stepNum?this.stepNum+\" !== 0\":this.stepVar+\" !== 0\",r=a?null==this.step?i<=d?l+\" \"+d:s+\" \"+d:(f=i+\" <= \"+o+\" && \"+l+\" \"+d,v=i+\" >= \"+o+\" && \"+s+\" \"+d,i<=d?h+\" && \"+f:h+\" && \"+v):(f=this.fromVar+\" <= \"+o+\" && \"+l+\" \"+this.toVar,v=this.fromVar+\" >= \"+o+\" && \"+s+\" \"+this.toVar,h+\" && (\"+this.fromVar+\" <= \"+this.toVar+\" ? \"+f+\" : \"+v+\")\"),n=this.stepVar?this.stepVar+\" > 0\":this.fromVar+\" <= \"+this.toVar,p=this.stepVar?o+\" += \"+this.stepVar:a?c?i<=d?\"++\"+o:\"--\"+o:i<=d?o+\"++\":o+\"--\":c?n+\" ? ++\"+o+\" : --\"+o:n+\" ? \"+o+\"++ : \"+o+\"--\",c&&(m=u+\" = \"+m),c&&(p=u+\" = \"+p),[this.makeCode(m+\"; \"+r+\"; \"+p)]}},{key:\"compileArray\",value:function(t){var n,r,i,s,o,u,a,f,l,c,h,p,d;return(a=null!=this.fromNum&&null!=this.toNum,a&&20>=_Mathabs(this.fromNum-this.toNum))?(c=function(){for(var e=[],t=h=this.fromNum,n=this.toNum;h<=n?t<=n:t>=n;h<=n?t++:t--)e.push(t);return e}.apply(this),this.exclusive&&c.pop(),[this.makeCode(\"[\"+c.join(\", \")+\"]\")]):(u=this.tab+Ct,o=t.scope.freeVariable(\"i\",{single:!0,reserve:!1}),p=t.scope.freeVariable(\"results\",{reserve:!1}),l=\"\\n\"+u+\"var \"+p+\" = [];\",a?(t.index=o,r=Xt(this.compileNode(t))):(d=o+\" = \"+this.fromC+(this.toC===this.toVar?\"\":\", \"+this.toC),i=this.fromVar+\" <= \"+this.toVar,r=\"var \"+d+\"; \"+i+\" ? \"+o+\" <\"+this.equals+\" \"+this.toVar+\" : \"+o+\" >\"+this.equals+\" \"+this.toVar+\"; \"+i+\" ? \"+o+\"++ : \"+o+\"--\"),f=\"{ \"+p+\".push(\"+o+\"); }\\n\"+u+\"return \"+p+\";\\n\"+t.indent,s=function(e){return null==e?void 0:e.contains(Jt)},(s(this.from)||s(this.to))&&(n=\", arguments\"),[this.makeCode(\"(function() {\"+l+\"\\n\"+u+\"for (\"+r+\")\"+f+\"}).apply(this\"+(null==n?\"\":n)+\")\")])}}]),t}(a);return e.prototype.children=[\"from\",\"to\"],e}.call(this),e.Slice=yt=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.range=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n=this.range,r,i,s,o,u,a;return u=n.to,s=n.from,(null==s?void 0:s.shouldCache())&&(s=new Pt(new ft(s))),(null==u?void 0:u.shouldCache())&&(u=new Pt(new ft(u))),o=(null==s?void 0:s.compileToFragments(t,J))||[this.makeCode(\"0\")],u&&(r=u.compileToFragments(t,J),i=Xt(r),(this.range.exclusive||-1!=+i)&&(a=\", \"+(this.range.exclusive?i:u.isNumber()?\"\"+(+i+1):(r=u.compileToFragments(t,W),\"+\"+Xt(r)+\" + 1 || 9e9\")))),[this.makeCode(\".slice(\"+Xt(o)+(a||\"\")+\")\")]}}]),t}(a);return e.prototype.children=[\"range\"],e}.call(this),e.Obj=ot=function(){var e=function(e){function t(e){var n=1<arguments.length&&void 0!==arguments[1]&&arguments[1],r=2<arguments.length&&void 0!==arguments[2]&&arguments[2];_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.generated=n,i.lhs=r,i.objects=i.properties=e||[],i}return _inherits(t,e),_createClass(t,[{key:\"isAssignable\",value:function(){var t,n,r,i,s;for(s=this.properties,t=0,n=s.length;t<n;t++)if(i=s[t],r=Qt(i.unwrapAll().value),r&&i.error(r),i instanceof o&&\"object\"===i.context&&(i=i.value),!i.isAssignable())return!1;return!0}},{key:\"shouldCache\",value:function(){return!this.isAssignable()}},{key:\"hasSplat\",value:function(){var t,n,r,i;for(i=this.properties,t=0,n=i.length;t<n;t++)if(r=i[t],r instanceof bt)return!0;return!1}},{key:\"compileNode\",value:function(n){var r,i,u,a,f,l,c,h,p,d,v,g,y,b,w,E,S,x,T,N,C,k;if(x=this.properties,this.generated)for(l=0,g=x.length;l<g;l++)E=x[l],E instanceof Pt&&E.error(\"cannot have an implicit value in an implicit object\");if(this.hasSplat()&&!this.csx)return this.compileSpread(n);if(u=n.indent+=Ct,v=this.lastNode(this.properties),this.csx)return this.compileCSXAttributes(n);if(this.lhs)for(h=0,y=x.length;h<y;h++)if(S=x[h],S instanceof o){var L=S;k=L.value,C=k.unwrapAll(),C instanceof s||C instanceof t?C.lhs=!0:C instanceof o&&(C.nestedLhs=!0)}for(f=!0,N=this.properties,d=0,b=N.length;d<b;d++)S=N[d],S instanceof o&&\"object\"===S.context&&(f=!1);for(r=[],r.push(this.makeCode(f?\"\":\"\\n\")),i=T=0,w=x.length;T<w;i=++T){var A;if(S=x[i],c=i===x.length-1?\"\":f?\", \":S===v?\"\\n\":\",\\n\",a=f?\"\":u,p=S instanceof o&&\"object\"===S.context?S.variable:S instanceof o?(this.lhs?void 0:S.operatorToken.error(\"unexpected \"+S.operatorToken.value),S.variable):S,p instanceof Pt&&p.hasProperties()&&((\"object\"===S.context||!p.this)&&p.error(\"invalid object key\"),p=p.properties[0].name,S=new o(p,S,\"object\")),p===S)if(S.shouldCache()){var O=S.base.cache(n),M=_slicedToArray(O,2);p=M[0],k=M[1],p instanceof _&&(p=new ct(p.value)),S=new o(p,k,\"object\")}else if(p instanceof Pt&&p.base instanceof m)if(S.base.value.shouldCache()){var D=S.base.value.cache(n),P=_slicedToArray(D,2);p=P[0],k=P[1],p instanceof _&&(p=new m(p.value)),S=new o(p,k,\"object\")}else S=new o(p,S.base.value,\"object\");else\"function\"==typeof S.bareLiteral&&S.bareLiteral(_)||(S=new o(S,S,\"object\"));a&&r.push(this.makeCode(a)),(A=r).push.apply(A,_toConsumableArray(S.compileToFragments(n,K))),c&&r.push(this.makeCode(c))}return r.push(this.makeCode(f?\"\":\"\\n\"+this.tab)),r=this.wrapInBraces(r),this.front?this.wrapInParentheses(r):r}},{key:\"assigns\",value:function(t){var n,r,i,s;for(s=this.properties,n=0,r=s.length;n<r;n++)if(i=s[n],i.assigns(t))return!0;return!1}},{key:\"eachName\",value:function(t){var n,r,i,s,u;for(s=this.properties,u=[],n=0,r=s.length;n<r;n++)i=s[n],i instanceof o&&\"object\"===i.context&&(i=i.value),i=i.unwrapAll(),null==i.eachName?u.push(void 0):u.push(i.eachName(t));return u}},{key:\"compileSpread\",value:function(n){var r,i,s,o,u,a,f,l,c;for(f=this.properties,c=[],a=[],l=[],i=function(){if(a.length&&l.push(new t(a)),c.length){var e;(e=l).push.apply(e,_toConsumableArray(c))}return c=[],a=[]},s=0,o=f.length;s<o;s++)u=f[s],u instanceof bt?(c.push(new Pt(u.name)),i()):a.push(u);return i(),l[0]instanceof t||l.unshift(new t),r=new Pt(new G(an(\"_extends\",n))),(new h(r,l)).compileToFragments(n)}},{key:\"compileCSXAttributes\",value:function(t){var n,r,i,s,o,u,a;for(a=this.properties,n=[],r=i=0,o=a.length;i<o;r=++i){var f;u=a[r],u.csx=!0,s=r===a.length-1?\"\":\" \",u instanceof bt&&(u=new G(\"{\"+u.compile(t)+\"}\")),(f=n).push.apply(f,_toConsumableArray(u.compileToFragments(t,K))),n.push(this.makeCode(s))}return this.front?this.wrapInParentheses(n):n}}]),t}(a);return e.prototype.children=[\"properties\"],e}.call(this),e.Arr=s=function(){var e=function(e){function n(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1];_classCallCheck(this,n);var r=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.lhs=t,r.objects=e||[],r}return _inherits(n,e),_createClass(n,[{key:\"hasElision\",value:function(){var t,n,r,i;for(i=this.objects,t=0,n=i.length;t<n;t++)if(r=i[t],r instanceof g)return!0;return!1}},{key:\"isAssignable\",value:function(){var t,n,r,i,s;if(!this.objects.length)return!1;for(s=this.objects,t=n=0,r=s.length;n<r;t=++n){if(i=s[t],i instanceof bt&&t+1!==this.objects.length)return!1;if(!i.isAssignable()||!!i.isAtomic&&!i.isAtomic())return!1}return!0}},{key:\"shouldCache\",value:function(){return!this.isAssignable()}},{key:\"compileNode\",value:function(r){var i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k;if(!this.objects.length)return[this.makeCode(\"[]\")];for(r.indent+=Ct,a=function(e){return\",\"===Xt(e).trim()},x=!1,i=[],C=this.objects,E=h=0,v=C.length;h<v;E=++h)w=C[E],k=w.unwrapAll(),k.comments&&0===k.comments.filter(function(e){return!e.here}).length&&(k.includeCommentFragments=Bt),this.lhs&&(k instanceof n||k instanceof ot)&&(k.lhs=!0);for(s=function(){var e,t,n,i;for(n=this.objects,i=[],e=0,t=n.length;e<t;e++)w=n[e],i.push(w.compileToFragments(r,V));return i}.call(this),S=s.length,l=!1,c=p=0,m=s.length;p<m;c=++p){var L;for(f=s[c],d=0,g=f.length;d<g;d++)o=f[d],o.isHereComment?o.code=o.code.trim():0!==c&&!1===l&&Vt(o)&&(l=!0);0!==c&&x&&(!a(f)||c===S-1)&&i.push(this.makeCode(\", \")),x=x||!a(f),(L=i).push.apply(L,_toConsumableArray(f))}if(l||0<=t.call(Xt(i),\"\\n\")){for(u=T=0,y=i.length;T<y;u=++T)o=i[u],o.isHereComment?o.code=en(o.code,r.indent,!1)+\"\\n\"+r.indent:\", \"===o.code&&(null==o||!o.isElision)&&(o.code=\",\\n\"+r.indent);i.unshift(this.makeCode(\"[\\n\"+r.indent)),i.push(this.makeCode(\"\\n\"+this.tab+\"]\"))}else{for(N=0,b=i.length;N<b;N++)o=i[N],o.isHereComment&&(o.code+=\" \");i.unshift(this.makeCode(\"[\")),i.push(this.makeCode(\"]\"))}return i}},{key:\"assigns\",value:function(t){var n,r,i,s;for(s=this.objects,n=0,r=s.length;n<r;n++)if(i=s[n],i.assigns(t))return!0;return!1}},{key:\"eachName\",value:function(t){var n,r,i,s,o;for(s=this.objects,o=[],n=0,r=s.length;n<r;n++)i=s[n],i=i.unwrapAll(),o.push(i.eachName(t));return o}}]),n}(a);return e.prototype.children=[\"objects\"],e}.call(this),e.Class=p=function(){var e=function(e){function s(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:new f;_classCallCheck(this,s);var r=_possibleConstructorReturn(this,(s.__proto__||Object.getPrototypeOf(s)).call(this));return r.variable=e,r.parent=t,r.body=n,r}return _inherits(s,e),_createClass(s,[{key:\"compileNode\",value:function(t){var n,r,i;if(this.name=this.determineName(),n=this.walkBody(),this.parent instanceof Pt&&!this.parent.hasProperties()&&(i=this.parent.base.value),this.hasNameClash=null!=this.name&&this.name===i,r=this,n||this.hasNameClash?r=new y(r,n):null==this.name&&t.level===K&&(r=new ft(r)),this.boundMethods.length&&this.parent&&(null==this.variable&&(this.variable=new _(t.scope.freeVariable(\"_class\"))),null==this.variableRef)){var s=this.variable.cache(t),u=_slicedToArray(s,2);this.variable=u[0],this.variableRef=u[1]}this.variable&&(r=new o(this.variable,r,null,{moduleDeclaration:this.moduleDeclaration})),this.compileNode=this.compileClassDeclaration;try{return r.compileToFragments(t)}finally{delete this.compileNode}}},{key:\"compileClassDeclaration\",value:function(t){var n,r,i;if((this.externalCtor||this.boundMethods.length)&&null==this.ctor&&(this.ctor=this.makeDefaultConstructor()),null!=(n=this.ctor)&&(n.noReturn=!0),this.boundMethods.length&&this.proxyBoundMethods(),t.indent+=Ct,i=[],i.push(this.makeCode(\"class \")),this.name&&i.push(this.makeCode(this.name)),null!=(null==(r=this.variable)?void 0:r.comments)&&this.compileCommentFragments(t,this.variable,i),this.name&&i.push(this.makeCode(\" \")),this.parent){var s;(s=i).push.apply(s,[this.makeCode(\"extends \")].concat(_toConsumableArray(this.parent.compileToFragments(t)),[this.makeCode(\" \")]))}if(i.push(this.makeCode(\"{\")),!this.body.isEmpty()){var o;this.body.spaced=!0,i.push(this.makeCode(\"\\n\")),(o=i).push.apply(o,_toConsumableArray(this.body.compileToFragments(t,K))),i.push(this.makeCode(\"\\n\"+this.tab))}return i.push(this.makeCode(\"}\")),i}},{key:\"determineName\",value:function(){var n,s,o,u,a,f,l;return this.variable?(f=this.variable.properties,n=r.call(f,-1),s=_slicedToArray(n,1),l=s[0],n,a=l?l instanceof i&&l.name:this.variable.base,a instanceof _||a instanceof ct)?(u=a.value,l||(o=Qt(u),o&&this.variable.error(o)),0<=t.call(z,u)?\"_\"+u:u):null:null}},{key:\"walkBody\",value:function(){var t,r,i,s,o,u,a,l,c,h,p,v,m,g,y,b,w,E;for(this.ctor=null,this.boundMethods=[],i=null,l=[],o=this.body.expressions,a=0,w=o.slice(),h=0,v=w.length;h<v;h++)if(s=w[h],s instanceof Pt&&s.isObject(!0)){for(y=s.base.properties,u=[],r=0,E=0,b=function(){if(r>E)return u.push(new Pt(new ot(y.slice(E,r),!0)))};t=y[r];)(c=this.addInitializerExpression(t))&&(b(),u.push(c),l.push(c),E=r+1),r++;b(),n.apply(o,[a,a-a+1].concat(u)),u,a+=u.length}else(c=this.addInitializerExpression(s))&&(l.push(c),o[a]=c),a+=1;for(p=0,m=l.length;p<m;p++)g=l[p],g instanceof d&&(g.ctor?(this.ctor&&g.error(\"Cannot define more than one constructor in a class\"),this.ctor=g):g.isStatic&&g.bound?g.context=this.name:g.bound&&this.boundMethods.push(g));if(l.length!==o.length)return this.body.expressions=function(){var e,t,n;for(n=[],e=0,t=l.length;e<t;e++)s=l[e],n.push(s.hoist());return n}(),new f(o)}},{key:\"addInitializerExpression\",value:function(t){return t.unwrapAll()instanceof lt?t:this.validInitializerMethod(t)?this.addInitializerMethod(t):null}},{key:\"validInitializerMethod\",value:function(t){return t instanceof o&&t.value instanceof d&&(\"object\"===t.context&&!t.variable.hasProperties()||t.variable.looksStatic(this.name)&&(this.name||!t.value.bound))}},{key:\"addInitializerMethod\",value:function(t){var n,r,s;return s=t.variable,n=t.value,n.isMethod=!0,n.isStatic=s.looksStatic(this.name),n.isStatic?n.name=s.properties[0]:(r=s.base,n.name=new(r.shouldCache()?R:i)(r),n.name.updateLocationDataIfMissing(r.locationData),\"constructor\"===r.value&&(n.ctor=this.parent?\"derived\":\"base\"),n.bound&&n.ctor&&n.error(\"Cannot define a constructor as a bound (fat arrow) function\")),n}},{key:\"makeDefaultConstructor\",value:function(){var t,n,r;return r=this.addInitializerMethod(new o(new Pt(new ct(\"constructor\")),new d)),this.body.unshift(r),this.parent&&r.body.push(new Tt(new xt,[new bt(new _(\"arguments\"))])),this.externalCtor&&(n=new Pt(this.externalCtor,[new i(new ct(\"apply\"))]),t=[new At,new _(\"arguments\")],r.body.push(new h(n,t)),r.body.makeReturn()),r}},{key:\"proxyBoundMethods\",value:function(){var t,n;return this.ctor.thisAssignments=function(){var e,r,s,u;for(s=this.boundMethods,u=[],e=0,r=s.length;e<r;e++)t=s[e],this.parent&&(t.classVariable=this.variableRef),n=new Pt(new At,[t.name]),u.push(new o(n,new h(new Pt(n,[new i(new ct(\"bind\"))]),[new At])));return u}.call(this),null}}]),s}(a);return e.prototype.children=[\"variable\",\"parent\",\"body\"],e}.call(this),e.ExecutableClassBody=y=function(){var e=function(e){function t(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:new f;_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.class=e,r.body=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r,s,u,a,f,l,c,p,v,m,g;return(l=this.body.jumps())&&l.error(\"Class bodies cannot contain pure statements\"),(s=this.body.contains(Jt))&&s.error(\"Class bodies shouldn't reference arguments\"),p=[],r=[new At],g=new d(p,this.body),c=new ft(new h(new Pt(g,[new i(new ct(\"call\"))]),r)),this.body.spaced=!0,t.classScope=g.makeScope(t.scope),this.name=null==(m=this.class.name)?t.classScope.freeVariable(this.defaultClassVariableName):m,f=new _(this.name),u=this.walkBody(),this.setContext(),this.class.hasNameClash&&(v=new _(t.classScope.freeVariable(\"superClass\")),g.params.push(new at(v)),r.push(this.class.parent),this.class.parent=v),this.externalCtor&&(a=new _(t.classScope.freeVariable(\"ctor\",{reserve:!1})),this.class.externalCtor=a,this.externalCtor.variable.base=a),this.name===this.class.name?this.body.expressions.unshift(this.class):this.body.expressions.unshift(new o(new _(this.name),this.class)),(n=this.body.expressions).unshift.apply(n,_toConsumableArray(u)),this.body.push(f),c.compileToFragments(t)}},{key:\"walkBody\",value:function(){var t=this,n,r,i;for(n=[],i=0;(r=this.body.expressions[i])&&!!(r instanceof Pt&&r.isString());)if(r.hoisted)i++;else{var s;(s=n).push.apply(s,_toConsumableArray(this.body.expressions.splice(i,1)))}return this.traverseChildren(!1,function(e){var n,r,i,s,u,a;if(e instanceof p||e instanceof M)return!1;if(n=!0,e instanceof f){for(a=e.expressions,r=i=0,s=a.length;i<s;r=++i)u=a[r],u instanceof Pt&&u.isObject(!0)?(n=!1,e.expressions[r]=t.addProperties(u.base.properties)):u instanceof o&&u.variable.looksStatic(t.name)&&(u.value.isStatic=!0);e.expressions=Wt(e.expressions)}return n}),n}},{key:\"setContext\",value:function(){var t=this;return this.body.traverseChildren(!1,function(e){return e instanceof At?e.value=t.name:e instanceof d&&e.bound&&e.isStatic?e.context=t.name:void 0})}},{key:\"addProperties\",value:function(t){var n,r,s,u,a,f,l;return a=function(){var e,a,c;for(c=[],e=0,a=t.length;e<a;e++)n=t[e],l=n.variable,r=null==l?void 0:l.base,f=n.value,delete n.context,\"constructor\"===r.value?(f instanceof d&&r.error(\"constructors must be defined at the top level of a class body\"),n=this.externalCtor=new o(new Pt,f)):n.variable.this?n.value instanceof d&&(n.value.isStatic=!0):(s=new(r.shouldCache()?R:i)(r),u=new i(new ct(\"prototype\")),l=new Pt(new At,[u,s]),n.variable=l),c.push(n);return c}.call(this),qt(a)}}]),t}(a);return e.prototype.children=[\"class\",\"body\"],e.prototype.defaultClassVariableName=\"_Class\",e}.call(this),e.ModuleDeclaration=Y=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.clause=e,r.source=n,r.checkSource(),r}return _inherits(t,e),_createClass(t,[{key:\"checkSource\",value:function(){if(null!=this.source&&this.source instanceof St)return this.source.error(\"the name of the module to be imported from must be an uninterpolated string\")}},{key:\"checkScope\",value:function(t,n){if(0!==t.indent.length)return this.error(n+\" statements must be at top-level scope\")}}]),t}(a);return e.prototype.children=[\"clause\",\"source\"],e.prototype.isStatement=Bt,e.prototype.jumps=kt,e.prototype.makeReturn=kt,e}.call(this),e.ImportDeclaration=H=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r;if(this.checkScope(t,\"import\"),t.importedSymbols=[],n=[],n.push(this.makeCode(this.tab+\"import \")),null!=this.clause){var i;(i=n).push.apply(i,_toConsumableArray(this.clause.compileNode(t)))}return null!=(null==(r=this.source)?void 0:r.value)&&(null!==this.clause&&n.push(this.makeCode(\" from \")),n.push(this.makeCode(this.source.value))),n.push(this.makeCode(\";\")),n}}]),t}(Y),e.ImportClause=P=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.defaultBinding=e,r.namedImports=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n;if(n=[],null!=this.defaultBinding){var r;(r=n).push.apply(r,_toConsumableArray(this.defaultBinding.compileNode(t))),null!=this.namedImports&&n.push(this.makeCode(\", \"))}if(null!=this.namedImports){var i;(i=n).push.apply(i,_toConsumableArray(this.namedImports.compileNode(t)))}return n}}]),t}(a);return e.prototype.children=[\"defaultBinding\",\"namedImports\"],e}.call(this),e.ExportDeclaration=S=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r;return this.checkScope(t,\"export\"),n=[],n.push(this.makeCode(this.tab+\"export \")),this instanceof x&&n.push(this.makeCode(\"default \")),!(this instanceof x)&&(this.clause instanceof o||this.clause instanceof p)&&(this.clause instanceof p&&!this.clause.variable&&this.clause.error(\"anonymous classes cannot be exported\"),n.push(this.makeCode(\"var \")),this.clause.moduleDeclaration=\"export\"),n=null!=this.clause.body&&this.clause.body instanceof f?n.concat(this.clause.compileToFragments(t,K)):n.concat(this.clause.compileNode(t)),null!=(null==(r=this.source)?void 0:r.value)&&n.push(this.makeCode(\" from \"+this.source.value)),n.push(this.makeCode(\";\")),n}}]),t}(Y),e.ExportNamedDeclaration=T=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(S),e.ExportDefaultDeclaration=x=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(S),e.ExportAllDeclaration=E=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(S),e.ModuleSpecifierList=et=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.specifiers=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r,i,s,o,u,a;if(n=[],t.indent+=Ct,r=function(){var e,n,r,i;for(r=this.specifiers,i=[],e=0,n=r.length;e<n;e++)a=r[e],i.push(a.compileToFragments(t,V));return i}.call(this),0!==this.specifiers.length){for(n.push(this.makeCode(\"{\\n\"+t.indent)),s=o=0,u=r.length;o<u;s=++o){var f;i=r[s],s&&n.push(this.makeCode(\",\\n\"+t.indent)),(f=n).push.apply(f,_toConsumableArray(i))}n.push(this.makeCode(\"\\n}\"))}else n.push(this.makeCode(\"{}\"));return n}}]),t}(a);return e.prototype.children=[\"specifiers\"],e}.call(this),e.ImportSpecifierList=I=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(et),e.ExportSpecifierList=C=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(et),e.ModuleSpecifier=Z=function(){var e=function(e){function t(e,n,r){_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),s,o;if(i.original=e,i.alias=n,i.moduleDeclarationType=r,i.original.comments||(null==(s=i.alias)?void 0:s.comments)){if(i.comments=[],i.original.comments){var u;(u=i.comments).push.apply(u,_toConsumableArray(i.original.comments))}if(null==(o=i.alias)?void 0:o.comments){var a;(a=i.comments).push.apply(a,_toConsumableArray(i.alias.comments))}}return i.identifier=null==i.alias?i.original.value:i.alias.value,i}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n;return t.scope.find(this.identifier,this.moduleDeclarationType),n=[],n.push(this.makeCode(this.original.value)),null!=this.alias&&n.push(this.makeCode(\" as \"+this.alias.value)),n}}]),t}(a);return e.prototype.children=[\"original\",\"alias\"],e}.call(this),e.ImportSpecifier=F=function(e){function n(e,t){return _classCallCheck(this,n),_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e,t,\"import\"))}return _inherits(n,e),_createClass(n,[{key:\"compileNode\",value:function(r){var i;return(i=this.identifier,0<=t.call(r.importedSymbols,i))||r.scope.check(this.identifier)?this.error(\"'\"+this.identifier+\"' has already been declared\"):r.importedSymbols.push(this.identifier),_get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"compileNode\",this).call(this,r)}}]),n}(Z),e.ImportDefaultSpecifier=B=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(F),e.ImportNamespaceSpecifier=j=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(F),e.ExportSpecifier=N=function(e){function t(e,n){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,\"export\"))}return _inherits(t,e),t}(Z),e.Assign=o=function(){var e=function(e){function r(e,t,n){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};_classCallCheck(this,r);var s=_possibleConstructorReturn(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return s.variable=e,s.value=t,s.context=n,s.param=i.param,s.subpattern=i.subpattern,s.operatorToken=i.operatorToken,s.moduleDeclaration=i.moduleDeclaration,s}return _inherits(r,e),_createClass(r,[{key:\"isStatement\",value:function(n){return(null==n?void 0:n.level)===K&&null!=this.context&&(this.moduleDeclaration||0<=t.call(this.context,\"?\"))}},{key:\"checkAssignability\",value:function(t,n){if(Object.prototype.hasOwnProperty.call(t.scope.positions,n.value)&&\"import\"===t.scope.variables[t.scope.positions[n.value]].type)return n.error(\"'\"+n.value+\"' is read-only\")}},{key:\"assigns\",value:function(t){return this[\"object\"===this.context?\"value\":\"variable\"].assigns(t)}},{key:\"unfoldSoak\",value:function(t){return on(t,this,\"variable\")}},{key:\"compileNode\",value:function(t){var r=this,i,s,o,u,a,f,l,c,h,v,m,g,y,b,w;if(u=this.variable instanceof Pt,u){if(this.variable.param=this.param,this.variable.isArray()||this.variable.isObject()){if(this.variable.base.lhs=!0,o=this.variable.contains(function(e){return e instanceof ot&&e.hasSplat()}),!this.variable.isAssignable()||this.variable.isArray()&&o)return this.compileDestructuring(t);if(this.variable.isObject()&&o&&(f=this.compileObjectDestruct(t)),f)return f}if(this.variable.isSplice())return this.compileSplice(t);if(\"||=\"===(h=this.context)||\"&&=\"===h||\"?=\"===h)return this.compileConditional(t);if(\"**=\"===(v=this.context)||\"//=\"===v||\"%%=\"===v)return this.compileSpecialMath(t)}if(this.context||(w=this.variable.unwrapAll(),!w.isAssignable()&&this.variable.error(\"'\"+this.variable.compile(t)+\"' can't be assigned\"),w.eachName(function(e){var n,i,s;if(\"function\"!=typeof e.hasProperties||!e.hasProperties())return(s=Qt(e.value),s&&e.error(s),r.checkAssignability(t,e),r.moduleDeclaration)?t.scope.add(e.value,r.moduleDeclaration):r.param?t.scope.add(e.value,\"alwaysDeclare\"===r.param?\"var\":\"param\"):(t.scope.find(e.value),e.comments&&!t.scope.comments[e.value]&&!(r.value instanceof p)&&e.comments.every(function(e){return e.here&&!e.multiline}))?(i=new _(e.value),i.comments=e.comments,n=[],r.compileCommentFragments(t,i,n),t.scope.comments[e.value]=n):void 0})),this.value instanceof d)if(this.value.isStatic)this.value.name=this.variable.properties[0];else if(2<=(null==(m=this.variable.properties)?void 0:m.length)){var E,S,x,T;g=this.variable.properties,E=g,S=_toArray(E),l=S.slice(0),E,x=n.call(l,-2),T=_slicedToArray(x,2),c=T[0],a=T[1],x,\"prototype\"===(null==(y=c.name)?void 0:y.value)&&(this.value.name=a)}return(this.csx&&(this.value.base.csxAttribute=!0),b=this.value.compileToFragments(t,V),s=this.variable.compileToFragments(t,V),\"object\"===this.context)?(this.variable.shouldCache()&&(s.unshift(this.makeCode(\"[\")),s.push(this.makeCode(\"]\"))),s.concat(this.makeCode(this.csx?\"=\":\": \"),b)):(i=s.concat(this.makeCode(\" \"+(this.context||\"=\")+\" \"),b),t.level>V||u&&this.variable.base instanceof ot&&!this.nestedLhs&&!0!==this.param?this.wrapInParentheses(i):i)}},{key:\"compileObjectDestruct\",value:function(t){var n,o,u,a,l,c,p,d,v,m,g,y;if(o=function(e){var n;if(e instanceof r){var i=e.variable.cache(t),s=_slicedToArray(i,2);return e.variable=s[0],n=s[1],n}return e},u=function(e){var n,i;return i=o(e),n=e instanceof r&&e.variable!==i,n||!i.isAssignable()?i:new G(\"'\"+i.compileWithoutComments(t)+\"'\")},v=function(n,a){var f,l,c,h,p,d,m,g,y,b,w;for(b=[],w=void 0,null==a.properties&&(a=new Pt(a)),l=c=0,h=n.length;c<h;l=++c)if(y=n[l],m=d=p=null,y instanceof r){if(\"function\"==typeof (f=y.value).isObject?f.isObject():void 0){if(\"object\"!==y.context)continue;p=y.value.base.properties}else if(y.value instanceof r&&y.value.variable.isObject()){p=y.value.variable.base.properties;var E=y.value.value.cache(t),S=_slicedToArray(E,2);y.value.value=S[0],m=S[1]}if(p){var x;d=new Pt(a.base,a.properties.concat([new i(o(y))])),m&&(d=new Pt(new ut(\"?\",d,m))),(x=b).push.apply(x,_toConsumableArray(v(p,d)))}}else y instanceof bt&&(null!=w&&y.error(\"multiple rest elements are disallowed in object destructuring\"),w=l,b.push({name:y.name.unwrapAll(),source:a,excludeProps:new s(function(){var e,t,r;for(r=[],e=0,t=n.length;e<t;e++)g=n[e],g!==y&&r.push(u(g));return r}())}));return null!=w&&n.splice(w,1),b},y=this.value.shouldCache()?new _(t.scope.freeVariable(\"ref\",{reserve:!1})):this.value.base,p=v(this.variable.base.properties,y),!(p&&0<p.length))return!1;var b=this.value.cache(t),w=_slicedToArray(b,2);for(this.value=w[0],g=w[1],d=new f([this]),a=0,l=p.length;a<l;a++)c=p[a],m=new h(new Pt(new G(an(\"objectWithoutKeys\",t))),[c.source,c.excludeProps]),d.push(new r(new Pt(c.name),m,null,{param:this.param?\"alwaysDeclare\":null}));return n=d.compileToFragments(t),t.level===K&&(n.shift(),n.pop()),n}},{key:\"compileDestructuring\",value:function(n){var o=this,u,a,f,l,c,p,d,v,m,y,b,E,S,x,T,N,C,k,L,A,O,M,D,P,H,B,j,F,I,q,U,z,W,X;if(U=n.level===K,z=this.value,O=this.variable.base.objects,M=O.length,0===M)return f=z.compileToFragments(n),n.level>=$?this.wrapInParentheses(f):f;var J=O,Q=_slicedToArray(J,1);return L=Q[0],1===M&&L instanceof w&&L.error(\"Destructuring assignment has no target\"),I=function(){var e,t,n;for(n=[],E=e=0,t=O.length;e<t;E=++e)L=O[E],L instanceof bt&&n.push(E);return n}(),v=function(){var e,t,n;for(n=[],E=e=0,t=O.length;e<t;E=++e)L=O[E],L instanceof w&&n.push(E);return n}(),q=[].concat(_toConsumableArray(I),_toConsumableArray(v)),1<q.length&&O[q.sort()[1]].error(\"multiple splats/expansions are disallowed in an assignment\"),N=0<(null==I?void 0:I.length),x=0<(null==v?void 0:v.length),T=this.variable.isObject(),S=this.variable.isArray(),W=z.compileToFragments(n,V),X=Xt(W),a=[],(!(z.unwrap()instanceof _)||this.variable.assigns(X))&&(P=n.scope.freeVariable(\"ref\"),a.push([this.makeCode(P+\" = \")].concat(_toConsumableArray(W))),W=[this.makeCode(P)],X=P),F=function(e){return function(t,r){var s=2<arguments.length&&void 0!==arguments[2]&&arguments[2],o,u;return o=[new _(t),new st(r)],s&&o.push(new st(s)),u=new Pt(new _(an(e,n)),[new i(new ct(\"call\"))]),new Pt(new h(u,o))}},l=F(\"slice\"),c=F(\"splice\"),b=function(e){var t,n,r;for(r=[],E=t=0,n=e.length;t<n;E=++t)L=e[E],L.base instanceof ot&&L.base.hasSplat()&&r.push(E);return r},y=function(e){var t,n,i;for(i=[],E=t=0,n=e.length;t<n;E=++t)L=e[E],L instanceof r&&\"object\"===L.context&&i.push(E);return i},A=function(e){var t,n;for(t=0,n=e.length;t<n;t++)if(L=e[t],!L.isAssignable())return!0;return!1},p=function(e){return b(e).length||y(e).length||A(e)||1===M},k=function(e,s,u){var f,c,h,p,d,v,m,y;for(v=b(e),m=[],E=h=0,p=e.length;h<p;E=++h)if(L=e[E],!(L instanceof g)){if(L instanceof r&&\"object\"===L.context){var w=L;if(c=w.variable.base,s=w.value,s instanceof r){var S=s;s=S.variable}c=s.this?s.properties[0].name:new ct(s.unwrap().value),f=c.unwrap()instanceof ct,y=new Pt(z,[new(f?i:R)(c)])}else s=function(){switch(!1){case!(L instanceof bt):return new Pt(L.name);case 0>t.call(v,E):return new Pt(L.base);default:return L}}(),y=function(){switch(!1){case!(L instanceof bt):return l(u,E);default:return new Pt(new G(u),[new R(new st(E))])}}();d=Qt(s.unwrap().value),d&&s.error(d),m.push(a.push((new r(s,y,null,{param:o.param,subpattern:!0})).compileToFragments(n,V)))}return m},u=function(e,t,i){var u;return t=new Pt(new s(e,!0)),u=i instanceof Pt?i:new Pt(new G(i)),a.push((new r(t,u,null,{param:o.param,subpattern:!0})).compileToFragments(n,V))},D=function(e,t,n){return p(e)?k(e,t,n):u(e,t,n)},q.length?(d=q[0],C=O.slice(0,d+(N?1:0)),j=O.slice(d+1),0!==C.length&&D(C,W,X),0!==j.length&&(H=function(){switch(!1){case!N:return c(O[d].unwrapAll().value,-1*j.length);case!x:return l(X,-1*j.length)}}(),p(j)&&(B=H,H=n.scope.freeVariable(\"ref\"),a.push([this.makeCode(H+\" = \")].concat(_toConsumableArray(B.compileToFragments(n,V))))),D(j,W,H))):D(O,W,X),U||this.subpattern||a.push(W),m=this.joinFragmentArrays(a,\", \"),n.level<V?m:this.wrapInParentheses(m)}},{key:\"compileConditional\",value:function(n){var i=this.variable.cacheReference(n),s=_slicedToArray(i,2),o,u,a;return u=s[0],a=s[1],u.properties.length||!(u.base instanceof G)||u.base instanceof At||n.scope.check(u.base.value)||this.variable.error('the variable \"'+u.base.value+\"\\\" can't be assigned with \"+this.context+\" because it has not been declared before\"),0<=t.call(this.context,\"?\")?(n.isExistentialEquals=!0,(new D(new b(u),a,{type:\"if\"})).addElse(new r(a,this.value,\"=\")).compileToFragments(n)):(o=(new ut(this.context.slice(0,-1),u,new r(a,this.value,\"=\"))).compileToFragments(n),n.level<=V?o:this.wrapInParentheses(o))}},{key:\"compileSpecialMath\",value:function(t){var n=this.variable.cacheReference(t),i=_slicedToArray(n,2),s,o;return s=i[0],o=i[1],(new r(s,new ut(this.context.slice(0,-1),o,this.value))).compileToFragments(t)}},{key:\"compileSplice\",value:function(t){var n=this.variable.properties.pop(),r=n.range,i,s,o,u,a,f,l,c,h,p;if(o=r.from,l=r.to,s=r.exclusive,c=this.variable.unwrapAll(),c.comments&&(Zt(c,this),delete this.variable.comments),f=this.variable.compile(t),o){var d=this.cacheToCodeFragments(o.cache(t,$)),v=_slicedToArray(d,2);u=v[0],a=v[1]}else u=a=\"0\";l?(null==o?void 0:o.isNumber())&&l.isNumber()?(l=l.compile(t)-a,!s&&(l+=1)):(l=l.compile(t,W)+\" - \"+a,!s&&(l+=\" + 1\")):l=\"9e9\";var m=this.value.cache(t,V),g=_slicedToArray(m,2);return h=g[0],p=g[1],i=[].concat(this.makeCode(an(\"splice\",t)+\".apply(\"+f+\", [\"+u+\", \"+l+\"].concat(\"),h,this.makeCode(\")), \"),p),t.level>K?this.wrapInParentheses(i):i}},{key:\"eachName\",value:function(t){return this.variable.unwrapAll().eachName(t)}}]),r}(a);return e.prototype.children=[\"variable\",\"value\"],e.prototype.isAssignable=Bt,e}.call(this),e.FuncGlyph=A=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.glyph=e,n}return _inherits(t,e),t}(a),e.Code=d=function(){var e=function(e){function n(e,t,r,i){_classCallCheck(this,n);var s=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),o;return s.funcGlyph=r,s.paramStart=i,s.params=e||[],s.body=t||new f,s.bound=\"=>\"===(null==(o=s.funcGlyph)?void 0:o.glyph),s.isGenerator=!1,s.isAsync=!1,s.isMethod=!1,s.body.traverseChildren(!1,function(e){if((e instanceof ut&&e.isYield()||e instanceof jt)&&(s.isGenerator=!0),(e instanceof ut&&e.isAwait()||e instanceof u)&&(s.isAsync=!0),s.isGenerator&&s.isAsync)return e.error(\"function can't contain both yield and await\")}),s}return _inherits(n,e),_createClass(n,[{key:\"isStatement\",value:function(){return this.isMethod}},{key:\"makeScope\",value:function(t){return new gt(t,this.body,this)}},{key:\"compileNode\",value:function(n){var r,i,u,a,f,l,c,p,d,v,m,g,y,b,E,S,x,T,N,C,k,L,A,O,M,P,H,B,j,F,I,q,R,U,X,V,$,J,K,Q,Y,Z,et;for(this.ctor&&(this.isAsync&&this.name.error(\"Class constructor may not be async\"),this.isGenerator&&this.name.error(\"Class constructor may not be a generator\")),this.bound&&((null==(F=n.scope.method)?void 0:F.bound)&&(this.context=n.scope.method.context),!this.context&&(this.context=\"this\")),n.scope=Rt(n,\"classScope\")||this.makeScope(n.scope),n.scope.shared=Rt(n,\"sharedScope\"),n.indent+=Ct,delete n.bare,delete n.isExistentialEquals,H=[],p=[],Y=null==(I=null==(q=this.thisAssignments)?void 0:q.slice())?[]:I,B=[],m=!1,v=!1,M=[],this.eachParamName(function(e,r,i,s){var u,a;if(0<=t.call(M,e)&&r.error(\"multiple parameters named '\"+e+\"'\"),M.push(e),r.this)return e=r.properties[0].name.value,0<=t.call(z,e)&&(e=\"_\"+e),a=new _(n.scope.freeVariable(e,{reserve:!1})),u=i.name instanceof ot&&s instanceof o&&\"=\"===s.operatorToken.value?new o(new _(e),a,\"object\"):a,i.renameParam(r,u),Y.push(new o(r,a))}),R=this.params,g=b=0,x=R.length;b<x;g=++b)O=R[g],O.splat||O instanceof w?(m?O.error(\"only one splat or expansion parameter is allowed per function definition\"):O instanceof w&&1===this.params.length&&O.error(\"an expansion parameter cannot be the only parameter in a function definition\"),m=!0,O.splat?(O.name instanceof s?(Q=n.scope.freeVariable(\"arg\"),H.push(j=new Pt(new _(Q))),p.push(new o(new Pt(O.name),j))):(H.push(j=O.asReference(n)),Q=Xt(j.compileNodeWithoutComments(n))),O.shouldCache()&&p.push(new o(new Pt(O.name),j))):(Q=n.scope.freeVariable(\"args\"),H.push(new Pt(new _(Q)))),n.scope.parameter(Q)):((O.shouldCache()||v)&&(O.assignedInBody=!0,v=!0,null==O.value?p.push(new o(new Pt(O.name),O.asReference(n),null,{param:\"alwaysDeclare\"})):(c=new ut(\"===\",O,new Dt),y=new o(new Pt(O.name),O.value),p.push(new D(c,y)))),m?(B.push(O),null!=O.value&&!O.shouldCache()&&(c=new ut(\"===\",O,new Dt),y=new o(new Pt(O.name),O.value),p.push(new D(c,y))),null!=(null==(U=O.name)?void 0:U.value)&&n.scope.add(O.name.value,\"var\",!0)):(j=O.shouldCache()?O.asReference(n):null==O.value||O.assignedInBody?O:new o(new Pt(O.name),O.value,null,{param:!0}),O.name instanceof s||O.name instanceof ot?(O.name.lhs=!0,O.name instanceof ot&&O.name.hasSplat()?(Q=n.scope.freeVariable(\"arg\"),n.scope.parameter(Q),j=new Pt(new _(Q)),p.push(new o(new Pt(O.name),j,null,{param:\"alwaysDeclare\"})),null!=O.value&&!O.assignedInBody&&(j=new o(j,O.value,null,{param:!0}))):!O.shouldCache()&&O.name.eachName(function(e){return n.scope.parameter(e.value)})):(P=null==O.value?j:O,n.scope.parameter(Xt(P.compileToFragmentsWithoutComments(n)))),H.push(j)));if(0!==B.length&&p.unshift(new o(new Pt(new s([new bt(new _(Q))].concat(_toConsumableArray(function(){var e,t,r;for(r=[],e=0,t=B.length;e<t;e++)O=B[e],r.push(O.asReference(n));return r}())))),new Pt(new _(Q)))),Z=this.body.isEmpty(),!this.expandCtorSuper(Y)){var tt;(tt=this.body.expressions).unshift.apply(tt,_toConsumableArray(Y))}for((r=this.body.expressions).unshift.apply(r,_toConsumableArray(p)),this.isMethod&&this.bound&&!this.isStatic&&this.classVariable&&(f=new Pt(new G(an(\"boundMethodCheck\",n))),this.body.expressions.unshift(new h(f,[new Pt(new At),this.classVariable]))),Z||this.noReturn||this.body.makeReturn(),this.bound&&this.isGenerator&&(et=this.body.contains(function(e){return e instanceof ut&&\"yield\"===e.operator}),(et||this).error(\"yield cannot occur inside bound (fat arrow) functions\")),L=[],this.isMethod&&this.isStatic&&L.push(\"static\"),this.isAsync&&L.push(\"async\"),this.isMethod||this.bound?this.isGenerator&&L.push(\"*\"):L.push(\"function\"+(this.isGenerator?\"*\":\"\")),K=[this.makeCode(\"(\")],null!=(null==(X=this.paramStart)?void 0:X.comments)&&this.compileCommentFragments(n,this.paramStart,K),g=E=0,T=H.length;E<T;g=++E){var nt;if(O=H[g],0!==g&&K.push(this.makeCode(\", \")),m&&g===H.length-1&&K.push(this.makeCode(\"...\")),J=n.scope.variables.length,(nt=K).push.apply(nt,_toConsumableArray(O.compileToFragments(n))),J!==n.scope.variables.length){var rt;d=n.scope.variables.splice(J),(rt=n.scope.parent.variables).push.apply(rt,_toConsumableArray(d))}}if(K.push(this.makeCode(\")\")),null!=(null==(V=this.funcGlyph)?void 0:V.comments)){for($=this.funcGlyph.comments,S=0,N=$.length;S<N;S++)l=$[S],l.unshift=!1;this.compileCommentFragments(n,this.funcGlyph,K)}if(this.body.isEmpty()||(a=this.body.compileWithDeclarations(n)),this.isMethod){var it=[n.scope,n.scope.parent];k=it[0],n.scope=it[1],A=this.name.compileToFragments(n),\".\"===A[0].code&&A.shift(),n.scope=k}if(u=this.joinFragmentArrays(function(){var e,t,n;for(n=[],t=0,e=L.length;t<e;t++)C=L[t],n.push(this.makeCode(C));return n}.call(this),\" \"),L.length&&A&&u.push(this.makeCode(\" \")),A){var st;(st=u).push.apply(st,_toConsumableArray(A))}if((i=u).push.apply(i,_toConsumableArray(K)),this.bound&&!this.isMethod&&u.push(this.makeCode(\" =>\")),u.push(this.makeCode(\" {\")),null==a?void 0:a.length){var at;(at=u).push.apply(at,[this.makeCode(\"\\n\")].concat(_toConsumableArray(a),[this.makeCode(\"\\n\"+this.tab)]))}return u.push(this.makeCode(\"}\")),this.isMethod?$t(u,this):this.front||n.level>=W?this.wrapInParentheses(u):u}},{key:\"eachParamName\",value:function(t){var n,r,i,s,o;for(s=this.params,o=[],n=0,r=s.length;n<r;n++)i=s[n],o.push(i.eachName(t));return o}},{key:\"traverseChildren\",value:function(t,r){if(t)return _get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"traverseChildren\",this).call(this,t,r)}},{key:\"replaceInContext\",value:function(t,r){return!!this.bound&&_get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"replaceInContext\",this).call(this,t,r)}},{key:\"expandCtorSuper\",value:function(t){var n=this,r,i,s,o;return!!this.ctor&&(this.eachSuperCall(f.wrap(this.params),function(e){return e.error(\"'super' is not allowed in constructor parameter defaults\")}),o=this.eachSuperCall(this.body,function(e){return\"base\"===n.ctor&&e.error(\"'super' is only allowed in derived class constructors\"),e.expressions=t}),r=t.length&&t.length!==(null==(s=this.thisAssignments)?void 0:s.length),\"derived\"===this.ctor&&!o&&r&&(i=t[0].variable,i.error(\"Can't use @params in derived class constructors without calling super\")),o)}},{key:\"eachSuperCall\",value:function(t,r){var i=this,s;return s=!1,t.traverseChildren(!0,function(e){var t;return e instanceof Tt?(!e.variable.accessor&&(t=e.args.filter(function(e){return!(e instanceof p)&&(!(e instanceof n)||e.bound)}),f.wrap(t).traverseChildren(!0,function(e){if(e.this)return e.error(\"Can't call super with @params in derived class constructors\")})),s=!0,r(e)):e instanceof At&&\"derived\"===i.ctor&&!s&&e.error(\"Can't reference 'this' before calling super in derived class constructors\"),!(e instanceof Tt)&&(!(e instanceof n)||e.bound)}),s}}]),n}(a);return e.prototype.children=[\"params\",\"body\"],e.prototype.jumps=nt,e}.call(this),e.Param=at=function(){var e=function(e){function n(e,t,r){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),s,o;return i.name=e,i.value=t,i.splat=r,s=Qt(i.name.unwrapAll().value),s&&i.name.error(s),i.name instanceof ot&&i.name.generated&&(o=i.name.objects[0].operatorToken,o.error(\"unexpected \"+o.value)),i}return _inherits(n,e),_createClass(n,[{key:\"compileToFragments\",value:function(t){return this.name.compileToFragments(t,V)}},{key:\"compileToFragmentsWithoutComments\",value:function(t){return this.name.compileToFragmentsWithoutComments(t,V)}},{key:\"asReference\",value:function(n){var r,i;return this.reference?this.reference:(i=this.name,i.this?(r=i.properties[0].name.value,0<=t.call(z,r)&&(r=\"_\"+r),i=new _(n.scope.freeVariable(r))):i.shouldCache()&&(i=new _(n.scope.freeVariable(\"arg\"))),i=new Pt(i),i.updateLocationDataIfMissing(this.locationData),this.reference=i)}},{key:\"shouldCache\",value:function(){return this.name.shouldCache()}},{key:\"eachName\",value:function(t){var n=this,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.name,i,s,u,a,f,l,c,h;if(i=function(e){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;return t(\"@\"+e.properties[0].name.value,e,n,r)},r instanceof G)return t(r.value,r,this);if(r instanceof Pt)return i(r);for(h=null==(c=r.objects)?[]:c,s=0,u=h.length;s<u;s++)l=h[s],a=l,l instanceof o&&null==l.context&&(l=l.variable),l instanceof o?(l=l.value instanceof o?l.value.variable:l.value,this.eachName(t,l.unwrap())):l instanceof bt?(f=l.name.unwrap(),t(f.value,f,this)):l instanceof Pt?l.isArray()||l.isObject()?this.eachName(t,l.base):l.this?i(l,a):t(l.base.value,l.base,this):l instanceof g?l:!(l instanceof w)&&l.error(\"illegal parameter \"+l.compile())}},{key:\"renameParam\",value:function(t,n){var r,i;return r=function(e){return e===t},i=function(e,t){var r;return t instanceof ot?(r=e,e.this&&(r=e.properties[0].name),e.this&&r.value===n.value?new Pt(n):new o(new Pt(r),n,\"object\")):n},this.replaceInContext(r,i)}}]),n}(a);return e.prototype.children=[\"name\",\"value\"],e}.call(this),e.Splat=bt=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name=e.compile?e:new G(e),n}return _inherits(t,e),_createClass(t,[{key:\"isAssignable\",value:function(){return this.name.isAssignable()&&(!this.name.isAtomic||this.name.isAtomic())}},{key:\"assigns\",value:function(t){return this.name.assigns(t)}},{key:\"compileNode\",value:function(t){return[this.makeCode(\"...\")].concat(_toConsumableArray(this.name.compileToFragments(t,$)))}},{key:\"unwrap\",value:function(){return this.name}}]),t}(a);return e.prototype.children=[\"name\"],e}.call(this),e.Expansion=w=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(){return this.error(\"Expansion must be used inside a destructuring assignment or parameter list\")}},{key:\"asReference\",value:function(){return this}},{key:\"eachName\",value:function(){}}]),t}(a);return e.prototype.shouldCache=nt,e}.call(this),e.Elision=g=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function(n,r){var i;return i=_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileToFragments\",this).call(this,n,r),i.isElision=!0,i}},{key:\"compileNode\",value:function(){return[this.makeCode(\", \")]}},{key:\"asReference\",value:function(){return this}},{key:\"eachName\",value:function(){}}]),t}(a);return e.prototype.isAssignable=Bt,e.prototype.shouldCache=nt,e}.call(this),e.While=Ht=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.condition=(null==n?void 0:n.invert)?e.invert():e,r.guard=null==n?void 0:n.guard,r}return _inherits(t,e),_createClass(t,[{key:\"makeReturn\",value:function(n){return n?_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"makeReturn\",this).call(this,n):(this.returns=!this.jumps(),this)}},{key:\"addBody\",value:function(t){return this.body=t,this}},{key:\"jumps\",value:function(){var t,n,r,i,s;if(t=this.body.expressions,!t.length)return!1;for(n=0,i=t.length;n<i;n++)if(s=t[n],r=s.jumps({loop:!0}))return r;return!1}},{key:\"compileNode\",value:function(t){var n,r,i,s;return t.indent+=Ct,s=\"\",r=this.body,r.isEmpty()?r=this.makeCode(\"\"):(this.returns&&(r.makeReturn(i=t.scope.freeVariable(\"results\")),s=\"\"+this.tab+i+\" = [];\\n\"),this.guard&&(1<r.expressions.length?r.expressions.unshift(new D((new ft(this.guard)).invert(),new wt(\"continue\"))):this.guard&&(r=f.wrap([new D(this.guard,r)]))),r=[].concat(this.makeCode(\"\\n\"),r.compileToFragments(t,K),this.makeCode(\"\\n\"+this.tab))),n=[].concat(this.makeCode(s+this.tab+\"while (\"),this.condition.compileToFragments(t,J),this.makeCode(\") {\"),r,this.makeCode(\"}\")),this.returns&&n.push(this.makeCode(\"\\n\"+this.tab+\"return \"+i+\";\")),n}}]),t}(a);return e.prototype.children=[\"condition\",\"guard\",\"body\"],e.prototype.isStatement=Bt,e}.call(this),e.Op=ut=function(){var e=function(e){function s(e,t,r,i){var o;_classCallCheck(this,s);var u=_possibleConstructorReturn(this,(s.__proto__||Object.getPrototypeOf(s)).call(this)),a;if(\"in\"===e){var f;return f=new q(t,r),_possibleConstructorReturn(u,f)}if(\"do\"===e){var l;return l=s.prototype.generateDo(t),_possibleConstructorReturn(u,l)}if(\"new\"===e){if((a=t.unwrap())instanceof h&&!a.do&&!a.isNew){var c;return c=a.newInstance(),_possibleConstructorReturn(u,c)}(t instanceof d&&t.bound||t.do)&&(t=new ft(t))}return u.operator=n[e]||e,u.first=t,u.second=r,u.flip=!!i,o=u,_possibleConstructorReturn(u,o)}return _inherits(s,e),_createClass(s,[{key:\"isNumber\",value:function(){var t;return this.isUnary()&&(\"+\"===(t=this.operator)||\"-\"===t)&&this.first instanceof Pt&&this.first.isNumber()}},{key:\"isAwait\",value:function(){return\"await\"===this.operator}},{key:\"isYield\",value:function(){var t;return\"yield\"===(t=this.operator)||\"yield*\"===t}},{key:\"isUnary\",value:function(){return!this.second}},{key:\"shouldCache\",value:function(){return!this.isNumber()}},{key:\"isChainable\",value:function(){var t;return\"<\"===(t=this.operator)||\">\"===t||\">=\"===t||\"<=\"===t||\"===\"===t||\"!==\"===t}},{key:\"invert\",value:function(){var t,n,i,o,u;if(this.isChainable()&&this.first.isChainable()){for(t=!0,n=this;n&&n.operator;)t&&(t=n.operator in r),n=n.first;if(!t)return(new ft(this)).invert();for(n=this;n&&n.operator;)n.invert=!n.invert,n.operator=r[n.operator],n=n.first;return this}return(o=r[this.operator])?(this.operator=o,this.first.unwrap()instanceof s&&this.first.invert(),this):this.second?(new ft(this)).invert():\"!\"===this.operator&&(i=this.first.unwrap())instanceof s&&(\"!\"===(u=i.operator)||\"in\"===u||\"instanceof\"===u)?i:new s(\"!\",this)}},{key:\"unfoldSoak\",value:function(t){var n;return(\"++\"===(n=this.operator)||\"--\"===n||\"delete\"===n)&&on(t,this,\"first\")}},{key:\"generateDo\",value:function(t){var n,r,i,s,u,a,f,l;for(a=[],r=t instanceof o&&(f=t.value.unwrap())instanceof d?f:t,l=r.params||[],i=0,s=l.length;i<s;i++)u=l[i],u.value?(a.push(u.value),delete u.value):a.push(u);return n=new h(t,a),n.do=!0,n}},{key:\"compileNode\",value:function(t){var n,r,i,s,o,u;if(r=this.isChainable()&&this.first.isChainable(),r||(this.first.front=this.front),\"delete\"===this.operator&&t.scope.check(this.first.unwrapAll().value)&&this.error(\"delete operand may not be argument or var\"),(\"--\"===(o=this.operator)||\"++\"===o)&&(s=Qt(this.first.unwrapAll().value),s&&this.first.error(s)),this.isYield()||this.isAwait())return this.compileContinuation(t);if(this.isUnary())return this.compileUnary(t);if(r)return this.compileChain(t);switch(this.operator){case\"?\":return this.compileExistence(t,this.second.isDefaultValue);case\"**\":return this.compilePower(t);case\"//\":return this.compileFloorDivision(t);case\"%%\":return this.compileModulo(t);default:return i=this.first.compileToFragments(t,$),u=this.second.compileToFragments(t,$),n=[].concat(i,this.makeCode(\" \"+this.operator+\" \"),u),t.level<=$?n:this.wrapInParentheses(n)}}},{key:\"compileChain\",value:function(t){var n=this.first.second.cache(t),r=_slicedToArray(n,2),i,s,o;return this.first.second=r[0],o=r[1],s=this.first.compileToFragments(t,$),i=s.concat(this.makeCode(\" \"+(this.invert?\"&&\":\"||\")+\" \"),o.compileToFragments(t),this.makeCode(\" \"+this.operator+\" \"),this.second.compileToFragments(t,$)),this.wrapInParentheses(i)}},{key:\"compileExistence\",value:function(t,n){var r,i;return this.first.shouldCache()?(i=new _(t.scope.freeVariable(\"ref\")),r=new ft(new o(i,this.first))):(r=this.first,i=r),(new D(new b(r,n),i,{type:\"if\"})).addElse(this.second).compileToFragments(t)}},{key:\"compileUnary\",value:function(t){var n,r,i;return(r=[],n=this.operator,r.push([this.makeCode(n)]),\"!\"===n&&this.first instanceof b)?(this.first.negated=!this.first.negated,this.first.compileToFragments(t)):t.level>=W?(new ft(this)).compileToFragments(t):(i=\"+\"===n||\"-\"===n,(\"new\"===n||\"typeof\"===n||\"delete\"===n||i&&this.first instanceof s&&this.first.operator===n)&&r.push([this.makeCode(\" \")]),(i&&this.first instanceof s||\"new\"===n&&this.first.isStatement(t))&&(this.first=new ft(this.first)),r.push(this.first.compileToFragments(t,$)),this.flip&&r.reverse(),this.joinFragmentArrays(r,\"\"))}},{key:\"compileContinuation\",value:function(n){var r,i,s,o;return i=[],r=this.operator,null==n.scope.parent&&this.error(this.operator+\" can only occur inside functions\"),(null==(s=n.scope.method)?void 0:s.bound)&&n.scope.method.isGenerator&&this.error(\"yield cannot occur inside bound (fat arrow) functions\"),0<=t.call(Object.keys(this.first),\"expression\")&&!(this.first instanceof Ot)?null!=this.first.expression&&i.push(this.first.expression.compileToFragments(n,$)):(n.level>=J&&i.push([this.makeCode(\"(\")]),i.push([this.makeCode(r)]),\"\"!==(null==(o=this.first.base)?void 0:o.value)&&i.push([this.makeCode(\" \")]),i.push(this.first.compileToFragments(n,$)),n.level>=J&&i.push([this.makeCode(\")\")])),this.joinFragmentArrays(i,\"\")}},{key:\"compilePower\",value:function(t){var n;return n=new Pt(new _(\"Math\"),[new i(new ct(\"pow\"))]),(new h(n,[this.first,this.second])).compileToFragments(t)}},{key:\"compileFloorDivision\",value:function(t){var n,r,o;return r=new Pt(new _(\"Math\"),[new i(new ct(\"floor\"))]),o=this.second.shouldCache()?new ft(this.second):this.second,n=new s(\"/\",this.first,o),(new h(r,[n])).compileToFragments(t)}},{key:\"compileModulo\",value:function(t){var n;return n=new Pt(new G(an(\"modulo\",t))),(new h(n,[this.first,this.second])).compileToFragments(t)}},{key:\"toString\",value:function u(e){return _get(s.prototype.__proto__||Object.getPrototypeOf(s.prototype),\"toString\",this).call(this,e,this.constructor.name+\" \"+this.operator)}}]),s}(a),n,r;return n={\"==\":\"===\",\"!=\":\"!==\",of:\"in\",yieldfrom:\"yield*\"},r={\"!==\":\"===\",\"===\":\"!==\"},e.prototype.children=[\"first\",\"second\"],e}.call(this),e.In=q=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.object=e,r.array=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r,i,s,o;if(this.array instanceof Pt&&this.array.isArray()&&this.array.base.objects.length){for(o=this.array.base.objects,r=0,i=o.length;r<i;r++)if(s=o[r],s instanceof bt){n=!0;break}if(!n)return this.compileOrTest(t)}return this.compileLoopTest(t)}},{key:\"compileOrTest\",value:function(t){var n=this.object.cache(t,$),r=_slicedToArray(n,2),i,s,o,u,a,f,l,c,h,p;h=r[0],l=r[1];var d=this.negated?[\" !== \",\" && \"]:[\" === \",\" || \"],v=_slicedToArray(d,2);for(i=v[0],s=v[1],p=[],c=this.array.base.objects,o=a=0,f=c.length;a<f;o=++a)u=c[o],o&&p.push(this.makeCode(s)),p=p.concat(o?l:h,this.makeCode(i),u.compileToFragments(t,W));return t.level<$?p:this.wrapInParentheses(p)}},{key:\"compileLoopTest\",value:function(t){var n=this.object.cache(t,V),r=_slicedToArray(n,2),i,s,o;return(o=r[0],s=r[1],i=[].concat(this.makeCode(an(\"indexOf\",t)+\".call(\"),this.array.compileToFragments(t,V),this.makeCode(\", \"),s,this.makeCode(\") \"+(this.negated?\"< 0\":\">= 0\"))),Xt(o)===Xt(s))?i:(i=o.concat(this.makeCode(\", \"),i),t.level<V?i:this.wrapInParentheses(i))}},{key:\"toString\",value:function n(e){return _get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"toString\",this).call(this,e,this.constructor.name+(this.negated?\"!\":\"\"))}}]),t}(a);return e.prototype.children=[\"object\",\"array\"],e.prototype.invert=tt,e}.call(this),e.Try=Mt=function(){var e=function(e){function t(e,n,r,i){_classCallCheck(this,t);var s=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return s.attempt=e,s.errorVariable=n,s.recovery=r,s.ensure=i,s}return _inherits(t,e),_createClass(t,[{key:\"jumps\",value:function(t){var n;return this.attempt.jumps(t)||(null==(n=this.recovery)?void 0:n.jumps(t))}},{key:\"makeReturn\",value:function(t){return this.attempt&&(this.attempt=this.attempt.makeReturn(t)),this.recovery&&(this.recovery=this.recovery.makeReturn(t)),this}},{key:\"compileNode\",value:function(t){var n,r,i,s,u,a;return t.indent+=Ct,a=this.attempt.compileToFragments(t,K),n=this.recovery?(i=t.scope.freeVariable(\"error\",{reserve:!1}),u=new _(i),this.errorVariable?(s=Qt(this.errorVariable.unwrapAll().value),s?this.errorVariable.error(s):void 0,this.recovery.unshift(new o(this.errorVariable,u))):void 0,[].concat(this.makeCode(\" catch (\"),u.compileToFragments(t),this.makeCode(\") {\\n\"),this.recovery.compileToFragments(t,K),this.makeCode(\"\\n\"+this.tab+\"}\"))):this.ensure||this.recovery?[]:(i=t.scope.freeVariable(\"error\",{reserve:!1}),[this.makeCode(\" catch (\"+i+\") {}\")]),r=this.ensure?[].concat(this.makeCode(\" finally {\\n\"),this.ensure.compileToFragments(t,K),this.makeCode(\"\\n\"+this.tab+\"}\")):[],[].concat(this.makeCode(this.tab+\"try {\\n\"),a,this.makeCode(\"\\n\"+this.tab+\"}\"),n,r)}}]),t}(a);return e.prototype.children=[\"attempt\",\"recovery\",\"ensure\"],e.prototype.isStatement=Bt,e}.call(this),e.Throw=Ot=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.expression=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n;return n=this.expression.compileToFragments(t,V),un(n,this.makeCode(\"throw \")),n.unshift(this.makeCode(this.tab)),n.push(this.makeCode(\";\")),n}}]),t}(a);return e.prototype.children=[\"expression\"],e.prototype.isStatement=Bt,e.prototype.jumps=nt,e.prototype.makeReturn=kt,e}.call(this),e.Existence=b=function(){var e=function(e){function n(e){var r=1<arguments.length&&void 0!==arguments[1]&&arguments[1];_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),s;return i.expression=e,i.comparisonTarget=r?\"undefined\":\"null\",s=[],i.expression.traverseChildren(!0,function(e){var n,r,i,o;if(e.comments){for(o=e.comments,r=0,i=o.length;r<i;r++)n=o[r],0>t.call(s,n)&&s.push(n);return delete e.comments}}),It(s,i),Zt(i.expression,i),i}return _inherits(n,e),_createClass(n,[{key:\"compileNode\",value:function(t){var n,r,i;if(this.expression.front=this.front,i=this.expression.compile(t,$),this.expression.unwrap()instanceof _&&!t.scope.check(i)){var s=this.negated?[\"===\",\"||\"]:[\"!==\",\"&&\"],o=_slicedToArray(s,2);n=o[0],r=o[1],i=\"typeof \"+i+\" \"+n+' \"undefined\"'+(\"undefined\"===this.comparisonTarget?\"\":\" \"+r+\" \"+i+\" \"+n+\" \"+this.comparisonTarget)}else n=\"null\"===this.comparisonTarget?this.negated?\"==\":\"!=\":this.negated?\"===\":\"!==\",i=i+\" \"+n+\" \"+this.comparisonTarget;return[this.makeCode(t.level<=X?i:\"(\"+i+\")\")]}}]),n}(a);return e.prototype.children=[\"expression\"],e.prototype.invert=tt,e}.call(this),e.Parens=ft=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.body=e,n}return _inherits(t,e),_createClass(t,[{key:\"unwrap\",value:function(){return this.body}},{key:\"shouldCache\",value:function(){return this.body.shouldCache()}},{key:\"compileNode\",value:function(t){var n,r,i,s,o;return(r=this.body.unwrap(),o=null==(s=r.comments)?void 0:s.some(function(e){return e.here&&!e.unshift&&!e.newLine}),r instanceof Pt&&r.isAtomic()&&!this.csxAttribute&&!o)?(r.front=this.front,r.compileToFragments(t)):(i=r.compileToFragments(t,J),n=t.level<$&&!o&&(r instanceof ut||r.unwrap()instanceof h||r instanceof L&&r.returns)&&(t.level<X||3>=i.length),this.csxAttribute?this.wrapInBraces(i):n?i:this.wrapInParentheses(i))}}]),t}(a);return e.prototype.children=[\"body\"],e}.call(this),e.StringWithInterpolations=St=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.body=e,n}return _inherits(t,e),_createClass(t,[{key:\"unwrap\",value:function(){return this}},{key:\"shouldCache\",value:function(){return this.body.shouldCache()}},{key:\"compileNode\",value:function(n){var r,i,s,o,u,a,f,l,c;if(this.csxAttribute)return c=new ft(new t(this.body)),c.csxAttribute=!0,c.compileNode(n);for(o=this.body.unwrap(),s=[],l=[],o.traverseChildren(!1,function(e){var t,n,r,i,o,u;if(e instanceof Et){if(e.comments){var a;(a=l).push.apply(a,_toConsumableArray(e.comments)),delete e.comments}return s.push(e),!0}if(e instanceof ft){if(0!==l.length){for(n=0,i=l.length;n<i;n++)t=l[n],t.unshift=!0,t.newLine=!0;It(l,e)}return s.push(e),!1}if(e.comments){if(0===s.length||s[s.length-1]instanceof Et){var f;(f=l).push.apply(f,_toConsumableArray(e.comments))}else{for(u=e.comments,r=0,o=u.length;r<o;r++)t=u[r],t.unshift=!1,t.newLine=!0;It(e.comments,s[s.length-1])}delete e.comments}return!0}),u=[],this.csx||u.push(this.makeCode(\"`\")),a=0,f=s.length;a<f;a++)if(i=s[a],i instanceof Et){var h;i.value=i.unquote(!0,this.csx),this.csx||(i.value=i.value.replace(/(\\\\*)(`|\\$\\{)/g,function(e,t,n){return 0==t.length%2?t+\"\\\\\"+n:e})),(h=u).push.apply(h,_toConsumableArray(i.compileToFragments(n)))}else{var p;this.csx||u.push(this.makeCode(\"$\")),r=i.compileToFragments(n,J),(!this.isNestedTag(i)||r.some(function(e){return null!=e.comments}))&&(r=this.wrapInBraces(r),r[0].isStringWithInterpolations=!0,r[r.length-1].isStringWithInterpolations=!0),(p=u).push.apply(p,_toConsumableArray(r))}return this.csx||u.push(this.makeCode(\"`\")),u}},{key:\"isNestedTag\",value:function(t){var n,r,i;return r=null==(i=t.body)?void 0:i.expressions,n=null==r?void 0:r[0].unwrap(),this.csx&&r&&1===r.length&&n instanceof h&&n.csx}}]),t}(a);return e.prototype.children=[\"body\"],e}.call(this),e.For=L=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),i,s,o,u,a,l;if(r.source=n.source,r.guard=n.guard,r.step=n.step,r.name=n.name,r.index=n.index,r.body=f.wrap([e]),r.own=null!=n.own,r.object=null!=n.object,r.from=null!=n.from,r.from&&r.index&&r.index.error(\"cannot use index with for-from\"),r.own&&!r.object&&n.ownTag.error(\"cannot use own with for-\"+(r.from?\"from\":\"in\")),r.object){var c=[r.index,r.name];r.name=c[0],r.index=c[1]}for(((null==(u=r.index)?void 0:\"function\"==typeof u.isArray?u.isArray():void 0)||(null==(a=r.index)?void 0:\"function\"==typeof a.isObject?a.isObject():void 0))&&r.index.error(\"index cannot be a pattern matching expression\"),r.range=r.source instanceof Pt&&r.source.base instanceof ht&&!r.source.properties.length&&!r.from,r.pattern=r.name instanceof Pt,r.range&&r.index&&r.index.error(\"indexes do not apply to range loops\"),r.range&&r.pattern&&r.name.error(\"cannot pattern match over range loops\"),r.returns=!1,l=[\"source\",\"guard\",\"step\",\"name\",\"index\"],s=0,o=l.length;s<o;s++)(i=l[s],!!r[i])&&(r[i].traverseChildren(!0,function(e){var t,n,s,o;if(e.comments){for(o=e.comments,n=0,s=o.length;n<s;n++)t=o[n],t.newLine=t.unshift=!0;return Zt(e,r[i])}}),Zt(r[i],r));return r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,i,s,u,a,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,P,H,B,j,F,I,q,R;if(s=f.wrap([this.body]),A=s.expressions,n=r.call(A,-1),i=_slicedToArray(n,1),T=i[0],n,(null==T?void 0:T.jumps())instanceof vt&&(this.returns=!1),B=this.range?this.source.base:this.source,H=t.scope,this.pattern||(C=this.name&&this.name.compile(t,V)),w=this.index&&this.index.compile(t,V),C&&!this.pattern&&H.find(C),w&&!(this.index instanceof Pt)&&H.find(w),this.returns&&(P=H.freeVariable(\"results\")),this.from?this.pattern&&(E=H.freeVariable(\"x\",{single:!0})):E=this.object&&w||H.freeVariable(\"i\",{single:!0}),S=(this.range||this.from)&&C||w||E,x=S===E?\"\":S+\" = \",this.step&&!this.range){var U=this.cacheToCodeFragments(this.step.cache(t,V,tn)),z=_slicedToArray(U,2);j=z[0],I=z[1],this.step.isNumber()&&(F=+I)}return this.pattern&&(C=E),R=\"\",g=\"\",p=\"\",y=this.tab+Ct,this.range?v=B.compileToFragments(Yt(t,{index:E,name:C,step:this.step,shouldCache:tn})):(q=this.source.compile(t,V),(C||this.own)&&!(this.source.unwrap()instanceof _)&&(p+=\"\"+this.tab+(L=H.freeVariable(\"ref\"))+\" = \"+q+\";\\n\",q=L),C&&!this.pattern&&!this.from&&(k=C+\" = \"+q+\"[\"+S+\"]\"),!this.object&&!this.from&&(j!==I&&(p+=\"\"+this.tab+j+\";\\n\"),d=0>F,(!this.step||null==F||!d)&&(N=H.freeVariable(\"len\")),c=\"\"+x+E+\" = 0, \"+N+\" = \"+q+\".length\",h=\"\"+x+E+\" = \"+q+\".length - 1\",a=E+\" < \"+N,l=E+\" >= 0\",this.step?(null==F?(a=I+\" > 0 ? \"+a+\" : \"+l,c=\"(\"+I+\" > 0 ? (\"+c+\") : \"+h+\")\"):d&&(a=l,c=h),b=E+\" += \"+I):b=\"\"+(S===E?E+\"++\":\"++\"+E),v=[this.makeCode(c+\"; \"+a+\"; \"+x+b)])),this.returns&&(O=\"\"+this.tab+P+\" = [];\\n\",M=\"\\n\"+this.tab+\"return \"+P+\";\",s.makeReturn(P)),this.guard&&(1<s.expressions.length?s.expressions.unshift(new D((new ft(this.guard)).invert(),new wt(\"continue\"))):this.guard&&(s=f.wrap([new D(this.guard,s)]))),this.pattern&&s.expressions.unshift(new o(this.name,this.from?new _(S):new G(q+\"[\"+S+\"]\"))),k&&(R=\"\\n\"+y+k+\";\"),this.object?(v=[this.makeCode(S+\" in \"+q)],this.own&&(g=\"\\n\"+y+\"if (!\"+an(\"hasProp\",t)+\".call(\"+q+\", \"+S+\")) continue;\")):this.from&&(v=[this.makeCode(S+\" of \"+q)]),u=s.compileToFragments(Yt(t,{indent:y}),K),u&&0<u.length&&(u=[].concat(this.makeCode(\"\\n\"),u,this.makeCode(\"\\n\"))),m=[this.makeCode(p)],O&&m.push(this.makeCode(O)),m=m.concat(this.makeCode(this.tab),this.makeCode(\"for (\"),v,this.makeCode(\") {\"+g+R),u,this.makeCode(this.tab),this.makeCode(\"}\")),M&&m.push(this.makeCode(M)),m}}]),t}(Ht);return e.prototype.children=[\"body\",\"source\",\"guard\",\"step\"],e}.call(this),e.Switch=Nt=function(){var e=function(e){function t(e,n,r){_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.subject=e,i.cases=n,i.otherwise=r,i}return _inherits(t,e),_createClass(t,[{key:\"jumps\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{block:!0},n,r,i,s,o,u,a;for(u=this.cases,i=0,o=u.length;i<o;i++){var f=_slicedToArray(u[i],2);if(r=f[0],n=f[1],s=n.jumps(t))return s}return null==(a=this.otherwise)?void 0:a.jumps(t)}},{key:\"makeReturn\",value:function(t){var n,r,i,s,o;for(s=this.cases,n=0,r=s.length;n<r;n++)i=s[n],i[1].makeReturn(t);return t&&(this.otherwise||(this.otherwise=new f([new G(\"void 0\")]))),null!=(o=this.otherwise)&&o.makeReturn(t),this}},{key:\"compileNode\",value:function(t){var n,r,i,s,o,u,a,f,l,c,h,p,d,v,m;for(f=t.indent+Ct,l=t.indent=f+Ct,u=[].concat(this.makeCode(this.tab+\"switch (\"),this.subject?this.subject.compileToFragments(t,J):this.makeCode(\"false\"),this.makeCode(\") {\\n\")),v=this.cases,a=c=0,p=v.length;c<p;a=++c){var g=_slicedToArray(v[a],2);for(s=g[0],n=g[1],m=Wt([s]),h=0,d=m.length;h<d;h++)i=m[h],this.subject||(i=i.invert()),u=u.concat(this.makeCode(f+\"case \"),i.compileToFragments(t,J),this.makeCode(\":\\n\"));if(0<(r=n.compileToFragments(t,K)).length&&(u=u.concat(r,this.makeCode(\"\\n\"))),a===this.cases.length-1&&!this.otherwise)break;(o=this.lastNode(n.expressions),!(o instanceof vt||o instanceof Ot||o instanceof G&&o.jumps()&&\"debugger\"!==o.value))&&u.push(i.makeCode(l+\"break;\\n\"))}if(this.otherwise&&this.otherwise.expressions.length){var y;(y=u).push.apply(y,[this.makeCode(f+\"default:\\n\")].concat(_toConsumableArray(this.otherwise.compileToFragments(t,K)),[this.makeCode(\"\\n\")]))}return u.push(this.makeCode(this.tab+\"}\")),u}}]),t}(a);return e.prototype.children=[\"subject\",\"cases\",\"otherwise\"],e.prototype.isStatement=Bt,e}.call(this),e.If=D=function(){var e=function(e){function t(e,n){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.body=n,i.condition=\"unless\"===r.type?e.invert():e,i.elseBody=null,i.isChain=!1,i.soak=r.soak,i.condition.comments&&Zt(i.condition,i),i}return _inherits(t,e),_createClass(t,[{key:\"bodyNode\",value:function(){var t;return null==(t=this.body)?void 0:t.unwrap()}},{key:\"elseBodyNode\",value:function(){var t;return null==(t=this.elseBody)?void 0:t.unwrap()}},{key:\"addElse\",value:function(n){return this.isChain?this.elseBodyNode().addElse(n):(this.isChain=n instanceof t,this.elseBody=this.ensureBlock(n),this.elseBody.updateLocationDataIfMissing(n.locationData)),this}},{key:\"isStatement\",value:function(t){var n;return(null==t?void 0:t.level)===K||this.bodyNode().isStatement(t)||(null==(n=this.elseBodyNode())?void 0:n.isStatement(t))}},{key:\"jumps\",value:function(t){var n;return this.body.jumps(t)||(null==(n=this.elseBody)?void 0:n.jumps(t))}},{key:\"compileNode\",value:function(t){return this.isStatement(t)?this.compileStatement(t):this.compileExpression(t)}},{key:\"makeReturn\",value:function(t){return t&&(this.elseBody||(this.elseBody=new f([new G(\"void 0\")]))),this.body&&(this.body=new f([this.body.makeReturn(t)])),this.elseBody&&(this.elseBody=new f([this.elseBody.makeReturn(t)])),this}},{key:\"ensureBlock\",value:function(t){return t instanceof f?t:new f([t])}},{key:\"compileStatement\",value:function(n){var r,i,s,o,u,a,f;return(s=Rt(n,\"chainChild\"),u=Rt(n,\"isExistentialEquals\"),u)?(new t(this.condition.invert(),this.elseBodyNode(),{type:\"if\"})).compileToFragments(n):(f=n.indent+Ct,o=this.condition.compileToFragments(n,J),i=this.ensureBlock(this.body).compileToFragments(Yt(n,{indent:f})),a=[].concat(this.makeCode(\"if (\"),o,this.makeCode(\") {\\n\"),i,this.makeCode(\"\\n\"+this.tab+\"}\")),s||a.unshift(this.makeCode(this.tab)),!this.elseBody)?a:(r=a.concat(this.makeCode(\" else \")),this.isChain?(n.chainChild=!0,r=r.concat(this.elseBody.unwrap().compileToFragments(n,K))):r=r.concat(this.makeCode(\"{\\n\"),this.elseBody.compileToFragments(Yt(n,{indent:f}),K),this.makeCode(\"\\n\"+this.tab+\"}\")),r)}},{key:\"compileExpression\",value:function(t){var n,r,i,s;return i=this.condition.compileToFragments(t,X),r=this.bodyNode().compileToFragments(t,V),n=this.elseBodyNode()?this.elseBodyNode().compileToFragments(t,V):[this.makeCode(\"void 0\")],s=i.concat(this.makeCode(\" ? \"),r,this.makeCode(\" : \"),n),t.level>=X?this.wrapInParentheses(s):s}},{key:\"unfoldSoak\",value:function(){return this.soak&&this}}]),t}(a);return e.prototype.children=[\"condition\",\"body\",\"elseBody\"],e}.call(this),_t={modulo:function(){return\"function(a, b) { return (+a % (b = +b) + b) % b; }\"},objectWithoutKeys:function(){return\"function(o, ks) { var res = {}; for (var k in o) ([].indexOf.call(ks, k) < 0 && {}.hasOwnProperty.call(o, k)) && (res[k] = o[k]); return res; }\"},boundMethodCheck:function(){return\"function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } }\"},_extends:function(){return\"Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }\"},hasProp:function(){return\"{}.hasOwnProperty\"},indexOf:function(){return\"[].indexOf\"},slice:function(){return\"[].slice\"},splice:function(){return\"[].splice\"}},K=1,J=2,V=3,X=4,$=5,W=6,Ct=\"  \",mt=/^[+-]?\\d+$/,an=function(e,t){var n,r;return r=t.scope.root,e in r.utilities?r.utilities[e]:(n=r.freeVariable(e),r.assign(n,_t[e](t)),r.utilities[e]=n)},en=function(e,t){var n=!(2<arguments.length&&void 0!==arguments[2])||arguments[2],r;return r=\"\\n\"===e[e.length-1],e=(n?t:\"\")+e.replace(/\\n/g,\"$&\"+t),e=e.replace(/\\s+$/,\"\"),r&&(e+=\"\\n\"),e},$t=function(e,t){var n,r,i,s;for(r=i=0,s=e.length;i<s;r=++i){if(n=e[r],!n.isHereComment){e.splice(r,0,t.makeCode(\"\"+t.tab));break}n.code=en(n.code,t.tab)}return e},Vt=function(e){var t,n,r,i;if(!e.comments)return!1;for(i=e.comments,n=0,r=i.length;n<r;n++)if(t=i[n],!1===t.here)return!0;return!1},Zt=function(e,t){if(null!=e&&e.comments)return It(e.comments,t),delete e.comments},un=function(e,t){var n,r,i,s,o;for(i=!1,r=s=0,o=e.length;s<o;r=++s)if(n=e[r],!n.isComment){e.splice(r,0,t),i=!0;break}return i||e.push(t),e},Jt=function(e){return e instanceof _&&\"arguments\"===e.value},Kt=function(e){return e instanceof At||e instanceof d&&e.bound},tn=function(e){return e.shouldCache()||(\"function\"==typeof e.isAssignable?e.isAssignable():void 0)},on=function(e,t,n){var r;if(r=t[n].unfoldSoak(e))return t[n]=r.body,r.body=new Pt(t),r}}.call(this),{exports:e}.exports}(),require[\"./sourcemap\"]=function(){var e={exports:{}};return function(){var t,n;t=function(){function e(t){_classCallCheck(this,e),this.line=t,this.columns=[]}return _createClass(e,[{key:\"add\",value:function(t,n){var r=_slicedToArray(n,2),i=r[0],s=r[1],o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return this.columns[t]&&o.noReplace?void 0:this.columns[t]={line:this.line,column:t,sourceLine:i,sourceColumn:s}}},{key:\"sourceLocation\",value:function(t){for(var n;!((n=this.columns[t])||0>=t);)t--;return n&&[n.sourceLine,n.sourceColumn]}}]),e}(),n=function(){var e=function(){function e(){_classCallCheck(this,e),this.lines=[]}return _createClass(e,[{key:\"add\",value:function(n,r){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},s=_slicedToArray(r,2),o,u,f,l;return f=s[0],u=s[1],l=(o=this.lines)[f]||(o[f]=new t(f)),l.add(u,n,i)}},{key:\"sourceLocation\",value:function(t){for(var n=_slicedToArray(t,2),r=n[0],i=n[1],s;!((s=this.lines[r])||0>=r);)r--;return s&&s.sourceLocation(i)}},{key:\"generate\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b;for(b=0,o=0,a=0,u=0,d=!1,r=\"\",v=this.lines,h=i=0,f=v.length;i<f;h=++i)if(c=v[h],c)for(m=c.columns,s=0,l=m.length;s<l;s++)if(p=m[s],!!p){for(;b<p.line;)o=0,d=!1,r+=\";\",b++;d&&(r+=\",\",d=!1),r+=this.encodeVlq(p.column-o),o=p.column,r+=this.encodeVlq(0),r+=this.encodeVlq(p.sourceLine-a),a=p.sourceLine,r+=this.encodeVlq(p.sourceColumn-u),u=p.sourceColumn,d=!0}return g=t.sourceFiles?t.sourceFiles:t.filename?[t.filename]:[\"<anonymous>\"],y={version:3,file:t.generatedFile||\"\",sourceRoot:t.sourceRoot||\"\",sources:g,names:[],mappings:r},(t.sourceMap||t.inlineMap)&&(y.sourcesContent=[n]),y}},{key:\"encodeVlq\",value:function(t){var n,u,a,f;for(n=\"\",a=0>t?1:0,f=(_Mathabs(t)<<1)+a;f||!n;)u=f&s,f>>=i,f&&(u|=r),n+=this.encodeBase64(u);return n}},{key:\"encodeBase64\",value:function(t){return n[t]||function(){throw new Error(\"Cannot Base64 encode value: \"+t)}()}}]),e}(),n,r,i,s;return i=5,r=1<<i,s=r-1,n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",e}.call(this),e.exports=n}.call(this),e.exports}(),require[\"./coffeescript\"]=function(){var e={};return function(){var t=[].indexOf,n=require(\"./lexer\"),r,i,s,o,u,a,f,l,c,h,p,d,v,m,g;i=n.Lexer;var y=require(\"./parser\");d=y.parser,c=require(\"./helpers\"),s=require(\"./sourcemap\"),p=require(\"../../package.json\"),e.VERSION=p.version,e.FILE_EXTENSIONS=r=[\".coffee\",\".litcoffee\",\".coffee.md\"],e.helpers=c,o=function(e){switch(!1){case\"function\"!=typeof Buffer:return Buffer.from(e).toString(\"base64\");case\"function\"!=typeof btoa:return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(e,t){return _StringfromCharCode(\"0x\"+t)}));default:throw new Error(\"Unable to base64 encode inline sourcemap.\")}},g=function(e){return function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n;try{return r.call(this,e,t)}catch(r){throw(n=r,\"string\"!=typeof e)?n:c.updateSyntaxError(n,e,t.filename)}}},m={},v={},e.compile=a=g(function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n,r,i,a,f,l,p,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P;if(t=Object.assign({},t),p=t.sourceMap||t.inlineMap||null==t.filename,a=t.filename||\"<anonymous>\",u(a,e),null==m[a]&&(m[a]=[]),m[a].push(e),p&&(x=new s),O=h.tokenize(e,t),t.referencedVars=function(){var e,t,n;for(n=[],e=0,t=O.length;e<t;e++)A=O[e],\"IDENTIFIER\"===A[0]&&n.push(A[1]);return n}(),null==t.bare||!0!==t.bare)for(y=0,E=O.length;y<E;y++)if(A=O[y],\"IMPORT\"===(N=A[0])||\"EXPORT\"===N){t.bare=!0;break}for(l=d.parse(O).compileToFragments(t),r=0,t.header&&(r+=1),t.shiftLine&&(r+=1),n=0,w=\"\",b=0,S=l.length;b<S;b++)f=l[b],p&&(f.locationData&&!/^[;\\s]*$/.test(f.code)&&x.add([f.locationData.first_line,f.locationData.first_column],[r,n],{noReplace:!0}),T=c.count(f.code,\"\\n\"),r+=T,T?n=f.code.length-(f.code.lastIndexOf(\"\\n\")+1):n+=f.code.length),w+=f.code;if(t.header&&(g=\"Generated by CoffeeScript \"+this.VERSION,w=\"// \"+g+\"\\n\"+w),p&&(P=x.generate(t,e),null==v[a]&&(v[a]=[]),v[a].push(x)),t.transpile){if(\"object\"!==_typeof(t.transpile))throw new Error(\"The transpile option must be given an object with options to pass to Babel\");M=t.transpile.transpile,delete t.transpile.transpile,_=Object.assign({},t.transpile),P&&null==_.inputSourceMap&&(_.inputSourceMap=P),D=M(w,_),w=D.code,P&&D.map&&(P=D.map)}return t.inlineMap&&(i=o(JSON.stringify(P)),k=\"//# sourceMappingURL=data:application/json;base64,\"+i,L=\"//# sourceURL=\"+(null==(C=t.filename)?\"coffeescript\":C),w=w+\"\\n\"+k+\"\\n\"+L),t.sourceMap?{js:w,sourceMap:x,v3SourceMap:JSON.stringify(P,null,2)}:w}),e.tokens=g(function(e,t){return h.tokenize(e,t)}),e.nodes=g(function(e,t){return\"string\"==typeof e?d.parse(h.tokenize(e,t)):d.parse(e)}),e.run=e.eval=e.register=function(){throw new Error(\"require index.coffee, not this file\")},h=new i,d.lexer={lex:function(){var t,n;if(n=d.tokens[this.pos++],n){var r=n,i=_slicedToArray(r,3);t=i[0],this.yytext=i[1],this.yylloc=i[2],d.errorToken=n.origin||n,this.yylineno=this.yylloc.first_line}else t=\"\";return t},setInput:function(t){return d.tokens=t,this.pos=0},upcomingInput:function(){return\"\"}},d.yy=require(\"./nodes\"),d.yy.parseError=function(e,t){var n=t.token,r=d,i,s,o,u,a;u=r.errorToken,a=r.tokens;var f=u,l=_slicedToArray(f,3);return s=l[0],o=l[1],i=l[2],o=function(){switch(!1){case u!==a[a.length-1]:return\"end of input\";case\"INDENT\"!==s&&\"OUTDENT\"!==s:return\"indentation\";case\"IDENTIFIER\"!==s&&\"NUMBER\"!==s&&\"INFINITY\"!==s&&\"STRING\"!==s&&\"STRING_START\"!==s&&\"REGEX\"!==s&&\"REGEX_START\"!==s:return s.replace(/_START$/,\"\").toLowerCase();default:return c.nameWhitespaceCharacter(o)}}(),c.throwSyntaxError(\"unexpected \"+o,i)},f=function(e,t){var n,r,i,s,o,u,a,f,l,c,h,p;return s=void 0,i=\"\",e.isNative()?i=\"native\":(e.isEval()?(s=e.getScriptNameOrSourceURL(),!s&&(i=e.getEvalOrigin()+\", \")):s=e.getFileName(),s||(s=\"<anonymous>\"),f=e.getLineNumber(),r=e.getColumnNumber(),c=t(s,f,r),i=c?s+\":\"+c[0]+\":\"+c[1]:s+\":\"+f+\":\"+r),o=e.getFunctionName(),u=e.isConstructor(),a=!e.isToplevel()&&!u,a?(l=e.getMethodName(),p=e.getTypeName(),o?(h=n=\"\",p&&o.indexOf(p)&&(h=p+\".\"),l&&o.indexOf(\".\"+l)!==o.length-l.length-1&&(n=\" [as \"+l+\"]\"),\"\"+h+o+n+\" (\"+i+\")\"):p+\".\"+(l||\"<anonymous>\")+\" (\"+i+\")\"):u?\"new \"+(o||\"<anonymous>\")+\" (\"+i+\")\":o?o+\" (\"+i+\")\":i},l=function(e,n,i){var s,o,u,f,l,h;if(\"<anonymous>\"===e||(f=e.slice(e.lastIndexOf(\".\")),0<=t.call(r,f))){if(\"<anonymous>\"!==e&&null!=v[e])return v[e][v[e].length-1];if(null!=v[\"<anonymous>\"])for(l=v[\"<anonymous>\"],o=l.length-1;0<=o;o+=-1)if(u=l[o],h=u.sourceLocation([n-1,i-1]),null!=(null==h?void 0:h[0])&&null!=h[1])return u;return null==m[e]?null:(s=a(m[e][m[e].length-1],{filename:e,sourceMap:!0,literate:c.isLiterate(e)}),s.sourceMap)}return null},Error.prepareStackTrace=function(t,n){var r,i,s;return s=function(e,t,n){var r,i;return i=l(e,t,n),null!=i&&(r=i.sourceLocation([t-1,n-1])),null==r?null:[r[0]+1,r[1]+1]},i=function(){var t,i,o;for(o=[],t=0,i=n.length;t<i&&(r=n[t],r.getFunction()!==e.run);t++)o.push(\"    at \"+f(r,s));return o}(),t.toString()+\"\\n\"+i.join(\"\\n\")+\"\\n\"},u=function(e,t){var n,r,i,s;if(r=t.split(/$/m)[0],s=null==r?void 0:r.match(/^#!\\s*([^\\s]+\\s*)(.*)/),n=null==s||null==(i=s[2])?void 0:i.split(/\\s/).filter(function(e){return\"\"!==e}),1<(null==n?void 0:n.length))return console.error(\"The script to be run begins with a shebang line with more than one\\nargument. This script will fail on platforms such as Linux which only\\nallow a single argument.\"),console.error(\"The shebang line was: '\"+r+\"' in file '\"+e+\"'\"),console.error(\"The arguments were: \"+JSON.stringify(n))}}.call(this),{exports:e}.exports}(),require[\"./browser\"]=function(){var exports={},module={exports:exports};return function(){var indexOf=[].indexOf,CoffeeScript,compile,runScripts;CoffeeScript=require(\"./coffeescript\"),compile=CoffeeScript.compile,CoffeeScript.eval=function(code){var options=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return null==options.bare&&(options.bare=!0),eval(compile(code,options))},CoffeeScript.run=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.bare=!0,t.shiftLine=!0,Function(compile(e,t))()},module.exports=CoffeeScript,\"undefined\"==typeof window||null===window||(\"undefined\"!=typeof btoa&&null!==btoa&&\"undefined\"!=typeof JSON&&null!==JSON&&(compile=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.inlineMap=!0,CoffeeScript.compile(e,t)}),CoffeeScript.load=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},r=3<arguments.length&&void 0!==arguments[3]&&arguments[3],i;return n.sourceFiles=[e],i=window.ActiveXObject?new window.ActiveXObject(\"Microsoft.XMLHTTP\"):new window.XMLHttpRequest,i.open(\"GET\",e,!0),\"overrideMimeType\"in i&&i.overrideMimeType(\"text/plain\"),i.onreadystatechange=function(){var s,u;if(4===i.readyState){if(0!==(u=i.status)&&200!==u)throw new Error(\"Could not load \"+e);if(s=[i.responseText,n],!r){var f;(f=CoffeeScript).run.apply(f,_toConsumableArray(s))}if(t)return t(s)}},i.send(null)},runScripts=function(){var e,t,n,r,i,s,o,u,a,f;for(f=window.document.getElementsByTagName(\"script\"),t=[\"text/coffeescript\",\"text/literate-coffeescript\"],e=function(){var e,n,r,i;for(i=[],e=0,n=f.length;e<n;e++)u=f[e],(r=u.type,0<=indexOf.call(t,r))&&i.push(u);return i}(),i=0,n=function(){var r;if(r=e[i],r instanceof Array){var s;return(s=CoffeeScript).run.apply(s,_toConsumableArray(r)),i++,n()}},r=s=0,o=e.length;s<o;r=++s)a=e[r],function(r,i){var s,o;return s={literate:r.type===t[1]},o=r.src||r.getAttribute(\"data-src\"),o?(s.filename=o,CoffeeScript.load(o,function(t){return e[i]=t,n()},s,!0)):(s.filename=r.id&&\"\"!==r.id?r.id:\"coffeescript\"+(0===i?\"\":i),s.sourceFiles=[\"embedded\"],e[i]=[r.innerHTML,s])}(a,r);return n()},window.addEventListener?window.addEventListener(\"DOMContentLoaded\",runScripts,!1):window.attachEvent(\"onload\",runScripts))}.call(this),module.exports}(),require[\"./browser\"]}();\"function\"==typeof define&&define.amd?define(function(){return CoffeeScript}):root.CoffeeScript=CoffeeScript})(this)}),define(\"ace/mode/coffee_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"../mode/coffee/coffee\");window.addEventListener=function(){};var o=t.Worker=function(e){i.call(this,e),this.setTimeout(250)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue(),t=[];try{s.compile(e)}catch(n){var r=n.location;r&&t.push({row:r.first_line,column:r.first_column,endRow:r.last_line,endColumn:r.last_column,text:n.message,type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min/worker-css.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/css/csslint\",[],function(require,exports,module){function objectToString(e){return Object.prototype.toString.call(e)}function clone(e,t,n,r){function u(e,n){if(e===null)return null;if(n==0)return e;var a;if(typeof e!=\"object\")return e;if(util.isArray(e))a=[];else if(util.isRegExp(e))a=new RegExp(e.source,util.getRegExpFlags(e)),e.lastIndex&&(a.lastIndex=e.lastIndex);else if(util.isDate(e))a=new Date(e.getTime());else{if(o&&Buffer.isBuffer(e))return a=new Buffer(e.length),e.copy(a),a;typeof r==\"undefined\"?a=Object.create(Object.getPrototypeOf(e)):a=Object.create(r)}if(t){var f=i.indexOf(e);if(f!=-1)return s[f];i.push(e),s.push(a)}for(var l in e)a[l]=u(e[l],n-1);return a}var i=[],s=[],o=typeof Buffer!=\"undefined\";return typeof t==\"undefined\"&&(t=!0),typeof n==\"undefined\"&&(n=Infinity),u(e,n)}function Reporter(e,t){this.messages=[],this.stats=[],this.lines=e,this.ruleset=t}var parserlib={};(function(){function e(){this._listeners={}}function t(e){this._input=e.replace(/\\n\\r?/g,\"\\n\"),this._line=1,this._col=1,this._cursor=0}function n(e,t,n){this.col=n,this.line=t,this.message=e}function r(e,t,n,r){this.col=n,this.line=t,this.text=e,this.type=r}function i(e,n){this._reader=e?new t(e.toString()):null,this._token=null,this._tokenData=n,this._lt=[],this._ltIndex=0,this._ltIndexCache=[]}e.prototype={constructor:e,addListener:function(e,t){this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t)},fire:function(e){typeof e==\"string\"&&(e={type:e}),typeof e.target!=\"undefined\"&&(e.target=this);if(typeof e.type==\"undefined\")throw new Error(\"Event object missing 'type' property.\");if(this._listeners[e.type]){var t=this._listeners[e.type].concat();for(var n=0,r=t.length;n<r;n++)t[n].call(this,e)}},removeListener:function(e,t){if(this._listeners[e]){var n=this._listeners[e];for(var r=0,i=n.length;r<i;r++)if(n[r]===t){n.splice(r,1);break}}}},t.prototype={constructor:t,getCol:function(){return this._col},getLine:function(){return this._line},eof:function(){return this._cursor==this._input.length},peek:function(e){var t=null;return e=typeof e==\"undefined\"?1:e,this._cursor<this._input.length&&(t=this._input.charAt(this._cursor+e-1)),t},read:function(){var e=null;return this._cursor<this._input.length&&(this._input.charAt(this._cursor)==\"\\n\"?(this._line++,this._col=1):this._col++,e=this._input.charAt(this._cursor++)),e},mark:function(){this._bookmark={cursor:this._cursor,line:this._line,col:this._col}},reset:function(){this._bookmark&&(this._cursor=this._bookmark.cursor,this._line=this._bookmark.line,this._col=this._bookmark.col,delete this._bookmark)},readTo:function(e){var t=\"\",n;while(t.length<e.length||t.lastIndexOf(e)!=t.length-e.length){n=this.read();if(!n)throw new Error('Expected \"'+e+'\" at line '+this._line+\", col \"+this._col+\".\");t+=n}return t},readWhile:function(e){var t=\"\",n=this.read();while(n!==null&&e(n))t+=n,n=this.read();return t},readMatch:function(e){var t=this._input.substring(this._cursor),n=null;return typeof e==\"string\"?t.indexOf(e)===0&&(n=this.readCount(e.length)):e instanceof RegExp&&e.test(t)&&(n=this.readCount(RegExp.lastMatch.length)),n},readCount:function(e){var t=\"\";while(e--)t+=this.read();return t}},n.prototype=new Error,r.fromToken=function(e){return new r(e.value,e.startLine,e.startCol)},r.prototype={constructor:r,valueOf:function(){return this.text},toString:function(){return this.text}},i.createTokenData=function(e){var t=[],n={},r=e.concat([]),i=0,s=r.length+1;r.UNKNOWN=-1,r.unshift({name:\"EOF\"});for(;i<s;i++)t.push(r[i].name),r[r[i].name]=i,r[i].text&&(n[r[i].text]=i);return r.name=function(e){return t[e]},r.type=function(e){return n[e]},r},i.prototype={constructor:i,match:function(e,t){e instanceof Array||(e=[e]);var n=this.get(t),r=0,i=e.length;while(r<i)if(n==e[r++])return!0;return this.unget(),!1},mustMatch:function(e,t){var r;e instanceof Array||(e=[e]);if(!this.match.apply(this,arguments))throw r=this.LT(1),new n(\"Expected \"+this._tokenData[e[0]].name+\" at line \"+r.startLine+\", col \"+r.startCol+\".\",r.startLine,r.startCol)},advance:function(e,t){while(this.LA(0)!==0&&!this.match(e,t))this.get();return this.LA(0)},get:function(e){var t=this._tokenData,n=this._reader,r,i=0,s=t.length,o=!1,u,a;if(this._lt.length&&this._ltIndex>=0&&this._ltIndex<this._lt.length){i++,this._token=this._lt[this._ltIndex++],a=t[this._token.type];while(a.channel!==undefined&&e!==a.channel&&this._ltIndex<this._lt.length)this._token=this._lt[this._ltIndex++],a=t[this._token.type],i++;if((a.channel===undefined||e===a.channel)&&this._ltIndex<=this._lt.length)return this._ltIndexCache.push(i),this._token.type}return u=this._getToken(),u.type>-1&&!t[u.type].hide&&(u.channel=t[u.type].channel,this._token=u,this._lt.push(u),this._ltIndexCache.push(this._lt.length-this._ltIndex+i),this._lt.length>5&&this._lt.shift(),this._ltIndexCache.length>5&&this._ltIndexCache.shift(),this._ltIndex=this._lt.length),a=t[u.type],a&&(a.hide||a.channel!==undefined&&e!==a.channel)?this.get(e):u.type},LA:function(e){var t=e,n;if(e>0){if(e>5)throw new Error(\"Too much lookahead.\");while(t)n=this.get(),t--;while(t<e)this.unget(),t++}else if(e<0){if(!this._lt[this._ltIndex+e])throw new Error(\"Too much lookbehind.\");n=this._lt[this._ltIndex+e].type}else n=this._token.type;return n},LT:function(e){return this.LA(e),this._lt[this._ltIndex+e-1]},peek:function(){return this.LA(1)},token:function(){return this._token},tokenName:function(e){return e<0||e>this._tokenData.length?\"UNKNOWN_TOKEN\":this._tokenData[e].name},tokenType:function(e){return this._tokenData[e]||-1},unget:function(){if(!this._ltIndexCache.length)throw new Error(\"Too much lookahead.\");this._ltIndex-=this._ltIndexCache.pop(),this._token=this._lt[this._ltIndex-1]}},parserlib.util={StringReader:t,SyntaxError:n,SyntaxUnit:r,EventTarget:e,TokenStreamBase:i}})(),function(){function Combinator(e,t,n){SyntaxUnit.call(this,e,t,n,Parser.COMBINATOR_TYPE),this.type=\"unknown\",/^\\s+$/.test(e)?this.type=\"descendant\":e==\">\"?this.type=\"child\":e==\"+\"?this.type=\"adjacent-sibling\":e==\"~\"&&(this.type=\"sibling\")}function MediaFeature(e,t){SyntaxUnit.call(this,\"(\"+e+(t!==null?\":\"+t:\"\")+\")\",e.startLine,e.startCol,Parser.MEDIA_FEATURE_TYPE),this.name=e,this.value=t}function MediaQuery(e,t,n,r,i){SyntaxUnit.call(this,(e?e+\" \":\"\")+(t?t:\"\")+(t&&n.length>0?\" and \":\"\")+n.join(\" and \"),r,i,Parser.MEDIA_QUERY_TYPE),this.modifier=e,this.mediaType=t,this.features=n}function Parser(e){EventTarget.call(this),this.options=e||{},this._tokenStream=null}function PropertyName(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.PROPERTY_NAME_TYPE),this.hack=t}function PropertyValue(e,t,n){SyntaxUnit.call(this,e.join(\" \"),t,n,Parser.PROPERTY_VALUE_TYPE),this.parts=e}function PropertyValueIterator(e){this._i=0,this._parts=e.parts,this._marks=[],this.value=e}function PropertyValuePart(text,line,col){SyntaxUnit.call(this,text,line,col,Parser.PROPERTY_VALUE_PART_TYPE),this.type=\"unknown\";var temp;if(/^([+\\-]?[\\d\\.]+)([a-z]+)$/i.test(text)){this.type=\"dimension\",this.value=+RegExp.$1,this.units=RegExp.$2;switch(this.units.toLowerCase()){case\"em\":case\"rem\":case\"ex\":case\"px\":case\"cm\":case\"mm\":case\"in\":case\"pt\":case\"pc\":case\"ch\":case\"vh\":case\"vw\":case\"vmax\":case\"vmin\":this.type=\"length\";break;case\"deg\":case\"rad\":case\"grad\":this.type=\"angle\";break;case\"ms\":case\"s\":this.type=\"time\";break;case\"hz\":case\"khz\":this.type=\"frequency\";break;case\"dpi\":case\"dpcm\":this.type=\"resolution\"}}else/^([+\\-]?[\\d\\.]+)%$/i.test(text)?(this.type=\"percentage\",this.value=+RegExp.$1):/^([+\\-]?\\d+)$/i.test(text)?(this.type=\"integer\",this.value=+RegExp.$1):/^([+\\-]?[\\d\\.]+)$/i.test(text)?(this.type=\"number\",this.value=+RegExp.$1):/^#([a-f0-9]{3,6})/i.test(text)?(this.type=\"color\",temp=RegExp.$1,temp.length==3?(this.red=parseInt(temp.charAt(0)+temp.charAt(0),16),this.green=parseInt(temp.charAt(1)+temp.charAt(1),16),this.blue=parseInt(temp.charAt(2)+temp.charAt(2),16)):(this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16))):/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3):/^rgb\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1*255/100,this.green=+RegExp.$2*255/100,this.blue=+RegExp.$3*255/100):/^rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3,this.alpha=+RegExp.$4):/^rgba\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1*255/100,this.green=+RegExp.$2*255/100,this.blue=+RegExp.$3*255/100,this.alpha=+RegExp.$4):/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)?(this.type=\"color\",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100):/^hsla\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)?(this.type=\"color\",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100,this.alpha=+RegExp.$4):/^url\\([\"']?([^\\)\"']+)[\"']?\\)/i.test(text)?(this.type=\"uri\",this.uri=RegExp.$1):/^([^\\(]+)\\(/i.test(text)?(this.type=\"function\",this.name=RegExp.$1,this.value=text):/^[\"'][^\"']*[\"']/.test(text)?(this.type=\"string\",this.value=eval(text)):Colors[text.toLowerCase()]?(this.type=\"color\",temp=Colors[text.toLowerCase()].substring(1),this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16)):/^[\\,\\/]$/.test(text)?(this.type=\"operator\",this.value=text):/^[a-z\\-_\\u0080-\\uFFFF][a-z0-9\\-_\\u0080-\\uFFFF]*$/i.test(text)&&(this.type=\"identifier\",this.value=text)}function Selector(e,t,n){SyntaxUnit.call(this,e.join(\" \"),t,n,Parser.SELECTOR_TYPE),this.parts=e,this.specificity=Specificity.calculate(this)}function SelectorPart(e,t,n,r,i){SyntaxUnit.call(this,n,r,i,Parser.SELECTOR_PART_TYPE),this.elementName=e,this.modifiers=t}function SelectorSubPart(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.SELECTOR_SUB_PART_TYPE),this.type=t,this.args=[]}function Specificity(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function isHexDigit(e){return e!==null&&h.test(e)}function isDigit(e){return e!==null&&/\\d/.test(e)}function isWhitespace(e){return e!==null&&/\\s/.test(e)}function isNewLine(e){return e!==null&&nl.test(e)}function isNameStart(e){return e!==null&&/[a-z_\\u0080-\\uFFFF\\\\]/i.test(e)}function isNameChar(e){return e!==null&&(isNameStart(e)||/[0-9\\-\\\\]/.test(e))}function isIdentStart(e){return e!==null&&(isNameStart(e)||/\\-\\\\/.test(e))}function mix(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function TokenStream(e){TokenStreamBase.call(this,e,Tokens)}function ValidationError(e,t,n){this.col=n,this.line=t,this.message=e}var EventTarget=parserlib.util.EventTarget,TokenStreamBase=parserlib.util.TokenStreamBase,StringReader=parserlib.util.StringReader,SyntaxError=parserlib.util.SyntaxError,SyntaxUnit=parserlib.util.SyntaxUnit,Colors={aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgrey:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",grey:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgray:\"#d3d3d3\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\",activeBorder:\"Active window border.\",activecaption:\"Active window caption.\",appworkspace:\"Background color of multiple document interface.\",background:\"Desktop background.\",buttonface:\"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.\",buttonhighlight:\"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",buttonshadow:\"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",buttontext:\"Text on push buttons.\",captiontext:\"Text in caption, size box, and scrollbar arrow box.\",graytext:\"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.\",greytext:\"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.\",highlight:\"Item(s) selected in a control.\",highlighttext:\"Text of item(s) selected in a control.\",inactiveborder:\"Inactive window border.\",inactivecaption:\"Inactive window caption.\",inactivecaptiontext:\"Color of text in an inactive caption.\",infobackground:\"Background color for tooltip controls.\",infotext:\"Text color for tooltip controls.\",menu:\"Menu background.\",menutext:\"Text in menus.\",scrollbar:\"Scroll bar gray area.\",threeddarkshadow:\"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedface:\"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedhighlight:\"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedlightshadow:\"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedshadow:\"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",window:\"Window background.\",windowframe:\"Window frame.\",windowtext:\"Text in windows.\"};Combinator.prototype=new SyntaxUnit,Combinator.prototype.constructor=Combinator,MediaFeature.prototype=new SyntaxUnit,MediaFeature.prototype.constructor=MediaFeature,MediaQuery.prototype=new SyntaxUnit,MediaQuery.prototype.constructor=MediaQuery,Parser.DEFAULT_TYPE=0,Parser.COMBINATOR_TYPE=1,Parser.MEDIA_FEATURE_TYPE=2,Parser.MEDIA_QUERY_TYPE=3,Parser.PROPERTY_NAME_TYPE=4,Parser.PROPERTY_VALUE_TYPE=5,Parser.PROPERTY_VALUE_PART_TYPE=6,Parser.SELECTOR_TYPE=7,Parser.SELECTOR_PART_TYPE=8,Parser.SELECTOR_SUB_PART_TYPE=9,Parser.prototype=function(){var e=new EventTarget,t,n={constructor:Parser,DEFAULT_TYPE:0,COMBINATOR_TYPE:1,MEDIA_FEATURE_TYPE:2,MEDIA_QUERY_TYPE:3,PROPERTY_NAME_TYPE:4,PROPERTY_VALUE_TYPE:5,PROPERTY_VALUE_PART_TYPE:6,SELECTOR_TYPE:7,SELECTOR_PART_TYPE:8,SELECTOR_SUB_PART_TYPE:9,_stylesheet:function(){var e=this._tokenStream,t=null,n,r,i;this.fire(\"startstylesheet\"),this._charset(),this._skipCruft();while(e.peek()==Tokens.IMPORT_SYM)this._import(),this._skipCruft();while(e.peek()==Tokens.NAMESPACE_SYM)this._namespace(),this._skipCruft();i=e.peek();while(i>Tokens.EOF){try{switch(i){case Tokens.MEDIA_SYM:this._media(),this._skipCruft();break;case Tokens.PAGE_SYM:this._page(),this._skipCruft();break;case Tokens.FONT_FACE_SYM:this._font_face(),this._skipCruft();break;case Tokens.KEYFRAMES_SYM:this._keyframes(),this._skipCruft();break;case Tokens.VIEWPORT_SYM:this._viewport(),this._skipCruft();break;case Tokens.UNKNOWN_SYM:e.get();if(!!this.options.strict)throw new SyntaxError(\"Unknown @ rule.\",e.LT(0).startLine,e.LT(0).startCol);this.fire({type:\"error\",error:null,message:\"Unknown @ rule: \"+e.LT(0).value+\".\",line:e.LT(0).startLine,col:e.LT(0).startCol}),n=0;while(e.advance([Tokens.LBRACE,Tokens.RBRACE])==Tokens.LBRACE)n++;while(n)e.advance([Tokens.RBRACE]),n--;break;case Tokens.S:this._readWhitespace();break;default:if(!this._ruleset())switch(i){case Tokens.CHARSET_SYM:throw r=e.LT(1),this._charset(!1),new SyntaxError(\"@charset not allowed here.\",r.startLine,r.startCol);case Tokens.IMPORT_SYM:throw r=e.LT(1),this._import(!1),new SyntaxError(\"@import not allowed here.\",r.startLine,r.startCol);case Tokens.NAMESPACE_SYM:throw r=e.LT(1),this._namespace(!1),new SyntaxError(\"@namespace not allowed here.\",r.startLine,r.startCol);default:e.get(),this._unexpectedToken(e.token())}}}catch(s){if(!(s instanceof SyntaxError&&!this.options.strict))throw s;this.fire({type:\"error\",error:s,message:s.message,line:s.line,col:s.col})}i=e.peek()}i!=Tokens.EOF&&this._unexpectedToken(e.token()),this.fire(\"endstylesheet\")},_charset:function(e){var t=this._tokenStream,n,r,i,s;t.match(Tokens.CHARSET_SYM)&&(i=t.token().startLine,s=t.token().startCol,this._readWhitespace(),t.mustMatch(Tokens.STRING),r=t.token(),n=r.value,this._readWhitespace(),t.mustMatch(Tokens.SEMICOLON),e!==!1&&this.fire({type:\"charset\",charset:n,line:i,col:s}))},_import:function(e){var t=this._tokenStream,n,r,i,s=[];t.mustMatch(Tokens.IMPORT_SYM),i=t.token(),this._readWhitespace(),t.mustMatch([Tokens.STRING,Tokens.URI]),r=t.token().value.replace(/^(?:url\\()?[\"']?([^\"']+?)[\"']?\\)?$/,\"$1\"),this._readWhitespace(),s=this._media_query_list(),t.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),e!==!1&&this.fire({type:\"import\",uri:r,media:s,line:i.startLine,col:i.startCol})},_namespace:function(e){var t=this._tokenStream,n,r,i,s;t.mustMatch(Tokens.NAMESPACE_SYM),n=t.token().startLine,r=t.token().startCol,this._readWhitespace(),t.match(Tokens.IDENT)&&(i=t.token().value,this._readWhitespace()),t.mustMatch([Tokens.STRING,Tokens.URI]),s=t.token().value.replace(/(?:url\\()?[\"']([^\"']+)[\"']\\)?/,\"$1\"),this._readWhitespace(),t.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),e!==!1&&this.fire({type:\"namespace\",prefix:i,uri:s,line:n,col:r})},_media:function(){var e=this._tokenStream,t,n,r;e.mustMatch(Tokens.MEDIA_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),r=this._media_query_list(),e.mustMatch(Tokens.LBRACE),this._readWhitespace(),this.fire({type:\"startmedia\",media:r,line:t,col:n});for(;;)if(e.peek()==Tokens.PAGE_SYM)this._page();else if(e.peek()==Tokens.FONT_FACE_SYM)this._font_face();else if(e.peek()==Tokens.VIEWPORT_SYM)this._viewport();else if(!this._ruleset())break;e.mustMatch(Tokens.RBRACE),this._readWhitespace(),this.fire({type:\"endmedia\",media:r,line:t,col:n})},_media_query_list:function(){var e=this._tokenStream,t=[];this._readWhitespace(),(e.peek()==Tokens.IDENT||e.peek()==Tokens.LPAREN)&&t.push(this._media_query());while(e.match(Tokens.COMMA))this._readWhitespace(),t.push(this._media_query());return t},_media_query:function(){var e=this._tokenStream,t=null,n=null,r=null,i=[];e.match(Tokens.IDENT)&&(n=e.token().value.toLowerCase(),n!=\"only\"&&n!=\"not\"?(e.unget(),n=null):r=e.token()),this._readWhitespace(),e.peek()==Tokens.IDENT?(t=this._media_type(),r===null&&(r=e.token())):e.peek()==Tokens.LPAREN&&(r===null&&(r=e.LT(1)),i.push(this._media_expression()));if(t===null&&i.length===0)return null;this._readWhitespace();while(e.match(Tokens.IDENT))e.token().value.toLowerCase()!=\"and\"&&this._unexpectedToken(e.token()),this._readWhitespace(),i.push(this._media_expression());return new MediaQuery(n,t,i,r.startLine,r.startCol)},_media_type:function(){return this._media_feature()},_media_expression:function(){var e=this._tokenStream,t=null,n,r=null;return e.mustMatch(Tokens.LPAREN),this._readWhitespace(),t=this._media_feature(),this._readWhitespace(),e.match(Tokens.COLON)&&(this._readWhitespace(),n=e.LT(1),r=this._expression()),e.mustMatch(Tokens.RPAREN),this._readWhitespace(),new MediaFeature(t,r?new SyntaxUnit(r,n.startLine,n.startCol):null)},_media_feature:function(){var e=this._tokenStream;return e.mustMatch(Tokens.IDENT),SyntaxUnit.fromToken(e.token())},_page:function(){var e=this._tokenStream,t,n,r=null,i=null;e.mustMatch(Tokens.PAGE_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),e.match(Tokens.IDENT)&&(r=e.token().value,r.toLowerCase()===\"auto\"&&this._unexpectedToken(e.token())),e.peek()==Tokens.COLON&&(i=this._pseudo_page()),this._readWhitespace(),this.fire({type:\"startpage\",id:r,pseudo:i,line:t,col:n}),this._readDeclarations(!0,!0),this.fire({type:\"endpage\",id:r,pseudo:i,line:t,col:n})},_margin:function(){var e=this._tokenStream,t,n,r=this._margin_sym();return r?(t=e.token().startLine,n=e.token().startCol,this.fire({type:\"startpagemargin\",margin:r,line:t,col:n}),this._readDeclarations(!0),this.fire({type:\"endpagemargin\",margin:r,line:t,col:n}),!0):!1},_margin_sym:function(){var e=this._tokenStream;return e.match([Tokens.TOPLEFTCORNER_SYM,Tokens.TOPLEFT_SYM,Tokens.TOPCENTER_SYM,Tokens.TOPRIGHT_SYM,Tokens.TOPRIGHTCORNER_SYM,Tokens.BOTTOMLEFTCORNER_SYM,Tokens.BOTTOMLEFT_SYM,Tokens.BOTTOMCENTER_SYM,Tokens.BOTTOMRIGHT_SYM,Tokens.BOTTOMRIGHTCORNER_SYM,Tokens.LEFTTOP_SYM,Tokens.LEFTMIDDLE_SYM,Tokens.LEFTBOTTOM_SYM,Tokens.RIGHTTOP_SYM,Tokens.RIGHTMIDDLE_SYM,Tokens.RIGHTBOTTOM_SYM])?SyntaxUnit.fromToken(e.token()):null},_pseudo_page:function(){var e=this._tokenStream;return e.mustMatch(Tokens.COLON),e.mustMatch(Tokens.IDENT),e.token().value},_font_face:function(){var e=this._tokenStream,t,n;e.mustMatch(Tokens.FONT_FACE_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),this.fire({type:\"startfontface\",line:t,col:n}),this._readDeclarations(!0),this.fire({type:\"endfontface\",line:t,col:n})},_viewport:function(){var e=this._tokenStream,t,n;e.mustMatch(Tokens.VIEWPORT_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),this.fire({type:\"startviewport\",line:t,col:n}),this._readDeclarations(!0),this.fire({type:\"endviewport\",line:t,col:n})},_operator:function(e){var t=this._tokenStream,n=null;if(t.match([Tokens.SLASH,Tokens.COMMA])||e&&t.match([Tokens.PLUS,Tokens.STAR,Tokens.MINUS]))n=t.token(),this._readWhitespace();return n?PropertyValuePart.fromToken(n):null},_combinator:function(){var e=this._tokenStream,t=null,n;return e.match([Tokens.PLUS,Tokens.GREATER,Tokens.TILDE])&&(n=e.token(),t=new Combinator(n.value,n.startLine,n.startCol),this._readWhitespace()),t},_unary_operator:function(){var e=this._tokenStream;return e.match([Tokens.MINUS,Tokens.PLUS])?e.token().value:null},_property:function(){var e=this._tokenStream,t=null,n=null,r,i,s,o;return e.peek()==Tokens.STAR&&this.options.starHack&&(e.get(),i=e.token(),n=i.value,s=i.startLine,o=i.startCol),e.match(Tokens.IDENT)&&(i=e.token(),r=i.value,r.charAt(0)==\"_\"&&this.options.underscoreHack&&(n=\"_\",r=r.substring(1)),t=new PropertyName(r,n,s||i.startLine,o||i.startCol),this._readWhitespace()),t},_ruleset:function(){var e=this._tokenStream,t,n;try{n=this._selectors_group()}catch(r){if(r instanceof SyntaxError&&!this.options.strict){this.fire({type:\"error\",error:r,message:r.message,line:r.line,col:r.col}),t=e.advance([Tokens.RBRACE]);if(t!=Tokens.RBRACE)throw r;return!0}throw r}return n&&(this.fire({type:\"startrule\",selectors:n,line:n[0].line,col:n[0].col}),this._readDeclarations(!0),this.fire({type:\"endrule\",selectors:n,line:n[0].line,col:n[0].col})),n},_selectors_group:function(){var e=this._tokenStream,t=[],n;n=this._selector();if(n!==null){t.push(n);while(e.match(Tokens.COMMA))this._readWhitespace(),n=this._selector(),n!==null?t.push(n):this._unexpectedToken(e.LT(1))}return t.length?t:null},_selector:function(){var e=this._tokenStream,t=[],n=null,r=null,i=null;n=this._simple_selector_sequence();if(n===null)return null;t.push(n);do{r=this._combinator();if(r!==null)t.push(r),n=this._simple_selector_sequence(),n===null?this._unexpectedToken(e.LT(1)):t.push(n);else{if(!this._readWhitespace())break;i=new Combinator(e.token().value,e.token().startLine,e.token().startCol),r=this._combinator(),n=this._simple_selector_sequence(),n===null?r!==null&&this._unexpectedToken(e.LT(1)):(r!==null?t.push(r):t.push(i),t.push(n))}}while(!0);return new Selector(t,t[0].line,t[0].col)},_simple_selector_sequence:function(){var e=this._tokenStream,t=null,n=[],r=\"\",i=[function(){return e.match(Tokens.HASH)?new SelectorSubPart(e.token().value,\"id\",e.token().startLine,e.token().startCol):null},this._class,this._attrib,this._pseudo,this._negation],s=0,o=i.length,u=null,a=!1,f,l;f=e.LT(1).startLine,l=e.LT(1).startCol,t=this._type_selector(),t||(t=this._universal()),t!==null&&(r+=t);for(;;){if(e.peek()===Tokens.S)break;while(s<o&&u===null)u=i[s++].call(this);if(u===null){if(r===\"\")return null;break}s=0,n.push(u),r+=u.toString(),u=null}return r!==\"\"?new SelectorPart(t,n,r,f,l):null},_type_selector:function(){var e=this._tokenStream,t=this._namespace_prefix(),n=this._element_name();return n?(t&&(n.text=t+n.text,n.col-=t.length),n):(t&&(e.unget(),t.length>1&&e.unget()),null)},_class:function(){var e=this._tokenStream,t;return e.match(Tokens.DOT)?(e.mustMatch(Tokens.IDENT),t=e.token(),new SelectorSubPart(\".\"+t.value,\"class\",t.startLine,t.startCol-1)):null},_element_name:function(){var e=this._tokenStream,t;return e.match(Tokens.IDENT)?(t=e.token(),new SelectorSubPart(t.value,\"elementName\",t.startLine,t.startCol)):null},_namespace_prefix:function(){var e=this._tokenStream,t=\"\";if(e.LA(1)===Tokens.PIPE||e.LA(2)===Tokens.PIPE)e.match([Tokens.IDENT,Tokens.STAR])&&(t+=e.token().value),e.mustMatch(Tokens.PIPE),t+=\"|\";return t.length?t:null},_universal:function(){var e=this._tokenStream,t=\"\",n;return n=this._namespace_prefix(),n&&(t+=n),e.match(Tokens.STAR)&&(t+=\"*\"),t.length?t:null},_attrib:function(){var e=this._tokenStream,t=null,n,r;return e.match(Tokens.LBRACKET)?(r=e.token(),t=r.value,t+=this._readWhitespace(),n=this._namespace_prefix(),n&&(t+=n),e.mustMatch(Tokens.IDENT),t+=e.token().value,t+=this._readWhitespace(),e.match([Tokens.PREFIXMATCH,Tokens.SUFFIXMATCH,Tokens.SUBSTRINGMATCH,Tokens.EQUALS,Tokens.INCLUDES,Tokens.DASHMATCH])&&(t+=e.token().value,t+=this._readWhitespace(),e.mustMatch([Tokens.IDENT,Tokens.STRING]),t+=e.token().value,t+=this._readWhitespace()),e.mustMatch(Tokens.RBRACKET),new SelectorSubPart(t+\"]\",\"attribute\",r.startLine,r.startCol)):null},_pseudo:function(){var e=this._tokenStream,t=null,n=\":\",r,i;return e.match(Tokens.COLON)&&(e.match(Tokens.COLON)&&(n+=\":\"),e.match(Tokens.IDENT)?(t=e.token().value,r=e.token().startLine,i=e.token().startCol-n.length):e.peek()==Tokens.FUNCTION&&(r=e.LT(1).startLine,i=e.LT(1).startCol-n.length,t=this._functional_pseudo()),t&&(t=new SelectorSubPart(n+t,\"pseudo\",r,i))),t},_functional_pseudo:function(){var e=this._tokenStream,t=null;return e.match(Tokens.FUNCTION)&&(t=e.token().value,t+=this._readWhitespace(),t+=this._expression(),e.mustMatch(Tokens.RPAREN),t+=\")\"),t},_expression:function(){var e=this._tokenStream,t=\"\";while(e.match([Tokens.PLUS,Tokens.MINUS,Tokens.DIMENSION,Tokens.NUMBER,Tokens.STRING,Tokens.IDENT,Tokens.LENGTH,Tokens.FREQ,Tokens.ANGLE,Tokens.TIME,Tokens.RESOLUTION,Tokens.SLASH]))t+=e.token().value,t+=this._readWhitespace();return t.length?t:null},_negation:function(){var e=this._tokenStream,t,n,r=\"\",i,s=null;return e.match(Tokens.NOT)&&(r=e.token().value,t=e.token().startLine,n=e.token().startCol,r+=this._readWhitespace(),i=this._negation_arg(),r+=i,r+=this._readWhitespace(),e.match(Tokens.RPAREN),r+=e.token().value,s=new SelectorSubPart(r,\"not\",t,n),s.args.push(i)),s},_negation_arg:function(){var e=this._tokenStream,t=[this._type_selector,this._universal,function(){return e.match(Tokens.HASH)?new SelectorSubPart(e.token().value,\"id\",e.token().startLine,e.token().startCol):null},this._class,this._attrib,this._pseudo],n=null,r=0,i=t.length,s,o,u,a;o=e.LT(1).startLine,u=e.LT(1).startCol;while(r<i&&n===null)n=t[r].call(this),r++;return n===null&&this._unexpectedToken(e.LT(1)),n.type==\"elementName\"?a=new SelectorPart(n,[],n.toString(),o,u):a=new SelectorPart(null,[n],n.toString(),o,u),a},_declaration:function(){var e=this._tokenStream,t=null,n=null,r=null,i=null,s=null,o=\"\";t=this._property();if(t!==null){e.mustMatch(Tokens.COLON),this._readWhitespace(),n=this._expr(),(!n||n.length===0)&&this._unexpectedToken(e.LT(1)),r=this._prio(),o=t.toString();if(this.options.starHack&&t.hack==\"*\"||this.options.underscoreHack&&t.hack==\"_\")o=t.text;try{this._validateProperty(o,n)}catch(u){s=u}return this.fire({type:\"property\",property:t,value:n,important:r,line:t.line,col:t.col,invalid:s}),!0}return!1},_prio:function(){var e=this._tokenStream,t=e.match(Tokens.IMPORTANT_SYM);return this._readWhitespace(),t},_expr:function(e){var t=this._tokenStream,n=[],r=null,i=null;r=this._term(e);if(r!==null){n.push(r);do{i=this._operator(e),i&&n.push(i),r=this._term(e);if(r===null)break;n.push(r)}while(!0)}return n.length>0?new PropertyValue(n,n[0].line,n[0].col):null},_term:function(e){var t=this._tokenStream,n=null,r=null,i=null,s,o,u;return n=this._unary_operator(),n!==null&&(o=t.token().startLine,u=t.token().startCol),t.peek()==Tokens.IE_FUNCTION&&this.options.ieFilters?(r=this._ie_function(),n===null&&(o=t.token().startLine,u=t.token().startCol)):e&&t.match([Tokens.LPAREN,Tokens.LBRACE,Tokens.LBRACKET])?(s=t.token(),i=s.endChar,r=s.value+this._expr(e).text,n===null&&(o=t.token().startLine,u=t.token().startCol),t.mustMatch(Tokens.type(i)),r+=i,this._readWhitespace()):t.match([Tokens.NUMBER,Tokens.PERCENTAGE,Tokens.LENGTH,Tokens.ANGLE,Tokens.TIME,Tokens.FREQ,Tokens.STRING,Tokens.IDENT,Tokens.URI,Tokens.UNICODE_RANGE])?(r=t.token().value,n===null&&(o=t.token().startLine,u=t.token().startCol),this._readWhitespace()):(s=this._hexcolor(),s===null?(n===null&&(o=t.LT(1).startLine,u=t.LT(1).startCol),r===null&&(t.LA(3)==Tokens.EQUALS&&this.options.ieFilters?r=this._ie_function():r=this._function())):(r=s.value,n===null&&(o=s.startLine,u=s.startCol))),r!==null?new PropertyValuePart(n!==null?n+r:r,o,u):null},_function:function(){var e=this._tokenStream,t=null,n=null,r;if(e.match(Tokens.FUNCTION)){t=e.token().value,this._readWhitespace(),n=this._expr(!0),t+=n;if(this.options.ieFilters&&e.peek()==Tokens.EQUALS)do{this._readWhitespace()&&(t+=e.token().value),e.LA(0)==Tokens.COMMA&&(t+=e.token().value),e.match(Tokens.IDENT),t+=e.token().value,e.match(Tokens.EQUALS),t+=e.token().value,r=e.peek();while(r!=Tokens.COMMA&&r!=Tokens.S&&r!=Tokens.RPAREN)e.get(),t+=e.token().value,r=e.peek()}while(e.match([Tokens.COMMA,Tokens.S]));e.match(Tokens.RPAREN),t+=\")\",this._readWhitespace()}return t},_ie_function:function(){var e=this._tokenStream,t=null,n=null,r;if(e.match([Tokens.IE_FUNCTION,Tokens.FUNCTION])){t=e.token().value;do{this._readWhitespace()&&(t+=e.token().value),e.LA(0)==Tokens.COMMA&&(t+=e.token().value),e.match(Tokens.IDENT),t+=e.token().value,e.match(Tokens.EQUALS),t+=e.token().value,r=e.peek();while(r!=Tokens.COMMA&&r!=Tokens.S&&r!=Tokens.RPAREN)e.get(),t+=e.token().value,r=e.peek()}while(e.match([Tokens.COMMA,Tokens.S]));e.match(Tokens.RPAREN),t+=\")\",this._readWhitespace()}return t},_hexcolor:function(){var e=this._tokenStream,t=null,n;if(e.match(Tokens.HASH)){t=e.token(),n=t.value;if(!/#[a-f0-9]{3,6}/i.test(n))throw new SyntaxError(\"Expected a hex color but found '\"+n+\"' at line \"+t.startLine+\", col \"+t.startCol+\".\",t.startLine,t.startCol);this._readWhitespace()}return t},_keyframes:function(){var e=this._tokenStream,t,n,r,i=\"\";e.mustMatch(Tokens.KEYFRAMES_SYM),t=e.token(),/^@\\-([^\\-]+)\\-/.test(t.value)&&(i=RegExp.$1),this._readWhitespace(),r=this._keyframe_name(),this._readWhitespace(),e.mustMatch(Tokens.LBRACE),this.fire({type:\"startkeyframes\",name:r,prefix:i,line:t.startLine,col:t.startCol}),this._readWhitespace(),n=e.peek();while(n==Tokens.IDENT||n==Tokens.PERCENTAGE)this._keyframe_rule(),this._readWhitespace(),n=e.peek();this.fire({type:\"endkeyframes\",name:r,prefix:i,line:t.startLine,col:t.startCol}),this._readWhitespace(),e.mustMatch(Tokens.RBRACE)},_keyframe_name:function(){var e=this._tokenStream,t;return e.mustMatch([Tokens.IDENT,Tokens.STRING]),SyntaxUnit.fromToken(e.token())},_keyframe_rule:function(){var e=this._tokenStream,t,n=this._key_list();this.fire({type:\"startkeyframerule\",keys:n,line:n[0].line,col:n[0].col}),this._readDeclarations(!0),this.fire({type:\"endkeyframerule\",keys:n,line:n[0].line,col:n[0].col})},_key_list:function(){var e=this._tokenStream,t,n,r=[];r.push(this._key()),this._readWhitespace();while(e.match(Tokens.COMMA))this._readWhitespace(),r.push(this._key()),this._readWhitespace();return r},_key:function(){var e=this._tokenStream,t;if(e.match(Tokens.PERCENTAGE))return SyntaxUnit.fromToken(e.token());if(e.match(Tokens.IDENT)){t=e.token();if(/from|to/i.test(t.value))return SyntaxUnit.fromToken(t);e.unget()}this._unexpectedToken(e.LT(1))},_skipCruft:function(){while(this._tokenStream.match([Tokens.S,Tokens.CDO,Tokens.CDC]));},_readDeclarations:function(e,t){var n=this._tokenStream,r;this._readWhitespace(),e&&n.mustMatch(Tokens.LBRACE),this._readWhitespace();try{for(;;){if(!(n.match(Tokens.SEMICOLON)||t&&this._margin())){if(!this._declaration())break;if(!n.match(Tokens.SEMICOLON))break}this._readWhitespace()}n.mustMatch(Tokens.RBRACE),this._readWhitespace()}catch(i){if(!(i instanceof SyntaxError&&!this.options.strict))throw i;this.fire({type:\"error\",error:i,message:i.message,line:i.line,col:i.col}),r=n.advance([Tokens.SEMICOLON,Tokens.RBRACE]);if(r==Tokens.SEMICOLON)this._readDeclarations(!1,t);else if(r!=Tokens.RBRACE)throw i}},_readWhitespace:function(){var e=this._tokenStream,t=\"\";while(e.match(Tokens.S))t+=e.token().value;return t},_unexpectedToken:function(e){throw new SyntaxError(\"Unexpected token '\"+e.value+\"' at line \"+e.startLine+\", col \"+e.startCol+\".\",e.startLine,e.startCol)},_verifyEnd:function(){this._tokenStream.LA(1)!=Tokens.EOF&&this._unexpectedToken(this._tokenStream.LT(1))},_validateProperty:function(e,t){Validation.validate(e,t)},parse:function(e){this._tokenStream=new TokenStream(e,Tokens),this._stylesheet()},parseStyleSheet:function(e){return this.parse(e)},parseMediaQuery:function(e){this._tokenStream=new TokenStream(e,Tokens);var t=this._media_query();return this._verifyEnd(),t},parsePropertyValue:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._expr();return this._readWhitespace(),this._verifyEnd(),t},parseRule:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._ruleset();return this._readWhitespace(),this._verifyEnd(),t},parseSelector:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._selector();return this._readWhitespace(),this._verifyEnd(),t},parseStyleAttribute:function(e){e+=\"}\",this._tokenStream=new TokenStream(e,Tokens),this._readDeclarations()}};for(t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e}();var Properties={\"align-items\":\"flex-start | flex-end | center | baseline | stretch\",\"align-content\":\"flex-start | flex-end | center | space-between | space-around | stretch\",\"align-self\":\"auto | flex-start | flex-end | center | baseline | stretch\",\"-webkit-align-items\":\"flex-start | flex-end | center | baseline | stretch\",\"-webkit-align-content\":\"flex-start | flex-end | center | space-between | space-around | stretch\",\"-webkit-align-self\":\"auto | flex-start | flex-end | center | baseline | stretch\",\"alignment-adjust\":\"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>\",\"alignment-baseline\":\"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",animation:1,\"animation-delay\":{multi:\"<time>\",comma:!0},\"animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"animation-duration\":{multi:\"<time>\",comma:!0},\"animation-fill-mode\":{multi:\"none | forwards | backwards | both\",comma:!0},\"animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"animation-name\":{multi:\"none | <ident>\",comma:!0},\"animation-play-state\":{multi:\"running | paused\",comma:!0},\"animation-timing-function\":1,\"-moz-animation-delay\":{multi:\"<time>\",comma:!0},\"-moz-animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"-moz-animation-duration\":{multi:\"<time>\",comma:!0},\"-moz-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-moz-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-moz-animation-play-state\":{multi:\"running | paused\",comma:!0},\"-ms-animation-delay\":{multi:\"<time>\",comma:!0},\"-ms-animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"-ms-animation-duration\":{multi:\"<time>\",comma:!0},\"-ms-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-ms-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-ms-animation-play-state\":{multi:\"running | paused\",comma:!0},\"-webkit-animation-delay\":{multi:\"<time>\",comma:!0},\"-webkit-animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"-webkit-animation-duration\":{multi:\"<time>\",comma:!0},\"-webkit-animation-fill-mode\":{multi:\"none | forwards | backwards | both\",comma:!0},\"-webkit-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-webkit-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-webkit-animation-play-state\":{multi:\"running | paused\",comma:!0},\"-o-animation-delay\":{multi:\"<time>\",comma:!0},\"-o-animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"-o-animation-duration\":{multi:\"<time>\",comma:!0},\"-o-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-o-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-o-animation-play-state\":{multi:\"running | paused\",comma:!0},appearance:\"icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | none | inherit\",azimuth:function(e){var t=\"<angle> | leftwards | rightwards | inherit\",n=\"left-side | far-left | left | center-left | center | center-right | right | far-right | right-side\",r=!1,i=!1,s;ValidationTypes.isAny(e,t)||(ValidationTypes.isAny(e,\"behind\")&&(r=!0,i=!0),ValidationTypes.isAny(e,n)&&(i=!0,r||ValidationTypes.isAny(e,\"behind\")));if(e.hasNext())throw s=e.next(),i?new ValidationError(\"Expected end of value but found '\"+s+\"'.\",s.line,s.col):new ValidationError(\"Expected (<'azimuth'>) but found '\"+s+\"'.\",s.line,s.col)},\"backface-visibility\":\"visible | hidden\",background:1,\"background-attachment\":{multi:\"<attachment>\",comma:!0},\"background-clip\":{multi:\"<box>\",comma:!0},\"background-color\":\"<color> | inherit\",\"background-image\":{multi:\"<bg-image>\",comma:!0},\"background-origin\":{multi:\"<box>\",comma:!0},\"background-position\":{multi:\"<bg-position>\",comma:!0},\"background-repeat\":{multi:\"<repeat-style>\"},\"background-size\":{multi:\"<bg-size>\",comma:!0},\"baseline-shift\":\"baseline | sub | super | <percentage> | <length>\",behavior:1,binding:1,bleed:\"<length>\",\"bookmark-label\":\"<content> | <attr> | <string>\",\"bookmark-level\":\"none | <integer>\",\"bookmark-state\":\"open | closed\",\"bookmark-target\":\"none | <uri> | <attr>\",border:\"<border-width> || <border-style> || <color>\",\"border-bottom\":\"<border-width> || <border-style> || <color>\",\"border-bottom-color\":\"<color> | inherit\",\"border-bottom-left-radius\":\"<x-one-radius>\",\"border-bottom-right-radius\":\"<x-one-radius>\",\"border-bottom-style\":\"<border-style>\",\"border-bottom-width\":\"<border-width>\",\"border-collapse\":\"collapse | separate | inherit\",\"border-color\":{multi:\"<color> | inherit\",max:4},\"border-image\":1,\"border-image-outset\":{multi:\"<length> | <number>\",max:4},\"border-image-repeat\":{multi:\"stretch | repeat | round\",max:2},\"border-image-slice\":function(e){var t=!1,n=\"<number> | <percentage>\",r=!1,i=0,s=4,o;ValidationTypes.isAny(e,\"fill\")&&(r=!0,t=!0);while(e.hasNext()&&i<s){t=ValidationTypes.isAny(e,n);if(!t)break;i++}r?t=!0:ValidationTypes.isAny(e,\"fill\");if(e.hasNext())throw o=e.next(),t?new ValidationError(\"Expected end of value but found '\"+o+\"'.\",o.line,o.col):new ValidationError(\"Expected ([<number> | <percentage>]{1,4} && fill?) but found '\"+o+\"'.\",o.line,o.col)},\"border-image-source\":\"<image> | none\",\"border-image-width\":{multi:\"<length> | <percentage> | <number> | auto\",max:4},\"border-left\":\"<border-width> || <border-style> || <color>\",\"border-left-color\":\"<color> | inherit\",\"border-left-style\":\"<border-style>\",\"border-left-width\":\"<border-width>\",\"border-radius\":function(e){var t=!1,n=\"<length> | <percentage> | inherit\",r=!1,i=!1,s=0,o=8,u;while(e.hasNext()&&s<o){t=ValidationTypes.isAny(e,n);if(!t){if(!(e.peek()==\"/\"&&s>0&&!r))break;r=!0,o=s+5,e.next()}s++}if(e.hasNext())throw u=e.next(),t?new ValidationError(\"Expected end of value but found '\"+u+\"'.\",u.line,u.col):new ValidationError(\"Expected (<'border-radius'>) but found '\"+u+\"'.\",u.line,u.col)},\"border-right\":\"<border-width> || <border-style> || <color>\",\"border-right-color\":\"<color> | inherit\",\"border-right-style\":\"<border-style>\",\"border-right-width\":\"<border-width>\",\"border-spacing\":{multi:\"<length> | inherit\",max:2},\"border-style\":{multi:\"<border-style>\",max:4},\"border-top\":\"<border-width> || <border-style> || <color>\",\"border-top-color\":\"<color> | inherit\",\"border-top-left-radius\":\"<x-one-radius>\",\"border-top-right-radius\":\"<x-one-radius>\",\"border-top-style\":\"<border-style>\",\"border-top-width\":\"<border-width>\",\"border-width\":{multi:\"<border-width>\",max:4},bottom:\"<margin-width> | inherit\",\"-moz-box-align\":\"start | end | center | baseline | stretch\",\"-moz-box-decoration-break\":\"slice |clone\",\"-moz-box-direction\":\"normal | reverse | inherit\",\"-moz-box-flex\":\"<number>\",\"-moz-box-flex-group\":\"<integer>\",\"-moz-box-lines\":\"single | multiple\",\"-moz-box-ordinal-group\":\"<integer>\",\"-moz-box-orient\":\"horizontal | vertical | inline-axis | block-axis | inherit\",\"-moz-box-pack\":\"start | end | center | justify\",\"-webkit-box-align\":\"start | end | center | baseline | stretch\",\"-webkit-box-decoration-break\":\"slice |clone\",\"-webkit-box-direction\":\"normal | reverse | inherit\",\"-webkit-box-flex\":\"<number>\",\"-webkit-box-flex-group\":\"<integer>\",\"-webkit-box-lines\":\"single | multiple\",\"-webkit-box-ordinal-group\":\"<integer>\",\"-webkit-box-orient\":\"horizontal | vertical | inline-axis | block-axis | inherit\",\"-webkit-box-pack\":\"start | end | center | justify\",\"box-shadow\":function(e){var t=!1,n;if(!ValidationTypes.isAny(e,\"none\"))Validation.multiProperty(\"<shadow>\",e,!0,Infinity);else if(e.hasNext())throw n=e.next(),new ValidationError(\"Expected end of value but found '\"+n+\"'.\",n.line,n.col)},\"box-sizing\":\"content-box | border-box | inherit\",\"break-after\":\"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\"break-before\":\"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\"break-inside\":\"auto | avoid | avoid-page | avoid-column\",\"caption-side\":\"top | bottom | inherit\",clear:\"none | right | left | both | inherit\",clip:1,color:\"<color> | inherit\",\"color-profile\":1,\"column-count\":\"<integer> | auto\",\"column-fill\":\"auto | balance\",\"column-gap\":\"<length> | normal\",\"column-rule\":\"<border-width> || <border-style> || <color>\",\"column-rule-color\":\"<color>\",\"column-rule-style\":\"<border-style>\",\"column-rule-width\":\"<border-width>\",\"column-span\":\"none | all\",\"column-width\":\"<length> | auto\",columns:1,content:1,\"counter-increment\":1,\"counter-reset\":1,crop:\"<shape> | auto\",cue:\"cue-after | cue-before | inherit\",\"cue-after\":1,\"cue-before\":1,cursor:1,direction:\"ltr | rtl | inherit\",display:\"inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | none | inherit | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex\",\"dominant-baseline\":1,\"drop-initial-after-adjust\":\"central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>\",\"drop-initial-after-align\":\"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\"drop-initial-before-adjust\":\"before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>\",\"drop-initial-before-align\":\"caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\"drop-initial-size\":\"auto | line | <length> | <percentage>\",\"drop-initial-value\":\"initial | <integer>\",elevation:\"<angle> | below | level | above | higher | lower | inherit\",\"empty-cells\":\"show | hide | inherit\",filter:1,fit:\"fill | hidden | meet | slice\",\"fit-position\":1,flex:\"<flex>\",\"flex-basis\":\"<width>\",\"flex-direction\":\"row | row-reverse | column | column-reverse\",\"flex-flow\":\"<flex-direction> || <flex-wrap>\",\"flex-grow\":\"<number>\",\"flex-shrink\":\"<number>\",\"flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"-webkit-flex\":\"<flex>\",\"-webkit-flex-basis\":\"<width>\",\"-webkit-flex-direction\":\"row | row-reverse | column | column-reverse\",\"-webkit-flex-flow\":\"<flex-direction> || <flex-wrap>\",\"-webkit-flex-grow\":\"<number>\",\"-webkit-flex-shrink\":\"<number>\",\"-webkit-flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"-ms-flex\":\"<flex>\",\"-ms-flex-align\":\"start | end | center | stretch | baseline\",\"-ms-flex-direction\":\"row | row-reverse | column | column-reverse | inherit\",\"-ms-flex-order\":\"<number>\",\"-ms-flex-pack\":\"start | end | center | justify\",\"-ms-flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"float\":\"left | right | none | inherit\",\"float-offset\":1,font:1,\"font-family\":1,\"font-size\":\"<absolute-size> | <relative-size> | <length> | <percentage> | inherit\",\"font-size-adjust\":\"<number> | none | inherit\",\"font-stretch\":\"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit\",\"font-style\":\"normal | italic | oblique | inherit\",\"font-variant\":\"normal | small-caps | inherit\",\"font-weight\":\"normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit\",\"grid-cell-stacking\":\"columns | rows | layer\",\"grid-column\":1,\"grid-columns\":1,\"grid-column-align\":\"start | end | center | stretch\",\"grid-column-sizing\":1,\"grid-column-span\":\"<integer>\",\"grid-flow\":\"none | rows | columns\",\"grid-layer\":\"<integer>\",\"grid-row\":1,\"grid-rows\":1,\"grid-row-align\":\"start | end | center | stretch\",\"grid-row-span\":\"<integer>\",\"grid-row-sizing\":1,\"hanging-punctuation\":1,height:\"<margin-width> | <content-sizing> | inherit\",\"hyphenate-after\":\"<integer> | auto\",\"hyphenate-before\":\"<integer> | auto\",\"hyphenate-character\":\"<string> | auto\",\"hyphenate-lines\":\"no-limit | <integer>\",\"hyphenate-resource\":1,hyphens:\"none | manual | auto\",icon:1,\"image-orientation\":\"angle | auto\",\"image-rendering\":1,\"image-resolution\":1,\"inline-box-align\":\"initial | last | <integer>\",\"justify-content\":\"flex-start | flex-end | center | space-between | space-around\",\"-webkit-justify-content\":\"flex-start | flex-end | center | space-between | space-around\",left:\"<margin-width> | inherit\",\"letter-spacing\":\"<length> | normal | inherit\",\"line-height\":\"<number> | <length> | <percentage> | normal | inherit\",\"line-break\":\"auto | loose | normal | strict\",\"line-stacking\":1,\"line-stacking-ruby\":\"exclude-ruby | include-ruby\",\"line-stacking-shift\":\"consider-shifts | disregard-shifts\",\"line-stacking-strategy\":\"inline-line-height | block-line-height | max-height | grid-height\",\"list-style\":1,\"list-style-image\":\"<uri> | none | inherit\",\"list-style-position\":\"inside | outside | inherit\",\"list-style-type\":\"disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit\",margin:{multi:\"<margin-width> | inherit\",max:4},\"margin-bottom\":\"<margin-width> | inherit\",\"margin-left\":\"<margin-width> | inherit\",\"margin-right\":\"<margin-width> | inherit\",\"margin-top\":\"<margin-width> | inherit\",mark:1,\"mark-after\":1,\"mark-before\":1,marks:1,\"marquee-direction\":1,\"marquee-play-count\":1,\"marquee-speed\":1,\"marquee-style\":1,\"max-height\":\"<length> | <percentage> | <content-sizing> | none | inherit\",\"max-width\":\"<length> | <percentage> | <content-sizing> | none | inherit\",\"max-zoom\":\"<number> | <percentage> | auto\",\"min-height\":\"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\"min-width\":\"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\"min-zoom\":\"<number> | <percentage> | auto\",\"move-to\":1,\"nav-down\":1,\"nav-index\":1,\"nav-left\":1,\"nav-right\":1,\"nav-up\":1,opacity:\"<number> | inherit\",order:\"<integer>\",\"-webkit-order\":\"<integer>\",orphans:\"<integer> | inherit\",outline:1,\"outline-color\":\"<color> | invert | inherit\",\"outline-offset\":1,\"outline-style\":\"<border-style> | inherit\",\"outline-width\":\"<border-width> | inherit\",overflow:\"visible | hidden | scroll | auto | inherit\",\"overflow-style\":1,\"overflow-wrap\":\"normal | break-word\",\"overflow-x\":1,\"overflow-y\":1,padding:{multi:\"<padding-width> | inherit\",max:4},\"padding-bottom\":\"<padding-width> | inherit\",\"padding-left\":\"<padding-width> | inherit\",\"padding-right\":\"<padding-width> | inherit\",\"padding-top\":\"<padding-width> | inherit\",page:1,\"page-break-after\":\"auto | always | avoid | left | right | inherit\",\"page-break-before\":\"auto | always | avoid | left | right | inherit\",\"page-break-inside\":\"auto | avoid | inherit\",\"page-policy\":1,pause:1,\"pause-after\":1,\"pause-before\":1,perspective:1,\"perspective-origin\":1,phonemes:1,pitch:1,\"pitch-range\":1,\"play-during\":1,\"pointer-events\":\"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit\",position:\"static | relative | absolute | fixed | inherit\",\"presentation-level\":1,\"punctuation-trim\":1,quotes:1,\"rendering-intent\":1,resize:1,rest:1,\"rest-after\":1,\"rest-before\":1,richness:1,right:\"<margin-width> | inherit\",rotation:1,\"rotation-point\":1,\"ruby-align\":1,\"ruby-overhang\":1,\"ruby-position\":1,\"ruby-span\":1,size:1,speak:\"normal | none | spell-out | inherit\",\"speak-header\":\"once | always | inherit\",\"speak-numeral\":\"digits | continuous | inherit\",\"speak-punctuation\":\"code | none | inherit\",\"speech-rate\":1,src:1,stress:1,\"string-set\":1,\"table-layout\":\"auto | fixed | inherit\",\"tab-size\":\"<integer> | <length>\",target:1,\"target-name\":1,\"target-new\":1,\"target-position\":1,\"text-align\":\"left | right | center | justify | inherit\",\"text-align-last\":1,\"text-decoration\":1,\"text-emphasis\":1,\"text-height\":1,\"text-indent\":\"<length> | <percentage> | inherit\",\"text-justify\":\"auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida\",\"text-outline\":1,\"text-overflow\":1,\"text-rendering\":\"auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit\",\"text-shadow\":1,\"text-transform\":\"capitalize | uppercase | lowercase | none | inherit\",\"text-wrap\":\"normal | none | avoid\",top:\"<margin-width> | inherit\",\"-ms-touch-action\":\"auto | none | pan-x | pan-y\",\"touch-action\":\"auto | none | pan-x | pan-y\",transform:1,\"transform-origin\":1,\"transform-style\":1,transition:1,\"transition-delay\":1,\"transition-duration\":1,\"transition-property\":1,\"transition-timing-function\":1,\"unicode-bidi\":\"normal | embed | isolate | bidi-override | isolate-override | plaintext | inherit\",\"user-modify\":\"read-only | read-write | write-only | inherit\",\"user-select\":\"none | text | toggle | element | elements | all | inherit\",\"user-zoom\":\"zoom | fixed\",\"vertical-align\":\"auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>\",visibility:\"visible | hidden | collapse | inherit\",\"voice-balance\":1,\"voice-duration\":1,\"voice-family\":1,\"voice-pitch\":1,\"voice-pitch-range\":1,\"voice-rate\":1,\"voice-stress\":1,\"voice-volume\":1,volume:1,\"white-space\":\"normal | pre | nowrap | pre-wrap | pre-line | inherit | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap\",\"white-space-collapse\":1,widows:\"<integer> | inherit\",width:\"<length> | <percentage> | <content-sizing> | auto | inherit\",\"word-break\":\"normal | keep-all | break-all\",\"word-spacing\":\"<length> | normal | inherit\",\"word-wrap\":\"normal | break-word\",\"writing-mode\":\"horizontal-tb | vertical-rl | vertical-lr | lr-tb | rl-tb | tb-rl | bt-rl | tb-lr | bt-lr | lr-bt | rl-bt | lr | rl | tb | inherit\",\"z-index\":\"<integer> | auto | inherit\",zoom:\"<number> | <percentage> | normal\"};PropertyName.prototype=new SyntaxUnit,PropertyName.prototype.constructor=PropertyName,PropertyName.prototype.toString=function(){return(this.hack?this.hack:\"\")+this.text},PropertyValue.prototype=new SyntaxUnit,PropertyValue.prototype.constructor=PropertyValue,PropertyValueIterator.prototype.count=function(){return this._parts.length},PropertyValueIterator.prototype.isFirst=function(){return this._i===0},PropertyValueIterator.prototype.hasNext=function(){return this._i<this._parts.length},PropertyValueIterator.prototype.mark=function(){this._marks.push(this._i)},PropertyValueIterator.prototype.peek=function(e){return this.hasNext()?this._parts[this._i+(e||0)]:null},PropertyValueIterator.prototype.next=function(){return this.hasNext()?this._parts[this._i++]:null},PropertyValueIterator.prototype.previous=function(){return this._i>0?this._parts[--this._i]:null},PropertyValueIterator.prototype.restore=function(){this._marks.length&&(this._i=this._marks.pop())},PropertyValuePart.prototype=new SyntaxUnit,PropertyValuePart.prototype.constructor=PropertyValuePart,PropertyValuePart.fromToken=function(e){return new PropertyValuePart(e.value,e.startLine,e.startCol)};var Pseudos={\":first-letter\":1,\":first-line\":1,\":before\":1,\":after\":1};Pseudos.ELEMENT=1,Pseudos.CLASS=2,Pseudos.isElement=function(e){return e.indexOf(\"::\")===0||Pseudos[e.toLowerCase()]==Pseudos.ELEMENT},Selector.prototype=new SyntaxUnit,Selector.prototype.constructor=Selector,SelectorPart.prototype=new SyntaxUnit,SelectorPart.prototype.constructor=SelectorPart,SelectorSubPart.prototype=new SyntaxUnit,SelectorSubPart.prototype.constructor=SelectorSubPart,Specificity.prototype={constructor:Specificity,compare:function(e){var t=[\"a\",\"b\",\"c\",\"d\"],n,r;for(n=0,r=t.length;n<r;n++){if(this[t[n]]<e[t[n]])return-1;if(this[t[n]]>e[t[n]])return 1}return 0},valueOf:function(){return this.a*1e3+this.b*100+this.c*10+this.d},toString:function(){return this.a+\",\"+this.b+\",\"+this.c+\",\"+this.d}},Specificity.calculate=function(e){function u(e){var t,n,r,a,f=e.elementName?e.elementName.text:\"\",l;f&&f.charAt(f.length-1)!=\"*\"&&o++;for(t=0,r=e.modifiers.length;t<r;t++){l=e.modifiers[t];switch(l.type){case\"class\":case\"attribute\":s++;break;case\"id\":i++;break;case\"pseudo\":Pseudos.isElement(l.text)?o++:s++;break;case\"not\":for(n=0,a=l.args.length;n<a;n++)u(l.args[n])}}}var t,n,r,i=0,s=0,o=0;for(t=0,n=e.parts.length;t<n;t++)r=e.parts[t],r instanceof SelectorPart&&u(r);return new Specificity(0,i,s,o)};var h=/^[0-9a-fA-F]$/,nonascii=/^[\\u0080-\\uFFFF]$/,nl=/\\n|\\r\\n|\\r|\\f/;TokenStream.prototype=mix(new TokenStreamBase,{_getToken:function(e){var t,n=this._reader,r=null,i=n.getLine(),s=n.getCol();t=n.read();while(t){switch(t){case\"/\":n.peek()==\"*\"?r=this.commentToken(t,i,s):r=this.charToken(t,i,s);break;case\"|\":case\"~\":case\"^\":case\"$\":case\"*\":n.peek()==\"=\"?r=this.comparisonToken(t,i,s):r=this.charToken(t,i,s);break;case'\"':case\"'\":r=this.stringToken(t,i,s);break;case\"#\":isNameChar(n.peek())?r=this.hashToken(t,i,s):r=this.charToken(t,i,s);break;case\".\":isDigit(n.peek())?r=this.numberToken(t,i,s):r=this.charToken(t,i,s);break;case\"-\":n.peek()==\"-\"?r=this.htmlCommentEndToken(t,i,s):isNameStart(n.peek())?r=this.identOrFunctionToken(t,i,s):r=this.charToken(t,i,s);break;case\"!\":r=this.importantToken(t,i,s);break;case\"@\":r=this.atRuleToken(t,i,s);break;case\":\":r=this.notToken(t,i,s);break;case\"<\":r=this.htmlCommentStartToken(t,i,s);break;case\"U\":case\"u\":if(n.peek()==\"+\"){r=this.unicodeRangeToken(t,i,s);break};default:isDigit(t)?r=this.numberToken(t,i,s):isWhitespace(t)?r=this.whitespaceToken(t,i,s):isIdentStart(t)?r=this.identOrFunctionToken(t,i,s):r=this.charToken(t,i,s)}break}return!r&&t===null&&(r=this.createToken(Tokens.EOF,null,i,s)),r},createToken:function(e,t,n,r,i){var s=this._reader;return i=i||{},{value:t,type:e,channel:i.channel,endChar:i.endChar,hide:i.hide||!1,startLine:n,startCol:r,endLine:s.getLine(),endCol:s.getCol()}},atRuleToken:function(e,t,n){var r=e,i=this._reader,s=Tokens.CHAR,o=!1,u,a;i.mark(),u=this.readName(),r=e+u,s=Tokens.type(r.toLowerCase());if(s==Tokens.CHAR||s==Tokens.UNKNOWN)r.length>1?s=Tokens.UNKNOWN_SYM:(s=Tokens.CHAR,r=e,i.reset());return this.createToken(s,r,t,n)},charToken:function(e,t,n){var r=Tokens.type(e),i={};return r==-1?r=Tokens.CHAR:i.endChar=Tokens[r].endChar,this.createToken(r,e,t,n,i)},commentToken:function(e,t,n){var r=this._reader,i=this.readComment(e);return this.createToken(Tokens.COMMENT,i,t,n)},comparisonToken:function(e,t,n){var r=this._reader,i=e+r.read(),s=Tokens.type(i)||Tokens.CHAR;return this.createToken(s,i,t,n)},hashToken:function(e,t,n){var r=this._reader,i=this.readName(e);return this.createToken(Tokens.HASH,i,t,n)},htmlCommentStartToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(3),i==\"<!--\"?this.createToken(Tokens.CDO,i,t,n):(r.reset(),this.charToken(e,t,n))},htmlCommentEndToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(2),i==\"-->\"?this.createToken(Tokens.CDC,i,t,n):(r.reset(),this.charToken(e,t,n))},identOrFunctionToken:function(e,t,n){var r=this._reader,i=this.readName(e),s=Tokens.IDENT;return r.peek()==\"(\"?(i+=r.read(),i.toLowerCase()==\"url(\"?(s=Tokens.URI,i=this.readURI(i),i.toLowerCase()==\"url(\"&&(s=Tokens.FUNCTION)):s=Tokens.FUNCTION):r.peek()==\":\"&&i.toLowerCase()==\"progid\"&&(i+=r.readTo(\"(\"),s=Tokens.IE_FUNCTION),this.createToken(s,i,t,n)},importantToken:function(e,t,n){var r=this._reader,i=e,s=Tokens.CHAR,o,u;r.mark(),u=r.read();while(u){if(u==\"/\"){if(r.peek()!=\"*\")break;o=this.readComment(u);if(o===\"\")break}else{if(!isWhitespace(u)){if(/i/i.test(u)){o=r.readCount(8),/mportant/i.test(o)&&(i+=u+o,s=Tokens.IMPORTANT_SYM);break}break}i+=u+this.readWhitespace()}u=r.read()}return s==Tokens.CHAR?(r.reset(),this.charToken(e,t,n)):this.createToken(s,i,t,n)},notToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(4),i.toLowerCase()==\":not(\"?this.createToken(Tokens.NOT,i,t,n):(r.reset(),this.charToken(e,t,n))},numberToken:function(e,t,n){var r=this._reader,i=this.readNumber(e),s,o=Tokens.NUMBER,u=r.peek();return isIdentStart(u)?(s=this.readName(r.read()),i+=s,/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(s)?o=Tokens.LENGTH:/^deg|^rad$|^grad$/i.test(s)?o=Tokens.ANGLE:/^ms$|^s$/i.test(s)?o=Tokens.TIME:/^hz$|^khz$/i.test(s)?o=Tokens.FREQ:/^dpi$|^dpcm$/i.test(s)?o=Tokens.RESOLUTION:o=Tokens.DIMENSION):u==\"%\"&&(i+=r.read(),o=Tokens.PERCENTAGE),this.createToken(o,i,t,n)},stringToken:function(e,t,n){var r=e,i=e,s=this._reader,o=e,u=Tokens.STRING,a=s.read();while(a){i+=a;if(a==r&&o!=\"\\\\\")break;if(isNewLine(s.peek())&&a!=\"\\\\\"){u=Tokens.INVALID;break}o=a,a=s.read()}return a===null&&(u=Tokens.INVALID),this.createToken(u,i,t,n)},unicodeRangeToken:function(e,t,n){var r=this._reader,i=e,s,o=Tokens.CHAR;return r.peek()==\"+\"&&(r.mark(),i+=r.read(),i+=this.readUnicodeRangePart(!0),i.length==2?r.reset():(o=Tokens.UNICODE_RANGE,i.indexOf(\"?\")==-1&&r.peek()==\"-\"&&(r.mark(),s=r.read(),s+=this.readUnicodeRangePart(!1),s.length==1?r.reset():i+=s))),this.createToken(o,i,t,n)},whitespaceToken:function(e,t,n){var r=this._reader,i=e+this.readWhitespace();return this.createToken(Tokens.S,i,t,n)},readUnicodeRangePart:function(e){var t=this._reader,n=\"\",r=t.peek();while(isHexDigit(r)&&n.length<6)t.read(),n+=r,r=t.peek();if(e)while(r==\"?\"&&n.length<6)t.read(),n+=r,r=t.peek();return n},readWhitespace:function(){var e=this._reader,t=\"\",n=e.peek();while(isWhitespace(n))e.read(),t+=n,n=e.peek();return t},readNumber:function(e){var t=this._reader,n=e,r=e==\".\",i=t.peek();while(i){if(isDigit(i))n+=t.read();else{if(i!=\".\")break;if(r)break;r=!0,n+=t.read()}i=t.peek()}return n},readString:function(){var e=this._reader,t=e.read(),n=t,r=t,i=e.peek();while(i){i=e.read(),n+=i;if(i==t&&r!=\"\\\\\")break;if(isNewLine(e.peek())&&i!=\"\\\\\"){n=\"\";break}r=i,i=e.peek()}return i===null&&(n=\"\"),n},readURI:function(e){var t=this._reader,n=e,r=\"\",i=t.peek();t.mark();while(i&&isWhitespace(i))t.read(),i=t.peek();i==\"'\"||i=='\"'?r=this.readString():r=this.readURL(),i=t.peek();while(i&&isWhitespace(i))t.read(),i=t.peek();return r===\"\"||i!=\")\"?(n=e,t.reset()):n+=r+t.read(),n},readURL:function(){var e=this._reader,t=\"\",n=e.peek();while(/^[!#$%&\\\\*-~]$/.test(n))t+=e.read(),n=e.peek();return t},readName:function(e){var t=this._reader,n=e||\"\",r=t.peek();for(;;)if(r==\"\\\\\")n+=this.readEscape(t.read()),r=t.peek();else{if(!r||!isNameChar(r))break;n+=t.read(),r=t.peek()}return n},readEscape:function(e){var t=this._reader,n=e||\"\",r=0,i=t.peek();if(isHexDigit(i))do n+=t.read(),i=t.peek();while(i&&isHexDigit(i)&&++r<6);return n.length==3&&/\\s/.test(i)||n.length==7||n.length==1?t.read():i=\"\",n+i},readComment:function(e){var t=this._reader,n=e||\"\",r=t.read();if(r==\"*\"){while(r){n+=r;if(n.length>2&&r==\"*\"&&t.peek()==\"/\"){n+=t.read();break}r=t.read()}return n}return\"\"}});var Tokens=[{name:\"CDO\"},{name:\"CDC\"},{name:\"S\",whitespace:!0},{name:\"COMMENT\",comment:!0,hide:!0,channel:\"comment\"},{name:\"INCLUDES\",text:\"~=\"},{name:\"DASHMATCH\",text:\"|=\"},{name:\"PREFIXMATCH\",text:\"^=\"},{name:\"SUFFIXMATCH\",text:\"$=\"},{name:\"SUBSTRINGMATCH\",text:\"*=\"},{name:\"STRING\"},{name:\"IDENT\"},{name:\"HASH\"},{name:\"IMPORT_SYM\",text:\"@import\"},{name:\"PAGE_SYM\",text:\"@page\"},{name:\"MEDIA_SYM\",text:\"@media\"},{name:\"FONT_FACE_SYM\",text:\"@font-face\"},{name:\"CHARSET_SYM\",text:\"@charset\"},{name:\"NAMESPACE_SYM\",text:\"@namespace\"},{name:\"VIEWPORT_SYM\",text:[\"@viewport\",\"@-ms-viewport\"]},{name:\"UNKNOWN_SYM\"},{name:\"KEYFRAMES_SYM\",text:[\"@keyframes\",\"@-webkit-keyframes\",\"@-moz-keyframes\",\"@-o-keyframes\"]},{name:\"IMPORTANT_SYM\"},{name:\"LENGTH\"},{name:\"ANGLE\"},{name:\"TIME\"},{name:\"FREQ\"},{name:\"DIMENSION\"},{name:\"PERCENTAGE\"},{name:\"NUMBER\"},{name:\"URI\"},{name:\"FUNCTION\"},{name:\"UNICODE_RANGE\"},{name:\"INVALID\"},{name:\"PLUS\",text:\"+\"},{name:\"GREATER\",text:\">\"},{name:\"COMMA\",text:\",\"},{name:\"TILDE\",text:\"~\"},{name:\"NOT\"},{name:\"TOPLEFTCORNER_SYM\",text:\"@top-left-corner\"},{name:\"TOPLEFT_SYM\",text:\"@top-left\"},{name:\"TOPCENTER_SYM\",text:\"@top-center\"},{name:\"TOPRIGHT_SYM\",text:\"@top-right\"},{name:\"TOPRIGHTCORNER_SYM\",text:\"@top-right-corner\"},{name:\"BOTTOMLEFTCORNER_SYM\",text:\"@bottom-left-corner\"},{name:\"BOTTOMLEFT_SYM\",text:\"@bottom-left\"},{name:\"BOTTOMCENTER_SYM\",text:\"@bottom-center\"},{name:\"BOTTOMRIGHT_SYM\",text:\"@bottom-right\"},{name:\"BOTTOMRIGHTCORNER_SYM\",text:\"@bottom-right-corner\"},{name:\"LEFTTOP_SYM\",text:\"@left-top\"},{name:\"LEFTMIDDLE_SYM\",text:\"@left-middle\"},{name:\"LEFTBOTTOM_SYM\",text:\"@left-bottom\"},{name:\"RIGHTTOP_SYM\",text:\"@right-top\"},{name:\"RIGHTMIDDLE_SYM\",text:\"@right-middle\"},{name:\"RIGHTBOTTOM_SYM\",text:\"@right-bottom\"},{name:\"RESOLUTION\",state:\"media\"},{name:\"IE_FUNCTION\"},{name:\"CHAR\"},{name:\"PIPE\",text:\"|\"},{name:\"SLASH\",text:\"/\"},{name:\"MINUS\",text:\"-\"},{name:\"STAR\",text:\"*\"},{name:\"LBRACE\",endChar:\"}\",text:\"{\"},{name:\"RBRACE\",text:\"}\"},{name:\"LBRACKET\",endChar:\"]\",text:\"[\"},{name:\"RBRACKET\",text:\"]\"},{name:\"EQUALS\",text:\"=\"},{name:\"COLON\",text:\":\"},{name:\"SEMICOLON\",text:\";\"},{name:\"LPAREN\",endChar:\")\",text:\"(\"},{name:\"RPAREN\",text:\")\"},{name:\"DOT\",text:\".\"}];(function(){var e=[],t={};Tokens.UNKNOWN=-1,Tokens.unshift({name:\"EOF\"});for(var n=0,r=Tokens.length;n<r;n++){e.push(Tokens[n].name),Tokens[Tokens[n].name]=n;if(Tokens[n].text)if(Tokens[n].text instanceof Array)for(var i=0;i<Tokens[n].text.length;i++)t[Tokens[n].text[i]]=n;else t[Tokens[n].text]=n}Tokens.name=function(t){return e[t]},Tokens.type=function(e){return t[e]||-1}})();var Validation={validate:function(e,t){var n=e.toString().toLowerCase(),r=t.parts,i=new PropertyValueIterator(t),s=Properties[n],o,u,a,f,l,c,h,p,d,v,m;if(!s){if(n.indexOf(\"-\")!==0)throw new ValidationError(\"Unknown property '\"+e+\"'.\",e.line,e.col)}else typeof s!=\"number\"&&(typeof s==\"string\"?s.indexOf(\"||\")>-1?this.groupProperty(s,i):this.singleProperty(s,i,1):s.multi?this.multiProperty(s.multi,i,s.comma,s.max||Infinity):typeof s==\"function\"&&s(i))},singleProperty:function(e,t,n,r){var i=!1,s=t.value,o=0,u;while(t.hasNext()&&o<n){i=ValidationTypes.isAny(t,e);if(!i)break;o++}if(!i)throw t.hasNext()&&!t.isFirst()?(u=t.peek(),new ValidationError(\"Expected end of value but found '\"+u+\"'.\",u.line,u.col)):new ValidationError(\"Expected (\"+e+\") but found '\"+s+\"'.\",s.line,s.col);if(t.hasNext())throw u=t.next(),new ValidationError(\"Expected end of value but found '\"+u+\"'.\",u.line,u.col)},multiProperty:function(e,t,n,r){var i=!1,s=t.value,o=0,u=!1,a;while(t.hasNext()&&!i&&o<r){if(!ValidationTypes.isAny(t,e))break;o++;if(!t.hasNext())i=!0;else if(n){if(t.peek()!=\",\")break;a=t.next()}}if(!i)throw t.hasNext()&&!t.isFirst()?(a=t.peek(),new ValidationError(\"Expected end of value but found '\"+a+\"'.\",a.line,a.col)):(a=t.previous(),n&&a==\",\"?new ValidationError(\"Expected end of value but found '\"+a+\"'.\",a.line,a.col):new ValidationError(\"Expected (\"+e+\") but found '\"+s+\"'.\",s.line,s.col));if(t.hasNext())throw a=t.next(),new ValidationError(\"Expected end of value but found '\"+a+\"'.\",a.line,a.col)},groupProperty:function(e,t,n){var r=!1,i=t.value,s=e.split(\"||\").length,o={count:0},u=!1,a,f;while(t.hasNext()&&!r){a=ValidationTypes.isAnyOfGroup(t,e);if(!a)break;if(o[a])break;o[a]=1,o.count++,u=!0;if(o.count==s||!t.hasNext())r=!0}if(!r)throw u&&t.hasNext()?(f=t.peek(),new ValidationError(\"Expected end of value but found '\"+f+\"'.\",f.line,f.col)):new ValidationError(\"Expected (\"+e+\") but found '\"+i+\"'.\",i.line,i.col);if(t.hasNext())throw f=t.next(),new ValidationError(\"Expected end of value but found '\"+f+\"'.\",f.line,f.col)}};ValidationError.prototype=new Error;var ValidationTypes={isLiteral:function(e,t){var n=e.text.toString().toLowerCase(),r=t.split(\" | \"),i,s,o=!1;for(i=0,s=r.length;i<s&&!o;i++)n==r[i].toLowerCase()&&(o=!0);return o},isSimple:function(e){return!!this.simple[e]},isComplex:function(e){return!!this.complex[e]},isAny:function(e,t){var n=t.split(\" | \"),r,i,s=!1;for(r=0,i=n.length;r<i&&!s&&e.hasNext();r++)s=this.isType(e,n[r]);return s},isAnyOfGroup:function(e,t){var n=t.split(\" || \"),r,i,s=!1;for(r=0,i=n.length;r<i&&!s;r++)s=this.isType(e,n[r]);return s?n[r-1]:!1},isType:function(e,t){var n=e.peek(),r=!1;return t.charAt(0)!=\"<\"?(r=this.isLiteral(n,t),r&&e.next()):this.simple[t]?(r=this.simple[t](n),r&&e.next()):r=this.complex[t](e),r},simple:{\"<absolute-size>\":function(e){return ValidationTypes.isLiteral(e,\"xx-small | x-small | small | medium | large | x-large | xx-large\")},\"<attachment>\":function(e){return ValidationTypes.isLiteral(e,\"scroll | fixed | local\")},\"<attr>\":function(e){return e.type==\"function\"&&e.name==\"attr\"},\"<bg-image>\":function(e){return this[\"<image>\"](e)||this[\"<gradient>\"](e)||e==\"none\"},\"<gradient>\":function(e){return e.type==\"function\"&&/^(?:\\-(?:ms|moz|o|webkit)\\-)?(?:repeating\\-)?(?:radial\\-|linear\\-)?gradient/i.test(e)},\"<box>\":function(e){return ValidationTypes.isLiteral(e,\"padding-box | border-box | content-box\")},\"<content>\":function(e){return e.type==\"function\"&&e.name==\"content\"},\"<relative-size>\":function(e){return ValidationTypes.isLiteral(e,\"smaller | larger\")},\"<ident>\":function(e){return e.type==\"identifier\"},\"<length>\":function(e){return e.type==\"function\"&&/^(?:\\-(?:ms|moz|o|webkit)\\-)?calc/i.test(e)?!0:e.type==\"length\"||e.type==\"number\"||e.type==\"integer\"||e==\"0\"},\"<color>\":function(e){return e.type==\"color\"||e==\"transparent\"},\"<number>\":function(e){return e.type==\"number\"||this[\"<integer>\"](e)},\"<integer>\":function(e){return e.type==\"integer\"},\"<line>\":function(e){return e.type==\"integer\"},\"<angle>\":function(e){return e.type==\"angle\"},\"<uri>\":function(e){return e.type==\"uri\"},\"<image>\":function(e){return this[\"<uri>\"](e)},\"<percentage>\":function(e){return e.type==\"percentage\"||e==\"0\"},\"<border-width>\":function(e){return this[\"<length>\"](e)||ValidationTypes.isLiteral(e,\"thin | medium | thick\")},\"<border-style>\":function(e){return ValidationTypes.isLiteral(e,\"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset\")},\"<content-sizing>\":function(e){return ValidationTypes.isLiteral(e,\"fill-available | -moz-available | -webkit-fill-available | max-content | -moz-max-content | -webkit-max-content | min-content | -moz-min-content | -webkit-min-content | fit-content | -moz-fit-content | -webkit-fit-content\")},\"<margin-width>\":function(e){return this[\"<length>\"](e)||this[\"<percentage>\"](e)||ValidationTypes.isLiteral(e,\"auto\")},\"<padding-width>\":function(e){return this[\"<length>\"](e)||this[\"<percentage>\"](e)},\"<shape>\":function(e){return e.type==\"function\"&&(e.name==\"rect\"||e.name==\"inset-rect\")},\"<time>\":function(e){return e.type==\"time\"},\"<flex-grow>\":function(e){return this[\"<number>\"](e)},\"<flex-shrink>\":function(e){return this[\"<number>\"](e)},\"<width>\":function(e){return this[\"<margin-width>\"](e)},\"<flex-basis>\":function(e){return this[\"<width>\"](e)},\"<flex-direction>\":function(e){return ValidationTypes.isLiteral(e,\"row | row-reverse | column | column-reverse\")},\"<flex-wrap>\":function(e){return ValidationTypes.isLiteral(e,\"nowrap | wrap | wrap-reverse\")}},complex:{\"<bg-position>\":function(e){var t=this,n=!1,r=\"<percentage> | <length>\",i=\"left | right\",s=\"top | bottom\",o=0,u=function(){return e.hasNext()&&e.peek()!=\",\"};while(e.peek(o)&&e.peek(o)!=\",\")o++;return o<3?ValidationTypes.isAny(e,i+\" | center | \"+r)?(n=!0,ValidationTypes.isAny(e,s+\" | center | \"+r)):ValidationTypes.isAny(e,s)&&(n=!0,ValidationTypes.isAny(e,i+\" | center\")):ValidationTypes.isAny(e,i)?ValidationTypes.isAny(e,s)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,r)&&(ValidationTypes.isAny(e,s)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,\"center\")&&(n=!0)):ValidationTypes.isAny(e,s)?ValidationTypes.isAny(e,i)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,r)&&(ValidationTypes.isAny(e,i)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,\"center\")&&(n=!0)):ValidationTypes.isAny(e,\"center\")&&ValidationTypes.isAny(e,i+\" | \"+s)&&(n=!0,ValidationTypes.isAny(e,r)),n},\"<bg-size>\":function(e){var t=this,n=!1,r=\"<percentage> | <length> | auto\",i,s,o;return ValidationTypes.isAny(e,\"cover | contain\")?n=!0:ValidationTypes.isAny(e,r)&&(n=!0,ValidationTypes.isAny(e,r)),n},\"<repeat-style>\":function(e){var t=!1,n=\"repeat | space | round | no-repeat\",r;return e.hasNext()&&(r=e.next(),ValidationTypes.isLiteral(r,\"repeat-x | repeat-y\")?t=!0:ValidationTypes.isLiteral(r,n)&&(t=!0,e.hasNext()&&ValidationTypes.isLiteral(e.peek(),n)&&e.next())),t},\"<shadow>\":function(e){var t=!1,n=0,r=!1,i=!1,s;if(e.hasNext()){ValidationTypes.isAny(e,\"inset\")&&(r=!0),ValidationTypes.isAny(e,\"<color>\")&&(i=!0);while(ValidationTypes.isAny(e,\"<length>\")&&n<4)n++;e.hasNext()&&(i||ValidationTypes.isAny(e,\"<color>\"),r||ValidationTypes.isAny(e,\"inset\")),t=n>=2&&n<=4}return t},\"<x-one-radius>\":function(e){var t=!1,n=\"<length> | <percentage> | inherit\";return ValidationTypes.isAny(e,n)&&(t=!0,ValidationTypes.isAny(e,n)),t},\"<flex>\":function(e){var t,n=!1;ValidationTypes.isAny(e,\"none | inherit\")?n=!0:ValidationTypes.isType(e,\"<flex-grow>\")?e.peek()?ValidationTypes.isType(e,\"<flex-shrink>\")?e.peek()?n=ValidationTypes.isType(e,\"<flex-basis>\"):n=!0:ValidationTypes.isType(e,\"<flex-basis>\")&&(n=e.peek()===null):n=!0:ValidationTypes.isType(e,\"<flex-basis>\")&&(n=!0);if(!n)throw t=e.peek(),new ValidationError(\"Expected (none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]) but found '\"+e.value.text+\"'.\",t.line,t.col);return n}}};parserlib.css={Colors:Colors,Combinator:Combinator,Parser:Parser,PropertyName:PropertyName,PropertyValue:PropertyValue,PropertyValuePart:PropertyValuePart,MediaFeature:MediaFeature,MediaQuery:MediaQuery,Selector:Selector,SelectorPart:SelectorPart,SelectorSubPart:SelectorSubPart,Specificity:Specificity,TokenStream:TokenStream,Tokens:Tokens,ValidationError:ValidationError}}(),function(){for(var e in parserlib)exports[e]=parserlib[e]}();var util={isArray:function(e){return Array.isArray(e)||typeof e==\"object\"&&objectToString(e)===\"[object Array]\"},isDate:function(e){return typeof e==\"object\"&&objectToString(e)===\"[object Date]\"},isRegExp:function(e){return typeof e==\"object\"&&objectToString(e)===\"[object RegExp]\"},getRegExpFlags:function(e){var t=\"\";return e.global&&(t+=\"g\"),e.ignoreCase&&(t+=\"i\"),e.multiline&&(t+=\"m\"),t}};typeof module==\"object\"&&(module.exports=clone),clone.clonePrototype=function(e){if(e===null)return null;var t=function(){};return t.prototype=e,new t};var CSSLint=function(){function i(e,t){var r,i=e&&e.match(n),s=i&&i[1];return s&&(r={\"true\":2,\"\":1,\"false\":0,2:2,1:1,0:0},s.toLowerCase().split(\",\").forEach(function(e){var n=e.split(\":\"),i=n[0]||\"\",s=n[1]||\"\";t[i.trim()]=r[s.trim()]})),t}var e=[],t=[],n=/\\/\\*csslint([^\\*]*)\\*\\//,r=new parserlib.util.EventTarget;return r.version=\"@VERSION@\",r.addRule=function(t){e.push(t),e[t.id]=t},r.clearRules=function(){e=[]},r.getRules=function(){return[].concat(e).sort(function(e,t){return e.id>t.id?1:0})},r.getRuleset=function(){var t={},n=0,r=e.length;while(n<r)t[e[n++].id]=1;return t},r.addFormatter=function(e){t[e.id]=e},r.getFormatter=function(e){return t[e]},r.format=function(e,t,n,r){var i=this.getFormatter(n),s=null;return i&&(s=i.startFormat(),s+=i.formatResults(e,t,r||{}),s+=i.endFormat()),s},r.hasFormat=function(e){return t.hasOwnProperty(e)},r.verify=function(t,r){var s=0,o,u,a,f=new parserlib.css.Parser({starHack:!0,ieFilters:!0,underscoreHack:!0,strict:!1});u=t.replace(/\\n\\r?/g,\"$split$\").split(\"$split$\"),r||(r=this.getRuleset()),n.test(t)&&(r=clone(r),r=i(t,r)),o=new Reporter(u,r),r.errors=2;for(s in r)r.hasOwnProperty(s)&&r[s]&&e[s]&&e[s].init(f,o);try{f.parse(t)}catch(l){o.error(\"Fatal error, cannot continue: \"+l.message,l.line,l.col,{})}return a={messages:o.messages,stats:o.stats,ruleset:o.ruleset},a.messages.sort(function(e,t){return e.rollup&&!t.rollup?1:!e.rollup&&t.rollup?-1:e.line-t.line}),a},r}();Reporter.prototype={constructor:Reporter,error:function(e,t,n,r){this.messages.push({type:\"error\",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r||{}})},warn:function(e,t,n,r){this.report(e,t,n,r)},report:function(e,t,n,r){this.messages.push({type:this.ruleset[r.id]===2?\"error\":\"warning\",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r})},info:function(e,t,n,r){this.messages.push({type:\"info\",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r})},rollupError:function(e,t){this.messages.push({type:\"error\",rollup:!0,message:e,rule:t})},rollupWarn:function(e,t){this.messages.push({type:\"warning\",rollup:!0,message:e,rule:t})},stat:function(e,t){this.stats[e]=t}},CSSLint._Reporter=Reporter,CSSLint.Util={mix:function(e,t){var n;for(n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return n},indexOf:function(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},forEach:function(e,t){if(e.forEach)return e.forEach(t);for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)}},CSSLint.addRule({id:\"adjoining-classes\",name:\"Disallow adjoining classes\",desc:\"Don't use adjoining classes.\",browsers:\"IE6\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f,l,c;for(f=0;f<i.length;f++){s=i[f];for(l=0;l<s.parts.length;l++){o=s.parts[l];if(o.type===e.SELECTOR_PART_TYPE){a=0;for(c=0;c<o.modifiers.length;c++)u=o.modifiers[c],u.type===\"class\"&&a++,a>1&&t.report(\"Don't use adjoining classes.\",o.line,o.col,n)}}}})}}),CSSLint.addRule({id:\"box-model\",name:\"Beware of broken box size\",desc:\"Don't use width or height when using padding or border.\",browsers:\"All\",init:function(e,t){function u(){s={},o=!1}function a(){var e,u;if(!o){if(s.height)for(e in i)i.hasOwnProperty(e)&&s[e]&&(u=s[e].value,(e!==\"padding\"||u.parts.length!==2||u.parts[0].value!==0)&&t.report(\"Using height with \"+e+\" can sometimes make elements larger than you expect.\",s[e].line,s[e].col,n));if(s.width)for(e in r)r.hasOwnProperty(e)&&s[e]&&(u=s[e].value,(e!==\"padding\"||u.parts.length!==2||u.parts[1].value!==0)&&t.report(\"Using width with \"+e+\" can sometimes make elements larger than you expect.\",s[e].line,s[e].col,n))}}var n=this,r={border:1,\"border-left\":1,\"border-right\":1,padding:1,\"padding-left\":1,\"padding-right\":1},i={border:1,\"border-bottom\":1,\"border-top\":1,padding:1,\"padding-bottom\":1,\"padding-top\":1},s,o=!1;e.addListener(\"startrule\",u),e.addListener(\"startfontface\",u),e.addListener(\"startpage\",u),e.addListener(\"startpagemargin\",u),e.addListener(\"startkeyframerule\",u),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase();i[t]||r[t]?!/^0\\S*$/.test(e.value)&&(t!==\"border\"||e.value.toString()!==\"none\")&&(s[t]={line:e.property.line,col:e.property.col,value:e.value}):/^(width|height)/i.test(t)&&/^(length|percentage)/.test(e.value.parts[0].type)?s[t]=1:t===\"box-sizing\"&&(o=!0)}),e.addListener(\"endrule\",a),e.addListener(\"endfontface\",a),e.addListener(\"endpage\",a),e.addListener(\"endpagemargin\",a),e.addListener(\"endkeyframerule\",a)}}),CSSLint.addRule({id:\"box-sizing\",name:\"Disallow use of box-sizing\",desc:\"The box-sizing properties isn't supported in IE6 and IE7.\",browsers:\"IE6, IE7\",tags:[\"Compatibility\"],init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.property.text.toLowerCase();r===\"box-sizing\"&&t.report(\"The box-sizing property isn't supported in IE6 and IE7.\",e.line,e.col,n)})}}),CSSLint.addRule({id:\"bulletproof-font-face\",name:\"Use the bulletproof @font-face syntax\",desc:\"Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).\",browsers:\"All\",init:function(e,t){var n=this,r=!1,i=!0,s=!1,o,u;e.addListener(\"startfontface\",function(){r=!0}),e.addListener(\"property\",function(e){if(!r)return;var t=e.property.toString().toLowerCase(),n=e.value.toString();o=e.line,u=e.col;if(t===\"src\"){var a=/^\\s?url\\(['\"].+\\.eot\\?.*['\"]\\)\\s*format\\(['\"]embedded-opentype['\"]\\).*$/i;!n.match(a)&&i?(s=!0,i=!1):n.match(a)&&!i&&(s=!1)}}),e.addListener(\"endfontface\",function(){r=!1,s&&t.report(\"@font-face declaration doesn't follow the fontspring bulletproof syntax.\",o,u,n)})}}),CSSLint.addRule({id:\"compatible-vendor-prefixes\",name:\"Require compatible vendor prefixes\",desc:\"Include all compatible vendor prefixes to reach a wider range of users.\",browsers:\"All\",init:function(e,t){var n=this,r,i,s,o,u,a,f,l=!1,c=Array.prototype.push,h=[];r={animation:\"webkit moz\",\"animation-delay\":\"webkit moz\",\"animation-direction\":\"webkit moz\",\"animation-duration\":\"webkit moz\",\"animation-fill-mode\":\"webkit moz\",\"animation-iteration-count\":\"webkit moz\",\"animation-name\":\"webkit moz\",\"animation-play-state\":\"webkit moz\",\"animation-timing-function\":\"webkit moz\",appearance:\"webkit moz\",\"border-end\":\"webkit moz\",\"border-end-color\":\"webkit moz\",\"border-end-style\":\"webkit moz\",\"border-end-width\":\"webkit moz\",\"border-image\":\"webkit moz o\",\"border-radius\":\"webkit\",\"border-start\":\"webkit moz\",\"border-start-color\":\"webkit moz\",\"border-start-style\":\"webkit moz\",\"border-start-width\":\"webkit moz\",\"box-align\":\"webkit moz ms\",\"box-direction\":\"webkit moz ms\",\"box-flex\":\"webkit moz ms\",\"box-lines\":\"webkit ms\",\"box-ordinal-group\":\"webkit moz ms\",\"box-orient\":\"webkit moz ms\",\"box-pack\":\"webkit moz ms\",\"box-sizing\":\"webkit moz\",\"box-shadow\":\"webkit moz\",\"column-count\":\"webkit moz ms\",\"column-gap\":\"webkit moz ms\",\"column-rule\":\"webkit moz ms\",\"column-rule-color\":\"webkit moz ms\",\"column-rule-style\":\"webkit moz ms\",\"column-rule-width\":\"webkit moz ms\",\"column-width\":\"webkit moz ms\",hyphens:\"epub moz\",\"line-break\":\"webkit ms\",\"margin-end\":\"webkit moz\",\"margin-start\":\"webkit moz\",\"marquee-speed\":\"webkit wap\",\"marquee-style\":\"webkit wap\",\"padding-end\":\"webkit moz\",\"padding-start\":\"webkit moz\",\"tab-size\":\"moz o\",\"text-size-adjust\":\"webkit ms\",transform:\"webkit moz ms o\",\"transform-origin\":\"webkit moz ms o\",transition:\"webkit moz o\",\"transition-delay\":\"webkit moz o\",\"transition-duration\":\"webkit moz o\",\"transition-property\":\"webkit moz o\",\"transition-timing-function\":\"webkit moz o\",\"user-modify\":\"webkit moz\",\"user-select\":\"webkit moz ms\",\"word-break\":\"epub ms\",\"writing-mode\":\"epub ms\"};for(s in r)if(r.hasOwnProperty(s)){o=[],u=r[s].split(\" \");for(a=0,f=u.length;a<f;a++)o.push(\"-\"+u[a]+\"-\"+s);r[s]=o,c.apply(h,o)}e.addListener(\"startrule\",function(){i=[]}),e.addListener(\"startkeyframes\",function(e){l=e.prefix||!0}),e.addListener(\"endkeyframes\",function(){l=!1}),e.addListener(\"property\",function(e){var t=e.property;CSSLint.Util.indexOf(h,t.text)>-1&&(!l||typeof l!=\"string\"||t.text.indexOf(\"-\"+l+\"-\")!==0)&&i.push(t)}),e.addListener(\"endrule\",function(){if(!i.length)return;var e={},s,o,u,a,f,l,c,h,p,d;for(s=0,o=i.length;s<o;s++){u=i[s];for(a in r)r.hasOwnProperty(a)&&(f=r[a],CSSLint.Util.indexOf(f,u.text)>-1&&(e[a]||(e[a]={full:f.slice(0),actual:[],actualNodes:[]}),CSSLint.Util.indexOf(e[a].actual,u.text)===-1&&(e[a].actual.push(u.text),e[a].actualNodes.push(u))))}for(a in e)if(e.hasOwnProperty(a)){l=e[a],c=l.full,h=l.actual;if(c.length>h.length)for(s=0,o=c.length;s<o;s++)p=c[s],CSSLint.Util.indexOf(h,p)===-1&&(d=h.length===1?h[0]:h.length===2?h.join(\" and \"):h.join(\", \"),t.report(\"The property \"+p+\" is compatible with \"+d+\" and should be included as well.\",l.actualNodes[0].line,l.actualNodes[0].col,n))}})}}),CSSLint.addRule({id:\"display-property-grouping\",name:\"Require properties appropriate for display\",desc:\"Certain properties shouldn't be used with certain display property values.\",browsers:\"All\",init:function(e,t){function s(e,s,o){i[e]&&(typeof r[e]!=\"string\"||i[e].value.toLowerCase()!==r[e])&&t.report(o||e+\" can't be used with display: \"+s+\".\",i[e].line,i[e].col,n)}function o(){i={}}function u(){var e=i.display?i.display.value:null;if(e)switch(e){case\"inline\":s(\"height\",e),s(\"width\",e),s(\"margin\",e),s(\"margin-top\",e),s(\"margin-bottom\",e),s(\"float\",e,\"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).\");break;case\"block\":s(\"vertical-align\",e);break;case\"inline-block\":s(\"float\",e);break;default:e.indexOf(\"table-\")===0&&(s(\"margin\",e),s(\"margin-left\",e),s(\"margin-right\",e),s(\"margin-top\",e),s(\"margin-bottom\",e),s(\"float\",e))}}var n=this,r={display:1,\"float\":\"none\",height:1,width:1,margin:1,\"margin-left\":1,\"margin-right\":1,\"margin-bottom\":1,\"margin-top\":1,padding:1,\"padding-left\":1,\"padding-right\":1,\"padding-bottom\":1,\"padding-top\":1,\"vertical-align\":1},i;e.addListener(\"startrule\",o),e.addListener(\"startfontface\",o),e.addListener(\"startkeyframerule\",o),e.addListener(\"startpagemargin\",o),e.addListener(\"startpage\",o),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase();r[t]&&(i[t]={value:e.value.text,line:e.property.line,col:e.property.col})}),e.addListener(\"endrule\",u),e.addListener(\"endfontface\",u),e.addListener(\"endkeyframerule\",u),e.addListener(\"endpagemargin\",u),e.addListener(\"endpage\",u)}}),CSSLint.addRule({id:\"duplicate-background-images\",name:\"Disallow duplicate background images\",desc:\"Every background-image should be unique. Use a common class for e.g. sprites.\",browsers:\"All\",init:function(e,t){var n=this,r={};e.addListener(\"property\",function(e){var i=e.property.text,s=e.value,o,u;if(i.match(/background/i))for(o=0,u=s.parts.length;o<u;o++)s.parts[o].type===\"uri\"&&(typeof r[s.parts[o].uri]==\"undefined\"?r[s.parts[o].uri]=e:t.report(\"Background image '\"+s.parts[o].uri+\"' was used multiple times, first declared at line \"+r[s.parts[o].uri].line+\", col \"+r[s.parts[o].uri].col+\".\",e.line,e.col,n))})}}),CSSLint.addRule({id:\"duplicate-properties\",name:\"Disallow duplicate properties\",desc:\"Duplicate properties must appear one after the other.\",browsers:\"All\",init:function(e,t){function s(){r={}}var n=this,r,i;e.addListener(\"startrule\",s),e.addListener(\"startfontface\",s),e.addListener(\"startpage\",s),e.addListener(\"startpagemargin\",s),e.addListener(\"startkeyframerule\",s),e.addListener(\"property\",function(e){var s=e.property,o=s.text.toLowerCase();r[o]&&(i!==o||r[o]===e.value.text)&&t.report(\"Duplicate property '\"+e.property+\"' found.\",e.line,e.col,n),r[o]=e.value.text,i=o})}}),CSSLint.addRule({id:\"empty-rules\",name:\"Disallow empty rules\",desc:\"Rules without any properties specified should be removed.\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"startrule\",function(){r=0}),e.addListener(\"property\",function(){r++}),e.addListener(\"endrule\",function(e){var i=e.selectors;r===0&&t.report(\"Rule is empty.\",i[0].line,i[0].col,n)})}}),CSSLint.addRule({id:\"errors\",name:\"Parsing Errors\",desc:\"This rule looks for recoverable syntax errors.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"error\",function(e){t.error(e.message,e.line,e.col,n)})}}),CSSLint.addRule({id:\"fallback-colors\",name:\"Require fallback colors\",desc:\"For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.\",browsers:\"IE6,IE7,IE8\",init:function(e,t){function o(){s={},r=null}var n=this,r,i={color:1,background:1,\"border-color\":1,\"border-top-color\":1,\"border-right-color\":1,\"border-bottom-color\":1,\"border-left-color\":1,border:1,\"border-top\":1,\"border-right\":1,\"border-bottom\":1,\"border-left\":1,\"background-color\":1},s;e.addListener(\"startrule\",o),e.addListener(\"startfontface\",o),e.addListener(\"startpage\",o),e.addListener(\"startpagemargin\",o),e.addListener(\"startkeyframerule\",o),e.addListener(\"property\",function(e){var s=e.property,o=s.text.toLowerCase(),u=e.value.parts,a=0,f=\"\",l=u.length;if(i[o])while(a<l)u[a].type===\"color\"&&(\"alpha\"in u[a]||\"hue\"in u[a]?(/([^\\)]+)\\(/.test(u[a])&&(f=RegExp.$1.toUpperCase()),(!r||r.property.text.toLowerCase()!==o||r.colorType!==\"compat\")&&t.report(\"Fallback \"+o+\" (hex or RGB) should precede \"+f+\" \"+o+\".\",e.line,e.col,n)):e.colorType=\"compat\"),a++;r=e})}}),CSSLint.addRule({id:\"floats\",name:\"Disallow too many floats\",desc:\"This rule tests if the float property is used too many times\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"property\",function(e){e.property.text.toLowerCase()===\"float\"&&e.value.text.toLowerCase()!==\"none\"&&r++}),e.addListener(\"endstylesheet\",function(){t.stat(\"floats\",r),r>=10&&t.rollupWarn(\"Too many floats (\"+r+\"), you're probably using them for layout. Consider using a grid system instead.\",n)})}}),CSSLint.addRule({id:\"font-faces\",name:\"Don't use too many web fonts\",desc:\"Too many different web fonts in the same stylesheet.\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"startfontface\",function(){r++}),e.addListener(\"endstylesheet\",function(){r>5&&t.rollupWarn(\"Too many @font-face declarations (\"+r+\").\",n)})}}),CSSLint.addRule({id:\"font-sizes\",name:\"Disallow too many font sizes\",desc:\"Checks the number of font-size declarations.\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"property\",function(e){e.property.toString()===\"font-size\"&&r++}),e.addListener(\"endstylesheet\",function(){t.stat(\"font-sizes\",r),r>=10&&t.rollupWarn(\"Too many font-size declarations (\"+r+\"), abstraction needed.\",n)})}}),CSSLint.addRule({id:\"gradients\",name:\"Require all gradient definitions\",desc:\"When using a vendor-prefixed gradient, make sure to use them all.\",browsers:\"All\",init:function(e,t){var n=this,r;e.addListener(\"startrule\",function(){r={moz:0,webkit:0,oldWebkit:0,o:0}}),e.addListener(\"property\",function(e){/\\-(moz|o|webkit)(?:\\-(?:linear|radial))\\-gradient/i.test(e.value)?r[RegExp.$1]=1:/\\-webkit\\-gradient/i.test(e.value)&&(r.oldWebkit=1)}),e.addListener(\"endrule\",function(e){var i=[];r.moz||i.push(\"Firefox 3.6+\"),r.webkit||i.push(\"Webkit (Safari 5+, Chrome)\"),r.oldWebkit||i.push(\"Old Webkit (Safari 4+, Chrome)\"),r.o||i.push(\"Opera 11.1+\"),i.length&&i.length<4&&t.report(\"Missing vendor-prefixed CSS gradients for \"+i.join(\", \")+\".\",e.selectors[0].line,e.selectors[0].col,n)})}}),CSSLint.addRule({id:\"ids\",name:\"Disallow IDs in selectors\",desc:\"Selectors should not contain IDs.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f,l,c;for(f=0;f<i.length;f++){s=i[f],a=0;for(l=0;l<s.parts.length;l++){o=s.parts[l];if(o.type===e.SELECTOR_PART_TYPE)for(c=0;c<o.modifiers.length;c++)u=o.modifiers[c],u.type===\"id\"&&a++}a===1?t.report(\"Don't use IDs in selectors.\",s.line,s.col,n):a>1&&t.report(a+\" IDs in the selector, really?\",s.line,s.col,n)}})}}),CSSLint.addRule({id:\"import\",name:\"Disallow @import\",desc:\"Don't use @import, use <link> instead.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"import\",function(e){t.report(\"@import prevents parallel downloads, use <link> instead.\",e.line,e.col,n)})}}),CSSLint.addRule({id:\"important\",name:\"Disallow !important\",desc:\"Be careful when using !important declaration\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"property\",function(e){e.important===!0&&(r++,t.report(\"Use of !important\",e.line,e.col,n))}),e.addListener(\"endstylesheet\",function(){t.stat(\"important\",r),r>=10&&t.rollupWarn(\"Too many !important declarations (\"+r+\"), try to use less than 10 to avoid specificity issues.\",n)})}}),CSSLint.addRule({id:\"known-properties\",name:\"Require use of known properties\",desc:\"Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){e.invalid&&t.report(e.invalid.message,e.line,e.col,n)})}}),CSSLint.addRule({id:\"order-alphabetical\",name:\"Alphabetical order\",desc:\"Assure properties are in alphabetical order\",browsers:\"All\",init:function(e,t){var n=this,r,i=function(){r=[]};e.addListener(\"startrule\",i),e.addListener(\"startfontface\",i),e.addListener(\"startpage\",i),e.addListener(\"startpagemargin\",i),e.addListener(\"startkeyframerule\",i),e.addListener(\"property\",function(e){var t=e.property.text,n=t.toLowerCase().replace(/^-.*?-/,\"\");r.push(n)}),e.addListener(\"endrule\",function(e){var i=r.join(\",\"),s=r.sort().join(\",\");i!==s&&t.report(\"Rule doesn't have all its properties in alphabetical ordered.\",e.line,e.col,n)})}}),CSSLint.addRule({id:\"outline-none\",name:\"Disallow outline: none\",desc:\"Use of outline: none or outline: 0 should be limited to :focus rules.\",browsers:\"All\",tags:[\"Accessibility\"],init:function(e,t){function i(e){e.selectors?r={line:e.line,col:e.col,selectors:e.selectors,propCount:0,outline:!1}:r=null}function s(){r&&r.outline&&(r.selectors.toString().toLowerCase().indexOf(\":focus\")===-1?t.report(\"Outlines should only be modified using :focus.\",r.line,r.col,n):r.propCount===1&&t.report(\"Outlines shouldn't be hidden unless other visual changes are made.\",r.line,r.col,n))}var n=this,r;e.addListener(\"startrule\",i),e.addListener(\"startfontface\",i),e.addListener(\"startpage\",i),e.addListener(\"startpagemargin\",i),e.addListener(\"startkeyframerule\",i),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase(),n=e.value;r&&(r.propCount++,t===\"outline\"&&(n.toString()===\"none\"||n.toString()===\"0\")&&(r.outline=!0))}),e.addListener(\"endrule\",s),e.addListener(\"endfontface\",s),e.addListener(\"endpage\",s),e.addListener(\"endpagemargin\",s),e.addListener(\"endkeyframerule\",s)}}),CSSLint.addRule({id:\"overqualified-elements\",name:\"Disallow overqualified elements\",desc:\"Don't use classes or IDs with elements (a.foo or a#foo).\",browsers:\"All\",init:function(e,t){var n=this,r={};e.addListener(\"startrule\",function(i){var s=i.selectors,o,u,a,f,l,c;for(f=0;f<s.length;f++){o=s[f];for(l=0;l<o.parts.length;l++){u=o.parts[l];if(u.type===e.SELECTOR_PART_TYPE)for(c=0;c<u.modifiers.length;c++)a=u.modifiers[c],u.elementName&&a.type===\"id\"?t.report(\"Element (\"+u+\") is overqualified, just use \"+a+\" without element name.\",u.line,u.col,n):a.type===\"class\"&&(r[a]||(r[a]=[]),r[a].push({modifier:a,part:u}))}}}),e.addListener(\"endstylesheet\",function(){var e;for(e in r)r.hasOwnProperty(e)&&r[e].length===1&&r[e][0].part.elementName&&t.report(\"Element (\"+r[e][0].part+\") is overqualified, just use \"+r[e][0].modifier+\" without element name.\",r[e][0].part.line,r[e][0].part.col,n)})}}),CSSLint.addRule({id:\"qualified-headings\",name:\"Disallow qualified headings\",desc:\"Headings should not be qualified (namespaced).\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a;for(u=0;u<i.length;u++){s=i[u];for(a=0;a<s.parts.length;a++)o=s.parts[a],o.type===e.SELECTOR_PART_TYPE&&o.elementName&&/h[1-6]/.test(o.elementName.toString())&&a>0&&t.report(\"Heading (\"+o.elementName+\") should not be qualified.\",o.line,o.col,n)}})}}),CSSLint.addRule({id:\"regex-selectors\",name:\"Disallow selectors that look like regexs\",desc:\"Selectors that look like regular expressions are slow and should be avoided.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f,l;for(a=0;a<i.length;a++){s=i[a];for(f=0;f<s.parts.length;f++){o=s.parts[f];if(o.type===e.SELECTOR_PART_TYPE)for(l=0;l<o.modifiers.length;l++)u=o.modifiers[l],u.type===\"attribute\"&&/([\\~\\|\\^\\$\\*]=)/.test(u)&&t.report(\"Attribute selectors with \"+RegExp.$1+\" are slow!\",u.line,u.col,n)}}})}}),CSSLint.addRule({id:\"rules-count\",name:\"Rules Count\",desc:\"Track how many rules there are.\",browsers:\"All\",init:function(e,t){var n=0;e.addListener(\"startrule\",function(){n++}),e.addListener(\"endstylesheet\",function(){t.stat(\"rule-count\",n)})}}),CSSLint.addRule({id:\"selector-max-approaching\",name:\"Warn when approaching the 4095 selector limit for IE\",desc:\"Will warn when selector count is >= 3800 selectors.\",browsers:\"IE\",init:function(e,t){var n=this,r=0;e.addListener(\"startrule\",function(e){r+=e.selectors.length}),e.addListener(\"endstylesheet\",function(){r>=3800&&t.report(\"You have \"+r+\" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,n)})}}),CSSLint.addRule({id:\"selector-max\",name:\"Error when past the 4095 selector limit for IE\",desc:\"Will error when selector count is > 4095.\",browsers:\"IE\",init:function(e,t){var n=this,r=0;e.addListener(\"startrule\",function(e){r+=e.selectors.length}),e.addListener(\"endstylesheet\",function(){r>4095&&t.report(\"You have \"+r+\" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,n)})}}),CSSLint.addRule({id:\"selector-newline\",name:\"Disallow new-line characters in selectors\",desc:\"New-line characters in selectors are usually a forgotten comma and not a descendant combinator.\",browsers:\"All\",init:function(e,t){function r(e){var r,i,s,o,u,a,f,l,c,h,p,d=e.selectors;for(r=0,i=d.length;r<i;r++){s=d[r];for(o=0,a=s.parts.length;o<a;o++)for(u=o+1;u<a;u++)f=s.parts[o],l=s.parts[u],c=f.type,h=f.line,p=l.line,c===\"descendant\"&&p>h&&t.report(\"newline character found in selector (forgot a comma?)\",h,d[r].parts[0].col,n)}}var n=this;e.addListener(\"startrule\",r)}}),CSSLint.addRule({id:\"shorthand\",name:\"Require shorthand properties\",desc:\"Use shorthand properties where possible.\",browsers:\"All\",init:function(e,t){function f(){u={}}function l(e){var r,i,s,o;for(r in a)if(a.hasOwnProperty(r)){o=0;for(i=0,s=a[r].length;i<s;i++)o+=u[a[r][i]]?1:0;o===a[r].length&&t.report(\"The properties \"+a[r].join(\", \")+\" can be replaced by \"+r+\".\",e.line,e.col,n)}}var n=this,r,i,s,o={},u,a={margin:[\"margin-top\",\"margin-bottom\",\"margin-left\",\"margin-right\"],padding:[\"padding-top\",\"padding-bottom\",\"padding-left\",\"padding-right\"]};for(r in a)if(a.hasOwnProperty(r))for(i=0,s=a[r].length;i<s;i++)o[a[r][i]]=r;e.addListener(\"startrule\",f),e.addListener(\"startfontface\",f),e.addListener(\"property\",function(e){var t=e.property.toString().toLowerCase();o[t]&&(u[t]=1)}),e.addListener(\"endrule\",l),e.addListener(\"endfontface\",l)}}),CSSLint.addRule({id:\"star-property-hack\",name:\"Disallow properties with a star prefix\",desc:\"Checks for the star property hack (targets IE6/7)\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.property;r.hack===\"*\"&&t.report(\"Property with star prefix found.\",e.property.line,e.property.col,n)})}}),CSSLint.addRule({id:\"text-indent\",name:\"Disallow negative text-indent\",desc:\"Checks for text indent less than -99px\",browsers:\"All\",init:function(e,t){function s(){r=!1,i=\"inherit\"}function o(){r&&i!==\"ltr\"&&t.report(\"Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.\",r.line,r.col,n)}var n=this,r,i;e.addListener(\"startrule\",s),e.addListener(\"startfontface\",s),e.addListener(\"property\",function(e){var t=e.property.toString().toLowerCase(),n=e.value;t===\"text-indent\"&&n.parts[0].value<-99?r=e.property:t===\"direction\"&&n.toString()===\"ltr\"&&(i=\"ltr\")}),e.addListener(\"endrule\",o),e.addListener(\"endfontface\",o)}}),CSSLint.addRule({id:\"underscore-property-hack\",name:\"Disallow properties with an underscore prefix\",desc:\"Checks for the underscore property hack (targets IE6)\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.property;r.hack===\"_\"&&t.report(\"Property with underscore prefix found.\",e.property.line,e.property.col,n)})}}),CSSLint.addRule({id:\"unique-headings\",name:\"Headings should only be defined once\",desc:\"Headings should be defined only once.\",browsers:\"All\",init:function(e,t){var n=this,r={h1:0,h2:0,h3:0,h4:0,h5:0,h6:0};e.addListener(\"startrule\",function(e){var i=e.selectors,s,o,u,a,f;for(a=0;a<i.length;a++){s=i[a],o=s.parts[s.parts.length-1];if(o.elementName&&/(h[1-6])/i.test(o.elementName.toString())){for(f=0;f<o.modifiers.length;f++)if(o.modifiers[f].type===\"pseudo\"){u=!0;break}u||(r[RegExp.$1]++,r[RegExp.$1]>1&&t.report(\"Heading (\"+o.elementName+\") has already been defined.\",o.line,o.col,n))}}}),e.addListener(\"endstylesheet\",function(){var e,i=[];for(e in r)r.hasOwnProperty(e)&&r[e]>1&&i.push(r[e]+\" \"+e+\"s\");i.length&&t.rollupWarn(\"You have \"+i.join(\", \")+\" defined in this stylesheet.\",n)})}}),CSSLint.addRule({id:\"universal-selector\",name:\"Disallow universal selector\",desc:\"The universal selector (*) is known to be slow.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(e){var r=e.selectors,i,s,o;for(o=0;o<r.length;o++)i=r[o],s=i.parts[i.parts.length-1],s.elementName===\"*\"&&t.report(n.desc,s.line,s.col,n)})}}),CSSLint.addRule({id:\"unqualified-attributes\",name:\"Disallow unqualified attribute selectors\",desc:\"Unqualified attribute selectors are known to be slow.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f;for(a=0;a<i.length;a++){s=i[a],o=s.parts[s.parts.length-1];if(o.type===e.SELECTOR_PART_TYPE)for(f=0;f<o.modifiers.length;f++)u=o.modifiers[f],u.type===\"attribute\"&&(!o.elementName||o.elementName===\"*\")&&t.report(n.desc,o.line,o.col,n)}})}}),CSSLint.addRule({id:\"vendor-prefix\",name:\"Require standard property with vendor prefix\",desc:\"When using a vendor-prefixed property, make sure to include the standard one.\",browsers:\"All\",init:function(e,t){function o(){r={},i=1}function u(){var e,i,o,u,a,f=[];for(e in r)s[e]&&f.push({actual:e,needed:s[e]});for(i=0,o=f.length;i<o;i++)u=f[i].needed,a=f[i].actual,r[u]?r[u][0].pos<r[a][0].pos&&t.report(\"Standard property '\"+u+\"' should come after vendor-prefixed property '\"+a+\"'.\",r[a][0].name.line,r[a][0].name.col,n):t.report(\"Missing standard property '\"+u+\"' to go along with '\"+a+\"'.\",r[a][0].name.line,r[a][0].name.col,n)}var n=this,r,i,s={\"-webkit-border-radius\":\"border-radius\",\"-webkit-border-top-left-radius\":\"border-top-left-radius\",\"-webkit-border-top-right-radius\":\"border-top-right-radius\",\"-webkit-border-bottom-left-radius\":\"border-bottom-left-radius\",\"-webkit-border-bottom-right-radius\":\"border-bottom-right-radius\",\"-o-border-radius\":\"border-radius\",\"-o-border-top-left-radius\":\"border-top-left-radius\",\"-o-border-top-right-radius\":\"border-top-right-radius\",\"-o-border-bottom-left-radius\":\"border-bottom-left-radius\",\"-o-border-bottom-right-radius\":\"border-bottom-right-radius\",\"-moz-border-radius\":\"border-radius\",\"-moz-border-radius-topleft\":\"border-top-left-radius\",\"-moz-border-radius-topright\":\"border-top-right-radius\",\"-moz-border-radius-bottomleft\":\"border-bottom-left-radius\",\"-moz-border-radius-bottomright\":\"border-bottom-right-radius\",\"-moz-column-count\":\"column-count\",\"-webkit-column-count\":\"column-count\",\"-moz-column-gap\":\"column-gap\",\"-webkit-column-gap\":\"column-gap\",\"-moz-column-rule\":\"column-rule\",\"-webkit-column-rule\":\"column-rule\",\"-moz-column-rule-style\":\"column-rule-style\",\"-webkit-column-rule-style\":\"column-rule-style\",\"-moz-column-rule-color\":\"column-rule-color\",\"-webkit-column-rule-color\":\"column-rule-color\",\"-moz-column-rule-width\":\"column-rule-width\",\"-webkit-column-rule-width\":\"column-rule-width\",\"-moz-column-width\":\"column-width\",\"-webkit-column-width\":\"column-width\",\"-webkit-column-span\":\"column-span\",\"-webkit-columns\":\"columns\",\"-moz-box-shadow\":\"box-shadow\",\"-webkit-box-shadow\":\"box-shadow\",\"-moz-transform\":\"transform\",\"-webkit-transform\":\"transform\",\"-o-transform\":\"transform\",\"-ms-transform\":\"transform\",\"-moz-transform-origin\":\"transform-origin\",\"-webkit-transform-origin\":\"transform-origin\",\"-o-transform-origin\":\"transform-origin\",\"-ms-transform-origin\":\"transform-origin\",\"-moz-box-sizing\":\"box-sizing\",\"-webkit-box-sizing\":\"box-sizing\"};e.addListener(\"startrule\",o),e.addListener(\"startfontface\",o),e.addListener(\"startpage\",o),e.addListener(\"startpagemargin\",o),e.addListener(\"startkeyframerule\",o),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase();r[t]||(r[t]=[]),r[t].push({name:e.property,value:e.value,pos:i++})}),e.addListener(\"endrule\",u),e.addListener(\"endfontface\",u),e.addListener(\"endpage\",u),e.addListener(\"endpagemargin\",u),e.addListener(\"endkeyframerule\",u)}}),CSSLint.addRule({id:\"zero-units\",name:\"Disallow units for 0 values\",desc:\"You don't need to specify units when a value is 0.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.value.parts,i=0,s=r.length;while(i<s)(r[i].units||r[i].type===\"percentage\")&&r[i].value===0&&r[i].type!==\"time\"&&t.report(\"Values of 0 shouldn't have units specified.\",r[i].line,r[i].col,n),i++})}}),function(){var e=function(e){return!e||e.constructor!==String?\"\":e.replace(/[\\\"&><]/g,function(e){switch(e){case'\"':return\"&quot;\";case\"&\":return\"&amp;\";case\"<\":return\"&lt;\";case\">\":return\"&gt;\"}})};CSSLint.addFormatter({id:\"checkstyle-xml\",name:\"Checkstyle XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><checkstyle>'},endFormat:function(){return\"</checkstyle>\"},readError:function(t,n){return'<file name=\"'+e(t)+'\"><error line=\"0\" column=\"0\" severty=\"error\" message=\"'+e(n)+'\"></error></file>'},formatResults:function(t,n){var r=t.messages,i=[],s=function(e){return!!e&&\"name\"in e?\"net.csslint.\"+e.name.replace(/\\s/g,\"\"):\"\"};return r.length>0&&(i.push('<file name=\"'+n+'\">'),CSSLint.Util.forEach(r,function(t){t.rollup||i.push('<error line=\"'+t.line+'\" column=\"'+t.col+'\" severity=\"'+t.type+'\"'+' message=\"'+e(t.message)+'\" source=\"'+s(t.rule)+'\"/>')}),i.push(\"</file>\")),i.join(\"\")}})}(),CSSLint.addFormatter({id:\"compact\",name:\"Compact, 'porcelain' format\",startFormat:function(){return\"\"},endFormat:function(){return\"\"},formatResults:function(e,t,n){var r=e.messages,i=\"\";n=n||{};var s=function(e){return e.charAt(0).toUpperCase()+e.slice(1)};return r.length===0?n.quiet?\"\":t+\": Lint Free!\":(CSSLint.Util.forEach(r,function(e){e.rollup?i+=t+\": \"+s(e.type)+\" - \"+e.message+\"\\n\":i+=t+\": \"+\"line \"+e.line+\", col \"+e.col+\", \"+s(e.type)+\" - \"+e.message+\" (\"+e.rule.id+\")\\n\"}),i)}}),CSSLint.addFormatter({id:\"csslint-xml\",name:\"CSSLint XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><csslint>'},endFormat:function(){return\"</csslint>\"},formatResults:function(e,t){var n=e.messages,r=[],i=function(e){return!e||e.constructor!==String?\"\":e.replace(/\\\"/g,\"'\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};return n.length>0&&(r.push('<file name=\"'+t+'\">'),CSSLint.Util.forEach(n,function(e){e.rollup?r.push('<issue severity=\"'+e.type+'\" reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>'):r.push('<issue line=\"'+e.line+'\" char=\"'+e.col+'\" severity=\"'+e.type+'\"'+' reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>')}),r.push(\"</file>\")),r.join(\"\")}}),CSSLint.addFormatter({id:\"junit-xml\",name:\"JUNIT XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><testsuites>'},endFormat:function(){return\"</testsuites>\"},formatResults:function(e,t){var n=e.messages,r=[],i={error:0,failure:0},s=function(e){return!!e&&\"name\"in e?\"net.csslint.\"+e.name.replace(/\\s/g,\"\"):\"\"},o=function(e){return!e||e.constructor!==String?\"\":e.replace(/\\\"/g,\"'\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};return n.length>0&&(n.forEach(function(e){var t=e.type===\"warning\"?\"error\":e.type;e.rollup||(r.push('<testcase time=\"0\" name=\"'+s(e.rule)+'\">'),r.push(\"<\"+t+' message=\"'+o(e.message)+'\"><![CDATA['+e.line+\":\"+e.col+\":\"+o(e.evidence)+\"]]></\"+t+\">\"),r.push(\"</testcase>\"),i[t]+=1)}),r.unshift('<testsuite time=\"0\" tests=\"'+n.length+'\" skipped=\"0\" errors=\"'+i.error+'\" failures=\"'+i.failure+'\" package=\"net.csslint\" name=\"'+t+'\">'),r.push(\"</testsuite>\")),r.join(\"\")}}),CSSLint.addFormatter({id:\"lint-xml\",name:\"Lint XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><lint>'},endFormat:function(){return\"</lint>\"},formatResults:function(e,t){var n=e.messages,r=[],i=function(e){return!e||e.constructor!==String?\"\":e.replace(/\\\"/g,\"'\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};return n.length>0&&(r.push('<file name=\"'+t+'\">'),CSSLint.Util.forEach(n,function(e){e.rollup?r.push('<issue severity=\"'+e.type+'\" reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>'):r.push('<issue line=\"'+e.line+'\" char=\"'+e.col+'\" severity=\"'+e.type+'\"'+' reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>')}),r.push(\"</file>\")),r.join(\"\")}}),CSSLint.addFormatter({id:\"text\",name:\"Plain Text\",startFormat:function(){return\"\"},endFormat:function(){return\"\"},formatResults:function(e,t,n){var r=e.messages,i=\"\";n=n||{};if(r.length===0)return n.quiet?\"\":\"\\n\\ncsslint: No errors in \"+t+\".\";i=\"\\n\\ncsslint: There \",r.length===1?i+=\"is 1 problem\":i+=\"are \"+r.length+\" problems\",i+=\" in \"+t+\".\";var s=t.lastIndexOf(\"/\"),o=t;return s===-1&&(s=t.lastIndexOf(\"\\\\\")),s>-1&&(o=t.substring(s+1)),CSSLint.Util.forEach(r,function(e,t){i=i+\"\\n\\n\"+o,e.rollup?(i+=\"\\n\"+(t+1)+\": \"+e.type,i+=\"\\n\"+e.message):(i+=\"\\n\"+(t+1)+\": \"+e.type+\" at line \"+e.line+\", col \"+e.col,i+=\"\\n\"+e.message,i+=\"\\n\"+e.evidence)}),i}}),module.exports.CSSLint=CSSLint}),define(\"ace/mode/css_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./css/csslint\").CSSLint,u=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.ruleset=null,this.setDisabledRules(\"ids|order-alphabetical\"),this.setInfoRules(\"adjoining-classes|qualified-headings|zero-units|gradients|import|outline-none|vendor-prefix\")};r.inherits(u,s),function(){this.setInfoRules=function(e){typeof e==\"string\"&&(e=e.split(\"|\")),this.infoRules=i.arrayToMap(e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.setDisabledRules=function(e){if(!e)this.ruleset=null;else{typeof e==\"string\"&&(e=e.split(\"|\"));var t={};o.getRules().forEach(function(e){t[e.id]=!0}),e.forEach(function(e){delete t[e]}),this.ruleset=t}this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return this.sender.emit(\"annotate\",[]);var t=this.infoRules,n=o.verify(e,this.ruleset);this.sender.emit(\"annotate\",n.messages.map(function(e){return{row:e.line-1,column:e.col-1,text:e.message,type:t[e.rule.id]?\"info\":e.type,rule:e.rule.name}}))}}.call(u.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min/worker-html.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/html/saxparser\",[],function(e,t,n){n.exports=function r(t,n,i){function s(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(o)return o(u,!0);throw new Error(\"Cannot find module '\"+u+\"'\")}var l=n[u]={exports:{}};t[u][0].call(l.exports,function(e){var n=t[u][1][e];return s(n?n:e)},l,l.exports,r,t,n,i)}return n[u].exports}var o=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)s(i[u]);return s}({1:[function(e,t,n){function r(e){if(e.namespaceURI===\"http://www.w3.org/1999/xhtml\")return e.localName===\"applet\"||e.localName===\"caption\"||e.localName===\"marquee\"||e.localName===\"object\"||e.localName===\"table\"||e.localName===\"td\"||e.localName===\"th\";if(e.namespaceURI===\"http://www.w3.org/1998/Math/MathML\")return e.localName===\"mi\"||e.localName===\"mo\"||e.localName===\"mn\"||e.localName===\"ms\"||e.localName===\"mtext\"||e.localName===\"annotation-xml\";if(e.namespaceURI===\"http://www.w3.org/2000/svg\")return e.localName===\"foreignObject\"||e.localName===\"desc\"||e.localName===\"title\"}function i(e){return r(e)||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"ol\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"ul\"}function s(e){return e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"table\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"html\"}function o(e){return e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"tbody\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"tfoot\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"thead\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"html\"}function u(e){return e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"tr\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"html\"}function a(e){return r(e)||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"button\"}function f(e){return(e.namespaceURI!==\"http://www.w3.org/1999/xhtml\"||e.localName!==\"optgroup\")&&(e.namespaceURI!==\"http://www.w3.org/1999/xhtml\"||e.localName!==\"option\")}function l(){this.elements=[],this.rootNode=null,this.headElement=null,this.bodyElement=null}l.prototype._inScope=function(e,t){for(var n=this.elements.length-1;n>=0;n--){var r=this.elements[n];if(r.localName===e)return!0;if(t(r))return!1}},l.prototype.push=function(e){this.elements.push(e)},l.prototype.pushHtmlElement=function(e){this.rootNode=e.node,this.push(e)},l.prototype.pushHeadElement=function(e){this.headElement=e.node,this.push(e)},l.prototype.pushBodyElement=function(e){this.bodyElement=e.node,this.push(e)},l.prototype.pop=function(){return this.elements.pop()},l.prototype.remove=function(e){this.elements.splice(this.elements.indexOf(e),1)},l.prototype.popUntilPopped=function(e){var t;do t=this.pop();while(t.localName!=e)},l.prototype.popUntilTableScopeMarker=function(){while(!s(this.top))this.pop()},l.prototype.popUntilTableBodyScopeMarker=function(){while(!o(this.top))this.pop()},l.prototype.popUntilTableRowScopeMarker=function(){while(!u(this.top))this.pop()},l.prototype.item=function(e){return this.elements[e]},l.prototype.contains=function(e){return this.elements.indexOf(e)!==-1},l.prototype.inScope=function(e){return this._inScope(e,r)},l.prototype.inListItemScope=function(e){return this._inScope(e,i)},l.prototype.inTableScope=function(e){return this._inScope(e,s)},l.prototype.inButtonScope=function(e){return this._inScope(e,a)},l.prototype.inSelectScope=function(e){return this._inScope(e,f)},l.prototype.hasNumberedHeaderElementInScope=function(){for(var e=this.elements.length-1;e>=0;e--){var t=this.elements[e];if(t.isNumberedHeader())return!0;if(r(t))return!1}},l.prototype.furthestBlockForFormattingElement=function(e){var t=null;for(var n=this.elements.length-1;n>=0;n--){var r=this.elements[n];if(r.node===e)break;r.isSpecial()&&(t=r)}return t},l.prototype.findIndex=function(e){for(var t=this.elements.length-1;t>=0;t--)if(this.elements[t].localName==e)return t;return-1},l.prototype.remove_openElements_until=function(e){var t=!1,n;while(!t)n=this.elements.pop(),t=e(n);return n},Object.defineProperty(l.prototype,\"top\",{get:function(){return this.elements[this.elements.length-1]}}),Object.defineProperty(l.prototype,\"length\",{get:function(){return this.elements.length}}),n.ElementStack=l},{}],2:[function(e,t,n){function o(e){return e>=\"0\"&&e<=\"9\"||e>=\"a\"&&e<=\"z\"||e>=\"A\"&&e<=\"Z\"}function u(e){return e>=\"0\"&&e<=\"9\"||e>=\"a\"&&e<=\"f\"||e>=\"A\"&&e<=\"F\"}function a(e){return e>=\"0\"&&e<=\"9\"}var r=e(\"html5-entities\"),i=e(\"./InputStream\").InputStream,s={};Object.keys(r).forEach(function(e){for(var t=0;t<e.length;t++)s[e.substring(0,t+1)]=!0});var f={};f.consumeEntity=function(e,t,n){var f=\"\",l=\"\",c=e.char();if(c===i.EOF)return!1;l+=c;if(c==\"\t\"||c==\"\\n\"||c==\"\\x0b\"||c==\" \"||c==\"<\"||c==\"&\")return e.unget(l),!1;if(n===c)return e.unget(l),!1;if(c==\"#\"){c=e.shift(1);if(c===i.EOF)return t._parseError(\"expected-numeric-entity-but-got-eof\"),e.unget(l),!1;l+=c;var h=10,p=a;if(c==\"x\"||c==\"X\"){h=16,p=u,c=e.shift(1);if(c===i.EOF)return t._parseError(\"expected-numeric-entity-but-got-eof\"),e.unget(l),!1;l+=c}if(p(c)){var d=\"\";while(c!==i.EOF&&p(c))d+=c,c=e.char();d=parseInt(d,h);var v=this.replaceEntityNumbers(d);v&&(t._parseError(\"invalid-numeric-entity-replaced\"),d=v);if(d>65535&&d<=1114111){d-=65536;var m=((1047552&d)>>10)+55296,g=(1023&d)+56320;f=String.fromCharCode(m,g)}else f=String.fromCharCode(d);return c!==\";\"&&(t._parseError(\"numeric-entity-without-semicolon\"),e.unget(c)),f}return e.unget(l),t._parseError(\"expected-numeric-entity\"),!1}if(c>=\"a\"&&c<=\"z\"||c>=\"A\"&&c<=\"Z\"){var y=\"\";while(s[l]){r[l]&&(y=l);if(c==\";\")break;c=e.char();if(c===i.EOF)break;l+=c}return y?(f=r[y],c===\";\"||!n||!o(c)&&c!==\"=\"?(l.length>y.length&&e.unget(l.substring(y.length)),c!==\";\"&&t._parseError(\"named-entity-without-semicolon\"),f):(e.unget(l),!1)):(t._parseError(\"expected-named-entity\"),e.unget(l),!1)}},f.replaceEntityNumbers=function(e){switch(e){case 0:return 65533;case 19:return 16;case 128:return 8364;case 129:return 129;case 130:return 8218;case 131:return 402;case 132:return 8222;case 133:return 8230;case 134:return 8224;case 135:return 8225;case 136:return 710;case 137:return 8240;case 138:return 352;case 139:return 8249;case 140:return 338;case 141:return 141;case 142:return 381;case 143:return 143;case 144:return 144;case 145:return 8216;case 146:return 8217;case 147:return 8220;case 148:return 8221;case 149:return 8226;case 150:return 8211;case 151:return 8212;case 152:return 732;case 153:return 8482;case 154:return 353;case 155:return 8250;case 156:return 339;case 157:return 157;case 158:return 382;case 159:return 376;default:if(e>=55296&&e<=57343||e>1114111)return 65533;if(e>=1&&e<=8||e>=14&&e<=31||e>=127&&e<=159||e>=64976&&e<=65007||e==11||e==65534||e==131070||e==3145726||e==196607||e==262142||e==262143||e==327678||e==327679||e==393214||e==393215||e==458750||e==458751||e==524286||e==524287||e==589822||e==589823||e==655358||e==655359||e==720894||e==720895||e==786430||e==786431||e==851966||e==851967||e==917502||e==917503||e==983038||e==983039||e==1048574||e==1048575||e==1114110||e==1114111)return e}},n.EntityParser=f},{\"./InputStream\":3,\"html5-entities\":12}],3:[function(e,t,n){function r(){this.data=\"\",this.start=0,this.committed=0,this.eof=!1,this.lastLocation={line:0,column:0}}r.EOF=-1,r.DRAIN=-2,r.prototype={slice:function(){if(this.start>=this.data.length){if(!this.eof)throw r.DRAIN;return r.EOF}return this.data.slice(this.start,this.data.length)},\"char\":function(){if(!this.eof&&this.start>=this.data.length-1)throw r.DRAIN;if(this.start>=this.data.length)return r.EOF;var e=this.data[this.start++];return e===\"\\r\"&&(e=\"\\n\"),e},advance:function(e){this.start+=e;if(this.start>=this.data.length){if(!this.eof)throw r.DRAIN;return r.EOF}this.committed>this.data.length/2&&(this.lastLocation=this.location(),this.data=this.data.slice(this.committed),this.start=this.start-this.committed,this.committed=0)},matchWhile:function(e){if(this.eof&&this.start>=this.data.length)return\"\";var t=new RegExp(\"^\"+e+\"+\"),n=t.exec(this.slice());if(n){if(!this.eof&&n[0].length==this.data.length-this.start)throw r.DRAIN;return this.advance(n[0].length),n[0]}return\"\"},matchUntil:function(e){var t,n;n=this.slice();if(n===r.EOF)return\"\";if(t=(new RegExp(e+(this.eof?\"|$\":\"\"))).exec(n)){var i=this.data.slice(this.start,this.start+t.index);return this.advance(t.index),i.replace(/\\r/g,\"\\n\").replace(/\\n{2,}/g,\"\\n\")}throw r.DRAIN},append:function(e){this.data+=e},shift:function(e){if(!this.eof&&this.start+e>=this.data.length)throw r.DRAIN;if(this.eof&&this.start>=this.data.length)return r.EOF;var t=this.data.slice(this.start,this.start+e).toString();return this.advance(Math.min(e,this.data.length-this.start)),t},peek:function(e){if(!this.eof&&this.start+e>=this.data.length)throw r.DRAIN;return this.eof&&this.start>=this.data.length?r.EOF:this.data.slice(this.start,Math.min(this.start+e,this.data.length)).toString()},length:function(){return this.data.length-this.start-1},unget:function(e){if(e===r.EOF)return;this.start-=e.length},undo:function(){this.start=this.committed},commit:function(){this.committed=this.start},location:function(){var e=this.lastLocation.line,t=this.lastLocation.column,n=this.data.slice(0,this.committed),r=n.match(/\\n/g),i=r?e+r.length:e,s=r?n.length-n.lastIndexOf(\"\\n\")-1:t+n.length;return{line:i,column:s}}},n.InputStream=r},{}],4:[function(e,t,n){function i(e,t,n,r){this.localName=t,this.namespaceURI=e,this.attributes=n,this.node=r}function s(e,t){for(var n=0;n<e.attributes.length;n++)if(e.attributes[n].nodeName==t)return e.attributes[n].nodeValue;return null}var r={\"http://www.w3.org/1999/xhtml\":[\"address\",\"applet\",\"area\",\"article\",\"aside\",\"base\",\"basefont\",\"bgsound\",\"blockquote\",\"body\",\"br\",\"button\",\"caption\",\"center\",\"col\",\"colgroup\",\"dd\",\"details\",\"dir\",\"div\",\"dl\",\"dt\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"frame\",\"frameset\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"iframe\",\"img\",\"input\",\"isindex\",\"li\",\"link\",\"listing\",\"main\",\"marquee\",\"menu\",\"menuitem\",\"meta\",\"nav\",\"noembed\",\"noframes\",\"noscript\",\"object\",\"ol\",\"p\",\"param\",\"plaintext\",\"pre\",\"script\",\"section\",\"select\",\"source\",\"style\",\"summary\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"title\",\"tr\",\"track\",\"ul\",\"wbr\",\"xmp\"],\"http://www.w3.org/1998/Math/MathML\":[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\",\"annotation-xml\"],\"http://www.w3.org/2000/svg\":[\"foreignObject\",\"desc\",\"title\"]};i.prototype.isSpecial=function(){return this.namespaceURI in r&&r[this.namespaceURI].indexOf(this.localName)>-1},i.prototype.isFosterParenting=function(){return this.namespaceURI===\"http://www.w3.org/1999/xhtml\"?this.localName===\"table\"||this.localName===\"tbody\"||this.localName===\"tfoot\"||this.localName===\"thead\"||this.localName===\"tr\":!1},i.prototype.isNumberedHeader=function(){return this.namespaceURI===\"http://www.w3.org/1999/xhtml\"?this.localName===\"h1\"||this.localName===\"h2\"||this.localName===\"h3\"||this.localName===\"h4\"||this.localName===\"h5\"||this.localName===\"h6\":!1},i.prototype.isForeign=function(){return this.namespaceURI!=\"http://www.w3.org/1999/xhtml\"},i.prototype.isHtmlIntegrationPoint=function(){if(this.namespaceURI===\"http://www.w3.org/1998/Math/MathML\"){if(this.localName!==\"annotation-xml\")return!1;var e=s(this,\"encoding\");return e?(e=e.toLowerCase(),e===\"text/html\"||e===\"application/xhtml+xml\"):!1}return this.namespaceURI===\"http://www.w3.org/2000/svg\"?this.localName===\"foreignObject\"||this.localName===\"desc\"||this.localName===\"title\":!1},i.prototype.isMathMLTextIntegrationPoint=function(){return this.namespaceURI===\"http://www.w3.org/1998/Math/MathML\"?this.localName===\"mi\"||this.localName===\"mo\"||this.localName===\"mn\"||this.localName===\"ms\"||this.localName===\"mtext\":!1},n.StackItem=i},{}],5:[function(e,t,n){function s(e){return e===\" \"||e===\"\\n\"||e===\"\t\"||e===\"\\r\"||e===\"\\f\"}function o(e){return e>=\"A\"&&e<=\"Z\"||e>=\"a\"&&e<=\"z\"}function u(e){this._tokenHandler=e,this._state=u.DATA,this._inputStream=new r,this._currentToken=null,this._temporaryBuffer=\"\",this._additionalAllowedCharacter=\"\"}var r=e(\"./InputStream\").InputStream,i=e(\"./EntityParser\").EntityParser;u.prototype._parseError=function(e,t){this._tokenHandler.parseError(e,t)},u.prototype._emitToken=function(e){if(e.type===\"StartTag\")for(var t=1;t<e.data.length;t++)e.data[t].nodeName||e.data.splice(t--,1);else e.type===\"EndTag\"&&(e.selfClosing&&this._parseError(\"self-closing-flag-on-end-tag\"),e.data.length!==0&&this._parseError(\"attributes-in-end-tag\"));this._tokenHandler.processToken(e),e.type===\"StartTag\"&&e.selfClosing&&!this._tokenHandler.isSelfClosingFlagAcknowledged()&&this._parseError(\"non-void-element-with-trailing-solidus\",{name:e.name})},u.prototype._emitCurrentToken=function(){this._state=u.DATA,this._emitToken(this._currentToken)},u.prototype._currentAttribute=function(){return this._currentToken.data[this._currentToken.data.length-1]},u.prototype.setState=function(e){this._state=e},u.prototype.tokenize=function(e){function n(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"&\")t.setState(a);else if(n===\"<\")t.setState(j);else if(n===\"\\0\")t._emitToken({type:\"Characters\",data:n}),e.commit();else{var i=e.matchUntil(\"&|<|\\0\");t._emitToken({type:\"Characters\",data:n+i}),e.commit()}return!0}function a(e){var r=i.consumeEntity(e,t);return t.setState(n),t._emitToken({type:\"Characters\",data:r||\"&\"}),!0}function f(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"&\")t.setState(l);else if(n===\"<\")t.setState(d);else if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"&|<|\\0\");t._emitToken({type:\"Characters\",data:n+i}),e.commit()}return!0}function l(e){var n=i.consumeEntity(e,t);return t.setState(f),t._emitToken({type:\"Characters\",data:n||\"&\"}),!0}function c(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"<\")t.setState(g);else if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"<|\\0\");t._emitToken({type:\"Characters\",data:n+i})}return!0}function h(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"\\0\");t._emitToken({type:\"Characters\",data:n+i})}return!0}function p(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"<\")t.setState(w);else if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"<|\\0\");t._emitToken({type:\"Characters\",data:n+i})}return!0}function d(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(v)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(f)),!0}function v(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.setState(m)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(f)),!0}function m(e){var r=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),i=e.char();return s(i)&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(q)):i===\"/\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(K)):i===\">\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t._emitCurrentToken(),t.setState(n)):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(i),t.setState(f)),!0}function g(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(y)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(c)),!0}function y(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.setState(b)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(c)),!0}function b(e){var r=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),i=e.char();return s(i)&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(q)):i===\"/\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(K)):i===\">\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t._emitCurrentToken(),t.setState(n)):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(i),t.setState(c)),!0}function w(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(E)):n===\"!\"?(t._emitToken({type:\"Characters\",data:\"<!\"}),t.setState(x)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(p)),!0}function E(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.setState(S)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(p)),!0}function S(e){var n=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),r=e.char();return s(r)&&n?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(q)):r===\"/\"&&n?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(K)):r===\">\"&&n?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t._emitCurrentToken()):o(r)?(this._temporaryBuffer+=r,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(r),t.setState(p)),!0}function x(e){var n=e.char();return n===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(T)):(e.unget(n),t.setState(p)),!0}function T(e){var n=e.char();return n===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(k)):(e.unget(n),t.setState(p)),!0}function N(e){var i=e.char();if(i===r.EOF)e.unget(i),t.setState(n);else if(i===\"-\")t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(C);else if(i===\"<\")t.setState(L);else if(i===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var s=e.matchUntil(\"<|-|\\0\");t._emitToken({type:\"Characters\",data:i+s})}return!0}function C(e){var i=e.char();return i===r.EOF?(e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(k)):i===\"<\"?t.setState(L):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(N)):(t._emitToken({type:\"Characters\",data:i}),t.setState(N)),!0}function k(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"<\"?t.setState(L):i===\">\"?(t._emitToken({type:\"Characters\",data:\">\"}),t.setState(p)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(N)):(t._emitToken({type:\"Characters\",data:i}),t.setState(N)),!0}function L(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(A)):o(n)?(t._emitToken({type:\"Characters\",data:\"<\"+n}),this._temporaryBuffer=n,t.setState(M)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(N)),!0}function A(e){var n=e.char();return o(n)?(this._temporaryBuffer=n,t.setState(O)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(N)),!0}function O(e){var r=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),i=e.char();return s(i)&&r?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(q)):i===\"/\"&&r?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(K)):i===\">\"&&r?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(n),t._emitCurrentToken()):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(i),t.setState(N)),!0}function M(e){var n=e.char();return s(n)||n===\"/\"||n===\">\"?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer.toLowerCase()===\"script\"?t.setState(_):t.setState(N)):o(n)?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer+=n,e.commit()):(e.unget(n),t.setState(N)),!0}function _(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(D)):i===\"<\"?(t._emitToken({type:\"Characters\",data:\"<\"}),t.setState(H)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit()):(t._emitToken({type:\"Characters\",data:i}),e.commit()),!0}function D(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(P)):i===\"<\"?(t._emitToken({type:\"Characters\",data:\"<\"}),t.setState(H)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(_)):(t._emitToken({type:\"Characters\",data:i}),t.setState(_)),!0}function P(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),e.commit()):i===\"<\"?(t._emitToken({type:\"Characters\",data:\"<\"}),t.setState(H)):i===\">\"?(t._emitToken({type:\"Characters\",data:\">\"}),t.setState(p)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(_)):(t._emitToken({type:\"Characters\",data:i}),t.setState(_)),!0}function H(e){var n=e.char();return n===\"/\"?(t._emitToken({type:\"Characters\",data:\"/\"}),this._temporaryBuffer=\"\",t.setState(B)):(e.unget(n),t.setState(_)),!0}function B(e){var n=e.char();return s(n)||n===\"/\"||n===\">\"?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer.toLowerCase()===\"script\"?t.setState(N):t.setState(_)):o(n)?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer+=n,e.commit()):(e.unget(n),t.setState(_)),!0}function j(e){var i=e.char();return i===r.EOF?(t._parseError(\"bare-less-than-sign-at-eof\"),t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(i),t.setState(n)):o(i)?(t._currentToken={type:\"StartTag\",name:i.toLowerCase(),data:[]},t.setState(I)):i===\"!\"?t.setState(G):i===\"/\"?t.setState(F):i===\">\"?(t._parseError(\"expected-tag-name-but-got-right-bracket\"),t._emitToken({type:\"Characters\",data:\"<>\"}),t.setState(n)):i===\"?\"?(t._parseError(\"expected-tag-name-but-got-question-mark\"),e.unget(i),t.setState(Q)):(t._parseError(\"expected-tag-name\"),t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(i),t.setState(n)),!0}function F(e){var i=e.char();return i===r.EOF?(t._parseError(\"expected-closing-tag-but-got-eof\"),t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(i),t.setState(n)):o(i)?(t._currentToken={type:\"EndTag\",name:i.toLowerCase(),data:[]},t.setState(I)):i===\">\"?(t._parseError(\"expected-closing-tag-but-got-right-bracket\"),t.setState(n)):(t._parseError(\"expected-closing-tag-but-got-char\",{data:i}),e.unget(i),t.setState(Q)),!0}function I(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-tag-name\"),e.unget(i),t.setState(n)):s(i)?t.setState(q):o(i)?t._currentToken.name+=i.toLowerCase():i===\">\"?t._emitCurrentToken():i===\"/\"?t.setState(K):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.name+=\"\\ufffd\"):t._currentToken.name+=i,e.commit(),!0}function q(e){var i=e.char();if(i===r.EOF)t._parseError(\"expected-attribute-name-but-got-eof\"),e.unget(i),t.setState(n);else{if(s(i))return!0;o(i)?(t._currentToken.data.push({nodeName:i.toLowerCase(),nodeValue:\"\"}),t.setState(R)):i===\">\"?t._emitCurrentToken():i===\"/\"?t.setState(K):i===\"'\"||i==='\"'||i===\"=\"||i===\"<\"?(t._parseError(\"invalid-character-in-attribute-name\"),t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data.push({nodeName:\"\\ufffd\",nodeValue:\"\"})):(t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R))}return!0}function R(e){var i=e.char(),u=!0,a=!1;i===r.EOF?(t._parseError(\"eof-in-attribute-name\"),e.unget(i),t.setState(n),a=!0):i===\"=\"?t.setState(z):o(i)?(t._currentAttribute().nodeName+=i.toLowerCase(),u=!1):i===\">\"?a=!0:s(i)?t.setState(U):i===\"/\"?t.setState(K):i===\"'\"||i==='\"'?(t._parseError(\"invalid-character-in-attribute-name\"),t._currentAttribute().nodeName+=i,u=!1):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeName+=\"\\ufffd\"):(t._currentAttribute().nodeName+=i,u=!1);if(u){var f=t._currentToken.data,l=f[f.length-1];for(var c=f.length-2;c>=0;c--)if(l.nodeName===f[c].nodeName){t._parseError(\"duplicate-attribute\",{name:l.nodeName}),l.nodeName=null;break}a&&t._emitCurrentToken()}else e.commit();return!0}function U(e){var i=e.char();if(i===r.EOF)t._parseError(\"expected-end-of-tag-but-got-eof\"),e.unget(i),t.setState(n);else{if(s(i))return!0;i===\"=\"?t.setState(z):i===\">\"?t._emitCurrentToken():o(i)?(t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R)):i===\"/\"?t.setState(K):i===\"'\"||i==='\"'||i===\"<\"?(t._parseError(\"invalid-character-after-attribute-name\"),t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data.push({nodeName:\"\\ufffd\",nodeValue:\"\"})):(t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R))}return!0}function z(e){var i=e.char();if(i===r.EOF)t._parseError(\"expected-attribute-value-but-got-eof\"),e.unget(i),t.setState(n);else{if(s(i))return!0;i==='\"'?t.setState(W):i===\"&\"?(t.setState(V),e.unget(i)):i===\"'\"?t.setState(X):i===\">\"?(t._parseError(\"expected-attribute-value-but-got-right-bracket\"),t._emitCurrentToken()):i===\"=\"||i===\"<\"||i===\"`\"?(t._parseError(\"unexpected-character-in-unquoted-attribute-value\"),t._currentAttribute().nodeValue+=i,t.setState(V)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\"):(t._currentAttribute().nodeValue+=i,t.setState(V))}return!0}function W(e){var i=e.char();if(i===r.EOF)t._parseError(\"eof-in-attribute-value-double-quote\"),e.unget(i),t.setState(n);else if(i==='\"')t.setState(J);else if(i===\"&\")this._additionalAllowedCharacter='\"',t.setState($);else if(i===\"\\0\")t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\";else{var s=e.matchUntil('[\\0\"&]');i+=s,t._currentAttribute().nodeValue+=i}return!0}function X(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-attribute-value-single-quote\"),e.unget(i),t.setState(n)):i===\"'\"?t.setState(J):i===\"&\"?(this._additionalAllowedCharacter=\"'\",t.setState($)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\"):t._currentAttribute().nodeValue+=i+e.matchUntil(\"\\0|['&]\"),!0}function V(e){var i=e.char();if(i===r.EOF)t._parseError(\"eof-after-attribute-value\"),e.unget(i),t.setState(n);else if(s(i))t.setState(q);else if(i===\"&\")this._additionalAllowedCharacter=\">\",t.setState($);else if(i===\">\")t._emitCurrentToken();else if(i==='\"'||i===\"'\"||i===\"=\"||i===\"`\"||i===\"<\")t._parseError(\"unexpected-character-in-unquoted-attribute-value\"),t._currentAttribute().nodeValue+=i,e.commit();else if(i===\"\\0\")t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\";else{var o=e.matchUntil(\"\\0|[\t\\n\\x0b\\f \\r&<>\\\"'=`]\");o===r.EOF&&(t._parseError(\"eof-in-attribute-value-no-quotes\"),t._emitCurrentToken()),e.commit(),t._currentAttribute().nodeValue+=i+o}return!0}function $(e){var n=i.consumeEntity(e,t,this._additionalAllowedCharacter);return this._currentAttribute().nodeValue+=n||\"&\",this._additionalAllowedCharacter==='\"'?t.setState(W):this._additionalAllowedCharacter===\"'\"?t.setState(X):this._additionalAllowedCharacter===\">\"&&t.setState(V),!0}function J(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-after-attribute-value\"),e.unget(i),t.setState(n)):s(i)?t.setState(q):i===\">\"?(t.setState(n),t._emitCurrentToken()):i===\"/\"?t.setState(K):(t._parseError(\"unexpected-character-after-attribute-value\"),e.unget(i),t.setState(q)),!0}function K(e){var i=e.char();return i===r.EOF?(t._parseError(\"unexpected-eof-after-solidus-in-tag\"),e.unget(i),t.setState(n)):i===\">\"?(t._currentToken.selfClosing=!0,t.setState(n),t._emitCurrentToken()):(t._parseError(\"unexpected-character-after-solidus-in-tag\"),e.unget(i),t.setState(q)),!0}function Q(e){var r=e.matchUntil(\">\");return r=r.replace(/\\u0000/g,\"\\ufffd\"),e.char(),t._emitToken({type:\"Comment\",data:r}),t.setState(n),!0}function G(e){var n=e.shift(2);if(n===\"--\")t._currentToken={type:\"Comment\",data:\"\"},t.setState(Z);else{var i=e.shift(5);if(i===r.EOF||n===r.EOF)return t._parseError(\"expected-dashes-or-doctype\"),t.setState(Q),e.unget(n),!0;n+=i,n.toUpperCase()===\"DOCTYPE\"?(t._currentToken={type:\"Doctype\",name:\"\",publicId:null,systemId:null,forceQuirks:!1},t.setState(st)):t._tokenHandler.isCdataSectionAllowed()&&n===\"[CDATA[\"?t.setState(Y):(t._parseError(\"expected-dashes-or-doctype\"),e.unget(n),t.setState(Q))}return!0}function Y(e){var r=e.matchUntil(\"]]>\");return e.shift(3),r&&t._emitToken({type:\"Characters\",data:r}),t.setState(n),!0}function Z(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(et):i===\">\"?(t._parseError(\"incorrect-comment\"),t._emitToken(t._currentToken),t.setState(n)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"\\ufffd\"):(t._currentToken.data+=i,t.setState(tt)),!0}function et(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(rt):i===\">\"?(t._parseError(\"incorrect-comment\"),t._emitToken(t._currentToken),t.setState(n)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"\\ufffd\"):(t._currentToken.data+=\"-\"+i,t.setState(tt)),!0}function tt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(nt):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"\\ufffd\"):(t._currentToken.data+=i,e.commit()),!0}function nt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment-end-dash\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(rt):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"-\\ufffd\",t.setState(tt)):(t._currentToken.data+=\"-\"+i+e.matchUntil(\"\\0|-\"),e.char()),!0}function rt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment-double-dash\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\">\"?(t._emitToken(t._currentToken),t.setState(n)):i===\"!\"?(t._parseError(\"unexpected-bang-after-double-dash-in-comment\"),t.setState(it)):i===\"-\"?(t._parseError(\"unexpected-dash-after-double-dash-in-comment\"),t._currentToken.data+=i):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"--\\ufffd\",t.setState(tt)):(t._parseError(\"unexpected-char-in-comment\"),t._currentToken.data+=\"--\"+i,t.setState(tt)),!0}function it(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment-end-bang-state\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\">\"?(t._emitToken(t._currentToken),t.setState(n)):i===\"-\"?(t._currentToken.data+=\"--!\",t.setState(nt)):(t._currentToken.data+=\"--!\"+i,t.setState(tt)),!0}function st(e){var i=e.char();return i===r.EOF?(t._parseError(\"expected-doctype-name-but-got-eof\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(ot):(t._parseError(\"need-space-after-doctype\"),e.unget(i),t.setState(ot)),!0}function ot(e){var i=e.char();return i===r.EOF?(t._parseError(\"expected-doctype-name-but-got-eof\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)||(i===\">\"?(t._parseError(\"expected-doctype-name-but-got-right-bracket\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):(o(i)&&(i=i.toLowerCase()),t._currentToken.name=i,t.setState(ut))),!0}function ut(e){var i=e.char();return i===r.EOF?(t._currentToken.forceQuirks=!0,e.unget(i),t._parseError(\"eof-in-doctype-name\"),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(at):i===\">\"?(t.setState(n),t._emitCurrentToken()):(o(i)&&(i=i.toLowerCase()),t._currentToken.name+=i,e.commit()),!0}function at(e){var i=e.char();if(i===r.EOF)t._currentToken.forceQuirks=!0,e.unget(i),t._parseError(\"eof-in-doctype\"),t.setState(n),t._emitCurrentToken();else if(!s(i))if(i===\">\")t.setState(n),t._emitCurrentToken();else{if([\"p\",\"P\"].indexOf(i)>-1){var o=[[\"u\",\"U\"],[\"b\",\"B\"],[\"l\",\"L\"],[\"i\",\"I\"],[\"c\",\"C\"]],u=o.every(function(t){return i=e.char(),t.indexOf(i)>-1});if(u)return t.setState(ft),!0}else if([\"s\",\"S\"].indexOf(i)>-1){var o=[[\"y\",\"Y\"],[\"s\",\"S\"],[\"t\",\"T\"],[\"e\",\"E\"],[\"m\",\"M\"]],u=o.every(function(t){return i=e.char(),t.indexOf(i)>-1});if(u)return t.setState(vt),!0}e.unget(i),t._currentToken.forceQuirks=!0,i===r.EOF?(t._parseError(\"eof-in-doctype\"),e.unget(i),t.setState(n),t._emitCurrentToken()):(t._parseError(\"expected-space-or-right-bracket-in-doctype\",{data:i}),t.setState(wt))}return!0}function ft(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(lt):i===\"'\"||i==='\"'?(t._parseError(\"unexpected-char-in-doctype\"),e.unget(i),t.setState(lt)):(e.unget(i),t.setState(lt)),!0}function lt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)||(i==='\"'?(t._currentToken.publicId=\"\",t.setState(ct)):i===\"'\"?(t._currentToken.publicId=\"\",t.setState(ht)):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function ct(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):i==='\"'?t.setState(pt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):t._currentToken.publicId+=i,!0}function ht(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):i===\"'\"?t.setState(pt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):t._currentToken.publicId+=i,!0}function pt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)?t.setState(dt):i===\">\"?(t.setState(n),t._emitCurrentToken()):i==='\"'?(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.systemId=\"\",t.setState(gt)):i===\"'\"?(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.systemId=\"\",t.setState(yt)):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt)),!0}function dt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i===\">\"?(t._emitCurrentToken(),t.setState(n)):i==='\"'?(t._currentToken.systemId=\"\",t.setState(gt)):i===\"'\"?(t._currentToken.systemId=\"\",t.setState(yt)):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function vt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)?t.setState(mt):i===\"'\"||i==='\"'?(t._parseError(\"unexpected-char-in-doctype\"),e.unget(i),t.setState(mt)):(e.unget(i),t.setState(mt)),!0}function mt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i==='\"'?(t._currentToken.systemId=\"\",t.setState(gt)):i===\"'\"?(t._currentToken.systemId=\"\",t.setState(yt)):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function gt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):i==='\"'?t.setState(bt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):t._currentToken.systemId+=i,!0}function yt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):i===\"'\"?t.setState(bt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):t._currentToken.systemId+=i,!0}function bt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i===\">\"?(t._emitCurrentToken(),t.setState(n)):(t._parseError(\"unexpected-char-in-doctype\"),t.setState(wt))),!0}function wt(e){var i=e.char();return i===r.EOF?(e.unget(i),t._emitCurrentToken(),t.setState(n)):i===\">\"&&(t._emitCurrentToken(),t.setState(n)),!0}u.DATA=n,u.RCDATA=f,u.RAWTEXT=c,u.SCRIPT_DATA=p,u.PLAINTEXT=h,this._state=u.DATA,this._inputStream.append(e),this._tokenHandler.startTokenization(this),this._inputStream.eof=!0;var t=this;while(this._state.call(this,this._inputStream));},Object.defineProperty(u.prototype,\"lineNumber\",{get:function(){return this._inputStream.location().line}}),Object.defineProperty(u.prototype,\"columnNumber\",{get:function(){return this._inputStream.location().column}}),n.Tokenizer=u},{\"./EntityParser\":2,\"./InputStream\":3}],6:[function(e,t,n){function c(e){return e===\" \"||e===\"\\n\"||e===\"\t\"||e===\"\\r\"||e===\"\\f\"}function h(e){return c(e)||e===\"\\ufffd\"}function p(e){for(var t=0;t<e.length;t++){var n=e[t];if(!c(n))return!1}return!0}function d(e){for(var t=0;t<e.length;t++){var n=e[t];if(!h(n))return!1}return!0}function v(e,t){for(var n=0;n<e.attributes.length;n++){var r=e.attributes[n];if(r.nodeName===t)return r}return null}function m(e){this.characters=e,this.current=0,this.end=this.characters.length}function g(){this.tokenizer=null,this.errorHandler=null,this.scriptingEnabled=!1,this.document=null,this.head=null,this.form=null,this.openElements=new a,this.activeFormattingElements=[],this.insertionMode=null,this.insertionModeName=\"\",this.originalInsertionMode=\"\",this.inQuirksMode=!1,this.compatMode=\"no quirks\",this.framesetOk=!0,this.redirectAttachToFosterParent=!1,this.selfClosingFlagAcknowledged=!1,this.context=\"\",this.pendingTableCharacters=[],this.shouldSkipLeadingNewline=!1;var e=this,t=this.insertionModes={};t.base={end_tag_handlers:{\"-default\":\"endTagOther\"},start_tag_handlers:{\"-default\":\"startTagOther\"},processEOF:function(){e.generateImpliedEndTags(),e.openElements.length>2?e.parseError(\"expected-closing-tag-but-got-eof\"):e.openElements.length==2&&e.openElements.item(1).localName!=\"body\"?e.parseError(\"expected-closing-tag-but-got-eof\"):e.context&&e.openElements.length>1},processComment:function(t){e.insertComment(t,e.currentStackItem().node)},processDoctype:function(t,n,r,i){e.parseError(\"unexpected-doctype\")},processStartTag:function(e,t,n){if(this[this.start_tag_handlers[e]])this[this.start_tag_handlers[e]](e,t,n);else{if(!this[this.start_tag_handlers[\"-default\"]])throw new Error(\"No handler found for \"+e);this[this.start_tag_handlers[\"-default\"]](e,t,n)}},processEndTag:function(e){if(this[this.end_tag_handlers[e]])this[this.end_tag_handlers[e]](e);else{if(!this[this.end_tag_handlers[\"-default\"]])throw new Error(\"No handler found for \"+e);this[this.end_tag_handlers[\"-default\"]](e)}},startTagHtml:function(e,n){t.inBody.startTagHtml(e,n)}},t.initial=Object.create(t.base),t.initial.processEOF=function(){e.parseError(\"expected-doctype-but-got-eof\"),this.anythingElse(),e.insertionMode.processEOF()},t.initial.processComment=function(t){e.insertComment(t,e.document)},t.initial.processDoctype=function(t,n,r,i){function s(e){return n.toLowerCase().indexOf(e)===0}e.insertDoctype(t||\"\",n||\"\",r||\"\"),i||t!=\"html\"||n!=null&&([\"+//silmaril//dtd html pro v0r11 19970101//\",\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//\",\"-//as//dtd html 3.0 aswedit + extensions//\",\"-//ietf//dtd html 2.0 level 1//\",\"-//ietf//dtd html 2.0 level 2//\",\"-//ietf//dtd html 2.0 strict level 1//\",\"-//ietf//dtd html 2.0 strict level 2//\",\"-//ietf//dtd html 2.0 strict//\",\"-//ietf//dtd html 2.0//\",\"-//ietf//dtd html 2.1e//\",\"-//ietf//dtd html 3.0//\",\"-//ietf//dtd html 3.0//\",\"-//ietf//dtd html 3.2 final//\",\"-//ietf//dtd html 3.2//\",\"-//ietf//dtd html 3//\",\"-//ietf//dtd html level 0//\",\"-//ietf//dtd html level 0//\",\"-//ietf//dtd html level 1//\",\"-//ietf//dtd html level 1//\",\"-//ietf//dtd html level 2//\",\"-//ietf//dtd html level 2//\",\"-//ietf//dtd html level 3//\",\"-//ietf//dtd html level 3//\",\"-//ietf//dtd html strict level 0//\",\"-//ietf//dtd html strict level 0//\",\"-//ietf//dtd html strict level 1//\",\"-//ietf//dtd html strict level 1//\",\"-//ietf//dtd html strict level 2//\",\"-//ietf//dtd html strict level 2//\",\"-//ietf//dtd html strict level 3//\",\"-//ietf//dtd html strict level 3//\",\"-//ietf//dtd html strict//\",\"-//ietf//dtd html strict//\",\"-//ietf//dtd html strict//\",\"-//ietf//dtd html//\",\"-//ietf//dtd html//\",\"-//ietf//dtd html//\",\"-//metrius//dtd metrius presentational//\",\"-//microsoft//dtd internet explorer 2.0 html strict//\",\"-//microsoft//dtd internet explorer 2.0 html//\",\"-//microsoft//dtd internet explorer 2.0 tables//\",\"-//microsoft//dtd internet explorer 3.0 html strict//\",\"-//microsoft//dtd internet explorer 3.0 html//\",\"-//microsoft//dtd internet explorer 3.0 tables//\",\"-//netscape comm. corp.//dtd html//\",\"-//netscape comm. corp.//dtd strict html//\",\"-//o'reilly and associates//dtd html 2.0//\",\"-//o'reilly and associates//dtd html extended 1.0//\",\"-//spyglass//dtd html 2.0 extended//\",\"-//sq//dtd html 2.0 hotmetal + extensions//\",\"-//sun microsystems corp.//dtd hotjava html//\",\"-//sun microsystems corp.//dtd hotjava strict html//\",\"-//w3c//dtd html 3 1995-03-24//\",\"-//w3c//dtd html 3.2 draft//\",\"-//w3c//dtd html 3.2 final//\",\"-//w3c//dtd html 3.2//\",\"-//w3c//dtd html 3.2s draft//\",\"-//w3c//dtd html 4.0 frameset//\",\"-//w3c//dtd html 4.0 transitional//\",\"-//w3c//dtd html experimental 19960712//\",\"-//w3c//dtd html experimental 970421//\",\"-//w3c//dtd w3 html//\",\"-//w3o//dtd w3 html 3.0//\",\"-//webtechs//dtd mozilla html 2.0//\",\"-//webtechs//dtd mozilla html//\",\"html\"].some(s)||[\"-//w3o//dtd w3 html strict 3.0//en//\",\"-/w3c/dtd html 4.0 transitional/en\",\"html\"].indexOf(n.toLowerCase())>-1||r==null&&[\"-//w3c//dtd html 4.01 transitional//\",\"-//w3c//dtd html 4.01 frameset//\"].some(s))||r!=null&&r.toLowerCase()==\"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\"?(e.compatMode=\"quirks\",e.parseError(\"quirky-doctype\")):n!=null&&([\"-//w3c//dtd xhtml 1.0 transitional//\",\"-//w3c//dtd xhtml 1.0 frameset//\"].some(s)||r!=null&&[\"-//w3c//dtd html 4.01 transitional//\",\"-//w3c//dtd html 4.01 frameset//\"].indexOf(n.toLowerCase())>-1)?(e.compatMode=\"limited quirks\",e.parseError(\"almost-standards-doctype\")):n==\"-//W3C//DTD HTML 4.0//EN\"&&(r==null||r==\"http://www.w3.org/TR/REC-html40/strict.dtd\")||n==\"-//W3C//DTD HTML 4.01//EN\"&&(r==null||r==\"http://www.w3.org/TR/html4/strict.dtd\")||n==\"-//W3C//DTD XHTML 1.0 Strict//EN\"&&r==\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"||n==\"-//W3C//DTD XHTML 1.1//EN\"&&r==\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"||(r!=null&&r!=\"about:legacy-compat\"||n!=null)&&e.parseError(\"unknown-doctype\"),e.setInsertionMode(\"beforeHTML\")},t.initial.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;e.parseError(\"expected-doctype-but-got-chars\"),this.anythingElse(),e.insertionMode.processCharacters(t)},t.initial.processStartTag=function(t,n,r){e.parseError(\"expected-doctype-but-got-start-tag\",{name:t}),this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.initial.processEndTag=function(t){e.parseError(\"expected-doctype-but-got-end-tag\",{name:t}),this.anythingElse(),e.insertionMode.processEndTag(t)},t.initial.anythingElse=function(){e.compatMode=\"quirks\",e.setInsertionMode(\"beforeHTML\")},t.beforeHTML=Object.create(t.base),t.beforeHTML.start_tag_handlers={html:\"startTagHtml\",\"-default\":\"startTagOther\"},t.beforeHTML.processEOF=function(){this.anythingElse(),e.insertionMode.processEOF()},t.beforeHTML.processComment=function(t){e.insertComment(t,e.document)},t.beforeHTML.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.beforeHTML.startTagHtml=function(t,n,r){e.insertHtmlElement(n),e.setInsertionMode(\"beforeHead\")},t.beforeHTML.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.beforeHTML.processEndTag=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.beforeHTML.anythingElse=function(){e.insertHtmlElement(),e.setInsertionMode(\"beforeHead\")},t.afterAfterBody=Object.create(t.base),t.afterAfterBody.start_tag_handlers={html:\"startTagHtml\",\"-default\":\"startTagOther\"},t.afterAfterBody.processComment=function(t){e.insertComment(t,e.document)},t.afterAfterBody.processDoctype=function(e){t.inBody.processDoctype(e)},t.afterAfterBody.startTagHtml=function(e,n){t.inBody.startTagHtml(e,n)},t.afterAfterBody.startTagOther=function(t,n,r){e.parseError(\"unexpected-start-tag\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processStartTag(t,n,r)},t.afterAfterBody.endTagOther=function(t){e.parseError(\"unexpected-end-tag\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processEndTag(t)},t.afterAfterBody.processCharacters=function(n){if(!p(n.characters))return e.parseError(\"unexpected-char-after-body\"),e.setInsertionMode(\"inBody\"),e.insertionMode.processCharacters(n);t.inBody.processCharacters(n)},t.afterBody=Object.create(t.base),t.afterBody.end_tag_handlers={html:\"endTagHtml\",\"-default\":\"endTagOther\"},t.afterBody.processComment=function(t){e.insertComment(t,e.openElements.rootNode)},t.afterBody.processCharacters=function(n){if(!p(n.characters))return e.parseError(\"unexpected-char-after-body\"),e.setInsertionMode(\"inBody\"),e.insertionMode.processCharacters(n);t.inBody.processCharacters(n)},t.afterBody.processStartTag=function(t,n,r){e.parseError(\"unexpected-start-tag-after-body\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processStartTag(t,n,r)},t.afterBody.endTagHtml=function(t){e.context?e.parseError(\"end-html-in-innerhtml\"):e.setInsertionMode(\"afterAfterBody\")},t.afterBody.endTagOther=function(t){e.parseError(\"unexpected-end-tag-after-body\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processEndTag(t)},t.afterFrameset=Object.create(t.base),t.afterFrameset.start_tag_handlers={html:\"startTagHtml\",noframes:\"startTagNoframes\",\"-default\":\"startTagOther\"},t.afterFrameset.end_tag_handlers={html:\"endTagHtml\",\"-default\":\"endTagOther\"},t.afterFrameset.processCharacters=function(t){var n=t.takeRemaining(),r=\"\";for(var i=0;i<n.length;i++){var s=n[i];c(s)&&(r+=s)}r&&e.insertText(r),r.length<n.length&&e.parseError(\"expected-eof-but-got-char\")},t.afterFrameset.startTagNoframes=function(e,n){t.inHead.processStartTag(e,n)},t.afterFrameset.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-after-frameset\",{name:t})},t.afterFrameset.endTagHtml=function(t){e.setInsertionMode(\"afterAfterFrameset\")},t.afterFrameset.endTagOther=function(t){e.parseError(\"unexpected-end-tag-after-frameset\",{name:t})},t.beforeHead=Object.create(t.base),t.beforeHead.start_tag_handlers={html:\"startTagHtml\",head:\"startTagHead\",\"-default\":\"startTagOther\"},t.beforeHead.end_tag_handlers={html:\"endTagImplyHead\",head:\"endTagImplyHead\",body:\"endTagImplyHead\",br:\"endTagImplyHead\",\"-default\":\"endTagOther\"},t.beforeHead.processEOF=function(){this.startTagHead(\"head\",[]),e.insertionMode.processEOF()},t.beforeHead.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;this.startTagHead(\"head\",[]),e.insertionMode.processCharacters(t)},t.beforeHead.startTagHead=function(t,n){e.insertHeadElement(n),e.setInsertionMode(\"inHead\")},t.beforeHead.startTagOther=function(t,n,r){this.startTagHead(\"head\",[]),e.insertionMode.processStartTag(t,n,r)},t.beforeHead.endTagImplyHead=function(t){this.startTagHead(\"head\",[]),e.insertionMode.processEndTag(t)},t.beforeHead.endTagOther=function(t){e.parseError(\"end-tag-after-implied-root\",{name:t})},t.inHead=Object.create(t.base),t.inHead.start_tag_handlers={html:\"startTagHtml\",head:\"startTagHead\",title:\"startTagTitle\",script:\"startTagScript\",style:\"startTagNoFramesStyle\",noscript:\"startTagNoScript\",noframes:\"startTagNoFramesStyle\",base:\"startTagBaseBasefontBgsoundLink\",basefont:\"startTagBaseBasefontBgsoundLink\",bgsound:\"startTagBaseBasefontBgsoundLink\",link:\"startTagBaseBasefontBgsoundLink\",meta:\"startTagMeta\",\"-default\":\"startTagOther\"},t.inHead.end_tag_handlers={head:\"endTagHead\",html:\"endTagHtmlBodyBr\",body:\"endTagHtmlBodyBr\",br:\"endTagHtmlBodyBr\",\"-default\":\"endTagOther\"},t.inHead.processEOF=function(){var t=e.currentStackItem().localName;[\"title\",\"style\",\"script\"].indexOf(t)!=-1&&(e.parseError(\"expected-named-closing-tag-but-got-eof\",{name:t}),e.popElement()),this.anythingElse(),e.insertionMode.processEOF()},t.inHead.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.inHead.startTagHtml=function(e,n){t.inBody.processStartTag(e,n)},t.inHead.startTagHead=function(t,n){e.parseError(\"two-heads-are-not-better-than-one\")},t.inHead.startTagTitle=function(t,n){e.processGenericRCDATAStartTag(t,n)},t.inHead.startTagNoScript=function(t,n){if(e.scriptingEnabled)return e.processGenericRawTextStartTag(t,n);e.insertElement(t,n),e.setInsertionMode(\"inHeadNoscript\")},t.inHead.startTagNoFramesStyle=function(t,n){e.processGenericRawTextStartTag(t,n)},t.inHead.startTagScript=function(t,n){e.insertElement(t,n),e.tokenizer.setState(u.SCRIPT_DATA),e.originalInsertionMode=e.insertionModeName,e.setInsertionMode(\"text\")},t.inHead.startTagBaseBasefontBgsoundLink=function(t,n){e.insertSelfClosingElement(t,n)},t.inHead.startTagMeta=function(t,n){e.insertSelfClosingElement(t,n)},t.inHead.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.inHead.endTagHead=function(t){e.openElements.item(e.openElements.length-1).localName==\"head\"?e.openElements.pop():e.parseError(\"unexpected-end-tag\",{name:\"head\"}),e.setInsertionMode(\"afterHead\")},t.inHead.endTagHtmlBodyBr=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.inHead.endTagOther=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inHead.anythingElse=function(){this.endTagHead(\"head\")},t.afterHead=Object.create(t.base),t.afterHead.start_tag_handlers={html:\"startTagHtml\",head:\"startTagHead\",body:\"startTagBody\",frameset:\"startTagFrameset\",base:\"startTagFromHead\",link:\"startTagFromHead\",meta:\"startTagFromHead\",script:\"startTagFromHead\",style:\"startTagFromHead\",title:\"startTagFromHead\",\"-default\":\"startTagOther\"},t.afterHead.end_tag_handlers={body:\"endTagBodyHtmlBr\",html:\"endTagBodyHtmlBr\",br:\"endTagBodyHtmlBr\",\"-default\":\"endTagOther\"},t.afterHead.processEOF=function(){this.anythingElse(),e.insertionMode.processEOF()},t.afterHead.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.afterHead.startTagHtml=function(e,n){t.inBody.processStartTag(e,n)},t.afterHead.startTagBody=function(t,n){e.framesetOk=!1,e.insertBodyElement(n),e.setInsertionMode(\"inBody\")},t.afterHead.startTagFrameset=function(t,n){e.insertElement(t,n),e.setInsertionMode(\"inFrameset\")},t.afterHead.startTagFromHead=function(n,r,i){e.parseError(\"unexpected-start-tag-out-of-my-head\",{name:n}),e.openElements.push(e.head),t.inHead.processStartTag(n,r,i),e.openElements.remove(e.head)},t.afterHead.startTagHead=function(t,n,r){e.parseError(\"unexpected-start-tag\",{name:t})},t.afterHead.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.afterHead.endTagBodyHtmlBr=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.afterHead.endTagOther=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.afterHead.anythingElse=function(){e.insertBodyElement([]),e.setInsertionMode(\"inBody\"),e.framesetOk=!0},t.inBody=Object.create(t.base),t.inBody.start_tag_handlers={html:\"startTagHtml\",head:\"startTagMisplaced\",base:\"startTagProcessInHead\",basefont:\"startTagProcessInHead\",bgsound:\"startTagProcessInHead\",link:\"startTagProcessInHead\",meta:\"startTagProcessInHead\",noframes:\"startTagProcessInHead\",script:\"startTagProcessInHead\",style:\"startTagProcessInHead\",title:\"startTagProcessInHead\",body:\"startTagBody\",form:\"startTagForm\",plaintext:\"startTagPlaintext\",a:\"startTagA\",button:\"startTagButton\",xmp:\"startTagXmp\",table:\"startTagTable\",hr:\"startTagHr\",image:\"startTagImage\",input:\"startTagInput\",textarea:\"startTagTextarea\",select:\"startTagSelect\",isindex:\"startTagIsindex\",applet:\"startTagAppletMarqueeObject\",marquee:\"startTagAppletMarqueeObject\",object:\"startTagAppletMarqueeObject\",li:\"startTagListItem\",dd:\"startTagListItem\",dt:\"startTagListItem\",address:\"startTagCloseP\",article:\"startTagCloseP\",aside:\"startTagCloseP\",blockquote:\"startTagCloseP\",center:\"startTagCloseP\",details:\"startTagCloseP\",dir:\"startTagCloseP\",div:\"startTagCloseP\",dl:\"startTagCloseP\",fieldset:\"startTagCloseP\",figcaption:\"startTagCloseP\",figure:\"startTagCloseP\",footer:\"startTagCloseP\",header:\"startTagCloseP\",hgroup:\"startTagCloseP\",main:\"startTagCloseP\",menu:\"startTagCloseP\",nav:\"startTagCloseP\",ol:\"startTagCloseP\",p:\"startTagCloseP\",section:\"startTagCloseP\",summary:\"startTagCloseP\",ul:\"startTagCloseP\",listing:\"startTagPreListing\",pre:\"startTagPreListing\",b:\"startTagFormatting\",big:\"startTagFormatting\",code:\"startTagFormatting\",em:\"startTagFormatting\",font:\"startTagFormatting\",i:\"startTagFormatting\",s:\"startTagFormatting\",small:\"startTagFormatting\",strike:\"startTagFormatting\",strong:\"startTagFormatting\",tt:\"startTagFormatting\",u:\"startTagFormatting\",nobr:\"startTagNobr\",area:\"startTagVoidFormatting\",br:\"startTagVoidFormatting\",embed:\"startTagVoidFormatting\",img:\"startTagVoidFormatting\",keygen:\"startTagVoidFormatting\",wbr:\"startTagVoidFormatting\",param:\"startTagParamSourceTrack\",source:\"startTagParamSourceTrack\",track:\"startTagParamSourceTrack\",iframe:\"startTagIFrame\",noembed:\"startTagRawText\",noscript:\"startTagRawText\",h1:\"startTagHeading\",h2:\"startTagHeading\",h3:\"startTagHeading\",h4:\"startTagHeading\",h5:\"startTagHeading\",h6:\"startTagHeading\",caption:\"startTagMisplaced\",col:\"startTagMisplaced\",colgroup:\"startTagMisplaced\",frame:\"startTagMisplaced\",frameset:\"startTagFrameset\",tbody:\"startTagMisplaced\",td:\"startTagMisplaced\",tfoot:\"startTagMisplaced\",th:\"startTagMisplaced\",thead:\"startTagMisplaced\",tr:\"startTagMisplaced\",option:\"startTagOptionOptgroup\",optgroup:\"startTagOptionOptgroup\",math:\"startTagMath\",svg:\"startTagSVG\",rt:\"startTagRpRt\",rp:\"startTagRpRt\",\"-default\":\"startTagOther\"},t.inBody.end_tag_handlers={p:\"endTagP\",body:\"endTagBody\",html:\"endTagHtml\",address:\"endTagBlock\",article:\"endTagBlock\",aside:\"endTagBlock\",blockquote:\"endTagBlock\",button:\"endTagBlock\",center:\"endTagBlock\",details:\"endTagBlock\",dir:\"endTagBlock\",div:\"endTagBlock\",dl:\"endTagBlock\",fieldset:\"endTagBlock\",figcaption:\"endTagBlock\",figure:\"endTagBlock\",footer:\"endTagBlock\",header:\"endTagBlock\",hgroup:\"endTagBlock\",listing:\"endTagBlock\",main:\"endTagBlock\",menu:\"endTagBlock\",nav:\"endTagBlock\",ol:\"endTagBlock\",pre:\"endTagBlock\",section:\"endTagBlock\",summary:\"endTagBlock\",ul:\"endTagBlock\",form:\"endTagForm\",applet:\"endTagAppletMarqueeObject\",marquee:\"endTagAppletMarqueeObject\",object:\"endTagAppletMarqueeObject\",dd:\"endTagListItem\",dt:\"endTagListItem\",li:\"endTagListItem\",h1:\"endTagHeading\",h2:\"endTagHeading\",h3:\"endTagHeading\",h4:\"endTagHeading\",h5:\"endTagHeading\",h6:\"endTagHeading\",a:\"endTagFormatting\",b:\"endTagFormatting\",big:\"endTagFormatting\",code:\"endTagFormatting\",em:\"endTagFormatting\",font:\"endTagFormatting\",i:\"endTagFormatting\",nobr:\"endTagFormatting\",s:\"endTagFormatting\",small:\"endTagFormatting\",strike:\"endTagFormatting\",strong:\"endTagFormatting\",tt:\"endTagFormatting\",u:\"endTagFormatting\",br:\"endTagBr\",\"-default\":\"endTagOther\"},t.inBody.processCharacters=function(t){e.shouldSkipLeadingNewline&&(e.shouldSkipLeadingNewline=!1,t.skipAtMostOneLeadingNewline()),e.reconstructActiveFormattingElements();var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\"});if(!n)return;e.insertText(n),e.framesetOk&&!d(n)&&(e.framesetOk=!1)},t.inBody.startTagHtml=function(t,n){e.parseError(\"non-html-root\"),e.addAttributesToElement(e.openElements.rootNode,n)},t.inBody.startTagProcessInHead=function(e,n){t.inHead.processStartTag(e,n)},t.inBody.startTagBody=function(t,n){e.parseError(\"unexpected-start-tag\",{name:\"body\"}),e.openElements.length==1||e.openElements.item(1).localName!=\"body\"?r.ok(e.context):(e.framesetOk=!1,e.addAttributesToElement(e.openElements.bodyElement,n))},t.inBody.startTagFrameset=function(t,n){e.parseError(\"unexpected-start-tag\",{name:\"frameset\"});if(e.openElements.length==1||e.openElements.item(1).localName!=\"body\")r.ok(e.context);else if(e.framesetOk){e.detachFromParent(e.openElements.bodyElement);while(e.openElements.length>1)e.openElements.pop();e.insertElement(t,n),e.setInsertionMode(\"inFrameset\")}},t.inBody.startTagCloseP=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n)},t.inBody.startTagPreListing=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.framesetOk=!1,e.shouldSkipLeadingNewline=!0},t.inBody.startTagForm=function(t,n){e.form?e.parseError(\"unexpected-start-tag\",{name:t}):(e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.form=e.currentStackItem())},t.inBody.startTagRpRt=function(t,n){e.openElements.inScope(\"ruby\")&&(e.generateImpliedEndTags(),e.currentStackItem().localName!=\"ruby\"&&e.parseError(\"unexpected-start-tag\",{name:t})),e.insertElement(t,n)},t.inBody.startTagListItem=function(t,n){var r={li:[\"li\"],dd:[\"dd\",\"dt\"],dt:[\"dd\",\"dt\"]},i=r[t],s=e.openElements;for(var o=s.length-1;o>=0;o--){var u=s.item(o);if(i.indexOf(u.localName)!=-1){e.insertionMode.processEndTag(u.localName);break}if(u.isSpecial()&&u.localName!==\"p\"&&u.localName!==\"address\"&&u.localName!==\"div\")break}e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.framesetOk=!1},t.inBody.startTagPlaintext=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.tokenizer.setState(u.PLAINTEXT)},t.inBody.startTagHeading=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.currentStackItem().isNumberedHeader()&&(e.parseError(\"unexpected-start-tag\",{name:t}),e.popElement()),e.insertElement(t,n)},t.inBody.startTagA=function(t,n){var r=e.elementInActiveFormattingElements(\"a\");r&&(e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"a\",endName:\"a\"}),e.adoptionAgencyEndTag(\"a\"),e.openElements.contains(r)&&e.openElements.remove(r),e.removeElementFromActiveFormattingElements(r)),e.reconstructActiveFormattingElements(),e.insertFormattingElement(t,n)},t.inBody.startTagFormatting=function(t,n){e.reconstructActiveFormattingElements(),e.insertFormattingElement(t,n)},t.inBody.startTagNobr=function(t,n){e.reconstructActiveFormattingElements(),e.openElements.inScope(\"nobr\")&&(e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"nobr\",endName:\"nobr\"}),this.processEndTag(\"nobr\"),e.reconstructActiveFormattingElements()),e.insertFormattingElement(t,n)},t.inBody.startTagButton=function(t,n){e.openElements.inScope(\"button\")?(e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"button\",endName:\"button\"}),this.processEndTag(\"button\"),e.insertionMode.processStartTag(t,n)):(e.framesetOk=!1,e.reconstructActiveFormattingElements(),e.insertElement(t,n))},t.inBody.startTagAppletMarqueeObject=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n),e.activeFormattingElements.push(l),e.framesetOk=!1},t.inBody.endTagAppletMarqueeObject=function(t){e.openElements.inScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.popUntilPopped(t),e.clearActiveFormattingElements()):e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.startTagXmp=function(t,n){e.openElements.inButtonScope(\"p\")&&this.processEndTag(\"p\"),e.reconstructActiveFormattingElements(),e.processGenericRawTextStartTag(t,n),e.framesetOk=!1},t.inBody.startTagTable=function(t,n){e.compatMode!==\"quirks\"&&e.openElements.inButtonScope(\"p\")&&this.processEndTag(\"p\"),e.insertElement(t,n),e.setInsertionMode(\"inTable\"),e.framesetOk=!1},t.inBody.startTagVoidFormatting=function(t,n){e.reconstructActiveFormattingElements(),e.insertSelfClosingElement(t,n),e.framesetOk=!1},t.inBody.startTagParamSourceTrack=function(t,n){e.insertSelfClosingElement(t,n)},t.inBody.startTagHr=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertSelfClosingElement(t,n),e.framesetOk=!1},t.inBody.startTagImage=function(t,n){e.parseError(\"unexpected-start-tag-treated-as\",{originalName:\"image\",newName:\"img\"}),this.processStartTag(\"img\",n)},t.inBody.startTagInput=function(t,n){var r=e.framesetOk;this.startTagVoidFormatting(t,n);for(var i in n)if(n[i].nodeName==\"type\"){n[i].nodeValue.toLowerCase()==\"hidden\"&&(e.framesetOk=r);break}},t.inBody.startTagIsindex=function(t,n){e.parseError(\"deprecated-tag\",{name:\"isindex\"}),e.selfClosingFlagAcknowledged=!0;if(e.form)return;var r=[],i=[],s=\"This is a searchable index. Enter search keywords: \";for(var o in n)switch(n[o].nodeName){case\"action\":r.push({nodeName:\"action\",nodeValue:n[o].nodeValue});break;case\"prompt\":s=n[o].nodeValue;break;case\"name\":break;default:i.push({nodeName:n[o].nodeName,nodeValue:n[o].nodeValue})}i.push({nodeName:\"name\",nodeValue:\"isindex\"}),this.processStartTag(\"form\",r),this.processStartTag(\"hr\"),this.processStartTag(\"label\"),this.processCharacters(new m(s)),this.processStartTag(\"input\",i),this.processEndTag(\"label\"),this.processStartTag(\"hr\"),this.processEndTag(\"form\")},t.inBody.startTagTextarea=function(t,n){e.insertElement(t,n),e.tokenizer.setState(u.RCDATA),e.originalInsertionMode=e.insertionModeName,e.shouldSkipLeadingNewline=!0,e.framesetOk=!1,e.setInsertionMode(\"text\")},t.inBody.startTagIFrame=function(t,n){e.framesetOk=!1,this.startTagRawText(t,n)},t.inBody.startTagRawText=function(t,n){e.processGenericRawTextStartTag(t,n)},t.inBody.startTagSelect=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n),e.framesetOk=!1;var r=e.insertionModeName;r==\"inTable\"||r==\"inCaption\"||r==\"inColumnGroup\"||r==\"inTableBody\"||r==\"inRow\"||r==\"inCell\"?e.setInsertionMode(\"inSelectInTable\"):e.setInsertionMode(\"inSelect\")},t.inBody.startTagMisplaced=function(t,n){e.parseError(\"unexpected-start-tag-ignored\",{name:t})},t.inBody.endTagMisplaced=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.endTagBr=function(t){e.parseError(\"unexpected-end-tag-treated-as\",{originalName:\"br\",newName:\"br element\"}),e.reconstructActiveFormattingElements(),e.insertElement(t,[]),e.popElement()},t.inBody.startTagOptionOptgroup=function(t,n){e.currentStackItem().localName==\"option\"&&e.popElement(),e.reconstructActiveFormattingElements(),e.insertElement(t,n)},t.inBody.startTagOther=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n)},t.inBody.endTagOther=function(t){var n;for(var r=e.openElements.length-1;r>0;r--){n=e.openElements.item(r);if(n.localName==t){e.generateImpliedEndTags(t),e.currentStackItem().localName!=t&&e.parseError(\"unexpected-end-tag\",{name:t}),e.openElements.remove_openElements_until(function(e){return e===n});break}if(n.isSpecial()){e.parseError(\"unexpected-end-tag\",{name:t});break}}},t.inBody.startTagMath=function(t,n,r){e.reconstructActiveFormattingElements(),n=e.adjustMathMLAttributes(n),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,\"http://www.w3.org/1998/Math/MathML\",r)},t.inBody.startTagSVG=function(t,n,r){e.reconstructActiveFormattingElements(),n=e.adjustSVGAttributes(n),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,\"http://www.w3.org/2000/svg\",r)},t.inBody.endTagP=function(t){e.openElements.inButtonScope(\"p\")?(e.generateImpliedEndTags(\"p\"),e.currentStackItem().localName!=\"p\"&&e.parseError(\"unexpected-implied-end-tag\",{name:\"p\"}),e.openElements.popUntilPopped(t)):(e.parseError(\"unexpected-end-tag\",{name:\"p\"}),this.startTagCloseP(\"p\",[]),this.endTagP(\"p\"))},t.inBody.endTagBody=function(t){if(!e.openElements.inScope(\"body\")){e.parseError(\"unexpected-end-tag\",{name:t});return}e.currentStackItem().localName!=\"body\"&&e.parseError(\"expected-one-end-tag-but-got-another\",{expectedName:e.currentStackItem().localName,gotName:t}),e.setInsertionMode(\"afterBody\")},t.inBody.endTagHtml=function(t){if(!e.openElements.inScope(\"body\")){e.parseError(\"unexpected-end-tag\",{name:t});return}e.currentStackItem().localName!=\"body\"&&e.parseError(\"expected-one-end-tag-but-got-another\",{expectedName:e.currentStackItem().localName,gotName:t}),e.setInsertionMode(\"afterBody\"),e.insertionMode.processEndTag(t)},t.inBody.endTagBlock=function(t){e.openElements.inScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.popUntilPopped(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.endTagForm=function(t){var n=e.form;e.form=null,!n||!e.openElements.inScope(t)?e.parseError(\"unexpected-end-tag\",{name:t}):(e.generateImpliedEndTags(),e.currentStackItem()!=n&&e.parseError(\"end-tag-too-early-ignored\",{name:\"form\"}),e.openElements.remove(n))},t.inBody.endTagListItem=function(t){e.openElements.inListItemScope(t)?(e.generateImpliedEndTags(t),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.popUntilPopped(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.endTagHeading=function(t){if(!e.openElements.hasNumberedHeaderElementInScope()){e.parseError(\"unexpected-end-tag\",{name:t});return}e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.remove_openElements_until(function(e){return e.isNumberedHeader()})},t.inBody.endTagFormatting=function(t,n){e.adoptionAgencyEndTag(t)||this.endTagOther(t,n)},t.inCaption=Object.create(t.base),t.inCaption.start_tag_handlers={html:\"startTagHtml\",caption:\"startTagTableElement\",col:\"startTagTableElement\",colgroup:\"startTagTableElement\",tbody:\"startTagTableElement\",td:\"startTagTableElement\",tfoot:\"startTagTableElement\",thead:\"startTagTableElement\",tr:\"startTagTableElement\",\"-default\":\"startTagOther\"},t.inCaption.end_tag_handlers={caption:\"endTagCaption\",table:\"endTagTable\",body:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",tbody:\"endTagIgnore\",td:\"endTagIgnore\",tfood:\"endTagIgnore\",thead:\"endTagIgnore\",tr:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inCaption.processCharacters=function(e){t.inBody.processCharacters(e)},t.inCaption.startTagTableElement=function(t,n){e.parseError(\"unexpected-end-tag\",{name:t});var r=!e.openElements.inTableScope(\"caption\");e.insertionMode.processEndTag(\"caption\"),r||e.insertionMode.processStartTag(t,n)},t.inCaption.startTagOther=function(e,n,r){t.inBody.processStartTag(e,n,r)},t.inCaption.endTagCaption=function(t){e.openElements.inTableScope(\"caption\")?(e.generateImpliedEndTags(),e.currentStackItem().localName!=\"caption\"&&e.parseError(\"expected-one-end-tag-but-got-another\",{gotName:\"caption\",expectedName:e.currentStackItem().localName}),e.openElements.popUntilPopped(\"caption\"),e.clearActiveFormattingElements(),e.setInsertionMode(\"inTable\")):(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t}))},t.inCaption.endTagTable=function(t){e.parseError(\"unexpected-end-table-in-caption\");var n=!e.openElements.inTableScope(\"caption\");e.insertionMode.processEndTag(\"caption\"),n||e.insertionMode.processEndTag(t)},t.inCaption.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inCaption.endTagOther=function(e){t.inBody.processEndTag(e)},t.inCell=Object.create(t.base),t.inCell.start_tag_handlers={html:\"startTagHtml\",caption:\"startTagTableOther\",col:\"startTagTableOther\",colgroup:\"startTagTableOther\",tbody:\"startTagTableOther\",td:\"startTagTableOther\",tfoot:\"startTagTableOther\",th:\"startTagTableOther\",thead:\"startTagTableOther\",tr:\"startTagTableOther\",\"-default\":\"startTagOther\"},t.inCell.end_tag_handlers={td:\"endTagTableCell\",th:\"endTagTableCell\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",table:\"endTagImply\",tbody:\"endTagImply\",tfoot:\"endTagImply\",thead:\"endTagImply\",tr:\"endTagImply\",\"-default\":\"endTagOther\"},t.inCell.processCharacters=function(e){t.inBody.processCharacters(e)},t.inCell.startTagTableOther=function(t,n,r){e.openElements.inTableScope(\"td\")||e.openElements.inTableScope(\"th\")?(this.closeCell(),e.insertionMode.processStartTag(t,n,r)):e.parseError(\"unexpected-start-tag\",{name:t})},t.inCell.startTagOther=function(e,n,r){t.inBody.processStartTag(e,n,r)},t.inCell.endTagTableCell=function(t){e.openElements.inTableScope(t)?(e.generateImpliedEndTags(t),e.currentStackItem().localName!=t.toLowerCase()?(e.parseError(\"unexpected-cell-end-tag\",{name:t}),e.openElements.popUntilPopped(t)):e.popElement(),e.clearActiveFormattingElements(),e.setInsertionMode(\"inRow\")):e.parseError(\"unexpected-end-tag\",{name:t})},t.inCell.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inCell.endTagImply=function(t){e.openElements.inTableScope(t)?(this.closeCell(),e.insertionMode.processEndTag(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inCell.endTagOther=function(e){t.inBody.processEndTag(e)},t.inCell.closeCell=function(){e.openElements.inTableScope(\"td\")?this.endTagTableCell(\"td\"):e.openElements.inTableScope(\"th\")&&this.endTagTableCell(\"th\")},t.inColumnGroup=Object.create(t.base),t.inColumnGroup.start_tag_handlers={html:\"startTagHtml\",col:\"startTagCol\",\"-default\":\"startTagOther\"},t.inColumnGroup.end_tag_handlers={colgroup:\"endTagColgroup\",col:\"endTagCol\",\"-default\":\"endTagOther\"},t.inColumnGroup.ignoreEndTagColgroup=function(){return e.currentStackItem().localName==\"html\"},t.inColumnGroup.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;var r=this.ignoreEndTagColgroup();this.endTagColgroup(\"colgroup\"),r||e.insertionMode.processCharacters(t)},t.inColumnGroup.startTagCol=function(t,n){e.insertSelfClosingElement(t,n)},t.inColumnGroup.startTagOther=function(t,n,r){var i=this.ignoreEndTagColgroup();this.endTagColgroup(\"colgroup\"),i||e.insertionMode.processStartTag(t,n,r)},t.inColumnGroup.endTagColgroup=function(t){this.ignoreEndTagColgroup()?(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t})):(e.popElement(),e.setInsertionMode(\"inTable\"))},t.inColumnGroup.endTagCol=function(t){e.parseError(\"no-end-tag\",{name:\"col\"})},t.inColumnGroup.endTagOther=function(t){var n=this.ignoreEndTagColgroup();this.endTagColgroup(\"colgroup\"),n||e.insertionMode.processEndTag(t)},t.inForeignContent=Object.create(t.base),t.inForeignContent.processStartTag=function(t,n,r){if([\"b\",\"big\",\"blockquote\",\"body\",\"br\",\"center\",\"code\",\"dd\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"hr\",\"i\",\"img\",\"li\",\"listing\",\"menu\",\"meta\",\"nobr\",\"ol\",\"p\",\"pre\",\"ruby\",\"s\",\"small\",\"span\",\"strong\",\"strike\",\"sub\",\"sup\",\"table\",\"tt\",\"u\",\"ul\",\"var\"].indexOf(t)!=-1||t==\"font\"&&n.some(function(e){return[\"color\",\"face\",\"size\"].indexOf(e.nodeName)>=0})){e.parseError(\"unexpected-html-element-in-foreign-content\",{name:t});while(e.currentStackItem().isForeign()&&!e.currentStackItem().isHtmlIntegrationPoint()&&!e.currentStackItem().isMathMLTextIntegrationPoint())e.openElements.pop();e.insertionMode.processStartTag(t,n,r);return}e.currentStackItem().namespaceURI==\"http://www.w3.org/1998/Math/MathML\"&&(n=e.adjustMathMLAttributes(n)),e.currentStackItem().namespaceURI==\"http://www.w3.org/2000/svg\"&&(t=e.adjustSVGTagNameCase(t),n=e.adjustSVGAttributes(n)),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,e.currentStackItem().namespaceURI,r)},t.inForeignContent.processEndTag=function(t){var n=e.currentStackItem(),r=e.openElements.length-1;n.localName.toLowerCase()!=t&&e.parseError(\"unexpected-end-tag\",{name:t});for(;;){if(r===0)break;if(n.localName.toLowerCase()==t){while(e.openElements.pop()!=n);break}r-=1,n=e.openElements.item(r);if(n.isForeign())continue;e.insertionMode.processEndTag(t);break}},t.inForeignContent.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\\ufffd\"}),e.framesetOk&&!d(n)&&(e.framesetOk=!1),e.insertText(n)},t.inHeadNoscript=Object.create(t.base),t.inHeadNoscript.start_tag_handlers={html:\"startTagHtml\",basefont:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",bgsound:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",link:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",meta:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",noframes:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",style:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",head:\"startTagHeadNoscript\",noscript:\"startTagHeadNoscript\",\"-default\":\"startTagOther\"},t.inHeadNoscript.end_tag_handlers={noscript:\"endTagNoscript\",br:\"endTagBr\",\"-default\":\"endTagOther\"},t.inHeadNoscript.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;e.parseError(\"unexpected-char-in-frameset\"),this.anythingElse(),e.insertionMode.processCharacters(t)},t.inHeadNoscript.processComment=function(e){t.inHead.processComment(e)},t.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle=function(e,n){t.inHead.processStartTag(e,n)},t.inHeadNoscript.startTagHeadNoscript=function(t,n){e.parseError(\"unexpected-start-tag-in-frameset\",{name:t})},t.inHeadNoscript.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-in-frameset\",{name:t}),this.anythingElse(),e.insertionMode.processStartTag(t,n)},t.inHeadNoscript.endTagBr=function(t,n){e.parseError(\"unexpected-end-tag-in-frameset\",{name:t}),this.anythingElse(),e.insertionMode.processEndTag(t,n)},t.inHeadNoscript.endTagNoscript=function(t,n){e.popElement(),e.setInsertionMode(\"inHead\")},t.inHeadNoscript.endTagOther=function(t,n){e.parseError(\"unexpected-end-tag-in-frameset\",{name:t})},t.inHeadNoscript.anythingElse=function(){e.popElement(),e.setInsertionMode(\"inHead\")},t.inFrameset=Object.create(t.base),t.inFrameset.start_tag_handlers={html:\"startTagHtml\",frameset:\"startTagFrameset\",frame:\"startTagFrame\",noframes:\"startTagNoframes\",\"-default\":\"startTagOther\"},t.inFrameset.end_tag_handlers={frameset:\"endTagFrameset\",noframes:\"endTagNoframes\",\"-default\":\"endTagOther\"},t.inFrameset.processCharacters=function(t){e.parseError(\"unexpected-char-in-frameset\")},t.inFrameset.startTagFrameset=function(t,n){e.insertElement(t,n)},t.inFrameset.startTagFrame=function(t,n){e.insertSelfClosingElement(t,n)},t.inFrameset.startTagNoframes=function(e,n){t.inBody.processStartTag(e,n)},t.inFrameset.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-in-frameset\",{name:t})},t.inFrameset.endTagFrameset=function(t,n){e.currentStackItem().localName==\"html\"?e.parseError(\"unexpected-frameset-in-frameset-innerhtml\"):e.popElement(),!e.context&&e.currentStackItem().localName!=\"frameset\"&&e.setInsertionMode(\"afterFrameset\")},t.inFrameset.endTagNoframes=function(e){t.inBody.processEndTag(e)},t.inFrameset.endTagOther=function(t){e.parseError(\"unexpected-end-tag-in-frameset\",{name:t})},t.inTable=Object.create(t.base),t.inTable.start_tag_handlers={html:\"startTagHtml\",caption:\"startTagCaption\",colgroup:\"startTagColgroup\",col:\"startTagCol\",table:\"startTagTable\",tbody:\"startTagRowGroup\",tfoot:\"startTagRowGroup\",thead:\"startTagRowGroup\",td:\"startTagImplyTbody\",th:\"startTagImplyTbody\",tr:\"startTagImplyTbody\",style:\"startTagStyleScript\",script:\"startTagStyleScript\",input:\"startTagInput\",form:\"startTagForm\",\"-default\":\"startTagOther\"},t.inTable.end_tag_handlers={table:\"endTagTable\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",tbody:\"endTagIgnore\",td:\"endTagIgnore\",tfoot:\"endTagIgnore\",th:\"endTagIgnore\",thead:\"endTagIgnore\",tr:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inTable.processCharacters=function(n){if(e.currentStackItem().isFosterParenting()){var r=e.insertionModeName;e.setInsertionMode(\"inTableText\"),e.originalInsertionMode=r,e.insertionMode.processCharacters(n)}else e.redirectAttachToFosterParent=!0,t.inBody.processCharacters(n),e.redirectAttachToFosterParent=!1},t.inTable.startTagCaption=function(t,n){e.openElements.popUntilTableScopeMarker(),e.activeFormattingElements.push(l),e.insertElement(t,n),e.setInsertionMode(\"inCaption\")},t.inTable.startTagColgroup=function(t,n){e.openElements.popUntilTableScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inColumnGroup\")},t.inTable.startTagCol=function(t,n){this.startTagColgroup(\"colgroup\",[]),e.insertionMode.processStartTag(t,n)},t.inTable.startTagRowGroup=function(t,n){e.openElements.popUntilTableScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inTableBody\")},t.inTable.startTagImplyTbody=function(t,n){this.startTagRowGroup(\"tbody\",[]),e.insertionMode.processStartTag(t,n)},t.inTable.startTagTable=function(t,n){e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"table\",endName:\"table\"}),e.insertionMode.processEndTag(\"table\"),e.context||e.insertionMode.processStartTag(t,n)},t.inTable.startTagStyleScript=function(e,n){t.inHead.processStartTag(e,n)},t.inTable.startTagInput=function(t,n){for(var r in n)if(n[r].nodeName.toLowerCase()==\"type\"){if(n[r].nodeValue.toLowerCase()==\"hidden\"){e.parseError(\"unexpected-hidden-input-in-table\"),e.insertElement(t,n),e.openElements.pop();return}break}this.startTagOther(t,n)},t.inTable.startTagForm=function(t,n){e.parseError(\"unexpected-form-in-table\"),e.form||(e.insertElement(t,n),e.form=e.currentStackItem(),e.openElements.pop())},t.inTable.startTagOther=function(n,r,i){e.parseError(\"unexpected-start-tag-implies-table-voodoo\",{name:n}),e.redirectAttachToFosterParent=!0,t.inBody.processStartTag(n,r,i),e.redirectAttachToFosterParent=!1},t.inTable.endTagTable=function(t){e.openElements.inTableScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early-named\",{gotName:\"table\",expectedName:e.currentStackItem().localName}),e.openElements.popUntilPopped(\"table\"),e.resetInsertionMode()):(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t}))},t.inTable.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inTable.endTagOther=function(n){e.parseError(\"unexpected-end-tag-implies-table-voodoo\",{name:n}),e.redirectAttachToFosterParent=!0,t.inBody.processEndTag(n),e.redirectAttachToFosterParent=!1},t.inTableText=Object.create(t.base),t.inTableText.flushCharacters=function(){var t=e.pendingTableCharacters.join(\"\");p(t)?e.insertText(t):(e.redirectAttachToFosterParent=!0,e.reconstructActiveFormattingElements(),e.insertText(t),e.framesetOk=!1,e.redirectAttachToFosterParent=!1),e.pendingTableCharacters=[]},t.inTableText.processComment=function(t){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processComment(t)},t.inTableText.processEOF=function(t){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEOF()},t.inTableText.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\"});if(!n)return;e.pendingTableCharacters.push(n)},t.inTableText.processStartTag=function(t,n,r){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processStartTag(t,n,r)},t.inTableText.processEndTag=function(t,n){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEndTag(t,n)},t.inTableBody=Object.create(t.base),t.inTableBody.start_tag_handlers={html:\"startTagHtml\",tr:\"startTagTr\",td:\"startTagTableCell\",th:\"startTagTableCell\",caption:\"startTagTableOther\",col:\"startTagTableOther\",colgroup:\"startTagTableOther\",tbody:\"startTagTableOther\",tfoot:\"startTagTableOther\",thead:\"startTagTableOther\",\"-default\":\"startTagOther\"},t.inTableBody.end_tag_handlers={table:\"endTagTable\",tbody:\"endTagTableRowGroup\",tfoot:\"endTagTableRowGroup\",thead:\"endTagTableRowGroup\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",td:\"endTagIgnore\",th:\"endTagIgnore\",tr:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inTableBody.processCharacters=function(e){t.inTable.processCharacters(e)},t.inTableBody.startTagTr=function(t,n){e.openElements.popUntilTableBodyScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inRow\")},t.inTableBody.startTagTableCell=function(t,n){e.parseError(\"unexpected-cell-in-table-body\",{name:t}),this.startTagTr(\"tr\",[]),e.insertionMode.processStartTag(t,n)},t.inTableBody.startTagTableOther=function(t,n){e.openElements.inTableScope(\"tbody\")||e.openElements.inTableScope(\"thead\")||e.openElements.inTableScope(\"tfoot\")?(e.openElements.popUntilTableBodyScopeMarker(),this.endTagTableRowGroup(e.currentStackItem().localName),e.insertionMode.processStartTag(t,n)):e.parseError(\"unexpected-start-tag\",{name:t})},t.inTableBody.startTagOther=function(e,n){t.inTable.processStartTag(e,n)},t.inTableBody.endTagTableRowGroup=function(t){e.openElements.inTableScope(t)?(e.openElements.popUntilTableBodyScopeMarker(),e.popElement(),e.setInsertionMode(\"inTable\")):e.parseError(\"unexpected-end-tag-in-table-body\",{name:t})},t.inTableBody.endTagTable=function(t){e.openElements.inTableScope(\"tbody\")||e.openElements.inTableScope(\"thead\")||e.openElements.inTableScope(\"tfoot\")?(e.openElements.popUntilTableBodyScopeMarker(),this.endTagTableRowGroup(e.currentStackItem().localName),e.insertionMode.processEndTag(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inTableBody.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag-in-table-body\",{name:t})},t.inTableBody.endTagOther=function(e){t.inTable.processEndTag(e)},t.inSelect=Object.create(t.base),t.inSelect.start_tag_handlers={html:\"startTagHtml\",option:\"startTagOption\",optgroup:\"startTagOptgroup\",select:\"startTagSelect\",input:\"startTagInput\",keygen:\"startTagInput\",textarea:\"startTagInput\",script:\"startTagScript\",\"-default\":\"startTagOther\"},t.inSelect.end_tag_handlers={option:\"endTagOption\",optgroup:\"endTagOptgroup\",select:\"endTagSelect\",caption:\"endTagTableElements\",table:\"endTagTableElements\",tbody:\"endTagTableElements\",tfoot:\"endTagTableElements\",thead:\"endTagTableElements\",tr:\"endTagTableElements\",td:\"endTagTableElements\",th:\"endTagTableElements\",\"-default\":\"endTagOther\"},t.inSelect.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\"});if(!n)return;e.insertText(n)},t.inSelect.startTagOption=function(t,n){e.currentStackItem().localName==\"option\"&&e.popElement(),e.insertElement(t,n)},t.inSelect.startTagOptgroup=function(t,n){e.currentStackItem().localName==\"option\"&&e.popElement(),e.currentStackItem().localName==\"optgroup\"&&e.popElement(),e.insertElement(t,n)},t.inSelect.endTagOption=function(t){if(e.currentStackItem().localName!==\"option\"){e.parseError(\"unexpected-end-tag-in-select\",{name:t});return}e.popElement()},t.inSelect.endTagOptgroup=function(t){e.currentStackItem().localName==\"option\"&&e.openElements.item(e.openElements.length-2).localName==\"optgroup\"&&e.popElement(),e.currentStackItem().localName==\"optgroup\"?e.popElement():e.parseError(\"unexpected-end-tag-in-select\",{name:\"optgroup\"})},t.inSelect.startTagSelect=function(t){e.parseError(\"unexpected-select-in-select\"),this.endTagSelect(\"select\")},t.inSelect.endTagSelect=function(t){e.openElements.inTableScope(\"select\")?(e.openElements.popUntilPopped(\"select\"),e.resetInsertionMode()):e.parseError(\"unexpected-end-tag\",{name:t})},t.inSelect.startTagInput=function(t,n){e.parseError(\"unexpected-input-in-select\"),e.openElements.inSelectScope(\"select\")&&(this.endTagSelect(\"select\"),e.insertionMode.processStartTag(t,n))},t.inSelect.startTagScript=function(e,n){t.inHead.processStartTag(e,n)},t.inSelect.endTagTableElements=function(t){e.parseError(\"unexpected-end-tag-in-select\",{name:t}),e.openElements.inTableScope(t)&&(this.endTagSelect(\"select\"),e.insertionMode.processEndTag(t))},t.inSelect.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-in-select\",{name:t})},t.inSelect.endTagOther=function(t){e.parseError(\"unexpected-end-tag-in-select\",{name:t})},t.inSelectInTable=Object.create(t.base),t.inSelectInTable.start_tag_handlers={caption:\"startTagTable\",table:\"startTagTable\",tbody:\"startTagTable\",tfoot:\"startTagTable\",thead:\"startTagTable\",tr:\"startTagTable\",td:\"startTagTable\",th:\"startTagTable\",\"-default\":\"startTagOther\"},t.inSelectInTable.end_tag_handlers={caption:\"endTagTable\",table:\"endTagTable\",tbody:\"endTagTable\",tfoot:\"endTagTable\",thead:\"endTagTable\",tr:\"endTagTable\",td:\"endTagTable\",th:\"endTagTable\",\"-default\":\"endTagOther\"},t.inSelectInTable.processCharacters=function(e){t.inSelect.processCharacters(e)},t.inSelectInTable.startTagTable=function(t,n){e.parseError(\"unexpected-table-element-start-tag-in-select-in-table\",{name:t}),this.endTagOther(\"select\"),e.insertionMode.processStartTag(t,n)},t.inSelectInTable.startTagOther=function(e,n,r){t.inSelect.processStartTag(e,n,r)},t.inSelectInTable.endTagTable=function(t){e.parseError(\"unexpected-table-element-end-tag-in-select-in-table\",{name:t}),e.openElements.inTableScope(t)&&(this.endTagOther(\"select\"),e.insertionMode.processEndTag(t))},t.inSelectInTable.endTagOther=function(e){t.inSelect.processEndTag(e)},t.inRow=Object.create(t.base),t.inRow.start_tag_handlers={html:\"startTagHtml\",td:\"startTagTableCell\",th:\"startTagTableCell\",caption:\"startTagTableOther\",col:\"startTagTableOther\",colgroup:\"startTagTableOther\",tbody:\"startTagTableOther\",tfoot:\"startTagTableOther\",thead:\"startTagTableOther\",tr:\"startTagTableOther\",\"-default\":\"startTagOther\"},t.inRow.end_tag_handlers={tr:\"endTagTr\",table:\"endTagTable\",tbody:\"endTagTableRowGroup\",tfoot:\"endTagTableRowGroup\",thead:\"endTagTableRowGroup\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",td:\"endTagIgnore\",th:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inRow.processCharacters=function(e){t.inTable.processCharacters(e)},t.inRow.startTagTableCell=function(t,n){e.openElements.popUntilTableRowScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inCell\"),e.activeFormattingElements.push(l)},t.inRow.startTagTableOther=function(t,n){var r=this.ignoreEndTagTr();this.endTagTr(\"tr\"),r||e.insertionMode.processStartTag(t,n)},t.inRow.startTagOther=function(e,n,r){t.inTable.processStartTag(e,n,r)},t.inRow.endTagTr=function(t){this.ignoreEndTagTr()?(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t})):(e.openElements.popUntilTableRowScopeMarker(),e.popElement(),e.setInsertionMode(\"inTableBody\"))},t.inRow.endTagTable=function(t){var n=this.ignoreEndTagTr();this.endTagTr(\"tr\"),n||e.insertionMode.processEndTag(t)},t.inRow.endTagTableRowGroup=function(t){e.openElements.inTableScope(t)?(this.endTagTr(\"tr\"),e.insertionMode.processEndTag(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inRow.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag-in-table-row\",{name:t})},t.inRow.endTagOther=function(e){t.inTable.processEndTag(e)},t.inRow.ignoreEndTagTr=function(){return!e.openElements.inTableScope(\"tr\")},t.afterAfterFrameset=Object.create(t.base),t.afterAfterFrameset.start_tag_handlers={html:\"startTagHtml\",noframes:\"startTagNoFrames\",\"-default\":\"startTagOther\"},t.afterAfterFrameset.processEOF=function(){},t.afterAfterFrameset.processComment=function(t){e.insertComment(t,e.document)},t.afterAfterFrameset.processCharacters=function(t){var n=t.takeRemaining(),r=\"\";for(var i=0;i<n.length;i++){var s=n[i];c(s)&&(r+=s)}r&&(e.reconstructActiveFormattingElements(),e.insertText(r)),r.length<n.length&&e.parseError(\"expected-eof-but-got-char\")},t.afterAfterFrameset.startTagNoFrames=function(e,n){t.inHead.processStartTag(e,n)},t.afterAfterFrameset.startTagOther=function(t,n,r){e.parseError(\"expected-eof-but-got-start-tag\",{name:t})},t.afterAfterFrameset.processEndTag=function(t,n){e.parseError(\"expected-eof-but-got-end-tag\",{name:t})},t.text=Object.create(t.base),t.text.start_tag_handlers={\"-default\":\"startTagOther\"},t.text.end_tag_handlers={script:\"endTagScript\",\"-default\":\"endTagOther\"},t.text.processCharacters=function(t){e.shouldSkipLeadingNewline&&(e.shouldSkipLeadingNewline=!1,t.skipAtMostOneLeadingNewline());var n=t.takeRemaining();if(!n)return;e.insertText(n)},t.text.processEOF=function(){e.parseError(\"expected-named-closing-tag-but-got-eof\",{name:e.currentStackItem().localName}),e.openElements.pop(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEOF()},t.text.startTagOther=function(e){throw\"Tried to process start tag \"+e+\" in RCDATA/RAWTEXT mode\"},t.text.endTagScript=function(t){var n=e.openElements.pop();r.ok(n.localName==\"script\"),e.setInsertionMode(e.originalInsertionMode)},t.text.endTagOther=function(t){e.openElements.pop(),e.setInsertionMode(e.originalInsertionMode)}}function y(e,t){return e.replace(new RegExp(\"{[0-9a-z-]+}\",\"gi\"),function(e){return t[e.slice(1,-1)]||e})}var r=e(\"assert\"),i=e(\"./messages.json\"),s=e(\"./constants\"),o=e(\"events\").EventEmitter,u=e(\"./Tokenizer\").Tokenizer,a=e(\"./ElementStack\").ElementStack,f=e(\"./StackItem\").StackItem,l={};m.prototype.skipAtMostOneLeadingNewline=function(){this.characters[this.current]===\"\\n\"&&this.current++},m.prototype.skipLeadingWhitespace=function(){while(c(this.characters[this.current]))if(++this.current==this.end)return},m.prototype.skipLeadingNonWhitespace=function(){while(!c(this.characters[this.current]))if(++this.current==this.end)return},m.prototype.takeRemaining=function(){return this.characters.substring(this.current)},m.prototype.takeLeadingWhitespace=function(){var e=this.current;return this.skipLeadingWhitespace(),e===this.current?\"\":this.characters.substring(e,this.current-e)},Object.defineProperty(m.prototype,\"length\",{get:function(){return this.end-this.current}}),g.prototype.setInsertionMode=function(e){this.insertionMode=this.insertionModes[e],this.insertionModeName=e},g.prototype.adoptionAgencyEndTag=function(e){function i(e){return e===r}var t=8,n=3,r,s=0;while(s++<t){r=this.elementInActiveFormattingElements(e);if(!r||this.openElements.contains(r)&&!this.openElements.inScope(r.localName))return this.parseError(\"adoption-agency-1.1\",{name:e}),!1;if(!this.openElements.contains(r))return this.parseError(\"adoption-agency-1.2\",{name:e}),this.removeElementFromActiveFormattingElements(r),!0;this.openElements.inScope(r.localName)||this.parseError(\"adoption-agency-4.4\",{name:e}),r!=this.currentStackItem()&&this.parseError(\"adoption-agency-1.3\",{name:e});var o=this.openElements.furthestBlockForFormattingElement(r.node);if(!o)return this.openElements.remove_openElements_until(i),this.removeElementFromActiveFormattingElements(r),!0;var u=this.openElements.elements.indexOf(r),a=this.openElements.item(u-1),l=this.activeFormattingElements.indexOf(r),c=o,h=o,p=this.openElements.elements.indexOf(c),d=0;while(d++<n){p-=1,c=this.openElements.item(p);if(this.activeFormattingElements.indexOf(c)<0){this.openElements.elements.splice(p,1);continue}if(c==r)break;h==o&&(l=this.activeFormattingElements.indexOf(c)+1);var v=this.createElement(c.namespaceURI,c.localName,c.attributes),m=new f(c.namespaceURI,c.localName,c.attributes,v);this.activeFormattingElements[this.activeFormattingElements.indexOf(c)]=m,this.openElements.elements[this.openElements.elements.indexOf(c)]=m,c=m,this.detachFromParent(h.node),this.attachNode(h.node,c.node),h=c}this.detachFromParent(h.node),a.isFosterParenting()?this.insertIntoFosterParent(h.node):this.attachNode(h.node,a.node);var v=this.createElement(\"http://www.w3.org/1999/xhtml\",r.localName,r.attributes),g=new f(r.namespaceURI,r.localName,r.attributes,v);this.reparentChildren(o.node,v),this.attachNode(v,o.node),this.removeElementFromActiveFormattingElements(r),this.activeFormattingElements.splice(Math.min(l,this.activeFormattingElements.length),0,g),this.openElements.remove(r),this.openElements.elements.splice(this.openElements.elements.indexOf(o)+1,0,g)}return!0},g.prototype.start=function(){throw\"Not mplemented\"},g.prototype.startTokenization=function(e){this.tokenizer=e,this.compatMode=\"no quirks\",this.originalInsertionMode=\"initial\",this.framesetOk=!0,this.openElements=new a,this.activeFormattingElements=[],this.start();if(this.context){switch(this.context){case\"title\":case\"textarea\":this.tokenizer.setState(u.RCDATA);break;case\"style\":case\"xmp\":case\"iframe\":case\"noembed\":case\"noframes\":this.tokenizer.setState(u.RAWTEXT);break;case\"script\":this.tokenizer.setState(u.SCRIPT_DATA);break;case\"noscript\":this.scriptingEnabled&&this.tokenizer.setState(u.RAWTEXT);break;case\"plaintext\":this.tokenizer.setState(u.PLAINTEXT)}this.insertHtmlElement(),this.resetInsertionMode()}else this.setInsertionMode(\"initial\")},g.prototype.processToken=function(e){this.selfClosingFlagAcknowledged=!1;var t=this.openElements.top||null,n;!t||!t.isForeign()||t.isMathMLTextIntegrationPoint()&&(e.type==\"StartTag\"&&!(e.name in{mglyph:0,malignmark:0})||e.type===\"Characters\")||t.namespaceURI==\"http://www.w3.org/1998/Math/MathML\"&&t.localName==\"annotation-xml\"&&e.type==\"StartTag\"&&e.name==\"svg\"||t.isHtmlIntegrationPoint()&&e.type in{StartTag:0,Characters:0}||e.type==\"EOF\"?n=this.insertionMode:n=this.insertionModes.inForeignContent;switch(e.type){case\"Characters\":var r=new m(e.data);n.processCharacters(r);break;case\"Comment\":n.processComment(e.data);break;case\"StartTag\":n.processStartTag(e.name,e.data,e.selfClosing);break;case\"EndTag\":n.processEndTag(e.name);break;case\"Doctype\":n.processDoctype(e.name,e.publicId,e.systemId,e.forceQuirks);break;case\"EOF\":n.processEOF()}},g.prototype.isCdataSectionAllowed=function(){return this.openElements.length>0&&this.currentStackItem().isForeign()},g.prototype.isSelfClosingFlagAcknowledged=function(){return this.selfClosingFlagAcknowledged},g.prototype.createElement=function(e,t,n){throw new Error(\"Not implemented\")},g.prototype.attachNode=function(e,t){throw new Error(\"Not implemented\")},g.prototype.attachNodeToFosterParent=function(e,t,n){throw new Error(\"Not implemented\")},g.prototype.detachFromParent=function(e){throw new Error(\"Not implemented\")},g.prototype.addAttributesToElement=function(e,t){throw new Error(\"Not implemented\")},g.prototype.insertHtmlElement=function(e){var t=this.createElement(\"http://www.w3.org/1999/xhtml\",\"html\",e);return this.attachNode(t,this.document),this.openElements.pushHtmlElement(new f(\"http://www.w3.org/1999/xhtml\",\"html\",e,t)),t},g.prototype.insertHeadElement=function(e){var t=this.createElement(\"http://www.w3.org/1999/xhtml\",\"head\",e);return this.head=new f(\"http://www.w3.org/1999/xhtml\",\"head\",e,t),this.attachNode(t,this.openElements.top.node),this.openElements.pushHeadElement(this.head),t},g.prototype.insertBodyElement=function(e){var t=this.createElement(\"http://www.w3.org/1999/xhtml\",\"body\",e);return this.attachNode(t,this.openElements.top.node),this.openElements.pushBodyElement(new f(\"http://www.w3.org/1999/xhtml\",\"body\",e,t)),t},g.prototype.insertIntoFosterParent=function(e){var t=this.openElements.findIndex(\"table\"),n=this.openElements.item(t).node;if(t===0)return this.attachNode(e,n);this.attachNodeToFosterParent(e,n,this.openElements.item(t-1).node)},g.prototype.insertElement=function(e,t,n,r){n||(n=\"http://www.w3.org/1999/xhtml\");var i=this.createElement(n,e,t);this.shouldFosterParent()?this.insertIntoFosterParent(i):this.attachNode(i,this.openElements.top.node),r||this.openElements.push(new f(n,e,t,i))},g.prototype.insertFormattingElement=function(e,t){this.insertElement(e,t,\"http://www.w3.org/1999/xhtml\"),this.appendElementToActiveFormattingElements(this.currentStackItem())},g.prototype.insertSelfClosingElement=function(e,t){this.selfClosingFlagAcknowledged=!0,this.insertElement(e,t,\"http://www.w3.org/1999/xhtml\",!0)},g.prototype.insertForeignElement=function(e,t,n,r){r&&(this.selfClosingFlagAcknowledged=!0),this.insertElement(e,t,n,r)},g.prototype.insertComment=function(e,t){throw new Error(\"Not implemented\")},g.prototype.insertDoctype=function(e,t,n){throw new Error(\"Not implemented\")},g.prototype.insertText=function(e){throw new Error(\"Not implemented\")},g.prototype.currentStackItem=function(){return this.openElements.top},g.prototype.popElement=function(){return this.openElements.pop()},g.prototype.shouldFosterParent=function(){return this.redirectAttachToFosterParent&&this.currentStackItem().isFosterParenting()},g.prototype.generateImpliedEndTags=function(e){var t=this.openElements.top.localName;[\"dd\",\"dt\",\"li\",\"option\",\"optgroup\",\"p\",\"rp\",\"rt\"].indexOf(t)!=-1&&t!=e&&(this.popElement(),this.generateImpliedEndTags(e))},g.prototype.reconstructActiveFormattingElements=function(){if(this.activeFormattingElements.length===0)return;var e=this.activeFormattingElements.length-1,t=this.activeFormattingElements[e];if(t==l||this.openElements.contains(t))return;while(t!=l&&!this.openElements.contains(t)){e-=1,t=this.activeFormattingElements[e];if(!t)break}for(;;){e+=1,t=this.activeFormattingElements[e],this.insertElement(t.localName,t.attributes);var n=this.currentStackItem();this.activeFormattingElements[e]=n;if(n==this.activeFormattingElements[this.activeFormattingElements.length-1])break}},g.prototype.ensureNoahsArkCondition=function(e){var t=3;if(this.activeFormattingElements.length<t)return;var n=[],r=e.attributes.length;for(var i=this.activeFormattingElements.length-1;i>=0;i--){var s=this.activeFormattingElements[i];if(s===l)break;if(e.localName!==s.localName||e.namespaceURI!==s.namespaceURI)continue;if(s.attributes.length!=r)continue;n.push(s)}if(n.length<t)return;var o=[],u=e.attributes;for(var i=0;i<u.length;i++){var a=u[i];for(var f=0;f<n.length;f++){var s=n[f],c=v(s,a.nodeName);c&&c.nodeValue===a.nodeValue&&o.push(s)}if(o.length<t)return;n=o,o=[]}for(var i=t-1;i<n.length;i++)this.removeElementFromActiveFormattingElements(n[i])},g.prototype.appendElementToActiveFormattingElements=function(e){this.ensureNoahsArkCondition(e),this.activeFormattingElements.push(e)},g.prototype.removeElementFromActiveFormattingElements=function(e){var t=this.activeFormattingElements.indexOf(e);t>=0&&this.activeFormattingElements.splice(t,1)},g.prototype.elementInActiveFormattingElements=function(e){var t=this.activeFormattingElements;for(var n=t.length-1;n>=0;n--){if(t[n]==l)break;if(t[n].localName==e)return t[n]}return!1},g.prototype.clearActiveFormattingElements=function(){while(this.activeFormattingElements.length!==0&&this.activeFormattingElements.pop()!=l);},g.prototype.reparentChildren=function(e,t){throw new Error(\"Not implemented\")},g.prototype.setFragmentContext=function(e){this.context=e},g.prototype.parseError=function(e,t){if(!this.errorHandler)return;var n=y(i[e],t);this.errorHandler.error(n,this.tokenizer._inputStream.location(),e)},g.prototype.resetInsertionMode=function(){var e=!1,t=null;for(var n=this.openElements.length-1;n>=0;n--){t=this.openElements.item(n),n===0&&(r.ok(this.context),e=!0,t=new f(\"http://www.w3.org/1999/xhtml\",this.context,[],null));if(t.namespaceURI===\"http://www.w3.org/1999/xhtml\"){if(t.localName===\"select\")return this.setInsertionMode(\"inSelect\");if(t.localName===\"td\"||t.localName===\"th\")return this.setInsertionMode(\"inCell\");if(t.localName===\"tr\")return this.setInsertionMode(\"inRow\");if(t.localName===\"tbody\"||t.localName===\"thead\"||t.localName===\"tfoot\")return this.setInsertionMode(\"inTableBody\");if(t.localName===\"caption\")return this.setInsertionMode(\"inCaption\");if(t.localName===\"colgroup\")return this.setInsertionMode(\"inColumnGroup\");if(t.localName===\"table\")return this.setInsertionMode(\"inTable\");if(t.localName===\"head\"&&!e)return this.setInsertionMode(\"inHead\");if(t.localName===\"body\")return this.setInsertionMode(\"inBody\");if(t.localName===\"frameset\")return this.setInsertionMode(\"inFrameset\");if(t.localName===\"html\")return this.openElements.headElement?this.setInsertionMode(\"afterHead\"):this.setInsertionMode(\"beforeHead\")}if(e)return this.setInsertionMode(\"inBody\")}},g.prototype.processGenericRCDATAStartTag=function(e,t){this.insertElement(e,t),this.tokenizer.setState(u.RCDATA),this.originalInsertionMode=this.insertionModeName,this.setInsertionMode(\"text\")},g.prototype.processGenericRawTextStartTag=function(e,t){this.insertElement(e,t),this.tokenizer.setState(u.RAWTEXT),this.originalInsertionMode=this.insertionModeName,this.setInsertionMode(\"text\")},g.prototype.adjustMathMLAttributes=function(e){return e.forEach(function(e){e.namespaceURI=\"http://www.w3.org/1998/Math/MathML\",s.MATHMLAttributeMap[e.nodeName]&&(e.nodeName=s.MATHMLAttributeMap[e.nodeName])}),e},g.prototype.adjustSVGTagNameCase=function(e){return s.SVGTagMap[e]||e},g.prototype.adjustSVGAttributes=function(e){return e.forEach(function(e){e.namespaceURI=\"http://www.w3.org/2000/svg\",s.SVGAttributeMap[e.nodeName]&&(e.nodeName=s.SVGAttributeMap[e.nodeName])}),e},g.prototype.adjustForeignAttributes=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.ForeignAttributeMap[n.nodeName];r&&(n.nodeName=r.localName,n.prefix=r.prefix,n.namespaceURI=r.namespaceURI)}return e},n.TreeBuilder=g},{\"./ElementStack\":1,\"./StackItem\":4,\"./Tokenizer\":5,\"./constants\":7,\"./messages.json\":8,assert:13,events:16}],7:[function(e,t,n){n.SVGTagMap={altglyph:\"altGlyph\",altglyphdef:\"altGlyphDef\",altglyphitem:\"altGlyphItem\",animatecolor:\"animateColor\",animatemotion:\"animateMotion\",animatetransform:\"animateTransform\",clippath:\"clipPath\",feblend:\"feBlend\",fecolormatrix:\"feColorMatrix\",fecomponenttransfer:\"feComponentTransfer\",fecomposite:\"feComposite\",feconvolvematrix:\"feConvolveMatrix\",fediffuselighting:\"feDiffuseLighting\",fedisplacementmap:\"feDisplacementMap\",fedistantlight:\"feDistantLight\",feflood:\"feFlood\",fefunca:\"feFuncA\",fefuncb:\"feFuncB\",fefuncg:\"feFuncG\",fefuncr:\"feFuncR\",fegaussianblur:\"feGaussianBlur\",feimage:\"feImage\",femerge:\"feMerge\",femergenode:\"feMergeNode\",femorphology:\"feMorphology\",feoffset:\"feOffset\",fepointlight:\"fePointLight\",fespecularlighting:\"feSpecularLighting\",fespotlight:\"feSpotLight\",fetile:\"feTile\",feturbulence:\"feTurbulence\",foreignobject:\"foreignObject\",glyphref:\"glyphRef\",lineargradient:\"linearGradient\",radialgradient:\"radialGradient\",textpath:\"textPath\"},n.MATHMLAttributeMap={definitionurl:\"definitionURL\"},n.SVGAttributeMap={attributename:\"attributeName\",attributetype:\"attributeType\",basefrequency:\"baseFrequency\",baseprofile:\"baseProfile\",calcmode:\"calcMode\",clippathunits:\"clipPathUnits\",contentscripttype:\"contentScriptType\",contentstyletype:\"contentStyleType\",diffuseconstant:\"diffuseConstant\",edgemode:\"edgeMode\",externalresourcesrequired:\"externalResourcesRequired\",filterres:\"filterRes\",filterunits:\"filterUnits\",glyphref:\"glyphRef\",gradienttransform:\"gradientTransform\",gradientunits:\"gradientUnits\",kernelmatrix:\"kernelMatrix\",kernelunitlength:\"kernelUnitLength\",keypoints:\"keyPoints\",keysplines:\"keySplines\",keytimes:\"keyTimes\",lengthadjust:\"lengthAdjust\",limitingconeangle:\"limitingConeAngle\",markerheight:\"markerHeight\",markerunits:\"markerUnits\",markerwidth:\"markerWidth\",maskcontentunits:\"maskContentUnits\",maskunits:\"maskUnits\",numoctaves:\"numOctaves\",pathlength:\"pathLength\",patterncontentunits:\"patternContentUnits\",patterntransform:\"patternTransform\",patternunits:\"patternUnits\",pointsatx:\"pointsAtX\",pointsaty:\"pointsAtY\",pointsatz:\"pointsAtZ\",preservealpha:\"preserveAlpha\",preserveaspectratio:\"preserveAspectRatio\",primitiveunits:\"primitiveUnits\",refx:\"refX\",refy:\"refY\",repeatcount:\"repeatCount\",repeatdur:\"repeatDur\",requiredextensions:\"requiredExtensions\",requiredfeatures:\"requiredFeatures\",specularconstant:\"specularConstant\",specularexponent:\"specularExponent\",spreadmethod:\"spreadMethod\",startoffset:\"startOffset\",stddeviation:\"stdDeviation\",stitchtiles:\"stitchTiles\",surfacescale:\"surfaceScale\",systemlanguage:\"systemLanguage\",tablevalues:\"tableValues\",targetx:\"targetX\",targety:\"targetY\",textlength:\"textLength\",viewbox:\"viewBox\",viewtarget:\"viewTarget\",xchannelselector:\"xChannelSelector\",ychannelselector:\"yChannelSelector\",zoomandpan:\"zoomAndPan\"},n.ForeignAttributeMap={\"xlink:actuate\":{prefix:\"xlink\",localName:\"actuate\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:arcrole\":{prefix:\"xlink\",localName:\"arcrole\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:href\":{prefix:\"xlink\",localName:\"href\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:role\":{prefix:\"xlink\",localName:\"role\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:show\":{prefix:\"xlink\",localName:\"show\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:title\":{prefix:\"xlink\",localName:\"title\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:type\":{prefix:\"xlink\",localName:\"title\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xml:base\":{prefix:\"xml\",localName:\"base\",namespaceURI:\"http://www.w3.org/XML/1998/namespace\"},\"xml:lang\":{prefix:\"xml\",localName:\"lang\",namespaceURI:\"http://www.w3.org/XML/1998/namespace\"},\"xml:space\":{prefix:\"xml\",localName:\"space\",namespaceURI:\"http://www.w3.org/XML/1998/namespace\"},xmlns:{prefix:null,localName:\"xmlns\",namespaceURI:\"http://www.w3.org/2000/xmlns/\"},\"xmlns:xlink\":{prefix:\"xmlns\",localName:\"xlink\",namespaceURI:\"http://www.w3.org/2000/xmlns/\"}}},{}],8:[function(e,t,n){t.exports={\"null-character\":\"Null character in input stream, replaced with U+FFFD.\",\"invalid-codepoint\":\"Invalid codepoint in stream\",\"incorrectly-placed-solidus\":\"Solidus (/) incorrectly placed in tag.\",\"incorrect-cr-newline-entity\":\"Incorrect CR newline entity, replaced with LF.\",\"illegal-windows-1252-entity\":\"Entity used with illegal number (windows-1252 reference).\",\"cant-convert-numeric-entity\":\"Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).\",\"invalid-numeric-entity-replaced\":\"Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.\",\"numeric-entity-without-semicolon\":\"Numeric entity didn't end with ';'.\",\"expected-numeric-entity-but-got-eof\":\"Numeric entity expected. Got end of file instead.\",\"expected-numeric-entity\":\"Numeric entity expected but none found.\",\"named-entity-without-semicolon\":\"Named entity didn't end with ';'.\",\"expected-named-entity\":\"Named entity expected. Got none.\",\"attributes-in-end-tag\":\"End tag contains unexpected attributes.\",\"self-closing-flag-on-end-tag\":\"End tag contains unexpected self-closing flag.\",\"bare-less-than-sign-at-eof\":\"End of file after <.\",\"expected-tag-name-but-got-right-bracket\":\"Expected tag name. Got '>' instead.\",\"expected-tag-name-but-got-question-mark\":\"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)\",\"expected-tag-name\":\"Expected tag name. Got something else instead.\",\"expected-closing-tag-but-got-right-bracket\":\"Expected closing tag. Got '>' instead. Ignoring '</>'.\",\"expected-closing-tag-but-got-eof\":\"Expected closing tag. Unexpected end of file.\",\"expected-closing-tag-but-got-char\":\"Expected closing tag. Unexpected character '{data}' found.\",\"eof-in-tag-name\":\"Unexpected end of file in the tag name.\",\"expected-attribute-name-but-got-eof\":\"Unexpected end of file. Expected attribute name instead.\",\"eof-in-attribute-name\":\"Unexpected end of file in attribute name.\",\"invalid-character-in-attribute-name\":\"Invalid character in attribute name.\",\"duplicate-attribute\":\"Dropped duplicate attribute '{name}' on tag.\",\"expected-end-of-tag-but-got-eof\":\"Unexpected end of file. Expected = or end of tag.\",\"expected-attribute-value-but-got-eof\":\"Unexpected end of file. Expected attribute value.\",\"expected-attribute-value-but-got-right-bracket\":\"Expected attribute value. Got '>' instead.\",\"unexpected-character-in-unquoted-attribute-value\":\"Unexpected character in unquoted attribute\",\"invalid-character-after-attribute-name\":\"Unexpected character after attribute name.\",\"unexpected-character-after-attribute-value\":\"Unexpected character after attribute value.\",\"eof-in-attribute-value-double-quote\":'Unexpected end of file in attribute value (\").',\"eof-in-attribute-value-single-quote\":\"Unexpected end of file in attribute value (').\",\"eof-in-attribute-value-no-quotes\":\"Unexpected end of file in attribute value.\",\"eof-after-attribute-value\":\"Unexpected end of file after attribute value.\",\"unexpected-eof-after-solidus-in-tag\":\"Unexpected end of file in tag. Expected >.\",\"unexpected-character-after-solidus-in-tag\":\"Unexpected character after / in tag. Expected >.\",\"expected-dashes-or-doctype\":\"Expected '--' or 'DOCTYPE'. Not found.\",\"unexpected-bang-after-double-dash-in-comment\":\"Unexpected ! after -- in comment.\",\"incorrect-comment\":\"Incorrect comment.\",\"eof-in-comment\":\"Unexpected end of file in comment.\",\"eof-in-comment-end-dash\":\"Unexpected end of file in comment (-).\",\"unexpected-dash-after-double-dash-in-comment\":\"Unexpected '-' after '--' found in comment.\",\"eof-in-comment-double-dash\":\"Unexpected end of file in comment (--).\",\"eof-in-comment-end-bang-state\":\"Unexpected end of file in comment.\",\"unexpected-char-in-comment\":\"Unexpected character in comment found.\",\"need-space-after-doctype\":\"No space after literal string 'DOCTYPE'.\",\"expected-doctype-name-but-got-right-bracket\":\"Unexpected > character. Expected DOCTYPE name.\",\"expected-doctype-name-but-got-eof\":\"Unexpected end of file. Expected DOCTYPE name.\",\"eof-in-doctype-name\":\"Unexpected end of file in DOCTYPE name.\",\"eof-in-doctype\":\"Unexpected end of file in DOCTYPE.\",\"expected-space-or-right-bracket-in-doctype\":\"Expected space or '>'. Got '{data}'.\",\"unexpected-end-of-doctype\":\"Unexpected end of DOCTYPE.\",\"unexpected-char-in-doctype\":\"Unexpected character in DOCTYPE.\",\"eof-in-bogus-doctype\":\"Unexpected end of file in bogus doctype.\",\"eof-in-innerhtml\":\"Unexpected EOF in inner html mode.\",\"unexpected-doctype\":\"Unexpected DOCTYPE. Ignored.\",\"non-html-root\":\"html needs to be the first start tag.\",\"expected-doctype-but-got-eof\":\"Unexpected End of file. Expected DOCTYPE.\",\"unknown-doctype\":\"Erroneous DOCTYPE. Expected <!DOCTYPE html>.\",\"quirky-doctype\":\"Quirky doctype. Expected <!DOCTYPE html>.\",\"almost-standards-doctype\":\"Almost standards mode doctype. Expected <!DOCTYPE html>.\",\"obsolete-doctype\":\"Obsolete doctype. Expected <!DOCTYPE html>.\",\"expected-doctype-but-got-chars\":\"Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\"expected-doctype-but-got-start-tag\":\"Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\"expected-doctype-but-got-end-tag\":\"End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\"end-tag-after-implied-root\":\"Unexpected end tag ({name}) after the (implied) root element.\",\"expected-named-closing-tag-but-got-eof\":\"Unexpected end of file. Expected end tag ({name}).\",\"two-heads-are-not-better-than-one\":\"Unexpected start tag head in existing head. Ignored.\",\"unexpected-end-tag\":\"Unexpected end tag ({name}). Ignored.\",\"unexpected-implied-end-tag\":\"End tag {name} implied, but there were open elements.\",\"unexpected-start-tag-out-of-my-head\":\"Unexpected start tag ({name}) that can be in head. Moved.\",\"unexpected-start-tag\":\"Unexpected start tag ({name}).\",\"missing-end-tag\":\"Missing end tag ({name}).\",\"missing-end-tags\":\"Missing end tags ({name}).\",\"unexpected-start-tag-implies-end-tag\":\"Unexpected start tag ({startName}) implies end tag ({endName}).\",\"unexpected-start-tag-treated-as\":\"Unexpected start tag ({originalName}). Treated as {newName}.\",\"deprecated-tag\":\"Unexpected start tag {name}. Don't use it!\",\"unexpected-start-tag-ignored\":\"Unexpected start tag {name}. Ignored.\",\"expected-one-end-tag-but-got-another\":\"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).\",\"end-tag-too-early\":\"End tag ({name}) seen too early. Expected other end tag.\",\"end-tag-too-early-named\":\"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.\",\"end-tag-too-early-ignored\":\"End tag ({name}) seen too early. Ignored.\",\"adoption-agency-1.1\":\"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.\",\"adoption-agency-1.2\":\"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.\",\"adoption-agency-1.3\":\"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.\",\"adoption-agency-4.4\":\"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.\",\"unexpected-end-tag-treated-as\":\"Unexpected end tag ({originalName}). Treated as {newName}.\",\"no-end-tag\":\"This element ({name}) has no end tag.\",\"unexpected-implied-end-tag-in-table\":\"Unexpected implied end tag ({name}) in the table phase.\",\"unexpected-implied-end-tag-in-table-body\":\"Unexpected implied end tag ({name}) in the table body phase.\",\"unexpected-char-implies-table-voodoo\":\"Unexpected non-space characters in table context caused voodoo mode.\",\"unexpected-hidden-input-in-table\":\"Unexpected input with type hidden in table context.\",\"unexpected-form-in-table\":\"Unexpected form in table context.\",\"unexpected-start-tag-implies-table-voodoo\":\"Unexpected start tag ({name}) in table context caused voodoo mode.\",\"unexpected-end-tag-implies-table-voodoo\":\"Unexpected end tag ({name}) in table context caused voodoo mode.\",\"unexpected-cell-in-table-body\":\"Unexpected table cell start tag ({name}) in the table body phase.\",\"unexpected-cell-end-tag\":\"Got table cell end tag ({name}) while required end tags are missing.\",\"unexpected-end-tag-in-table-body\":\"Unexpected end tag ({name}) in the table body phase. Ignored.\",\"unexpected-implied-end-tag-in-table-row\":\"Unexpected implied end tag ({name}) in the table row phase.\",\"unexpected-end-tag-in-table-row\":\"Unexpected end tag ({name}) in the table row phase. Ignored.\",\"unexpected-select-in-select\":\"Unexpected select start tag in the select phase treated as select end tag.\",\"unexpected-input-in-select\":\"Unexpected input start tag in the select phase.\",\"unexpected-start-tag-in-select\":\"Unexpected start tag token ({name}) in the select phase. Ignored.\",\"unexpected-end-tag-in-select\":\"Unexpected end tag ({name}) in the select phase. Ignored.\",\"unexpected-table-element-start-tag-in-select-in-table\":\"Unexpected table element start tag ({name}) in the select in table phase.\",\"unexpected-table-element-end-tag-in-select-in-table\":\"Unexpected table element end tag ({name}) in the select in table phase.\",\"unexpected-char-after-body\":\"Unexpected non-space characters in the after body phase.\",\"unexpected-start-tag-after-body\":\"Unexpected start tag token ({name}) in the after body phase.\",\"unexpected-end-tag-after-body\":\"Unexpected end tag token ({name}) in the after body phase.\",\"unexpected-char-in-frameset\":\"Unepxected characters in the frameset phase. Characters ignored.\",\"unexpected-start-tag-in-frameset\":\"Unexpected start tag token ({name}) in the frameset phase. Ignored.\",\"unexpected-frameset-in-frameset-innerhtml\":\"Unexpected end tag token (frameset in the frameset phase (innerHTML).\",\"unexpected-end-tag-in-frameset\":\"Unexpected end tag token ({name}) in the frameset phase. Ignored.\",\"unexpected-char-after-frameset\":\"Unexpected non-space characters in the after frameset phase. Ignored.\",\"unexpected-start-tag-after-frameset\":\"Unexpected start tag ({name}) in the after frameset phase. Ignored.\",\"unexpected-end-tag-after-frameset\":\"Unexpected end tag ({name}) in the after frameset phase. Ignored.\",\"expected-eof-but-got-char\":\"Unexpected non-space characters. Expected end of file.\",\"expected-eof-but-got-start-tag\":\"Unexpected start tag ({name}). Expected end of file.\",\"expected-eof-but-got-end-tag\":\"Unexpected end tag ({name}). Expected end of file.\",\"unexpected-end-table-in-caption\":\"Unexpected end table tag in caption. Generates implied end caption.\",\"end-html-in-innerhtml\":\"Unexpected html end tag in inner html mode.\",\"eof-in-table\":\"Unexpected end of file. Expected table content.\",\"eof-in-script\":\"Unexpected end of file. Expected script content.\",\"non-void-element-with-trailing-solidus\":\"Trailing solidus not allowed on element {name}.\",\"unexpected-html-element-in-foreign-content\":'HTML start tag \"{name}\" in a foreign namespace context.',\"unexpected-start-tag-in-table\":\"Unexpected {name}. Expected table content.\"}},{}],9:[function(e,t,n){function o(){this.contentHandler=null,this._errorHandler=null,this._treeBuilder=new r,this._tokenizer=new i(this._treeBuilder),this._scriptingEnabled=!1}var r=e(\"./SAXTreeBuilder\").SAXTreeBuilder,i=e(\"../Tokenizer\").Tokenizer,s=e(\"./TreeParser\").TreeParser;o.prototype.parse=function(e){this._tokenizer.tokenize(e);var t=this._treeBuilder.document;t&&(new s(this.contentHandler)).parse(t)},o.prototype.parseFragment=function(e,t){this._treeBuilder.setFragmentContext(t),this._tokenizer.tokenize(e);var n=this._treeBuilder.getFragment();n&&(new s(this.contentHandler)).parse(n)},Object.defineProperty(o.prototype,\"scriptingEnabled\",{get:function(){return this._scriptingEnabled},set:function(e){this._scriptingEnabled=e,this._treeBuilder.scriptingEnabled=e}}),Object.defineProperty(o.prototype,\"errorHandler\",{get:function(){return this._errorHandler},set:function(e){this._errorHandler=e,this._treeBuilder.errorHandler=e}}),n.SAXParser=o},{\"../Tokenizer\":5,\"./SAXTreeBuilder\":10,\"./TreeParser\":11}],10:[function(e,t,n){function s(){i.call(this)}function o(e,t){for(var n=0;n<e.attributes.length;n++){var r=e.attributes[n];if(r.nodeName===t)return r.nodeValue}}function a(e){e?(this.columnNumber=e.columnNumber,this.lineNumber=e.lineNumber):(this.columnNumber=-1,this.lineNumber=-1),this.parentNode=null,this.nextSibling=null,this.firstChild=null}function f(e){a.call(this,e),this.lastChild=null,this._endLocator=null}function l(e){f.call(this,e),this.nodeType=u.DOCUMENT}function c(){f.call(this,new Locator),this.nodeType=u.DOCUMENT_FRAGMENT}function h(e,t,n,r,i,s){f.call(this,e),this.uri=t,this.localName=n,this.qName=r,this.attributes=i,this.prefixMappings=s,this.nodeType=u.ELEMENT}function p(e,t){a.call(this,e),this.data=t,this.nodeType=u.CHARACTERS}function d(e,t){a.call(this,e),this.data=t,this.nodeType=u.IGNORABLE_WHITESPACE}function v(e,t){a.call(this,e),this.data=t,this.nodeType=u.COMMENT}function m(e){f.call(this,e),this.nodeType=u.CDATA}function g(e){f.call(this),this.name=e,this.nodeType=u.ENTITY}function y(e){a.call(this),this.name=e,this.nodeType=u.SKIPPED_ENTITY}function b(e,t){a.call(this),this.target=e,this.data=t}function w(e,t,n){f.call(this),this.name=e,this.publicIdentifier=t,this.systemIdentifier=n,this.nodeType=u.DTD}var r=e(\"util\"),i=e(\"../TreeBuilder\").TreeBuilder;r.inherits(s,i),s.prototype.start=function(e){this.document=new l(this.tokenizer)},s.prototype.end=function(){this.document.endLocator=this.tokenizer},s.prototype.insertDoctype=function(e,t,n){var r=new w(this.tokenizer,e,t,n);r.endLocator=this.tokenizer,this.document.appendChild(r)},s.prototype.createElement=function(e,t,n){var r=new h(this.tokenizer,e,t,t,n||[]);return r},s.prototype.insertComment=function(e,t){t||(t=this.currentStackItem());var n=new v(this.tokenizer,e);t.appendChild(n)},s.prototype.appendCharacters=function(e,t){var n=new p(this.tokenizer,t);e.appendChild(n)},s.prototype.insertText=function(e){if(this.redirectAttachToFosterParent&&this.openElements.top.isFosterParenting()){var t=this.openElements.findIndex(\"table\"),n=this.openElements.item(t),r=n.node;if(t===0)return this.appendCharacters(r,e);var i=new p(this.tokenizer,e),s=r.parentNode;if(s){s.insertBetween(i,r.previousSibling,r);return}var o=this.openElements.item(t-1).node;o.appendChild(i);return}this.appendCharacters(this.currentStackItem().node,e)},s.prototype.attachNode=function(e,t){t.appendChild(e)},s.prototype.attachNodeToFosterParent=function(e,t,n){var r=t.parentNode;r?r.insertBetween(e,t.previousSibling,t):n.appendChild(e)},s.prototype.detachFromParent=function(e){e.detach()},s.prototype.reparentChildren=function(e,t){t.appendChildren(e.firstChild)},s.prototype.getFragment=function(){var e=new c;return this.reparentChildren(this.openElements.rootNode,e),e},s.prototype.addAttributesToElement=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];o(e,r.nodeName)||e.attributes.push(r)}};var u={CDATA:1,CHARACTERS:2,COMMENT:3,DOCUMENT:4,DOCUMENT_FRAGMENT:5,DTD:6,ELEMENT:7,ENTITY:8,IGNORABLE_WHITESPACE:9,PROCESSING_INSTRUCTION:10,SKIPPED_ENTITY:11};a.prototype.visit=function(e){throw new Error(\"Not Implemented\")},a.prototype.revisit=function(e){return},a.prototype.detach=function(){this.parentNode!==null&&(this.parentNode.removeChild(this),this.parentNode=null)},Object.defineProperty(a.prototype,\"previousSibling\",{get:function(){var e=null,t=this.parentNode.firstChild;for(;;){if(this==t)return e;e=t,t=t.nextSibling}}}),f.prototype=Object.create(a.prototype),f.prototype.insertBefore=function(e,t){if(!t)return this.appendChild(e);e.detach(),e.parentNode=this;if(this.firstChild==t)e.nextSibling=t,this.firstChild=e;else{var n=this.firstChild,r=this.firstChild.nextSibling;while(r!=t)n=r,r=r.nextSibling;n.nextSibling=e,e.nextSibling=r}return e},f.prototype.insertBetween=function(e,t,n){return n?(e.detach(),e.parentNode=this,e.nextSibling=n,t?t.nextSibling=e:firstChild=e,e):this.appendChild(e)},f.prototype.appendChild=function(e){return e.detach(),e.parentNode=this,this.firstChild?this.lastChild.nextSibling=e:this.firstChild=e,this.lastChild=e,e},f.prototype.appendChildren=function(e){var t=e.firstChild;if(!t)return;var n=e;this.firstChild?this.lastChild.nextSibling=t:this.firstChild=t,this.lastChild=n.lastChild;do t.parentNode=this;while(t=t.nextSibling);n.firstChild=null,n.lastChild=null},f.prototype.removeChild=function(e){if(this.firstChild==e)this.firstChild=e.nextSibling,this.lastChild==e&&(this.lastChild=null);else{var t=this.firstChild,n=this.firstChild.nextSibling;while(n!=e)t=n,n=n.nextSibling;t.nextSibling=e.nextSibling,this.lastChild==e&&(this.lastChild=t)}return e.parentNode=null,e},Object.defineProperty(f.prototype,\"endLocator\",{get:function(){return this._endLocator},set:function(e){this._endLocator={lineNumber:e.lineNumber,columnNumber:e.columnNumber}}}),l.prototype=Object.create(f.prototype),l.prototype.visit=function(e){e.startDocument(this)},l.prototype.revisit=function(e){e.endDocument(this.endLocator)},c.prototype=Object.create(f.prototype),c.prototype.visit=function(e){},h.prototype=Object.create(f.prototype),h.prototype.visit=function(e){if(this.prefixMappings)for(var t in prefixMappings){var n=prefixMappings[t];e.startPrefixMapping(n.getPrefix(),n.getUri(),this)}e.startElement(this.uri,this.localName,this.qName,this.attributes,this)},h.prototype.revisit=function(e){e.endElement(this.uri,this.localName,this.qName,this.endLocator);if(this.prefixMappings)for(var t in prefixMappings){var n=prefixMappings[t];e.endPrefixMapping(n.getPrefix(),this.endLocator)}},p.prototype=Object.create(a.prototype),p.prototype.visit=function(e){e.characters(this.data,0,this.data.length,this)},d.prototype=Object.create(a.prototype),d.prototype.visit=function(e){e.ignorableWhitespace(this.data,0,this.data.length,this)},v.prototype=Object.create(a.prototype),v.prototype.visit=function(e){e.comment(this.data,0,this.data.length,this)},m.prototype=Object.create(f.prototype),m.prototype.visit=function(e){e.startCDATA(this)},m.prototype.revisit=function(e){e.endCDATA(this.endLocator)},g.prototype=Object.create(f.prototype),g.prototype.visit=function(e){e.startEntity(this.name,this)},g.prototype.revisit=function(e){e.endEntity(this.name)},y.prototype=Object.create(a.prototype),y.prototype.visit=function(e){e.skippedEntity(this.name,this)},b.prototype=Object.create(a.prototype),b.prototype.visit=function(e){e.processingInstruction(this.target,this.data,this)},b.prototype.getNodeType=function(){return u.PROCESSING_INSTRUCTION},w.prototype=Object.create(f.prototype),w.prototype.visit=function(e){e.startDTD(this.name,this.publicIdentifier,this.systemIdentifier,this)},w.prototype.revisit=function(e){e.endDTD()},n.SAXTreeBuilder=s},{\"../TreeBuilder\":6,util:20}],11:[function(e,t,n){function r(e,t){this.contentHandler,this.lexicalHandler,this.locatorDelegate;if(!e)throw new IllegalArgumentException(\"contentHandler was null.\");this.contentHandler=e,t?this.lexicalHandler=t:this.lexicalHandler=new i}function i(){}r.prototype.parse=function(e){this.contentHandler.documentLocator=this;var t=e,n;for(;;){t.visit(this);if(n=t.firstChild){t=n;continue}for(;;){t.revisit(this);if(t==e)return;if(n=t.nextSibling){t=n;break}t=t.parentNode}}},r.prototype.characters=function(e,t,n,r){this.locatorDelegate=r,this.contentHandler.characters(e,t,n)},r.prototype.endDocument=function(e){this.locatorDelegate=e,this.contentHandler.endDocument()},r.prototype.endElement=function(e,t,n,r){this.locatorDelegate=r,this.contentHandler.endElement(e,t,n)},r.prototype.endPrefixMapping=function(e,t){this.locatorDelegate=t,this.contentHandler.endPrefixMapping(e)},r.prototype.ignorableWhitespace=function(e,t,n,r){this.locatorDelegate=r,this.contentHandler.ignorableWhitespace(e,t,n)},r.prototype.processingInstruction=function(e,t,n){this.locatorDelegate=n,this.contentHandler.processingInstruction(e,t)},r.prototype.skippedEntity=function(e,t){this.locatorDelegate=t,this.contentHandler.skippedEntity(e)},r.prototype.startDocument=function(e){this.locatorDelegate=e,this.contentHandler.startDocument()},r.prototype.startElement=function(e,t,n,r,i){this.locatorDelegate=i,this.contentHandler.startElement(e,t,n,r)},r.prototype.startPrefixMapping=function(e,t,n){this.locatorDelegate=n,this.contentHandler.startPrefixMapping(e,t)},r.prototype.comment=function(e,t,n,r){this.locatorDelegate=r,this.lexicalHandler.comment(e,t,n)},r.prototype.endCDATA=function(e){this.locatorDelegate=e,this.lexicalHandler.endCDATA()},r.prototype.endDTD=function(e){this.locatorDelegate=e,this.lexicalHandler.endDTD()},r.prototype.endEntity=function(e,t){this.locatorDelegate=t,this.lexicalHandler.endEntity(e)},r.prototype.startCDATA=function(e){this.locatorDelegate=e,this.lexicalHandler.startCDATA()},r.prototype.startDTD=function(e,t,n,r){this.locatorDelegate=r,this.lexicalHandler.startDTD(e,t,n)},r.prototype.startEntity=function(e,t){this.locatorDelegate=t,this.lexicalHandler.startEntity(e)},Object.defineProperty(r.prototype,\"columnNumber\",{get:function(){return this.locatorDelegate?this.locatorDelegate.columnNumber:-1}}),Object.defineProperty(r.prototype,\"lineNumber\",{get:function(){return this.locatorDelegate?this.locatorDelegate.lineNumber:-1}}),i.prototype.comment=function(){},i.prototype.endCDATA=function(){},i.prototype.endDTD=function(){},i.prototype.endEntity=function(){},i.prototype.startCDATA=function(){},i.prototype.startDTD=function(){},i.prototype.startEntity=function(){},n.TreeParser=r},{}],12:[function(e,t,n){t.exports={\"Aacute;\":\"\\u00c1\",Aacute:\"\\u00c1\",\"aacute;\":\"\\u00e1\",aacute:\"\\u00e1\",\"Abreve;\":\"\\u0102\",\"abreve;\":\"\\u0103\",\"ac;\":\"\\u223e\",\"acd;\":\"\\u223f\",\"acE;\":\"\\u223e\\u0333\",\"Acirc;\":\"\\u00c2\",Acirc:\"\\u00c2\",\"acirc;\":\"\\u00e2\",acirc:\"\\u00e2\",\"acute;\":\"\\u00b4\",acute:\"\\u00b4\",\"Acy;\":\"\\u0410\",\"acy;\":\"\\u0430\",\"AElig;\":\"\\u00c6\",AElig:\"\\u00c6\",\"aelig;\":\"\\u00e6\",aelig:\"\\u00e6\",\"af;\":\"\\u2061\",\"Afr;\":\"\\ud835\\udd04\",\"afr;\":\"\\ud835\\udd1e\",\"Agrave;\":\"\\u00c0\",Agrave:\"\\u00c0\",\"agrave;\":\"\\u00e0\",agrave:\"\\u00e0\",\"alefsym;\":\"\\u2135\",\"aleph;\":\"\\u2135\",\"Alpha;\":\"\\u0391\",\"alpha;\":\"\\u03b1\",\"Amacr;\":\"\\u0100\",\"amacr;\":\"\\u0101\",\"amalg;\":\"\\u2a3f\",\"amp;\":\"&\",amp:\"&\",\"AMP;\":\"&\",AMP:\"&\",\"andand;\":\"\\u2a55\",\"And;\":\"\\u2a53\",\"and;\":\"\\u2227\",\"andd;\":\"\\u2a5c\",\"andslope;\":\"\\u2a58\",\"andv;\":\"\\u2a5a\",\"ang;\":\"\\u2220\",\"ange;\":\"\\u29a4\",\"angle;\":\"\\u2220\",\"angmsdaa;\":\"\\u29a8\",\"angmsdab;\":\"\\u29a9\",\"angmsdac;\":\"\\u29aa\",\"angmsdad;\":\"\\u29ab\",\"angmsdae;\":\"\\u29ac\",\"angmsdaf;\":\"\\u29ad\",\"angmsdag;\":\"\\u29ae\",\"angmsdah;\":\"\\u29af\",\"angmsd;\":\"\\u2221\",\"angrt;\":\"\\u221f\",\"angrtvb;\":\"\\u22be\",\"angrtvbd;\":\"\\u299d\",\"angsph;\":\"\\u2222\",\"angst;\":\"\\u00c5\",\"angzarr;\":\"\\u237c\",\"Aogon;\":\"\\u0104\",\"aogon;\":\"\\u0105\",\"Aopf;\":\"\\ud835\\udd38\",\"aopf;\":\"\\ud835\\udd52\",\"apacir;\":\"\\u2a6f\",\"ap;\":\"\\u2248\",\"apE;\":\"\\u2a70\",\"ape;\":\"\\u224a\",\"apid;\":\"\\u224b\",\"apos;\":\"'\",\"ApplyFunction;\":\"\\u2061\",\"approx;\":\"\\u2248\",\"approxeq;\":\"\\u224a\",\"Aring;\":\"\\u00c5\",Aring:\"\\u00c5\",\"aring;\":\"\\u00e5\",aring:\"\\u00e5\",\"Ascr;\":\"\\ud835\\udc9c\",\"ascr;\":\"\\ud835\\udcb6\",\"Assign;\":\"\\u2254\",\"ast;\":\"*\",\"asymp;\":\"\\u2248\",\"asympeq;\":\"\\u224d\",\"Atilde;\":\"\\u00c3\",Atilde:\"\\u00c3\",\"atilde;\":\"\\u00e3\",atilde:\"\\u00e3\",\"Auml;\":\"\\u00c4\",Auml:\"\\u00c4\",\"auml;\":\"\\u00e4\",auml:\"\\u00e4\",\"awconint;\":\"\\u2233\",\"awint;\":\"\\u2a11\",\"backcong;\":\"\\u224c\",\"backepsilon;\":\"\\u03f6\",\"backprime;\":\"\\u2035\",\"backsim;\":\"\\u223d\",\"backsimeq;\":\"\\u22cd\",\"Backslash;\":\"\\u2216\",\"Barv;\":\"\\u2ae7\",\"barvee;\":\"\\u22bd\",\"barwed;\":\"\\u2305\",\"Barwed;\":\"\\u2306\",\"barwedge;\":\"\\u2305\",\"bbrk;\":\"\\u23b5\",\"bbrktbrk;\":\"\\u23b6\",\"bcong;\":\"\\u224c\",\"Bcy;\":\"\\u0411\",\"bcy;\":\"\\u0431\",\"bdquo;\":\"\\u201e\",\"becaus;\":\"\\u2235\",\"because;\":\"\\u2235\",\"Because;\":\"\\u2235\",\"bemptyv;\":\"\\u29b0\",\"bepsi;\":\"\\u03f6\",\"bernou;\":\"\\u212c\",\"Bernoullis;\":\"\\u212c\",\"Beta;\":\"\\u0392\",\"beta;\":\"\\u03b2\",\"beth;\":\"\\u2136\",\"between;\":\"\\u226c\",\"Bfr;\":\"\\ud835\\udd05\",\"bfr;\":\"\\ud835\\udd1f\",\"bigcap;\":\"\\u22c2\",\"bigcirc;\":\"\\u25ef\",\"bigcup;\":\"\\u22c3\",\"bigodot;\":\"\\u2a00\",\"bigoplus;\":\"\\u2a01\",\"bigotimes;\":\"\\u2a02\",\"bigsqcup;\":\"\\u2a06\",\"bigstar;\":\"\\u2605\",\"bigtriangledown;\":\"\\u25bd\",\"bigtriangleup;\":\"\\u25b3\",\"biguplus;\":\"\\u2a04\",\"bigvee;\":\"\\u22c1\",\"bigwedge;\":\"\\u22c0\",\"bkarow;\":\"\\u290d\",\"blacklozenge;\":\"\\u29eb\",\"blacksquare;\":\"\\u25aa\",\"blacktriangle;\":\"\\u25b4\",\"blacktriangledown;\":\"\\u25be\",\"blacktriangleleft;\":\"\\u25c2\",\"blacktriangleright;\":\"\\u25b8\",\"blank;\":\"\\u2423\",\"blk12;\":\"\\u2592\",\"blk14;\":\"\\u2591\",\"blk34;\":\"\\u2593\",\"block;\":\"\\u2588\",\"bne;\":\"=\\u20e5\",\"bnequiv;\":\"\\u2261\\u20e5\",\"bNot;\":\"\\u2aed\",\"bnot;\":\"\\u2310\",\"Bopf;\":\"\\ud835\\udd39\",\"bopf;\":\"\\ud835\\udd53\",\"bot;\":\"\\u22a5\",\"bottom;\":\"\\u22a5\",\"bowtie;\":\"\\u22c8\",\"boxbox;\":\"\\u29c9\",\"boxdl;\":\"\\u2510\",\"boxdL;\":\"\\u2555\",\"boxDl;\":\"\\u2556\",\"boxDL;\":\"\\u2557\",\"boxdr;\":\"\\u250c\",\"boxdR;\":\"\\u2552\",\"boxDr;\":\"\\u2553\",\"boxDR;\":\"\\u2554\",\"boxh;\":\"\\u2500\",\"boxH;\":\"\\u2550\",\"boxhd;\":\"\\u252c\",\"boxHd;\":\"\\u2564\",\"boxhD;\":\"\\u2565\",\"boxHD;\":\"\\u2566\",\"boxhu;\":\"\\u2534\",\"boxHu;\":\"\\u2567\",\"boxhU;\":\"\\u2568\",\"boxHU;\":\"\\u2569\",\"boxminus;\":\"\\u229f\",\"boxplus;\":\"\\u229e\",\"boxtimes;\":\"\\u22a0\",\"boxul;\":\"\\u2518\",\"boxuL;\":\"\\u255b\",\"boxUl;\":\"\\u255c\",\"boxUL;\":\"\\u255d\",\"boxur;\":\"\\u2514\",\"boxuR;\":\"\\u2558\",\"boxUr;\":\"\\u2559\",\"boxUR;\":\"\\u255a\",\"boxv;\":\"\\u2502\",\"boxV;\":\"\\u2551\",\"boxvh;\":\"\\u253c\",\"boxvH;\":\"\\u256a\",\"boxVh;\":\"\\u256b\",\"boxVH;\":\"\\u256c\",\"boxvl;\":\"\\u2524\",\"boxvL;\":\"\\u2561\",\"boxVl;\":\"\\u2562\",\"boxVL;\":\"\\u2563\",\"boxvr;\":\"\\u251c\",\"boxvR;\":\"\\u255e\",\"boxVr;\":\"\\u255f\",\"boxVR;\":\"\\u2560\",\"bprime;\":\"\\u2035\",\"breve;\":\"\\u02d8\",\"Breve;\":\"\\u02d8\",\"brvbar;\":\"\\u00a6\",brvbar:\"\\u00a6\",\"bscr;\":\"\\ud835\\udcb7\",\"Bscr;\":\"\\u212c\",\"bsemi;\":\"\\u204f\",\"bsim;\":\"\\u223d\",\"bsime;\":\"\\u22cd\",\"bsolb;\":\"\\u29c5\",\"bsol;\":\"\\\\\",\"bsolhsub;\":\"\\u27c8\",\"bull;\":\"\\u2022\",\"bullet;\":\"\\u2022\",\"bump;\":\"\\u224e\",\"bumpE;\":\"\\u2aae\",\"bumpe;\":\"\\u224f\",\"Bumpeq;\":\"\\u224e\",\"bumpeq;\":\"\\u224f\",\"Cacute;\":\"\\u0106\",\"cacute;\":\"\\u0107\",\"capand;\":\"\\u2a44\",\"capbrcup;\":\"\\u2a49\",\"capcap;\":\"\\u2a4b\",\"cap;\":\"\\u2229\",\"Cap;\":\"\\u22d2\",\"capcup;\":\"\\u2a47\",\"capdot;\":\"\\u2a40\",\"CapitalDifferentialD;\":\"\\u2145\",\"caps;\":\"\\u2229\\ufe00\",\"caret;\":\"\\u2041\",\"caron;\":\"\\u02c7\",\"Cayleys;\":\"\\u212d\",\"ccaps;\":\"\\u2a4d\",\"Ccaron;\":\"\\u010c\",\"ccaron;\":\"\\u010d\",\"Ccedil;\":\"\\u00c7\",Ccedil:\"\\u00c7\",\"ccedil;\":\"\\u00e7\",ccedil:\"\\u00e7\",\"Ccirc;\":\"\\u0108\",\"ccirc;\":\"\\u0109\",\"Cconint;\":\"\\u2230\",\"ccups;\":\"\\u2a4c\",\"ccupssm;\":\"\\u2a50\",\"Cdot;\":\"\\u010a\",\"cdot;\":\"\\u010b\",\"cedil;\":\"\\u00b8\",cedil:\"\\u00b8\",\"Cedilla;\":\"\\u00b8\",\"cemptyv;\":\"\\u29b2\",\"cent;\":\"\\u00a2\",cent:\"\\u00a2\",\"centerdot;\":\"\\u00b7\",\"CenterDot;\":\"\\u00b7\",\"cfr;\":\"\\ud835\\udd20\",\"Cfr;\":\"\\u212d\",\"CHcy;\":\"\\u0427\",\"chcy;\":\"\\u0447\",\"check;\":\"\\u2713\",\"checkmark;\":\"\\u2713\",\"Chi;\":\"\\u03a7\",\"chi;\":\"\\u03c7\",\"circ;\":\"\\u02c6\",\"circeq;\":\"\\u2257\",\"circlearrowleft;\":\"\\u21ba\",\"circlearrowright;\":\"\\u21bb\",\"circledast;\":\"\\u229b\",\"circledcirc;\":\"\\u229a\",\"circleddash;\":\"\\u229d\",\"CircleDot;\":\"\\u2299\",\"circledR;\":\"\\u00ae\",\"circledS;\":\"\\u24c8\",\"CircleMinus;\":\"\\u2296\",\"CirclePlus;\":\"\\u2295\",\"CircleTimes;\":\"\\u2297\",\"cir;\":\"\\u25cb\",\"cirE;\":\"\\u29c3\",\"cire;\":\"\\u2257\",\"cirfnint;\":\"\\u2a10\",\"cirmid;\":\"\\u2aef\",\"cirscir;\":\"\\u29c2\",\"ClockwiseContourIntegral;\":\"\\u2232\",\"CloseCurlyDoubleQuote;\":\"\\u201d\",\"CloseCurlyQuote;\":\"\\u2019\",\"clubs;\":\"\\u2663\",\"clubsuit;\":\"\\u2663\",\"colon;\":\":\",\"Colon;\":\"\\u2237\",\"Colone;\":\"\\u2a74\",\"colone;\":\"\\u2254\",\"coloneq;\":\"\\u2254\",\"comma;\":\",\",\"commat;\":\"@\",\"comp;\":\"\\u2201\",\"compfn;\":\"\\u2218\",\"complement;\":\"\\u2201\",\"complexes;\":\"\\u2102\",\"cong;\":\"\\u2245\",\"congdot;\":\"\\u2a6d\",\"Congruent;\":\"\\u2261\",\"conint;\":\"\\u222e\",\"Conint;\":\"\\u222f\",\"ContourIntegral;\":\"\\u222e\",\"copf;\":\"\\ud835\\udd54\",\"Copf;\":\"\\u2102\",\"coprod;\":\"\\u2210\",\"Coproduct;\":\"\\u2210\",\"copy;\":\"\\u00a9\",copy:\"\\u00a9\",\"COPY;\":\"\\u00a9\",COPY:\"\\u00a9\",\"copysr;\":\"\\u2117\",\"CounterClockwiseContourIntegral;\":\"\\u2233\",\"crarr;\":\"\\u21b5\",\"cross;\":\"\\u2717\",\"Cross;\":\"\\u2a2f\",\"Cscr;\":\"\\ud835\\udc9e\",\"cscr;\":\"\\ud835\\udcb8\",\"csub;\":\"\\u2acf\",\"csube;\":\"\\u2ad1\",\"csup;\":\"\\u2ad0\",\"csupe;\":\"\\u2ad2\",\"ctdot;\":\"\\u22ef\",\"cudarrl;\":\"\\u2938\",\"cudarrr;\":\"\\u2935\",\"cuepr;\":\"\\u22de\",\"cuesc;\":\"\\u22df\",\"cularr;\":\"\\u21b6\",\"cularrp;\":\"\\u293d\",\"cupbrcap;\":\"\\u2a48\",\"cupcap;\":\"\\u2a46\",\"CupCap;\":\"\\u224d\",\"cup;\":\"\\u222a\",\"Cup;\":\"\\u22d3\",\"cupcup;\":\"\\u2a4a\",\"cupdot;\":\"\\u228d\",\"cupor;\":\"\\u2a45\",\"cups;\":\"\\u222a\\ufe00\",\"curarr;\":\"\\u21b7\",\"curarrm;\":\"\\u293c\",\"curlyeqprec;\":\"\\u22de\",\"curlyeqsucc;\":\"\\u22df\",\"curlyvee;\":\"\\u22ce\",\"curlywedge;\":\"\\u22cf\",\"curren;\":\"\\u00a4\",curren:\"\\u00a4\",\"curvearrowleft;\":\"\\u21b6\",\"curvearrowright;\":\"\\u21b7\",\"cuvee;\":\"\\u22ce\",\"cuwed;\":\"\\u22cf\",\"cwconint;\":\"\\u2232\",\"cwint;\":\"\\u2231\",\"cylcty;\":\"\\u232d\",\"dagger;\":\"\\u2020\",\"Dagger;\":\"\\u2021\",\"daleth;\":\"\\u2138\",\"darr;\":\"\\u2193\",\"Darr;\":\"\\u21a1\",\"dArr;\":\"\\u21d3\",\"dash;\":\"\\u2010\",\"Dashv;\":\"\\u2ae4\",\"dashv;\":\"\\u22a3\",\"dbkarow;\":\"\\u290f\",\"dblac;\":\"\\u02dd\",\"Dcaron;\":\"\\u010e\",\"dcaron;\":\"\\u010f\",\"Dcy;\":\"\\u0414\",\"dcy;\":\"\\u0434\",\"ddagger;\":\"\\u2021\",\"ddarr;\":\"\\u21ca\",\"DD;\":\"\\u2145\",\"dd;\":\"\\u2146\",\"DDotrahd;\":\"\\u2911\",\"ddotseq;\":\"\\u2a77\",\"deg;\":\"\\u00b0\",deg:\"\\u00b0\",\"Del;\":\"\\u2207\",\"Delta;\":\"\\u0394\",\"delta;\":\"\\u03b4\",\"demptyv;\":\"\\u29b1\",\"dfisht;\":\"\\u297f\",\"Dfr;\":\"\\ud835\\udd07\",\"dfr;\":\"\\ud835\\udd21\",\"dHar;\":\"\\u2965\",\"dharl;\":\"\\u21c3\",\"dharr;\":\"\\u21c2\",\"DiacriticalAcute;\":\"\\u00b4\",\"DiacriticalDot;\":\"\\u02d9\",\"DiacriticalDoubleAcute;\":\"\\u02dd\",\"DiacriticalGrave;\":\"`\",\"DiacriticalTilde;\":\"\\u02dc\",\"diam;\":\"\\u22c4\",\"diamond;\":\"\\u22c4\",\"Diamond;\":\"\\u22c4\",\"diamondsuit;\":\"\\u2666\",\"diams;\":\"\\u2666\",\"die;\":\"\\u00a8\",\"DifferentialD;\":\"\\u2146\",\"digamma;\":\"\\u03dd\",\"disin;\":\"\\u22f2\",\"div;\":\"\\u00f7\",\"divide;\":\"\\u00f7\",divide:\"\\u00f7\",\"divideontimes;\":\"\\u22c7\",\"divonx;\":\"\\u22c7\",\"DJcy;\":\"\\u0402\",\"djcy;\":\"\\u0452\",\"dlcorn;\":\"\\u231e\",\"dlcrop;\":\"\\u230d\",\"dollar;\":\"$\",\"Dopf;\":\"\\ud835\\udd3b\",\"dopf;\":\"\\ud835\\udd55\",\"Dot;\":\"\\u00a8\",\"dot;\":\"\\u02d9\",\"DotDot;\":\"\\u20dc\",\"doteq;\":\"\\u2250\",\"doteqdot;\":\"\\u2251\",\"DotEqual;\":\"\\u2250\",\"dotminus;\":\"\\u2238\",\"dotplus;\":\"\\u2214\",\"dotsquare;\":\"\\u22a1\",\"doublebarwedge;\":\"\\u2306\",\"DoubleContourIntegral;\":\"\\u222f\",\"DoubleDot;\":\"\\u00a8\",\"DoubleDownArrow;\":\"\\u21d3\",\"DoubleLeftArrow;\":\"\\u21d0\",\"DoubleLeftRightArrow;\":\"\\u21d4\",\"DoubleLeftTee;\":\"\\u2ae4\",\"DoubleLongLeftArrow;\":\"\\u27f8\",\"DoubleLongLeftRightArrow;\":\"\\u27fa\",\"DoubleLongRightArrow;\":\"\\u27f9\",\"DoubleRightArrow;\":\"\\u21d2\",\"DoubleRightTee;\":\"\\u22a8\",\"DoubleUpArrow;\":\"\\u21d1\",\"DoubleUpDownArrow;\":\"\\u21d5\",\"DoubleVerticalBar;\":\"\\u2225\",\"DownArrowBar;\":\"\\u2913\",\"downarrow;\":\"\\u2193\",\"DownArrow;\":\"\\u2193\",\"Downarrow;\":\"\\u21d3\",\"DownArrowUpArrow;\":\"\\u21f5\",\"DownBreve;\":\"\\u0311\",\"downdownarrows;\":\"\\u21ca\",\"downharpoonleft;\":\"\\u21c3\",\"downharpoonright;\":\"\\u21c2\",\"DownLeftRightVector;\":\"\\u2950\",\"DownLeftTeeVector;\":\"\\u295e\",\"DownLeftVectorBar;\":\"\\u2956\",\"DownLeftVector;\":\"\\u21bd\",\"DownRightTeeVector;\":\"\\u295f\",\"DownRightVectorBar;\":\"\\u2957\",\"DownRightVector;\":\"\\u21c1\",\"DownTeeArrow;\":\"\\u21a7\",\"DownTee;\":\"\\u22a4\",\"drbkarow;\":\"\\u2910\",\"drcorn;\":\"\\u231f\",\"drcrop;\":\"\\u230c\",\"Dscr;\":\"\\ud835\\udc9f\",\"dscr;\":\"\\ud835\\udcb9\",\"DScy;\":\"\\u0405\",\"dscy;\":\"\\u0455\",\"dsol;\":\"\\u29f6\",\"Dstrok;\":\"\\u0110\",\"dstrok;\":\"\\u0111\",\"dtdot;\":\"\\u22f1\",\"dtri;\":\"\\u25bf\",\"dtrif;\":\"\\u25be\",\"duarr;\":\"\\u21f5\",\"duhar;\":\"\\u296f\",\"dwangle;\":\"\\u29a6\",\"DZcy;\":\"\\u040f\",\"dzcy;\":\"\\u045f\",\"dzigrarr;\":\"\\u27ff\",\"Eacute;\":\"\\u00c9\",Eacute:\"\\u00c9\",\"eacute;\":\"\\u00e9\",eacute:\"\\u00e9\",\"easter;\":\"\\u2a6e\",\"Ecaron;\":\"\\u011a\",\"ecaron;\":\"\\u011b\",\"Ecirc;\":\"\\u00ca\",Ecirc:\"\\u00ca\",\"ecirc;\":\"\\u00ea\",ecirc:\"\\u00ea\",\"ecir;\":\"\\u2256\",\"ecolon;\":\"\\u2255\",\"Ecy;\":\"\\u042d\",\"ecy;\":\"\\u044d\",\"eDDot;\":\"\\u2a77\",\"Edot;\":\"\\u0116\",\"edot;\":\"\\u0117\",\"eDot;\":\"\\u2251\",\"ee;\":\"\\u2147\",\"efDot;\":\"\\u2252\",\"Efr;\":\"\\ud835\\udd08\",\"efr;\":\"\\ud835\\udd22\",\"eg;\":\"\\u2a9a\",\"Egrave;\":\"\\u00c8\",Egrave:\"\\u00c8\",\"egrave;\":\"\\u00e8\",egrave:\"\\u00e8\",\"egs;\":\"\\u2a96\",\"egsdot;\":\"\\u2a98\",\"el;\":\"\\u2a99\",\"Element;\":\"\\u2208\",\"elinters;\":\"\\u23e7\",\"ell;\":\"\\u2113\",\"els;\":\"\\u2a95\",\"elsdot;\":\"\\u2a97\",\"Emacr;\":\"\\u0112\",\"emacr;\":\"\\u0113\",\"empty;\":\"\\u2205\",\"emptyset;\":\"\\u2205\",\"EmptySmallSquare;\":\"\\u25fb\",\"emptyv;\":\"\\u2205\",\"EmptyVerySmallSquare;\":\"\\u25ab\",\"emsp13;\":\"\\u2004\",\"emsp14;\":\"\\u2005\",\"emsp;\":\"\\u2003\",\"ENG;\":\"\\u014a\",\"eng;\":\"\\u014b\",\"ensp;\":\"\\u2002\",\"Eogon;\":\"\\u0118\",\"eogon;\":\"\\u0119\",\"Eopf;\":\"\\ud835\\udd3c\",\"eopf;\":\"\\ud835\\udd56\",\"epar;\":\"\\u22d5\",\"eparsl;\":\"\\u29e3\",\"eplus;\":\"\\u2a71\",\"epsi;\":\"\\u03b5\",\"Epsilon;\":\"\\u0395\",\"epsilon;\":\"\\u03b5\",\"epsiv;\":\"\\u03f5\",\"eqcirc;\":\"\\u2256\",\"eqcolon;\":\"\\u2255\",\"eqsim;\":\"\\u2242\",\"eqslantgtr;\":\"\\u2a96\",\"eqslantless;\":\"\\u2a95\",\"Equal;\":\"\\u2a75\",\"equals;\":\"=\",\"EqualTilde;\":\"\\u2242\",\"equest;\":\"\\u225f\",\"Equilibrium;\":\"\\u21cc\",\"equiv;\":\"\\u2261\",\"equivDD;\":\"\\u2a78\",\"eqvparsl;\":\"\\u29e5\",\"erarr;\":\"\\u2971\",\"erDot;\":\"\\u2253\",\"escr;\":\"\\u212f\",\"Escr;\":\"\\u2130\",\"esdot;\":\"\\u2250\",\"Esim;\":\"\\u2a73\",\"esim;\":\"\\u2242\",\"Eta;\":\"\\u0397\",\"eta;\":\"\\u03b7\",\"ETH;\":\"\\u00d0\",ETH:\"\\u00d0\",\"eth;\":\"\\u00f0\",eth:\"\\u00f0\",\"Euml;\":\"\\u00cb\",Euml:\"\\u00cb\",\"euml;\":\"\\u00eb\",euml:\"\\u00eb\",\"euro;\":\"\\u20ac\",\"excl;\":\"!\",\"exist;\":\"\\u2203\",\"Exists;\":\"\\u2203\",\"expectation;\":\"\\u2130\",\"exponentiale;\":\"\\u2147\",\"ExponentialE;\":\"\\u2147\",\"fallingdotseq;\":\"\\u2252\",\"Fcy;\":\"\\u0424\",\"fcy;\":\"\\u0444\",\"female;\":\"\\u2640\",\"ffilig;\":\"\\ufb03\",\"fflig;\":\"\\ufb00\",\"ffllig;\":\"\\ufb04\",\"Ffr;\":\"\\ud835\\udd09\",\"ffr;\":\"\\ud835\\udd23\",\"filig;\":\"\\ufb01\",\"FilledSmallSquare;\":\"\\u25fc\",\"FilledVerySmallSquare;\":\"\\u25aa\",\"fjlig;\":\"fj\",\"flat;\":\"\\u266d\",\"fllig;\":\"\\ufb02\",\"fltns;\":\"\\u25b1\",\"fnof;\":\"\\u0192\",\"Fopf;\":\"\\ud835\\udd3d\",\"fopf;\":\"\\ud835\\udd57\",\"forall;\":\"\\u2200\",\"ForAll;\":\"\\u2200\",\"fork;\":\"\\u22d4\",\"forkv;\":\"\\u2ad9\",\"Fouriertrf;\":\"\\u2131\",\"fpartint;\":\"\\u2a0d\",\"frac12;\":\"\\u00bd\",frac12:\"\\u00bd\",\"frac13;\":\"\\u2153\",\"frac14;\":\"\\u00bc\",frac14:\"\\u00bc\",\"frac15;\":\"\\u2155\",\"frac16;\":\"\\u2159\",\"frac18;\":\"\\u215b\",\"frac23;\":\"\\u2154\",\"frac25;\":\"\\u2156\",\"frac34;\":\"\\u00be\",frac34:\"\\u00be\",\"frac35;\":\"\\u2157\",\"frac38;\":\"\\u215c\",\"frac45;\":\"\\u2158\",\"frac56;\":\"\\u215a\",\"frac58;\":\"\\u215d\",\"frac78;\":\"\\u215e\",\"frasl;\":\"\\u2044\",\"frown;\":\"\\u2322\",\"fscr;\":\"\\ud835\\udcbb\",\"Fscr;\":\"\\u2131\",\"gacute;\":\"\\u01f5\",\"Gamma;\":\"\\u0393\",\"gamma;\":\"\\u03b3\",\"Gammad;\":\"\\u03dc\",\"gammad;\":\"\\u03dd\",\"gap;\":\"\\u2a86\",\"Gbreve;\":\"\\u011e\",\"gbreve;\":\"\\u011f\",\"Gcedil;\":\"\\u0122\",\"Gcirc;\":\"\\u011c\",\"gcirc;\":\"\\u011d\",\"Gcy;\":\"\\u0413\",\"gcy;\":\"\\u0433\",\"Gdot;\":\"\\u0120\",\"gdot;\":\"\\u0121\",\"ge;\":\"\\u2265\",\"gE;\":\"\\u2267\",\"gEl;\":\"\\u2a8c\",\"gel;\":\"\\u22db\",\"geq;\":\"\\u2265\",\"geqq;\":\"\\u2267\",\"geqslant;\":\"\\u2a7e\",\"gescc;\":\"\\u2aa9\",\"ges;\":\"\\u2a7e\",\"gesdot;\":\"\\u2a80\",\"gesdoto;\":\"\\u2a82\",\"gesdotol;\":\"\\u2a84\",\"gesl;\":\"\\u22db\\ufe00\",\"gesles;\":\"\\u2a94\",\"Gfr;\":\"\\ud835\\udd0a\",\"gfr;\":\"\\ud835\\udd24\",\"gg;\":\"\\u226b\",\"Gg;\":\"\\u22d9\",\"ggg;\":\"\\u22d9\",\"gimel;\":\"\\u2137\",\"GJcy;\":\"\\u0403\",\"gjcy;\":\"\\u0453\",\"gla;\":\"\\u2aa5\",\"gl;\":\"\\u2277\",\"glE;\":\"\\u2a92\",\"glj;\":\"\\u2aa4\",\"gnap;\":\"\\u2a8a\",\"gnapprox;\":\"\\u2a8a\",\"gne;\":\"\\u2a88\",\"gnE;\":\"\\u2269\",\"gneq;\":\"\\u2a88\",\"gneqq;\":\"\\u2269\",\"gnsim;\":\"\\u22e7\",\"Gopf;\":\"\\ud835\\udd3e\",\"gopf;\":\"\\ud835\\udd58\",\"grave;\":\"`\",\"GreaterEqual;\":\"\\u2265\",\"GreaterEqualLess;\":\"\\u22db\",\"GreaterFullEqual;\":\"\\u2267\",\"GreaterGreater;\":\"\\u2aa2\",\"GreaterLess;\":\"\\u2277\",\"GreaterSlantEqual;\":\"\\u2a7e\",\"GreaterTilde;\":\"\\u2273\",\"Gscr;\":\"\\ud835\\udca2\",\"gscr;\":\"\\u210a\",\"gsim;\":\"\\u2273\",\"gsime;\":\"\\u2a8e\",\"gsiml;\":\"\\u2a90\",\"gtcc;\":\"\\u2aa7\",\"gtcir;\":\"\\u2a7a\",\"gt;\":\">\",gt:\">\",\"GT;\":\">\",GT:\">\",\"Gt;\":\"\\u226b\",\"gtdot;\":\"\\u22d7\",\"gtlPar;\":\"\\u2995\",\"gtquest;\":\"\\u2a7c\",\"gtrapprox;\":\"\\u2a86\",\"gtrarr;\":\"\\u2978\",\"gtrdot;\":\"\\u22d7\",\"gtreqless;\":\"\\u22db\",\"gtreqqless;\":\"\\u2a8c\",\"gtrless;\":\"\\u2277\",\"gtrsim;\":\"\\u2273\",\"gvertneqq;\":\"\\u2269\\ufe00\",\"gvnE;\":\"\\u2269\\ufe00\",\"Hacek;\":\"\\u02c7\",\"hairsp;\":\"\\u200a\",\"half;\":\"\\u00bd\",\"hamilt;\":\"\\u210b\",\"HARDcy;\":\"\\u042a\",\"hardcy;\":\"\\u044a\",\"harrcir;\":\"\\u2948\",\"harr;\":\"\\u2194\",\"hArr;\":\"\\u21d4\",\"harrw;\":\"\\u21ad\",\"Hat;\":\"^\",\"hbar;\":\"\\u210f\",\"Hcirc;\":\"\\u0124\",\"hcirc;\":\"\\u0125\",\"hearts;\":\"\\u2665\",\"heartsuit;\":\"\\u2665\",\"hellip;\":\"\\u2026\",\"hercon;\":\"\\u22b9\",\"hfr;\":\"\\ud835\\udd25\",\"Hfr;\":\"\\u210c\",\"HilbertSpace;\":\"\\u210b\",\"hksearow;\":\"\\u2925\",\"hkswarow;\":\"\\u2926\",\"hoarr;\":\"\\u21ff\",\"homtht;\":\"\\u223b\",\"hookleftarrow;\":\"\\u21a9\",\"hookrightarrow;\":\"\\u21aa\",\"hopf;\":\"\\ud835\\udd59\",\"Hopf;\":\"\\u210d\",\"horbar;\":\"\\u2015\",\"HorizontalLine;\":\"\\u2500\",\"hscr;\":\"\\ud835\\udcbd\",\"Hscr;\":\"\\u210b\",\"hslash;\":\"\\u210f\",\"Hstrok;\":\"\\u0126\",\"hstrok;\":\"\\u0127\",\"HumpDownHump;\":\"\\u224e\",\"HumpEqual;\":\"\\u224f\",\"hybull;\":\"\\u2043\",\"hyphen;\":\"\\u2010\",\"Iacute;\":\"\\u00cd\",Iacute:\"\\u00cd\",\"iacute;\":\"\\u00ed\",iacute:\"\\u00ed\",\"ic;\":\"\\u2063\",\"Icirc;\":\"\\u00ce\",Icirc:\"\\u00ce\",\"icirc;\":\"\\u00ee\",icirc:\"\\u00ee\",\"Icy;\":\"\\u0418\",\"icy;\":\"\\u0438\",\"Idot;\":\"\\u0130\",\"IEcy;\":\"\\u0415\",\"iecy;\":\"\\u0435\",\"iexcl;\":\"\\u00a1\",iexcl:\"\\u00a1\",\"iff;\":\"\\u21d4\",\"ifr;\":\"\\ud835\\udd26\",\"Ifr;\":\"\\u2111\",\"Igrave;\":\"\\u00cc\",Igrave:\"\\u00cc\",\"igrave;\":\"\\u00ec\",igrave:\"\\u00ec\",\"ii;\":\"\\u2148\",\"iiiint;\":\"\\u2a0c\",\"iiint;\":\"\\u222d\",\"iinfin;\":\"\\u29dc\",\"iiota;\":\"\\u2129\",\"IJlig;\":\"\\u0132\",\"ijlig;\":\"\\u0133\",\"Imacr;\":\"\\u012a\",\"imacr;\":\"\\u012b\",\"image;\":\"\\u2111\",\"ImaginaryI;\":\"\\u2148\",\"imagline;\":\"\\u2110\",\"imagpart;\":\"\\u2111\",\"imath;\":\"\\u0131\",\"Im;\":\"\\u2111\",\"imof;\":\"\\u22b7\",\"imped;\":\"\\u01b5\",\"Implies;\":\"\\u21d2\",\"incare;\":\"\\u2105\",\"in;\":\"\\u2208\",\"infin;\":\"\\u221e\",\"infintie;\":\"\\u29dd\",\"inodot;\":\"\\u0131\",\"intcal;\":\"\\u22ba\",\"int;\":\"\\u222b\",\"Int;\":\"\\u222c\",\"integers;\":\"\\u2124\",\"Integral;\":\"\\u222b\",\"intercal;\":\"\\u22ba\",\"Intersection;\":\"\\u22c2\",\"intlarhk;\":\"\\u2a17\",\"intprod;\":\"\\u2a3c\",\"InvisibleComma;\":\"\\u2063\",\"InvisibleTimes;\":\"\\u2062\",\"IOcy;\":\"\\u0401\",\"iocy;\":\"\\u0451\",\"Iogon;\":\"\\u012e\",\"iogon;\":\"\\u012f\",\"Iopf;\":\"\\ud835\\udd40\",\"iopf;\":\"\\ud835\\udd5a\",\"Iota;\":\"\\u0399\",\"iota;\":\"\\u03b9\",\"iprod;\":\"\\u2a3c\",\"iquest;\":\"\\u00bf\",iquest:\"\\u00bf\",\"iscr;\":\"\\ud835\\udcbe\",\"Iscr;\":\"\\u2110\",\"isin;\":\"\\u2208\",\"isindot;\":\"\\u22f5\",\"isinE;\":\"\\u22f9\",\"isins;\":\"\\u22f4\",\"isinsv;\":\"\\u22f3\",\"isinv;\":\"\\u2208\",\"it;\":\"\\u2062\",\"Itilde;\":\"\\u0128\",\"itilde;\":\"\\u0129\",\"Iukcy;\":\"\\u0406\",\"iukcy;\":\"\\u0456\",\"Iuml;\":\"\\u00cf\",Iuml:\"\\u00cf\",\"iuml;\":\"\\u00ef\",iuml:\"\\u00ef\",\"Jcirc;\":\"\\u0134\",\"jcirc;\":\"\\u0135\",\"Jcy;\":\"\\u0419\",\"jcy;\":\"\\u0439\",\"Jfr;\":\"\\ud835\\udd0d\",\"jfr;\":\"\\ud835\\udd27\",\"jmath;\":\"\\u0237\",\"Jopf;\":\"\\ud835\\udd41\",\"jopf;\":\"\\ud835\\udd5b\",\"Jscr;\":\"\\ud835\\udca5\",\"jscr;\":\"\\ud835\\udcbf\",\"Jsercy;\":\"\\u0408\",\"jsercy;\":\"\\u0458\",\"Jukcy;\":\"\\u0404\",\"jukcy;\":\"\\u0454\",\"Kappa;\":\"\\u039a\",\"kappa;\":\"\\u03ba\",\"kappav;\":\"\\u03f0\",\"Kcedil;\":\"\\u0136\",\"kcedil;\":\"\\u0137\",\"Kcy;\":\"\\u041a\",\"kcy;\":\"\\u043a\",\"Kfr;\":\"\\ud835\\udd0e\",\"kfr;\":\"\\ud835\\udd28\",\"kgreen;\":\"\\u0138\",\"KHcy;\":\"\\u0425\",\"khcy;\":\"\\u0445\",\"KJcy;\":\"\\u040c\",\"kjcy;\":\"\\u045c\",\"Kopf;\":\"\\ud835\\udd42\",\"kopf;\":\"\\ud835\\udd5c\",\"Kscr;\":\"\\ud835\\udca6\",\"kscr;\":\"\\ud835\\udcc0\",\"lAarr;\":\"\\u21da\",\"Lacute;\":\"\\u0139\",\"lacute;\":\"\\u013a\",\"laemptyv;\":\"\\u29b4\",\"lagran;\":\"\\u2112\",\"Lambda;\":\"\\u039b\",\"lambda;\":\"\\u03bb\",\"lang;\":\"\\u27e8\",\"Lang;\":\"\\u27ea\",\"langd;\":\"\\u2991\",\"langle;\":\"\\u27e8\",\"lap;\":\"\\u2a85\",\"Laplacetrf;\":\"\\u2112\",\"laquo;\":\"\\u00ab\",laquo:\"\\u00ab\",\"larrb;\":\"\\u21e4\",\"larrbfs;\":\"\\u291f\",\"larr;\":\"\\u2190\",\"Larr;\":\"\\u219e\",\"lArr;\":\"\\u21d0\",\"larrfs;\":\"\\u291d\",\"larrhk;\":\"\\u21a9\",\"larrlp;\":\"\\u21ab\",\"larrpl;\":\"\\u2939\",\"larrsim;\":\"\\u2973\",\"larrtl;\":\"\\u21a2\",\"latail;\":\"\\u2919\",\"lAtail;\":\"\\u291b\",\"lat;\":\"\\u2aab\",\"late;\":\"\\u2aad\",\"lates;\":\"\\u2aad\\ufe00\",\"lbarr;\":\"\\u290c\",\"lBarr;\":\"\\u290e\",\"lbbrk;\":\"\\u2772\",\"lbrace;\":\"{\",\"lbrack;\":\"[\",\"lbrke;\":\"\\u298b\",\"lbrksld;\":\"\\u298f\",\"lbrkslu;\":\"\\u298d\",\"Lcaron;\":\"\\u013d\",\"lcaron;\":\"\\u013e\",\"Lcedil;\":\"\\u013b\",\"lcedil;\":\"\\u013c\",\"lceil;\":\"\\u2308\",\"lcub;\":\"{\",\"Lcy;\":\"\\u041b\",\"lcy;\":\"\\u043b\",\"ldca;\":\"\\u2936\",\"ldquo;\":\"\\u201c\",\"ldquor;\":\"\\u201e\",\"ldrdhar;\":\"\\u2967\",\"ldrushar;\":\"\\u294b\",\"ldsh;\":\"\\u21b2\",\"le;\":\"\\u2264\",\"lE;\":\"\\u2266\",\"LeftAngleBracket;\":\"\\u27e8\",\"LeftArrowBar;\":\"\\u21e4\",\"leftarrow;\":\"\\u2190\",\"LeftArrow;\":\"\\u2190\",\"Leftarrow;\":\"\\u21d0\",\"LeftArrowRightArrow;\":\"\\u21c6\",\"leftarrowtail;\":\"\\u21a2\",\"LeftCeiling;\":\"\\u2308\",\"LeftDoubleBracket;\":\"\\u27e6\",\"LeftDownTeeVector;\":\"\\u2961\",\"LeftDownVectorBar;\":\"\\u2959\",\"LeftDownVector;\":\"\\u21c3\",\"LeftFloor;\":\"\\u230a\",\"leftharpoondown;\":\"\\u21bd\",\"leftharpoonup;\":\"\\u21bc\",\"leftleftarrows;\":\"\\u21c7\",\"leftrightarrow;\":\"\\u2194\",\"LeftRightArrow;\":\"\\u2194\",\"Leftrightarrow;\":\"\\u21d4\",\"leftrightarrows;\":\"\\u21c6\",\"leftrightharpoons;\":\"\\u21cb\",\"leftrightsquigarrow;\":\"\\u21ad\",\"LeftRightVector;\":\"\\u294e\",\"LeftTeeArrow;\":\"\\u21a4\",\"LeftTee;\":\"\\u22a3\",\"LeftTeeVector;\":\"\\u295a\",\"leftthreetimes;\":\"\\u22cb\",\"LeftTriangleBar;\":\"\\u29cf\",\"LeftTriangle;\":\"\\u22b2\",\"LeftTriangleEqual;\":\"\\u22b4\",\"LeftUpDownVector;\":\"\\u2951\",\"LeftUpTeeVector;\":\"\\u2960\",\"LeftUpVectorBar;\":\"\\u2958\",\"LeftUpVector;\":\"\\u21bf\",\"LeftVectorBar;\":\"\\u2952\",\"LeftVector;\":\"\\u21bc\",\"lEg;\":\"\\u2a8b\",\"leg;\":\"\\u22da\",\"leq;\":\"\\u2264\",\"leqq;\":\"\\u2266\",\"leqslant;\":\"\\u2a7d\",\"lescc;\":\"\\u2aa8\",\"les;\":\"\\u2a7d\",\"lesdot;\":\"\\u2a7f\",\"lesdoto;\":\"\\u2a81\",\"lesdotor;\":\"\\u2a83\",\"lesg;\":\"\\u22da\\ufe00\",\"lesges;\":\"\\u2a93\",\"lessapprox;\":\"\\u2a85\",\"lessdot;\":\"\\u22d6\",\"lesseqgtr;\":\"\\u22da\",\"lesseqqgtr;\":\"\\u2a8b\",\"LessEqualGreater;\":\"\\u22da\",\"LessFullEqual;\":\"\\u2266\",\"LessGreater;\":\"\\u2276\",\"lessgtr;\":\"\\u2276\",\"LessLess;\":\"\\u2aa1\",\"lesssim;\":\"\\u2272\",\"LessSlantEqual;\":\"\\u2a7d\",\"LessTilde;\":\"\\u2272\",\"lfisht;\":\"\\u297c\",\"lfloor;\":\"\\u230a\",\"Lfr;\":\"\\ud835\\udd0f\",\"lfr;\":\"\\ud835\\udd29\",\"lg;\":\"\\u2276\",\"lgE;\":\"\\u2a91\",\"lHar;\":\"\\u2962\",\"lhard;\":\"\\u21bd\",\"lharu;\":\"\\u21bc\",\"lharul;\":\"\\u296a\",\"lhblk;\":\"\\u2584\",\"LJcy;\":\"\\u0409\",\"ljcy;\":\"\\u0459\",\"llarr;\":\"\\u21c7\",\"ll;\":\"\\u226a\",\"Ll;\":\"\\u22d8\",\"llcorner;\":\"\\u231e\",\"Lleftarrow;\":\"\\u21da\",\"llhard;\":\"\\u296b\",\"lltri;\":\"\\u25fa\",\"Lmidot;\":\"\\u013f\",\"lmidot;\":\"\\u0140\",\"lmoustache;\":\"\\u23b0\",\"lmoust;\":\"\\u23b0\",\"lnap;\":\"\\u2a89\",\"lnapprox;\":\"\\u2a89\",\"lne;\":\"\\u2a87\",\"lnE;\":\"\\u2268\",\"lneq;\":\"\\u2a87\",\"lneqq;\":\"\\u2268\",\"lnsim;\":\"\\u22e6\",\"loang;\":\"\\u27ec\",\"loarr;\":\"\\u21fd\",\"lobrk;\":\"\\u27e6\",\"longleftarrow;\":\"\\u27f5\",\"LongLeftArrow;\":\"\\u27f5\",\"Longleftarrow;\":\"\\u27f8\",\"longleftrightarrow;\":\"\\u27f7\",\"LongLeftRightArrow;\":\"\\u27f7\",\"Longleftrightarrow;\":\"\\u27fa\",\"longmapsto;\":\"\\u27fc\",\"longrightarrow;\":\"\\u27f6\",\"LongRightArrow;\":\"\\u27f6\",\"Longrightarrow;\":\"\\u27f9\",\"looparrowleft;\":\"\\u21ab\",\"looparrowright;\":\"\\u21ac\",\"lopar;\":\"\\u2985\",\"Lopf;\":\"\\ud835\\udd43\",\"lopf;\":\"\\ud835\\udd5d\",\"loplus;\":\"\\u2a2d\",\"lotimes;\":\"\\u2a34\",\"lowast;\":\"\\u2217\",\"lowbar;\":\"_\",\"LowerLeftArrow;\":\"\\u2199\",\"LowerRightArrow;\":\"\\u2198\",\"loz;\":\"\\u25ca\",\"lozenge;\":\"\\u25ca\",\"lozf;\":\"\\u29eb\",\"lpar;\":\"(\",\"lparlt;\":\"\\u2993\",\"lrarr;\":\"\\u21c6\",\"lrcorner;\":\"\\u231f\",\"lrhar;\":\"\\u21cb\",\"lrhard;\":\"\\u296d\",\"lrm;\":\"\\u200e\",\"lrtri;\":\"\\u22bf\",\"lsaquo;\":\"\\u2039\",\"lscr;\":\"\\ud835\\udcc1\",\"Lscr;\":\"\\u2112\",\"lsh;\":\"\\u21b0\",\"Lsh;\":\"\\u21b0\",\"lsim;\":\"\\u2272\",\"lsime;\":\"\\u2a8d\",\"lsimg;\":\"\\u2a8f\",\"lsqb;\":\"[\",\"lsquo;\":\"\\u2018\",\"lsquor;\":\"\\u201a\",\"Lstrok;\":\"\\u0141\",\"lstrok;\":\"\\u0142\",\"ltcc;\":\"\\u2aa6\",\"ltcir;\":\"\\u2a79\",\"lt;\":\"<\",lt:\"<\",\"LT;\":\"<\",LT:\"<\",\"Lt;\":\"\\u226a\",\"ltdot;\":\"\\u22d6\",\"lthree;\":\"\\u22cb\",\"ltimes;\":\"\\u22c9\",\"ltlarr;\":\"\\u2976\",\"ltquest;\":\"\\u2a7b\",\"ltri;\":\"\\u25c3\",\"ltrie;\":\"\\u22b4\",\"ltrif;\":\"\\u25c2\",\"ltrPar;\":\"\\u2996\",\"lurdshar;\":\"\\u294a\",\"luruhar;\":\"\\u2966\",\"lvertneqq;\":\"\\u2268\\ufe00\",\"lvnE;\":\"\\u2268\\ufe00\",\"macr;\":\"\\u00af\",macr:\"\\u00af\",\"male;\":\"\\u2642\",\"malt;\":\"\\u2720\",\"maltese;\":\"\\u2720\",\"Map;\":\"\\u2905\",\"map;\":\"\\u21a6\",\"mapsto;\":\"\\u21a6\",\"mapstodown;\":\"\\u21a7\",\"mapstoleft;\":\"\\u21a4\",\"mapstoup;\":\"\\u21a5\",\"marker;\":\"\\u25ae\",\"mcomma;\":\"\\u2a29\",\"Mcy;\":\"\\u041c\",\"mcy;\":\"\\u043c\",\"mdash;\":\"\\u2014\",\"mDDot;\":\"\\u223a\",\"measuredangle;\":\"\\u2221\",\"MediumSpace;\":\"\\u205f\",\"Mellintrf;\":\"\\u2133\",\"Mfr;\":\"\\ud835\\udd10\",\"mfr;\":\"\\ud835\\udd2a\",\"mho;\":\"\\u2127\",\"micro;\":\"\\u00b5\",micro:\"\\u00b5\",\"midast;\":\"*\",\"midcir;\":\"\\u2af0\",\"mid;\":\"\\u2223\",\"middot;\":\"\\u00b7\",middot:\"\\u00b7\",\"minusb;\":\"\\u229f\",\"minus;\":\"\\u2212\",\"minusd;\":\"\\u2238\",\"minusdu;\":\"\\u2a2a\",\"MinusPlus;\":\"\\u2213\",\"mlcp;\":\"\\u2adb\",\"mldr;\":\"\\u2026\",\"mnplus;\":\"\\u2213\",\"models;\":\"\\u22a7\",\"Mopf;\":\"\\ud835\\udd44\",\"mopf;\":\"\\ud835\\udd5e\",\"mp;\":\"\\u2213\",\"mscr;\":\"\\ud835\\udcc2\",\"Mscr;\":\"\\u2133\",\"mstpos;\":\"\\u223e\",\"Mu;\":\"\\u039c\",\"mu;\":\"\\u03bc\",\"multimap;\":\"\\u22b8\",\"mumap;\":\"\\u22b8\",\"nabla;\":\"\\u2207\",\"Nacute;\":\"\\u0143\",\"nacute;\":\"\\u0144\",\"nang;\":\"\\u2220\\u20d2\",\"nap;\":\"\\u2249\",\"napE;\":\"\\u2a70\\u0338\",\"napid;\":\"\\u224b\\u0338\",\"napos;\":\"\\u0149\",\"napprox;\":\"\\u2249\",\"natural;\":\"\\u266e\",\"naturals;\":\"\\u2115\",\"natur;\":\"\\u266e\",\"nbsp;\":\"\\u00a0\",nbsp:\"\\u00a0\",\"nbump;\":\"\\u224e\\u0338\",\"nbumpe;\":\"\\u224f\\u0338\",\"ncap;\":\"\\u2a43\",\"Ncaron;\":\"\\u0147\",\"ncaron;\":\"\\u0148\",\"Ncedil;\":\"\\u0145\",\"ncedil;\":\"\\u0146\",\"ncong;\":\"\\u2247\",\"ncongdot;\":\"\\u2a6d\\u0338\",\"ncup;\":\"\\u2a42\",\"Ncy;\":\"\\u041d\",\"ncy;\":\"\\u043d\",\"ndash;\":\"\\u2013\",\"nearhk;\":\"\\u2924\",\"nearr;\":\"\\u2197\",\"neArr;\":\"\\u21d7\",\"nearrow;\":\"\\u2197\",\"ne;\":\"\\u2260\",\"nedot;\":\"\\u2250\\u0338\",\"NegativeMediumSpace;\":\"\\u200b\",\"NegativeThickSpace;\":\"\\u200b\",\"NegativeThinSpace;\":\"\\u200b\",\"NegativeVeryThinSpace;\":\"\\u200b\",\"nequiv;\":\"\\u2262\",\"nesear;\":\"\\u2928\",\"nesim;\":\"\\u2242\\u0338\",\"NestedGreaterGreater;\":\"\\u226b\",\"NestedLessLess;\":\"\\u226a\",\"NewLine;\":\"\\n\",\"nexist;\":\"\\u2204\",\"nexists;\":\"\\u2204\",\"Nfr;\":\"\\ud835\\udd11\",\"nfr;\":\"\\ud835\\udd2b\",\"ngE;\":\"\\u2267\\u0338\",\"nge;\":\"\\u2271\",\"ngeq;\":\"\\u2271\",\"ngeqq;\":\"\\u2267\\u0338\",\"ngeqslant;\":\"\\u2a7e\\u0338\",\"nges;\":\"\\u2a7e\\u0338\",\"nGg;\":\"\\u22d9\\u0338\",\"ngsim;\":\"\\u2275\",\"nGt;\":\"\\u226b\\u20d2\",\"ngt;\":\"\\u226f\",\"ngtr;\":\"\\u226f\",\"nGtv;\":\"\\u226b\\u0338\",\"nharr;\":\"\\u21ae\",\"nhArr;\":\"\\u21ce\",\"nhpar;\":\"\\u2af2\",\"ni;\":\"\\u220b\",\"nis;\":\"\\u22fc\",\"nisd;\":\"\\u22fa\",\"niv;\":\"\\u220b\",\"NJcy;\":\"\\u040a\",\"njcy;\":\"\\u045a\",\"nlarr;\":\"\\u219a\",\"nlArr;\":\"\\u21cd\",\"nldr;\":\"\\u2025\",\"nlE;\":\"\\u2266\\u0338\",\"nle;\":\"\\u2270\",\"nleftarrow;\":\"\\u219a\",\"nLeftarrow;\":\"\\u21cd\",\"nleftrightarrow;\":\"\\u21ae\",\"nLeftrightarrow;\":\"\\u21ce\",\"nleq;\":\"\\u2270\",\"nleqq;\":\"\\u2266\\u0338\",\"nleqslant;\":\"\\u2a7d\\u0338\",\"nles;\":\"\\u2a7d\\u0338\",\"nless;\":\"\\u226e\",\"nLl;\":\"\\u22d8\\u0338\",\"nlsim;\":\"\\u2274\",\"nLt;\":\"\\u226a\\u20d2\",\"nlt;\":\"\\u226e\",\"nltri;\":\"\\u22ea\",\"nltrie;\":\"\\u22ec\",\"nLtv;\":\"\\u226a\\u0338\",\"nmid;\":\"\\u2224\",\"NoBreak;\":\"\\u2060\",\"NonBreakingSpace;\":\"\\u00a0\",\"nopf;\":\"\\ud835\\udd5f\",\"Nopf;\":\"\\u2115\",\"Not;\":\"\\u2aec\",\"not;\":\"\\u00ac\",not:\"\\u00ac\",\"NotCongruent;\":\"\\u2262\",\"NotCupCap;\":\"\\u226d\",\"NotDoubleVerticalBar;\":\"\\u2226\",\"NotElement;\":\"\\u2209\",\"NotEqual;\":\"\\u2260\",\"NotEqualTilde;\":\"\\u2242\\u0338\",\"NotExists;\":\"\\u2204\",\"NotGreater;\":\"\\u226f\",\"NotGreaterEqual;\":\"\\u2271\",\"NotGreaterFullEqual;\":\"\\u2267\\u0338\",\"NotGreaterGreater;\":\"\\u226b\\u0338\",\"NotGreaterLess;\":\"\\u2279\",\"NotGreaterSlantEqual;\":\"\\u2a7e\\u0338\",\"NotGreaterTilde;\":\"\\u2275\",\"NotHumpDownHump;\":\"\\u224e\\u0338\",\"NotHumpEqual;\":\"\\u224f\\u0338\",\"notin;\":\"\\u2209\",\"notindot;\":\"\\u22f5\\u0338\",\"notinE;\":\"\\u22f9\\u0338\",\"notinva;\":\"\\u2209\",\"notinvb;\":\"\\u22f7\",\"notinvc;\":\"\\u22f6\",\"NotLeftTriangleBar;\":\"\\u29cf\\u0338\",\"NotLeftTriangle;\":\"\\u22ea\",\"NotLeftTriangleEqual;\":\"\\u22ec\",\"NotLess;\":\"\\u226e\",\"NotLessEqual;\":\"\\u2270\",\"NotLessGreater;\":\"\\u2278\",\"NotLessLess;\":\"\\u226a\\u0338\",\"NotLessSlantEqual;\":\"\\u2a7d\\u0338\",\"NotLessTilde;\":\"\\u2274\",\"NotNestedGreaterGreater;\":\"\\u2aa2\\u0338\",\"NotNestedLessLess;\":\"\\u2aa1\\u0338\",\"notni;\":\"\\u220c\",\"notniva;\":\"\\u220c\",\"notnivb;\":\"\\u22fe\",\"notnivc;\":\"\\u22fd\",\"NotPrecedes;\":\"\\u2280\",\"NotPrecedesEqual;\":\"\\u2aaf\\u0338\",\"NotPrecedesSlantEqual;\":\"\\u22e0\",\"NotReverseElement;\":\"\\u220c\",\"NotRightTriangleBar;\":\"\\u29d0\\u0338\",\"NotRightTriangle;\":\"\\u22eb\",\"NotRightTriangleEqual;\":\"\\u22ed\",\"NotSquareSubset;\":\"\\u228f\\u0338\",\"NotSquareSubsetEqual;\":\"\\u22e2\",\"NotSquareSuperset;\":\"\\u2290\\u0338\",\"NotSquareSupersetEqual;\":\"\\u22e3\",\"NotSubset;\":\"\\u2282\\u20d2\",\"NotSubsetEqual;\":\"\\u2288\",\"NotSucceeds;\":\"\\u2281\",\"NotSucceedsEqual;\":\"\\u2ab0\\u0338\",\"NotSucceedsSlantEqual;\":\"\\u22e1\",\"NotSucceedsTilde;\":\"\\u227f\\u0338\",\"NotSuperset;\":\"\\u2283\\u20d2\",\"NotSupersetEqual;\":\"\\u2289\",\"NotTilde;\":\"\\u2241\",\"NotTildeEqual;\":\"\\u2244\",\"NotTildeFullEqual;\":\"\\u2247\",\"NotTildeTilde;\":\"\\u2249\",\"NotVerticalBar;\":\"\\u2224\",\"nparallel;\":\"\\u2226\",\"npar;\":\"\\u2226\",\"nparsl;\":\"\\u2afd\\u20e5\",\"npart;\":\"\\u2202\\u0338\",\"npolint;\":\"\\u2a14\",\"npr;\":\"\\u2280\",\"nprcue;\":\"\\u22e0\",\"nprec;\":\"\\u2280\",\"npreceq;\":\"\\u2aaf\\u0338\",\"npre;\":\"\\u2aaf\\u0338\",\"nrarrc;\":\"\\u2933\\u0338\",\"nrarr;\":\"\\u219b\",\"nrArr;\":\"\\u21cf\",\"nrarrw;\":\"\\u219d\\u0338\",\"nrightarrow;\":\"\\u219b\",\"nRightarrow;\":\"\\u21cf\",\"nrtri;\":\"\\u22eb\",\"nrtrie;\":\"\\u22ed\",\"nsc;\":\"\\u2281\",\"nsccue;\":\"\\u22e1\",\"nsce;\":\"\\u2ab0\\u0338\",\"Nscr;\":\"\\ud835\\udca9\",\"nscr;\":\"\\ud835\\udcc3\",\"nshortmid;\":\"\\u2224\",\"nshortparallel;\":\"\\u2226\",\"nsim;\":\"\\u2241\",\"nsime;\":\"\\u2244\",\"nsimeq;\":\"\\u2244\",\"nsmid;\":\"\\u2224\",\"nspar;\":\"\\u2226\",\"nsqsube;\":\"\\u22e2\",\"nsqsupe;\":\"\\u22e3\",\"nsub;\":\"\\u2284\",\"nsubE;\":\"\\u2ac5\\u0338\",\"nsube;\":\"\\u2288\",\"nsubset;\":\"\\u2282\\u20d2\",\"nsubseteq;\":\"\\u2288\",\"nsubseteqq;\":\"\\u2ac5\\u0338\",\"nsucc;\":\"\\u2281\",\"nsucceq;\":\"\\u2ab0\\u0338\",\"nsup;\":\"\\u2285\",\"nsupE;\":\"\\u2ac6\\u0338\",\"nsupe;\":\"\\u2289\",\"nsupset;\":\"\\u2283\\u20d2\",\"nsupseteq;\":\"\\u2289\",\"nsupseteqq;\":\"\\u2ac6\\u0338\",\"ntgl;\":\"\\u2279\",\"Ntilde;\":\"\\u00d1\",Ntilde:\"\\u00d1\",\"ntilde;\":\"\\u00f1\",ntilde:\"\\u00f1\",\"ntlg;\":\"\\u2278\",\"ntriangleleft;\":\"\\u22ea\",\"ntrianglelefteq;\":\"\\u22ec\",\"ntriangleright;\":\"\\u22eb\",\"ntrianglerighteq;\":\"\\u22ed\",\"Nu;\":\"\\u039d\",\"nu;\":\"\\u03bd\",\"num;\":\"#\",\"numero;\":\"\\u2116\",\"numsp;\":\"\\u2007\",\"nvap;\":\"\\u224d\\u20d2\",\"nvdash;\":\"\\u22ac\",\"nvDash;\":\"\\u22ad\",\"nVdash;\":\"\\u22ae\",\"nVDash;\":\"\\u22af\",\"nvge;\":\"\\u2265\\u20d2\",\"nvgt;\":\">\\u20d2\",\"nvHarr;\":\"\\u2904\",\"nvinfin;\":\"\\u29de\",\"nvlArr;\":\"\\u2902\",\"nvle;\":\"\\u2264\\u20d2\",\"nvlt;\":\"<\\u20d2\",\"nvltrie;\":\"\\u22b4\\u20d2\",\"nvrArr;\":\"\\u2903\",\"nvrtrie;\":\"\\u22b5\\u20d2\",\"nvsim;\":\"\\u223c\\u20d2\",\"nwarhk;\":\"\\u2923\",\"nwarr;\":\"\\u2196\",\"nwArr;\":\"\\u21d6\",\"nwarrow;\":\"\\u2196\",\"nwnear;\":\"\\u2927\",\"Oacute;\":\"\\u00d3\",Oacute:\"\\u00d3\",\"oacute;\":\"\\u00f3\",oacute:\"\\u00f3\",\"oast;\":\"\\u229b\",\"Ocirc;\":\"\\u00d4\",Ocirc:\"\\u00d4\",\"ocirc;\":\"\\u00f4\",ocirc:\"\\u00f4\",\"ocir;\":\"\\u229a\",\"Ocy;\":\"\\u041e\",\"ocy;\":\"\\u043e\",\"odash;\":\"\\u229d\",\"Odblac;\":\"\\u0150\",\"odblac;\":\"\\u0151\",\"odiv;\":\"\\u2a38\",\"odot;\":\"\\u2299\",\"odsold;\":\"\\u29bc\",\"OElig;\":\"\\u0152\",\"oelig;\":\"\\u0153\",\"ofcir;\":\"\\u29bf\",\"Ofr;\":\"\\ud835\\udd12\",\"ofr;\":\"\\ud835\\udd2c\",\"ogon;\":\"\\u02db\",\"Ograve;\":\"\\u00d2\",Ograve:\"\\u00d2\",\"ograve;\":\"\\u00f2\",ograve:\"\\u00f2\",\"ogt;\":\"\\u29c1\",\"ohbar;\":\"\\u29b5\",\"ohm;\":\"\\u03a9\",\"oint;\":\"\\u222e\",\"olarr;\":\"\\u21ba\",\"olcir;\":\"\\u29be\",\"olcross;\":\"\\u29bb\",\"oline;\":\"\\u203e\",\"olt;\":\"\\u29c0\",\"Omacr;\":\"\\u014c\",\"omacr;\":\"\\u014d\",\"Omega;\":\"\\u03a9\",\"omega;\":\"\\u03c9\",\"Omicron;\":\"\\u039f\",\"omicron;\":\"\\u03bf\",\"omid;\":\"\\u29b6\",\"ominus;\":\"\\u2296\",\"Oopf;\":\"\\ud835\\udd46\",\"oopf;\":\"\\ud835\\udd60\",\"opar;\":\"\\u29b7\",\"OpenCurlyDoubleQuote;\":\"\\u201c\",\"OpenCurlyQuote;\":\"\\u2018\",\"operp;\":\"\\u29b9\",\"oplus;\":\"\\u2295\",\"orarr;\":\"\\u21bb\",\"Or;\":\"\\u2a54\",\"or;\":\"\\u2228\",\"ord;\":\"\\u2a5d\",\"order;\":\"\\u2134\",\"orderof;\":\"\\u2134\",\"ordf;\":\"\\u00aa\",ordf:\"\\u00aa\",\"ordm;\":\"\\u00ba\",ordm:\"\\u00ba\",\"origof;\":\"\\u22b6\",\"oror;\":\"\\u2a56\",\"orslope;\":\"\\u2a57\",\"orv;\":\"\\u2a5b\",\"oS;\":\"\\u24c8\",\"Oscr;\":\"\\ud835\\udcaa\",\"oscr;\":\"\\u2134\",\"Oslash;\":\"\\u00d8\",Oslash:\"\\u00d8\",\"oslash;\":\"\\u00f8\",oslash:\"\\u00f8\",\"osol;\":\"\\u2298\",\"Otilde;\":\"\\u00d5\",Otilde:\"\\u00d5\",\"otilde;\":\"\\u00f5\",otilde:\"\\u00f5\",\"otimesas;\":\"\\u2a36\",\"Otimes;\":\"\\u2a37\",\"otimes;\":\"\\u2297\",\"Ouml;\":\"\\u00d6\",Ouml:\"\\u00d6\",\"ouml;\":\"\\u00f6\",ouml:\"\\u00f6\",\"ovbar;\":\"\\u233d\",\"OverBar;\":\"\\u203e\",\"OverBrace;\":\"\\u23de\",\"OverBracket;\":\"\\u23b4\",\"OverParenthesis;\":\"\\u23dc\",\"para;\":\"\\u00b6\",para:\"\\u00b6\",\"parallel;\":\"\\u2225\",\"par;\":\"\\u2225\",\"parsim;\":\"\\u2af3\",\"parsl;\":\"\\u2afd\",\"part;\":\"\\u2202\",\"PartialD;\":\"\\u2202\",\"Pcy;\":\"\\u041f\",\"pcy;\":\"\\u043f\",\"percnt;\":\"%\",\"period;\":\".\",\"permil;\":\"\\u2030\",\"perp;\":\"\\u22a5\",\"pertenk;\":\"\\u2031\",\"Pfr;\":\"\\ud835\\udd13\",\"pfr;\":\"\\ud835\\udd2d\",\"Phi;\":\"\\u03a6\",\"phi;\":\"\\u03c6\",\"phiv;\":\"\\u03d5\",\"phmmat;\":\"\\u2133\",\"phone;\":\"\\u260e\",\"Pi;\":\"\\u03a0\",\"pi;\":\"\\u03c0\",\"pitchfork;\":\"\\u22d4\",\"piv;\":\"\\u03d6\",\"planck;\":\"\\u210f\",\"planckh;\":\"\\u210e\",\"plankv;\":\"\\u210f\",\"plusacir;\":\"\\u2a23\",\"plusb;\":\"\\u229e\",\"pluscir;\":\"\\u2a22\",\"plus;\":\"+\",\"plusdo;\":\"\\u2214\",\"plusdu;\":\"\\u2a25\",\"pluse;\":\"\\u2a72\",\"PlusMinus;\":\"\\u00b1\",\"plusmn;\":\"\\u00b1\",plusmn:\"\\u00b1\",\"plussim;\":\"\\u2a26\",\"plustwo;\":\"\\u2a27\",\"pm;\":\"\\u00b1\",\"Poincareplane;\":\"\\u210c\",\"pointint;\":\"\\u2a15\",\"popf;\":\"\\ud835\\udd61\",\"Popf;\":\"\\u2119\",\"pound;\":\"\\u00a3\",pound:\"\\u00a3\",\"prap;\":\"\\u2ab7\",\"Pr;\":\"\\u2abb\",\"pr;\":\"\\u227a\",\"prcue;\":\"\\u227c\",\"precapprox;\":\"\\u2ab7\",\"prec;\":\"\\u227a\",\"preccurlyeq;\":\"\\u227c\",\"Precedes;\":\"\\u227a\",\"PrecedesEqual;\":\"\\u2aaf\",\"PrecedesSlantEqual;\":\"\\u227c\",\"PrecedesTilde;\":\"\\u227e\",\"preceq;\":\"\\u2aaf\",\"precnapprox;\":\"\\u2ab9\",\"precneqq;\":\"\\u2ab5\",\"precnsim;\":\"\\u22e8\",\"pre;\":\"\\u2aaf\",\"prE;\":\"\\u2ab3\",\"precsim;\":\"\\u227e\",\"prime;\":\"\\u2032\",\"Prime;\":\"\\u2033\",\"primes;\":\"\\u2119\",\"prnap;\":\"\\u2ab9\",\"prnE;\":\"\\u2ab5\",\"prnsim;\":\"\\u22e8\",\"prod;\":\"\\u220f\",\"Product;\":\"\\u220f\",\"profalar;\":\"\\u232e\",\"profline;\":\"\\u2312\",\"profsurf;\":\"\\u2313\",\"prop;\":\"\\u221d\",\"Proportional;\":\"\\u221d\",\"Proportion;\":\"\\u2237\",\"propto;\":\"\\u221d\",\"prsim;\":\"\\u227e\",\"prurel;\":\"\\u22b0\",\"Pscr;\":\"\\ud835\\udcab\",\"pscr;\":\"\\ud835\\udcc5\",\"Psi;\":\"\\u03a8\",\"psi;\":\"\\u03c8\",\"puncsp;\":\"\\u2008\",\"Qfr;\":\"\\ud835\\udd14\",\"qfr;\":\"\\ud835\\udd2e\",\"qint;\":\"\\u2a0c\",\"qopf;\":\"\\ud835\\udd62\",\"Qopf;\":\"\\u211a\",\"qprime;\":\"\\u2057\",\"Qscr;\":\"\\ud835\\udcac\",\"qscr;\":\"\\ud835\\udcc6\",\"quaternions;\":\"\\u210d\",\"quatint;\":\"\\u2a16\",\"quest;\":\"?\",\"questeq;\":\"\\u225f\",\"quot;\":'\"',quot:'\"',\"QUOT;\":'\"',QUOT:'\"',\"rAarr;\":\"\\u21db\",\"race;\":\"\\u223d\\u0331\",\"Racute;\":\"\\u0154\",\"racute;\":\"\\u0155\",\"radic;\":\"\\u221a\",\"raemptyv;\":\"\\u29b3\",\"rang;\":\"\\u27e9\",\"Rang;\":\"\\u27eb\",\"rangd;\":\"\\u2992\",\"range;\":\"\\u29a5\",\"rangle;\":\"\\u27e9\",\"raquo;\":\"\\u00bb\",raquo:\"\\u00bb\",\"rarrap;\":\"\\u2975\",\"rarrb;\":\"\\u21e5\",\"rarrbfs;\":\"\\u2920\",\"rarrc;\":\"\\u2933\",\"rarr;\":\"\\u2192\",\"Rarr;\":\"\\u21a0\",\"rArr;\":\"\\u21d2\",\"rarrfs;\":\"\\u291e\",\"rarrhk;\":\"\\u21aa\",\"rarrlp;\":\"\\u21ac\",\"rarrpl;\":\"\\u2945\",\"rarrsim;\":\"\\u2974\",\"Rarrtl;\":\"\\u2916\",\"rarrtl;\":\"\\u21a3\",\"rarrw;\":\"\\u219d\",\"ratail;\":\"\\u291a\",\"rAtail;\":\"\\u291c\",\"ratio;\":\"\\u2236\",\"rationals;\":\"\\u211a\",\"rbarr;\":\"\\u290d\",\"rBarr;\":\"\\u290f\",\"RBarr;\":\"\\u2910\",\"rbbrk;\":\"\\u2773\",\"rbrace;\":\"}\",\"rbrack;\":\"]\",\"rbrke;\":\"\\u298c\",\"rbrksld;\":\"\\u298e\",\"rbrkslu;\":\"\\u2990\",\"Rcaron;\":\"\\u0158\",\"rcaron;\":\"\\u0159\",\"Rcedil;\":\"\\u0156\",\"rcedil;\":\"\\u0157\",\"rceil;\":\"\\u2309\",\"rcub;\":\"}\",\"Rcy;\":\"\\u0420\",\"rcy;\":\"\\u0440\",\"rdca;\":\"\\u2937\",\"rdldhar;\":\"\\u2969\",\"rdquo;\":\"\\u201d\",\"rdquor;\":\"\\u201d\",\"rdsh;\":\"\\u21b3\",\"real;\":\"\\u211c\",\"realine;\":\"\\u211b\",\"realpart;\":\"\\u211c\",\"reals;\":\"\\u211d\",\"Re;\":\"\\u211c\",\"rect;\":\"\\u25ad\",\"reg;\":\"\\u00ae\",reg:\"\\u00ae\",\"REG;\":\"\\u00ae\",REG:\"\\u00ae\",\"ReverseElement;\":\"\\u220b\",\"ReverseEquilibrium;\":\"\\u21cb\",\"ReverseUpEquilibrium;\":\"\\u296f\",\"rfisht;\":\"\\u297d\",\"rfloor;\":\"\\u230b\",\"rfr;\":\"\\ud835\\udd2f\",\"Rfr;\":\"\\u211c\",\"rHar;\":\"\\u2964\",\"rhard;\":\"\\u21c1\",\"rharu;\":\"\\u21c0\",\"rharul;\":\"\\u296c\",\"Rho;\":\"\\u03a1\",\"rho;\":\"\\u03c1\",\"rhov;\":\"\\u03f1\",\"RightAngleBracket;\":\"\\u27e9\",\"RightArrowBar;\":\"\\u21e5\",\"rightarrow;\":\"\\u2192\",\"RightArrow;\":\"\\u2192\",\"Rightarrow;\":\"\\u21d2\",\"RightArrowLeftArrow;\":\"\\u21c4\",\"rightarrowtail;\":\"\\u21a3\",\"RightCeiling;\":\"\\u2309\",\"RightDoubleBracket;\":\"\\u27e7\",\"RightDownTeeVector;\":\"\\u295d\",\"RightDownVectorBar;\":\"\\u2955\",\"RightDownVector;\":\"\\u21c2\",\"RightFloor;\":\"\\u230b\",\"rightharpoondown;\":\"\\u21c1\",\"rightharpoonup;\":\"\\u21c0\",\"rightleftarrows;\":\"\\u21c4\",\"rightleftharpoons;\":\"\\u21cc\",\"rightrightarrows;\":\"\\u21c9\",\"rightsquigarrow;\":\"\\u219d\",\"RightTeeArrow;\":\"\\u21a6\",\"RightTee;\":\"\\u22a2\",\"RightTeeVector;\":\"\\u295b\",\"rightthreetimes;\":\"\\u22cc\",\"RightTriangleBar;\":\"\\u29d0\",\"RightTriangle;\":\"\\u22b3\",\"RightTriangleEqual;\":\"\\u22b5\",\"RightUpDownVector;\":\"\\u294f\",\"RightUpTeeVector;\":\"\\u295c\",\"RightUpVectorBar;\":\"\\u2954\",\"RightUpVector;\":\"\\u21be\",\"RightVectorBar;\":\"\\u2953\",\"RightVector;\":\"\\u21c0\",\"ring;\":\"\\u02da\",\"risingdotseq;\":\"\\u2253\",\"rlarr;\":\"\\u21c4\",\"rlhar;\":\"\\u21cc\",\"rlm;\":\"\\u200f\",\"rmoustache;\":\"\\u23b1\",\"rmoust;\":\"\\u23b1\",\"rnmid;\":\"\\u2aee\",\"roang;\":\"\\u27ed\",\"roarr;\":\"\\u21fe\",\"robrk;\":\"\\u27e7\",\"ropar;\":\"\\u2986\",\"ropf;\":\"\\ud835\\udd63\",\"Ropf;\":\"\\u211d\",\"roplus;\":\"\\u2a2e\",\"rotimes;\":\"\\u2a35\",\"RoundImplies;\":\"\\u2970\",\"rpar;\":\")\",\"rpargt;\":\"\\u2994\",\"rppolint;\":\"\\u2a12\",\"rrarr;\":\"\\u21c9\",\"Rrightarrow;\":\"\\u21db\",\"rsaquo;\":\"\\u203a\",\"rscr;\":\"\\ud835\\udcc7\",\"Rscr;\":\"\\u211b\",\"rsh;\":\"\\u21b1\",\"Rsh;\":\"\\u21b1\",\"rsqb;\":\"]\",\"rsquo;\":\"\\u2019\",\"rsquor;\":\"\\u2019\",\"rthree;\":\"\\u22cc\",\"rtimes;\":\"\\u22ca\",\"rtri;\":\"\\u25b9\",\"rtrie;\":\"\\u22b5\",\"rtrif;\":\"\\u25b8\",\"rtriltri;\":\"\\u29ce\",\"RuleDelayed;\":\"\\u29f4\",\"ruluhar;\":\"\\u2968\",\"rx;\":\"\\u211e\",\"Sacute;\":\"\\u015a\",\"sacute;\":\"\\u015b\",\"sbquo;\":\"\\u201a\",\"scap;\":\"\\u2ab8\",\"Scaron;\":\"\\u0160\",\"scaron;\":\"\\u0161\",\"Sc;\":\"\\u2abc\",\"sc;\":\"\\u227b\",\"sccue;\":\"\\u227d\",\"sce;\":\"\\u2ab0\",\"scE;\":\"\\u2ab4\",\"Scedil;\":\"\\u015e\",\"scedil;\":\"\\u015f\",\"Scirc;\":\"\\u015c\",\"scirc;\":\"\\u015d\",\"scnap;\":\"\\u2aba\",\"scnE;\":\"\\u2ab6\",\"scnsim;\":\"\\u22e9\",\"scpolint;\":\"\\u2a13\",\"scsim;\":\"\\u227f\",\"Scy;\":\"\\u0421\",\"scy;\":\"\\u0441\",\"sdotb;\":\"\\u22a1\",\"sdot;\":\"\\u22c5\",\"sdote;\":\"\\u2a66\",\"searhk;\":\"\\u2925\",\"searr;\":\"\\u2198\",\"seArr;\":\"\\u21d8\",\"searrow;\":\"\\u2198\",\"sect;\":\"\\u00a7\",sect:\"\\u00a7\",\"semi;\":\";\",\"seswar;\":\"\\u2929\",\"setminus;\":\"\\u2216\",\"setmn;\":\"\\u2216\",\"sext;\":\"\\u2736\",\"Sfr;\":\"\\ud835\\udd16\",\"sfr;\":\"\\ud835\\udd30\",\"sfrown;\":\"\\u2322\",\"sharp;\":\"\\u266f\",\"SHCHcy;\":\"\\u0429\",\"shchcy;\":\"\\u0449\",\"SHcy;\":\"\\u0428\",\"shcy;\":\"\\u0448\",\"ShortDownArrow;\":\"\\u2193\",\"ShortLeftArrow;\":\"\\u2190\",\"shortmid;\":\"\\u2223\",\"shortparallel;\":\"\\u2225\",\"ShortRightArrow;\":\"\\u2192\",\"ShortUpArrow;\":\"\\u2191\",\"shy;\":\"\\u00ad\",shy:\"\\u00ad\",\"Sigma;\":\"\\u03a3\",\"sigma;\":\"\\u03c3\",\"sigmaf;\":\"\\u03c2\",\"sigmav;\":\"\\u03c2\",\"sim;\":\"\\u223c\",\"simdot;\":\"\\u2a6a\",\"sime;\":\"\\u2243\",\"simeq;\":\"\\u2243\",\"simg;\":\"\\u2a9e\",\"simgE;\":\"\\u2aa0\",\"siml;\":\"\\u2a9d\",\"simlE;\":\"\\u2a9f\",\"simne;\":\"\\u2246\",\"simplus;\":\"\\u2a24\",\"simrarr;\":\"\\u2972\",\"slarr;\":\"\\u2190\",\"SmallCircle;\":\"\\u2218\",\"smallsetminus;\":\"\\u2216\",\"smashp;\":\"\\u2a33\",\"smeparsl;\":\"\\u29e4\",\"smid;\":\"\\u2223\",\"smile;\":\"\\u2323\",\"smt;\":\"\\u2aaa\",\"smte;\":\"\\u2aac\",\"smtes;\":\"\\u2aac\\ufe00\",\"SOFTcy;\":\"\\u042c\",\"softcy;\":\"\\u044c\",\"solbar;\":\"\\u233f\",\"solb;\":\"\\u29c4\",\"sol;\":\"/\",\"Sopf;\":\"\\ud835\\udd4a\",\"sopf;\":\"\\ud835\\udd64\",\"spades;\":\"\\u2660\",\"spadesuit;\":\"\\u2660\",\"spar;\":\"\\u2225\",\"sqcap;\":\"\\u2293\",\"sqcaps;\":\"\\u2293\\ufe00\",\"sqcup;\":\"\\u2294\",\"sqcups;\":\"\\u2294\\ufe00\",\"Sqrt;\":\"\\u221a\",\"sqsub;\":\"\\u228f\",\"sqsube;\":\"\\u2291\",\"sqsubset;\":\"\\u228f\",\"sqsubseteq;\":\"\\u2291\",\"sqsup;\":\"\\u2290\",\"sqsupe;\":\"\\u2292\",\"sqsupset;\":\"\\u2290\",\"sqsupseteq;\":\"\\u2292\",\"square;\":\"\\u25a1\",\"Square;\":\"\\u25a1\",\"SquareIntersection;\":\"\\u2293\",\"SquareSubset;\":\"\\u228f\",\"SquareSubsetEqual;\":\"\\u2291\",\"SquareSuperset;\":\"\\u2290\",\"SquareSupersetEqual;\":\"\\u2292\",\"SquareUnion;\":\"\\u2294\",\"squarf;\":\"\\u25aa\",\"squ;\":\"\\u25a1\",\"squf;\":\"\\u25aa\",\"srarr;\":\"\\u2192\",\"Sscr;\":\"\\ud835\\udcae\",\"sscr;\":\"\\ud835\\udcc8\",\"ssetmn;\":\"\\u2216\",\"ssmile;\":\"\\u2323\",\"sstarf;\":\"\\u22c6\",\"Star;\":\"\\u22c6\",\"star;\":\"\\u2606\",\"starf;\":\"\\u2605\",\"straightepsilon;\":\"\\u03f5\",\"straightphi;\":\"\\u03d5\",\"strns;\":\"\\u00af\",\"sub;\":\"\\u2282\",\"Sub;\":\"\\u22d0\",\"subdot;\":\"\\u2abd\",\"subE;\":\"\\u2ac5\",\"sube;\":\"\\u2286\",\"subedot;\":\"\\u2ac3\",\"submult;\":\"\\u2ac1\",\"subnE;\":\"\\u2acb\",\"subne;\":\"\\u228a\",\"subplus;\":\"\\u2abf\",\"subrarr;\":\"\\u2979\",\"subset;\":\"\\u2282\",\"Subset;\":\"\\u22d0\",\"subseteq;\":\"\\u2286\",\"subseteqq;\":\"\\u2ac5\",\"SubsetEqual;\":\"\\u2286\",\"subsetneq;\":\"\\u228a\",\"subsetneqq;\":\"\\u2acb\",\"subsim;\":\"\\u2ac7\",\"subsub;\":\"\\u2ad5\",\"subsup;\":\"\\u2ad3\",\"succapprox;\":\"\\u2ab8\",\"succ;\":\"\\u227b\",\"succcurlyeq;\":\"\\u227d\",\"Succeeds;\":\"\\u227b\",\"SucceedsEqual;\":\"\\u2ab0\",\"SucceedsSlantEqual;\":\"\\u227d\",\"SucceedsTilde;\":\"\\u227f\",\"succeq;\":\"\\u2ab0\",\"succnapprox;\":\"\\u2aba\",\"succneqq;\":\"\\u2ab6\",\"succnsim;\":\"\\u22e9\",\"succsim;\":\"\\u227f\",\"SuchThat;\":\"\\u220b\",\"sum;\":\"\\u2211\",\"Sum;\":\"\\u2211\",\"sung;\":\"\\u266a\",\"sup1;\":\"\\u00b9\",sup1:\"\\u00b9\",\"sup2;\":\"\\u00b2\",sup2:\"\\u00b2\",\"sup3;\":\"\\u00b3\",sup3:\"\\u00b3\",\"sup;\":\"\\u2283\",\"Sup;\":\"\\u22d1\",\"supdot;\":\"\\u2abe\",\"supdsub;\":\"\\u2ad8\",\"supE;\":\"\\u2ac6\",\"supe;\":\"\\u2287\",\"supedot;\":\"\\u2ac4\",\"Superset;\":\"\\u2283\",\"SupersetEqual;\":\"\\u2287\",\"suphsol;\":\"\\u27c9\",\"suphsub;\":\"\\u2ad7\",\"suplarr;\":\"\\u297b\",\"supmult;\":\"\\u2ac2\",\"supnE;\":\"\\u2acc\",\"supne;\":\"\\u228b\",\"supplus;\":\"\\u2ac0\",\"supset;\":\"\\u2283\",\"Supset;\":\"\\u22d1\",\"supseteq;\":\"\\u2287\",\"supseteqq;\":\"\\u2ac6\",\"supsetneq;\":\"\\u228b\",\"supsetneqq;\":\"\\u2acc\",\"supsim;\":\"\\u2ac8\",\"supsub;\":\"\\u2ad4\",\"supsup;\":\"\\u2ad6\",\"swarhk;\":\"\\u2926\",\"swarr;\":\"\\u2199\",\"swArr;\":\"\\u21d9\",\"swarrow;\":\"\\u2199\",\"swnwar;\":\"\\u292a\",\"szlig;\":\"\\u00df\",szlig:\"\\u00df\",\"Tab;\":\"\t\",\"target;\":\"\\u2316\",\"Tau;\":\"\\u03a4\",\"tau;\":\"\\u03c4\",\"tbrk;\":\"\\u23b4\",\"Tcaron;\":\"\\u0164\",\"tcaron;\":\"\\u0165\",\"Tcedil;\":\"\\u0162\",\"tcedil;\":\"\\u0163\",\"Tcy;\":\"\\u0422\",\"tcy;\":\"\\u0442\",\"tdot;\":\"\\u20db\",\"telrec;\":\"\\u2315\",\"Tfr;\":\"\\ud835\\udd17\",\"tfr;\":\"\\ud835\\udd31\",\"there4;\":\"\\u2234\",\"therefore;\":\"\\u2234\",\"Therefore;\":\"\\u2234\",\"Theta;\":\"\\u0398\",\"theta;\":\"\\u03b8\",\"thetasym;\":\"\\u03d1\",\"thetav;\":\"\\u03d1\",\"thickapprox;\":\"\\u2248\",\"thicksim;\":\"\\u223c\",\"ThickSpace;\":\"\\u205f\\u200a\",\"ThinSpace;\":\"\\u2009\",\"thinsp;\":\"\\u2009\",\"thkap;\":\"\\u2248\",\"thksim;\":\"\\u223c\",\"THORN;\":\"\\u00de\",THORN:\"\\u00de\",\"thorn;\":\"\\u00fe\",thorn:\"\\u00fe\",\"tilde;\":\"\\u02dc\",\"Tilde;\":\"\\u223c\",\"TildeEqual;\":\"\\u2243\",\"TildeFullEqual;\":\"\\u2245\",\"TildeTilde;\":\"\\u2248\",\"timesbar;\":\"\\u2a31\",\"timesb;\":\"\\u22a0\",\"times;\":\"\\u00d7\",times:\"\\u00d7\",\"timesd;\":\"\\u2a30\",\"tint;\":\"\\u222d\",\"toea;\":\"\\u2928\",\"topbot;\":\"\\u2336\",\"topcir;\":\"\\u2af1\",\"top;\":\"\\u22a4\",\"Topf;\":\"\\ud835\\udd4b\",\"topf;\":\"\\ud835\\udd65\",\"topfork;\":\"\\u2ada\",\"tosa;\":\"\\u2929\",\"tprime;\":\"\\u2034\",\"trade;\":\"\\u2122\",\"TRADE;\":\"\\u2122\",\"triangle;\":\"\\u25b5\",\"triangledown;\":\"\\u25bf\",\"triangleleft;\":\"\\u25c3\",\"trianglelefteq;\":\"\\u22b4\",\"triangleq;\":\"\\u225c\",\"triangleright;\":\"\\u25b9\",\"trianglerighteq;\":\"\\u22b5\",\"tridot;\":\"\\u25ec\",\"trie;\":\"\\u225c\",\"triminus;\":\"\\u2a3a\",\"TripleDot;\":\"\\u20db\",\"triplus;\":\"\\u2a39\",\"trisb;\":\"\\u29cd\",\"tritime;\":\"\\u2a3b\",\"trpezium;\":\"\\u23e2\",\"Tscr;\":\"\\ud835\\udcaf\",\"tscr;\":\"\\ud835\\udcc9\",\"TScy;\":\"\\u0426\",\"tscy;\":\"\\u0446\",\"TSHcy;\":\"\\u040b\",\"tshcy;\":\"\\u045b\",\"Tstrok;\":\"\\u0166\",\"tstrok;\":\"\\u0167\",\"twixt;\":\"\\u226c\",\"twoheadleftarrow;\":\"\\u219e\",\"twoheadrightarrow;\":\"\\u21a0\",\"Uacute;\":\"\\u00da\",Uacute:\"\\u00da\",\"uacute;\":\"\\u00fa\",uacute:\"\\u00fa\",\"uarr;\":\"\\u2191\",\"Uarr;\":\"\\u219f\",\"uArr;\":\"\\u21d1\",\"Uarrocir;\":\"\\u2949\",\"Ubrcy;\":\"\\u040e\",\"ubrcy;\":\"\\u045e\",\"Ubreve;\":\"\\u016c\",\"ubreve;\":\"\\u016d\",\"Ucirc;\":\"\\u00db\",Ucirc:\"\\u00db\",\"ucirc;\":\"\\u00fb\",ucirc:\"\\u00fb\",\"Ucy;\":\"\\u0423\",\"ucy;\":\"\\u0443\",\"udarr;\":\"\\u21c5\",\"Udblac;\":\"\\u0170\",\"udblac;\":\"\\u0171\",\"udhar;\":\"\\u296e\",\"ufisht;\":\"\\u297e\",\"Ufr;\":\"\\ud835\\udd18\",\"ufr;\":\"\\ud835\\udd32\",\"Ugrave;\":\"\\u00d9\",Ugrave:\"\\u00d9\",\"ugrave;\":\"\\u00f9\",ugrave:\"\\u00f9\",\"uHar;\":\"\\u2963\",\"uharl;\":\"\\u21bf\",\"uharr;\":\"\\u21be\",\"uhblk;\":\"\\u2580\",\"ulcorn;\":\"\\u231c\",\"ulcorner;\":\"\\u231c\",\"ulcrop;\":\"\\u230f\",\"ultri;\":\"\\u25f8\",\"Umacr;\":\"\\u016a\",\"umacr;\":\"\\u016b\",\"uml;\":\"\\u00a8\",uml:\"\\u00a8\",\"UnderBar;\":\"_\",\"UnderBrace;\":\"\\u23df\",\"UnderBracket;\":\"\\u23b5\",\"UnderParenthesis;\":\"\\u23dd\",\"Union;\":\"\\u22c3\",\"UnionPlus;\":\"\\u228e\",\"Uogon;\":\"\\u0172\",\"uogon;\":\"\\u0173\",\"Uopf;\":\"\\ud835\\udd4c\",\"uopf;\":\"\\ud835\\udd66\",\"UpArrowBar;\":\"\\u2912\",\"uparrow;\":\"\\u2191\",\"UpArrow;\":\"\\u2191\",\"Uparrow;\":\"\\u21d1\",\"UpArrowDownArrow;\":\"\\u21c5\",\"updownarrow;\":\"\\u2195\",\"UpDownArrow;\":\"\\u2195\",\"Updownarrow;\":\"\\u21d5\",\"UpEquilibrium;\":\"\\u296e\",\"upharpoonleft;\":\"\\u21bf\",\"upharpoonright;\":\"\\u21be\",\"uplus;\":\"\\u228e\",\"UpperLeftArrow;\":\"\\u2196\",\"UpperRightArrow;\":\"\\u2197\",\"upsi;\":\"\\u03c5\",\"Upsi;\":\"\\u03d2\",\"upsih;\":\"\\u03d2\",\"Upsilon;\":\"\\u03a5\",\"upsilon;\":\"\\u03c5\",\"UpTeeArrow;\":\"\\u21a5\",\"UpTee;\":\"\\u22a5\",\"upuparrows;\":\"\\u21c8\",\"urcorn;\":\"\\u231d\",\"urcorner;\":\"\\u231d\",\"urcrop;\":\"\\u230e\",\"Uring;\":\"\\u016e\",\"uring;\":\"\\u016f\",\"urtri;\":\"\\u25f9\",\"Uscr;\":\"\\ud835\\udcb0\",\"uscr;\":\"\\ud835\\udcca\",\"utdot;\":\"\\u22f0\",\"Utilde;\":\"\\u0168\",\"utilde;\":\"\\u0169\",\"utri;\":\"\\u25b5\",\"utrif;\":\"\\u25b4\",\"uuarr;\":\"\\u21c8\",\"Uuml;\":\"\\u00dc\",Uuml:\"\\u00dc\",\"uuml;\":\"\\u00fc\",uuml:\"\\u00fc\",\"uwangle;\":\"\\u29a7\",\"vangrt;\":\"\\u299c\",\"varepsilon;\":\"\\u03f5\",\"varkappa;\":\"\\u03f0\",\"varnothing;\":\"\\u2205\",\"varphi;\":\"\\u03d5\",\"varpi;\":\"\\u03d6\",\"varpropto;\":\"\\u221d\",\"varr;\":\"\\u2195\",\"vArr;\":\"\\u21d5\",\"varrho;\":\"\\u03f1\",\"varsigma;\":\"\\u03c2\",\"varsubsetneq;\":\"\\u228a\\ufe00\",\"varsubsetneqq;\":\"\\u2acb\\ufe00\",\"varsupsetneq;\":\"\\u228b\\ufe00\",\"varsupsetneqq;\":\"\\u2acc\\ufe00\",\"vartheta;\":\"\\u03d1\",\"vartriangleleft;\":\"\\u22b2\",\"vartriangleright;\":\"\\u22b3\",\"vBar;\":\"\\u2ae8\",\"Vbar;\":\"\\u2aeb\",\"vBarv;\":\"\\u2ae9\",\"Vcy;\":\"\\u0412\",\"vcy;\":\"\\u0432\",\"vdash;\":\"\\u22a2\",\"vDash;\":\"\\u22a8\",\"Vdash;\":\"\\u22a9\",\"VDash;\":\"\\u22ab\",\"Vdashl;\":\"\\u2ae6\",\"veebar;\":\"\\u22bb\",\"vee;\":\"\\u2228\",\"Vee;\":\"\\u22c1\",\"veeeq;\":\"\\u225a\",\"vellip;\":\"\\u22ee\",\"verbar;\":\"|\",\"Verbar;\":\"\\u2016\",\"vert;\":\"|\",\"Vert;\":\"\\u2016\",\"VerticalBar;\":\"\\u2223\",\"VerticalLine;\":\"|\",\"VerticalSeparator;\":\"\\u2758\",\"VerticalTilde;\":\"\\u2240\",\"VeryThinSpace;\":\"\\u200a\",\"Vfr;\":\"\\ud835\\udd19\",\"vfr;\":\"\\ud835\\udd33\",\"vltri;\":\"\\u22b2\",\"vnsub;\":\"\\u2282\\u20d2\",\"vnsup;\":\"\\u2283\\u20d2\",\"Vopf;\":\"\\ud835\\udd4d\",\"vopf;\":\"\\ud835\\udd67\",\"vprop;\":\"\\u221d\",\"vrtri;\":\"\\u22b3\",\"Vscr;\":\"\\ud835\\udcb1\",\"vscr;\":\"\\ud835\\udccb\",\"vsubnE;\":\"\\u2acb\\ufe00\",\"vsubne;\":\"\\u228a\\ufe00\",\"vsupnE;\":\"\\u2acc\\ufe00\",\"vsupne;\":\"\\u228b\\ufe00\",\"Vvdash;\":\"\\u22aa\",\"vzigzag;\":\"\\u299a\",\"Wcirc;\":\"\\u0174\",\"wcirc;\":\"\\u0175\",\"wedbar;\":\"\\u2a5f\",\"wedge;\":\"\\u2227\",\"Wedge;\":\"\\u22c0\",\"wedgeq;\":\"\\u2259\",\"weierp;\":\"\\u2118\",\"Wfr;\":\"\\ud835\\udd1a\",\"wfr;\":\"\\ud835\\udd34\",\"Wopf;\":\"\\ud835\\udd4e\",\"wopf;\":\"\\ud835\\udd68\",\"wp;\":\"\\u2118\",\"wr;\":\"\\u2240\",\"wreath;\":\"\\u2240\",\"Wscr;\":\"\\ud835\\udcb2\",\"wscr;\":\"\\ud835\\udccc\",\"xcap;\":\"\\u22c2\",\"xcirc;\":\"\\u25ef\",\"xcup;\":\"\\u22c3\",\"xdtri;\":\"\\u25bd\",\"Xfr;\":\"\\ud835\\udd1b\",\"xfr;\":\"\\ud835\\udd35\",\"xharr;\":\"\\u27f7\",\"xhArr;\":\"\\u27fa\",\"Xi;\":\"\\u039e\",\"xi;\":\"\\u03be\",\"xlarr;\":\"\\u27f5\",\"xlArr;\":\"\\u27f8\",\"xmap;\":\"\\u27fc\",\"xnis;\":\"\\u22fb\",\"xodot;\":\"\\u2a00\",\"Xopf;\":\"\\ud835\\udd4f\",\"xopf;\":\"\\ud835\\udd69\",\"xoplus;\":\"\\u2a01\",\"xotime;\":\"\\u2a02\",\"xrarr;\":\"\\u27f6\",\"xrArr;\":\"\\u27f9\",\"Xscr;\":\"\\ud835\\udcb3\",\"xscr;\":\"\\ud835\\udccd\",\"xsqcup;\":\"\\u2a06\",\"xuplus;\":\"\\u2a04\",\"xutri;\":\"\\u25b3\",\"xvee;\":\"\\u22c1\",\"xwedge;\":\"\\u22c0\",\"Yacute;\":\"\\u00dd\",Yacute:\"\\u00dd\",\"yacute;\":\"\\u00fd\",yacute:\"\\u00fd\",\"YAcy;\":\"\\u042f\",\"yacy;\":\"\\u044f\",\"Ycirc;\":\"\\u0176\",\"ycirc;\":\"\\u0177\",\"Ycy;\":\"\\u042b\",\"ycy;\":\"\\u044b\",\"yen;\":\"\\u00a5\",yen:\"\\u00a5\",\"Yfr;\":\"\\ud835\\udd1c\",\"yfr;\":\"\\ud835\\udd36\",\"YIcy;\":\"\\u0407\",\"yicy;\":\"\\u0457\",\"Yopf;\":\"\\ud835\\udd50\",\"yopf;\":\"\\ud835\\udd6a\",\"Yscr;\":\"\\ud835\\udcb4\",\"yscr;\":\"\\ud835\\udcce\",\"YUcy;\":\"\\u042e\",\"yucy;\":\"\\u044e\",\"yuml;\":\"\\u00ff\",yuml:\"\\u00ff\",\"Yuml;\":\"\\u0178\",\"Zacute;\":\"\\u0179\",\"zacute;\":\"\\u017a\",\"Zcaron;\":\"\\u017d\",\"zcaron;\":\"\\u017e\",\"Zcy;\":\"\\u0417\",\"zcy;\":\"\\u0437\",\"Zdot;\":\"\\u017b\",\"zdot;\":\"\\u017c\",\"zeetrf;\":\"\\u2128\",\"ZeroWidthSpace;\":\"\\u200b\",\"Zeta;\":\"\\u0396\",\"zeta;\":\"\\u03b6\",\"zfr;\":\"\\ud835\\udd37\",\"Zfr;\":\"\\u2128\",\"ZHcy;\":\"\\u0416\",\"zhcy;\":\"\\u0436\",\"zigrarr;\":\"\\u21dd\",\"zopf;\":\"\\ud835\\udd6b\",\"Zopf;\":\"\\u2124\",\"Zscr;\":\"\\ud835\\udcb5\",\"zscr;\":\"\\ud835\\udccf\",\"zwj;\":\"\\u200d\",\"zwnj;\":\"\\u200c\"}},{}],13:[function(e,t,n){function u(e,t){return r.isUndefined(t)?\"\"+t:r.isNumber(t)&&(isNaN(t)||!isFinite(t))?t.toString():r.isFunction(t)||r.isRegExp(t)?t.toString():t}function a(e,t){return r.isString(e)?e.length<t?e:e.slice(0,t):e}function f(e){return a(JSON.stringify(e.actual,u),128)+\" \"+e.operator+\" \"+a(JSON.stringify(e.expected,u),128)}function l(e,t,n,r,i){throw new o.AssertionError({message:n,actual:e,expected:t,operator:r,stackStartFunction:i})}function c(e,t){e||l(e,!0,t,\"==\",o.ok)}function h(e,t){if(e===t)return!0;if(r.isBuffer(e)&&r.isBuffer(t)){if(e.length!=t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}return r.isDate(e)&&r.isDate(t)?e.getTime()===t.getTime():r.isRegExp(e)&&r.isRegExp(t)?e.source===t.source&&e.global===t.global&&e.multiline===t.multiline&&e.lastIndex===t.lastIndex&&e.ignoreCase===t.ignoreCase:!r.isObject(e)&&!r.isObject(t)?e==t:d(e,t)}function p(e){return Object.prototype.toString.call(e)==\"[object Arguments]\"}function d(e,t){if(r.isNullOrUndefined(e)||r.isNullOrUndefined(t))return!1;if(e.prototype!==t.prototype)return!1;if(p(e))return p(t)?(e=i.call(e),t=i.call(t),h(e,t)):!1;try{var n=g(e),s=g(t),o,u}catch(a){return!1}if(n.length!=s.length)return!1;n.sort(),s.sort();for(u=n.length-1;u>=0;u--)if(n[u]!=s[u])return!1;for(u=n.length-1;u>=0;u--){o=n[u];if(!h(e[o],t[o]))return!1}return!0}function v(e,t){return!e||!t?!1:Object.prototype.toString.call(t)==\"[object RegExp]\"?t.test(e):e instanceof t?!0:t.call({},e)===!0?!0:!1}function m(e,t,n,i){var s;r.isString(n)&&(i=n,n=null);try{t()}catch(o){s=o}i=(n&&n.name?\" (\"+n.name+\").\":\".\")+(i?\" \"+i:\".\"),e&&!s&&l(s,n,\"Missing expected exception\"+i),!e&&v(s,n)&&l(s,n,\"Got unwanted exception\"+i);if(e&&s&&n&&!v(s,n)||!e&&s)throw s}var r=e(\"util/\"),i=Array.prototype.slice,s=Object.prototype.hasOwnProperty,o=t.exports=c;o.AssertionError=function(t){this.name=\"AssertionError\",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=f(this),this.generatedMessage=!0);var n=t.stackStartFunction||l;if(Error.captureStackTrace)Error.captureStackTrace(this,n);else{var r=new Error;if(r.stack){var i=r.stack,s=n.name,o=i.indexOf(\"\\n\"+s);if(o>=0){var u=i.indexOf(\"\\n\",o+1);i=i.substring(u+1)}this.stack=i}}},r.inherits(o.AssertionError,Error),o.fail=l,o.ok=c,o.equal=function(t,n,r){t!=n&&l(t,n,r,\"==\",o.equal)},o.notEqual=function(t,n,r){t==n&&l(t,n,r,\"!=\",o.notEqual)},o.deepEqual=function(t,n,r){h(t,n)||l(t,n,r,\"deepEqual\",o.deepEqual)},o.notDeepEqual=function(t,n,r){h(t,n)&&l(t,n,r,\"notDeepEqual\",o.notDeepEqual)},o.strictEqual=function(t,n,r){t!==n&&l(t,n,r,\"===\",o.strictEqual)},o.notStrictEqual=function(t,n,r){t===n&&l(t,n,r,\"!==\",o.notStrictEqual)},o.throws=function(e,t,n){m.apply(this,[!0].concat(i.call(arguments)))},o.doesNotThrow=function(e,t){m.apply(this,[!1].concat(i.call(arguments)))},o.ifError=function(e){if(e)throw e};var g=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}},{\"util/\":15}],14:[function(e,t,n){t.exports=function(t){return t&&typeof t==\"object\"&&typeof t.copy==\"function\"&&typeof t.fill==\"function\"&&typeof t.readUInt8==\"function\"}},{}],15:[function(e,t,n){(function(t,r){function u(e,t){var r={seen:[],stylize:f};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),y(t)?r.showHidden=t:t&&n._extend(r,t),T(r.showHidden)&&(r.showHidden=!1),T(r.depth)&&(r.depth=2),T(r.colors)&&(r.colors=!1),T(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=a),c(r,e,r.depth)}function a(e,t){var n=u.styles[t];return n?\"\u001b[\"+u.colors[n][0]+\"m\"+e+\"\u001b[\"+u.colors[n][1]+\"m\":e}function f(e,t){return e}function l(e){var t={};return e.forEach(function(e,n){t[e]=!0}),t}function c(e,t,r){if(e.customInspect&&t&&A(t.inspect)&&t.inspect!==n.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(r,e);return S(i)||(i=c(e,i,r)),i}var s=h(e,t);if(s)return s;var o=Object.keys(t),u=l(o);e.showHidden&&(o=Object.getOwnPropertyNames(t));if(L(t)&&(o.indexOf(\"message\")>=0||o.indexOf(\"description\")>=0))return p(t);if(o.length===0){if(A(t)){var a=t.name?\": \"+t.name:\"\";return e.stylize(\"[Function\"+a+\"]\",\"special\")}if(N(t))return e.stylize(RegExp.prototype.toString.call(t),\"regexp\");if(k(t))return e.stylize(Date.prototype.toString.call(t),\"date\");if(L(t))return p(t)}var f=\"\",y=!1,b=[\"{\",\"}\"];g(t)&&(y=!0,b=[\"[\",\"]\"]);if(A(t)){var w=t.name?\": \"+t.name:\"\";f=\" [Function\"+w+\"]\"}N(t)&&(f=\" \"+RegExp.prototype.toString.call(t)),k(t)&&(f=\" \"+Date.prototype.toUTCString.call(t)),L(t)&&(f=\" \"+p(t));if(o.length!==0||!!y&&t.length!=0){if(r<0)return N(t)?e.stylize(RegExp.prototype.toString.call(t),\"regexp\"):e.stylize(\"[Object]\",\"special\");e.seen.push(t);var E;return y?E=d(e,t,r,u,o):E=o.map(function(n){return v(e,t,r,u,n,y)}),e.seen.pop(),m(E,f,b)}return b[0]+f+b[1]}function h(e,t){if(T(t))return e.stylize(\"undefined\",\"undefined\");if(S(t)){var n=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(n,\"string\")}if(E(t))return e.stylize(\"\"+t,\"number\");if(y(t))return e.stylize(\"\"+t,\"boolean\");if(b(t))return e.stylize(\"null\",\"null\")}function p(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function d(e,t,n,r,i){var s=[];for(var o=0,u=t.length;o<u;++o)H(t,String(o))?s.push(v(e,t,n,r,String(o),!0)):s.push(\"\");return i.forEach(function(i){i.match(/^\\d+$/)||s.push(v(e,t,n,r,i,!0))}),s}function v(e,t,n,r,i,s){var o,u,a;a=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]},a.get?a.set?u=e.stylize(\"[Getter/Setter]\",\"special\"):u=e.stylize(\"[Getter]\",\"special\"):a.set&&(u=e.stylize(\"[Setter]\",\"special\")),H(r,i)||(o=\"[\"+i+\"]\"),u||(e.seen.indexOf(a.value)<0?(b(n)?u=c(e,a.value,null):u=c(e,a.value,n-1),u.indexOf(\"\\n\")>-1&&(s?u=u.split(\"\\n\").map(function(e){return\"  \"+e}).join(\"\\n\").substr(2):u=\"\\n\"+u.split(\"\\n\").map(function(e){return\"   \"+e}).join(\"\\n\"))):u=e.stylize(\"[Circular]\",\"special\"));if(T(o)){if(s&&i.match(/^\\d+$/))return u;o=JSON.stringify(\"\"+i),o.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,\"name\")):(o=o.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),o=e.stylize(o,\"string\"))}return o+\": \"+u}function m(e,t,n){var r=0,i=e.reduce(function(e,t){return r++,t.indexOf(\"\\n\")>=0&&r++,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1},0);return i>60?n[0]+(t===\"\"?\"\":t+\"\\n \")+\" \"+e.join(\",\\n  \")+\" \"+n[1]:n[0]+t+\" \"+e.join(\", \")+\" \"+n[1]}function g(e){return Array.isArray(e)}function y(e){return typeof e==\"boolean\"}function b(e){return e===null}function w(e){return e==null}function E(e){return typeof e==\"number\"}function S(e){return typeof e==\"string\"}function x(e){return typeof e==\"symbol\"}function T(e){return e===void 0}function N(e){return C(e)&&M(e)===\"[object RegExp]\"}function C(e){return typeof e==\"object\"&&e!==null}function k(e){return C(e)&&M(e)===\"[object Date]\"}function L(e){return C(e)&&(M(e)===\"[object Error]\"||e instanceof Error)}function A(e){return typeof e==\"function\"}function O(e){return e===null||typeof e==\"boolean\"||typeof e==\"number\"||typeof e==\"string\"||typeof e==\"symbol\"||typeof e==\"undefined\"}function M(e){return Object.prototype.toString.call(e)}function _(e){return e<10?\"0\"+e.toString(10):e.toString(10)}function P(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(\":\");return[e.getDate(),D[e.getMonth()],t].join(\" \")}function H(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var i=/%[sdj%]/g;n.format=function(e){if(!S(e)){var t=[];for(var n=0;n<arguments.length;n++)t.push(u(arguments[n]));return t.join(\" \")}var n=1,r=arguments,s=r.length,o=String(e).replace(i,function(e){if(e===\"%%\")return\"%\";if(n>=s)return e;switch(e){case\"%s\":return String(r[n++]);case\"%d\":return Number(r[n++]);case\"%j\":try{return JSON.stringify(r[n++])}catch(t){return\"[Circular]\"};default:return e}});for(var a=r[n];n<s;a=r[++n])b(a)||!C(a)?o+=\" \"+a:o+=\" \"+u(a);return o},n.deprecate=function(e,i){function o(){if(!s){if(t.throwDeprecation)throw new Error(i);t.traceDeprecation?console.trace(i):console.error(i),s=!0}return e.apply(this,arguments)}if(T(r.process))return function(){return n.deprecate(e,i).apply(this,arguments)};if(t.noDeprecation===!0)return e;var s=!1;return o};var s={},o;n.debuglog=function(e){T(o)&&(o=t.env.NODE_DEBUG||\"\"),e=e.toUpperCase();if(!s[e])if((new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\")).test(o)){var r=t.pid;s[e]=function(){var t=n.format.apply(n,arguments);console.error(\"%s %d: %s\",e,r,t)}}else s[e]=function(){};return s[e]},n.inspect=u,u.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},u.styles={special:\"cyan\",number:\"yellow\",\"boolean\":\"yellow\",\"undefined\":\"grey\",\"null\":\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},n.isArray=g,n.isBoolean=y,n.isNull=b,n.isNullOrUndefined=w,n.isNumber=E,n.isString=S,n.isSymbol=x,n.isUndefined=T,n.isRegExp=N,n.isObject=C,n.isDate=k,n.isError=L,n.isFunction=A,n.isPrimitive=O,n.isBuffer=e(\"./support/isBuffer\");var D=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];n.log=function(){console.log(\"%s - %s\",P(),n.format.apply(n,arguments))},n.inherits=e(\"inherits\"),n._extend=function(e,t){if(!t||!C(t))return e;var n=Object.keys(t),r=n.length;while(r--)e[n[r]]=t[n[r]];return e}}).call(this,e(\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\"),typeof self!=\"undefined\"?self:typeof window!=\"undefined\"?window:{})},{\"./support/isBuffer\":14,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,inherits:17}],16:[function(e,t,n){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||undefined}function i(e){return typeof e==\"function\"}function s(e){return typeof e==\"number\"}function o(e){return typeof e==\"object\"&&e!==null}function u(e){return e===void 0}t.exports=r,r.EventEmitter=r,r.prototype._events=undefined,r.prototype._maxListeners=undefined,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!s(e)||e<0||isNaN(e))throw TypeError(\"n must be a positive number\");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,n,r,s,a,f;this._events||(this._events={});if(e===\"error\")if(!this._events.error||o(this._events.error)&&!this._events.error.length)throw t=arguments[1],t instanceof Error?t:TypeError('Uncaught, unspecified \"error\" event.');n=this._events[e];if(u(n))return!1;if(i(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];n.apply(this,s)}else if(o(n)){r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];f=n.slice(),r=f.length;for(a=0;a<r;a++)f[a].apply(this,s)}return!0},r.prototype.addListener=function(e,t){var n;if(!i(t))throw TypeError(\"listener must be a function\");this._events||(this._events={}),this._events.newListener&&this.emit(\"newListener\",e,i(t.listener)?t.listener:t),this._events[e]?o(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t;if(o(this._events[e])&&!this._events[e].warned){var n;u(this._maxListeners)?n=r.defaultMaxListeners:n=this._maxListeners,n&&n>0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error(\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\",this._events[e].length),console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError(\"listener must be a function\");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError(\"listener must be a function\");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit(\"removeListener\",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit(\"removeListener\",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t===\"removeListener\")continue;this.removeAllListeners(t)}return this.removeAllListeners(\"removeListener\"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}],17:[function(e,t,n){typeof Object.create==\"function\"?t.exports=function(t,n){t.super_=n,t.prototype=Object.create(n.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,n){t.super_=n;var r=function(){};r.prototype=n.prototype,t.prototype=new r,t.prototype.constructor=t}},{}],18:[function(e,t,n){function i(){}var r=t.exports={};r.nextTick=function(){var e=typeof window!=\"undefined\"&&window.setImmediate,t=typeof window!=\"undefined\"&&window.postMessage&&window.addEventListener;if(e)return function(e){return window.setImmediate(e)};if(t){var n=[];return window.addEventListener(\"message\",function(e){var t=e.source;if((t===window||t===null)&&e.data===\"process-tick\"){e.stopPropagation();if(n.length>0){var r=n.shift();r()}}},!0),function(t){n.push(t),window.postMessage(\"process-tick\",\"*\")}}return function(t){setTimeout(t,0)}}(),r.title=\"browser\",r.browser=!0,r.env={},r.argv=[],r.on=i,r.once=i,r.off=i,r.emit=i,r.binding=function(e){throw new Error(\"process.binding is not supported\")},r.cwd=function(){return\"/\"},r.chdir=function(e){throw new Error(\"process.chdir is not supported\")}},{}],19:[function(e,t,n){t.exports=e(14)},{}],20:[function(e,t,n){t.exports=e(15)},{\"./support/isBuffer\":19,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,inherits:17}]},{},[9])(9)}),define(\"ace/mode/html_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./html/saxparser\").SAXParser,u={\"expected-doctype-but-got-start-tag\":\"info\",\"expected-doctype-but-got-chars\":\"info\",\"non-html-root\":\"info\"},a=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.context=null};r.inherits(a,s),function(){this.setOptions=function(e){this.context=e.context},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return;var t=new o,n=[],r=function(){};t.contentHandler={startDocument:r,endDocument:r,startElement:r,endElement:r,characters:r},t.errorHandler={error:function(e,t,r){n.push({row:t.line,column:t.column,text:e,type:u[r]||\"error\"})}},this.context?t.parseFragment(e,this.context):t.parse(e),this.sender.emit(\"error\",n)}}.call(a.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min/worker-javascript.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/javascript/jshint\",[],function(e,t,n){n.exports=function r(t,n,i){function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(s)return s(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return o(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var s=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)o(i[u]);return o(i[0])}({\"/node_modules/browserify/node_modules/events/events.js\":[function(e,t,n){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||undefined}function i(e){return typeof e==\"function\"}function s(e){return typeof e==\"number\"}function o(e){return typeof e==\"object\"&&e!==null}function u(e){return e===void 0}t.exports=r,r.EventEmitter=r,r.prototype._events=undefined,r.prototype._maxListeners=undefined,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!s(e)||e<0||isNaN(e))throw TypeError(\"n must be a positive number\");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,n,r,s,a,f;this._events||(this._events={});if(e===\"error\")if(!this._events.error||o(this._events.error)&&!this._events.error.length)throw t=arguments[1],t instanceof Error?t:TypeError('Uncaught, unspecified \"error\" event.');n=this._events[e];if(u(n))return!1;if(i(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];n.apply(this,s)}else if(o(n)){r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];f=n.slice(),r=f.length;for(a=0;a<r;a++)f[a].apply(this,s)}return!0},r.prototype.addListener=function(e,t){var n;if(!i(t))throw TypeError(\"listener must be a function\");this._events||(this._events={}),this._events.newListener&&this.emit(\"newListener\",e,i(t.listener)?t.listener:t),this._events[e]?o(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t;if(o(this._events[e])&&!this._events[e].warned){var n;u(this._maxListeners)?n=r.defaultMaxListeners:n=this._maxListeners,n&&n>0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error(\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\",this._events[e].length),typeof console.trace==\"function\"&&console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError(\"listener must be a function\");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError(\"listener must be a function\");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit(\"removeListener\",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit(\"removeListener\",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t===\"removeListener\")continue;this.removeAllListeners(t)}return this.removeAllListeners(\"removeListener\"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}],\"/node_modules/jshint/data/ascii-identifier-data.js\":[function(e,t,n){var r=[];for(var i=0;i<128;i++)r[i]=i===36||i>=65&&i<=90||i===95||i>=97&&i<=122;var s=[];for(var i=0;i<128;i++)s[i]=r[i]||i>=48&&i<=57;t.exports={asciiIdentifierStartTable:r,asciiIdentifierPartTable:s}},{}],\"/node_modules/jshint/lodash.js\":[function(e,t,n){(function(e){(function(){function $(e,t,n){var r=e.length,i=n?r:-1;while(n?i--:++i<r)if(t(e[i],i,e))return i;return-1}function J(e,t,n){if(t!==t)return G(e,n);var r=n-1,i=e.length;while(++r<i)if(e[r]===t)return r;return-1}function K(e){return typeof e==\"function\"||!1}function Q(e){return typeof e==\"string\"?e:e==null?\"\":e+\"\"}function G(e,t,n){var r=e.length,i=t+(n?0:-1);while(n?i--:++i<r){var s=e[i];if(s!==s)return i}return-1}function Y(e){return!!e&&typeof e==\"object\"}function Ct(){}function Lt(e,t){var n=-1,r=e.length;t||(t=Array(r));while(++n<r)t[n]=e[n];return t}function At(e,t){var n=-1,r=e.length;while(++n<r)if(t(e[n],n,e)===!1)break;return e}function Ot(e,t){var n=-1,r=e.length,i=-1,s=[];while(++n<r){var o=e[n];t(o,n,e)&&(s[++i]=o)}return s}function Mt(e,t){var n=-1,r=e.length,i=Array(r);while(++n<r)i[n]=t(e[n],n,e);return i}function _t(e){var t=-1,n=e.length,r=wt;while(++t<n){var i=e[t];i>r&&(r=i)}return r}function Dt(e,t){var n=-1,r=e.length;while(++n<r)if(t(e[n],n,e))return!0;return!1}function Pt(e,t,n){var i=rr(t);lt.apply(i,bn(t));var s=-1,o=i.length;while(++s<o){var u=i[s],a=e[u],f=n(a,t[u],u,e,t);if((f===f?f!==a:a===a)||a===r&&!(u in e))e[u]=f}return e}function Bt(e,t,n){n||(n={});var r=-1,i=t.length;while(++r<i){var s=t[r];n[s]=e[s]}return n}function jt(e,t,n){var i=typeof e;return i==\"function\"?t===r?e:on(e,t,n):e==null?lr:i==\"object\"?Jt(e):t===r?cr(e):Kt(e,t)}function Ft(e,t,n,i,s,u,a){var f;n&&(f=s?n(e,i,s):n(e));if(f!==r)return f;if(!Jn(e))return e;var l=Xn(e);if(l){f=wn(e);if(!t)return Lt(e,f)}else{var h=rt.call(e),p=h==c;if(!(h==d||h==o||p&&!s))return F[h]?Sn(e,h,t):s?e:{};f=En(p?{}:e);if(!t)return Ht(f,e)}u||(u=[]),a||(a=[]);var v=u.length;while(v--)if(u[v]==e)return a[v];return u.push(e),a.push(f),(l?At:zt)(e,function(r,i){f[i]=Ft(r,t,n,i,e,u,a)}),f}function qt(e,t){var n=[];return It(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function Ut(e,t){return Rt(e,t,ir)}function zt(e,t){return Rt(e,t,rr)}function Wt(e,t,n){if(e==null)return;n!==r&&n in On(e)&&(t=[n]);var i=-1,s=t.length;while(e!=null&&++i<s)var o=e=e[t[i]];return o}function Xt(e,t,n,r,i,s){if(e===t)return e!==0||1/e==1/t;var o=typeof e,u=typeof t;return o!=\"function\"&&o!=\"object\"&&u!=\"function\"&&u!=\"object\"||e==null||t==null?e!==e&&t!==t:Vt(e,t,Xt,n,r,i,s)}function Vt(e,t,n,r,i,s,a){var f=Xn(e),l=Xn(t),c=u,h=u;f||(c=rt.call(e),c==o?c=d:c!=d&&(f=Zn(e))),l||(h=rt.call(t),h==o?h=d:h!=d&&(l=Zn(t)));var p=c==d,v=h==d,m=c==h;if(m&&!f&&!p)return dn(e,t,c);if(!i){var g=p&&nt.call(e,\"__wrapped__\"),y=v&&nt.call(t,\"__wrapped__\");if(g||y)return n(g?e.value():e,y?t.value():t,r,i,s,a)}if(!m)return!1;s||(s=[]),a||(a=[]);var b=s.length;while(b--)if(s[b]==e)return a[b]==t;s.push(e),a.push(t);var w=(f?pn:vn)(e,t,n,r,i,s,a);return s.pop(),a.pop(),w}function $t(e,t,n,i,s){var o=-1,u=t.length,a=!s;while(++o<u)if(a&&i[o]?n[o]!==e[t[o]]:!(t[o]in e))return!1;o=-1;while(++o<u){var f=t[o],l=e[f],c=n[o];if(a&&i[o])var h=l!==r||f in e;else h=s?s(l,c,f):r,h===r&&(h=Xt(c,l,s,!0));if(!h)return!1}return!0}function Jt(e){var t=rr(e),n=t.length;if(!n)return fr(!0);if(n==1){var i=t[0],s=e[i];if(kn(s))return function(e){return e==null?!1:e[i]===s&&(s!==r||i in On(e))}}var o=Array(n),u=Array(n);while(n--)s=e[t[n]],o[n]=s,u[n]=kn(s);return function(e){return e!=null&&$t(On(e),t,o,u)}}function Kt(e,t){var n=Xn(e),i=Nn(e)&&kn(t),s=e+\"\";return e=Mn(e),function(o){if(o==null)return!1;var u=s;o=On(o);if((n||!i)&&!(u in o)){o=e.length==1?o:Wt(o,en(e,0,-1));if(o==null)return!1;u=Pn(e),o=On(o)}return o[u]===t?t!==r||u in o:Xt(t,o[u],null,!0)}}function Qt(e,t,n,i,s){if(!Jn(e))return e;var o=Cn(t.length)&&(Xn(t)||Zn(t));if(!o){var u=rr(t);lt.apply(u,bn(t))}return At(u||t,function(a,f){u&&(f=a,a=t[f]);if(Y(a))i||(i=[]),s||(s=[]),Gt(e,t,f,Qt,n,i,s);else{var l=e[f],c=n?n(l,a,f,e,t):r,h=c===r;h&&(c=a),(o||c!==r)&&(h||(c===c?c!==l:l===l))&&(e[f]=c)}}),e}function Gt(e,t,n,i,s,o,u){var a=o.length,f=t[n];while(a--)if(o[a]==f){e[n]=u[a];return}var l=e[n],c=s?s(l,f,n,e,t):r,h=c===r;h&&(c=f,Cn(f.length)&&(Xn(f)||Zn(f))?c=Xn(l)?l:yn(l)?Lt(l):[]:Gn(f)||Wn(f)?c=Wn(l)?er(l):Gn(l)?l:{}:h=!1),o.push(f),u.push(c);if(h)e[n]=i(c,f,s,o,u);else if(c===c?c!==l:l===l)e[n]=c}function Yt(e){return function(t){return t==null?r:t[e]}}function Zt(e){var t=e+\"\";return e=Mn(e),function(n){return Wt(n,e,t)}}function en(e,t,n){var i=-1,s=e.length;t=t==null?0:+t||0,t<0&&(t=-t>s?0:s+t),n=n===r||n>s?s:+n||0,n<0&&(n+=s),s=t>n?0:n-t>>>0,t>>>=0;var o=Array(s);while(++i<s)o[i]=e[i+t];return o}function tn(e,t){var n;return It(e,function(e,r,i){return n=t(e,r,i),!n}),!!n}function nn(e,t){var n=-1,r=t.length,i=Array(r);while(++n<r)i[n]=e[t[n]];return i}function rn(e,t,n){var r=0,i=e?e.length:r;if(typeof t==\"number\"&&t===t&&i<=xt){while(r<i){var s=r+i>>>1,o=e[s];(n?o<=t:o<t)?r=s+1:i=s}return i}return sn(e,t,lr,n)}function sn(e,t,n,i){t=n(t);var s=0,o=e?e.length:0,u=t!==t,a=t===r;while(s<o){var f=ut((s+o)/2),l=n(e[f]),c=l===l;if(u)var h=c||i;else a?h=c&&(i||l!==r):h=i?l<=t:l<t;h?s=f+1:o=f}return bt(o,St)}function on(e,t,n){if(typeof e!=\"function\")return lr;if(t===r)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,i){return e.call(t,n,r,i)};case 4:return function(n,r,i,s){return e.call(t,n,r,i,s)};case 5:return function(n,r,i,s,o){return e.call(t,n,r,i,s,o)}}return function(){return e.apply(t,arguments)}}function un(e){return ot.call(e,0)}function an(e){return Un(function(t,n){var r=-1,i=t==null?0:n.length,s=i>2&&n[i-2],o=i>2&&n[2],u=i>1&&n[i-1];typeof s==\"function\"?(s=on(s,u,5),i-=2):(s=typeof u==\"function\"?u:null,i-=s?1:0),o&&Tn(n[0],n[1],o)&&(s=i<3?null:s,i=1);while(++r<i){var a=n[r];a&&e(t,a,s)}return t})}function fn(e,t){return function(n,r){var i=n?yn(n):0;if(!Cn(i))return e(n,r);var s=t?i:-1,o=On(n);while(t?s--:++s<i)if(r(o[s],s,o)===!1)break;return n}}function ln(e){return function(t,n,r){var i=On(t),s=r(t),o=s.length,u=e?o:-1;while(e?u--:++u<o){var a=s[u];if(n(i[a],a,i)===!1)break}return t}}function cn(e){return function(t,n,r){return!t||!t.length?-1:(n=mn(n,r,3),$(t,n,e))}}function hn(e,t){return function(n,i,s){return typeof i==\"function\"&&s===r&&Xn(n)?e(n,i):t(n,on(i,s,3))}}function pn(e,t,n,i,s,o,u){var a=-1,f=e.length,l=t.length,c=!0;if(f!=l&&!(s&&l>f))return!1;while(c&&++a<f){var h=e[a],p=t[a];c=r,i&&(c=s?i(p,h,a):i(h,p,a));if(c===r)if(s){var d=l;while(d--){p=t[d],c=h&&h===p||n(h,p,i,s,o,u);if(c)break}}else c=h&&h===p||n(h,p,i,s,o,u)}return!!c}function dn(e,t,n){switch(n){case a:case f:return+e==+t;case l:return e.name==t.name&&e.message==t.message;case p:return e!=+e?t!=+t:e==0?1/e==1/t:e==+t;case v:case g:return e==t+\"\"}return!1}function vn(e,t,n,i,s,o,u){var a=rr(e),f=a.length,l=rr(t),c=l.length;if(f!=c&&!s)return!1;var h=s,p=-1;while(++p<f){var d=a[p],v=s?d in t:nt.call(t,d);if(v){var m=e[d],g=t[d];v=r,i&&(v=s?i(g,m,d):i(m,g,d)),v===r&&(v=m&&m===g||n(m,g,i,s,o,u))}if(!v)return!1;h||(h=d==\"constructor\")}if(!h){var y=e.constructor,b=t.constructor;if(y!=b&&\"constructor\"in e&&\"constructor\"in t&&!(typeof y==\"function\"&&y instanceof y&&typeof b==\"function\"&&b instanceof b))return!1}return!0}function mn(e,t,n){var r=Ct.callback||ar;return r=r===ar?jt:r,n?r(e,t,n):r}function gn(e,t,n){var r=Ct.indexOf||Dn;return r=r===Dn?J:r,e?r(e,t,n):r}function wn(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]==\"string\"&&nt.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}function En(e){var t=e.constructor;return typeof t==\"function\"&&t instanceof t||(t=Object),new t}function Sn(e,t,n){var r=e.constructor;switch(t){case b:return un(e);case a:case f:return new r(+e);case w:case E:case S:case x:case T:case N:case C:case k:case L:var i=e.buffer;return new r(n?un(i):i,e.byteOffset,e.length);case p:case g:return new r(e);case v:var s=new r(e.source,H.exec(e));s.lastIndex=e.lastIndex}return s}function xn(e,t){return e=+e,t=t==null?Nt:t,e>-1&&e%1==0&&e<t}function Tn(e,t,n){if(!Jn(n))return!1;var r=typeof t;if(r==\"number\")var i=yn(n),s=Cn(i)&&xn(t,i);else s=r==\"string\"&&t in n;if(s){var o=n[t];return e===e?e===o:o!==o}return!1}function Nn(e,t){var n=typeof e;if(n==\"string\"&&O.test(e)||n==\"number\")return!0;if(Xn(e))return!1;var r=!A.test(e);return r||t!=null&&e in On(t)}function Cn(e){return typeof e==\"number\"&&e>-1&&e%1==0&&e<=Nt}function kn(e){return e===e&&(e===0?1/e>0:!Jn(e))}function Ln(e){var t,n=Ct.support;if(!Y(e)||rt.call(e)!=d||!nt.call(e,\"constructor\")&&(t=e.constructor,typeof t==\"function\"&&!(t instanceof t)))return!1;var i;return Ut(e,function(e,t){i=t}),i===r||nt.call(e,i)}function An(e){var t=ir(e),n=t.length,r=n&&e.length,i=Ct.support,s=r&&Cn(r)&&(Xn(e)||i.nonEnumArgs&&Wn(e)),o=-1,u=[];while(++o<n){var a=t[o];(s&&xn(a,r)||nt.call(e,a))&&u.push(a)}return u}function On(e){return Jn(e)?e:Object(e)}function Mn(e){if(Xn(e))return e;var t=[];return Q(e).replace(M,function(e,n,r,i){t.push(r?i.replace(P,\"$1\"):n||e)}),t}function Dn(e,t,n){var r=e?e.length:0;if(!r)return-1;if(typeof n==\"number\")n=n<0?yt(r+n,0):n;else if(n){var i=rn(e,t),s=e[i];return(t===t?t===s:s!==s)?i:-1}return J(e,t,n||0)}function Pn(e){var t=e?e.length:0;return t?e[t-1]:r}function Hn(e,t,n){var r=e?e.length:0;return r?(n&&typeof n!=\"number\"&&Tn(e,t,n)&&(t=0,n=r),en(e,t,n)):[]}function Bn(e){var t=-1,n=(e&&e.length&&_t(Mt(e,yn)))>>>0,r=Array(n);while(++t<n)r[t]=Mt(e,Yt(t));return r}function In(e,t,n,r){var i=e?yn(e):0;return Cn(i)||(e=or(e),i=e.length),i?(typeof n!=\"number\"||r&&Tn(t,n,r)?n=0:n=n<0?yt(i+n,0):n||0,typeof e==\"string\"||!Xn(e)&&Yn(e)?n<i&&e.indexOf(t,n)>-1:gn(e,t,n)>-1):!1}function qn(e,t,n){var r=Xn(e)?Ot:qt;return t=mn(t,n,3),r(e,function(e,n,r){return!t(e,n,r)})}function Rn(e,t,n){var i=Xn(e)?Dt:tn;n&&Tn(e,t,n)&&(t=null);if(typeof t!=\"function\"||n!==r)t=mn(t,n,3);return i(e,t)}function Un(e,t){if(typeof e!=\"function\")throw new TypeError(s);return t=yt(t===r?e.length-1:+t||0,0),function(){var n=arguments,r=-1,i=yt(n.length-t,0),s=Array(i);while(++r<i)s[r]=n[t+r];switch(t){case 0:return e.call(this,s);case 1:return e.call(this,n[0],s);case 2:return e.call(this,n[0],n[1],s)}var o=Array(t+1);r=-1;while(++r<t)o[r]=n[r];return o[t]=s,e.apply(this,o)}}function zn(e,t,n,r){return t&&typeof t!=\"boolean\"&&Tn(e,t,n)?t=!1:typeof t==\"function\"&&(r=n,n=t,t=!1),n=typeof n==\"function\"&&on(n,r,1),Ft(e,t,n)}function Wn(e){var t=Y(e)?e.length:r;return Cn(t)&&rt.call(e)==o}function Vn(e){if(e==null)return!0;var t=yn(e);return Cn(t)&&(Xn(e)||Yn(e)||Wn(e)||Y(e)&&$n(e.splice))?!t:!rr(e).length}function Jn(e){var t=typeof e;return t==\"function\"||!!e&&t==\"object\"}function Kn(e){return e==null?!1:rt.call(e)==c?it.test(tt.call(e)):Y(e)&&B.test(e)}function Qn(e){return typeof e==\"number\"||Y(e)&&rt.call(e)==p}function Yn(e){return typeof e==\"string\"||Y(e)&&rt.call(e)==g}function Zn(e){return Y(e)&&Cn(e.length)&&!!j[rt.call(e)]}function er(e){return Bt(e,ir(e))}function nr(e,t){if(e==null)return!1;var n=nt.call(e,t);return!n&&!Nn(t)&&(t=Mn(t),e=t.length==1?e:Wt(e,en(t,0,-1)),t=Pn(t),n=e!=null&&nt.call(e,t)),n}function ir(e){if(e==null)return[];Jn(e)||(e=Object(e));var t=e.length;t=t&&Cn(t)&&(Xn(e)||kt.nonEnumArgs&&Wn(e))&&t||0;var n=e.constructor,r=-1,i=typeof n==\"function\"&&n.prototype===e,s=Array(t),o=t>0;while(++r<t)s[r]=r+\"\";for(var u in e)(!o||!xn(u,t))&&(u!=\"constructor\"||!i&&!!nt.call(e,u))&&s.push(u);return s}function or(e){return nn(e,rr(e))}function ur(e){return e=Q(e),e&&D.test(e)?e.replace(_,\"\\\\$&\"):e}function ar(e,t,n){return n&&Tn(e,t,n)&&(t=null),jt(e,t)}function fr(e){return function(){return e}}function lr(e){return e}function cr(e){return Nn(e)?Yt(e):Zt(e)}var r,i=\"3.7.0\",s=\"Expected a function\",o=\"[object Arguments]\",u=\"[object Array]\",a=\"[object Boolean]\",f=\"[object Date]\",l=\"[object Error]\",c=\"[object Function]\",h=\"[object Map]\",p=\"[object Number]\",d=\"[object Object]\",v=\"[object RegExp]\",m=\"[object Set]\",g=\"[object String]\",y=\"[object WeakMap]\",b=\"[object ArrayBuffer]\",w=\"[object Float32Array]\",E=\"[object Float64Array]\",S=\"[object Int8Array]\",x=\"[object Int16Array]\",T=\"[object Int32Array]\",N=\"[object Uint8Array]\",C=\"[object Uint8ClampedArray]\",k=\"[object Uint16Array]\",L=\"[object Uint32Array]\",A=/\\.|\\[(?:[^[\\]]+|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?)\\1\\]/,O=/^\\w*$/,M=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g,_=/[.*+?^${}()|[\\]\\/\\\\]/g,D=RegExp(_.source),P=/\\\\(\\\\)?/g,H=/\\w*$/,B=/^\\[object .+?Constructor\\]$/,j={};j[w]=j[E]=j[S]=j[x]=j[T]=j[N]=j[C]=j[k]=j[L]=!0,j[o]=j[u]=j[b]=j[a]=j[f]=j[l]=j[c]=j[h]=j[p]=j[d]=j[v]=j[m]=j[g]=j[y]=!1;var F={};F[o]=F[u]=F[b]=F[a]=F[f]=F[w]=F[E]=F[S]=F[x]=F[T]=F[p]=F[d]=F[v]=F[g]=F[N]=F[C]=F[k]=F[L]=!0,F[l]=F[c]=F[h]=F[m]=F[y]=!1;var I={\"function\":!0,object:!0},q=I[typeof n]&&n&&!n.nodeType&&n,R=I[typeof t]&&t&&!t.nodeType&&t,U=q&&R&&typeof e==\"object\"&&e&&e.Object&&e,z=I[typeof self]&&self&&self.Object&&self,W=I[typeof window]&&window&&window.Object&&window,X=R&&R.exports===q&&q,V=U||W!==(this&&this.window)&&W||z||this,Z=Array.prototype,et=Object.prototype,tt=Function.prototype.toString,nt=et.hasOwnProperty,rt=et.toString,it=RegExp(\"^\"+ur(rt).replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),st=Kn(st=V.ArrayBuffer)&&st,ot=Kn(ot=st&&(new st(0)).slice)&&ot,ut=Math.floor,at=Kn(at=Object.getOwnPropertySymbols)&&at,ft=Kn(ft=Object.getPrototypeOf)&&ft,lt=Z.push,ct=Kn(Object.preventExtensions=Object.preventExtensions)&&ct,ht=et.propertyIsEnumerable,pt=Kn(pt=V.Uint8Array)&&pt,dt=function(){try{var e=Kn(e=V.Float64Array)&&e,t=new e(new st(10),0,1)&&e}catch(n){}return t}(),vt=function(){var e={1:0},t=ct&&Kn(t=Object.assign)&&t;try{t(ct(e),\"xo\")}catch(n){}return!e[1]&&t}(),mt=Kn(mt=Array.isArray)&&mt,gt=Kn(gt=Object.keys)&&gt,yt=Math.max,bt=Math.min,wt=Number.NEGATIVE_INFINITY,Et=Math.pow(2,32)-1,St=Et-1,xt=Et>>>1,Tt=dt?dt.BYTES_PER_ELEMENT:0,Nt=Math.pow(2,53)-1,kt=Ct.support={};(function(e){var t=function(){this.x=e},n={0:e,length:e},r=[];t.prototype={valueOf:e,y:e};for(var i in new t)r.push(i);kt.funcDecomp=/\\bthis\\b/.test(function(){return this}),kt.funcNames=typeof Function.name==\"string\";try{kt.nonEnumArgs=!ht.call(arguments,1)}catch(s){kt.nonEnumArgs=!0}})(1,0);var Ht=vt||function(e,t){return t==null?e:Bt(t,bn(t),Bt(t,rr(t),e))},It=fn(zt),Rt=ln();ot||(un=!st||!pt?fr(null):function(e){var t=e.byteLength,n=dt?ut(t/Tt):0,r=n*Tt,i=new st(t);if(n){var s=new dt(i,0,n);s.set(new dt(e,0,n))}return t!=r&&(s=new pt(i,r),s.set(new pt(e,r))),i});var yn=Yt(\"length\"),bn=at?function(e){return at(On(e))}:fr([]),_n=cn(!0),jn=Un(Bn),Fn=hn(At,It),Xn=mt||function(e){return Y(e)&&Cn(e.length)&&rt.call(e)==u},$n=K(/x/)||pt&&!K(pt)?function(e){return rt.call(e)==c}:K,Gn=ft?function(e){if(!e||rt.call(e)!=d)return!1;var t=e.valueOf,n=Kn(t)&&(n=ft(t))&&ft(n);return n?e==n||ft(e)==n:Ln(e)}:Ln,tr=an(function(e,t,n){return n?Pt(e,t,n):Ht(e,t)}),rr=gt?function(e){if(e)var t=e.constructor,n=e.length;return typeof t==\"function\"&&t.prototype===e||typeof e!=\"function\"&&Cn(n)?An(e):Jn(e)?gt(e):[]}:An,sr=an(Qt);Ct.assign=tr,Ct.callback=ar,Ct.constant=fr,Ct.forEach=Fn,Ct.keys=rr,Ct.keysIn=ir,Ct.merge=sr,Ct.property=cr,Ct.reject=qn,Ct.restParam=Un,Ct.slice=Hn,Ct.toPlainObject=er,Ct.unzip=Bn,Ct.values=or,Ct.zip=jn,Ct.each=Fn,Ct.extend=tr,Ct.iteratee=ar,Ct.clone=zn,Ct.escapeRegExp=ur,Ct.findLastIndex=_n,Ct.has=nr,Ct.identity=lr,Ct.includes=In,Ct.indexOf=Dn,Ct.isArguments=Wn,Ct.isArray=Xn,Ct.isEmpty=Vn,Ct.isFunction=$n,Ct.isNative=Kn,Ct.isNumber=Qn,Ct.isObject=Jn,Ct.isPlainObject=Gn,Ct.isString=Yn,Ct.isTypedArray=Zn,Ct.last=Pn,Ct.some=Rn,Ct.any=Rn,Ct.contains=In,Ct.include=In,Ct.VERSION=i,q&&R?X?(R.exports=Ct)._=Ct:q._=Ct:V._=Ct}).call(this)}).call(this,typeof global!=\"undefined\"?global:typeof self!=\"undefined\"?self:typeof window!=\"undefined\"?window:{})},{}],\"/node_modules/jshint/src/jshint.js\":[function(e,t,n){var r=e(\"../lodash\"),i=e(\"events\"),s=e(\"./vars.js\"),o=e(\"./messages.js\"),u=e(\"./lex.js\").Lexer,a=e(\"./reg.js\"),f=e(\"./state.js\").state,l=e(\"./style.js\"),c=e(\"./options.js\"),h=e(\"./scope-manager.js\"),p=function(){\"use strict\";function k(e,t){return e=e.trim(),/^[+-]W\\d{3}$/g.test(e)?!0:c.validNames.indexOf(e)===-1&&t.type!==\"jslint\"&&!r.has(c.removed,e)?(q(\"E001\",t,e),!1):!0}function L(e){return Object.prototype.toString.call(e)===\"[object String]\"}function A(e,t){return e?!e.identifier||e.value!==t?!1:!0:!1}function O(e){if(!e.reserved)return!1;var t=e.meta;if(t&&t.isFutureReservedWord&&f.inES5()){if(!t.es5)return!1;if(t.strictOnly&&!f.option.strict&&!f.isStrict())return!1;if(e.isProperty)return!1}return!0}function M(e,t){return e.replace(/\\{([^{}]*)\\}/g,function(e,n){var r=t[n];return typeof r==\"string\"||typeof r==\"number\"?r:e})}function D(e,t){Object.keys(t).forEach(function(n){if(r.has(p.blacklist,n))return;e[n]=t[n]})}function P(){if(f.option.enforceall){for(var e in c.bool.enforcing)f.option[e]===undefined&&!c.noenforceall[e]&&(f.option[e]=!0);for(var t in c.bool.relaxing)f.option[t]===undefined&&(f.option[t]=!1)}}function H(){P(),!f.option.esversion&&!f.option.moz&&(f.option.es3?f.option.esversion=3:f.option.esnext?f.option.esversion=6:f.option.esversion=5),f.inES5()&&D(S,s.ecmaIdentifiers[5]),f.inES6()&&D(S,s.ecmaIdentifiers[6]),f.option.module&&(f.option.strict===!0&&(f.option.strict=\"global\"),f.inES6()||F(\"W134\",f.tokens.next,\"module\",6)),f.option.couch&&D(S,s.couch),f.option.qunit&&D(S,s.qunit),f.option.rhino&&D(S,s.rhino),f.option.shelljs&&(D(S,s.shelljs),D(S,s.node)),f.option.typed&&D(S,s.typed),f.option.phantom&&(D(S,s.phantom),f.option.strict===!0&&(f.option.strict=\"global\")),f.option.prototypejs&&D(S,s.prototypejs),f.option.node&&(D(S,s.node),D(S,s.typed),f.option.strict===!0&&(f.option.strict=\"global\")),f.option.devel&&D(S,s.devel),f.option.dojo&&D(S,s.dojo),f.option.browser&&(D(S,s.browser),D(S,s.typed)),f.option.browserify&&(D(S,s.browser),D(S,s.typed),D(S,s.browserify),f.option.strict===!0&&(f.option.strict=\"global\")),f.option.nonstandard&&D(S,s.nonstandard),f.option.jasmine&&D(S,s.jasmine),f.option.jquery&&D(S,s.jquery),f.option.mootools&&D(S,s.mootools),f.option.worker&&D(S,s.worker),f.option.wsh&&D(S,s.wsh),f.option.globalstrict&&f.option.strict!==!1&&(f.option.strict=\"global\"),f.option.yui&&D(S,s.yui),f.option.mocha&&D(S,s.mocha)}function B(e,t,n){var r=Math.floor(t/f.lines.length*100),i=o.errors[e].desc;throw{name:\"JSHintError\",line:t,character:n,message:i+\" (\"+r+\"% scanned).\",raw:i,code:e}}function j(){var e=f.ignoredLines;if(r.isEmpty(e))return;p.errors=r.reject(p.errors,function(t){return e[t.line]})}function F(e,t,n,r,i,s){var u,a,l,c;if(/^W\\d{3}$/.test(e)){if(f.ignored[e])return;c=o.warnings[e]}else/E\\d{3}/.test(e)?c=o.errors[e]:/I\\d{3}/.test(e)&&(c=o.info[e]);return t=t||f.tokens.next||{},t.id===\"(end)\"&&(t=f.tokens.curr),a=t.line||0,u=t.from||0,l={id:\"(error)\",raw:c.desc,code:c.code,evidence:f.lines[a-1]||\"\",line:a,character:u,scope:p.scope,a:n,b:r,c:i,d:s},l.reason=M(c.desc,l),p.errors.push(l),j(),p.errors.length>=f.option.maxerr&&B(\"E043\",a,u),l}function I(e,t,n,r,i,s,o){return F(e,{line:t,from:n},r,i,s,o)}function q(e,t,n,r,i,s){F(e,t,n,r,i,s)}function R(e,t,n,r,i,s,o){return q(e,{line:t,from:n},r,i,s,o)}function U(e,t){var n;return n={id:\"(internal)\",elem:e,value:t},p.internals.push(n),n}function z(){var e=f.tokens.next,t=e.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g)||[],i={};if(e.type===\"globals\"){t.forEach(function(n,r){n=n.split(\":\");var s=(n[0]||\"\").trim(),o=(n[1]||\"\").trim();if(s===\"-\"||!s.length){if(r>0&&r===t.length-1)return;q(\"E002\",e);return}s.charAt(0)===\"-\"?(s=s.slice(1),o=!1,p.blacklist[s]=s,delete S[s]):i[s]=o===\"true\"}),D(S,i);for(var s in i)r.has(i,s)&&(n[s]=e)}e.type===\"exported\"&&t.forEach(function(n,r){if(!n.length){if(r>0&&r===t.length-1)return;q(\"E002\",e);return}f.funct[\"(scope)\"].addExported(n)}),e.type===\"members\"&&(E=E||{},t.forEach(function(e){var t=e.charAt(0),n=e.charAt(e.length-1);t===n&&(t==='\"'||t===\"'\")&&(e=e.substr(1,e.length-2).replace('\\\\\"','\"')),E[e]=!1}));var o=[\"maxstatements\",\"maxparams\",\"maxdepth\",\"maxcomplexity\",\"maxerr\",\"maxlen\",\"indent\"];if(e.type===\"jshint\"||e.type===\"jslint\")t.forEach(function(t){t=t.split(\":\");var n=(t[0]||\"\").trim(),i=(t[1]||\"\").trim();if(!k(n,e))return;if(o.indexOf(n)>=0){if(i!==\"false\"){i=+i;if(typeof i!=\"number\"||!isFinite(i)||i<=0||Math.floor(i)!==i){q(\"E032\",e,t[1].trim());return}f.option[n]=i}else f.option[n]=n===\"indent\"?4:!1;return}if(n===\"validthis\"){if(f.funct[\"(global)\"])return void q(\"E009\");if(i!==\"true\"&&i!==\"false\")return void q(\"E002\",e);f.option.validthis=i===\"true\";return}if(n===\"quotmark\"){switch(i){case\"true\":case\"false\":f.option.quotmark=i===\"true\";break;case\"double\":case\"single\":f.option.quotmark=i;break;default:q(\"E002\",e)}return}if(n===\"shadow\"){switch(i){case\"true\":f.option.shadow=!0;break;case\"outer\":f.option.shadow=\"outer\";break;case\"false\":case\"inner\":f.option.shadow=\"inner\";break;default:q(\"E002\",e)}return}if(n===\"unused\"){switch(i){case\"true\":f.option.unused=!0;break;case\"false\":f.option.unused=!1;break;case\"vars\":case\"strict\":f.option.unused=i;break;default:q(\"E002\",e)}return}if(n===\"latedef\"){switch(i){case\"true\":f.option.latedef=!0;break;case\"false\":f.option.latedef=!1;break;case\"nofunc\":f.option.latedef=\"nofunc\";break;default:q(\"E002\",e)}return}if(n===\"ignore\"){switch(i){case\"line\":f.ignoredLines[e.line]=!0,j();break;default:q(\"E002\",e)}return}if(n===\"strict\"){switch(i){case\"true\":f.option.strict=!0;break;case\"false\":f.option.strict=!1;break;case\"func\":case\"global\":case\"implied\":f.option.strict=i;break;default:q(\"E002\",e)}return}n===\"module\"&&(zt(f.funct)||q(\"E055\",f.tokens.next,\"module\"));var s={es3:3,es5:5,esnext:6};if(r.has(s,n)){switch(i){case\"true\":f.option.moz=!1,f.option.esversion=s[n];break;case\"false\":f.option.moz||(f.option.esversion=5);break;default:q(\"E002\",e)}return}if(n===\"esversion\"){switch(i){case\"5\":f.inES5(!0)&&F(\"I003\");case\"3\":case\"6\":f.option.moz=!1,f.option.esversion=+i;break;case\"2015\":f.option.moz=!1,f.option.esversion=6;break;default:q(\"E002\",e)}zt(f.funct)||q(\"E055\",f.tokens.next,\"esversion\");return}var u=/^([+-])(W\\d{3})$/g.exec(n);if(u){f.ignored[u[2]]=u[1]===\"-\";return}var a;if(i===\"true\"||i===\"false\"){e.type===\"jslint\"?(a=c.renamed[n]||n,f.option[a]=i===\"true\",c.inverted[a]!==undefined&&(f.option[a]=!f.option[a])):f.option[n]=i===\"true\",n===\"newcap\"&&(f.option[\"(explicitNewcap)\"]=!0);return}q(\"E002\",e)}),H()}function W(e){var t=e||0,n=y.length,r;if(t<n)return y[t];while(n<=t)r=y[n],r||(r=y[n]=b.token()),n+=1;return!r&&f.tokens.next.id===\"(end)\"?f.tokens.next:r}function X(){var e=0,t;do t=W(e++);while(t.id===\"(endline)\");return t}function V(e,t){switch(f.tokens.curr.id){case\"(number)\":f.tokens.next.id===\".\"&&F(\"W005\",f.tokens.curr);break;case\"-\":(f.tokens.next.id===\"-\"||f.tokens.next.id===\"--\")&&F(\"W006\");break;case\"+\":(f.tokens.next.id===\"+\"||f.tokens.next.id===\"++\")&&F(\"W007\")}e&&f.tokens.next.id!==e&&(t?f.tokens.next.id===\"(end)\"?q(\"E019\",t,t.id):q(\"E020\",f.tokens.next,e,t.id,t.line,f.tokens.next.value):(f.tokens.next.type!==\"(identifier)\"||f.tokens.next.value!==e)&&F(\"W116\",f.tokens.next,e,f.tokens.next.value)),f.tokens.prev=f.tokens.curr,f.tokens.curr=f.tokens.next;for(;;){f.tokens.next=y.shift()||b.token(),f.tokens.next||B(\"E041\",f.tokens.curr.line);if(f.tokens.next.id===\"(end)\"||f.tokens.next.id===\"(error)\")return;f.tokens.next.check&&f.tokens.next.check();if(f.tokens.next.isSpecial)f.tokens.next.type===\"falls through\"?f.tokens.curr.caseFallsThrough=!0:z();else if(f.tokens.next.id!==\"(endline)\")break}}function $(e){return e.infix||!e.identifier&&!e.template&&!!e.led}function J(){var e=f.tokens.curr,t=f.tokens.next;return t.id===\";\"||t.id===\"}\"||t.id===\":\"?!0:$(t)===$(e)||e.id===\"yield\"&&f.inMoz()?e.line!==G(t):!1}function K(e){return!e.left&&e.arity!==\"unary\"}function Q(e,t){var n,i=!1,s=!1,o=!1;f.nameStack.push(),!t&&f.tokens.next.value===\"let\"&&W(0).value===\"(\"&&(f.inMoz()||F(\"W118\",f.tokens.next,\"let expressions\"),o=!0,f.funct[\"(scope)\"].stack(),V(\"let\"),V(\"(\"),f.tokens.prev.fud(),V(\")\")),f.tokens.next.id===\"(end)\"&&q(\"E006\",f.tokens.curr);var u=f.option.asi&&f.tokens.prev.line!==G(f.tokens.curr)&&r.contains([\"]\",\")\"],f.tokens.prev.id)&&r.contains([\"[\",\"(\"],f.tokens.curr.id);u&&F(\"W014\",f.tokens.curr,f.tokens.curr.id),V(),t&&(f.funct[\"(verb)\"]=f.tokens.curr.value,f.tokens.curr.beginsStmt=!0);if(t===!0&&f.tokens.curr.fud)n=f.tokens.curr.fud();else{f.tokens.curr.nud?n=f.tokens.curr.nud():q(\"E030\",f.tokens.curr,f.tokens.curr.id);while((e<f.tokens.next.lbp||f.tokens.next.type===\"(template)\")&&!J())i=f.tokens.curr.value===\"Array\",s=f.tokens.curr.value===\"Object\",n&&(n.value||n.first&&n.first.value)&&(n.value!==\"new\"||n.first&&n.first.value&&n.first.value===\".\")&&(i=!1,n.value!==f.tokens.curr.value&&(s=!1)),V(),i&&f.tokens.curr.id===\"(\"&&f.tokens.next.id===\")\"&&F(\"W009\",f.tokens.curr),s&&f.tokens.curr.id===\"(\"&&f.tokens.next.id===\")\"&&F(\"W010\",f.tokens.curr),n&&f.tokens.curr.led?n=f.tokens.curr.led(n):q(\"E033\",f.tokens.curr,f.tokens.curr.id)}return o&&f.funct[\"(scope)\"].unstack(),f.nameStack.pop(),n}function G(e){return e.startLine||e.line}function Y(e,t){e=e||f.tokens.curr,t=t||f.tokens.next,!f.option.laxbreak&&e.line!==G(t)&&F(\"W014\",t,t.value)}function Z(e){e=e||f.tokens.curr,e.line!==G(f.tokens.next)&&F(\"E022\",e,e.value)}function et(e,t){e.line!==G(t)&&(f.option.laxcomma||(tt.first&&(F(\"I001\"),tt.first=!1),F(\"W014\",e,t.value)))}function tt(e){e=e||{},e.peek?et(f.tokens.prev,f.tokens.curr):(et(f.tokens.curr,f.tokens.next),V(\",\"));if(f.tokens.next.identifier&&(!e.property||!f.inES5()))switch(f.tokens.next.value){case\"break\":case\"case\":case\"catch\":case\"continue\":case\"default\":case\"do\":case\"else\":case\"finally\":case\"for\":case\"if\":case\"in\":case\"instanceof\":case\"return\":case\"switch\":case\"throw\":case\"try\":case\"var\":case\"let\":case\"while\":case\"with\":return q(\"E024\",f.tokens.next,f.tokens.next.value),!1}if(f.tokens.next.type===\"(punctuator)\")switch(f.tokens.next.value){case\"}\":case\"]\":case\",\":if(e.allowTrailing)return!0;case\")\":return q(\"E024\",f.tokens.next,f.tokens.next.value),!1}return!0}function nt(e,t){var n=f.syntax[e];if(!n||typeof n!=\"object\")f.syntax[e]=n={id:e,lbp:t,value:e};return n}function rt(e){var t=nt(e,0);return t.delim=!0,t}function it(e,t){var n=rt(e);return n.identifier=n.reserved=!0,n.fud=t,n}function st(e,t){var n=it(e,t);return n.block=!0,n}function ot(e){var t=e.id.charAt(0);if(t>=\"a\"&&t<=\"z\"||t>=\"A\"&&t<=\"Z\")e.identifier=e.reserved=!0;return e}function ut(e,t){var n=nt(e,150);return ot(n),n.nud=typeof t==\"function\"?t:function(){this.arity=\"unary\",this.right=Q(150);if(this.id===\"++\"||this.id===\"--\")f.option.plusplus?F(\"W016\",this,this.id):this.right&&(!this.right.identifier||O(this.right))&&this.right.id!==\".\"&&this.right.id!==\"[\"&&F(\"W017\",this),this.right&&this.right.isMetaProperty?q(\"E031\",this):this.right&&this.right.identifier&&f.funct[\"(scope)\"].block.modify(this.right.value,this);return this},n}function at(e,t){var n=rt(e);return n.type=e,n.nud=t,n}function ft(e,t){var n=at(e,t);return n.identifier=!0,n.reserved=!0,n}function lt(e,t){var n=at(e,t&&t.nud||function(){return this});return t=t||{},t.isFutureReservedWord=!0,n.value=e,n.identifier=!0,n.reserved=!0,n.meta=t,n}function ct(e,t){return ft(e,function(){return typeof t==\"function\"&&t(this),this})}function ht(e,t,n,r){var i=nt(e,n);return ot(i),i.infix=!0,i.led=function(i){return r||Y(f.tokens.prev,f.tokens.curr),(e===\"in\"||e===\"instanceof\")&&i.id===\"!\"&&F(\"W018\",i,\"!\"),typeof t==\"function\"?t(i,this):(this.left=i,this.right=Q(n),this)},i}function pt(e){var t=nt(e,42);return t.led=function(e){return Y(f.tokens.prev,f.tokens.curr),this.left=e,this.right=Xt({type:\"arrow\",loneArg:e}),this},t}function dt(e,t){var n=nt(e,100);return n.led=function(e){Y(f.tokens.prev,f.tokens.curr),this.left=e;var n=this.right=Q(100);return A(e,\"NaN\")||A(n,\"NaN\")?F(\"W019\",this):t&&t.apply(this,[e,n]),(!e||!n)&&B(\"E041\",f.tokens.curr.line),e.id===\"!\"&&F(\"W018\",e,\"!\"),n.id===\"!\"&&F(\"W018\",n,\"!\"),this},n}function vt(e){return e&&(e.type===\"(number)\"&&+e.value===0||e.type===\"(string)\"&&e.value===\"\"||e.type===\"null\"&&!f.option.eqnull||e.type===\"true\"||e.type===\"false\"||e.type===\"undefined\")}function gt(e,t,n){var i;return n.option.notypeof?!1:!e||!t?!1:(i=n.inES6()?mt.es6:mt.es3,t.type===\"(identifier)\"&&t.value===\"typeof\"&&e.type===\"(string)\"?!r.contains(i,e.value):!1)}function yt(e,t){var n=!1;return e.type===\"this\"&&t.funct[\"(context)\"]===null?n=!0:e.type===\"(identifier)\"&&(t.option.node&&e.value===\"global\"?n=!0:t.option.browser&&(e.value===\"window\"||e.value===\"document\")&&(n=!0)),n}function bt(e){function n(e){if(typeof e!=\"object\")return;return e.right===\"prototype\"?e:n(e.left)}function r(e){while(!e.identifier&&typeof e.left==\"object\")e=e.left;if(e.identifier&&t.indexOf(e.value)>=0)return e.value}var t=[\"Array\",\"ArrayBuffer\",\"Boolean\",\"Collator\",\"DataView\",\"Date\",\"DateTimeFormat\",\"Error\",\"EvalError\",\"Float32Array\",\"Float64Array\",\"Function\",\"Infinity\",\"Intl\",\"Int16Array\",\"Int32Array\",\"Int8Array\",\"Iterator\",\"Number\",\"NumberFormat\",\"Object\",\"RangeError\",\"ReferenceError\",\"RegExp\",\"StopIteration\",\"String\",\"SyntaxError\",\"TypeError\",\"Uint16Array\",\"Uint32Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"URIError\"],i=n(e);if(i)return r(i)}function wt(e,t,n){var r=n&&n.allowDestructuring;t=t||e;if(f.option.freeze){var i=bt(e);i&&F(\"W121\",e,i)}return e.identifier&&!e.isMetaProperty&&f.funct[\"(scope)\"].block.reassign(e.value,e),e.id===\".\"?((!e.left||e.left.value===\"arguments\"&&!f.isStrict())&&F(\"E031\",t),f.nameStack.set(f.tokens.prev),!0):e.id===\"{\"||e.id===\"[\"?(r&&f.tokens.curr.left.destructAssign?f.tokens.curr.left.destructAssign.forEach(function(e){e.id&&f.funct[\"(scope)\"].block.modify(e.id,e.token)}):e.id===\"{\"||!e.left?F(\"E031\",t):e.left.value===\"arguments\"&&!f.isStrict()&&F(\"E031\",t),e.id===\"[\"&&f.nameStack.set(e.right),!0):e.isMetaProperty?(q(\"E031\",t),!0):e.identifier&&!O(e)?(f.funct[\"(scope)\"].labeltype(e.value)===\"exception\"&&F(\"W022\",e),f.nameStack.set(e),!0):(e===f.syntax[\"function\"]&&F(\"W023\",f.tokens.curr),!1)}function Et(e,t,n){var r=ht(e,typeof t==\"function\"?t:function(e,t){t.left=e;if(e&&wt(e,t,{allowDestructuring:!0}))return t.right=Q(10),t;q(\"E031\",t)},n);return r.exps=!0,r.assign=!0,r}function St(e,t,n){var r=nt(e,n);return ot(r),r.led=typeof t==\"function\"?t:function(e){return f.option.bitwise&&F(\"W016\",this,this.id),this.left=e,this.right=Q(n),this},r}function xt(e){return Et(e,function(e,t){f.option.bitwise&&F(\"W016\",t,t.id);if(e&&wt(e,t))return t.right=Q(10),t;q(\"E031\",t)},20)}function Tt(e){var t=nt(e,150);return t.led=function(e){return f.option.plusplus?F(\"W016\",this,this.id):(!e.identifier||O(e))&&e.id!==\".\"&&e.id!==\"[\"&&F(\"W017\",this),e.isMetaProperty?q(\"E031\",this):e&&e.identifier&&f.funct[\"(scope)\"].block.modify(e.value,e),this.left=e,this},t}function Nt(e,t,n){if(!f.tokens.next.identifier)return;n||V();var r=f.tokens.curr,i=f.tokens.curr.value;return O(r)?t&&f.inES5()?i:e&&i===\"undefined\"?i:(F(\"W024\",f.tokens.curr,f.tokens.curr.id),i):i}function Ct(e,t){var n=Nt(e,t,!1);if(n)return n;if(f.tokens.next.value===\"...\"){f.inES6(!0)||F(\"W119\",f.tokens.next,\"spread/rest operator\",\"6\"),V();if(pn(f.tokens.next,\"...\")){F(\"E024\",f.tokens.next,\"...\");while(pn(f.tokens.next,\"...\"))V()}if(!f.tokens.next.identifier){F(\"E024\",f.tokens.curr,\"...\");return}return Ct(e,t)}q(\"E030\",f.tokens.next,f.tokens.next.value),f.tokens.next.id!==\";\"&&V()}function kt(e){var t=0,n;if(f.tokens.next.id!==\";\"||e.inBracelessBlock)return;for(;;){do n=W(t),t+=1;while(n.id!==\"(end)\"&&n.id===\"(comment)\");if(n.reach)return;if(n.id!==\"(endline)\"){if(n.id===\"function\"){f.option.latedef===!0&&F(\"W026\",n);break}F(\"W027\",n,n.value,e.value);break}}}function Lt(){if(f.tokens.next.id!==\";\"){if(f.tokens.next.isUnclosed)return V();var e=G(f.tokens.next)===f.tokens.curr.line&&f.tokens.next.id!==\"(end)\",t=pn(f.tokens.next,\"}\");e&&!t?R(\"E058\",f.tokens.curr.line,f.tokens.curr.character):f.option.asi||(t&&!f.option.lastsemic||!e)&&I(\"W033\",f.tokens.curr.line,f.tokens.curr.character)}else V(\";\")}function At(){var e=g,t,n=f.tokens.next,r=!1;if(n.id===\";\"){V(\";\");return}var i=O(n);i&&n.meta&&n.meta.isFutureReservedWord&&W().id===\":\"&&(F(\"W024\",n,n.id),i=!1),n.identifier&&!i&&W().id===\":\"&&(V(),V(\":\"),r=!0,f.funct[\"(scope)\"].stack(),f.funct[\"(scope)\"].block.addBreakLabel(n.value,{token:f.tokens.curr}),!f.tokens.next.labelled&&f.tokens.next.value!==\"{\"&&F(\"W028\",f.tokens.next,n.value,f.tokens.next.value),f.tokens.next.label=n.value,n=f.tokens.next);if(n.id===\"{\"){var s=f.funct[\"(verb)\"]===\"case\"&&f.tokens.curr.value===\":\";_t(!0,!0,!1,!1,s);return}return t=Q(0,!0),t&&(!t.identifier||t.value!==\"function\")&&(t.type!==\"(punctuator)\"||!t.left||!t.left.identifier||t.left.value!==\"function\")&&!f.isStrict()&&f.option.strict===\"global\"&&F(\"E007\"),n.block||(!f.option.expr&&(!t||!t.exps)?F(\"W030\",f.tokens.curr):f.option.nonew&&t&&t.left&&t.id===\"(\"&&t.left.id===\"new\"&&F(\"W031\",n),Lt()),g=e,r&&f.funct[\"(scope)\"].unstack(),t}function Ot(){var e=[],t;while(!f.tokens.next.reach&&f.tokens.next.id!==\"(end)\")f.tokens.next.id===\";\"?(t=W(),(!t||t.id!==\"(\"&&t.id!==\"[\")&&F(\"W032\"),V(\";\")):e.push(At());return e}function Mt(){var e,t,n;while(f.tokens.next.id===\"(string)\"){t=W(0);if(t.id===\"(endline)\"){e=1;do n=W(e++);while(n.id===\"(endline)\");if(n.id===\";\")t=n;else{if(n.value===\"[\"||n.value===\".\")break;(!f.option.asi||n.value===\"(\")&&F(\"W033\",f.tokens.next)}}else{if(t.id===\".\"||t.id===\"[\")break;t.id!==\";\"&&F(\"W033\",t)}V();var r=f.tokens.curr.value;(f.directive[r]||r===\"use strict\"&&f.option.strict===\"implied\")&&F(\"W034\",f.tokens.curr,r),f.directive[r]=!0,t.id===\";\"&&V(\";\")}f.isStrict()&&(f.option[\"(explicitNewcap)\"]||(f.option.newcap=!0),f.option.undef=!0)}function _t(e,t,n,i,s){var o,u=m,a=g,l,c,h,p;m=e,c=f.tokens.next;var d=f.funct[\"(metrics)\"];d.nestedBlockDepth+=1,d.verifyMaxNestedBlockDepthPerFunction();if(f.tokens.next.id===\"{\"){V(\"{\"),f.funct[\"(scope)\"].stack(),h=f.tokens.curr.line;if(f.tokens.next.id!==\"}\"){g+=f.option.indent;while(!e&&f.tokens.next.from>g)g+=f.option.indent;if(n){l={};for(p in f.directive)r.has(f.directive,p)&&(l[p]=f.directive[p]);Mt(),f.option.strict&&f.funct[\"(context)\"][\"(global)\"]&&!l[\"use strict\"]&&!f.isStrict()&&F(\"E007\")}o=Ot(),d.statementCount+=o.length,g-=f.option.indent}V(\"}\",c),n&&(f.funct[\"(scope)\"].validateParams(),l&&(f.directive=l)),f.funct[\"(scope)\"].unstack(),g=a}else if(!e)if(n){f.funct[\"(scope)\"].stack(),l={},t&&!i&&!f.inMoz()&&q(\"W118\",f.tokens.curr,\"function closure expressions\");if(!t)for(p in f.directive)r.has(f.directive,p)&&(l[p]=f.directive[p]);Q(10),f.option.strict&&f.funct[\"(context)\"][\"(global)\"]&&!l[\"use strict\"]&&!f.isStrict()&&F(\"E007\"),f.funct[\"(scope)\"].unstack()}else q(\"E021\",f.tokens.next,\"{\",f.tokens.next.value);else f.funct[\"(noblockscopedvar)\"]=f.tokens.next.id!==\"for\",f.funct[\"(scope)\"].stack(),(!t||f.option.curly)&&F(\"W116\",f.tokens.next,\"{\",f.tokens.next.value),f.tokens.next.inBracelessBlock=!0,g+=f.option.indent,o=[At()],g-=f.option.indent,f.funct[\"(scope)\"].unstack(),delete f.funct[\"(noblockscopedvar)\"];switch(f.funct[\"(verb)\"]){case\"break\":case\"continue\":case\"return\":case\"throw\":if(s)break;default:f.funct[\"(verb)\"]=null}return m=u,e&&f.option.noempty&&(!o||o.length===0)&&F(\"W035\",f.tokens.prev),d.nestedBlockDepth-=1,o}function Dt(e){E&&typeof E[e]!=\"boolean\"&&F(\"W036\",f.tokens.curr,e),typeof w[e]==\"number\"?w[e]+=1:w[e]=1}function Bt(){var e={};e.exps=!0,f.funct[\"(comparray)\"].stack();var t=!1;return f.tokens.next.value!==\"for\"&&(t=!0,f.inMoz()||F(\"W116\",f.tokens.next,\"for\",f.tokens.next.value),f.funct[\"(comparray)\"].setState(\"use\"),e.right=Q(10)),V(\"for\"),f.tokens.next.value===\"each\"&&(V(\"each\"),f.inMoz()||F(\"W118\",f.tokens.curr,\"for each\")),V(\"(\"),f.funct[\"(comparray)\"].setState(\"define\"),e.left=Q(130),r.contains([\"in\",\"of\"],f.tokens.next.value)?V():q(\"E045\",f.tokens.curr),f.funct[\"(comparray)\"].setState(\"generate\"),Q(10),V(\")\"),f.tokens.next.value===\"if\"&&(V(\"if\"),V(\"(\"),f.funct[\"(comparray)\"].setState(\"filter\"),e.filter=Q(10),V(\")\")),t||(f.funct[\"(comparray)\"].setState(\"use\"),e.right=Q(10)),V(\"]\"),f.funct[\"(comparray)\"].unstack(),e}function jt(){return f.funct[\"(statement)\"]&&f.funct[\"(statement)\"].type===\"class\"||f.funct[\"(context)\"]&&f.funct[\"(context)\"][\"(verb)\"]===\"class\"}function Ft(e){return e.identifier||e.id===\"(string)\"||e.id===\"(number)\"}function It(e){var t,n=!0;return typeof e==\"object\"?t=e:(n=e,t=Nt(!1,!0,n)),t?typeof t==\"object\"&&(t.id===\"(string)\"||t.id===\"(identifier)\"?t=t.value:t.id===\"(number)\"&&(t=t.value.toString())):f.tokens.next.id===\"(string)\"?(t=f.tokens.next.value,n||V()):f.tokens.next.id===\"(number)\"&&(t=f.tokens.next.value.toString(),n||V()),t===\"hasOwnProperty\"&&F(\"W001\"),t}function qt(e){function h(e){f.funct[\"(scope)\"].addParam.apply(f.funct[\"(scope)\"],e)}var t,n=[],i,s=[],o,u=!1,a=!1,l=0,c=e&&e.loneArg;if(c&&c.identifier===!0)return f.funct[\"(scope)\"].addParam(c.value,c),{arity:1,params:[c.value]};t=f.tokens.next,(!e||!e.parsedOpening)&&V(\"(\");if(f.tokens.next.id===\")\"){V(\")\");return}for(;;){l++;var p=[];if(r.contains([\"{\",\"[\"],f.tokens.next.id)){s=Gt();for(o in s)o=s[o],o.id&&(n.push(o.id),p.push([o.id,o.token]))}else{pn(f.tokens.next,\"...\")&&(a=!0),i=Ct(!0);if(i)n.push(i),p.push([i,f.tokens.curr]);else while(!hn(f.tokens.next,[\",\",\")\"]))V()}u&&f.tokens.next.id!==\"=\"&&q(\"W138\",f.tokens.current),f.tokens.next.id===\"=\"&&(f.inES6()||F(\"W119\",f.tokens.next,\"default parameters\",\"6\"),V(\"=\"),u=!0,Q(10)),p.forEach(h);if(f.tokens.next.id!==\",\")return V(\")\",t),{arity:l,params:n};a&&F(\"W131\",f.tokens.next),tt()}}function Rt(e,t,n){var i={\"(name)\":e,\"(breakage)\":0,\"(loopage)\":0,\"(tokens)\":{},\"(properties)\":{},\"(catch)\":!1,\"(global)\":!1,\"(line)\":null,\"(character)\":null,\"(metrics)\":null,\"(statement)\":null,\"(context)\":null,\"(scope)\":null,\"(comparray)\":null,\"(generator)\":null,\"(arrow)\":null,\"(params)\":null};return t&&r.extend(i,{\"(line)\":t.line,\"(character)\":t.character,\"(metrics)\":Vt(t)}),r.extend(i,n),i[\"(context)\"]&&(i[\"(scope)\"]=i[\"(context)\"][\"(scope)\"],i[\"(comparray)\"]=i[\"(context)\"][\"(comparray)\"]),i}function Ut(e){return\"(scope)\"in e}function zt(e){return e[\"(global)\"]&&!e[\"(verb)\"]}function Wt(e){function i(){if(f.tokens.curr.template&&f.tokens.curr.tail&&f.tokens.curr.context===t)return!0;var e=f.tokens.next.template&&f.tokens.next.tail&&f.tokens.next.context===t;return e&&V(),e||f.tokens.next.isUnclosed}var t=this.context,n=this.noSubst,r=this.depth;if(!n)while(!i())!f.tokens.next.template||f.tokens.next.depth>r?Q(0):V();return{id:\"(template)\",type:\"(template)\",tag:e}}function Xt(e){var t,n,r,i,s,o,u,a,l=f.option,c=f.ignored;e&&(r=e.name,i=e.statement,s=e.classExprBinding,o=e.type===\"generator\",u=e.type===\"arrow\",a=e.ignoreLoopFunc),f.option=Object.create(f.option),f.ignored=Object.create(f.ignored),f.funct=Rt(r||f.nameStack.infer(),f.tokens.next,{\"(statement)\":i,\"(context)\":f.funct,\"(arrow)\":u,\"(generator)\":o}),t=f.funct,n=f.tokens.curr,n.funct=f.funct,v.push(f.funct),f.funct[\"(scope)\"].stack(\"functionouter\");var h=r||s;h&&f.funct[\"(scope)\"].block.add(h,s?\"class\":\"function\",f.tokens.curr,!1),f.funct[\"(scope)\"].stack(\"functionparams\");var p=qt(e);return p?(f.funct[\"(params)\"]=p.params,f.funct[\"(metrics)\"].arity=p.arity,f.funct[\"(metrics)\"].verifyMaxParametersPerFunction()):f.funct[\"(metrics)\"].arity=0,u&&(f.inES6(!0)||F(\"W119\",f.tokens.curr,\"arrow function syntax (=>)\",\"6\"),e.loneArg||V(\"=>\")),_t(!1,!0,!0,u),!f.option.noyield&&o&&f.funct[\"(generator)\"]!==\"yielded\"&&F(\"W124\",f.tokens.curr),f.funct[\"(metrics)\"].verifyMaxStatementsPerFunction(),f.funct[\"(metrics)\"].verifyMaxComplexityPerFunction(),f.funct[\"(unusedOption)\"]=f.option.unused,f.option=l,f.ignored=c,f.funct[\"(last)\"]=f.tokens.curr.line,f.funct[\"(lastcharacter)\"]=f.tokens.curr.character,f.funct[\"(scope)\"].unstack(),f.funct[\"(scope)\"].unstack(),f.funct=f.funct[\"(context)\"],!a&&!f.option.loopfunc&&f.funct[\"(loopage)\"]&&t[\"(isCapturing)\"]&&F(\"W083\",n),t}function Vt(e){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,arity:0,verifyMaxStatementsPerFunction:function(){f.option.maxstatements&&this.statementCount>f.option.maxstatements&&F(\"W071\",e,this.statementCount)},verifyMaxParametersPerFunction:function(){r.isNumber(f.option.maxparams)&&this.arity>f.option.maxparams&&F(\"W072\",e,this.arity)},verifyMaxNestedBlockDepthPerFunction:function(){f.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===f.option.maxdepth+1&&F(\"W073\",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var t=f.option.maxcomplexity,n=this.ComplexityCount;t&&n>t&&F(\"W074\",e,n)}}}function $t(){f.funct[\"(metrics)\"].ComplexityCount+=1}function Jt(e){var t,n;e&&(t=e.id,n=e.paren,t===\",\"&&(e=e.exprs[e.exprs.length-1])&&(t=e.id,n=n||e.paren));switch(t){case\"=\":case\"+=\":case\"-=\":case\"*=\":case\"%=\":case\"&=\":case\"|=\":case\"^=\":case\"/=\":!n&&!f.option.boss&&F(\"W084\")}}function Kt(e){if(f.inES5())for(var t in e)e[t]&&e[t].setterToken&&!e[t].getterToken&&F(\"W078\",e[t].setterToken)}function Qt(e,t){if(pn(f.tokens.next,\".\")){var n=f.tokens.curr.id;V(\".\");var r=Ct();return f.tokens.curr.isMetaProperty=!0,e!==r?q(\"E057\",f.tokens.prev,n,r):t(),f.tokens.curr}}function Gt(e){var t=e&&e.assignment;return f.inES6()||F(\"W104\",f.tokens.curr,t?\"destructuring assignment\":\"destructuring binding\",\"6\"),Yt(e)}function Yt(e){var t,n=[],r=e&&e.openingParsed,i=e&&e.assignment,s=i?{assignment:i}:null,o=r?f.tokens.curr:f.tokens.next,u=function(){var e;if(hn(f.tokens.next,[\"[\",\"{\"])){t=Yt(s);for(var r in t)r=t[r],n.push({id:r.id,token:r.token})}else if(pn(f.tokens.next,\",\"))n.push({id:null,token:f.tokens.curr});else{if(!pn(f.tokens.next,\"(\")){var o=pn(f.tokens.next,\"...\");if(i){var a=o?W(0):f.tokens.next;a.identifier||F(\"E030\",a,a.value);var l=Q(155);l&&(wt(l),l.identifier&&(e=l.value))}else e=Ct();return e&&n.push({id:e,token:f.tokens.curr}),o}V(\"(\"),u(),V(\")\")}return!1},a=function(){var e;pn(f.tokens.next,\"[\")?(V(\"[\"),Q(10),V(\"]\"),V(\":\"),u()):f.tokens.next.id===\"(string)\"||f.tokens.next.id===\"(number)\"?(V(),V(\":\"),u()):(e=Ct(),pn(f.tokens.next,\":\")?(V(\":\"),u()):e&&(i&&wt(f.tokens.curr),n.push({id:e,token:f.tokens.curr})))};if(pn(o,\"[\")){r||V(\"[\"),pn(f.tokens.next,\"]\")&&F(\"W137\",f.tokens.curr);var l=!1;while(!pn(f.tokens.next,\"]\"))u()&&!l&&pn(f.tokens.next,\",\")&&(F(\"W130\",f.tokens.next),l=!0),pn(f.tokens.next,\"=\")&&(pn(f.tokens.prev,\"...\")?V(\"]\"):V(\"=\"),f.tokens.next.id===\"undefined\"&&F(\"W080\",f.tokens.prev,f.tokens.prev.value),Q(10)),pn(f.tokens.next,\"]\")||V(\",\");V(\"]\")}else if(pn(o,\"{\")){r||V(\"{\"),pn(f.tokens.next,\"}\")&&F(\"W137\",f.tokens.curr);while(!pn(f.tokens.next,\"}\")){a(),pn(f.tokens.next,\"=\")&&(V(\"=\"),f.tokens.next.id===\"undefined\"&&F(\"W080\",f.tokens.prev,f.tokens.prev.value),Q(10));if(!pn(f.tokens.next,\"}\")){V(\",\");if(pn(f.tokens.next,\"}\"))break}}V(\"}\")}return n}function Zt(e,t){var n=t.first;if(!n)return;r.zip(e,Array.isArray(n)?n:[n]).forEach(function(e){var t=e[0],n=e[1];t&&n?t.first=n:t&&t.first&&!n&&F(\"W080\",t.first,t.first.value)})}function en(e,t,n){var i=n&&n.prefix,s=n&&n.inexport,o=e===\"let\",u=e===\"const\",a,l,c,h;f.inES6()||F(\"W104\",f.tokens.curr,e,\"6\"),o&&f.tokens.next.value===\"(\"?(f.inMoz()||F(\"W118\",f.tokens.next,\"let block\"),V(\"(\"),f.funct[\"(scope)\"].stack(),h=!0):f.funct[\"(noblockscopedvar)\"]&&q(\"E048\",f.tokens.curr,u?\"Const\":\"Let\"),t.first=[];for(;;){var p=[];r.contains([\"{\",\"[\"],f.tokens.next.value)?(a=Gt(),l=!1):(a=[{id:Ct(),token:f.tokens.curr}],l=!0),!i&&u&&f.tokens.next.id!==\"=\"&&F(\"E012\",f.tokens.curr,f.tokens.curr.value);for(var d in a)a.hasOwnProperty(d)&&(d=a[d],f.funct[\"(scope)\"].block.isGlobal()&&S[d.id]===!1&&F(\"W079\",d.token,d.id),d.id&&!f.funct[\"(noblockscopedvar)\"]&&(f.funct[\"(scope)\"].addlabel(d.id,{type:e,token:d.token}),p.push(d.token),l&&s&&f.funct[\"(scope)\"].setExported(d.token.value,d.token)));f.tokens.next.id===\"=\"&&(V(\"=\"),!i&&f.tokens.next.id===\"undefined\"&&F(\"W080\",f.tokens.prev,f.tokens.prev.value),!i&&W(0).id===\"=\"&&f.tokens.next.identifier&&F(\"W120\",f.tokens.next,f.tokens.next.value),c=Q(i?120:10),l?a[0].first=c:Zt(p,c)),t.first=t.first.concat(p);if(f.tokens.next.id!==\",\")break;tt()}return h&&(V(\")\"),_t(!0,!0),t.block=!0,f.funct[\"(scope)\"].unstack()),t}function sn(e){return f.inES6()||F(\"W104\",f.tokens.curr,\"class\",\"6\"),e?(this.name=Ct(),f.funct[\"(scope)\"].addlabel(this.name,{type:\"class\",token:f.tokens.curr})):f.tokens.next.identifier&&f.tokens.next.value!==\"extends\"?(this.name=Ct(),this.namedExpr=!0):this.name=f.nameStack.infer(),on(this),this}function on(e){var t=f.inClassBody;f.tokens.next.value===\"extends\"&&(V(\"extends\"),e.heritage=Q(10)),f.inClassBody=!0,V(\"{\"),e.body=un(e),V(\"}\"),f.inClassBody=t}function un(e){var t,n,r,i,s=Object.create(null),o=Object.create(null),u;for(var a=0;f.tokens.next.id!==\"}\";++a){t=f.tokens.next,n=!1,r=!1,i=null;if(t.id===\";\"){F(\"W032\"),V(\";\");continue}t.id===\"*\"&&(r=!0,V(\"*\"),t=f.tokens.next);if(t.id===\"[\")t=cn(),u=!0;else{if(!Ft(t)){F(\"W052\",f.tokens.next,f.tokens.next.value||f.tokens.next.type),V();continue}V(),u=!1;if(t.identifier&&t.value===\"static\"){pn(f.tokens.next,\"*\")&&(r=!0,V(\"*\"));if(Ft(f.tokens.next)||f.tokens.next.id===\"[\")u=f.tokens.next.id===\"[\",n=!0,t=f.tokens.next,f.tokens.next.id===\"[\"?t=cn():V()}t.identifier&&(t.value===\"get\"||t.value===\"set\")&&(Ft(f.tokens.next)||f.tokens.next.id===\"[\")&&(u=f.tokens.next.id===\"[\",i=t,t=f.tokens.next,f.tokens.next.id===\"[\"?t=cn():V())}if(!pn(f.tokens.next,\"(\")){q(\"E054\",f.tokens.next,f.tokens.next.value);while(f.tokens.next.id!==\"}\"&&!pn(f.tokens.next,\"(\"))V();f.tokens.next.value!==\"(\"&&Xt({statement:e})}u||(i?ln(i.value,n?o:s,t.value,t,!0,n):(t.value===\"constructor\"?f.nameStack.set(e):f.nameStack.set(t),fn(n?o:s,t.value,t,!0,n)));if(i&&t.value===\"constructor\"){var l=i.value===\"get\"?\"class getter method\":\"class setter method\";q(\"E049\",t,l,\"constructor\")}else t.value===\"prototype\"&&q(\"E049\",t,\"class method\",\"prototype\");It(t),Xt({statement:e,type:r?\"generator\":null,classExprBinding:e.namedExpr?e.name:null})}Kt(s)}function fn(e,t,n,r,i){var s=[\"key\",\"class method\",\"static class method\"];s=s[(r||!1)+(i||!1)],n.identifier&&(t=n.value),e[t]&&t!==\"__proto__\"?F(\"W075\",f.tokens.next,s,t):e[t]=Object.create(null),e[t].basic=!0,e[t].basictkn=n}function ln(e,t,n,r,i,s){var o=e===\"get\"?\"getterToken\":\"setterToken\",u=\"\";i?(s&&(u+=\"static \"),u+=e+\"ter method\"):u=\"key\",f.tokens.curr.accessorType=e,f.nameStack.set(r),t[n]?(t[n].basic||t[n][o])&&n!==\"__proto__\"&&F(\"W075\",f.tokens.next,u,n):t[n]=Object.create(null),t[n][o]=r}function cn(){V(\"[\"),f.inES6()||F(\"W119\",f.tokens.curr,\"computed property names\",\"6\");var e=Q(10);return V(\"]\"),e}function hn(e,t){return e.type===\"(punctuator)\"?r.contains(t,e.value):!1}function pn(e,t){return e.type===\"(punctuator)\"&&e.value===t}function dn(){var e=an();e.notJson?(!f.inES6()&&e.isDestAssign&&F(\"W104\",f.tokens.curr,\"destructuring assignment\",\"6\"),Ot()):(f.option.laxbreak=!0,f.jsonMode=!0,mn())}function mn(){function e(){var e={},t=f.tokens.next;V(\"{\");if(f.tokens.next.id!==\"}\")for(;;){if(f.tokens.next.id===\"(end)\")q(\"E026\",f.tokens.next,t.line);else{if(f.tokens.next.id===\"}\"){F(\"W094\",f.tokens.curr);break}f.tokens.next.id===\",\"?q(\"E028\",f.tokens.next):f.tokens.next.id!==\"(string)\"&&F(\"W095\",f.tokens.next,f.tokens.next.value)}e[f.tokens.next.value]===!0?F(\"W075\",f.tokens.next,\"key\",f.tokens.next.value):f.tokens.next.value===\"__proto__\"&&!f.option.proto||f.tokens.next.value===\"__iterator__\"&&!f.option.iterator?F(\"W096\",f.tokens.next,f.tokens.next.value):e[f.tokens.next.value]=!0,V(),V(\":\"),mn();if(f.tokens.next.id!==\",\")break;V(\",\")}V(\"}\")}function t(){var e=f.tokens.next;V(\"[\");if(f.tokens.next.id!==\"]\")for(;;){if(f.tokens.next.id===\"(end)\")q(\"E027\",f.tokens.next,e.line);else{if(f.tokens.next.id===\"]\"){F(\"W094\",f.tokens.curr);break}f.tokens.next.id===\",\"&&q(\"E028\",f.tokens.next)}mn();if(f.tokens.next.id!==\",\")break;V(\",\")}V(\"]\")}switch(f.tokens.next.id){case\"{\":e();break;case\"[\":t();break;case\"true\":case\"false\":case\"null\":case\"(number)\":case\"(string)\":V();break;case\"-\":V(\"-\"),V(\"(number)\");break;default:q(\"E003\",f.tokens.next)}}var e,t={\"<\":!0,\"<=\":!0,\"==\":!0,\"===\":!0,\"!==\":!0,\"!=\":!0,\">\":!0,\">=\":!0,\"+\":!0,\"-\":!0,\"*\":!0,\"/\":!0,\"%\":!0},n,d=[\"closure\",\"exception\",\"global\",\"label\",\"outer\",\"unused\",\"var\"],v,m,g,y,b,w,E,S,x,T,N=[],C=new i.EventEmitter,mt={};mt.legacy=[\"xml\",\"unknown\"],mt.es3=[\"undefined\",\"boolean\",\"number\",\"string\",\"function\",\"object\"],mt.es3=mt.es3.concat(mt.legacy),mt.es6=mt.es3.concat(\"symbol\"),at(\"(number)\",function(){return this}),at(\"(string)\",function(){return this}),f.syntax[\"(identifier)\"]={type:\"(identifier)\",lbp:0,identifier:!0,nud:function(){var e=this.value;return f.tokens.next.id===\"=>\"?this:(f.funct[\"(comparray)\"].check(e)||f.funct[\"(scope)\"].block.use(e,f.tokens.curr),this)},led:function(){q(\"E033\",f.tokens.next,f.tokens.next.value)}};var Pt={lbp:0,identifier:!1,template:!0};f.syntax[\"(template)\"]=r.extend({type:\"(template)\",nud:Wt,led:Wt,noSubst:!1},Pt),f.syntax[\"(template middle)\"]=r.extend({type:\"(template middle)\",middle:!0,noSubst:!1},Pt),f.syntax[\"(template tail)\"]=r.extend({type:\"(template tail)\",tail:!0,noSubst:!1},Pt),f.syntax[\"(no subst template)\"]=r.extend({type:\"(template)\",nud:Wt,led:Wt,noSubst:!0,tail:!0},Pt),at(\"(regexp)\",function(){return this}),rt(\"(endline)\"),rt(\"(begin)\"),rt(\"(end)\").reach=!0,rt(\"(error)\").reach=!0,rt(\"}\").reach=!0,rt(\")\"),rt(\"]\"),rt('\"').reach=!0,rt(\"'\").reach=!0,rt(\";\"),rt(\":\").reach=!0,rt(\"#\"),ft(\"else\"),ft(\"case\").reach=!0,ft(\"catch\"),ft(\"default\").reach=!0,ft(\"finally\"),ct(\"arguments\",function(e){f.isStrict()&&f.funct[\"(global)\"]&&F(\"E008\",e)}),ct(\"eval\"),ct(\"false\"),ct(\"Infinity\"),ct(\"null\"),ct(\"this\",function(e){f.isStrict()&&!jt()&&!f.option.validthis&&(f.funct[\"(statement)\"]&&f.funct[\"(name)\"].charAt(0)>\"Z\"||f.funct[\"(global)\"])&&F(\"W040\",e)}),ct(\"true\"),ct(\"undefined\"),Et(\"=\",\"assign\",20),Et(\"+=\",\"assignadd\",20),Et(\"-=\",\"assignsub\",20),Et(\"*=\",\"assignmult\",20),Et(\"/=\",\"assigndiv\",20).nud=function(){q(\"E014\")},Et(\"%=\",\"assignmod\",20),xt(\"&=\"),xt(\"|=\"),xt(\"^=\"),xt(\"<<=\"),xt(\">>=\"),xt(\">>>=\"),ht(\",\",function(e,t){var n;t.exprs=[e],f.option.nocomma&&F(\"W127\");if(!tt({peek:!0}))return t;for(;;){if(!(n=Q(10)))break;t.exprs.push(n);if(f.tokens.next.value!==\",\"||!tt())break}return t},10,!0),ht(\"?\",function(e,t){return $t(),t.left=e,t.right=Q(10),V(\":\"),t[\"else\"]=Q(10),t},30);var Ht=40;ht(\"||\",function(e,t){return $t(),t.left=e,t.right=Q(Ht),t},Ht),ht(\"&&\",\"and\",50),St(\"|\",\"bitor\",70),St(\"^\",\"bitxor\",80),St(\"&\",\"bitand\",90),dt(\"==\",function(e,t){var n=f.option.eqnull&&((e&&e.value)===\"null\"||(t&&t.value)===\"null\");switch(!0){case!n&&f.option.eqeqeq:this.from=this.character,F(\"W116\",this,\"===\",\"==\");break;case vt(e):F(\"W041\",this,\"===\",e.value);break;case vt(t):F(\"W041\",this,\"===\",t.value);break;case gt(t,e,f):F(\"W122\",this,t.value);break;case gt(e,t,f):F(\"W122\",this,e.value)}return this}),dt(\"===\",function(e,t){return gt(t,e,f)?F(\"W122\",this,t.value):gt(e,t,f)&&F(\"W122\",this,e.value),this}),dt(\"!=\",function(e,t){var n=f.option.eqnull&&((e&&e.value)===\"null\"||(t&&t.value)===\"null\");return!n&&f.option.eqeqeq?(this.from=this.character,F(\"W116\",this,\"!==\",\"!=\")):vt(e)?F(\"W041\",this,\"!==\",e.value):vt(t)?F(\"W041\",this,\"!==\",t.value):gt(t,e,f)?F(\"W122\",this,t.value):gt(e,t,f)&&F(\"W122\",this,e.value),this}),dt(\"!==\",function(e,t){return gt(t,e,f)?F(\"W122\",this,t.value):gt(e,t,f)&&F(\"W122\",this,e.value),this}),dt(\"<\"),dt(\">\"),dt(\"<=\"),dt(\">=\"),St(\"<<\",\"shiftleft\",120),St(\">>\",\"shiftright\",120),St(\">>>\",\"shiftrightunsigned\",120),ht(\"in\",\"in\",120),ht(\"instanceof\",\"instanceof\",120),ht(\"+\",function(e,t){var n;return t.left=e,t.right=n=Q(130),e&&n&&e.id===\"(string)\"&&n.id===\"(string)\"?(e.value+=n.value,e.character=n.character,!f.option.scripturl&&a.javascriptURL.test(e.value)&&F(\"W050\",e),e):t},130),ut(\"+\",\"num\"),ut(\"+++\",function(){return F(\"W007\"),this.arity=\"unary\",this.right=Q(150),this}),ht(\"+++\",function(e){return F(\"W007\"),this.left=e,this.right=Q(130),this},130),ht(\"-\",\"sub\",130),ut(\"-\",\"neg\"),ut(\"---\",function(){return F(\"W006\"),this.arity=\"unary\",this.right=Q(150),this}),ht(\"---\",function(e){return F(\"W006\"),this.left=e,this.right=Q(130),this},130),ht(\"*\",\"mult\",140),ht(\"/\",\"div\",140),ht(\"%\",\"mod\",140),Tt(\"++\"),ut(\"++\",\"preinc\"),f.syntax[\"++\"].exps=!0,Tt(\"--\"),ut(\"--\",\"predec\"),f.syntax[\"--\"].exps=!0,ut(\"delete\",function(){var e=Q(10);return e?(e.id!==\".\"&&e.id!==\"[\"&&F(\"W051\"),this.first=e,e.identifier&&!f.isStrict()&&(e.forgiveUndef=!0),this):this}).exps=!0,ut(\"~\",function(){return f.option.bitwise&&F(\"W016\",this,\"~\"),this.arity=\"unary\",this.right=Q(150),this}),ut(\"...\",function(){return f.inES6(!0)||F(\"W119\",this,\"spread/rest operator\",\"6\"),!f.tokens.next.identifier&&f.tokens.next.type!==\"(string)\"&&!hn(f.tokens.next,[\"[\",\"(\"])&&q(\"E030\",f.tokens.next,f.tokens.next.value),Q(150),this}),ut(\"!\",function(){return this.arity=\"unary\",this.right=Q(150),this.right||B(\"E041\",this.line||0),t[this.right.id]===!0&&F(\"W018\",this,\"!\"),this}),ut(\"typeof\",function(){var e=Q(150);return this.first=this.right=e,e||B(\"E041\",this.line||0,this.character||0),e.identifier&&(e.forgiveUndef=!0),this}),ut(\"new\",function(){var e=Qt(\"target\",function(){f.inES6(!0)||F(\"W119\",f.tokens.prev,\"new.target\",\"6\");var e,t=f.funct;while(t){e=!t[\"(global)\"];if(!t[\"(arrow)\"])break;t=t[\"(context)\"]}e||F(\"W136\",f.tokens.prev,\"new.target\")});if(e)return e;var t=Q(155),n;if(t&&t.id!==\"function\")if(t.identifier){t[\"new\"]=!0;switch(t.value){case\"Number\":case\"String\":case\"Boolean\":case\"Math\":case\"JSON\":F(\"W053\",f.tokens.prev,t.value);break;case\"Symbol\":f.inES6()&&F(\"W053\",f.tokens.prev,t.value);break;case\"Function\":f.option.evil||F(\"W054\");break;case\"Date\":case\"RegExp\":case\"this\":break;default:t.id!==\"function\"&&(n=t.value.substr(0,1),f.option.newcap&&(n<\"A\"||n>\"Z\")&&!f.funct[\"(scope)\"].isPredefined(t.value)&&F(\"W055\",f.tokens.curr))}}else t.id!==\".\"&&t.id!==\"[\"&&t.id!==\"(\"&&F(\"W056\",f.tokens.curr);else f.option.supernew||F(\"W057\",this);return f.tokens.next.id!==\"(\"&&!f.option.supernew&&F(\"W058\",f.tokens.curr,f.tokens.curr.value),this.first=this.right=t,this}),f.syntax[\"new\"].exps=!0,ut(\"void\").exps=!0,ht(\".\",function(e,t){var n=Ct(!1,!0);return typeof n==\"string\"&&Dt(n),t.left=e,t.right=n,n&&n===\"hasOwnProperty\"&&f.tokens.next.value===\"=\"&&F(\"W001\"),!e||e.value!==\"arguments\"||n!==\"callee\"&&n!==\"caller\"?!f.option.evil&&e&&e.value===\"document\"&&(n===\"write\"||n===\"writeln\")&&F(\"W060\",e):f.option.noarg?F(\"W059\",e,n):f.isStrict()&&q(\"E008\"),!f.option.evil&&(n===\"eval\"||n===\"execScript\")&&yt(e,f)&&F(\"W061\"),t},160,!0),ht(\"(\",function(e,t){f.option.immed&&e&&!e.immed&&e.id===\"function\"&&F(\"W062\");var n=0,r=[];e&&e.type===\"(identifier)\"&&e.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&\"Array Number String Boolean Date Object Error Symbol\".indexOf(e.value)===-1&&(e.value===\"Math\"?F(\"W063\",e):f.option.newcap&&F(\"W064\",e));if(f.tokens.next.id!==\")\")for(;;){r[r.length]=Q(10),n+=1;if(f.tokens.next.id!==\",\")break;tt()}return V(\")\"),typeof e==\"object\"&&(!f.inES5()&&e.value===\"parseInt\"&&n===1&&F(\"W065\",f.tokens.curr),f.option.evil||(e.value===\"eval\"||e.value===\"Function\"||e.value===\"execScript\"?(F(\"W061\",e),r[0]&&[0].id===\"(string)\"&&U(e,r[0].value)):!r[0]||r[0].id!==\"(string)\"||e.value!==\"setTimeout\"&&e.value!==\"setInterval\"?r[0]&&r[0].id===\"(string)\"&&e.value===\".\"&&e.left.value===\"window\"&&(e.right===\"setTimeout\"||e.right===\"setInterval\")&&(F(\"W066\",e),U(e,r[0].value)):(F(\"W066\",e),U(e,r[0].value))),!e.identifier&&e.id!==\".\"&&e.id!==\"[\"&&e.id!==\"=>\"&&e.id!==\"(\"&&e.id!==\"&&\"&&e.id!==\"||\"&&e.id!==\"?\"&&(!f.inES6()||!e[\"(name)\"])&&F(\"W067\",t)),t.left=e,t},155,!0).exps=!0,ut(\"(\",function(){var e=f.tokens.next,t,n=-1,r,i,s,o,u=1,a=f.tokens.curr,l=f.tokens.prev,c=!f.option.singleGroups;do e.value===\"(\"?u+=1:e.value===\")\"&&(u-=1),n+=1,t=e,e=W(n);while((u!==0||t.value!==\")\")&&e.value!==\";\"&&e.type!==\"(end)\");f.tokens.next.id===\"function\"&&(i=f.tokens.next.immed=!0);if(e.value===\"=>\")return Xt({type:\"arrow\",parsedOpening:!0});var h=[];if(f.tokens.next.id!==\")\")for(;;){h.push(Q(10));if(f.tokens.next.id!==\",\")break;f.option.nocomma&&F(\"W127\"),tt()}V(\")\",this),f.option.immed&&h[0]&&h[0].id===\"function\"&&f.tokens.next.id!==\"(\"&&f.tokens.next.id!==\".\"&&f.tokens.next.id!==\"[\"&&F(\"W068\",this);if(!h.length)return;return h.length>1?(r=Object.create(f.syntax[\",\"]),r.exprs=h,s=h[0],o=h[h.length-1],c||(c=l.assign||l.delim)):(r=s=o=h[0],c||(c=a.beginsStmt&&(r.id===\"{\"||i||Ut(r))||i&&(!J()||f.tokens.prev.id!==\"}\")||Ut(r)&&!J()||r.id===\"{\"&&l.id===\"=>\"||r.type===\"(number)\"&&pn(e,\".\")&&/^\\d+$/.test(r.value))),r&&(!c&&(s.left||s.right||r.exprs)&&(c=!K(l)&&s.lbp<=l.lbp||!J()&&o.lbp<f.tokens.next.lbp),c||F(\"W126\",a),r.paren=!0),r}),pt(\"=>\"),ht(\"[\",function(e,t){var n=Q(10),r;return n&&n.type===\"(string)\"&&(!f.option.evil&&(n.value===\"eval\"||n.value===\"execScript\")&&yt(e,f)&&F(\"W061\"),Dt(n.value),!f.option.sub&&a.identifier.test(n.value)&&(r=f.syntax[n.value],(!r||!O(r))&&F(\"W069\",f.tokens.prev,n.value))),V(\"]\",t),n&&n.value===\"hasOwnProperty\"&&f.tokens.next.value===\"=\"&&F(\"W001\"),t.left=e,t.right=n,t},160,!0),ut(\"[\",function(){var e=an();if(e.isCompArray)return!f.option.esnext&&!f.inMoz()&&F(\"W118\",f.tokens.curr,\"array comprehension\"),Bt();if(e.isDestAssign)return this.destructAssign=Gt({openingParsed:!0,assignment:!0}),this;var t=f.tokens.curr.line!==G(f.tokens.next);this.first=[],t&&(g+=f.option.indent,f.tokens.next.from===g+f.option.indent&&(g+=f.option.indent));while(f.tokens.next.id!==\"(end)\"){while(f.tokens.next.id===\",\"){if(!f.option.elision){if(!!f.inES5()){F(\"W128\");do V(\",\");while(f.tokens.next.id===\",\");continue}F(\"W070\")}V(\",\")}if(f.tokens.next.id===\"]\")break;this.first.push(Q(10));if(f.tokens.next.id!==\",\")break;tt({allowTrailing:!0});if(f.tokens.next.id===\"]\"&&!f.inES5()){F(\"W070\",f.tokens.curr);break}}return t&&(g-=f.option.indent),V(\"]\",this),this}),function(e){e.nud=function(){var e,t,n,r,i,s=!1,o,u=Object.create(null);e=f.tokens.curr.line!==G(f.tokens.next),e&&(g+=f.option.indent,f.tokens.next.from===g+f.option.indent&&(g+=f.option.indent));var a=an();if(a.isDestAssign)return this.destructAssign=Gt({openingParsed:!0,assignment:!0}),this;for(;;){if(f.tokens.next.id===\"}\")break;o=f.tokens.next.value;if(!f.tokens.next.identifier||X().id!==\",\"&&X().id!==\"}\")if(W().id===\":\"||o!==\"get\"&&o!==\"set\"){f.tokens.next.value===\"*\"&&f.tokens.next.type===\"(punctuator)\"?(f.inES6()||F(\"W104\",f.tokens.next,\"generator functions\",\"6\"),V(\"*\"),s=!0):s=!1;if(f.tokens.next.id===\"[\")n=cn(),f.nameStack.set(n);else{f.nameStack.set(f.tokens.next),n=It(),fn(u,n,f.tokens.next);if(typeof n!=\"string\")break}f.tokens.next.value===\"(\"?(f.inES6()||F(\"W104\",f.tokens.curr,\"concise methods\",\"6\"),Xt({type:s?\"generator\":null})):(V(\":\"),Q(10))}else V(o),f.inES5()||q(\"E034\"),n=It(),!n&&!f.inES6()&&q(\"E035\"),n&&ln(o,u,n,f.tokens.curr),i=f.tokens.next,t=Xt(),r=t[\"(params)\"],o===\"get\"&&n&&r?F(\"W076\",i,r[0],n):o===\"set\"&&n&&(!r||r.length!==1)&&F(\"W077\",i,n);else f.inES6()||F(\"W104\",f.tokens.next,\"object short notation\",\"6\"),n=It(!0),fn(u,n,f.tokens.next),Q(10);Dt(n);if(f.tokens.next.id!==\",\")break;tt({allowTrailing:!0,property:!0}),f.tokens.next.id===\",\"?F(\"W070\",f.tokens.curr):f.tokens.next.id===\"}\"&&!f.inES5()&&F(\"W070\",f.tokens.curr)}return e&&(g-=f.option.indent),V(\"}\",this),Kt(u),this},e.fud=function(){q(\"E036\",f.tokens.curr)}}(rt(\"{\"));var tn=it(\"const\",function(e){return en(\"const\",this,e)});tn.exps=!0;var nn=it(\"let\",function(e){return en(\"let\",this,e)});nn.exps=!0;var rn=it(\"var\",function(e){var t=e&&e.prefix,n=e&&e.inexport,i,o,u,a=e&&e.implied,l=!e||!e.ignore;this.first=[];for(;;){var c=[];r.contains([\"{\",\"[\"],f.tokens.next.value)?(i=Gt(),o=!1):(i=[{id:Ct(),token:f.tokens.curr}],o=!0),(!t||!a)&&l&&f.option.varstmt&&F(\"W132\",this),this.first=this.first.concat(c);for(var h in i)i.hasOwnProperty(h)&&(h=i[h],!a&&f.funct[\"(global)\"]&&(S[h.id]===!1?F(\"W079\",h.token,h.id):f.option.futurehostile===!1&&(!f.inES5()&&s.ecmaIdentifiers[5][h.id]===!1||!f.inES6()&&s.ecmaIdentifiers[6][h.id]===!1)&&F(\"W129\",h.token,h.id)),h.id&&(a===\"for\"?(f.funct[\"(scope)\"].has(h.id)||l&&F(\"W088\",h.token,h.id),f.funct[\"(scope)\"].block.use(h.id,h.token)):(f.funct[\"(scope)\"].addlabel(h.id,{type:\"var\",token:h.token}),o&&n&&f.funct[\"(scope)\"].setExported(h.id,h.token)),c.push(h.token)));f.tokens.next.id===\"=\"&&(f.nameStack.set(f.tokens.curr),V(\"=\"),!t&&l&&!f.funct[\"(loopage)\"]&&f.tokens.next.id===\"undefined\"&&F(\"W080\",f.tokens.prev,f.tokens.prev.value),W(0).id===\"=\"&&f.tokens.next.identifier&&(!t&&l&&!f.funct[\"(params)\"]||f.funct[\"(params)\"].indexOf(f.tokens.next.value)===-1)&&F(\"W120\",f.tokens.next,f.tokens.next.value),u=Q(t?120:10),o?i[0].first=u:Zt(c,u));if(f.tokens.next.id!==\",\")break;tt()}return this});rn.exps=!0,st(\"class\",function(){return sn.call(this,!0)}),st(\"function\",function(e){var t=e&&e.inexport,n=!1;f.tokens.next.value===\"*\"&&(V(\"*\"),f.inES6({strict:!0})?n=!0:F(\"W119\",f.tokens.curr,\"function*\",\"6\")),m&&F(\"W082\",f.tokens.curr);var r=Nt();return f.funct[\"(scope)\"].addlabel(r,{type:\"function\",token:f.tokens.curr}),r===undefined?F(\"W025\"):t&&f.funct[\"(scope)\"].setExported(r,f.tokens.prev),Xt({name:r,statement:this,type:n?\"generator\":null,ignoreLoopFunc:m}),f.tokens.next.id===\"(\"&&f.tokens.next.line===f.tokens.curr.line&&q(\"E039\"),this}),ut(\"function\",function(){var e=!1;f.tokens.next.value===\"*\"&&(f.inES6()||F(\"W119\",f.tokens.curr,\"function*\",\"6\"),V(\"*\"),e=!0);var t=Nt();return Xt({name:t,type:e?\"generator\":null}),this}),st(\"if\",function(){var e=f.tokens.next;$t(),f.condition=!0,V(\"(\");var t=Q(0);Jt(t);var n=null;f.option.forin&&f.forinifcheckneeded&&(f.forinifcheckneeded=!1,n=f.forinifchecks[f.forinifchecks.length-1],t.type===\"(punctuator)\"&&t.value===\"!\"?n.type=\"(negative)\":n.type=\"(positive)\"),V(\")\",e),f.condition=!1;var r=_t(!0,!0);return n&&n.type===\"(negative)\"&&r&&r[0]&&r[0].type===\"(identifier)\"&&r[0].value===\"continue\"&&(n.type=\"(negative-with-continue)\"),f.tokens.next.id===\"else\"&&(V(\"else\"),f.tokens.next.id===\"if\"||f.tokens.next.id===\"switch\"?At():_t(!0,!0)),this}),st(\"try\",function(){function t(){V(\"catch\"),V(\"(\"),f.funct[\"(scope)\"].stack(\"catchparams\");if(hn(f.tokens.next,[\"[\",\"{\"])){var e=Gt();r.each(e,function(e){e.id&&f.funct[\"(scope)\"].addParam(e.id,e,\"exception\")})}else f.tokens.next.type!==\"(identifier)\"?F(\"E030\",f.tokens.next,f.tokens.next.value):f.funct[\"(scope)\"].addParam(Ct(),f.tokens.curr,\"exception\");f.tokens.next.value===\"if\"&&(f.inMoz()||F(\"W118\",f.tokens.curr,\"catch filter\"),V(\"if\"),Q(0)),V(\")\"),_t(!1),f.funct[\"(scope)\"].unstack()}var e;_t(!0);while(f.tokens.next.id===\"catch\")$t(),e&&!f.inMoz()&&F(\"W118\",f.tokens.next,\"multiple catch blocks\"),t(),e=!0;if(f.tokens.next.id===\"finally\"){V(\"finally\"),_t(!0);return}return e||q(\"E021\",f.tokens.next,\"catch\",f.tokens.next.value),this}),st(\"while\",function(){var e=f.tokens.next;return f.funct[\"(breakage)\"]+=1,f.funct[\"(loopage)\"]+=1,$t(),V(\"(\"),Jt(Q(0)),V(\")\",e),_t(!0,!0),f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1,this}).labelled=!0,st(\"with\",function(){var e=f.tokens.next;return f.isStrict()?q(\"E010\",f.tokens.curr):f.option.withstmt||F(\"W085\",f.tokens.curr),V(\"(\"),Q(0),V(\")\",e),_t(!0,!0),this}),st(\"switch\",function(){var e=f.tokens.next,t=!1,n=!1;f.funct[\"(breakage)\"]+=1,V(\"(\"),Jt(Q(0)),V(\")\",e),e=f.tokens.next,V(\"{\"),f.tokens.next.from===g&&(n=!0),n||(g+=f.option.indent),this.cases=[];for(;;)switch(f.tokens.next.id){case\"case\":switch(f.funct[\"(verb)\"]){case\"yield\":case\"break\":case\"case\":case\"continue\":case\"return\":case\"switch\":case\"throw\":break;default:f.tokens.curr.caseFallsThrough||F(\"W086\",f.tokens.curr,\"case\")}V(\"case\"),this.cases.push(Q(0)),$t(),t=!0,V(\":\"),f.funct[\"(verb)\"]=\"case\";break;case\"default\":switch(f.funct[\"(verb)\"]){case\"yield\":case\"break\":case\"continue\":case\"return\":case\"throw\":break;default:this.cases.length&&(f.tokens.curr.caseFallsThrough||F(\"W086\",f.tokens.curr,\"default\"))}V(\"default\"),t=!0,V(\":\");break;case\"}\":n||(g-=f.option.indent),V(\"}\",e),f.funct[\"(breakage)\"]-=1,f.funct[\"(verb)\"]=undefined;return;case\"(end)\":q(\"E023\",f.tokens.next,\"}\");return;default:g+=f.option.indent;if(t)switch(f.tokens.curr.id){case\",\":q(\"E040\");return;case\":\":t=!1,Ot();break;default:q(\"E025\",f.tokens.curr);return}else{if(f.tokens.curr.id!==\":\"){q(\"E021\",f.tokens.next,\"case\",f.tokens.next.value);return}V(\":\"),q(\"E024\",f.tokens.curr,\":\"),Ot()}g-=f.option.indent}return this}).labelled=!0,it(\"debugger\",function(){return f.option.debug||F(\"W087\",this),this}).exps=!0,function(){var e=it(\"do\",function(){f.funct[\"(breakage)\"]+=1,f.funct[\"(loopage)\"]+=1,$t(),this.first=_t(!0,!0),V(\"while\");var e=f.tokens.next;return V(\"(\"),Jt(Q(0)),V(\")\",e),f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1,this});e.labelled=!0,e.exps=!0}(),st(\"for\",function(){var e,t=f.tokens.next,n=!1,i=null;t.value===\"each\"&&(i=t,V(\"each\"),f.inMoz()||F(\"W118\",f.tokens.curr,\"for each\")),$t(),V(\"(\");var s,o=0,u=[\"in\",\"of\"],a=0,l,c;hn(f.tokens.next,[\"{\",\"[\"])&&++a;do{s=W(o),++o,hn(s,[\"{\",\"[\"])?++a:hn(s,[\"}\",\"]\"])&&--a;if(a<0)break;a===0&&(!l&&pn(s,\",\")?l=s:!c&&pn(s,\"=\")&&(c=s))}while(a>0||!r.contains(u,s.value)&&s.value!==\";\"&&s.type!==\"(end)\");if(r.contains(u,s.value)){!f.inES6()&&s.value===\"of\"&&F(\"W104\",s,\"for of\",\"6\");var h=!c&&!l;c&&q(\"W133\",l,s.value,\"initializer is forbidden\"),l&&q(\"W133\",l,s.value,\"more than one ForBinding\"),f.tokens.next.id===\"var\"?(V(\"var\"),f.tokens.curr.fud({prefix:!0})):f.tokens.next.id===\"let\"||f.tokens.next.id===\"const\"?(V(f.tokens.next.id),n=!0,f.funct[\"(scope)\"].stack(),f.tokens.curr.fud({prefix:!0})):Object.create(rn).fud({prefix:!0,implied:\"for\",ignore:!h}),V(s.value),Q(20),V(\")\",t),s.value===\"in\"&&f.option.forin&&(f.forinifcheckneeded=!0,f.forinifchecks===undefined&&(f.forinifchecks=[]),f.forinifchecks.push({type:\"(none)\"})),f.funct[\"(breakage)\"]+=1,f.funct[\"(loopage)\"]+=1,e=_t(!0,!0);if(s.value===\"in\"&&f.option.forin){if(f.forinifchecks&&f.forinifchecks.length>0){var p=f.forinifchecks.pop();(e&&e.length>0&&(typeof e[0]!=\"object\"||e[0].value!==\"if\")||p.type===\"(positive)\"&&e.length>1||p.type===\"(negative)\")&&F(\"W089\",this)}f.forinifcheckneeded=!1}f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1}else{i&&q(\"E045\",i);if(f.tokens.next.id!==\";\")if(f.tokens.next.id===\"var\")V(\"var\"),f.tokens.curr.fud();else if(f.tokens.next.id===\"let\")V(\"let\"),n=!0,f.funct[\"(scope)\"].stack(),f.tokens.curr.fud();else for(;;){Q(0,\"for\");if(f.tokens.next.id!==\",\")break;l()}Z(f.tokens.curr),V(\";\"),f.funct[\"(loopage)\"]+=1,f.tokens.next.id!==\";\"&&Jt(Q(0)),Z(f.tokens.curr),V(\";\"),f.tokens.next.id===\";\"&&q(\"E021\",f.tokens.next,\")\",\";\");if(f.tokens.next.id!==\")\")for(;;){Q(0,\"for\");if(f.tokens.next.id!==\",\")break;l()}V(\")\",t),f.funct[\"(breakage)\"]+=1,_t(!0,!0),f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1}return n&&f.funct[\"(scope)\"].unstack(),this}).labelled=!0,it(\"break\",function(){var e=f.tokens.next.value;return f.option.asi||Z(this),f.tokens.next.id!==\";\"&&!f.tokens.next.reach&&f.tokens.curr.line===G(f.tokens.next)?(f.funct[\"(scope)\"].funct.hasBreakLabel(e)||F(\"W090\",f.tokens.next,e),this.first=f.tokens.next,V()):f.funct[\"(breakage)\"]===0&&F(\"W052\",f.tokens.next,this.value),kt(this),this}).exps=!0,it(\"continue\",function(){var e=f.tokens.next.value;return f.funct[\"(breakage)\"]===0&&F(\"W052\",f.tokens.next,this.value),f.funct[\"(loopage)\"]||F(\"W052\",f.tokens.next,this.value),f.option.asi||Z(this),f.tokens.next.id!==\";\"&&!f.tokens.next.reach&&f.tokens.curr.line===G(f.tokens.next)&&(f.funct[\"(scope)\"].funct.hasBreakLabel(e)||F(\"W090\",f.tokens.next,e),this.first=f.tokens.next,V()),kt(this),this}).exps=!0,it(\"return\",function(){return this.line===G(f.tokens.next)?f.tokens.next.id!==\";\"&&!f.tokens.next.reach&&(this.first=Q(0),this.first&&this.first.type===\"(punctuator)\"&&this.first.value===\"=\"&&!this.first.paren&&!f.option.boss&&I(\"W093\",this.first.line,this.first.character)):f.tokens.next.type===\"(punctuator)\"&&[\"[\",\"{\",\"+\",\"-\"].indexOf(f.tokens.next.value)>-1&&Z(this),kt(this),this}).exps=!0,function(e){e.exps=!0,e.lbp=25}(ut(\"yield\",function(){var e=f.tokens.prev;f.inES6(!0)&&!f.funct[\"(generator)\"]?(\"(catch)\"!==f.funct[\"(name)\"]||!f.funct[\"(context)\"][\"(generator)\"])&&q(\"E046\",f.tokens.curr,\"yield\"):f.inES6()||F(\"W104\",f.tokens.curr,\"yield\",\"6\"),f.funct[\"(generator)\"]=\"yielded\";var t=!1;f.tokens.next.value===\"*\"&&(t=!0,V(\"*\"));if(this.line===G(f.tokens.next)||!f.inMoz()){if(t||f.tokens.next.id!==\";\"&&!f.option.asi&&!f.tokens.next.reach&&f.tokens.next.nud)Y(f.tokens.curr,f.tokens.next),this.first=Q(10),this.first.type===\"(punctuator)\"&&this.first.value===\"=\"&&!this.first.paren&&!f.option.boss&&I(\"W093\",this.first.line,this.first.character);f.inMoz()&&f.tokens.next.id!==\")\"&&(e.lbp>30||!e.assign&&!J()||e.id===\"yield\")&&q(\"E050\",this)}else f.option.asi||Z(this);return this})),it(\"throw\",function(){return Z(this),this.first=Q(20),kt(this),this}).exps=!0,it(\"import\",function(){f.inES6()||F(\"W119\",f.tokens.curr,\"import\",\"6\");if(f.tokens.next.type===\"(string)\")return V(\"(string)\"),this;if(f.tokens.next.identifier){this.name=Ct(),f.funct[\"(scope)\"].addlabel(this.name,{type:\"const\",token:f.tokens.curr});if(f.tokens.next.value!==\",\")return V(\"from\"),V(\"(string)\"),this;V(\",\")}if(f.tokens.next.id===\"*\")V(\"*\"),V(\"as\"),f.tokens.next.identifier&&(this.name=Ct(),f.funct[\"(scope)\"].addlabel(this.name,{type:\"const\",token:f.tokens.curr}));else{V(\"{\");for(;;){if(f.tokens.next.value===\"}\"){V(\"}\");break}var e;f.tokens.next.type===\"default\"?(e=\"default\",V(\"default\")):e=Ct(),f.tokens.next.value===\"as\"&&(V(\"as\"),e=Ct()),f.funct[\"(scope)\"].addlabel(e,{type:\"const\",token:f.tokens.curr});if(f.tokens.next.value!==\",\"){if(f.tokens.next.value===\"}\"){V(\"}\");break}q(\"E024\",f.tokens.next,f.tokens.next.value);break}V(\",\")}}return V(\"from\"),V(\"(string)\"),this}).exps=!0,it(\"export\",function(){var e=!0,t,n;f.inES6()||(F(\"W119\",f.tokens.curr,\"export\",\"6\"),e=!1),f.funct[\"(scope)\"].block.isGlobal()||(q(\"E053\",f.tokens.curr),e=!1);if(f.tokens.next.value===\"*\")return V(\"*\"),V(\"from\"),V(\"(string)\"),this;if(f.tokens.next.type===\"default\"){f.nameStack.set(f.tokens.next),V(\"default\");var r=f.tokens.next.id;if(r===\"function\"||r===\"class\")this.block=!0;return t=W(),Q(10),n=t.value,this.block&&(f.funct[\"(scope)\"].addlabel(n,{type:r,token:t}),f.funct[\"(scope)\"].setExported(n,t)),this}if(f.tokens.next.value===\"{\"){V(\"{\");var i=[];for(;;){f.tokens.next.identifier||q(\"E030\",f.tokens.next,f.tokens.next.value),V(),i.push(f.tokens.curr),f.tokens.next.value===\"as\"&&(V(\"as\"),f.tokens.next.identifier||q(\"E030\",f.tokens.next,f.tokens.next.value),V());if(f.tokens.next.value!==\",\"){if(f.tokens.next.value===\"}\"){V(\"}\");break}q(\"E024\",f.tokens.next,f.tokens.next.value);break}V(\",\")}return f.tokens.next.value===\"from\"?(V(\"from\"),V(\"(string)\")):e&&i.forEach(function(e){f.funct[\"(scope)\"].setExported(e.value,e)}),this}if(f.tokens.next.id===\"var\")V(\"var\"),f.tokens.curr.fud({inexport:!0});else if(f.tokens.next.id===\"let\")V(\"let\"),f.tokens.curr.fud({inexport:!0});else if(f.tokens.next.id===\"const\")V(\"const\"),f.tokens.curr.fud({inexport:!0});else if(f.tokens.next.id===\"function\")this.block=!0,V(\"function\"),f.syntax[\"function\"].fud({inexport:!0});else if(f.tokens.next.id===\"class\"){this.block=!0,V(\"class\");var s=f.tokens.next;f.syntax[\"class\"].fud(),f.funct[\"(scope)\"].setExported(s.value,s)}else q(\"E024\",f.tokens.next,f.tokens.next.value);return this}).exps=!0,lt(\"abstract\"),lt(\"boolean\"),lt(\"byte\"),lt(\"char\"),lt(\"class\",{es5:!0,nud:sn}),lt(\"double\"),lt(\"enum\",{es5:!0}),lt(\"export\",{es5:!0}),lt(\"extends\",{es5:!0}),lt(\"final\"),lt(\"float\"),lt(\"goto\"),lt(\"implements\",{es5:!0,strictOnly:!0}),lt(\"import\",{es5:!0}),lt(\"int\"),lt(\"interface\",{es5:!0,strictOnly:!0}),lt(\"long\"),lt(\"native\"),lt(\"package\",{es5:!0,strictOnly:!0}),lt(\"private\",{es5:!0,strictOnly:!0}),lt(\"protected\",{es5:!0,strictOnly:!0}),lt(\"public\",{es5:!0,strictOnly:!0}),lt(\"short\"),lt(\"static\",{es5:!0,strictOnly:!0}),lt(\"super\",{es5:!0}),lt(\"synchronized\"),lt(\"transient\"),lt(\"volatile\");var an=function(){var e,t,n,r=-1,i=0,s={};hn(f.tokens.curr,[\"[\",\"{\"])&&(i+=1);do{n=r===-1?f.tokens.curr:e,e=r===-1?f.tokens.next:W(r),t=W(r+1),r+=1,hn(e,[\"[\",\"{\"])?i+=1:hn(e,[\"]\",\"}\"])&&(i-=1);if(i===1&&e.identifier&&e.value===\"for\"&&!pn(n,\".\")){s.isCompArray=!0,s.notJson=!0;break}if(i===0&&hn(e,[\"}\",\"]\"])){if(t.value===\"=\"){s.isDestAssign=!0,s.notJson=!0;break}if(t.value===\".\"){s.notJson=!0;break}}pn(e,\";\")&&(s.isBlock=!0,s.notJson=!0)}while(i>0&&e.id!==\"(end)\");return s},vn=function(){function i(e){var t=n.variables.filter(function(t){if(t.value===e)return t.undef=!1,e}).length;return t!==0}function s(e){var t=n.variables.filter(function(t){if(t.value===e&&!t.undef)return t.unused===!0&&(t.unused=!1),e}).length;return t===0}var e=function(){this.mode=\"use\",this.variables=[]},t=[],n;return{stack:function(){n=new e,t.push(n)},unstack:function(){n.variables.filter(function(e){e.unused&&F(\"W098\",e.token,e.raw_text||e.value),e.undef&&f.funct[\"(scope)\"].block.use(e.value,e.token)}),t.splice(-1,1),n=t[t.length-1]},setState:function(e){r.contains([\"use\",\"define\",\"generate\",\"filter\"],e)&&(n.mode=e)},check:function(e){if(!n)return;return n&&n.mode===\"use\"?(s(e)&&n.variables.push({funct:f.funct,token:f.tokens.curr,value:e,undef:!0,unused:!1}),!0):n&&n.mode===\"define\"?(i(e)||n.variables.push({funct:f.funct,token:f.tokens.curr,value:e,undef:!1,unused:!0}),!0):n&&n.mode===\"generate\"?(f.funct[\"(scope)\"].block.use(e,f.tokens.curr),!0):n&&n.mode===\"filter\"?(s(e)&&f.funct[\"(scope)\"].block.use(e,f.tokens.curr),!0):!1}}},gn=function(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")},yn=function(t,i,o){function U(e,t){if(!e)return;!Array.isArray(e)&&typeof e==\"object\"&&(e=Object.keys(e)),e.forEach(t)}var a,l,c,d,A,O,M={},P={};i=r.clone(i),f.reset(),i&&i.scope?p.scope=i.scope:(p.errors=[],p.undefs=[],p.internals=[],p.blacklist={},p.scope=\"(main)\"),S=Object.create(null),D(S,s.ecmaIdentifiers[3]),D(S,s.reservedVars),D(S,o||{}),n=Object.create(null);var j=Object.create(null);if(i){U(i.predef||null,function(e){var t,n;e[0]===\"-\"?(t=e.slice(1),p.blacklist[t]=t,delete S[t]):(n=Object.getOwnPropertyDescriptor(i.predef,e),S[e]=n?n.value:!1)}),U(i.exported||null,function(e){j[e]=!0}),delete i.predef,delete i.exported,O=Object.keys(i);for(c=0;c<O.length;c++)if(/^-W\\d{3}$/g.test(O[c]))P[O[c].slice(1)]=!0;else{var z=O[c];M[z]=i[z],(z===\"esversion\"&&i[z]===5||z===\"es5\"&&i[z])&&F(\"I003\"),O[c]===\"newcap\"&&i[z]===!1&&(M[\"(explicitNewcap)\"]=!0)}}f.option=M,f.ignored=P,f.option.indent=f.option.indent||4,f.option.maxerr=f.option.maxerr||50,g=1;var W=h(f,S,j,n);W.on(\"warning\",function(e){F.apply(null,[e.code,e.token].concat(e.data))}),W.on(\"error\",function(e){q.apply(null,[e.code,e.token].concat(e.data))}),f.funct=Rt(\"(global)\",null,{\"(global)\":!0,\"(scope)\":W,\"(comparray)\":vn(),\"(metrics)\":Vt(f.tokens.next)}),v=[f.funct],T=[],x=null,w={},E=null,m=!1,y=[];if(!L(t)&&!Array.isArray(t))return R(\"E004\",0),!1;e={get isJSON(){return f.jsonMode},getOption:function(e){return f.option[e]||null},getCache:function(e){return f.cache[e]},setCache:function(e,t){f.cache[e]=t},warn:function(e,t){I.apply(null,[e,t.line,t.char].concat(t.data))},on:function(e,t){e.split(\" \").forEach(function(e){C.on(e,t)}.bind(this))}},C.removeAllListeners(),(N||[]).forEach(function(t){t(e)}),f.tokens.prev=f.tokens.curr=f.tokens.next=f.syntax[\"(begin)\"],i&&i.ignoreDelimiters&&(Array.isArray(i.ignoreDelimiters)||(i.ignoreDelimiters=[i.ignoreDelimiters]),i.ignoreDelimiters.forEach(function(e){if(!e.start||!e.end)return;d=gn(e.start)+\"[\\\\s\\\\S]*?\"+gn(e.end),A=new RegExp(d,\"ig\"),t=t.replace(A,function(e){return e.replace(/./g,\" \")})})),b=new u(t),b.on(\"warning\",function(e){I.apply(null,[e.code,e.line,e.character].concat(e.data))}),b.on(\"error\",function(e){R.apply(null,[e.code,e.line,e.character].concat(e.data))}),b.on(\"fatal\",function(e){B(\"E041\",e.line,e.from)}),b.on(\"Identifier\",function(e){C.emit(\"Identifier\",e)}),b.on(\"String\",function(e){C.emit(\"String\",e)}),b.on(\"Number\",function(e){C.emit(\"Number\",e)}),b.start();for(var X in i)r.has(i,X)&&k(X,f.tokens.curr);H(),D(S,o||{}),tt.first=!0;try{V();switch(f.tokens.next.id){case\"{\":case\"[\":dn();break;default:Mt(),f.directive[\"use strict\"]&&f.option.strict!==\"global\"&&F(\"W097\",f.tokens.prev),Ot()}f.tokens.next.id!==\"(end)\"&&B(\"E041\",f.tokens.curr.line),f.funct[\"(scope)\"].unstack()}catch($){if(!$||$.name!==\"JSHintError\")throw $;var J=f.tokens.next||{};p.errors.push({scope:\"(main)\",raw:$.raw,code:$.code,reason:$.message,line:$.line||J.line,character:$.character||J.from},null)}if(p.scope===\"(main)\"){i=i||{};for(a=0;a<p.internals.length;a+=1)l=p.internals[a],i.scope=l.elem,yn(l.value,i,o)}return p.errors.length===0};return yn.addModule=function(e){N.push(e)},yn.addModule(l.register),yn.data=function(){var e={functions:[],options:f.option},t,n,r,i,s,o;yn.errors.length&&(e.errors=yn.errors),f.jsonMode&&(e.json=!0);var u=f.funct[\"(scope)\"].getImpliedGlobals();u.length>0&&(e.implieds=u),T.length>0&&(e.urls=T),o=f.funct[\"(scope)\"].getUsedOrDefinedGlobals(),o.length>0&&(e.globals=o);for(r=1;r<v.length;r+=1){n=v[r],t={};for(i=0;i<d.length;i+=1)t[d[i]]=[];for(i=0;i<d.length;i+=1)t[d[i]].length===0&&delete t[d[i]];t.name=n[\"(name)\"],t.param=n[\"(params)\"],t.line=n[\"(line)\"],t.character=n[\"(character)\"],t.last=n[\"(last)\"],t.lastcharacter=n[\"(lastcharacter)\"],t.metrics={complexity:n[\"(metrics)\"].ComplexityCount,parameters:n[\"(metrics)\"].arity,statements:n[\"(metrics)\"].statementCount},e.functions.push(t)}var a=f.funct[\"(scope)\"].getUnuseds();a.length>0&&(e.unused=a);for(s in w)if(typeof w[s]==\"number\"){e.member=w;break}return e},yn.jshint=yn,yn}();typeof n==\"object\"&&n&&(n.JSHINT=p)},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./lex.js\":\"/node_modules/jshint/src/lex.js\",\"./messages.js\":\"/node_modules/jshint/src/messages.js\",\"./options.js\":\"/node_modules/jshint/src/options.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./scope-manager.js\":\"/node_modules/jshint/src/scope-manager.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"./style.js\":\"/node_modules/jshint/src/style.js\",\"./vars.js\":\"/node_modules/jshint/src/vars.js\",events:\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/lex.js\":[function(e,t,n){\"use strict\";function h(){var e=[];return{push:function(t){e.push(t)},check:function(){for(var t=0;t<e.length;++t)e[t]();e.splice(0,e.length)}}}function p(e){var t=e;typeof t==\"string\"&&(t=t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\").split(\"\\n\")),t[0]&&t[0].substr(0,2)===\"#!\"&&(t[0].indexOf(\"node\")!==-1&&(o.option.node=!0),t[0]=\"\"),this.emitter=new i.EventEmitter,this.source=e,this.setLines(t),this.prereg=!0,this.line=0,this.char=1,this.from=1,this.input=\"\",this.inComment=!1,this.context=[],this.templateStarts=[];for(var n=0;n<o.option.indent;n+=1)o.tab+=\" \";this.ignoreLinterErrors=!1}var r=e(\"../lodash\"),i=e(\"events\"),s=e(\"./reg.js\"),o=e(\"./state.js\").state,u=e(\"../data/ascii-identifier-data.js\"),a=u.asciiIdentifierStartTable,f=u.asciiIdentifierPartTable,l={Identifier:1,Punctuator:2,NumericLiteral:3,StringLiteral:4,Comment:5,Keyword:6,NullLiteral:7,BooleanLiteral:8,RegExp:9,TemplateHead:10,TemplateMiddle:11,TemplateTail:12,NoSubstTemplate:13},c={Block:1,Template:2};p.prototype={_lines:[],inContext:function(e){return this.context.length>0&&this.context[this.context.length-1].type===e},pushContext:function(e){this.context.push({type:e})},popContext:function(){return this.context.pop()},isContext:function(e){return this.context.length>0&&this.context[this.context.length-1]===e},currentContext:function(){return this.context.length>0&&this.context[this.context.length-1]},getLines:function(){return this._lines=o.lines,this._lines},setLines:function(e){this._lines=e,o.lines=this._lines},peek:function(e){return this.input.charAt(e||0)},skip:function(e){e=e||1,this.char+=e,this.input=this.input.slice(e)},on:function(e,t){e.split(\" \").forEach(function(e){this.emitter.on(e,t)}.bind(this))},trigger:function(){this.emitter.emit.apply(this.emitter,Array.prototype.slice.call(arguments))},triggerAsync:function(e,t,n,r){n.push(function(){r()&&this.trigger(e,t)}.bind(this))},scanPunctuator:function(){var e=this.peek(),t,n,r;switch(e){case\".\":if(/^[0-9]$/.test(this.peek(1)))return null;if(this.peek(1)===\".\"&&this.peek(2)===\".\")return{type:l.Punctuator,value:\"...\"};case\"(\":case\")\":case\";\":case\",\":case\"[\":case\"]\":case\":\":case\"~\":case\"?\":return{type:l.Punctuator,value:e};case\"{\":return this.pushContext(c.Block),{type:l.Punctuator,value:e};case\"}\":return this.inContext(c.Block)&&this.popContext(),{type:l.Punctuator,value:e};case\"#\":return{type:l.Punctuator,value:e};case\"\":return null}return t=this.peek(1),n=this.peek(2),r=this.peek(3),e===\">\"&&t===\">\"&&n===\">\"&&r===\"=\"?{type:l.Punctuator,value:\">>>=\"}:e===\"=\"&&t===\"=\"&&n===\"=\"?{type:l.Punctuator,value:\"===\"}:e===\"!\"&&t===\"=\"&&n===\"=\"?{type:l.Punctuator,value:\"!==\"}:e===\">\"&&t===\">\"&&n===\">\"?{type:l.Punctuator,value:\">>>\"}:e===\"<\"&&t===\"<\"&&n===\"=\"?{type:l.Punctuator,value:\"<<=\"}:e===\">\"&&t===\">\"&&n===\"=\"?{type:l.Punctuator,value:\">>=\"}:e===\"=\"&&t===\">\"?{type:l.Punctuator,value:e+t}:e===t&&\"+-<>&|\".indexOf(e)>=0?{type:l.Punctuator,value:e+t}:\"<>=!+-*%&|^\".indexOf(e)>=0?t===\"=\"?{type:l.Punctuator,value:e+t}:{type:l.Punctuator,value:e}:e===\"/\"?t===\"=\"?{type:l.Punctuator,value:\"/=\"}:{type:l.Punctuator,value:\"/\"}:null},scanComments:function(){function u(e,t,n){var r=[\"jshint\",\"jslint\",\"members\",\"member\",\"globals\",\"global\",\"exported\"],i=!1,u=e+t,a=\"plain\";return n=n||{},n.isMultiline&&(u+=\"*/\"),t=t.replace(/\\n/g,\" \"),e===\"/*\"&&s.fallsThrough.test(t)&&(i=!0,a=\"falls through\"),r.forEach(function(n){if(i)return;if(e===\"//\"&&n!==\"jshint\")return;t.charAt(n.length)===\" \"&&t.substr(0,n.length)===n&&(i=!0,e+=n,t=t.substr(n.length)),!i&&t.charAt(0)===\" \"&&t.charAt(n.length+1)===\" \"&&t.substr(1,n.length)===n&&(i=!0,e=e+\" \"+n,t=t.substr(n.length+1));if(!i)return;switch(n){case\"member\":a=\"members\";break;case\"global\":a=\"globals\";break;default:var r=t.split(\":\").map(function(e){return e.replace(/^\\s+/,\"\").replace(/\\s+$/,\"\")});if(r.length===2)switch(r[0]){case\"ignore\":switch(r[1]){case\"start\":o.ignoringLinterErrors=!0,i=!1;break;case\"end\":o.ignoringLinterErrors=!1,i=!1}}a=n}}),{type:l.Comment,commentType:a,value:u,body:t,isSpecial:i,isMultiline:n.isMultiline||!1,isMalformed:n.isMalformed||!1}}var e=this.peek(),t=this.peek(1),n=this.input.substr(2),r=this.line,i=this.char,o=this;if(e===\"*\"&&t===\"/\")return this.trigger(\"error\",{code:\"E018\",line:r,character:i}),this.skip(2),null;if(e!==\"/\"||t!==\"*\"&&t!==\"/\")return null;if(t===\"/\")return this.skip(this.input.length),u(\"//\",n);var a=\"\";if(t===\"*\"){this.inComment=!0,this.skip(2);while(this.peek()!==\"*\"||this.peek(1)!==\"/\")if(this.peek()===\"\"){a+=\"\\n\";if(!this.nextLine())return this.trigger(\"error\",{code:\"E017\",line:r,character:i}),this.inComment=!1,u(\"/*\",a,{isMultiline:!0,isMalformed:!0})}else a+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,u(\"/*\",a,{isMultiline:!0})}},scanKeyword:function(){var e=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),t=[\"if\",\"in\",\"do\",\"var\",\"for\",\"new\",\"try\",\"let\",\"this\",\"else\",\"case\",\"void\",\"with\",\"enum\",\"while\",\"break\",\"catch\",\"throw\",\"const\",\"yield\",\"class\",\"super\",\"return\",\"typeof\",\"delete\",\"switch\",\"export\",\"import\",\"default\",\"finally\",\"extends\",\"function\",\"continue\",\"debugger\",\"instanceof\"];return e&&t.indexOf(e[0])>=0?{type:l.Keyword,value:e[0]}:null},scanIdentifier:function(){function i(e){return e>256}function s(e){return e>256}function o(e){return/^[0-9a-fA-F]$/.test(e)}function p(e){return e.replace(/\\\\u([0-9a-fA-F]{4})/g,function(e,t){return String.fromCharCode(parseInt(t,16))})}var e=\"\",t=0,n,r,u=function(){t+=1;if(this.peek(t)!==\"u\")return null;var e=this.peek(t+1),n=this.peek(t+2),r=this.peek(t+3),i=this.peek(t+4),u;return o(e)&&o(n)&&o(r)&&o(i)?(u=parseInt(e+n+r+i,16),f[u]||s(u)?(t+=5,\"\\\\u\"+e+n+r+i):null):null}.bind(this),c=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?a[n]?(t+=1,e):null:i(n)?(t+=1,e):null}.bind(this),h=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?f[n]?(t+=1,e):null:s(n)?(t+=1,e):null}.bind(this);r=c();if(r===null)return null;e=r;for(;;){r=h();if(r===null)break;e+=r}switch(e){case\"true\":case\"false\":n=l.BooleanLiteral;break;case\"null\":n=l.NullLiteral;break;default:n=l.Identifier}return{type:n,value:p(e),text:e,tokenLength:e.length}},scanNumericLiteral:function(){function f(e){return/^[0-9]$/.test(e)}function c(e){return/^[0-7]$/.test(e)}function h(e){return/^[01]$/.test(e)}function p(e){return/^[0-9a-fA-F]$/.test(e)}function d(e){return e===\"$\"||e===\"_\"||e===\"\\\\\"||e>=\"a\"&&e<=\"z\"||e>=\"A\"&&e<=\"Z\"}var e=0,t=\"\",n=this.input.length,r=this.peek(e),i,s=f,u=10,a=!1;if(r!==\".\"&&!f(r))return null;if(r!==\".\"){t=this.peek(e),e+=1,r=this.peek(e);if(t===\"0\"){if(r===\"x\"||r===\"X\")s=p,u=16,e+=1,t+=r;if(r===\"o\"||r===\"O\")s=c,u=8,o.inES6(!0)||this.trigger(\"warning\",{code:\"W119\",line:this.line,character:this.char,data:[\"Octal integer literal\",\"6\"]}),e+=1,t+=r;if(r===\"b\"||r===\"B\")s=h,u=2,o.inES6(!0)||this.trigger(\"warning\",{code:\"W119\",line:this.line,character:this.char,data:[\"Binary integer literal\",\"6\"]}),e+=1,t+=r;c(r)&&(s=c,u=8,a=!0,i=!1,e+=1,t+=r),!c(r)&&f(r)&&(e+=1,t+=r)}while(e<n){r=this.peek(e);if(a&&f(r))i=!0;else if(!s(r))break;t+=r,e+=1}if(s!==f){if(!a&&t.length<=2)return{type:l.NumericLiteral,value:t,isMalformed:!0};if(e<n){r=this.peek(e);if(d(r))return null}return{type:l.NumericLiteral,value:t,base:u,isLegacy:a,isMalformed:!1}}}if(r===\".\"){t+=r,e+=1;while(e<n){r=this.peek(e);if(!f(r))break;t+=r,e+=1}}if(r===\"e\"||r===\"E\"){t+=r,e+=1,r=this.peek(e);if(r===\"+\"||r===\"-\")t+=this.peek(e),e+=1;r=this.peek(e);if(!f(r))return null;t+=r,e+=1;while(e<n){r=this.peek(e);if(!f(r))break;t+=r,e+=1}}if(e<n){r=this.peek(e);if(d(r))return null}return{type:l.NumericLiteral,value:t,base:u,isMalformed:!isFinite(t)}},scanEscapeSequence:function(e){var t=!1,n=1;this.skip();var r=this.peek();switch(r){case\"'\":this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\'\"]},e,function(){return o.jsonMode});break;case\"b\":r=\"\\\\b\";break;case\"f\":r=\"\\\\f\";break;case\"n\":r=\"\\\\n\";break;case\"r\":r=\"\\\\r\";break;case\"t\":r=\"\\\\t\";break;case\"0\":r=\"\\\\0\";var i=parseInt(this.peek(1),10);this.triggerAsync(\"warning\",{code:\"W115\",line:this.line,character:this.char},e,function(){return i>=0&&i<=7&&o.isStrict()});break;case\"u\":var s=this.input.substr(1,4),u=parseInt(s,16);isNaN(u)&&this.trigger(\"warning\",{code:\"W052\",line:this.line,character:this.char,data:[\"u\"+s]}),r=String.fromCharCode(u),n=5;break;case\"v\":this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\v\"]},e,function(){return o.jsonMode}),r=\"\\x0b\";break;case\"x\":var a=parseInt(this.input.substr(1,2),16);this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\x-\"]},e,function(){return o.jsonMode}),r=String.fromCharCode(a),n=3;break;case\"\\\\\":r=\"\\\\\\\\\";break;case'\"':r='\\\\\"';break;case\"/\":break;case\"\":t=!0,r=\"\"}return{\"char\":r,jump:n,allowNewLine:t}},scanTemplateLiteral:function(e){var t,n=\"\",r,i=this.line,s=this.char,u=this.templateStarts.length;if(!o.inES6(!0))return null;if(this.peek()===\"`\")t=l.TemplateHead,this.templateStarts.push({line:this.line,\"char\":this.char}),u=this.templateStarts.length,this.skip(1),this.pushContext(c.Template);else{if(!this.inContext(c.Template)||this.peek()!==\"}\")return null;t=l.TemplateMiddle}while(this.peek()!==\"`\"){while((r=this.peek())===\"\"){n+=\"\\n\";if(!this.nextLine()){var a=this.templateStarts.pop();return this.trigger(\"error\",{code:\"E052\",line:a.line,character:a.char}),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!0,depth:u,context:this.popContext()}}}if(r===\"$\"&&this.peek(1)===\"{\")return n+=\"${\",this.skip(2),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!1,depth:u,context:this.currentContext()};if(r===\"\\\\\"){var f=this.scanEscapeSequence(e);n+=f.char,this.skip(f.jump)}else r!==\"`\"&&(n+=r,this.skip(1))}return t=t===l.TemplateHead?l.NoSubstTemplate:l.TemplateTail,this.skip(1),this.templateStarts.pop(),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!1,depth:u,context:this.popContext()}},scanStringLiteral:function(e){var t=this.peek();if(t!=='\"'&&t!==\"'\")return null;this.triggerAsync(\"warning\",{code:\"W108\",line:this.line,character:this.char},e,function(){return o.jsonMode&&t!=='\"'});var n=\"\",r=this.line,i=this.char,s=!1;this.skip();while(this.peek()!==t)if(this.peek()===\"\"){s?(s=!1,this.triggerAsync(\"warning\",{code:\"W043\",line:this.line,character:this.char},e,function(){return!o.option.multistr}),this.triggerAsync(\"warning\",{code:\"W042\",line:this.line,character:this.char},e,function(){return o.jsonMode&&o.option.multistr})):this.trigger(\"warning\",{code:\"W112\",line:this.line,character:this.char});if(!this.nextLine())return this.trigger(\"error\",{code:\"E029\",line:r,character:i}),{type:l.StringLiteral,value:n,startLine:r,startChar:i,isUnclosed:!0,quote:t}}else{s=!1;var u=this.peek(),a=1;u<\" \"&&this.trigger(\"warning\",{code:\"W113\",line:this.line,character:this.char,data:[\"<non-printable>\"]});if(u===\"\\\\\"){var f=this.scanEscapeSequence(e);u=f.char,a=f.jump,s=f.allowNewLine}n+=u,this.skip(a)}return this.skip(),{type:l.StringLiteral,value:n,startLine:r,startChar:i,isUnclosed:!1,quote:t}},scanRegExp:function(){var e=0,t=this.input.length,n=this.peek(),r=n,i=\"\",s=[],o=!1,u=!1,a,f=function(){n<\" \"&&(o=!0,this.trigger(\"warning\",{code:\"W048\",line:this.line,character:this.char})),n===\"<\"&&(o=!0,this.trigger(\"warning\",{code:\"W049\",line:this.line,character:this.char,data:[n]}))}.bind(this);if(!this.prereg||n!==\"/\")return null;e+=1,a=!1;while(e<t){n=this.peek(e),r+=n,i+=n;if(u){n===\"]\"&&(this.peek(e-1)!==\"\\\\\"||this.peek(e-2)===\"\\\\\")&&(u=!1),n===\"\\\\\"&&(e+=1,n=this.peek(e),i+=n,r+=n,f()),e+=1;continue}if(n===\"\\\\\"){e+=1,n=this.peek(e),i+=n,r+=n,f();if(n===\"/\"){e+=1;continue}if(n===\"[\"){e+=1;continue}}if(n===\"[\"){u=!0,e+=1;continue}if(n===\"/\"){i=i.substr(0,i.length-1),a=!0,e+=1;break}e+=1}if(!a)return this.trigger(\"error\",{code:\"E015\",line:this.line,character:this.from}),void this.trigger(\"fatal\",{line:this.line,from:this.from});while(e<t){n=this.peek(e);if(!/[gim]/.test(n))break;s.push(n),r+=n,e+=1}try{new RegExp(i,s.join(\"\"))}catch(c){o=!0,this.trigger(\"error\",{code:\"E016\",line:this.line,character:this.char,data:[c.message]})}return{type:l.RegExp,value:r,flags:s,isMalformed:o}},scanNonBreakingSpaces:function(){return o.option.nonbsp?this.input.search(/(\\u00A0)/):-1},scanUnsafeChars:function(){return this.input.search(s.unsafeChars)},next:function(e){this.from=this.char;var t;if(/\\s/.test(this.peek())){t=this.char;while(/\\s/.test(this.peek()))this.from+=1,this.skip()}var n=this.scanComments()||this.scanStringLiteral(e)||this.scanTemplateLiteral(e);return n?n:(n=this.scanRegExp()||this.scanPunctuator()||this.scanKeyword()||this.scanIdentifier()||this.scanNumericLiteral(),n?(this.skip(n.tokenLength||n.value.length),n):null)},nextLine:function(){var e;if(this.line>=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var t=this.input.trim(),n=function(){return r.some(arguments,function(e){return t.indexOf(e)===0})},i=function(){return r.some(arguments,function(e){return t.indexOf(e,t.length-e.length)!==-1})};this.ignoringLinterErrors===!0&&!n(\"/*\",\"//\")&&(!this.inComment||!i(\"*/\"))&&(this.input=\"\"),e=this.scanNonBreakingSpaces(),e>=0&&this.trigger(\"warning\",{code:\"W125\",line:this.line,character:e+1}),this.input=this.input.replace(/\\t/g,o.tab),e=this.scanUnsafeChars(),e>=0&&this.trigger(\"warning\",{code:\"W100\",line:this.line,character:e});if(!this.ignoringLinterErrors&&o.option.maxlen&&o.option.maxlen<this.input.length){var u=this.inComment||n.call(t,\"//\")||n.call(t,\"/*\"),a=!u||!s.maxlenException.test(t);a&&this.trigger(\"warning\",{code:\"W101\",line:this.line,character:this.input.length})}return!0},start:function(){this.nextLine()},token:function(){function n(e,t){if(!e.reserved)return!1;var n=e.meta;if(n&&n.isFutureReservedWord&&o.inES5()){if(!n.es5)return!1;if(n.strictOnly&&!o.option.strict&&!o.isStrict())return!1;if(t)return!1}return!0}var e=h(),t,i=function(t,i,s,u){var a;t!==\"(endline)\"&&t!==\"(end)\"&&(this.prereg=!1);if(t===\"(punctuator)\"){switch(i){case\".\":case\")\":case\"~\":case\"#\":case\"]\":case\"++\":case\"--\":this.prereg=!1;break;default:this.prereg=!0}a=Object.create(o.syntax[i]||o.syntax[\"(error)\"])}if(t===\"(identifier)\"){if(i===\"return\"||i===\"case\"||i===\"typeof\")this.prereg=!0;r.has(o.syntax,i)&&(a=Object.create(o.syntax[i]||o.syntax[\"(error)\"]),n(a,s&&t===\"(identifier)\")||(a=null))}return a||(a=Object.create(o.syntax[t])),a.identifier=t===\"(identifier)\",a.type=a.type||t,a.value=i,a.line=this.line,a.character=this.char,a.from=this.from,a.identifier&&u&&(a.raw_text=u.text||u.value),u&&u.startLine&&u.startLine!==this.line&&(a.startLine=u.startLine),u&&u.context&&(a.context=u.context),u&&u.depth&&(a.depth=u.depth),u&&u.isUnclosed&&(a.isUnclosed=u.isUnclosed),s&&a.identifier&&(a.isProperty=s),a.check=e.check,a}.bind(this);for(;;){if(!this.input.length)return this.nextLine()?i(\"(endline)\",\"\"):this.exhausted?null:(this.exhausted=!0,i(\"(end)\",\"\"));t=this.next(e);if(!t){this.input.length&&(this.trigger(\"error\",{code:\"E024\",line:this.line,character:this.char,data:[this.peek()]}),this.input=\"\");continue}switch(t.type){case l.StringLiteral:return this.triggerAsync(\"String\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value,quote:t.quote},e,function(){return!0}),i(\"(string)\",t.value,null,t);case l.TemplateHead:return this.trigger(\"TemplateHead\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(template)\",t.value,null,t);case l.TemplateMiddle:return this.trigger(\"TemplateMiddle\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(template middle)\",t.value,null,t);case l.TemplateTail:return this.trigger(\"TemplateTail\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(template tail)\",t.value,null,t);case l.NoSubstTemplate:return this.trigger(\"NoSubstTemplate\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(no subst template)\",t.value,null,t);case l.Identifier:this.triggerAsync(\"Identifier\",{line:this.line,\"char\":this.char,from:this.form,name:t.value,raw_name:t.text,isProperty:o.tokens.curr.id===\".\"},e,function(){return!0});case l.Keyword:case l.NullLiteral:case l.BooleanLiteral:return i(\"(identifier)\",t.value,o.tokens.curr.id===\".\",t);case l.NumericLiteral:return t.isMalformed&&this.trigger(\"warning\",{code:\"W045\",line:this.line,character:this.char,data:[t.value]}),this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"0x-\"]},e,function(){return t.base===16&&o.jsonMode}),this.triggerAsync(\"warning\",{code:\"W115\",line:this.line,character:this.char},e,function(){return o.isStrict()&&t.base===8&&t.isLegacy}),this.trigger(\"Number\",{line:this.line,\"char\":this.char,from:this.from,value:t.value,base:t.base,isMalformed:t.malformed}),i(\"(number)\",t.value);case l.RegExp:return i(\"(regexp)\",t.value);case l.Comment:o.tokens.curr.comment=!0;if(t.isSpecial)return{id:\"(comment)\",value:t.value,body:t.body,type:t.commentType,isSpecial:t.isSpecial,line:this.line,character:this.char,from:this.from};break;case\"\":break;default:return i(\"(punctuator)\",t.value)}}}},n.Lexer=p,n.Context=c},{\"../data/ascii-identifier-data.js\":\"/node_modules/jshint/data/ascii-identifier-data.js\",\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",events:\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/messages.js\":[function(e,t,n){\"use strict\";var r=e(\"../lodash\"),i={E001:\"Bad option: '{a}'.\",E002:\"Bad option value.\",E003:\"Expected a JSON value.\",E004:\"Input is neither a string nor an array of strings.\",E005:\"Input is empty.\",E006:\"Unexpected early end of program.\",E007:'Missing \"use strict\" statement.',E008:\"Strict violation.\",E009:\"Option 'validthis' can't be used in a global scope.\",E010:\"'with' is not allowed in strict mode.\",E011:\"'{a}' has already been declared.\",E012:\"const '{a}' is initialized to 'undefined'.\",E013:\"Attempting to override '{a}' which is a constant.\",E014:\"A regular expression literal can be confused with '/='.\",E015:\"Unclosed regular expression.\",E016:\"Invalid regular expression.\",E017:\"Unclosed comment.\",E018:\"Unbegun comment.\",E019:\"Unmatched '{a}'.\",E020:\"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.\",E021:\"Expected '{a}' and instead saw '{b}'.\",E022:\"Line breaking error '{a}'.\",E023:\"Missing '{a}'.\",E024:\"Unexpected '{a}'.\",E025:\"Missing ':' on a case clause.\",E026:\"Missing '}' to match '{' from line {a}.\",E027:\"Missing ']' to match '[' from line {a}.\",E028:\"Illegal comma.\",E029:\"Unclosed string.\",E030:\"Expected an identifier and instead saw '{a}'.\",E031:\"Bad assignment.\",E032:\"Expected a small integer or 'false' and instead saw '{a}'.\",E033:\"Expected an operator and instead saw '{a}'.\",E034:\"get/set are ES5 features.\",E035:\"Missing property name.\",E036:\"Expected to see a statement and instead saw a block.\",E037:null,E038:null,E039:\"Function declarations are not invocable. Wrap the whole function invocation in parens.\",E040:\"Each value should have its own case label.\",E041:\"Unrecoverable syntax error.\",E042:\"Stopping.\",E043:\"Too many errors.\",E044:null,E045:\"Invalid for each loop.\",E046:\"A yield statement shall be within a generator function (with syntax: `function*`)\",E047:null,E048:\"{a} declaration not directly within block.\",E049:\"A {a} cannot be named '{b}'.\",E050:\"Mozilla requires the yield expression to be parenthesized here.\",E051:null,E052:\"Unclosed template literal.\",E053:\"Export declaration must be in global scope.\",E054:\"Class properties must be methods. Expected '(' but instead saw '{a}'.\",E055:\"The '{a}' option cannot be set after any executable code.\",E056:\"'{a}' was used before it was declared, which is illegal for '{b}' variables.\",E057:\"Invalid meta property: '{a}.{b}'.\",E058:\"Missing semicolon.\"},s={W001:\"'hasOwnProperty' is a really bad name.\",W002:\"Value of '{a}' may be overwritten in IE 8 and earlier.\",W003:\"'{a}' was used before it was defined.\",W004:\"'{a}' is already defined.\",W005:\"A dot following a number can be confused with a decimal point.\",W006:\"Confusing minuses.\",W007:\"Confusing plusses.\",W008:\"A leading decimal point can be confused with a dot: '{a}'.\",W009:\"The array literal notation [] is preferable.\",W010:\"The object literal notation {} is preferable.\",W011:null,W012:null,W013:null,W014:\"Bad line breaking before '{a}'.\",W015:null,W016:\"Unexpected use of '{a}'.\",W017:\"Bad operand.\",W018:\"Confusing use of '{a}'.\",W019:\"Use the isNaN function to compare with NaN.\",W020:\"Read only.\",W021:\"Reassignment of '{a}', which is is a {b}. Use 'var' or 'let' to declare bindings that may change.\",W022:\"Do not assign to the exception parameter.\",W023:\"Expected an identifier in an assignment and instead saw a function invocation.\",W024:\"Expected an identifier and instead saw '{a}' (a reserved word).\",W025:\"Missing name in function declaration.\",W026:\"Inner functions should be listed at the top of the outer function.\",W027:\"Unreachable '{a}' after '{b}'.\",W028:\"Label '{a}' on {b} statement.\",W030:\"Expected an assignment or function call and instead saw an expression.\",W031:\"Do not use 'new' for side effects.\",W032:\"Unnecessary semicolon.\",W033:\"Missing semicolon.\",W034:'Unnecessary directive \"{a}\".',W035:\"Empty block.\",W036:\"Unexpected /*member '{a}'.\",W037:\"'{a}' is a statement label.\",W038:\"'{a}' used out of scope.\",W039:\"'{a}' is not allowed.\",W040:\"Possible strict violation.\",W041:\"Use '{a}' to compare with '{b}'.\",W042:\"Avoid EOL escaping.\",W043:\"Bad escaping of EOL. Use option multistr if needed.\",W044:\"Bad or unnecessary escaping.\",W045:\"Bad number '{a}'.\",W046:\"Don't use extra leading zeros '{a}'.\",W047:\"A trailing decimal point can be confused with a dot: '{a}'.\",W048:\"Unexpected control character in regular expression.\",W049:\"Unexpected escaped character '{a}' in regular expression.\",W050:\"JavaScript URL.\",W051:\"Variables should not be deleted.\",W052:\"Unexpected '{a}'.\",W053:\"Do not use {a} as a constructor.\",W054:\"The Function constructor is a form of eval.\",W055:\"A constructor name should start with an uppercase letter.\",W056:\"Bad constructor.\",W057:\"Weird construction. Is 'new' necessary?\",W058:\"Missing '()' invoking a constructor.\",W059:\"Avoid arguments.{a}.\",W060:\"document.write can be a form of eval.\",W061:\"eval can be harmful.\",W062:\"Wrap an immediate function invocation in parens to assist the reader in understanding that the expression is the result of a function, and not the function itself.\",W063:\"Math is not a function.\",W064:\"Missing 'new' prefix when invoking a constructor.\",W065:\"Missing radix parameter.\",W066:\"Implied eval. Consider passing a function instead of a string.\",W067:\"Bad invocation.\",W068:\"Wrapping non-IIFE function literals in parens is unnecessary.\",W069:\"['{a}'] is better written in dot notation.\",W070:\"Extra comma. (it breaks older versions of IE)\",W071:\"This function has too many statements. ({a})\",W072:\"This function has too many parameters. ({a})\",W073:\"Blocks are nested too deeply. ({a})\",W074:\"This function's cyclomatic complexity is too high. ({a})\",W075:\"Duplicate {a} '{b}'.\",W076:\"Unexpected parameter '{a}' in get {b} function.\",W077:\"Expected a single parameter in set {a} function.\",W078:\"Setter is defined without getter.\",W079:\"Redefinition of '{a}'.\",W080:\"It's not necessary to initialize '{a}' to 'undefined'.\",W081:null,W082:\"Function declarations should not be placed in blocks. Use a function expression or move the statement to the top of the outer function.\",W083:\"Don't make functions within a loop.\",W084:\"Assignment in conditional expression\",W085:\"Don't use 'with'.\",W086:\"Expected a 'break' statement before '{a}'.\",W087:\"Forgotten 'debugger' statement?\",W088:\"Creating global 'for' variable. Should be 'for (var {a} ...'.\",W089:\"The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.\",W090:\"'{a}' is not a statement label.\",W091:null,W093:\"Did you mean to return a conditional instead of an assignment?\",W094:\"Unexpected comma.\",W095:\"Expected a string and instead saw {a}.\",W096:\"The '{a}' key may produce unexpected results.\",W097:'Use the function form of \"use strict\".',W098:\"'{a}' is defined but never used.\",W099:null,W100:\"This character may get silently deleted by one or more browsers.\",W101:\"Line is too long.\",W102:null,W103:\"The '{a}' property is deprecated.\",W104:\"'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).\",W105:\"Unexpected {a} in '{b}'.\",W106:\"Identifier '{a}' is not in camel case.\",W107:\"Script URL.\",W108:\"Strings must use doublequote.\",W109:\"Strings must use singlequote.\",W110:\"Mixed double and single quotes.\",W112:\"Unclosed string.\",W113:\"Control character in string: {a}.\",W114:\"Avoid {a}.\",W115:\"Octal literals are not allowed in strict mode.\",W116:\"Expected '{a}' and instead saw '{b}'.\",W117:\"'{a}' is not defined.\",W118:\"'{a}' is only available in Mozilla JavaScript extensions (use moz option).\",W119:\"'{a}' is only available in ES{b} (use 'esversion: {b}').\",W120:\"You might be leaking a variable ({a}) here.\",W121:\"Extending prototype of native object: '{a}'.\",W122:\"Invalid typeof value '{a}'\",W123:\"'{a}' is already defined in outer scope.\",W124:\"A generator function shall contain a yield statement.\",W125:\"This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp\",W126:\"Unnecessary grouping operator.\",W127:\"Unexpected use of a comma operator.\",W128:\"Empty array elements require elision=true.\",W129:\"'{a}' is defined in a future version of JavaScript. Use a different variable name to avoid migration issues.\",W130:\"Invalid element after rest element.\",W131:\"Invalid parameter after rest parameter.\",W132:\"`var` declarations are forbidden. Use `let` or `const` instead.\",W133:\"Invalid for-{a} loop left-hand-side: {b}.\",W134:\"The '{a}' option is only available when linting ECMAScript {b} code.\",W135:\"{a} may not be supported by non-browser environments.\",W136:\"'{a}' must be in function scope.\",W137:\"Empty destructuring.\",W138:\"Regular parameters should not come after default parameters.\"},o={I001:\"Comma warnings can be turned off with 'laxcomma'.\",I002:null,I003:\"ES5 option is now set per default\"};n.errors={},n.warnings={},n.info={},r.each(i,function(e,t){n.errors[t]={code:t,desc:e}}),r.each(s,function(e,t){n.warnings[t]={code:t,desc:e}}),r.each(o,function(e,t){n.info[t]={code:t,desc:e}})},{\"../lodash\":\"/node_modules/jshint/lodash.js\"}],\"/node_modules/jshint/src/name-stack.js\":[function(e,t,n){\"use strict\";function r(){this._stack=[]}Object.defineProperty(r.prototype,\"length\",{get:function(){return this._stack.length}}),r.prototype.push=function(){this._stack.push(null)},r.prototype.pop=function(){this._stack.pop()},r.prototype.set=function(e){this._stack[this.length-1]=e},r.prototype.infer=function(){var e=this._stack[this.length-1],t=\"\",n;if(!e||e.type===\"class\")e=this._stack[this.length-2];return e?(n=e.type,n!==\"(string)\"&&n!==\"(number)\"&&n!==\"(identifier)\"&&n!==\"default\"?\"(expression)\":(e.accessorType&&(t=e.accessorType+\" \"),t+e.value)):\"(empty)\"},t.exports=r},{}],\"/node_modules/jshint/src/options.js\":[function(e,t,n){\"use strict\";n.bool={enforcing:{bitwise:!0,freeze:!0,camelcase:!0,curly:!0,eqeqeq:!0,futurehostile:!0,notypeof:!0,es3:!0,es5:!0,forin:!0,funcscope:!0,immed:!0,iterator:!0,newcap:!0,noarg:!0,nocomma:!0,noempty:!0,nonbsp:!0,nonew:!0,undef:!0,singleGroups:!1,varstmt:!1,enforceall:!1},relaxing:{asi:!0,multistr:!0,debug:!0,boss:!0,evil:!0,globalstrict:!0,plusplus:!0,proto:!0,scripturl:!0,sub:!0,supernew:!0,laxbreak:!0,laxcomma:!0,validthis:!0,withstmt:!0,moz:!0,noyield:!0,eqnull:!0,lastsemic:!0,loopfunc:!0,expr:!0,esnext:!0,elision:!0},environments:{mootools:!0,couch:!0,jasmine:!0,jquery:!0,node:!0,qunit:!0,rhino:!0,shelljs:!0,prototypejs:!0,yui:!0,mocha:!0,module:!0,wsh:!0,worker:!0,nonstandard:!0,browser:!0,browserify:!0,devel:!0,dojo:!0,typed:!0,phantom:!0},obsolete:{onecase:!0,regexp:!0,regexdash:!0}},n.val={maxlen:!1,indent:!1,maxerr:!1,predef:!1,globals:!1,quotmark:!1,scope:!1,maxstatements:!1,maxdepth:!1,maxparams:!1,maxcomplexity:!1,shadow:!1,strict:!0,unused:!0,latedef:!1,ignore:!1,ignoreDelimiters:!1,esversion:5},n.inverted={bitwise:!0,forin:!0,newcap:!0,plusplus:!0,regexp:!0,undef:!0,eqeqeq:!0,strict:!0},n.validNames=Object.keys(n.val).concat(Object.keys(n.bool.relaxing)).concat(Object.keys(n.bool.enforcing)).concat(Object.keys(n.bool.obsolete)).concat(Object.keys(n.bool.environments)),n.renamed={eqeq:\"eqeqeq\",windows:\"wsh\",sloppy:\"strict\"},n.removed={nomen:!0,onevar:!0,passfail:!0,white:!0,gcl:!0,smarttabs:!0,trailing:!0},n.noenforceall={varstmt:!0,strict:!0}},{}],\"/node_modules/jshint/src/reg.js\":[function(e,t,n){\"use strict\";n.unsafeString=/@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|&lt/i,n.unsafeChars=/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/,n.needEsc=/[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/,n.needEscGlobal=/[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,n.starSlash=/\\*\\//,n.identifier=/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/,n.javascriptURL=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i,n.fallsThrough=/^\\s*falls?\\sthrough\\s*$/,n.maxlenException=/^(?:(?:\\/\\/|\\/\\*|\\*) ?)?[^ ]+$/},{}],\"/node_modules/jshint/src/scope-manager.js\":[function(e,t,n){\"use strict\";var r=e(\"../lodash\"),i=e(\"events\"),s={},o=function(e,t,n,o){function f(e){u={\"(labels)\":Object.create(null),\"(usages)\":Object.create(null),\"(breakLabels)\":Object.create(null),\"(parent)\":u,\"(type)\":e,\"(params)\":e===\"functionparams\"||e===\"catchparams\"?[]:null},a.push(u)}function v(e,t){d.emit(\"warning\",{code:e,token:t,data:r.slice(arguments,2)})}function m(e,t){d.emit(\"warning\",{code:e,token:t,data:r.slice(arguments,2)})}function g(e){u[\"(usages)\"][e]||(u[\"(usages)\"][e]={\"(modified)\":[],\"(reassigned)\":[],\"(tokens)\":[]})}function w(){if(u[\"(type)\"]===\"functionparams\"){E();return}var e=u[\"(labels)\"];for(var t in e)e[t]&&e[t][\"(type)\"]!==\"exception\"&&e[t][\"(unused)\"]&&b(t,e[t][\"(token)\"],\"var\")}function E(){var t=u[\"(params)\"];if(!t)return;var n=t.pop(),r;while(n){var i=u[\"(labels)\"][n];r=y(e.funct[\"(unusedOption)\"]);if(n===\"undefined\")return;if(i[\"(unused)\"])b(n,i[\"(token)\"],\"param\",e.funct[\"(unusedOption)\"]);else if(r===\"last-param\")return;n=t.pop()}}function S(e){for(var t=a.length-1;t>=0;--t){var n=a[t][\"(labels)\"];if(n[e])return n}}function x(e){for(var t=a.length-1;t>=0;t--){var n=a[t];if(n[\"(usages)\"][e])return n[\"(usages)\"][e];if(n===l)break}return!1}function T(t,n){if(e.option.shadow!==\"outer\")return;var r=l[\"(type)\"]===\"global\",i=u[\"(type)\"]===\"functionparams\",s=!r;for(var o=0;o<a.length;o++){var f=a[o];!i&&a[o+1]===l&&(s=!1),s&&f[\"(labels)\"][t]&&v(\"W123\",n,t),f[\"(breakLabels)\"][t]&&v(\"W123\",n,t)}}function N(t,n,r){e.option.latedef&&(e.option.latedef===!0&&t===\"function\"||t!==\"function\")&&v(\"W003\",r,n)}var u,a=[];f(\"global\"),u[\"(predefined)\"]=t;var l=u,c=Object.create(null),h=Object.create(null),p=[],d=new i.EventEmitter,y=function(t){return t===undefined&&(t=e.option.unused),t===!0&&(t=\"last-param\"),t},b=function(e,t,n,r){var i=t.line,s=t.from,o=t.raw_text||e;r=y(r);var u={vars:[\"var\"],\"last-param\":[\"var\",\"param\"],strict:[\"var\",\"param\",\"last-param\"]};r&&u[r]&&u[r].indexOf(n)!==-1&&v(\"W098\",{line:i,from:s},o),(r||n===\"var\")&&p.push({name:e,line:i,character:s})},C={on:function(e,t){e.split(\" \").forEach(function(e){d.on(e,t)})},isPredefined:function(e){return!this.has(e)&&r.has(a[0][\"(predefined)\"],e)},stack:function(e){var t=u;f(e),!e&&t[\"(type)\"]===\"functionparams\"&&(u[\"(isFuncBody)\"]=!0,u[\"(context)\"]=l,l=u)},unstack:function(){var t=a.length>1?a[a.length-2]:null,n=u===l,i=u[\"(type)\"]===\"functionparams\",f=u[\"(type)\"]===\"functionouter\",p,d,g=u[\"(usages)\"],y=u[\"(labels)\"],E=Object.keys(g);g.__proto__&&E.indexOf(\"__proto__\")===-1&&E.push(\"__proto__\");for(p=0;p<E.length;p++){var S=E[p],x=g[S],T=y[S];if(T){var N=T[\"(type)\"];if(T[\"(useOutsideOfScope)\"]&&!e.option.funcscope){var C=x[\"(tokens)\"];if(C)for(d=0;d<C.length;d++)T[\"(function)\"]===C[d][\"(function)\"]&&m(\"W038\",C[d],S)}u[\"(labels)\"][S][\"(unused)\"]=!1;if(N===\"const\"&&x[\"(modified)\"])for(d=0;d<x[\"(modified)\"].length;d++)m(\"E013\",x[\"(modified)\"][d],S);if((N===\"function\"||N===\"class\")&&x[\"(reassigned)\"])for(d=0;d<x[\"(reassigned)\"].length;d++)m(\"W021\",x[\"(reassigned)\"][d],S,N);continue}f&&(e.funct[\"(isCapturing)\"]=!0);if(t)if(!t[\"(usages)\"][S])t[\"(usages)\"][S]=x,n&&(t[\"(usages)\"][S][\"(onlyUsedSubFunction)\"]=!0);else{var k=t[\"(usages)\"][S];k[\"(modified)\"]=k[\"(modified)\"].concat(x[\"(modified)\"]),k[\"(tokens)\"]=k[\"(tokens)\"].concat(x[\"(tokens)\"]),k[\"(reassigned)\"]=k[\"(reassigned)\"].concat(x[\"(reassigned)\"]),k[\"(onlyUsedSubFunction)\"]=!1}else if(typeof u[\"(predefined)\"][S]==\"boolean\"){delete o[S],c[S]=s;if(u[\"(predefined)\"][S]===!1&&x[\"(reassigned)\"])for(d=0;d<x[\"(reassigned)\"].length;d++)v(\"W020\",x[\"(reassigned)\"][d])}else if(x[\"(tokens)\"])for(d=0;d<x[\"(tokens)\"].length;d++){var L=x[\"(tokens)\"][d];L.forgiveUndef||(e.option.undef&&!L.ignoreUndef&&v(\"W117\",L,S),h[S]?h[S].line.push(L.line):h[S]={name:S,line:[L.line]})}}t||Object.keys(o).forEach(function(e){b(e,o[e],\"var\")});if(t&&!n&&!i&&!f){var A=Object.keys(y);for(p=0;p<A.length;p++){var O=A[p];!y[O][\"(blockscoped)\"]&&y[O][\"(type)\"]!==\"exception\"&&!this.funct.has(O,{excludeCurrent:!0})&&(t[\"(labels)\"][O]=y[O],l[\"(type)\"]!==\"global\"&&(t[\"(labels)\"][O][\"(useOutsideOfScope)\"]=!0),delete y[O])}}w(),a.pop(),n&&(l=a[r.findLastIndex(a,function(e){return e[\"(isFuncBody)\"]||e[\"(type)\"]===\"global\"})]),u=t},addParam:function(t,n,i){i=i||\"param\";if(i===\"exception\"){var s=this.funct.labeltype(t);s&&s!==\"exception\"&&(e.option.node||v(\"W002\",e.tokens.next,t))}r.has(u[\"(labels)\"],t)?u[\"(labels)\"][t].duplicated=!0:(T(t,n,i),u[\"(labels)\"][t]={\"(type)\":i,\"(token)\":n,\"(unused)\":!0},u[\"(params)\"].push(t));if(r.has(u[\"(usages)\"],t)){var o=u[\"(usages)\"][t];o[\"(onlyUsedSubFunction)\"]?N(i,t,n):v(\"E056\",n,t,i)}},validateParams:function(){if(l[\"(type)\"]===\"global\")return;var t=e.isStrict(),n=l[\"(parent)\"];if(!n[\"(params)\"])return;n[\"(params)\"].forEach(function(r){var i=n[\"(labels)\"][r];i&&i.duplicated&&(t?v(\"E011\",i[\"(token)\"],r):e.option.shadow!==!0&&v(\"W004\",i[\"(token)\"],r))})},getUsedOrDefinedGlobals:function(){var e=Object.keys(c);return c.__proto__===s&&e.indexOf(\"__proto__\")===-1&&e.push(\"__proto__\"),e},getImpliedGlobals:function(){var e=r.values(h),t=!1;return h.__proto__&&(t=e.some(function(e){return e.name===\"__proto__\"}),t||e.push(h.__proto__)),e},getUnuseds:function(){return p},has:function(e){return Boolean(S(e))},labeltype:function(e){var t=S(e);return t?t[e][\"(type)\"]:null},addExported:function(e){var t=a[0][\"(labels)\"];if(r.has(o,e))delete o[e];else if(r.has(t,e))t[e][\"(unused)\"]=!1;else{for(var i=1;i<a.length;i++){var s=a[i];if(!!s[\"(type)\"])break;if(r.has(s[\"(labels)\"],e)&&!s[\"(labels)\"][e][\"(blockscoped)\"]){s[\"(labels)\"][e][\"(unused)\"]=!1;return}}n[e]=!0}},setExported:function(e,t){this.block.use(e,t)},addlabel:function(t,i){var o=i.type,a=i.token,f=o===\"let\"||o===\"const\"||o===\"class\",h=(f?u:l)[\"(type)\"]===\"global\"&&r.has(n,t);T(t,a,o);if(f){var p=u[\"(labels)\"][t];!p&&u===l&&u[\"(type)\"]!==\"global\"&&(p=!!l[\"(parent)\"][\"(labels)\"][t]);if(!p&&u[\"(usages)\"][t]){var d=u[\"(usages)\"][t];d[\"(onlyUsedSubFunction)\"]?N(o,t,a):v(\"E056\",a,t,o)}p?v(\"E011\",a,t):e.option.shadow===\"outer\"&&C.funct.has(t)&&v(\"W004\",a,t),C.block.add(t,o,a,!h)}else{var m=C.funct.has(t);!m&&x(t)&&N(o,t,a),C.funct.has(t,{onlyBlockscoped:!0})?v(\"E011\",a,t):e.option.shadow!==!0&&m&&t!==\"__proto__\"&&l[\"(type)\"]!==\"global\"&&v(\"W004\",a,t),C.funct.add(t,o,a,!h),l[\"(type)\"]===\"global\"&&(c[t]=s)}},funct:{labeltype:function(e,t){var n=t&&t.onlyBlockscoped,r=t&&t.excludeParams,i=a.length-(t&&t.excludeCurrent?2:1);for(var s=i;s>=0;s--){var o=a[s];if(o[\"(labels)\"][e]&&(!n||o[\"(labels)\"][e][\"(blockscoped)\"]))return o[\"(labels)\"][e][\"(type)\"];var u=r?a[s-1]:o;if(u&&u[\"(type)\"]===\"functionparams\")return null}return null},hasBreakLabel:function(e){for(var t=a.length-1;t>=0;t--){var n=a[t];if(n[\"(breakLabels)\"][e])return!0;if(n[\"(type)\"]===\"functionparams\")return!1}return!1},has:function(e,t){return Boolean(this.labeltype(e,t))},add:function(e,t,n,r){u[\"(labels)\"][e]={\"(type)\":t,\"(token)\":n,\"(blockscoped)\":!1,\"(function)\":l,\"(unused)\":r}}},block:{isGlobal:function(){return u[\"(type)\"]===\"global\"},use:function(t,n){var r=l[\"(parent)\"];r&&r[\"(labels)\"][t]&&r[\"(labels)\"][t][\"(type)\"]===\"param\"&&(C.funct.has(t,{excludeParams:!0,onlyBlockscoped:!0})||(r[\"(labels)\"][t][\"(unused)\"]=!1)),n&&(e.ignored.W117||e.option.undef===!1)&&(n.ignoreUndef=!0),g(t),n&&(n[\"(function)\"]=l,u[\"(usages)\"][t][\"(tokens)\"].push(n))},reassign:function(e,t){this.modify(e,t),u[\"(usages)\"][e][\"(reassigned)\"].push(t)},modify:function(e,t){g(e),u[\"(usages)\"][e][\"(modified)\"].push(t)},add:function(e,t,n,r){u[\"(labels)\"][e]={\"(type)\":t,\"(token)\":n,\"(blockscoped)\":!0,\"(unused)\":r}},addBreakLabel:function(t,n){var r=n.token;C.funct.hasBreakLabel(t)?v(\"E011\",r,t):e.option.shadow===\"outer\"&&(C.funct.has(t)?v(\"W004\",r,t):T(t,r)),u[\"(breakLabels)\"][t]=r}}};return C};t.exports=o},{\"../lodash\":\"/node_modules/jshint/lodash.js\",events:\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/state.js\":[function(e,t,n){\"use strict\";var r=e(\"./name-stack.js\"),i={syntax:{},isStrict:function(){return this.directive[\"use strict\"]||this.inClassBody||this.option.module||this.option.strict===\"implied\"},inMoz:function(){return this.option.moz},inES6:function(){return this.option.moz||this.option.esversion>=6},inES5:function(e){return e?(!this.option.esversion||this.option.esversion===5)&&!this.option.moz:!this.option.esversion||this.option.esversion>=5||this.option.moz},reset:function(){this.tokens={prev:null,next:null,curr:null},this.option={},this.funct=null,this.ignored={},this.directive={},this.jsonMode=!1,this.jsonWarnings=[],this.lines=[],this.tab=\"\",this.cache={},this.ignoredLines={},this.forinifcheckneeded=!1,this.nameStack=new r,this.inClassBody=!1}};n.state=i},{\"./name-stack.js\":\"/node_modules/jshint/src/name-stack.js\"}],\"/node_modules/jshint/src/style.js\":[function(e,t,n){\"use strict\";n.register=function(e){e.on(\"Identifier\",function(n){if(e.getOption(\"proto\"))return;n.name===\"__proto__\"&&e.warn(\"W103\",{line:n.line,\"char\":n.char,data:[n.name,\"6\"]})}),e.on(\"Identifier\",function(n){if(e.getOption(\"iterator\"))return;n.name===\"__iterator__\"&&e.warn(\"W103\",{line:n.line,\"char\":n.char,data:[n.name]})}),e.on(\"Identifier\",function(n){if(!e.getOption(\"camelcase\"))return;n.name.replace(/^_+|_+$/g,\"\").indexOf(\"_\")>-1&&!n.name.match(/^[A-Z0-9_]*$/)&&e.warn(\"W106\",{line:n.line,\"char\":n.from,data:[n.name]})}),e.on(\"String\",function(n){var r=e.getOption(\"quotmark\"),i;if(!r)return;r===\"single\"&&n.quote!==\"'\"&&(i=\"W109\"),r===\"double\"&&n.quote!=='\"'&&(i=\"W108\"),r===!0&&(e.getCache(\"quotmark\")||e.setCache(\"quotmark\",n.quote),e.getCache(\"quotmark\")!==n.quote&&(i=\"W110\")),i&&e.warn(i,{line:n.line,\"char\":n.char})}),e.on(\"Number\",function(n){n.value.charAt(0)===\".\"&&e.warn(\"W008\",{line:n.line,\"char\":n.char,data:[n.value]}),n.value.substr(n.value.length-1)===\".\"&&e.warn(\"W047\",{line:n.line,\"char\":n.char,data:[n.value]}),/^00+/.test(n.value)&&e.warn(\"W046\",{line:n.line,\"char\":n.char,data:[n.value]})}),e.on(\"String\",function(n){var r=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;if(e.getOption(\"scripturl\"))return;r.test(n.value)&&e.warn(\"W107\",{line:n.line,\"char\":n.char})})}},{}],\"/node_modules/jshint/src/vars.js\":[function(e,t,n){\"use strict\";n.reservedVars={arguments:!1,NaN:!1},n.ecmaIdentifiers={3:{Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},5:{JSON:!1},6:{Map:!1,Promise:!1,Proxy:!1,Reflect:!1,Set:!1,Symbol:!1,WeakMap:!1,WeakSet:!1}},n.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CSS:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,Comment:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,Document:!1,document:!1,DocumentFragment:!1,Element:!1,ElementTimeControl:!1,Event:!1,event:!1,fetch:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,Intl:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,Notification:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,performance:!1,print:!1,Range:!1,requestAnimationFrame:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TimeEvent:!1,top:!1,URL:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},n.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},n.worker={importScripts:!0,postMessage:!0,self:!0,FileReaderSync:!0},n.nonstandard={escape:!1,unescape:!1},n.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},n.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,require:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},n.browserify={__filename:!1,__dirname:!1,global:!1,module:!1,require:!1,Buffer:!0,exports:!0,process:!0},n.phantom={phantom:!0,require:!0,WebPage:!0,console:!0,exports:!0},n.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,\"throws\":!1},n.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},n.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},n.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},n.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},n.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},n.jquery={$:!1,jQuery:!1},n.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},n.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},n.yui={YUI:!1,Y:!1,YUI_config:!1},n.mocha={mocha:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,context:!1,xcontext:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1,suiteSetup:!1,suiteTeardown:!1},n.jasmine={jasmine:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1,beforeAll:!1,afterAll:!1,fail:!1,fdescribe:!1,fit:!1,pending:!1}},{}]},{},[\"/node_modules/jshint/src/jshint.js\"])}),define(\"ace/mode/javascript_worker\",[],function(require,exports,module){\"use strict\";function startRegex(e){return RegExp(\"^(\"+e.join(\"|\")+\")\")}var oop=require(\"../lib/oop\"),Mirror=require(\"../worker/mirror\").Mirror,lint=require(\"./javascript/jshint\").JSHINT,disabledWarningsRe=startRegex([\"Bad for in variable '(.+)'.\",'Missing \"use strict\"']),errorsRe=startRegex([\"Unexpected\",\"Expected \",\"Confusing (plus|minus)\",\"\\\\{a\\\\} unterminated regular expression\",\"Unclosed \",\"Unmatched \",\"Unbegun comment\",\"Bad invocation\",\"Missing space after\",\"Missing operator at\"]),infoRe=startRegex([\"Expected an assignment\",\"Bad escapement of EOL\",\"Unexpected comma\",\"Unexpected space\",\"Missing radix parameter.\",\"A leading decimal point can\",\"\\\\['{a}'\\\\] is better written in dot notation.\",\"'{a}' used out of scope\"]),JavaScriptWorker=exports.JavaScriptWorker=function(e){Mirror.call(this,e),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(e){this.options=e||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(e){oop.mixin(this.options,e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval(\"throw 0;\"+str)}catch(e){if(e===0)return!0}return!1},this.onUpdate=function(){var e=this.doc.getValue();e=e.replace(/^#!.*\\n/,\"\\n\");if(!e)return this.sender.emit(\"annotate\",[]);var t=[],n=this.isValidJS(e)?\"warning\":\"error\";lint(e,this.options,this.options.globals);var r=lint.errors,i=!1;for(var s=0;s<r.length;s++){var o=r[s];if(!o)continue;var u=o.raw,a=\"warning\";if(u==\"Missing semicolon.\"){var f=o.evidence.substr(o.character);f=f.charAt(f.search(/\\S/)),n==\"error\"&&f&&/[\\w\\d{(['\"]/.test(f)?(o.reason='Missing \";\" before statement',a=\"error\"):a=\"info\"}else{if(disabledWarningsRe.test(u))continue;infoRe.test(u)?a=\"info\":errorsRe.test(u)?(i=!0,a=n):u==\"'{a}' is not defined.\"?a=\"warning\":u==\"'{a}' is defined but never used.\"&&(a=\"info\")}t.push({row:o.line-1,column:o.character-1,text:o.reason,type:a,raw:u}),i}this.sender.emit(\"annotate\",t)}}.call(JavaScriptWorker.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min/worker-json.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/json/json_parse\",[],function(e,t,n){\"use strict\";var r,i,s={'\"':'\"',\"\\\\\":\"\\\\\",\"/\":\"/\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\t\"},o,u=function(e){throw{name:\"SyntaxError\",message:e,at:r,text:o}},a=function(e){return e&&e!==i&&u(\"Expected '\"+e+\"' instead of '\"+i+\"'\"),i=o.charAt(r),r+=1,i},f=function(){var e,t=\"\";i===\"-\"&&(t=\"-\",a(\"-\"));while(i>=\"0\"&&i<=\"9\")t+=i,a();if(i===\".\"){t+=\".\";while(a()&&i>=\"0\"&&i<=\"9\")t+=i}if(i===\"e\"||i===\"E\"){t+=i,a();if(i===\"-\"||i===\"+\")t+=i,a();while(i>=\"0\"&&i<=\"9\")t+=i,a()}e=+t;if(!isNaN(e))return e;u(\"Bad number\")},l=function(){var e,t,n=\"\",r;if(i==='\"')while(a()){if(i==='\"')return a(),n;if(i===\"\\\\\"){a();if(i===\"u\"){r=0;for(t=0;t<4;t+=1){e=parseInt(a(),16);if(!isFinite(e))break;r=r*16+e}n+=String.fromCharCode(r)}else{if(typeof s[i]!=\"string\")break;n+=s[i]}}else{if(i==\"\\n\"||i==\"\\r\")break;n+=i}}u(\"Bad string\")},c=function(){while(i&&i<=\" \")a()},h=function(){switch(i){case\"t\":return a(\"t\"),a(\"r\"),a(\"u\"),a(\"e\"),!0;case\"f\":return a(\"f\"),a(\"a\"),a(\"l\"),a(\"s\"),a(\"e\"),!1;case\"n\":return a(\"n\"),a(\"u\"),a(\"l\"),a(\"l\"),null}u(\"Unexpected '\"+i+\"'\")},p,d=function(){var e=[];if(i===\"[\"){a(\"[\"),c();if(i===\"]\")return a(\"]\"),e;while(i){e.push(p()),c();if(i===\"]\")return a(\"]\"),e;a(\",\"),c()}}u(\"Bad array\")},v=function(){var e,t={};if(i===\"{\"){a(\"{\"),c();if(i===\"}\")return a(\"}\"),t;while(i){e=l(),c(),a(\":\"),Object.hasOwnProperty.call(t,e)&&u('Duplicate key \"'+e+'\"'),t[e]=p(),c();if(i===\"}\")return a(\"}\"),t;a(\",\"),c()}}u(\"Bad object\")};return p=function(){c();switch(i){case\"{\":return v();case\"[\":return d();case'\"':return l();case\"-\":return f();default:return i>=\"0\"&&i<=\"9\"?f():h()}},function(e,t){var n;return o=e,r=0,i=\" \",n=p(),c(),i&&u(\"Syntax error\"),typeof t==\"function\"?function s(e,n){var r,i,o=e[n];if(o&&typeof o==\"object\")for(r in o)Object.hasOwnProperty.call(o,r)&&(i=s(o,r),i!==undefined?o[r]=i:delete o[r]);return t.call(e,n,o)}({\"\":n},\"\"):n}}),define(\"ace/mode/json_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"./json/json_parse\"),o=t.JsonWorker=function(e){i.call(this,e),this.setTimeout(200)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue(),t=[];try{e&&s(e)}catch(n){var r=this.doc.indexToPosition(n.at-1);t.push({row:r.row,column:r.column,text:n.message,type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min/worker-lua.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/lua/luaparse\",[],function(e,t,n){(function(e,n,r){r(t)})(this,\"luaparse\",function(e){\"use strict\";function m(e){if(mt){var t=vt.pop();t.complete(),n.locations&&(e.loc=t.loc),n.ranges&&(e.range=t.range)}return e}function w(e,t,n){for(var r=0,i=e.length;r<i;r++)if(e[r][t]===n)return r;return-1}function E(e){var t=g.call(arguments,1);return e=e.replace(/%(\\d)/g,function(e,n){return\"\"+t[n-1]||\"\"}),e}function S(){var e=g.call(arguments),t={},n,r;for(var i=0,s=e.length;i<s;i++){n=e[i];for(r in n)n.hasOwnProperty(r)&&(t[r]=n[r])}return t}function x(e){var t=E.apply(null,g.call(arguments,1)),n,r;throw\"undefined\"!=typeof e.line?(r=e.range[0]-e.lineStart,n=new SyntaxError(E(\"[%1:%2] %3\",e.line,r,t)),n.line=e.line,n.index=e.range[0],n.column=r):(r=C-D+1,n=new SyntaxError(E(\"[%1:%2] %3\",_,r,t)),n.index=C,n.line=_,n.column=r),n}function T(e,t){x(t,d.expectedToken,e,t.value)}function N(e,t){\"undefined\"==typeof t&&(t=A.value);if(\"undefined\"!=typeof e.type){var n;switch(e.type){case o:n=\"string\";break;case u:n=\"keyword\";break;case a:n=\"identifier\";break;case f:n=\"number\";break;case l:n=\"symbol\";break;case c:n=\"boolean\";break;case h:return x(e,d.unexpected,\"symbol\",\"nil\",t)}return x(e,d.unexpected,n,e.value,t)}return x(e,d.unexpected,\"symbol\",e,t)}function P(){H();while(45===t.charCodeAt(C)&&45===t.charCodeAt(C+1))X(),H();if(C>=r)return{type:s,value:\"<eof>\",line:_,lineStart:D,range:[C,C]};var e=t.charCodeAt(C),n=t.charCodeAt(C+1);M=C;if(et(e))return B();switch(e){case 39:case 34:return I();case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return R();case 46:if(Y(n))return R();if(46===n)return 46===t.charCodeAt(C+2)?F():j(\"..\");return j(\".\");case 61:if(61===n)return j(\"==\");return j(\"=\");case 62:if(61===n)return j(\">=\");return j(\">\");case 60:if(61===n)return j(\"<=\");return j(\"<\");case 126:if(61===n)return j(\"~=\");return j(\"~\");case 58:if(58===n)return j(\"::\");return j(\":\");case 91:if(91===n||61===n)return q();return j(\"[\");case 42:case 47:case 94:case 37:case 44:case 123:case 125:case 93:case 40:case 41:case 59:case 35:case 45:case 43:case 38:case 124:return j(t.charAt(C))}return N(t.charAt(C))}function H(){while(C<r){var e=t.charCodeAt(C);if(Q(e))C++;else{if(!G(e))break;_++,D=++C}}}function B(){var e,n;while(tt(t.charCodeAt(++C)));return e=t.slice(M,C),nt(e)?n=u:\"true\"===e||\"false\"===e?(n=c,e=\"true\"===e):\"nil\"===e?(n=h,e=null):n=a,{type:n,value:e,line:_,lineStart:D,range:[M,C]}}function j(e){return C+=e.length,{type:l,value:e,line:_,lineStart:D,range:[M,C]}}function F(){return C+=3,{type:p,value:\"...\",line:_,lineStart:D,range:[M,C]}}function I(){var e=t.charCodeAt(C++),n=C,i=\"\",s;while(C<r){s=t.charCodeAt(C++);if(e===s)break;if(92===s)i+=t.slice(n,C-1)+W(),n=C;else if(C>=r||G(s))i+=t.slice(n,C-1),x({},d.unfinishedString,i+String.fromCharCode(s))}return i+=t.slice(n,C-1),{type:o,value:i,line:_,lineStart:D,range:[M,C]}}function q(){var e=V();return!1===e&&x(k,d.expected,\"[\",k.value),{type:o,value:e,line:_,lineStart:D,range:[M,C]}}function R(){var e=t.charAt(C),n=t.charAt(C+1),r=\"0\"===e&&\"xX\".indexOf(n||null)>=0?U():z();return{type:f,value:r,line:_,lineStart:D,range:[M,C]}}function U(){var e=0,n=1,r=1,i,s,o,u;u=C+=2,Z(t.charCodeAt(C))||x({},d.malformedNumber,t.slice(M,C));while(Z(t.charCodeAt(C)))C++;i=parseInt(t.slice(u,C),16);if(\".\"===t.charAt(C)){s=++C;while(Z(t.charCodeAt(C)))C++;e=t.slice(s,C),e=s===C?0:parseInt(e,16)/Math.pow(16,C-s)}if(\"pP\".indexOf(t.charAt(C)||null)>=0){C++,\"+-\".indexOf(t.charAt(C)||null)>=0&&(r=\"+\"===t.charAt(C++)?1:-1),o=C,Y(t.charCodeAt(C))||x({},d.malformedNumber,t.slice(M,C));while(Y(t.charCodeAt(C)))C++;n=t.slice(o,C),n=Math.pow(2,n*r)}return(i+e)*n}function z(){while(Y(t.charCodeAt(C)))C++;if(\".\"===t.charAt(C)){C++;while(Y(t.charCodeAt(C)))C++}if(\"eE\".indexOf(t.charAt(C)||null)>=0){C++,\"+-\".indexOf(t.charAt(C)||null)>=0&&C++,Y(t.charCodeAt(C))||x({},d.malformedNumber,t.slice(M,C));while(Y(t.charCodeAt(C)))C++}return parseFloat(t.slice(M,C))}function W(){var e=C;switch(t.charAt(C)){case\"n\":return C++,\"\\n\";case\"r\":return C++,\"\\r\";case\"t\":return C++,\"\t\";case\"v\":return C++,\"\\x0b\";case\"b\":return C++,\"\\b\";case\"f\":return C++,\"\\f\";case\"z\":return C++,H(),\"\";case\"x\":if(Z(t.charCodeAt(C+1))&&Z(t.charCodeAt(C+2)))return C+=3,\"\\\\\"+t.slice(e,C);return\"\\\\\"+t.charAt(C++);default:if(Y(t.charCodeAt(C))){while(Y(t.charCodeAt(++C)));return\"\\\\\"+t.slice(e,C)}return t.charAt(C++)}}function X(){M=C,C+=2;var e=t.charAt(C),i=\"\",s=!1,o=C,u=D,a=_;\"[\"===e&&(i=V(),!1===i?i=e:s=!0);if(!s){while(C<r){if(G(t.charCodeAt(C)))break;C++}n.comments&&(i=t.slice(o,C))}if(n.comments){var f=v.comment(i,t.slice(M,C));n.locations&&(f.loc={start:{line:a,column:M-u},end:{line:_,column:C-D}}),n.ranges&&(f.range=[M,C]),O.push(f)}}function V(){var e=0,n=\"\",i=!1,s,o;C++;while(\"=\"===t.charAt(C+e))e++;if(\"[\"!==t.charAt(C+e))return!1;C+=e+1,G(t.charCodeAt(C))&&(_++,D=C++),o=C;while(C<r){s=t.charAt(C++),G(s.charCodeAt(0))&&(_++,D=C);if(\"]\"===s){i=!0;for(var u=0;u<e;u++)\"=\"!==t.charAt(C+u)&&(i=!1);\"]\"!==t.charAt(C+e)&&(i=!1)}if(i)break}return n+=t.slice(o,C-1),C+=e+1,n}function $(){L=k,k=A,A=P()}function J(e){return e===k.value?($(),!0):!1}function K(e){e===k.value?$():x(k,d.expected,e,k.value)}function Q(e){return 9===e||32===e||11===e||12===e}function G(e){return 10===e||13===e}function Y(e){return e>=48&&e<=57}function Z(e){return e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70}function et(e){return e>=65&&e<=90||e>=97&&e<=122||95===e}function tt(e){return e>=65&&e<=90||e>=97&&e<=122||95===e||e>=48&&e<=57}function nt(e){switch(e.length){case 2:return\"do\"===e||\"if\"===e||\"in\"===e||\"or\"===e;case 3:return\"and\"===e||\"end\"===e||\"for\"===e||\"not\"===e;case 4:return\"else\"===e||\"goto\"===e||\"then\"===e;case 5:return\"break\"===e||\"local\"===e||\"until\"===e||\"while\"===e;case 6:return\"elseif\"===e||\"repeat\"===e||\"return\"===e;case 8:return\"function\"===e}return!1}function rt(e){return l===e.type?\"#-~\".indexOf(e.value)>=0:u===e.type?\"not\"===e.value:!1}function it(e){switch(e.type){case\"CallExpression\":case\"TableCallExpression\":case\"StringCallExpression\":return!0}return!1}function st(e){if(s===e.type)return!0;if(u!==e.type)return!1;switch(e.value){case\"else\":case\"elseif\":case\"end\":case\"until\":return!0;default:return!1}}function ft(){ot.push(Array.apply(null,ot[ut++]))}function lt(){ot.pop(),ut--}function ct(e){if(-1!==b(ot[ut],e))return;ot[ut].push(e)}function ht(e){ct(e.name),pt(e,!0)}function pt(e,t){!t&&-1===w(at,\"name\",e.name)&&at.push(e),e.isLocal=t}function dt(e){return-1!==b(ot[ut],e)}function gt(){return new yt(k)}function yt(e){n.locations&&(this.loc={start:{line:e.line,column:e.range[0]-e.lineStart},end:{line:0,column:0}}),n.ranges&&(this.range=[e.range[0],0])}function bt(){mt&&vt.push(gt())}function wt(e){mt&&vt.push(e)}function Et(){$(),bt();var e=St();return s!==k.type&&N(k),mt&&!e.length&&(L=k),m(v.chunk(e))}function St(e){var t=[],r;n.scope&&ft();while(!st(k)){if(\"return\"===k.value){t.push(xt());break}r=xt(),r&&t.push(r)}return n.scope&&lt(),t}function xt(){bt();if(u===k.type)switch(k.value){case\"local\":return $(),Dt();case\"if\":return $(),Mt();case\"return\":return $(),Ot();case\"function\":$();var e=jt();return Bt(e);case\"while\":return $(),Lt();case\"for\":return $(),_t();case\"repeat\":return $(),At();case\"break\":return $(),Nt();case\"do\":return $(),kt();case\"goto\":return $(),Ct()}if(l===k.type&&J(\"::\"))return Tt();mt&&vt.pop();if(J(\";\"))return;return Pt()}function Tt(){var e=k.value,t=Ht();return n.scope&&(ct(\"::\"+e+\"::\"),pt(t,!0)),K(\"::\"),m(v.labelStatement(t))}function Nt(){return m(v.breakStatement())}function Ct(){var e=k.value,t=Ht();return n.scope&&(t.isLabel=dt(\"::\"+e+\"::\")),m(v.gotoStatement(t))}function kt(){var e=St();return K(\"end\"),m(v.doStatement(e))}function Lt(){var e=qt();K(\"do\");var t=St();return K(\"end\"),m(v.whileStatement(e,t))}function At(){var e=St();K(\"until\");var t=qt();return m(v.repeatStatement(t,e))}function Ot(){var e=[];if(\"end\"!==k.value){var t=It();null!=t&&e.push(t);while(J(\",\"))t=qt(),e.push(t);J(\";\")}return m(v.returnStatement(e))}function Mt(){var e=[],t,n,r;mt&&(r=vt[vt.length-1],vt.push(r)),t=qt(),K(\"then\"),n=St(),e.push(m(v.ifClause(t,n))),mt&&(r=gt());while(J(\"elseif\"))wt(r),t=qt(),K(\"then\"),n=St(),e.push(m(v.elseifClause(t,n))),mt&&(r=gt());return J(\"else\")&&(mt&&(r=new yt(L),vt.push(r)),n=St(),e.push(m(v.elseClause(n)))),K(\"end\"),m(v.ifStatement(e))}function _t(){var e=Ht(),t;n.scope&&ht(e);if(J(\"=\")){var r=qt();K(\",\");var i=qt(),s=J(\",\")?qt():null;return K(\"do\"),t=St(),K(\"end\"),m(v.forNumericStatement(e,r,i,s,t))}var o=[e];while(J(\",\"))e=Ht(),n.scope&&ht(e),o.push(e);K(\"in\");var u=[];do{var a=qt();u.push(a)}while(J(\",\"));return K(\"do\"),t=St(),K(\"end\"),m(v.forGenericStatement(o,u,t))}function Dt(){var e;if(a===k.type){var t=[],r=[];do e=Ht(),t.push(e);while(J(\",\"));if(J(\"=\"))do{var i=qt();r.push(i)}while(J(\",\"));if(n.scope)for(var s=0,o=t.length;s<o;s++)ht(t[s]);return m(v.localStatement(t,r))}if(J(\"function\"))return e=Ht(),n.scope&&ht(e),Bt(e,!0);T(\"<name>\",k)}function Pt(){var e=k,t,n;mt&&(n=gt()),t=zt();if(null==t)return N(k);if(\",=\".indexOf(k.value)>=0){var r=[t],i=[],s;while(J(\",\"))s=zt(),null==s&&T(\"<expression>\",k),r.push(s);K(\"=\");do s=qt(),i.push(s);while(J(\",\"));return wt(n),m(v.assignmentStatement(r,i))}return it(t)?(wt(n),m(v.callStatement(t))):N(e)}function Ht(){bt();var e=k.value;return a!==k.type&&T(\"<name>\",k),$(),m(v.identifier(e))}function Bt(e,t){var r=[];K(\"(\");if(!J(\")\"))for(;;)if(a===k.type){var i=Ht();n.scope&&ht(i),r.push(i);if(J(\",\"))continue;if(J(\")\"))break}else{if(p===k.type){r.push(Xt()),K(\")\");break}T(\"<name> or '...'\",k)}var s=St();return K(\"end\"),t=t||!1,m(v.functionStatement(e,r,t,s))}function jt(){var e,t,r;mt&&(r=gt()),e=Ht(),n.scope&&pt(e,!1);while(J(\".\"))wt(r),t=Ht(),n.scope&&pt(t,!1),e=m(v.memberExpression(e,\".\",t));return J(\":\")&&(wt(r),t=Ht(),n.scope&&pt(t,!1),e=m(v.memberExpression(e,\":\",t))),e}function Ft(){var e=[],t,n;for(;;){bt();if(l===k.type&&J(\"[\"))t=qt(),K(\"]\"),K(\"=\"),n=qt(),e.push(m(v.tableKey(t,n)));else if(a===k.type)t=qt(),J(\"=\")?(n=qt(),e.push(m(v.tableKeyString(t,n)))):e.push(m(v.tableValue(t)));else{if(null==(n=It())){vt.pop();break}e.push(m(v.tableValue(n)))}if(\",;\".indexOf(k.value)>=0){$();continue}if(\"}\"===k.value)break}return K(\"}\"),m(v.tableConstructorExpression(e))}function It(){var e=Ut(0);return e}function qt(){var e=It();if(null!=e)return e;T(\"<expression>\",k)}function Rt(e){var t=e.charCodeAt(0),n=e.length;if(1===n)switch(t){case 94:return 10;case 42:case 47:case 37:return 7;case 43:case 45:return 6;case 60:case 62:return 3;case 38:case 124:return 7}else if(2===n)switch(t){case 46:return 5;case 60:case 62:case 61:case 126:return 3;case 111:return 1}else if(97===t&&\"and\"===e)return 2;return 0}function Ut(e){var t=k.value,n,r;mt&&(r=gt());if(rt(k)){bt(),$();var i=Ut(8);i==null&&T(\"<expression>\",k),n=m(v.unaryExpression(t,i))}null==n&&(n=Xt(),null==n&&(n=zt()));if(null==n)return null;var s;for(;;){t=k.value,s=l===k.type||u===k.type?Rt(t):0;if(s===0||s<=e)break;(\"^\"===t||\"..\"===t)&&s--,$();var o=Ut(s);null==o&&T(\"<expression>\",k),mt&&vt.push(r),n=m(v.binaryExpression(t,n,o))}return n}function zt(){var e,t,r,i;mt&&(r=gt());if(a===k.type)t=k.value,e=Ht(),n.scope&&pt(e,i=dt(t));else{if(!J(\"(\"))return null;e=qt(),K(\")\"),n.scope&&(i=e.isLocal)}var s,u;for(;;)if(l===k.type)switch(k.value){case\"[\":wt(r),$(),s=qt(),e=m(v.indexExpression(e,s)),K(\"]\");break;case\".\":wt(r),$(),u=Ht(),n.scope&&pt(u,i),e=m(v.memberExpression(e,\".\",u));break;case\":\":wt(r),$(),u=Ht(),n.scope&&pt(u,i),e=m(v.memberExpression(e,\":\",u)),wt(r),e=Wt(e);break;case\"(\":case\"{\":wt(r),e=Wt(e);break;default:return e}else{if(o!==k.type)break;wt(r),e=Wt(e)}return e}function Wt(e){if(l===k.type)switch(k.value){case\"(\":$();var t=[],n=It();null!=n&&t.push(n);while(J(\",\"))n=qt(),t.push(n);return K(\")\"),m(v.callExpression(e,t));case\"{\":bt(),$();var r=Ft();return m(v.tableCallExpression(e,r))}else if(o===k.type)return m(v.stringCallExpression(e,Xt()));T(\"function arguments\",k)}function Xt(){var e=o|f|c|h|p,n=k.value,r=k.type,i;mt&&(i=gt());if(r&e){wt(i);var s=t.slice(k.range[0],k.range[1]);return $(),m(v.literal(r,n,s))}if(u===r&&\"function\"===n)return wt(i),$(),Bt(null);if(J(\"{\"))return wt(i),Ft()}function Vt(s,o){return\"undefined\"==typeof o&&\"object\"==typeof s&&(o=s,s=undefined),o||(o={}),t=s||\"\",n=S(i,o),C=0,_=1,D=0,r=t.length,ot=[[]],ut=0,at=[],vt=[],n.comments&&(O=[]),n.wait?e:Jt()}function $t(n){return t+=String(n),r=t.length,e}function Jt(e){\"undefined\"!=typeof e&&$t(e),r=t.length,mt=n.locations||n.ranges,A=P();var i=Et();n.comments&&(i.comments=O),n.scope&&(i.globals=at);if(vt.length>0)throw new Error(\"Location tracking failed. This is most likely a bug in luaparse\");return i}e.version=\"0.1.4\";var t,n,r,i=e.defaultOptions={wait:!1,comments:!0,scope:!1,locations:!1,ranges:!1},s=1,o=2,u=4,a=8,f=16,l=32,c=64,h=128,p=256;e.tokenTypes={EOF:s,StringLiteral:o,Keyword:u,Identifier:a,NumericLiteral:f,Punctuator:l,BooleanLiteral:c,NilLiteral:h,VarargLiteral:p};var d=e.errors={unexpected:\"Unexpected %1 '%2' near '%3'\",expected:\"'%1' expected near '%2'\",expectedToken:\"%1 expected near '%2'\",unfinishedString:\"unfinished string near '%1'\",malformedNumber:\"malformed number near '%1'\"},v=e.ast={labelStatement:function(e){return{type:\"LabelStatement\",label:e}},breakStatement:function(){return{type:\"BreakStatement\"}},gotoStatement:function(e){return{type:\"GotoStatement\",label:e}},returnStatement:function(e){return{type:\"ReturnStatement\",arguments:e}},ifStatement:function(e){return{type:\"IfStatement\",clauses:e}},ifClause:function(e,t){return{type:\"IfClause\",condition:e,body:t}},elseifClause:function(e,t){return{type:\"ElseifClause\",condition:e,body:t}},elseClause:function(e){return{type:\"ElseClause\",body:e}},whileStatement:function(e,t){return{type:\"WhileStatement\",condition:e,body:t}},doStatement:function(e){return{type:\"DoStatement\",body:e}},repeatStatement:function(e,t){return{type:\"RepeatStatement\",condition:e,body:t}},localStatement:function(e,t){return{type:\"LocalStatement\",variables:e,init:t}},assignmentStatement:function(e,t){return{type:\"AssignmentStatement\",variables:e,init:t}},callStatement:function(e){return{type:\"CallStatement\",expression:e}},functionStatement:function(e,t,n,r){return{type:\"FunctionDeclaration\",identifier:e,isLocal:n,parameters:t,body:r}},forNumericStatement:function(e,t,n,r,i){return{type:\"ForNumericStatement\",variable:e,start:t,end:n,step:r,body:i}},forGenericStatement:function(e,t,n){return{type:\"ForGenericStatement\",variables:e,iterators:t,body:n}},chunk:function(e){return{type:\"Chunk\",body:e}},identifier:function(e){return{type:\"Identifier\",name:e}},literal:function(e,t,n){return e=e===o?\"StringLiteral\":e===f?\"NumericLiteral\":e===c?\"BooleanLiteral\":e===h?\"NilLiteral\":\"VarargLiteral\",{type:e,value:t,raw:n}},tableKey:function(e,t){return{type:\"TableKey\",key:e,value:t}},tableKeyString:function(e,t){return{type:\"TableKeyString\",key:e,value:t}},tableValue:function(e){return{type:\"TableValue\",value:e}},tableConstructorExpression:function(e){return{type:\"TableConstructorExpression\",fields:e}},binaryExpression:function(e,t,n){var r=\"and\"===e||\"or\"===e?\"LogicalExpression\":\"BinaryExpression\";return{type:r,operator:e,left:t,right:n}},unaryExpression:function(e,t){return{type:\"UnaryExpression\",operator:e,argument:t}},memberExpression:function(e,t,n){return{type:\"MemberExpression\",indexer:t,identifier:n,base:e}},indexExpression:function(e,t){return{type:\"IndexExpression\",base:e,index:t}},callExpression:function(e,t){return{type:\"CallExpression\",base:e,arguments:t}},tableCallExpression:function(e,t){return{type:\"TableCallExpression\",base:e,arguments:t}},stringCallExpression:function(e,t){return{type:\"StringCallExpression\",base:e,argument:t}},comment:function(e,t){return{type:\"Comment\",value:e,raw:t}}},g=Array.prototype.slice,y=Object.prototype.toString,b=function(t,n){for(var r=0,i=t.length;r<i;r++)if(t[r]===n)return r;return-1},C,k,L,A,O,M,_,D;e.lex=P;var ot,ut,at,vt=[],mt;yt.prototype.complete=function(){n.locations&&(this.loc.end.line=L.line,this.loc.end.column=L.range[1]-L.lineStart),n.ranges&&(this.range[1]=L.range[1])},e.parse=Vt,e.write=$t,e.end=Jt})}),define(\"ace/mode/lua_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"../mode/lua/luaparse\"),o=t.Worker=function(e){i.call(this,e),this.setTimeout(500)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue(),t=[];try{s.parse(e)}catch(n){n instanceof SyntaxError&&t.push({row:n.line-1,column:n.column,text:n.message,type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min/worker-php.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/php/php\",[],function(e,t,n){var r={Constants:{}};r.Constants.T_INCLUDE=257,r.Constants.T_INCLUDE_ONCE=258,r.Constants.T_EVAL=259,r.Constants.T_REQUIRE=260,r.Constants.T_REQUIRE_ONCE=261,r.Constants.T_LOGICAL_OR=262,r.Constants.T_LOGICAL_XOR=263,r.Constants.T_LOGICAL_AND=264,r.Constants.T_PRINT=265,r.Constants.T_YIELD=266,r.Constants.T_DOUBLE_ARROW=267,r.Constants.T_YIELD_FROM=268,r.Constants.T_PLUS_EQUAL=269,r.Constants.T_MINUS_EQUAL=270,r.Constants.T_MUL_EQUAL=271,r.Constants.T_DIV_EQUAL=272,r.Constants.T_CONCAT_EQUAL=273,r.Constants.T_MOD_EQUAL=274,r.Constants.T_AND_EQUAL=275,r.Constants.T_OR_EQUAL=276,r.Constants.T_XOR_EQUAL=277,r.Constants.T_SL_EQUAL=278,r.Constants.T_SR_EQUAL=279,r.Constants.T_POW_EQUAL=280,r.Constants.T_COALESCE=281,r.Constants.T_BOOLEAN_OR=282,r.Constants.T_BOOLEAN_AND=283,r.Constants.T_IS_EQUAL=284,r.Constants.T_IS_NOT_EQUAL=285,r.Constants.T_IS_IDENTICAL=286,r.Constants.T_IS_NOT_IDENTICAL=287,r.Constants.T_SPACESHIP=288,r.Constants.T_IS_SMALLER_OR_EQUAL=289,r.Constants.T_IS_GREATER_OR_EQUAL=290,r.Constants.T_SL=291,r.Constants.T_SR=292,r.Constants.T_INSTANCEOF=293,r.Constants.T_INC=294,r.Constants.T_DEC=295,r.Constants.T_INT_CAST=296,r.Constants.T_DOUBLE_CAST=297,r.Constants.T_STRING_CAST=298,r.Constants.T_ARRAY_CAST=299,r.Constants.T_OBJECT_CAST=300,r.Constants.T_BOOL_CAST=301,r.Constants.T_UNSET_CAST=302,r.Constants.T_POW=303,r.Constants.T_NEW=304,r.Constants.T_CLONE=305,r.Constants.T_EXIT=306,r.Constants.T_IF=307,r.Constants.T_ELSEIF=308,r.Constants.T_ELSE=309,r.Constants.T_ENDIF=310,r.Constants.T_LNUMBER=311,r.Constants.T_DNUMBER=312,r.Constants.T_STRING=313,r.Constants.T_STRING_VARNAME=314,r.Constants.T_VARIABLE=315,r.Constants.T_NUM_STRING=316,r.Constants.T_INLINE_HTML=317,r.Constants.T_CHARACTER=318,r.Constants.T_BAD_CHARACTER=319,r.Constants.T_ENCAPSED_AND_WHITESPACE=320,r.Constants.T_CONSTANT_ENCAPSED_STRING=321,r.Constants.T_ECHO=322,r.Constants.T_DO=323,r.Constants.T_WHILE=324,r.Constants.T_ENDWHILE=325,r.Constants.T_FOR=326,r.Constants.T_ENDFOR=327,r.Constants.T_FOREACH=328,r.Constants.T_ENDFOREACH=329,r.Constants.T_DECLARE=330,r.Constants.T_ENDDECLARE=331,r.Constants.T_AS=332,r.Constants.T_SWITCH=333,r.Constants.T_ENDSWITCH=334,r.Constants.T_CASE=335,r.Constants.T_DEFAULT=336,r.Constants.T_BREAK=337,r.Constants.T_CONTINUE=338,r.Constants.T_GOTO=339,r.Constants.T_FUNCTION=340,r.Constants.T_CONST=341,r.Constants.T_RETURN=342,r.Constants.T_TRY=343,r.Constants.T_CATCH=344,r.Constants.T_FINALLY=345,r.Constants.T_THROW=346,r.Constants.T_USE=347,r.Constants.T_INSTEADOF=348,r.Constants.T_GLOBAL=349,r.Constants.T_STATIC=350,r.Constants.T_ABSTRACT=351,r.Constants.T_FINAL=352,r.Constants.T_PRIVATE=353,r.Constants.T_PROTECTED=354,r.Constants.T_PUBLIC=355,r.Constants.T_VAR=356,r.Constants.T_UNSET=357,r.Constants.T_ISSET=358,r.Constants.T_EMPTY=359,r.Constants.T_HALT_COMPILER=360,r.Constants.T_CLASS=361,r.Constants.T_TRAIT=362,r.Constants.T_INTERFACE=363,r.Constants.T_EXTENDS=364,r.Constants.T_IMPLEMENTS=365,r.Constants.T_OBJECT_OPERATOR=366,r.Constants.T_LIST=367,r.Constants.T_ARRAY=368,r.Constants.T_CALLABLE=369,r.Constants.T_CLASS_C=370,r.Constants.T_TRAIT_C=371,r.Constants.T_METHOD_C=372,r.Constants.T_FUNC_C=373,r.Constants.T_LINE=374,r.Constants.T_FILE=375,r.Constants.T_COMMENT=376,r.Constants.T_DOC_COMMENT=377,r.Constants.T_OPEN_TAG=378,r.Constants.T_OPEN_TAG_WITH_ECHO=379,r.Constants.T_CLOSE_TAG=380,r.Constants.T_WHITESPACE=381,r.Constants.T_START_HEREDOC=382,r.Constants.T_END_HEREDOC=383,r.Constants.T_DOLLAR_OPEN_CURLY_BRACES=384,r.Constants.T_CURLY_OPEN=385,r.Constants.T_PAAMAYIM_NEKUDOTAYIM=386,r.Constants.T_NAMESPACE=387,r.Constants.T_NS_C=388,r.Constants.T_DIR=389,r.Constants.T_NS_SEPARATOR=390,r.Constants.T_ELLIPSIS=391,r.Lexer=function(e,t){var n,i,s=[\"INITIAL\"],o=0,u=function(e){s[o]=e},a=function(e){s[++o]=e},f=function(){--o},l=t===undefined||/^(on|true|1)$/i.test(t.short_open_tag),c=l?/^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|<\\?|\\<script language\\=('|\")?php('|\")?\\>)/i:/^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|\\<script language\\=('|\")?php('|\")?\\>)/i,h=l?/[^<]*(?:<(?!\\?|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i:/[^<]*(?:<(?!\\?=|\\?php[ \\t\\r\\n]|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i,p=\"[a-zA-Z_\\\\x7f-\\\\uffff][a-zA-Z0-9_\\\\x7f-\\\\uffff]*\",d=function(e){return\"[^\"+e+\"\\\\\\\\${]*(?:(?:\\\\\\\\[\\\\s\\\\S]|\\\\$(?!\\\\{|[a-zA-Z_\\\\x7f-\\\\uffff])|\\\\{(?!\\\\$))[^\"+e+\"\\\\\\\\${]*)*\"},v=[{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p+\"(?=\\\\[)\"),func:function(){a(\"VAR_OFFSET\")}},{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p+\"(?=->\"+p+\")\"),func:function(){a(\"LOOKING_FOR_PROPERTY\")}},{value:r.Constants.T_DOLLAR_OPEN_CURLY_BRACES,re:new RegExp(\"^\\\\$\\\\{(?=\"+p+\"[\\\\[}])\"),func:function(){a(\"LOOKING_FOR_VARNAME\")}},{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p)},{value:r.Constants.T_DOLLAR_OPEN_CURLY_BRACES,re:/^\\$\\{/,func:function(){a(\"IN_SCRIPTING\")}},{value:r.Constants.T_CURLY_OPEN,re:/^\\{(?=\\$)/,func:function(){a(\"IN_SCRIPTING\")}}],m={INITIAL:[{value:r.Constants.T_OPEN_TAG_WITH_ECHO,re:/^<\\?=/i,func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_OPEN_TAG,re:c,func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_INLINE_HTML,re:h}],IN_SCRIPTING:[{value:r.Constants.T_WHITESPACE,re:/^[ \\n\\r\\t]+/},{value:r.Constants.T_ABSTRACT,re:/^abstract\\b/i},{value:r.Constants.T_LOGICAL_AND,re:/^and\\b/i},{value:r.Constants.T_ARRAY,re:/^array\\b/i},{value:r.Constants.T_AS,re:/^as\\b/i},{value:r.Constants.T_BREAK,re:/^break\\b/i},{value:r.Constants.T_CALLABLE,re:/^callable\\b/i},{value:r.Constants.T_CASE,re:/^case\\b/i},{value:r.Constants.T_CATCH,re:/^catch\\b/i},{value:r.Constants.T_CLASS,re:/^class\\b/i},{value:r.Constants.T_CLONE,re:/^clone\\b/i},{value:r.Constants.T_CONST,re:/^const\\b/i},{value:r.Constants.T_CONTINUE,re:/^continue\\b/i},{value:r.Constants.T_DECLARE,re:/^declare\\b/i},{value:r.Constants.T_DEFAULT,re:/^default\\b/i},{value:r.Constants.T_DO,re:/^do\\b/i},{value:r.Constants.T_ECHO,re:/^echo\\b/i},{value:r.Constants.T_ELSE,re:/^else\\b/i},{value:r.Constants.T_ELSEIF,re:/^elseif\\b/i},{value:r.Constants.T_ENDDECLARE,re:/^enddeclare\\b/i},{value:r.Constants.T_ENDFOR,re:/^endfor\\b/i},{value:r.Constants.T_ENDFOREACH,re:/^endforeach\\b/i},{value:r.Constants.T_ENDIF,re:/^endif\\b/i},{value:r.Constants.T_ENDSWITCH,re:/^endswitch\\b/i},{value:r.Constants.T_ENDWHILE,re:/^endwhile\\b/i},{value:r.Constants.T_EMPTY,re:/^empty\\b/i},{value:r.Constants.T_EVAL,re:/^eval\\b/i},{value:r.Constants.T_EXIT,re:/^(?:exit|die)\\b/i},{value:r.Constants.T_EXTENDS,re:/^extends\\b/i},{value:r.Constants.T_FINAL,re:/^final\\b/i},{value:r.Constants.T_FINALLY,re:/^finally\\b/i},{value:r.Constants.T_FOR,re:/^for\\b/i},{value:r.Constants.T_FOREACH,re:/^foreach\\b/i},{value:r.Constants.T_FUNCTION,re:/^function\\b/i},{value:r.Constants.T_GLOBAL,re:/^global\\b/i},{value:r.Constants.T_GOTO,re:/^goto\\b/i},{value:r.Constants.T_IF,re:/^if\\b/i},{value:r.Constants.T_IMPLEMENTS,re:/^implements\\b/i},{value:r.Constants.T_INCLUDE,re:/^include\\b/i},{value:r.Constants.T_INCLUDE_ONCE,re:/^include_once\\b/i},{value:r.Constants.T_INSTANCEOF,re:/^instanceof\\b/i},{value:r.Constants.T_INSTEADOF,re:/^insteadof\\b/i},{value:r.Constants.T_INTERFACE,re:/^interface\\b/i},{value:r.Constants.T_ISSET,re:/^isset\\b/i},{value:r.Constants.T_LIST,re:/^list\\b/i},{value:r.Constants.T_NAMESPACE,re:/^namespace\\b/i},{value:r.Constants.T_NEW,re:/^new\\b/i},{value:r.Constants.T_LOGICAL_OR,re:/^or\\b/i},{value:r.Constants.T_PRINT,re:/^print\\b/i},{value:r.Constants.T_PRIVATE,re:/^private\\b/i},{value:r.Constants.T_PROTECTED,re:/^protected\\b/i},{value:r.Constants.T_PUBLIC,re:/^public\\b/i},{value:r.Constants.T_REQUIRE,re:/^require\\b/i},{value:r.Constants.T_REQUIRE_ONCE,re:/^require_once\\b/i},{value:r.Constants.T_STATIC,re:/^static\\b/i},{value:r.Constants.T_SWITCH,re:/^switch\\b/i},{value:r.Constants.T_THROW,re:/^throw\\b/i},{value:r.Constants.T_TRAIT,re:/^trait\\b/i},{value:r.Constants.T_TRY,re:/^try\\b/i},{value:r.Constants.T_UNSET,re:/^unset\\b/i},{value:r.Constants.T_USE,re:/^use\\b/i},{value:r.Constants.T_VAR,re:/^var\\b/i},{value:r.Constants.T_WHILE,re:/^while\\b/i},{value:r.Constants.T_LOGICAL_XOR,re:/^xor\\b/i},{value:r.Constants.T_YIELD_FROM,re:/^yield\\s+from\\b/i},{value:r.Constants.T_YIELD,re:/^yield\\b/i},{value:r.Constants.T_RETURN,re:/^return\\b/i},{value:r.Constants.T_METHOD_C,re:/^__METHOD__\\b/i},{value:r.Constants.T_LINE,re:/^__LINE__\\b/i},{value:r.Constants.T_FILE,re:/^__FILE__\\b/i},{value:r.Constants.T_FUNC_C,re:/^__FUNCTION__\\b/i},{value:r.Constants.T_NS_C,re:/^__NAMESPACE__\\b/i},{value:r.Constants.T_TRAIT_C,re:/^__TRAIT__\\b/i},{value:r.Constants.T_DIR,re:/^__DIR__\\b/i},{value:r.Constants.T_CLASS_C,re:/^__CLASS__\\b/i},{value:r.Constants.T_AND_EQUAL,re:/^&=/},{value:r.Constants.T_ARRAY_CAST,re:/^\\([ \\t]*array[ \\t]*\\)/i},{value:r.Constants.T_BOOL_CAST,re:/^\\([ \\t]*(?:bool|boolean)[ \\t]*\\)/i},{value:r.Constants.T_DOUBLE_CAST,re:/^\\([ \\t]*(?:real|float|double)[ \\t]*\\)/i},{value:r.Constants.T_INT_CAST,re:/^\\([ \\t]*(?:int|integer)[ \\t]*\\)/i},{value:r.Constants.T_OBJECT_CAST,re:/^\\([ \\t]*object[ \\t]*\\)/i},{value:r.Constants.T_STRING_CAST,re:/^\\([ \\t]*(?:binary|string)[ \\t]*\\)/i},{value:r.Constants.T_UNSET_CAST,re:/^\\([ \\t]*unset[ \\t]*\\)/i},{value:r.Constants.T_BOOLEAN_AND,re:/^&&/},{value:r.Constants.T_BOOLEAN_OR,re:/^\\|\\|/},{value:r.Constants.T_CLOSE_TAG,re:/^(?:\\?>|<\\/script>)(\\r\\n|\\r|\\n)?/i,func:function(){u(\"INITIAL\")}},{value:r.Constants.T_DOUBLE_ARROW,re:/^=>/},{value:r.Constants.T_PAAMAYIM_NEKUDOTAYIM,re:/^::/},{value:r.Constants.T_INC,re:/^\\+\\+/},{value:r.Constants.T_DEC,re:/^--/},{value:r.Constants.T_CONCAT_EQUAL,re:/^\\.=/},{value:r.Constants.T_DIV_EQUAL,re:/^\\/=/},{value:r.Constants.T_XOR_EQUAL,re:/^\\^=/},{value:r.Constants.T_MUL_EQUAL,re:/^\\*=/},{value:r.Constants.T_MOD_EQUAL,re:/^%=/},{value:r.Constants.T_SL_EQUAL,re:/^<<=/},{value:r.Constants.T_START_HEREDOC,re:new RegExp(\"^[bB]?<<<[ \\\\t]*'(\"+p+\")'(?:\\\\r\\\\n|\\\\r|\\\\n)\"),func:function(e){n=e[1],u(\"NOWDOC\")}},{value:r.Constants.T_START_HEREDOC,re:new RegExp('^[bB]?<<<[ \\\\t]*(\"?)('+p+\")\\\\1(?:\\\\r\\\\n|\\\\r|\\\\n)\"),func:function(e){n=e[2],i=!0,u(\"HEREDOC\")}},{value:r.Constants.T_SL,re:/^<</},{value:r.Constants.T_SPACESHIP,re:/^<=>/},{value:r.Constants.T_IS_SMALLER_OR_EQUAL,re:/^<=/},{value:r.Constants.T_SR_EQUAL,re:/^>>=/},{value:r.Constants.T_SR,re:/^>>/},{value:r.Constants.T_IS_GREATER_OR_EQUAL,re:/^>=/},{value:r.Constants.T_OR_EQUAL,re:/^\\|=/},{value:r.Constants.T_PLUS_EQUAL,re:/^\\+=/},{value:r.Constants.T_MINUS_EQUAL,re:/^-=/},{value:r.Constants.T_OBJECT_OPERATOR,re:new RegExp(\"^->(?=[ \\n\\r\t]*\"+p+\")\"),func:function(){a(\"LOOKING_FOR_PROPERTY\")}},{value:r.Constants.T_OBJECT_OPERATOR,re:/^->/i},{value:r.Constants.T_ELLIPSIS,re:/^\\.\\.\\./},{value:r.Constants.T_POW_EQUAL,re:/^\\*\\*=/},{value:r.Constants.T_POW,re:/^\\*\\*/},{value:r.Constants.T_COALESCE,re:/^\\?\\?/},{value:r.Constants.T_COMMENT,re:/^\\/\\*([\\S\\s]*?)(?:\\*\\/|$)/},{value:r.Constants.T_COMMENT,re:/^(?:\\/\\/|#)[^\\r\\n?]*(?:\\?(?!>)[^\\r\\n?]*)*(?:\\r\\n|\\r|\\n)?/},{value:r.Constants.T_IS_IDENTICAL,re:/^===/},{value:r.Constants.T_IS_EQUAL,re:/^==/},{value:r.Constants.T_IS_NOT_IDENTICAL,re:/^!==/},{value:r.Constants.T_IS_NOT_EQUAL,re:/^(!=|<>)/},{value:r.Constants.T_DNUMBER,re:/^(?:[0-9]+\\.[0-9]*|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?/},{value:r.Constants.T_DNUMBER,re:/^[0-9]+[eE][+-]?[0-9]+/},{value:r.Constants.T_LNUMBER,re:/^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i},{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p)},{value:r.Constants.T_CONSTANT_ENCAPSED_STRING,re:/^[bB]?'[^'\\\\]*(?:\\\\[\\s\\S][^'\\\\]*)*'/},{value:r.Constants.T_CONSTANT_ENCAPSED_STRING,re:new RegExp('^[bB]?\"'+d('\"')+'\"')},{value:-1,re:/^[bB]?\"/,func:function(){u(\"DOUBLE_QUOTES\")}},{value:-1,re:/^`/,func:function(){u(\"BACKTICKS\")}},{value:r.Constants.T_NS_SEPARATOR,re:/^\\\\/},{value:r.Constants.T_STRING,re:/^[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{value:-1,re:/^\\{/,func:function(){a(\"IN_SCRIPTING\")}},{value:-1,re:/^\\}/,func:function(){o>0&&f()}},{value:-1,re:/^[\\[\\];:?()!.,><=+-/*|&@^%\"'$~]/}],DOUBLE_QUOTES:v.concat([{value:-1,re:/^\"/,func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_ENCAPSED_AND_WHITESPACE,re:new RegExp(\"^\"+d('\"'))}]),BACKTICKS:v.concat([{value:-1,re:/^`/,func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_ENCAPSED_AND_WHITESPACE,re:new RegExp(\"^\"+d(\"`\"))}]),VAR_OFFSET:[{value:-1,re:/^\\]/,func:function(){f()}},{value:r.Constants.T_NUM_STRING,re:/^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i},{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p)},{value:r.Constants.T_STRING,re:new RegExp(\"^\"+p)},{value:-1,re:/^[;:,.\\[()|^&+-/*=%!~$<>?@{}\"`]/}],LOOKING_FOR_PROPERTY:[{value:r.Constants.T_OBJECT_OPERATOR,re:/^->/},{value:r.Constants.T_STRING,re:new RegExp(\"^\"+p),func:function(){f()}},{value:r.Constants.T_WHITESPACE,re:/^[ \\n\\r\\t]+/}],LOOKING_FOR_VARNAME:[{value:r.Constants.T_STRING_VARNAME,re:new RegExp(\"^\"+p+\"(?=[\\\\[}])\"),func:function(){u(\"IN_SCRIPTING\")}}],NOWDOC:[{value:r.Constants.T_END_HEREDOC,matchFunc:function(e){var t=new RegExp(\"^\"+n+\"(?=;?[\\\\r\\\\n])\");return e.match(t)?[e.substr(0,n.length)]:null},func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_ENCAPSED_AND_WHITESPACE,matchFunc:function(e){var t=new RegExp(\"[\\\\r\\\\n]\"+n+\"(?=;?[\\\\r\\\\n])\"),r=t.exec(e),i=r?r.index+1:e.length;return[e.substring(0,i)]}}],HEREDOC:v.concat([{value:r.Constants.T_END_HEREDOC,matchFunc:function(e){if(!i)return null;var t=new RegExp(\"^\"+n+\"(?=;?[\\\\r\\\\n])\");return e.match(t)?[e.substr(0,n.length)]:null},func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_ENCAPSED_AND_WHITESPACE,matchFunc:function(e){var t=e.length,r=new RegExp(\"^\"+d(\"\")),s=r.exec(e);return s&&(t=s[0].length),r=new RegExp(\"([\\\\r\\\\n])\"+n+\"(?=;?[\\\\r\\\\n])\"),s=r.exec(e.substring(0,t)),s?(t=s.index+1,i=!0):i=!1,t==0?null:[e.substring(0,t)]}}])},g=[],y=1,b=!0;if(e===null)return g;typeof e!=\"string\"&&(e=e.toString());while(e.length>0&&b===!0){var w=s[o],E=m[w];b=E.some(function(t){var n=t.matchFunc!==undefined?t.matchFunc(e):e.match(t.re);if(n!==null){if(n[0].length==0)throw new Error(\"empty match\");t.func!==undefined&&t.func(n);if(t.value===-1)g.push(n[0]);else{var r=n[0];g.push([parseInt(t.value,10),r,y]),y+=r.split(\"\\n\").length-1}return e=e.substring(n[0].length),!0}return!1})}return g},r.Parser=function(e,t){var n=this.yybase,i=this.yydefault,s=this.yycheck,o=this.yyaction,u=this.yylen,a=this.yygbase,f=this.yygcheck,l=this.yyp,c=this.yygoto,h=this.yylhs,p=this.terminals,d=this.translate,v=this.yygdefault;this.pos=-1,this.line=1,this.tokenMap=this.createTokenMap(),this.dropTokens={},this.dropTokens[r.Constants.T_WHITESPACE]=1,this.dropTokens[r.Constants.T_OPEN_TAG]=1;var m=[];e.forEach(function(e,t){typeof e==\"object\"&&e[0]===r.Constants.T_OPEN_TAG_WITH_ECHO?(m.push([r.Constants.T_OPEN_TAG,e[1],e[2]]),m.push([r.Constants.T_ECHO,e[1],e[2]])):m.push(e)}),this.tokens=m;var g=this.TOKEN_NONE;this.startAttributes={startLine:1},this.endAttributes={};var y=[this.startAttributes],b=0,w=[b];this.yyastk=[],this.stackPos=0;var E,S;for(;;){if(n[b]===0)E=i[b];else{g===this.TOKEN_NONE&&(S=this.getNextToken(),g=S>=0&&S<this.TOKEN_MAP_SIZE?d[S]:this.TOKEN_INVALID,y[this.stackPos]=this.startAttributes);if(((E=n[b]+g)>=0&&E<this.YYLAST&&s[E]===g||b<this.YY2TBLSTATE&&(E=n[b+this.YYNLSTATES]+g)>=0&&E<this.YYLAST&&s[E]===g)&&(E=o[E])!==this.YYDEFAULT)if(E>0){++this.stackPos,w[this.stackPos]=b=E,this.yyastk[this.stackPos]=this.tokenValue,y[this.stackPos]=this.startAttributes,g=this.TOKEN_NONE;if(E<this.YYNLSTATES)continue;E-=this.YYNLSTATES}else E=-E;else E=i[b]}for(;;){if(E===0)return this.yyval;if(E===this.YYUNEXPECTED){if(t!==!0){var T=[];for(var N=0;N<this.TOKEN_MAP_SIZE;++N)if((E=n[b]+N)>=0&&E<this.YYLAST&&s[E]==N||b<this.YY2TBLSTATE&&(E=n[b+this.YYNLSTATES]+N)&&E<this.YYLAST&&s[E]==N)if(o[E]!=this.YYUNEXPECTED){if(T.length==4){T=[];break}T.push(this.terminals[N])}var C=\"\";throw T.length&&(C=\", expecting \"+T.join(\" or \")),new r.ParseError(\"syntax error, unexpected \"+p[g]+C,this.startAttributes.startLine)}return this.startAttributes.startLine}for(var x in this.endAttributes)y[this.stackPos-u[E]][x]=this.endAttributes[x];this.stackPos-=u[E],E=h[E],(l=a[E]+w[this.stackPos])>=0&&l<this.YYGLAST&&f[l]===E?b=c[l]:b=v[E],++this.stackPos,w[this.stackPos]=b,this.yyastk[this.stackPos]=this.yyval,y[this.stackPos]=this.startAttributes;if(b<this.YYNLSTATES)break;E=b-this.YYNLSTATES}}},r.ParseError=function(e,t){this.message=e,this.line=t},r.Parser.prototype.getNextToken=function(){this.startAttributes={},this.endAttributes={};var e,t;while(this.tokens[++this.pos]!==undefined){e=this.tokens[this.pos];if(typeof e==\"string\")return this.startAttributes.startLine=this.line,this.endAttributes.endLine=this.line,'b\"'===e?(this.tokenValue='b\"','\"'.charCodeAt(0)):(this.tokenValue=e,e.charCodeAt(0));this.line+=(t=e[1].match(/\\n/g))===null?0:t.length;if(r.Constants.T_COMMENT===e[0])Array.isArray(this.startAttributes.comments)||(this.startAttributes.comments=[]),this.startAttributes.comments.push({type:\"comment\",comment:e[1],line:e[2]});else if(r.Constants.T_DOC_COMMENT===e[0])this.startAttributes.comments.push(new PHPParser_Comment_Doc(e[1],e[2]));else if(this.dropTokens[e[0]]===undefined)return this.tokenValue=e[1],this.startAttributes.startLine=e[2],this.endAttributes.endLine=this.line,this.tokenMap[e[0]]}return this.startAttributes.startLine=this.line,0},r.Parser.prototype.tokenName=function(e){var t=[\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_YIELD\",\"T_DOUBLE_ARROW\",\"T_YIELD_FROM\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_POW_EQUAL\",\"T_COALESCE\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_SPACESHIP\",\"T_IS_SMALLER_OR_EQUAL\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"T_INSTANCEOF\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"T_POW\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_CHARACTER\",\"T_BAD_CHARACTER\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_FINALLY\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_DOUBLE_ARROW\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_COMMENT\",\"T_DOC_COMMENT\",\"T_OPEN_TAG\",\"T_OPEN_TAG_WITH_ECHO\",\"T_CLOSE_TAG\",\"T_WHITESPACE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\",\"T_ELLIPSIS\"],n=\"UNKNOWN\";return t.some(function(t){return r.Constants[t]===e?(n=t,!0):!1}),n},r.Parser.prototype.createTokenMap=function(){var e={},t,n;for(n=256;n<1e3;++n)r.Constants.T_OPEN_TAG_WITH_ECHO===n?e[n]=r.Constants.T_ECHO:r.Constants.T_CLOSE_TAG===n?e[n]=59:\"UNKNOWN\"!==(t=this.tokenName(n))&&(e[n]=this[t]);return e},r.Parser.prototype.TOKEN_NONE=-1,r.Parser.prototype.TOKEN_INVALID=157,r.Parser.prototype.TOKEN_MAP_SIZE=392,r.Parser.prototype.YYLAST=889,r.Parser.prototype.YY2TBLSTATE=337,r.Parser.prototype.YYGLAST=410,r.Parser.prototype.YYNLSTATES=564,r.Parser.prototype.YYUNEXPECTED=32767,r.Parser.prototype.YYDEFAULT=-32766,r.Parser.prototype.YYERRTOK=256,r.Parser.prototype.T_INCLUDE=257,r.Parser.prototype.T_INCLUDE_ONCE=258,r.Parser.prototype.T_EVAL=259,r.Parser.prototype.T_REQUIRE=260,r.Parser.prototype.T_REQUIRE_ONCE=261,r.Parser.prototype.T_LOGICAL_OR=262,r.Parser.prototype.T_LOGICAL_XOR=263,r.Parser.prototype.T_LOGICAL_AND=264,r.Parser.prototype.T_PRINT=265,r.Parser.prototype.T_YIELD=266,r.Parser.prototype.T_DOUBLE_ARROW=267,r.Parser.prototype.T_YIELD_FROM=268,r.Parser.prototype.T_PLUS_EQUAL=269,r.Parser.prototype.T_MINUS_EQUAL=270,r.Parser.prototype.T_MUL_EQUAL=271,r.Parser.prototype.T_DIV_EQUAL=272,r.Parser.prototype.T_CONCAT_EQUAL=273,r.Parser.prototype.T_MOD_EQUAL=274,r.Parser.prototype.T_AND_EQUAL=275,r.Parser.prototype.T_OR_EQUAL=276,r.Parser.prototype.T_XOR_EQUAL=277,r.Parser.prototype.T_SL_EQUAL=278,r.Parser.prototype.T_SR_EQUAL=279,r.Parser.prototype.T_POW_EQUAL=280,r.Parser.prototype.T_COALESCE=281,r.Parser.prototype.T_BOOLEAN_OR=282,r.Parser.prototype.T_BOOLEAN_AND=283,r.Parser.prototype.T_IS_EQUAL=284,r.Parser.prototype.T_IS_NOT_EQUAL=285,r.Parser.prototype.T_IS_IDENTICAL=286,r.Parser.prototype.T_IS_NOT_IDENTICAL=287,r.Parser.prototype.T_SPACESHIP=288,r.Parser.prototype.T_IS_SMALLER_OR_EQUAL=289,r.Parser.prototype.T_IS_GREATER_OR_EQUAL=290,r.Parser.prototype.T_SL=291,r.Parser.prototype.T_SR=292,r.Parser.prototype.T_INSTANCEOF=293,r.Parser.prototype.T_INC=294,r.Parser.prototype.T_DEC=295,r.Parser.prototype.T_INT_CAST=296,r.Parser.prototype.T_DOUBLE_CAST=297,r.Parser.prototype.T_STRING_CAST=298,r.Parser.prototype.T_ARRAY_CAST=299,r.Parser.prototype.T_OBJECT_CAST=300,r.Parser.prototype.T_BOOL_CAST=301,r.Parser.prototype.T_UNSET_CAST=302,r.Parser.prototype.T_POW=303,r.Parser.prototype.T_NEW=304,r.Parser.prototype.T_CLONE=305,r.Parser.prototype.T_EXIT=306,r.Parser.prototype.T_IF=307,r.Parser.prototype.T_ELSEIF=308,r.Parser.prototype.T_ELSE=309,r.Parser.prototype.T_ENDIF=310,r.Parser.prototype.T_LNUMBER=311,r.Parser.prototype.T_DNUMBER=312,r.Parser.prototype.T_STRING=313,r.Parser.prototype.T_STRING_VARNAME=314,r.Parser.prototype.T_VARIABLE=315,r.Parser.prototype.T_NUM_STRING=316,r.Parser.prototype.T_INLINE_HTML=317,r.Parser.prototype.T_CHARACTER=318,r.Parser.prototype.T_BAD_CHARACTER=319,r.Parser.prototype.T_ENCAPSED_AND_WHITESPACE=320,r.Parser.prototype.T_CONSTANT_ENCAPSED_STRING=321,r.Parser.prototype.T_ECHO=322,r.Parser.prototype.T_DO=323,r.Parser.prototype.T_WHILE=324,r.Parser.prototype.T_ENDWHILE=325,r.Parser.prototype.T_FOR=326,r.Parser.prototype.T_ENDFOR=327,r.Parser.prototype.T_FOREACH=328,r.Parser.prototype.T_ENDFOREACH=329,r.Parser.prototype.T_DECLARE=330,r.Parser.prototype.T_ENDDECLARE=331,r.Parser.prototype.T_AS=332,r.Parser.prototype.T_SWITCH=333,r.Parser.prototype.T_ENDSWITCH=334,r.Parser.prototype.T_CASE=335,r.Parser.prototype.T_DEFAULT=336,r.Parser.prototype.T_BREAK=337,r.Parser.prototype.T_CONTINUE=338,r.Parser.prototype.T_GOTO=339,r.Parser.prototype.T_FUNCTION=340,r.Parser.prototype.T_CONST=341,r.Parser.prototype.T_RETURN=342,r.Parser.prototype.T_TRY=343,r.Parser.prototype.T_CATCH=344,r.Parser.prototype.T_FINALLY=345,r.Parser.prototype.T_THROW=346,r.Parser.prototype.T_USE=347,r.Parser.prototype.T_INSTEADOF=348,r.Parser.prototype.T_GLOBAL=349,r.Parser.prototype.T_STATIC=350,r.Parser.prototype.T_ABSTRACT=351,r.Parser.prototype.T_FINAL=352,r.Parser.prototype.T_PRIVATE=353,r.Parser.prototype.T_PROTECTED=354,r.Parser.prototype.T_PUBLIC=355,r.Parser.prototype.T_VAR=356,r.Parser.prototype.T_UNSET=357,r.Parser.prototype.T_ISSET=358,r.Parser.prototype.T_EMPTY=359,r.Parser.prototype.T_HALT_COMPILER=360,r.Parser.prototype.T_CLASS=361,r.Parser.prototype.T_TRAIT=362,r.Parser.prototype.T_INTERFACE=363,r.Parser.prototype.T_EXTENDS=364,r.Parser.prototype.T_IMPLEMENTS=365,r.Parser.prototype.T_OBJECT_OPERATOR=366,r.Parser.prototype.T_LIST=367,r.Parser.prototype.T_ARRAY=368,r.Parser.prototype.T_CALLABLE=369,r.Parser.prototype.T_CLASS_C=370,r.Parser.prototype.T_TRAIT_C=371,r.Parser.prototype.T_METHOD_C=372,r.Parser.prototype.T_FUNC_C=373,r.Parser.prototype.T_LINE=374,r.Parser.prototype.T_FILE=375,r.Parser.prototype.T_COMMENT=376,r.Parser.prototype.T_DOC_COMMENT=377,r.Parser.prototype.T_OPEN_TAG=378,r.Parser.prototype.T_OPEN_TAG_WITH_ECHO=379,r.Parser.prototype.T_CLOSE_TAG=380,r.Parser.prototype.T_WHITESPACE=381,r.Parser.prototype.T_START_HEREDOC=382,r.Parser.prototype.T_END_HEREDOC=383,r.Parser.prototype.T_DOLLAR_OPEN_CURLY_BRACES=384,r.Parser.prototype.T_CURLY_OPEN=385,r.Parser.prototype.T_PAAMAYIM_NEKUDOTAYIM=386,r.Parser.prototype.T_NAMESPACE=387,r.Parser.prototype.T_NS_C=388,r.Parser.prototype.T_DIR=389,r.Parser.prototype.T_NS_SEPARATOR=390,r.Parser.prototype.T_ELLIPSIS=391,r.Parser.prototype.terminals=[\"$EOF\",\"error\",\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"','\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_YIELD\",\"T_DOUBLE_ARROW\",\"T_YIELD_FROM\",\"'='\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_POW_EQUAL\",\"'?'\",\"':'\",\"T_COALESCE\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"'|'\",\"'^'\",\"'&'\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_SPACESHIP\",\"'<'\",\"T_IS_SMALLER_OR_EQUAL\",\"'>'\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"'+'\",\"'-'\",\"'.'\",\"'*'\",\"'/'\",\"'%'\",\"'!'\",\"T_INSTANCEOF\",\"'~'\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"'@'\",\"T_POW\",\"'['\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_FINALLY\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\",\"T_ELLIPSIS\",\"';'\",\"'{'\",\"'}'\",\"'('\",\"')'\",\"'`'\",\"']'\",\"'\\\"'\",\"'$'\",\"???\"],r.Parser.prototype.translate=[0,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,53,155,157,156,52,35,157,151,152,50,47,7,48,49,51,157,157,157,157,157,157,157,157,157,157,29,148,41,15,43,28,65,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,67,157,154,34,157,153,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,149,33,150,55,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,1,2,3,4,5,6,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,30,31,32,36,37,38,39,40,42,44,45,46,54,56,57,58,59,60,61,62,63,64,66,68,69,70,71,72,73,74,75,76,77,78,79,80,81,157,157,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,157,157,157,157,157,157,138,139,140,141,142,143,144,145,146,147],r.Parser.prototype.yyaction=[569,570,571,572,573,215,574,575,576,612,613,0,27,99,100,101,102,103,104,105,106,107,108,109,110,-32766,-32766,-32766,95,96,97,24,240,226,-267,-32766,-32766,-32766,-32766,-32766,-32766,530,344,114,98,-32766,286,-32766,-32766,-32766,-32766,-32766,577,870,872,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,224,-32766,714,578,579,580,581,582,583,584,-32766,264,644,840,841,842,839,838,837,585,586,587,588,589,590,591,592,593,594,595,615,616,617,618,619,607,608,609,610,611,596,597,598,599,600,601,602,638,639,640,641,642,643,603,604,605,606,636,627,625,626,622,623,116,614,620,621,628,629,631,630,632,633,42,43,381,44,45,624,635,634,-214,46,47,289,48,-32767,-32767,-32767,-32767,90,91,92,93,94,267,241,22,840,841,842,839,838,837,832,-32766,-32766,-32766,306,1e3,1e3,1037,120,966,436,-423,244,797,49,50,660,661,272,362,51,-32766,52,219,220,53,54,55,56,57,58,59,60,1016,22,238,61,351,945,-32766,-32766,-32766,967,968,646,705,1e3,28,-456,125,966,-32766,-32766,-32766,715,398,399,216,1e3,-32766,339,-32766,-32766,-32766,-32766,25,222,980,552,355,378,-32766,-423,-32766,-32766,-32766,121,65,1045,408,1047,1046,274,274,131,244,-423,394,395,358,519,945,537,-423,111,-426,398,399,130,972,973,974,975,969,970,243,128,-422,-421,1013,409,976,971,353,791,792,7,-162,63,124,255,701,256,274,382,-122,-122,-122,-4,715,383,646,1042,-421,704,274,-219,33,17,384,-122,385,-122,386,-122,387,-122,369,388,-122,-122,-122,34,35,389,352,520,36,390,353,702,62,112,818,287,288,391,392,-422,-421,-161,350,393,40,38,690,735,396,397,361,22,122,-422,-421,-32766,-32766,-32766,791,792,-422,-421,-425,1e3,-456,-421,-238,966,409,41,382,353,717,535,-122,-32766,383,-32766,-32766,-421,704,21,813,33,17,384,-421,385,-466,386,224,387,-467,273,388,367,945,-458,34,35,389,352,345,36,390,248,247,62,254,715,287,288,391,392,399,-32766,-32766,-32766,393,295,1e3,652,735,396,397,117,115,113,814,119,72,73,74,-162,764,65,240,541,370,518,274,118,270,92,93,94,242,717,535,-4,26,1e3,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,547,240,713,715,382,276,-32766,-32766,126,945,383,-161,938,98,704,225,659,33,17,384,346,385,274,386,728,387,221,120,388,505,506,540,34,35,389,715,-238,36,390,1017,223,62,494,18,287,288,127,297,376,6,98,798,393,274,660,661,490,491,-466,39,-466,514,-467,539,-467,16,458,-458,315,791,792,829,553,382,817,563,653,538,765,383,449,751,535,704,448,435,33,17,384,430,385,646,386,359,387,357,647,388,673,429,1040,34,35,389,715,382,36,390,941,492,62,383,503,287,288,704,434,440,33,17,384,393,385,-32766,386,445,387,495,509,388,10,529,542,34,35,389,715,515,36,390,499,500,62,214,-80,287,288,452,269,736,717,535,488,393,356,266,979,265,730,982,722,358,338,493,548,0,294,737,0,3,0,309,0,0,382,0,0,271,0,0,383,0,717,535,704,227,0,33,17,384,9,385,0,386,0,387,-382,0,388,0,0,325,34,35,389,715,382,36,390,321,341,62,383,340,287,288,704,22,320,33,17,384,393,385,442,386,337,387,562,1e3,388,32,31,966,34,35,389,823,657,36,390,656,821,62,703,711,287,288,561,822,825,717,535,695,393,747,749,693,759,758,752,767,945,824,706,700,712,699,698,658,0,263,262,559,558,382,556,554,551,398,399,383,550,717,535,704,546,545,33,17,384,543,385,536,386,71,387,933,932,388,30,65,731,34,35,389,274,724,36,390,830,734,62,663,662,287,288,-32766,-32766,-32766,733,732,934,393,665,664,756,555,691,1041,1001,994,1006,1011,1014,757,1043,-32766,654,-32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767,655,1044,717,535,-446,926,348,343,268,237,236,235,234,218,217,132,129,-426,-425,-424,123,20,23,70,69,29,37,64,68,66,67,-448,0,15,19,250,910,296,-217,467,484,909,472,528,913,11,964,955,-215,525,379,375,373,371,14,13,12,-214,0,-393,0,1005,1039,992,993,963,0,981],r.Parser.prototype.yycheck=[2,3,4,5,6,13,8,9,10,11,12,0,15,16,17,18,19,20,21,22,23,24,25,26,27,8,9,10,50,51,52,7,54,7,79,8,9,10,8,9,10,77,7,13,66,28,7,30,31,32,33,34,54,56,57,28,8,30,31,32,33,34,35,35,109,1,68,69,70,71,72,73,74,118,7,77,112,113,114,115,116,117,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,7,129,130,131,132,133,134,135,136,137,2,3,4,5,6,143,144,145,152,11,12,7,14,41,42,43,44,45,46,47,48,49,109,7,67,112,113,114,115,116,117,118,8,9,10,79,79,79,82,147,83,82,67,28,152,47,48,102,103,7,7,53,28,55,56,57,58,59,60,61,62,63,64,65,1,67,68,69,70,112,8,9,10,75,76,77,148,79,13,7,67,83,8,9,10,1,129,130,13,79,28,146,30,31,32,33,140,141,139,29,102,7,28,128,30,31,32,149,151,77,112,79,80,156,156,15,28,142,120,121,146,77,112,149,149,15,151,129,130,15,132,133,134,135,136,137,138,15,67,67,77,143,144,145,146,130,131,7,7,151,15,153,148,155,156,71,72,73,74,0,1,77,77,150,67,81,156,152,84,85,86,87,88,89,90,91,92,93,29,95,96,97,98,99,100,101,102,143,104,105,146,148,108,15,150,111,112,113,114,128,128,7,7,119,67,67,122,123,124,125,7,67,149,142,142,8,9,10,130,131,149,149,151,79,152,128,7,83,143,7,71,146,148,149,150,28,77,30,31,142,81,7,148,84,85,86,149,88,7,90,35,92,7,33,95,7,112,7,99,100,101,102,103,104,105,128,128,108,109,1,111,112,113,114,130,8,9,10,119,142,79,122,123,124,125,15,149,149,148,29,8,9,10,152,29,151,54,29,149,79,156,15,143,47,48,49,29,148,149,150,28,79,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,29,54,29,1,71,67,8,9,29,112,77,152,152,66,81,35,148,84,85,86,123,88,156,90,35,92,35,147,95,72,73,29,99,100,101,1,152,104,105,152,35,108,72,73,111,112,97,98,102,103,66,152,119,156,102,103,106,107,152,67,154,74,152,29,154,152,128,152,78,130,131,148,149,71,148,149,148,149,148,77,77,148,149,81,77,77,84,85,86,77,88,77,90,77,92,77,77,95,77,77,77,99,100,101,1,71,104,105,79,79,108,77,79,111,112,81,79,82,84,85,86,119,88,82,90,86,92,87,96,95,94,89,29,99,100,101,1,91,104,105,93,96,108,94,94,111,112,94,110,123,148,149,109,119,102,127,139,126,147,139,150,146,149,154,29,-1,142,123,-1,142,-1,146,-1,-1,71,-1,-1,126,-1,-1,77,-1,148,149,81,35,-1,84,85,86,142,88,-1,90,-1,92,142,-1,95,-1,-1,146,99,100,101,1,71,104,105,146,146,108,77,146,111,112,81,67,146,84,85,86,119,88,146,90,149,92,148,79,95,148,148,83,99,100,101,148,148,104,105,148,148,108,148,148,111,112,148,148,148,148,149,148,119,148,148,148,148,148,148,148,112,148,148,148,148,148,148,148,-1,149,149,149,149,71,149,149,149,129,130,77,149,148,149,81,149,149,84,85,86,149,88,149,90,149,92,150,150,95,151,151,150,99,100,101,156,150,104,105,150,150,108,150,150,111,112,8,9,10,150,150,150,119,150,150,150,150,150,150,150,150,150,150,150,150,150,28,150,30,31,32,33,34,35,36,37,38,39,40,150,150,148,149,151,153,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,-1,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,-1,153,-1,154,154,154,154,154,-1,155],r.Parser.prototype.yybase=[0,220,295,94,180,560,-2,-2,-2,-2,-36,473,574,606,574,505,404,675,675,675,28,351,462,462,462,461,396,476,451,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,401,64,201,568,704,713,708,702,714,520,706,705,211,650,651,450,652,653,654,655,709,480,703,712,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,48,30,469,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,160,160,160,343,210,208,198,17,233,27,780,780,780,780,780,108,108,108,108,621,621,93,280,280,280,280,280,280,280,280,280,280,280,632,641,642,643,392,392,151,151,151,151,368,-45,146,224,224,95,410,491,733,199,199,111,207,-22,-22,-22,81,506,92,92,233,233,273,233,423,423,423,221,221,221,221,221,110,221,221,221,617,512,168,516,647,397,503,656,274,381,377,538,535,337,523,337,421,441,428,525,337,337,285,401,394,378,567,474,339,564,140,179,409,399,384,594,561,711,330,710,358,149,378,378,378,370,593,548,355,-8,646,484,277,417,386,645,635,230,634,276,331,356,565,485,485,485,485,485,485,460,485,483,691,691,478,501,460,696,460,485,691,460,460,502,485,522,522,483,508,499,691,691,499,478,460,571,551,514,482,413,413,514,460,413,501,413,11,697,699,444,700,695,698,676,694,493,615,497,515,684,683,693,479,489,620,692,549,592,487,246,314,498,463,689,523,486,455,455,455,463,687,455,455,455,455,455,455,455,455,732,24,495,510,591,590,589,406,588,496,524,422,599,488,549,549,649,727,673,490,682,716,690,555,119,271,681,648,543,492,534,680,598,246,715,494,672,549,671,455,674,701,730,731,688,728,722,152,526,587,178,729,659,596,595,554,725,707,721,720,178,576,511,717,518,677,504,678,613,258,657,686,584,724,723,726,583,582,609,608,250,236,685,442,458,517,581,500,628,604,679,580,579,623,619,718,521,486,519,509,507,513,600,618,719,206,578,586,573,481,572,631,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,134,-2,-2,-2,0,0,0,0,-2,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,-3,418,418,-3,418,418,418,418,418,418,-22,-22,-22,-22,221,221,221,221,221,221,221,221,221,221,221,221,221,221,49,49,49,49,-22,-22,221,221,221,221,221,49,221,221,221,92,221,92,92,337,337,0,0,0,0,0,485,92,0,0,0,0,0,0,485,485,485,0,0,0,0,0,485,0,0,0,337,92,0,420,420,178,420,420,0,0,0,485,485,0,508,0,0,0,0,691,0,0,0,0,0,455,119,682,0,39,0,0,0,0,0,490,39,26,0,26,0,0,455,455,455,0,490,490,0,0,67,490,0,0,0,67,35,0,35,0,0,0,178],r.Parser.prototype.yydefault=[3,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,468,468,468,32767,32767,32767,32767,285,460,285,285,32767,419,419,419,419,419,419,419,460,32767,32767,32767,32767,32767,364,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,465,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,347,348,350,351,284,420,237,464,283,116,246,239,191,282,223,119,312,365,314,363,367,313,290,294,295,296,297,298,299,300,301,302,303,304,305,288,289,366,344,343,342,310,311,287,315,317,287,316,333,334,331,332,335,336,337,338,339,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,269,269,269,269,324,325,229,229,229,229,32767,270,32767,229,32767,32767,32767,32767,32767,32767,32767,413,341,319,320,318,32767,392,32767,394,307,309,387,291,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,389,421,421,32767,32767,32767,381,32767,159,210,212,397,32767,32767,32767,32767,32767,329,32767,32767,32767,32767,32767,32767,474,32767,32767,32767,32767,32767,421,32767,32767,32767,321,322,323,32767,32767,32767,421,421,32767,32767,421,32767,421,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,163,32767,32767,395,395,32767,32767,163,390,163,32767,32767,163,163,176,32767,174,174,32767,32767,178,32767,435,178,32767,163,196,196,373,165,231,231,373,163,231,32767,231,32767,32767,32767,82,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,383,32767,32767,32767,401,32767,414,433,381,32767,327,328,330,32767,423,352,353,354,355,356,357,358,360,32767,461,386,32767,32767,32767,32767,32767,32767,84,108,245,32767,473,84,384,32767,473,32767,32767,32767,32767,32767,32767,286,32767,32767,32767,84,32767,84,32767,32767,457,32767,32767,421,385,32767,326,398,439,32767,32767,422,32767,32767,218,84,32767,177,32767,32767,32767,32767,32767,32767,401,32767,32767,179,32767,32767,421,32767,32767,32767,32767,32767,281,32767,32767,32767,32767,32767,421,32767,32767,32767,32767,222,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,82,60,32767,263,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,121,121,3,3,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,248,154,248,204,248,248,207,196,196,255],r.Parser.prototype.yygoto=[163,163,135,135,135,146,148,179,164,161,145,161,161,161,162,162,162,162,162,162,162,145,157,158,159,160,176,174,177,410,411,299,412,415,416,417,418,419,420,421,422,857,136,137,138,139,140,141,142,143,144,147,173,175,178,195,198,199,201,202,204,205,206,207,208,209,210,211,212,213,232,233,251,252,253,316,317,318,462,180,181,182,183,184,185,186,187,188,189,190,191,192,193,149,194,150,165,166,167,196,168,151,152,153,169,154,197,133,170,155,171,172,156,521,200,257,246,464,432,687,649,278,481,482,527,200,437,437,437,766,5,746,650,557,437,426,775,770,428,431,444,465,466,468,483,279,651,336,450,453,437,560,485,487,508,511,763,516,517,777,524,762,526,532,773,534,480,480,965,965,965,965,965,965,965,965,965,965,965,965,413,413,413,413,413,413,413,413,413,413,413,413,413,413,942,502,478,496,512,456,298,437,437,451,471,437,437,674,437,229,456,230,231,463,828,533,681,438,513,826,461,475,460,414,414,414,414,414,414,414,414,414,414,414,414,414,414,301,674,674,443,454,1033,1033,1034,1034,425,531,425,708,750,800,457,372,1033,943,1034,1026,300,1018,497,8,313,904,796,944,996,785,789,1007,285,670,1036,329,307,310,804,668,544,332,935,940,366,807,678,477,377,754,844,0,667,667,675,675,675,677,0,666,323,498,328,312,312,258,259,283,459,261,322,284,326,486,280,281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,790,790,790,790,946,0,946,790,790,1004,790,1004,0,0,0,0,836,0,1015,1015,0,0,0,0,0,0,0,0,0,0,0,744,744,744,720,744,0,739,745,721,780,780,1023,0,0,1002,0,0,0,0,0,0,0,0,0,0,0,0,806,0,806,0,0,0,0,1008,1009],r.Parser.prototype.yygcheck=[23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,52,45,112,112,80,8,10,10,64,55,55,55,45,8,8,8,10,92,10,11,10,8,10,10,10,38,38,38,38,38,38,62,62,12,62,28,8,8,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,70,70,70,70,70,70,70,70,70,70,70,70,70,70,113,113,113,113,113,113,113,113,113,113,113,113,113,113,76,56,35,35,56,69,56,8,8,8,8,8,8,19,8,60,69,60,60,7,7,7,25,8,7,7,2,2,8,115,115,115,115,115,115,115,115,115,115,115,115,115,115,53,19,19,53,53,123,123,124,124,109,5,109,44,29,78,114,53,123,76,124,122,41,120,43,53,42,96,74,76,76,72,75,117,14,21,123,18,9,13,79,20,66,17,102,104,58,81,22,59,100,63,94,-1,19,19,19,19,19,19,-1,19,45,45,45,45,45,45,45,45,45,45,45,45,45,45,64,64,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,52,52,52,52,52,-1,52,52,52,80,52,80,-1,-1,-1,-1,92,-1,80,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,52,52,52,52,52,-1,52,52,52,69,69,69,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,80,-1,-1,-1,-1,80,80],r.Parser.prototype.yygbase=[0,0,-317,0,0,237,0,210,-136,4,118,130,144,-10,16,0,0,-59,10,-47,-9,7,-77,-20,0,209,0,0,-388,234,0,0,0,0,0,165,0,0,103,0,0,225,44,45,235,84,0,0,0,0,0,0,109,-115,0,-113,-179,0,-78,-81,-347,0,-122,-80,-249,0,-19,0,0,169,-48,0,26,0,22,24,-99,0,230,-13,114,-79,0,0,0,0,0,0,0,0,0,0,120,0,-90,0,23,0,0,0,-89,0,-67,0,-69,0,0,0,0,8,0,0,-140,-34,229,9,0,21,0,0,218,0,233,-3,-1,0],r.Parser.prototype.yygdefault=[-32768,380,565,2,566,637,645,504,400,433,748,688,689,303,342,401,302,330,324,676,669,671,679,134,333,682,1,684,439,716,291,692,292,507,694,446,696,697,427,304,305,447,311,479,707,203,308,709,290,710,719,335,293,510,489,469,501,402,363,476,228,455,473,753,277,761,549,769,772,403,404,470,784,368,794,788,960,319,799,805,991,808,811,349,331,327,815,816,4,820,522,523,835,239,843,856,347,923,925,441,374,936,360,334,939,995,354,405,364,952,260,282,245,406,423,249,407,365,998,314,1019,424,1027,1035,275,474],r.Parser.prototype.yylhs=[0,1,3,3,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,8,8,9,4,4,4,4,4,4,4,4,4,4,4,14,14,15,15,15,15,17,17,13,13,18,18,19,19,20,20,21,21,16,16,22,24,24,25,26,26,28,27,27,27,27,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,10,10,48,48,51,51,50,49,49,42,42,53,53,54,54,11,12,12,12,57,57,57,58,58,61,61,59,59,62,62,36,36,44,44,47,47,47,46,46,63,37,37,37,37,64,64,65,65,66,66,34,34,30,30,67,32,32,68,31,31,33,33,43,43,43,43,55,55,71,71,72,72,74,74,75,75,75,73,73,56,56,76,76,77,77,78,78,78,39,39,79,40,40,81,81,60,60,82,82,82,82,87,87,88,88,89,89,89,89,89,90,91,91,86,86,83,83,85,85,93,93,92,92,92,92,92,92,84,84,94,94,41,41,35,35,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,101,95,95,100,100,103,103,104,105,105,105,109,109,52,52,52,96,96,107,107,97,97,99,99,99,102,102,113,113,70,115,115,115,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,38,38,111,111,111,106,106,106,116,116,116,116,116,116,45,45,45,80,80,80,118,110,110,110,110,110,110,108,108,108,117,117,117,117,69,119,119,120,120,120,120,120,114,121,121,122,122,122,122,122,112,112,112,112,124,123,123,123,123,123,123,123,125,125,125],r.Parser.prototype.yylen=[1,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,3,5,4,3,4,2,3,1,1,7,8,6,7,3,1,3,1,3,1,1,3,1,2,1,2,3,1,3,3,1,3,2,0,1,1,1,1,1,3,7,10,5,7,9,5,3,3,3,3,3,3,1,2,5,7,9,5,6,3,3,2,2,1,1,1,0,2,1,3,8,0,4,1,3,0,1,0,1,10,7,6,5,1,2,2,0,2,0,2,0,2,1,3,1,4,1,4,1,1,4,1,3,3,3,4,4,5,0,2,4,3,1,1,1,4,0,2,5,0,2,6,0,2,0,3,1,2,1,1,1,0,1,3,4,6,1,2,1,1,1,0,1,0,2,2,3,1,3,1,2,2,3,1,1,3,1,1,3,2,0,3,4,9,3,1,3,0,2,4,5,4,4,4,3,1,1,1,3,1,1,0,1,1,2,1,1,1,1,1,1,1,3,1,3,3,1,0,1,1,3,3,3,4,1,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,5,4,3,4,4,2,2,4,2,2,2,2,2,2,2,2,2,2,2,1,3,2,1,2,4,2,10,11,7,3,2,0,4,1,3,2,2,2,4,1,1,1,2,3,1,1,1,1,0,3,0,1,1,0,1,1,3,3,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,3,3,0,1,1,3,1,1,3,1,1,4,4,4,1,4,1,1,3,1,4,2,3,1,4,4,3,3,3,1,3,1,1,3,1,1,4,3,1,1,1,3,3,0,1,3,1,3,1,4,2,0,2,2,1,2,1,1,4,3,3,3,6,3,1,1,1],t.PHP=r}),define(\"ace/mode/php_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"./php/php\").PHP,o=t.PhpWorker=function(e){i.call(this,e),this.setTimeout(500)};r.inherits(o,i),function(){this.setOptions=function(e){this.inlinePhp=e&&e.inline},this.onUpdate=function(){var e=this.doc.getValue(),t=[];this.inlinePhp&&(e=\"<?\"+e+\"?>\");var n=s.Lexer(e,{short_open_tag:1});try{new s.Parser(n)}catch(r){t.push({row:r.line-1,column:null,text:r.message.charAt(0).toUpperCase()+r.message.substring(1),type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min/worker-xml.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/xml/sax\",[],function(e,t,n){function d(){}function v(e,t,n,r,i){function s(e){if(e>65535){e-=65536;var t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function o(e){var t=e.slice(1,-1);return t in n?n[t]:t.charAt(0)===\"#\"?s(parseInt(t.substr(1).replace(\"x\",\"0x\"))):(i.error(\"entity not found:\"+e),e)}function u(t){var n=e.substring(v,t).replace(/&#?\\w+;/g,o);h&&a(v),r.characters(n,0,t-v),v=t}function a(t,n){while(t>=l&&(n=c.exec(e)))f=n.index,l=f+n[0].length,h.lineNumber++;h.columnNumber=t-f+1}var f=0,l=0,c=/.+(?:\\r\\n?|\\n)|.*$/g,h=r.locator,p=[{currentNSMap:t}],d={},v=0;for(;;){var E=e.indexOf(\"<\",v);if(E<0){if(!e.substr(v).match(/^\\s*$/)){var N=r.document,C=N.createTextNode(e.substr(v));N.appendChild(C),r.currentElement=C}return}E>v&&u(E);switch(e.charAt(E+1)){case\"/\":var k=e.indexOf(\">\",E+3),L=e.substring(E+2,k),A;if(!(p.length>1)){i.fatalError(\"end tag name not found for: \"+L);break}A=p.pop();var O=A.localNSMap;A.tagName!=L&&i.fatalError(\"end tag name: \"+L+\" does not match the current start tagName: \"+A.tagName),r.endElement(A.uri,A.localName,L);if(O)for(var M in O)r.endPrefixMapping(M);k++;break;case\"?\":h&&a(E),k=x(e,E,r);break;case\"!\":h&&a(E),k=S(e,E,r,i);break;default:try{h&&a(E);var _=new T,k=g(e,E,_,o,i),D=_.length;if(D&&h){var P=m(h,{});for(var E=0;E<D;E++){var H=_[E];a(H.offset),H.offset=m(h,{})}m(P,h)}!_.closed&&w(e,k,_.tagName,d)&&(_.closed=!0,n.nbsp||i.warning(\"unclosed xml attribute\")),y(_,r,p),_.uri===\"http://www.w3.org/1999/xhtml\"&&!_.closed?k=b(e,k,_.tagName,o,r):k++}catch(B){i.error(\"element parse error: \"+B),k=-1}}k<0?u(E+1):v=k}}function m(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function g(e,t,n,r,i){var s,d,v=++t,m=o;for(;;){var g=e.charAt(v);switch(g){case\"=\":if(m===u)s=e.slice(t,v),m=f;else{if(m!==a)throw new Error(\"attribute equal must after attrName\");m=f}break;case\"'\":case'\"':if(m===f){t=v+1,v=e.indexOf(g,t);if(!(v>0))throw new Error(\"attribute value no end '\"+g+\"' match\");d=e.slice(t,v).replace(/&#?\\w+;/g,r),n.add(s,d,t-1),m=c}else{if(m!=l)throw new Error('attribute value must after \"=\"');d=e.slice(t,v).replace(/&#?\\w+;/g,r),n.add(s,d,t),i.warning('attribute \"'+s+'\" missed start quot('+g+\")!!\"),t=v+1,m=c}break;case\"/\":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:m=p,n.closed=!0;case l:case u:case a:break;default:throw new Error(\"attribute invalid close char('/')\")}break;case\"\":i.error(\"unexpected end of input\");case\">\":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:break;case l:case u:d=e.slice(t,v),d.slice(-1)===\"/\"&&(n.closed=!0,d=d.slice(0,-1));case a:m===a&&(d=s),m==l?(i.warning('attribute \"'+d+'\" missed quot(\")!!'),n.add(s,d.replace(/&#?\\w+;/g,r),t)):(i.warning('attribute \"'+d+'\" missed value!! \"'+d+'\" instead!!'),n.add(d,d,t));break;case f:throw new Error(\"attribute value missed!!\")}return v;case\"\\u0080\":g=\" \";default:if(g<=\" \")switch(m){case o:n.setTagName(e.slice(t,v)),m=h;break;case u:s=e.slice(t,v),m=a;break;case l:var d=e.slice(t,v).replace(/&#?\\w+;/g,r);i.warning('attribute \"'+d+'\" missed quot(\")!!'),n.add(s,d,t);case c:m=h}else switch(m){case a:i.warning('attribute \"'+s+'\" missed value!! \"'+s+'\" instead!!'),n.add(s,s,t),t=v,m=u;break;case c:i.warning('attribute space is required\"'+s+'\"!!');case h:m=u,t=v;break;case f:m=l,t=v;break;case p:throw new Error(\"elements closed character '/' and '>' must be connected to\")}}v++}}function y(e,t,n){var r=e.tagName,i=null,s=n[n.length-1].currentNSMap,o=e.length;while(o--){var u=e[o],a=u.qName,f=u.value,l=a.indexOf(\":\");if(l>0)var c=u.prefix=a.slice(0,l),h=a.slice(l+1),p=c===\"xmlns\"&&h;else h=a,c=null,p=a===\"xmlns\"&&\"\";u.localName=h,p!==!1&&(i==null&&(i={},E(s,s={})),s[p]=i[p]=f,u.uri=\"http://www.w3.org/2000/xmlns/\",t.startPrefixMapping(p,f))}var o=e.length;while(o--){u=e[o];var c=u.prefix;c&&(c===\"xml\"&&(u.uri=\"http://www.w3.org/XML/1998/namespace\"),c!==\"xmlns\"&&(u.uri=s[c]))}var l=r.indexOf(\":\");l>0?(c=e.prefix=r.slice(0,l),h=e.localName=r.slice(l+1)):(c=null,h=e.localName=r);var d=e.uri=s[c||\"\"];t.startElement(d,h,r,e);if(e.closed){t.endElement(d,h,r);if(i)for(c in i)t.endPrefixMapping(c)}else e.currentNSMap=s,e.localNSMap=i,n.push(e)}function b(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var s=e.indexOf(\"</\"+n+\">\",t),o=e.substring(t+1,s);if(/[&<]/.test(o))return/^script$/i.test(n)?(i.characters(o,0,o.length),s):(o=o.replace(/&#?\\w+;/g,r),i.characters(o,0,o.length),s)}return t+1}function w(e,t,n,r){var i=r[n];return i==null&&(i=r[n]=e.lastIndexOf(\"</\"+n+\">\")),i<t}function E(e,t){for(var n in e)t[n]=e[n]}function S(e,t,n,r){var i=e.charAt(t+2);switch(i){case\"-\":if(e.charAt(t+3)===\"-\"){var s=e.indexOf(\"-->\",t+4);return s>t?(n.comment(e,t+4,s-t-4),s+3):(r.error(\"Unclosed comment\"),-1)}return-1;default:if(e.substr(t+3,6)==\"CDATA[\"){var s=e.indexOf(\"]]>\",t+9);return n.startCDATA(),n.characters(e,t+9,s-t-9),n.endCDATA(),s+3}var o=C(e,t),u=o.length;if(u>1&&/!doctype/i.test(o[0][0])){var a=o[1][0],f=u>3&&/^public$/i.test(o[2][0])&&o[3][0],l=u>4&&o[4][0],c=o[u-1];return n.startDTD(a,f&&f.replace(/^(['\"])(.*?)\\1$/,\"$2\"),l&&l.replace(/^(['\"])(.*?)\\1$/,\"$2\")),n.endDTD(),c.index+c[0].length}}return-1}function x(e,t,n){var r=e.indexOf(\"?>\",t);if(r){var i=e.substring(t,r).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);if(i){var s=i[0].length;return n.processingInstruction(i[1],i[2]),r+2}return-1}return-1}function T(e){}function N(e,t){return e.__proto__=t,e}function C(e,t){var n,r=[],i=/'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;i.lastIndex=t,i.exec(e);while(n=i.exec(e)){r.push(n);if(n[1])return r}}var r=/[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/,i=new RegExp(\"[\\\\-\\\\.0-9\"+r.source.slice(1,-1)+\"\\u00b7\\u0300-\\u036f\\\\ux203F-\\u2040]\"),s=new RegExp(\"^\"+r.source+i.source+\"*(?::\"+r.source+i.source+\"*)?$\"),o=0,u=1,a=2,f=3,l=4,c=5,h=6,p=7;return d.prototype={parse:function(e,t,n){var r=this.domBuilder;r.startDocument(),E(t,t={}),v(e,t,n,r,this.errorHandler),r.endDocument()}},T.prototype={setTagName:function(e){if(!s.test(e))throw new Error(\"invalid tagName:\"+e);this.tagName=e},add:function(e,t,n){if(!s.test(e))throw new Error(\"invalid attribute:\"+e);this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getOffset:function(e){return this[e].offset},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},N({},N.prototype)instanceof N||(N=function(e,t){function n(){}n.prototype=t,n=new n;for(t in e)n[t]=e[t];return n}),d}),define(\"ace/mode/xml/dom\",[],function(e,t,n){function r(e,t){for(var n in e)t[n]=e[n]}function i(e,t){var n=function(){},i=e.prototype;if(Object.create){var s=Object.create(t.prototype);i.__proto__=s}i instanceof t||(n.prototype=t.prototype,n=new n,r(i,n),e.prototype=i=n),i.constructor!=e&&(typeof e!=\"function\"&&console.error(\"unknown Class:\"+e),i.constructor=e)}function B(e,t){if(t instanceof Error)var n=t;else n=this,Error.call(this,w[e]),this.message=w[e],Error.captureStackTrace&&Error.captureStackTrace(this,B);return n.code=e,t&&(this.message=this.message+\": \"+t),n}function j(){}function F(e,t){this._node=e,this._refresh=t,I(this)}function I(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!=t){var n=e._refresh(e._node);gt(e,\"length\",n.length),r(n,e),e._inc=t}}function q(){}function R(e,t){var n=e.length;while(n--)if(e[n]===t)return n}function U(e,t,n,r){r?t[R(t,r)]=n:t[t.length++]=n;if(e){n.ownerElement=e;var i=e.ownerDocument;i&&(r&&Q(i,e,r),K(i,e,n))}}function z(e,t,n){var r=R(t,n);if(!(r>=0))throw new B(L,new Error);var i=t.length-1;while(r<i)t[r]=t[++r];t.length=i;if(e){var s=e.ownerDocument;s&&(Q(s,e,n),n.ownerElement=null)}}function W(e){this._features={};if(e)for(var t in e)this._features=e[t]}function X(){}function V(e){return e==\"<\"&&\"&lt;\"||e==\">\"&&\"&gt;\"||e==\"&\"&&\"&amp;\"||e=='\"'&&\"&quot;\"||\"&#\"+e.charCodeAt()+\";\"}function $(e,t){if(t(e))return!0;if(e=e.firstChild)do if($(e,t))return!0;while(e=e.nextSibling)}function J(){}function K(e,t,n){e&&e._inc++;var r=n.namespaceURI;r==\"http://www.w3.org/2000/xmlns/\"&&(t._nsMap[n.prefix?n.localName:\"\"]=n.value)}function Q(e,t,n,r){e&&e._inc++;var i=n.namespaceURI;i==\"http://www.w3.org/2000/xmlns/\"&&delete t._nsMap[n.prefix?n.localName:\"\"]}function G(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{var i=t.firstChild,s=0;while(i)r[s++]=i,i=i.nextSibling;r.length=s}}}function Y(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,G(e.ownerDocument,e),t}function Z(e,t,n){var r=t.parentNode;r&&r.removeChild(t);if(t.nodeType===g){var i=t.firstChild;if(i==null)return t;var s=t.lastChild}else i=s=t;var o=n?n.previousSibling:e.lastChild;i.previousSibling=o,s.nextSibling=n,o?o.nextSibling=i:e.firstChild=i,n==null?e.lastChild=s:n.previousSibling=s;do i.parentNode=e;while(i!==s&&(i=i.nextSibling));return G(e.ownerDocument||e,e),t.nodeType==g&&(t.firstChild=t.lastChild=null),t}function et(e,t){var n=t.parentNode;if(n){var r=e.lastChild;n.removeChild(t);var r=e.lastChild}var r=e.lastChild;return t.parentNode=e,t.previousSibling=r,t.nextSibling=null,r?r.nextSibling=t:e.firstChild=t,e.lastChild=t,G(e.ownerDocument,e,t),t}function tt(){this._nsMap={}}function nt(){}function rt(){}function it(){}function st(){}function ot(){}function ut(){}function at(){}function ft(){}function lt(){}function ct(){}function ht(){}function pt(){}function dt(e,t){switch(e.nodeType){case u:var n=e.attributes,r=n.length,i=e.firstChild,o=e.tagName,h=s===e.namespaceURI;t.push(\"<\",o);for(var y=0;y<r;y++)dt(n.item(y),t);if(i||h&&!/^(?:meta|link|img|br|hr|input|button)$/i.test(o)){t.push(\">\");if(h&&/^script$/i.test(o))i&&t.push(i.data);else while(i)dt(i,t),i=i.nextSibling;t.push(\"</\",o,\">\")}else t.push(\"/>\");return;case v:case g:var i=e.firstChild;while(i)dt(i,t),i=i.nextSibling;return;case a:return t.push(\" \",e.name,'=\"',e.value.replace(/[<&\"]/g,V),'\"');case f:return t.push(e.data.replace(/[<&]/g,V));case l:return t.push(\"<![CDATA[\",e.data,\"]]>\");case d:return t.push(\"<!--\",e.data,\"-->\");case m:var b=e.publicId,w=e.systemId;t.push(\"<!DOCTYPE \",e.name);if(b)t.push(' PUBLIC \"',b),w&&w!=\".\"&&t.push('\" \"',w),t.push('\">');else if(w&&w!=\".\")t.push(' SYSTEM \"',w,'\">');else{var E=e.internalSubset;E&&t.push(\" [\",E,\"]\"),t.push(\">\")}return;case p:return t.push(\"<?\",e.target,\" \",e.data,\"?>\");case c:return t.push(\"&\",e.nodeName,\";\");default:t.push(\"??\",e.nodeName)}}function vt(e,t,n){var r;switch(t.nodeType){case u:r=t.cloneNode(!1),r.ownerDocument=e;case g:break;case a:n=!0}r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null;if(n){var i=t.firstChild;while(i)r.appendChild(vt(e,i,n)),i=i.nextSibling}return r}function mt(e,t,n){var r=new t.constructor;for(var i in t){var s=t[i];typeof s!=\"object\"&&s!=r[i]&&(r[i]=s)}t.childNodes&&(r.childNodes=new j),r.ownerDocument=e;switch(r.nodeType){case u:var o=t.attributes,f=r.attributes=new q,l=o.length;f._ownerElement=r;for(var c=0;c<l;c++)r.setAttributeNode(mt(e,o.item(c),!0));break;case a:n=!0}if(n){var h=t.firstChild;while(h)r.appendChild(mt(e,h,n)),h=h.nextSibling}return r}function gt(e,t,n){e[t]=n}function yt(e){switch(e.nodeType){case 1:case 11:var t=[];e=e.firstChild;while(e)e.nodeType!==7&&e.nodeType!==8&&t.push(yt(e)),e=e.nextSibling;return t.join(\"\");default:return e.nodeValue}}var s=\"http://www.w3.org/1999/xhtml\",o={},u=o.ELEMENT_NODE=1,a=o.ATTRIBUTE_NODE=2,f=o.TEXT_NODE=3,l=o.CDATA_SECTION_NODE=4,c=o.ENTITY_REFERENCE_NODE=5,h=o.ENTITY_NODE=6,p=o.PROCESSING_INSTRUCTION_NODE=7,d=o.COMMENT_NODE=8,v=o.DOCUMENT_NODE=9,m=o.DOCUMENT_TYPE_NODE=10,g=o.DOCUMENT_FRAGMENT_NODE=11,y=o.NOTATION_NODE=12,b={},w={},E=b.INDEX_SIZE_ERR=(w[1]=\"Index size error\",1),S=b.DOMSTRING_SIZE_ERR=(w[2]=\"DOMString size error\",2),x=b.HIERARCHY_REQUEST_ERR=(w[3]=\"Hierarchy request error\",3),T=b.WRONG_DOCUMENT_ERR=(w[4]=\"Wrong document\",4),N=b.INVALID_CHARACTER_ERR=(w[5]=\"Invalid character\",5),C=b.NO_DATA_ALLOWED_ERR=(w[6]=\"No data allowed\",6),k=b.NO_MODIFICATION_ALLOWED_ERR=(w[7]=\"No modification allowed\",7),L=b.NOT_FOUND_ERR=(w[8]=\"Not found\",8),A=b.NOT_SUPPORTED_ERR=(w[9]=\"Not supported\",9),O=b.INUSE_ATTRIBUTE_ERR=(w[10]=\"Attribute in use\",10),M=b.INVALID_STATE_ERR=(w[11]=\"Invalid state\",11),_=b.SYNTAX_ERR=(w[12]=\"Syntax error\",12),D=b.INVALID_MODIFICATION_ERR=(w[13]=\"Invalid modification\",13),P=b.NAMESPACE_ERR=(w[14]=\"Invalid namespace\",14),H=b.INVALID_ACCESS_ERR=(w[15]=\"Invalid access\",15);B.prototype=Error.prototype,r(b,B),j.prototype={length:0,item:function(e){return this[e]||null}},F.prototype.item=function(e){return I(this),this[e]},i(F,j),q.prototype={length:0,item:j.prototype.item,getNamedItem:function(e){var t=this.length;while(t--){var n=this[t];if(n.nodeName==e)return n}},setNamedItem:function(e){var t=e.ownerElement;if(t&&t!=this._ownerElement)throw new B(O);var n=this.getNamedItem(e.nodeName);return U(this._ownerElement,this,e,n),n},setNamedItemNS:function(e){var t=e.ownerElement,n;if(t&&t!=this._ownerElement)throw new B(O);return n=this.getNamedItemNS(e.namespaceURI,e.localName),U(this._ownerElement,this,e,n),n},removeNamedItem:function(e){var t=this.getNamedItem(e);return z(this._ownerElement,this,t),t},removeNamedItemNS:function(e,t){var n=this.getNamedItemNS(e,t);return z(this._ownerElement,this,n),n},getNamedItemNS:function(e,t){var n=this.length;while(n--){var r=this[n];if(r.localName==t&&r.namespaceURI==e)return r}return null}},W.prototype={hasFeature:function(e,t){var n=this._features[e.toLowerCase()];return n&&(!t||t in n)?!0:!1},createDocument:function(e,t,n){var r=new J;r.implementation=this,r.childNodes=new j,r.doctype=n,n&&r.appendChild(n);if(t){var i=r.createElementNS(e,t);r.appendChild(i)}return r},createDocumentType:function(e,t,n){var r=new ut;return r.name=e,r.nodeName=e,r.publicId=t,r.systemId=n,r}},X.prototype={firstChild:null,lastChild:null,previousSibling:null,nextSibling:null,attributes:null,parentNode:null,childNodes:null,ownerDocument:null,nodeValue:null,namespaceURI:null,prefix:null,localName:null,insertBefore:function(e,t){return Z(this,e,t)},replaceChild:function(e,t){this.insertBefore(e,t),t&&this.removeChild(t)},removeChild:function(e){return Y(this,e)},appendChild:function(e){return this.insertBefore(e,null)},hasChildNodes:function(){return this.firstChild!=null},cloneNode:function(e){return mt(this.ownerDocument||this,this,e)},normalize:function(){var e=this.firstChild;while(e){var t=e.nextSibling;t&&t.nodeType==f&&e.nodeType==f?(this.removeChild(t),e.appendData(t.data)):(e.normalize(),e=t)}},isSupported:function(e,t){return this.ownerDocument.implementation.hasFeature(e,t)},hasAttributes:function(){return this.attributes.length>0},lookupPrefix:function(e){var t=this;while(t){var n=t._nsMap;if(n)for(var r in n)if(n[r]==e)return r;t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){var t=this;while(t){var n=t._nsMap;if(n&&e in n)return n[e];t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){var t=this.lookupPrefix(e);return t==null}},r(o,X),r(o,X.prototype),J.prototype={nodeName:\"#document\",nodeType:v,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==g){var n=e.firstChild;while(n){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return this.documentElement==null&&e.nodeType==1&&(this.documentElement=e),Z(this,e,t),e.ownerDocument=this,e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),Y(this,e)},importNode:function(e,t){return vt(this,e,t)},getElementById:function(e){var t=null;return $(this.documentElement,function(n){if(n.nodeType==1&&n.getAttribute(\"id\")==e)return t=n,!0}),t},createElement:function(e){var t=new tt;t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.childNodes=new j;var n=t.attributes=new q;return n._ownerElement=t,t},createDocumentFragment:function(){var e=new ct;return e.ownerDocument=this,e.childNodes=new j,e},createTextNode:function(e){var t=new it;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new st;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ot;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new ht;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new nt;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new lt;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new tt,r=t.split(\":\"),i=n.attributes=new q;return n.childNodes=new j,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,i._ownerElement=n,n},createAttributeNS:function(e,t){var n=new nt,r=t.split(\":\");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},i(J,X),tt.prototype={nodeType:u,hasAttribute:function(e){return this.getAttributeNode(e)!=null},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||\"\"},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=\"\"+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===g?this.insertBefore(e,null):et(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return this.getAttributeNodeNS(e,t)!=null},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||\"\"},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=\"\"+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new F(this,function(t){var n=[];return $(t,function(r){r!==t&&r.nodeType==u&&(e===\"*\"||r.tagName==e)&&n.push(r)}),n})},getElementsByTagNameNS:function(e,t){return new F(this,function(n){var r=[];return $(n,function(i){i!==n&&i.nodeType===u&&(e===\"*\"||i.namespaceURI===e)&&(t===\"*\"||i.localName==t)&&r.push(i)}),r})}},J.prototype.getElementsByTagName=tt.prototype.getElementsByTagName,J.prototype.getElementsByTagNameNS=tt.prototype.getElementsByTagNameNS,i(tt,X),nt.prototype.nodeType=a,i(nt,X),rt.prototype={data:\"\",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(w[3])},deleteData:function(e,t){this.replaceData(e,t,\"\")},replaceData:function(e,t,n){var r=this.data.substring(0,e),i=this.data.substring(e+t);n=r+n+i,this.nodeValue=this.data=n,this.length=n.length}},i(rt,X),it.prototype={nodeName:\"#text\",nodeType:f,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},i(it,rt),st.prototype={nodeName:\"#comment\",nodeType:d},i(st,rt),ot.prototype={nodeName:\"#cdata-section\",nodeType:l},i(ot,rt),ut.prototype.nodeType=m,i(ut,X),at.prototype.nodeType=y,i(at,X),ft.prototype.nodeType=h,i(ft,X),lt.prototype.nodeType=c,i(lt,X),ct.prototype.nodeName=\"#document-fragment\",ct.prototype.nodeType=g,i(ct,X),ht.prototype.nodeType=p,i(ht,X),pt.prototype.serializeToString=function(e){var t=[];return dt(e,t),t.join(\"\")},X.prototype.toString=function(){return pt.prototype.serializeToString(this)};try{Object.defineProperty&&(Object.defineProperty(F.prototype,\"length\",{get:function(){return I(this),this.$$length}}),Object.defineProperty(X.prototype,\"textContent\",{get:function(){return yt(this)},set:function(e){switch(this.nodeType){case 1:case 11:while(this.firstChild)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=value,this.nodeValue=e}}}),gt=function(e,t,n){e[\"$$\"+t]=n})}catch(bt){}return W}),define(\"ace/mode/xml/dom-parser\",[],function(e,t,n){\"use strict\";function s(e){this.options=e||{locator:{}}}function o(e,t,n){function s(t){var s=e[t];if(!s)if(i)s=e.length==2?function(n){e(t,n)}:e;else{var o=arguments.length;while(--o)if(s=e[arguments[o]])break}r[t]=s&&function(e){s(e+f(n),e,n)}||function(){}}if(!e){if(t instanceof u)return t;e=t}var r={},i=e instanceof Function;return n=n||{},s(\"warning\",\"warn\"),s(\"error\",\"warn\",\"warning\"),s(\"fatalError\",\"warn\",\"warning\",\"error\"),r}function u(){this.cdata=!1}function a(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function f(e){if(e)return\"\\n@\"+(e.systemId||\"\")+\"#[line:\"+e.lineNumber+\",col:\"+e.columnNumber+\"]\"}function l(e,t,n){return typeof e==\"string\"?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+\"\":e}function c(e,t){e.currentElement?e.currentElement.appendChild(t):e.document.appendChild(t)}var r=e(\"./sax\"),i=e(\"./dom\");return s.prototype.parseFromString=function(e,t){var n=this.options,i=new r,s=n.domBuilder||new u,a=n.errorHandler,f=n.locator,l=n.xmlns||{},c={lt:\"<\",gt:\">\",amp:\"&\",quot:'\"',apos:\"'\"};return f&&s.setDocumentLocator(f),i.errorHandler=o(a,s,f),i.domBuilder=n.domBuilder||s,/\\/x?html?$/.test(t)&&(c.nbsp=\"\\u00a0\",c.copy=\"\\u00a9\",l[\"\"]=\"http://www.w3.org/1999/xhtml\"),e?i.parse(e,l,c):i.errorHandler.error(\"invalid document source\"),s.document},u.prototype={startDocument:function(){this.document=(new i).createDocument(null,null,null),this.locator&&(this.document.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.document,s=i.createElementNS(e,n||t),o=r.length;c(this,s),this.currentElement=s,this.locator&&a(this.locator,s);for(var u=0;u<o;u++){var e=r.getURI(u),f=r.getValue(u),n=r.getQName(u),l=i.createAttributeNS(e,n);l.getOffset&&a(l.getOffset(1),l),l.value=l.nodeValue=f,s.setAttributeNode(l)}},endElement:function(e,t,n){var r=this.currentElement,i=r.tagName;this.currentElement=r.parentNode},startPrefixMapping:function(e,t){},endPrefixMapping:function(e){},processingInstruction:function(e,t){var n=this.document.createProcessingInstruction(e,t);this.locator&&a(this.locator,n),c(this,n)},ignorableWhitespace:function(e,t,n){},characters:function(e,t,n){e=l.apply(this,arguments);if(this.currentElement&&e){if(this.cdata){var r=this.document.createCDATASection(e);this.currentElement.appendChild(r)}else{var r=this.document.createTextNode(e);this.currentElement.appendChild(r)}this.locator&&a(this.locator,r)}},skippedEntity:function(e){},endDocument:function(){this.document.normalize()},setDocumentLocator:function(e){if(this.locator=e)e.lineNumber=0},comment:function(e,t,n){e=l.apply(this,arguments);var r=this.document.createComment(e);this.locator&&a(this.locator,r),c(this,r)},startCDATA:function(){this.cdata=!0},endCDATA:function(){this.cdata=!1},startDTD:function(e,t,n){var r=this.document.implementation;if(r&&r.createDocumentType){var i=r.createDocumentType(e,t,n);this.locator&&a(this.locator,i),c(this,i)}},warning:function(e){console.warn(e,f(this.locator))},error:function(e){console.error(e,f(this.locator))},fatalError:function(e){throw console.error(e,f(this.locator)),e}},\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(e){u.prototype[e]=function(){return null}}),{DOMParser:s}}),define(\"ace/mode/xml_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./xml/dom-parser\").DOMParser,u=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.context=null};r.inherits(u,s),function(){this.setOptions=function(e){this.context=e.context},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return;var t=new o,n=[];t.options.errorHandler={fatalError:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"error\"})},error:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"error\"})},warning:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"warning\"})}},t.parseFromString(e),this.sender.emit(\"error\",n)}}.call(u.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min/worker-xquery.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/xquery/xqlint\",[],function(e,t,n){n.exports=function r(t,n,i){function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(s)return s(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return o(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var s=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)o(i[u]);return o(i[0])}({\"/node_modules/xqlint/lib/compiler/errors.js\":[function(e,t,n){\"use strict\";var r=function(e,t,n,r,i){if(!t)throw new Error(i+\" code is missing.\");if(!n)throw new Error(i+\" message is missing.\");if(!r)throw new Error(i+\" position is missing.\");e.getCode=function(){return t},e.getMessage=function(){return n},e.getPos=function(){return r}},i={},s={};i.prototype=new Error,s.prototype=new Error,n.StaticError=i.prototype.constructor=function(e,t,n){r(this,e,t,n,\"Error\")},n.StaticWarning=s.prototype.constructor=function(e,t,n){r(this,e,t,n,\"Warning\")}},{}],\"/node_modules/xqlint/lib/compiler/handlers.js\":[function(e,t,n){\"use strict\";var r=e(\"../tree_ops\").TreeOps,i=e(\"./errors\"),s=i.StaticWarning;n.ModuleDecl=function(e,t,n){var i=\"\";return{NCName:function(e){i=r.flatten(e)},URILiteral:function(s){s=r.flatten(s),s=s.substring(1,s.length-1),e.apply(function(){t.moduleNamespace=s,t.addNamespace(s,i,n.pos,\"moduleDecl\")})}}},n.ModuleImport=function(e,t,n){var i=\"\",s;return{NCName:function(e){i=r.flatten(e)},URILiteral:function(o){if(s!==undefined)return;o=r.flatten(o),o=o.substring(1,o.length-1),s=o,e.apply(function(){t.importModule(o,i,n.pos)})}}},n.SchemaImport=function(e,t,n){var i=\"\",s;return{SchemaPrefix:function(t){var n=function(){this.NCName=function(e){i=r.flatten(e)}};e.visitChildren(t,new n)},URILiteral:function(o){if(s!==undefined)return;o=r.flatten(o),o=o.substring(1,o.length-1),s=o,e.apply(function(){t.addNamespace(o,i,n.pos,\"schema\")})}}},n.DefaultNamespaceDecl=function(e,t,n){var i=!1,o=\"\";return{TOKEN:function(e){i=i?!0:e.value===\"function\"},URILiteral:function(u){o=r.flatten(u),o=o.substring(1,o.length-1),i?t.defaultFunctionNamespace=o:(e.apply(function(){throw new s(\"W06\",\"Avoid default element namespace declarations.\",n.pos)}),t.defaultElementNamespace=o)}}},n.NamespaceDecl=function(e,t,n){var i=\"\";return{NCName:function(e){i=r.flatten(e)},URILiteral:function(s){s=r.flatten(s),s=s.substring(1,s.length-1),e.apply(function(){t.addNamespace(s,i,n.pos,\"declare\")})}}},n.VarHandler=function(e,t,n){var i=function(i){var s=r.flatten(i);e.apply(function(){var e=t.resolveQName(s,i.pos);t.addVariable(e,n.name,i.pos)})};return{ExprSingle:function(){return!0},VarValue:function(){return!0},VarDefaultValue:function(){return!0},VarName:i,EQName:i}},n.VarRefHandler=function(e,t,n){return{VarName:function(i){var s=r.flatten(i);e.apply(function(){var e=t.resolveQName(s,n.pos);e.uri!==\"\"&&(t.root.namespaces[e.uri].used=!0),t.addVarRef(e,i.pos)})}}}},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\"}],\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\":[function(e,t,n){\"use strict\";n.getSchemaBuiltinTypes=function(){var e=\"http://www.w3.org/2001/XMLSchema\",t={};return t[e]={variables:{},functions:{}},t[e].functions[e+\"#string#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"string\",arity:1,eqname:{uri:e,name:\"string\"}},t[e].functions[e+\"#boolean#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"boolean\",arity:1,eqname:{uri:e,name:\"boolean\"}},t[e].functions[e+\"#decimal#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"decimal\",arity:1,eqname:{uri:e,name:\"decimal\"}},t[e].functions[e+\"#float#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"float\",arity:1,eqname:{uri:e,name:\"float\"}},t[e].functions[e+\"#double#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"double\",arity:1,eqname:{uri:e,name:\"double\"}},t[e].functions[e+\"#duration#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"duration\",arity:1,eqname:{uri:e,name:\"duration\"}},t[e].functions[e+\"#dateTime#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"dateTime\",arity:1,eqname:{uri:e,name:\"dateTime\"}},t[e].functions[e+\"#time#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"time\",arity:1,eqname:{uri:e,name:\"time\"}},t[e].functions[e+\"#date#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"date\",arity:1,eqname:{uri:e,name:\"date\"}},t[e].functions[e+\"#gYearMonth#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gYearMonth\",arity:1,eqname:{uri:e,name:\"gYearMonth\"}},t[e].functions[e+\"#gYear#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gYear\",arity:1,eqname:{uri:e,name:\"gYear\"}},t[e].functions[e+\"#gMonthDay#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gMonthDay\",arity:1,eqname:{uri:e,name:\"gMonthDay\"}},t[e].functions[e+\"#gDay#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gDay\",arity:1,eqname:{uri:e,name:\"gDay\"}},t[e].functions[e+\"#gMonth#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gMonth\",arity:1,eqname:{uri:e,name:\"gMonth\"}},t[e].functions[e+\"#hexBinary#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"hexBinary\",arity:1,eqname:{uri:e,name:\"hexBinary\"}},t[e].functions[e+\"#base64Binary#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"base64Binary\",arity:1,eqname:{uri:e,name:\"base64Binary\"}},t[e].functions[e+\"#anyURI#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"anyURI\",arity:1,eqname:{uri:e,name:\"anyURI\"}},t[e].functions[e+\"#QName#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"QName\",arity:1,eqname:{uri:e,name:\"QName\"}},t[e].functions[e+\"#normalizedString#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"normalizedString\",arity:1,eqname:{uri:e,name:\"normalizedString\"}},t[e].functions[e+\"#token#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"token\",arity:1,eqname:{uri:e,name:\"token\"}},t[e].functions[e+\"#language#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"language\",arity:1,eqname:{uri:e,name:\"language\"}},t[e].functions[e+\"#NMTOKEN#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"NMTOKEN\",arity:1,eqname:{uri:e,name:\"NMTOKEN\"}},t[e].functions[e+\"#Name#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"Name\",arity:1,eqname:{uri:e,name:\"Name\"}},t[e].functions[e+\"#NCName#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"NCName\",arity:1,eqname:{uri:e,name:\"NCName\"}},t[e].functions[e+\"#ID#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"ID\",arity:1,eqname:{uri:e,name:\"ID\"}},t[e].functions[e+\"#IDREF#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"IDREF\",arity:1,eqname:{uri:e,name:\"IDREF\"}},t[e].functions[e+\"#ENTITY#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"ENTITY\",arity:1,eqname:{uri:e,name:\"ENTITY\"}},t[e].functions[e+\"#integer#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"integer\",arity:1,eqname:{uri:e,name:\"integer\"}},t[e].functions[e+\"#nonPositiveInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"nonPositiveInteger\",arity:1,eqname:{uri:e,name:\"nonPositiveInteger\"}},t[e].functions[e+\"#negativeInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"negativeInteger\",arity:1,eqname:{uri:e,name:\"negativeInteger\"}},t[e].functions[e+\"#long#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"long\",arity:1,eqname:{uri:e,name:\"long\"}},t[e].functions[e+\"#int#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"int\",arity:1,eqname:{uri:e,name:\"int\"}},t[e].functions[e+\"#short#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"short\",arity:1,eqname:{uri:e,name:\"short\"}},t[e].functions[e+\"#byte#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"byte\",arity:1,eqname:{uri:e,name:\"byte\"}},t[e].functions[e+\"#nonNegativeInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"nonNegativeInteger\",arity:1,eqname:{uri:e,name:\"nonNegativeInteger\"}},t[e].functions[e+\"#unsignedLong#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedLong\",arity:1,eqname:{uri:e,name:\"unsignedLong\"}},t[e].functions[e+\"#unsignedInt#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedInt\",arity:1,eqname:{uri:e,name:\"unsignedInt\"}},t[e].functions[e+\"#unsignedShort#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedShort\",arity:1,eqname:{uri:e,name:\"unsignedShort\"}},t[e].functions[e+\"#unsignedByte#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedByte\",arity:1,eqname:{uri:e,name:\"unsignedByte\"}},t[e].functions[e+\"#positiveInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"positiveInteger\",arity:1,eqname:{uri:e,name:\"positiveInteger\"}},t[e].functions[e+\"#yearMonthDuration#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"yearMonthDuration\",arity:1,eqname:{uri:e,name:\"yearMonthDuration\"}},t[e].functions[e+\"#dayTimeDuration#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"dayTimeDuration\",arity:1,eqname:{uri:e,name:\"dayTimeDuration\"}},t[e].functions[e+\"#untypedAtomic#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"untypedAtomic\",arity:1,eqname:{uri:e,name:\"untypedAtomic\"}},t}},{}],\"/node_modules/xqlint/lib/compiler/static_context.js\":[function(e,t,n){n.StaticContext=function(t,n){\"use strict\";var r=e(\"../tree_ops\").TreeOps,i=e(\"./errors\"),s=i.StaticError,o=i.StaticWarning,u=e(\"./schema_built-in_types\").getSchemaBuiltinTypes,a={sl:0,sc:0,el:0,ec:0},f={},l=function(e){return e.uri+\"#\"+e.name},c=function(e,t){return l(e)+\"#\"+t};t||(f[\"http://jsoniq.org/functions\"]={prefixes:[\"jn\"],pos:a,type:\"module\",override:!0},f[\"http://www.28msec.com/modules/collections\"]={prefixes:[\"db\"],pos:a,type:\"module\",override:!0},f[\"http://www.28msec.com/modules/store\"]={prefixes:[\"store\"],pos:a,type:\"module\",override:!0},f[\"http://jsoniq.org/function-library\"]={prefixes:[\"libjn\"],pos:a,type:\"module\",override:!0},f[\"http://www.w3.org/2005/xpath-functions\"]={prefixes:[\"fn\"],pos:a,type:\"module\",override:!0},f[\"http://www.w3.org/2005/xquery-local-functions\"]={prefixes:[\"local\"],pos:a,type:\"declare\",override:!0},f[\"http://www.w3.org/2001/XMLSchema-instance\"]={prefixes:[\"xsi\"],pos:a,type:\"declare\"},f[\"http://www.w3.org/2001/XMLSchema\"]={prefixes:[\"xs\"],pos:a,type:\"declare\"},f[\"http://www.w3.org/XML/1998/namespace\"]={prefixes:[\"xml\"],pos:a,type:\"declare\"},f[\"http://zorba.io/annotations\"]={prefixes:[\"an\"],pos:a,type:\"declare\",override:!0},f[\"http://www.28msec.com/annotations/rest\"]={prefixes:[\"rest\"],pos:a,type:\"declare\",override:!0},f[\"http://www.w3.org/2005/xqt-errors\"]={prefixes:[\"err\"],pos:a,type:\"declare\",override:!0},f[\"http://zorba.io/errors\"]={prefixes:[\"zerr\"],pos:a,type:\"declare\",override:!0});var h={parent:t,children:[],pos:n,setModuleResolver:function(e){return this.root.moduleResolver=e,this},setModules:function(e){if(this!==this.root)throw new Error(\"setModules() not invoked from the root static context.\");this.moduleResolver=function(t){return e[t]};var t=this;return Object.keys(this.namespaces).forEach(function(e){var n=t.namespaces[e];if(n.type===\"module\"){var i=t.moduleResolver(e);i.variables&&r.concat(t.variables,i.variables),i.functions&&r.concat(t.functions,i.functions)}}),this},setModulesFromXQDoc:function(e){if(this!==this.root)throw new Error(\"setModulesFromXQDoc() not invoked from the root static context.\");var t={};Object.keys(e).forEach(function(n){var r=e[n],i={},s={};r.functions.forEach(function(e){s[n+\"#\"+e.name+\"#\"+e.arity]={params:[],annotations:[],name:e.name,arity:e.arity,eqname:{uri:n,name:e.name}},e.parameters.forEach(function(t){s[n+\"#\"+e.name+\"#\"+e.arity].params.push(\"$\"+t.name)})}),r.variables.forEach(function(e){var t=e.name.substring(e.name.indexOf(\":\")+1);i[n+\"#\"+t]={type:\"VarDecl\",annotations:[],eqname:{uri:n,name:t}}}),t[n]={variables:i,functions:s}}),this.root.moduleResolver=function(e){return t[e]};var n=this;return Object.keys(this.namespaces).forEach(function(e){var t=n.namespaces[e];if(t.type===\"module\"){var i=n.moduleResolver(e);i.variables&&r.concat(n.variables,i.variables),i.functions&&r.concat(n.functions,i.functions)}}),this},moduleNamespace:\"\",description:\"\",defaultFunctionNamespace:\"http://www.w3.org/2005/xpath-functions\",defaultFunctionNamespaces:[\"http://www.28msec.com/modules/collections\",\"http://www.28msec.com/modules/store\",\"http://jsoniq.org/functions\",\"http://jsoniq.org/function-library\",\"http://www.w3.org/2001/XMLSchema\"],defaultElementNamespace:\"\",namespaces:f,availableModuleNamespaces:[],importModule:function(e,t,n){if(this!==this.root)throw new Error(\"Function not invoked from the root static context.\");this.addNamespace(e,t,n,\"module\");if(this.moduleResolver)try{var i=this.moduleResolver(e,[]);i.variables&&r.concat(this.variables,i.variables),i.functions&&r.concat(this.functions,i.functions)}catch(o){throw new s(\"XQST0059\",'module \"'+e+'\" not found',n)}return this},getAvailableModuleNamespaces:function(){return this.root.availableModuleNamespaces},getPrefixesByNamespace:function(e){return this.root.namespaces[e].prefixes},addNamespace:function(e,t,n,r){if(t===\"\"&&r===\"module\")throw new o(\"W01\",\"Avoid this type of import. Use import module namespace instead\",n);if(e===\"\")throw new s(\"XQST0088\",\"empty target namespace in module import or module declaration\",n);var i=this.getNamespace(e);if(i&&i.type===r&&r!==\"declare\"&&!i.override)throw new s(\"XQST0047\",'\"'+e+'\": duplicate target namespace',n);i=this.getNamespaceByPrefix(t);if(i&&!i.override)throw new s(\"XQST0033\",'\"'+t+'\": namespace prefix already bound to \"'+i.uri+'\"',n);i=this.namespaces[e];var u=[t];i&&(u=u.concat(this.namespaces[e].prefixes)),this.namespaces[e]={prefixes:u,pos:n,type:r};if(i)throw new o(\"W02\",'\"'+e+'\" already bound to the \"'+i.prefixes.join(\", \")+'\" prefix',n)},getNamespaces:function(){return this.root.namespaces},getNamespace:function(e){var t=this;while(t){var n=t.namespaces[e];if(n)return n;t=t.parent}},getNamespaceByPrefix:function(e){var t=[],n=function(n){var i=r.namespaces[n];i.prefixes.indexOf(e)!==-1&&(i.uri=n,t.push(i))},r=this;while(r)Object.keys(r.namespaces).forEach(n),r=r.parent;var i;return t.forEach(function(e){e.type===\"moduleDecl\"&&(i=e)}),i?i:t[0]},resolveQName:function(e,t){var n={uri:\"\",prefix:\"\",name:\"\"},r;if(e.substring(0,2)===\"Q{\")r=e.indexOf(\"}\"),n.uri=e.substring(2,r),n.name=e.substring(r+1);else{r=e.indexOf(\":\"),n.prefix=e.substring(0,r);var i=this.getNamespaceByPrefix(n.prefix);if(!i&&n.prefix!==\"\"&&[\"fn\",\"jn\"].indexOf(n.prefix)===-1)throw new s(\"XPST0081\",'\"'+n.prefix+'\": can not expand prefix of lexical QName to namespace URI',t);i&&(n.uri=i.uri),n.name=e.substring(r+1)}return n},variables:{},varRefs:{},functionCalls:{},addVariable:function(e,t,n){if(t===\"VarDecl\"&&this.moduleNamespace!==\"\"&&this.moduleNamespace!==e.uri&&e.uri!==\"\")throw new s(\"XQST0048\",'\"'+e.prefix+\":\"+e.name+'\": Qname not library namespace',n);var r=l(e);if(t===\"VarDecl\"&&this.variables[r])throw new s(\"XQST0049\",'\"'+e.name+'\": duplicate variable declaration',n);return this.variables[r]={type:t,pos:n,qname:e,annotations:{}},this},getVariables:function(){var e={},t=this,n=function(n){e[n]||(e[n]=t.variables[n])};while(t)Object.keys(t.variables).forEach(n),t=t.parent;return e},getVariable:function(e){var t=l(e),n=this;while(n){if(n.variables[t])return n.variables[t];n=n.parent}},addVarRef:function(e,t){var n=this.getVariable(e);if(!n&&(e.uri===\"\"||this.root.moduleResolver))throw new s(\"XPST0008\",'\"'+e.name+'\": undeclared variable',t);var r=l(e);this.varRefs[r]=!0},addFunctionCall:function(e,t,n){var r=this.getFunction(e,t);if(!(!!r||e.uri!==\"http://www.w3.org/2005/xquery-local-functions\"&&!this.root.moduleResolver||(e.uri===\"http://www.w3.org/2005/xpath-functions\"||e.uri===\"\"&&this.root.defaultFunctionNamespaces.concat(this.root.defaultFunctionNamespace).indexOf(\"http://www.w3.org/2005/xpath-functions\")!==-1)&&e.name===\"concat\")&&!r)throw new s(\"XPST0008\",'\"'+e.name+\"#\"+t+'\": undeclared function',n);var i=c(e,t);this.functionCalls[i]=!0},functions:u()[\"http://www.w3.org/2001/XMLSchema\"].functions,getFunctions:function(){return this.root.functions},getFunction:function(e,t){var n=c(e,t),r;if(e.uri===\"\"){var i=this;return this.root.defaultFunctionNamespaces.concat([this.root.defaultFunctionNamespace]).forEach(function(n){if(!!r)return!1;r=i.getFunction({uri:n,prefix:e.prefix,name:e.name},t)}),r}return this.root.functions[n]},addFunction:function(e,t,n){if(this!==this.root)throw new Error(\"addFunction() not invoked from the root static context.\");var r=n.length;if(this.moduleNamespace===\"\"||this.moduleNamespace===e.uri||e.uri===\"\"&&this.defaultFunctionNamespace===this.moduleNamespace){var i=c(e,r);if(this.functions[i])throw new s(\"XQST0034\",'\"'+e.name+'\": duplicate function declaration',t);return this.functions[i]={pos:t,params:n},this}throw new s(\"XQST0048\",'\"'+e.prefix+\":\"+e.name+'\": Qname not library namespace',t)}};return h.root=t?t.root:h,h}},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./schema_built-in_types\":\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\"}],\"/node_modules/xqlint/lib/compiler/translator.js\":[function(e,t,n){n.Translator=function(t,n){\"use strict\";var r=e(\"./errors\"),i=r.StaticError,s=r.StaticWarning,o=e(\"../tree_ops\").TreeOps,u=e(\"./static_context\").StaticContext,a=e(\"./handlers\"),f=function(e,t){var n=[];return t.length===0?e:(e.children.forEach(function(e){e.name===t[0]&&t.length>1?n=f(e,t.slice(1)):e.name===t[0]&&n.push(e)}),n)},l=[];this.apply=function(e){try{e()}catch(t){if(t instanceof i)c(t);else{if(!(t instanceof s))throw t;h(t.getCode(),t.getMessage(),t.getPos())}}};var c=function(e){l.push({pos:e.getPos(),type:\"error\",level:\"error\",message:\"[\"+e.getCode()+\"] \"+e.getMessage()})},h=function(e,t,n){l.push({pos:n,type:\"warning\",level:\"warning\",message:\"[\"+e+\"] \"+t})};this.getMarkers=function(){return l};var p=this;t.pos=n.pos;var d=t,v=function(e){d=new u(d,e),d.parent.children.push(d)},m=function(e){e!==undefined&&(d.pos.el=e.el,d.pos.ec=e.ec),Object.keys(d.varRefs).forEach(function(e){d.variables[e]||(d.parent.varRefs[e]=!0)}),Object.keys(d.variables).forEach(function(e){!d.varRefs[e]&&d.variables[e].type!==\"GroupingVariable\"&&d.variables[e].type!==\"CatchVar\"&&h(\"W03\",'Unused variable \"$'+d.variables[e].qname.name+'\"',d.variables[e].pos)}),d=d.parent};this.visitOnly=function(e,t){e.children.forEach(function(e){t.indexOf(e.name)!==-1&&p.visit(e)})},this.getFirstChild=function(e,t){var n;return e.children.forEach(function(e){e.name===t&&n===undefined&&(n=e)}),n},this.XQuery=function(e){t.description=e.comment?e.comment.description:undefined},this.ModuleDecl=function(e){return this.visitChildren(e,a.ModuleDecl(p,t,e)),!0},this.Prolog=function(e){return this.visitOnly(e,[\"DefaultNamespaceDecl\",\"Setter\",\"NamespaceDecl\",\"Import\"]),n.index.forEach(function(e){if(e.name===\"VarDecl\")e.children.forEach(function(n){n.name===\"VarName\"&&p.apply(function(){var r=o.flatten(n),i=t.resolveQName(r,n.pos);t.addVariable(i,e.name,n.pos)})});else if(e.name===\"FunctionDecl\"){var n,r,i=[];e.children.forEach(function(e){e.name===\"EQName\"?(n=e,r=e.pos):e.name===\"ParamList\"&&e.children.forEach(function(e){e.name===\"Param\"&&i.push(o.flatten(e))})}),p.apply(function(){n=o.flatten(n),n=t.resolveQName(n,r),t.addFunction(n,r,i)})}}),this.visitOnly(e,[\"ContextItemDecl\",\"AnnotatedDecl\",\"OptionDecl\"]),!0},this.ModuleImport=function(e){return this.visitChildren(e,a.ModuleImport(p,t,e)),!0},this.SchemaImport=function(e){return this.visitChildren(e,a.SchemaImport(p,t,e)),!0},this.DefaultNamespaceDecl=function(e){return this.visitChildren(e,a.DefaultNamespaceDecl(p,t,e)),!0},this.NamespaceDecl=function(e){return this.visitChildren(e,a.NamespaceDecl(p,t,e)),!0};var g={};this.AnnotatedDecl=function(e){return g={},this.visitChildren(e,a.NamespaceDecl(p,t,e)),!0},this.CompatibilityAnnotation=function(){return g[\"http://www.w3.org/2012/xquery#updating\"]=[],!0},this.Annotation=function(e){return this.visitChildren(e,{EQName:function(e){var t=o.flatten(e);p.apply(function(){var n=d.resolveQName(t,e.pos);g[n.uri+\"#\"+n.name]=[]})}}),!0},this.VarDecl=function(e){try{var n=p.getFirstChild(e,\"VarName\"),r=o.flatten(n),i=d.resolveQName(r,n.pos),s=t.getVariable(i);if(s){s.annotations=g,s.description=e.getParent.comment?e.getParent.comment.description:undefined,s.type=o.flatten(f(e,[\"TypeDeclaration\"])[0]).substring(2).trim();var u=s.type.substring(s.type.length-1);u===\"?\"?(s.occurrence=0,s.type=s.type.substring(0,s.type.length-1)):u===\"*\"?(s.occurrence=-1,s.type=s.type.substring(0,s.type.length-1)):u===\"+\"?(s.occurrence=2,s.type=s.type.substring(0,s.type.length-1)):s.occurrence=1}}catch(a){}return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),!0},this.FunctionDecl=function(e){var t=g[\"http://www.w3.org/2012/xquery#updating\"]!==undefined,n=f(e,[\"ReturnType\"])[0],r=f(e,[\"EQName\"])[0];!n&&!t&&h(\"W05\",\"Untyped return value\",r.pos);var i=!1;return e.children.forEach(function(e){if(e.name===\"TOKEN\"&&e.value===\"external\")return i=!0,!1}),i||(v(e.pos),this.visitChildren(e),m()),!0},this.VarRef=function(e){return this.visitChildren(e,a.VarRefHandler(p,d,e)),!0},this.Param=function(e){var t=f(e,[\"TypeDeclaration\"])[0];return t||h(\"W05\",\"Untyped function parameter\",e.pos),this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.InlineFunctionExpr=function(e){return v(e.pos),this.visitChildren(e),m(),!0};var y=[],b=function(e){v(e.pos),y.push(0),p.visitChildren(e);for(var t=1;t<=y[y.length-1];t++)m(e.pos);y.pop(),m()};this.StatementsAndOptionalExpr=function(e){return b(e),!0},this.StatementsAndExpr=function(e){return b(e),!0},this.BlockStatement=function(e){return b(e),!0},this.VarDeclStatement=function(e){v(e.pos),y[y.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e))};var w=[];this.FLWORExpr=this.FLWORStatement=function(e){v(e.pos),w.push(0),this.visitChildren(e);for(var t=1;t<=w[w.length-1];t++)m(e.pos);return w.pop(),m(),!0},this.ForBinding=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.LetBinding=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.GroupingSpec=function(e){var t=!1;e.children.forEach(function(e){if(e.value===\":=\")return t=!0,!1});if(t){var n=e.children[0];return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(n,a.VarHandler(p,d,n)),!0}},this.TumblingWindowClause=function(e){return this.visitOnly(e,[\"ExprSingle\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),this.visitOnly(e,[\"WindowStartCondition\",\"WindowEndCondition\"]),!0},this.WindowVars=function(e){return v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.SlidingWindowClause=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),this.visitOnly(e,[\"WindowStartCondition\",\"WindowEndCondition\"]),!0},this.PositionalVar=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.PositionalVar=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.CurrentItem=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.PreviousItem=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.NextItem=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.CountClause=function(e){return v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.CaseClause=function(e){return v(e.pos),this.visitChildren(e,a.VarHandler(p,d,e)),this.visitOnly(e,[\"ExprSingle\"]),m(),!0};var E=[];this.TransformExpr=function(e){v(e.pos),E.push(0),this.visitChildren(e);for(var t=1;t<=E[E.length-1];t++)m(e.pos);return E.pop(),m(),!0},this.TransformSpec=function(e){return this.visitOnly(e,[\"ExprSingle\"]),v(e.pos),E[E.length-1]+=1,this.visitChildren(e,a.VarHandler(p,d,e)),!0};var S=[];this.QuantifiedExpr=function(e){v(e.pos),S.push(0),this.visitChildren(e);for(var t=1;t<=S[S.length-1];t++)m(e.pos);return S.pop(),m(),!0},this.QuantifiedVarDecl=function(e){return this.visitOnly(e,[\"ExprSingle\"]),v(e.pos),S[S.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.FunctionCall=function(e){this.visitOnly(e,[\"ArgumentList\"]);var t=p.getFirstChild(e,\"EQName\"),n=o.flatten(t),r=f(e,[\"ArgumentList\",\"Argument\"]).length;return p.apply(function(){var i=d.resolveQName(n,e.pos);try{i.uri!==\"\"&&(d.root.namespaces[i.uri].used=!0)}catch(s){}d.addFunctionCall(i,r,t.pos)}),!0},this.TryClause=function(e){return v(e.pos),this.visitChildren(e),m(),!0},this.CatchClause=function(e){v(e.pos);var t=\"err\",n=\"http://www.w3.org/2005/xqt-errors\",r={sl:0,sc:0,el:0,ec:0};return d.addVariable({prefix:t,uri:n,name:\"code\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"description\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"value\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"module\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"line-number\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"column-number\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"additional\"},\"CatchVar\",r),this.visitChildren(e),m(),!0},this.Pragma=function(e){var n=o.flatten(f(e,[\"EQName\"])[0]);n=t.resolveQName(n,e);var r=o.flatten(f(e,[\"PragmaContents\"])[0]);if(n.name===\"xqlint\"&&n.uri===\"http://xqlint.io\"){v(e.pos);var i=r.match(/[a-zA-Z]+\\(([^)]+)\\)/g);return i.forEach(function(t){var n=t.substring(0,t.indexOf(\"(\")),r=t.substring(0,t.length-1).substring(t.indexOf(\"(\")+1).split(\",\").map(function(e){return e.trim()});n===\"varrefs\"&&r.forEach(function(t){var n=d.resolveQName(t.substring(1),e.pos);n.uri!==\"\"&&(d.root.namespaces[n.uri].used=!0),d.addVarRef(n,e.pos)})}),this.visitChildren(e),m(),!0}},this.visit=function(e){var t=e.name,n=!1;typeof this[t]==\"function\"&&(n=this[t](e)===!0),n||this.visitChildren(e)},this.visitChildren=function(e,t){for(var n=0;n<e.children.length;n++){var r=e.children[n];t!==undefined&&typeof t[r.name]==\"function\"?t[r.name](r):this.visit(r)}},this.visit(n),Object.keys(t.variables).forEach(function(e){!t.varRefs[e]&&(t.variables[e].annotations[\"http://www.w3.org/2005/xpath-functions#private\"]||t.moduleNamespace===\"\")&&t.variables[e].pos&&h(\"W03\",'Unused variable \"'+t.variables[e].qname.name+'\"',t.variables[e].pos)}),Object.keys(t.namespaces).forEach(function(e){var n=t.namespaces[e];n.used===undefined&&!n.override&&n.type===\"module\"&&h(\"W04\",'Unused module \"'+e+'\"',n.pos)})}},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./handlers\":\"/node_modules/xqlint/lib/compiler/handlers.js\",\"./static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\"}],\"/node_modules/xqlint/lib/completion/completer.js\":[function(e,t,n){\"use strict\";function s(e,t,n){n=n||i;var r=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;r.push(e[s])}return r.reverse().join(\"\")}function o(e,t){var n=0,r=e.length-1,i=Math.floor((r+n)/2);while(r>n&&i>=0&&e[i].indexOf(t)!==0)t<e[i]?r=i-1:t>e[i]&&(n=i+1),i=Math.floor((r+n)/2);while(i>0&&e[i-1].indexOf(t)===0)i--;return i>=0?i:0}var r=e(\"../tree_ops\").TreeOps,i=/[a-zA-Z_0-9\\$]/,u=/[a-zA-Z_0-9\\/\\.:\\-#]/,a=\"-._A-Za-z0-9:\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02ff\\u0300-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd\",f=\"[\"+a+\"]\",l=\"[\"+a+\"\\\\$]\",c=new RegExp(f),h=new RegExp(l),p={LetBinding:\"Let binding\",Param:\"Function parameter\",QuantifiedExpr:\"Quantified expression binding\",VarDeclStatement:\"Local variable\",ForBinding:\"For binding\",TumblingWindowClause:\"Tumbling window binding\",WindowVars:\"Window variable\",SlidingWindowClause:\"Sliding window binding\",PositionalVar:\"Positional variable\",CurrentItem:\"Current item\",PreviousItem:\"Previous item\",NextItem:\"Next item\",CountClause:\"Count binding\",GroupingVariable:\"Grouping variable\",VarDecl:\"Module variable\"},d=function(e,t){t.sort();var n=o(t,e),r=[];for(var i=n;i<t.length&&t[i].indexOf(e)===0;i++)r.push(t[i]);return r},v=function(e,t,n){var r=e.indexOf(\":\");if(r===-1){var i=[],s=n.getNamespaces();Object.keys(s).forEach(function(e){(s[e].type===\"module\"||e===\"http://www.w3.org/2005/xquery-local-functions\")&&i.push(s[e].prefixes[0])});var o=d(e,i),u=function(e){return{name:e+\":\",value:e+\":\",meta:\"prefix\"}};return o.map(u)}return[]},m=function(e,t,n){var r=[],i={},s=n.getFunctions(),o=\"\",u=\"\",a=e,f=e.indexOf(\":\"),l=!1;if(f!==-1){u=e.substring(0,f),a=e.substring(f+1);var h=n.getNamespaceByPrefix(u);h&&(o=n.getNamespaceByPrefix(u).uri)}else l=!0,o=n.root.defaultFunctionNamespace;Object.keys(s).forEach(function(e){var t=s[e],u=e.substring(0,e.indexOf(\"#\")),a=e.substring(e.indexOf(\"#\")+1);a=a.substring(0,a.indexOf(\"#\"));if(u!==o)return;l||(a=n.getNamespaces()[u].prefixes[0]+\":\"+a),a+=\"(\";var f=a;f+=t.params.map(function(e,t){return\"${\"+(t+1)+\":\\\\\"+e.split(\" \")[0]+\"}\"}).join(\", \"),a+=t.params.join(\", \"),a+=\")\",f+=\")\",r.push(a),i[a]=f});var p=d(e,r),v=function(e){return{name:e,value:e,meta:\"function\",priority:4,identifierRegex:c,snippet:i[e]}};return p.map(v)},g=function(e,t,n){var r=\"\",i=\"\",s=e.indexOf(\":\");s!==-1&&(i=e.substring(0,s),r=n.getNamespaceByPrefix(i).uri);var o=n.getVariables(),u=[],a={};Object.keys(o).forEach(function(e){var t=e.indexOf(\"#\"),r=e.substring(0,t),i=e.substring(t+1);r!==\"\"?(u.push(n.getPrefixesByNamespace(r)[0]+\":\"+i),a[n.getPrefixesByNamespace(r)[0]+\":\"+i]=o[e].type):(u.push(i),a[i]=o[e].type)});var f=d(e,u),l=function(e){return{name:\"$\"+e,value:\"$\"+e,meta:p[a[e]],priority:4,identifierRegex:h}};return f.map(l)},y=function(e,t,n){var r=s(e,t.col,c),i=e.substring(0,t.col-(r.length===0?0:r.length)),o=i[i.length-1]===\"$\";return o?g(r,t,n):r!==\"\"?m(r,t,n).concat(v(r,t,n)):g(r,t,n).concat(m(r,t,n)).concat(v(r,t,n))},b=function(e,t,n){var r=s(e,t.col,u),i=d(r,n.getAvailableModuleNamespaces()),o=function(e){return{name:e,value:e,meta:\"module\",priority:4,identifierRegex:u}};return i.map(o)};n.complete=function(e,t,n,i){var s=e.split(\"\\n\")[i.line],o=r.findNode(t,i),u=r.findNode(n,i);return u=u?u:n,o&&o.name===\"URILiteral\"&&o.getParent&&o.getParent.name===\"ModuleImport\"?b(s,i,u):y(s,i,u)}},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\"}],\"/node_modules/xqlint/lib/formatter/style_checker.js\":[function(e,t,n){n.StyleChecker=function(e,t){\"use strict\";var n=\"    \",r=[];this.getMarkers=function(){return r},this.WS=function(e){var t=e.value.split(\"\\n\");return t.forEach(function(i,s){var o=s===0,u=s===t.length-1;/\\r$/.test(i)&&r.push({pos:{sl:e.pos.sl+s,el:e.pos.sl+s,sc:i.length-1,ec:i.length},type:\"warning\",level:\"warning\",message:\"[SW01] Detected CRLF\"});var a=i.match(/\\t+/);a!==null&&r.push({pos:{sl:e.pos.sl+s,el:e.pos.sl+s,sc:a.index,ec:a.index+a[0].length},type:\"warning\",level:\"warning\",message:\"[SW02] Tabs detected\"});if(!o&&u){a=i.match(/^\\ +/);if(a!==null){var f=a[0].length%n.length;f!==0&&r.push({pos:{sl:e.pos.sl+s,el:e.pos.sl+s,sc:a.index,ec:a.index+a[0].length},type:\"warning\",level:\"warning\",message:\"[SW03] Unexcepted indentation of \"+a[0].length})}}}),!0},this.visit=function(e,t){var n=e.name,r=!1;typeof this[n]==\"function\"&&(r=this[n](e,t)===!0),r||this.visitChildren(e)},this.visitChildren=function(e,t){for(var n=0;n<e.children.length;n++){var r=e.children[n];t!==undefined&&typeof t[r.name]==\"function\"?t[r.name](r):this.visit(r)}},t.split(\"\\n\").forEach(function(e,t){var n=e.match(/\\ +$/);n&&r.push({pos:{sl:t,el:t,sc:n.index,ec:n.index+n[0].length},type:\"warning\",level:\"warning\",message:\"[SW04] Trailing whitespace\"})}),this.visit(e)}},{}],\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(e,t,n){var r=n.JSONiqTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 80:f(80);break;case 94:f(94);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 143:f(143);break;case 150:f(150);break;case 163:f(163);break;case 183:f(183);break;case 189:f(189);break;case 214:f(214);break;case 224:f(224);break;case 225:f(225);break;case 241:f(241);break;case 242:f(242);break;case 251:f(251);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 17:f(17);break;case 68:f(68);break;case 71:f(71);break;case 72:f(72);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 91:f(91);break;case 92:f(92);break;case 101:f(101);break;case 103:f(103);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 111:f(111);break;case 116:f(116);break;case 117:f(117);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 127:f(127);break;case 129:f(129);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 151:f(151);break;case 157:f(157);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 168:f(168);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 180:f(180);break;case 182:f(182);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 216:f(216);break;case 217:f(217);break;case 218:f(218);break;case 222:f(222);break;case 227:f(227);break;case 233:f(233);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 248:f(248);break;case 252:f(252);break;case 254:f(254);break;case 258:f(258);break;case 264:f(264);break;case 268:f(268);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 260:f(260);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 28:f(28);break;case 68:f(68);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 92:f(92);break;case 103:f(103);break;case 107:f(107);break;case 111:f(111);break;case 116:f(116);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 218:f(218);break;case 222:f(222);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 264:f(264);break;case 268:f(268);break;case 71:f(71);break;case 72:f(72);break;case 80:f(80);break;case 91:f(91);break;case 94:f(94);break;case 101:f(101);break;case 106:f(106);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 117:f(117);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 127:f(127);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 143:f(143);break;case 150:f(150);break;case 151:f(151);break;case 157:f(157);break;case 163:f(163);break;case 168:f(168);break;case 180:f(180);break;case 182:f(182);break;case 183:f(183);break;case 189:f(189);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 214:f(214);break;case 216:f(216);break;case 217:f(217);break;case 224:f(224);break;case 225:f(225);break;case 227:f(227);break;case 233:f(233);break;case 241:f(241);break;case 242:f(242);break;case 248:f(248);break;case 251:f(251);break;case 254:f(254);break;case 258:f(258);break;case 260:f(260);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=30)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 58:f(58);break;case 57:f(57);break;case 59:f(59);break;case 43:f(43);break;case 45:f(45);break;case 44:f(44);break;case 37:f(37);break;case 41:f(41);break;case 277:f(277);break;case 274:f(274);break;case 42:f(42);break;case 46:f(46);break;case 52:f(52);break;case 65:f(65);break;case 66:f(66);break;case 49:f(49);break;case 51:f(51);break;case 56:f(56);break;case 54:f(54);break;case 36:f(36);break;case 276:f(276);break;case 40:f(40);break;case 5:f(5);break;case 4:f(4);break;case 6:f(6);break;case 15:f(15);break;case 16:f(16);break;case 18:f(18);break;case 19:f(19);break;case 20:f(20);break;case 8:f(8);break;case 9:f(9);break;case 7:f(7);break;case 35:f(35);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 61:f(61);break;case 53:f(53);break;case 29:f(29);break;case 60:f(60);break;case 37:f(37);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 25:f(25);break;case 9:f(9);break;case 10:f(10);break;case 58:f(58);break;case 57:f(57);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;default:f(35)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 23:f(23);break;case 27:f(27);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 22:f(22);break;case 26:f(26);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 14:f(14);break;case 67:f(67);break;default:f(35)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 12:f(12);break;case 50:f(50);break;default:f(35)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 13:f(13);break;case 62:f(62);break;case 63:f(63);break;default:f(35)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 11:f(11);break;case 38:f(38);break;case 39:f(39);break;default:f(35)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 55:f(55);break;case 44:f(44);break;case 32:f(32);break;default:f(35)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(6);switch(y){case 33:f(33);break;case 34:f(34);break;case 55:f(55);break;case 44:f(44);break;default:f(35)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(5);switch(y){case 3:f(3);break;case 2:f(2);break;case 1:f(1);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 21:f(21);break;case 31:f(31);break;case 23:f(23);break;case 24:f(24);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<279;i+=32){var s=i,o=(i>>5)*2066+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,37,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37,37,37,37,37,37,37,37,37,37,37,37,31,31,37,37,37,37,37,37,37,66,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,37,31,37,31,31,37],r.INITIAL=[1,2,49155,57348,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,17408,19288,17439,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19074,36169,17439,36866,17466,36890,36866,22314,19105,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22182,19288,19121,36866,17466,18345,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19273,19552,19304,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19332,17423,19363,36866,17466,17537,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,18614,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19391,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19427,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36154,19288,19457,36866,17466,17740,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22780,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22375,22197,18469,36866,17466,36890,36866,21991,24018,22987,17556,17575,22288,17486,17509,17525,18373,21331,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,19485,19501,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19537,22390,19568,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19596,19611,19457,36866,17466,36890,36866,18246,19627,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22242,20553,19457,36866,17466,36890,36866,18648,30477,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36472,19288,19457,36866,17466,17809,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,21770,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19643,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19672,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20538,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,17975,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22345,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19726,19742,21529,24035,23112,26225,23511,27749,27397,24035,34360,24035,24036,23114,35166,23114,23114,19758,23511,35247,23511,23511,28447,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,19821,23511,23511,23511,23511,23512,19441,36539,24035,24035,24035,24035,19846,19869,23114,23114,23114,28618,32187,19892,23511,23511,23511,34585,20402,36647,24035,24035,24036,23114,33757,23114,23114,23029,20271,23511,27070,23511,23511,30562,24035,24035,29274,26576,23114,23114,31118,23036,29695,23511,23511,32431,23634,30821,24035,23110,19913,23114,23467,31261,23261,34299,19932,24035,32609,19965,35389,19984,27689,19830,29391,29337,20041,22643,35619,33728,20062,20121,20166,35100,26145,20211,23008,19876,20208,20227,25670,20132,26578,27685,20141,20243,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36094,19288,19457,36866,17466,21724,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22735,19552,20287,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22750,19288,21529,24035,23112,28056,23511,29483,28756,24035,24035,24035,24036,23114,23114,23114,23114,20327,23511,23511,23511,23511,31156,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,20371,23511,23511,23511,23511,27443,20395,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,29457,29700,23511,23511,23511,23511,33444,20402,24035,24035,24035,24036,23114,23114,23114,23114,28350,20421,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,20447,20475,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20523,22257,20569,20783,21715,17603,20699,20837,20614,20630,21149,20670,21405,17486,17509,17525,18373,19179,20695,20716,20732,20755,19194,18042,21641,20592,20779,20598,21412,17470,17591,20896,17468,17619,20799,20700,21031,20744,20699,20828,18075,21259,20581,20853,18048,20868,20884,17756,17784,17800,17825,17854,21171,21200,20931,20947,21378,20955,20971,18086,20645,21002,20986,18178,17960,18012,18381,18064,29176,21044,21438,21018,21122,21393,21060,21844,21094,20654,17493,18150,18166,18214,25967,20763,21799,21110,21830,21138,21246,21301,18336,18361,21165,21187,20812,21216,21232,21287,21317,18553,21347,21363,21428,21454,21271,21483,21499,21515,21575,21467,18712,21591,21633,21078,18189,18198,20679,21657,21701,21074,21687,21740,21756,21786,21815,21860,21876,21892,21946,21962,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36457,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,36813,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,21981,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,22151,22007,18884,17900,17922,17944,18178,17960,18012,18381,18064,27898,17884,18890,17906,17928,22042,25022,18130,36931,36963,17493,18150,18166,22070,22112,25026,18134,36935,18262,18278,18294,18320,18336,18361,22142,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36109,19288,18469,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22167,19288,19457,36866,17466,17768,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22227,36487,22273,36866,17466,36890,36866,19316,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18749,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,22304,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19580,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22330,19089,19457,36866,17466,18721,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22765,19347,19457,36866,17466,36890,36866,18114,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34541,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,22540,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29908,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22561,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,23837,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22584,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36442,19288,21605,24035,23112,28137,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,31568,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22690,19288,19457,36866,17466,36890,36866,21991,27584,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,22659,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22360,19552,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22675,22811,19457,36866,17466,36890,36866,19133,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22827,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36064,19288,22865,22881,32031,22897,22913,22956,29939,24035,24035,24035,23003,23114,23114,23114,23024,22420,23511,23511,23511,23052,29116,23073,29268,24035,25563,26915,23106,23131,23114,23114,23159,23181,23197,23248,23511,23511,23282,23305,22493,32364,24035,33472,30138,26325,31770,33508,27345,33667,23114,23321,23473,23351,35793,36576,23511,23375,22500,24145,24035,29197,20192,24533,23440,23114,19017,23459,22839,23489,23510,23511,33563,23528,32076,25389,24035,26576,23561,23583,23114,32683,22516,23622,23655,23511,23634,35456,37144,23110,23683,34153,20499,32513,25824,23705,24035,24035,23111,23114,19874,27078,33263,19830,24035,23112,19872,27741,23266,24036,23114,30243,20507,32241,20150,31862,27464,35108,23727,23007,35895,34953,26578,27685,20141,24569,31691,19787,33967,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36427,19552,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,27027,26576,23114,23114,23114,31471,23756,22468,23511,23511,23511,34687,23772,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,23788,24035,24035,24035,21559,23828,23114,23114,23114,25086,22839,23853,23511,23511,23511,23876,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,31761,23909,23953,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36049,19288,21605,30825,23112,23987,23511,24003,31001,27617,24034,24035,24036,24052,24089,23114,23114,22420,24109,24168,23511,23511,29116,24188,27609,20017,29516,24035,26576,24222,19968,23114,24252,33811,22468,24270,33587,23511,24320,27443,22493,24035,24035,24035,24035,24339,23113,23114,23114,23114,28128,28618,29700,23511,23511,23511,28276,34564,20402,24035,24035,32929,24036,23114,23114,23114,24357,23029,22839,23511,23511,23511,24377,25645,24035,34112,24035,26576,23114,26643,23114,32683,22516,23511,25638,23511,23711,24035,24395,27809,23114,24414,20499,24432,30917,23628,24035,30680,23111,23114,30233,27078,25748,24452,24035,23112,19872,27741,23266,24036,23114,24475,19829,26577,26597,26154,24519,24556,24596,23007,20046,20132,26578,24634,20141,24569,31691,24679,24727,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36412,19288,21605,19943,34861,32618,26027,29483,32016,32050,36233,24776,35574,24801,24819,32671,31289,22420,24868,24886,20087,26849,29116,19803,24035,24035,24035,36228,26576,23114,23114,23114,24981,33811,22468,23511,23511,23511,29028,27443,22493,24923,27965,24035,24035,32797,24946,23443,23114,23114,29636,24997,22849,28252,23511,23511,23511,25042,25110,24035,24035,34085,24036,25133,23114,23114,25152,23029,22839,25169,23511,36764,23511,25645,30403,24035,25186,26576,31806,24093,25212,32683,22516,32713,26245,34293,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,32406,23111,23114,28676,30944,27689,25234,24035,23112,19872,37063,23266,24036,23114,30243,20379,26100,29218,20211,30105,25257,25284,23007,20046,20132,26578,27685,20141,24569,24834,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36034,19288,21671,25314,25072,25330,25346,25362,29939,29951,35288,29984,23812,27216,25405,25424,30456,22584,26292,25461,25480,31592,29116,25516,34963,25545,27007,25579,33937,25614,25661,25686,34872,25702,25718,25734,25769,25795,25811,25840,22493,26533,25856,24035,25876,30763,27481,25909,23114,28987,25936,25954,29700,25983,23511,31412,26043,26063,22568,29241,29592,26116,31216,35383,26170,34783,26194,26221,22839,26241,26261,22477,26283,26308,27306,31035,24655,26576,29854,33386,26341,32683,22516,32153,30926,26361,19996,26381,35463,26397,26424,34646,26478,35605,31386,26494,35567,31964,22940,23689,25218,30309,32289,19830,33605,23112,32109,27733,27084,24496,35886,35221,26525,36602,26549,26558,26574,26594,26613,26629,26666,26700,26578,27685,23740,24285,31691,26733,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36397,19552,18991,25887,28117,32618,26776,29483,29939,26802,24035,24035,24036,28664,23114,23114,23114,22420,30297,23511,23511,23511,29116,19803,24035,24035,24035,25559,26576,23114,23114,23114,30525,33811,22468,23511,23511,23511,28725,27443,22493,24035,24035,27249,24035,24035,23113,23114,23114,26827,23114,28618,29700,23511,23511,26845,23511,34564,20402,24035,24035,26979,24036,23114,23114,23114,24974,23029,22839,23511,23511,23511,26865,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,33305,24035,25598,23114,19874,34253,27689,19830,24035,23112,19872,27741,23266,24036,23114,26886,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,26931,24569,26439,26947,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36019,19288,26995,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,27043,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,27061,23511,23511,23511,23511,23512,24694,24035,24035,29978,24035,24035,23113,23114,33114,23114,23114,30010,29700,23511,35913,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,27155,26576,23114,23114,30447,23036,29695,23511,23511,30935,20099,24152,25529,27100,34461,27121,22625,29156,26009,27137,30422,31903,31655,28870,27171,32439,31731,19830,27232,22612,27265,26786,25494,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,20342,27288,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,27322,27339,28020,27361,27382,29939,24035,24035,32581,24036,23114,23114,23114,27425,22420,23511,23511,23511,27442,28306,19803,24035,24035,24035,24035,26710,23114,23114,23114,23114,32261,22468,23511,23511,23511,23511,35719,24694,29510,24035,24035,24035,24035,26717,23114,23114,23114,23114,28618,32217,23511,23511,23511,23511,34585,20402,24035,24035,24035,27459,23114,23114,23114,36252,23029,20271,23511,23511,23511,28840,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,27480,34483,28401,29761,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36382,19288,21605,27497,27517,28504,28898,27569,29939,29401,27600,27323,27633,19025,27662,23114,27705,22420,20483,27721,23511,27765,28306,19803,23540,24035,24610,27781,27805,26650,23114,28573,32990,25920,22468,26870,23511,26684,34262,34737,25057,34622,24035,24035,23971,24206,27825,27847,23114,23114,27865,27885,35766,27914,23511,23511,32766,32844,27934,28795,26909,27955,26092,27988,25445,28005,28036,28052,21965,23511,32196,19897,28072,28102,36534,21541,23801,28153,28180,28197,28221,23036,32695,28251,28268,28292,23667,34825,23930,24580,28322,28344,31627,28366,25996,23628,24035,24035,23111,23114,19874,27078,27689,35625,33477,33359,27674,28393,33992,24036,23114,30243,19829,28417,28433,28463,23008,19876,20208,23007,20046,20132,28489,28520,20141,24569,31691,19787,28550,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,28589,24035,24035,24035,24035,28608,23114,23114,23114,23114,28618,20431,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36004,19288,28634,31951,28565,28702,28718,28741,32544,20175,28792,32086,20105,28811,29059,29862,28856,22420,28886,30354,23359,28922,28306,28952,23888,26320,36506,24035,29331,28968,36609,23114,29003,31661,27061,30649,27366,23511,29023,27918,24694,24035,24035,23893,33094,30867,23113,23114,23114,29044,34184,30010,29700,23511,23511,29081,29102,34585,20402,27789,24035,24035,24036,23114,29132,23114,23114,23029,20271,23511,29153,23511,23511,30562,30174,24035,24035,27409,25438,23114,23114,29172,36668,31332,23511,23511,29192,30144,24035,23110,30203,23114,23467,31544,23261,23628,24035,22545,23111,23114,29213,27078,27689,29234,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,29257,23008,19876,20208,28768,29290,29320,34776,29353,20141,22435,29378,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36367,19288,21605,34616,19006,32618,31497,31507,36216,20184,24035,34393,29424,34668,23114,34900,29447,22420,30360,23511,37089,29473,28306,19803,29499,24398,24035,24035,26576,31799,29532,29550,23114,33811,22468,32298,29571,31184,23511,23512,37127,36628,29589,24035,24135,24035,23113,29608,23114,27831,29634,28618,29652,30037,23511,24172,29671,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,29555,29690,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,29719,24035,23110,29738,23114,23467,34035,29756,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,29777,34364,28181,30243,29799,31920,27272,27185,23008,31126,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29828,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35989,19552,19687,35139,28649,29878,29894,29924,29939,23224,23085,31969,24036,35173,24752,24803,23114,22420,31190,30318,24870,23511,28306,29967,23967,24035,24035,24035,26576,3e4,23114,23114,23114,33811,22468,30026,23511,23511,23511,23512,26078,24035,24035,24035,30053,37137,30071,23114,23114,33368,25136,28618,30723,23511,23511,37096,31356,34585,20402,30092,30127,30160,24036,35740,30219,24960,30259,23029,20271,34042,30285,30342,30376,23289,30055,30400,30419,30438,32640,33532,33514,30472,18792,26267,24323,23057,30493,23639,20008,30196,33188,30517,20075,23511,30541,23628,30578,33928,28776,30594,19874,30610,30637,19830,30677,27646,19872,25779,23266,23232,35016,30243,30696,29812,30712,30746,27206,30779,30807,23007,33395,20132,26578,27685,31703,22928,31691,19787,31079,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36352,19288,23335,30841,26131,30888,30904,30986,29939,24035,24704,31017,20025,23114,26178,31051,31095,22420,23511,22524,31142,31172,28534,31206,35497,25196,24035,28592,24503,23114,31239,31285,23114,31305,31321,31355,31372,31407,23511,30556,24694,24035,27501,19805,24035,24035,23113,23114,31428,24066,23114,28618,29700,23511,31837,18809,23511,34585,31448,24035,24035,24035,23090,23114,23114,23114,23114,31619,35038,23511,23511,23511,23511,33714,24035,33085,24035,29431,23114,31467,23114,23143,31487,23511,31523,23511,35195,36783,24035,30111,23567,23114,23467,31543,31560,23628,24035,24035,23111,23114,19874,30953,31584,34508,24035,31608,26345,37055,23266,31643,31677,31719,31747,31786,31822,26898,23008,19876,31859,23007,20046,20132,26578,27685,20141,24569,31691,31878,31936,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35974,19288,21605,27972,35663,31985,29655,32001,36715,24785,25893,23545,31912,19853,19916,25938,24540,22420,31843,29674,29573,32735,28936,19803,24035,24035,32047,24035,26576,23114,23114,27544,23114,33811,22468,23511,23511,32161,23511,23512,32066,24035,33313,24035,24035,24035,23113,27426,32102,23114,23114,28618,32125,23511,32144,23511,23511,33569,20402,24035,27045,24035,24036,23114,23114,28328,23114,30076,32177,23511,23511,30384,23511,30562,24035,24035,24035,26576,23114,23114,23114,23595,32212,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,22635,25753,32233,32257,32277,19829,26577,26597,20211,23008,19876,32322,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,32352,35285,32380,34196,33016,30661,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,32404,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,32422,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,30269,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,19949,24035,23111,32455,19874,31269,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36337,19552,19209,21617,26509,32475,32491,32529,29939,24035,32578,25241,32597,23114,32634,29007,32656,22420,23511,32729,26365,32751,28306,32788,32882,24035,24035,32813,36727,23114,33182,23114,27553,33235,32829,23511,32706,23511,28906,28377,26962,32881,32904,32898,32920,24035,32953,23114,32977,26408,23114,28164,33006,23511,33039,35774,23511,32306,20402,33076,30872,24035,24036,25408,33110,28979,23114,23029,20271,35835,33130,33054,23511,30562,33148,24035,24035,33167,23114,23114,33775,23036,20459,23511,23511,25464,24646,24035,24035,22446,23114,23114,25627,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,31391,33204,33220,33251,33287,26577,26597,20211,33329,19876,33345,23007,20046,20132,26578,27685,28473,22599,31691,33411,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35959,19288,21907,27243,29843,32618,33427,31507,29939,33460,34090,24035,24036,33493,24416,33530,23114,22420,33548,24379,33585,23511,28306,19803,33603,24202,24035,24035,25593,33749,28205,23114,23114,32388,22468,33853,33060,23511,23511,31339,33621,24035,24035,34397,24618,30757,33663,23114,23114,33683,35684,28618,26678,23511,23511,32506,33699,34585,20402,24035,32562,26973,24036,23114,23114,33377,33773,23029,20271,23511,23511,30621,23511,23860,24035,33791,21553,26576,36558,23114,33809,23036,32857,26047,23511,33827,23634,24035,24035,23110,23114,23114,31252,23511,33845,23628,24035,24459,23111,23114,33869,27078,30791,29783,24035,24742,19872,33895,23266,26462,19710,33879,33919,26577,26597,24123,24930,21930,20208,30501,33953,25268,20252,33983,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36322,19552,23390,33634,35154,34008,34024,34058,35544,34106,34128,26811,33151,34144,34169,34212,23114,34228,34244,34278,34315,23511,34331,34347,34380,34413,24035,24663,26576,34429,34453,34477,29534,33811,22468,34499,34524,34557,25170,34580,35436,23937,34601,24035,24341,26453,23113,34638,34662,23114,24236,28618,34684,34703,34729,23511,35352,34753,34799,24035,34815,32558,34848,34888,35814,34923,23165,29137,23606,30326,30730,34939,33023,30562,36848,34979,24035,24847,34996,23114,23114,35032,29695,35054,23511,23511,35091,33296,35124,24296,28235,24361,36276,32772,35067,35189,27301,30855,24852,22452,35211,35237,35316,25500,35270,23405,24304,35304,29362,24036,23114,35332,19829,26577,26597,20211,23008,19876,20208,35368,28823,23920,32336,35405,20141,24569,31691,35421,35479,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35944,22795,21605,33647,35877,35513,30962,35529,34073,35557,24035,24035,20405,31107,23114,23114,23114,35590,34713,23511,23511,23511,35641,19803,29408,32937,25298,24035,35657,23115,27849,24760,35679,26205,22468,23511,35700,24907,24901,35075,31893,34980,24035,24035,24035,24035,23113,35009,23114,23114,23114,28618,35716,30970,23511,23511,23511,34585,23215,24035,24035,24035,24036,35735,23114,23114,23114,27105,35756,35790,23511,23511,23511,35254,35446,24035,24035,31223,35809,23114,23114,23036,36825,35830,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,31031,20355,19872,33903,23266,24036,23114,28686,19829,26577,26597,20211,23008,23424,20208,24711,31065,24486,26578,27685,20141,19773,35851,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36307,19288,21605,35494,19702,32618,33437,31507,29939,25117,24035,27939,24036,27869,23114,26829,23114,22420,23494,23511,33132,23511,28306,19803,24035,34832,24035,24035,26576,23114,25153,23114,23114,33811,22468,23511,23511,35911,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35929,19288,21605,25860,23112,36185,23511,36201,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,26748,24035,24035,24035,24035,24035,36249,23114,23114,23114,23114,28618,28835,23511,23511,23511,23511,34585,20402,24035,27151,24035,26760,23114,27989,23114,23114,36268,20271,23511,24436,23511,29703,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36292,19288,21605,36503,21922,32618,34534,31507,36522,24035,33793,24035,35864,23114,23114,36555,23417,22420,23511,23511,36574,26020,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,36592,24035,24035,36625,24035,24035,23113,23114,32961,23114,23114,29618,29700,23511,29086,23511,23511,34585,20402,36644,24035,24035,24036,29740,23114,23114,23114,29065,36663,31527,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,31451,23112,36684,23511,36700,29939,24035,24035,24035,30185,23114,23114,23114,27526,22420,23511,23511,23511,32865,28306,19803,36743,24035,27017,24035,26576,27535,23114,31432,23114,33811,22468,33271,23511,32128,23511,23512,24694,24035,27196,24035,24035,24035,23113,32459,23114,23114,23114,28618,29700,33829,36762,23511,23511,34585,20402,24035,36746,24035,29722,23114,23114,34437,23114,34907,20271,23511,23511,18801,23511,23206,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,36837,24035,24035,33739,23114,23114,25094,23511,23261,23628,24035,36780,23111,24073,19874,27078,35344,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22720,19288,36799,36866,17466,36890,36864,21991,22211,22987,17556,17575,22288,17486,17509,17525,18373,17631,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22705,19288,19457,36866,17466,36890,36866,19375,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36124,19288,36951,36866,17466,36890,36866,21991,22404,22987,17556,17575,22288,17486,17509,17525,18373,18567,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36979,36995,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18027,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,21529,24035,23112,23033,23511,31507,25377,24035,24035,24035,24036,23114,23114,23114,23114,37040,23511,23511,23511,23511,28086,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,37079,23511,23511,23511,23511,23512,34766,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,37112,37160,18469,36866,17466,36890,36866,17656,37174,22987,17556,17575,22288,17486,17509,17525,18373,18537,22984,17553,17572,22285,18780,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,53264,18,49172,57366,24,8192,28,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,0,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,127011,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,3002368,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2576384,2215936,2215936,2215936,2416640,2424832,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2543616,2215936,2215936,2215936,2215936,2215936,2629632,2215936,2617344,2215936,2215936,2215936,2215936,2215936,2215936,2691072,2215936,2707456,2215936,2715648,2215936,2723840,2764800,2215936,2215936,2797568,2215936,2822144,2215936,2215936,2854912,2215936,2215936,2215936,2912256,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,180224,0,0,2174976,0,0,2170880,2617344,2170880,2170880,2170880,2170880,2170880,2170880,2691072,2170880,2707456,2170880,2715648,2170880,2723840,2764800,2170880,2170880,2797568,2170880,2170880,2797568,2170880,2822144,2170880,2170880,2854912,2170880,2170880,2170880,2912256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2609152,2215936,2215936,2215936,2215936,2215936,2215936,2654208,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,184599,280,0,2174976,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,544,0,546,0,0,2179072,0,0,0,552,0,0,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2158592,2158592,2232320,2232320,0,2240512,2240512,0,0,0,644,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2711552,2170880,2170880,2170880,2170880,2170880,2760704,2768896,2789376,2813952,2170880,2170880,2170880,2875392,2904064,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,167936,0,0,0,0,2174976,0,0,2215936,2215936,2514944,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2592768,2215936,2215936,2215936,2215936,2215936,2215936,2215936,32768,0,0,0,0,0,2174976,32768,0,2633728,2215936,2215936,2215936,2215936,2215936,2215936,2711552,2215936,2215936,2215936,2215936,2215936,2760704,2768896,2789376,2813952,2215936,2215936,2215936,2875392,2904064,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,65819,2215936,2215936,3031040,2215936,3055616,2215936,2215936,2215936,2215936,3092480,2215936,2215936,3125248,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2170880,2170880,2494464,2170880,2170880,0,0,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2641920,2170880,2170880,2170880,2699264,2170880,2727936,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3026944,2170880,2170880,3063808,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,2379776,2215936,2523136,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2596864,2215936,2621440,2215936,2215936,2641920,2215936,2215936,0,0,0,0,0,0,2179072,548,0,0,0,0,287,2170880,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2215936,2215936,2699264,2215936,2727936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2879488,2215936,2916352,2215936,2215936,0,0,0,0,188416,0,2179072,0,0,0,0,0,287,2170880,0,2171019,2171019,2171019,2400395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3031179,2171019,3055755,2171019,2171019,2215936,3133440,2215936,2215936,2215936,3162112,2215936,2215936,3182592,3186688,2215936,0,0,0,0,0,0,0,0,0,0,2171019,2171019,2171019,2171019,2171019,2171019,2523275,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2597003,2171019,2621579,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,4337664,28,2170880,2170880,2170880,2629632,2170880,2170880,2170880,2170880,2719744,2744320,2170880,2170880,2170880,2834432,2838528,2170880,2908160,2170880,2170880,2936832,2215936,2215936,2215936,2215936,2719744,2744320,2215936,2215936,2215936,2834432,2838528,2215936,2908160,2215936,2215936,2936832,2215936,2215936,2985984,2215936,2994176,2215936,2215936,3014656,2215936,3059712,3076096,3088384,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2445312,2215936,2465792,2473984,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171019,2171019,2494603,2171019,2171019,2215936,2215936,2215936,3215360,0,0,0,0,0,0,0,0,0,0,0,0,0,2379776,2170880,2170880,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3016168,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,124,124,0,128,128,2170880,2170880,2170880,3215360,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2535424,2539520,2170880,2170880,2588672,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,0,2387968,2392064,2170880,2170880,2433024,2170880,2170880,2170880,3170304,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,2215936,2215936,2215936,2535424,2539520,2215936,2215936,2588672,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,136,0,2215936,2215936,2920448,2215936,2215936,2215936,2990080,2215936,2215936,2215936,2215936,3051520,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3108864,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3026944,2215936,2215936,3063808,2215936,2215936,3112960,2215936,2215936,2215936,3170304,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2537049,2539520,2170880,2170880,2588672,2170880,2170880,2170880,1508,2170880,2170880,2170880,1512,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2686976,2748416,2170880,2170880,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3121152,2170880,2170880,3145728,3158016,3166208,2170880,2420736,2428928,2170880,2478080,2170880,2170880,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2646016,2670592,0,0,3145728,3158016,3166208,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,0,2170880,2215936,2215936,2580480,2215936,2605056,2637824,2215936,2215936,2686976,2748416,2215936,2215936,2215936,2924544,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,286,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2387968,2392064,2170880,2170880,2433024,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,1625,2170880,2170880,2580480,2170880,2605056,2637824,2170880,647,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2686976,0,0,2748416,2170880,2170880,0,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,0,0,28,28,2170880,3141632,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2170880,2420736,2428928,2752512,2756608,0,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2170880,3141632,2170880,2170880,2490368,2215936,2490368,2215936,2215936,2215936,2547712,2555904,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,245760,0,3129344,2170880,2170880,2490368,2170880,2170880,2170880,0,0,2547712,2555904,2170880,2170880,2170880,0,0,0,0,0,0,0,0,0,2220032,0,0,45056,0,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2158592,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1482,97,97,97,97,97,97,97,1354,97,97,97,97,97,97,97,97,1148,97,97,97,97,97,97,97,2584576,2170880,2170880,1512,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2170880,2850816,2170880,2170880,2170880,3022848,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,287,2170880,2215936,3022848,2170880,2441216,2170880,2527232,0,0,2170880,2600960,2170880,0,2850816,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2596864,2170880,2621440,2170880,2170880,2641920,2170880,2170880,2170880,3022848,2170880,2519040,2170880,2170880,2170880,2170880,2170880,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2170880,2170880,2170880,2514944,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2519040,0,2024,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,2024,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,2170880,2215936,2650112,2965504,2215936,0,0,2170880,2650112,2965504,2170880,2551808,2170880,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,141,45,45,67,67,67,67,67,224,67,67,238,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,0,2551808,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2977792,2977792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53264,18,49172,57366,24,8192,29,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,49172,0,0,0,24,24,24,0,28,28,28,28,102432,127,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,0,0,0,2220032,110630,0,0,0,114730,106539,136,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,4256099,4256099,24,24,0,28,28,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,0,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,2170880,2547712,2555904,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2215936,2215936,543,543,545,545,0,0,2179072,0,550,551,551,0,287,2171166,2171166,18,0,0,0,0,0,0,0,0,2220032,0,0,645,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,149,2584576,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2519040,0,0,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,0,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,53264,18,49172,57366,24,155648,28,102432,155648,155687,114730,106539,0,0,155648,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,0,0,2220032,0,94208,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,208896,18,278528,24,24,0,28,28,53264,18,159765,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,0,28,139394,28,28,102432,131,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,32768,53264,0,18,18,24,24,0,28,28,0,546,0,0,2183168,0,0,552,832,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2170880,2170880,2170880,2170880,2654208,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,1084,0,1088,0,1092,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,937,0,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,644,0,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,826,0,828,0,0,2183168,0,0,830,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2170880,2170880,2633728,2170880,2170880,2170880,2170880,2170880,2170880,2711552,2170880,2170880,2170880,2170880,2170880,2760704,53264,18,49172,57366,24,8192,28,172066,172032,110630,172066,106539,0,0,172032,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,102432,0,98304,0,0,2220032,110630,0,0,0,0,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,45056,0,0,0,53264,18,49172,57366,25,8192,30,102432,0,110630,114730,106539,0,0,176219,53264,18,18,49172,0,57366,0,124,124,124,0,128,128,128,128,102432,128,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,546,0,0,2183168,0,65536,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2646016,2670592,2752512,2756608,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,65536,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,143,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,67,1824,67,1826,67,67,67,67,17,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,120,121,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,67,67,37139,37139,24853,24853,0,0,2179072,548,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,45,45,2033,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,0,369,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,978,0,546,70179,0,2183168,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1013,67,67,67,67,67,67,67,67,67,67,473,67,67,67,67,483,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,97,97,1359,97,97,97,67,67,1584,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,1659,45,45,45,45,45,45,45,45,45,1667,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,45,1668,45,45,45,45,67,67,1694,67,67,67,67,67,67,67,67,67,67,67,67,67,774,67,67,1713,97,97,97,97,97,97,97,0,97,97,1723,97,97,97,97,0,45,45,45,45,45,45,1538,45,45,45,45,45,1559,45,45,1561,45,45,45,45,45,45,45,687,45,45,45,45,45,45,45,45,448,45,45,45,45,45,45,67,67,67,67,1771,1772,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,97,67,67,67,67,67,1821,67,67,67,67,67,67,1827,67,67,67,0,0,0,0,0,0,97,97,1614,97,97,97,97,97,603,97,97,605,97,97,608,97,97,97,97,0,1532,45,45,45,45,45,45,45,45,45,45,450,45,45,45,45,67,67,97,97,97,97,97,97,0,0,1839,97,97,97,97,0,0,97,97,97,97,97,45,45,45,45,45,45,45,67,67,67,67,67,67,67,97,1883,97,1885,97,0,1888,0,97,97,0,97,97,1848,97,97,97,97,1852,45,45,45,45,45,45,45,384,391,45,45,45,45,45,45,45,385,45,45,45,45,45,45,45,45,1237,45,45,45,45,45,45,67,0,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,1951,45,45,45,45,45,45,45,45,67,67,67,67,1963,97,2023,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,1994,67,1995,67,67,67,67,67,67,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,0,0,0,0,2220032,110630,0,0,0,114730,106539,137,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2793472,2805760,2170880,2830336,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,67,67,37139,37139,24853,24853,0,0,281,549,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,2031,2032,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1769,67,0,546,70179,549,549,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,1858,45,641,0,0,0,0,41606,926,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,456,67,0,0,0,1313,0,0,0,1096,1319,0,0,0,0,97,97,97,97,97,97,97,97,1110,97,97,97,97,67,67,67,67,1301,1476,0,0,0,0,1307,1478,0,0,0,0,0,0,0,0,97,97,97,97,1486,97,1487,97,1313,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,67,67,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,97,45,1853,45,1855,45,45,45,45,53264,18,49172,57366,26,8192,31,102432,0,110630,114730,106539,0,0,225368,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,18,49172,163840,57366,0,24,24,229376,0,28,28,28,229376,102432,0,0,0,0,2220167,110630,0,0,0,114730,106539,0,2171019,2171019,2171019,2171019,2592907,2171019,2171019,2171019,2171019,2633867,2171019,2171019,2171019,2171019,2171019,2171019,2654347,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3117195,2171019,2171019,2171019,2171019,2240641,0,0,0,0,0,0,0,0,368,0,140,2171019,2171019,2171019,2416779,2424971,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2617483,2171019,2171019,2642059,2171019,2171019,2171019,2699403,2171019,2728075,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3215499,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2171019,2822283,2171019,2171019,2855051,2171019,2171019,2171019,2912395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3002507,2171019,2171019,2215936,2215936,2494464,2215936,2215936,2215936,2171166,2171166,2416926,2425118,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2576670,2171166,2617630,2171166,2171166,2171166,2171166,2171166,2171166,2691358,2171166,2707742,2171166,2715934,2171166,2724126,2765086,2171166,2171166,2797854,2171166,2822430,2171166,2171166,2855198,2171166,2171166,2171166,2912542,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2793758,2806046,2171166,2830622,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3109150,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2543902,2171166,2171166,2171166,2171166,2171166,2629918,2793611,2805899,2171019,2830475,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,0,546,0,0,2183168,0,0,552,0,2171166,2171166,2171166,2400542,2171166,2171166,2171166,0,2171166,2171166,2171166,0,2171166,2920734,2171166,2171166,2171166,2990366,2171166,2171166,2171166,2171166,3117342,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,0,53264,0,18,18,4329472,2232445,0,2240641,4337664,2711691,2171019,2171019,2171019,2171019,2171019,2760843,2769035,2789515,2814091,2171019,2171019,2171019,2875531,2904203,2171019,2171019,3092619,2171019,2171019,3125387,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3199115,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2793472,2805760,2215936,2830336,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2494464,2170880,2170880,2171166,2171166,2634014,2171166,2171166,2171166,2171166,2171166,2171166,2711838,2171166,2171166,2171166,2171166,2171166,2760990,2769182,2789662,2814238,2171166,2171166,2171166,2875678,2904350,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3199262,2171166,0,0,0,0,0,0,0,0,0,2379915,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2445451,2171019,2465931,2474123,2171019,2171019,3113099,2171019,2171019,3133579,2171019,2171019,2171019,3162251,2171019,2171019,3182731,3186827,2171019,2379776,2879627,2171019,2916491,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3027083,2171019,2171019,3063947,2699550,2171166,2728222,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2879774,2171166,2916638,2171166,2171166,2171166,2171166,2171166,2609438,2171166,2171166,2171166,2171166,2171166,2171166,2654494,2171166,2171166,2171166,2171166,2171166,2445598,2171166,2466078,2474270,2171166,2171166,2171166,2171166,2171166,2171166,2523422,2171019,2437259,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2543755,2171019,2171019,2171019,2584715,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2908299,2171019,2171019,2936971,2171019,2171019,2986123,2171019,2994315,2171019,2171019,3014795,2171019,3059851,3076235,3088523,2171166,2171166,2986270,2171166,2994462,2171166,2171166,3014942,2171166,3059998,3076382,3088670,2171166,2171166,2171166,2171166,2171166,2171166,3027230,2171166,2171166,3064094,2171166,2171166,3113246,2171166,2171166,3133726,2506891,2171019,2171019,2171019,2535563,2539659,2171019,2171019,2588811,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2691211,2171019,2707595,2171019,2715787,2171019,2723979,2764939,2171019,2171019,2797707,2215936,2215936,3170304,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2453790,2457886,2171166,2171166,2171166,2486558,2171166,2171166,2507038,2171166,2171166,2171166,2535710,2539806,2171166,2171166,2588958,2171166,2171166,2171166,2171166,2515230,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2593054,2171166,2171166,2171166,2171166,3051806,2171166,2171166,2171166,2171166,2171166,2171166,3170590,0,2388107,2392203,2171019,2171019,2433163,2171019,2461835,2171019,2171019,2171019,2510987,2171019,2171019,2171019,2171019,2580619,2171019,2605195,2637963,2171019,2171019,2171019,2920587,2171019,2171019,2171019,2990219,2171019,2171019,2171019,2171019,3051659,2171019,2171019,2171019,2453643,2457739,2171019,2171019,2171019,2171019,2171019,2171019,2515083,2171019,2171019,2171019,2171019,2646155,2670731,2752651,2756747,2846859,2961547,2171019,2998411,2171019,3010699,2171019,2171019,2687115,2748555,2171019,2171019,2171019,2924683,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3121291,2171019,2171019,2171019,3170443,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,3145867,3158155,3166347,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,553,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2388254,2392350,2171166,2171166,2433310,2171166,2461982,2171166,2171166,2171166,2511134,2171166,2171166,0,2171166,2171166,2580766,2171166,2605342,2638110,2171166,2171166,2171166,2171166,3031326,2171166,3055902,2171166,2171166,2171166,2171166,3092766,2171166,2171166,3125534,2171166,2171166,2171166,3162398,2171166,2171166,3182878,3186974,2171166,0,0,0,2171019,2171019,2171019,2171019,3109003,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2171166,2687262,0,0,2748702,2171166,2171166,0,2171166,2924830,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2597150,2171166,2621726,2171166,2171166,2642206,2171166,2171166,2171166,2171166,3121438,2171166,2171166,3146014,3158302,3166494,2171019,2420875,2429067,2171019,2478219,2171019,2171019,2171019,2171019,2547851,2556043,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3129483,2215936,2171019,3141771,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2171166,2421022,2429214,2171166,2478366,2171166,2171166,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2646302,2670878,0,0,0,0,37,110630,0,0,0,114730,106539,0,45,45,45,45,45,1405,1406,45,45,45,45,1409,45,45,45,45,45,1415,45,45,45,45,45,45,45,45,45,45,1238,45,45,45,45,67,2752798,2756894,0,2847006,2961694,2171166,2998558,2171166,3010846,2171166,2171166,2171166,3141918,2171019,2171019,2490507,3129344,2171166,2171166,2490654,2171166,2171166,2171166,0,0,2547998,2556190,2171166,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,167,45,45,45,45,185,187,45,45,198,45,45,0,2171166,2171166,2171166,2171166,2171166,2171166,3129630,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2576523,2171019,2171019,2171019,2171019,2171019,2609291,2171019,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2171166,2171166,2494750,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,147,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,3002654,2171166,2171166,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2175257,0,0,2584862,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2171166,2171019,2441355,2171019,2527371,2171019,2601099,2171019,2850955,2171019,2171019,2171019,3022987,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,69632,287,2170880,2215936,3022848,2171166,2441502,2171166,2527518,0,0,2171166,2601246,2171166,0,2851102,2171166,2171166,2171166,2171166,2720030,2744606,2171166,2171166,2171166,2834718,2838814,2171166,2908446,2171166,2171166,2937118,3023134,2171019,2519179,2171019,2171019,2171019,2171019,2171019,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,3215646,0,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2486411,2171019,2171019,2171019,2629771,2171019,2171019,2171019,2171019,2719883,2744459,2171019,2171019,2171019,2834571,2838667,2171019,2519326,0,0,2171166,2171166,0,2171166,2171166,2171166,2396299,2171019,2171019,2171019,2171019,3018891,2396160,2215936,2215936,2215936,2215936,3018752,2396446,0,0,2171166,2171166,2171166,2171166,3019038,2171019,2650251,2965643,2171019,2215936,2650112,2965504,2215936,0,0,2171166,2650398,2965790,2171166,2551947,2171019,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,144,45,45,67,67,67,67,67,228,67,67,67,67,67,67,67,67,67,1929,97,97,97,97,0,0,0,2552094,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2977931,2977792,2978078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,1321,97,131072,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,28,28,0,140,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2584576,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,140,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3002368,2170880,2170880,2215936,2215936,2494464,2215936,2215936,2215936,2215936,2215936,2215936,3215360,544,0,0,0,544,0,546,0,0,0,546,0,0,2183168,0,0,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,0,2170880,2170880,2170880,0,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,552,0,0,0,552,0,287,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,644,0,2215936,2215936,3170304,544,0,546,0,552,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,140,0,0,53264,18,49172,57366,24,8192,28,102432,249856,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,151640,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640,53264,18,49172,57366,24,8192,28,102432,253952,110630,114730,106539,0,0,32856,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,192512,53264,18,18,49172,0,57366,0,2232445,184320,2232445,0,2240641,2240641,184320,2240641,102432,0,0,0,221184,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3108864,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,0,0,0,45056,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,127,127,53264,18,49172,258071,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,204800,53264,18,49172,57366,24,27,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,33,0,33,33,33,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,0,0,0,0,0,0,0,0,0,0,139,2170880,2170880,2170880,2416640,67,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,0,0,97,97,0,97,97,97,45,2030,45,45,45,45,67,1573,67,67,67,67,67,67,67,67,67,67,67,1699,67,67,67,67,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,97,97,97,1355,97,97,97,1358,97,97,97,641,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,45,1187,45,45,45,45,45,0,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,592,97,97,97,97,97,97,97,97,97,97,1531,45,45,45,45,45,45,45,45,45,45,45,45,1680,45,45,45,641,0,924,0,925,41606,0,0,0,0,45,45,45,45,45,45,1186,45,45,45,45,45,45,67,67,37139,37139,24853,24853,0,70179,282,0,0,65820,65820,369,287,97,0,0,97,97,0,97,2028,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1767,67,67,67,0,0,0,0,0,0,1612,97,97,97,97,97,97,0,1785,97,97,97,97,97,97,0,0,97,97,97,97,1790,97,0,0,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,241664,2387968,2392064,2170880,2170880,2433024,53264,19,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,274432,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,270336,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,1134711,53264,18,49172,57366,24,8192,28,102432,0,1126440,1126440,1126440,0,0,1126400,53264,18,49172,57366,24,8192,28,102432,36,110630,114730,106539,0,0,217088,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,94,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,96,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,24666,53264,18,18,49172,0,57366,0,24,24,24,126,28,28,28,28,102432,53264,122,123,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,2170880,2170880,4256099,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1319,0,0,0,0,97,97,97,97,97,97,97,1109,97,97,97,97,1113,132,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,146,150,45,45,45,45,45,175,45,180,45,186,45,189,45,45,203,67,256,67,67,270,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,293,297,97,97,97,97,97,322,97,327,97,333,97,0,0,97,2026,0,2027,97,97,45,45,45,45,45,45,67,67,67,1685,67,67,67,67,67,67,67,1690,67,336,97,97,350,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,2424832,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2617344,2170880,45,439,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,525,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,97,622,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,1527,369,648,45,45,45,45,45,45,45,45,45,659,45,45,45,45,408,45,45,45,45,45,45,45,45,45,45,45,1239,45,45,45,67,729,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,762,67,746,67,67,67,67,67,67,67,67,67,759,67,67,67,67,0,0,0,1477,0,1086,0,0,0,1479,0,1090,67,67,796,67,67,799,67,67,67,67,67,67,67,67,67,67,67,67,1291,67,67,67,811,67,67,67,67,67,816,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,833,97,97,97,97,97,97,97,97,1380,0,0,0,45,45,45,45,45,1185,45,45,45,45,45,45,45,386,45,45,45,45,45,45,45,45,1810,45,45,45,45,45,45,67,97,97,844,97,97,97,97,97,97,97,97,97,857,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,45,45,97,97,97,894,97,97,897,97,97,97,97,97,97,97,97,97,0,0,0,1382,45,45,45,97,909,97,97,97,97,97,914,97,97,97,97,97,97,97,923,67,67,1079,67,67,67,67,67,37689,1085,25403,1089,66365,1093,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,148,1114,97,97,97,97,97,97,1122,97,97,97,97,97,97,97,97,97,606,97,97,97,97,97,97,97,97,97,97,1173,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,145,45,45,67,67,67,67,67,1762,67,67,67,1766,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,1934,67,67,1255,67,67,67,67,67,67,67,67,67,67,67,67,67,1035,67,67,67,67,67,67,1297,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,97,1327,97,97,97,97,97,97,97,97,97,97,97,97,33344,97,97,97,1335,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,97,97,1377,97,97,97,97,97,97,0,1179,0,45,45,45,45,670,45,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,67,67,1438,67,67,1442,67,67,67,67,67,67,67,67,67,67,67,67,1592,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,0,0,1305,0,0,0,0,0,1311,0,0,0,1317,0,0,0,0,0,0,0,97,97,1322,97,97,1491,97,97,1495,97,97,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,1551,45,1553,45,1504,97,97,97,97,97,97,97,97,97,97,1513,97,97,97,97,0,45,45,45,45,1536,45,45,45,45,1540,45,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,67,67,67,1700,67,67,67,97,1648,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,1541,0,97,97,97,97,0,1940,0,97,97,97,97,97,97,45,45,2011,45,45,45,2015,67,67,2017,67,67,67,2021,97,67,67,812,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,97,97,910,97,97,97,97,97,97,97,97,97,97,97,923,0,0,0,45,45,45,45,1184,45,45,45,45,1188,45,45,45,45,1414,45,45,45,1417,45,1419,45,45,45,45,45,443,45,45,45,45,45,45,453,45,45,67,67,67,67,1244,67,67,67,67,1248,67,67,67,67,67,67,67,0,37139,24853,0,0,0,282,41098,65820,97,1324,97,97,97,97,1328,97,97,97,97,97,97,97,97,97,0,0,930,45,45,45,45,97,97,97,97,1378,97,97,97,97,0,1179,0,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,45,975,45,45,45,45,67,67,1923,67,1925,67,67,1927,67,97,97,97,97,97,0,0,97,97,97,97,1985,45,45,45,45,45,45,1560,45,45,45,45,45,45,45,45,45,946,45,45,950,45,45,45,0,97,97,97,1939,0,0,0,97,1943,97,97,1945,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,990,45,45,45,67,257,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,337,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,370,2170880,2170880,2170880,2416640,401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,459,461,67,67,67,67,67,67,67,67,475,67,480,67,67,67,67,67,67,1054,67,67,67,67,67,67,67,67,67,67,1698,67,67,67,67,67,484,67,67,487,67,67,67,67,67,67,67,67,67,67,67,67,67,1459,67,67,97,556,558,97,97,97,97,97,97,97,97,572,97,577,97,97,0,0,1896,97,97,97,97,97,97,1903,45,45,45,45,983,45,45,45,45,988,45,45,45,45,45,45,1195,45,45,45,45,45,45,45,45,45,45,1549,45,45,45,45,45,581,97,97,584,97,97,97,97,97,97,97,97,97,97,97,97,97,1153,97,97,369,0,45,45,45,45,45,45,45,45,45,45,45,662,45,45,45,684,45,45,45,45,45,45,45,45,45,45,45,45,1004,45,45,45,67,67,67,749,67,67,67,67,67,67,67,67,67,761,67,67,67,67,67,67,1068,67,67,67,1071,67,67,67,67,1076,794,795,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,544,97,97,97,97,847,97,97,97,97,97,97,97,97,97,859,97,0,0,2025,97,20480,97,97,2029,45,45,45,45,45,45,67,67,67,1575,67,67,67,67,67,67,67,67,67,1775,67,67,67,97,97,97,97,892,893,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1515,97,993,994,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,992,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,67,1607,67,67,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,97,97,596,97,45,1556,1557,45,45,45,45,45,45,45,45,45,45,45,45,45,45,696,45,1596,1597,67,67,67,67,67,67,67,67,67,67,67,67,67,67,499,67,97,97,97,1621,97,97,97,97,97,97,97,97,97,97,97,97,97,1346,97,97,97,97,1740,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,45,45,67,97,97,97,97,97,97,1836,0,97,97,97,97,97,0,0,97,97,97,1984,97,45,45,45,45,45,45,1808,45,45,45,45,45,45,45,45,67,739,67,67,67,67,67,744,45,45,1909,45,45,45,45,45,45,45,67,1917,67,1918,67,67,67,67,67,67,1247,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,1922,67,67,67,67,67,67,67,97,1930,97,1931,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,1576,67,67,67,67,1580,67,67,0,97,97,1938,97,0,0,0,97,97,97,97,97,97,45,45,45,699,45,45,45,704,45,45,45,45,45,45,45,45,987,45,45,45,45,45,45,45,67,67,97,97,97,97,0,0,97,97,97,2006,97,97,97,97,0,45,1533,45,45,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,722,723,45,45,45,45,45,45,2045,67,67,67,2047,0,0,97,97,97,2051,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,409,45,45,45,45,45,45,45,45,45,1957,45,67,67,67,67,67,1836,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,45,67,67,67,1761,67,67,67,1764,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,45,45,420,45,45,422,45,45,425,45,45,45,45,45,45,45,387,45,45,45,45,397,45,45,45,67,460,67,67,67,67,67,67,67,67,67,67,67,67,67,67,515,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,97,0,2039,97,97,97,97,97,45,45,45,45,1426,45,45,45,67,67,67,67,67,67,67,67,67,1689,67,67,67,97,557,97,97,97,97,97,97,97,97,97,97,97,97,97,97,612,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,896,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,97,45,939,45,45,45,45,943,45,45,45,45,45,45,45,45,45,45,1916,67,67,67,67,67,45,67,67,67,67,67,67,67,1015,67,67,67,67,1019,67,67,67,67,67,67,1271,67,67,67,67,67,67,1277,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,67,67,67,804,67,67,67,67,67,1077,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2543616,2170880,2170880,2170880,2170880,2170880,2629632,1169,97,1171,97,97,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,936,45,45,67,67,214,67,220,67,67,233,67,243,67,248,67,67,67,67,67,67,1298,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,1617,97,0,0,0,45,45,45,1183,45,45,45,45,45,45,45,45,45,393,45,45,45,45,45,45,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,1281,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,776,1323,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,907,45,1412,45,45,45,45,45,45,45,1418,45,45,45,45,45,45,686,45,45,45,690,45,45,695,45,45,67,67,67,67,67,1465,67,67,67,67,67,67,67,67,67,67,67,97,97,97,1712,97,97,97,97,1741,97,97,97,45,45,45,45,45,45,45,45,45,426,45,45,45,45,45,45,67,67,67,1924,67,67,67,67,67,97,97,97,97,97,0,0,97,97,1983,97,97,45,45,1987,45,1988,45,0,97,97,97,97,0,0,0,1942,97,97,97,97,97,45,45,45,700,45,45,45,45,45,45,45,45,45,45,711,45,45,153,45,45,166,45,176,45,181,45,45,188,191,196,45,204,255,258,263,67,271,67,67,0,37139,24853,0,0,0,282,41098,65820,97,97,97,294,97,300,97,97,313,97,323,97,328,97,97,335,338,343,97,351,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,41098,0,140,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,45,1411,67,67,486,67,67,67,67,67,67,67,67,67,67,67,67,67,1251,67,67,501,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,67,67,67,67,1443,67,67,67,67,67,67,67,67,67,67,1263,67,67,67,67,67,97,97,583,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1526,97,598,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,0,97,97,1796,97,97,97,97,97,97,97,45,45,45,45,45,1744,45,45,45,369,0,651,45,653,45,654,45,656,45,45,45,660,45,45,45,45,1558,45,45,45,45,45,45,45,45,1566,45,45,681,45,683,45,45,45,45,45,45,45,45,691,692,694,45,45,45,716,45,45,45,45,45,45,45,45,45,45,45,45,709,45,45,712,45,714,45,45,45,718,45,45,45,45,45,45,45,726,45,45,45,733,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,747,67,67,67,67,67,67,67,67,67,760,67,67,67,0,0,0,0,0,0,97,1613,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,67,764,67,67,67,67,768,67,770,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,1977,67,778,779,781,67,67,67,67,67,67,788,789,67,67,792,793,67,67,67,813,67,67,67,67,67,67,67,67,67,824,37689,544,25403,546,70179,0,0,66365,66365,552,0,836,97,838,97,839,97,841,97,97,97,845,97,97,97,97,97,97,97,97,97,858,97,97,0,1728,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,1802,45,97,97,862,97,97,97,97,866,97,868,97,97,97,97,97,97,0,0,97,97,1788,97,97,97,0,0,97,97,876,877,879,97,97,97,97,97,97,886,887,97,97,890,891,97,97,97,97,97,97,97,899,97,97,97,903,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,1646,97,97,97,97,911,97,97,97,97,97,97,97,97,97,922,923,45,955,45,957,45,45,45,45,45,45,45,45,45,45,45,45,195,45,45,45,45,45,981,982,45,45,45,45,45,45,989,45,45,45,45,45,170,45,45,45,45,45,45,45,45,45,45,411,45,45,45,45,45,67,1023,67,67,67,67,67,67,1031,67,1033,67,67,67,67,67,67,67,817,819,67,67,67,67,67,37689,544,67,1065,67,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,1078,67,67,1081,1082,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2437406,2171166,2171166,97,1115,97,1117,97,97,97,97,97,97,1125,97,1127,97,97,97,0,97,97,97,0,97,97,97,97,1644,97,97,97,0,97,97,97,0,97,97,1642,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,97,316,97,97,97,97,97,97,97,97,97,1159,97,97,97,97,97,97,97,97,97,97,97,97,97,1502,97,97,97,97,97,1172,97,97,1175,1176,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,935,45,45,45,1233,45,45,45,1236,45,45,45,45,45,45,45,67,67,67,67,67,67,1873,67,67,45,45,1218,45,45,45,1223,45,45,45,45,45,45,45,1230,45,45,67,67,215,219,222,67,230,67,67,244,246,249,67,67,67,67,67,67,1882,97,97,97,97,0,0,0,97,97,97,97,97,97,45,1904,45,1905,45,67,67,67,67,67,1258,67,1260,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,67,67,67,1283,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,67,818,67,67,67,67,67,67,37689,544,67,67,1295,67,67,67,67,67,67,67,67,0,0,0,0,0,0,2174976,0,0,97,97,97,1326,97,97,97,97,97,97,97,97,97,97,97,97,97,1514,97,97,97,97,97,1338,97,1340,97,97,97,97,97,97,97,97,97,97,97,1500,97,97,1503,97,1363,97,97,97,97,97,97,97,1370,97,97,97,97,97,97,97,563,97,97,97,97,97,97,578,97,1375,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,685,45,45,45,45,45,45,45,45,45,45,45,1003,45,45,45,45,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1778,97,97,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,609,97,97,97,45,1542,45,45,45,45,45,45,45,1548,45,45,45,45,45,1554,45,1570,1571,45,67,67,67,67,67,67,1578,67,67,67,67,67,67,67,1055,67,67,67,67,67,1061,67,67,1582,67,67,67,67,67,67,67,1588,67,67,67,67,67,1594,67,67,67,67,67,97,2038,0,97,97,97,97,97,2044,45,45,45,995,45,45,45,45,1e3,45,45,45,45,45,45,45,1809,45,1811,45,45,45,45,45,67,1610,1611,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,1618,1647,1649,97,97,97,1652,97,1654,1655,97,0,45,45,45,1658,45,45,67,67,216,67,67,67,67,234,67,67,67,67,252,254,1845,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,945,45,947,45,45,45,45,45,67,67,67,67,67,1881,97,97,97,97,97,0,0,0,97,97,97,97,97,1902,45,45,45,45,45,45,1908,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1921,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,0,97,1937,97,97,1940,0,0,97,97,97,97,97,97,1947,1948,1949,45,45,45,1952,45,1954,45,45,45,45,1959,1960,1961,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,67,67,67,757,67,67,67,67,67,67,1964,67,1966,67,67,67,67,1971,1972,1973,97,0,0,0,97,97,1104,97,97,97,97,97,97,97,97,97,97,884,97,97,97,889,97,97,1978,97,0,0,1981,97,97,97,97,45,45,45,45,45,45,736,45,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,45,67,67,67,67,0,2049,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,933,45,45,45,45,1234,45,45,45,45,45,45,45,45,45,45,67,97,97,288,97,97,97,97,97,97,317,97,97,97,97,97,97,0,0,97,1787,97,97,97,97,0,0,45,45,378,45,45,45,45,45,390,45,45,45,45,45,45,45,424,45,45,45,431,433,45,45,45,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,67,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,97,97,632,97,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,97,97,855,97,97,97,97,67,97,97,97,97,97,97,1837,0,97,97,97,97,97,0,0,0,1897,97,97,97,97,97,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,97,2010,45,45,45,45,45,45,2016,67,67,67,67,67,67,2022,45,2046,67,67,67,0,0,2050,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,932,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,45,45,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,701,702,45,45,705,706,45,45,45,45,45,45,703,45,45,45,45,45,45,45,45,45,719,45,45,45,45,45,725,45,45,45,369,649,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1216,25403,546,70179,0,0,66365,66365,552,834,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,97,1799,97,97,45,45,45,1569,45,45,45,1572,67,67,67,67,67,67,67,67,67,67,67,0,0,0,1306,0,67,67,67,1598,67,67,67,67,67,67,67,67,1606,67,67,1609,97,97,97,1650,97,97,1653,97,97,97,0,45,45,1657,45,45,45,1206,45,45,45,45,45,45,45,45,45,45,45,45,1421,45,45,45,1703,67,67,67,67,67,67,67,67,67,67,97,97,1711,97,97,0,1895,0,97,97,97,97,97,97,45,45,45,45,45,958,45,960,45,45,45,45,45,45,45,45,1913,45,45,1915,67,67,67,67,67,67,67,466,67,67,67,67,67,67,481,67,45,1749,45,45,45,45,45,45,45,45,1755,45,45,45,45,45,173,45,45,45,45,45,45,45,45,45,45,974,45,45,45,45,45,67,67,67,67,67,1773,67,67,67,67,67,67,67,97,97,97,97,1886,0,0,0,97,97,67,2035,2036,67,67,97,0,0,97,2041,2042,97,97,45,45,45,45,1662,45,45,45,45,45,45,45,45,45,45,45,1397,45,45,45,45,151,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,437,205,45,67,67,67,218,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,67,97,97,97,97,298,97,97,97,97,97,97,97,97,97,97,97,870,97,97,97,97,97,97,97,97,352,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,365,0,41098,0,140,45,45,45,45,45,1427,45,45,67,67,67,67,67,67,67,1435,520,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1037,617,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,923,45,1232,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,1919,67,1759,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1021,45,154,45,162,45,45,45,45,45,45,45,45,45,45,45,45,964,45,45,45,206,45,67,67,67,67,221,67,229,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,67,67,755,67,67,67,67,67,67,67,67,785,67,67,67,67,67,67,67,67,802,67,67,67,807,67,67,67,97,97,97,97,353,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,366,0,0,0,140,2170880,2170880,2170880,2416640,402,45,45,45,45,45,45,45,410,45,45,45,45,45,45,45,674,45,45,45,45,45,45,45,45,389,45,394,45,45,398,45,45,45,45,441,45,45,45,45,45,447,45,45,45,454,45,45,67,67,67,67,67,67,67,67,67,67,67,1768,67,67,67,67,67,488,67,67,67,67,67,67,67,496,67,67,67,67,67,67,67,1774,67,67,67,67,67,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,97,97,67,67,523,67,67,527,67,67,67,67,67,533,67,67,67,540,97,97,97,585,97,97,97,97,97,97,97,593,97,97,97,97,97,97,1784,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,0,0,18,18,24,24,0,28,28,97,97,620,97,97,624,97,97,97,97,97,630,97,97,97,637,713,45,45,45,45,45,45,721,45,45,45,45,45,45,45,45,1197,45,45,45,45,45,45,45,45,730,732,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1581,67,45,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,67,775,67,67,67,67,1066,67,67,67,67,67,67,67,67,67,67,67,67,479,67,67,67,67,67,67,1080,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,287,0,0,0,287,0,2379776,2170880,2170880,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,97,920,97,97,0,0,0,0,45,1181,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,45,1219,45,45,45,45,45,45,1226,45,45,45,45,45,45,959,45,45,45,45,45,45,45,45,45,184,45,45,45,45,202,45,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1266,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1279,67,67,67,67,67,272,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,67,1286,67,67,67,67,67,67,67,67,67,1293,67,67,67,1296,67,67,67,67,67,67,67,0,0,0,0,0,281,94,0,0,97,97,97,1366,97,97,97,97,97,97,97,97,97,1373,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,0,97,1376,97,97,97,97,97,97,97,0,0,0,45,45,1384,45,45,67,208,67,67,67,67,67,67,237,67,67,67,67,67,67,67,1069,1070,67,67,67,67,67,67,67,0,37140,24854,0,0,0,0,41098,65821,45,1423,45,45,45,45,45,45,67,67,1431,67,67,67,67,67,67,67,1083,37689,0,25403,0,66365,0,0,0,1436,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1830,67,1452,1453,67,67,67,67,1456,67,67,67,67,67,67,67,67,67,771,67,67,67,67,67,67,1461,67,67,67,1464,67,1466,67,67,67,67,67,67,1470,67,67,67,67,67,67,1587,67,67,67,67,67,67,67,67,1595,1489,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1129,97,1505,1506,97,97,97,97,1510,97,97,97,97,97,97,97,97,97,1163,1164,97,97,97,97,97,1516,97,97,97,1519,97,1521,97,97,97,97,97,97,1525,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,67,67,67,1600,67,67,67,67,67,67,67,67,67,67,67,1301,0,0,0,1307,97,97,1620,97,97,97,97,97,97,97,1627,97,97,97,97,97,97,913,97,97,97,97,919,97,97,97,0,97,97,97,1781,97,97,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,1792,1860,45,1862,1863,45,1865,45,67,67,67,67,67,67,67,67,1875,67,1877,1878,67,1880,67,97,97,97,97,97,1887,0,1889,97,97,18,0,139621,0,0,0,0,0,0,364,237568,0,367,0,97,1893,0,0,0,97,1898,1899,97,1901,97,45,45,45,45,45,2014,45,67,67,67,67,67,2020,67,97,1989,45,1990,45,45,45,67,67,67,67,67,67,1996,67,1997,67,67,67,67,67,273,67,0,37139,24853,0,0,0,0,41098,65820,67,67,97,97,97,97,0,0,97,97,2005,0,97,2007,97,97,18,0,139621,0,0,0,642,0,133,364,0,0,367,41606,0,97,97,2056,2057,0,2059,45,67,0,97,45,67,0,97,45,45,67,209,67,67,67,223,67,67,67,67,67,67,67,67,67,786,67,67,67,791,67,67,45,45,940,45,45,45,45,45,45,45,45,45,45,45,45,45,45,727,45,45,67,67,67,67,67,67,67,67,1016,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,142,45,45,67,210,67,67,67,225,67,67,239,67,67,67,250,67,67,67,67,67,464,67,67,67,67,67,476,67,67,67,67,67,67,67,1709,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,1843,0,67,259,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,289,97,97,97,303,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,97,339,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,0,358,0,0,0,0,0,0,41098,0,140,45,45,45,45,45,1953,45,1955,45,45,45,67,67,67,67,67,67,67,1687,1688,67,67,67,67,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1203,45,458,67,67,67,67,67,67,67,67,67,470,477,67,67,67,67,67,67,67,1970,97,97,97,1974,0,0,0,97,1103,97,97,97,97,97,97,97,97,97,97,97,1372,97,97,97,97,67,522,67,67,67,67,67,67,67,67,67,67,67,536,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,1701,67,555,97,97,97,97,97,97,97,97,97,567,574,97,97,97,97,97,301,97,309,97,97,97,97,97,97,97,97,97,900,97,97,97,905,97,97,97,619,97,97,97,97,97,97,97,97,97,97,97,633,97,97,18,0,139621,0,0,362,0,0,0,364,0,0,367,41606,369,649,45,45,45,45,45,45,45,45,45,45,45,45,663,664,67,67,67,67,750,751,67,67,67,67,758,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,67,1057,1058,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,67,67,67,67,67,67,512,67,67,67,97,97,97,97,895,97,97,97,97,97,97,97,97,97,97,97,902,97,97,97,97,67,67,1051,67,67,67,67,67,67,67,67,67,67,67,1062,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1302,0,0,0,1308,97,97,97,97,1145,97,97,97,97,97,97,97,97,97,97,97,1139,97,97,97,97,1156,97,97,97,97,97,97,1161,97,97,97,97,97,1166,97,97,18,640,139621,0,641,0,0,0,0,364,0,0,367,41606,67,67,67,67,1257,67,67,67,67,67,67,67,67,67,67,67,0,0,1305,0,0,97,97,1337,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1630,97,67,1474,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,2380062,2171166,2171166,97,1529,97,97,0,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,45,45,67,67,67,67,1707,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1891,1739,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,1198,45,1200,45,45,45,45,97,97,1894,0,0,97,97,97,97,97,97,45,45,45,45,45,672,45,45,45,45,45,45,45,45,45,45,45,1420,45,45,45,45,67,67,1965,67,1967,67,67,67,97,97,97,97,0,1976,0,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,97,97,1979,0,0,97,1982,97,97,97,1986,45,45,45,45,45,735,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,1770,67,67,2e3,97,97,97,2002,0,97,97,97,0,97,97,97,97,97,97,1798,97,97,97,45,45,45,2034,67,67,67,67,97,0,0,2040,97,97,97,97,45,45,45,45,1752,45,45,45,1753,1754,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,675,45,45,45,45,45,45,438,45,45,45,45,45,445,45,45,45,45,45,45,45,45,67,1430,67,67,67,67,67,67,67,67,67,524,67,67,67,67,67,531,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1096,97,97,97,621,97,97,97,97,97,628,97,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,665,45,45,45,45,45,45,45,45,45,676,45,45,45,45,45,942,45,45,45,45,45,45,45,45,45,45,707,708,45,45,45,45,763,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,809,810,67,67,67,67,783,67,67,67,67,67,67,67,67,67,67,67,0,1303,0,0,0,97,861,97,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,45,45,956,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,67,67,67,67,1027,67,67,67,67,1032,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1097,1064,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,67,1098,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,331,97,97,97,97,1158,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,1309,0,0,0,1315,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1374,97,45,45,1543,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1240,67,67,1583,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1252,67,97,97,97,1635,97,97,97,0,97,97,97,97,97,97,97,97,1800,97,45,45,45,97,97,1793,97,97,97,97,97,97,97,97,97,97,45,45,45,1743,45,45,45,1746,45,0,97,97,97,97,97,1851,97,45,45,45,45,1856,45,45,45,45,1864,45,45,67,67,1869,67,67,67,67,1874,67,0,97,97,45,67,2058,97,45,67,0,97,45,67,0,97,45,45,67,211,67,67,67,67,67,67,240,67,67,67,67,67,67,67,1444,67,67,67,67,67,67,67,67,67,509,67,67,67,67,67,67,67,67,67,268,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,290,97,97,97,305,97,97,319,97,97,97,330,97,97,18,640,139621,0,641,0,0,0,0,364,0,643,367,41606,97,97,348,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,45,45,380,45,45,45,45,45,45,395,45,45,45,400,369,0,45,45,45,45,45,45,45,45,658,45,45,45,45,45,972,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,745,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,67,67,37689,1086,25403,1090,66365,1094,0,0,97,843,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,1121,97,97,97,97,1126,97,97,97,97,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1400,45,67,67,67,1011,67,67,67,67,67,67,67,67,67,67,67,0,1304,0,0,0,1190,45,45,1193,1194,45,45,45,45,45,1199,45,1201,45,45,45,45,1911,45,45,45,45,45,67,67,67,67,67,67,67,1579,67,67,67,67,45,1205,45,45,45,45,45,45,45,45,1211,45,45,45,45,45,984,45,45,45,45,45,45,45,45,45,45,45,1550,45,45,45,45,45,1217,45,45,45,45,45,45,1225,45,45,45,45,1229,45,45,45,1388,45,45,45,45,45,45,1396,45,45,45,45,45,444,45,45,45,45,45,45,45,45,45,67,67,1574,67,67,67,67,67,67,67,67,67,67,1590,67,67,67,67,67,1254,67,67,67,67,67,1259,67,1261,67,67,67,67,1265,67,67,67,67,67,67,1708,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,0,0,67,67,67,67,1285,67,67,67,67,1289,67,67,67,67,67,67,67,67,37689,1087,25403,1091,66365,1095,0,0,97,97,97,97,1339,97,1341,97,97,97,97,1345,97,97,97,97,97,561,97,97,97,97,97,573,97,97,97,97,97,97,1717,97,0,97,97,97,97,97,97,97,591,97,97,97,97,97,97,97,97,97,1329,97,97,97,97,97,97,97,97,97,97,1351,97,97,97,97,97,97,1357,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,568,97,97,97,97,97,97,97,1365,97,97,97,97,1369,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1399,45,45,45,1413,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1669,45,1422,45,45,1425,45,45,1428,45,1429,67,67,67,67,67,67,67,67,1468,67,67,67,67,67,67,67,67,529,67,67,67,67,67,67,539,67,67,1475,67,0,0,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,97,97,1530,97,0,45,45,1534,45,45,45,45,45,45,45,45,1956,45,45,67,67,67,67,67,67,67,67,67,1599,67,67,1601,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,67,1632,97,1634,0,97,97,97,1640,97,97,97,1643,97,97,1645,97,97,97,97,97,912,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,1660,1661,45,45,45,45,1665,1666,45,45,45,45,45,1670,1692,1693,67,67,67,67,67,1697,67,67,67,67,67,67,67,1702,97,97,1714,1715,97,97,97,97,0,1721,1722,97,97,97,97,97,97,1353,97,97,97,97,97,97,97,97,1362,1726,97,0,0,97,97,97,0,97,97,97,1734,97,97,97,97,97,848,849,97,97,97,97,856,97,97,97,97,97,354,0,53264,0,18,18,24,24,0,28,28,45,45,1750,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1681,45,0,1846,97,97,97,97,97,97,45,45,1854,45,45,45,45,1859,67,67,67,1879,67,67,97,97,1884,97,97,0,0,0,97,97,97,1105,97,97,97,97,97,97,97,97,97,97,1344,97,97,97,1347,97,1892,97,0,0,0,97,97,97,1900,97,97,45,45,45,45,45,997,45,45,45,45,45,45,45,45,45,45,1002,45,45,1005,1006,45,67,67,67,67,67,1926,67,67,1928,97,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,1737,97,0,97,97,97,97,0,0,0,97,97,1944,97,97,1946,45,45,45,1544,45,45,45,45,45,45,45,45,45,45,45,45,190,45,45,45,152,155,45,163,45,45,177,179,182,45,45,45,193,197,45,45,45,1672,45,45,45,45,45,1677,45,1679,45,45,45,45,996,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,67,260,264,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,295,299,302,97,310,97,97,324,326,329,97,97,97,0,97,97,1639,0,1641,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,97,97,97,1523,97,97,97,97,97,97,97,97,1719,97,97,97,97,97,97,97,97,1720,97,97,97,97,97,97,97,312,97,97,97,97,97,97,97,97,1123,97,97,97,97,97,97,97,340,344,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,373,375,419,45,45,45,45,45,45,45,45,45,428,45,45,435,45,45,45,1751,45,45,45,45,45,45,45,45,45,45,45,45,1410,45,45,45,67,67,67,505,67,67,67,67,67,67,67,67,67,514,67,67,67,67,67,67,1969,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,0,97,2064,2065,0,2066,45,521,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,465,67,67,67,474,67,67,67,67,67,67,67,1467,67,67,67,67,67,67,67,67,67,97,97,97,97,97,1933,0,97,97,97,602,97,97,97,97,97,97,97,97,97,611,97,97,18,640,139621,358,641,0,0,0,0,364,0,0,367,0,618,97,97,97,97,97,97,97,97,97,97,631,97,97,97,97,97,881,97,97,97,97,97,97,97,97,97,97,569,97,97,97,97,97,369,0,45,652,45,45,45,45,45,657,45,45,45,45,45,45,1235,45,45,45,45,45,45,45,45,67,67,67,1432,67,67,67,67,67,67,67,766,67,67,67,67,67,67,67,67,773,67,67,67,0,1305,0,1311,0,1317,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,97,0,97,97,97,1724,97,97,97,777,67,67,782,67,67,67,67,67,67,67,67,67,67,67,67,535,67,67,67,67,67,67,67,814,67,67,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,0,97,837,97,97,97,97,97,97,1496,97,97,97,97,97,97,97,97,97,97,918,97,97,97,97,0,842,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1168,97,97,97,97,864,97,97,97,97,97,97,97,97,871,97,97,97,0,1637,97,97,0,97,97,97,97,97,97,97,97,97,97,1801,45,45,97,875,97,97,880,97,97,97,97,97,97,97,97,97,97,97,1151,1152,97,97,97,67,67,67,1040,67,67,67,67,67,67,67,67,67,67,67,67,790,67,67,67,1180,0,649,45,45,45,45,45,45,45,45,45,45,45,45,45,200,45,45,67,67,67,1454,67,67,67,67,67,67,67,67,67,67,67,67,806,67,67,67,0,0,0,1481,0,1094,0,0,97,1483,97,97,97,97,97,97,304,97,97,318,97,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,97,97,1332,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,1633,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,1381,0,0,45,45,45,45,97,97,1727,0,97,97,97,0,97,97,97,97,97,97,97,97,626,97,97,97,97,97,97,636,45,45,1760,67,67,67,67,67,67,67,1765,67,67,67,67,67,67,67,1299,67,67,67,0,0,0,0,0,0,97,97,97,97,1616,97,97,1803,45,45,45,45,1807,45,45,45,45,45,1813,45,45,45,67,67,1684,67,67,67,67,67,67,67,67,67,67,67,822,67,67,37689,544,67,67,1818,67,67,67,67,1822,67,67,67,67,67,1828,67,67,67,67,67,97,0,0,97,97,97,97,97,45,45,45,2012,2013,45,45,67,67,67,2018,2019,67,67,97,67,97,97,97,1833,97,97,0,0,97,97,1840,97,97,0,0,97,97,97,0,97,97,1733,97,1735,97,97,97,0,97,97,97,1849,97,97,97,45,45,45,45,45,1857,45,45,45,1910,45,1912,45,45,1914,45,67,67,67,67,67,67,67,67,67,67,1017,67,67,1020,67,45,1861,45,45,45,45,45,67,67,67,67,67,1872,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,67,1446,67,67,67,67,67,1876,67,67,67,67,67,97,97,97,97,97,0,0,0,1890,97,97,97,97,97,1134,97,97,97,97,97,97,97,97,97,97,570,97,97,97,97,580,1935,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1906,45,67,67,67,67,2048,0,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,931,45,45,45,45,45,45,1674,45,1676,45,45,45,45,45,45,45,446,45,45,45,45,45,45,45,67,67,67,67,1871,67,67,67,67,0,97,97,45,67,0,97,2060,2061,0,2063,45,67,0,97,45,45,156,45,45,45,45,45,45,45,45,45,192,45,45,45,45,1673,45,45,45,45,45,45,45,45,45,45,45,429,45,45,45,45,67,67,67,269,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,349,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,374,45,45,67,67,213,217,67,67,67,67,67,242,67,247,67,253,45,45,698,45,45,45,45,45,45,45,45,45,45,45,45,45,399,45,45,0,0,0,0,925,41606,0,929,0,0,45,45,45,45,45,45,1391,45,45,1395,45,45,45,45,45,45,423,45,45,45,45,45,45,45,436,45,67,67,67,67,1041,67,1043,67,67,67,67,67,67,67,67,67,67,1776,67,67,97,97,97,1099,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,888,97,97,97,1131,97,97,97,97,1135,97,1137,97,97,97,97,97,97,97,1497,97,97,97,97,97,97,97,97,97,883,97,97,97,97,97,97,1310,0,0,0,1316,0,0,0,0,1100,0,0,0,97,97,97,97,97,1107,97,97,97,97,97,97,97,97,1343,97,97,97,97,97,97,1348,0,0,1317,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,1112,97,45,1804,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1868,67,1870,67,67,67,67,67,1817,67,67,1819,67,67,67,67,67,67,67,67,67,67,67,67,823,67,37689,544,67,97,1832,97,97,1834,97,0,0,97,97,97,97,97,0,0,97,97,97,0,1732,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,97,1177,0,0,925,0,0,0,0,97,97,97,97,0,0,1941,97,97,97,97,97,97,45,45,45,1991,1992,45,67,67,67,67,67,67,67,67,67,1998,134,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,941,45,45,944,45,45,45,45,45,45,952,45,45,207,67,67,67,67,67,226,67,67,67,67,67,67,67,67,67,820,67,67,67,67,37689,544,369,650,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1682,25403,546,70179,0,0,66365,66365,552,835,97,97,97,97,97,97,97,1522,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,1725,67,67,67,1695,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,1036,67,67,67,265,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,296,97,97,97,97,314,97,97,97,97,332,334,97,97,97,97,97,1146,1147,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,97,97,345,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,372,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,1213,45,45,45,45,404,406,45,45,45,45,45,45,45,45,45,45,45,45,45,434,45,45,45,440,45,45,45,45,45,45,45,45,451,452,45,45,45,67,1683,67,67,67,1686,67,67,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,490,492,67,67,67,67,67,67,67,67,67,67,67,1447,67,67,1450,67,67,67,67,67,526,67,67,67,67,67,67,67,67,537,538,67,67,67,67,67,506,67,67,508,67,67,511,67,67,67,67,0,1476,0,0,0,0,0,1478,0,0,0,0,0,0,0,0,97,97,1484,97,97,97,97,97,97,865,97,97,97,97,97,97,97,97,97,97,1499,97,97,97,97,97,97,97,97,97,587,589,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,97,97,97,97,623,97,97,97,97,97,97,97,97,634,635,97,97,97,97,97,1160,97,97,97,97,97,97,97,97,97,97,97,1628,97,97,97,97,369,0,45,45,45,45,45,655,45,45,45,45,45,45,45,45,999,45,1001,45,45,45,45,45,45,45,45,715,45,45,45,720,45,45,45,45,45,45,45,45,728,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,840,97,97,97,97,97,1174,97,97,97,97,0,0,925,0,0,0,0,0,0,0,1100,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,97,938,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,680,45,968,45,970,45,973,45,45,45,45,45,45,45,45,45,45,962,45,45,45,45,45,979,45,45,45,45,45,985,45,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,688,45,45,45,45,45,45,45,1007,1008,67,67,67,67,67,1014,67,67,67,67,67,67,67,67,67,1045,67,67,67,67,67,67,67,1038,67,67,67,67,67,67,1044,67,1046,67,1049,67,67,67,67,67,67,800,67,67,67,67,67,67,808,67,67,0,0,0,1102,97,97,97,97,97,1108,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,97,1371,97,97,97,97,97,97,97,97,1132,97,97,97,97,97,97,1138,97,1140,97,1143,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,45,1191,45,45,45,45,45,1196,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,991,45,67,67,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,1048,67,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,97,1386,45,1387,45,45,45,45,45,45,45,45,45,45,45,45,45,455,45,457,45,45,1424,45,45,45,45,45,67,67,67,67,1433,67,1434,67,67,67,67,67,767,67,67,67,67,67,67,67,67,67,67,67,1591,67,1593,67,67,45,45,1805,45,45,45,45,45,45,45,45,45,1814,45,45,1816,67,67,67,67,1820,67,67,67,67,67,67,67,67,67,1829,67,67,67,67,67,815,67,67,67,67,821,67,67,67,37689,544,67,1831,97,97,97,97,1835,0,0,97,97,97,97,97,0,0,97,97,97,1731,97,97,97,97,97,97,97,97,97,853,97,97,97,97,97,97,0,97,97,97,97,1850,97,97,45,45,45,45,45,45,45,45,1547,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,961,45,45,45,45,965,45,967,1907,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1920,0,1936,97,97,97,0,0,0,97,97,97,97,97,97,45,45,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,67,67,97,97,97,97,0,0,28672,97,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,2054,97,97,291,97,97,97,97,97,97,320,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,97,12288,0,925,926,1179,0,45,377,45,45,45,381,45,45,392,45,45,396,45,45,45,45,971,45,45,45,45,45,45,45,45,45,45,45,45,1756,45,45,45,67,67,67,67,463,67,67,67,467,67,67,478,67,67,482,67,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,1472,67,502,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1460,67,97,97,97,97,560,97,97,97,564,97,97,575,97,97,579,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,930,97,599,97,97,97,97,97,97,97,97,97,97,97,97,97,97,872,97,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1758,0,362,0,0,925,41606,0,0,0,0,45,45,934,45,45,45,164,168,174,178,45,45,45,45,45,194,45,45,45,165,45,45,45,45,45,45,45,45,45,199,45,45,45,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,67,1060,67,67,67,67,67,67,1052,1053,67,67,67,67,67,67,67,67,67,67,1063,97,1157,97,97,97,97,97,97,97,97,97,97,97,97,1167,97,97,97,97,97,1379,97,97,97,0,0,0,45,1383,45,45,45,1806,45,45,45,45,45,45,1812,45,45,45,45,67,67,67,67,67,1577,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,1282,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1471,67,45,1402,45,45,45,45,45,45,45,45,45,45,45,45,45,45,417,45,67,1462,67,67,67,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,1517,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1128,97,97,97,97,1636,97,97,97,0,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,1705,67,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,1842,0,0,1779,97,97,97,1782,97,0,0,97,97,97,97,97,97,0,0,97,97,97,1789,97,97,0,0,0,97,1847,97,97,97,97,97,45,45,45,45,45,45,45,45,1675,45,45,45,45,45,45,45,45,737,738,67,740,67,741,67,743,67,67,67,67,67,67,1968,67,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,2062,97,45,67,0,97,45,67,67,97,97,2001,97,0,0,2004,97,97,0,97,97,97,97,1797,97,97,97,97,97,45,45,45,67,261,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,292,97,97,97,97,311,315,321,325,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,97,97,1330,97,97,1333,1334,97,341,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,363,364,0,367,41098,369,140,45,45,45,45,1221,45,45,45,45,45,45,45,45,45,45,45,413,45,45,416,45,376,45,45,45,45,382,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,45,45,403,45,45,45,45,45,45,45,45,45,45,414,45,45,45,418,67,67,67,462,67,67,67,67,468,67,67,67,67,67,67,67,67,1602,67,1604,67,67,67,67,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,500,67,67,67,67,67,1067,67,67,67,67,67,1072,67,67,67,67,67,67,274,0,37139,24853,0,0,0,0,41098,65820,67,67,504,67,67,67,67,67,67,67,510,67,67,67,517,519,541,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,554,97,97,97,559,97,97,97,97,565,97,97,97,97,97,97,97,1718,0,97,97,97,97,97,97,97,898,97,97,97,97,97,97,906,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,597,97,97,97,97,97,1520,97,97,97,97,97,97,97,97,97,97,0,45,1656,45,45,45,97,97,601,97,97,97,97,97,97,97,607,97,97,97,614,616,638,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,369,0,45,45,45,45,45,45,45,45,45,45,661,45,45,45,407,45,45,45,45,45,45,45,45,45,45,45,45,45,1815,45,67,45,667,45,45,45,45,45,45,45,45,45,45,678,45,45,45,421,45,45,45,45,45,45,45,45,45,45,45,45,976,977,45,45,45,682,45,45,45,45,45,45,45,45,45,45,693,45,45,697,67,67,748,67,67,67,67,754,67,67,67,67,67,67,67,67,67,1274,67,67,67,67,67,67,67,67,765,67,67,67,67,769,67,67,67,67,67,67,67,67,67,1589,67,67,67,67,67,67,67,67,780,67,67,784,67,67,67,67,67,67,67,67,67,67,67,1777,67,97,97,97,97,97,97,846,97,97,97,97,852,97,97,97,97,97,97,97,1742,45,45,45,45,45,45,45,1747,97,97,97,863,97,97,97,97,867,97,97,97,97,97,97,97,308,97,97,97,97,97,97,97,97,97,97,12288,1178,925,0,1179,0,97,97,97,878,97,97,882,97,97,97,97,97,97,97,97,97,97,12288,0,925,0,1179,0,908,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,0,954,45,45,45,45,45,45,45,45,45,45,963,45,45,966,45,45,157,45,45,171,45,45,45,45,45,45,45,45,45,45,948,45,45,45,45,45,1022,67,67,1026,67,67,67,1030,67,67,67,67,67,67,67,67,67,1603,1605,67,67,67,1608,67,67,67,1039,67,67,1042,67,67,67,67,67,67,67,67,67,67,471,67,67,67,67,67,0,1100,0,97,97,97,97,97,97,97,97,97,97,97,97,97,904,97,97,97,97,1116,97,97,1120,97,97,97,1124,97,97,97,97,97,97,562,97,97,97,571,97,97,97,97,97,97,97,97,97,1133,97,97,1136,97,97,97,97,97,97,97,97,915,917,97,97,97,97,97,0,97,1170,97,97,97,97,97,97,97,97,0,0,925,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,45,1993,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,1278,67,0,0,0,45,45,1182,45,45,45,45,45,45,45,45,45,1189,1204,45,45,45,1207,45,45,1209,45,1210,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,45,689,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,236,67,67,67,67,67,67,67,801,67,67,67,805,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,1249,67,67,67,67,67,67,507,67,67,67,67,67,67,67,67,67,67,1300,0,0,0,0,0,1267,67,67,1269,67,1270,67,67,67,67,67,67,67,67,67,1280,97,1349,97,1350,97,97,97,97,97,97,97,97,97,1360,97,97,97,0,1980,97,97,97,97,97,45,45,45,45,45,45,673,45,45,45,45,677,45,45,45,45,1401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,953,67,1437,67,1440,67,67,67,67,1445,67,67,67,1448,67,67,67,67,67,67,1029,67,67,67,67,67,67,67,67,67,67,1825,67,67,67,67,67,1473,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,1320,0,834,97,97,97,97,1490,97,1493,97,97,97,97,1498,97,97,97,1501,97,97,97,0,97,1638,97,0,97,97,97,97,97,97,97,97,916,97,97,97,97,97,97,0,1528,97,97,97,0,45,45,45,1535,45,45,45,45,45,45,45,1867,67,67,67,67,67,67,67,67,67,97,97,97,97,1932,0,0,1555,45,45,45,45,45,45,45,45,45,45,45,45,45,1567,45,45,158,45,45,172,45,45,45,183,45,45,45,45,201,45,45,67,212,67,67,67,67,231,235,241,245,67,67,67,67,67,67,493,67,67,67,67,67,67,67,67,67,67,472,67,67,67,67,67,97,97,97,97,1651,97,97,97,97,97,0,45,45,45,45,45,45,45,1539,45,45,45,67,1704,67,1706,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,1841,97,0,1844,97,97,97,97,1716,97,97,97,0,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1385,1748,45,45,45,45,45,45,45,45,45,45,45,45,45,1757,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,97,97,1780,97,97,97,0,0,1786,97,97,97,97,97,0,0,97,97,1730,0,97,97,97,97,97,1736,97,1738,67,97,97,97,97,97,97,0,1838,97,97,97,97,97,0,0,97,1729,97,0,97,97,97,97,97,97,97,97,1162,97,97,97,1165,97,97,97,45,1950,45,45,45,45,45,45,45,45,1958,67,67,67,1962,67,67,67,67,67,1246,67,67,67,67,67,67,67,67,67,67,67,97,1710,97,97,97,1999,67,97,97,97,97,0,2003,97,97,97,0,97,97,2008,2009,45,67,67,67,67,0,0,97,97,97,97,45,2052,67,2053,0,0,0,0,925,41606,0,0,930,0,45,45,45,45,45,45,1392,45,1394,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,45,1563,1565,45,45,45,1568,0,97,2055,45,67,0,97,45,67,0,97,45,67,28672,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,679,45,45,67,67,266,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,346,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,362,0,364,0,367,41098,369,140,371,45,45,45,379,45,45,45,388,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,449,45,45,45,45,45,67,67,542,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,97,97,97,97,1622,97,97,97,97,97,97,97,1629,97,97,0,1794,1795,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1745,45,45,97,639,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,45,731,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,251,67,67,67,67,67,798,67,67,67,67,67,67,67,67,67,67,67,67,1073,67,67,67,860,97,97,97,97,97,97,97,97,97,97,97,97,97,97,873,0,0,1101,97,97,97,97,97,97,97,97,97,97,97,97,97,921,97,0,67,67,67,67,1245,67,67,67,67,67,67,67,67,67,67,67,67,1250,67,67,1253,0,0,1312,0,0,0,1318,0,0,0,0,0,0,97,97,97,97,1106,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,97,1155,97,97,1325,97,97,97,97,97,97,97,97,97,97,97,97,97,1141,97,97,67,67,1439,67,1441,67,67,67,67,67,67,67,67,67,67,67,67,1264,67,67,67,97,97,1492,97,1494,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,97,67,67,67,2037,67,97,0,0,97,97,97,2043,97,45,45,45,442,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,232,67,67,67,67,67,67,67,67,1823,67,67,67,67,67,67,67,67,97,97,97,97,1975,0,0,97,874,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1142,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,65,86,117,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,63,84,115,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,61,82,113,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,59,80,111,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,57,78,109,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,55,76,107,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,53,74,105,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,51,72,103,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,49,70,101,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,47,68,99,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,45,67,97,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,213085,53264,18,49172,57366,24,8192,28,102432,0,0,0,44,0,0,32863,53264,18,49172,57366,24,8192,28,102432,0,41,41,41,0,0,1138688,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,89,53264,18,18,49172,0,57366,0,24,24,24,0,127,127,127,127,102432,67,262,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,342,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,360,0,0,364,0,367,41098,369,140,45,45,45,45,717,45,45,45,45,45,45,45,45,45,45,45,412,45,45,45,45,45,67,1009,67,67,67,67,67,67,67,67,67,67,67,67,67,1292,67,67,1294,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,1615,97,97,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,66,87,118,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,64,85,116,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,62,83,114,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,60,81,112,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,58,79,110,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,56,77,108,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,54,75,106,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,52,73,104,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,50,71,102,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,48,69,100,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,46,67,98,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,233472,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,69724,53264,18,18,49172,0,57366,262144,24,24,24,0,28,28,28,28,102432,45,45,161,45,45,45,45,45,45,45,45,45,45,45,45,45,710,45,45,28,139621,359,0,0,0,364,0,367,41098,369,140,45,45,45,45,1389,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,45,67,503,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1449,67,67,97,600,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1154,97,0,0,0,0,925,41606,927,0,0,0,45,45,45,45,45,45,1866,67,67,67,67,67,67,67,67,67,67,772,67,67,67,67,67,45,45,969,45,45,45,45,45,45,45,45,45,45,45,45,45,951,45,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,45,0,0,0,1314,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1488,67,67,267,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,347,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,361,0,0,364,0,367,41098,369,140,45,45,45,45,734,45,45,45,67,67,67,67,67,742,67,67,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,1214,45,45,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1361,97,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,45,45,0,0,0,0,2220032,0,0,1130496,0,0,0,0,2170880,2171020,2170880,2170880,18,0,0,131072,0,0,0,90112,0,2220032,0,0,0,0,0,0,0,0,97,97,97,1485,97,97,97,97,0,45,45,45,45,45,1537,45,45,45,45,45,1390,45,1393,45,45,45,45,1398,45,45,45,2170880,2171167,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,0,0,0,0,0,2183168,0,0,0,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2721252,2744320,2170880,2170880,2170880,2834432,2840040,2170880,2908160,2170880,2170880,2936832,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3014656,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,0,0,0,0,2220032,0,0,0,1142784,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3215360,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,543,0,545,0,0,2183168,0,0,831,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,2170880,2170880,3092480,2170880,2170880,3125248,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,0,0,0,67,67,37139,37139,24853,24853,0,0,0,0,0,65820,65820,0,287,97,97,97,97,97,1783,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,1791,0,0,546,70179,0,0,0,0,552,0,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,97,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,0,0,147456,0,0,0,0,925,41606,0,928,0,0,45,45,45,45,45,45,998,45,45,45,45,45,45,45,45,45,1562,45,1564,45,45,45,45,0,2158592,2158592,0,0,0,0,2232320,2232320,2232320,0,2240512,2240512,2240512,2240512,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640],r.EXPECTED=[291,300,304,341,315,309,305,295,319,323,327,329,296,333,337,339,342,346,350,294,356,360,312,367,352,371,363,375,379,383,387,391,395,726,399,405,518,684,405,405,405,405,808,405,405,405,512,405,405,405,431,405,405,406,405,405,404,405,405,405,405,405,405,405,908,631,410,415,405,414,419,608,405,429,602,405,435,443,405,441,641,478,405,447,451,450,456,643,461,460,762,679,465,469,741,473,477,482,486,492,932,931,523,498,504,720,405,510,596,405,516,941,580,522,929,527,590,589,897,939,534,538,547,551,555,559,563,567,571,969,575,708,690,689,579,584,634,405,594,731,405,600,882,405,606,895,786,452,612,405,615,620,876,624,628,638,647,651,655,659,663,667,676,683,688,695,694,791,405,699,437,405,706,714,405,712,825,870,405,718,724,769,768,823,730,735,745,751,422,755,759,425,766,902,810,587,775,888,887,405,773,992,405,779,962,405,785,781,986,790,795,797,506,500,499,801,805,814,820,829,833,837,841,845,849,853,857,861,616,865,869,868,488,405,874,816,405,880,738,405,886,892,543,405,901,906,913,912,918,494,541,922,926,936,945,949,953,957,530,966,973,960,702,701,405,979,981,405,985,747,405,990,998,914,405,996,1004,672,975,974,1014,1002,1008,670,1012,405,405,405,405,405,401,1018,1022,1026,1106,1071,1111,1111,1111,1082,1145,1030,1101,1034,1038,1106,1106,1106,1106,1046,1206,1052,1106,1072,1111,1111,1042,1134,1065,1111,1112,1056,1160,1207,1062,1204,1208,1069,1106,1106,1106,1076,1111,1207,1161,1122,1205,1064,1094,1106,1106,1107,1111,1111,1111,1078,1086,1207,1092,1098,1046,1058,1106,1106,1110,1111,1111,1116,1120,1161,1126,1202,1104,1106,1145,1146,1129,1138,1088,1151,1048,1157,1153,1132,1141,1165,1107,1111,1172,1179,1109,1183,1175,1143,1147,1187,1108,1191,1195,1144,1199,1168,1212,1216,1220,1224,1228,1232,1236,1557,1247,1241,1241,1038,1434,1241,1241,1241,1241,1254,1275,1617,1241,1280,1287,1241,1241,1241,1287,1241,2114,1291,1241,1243,1241,2049,1824,2094,2095,1520,1309,1241,1241,1302,1241,1321,1311,1241,1241,1313,1778,1325,1336,1241,1241,1325,1330,1353,1241,1241,1695,1354,1241,1241,1241,1294,1686,1331,1241,1696,1368,1241,1338,1370,1241,1392,1399,1364,2017,1406,2016,1405,1716,1406,1407,1422,1417,1421,1241,1241,1241,1349,1426,1241,1774,1756,1241,1773,1241,1241,1345,1964,1812,1432,1241,1241,1345,1993,1459,1241,1241,1241,1395,1848,1767,1465,1241,1241,1394,1847,1242,1477,1241,1241,1428,1241,1445,1492,1241,1241,1438,1241,1499,1241,1241,1241,1455,1241,1818,1448,1241,1250,1241,2026,1623,1449,1241,1612,1616,1241,1614,1241,1257,1241,1241,1985,1292,1586,1512,1241,1517,2050,1526,1674,1519,1524,1647,2051,1532,1537,1551,1544,1550,1555,1561,1571,1578,1584,1590,1591,1653,1595,1602,1606,1610,1634,1628,1640,1633,1645,1241,1241,1241,1469,1241,1970,1651,1241,1270,1241,1241,1819,1449,1241,1293,1664,1241,1241,1481,1485,1574,1672,1241,1241,1513,1317,1487,1684,1241,1241,1533,1299,1694,1241,1241,1295,1241,1241,1241,1546,1700,1241,1241,1707,1241,1713,1241,1849,1715,1241,1720,1241,1276,1267,1241,1241,2107,1657,1864,1241,1881,1241,1326,1292,1241,1685,1358,1724,1338,1241,1363,1362,1342,1340,1361,1339,1833,1372,1360,1833,1833,1342,1343,1835,1341,1731,1738,1344,1241,1745,1241,1379,1241,1241,2092,1241,1388,1761,1754,1241,1386,1241,1400,1760,1241,1241,1241,1598,1734,1241,1241,1241,1635,1645,1241,1780,1766,1241,1241,1332,1771,1241,1241,1629,2079,1241,1242,1784,1241,1241,1680,1639,2063,1790,1241,1241,1741,1241,1241,1800,1241,1241,1762,1473,1241,1806,1241,1241,1786,1240,1709,1241,1241,1241,1668,1811,1241,1940,1241,1401,1974,1241,1408,1413,1382,1241,1816,1241,1241,1802,2086,1811,1241,1817,1945,1823,2095,2095,2047,2094,2046,2080,1241,1409,1312,1376,2096,2048,1241,1241,1807,1241,1241,1241,2035,1241,1241,1828,1241,2057,2061,1241,1241,1843,1241,2059,1241,1241,1241,1690,1847,1241,1241,1241,1703,2102,1848,1241,1241,1853,1292,1848,1241,2016,1857,1241,2002,1868,1241,1436,1241,1241,1271,1305,1241,1874,1241,1241,1884,2037,1892,1241,1890,1241,1461,1241,1241,1795,1241,1241,1891,1241,1878,1241,1888,1241,1888,1905,1896,2087,1912,1903,1241,1911,1906,1916,1905,2027,1863,1925,2088,1859,1861,1922,1927,1931,1935,1494,1241,1241,1918,1907,1939,1917,1944,1949,1241,1241,1451,1955,1241,1241,1241,1796,1727,2061,1241,1241,1899,1241,1660,1968,1241,1241,1951,1678,1978,1241,1241,1241,1839,1241,1241,1984,1982,1241,1488,1241,1241,1624,1450,1989,1241,1241,1241,1870,1995,1292,1241,1241,1958,1261,1241,1996,1241,1241,1241,2039,2008,1241,1241,1750,2e3,1241,1256,2001,1960,1241,1564,1241,1504,1241,1241,1442,1241,1241,1564,1528,1263,1241,1508,1241,1241,1468,1498,2006,1540,2015,1539,2014,1748,2013,1539,1831,2014,2012,1500,1567,2022,2021,1241,1580,1241,1241,2033,2037,1791,2045,2031,1241,1621,1241,1641,2044,1241,1241,1241,2093,1241,1241,2055,1241,1241,2067,1241,1283,1241,1241,1241,2101,2071,1241,1241,1241,2073,1848,2040,1241,1241,1241,2077,1241,1241,2106,1241,1241,2084,1241,2111,1241,1241,1381,1380,1241,1241,1241,2100,1241,2129,2118,2122,2126,2197,2133,3010,2825,2145,2698,2156,2226,2160,2161,2165,2174,2293,2194,2630,2201,2203,2152,3019,2226,2263,2209,2213,2218,2269,2292,2269,2269,2184,2226,2238,2148,2151,3017,2245,2214,2269,2269,2185,2226,2292,2269,2291,2269,2269,2269,2292,2205,3019,2226,2226,2160,2160,2160,2261,2160,2160,2160,2262,2276,2160,2160,2277,2216,2283,2216,2269,2269,2268,2269,2267,2269,2269,2269,2271,2568,2292,2269,2293,2269,2182,2190,2269,2186,2226,2226,2226,2226,2227,2160,2160,2160,2160,2263,2160,2275,2277,2282,2215,2217,2269,2269,2291,2269,2269,2293,2291,2269,2220,2269,2295,2294,2269,2269,2305,2233,2262,2278,2218,2269,2234,2226,2226,2228,2160,2160,2160,2289,2220,2294,2294,2269,2269,2304,2269,2160,2160,2287,2269,2269,2305,2269,2269,2312,2269,2269,2225,2226,2160,2287,2289,2219,2304,2295,2314,2234,2226,2314,2269,2226,2226,2160,2288,2219,2222,2304,2296,2269,2224,2160,2160,2269,2302,2294,2314,2224,2226,2288,2220,2294,2269,2290,2269,2269,2293,2269,2269,2269,2269,2270,2221,2313,2225,2227,2160,2300,2269,2225,2261,2309,2234,2229,2223,2318,2318,2318,2328,2336,2340,2344,2350,2637,2712,2358,2362,2372,2135,2378,2398,2135,2135,2135,2135,2136,2417,2241,2135,2378,2135,2135,2980,2984,2135,3006,2135,2135,2135,2945,2931,2425,2400,2135,2135,2135,2954,2135,2481,2433,2135,2135,2988,2824,2135,2135,2482,2434,2135,2135,2440,2445,2452,2135,2135,2998,3002,2961,2441,2446,2453,2463,2974,2135,2135,2135,2140,2642,2709,2459,2470,2465,2135,2135,3005,2135,2135,2987,2823,2458,2469,2464,2975,2135,2135,2135,2353,2488,2447,2324,2974,2135,2409,2459,2448,2135,2961,2487,2446,2476,2323,2973,2135,2135,2135,2354,2476,2974,2135,2135,2135,2957,2135,2135,2960,2135,2135,2135,2363,2409,2459,2474,2465,2487,2571,2973,2135,2135,2168,2973,2135,2135,2135,2959,2135,2135,2135,2506,2135,2957,2488,2170,2135,2135,2135,2960,2135,2818,2493,2135,2135,3033,2135,2135,2135,2934,2819,2494,2135,2135,2135,2976,2780,2499,2135,2135,2135,3e3,2968,2135,2935,2135,2135,2135,2364,2507,2135,2135,2934,2135,2135,2780,2492,2507,2135,2135,2506,2780,2135,2135,2782,2780,2135,2782,2135,2783,2374,2514,2135,2135,2135,3007,2530,2974,2135,2135,2135,3008,2135,2135,2134,2135,2526,2531,2975,2135,2135,3042,2581,2575,2956,2135,2135,2135,2394,2135,2508,2535,2840,2844,2495,2135,2135,2136,2684,2537,2842,2846,2135,2136,2561,2581,2551,2536,2841,2845,2975,3043,2582,2843,2555,2135,3040,3044,2538,2844,2975,2135,2135,2253,2644,2672,2542,2554,2135,2135,2346,2873,2551,2555,2135,2135,2135,2381,2559,2565,2538,2553,2135,2560,2914,2576,2590,2135,2135,2135,2408,2136,2596,2624,2135,2135,2135,2409,2135,2618,2597,3008,2135,2135,2380,2956,2601,2135,2135,2135,2410,2620,2624,2135,2136,2383,2135,2135,2783,2623,2135,2135,2393,2888,2136,2621,3008,2135,2618,2618,2622,2135,2135,2405,2414,2619,2384,2624,2135,2136,2950,2135,2138,2135,2139,2135,2604,2623,2135,2140,2878,2665,2957,2622,2135,2135,2428,2762,2606,2612,2135,2135,2501,2586,2604,3038,2135,2604,3036,2387,2958,2386,2135,2141,2135,2421,2387,2385,2135,2385,2384,2384,2135,2386,2628,2384,2135,2135,2501,2596,2591,2135,2135,2135,2400,2135,2634,2135,2135,2559,2580,2575,2648,2135,2135,2135,2429,2649,2135,2135,2135,2435,2654,2658,2135,2135,2135,2436,2649,2178,2659,2135,2135,2595,2601,2669,2677,2135,2135,2616,2957,2879,2665,2691,2135,2363,2367,2900,2878,2664,2690,2975,2877,2643,2670,2974,2671,2975,2135,2135,2619,2608,2669,2673,2135,2135,2653,2177,2672,2135,2135,2135,2486,2168,2251,2255,2695,2974,2709,2135,2135,2135,2487,2169,2399,2716,2975,2135,2363,2770,2776,2640,2717,2135,2135,2729,2135,2135,2641,2718,2135,2135,2135,2505,2135,2640,2257,2974,2135,2727,2975,2135,2365,2332,2895,2957,2135,2959,2135,2365,2749,2754,2959,2958,2958,2135,2380,2793,2799,2135,2735,2738,2135,2381,2135,2135,2940,2974,2135,2744,2135,2135,2739,2519,2976,2745,2135,2135,2135,2509,2755,2135,2135,2135,2510,2772,2778,2135,2135,2740,2520,2135,2771,2777,2135,2135,2759,2750,2792,2798,2135,2135,2781,2392,2779,2135,2135,2135,2521,2135,2679,2248,2135,2135,2681,2480,2135,2135,2786,3e3,2135,2679,2683,2135,2135,2416,2135,2135,2135,2525,2135,2730,2135,2135,2135,2560,2581,2135,2805,2135,2135,2804,2962,2832,2974,2135,2382,2135,2135,2958,2135,2135,2960,2135,2829,2833,2975,2961,2965,2969,2973,2968,2972,2135,2135,2135,2641,2135,2515,2966,2970,2851,2478,2135,2135,2808,2135,2809,2135,2135,2135,2722,2852,2479,2135,2135,2815,2135,2135,2766,2853,2480,2135,2857,2479,2135,2388,2723,2135,2364,2331,2894,2858,2480,2135,2135,2850,2478,2135,2135,2135,2806,2864,2135,2399,2256,2974,2865,2135,2135,2862,2135,2135,2135,2685,2807,2865,2135,2135,2807,2863,2135,2135,2135,2686,2884,2807,2135,2809,2807,2135,2135,2807,2806,2705,2810,2808,2700,2869,2702,2702,2702,2704,2883,2135,2135,2135,2730,2884,2135,2135,2135,2731,2321,2546,2135,2135,2876,2255,2889,2322,2547,2135,2401,2135,2135,2135,2949,2367,2893,2544,2973,2906,2973,2135,2135,2877,2663,2368,2901,2907,2974,2366,2899,2905,2972,2920,2974,2135,2135,2911,2900,2920,2363,2913,2918,2465,2941,2975,2135,2135,2924,2928,2974,2945,2931,2135,2135,2135,2765,2136,2955,2135,2135,2939,2931,2380,2135,2135,2380,2135,2135,2135,2780,2507,2137,2135,2137,2135,2139,2135,2806,2810,2135,2135,2135,2992,2135,2135,2962,2966,2970,2974,2135,2135,2787,3014,2135,2521,2993,2135,2135,2135,2803,2135,2135,2135,2618,2607,2997,3001,2135,2135,2963,2967,2971,2975,2135,2135,2791,2797,2135,3009,2999,3003,2787,3001,2135,2135,2964,2968,2785,2999,3003,2135,2135,2135,2804,2785,2999,3004,2135,2135,2135,2807,2135,2135,3023,2135,2135,2135,2811,2135,2135,3027,2135,2135,2135,2837,2968,3028,2135,2135,2135,2875,2135,2784,3029,2135,2408,2457,2446,0,14,0,-2120220672,1610612736,-2074083328,-2002780160,-2111830528,1073872896,1342177280,1075807216,4096,16384,2048,8192,0,8192,0,0,0,0,1,0,0,0,2,0,-2145386496,8388608,1073741824,0,2147483648,2147483648,2097152,2097152,2097152,536870912,0,0,134217728,33554432,1536,268435456,268435456,268435456,268435456,128,256,32,0,65536,131072,524288,16777216,268435456,2147483648,1572864,1835008,640,32768,65536,262144,1048576,2097152,196608,196800,196608,196608,0,131072,131072,131072,196608,196624,196608,196624,196608,196608,128,4096,16384,16384,2048,0,4,0,0,2147483648,2097152,0,1024,32,32,0,65536,1572864,1048576,32768,32768,32768,32768,196608,196608,196608,64,64,196608,196608,131072,131072,131072,131072,268435456,268435456,64,196736,196608,196608,196608,131072,196608,196608,16384,4,4,4,2,32,32,65536,1048576,12582912,1073741824,0,0,2,8,16,96,2048,32768,0,0,131072,268435456,268435456,268435456,256,256,196608,196672,196608,196608,196608,196608,4,0,256,256,256,256,32,32,32768,32,32,32,32,32768,268435456,268435456,268435456,196608,196608,196608,196624,196608,196608,196608,16,16,16,268435456,196608,64,64,64,196608,196608,196608,196672,268435456,64,64,196608,196608,16,196608,196608,196608,268435456,64,196608,131072,262144,4194304,25165824,33554432,134217728,268435456,268435456,196608,262152,8,256,512,3072,16384,200,-1073741816,8392713,40,8392718,520,807404072,40,520,100663304,0,0,-540651761,-540651761,257589048,0,262144,0,0,3,8,256,0,4,6,4100,8388612,0,0,0,3,4,8,256,512,1024,0,2097152,0,0,-537854471,-537854471,0,100663296,0,0,1,2,0,0,0,16384,0,0,0,96,14336,0,0,0,7,8,234881024,0,0,0,8,0,0,0,0,262144,0,0,16,64,384,512,0,1,1,0,12582912,0,0,0,0,33554432,67108864,-606084144,-606084144,-606084138,0,0,28,32,768,1966080,-608174080,0,0,0,14,35056,16,64,896,24576,98304,98304,131072,262144,524288,1048576,4194304,25165824,1048576,62914560,134217728,-805306368,0,384,512,16384,65536,131072,262144,29360128,33554432,134217728,268435456,1073741824,2147483648,262144,524288,1048576,29360128,33554432,524288,1048576,16777216,33554432,134217728,268435456,1073741824,0,0,0,123856,1966080,0,64,384,16384,65536,131072,16384,65536,524288,268435456,2147483648,0,0,524288,2147483648,0,0,1,16,0,256,524288,0,0,0,25,96,128,-537854471,0,0,0,32,7404800,-545259520,0,0,0,60,0,249,64768,1048576,6291456,6291456,25165824,100663296,402653184,1073741824,96,128,1280,2048,4096,57344,6291456,57344,6291456,8388608,16777216,33554432,201326592,1342177280,2147483648,0,57344,6291456,8388608,100663296,134217728,2147483648,0,0,0,1,8,16,64,128,64,128,256,1024,131072,131072,131072,262144,524288,16777216,57344,6291456,8388608,67108864,134217728,64,256,1024,2048,4096,57344,64,256,0,24576,32768,6291456,67108864,134217728,0,1,64,256,24576,32768,4194304,32768,4194304,67108864,0,0,64,256,0,0,24576,32768,0,16384,4194304,67108864,64,16384,0,0,1,64,256,16384,4194304,67108864,0,0,0,16384,0,16384,16384,0,-470447874,-470447874,-470447874,0,0,128,0,0,8,96,2048,32768,262144,8388608,35056,1376256,-471859200,0,0,14,16,224,2048,32768,2097152,4194304,8388608,-486539264,0,96,128,2048,32768,262144,2097152,262144,2097152,8388608,33554432,536870912,1073741824,2147483648,0,1610612736,2147483648,0,0,1,524288,1048576,12582912,0,0,0,151311,264503296,2097152,8388608,33554432,1610612736,2147483648,262144,8388608,33554432,536870912,67108864,4194304,0,4194304,0,4194304,4194304,0,0,524288,8388608,536870912,1073741824,2147483648,1,4097,8388609,96,2048,32768,1073741824,2147483648,0,96,2048,2147483648,0,0,96,2048,0,0,1,12582912,0,0,0,0,1641895695,1641895695,0,0,0,249,7404800,15,87808,1835008,1639972864,0,768,5120,16384,65536,1835008,1835008,12582912,16777216,1610612736,0,3,4,8,768,4096,65536,0,0,256,512,786432,8,256,512,4096,16384,1835008,16384,1835008,12582912,1610612736,0,0,0,256,0,0,0,4,8,16,32,1,2,8,256,16384,524288,16384,524288,1048576,12582912,1610612736,0,0,0,8388608,0,0,0,524288,4194304,0,0,0,8388608,-548662288,-548662288,-548662288,0,0,256,16384,65536,520093696,-1073741824,0,0,0,16777216,0,16,32,960,4096,4980736,520093696,1073741824,0,32,896,4096,57344,1048576,6291456,8388608,16777216,100663296,134217728,268435456,2147483648,0,512,786432,4194304,33554432,134217728,268435456,0,786432,4194304,134217728,268435456,0,524288,4194304,268435456,0,0,0,0,0,4194304,4194304,-540651761,0,0,0,2,4,8,16,96,128,264503296,-805306368,0,0,0,8,256,512,19456,131072,3072,16384,131072,262144,8388608,16777216,512,1024,2048,16384,131072,262144,131072,262144,8388608,33554432,201326592,268435456,0,3,4,256,1024,2048,57344,16384,131072,8388608,33554432,134217728,268435456,0,3,256,1024,16384,131072,33554432,134217728,1073741824,2147483648,0,0,256,524288,2147483648,0,3,256,33554432,134217728,1073741824,0,1,2,33554432,1,2,134217728,1073741824,0,1,2,134217728,0,0,0,64,0,0,0,16,32,896,4096,786432,4194304,16777216,33554432,201326592,268435456,1073741824,2147483648,0,0,0,15,0,4980736,4980736,4980736,70460,70460,3478332,0,0,1008,4984832,520093696,60,4864,65536,0,0,0,12,16,32,256,512,4096,65536,0,0,0,67108864,0,0,0,12,0,256,512,65536,0,0,1024,512,131072,131072,4,16,32,65536,0,4,16,32,0,0,0,4,16,0,0,16384,67108864,0,0,1,24,96,128,256,1024],r.TOKEN=[\"(0)\",\"JSONChar\",\"JSONCharRef\",\"JSONPredefinedCharRef\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$$'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(e,t,n){var r=n.XQueryTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 77:f(77);break;case 91:f(91);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 140:f(140);break;case 147:f(147);break;case 160:f(160);break;case 180:f(180);break;case 186:f(186);break;case 211:f(211);break;case 221:f(221);break;case 222:f(222);break;case 238:f(238);break;case 239:f(239);break;case 248:f(248);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 14:f(14);break;case 65:f(65);break;case 68:f(68);break;case 69:f(69);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 88:f(88);break;case 89:f(89);break;case 98:f(98);break;case 100:f(100);break;case 103:f(103);break;case 104:f(104);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 113:f(113);break;case 114:f(114);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 148:f(148);break;case 154:f(154);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 165:f(165);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 177:f(177);break;case 179:f(179);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 213:f(213);break;case 214:f(214);break;case 215:f(215);break;case 219:f(219);break;case 224:f(224);break;case 230:f(230);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 245:f(245);break;case 249:f(249);break;case 251:f(251);break;case 255:f(255);break;case 261:f(261);break;case 265:f(265);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 257:f(257);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 26:f(26);break;case 65:f(65);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 89:f(89);break;case 100:f(100);break;case 104:f(104);break;case 108:f(108);break;case 113:f(113);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 126:f(126);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 215:f(215);break;case 219:f(219);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 249:f(249);break;case 261:f(261);break;case 265:f(265);break;case 68:f(68);break;case 69:f(69);break;case 77:f(77);break;case 88:f(88);break;case 91:f(91);break;case 98:f(98);break;case 103:f(103);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 114:f(114);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 124:f(124);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 140:f(140);break;case 147:f(147);break;case 148:f(148);break;case 154:f(154);break;case 160:f(160);break;case 165:f(165);break;case 177:f(177);break;case 179:f(179);break;case 180:f(180);break;case 186:f(186);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 211:f(211);break;case 213:f(213);break;case 214:f(214);break;case 221:f(221);break;case 222:f(222);break;case 224:f(224);break;case 230:f(230);break;case 238:f(238);break;case 239:f(239);break;case 245:f(245);break;case 248:f(248);break;case 251:f(251);break;case 255:f(255);break;case 257:f(257);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=28)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 55:f(55);break;case 54:f(54);break;case 56:f(56);break;case 40:f(40);break;case 42:f(42);break;case 41:f(41);break;case 35:f(35);break;case 38:f(38);break;case 274:f(274);break;case 271:f(271);break;case 39:f(39);break;case 43:f(43);break;case 49:f(49);break;case 62:f(62);break;case 63:f(63);break;case 46:f(46);break;case 48:f(48);break;case 53:f(53);break;case 51:f(51);break;case 34:f(34);break;case 273:f(273);break;case 2:f(2);break;case 1:f(1);break;case 3:f(3);break;case 12:f(12);break;case 13:f(13);break;case 15:f(15);break;case 16:f(16);break;case 17:f(17);break;case 5:f(5);break;case 6:f(6);break;case 4:f(4);break;case 33:f(33);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 58:f(58);break;case 50:f(50);break;case 27:f(27);break;case 57:f(57);break;case 35:f(35);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 23:f(23);break;case 6:f(6);break;case 7:f(7);break;case 55:f(55);break;case 54:f(54);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;default:f(33)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 20:f(20);break;case 25:f(25);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 19:f(19);break;case 24:f(24);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 11:f(11);break;case 64:f(64);break;default:f(33)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 9:f(9);break;case 47:f(47);break;default:f(33)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 10:f(10);break;case 59:f(59);break;case 60:f(60);break;default:f(33)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 8:f(8);break;case 36:f(36);break;case 37:f(37);break;default:f(33)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 52:f(52);break;case 41:f(41);break;case 30:f(30);break;default:f(33)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(5);switch(y){case 31:f(31);break;case 32:f(32);break;case 52:f(52);break;case 41:f(41);break;default:f(33)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(6);switch(y){case 18:f(18);break;case 29:f(29);break;case 19:f(19);break;case 21:f(21);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 18:f(18);break;case 29:f(29);break;case 20:f(20);break;case 22:f(22);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<276;i+=32){var s=i,o=(i>>5)*2062+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,35,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35,35,35,35,35,35,35,35,35,35,35,35,31,31,35,35,35,35,35,35,35,65,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,35,31,35,31,31,35],r.INITIAL=[1,2,36867,45060,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22908,18836,17152,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18579,21711,17152,19008,19233,20367,19008,28684,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20116,18836,18637,19008,19233,21267,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18763,18778,18794,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18821,22923,18906,19008,19233,17431,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18937,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19054,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,18953,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21843,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21696,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22429,20131,18720,19008,19233,20367,19008,17173,23559,36437,17330,17349,18921,17189,17208,17281,20355,18087,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,21242,19111,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19024,18836,18609,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19081,22444,18987,19008,19233,20367,19008,19065,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21992,22007,18987,19008,19233,20367,19008,18690,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22414,18836,18987,19008,19233,30651,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19138,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19280,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,19172,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21783,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19218,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21651,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19249,19265,19307,18888,27857,30536,24401,31444,23357,18888,19351,18888,18890,27211,19370,27211,27211,19392,24401,31911,24401,24401,25467,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,17994,24060,18888,18888,18888,18890,19468,27211,27211,27211,27211,19484,35367,19520,24401,24401,24401,19628,18888,29855,18888,18888,23086,27211,19538,27211,27211,30756,24012,24401,19560,24401,24401,26750,18888,18888,19327,27855,27211,27211,19580,17590,24017,24401,24401,19600,25665,18888,18888,28518,27211,27212,24016,19620,19868,28435,25722,18889,19644,27211,32888,35852,19868,31018,19694,19376,19717,22215,19735,22098,19751,35203,19776,19797,19817,19840,25783,31738,24135,19701,19856,31015,23516,31008,28311,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21768,18836,19307,18888,27857,27904,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,19888,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22399,18836,19918,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21666,18836,19307,18888,27857,27525,24401,29183,21467,18888,18888,18888,18890,27211,27211,27211,27211,19946,24401,24401,24401,24401,32382,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19998,24401,24401,24401,24401,31500,18467,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,20021,24401,24401,24401,24401,24401,34271,18888,18888,18888,18888,23086,27211,27211,27211,27211,32926,29908,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,20050,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20101,19039,20191,20412,20903,17569,20309,20872,25633,20623,20505,20218,20242,17189,17208,17281,20355,20265,20306,20328,20383,22490,20796,20619,21354,20654,20410,20956,21232,20765,17421,20535,17192,18127,22459,20312,25531,22470,20309,20428,18964,20466,20491,21342,21070,20521,20682,17714,18326,17543,17559,17585,22497,20559,19504,20279,20575,20290,20475,20604,20639,20226,20670,17661,21190,17703,21176,17730,19494,20698,20711,22480,21046,21116,18971,21130,20727,20755,17675,17753,17832,17590,25518,20394,20781,20831,20202,20847,21401,17292,17934,17979,18549,20863,20588,25542,20888,20919,18072,18117,20935,20972,21032,21062,21086,18239,21102,18563,21146,21162,21206,18351,20949,20902,18340,21222,21258,21283,18360,20249,17405,21295,21311,21327,20739,20343,21370,21386,21417,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21977,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,21452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,21504,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,36501,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,28674,21946,17617,36473,18223,17237,17477,19152,17860,17892,17675,17753,17832,21575,21534,17481,19156,17864,18731,17918,36551,17292,17934,21560,30628,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21798,18836,21612,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21636,18836,18987,19008,19233,17902,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21753,19096,21903,19008,19233,20367,19008,19291,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17379,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,21931,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18280,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21962,18594,18987,19008,19233,22043,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21681,21858,18987,19008,19233,20367,19008,21544,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,32319,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,22231,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,31678,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,33588,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,35019,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22248,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22324,18836,22059,18888,27857,30501,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,34365,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22354,18836,18987,19008,19233,20367,19008,17173,27086,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,19930,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22309,22513,18987,19008,19233,20367,19008,19122,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,22544,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22608,18836,22988,23004,27585,23020,23036,23067,22087,18888,18888,18888,23083,27211,27211,27211,23102,22121,24401,24401,24401,23122,31386,26154,19674,18888,28119,28232,19424,23705,27211,27211,23142,23173,23189,23212,24401,24401,23246,34427,31693,23262,18888,23290,23308,27783,27620,23327,35263,35107,33383,23346,18193,23393,32748,23968,24401,23414,35153,23463,18888,33913,23442,23482,27211,27211,23532,23552,21431,23575,24401,24401,23604,26095,23635,23657,18888,33482,23685,33251,27211,22187,18851,23721,35536,24401,18887,23750,32641,27211,23769,23787,20080,33012,24384,25659,18888,18889,27211,27211,19719,23889,23803,31018,18890,27211,31833,19406,19447,23086,23330,19828,28224,31826,23823,26917,34978,23850,26493,25782,23878,23914,23516,31008,22105,19419,27963,19659,29781,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22623,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,28909,25783,27211,27211,27211,34048,23933,22164,24401,24401,24401,28409,23949,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,26583,18888,18888,18888,35585,23984,27211,27211,27211,24005,22201,24033,24401,24401,24401,24052,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,26496,24076,24126,24151,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22638,18836,22059,19678,27857,24185,24401,24201,24217,26592,18888,18888,18890,24252,24268,27211,27211,22121,24287,24303,24401,24401,30613,19781,35432,36007,32649,18888,25783,24322,28966,23771,27211,35072,22164,24358,32106,26829,24400,31500,31693,18888,18888,18888,24801,18890,27211,27211,27211,27211,24418,19484,24401,24401,24401,24401,20167,31181,18888,18888,18888,27833,23086,27211,27211,33540,27211,30756,21431,24401,24401,22972,24401,26095,18888,36131,18888,27855,27211,24440,27211,22187,22968,24401,24459,24401,31699,28454,18888,34528,34570,35779,24478,24402,24494,25659,18888,36228,27211,27211,24515,30981,23734,31018,18890,27211,31833,19406,19447,23086,23330,24538,31017,27856,31741,30059,23377,24563,19837,25782,19760,31015,23516,25374,22105,19419,29793,24579,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22653,18836,22059,25756,19982,34097,23196,29183,24614,24110,23641,24673,26103,24697,24443,24713,28558,22121,24748,24462,24764,23398,30613,18888,18888,18888,18888,24798,25783,27211,27211,27211,34232,35072,22164,24401,24401,24401,33302,31500,22559,24106,24232,18888,18888,34970,24817,30411,27211,27211,32484,19484,29750,35127,24401,24401,19872,31181,24852,18888,18888,24871,29221,27211,27211,32072,27211,30756,34441,24401,24401,31571,24401,26095,33141,27802,27011,27855,25295,25607,24888,22187,22968,19195,34593,24906,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,33663,27211,27211,24924,24947,23588,31018,18890,27211,31833,22135,19447,23086,23330,19828,30904,31042,24972,19840,25e3,31738,30898,25782,19760,31015,23516,31008,22105,19419,25016,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22668,18836,25041,25057,31320,25073,25089,25105,22087,34796,24236,36138,34870,34125,25121,23106,35497,22248,36613,25137,30671,27365,30613,25153,26447,25199,25233,22574,23274,25249,25265,25281,25318,25344,25360,25400,25428,25452,26731,25504,31693,23669,25558,27407,25575,28599,25934,25599,27211,28180,27304,25623,25839,25649,24401,34820,25681,25698,22586,27775,30190,25745,25778,25799,25817,28995,33569,30756,21518,33443,25837,25855,25893,26095,31254,26677,30136,27855,25930,25950,27211,22187,22968,25966,25986,24401,23428,27763,36330,26959,26002,26029,26045,26085,26119,26170,26203,26222,26239,30527,26372,26274,28404,31018,33757,27211,34262,26316,36729,26345,26366,35337,31017,26388,26407,30954,26350,33861,26434,26463,26479,26512,23516,33189,26531,26547,27963,31293,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22683,18836,26568,26181,26608,34097,26643,29183,22087,26669,18888,18888,18890,26693,27211,27211,27211,22121,26720,24401,24401,24401,30613,18888,18888,18888,18888,26774,25783,27211,27211,27211,26619,35072,22164,24401,24401,24401,21596,31500,31693,18888,18888,33978,18888,18890,27211,27211,25801,27211,27211,19484,24401,24401,24401,26792,24401,31181,18888,18888,18888,35464,23086,27211,27211,27211,26809,30756,21431,24401,24401,24401,26828,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,31948,18889,35707,27211,19719,26845,19868,31018,18890,27211,31833,19406,19447,23086,23330,26905,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,24984,31088,19419,26945,27651,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22698,18836,26999,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23051,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,27033,24401,24401,24401,24401,24036,31693,18888,18888,27056,18888,18890,27211,27211,30320,27211,27211,27075,24401,24401,29032,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,33986,27855,27211,27211,27102,17590,24017,24401,24401,27123,27144,36254,27162,27210,27228,28500,18187,34842,33426,27244,35980,27277,27302,27320,36048,34013,20999,31882,21478,27895,27356,30287,27381,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,26329,30087,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,27406,27423,27445,35294,27461,22087,18888,18888,30140,18890,27211,27211,27989,27211,22121,24401,24401,25682,24401,18866,18888,18888,18888,18888,18888,34042,27211,27211,27211,27211,29700,22164,24401,24401,24401,24401,27128,31693,27477,18888,18888,18888,18890,27194,27211,27211,27211,27211,19484,35299,24401,24401,24401,24401,19628,18888,18888,18888,27059,23086,27211,27211,27211,33366,30756,24012,24401,24401,24401,35044,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,20815,27211,30818,19960,33969,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22713,18836,22059,27496,27516,27541,35231,27557,22087,29662,26292,23292,27573,24836,27601,27211,27636,22121,35544,27686,24401,27721,18866,18888,27799,18888,27818,22071,27853,32260,27211,26013,27873,27920,22164,29419,24401,29946,33413,26742,27751,26881,18888,18888,27261,36776,27936,27211,27211,27211,27988,28005,28031,28052,24401,24401,28069,28088,28135,25488,28152,26069,28167,27211,28340,24657,28196,30756,31523,24401,28212,34176,36174,24956,28248,28266,28290,21488,33077,28327,28356,17590,20986,23126,28391,28425,28102,28451,28470,28490,28516,28534,20034,33728,25868,25659,18888,18889,27211,27211,19719,23889,19868,30241,28274,28553,28574,19406,28590,23086,23330,19828,19452,28615,28660,26147,25783,31738,19837,25782,19760,29613,35958,29276,22105,19419,27963,23157,28700,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,22528,18888,18888,18888,18888,18890,27333,27211,27211,27211,27211,19484,30853,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22728,18836,28747,28782,28817,28841,28857,28880,28896,24161,28943,32011,36261,27340,28961,29492,28982,29011,24522,29027,25436,29048,23051,27500,29090,29110,30713,18888,23512,29130,25183,27211,29155,28927,27033,29173,23230,24401,29199,35373,31693,18888,18888,25583,32629,29218,27211,27211,31461,30692,29237,27075,24401,24401,24401,29262,29302,19628,18888,34329,18888,18888,23086,27211,29329,27211,27211,30756,24012,35933,24401,24401,24401,27705,31612,18888,18888,29346,29374,27211,35650,17590,21436,29393,24401,25970,18887,33895,18888,27211,32528,27212,24016,32769,19868,25659,18888,26889,27211,27211,29412,23889,24371,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31768,19840,25783,31738,19837,29435,29508,31102,29550,29606,22105,30300,29462,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22743,18836,22059,29629,29473,34097,33285,29183,29651,27254,18888,29678,33329,32535,27211,29694,29716,22121,19202,24401,32742,29741,18866,26776,33921,28474,18888,18888,25783,29766,27211,29809,27211,35072,22164,35825,24401,29828,24401,24036,36769,25217,18888,18888,29848,18890,27211,29871,27211,26258,27211,29894,24401,29929,24401,36587,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,29725,29962,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18473,18888,18888,19584,27211,27212,24016,29982,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19902,19447,32052,19544,19828,29998,30097,30031,19840,25783,30047,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,30075,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22758,18836,30121,30156,30206,30257,30273,30336,22087,35624,32837,25762,18890,29878,34934,26812,27211,22121,24931,23223,29202,24401,18866,34373,30352,18888,18888,18888,23447,24828,27211,27211,27211,35072,30370,35052,24401,24401,24401,24036,29523,18888,18888,27146,18888,31308,30386,27211,27211,30405,30558,19484,30427,24401,24401,29938,35686,19628,28766,30447,34506,35614,23086,28731,30482,30517,30552,30756,24012,20156,30574,30598,30667,26283,33464,28945,27670,30687,32915,33504,25328,17590,23963,20450,33837,21016,32397,26300,30708,30729,27885,30748,21588,36373,30779,26653,24628,33220,32514,30806,31835,25412,25906,26515,18890,28825,31833,26133,19447,28304,31730,23834,26057,30869,30885,32181,30920,30942,32797,25782,30970,31015,23516,31008,30997,31034,27963,19659,29450,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22773,18836,31058,31074,32463,31125,31141,31197,22087,18888,29534,35471,36738,27211,24342,31213,24424,22121,24401,20175,31229,31917,27736,31245,34334,27175,18888,29094,27286,27211,31278,31336,27211,31355,31371,24401,31402,31418,24401,31437,31693,18888,31619,32841,18888,18890,27211,27211,31460,31477,27211,19484,24401,24401,31497,36581,24401,33020,18888,18888,18888,18888,30007,27211,27211,27211,27211,31516,32310,24401,24401,24401,24401,31539,18888,28762,18888,24651,35740,27211,27211,28644,31565,35796,24401,24401,19318,32188,18888,24334,28366,27212,29966,29832,19868,25659,18888,18889,27211,27211,19719,31587,19868,31635,32435,33693,30105,31663,20005,31715,31757,31784,31812,30015,31851,31878,25783,31898,19837,25782,19760,31015,23516,31008,22105,19419,27963,31933,30221,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22788,18836,22059,25729,30466,31968,24306,31984,32e3,32807,35160,27017,29590,34941,19801,29377,33700,22121,27040,30431,29396,28864,29565,18888,18888,18888,32027,18888,25783,27211,27211,23698,27211,35072,22164,24401,24401,30845,24401,24036,32045,18888,26929,18888,18888,18890,27211,31481,32068,27211,27211,32088,24401,33058,32122,24401,24401,33736,18888,18888,33162,18888,23086,27211,27211,29484,27211,28375,32144,24401,24401,33831,24401,26750,18888,18888,18888,27855,27211,27211,27211,36704,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,33107,22171,33224,24271,32169,31017,27856,31741,19840,25783,31738,30234,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,32204,32232,32252,32677,33295,29074,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23619,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,32276,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,32299,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,33886,18889,36065,27211,19719,35326,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22803,18836,32335,31647,34666,32351,32367,32417,22087,18888,32433,19335,32451,27211,32479,27107,32500,22121,24401,32551,20085,32572,18866,22287,23753,18888,18888,32602,32665,27211,32693,27211,26972,32713,32729,24401,32764,24401,25877,32785,34768,18888,27390,32823,24594,24855,32857,24890,32878,32904,27211,32942,32977,24401,33e3,29313,24401,30790,26206,27666,33904,18888,23086,36353,27211,33036,27211,30756,24012,32153,24401,33056,24401,35861,18888,18888,30354,27972,27211,27211,33800,17590,20145,24401,24401,34638,20811,18888,18888,33074,27211,27212,36167,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,34616,24169,33093,33123,33157,27856,31741,23862,26552,34302,19837,25782,19760,31015,23516,31008,33178,19973,27963,23497,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22818,18836,33205,28113,33240,34097,33275,29183,22087,33318,35438,18888,18890,33345,26391,33382,27211,22121,33399,28072,33442,24401,18866,22232,18888,33459,18888,18888,33480,33498,25175,27211,27211,26704,22164,24775,35239,24401,24401,25914,29580,18888,18888,31109,25211,33520,33539,27211,27211,33556,36284,19484,33585,24401,24401,33604,32556,19628,18888,18888,31262,33658,23086,27211,27211,33679,27211,30756,24012,24401,24401,33716,24401,26854,27480,18888,33752,27855,33259,34701,27211,17590,32102,24782,23807,24401,18887,18888,18888,27211,27211,27212,33773,36105,19868,25659,18888,23368,27211,29157,19719,23889,34454,29286,18890,33794,25302,33816,19447,34079,33853,31862,31017,27856,31741,33877,28920,33937,19837,30461,34002,22276,36041,34029,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22833,18836,34064,32616,34113,34141,34157,34192,34208,32216,36013,31549,31952,34224,34248,34287,29330,34350,34389,34413,34481,26793,18866,26187,29635,22293,18888,36654,25783,34522,34544,34566,25821,35072,22164,34586,34609,34632,19604,24036,36644,36674,24681,18888,32401,34654,31339,34682,34698,27211,34717,34753,28053,34812,34836,24401,33619,19628,34858,32236,34906,24598,33523,27612,34890,34922,24732,29246,36717,33634,34465,32984,34168,26750,34957,18888,18888,34994,35010,27211,33040,17590,29913,35035,24401,36304,25482,30171,35883,35068,35088,26627,20441,31173,35123,35143,35176,24640,30492,29358,19719,35192,35219,25384,28801,35255,35279,32586,34496,23086,23330,29061,31017,27856,31741,19840,25783,31738,24547,25164,35315,31796,35353,34316,22105,19419,27963,24091,28630,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22848,18836,22059,34782,34088,35389,21008,35405,35421,35454,18888,18888,23466,35487,27211,27211,27211,35513,31154,24401,24401,24401,35560,18888,26863,36664,35601,24872,25783,30389,23536,26250,35647,35666,22164,19522,19564,30582,35682,27697,35575,29114,18888,18888,18888,18890,27211,35702,27211,27211,27211,35723,24401,35527,24401,24401,24401,19628,30184,18888,18888,18888,23086,35739,27211,27211,27211,29139,22938,24401,24401,24401,24401,23898,35756,18888,18888,25025,35778,27211,27211,17590,20064,35795,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,23917,18890,34550,31833,22262,19447,23086,23330,26418,31017,27856,31741,19840,25783,35812,19837,27187,35841,33135,23516,31008,22105,22148,28712,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22863,18836,22059,35877,28723,34097,31164,29183,22087,26758,18888,22592,18890,23989,27211,29812,27211,22121,33778,24401,31421,24401,18866,18888,18888,26872,18888,18888,25783,27211,30732,27211,27211,35072,22164,24401,24908,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22878,18836,22059,27837,27857,35899,24401,35915,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31602,18888,18888,18888,18888,26223,27211,27211,27211,27211,27211,19484,35931,24401,24401,24401,24401,19628,18888,28136,18888,18888,35949,27211,32862,27211,32697,30756,24012,24401,32283,24401,32128,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22893,18836,22059,35974,34882,34097,33960,29183,35996,18888,23311,18888,36029,27211,27211,36064,36081,22121,24401,24401,36104,33950,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,36121,18888,25559,18888,18888,18890,27211,27211,30313,27211,27211,36154,24401,24401,34397,24401,24401,19628,28250,18888,18888,18888,23086,30926,27211,27211,27211,26983,24012,33642,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,19354,27857,36190,24401,36206,22087,18888,18888,18888,18007,27211,27211,27211,24724,22121,24401,24401,24401,30827,18866,18888,36222,18888,28795,18888,25783,35100,27211,27429,27211,35072,22164,30836,24401,24499,24401,24036,31693,18888,36244,18888,18888,18890,27211,36088,27211,27211,27211,19484,24401,28036,24401,24401,24401,19628,18888,18888,35631,18888,35762,27211,27211,36277,27211,34730,24012,24401,24401,36300,24401,36320,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,25712,18888,18888,36346,27211,27212,19184,24402,19868,25659,32029,18889,27211,33359,19719,23889,36369,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22384,18836,36389,19008,19233,20367,36434,17173,17595,36437,17330,17349,18921,17189,17208,17281,20355,36453,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22369,18836,18987,19008,19233,20367,19008,21737,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21813,18836,36489,19008,19233,20367,19008,17173,17737,36437,17330,17349,18921,17189,17208,17281,20355,17768,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20543,22022,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,36517,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,19307,18888,27857,30756,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,36567,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,36603,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,36629,36690,18720,19008,19233,20367,19008,17454,17595,36437,17330,17349,18921,17189,17208,17281,20355,17223,17308,17327,17346,18918,36754,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,0,94242,0,118820,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2482176,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,27,27,27,2207744,2404352,2412544,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3104768,2605056,2207744,2207744,2207744,2207744,2207744,2207744,2678784,2207744,2695168,2207744,2703360,2207744,2711552,2752512,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,0,2158592,2158592,3170304,3174400,2158592,0,139,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2158592,2158592,2158592,2863104,2891776,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2785280,2207744,2809856,2207744,2207744,2842624,2207744,2207744,2207744,2899968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2473984,2207744,2207744,2494464,2207744,2207744,2207744,2523136,2158592,2404352,2412544,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2605056,2158592,2158592,2158592,2158592,2158592,2158592,2678784,2158592,2695168,2158592,2703360,2158592,2711552,2752512,2158592,2158592,2785280,2158592,2158592,2785280,2158592,2809856,2158592,2158592,2842624,2158592,2158592,2158592,2899968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,18,0,0,0,0,0,0,0,2211840,0,0,641,0,2158592,0,0,0,0,0,0,0,0,2211840,0,0,32768,0,2158592,0,2158592,2158592,2158592,2383872,2158592,2158592,2158592,2158592,3006464,2383872,2207744,2207744,2207744,2207744,2158877,2158877,2158877,2158877,0,0,0,2158877,2572573,2158877,2158877,0,2207744,2207744,2596864,2207744,2207744,2207744,2207744,2207744,2207744,2641920,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,167936,0,0,2162688,0,0,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,0,0,2146304,2146304,2224128,2224128,2232320,2232320,2232320,641,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2531328,2158592,2158592,2158592,2158592,2158592,2617344,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,2158592,2502656,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2158592,2158592,2158592,2158592,2158592,2699264,2158592,2158592,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2207744,2863104,2891776,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3018752,2207744,3043328,2207744,2207744,2207744,2207744,3080192,2207744,2207744,3112960,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,172310,279,0,2162688,0,0,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2158592,2158592,2158592,2404352,2412544,2158592,2510848,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2584576,2158592,2609152,2158592,2158592,2629632,2158592,2158592,2158592,2686976,2158592,2715648,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2158592,2158592,3170304,3174400,2158592,2367488,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,0,2207744,2207744,2207744,2433024,2207744,2453504,2461696,2207744,2207744,2207744,2207744,2207744,2207744,2510848,2207744,2207744,2207744,2207744,2207744,2531328,2207744,2207744,2207744,2207744,2207744,2617344,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,1508,2715648,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2867200,2207744,2904064,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2580480,2207744,2207744,2207744,2207744,2621440,2207744,2207744,2207744,3149824,2207744,2207744,3170304,3174400,2207744,0,0,0,0,0,0,0,0,0,0,138,2158592,2158592,2158592,2404352,2412544,2707456,2732032,2207744,2207744,2207744,2822144,2826240,2207744,2895872,2207744,2207744,2924544,2207744,2207744,2973696,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,285,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3186688,2158592,2207744,2207744,2158592,2158592,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2158592,0,0,2535424,2543616,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2990080,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2572288,2981888,2207744,2207744,3002368,2207744,3047424,3063808,3076096,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3203072,2708960,2732032,2158592,2158592,2158592,2822144,2827748,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2981888,2158592,2158592,3002368,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2981888,2158592,2158592,3003876,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,20480,0,0,0,0,0,2162688,20480,0,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2908160,2527232,2207744,2207744,2576384,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2908160,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,286,2158592,2158592,0,0,2158592,2158592,2158592,2158592,2633728,2658304,0,0,2740224,2744320,0,2834432,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,0,0,29315,0,0,0,0,45,45,45,45,45,933,45,45,45,45,442,45,45,45,45,45,45,45,45,45,67,67,2494464,2158592,2158592,2158592,2524757,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,1504,2158592,2498560,2158592,2158592,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,2736128,2158592,2158592,0,2158592,2912256,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3108864,2158592,2158592,3133440,3145728,3153920,2375680,2379776,2207744,2207744,2420736,2207744,2449408,2207744,2207744,2207744,2498560,2207744,2207744,2207744,2207744,2568192,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,551,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,2020,2158592,2592768,2625536,2207744,2207744,2674688,2736128,2207744,2207744,2207744,2912256,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,542,0,544,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,641,0,0,0,0,0,0,2367488,2158592,2498560,2158592,2158592,1621,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,1608,97,97,97,97,97,97,97,97,97,97,1107,97,97,1110,97,97,3133440,3145728,3153920,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3014656,2158592,2158592,3051520,2158592,2158592,3100672,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2416640,2207744,2465792,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2633728,2658304,2740224,2744320,2834432,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,32768,0,0,0,0,0,0,2367488,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2158592,2158592,2478080,2158592,2158592,2158592,2535424,2543616,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3117056,2207744,2207744,2478080,2207744,2207744,2207744,2207744,2699264,2207744,2207744,2207744,2207744,2207744,2748416,2756608,2777088,2801664,2207744,2207744,2158877,2158877,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,0,0,2535709,2543901,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2990365,2158877,2158877,2158730,2158730,2158730,2158730,2158730,2572426,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158592,2158592,2478080,2207744,2207744,2990080,2207744,2207744,2158592,2158592,2482176,2158592,2158592,0,0,0,2158592,2158592,2158592,0,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,3010560,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158592,2428928,2158592,2514944,0,0,2158592,2588672,2158592,0,2838528,2158592,2158592,2158592,3010560,2158592,2506752,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,0,29315,922,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,1539,45,3006464,2383872,0,2020,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,2207744,0,0,2158592,2637824,2953216,2158592,2539520,2158592,2539520,2207744,0,0,2539520,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,0,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2965504,2965504,2965504,0,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2474269,2158877,2158877,0,0,2158877,2158877,2158877,2158877,2634013,2658589,0,0,2740509,2744605,0,2834717,40976,18,36884,45078,24,28,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,36884,0,0,0,24,24,24,27,27,27,27,90143,0,0,86016,0,0,2211840,102439,0,0,0,98347,0,2158592,2158592,2158592,2158592,2158592,3158016,0,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,0,94242,0,0,0,2211840,102439,0,0,106538,98347,135,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2158592,2158592,2158592,2596864,2158592,2158592,2158592,2158592,2158592,2158592,2641920,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2494464,2158592,2158592,2158592,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,0,27,27,0,2158592,2498560,2158592,2158592,0,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2494464,2158592,2158592,2158592,3006464,2383872,0,0,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,40976,18,36884,45078,24,27,147488,94242,147456,147488,106538,98347,0,0,147456,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,81920,0,94242,0,0,0,2211840,0,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2428928,2158592,2514944,2158592,2588672,2158592,2838528,2158592,2158592,40976,18,151573,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,1487,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,0,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,130,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,3096576,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,644,2207744,2207744,2207744,3186688,2207744,0,1080,0,1084,0,1088,0,0,0,0,0,0,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2531466,2158730,2158730,2158730,2158730,2158730,2617482,0,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2158592,2818048,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,159779,159744,102439,159779,98347,0,0,159744,40976,18,18,36884,0,45078,0,2224253,172032,2224253,2232448,2232448,172032,2232448,90143,0,0,2170880,0,0,550,829,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,124,124,127,127,127,40976,18,36884,45078,25,29,90143,94242,0,102439,106538,98347,0,0,163931,40976,18,18,36884,0,45078,249856,24,24,24,27,27,27,27,90143,0,0,2170880,0,0,827,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,4243810,4243810,24,24,27,27,27,2207744,0,0,0,0,0,0,2166784,0,0,0,0,57344,286,2158592,2158592,2158592,2158592,2707456,2732032,2158592,2158592,2158592,2822144,2826240,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,53248,0,0,0,0,0,97,97,97,97,97,1613,97,97,97,97,97,97,1495,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,2207744,0,0,0,0,0,0,2166784,546,0,0,0,0,286,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,17,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,120,121,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,2170880,0,53248,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,196608,18,266240,24,24,27,27,27,0,94242,0,0,0,38,102439,0,0,106538,98347,0,45,45,45,45,45,45,45,1535,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,424,45,45,45,45,45,45,45,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,199,45,45,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1766,67,67,67,1767,67,24850,24850,12564,12564,0,0,2166784,546,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,743,57889,0,2170880,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1856,45,1858,1859,67,67,67,1009,67,67,67,67,67,67,67,67,67,67,67,1021,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,0,2367773,2158877,2158877,2158877,2158877,2158877,2158877,2699549,2158877,2158877,2158877,2158877,2158877,2748701,2756893,2777373,2801949,97,1115,97,97,97,97,97,97,97,97,97,97,97,97,97,97,857,97,67,67,67,67,67,1258,67,67,67,67,67,67,67,67,67,67,67,1826,67,97,97,97,97,97,97,1338,97,97,97,97,97,97,97,97,97,97,97,97,97,870,97,97,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1579,67,67,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,97,904,905,97,97,97,97,1620,97,97,97,97,97,97,97,97,97,97,97,0,921,0,0,0,0,0,0,45,1679,67,67,67,1682,67,67,67,67,67,67,67,67,67,1690,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,189,45,45,45,1748,45,45,45,1749,1750,45,45,45,45,45,45,45,45,67,67,67,67,1959,67,67,67,67,1768,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,1791,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1802,67,1817,67,67,67,67,67,67,1823,67,67,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,1848,45,45,45,45,45,45,45,45,45,45,45,659,45,45,45,45,45,45,45,1863,67,67,67,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,1878,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,67,67,67,67,97,97,97,97,0,0,0,1973,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1165,97,1167,67,24850,24850,12564,12564,0,0,2166784,0,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,1789,97,0,94242,0,0,0,2211840,102439,0,0,106538,98347,136,2158592,2158592,2158592,2158592,2158592,3158016,229376,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,67,24850,24850,12564,12564,0,0,280,547,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,1788,97,97,0,97,2024,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,235,67,67,67,67,67,57889,547,547,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,1799,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1092,0,0,0,0,0,97,97,97,97,1612,97,97,97,97,1616,97,1297,1472,0,0,0,0,1303,1474,0,0,0,0,1309,1476,0,0,0,0,97,97,97,1481,97,97,97,97,97,97,1488,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,97,607,97,97,97,97,40976,18,36884,45078,26,30,90143,94242,0,102439,106538,98347,0,0,213080,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,143448,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,0,0,0,97,97,97,97,1482,97,1483,97,97,97,97,97,97,1326,97,97,1329,1330,97,97,97,97,97,97,1159,1160,97,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,0,94242,0,0,0,2211974,102439,0,0,106538,98347,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2474122,2158730,2158730,2494602,2158730,2158730,2158730,2809994,2158730,2158730,2842762,2158730,2158730,2158730,2900106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3014794,2158730,2158730,3051658,2158730,2158730,3100810,2158730,2158730,2158730,2158730,3096714,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,2207744,541,541,543,543,0,0,2166784,0,548,549,549,0,286,2158877,2158877,2158877,2863389,2892061,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3186973,2158877,0,0,0,0,0,0,0,0,2367626,2158877,2404637,2412829,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2564381,2158877,2158877,2605341,2158877,2158877,2158877,2158877,2158877,2158877,2679069,2158877,2695453,2158877,2703645,2158877,2711837,2752797,2158877,0,2158877,2158877,2158877,2384010,2158730,2158730,2158730,2158730,3006602,2383872,2207744,2207744,2207744,2207744,2207744,2207744,3096576,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,0,2158877,2785565,2158877,2810141,2158877,2158877,2842909,2158877,2158877,2158877,2900253,2158877,2158877,2158877,2158877,2158877,2531613,2158877,2158877,2158877,2158877,2158877,2617629,2158877,2158877,2158877,2158877,2158730,2818186,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3105053,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,0,0,0,0,0,97,97,97,1611,97,97,97,97,97,97,97,1496,97,97,1499,97,97,97,97,97,2441354,2445450,2158730,2158730,2158730,2158730,2158730,2158730,2502794,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2433162,2158730,2453642,2461834,2158730,2158730,2158730,2158730,2158730,2158730,2580618,2158730,2158730,2158730,2158730,2621578,2158730,2158730,2158730,2158730,2158730,2158730,2699402,2158730,2158730,2158730,2158730,2678922,2158730,2695306,2158730,2703498,2158730,2711690,2752650,2158730,2158730,2785418,2158730,2158730,2158730,3113098,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3186826,2158730,2207744,2207744,2207744,2207744,2781184,2793472,2207744,2818048,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,541,0,543,2158877,2502941,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2580765,2158877,2158877,2158877,2158877,2621725,2158877,3019037,2158877,3043613,2158877,2158877,2158877,2158877,3080477,2158877,2158877,3113245,2158877,2158877,2158877,2158877,0,2158877,2908445,2158877,2158877,2158877,2978077,2158877,2158877,2158877,2158877,3039517,2158877,2158730,2510986,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2584714,2158730,2609290,2158730,2158730,2629770,2158730,2158730,2158730,2388106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2605194,2158730,2158730,2158730,2158730,2687114,2158730,2715786,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2867338,2158730,2904202,2158730,2158730,2158730,2642058,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2781322,2793610,2158730,3121290,2158730,2158730,2158730,3149962,2158730,2158730,3170442,3174538,2158730,2367488,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2441216,2445312,2207744,2207744,2207744,2207744,2207744,2207744,2502656,2158877,2433309,2158877,2453789,2461981,2158877,2158877,2158877,2158877,2158877,2158877,2511133,2158877,2158877,2158877,2158877,2584861,2158877,2609437,2158877,2158877,2629917,2158877,2158877,2158877,2687261,2158877,2715933,2158877,2158730,2158730,2973834,2158730,2982026,2158730,2158730,3002506,2158730,3047562,3063946,3076234,2158730,2158730,2158730,2158730,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158877,2507037,0,0,2158877,2158730,2158730,2158730,3203210,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2564096,2207744,2207744,2207744,2707741,2732317,2158877,2158877,2158877,2822429,2826525,2158877,2896157,2158877,2158877,2924829,2158877,2158877,2973981,2158877,18,0,0,0,0,0,0,0,2211840,0,0,642,0,2158592,0,45,1529,45,45,45,45,45,45,45,45,45,45,45,45,45,1755,45,67,67,2982173,2158877,2158877,3002653,2158877,3047709,3064093,3076381,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3203357,2523274,2527370,2158730,2158730,2576522,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2908298,2494749,2158877,2158877,2158877,2523421,2527517,2158877,2158877,2576669,2158877,2158877,2158877,2158877,2158877,2158877,0,40976,0,18,18,4321280,2224253,2232448,4329472,2232448,2158730,2498698,2158730,2158730,2158730,2158730,2568330,2158730,2592906,2625674,2158730,2158730,2674826,2736266,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2158730,2912394,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3109002,2158730,2158730,3133578,3145866,3154058,2375680,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375965,2380061,2158877,2158877,2421021,2158877,2449693,2158877,2158877,2158877,3117341,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3104906,2158730,2158730,2158730,2158730,2158730,2158730,2158877,2498845,2158877,2158877,0,2158877,2158877,2568477,2158877,2593053,2625821,2158877,2158877,2674973,0,0,0,0,97,97,1480,97,97,97,97,97,1485,97,97,97,0,97,97,1729,97,1731,97,97,97,97,97,97,97,311,97,97,97,97,97,97,97,97,1520,97,97,1523,97,97,1526,97,2736413,2158877,2158877,0,2158877,2912541,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3109149,2158877,2158877,3014941,2158877,2158877,3051805,2158877,2158877,3100957,2158877,2158877,3121437,2158877,2158877,2158877,3150109,3133725,3146013,3154205,2158730,2408586,2416778,2158730,2465930,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3018890,2158730,3043466,2158730,2158730,2158730,2158730,3080330,2633866,2658442,2740362,2744458,2834570,2949258,2158730,2986122,2158730,2998410,2158730,2158730,2158730,3129482,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158877,2408733,2416925,2158877,2466077,2158877,2158877,3170589,3174685,2158877,0,0,0,2158730,2158730,2158730,2158730,2158730,2424970,2158730,2158730,2158730,2158730,2707594,2732170,2158730,2158730,2158730,2822282,2826378,2158730,2896010,2158730,2158730,2924682,2949405,2158877,2986269,2158877,2998557,2158877,2158877,2158877,3129629,2158730,2158730,2478218,2158730,2158730,2158730,2535562,2543754,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3117194,2207744,2207744,2478080,2207744,2207744,2207744,2207744,3014656,2207744,2207744,3051520,2207744,2207744,3100672,2207744,2207744,3121152,2207744,2207744,2207744,2207744,2207744,2584576,2207744,2609152,2207744,2207744,2629632,2207744,2207744,2207744,2686976,2207744,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158877,2158877,2478365,0,2158877,2158877,2158877,2158877,2158877,2158877,2158730,2158730,2482314,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,823,0,825,2158730,2158730,2158730,2990218,2158730,2158730,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,135,0,2207744,2207744,2990080,2207744,2207744,2158877,2158877,2482461,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,2158877,2158730,2429066,2158730,2515082,2158730,2588810,2158730,2838666,2158730,2158730,2158730,3010698,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158877,2429213,2158877,2515229,0,0,2158877,2588957,2158877,0,2838813,2158877,2158877,2158877,3010845,2158730,2506890,2158730,2158730,2158730,2748554,2756746,2777226,2801802,2158730,2158730,2158730,2863242,2891914,2158730,2158730,2158730,2158730,2158730,2158730,2564234,2158730,2158730,2158730,2158730,2158730,2597002,2158730,2158730,2158730,3006464,2384157,0,0,2158877,2158877,2158877,2158877,3006749,2158730,2637962,2953354,2158730,2207744,2637824,2953216,2207744,0,0,2158877,2638109,2953501,2158877,2539658,2158730,2539520,2207744,0,0,2539805,2158877,2158730,2158730,2158730,2977930,2158730,2158730,2158730,2158730,3039370,2158730,2158730,2158730,2158730,2158730,2158730,3158154,2207744,0,2158877,2158730,2207744,0,2158877,2158730,2207744,0,2158877,2965642,2965504,2965789,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,97,1484,97,97,97,97,2158592,18,0,122880,0,0,0,77824,0,2211840,0,0,0,0,2158592,0,356,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,45,1751,45,45,45,45,45,45,45,67,67,1427,67,67,67,67,67,1432,67,67,67,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,122880,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,1322,550,0,286,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,4329472,27,27,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,542,0,0,0,542,0,544,0,0,0,544,0,550,0,0,0,0,0,97,97,1610,97,97,97,97,97,97,97,97,898,97,97,97,97,97,97,97,0,94242,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,94242,237568,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,192512,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,94,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,96,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,12378,40976,18,18,36884,0,45078,0,24,24,24,126,126,126,126,90143,0,0,2170880,0,0,0,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,20480,40976,0,18,18,24,24,27,27,27,40976,18,36884,45078,24,27,90143,94242,241664,102439,106538,98347,0,0,20568,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,200797,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,0,0,44,0,0,20575,40976,18,36884,45078,24,27,90143,94242,0,41,41,41,0,0,1126400,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,89,40976,18,18,36884,0,45078,0,24,24,24,27,131201,27,27,90143,0,0,2170880,0,0,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,208896,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,0,0,0,0,0,0,2367488,32768,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2433024,2158592,2453504,2461696,2158592,2158592,2158592,2158592,2158592,2158592,2510848,2158592,2158592,2158592,2158592,40976,18,36884,245783,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,221184,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,180224,40976,18,18,36884,155648,45078,0,24,24,217088,27,27,27,217088,90143,0,0,2170880,0,0,828,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,233472,0,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,718,45,45,45,45,45,45,45,45,45,727,131427,0,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,45,1808,45,45,45,45,67,67,67,67,67,67,67,97,97,0,0,97,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,0,0,97,97,97,97,97,97,1787,0,97,97,0,97,97,97,45,45,45,45,2029,45,67,67,67,67,2033,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,97,45,1798,45,45,1800,45,45,0,1472,0,0,0,0,0,1474,0,0,0,0,0,1476,0,0,0,0,1315,0,0,0,0,97,97,97,97,1320,97,97,0,0,97,97,97,97,1786,97,0,0,97,97,0,1790,1527,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,663,67,24850,24850,12564,12564,0,57889,281,0,0,53531,53531,367,286,97,97,0,0,97,97,97,1785,97,97,0,0,97,97,0,97,97,1979,97,97,45,45,1983,45,1984,45,45,45,45,45,652,45,45,45,45,45,45,45,45,45,45,690,45,45,694,45,45,40976,19,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,262144,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,46,67,98,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,45,67,97,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,258048,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,1122423,40976,18,36884,45078,24,27,90143,94242,0,1114152,1114152,1114152,0,0,1114112,40976,18,36884,45078,24,27,90143,94242,37,102439,106538,98347,0,0,204800,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,57436,40976,18,36884,45078,24,27,33,33,0,33,33,33,0,0,0,40976,18,18,36884,0,45078,0,124,124,124,127,127,127,127,90143,0,0,2170880,0,0,550,0,2158877,2158877,2158877,2388253,2158877,2158877,2158877,2158877,2158877,2781469,2793757,2158877,2818333,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2867485,2158877,2904349,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3096861,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2441501,2445597,2158877,2158877,2158877,2158877,2158877,40976,122,123,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,936,2158592,4243810,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,935,45,45,45,715,45,45,45,45,45,45,45,723,45,45,45,45,45,1182,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,45,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,47,68,99,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,48,69,100,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,49,70,101,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,50,71,102,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,51,72,103,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,52,73,104,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,53,74,105,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,54,75,106,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,55,76,107,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,56,77,108,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,57,78,109,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,58,79,110,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,59,80,111,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,60,81,112,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,61,82,113,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,62,83,114,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,63,84,115,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,64,85,116,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,65,86,117,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,66,87,118,40976,18,36884,45078,24,27,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,0,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1314,0,0,0,0,0,0,97,97,97,97,97,1321,97,18,131427,0,0,0,0,0,0,362,0,0,365,0,367,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1360,97,97,131,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,145,149,45,45,45,45,45,174,45,179,45,185,45,188,45,45,202,67,255,67,67,269,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,292,296,97,97,97,97,97,321,97,326,97,332,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,646,335,97,97,349,97,97,0,40976,0,18,18,24,24,27,27,27,437,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,523,67,67,67,67,67,67,67,67,67,67,67,67,511,67,67,67,97,97,97,620,97,97,97,97,97,97,97,97,97,97,97,97,97,1501,1502,97,793,67,67,796,67,67,67,67,67,67,67,67,67,67,808,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,2052,67,67,67,67,813,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,830,97,97,97,97,97,97,97,97,97,315,97,97,97,97,97,97,841,97,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,589,97,97,97,97,97,97,97,97,97,867,97,97,97,97,97,97,97,891,97,97,894,97,97,97,97,97,97,97,97,97,97,906,45,937,45,45,940,45,45,45,45,45,45,948,45,45,45,45,45,734,735,67,737,67,738,67,740,67,67,67,45,967,45,45,45,45,45,45,45,45,45,45,45,45,45,45,435,45,45,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,67,67,67,67,67,25398,1081,13112,1085,54074,1089,0,0,0,0,0,0,363,0,28809,0,139,45,45,45,45,45,45,1674,45,45,45,45,45,45,45,45,67,1913,67,1914,67,67,67,1918,67,67,97,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,630,97,97,97,97,97,1169,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,45,1534,45,45,45,45,45,1538,45,45,45,45,1233,45,45,45,45,45,45,67,67,67,67,67,67,67,67,742,67,45,45,1191,45,45,45,45,45,45,45,45,45,45,45,45,45,454,67,67,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,1251,67,0,0,97,97,97,97,45,45,67,67,2050,0,97,97,45,45,45,732,45,45,67,67,67,67,67,67,67,67,67,67,67,67,97,97,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,772,67,67,67,1293,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,368,2158592,2158592,2158592,2404352,2412544,1323,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,1737,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,1373,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,647,45,45,1387,45,45,1391,45,45,45,45,45,45,45,45,45,45,410,45,45,45,45,45,1400,45,45,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,941,45,943,45,45,45,45,45,45,951,45,67,1438,67,67,67,67,67,67,67,67,67,67,1447,67,67,67,67,67,67,782,67,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,97,1491,97,97,97,97,97,97,97,97,97,97,1500,97,97,97,0,97,97,97,97,97,97,97,97,97,97,1736,97,45,45,1541,45,45,45,45,45,45,45,45,45,45,45,45,45,677,45,45,67,1581,67,67,67,67,67,67,67,67,67,67,67,67,67,67,791,792,67,67,67,67,1598,67,1600,67,67,67,67,67,67,67,67,1472,97,97,97,1727,97,97,97,97,97,97,97,97,97,97,97,97,97,1513,97,97,67,67,97,1879,97,1881,97,0,1884,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,1842,97,97,67,67,67,67,67,97,97,97,97,1928,0,0,0,97,97,97,97,97,97,45,45,45,45,45,1903,45,45,45,67,67,67,67,97,97,97,97,1971,0,0,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1381,45,45,45,45,1976,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1747,809,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,97,907,97,97,97,97,97,97,97,97,97,97,97,638,0,0,0,0,1478,97,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,67,67,67,67,1244,67,67,67,67,67,67,67,67,67,67,67,477,67,67,67,67,67,67,1294,67,67,67,67,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1324,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,0,1374,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,945,45,45,45,45,45,45,45,45,1908,45,45,1910,45,67,67,67,67,67,67,67,67,1919,67,0,0,97,97,97,97,45,2048,67,2049,0,0,97,2051,45,45,45,939,45,45,45,45,45,45,45,45,45,45,45,45,397,45,45,45,1921,67,67,1923,67,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1947,45,1935,0,0,0,97,1939,97,97,1941,97,45,45,45,45,45,45,382,389,45,45,45,45,45,45,45,45,1810,45,45,1812,67,67,67,67,67,256,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,336,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,45,371,373,45,45,45,955,45,45,45,45,45,45,45,45,45,45,45,45,413,45,45,45,457,459,67,67,67,67,67,67,67,67,473,67,478,67,67,482,67,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,97,1828,97,554,556,97,97,97,97,97,97,97,97,570,97,575,97,97,579,97,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,330,97,97,67,746,67,67,67,67,67,67,67,67,67,758,67,67,67,67,67,67,67,1575,67,67,67,67,67,67,67,67,493,67,67,67,67,67,67,67,97,97,844,97,97,97,97,97,97,97,97,97,856,97,97,97,0,97,97,97,97,97,97,97,97,1735,97,97,97,0,97,97,97,97,97,97,97,1642,97,1644,97,97,890,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,67,67,67,67,1065,1066,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,67,67,67,496,67,67,97,97,1505,97,97,97,97,97,97,97,97,97,97,97,97,97,593,97,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,1617,97,97,1635,0,1637,97,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,67,67,1704,67,67,67,67,97,97,97,97,97,97,97,97,97,565,572,97,97,97,97,97,97,97,97,1832,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,1946,45,45,67,67,67,67,67,97,1926,97,1927,97,0,0,0,97,97,1934,2043,0,0,97,97,97,2047,45,45,67,67,0,1832,97,97,45,45,45,981,45,45,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,131427,0,0,0,0,362,0,365,28809,367,139,45,45,372,45,45,45,45,1661,1662,45,45,45,45,45,1666,45,45,45,45,45,1673,45,1675,45,45,45,45,45,45,45,67,1426,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,67,67,45,418,45,45,420,45,45,423,45,45,45,45,45,45,45,45,959,45,45,962,45,45,45,45,458,67,67,67,67,67,67,67,67,67,67,67,67,67,67,483,67,67,67,67,504,67,67,506,67,67,509,67,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,555,97,97,97,97,97,97,97,97,97,97,97,97,97,97,580,97,97,97,97,601,97,97,603,97,97,606,97,97,97,97,97,97,848,97,97,97,97,97,97,97,97,97,1498,97,97,97,97,97,97,45,45,714,45,45,45,45,45,45,45,45,45,45,45,45,45,989,990,45,67,67,67,67,67,1011,67,67,67,67,1015,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,467,67,67,67,67,67,67,67,45,45,1179,45,45,45,45,45,45,45,45,45,45,45,45,45,1003,1004,67,1217,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,728,67,1461,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,97,1516,97,97,97,97,97,97,97,97,97,97,97,97,97,97,871,97,67,67,67,1705,67,67,67,97,97,97,97,97,97,97,97,97,567,97,97,97,97,97,97,97,97,97,97,1715,97,97,97,97,97,97,97,97,97,0,0,0,45,45,1380,45,45,45,45,45,67,67,97,97,97,97,97,0,0,0,97,1887,97,97,0,0,97,97,97,0,97,97,97,97,97,2006,45,45,1907,45,45,45,45,45,67,67,67,67,67,67,67,67,67,1920,67,97,0,2035,97,97,97,97,97,45,45,45,45,67,67,67,1428,67,67,67,67,67,67,1435,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,146,45,152,45,45,165,45,175,45,180,45,45,187,190,195,45,203,254,257,262,67,270,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,293,97,299,97,97,312,97,322,97,327,97,97,334,337,342,97,350,97,97,0,40976,0,18,18,24,24,27,27,27,67,484,67,67,67,67,67,67,67,67,67,67,67,67,67,499,97,581,97,97,97,97,97,97,97,97,97,97,97,97,97,596,648,45,650,45,651,45,653,45,45,45,657,45,45,45,45,45,45,1954,67,67,67,1958,67,67,67,67,67,67,67,768,67,67,67,67,67,67,67,67,769,67,67,67,67,67,67,67,680,45,45,45,45,45,45,45,45,688,689,691,45,45,45,45,45,983,45,45,45,45,45,45,45,45,45,45,947,45,45,45,45,952,45,45,698,699,45,45,702,703,45,45,45,45,45,45,45,711,744,67,67,67,67,67,67,67,67,67,757,67,67,67,67,761,67,67,67,67,765,67,767,67,67,67,67,67,67,67,67,775,776,778,67,67,67,67,67,67,785,786,67,67,789,790,67,67,67,67,67,67,1442,67,67,67,67,67,67,67,67,67,97,97,97,1775,97,97,97,67,67,67,67,67,798,67,67,67,802,67,67,67,67,67,67,67,67,1465,67,67,1468,67,67,1471,67,67,810,67,67,67,67,67,67,67,67,67,821,25398,542,13112,544,57889,0,0,54074,54074,550,0,833,97,835,97,836,97,838,97,97,0,0,97,97,97,2002,97,97,97,97,97,45,45,45,45,45,1740,45,45,45,1744,45,45,45,97,842,97,97,97,97,97,97,97,97,97,855,97,97,97,97,0,1717,1718,97,97,97,97,97,1722,97,0,0,859,97,97,97,97,863,97,865,97,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,873,874,876,97,97,97,97,97,97,883,884,97,97,887,888,97,18,131427,0,0,0,0,0,0,362,225280,0,365,0,367,0,45,45,45,1531,45,45,45,45,45,45,45,45,45,45,45,1199,45,45,45,45,45,97,97,908,97,97,97,97,97,97,97,97,97,919,638,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2425117,2158877,2158877,2158877,2158877,2158877,2158877,2597149,2158877,2158877,2158877,2158877,2158877,2158877,2642205,2158877,2158877,2158877,2158877,2158877,3158301,0,2375818,2379914,2158730,2158730,2420874,2158730,2449546,2158730,2158730,953,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,965,978,45,45,45,45,45,45,985,45,45,45,45,45,45,45,45,971,45,45,45,45,45,45,45,67,67,67,67,67,1027,67,1029,67,67,67,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,1077,1078,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,366,0,139,2158730,2158730,2158730,2404490,2412682,1113,97,97,97,97,97,97,1121,97,1123,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1540,1155,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,1168,97,97,1171,1172,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,1533,45,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,183,45,45,45,45,201,45,45,45,1219,45,45,45,45,45,45,45,1226,45,45,45,45,45,168,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1046,67,67,1254,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,806,807,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,1351,97,97,97,1354,97,97,97,1359,97,97,97,0,97,97,97,97,1640,97,97,97,97,97,97,97,897,97,97,97,902,97,97,97,97,97,97,97,97,1366,97,97,97,97,97,97,97,1371,97,97,97,0,97,97,97,1730,97,97,97,97,97,97,97,97,915,97,97,97,97,0,360,0,67,67,67,1440,67,67,67,67,67,67,67,67,67,67,67,67,1017,67,1019,67,67,67,67,67,1453,67,67,67,67,67,67,67,67,67,67,1459,97,97,97,1493,97,97,97,97,97,97,97,97,97,97,97,97,97,1525,97,97,97,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,1514,67,67,67,67,1584,67,67,67,67,67,1590,67,67,67,67,67,67,67,783,67,67,67,788,67,67,67,67,67,67,67,67,67,1599,1601,67,67,67,1604,67,1606,1607,67,1472,0,1474,0,1476,0,97,97,97,97,97,97,1614,97,97,97,97,45,45,1850,45,45,45,45,1855,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,1229,97,1618,97,97,97,97,97,97,97,1625,97,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,447,45,45,45,45,45,67,67,1633,97,97,0,97,97,97,97,97,97,97,97,1643,1645,97,97,0,0,97,97,1784,97,97,97,0,0,97,97,0,97,1894,1895,97,1897,97,45,45,45,45,45,45,45,45,45,656,45,45,45,45,45,45,97,1648,97,1650,1651,97,0,45,45,45,1654,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,658,45,45,45,45,664,45,45,1659,45,45,45,45,45,45,45,45,45,45,45,45,45,1187,45,45,1669,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1005,67,67,1681,67,67,67,67,67,67,67,1686,67,67,67,67,67,67,67,784,67,67,67,67,67,67,67,67,1055,67,67,67,67,1060,67,67,97,97,1713,97,0,97,97,97,97,97,97,97,97,97,0,0,0,1378,45,45,45,45,45,45,45,408,45,45,45,45,45,45,45,45,1547,45,1549,45,45,45,45,45,97,97,1780,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,2027,2028,45,45,67,67,2031,2032,67,45,45,1804,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1917,67,67,67,67,67,67,67,1819,67,67,67,67,67,67,67,67,97,97,97,1708,97,97,97,97,97,45,45,1862,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,67,1877,97,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,1839,0,0,97,97,97,97,1936,0,0,97,97,97,97,97,97,1943,1944,1945,45,45,45,45,670,45,45,45,45,674,45,45,45,45,678,45,1948,45,1950,45,45,45,45,1955,1956,1957,67,67,67,1960,67,1962,67,67,67,67,1967,1968,1969,97,0,0,0,97,97,1974,97,0,1936,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1906,0,1977,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,1746,45,45,45,45,2011,67,67,2013,67,67,67,2017,97,97,0,0,2021,97,8192,97,97,2025,45,45,45,45,45,45,67,67,67,67,67,1916,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,140,45,45,45,1180,45,45,45,45,1184,45,45,45,45,45,45,45,387,45,392,45,45,396,45,45,399,45,45,67,207,67,67,67,67,67,67,236,67,67,67,67,67,67,67,800,67,67,67,67,67,67,67,67,67,1603,67,67,67,67,67,0,97,97,287,97,97,97,97,97,97,316,97,97,97,97,97,97,0,45,45,45,45,45,45,45,1656,1657,45,376,45,45,45,45,45,388,45,45,45,45,45,45,45,45,1406,45,45,45,45,45,45,45,67,67,67,67,462,67,67,67,67,67,474,67,67,67,67,67,67,67,817,67,67,67,67,25398,542,13112,544,97,97,97,97,559,97,97,97,97,97,571,97,97,97,97,97,97,896,97,97,97,900,97,97,97,97,97,97,912,914,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,45,391,45,45,45,45,45,45,45,45,713,45,45,45,45,45,45,45,45,45,45,45,45,45,45,662,45,1140,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,636,67,67,1283,67,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,1363,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,889,97,97,97,1714,0,97,97,97,97,97,97,97,97,97,0,0,926,45,45,45,45,45,45,45,45,672,45,45,45,45,45,45,45,45,686,45,45,45,45,45,45,45,45,944,45,45,45,45,45,45,45,45,1676,45,45,45,45,45,45,67,97,97,97,1833,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1902,45,45,45,45,45,957,45,45,45,45,961,45,963,45,45,45,67,97,2034,0,97,97,97,97,97,2040,45,45,45,2042,67,67,67,67,67,67,1574,67,67,67,67,67,1578,67,67,67,67,67,67,799,67,67,67,804,67,67,67,67,67,67,67,1298,0,0,0,1304,0,0,0,1310,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,1414,45,45,45,45,45,45,45,45,45,45,428,45,45,45,45,45,57889,0,0,54074,54074,550,831,97,97,97,97,97,97,97,97,97,568,97,97,97,97,578,97,45,45,968,45,45,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,67,67,67,67,67,25398,1082,13112,1086,54074,1090,0,0,0,0,0,0,364,0,0,0,139,2158592,2158592,2158592,2404352,2412544,67,67,67,67,1464,67,67,67,67,67,67,67,67,67,67,67,510,67,67,67,67,97,97,97,97,1519,97,97,97,97,97,97,97,97,97,97,97,918,97,0,0,0,0,1528,45,45,45,45,45,45,45,45,45,45,45,45,45,45,976,45,1554,45,45,45,45,45,45,45,45,1562,45,45,1565,45,45,45,45,683,45,45,45,687,45,45,692,45,45,45,45,45,1953,45,67,67,67,67,67,67,67,67,67,1014,67,67,67,67,67,67,1568,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,1594,97,97,1649,97,97,97,0,45,45,1653,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,45,45,1670,45,1672,45,45,45,45,45,45,45,45,45,45,67,736,67,67,67,67,67,741,67,67,67,1680,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,67,1692,67,67,67,67,67,67,67,1697,67,1699,67,67,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,468,475,67,67,67,67,67,67,1769,67,67,67,67,67,67,67,97,97,97,97,97,97,97,624,97,97,97,97,97,97,634,97,97,1792,97,97,97,97,97,97,97,45,45,45,45,45,45,45,958,45,45,45,45,45,45,964,45,150,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,977,204,45,67,67,67,217,67,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,67,67,67,67,271,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,351,97,0,40976,0,18,18,24,24,27,27,27,45,45,938,45,45,45,45,45,45,45,45,45,45,45,45,45,1398,45,45,45,153,45,161,45,45,45,45,45,45,45,45,45,45,45,45,660,661,45,45,205,45,67,67,67,67,220,67,228,67,67,67,67,67,67,67,0,0,0,0,0,280,94,0,0,67,67,67,67,67,272,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,352,97,0,40976,0,18,18,24,24,27,27,27,45,439,45,45,45,45,45,445,45,45,45,452,45,45,67,67,212,216,67,67,67,67,67,241,67,246,67,252,67,67,486,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,1245,67,67,67,67,67,67,67,67,1013,67,67,1016,67,67,67,67,67,521,67,67,525,67,67,67,67,67,531,67,67,67,538,67,0,0,2046,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,1418,45,45,1421,97,97,583,97,97,97,97,97,97,97,591,97,97,97,97,97,97,913,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,1384,97,618,97,97,622,97,97,97,97,97,628,97,97,97,635,97,18,131427,0,0,0,639,0,132,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,932,45,45,45,45,45,1544,45,45,45,45,45,1550,45,45,45,45,45,1194,45,1196,45,45,45,45,45,45,45,45,999,45,45,45,45,45,67,67,45,45,667,45,45,45,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,696,45,45,45,701,45,45,45,45,45,45,45,45,710,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,194,45,45,45,729,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,805,67,67,67,67,67,67,67,1587,67,1589,67,67,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,0,0,0,0,0,0,2162968,0,0,67,67,67,67,67,814,816,67,67,67,67,67,25398,542,13112,544,67,67,1008,67,67,67,67,67,67,67,67,67,67,67,1020,67,0,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,45,67,67,67,67,1429,67,1430,67,67,67,67,67,1062,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,1076,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,97,97,97,97,1102,97,97,97,97,97,97,97,97,97,97,97,1124,97,1126,97,97,1114,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1112,97,97,1156,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,97,97,1170,97,97,97,97,0,921,0,0,0,0,0,0,45,45,45,45,1532,45,45,45,45,1536,45,45,45,45,45,172,45,45,45,45,45,45,45,45,45,45,706,45,45,709,45,45,1177,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,1204,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,45,45,1232,45,45,45,45,45,45,45,67,1237,67,67,67,67,67,67,1053,1054,67,67,67,67,67,67,1061,67,67,1282,67,67,67,67,67,67,67,67,67,1289,67,67,67,1292,97,97,97,97,1339,97,97,97,97,97,97,1344,97,97,97,97,45,1849,45,1851,45,45,45,45,45,45,45,45,721,45,45,45,45,45,726,45,1385,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1188,45,45,1401,1402,45,45,45,45,1405,45,45,45,45,45,45,45,45,1752,45,45,45,45,45,67,67,1410,45,45,45,1413,45,1415,45,45,45,45,45,45,1419,45,45,45,45,1806,45,45,45,45,45,45,67,67,67,67,67,67,67,97,97,2019,0,97,67,67,67,1452,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,1259,67,67,67,67,67,67,1264,67,67,1460,67,1462,67,67,67,67,67,67,1466,67,67,67,67,67,67,67,67,1588,67,67,67,67,67,67,67,0,1300,0,0,0,1306,0,0,0,97,97,97,1506,97,97,97,97,97,97,97,97,1512,97,97,97,0,1728,97,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,1515,97,1517,97,97,97,97,97,97,1521,97,97,97,97,97,97,0,45,1652,45,45,45,1655,45,45,45,45,45,1542,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,1553,45,45,45,1556,45,45,45,45,45,45,45,45,45,45,45,45,45,693,45,45,45,67,67,67,67,1572,67,67,67,67,1576,67,67,67,67,67,67,67,67,1602,67,67,1605,67,67,67,0,67,1582,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1580,67,67,1596,67,67,67,67,67,67,67,67,67,67,67,67,67,0,542,0,544,67,67,67,67,1759,67,67,67,67,67,67,67,67,67,67,67,533,67,67,67,67,67,67,67,1770,67,67,67,67,67,97,97,97,97,97,97,1777,97,97,97,1793,97,97,97,97,97,45,45,45,45,45,45,45,998,45,45,1001,1002,45,45,67,67,45,1861,45,67,67,67,67,67,67,67,67,1871,67,1873,1874,67,0,97,45,67,0,97,45,67,16384,97,45,67,97,0,0,0,1473,0,1082,0,0,0,1475,0,1086,0,0,0,1477,1876,67,97,97,97,97,97,1883,0,1885,97,97,97,1889,0,0,0,286,0,0,0,286,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,126,126,126,2053,0,2055,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,2039,97,45,45,45,45,67,67,67,67,67,226,67,67,67,67,67,67,67,67,1246,67,67,1249,1250,67,67,67,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,141,45,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,1186,45,45,1189,45,45,155,45,45,45,45,45,45,45,45,45,191,45,45,45,45,700,45,45,45,45,45,45,45,45,45,45,45,1753,45,45,45,67,67,45,45,67,208,67,67,67,222,67,67,67,67,67,67,67,67,67,1764,67,67,67,67,67,67,67,258,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,288,97,97,97,302,97,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,338,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,370,45,45,45,45,716,45,45,45,45,45,722,45,45,45,45,45,45,1912,67,67,67,67,67,67,67,67,67,819,67,67,25398,542,13112,544,45,403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1409,45,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,67,771,67,67,67,67,520,67,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,1271,67,67,67,1274,67,67,67,1279,67,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,553,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,97,1138,97,97,97,97,617,97,97,97,97,97,97,97,97,97,97,97,631,97,97,97,0,1834,97,97,97,97,97,0,0,0,97,97,97,97,97,353,0,40976,0,18,18,24,24,27,27,27,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,682,45,45,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,67,67,747,748,67,67,67,67,755,67,67,67,67,67,67,67,0,0,0,1302,0,0,0,1308,0,67,794,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1701,67,97,97,97,845,846,97,97,97,97,853,97,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,97,892,97,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,45,992,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,1239,67,67,67,1063,67,67,67,67,67,1068,67,67,67,67,67,67,67,0,0,1301,0,0,0,1307,0,0,97,1141,97,97,97,97,97,97,97,97,97,97,97,1152,97,97,0,0,97,97,2001,0,97,2003,97,97,97,45,45,45,1739,45,45,45,1742,45,45,45,45,45,97,97,97,97,1157,97,97,97,97,97,1162,97,97,97,97,97,97,1145,97,97,97,97,97,1151,97,97,97,1253,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,539,45,1423,45,45,67,67,67,67,67,67,67,1431,67,67,67,67,67,67,67,1695,67,67,67,67,67,1700,67,1702,67,67,1439,67,67,67,67,67,67,67,67,67,67,67,67,67,514,67,67,97,97,1492,97,97,97,97,97,97,97,97,97,97,97,97,97,611,97,97,1703,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,852,97,97,97,97,97,97,45,1949,45,1951,45,45,45,67,67,67,67,67,67,67,1961,67,0,97,45,67,0,97,2060,2061,0,2062,45,67,97,0,0,2036,97,97,97,97,45,45,45,45,67,67,67,67,67,223,67,67,237,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,507,67,67,67,67,67,67,67,1963,67,67,67,97,97,97,97,0,1972,0,97,97,97,1975,0,921,29315,0,0,0,0,45,45,45,931,45,45,45,45,45,407,45,45,45,45,45,45,45,45,45,417,45,45,1989,67,67,67,67,67,67,67,67,67,67,67,1996,97,18,131427,0,0,360,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,930,45,45,45,45,45,45,444,45,45,45,45,45,45,45,67,67,97,97,1998,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,1985,45,1986,45,45,45,156,45,45,170,45,45,45,45,45,45,45,45,45,45,675,45,45,45,45,679,131427,0,358,0,0,362,0,365,28809,367,139,45,45,45,45,45,381,45,45,45,45,45,45,45,45,45,400,45,45,419,45,45,45,45,45,45,45,45,45,45,45,45,436,67,67,67,67,67,505,67,67,67,67,67,67,67,67,67,67,820,67,25398,542,13112,544,67,67,522,67,67,67,67,67,529,67,67,67,67,67,67,67,0,1299,0,0,0,1305,0,0,0,97,97,619,97,97,97,97,97,626,97,97,97,97,97,97,97,1105,97,97,97,97,1109,97,97,97,67,67,67,67,749,67,67,67,67,67,67,67,67,67,760,67,0,97,45,67,2058,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,2041,67,67,67,67,67,780,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,97,97,97,878,97,97,97,97,97,97,97,97,97,97,97,97,97,1629,97,0,45,979,45,45,45,45,984,45,45,45,45,45,45,45,45,45,1198,45,45,45,45,45,45,67,1023,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,470,67,67,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1094,0,0,0,1092,1315,0,0,0,0,97,97,97,97,97,97,97,97,97,1486,97,1489,97,97,97,1117,97,97,97,97,1122,97,97,97,97,97,97,97,1146,97,97,97,97,97,97,97,97,881,97,97,97,886,97,97,97,1311,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1615,97,97,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,97,1847,97,45,45,45,45,1852,45,45,45,45,45,45,45,1235,45,45,45,67,67,67,67,67,1868,67,67,67,1872,67,67,67,67,67,97,97,97,97,1882,0,0,0,97,97,97,97,0,1891,67,67,67,67,67,97,97,97,97,97,1929,0,0,97,97,97,97,97,97,45,1900,45,1901,45,45,45,1905,45,67,2054,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,2037,2038,97,97,45,45,45,45,67,67,67,67,1867,67,67,67,67,67,67,67,67,67,1774,97,97,97,97,97,97,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,142,45,45,45,1412,45,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,157,45,45,171,45,45,45,182,45,45,45,45,200,45,45,45,1543,45,45,45,45,45,45,45,45,1551,45,45,45,45,1181,45,45,45,45,45,45,45,45,45,45,45,1211,45,45,45,1214,45,45,45,67,209,67,67,67,224,67,67,238,67,67,67,249,67,0,97,2056,2057,0,2059,45,67,0,97,45,67,97,0,0,1937,97,97,97,97,97,97,45,45,45,45,45,45,1741,45,45,45,45,45,45,67,67,67,267,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,289,97,97,97,304,97,97,318,97,97,97,329,97,97,0,0,97,1783,97,97,97,97,0,0,97,97,0,97,97,97,45,2026,45,45,45,45,67,2030,67,67,67,67,67,67,1041,67,67,67,67,67,67,67,67,67,1044,67,67,67,67,67,67,97,97,347,97,97,97,0,40976,0,18,18,24,24,27,27,27,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1420,45,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,840,67,1007,67,67,67,67,67,67,67,67,67,67,67,67,67,67,759,67,67,67,67,67,67,67,1052,67,67,67,67,67,67,67,67,67,67,1031,67,67,67,67,67,97,97,97,1101,97,97,97,97,97,97,97,97,97,97,97,97,592,97,97,97,1190,45,45,45,45,45,1195,45,1197,45,45,45,45,1201,45,45,45,45,1952,45,45,67,67,67,67,67,67,67,67,67,67,67,67,250,67,67,67,1255,67,1257,67,67,67,67,1261,67,67,67,67,67,67,67,67,1685,67,67,67,67,67,67,67,0,24851,12565,0,0,0,0,28809,53532,67,67,1267,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,0,0,0,0,0,0,2162688,0,0,1281,67,67,67,67,1285,67,67,67,67,67,67,67,67,67,67,1070,67,67,67,67,67,1335,97,1337,97,97,97,97,1341,97,97,97,97,97,97,97,97,882,97,97,97,97,97,97,97,1347,97,97,97,97,97,97,1353,97,97,97,97,97,97,1361,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,0,544,0,550,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2158592,2990080,2158592,2158592,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,53530,97,97,97,1365,97,97,97,97,97,97,97,97,97,97,97,97,608,97,97,97,45,45,1424,45,1425,67,67,67,67,67,67,67,67,67,67,67,1058,67,67,67,67,45,1555,45,45,1557,45,45,45,45,45,45,45,45,45,45,45,707,45,45,45,45,67,67,1570,67,67,67,67,67,67,67,67,67,67,67,67,67,773,67,67,1595,67,67,1597,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,139,2158592,2158592,2158592,2404352,2412544,97,97,97,1636,97,97,97,1639,97,97,1641,97,97,97,97,97,97,1173,0,921,0,0,0,0,0,0,45,67,67,67,1693,67,67,67,67,67,67,67,1698,67,67,67,67,67,67,67,1773,67,97,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,880,97,97,97,97,97,97,97,97,1106,97,97,97,97,97,97,97,1860,45,45,67,67,1865,67,67,67,67,1870,67,67,67,67,1875,67,67,97,97,1880,97,97,0,0,0,97,97,1888,97,0,0,0,1938,97,97,97,97,97,45,45,45,45,45,45,1854,45,45,45,45,45,45,45,1909,45,45,1911,67,67,67,67,67,67,67,67,67,67,1248,67,67,67,67,67,67,1922,67,67,1924,97,97,97,97,97,0,0,0,97,97,97,97,97,1898,45,45,45,45,45,45,1904,45,45,67,67,67,67,97,97,97,97,0,0,16384,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,1724,2008,2009,45,45,67,67,67,2014,2015,67,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,45,2022,0,2023,97,97,45,45,45,45,45,45,67,67,67,67,67,67,1869,67,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,147,151,154,45,162,45,45,176,178,181,45,45,45,192,196,45,45,45,45,2012,67,67,67,67,67,67,2018,97,0,0,97,1978,97,97,97,1982,45,45,45,45,45,45,45,45,45,972,973,45,45,45,45,45,67,259,263,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,294,298,301,97,309,97,97,323,325,328,97,97,97,97,97,560,97,97,97,569,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,339,343,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,67,67,503,67,67,67,67,67,67,67,67,67,512,67,67,519,97,97,600,97,97,97,97,97,97,97,97,97,609,97,97,616,45,649,45,45,45,45,45,654,45,45,45,45,45,45,45,45,1393,45,45,45,45,45,45,45,45,1209,45,45,45,45,45,45,45,67,763,67,67,67,67,67,67,67,67,770,67,67,67,774,67,0,2045,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,994,45,45,45,45,45,45,45,45,45,45,67,67,213,67,219,67,67,232,67,242,67,247,67,67,67,779,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,67,811,67,67,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,834,97,97,97,97,97,839,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,645,97,97,861,97,97,97,97,97,97,97,97,868,97,97,97,872,97,97,877,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,97,97,97,97,909,97,97,97,97,97,97,97,97,97,0,0,0,18,18,24,24,27,27,27,1036,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,1033,67,67,67,97,97,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,0,67,67,67,1295,67,67,67,0,0,0,0,0,0,0,0,0,97,1317,97,97,97,97,97,97,1375,97,97,97,0,0,0,45,1379,45,45,45,45,45,45,422,45,45,45,429,431,45,45,45,45,0,1090,0,0,97,1479,97,97,97,97,97,97,97,97,97,97,1357,97,97,97,97,97,97,97,97,97,1716,97,97,97,97,97,97,97,97,97,1723,0,921,29315,0,0,0,0,45,929,45,45,45,45,45,45,45,1392,45,45,45,45,45,45,45,45,45,960,45,45,45,45,45,45,97,97,97,1738,45,45,45,45,45,45,45,1743,45,45,45,45,166,45,45,45,45,184,186,45,45,197,45,45,97,1779,0,0,97,97,97,97,97,97,0,0,97,97,0,97,18,131427,0,638,0,0,0,0,362,0,640,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,1537,45,45,45,45,45,1803,45,45,45,45,45,1809,45,45,45,67,67,67,1814,67,67,67,67,67,67,1821,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,0,0,67,67,67,1818,67,67,67,67,67,1824,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,1890,0,1829,97,97,0,0,97,97,1836,97,97,0,0,0,97,97,97,97,1981,45,45,45,45,45,45,45,45,45,1987,1845,97,97,97,45,45,45,45,45,1853,45,45,45,1857,45,45,45,67,1864,67,1866,67,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,1710,1711,67,67,97,97,97,97,97,0,0,0,1886,97,97,97,0,0,97,97,97,97,1838,0,0,0,97,1843,97,0,1893,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1745,45,45,67,67,67,67,67,97,97,97,97,97,0,0,1931,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,67,2044,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1660,45,45,45,45,45,45,45,45,45,45,45,45,453,45,455,67,67,67,67,268,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,348,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,359,0,0,362,0,365,28809,367,139,45,45,45,45,45,421,45,45,45,45,45,45,45,434,45,45,695,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1667,45,0,921,29315,0,925,0,0,45,45,45,45,45,45,45,45,45,1811,45,67,67,67,67,67,67,1037,67,1039,67,67,67,67,67,67,67,67,67,67,67,67,1277,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1095,0,0,0,1096,97,97,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,97,1131,97,1133,97,97,97,97,97,97,97,97,97,97,1370,97,97,97,97,97,1312,0,0,0,0,1096,0,0,0,97,97,97,97,97,97,97,1327,97,97,97,97,97,1332,97,97,97,1830,97,0,0,97,97,97,97,97,0,0,0,97,97,97,1896,97,97,45,45,45,45,45,45,45,45,45,1548,45,45,45,45,45,45,133,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,380,45,45,45,45,45,45,45,45,45,45,401,45,45,158,45,45,45,45,45,45,45,45,45,45,45,45,45,1200,45,45,45,45,206,67,67,67,67,67,225,67,67,67,67,67,67,67,67,754,67,67,67,67,67,67,67,57889,0,0,54074,54074,550,832,97,97,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,67,67,67,67,67,25398,1083,13112,1087,54074,1091,0,0,0,0,0,0,1316,0,831,97,97,97,97,97,97,97,1174,921,0,1175,0,0,0,0,45,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,148,67,67,264,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,295,97,97,97,97,313,97,97,97,97,331,333,97,18,131427,356,638,0,0,0,0,362,0,0,365,0,367,0,45,45,1530,45,45,45,45,45,45,45,45,45,45,45,45,988,45,45,45,97,344,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,402,404,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1756,67,438,45,45,45,45,45,45,45,45,449,450,45,45,45,67,67,214,218,221,67,229,67,67,243,245,248,67,67,67,67,67,488,490,67,67,67,67,67,67,67,67,67,67,67,1071,67,1073,67,67,67,67,67,524,67,67,67,67,67,67,67,67,535,536,67,67,67,67,67,67,1683,1684,67,67,67,67,1688,1689,67,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,97,97,97,585,587,97,97,97,97,97,97,97,97,97,97,97,1163,97,97,97,97,97,97,97,621,97,97,97,97,97,97,97,97,632,633,97,97,0,0,1782,97,97,97,97,97,0,0,97,97,0,97,712,45,45,45,717,45,45,45,45,45,45,45,45,725,45,45,45,163,167,173,177,45,45,45,45,45,193,45,45,45,45,982,45,45,45,45,45,45,987,45,45,45,45,45,1558,45,1560,45,45,45,45,45,45,45,45,704,705,45,45,45,45,45,45,45,45,731,45,45,45,67,67,67,67,67,739,67,67,67,67,67,67,273,0,24850,12564,0,0,0,0,28809,53531,67,67,67,764,67,67,67,67,67,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,812,67,67,67,67,818,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,97,97,97,97,837,97,97,97,97,97,602,97,97,97,97,97,97,97,97,97,97,1137,97,97,97,97,97,97,97,97,97,862,97,97,97,97,97,97,97,97,97,97,97,1627,97,97,97,0,97,97,97,97,910,97,97,97,97,916,97,97,97,0,0,0,97,97,1940,97,97,1942,45,45,45,45,45,45,385,45,45,45,45,395,45,45,45,45,966,45,969,45,45,45,45,45,45,45,45,45,45,975,45,45,45,406,45,45,45,45,45,45,45,45,45,45,45,45,974,45,45,45,67,67,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,67,67,1040,67,1042,67,1045,67,67,67,67,67,67,67,97,1706,97,97,97,1709,97,97,97,67,67,67,67,1051,67,67,67,67,67,1057,67,67,67,67,67,67,67,1443,67,67,1446,67,67,67,67,67,67,67,1297,0,0,0,1303,0,0,0,1309,67,67,67,67,1079,25398,0,13112,0,54074,0,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,1098,97,97,97,97,97,1104,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,1128,97,97,97,97,97,97,1134,97,1136,97,1139,97,97,97,97,97,97,1622,97,97,97,97,97,97,97,97,0,921,0,0,0,1176,0,646,45,67,67,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,67,97,1348,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1127,97,67,1569,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1448,1449,67,1816,67,67,67,67,67,67,67,67,67,1825,67,67,1827,97,97,0,1781,97,97,97,97,97,97,0,0,97,97,0,97,97,97,1831,0,0,97,97,97,97,97,0,0,0,97,97,97,1980,97,45,45,45,45,45,45,45,45,45,45,1395,45,45,45,45,45,97,1846,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,45,45,2010,45,67,67,67,67,67,2016,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,2007,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,143,45,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,67,1813,67,67,1815,45,45,67,210,67,67,67,67,67,67,239,67,67,67,67,67,67,67,1454,67,67,67,67,67,67,67,67,67,1445,67,67,67,67,67,67,97,97,290,97,97,97,97,97,97,319,97,97,97,97,97,97,303,97,97,317,97,97,97,97,97,97,305,97,97,97,97,97,97,97,97,97,899,97,97,97,97,97,97,375,45,45,45,379,45,45,390,45,45,394,45,45,45,45,45,443,45,45,45,45,45,45,45,45,67,67,67,67,67,461,67,67,67,465,67,67,476,67,67,480,67,67,67,67,67,67,1694,67,67,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,500,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,97,97,97,558,97,97,97,562,97,97,573,97,97,577,97,97,97,97,97,895,97,97,97,97,97,97,903,97,97,97,0,97,97,1638,97,97,97,97,97,97,97,97,1646,597,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1334,45,681,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1396,45,45,1399,45,45,730,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1434,67,67,67,67,67,67,750,67,67,67,67,67,67,67,67,67,67,1456,67,67,67,67,67,45,45,993,45,45,45,45,45,45,45,45,45,45,45,67,67,1238,67,67,1006,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1280,1048,1049,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,67,1286,67,67,67,67,67,67,67,1291,67,97,97,1100,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,920,97,97,1142,1143,97,97,97,97,97,97,97,97,97,97,1153,97,97,97,97,97,1158,97,97,97,1161,97,97,97,97,1166,97,97,97,97,97,1325,97,97,97,97,97,97,97,97,97,97,1328,97,97,97,97,97,97,97,45,1218,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,67,67,67,67,67,1269,67,67,67,67,67,67,67,67,1278,67,67,67,67,67,67,1761,67,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,97,97,1349,97,97,97,97,97,97,97,97,1358,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,0,921,0,0,926,0,0,0,45,45,1411,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1754,45,45,67,67,1301,0,1307,0,1313,97,97,97,97,97,97,97,97,97,97,97,21054,97,97,97,97,67,1757,67,67,67,1760,67,67,67,67,67,67,67,67,67,67,1467,67,67,67,67,67,1778,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,67,67,67,67,67,1820,67,1822,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1933,97,1892,97,97,97,97,97,97,1899,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,673,45,45,45,45,45,45,45,67,67,67,67,67,1925,97,97,97,97,0,0,0,97,97,97,97,97,623,97,97,97,97,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,1796,97,45,45,45,45,45,45,45,970,45,45,45,45,45,45,45,45,1417,45,45,45,45,45,45,45,67,1964,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,97,97,1721,97,97,0,0,1997,97,0,0,2e3,97,97,0,97,97,97,97,97,45,45,45,45,733,45,67,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,144,45,45,45,1805,45,1807,45,45,45,45,45,67,67,67,67,67,67,231,67,67,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,45,45,67,211,67,67,67,67,230,234,240,244,67,67,67,67,67,67,464,67,67,67,67,67,67,479,67,67,67,260,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,291,97,97,97,97,310,314,320,324,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,1355,97,97,97,97,97,97,1362,340,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,360,0,362,0,365,28809,367,139,369,45,45,45,374,67,67,460,67,67,67,67,466,67,67,67,67,67,67,67,67,801,67,67,67,67,67,67,67,67,67,487,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,67,1772,67,67,97,97,97,97,97,97,97,0,921,922,1175,0,0,0,0,45,67,502,67,67,67,67,67,67,67,508,67,67,67,515,517,67,67,67,67,67,97,97,97,97,97,0,0,0,1932,97,97,0,1999,97,97,97,0,97,97,2004,2005,97,45,45,45,45,1193,45,45,45,45,45,45,45,45,45,45,45,676,45,45,45,45,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,552,97,97,97,97,97,1377,0,0,45,45,45,45,45,45,45,45,655,45,45,45,45,45,45,45,97,97,557,97,97,97,97,563,97,97,97,97,97,97,97,97,1135,97,97,97,97,97,97,97,97,97,584,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,911,97,97,97,97,97,97,97,638,0,0,0,0,1315,0,0,0,0,97,97,97,1319,97,97,97,0,97,97,97,97,97,97,1733,97,97,97,97,97,97,1340,97,97,97,1343,97,97,1345,97,1346,97,599,97,97,97,97,97,97,97,605,97,97,97,612,614,97,97,97,97,97,1794,97,97,97,45,45,45,45,45,45,45,1207,45,45,45,45,45,45,1213,45,45,745,67,67,67,67,751,67,67,67,67,67,67,67,67,67,67,1577,67,67,67,67,67,762,67,67,67,67,766,67,67,67,67,67,67,67,67,67,67,1765,67,67,67,67,67,777,67,67,781,67,67,67,67,67,67,67,67,67,67,67,67,1592,1593,67,67,97,843,97,97,97,97,849,97,97,97,97,97,97,97,97,97,1510,97,97,97,97,97,97,97,860,97,97,97,97,864,97,97,97,97,97,97,97,97,97,1797,45,45,45,45,1801,45,97,875,97,97,879,97,97,97,97,97,97,97,97,97,97,97,1522,97,97,97,97,97,991,45,45,45,45,996,45,45,45,45,45,45,45,45,67,67,215,67,67,67,67,233,67,67,67,67,251,253,1022,67,67,67,1026,67,67,67,67,67,67,67,67,67,67,1035,67,67,1038,67,67,67,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,67,1064,67,67,67,1067,67,67,67,67,1072,67,67,67,67,67,67,1296,0,0,0,0,0,0,0,0,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,1096,0,921,29315,0,0,0,0,928,45,45,45,45,45,934,45,45,45,164,45,45,45,45,45,45,45,45,45,198,45,45,45,378,45,45,45,45,45,45,393,45,45,45,398,45,97,97,1116,97,97,97,1120,97,97,97,97,97,97,97,97,97,1147,1148,97,97,97,97,97,97,97,1129,97,97,1132,97,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,0,45,1178,45,45,45,45,45,45,45,45,45,1185,45,45,45,45,441,45,45,45,45,45,45,451,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,1260,67,67,67,1263,67,67,1265,1203,45,45,1205,45,1206,45,45,45,45,45,45,45,45,45,1216,67,1266,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,492,67,67,67,67,67,67,67,67,67,471,67,67,67,67,481,67,45,1386,45,1389,45,45,45,45,1394,45,45,45,1397,45,45,45,45,995,45,997,45,45,45,45,45,45,45,67,67,67,67,1915,67,67,67,67,67,1422,45,45,45,67,67,67,67,67,67,67,67,67,1433,67,1436,67,67,67,67,1441,67,67,67,1444,67,67,67,67,67,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,97,1494,97,97,97,1497,97,97,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,67,1571,67,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,67,67,1583,67,67,67,67,67,67,67,67,1591,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,97,1634,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1125,97,97,97,1647,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,1183,45,45,45,45,45,45,45,45,45,409,45,45,45,45,45,45,1658,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1668,1712,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,1835,97,97,97,97,0,0,0,97,97,1844,97,97,1726,0,97,97,97,97,97,1732,97,1734,97,97,97,97,97,300,97,308,97,97,97,97,97,97,97,97,866,97,97,97,97,97,97,97,67,67,67,1758,67,67,67,1762,67,67,67,67,67,67,67,67,1043,67,67,67,67,67,67,67,67,67,67,67,67,1771,67,67,67,97,97,97,97,97,1776,97,97,97,97,297,97,97,97,97,97,97,97,97,97,97,97,1108,97,97,97,97,67,67,67,1966,97,97,97,1970,0,0,0,97,97,97,97,0,97,97,97,1720,97,97,97,97,97,0,0,97,97,97,1837,97,0,1840,1841,97,97,97,1988,45,67,67,67,67,67,67,67,67,67,1994,1995,67,97,97,97,97,97,1103,97,97,97,97,97,97,97,97,97,97,917,97,97,0,0,0,67,67,265,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,345,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,361,362,0,365,28809,367,139,45,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,411,45,45,414,45,45,45,45,377,45,45,45,386,45,45,45,45,45,45,45,45,45,1223,45,45,45,45,45,45,45,45,45,426,45,45,433,45,45,45,67,67,67,67,67,463,67,67,67,472,67,67,67,67,67,67,67,527,67,67,67,67,67,67,537,67,540,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,564,97,97,97,97,97,97,97,637,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,927,45,45,45,45,45,45,45,45,45,1234,45,45,45,45,67,67,67,67,1240,45,697,45,45,45,45,45,45,45,45,45,45,708,45,45,45,45,1221,45,45,45,45,1225,45,45,45,45,45,45,384,45,45,45,45,45,45,45,45,45,1210,45,45,45,45,45,45,67,67,795,67,67,67,67,67,67,67,67,67,67,67,67,67,1470,67,67,67,67,67,67,67,815,67,67,67,67,67,67,25398,542,13112,544,97,97,97,893,97,97,97,97,97,97,97,97,97,97,97,97,1164,97,97,97,67,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,1687,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,1097,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1450,45,45,1388,45,1390,45,45,45,45,45,45,45,45,45,45,45,1236,67,67,67,67,67,1437,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1472,1490,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1503,67,67,67,67,67,97,97,97,97,97,0,1930,0,97,97,97,97,97,847,97,97,97,97,97,97,97,97,97,858,67,67,1965,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,1719,97,97,97,97,97,97,0,0,0,45,45,45,45,1382,45,1383,45,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,1563,45,45,45,45,45,67,261,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,341,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,1099,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1333,97,1230,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1992,67,1993,67,67,67,97,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,1665,45,45,45,45,45,131427,357,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,684,45,45,45,45,45,45,45,45,45,45,412,45,45,45,416,45,45,45,440,45,45,45,45,45,45,45,45,45,45,45,67,67,1990,67,1991,67,67,67,67,67,67,67,97,97,1707,97,97,97,97,97,97,501,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,67,67,67,526,67,67,67,67,67,67,67,67,67,67,1030,67,1032,67,67,67,67,598,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1632,0,921,29315,923,0,0,0,45,45,45,45,45,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,425,45,45,45,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1093,0,0,0,0,0,97,1609,97,97,97,97,97,97,97,97,97,1369,97,97,97,1372,97,97,67,67,266,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,346,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,665,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1677,45,45,45,45,67,45,45,954,45,956,45,45,45,45,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,448,45,45,45,45,67,456,67,67,67,67,67,1270,67,67,67,67,67,67,67,67,67,67,1069,67,67,67,67,67,67,97,97,97,1350,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,97,97,97,97,97,1376,0,0,0,45,45,45,45,45,45,45,45,1559,1561,45,45,45,1564,45,1566,1567,45,67,67,67,67,67,1573,67,67,67,67,67,67,67,67,67,67,1247,67,67,67,67,67,1252,97,1725,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1628,97,1630,0,0,94242,0,0,0,2211840,0,1118208,0,0,0,0,2158592,2158731,2158592,2158592,2158592,3117056,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3018752,2158592,3043328,2158592,2158592,2158592,2158592,3080192,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158878,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2605056,2158592,2158592,2207744,0,542,0,544,0,0,2166784,0,0,0,550,0,0,2158592,2158592,2686976,2158592,2715648,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2867200,2158592,2904064,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,0,2211840,0,0,1130496,0,0,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,139,0,0,0,139,0,2367488,2207744,0,0,0,0,176128,0,2166784,0,0,0,0,0,286,2158592,2158592,3170304,3174400,2158592,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,1508,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,2158592,2158592,2158592,2158592,3158016,67,24850,24850,12564,12564,0,0,0,0,0,53531,53531,0,286,97,97,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,1154,57889,0,0,0,0,550,0,97,97,97,97,97,97,97,97,97,561,97,97,97,97,97,97,576,97,97,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,0,0,139264,0,921,29315,0,0,926,0,45,45,45,45,45,45,45,45,45,719,720,45,45,45,45,45,45,45,45,685,45,45,45,45,45,45,45,45,45,942,45,45,946,45,45,45,950,45,45,0,2146304,2146304,0,0,0,0,2224128,2224128,2224128,2232320,2232320,2232320,2232320,0,0,1301,0,0,0,0,0,1307,0,0,0,0,0,1313,0,0,0,0,0,0,0,97,97,1318,97,97,97,97,97,97,1795,97,97,45,45,45,45,45,45,45,446,45,45,45,45,45,45,67,67,2158592,2146304,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,924,0,0,45,45,45,45,45,45,45,45,45,1e3,45,45,45,45,67,67],r.EXPECTED=[290,300,304,353,296,309,305,319,315,324,328,352,354,334,338,330,320,345,349,293,358,362,341,366,312,370,374,378,382,386,390,394,398,737,402,634,439,604,634,634,634,634,408,634,634,634,404,634,634,634,457,634,634,963,634,634,413,634,634,634,634,634,634,634,663,418,422,903,902,426,431,548,634,437,521,919,443,615,409,449,455,624,731,751,634,461,465,672,470,469,474,481,485,477,489,493,629,542,497,505,603,602,991,648,510,804,634,515,958,526,525,530,768,634,546,552,711,710,593,558,562,618,566,570,574,578,582,586,590,608,612,660,822,821,634,622,596,444,628,533,724,633,640,653,647,652,536,1008,451,450,445,657,670,676,685,689,693,697,701,704,707,715,719,798,815,634,723,762,996,634,728,969,730,735,908,634,741,679,889,511,747,634,750,755,499,666,499,501,759,772,776,780,634,787,784,797,802,809,808,427,814,1006,517,634,519,853,634,813,850,793,634,819,826,833,832,837,843,847,857,861,863,867,871,875,879,883,643,887,539,980,979,634,893,944,634,900,896,634,907,933,506,912,917,828,433,636,635,554,961,923,930,927,937,941,634,634,634,974,948,952,985,913,968,967,743,634,973,839,634,978,599,634,984,989,765,444,995,1e3,634,1003,790,955,1012,681,634,634,634,634,634,414,1016,1020,1024,1085,1027,1090,1090,1046,1080,1137,1108,1215,1049,1032,1039,1085,1085,1085,1085,1058,1062,1068,1085,1086,1090,1090,1091,1072,1064,1107,1090,1090,1090,1118,1123,1138,1078,1074,1084,1085,1085,1085,1087,1090,1062,1052,1060,1114,1062,1104,1085,1085,1090,1090,1028,1122,1063,1128,1139,1127,1158,1085,1085,1151,1090,1090,1090,1095,1090,1132,1073,1136,1143,1061,1150,1085,1155,1098,1101,1146,1162,1169,1101,1185,1151,1090,1110,1173,1054,1087,1109,1177,1165,1089,1204,1184,1107,1189,1193,1088,1197,1180,1201,1208,1042,1212,1219,1223,1227,1231,1235,1245,1777,1527,1686,1686,1238,1686,1254,1686,1686,1686,1294,1669,1686,1686,1686,1322,1625,1534,1268,1624,1275,1281,1443,1292,1300,1686,1686,1686,1350,1826,1306,1686,1686,1240,2032,1317,1321,1686,1686,1253,1686,1326,1686,1686,1686,1418,1709,1446,1686,1686,1686,1492,1686,1295,1447,1686,1686,1258,1686,1736,1686,1686,1520,1355,1686,1288,1348,1361,1686,1359,1686,1364,1498,1368,1302,1362,1381,1389,1395,1486,1686,1371,1377,1370,1686,1375,1382,1384,1402,1408,1385,1383,1619,1413,1423,1428,1433,1686,1686,1270,1686,1338,1686,1440,1686,1686,1686,1499,1465,1686,1686,1686,1639,1473,1884,1686,1686,1293,1864,1686,1686,1296,1321,1483,1686,1686,1686,1646,1686,1748,1496,1686,1418,1675,1686,1418,1702,1686,1418,1981,1686,1429,1409,1427,1504,1692,1686,1686,1313,1448,1651,1508,1686,1686,1340,1686,1903,1686,1686,1435,1513,1686,1283,1287,1519,1686,1524,1363,1568,1938,1539,1566,1579,1479,1533,1538,1553,1544,1552,1557,1563,1574,1557,1583,1589,1590,1759,1594,1603,1607,1611,1686,1436,1514,1686,1434,1656,1686,1434,1680,1686,1453,1686,1686,1686,1559,1617,1686,1770,1418,1623,1769,1629,1686,1515,1335,1686,1285,1686,1671,1921,1650,1686,1686,1344,1308,1666,1686,1686,1686,1659,1685,1686,1686,1686,1686,1241,1686,1686,1844,1691,1686,1630,1977,1970,1362,1686,1686,1686,1693,1698,1686,1686,1686,1697,1686,1764,1715,1686,1634,1638,1686,1599,1585,1686,1271,1686,1269,1686,1721,1686,1686,1354,1686,1801,1686,1799,1686,1640,1686,1686,1461,1686,1686,1732,1686,1944,1686,1740,1686,1746,1415,1396,1686,1598,1547,1417,1597,1416,1577,1546,1397,1577,1547,1548,1570,1398,1753,1686,1652,1509,1686,1686,1686,1757,1686,1419,1686,1763,1418,1768,1781,1686,1686,1686,1705,1686,2048,1792,1686,1686,1686,1735,1686,1797,1686,1686,1404,1686,1639,1815,1686,1686,1418,2017,1820,1686,1686,1803,1686,1686,1686,1736,1489,1686,1686,1825,1338,1260,1263,1686,1686,1785,1686,1686,1728,1686,1686,1749,1497,1830,1830,1262,1248,1261,1329,1260,1264,1329,1248,1249,1259,1540,1849,1842,1686,1686,1835,1686,1686,1816,1686,1686,1831,1882,1848,1686,1686,1686,1774,2071,1854,1686,1686,1469,1884,1686,1821,1859,1686,1686,1350,1883,1686,1686,1686,1781,1391,1875,1686,1686,1613,1644,1686,1686,1889,1686,1686,1662,1884,1686,1885,1890,1686,1686,1686,1894,1686,1686,1678,1686,1907,1686,1686,1529,1914,1686,1838,1686,1686,1881,1686,1686,1872,1876,1836,1919,1686,1837,1692,1910,1686,1925,1928,1742,1686,1811,1811,1930,1810,1929,1935,1928,1900,1942,1867,1868,1931,1035,1788,1948,1952,1956,1960,1964,1686,1976,1686,1686,1686,2065,1686,1992,2037,1686,1686,1998,2009,1972,2002,1686,1686,1686,2077,1300,2023,1686,1686,1686,1807,2031,1686,1686,1686,1860,1500,2032,1686,1686,1686,2083,1686,2036,1686,1277,1276,2042,1877,1686,1686,2041,1686,1686,2027,2037,2012,1686,2012,1855,1850,1686,2046,1686,1686,2054,1996,1686,1897,1309,2059,2052,1686,2058,1686,1686,2081,1686,1717,1477,1686,1331,1686,1686,1687,1686,1860,1681,1686,1686,1686,1966,1724,1686,1686,1686,1984,2015,1686,1686,1686,1988,1686,2063,1686,1686,1686,2005,1686,1727,1686,1686,1711,1457,2069,1686,1686,1686,2019,2075,1686,1686,1915,1686,1686,1793,1874,1686,1686,1491,1362,1449,1686,1686,1460,2098,2087,2091,2095,2184,2102,2113,2780,2117,2134,2142,2281,2146,2146,2146,2304,2296,2181,2639,2591,2872,2592,2873,2313,2195,2200,2281,2146,2273,2226,2204,2152,2219,2276,2167,2177,2276,2235,2276,2276,2230,2281,2276,2296,2276,2293,2276,2276,2276,2276,2234,2276,2311,2314,2210,2199,2217,2222,2276,2276,2276,2240,2276,2294,2276,2276,2173,2276,2198,2281,2281,2281,2281,2282,2146,2146,2146,2146,2205,2146,2204,2248,2276,2235,2276,2297,2276,2276,2276,2277,2256,2281,2283,2146,2146,2146,2275,2276,2295,2276,2276,2293,2146,2304,2264,2269,2221,2276,2276,2276,2293,2295,2276,2276,2276,2295,2263,2205,2268,2220,2172,2276,2276,2276,2296,2276,2276,2296,2294,2276,2276,2278,2281,2281,2280,2281,2281,2281,2283,2206,2223,2276,2276,2279,2281,2281,2146,2273,2276,2276,2281,2281,2281,2276,2292,2276,2298,2225,2276,2298,2169,2224,2292,2298,2171,2229,2281,2281,2171,2236,2281,2281,2281,2146,2275,2225,2292,2299,2276,2229,2281,2146,2276,2290,2297,2283,2146,2146,2274,2224,2227,2298,2225,2297,2276,2230,2170,2230,2282,2146,2147,2151,2156,2288,2276,2230,2303,2308,2236,2284,2228,2318,2318,2318,2326,2335,2339,2343,2349,2416,2693,2357,2592,2109,2592,2592,2162,2943,2823,2646,2592,2361,2592,2122,2592,2592,2122,2470,2592,2592,2592,2109,2107,2592,2592,2592,2123,2592,2592,2592,2125,2592,2413,2592,2592,2592,2127,2592,2592,2414,2592,2592,2592,2130,2952,2592,2594,2592,2592,2212,2609,2252,2592,2592,2592,2446,2434,2592,2592,2592,2212,2446,2450,2456,2431,2435,2592,2592,2243,2478,2448,2439,2946,2592,2592,2592,2368,2809,2813,2450,2441,2212,2812,2449,2440,2947,2592,2592,2592,2345,2451,2457,2948,2592,2124,2592,2592,2650,2823,2449,2455,2946,2592,2128,2592,2592,2649,2952,2592,2810,2448,2461,2991,2467,2592,2592,2329,2817,2474,2990,2466,2592,2592,2373,2447,2992,2469,2592,2592,2592,2373,2447,2477,2468,2592,2592,2353,2469,2592,2495,2592,2592,2415,2483,2592,2415,2496,2592,2592,2352,2592,2592,2352,2352,2469,2592,2592,2363,2331,2494,2592,2592,2592,2375,2592,2375,2415,2504,2592,2592,2367,2372,2503,2592,2592,2592,2389,2418,2415,2592,2592,2373,2592,2592,2592,2593,2732,2417,2415,2592,2417,2520,2592,2592,2592,2390,2521,2521,2592,2592,2592,2401,2599,2585,2526,2531,2120,2592,2212,2426,2450,2463,2948,2592,2592,2592,2213,2389,2527,2532,2121,2542,2551,2105,2592,2213,2592,2592,2592,2558,2538,2544,2553,2557,2537,2543,2552,2421,2572,2576,2546,2543,2547,2592,2592,2373,2615,2575,2545,2105,2592,2244,2479,2592,2129,2592,2592,2628,2690,2469,2562,2566,2592,2592,2592,2415,2928,2934,2401,2570,2574,2564,2572,2585,2590,2592,2592,2585,2965,2592,2592,2592,2445,2251,2592,2592,2592,2474,2592,2609,2892,2592,2362,2592,2592,2138,2851,2159,2592,2592,2592,2509,2888,2892,2592,2592,2592,2490,2418,2891,2592,2592,2376,2592,2592,2374,2592,2889,2388,2592,2373,2373,2890,2592,2592,2387,2592,2887,2505,2892,2592,2373,2610,2388,2592,2592,2376,2373,2592,2887,2891,2592,2374,2592,2592,2608,2159,2614,2620,2592,2592,2394,2594,2887,2399,2592,2887,2397,2508,2374,2507,2592,2375,2592,2592,2592,2595,2508,2506,2592,2506,2505,2505,2592,2507,2637,2505,2592,2592,2401,2661,2592,2643,2592,2592,2417,2592,2655,2592,2592,2592,2510,2414,2656,2592,2592,2592,2516,2592,2593,2660,2665,2880,2592,2592,2592,2522,2767,2666,2881,2592,2592,2420,2571,2696,2592,2592,2592,2580,2572,2686,2632,2698,2592,2383,2514,2592,2163,2932,2465,2685,2631,2697,2592,2388,2592,2592,2212,2604,2671,2632,2678,2592,2401,2405,2409,2592,2592,2592,2679,2592,2592,2592,2592,2108,2677,2591,2592,2592,2592,2419,2592,2683,2187,2191,2469,2671,2189,2467,2592,2401,2629,2633,2702,2468,2592,2592,2421,2536,2703,2469,2592,2592,2422,2573,2593,2672,2467,2592,2402,2406,2592,2402,2979,2592,2592,2626,2673,2467,2592,2446,2259,2947,2592,2377,2709,2592,2592,2522,2862,2713,2468,2592,2592,2581,2572,2562,2374,2374,2592,2376,2721,2724,2592,2592,2624,2373,2731,2592,2592,2592,2626,2732,2592,2592,2592,2755,2656,2726,2736,2741,2592,2486,2593,2381,2592,2727,2737,2742,2715,2747,2753,2592,2498,2469,2873,2743,2592,2592,2592,2791,2759,2763,2592,2592,2627,2704,2592,2592,2522,2789,2593,2761,2753,2592,2498,2863,2592,2592,2767,2592,2592,2592,2792,2789,2592,2592,2592,2803,2126,2592,2592,2592,2811,2122,2592,2592,2592,2834,2777,2592,2592,2592,2848,2936,2591,2489,2797,2592,2592,2670,2631,2490,2798,2592,2592,2592,2963,2807,2592,2592,2592,2965,2838,2592,2592,2592,2975,2330,2818,2829,2592,2498,2939,2592,2498,2592,2791,2331,2819,2830,2592,2592,2592,2982,2834,2817,2828,2106,2592,2592,2592,2405,2405,2817,2828,2592,2592,2415,2849,2842,2592,2522,2773,2592,2522,2868,2592,2580,2600,2586,2137,2850,2843,2592,2592,2855,2937,2844,2592,2592,2592,2987,2936,2591,2592,2592,2684,2630,2592,2856,2938,2592,2592,2860,2939,2592,2592,2872,2592,2861,2591,2592,2592,2887,2616,2592,2867,2592,2592,2708,2592,2498,2469,2498,2497,2785,2773,2499,2783,2770,2877,2877,2877,2772,2592,2592,2345,2885,2592,2592,2592,2715,2762,2515,2896,2592,2592,2715,2917,2516,2897,2592,2592,2592,2901,2906,2911,2592,2592,2956,2960,2715,2902,2907,2912,2593,2916,2920,2820,2922,2822,2592,2592,2715,2927,2921,2821,2106,2592,2592,2974,2408,2321,2821,2106,2592,2592,2983,2592,2593,2404,2408,2592,2592,2717,2749,2716,2928,2322,2822,2593,2926,2919,2820,2934,2823,2592,2592,2592,2651,2824,2592,2592,2592,2130,2952,2592,2592,2592,2592,2964,2592,2592,2716,2748,2592,2969,2592,2592,2716,2918,2368,2970,2592,2592,2592,2403,2407,2592,2592,2787,2211,2404,2409,2592,2592,2802,2837,2987,2592,2592,2592,2809,2427,2592,2793,2592,2592,2809,2447,1073741824,2147483648,539754496,542375936,402653184,554434560,571736064,545521856,268451840,335544320,268693630,512,2048,256,1024,0,1024,0,1073741824,2147483648,0,0,0,8388608,0,0,1073741824,1073741824,0,2147483648,537133056,4194304,1048576,268435456,-1073741824,0,0,0,1048576,0,0,0,1572864,0,0,0,4194304,0,134217728,16777216,0,0,32,64,98304,0,33554432,8388608,192,67108864,67108864,67108864,67108864,16,32,4,0,8192,196608,196608,229376,80,4096,524288,8388608,0,0,32,128,256,24576,24600,24576,24576,2,24576,24576,24576,24584,24592,24576,24578,24576,24578,24576,24576,16,512,2048,2048,256,4096,32768,1048576,4194304,67108864,134217728,268435456,262144,134217728,0,128,128,64,16384,16384,16384,67108864,32,32,4,4,4096,262144,134217728,0,0,0,2,0,8192,131072,131072,4096,4096,4096,4096,24576,24576,24576,8,8,24576,24576,16384,16384,16384,24576,24584,24576,24576,24576,16384,24576,536870912,262144,0,0,32,2048,8192,4,4096,4096,4096,786432,8388608,16777216,0,128,16384,16384,16384,32768,65536,2097152,32,32,32,32,4,4,4,4,4,4096,67108864,67108864,67108864,24576,24576,24576,24576,0,16384,16384,16384,16384,67108864,67108864,8,67108864,24576,8,8,8,24576,24576,24576,24578,24576,24576,24576,2,2,2,16384,67108864,67108864,67108864,32,67108864,8,8,24576,2048,2147483648,536870912,262144,262144,262144,67108864,8,24576,16384,32768,1048576,4194304,25165824,67108864,24576,32770,2,4,112,512,98304,524288,50,402653186,1049090,1049091,10,66,100925514,10,66,12582914,0,0,-1678194207,-1678194207,-1041543218,0,32768,0,0,32,65536,268435456,1,1,513,1048577,0,12582912,0,0,0,4,1792,0,0,0,7,29360128,0,0,0,8,0,0,0,12,1,1,0,0,-604102721,-604102721,4194304,8388608,0,0,0,31,925600,997981306,997981306,997981306,0,0,2048,8388608,0,0,1,2,4,32,64,512,8192,0,0,0,245760,997720064,0,0,0,32,0,0,0,3,12,16,32,8,112,3072,12288,16384,32768,65536,131072,7864320,16777216,973078528,0,0,65536,131072,3670016,4194304,16777216,33554432,2,8,48,2048,8192,16384,32768,65536,131072,524288,131072,524288,3145728,4194304,16777216,33554432,65536,131072,2097152,4194304,16777216,33554432,134217728,268435456,536870912,0,0,0,1024,0,8,48,2048,8192,65536,33554432,268435456,536870912,65536,268435456,536870912,0,0,32768,0,0,126,623104,65011712,0,32,65536,536870912,0,0,65536,524288,0,32,65536,0,0,0,2048,0,0,0,15482,245760,-604102721,0,0,0,18913,33062912,925600,-605028352,0,0,0,65536,31,8096,131072,786432,3145728,3145728,12582912,50331648,134217728,268435456,160,256,512,7168,131072,786432,131072,786432,1048576,2097152,12582912,16777216,268435456,1073741824,2147483648,12582912,16777216,33554432,268435456,1073741824,2147483648,3,12,16,160,256,7168,786432,1048576,12582912,16777216,268435456,1073741824,0,8,16,32,128,256,512,7168,786432,1048576,2097152,0,1,2,8,16,7168,786432,1048576,8388608,16777216,16777216,1073741824,0,0,0,0,1,0,0,8,32,128,256,7168,8,32,0,3072,0,8,32,3072,4096,524288,8,32,0,0,3072,4096,0,2048,524288,8388608,8,2048,0,0,1,12,256,4096,32768,262144,1048576,4194304,67108864,0,2048,0,2048,2048,1073741824,-58805985,-58805985,-58805985,0,0,262144,0,0,32,4194304,16777216,134217728,4382,172032,-58982400,0,0,2,28,256,4096,8192,8192,32768,131072,262144,524288,1,2,12,256,4096,0,0,4194304,67108864,134217728,805306368,1073741824,0,0,1,2,12,16,256,4096,1048576,67108864,134217728,268435456,0,512,1048576,4194304,201326592,1879048192,0,0,12,256,4096,134217728,268435456,536870912,12,256,268435456,536870912,0,12,256,0,0,1,32,64,512,0,0,205236961,205236961,0,0,0,1,96,640,1,10976,229376,204996608,0,640,2048,8192,229376,1572864,1572864,2097152,201326592,0,0,0,64,512,2048,229376,1572864,201326592,1572864,201326592,0,0,1,4382,0,1,32,2048,65536,131072,1572864,201326592,131072,1572864,134217728,0,0,524288,524288,0,0,0,-68582786,-68582786,-68582786,0,0,2097152,524288,0,524288,0,0,65536,131072,1572864,0,0,2,4,0,0,65011712,-134217728,0,0,0,0,2,4,120,512,-268435456,0,0,0,2,8,48,64,2048,8192,98304,524288,2097152,4194304,25165824,33554432,134217728,268435456,2147483648,0,0,25165824,33554432,134217728,1879048192,2147483648,0,0,4,112,512,622592,65011712,134217728,-268435456,16777216,33554432,134217728,1610612736,0,0,0,64,98304,524288,4194304,16777216,33554432,0,98304,524288,16777216,33554432,0,65536,524288,33554432,536870912,1073741824,0,65536,524288,536870912,1073741824,0,0,65536,524288,536870912,0,524288,0,524288,524288,1048576,2086666240,2147483648,0,-1678194207,0,0,0,8,32,2048,524288,8388608,0,0,33062912,436207616,2147483648,0,0,32,64,2432,16384,32768,32768,524288,3145728,4194304,25165824,25165824,167772160,268435456,2147483648,0,32,64,384,2048,16384,32768,1048576,2097152,4194304,25165824,32,64,128,256,2048,16384,2048,16384,1048576,4194304,16777216,33554432,134217728,536870912,1073741824,0,0,2048,16384,4194304,16777216,33554432,134217728,805306368,0,0,16777216,134217728,268435456,2147483648,0,622592,622592,622592,8807,8807,434791,0,0,16777216,0,0,0,7,608,8192,0,0,0,3,4,96,512,32,64,8192,0,0,16777216,134217728,0,0,2,4,8192,16384,65536,2097152,33554432,268435456],r.TOKEN=[\"(0)\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"QuotChar\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(e,t,n){\"use strict\";var r=e(\"./JSONiqTokenizer\").JSONiqTokenizer,i=e(\"./lexer\").Lexer,s=\"NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"JSONPredefinedCharRef\",token:\"constant.language.escape\"},{name:\"JSONCharRef\",token:\"constant.language.escape\"},{name:\"JSONChar\",token:\"string\"}]};n.JSONiqLexer=function(){return new i(r,d)}},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(e,t,n){\"use strict\";var r=function(e){var t=e;this.tokens=[],this.reset=function(){t=t,this.tokens=[]},this.startNonterminal=function(){},this.endNonterminal=function(){},this.terminal=function(e,n,r){this.tokens.push({name:e,value:t.substring(n,r)})},this.whitespace=function(e,n){this.tokens.push({name:\"WS\",value:t.substring(e,n)})}};n.Lexer=function(e,t){this.tokens=[],this.getLineTokens=function(n,i){i=i===\"start\"||!i?'[\"start\"]':i;var s=JSON.parse(i),o=new r(n),u=new e(n,o),a=[];for(;;){var f=s[s.length-1];try{o.tokens=[],u[\"parse_\"+f]();var l=null;o.tokens.length>1&&o.tokens[0].name===\"WS\"&&(a.push({type:\"text\",value:o.tokens[0].value}),o.tokens.splice(0,1));var c=o.tokens[0],h=t[f];for(var p=0;p<h.length;p++){var d=t[f][p];if(typeof d.name==\"function\"&&d.name(c)||d.name===c.name){l=d;break}}if(c.name===\"EOF\")break;if(c.value===\"\")throw\"Encountered empty string lexical rule.\";a.push({type:l===null?\"text\":typeof l.token==\"function\"?l.token(c.value):l.token,value:c.value}),l&&l.next&&l.next(s)}catch(v){if(v instanceof u.ParseException){var m=0;for(var g=0;g<a.length;g++)m+=a[g].value.length;return a.push({type:\"text\",value:n.substring(m)}),{tokens:a,state:JSON.stringify([\"start\"])}}throw v}}return{tokens:a,state:JSON.stringify(s)}}}},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(e,t,n){\"use strict\";var r=e(\"./XQueryTokenizer\").XQueryTokenizer,i=e(\"./lexer\").Lexer,s=\"after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotChar\",token:\"string\"}]};n.XQueryLexer=function(){return new i(r,d)}},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\":[function(e,t,n){n.JSONParseTreeHandler=function(e){\"use strict\";function f(e){return{name:e,children:[],getParent:null,pos:{sl:0,sc:0,el:0,ec:0}}}function l(e){var t=f(e);r===null?(r=t,r.index=[],i=t):(t.getParent=i,i.children.push(t),i=i.children[i.children.length-1])}function c(){if(i.children.length>0){var e=i.children[0],s=null;for(var o=i.children.length-1;o>=0;o--){s=i.children[o];if(s.pos.el!==0||s.pos.ec!==0)break}i.pos.sl=e.pos.sl,i.pos.sc=e.pos.sc,i.pos.el=s.pos.el,i.pos.ec=s.pos.ec}i.name===\"FunctionName\"&&(i.name=\"EQName\"),i.name===\"EQName\"&&i.value===undefined&&(i.value=i.children[0].value,i.children.pop()),t.indexOf(i.name)!==-1&&r.index.push(i),i.getParent!==null&&(i=i.getParent);if(i.children.length>0){var u=i.children[i.children.length-1];u.children.length===1&&n.indexOf(u.name)!==-1&&(i.children[i.children.length-1]=u.children[0])}}function h(e,t,n){var r=n-o;i.value=s.substring(0,r),s=s.substring(r),o=n;var f=a,l=u,c=f+i.value.split(\"\\n\").length-1,h=i.value.lastIndexOf(\"\\n\"),p=h===-1?l+i.value.length:i.value.substring(h+1).length;a=c,u=p,i.pos.sl=f,i.pos.sc=l,i.pos.el=c,i.pos.ec=p}var t=[\"VarDecl\",\"FunctionDecl\"],n=[\"OrExpr\",\"AndExpr\",\"ComparisonExpr\",\"StringConcatExpr\",\"RangeExpr\",\"AdditiveExpr\",\"MultiplicativeExpr\",\"UnionExpr\",\"IntersectExceptExpr\",\"InstanceofExpr\",\"TreatExpr\",\"CastableExpr\",\"CastExpr\",\"UnaryExpr\",\"ValueExpr\",\"FTContainsExpr\",\"SimpleMapExpr\",\"PathExpr\",\"RelativePathExpr\",\"PostfixExpr\",\"StepExpr\"],r=null,i=null,s=e,o=0,u=0,a=0;this.closeParseTree=function(){while(i.getParent!==null)c();c()},this.peek=function(){return i},this.getParseTree=function(){return r},this.reset=function(){},this.startNonterminal=function(e,t){l(e,t)},this.endNonterminal=function(){c()},this.terminal=function(e,t,n){e=e.substring(0,1)===\"'\"&&e.substring(e.length-1)===\"'\"?\"TOKEN\":e,l(e,t),h(i,t,n),c()},this.whitespace=function(e,t){var n=\"WS\";l(n,e),h(i,e,t),c()}}},{}],\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\":[function(e,t,n){var r=n.JSONiqParser=function i(e,t){function r(e,t){ic=t,ac=e,fc=e.length,s(0,0,0)}function s(e,t,n){Xl=t,Vl=t,$l=e,Jl=t,Kl=n,Ql=0,cc=n,ec=-1,sc={},ic.reset(ac)}function o(){ic.startNonterminal(\"Module\",Vl);switch($l){case 170:ql(168);break;default:Wl=$l}(Wl==64682||Wl==137898)&&u(),Il(277);switch($l){case 185:ql(146);break;default:Wl=$l}switch(Wl){case 95929:jl(),a();break;default:jl(),Za()}ic.endNonterminal(\"Module\",Vl)}function u(){ic.startNonterminal(\"VersionDecl\",Vl),Pl(170),Il(120);switch($l){case 126:Pl(126),Il(17),Pl(11);break;default:Pl(269),Il(17),Pl(11),Il(113),$l==126&&(Pl(126),Il(17),Pl(11))}Il(29),jl(),c(),ic.endNonterminal(\"VersionDecl\",Vl)}function a(){ic.startNonterminal(\"LibraryModule\",Vl),f(),Il(142),jl(),l(),ic.endNonterminal(\"LibraryModule\",Vl)}function f(){ic.startNonterminal(\"ModuleDecl\",Vl),Pl(185),Il(64),Pl(187),Il(239),jl(),Ga(),Il(30),Pl(61),Il(15),Pl(7),Il(29),jl(),c(),ic.endNonterminal(\"ModuleDecl\",Vl)}function l(){ic.startNonterminal(\"Prolog\",Vl);for(;;){Il(277);switch($l){case 109:ql(206);break;case 155:ql(169);break;default:Wl=$l}if(Wl!=43117&&Wl!=44141&&Wl!=50797&&Wl!=53869&&Wl!=54893&&Wl!=56429&&Wl!=73325&&Wl!=94875&&Wl!=95853&&Wl!=106093&&Wl!=115821&&Wl!=117403)break;switch($l){case 109:ql(200);break;default:Wl=$l}if(Wl==56429){Wl=uc(0,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{_(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(0,Vl,Wl)}}switch(Wl){case-1:jl(),M();break;case 95853:jl(),O();break;case 155:jl(),C();break;case 73325:jl(),D();break;default:jl(),h()}Il(29),jl(),c()}for(;;){Il(277);switch($l){case 109:ql(201);break;default:Wl=$l}if(Wl!=17005&&Wl!=49261&&Wl!=52333&&Wl!=75373&&Wl!=80493&&Wl!=83565&&Wl!=104045&&Wl!=134765&&Wl!=137325)break;switch($l){case 109:ql(197);break;default:Wl=$l}switch(Wl){case 52333:jl(),R();break;case 104045:jl(),Q();break;default:jl(),P()}Il(29),jl(),c()}ic.endNonterminal(\"Prolog\",Vl)}function c(){ic.startNonterminal(\"Separator\",Vl),Pl(54),ic.endNonterminal(\"Separator\",Vl)}function h(){ic.startNonterminal(\"Setter\",Vl);switch($l){case 109:ql(194);break;default:Wl=$l}if(Wl==56429){Wl=uc(1,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{v(),Wl=-2}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),w(),Wl=-6}catch(f){Wl=-9}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(1,Vl,Wl)}}switch(Wl){case 44141:p();break;case-2:d();break;case 43117:m();break;case 50797:g();break;case 106093:y();break;case-6:b();break;case 115821:Io();break;case 53869:E();break;default:T()}ic.endNonterminal(\"Setter\",Vl)}function p(){ic.startNonterminal(\"BoundarySpaceDecl\",Vl),Pl(109),Il(36),Pl(86),Il(137);switch($l){case 218:Pl(218);break;default:Pl(246)}ic.endNonterminal(\"BoundarySpaceDecl\",Vl)}function d(){ic.startNonterminal(\"DefaultCollationDecl\",Vl),Pl(109),Il(49),Pl(110),Il(41),Pl(95),Il(15),Pl(7),ic.endNonterminal(\"DefaultCollationDecl\",Vl)}function v(){Hl(109),Il(49),Hl(110),Il(41),Hl(95),Il(15),Hl(7)}function m(){ic.startNonterminal(\"BaseURIDecl\",Vl),Pl(109),Il(35),Pl(84),Il(15),Pl(7),ic.endNonterminal(\"BaseURIDecl\",Vl)}function g(){ic.startNonterminal(\"ConstructionDecl\",Vl),Pl(109),Il(44),Pl(99),Il(137);switch($l){case 246:Pl(246);break;default:Pl(218)}ic.endNonterminal(\"ConstructionDecl\",Vl)}function y(){ic.startNonterminal(\"OrderingModeDecl\",Vl),Pl(109),Il(71),Pl(207),Il(135);switch($l){case 206:Pl(206);break;default:Pl(262)}ic.endNonterminal(\"OrderingModeDecl\",Vl)}function b(){ic.startNonterminal(\"EmptyOrderDecl\",Vl),Pl(109),Il(49),Pl(110),Il(70),Pl(205),Il(52),Pl(124),Il(125);switch($l){case 149:Pl(149);break;default:Pl(176)}ic.endNonterminal(\"EmptyOrderDecl\",Vl)}function w(){Hl(109),Il(49),Hl(110),Il(70),Hl(205),Il(52),Hl(124),Il(125);switch($l){case 149:Hl(149);break;default:Hl(176)}}function E(){ic.startNonterminal(\"CopyNamespacesDecl\",Vl),Pl(109),Il(47),Pl(105),Il(132),jl(),S(),Il(25),Pl(42),Il(127),jl(),x(),ic.endNonterminal(\"CopyNamespacesDecl\",Vl)}function S(){ic.startNonterminal(\"PreserveMode\",Vl);switch($l){case 218:Pl(218);break;default:Pl(193)}ic.endNonterminal(\"PreserveMode\",Vl)}function x(){ic.startNonterminal(\"InheritMode\",Vl);switch($l){case 159:Pl(159);break;default:Pl(192)}ic.endNonterminal(\"InheritMode\",Vl)}function T(){ic.startNonterminal(\"DecimalFormatDecl\",Vl),Pl(109),Il(118);switch($l){case 107:Pl(107),Il(245),jl(),$a();break;default:Pl(110),Il(48),Pl(107)}for(;;){Il(203);if($l==54)break;jl(),N(),Il(30),Pl(61),Il(17),Pl(11)}ic.endNonterminal(\"DecimalFormatDecl\",Vl)}function N(){ic.startNonterminal(\"DFPropertyName\",Vl);switch($l){case 108:Pl(108);break;case 151:Pl(151);break;case 158:Pl(158);break;case 182:Pl(182);break;case 68:Pl(68);break;case 213:Pl(213);break;case 212:Pl(212);break;case 280:Pl(280);break;case 117:Pl(117);break;default:Pl(211)}ic.endNonterminal(\"DFPropertyName\",Vl)}function C(){ic.startNonterminal(\"Import\",Vl);switch($l){case 155:ql(130);break;default:Wl=$l}switch(Wl){case 117403:k();break;default:A()}ic.endNonterminal(\"Import\",Vl)}function k(){ic.startNonterminal(\"SchemaImport\",Vl),Pl(155),Il(76),Pl(229),Il(141),$l!=7&&(jl(),L()),Il(15),Pl(7),Il(112);if($l==82){Pl(82),Il(15),Pl(7);for(;;){Il(107);if($l!=42)break;Pl(42),Il(15),Pl(7)}}ic.endNonterminal(\"SchemaImport\",Vl)}function L(){ic.startNonterminal(\"SchemaPrefix\",Vl);switch($l){case 187:Pl(187),Il(239),jl(),Ga(),Il(30),Pl(61);break;default:Pl(110),Il(50),Pl(122),Il(64),Pl(187)}ic.endNonterminal(\"SchemaPrefix\",Vl)}function A(){ic.startNonterminal(\"ModuleImport\",Vl),Pl(155),Il(63),Pl(185),Il(93),$l==187&&(Pl(187),Il(239),jl(),Ga(),Il(30),Pl(61)),Il(15),Pl(7),Il(112);if($l==82){Pl(82),Il(15),Pl(7);for(;;){Il(107);if($l!=42)break;Pl(42),Il(15),Pl(7)}}ic.endNonterminal(\"ModuleImport\",Vl)}function O(){ic.startNonterminal(\"NamespaceDecl\",Vl),Pl(109),Il(64),Pl(187),Il(239),jl(),Ga(),Il(30),Pl(61),Il(15),Pl(7),ic.endNonterminal(\"NamespaceDecl\",Vl)}function M(){ic.startNonterminal(\"DefaultNamespaceDecl\",Vl),Pl(109),Il(49),Pl(110),Il(119);switch($l){case 122:Pl(122);break;default:Pl(147)}Il(64),Pl(187),Il(15),Pl(7),ic.endNonterminal(\"DefaultNamespaceDecl\",Vl)}function _(){Hl(109),Il(49),Hl(110),Il(119);switch($l){case 122:Hl(122);break;default:Hl(147)}Il(64),Hl(187),Il(15),Hl(7)}function D(){ic.startNonterminal(\"FTOptionDecl\",Vl),Pl(109),Il(55),Pl(143),Il(84),jl(),Qu(),ic.endNonterminal(\"FTOptionDecl\",Vl)}function P(){ic.startNonterminal(\"AnnotatedDecl\",Vl),Pl(109);for(;;){Il(192);if($l!=33&&$l!=263)break;switch($l){case 263:jl(),H();break;default:jl(),B()}}switch($l){case 268:jl(),F();break;case 147:jl(),_l();break;case 96:jl(),Ca();break;case 157:jl(),Ha();break;default:jl(),Ba()}ic.endNonterminal(\"AnnotatedDecl\",Vl)}function H(){ic.startNonterminal(\"CompatibilityAnnotation\",Vl),Pl(263),ic.endNonterminal(\"CompatibilityAnnotation\",Vl)}function B(){ic.startNonterminal(\"Annotation\",Vl),Pl(33),Il(245),jl(),$a(),Il(193);if($l==35){Pl(35),Il(190),jl(),di();for(;;){Il(105);if($l!=42)break;Pl(42),Il(190),jl(),di()}Pl(38)}ic.endNonterminal(\"Annotation\",Vl)}function j(){Hl(33),Il(245),Ja(),Il(193);if($l==35){Hl(35),Il(190),vi();for(;;){Il(105);if($l!=42)break;Hl(42),Il(190),vi()}Hl(38)}}function F(){ic.startNonterminal(\"VarDecl\",Vl),Pl(268),Il(21),Pl(31),Il(245),jl(),Ti(),Il(157),$l==80&&(jl(),Cs()),Il(110);switch($l){case 53:Pl(53),Il(266),jl(),I();break;default:Pl(134),Il(108),$l==53&&(Pl(53),Il(266),jl(),q())}ic.endNonterminal(\"VarDecl\",Vl)}function I(){ic.startNonterminal(\"VarValue\",Vl),Wf(),ic.endNonterminal(\"VarValue\",Vl)}function q(){ic.startNonterminal(\"VarDefaultValue\",Vl),Wf(),ic.endNonterminal(\"VarDefaultValue\",Vl)}function R(){ic.startNonterminal(\"ContextItemDecl\",Vl),Pl(109),Il(46),Pl(102),Il(58),Pl(167),Il(157),$l==80&&(Pl(80),Il(253),jl(),_s()),Il(110);switch($l){case 53:Pl(53),Il(266),jl(),I();break;default:Pl(134),Il(108),$l==53&&(Pl(53),Il(266),jl(),q())}ic.endNonterminal(\"ContextItemDecl\",Vl)}function U(){ic.startNonterminal(\"ParamList\",Vl),W();for(;;){Il(105);if($l!=42)break;Pl(42),Il(21),jl(),W()}ic.endNonterminal(\"ParamList\",Vl)}function z(){X();for(;;){Il(105);if($l!=42)break;Hl(42),Il(21),X()}}function W(){ic.startNonterminal(\"Param\",Vl),Pl(31),Il(245),jl(),$a(),Il(153),$l==80&&(jl(),Cs()),ic.endNonterminal(\"Param\",Vl)}function X(){Hl(31),Il(245),Ja(),Il(153),$l==80&&ks()}function V(){ic.startNonterminal(\"FunctionBody\",Vl),J(),ic.endNonterminal(\"FunctionBody\",Vl)}function $(){K()}function J(){ic.startNonterminal(\"EnclosedExpr\",Vl),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"EnclosedExpr\",Vl)}function K(){Hl(281),Il(266),Y(),Hl(287)}function Q(){ic.startNonterminal(\"OptionDecl\",Vl),Pl(109),Il(69),Pl(203),Il(245),jl(),$a(),Il(17),Pl(11),ic.endNonterminal(\"OptionDecl\",Vl)}function G(){ic.startNonterminal(\"Expr\",Vl),Wf();for(;;){if($l!=42)break;Pl(42),Il(266),jl(),Wf()}ic.endNonterminal(\"Expr\",Vl)}function Y(){Xf();for(;;){if($l!=42)break;Hl(42),Il(266),Xf()}}function Z(){ic.startNonterminal(\"FLWORExpr\",Vl),tt();for(;;){Il(195);if($l==224)break;jl(),rt()}jl(),rn(),ic.endNonterminal(\"FLWORExpr\",Vl)}function et(){nt();for(;;){Il(195);if($l==224)break;it()}sn()}function tt(){ic.startNonterminal(\"InitialClause\",Vl);switch($l){case 139:ql(151);break;default:Wl=$l}switch(Wl){case 16011:st();break;case 177:vt();break;default:bt()}ic.endNonterminal(\"InitialClause\",Vl)}function nt(){switch($l){case 139:ql(151);break;default:Wl=$l}switch(Wl){case 16011:ot();break;case 177:mt();break;default:wt()}}function rt(){ic.startNonterminal(\"IntermediateClause\",Vl);switch($l){case 139:case 177:tt();break;case 272:It();break;case 150:Rt();break;case 106:jt();break;default:Kt()}ic.endNonterminal(\"IntermediateClause\",Vl)}function it(){switch($l){case 139:case 177:nt();break;case 272:qt();break;case 150:Ut();break;case 106:Ft();break;default:Qt()}}function st(){ic.startNonterminal(\"ForClause\",Vl),Pl(139),Il(21),jl(),ut();for(;;){if($l!=42)break;Pl(42),Il(21),jl(),ut()}ic.endNonterminal(\"ForClause\",Vl)}function ot(){Hl(139),Il(21),at();for(;;){if($l!=42)break;Hl(42),Il(21),at()}}function ut(){ic.startNonterminal(\"ForBinding\",Vl),Pl(31),Il(245),jl(),Ti(),Il(182),$l==80&&(jl(),Cs()),Il(173),$l==73&&(jl(),ft()),Il(160),$l==82&&(jl(),ct()),Il(126),$l==232&&(jl(),pt()),Il(56),Pl(156),Il(266),jl(),Wf(),ic.endNonterminal(\"ForBinding\",Vl)}function at(){Hl(31),Il(245),Ni(),Il(182),$l==80&&ks(),Il(173),$l==73&&lt(),Il(160),$l==82&&ht(),Il(126),$l==232&&dt(),Il(56),Hl(156),Il(266),Xf()}function ft(){ic.startNonterminal(\"AllowingEmpty\",Vl),Pl(73),Il(52),Pl(124),ic.endNonterminal(\"AllowingEmpty\",Vl)}function lt(){Hl(73),Il(52),Hl(124)}function ct(){ic.startNonterminal(\"PositionalVar\",Vl),Pl(82),Il(21),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"PositionalVar\",Vl)}function ht(){Hl(82),Il(21),Hl(31),Il(245),Ni()}function pt(){ic.startNonterminal(\"FTScoreVar\",Vl),Pl(232),Il(21),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"FTScoreVar\",Vl)}function dt(){Hl(232),Il(21),Hl(31),Il(245),Ni()}function vt(){ic.startNonterminal(\"LetClause\",Vl),Pl(177),Il(100),jl(),gt();for(;;){if($l!=42)break;Pl(42),Il(100),jl(),gt()}ic.endNonterminal(\"LetClause\",Vl)}function mt(){Hl(177),Il(100),yt();for(;;){if($l!=42)break;Hl(42),Il(100),yt()}}function gt(){ic.startNonterminal(\"LetBinding\",Vl);switch($l){case 31:Pl(31),Il(245),jl(),Ti(),Il(109),$l==80&&(jl(),Cs());break;default:pt()}Il(28),Pl(53),Il(266),jl(),Wf(),ic.endNonterminal(\"LetBinding\",Vl)}function yt(){switch($l){case 31:Hl(31),Il(245),Ni(),Il(109),$l==80&&ks();break;default:dt()}Il(28),Hl(53),Il(266),Xf()}function bt(){ic.startNonterminal(\"WindowClause\",Vl),Pl(139),Il(139);switch($l){case 257:jl(),Et();break;default:jl(),xt()}ic.endNonterminal(\"WindowClause\",Vl)}function wt(){Hl(139),Il(139);switch($l){case 257:St();break;default:Tt()}}function Et(){ic.startNonterminal(\"TumblingWindowClause\",Vl),Pl(257),Il(88),Pl(275),Il(21),Pl(31),Il(245),jl(),Ti(),Il(114),$l==80&&(jl(),Cs()),Il(56),Pl(156),Il(266),jl(),Wf(),jl(),Nt();if($l==127||$l==202)jl(),kt();ic.endNonterminal(\"TumblingWindowClause\",Vl)}function St(){Hl(257),Il(88),Hl(275),Il(21),Hl(31),Il(245),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il(266),Xf(),Ct(),($l==127||$l==202)&&Lt()}function xt(){ic.startNonterminal(\"SlidingWindowClause\",Vl),Pl(239),Il(88),Pl(275),Il(21),Pl(31),Il(245),jl(),Ti(),Il(114),$l==80&&(jl(),Cs()),Il(56),Pl(156),Il(266),jl(),Wf(),jl(),Nt(),jl(),kt(),ic.endNonterminal(\"SlidingWindowClause\",Vl)}function Tt(){Hl(239),Il(88),Hl(275),Il(21),Hl(31),Il(245),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il(266),Xf(),Ct(),Lt()}function Nt(){ic.startNonterminal(\"WindowStartCondition\",Vl),Pl(242),Il(181),jl(),At(),Il(86),Pl(271),Il(266),jl(),Wf(),ic.endNonterminal(\"WindowStartCondition\",Vl)}function Ct(){Hl(242),Il(181),Ot(),Il(86),Hl(271),Il(266),Xf()}function kt(){ic.startNonterminal(\"WindowEndCondition\",Vl),$l==202&&Pl(202),Il(53),Pl(127),Il(181),jl(),At(),Il(86),Pl(271),Il(266),jl(),Wf(),ic.endNonterminal(\"WindowEndCondition\",Vl)}function Lt(){$l==202&&Hl(202),Il(53),Hl(127),Il(181),Ot(),Il(86),Hl(271),Il(266),Xf()}function At(){ic.startNonterminal(\"WindowVars\",Vl),$l==31&&(Pl(31),Il(245),jl(),Mt()),Il(174),$l==82&&(jl(),ct()),Il(163),$l==219&&(Pl(219),Il(21),Pl(31),Il(245),jl(),Dt()),Il(131),$l==190&&(Pl(190),Il(21),Pl(31),Il(245),jl(),Ht()),ic.endNonterminal(\"WindowVars\",Vl)}function Ot(){$l==31&&(Hl(31),Il(245),_t()),Il(174),$l==82&&ht(),Il(163),$l==219&&(Hl(219),Il(21),Hl(31),Il(245),Pt()),Il(131),$l==190&&(Hl(190),Il(21),Hl(31),Il(245),Bt())}function Mt(){ic.startNonterminal(\"CurrentItem\",Vl),$a(),ic.endNonterminal(\"CurrentItem\",Vl)}function _t(){Ja()}function Dt(){ic.startNonterminal(\"PreviousItem\",Vl),$a(),ic.endNonterminal(\"PreviousItem\",Vl)}function Pt(){Ja()}function Ht(){ic.startNonterminal(\"NextItem\",Vl),$a(),ic.endNonterminal(\"NextItem\",Vl)}function Bt(){Ja()}function jt(){ic.startNonterminal(\"CountClause\",Vl),Pl(106),Il(21),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"CountClause\",Vl)}function Ft(){Hl(106),Il(21),Hl(31),Il(245),Ni()}function It(){ic.startNonterminal(\"WhereClause\",Vl),Pl(272),Il(266),jl(),Wf(),ic.endNonterminal(\"WhereClause\",Vl)}function qt(){Hl(272),Il(266),Xf()}function Rt(){ic.startNonterminal(\"GroupByClause\",Vl),Pl(150),Il(37),Pl(88),Il(266),jl(),zt(),ic.endNonterminal(\"GroupByClause\",Vl)}function Ut(){Hl(150),Il(37),Hl(88),Il(266),Wt()}function zt(){ic.startNonterminal(\"GroupingSpecList\",Vl),Xt();for(;;){Il(198);if($l!=42)break;Pl(42),Il(266),jl(),Xt()}ic.endNonterminal(\"GroupingSpecList\",Vl)}function Wt(){Vt();for(;;){Il(198);if($l!=42)break;Hl(42),Il(266),Vt()}}function Xt(){ic.startNonterminal(\"GroupingSpec\",Vl);switch($l){case 31:ql(245);break;default:Wl=$l}if(Wl==3103||Wl==36383||Wl==37407||Wl==37919||Wl==38431||Wl==38943||Wl==39967||Wl==40479||Wl==40991||Wl==41503||Wl==42015||Wl==42527||Wl==43039||Wl==43551||Wl==44063||Wl==44575||Wl==45599||Wl==46111||Wl==46623||Wl==47135||Wl==48159||Wl==48671||Wl==49695||Wl==50207||Wl==50719||Wl==52255||Wl==52767||Wl==53279||Wl==53791||Wl==54303||Wl==54815||Wl==55839||Wl==56351||Wl==56863||Wl==57375||Wl==57887||Wl==58399||Wl==60959||Wl==61471||Wl==61983||Wl==62495||Wl==63007||Wl==63519||Wl==64031||Wl==64543||Wl==65055||Wl==66079||Wl==66591||Wl==67615||Wl==68127||Wl==68639||Wl==69151||Wl==69663||Wl==70175||Wl==70687||Wl==71199||Wl==72735||Wl==73247||Wl==75295||Wl==75807||Wl==76831||Wl==77855||Wl==78367||Wl==78879||Wl==79391||Wl==79903||Wl==80415||Wl==82463||Wl==82975||Wl==83487||Wl==83999||Wl==84511||Wl==85023||Wl==85535||Wl==86047||Wl==86559||Wl==87071||Wl==88607||Wl==89119||Wl==89631||Wl==90655||Wl==91679||Wl==92703||Wl==93727||Wl==94239||Wl==94751||Wl==95775||Wl==96287||Wl==96799||Wl==99359||Wl==99871||Wl==100895||Wl==101407||Wl==103455||Wl==103967||Wl==104479||Wl==104991||Wl==105503||Wl==106015||Wl==107551||Wl==110623||Wl==111135||Wl==112671||Wl==113695||Wl==114207||Wl==114719||Wl==115231||Wl==115743||Wl==116767||Wl==117279||Wl==117791||Wl==118303||Wl==118815||Wl==119327||Wl==119839||Wl==122399||Wl==122911||Wl==123423||Wl==123935||Wl==125471||Wl==126495||Wl==127007||Wl==127519||Wl==129567||Wl==130079||Wl==130591||Wl==131103||Wl==131615||Wl==132127||Wl==132639||Wl==133151||Wl==134175||Wl==134687||Wl==136223||Wl==136735||Wl==137247||Wl==137759||Wl==139295||Wl==139807||Wl==141343){Wl=uc(2,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Jt(),Il(205);if($l==53||$l==80)$l==80&&ks(),Il(28),Hl(53),Il(266),Xf();$l==95&&(Hl(95),Il(15),Hl(7)),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(2,Vl,Wl)}}switch(Wl){case-1:$t(),Il(205);if($l==53||$l==80)$l==80&&(jl(),Cs()),Il(28),Pl(53),Il(266),jl(),Wf();$l==95&&(Pl(95),Il(15),Pl(7));break;default:Wf()}ic.endNonterminal(\"GroupingSpec\",Vl)}function Vt(){switch($l){case 31:ql(245);break;default:Wl=$l}if(Wl==3103||Wl==36383||Wl==37407||Wl==37919||Wl==38431||Wl==38943||Wl==39967||Wl==40479||Wl==40991||Wl==41503||Wl==42015||Wl==42527||Wl==43039||Wl==43551||Wl==44063||Wl==44575||Wl==45599||Wl==46111||Wl==46623||Wl==47135||Wl==48159||Wl==48671||Wl==49695||Wl==50207||Wl==50719||Wl==52255||Wl==52767||Wl==53279||Wl==53791||Wl==54303||Wl==54815||Wl==55839||Wl==56351||Wl==56863||Wl==57375||Wl==57887||Wl==58399||Wl==60959||Wl==61471||Wl==61983||Wl==62495||Wl==63007||Wl==63519||Wl==64031||Wl==64543||Wl==65055||Wl==66079||Wl==66591||Wl==67615||Wl==68127||Wl==68639||Wl==69151||Wl==69663||Wl==70175||Wl==70687||Wl==71199||Wl==72735||Wl==73247||Wl==75295||Wl==75807||Wl==76831||Wl==77855||Wl==78367||Wl==78879||Wl==79391||Wl==79903||Wl==80415||Wl==82463||Wl==82975||Wl==83487||Wl==83999||Wl==84511||Wl==85023||Wl==85535||Wl==86047||Wl==86559||Wl==87071||Wl==88607||Wl==89119||Wl==89631||Wl==90655||Wl==91679||Wl==92703||Wl==93727||Wl==94239||Wl==94751||Wl==95775||Wl==96287||Wl==96799||Wl==99359||Wl==99871||Wl==100895||Wl==101407||Wl==103455||Wl==103967||Wl==104479||Wl==104991||Wl==105503||Wl==106015||Wl==107551||Wl==110623||Wl==111135||Wl==112671||Wl==113695||Wl==114207||Wl==114719||Wl==115231||Wl==115743||Wl==116767||Wl==117279||Wl==117791||Wl==118303||Wl==118815||Wl==119327||Wl==119839||Wl==122399||Wl==122911||Wl==123423||Wl==123935||Wl==125471||Wl==126495||Wl==127007||Wl==127519||Wl==129567||Wl==130079||Wl==130591||Wl==131103||Wl==131615||Wl==132127||Wl==132639||Wl==133151||Wl==134175||Wl==134687||Wl==136223||Wl==136735||Wl==137247||Wl==137759||Wl==139295||Wl==139807||Wl==141343){Wl=uc(2,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Jt(),Il(205);if($l==53||$l==80)$l==80&&ks(),Il(28),Hl(53),Il(266),Xf();$l==95&&(Hl(95),Il(15),Hl(7)),oc(2,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(2,t,-2)}}}switch(Wl){case-1:Jt(),Il(205);if($l==53||$l==80)$l==80&&ks(),Il(28),Hl(53),Il(266),Xf();$l==95&&(Hl(95),Il(15),Hl(7));break;case-3:break;default:Xf()}}function $t(){ic.startNonterminal(\"GroupingVariable\",Vl),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"GroupingVariable\",Vl)}function Jt(){Hl(31),Il(245),Ni()}function Kt(){ic.startNonterminal(\"OrderByClause\",Vl);switch($l){case 205:Pl(205),Il(37),Pl(88);break;default:Pl(241),Il(70),Pl(205),Il(37),Pl(88)}Il(266),jl(),Gt(),ic.endNonterminal(\"OrderByClause\",Vl)}function Qt(){switch($l){case 205:Hl(205),Il(37),Hl(88);break;default:Hl(241),Il(70),Hl(205),Il(37),Hl(88)}Il(266),Yt()}function Gt(){ic.startNonterminal(\"OrderSpecList\",Vl),Zt();for(;;){Il(198);if($l!=42)break;Pl(42),Il(266),jl(),Zt()}ic.endNonterminal(\"OrderSpecList\",Vl)}function Yt(){en();for(;;){Il(198);if($l!=42)break;Hl(42),Il(266),en()}}function Zt(){ic.startNonterminal(\"OrderSpec\",Vl),Wf(),jl(),tn(),ic.endNonterminal(\"OrderSpec\",Vl)}function en(){Xf(),nn()}function tn(){ic.startNonterminal(\"OrderModifier\",Vl);if($l==81||$l==114)switch($l){case 81:Pl(81);break;default:Pl(114)}Il(202);if($l==124){Pl(124),Il(125);switch($l){case 149:Pl(149);break;default:Pl(176)}}Il(199),$l==95&&(Pl(95),Il(15),Pl(7)),ic.endNonterminal(\"OrderModifier\",Vl)}function nn(){if($l==81||$l==114)switch($l){case 81:Hl(81);break;default:Hl(114)}Il(202);if($l==124){Hl(124),Il(125);switch($l){case 149:Hl(149);break;default:Hl(176)}}Il(199),$l==95&&(Hl(95),Il(15),Hl(7))}function rn(){ic.startNonterminal(\"ReturnClause\",Vl),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"ReturnClause\",Vl)}function sn(){Hl(224),Il(266),Xf()}function on(){ic.startNonterminal(\"QuantifiedExpr\",Vl);switch($l){case 240:Pl(240);break;default:Pl(130)}Il(21),jl(),an();for(;;){if($l!=42)break;Pl(42),Il(21),jl(),an()}Pl(228),Il(266),jl(),Wf(),ic.endNonterminal(\"QuantifiedExpr\",Vl)}function un(){switch($l){case 240:Hl(240);break;default:Hl(130)}Il(21),fn();for(;;){if($l!=42)break;Hl(42),Il(21),fn()}Hl(228),Il(266),Xf()}function an(){ic.startNonterminal(\"QuantifiedVarDecl\",Vl),Pl(31),Il(245),jl(),Ti(),Il(114),$l==80&&(jl(),Cs()),Il(56),Pl(156),Il(266),jl(),Wf(),ic.endNonterminal(\"QuantifiedVarDecl\",Vl)}function fn(){Hl(31),Il(245),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il(266),Xf()}function ln(){ic.startNonterminal(\"SwitchExpr\",Vl),Pl(248),Il(22),Pl(35),Il(266),jl(),G(),Pl(38);for(;;){Il(38),jl(),hn();if($l!=89)break}Pl(110),Il(73),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"SwitchExpr\",Vl)}function cn(){Hl(248),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),pn();if($l!=89)break}Hl(110),Il(73),Hl(224),Il(266),Xf()}function hn(){ic.startNonterminal(\"SwitchCaseClause\",Vl);for(;;){Pl(89),Il(266),jl(),dn();if($l!=89)break}Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"SwitchCaseClause\",Vl)}function pn(){for(;;){Hl(89),Il(266),vn();if($l!=89)break}Hl(224),Il(266),Xf()}function dn(){ic.startNonterminal(\"SwitchCaseOperand\",Vl),Wf(),ic.endNonterminal(\"SwitchCaseOperand\",Vl)}function vn(){Xf()}function mn(){ic.startNonterminal(\"TypeswitchExpr\",Vl),Pl(259),Il(22),Pl(35),Il(266),jl(),G(),Pl(38);for(;;){Il(38),jl(),yn();if($l!=89)break}Pl(110),Il(99),$l==31&&(Pl(31),Il(245),jl(),Ti()),Il(73),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"TypeswitchExpr\",Vl)}function gn(){Hl(259),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),bn();if($l!=89)break}Hl(110),Il(99),$l==31&&(Hl(31),Il(245),Ni()),Il(73),Hl(224),Il(266),Xf()}function yn(){ic.startNonterminal(\"CaseClause\",Vl),Pl(89),Il(257),$l==31&&(Pl(31),Il(245),jl(),Ti(),Il(33),Pl(80)),Il(253),jl(),wn(),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"CaseClause\",Vl)}function bn(){Hl(89),Il(257),$l==31&&(Hl(31),Il(245),Ni(),Il(33),Hl(80)),Il(253),En(),Hl(224),Il(266),Xf()}function wn(){ic.startNonterminal(\"SequenceTypeUnion\",Vl),Ls();for(;;){Il(138);if($l!=284)break;Pl(284),Il(253),jl(),Ls()}ic.endNonterminal(\"SequenceTypeUnion\",Vl)}function En(){As();for(;;){Il(138);if($l!=284)break;Hl(284),Il(253),As()}}function Sn(){ic.startNonterminal(\"IfExpr\",Vl),Pl(154),Il(22),Pl(35),Il(266),jl(),G(),Pl(38),Il(80),Pl(250),Il(266),jl(),Wf(),Pl(123),Il(266),jl(),Wf(),ic.endNonterminal(\"IfExpr\",Vl)}function xn(){Hl(154),Il(22),Hl(35),Il(266),Y(),Hl(38),Il(80),Hl(250),Il(266),Xf(),Hl(123),Il(266),Xf()}function Tn(){ic.startNonterminal(\"TryCatchExpr\",Vl),Cn();for(;;){Il(39),jl(),On(),Il(207);if($l!=92)break}ic.endNonterminal(\"TryCatchExpr\",Vl)}function Nn(){kn();for(;;){Il(39),Mn(),Il(207);if($l!=92)break}}function Cn(){ic.startNonterminal(\"TryClause\",Vl),Pl(256),Il(90),Pl(281),Il(266),jl(),Ln(),Pl(287),ic.endNonterminal(\"TryClause\",Vl)}function kn(){Hl(256),Il(90),Hl(281),Il(266),An(),Hl(287)}function Ln(){ic.startNonterminal(\"TryTargetExpr\",Vl),G(),ic.endNonterminal(\"TryTargetExpr\",Vl)}function An(){Y()}function On(){ic.startNonterminal(\"CatchClause\",Vl),Pl(92),Il(248),jl(),_n(),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"CatchClause\",Vl)}function Mn(){Hl(92),Il(248),Dn(),Hl(281),Il(266),Y(),Hl(287)}function _n(){ic.startNonterminal(\"CatchErrorList\",Vl),Yr();for(;;){Il(140);if($l!=284)break;Pl(284),Il(248),jl(),Yr()}ic.endNonterminal(\"CatchErrorList\",Vl)}function Dn(){Zr();for(;;){Il(140);if($l!=284)break;Hl(284),Il(248),Zr()}}function Pn(){ic.startNonterminal(\"OrExpr\",Vl),Bn();for(;;){if($l!=204)break;Pl(204),Il(266),jl(),Bn()}ic.endNonterminal(\"OrExpr\",Vl)}function Hn(){jn();for(;;){if($l!=204)break;Hl(204),Il(266),jn()}}function Bn(){ic.startNonterminal(\"AndExpr\",Vl),Fn();for(;;){if($l!=76)break;Pl(76),Il(266),jl(),Fn()}ic.endNonterminal(\"AndExpr\",Vl)}function jn(){In();for(;;){if($l!=76)break;Hl(76),Il(266),In()}}function Fn(){ic.startNonterminal(\"NotExpr\",Vl),$l==196&&Pl(196),Il(265),jl(),qn(),ic.endNonterminal(\"NotExpr\",Vl)}function In(){$l==196&&Hl(196),Il(265),Rn()}function qn(){ic.startNonterminal(\"ComparisonExpr\",Vl),Un();if($l==27||$l==55||$l==58||$l==59||$l==61||$l==62||$l==63||$l==64||$l==129||$l==148||$l==152||$l==166||$l==175||$l==181||$l==189){switch($l){case 129:case 148:case 152:case 175:case 181:case 189:jl(),yr();break;case 58:case 64:case 166:jl(),wr();break;default:jl(),mr()}Il(265),jl(),Un()}ic.endNonterminal(\"ComparisonExpr\",Vl)}function Rn(){zn();if($l==27||$l==55||$l==58||$l==59||$l==61||$l==62||$l==63||$l==64||$l==129||$l==148||$l==152||$l==166||$l==175||$l==181||$l==189){switch($l){case 129:case 148:case 152:case 175:case 181:case 189:br();break;case 58:case 64:case 166:Er();break;default:gr()}Il(265),zn()}}function Un(){ic.startNonterminal(\"FTContainsExpr\",Vl),Wn(),$l==100&&(Pl(100),Il(79),Pl(249),Il(177),jl(),ou(),$l==277&&(jl(),Ta())),ic.endNonterminal(\"FTContainsExpr\",Vl)}function zn(){Xn(),$l==100&&(Hl(100),Il(79),Hl(249),Il(177),uu(),$l==277&&Na())}function Wn(){ic.startNonterminal(\"StringConcatExpr\",Vl),Vn();for(;;){if($l!=285)break;Pl(285),Il(265),jl(),Vn()}ic.endNonterminal(\"StringConcatExpr\",Vl)}function Xn(){$n();for(;;){if($l!=285)break;Hl(285),Il(265),$n()}}function Vn(){ic.startNonterminal(\"RangeExpr\",Vl),Jn(),$l==253&&(Pl(253),Il(265),jl(),Jn()),ic.endNonterminal(\"RangeExpr\",Vl)}function $n(){Kn(),$l==253&&(Hl(253),Il(265),Kn())}function Jn(){ic.startNonterminal(\"AdditiveExpr\",Vl),Qn();for(;;){if($l!=41&&$l!=43)break;switch($l){case 41:Pl(41);break;default:Pl(43)}Il(265),jl(),Qn()}ic.endNonterminal(\"AdditiveExpr\",Vl)}function Kn(){Gn();for(;;){if($l!=41&&$l!=43)break;switch($l){case 41:Hl(41);break;default:Hl(43)}Il(265),Gn()}}function Qn(){ic.startNonterminal(\"MultiplicativeExpr\",Vl),Yn();for(;;){if($l!=39&&$l!=119&&$l!=153&&$l!=183)break;switch($l){case 39:Pl(39);break;case 119:Pl(119);break;case 153:Pl(153);break;default:Pl(183)}Il(265),jl(),Yn()}ic.endNonterminal(\"MultiplicativeExpr\",Vl)}function Gn(){Zn();for(;;){if($l!=39&&$l!=119&&$l!=153&&$l!=183)break;switch($l){case 39:Hl(39);break;case 119:Hl(119);break;case 153:Hl(153);break;default:Hl(183)}Il(265),Zn()}}function Yn(){ic.startNonterminal(\"UnionExpr\",Vl),er();for(;;){if($l!=260&&$l!=284)break;switch($l){case 260:Pl(260);break;default:Pl(284)}Il(265),jl(),er()}ic.endNonterminal(\"UnionExpr\",Vl)}function Zn(){tr();for(;;){if($l!=260&&$l!=284)break;switch($l){case 260:Hl(260);break;default:Hl(284)}Il(265),tr()}}function er(){ic.startNonterminal(\"IntersectExceptExpr\",Vl),nr();for(;;){Il(221);if($l!=132&&$l!=164)break;switch($l){case 164:Pl(164);break;default:Pl(132)}Il(265),jl(),nr()}ic.endNonterminal(\"IntersectExceptExpr\",Vl)}function tr(){rr();for(;;){Il(221);if($l!=132&&$l!=164)break;switch($l){case 164:Hl(164);break;default:Hl(132)}Il(265),rr()}}function nr(){ic.startNonterminal(\"InstanceofExpr\",Vl),ir(),Il(222),$l==162&&(Pl(162),Il(67),Pl(200),Il(253),jl(),Ls()),ic.endNonterminal(\"InstanceofExpr\",Vl)}function rr(){sr(),Il(222),$l==162&&(Hl(162),Il(67),Hl(200),Il(253),As())}function ir(){ic.startNonterminal(\"TreatExpr\",Vl),or(),Il(223),$l==254&&(Pl(254),Il(33),Pl(80),Il(253),jl(),Ls()),ic.endNonterminal(\"TreatExpr\",Vl)}function sr(){ur(),Il(223),$l==254&&(Hl(254),Il(33),Hl(80),Il(253),As())}function or(){ic.startNonterminal(\"CastableExpr\",Vl),ar(),Il(224),$l==91&&(Pl(91),Il(33),Pl(80),Il(245),jl(),Ts()),ic.endNonterminal(\"CastableExpr\",Vl)}function ur(){fr(),Il(224),$l==91&&(Hl(91),Il(33),Hl(80),Il(245),Ns())}function ar(){ic.startNonterminal(\"CastExpr\",Vl),lr(),Il(226),$l==90&&(Pl(90),Il(33),Pl(80),Il(245),jl(),Ts()),ic.endNonterminal(\"CastExpr\",Vl)}function fr(){cr(),Il(226),$l==90&&(Hl(90),Il(33),Hl(80),Il(245),Ns())}function lr(){ic.startNonterminal(\"UnaryExpr\",Vl);for(;;){Il(265);if($l!=41&&$l!=43)break;switch($l){case 43:Pl(43);break;default:Pl(41)}}jl(),hr(),ic.endNonterminal(\"UnaryExpr\",Vl)}function cr(){for(;;){Il(265);if($l!=41&&$l!=43)break;switch($l){case 43:Hl(43);break;default:Hl(41)}}pr()}function hr(){ic.startNonterminal(\"ValueExpr\",Vl);switch($l){case 266:ql(188);break;default:Wl=$l}switch(Wl){case 89354:case 125706:case 132362:case 144138:Sr();break;case 36:Cr();break;default:dr()}ic.endNonterminal(\"ValueExpr\",Vl)}function pr(){switch($l){case 266:ql(188);break;default:Wl=$l}switch(Wl){case 89354:case 125706:case 132362:case 144138:xr();break;case 36:kr();break;default:vr()}}function dr(){ic.startNonterminal(\"SimpleMapExpr\",Vl),Or();for(;;){if($l!=26)break;Pl(26),Il(262),jl(),Or()}ic.endNonterminal(\"SimpleMapExpr\",Vl)}function vr(){Mr();for(;;){if($l!=26)break;Hl(26),Il(262),Mr()}}function mr(){ic.startNonterminal(\"GeneralComp\",Vl);switch($l){case 61:Pl(61);break;case 27:Pl(27);break;case 55:Pl(55);break;case 59:Pl(59);break;case 62:Pl(62);break;default:Pl(63)}ic.endNonterminal(\"GeneralComp\",Vl)}function gr(){switch($l){case 61:Hl(61);break;case 27:Hl(27);break;case 55:Hl(55);break;case 59:Hl(59);break;case 62:Hl(62);break;default:Hl(63)}}function yr(){ic.startNonterminal(\"ValueComp\",Vl);switch($l){case 129:Pl(129);break;case 189:Pl(189);break;case 181:Pl(181);break;case 175:Pl(175);break;case 152:Pl(152);break;default:Pl(148)}ic.endNonterminal(\"ValueComp\",Vl)}function br(){switch($l){case 129:Hl(129);break;case 189:Hl(189);break;case 181:Hl(181);break;case 175:Hl(175);break;case 152:Hl(152);break;default:Hl(148)}}function wr(){ic.startNonterminal(\"NodeComp\",Vl);switch($l){case 166:Pl(166);break;case 58:Pl(58);break;default:Pl(64)}ic.endNonterminal(\"NodeComp\",Vl)}function Er(){switch($l){case 166:Hl(166);break;case 58:Hl(58);break;default:Hl(64)}}function Sr(){ic.startNonterminal(\"ValidateExpr\",Vl),Pl(266),Il(175);if($l!=281)switch($l){case 258:Pl(258),Il(245),jl(),Ao();break;default:jl(),Tr()}Il(90),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"ValidateExpr\",Vl)}function xr(){Hl(266),Il(175);if($l!=281)switch($l){case 258:Hl(258),Il(245),Oo();break;default:Nr()}Il(90),Hl(281),Il(266),Y(),Hl(287)}function Tr(){ic.startNonterminal(\"ValidationMode\",Vl);switch($l){case 174:Pl(174);break;default:Pl(245)}ic.endNonterminal(\"ValidationMode\",Vl)}function Nr(){switch($l){case 174:Hl(174);break;default:Hl(245)}}function Cr(){ic.startNonterminal(\"ExtensionExpr\",Vl);for(;;){jl(),Lr(),Il(104);if($l!=36)break}Pl(281),Il(274),$l!=287&&(jl(),G()),Pl(287),ic.endNonterminal(\"ExtensionExpr\",Vl)}function kr(){for(;;){Ar(),Il(104);if($l!=36)break}Hl(281),Il(274),$l!=287&&Y(),Hl(287)}function Lr(){ic.startNonterminal(\"Pragma\",Vl),Pl(36),Rl(242),$l==21&&Pl(21),$a(),Rl(10),$l==21&&(Pl(21),Rl(0),Pl(1)),Rl(5),Pl(30),ic.endNonterminal(\"Pragma\",Vl)}function Ar(){Hl(36),Rl(242),$l==21&&Hl(21),Ja(),Rl(10),$l==21&&(Hl(21),Rl(0),Hl(1)),Rl(5),Hl(30)}function Or(){ic.startNonterminal(\"PathExpr\",Vl);switch($l){case 47:Pl(47),Il(288);switch($l){case 25:case 26:case 27:case 38:case 39:case 41:case 42:case 43:case 50:case 54:case 58:case 59:case 61:case 62:case 63:case 64:case 70:case 88:case 100:case 209:case 237:case 252:case 279:case 284:case 285:case 286:case 287:break;default:jl(),_r()}break;case 48:Pl(48),Il(259),jl(),_r();break;default:_r()}ic.endNonterminal(\"PathExpr\",Vl)}function Mr(){switch($l){case 47:Hl(47),Il(288);switch($l){case 25:case 26:case 27:case 38:case 39:case 41:case 42:case 43:case 50:case 54:case 58:case 59:case 61:case 62:case 63:case 64:case 70:case 88:case 100:case 209:case 237:case 252:case 279:case 284:case 285:case 286:case 287:break;default:Dr()}break;case 48:Hl(48),Il(259),Dr();break;default:Dr()}}function _r(){ic.startNonterminal(\"RelativePathExpr\",Vl),ei();for(;;){switch($l){case 26:ql(264);break;default:Wl=$l}if(Wl!=25&&Wl!=27&&Wl!=38&&Wl!=39&&Wl!=41&&Wl!=42&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=50&&Wl!=54&&Wl!=55&&Wl!=58&&Wl!=59&&Wl!=61&&Wl!=62&&Wl!=63&&Wl!=64&&Wl!=70&&Wl!=71&&Wl!=76&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=85&&Wl!=88&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=95&&Wl!=100&&Wl!=106&&Wl!=110&&Wl!=114&&Wl!=119&&Wl!=123&&Wl!=124&&Wl!=127&&Wl!=129&&Wl!=132&&Wl!=139&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=162&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=175&&Wl!=177&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=189&&Wl!=202&&Wl!=204&&Wl!=205&&Wl!=209&&Wl!=224&&Wl!=228&&Wl!=237&&Wl!=241&&Wl!=242&&Wl!=252&&Wl!=253&&Wl!=254&&Wl!=260&&Wl!=272&&Wl!=276&&Wl!=279&&Wl!=284&&Wl!=285&&Wl!=286&&Wl!=287&&Wl!=2586&&Wl!=23578&&Wl!=24090&&Wl!=24602&&Wl!=34330){Wl=uc(3,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{switch($l){case 47:Hl(47);break;case 48:Hl(48);break;default:Hl(26)}Il(263),Hr(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(3,Vl,Wl)}}if(Wl!=-1&&Wl!=47&&Wl!=48&&Wl!=2586&&Wl!=23578&&Wl!=34330)break;switch($l){case 47:Pl(47);break;case 48:Pl(48);break;default:Pl(26)}Il(263),jl(),Pr()}ic.endNonterminal(\"RelativePathExpr\",Vl)}function Dr(){ti();for(;;){switch($l){case 26:ql(264);break;default:Wl=$l}if(Wl!=25&&Wl!=27&&Wl!=38&&Wl!=39&&Wl!=41&&Wl!=42&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=50&&Wl!=54&&Wl!=55&&Wl!=58&&Wl!=59&&Wl!=61&&Wl!=62&&Wl!=63&&Wl!=64&&Wl!=70&&Wl!=71&&Wl!=76&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=85&&Wl!=88&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=95&&Wl!=100&&Wl!=106&&Wl!=110&&Wl!=114&&Wl!=119&&Wl!=123&&Wl!=124&&Wl!=127&&Wl!=129&&Wl!=132&&Wl!=139&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=162&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=175&&Wl!=177&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=189&&Wl!=202&&Wl!=204&&Wl!=205&&Wl!=209&&Wl!=224&&Wl!=228&&Wl!=237&&Wl!=241&&Wl!=242&&Wl!=252&&Wl!=253&&Wl!=254&&Wl!=260&&Wl!=272&&Wl!=276&&Wl!=279&&Wl!=284&&Wl!=285&&Wl!=286&&Wl!=287&&Wl!=2586&&Wl!=23578&&Wl!=24090&&Wl!=24602&&Wl!=34330){Wl=uc(3,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{switch($l){case 47:Hl(47);break;case 48:Hl(48);break;default:Hl(26)}Il(263),Hr(),oc(3,t,-1);continue}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(3,t,-2);break}}}if(Wl!=-1&&Wl!=47&&Wl!=48&&Wl!=2586&&Wl!=23578&&Wl!=34330)break;switch($l){case 47:Hl(47);break;case 48:Hl(48);break;default:Hl(26)}Il(263),Hr()}}function Pr(){ic.startNonterminal(\"StepExpr\",Vl);switch($l){case 83:ql(287);break;case 122:ql(286);break;case 187:case 220:ql(284);break;case 135:case 197:case 255:ql(236);break;case 97:case 120:case 206:case 249:case 262:ql(238);break;case 79:case 125:case 154:case 167:case 169:case 247:case 248:case 259:ql(229);break;case 74:case 75:case 94:case 112:case 113:case 137:case 138:case 210:case 216:case 217:case 234:ql(237);break;case 6:case 71:case 73:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 114:case 119:case 121:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 139:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 188:case 189:case 194:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 230:case 231:case 232:case 233:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(233);break;default:Wl=$l}if(Wl==12935||Wl==12997||Wl==13055||Wl==13447||Wl==13509||Wl==13567||Wl==13959||Wl==14021||Wl==14079||Wl==19591||Wl==19653||Wl==19711||Wl==20103||Wl==20165||Wl==20223||Wl==21127||Wl==21189||Wl==21247||Wl==21639||Wl==21701||Wl==21759||Wl==22151||Wl==22213||Wl==22271||Wl==24199||Wl==24261||Wl==24319||Wl==24711||Wl==24773||Wl==24831||Wl==25735||Wl==25797||Wl==25855||Wl==27783||Wl==27845||Wl==27903||Wl==28295||Wl==28357||Wl==28415||Wl==29831||Wl==29893||Wl==29951||Wl==30343||Wl==30405||Wl==30463||Wl==31367||Wl==31429||Wl==31487||Wl==31879||Wl==31941||Wl==31999||Wl==32391||Wl==32453||Wl==32511||Wl==32903||Wl==32965||Wl==33023||Wl==35463||Wl==35525||Wl==35583||Wl==35975||Wl==36037||Wl==36095||Wl==36435||Wl==36474||Wl==36487||Wl==36539||Wl==36549||Wl==36572||Wl==36607||Wl==38995||Wl==39034||Wl==39047||Wl==39099||Wl==39109||Wl==39132||Wl==39167||Wl==41043||Wl==41082||Wl==41095||Wl==41147||Wl==41157||Wl==41180||Wl==41215||Wl==41555||Wl==41594||Wl==41607||Wl==41659||Wl==41669||Wl==41692||Wl==41727||Wl==42067||Wl==42106||Wl==42119||Wl==42171||Wl==42181||Wl==42204||Wl==42239||Wl==43603||Wl==43642||Wl==43655||Wl==43707||Wl==43717||Wl==43740||Wl==43775||Wl==45191||Wl==45253||Wl==45311||Wl==45651||Wl==45690||Wl==45703||Wl==45755||Wl==45765||Wl==45788||Wl==45823||Wl==46163||Wl==46202||Wl==46215||Wl==46267||Wl==46277||Wl==46300||Wl==46335||Wl==46675||Wl==46714||Wl==46727||Wl==46779||Wl==46789||Wl==46812||Wl==46847||Wl==48723||Wl==48762||Wl==48775||Wl==48827||Wl==48837||Wl==48860||Wl==48895||Wl==51335||Wl==51397||Wl==51455||Wl==54355||Wl==54394||Wl==54407||Wl==54459||Wl==54469||Wl==54492||Wl==54527||Wl==56403||Wl==56442||Wl==56455||Wl==56507||Wl==56517||Wl==56540||Wl==56575||Wl==58451||Wl==58490||Wl==58503||Wl==58555||Wl==58565||Wl==58588||Wl==58623||Wl==61011||Wl==61050||Wl==61063||Wl==61115||Wl==61125||Wl==61148||Wl==61183||Wl==63059||Wl==63098||Wl==63111||Wl==63163||Wl==63173||Wl==63196||Wl==63231||Wl==63571||Wl==63610||Wl==63623||Wl==63675||Wl==63685||Wl==63708||Wl==63743||Wl==65107||Wl==65146||Wl==65159||Wl==65211||Wl==65221||Wl==65244||Wl==65279||Wl==66131||Wl==66170||Wl==66183||Wl==66235||Wl==66245||Wl==66268||Wl==66303||Wl==67667||Wl==67706||Wl==67719||Wl==67771||Wl==67781||Wl==67804||Wl==67839||Wl==71251||Wl==71290||Wl==71303||Wl==71355||Wl==71365||Wl==71388||Wl==71423||Wl==75859||Wl==75898||Wl==75911||Wl==75963||Wl==75973||Wl==75996||Wl==76031||Wl==76883||Wl==76922||Wl==76935||Wl==76987||Wl==76997||Wl==77020||Wl==77055||Wl==77907||Wl==77946||Wl==77959||Wl==78011||Wl==78021||Wl==78044||Wl==78079||Wl==78419||Wl==78458||Wl==78471||Wl==78523||Wl==78533||Wl==78556||Wl==78591||Wl==83027||Wl==83066||Wl==83079||Wl==83131||Wl==83141||Wl==83164||Wl==83199||Wl==84051||Wl==84090||Wl==84103||Wl==84155||Wl==84165||Wl==84188||Wl==84223||Wl==84563||Wl==84602||Wl==84615||Wl==84667||Wl==84677||Wl==84700||Wl==84735||Wl==85075||Wl==85114||Wl==85127||Wl==85179||Wl==85189||Wl==85212||Wl==85247||Wl==89683||Wl==89722||Wl==89735||Wl==89787||Wl==89797||Wl==89820||Wl==89855||Wl==90707||Wl==90746||Wl==90759||Wl==90811||Wl==90821||Wl==90844||Wl==90879||Wl==92755||Wl==92794||Wl==92807||Wl==92859||Wl==92869||Wl==92892||Wl==92927||Wl==93779||Wl==93818||Wl==93831||Wl==93883||Wl==93893||Wl==93916||Wl==93951||Wl==94291||Wl==94330||Wl==94343||Wl==94395||Wl==94405||Wl==94428||Wl==94463||Wl==96851||Wl==96890||Wl==96903||Wl==96955||Wl==96965||Wl==96988||Wl==97023||Wl==103507||Wl==103546||Wl==103559||Wl==103611||Wl==103621||Wl==103644||Wl==103679||Wl==104531||Wl==104570||Wl==104583||Wl==104635||Wl==104645||Wl==104668||Wl==104703||Wl==105043||Wl==105082||Wl==105095||Wl==105147||Wl==105157||Wl==105180||Wl==105215||Wl==107143||Wl==107205||Wl==107263||Wl==114771||Wl==114810||Wl==114823||Wl==114875||Wl==114885||Wl==114908||Wl==114943||Wl==116819||Wl==116858||Wl==116871||Wl==116923||Wl==116933||Wl==116956||Wl==116991||Wl==121479||Wl==121541||Wl==121599||Wl==123475||Wl==123514||Wl==123527||Wl==123579||Wl==123589||Wl==123612||Wl==123647||Wl==123987||Wl==124026||Wl==124039||Wl==124091||Wl==124101||Wl==124124||Wl==124159||Wl==129159||Wl==129221||Wl==129279||Wl==129619||Wl==129658||Wl==129671||Wl==129723||Wl==129733||Wl==129756||Wl==129791||Wl==130131||Wl==130170||Wl==130183||Wl==130235||Wl==130245||Wl==130268||Wl==130303||Wl==133203||Wl==133242||Wl==133255||Wl==133307||Wl==133317||Wl==133340||Wl==133375||Wl==139347||Wl==139386||Wl==139399||Wl==139451||Wl==139461||Wl==139484||Wl==139519||Wl==141395||Wl==141434||Wl==141447||Wl==141499||Wl==141509||Wl==141532||Wl==141567||Wl==142983||Wl==143045||Wl==143103||Wl==145543||Wl==145605||Wl==145663||Wl==146055||Wl==146117||Wl==146175||Wl==146567||Wl==146629||Wl==146687||Wl==147079||Wl==147141||Wl==147199){Wl=uc(4,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ti(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(4,Vl,Wl)}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 33:case 35:case 55:case 56:case 60:case 69:case 281:case 283:case 3155:case 3194:case 9915:case 9948:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14995:case 14996:case 14998:case 15e3:case 15001:case 15002:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15016:case 15017:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15036:case 15037:case 15042:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15078:case 15079:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15095:case 15096:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15107:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18055:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18067:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18117:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18175:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:case 23175:case 23237:case 23295:case 37459:case 37498:case 37563:case 37596:case 37971:case 38010:case 38075:case 38108:case 38483:case 38522:case 38587:case 38620:case 40019:case 40058:case 40123:case 40156:case 40531:case 40570:case 42579:case 42618:case 42683:case 42716:case 43091:case 43130:case 43195:case 43228:case 44115:case 44154:case 44219:case 44252:case 44627:case 44666:case 44731:case 44764:case 47187:case 47226:case 47291:case 47324:case 48211:case 48250:case 48315:case 48348:case 49747:case 49786:case 49851:case 49884:case 50259:case 50298:case 50363:case 50396:case 50771:case 50810:case 50875:case 50908:case 52307:case 52346:case 52411:case 52444:case 52819:case 52858:case 52923:case 52956:case 53331:case 53370:case 53435:case 53468:case 53843:case 53882:case 53947:case 53980:case 54867:case 54906:case 54971:case 55004:case 55891:case 55930:case 55995:case 56028:case 56915:case 56954:case 57019:case 57052:case 57427:case 57466:case 57531:case 57564:case 57939:case 57978:case 58043:case 58076:case 61523:case 61562:case 61627:case 61660:case 62035:case 62074:case 62139:case 62172:case 62547:case 62586:case 62651:case 62684:case 64083:case 64122:case 64187:case 64220:case 64595:case 64634:case 64699:case 64732:case 66643:case 66682:case 66747:case 66780:case 68179:case 68218:case 68283:case 68316:case 68691:case 68730:case 68795:case 68828:case 69203:case 69242:case 69307:case 69340:case 69715:case 69754:case 69819:case 69852:case 70227:case 70266:case 70331:case 70364:case 70739:case 70778:case 70843:case 70876:case 72787:case 72826:case 72891:case 72924:case 73299:case 73338:case 73403:case 73436:case 75347:case 75386:case 75451:case 75484:case 78931:case 78970:case 79035:case 79068:case 79443:case 79482:case 79547:case 79580:case 79955:case 79994:case 80059:case 80092:case 80467:case 80506:case 80571:case 80604:case 82515:case 82554:case 82619:case 82652:case 83539:case 83578:case 83643:case 83676:case 85587:case 85626:case 85691:case 85724:case 86099:case 86138:case 86203:case 86236:case 86611:case 86650:case 87123:case 87162:case 87227:case 87260:case 88659:case 88698:case 88763:case 88796:case 89171:case 89210:case 89275:case 89308:case 91731:case 91770:case 91835:case 91868:case 94803:case 94842:case 94907:case 94940:case 95827:case 95866:case 95931:case 95964:case 96339:case 96378:case 96443:case 96476:case 99411:case 99450:case 99515:case 99548:case 99923:case 99962:case 100027:case 100060:case 100947:case 100986:case 101051:case 101084:case 101459:case 101498:case 101563:case 101596:case 104019:case 104058:case 104123:case 104156:case 105555:case 105594:case 105659:case 105692:case 106067:case 106106:case 106171:case 106204:case 107603:case 107642:case 107707:case 107740:case 110675:case 110714:case 110779:case 110812:case 111187:case 111226:case 111291:case 111324:case 112723:case 112762:case 112827:case 112860:case 113747:case 113786:case 113851:case 113884:case 114259:case 114298:case 114363:case 114396:case 115283:case 115322:case 115387:case 115420:case 115795:case 115834:case 115899:case 115932:case 117331:case 117370:case 117435:case 117468:case 117843:case 117882:case 117947:case 117980:case 118355:case 118394:case 118459:case 118492:case 118867:case 118906:case 118971:case 119004:case 119379:case 119418:case 119483:case 119516:case 119891:case 119930:case 119995:case 120028:case 122451:case 122490:case 122555:case 122588:case 122963:case 123002:case 123067:case 123100:case 125523:case 125562:case 125627:case 125660:case 126547:case 126586:case 127059:case 127098:case 127163:case 127196:case 127571:case 127610:case 127675:case 127708:case 130643:case 130682:case 130747:case 130780:case 131155:case 131194:case 131259:case 131292:case 131667:case 131706:case 131771:case 131804:case 132179:case 132218:case 132283:case 132316:case 132691:case 132730:case 132795:case 132828:case 134227:case 134266:case 134331:case 134364:case 134739:case 134778:case 134843:case 134876:case 136275:case 136314:case 136379:case 136412:case 136787:case 136826:case 136891:case 136924:case 137299:case 137338:case 137403:case 137436:case 137811:case 137850:case 137915:case 137948:case 139859:case 139898:case 139963:case 139996:case 143955:case 143969:case 143992:case 143994:case 144059:case 144078:case 144092:case 144121:case 144134:ei();break;default:Br()}ic.endNonterminal(\"StepExpr\",Vl)}function Hr(){switch($l){case 83:ql(287);break;case 122:ql(286);break;case 187:case 220:ql(284);break;case 135:case 197:case 255:ql(236);break;case 97:case 120:case 206:case 249:case 262:ql(238);break;case 79:case 125:case 154:case 167:case 169:case 247:case 248:case 259:ql(229);break;case 74:case 75:case 94:case 112:case 113:case 137:case 138:case 210:case 216:case 217:case 234:ql(237);break;case 6:case 71:case 73:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 114:case 119:case 121:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 139:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 188:case 189:case 194:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 230:case 231:case 232:case 233:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(233);break;default:Wl=$l}if(Wl==12935||Wl==12997||Wl==13055||Wl==13447||Wl==13509||Wl==13567||Wl==13959||Wl==14021||Wl==14079||Wl==19591||Wl==19653||Wl==19711||Wl==20103||Wl==20165||Wl==20223||Wl==21127||Wl==21189||Wl==21247||Wl==21639||Wl==21701||Wl==21759||Wl==22151||Wl==22213||Wl==22271||Wl==24199||Wl==24261||Wl==24319||Wl==24711||Wl==24773||Wl==24831||Wl==25735||Wl==25797||Wl==25855||Wl==27783||Wl==27845||Wl==27903||Wl==28295||Wl==28357||Wl==28415||Wl==29831||Wl==29893||Wl==29951||Wl==30343||Wl==30405||Wl==30463||Wl==31367||Wl==31429||Wl==31487||Wl==31879||Wl==31941||Wl==31999||Wl==32391||Wl==32453||Wl==32511||Wl==32903||Wl==32965||Wl==33023||Wl==35463||Wl==35525||Wl==35583||Wl==35975||Wl==36037||Wl==36095||Wl==36435||Wl==36474||Wl==36487||Wl==36539||Wl==36549||Wl==36572||Wl==36607||Wl==38995||Wl==39034||Wl==39047||Wl==39099||Wl==39109||Wl==39132||Wl==39167||Wl==41043||Wl==41082||Wl==41095||Wl==41147||Wl==41157||Wl==41180||Wl==41215||Wl==41555||Wl==41594||Wl==41607||Wl==41659||Wl==41669||Wl==41692||Wl==41727||Wl==42067||Wl==42106||Wl==42119||Wl==42171||Wl==42181||Wl==42204||Wl==42239||Wl==43603||Wl==43642||Wl==43655||Wl==43707||Wl==43717||Wl==43740||Wl==43775||Wl==45191||Wl==45253||Wl==45311||Wl==45651||Wl==45690||Wl==45703||Wl==45755||Wl==45765||Wl==45788||Wl==45823||Wl==46163||Wl==46202||Wl==46215||Wl==46267||Wl==46277||Wl==46300||Wl==46335||Wl==46675||Wl==46714||Wl==46727||Wl==46779||Wl==46789||Wl==46812||Wl==46847||Wl==48723||Wl==48762||Wl==48775||Wl==48827||Wl==48837||Wl==48860||Wl==48895||Wl==51335||Wl==51397||Wl==51455||Wl==54355||Wl==54394||Wl==54407||Wl==54459||Wl==54469||Wl==54492||Wl==54527||Wl==56403||Wl==56442||Wl==56455||Wl==56507||Wl==56517||Wl==56540||Wl==56575||Wl==58451||Wl==58490||Wl==58503||Wl==58555||Wl==58565||Wl==58588||Wl==58623||Wl==61011||Wl==61050||Wl==61063||Wl==61115||Wl==61125||Wl==61148||Wl==61183||Wl==63059||Wl==63098||Wl==63111||Wl==63163||Wl==63173||Wl==63196||Wl==63231||Wl==63571||Wl==63610||Wl==63623||Wl==63675||Wl==63685||Wl==63708||Wl==63743||Wl==65107||Wl==65146||Wl==65159||Wl==65211||Wl==65221||Wl==65244||Wl==65279||Wl==66131||Wl==66170||Wl==66183||Wl==66235||Wl==66245||Wl==66268||Wl==66303||Wl==67667||Wl==67706||Wl==67719||Wl==67771||Wl==67781||Wl==67804||Wl==67839||Wl==71251||Wl==71290||Wl==71303||Wl==71355||Wl==71365||Wl==71388||Wl==71423||Wl==75859||Wl==75898||Wl==75911||Wl==75963||Wl==75973||Wl==75996||Wl==76031||Wl==76883||Wl==76922||Wl==76935||Wl==76987||Wl==76997||Wl==77020||Wl==77055||Wl==77907||Wl==77946||Wl==77959||Wl==78011||Wl==78021||Wl==78044||Wl==78079||Wl==78419||Wl==78458||Wl==78471||Wl==78523||Wl==78533||Wl==78556||Wl==78591||Wl==83027||Wl==83066||Wl==83079||Wl==83131||Wl==83141||Wl==83164||Wl==83199||Wl==84051||Wl==84090||Wl==84103||Wl==84155||Wl==84165||Wl==84188||Wl==84223||Wl==84563||Wl==84602||Wl==84615||Wl==84667||Wl==84677||Wl==84700||Wl==84735||Wl==85075||Wl==85114||Wl==85127||Wl==85179||Wl==85189||Wl==85212||Wl==85247||Wl==89683||Wl==89722||Wl==89735||Wl==89787||Wl==89797||Wl==89820||Wl==89855||Wl==90707||Wl==90746||Wl==90759||Wl==90811||Wl==90821||Wl==90844||Wl==90879||Wl==92755||Wl==92794||Wl==92807||Wl==92859||Wl==92869||Wl==92892||Wl==92927||Wl==93779||Wl==93818||Wl==93831||Wl==93883||Wl==93893||Wl==93916||Wl==93951||Wl==94291||Wl==94330||Wl==94343||Wl==94395||Wl==94405||Wl==94428||Wl==94463||Wl==96851||Wl==96890||Wl==96903||Wl==96955||Wl==96965||Wl==96988||Wl==97023||Wl==103507||Wl==103546||Wl==103559||Wl==103611||Wl==103621||Wl==103644||Wl==103679||Wl==104531||Wl==104570||Wl==104583||Wl==104635||Wl==104645||Wl==104668||Wl==104703||Wl==105043||Wl==105082||Wl==105095||Wl==105147||Wl==105157||Wl==105180||Wl==105215||Wl==107143||Wl==107205||Wl==107263||Wl==114771||Wl==114810||Wl==114823||Wl==114875||Wl==114885||Wl==114908||Wl==114943||Wl==116819||Wl==116858||Wl==116871||Wl==116923||Wl==116933||Wl==116956||Wl==116991||Wl==121479||Wl==121541||Wl==121599||Wl==123475||Wl==123514||Wl==123527||Wl==123579||Wl==123589||Wl==123612||Wl==123647||Wl==123987||Wl==124026||Wl==124039||Wl==124091||Wl==124101||Wl==124124||Wl==124159||Wl==129159||Wl==129221||Wl==129279||Wl==129619||Wl==129658||Wl==129671||Wl==129723||Wl==129733||Wl==129756||Wl==129791||Wl==130131||Wl==130170||Wl==130183||Wl==130235||Wl==130245||Wl==130268||Wl==130303||Wl==133203||Wl==133242||Wl==133255||Wl==133307||Wl==133317||Wl==133340||Wl==133375||Wl==139347||Wl==139386||Wl==139399||Wl==139451||Wl==139461||Wl==139484||Wl==139519||Wl==141395||Wl==141434||Wl==141447||Wl==141499||Wl==141509||Wl==141532||Wl==141567||Wl==142983||Wl==143045||Wl==143103||Wl==145543||Wl==145605||Wl==145663||Wl==146055||Wl==146117||Wl==146175||Wl==146567||Wl==146629||Wl==146687||Wl==147079||Wl==147141||Wl==147199){Wl=uc(4,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ti(),oc(4,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(4,t,-2)}}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 33:case 35:case 55:case 56:case 60:case 69:case 281:case 283:case 3155:case 3194:case 9915:case 9948:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14995:case 14996:case 14998:case 15e3:case 15001:case 15002:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15016:case 15017:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15036:case 15037:case 15042:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15078:case 15079:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15095:case 15096:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15107:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18055:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18067:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18117:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18175:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:case 23175:case 23237:case 23295:case 37459:case 37498:case 37563:case 37596:case 37971:case 38010:case 38075:case 38108:case 38483:case 38522:case 38587:case 38620:case 40019:case 40058:case 40123:case 40156:case 40531:case 40570:case 42579:case 42618:case 42683:case 42716:case 43091:case 43130:case 43195:case 43228:case 44115:case 44154:case 44219:case 44252:case 44627:case 44666:case 44731:case 44764:case 47187:case 47226:case 47291:case 47324:case 48211:case 48250:case 48315:case 48348:case 49747:case 49786:case 49851:case 49884:case 50259:case 50298:case 50363:case 50396:case 50771:case 50810:case 50875:case 50908:case 52307:case 52346:case 52411:case 52444:case 52819:case 52858:case 52923:case 52956:case 53331:case 53370:case 53435:case 53468:case 53843:case 53882:case 53947:case 53980:case 54867:case 54906:case 54971:case 55004:case 55891:case 55930:case 55995:case 56028:case 56915:case 56954:case 57019:case 57052:case 57427:case 57466:case 57531:case 57564:case 57939:case 57978:case 58043:case 58076:case 61523:case 61562:case 61627:case 61660:case 62035:case 62074:case 62139:case 62172:case 62547:case 62586:case 62651:case 62684:case 64083:case 64122:case 64187:case 64220:case 64595:case 64634:case 64699:case 64732:case 66643:case 66682:case 66747:case 66780:case 68179:case 68218:case 68283:case 68316:case 68691:case 68730:case 68795:case 68828:case 69203:case 69242:case 69307:case 69340:case 69715:case 69754:case 69819:case 69852:case 70227:case 70266:case 70331:case 70364:case 70739:case 70778:case 70843:case 70876:case 72787:case 72826:case 72891:case 72924:case 73299:case 73338:case 73403:case 73436:case 75347:case 75386:case 75451:case 75484:case 78931:case 78970:case 79035:case 79068:case 79443:case 79482:case 79547:case 79580:case 79955:case 79994:case 80059:case 80092:case 80467:case 80506:case 80571:case 80604:case 82515:case 82554:case 82619:case 82652:case 83539:case 83578:case 83643:case 83676:case 85587:case 85626:case 85691:case 85724:case 86099:case 86138:case 86203:case 86236:case 86611:case 86650:case 87123:case 87162:case 87227:case 87260:case 88659:case 88698:case 88763:case 88796:case 89171:case 89210:case 89275:case 89308:case 91731:case 91770:case 91835:case 91868:case 94803:case 94842:case 94907:case 94940:case 95827:case 95866:case 95931:case 95964:case 96339:case 96378:case 96443:case 96476:case 99411:case 99450:case 99515:case 99548:case 99923:case 99962:case 100027:case 100060:case 100947:case 100986:case 101051:case 101084:case 101459:case 101498:case 101563:case 101596:case 104019:case 104058:case 104123:case 104156:case 105555:case 105594:case 105659:case 105692:case 106067:case 106106:case 106171:case 106204:case 107603:case 107642:case 107707:case 107740:case 110675:case 110714:case 110779:case 110812:case 111187:case 111226:case 111291:case 111324:case 112723:case 112762:case 112827:case 112860:case 113747:case 113786:case 113851:case 113884:case 114259:case 114298:case 114363:case 114396:case 115283:case 115322:case 115387:case 115420:case 115795:case 115834:case 115899:case 115932:case 117331:case 117370:case 117435:case 117468:case 117843:case 117882:case 117947:case 117980:case 118355:case 118394:case 118459:case 118492:case 118867:case 118906:case 118971:case 119004:case 119379:case 119418:case 119483:case 119516:case 119891:case 119930:case 119995:case 120028:case 122451:case 122490:case 122555:case 122588:case 122963:case 123002:case 123067:case 123100:case 125523:case 125562:case 125627:case 125660:case 126547:case 126586:case 127059:case 127098:case 127163:case 127196:case 127571:case 127610:case 127675:case 127708:case 130643:case 130682:case 130747:case 130780:case 131155:case 131194:case 131259:case 131292:case 131667:case 131706:case 131771:case 131804:case 132179:case 132218:case 132283:case 132316:case 132691:case 132730:case 132795:case 132828:case 134227:case 134266:case 134331:case 134364:case 134739:case 134778:case 134843:case 134876:case 136275:case 136314:case 136379:case 136412:case 136787:case 136826:case 136891:case 136924:case 137299:case 137338:case 137403:case 137436:case 137811:case 137850:case 137915:case 137948:case 139859:case 139898:case 139963:case 139996:case 143955:case 143969:case 143992:case 143994:case 144059:case 144078:case 144092:case 144121:case 144134:ti();break;case-3:break;default:jr()}}function Br(){ic.startNonterminal(\"AxisStep\",Vl);switch($l){case 74:case 75:case 210:case 216:case 217:ql(231);break;default:Wl=$l}switch(Wl){case 46:case 26698:case 26699:case 26834:case 26840:case 26841:Wr();break;default:Fr()}Il(227),jl(),li(),ic.endNonterminal(\"AxisStep\",Vl)}function jr(){switch($l){case 74:case 75:case 210:case 216:case 217:ql(231);break;default:Wl=$l}switch(Wl){case 46:case 26698:case 26699:case 26834:case 26840:case 26841:Xr();break;default:Ir()}Il(227),ci()}function Fr(){ic.startNonterminal(\"ForwardStep\",Vl);switch($l){case 83:ql(235);break;case 94:case 112:case 113:case 137:case 138:case 234:ql(231);break;default:Wl=$l}switch(Wl){case 26707:case 26718:case 26736:case 26737:case 26761:case 26762:case 26858:qr(),Il(248),jl(),Qr();break;default:Ur()}ic.endNonterminal(\"ForwardStep\",Vl)}function Ir(){switch($l){case 83:ql(235);break;case 94:case 112:case 113:case 137:case 138:case 234:ql(231);break;default:Wl=$l}switch(Wl){case 26707:case 26718:case 26736:case 26737:case 26761:case 26762:case 26858:Rr(),Il(248),Gr();break;default:zr()}}function qr(){ic.startNonterminal(\"ForwardAxis\",Vl);switch($l){case 94:Pl(94),Il(27),Pl(52);break;case 112:Pl(112),Il(27),Pl(52);break;case 83:Pl(83),Il(27),Pl(52);break;case 234:Pl(234),Il(27),Pl(52);break;case 113:Pl(113),Il(27),Pl(52);break;case 138:Pl(138),Il(27),Pl(52);break;default:Pl(137),Il(27),Pl(52)}ic.endNonterminal(\"ForwardAxis\",Vl)}function Rr(){switch($l){case 94:Hl(94),Il(27),Hl(52);break;case 112:Hl(112),Il(27),Hl(52);break;case 83:Hl(83),Il(27),Hl(52);break;case 234:Hl(234),Il(27),Hl(52);break;case 113:Hl(113),Il(27),Hl(52);break;case 138:Hl(138),Il(27),Hl(52);break;default:Hl(137),Il(27),Hl(52)}}function Ur(){ic.startNonterminal(\"AbbrevForwardStep\",Vl),$l==67&&Pl(67),Il(248),jl(),Qr(),ic.endNonterminal(\"AbbrevForwardStep\",Vl)}function zr(){$l==67&&Hl(67),Il(248),Gr()}function Wr(){ic.startNonterminal(\"ReverseStep\",Vl);switch($l){case 46:Jr();break;default:Vr(),Il(248),jl(),Qr()}ic.endNonterminal(\"ReverseStep\",Vl)}function Xr(){switch($l){case 46:Kr();break;default:$r(),Il(248),Gr()}}function Vr(){ic.startNonterminal(\"ReverseAxis\",Vl);switch($l){case 210:Pl(210),Il(27),Pl(52);break;case 74:Pl(74),Il(27),Pl(52);break;case 217:Pl(217),Il(27),Pl(52);break;case 216:Pl(216),Il(27),Pl(52);break;default:Pl(75),Il(27),Pl(52)}ic.endNonterminal(\"ReverseAxis\",Vl)}function $r(){switch($l){case 210:Hl(210),Il(27),Hl(52);break;case 74:Hl(74),Il(27),Hl(52);break;case 217:Hl(217),Il(27),Hl(52);break;case 216:Hl(216),Il(27),Hl(52);break;default:Hl(75),Il(27),Hl(52)}}function Jr(){ic.startNonterminal(\"AbbrevReverseStep\",Vl),Pl(46),ic.endNonterminal(\"AbbrevReverseStep\",Vl)}function Kr(){Hl(46)}function Qr(){ic.startNonterminal(\"NodeTest\",Vl);switch($l){case 83:case 97:case 121:case 122:case 188:case 194:case 220:case 230:case 231:case 249:ql(230);break;default:Wl=$l}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:Vs();break;default:Yr()}ic.endNonterminal(\"NodeTest\",Vl)}function Gr(){switch($l){case 83:case 97:case 121:case 122:case 188:case 194:case 220:case 230:case 231:case 249:ql(230);break;default:Wl=$l}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:$s();break;default:Zr()}}function Yr(){ic.startNonterminal(\"NameTest\",Vl);switch($l){case 5:Pl(5);break;default:$a()}ic.endNonterminal(\"NameTest\",Vl)}function Zr(){switch($l){case 5:Hl(5);break;default:Ja()}}function ei(){ic.startNonterminal(\"PostfixExpr\",Vl),yl();for(;;){Il(234);if($l!=35&&$l!=45&&$l!=69)break;switch($l){case 69:ql(272);break;default:Wl=$l}if(Wl==35397){Wl=uc(5,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{pi(),Wl=-1}catch(a){Wl=-4}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(5,Vl,Wl)}}switch(Wl){case 35:jl(),ai();break;case 45:jl(),ni();break;case-4:jl(),ii();break;case 35909:jl(),oi();break;default:jl(),hi()}}ic.endNonterminal(\"PostfixExpr\",Vl)}function ti(){bl();for(;;){Il(234);if($l!=35&&$l!=45&&$l!=69)break;switch($l){case 69:ql(272);break;default:Wl=$l}if(Wl==35397){Wl=uc(5,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{pi(),oc(5,t,-1),Wl=-6}catch(a){Wl=-4,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(5,t,-4)}}}switch(Wl){case 35:fi();break;case 45:ri();break;case-4:si();break;case 35909:ui();break;case-6:break;default:pi()}}}function ni(){ic.startNonterminal(\"ObjectLookup\",Vl),Pl(45),Il(250);switch($l){case 11:Pl(11);break;case 35:jl(),Ci();break;case 31:jl(),Si();break;case 32:jl(),Li();break;default:jl(),Ga()}ic.endNonterminal(\"ObjectLookup\",Vl)}function ri(){Hl(45),Il(250);switch($l){case 11:Hl(11);break;case 35:ki();break;case 31:xi();break;case 32:Ai();break;default:Ya()}}function ii(){ic.startNonterminal(\"ArrayLookup\",Vl),Pl(69),Il(31),Pl(69),Il(266),jl(),G(),Pl(70),Il(32),Pl(70),ic.endNonterminal(\"ArrayLookup\",Vl)}function si(){Hl(69),Il(31),Hl(69),Il(266),Y(),Hl(70),Il(32),Hl(70)}function oi(){ic.startNonterminal(\"ArrayUnboxing\",Vl),Pl(69),Il(32),Pl(70),ic.endNonterminal(\"ArrayUnboxing\",Vl)}function ui(){Hl(69),Il(32),Hl(70)}function ai(){ic.startNonterminal(\"ArgumentList\",Vl),Pl(35),Il(279);if($l!=38){jl(),Bi();for(;;){Il(105);if($l!=42)break;Pl(42),Il(271),jl(),Bi()}}Pl(38),ic.endNonterminal(\"ArgumentList\",Vl)}function fi(){Hl(35),Il(279);if($l!=38){ji();for(;;){Il(105);if($l!=42)break;Hl(42),Il(271),ji()}}Hl(38)}function li(){ic.startNonterminal(\"PredicateList\",Vl);for(;;){Il(227);if($l!=69)break;jl(),hi()}ic.endNonterminal(\"PredicateList\",Vl)}function ci(){for(;;){Il(227);if($l!=69)break;pi()}}function hi(){ic.startNonterminal(\"Predicate\",Vl),Pl(69),Il(266),jl(),G(),Pl(70),ic.endNonterminal(\"Predicate\",Vl)}function pi(){Hl(69),Il(266),Y(),Hl(70)}function di(){ic.startNonterminal(\"Literal\",Vl);switch($l){case 11:Pl(11);break;case 135:case 255:mi();break;case 197:yi();break;default:wi()}ic.endNonterminal(\"Literal\",Vl)}function vi(){switch($l){case 11:Hl(11);break;case 135:case 255:gi();break;case 197:bi();break;default:Ei()}}function mi(){ic.startNonterminal(\"BooleanLiteral\",Vl);switch($l){case 255:Pl(255);break;default:Pl(135)}ic.endNonterminal(\"BooleanLiteral\",Vl)}function gi(){switch($l){case 255:Hl(255);break;default:Hl(135)}}function yi(){ic.startNonterminal(\"NullLiteral\",Vl),Pl(197),ic.endNonterminal(\"NullLiteral\",Vl)}function bi(){Hl(197)}function wi(){ic.startNonterminal(\"NumericLiteral\",Vl);switch($l){case 8:Pl(8);break;case 9:Pl(9);break;default:Pl(10)}ic.endNonterminal(\"NumericLiteral\",Vl)}function Ei(){switch($l){case 8:Hl(8);break;case 9:Hl(9);break;default:Hl(10)}}function Si(){ic.startNonterminal(\"VarRef\",Vl),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"VarRef\",Vl)}function xi(){Hl(31),Il(245),Ni()}function Ti(){ic.startNonterminal(\"VarName\",Vl),$a(),ic.endNonterminal(\"VarName\",Vl)}function Ni(){Ja()}function Ci(){ic.startNonterminal(\"ParenthesizedExpr\",Vl),Pl(35),Il(269),$l!=38&&(jl(),G()),Pl(38),ic.endNonterminal(\"ParenthesizedExpr\",Vl)}function ki(){Hl(35),Il(269),$l!=38&&Y(),Hl(38)}function Li(){ic.startNonterminal(\"ContextItemExpr\",Vl),Pl(32),ic.endNonterminal(\"ContextItemExpr\",Vl)}function Ai(){Hl(32)}function Oi(){ic.startNonterminal(\"OrderedExpr\",Vl),Pl(206),Il(90),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"OrderedExpr\",Vl)}function Mi(){Hl(206),Il(90),Hl(281),Il(266),Y(),Hl(287)}function _i(){ic.startNonterminal(\"UnorderedExpr\",Vl),Pl(262),Il(90),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"UnorderedExpr\",Vl)}function Di(){Hl(262),Il(90),Hl(281),Il(266),Y(),Hl(287)}function Pi(){ic.startNonterminal(\"FunctionCall\",Vl),Ka(),Il(22),jl(),ai(),ic.endNonterminal(\"FunctionCall\",Vl)}function Hi(){Qa(),Il(22),fi()}function Bi(){ic.startNonterminal(\"Argument\",Vl);switch($l){case 65:Fi();break;default:Wf()}ic.endNonterminal(\"Argument\",Vl)}function ji(){switch($l){case 65:Ii();break;default:Xf()}}function Fi(){ic.startNonterminal(\"ArgumentPlaceholder\",Vl),Pl(65),ic.endNonterminal(\"ArgumentPlaceholder\",Vl)}function Ii(){Hl(65)}function qi(){ic.startNonterminal(\"Constructor\",Vl);switch($l){case 55:case 56:case 60:Ui();break;default:os()}ic.endNonterminal(\"Constructor\",Vl)}function Ri(){switch($l){case 55:case 56:case 60:zi();break;default:us()}}function Ui(){ic.startNonterminal(\"DirectConstructor\",Vl);switch($l){case 55:Wi();break;case 56:ns();break;default:is()}ic.endNonterminal(\"DirectConstructor\",Vl)}function zi(){switch($l){case 55:Xi();break;case 56:rs();break;default:ss()}}function Wi(){ic.startNonterminal(\"DirElemConstructor\",Vl),Pl(55),Rl(4),Pl(20),Vi();switch($l){case 49:Pl(49);break;default:Pl(62);for(;;){Rl(196);if($l==57)break;es()}Pl(57),Rl(4),Pl(20),Rl(12),$l==21&&Pl(21),Rl(8),Pl(62)}ic.endNonterminal(\"DirElemConstructor\",Vl)}function Xi(){Hl(55),Rl(4),Hl(20),$i();switch($l){case 49:Hl(49);break;default:Hl(62);for(;;){Rl(196);if($l==57)break;ts()}Hl(57),Rl(4),Hl(20),Rl(12),$l==21&&Hl(21),Rl(8),Hl(62)}}function Vi(){ic.startNonterminal(\"DirAttributeList\",Vl);for(;;){Rl(19);if($l!=21)break;Pl(21),Rl(94),$l==20&&(Pl(20),Rl(11),$l==21&&Pl(21),Rl(7),Pl(61),Rl(18),$l==21&&Pl(21),Ji())}ic.endNonterminal(\"DirAttributeList\",Vl)}function $i(){for(;;){Rl(19);if($l!=21)break;Hl(21),Rl(94),$l==20&&(Hl(20),Rl(11),$l==21&&Hl(21),Rl(7),Hl(61),Rl(18),$l==21&&Hl(21),Ki())}}function Ji(){ic.startNonterminal(\"DirAttributeValue\",Vl),Rl(14);switch($l){case 28:Pl(28);for(;;){Rl(185);if($l==28)break;switch($l){case 13:Pl(13);break;default:Qi()}}Pl(28);break;default:Pl(34);for(;;){Rl(186);if($l==34)break;switch($l){case 14:Pl(14);break;default:Yi()}}Pl(34)}ic.endNonterminal(\"DirAttributeValue\",Vl)}function Ki(){Rl(14);switch($l){case 28:Hl(28);for(;;){Rl(185);if($l==28)break;switch($l){case 13:Hl(13);break;default:Gi()}}Hl(28);break;default:Hl(34);for(;;){Rl(186);if($l==34)break;switch($l){case 14:Hl(14);break;default:Zi()}}Hl(34)}}function Qi(){ic.startNonterminal(\"QuotAttrValueContent\",Vl);switch($l){case 16:Pl(16);break;default:il()}ic.endNonterminal(\"QuotAttrValueContent\",Vl)}function Gi(){switch($l){case 16:Hl(16);break;default:sl()}}function Yi(){ic.startNonterminal(\"AposAttrValueContent\",Vl);switch($l){case 17:Pl(17);break;default:il()}ic.endNonterminal(\"AposAttrValueContent\",Vl)}function Zi(){switch($l){case 17:Hl(17);break;default:sl()}}function es(){ic.startNonterminal(\"DirElemContent\",Vl);switch($l){case 55:case 56:case 60:Ui();break;case 4:Pl(4);break;case 15:Pl(15);break;default:il()}ic.endNonterminal(\"DirElemContent\",Vl)}function ts(){switch($l){case 55:case 56:case 60:zi();break;case 4:Hl(4);break;case 15:Hl(15);break;default:sl()}}function ns(){ic.startNonterminal(\"DirCommentConstructor\",Vl),Pl(56),Rl(1),Pl(2),Rl(6),Pl(44),ic.endNonterminal(\"DirCommentConstructor\",Vl)}function rs(){Hl(56),Rl(1),Hl(2),Rl(6),Hl(44)}function is(){ic.startNonterminal(\"DirPIConstructor\",Vl),Pl(60),Rl(3),Pl(18),Rl(13),$l==21&&(Pl(21),Rl(2),Pl(3)),Rl(9),Pl(66),ic.endNonterminal(\"DirPIConstructor\",Vl)}function ss(){Hl(60),Rl(3),Hl(18),Rl(13),$l==21&&(Hl(21),Rl(2),Hl(3)),Rl(9),Hl(66)}function os(){ic.startNonterminal(\"ComputedConstructor\",Vl);switch($l){case 120:al();break;case 122:as();break;case 83:ll();break;case 187:ls();break;case 249:ml();break;case 97:dl();break;default:hl()}ic.endNonterminal(\"ComputedConstructor\",Vl)}function us(){switch($l){case 120:fl();break;case 122:fs();break;case 83:cl();break;case 187:cs();break;case 249:gl();break;case 97:vl();break;default:pl()}}function as(){ic.startNonterminal(\"CompElemConstructor\",Vl),Pl(122),Il(249);switch($l){case 281:Pl(281),Il(266),jl(),G(),Pl(287);break;default:jl(),$a()}Il(90),Pl(281),Il(280),$l!=287&&(jl(),ol()),Pl(287),ic.endNonterminal(\"CompElemConstructor\",Vl)}function fs(){Hl(122),Il(249);switch($l){case 281:Hl(281),Il(266),Y(),Hl(287);break;default:Ja()}Il(90),Hl(281),Il(280),$l!=287&&ul(),Hl(287)}function ls(){ic.startNonterminal(\"CompNamespaceConstructor\",Vl),Pl(187),Il(241);switch($l){case 281:Pl(281),Il(266),jl(),ds(),Pl(287);break;default:jl(),hs()}Il(90),Pl(281),Il(266),jl(),ms(),Pl(287),ic.endNonterminal(\"CompNamespaceConstructor\",Vl)}function cs(){Hl(187),Il(241);switch($l){case 281:Hl(281),Il(266),vs(),Hl(287);break;default:ps()}Il(90),Hl(281),Il(266),gs(),Hl(287)}function hs(){ic.startNonterminal(\"Prefix\",Vl),Ga(),ic.endNonterminal(\"Prefix\",Vl)}function ps(){Ya()}function ds(){ic.startNonterminal(\"PrefixExpr\",Vl),G(),ic.endNonterminal(\"PrefixExpr\",Vl)}function vs(){Y()}function ms(){ic.startNonterminal(\"URIExpr\",Vl),G(),ic.endNonterminal(\"URIExpr\",Vl)}function gs(){Y()}function ys(){ic.startNonterminal(\"FunctionItemExpr\",Vl);switch($l){case 147:ql(95);break;default:Wl=$l}switch(Wl){case 33:case 18067:Ss();break;default:ws()}ic.endNonterminal(\"FunctionItemExpr\",Vl)}function bs(){switch($l){case 147:ql(95);break;default:Wl=$l}switch(Wl){case 33:case 18067:xs();break;default:Es()}}function ws(){ic.startNonterminal(\"NamedFunctionRef\",Vl),$a(),Il(20),Pl(29),Il(16),Pl(8),ic.endNonterminal(\"NamedFunctionRef\",Vl)}function Es(){Ja(),Il(20),Hl(29),Il(16),Hl(8)}function Ss(){ic.startNonterminal(\"InlineFunctionExpr\",Vl);for(;;){Il(101);if($l!=33)break;jl(),B()}Pl(147),Il(22),Pl(35),Il(98),$l==31&&(jl(),U()),Pl(38),Il(115),$l==80&&(Pl(80),Il(253),jl(),Ls()),Il(90),jl(),V(),ic.endNonterminal(\"InlineFunctionExpr\",Vl)}function xs(){for(;;){Il(101);if($l!=33)break;j()}Hl(147),Il(22),Hl(35),Il(98),$l==31&&z(),Hl(38),Il(115),$l==80&&(Hl(80),Il(253),As()),Il(90),$()}function Ts(){ic.startNonterminal(\"SingleType\",Vl),ko(),Il(225),$l==65&&Pl(65),ic.endNonterminal(\"SingleType\",Vl)}function Ns(){Lo(),Il(225),$l==65&&Hl(65)}function Cs(){ic.startNonterminal(\"TypeDeclaration\",Vl),Pl(80),Il(253),jl(),Ls(),ic.endNonterminal(\"TypeDeclaration\",Vl)}function ks(){Hl(80),Il(253),As()}function Ls(){ic.startNonterminal(\"SequenceType\",Vl);switch($l){case 35:ql(258);break;case 125:ql(232);break;default:Wl=$l}switch(Wl){case 18045:case 19491:$l==125&&Pl(125),Il(22),Pl(35),Il(23),Pl(38);break;default:_s(),Il(228);switch($l){case 40:case 41:case 65:jl(),Os();break;default:}}ic.endNonterminal(\"SequenceType\",Vl)}function As(){switch($l){case 35:ql(258);break;case 125:ql(232);break;default:Wl=$l}switch(Wl){case 18045:case 19491:$l==125&&Hl(125),Il(22),Hl(35),Il(23),Hl(38);break;default:Ds(),Il(228);switch($l){case 40:case 41:case 65:Ms();break;default:}}}function Os(){ic.startNonterminal(\"OccurrenceIndicator\",Vl);switch($l){case 65:Pl(65);break;case 40:Pl(40);break;default:Pl(41)}ic.endNonterminal(\"OccurrenceIndicator\",Vl)}function Ms(){switch($l){case 65:Hl(65);break;case 40:Hl(40);break;default:Hl(41)}}function _s(){ic.startNonterminal(\"ItemType\",Vl);switch($l){case 79:case 83:case 97:case 121:case 122:case 147:case 167:case 169:case 188:case 194:case 198:case 220:case 230:case 231:case 247:case 249:ql(232);break;default:Wl=$l}if(Wl==12879||Wl==12969||Wl==12998||Wl==13047||Wl==13903||Wl==13993||Wl==14022||Wl==14071||Wl==19535||Wl==19625||Wl==19654||Wl==19703||Wl==20047||Wl==20137||Wl==20166||Wl==20215||Wl==20559||Wl==20649||Wl==20678||Wl==20727||Wl==21071||Wl==21161||Wl==21190||Wl==21239||Wl==21583||Wl==21673||Wl==21702||Wl==21751||Wl==22095||Wl==22185||Wl==22214||Wl==22263||Wl==25679||Wl==25769||Wl==25798||Wl==25847||Wl==27215||Wl==27305||Wl==27334||Wl==27383||Wl==27727||Wl==27817||Wl==27846||Wl==27895||Wl==28239||Wl==28329||Wl==28358||Wl==28407||Wl==29775||Wl==29865||Wl==29894||Wl==29943||Wl==30287||Wl==30377||Wl==30406||Wl==30455||Wl==31311||Wl==31401||Wl==31430||Wl==31479||Wl==31823||Wl==31913||Wl==31942||Wl==31991||Wl==32335||Wl==32425||Wl==32454||Wl==32503||Wl==32847||Wl==32937||Wl==32966||Wl==33015||Wl==33359||Wl==33449||Wl==33478||Wl==33527||Wl==35919||Wl==36009||Wl==36038||Wl==36087||Wl==36431||Wl==36521||Wl==36550||Wl==36599||Wl==37455||Wl==37545||Wl==37574||Wl==37623||Wl==38991||Wl==39081||Wl==39110||Wl==39159||Wl==41039||Wl==41129||Wl==41158||Wl==41207||Wl==41551||Wl==41641||Wl==41670||Wl==41719||Wl==42063||Wl==42153||Wl==42182||Wl==42231||Wl==43599||Wl==43689||Wl==43718||Wl==43767||Wl==45647||Wl==45737||Wl==45766||Wl==45815||Wl==48719||Wl==48809||Wl==48838||Wl==48887||Wl==51279||Wl==51369||Wl==51398||Wl==51447||Wl==54351||Wl==54441||Wl==54470||Wl==54519||Wl==56399||Wl==56489||Wl==56518||Wl==56567||Wl==58447||Wl==58537||Wl==58566||Wl==58615||Wl==61007||Wl==61097||Wl==61126||Wl==61175||Wl==63055||Wl==63145||Wl==63174||Wl==63223||Wl==63567||Wl==63657||Wl==63686||Wl==63735||Wl==65103||Wl==65193||Wl==65222||Wl==65271||Wl==66127||Wl==66217||Wl==66246||Wl==66295||Wl==67663||Wl==67753||Wl==67782||Wl==67831||Wl==68687||Wl==68777||Wl==68806||Wl==68855||Wl==71247||Wl==71337||Wl==71366||Wl==71415||Wl==75855||Wl==75945||Wl==75974||Wl==76023||Wl==76879||Wl==76969||Wl==76998||Wl==77047||Wl==77903||Wl==77993||Wl==78022||Wl==78071||Wl==78415||Wl==78505||Wl==78534||Wl==78583||Wl==79951||Wl==80041||Wl==80070||Wl==80119||Wl==83023||Wl==83113||Wl==83142||Wl==83191||Wl==84047||Wl==84137||Wl==84166||Wl==84215||Wl==84559||Wl==84649||Wl==84678||Wl==84727||Wl==85071||Wl==85161||Wl==85190||Wl==85239||Wl==89679||Wl==89769||Wl==89798||Wl==89847||Wl==90703||Wl==90793||Wl==90822||Wl==90871||Wl==92751||Wl==92841||Wl==92870||Wl==92919||Wl==93775||Wl==93865||Wl==93894||Wl==93943||Wl==94287||Wl==94377||Wl==94406||Wl==94455||Wl==96847||Wl==96937||Wl==96966||Wl==97015||Wl==103503||Wl==103593||Wl==103622||Wl==103671||Wl==104527||Wl==104617||Wl==104646||Wl==104695||Wl==105039||Wl==105129||Wl==105158||Wl==105207||Wl==107087||Wl==107177||Wl==107206||Wl==107255||Wl==114767||Wl==114857||Wl==114886||Wl==114935||Wl==116815||Wl==116905||Wl==116934||Wl==116983||Wl==118863||Wl==118953||Wl==118982||Wl==119031||Wl==121423||Wl==121513||Wl==121542||Wl==121591||Wl==123471||Wl==123561||Wl==123590||Wl==123639||Wl==123983||Wl==124073||Wl==124102||Wl==124151||Wl==129103||Wl==129193||Wl==129222||Wl==129271||Wl==129615||Wl==129705||Wl==129734||Wl==129783||Wl==133199||Wl==133289||Wl==133318||Wl==133367||Wl==139343||Wl==139433||Wl==139462||Wl==139511||Wl==141391||Wl==141481||Wl==141510||Wl==141559||Wl==142927||Wl==143017||Wl==143046||Wl==143095||Wl==143951||Wl==144041||Wl==144070||Wl==144119||Wl==145487||Wl==145577||Wl==145606||Wl==145655||Wl==145999||Wl==146089||Wl==146118||Wl==146167||Wl==146511||Wl==146601||Wl==146630||Wl==146679||Wl==147023||Wl==147113||Wl==147142||Wl==147191){Wl=uc(6,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xs(),Wl=-4}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hs(),Wl=-6}catch(f){Wl=-7}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(6,Vl,Wl)}}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:Vs();break;case 18087:Pl(167),Il(22),Pl(35),Il(23),Pl(38);break;case 33:case 18067:Mo();break;case 35:jo();break;case-6:case 17999:case 18089:case 18118:Ps();break;case-7:case 18167:Bs();break;default:Ws()}ic.endNonterminal(\"ItemType\",Vl)}function Ds(){switch($l){case 79:case 83:case 97:case 121:case 122:case 147:case 167:case 169:case 188:case 194:case 198:case 220:case 230:case 231:case 247:case 249:ql(232);break;default:Wl=$l}if(Wl==12879||Wl==12969||Wl==12998||Wl==13047||Wl==13903||Wl==13993||Wl==14022||Wl==14071||Wl==19535||Wl==19625||Wl==19654||Wl==19703||Wl==20047||Wl==20137||Wl==20166||Wl==20215||Wl==20559||Wl==20649||Wl==20678||Wl==20727||Wl==21071||Wl==21161||Wl==21190||Wl==21239||Wl==21583||Wl==21673||Wl==21702||Wl==21751||Wl==22095||Wl==22185||Wl==22214||Wl==22263||Wl==25679||Wl==25769||Wl==25798||Wl==25847||Wl==27215||Wl==27305||Wl==27334||Wl==27383||Wl==27727||Wl==27817||Wl==27846||Wl==27895||Wl==28239||Wl==28329||Wl==28358||Wl==28407||Wl==29775||Wl==29865||Wl==29894||Wl==29943||Wl==30287||Wl==30377||Wl==30406||Wl==30455||Wl==31311||Wl==31401||Wl==31430||Wl==31479||Wl==31823||Wl==31913||Wl==31942||Wl==31991||Wl==32335||Wl==32425||Wl==32454||Wl==32503||Wl==32847||Wl==32937||Wl==32966||Wl==33015||Wl==33359||Wl==33449||Wl==33478||Wl==33527||Wl==35919||Wl==36009||Wl==36038||Wl==36087||Wl==36431||Wl==36521||Wl==36550||Wl==36599||Wl==37455||Wl==37545||Wl==37574||Wl==37623||Wl==38991||Wl==39081||Wl==39110||Wl==39159||Wl==41039||Wl==41129||Wl==41158||Wl==41207||Wl==41551||Wl==41641||Wl==41670||Wl==41719||Wl==42063||Wl==42153||Wl==42182||Wl==42231||Wl==43599||Wl==43689||Wl==43718||Wl==43767||Wl==45647||Wl==45737||Wl==45766||Wl==45815||Wl==48719||Wl==48809||Wl==48838||Wl==48887||Wl==51279||Wl==51369||Wl==51398||Wl==51447||Wl==54351||Wl==54441||Wl==54470||Wl==54519||Wl==56399||Wl==56489||Wl==56518||Wl==56567||Wl==58447||Wl==58537||Wl==58566||Wl==58615||Wl==61007||Wl==61097||Wl==61126||Wl==61175||Wl==63055||Wl==63145||Wl==63174||Wl==63223||Wl==63567||Wl==63657||Wl==63686||Wl==63735||Wl==65103||Wl==65193||Wl==65222||Wl==65271||Wl==66127||Wl==66217||Wl==66246||Wl==66295||Wl==67663||Wl==67753||Wl==67782||Wl==67831||Wl==68687||Wl==68777||Wl==68806||Wl==68855||Wl==71247||Wl==71337||Wl==71366||Wl==71415||Wl==75855||Wl==75945||Wl==75974||Wl==76023||Wl==76879||Wl==76969||Wl==76998||Wl==77047||Wl==77903||Wl==77993||Wl==78022||Wl==78071||Wl==78415||Wl==78505||Wl==78534||Wl==78583||Wl==79951||Wl==80041||Wl==80070||Wl==80119||Wl==83023||Wl==83113||Wl==83142||Wl==83191||Wl==84047||Wl==84137||Wl==84166||Wl==84215||Wl==84559||Wl==84649||Wl==84678||Wl==84727||Wl==85071||Wl==85161||Wl==85190||Wl==85239||Wl==89679||Wl==89769||Wl==89798||Wl==89847||Wl==90703||Wl==90793||Wl==90822||Wl==90871||Wl==92751||Wl==92841||Wl==92870||Wl==92919||Wl==93775||Wl==93865||Wl==93894||Wl==93943||Wl==94287||Wl==94377||Wl==94406||Wl==94455||Wl==96847||Wl==96937||Wl==96966||Wl==97015||Wl==103503||Wl==103593||Wl==103622||Wl==103671||Wl==104527||Wl==104617||Wl==104646||Wl==104695||Wl==105039||Wl==105129||Wl==105158||Wl==105207||Wl==107087||Wl==107177||Wl==107206||Wl==107255||Wl==114767||Wl==114857||Wl==114886||Wl==114935||Wl==116815||Wl==116905||Wl==116934||Wl==116983||Wl==118863||Wl==118953||Wl==118982||Wl==119031||Wl==121423||Wl==121513||Wl==121542||Wl==121591||Wl==123471||Wl==123561||Wl==123590||Wl==123639||Wl==123983||Wl==124073||Wl==124102||Wl==124151||Wl==129103||Wl==129193||Wl==129222||Wl==129271||Wl==129615||Wl==129705||Wl==129734||Wl==129783||Wl==133199||Wl==133289||Wl==133318||Wl==133367||Wl==139343||Wl==139433||Wl==139462||Wl==139511||Wl==141391||Wl==141481||Wl==141510||Wl==141559||Wl==142927||Wl==143017||Wl==143046||Wl==143095||Wl==143951||Wl==144041||Wl==144070||Wl==144119||Wl==145487||Wl==145577||Wl==145606||Wl==145655||Wl==145999||Wl==146089||Wl==146118||Wl==146167||Wl==146511||Wl==146601||Wl==146630||Wl==146679||Wl==147023||Wl==147113||Wl==147142||Wl==147191){Wl=uc(6,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xs(),oc(6,t,-4),Wl=-8}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hs(),oc(6,t,-6),Wl=-8}catch(f){Wl=-7,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(6,t,-7)}}}}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:$s();break;case 18087:Hl(167),Il(22),Hl(35),Il(23),Hl(38);break;case 33:case 18067:_o();break;case 35:Fo();break;case-6:case 17999:case 18089:case 18118:Hs();break;case-7:case 18167:js();break;case-8:break;default:Xs()}}function Ps(){ic.startNonterminal(\"JSONTest\",Vl);switch($l){case 169:Fs();break;case 198:qs();break;default:Us()}ic.endNonterminal(\"JSONTest\",Vl)}function Hs(){switch($l){case 169:Is();break;case 198:Rs();break;default:zs()}}function Bs(){ic.startNonterminal(\"StructuredItemTest\",Vl),Pl(247),Il(232),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"StructuredItemTest\",Vl)}function js(){Hl(247),Il(232),$l==35&&(Hl(35),Il(23),Hl(38))}function Fs(){ic.startNonterminal(\"JSONItemTest\",Vl),Pl(169),Il(232),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"JSONItemTest\",Vl)}function Is(){Hl(169),Il(232),$l==35&&(Hl(35),Il(23),Hl(38))}function qs(){ic.startNonterminal(\"JSONObjectTest\",Vl),Pl(198),Il(232),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"JSONObjectTest\",Vl)}function Rs(){Hl(198),Il(232),$l==35&&(Hl(35),Il(23),Hl(38))}function Us(){ic.startNonterminal(\"JSONArrayTest\",Vl),Pl(79),Il(232),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"JSONArrayTest\",Vl)}function zs(){Hl(79),Il(232),$l==35&&(Hl(35),Il(23),Hl(38))}function Ws(){ic.startNonterminal(\"AtomicOrUnionType\",Vl),$a(),ic.endNonterminal(\"AtomicOrUnionType\",Vl)}function Xs(){Ja()}function Vs(){ic.startNonterminal(\"KindTest\",Vl);switch($l){case 121:Qs();break;case 122:vo();break;case 83:oo();break;case 231:bo();break;case 230:lo();break;case 220:io();break;case 97:eo();break;case 249:Ys();break;case 188:no();break;default:Js()}ic.endNonterminal(\"KindTest\",Vl)}function $s(){switch($l){case 121:Gs();break;case 122:mo();break;case 83:uo();break;case 231:wo();break;case 230:co();break;case 220:so();break;case 97:to();break;case 249:Zs();break;case 188:ro();break;default:Ks()}}function Js(){ic.startNonterminal(\"AnyKindTest\",Vl),Pl(194),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"AnyKindTest\",Vl)}function Ks(){Hl(194),Il(22),Hl(35),Il(23),Hl(38)}function Qs(){ic.startNonterminal(\"DocumentTest\",Vl),Pl(121),Il(22),Pl(35),Il(154);if($l!=38)switch($l){case 122:jl(),vo();break;default:jl(),bo()}Il(23),Pl(38),ic.endNonterminal(\"DocumentTest\",Vl)}function Gs(){Hl(121),Il(22),Hl(35),Il(154);if($l!=38)switch($l){case 122:mo();break;default:wo()}Il(23),Hl(38)}function Ys(){ic.startNonterminal(\"TextTest\",Vl),Pl(249),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"TextTest\",Vl)}function Zs(){Hl(249),Il(22),Hl(35),Il(23),Hl(38)}function eo(){ic.startNonterminal(\"CommentTest\",Vl),Pl(97),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"CommentTest\",Vl)}function to(){Hl(97),Il(22),Hl(35),Il(23),Hl(38)}function no(){ic.startNonterminal(\"NamespaceNodeTest\",Vl),Pl(188),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"NamespaceNodeTest\",Vl)}function ro(){Hl(188),Il(22),Hl(35),Il(23),Hl(38)}function io(){ic.startNonterminal(\"PITest\",Vl),Pl(220),Il(22),Pl(35),Il(243);if($l!=38)switch($l){case 11:Pl(11);break;default:jl(),Ga()}Il(23),Pl(38),ic.endNonterminal(\"PITest\",Vl)}function so(){Hl(220),Il(22),Hl(35),Il(243);if($l!=38)switch($l){case 11:Hl(11);break;default:Ya()}Il(23),Hl(38)}function oo(){ic.startNonterminal(\"AttributeTest\",Vl),Pl(83),Il(22),Pl(35),Il(254),$l!=38&&(jl(),ao(),Il(105),$l==42&&(Pl(42),Il(245),jl(),Ao())),Il(23),Pl(38),ic.endNonterminal(\"AttributeTest\",Vl)}function uo(){Hl(83),Il(22),Hl(35),Il(254),$l!=38&&(fo(),Il(105),$l==42&&(Hl(42),Il(245),Oo())),Il(23),Hl(38)}function ao(){ic.startNonterminal(\"AttribNameOrWildcard\",Vl);switch($l){case 39:Pl(39);break;default:xo()}ic.endNonterminal(\"AttribNameOrWildcard\",Vl)}function fo(){switch($l){case 39:Hl(39);break;default:To()}}function lo(){ic.startNonterminal(\"SchemaAttributeTest\",Vl),Pl(230),Il(22),Pl(35),Il(245),jl(),ho(),Il(23),Pl(38),ic.endNonterminal(\"SchemaAttributeTest\",Vl)}function co(){Hl(230),Il(22),Hl(35),Il(245),po(),Il(23),Hl(38)}function ho(){ic.startNonterminal(\"AttributeDeclaration\",Vl),xo(),ic.endNonterminal(\"AttributeDeclaration\",Vl)}function po(){To()}function vo(){ic.startNonterminal(\"ElementTest\",Vl),Pl(122),Il(22),Pl(35),Il(254),$l!=38&&(jl(),go(),Il(105),$l==42&&(Pl(42),Il(245),jl(),Ao(),Il(106),$l==65&&Pl(65))),Il(23),Pl(38),ic.endNonterminal(\"ElementTest\",Vl)}function mo(){Hl(122),Il(22),Hl(35),Il(254),$l!=38&&(yo(),Il(105),$l==42&&(Hl(42),Il(245),Oo(),Il(106),$l==65&&Hl(65))),Il(23),Hl(38)}function go(){ic.startNonterminal(\"ElementNameOrWildcard\",Vl);switch($l){case 39:Pl(39);break;default:No()}ic.endNonterminal(\"ElementNameOrWildcard\",Vl)}function yo(){switch($l){case 39:Hl(39);break;default:Co()}}function bo(){ic.startNonterminal(\"SchemaElementTest\",Vl),Pl(231),Il(22),Pl(35),Il(245),jl(),Eo(),Il(23),Pl(38),ic.endNonterminal(\"SchemaElementTest\",Vl)}function wo(){Hl(231),Il(22),Hl(35),Il(245),So(),Il(23),Hl(38)}function Eo(){ic.startNonterminal(\"ElementDeclaration\",Vl),No(),ic.endNonterminal(\"ElementDeclaration\",Vl)}function So(){Co()}function xo(){ic.startNonterminal(\"AttributeName\",Vl),$a(),ic.endNonterminal(\"AttributeName\",Vl)}function To(){Ja()}function No(){ic.startNonterminal(\"ElementName\",Vl),$a(),ic.endNonterminal(\"ElementName\",Vl)}function Co(){Ja()}function ko(){ic.startNonterminal(\"SimpleTypeName\",Vl),Ao(),ic.endNonterminal(\"SimpleTypeName\",Vl)}function Lo(){Oo()}function Ao(){ic.startNonterminal(\"TypeName\",Vl),$a(),ic.endNonterminal(\"TypeName\",Vl)}function Oo(){Ja()}function Mo(){ic.startNonterminal(\"FunctionTest\",Vl);for(;;){Il(101);if($l!=33)break;jl(),B()}switch($l){case 147:ql(22);break;default:Wl=$l}Wl=uc(7,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Po(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(7,Vl,Wl)}switch(Wl){case-1:jl(),Do();break;default:jl(),Ho()}ic.endNonterminal(\"FunctionTest\",Vl)}function _o(){for(;;){Il(101);if($l!=33)break;j()}switch($l){case 147:ql(22);break;default:Wl=$l}Wl=uc(7,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Po(),oc(7,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(7,t,-2)}}switch(Wl){case-1:Po();break;case-3:break;default:Bo()}}function Do(){ic.startNonterminal(\"AnyFunctionTest\",Vl),Pl(147),Il(22),Pl(35),Il(24),Pl(39),Il(23),Pl(38),ic.endNonterminal(\"AnyFunctionTest\",Vl)}function Po(){Hl(147),Il(22),Hl(35),Il(24),Hl(39),Il(23),Hl(38)}function Ho(){ic.startNonterminal(\"TypedFunctionTest\",Vl),Pl(147),Il(22),Pl(35),Il(258);if($l!=38){jl(),Ls();for(;;){Il(105);if($l!=42)break;Pl(42),Il(253),jl(),Ls()}}Pl(38),Il(33),Pl(80),Il(253),jl(),Ls(),ic.endNonterminal(\"TypedFunctionTest\",Vl)}function Bo(){Hl(147),Il(22),Hl(35),Il(258);if($l!=38){As();for(;;){Il(105);if($l!=42)break;Hl(42),Il(253),As()}}Hl(38),Il(33),Hl(80),Il(253),As()}function jo(){ic.startNonterminal(\"ParenthesizedItemType\",Vl),Pl(35),Il(253),jl(),_s(),Il(23),Pl(38),ic.endNonterminal(\"ParenthesizedItemType\",Vl)}function Fo(){Hl(35),Il(253),Ds(),Il(23),Hl(38)}function Io(){ic.startNonterminal(\"RevalidationDecl\",Vl),Pl(109),Il(75),Pl(226),Il(162);switch($l){case 245:Pl(245);break;case 174:Pl(174);break;default:Pl(238)}ic.endNonterminal(\"RevalidationDecl\",Vl)}function qo(){ic.startNonterminal(\"InsertExprTargetChoice\",Vl);switch($l){case 71:Pl(71);break;case 85:Pl(85);break;default:if($l==80){Pl(80),Il(123);switch($l){case 136:Pl(136);break;default:Pl(173)}}Il(57),Pl(165)}ic.endNonterminal(\"InsertExprTargetChoice\",Vl)}function Ro(){switch($l){case 71:Hl(71);break;case 85:Hl(85);break;default:if($l==80){Hl(80),Il(123);switch($l){case 136:Hl(136);break;default:Hl(173)}}Il(57),Hl(165)}}function Uo(){ic.startNonterminal(\"InsertExpr\",Vl),Pl(161),Il(133);switch($l){case 194:Pl(194);break;default:Pl(195)}Il(266),jl(),Qo(),jl(),qo(),Il(266),jl(),Yo(),ic.endNonterminal(\"InsertExpr\",Vl)}function zo(){Hl(161),Il(133);switch($l){case 194:Hl(194);break;default:Hl(195)}Il(266),Go(),Ro(),Il(266),Zo()}function Wo(){ic.startNonterminal(\"DeleteExpr\",Vl),Pl(111),Il(133);switch($l){case 194:Pl(194);break;default:Pl(195)}Il(266),jl(),Yo(),ic.endNonterminal(\"DeleteExpr\",Vl)}function Xo(){Hl(111),Il(133);switch($l){case 194:Hl(194);break;default:Hl(195)}Il(266),Zo()}function Vo(){ic.startNonterminal(\"ReplaceExpr\",Vl),Pl(223),Il(134),$l==267&&(Pl(267),Il(67),Pl(200)),Il(65),Pl(194),Il(266),jl(),Yo(),Pl(276),Il(266),jl(),Wf(),ic.endNonterminal(\"ReplaceExpr\",Vl)}function $o(){Hl(223),Il(134),$l==267&&(Hl(267),Il(67),Hl(200)),Il(65),Hl(194),Il(266),Zo(),Hl(276),Il(266),Xf()}function Jo(){ic.startNonterminal(\"RenameExpr\",Vl),Pl(222),Il(65),Pl(194),Il(266),jl(),Yo(),Pl(80),Il(266),jl(),eu(),ic.endNonterminal(\"RenameExpr\",Vl)}function Ko(){Hl(222),Il(65),Hl(194),Il(266),Zo(),Hl(80),Il(266),tu()}function Qo(){ic.startNonterminal(\"SourceExpr\",Vl),Wf(),ic.endNonterminal(\"SourceExpr\",Vl)}function Go(){Xf()}function Yo(){ic.startNonterminal(\"TargetExpr\",Vl),Wf(),ic.endNonterminal(\"TargetExpr\",Vl)}function Zo(){Xf()}function eu(){ic.startNonterminal(\"NewNameExpr\",Vl),Wf(),ic.endNonterminal(\"NewNameExpr\",Vl)}function tu(){Xf()}function nu(){ic.startNonterminal(\"TransformExpr\",Vl),Pl(104),Il(21),jl(),iu();for(;;){if($l!=42)break;Pl(42),Il(21),jl(),iu()}Pl(184),Il(266),jl(),Wf(),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"TransformExpr\",Vl)}function ru(){Hl(104),Il(21),su();for(;;){if($l!=42)break;Hl(42),Il(21),su()}Hl(184),Il(266),Xf(),Hl(224),Il(266),Xf()}function iu(){ic.startNonterminal(\"TransformSpec\",Vl),Pl(31),Il(245),jl(),Ti(),Il(28),Pl(53),Il(266),jl(),Wf(),ic.endNonterminal(\"TransformSpec\",Vl)}function su(){Hl(31),Il(245),Ni(),Il(28),Hl(53),Il(266),Xf()}function ou(){ic.startNonterminal(\"FTSelection\",Vl),lu();for(;;){Il(211);switch($l){case 82:ql(161);break;default:Wl=$l}if(Wl!=116&&Wl!=118&&Wl!=128&&Wl!=206&&Wl!=227&&Wl!=275&&Wl!=65106&&Wl!=123986)break;jl(),Pu()}ic.endNonterminal(\"FTSelection\",Vl)}function uu(){cu();for(;;){Il(211);switch($l){case 82:ql(161);break;default:Wl=$l}if(Wl!=116&&Wl!=118&&Wl!=128&&Wl!=206&&Wl!=227&&Wl!=275&&Wl!=65106&&Wl!=123986)break;Hu()}}function au(){ic.startNonterminal(\"FTWeight\",Vl),Pl(270),Il(90),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"FTWeight\",Vl)}function fu(){Hl(270),Il(90),Hl(281),Il(266),Y(),Hl(287)}function lu(){ic.startNonterminal(\"FTOr\",Vl),hu();for(;;){if($l!=146)break;Pl(146),Il(177),jl(),hu()}ic.endNonterminal(\"FTOr\",Vl)}function cu(){pu();for(;;){if($l!=146)break;Hl(146),Il(177),pu()}}function hu(){ic.startNonterminal(\"FTAnd\",Vl),du();for(;;){if($l!=144)break;Pl(144),Il(177),jl(),du()}ic.endNonterminal(\"FTAnd\",Vl)}function pu(){vu();for(;;){if($l!=144)break;Hl(144),Il(177),vu()}}function du(){ic.startNonterminal(\"FTMildNot\",Vl),mu();for(;;){Il(212);if($l!=196)break;Pl(196),Il(56),Pl(156),Il(177),jl(),mu()}ic.endNonterminal(\"FTMildNot\",Vl)}function vu(){gu();for(;;){Il(212);if($l!=196)break;Hl(196),Il(56),Hl(156),Il(177),gu()}}function mu(){ic.startNonterminal(\"FTUnaryNot\",Vl),$l==145&&Pl(145),Il(164),jl(),yu(),ic.endNonterminal(\"FTUnaryNot\",Vl)}function gu(){$l==145&&Hl(145),Il(164),bu()}function yu(){ic.startNonterminal(\"FTPrimaryWithOptions\",Vl),wu(),Il(213),$l==265&&(jl(),Qu()),$l==270&&(jl(),au()),ic.endNonterminal(\"FTPrimaryWithOptions\",Vl)}function bu(){Eu(),Il(213),$l==265&&Gu(),$l==270&&fu()}function wu(){ic.startNonterminal(\"FTPrimary\",Vl);switch($l){case 35:Pl(35),Il(177),jl(),ou(),Pl(38);break;case 36:Cu();break;default:Su(),Il(214),$l==199&&(jl(),Ou())}ic.endNonterminal(\"FTPrimary\",Vl)}function Eu(){switch($l){case 35:Hl(35),Il(177),uu(),Hl(38);break;case 36:ku();break;default:xu(),Il(214),$l==199&&Mu()}}function Su(){ic.startNonterminal(\"FTWords\",Vl),Tu(),Il(220);if($l==72||$l==77||$l==214)jl(),Lu();ic.endNonterminal(\"FTWords\",Vl)}function xu(){Nu(),Il(220),($l==72||$l==77||$l==214)&&Au()}function Tu(){ic.startNonterminal(\"FTWordsValue\",Vl);switch($l){case 11:Pl(11);break;default:Pl(281),Il(266),jl(),G(),Pl(287)}ic.endNonterminal(\"FTWordsValue\",Vl)}function Nu(){switch($l){case 11:Hl(11);break;default:Hl(281),Il(266),Y(),Hl(287)}}function Cu(){ic.startNonterminal(\"FTExtensionSelection\",Vl);for(;;){jl(),Lr(),Il(104);if($l!=36)break}Pl(281),Il(184),$l!=287&&(jl(),ou()),Pl(287),ic.endNonterminal(\"FTExtensionSelection\",Vl)}function ku(){for(;;){Ar(),Il(104);if($l!=36)break}Hl(281),Il(184),$l!=287&&uu(),Hl(287)}function Lu(){ic.startNonterminal(\"FTAnyallOption\",Vl);switch($l){case 77:Pl(77),Il(217),$l==278&&Pl(278);break;case 72:Pl(72),Il(218),$l==279&&Pl(279);break;default:Pl(214)}ic.endNonterminal(\"FTAnyallOption\",Vl)}function Au(){switch($l){case 77:Hl(77),Il(217),$l==278&&Hl(278);break;case 72:Hl(72),Il(218),$l==279&&Hl(279);break;default:Hl(214)}}function Ou(){ic.startNonterminal(\"FTTimes\",Vl),Pl(199),Il(159),jl(),_u(),Pl(252),ic.endNonterminal(\"FTTimes\",Vl)}function Mu(){Hl(199),Il(159),Du(),Hl(252)}function _u(){ic.startNonterminal(\"FTRange\",Vl);switch($l){case 131:Pl(131),Il(265),jl(),Jn();break;case 82:Pl(82),Il(129);switch($l){case 176:Pl(176),Il(265),jl(),Jn();break;default:Pl(186),Il(265),jl(),Jn()}break;default:Pl(142),Il(265),jl(),Jn(),Pl(253),Il(265),jl(),Jn()}ic.endNonterminal(\"FTRange\",Vl)}function Du(){switch($l){case 131:Hl(131),Il(265),Kn();break;case 82:Hl(82),Il(129);switch($l){case 176:Hl(176),Il(265),Kn();break;default:Hl(186),Il(265),Kn()}break;default:Hl(142),Il(265),Kn(),Hl(253),Il(265),Kn()}}function Pu(){ic.startNonterminal(\"FTPosFilter\",Vl);switch($l){case 206:Bu();break;case 275:Fu();break;case 118:qu();break;case 116:case 227:Wu();break;default:Ju()}ic.endNonterminal(\"FTPosFilter\",Vl)}function Hu(){switch($l){case 206:ju();break;case 275:Iu();break;case 118:Ru();break;case 116:case 227:Xu();break;default:Ku()}}function Bu(){ic.startNonterminal(\"FTOrder\",Vl),Pl(206),ic.endNonterminal(\"FTOrder\",Vl)}function ju(){Hl(206)}function Fu(){ic.startNonterminal(\"FTWindow\",Vl),Pl(275),Il(265),jl(),Jn(),jl(),Uu(),ic.endNonterminal(\"FTWindow\",Vl)}function Iu(){Hl(275),Il(265),Kn(),zu()}function qu(){ic.startNonterminal(\"FTDistance\",Vl),Pl(118),Il(159),jl(),_u(),jl(),Uu(),ic.endNonterminal(\"FTDistance\",Vl)}function Ru(){Hl(118),Il(159),Du(),zu()}function Uu(){ic.startNonterminal(\"FTUnit\",Vl);switch($l){case 279:Pl(279);break;case 237:Pl(237);break;default:Pl(209)}ic.endNonterminal(\"FTUnit\",Vl)}function zu(){switch($l){case 279:Hl(279);break;case 237:Hl(237);break;default:Hl(209)}}function Wu(){ic.startNonterminal(\"FTScope\",Vl);switch($l){case 227:Pl(227);break;default:Pl(116)}Il(136),jl(),Vu(),ic.endNonterminal(\"FTScope\",Vl)}function Xu(){switch($l){case 227:Hl(227);break;default:Hl(116)}Il(136),$u()}function Vu(){ic.startNonterminal(\"FTBigUnit\",Vl);switch($l){case 236:Pl(236);break;default:Pl(208)}ic.endNonterminal(\"FTBigUnit\",Vl)}function $u(){switch($l){case 236:Hl(236);break;default:Hl(208)}}function Ju(){ic.startNonterminal(\"FTContent\",Vl);switch($l){case 82:Pl(82),Il(121);switch($l){case 242:Pl(242);break;default:Pl(127)}break;default:Pl(128),Il(45),Pl(101)}ic.endNonterminal(\"FTContent\",Vl)}function Ku(){switch($l){case 82:Hl(82),Il(121);switch($l){case 242:Hl(242);break;default:Hl(127)}break;default:Hl(128),Il(45),Hl(101)}}function Qu(){ic.startNonterminal(\"FTMatchOptions\",Vl);for(;;){Pl(265),Il(204),jl(),Yu(),Il(213);if($l!=265)break}ic.endNonterminal(\"FTMatchOptions\",Vl)}function Gu(){for(;;){Hl(265),Il(204),Zu(),Il(213);if($l!=265)break}}function Yu(){ic.startNonterminal(\"FTMatchOption\",Vl);switch($l){case 191:ql(176);break;default:Wl=$l}switch(Wl){case 172:ya();break;case 274:case 140479:wa();break;case 251:case 128703:oa();break;case 243:case 124607:ia();break;case 115:na();break;case 244:case 125119:ha();break;case 203:Sa();break;default:ea()}ic.endNonterminal(\"FTMatchOption\",Vl)}function Zu(){switch($l){case 191:ql(176);break;default:Wl=$l}switch(Wl){case 172:ba();break;case 274:case 140479:Ea();break;case 251:case 128703:ua();break;case 243:case 124607:sa();break;case 115:ra();break;case 244:case 125119:pa();break;case 203:xa();break;default:ta()}}function ea(){ic.startNonterminal(\"FTCaseOption\",Vl);switch($l){case 89:Pl(89),Il(128);switch($l){case 160:Pl(160);break;default:Pl(235)}break;case 180:Pl(180);break;default:Pl(264)}ic.endNonterminal(\"FTCaseOption\",Vl)}function ta(){switch($l){case 89:Hl(89),Il(128);switch($l){case 160:Hl(160);break;default:Hl(235)}break;case 180:Hl(180);break;default:Hl(264)}}function na(){ic.startNonterminal(\"FTDiacriticsOption\",Vl),Pl(115),Il(128);switch($l){case 160:Pl(160);break;default:Pl(235)}ic.endNonterminal(\"FTDiacriticsOption\",Vl)}function ra(){Hl(115),Il(128);switch($l){case 160:Hl(160);break;default:Hl(235)}}function ia(){ic.startNonterminal(\"FTStemOption\",Vl);switch($l){case 243:Pl(243);break;default:Pl(191),Il(77),Pl(243)}ic.endNonterminal(\"FTStemOption\",Vl)}function sa(){switch($l){case 243:Hl(243);break;default:Hl(191),Il(77),Hl(243)}}function oa(){ic.startNonterminal(\"FTThesaurusOption\",Vl);switch($l){case 251:Pl(251),Il(152);switch($l){case 82:jl(),aa();break;case 110:Pl(110);break;default:Pl(35),Il(116);switch($l){case 82:jl(),aa();break;default:Pl(110)}for(;;){Il(105);if($l!=42)break;Pl(42),Il(34),jl(),aa()}Pl(38)}break;default:Pl(191),Il(81),Pl(251)}ic.endNonterminal(\"FTThesaurusOption\",Vl)}function ua(){switch($l){case 251:Hl(251),Il(152);switch($l){case 82:fa();break;case 110:Hl(110);break;default:Hl(35),Il(116);switch($l){case 82:fa();break;default:Hl(110)}for(;;){Il(105);if($l!=42)break;Hl(42),Il(34),fa()}Hl(38)}break;default:Hl(191),Il(81),Hl(251)}}function aa(){ic.startNonterminal(\"FTThesaurusID\",Vl),Pl(82),Il(15),Pl(7),Il(219),$l==221&&(Pl(221),Il(17),Pl(11)),Il(215);switch($l){case 82:ql(183);break;default:Wl=$l}if(Wl==131||Wl==142||Wl==90194||Wl==95314)jl(),la(),Il(61),Pl(178);ic.endNonterminal(\"FTThesaurusID\",Vl)}function fa(){Hl(82),Il(15),Hl(7),Il(219),$l==221&&(Hl(221),Il(17),Hl(11)),Il(215);switch($l){case 82:ql(183);break;default:Wl=$l}if(Wl==131||Wl==142||Wl==90194||Wl==95314)ca(),Il(61),Hl(178)}function la(){ic.startNonterminal(\"FTLiteralRange\",Vl);switch($l){case 131:Pl(131),Il(16),Pl(8);break;case 82:Pl(82),Il(129);switch($l){case 176:Pl(176),Il(16),Pl(8);break;default:Pl(186),Il(16),Pl(8)}break;default:Pl(142),Il(16),Pl(8),Il(82),Pl(253),Il(16),Pl(8)}ic.endNonterminal(\"FTLiteralRange\",Vl)}function ca(){switch($l){case 131:Hl(131),Il(16),Hl(8);break;case 82:Hl(82),Il(129);switch($l){case 176:Hl(176),Il(16),Hl(8);break;default:Hl(186),Il(16),Hl(8)}break;default:Hl(142),Il(16),Hl(8),Il(82),Hl(253),Il(16),Hl(8)}}function ha(){ic.startNonterminal(\"FTStopWordOption\",Vl);switch($l){case 244:Pl(244),Il(89),Pl(279),Il(152);switch($l){case 110:Pl(110);for(;;){Il(216);if($l!=132&&$l!=260)break;jl(),ma()}break;default:jl(),da();for(;;){Il(216);if($l!=132&&$l!=260)break;jl(),ma()}}break;default:Pl(191),Il(78),Pl(244),Il(89),Pl(279)}ic.endNonterminal(\"FTStopWordOption\",Vl)}function pa(){switch($l){case 244:Hl(244),Il(89),Hl(279),Il(152);switch($l){case 110:Hl(110);for(;;){Il(216);if($l!=132&&$l!=260)break;ga()}break;default:va();for(;;){Il(216);if($l!=132&&$l!=260)break;ga()}}break;default:Hl(191),Il(78),Hl(244),Il(89),Hl(279)}}function da(){ic.startNonterminal(\"FTStopWords\",Vl);switch($l){case 82:Pl(82),Il(15),Pl(7);break;default:Pl(35),Il(17),Pl(11);for(;;){Il(105);if($l!=42)break;Pl(42),Il(17),Pl(11)}Pl(38)}ic.endNonterminal(\"FTStopWords\",Vl)}function va(){switch($l){case 82:Hl(82),Il(15),Hl(7);break;default:Hl(35),Il(17),Hl(11);for(;;){Il(105);if($l!=42)break;Hl(42),Il(17),Hl(11)}Hl(38)}}function ma(){ic.startNonterminal(\"FTStopWordsInclExcl\",Vl);switch($l){case 260:Pl(260);break;default:Pl(132)}Il(103),jl(),da(),ic.endNonterminal(\"FTStopWordsInclExcl\",Vl)}function ga(){switch($l){case 260:Hl(260);break;default:Hl(132)}Il(103),va()}function ya(){ic.startNonterminal(\"FTLanguageOption\",Vl),Pl(172),Il(17),Pl(11),ic.endNonterminal(\"FTLanguageOption\",Vl)}function ba(){Hl(172),Il(17),Hl(11)}function wa(){ic.startNonterminal(\"FTWildCardOption\",Vl);switch($l){case 274:Pl(274);break;default:Pl(191),Il(87),Pl(274)}ic.endNonterminal(\"FTWildCardOption\",Vl)}function Ea(){switch($l){case 274:Hl(274);break;default:Hl(191),Il(87),Hl(274)}}function Sa(){ic.startNonterminal(\"FTExtensionOption\",Vl),Pl(203),Il(245),jl(),$a(),Il(17),Pl(11),ic.endNonterminal(\"FTExtensionOption\",Vl)}function xa(){Hl(203),Il(245),Ja(),Il(17),Hl(11)}function Ta(){ic.startNonterminal(\"FTIgnoreOption\",Vl),Pl(277),Il(45),Pl(101),Il(265),jl(),Yn(),ic.endNonterminal(\"FTIgnoreOption\",Vl)}function Na(){Hl(277),Il(45),Hl(101),Il(265),Zn()}function Ca(){ic.startNonterminal(\"CollectionDecl\",Vl),Pl(96),Il(245),jl(),$a(),Il(111),$l==80&&(jl(),ka()),ic.endNonterminal(\"CollectionDecl\",Vl)}function ka(){ic.startNonterminal(\"CollectionTypeDecl\",Vl),Pl(80),Il(253),jl(),_s(),Il(171),$l!=54&&(jl(),Os()),ic.endNonterminal(\"CollectionTypeDecl\",Vl)}function La(){ic.startNonterminal(\"IndexName\",Vl),$a(),ic.endNonterminal(\"IndexName\",Vl)}function Aa(){ic.startNonterminal(\"IndexDomainExpr\",Vl),Or(),ic.endNonterminal(\"IndexDomainExpr\",Vl)}function Oa(){ic.startNonterminal(\"IndexKeySpec\",Vl),Ma(),$l==80&&(jl(),_a()),Il(156),$l==95&&(jl(),Pa()),ic.endNonterminal(\"IndexKeySpec\",Vl)}function Ma(){ic.startNonterminal(\"IndexKeyExpr\",Vl),Or(),ic.endNonterminal(\"IndexKeyExpr\",Vl)}function _a(){ic.startNonterminal(\"IndexKeyTypeDecl\",Vl),Pl(80),Il(245),jl(),Da(),Il(189);if($l==40||$l==41||$l==65)jl(),Os();ic.endNonterminal(\"IndexKeyTypeDecl\",Vl)}function Da(){ic.startNonterminal(\"AtomicType\",Vl),$a(),ic.endNonterminal(\"AtomicType\",Vl)}function Pa(){ic.startNonterminal(\"IndexKeyCollation\",Vl),Pl(95),Il(15),Pl(7),ic.endNonterminal(\"IndexKeyCollation\",Vl)}function Ha(){ic.startNonterminal(\"IndexDecl\",Vl),Pl(157),Il(245),jl(),La(),Il(68),Pl(201),Il(66),Pl(195),Il(262),jl(),Aa(),Pl(88),Il(262),jl(),Oa();for(;;){Il(107);if($l!=42)break;Pl(42),Il(262),jl(),Oa()}ic.endNonterminal(\"IndexDecl\",Vl)}function Ba(){ic.startNonterminal(\"ICDecl\",Vl),Pl(163),Il(43),Pl(98),Il(245),jl(),$a(),Il(124);switch($l){case 201:jl(),ja();break;default:jl(),Ra()}ic.endNonterminal(\"ICDecl\",Vl)}function ja(){ic.startNonterminal(\"ICCollection\",Vl),Pl(201),Il(42),Pl(96),Il(245),jl(),$a(),Il(150);switch($l){case 31:jl(),Fa();break;case 194:jl(),Ia();break;default:jl(),qa()}ic.endNonterminal(\"ICCollection\",Vl)}function Fa(){ic.startNonterminal(\"ICCollSequence\",Vl),Si(),Il(40),Pl(93),Il(266),jl(),Wf(),ic.endNonterminal(\"ICCollSequence\",Vl)}function Ia(){ic.startNonterminal(\"ICCollSequenceUnique\",Vl),Pl(194),Il(21),jl(),Si(),Il(40),Pl(93),Il(83),Pl(261),Il(60),Pl(171),Il(262),jl(),Or(),ic.endNonterminal(\"ICCollSequenceUnique\",Vl)}function qa(){ic.startNonterminal(\"ICCollNode\",Vl),Pl(140),Il(65),Pl(194),Il(21),jl(),Si(),Il(40),Pl(93),Il(266),jl(),Wf(),ic.endNonterminal(\"ICCollNode\",Vl)}function Ra(){ic.startNonterminal(\"ICForeignKey\",Vl),Pl(141),Il(60),Pl(171),Il(54),jl(),Ua(),jl(),za(),ic.endNonterminal(\"ICForeignKey\",Vl)}function Ua(){ic.startNonterminal(\"ICForeignKeySource\",Vl),Pl(142),Il(42),jl(),Wa(),ic.endNonterminal(\"ICForeignKeySource\",Vl)}function za(){ic.startNonterminal(\"ICForeignKeyTarget\",Vl),Pl(253),Il(42),jl(),Wa(),ic.endNonterminal(\"ICForeignKeyTarget\",Vl)}function Wa(){ic.startNonterminal(\"ICForeignKeyValues\",Vl),Pl(96),Il(245),jl(),$a(),Il(65),Pl(194),Il(21),jl(),Si(),Il(60),Pl(171),Il(262),jl(),Or(),ic.endNonterminal(\"ICForeignKeyValues\",Vl)}function Xa(){Hl(37);for(;;){Rl(92);if($l==51)break;switch($l){case 24:Hl(24);break;default:Xa()}}Hl(51)}function Va(){switch($l){case 22:Hl(22);break;default:Xa()}}function $a(){ic.startNonterminal(\"EQName\",Vl),Rl(240);switch($l){case 83:Pl(83);break;case 97:Pl(97);break;case 121:Pl(121);break;case 122:Pl(122);break;case 125:Pl(125);break;case 147:Pl(147);break;case 154:Pl(154);break;case 167:Pl(167);break;case 188:Pl(188);break;case 194:Pl(194);break;case 220:Pl(220);break;case 230:Pl(230);break;case 231:Pl(231);break;case 248:Pl(248);break;case 249:Pl(249);break;case 259:Pl(259);break;case 79:Pl(79);break;case 169:Pl(169);break;case 247:Pl(247);break;default:Ka()}ic.endNonterminal(\"EQName\",Vl)}function Ja(){Rl(240);switch($l){case 83:Hl(83);break;case 97:Hl(97);break;case 121:Hl(121);break;case 122:Hl(122);break;case 125:Hl(125);break;case 147:Hl(147);break;case 154:Hl(154);break;case 167:Hl(167);break;case 188:Hl(188);break;case 194:Hl(194);break;case 220:Hl(220);break;case 230:Hl(230);break;case 231:Hl(231);break;case 248:Hl(248);break;case 249:Hl(249);break;case 259:Hl(259);break;case 79:Hl(79);break;case 169:Hl(169);break;case 247:Hl(247);break;default:Qa()}}function Ka(){ic.startNonterminal(\"FunctionName\",Vl);switch($l){case 6:Pl(6);break;case 71:Pl(71);break;case 74:Pl(74);break;case 75:Pl(75);break;case 76:Pl(76);break;case 80:Pl(80);break;case 81:Pl(81);break;case 85:Pl(85);break;case 89:Pl(89);break;case 90:Pl(90);break;case 91:Pl(91);break;case 94:Pl(94);break;case 95:Pl(95);break;case 104:Pl(104);break;case 106:Pl(106);break;case 109:Pl(109);break;case 110:Pl(110);break;case 111:Pl(111);break;case 112:Pl(112);break;case 113:Pl(113);break;case 114:Pl(114);break;case 119:Pl(119);break;case 120:Pl(120);break;case 123:Pl(123);break;case 124:Pl(124);break;case 127:Pl(127);break;case 129:Pl(129);break;case 130:Pl(130);break;case 132:Pl(132);break;case 136:Pl(136);break;case 137:Pl(137);break;case 138:Pl(138);break;case 139:Pl(139);break;case 148:Pl(148);break;case 150:Pl(150);break;case 152:Pl(152);break;case 153:Pl(153);break;case 155:Pl(155);break;case 161:Pl(161);break;case 162:Pl(162);break;case 164:Pl(164);break;case 165:Pl(165);break;case 166:Pl(166);break;case 173:Pl(173);break;case 175:Pl(175);break;case 177:Pl(177);break;case 181:Pl(181);break;case 183:Pl(183);break;case 184:Pl(184);break;case 185:Pl(185);break;case 187:Pl(187);break;case 189:Pl(189);break;case 202:Pl(202);break;case 204:Pl(204);break;case 205:Pl(205);break;case 206:Pl(206);break;case 210:Pl(210);break;case 216:Pl(216);break;case 217:Pl(217);break;case 222:Pl(222);break;case 223:Pl(223);break;case 224:Pl(224);break;case 228:Pl(228);break;case 234:Pl(234);break;case 240:Pl(240);break;case 241:Pl(241);break;case 242:Pl(242);break;case 253:Pl(253);break;case 254:Pl(254);break;case 256:Pl(256);break;case 260:Pl(260);break;case 262:Pl(262);break;case 266:Pl(266);break;case 272:Pl(272);break;case 276:Pl(276);break;case 170:Pl(170);break;case 73:Pl(73);break;case 82:Pl(82);break;case 84:Pl(84);break;case 86:Pl(86);break;case 87:Pl(87);break;case 92:Pl(92);break;case 99:Pl(99);break;case 102:Pl(102);break;case 103:Pl(103);break;case 105:Pl(105);break;case 107:Pl(107);break;case 126:Pl(126);break;case 133:Pl(133);break;case 134:Pl(134);break;case 143:Pl(143);break;case 156:Pl(156);break;case 157:Pl(157);break;case 163:Pl(163);break;case 174:Pl(174);break;case 195:Pl(195);break;case 203:Pl(203);break;case 207:Pl(207);break;case 226:Pl(226);break;case 229:Pl(229);break;case 232:Pl(232);break;case 239:Pl(239);break;case 245:Pl(245);break;case 257:Pl(257);break;case 258:Pl(258);break;case 263:Pl(263);break;case 267:Pl(267);break;case 268:Pl(268);break;case 269:Pl(269);break;case 273:Pl(273);break;case 98:Pl(98);break;case 179:Pl(179);break;case 225:Pl(225);break;case 78:Pl(78);break;case 135:Pl(135);break;case 142:Pl(142);break;case 197:Pl(197);break;case 168:Pl(168);break;case 198:Pl(198);break;case 233:Pl(233);break;default:Pl(255)}ic.endNonterminal(\"FunctionName\",Vl)}function Qa(){switch($l){case 6:Hl(6);break;case 71:Hl(71);break;case 74:Hl(74);break;case 75:Hl(75);break;case 76:Hl(76);break;case 80:Hl(80);break;case 81:Hl(81);break;case 85:Hl(85);break;case 89:Hl(89);break;case 90:Hl(90);break;case 91:Hl(91);break;case 94:Hl(94);break;case 95:Hl(95);break;case 104:Hl(104);break;case 106:Hl(106);break;case 109:Hl(109);break;case 110:Hl(110);break;case 111:Hl(111);break;case 112:Hl(112);break;case 113:Hl(113);break;case 114:Hl(114);break;case 119:Hl(119);break;case 120:Hl(120);break;case 123:Hl(123);break;case 124:Hl(124);break;case 127:Hl(127);break;case 129:Hl(129);break;case 130:Hl(130);break;case 132:Hl(132);break;case 136:Hl(136);break;case 137:Hl(137);break;case 138:Hl(138);break;case 139:Hl(139);break;case 148:Hl(148);break;case 150:Hl(150);break;case 152:Hl(152);break;case 153:Hl(153);break;case 155:Hl(155);break;case 161:Hl(161);break;case 162:Hl(162);break;case 164:Hl(164);break;case 165:Hl(165);break;case 166:Hl(166);break;case 173:Hl(173);break;case 175:Hl(175);break;case 177:Hl(177);break;case 181:Hl(181);break;case 183:Hl(183);break;case 184:Hl(184);break;case 185:Hl(185);break;case 187:Hl(187);break;case 189:Hl(189);break;case 202:Hl(202);break;case 204:Hl(204);break;case 205:Hl(205);break;case 206:Hl(206);break;case 210:Hl(210);break;case 216:Hl(216);break;case 217:Hl(217);break;case 222:Hl(222);break;case 223:Hl(223);break;case 224:Hl(224);break;case 228:Hl(228);break;case 234:Hl(234);break;case 240:Hl(240);break;case 241:Hl(241);break;case 242:Hl(242);break;case 253:Hl(253);break;case 254:Hl(254);break;case 256:Hl(256);break;case 260:Hl(260);break;case 262:Hl(262);break;case 266:Hl(266);break;case 272:Hl(272);break;case 276:Hl(276);break;case 170:Hl(170);break;case 73:Hl(73);break;case 82:Hl(82);break;case 84:Hl(84);break;case 86:Hl(86);break;case 87:Hl(87);break;case 92:Hl(92);break;case 99:Hl(99);break;case 102:Hl(102);break;case 103:Hl(103);break;case 105:Hl(105);break;case 107:Hl(107);break;case 126:Hl(126);break;case 133:Hl(133);break;case 134:Hl(134);break;case 143:Hl(143);break;case 156:Hl(156);break;case 157:Hl(157);break;case 163:Hl(163);break;case 174:Hl(174);break;case 195:Hl(195);break;case 203:Hl(203);break;case 207:Hl(207);break;case 226:Hl(226);break;case 229:Hl(229);break;case 232:Hl(232);break;case 239:Hl(239);break;case 245:Hl(245);break;case 257:Hl(257);break;case 258:Hl(258);break;case 263:Hl(263);break;case 267:Hl(267);break;case 268:Hl(268);break;case 269:Hl(269);break;case 273:Hl(273);break;case 98:Hl(98);break;case 179:Hl(179);break;case 225:Hl(225);break;case 78:Hl(78);break;case 135:Hl(135);break;case 142:Hl(142);break;case 197:Hl(197);break;case 168:Hl(168);break;case 198:Hl(198);break;case 233:Hl(233);break;default:Hl(255)}}function Ga(){ic.startNonterminal(\"NCName\",Vl);switch($l){case 19:Pl(19);break;case 71:Pl(71);break;case 76:Pl(76);break;case 80:Pl(80);break;case 81:Pl(81);break;case 85:Pl(85);break;case 89:Pl(89);break;case 90:Pl(90);break;case 91:Pl(91);break;case 95:Pl(95);break;case 106:Pl(106);break;case 110:Pl(110);break;case 114:Pl(114);break;case 119:Pl(119);break;case 123:Pl(123);break;case 124:Pl(124);break;case 127:Pl(127);break;case 129:Pl(129);break;case 132:Pl(132);break;case 139:Pl(139);break;case 148:Pl(148);break;case 150:Pl(150);break;case 152:Pl(152);break;case 153:Pl(153);break;case 162:Pl(162);break;case 164:Pl(164);break;case 165:Pl(165);break;case 166:Pl(166);break;case 175:Pl(175);break;case 177:Pl(177);break;case 181:Pl(181);break;case 183:Pl(183);break;case 184:Pl(184);break;case 189:Pl(189);break;case 202:Pl(202);break;case 204:Pl(204);break;case 205:Pl(205);break;case 224:Pl(224);break;case 228:Pl(228);break;case 241:Pl(241);break;case 242:Pl(242);break;case 253:Pl(253);break;case 254:Pl(254);break;case 260:Pl(260);break;case 272:Pl(272);break;case 276:Pl(276);break;case 74:Pl(74);break;case 75:Pl(75);break;case 83:Pl(83);break;case 94:Pl(94);break;case 97:Pl(97);break;case 104:Pl(104);break;case 109:Pl(109);break;case 111:Pl(111);break;case 112:Pl(112);break;case 113:Pl(113);break;case 120:Pl(120);break;case 121:Pl(121);break;case 122:Pl(122);break;case 125:Pl(125);break;case 130:Pl(130);break;case 136:Pl(136);break;case 137:Pl(137);break;case 138:Pl(138);break;case 147:Pl(147);break;case 154:Pl(154);break;case 155:Pl(155);break;case 161:Pl(161);break;case 167:Pl(167);break;case 173:Pl(173);break;case 185:Pl(185);break;case 187:Pl(187);break;case 188:Pl(188);break;case 194:Pl(194);break;case 206:Pl(206);break;case 210:Pl(210);break;case 216:Pl(216);break;case 217:Pl(217);break;case 220:Pl(220);break;case 222:Pl(222);break;case 223:Pl(223);break;case 230:Pl(230);break;case 231:Pl(231);break;case 234:Pl(234);break;case 240:Pl(240);break;case 248:Pl(248);break;case 249:Pl(249);break;case 256:Pl(256);break;case 259:Pl(259);break;case 262:Pl(262);break;case 266:Pl(266);break;case 268:Pl(268);break;case 170:Pl(170);break;case 73:Pl(73);break;case 82:Pl(82);break;case 84:Pl(84);break;case 86:Pl(86);break;case 87:Pl(87);break;case 92:Pl(92);break;case 99:Pl(99);break;case 102:Pl(102);break;case 103:Pl(103);break;case 105:Pl(105);break;case 107:Pl(107);break;case 126:Pl(126);break;case 133:Pl(133);break;case 134:Pl(134);break;case 143:Pl(143);break;case 156:Pl(156);break;case 157:Pl(157);break;case 163:Pl(163);break;case 174:Pl(174);break;case 195:Pl(195);break;case 203:Pl(203);break;case 207:Pl(207);break;case 226:Pl(226);break;case 229:Pl(229);break;case 232:Pl(232);break;case 239:Pl(239);break;case 245:Pl(245);break;case 257:Pl(257);break;case 258:Pl(258);break;case 263:Pl(263);break;case 267:Pl(267);break;case 269:Pl(269);break;case 273:Pl(273);break;case 98:Pl(98);break;case 179:Pl(179);break;case 225:Pl(225);break;case 78:Pl(78);break;case 135:Pl(135);break;case 142:Pl(142);break;case 197:Pl(197);break;case 168:Pl(168);break;case 198:Pl(198);break;case 233:Pl(233);break;default:Pl(255)}ic.endNonterminal(\"NCName\",Vl)}function Ya(){switch($l){case 19:Hl(19);break;case 71:Hl(71);break;case 76:Hl(76);break;case 80:Hl(80);break;case 81:Hl(81);break;case 85:Hl(85);break;case 89:Hl(89);break;case 90:Hl(90);break;case 91:Hl(91);break;case 95:Hl(95);break;case 106:Hl(106);break;case 110:Hl(110);break;case 114:Hl(114);break;case 119:Hl(119);break;case 123:Hl(123);break;case 124:Hl(124);break;case 127:Hl(127);break;case 129:Hl(129);break;case 132:Hl(132);break;case 139:Hl(139);break;case 148:Hl(148);break;case 150:Hl(150);break;case 152:Hl(152);break;case 153:Hl(153);break;case 162:Hl(162);break;case 164:Hl(164);break;case 165:Hl(165);break;case 166:Hl(166);break;case 175:Hl(175);break;case 177:Hl(177);break;case 181:Hl(181);break;case 183:Hl(183);break;case 184:Hl(184);break;case 189:Hl(189);break;case 202:Hl(202);break;case 204:Hl(204);break;case 205:Hl(205);break;case 224:Hl(224);break;case 228:Hl(228);break;case 241:Hl(241);break;case 242:Hl(242);break;case 253:Hl(253);break;case 254:Hl(254);break;case 260:Hl(260);break;case 272:Hl(272);break;case 276:Hl(276);break;case 74:Hl(74);break;case 75:Hl(75);break;case 83:Hl(83);break;case 94:Hl(94);break;case 97:Hl(97);break;case 104:Hl(104);break;case 109:Hl(109);break;case 111:Hl(111);break;case 112:Hl(112);break;case 113:Hl(113);break;case 120:Hl(120);break;case 121:Hl(121);break;case 122:Hl(122);break;case 125:Hl(125);break;case 130:Hl(130);break;case 136:Hl(136);break;case 137:Hl(137);break;case 138:Hl(138);break;case 147:Hl(147);break;case 154:Hl(154);break;case 155:Hl(155);break;case 161:Hl(161);break;case 167:Hl(167);break;case 173:Hl(173);break;case 185:Hl(185);break;case 187:Hl(187);break;case 188:Hl(188);break;case 194:Hl(194);break;case 206:Hl(206);break;case 210:Hl(210);break;case 216:Hl(216);break;case 217:Hl(217);break;case 220:Hl(220);break;case 222:Hl(222);break;case 223:Hl(223);break;case 230:Hl(230);break;case 231:Hl(231);break;case 234:Hl(234);break;case 240:Hl(240);break;case 248:Hl(248);break;case 249:Hl(249);break;case 256:Hl(256);break;case 259:Hl(259);break;case 262:Hl(262);break;case 266:Hl(266);break;case 268:Hl(268);break;case 170:Hl(170);break;case 73:Hl(73);break;case 82:Hl(82);break;case 84:Hl(84);break;case 86:Hl(86);break;case 87:Hl(87);break;case 92:Hl(92);break;case 99:Hl(99);break;case 102:Hl(102);break;case 103:Hl(103);break;case 105:Hl(105);break;case 107:Hl(107);break;case 126:Hl(126);break;case 133:Hl(133);break;case 134:Hl(134);break;case 143:Hl(143);break;case 156:Hl(156);break;case 157:Hl(157);break;case 163:Hl(163);break;case 174:Hl(174);break;case 195:Hl(195);break;case 203:Hl(203);break;case 207:Hl(207);break;case 226:Hl(226);break;case 229:Hl(229);break;case 232:Hl(232);break;case 239:Hl(239);break;case 245:Hl(245);break;case 257:Hl(257);break;case 258:Hl(258);break;case 263:Hl(263);break;case 267:Hl(267);break;case 269:Hl(269);break;case 273:Hl(273);break;case 98:Hl(98);break;case 179:Hl(179);break;case 225:Hl(225);break;case 78:Hl(78);break;case 135:Hl(135);break;case 142:Hl(142);break;case 197:Hl(197);break;case 168:Hl(168);break;case 198:Hl(198);break;case 233:Hl(233);break;default:Hl(255)}}function Za(){ic.startNonterminal(\"MainModule\",Vl),l(),jl(),ef(),ic.endNonterminal(\"MainModule\",Vl)}function ef(){ic.startNonterminal(\"Program\",Vl),of(),ic.endNonterminal(\"Program\",Vl)}function tf(){ic.startNonterminal(\"Statements\",Vl);for(;;){Il(283);switch($l){case 35:ql(269);break;case 36:Ul(242);break;case 47:ql(285);break;case 48:ql(259);break;case 55:Ul(4);break;case 56:Ul(1);break;case 60:Ul(3);break;case 69:ql(272);break;case 78:ql(268);break;case 133:ql(147);break;case 139:ql(179);break;case 161:ql(275);break;case 177:ql(166);break;case 187:ql(246);break;case 220:ql(244);break;case 223:ql(170);break;case 266:ql(188);break;case 281:ql(282);break;case 283:ql(273);break;case 31:case 33:ql(245);break;case 83:case 122:ql(252);break;case 87:case 103:ql(145);break;case 97:case 249:ql(97);break;case 111:case 222:ql(260);break;case 41:case 43:case 196:ql(265);break;case 135:case 197:case 255:ql(210);break;case 104:case 130:case 240:case 268:ql(143);break;case 120:case 206:case 256:case 262:ql(148);break;case 8:case 9:case 10:case 11:case 32:ql(209);break;case 79:case 121:case 125:case 167:case 169:case 188:case 194:case 230:case 231:case 247:ql(20);break;case 6:case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl!=25&&Wl!=54&&Wl!=287&&Wl!=12808&&Wl!=12809&&Wl!=12810&&Wl!=12811&&Wl!=12832&&Wl!=12847&&Wl!=12935&&Wl!=12997&&Wl!=13055&&Wl!=16140&&Wl!=21512&&Wl!=21513&&Wl!=21514&&Wl!=21515&&Wl!=21536&&Wl!=21551&&Wl!=21639&&Wl!=21701&&Wl!=21759&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=146952&&Wl!=146953&&Wl!=146954&&Wl!=146955&&Wl!=146976&&Wl!=146991&&Wl!=147079&&Wl!=147141&&Wl!=147199){Wl=uc(8,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ff(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(8,Vl,Wl)}}if(Wl!=-1&&Wl!=54&&Wl!=16140&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333)break;jl(),af()}ic.endNonterminal(\"Statements\",Vl)}function nf(){for(;;){Il(283);switch($l){case 35:ql(269);break;case 36:Ul(242);break;case 47:ql(285);break;case 48:ql(259);break;case 55:Ul(4);break;case 56:Ul(1);break;case 60:Ul(3);break;case 69:ql(272);break;case 78:ql(268);break;case 133:ql(147);break;case 139:ql(179);break;case 161:ql(275);break;case 177:ql(166);break;case 187:ql(246);break;case 220:ql(244);break;case 223:ql(170);break;case 266:ql(188);break;case 281:ql(282);break;case 283:ql(273);break;case 31:case 33:ql(245);break;case 83:case 122:ql(252);break;case 87:case 103:ql(145);break;case 97:case 249:ql(97);break;case 111:case 222:ql(260);break;case 41:case 43:case 196:ql(265);break;case 135:case 197:case 255:ql(210);break;case 104:case 130:case 240:case 268:ql(143);break;case 120:case 206:case 256:case 262:ql(148);break;case 8:case 9:case 10:case 11:case 32:ql(209);break;case 79:case 121:case 125:case 167:case 169:case 188:case 194:case 230:case 231:case 247:ql(20);break;case 6:case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl!=25&&Wl!=54&&Wl!=287&&Wl!=12808&&Wl!=12809&&Wl!=12810&&Wl!=12811&&Wl!=12832&&Wl!=12847&&Wl!=12935&&Wl!=12997&&Wl!=13055&&Wl!=16140&&Wl!=21512&&Wl!=21513&&Wl!=21514&&Wl!=21515&&Wl!=21536&&Wl!=21551&&Wl!=21639&&Wl!=21701&&Wl!=21759&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=146952&&Wl!=146953&&Wl!=146954&&Wl!=146955&&Wl!=146976&&Wl!=146991&&Wl!=147079&&Wl!=147141&&Wl!=147199){Wl=uc(8,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ff(),oc(8,t,-1);continue}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(8,t,-2);break}}}if(Wl!=-1&&Wl!=54&&Wl!=16140&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333)break;ff()}}function rf(){ic.startNonterminal(\"StatementsAndExpr\",Vl),tf(),jl(),G(),ic.endNonterminal(\"StatementsAndExpr\",Vl)}function sf(){nf(),Y()}function of(){ic.startNonterminal(\"StatementsAndOptionalExpr\",Vl),tf(),$l!=25&&$l!=287&&(jl(),G()),ic.endNonterminal(\"StatementsAndOptionalExpr\",Vl)}function uf(){nf(),$l!=25&&$l!=287&&Y()}function af(){ic.startNonterminal(\"Statement\",Vl);switch($l){case 133:ql(147);break;case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 268:ql(143);break;case 281:ql(282);break;case 31:case 33:ql(245);break;case 87:case 103:ql(145);break;case 154:case 248:case 259:case 273:ql(95);break;default:Wl=$l}if(Wl!=6&&Wl!=8&&Wl!=9&&Wl!=10&&Wl!=11&&Wl!=32&&Wl!=35&&Wl!=36&&Wl!=41&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=54&&Wl!=55&&Wl!=56&&Wl!=60&&Wl!=69&&Wl!=71&&Wl!=73&&Wl!=74&&Wl!=75&&Wl!=76&&Wl!=78&&Wl!=79&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=83&&Wl!=84&&Wl!=85&&Wl!=86&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=92&&Wl!=94&&Wl!=95&&Wl!=97&&Wl!=98&&Wl!=99&&Wl!=102&&Wl!=104&&Wl!=105&&Wl!=106&&Wl!=107&&Wl!=109&&Wl!=110&&Wl!=111&&Wl!=112&&Wl!=113&&Wl!=114&&Wl!=119&&Wl!=120&&Wl!=121&&Wl!=122&&Wl!=123&&Wl!=124&&Wl!=125&&Wl!=126&&Wl!=127&&Wl!=129&&Wl!=130&&Wl!=132&&Wl!=134&&Wl!=135&&Wl!=136&&Wl!=137&&Wl!=138&&Wl!=142&&Wl!=143&&Wl!=147&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=155&&Wl!=156&&Wl!=157&&Wl!=161&&Wl!=162&&Wl!=163&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=167&&Wl!=168&&Wl!=169&&Wl!=170&&Wl!=173&&Wl!=174&&Wl!=175&&Wl!=179&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=185&&Wl!=187&&Wl!=188&&Wl!=189&&Wl!=194&&Wl!=195&&Wl!=196&&Wl!=197&&Wl!=198&&Wl!=202&&Wl!=203&&Wl!=204&&Wl!=205&&Wl!=206&&Wl!=207&&Wl!=210&&Wl!=216&&Wl!=217&&Wl!=220&&Wl!=222&&Wl!=223&&Wl!=224&&Wl!=225&&Wl!=226&&Wl!=228&&Wl!=229&&Wl!=230&&Wl!=231&&Wl!=232&&Wl!=233&&Wl!=234&&Wl!=239&&Wl!=240&&Wl!=241&&Wl!=242&&Wl!=245&&Wl!=247&&Wl!=249&&Wl!=253&&Wl!=254&&Wl!=255&&Wl!=257&&Wl!=258&&Wl!=260&&Wl!=262&&Wl!=263&&Wl!=266&&Wl!=267&&Wl!=269&&Wl!=272&&Wl!=276&&Wl!=283&&Wl!=10009&&Wl!=14935&&Wl!=14951&&Wl!=14981&&Wl!=14987&&Wl!=15002&&Wl!=15025&&Wl!=15096&&Wl!=15104&&Wl!=15107&&Wl!=15116&&Wl!=15121&&Wl!=16011&&Wl!=16049&&Wl!=16140&&Wl!=18007&&Wl!=18023&&Wl!=18053&&Wl!=18059&&Wl!=18074&&Wl!=18097&&Wl!=18168&&Wl!=18176&&Wl!=18179&&Wl!=18188&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=118961&&Wl!=122507&&Wl!=131723&&Wl!=144128&&Wl!=147225){Wl=uc(9,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{cf(),Wl=-1}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),pf(),Wl=-2}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),vf(),Wl=-3}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),If(),Wl=-12}catch(c){Wl=-13}}}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(9,Vl,Wl)}}switch(Wl){case-2:hf();break;case-3:df();break;case 91735:mf();break;case 91751:yf();break;case 115333:wf();break;case 16011:case 16049:case 118961:case 122507:case 131723:Sf();break;case 18074:Cf();break;case 18168:Lf();break;case 144128:_f();break;case 18179:Pf();break;case-12:case 16140:Ff();break;case-13:qf();break;case 54:Uf();break;default:lf()}ic.endNonterminal(\"Statement\",Vl)}function ff(){switch($l){case 133:ql(147);break;case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 268:ql(143);break;case 281:ql(282);break;case 31:case 33:ql(245);break;case 87:case 103:ql(145);break;case 154:case 248:case 259:case 273:ql(95);break;default:Wl=$l}if(Wl!=6&&Wl!=8&&Wl!=9&&Wl!=10&&Wl!=11&&Wl!=32&&Wl!=35&&Wl!=36&&Wl!=41&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=54&&Wl!=55&&Wl!=56&&Wl!=60&&Wl!=69&&Wl!=71&&Wl!=73&&Wl!=74&&Wl!=75&&Wl!=76&&Wl!=78&&Wl!=79&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=83&&Wl!=84&&Wl!=85&&Wl!=86&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=92&&Wl!=94&&Wl!=95&&Wl!=97&&Wl!=98&&Wl!=99&&Wl!=102&&Wl!=104&&Wl!=105&&Wl!=106&&Wl!=107&&Wl!=109&&Wl!=110&&Wl!=111&&Wl!=112&&Wl!=113&&Wl!=114&&Wl!=119&&Wl!=120&&Wl!=121&&Wl!=122&&Wl!=123&&Wl!=124&&Wl!=125&&Wl!=126&&Wl!=127&&Wl!=129&&Wl!=130&&Wl!=132&&Wl!=134&&Wl!=135&&Wl!=136&&Wl!=137&&Wl!=138&&Wl!=142&&Wl!=143&&Wl!=147&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=155&&Wl!=156&&Wl!=157&&Wl!=161&&Wl!=162&&Wl!=163&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=167&&Wl!=168&&Wl!=169&&Wl!=170&&Wl!=173&&Wl!=174&&Wl!=175&&Wl!=179&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=185&&Wl!=187&&Wl!=188&&Wl!=189&&Wl!=194&&Wl!=195&&Wl!=196&&Wl!=197&&Wl!=198&&Wl!=202&&Wl!=203&&Wl!=204&&Wl!=205&&Wl!=206&&Wl!=207&&Wl!=210&&Wl!=216&&Wl!=217&&Wl!=220&&Wl!=222&&Wl!=223&&Wl!=224&&Wl!=225&&Wl!=226&&Wl!=228&&Wl!=229&&Wl!=230&&Wl!=231&&Wl!=232&&Wl!=233&&Wl!=234&&Wl!=239&&Wl!=240&&Wl!=241&&Wl!=242&&Wl!=245&&Wl!=247&&Wl!=249&&Wl!=253&&Wl!=254&&Wl!=255&&Wl!=257&&Wl!=258&&Wl!=260&&Wl!=262&&Wl!=263&&Wl!=266&&Wl!=267&&Wl!=269&&Wl!=272&&Wl!=276&&Wl!=283&&Wl!=10009&&Wl!=14935&&Wl!=14951&&Wl!=14981&&Wl!=14987&&Wl!=15002&&Wl!=15025&&Wl!=15096&&Wl!=15104&&Wl!=15107&&Wl!=15116&&Wl!=15121&&Wl!=16011&&Wl!=16049&&Wl!=16140&&Wl!=18007&&Wl!=18023&&Wl!=18053&&Wl!=18059&&Wl!=18074&&Wl!=18097&&Wl!=18168&&Wl!=18176&&Wl!=18179&&Wl!=18188&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=118961&&Wl!=122507&&Wl!=131723&&Wl!=144128&&Wl!=147225){Wl=uc(9,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{cf(),oc(9,t,-1),Wl=-15}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),pf(),oc(9,t,-2),Wl=-15}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),vf(),oc(9,t,-3),Wl=-15}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),If(),oc(9,t,-12),Wl=-15}catch(c){Wl=-13,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(9,t,-13)}}}}}}switch(Wl){case-2:pf();break;case-3:vf();break;case 91735:gf();break;case 91751:bf();break;case 115333:Ef();break;case 16011:case 16049:case 118961:case 122507:case 131723:xf();break;case 18074:kf();break;case 18168:Af();break;case 144128:Df();break;case 18179:Hf();break;case-12:case 16140:If();break;case-13:Rf();break;case 54:zf();break;case-15:break;default:cf()}}function lf(){ic.startNonterminal(\"ApplyStatement\",Vl),Vf(),Pl(54),ic.endNonterminal(\"ApplyStatement\",Vl)}function cf(){$f(),Hl(54)}function hf(){ic.startNonterminal(\"AssignStatement\",Vl),Pl(31),Il(245),jl(),Ti(),Il(28),Pl(53),Il(266),jl(),Wf(),Pl(54),ic.endNonterminal(\"AssignStatement\",Vl)}function pf(){Hl(31),Il(245),Ni(),Il(28),Hl(53),Il(266),Xf(),Hl(54)}function df(){ic.startNonterminal(\"BlockStatement\",Vl),Pl(281),Il(270),jl(),af(),Il(280),jl(),tf(),Pl(287),ic.endNonterminal(\"BlockStatement\",Vl)}function vf(){Hl(281),Il(270),ff(),Il(280),nf(),Hl(287)}function mf(){ic.startNonterminal(\"BreakStatement\",Vl),Pl(87),Il(62),Pl(179),Il(29),Pl(54),ic.endNonterminal(\"BreakStatement\",Vl)}function gf(){Hl(87),Il(62),Hl(179),Il(29),Hl(54)}function yf(){ic.startNonterminal(\"ContinueStatement\",Vl),Pl(103),Il(62),Pl(179),Il(29),Pl(54),ic.endNonterminal(\"ContinueStatement\",Vl)}function bf(){Hl(103),Il(62),Hl(179),Il(29),Hl(54)}function wf(){ic.startNonterminal(\"ExitStatement\",Vl),Pl(133),Il(74),Pl(225),Il(266),jl(),Wf(),Pl(54),ic.endNonterminal(\"ExitStatement\",Vl)}function Ef(){Hl(133),Il(74),Hl(225),Il(266),Xf(),Hl(54)}function Sf(){ic.startNonterminal(\"FLWORStatement\",Vl),tt();for(;;){Il(195);if($l==224)break;jl(),rt()}jl(),Tf(),ic.endNonterminal(\"FLWORStatement\",Vl)}function xf(){nt();for(;;){Il(195);if($l==224)break;it()}Nf()}function Tf(){ic.startNonterminal(\"ReturnStatement\",Vl),Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"ReturnStatement\",Vl)}function Nf(){Hl(224),Il(270),ff()}function Cf(){ic.startNonterminal(\"IfStatement\",Vl),Pl(154),Il(22),Pl(35),Il(266),jl(),G(),Pl(38),Il(80),Pl(250),Il(270),jl(),af(),Il(51),Pl(123),Il(270),jl(),af(),ic.endNonterminal(\"IfStatement\",Vl)}function kf(){Hl(154),Il(22),Hl(35),Il(266),Y(),Hl(38),Il(80),Hl(250),Il(270),ff(),Il(51),Hl(123),Il(270),ff()}function Lf(){ic.startNonterminal(\"SwitchStatement\",Vl),Pl(248),Il(22),Pl(35),Il(266),jl(),G(),Pl(38);for(;;){Il(38),jl(),Of(),Il(117);if($l!=89)break}Pl(110),Il(73),Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"SwitchStatement\",Vl)}function Af(){Hl(248),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),Mf(),Il(117);if($l!=89)break}Hl(110),Il(73),Hl(224),Il(270),ff()}function Of(){ic.startNonterminal(\"SwitchCaseStatement\",Vl);for(;;){Pl(89),Il(266),jl(),dn();if($l!=89)break}Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"SwitchCaseStatement\",Vl)}function Mf(){for(;;){Hl(89),Il(266),vn();if($l!=89)break}Hl(224),Il(270),ff()}function _f(){ic.startNonterminal(\"TryCatchStatement\",Vl),Pl(256),Il(90),jl(),df();for(;;){Il(39),Pl(92),Il(248),jl(),_n(),jl(),df(),Il(283);switch($l){case 92:ql(255);break;default:Wl=$l}if(Wl!=2652&&Wl!=3164&&Wl!=36444&&Wl!=37468&&Wl!=37980&&Wl!=38492&&Wl!=39004&&Wl!=40028&&Wl!=40540&&Wl!=41052&&Wl!=41564&&Wl!=42076&&Wl!=42588&&Wl!=43100&&Wl!=43612&&Wl!=44124&&Wl!=44636&&Wl!=45660&&Wl!=46172&&Wl!=46684&&Wl!=47196&&Wl!=48220&&Wl!=48732&&Wl!=49756&&Wl!=50268&&Wl!=50780&&Wl!=52316&&Wl!=52828&&Wl!=53340&&Wl!=53852&&Wl!=54364&&Wl!=54876&&Wl!=55900&&Wl!=56412&&Wl!=56924&&Wl!=57436&&Wl!=57948&&Wl!=58460&&Wl!=61020&&Wl!=61532&&Wl!=62044&&Wl!=62556&&Wl!=63068&&Wl!=63580&&Wl!=64092&&Wl!=64604&&Wl!=65116&&Wl!=66140&&Wl!=66652&&Wl!=67676&&Wl!=68188&&Wl!=68700&&Wl!=69212&&Wl!=69724&&Wl!=70236&&Wl!=70748&&Wl!=71260&&Wl!=72796&&Wl!=73308&&Wl!=75356&&Wl!=75868&&Wl!=76892&&Wl!=77916&&Wl!=78428&&Wl!=78940&&Wl!=79452&&Wl!=79964&&Wl!=80476&&Wl!=82524&&Wl!=83036&&Wl!=83548&&Wl!=84060&&Wl!=84572&&Wl!=85084&&Wl!=85596&&Wl!=86108&&Wl!=86620&&Wl!=87132&&Wl!=88668&&Wl!=89180&&Wl!=89692&&Wl!=90716&&Wl!=91740&&Wl!=92764&&Wl!=93788&&Wl!=94300&&Wl!=94812&&Wl!=95836&&Wl!=96348&&Wl!=96860&&Wl!=99420&&Wl!=99932&&Wl!=100956&&Wl!=101468&&Wl!=103516&&Wl!=104028&&Wl!=104540&&Wl!=105052&&Wl!=105564&&Wl!=106076&&Wl!=107612&&Wl!=110684&&Wl!=111196&&Wl!=112732&&Wl!=113756&&Wl!=114268&&Wl!=114780&&Wl!=115292&&Wl!=115804&&Wl!=116828&&Wl!=117340&&Wl!=117852&&Wl!=118364&&Wl!=118876&&Wl!=119388&&Wl!=119900&&Wl!=122460&&Wl!=122972&&Wl!=123484&&Wl!=123996&&Wl!=125532&&Wl!=126556&&Wl!=127068&&Wl!=127580&&Wl!=129628&&Wl!=130140&&Wl!=130652&&Wl!=131164&&Wl!=131676&&Wl!=132188&&Wl!=132700&&Wl!=133212&&Wl!=134236&&Wl!=134748&&Wl!=136284&&Wl!=136796&&Wl!=137308&&Wl!=137820&&Wl!=139356&&Wl!=139868&&Wl!=141404)break}ic.endNonterminal(\"TryCatchStatement\",Vl)}function Df(){Hl(256),Il(90),vf();for(;;){Il(39),Hl(92),Il(248),Dn(),vf(),Il(283);switch($l){case 92:ql(255);break;default:Wl=$l}if(Wl!=2652&&Wl!=3164&&Wl!=36444&&Wl!=37468&&Wl!=37980&&Wl!=38492&&Wl!=39004&&Wl!=40028&&Wl!=40540&&Wl!=41052&&Wl!=41564&&Wl!=42076&&Wl!=42588&&Wl!=43100&&Wl!=43612&&Wl!=44124&&Wl!=44636&&Wl!=45660&&Wl!=46172&&Wl!=46684&&Wl!=47196&&Wl!=48220&&Wl!=48732&&Wl!=49756&&Wl!=50268&&Wl!=50780&&Wl!=52316&&Wl!=52828&&Wl!=53340&&Wl!=53852&&Wl!=54364&&Wl!=54876&&Wl!=55900&&Wl!=56412&&Wl!=56924&&Wl!=57436&&Wl!=57948&&Wl!=58460&&Wl!=61020&&Wl!=61532&&Wl!=62044&&Wl!=62556&&Wl!=63068&&Wl!=63580&&Wl!=64092&&Wl!=64604&&Wl!=65116&&Wl!=66140&&Wl!=66652&&Wl!=67676&&Wl!=68188&&Wl!=68700&&Wl!=69212&&Wl!=69724&&Wl!=70236&&Wl!=70748&&Wl!=71260&&Wl!=72796&&Wl!=73308&&Wl!=75356&&Wl!=75868&&Wl!=76892&&Wl!=77916&&Wl!=78428&&Wl!=78940&&Wl!=79452&&Wl!=79964&&Wl!=80476&&Wl!=82524&&Wl!=83036&&Wl!=83548&&Wl!=84060&&Wl!=84572&&Wl!=85084&&Wl!=85596&&Wl!=86108&&Wl!=86620&&Wl!=87132&&Wl!=88668&&Wl!=89180&&Wl!=89692&&Wl!=90716&&Wl!=91740&&Wl!=92764&&Wl!=93788&&Wl!=94300&&Wl!=94812&&Wl!=95836&&Wl!=96348&&Wl!=96860&&Wl!=99420&&Wl!=99932&&Wl!=100956&&Wl!=101468&&Wl!=103516&&Wl!=104028&&Wl!=104540&&Wl!=105052&&Wl!=105564&&Wl!=106076&&Wl!=107612&&Wl!=110684&&Wl!=111196&&Wl!=112732&&Wl!=113756&&Wl!=114268&&Wl!=114780&&Wl!=115292&&Wl!=115804&&Wl!=116828&&Wl!=117340&&Wl!=117852&&Wl!=118364&&Wl!=118876&&Wl!=119388&&Wl!=119900&&Wl!=122460&&Wl!=122972&&Wl!=123484&&Wl!=123996&&Wl!=125532&&Wl!=126556&&Wl!=127068&&Wl!=127580&&Wl!=129628&&Wl!=130140&&Wl!=130652&&Wl!=131164&&Wl!=131676&&Wl!=132188&&Wl!=132700&&Wl!=133212&&Wl!=134236&&Wl!=134748&&Wl!=136284&&Wl!=136796&&Wl!=137308&&Wl!=137820&&Wl!=139356&&Wl!=139868&&Wl!=141404)break}}function Pf(){ic.startNonterminal(\"TypeswitchStatement\",Vl),Pl(259),Il(22),Pl(35),Il(266),jl(),G(),Pl(38);for(;;){Il(38),jl(),Bf(),Il(117);if($l!=89)break}Pl(110),Il(99),$l==31&&(Pl(31),Il(245),jl(),Ti()),Il(73),Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"TypeswitchStatement\",Vl)}function Hf(){Hl(259),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),jf(),Il(117);if($l!=89)break}Hl(110),Il(99),$l==31&&(Hl(31),Il(245),Ni()),Il(73),Hl(224),Il(270),ff()}function Bf(){ic.startNonterminal(\"CaseStatement\",Vl),Pl(89),Il(257),$l==31&&(Pl(31),Il(245),jl(),Ti(),Il(33),Pl(80)),Il(253),jl(),Ls(),Il(73),Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"CaseStatement\",Vl)}function jf(){Hl(89),Il(257),$l==31&&(Hl(31),Il(245),Ni(),Il(33),Hl(80)),Il(253),As(),Il(73),Hl(224),Il(270),ff()}function Ff(){ic.startNonterminal(\"VarDeclStatement\",Vl);for(;;){Il(102);if($l!=33)break;jl(),B()}Pl(268),Il(21),Pl(31),Il(245),jl(),Ti(),Il(172),$l==80&&(jl(),Cs()),Il(155),$l==53&&(Pl(53),Il(266),jl(),Wf());for(;;){if($l!=42)break;Pl(42),Il(21),Pl(31),Il(245),jl(),Ti(),Il(172),$l==80&&(jl(),Cs()),Il(155),$l==53&&(Pl(53),Il(266),jl(),Wf())}Pl(54),ic.endNonterminal(\"VarDeclStatement\",Vl)}function If(){for(;;){Il(102);if($l!=33)break;j()}Hl(268),Il(21),Hl(31),Il(245),Ni(),Il(172),$l==80&&ks(),Il(155),$l==53&&(Hl(53),Il(266),Xf());for(;;){if($l!=42)break;Hl(42),Il(21),Hl(31),Il(245),Ni(),Il(172),$l==80&&ks(),Il(155),$l==53&&(Hl(53),Il(266),Xf())}Hl(54)}function qf(){ic.startNonterminal(\"WhileStatement\",Vl),Pl(273),Il(22),Pl(35),Il(266),jl(),G(),Pl(38),Il(270),jl(),af(),ic.endNonterminal(\"WhileStatement\",Vl)}function Rf(){Hl(273),Il(22),Hl(35),Il(266),Y(),Hl(38),Il(270),ff()}function Uf(){ic.startNonterminal(\"VoidStatement\",Vl),Pl(54),ic.endNonterminal(\"VoidStatement\",Vl)}function zf(){Hl(54)}function Wf(){ic.startNonterminal(\"ExprSingle\",Vl);switch($l){case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 154:case 248:case 259:ql(95);break;default:Wl=$l}switch(Wl){case 16011:case 16049:case 118961:case 122507:case 131723:Z();break;case 18074:Sn();break;case 18168:ln();break;case 144128:Tn();break;case 18179:mn();break;default:Vf()}ic.endNonterminal(\"ExprSingle\",Vl)}function Xf(){switch($l){case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 154:case 248:case 259:ql(95);break;default:Wl=$l}switch(Wl){case 16011:case 16049:case 118961:case 122507:case 131723:et();break;case 18074:xn();break;case 18168:cn();break;case 144128:Nn();break;case 18179:gn();break;default:$f()}}function Vf(){ic.startNonterminal(\"ExprSimple\",Vl);switch($l){case 78:ql(268);break;case 161:ql(275);break;case 223:ql(170);break;case 111:case 222:ql(260);break;case 104:case 130:case 240:ql(143);break;default:Wl=$l}if(Wl==17998||Wl==18031||Wl==18081||Wl==18142||Wl==99439||Wl==99489||Wl==99550||Wl==99951||Wl==100001||Wl==136927){Wl=uc(10,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hn(),Wl=-2}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),zo(),Wl=-3}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Xo(),Wl=-4}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ko(),Wl=-5}catch(c){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),$o(),Wl=-6}catch(h){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Kf(),Wl=-8}catch(p){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Gf(),Wl=-9}catch(d){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Zf(),Wl=-10}catch(v){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),tl(),Wl=-11}catch(m){Wl=-12}}}}}}}}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(10,Vl,Wl)}}switch(Wl){case 16002:case 16112:on();break;case-3:Uo();break;case-4:Wo();break;case-5:Jo();break;case-6:case 99551:Vo();break;case 15976:nu();break;case-8:case 3183:case 4207:case 4719:case 5231:case 5743:case 15983:case 16495:case 17007:case 28271:case 28783:case 30831:case 35439:case 36463:case 37487:case 37999:case 38511:case 39023:case 40047:case 40559:case 41071:case 41583:case 42095:case 42607:case 43119:case 43631:case 44143:case 44655:case 45679:case 46191:case 46703:case 47215:case 48239:case 48751:case 49775:case 50287:case 50799:case 52335:case 52847:case 53359:case 53871:case 54383:case 54895:case 55919:case 56431:case 56943:case 57455:case 57967:case 58479:case 61039:case 61551:case 62063:case 62575:case 63087:case 63599:case 64111:case 64623:case 65135:case 66159:case 66671:case 67695:case 68207:case 68719:case 69231:case 69743:case 70255:case 70767:case 71279:case 72815:case 73327:case 75375:case 75887:case 76911:case 77935:case 78447:case 78959:case 79471:case 79983:case 80495:case 82543:case 83055:case 83567:case 84079:case 84591:case 85103:case 85615:case 86127:case 86639:case 87151:case 88687:case 89199:case 89711:case 90735:case 91759:case 92783:case 93807:case 94319:case 94831:case 95855:case 96367:case 96879:case 100975:case 101487:case 103535:case 104047:case 104559:case 105071:case 105583:case 106095:case 107631:case 110703:case 111215:case 112751:case 113775:case 114287:case 114799:case 115311:case 115823:case 116847:case 117359:case 117871:case 118383:case 118895:case 119407:case 119919:case 122479:case 122991:case 123503:case 124015:case 125551:case 126575:case 127087:case 127599:case 129647:case 130159:case 130671:case 131183:case 131695:case 132207:case 132719:case 133231:case 134255:case 134767:case 136303:case 136815:case 137327:case 137839:case 139375:case 139887:case 141423:case 143983:case 145007:Jf();break;case-9:case 3233:case 4257:case 4769:case 5281:case 5793:case 9889:case 16033:case 16545:case 17057:case 18593:case 21153:case 22177:case 24225:case 24737:case 28321:case 28833:case 30881:case 35489:case 36513:case 37537:case 38049:case 38561:case 39073:case 40097:case 40609:case 41121:case 41633:case 42145:case 42657:case 43169:case 43681:case 44193:case 44705:case 45729:case 46241:case 46753:case 47265:case 48289:case 48801:case 49825:case 50337:case 50849:case 52385:case 52897:case 53409:case 53921:case 54433:case 54945:case 55969:case 56481:case 56993:case 57505:case 58017:case 58529:case 61089:case 61601:case 62113:case 62625:case 63137:case 63649:case 64161:case 64673:case 65185:case 66209:case 66721:case 67745:case 68257:case 68769:case 69281:case 69793:case 70305:case 70817:case 71329:case 72865:case 73377:case 75425:case 75937:case 76961:case 77985:case 78497:case 79009:case 79521:case 80033:case 80545:case 82593:case 83105:case 83617:case 84129:case 84641:case 85153:case 85665:case 86177:case 86689:case 87201:case 88737:case 89249:case 89761:case 90785:case 91809:case 92833:case 93857:case 94369:case 94881:case 95905:case 96417:case 96929:case 100513:case 101025:case 101537:case 103585:case 104097:case 104609:case 105121:case 105633:case 106145:case 107681:case 110753:case 111265:case 112801:case 113825:case 114337:case 114849:case 115361:case 115873:case 116897:case 117409:case 117921:case 118433:case 118945:case 119457:case 119969:case 122529:case 123041:case 123553:case 124065:case 125601:case 126625:case 127137:case 127649:case 129697:case 130209:case 130721:case 131233:case 131745:case 132257:case 132769:case 133281:case 134305:case 134817:case 136353:case 136865:case 137377:case 137889:case 139425:case 139937:case 141473:case 144033:case 145057:Qf();break;case-10:case 3294:case 4318:case 4830:case 5342:case 5854:case 16094:case 16606:case 17118:case 28382:case 28894:case 30942:case 35550:case 36574:case 37598:case 38110:case 38622:case 39134:case 40158:case 40670:case 41182:case 41694:case 42206:case 42718:case 43230:case 43742:case 44254:case 44766:case 45790:case 46302:case 46814:case 47326:case 48350:case 48862:case 49886:case 50398:case 50910:case 52446:case 52958:case 53470:case 53982:case 54494:case 55006:case 56030:case 56542:case 57054:case 57566:case 58078:case 58590:case 61150:case 61662:case 62174:case 62686:case 63198:case 63710:case 64222:case 64734:case 65246:case 66270:case 66782:case 67806:case 68318:case 68830:case 69342:case 69854:case 70366:case 70878:case 71390:case 72926:case 73438:case 75486:case 75998:case 77022:case 78046:case 78558:case 79070:case 79582:case 80094:case 80606:case 82654:case 83166:case 83678:case 84190:case 84702:case 85214:case 85726:case 86238:case 86750:case 87262:case 88798:case 89310:case 89822:case 90846:case 91870:case 92894:case 93918:case 94430:case 94942:case 95966:case 96478:case 96990:case 100062:case 101086:case 101598:case 103646:case 104158:case 104670:case 105182:case 105694:case 106206:case 107742:case 110814:case 111326:case 112862:case 113886:case 114398:case 114910:case 115422:case 115934:case 116958:case 117470:case 117982:case 118494:case 119006:case 119518:case 120030:case 122590:case 123102:case 123614:case 124126:case 125662:case 126686:case 127198:case 127710:case 129758:case 130270:case 130782:case 131294:case 131806:case 132318:case 132830:case 133342:case 134366:case 134878:case 136414:case 136926:case 137438:case 137950:case 139486:case 139998:case 141534:case 144094:case 145118:Yf();break;case-11:el();break;case-12:case 3150:case 4174:case 4686:case 5198:case 5710:case 15950:case 16462:case 16974:case 18510:case 21070:case 22094:case 24142:case 24654:case 28238:case 28750:case 30798:case 35406:case 36430:case 37454:case 37966:case 38478:case 38990:case 40014:case 40526:case 41038:case 41550:case 42062:case 42574:case 43086:case 43598:case 44110:case 44622:case 45646:case 46158:case 46670:case 47182:case 48206:case 48718:case 49742:case 50254:case 50766:case 52302:case 52814:case 53326:case 53838:case 54350:case 54862:case 55886:case 56398:case 56910:case 57422:case 57934:case 58446:case 61006:case 61518:case 62030:case 62542:case 63054:case 63566:case 64078:case 64590:case 65102:case 66126:case 66638:case 67662:case 68174:case 68686:case 69198:case 69710:case 70222:case 70734:case 71246:case 72782:case 73294:case 75342:case 75854:case 76878:case 77902:case 78414:case 78926:case 79438:case 79950:case 80462:case 82510:case 83022:case 83534:case 84046:case 84558:case 85070:case 85582:case 86094:case 86606:case 87118:case 88654:case 89166:case 89678:case 90702:case 91726:case 92750:case 93774:case 94286:case 94798:case 95822:case 96334:case 96846:case 99406:case 99918:case 100430:case 100942:case 101454:case 103502:case 104014:case 104526:case 105038:case 105550:case 106062:case 107598:case 110670:case 111182:case 112718:case 113742:case 114254:case 114766:case 115278:case 115790:case 116814:case 117326:case 117838:case 118350:case 118862:case 119374:case 119886:case 122446:case 122958:case 123470:case 123982:case 125518:case 126542:case 127054:case 127566:case 129614:case 130126:case 130638:case 131150:case 131662:case 132174:case 132686:case 133198:case 134222:case 134734:case 136270:case 136782:case 137294:case 137806:case 139342:case 139854:case 141390:case 143950:case 144974:nl();break;default:Pn()}ic.endNonterminal(\"ExprSimple\",Vl)}function $f(){switch($l){case 78:ql(268);break;case 161:ql(275);break;case 223:ql(170);break;case 111:case 222:ql(260);break;case 104:case 130:case 240:ql(143);break;default:Wl=$l}if(Wl==17998||Wl==18031||Wl==18081||Wl==18142||Wl==99439||Wl==99489||Wl==99550||Wl==99951||Wl==100001||Wl==136927){Wl=uc(10,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hn(),oc(10,t,-2),Wl=-13}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),zo(),oc(10,t,-3),Wl=-13}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Xo(),oc(10,t,-4),Wl=-13}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ko(),oc(10,t,-5),Wl=-13}catch(c){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),$o(),oc(10,t,-6),Wl=-13}catch(h){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Kf(),oc(10,t,-8),Wl=-13}catch(p){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Gf(),oc(10,t,-9),Wl=-13}catch(d){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Zf(),oc(10,t,-10),Wl=-13}catch(v){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),tl(),oc(10,t,-11),Wl=-13}catch(m){Wl=-12,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(10,t,-12)}}}}}}}}}}}switch(Wl){case 16002:case 16112:un();break;case-3:zo();break;case-4:Xo();break;case-5:Ko();break;case-6:case 99551:$o();break;case 15976:ru();break;case-8:case 3183:case 4207:case 4719:case 5231:case 5743:case 15983:case 16495:case 17007:case 28271:case 28783:case 30831:case 35439:case 36463:case 37487:case 37999:case 38511:case 39023:case 40047:case 40559:case 41071:case 41583:case 42095:case 42607:case 43119:case 43631:case 44143:case 44655:case 45679:case 46191:case 46703:case 47215:case 48239:case 48751:case 49775:case 50287:case 50799:case 52335:case 52847:case 53359:case 53871:case 54383:case 54895:case 55919:case 56431:case 56943:case 57455:case 57967:case 58479:case 61039:case 61551:case 62063:case 62575:case 63087:case 63599:case 64111:case 64623:case 65135:case 66159:case 66671:case 67695:case 68207:case 68719:case 69231:case 69743:case 70255:case 70767:case 71279:case 72815:case 73327:case 75375:case 75887:case 76911:case 77935:case 78447:case 78959:case 79471:case 79983:case 80495:case 82543:case 83055:case 83567:case 84079:case 84591:case 85103:case 85615:case 86127:case 86639:case 87151:case 88687:case 89199:case 89711:case 90735:case 91759:case 92783:case 93807:case 94319:case 94831:case 95855:case 96367:case 96879:case 100975:case 101487:case 103535:case 104047:case 104559:case 105071:case 105583:case 106095:case 107631:case 110703:case 111215:case 112751:case 113775:case 114287:case 114799:case 115311:case 115823:case 116847:case 117359:case 117871:case 118383:case 118895:case 119407:case 119919:case 122479:case 122991:case 123503:case 124015:case 125551:case 126575:case 127087:case 127599:case 129647:case 130159:case 130671:case 131183:case 131695:case 132207:case 132719:case 133231:case 134255:case 134767:case 136303:case 136815:case 137327:case 137839:case 139375:case 139887:case 141423:case 143983:case 145007:Kf();break;case-9:case 3233:case 4257:case 4769:case 5281:case 5793:case 9889:case 16033:case 16545:case 17057:case 18593:case 21153:case 22177:case 24225:case 24737:case 28321:case 28833:case 30881:case 35489:case 36513:case 37537:case 38049:case 38561:case 39073:case 40097:case 40609:case 41121:case 41633:case 42145:case 42657:case 43169:case 43681:case 44193:case 44705:case 45729:case 46241:case 46753:case 47265:case 48289:case 48801:case 49825:case 50337:case 50849:case 52385:case 52897:case 53409:case 53921:case 54433:case 54945:case 55969:case 56481:case 56993:case 57505:case 58017:case 58529:case 61089:case 61601:case 62113:case 62625:case 63137:case 63649:case 64161:case 64673:case 65185:case 66209:case 66721:case 67745:case 68257:case 68769:case 69281:case 69793:case 70305:case 70817:case 71329:case 72865:case 73377:case 75425:case 75937:case 76961:case 77985:case 78497:case 79009:case 79521:case 80033:case 80545:case 82593:case 83105:case 83617:case 84129:case 84641:case 85153:case 85665:case 86177:case 86689:case 87201:case 88737:case 89249:case 89761:case 90785:case 91809:case 92833:case 93857:case 94369:case 94881:case 95905:case 96417:case 96929:case 100513:case 101025:case 101537:case 103585:case 104097:case 104609:case 105121:case 105633:case 106145:case 107681:case 110753:case 111265:case 112801:case 113825:case 114337:case 114849:case 115361:case 115873:case 116897:case 117409:case 117921:case 118433:case 118945:case 119457:case 119969:case 122529:case 123041:case 123553:case 124065:case 125601:case 126625:case 127137:case 127649:case 129697:case 130209:case 130721:case 131233:case 131745:case 132257:case 132769:case 133281:case 134305:case 134817:case 136353:case 136865:case 137377:case 137889:case 139425:case 139937:case 141473:case 144033:case 145057:Gf();break;case-10:case 3294:case 4318:case 4830:case 5342:case 5854:case 16094:case 16606:case 17118:case 28382:case 28894:case 30942:case 35550:case 36574:case 37598:case 38110:case 38622:case 39134:case 40158:case 40670:case 41182:case 41694:case 42206:case 42718:case 43230:case 43742:case 44254:case 44766:case 45790:case 46302:case 46814:case 47326:case 48350:case 48862:case 49886:case 50398:case 50910:case 52446:case 52958:case 53470:case 53982:case 54494:case 55006:case 56030:case 56542:case 57054:case 57566:case 58078:case 58590:case 61150:case 61662:case 62174:case 62686:case 63198:case 63710:case 64222:case 64734:case 65246:case 66270:case 66782:case 67806:case 68318:case 68830:case 69342:case 69854:case 70366:case 70878:case 71390:case 72926:case 73438:case 75486:case 75998:case 77022:case 78046:case 78558:case 79070:case 79582:case 80094:case 80606:case 82654:case 83166:case 83678:case 84190:case 84702:case 85214:case 85726:case 86238:case 86750:case 87262:case 88798:case 89310:case 89822:case 90846:case 91870:case 92894:case 93918:case 94430:case 94942:case 95966:case 96478:case 96990:case 100062:case 101086:case 101598:case 103646:case 104158:case 104670:case 105182:case 105694:case 106206:case 107742:case 110814:case 111326:case 112862:case 113886:case 114398:case 114910:case 115422:case 115934:case 116958:case 117470:case 117982:case 118494:case 119006:case 119518:case 120030:case 122590:case 123102:case 123614:case 124126:case 125662:case 126686:case 127198:case 127710:case 129758:case 130270:case 130782:case 131294:case 131806:case 132318:case 132830:case 133342:case 134366:case 134878:case 136414:case 136926:case 137438:case 137950:case 139486:case 139998:case 141534:case 144094:case 145118:Zf();break;case-11:tl();break;case-12:case 3150:case 4174:case 4686:case 5198:case 5710:case 15950:case 16462:case 16974:case 18510:case 21070:case 22094:case 24142:case 24654:case 28238:case 28750:case 30798:case 35406:case 36430:case 37454:case 37966:case 38478:case 38990:case 40014:case 40526:case 41038:case 41550:case 42062:case 42574:case 43086:case 43598:case 44110:case 44622:case 45646:case 46158:case 46670:case 47182:case 48206:case 48718:case 49742:case 50254:case 50766:case 52302:case 52814:case 53326:case 53838:case 54350:case 54862:case 55886:case 56398:case 56910:case 57422:case 57934:case 58446:case 61006:case 61518:case 62030:case 62542:case 63054:case 63566:case 64078:case 64590:case 65102:case 66126:case 66638:case 67662:case 68174:case 68686:case 69198:case 69710:case 70222:case 70734:case 71246:case 72782:case 73294:case 75342:case 75854:case 76878:case 77902:case 78414:case 78926:case 79438:case 79950:case 80462:case 82510:case 83022:case 83534:case 84046:case 84558:case 85070:case 85582:case 86094:case 86606:case 87118:case 88654:case 89166:case 89678:case 90702:case 91726:case 92750:case 93774:case 94286:case 94798:case 95822:case 96334:case 96846:case 99406:case 99918:case 100430:case 100942:case 101454:case 103502:case 104014:case 104526:case 105038:case 105550:case 106062:case 107598:case 110670:case 111182:case 112718:case 113742:case 114254:case 114766:case 115278:case 115790:case 116814:case 117326:case 117838:case 118350:case 118862:case 119374:case 119886:case 122446:case 122958:case 123470:case 123982:case 125518:case 126542:case 127054:case 127566:case 129614:case 130126:case 130638:case 131150:case 131662:case 132174:case 132686:case 133198:case 134222:case 134734:case 136270:case 136782:case 137294:case 137806:case 139342:case 139854:case 141390:case 143950:case 144974:rl();break;case-13:break;default:Hn()}}function Jf(){ic.startNonterminal(\"JSONDeleteExpr\",Vl),Pl(111),Il(259);switch($l){case 168:ql(260);break;default:Wl=$l}if(Wl==18088){Wl=uc(11,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(11,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(259),jl(),ei(),ic.endNonterminal(\"JSONDeleteExpr\",Vl)}function Kf(){Hl(111),Il(259);switch($l){case 168:ql(260);break;default:Wl=$l}if(Wl==18088){Wl=uc(11,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),oc(11,t,-1)}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(11,t,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(259),ti()}function Qf(){ic.startNonterminal(\"JSONInsertExpr\",Vl);switch($l){case 161:ql(267);break;default:Wl=$l}if(Wl!=9889){Wl=uc(12,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(161),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(13,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(266),Xf(),Hl(165),Il(266),Xf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(266),Xf(),oc(14,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,f,-2)}Wl=-2}}Wl==-1&&(Hl(82),Il(72),Hl(215),Il(266),Xf()),Wl=-1}catch(g){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(12,Vl,Wl)}}switch(Wl){case-1:Pl(161),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),Wl=-1}catch(m){Wl=-2}Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(266),jl(),Wf(),Pl(165),Il(266),jl(),Wf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(266),Xf(),Wl=-1}catch(m){Wl=-2}Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,Vl,Wl)}}Wl==-1&&(Pl(82),Il(72),Pl(215),Il(266),jl(),Wf());break;default:Pl(161),Il(267);switch($l){case 168:ql(281);break;default:Wl=$l}if(Wl==18088){Wl=uc(15,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),Wl=-1}catch(m){Wl=-2}Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(15,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==9896||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(267),jl(),Tl(),Pl(165),Il(266),jl(),Wf()}ic.endNonterminal(\"JSONInsertExpr\",Vl)}function Gf(){switch($l){case 161:ql(267);break;default:Wl=$l}if(Wl!=9889){Wl=uc(12,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(161),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(13,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(266),Xf(),Hl(165),Il(266),Xf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(266),Xf(),oc(14,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,f,-2)}Wl=-2}}Wl==-1&&(Hl(82),Il(72),Hl(215),Il(266),Xf()),oc(12,t,-1),Wl=-3}catch(g){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(12,t,-2)}}}switch(Wl){case-1:Hl(161),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(13,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(266),Xf(),Hl(165),Il(266),Xf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(266),Xf(),oc(14,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,f,-2)}Wl=-2}}Wl==-1&&(Hl(82),Il(72),Hl(215),Il(266),Xf());break;case-3:break;default:Hl(161),Il(267);switch($l){case 168:ql(281);break;default:Wl=$l}if(Wl==18088){Wl=uc(15,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(15,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(15,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==9896||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(267),Nl(),Hl(165),Il(266),Xf()}}function Yf(){ic.startNonterminal(\"JSONRenameExpr\",Vl),Pl(222),Il(259);switch($l){case 168:ql(260);break;default:Wl=$l}if(Wl==18088){Wl=uc(16,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(16,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(259),jl(),ei(),Pl(80),Il(266),jl(),Wf(),ic.endNonterminal(\"JSONRenameExpr\",Vl)}function Zf(){Hl(222),Il(259);switch($l){case 168:ql(260);break;default:Wl=$l}if(Wl==18088){Wl=uc(16,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),oc(16,t,-1)}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(16,t,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(259),ti(),Hl(80),Il(266),Xf()}function el(){ic.startNonterminal(\"JSONReplaceExpr\",Vl),Pl(223),Il(85),Pl(267),Il(67),Pl(200),Il(59),Pl(168),Il(259),jl(),ei(),Pl(276),Il(266),jl(),Wf(),ic.endNonterminal(\"JSONReplaceExpr\",Vl)}function tl(){Hl(223),Il(85),Hl(267),Il(67),Hl(200),Il(59),Hl(168),Il(259),ti(),Hl(276),Il(266),Xf()}function nl(){ic.startNonterminal(\"JSONAppendExpr\",Vl),Pl(78),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(17,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(17,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(266),jl(),Wf(),Pl(165),Il(266),jl(),Wf(),ic.endNonterminal(\"JSONAppendExpr\",Vl)}function rl(){Hl(78),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(17,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),oc(17,t,-1)}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(17,t,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(266),Xf(),Hl(165),Il(266),Xf()}function il(){ic.startNonterminal(\"CommonContent\",Vl);switch($l){case 12:Pl(12);break;case 23:Pl(23);break;case 282:Pl(282);break;case 288:Pl(288);break;default:Ol()}ic.endNonterminal(\"CommonContent\",Vl)}function sl(){switch($l){case 12:Hl(12);break;case 23:Hl(23);break;case 282:Hl(282);break;case 288:Hl(288);break;default:Ml()}}function ol(){ic.startNonterminal(\"ContentExpr\",Vl),rf(),ic.endNonterminal(\"ContentExpr\",Vl)}function ul(){sf()}function al(){ic.startNonterminal(\"CompDocConstructor\",Vl),Pl(120),Il(90),jl(),Ol(),ic.endNonterminal(\"CompDocConstructor\",Vl)}function fl(){Hl(120),Il(90),Ml()}function ll(){ic.startNonterminal(\"CompAttrConstructor\",Vl),Pl(83),Il(249);switch($l){case 281:Pl(281),Il(266),jl(),G(),Pl(287);break;default:jl(),$a()}Il(90);switch($l){case 281:ql(280);break;default:Wl=$l}if(Wl==147225){Wl=uc(18,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(18,Vl,Wl)}}switch(Wl){case-1:Pl(281),Il(91),Pl(287);break;default:jl(),Ol()}ic.endNonterminal(\"CompAttrConstructor\",Vl)}function cl(){Hl(83),Il(249);switch($l){case 281:Hl(281),Il(266),Y(),Hl(287);break;default:Ja()}Il(90);switch($l){case 281:ql(280);break;default:Wl=$l}if(Wl==147225){Wl=uc(18,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),oc(18,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(18,t,-2)}}}switch(Wl){case-1:Hl(281),Il(91),Hl(287);break;case-3:break;default:Ml()}}function hl(){ic.startNonterminal(\"CompPIConstructor\",Vl),Pl(220),Il(241);switch($l){case 281:Pl(281),Il(266),jl(),G(),Pl(287);break;default:jl(),Ga()}Il(90);switch($l){case 281:ql(280);break;default:Wl=$l}if(Wl==147225){Wl=uc(19,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(19,Vl,Wl)}}switch(Wl){case-1:Pl(281),Il(91),Pl(287);break;default:jl(),Ol()}ic.endNonterminal(\"CompPIConstructor\",Vl)}function pl(){Hl(220),Il(241);switch($l){case 281:Hl(281),Il(266),Y(),Hl(287);break;default:Ya()}Il(90);switch($l){case 281:ql(280);break;default:Wl=$l}if(Wl==147225){Wl=uc(19,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),oc(19,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(19,t,-2)}}}switch(Wl){case-1:Hl(281),Il(91),Hl(287);break;case-3:break;default:Ml()}}function dl(){ic.startNonterminal(\"CompCommentConstructor\",Vl),Pl(97),Il(90),jl(),Ol(),ic.endNonterminal(\"CompCommentConstructor\",Vl)}function vl(){Hl(97),Il(90),Ml()}function ml(){ic.startNonterminal(\"CompTextConstructor\",Vl),Pl(249),Il(90),jl(),Ol(),ic.endNonterminal(\"CompTextConstructor\",Vl)}function gl(){Hl(249),Il(90),Ml()}function yl(){ic.startNonterminal(\"PrimaryExpr\",Vl);switch($l){case 187:ql(246);break;case 220:ql(244);break;case 281:ql(282);break;case 83:case 122:ql(252);break;case 97:case 249:ql(97);break;case 120:case 206:case 262:ql(148);break;case 135:case 197:case 255:ql(236);break;case 6:case 71:case 73:case 74:case 75:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 137:case 138:case 139:case 142:case 143:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl==3353||Wl==4377||Wl==4889||Wl==5401||Wl==5913||Wl==16153||Wl==16665||Wl==17177||Wl==18055||Wl==18117||Wl==18175||Wl==18201||Wl==18713||Wl==21273||Wl==22297||Wl==24345||Wl==24857||Wl==28441||Wl==28953||Wl==31001||Wl==35609||Wl==36633||Wl==37657||Wl==38169||Wl==38681||Wl==39193||Wl==40217||Wl==40729||Wl==41241||Wl==41753||Wl==42265||Wl==42777||Wl==43289||Wl==43801||Wl==44313||Wl==44825||Wl==45849||Wl==46361||Wl==46873||Wl==47385||Wl==48409||Wl==48921||Wl==49945||Wl==50457||Wl==50969||Wl==52505||Wl==53017||Wl==53529||Wl==54041||Wl==54553||Wl==55065||Wl==56089||Wl==56601||Wl==57113||Wl==57625||Wl==58137||Wl==58649||Wl==61209||Wl==61721||Wl==62233||Wl==62745||Wl==63257||Wl==63769||Wl==64281||Wl==64793||Wl==65305||Wl==66329||Wl==66841||Wl==67865||Wl==68377||Wl==68889||Wl==69401||Wl==69913||Wl==70425||Wl==70937||Wl==71449||Wl==72985||Wl==73497||Wl==75545||Wl==76057||Wl==77081||Wl==78105||Wl==78617||Wl==79129||Wl==79641||Wl==80153||Wl==80665||Wl==82713||Wl==83225||Wl==83737||Wl==84249||Wl==84761||Wl==85273||Wl==85785||Wl==86297||Wl==86809||Wl==87321||Wl==88857||Wl==89369||Wl==89881||Wl==90905||Wl==91929||Wl==92953||Wl==93977||Wl==94489||Wl==95001||Wl==96025||Wl==96537||Wl==97049||Wl==99609||Wl==100121||Wl==100633||Wl==101145||Wl==101657||Wl==103705||Wl==104217||Wl==104729||Wl==105241||Wl==105753||Wl==106265||Wl==107801||Wl==110873||Wl==111385||Wl==112921||Wl==113945||Wl==114457||Wl==114969||Wl==115481||Wl==115993||Wl==117017||Wl==117529||Wl==118041||Wl==118553||Wl==119065||Wl==119577||Wl==120089||Wl==122649||Wl==123161||Wl==123673||Wl==124185||Wl==125721||Wl==126745||Wl==127257||Wl==127769||Wl==129817||Wl==130329||Wl==130841||Wl==131353||Wl==131865||Wl==132377||Wl==132889||Wl==133401||Wl==134425||Wl==134937||Wl==136473||Wl==136985||Wl==137497||Wl==138009||Wl==139545||Wl==140057||Wl==141593||Wl==144153||Wl==145177||Wl==147225){Wl=uc(20,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{vi(),Wl=-1}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hi(),Wl=-5}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ml(),Wl=-10}catch(l){Wl=-11}}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(20,Vl,Wl)}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 12935:case 12997:case 13055:case 13447:case 13509:case 13567:case 13959:case 14021:case 14079:case 19591:case 19653:case 19711:case 20103:case 20165:case 20223:case 21127:case 21189:case 21247:case 21639:case 21701:case 21759:case 22151:case 22213:case 22271:case 23175:case 23237:case 23295:case 24199:case 24261:case 24319:case 24711:case 24773:case 24831:case 25735:case 25797:case 25855:case 27783:case 27845:case 27903:case 28295:case 28357:case 28415:case 29831:case 29893:case 29951:case 30343:case 30405:case 30463:case 31367:case 31429:case 31487:case 31879:case 31941:case 31999:case 32391:case 32453:case 32511:case 32903:case 32965:case 33023:case 35463:case 35525:case 35583:case 35975:case 36037:case 36095:case 36487:case 36549:case 36607:case 39047:case 39109:case 39167:case 41095:case 41157:case 41215:case 41607:case 41669:case 41727:case 42119:case 42181:case 42239:case 43655:case 43717:case 43775:case 45191:case 45253:case 45311:case 45703:case 45765:case 45823:case 46215:case 46277:case 46335:case 46727:case 46789:case 46847:case 48775:case 48837:case 48895:case 51335:case 51397:case 51455:case 54407:case 54469:case 54527:case 56455:case 56517:case 56575:case 58503:case 58565:case 58623:case 61063:case 61125:case 61183:case 63111:case 63173:case 63231:case 63623:case 63685:case 63743:case 65159:case 65221:case 65279:case 66183:case 66245:case 66303:case 67719:case 67781:case 67839:case 71303:case 71365:case 71423:case 75911:case 75973:case 76031:case 76935:case 76997:case 77055:case 77959:case 78021:case 78079:case 78471:case 78533:case 78591:case 83079:case 83141:case 83199:case 84103:case 84165:case 84223:case 84615:case 84677:case 84735:case 85127:case 85189:case 85247:case 89735:case 89797:case 89855:case 90759:case 90821:case 90879:case 92807:case 92869:case 92927:case 93831:case 93893:case 93951:case 94343:case 94405:case 94463:case 96903:case 96965:case 97023:case 103559:case 103621:case 103679:case 104583:case 104645:case 104703:case 105095:case 105157:case 105215:case 107143:case 107205:case 107263:case 114823:case 114885:case 114943:case 116871:case 116933:case 116991:case 121479:case 121541:case 121599:case 123527:case 123589:case 123647:case 124039:case 124101:case 124159:case 129159:case 129221:case 129279:case 129671:case 129733:case 129791:case 130183:case 130245:case 130303:case 133255:case 133317:case 133375:case 139399:case 139461:case 139519:case 141447:case 141509:case 141567:case 142983:case 143045:case 143103:case 145543:case 145605:case 145663:case 146055:case 146117:case 146175:case 146567:case 146629:case 146687:case 147079:case 147141:case 147199:di();break;case 31:Si();break;case 35:Ci();break;case 32:Li();break;case-5:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:Pi();break;case 144078:Oi();break;case 144134:_i();break;case 33:case 79:case 121:case 125:case 147:case 154:case 167:case 169:case 188:case 194:case 230:case 231:case 247:case 248:case 259:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14970:case 14971:case 14972:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14996:case 14998:case 15e3:case 15001:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15016:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15037:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:ys();break;case-10:case 27929:Ol();break;case-11:case 10009:Sl();break;case 69:Ll();break;case 283:wl();break;default:qi()}ic.endNonterminal(\"PrimaryExpr\",Vl)}function bl(){switch($l){case 187:ql(246);break;case 220:ql(244);break;case 281:ql(282);break;case 83:case 122:ql(252);break;case 97:case 249:ql(97);break;case 120:case 206:case 262:ql(148);break;case 135:case 197:case 255:ql(236);break;case 6:case 71:case 73:case 74:case 75:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 137:case 138:case 139:case 142:case 143:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl==3353||Wl==4377||Wl==4889||Wl==5401||Wl==5913||Wl==16153||Wl==16665||Wl==17177||Wl==18055||Wl==18117||Wl==18175||Wl==18201||Wl==18713||Wl==21273||Wl==22297||Wl==24345||Wl==24857||Wl==28441||Wl==28953||Wl==31001||Wl==35609||Wl==36633||Wl==37657||Wl==38169||Wl==38681||Wl==39193||Wl==40217||Wl==40729||Wl==41241||Wl==41753||Wl==42265||Wl==42777||Wl==43289||Wl==43801||Wl==44313||Wl==44825||Wl==45849||Wl==46361||Wl==46873||Wl==47385||Wl==48409||Wl==48921||Wl==49945||Wl==50457||Wl==50969||Wl==52505||Wl==53017||Wl==53529||Wl==54041||Wl==54553||Wl==55065||Wl==56089||Wl==56601||Wl==57113||Wl==57625||Wl==58137||Wl==58649||Wl==61209||Wl==61721||Wl==62233||Wl==62745||Wl==63257||Wl==63769||Wl==64281||Wl==64793||Wl==65305||Wl==66329||Wl==66841||Wl==67865||Wl==68377||Wl==68889||Wl==69401||Wl==69913||Wl==70425||Wl==70937||Wl==71449||Wl==72985||Wl==73497||Wl==75545||Wl==76057||Wl==77081||Wl==78105||Wl==78617||Wl==79129||Wl==79641||Wl==80153||Wl==80665||Wl==82713||Wl==83225||Wl==83737||Wl==84249||Wl==84761||Wl==85273||Wl==85785||Wl==86297||Wl==86809||Wl==87321||Wl==88857||Wl==89369||Wl==89881||Wl==90905||Wl==91929||Wl==92953||Wl==93977||Wl==94489||Wl==95001||Wl==96025||Wl==96537||Wl==97049||Wl==99609||Wl==100121||Wl==100633||Wl==101145||Wl==101657||Wl==103705||Wl==104217||Wl==104729||Wl==105241||Wl==105753||Wl==106265||Wl==107801||Wl==110873||Wl==111385||Wl==112921||Wl==113945||Wl==114457||Wl==114969||Wl==115481||Wl==115993||Wl==117017||Wl==117529||Wl==118041||Wl==118553||Wl==119065||Wl==119577||Wl==120089||Wl==122649||Wl==123161||Wl==123673||Wl==124185||Wl==125721||Wl==126745||Wl==127257||Wl==127769||Wl==129817||Wl==130329||Wl==130841||Wl==131353||Wl==131865||Wl==132377||Wl==132889||Wl==133401||Wl==134425||Wl==134937||Wl==136473||Wl==136985||Wl==137497||Wl==138009||Wl==139545||Wl==140057||Wl==141593||Wl==144153||Wl==145177||Wl==147225){Wl=uc(20,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{vi(),oc(20,t,-1),Wl=-14}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hi(),oc(20,t,-5),Wl=-14}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ml(),oc(20,t,-10),Wl=-14}catch(l){Wl=-11,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(20,t,-11)}}}}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 12935:case 12997:case 13055:case 13447:case 13509:case 13567:case 13959:case 14021:case 14079:case 19591:case 19653:case 19711:case 20103:case 20165:case 20223:case 21127:case 21189:case 21247:case 21639:case 21701:case 21759:case 22151:case 22213:case 22271:case 23175:case 23237:case 23295:case 24199:case 24261:case 24319:case 24711:case 24773:case 24831:case 25735:case 25797:case 25855:case 27783:case 27845:case 27903:case 28295:case 28357:case 28415:case 29831:case 29893:case 29951:case 30343:case 30405:case 30463:case 31367:case 31429:case 31487:case 31879:case 31941:case 31999:case 32391:case 32453:case 32511:case 32903:case 32965:case 33023:case 35463:case 35525:case 35583:case 35975:case 36037:case 36095:case 36487:case 36549:case 36607:case 39047:case 39109:case 39167:case 41095:case 41157:case 41215:case 41607:case 41669:case 41727:case 42119:case 42181:case 42239:case 43655:case 43717:case 43775:case 45191:case 45253:case 45311:case 45703:case 45765:case 45823:case 46215:case 46277:case 46335:case 46727:case 46789:case 46847:case 48775:case 48837:case 48895:case 51335:case 51397:case 51455:case 54407:case 54469:case 54527:case 56455:case 56517:case 56575:case 58503:case 58565:case 58623:case 61063:case 61125:case 61183:case 63111:case 63173:case 63231:case 63623:case 63685:case 63743:case 65159:case 65221:case 65279:case 66183:case 66245:case 66303:case 67719:case 67781:case 67839:case 71303:case 71365:case 71423:case 75911:case 75973:case 76031:case 76935:case 76997:case 77055:case 77959:case 78021:case 78079:case 78471:case 78533:case 78591:case 83079:case 83141:case 83199:case 84103:case 84165:case 84223:case 84615:case 84677:case 84735:case 85127:case 85189:case 85247:case 89735:case 89797:case 89855:case 90759:case 90821:case 90879:case 92807:case 92869:case 92927:case 93831:case 93893:case 93951:case 94343:case 94405:case 94463:case 96903:case 96965:case 97023:case 103559:case 103621:case 103679:case 104583:case 104645:case 104703:case 105095:case 105157:case 105215:case 107143:case 107205:case 107263:case 114823:case 114885:case 114943:case 116871:case 116933:case 116991:case 121479:case 121541:case 121599:case 123527:case 123589:case 123647:case 124039:case 124101:case 124159:case 129159:case 129221:case 129279:case 129671:case 129733:case 129791:case 130183:case 130245:case 130303:case 133255:case 133317:case 133375:case 139399:case 139461:case 139519:case 141447:case 141509:case 141567:case 142983:case 143045:case 143103:case 145543:case 145605:case 145663:case 146055:case 146117:case 146175:case 146567:case 146629:case 146687:case 147079:case 147141:case 147199:vi();break;case 31:xi();break;case 35:ki();break;case 32:Ai();break;case-5:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:Hi();break;case 144078:Mi();break;case 144134:Di();break;case 33:case 79:case 121:case 125:case 147:case 154:case 167:case 169:case 188:case 194:case 230:case 231:case 247:case 248:case 259:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14970:case 14971:case 14972:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14996:case 14998:case 15e3:case 15001:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15016:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15037:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:bs();break;case-10:case 27929:Ml();break;case-11:case 10009:xl();break;case 69:Al();break;case 283:El();break;case-14:break;default:Ri()}}function wl(){ic.startNonterminal(\"JSONSimpleObjectUnion\",Vl),Pl(283),Il(273),$l!=286&&(jl(),G()),Pl(286),ic.endNonterminal(\"JSONSimpleObjectUnion\",Vl)}function El(){Hl(283),Il(273),$l!=286&&Y(),Hl(286)}function Sl(){ic.startNonterminal(\"ObjectConstructor\",Vl),Pl(281),Il(276),$l!=287&&(jl(),Tl()),Pl(287),ic.endNonterminal(\"ObjectConstructor\",Vl)}function xl(){Hl(281),Il(276),$l!=287&&Nl(),Hl(287)}function Tl(){ic.startNonterminal(\"PairConstructorList\",Vl),Cl();for(;;){if($l!=42)break;Pl(42),Il(267),jl(),Cl()}ic.endNonterminal(\"PairConstructorList\",Vl)}function Nl(){kl();for(;;){if($l!=42)break;Hl(42),Il(267),kl()}}function Cl(){ic.startNonterminal(\"PairConstructor\",Vl);switch($l){case 78:ql(278);break;case 139:ql(187);break;case 161:ql(281);break;case 177:ql(178);break;case 187:ql(251);break;case 220:ql(247);break;case 223:ql(180);break;case 266:ql(191);break;case 83:case 122:ql(256);break;case 97:case 249:ql(149);break;case 111:case 222:ql(261);break;case 104:case 130:case 240:ql(165);break;case 135:case 197:case 255:ql(208);break;case 120:case 206:case 256:case 262:ql(167);break;case 121:case 125:case 167:case 188:case 194:case 230:case 231:ql(96);break;case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 133:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 268:case 269:case 272:case 273:case 276:ql(144);break;default:Wl=$l}if(Wl==25735||Wl==25797||Wl==25855){Wl=uc(21,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xf(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(21,Vl,Wl)}}switch(Wl){case-2:case 19:case 25671:case 25673:case 25674:case 25675:case 25676:case 25678:case 25680:case 25681:case 25682:case 25683:case 25684:case 25685:case 25686:case 25687:case 25689:case 25690:case 25691:case 25692:case 25694:case 25695:case 25697:case 25698:case 25699:case 25702:case 25703:case 25704:case 25705:case 25706:case 25707:case 25709:case 25710:case 25711:case 25712:case 25713:case 25714:case 25719:case 25720:case 25721:case 25722:case 25723:case 25724:case 25725:case 25726:case 25727:case 25729:case 25730:case 25732:case 25733:case 25734:case 25736:case 25737:case 25738:case 25739:case 25742:case 25743:case 25747:case 25748:case 25750:case 25752:case 25753:case 25754:case 25755:case 25756:case 25757:case 25761:case 25762:case 25763:case 25764:case 25765:case 25766:case 25767:case 25768:case 25770:case 25773:case 25774:case 25775:case 25777:case 25779:case 25781:case 25783:case 25784:case 25785:case 25787:case 25788:case 25789:case 25794:case 25795:case 25798:case 25802:case 25803:case 25804:case 25805:case 25806:case 25807:case 25810:case 25816:case 25817:case 25820:case 25822:case 25823:case 25824:case 25825:case 25826:case 25828:case 25829:case 25830:case 25831:case 25832:case 25833:case 25834:case 25839:case 25840:case 25841:case 25842:case 25845:case 25848:case 25849:case 25853:case 25854:case 25856:case 25857:case 25858:case 25859:case 25860:case 25862:case 25863:case 25866:case 25867:case 25868:case 25869:case 25872:case 25873:case 25876:Ga();break;default:Wf()}Il(26),Pl(50),Il(266),jl(),Wf(),ic.endNonterminal(\"PairConstructor\",Vl)}function kl(){switch($l){case 78:ql(278);break;case 139:ql(187);break;case 161:ql(281);break;case 177:ql(178);break;case 187:ql(251);break;case 220:ql(247);break;case 223:ql(180);break;case 266:ql(191);break;case 83:case 122:ql(256);break;case 97:case 249:ql(149);break;case 111:case 222:ql(261);break;case 104:case 130:case 240:ql(165);break;case 135:case 197:case 255:ql(208);break;case 120:case 206:case 256:case 262:ql(167);break;case 121:case 125:case 167:case 188:case 194:case 230:case 231:ql(96);break;case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 133:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 268:case 269:case 272:case 273:case 276:ql(144);break;default:Wl=$l}if(Wl==25735||Wl==25797||Wl==25855){Wl=uc(21,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xf(),oc(21,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(21,t,-2)}}}switch(Wl){case-2:case 19:case 25671:case 25673:case 25674:case 25675:case 25676:case 25678:case 25680:case 25681:case 25682:case 25683:case 25684:case 25685:case 25686:case 25687:case 25689:case 25690:case 25691:case 25692:case 25694:case 25695:case 25697:case 25698:case 25699:case 25702:case 25703:case 25704:case 25705:case 25706:case 25707:case 25709:case 25710:case 25711:case 25712:case 25713:case 25714:case 25719:case 25720:case 25721:case 25722:case 25723:case 25724:case 25725:case 25726:case 25727:case 25729:case 25730:case 25732:case 25733:case 25734:case 25736:case 25737:case 25738:case 25739:case 25742:case 25743:case 25747:case 25748:case 25750:case 25752:case 25753:case 25754:case 25755:case 25756:case 25757:case 25761:case 25762:case 25763:case 25764:case 25765:case 25766:case 25767:case 25768:case 25770:case 25773:case 25774:case 25775:case 25777:case 25779:case 25781:case 25783:case 25784:case 25785:case 25787:case 25788:case 25789:case 25794:case 25795:case 25798:case 25802:case 25803:case 25804:case 25805:case 25806:case 25807:case 25810:case 25816:case 25817:case 25820:case 25822:case 25823:case 25824:case 25825:case 25826:case 25828:case 25829:case 25830:case 25831:case 25832:case 25833:case 25834:case 25839:case 25840:case 25841:case 25842:case 25845:case 25848:case 25849:case 25853:case 25854:case 25856:case 25857:case 25858:case 25859:case 25860:case 25862:case 25863:case 25866:case 25867:case 25868:case 25869:case 25872:case 25873:case 25876:Ya();break;case-3:break;default:Xf()}Il(26),Hl(50),Il(266),Xf()}function Ll(){ic.startNonterminal(\"ArrayConstructor\",Vl),Pl(69),Il(272),$l!=70&&(jl(),G()),Pl(70),ic.endNonterminal(\"ArrayConstructor\",Vl)}function Al(){Hl(69),Il(272),$l!=70&&Y(),Hl(70)}function Ol(){ic.startNonterminal(\"BlockExpr\",Vl),Pl(281),Il(280),jl(),of(),Pl(287),ic.endNonterminal(\"BlockExpr\",Vl)}function Ml(){Hl(281),Il(280),uf(),Hl(287)}function _l(){ic.startNonterminal(\"FunctionDecl\",Vl),Pl(147),Il(245),jl(),$a(),Il(22),Pl(35),Il(98),$l==31&&(jl(),U()),Pl(38),Il(158),$l==80&&(jl(),Dl()),Il(122);switch($l){case 281:Pl(281),Il(280),jl(),of(),Pl(287);break;default:Pl(134)}ic.endNonterminal(\"FunctionDecl\",Vl)}function Dl(){ic.startNonterminal(\"ReturnType\",Vl),Pl(80),Il(253),jl(),Ls(),ic.endNonterminal(\"ReturnType\",Vl)}function Pl(e){$l==e?(jl(),ic.terminal(i.TOKEN[$l],Jl,Kl>fc?fc:Kl),Xl=Jl,Vl=Kl,$l=Ql,$l!=0&&(Jl=Gl,Kl=Yl,Ql=0)):zl(Jl,Kl,0,$l,e)}function Hl(e){$l==e?(Xl=Jl,Vl=Kl,$l=Ql,$l!=0&&(Jl=Gl,Kl=Yl,Ql=0)):zl(Jl,Kl,0,$l,e)}function Bl(e){var t=Xl,n=Vl,r=$l,i=Jl,s=Kl;$l=e,Jl=lc,Kl=cc,Ql=0,Va(),Xl=t,Vl=n,$l=r,$l!=0&&(Jl=i,Kl=s)}function jl(){Vl!=Jl&&(ic.whitespace(Vl,Jl),Vl=Jl)}function Fl(e){var t;for(;;){t=hc(e);if(t!=22){if(t!=37)break;Bl(t)}}return t}function Il(e){$l==0&&($l=Fl(e),Jl=lc,Kl=cc)}function ql(e){Ql==0&&(Ql=Fl(e),Gl=lc,Yl=cc),Wl=Ql<<9|$l}function Rl(e){$l==0&&($l=hc(e),Jl=lc,Kl=cc)}function Ul(e){Ql==0&&(Ql=hc(e),Gl=lc,Yl=cc),Wl=Ql<<9|$l}function zl(e,t,r,i,s){throw t>=ec&&(Zl=e,ec=t,tc=r,nc=i,rc=s),new n.ParseException(Zl,ec,tc,nc,rc)}function oc(e,t,n){sc[(t<<5)+e]=n}function uc(e,t){var n=sc[(t<<5)+e];return typeof n!=\"undefined\"?n:0}function hc(e){var t=!1;lc=cc;var n=cc,r=i.INITIAL[e],s=0;for(var o=r&8191;o!=0;){var u,a=n<fc?ac.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<fc?ac.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<13)+o-1;o=i.TRANSITION[(p&31)+i.TRANSITION[p>>5]],o>8191&&(r=o,o&=8191,cc=n)}r>>=13;if(r==0){cc=n-1;var f=cc<fc?ac.charCodeAt(cc):0;return f>=56320&&f<57344&&--cc,zl(lc,cc,s,-1,-1)}if(t)for(var d=r>>9;d>0;--d){--cc;var f=cc<fc?ac.charCodeAt(cc):0;f>=56320&&f<57344&&--cc}else cc-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return ac},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=ac.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+ac.substring(e.getBegin(),Math.min(ac.length,e.getBegin()+64))+\"...\"},this.parse_XQuery=function(){ic.startNonterminal(\"XQuery\",Vl),Il(277),jl(),o(),Pl(25),ic.endNonterminal(\"XQuery\",Vl)};var Wl,Xl,Vl,$l,Jl,Kl,Ql,Gl,Yl,Zl,ec,tc,nc,rc,ic,sc,ac,fc,lc,cc};r.getTokenSet=function(e){var t=[],n=e<0?-e:r.INITIAL[e]&8191;for(var i=0;i<289;i+=32){var s=i,o=(i>>5)*4235+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&15)+r.EXPECTED[a>>4]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[71,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,40,30,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,40,40],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,355,371,387,423,423,423,415,339,331,339,331,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,440,440,440,440,440,440,440,324,339,339,339,339,339,339,339,339,401,423,423,424,422,423,423,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,338,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,71,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,30,30,30,30,30,30,30,30,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,40,30,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,40,40,40,40,40,40,40,40,40,40,40,40,30,30,40,40,40,40,40,40,40,70,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,40,30,40,30,30,40],r.INITIAL=[1,24578,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289],r.TRANSITION=[32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,18432,18508,18512,18508,18508,18471,18503,18452,18508,18544,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22565,22594,54694,22641,32640,25253,32640,22707,32640,32640,18907,32640,40804,19219,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22757,32640,23442,32640,20728,22822,22912,62853,22949,23023,32640,25253,37379,72986,32640,32640,18907,32640,23058,40482,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,23090,32640,70756,57235,23625,57174,23143,53889,57205,23194,32640,44590,57237,72986,32640,32640,18907,32640,23058,18925,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,22132,19073,46732,23294,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,23361,32640,61740,23437,23807,23824,22912,35136,23474,23607,32640,25253,32640,72986,32640,32640,18907,32640,40461,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,57592,32640,53140,23657,43708,23704,23789,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,39259,23856,32640,32640,23893,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,73053,22069,23965,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,24031,32640,23861,32640,22776,24082,22912,56240,24206,24329,32640,25253,32640,24379,32640,32640,18907,32640,23058,57529,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,24415,24449,24453,24440,24534,24485,24515,24566,24596,24628,32640,32105,32640,72986,32640,32640,18907,32640,23058,21807,31154,45903,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,24678,32640,61740,24746,48361,53140,24789,24808,24825,24857,32640,27397,32640,72986,32640,32640,18907,32640,23058,21807,31154,45563,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,24907,32640,61740,32640,32640,52064,24984,25013,61799,25045,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,25095,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,54034,25151,25188,25171,25235,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,25302,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,25340,32640,61740,24702,35413,25353,25385,25402,58363,25449,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,25499,32640,61740,32640,32640,53140,25538,25575,25558,25622,32640,25253,32640,72986,32640,32640,49347,54782,64809,35297,64457,32024,25672,25724,32640,25308,42746,72012,48724,25775,59604,63895,70062,53329,26051,44572,32640,32640,53365,69246,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,36217,25878,32640,32640,25912,56403,72012,72012,47453,69896,25776,64787,25947,25982,26472,26016,26050,68602,32640,32640,21278,65491,41507,72012,47768,59999,36922,55439,25983,53287,66001,26051,68608,32640,35129,65495,72012,26084,25776,26132,25983,66375,26051,26181,26227,36550,62167,71378,26264,56947,53286,26299,56814,66968,50229,37146,26336,26407,64681,37193,26609,67516,26450,26504,26590,60773,47253,26654,26722,26771,49912,26461,51539,26820,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,29428,26976,69042,27027,27107,32640,25253,32640,27176,32640,32640,18907,32640,35800,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,27212,32640,18617,32640,32640,53140,27264,27332,41428,27379,32640,25253,32640,27446,36386,32640,18907,32640,23058,40482,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,27496,32640,61740,32640,32640,45704,22912,32640,27545,27614,32640,25253,32640,27679,32640,32640,49347,54782,51035,35297,32640,32024,32640,27715,32640,25308,72012,72012,48724,25776,59604,25983,61672,26051,26051,49853,32640,32640,70980,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,40010,32640,32640,25692,32640,68393,72012,72012,27753,25776,25776,39830,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,27795,25776,60349,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,27836,32640,26232,27985,34535,60068,27930,27958,60099,28032,32640,32366,32640,72986,32640,32640,73079,29194,30273,28620,31154,44986,32640,18612,18649,18757,18789,18959,32755,28084,30249,28403,29274,28141,28173,28885,36451,32640,24875,69179,19041,62458,19134,40819,21681,28259,30189,28317,28376,29214,30382,28201,30288,28732,66570,19251,21244,41014,19334,19366,19398,28435,28285,28497,28109,28529,28561,28593,28652,28684,28716,19661,19735,19811,19878,19910,19942,28764,21709,32781,28826,28935,28991,29023,29361,30055,20090,20138,20211,20265,29171,28465,29246,28344,29334,29302,29393,20579,20709,20774,29460,29082,29111,29139,29492,29611,20949,21030,29555,29643,29675,28857,29707,21310,29804,29832,29864,29896,29992,30024,30105,30173,28959,30221,29583,29053,28794,28227,30320,30352,29523,30414,30442,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,30485,32640,61740,55714,40332,67370,30532,30549,30500,30596,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,25063,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,62487,66570,19251,64424,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,30661,19661,19735,19811,19878,19910,19942,30758,30851,33683,30826,30858,20058,19907,21927,19969,20090,20138,20211,20265,30890,63521,30967,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,32640,31025,31042,31089,31121,32640,25253,32640,72986,41921,32640,18907,32640,23058,19161,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31186,32640,61740,32640,32640,53140,31304,31321,61422,31368,32640,25253,32640,72986,38336,32640,18907,32640,23058,19597,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31436,32640,22917,32640,32640,53140,31488,31505,63455,31552,32640,25253,32640,72986,23911,32640,18907,32640,23058,20233,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,31603,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31688,32640,61740,27887,32640,57839,22912,31734,24347,31775,32640,25253,32640,31840,32640,32640,18907,32640,57508,20515,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22912,32640,62571,27379,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,46497,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,52315,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32497,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,20179,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,31980,32640,32640,49347,54782,64809,51195,32640,32024,32640,31979,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,69771,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,41903,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,32012,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,57111,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,27513,32056,32087,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,31793,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32154,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32191,32640,61740,32640,32640,53140,32266,32219,32317,32348,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,32398,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,32449,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22912,32640,32640,32541,32640,25253,32640,72986,32640,32640,18907,32640,23058,40482,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32639,61740,32640,32640,53140,32606,32625,66147,32673,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,32724,21452,21374,21431,32813,21618,21650,32920,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22912,32640,32640,27379,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,33014,72814,65242,23329,65262,33049,33078,33110,33141,72172,33868,38406,33224,33302,35892,33415,33497,33529,33657,32640,70241,33715,23262,70547,65483,72012,56115,31942,25776,33771,25983,62395,26051,60426,53e3,43338,33820,20169,33900,28052,33936,72012,34004,34096,25776,69679,34153,25983,34209,34305,26051,34381,34413,59316,60982,34567,18580,43988,66280,56105,34613,34671,54769,57995,34763,50540,69616,34835,44365,69116,72659,27683,51215,45101,34941,55781,57901,25776,68182,34981,25983,35037,38017,43551,35100,35168,46148,32692,38542,69316,67857,54357,35200,37506,35270,39191,36089,32640,37090,24260,50683,56669,60278,35348,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,43929,35445,35530,35582,50980,66874,47849,48295,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,35651,72814,32640,32640,53140,35689,35718,35750,35781,32640,25253,32640,32640,32640,32640,42703,63159,35832,71490,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,71083,54414,54421,64131,72012,55872,25809,25776,60149,25844,25983,63179,26051,26051,34327,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,35952,27144,30726,72012,63213,63138,25776,69714,35989,25983,42068,36035,26051,36069,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,20456,36134,36191,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,64516,72814,48426,59530,63767,36272,36304,36336,36367,32640,36432,25203,32640,32640,41660,37716,55922,36483,36530,48415,59494,31702,18855,62820,64973,39682,72012,36599,25776,18725,36659,69934,36699,26051,52493,36750,23246,55732,34581,32640,18679,55301,36783,36820,35485,36918,36954,37494,37030,64702,65892,37178,34467,32640,37225,65319,32640,68393,72012,37261,33962,25776,37316,55427,25983,39119,39566,26051,49047,43098,37375,42559,23999,65491,72012,48479,51277,25776,37411,39842,45287,53287,26051,67220,70527,32640,37538,37571,37131,46827,23541,55996,67894,53288,53572,47622,37618,25915,66600,37659,46843,32872,37796,37836,46302,47046,68392,23524,65621,25983,37889,41315,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,37927,37988,38060,47849,36159,34716,26535,44815,38151,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,20106,72814,32509,23162,53140,38224,38253,38285,38316,32640,25253,32640,32640,60657,39330,34441,50711,54836,51195,33270,38384,46719,22206,33192,38438,72385,38511,38616,40937,20657,38673,38705,39528,38892,38940,32640,47380,49323,32640,70823,64131,72012,32968,25809,25776,45195,25844,25983,46666,26051,26051,58683,38996,32640,59450,25692,27180,22361,39052,64136,40912,42209,25776,39090,66443,25983,39151,60300,26051,39223,32640,32640,36102,70444,72012,71366,65683,25776,39291,39362,35619,34803,26051,43538,70527,72942,37229,65495,39402,46827,39434,39492,52767,39560,39598,39731,22659,32640,64131,71378,25776,29955,53286,26051,46302,19837,68392,68106,33972,25983,39769,58918,26609,71375,56493,39511,67952,33375,70146,67746,39807,39877,27300,39932,39984,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,22609,72814,27464,30794,40060,40119,40148,40180,40211,40263,40295,40364,40412,40514,40546,40606,40667,40699,40731,40783,20976,40854,40994,52527,25308,41046,39699,41078,46357,49141,41137,44544,41236,41286,41368,47192,41460,41554,41610,40087,41703,41735,41816,41872,41968,42030,42100,42250,42282,42373,42458,42490,42522,42554,42591,31571,42679,24113,42735,42778,42826,42887,59586,42933,43014,20677,52796,43080,37857,50773,19009,50153,72778,68055,66201,43130,61992,43205,43285,43380,36003,43457,50341,43583,43639,62580,43704,43740,65764,46827,43772,55996,43804,43857,43893,43961,72604,44020,44104,67022,44136,44196,44228,44289,44397,41399,46788,44452,69369,44513,44648,70208,20438,68896,51376,63626,44257,54317,44622,67433,55113,55250,49487,51457,67801,44680,44712,34716,38736,44788,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,54076,72814,67462,71804,46979,44874,44903,44935,44966,65157,25253,32640,32640,45018,45029,45061,36627,47904,71490,70229,49986,32640,30141,65148,45093,45133,72012,45175,25776,67154,25983,61672,45240,26051,53e3,32640,32640,25682,32640,30614,64131,72012,62187,25809,25776,34052,25844,25983,58051,26051,26051,68586,34467,32640,32640,25692,49974,68393,36788,72012,33962,51715,25776,55427,25983,45283,39566,26051,45319,43098,32640,32640,22533,65491,72012,65748,51277,25776,40635,39842,48131,53287,26051,72059,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,26195,32640,30913,33383,31947,68516,43425,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,38767,44815,45355,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,72990,32640,53140,45461,45480,45512,45543,32640,25253,25880,32640,32640,32640,49347,54782,64809,65216,32640,32024,32640,29772,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,26944,43348,64131,72012,72012,45595,25776,25776,45631,25983,25984,26051,26051,26018,58552,32640,45666,62963,32640,45736,45143,72012,33962,47777,25776,55427,45634,25983,39566,62106,26051,66507,32640,61374,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,45776,65495,72012,45833,25776,43236,25983,48970,26051,35378,19759,45883,40885,45935,34121,45988,46059,68691,46114,46509,48784,46180,46232,52911,56583,46294,61320,46334,46389,52972,46541,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,57068,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,37061,32640,46592,32640,23927,23933,35920,72528,46641,71255,46698,32640,41638,46765,32640,32640,25308,72012,32982,31942,25812,62010,25983,52465,26051,62071,44572,32640,32640,32640,32640,46875,64131,72012,72012,46928,25776,25777,25844,25983,25846,26051,26051,48238,66922,32640,32640,32640,58432,34888,72012,72012,24139,25776,25776,64186,25983,25983,64365,26051,26051,68602,32640,31139,32640,65491,72012,59125,47768,25776,23575,39842,25983,43409,26051,51585,68608,32640,40326,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,23989,59115,71381,31947,25983,51580,26788,46560,61892,58181,67203,61301,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,48851,72814,23672,46964,47011,47078,47108,47140,47171,32640,41336,32640,50620,20998,40574,47224,47285,49169,47359,32640,35316,31404,32640,22498,71540,47426,22395,47485,41998,47553,68243,35005,43487,49590,47654,45801,22675,32476,32285,47707,67491,67589,47739,47809,47521,53771,47881,39370,54202,70106,63727,47936,58552,32640,49793,48007,32640,65551,71979,37586,48049,48729,71596,33444,48130,48163,50320,48235,48270,34864,70560,48327,48393,48458,72887,48523,38468,37956,42313,48632,55501,51516,36886,48664,48761,48816,50855,27414,41840,48883,63268,48941,45429,49017,55015,49079,32640,22725,23734,49111,51113,69533,55593,49224,46302,49298,68392,71381,31947,25983,51580,58698,26609,49388,58232,70503,49450,42622,70146,67746,49519,60834,49912,26461,39900,47849,56608,49551,26535,44815,49622,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,69860,72814,32640,32640,53140,22912,46609,49741,49772,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,57444,31942,38479,62010,25983,49825,26051,53559,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,59709,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,61385,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,55063,32640,32640,32640,32640,51342,72012,72012,34031,25776,25776,21586,25983,25983,37804,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,52831,72814,72305,49953,50018,50050,50069,50101,50132,70815,25253,24050,32640,72261,50206,50261,50293,50389,50456,50572,49266,32159,46476,50609,46896,49653,37284,50652,61556,51136,34792,50743,43516,41182,50834,50887,32640,37764,32640,32640,39657,23757,50924,50956,53683,55377,51012,52437,51082,71275,51168,51247,58552,31456,32640,51318,32640,68393,71632,34909,33962,25776,51408,55427,25983,51489,51571,26051,51617,51676,60646,71309,32640,65491,66269,72012,47768,51714,36922,67551,25983,53287,50411,26051,51682,70346,19987,51747,72012,24952,25776,68123,51821,47327,51856,50424,31808,72723,44072,71378,24163,55203,53286,67732,46302,62840,68392,67136,45208,51824,51580,51892,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,49192,51996,52096,48579,26535,57041,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32641,72814,32640,52167,20380,52202,52231,52263,52294,52373,25253,38352,32640,52375,52359,29926,52407,61167,51195,57599,32024,25590,52525,32640,52559,51778,52613,52685,43173,52736,25950,43825,49580,44319,53632,52043,52828,32640,32640,32640,58759,38563,72012,52863,54749,25776,52943,55231,25984,38908,53056,26018,58552,53105,32640,22853,53172,39020,53205,55838,69472,53239,53488,67539,53276,33788,39566,53320,63643,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,53361,32640,72366,71378,53397,57660,53286,53431,46302,32640,68392,71381,47833,35238,66390,37193,26609,71375,60465,43860,63958,50482,38641,53073,53467,53538,49912,26461,39900,47849,36159,48078,53604,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,53715,36751,53803,53858,53921,53950,53982,54013,68341,65423,54066,22337,73196,54108,54140,54172,54234,54389,39321,25417,42341,50174,54455,44050,56059,66616,54504,54555,45851,57679,42130,56789,64232,60925,56829,19692,32640,54689,69055,20609,57455,72012,54726,52653,25776,54814,63908,25984,61227,36498,26018,58552,32640,47394,24383,68318,72870,72012,54868,18707,25776,69705,54929,25983,71927,54995,26051,43915,55047,31632,29738,32574,55095,55145,55282,55174,55347,55409,55471,55533,55625,55661,26850,67349,33333,55693,55764,55813,55904,55954,45409,55563,59673,58326,64010,31239,37627,56028,56147,63574,71739,56202,48600,52021,33017,44420,56272,51439,56304,26558,56379,49469,56435,56525,55629,58860,53658,56557,38796,56640,56760,53746,56861,56918,47849,36159,34716,35068,57014,26905,57100,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,57143,60501,46140,53140,57269,57298,57330,57361,57393,21867,57487,53826,57561,73137,57631,57725,57757,57818,64532,33845,25743,28903,32640,30718,48491,57871,57933,57965,50507,34177,46420,65902,58083,44572,34502,27347,47675,69192,32417,27057,58115,45744,58167,58213,58473,58264,36980,26375,58296,44349,69977,37742,31057,58358,32640,35957,68393,49673,58395,33962,23558,65824,55427,66456,46015,39566,60313,47611,68602,32640,47038,58431,65491,72012,72012,58464,25776,27804,58505,25983,57693,26051,26051,58542,33253,32640,51913,22383,49691,64312,64327,50524,46027,71028,38028,53132,32640,21514,49356,67641,68454,61634,65986,49249,32640,68392,71381,31947,25983,51580,39737,67971,58592,35498,68821,42982,65031,58624,58730,58791,58892,49912,26461,39900,47849,36159,34716,60897,62262,58971,59003,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,53024,32640,59046,59088,59157,59186,59218,59249,26690,25253,32640,62512,59314,32640,21399,45956,59348,59428,60204,32024,59282,59482,59526,27721,62325,42794,59562,37343,41105,59653,46262,57786,56728,42158,59014,59705,59741,32640,32640,64131,27582,72012,25809,51286,25776,25844,68525,25984,26051,69412,26018,38086,59766,53173,30453,31873,68393,59807,72012,38182,56458,25776,67880,68261,25983,39566,61247,26051,68602,40380,32640,32640,65491,72012,59857,47966,60005,45599,39842,71940,53287,26051,59892,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,71116,32640,59931,71378,25776,29955,53286,26051,56227,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,36718,59969,24280,60037,60131,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,54423,32640,20742,60181,32843,60251,67710,54291,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,29420,32640,32640,32640,64131,72012,72012,60345,25776,25776,60381,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,53207,72012,47768,27763,36922,39842,71874,53287,26051,60418,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,70720,71381,60458,35226,48985,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,36240,60497,23383,53140,60533,60561,60593,60624,23405,25467,22160,33169,60689,60747,60715,60805,60866,60957,32640,36400,61023,26995,32640,33355,55315,59825,61082,65831,61145,47313,61199,61279,67236,61352,32640,30073,61417,71794,61454,22979,61508,38584,61544,61588,56170,61624,61666,64623,61704,26051,48694,58552,65333,72472,61736,61772,61831,56082,61881,64292,46200,55981,63076,32888,56329,36998,50357,58842,68602,61924,31336,31217,32949,61962,72012,54897,52135,36922,43253,54949,53287,62059,62103,54635,69791,32640,71552,72012,20633,25776,66700,25983,70631,26051,43048,60991,32640,27575,38860,26267,35612,71431,26052,46302,39252,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,59396,61050,48909,62138,49921,43861,50802,44756,26873,47849,36159,34716,33560,62235,62294,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,69266,62427,62544,62612,62644,62673,62705,62736,31256,49878,31910,32640,62790,62885,62917,44164,69556,51644,62949,62995,45696,32640,19278,63027,63108,63211,63245,54342,53506,63300,61672,63378,63410,44572,63450,21770,63487,58560,32640,57422,68884,61512,63553,47513,61592,63606,63675,29960,51050,63717,37895,63759,18562,21217,40028,32560,63799,59860,58135,43158,25776,63843,70614,25983,63875,63940,26051,63990,64042,64442,21262,32640,64117,58399,38848,47768,24174,64168,39842,56347,53287,26051,64218,68608,27898,31520,65495,64264,51931,42855,67656,26365,64359,39180,64397,32640,22880,64131,71378,25776,29955,53286,26051,56886,32234,41489,41766,51964,60386,51580,64489,54657,64564,34064,72128,35550,42184,64655,39628,49921,43861,62758,40962,68714,54610,64734,36847,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,25270,32640,23111,32122,64856,64887,64919,64950,31389,65005,27232,34519,65063,65120,65088,61113,65189,65294,65365,65397,32640,65455,65527,65583,65653,65730,65796,42647,52704,58025,65863,65934,65966,66033,64072,66099,26683,30564,66131,66179,66246,41522,66312,64765,26100,66344,66422,62027,63346,66488,48098,66539,38119,40439,30690,24714,66648,46809,22991,67082,66680,47975,66732,66764,58510,66819,66851,26304,66906,66954,31272,32640,67e3,67054,67114,21544,34639,21568,67186,67268,67325,67402,54264,43607,48017,34273,42426,67583,30935,67621,41784,67688,48203,67778,64824,41671,20315,24236,67833,44481,37470,67926,59378,68003,32640,68087,68155,34696,68214,39952,68293,68373,68425,68486,66787,35862,33375,70146,67746,49921,43861,49912,58817,68777,68557,68640,68746,58655,44815,68853,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,64085,32640,48353,53140,68928,68957,68989,69020,32640,27125,27632,30788,27143,32640,31656,64595,69087,69148,32640,32024,32640,69224,32640,49895,69298,39058,69348,25776,49418,25983,70024,69401,45323,46448,24757,70970,32640,27865,31743,52581,61849,69444,69504,54523,54583,69588,33465,69648,59899,33588,69746,58552,69823,32640,32640,69855,38964,72012,72012,65611,69892,25776,72113,69928,25983,39566,69966,26051,41254,35657,32640,32640,61476,72012,72012,62354,25776,36922,70009,25983,26418,26051,26051,34349,32640,18845,26622,72012,27075,25776,39460,70056,67293,70094,41204,31858,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,45386,70138,70178,58860,33375,70146,67746,49921,43861,49912,26461,46082,68666,70273,34716,26535,44842,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,22217,68030,66060,33739,70331,54472,70378,70409,32640,25253,32640,32640,32640,32640,19302,70476,56692,51195,59775,43315,32640,32640,27647,25308,37113,62203,70592,53244,62010,70663,47583,56714,33625,44572,32640,32640,28e3,32640,29763,64131,55855,72012,25809,51949,25776,25844,56967,25984,26051,33611,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,50577,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,25506,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,70701,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,59056,32640,70752,70788,70855,70884,70916,70947,32640,25253,32640,32640,32640,32640,41578,49709,71012,71060,32640,32024,32640,32640,71115,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,38108,32640,24932,72012,72012,52641,25776,25776,71858,25983,25983,43032,26051,26051,68602,32640,71148,32640,65491,51789,34949,47768,56478,42901,39842,71181,63325,63418,36037,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32154,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25640,43672,32640,22790,58939,37441,71228,41160,51195,32640,22183,71515,71307,32640,25308,72012,71341,31942,35465,71413,36667,59621,26051,71463,42401,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,41936,32640,68393,66214,72012,71584,38192,25776,42053,70669,25983,39566,39775,26051,68602,35405,32640,32640,65491,71628,72012,48552,25776,36922,26149,25983,53287,71664,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,37690,32640,25253,66067,32640,32640,32640,71710,26739,42964,71771,20325,32024,32640,32640,32640,27283,72012,59937,31942,25776,52893,25983,56982,26051,51860,44572,23321,32640,32640,37539,32640,38825,72013,72012,71836,53399,25776,71906,39845,25984,71678,53435,26018,58552,30134,32640,32640,32640,68393,71972,72012,63054,52123,25776,62376,48188,25983,24297,36872,26051,68602,32640,32640,33904,65491,72012,72011,47768,42218,36922,39842,71196,53287,26051,72045,68608,32640,48843,65495,72012,51360,25776,65698,25983,53288,26051,45251,32640,34258,23504,63811,25776,68806,63685,26051,46302,23041,68392,72091,44738,54963,34731,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,72160,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,72268,72234,40231,72204,72300,72337,72417,72449,32640,25253,71149,72986,32640,32640,22011,19703,24646,21807,31154,19779,32640,18612,18649,18757,18789,18959,21985,22069,72504,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,70431,53140,72560,72589,60219,72636,32640,25253,32640,72986,50892,50890,18907,32640,40751,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61930,32640,32640,19846,72691,72708,30629,72755,32640,25253,32640,72810,59270,52170,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22311,22069,72846,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22912,32640,32640,72919,32640,25253,32640,32640,32640,32640,49347,54782,64809,35297,32640,32024,32640,32640,32640,25308,72012,72012,48724,25776,59604,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,34485,32640,23212,23229,52327,72974,32640,32640,32640,72986,32640,32640,18907,32640,23058,21807,31154,43659,32640,18612,18649,18757,18789,18959,21985,22069,72504,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,73022,21452,21374,21431,73111,21618,21650,73169,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,1,24578,3,0,0,0,0,0,0,0,180523,180523,180523,180523,0,188716,188716,188716,180523,180523,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,0,188716,180523,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,139264,147456,188716,188716,188716,188716,188716,188716,188716,188716,188716,131072,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,367,188716,180523,188716,188716,1,24578,3,0,0,4366336,0,0,0,180523,188716,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2289,0,2290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2368,2369,0,0,2371,0,0,0,0,2376,0,0,0,0,0,0,0,0,0,0,0,4276224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,307,0,0,5767168,0,0,0,4857856,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,5414912,5447680,0,0,5562368,5636096,5685248,0,5750784,5873664,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,1877,521,521,521,521,521,521,521,521,521,1889,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,59821,57886,59823,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,58853,57909,57909,58857,57909,57909,57909,57909,57909,57909,57909,57909,58871,0,0,5636096,5873664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5873664,0,0,0,0,0,0,0,5480448,4358144,4358144,4358144,4358144,4857856,4874240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5259264,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5414912,4358144,5447680,4358144,5464064,4358144,5480448,5562368,4358144,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,977,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,3144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1262,0,0,0,0,0,0,0,0,0,0,0,0,0,5873664,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,0,1140,0,0,1145,0,4857856,4874240,0,0,4923392,5562368,4358144,4358144,4358144,5636096,4358144,5685248,4358144,4358144,5750784,4358144,4358144,4358144,4358144,4358144,5873664,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6275072,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4923392,4358144,4358144,4358144,4358144,4358144,0,4923392,0,0,0,0,4366336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2755,0,0,0,0,0,0,0,0,0,0,0,0,2766,0,0,0,0,0,0,4825088,0,0,5177344,0,0,0,0,5701632,0,0,0,0,0,0,0,0,0,0,5808128,0,0,0,0,4792320,4833280,0,0,5701632,0,5242880,0,0,0,0,0,0,0,5341184,0,0,0,0,0,0,0,0,0,0,0,0,5627904,5652480,0,5701632,0,0,0,0,0,0,0,4358144,4358144,4358144,4825088,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5177344,4358144,4358144,4358144,4358144,4358144,5242880,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5341184,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5627904,5652480,4358144,5701632,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,483328,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,4358144,4358144,4358144,4358144,4358144,4358144,5341184,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5627904,5652480,4358144,5701632,4358144,4358144,5808128,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,1051,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,0,0,6422528,0,0,0,0,0,0,0,0,0,0,0,5619712,0,0,0,0,0,0,0,5726208,5758976,0,0,5791744,0,0,0,0,0,0,0,1151,1278,0,0,0,0,0,0,1285,0,0,0,0,0,0,0,1290,0,0,0,0,0,0,0,0,521,521,521,521,521,848,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,0,6479872,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4931584,4939776,4358144,4358144,4358144,4358144,4358144,4358144,5054464,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5210112,4358144,4358144,4358144,4358144,5292032,4358144,4358144,4358144,4358144,5365760,4358144,4358144,4358144,5455872,4358144,4358144,4358144,4358144,4358144,5554176,5570560,5578752,5619712,5668864,4358144,4358144,4358144,5791744,5816320,4358144,5857280,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6119424,4358144,6168576,4358144,4358144,4358144,4358144,6242304,4358144,6291456,4358144,6316032,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6463488,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4931584,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,6463488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4931584,4939776,0,0,0,0,0,0,5054464,0,0,0,0,0,0,0,0,5210112,0,0,0,0,5292032,0,0,0,0,5365760,0,0,0,5455872,0,0,0,0,0,5554176,5570560,5578752,5619712,5668864,0,5578752,5619712,5668864,0,0,0,5791744,5816320,0,5857280,0,0,0,0,0,0,0,0,0,0,0,0,0,6119424,0,6168576,0,0,0,0,0,6242304,0,6291456,0,6316032,0,6291456,0,6316032,0,0,0,0,0,0,0,0,0,6463488,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4931584,4939776,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,491520,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,5578752,5619712,5668864,4358144,4358144,4358144,5791744,5816320,4358144,5857280,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6119424,4358144,6168576,4358144,4358144,4358144,4358144,4358144,6242304,4956160,4964352,0,0,0,0,0,0,0,0,0,0,5218304,0,0,0,0,5799936,0,5881856,0,0,0,0,0,0,0,0,0,6373376,6389760,0,0,0,0,0,1758,0,0,1761,0,1763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,977,0,0,0,0,0,0,0,0,0,0,0,6488064,6103040,0,0,0,0,0,6184960,5316608,0,0,5644288,0,0,0,0,0,0,0,0,0,0,6217728,0,0,0,0,0,0,0,0,0,3384,0,0,0,3388,0,0,0,0,0,3394,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,0,0,5390336,5308416,5488640,0,0,5070848,5431296,0,6430720,0,0,5160960,0,0,0,0,0,0,0,0,0,0,0,4784128,0,0,0,0,0,0,0,0,3623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2359296,417,417,0,0,0,0,0,0,0,0,0,6283264,6332416,0,0,0,5881856,0,5382144,0,0,0,0,0,0,6266880,4784128,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4915200,4358144,4956160,4972544,4358144,4358144,4358144,4358144,4358144,4358144,5070848,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5218304,4358144,5267456,4358144,4358144,5308416,5316608,4358144,4358144,4358144,5431296,4358144,5488640,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5799936,4358144,4358144,5881856,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6103040,4358144,4358144,4358144,6184960,4358144,4358144,6283264,4358144,4358144,6332416,4358144,4358144,4358144,6389760,4358144,4358144,6430720,6438912,4358144,4358144,4358144,6266880,6488064,0,0,0,6266880,6488064,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3149,0,0,0,0,3154,0,0,0,0,0,0,0,0,0,0,0,4358144,6430720,6438912,0,0,0,0,0,0,4784128,0,0,0,4849664,0,0,0,0,0,4915200,0,4956160,4972544,0,0,0,0,0,0,5070848,0,0,0,0,0,0,0,5218304,0,0,6103040,0,0,0,6184960,0,0,0,6283264,0,0,6332416,0,0,0,6389760,0,0,6430720,6438912,4784128,4358144,4358144,4358144,4849664,4358144,4358144,4358144,4358144,4358144,4915200,0,5660672,5718016,0,5865472,0,0,6037504,0,0,6078464,0,0,6340608,0,6455296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,325,326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5472256,0,0,0,6209536,0,0,0,0,6176768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4898816,0,5709824,0,0,0,0,0,1790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,0,0,2348,0,0,0,0,0,0,0,0,5283840,0,0,0,0,5251072,0,6414336,5832704,0,5955584,0,0,4358144,4358144,4841472,4358144,4358144,4358144,4898816,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,368640,0,0,0,0,0,0,4857856,4874240,0,0,4923392,4358144,5111808,4358144,4358144,4358144,4358144,4358144,5283840,4358144,4358144,4358144,4358144,5472256,5521408,4358144,4358144,4358144,5595136,5709824,5718016,4358144,5824512,5865472,4358144,4358144,5922816,4358144,4358144,6021120,4358144,6037504,4358144,4358144,6078464,6111232,4358144,6176768,6209536,4358144,6234112,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,3408,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1172,0,0,0,0,0,0,0,0,0,4358144,6078464,6111232,4358144,6176768,6209536,6234112,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,0,0,0,340,0,0,0,0,0,0,0,0,0,0,0,0,0,388,0,139264,147456,0,0,0,0,0,6037504,0,0,6078464,6111232,0,6176768,6209536,0,6234112,0,0,0,0,0,0,0,0,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,0,0,3773,0,3627,3775,0,0,3778,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,4024,521,4026,521,521,4028,521,57886,57886,57886,57886,57886,57886,57886,0,6021120,0,6037504,0,0,6078464,6111232,0,6176768,6209536,0,6234112,0,0,0,0,0,0,0,4358144,4358144,4841472,4358144,4358144,4358144,4898816,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,499712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,4358144,4358144,4358144,4358144,4358144,4358144,5111808,4358144,4358144,4358144,4358144,4358144,5283840,4358144,4358144,4358144,4358144,5472256,5521408,4358144,4358144,4358144,4358144,5595136,5709824,5718016,4358144,5824512,5865472,4358144,4358144,5922816,0,5029888,5038080,0,0,5103616,5201920,0,0,0,0,0,0,0,0,0,0,0,0,0,6406144,5357568,0,5505024,0,0,0,0,0,5890048,0,0,0,0,0,521,521,521,521,521,521,521,521,521,1873,521,521,521,521,521,521,521,521,1884,521,521,521,521,521,521,521,521,521,3216,521,521,521,521,0,0,57886,57886,57886,57886,57886,60569,57886,60570,57886,57886,57886,57886,57886,57886,57886,57886,57886,58842,57886,57886,57886,57886,50657,58754,977,57909,57909,58854,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59962,59963,57909,57909,57909,57909,57909,57909,59970,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,6160384,0,5095424,5349376,0,5275648,0,0,0,0,0,0,0,0,0,0,0,5947392,0,0,0,0,0,0,0,0,0,0,0,0,0,301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0,0,0,0,0,6471680,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4997120,4358144,4358144,5038080,4358144,4358144,4358144,5095424,5103616,4358144,4358144,5201920,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5890048,4358144,4358144,4358144,6029312,4358144,4358144,4358144,4358144,6160384,4358144,4358144,4358144,4358144,5890048,4358144,4358144,4358144,6029312,4358144,4358144,4358144,4358144,6160384,4358144,4358144,4358144,4358144,4358144,4358144,6406144,0,0,0,0,0,0,0,0,4997120,0,0,5038080,0,0,0,0,6406144,0,0,0,0,0,0,0,0,4997120,0,0,5038080,0,0,0,5095424,5103616,0,0,5201920,0,0,0,0,0,0,0,0,0,0,0,5890048,0,0,0,6029312,0,0,0,0,6160384,0,0,0,0,0,0,0,6406144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4997120,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6406144,4358144,4358144,4358144,0,0,0,4890624,0,0,0,0,0,0,0,0,0,5898240,5963776,0,0,6193152,0,0,5406720,6397952,5300224,5234688,5423104,0,0,0,0,5988352,0,0,6135808,6307840,0,5996544,4800512,0,6356992,0,0,0,5496832,0,0,0,0,0,5611520,0,0,0,0,0,0,0,1187,0,0,1190,1191,0,0,0,0,1195,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,782,0,0,0,0,0,0,0,786,0,0,0,0,0,0,0,0,0,0,0,0,801,4947968,5021696,5529600,0,0,5169152,0,0,0,4800512,4808704,4358144,4358144,4890624,4358144,4947968,4358144,4358144,4358144,5046272,4358144,4358144,4358144,4358144,5185536,4358144,5234688,5300224,4358144,4358144,5406720,5529600,4358144,4358144,4358144,5898240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6307840,4358144,4358144,6356992,6381568,6397952,4800512,4808704,0,0,4890624,0,4947968,0,0,0,5046272,0,0,0,0,5185536,0,5234688,5300224,0,0,5406720,5529600,0,0,0,0,5898240,0,0,0,0,0,0,0,0,6307840,0,0,6356992,6381568,6397952,4800512,4808704,0,0,4890624,0,0,6356992,6381568,6397952,4800512,4808704,4358144,4358144,4890624,4358144,4947968,4358144,4358144,4358144,5046272,4358144,4358144,4358144,4358144,5185536,4358144,5234688,5300224,4358144,4358144,5406720,5529600,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4907008,0,5079040,6094848,0,0,0,4358144,4907008,4358144,5079040,4358144,5226496,4358144,5742592,4358144,4358144,4358144,6094848,0,4907008,0,5079040,0,5226496,5898240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6307840,4358144,4358144,6356992,6381568,6397952,5021696,4358144,4358144,5021696,0,0,0,4980736,0,0,0,0,0,5373952,5734400,6045696,0,0,0,0,0,2306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2290,0,0,0,0,0,0,0,6152192,0,0,0,6316032,0,0,0,0,5816320,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2778,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2803,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6258688,6447104,0,0,6127616,0,6348800,5906432,0,5537792,3627,0,0,0,0,5939200,0,0,5677056,6365184,4866048,0,6070272,5545984,5152768,0,0,6144e3,4358144,4866048,4882432,4358144,0,0,0,0,0,4825088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5177344,0,0,0,0,0,0,0,0,0,5324800,5373952,5537792,5545984,5586944,5734400,5971968,0,6045696,0,6070272,0,0,0,0,6348800,0,4866048,4882432,0,4980736,0,0,0,0,0,0,0,0,521,831,521,521,521,521,521,521,521,521,521,521,521,877,521,521,521,521,895,521,521,57886,57886,58249,0,5324800,5373952,5537792,5545984,5586944,5734400,5971968,0,6045696,0,6070272,0,0,0,0,6348800,4358144,4866048,4882432,4358144,4980736,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5324800,5373952,5537792,5545984,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,6348800,0,4866048,4882432,0,4980736,0,0,0,0,5537792,5545984,5586944,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,4358144,6348800,4358144,6144e3,0,6144e3,0,4988928,5005312,0,0,0,0,5775360,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,3441,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3454,521,521,521,0,0,0,0,0,0,57886,57886,60242,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60250,57886,57886,57886,57886,57886,57886,57886,57886,57886,60293,57886,57886,57886,60296,60297,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59917,57909,57909,57909,57909,57909,57909,57909,5693440,0,6496256,5144576,5136384,0,5914624,4358144,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,0,0,5005312,0,0,0,512e4,5136384,0,0,0,0,0,0,0,0,0,0,6324224,0,0,5005312,0,0,0,512e4,5136384,0,0,0,0,0,0,0,0,0,0,6324224,4358144,0,0,900,900,900,4825988,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,5178244,900,900,900,900,900,5219204,900,5268356,900,900,5309316,5317508,900,900,900,5432196,900,5489540,900,900,900,900,900,900,900,900,900,5800836,900,900,5882756,900,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,5914624,5914624,0,0,0,0,0,5513216,5783552,0,3627,0,0,0,0,0,0,1759,0,0,0,0,0,0,0,0,0,0,0,0,1772,0,1774,0,0,0,1778,0,0,0,1782,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,0,5013504,0,0,6053888,0,0,0,0,6012928,4358144,4358144,5013504,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6053888,4358144,4358144,0,0,5013504,0,0,0,0,0,0,685,0,0,0,0,0,0,692,367,367,367,0,0,0,0,0,0,0,0,0,0,0,705,0,0,0,0,0,0,0,0,6053888,0,0,0,0,0,5013504,0,0,0,0,0,0,0,0,0,6053888,0,0,0,4358144,4358144,5013504,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5799936,4358144,4358144,5881856,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6103040,4358144,4358144,4358144,6184960,4358144,4358144,4358144,6283264,4358144,4358144,6332416,4358144,4358144,4358144,4358144,4358144,6053888,4358144,4358144,4358144,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,5193728,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,901,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,0,0,0,0,0,0,0,5414912,0,5447680,0,5464064,0,5480448,5562368,0,0,0,5636096,0,5685248,0,0,5750784,0,0,0,0,0,5873664,0,0,0,0,0,0,0,0,0,5193728,0,0,0,0,0,0,0,0,0,0,0,0,0,5193728,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,5193728,4358144,0,1959,0,0,0,4825088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5177344,0,0,0,0,0,0,715,0,717,0,0,0,0,0,0,0,0,0,0,0,0,0,732,0,0,0,0,0,0,0,0,0,1189,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,1250,1252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,362,0,0,0,0,0,0,367,0,295,0,0,5742592,0,0,0,6094848,0,0,4907008,0,5079040,0,5226496,0,5742592,0,0,0,6094848,0,4358144,4907008,4358144,5079040,4358144,5226496,4358144,5742592,4358144,4358144,4358144,6094848,4358144,5062656,0,0,0,4358144,5062656,4358144,4358144,4358144,4358144,4358144,0,5062656,0,0,0,0,0,6225920,0,5062656,0,0,0,0,0,6225920,4358144,5062656,4358144,4358144,4358144,0,900,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,0,0,0,0,0,0,746,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,762,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,2396,521,521,521,521,2400,521,521,521,521,521,521,521,521,521,521,521,3199,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1390,521,521,1394,521,521,521,521,521,1401,521,521,4358144,4358144,4358144,6225920,0,0,0,4816896,4358144,4358144,4358144,4358144,6086656,4816896,0,0,0,0,6086656,4816896,0,0,0,0,6086656,4816896,4358144,4358144,4358144,4358144,6086656,5087232,0,5931008,4358144,5332992,5980160,4358144,0,5332992,5980160,0,0,5332992,5980160,0,4358144,5332992,5980160,4358144,5439488,5128192,4358144,5128192,0,5128192,0,5128192,4358144,4358144,0,0,4358144,4358144,0,0,4358144,6004736,6004736,6004736,6004736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,0,0,0,0,0,0,0,0,1294,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2816,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,221645,221645,221645,461,461,461,461,461,461,461,461,461,461,461,461,461,221645,461,221645,221645,221645,461,221645,221645,221645,221645,221645,221645,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,327,328,329,330,0,0,0,0,0,0,0,0,0,0,221645,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1769,0,0,0,0,0,0,0,0,0,0,1780,0,0,0,0,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3414,0,0,0,0,3418,0,0,0,0,3423,0,0,0,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,237568,301,0,305,237568,0,0,0,0,0,0,0,0,0,0,0,0,0,302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,788,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,305,0,0,0,0,0,0,0,0,0,0,0,0,305,0,0,0,0,0,0,305,237982,147456,0,0,0,305,0,0,0,0,0,2334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2349,0,0,0,0,0,0,0,3406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3420,3421,0,0,0,0,3426,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,516096,0,0,0,0,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,0,305,0,0,0,0,0,521,521,521,521,521,521,1870,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2453,521,521,521,2456,521,521,521,521,521,2461,521,305,1,24578,3,0,0,4366336,0,0,0,0,0,65536,302,0,4268032,98304,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3626,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4210978,24578,3,0,0,296,0,0,0,0,296,0,0,0,0,0,0,0,0,0,245760,0,0,0,0,0,0,0,0,0,0,0,399,0,0,0,0,0,0,0,0,0,0,0,399,0,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,245760,0,0,0,0,245760,0,245760,0,245760,0,0,0,0,0,0,0,0,0,0,0,0,0,326,400,0,0,0,0,0,0,0,0,0,326,0,0,0,0,0,0,0,0,4210978,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212992,0,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1257,0,0,0,0,0,0,0,0,0,0,0,0,0,1270,0,0,2059,0,0,0,4825088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5177344,0,0,0,0,0,0,0,1730,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,311,310,0,0,0,310,310,311,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,262144,0,0,0,0,0,0,0,0,0,0,350,0,0,0,0,0,0,0,0,351,0,0,0,0,0,0,0,0,0,0,0,0,657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,673,674,0,0,0,0,0,0,262144,262144,262144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,301,0,0,0,262144,0,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,0,262731,0,0,0,0,0,521,521,521,521,521,3439,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3670,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60591,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59853,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60298,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,262731,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245760,245760,245760,245760,245760,245760,245760,0,0,0,0,0,0,0,0,0,0,278528,278528,0,0,131072,278528,0,0,0,278528,0,0,0,0,278528,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,333,0,0,0,0,0,0,0,0,0,0,0,333,384,0,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,0,278528,0,0,0,0,0,521,521,521,521,3438,521,521,521,521,3442,521,521,521,521,521,521,521,3448,521,521,521,521,521,521,521,521,521,1901,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1921,521,521,278528,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,262144,0,0,0,0,0,0,262144,262144,0,0,0,0,0,0,0,0,0,0,0,262144,262144,0,262144,0,0,0,139264,147456,262144,0,0,0,0,0,0,0,0,415,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,302,0,0,0,1,24578,3,0,0,4366336,0,0,0,0,0,301,631,0,4268032,305,634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,532480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,754,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,1506,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,3624,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2810,2811,0,0,0,0,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,286720,302,0,306,286720,0,0,0,0,0,0,0,0,0,0,0,0,0,722,0,0,0,0,0,0,0,0,0,733,0,0,0,0,733,0,739,0,0,0,0,0,306,0,0,0,0,0,0,0,0,0,0,0,0,306,0,0,0,0,0,0,306,139264,287138,0,0,0,306,0,0,0,0,0,2386,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2402,521,2404,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59830,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60836,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60274,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,0,306,0,0,0,0,0,521,521,521,3437,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3449,521,521,521,521,521,521,521,521,521,3464,521,3466,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,61250,57909,57909,61252,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,59994,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,306,1,24578,3,0,0,4366336,0,0,0,0,0,301,66168,0,4268032,305,98939,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,0,0,0,122880,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2352,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,303,303,303,0,0,303,303,295215,303,303,303,303,303,303,303,303,303,295215,373,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,368,303,0,295215,303,303,303,303,295285,295215,295215,295215,295215,295215,295215,303,303,303,303,303,303,295285,295215,295215,295215,303,303,303,295285,139264,147456,295215,295215,303,303,295215,303,303,131072,303,303,303,303,295215,303,303,303,303,295215,303,295215,295215,295215,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,295215,295215,295215,295215,295215,295215,303,303,303,295215,303,303,303,303,303,303,303,303,303,303,303,303,303,295215,303,295215,295215,295215,295215,295215,295215,295215,303,0,303,0,303,303,303,295215,303,303,303,295215,295215,303,295215,303,295215,295215,295215,295215,295215,295215,295215,295215,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295215,295215,295215,295215,295215,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4358144,4359045,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319488,0,0,0,0,0,0,0,0,0,352256,0,352256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2373,0,0,0,0,0,0,0,0,0,0,0,0,319488,0,0,0,0,0,0,319488,319488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1743,0,0,0,0,0,0,0,1751,1752,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,319488,0,0,0,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,0,0,0,0,319488,0,0,0,0,0,0,0,0,0,0,319488,0,0,0,0,0,0,0,0,0,319488,0,0,0,0,319488,0,319488,319488,319488,0,24578,3,0,0,4366336,253952,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5627904,0,0,0,0,0,0,0,0,0,0,0,0,0,4284416,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,327680,0,0,0,0,0,0,0,0,521,2389,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3219,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,60571,57886,57886,57886,57886,57886,57886,60579,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,327680,327680,327680,0,0,0,0,0,0,0,0,0,0,327680,327680,327680,327680,335872,327680,327680,327680,335872,327680,327680,327680,327680,327680,327680,0,0,0,0,0,0,0,0,0,49716,0,0,0,0,0,327680,49716,327680,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5627904,0,0,0,0,0,0,196608,0,0,0,106496,0,0,4284416,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,49152,977,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,6463488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4931584,4939776,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,344064,344064,344064,0,0,0,0,0,0,0,0,0,0,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,727,0,0,0,0,0,0,0,0,0,0,0,0,0,344064,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,356,357,358,359,0,0,0,0,0,0,0,0,0,367,0,295,0,0,0,0,0,4276224,1245,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352256,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,352256,0,0,0,0,0,0,131072,0,352256,352256,0,0,352256,0,0,352256,0,352256,0,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1197,0,367,367,0,1200,0,0,0,0,0,0,0,0,352256,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,0,0,0,0,0,0,0,0,706,0,0,1,291,3,0,0,0,297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3398,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,360448,360448,360448,0,0,0,0,0,0,0,0,0,0,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1226,0,0,0,0,0,0,0,0,0,0,0,0,0,360448,1,0,3,155941,155941,295,0,629,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1212,0,0,0,0,1217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4276224,1245,0,0,0,0,0,0,0,0,0,0,0,0,1259,0,0,0,0,0,0,0,0,0,0,0,0,0,1221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1188,0,58796,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59402,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58826,57886,57886,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59502,57886,0,2281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,739,0,0,0,2357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3428,0,57909,59926,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58906,57909,57909,59952,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57936,60009,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,60035,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60937,521,3212,521,521,521,521,521,521,521,521,521,521,521,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59387,59388,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60604,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60320,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,60702,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,3612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,369,0,0,0,57886,57886,60830,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60853,57886,57886,57936,57936,57936,57936,60914,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60057,57936,57936,57936,57936,61027,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,61045,57909,57909,57909,57909,57909,57909,57909,57909,57909,60634,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59493,57909,57909,57909,57909,57909,57909,57909,57909,57886,61048,57909,57909,57909,57909,57909,57909,57909,57909,57909,61056,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,60378,57936,57936,57936,57886,57886,57886,57886,61156,57886,57886,57886,57886,61157,61158,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,59997,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,61175,57909,57909,57909,57909,61176,61177,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61194,57936,0,0,0,0,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,61078,61079,57936,57936,57936,57936,61083,61084,57936,57936,57936,57936,57936,61088,57936,57936,57936,57936,57936,57936,57936,57936,57936,61195,61196,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,3177,521,521,521,521,521,521,3184,521,3186,521,521,521,57936,57936,57936,57936,57936,61270,57936,57936,57936,57936,57936,57936,61276,57936,57936,57936,61280,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,1791,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,672,0,0,0,0,0,0,0,3947,521,521,521,521,521,521,521,521,521,521,521,521,521,521,61306,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58312,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61322,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61338,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,3759,521,57886,61105,57886,0,0,0,0,0,0,0,0,0,0,0,57886,61439,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,61452,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,61465,57936,57936,57936,57936,57936,57936,57936,57936,57936,60413,57936,57936,57936,57936,57936,57936,60421,57936,57936,57936,57936,57936,60426,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,4077,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,0,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,521,57886,57909,57936,521,57886,57909,57936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1829,0,0,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,376832,376832,376832,0,0,0,0,0,0,0,0,0,0,0,0,0,1254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1268,1269,0,0,0,0,0,419,419,419,419,590,590,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,0,419,0,0,0,0,0,521,1866,521,521,521,521,521,521,1872,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,57886,57886,57886,57886,60568,57886,57886,57886,57886,57886,57886,60575,57886,60577,57886,57886,419,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,696,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2817,0,0,0,4268773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2380,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,307,0,0,0,0,0,0,0,0,0,0,0,0,721,0,0,0,0,0,0,0,0,731,0,637,731,0,735,736,637,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,393678,393678,393678,0,0,0,0,0,0,0,0,0,0,0,0,0,1309,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,4025,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,0,0,0,393678,0,393678,393678,393678,0,393678,393678,393678,393678,393678,393678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,425984,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,3176,521,521,521,521,521,3181,521,521,521,521,521,521,521,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,475136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,374,0,0,375,0,0,0,0,0,327,375,330,374,0,0,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,57887,521,57887,521,521,57887,521,521,57910,57887,521,521,57887,57887,57887,57910,0,0,0,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,0,420,0,0,0,0,0,521,3435,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1916,521,521,521,521,521,521,420,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,304,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,723,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,741,420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2791,0,0,1239,0,0,0,741,1246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,1322,521,521,521,521,521,521,521,2468,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60276,57886,57886,57886,57886,57886,57886,57886,57886,521,521,521,2468,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60305,57886,57886,0,0,0,2963,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417792,308,309,0,0,0,0,0,0,1815,0,0,0,0,0,0,0,0,1821,0,1823,0,0,0,0,0,0,0,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3127,0,0,0,0,3132,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,309,0,417792,417792,0,0,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,418101,417792,417792,418100,418101,417792,417792,418100,417792,418100,417792,0,0,0,0,0,0,0,0,417792,0,0,0,417792,0,0,0,0,0,0,0,0,0,0,0,309,309,309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1802,0,0,0,0,0,0,0,0,0,0,0,0,0,417792,1,24578,3,0,0,4366964,0,0,0,0,0,301,302,311296,4268032,305,306,0,434176,0,0,0,0,0,0,0,0,0,0,0,0,1846,0,0,0,0,0,0,0,0,0,0,0,0,0,1859,0,0,1860,0,0,900,900,5415812,900,5448580,900,5464964,900,5481348,5563268,900,900,900,5636996,900,5686148,900,900,5751684,900,900,900,900,900,5874564,900,900,900,900,900,900,900,900,900,6464388,0,0,0,0,976,976,976,976,976,976,976,976,976,976,976,4932560,4940752,976,976,976,976,976,4359044,4858756,4875140,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5260164,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5415812,4359044,5448580,4359044,5464964,4359044,5481348,5563268,4359044,4359044,4359044,5636996,4359044,5686148,4359044,4359044,5751684,4359044,4359044,4359044,4359044,4359044,5874564,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6275972,4359044,4359044,4359044,4359044,4359044,4359044,5342084,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5628804,5653380,4359044,5702532,4359044,4359044,5809028,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4907008,0,5079040,6094848,0,0,0,4358144,4907008,4358144,5079040,4358144,5226496,4358144,5742592,4358144,4358144,4358144,6094848,900,4907908,900,5079940,900,5227396,900,5243780,900,900,900,900,900,900,900,5342084,900,900,900,900,900,900,900,900,900,900,900,900,5628804,5653380,900,5702532,900,900,900,900,900,900,5211012,900,900,900,900,5292932,900,900,900,900,5366660,900,900,900,5456772,900,900,900,900,900,5555076,5571460,5579652,5620612,5669764,900,0,0,976,976,976,4826064,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,5178320,976,976,976,976,976,5112784,976,976,976,976,976,5284816,976,976,976,976,5473232,5522384,976,976,976,976,5596112,5710800,5718992,976,5825488,5866448,976,976,5923792,976,5243856,976,976,976,976,976,976,976,5342160,976,976,976,976,976,976,976,976,976,976,976,976,5628880,5653456,976,5702608,976,976,976,976,976,976,976,5260240,976,976,976,976,976,976,976,976,5415888,976,5448656,976,5465040,976,5481424,5563344,976,976,976,5637072,976,5686224,976,976,5751760,976,4358144,4358144,4358144,4358144,4358144,6463488,0,0,0,0,900,900,900,900,900,900,900,900,900,900,900,4932484,4940676,900,900,900,900,900,900,5055364,900,900,5112708,900,900,900,900,900,5284740,900,900,900,900,5473156,5522308,900,900,900,900,5596036,5710724,5718916,900,5825412,5866372,900,900,5923716,900,900,6022020,900,900,900,5792644,5817220,900,5858180,900,900,900,900,900,900,900,900,900,900,900,900,900,6120324,900,6169476,900,900,900,900,900,6243204,900,6292356,900,6316932,976,5055440,976,976,976,976,976,976,976,976,5211088,976,976,976,976,5293008,976,976,976,976,5366736,976,976,976,5456848,976,976,976,976,976,5555152,5571536,5579728,5620688,5669840,976,976,976,5792720,5817296,976,5858256,976,976,976,976,976,976,976,976,976,976,976,976,976,6120400,976,6169552,976,976,976,976,976,6243280,976,6292432,976,6317008,976,976,976,976,976,976,976,976,976,6464464,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4932484,4940676,4359044,4359044,4359044,4359044,4359044,4358144,4358144,4358144,4358144,4358144,4358144,0,900,900,900,900,900,900,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,4359044,5055364,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5211012,4359044,4359044,4359044,4359044,5292932,4359044,4359044,4359044,4359044,5366660,4359044,4359044,4359044,5456772,4359044,4359044,4359044,4359044,4359044,5555076,5571460,5579652,5620612,5669764,4359044,4359044,4359044,5792644,5817220,4359044,5858180,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6120324,4359044,6169476,4359044,4359044,4359044,4359044,4359044,6243204,4359044,6292356,4359044,6316932,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6464388,4358144,4358144,4358144,4358144,4358144,900,900,900,900,900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4931584,0,0,0,0,0,0,0,4358144,6430720,6438912,0,0,0,0,0,0,4785028,900,900,900,4850564,900,900,900,900,900,4916100,900,4957060,4973444,900,900,900,900,900,900,5071748,900,900,5194628,900,900,900,900,900,900,900,900,976,976,976,976,976,5194704,976,976,976,976,976,976,976,976,4359044,4359044,4359044,4359044,4359044,5194628,4359044,0,0,4785104,976,976,976,4850640,976,976,976,976,976,4916176,976,4957136,4973520,976,976,976,976,976,976,5071824,976,976,976,976,976,976,976,5219280,976,976,6357968,6382544,6398928,4801412,4809604,4359044,4359044,4891524,4359044,4948868,4359044,4359044,4359044,5047172,4359044,4359044,4359044,4359044,5186436,4359044,5235588,5301124,4359044,4359044,5407620,5530500,4359044,4359044,4359044,4359044,4359044,4923392,4358144,4358144,4358144,4358144,4358144,900,4924292,900,900,900,900,4366336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1255,0,0,0,0,0,0,0,0,0,1264,0,0,0,0,0,0,0,5268432,976,976,5309392,5317584,976,976,976,5432272,976,5489616,976,976,976,976,976,976,976,976,976,5800912,976,976,5882832,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,976,6104016,976,976,976,6185936,976,976,976,6284240,976,976,6333392,976,976,976,6390736,976,976,6431696,6439888,4785028,4359044,4359044,4359044,4850564,4359044,4359044,4359044,4359044,4359044,4916100,4359044,4957060,4973444,4359044,4359044,4359044,4359044,4359044,4359044,5071748,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5219204,4359044,5268356,4359044,4359044,5309316,5317508,4359044,4359044,4359044,5432196,4359044,5489540,4359044,4359044,4359044,4359044,4359044,6054788,4359044,4359044,4359044,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,5193728,4358144,4358144,4358144,4358144,4358144,4358144,4358144,900,900,900,5096324,5104516,900,900,5202820,900,900,900,900,900,900,900,900,900,900,900,5890948,900,900,900,6030212,900,900,900,900,6161284,900,900,900,900,6407044,976,976,976,976,976,976,976,976,4998096,976,976,5039056,976,976,976,5096400,5104592,976,976,5202896,976,976,976,976,976,976,976,5891024,976,976,976,6030288,976,976,976,976,6161360,976,976,976,976,976,976,976,6407120,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4998020,4359044,4358144,6078464,6111232,4358144,6176768,6209536,6234112,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,900,900,4842372,900,900,900,4899716,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,975,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,6300624,976,976,976,976,976,976,976,976,976,976,976,5809028,6038404,900,900,6079364,6112132,900,6177668,6210436,900,6235012,900,900,900,900,900,900,900,0,0,976,976,4842448,976,976,976,4899792,976,976,976,976,976,976,5874640,976,976,976,976,976,976,976,976,976,976,976,6276048,976,976,976,976,976,976,976,976,976,0,900,4359044,4359044,4359044,4359044,4359044,4359044,5112708,4359044,4359044,4359044,4359044,4359044,5284740,4359044,4359044,4359044,4359044,5473156,5522308,4359044,4359044,4359044,4359044,5596036,5710724,5718916,4359044,5825412,5866372,4359044,4359044,5923716,976,6022096,976,6038480,976,976,6079440,6112208,976,6177744,6210512,976,6235088,976,976,976,976,976,976,976,4359044,4359044,4842372,4359044,4359044,4359044,4899716,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5800836,4359044,4359044,5882756,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6103940,4359044,4359044,4359044,6185860,4359044,4359044,4359044,6284164,4359044,4359044,6333316,4359044,4359044,6022020,4359044,6038404,4359044,4359044,6079364,6112132,4359044,6177668,6210436,4359044,6235012,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4358144,4358144,4358144,900,900,900,0,0,0,0,0,0,0,1760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,0,419,0,4358144,4358144,4358144,5890048,4358144,4358144,4358144,6029312,4358144,4358144,4358144,4358144,6160384,4358144,4358144,4358144,4358144,4358144,4358144,6406144,900,900,900,900,900,900,900,900,4998020,900,900,5038980,4359044,5038980,4359044,4359044,4359044,5096324,5104516,4359044,4359044,5202820,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5890948,4359044,4359044,4359044,6030212,4359044,4359044,4359044,4359044,6161284,4359044,4359044,4359044,6226820,0,0,0,4816896,4358144,4358144,4358144,4358144,6086656,4817796,900,900,900,900,6087556,4817872,976,976,976,976,6087632,4817796,4359044,4359044,4359044,4359044,6087556,5087232,4358144,4358144,4358144,5898240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6307840,4358144,4358144,6356992,6381568,6397952,4801412,4809604,900,900,4891524,900,4948868,900,900,900,5047172,900,900,900,900,900,6054788,900,900,900,976,976,5014480,976,976,976,976,976,976,976,976,976,6054864,976,976,976,4359044,4359044,5014404,4359044,4359044,4359044,4359044,4359044,4359044,6407044,4358144,4358144,4358144,900,900,900,4890624,0,0,0,0,0,0,0,0,0,5898240,5963776,0,0,6193152,0,0,5406720,6397952,5186436,900,5235588,5301124,900,900,5407620,5530500,900,900,900,900,5899140,900,900,900,900,900,900,900,900,6308740,900,900,6357892,6382468,6398852,4801488,4809680,976,976,4891600,976,4948944,976,976,976,5047248,976,976,976,976,5186512,976,5235664,5301200,976,976,5407696,5530576,976,976,976,976,5899216,976,976,976,976,976,976,976,976,6308816,5899140,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6308740,4359044,4359044,6357892,6382468,6398852,5021696,4358144,4358144,5022596,900,900,0,4980736,0,0,0,0,0,5373952,5734400,6045696,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2785,0,2786,0,0,0,0,0,0,0,0,1843,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1263,0,0,0,0,0,0,0,0,4980736,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5324800,5373952,5537792,5545984,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,6348800,900,4866948,4883332,900,4981636,900,900,900,900,5325700,5374852,5538692,5546884,5587844,5735300,5972868,900,6046596,900,6071172,900,900,900,900,6349700,976,4867024,4883408,976,4981712,976,976,976,976,976,976,976,976,5325776,5374928,5538768,5546960,5587920,5735376,5972944,976,6046672,976,6071248,976,976,976,976,6349776,4359044,4866948,4883332,4359044,4981636,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5325700,5374852,5538692,5546884,5587844,5735300,5972868,4359044,6046596,4359044,6071172,4359044,4359044,4359044,4359044,6349700,4358144,6144e3,900,6144900,0,4988928,5005312,0,0,0,0,5775360,0,0,0,3627,0,0,0,0,0,655,0,0,521,521,521,521,521,845,521,521,861,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59499,57909,57909,57909,57886,5693440,0,6496256,5144576,5136384,0,5914624,4358144,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,900,900,5006212,900,900,900,5120900,5137284,900,900,900,900,900,900,900,900,900,900,6325124,976,976,5006288,976,976,976,5120976,5137360,976,976,976,976,976,976,976,976,976,976,6325200,4359044,4359044,4359044,6390660,4359044,4359044,6431620,6439812,4358144,4358144,4358144,6266880,6488064,900,900,900,6267780,6488964,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1767,0,0,0,0,0,1773,0,0,0,0,0,0,0,0,0,0,0,4359044,5006212,4359044,4359044,4359044,5120900,5137284,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6325124,5914624,5915524,0,0,0,0,0,5513216,5783552,0,3627,0,0,0,0,0,0,2285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1265,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,6300548,900,900,900,900,900,900,900,900,900,900,900,0,5013504,0,0,6053888,0,0,0,0,6012928,4358144,4358144,5013504,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6053888,4358144,4358144,900,900,5014404,900,900,900,900,6275972,900,900,900,900,900,900,900,900,900,0,0,977,976,976,976,976,976,4858832,4875216,976,976,976,976,976,976,976,976,976,976,0,0,0,0,900,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6300548,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4358144,4358144,900,5743492,900,900,900,6095748,900,976,4907984,976,5080016,976,5227472,976,5743568,976,976,976,6095824,976,4359044,4907908,4359044,5079940,4359044,5227396,4359044,5743492,4359044,4359044,4359044,6095748,4359044,5062656,0,0,0,4358144,5062656,4358144,4358144,4358144,4358144,4358144,900,5063556,900,900,900,900,900,6226820,976,5063632,976,976,976,976,976,6226896,4359044,5063556,4359044,4359044,4359044,4825988,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5178244,4359044,4359044,4359044,4359044,4359044,5243780,4359044,0,5931008,4358144,5332992,5980160,4358144,900,5333892,5981060,900,976,5333968,5981136,976,4359044,5333892,5981060,4359044,5439488,5128192,4358144,5129092,900,5129168,976,5129092,4359044,4358144,900,976,4359044,4358144,900,976,4359044,6004736,6005636,6005712,6005636,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2345,0,0,0,0,0,2351,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450560,0,0,0,0,0,0,450560,0,0,450560,0,450560,450560,450560,450560,450560,450560,0,0,0,0,131072,0,0,0,0,0,0,450560,0,0,0,450560,0,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1824,0,0,0,0,0,0,1729,0,0,0,0,0,0,450560,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2359296,0,2359296,0,0,0,2359296,0,2359296,2359296,2359296,2359296,2359296,2359296,4358144,6291456,4358144,6316032,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6463488,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,302,0,0,306,0,0,0,0,0,0,2335,0,0,0,0,0,2339,0,0,0,0,0,0,0,2343,2344,0,0,0,0,0,2350,0,0,0,0,0,0,1302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,2836,521,521,521,521,2840,521,521,4358144,6430720,6438912,901,0,0,0,901,0,4784128,0,0,0,4849664,0,0,0,0,0,4915200,0,4956160,4972544,0,0,0,0,0,0,5070848,0,0,0,0,0,744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,327,0,0,374,374,404,977,0,4784128,0,0,0,4849664,0,0,0,0,0,4915200,0,4956160,4972544,0,0,0,0,0,0,5070848,0,0,0,0,0,0,0,5218304,0,5267456,0,0,5308416,5316608,0,0,0,5431296,0,5488640,0,0,0,0,0,0,0,0,0,5799936,0,0,5881856,0,0,0,0,0,0,0,0,4358144,6078464,6111232,4358144,6176768,6209536,6234112,4358144,4358144,4358144,4358144,4358144,4358144,4358144,901,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,3653,521,521,521,521,521,521,521,521,521,521,521,3218,521,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60573,57886,60576,57886,57886,57886,6037504,0,0,6078464,6111232,0,6176768,6209536,0,6234112,0,0,0,0,0,0,0,977,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,0,0,6103040,0,0,0,6184960,0,0,0,6283264,0,0,6332416,0,0,0,6389760,0,0,6430720,6438912,0,0,0,0,0,0,0,0,459186,0,0,0,0,0,0,0,0,0,0,0,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459215,459372,459215,459215,459372,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2777,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5480448,0,0,0,0,0,0,0,0,0,0,5840896,5849088,0,1,24578,3,0,0,0,0,507904,0,0,0,507904,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507904,0,0,0,0,0,2796,0,0,0,0,0,0,0,0,0,0,0,2804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3385,3386,0,0,0,0,3391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2779,0,0,0,0,0,0,0,0,0,0,2789,0,0,0,2793,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2781,0,0,2784,0,0,0,0,2788,0,0,0,0,0,507904,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,442368,0,0,0,0,0,0,0,0,0,0,0,658,0,0,661,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1225,0,0,0,0,0,0,0,1233,0,0,0,0,0,0,1,24578,3,0,0,0,0,0,516096,0,0,0,516096,0,0,0,0,0,0,516096,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,2288,0,0,0,0,0,0,0,0,0,2297,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3152,0,0,0,0,0,0,0,0,0,0,0,0,0,516560,1,24578,0,0,0,4366336,0,0,548864,0,0,301,302,0,4268032,305,306,409600,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,2340,0,0,0,0,0,0,0,0,2347,0,0,0,0,0,0,2354,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,5914624,5914624,0,0,0,0,0,5513216,5783552,0,40960,0,0,0,0,0,0,2747,0,2749,0,0,2752,0,0,0,0,0,0,2757,0,0,0,2760,2761,0,0,0,0,0,0,0,0,521,521,521,521,521,521,855,521,521,521,521,521,874,521,521,521,521,892,521,521,521,57886,57886,57886,1,24578,4227364,0,0,0,0,0,0,298,0,0,0,298,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1227,0,0,0,0,0,0,0,0,0,0,0,0,0,540672,0,0,540672,0,0,0,540672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1857,0,0,0,0,0,0,0,0,1,24578,4227364,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,499712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2370,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,24578,3,155941,295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,636,0,0,0,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,0,0,0,0,742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,57887,57887,57887,57887,57887,57887,57887,57910,57910,57887,57887,57937,57887,57887,57887,57887,57887,57887,57887,57937,57937,57887,57887,57887,57887,57937,57937,57887,521,57887,57887,57887,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4399797,4399797,4399797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,358,0,0,399,0,0,0,0,0,139264,147456,399,410,0,423,410,1,24578,3,155942,295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1236,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,573440,0,573440,573440,573440,0,573440,573440,573440,573440,573440,573440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3628,0,0,0,3631,0,0,0,0,0,0,0,0,3639,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,573440,573440,573440,0,0,0,0,0,0,0,0,0,0,0,0,0,1819,1820,0,1822,0,0,0,0,0,0,0,0,0,0,0,0,0,1836,0,0,0,0,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4399798,311296,4399798,0,0,0,311296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4276224,0,0,0,0,0,0,0,0,0,0,0,0,0,1260,0,0,0,0,0,0,0,0,0,0,0,0,0,1847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1738,0,5300224,5234688,5423104,0,0,0,0,5988352,0,0,6135808,6307840,0,5996544,4800512,0,6356992,3627,0,0,5496832,0,0,0,0,0,5611520,0,0,0,0,0,0,0,1792,0,0,0,0,0,0,0,0,0,1801,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1818,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,326,326,376,0,0,0,0,0,0,0,0,0,0,1,24578,3,0,0,4366336,0,0,0,0,0,630,302,0,4268032,633,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2806,0,0,0,0,0,0,0,0,2814,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,581632,0,0,0,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,340,581632,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3172,0,521,521,521,521,521,521,521,521,521,521,521,3183,521,521,3187,521,521,6258688,6447104,0,0,6127616,0,6348800,5906432,0,5537792,3774,0,0,0,0,5939200,0,0,5677056,6365184,4866048,0,6070272,5545984,5152768,0,0,6144e3,4358144,4866048,4882432,4358144,4358144,4358144,0,901,900,900,900,900,900,4858756,4875140,900,900,900,900,900,900,900,900,900,900,900,900,900,5260164,900,900,900,900,900,900,900,900,6103940,900,900,900,6185860,900,900,900,6284164,900,900,6333316,900,900,900,6390660,900,900,6431620,6439812,0,0,0,0,5537792,5545984,5586944,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,4358144,6348800,4358144,6144e3,0,6144e3,0,4988928,5005312,0,0,0,0,5775360,0,0,0,3869,0,0,0,0,0,787,0,0,521,521,521,521,521,847,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60869,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59939,57909,57909,57909,57909,57909,57909,57909,57909,59946,57909,59948,57909,59951,57909,57909,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,5914624,5914624,0,0,0,0,0,5513216,5783552,0,3869,0,0,0,0,0,0,2822,0,0,0,0,0,0,0,0,0,2830,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,1938,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1387,521,521,521,521,521,521,521,521,521,521,521,521,521,0,310,311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3638,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,310,0,451,465,465,465,478,478,478,478,478,478,478,478,478,499,478,478,478,478,517,478,478,478,517,478,478,478,478,478,478,522,57888,522,57888,522,522,57888,522,522,57911,57888,522,522,57888,57888,57888,57911,57888,57888,57888,57888,57888,57888,57888,57911,57911,57888,57888,57938,57888,57888,57888,57888,57888,57888,57888,57938,57938,57888,57888,57888,57888,57938,57938,57888,522,57888,57888,57888,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,638,0,0,641,642,0,0,0,0,0,0,745,0,0,0,0,0,0,751,0,0,0,0,0,0,0,0,761,0,0,0,0,0,0,0,0,0,1279,0,0,0,0,1284,0,0,0,0,0,0,0,0,0,0,0,0,1292,0,0,0,0,0,0,0,0,743,0,0,0,0,638,0,0,0,0,0,0,0,0,0,0,758,0,0,0,0,764,0,0,768,0,0,0,0,0,0,3115,0,0,0,0,0,0,0,0,0,3121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1166,0,0,0,0,0,0,0,0,0,1175,0,1177,1178,0,0,0,0,0,0,0,776,0,0,0,0,780,0,0,0,0,0,0,0,784,0,0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,3114,0,0,0,0,0,3118,0,0,0,0,0,0,0,3124,3125,3126,0,0,0,0,0,0,0,0,0,0,1306,0,0,0,1310,0,0,0,0,1313,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61024,57886,57886,0,824,825,0,0,0,0,780,521,521,834,838,521,521,850,521,521,521,866,521,871,521,879,521,882,521,521,896,521,57886,57886,57886,57886,57886,57886,59898,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,59913,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59448,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59461,57909,57909,57909,57909,57909,57909,57909,58253,58257,57886,57886,58269,57886,57886,57886,58285,57886,58290,57886,58298,57886,58301,57886,57886,58315,57886,0,57909,57909,57909,58329,58333,57909,57909,58345,57909,57909,57909,58361,57909,58366,57909,58374,57909,58377,57909,57909,58391,57909,0,0,0,0,58290,57936,57936,57936,58404,58408,57936,57936,58420,57936,57936,57936,58436,57936,58441,57936,58449,57936,0,0,0,0,521,521,521,521,521,4172,521,57886,57886,57886,57886,57886,61522,57886,57886,57909,57909,57909,57909,57909,61528,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59544,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59557,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59545,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59014,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58452,57936,57936,58466,57936,834,838,1128,882,521,521,0,58257,58253,58478,58301,57886,57886,155941,1138,0,0,1141,0,0,1146,0,0,0,0,0,0,0,0,6103040,0,0,0,6184960,0,0,0,6283264,0,0,6332416,0,0,0,6389760,0,0,6430720,6438912,977,0,0,0,0,0,1210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1231,0,0,0,0,0,0,0,0,377,0,362,0,0,0,0,0,0,0,0,0,362,0,0,0,0,139264,147456,0,0,0,0,0,57886,58831,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59964,57909,57909,57909,57909,59969,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,1753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1777,0,0,0,0,0,0,0,0,1188,0,0,0,0,0,0,0,0,0,0,0,367,367,1199,0,0,0,0,0,0,0,0,0,688,0,0,0,0,367,367,367,0,0,697,0,0,0,0,0,0,0,704,0,0,0,0,0,0,0,1813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2815,0,0,1861,0,0,0,0,521,521,521,521,521,521,521,521,521,521,1874,521,521,521,521,521,521,521,521,521,1887,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61044,57886,57886,57886,57909,57909,57909,57909,57909,521,521,521,521,521,1929,521,521,1932,521,521,521,521,521,521,521,521,521,521,1945,521,521,521,521,521,521,1951,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59828,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59380,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,61166,57909,57909,57909,61169,57909,57909,57909,57909,521,58754,1960,57886,57886,57886,57886,57886,59311,57886,57886,57886,57886,57886,59317,57886,57886,57886,57886,57886,57886,57886,57886,57886,59330,57886,57886,57886,57886,57886,57886,57886,57886,57886,60835,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60845,57886,57886,57886,57886,57886,57886,57886,57886,57886,60854,57886,50657,2060,57909,57909,57909,57909,57909,59411,57909,57909,57909,57909,57909,59417,57909,57909,57909,57909,57909,57909,57909,57909,57909,59430,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58890,57909,57909,57909,58893,57909,57909,57909,57909,57909,57909,57909,58900,57909,57909,58904,57909,57909,57909,57909,57909,57909,57909,57909,59472,57909,57909,59475,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59489,57909,57909,57909,57909,57909,57909,59495,57909,57909,57909,57909,57909,57909,57886,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3151,0,0,0,3155,0,3157,0,0,0,0,0,0,0,0,57936,57936,57936,57936,57936,59507,57936,57936,57936,57936,57936,59513,57936,57936,57936,57936,57936,57936,57936,57936,57936,59526,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59579,57936,57936,57936,57936,57936,57936,59587,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,3105,0,0,0,0,0,0,57936,57936,59568,57936,57936,59571,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59585,57936,57936,57936,57936,57936,57936,59591,57936,57936,57936,57936,57936,57936,521,2256,521,521,521,57886,59605,57886,57886,57886,2265,0,2266,0,0,0,0,2268,0,2269,0,0,0,0,0,0,0,0,0,2275,0,0,0,0,0,0,791,0,521,521,521,521,521,521,521,521,859,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,2265,0,2266,0,0,0,0,2268,0,2269,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212992,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1737,1738,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417792,0,0,0,0,417792,0,0,0,0,0,309,0,309,0,0,0,0,2331,0,2333,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1826,0,1828,0,0,0,0,0,0,0,1835,0,0,521,2464,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59829,57886,57886,59832,57886,57886,57886,57886,57886,57886,57886,57886,60265,57886,57886,57886,57886,60268,57886,57886,60270,57886,60271,57886,57886,57886,57886,57886,57886,57886,57886,57886,60280,57886,57886,60284,59840,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59860,57886,57886,57886,57886,57886,57886,57886,57886,57886,61032,57886,57886,57886,57886,57886,57886,61038,57886,61040,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61089,57936,57936,57936,57909,57909,57909,57909,59929,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59949,57909,57909,57909,57909,57909,57909,57909,57909,58886,57909,58888,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,60375,57936,60376,57936,57936,57936,57936,57936,57936,57936,57936,57936,60012,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60032,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60070,57936,57936,57936,2405,521,521,521,521,59836,57886,57886,57886,57886,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,2399,521,521,521,521,521,521,521,521,521,521,521,2446,521,521,521,521,521,521,521,2452,521,521,521,521,521,521,2457,521,521,521,521,521,521,521,521,521,521,521,521,2847,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2889,521,521,521,521,521,521,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,60315,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60323,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58924,57909,57909,58928,57909,57909,57909,57909,57909,58935,57909,57909,57909,58942,57909,0,57886,57936,57936,57936,57936,60359,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60370,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,60380,57936,0,0,0,0,521,521,521,4170,4171,521,521,57886,57886,57886,61520,61521,57886,57886,57886,57909,57909,57909,61526,61527,57909,57909,57909,57936,57936,57936,61532,57936,57936,60435,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,301,305,0,0,0,0,3104,0,0,0,3108,0,0,0,0,0,0,3142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,262731,0,0,0,0,0,0,0,0,3113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3123,0,0,0,0,0,0,0,0,0,0,0,0,3136,57909,60627,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60636,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60644,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61057,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61062,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,60676,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60685,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60693,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,0,0,0,0,0,0,0,0,0,0,0,0,0,1192,1193,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,57936,57936,57936,57936,57936,57936,57936,60915,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60933,57936,60935,57936,57936,57936,57936,57936,57936,57936,57936,57936,60703,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,2748,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352256,0,352256,352256,0,0,0,0,521,3948,521,3950,521,521,521,521,521,521,521,521,521,521,521,57886,61307,57886,61309,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58807,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59347,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61165,57909,57909,57909,57909,57909,57909,57909,61170,57909,57909,57909,57909,61323,57909,61325,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,61339,57936,61341,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,3859,521,61204,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,4012,0,0,0,4015,0,0,521,521,521,521,4020,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,61377,57886,57886,57886,57886,57886,57909,60861,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60352,57909,57909,57909,57909,57909,57909,0,0,0,312,313,314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2765,0,0,0,0,0,0,426,0,131072,0,0,0,426,0,0,0,0,0,426,452,0,0,0,452,452,452,452,452,452,452,452,452,452,452,452,452,516,452,516,516,516,452,516,516,516,516,516,516,523,57889,523,57889,523,523,57889,523,523,57912,57889,523,523,57889,57889,57889,57912,57889,57889,57889,57889,57889,57889,57889,57912,57912,57889,57889,57939,57889,57889,57889,57889,57889,57889,57889,57939,57939,57889,57889,57889,57889,57939,57939,57889,614,57889,57966,57966,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,385024,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,57909,57909,58370,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58445,57936,57936,57936,57936,57936,57936,57936,57936,57936,61199,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,820,780,0,0,0,0,0,0,754,0,0,754,0,0,0,0,0,754,754,0,0,815,0,0,0,0,0,0,0,0,0,754,0,0,0,0,0,0,2770,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2379,0,0,0,0,0,57909,57909,57909,57909,57909,57909,60312,57909,57909,57909,57909,60316,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60345,57909,57909,57909,57909,60349,57909,57909,57909,60354,57909,57909,57909,57909,60381,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60432,57936,57936,57936,57936,57936,60436,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,301,305,0,0,0,0,0,0,0,0,0,0,0,0,3387,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2807,0,0,0,0,0,2812,0,0,0,0,0,57886,61381,57886,61383,57886,57886,61385,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,61395,57909,61397,57909,57909,61399,57909,57909,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57936,61409,57936,61411,57936,57936,61413,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2271,0,0,0,0,0,0,0,0,0,350,351,352,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,319,319,427,428,131072,435,428,436,427,435,436,0,315,436,448,453,466,466,466,479,479,479,479,479,479,479,479,479,479,501,501,501,514,514,515,515,501,515,515,515,501,515,515,515,515,515,515,524,57890,524,57890,524,524,57890,524,524,57913,57890,524,524,57890,57890,57890,57913,57890,57890,57890,57890,57890,57890,57890,57913,57913,57890,57890,57940,57890,57890,57890,57890,57890,57890,57890,57940,57940,57890,57890,57890,57890,57940,57940,57890,615,57965,57965,57965,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,401408,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1198,367,367,0,0,1201,0,0,0,1204,0,1206,0,679,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5242880,0,0,0,0,0,5603328,0,0,0,0,0,0,0,0,0,0,0,0,57909,57909,57909,57909,57909,58378,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59553,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58453,57936,57936,57936,57936,521,521,521,883,521,521,0,57886,57886,57886,58302,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,3411,0,0,0,3415,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,57886,521,57886,521,521,57886,521,521,57909,57886,521,521,57886,57886,57886,57909,521,521,521,58754,901,57886,57886,58758,57886,57886,58762,57886,57886,57886,57886,57886,57886,57886,57886,58776,57886,58781,57886,57886,58785,57886,57886,58788,57886,57886,57886,57886,57886,57886,58279,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,58322,57909,57909,57909,57909,57909,57909,58355,57909,57909,57909,58876,57909,57909,58880,57909,57909,58883,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58902,57909,57909,57909,57909,57909,57909,57909,57936,58951,57936,57936,57936,57936,57936,57936,57936,57936,58965,57936,58970,57936,57936,58974,57936,57936,58977,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,3861,0,0,0,3863,0,0,0,0,0,0,3627,3870,0,1723,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,385,521,521,521,1927,1928,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2433,521,521,521,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59320,57886,57886,57886,57886,57886,57886,57886,57886,57886,59332,57886,57886,57886,57886,57886,57886,57886,57909,57909,61494,57909,61495,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,61502,57936,61503,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60018,57936,60020,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60396,57936,57936,57936,57936,57936,57936,57936,60401,57936,57936,57936,57936,57936,57886,57886,59370,59371,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59420,57909,57909,57909,57909,57909,57909,57909,57909,57909,59432,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59446,57909,57909,57909,59450,57909,57909,59455,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59990,57936,57936,57936,57936,57936,57936,57936,59998,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,59470,59471,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,643,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3447,521,521,521,521,521,521,521,521,521,1341,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3200,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,61016,57886,57886,57886,61019,57886,57886,57886,57886,57886,57886,57886,57886,57886,59566,59567,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3162,0,0,521,2437,521,521,521,521,521,521,521,521,521,521,521,521,521,2450,521,521,521,521,521,2454,2455,521,521,521,521,521,521,521,521,521,1374,521,1376,521,521,521,521,521,521,521,1389,521,521,521,521,521,521,521,521,521,521,521,1404,57886,57886,57886,57886,59869,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59882,57886,57886,57886,57886,57886,59886,59887,59888,57886,57886,57886,57886,57886,57886,57886,58800,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58822,57886,57886,57886,57886,0,0,0,2744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114688,0,0,57886,57886,57886,60288,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,0,0,0,826,0,0,521,521,521,521,521,849,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,60863,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60875,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59447,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60672,3137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1837,0,0,0,3166,0,0,3169,0,0,0,0,0,0,0,3173,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2451,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3379,0,0,0,0,0,0,0,3383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3422,0,0,0,0,0,0,3429,521,3458,3459,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60827,57886,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,640,0,0,0,0,0,0,0,695,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,883,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,2267,0,1142,0,0,0,0,2270,0,1147,0,0,0,0,0,0,0,0,0,0,1795,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,57909,60884,57909,60886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,6e4,57936,57936,57936,57936,57936,57936,57936,60911,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60926,57936,60928,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60045,60046,57936,57936,57936,57936,57936,57936,60053,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61072,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59595,57936,57936,57936,1881,521,4010,0,4011,0,0,0,0,0,0,0,521,4018,521,4019,521,521,521,4023,521,521,521,521,521,521,521,57886,61375,57886,61376,57886,57886,57886,57886,57886,57886,60264,57886,57886,57886,57886,57886,57886,57886,60269,57886,57886,57886,57886,57886,57886,57886,60275,57886,57886,57886,57886,57886,57886,57886,60283,57886,61380,57886,57886,57886,57886,57886,57886,57886,57886,57909,61389,57909,61390,57909,57909,57909,61394,57909,57909,57909,57909,57909,57909,57909,57909,57936,61403,57936,61404,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60388,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,3376,0,0,61408,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,1710,0,0,0,0,0,0,1717,0,0,0,0,0,0,0,0,0,0,0,0,0,2338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2294,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,4213,57886,57886,57886,61559,57909,57909,57909,61561,57936,57936,57936,61563,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,521,521,521,521,521,521,0,2471,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59858,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,376,0,131072,0,0,0,376,0,0,438,444,0,376,454,467,467,467,480,480,480,480,480,480,480,480,480,480,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,525,57891,525,57891,525,525,57891,525,525,57914,57891,525,525,57891,57891,57891,57914,57891,57891,57891,57891,57891,57891,57891,57914,57914,57891,57891,57941,57891,57891,57891,57891,57891,57891,57891,57941,57941,57891,57891,57891,57891,57941,57941,57891,525,57891,57891,57891,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229376,0,491520,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1180,1181,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,719,0,0,0,0,0,0,0,0,0,729,0,0,0,0,0,0,0,0,0,738,0,0,1166,0,1298,0,0,0,0,0,0,0,0,0,1284,0,0,0,1312,1180,0,0,0,0,0,0,0,0,521,521,1321,521,521,521,0,0,0,0,0,0,57886,60241,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58814,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,521,521,521,521,521,1371,521,521,1373,521,521,521,521,1378,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1403,521,521,521,521,521,521,521,521,3196,521,521,521,521,521,521,521,521,521,521,521,3203,521,521,521,521,521,521,521,521,521,521,521,1902,521,521,521,521,521,521,521,521,1913,521,521,521,521,521,521,521,521,521,521,521,1935,521,521,521,1941,521,521,521,521,521,521,521,521,521,1950,521,521,521,521,1956,521,521,521,521,58754,901,57886,57886,58759,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58786,57886,57886,57886,57886,57886,57886,57886,57886,57886,61247,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61263,57909,57909,57936,57909,57909,57909,57909,58881,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58896,57909,57909,57909,57909,57909,57909,57909,58905,57909,57909,58907,57909,57909,57909,57909,58912,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58937,57909,57909,57909,57909,0,58812,57936,57936,58948,57936,0,0,0,0,521,521,4169,521,521,521,4173,57886,57886,61519,57886,57886,57886,61523,57886,57909,57909,61525,57909,57909,57909,61529,57909,57936,57936,61531,57936,0,0,0,0,4168,521,521,521,521,521,521,61518,57886,57886,57886,57886,57886,57886,57886,61524,57909,57909,57909,57909,57909,57909,57909,61530,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61274,57936,57936,57936,57936,57936,57936,57936,521,57886,0,3938,0,0,3941,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1883,521,521,521,521,521,521,521,521,521,2876,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,60819,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57936,57936,57936,57936,57936,57936,57936,58999,57936,57936,59001,57936,57936,57936,57936,59007,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59519,57936,57936,57936,57936,57936,57936,57936,57936,57936,59530,57936,57936,57936,57936,57936,59032,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,0,0,0,0,1712,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2410,521,521,521,2259,57886,57886,57886,57886,59608,2265,0,2266,0,0,0,0,2268,0,2269,0,0,0,0,0,2272,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2408,521,521,521,521,521,521,521,521,2416,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1397,521,521,521,521,521,57886,59893,57886,59895,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,59916,57909,57909,57909,57909,59920,57909,57909,57909,57909,57909,57909,57909,57909,59958,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59971,57909,57909,57909,57909,57909,59975,59976,59977,57909,57909,57909,57909,57909,57909,59982,57909,59984,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,59999,57936,57936,57936,57936,60003,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60683,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,3369,521,57886,60716,57886,0,0,0,0,0,57936,57936,57936,57936,57936,60065,57936,60067,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,2739,2266,0,2740,2269,0,0,0,0,0,0,3622,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,415,415,0,0,0,0,0,60285,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,0,0,0,1156,1157,1158,1159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,791,0,0,0,0,0,0,0,791,0,0,57909,57909,57909,60310,57909,60311,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59460,57909,57909,57909,57909,57909,59467,57909,521,521,3191,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3204,521,521,521,521,521,521,521,3210,57886,57886,57886,60582,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60596,57886,57886,57886,57886,57886,57886,57886,57886,60606,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,57909,57909,57909,60617,57909,57909,57909,57909,57909,57909,60624,57909,57886,60602,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2962,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61182,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58975,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58990,57909,57909,57909,57909,60651,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60680,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60694,57936,57936,57936,57936,57936,57936,57936,57936,57936,61273,57936,61275,57936,57936,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,1878,1879,521,521,521,521,1886,521,521,521,521,521,521,521,521,1337,521,1342,521,521,1346,521,521,1349,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1380,521,521,521,521,521,521,521,521,521,521,1396,521,521,521,521,521,57936,57936,57936,57936,57936,60700,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,3768,0,0,0,0,57909,61073,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60030,57936,57936,57936,57936,57936,0,521,521,521,521,521,521,3953,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,61312,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2557,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59466,57909,57909,57909,57909,57909,57909,57909,57909,61328,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,61344,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,61382,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,61396,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,61080,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61090,57936,57936,57936,57936,61410,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,2265,1706,2266,0,0,0,0,2268,1713,2269,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2353,0,0,330,0,0,0,0,0,0,375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,330,0,139264,147456,0,0,0,0,0,0,0,1842,0,0,1845,0,0,0,0,0,0,1851,1852,0,0,0,0,0,0,0,0,0,0,0,1845,0,0,0,0,0,131072,0,0,0,0,0,329,0,0,0,0,455,468,468,468,481,481,481,481,492,494,481,481,492,481,503,503,503,503,518,503,503,503,518,503,503,503,503,503,503,526,57892,526,57892,526,526,57892,526,526,57915,57892,526,526,57892,57892,57892,57915,57892,57892,57892,57892,57892,57892,57892,57915,57915,57892,57892,57942,57892,57892,57892,57892,57892,57892,57892,57942,57942,57892,57892,57892,57892,57942,57942,57892,526,57892,57892,57892,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2310144,0,0,0,0,0,0,0,2310144,2310144,0,0,0,0,0,0,0,0,2310144,0,0,0,0,0,651,652,0,0,0,0,0,0,0,0,0,0,663,664,0,0,0,0,0,0,0,0,0,0,0,676,677,678,0,0,0,682,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,0,0,700,701,0,0,0,0,0,707,0,0,0,0,0,3141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450560,450560,0,0,0,0,0,711,0,713,0,0,0,0,0,0,720,0,0,0,724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,742,0,0,0,0,0,0,0,0,0,0,752,0,0,0,0,0,0,759,0,0,0,765,766,0,0,0,0,0,0,0,2308,0,0,0,0,2313,2314,0,0,2316,2317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,270336,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,301,0,0,305,0,0,4857856,4874240,0,0,4923392,0,0,0,775,0,777,0,0,0,0,0,0,0,0,0,0,0,0,0,0,789,0,794,0,797,0,0,0,0,0,0,777,0,789,0,803,0,0,0,0,797,809,0,0,0,0,0,809,809,812,0,0,0,777,0,0,0,0,0,821,0,0,0,0,0,0,806,0,0,806,0,0,0,0,0,806,806,0,0,0,0,786,0,0,0,0,0,0,822,782,0,0,0,0,0,775,0,0,0,821,521,521,835,521,841,521,521,856,521,521,867,521,872,521,521,881,884,889,521,897,521,57886,57886,57886,57886,57886,57886,60291,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,58254,57886,58260,57886,57886,58275,57886,57886,58286,57886,58291,57886,57886,58300,58303,58308,57886,58316,57886,0,57909,57909,57909,58330,57909,58336,57909,57909,58351,57909,57909,58362,57909,58367,57909,57909,58376,58379,58384,57909,58392,57909,0,0,0,0,58291,57936,57936,57936,58405,57936,58411,57936,57936,58426,57936,57936,58437,57936,58442,57936,57936,58451,58454,58459,57936,58467,57936,835,521,521,1129,889,521,0,57886,58254,57886,58479,58308,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,2326528,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,1153,0,0,0,0,0,0,0,0,0,1163,0,0,0,0,0,0,0,1170,0,0,0,0,0,0,0,0,0,0,0,1051,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6299648,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,1209,0,0,0,0,0,0,0,0,1218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1235,0,0,1187,0,0,0,0,0,3434,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3451,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,59827,57886,57886,57886,57886,59831,57886,57886,57886,57886,57886,57886,57886,57886,58801,57886,57886,57886,57886,57886,57886,57886,58810,57886,57886,58812,57886,57886,57886,57886,58817,57886,57886,57886,57886,57886,57886,57886,57886,57886,61388,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61402,57936,57936,57936,57936,57936,57936,0,0,0,0,742,0,0,0,0,0,0,0,0,0,0,0,0,1258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5857280,0,6463488,4939776,0,0,5455872,0,0,0,0,0,0,0,0,6062080,6463488,0,5398528,0,521,521,521,521,1328,521,521,521,521,521,521,1343,521,521,521,1348,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1365,521,1407,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58767,57886,57886,57886,57886,57886,57886,58782,57886,57886,57886,58787,57886,57886,57886,57886,57886,57886,57886,58839,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,58855,57909,57909,57909,57909,57909,57909,57909,57909,57909,58869,57909,57909,57909,58877,57909,57909,57909,58882,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58899,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,58419,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59003,57936,59005,57936,57936,57936,57936,57936,57936,57936,59018,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60704,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,57936,57936,57936,57936,57936,57936,58956,57936,57936,57936,57936,57936,57936,58971,57936,57936,57936,58976,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,2741,0,57936,58993,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59009,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59025,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61101,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,690,691,0,367,367,367,0,0,0,0,0,0,0,0,0,703,0,0,0,0,0,57936,57936,57936,59036,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,0,0,0,0,1712,0,0,0,0,1719,0,1721,0,0,0,0,0,3621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3632,0,0,0,3635,3636,0,0,0,0,0,0,393678,0,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,0,393678,393678,0,1754,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1770,0,0,0,0,0,1776,0,0,1779,0,1781,0,0,0,0,0,0,3642,0,3644,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2854,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1943,1944,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,1787,1788,0,0,0,0,0,0,0,0,1797,1798,0,0,0,0,0,0,1804,0,0,1806,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,888,521,521,521,521,57886,57886,57886,1810,1811,1812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1830,1831,0,1832,1833,0,0,0,0,0,0,1186,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,810,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3395,0,0,3397,0,0,0,0,0,0,0,0,1863,1721,1721,1865,521,1867,521,1868,1869,521,1871,521,521,521,1875,521,521,521,521,521,521,521,521,521,1888,521,521,521,521,1892,521,521,521,521,1896,521,1898,521,521,521,521,521,521,521,521,521,521,1908,1909,1911,521,521,521,521,521,521,521,1919,1920,521,1922,521,521,521,521,521,521,521,521,3667,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60611,57886,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60622,57909,60625,521,1925,1926,521,521,521,521,521,521,521,1934,521,1936,521,1939,521,521,521,521,521,1946,521,521,1948,521,521,521,521,521,521,521,521,521,3197,3198,521,521,521,521,3201,521,521,521,521,521,521,521,521,521,521,3206,521,521,521,3209,521,521,58754,0,59307,57886,59309,57886,59310,57886,59312,57886,59314,57886,57886,57886,59318,57886,57886,57886,57886,57886,57886,57886,57886,57886,59331,57886,57886,57886,57886,59335,57886,1,24578,3,155941,156275,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,483328,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2341,0,0,0,0,0,0,0,0,0,0,0,0,0,57886,57886,57886,59339,57886,59341,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59351,59352,59354,57886,57886,57886,57886,57886,57886,57886,59362,59363,57886,59365,57886,57886,57886,57886,57886,58799,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58829,59368,59369,57886,57886,57886,57886,57886,57886,57886,59377,57886,59379,57886,59382,57886,57886,57886,57886,57886,59390,57886,57886,59392,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2558,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60371,57909,57909,57909,57936,57936,57936,57936,57936,57936,60377,57936,57936,57936,57936,50657,0,59407,57909,59409,57909,59410,57909,59412,57909,59414,57909,57909,57909,59418,57909,57909,57909,57909,57909,57909,57909,57909,57909,59431,57909,57909,57909,57909,59435,57909,57909,57909,57909,57909,57909,57909,58916,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,521,1335,521,521,521,521,58774,57886,57886,57886,57886,57886,1138,0,0,1709,0,0,0,0,1716,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,3882,521,3884,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,59847,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60277,57886,57886,57886,57886,57886,57886,57886,57909,57909,59439,57909,59441,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59451,59452,59454,57909,57909,57909,57909,57909,57909,57909,59462,59463,57909,59465,57909,57909,59468,59469,57909,57909,57909,57909,57909,57909,57909,59477,57909,59479,57909,59482,57909,57909,57909,57909,57909,59490,57909,57909,59492,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57886,57886,57886,57886,60290,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60299,57886,57886,57886,60302,57886,57886,57886,57886,57886,57886,0,0,0,0,0,0,1214,0,0,0,0,0,0,0,0,1223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1238,59503,57936,59505,57936,59506,57936,59508,57936,59510,57936,57936,57936,59514,57936,57936,57936,57936,57936,57936,57936,57936,57936,59527,57936,57936,57936,57936,59531,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,0,1707,0,0,0,0,1714,0,0,0,0,0,0,0,0,3170,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,3182,521,3185,521,521,521,521,59535,57936,59537,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59547,59548,59550,57936,57936,57936,57936,57936,57936,57936,59558,59559,57936,57936,59561,57936,57936,59564,59565,57936,57936,57936,57936,57936,57936,57936,59573,57936,59575,57936,59578,57936,57936,57936,57936,57936,59586,57936,57936,59588,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,1926,521,2258,521,57886,59369,57886,59607,57886,2265,0,2266,0,0,0,0,2268,0,2269,0,0,0,0,0,0,0,0,0,0,2276,0,0,2279,2280,0,0,0,2284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2790,0,0,0,0,2303,0,0,0,0,2307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2323,0,0,0,0,2327,0,0,0,0,0,3873,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,58803,57886,57886,57886,57886,58808,57886,57886,57886,57886,57886,57886,57886,57886,57886,58816,57886,57886,57886,58823,58825,57886,57886,57886,0,2356,0,0,0,0,0,0,0,0,2365,0,0,0,0,0,0,0,0,0,0,0,0,2375,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,875,521,521,521,521,521,521,521,57886,57886,57886,2412,521,2414,521,521,521,521,521,521,521,2420,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1357,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2441,2442,521,521,521,521,521,521,2449,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1383,521,521,521,521,521,521,521,521,521,521,521,1400,521,521,521,2463,521,521,2466,2467,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59833,57886,59835,57886,57886,57886,57886,57886,57886,60585,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60599,57886,57886,57886,57886,57886,59843,57886,59845,57886,57886,57886,57886,57886,57886,57886,59851,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60300,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57886,57886,57886,57886,59896,57886,57886,59899,59900,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59922,57909,57909,57909,57909,57909,57909,58388,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,3862,0,0,3865,0,0,0,0,3627,0,0,59924,57909,57909,57909,57909,57909,57909,59932,57909,59934,57909,57909,57909,57909,57909,57909,57909,59940,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,59991,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60707,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,60007,57936,57936,57936,57936,57936,57936,60015,57936,60017,57936,57936,57936,57936,57936,57936,57936,60023,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,2739,2266,0,2740,2269,0,0,0,521,2868,521,521,521,521,2872,521,521,521,2877,521,521,521,521,521,521,521,521,2885,521,521,521,521,521,521,521,2890,521,521,521,521,521,521,0,0,0,0,57886,57886,59820,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58811,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60259,57886,60261,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60278,57886,57886,57886,57886,60282,57886,57886,57886,57886,57886,60605,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60319,57909,57909,57909,57909,57909,60324,57909,57909,57909,57909,57909,57909,57909,57886,57886,60287,57886,57886,57886,57886,57886,57886,57886,57886,60295,57886,57886,57886,57886,57886,57886,57886,57886,60301,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,0,0,0,1185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,1732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1856,0,0,0,0,0,0,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,60314,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60326,57909,60328,57909,57909,57909,57909,57909,57909,57909,57909,60365,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61082,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,60362,57909,57909,57909,57909,57909,57909,57909,57909,60368,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,60379,57936,57936,57936,57936,57936,57936,57936,57936,58959,57936,57936,57936,57936,57936,57936,57936,57936,57936,58978,57936,57936,57936,57936,57936,57936,57936,57936,57936,58988,57936,57936,57936,57936,57936,57936,57936,57936,57936,58960,58967,57936,57936,57936,57936,57936,57936,57936,57936,58980,57936,58982,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60417,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60424,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60410,57936,57936,57936,57936,60414,57936,57936,57936,60419,57936,57936,57936,57936,57936,57936,57936,57936,60427,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,3103,0,0,3106,3107,0,0,3110,3111,60433,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,301,305,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278528,0,0,0,0,0,0,3167,3168,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3189,60580,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60593,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60600,57909,57909,57909,60629,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60642,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58925,57909,57909,57909,57909,57909,58933,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57909,57909,60649,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60678,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60691,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60044,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,57886,3937,0,3939,0,0,0,0,0,3627,3943,0,3945,57936,57936,57936,60698,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,2368,521,521,521,521,521,521,521,521,521,521,521,2398,521,521,2401,521,521,521,521,521,521,2409,521,521,3403,0,0,0,0,3405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3419,0,0,0,0,3424,3425,0,3427,0,0,0,0,0,1197,0,0,0,0,0,0,0,0,0,1286,0,0,0,0,1314,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3452,521,521,521,521,3430,0,0,0,3433,521,521,521,521,521,521,3440,521,521,521,521,521,3444,521,521,521,521,521,521,521,3450,521,521,521,521,521,3456,60828,57886,57886,57886,57886,57886,57886,57886,60834,57886,57886,57886,57886,57886,60840,57886,57886,60843,57886,57886,57886,57886,57886,57886,57886,57886,60850,60852,57886,57886,57886,57886,57886,57886,58282,58284,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,58327,57909,57909,57909,57909,57909,57909,58358,58360,57909,60856,57886,60858,60859,57886,57909,57909,57909,57909,57909,57909,60866,57909,57909,57909,57909,57909,60870,57909,57909,57909,57909,57909,57909,57909,60876,57909,57909,57909,57909,57909,60882,57909,57909,60885,57909,57909,57909,57909,57909,57909,57909,57909,60892,60894,57909,57909,57909,57909,60898,57909,60900,60901,57909,57936,57936,57936,57936,57936,57936,60908,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61200,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,3866,3867,0,3627,0,3871,57936,57936,60912,57936,57936,57936,57936,57936,57936,57936,60918,57936,57936,57936,57936,57936,60924,57936,57936,60927,57936,57936,57936,57936,57936,57936,57936,57936,60934,60936,57936,57936,57936,57936,57936,57936,57936,57936,59e3,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59020,57936,57936,57936,57936,57936,59028,57936,57936,57936,57936,57936,57936,57936,57936,59542,57936,57936,57936,59546,57936,57936,59551,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60048,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60940,57936,60942,60943,57936,521,521,3602,57886,57886,60949,0,0,0,0,0,0,3611,0,0,3614,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,3649,3650,521,521,521,521,3654,3655,521,521,521,521,521,3659,521,521,521,521,3662,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,61018,57886,57886,57886,57886,57886,57886,57886,61023,57886,57886,57886,57886,57886,57886,60833,57886,57886,57886,57886,57886,57886,57886,57886,60841,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60855,57909,57909,57909,57909,57909,57909,61052,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61063,57909,57909,57909,57909,57909,57909,57909,57909,61071,57909,57909,57909,57909,57909,57909,58914,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58930,57909,57909,57909,57909,57909,57909,58941,57909,0,57886,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,303104,0,0,0,0,0,0,0,0,0,0,0,57886,57886,61240,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,61256,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,61076,57936,57936,57936,57936,57936,57936,57936,61081,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61092,57886,57886,57886,61440,57886,61442,57886,57886,57886,57886,61447,61448,61449,61450,57909,57909,57909,61453,57909,61455,57909,57909,57909,57909,61460,61461,61462,61463,57936,57936,57936,61466,57936,61468,57936,57936,57936,57936,61473,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,61031,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,61392,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,61406,57936,57936,57936,61535,57936,0,0,0,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,0,0,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,0,0,521,521,521,521,4198,521,57886,57886,57886,57886,61546,57886,57909,57909,57909,57909,61550,57909,57936,57936,57936,57936,61554,57936,0,371,371,0,429,131072,371,429,429,332,371,429,0,0,429,449,429,0,0,0,429,488,488,488,493,488,488,488,493,488,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,527,57893,527,57893,527,527,57893,527,527,57916,57893,527,527,57893,57893,57893,57916,57893,57893,57893,57893,57893,57893,57893,57916,57916,57893,57893,57943,57893,57893,57893,57893,57893,57893,57893,57943,57943,57893,57893,57893,57893,57943,57943,57893,527,57893,57893,57893,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,4399798,0,0,0,0,0,0,0,0,0,0,0,0,773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,773,0,0,0,521,828,521,521,521,521,521,521,860,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,58246,1295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,2839,521,521,521,521,521,521,1326,521,521,521,521,521,1338,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2430,521,521,521,521,521,521,521,521,521,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,58765,57886,57886,57886,57886,57886,58777,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59381,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61041,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57936,57936,57936,57936,58954,57936,57936,57936,57936,57936,58966,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,3375,0,0,0,57909,57909,57909,59954,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60355,57909,57909,57909,57936,57936,57936,60037,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59026,57936,57936,57936,0,0,4212,521,521,521,61558,57886,57886,57886,61560,57909,57909,57909,61562,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,521,521,521,521,521,521,521,521,3793,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60607,57886,57886,60610,57886,57886,60613,0,0,60614,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60637,60638,57909,57909,57909,57909,60641,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60647,0,0,0,430,131072,0,430,430,0,0,430,439,0,430,0,430,469,469,469,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,528,57894,528,57894,528,528,57894,528,528,57917,57894,528,528,57894,57894,57894,57917,57894,57894,57894,57894,57894,57894,57894,57917,57917,57894,57894,57944,57894,57894,57894,57894,57894,57894,57894,57944,57944,57894,57894,57894,57894,57944,57944,57894,528,57894,57894,57894,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,367,0,0,0,0,0,0,0,0,0,0,0,521,58754,1961,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,2561,0,50657,2061,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59950,57909,57909,2302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2326,0,0,0,0,0,1213,0,1215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,0,420,0,0,0,0,0,2385,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1949,521,521,521,521,521,521,521,0,3138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3158,0,0,0,0,0,0,0,0,1731,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1747,0,0,1750,0,0,521,521,521,3213,521,521,521,521,521,521,521,521,521,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58868,57909,0,0,3404,0,0,0,0,0,3407,0,3409,0,0,3412,0,0,0,0,0,3417,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,4399797,4399797,0,0,0,0,0,0,0,0,0,0,521,521,521,521,3460,521,521,521,521,521,521,521,521,3468,521,521,3471,521,521,521,60818,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58296,57886,57886,57886,57886,58314,57886,57886,0,57909,57909,58325,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,60857,57886,57886,57886,60860,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60877,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59959,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,60664,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,57909,60887,57909,57909,57909,57909,57909,57909,57909,57909,57909,60896,57909,57909,60899,57909,57909,57909,60902,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,4089,521,57886,57886,57886,60938,57936,57936,60941,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,3615,0,0,0,0,0,0,0,393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3159,3160,0,0,0,0,0,521,521,521,521,3663,521,3665,521,521,521,521,521,521,521,521,521,521,57886,57886,61017,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59850,57886,57886,57886,57886,57886,57886,57886,57886,59857,57886,59859,57886,59862,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61029,57886,57886,57886,57886,57886,57886,57886,57886,61035,57886,61037,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,61046,57909,57909,57909,57909,57909,57909,57909,58917,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58934,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,58949,57936,61093,57936,61095,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,3791,521,521,521,521,521,521,521,521,3797,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58804,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58819,57886,57886,57886,57886,57886,57886,61153,57886,57886,57886,57886,57886,57886,57886,57886,57886,61159,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61172,57909,57909,57909,57909,57909,57909,58915,57909,57909,58922,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58936,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,521,1336,521,521,521,521,58775,57886,57886,57886,57886,57886,1138,0,0,0,0,1711,0,0,0,0,1718,0,0,0,0,0,0,1247,1248,0,0,0,0,0,0,0,0,0,0,0,1155,1154,0,0,0,0,0,0,0,0,0,0,0,2799,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,0,0,0,0,0,0,0,3637,0,0,57936,57936,57936,57936,57936,61197,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3782,0,0,521,521,521,521,0,0,0,0,683,684,0,0,0,0,689,0,0,0,367,367,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,530,57896,530,57896,530,530,57896,530,530,57919,57896,530,530,57896,57896,57896,57919,57886,58258,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58317,0,57909,57909,57909,57909,58334,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59481,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57936,57936,57936,57936,58468,521,839,521,521,521,898,0,58258,57886,57886,57886,57886,58317,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,1219,1220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6299648,0,0,0,0,0,0,0,0,0,0,0,5808128,0,0,0,1211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1230,0,0,0,0,0,0,0,0,0,521,521,521,3647,521,521,521,521,521,521,521,3652,521,521,521,521,521,521,521,521,521,521,521,2421,521,521,521,2424,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2895,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60842,57886,60844,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,1839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1853,0,0,0,0,0,0,0,0,0,0,0,0,1307,1308,0,0,1154,0,0,0,0,0,0,0,0,0,0,0,521,1319,521,521,521,1958,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,386,0,0,0,0,0,0,0,0,0,0,0,0,0,401,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,412,0,0,0,0,0,0,412,139264,147456,0,0,0,421,0,333,0,0,0,0,0,0,0,0,0,0,0,0,333,0,0,0,0,0,0,0,0,333,0,0,139264,147456,0,0,0,0,0,0,0,2773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3634,0,0,0,0,0,0,424,424,0,0,131072,424,0,0,0,424,0,440,0,0,424,334,470,470,470,483,483,483,483,483,483,483,483,483,483,504,512,512,512,512,519,512,512,512,519,512,512,512,512,512,512,529,57895,529,57895,529,529,57895,529,529,57918,57895,529,529,57895,57895,57895,57918,57895,57895,57895,57895,57895,57895,57895,57918,57918,57895,57895,57945,57895,57895,57895,57895,57895,57895,57895,57945,57945,57895,57895,57895,57895,57945,57945,57895,529,57895,57895,57895,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1734,0,0,0,0,0,0,0,0,1741,0,0,1744,1745,1746,0,1748,1749,0,0,0,822,0,0,0,0,0,0,0,521,521,521,521,842,521,851,521,521,521,521,521,521,521,521,521,521,521,521,521,899,57886,57886,57886,57886,57886,57886,61244,57886,57886,57886,61248,57886,57909,57909,57909,57909,57909,57909,61254,57909,57909,57909,57909,57909,57909,61260,57909,57909,57909,61264,57909,57936,57886,57886,58261,57886,58270,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58318,0,57909,57909,57909,57909,57909,58337,57909,58346,57909,57909,57909,57909,57909,57909,57909,57909,57909,58887,58889,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60661,57909,57936,57936,57936,57936,57936,57936,57936,57936,60669,57936,57936,57936,57936,57936,57936,57936,58469,521,521,521,521,1130,899,0,57886,57886,57886,57886,58480,58318,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,1764,1765,1766,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2319,2320,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,1331,521,521,521,521,521,521,521,521,521,1350,521,521,521,521,521,521,521,521,521,1360,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,59825,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59837,57886,57886,521,1408,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58770,57886,57886,57886,57886,57886,57886,57886,57886,57886,58789,57886,57886,57886,57886,57886,57886,59342,59343,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59360,57886,57886,57886,57886,57886,59367,57886,57886,58833,57886,57886,57886,57886,57886,58840,57886,57886,57886,58847,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58865,57909,57909,57909,57909,57909,57909,57909,58919,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60042,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,3370,57886,57886,60717,0,0,0,0,0,57936,57936,57936,59037,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1796,0,0,0,0,0,0,0,1803,0,1805,0,0,0,1807,0,739,0,0,0,0,1838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1850,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1836,1924,521,521,521,521,521,521,521,521,1933,521,521,521,521,521,521,1942,521,521,521,521,521,521,521,521,521,521,1952,1954,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59861,57886,57886,57886,57886,57886,57886,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59328,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61033,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59428,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,58397,57936,57936,57936,57936,57936,57936,58430,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59572,57936,57936,57936,57936,57936,57936,59581,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59592,59594,57936,57936,57936,57936,521,521,521,0,0,2472,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59885,57886,57886,57886,57886,59889,57886,57886,57886,2329,0,0,0,0,0,0,0,0,2337,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3128,0,0,0,0,0,0,0,0,521,521,2465,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,59824,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59836,57886,57886,57886,57886,57886,57886,61492,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61500,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59583,59584,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,2255,521,59925,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60358,59953,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59972,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59935,57909,59937,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60660,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60671,57936,60008,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59598,521,521,60036,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60055,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,4132,0,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,0,0,0,2769,0,0,2772,0,0,0,0,0,0,2776,0,0,0,0,0,0,0,0,0,0,0,2787,0,0,0,0,0,0,0,394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319488,319488,0,0,0,0,0,0,2795,0,0,0,0,2797,0,0,0,0,0,0,0,2801,2802,0,0,2805,0,0,2808,0,0,0,0,0,0,0,0,0,0,1161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,2818,0,0,0,0,0,0,0,0,0,0,0,0,0,2828,0,0,0,0,521,2832,521,521,521,521,521,521,521,521,521,521,521,2878,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1356,521,521,521,1359,521,521,521,521,521,521,521,521,521,521,521,521,521,2873,521,521,521,521,521,521,2880,521,521,521,521,521,521,521,521,521,521,2888,521,521,521,2891,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60253,57886,57886,57886,57886,57886,57886,57886,61493,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61501,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60921,57936,60923,57936,57936,57936,57936,57936,57936,57936,60930,57936,57936,60932,57936,57936,57936,57936,57936,0,0,57909,60308,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60331,57936,57936,60407,57936,57936,57936,57936,57936,57936,57936,60415,57936,57936,57936,57936,57936,57936,60422,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60431,57936,57936,57936,57936,57936,57936,57936,57936,59574,57936,57936,57936,59580,57936,57936,57936,57936,57936,57936,57936,57936,57936,59590,57936,57936,57936,57936,59596,57936,57936,521,521,521,0,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59864,57886,57886,57886,57936,60434,57936,57936,57936,57936,57936,57936,3094,521,521,521,521,60441,57886,57886,57886,57886,0,0,0,0,3102,0,0,0,0,0,0,0,0,0,521,521,3646,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3658,521,521,521,3112,0,0,0,0,0,0,0,3116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3130,3131,0,0,0,0,0,0,0,3143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,333,334,335,0,0,0,0,0,3211,521,521,521,521,521,521,521,3215,521,521,521,521,521,0,0,57886,57886,57886,60567,57886,57886,57886,57886,57886,60572,57886,57886,57886,57886,57886,57886,57886,57886,61246,57886,57886,57886,61249,57909,57909,57909,57909,61253,57909,57909,57909,57909,57909,57909,57909,57909,57909,61262,57909,57909,57909,61265,60601,57886,60603,57886,57886,57886,57886,57886,57886,57886,57886,60608,57886,57886,57886,57886,57886,0,0,57909,57909,57909,60616,57909,57909,57909,57909,57909,60621,57909,57909,57909,57909,57909,57909,57909,57909,60654,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61086,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,60650,57909,60652,57909,57909,57909,57909,57909,57909,57909,57909,60657,57909,57909,57909,57909,57909,57936,57936,57936,60665,57936,57936,57936,57936,57936,60670,57936,57936,57936,57936,57936,57936,57936,57936,60041,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60054,57936,57936,57936,57936,57936,60058,60059,60060,57936,60696,57936,57936,57936,60699,57936,60701,57936,57936,57936,57936,57936,57936,57936,57936,60706,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,3374,0,0,3377,3378,521,521,521,521,521,521,3462,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,60822,57886,57886,57886,57886,60826,57886,57886,57886,57886,57886,58835,57886,57886,57886,57886,57886,57886,58846,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58862,57909,57909,57909,57909,57909,57909,57909,57909,57909,58394,0,0,0,0,57886,57936,57936,57936,57936,57936,58412,57936,58421,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,4085,521,4087,521,521,521,57886,57886,57886,57936,57936,57936,57936,57936,57936,57936,60916,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60931,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,3608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1194,0,1196,0,0,367,367,0,0,0,0,0,0,0,0,0,0,0,0,0,3619,3620,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3633,0,0,0,0,0,0,0,0,1793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,60825,57886,57886,57886,57886,521,521,3787,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3798,521,521,521,521,521,57886,57886,57886,57886,57886,57886,61149,57886,57886,57886,57886,57886,58836,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,58861,57909,57909,57909,58870,57909,57936,57936,57936,57936,57936,57936,57936,61198,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,3777,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,4022,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,61379,0,521,521,521,521,521,521,521,521,3955,521,3957,3958,521,3960,521,57886,57886,57886,57886,57886,57886,57886,57886,61314,57886,61316,61317,57886,61319,57886,61321,61488,57886,61489,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,61496,57909,61497,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,61504,57936,61505,57936,57936,57936,57936,57936,57936,57936,57936,57936,58961,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59019,57936,57936,59023,57936,57936,57936,57936,57936,59030,0,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,4224,61569,61570,61571,521,521,521,521,521,521,521,1332,1339,521,521,521,521,521,521,521,521,1352,521,1354,521,521,521,521,521,521,521,521,521,521,521,521,2422,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,57886,60566,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58307,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57896,57896,57896,57896,57896,57896,57896,57919,57919,57896,57896,57946,57896,57896,57896,57896,57896,57896,57896,57946,57946,57896,57896,57896,57896,57946,57946,57896,530,57896,57896,57896,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2312,0,0,0,2315,0,0,0,0,0,2321,0,0,0,0,0,0,0,0,0,0,57909,58909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,1706,0,0,0,1712,1713,0,0,0,0,0,0,0,0,687,0,0,0,0,0,367,367,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1253,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,339,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,1162,0,0,0,0,0,0,405,0,0,0,0,0,0,0,0,0,0,0,0,405,0,0,0,0,0,0,0,383,0,139264,147456,0,405,0,0,405,0,0,0,431,131072,0,431,431,0,0,431,0,445,431,0,431,471,471,471,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,531,57897,531,57897,531,531,57897,531,531,57920,57897,531,531,57897,57897,57897,57920,57897,57897,57897,57897,57897,57897,57897,57920,57920,57897,57897,57947,57897,57897,57897,57897,57897,57897,57897,57947,57947,57897,57897,57897,57897,57947,57947,57897,531,57897,57897,57897,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2775,0,0,0,0,0,2780,0,2782,2783,0,0,0,0,0,0,0,0,0,0,0,1157,0,0,0,0,0,0,0,1159,0,0,0,0,0,0,1266,0,0,0,0,1271,654,0,0,0,0,0,0,0,0,0,0,654,0,654,0,0,0,0,813,0,0,0,654,0,0,0,0,0,0,0,0,0,521,3645,521,521,521,3648,521,521,521,521,521,521,521,521,521,3656,521,521,521,521,521,521,521,0,0,0,0,733,654,0,0,521,829,521,521,521,844,521,521,521,521,521,521,521,521,521,521,885,521,521,521,521,57886,57886,58247,57886,57886,57886,58263,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58304,57886,57886,57886,57886,0,57909,57909,58323,57909,57909,57909,58339,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59987,57909,57909,57909,57936,57936,57936,57936,57936,57936,59996,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60391,57936,60393,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60022,57936,57936,57936,57936,57936,57936,57936,57936,60029,57936,60031,57936,60034,57936,57936,57909,57909,57909,57909,57909,58380,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,58398,57936,57936,57936,58414,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60390,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60710,57936,521,521,521,57886,57886,57886,0,0,0,0,0,58455,57936,57936,57936,57936,521,521,521,885,521,521,0,57886,57886,57886,58304,57886,57886,293,1138,0,0,1142,0,0,1147,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3888,521,57886,57886,57886,57886,57886,57886,57886,57886,58841,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60639,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59965,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,1154,1155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3133,0,0,0,0,0,0,1155,0,0,0,0,0,0,1280,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,760,0,0,763,0,0,767,0,0,0,0,521,521,521,58754,901,57886,58757,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58771,58778,57886,57886,57886,57886,57886,57886,57886,57886,58791,57886,58793,57886,57886,57886,57886,57886,60831,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60849,57886,60851,57886,57886,57886,57886,57886,57886,58278,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,58354,57909,57909,58908,57909,58910,57909,57909,57909,57909,57909,57909,57909,58923,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58938,57909,57909,57909,0,57886,57936,58946,57936,57936,57936,57936,57936,57936,57936,57936,60068,57936,57936,60071,60072,57936,2404,521,2731,521,521,59835,57886,60080,57886,57886,2739,2266,0,2740,2269,0,0,0,0,0,0,4014,0,4016,0,521,521,521,521,521,4021,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,61378,57886,57936,59033,57936,57936,57936,521,1332,521,1389,521,521,58771,57886,57886,58828,57886,57886,1138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3146,0,0,0,0,0,0,0,0,0,0,3156,0,0,0,0,3161,0,0,0,3163,0,1724,1725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2342912,0,0,0,521,521,521,521,521,521,1930,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1957,521,58754,1961,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59321,59322,57886,57886,57886,57886,59329,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,61391,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,61405,57936,57936,50657,2061,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59421,59422,57909,57909,57909,57909,59429,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,741,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59520,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,59473,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59501,57909,57886,57886,57886,57886,57886,60832,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60847,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58843,57886,57886,57886,50657,58754,977,57909,58852,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58866,58873,57936,57936,57936,57936,57936,59540,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59560,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,2800,0,0,0,0,0,0,0,0,0,2809,0,0,0,0,0,0,0,0,0,57936,57936,57936,59569,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59597,57936,521,521,521,0,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59359,57886,57886,57886,57886,57886,57886,57886,0,2330,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2346,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,2397,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61162,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59866,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59878,57886,57886,57886,57886,57886,57886,57886,59884,57886,57886,57886,57886,57886,57886,57886,59890,57886,57886,57886,57886,57886,61030,57886,57886,57886,57886,57886,57886,57886,57886,61036,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,61393,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,61407,57909,57909,57909,57909,59955,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59967,57909,57909,57909,57909,57909,57909,57909,59973,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60366,57909,57909,57909,60369,57909,57909,57909,57909,57909,57909,57936,60373,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,4083,521,521,521,521,521,521,521,521,57886,57886,57886,57909,57909,59979,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60430,57936,57936,57936,57936,57936,57936,57936,57936,60038,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60050,57936,57936,57936,57936,57936,57936,57936,60056,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,1149,0,0,57936,57936,60062,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3109,0,0,60258,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59865,3164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,3180,521,521,521,521,521,521,3188,521,521,521,521,521,521,521,1333,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2858,521,521,521,521,521,521,521,521,521,521,57909,57909,60628,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61070,57909,57909,57936,57936,57936,60677,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59027,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61099,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3171,0,0,0,521,3175,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,2472,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59349,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61039,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57886,57886,57886,57886,61441,57886,61443,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,61454,57909,61456,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,3607,0,3609,0,0,0,3613,0,0,0,0,0,0,0,0,0,0,1733,0,0,0,1736,0,0,1739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,335872,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,335872,0,0,61467,57936,61469,57936,57936,57936,57936,0,0,0,0,0,0,0,4134,521,521,521,521,521,521,521,521,521,521,521,61485,57886,57886,57886,57886,57886,57886,57886,59846,57886,59848,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60273,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,388,340,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2351104,0,0,0,0,0,131072,0,0,0,0,0,0,441,0,0,0,456,472,472,472,456,456,456,456,456,456,456,456,456,456,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,532,57898,532,57898,532,532,57898,532,532,57921,57898,532,532,57898,57898,57898,57921,57898,57898,57898,57898,57898,57898,57898,57921,57921,57898,57898,57948,57898,57898,57898,57898,57898,57898,57898,57948,57948,57898,57898,57898,57898,57948,57948,57898,532,57898,57898,57898,1,24578,3,155941,156275,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212992,0,0,0,0,0,212992,212992,212992,212992,212992,655,0,0,0,0,0,0,0,0,0,0,655,0,655,0,0,0,0,0,0,0,0,655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57886,57886,57886,58264,57886,57886,58280,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,58340,57909,57909,58356,57909,57909,57909,57909,57909,57909,57909,59444,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59464,57909,57909,57909,57909,57909,57909,57909,57909,57909,58921,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,0,0,0,0,1712,0,0,0,0,0,0,0,1722,0,1241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1293,0,0,0,0,0,1299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1315,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1890,521,521,521,521,521,521,521,521,1372,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1391,521,521,521,521,521,1399,521,521,521,521,521,521,0,0,0,0,57886,59819,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59357,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58772,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58848,50657,58754,977,58851,57909,57909,57909,57909,57909,58858,57909,57909,57909,57909,58864,57909,57909,57909,58830,57886,57886,57886,57886,57886,58838,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58867,57909,57909,57909,57909,57909,57909,60631,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60645,57909,57909,57909,57909,57909,57909,57909,57909,59985,57909,57909,59988,59989,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60005,57936,0,0,1755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,338,339,0,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59323,57886,57886,57886,57886,57886,57886,57886,57886,57886,59334,57886,57886,57886,57886,57886,58837,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61058,57909,57909,57909,57909,57909,57909,57909,57909,61064,57909,61066,57909,57909,57909,57909,57909,57909,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59423,57909,57909,57909,57909,57909,57909,57909,57909,57909,59434,57909,57909,57909,57909,57909,57909,57909,57909,61178,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61191,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,0,0,0,0,1712,0,0,0,0,0,0,0,0,349,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,57936,57936,57936,57936,57936,57936,57936,59541,57936,57936,57936,57936,57936,57936,57936,57936,59552,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61279,57936,57936,521,57886,0,0,0,3940,0,0,0,0,3627,0,0,0,0,0,2282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2298,2299,0,0,0,0,0,0,0,3382,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,0,0,0,2355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2328,521,2413,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2866,57886,57886,57886,57886,59844,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58824,57886,57886,57886,57886,57909,57909,57909,59928,57909,57909,57909,57909,59933,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60011,57936,57936,57936,57936,60016,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58985,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,3380,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4284416,0,0,57886,60829,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59366,57886,57936,57936,57936,60913,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59562,57936,57936,57936,0,521,521,521,521,3951,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,61310,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59875,57886,57886,57886,57886,59880,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,58859,57909,57909,57909,58863,57909,57909,58874,57909,57909,57909,57909,61326,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,61342,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59004,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60689,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61508,0,0,0,0,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,521,1333,521,521,1698,521,58772,57886,57886,57886,59047,57886,1138,0,0,1708,0,0,0,0,1715,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,3883,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,59344,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59364,57886,57886,57886,341,342,343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,341,295,0,0,0,0,0,4013,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,4027,521,521,4029,57886,57886,57886,57886,57886,57886,57886,57886,59376,57886,57886,57886,57886,57886,57886,59385,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59396,59398,57886,57886,57886,57886,0,0,0,389,390,392,342,0,0,0,0,0,0,341,0,0,0,0,341,0,0,0,342,0,0,0,0,0,0,0,0,0,639,748,749,750,0,0,0,0,0,756,757,0,0,0,0,0,0,0,0,769,770,0,772,0,0,0,389,0,0,0,0,0,0,342,0,0,0,389,0,0,0,0,0,342,389,0,0,0,139264,147456,0,0,0,422,0,0,0,0,0,245760,0,0,0,245760,0,0,245760,245760,245760,0,0,0,0,0,245760,0,245760,245760,0,0,0,245760,245760,0,0,245760,0,0,0,0,131072,0,0,0,341,0,0,0,446,0,341,0,473,473,473,473,489,489,489,489,489,489,489,489,489,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,533,57899,533,57899,533,533,57899,533,533,57922,57899,533,533,57899,57899,57899,57922,57899,57899,57899,57899,57899,57899,57899,57922,57922,57899,57935,57949,57935,57935,57935,57935,57935,57935,57935,57949,57949,57935,57935,57935,57935,57949,57949,57935,533,57899,57899,57899,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,344064,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,344064,0,0,0,710,0,0,0,0,0,0,0,718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,331,332,0,0,0,0,0,0,0,0,802,0,660,0,779,0,0,0,0,0,779,802,0,802,800,0,0,0,814,0,0,0,656,817,0,779,0,0,0,0,0,823,0,0,0,0,783,656,827,0,521,830,521,521,521,846,521,521,862,521,521,521,521,876,521,521,521,521,894,521,521,57886,57886,58248,57886,57886,57886,58265,57886,57886,58281,57886,57886,57886,57886,58295,57886,57886,57886,57886,58313,57886,57886,0,57909,57909,58324,57909,57909,57909,58341,57909,57909,58357,57909,57909,57909,57909,57909,57909,57909,59476,57909,57909,57909,57909,57909,57909,59485,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59496,59498,57909,57909,57909,57909,57886,57909,57909,58371,57909,57909,57909,57909,58389,57909,57909,0,0,0,0,57886,57936,57936,58399,57936,57936,57936,58416,57936,57936,58432,57936,57936,57936,57936,58446,57936,57936,57936,57936,57936,57936,57936,57936,60412,57936,57936,60416,57936,57936,57936,57936,57936,57936,57936,57936,57936,60425,57936,57936,57936,60428,60429,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,1143,0,0,1148,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,3881,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,58802,57886,57886,57886,58806,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2962,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60623,57909,57936,57936,58464,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,301,0,0,305,0,0,0,0,0,0,0,0,1816,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,740,0,0,0,0,1274,0,0,0,0,0,0,0,0,0,0,0,0,1286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,540,57906,540,57906,540,540,57906,540,540,57929,57906,540,540,57906,57906,57906,57929,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58773,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59348,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59361,57886,57886,57886,57886,57886,57886,57886,58797,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58821,57886,57886,57886,57886,57886,57886,59374,57886,57886,57886,57886,57886,57886,57886,57886,59386,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59397,57886,57886,57886,57886,57886,57886,57886,61444,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61457,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,521,3095,521,521,521,57886,60442,57886,57886,57886,0,0,3100,3101,0,0,0,0,0,0,0,0,0,0,3627,0,3776,0,0,0,0,3780,0,0,0,0,0,0,0,0,3783,0,521,521,521,3785,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,221645,221645,221645,221645,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59316,57886,57886,57886,57886,57886,57886,57886,57886,59327,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59345,57886,57886,57886,57886,57886,57886,57886,57886,59356,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59876,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59416,57909,57909,57909,57909,57909,57909,57909,57909,59427,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,58429,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,2440,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2459,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60252,57886,57886,57886,57886,57886,60257,59892,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,59910,57909,59912,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60340,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61060,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59981,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,59993,57936,59995,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60686,60687,57936,57936,57936,57936,60690,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60064,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2274,0,0,0,0,0,0,0,2820,0,0,0,0,2823,0,0,0,0,0,0,0,0,0,2831,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3961,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61320,57886,521,2842,521,521,2845,2846,521,521,521,521,521,2851,521,2853,521,521,521,521,2857,521,521,521,521,521,521,521,521,521,2863,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60251,57886,57886,60254,60255,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60878,57909,57909,57909,57909,57909,57909,57909,57909,57909,59445,57909,57909,57909,57909,57909,57909,57909,57909,59456,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61336,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61352,57936,521,521,521,521,521,2871,521,521,521,521,521,521,2879,521,521,521,521,521,2884,521,521,521,521,521,521,521,521,521,521,521,521,521,1904,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1353,1355,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,60260,57886,60262,57886,57886,57886,57886,60266,57886,57886,57886,57886,57886,57886,57886,57886,57886,60272,57886,57886,57886,57886,57886,57886,57886,57886,57886,60281,57886,57886,57886,57886,57886,59373,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59401,57886,57886,57886,57886,57886,60289,57886,57886,57886,57886,57886,60294,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60330,57909,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60318,57909,57909,60321,60322,57909,57909,57909,57909,57909,60327,57909,60329,57909,57909,57909,57909,57909,57909,57909,60336,57909,57909,57909,57909,57909,57909,57909,60342,57909,57909,57909,57909,57909,57909,57909,60350,57909,57909,57909,57909,57909,57909,60357,57909,57909,57909,60333,57909,57909,57909,57909,57909,57909,57909,57909,57909,60339,57909,57909,57909,57909,57909,57909,57909,57909,57909,60348,57909,57909,57909,57909,57909,57909,60356,57909,57909,57909,57909,57909,57909,57909,60632,57909,57909,60635,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60646,57909,57909,57909,57909,57909,57909,57909,60889,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,60906,57936,57936,57936,57936,60910,57909,57909,57909,60361,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61192,57936,57936,57936,57936,57936,57936,57936,60383,57936,57936,60386,60387,57936,57936,57936,57936,57936,60392,57936,60394,57936,57936,57936,57936,60398,57936,57936,57936,57936,57936,57936,57936,57936,57936,60404,0,0,3139,0,0,0,0,0,0,0,3145,0,3147,0,0,0,3150,0,0,3153,0,0,0,0,0,0,0,0,0,0,0,0,450560,450560,0,0,450560,450560,450560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1799,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,3165,0,0,0,0,0,0,0,0,0,0,0,0,0,3174,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2882,521,521,521,521,521,521,521,521,521,521,521,521,521,2892,521,521,521,521,521,3192,521,521,3195,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3205,521,521,521,521,521,521,521,521,2443,521,521,521,521,2448,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1906,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1940,521,521,521,521,521,521,1947,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3214,521,521,3217,521,521,3220,0,0,60565,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58302,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57886,57886,57886,60583,57886,57886,60586,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60597,57886,57886,57886,57886,57886,57886,57886,59871,57886,57886,57886,57886,57886,59877,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2962,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,3431,0,0,521,521,3436,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3453,521,3455,521,521,521,521,521,521,521,1334,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1358,521,521,521,521,521,521,521,521,521,2419,521,521,521,521,521,521,521,521,2426,521,2428,521,2431,521,521,521,521,521,521,521,521,521,2444,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1392,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3461,521,521,3463,521,521,521,521,521,521,521,521,521,521,521,57886,57886,60820,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59378,57886,57886,57886,59384,57886,57886,57886,57886,57886,57886,57886,57886,57886,59394,57886,57886,57886,57886,59400,57886,57886,57909,57909,57909,57909,57909,57909,60888,57909,57909,60890,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,60904,57936,57936,57936,57936,57936,57936,57936,521,3601,521,57886,60948,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,306,0,0,0,0,0,0,306,0,0,0,0,0,521,521,521,521,521,3664,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,61020,61021,57886,57886,57886,57886,61025,61026,57909,57909,61049,61050,57909,57909,57909,57909,61054,61055,57909,57909,57909,57909,57909,61059,57909,57909,57909,57909,57909,57909,57909,57909,61065,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59960,57909,57909,57909,57909,57909,59966,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60341,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60353,57909,57909,57909,57909,57909,57936,57936,61094,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,3764,0,0,0,0,0,0,0,0,521,521,521,521,521,521,2394,521,521,521,521,521,521,521,521,521,521,521,2406,521,521,521,521,521,521,521,521,521,521,521,521,3792,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59849,57886,57886,57886,57886,57886,57886,59854,57886,59856,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60267,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61163,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57886,61154,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61173,57886,57886,57886,57886,61242,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61258,57909,57909,57909,57909,57909,57909,57909,57936,57936,61075,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61087,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,4137,521,4138,521,521,521,57886,57886,57886,57886,57886,57886,0,521,521,3949,521,521,521,521,3954,521,521,521,521,3959,521,521,57886,57886,61308,57886,57886,57886,57886,61313,57886,57886,57886,57886,61318,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60873,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,58418,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58969,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59012,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59029,57936,57909,57909,61324,57909,57909,57909,57909,61329,57909,57909,57909,57909,61334,57909,57909,57909,57936,57936,61340,57936,57936,57936,57936,61345,57936,57936,57936,57936,61350,57936,57936,57936,57936,57936,57936,57936,57936,57936,58962,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58986,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,3606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1740,0,0,0,0,0,0,0,0,0,0,0,0,0,57886,57886,57886,57886,61384,57886,57886,61386,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61398,57909,57909,61400,57909,57936,57936,57936,57936,57936,57936,57936,3600,521,521,60947,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3617,3618,0,0,57936,57936,57936,57936,61412,57936,57936,61414,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60872,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59449,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58932,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,61533,57936,57936,57936,0,0,0,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,0,0,521,4195,521,521,521,521,57886,61543,57886,57886,57886,57886,57909,61547,57909,57909,57909,57909,57936,61551,57936,57936,57936,57936,0,0,0,521,521,4196,4197,521,521,57886,57886,61544,61545,57886,57886,57909,57909,61548,61549,57909,57909,57936,57936,61552,61553,57936,57936,0,57886,57909,57936,4232,61577,61578,61579,521,57886,57909,57936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1261,0,0,0,0,0,0,0,0,0,0,0,0,0,344,345,346,347,348,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,0,0,0,0,245760,245760,245760,245760,245760,245760,0,0,0,0,0,0,0,245760,245760,245760,0,0,0,0,139264,147456,245760,245760,0,0,245760,0,0,0,245760,245760,0,0,0,0,0,0,245760,0,0,0,0,0,0,245760,0,0,245760,0,0,245760,0,0,245760,0,245760,245760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,737,0,0,0,348,347,131072,346,347,347,348,346,347,0,346,347,450,457,474,474,474,485,485,485,491,485,485,491,491,485,491,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,534,57900,534,57900,534,534,57900,534,534,57923,57900,534,534,57900,57900,57900,57923,57900,57900,57900,57900,57900,57900,57900,57923,57923,57900,57900,57950,57900,57900,57900,57900,57900,57900,57900,57950,57950,57900,57900,57900,57900,57950,57950,57900,534,57900,57900,57900,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,639,0,0,0,0,644,645,646,647,648,649,650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,665,666,0,668,669,0,0,0,0,0,675,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1881,521,521,521,521,521,521,521,521,521,521,1375,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1914,521,521,521,521,521,521,521,521,521,521,709,0,0,712,0,714,0,716,0,0,0,0,0,0,0,0,0,726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,499712,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,301,0,302,305,0,306,4857856,4874240,0,0,4923392,0,0,0,0,757,0,0,778,0,0,0,0,0,0,0,0,0,785,0,0,0,0,0,796,0,0,685,0,0,0,757,0,0,0,0,0,278528,278528,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1176,0,0,0,0,0,685,816,816,0,0,0,0,0,521,521,836,840,843,521,852,521,521,521,868,870,873,521,521,521,886,890,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60871,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58892,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60372,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58255,58259,58262,57886,58271,57886,57886,57886,58287,58289,58292,57886,57886,57886,58305,58309,57886,57886,57886,0,57909,57909,57909,58331,58335,58338,57909,58347,57909,57909,57909,58363,58365,58368,57909,57909,57909,58381,58385,57909,57909,57909,0,0,0,0,58396,57936,57936,57936,58406,58410,58413,57936,58422,57936,57936,57936,58438,58440,58443,57936,57936,57936,57936,57936,57936,57936,57936,57936,58963,57936,57936,57936,57936,58973,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58989,57936,58456,58460,57936,57936,57936,836,1127,521,886,890,1131,0,58476,58255,57886,58305,58309,58481,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,540672,0,0,1366,521,521,1370,521,521,521,521,521,521,521,521,521,521,521,1381,521,521,1388,521,521,521,521,521,521,521,521,521,521,1402,521,521,521,0,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,60248,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60256,57886,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58795,57886,57886,57886,58798,57886,57886,57886,57886,57886,57886,57886,58805,57886,57886,58809,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58820,57886,57886,58827,57886,57886,57886,57886,57886,59897,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59918,57909,57909,59921,57909,57909,57909,57909,57909,57909,57909,58885,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58898,57909,57909,57909,57909,58903,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59480,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57936,57936,58994,57936,57936,58998,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59010,57936,57936,59017,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59031,521,1894,521,521,521,521,521,521,521,521,521,521,1903,521,521,521,1907,521,521,1912,521,521,521,521,521,521,521,521,521,521,521,521,2447,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2458,521,521,521,521,521,58754,0,57886,59308,57886,57886,57886,57886,57886,57886,57886,59315,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61164,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59337,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59346,57886,57886,57886,59350,57886,57886,59355,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61160,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,61168,57909,57909,57909,57909,57909,50657,0,57909,59408,57909,57909,57909,57909,57909,57909,57909,59415,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59437,57936,59504,57936,57936,57936,57936,57936,57936,57936,59511,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59533,57936,57936,57936,57936,57936,57936,57936,57936,60681,57936,57936,60684,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60695,57936,0,0,0,0,2305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352256,352256,352256,352256,521,521,521,2438,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2865,521,2794,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2381,2894,521,521,0,0,0,2896,0,1961,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59393,57886,57886,57886,57886,57886,57886,57886,57886,0,2061,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59974,57909,57909,57909,57909,57936,57936,57936,57936,57936,60437,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1727,0,0,0,0,0,0,521,521,521,521,3789,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,61146,57886,57886,57886,57886,57886,57886,57886,61151,57886,61239,57886,57886,57886,57886,57886,61245,57886,57886,57886,57886,57909,57909,57909,61251,57909,57909,57909,57909,61255,57909,57909,57909,57909,57909,61261,57909,57909,57909,57909,57936,0,0,4166,0,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59577,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,3766,0,0,0,0,0,3769,57936,57936,61267,57936,57936,57936,57936,61271,57936,57936,57936,57936,57936,61277,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1880,521,521,521,521,521,521,521,521,521,1891,521,0,521,521,521,521,521,3952,521,521,521,3956,521,521,521,521,521,57886,57886,57886,57886,57886,61311,57886,57886,57886,61315,57886,57886,57886,57886,57886,57886,57886,57886,61387,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61401,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60043,57936,57936,57936,57936,57936,60049,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,57909,57909,57909,57909,57909,61327,57909,57909,57909,61331,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,61343,57936,57936,57936,61347,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61102,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,728,0,788,0,0,0,0,0,0,0,0,788,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,4228,61573,61574,61575,521,57886,57909,57936,521,57886,57909,57936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,391,0,0,0,395,391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,363,364,365,366,0,0,367,0,295,0,0,349,0,407,0,0,0,0,0,0,0,0,0,0,407,0,0,0,0,0,0,407,0,349,0,139264,147456,0,0,0,0,0,0,0,3643,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2887,521,521,521,521,521,521,521,521,521,0,0,0,0,131072,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,535,57901,535,57901,535,535,57901,535,535,57924,57901,535,535,57901,57901,57901,57924,57901,57901,57901,57901,57901,57901,57901,57924,57924,57901,57901,57951,57901,57901,57901,57901,57901,57901,57901,57951,57951,57901,57901,57901,57901,57951,57951,57901,616,57901,57967,57967,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2351104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1228,0,0,0,0,0,0,0,0,1237,0,0,0,672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2300,0,57909,57909,58372,57909,57909,57909,57909,58390,57909,57909,0,0,0,0,57886,57936,57936,58400,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58447,57936,57936,57936,57936,57936,57936,57936,57936,60917,57936,57936,57936,57936,57936,57936,57936,57936,60925,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,3864,0,0,0,0,0,3627,0,0,57936,57936,58465,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,2311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2325,0,0,0,0,1242,0,0,0,0,0,0,0,0,0,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,1203,1161,0,0,0,0,0,0,1273,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,318,0,0,0,521,521,521,58754,901,57886,57886,57886,58760,57886,57886,57886,57886,57886,57886,57886,57886,57886,58774,57886,57886,57886,57886,58784,57886,57886,57886,57886,57886,57886,57886,57886,57886,59873,59874,57886,57886,57886,57886,57886,57886,59881,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58929,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57909,57909,57909,58879,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58895,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60656,57909,57909,60659,57909,57909,60662,60663,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,1756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,337,0,0,0,1785,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1800,0,0,0,0,0,0,0,1243,0,0,0,0,0,0,0,0,2286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1173,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,2418,521,521,521,521,521,521,2423,521,2425,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1379,521,521,521,521,521,521,521,1393,521,521,521,521,521,521,521,521,1405,521,521,2869,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2435,2436,57936,57936,57936,57936,57936,57936,60411,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59529,57936,57936,57936,57936,57936,57936,0,0,0,3432,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1398,521,521,521,521,521,0,3872,0,0,0,0,0,521,3875,521,521,3877,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,61234,57886,57886,61236,57886,57886,57886,57886,57886,60263,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60279,57886,57886,57886,57886,57886,61266,57936,57936,61268,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,3944,0,0,0,0,0,417792,0,417792,0,0,0,0,309,0,0,0,0,0,417792,0,417792,0,0,0,0,139264,147456,417792,0,0,0,417792,0,0,0,0,417792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417792,0,0,417792,0,0,417792,0,417792,418100,3946,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59383,57886,57886,57886,57886,57886,57886,59391,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,787,0,0,0,0,0,0,0,0,0,0,787,0,787,0,0,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0,1160,0,0,0,0,1165,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,460,0,0,0,0,0,0,0,0,0,0,2335231,2335197,2335231,2335231,57886,57886,57886,58266,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,58342,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60891,57909,60893,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60019,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60025,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,58754,1962,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2557,2962,0,0,50657,2062,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61068,57909,57909,57909,57909,57936,57936,57936,60408,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59021,57936,57936,57936,57936,57936,57936,57936,57886,61028,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,345,0,0,0,0,0,352,350,131072,0,350,350,352,0,350,0,0,350,352,350,0,0,0,350,350,350,350,350,350,350,350,498,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,536,57902,536,57902,536,536,57902,536,536,57925,57902,536,536,57902,57902,57902,57925,57902,57902,57902,57902,57902,57902,57902,57925,57925,57902,57902,57952,57902,57902,57902,57902,57902,57902,57902,57952,57952,57902,57902,57902,57902,57952,57952,57902,536,57902,57902,57902,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2751,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,791,0,0,0,0,0,0,0,0,0,0,0,674,0,0,0,0,0,0,673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,798,799,0,0,0,0,0,0,0,521,521,837,521,521,521,853,857,521,521,521,521,521,878,880,521,521,891,521,521,521,57886,57886,58250,0,751,0,0,804,0,0,0,0,0,804,0,657,0,0,0,0,0,0,0,0,0,0,0,0,819,0,0,0,0,0,0,0,521,521,521,521,521,521,3879,521,521,521,521,521,521,3885,521,521,521,521,57886,57886,57886,57886,57886,57886,61238,58256,57886,57886,57886,58272,58276,57886,57886,57886,57886,57886,58297,58299,57886,57886,58310,57886,57886,57886,0,57909,57909,58326,58332,57909,57909,57909,58348,58352,57909,57909,57909,57909,57909,57909,57909,57909,61330,57909,61332,61333,57909,61335,57909,61337,57936,57936,57936,57936,57936,57936,57936,57936,61346,57936,61348,61349,57936,61351,57936,61353,57909,57909,58373,58375,57909,57909,58386,57909,57909,57909,0,0,0,0,57886,57936,57936,58401,58407,57936,57936,57936,58423,58427,57936,57936,57936,57936,57936,58448,58450,57936,0,4165,0,4167,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,521,1695,521,1697,521,521,59044,57886,57886,59046,57886,57886,1138,0,0,0,0,0,0,0,0,0,0,0,1720,0,0,57936,58461,57936,57936,57936,837,521,880,521,891,521,0,57886,58256,58299,57886,58310,57886,155941,1138,0,301,0,0,305,0,0,0,0,0,0,0,0,2309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3396,0,0,0,0,0,0,0,1208,0,0,0,0,0,0,0,0,0,0,0,0,0,1222,0,1224,0,0,0,0,1229,0,0,0,0,1234,0,0,0,0,0,0,0,3874,521,521,521,521,3878,521,521,521,521,521,521,521,521,521,3887,521,521,61233,57886,57886,57886,57886,61237,57886,1406,521,521,58754,901,57886,57886,57886,57886,58761,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58792,58794,57886,57886,57886,57886,58273,58277,58283,57886,58288,57886,57886,57886,57886,57886,58306,57886,57886,57886,57886,0,57909,57909,58328,57909,57909,57909,57909,58349,58353,58359,57909,58364,57886,58832,57886,57886,57886,57886,57886,57886,57886,57886,58844,58845,57886,57886,50657,58754,977,57909,57909,57909,57909,58856,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,58415,57936,57936,58431,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,57909,58913,57909,57909,57909,57909,57909,57909,57909,58927,57909,57909,57909,57909,57909,57909,57909,57909,58939,58940,57909,57909,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59512,57936,57936,57936,57936,57936,57936,57936,57936,59523,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60021,57936,57936,57936,57936,57936,57936,60026,57936,60028,57936,57936,57936,57936,57936,57936,57936,57936,58950,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58981,58983,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61202,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,3781,0,0,0,0,0,0,521,521,521,521,57936,59034,59035,57936,57936,521,521,1696,521,521,1699,57886,57886,59045,57886,57886,59048,1138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2774,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,730,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1789,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507904,507904,507904,507904,0,1773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1855,0,0,0,0,0,0,0,0,0,0,2825,0,0,0,0,0,0,0,0,521,521,521,521,521,521,2837,521,521,521,521,521,521,521,521,521,1895,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1955,521,521,521,58754,0,57886,57886,57886,57886,57886,57886,57886,59313,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58813,57886,58815,57886,57886,57886,57886,57886,57886,57886,58828,57886,57886,57886,59338,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59399,57886,57886,57886,50657,0,57909,57909,57909,57909,57909,57909,57909,59413,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,60909,57936,57936,57909,59438,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59509,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59534,0,0,0,2332,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,0,0,0,0,0,2358,0,2360,2361,2362,0,2364,0,0,0,0,0,0,0,0,0,0,2372,0,0,0,0,2377,2378,0,0,0,0,0,0,0,49716,49716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,327680,327680,327680,327680,2382,0,0,0,0,0,0,0,2388,521,521,521,521,521,521,2395,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1905,521,521,521,521,521,521,521,521,521,521,521,1918,521,521,521,521,521,521,521,521,521,2439,521,521,521,521,521,2445,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3801,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,2745,2746,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2359296,367,0,0,0,521,521,2843,521,521,521,521,521,2848,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2864,521,521,521,0,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,60247,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59487,59488,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57936,57936,57936,57936,57936,60384,57936,57936,57936,57936,57936,60389,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59016,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60405,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60033,57936,57936,57936,57936,57936,57936,61269,57936,57936,57936,57936,57936,57936,57936,57936,57936,61278,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3446,521,521,521,521,521,521,521,521,521,521,521,521,1937,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1385,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57936,61534,57936,57936,4192,0,4194,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,4193,0,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,4211,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,521,521,521,521,521,521,521,1335,521,521,521,521,1345,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1361,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,60246,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,59911,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58926,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,0,0,0,0,370,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,378,0,0,0,0,370,0,0,0,0,0,4358144,4358144,4358144,4825088,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5177344,4358144,4358144,4358144,0,0,0,0,0,0,302,0,0,0,302,0,0,306,0,0,0,306,0,0,0,4931584,0,0,0,0,0,0,0,0,747,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,771,0,387,0,353,0,0,0,0,0,396,397,0,398,0,0,0,0,0,0,0,0,0,0,0,398,0,0,403,0,0,0,0,0,0,0,557056,557056,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3129,0,0,0,0,0,0,0,370,378,406,0,0,0,370,0,0,353,0,0,0,370,0,409,411,0,370,398,0,0,370,378,0,139264,147456,398,409,0,0,409,0,0,0,432,131072,0,432,432,0,0,432,0,411,432,0,458,0,0,0,486,486,486,486,486,486,486,486,486,486,508,508,508,508,520,508,508,508,520,508,508,508,508,508,508,537,57903,537,57903,537,537,57903,537,537,57926,57903,537,537,57903,57903,57903,57926,57903,57903,57903,57903,57903,57903,57903,57926,57926,57903,57903,57953,57903,57903,57903,57903,57903,57903,57903,57953,57953,57903,57903,57903,57903,57953,57953,57903,617,57903,57968,57968,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,636,0,0,0,0,0,0,0,0,0,0,4017,521,521,521,521,521,521,521,521,521,521,521,521,521,521,61374,57886,57886,57886,57886,57886,57886,0,0,774,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,793,0,0,0,0,0,0,0,774,0,0,0,0,0,1276,0,0,0,0,0,0,0,0,0,0,0,0,0,1288,0,0,0,0,0,0,0,0,0,0,0,0,3625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,305,0,0,0,0,0,0,305,0,0,0,0,0,0,0,793,0,0,0,0,0,0,0,0,0,0,0,687,0,0,0,774,0,0,0,0,793,0,0,0,0,0,0,0,793,0,0,0,0,774,0,793,0,521,832,521,521,521,521,521,521,863,865,521,521,521,521,521,521,521,521,521,521,521,57886,57886,58251,1151,0,0,0,0,0,0,0,0,0,0,0,0,1164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,1207,1296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1290,1316,1317,0,1290,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,59822,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,59907,57909,57909,57909,57909,57909,57909,57909,59915,57909,57909,57909,57909,57909,57909,57909,57909,57909,521,1325,521,521,521,1329,521,521,1340,521,521,1344,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1363,521,521,521,0,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,60245,57886,57886,57886,57886,60249,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58294,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59483,57909,57909,57909,57909,57909,57909,59491,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,521,1367,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2893,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,58764,57886,57886,57886,58768,57886,57886,58779,57886,57886,58783,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60588,60589,57886,57886,57886,57886,60592,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60598,57886,57886,57886,57909,57909,58878,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58897,57909,57909,57909,58901,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60367,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59515,57936,57936,57936,57936,59521,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59532,57936,57936,57936,57936,57936,57936,58953,57936,57936,57936,58957,57936,57936,58968,57936,57936,58972,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58991,57936,57936,57936,58995,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60399,57936,57936,57936,57936,57936,57936,57936,0,0,0,1726,1727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,516560,516560,516560,516560,0,1786,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1808,0,0,0,0,0,5111808,0,0,0,0,0,5283840,0,0,0,0,5472256,5521408,0,0,0,0,5595136,5709824,5718016,0,5824512,5865472,0,0,5922816,0,0,6021120,0,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59324,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60837,57886,60839,57886,57886,57886,57886,57886,57886,57886,60846,57886,57886,60848,57886,57886,57886,57886,57886,57886,57886,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59424,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61181,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60047,57936,57936,57936,57936,60052,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,57909,59442,59443,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,60907,57936,57936,57936,57936,57936,57936,57936,59538,59539,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59556,57936,57936,57936,57936,57936,57936,59563,57936,57936,521,521,521,59324,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,318,0,0,0,0,0,2384,0,0,2387,0,521,521,2390,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,60823,57886,57886,57886,57886,57886,57886,57886,59867,59868,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59879,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59891,57909,57909,57909,57909,57909,59956,59957,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59968,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58891,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59457,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59980,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,59992,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,3868,3627,0,0,57936,57936,57936,57936,57936,60039,60040,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60051,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60705,57936,57936,60708,57936,57936,60711,3368,521,521,60715,57886,57886,0,0,0,0,0,57936,57936,57936,60063,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,2732,2733,57886,57886,57886,60081,60082,0,0,1710,0,0,1717,0,0,0,0,0,1728,1729,0,0,0,0,0,1735,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,360,361,0,0,0,0,0,0,0,367,0,295,0,0,0,0,2821,0,0,0,0,0,0,0,0,0,2827,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2460,521,2462,57886,60286,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59919,57909,57909,57909,57909,57936,60406,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60418,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59011,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,3194,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3207,521,521,521,521,521,521,0,0,0,0,59818,57886,57886,57886,57886,57886,57886,57886,59826,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60590,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,60615,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60648,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60002,57936,57936,57936,57936,57936,60697,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,6152192,0,0,0,6316032,0,196608,0,0,5816320,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2754,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57936,57936,57936,57936,57936,61097,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,3760,57886,57886,61106,3763,0,0,0,0,3767,0,0,0,0,0,0,315,316,317,318,319,320,321,322,323,324,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1167,0,0,0,0,1171,0,0,1174,0,0,0,0,0,0,0,521,521,521,3788,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,61147,57886,57886,57886,61150,57886,57886,57886,57886,58274,57886,57886,57886,57886,57886,58293,57886,57886,57886,57886,58311,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,58350,57909,57909,57909,57909,57909,57909,57909,57909,57909,59478,57909,57909,57909,59484,57909,57909,57909,57909,57909,57909,57909,57909,57909,59494,57909,57909,57909,57909,59500,57909,57909,57886,57886,57886,57886,61241,57886,61243,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61257,57909,61259,57909,57909,57909,57909,57909,57909,57936,61074,57936,57936,57936,61077,57936,57936,57936,57936,57936,57936,57936,57936,57936,61085,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59516,57936,57936,57936,57936,57936,57936,57936,57936,57936,59528,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61470,57936,57936,57936,0,4130,0,0,0,0,0,521,521,4135,521,4136,521,521,521,521,521,521,521,57886,57886,61486,57886,61487,57886,57886,57886,57886,59340,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59353,57886,57886,57886,59358,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,59914,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60709,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,358,0,0,0,475,475,475,0,0,0,0,0,0,0,0,0,0,509,509,513,513,513,513,509,513,513,513,509,513,513,513,513,513,513,538,57904,538,57904,538,538,57904,538,538,57927,57904,538,538,57904,57904,57904,57927,57904,57904,57904,57904,57904,57904,57904,57927,57927,57904,57904,57954,57904,57904,57904,57904,57904,57904,57904,57954,57954,57904,57904,57904,57904,57954,57954,57904,618,57904,57969,57969,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,637,0,0,0,0,0,0,0,0,0,1305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1288,0,521,521,1320,521,1323,0,680,681,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,0,0,0,0,702,0,0,0,0,0,0,0,521,521,521,3876,521,521,521,521,3880,521,521,521,521,521,3886,521,521,521,57886,57886,57886,61235,57886,57886,57886,658,0,637,0,0,0,0,0,0,781,0,0,0,0,0,0,0,0,0,0,790,0,795,0,0,0,0,0,0,637,0,0,781,521,833,521,521,521,521,854,858,864,521,869,521,521,521,521,521,887,521,521,521,521,57886,57886,58252,0,790,0,795,0,781,0,807,0,0,0,0,807,0,0,0,0,0,637,0,0,0,0,0,0,0,0,781,0,0,0,0,0,0,1277,0,1162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,670,0,0,0,0,0,0,0,0,57909,57909,57909,57909,57909,58382,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,58403,57936,57936,57936,57936,58424,58428,58434,57936,58439,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,1142,0,0,1147,0,0,0,0,0,0,0,311,0,0,0,0,0,310,0,310,311,0,310,310,311,0,0,0,0,0,0,0,0,0,0,0,310,408,311,0,0,0,0,0,0,311,413,0,0,139264,147456,0,0,0,0,0,58457,57936,57936,57936,57936,521,521,521,887,521,521,0,57886,57886,57886,58306,57886,57886,155941,1138,0,301,0,0,305,0,0,0,0,0,0,0,0,2336,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2292,2293,0,2295,2296,0,0,0,0,0,0,0,0,0,1152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1169,0,0,0,0,0,0,0,0,0,0,0,1179,0,0,0,1183,1184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,1202,0,0,0,0,0,0,0,686,0,0,0,0,0,0,367,367,367,0,0,0,0,0,699,0,0,0,0,0,0,0,0,708,0,0,1243,0,0,0,0,0,0,1251,0,0,0,0,0,1256,0,0,0,0,0,0,0,0,0,0,0,1267,0,0,0,0,0,0,1301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,0,0,1275,0,0,1152,0,0,0,1281,0,1283,0,0,0,0,0,0,0,0,0,1291,0,0,0,0,0,0,0,0,521,521,521,521,521,2393,521,521,521,521,521,521,521,521,521,521,521,2405,521,521,521,521,521,521,0,1297,1256,0,1281,1300,0,1303,0,0,0,1183,0,0,0,0,1311,0,0,0,0,0,1311,0,0,1202,1311,1318,521,521,521,521,521,521,0,0,0,2473,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61043,57886,57886,57886,57886,57909,57909,57909,57909,57909,1324,521,521,521,521,1330,521,521,521,521,521,521,521,521,521,521,1351,521,521,521,521,521,521,521,521,521,521,521,521,1364,521,521,521,0,2895,0,0,0,0,57886,57886,57886,60243,57886,60244,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,521,521,1369,521,521,521,521,521,521,521,521,521,1377,521,521,521,1384,1386,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2881,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3202,521,521,521,521,521,521,521,521,521,521,521,521,3208,521,521,521,521,1409,58754,901,58756,57886,57886,57886,57886,57886,58763,57886,57886,57886,57886,58769,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58790,57886,57886,57886,57886,57886,57886,59870,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58818,57886,57886,57886,57886,57886,57886,57909,57909,57909,58911,57909,57909,57909,58918,58920,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58943,0,58944,58945,57936,57936,57936,57936,57936,57936,57936,57936,57936,59543,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58984,57936,57936,57936,58987,57936,57936,57936,57936,57936,57936,57936,58952,57936,57936,57936,57936,58958,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58979,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58992,57936,57936,57936,57936,58997,57936,57936,57936,57936,57936,59002,57936,57936,57936,59006,57936,57936,57936,59013,59015,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60922,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60395,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59038,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,0,0,0,1710,0,0,0,0,1717,0,0,0,0,0,0,362,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,734,0,0,0,0,0,0,0,0,0,0,1757,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1775,0,0,0,0,0,0,0,1783,1784,0,0,0,0,1840,1841,0,0,0,1844,0,0,0,0,0,1849,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,581632,0,0,0,0,0,0,0,0,0,0,0,581632,0,581632,581632,0,1862,0,1864,1840,521,521,521,521,521,521,521,521,521,521,521,1876,521,521,521,521,1882,521,521,521,521,521,521,521,521,521,521,2850,521,2852,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2427,521,521,521,521,521,521,521,521,521,521,521,521,1893,521,521,521,521,1897,521,521,521,521,521,521,521,521,521,521,521,521,1910,521,521,521,1915,521,521,521,521,521,521,521,521,521,2849,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2429,521,521,521,521,521,521,521,521,521,521,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59319,57886,57886,57886,57886,59325,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59336,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59419,57909,57909,57909,57909,59425,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59436,57909,57909,57909,57909,57909,57909,60653,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61091,57936,57909,57909,57909,59440,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59453,57909,57909,57909,59458,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59936,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59942,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,59536,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59549,57936,57936,57936,59554,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,2730,521,521,521,57886,60079,57886,57886,57886,0,0,0,0,0,0,0,0,2257,521,521,59604,57886,59606,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2277,2278,0,0,0,0,0,5210112,0,5365760,0,5554176,5570560,5578752,0,5668864,0,0,5791744,0,0,0,0,0,0,0,0,0,0,6201344,6242304,6250496,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,3443,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1382,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,2383,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2403,521,521,2407,521,521,521,2411,57886,57886,59842,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59852,57886,57886,57886,59855,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60609,57886,57886,57886,57886,0,0,57909,57909,57909,57909,57909,60618,57909,60619,57909,57909,57909,57909,57909,57886,57886,59894,57886,57886,57886,57886,57886,57886,57886,0,0,2561,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59923,57909,57909,59927,57909,57909,57909,59931,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59941,57909,57909,57909,59944,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61180,57909,57909,57909,57909,57936,57936,57936,57936,57936,61186,57936,57936,57936,61190,57936,57936,57936,57936,57936,59978,57909,57909,57909,57909,57909,59983,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60006,57936,57936,60010,57936,57936,57936,60014,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60024,57936,57936,57936,60027,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,4076,0,4078,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,60061,57936,57936,57936,57936,57936,60066,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2273,0,0,0,0,0,0,0,0,2743,0,0,0,0,0,0,0,0,0,0,2753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3629,0,0,0,0,0,0,0,0,0,0,0,0,0,2819,0,0,0,0,0,0,0,0,0,0,2826,0,0,0,0,0,0,521,521,2833,521,521,521,521,521,521,521,521,521,521,3465,3467,521,521,521,3470,521,3472,3473,521,57886,57886,57886,57886,57886,57886,60824,57886,57886,57886,57886,57886,2841,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2856,521,521,521,521,2859,521,521,2861,521,2862,521,521,521,521,521,521,0,0,2472,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59834,57886,57886,59838,57886,521,521,521,521,2870,521,521,2874,521,521,521,521,521,521,521,521,521,2883,521,521,521,2886,521,521,521,521,521,521,521,521,521,521,3669,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,58860,57909,57909,57909,57909,57909,58872,0,0,57909,57909,60309,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60317,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61183,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60420,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59008,57936,57936,57936,57936,57936,57936,57936,59022,57936,57936,57936,57936,57936,57936,57936,57909,60332,57909,57909,57909,57909,60335,57909,57909,60337,57909,60338,57909,57909,57909,57909,57909,57909,57909,57909,57909,60347,57909,57909,60351,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60655,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,60666,57936,57936,57936,57936,57936,57936,60673,57909,57909,60360,57909,57909,57909,60363,60364,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,60374,57936,57936,57936,57936,57936,57936,57936,57936,521,521,3096,521,521,57886,57886,60443,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450560,450560,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,450560,0,0,57936,57936,57936,60382,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60397,57936,57936,57936,57936,60400,57936,57936,60402,57936,60403,57936,57936,57936,57936,57936,57936,57936,57936,61272,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,3942,3627,0,0,0,0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,371,0,0,0,379,381,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1885,521,521,521,521,521,521,521,521,521,3794,521,521,521,3795,3796,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2559,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60325,57909,57909,57909,57909,57909,57909,3190,521,521,521,3193,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1917,521,521,521,521,521,57886,60581,57886,57886,57886,60584,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60594,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60838,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2561,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60630,57909,57909,57909,60633,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60643,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,58417,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60920,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,60674,57936,57936,57936,57936,60679,57936,57936,57936,60682,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60692,57936,57936,57936,57936,57936,57936,57936,57936,57936,4072,4073,0,0,0,0,0,4079,4080,4081,521,521,521,4084,521,4086,521,521,521,521,61435,61436,61437,3457,521,521,521,521,521,521,521,521,521,521,521,521,521,3469,521,521,521,521,521,57886,57886,57886,60821,57886,57886,57886,57886,57886,57886,57886,57886,57886,60587,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60595,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2560,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60640,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60883,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60897,57909,57909,57909,57909,57909,57936,57936,57936,60905,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61201,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3784,521,521,521,57936,60939,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,3610,0,0,0,0,0,0,0,3616,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,377,0,0,0,0,0,0,0,0,2824,2782,0,0,0,0,0,2829,0,0,0,521,521,521,521,521,521,521,2838,521,521,521,521,521,0,0,0,3640,3641,0,0,0,0,521,521,521,521,521,521,521,521,521,3651,521,521,521,521,521,521,521,521,521,521,521,521,521,3671,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60612,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,60620,57909,57909,57909,57909,521,3661,521,521,521,521,521,3666,521,3668,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,61022,57886,57886,57886,57886,57886,57886,57886,60292,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60303,57886,57886,57886,57886,57886,0,2962,0,0,57909,57909,57909,57909,61051,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61061,57909,57909,57909,57909,57909,57909,61067,57909,61069,57909,57909,57909,57909,57909,57909,57909,58884,57909,57909,57909,57909,57909,57909,57909,57909,57909,58894,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59938,57909,57909,57909,57909,57909,57909,59943,57909,59945,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,61096,57936,61098,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,3765,0,0,0,0,0,0,0,0,2363,0,0,0,0,0,0,0,0,0,0,0,0,0,2374,0,0,0,0,0,0,0,0,0,656,0,0,659,660,0,0,0,0,0,0,0,0,0,0,671,0,0,0,0,0,0,0,0,0,3770,0,0,0,0,0,0,0,3627,0,0,0,0,0,3779,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3786,521,521,521,3790,521,521,521,521,521,521,521,521,521,521,521,521,521,3799,521,521,521,57886,57886,57886,57886,57886,61148,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,60867,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60880,57909,57909,61152,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61161,57886,57886,57886,57886,57909,57909,57909,57909,57909,61167,57909,57909,57909,61171,57909,57909,57909,57909,57909,57909,57909,61053,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59459,57909,57909,57909,57909,57909,57909,57909,57909,61438,57886,57886,57886,57886,57886,57886,57886,57886,61446,57886,57909,57909,57909,61451,57909,57909,57909,57909,57909,57909,57909,57909,61459,57909,57936,57936,57936,61464,57936,57936,57936,57936,57936,57936,57936,57936,57936,59576,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57936,57936,57936,57936,57936,61472,57936,0,0,0,0,4131,0,4133,521,521,521,521,521,521,521,521,521,4139,4140,521,57886,57886,57886,57886,57886,57886,57886,57886,61445,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61458,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60919,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60929,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,4088,521,521,57886,57886,57886,57886,57886,57886,61490,61491,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,61498,61499,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,61506,61507,57936,57936,57936,57936,57936,57936,57936,57936,61415,0,0,4074,4075,0,0,0,521,521,521,4082,521,521,521,521,521,521,521,521,4090,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,60865,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61184,57936,57936,57936,57936,57936,57936,57936,61189,57936,57936,57936,57936,57936,57936,0,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,4220,57886,61565,57909,61566,57936,61567,521,57886,57909,57936,521,521,521,521,521,521,521,1899,1900,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3800,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,425,425,0,0,131072,425,0,0,0,425,0,0,447,0,425,0,476,476,476,0,0,361,361,361,495,361,361,361,361,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,539,57905,539,57905,539,539,57905,539,539,57928,57905,539,539,57905,57905,57905,57928,57905,57905,57905,57905,57905,57905,57905,57928,57928,57905,57905,57955,57905,57905,57905,57905,57905,57905,57905,57955,57955,57905,57905,57905,57905,57955,57955,57905,539,57905,57905,57905,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,376832,0,376832,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1854,0,0,0,0,0,0,0,0,0,0,0,57909,58369,57909,57909,57909,57909,58387,57909,57909,57909,0,0,0,0,58293,57936,57936,57936,57936,57936,57936,57936,58425,57936,57936,57936,57936,57936,58444,57936,57936,57936,57936,57936,57936,57936,57936,57936,60069,57936,57936,57936,57936,2729,521,521,521,521,60078,57886,57886,57886,57886,2739,2266,0,2740,2269,0,0,2742,57936,58462,57936,57936,57936,521,521,521,521,892,521,0,57886,57886,57886,57886,58311,57886,155941,1138,0,1139,0,0,1144,0,0,0,0,0,1150,0,0,0,0,0,5341184,0,5652480,0,0,0,0,4759552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1827,0,0,0,0,0,0,0,1834,0,0,0,0,0,0,1244,0,0,0,0,1249,0,0,0,1253,0,0,0,0,0,0,0,1253,0,0,0,0,0,0,0,0,0,0,0,466944,0,0,0,0,0,0,0,0,1825,0,0,0,0,0,0,0,0,0,0,0,0,353,354,355,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,521,521,521,1327,521,521,521,1336,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2895,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60574,57886,57886,60578,57886,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,58766,57886,57886,57886,58775,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61034,57886,57886,57886,57886,57886,57886,57886,57886,61042,57886,57886,57886,57886,57886,57886,57909,57909,57909,61047,57909,57936,57936,57936,57936,57936,58955,57936,57936,57936,58964,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59555,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,521,521,1931,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1953,521,521,521,521,521,521,0,2470,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59839,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59333,57886,57886,57886,57886,57886,57909,57909,57909,57909,60864,57909,57909,57909,57909,60868,57909,57909,57909,57909,57909,57909,57909,60874,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,58402,57936,57936,57936,57936,57936,57936,58433,58435,57936,57936,57936,57936,57936,57936,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59433,57909,57909,57909,57909,57909,57909,57909,57909,57909,59986,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60001,57936,57936,60004,57936,57936,57909,57909,57909,57909,57909,59474,57909,57909,57909,57909,57909,57909,57909,57909,59486,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59497,57909,57909,57909,57909,57909,57886,57886,57886,57886,59372,57886,57886,59375,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59389,57886,57886,57886,57886,57886,57886,59395,57886,57886,57886,57886,57886,57886,57886,57886,59872,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60304,57886,57886,57886,0,2962,0,0,57936,57936,57936,57936,59570,57936,57936,57936,57936,57936,57936,57936,57936,59582,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59593,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,293,1138,0,0,0,0,0,0,0,0,0,0,0,0,3119,0,3120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3135,0,0,0,0,2283,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2301,0,0,0,0,2359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,336,0,0,0,0,57886,59841,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59863,57886,57886,57886,57909,57909,57909,57909,57909,59930,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,58947,57936,57936,57936,57936,57936,57936,60013,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59589,57936,57936,57936,57936,57936,57936,57936,57936,521,521,0,0,57909,57909,57909,57909,57909,57909,57909,60313,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58931,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,60626,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,1259,57886,57936,57936,57936,57936,57936,60675,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59524,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57886,57886,57886,61155,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,61174,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61193,57936,57936,57936,57936,57936,57936,57936,57936,61100,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,1162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,1205,0,0,57936,57936,57936,57936,61471,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57909,57909,57886,57886,57936,57886,57886,57886,57886,57886,57886,57886,57936,57936,57886,57886,57886,57886,57936,57936,57886,521,57886,57886,57886,372,372,0,0,131072,372,0,0,0,372,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57906,57906,57906,57906,57906,57906,57906,57929,57929,57906,57906,57956,57906,57906,57906,57906,57906,57906,57906,57956,57956,57906,57906,57906,57906,57956,57956,57906,540,57906,57906,57906,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2334720,0,2334720,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,2834,2835,521,521,521,521,521,521,521,521,57886,57886,57886,58267,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,58343,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61179,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,61187,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,301,305,0,0,0,0,0,0,0,0,0,0,0,0,1282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2758,2759,0,0,2762,0,2764,0,0,0,0,0,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58780,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,59909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60658,57909,57909,57909,57909,57936,57936,57936,57936,57936,60667,57936,60668,57936,57936,57936,57936,58875,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59947,57909,57909,57909,57909,57909,0,0,0,3771,0,3772,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3657,521,521,521,521,521,521,0,0,0,363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,0,245760,0,0,0,363,0,0,0,0,0,0,0,0,0,0,363,0,364,0,0,0,0,363,0,0,0,139264,147456,0,0,0,0,0,0,653,654,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1858,0,0,0,0,0,0,0,0,0,433,131072,0,433,433,0,0,433,0,364,433,0,459,0,0,0,487,487,490,490,490,490,496,497,490,490,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,541,57907,541,57907,541,541,57907,541,541,57930,57907,541,541,57907,57907,57907,57930,57907,57907,57907,57907,57907,57907,57907,57930,57930,57907,57907,57957,57907,57907,57907,57907,57907,57907,57907,57957,57957,57907,57907,57907,57907,57957,57957,57907,619,57907,57970,57970,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1239,1806,0,0,0,0,1246,1246,0,0,57909,57909,57909,57909,57909,58383,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60688,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58458,57936,57936,57936,57936,521,521,521,888,521,521,0,57886,57886,57886,58307,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,1794,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,1272,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3402,2768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2318336,57909,57909,57909,57909,57909,60334,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60344,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57886,57886,58268,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,58344,57909,57909,57909,57909,57909,57909,57909,57909,57909,58393,0,0,0,0,57886,57936,57936,57936,57936,58409,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59517,59518,57936,57936,57936,57936,59525,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,1240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2792,0,521,1368,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1395,521,521,521,521,521,521,521,521,2875,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58834,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60895,57909,57909,57909,57909,57909,57909,57909,57936,60903,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58996,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59024,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,301,0,0,305,0,0,0,0,0,0,0,0,1216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1232,0,0,0,0,0,0,0,0,1304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,3178,521,3179,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2469,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59883,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,521,521,521,2844,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2434,521,521,57936,57936,57936,57936,57936,57936,60385,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59522,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,640,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,893,521,521,521,57886,57886,57886,57886,57886,57909,57909,60862,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60879,57909,60881,57909,57936,58463,57936,57936,57936,1126,521,521,521,893,521,0,57886,58477,57886,57886,58312,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,1817,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,402,0,0,0,0,0,0,0,0,331,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59326,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,59908,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60343,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59426,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59961,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60346,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,521,521,521,521,2415,521,2417,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2432,521,521,521,521,521,521,2867,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1923,57936,57936,57936,57936,60409,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60423,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,3660,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,2562,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,61185,57936,57936,57936,61188,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,131072,0,0,0,0,0,0,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2310144,0,0,2310144,0,0,0,0,0,0,0,2310144,0,2310144,0,0,0,0,0,0,2310144,2310560,2310560,0,2310144,0,0,2310144,0,0,0,0,0,0,2310144,0,0,0,0,0,0,0,0,0,0,2310144,0,0,0,0,0,0,2310144,0,0,0,0,0,0,654,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2310144,0,367,0,0,0,0,0,0,0,2310560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,380,0,383,0,0,0,0,0,0,2310144,0,0,0,2310144,0,0,0,0,0,2310144,0,0,2310144,0,0,2310144,0,2310144,2310144,0,2310144,0,2310144,2310144,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,3445,521,521,521,521,521,521,521,521,521,521,521,521,521,1347,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1362,521,521,2310144,0,0,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310144,2310733,2310144,2310144,2310733,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2310,0,0,0,0,0,0,0,0,2318,0,0,0,0,0,2322,0,0,2324,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,521,521,521,839,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,898,57886,57886,57886,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,460,2335197,2335197,2335197,460,460,460,460,460,460,460,460,460,460,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3392,0,0,0,0,0,0,0,0,0,3399,3400,0,3401,0,2335231,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2763,0,0,0,0,0,2767,0,0,0,0,417,0,0,0,0,0,0,0,0,0,0,2359296,0,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3416,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2359296,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2798,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2813,0,0,0,0,2367488,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,976,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,521,521,521,2391,2392,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2855,521,521,521,521,521,521,521,2860,521,521,521,521,521,521,521,521,0,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3134,0,0,212992,0,0,0,0,0,4366336,0,0,0,0,0,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,382,0,0,6258688,6447104,0,0,6127616,0,6348800,5906432,0,5537792,0,0,0,0,0,5939200,0,0,5677056,6365184,4866048,0,6070272,5545984,5152768,0,0,6144e3,4358144,4866048,4882432,4358144,4358144,4358144,0,1411,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,900,900,900,5537792,5545984,5586944,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,4358144,6348800,4358144,6144e3,0,6144e3,0,4988928,5005312,0,0,0,0,5775360,0,0,0,0,0,0,0,750,808,0,0,0,750,0,0,811,692,0,0,0,816,0,0,0,818,0,0,0,685,692,0,0,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,5914624,5914624,0,0,0,0,0,5513216,5783552,0,0,0,0,0,0,656,0,779,0,0,0,0,0,0,0,783,0,0,0,0,792,0,0,0,0,0,800,0,783,0,0],r.EXPECTED=[166,182,211,1104,242,1452,1467,273,289,712,1117,319,349,333,365,381,397,413,195,1866,2240,2243,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,429,445,461,477,2088,226,493,2075,939,621,523,543,1716,559,575,591,607,1422,650,666,1822,697,1565,634,728,738,754,796,812,828,844,860,876,892,908,924,955,2180,985,681,2211,1015,1044,1028,1060,1090,1133,1320,1149,1165,1551,1181,1197,1213,1229,1259,1904,1365,1375,999,969,1762,1289,1305,1336,1351,1488,1391,1407,1504,1623,1520,1536,1581,1273,1610,1639,1655,1671,2118,2149,1687,1703,1437,507,1732,1748,1778,1074,780,1809,1838,1854,1890,1920,1936,1952,1968,1984,2e3,2016,2032,2061,257,2104,303,2045,767,1793,1594,2134,1243,2165,2196,2227,2234,1874,1479,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,536,2259,2263,2271,2271,2271,2265,2269,2271,2272,2276,2279,2286,2282,2290,2294,2298,2302,2306,2310,2381,2790,2790,4003,4941,2790,2791,2314,3074,2982,2790,2790,2790,2687,2790,5013,2790,2790,2790,2790,2790,2790,2790,2827,2790,2571,3537,4080,2436,2320,2443,2466,2326,2336,2790,2790,2790,2343,2790,2790,2349,3841,2707,2790,2734,2759,2790,2790,2790,2790,4756,2738,2790,2790,2790,2790,4767,2321,2390,2466,2466,2466,2466,2355,2361,2790,2790,2790,2790,2790,2371,4535,2790,2696,4816,2790,2790,2790,2697,4817,2790,2790,2790,4822,4790,2790,2790,3017,3842,2448,2790,2790,3537,4079,4079,4079,4079,4079,4099,2436,2436,2436,2436,2436,2387,2321,2321,2321,2321,2321,2459,2466,2466,2466,2466,2466,2332,2401,2790,2790,2762,4873,2790,2790,2790,2790,2820,4885,2790,2790,2790,2790,3243,4891,3542,4079,4079,4079,4097,2436,2436,2436,2436,2458,2321,2321,2321,2331,2466,2466,2426,2790,2790,3074,4076,4079,4079,2396,2436,2482,2321,2321,2464,2466,2466,2411,2790,2790,4535,2790,4077,4079,4079,2480,2436,2436,2457,2321,2321,2420,2467,2428,2834,3536,4079,2434,2436,2441,2321,2465,2332,2447,4095,4081,2437,2376,2466,2452,4078,2436,2321,2466,4335,4081,2456,2463,2422,4080,2482,2463,2471,4098,2483,2331,2478,2329,2487,2491,2474,2495,2498,2508,2512,2519,2519,2519,2515,2525,2519,2521,2529,2536,2532,2540,2544,2548,2552,2556,2560,4697,2790,2790,2790,4729,2790,4591,2584,2858,2790,2790,2790,3364,2591,2790,3610,2603,2609,2613,2617,2621,2625,2628,2632,2636,4053,2702,2790,2790,2790,2790,3877,2642,2648,2892,4432,2646,2915,2367,2654,3828,2813,2790,2652,3406,2659,2664,2790,2790,2790,2790,2790,2671,4434,2580,4063,2790,2676,2680,2790,2790,2790,3867,2684,2790,2790,2790,3868,2685,2750,2790,2790,2790,2790,2756,2760,2790,2790,2790,2790,2790,2880,2666,2790,2790,2777,4228,3359,2851,4232,4238,2790,4246,4420,4253,3266,4258,4264,3443,2790,4721,2782,2790,2790,2790,3228,3232,2790,2790,2790,2790,4105,2790,2790,2790,2790,2790,2790,3903,3876,2788,4641,2790,2790,2790,3307,2790,2790,2790,4640,2818,2790,2790,3306,2795,2935,2812,2790,2790,2744,2790,3875,3239,2817,2790,4088,2790,2790,2824,2790,3502,2818,2790,3007,2790,3959,3750,2960,2745,3748,2790,4626,2790,4622,2667,2940,2842,3754,2902,4615,2840,3753,3753,3753,4616,2838,4624,4624,3006,3753,2841,2903,2719,3291,3292,3752,2941,2998,3e3,2847,2790,2790,2790,2790,2790,3322,3326,2790,2790,2790,3241,4802,2775,4735,2782,2790,2790,2790,4802,3231,2790,2790,2790,2771,4780,3110,4601,2790,3607,2790,3763,3555,2886,2973,2790,3980,2790,3666,2790,4542,2416,2884,2890,2896,2907,4569,2911,2790,2919,5035,2790,2913,2925,2790,4599,2686,2790,3665,2790,4541,3125,4330,4429,2929,2934,2939,3953,2790,2790,4197,3440,2790,2790,2790,2790,4592,3426,2790,2790,2790,2790,2790,4860,2951,2790,3324,2790,2790,3609,3761,2790,4016,2955,2741,2842,2790,4742,2959,2790,2790,4535,2790,2790,4096,4079,4079,4079,4079,2435,2436,2436,2436,2436,2437,2980,2790,2790,2790,2790,2802,2989,2790,2790,2790,2790,2801,2988,2790,2790,2790,4818,4810,3928,2790,3608,3761,2316,2993,3004,2790,3011,3032,2790,2790,2790,4503,3015,2790,2790,2790,2790,3011,3032,2790,2790,2790,2790,2790,3026,4920,2790,2790,2790,2790,3025,4919,2790,2790,2790,2790,2790,4355,3755,4359,2790,2790,3354,3059,4366,4372,4240,2834,4504,3016,2790,2790,3635,3927,3023,3031,4541,3436,3037,3854,3044,2790,2790,3451,3049,2790,2790,3024,3043,2790,2790,2801,3048,2790,2790,3053,3064,3031,4492,3071,2975,3079,2790,3470,3088,2790,3421,3079,2790,2801,3098,2790,4152,3102,3109,2574,3114,3122,2790,4585,3124,2790,3129,2790,4584,3123,2790,4154,3033,3133,4950,3518,3142,4948,4952,3148,2790,4155,3156,3188,3160,3150,4950,3167,3186,3174,3174,3174,3180,3184,3192,3192,3196,3200,3175,3209,3433,3213,3176,3861,3217,3221,4494,3225,3236,3247,2790,2790,2790,2790,3914,2790,2790,3253,3263,3403,3170,3479,3270,3274,3278,3282,3285,3285,3286,2790,2790,3913,2790,3549,3337,3848,3342,3290,3496,2655,3296,3300,3311,3318,4953,3330,4637,2790,3320,2790,2790,3659,2790,2790,3336,2790,2790,4722,2770,2790,2790,2790,2790,4722,2770,2790,2790,2790,2790,2790,4190,3341,3484,3460,3144,3346,3363,3369,2976,3375,2790,2790,2790,3383,3388,2790,2790,2790,3472,2790,2790,2790,4413,2790,4305,3786,4825,2790,2790,2364,2790,3482,3486,2790,3416,3420,2790,4591,3425,2790,2790,2790,2790,2672,3430,2790,2790,2790,3769,2790,2790,2790,2790,3471,3736,2790,2790,2790,2790,3776,2790,3469,2790,2790,2790,2790,4198,3468,2790,2790,2790,2790,4198,3468,2790,2790,2790,2790,2921,3506,2790,2790,2790,4591,3513,2790,2790,2790,3724,2660,2790,4124,3542,3476,3490,3494,3634,3500,2790,2921,3506,2790,2790,2790,2790,3512,3517,3522,2833,3204,2790,3527,2790,2790,2790,4249,2790,2790,2790,3526,2790,2790,2790,3821,2761,2790,2790,2790,2790,4347,2686,2790,2790,2790,2790,4351,2790,4248,2790,2790,2790,3531,3517,3412,2790,2790,4987,2790,2790,2563,2790,2790,2790,4094,4079,4079,4079,4079,2435,2436,2436,2436,2397,2321,2321,2321,2321,2321,2464,2466,2466,2466,2466,2393,2405,2790,2790,2833,2790,4987,2790,2790,4422,2790,2790,4126,4322,3032,2790,4987,2790,3390,4989,2790,2605,2730,2790,3541,3547,4788,3547,2566,2566,2566,4894,4014,4014,4014,4788,2832,3553,2315,4875,2567,4015,4896,2830,2899,3559,3560,3564,2790,2790,2790,2790,2790,3615,3614,2790,2790,4465,3917,2585,3619,3625,3737,4266,4915,3629,3649,4306,3633,3639,3647,3653,2790,2790,4691,3658,2790,4464,3916,2790,3663,2722,3670,3674,4193,4196,2790,3690,2790,2790,2790,2382,3694,2790,2790,2790,2383,3695,2790,2790,2790,2339,3143,2790,2790,2790,4517,2790,2965,4474,4719,4065,4703,2578,3699,3704,2790,2790,3118,2790,2790,2790,4999,2790,4869,4984,5004,2752,2790,2790,3118,2790,4317,3723,2790,2790,2790,2790,4391,3711,2790,2790,2790,2790,3716,3847,2790,2790,3259,2790,2790,2790,2790,2790,3258,2783,2790,2790,2790,2790,3258,2783,3791,2725,2790,3795,2790,2790,3803,2790,2790,3810,2790,2790,2638,2790,4782,3202,2716,3818,2790,3795,2790,4584,3812,2790,2351,2790,2790,3811,2790,3825,3838,2790,2790,4988,2790,3725,4875,2790,2414,2790,3535,4942,2790,2430,2790,4323,4014,3846,3205,3847,4039,2790,2713,2790,3852,3683,3067,3104,2790,3685,4305,3685,3915,3915,3105,3683,3683,3683,3066,3331,3105,3332,3331,3332,3684,3256,2790,2790,3371,3735,2790,2790,2790,2790,3421,3742,2790,2790,2790,2790,2790,3741,2790,2790,2790,2790,3746,2790,3759,2703,3621,4113,3881,3885,3889,3893,3894,3898,3902,2790,2790,3162,2790,2790,3643,2983,4501,4562,3907,3765,4282,3921,2790,4554,4022,2790,3925,3932,4556,3936,2790,4242,3941,2790,2855,2784,3943,4375,4402,2862,2866,2870,2874,2874,2875,2879,2819,3325,2790,2778,2790,4182,4960,4187,2504,5007,4203,4207,4211,4215,4219,4222,4224,2790,2790,4077,4079,4079,4079,4079,4079,2396,2436,2436,2436,2436,2436,2375,2321,2321,2321,2322,2466,2466,2466,2466,2466,2332,2357,2380,2790,2790,2790,2790,2790,2790,2790,2790,3204,2790,2790,2790,2790,2790,2790,2790,2790,3163,2790,2790,2746,3858,4848,4930,3872,3642,4579,2727,4118,2315,3764,3947,3951,2790,2790,3814,3957,2790,2790,2790,3967,3350,2984,2729,3978,3548,3984,3961,2790,2790,3813,3988,2790,2790,2790,2790,3686,4027,2790,2790,2790,2790,3257,4051,2790,3074,2790,2790,4299,3993,2790,4007,2790,2984,2790,3568,3575,4260,3583,3587,3591,3594,3597,3600,3601,3605,2790,2790,2790,4750,2964,2790,2790,2790,2790,2969,2761,2790,2790,2790,2790,4743,2790,4834,2790,3348,4604,4013,4070,4311,4020,2790,2790,2790,4026,2790,2790,2790,2790,3578,4964,2790,2790,2790,2790,4969,2790,2790,2790,2790,3579,2790,4031,2790,4037,2790,4043,2789,4333,4571,4021,2790,2790,4362,2790,2790,2790,2790,3968,4183,2790,2790,4271,3972,4033,2790,2790,4832,2790,2796,2790,4360,3993,2790,2790,2790,2790,4049,2790,2790,2790,2790,4361,2761,4510,4241,4057,4254,4773,4069,4439,2790,2790,4976,2790,2790,2790,4457,2761,2790,2790,4485,3989,2790,2790,4456,4074,3731,4836,4254,4085,4092,3707,2790,4060,2790,2790,4060,4147,4132,4140,4134,4843,2501,4130,4921,4921,4921,4291,4135,4132,4132,4132,4139,4922,4135,4144,4922,4923,4133,4159,4169,4171,4166,4163,4175,4178,2790,2790,2790,2800,2790,2746,3958,4087,2818,2790,3314,2806,2790,3502,2818,2790,2790,4270,3039,4275,2790,2790,2790,4279,3358,2850,4286,4295,2790,3397,3607,4303,4310,2790,2790,4965,4315,2790,2790,2790,3378,4321,2790,2790,2790,3379,2790,2790,3472,2790,2790,2790,2345,3847,2790,2790,3471,3736,2790,4603,2790,4305,2790,4812,4327,4339,2790,2790,3352,3356,2996,4343,3937,4297,4995,4476,2843,2790,3025,4927,2790,2790,4934,2406,2599,4938,5023,4946,2790,2790,2790,2790,4957,4381,4359,2790,2790,2790,3806,4389,2790,2790,2790,2790,3963,4396,2790,2790,2790,2946,2790,2790,2790,3712,2947,2790,2790,2790,4234,3973,2790,2790,2790,3962,4395,2790,2790,2790,2790,3962,4395,3755,4359,2790,3056,3060,4368,3960,4535,4377,2790,2790,2790,2808,4400,2790,2790,2790,2790,4406,2790,2790,2790,2790,2790,2790,2790,4708,2790,2790,2790,2790,2790,2790,2790,2790,2790,3152,3203,2790,2790,2790,2790,2790,3963,4411,2790,2790,2790,2807,4407,4446,2790,4417,2942,4426,3654,3761,2790,2790,3720,2790,2790,2790,2790,2790,3729,2790,4472,2790,2586,3787,3138,2790,4862,4438,2790,2790,2807,4451,2790,2790,2790,4443,2790,2790,2790,4450,4689,3400,2942,4455,4536,4484,2790,4461,2790,2790,4469,2790,2790,4480,2790,2790,3779,4523,4489,4498,3654,4483,2790,4508,2790,5040,4002,2790,4514,2790,2790,4521,4525,4529,4540,4384,4590,4385,2790,4514,2790,4547,4551,2790,3997,4560,4566,3999,4575,3995,4009,4009,4009,4583,4589,4001,4001,4596,3680,4608,4879,4613,4620,4609,4877,2407,3782,4792,4793,2790,2790,2790,2790,2790,2790,2790,3018,4630,4634,4645,4649,4653,4657,4661,4665,4669,4672,4676,4679,4683,2790,2790,2790,3017,4695,4542,4761,4701,4577,4906,4707,4712,4716,4727,2790,3832,2594,3075,4733,3830,4739,2790,2790,2790,3019,4842,2597,4900,4904,4853,4912,2790,2790,2790,2790,2790,3027,4747,4754,4760,4765,4771,4777,4786,4797,4801,2790,2790,2790,2790,4807,2790,2790,3876,4543,4150,2930,2766,2790,2790,2790,2790,2790,4723,2790,2790,2790,2691,2790,2790,2790,3094,2695,2701,2790,2790,2790,2790,3508,2790,4840,2406,4847,4803,4111,4852,4857,4914,2790,2790,2790,2790,2696,4866,2790,2790,3910,2790,2790,4686,4531,4887,3772,3082,3706,2790,4289,2790,3974,3915,4973,2790,4980,4984,5018,4907,4994,2790,2790,2801,4830,2790,2790,2790,5e3,2790,3091,2790,2790,4103,4533,4109,3084,2790,4117,4908,2790,3303,2790,4122,3249,2790,4999,2790,2790,4828,2790,2790,3571,2790,5011,5017,5022,2790,2790,3799,2790,3384,3389,2790,2790,5029,3394,2790,2790,2790,2790,4881,2790,3543,3449,3410,3116,5028,2790,3798,2790,2790,5027,3365,3864,2790,4990,2790,4045,2790,2710,2790,3447,4603,3455,3459,3700,3677,2790,2790,3464,2790,2790,2790,2790,2790,4199,5033,3136,2790,4383,5039,2587,3834,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2578,2790,2790,2790,2790,2790,2790,2790,2790,6090,6563,5044,5057,5054,6594,6596,6596,6596,6591,5074,6595,6596,6596,6596,6596,5087,5061,5074,6596,6596,5067,5062,6596,5078,5084,5080,5066,6594,6163,5071,5091,5094,5094,5094,5095,5099,5099,5103,5107,5114,5111,5118,5122,5134,5137,5129,5130,5127,5125,5141,5145,6561,6446,5234,5173,5635,5635,5635,5219,5598,5503,5251,5251,5251,5251,5252,5196,5267,6248,5502,5251,5251,5196,5196,5196,5266,5202,5212,5632,5635,5050,6519,6509,5635,6818,5635,5635,5146,5150,6535,5218,5635,5635,5147,5154,5196,5267,5268,5502,5213,5214,5232,5214,5631,5635,5146,5151,5635,5155,5619,6297,5635,6532,6536,5244,5250,5251,5251,5251,5295,5631,5633,5635,5635,5635,5049,6518,5502,5502,5293,5251,5251,5226,5196,5196,6247,5270,5502,5502,5502,5504,5268,5502,5214,5633,5282,5635,5635,5635,5273,6084,5196,5267,5271,5635,5166,5635,5635,5749,5219,5251,5296,5196,5196,5306,5635,5196,5265,5269,5273,5635,5635,5165,5635,6247,5268,5502,5502,5502,5502,5251,5502,5251,5251,5251,5186,5193,5272,5635,5635,6261,5635,5298,5635,5635,6262,5502,5502,5294,5251,5251,5251,5296,5251,5251,5264,5196,5196,5196,5196,5265,5196,5197,5635,6245,5269,5293,5296,5306,6246,6247,5502,5502,5502,5292,5251,5251,5196,6255,6247,5270,5292,5251,5264,5197,5198,5302,5297,5312,5312,5304,5635,5179,5635,5643,5168,5635,6860,5329,5590,5333,5336,5339,5343,5362,5419,5347,5351,5404,5419,5419,5419,5419,5368,5384,5393,5355,5359,5418,5367,5372,5346,5420,5381,5390,5397,5377,5386,5419,5376,5401,5416,5424,5428,5430,5430,5434,5436,5440,5473,5444,5446,5365,5407,5450,5454,5458,5466,5464,5466,5462,5470,5477,5635,5181,6353,5635,5219,5635,5635,5219,5635,7266,5635,5904,5635,6256,6080,5635,6853,5635,5635,5169,5672,6820,5635,5635,5635,5275,5635,5635,7112,6346,7172,5635,5220,7282,5635,5273,5642,5635,5635,6879,5246,5891,5635,5635,5182,6258,5523,6083,6080,5977,6569,5635,6877,6875,6150,5527,5530,5531,5535,5538,5542,5547,5545,5551,5553,5554,5558,5561,5569,5562,5566,5562,5572,5574,5578,5635,6820,6222,5635,5975,5635,5635,6702,6210,5614,5635,5635,5189,5635,5635,6773,5656,5635,5635,5635,5307,5668,5635,5635,5635,5315,6779,5662,5666,5635,5635,5635,5582,5675,5635,5635,5635,5320,5679,6567,5635,5683,5691,5698,5706,5734,5699,5707,6568,5635,5635,5635,5491,6736,5694,5700,5708,5162,5635,5635,5635,5513,7310,6318,5664,5635,5635,5635,5277,5746,5635,5712,5635,5274,5273,5635,5274,6223,5635,5275,5635,6695,5635,5635,6694,5823,6568,5635,5322,5635,5635,5910,5635,5635,5635,6618,5236,5635,5717,6739,6745,5731,6568,5635,5324,5635,6335,5811,5635,5635,5635,5675,5701,5732,5635,5635,5318,5635,5635,6736,6740,6744,5730,5734,5635,5635,5635,5514,5768,5701,5775,6568,5776,5635,5635,5635,5615,5747,7254,5635,5635,5512,6989,5208,6448,5733,5635,5635,5635,5625,5788,7253,5635,5635,5635,5635,5159,5797,5635,5635,5635,5638,6319,5635,5635,5635,5640,6027,5799,5635,5635,5635,5646,5650,6805,5635,5635,5635,5655,5805,5798,5635,5635,5635,5636,5515,5803,6804,6568,5635,5496,5048,5635,5219,6618,5635,5635,5635,6260,5635,5583,5635,5635,5819,6695,5635,5635,5635,5724,5819,5635,5821,5819,5635,5635,6934,6878,5756,5815,5829,5635,5508,5204,5664,5842,5846,5854,5858,5862,5866,5866,5868,5870,5870,5870,5870,5874,5874,5874,5874,5877,5879,5635,5635,5635,5738,7116,5885,5635,6258,6080,5635,5899,5917,5635,5635,5594,5635,5324,5635,5635,6618,5635,6618,5635,5582,5635,5635,5819,5921,5635,5635,5487,7303,5485,5635,6834,5635,5635,5612,5635,6832,5932,5635,5635,5635,7178,5635,6696,5635,5937,5325,5635,5635,5635,5761,5969,5635,5635,5635,5804,5984,5635,5635,5635,5819,5635,5850,6339,5992,5606,5635,5635,5635,6696,5635,5938,5635,6256,6930,6081,6015,5635,5635,5635,5895,6016,5635,5635,5635,5902,5640,5999,6005,6011,6261,5635,6095,5635,5635,6088,6289,6037,6042,5635,5635,5635,7255,5635,5635,6027,6032,6038,6043,5635,5635,6256,5635,6082,5635,5820,5635,5820,5635,5635,5821,6261,6335,6695,5635,5635,6692,6568,5923,7028,6032,6058,6033,6059,5635,5635,5635,5908,7128,7132,6613,5635,5635,5635,5923,5517,6786,6790,5635,6564,5635,5635,5635,5907,6260,6318,5635,5635,5635,7259,6072,6033,6064,5635,5635,7027,6032,6063,6564,5635,5635,6260,6261,5636,6988,7255,5678,5635,6082,5635,5821,5945,5412,5635,5635,5635,7285,5635,5635,6257,6081,6261,5635,5635,5635,5221,6071,6711,6064,5635,5635,6838,5635,5589,6617,6072,6712,6065,5635,5635,6844,5635,5635,6851,6568,6070,6710,6063,6564,5943,6983,5635,5635,5635,7286,5635,5756,5635,5635,5635,5943,6260,6094,5635,5635,5635,7332,5720,5635,6821,6073,6109,5635,5635,5635,5956,5635,6099,6107,6066,6256,6081,6337,5635,5635,6852,5635,5320,5635,6075,6079,5635,5635,5635,5958,5635,6820,7158,6077,5635,5635,5635,7346,5635,6131,6821,6074,6076,5635,5635,6820,6708,6127,5635,5635,7156,5634,5905,5635,5228,6053,5274,6116,6079,5635,6981,6142,7156,5822,5635,7157,6118,5635,5635,6115,6078,5635,5635,6114,6078,5635,5635,6115,6078,5635,5674,5285,5674,6117,5635,5635,5636,5635,5635,5635,6221,6118,5635,5635,6116,6139,6079,5635,6139,7083,5674,6617,7134,5635,7134,5635,7134,5635,6616,6614,5635,5635,6878,5764,6744,6449,5734,5635,5287,6614,6614,6614,7253,5635,5674,5635,5635,5512,5516,5635,6392,6392,5635,5636,5642,6257,5635,6085,7286,5635,5635,5635,6481,6485,5733,6255,6840,6147,5635,5635,6940,6946,7286,6617,6879,6154,6160,6167,6156,6171,6175,6179,6183,6184,6189,6189,6185,6193,6193,6193,6193,6196,7276,5635,5583,5635,5635,5582,6208,5635,5635,6214,6197,5278,6228,5635,5635,6975,5635,5635,7001,5769,5797,5308,5635,6961,5635,5635,7001,5770,6236,5635,5980,6254,5635,5635,5636,5945,5412,5951,5635,5635,6252,5635,5635,5635,6053,5635,6255,6086,6855,6868,5635,6399,5635,6614,5635,5635,6273,5635,5635,5638,5964,6676,5635,5635,5636,6988,6994,5635,5678,5635,6081,5635,5819,5972,5635,5635,5635,6082,6085,5635,6281,5635,5635,5640,6573,6802,5206,6295,5635,5635,7007,7016,7041,5635,7144,6290,6803,5207,5207,6296,5635,5635,5635,6084,6291,5771,6995,5635,5635,7034,5635,5635,7152,5635,5635,7253,5635,5635,6954,5657,5635,7252,6400,5635,6670,5635,6259,6209,5635,5639,6347,5635,5635,5635,6088,6309,6301,6325,6329,5635,6310,6302,6326,6079,5635,6982,5907,5635,6258,6081,6311,6801,6327,5635,5635,7257,6960,6255,6086,6856,6869,5635,5635,5640,7027,6400,5635,6735,7277,6693,5635,6671,5635,5635,5320,6310,6323,6327,6324,6328,5635,5635,5635,6089,5149,5153,6086,6866,6567,5635,5635,7287,6616,5635,6879,7278,5582,5635,6769,6564,5635,7252,6400,5288,6079,6695,6669,5635,5635,6201,5635,6344,5635,5635,5674,5805,6351,6357,5635,5635,5676,5635,6820,7179,6366,6329,5635,5260,5635,5635,5635,6122,6399,5635,5635,6671,5635,6259,6365,7255,5635,6021,5635,5635,5315,5167,5635,5635,5635,6247,6247,6619,5635,5635,5635,6255,6086,5635,6620,5635,5635,5635,6256,5219,5635,5635,6619,5904,5748,6771,6620,6618,5635,7096,6618,6618,6618,6770,5901,5511,6370,5635,5635,7333,5721,5635,7255,7154,5635,5635,7349,5518,7319,6209,6384,5635,6372,5985,6719,6390,6396,6404,6408,6411,6413,6417,6418,6418,6422,6424,6425,6429,6429,6429,6429,6430,6429,5635,5635,5755,5635,5635,5635,5888,5635,6604,7326,5635,5635,5635,6616,5635,6692,5635,5824,6457,6568,5635,6852,5635,6948,5635,6949,6455,5635,5635,5635,6261,6260,5635,6462,6456,5635,5637,5640,6675,7115,5635,6467,5635,5658,6453,5635,6463,5635,5635,5635,6262,7328,5635,5635,5635,6267,5277,6615,5635,5635,5755,5818,5635,6819,5635,5635,6494,6473,5635,6477,5635,5638,6346,5635,5635,7275,5635,5635,7287,5635,5635,5635,6480,5635,6498,6507,6513,6518,6508,6514,5635,5635,6523,5635,5635,5635,6315,5635,6540,5635,5635,5783,5635,5635,6554,5635,5635,5635,6339,5635,6263,6549,6503,5635,6547,5176,6553,5635,5635,5635,6334,5635,6558,7327,5635,5635,5784,5635,6578,5153,5635,5635,5635,6439,6088,6574,6579,5154,5635,5635,6583,5635,5635,5894,5810,5635,5635,5581,5635,5635,5635,5725,6054,5637,5635,5635,5900,5635,5635,5635,5904,5635,6088,6588,5153,5635,5638,6826,7252,6088,5148,5152,5635,5640,7087,6772,6084,6772,6084,5275,5635,6694,5904,6338,5277,6693,5635,5825,5635,6821,6600,5635,5640,7334,5907,5635,5635,6822,6224,5635,5644,5648,6102,5635,6821,6223,5635,5635,5635,6479,6762,5824,5635,5321,5635,5647,7054,7038,5635,7255,5637,5635,5654,5635,5635,5222,7284,5635,5635,5276,5635,5277,6695,6337,6260,5635,5635,5635,5256,6220,5154,5635,5635,5635,6399,5638,6692,5635,5635,5923,6072,5638,7024,6610,5635,5674,6141,5635,5635,6854,5635,5635,6878,5693,5699,7255,6216,6771,5635,5677,5635,5635,5635,5587,5911,6624,5628,6630,6638,6641,6645,6648,6656,6656,6656,6656,6651,6652,6652,6652,6660,6660,6660,6660,6662,6666,5635,5635,5635,6566,6048,5635,5622,5635,5686,5838,5635,5686,6053,5635,5635,5635,5985,5635,5589,6694,5939,6617,5912,6686,5635,5635,5944,5411,6052,6691,5635,5635,6756,6701,5635,5635,5635,6567,6125,6772,5635,5635,5987,5635,5635,6723,6729,7278,6695,6734,5635,5635,5991,5605,6749,5635,5635,5635,6615,5635,5635,5635,5645,5649,5635,6480,6763,6750,5635,6764,5607,5635,5635,5635,5835,5635,6717,5635,5635,6026,6031,5608,5635,6730,6143,6483,6487,6568,5635,5635,6486,5734,5635,5635,6133,6881,5635,5635,6133,7095,5635,5635,5635,6816,6204,6203,5635,5635,6134,6772,5909,5635,5635,5635,6620,5635,5597,6879,6795,5635,5635,5635,6685,6480,6484,6488,5635,5635,6616,6615,5635,5635,6204,6202,5274,6126,5635,5635,6220,6224,7347,6777,5635,5635,6230,5635,5635,6230,6485,5733,5635,5635,6054,5204,5635,7269,6772,5635,5687,5952,5635,5713,5635,5635,5276,6615,5635,6277,5635,5635,6619,6809,5734,5635,5635,6246,6247,6247,6247,6247,5270,5502,7114,5635,7254,5635,5674,5805,5798,6276,5748,5635,5635,6255,6247,6247,6247,5269,5502,5502,5835,6053,5635,5635,6318,6568,5635,7347,7114,5635,5635,6819,5321,5635,6845,5635,5635,5635,6716,5635,6974,5635,5635,6333,5635,6256,5317,6285,5635,5635,6966,5635,5635,6965,5635,5635,6257,5635,6961,6053,5635,5635,6967,5635,6255,5589,6617,5635,5753,5635,5635,5323,5635,6113,5634,5904,5635,6256,6961,6053,6255,6965,6965,6965,5635,6967,6965,5635,6965,5635,6258,6967,6965,7286,6269,5741,5741,5741,6053,6849,5635,5635,5635,6754,5635,7342,6334,5635,5780,6568,5635,5492,6542,6492,5635,5635,5635,6307,6311,6324,6936,6083,6873,5319,6886,6892,6890,6896,6900,6900,6902,6908,6906,6906,6908,6916,6915,6912,6920,6921,6921,6921,6921,6925,6928,5208,5635,5635,6855,6526,6380,5635,5635,6340,5993,6565,5635,5635,6617,5635,5635,5635,6706,5635,6239,5635,5635,6364,7154,5635,6242,5635,5635,5637,5965,5635,6953,5635,5635,6376,5635,5635,6958,5635,5635,6443,5589,7258,5635,5635,5635,6760,5635,6971,5635,6979,6987,6993,6329,5635,5832,6260,6680,6878,5791,6543,5635,5836,5635,5635,6284,5635,5635,6567,5635,6616,5635,5635,6469,6482,6999,5635,5639,5635,5635,5635,6461,5725,5635,5635,5635,6768,7012,7040,5635,5635,6547,6501,7041,5635,5635,5635,6769,5635,7008,7017,7042,5635,5848,5748,6255,5483,5635,5635,6245,6247,5635,7021,5933,6053,5904,6935,6879,5792,5644,5648,7055,7046,5645,7052,7056,7047,5646,7053,7057,7048,5724,5635,5635,5635,6783,6486,5734,5820,5635,5904,6935,6879,5748,6879,5793,5635,6566,5635,5757,5635,5635,5724,5756,5635,5277,5635,5635,5635,7176,7094,7061,7048,5635,5635,6548,6502,5649,6103,7067,7048,5635,7061,6564,5635,5635,6568,5635,5646,5650,7066,7124,5635,7065,7123,5635,5635,6584,5635,5635,6987,7154,5635,5881,5635,5635,6365,5635,6878,5318,6615,5635,5899,5962,5635,5602,5635,5635,5188,5635,7077,5635,5635,5635,6794,5647,7076,7069,5635,5900,6053,5726,5646,7075,7068,5635,5635,6879,5635,5635,5635,6799,6809,5635,7176,7081,5635,5901,7114,6434,5635,5635,7176,7089,5635,5902,5511,6435,5635,5635,5757,5274,5635,6088,7088,5635,5902,5635,5635,5635,6800,5635,6088,7154,5635,5903,5635,5906,6616,6614,5820,5904,6880,5635,5908,5635,5635,5924,7029,6033,5640,7178,5635,5635,6614,5635,5635,6088,7093,5635,5908,6605,7327,7177,7095,5635,5901,5902,5635,5640,6218,5821,6880,5635,5635,6615,6616,5635,5635,6259,5635,5635,6259,5635,5903,5635,5635,5635,5745,5640,7178,6772,5238,5635,7100,6880,5635,5913,6687,5635,6700,5635,5635,6135,5635,5635,6681,5635,5635,6820,7094,5635,5928,5635,5635,5608,6878,5635,7100,6881,5635,7115,5635,5635,7254,7106,5635,5635,5635,6821,6073,6820,7275,5635,5635,5635,6820,6309,6133,7095,6880,5635,5943,5410,5949,5635,5635,5635,7252,5635,5635,7120,5635,5635,7273,7120,6878,5635,5635,6693,5635,5635,5635,7274,5635,5635,6695,5635,5635,5819,5809,5635,7138,5635,6963,5905,6209,5635,6961,5635,5979,6253,5635,5635,7002,6744,5798,5240,5635,6021,5499,7109,5673,5635,7142,5635,6962,6021,6964,6625,6022,7174,7271,7149,7162,7166,7170,7183,7187,7191,7194,7202,7197,7198,7206,7208,7212,7218,7217,7213,7222,7232,7232,7225,7231,7227,7236,7240,5635,5985,5837,5635,5723,5635,5635,6602,6606,7128,7132,5904,5635,5910,5481,7100,7241,5635,5635,6695,5824,6360,5635,5635,5635,6853,6259,6079,5635,6529,7245,7247,7251,5635,5986,5635,5635,5763,6743,5702,5776,5635,7263,5635,5635,6725,5492,7283,7255,5635,5635,6737,5769,7291,5635,7292,5635,5997,6003,6009,6015,5635,7296,7130,5635,5998,6004,6010,5907,5903,5635,5635,6737,6741,5635,6086,5641,5635,5635,5635,7100,5635,5635,6738,6742,6879,5635,7114,5635,7252,5635,5635,6853,6855,5635,6020,5635,5635,5635,7254,5635,6337,5635,5635,6770,5635,6772,5635,6086,6084,5635,5635,6259,5635,7301,6386,5635,5635,5635,6878,5635,5512,7309,6633,5635,6047,5635,5635,5635,7256,7310,6634,5635,5635,5635,6882,5635,7307,7311,6338,6853,5320,5635,5640,7334,5722,5635,5635,6821,6126,5635,5635,6021,6772,7128,7132,5258,5635,5635,5635,6966,5642,5635,5635,7101,5635,6850,5635,6336,5635,6260,5635,6261,7102,5985,6334,5635,5635,5644,7073,7315,7319,6338,5635,6080,5906,5903,7316,6788,5635,5635,6772,5635,6084,7095,5635,5635,5686,5635,7317,6789,5635,5635,6813,5635,7318,6790,6770,6769,5635,5635,6619,5635,6769,6820,5635,5635,6881,7115,5635,6852,6855,5635,5635,5635,6845,5635,6718,6694,5635,5635,5635,6942,6786,6790,5635,5635,5635,6967,5635,5635,6786,6790,6770,6769,7254,5635,7101,5635,7297,7132,5258,7113,5635,5635,6819,5635,5635,5635,5166,6379,5048,5635,5635,6821,6074,6078,5635,5635,5635,5978,7350,5519,7320,5635,6081,5678,6626,7319,5635,5635,5635,7006,7348,5517,6786,6617,5635,6772,6771,5635,6084,6303,6488,5635,7324,5906,5903,5635,6085,5641,5635,6084,6352,5635,5635,5635,6231,5047,5635,5635,5635,7033,5635,7348,7335,5903,5635,6879,5635,6851,5678,5909,6855,6864,5635,7340,5635,5635,6829,5635,6087,5635,6881,5635,6852,6819,6850,5635,5635,6261,7332,7336,5635,5635,5635,7145,5635,6232,5635,5635,6833,5635,5274,5635,5635,5635,7177,0,0,1075838976,2097152,16384,0,0,0,62,64,4194560,4196352,270532608,2097152,2097152,268435456,4194432,541065216,541065216,541065216,541065216,4194304,4194304,4196352,-1606418432,-1606418432,541065216,541065216,4194304,4198144,541065216,541065216,-2143289344,-2143289344,8425488,4194304,4194304,4194304,541065216,37748736,4194304,541065216,4194304,4194304,4194432,37748736,-1606418432,742391808,239075328,775946240,171966464,171966464,171966464,171966464,239075328,171966464,775946240,239075328,239075328,775946240,775946240,775946240,4718592,64,4718592,2097216,4720640,4194400,4194368,-2142763008,541589504,4194368,541589504,541589504,541065280,4194368,4194368,541065312,541065280,-2143289280,4194368,-2143285440,-1605890240,-2142761152,-2109731008,-1606414528,-2143285440,-2143285440,-2143285440,-1605890240,-1606414528,-1606414528,-2143285440,-2143285408,-2143285440,-2143285440,-2142761152,776470528,-1908404416,775946304,775946304,-1908404416,2,4,8,16,512,1024,16777216,33554432,402653184,0,0,0,-1979711488,0,8192,8392704,0,2147483648,16777216,0,0,1536,32768,0,0,128,196608,0,16384,1536,1792,8192,16384,131072,131072,0,0,64,1536,32768,96,96,0,0,2147483648,16,0,0,1536,64,524352,524352,524352,524352,0,524288,64,64,262144,1048576,4194304,16777216,33554432,67108864,134217728,536870912,0,128,128,128,128,2048,1536,1024,0,0,0,15,208,15360,96,96,0,64,64,16392,64,1048576,128,128,0,256,8192,0,8192,0,33554432,0,1024,1024,0,0,2147483648,65536,32,96,96,96,96,64,0,8388608,4096,0,0,8192,2097152,2147483648,96,524352,524352,524352,524288,524288,524288,64,64,64,0,0,0,8,0,0,0,11,64,64,128,2048,0,4096,0,0,131072,128,64,64,64,96,96,96,524352,524352,524288,64,524288,64,64,96,524352,0,0,0,18,33554432,64,96,524352,524288,0,64,0,2097152,0,0,4,16,0,0,16,8388608,0,0,4096,536870912,1073741824,0,4,32,32,4,1073872896,32,40,96,160,1056,262176,1048608,2097184,32,32,32,524320,32,1073872896,40,262176,1120,96,4195360,6291488,2097184,2097184,4194336,4194336,536870944,32,32,40,262176,32,32,40,262184,1120,96,6292512,4195360,56,262184,40,262184,40,0,4,262184,40,40,40,40,4195104,6292512,4196128,32,262184,34,34,40,48,42,32,32,327155712,34,1056,1056,32,96,32,32,41,262184,32,64,512,2048,16384,67108864,42,1056,4194336,32,32,32,32,56,2098208,42,4457568,-326784344,-322851160,-322851160,-322698144,-322698144,-322698144,-322698144,-322695456,-322695456,-322695456,-322695456,-322597152,-320598176,-322597152,-322597144,-321548576,-320598168,-321548568,-322597144,32,0,96,32,42,224,40,262176,42,106,293601323,293601323,293863467,293699627,293617707,293716011,297896507,293964347,293702267,297896507,293702203,293702203,293702203,293702203,293964347,297896507,297896507,-322597144,-322588952,-321548568,-322588952,-37744981,-322597144,-321548568,-37482773,0,131072,1048576,2097152,0,0,-1744830464,0,-1744830464,0,318767104,0,0,0,48,0,1,285212672,0,0,2048,64,64,64,64,32,96,0,32,64,65536,0,0,1,2,12,16,64,128,1024,2048,4096,0,2,65536,262656,5242880,-1842937664,201330721,201330721,-2111369023,-2111369023,-2111369023,-2111369023,-2111369023,-2111369023,-2111360575,-2111369023,-2111369023,-1977151295,-1977151293,-1910042431,-1893265183,-2111368509,-1893265183,-1893265183,-1893265183,-1893265183,-2111368509,-1893265183,-1893265183,-553689472,-553656704,-553689472,-553689472,-553656704,-553656704,-553656704,-553656704,-553656704,-553656704,-553656672,-553656672,-553656672,-553656672,-553656672,-553656670,-553656608,-553656672,-553656664,-553656664,-553656672,-553656670,-553656672,-553656672,-536912159,-553656671,-536879391,-536879391,-536879391,0,0,2048,4194304,0,0,0,262656,0,0,0,536870912,1073741824,458880,2097152,-1845493760,0,0,4096,2097152,0,0,1,4096,201326592,805306368,-1073741824,0,0,0,24576,471424,0,-2113929216,0,0,0,220,-1912602624,18874368,463488,0,0,9216,0,0,16384,8192,8192,32768,2048,2048,2048,2048,0,0,0,0,1,0,0,0,2,0,0,0,3,4,16,224,256,512,32768,0,104e4,15728640,-570425344,0,0,0,254,4194304,16777216,33554432,268435456,536870912,2147483648,0,0,-570425344,32505856,2097152,301989888,0,0,0,512,0,0,0,256,12288,0,167772160,234881024,0,0,16384,32768,50331648,0,128,512,7168,16384,32768,196608,16384,196608,786432,1048576,2097152,4194304,8388608,33554432,2097152,4194304,8388608,503316480,1073741824,2147483648,0,4096,201326592,0,0,0,167772160,234881024,128,1024,4096,8192,0,0,8192,268435456,0,0,4194304,8388608,234881024,268435456,1073741824,2147483648,0,0,1048576,4194304,33554432,268435456,268435456,268435456,268435456,0,128,131072,2097152,0,0,0,520,0,201326592,0,0,0,1073741824,0,0,0,134217728,128,512,3072,16384,32768,3072,16384,131072,524288,1048576,4194304,16777216,33554432,201326592,268435456,1073741824,2147483648,1048576,4194304,268435456,536870912,131072,0,0,131072,0,131072,2097152,0,0,16384,2097152,0,0,2097152,4194304,134217728,2147483648,0,0,0,512,3072,131072,524288,1048576,131072,524288,4194304,2147483648,0,0,0,16384,16384,18432,0,0,0,2048,0,0,4096,1048576,0,0,67108864,1073741824,2147483648,0,0,29696,0,0,32768,50331648,268435456,2147483648,0,0,1,1,18952,1024,0,65,1024,0,4096,32768,0,1024,18952,65,268436480,2101248,524288,1024,19017,-1744550912,8388624,8388624,8388624,-1739308032,-1739308032,-1739308032,-1739308032,-1736162288,-1736162288,-1736162288,-1736162288,-7868466,-7868466,-7868466,-7868466,-7868450,-7868450,-7868450,0,0,0,1610612736,1024,0,2101248,0,0,262144,65536,262144,262144,0,0,2048,131072,524288,585,0,0,0,8192,0,0,0,4096,0,0,0,32,0,0,0,44,64576,0,1024,278528,-1744830464,5521408,-1744830464,0,0,2,12,64,0,1040,8667136,-1744830464,-67108864,0,0,0,9728,0,2014,0,0,0,13312,0,1,4,8,32,64,16384,67108864,134217728,268435456,2147483648,0,0,520,1024,0,0,2,16,0,278528,0,0,2,67108864,16384,0,5242880,2147483648,0,0,327680,0,0,328192,0,0,0,118,577408,22020096,1040,0,0,0,16384,0,67108864,1998,518144,8388608,50331648,201326592,805306368,0,2,204,768,1024,10240,1024,10240,16384,32768,458752,8388608,458752,8388608,50331648,67108864,134217728,805306368,134217728,805306368,1073741824,2147483648,0,220,0,0,0,32768,33554436,2,12,192,768,1024,1024,2048,8192,16384,32768,458752,32768,458752,50331648,67108864,134217728,134217728,805306368,1073741824,0,0,208,0,0,0,34816,67108864,268435456,0,0,0,65536,458752,50331648,67108864,805306368,1073741824,458752,50331648,67108864,536870912,1073741824,0,0,4,8,64,128,512,2048,196608,262144,33554432,536870912,0,0,0,262144,0,0,0,64,0,0,2,4,8,262144,0,1048576,4194304,0,0,4,8,128,512,1024,32768,65536,131072,2048,196608,262144,50331648,536870912,1073741824,1,4,8,512,2048,131072,33554432,536870912,0,0,4,8,512,2048,8192,32768,8388608,0,524288,262144,0,0,4,64,128,8388608,0,512,2048,131072,536870912,0,0,4194304,8192,2097152,268435456,2147483648,16,33554432,-2147418112,537395200,537395200,0,4196352,537427968,4196352,0,537395200,4196352,4196352,276901888,8540160,-1606418432,32768,537395200,4196352,1082130432,51380242,51380242,51380242,22022147,22349827,22349827,22349827,22366219,22349843,22349827,22349827,22366219,22349827,55576594,55576594,55576594,55576594,1062785014,324012114,55576594,55576594,55576594,1062785014,1062785014,1062785014,1062785014,0,0,0,329728,557056,0,0,0,393216,0,0,17825792,33554432,0,0,0,462976,3,22020096,0,0,4,134217728,0,0,8,16,512,402653184,0,0,346112,19,0,0,8,64,0,0,0,82,301989888,0,0,393232,0,0,393240,0,0,524288,524288,524288,524288,0,577408,22020096,1040187392,0,0,0,524288,0,0,0,16,0,0,0,6,16384,32768,268435456,0,268435456,0,1048576,16777216,33554432,0,0,524288,1048576,2097152,0,80,268435456,0,0,524288,536870912,0,112,128,256,3584,16384,32768,134217728,805306368,0,0,0,1007232,256,1536,2048,16384,32768,262144,0,4,16,32,64,128,256,1536,0,16,33554432,0,0,1048576,4194304,2147483648,1536,16384,32768,524288,4194304,33554432,134217728,536870912,0,0,0,32768,0,0,0,1048576,0,0,0,1998,518144,1,0,0,65536,262144,0,0,256,1536,32768,524288,0,0,4194304,134217728,536870912,0,0,1114112,1073741824,16,64,1536,32768,524288,4194304,67174400,33554432,1073741824,0,67174400,0,0,16384,1073741824,0,0,2097152,0,1572864,0,1073741824,16384,0,4194304,0,8,0,131072,0,131072,0,8,131072,131072,134217728,4096,0,8,0,8,131072,4194304,-2146430976,131072,134217736,16908320,547389524,547389524,555909216,555909216,555909216,555909216,564297840,564297844,564297844,564297844,564297844,564297844,564297844,1001055742,1001056254,1001055742,1001055742,1001056254,1001056254,1001056254,1001056254,1001056254,1001055742,1,0,67108864,1073741824,0,84,2129920,8388608,536870912,0,96,2260992,0,0,2097152,4194304,8388608,134217728,268435456,1280,2809856,58720256,939524096,0,0,0,1052672,0,254,1792,2809856,58720256,939524096,0,939524096,0,0,12,16,32768,2097152,8388608,536870912,0,163840,0,0,12,32,64,1024,2048,57344,262144,50331648,268435456,1073741824,2147483648,0,52,0,0,20,64,62,64,128,1280,8192,16384,131072,524288,58720256,24576,163840,524288,2097152,58720256,402653184,58720256,402653184,536870912,0,0,64,128,1792,24576,163840,4,16,8388608,0,0,2113536,0,0,3735552,0,0,8388608,8388608,4096,4096,4096,4096,0,48,25165824,0,0,0,1572864,0,6,56,128,1792,8192,524288,58720256,402653184,0,0,32,128,256,262144,262144,1048576,1073741824,0,0,0,2147483648,0,0,0,-2147483646,4,24,32,128,1792,1280,8192,524288,16777216,33554432,0,262144,33554432,134217728,0,8,16,1024,16777216,4194432,3145728,541065216,-2143289344,4194304,4194304,4194304,4194304,16,402653184,0,0,32,128,256,2048,262144,524288,4,16384,65536,67108864,0,0,0,131072,0,0,0,1024,0,0,32768,8192,0,2048,0,32,8192,3670016,2048,8192,196608,1048576,0,0,34816,9216,4096,4096,29696,29712,29712,29840,29712,29712,29840,536900624,4224144,144384,-754647956,-754647956,-754647956,-754647956,144384,144384,144384,144384,-754647940,-754647940,-754647940,-754647940,-754516884,-754647956,-754516884,-754516884,-754516884,0,0,8388608,1073741824,0,0,67108864,12,16384,0,65536,29824,0,0,0,3670016,44,64576,319029248,-1073741824,0,0,60,0,0,0,4194304,0,0,0,2014,0,319160320,0,0,0,5242880,0,4,8,256,512,2048,8192,16384,458752,50331648,0,524288,3145728,0,0,16384,8,0,28672,0,0,32,524288,0,16,0,128,0,12288,131072,0,0,128,512,3072,4096,16384,32768,131072,524288,1048576,2097152,4194304,262144,318767104,-1073741824,0,0,0,28,0,0,60,64576,28,32,64,1024,2048,61440,262144,318767104,24576,0,0,0,8388608,0,0,0,104e4,67108864,16384,0,65536,262144,1048576,0,8,64,2048,4096,8192,65536,131072,1048576,0,0,128,536870912,4194304,131072,0,0,64,2048,16384,32768,524288,1048576,4194304,134217728,2147483648,32768,262144,50331648,268435456,0,32768,8388608,0,0,16777216,16777216,0,0,0,4,8,16,2,67108864,0,65536,201326592,2147483648,0,0,1998,59238400,-67108864,0,524288,1048576,0,0,64,256,32768,50331648,268435456,0,0,1,256,0,0,0,16777216,0,0,256,0,8192,0,256,262144,2113536,2097152,135790592,0,256,8192,2097152,0,2147483648,0,32768,2097152,0,2147483648,5242880,0,0,0,128,0,0,0,208,131073,0,0,131073,0,135790592,131073,4,0,131073,393233,1610612736,1610612736,1610612736,393241,393241,393241,393241,805707793,805707793,1879449617,805708049,1879449617,1879449617,1879449617,1879449617,-483948553,-475559945,-475559945,-483948553,-483948553,-475559945,-483948553,-475559945,-483948553,-475559945,-475559945,-475559945,-475559945,-475559945,-215504905,-475559945,-207116297,-207116297,0,0,72,0,4096,4194304,32768,0,0,256,401424,805306368,0,0,112,25165824,0,1879048192,0,0,116,0,0,401680,0,0,0,32505856,7,19367920,-503316480,0,0,0,33554432,0,0,33554432,268435456,0,0,0,19376112,-234881024,0,0,50331648,268435456,0,27764720,-234881024,0,0,512,2048,0,0,1,2,4,32,524288,1048576,524288,1048576,33554432,67108864,134217728,805306368,0,24,0,0,512,3072,16384,0,7,16,480,1536,32768,1536,32768,65536,2490368,32768,65536,10878976,16777216,33554432,0,9728,268435456,0,0,67108866,12,64,128,512,1024,2048,0,16,393216,0,0,393216,2097152,16777216,33554432,536870912,-1073741824,0,0,10485760,16777216,33554432,1073741824,2147483648,0,16,224,256,1536,32768,65536,393216,10485760,16777216,131072,262144,2097152,16777216,32768,131072,262144,2097152,8388608,16777216,0,0,4,16,224,512,32768,131072,2097152,16777216,192,32768,0,0,512,4096,4,16,192,32768,8388608,0,16,64,128,8388608,0,0,1024,0,4,0,0,0,3145728,0,4,128,0,0,268435456,2,0,0,65536,0,0,0,65,0,64,128,8388608,16777216,1073741824,0,0,512,2048,32768,262144,524288,8388608,0,0,512,131072,524288,8388608,33554432,2147483648,33554432,33554432,0,2,4,112,128,-2113929216,100663296,100663296,2,4,524288,134217728,0,0,8,512,2048,196608,33554436,0,0,33554436,4224,4224,0,65536,100663296,4224,65536,65536,262144,33554432,0,2,4,16,64,128,256,0,4224,65536,16777216,262400,65536,4224,-1072627712,805306384,-1342177264,-1342177264,-1070006272,-1069989376,-1069989376,-1069989376,-258932720,-258932720,-258932720,-258932720,-1069989360,-1065795072,-1061600768,-1069989376,-225378288,-258932720,-258932720,-258932720,-225378288,1260767,1260767,34815199,1260767,1260767,1260767,1260767,34815199,1260767,34815199,34815199,34815199,1260767,1260767,169032927,1242774751,-1978450721,169032927,-1978450721,-1978450721,-1978450721,169032927,169032927,169032927,169032927,-225231649,-1173144353,-225231649,-225231649,-91013921,0,0,0,67108864,0,3751936,0,0,528,7946240,12140544,0,0,0,134217728,0,0,0,7,27756528,-503316480,0,0,9502720,1610612736,0,0,486539264,0,0,2048,32768,0,0,64,128,0,0,536870912,0,0,208,15360,1245184,0,0,0,268435456,0,0,0,15,9633792,0,0,0,32,512,2048,262144,0,3670016,0,0,1040,1040,1,2,12,80,128,7168,8192,196608,16,64,128,3072,4096,8192,65536,131072,0,0,32,262144,524288,33554432,134217728,0,0,0,2,8,64,128,1024,4096,0,0,262144,0,4096,4194304,1,1,1,0,0,2,8,16,64],r.TOKEN=[\"(0)\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSection\",\"Wildcard\",\"EQName\",\"URILiteral\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"StringLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"PITarget\",\"NCName\",\"QName\",\"S\",\"S\",\"CharRef\",\"CommentContents\",\"EOF\",\"'!'\",\"'!='\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$'\",\"'$$'\",\"'%'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"')'\",\"'*'\",\"'*'\",\"'+'\",\"','\",\"'-'\",\"'-->'\",\"'.'\",\"'..'\",\"'/'\",\"'//'\",\"'/>'\",\"':'\",\"':)'\",\"'::'\",\"':='\",\"';'\",\"'<'\",\"'<!--'\",\"'</'\",\"'<<'\",\"'<='\",\"'<?'\",\"'='\",\"'>'\",\"'>='\",\"'>>'\",\"'?'\",\"'?>'\",\"'@'\",\"'NaN'\",\"'['\",\"']'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'false'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'jsoniq'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'null'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'select'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'true'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'{|'\",\"'|'\",\"'||'\",\"'|}'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/parsers/XQueryParser.js\":[function(e,t,n){var r=n.XQueryParser=function i(e,t){function r(e,t){Vl=t,Ql=e,Gl=e.length,s(0,0,0)}function s(e,t,n){Dl=t,Pl=t,Hl=e,Bl=t,jl=n,Fl=0,Zl=n,Ul=-1,$l={},Vl.reset(Ql)}function o(){Vl.startNonterminal(\"Module\",Pl);switch(Hl){case 274:Ll(198);break;default:_l=Hl}(_l==64274||_l==134930)&&u(),kl(274);switch(Hl){case 182:Ll(193);break;default:_l=Hl}switch(_l){case 94390:Nl(),a();break;default:Nl(),Ra()}Vl.endNonterminal(\"Module\",Pl)}function u(){Vl.startNonterminal(\"VersionDecl\",Pl),Sl(274),kl(116);switch(Hl){case 125:Sl(125),kl(17),Sl(11);break;default:Sl(263),kl(17),Sl(11),kl(109),Hl==125&&(Sl(125),kl(17),Sl(11))}kl(28),Nl(),c(),Vl.endNonterminal(\"VersionDecl\",Pl)}function a(){Vl.startNonterminal(\"LibraryModule\",Pl),f(),kl(138),Nl(),l(),Vl.endNonterminal(\"LibraryModule\",Pl)}function f(){Vl.startNonterminal(\"ModuleDecl\",Pl),Sl(182),kl(61),Sl(184),kl(248),Nl(),Ia(),kl(29),Sl(60),kl(15),Sl(7),kl(28),Nl(),c(),Vl.endNonterminal(\"ModuleDecl\",Pl)}function l(){Vl.startNonterminal(\"Prolog\",Pl);for(;;){kl(274);switch(Hl){case 108:Ll(213);break;case 153:Ll(201);break;default:_l=Hl}if(_l!=42604&&_l!=43628&&_l!=50284&&_l!=53356&&_l!=54380&&_l!=55916&&_l!=72300&&_l!=93337&&_l!=94316&&_l!=104044&&_l!=113772&&_l!=115353)break;switch(Hl){case 108:Ll(178);break;default:_l=Hl}if(_l==55916){_l=Kl(0,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{_(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(0,Pl,_l)}}switch(_l){case-1:Nl(),M();break;case 94316:Nl(),O();break;case 153:Nl(),C();break;case 72300:Nl(),D();break;default:Nl(),h()}kl(28),Nl(),c()}for(;;){kl(274);switch(Hl){case 108:Ll(210);break;default:_l=Hl}if(_l!=16492&&_l!=48748&&_l!=51820&&_l!=74348&&_l!=79468&&_l!=82540&&_l!=101996&&_l!=131692&&_l!=134252)break;switch(Hl){case 108:Ll(175);break;default:_l=Hl}switch(_l){case 51820:Nl(),R();break;case 101996:Nl(),Q();break;default:Nl(),P()}kl(28),Nl(),c()}Vl.endNonterminal(\"Prolog\",Pl)}function c(){Vl.startNonterminal(\"Separator\",Pl),Sl(53),Vl.endNonterminal(\"Separator\",Pl)}function h(){Vl.startNonterminal(\"Setter\",Pl);switch(Hl){case 108:Ll(172);break;default:_l=Hl}if(_l==55916){_l=Kl(1,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{v(),_l=-2}catch(a){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),w(),_l=-6}catch(f){_l=-9}}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(1,Pl,_l)}}switch(_l){case 43628:p();break;case-2:d();break;case 42604:m();break;case 50284:g();break;case 104044:y();break;case-6:b();break;case 113772:ko();break;case 53356:E();break;default:T()}Vl.endNonterminal(\"Setter\",Pl)}function p(){Vl.startNonterminal(\"BoundarySpaceDecl\",Pl),Sl(108),kl(33),Sl(85),kl(133);switch(Hl){case 214:Sl(214);break;default:Sl(241)}Vl.endNonterminal(\"BoundarySpaceDecl\",Pl)}function d(){Vl.startNonterminal(\"DefaultCollationDecl\",Pl),Sl(108),kl(46),Sl(109),kl(38),Sl(94),kl(15),Sl(7),Vl.endNonterminal(\"DefaultCollationDecl\",Pl)}function v(){xl(108),kl(46),xl(109),kl(38),xl(94),kl(15),xl(7)}function m(){Vl.startNonterminal(\"BaseURIDecl\",Pl),Sl(108),kl(32),Sl(83),kl(15),Sl(7),Vl.endNonterminal(\"BaseURIDecl\",Pl)}function g(){Vl.startNonterminal(\"ConstructionDecl\",Pl),Sl(108),kl(41),Sl(98),kl(133);switch(Hl){case 241:Sl(241);break;default:Sl(214)}Vl.endNonterminal(\"ConstructionDecl\",Pl)}function y(){Vl.startNonterminal(\"OrderingModeDecl\",Pl),Sl(108),kl(68),Sl(203),kl(131);switch(Hl){case 202:Sl(202);break;default:Sl(256)}Vl.endNonterminal(\"OrderingModeDecl\",Pl)}function b(){Vl.startNonterminal(\"EmptyOrderDecl\",Pl),Sl(108),kl(46),Sl(109),kl(67),Sl(201),kl(49),Sl(123),kl(121);switch(Hl){case 147:Sl(147);break;default:Sl(173)}Vl.endNonterminal(\"EmptyOrderDecl\",Pl)}function w(){xl(108),kl(46),xl(109),kl(67),xl(201),kl(49),xl(123),kl(121);switch(Hl){case 147:xl(147);break;default:xl(173)}}function E(){Vl.startNonterminal(\"CopyNamespacesDecl\",Pl),Sl(108),kl(44),Sl(104),kl(128),Nl(),S(),kl(25),Sl(41),kl(123),Nl(),x(),Vl.endNonterminal(\"CopyNamespacesDecl\",Pl)}function S(){Vl.startNonterminal(\"PreserveMode\",Pl);switch(Hl){case 214:Sl(214);break;default:Sl(190)}Vl.endNonterminal(\"PreserveMode\",Pl)}function x(){Vl.startNonterminal(\"InheritMode\",Pl);switch(Hl){case 157:Sl(157);break;default:Sl(189)}Vl.endNonterminal(\"InheritMode\",Pl)}function T(){Vl.startNonterminal(\"DecimalFormatDecl\",Pl),Sl(108),kl(114);switch(Hl){case 106:Sl(106),kl(254),Nl(),Ha();break;default:Sl(109),kl(45),Sl(106)}for(;;){kl(180);if(Hl==53)break;Nl(),N(),kl(29),Sl(60),kl(17),Sl(11)}Vl.endNonterminal(\"DecimalFormatDecl\",Pl)}function N(){Vl.startNonterminal(\"DFPropertyName\",Pl);switch(Hl){case 107:Sl(107);break;case 149:Sl(149);break;case 156:Sl(156);break;case 179:Sl(179);break;case 67:Sl(67);break;case 209:Sl(209);break;case 208:Sl(208);break;case 275:Sl(275);break;case 116:Sl(116);break;default:Sl(207)}Vl.endNonterminal(\"DFPropertyName\",Pl)}function C(){Vl.startNonterminal(\"Import\",Pl);switch(Hl){case 153:Ll(126);break;default:_l=Hl}switch(_l){case 115353:k();break;default:A()}Vl.endNonterminal(\"Import\",Pl)}function k(){Vl.startNonterminal(\"SchemaImport\",Pl),Sl(153),kl(73),Sl(225),kl(137),Hl!=7&&(Nl(),L()),kl(15),Sl(7),kl(108);if(Hl==81){Sl(81),kl(15),Sl(7);for(;;){kl(103);if(Hl!=41)break;Sl(41),kl(15),Sl(7)}}Vl.endNonterminal(\"SchemaImport\",Pl)}function L(){Vl.startNonterminal(\"SchemaPrefix\",Pl);switch(Hl){case 184:Sl(184),kl(248),Nl(),Ia(),kl(29),Sl(60);break;default:Sl(109),kl(47),Sl(121),kl(61),Sl(184)}Vl.endNonterminal(\"SchemaPrefix\",Pl)}function A(){Vl.startNonterminal(\"ModuleImport\",Pl),Sl(153),kl(60),Sl(182),kl(90),Hl==184&&(Sl(184),kl(248),Nl(),Ia(),kl(29),Sl(60)),kl(15),Sl(7),kl(108);if(Hl==81){Sl(81),kl(15),Sl(7);for(;;){kl(103);if(Hl!=41)break;Sl(41),kl(15),Sl(7)}}Vl.endNonterminal(\"ModuleImport\",Pl)}function O(){Vl.startNonterminal(\"NamespaceDecl\",Pl),Sl(108),kl(61),Sl(184),kl(248),Nl(),Ia(),kl(29),Sl(60),kl(15),Sl(7),Vl.endNonterminal(\"NamespaceDecl\",Pl)}function M(){Vl.startNonterminal(\"DefaultNamespaceDecl\",Pl),Sl(108),kl(46),Sl(109),kl(115);switch(Hl){case 121:Sl(121);break;default:Sl(145)}kl(61),Sl(184),kl(15),Sl(7),Vl.endNonterminal(\"DefaultNamespaceDecl\",Pl)}function _(){xl(108),kl(46),xl(109),kl(115);switch(Hl){case 121:xl(121);break;default:xl(145)}kl(61),xl(184),kl(15),xl(7)}function D(){Vl.startNonterminal(\"FTOptionDecl\",Pl),Sl(108),kl(52),Sl(141),kl(81),Nl(),Fu(),Vl.endNonterminal(\"FTOptionDecl\",Pl)}function P(){Vl.startNonterminal(\"AnnotatedDecl\",Pl),Sl(108);for(;;){kl(170);if(Hl!=32&&Hl!=257)break;switch(Hl){case 257:Nl(),H();break;default:Nl(),B()}}switch(Hl){case 262:Nl(),F();break;case 145:Nl(),wl();break;case 95:Nl(),da();break;case 155:Nl(),xa();break;default:Nl(),Ta()}Vl.endNonterminal(\"AnnotatedDecl\",Pl)}function H(){Vl.startNonterminal(\"CompatibilityAnnotation\",Pl),Sl(257),Vl.endNonterminal(\"CompatibilityAnnotation\",Pl)}function B(){Vl.startNonterminal(\"Annotation\",Pl),Sl(32),kl(254),Nl(),Ha(),kl(171);if(Hl==34){Sl(34),kl(154),Nl(),oi();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(154),Nl(),oi()}Sl(37)}Vl.endNonterminal(\"Annotation\",Pl)}function j(){xl(32),kl(254),Ba(),kl(171);if(Hl==34){xl(34),kl(154),ui();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(154),ui()}xl(37)}}function F(){Vl.startNonterminal(\"VarDecl\",Pl),Sl(262),kl(21),Sl(31),kl(254),Nl(),hi(),kl(147),Hl==79&&(Nl(),ds()),kl(106);switch(Hl){case 52:Sl(52),kl(266),Nl(),I();break;default:Sl(133),kl(104),Hl==52&&(Sl(52),kl(266),Nl(),q())}Vl.endNonterminal(\"VarDecl\",Pl)}function I(){Vl.startNonterminal(\"VarValue\",Pl),_f(),Vl.endNonterminal(\"VarValue\",Pl)}function q(){Vl.startNonterminal(\"VarDefaultValue\",Pl),_f(),Vl.endNonterminal(\"VarDefaultValue\",Pl)}function R(){Vl.startNonterminal(\"ContextItemDecl\",Pl),Sl(108),kl(43),Sl(101),kl(55),Sl(165),kl(147),Hl==79&&(Sl(79),kl(259),Nl(),ws()),kl(106);switch(Hl){case 52:Sl(52),kl(266),Nl(),I();break;default:Sl(133),kl(104),Hl==52&&(Sl(52),kl(266),Nl(),q())}Vl.endNonterminal(\"ContextItemDecl\",Pl)}function U(){Vl.startNonterminal(\"ParamList\",Pl),W();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(21),Nl(),W()}Vl.endNonterminal(\"ParamList\",Pl)}function z(){X();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(21),X()}}function W(){Vl.startNonterminal(\"Param\",Pl),Sl(31),kl(254),Nl(),Ha(),kl(143),Hl==79&&(Nl(),ds()),Vl.endNonterminal(\"Param\",Pl)}function X(){xl(31),kl(254),Ba(),kl(143),Hl==79&&vs()}function V(){Vl.startNonterminal(\"FunctionBody\",Pl),J(),Vl.endNonterminal(\"FunctionBody\",Pl)}function $(){K()}function J(){Vl.startNonterminal(\"EnclosedExpr\",Pl),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"EnclosedExpr\",Pl)}function K(){xl(276),kl(266),Y(),xl(282)}function Q(){Vl.startNonterminal(\"OptionDecl\",Pl),Sl(108),kl(66),Sl(199),kl(254),Nl(),Ha(),kl(17),Sl(11),Vl.endNonterminal(\"OptionDecl\",Pl)}function G(){Vl.startNonterminal(\"Expr\",Pl),_f();for(;;){if(Hl!=41)break;Sl(41),kl(266),Nl(),_f()}Vl.endNonterminal(\"Expr\",Pl)}function Y(){Df();for(;;){if(Hl!=41)break;xl(41),kl(266),Df()}}function Z(){Vl.startNonterminal(\"FLWORExpr\",Pl),tt();for(;;){kl(173);if(Hl==220)break;Nl(),rt()}Nl(),rn(),Vl.endNonterminal(\"FLWORExpr\",Pl)}function et(){nt();for(;;){kl(173);if(Hl==220)break;it()}sn()}function tt(){Vl.startNonterminal(\"InitialClause\",Pl);switch(Hl){case 137:Ll(141);break;default:_l=Hl}switch(_l){case 16009:st();break;case 174:vt();break;default:bt()}Vl.endNonterminal(\"InitialClause\",Pl)}function nt(){switch(Hl){case 137:Ll(141);break;default:_l=Hl}switch(_l){case 16009:ot();break;case 174:mt();break;default:wt()}}function rt(){Vl.startNonterminal(\"IntermediateClause\",Pl);switch(Hl){case 137:case 174:tt();break;case 266:It();break;case 148:Rt();break;case 105:jt();break;default:Kt()}Vl.endNonterminal(\"IntermediateClause\",Pl)}function it(){switch(Hl){case 137:case 174:nt();break;case 266:qt();break;case 148:Ut();break;case 105:Ft();break;default:Qt()}}function st(){Vl.startNonterminal(\"ForClause\",Pl),Sl(137),kl(21),Nl(),ut();for(;;){if(Hl!=41)break;Sl(41),kl(21),Nl(),ut()}Vl.endNonterminal(\"ForClause\",Pl)}function ot(){xl(137),kl(21),at();for(;;){if(Hl!=41)break;xl(41),kl(21),at()}}function ut(){Vl.startNonterminal(\"ForBinding\",Pl),Sl(31),kl(254),Nl(),hi(),kl(164),Hl==79&&(Nl(),ds()),kl(158),Hl==72&&(Nl(),ft()),kl(150),Hl==81&&(Nl(),ct()),kl(122),Hl==228&&(Nl(),pt()),kl(53),Sl(154),kl(266),Nl(),_f(),Vl.endNonterminal(\"ForBinding\",Pl)}function at(){xl(31),kl(254),pi(),kl(164),Hl==79&&vs(),kl(158),Hl==72&&lt(),kl(150),Hl==81&&ht(),kl(122),Hl==228&&dt(),kl(53),xl(154),kl(266),Df()}function ft(){Vl.startNonterminal(\"AllowingEmpty\",Pl),Sl(72),kl(49),Sl(123),Vl.endNonterminal(\"AllowingEmpty\",Pl)}function lt(){xl(72),kl(49),xl(123)}function ct(){Vl.startNonterminal(\"PositionalVar\",Pl),Sl(81),kl(21),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"PositionalVar\",Pl)}function ht(){xl(81),kl(21),xl(31),kl(254),pi()}function pt(){Vl.startNonterminal(\"FTScoreVar\",Pl),Sl(228),kl(21),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"FTScoreVar\",Pl)}function dt(){xl(228),kl(21),xl(31),kl(254),pi()}function vt(){Vl.startNonterminal(\"LetClause\",Pl),Sl(174),kl(96),Nl(),gt();for(;;){if(Hl!=41)break;Sl(41),kl(96),Nl(),gt()}Vl.endNonterminal(\"LetClause\",Pl)}function mt(){xl(174),kl(96),yt();for(;;){if(Hl!=41)break;xl(41),kl(96),yt()}}function gt(){Vl.startNonterminal(\"LetBinding\",Pl);switch(Hl){case 31:Sl(31),kl(254),Nl(),hi(),kl(105),Hl==79&&(Nl(),ds());break;default:pt()}kl(27),Sl(52),kl(266),Nl(),_f(),Vl.endNonterminal(\"LetBinding\",Pl)}function yt(){switch(Hl){case 31:xl(31),kl(254),pi(),kl(105),Hl==79&&vs();break;default:dt()}kl(27),xl(52),kl(266),Df()}function bt(){Vl.startNonterminal(\"WindowClause\",Pl),Sl(137),kl(135);switch(Hl){case 251:Nl(),Et();break;default:Nl(),xt()}Vl.endNonterminal(\"WindowClause\",Pl)}function wt(){xl(137),kl(135);switch(Hl){case 251:St();break;default:Tt()}}function Et(){Vl.startNonterminal(\"TumblingWindowClause\",Pl),Sl(251),kl(85),Sl(269),kl(21),Sl(31),kl(254),Nl(),hi(),kl(110),Hl==79&&(Nl(),ds()),kl(53),Sl(154),kl(266),Nl(),_f(),Nl(),Nt();if(Hl==126||Hl==198)Nl(),kt();Vl.endNonterminal(\"TumblingWindowClause\",Pl)}function St(){xl(251),kl(85),xl(269),kl(21),xl(31),kl(254),pi(),kl(110),Hl==79&&vs(),kl(53),xl(154),kl(266),Df(),Ct(),(Hl==126||Hl==198)&&Lt()}function xt(){Vl.startNonterminal(\"SlidingWindowClause\",Pl),Sl(234),kl(85),Sl(269),kl(21),Sl(31),kl(254),Nl(),hi(),kl(110),Hl==79&&(Nl(),ds()),kl(53),Sl(154),kl(266),Nl(),_f(),Nl(),Nt(),Nl(),kt(),Vl.endNonterminal(\"SlidingWindowClause\",Pl)}function Tt(){xl(234),kl(85),xl(269),kl(21),xl(31),kl(254),pi(),kl(110),Hl==79&&vs(),kl(53),xl(154),kl(266),Df(),Ct(),Lt()}function Nt(){Vl.startNonterminal(\"WindowStartCondition\",Pl),Sl(237),kl(163),Nl(),At(),kl(83),Sl(265),kl(266),Nl(),_f(),Vl.endNonterminal(\"WindowStartCondition\",Pl)}function Ct(){xl(237),kl(163),Ot(),kl(83),xl(265),kl(266),Df()}function kt(){Vl.startNonterminal(\"WindowEndCondition\",Pl),Hl==198&&Sl(198),kl(50),Sl(126),kl(163),Nl(),At(),kl(83),Sl(265),kl(266),Nl(),_f(),Vl.endNonterminal(\"WindowEndCondition\",Pl)}function Lt(){Hl==198&&xl(198),kl(50),xl(126),kl(163),Ot(),kl(83),xl(265),kl(266),Df()}function At(){Vl.startNonterminal(\"WindowVars\",Pl),Hl==31&&(Sl(31),kl(254),Nl(),Mt()),kl(159),Hl==81&&(Nl(),ct()),kl(153),Hl==215&&(Sl(215),kl(21),Sl(31),kl(254),Nl(),Dt()),kl(127),Hl==187&&(Sl(187),kl(21),Sl(31),kl(254),Nl(),Ht()),Vl.endNonterminal(\"WindowVars\",Pl)}function Ot(){Hl==31&&(xl(31),kl(254),_t()),kl(159),Hl==81&&ht(),kl(153),Hl==215&&(xl(215),kl(21),xl(31),kl(254),Pt()),kl(127),Hl==187&&(xl(187),kl(21),xl(31),kl(254),Bt())}function Mt(){Vl.startNonterminal(\"CurrentItem\",Pl),Ha(),Vl.endNonterminal(\"CurrentItem\",Pl)}function _t(){Ba()}function Dt(){Vl.startNonterminal(\"PreviousItem\",Pl),Ha(),Vl.endNonterminal(\"PreviousItem\",Pl)}function Pt(){Ba()}function Ht(){Vl.startNonterminal(\"NextItem\",Pl),Ha(),Vl.endNonterminal(\"NextItem\",Pl)}function Bt(){Ba()}function jt(){Vl.startNonterminal(\"CountClause\",Pl),Sl(105),kl(21),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"CountClause\",Pl)}function Ft(){xl(105),kl(21),xl(31),kl(254),pi()}function It(){Vl.startNonterminal(\"WhereClause\",Pl),Sl(266),kl(266),Nl(),_f(),Vl.endNonterminal(\"WhereClause\",Pl)}function qt(){xl(266),kl(266),Df()}function Rt(){Vl.startNonterminal(\"GroupByClause\",Pl),Sl(148),kl(34),Sl(87),kl(266),Nl(),zt(),Vl.endNonterminal(\"GroupByClause\",Pl)}function Ut(){xl(148),kl(34),xl(87),kl(266),Wt()}function zt(){Vl.startNonterminal(\"GroupingSpecList\",Pl),Xt();for(;;){kl(176);if(Hl!=41)break;Sl(41),kl(266),Nl(),Xt()}Vl.endNonterminal(\"GroupingSpecList\",Pl)}function Wt(){Vt();for(;;){kl(176);if(Hl!=41)break;xl(41),kl(266),Vt()}}function Xt(){Vl.startNonterminal(\"GroupingSpec\",Pl);switch(Hl){case 31:Ll(254);break;default:_l=Hl}if(_l==3103||_l==35871||_l==36895||_l==37407||_l==37919||_l==38431||_l==39455||_l==39967||_l==40479||_l==40991||_l==41503||_l==42015||_l==42527||_l==43039||_l==43551||_l==44063||_l==45087||_l==45599||_l==46111||_l==46623||_l==47647||_l==48159||_l==49183||_l==49695||_l==50207||_l==51743||_l==52255||_l==52767||_l==53279||_l==53791||_l==54303||_l==55327||_l==55839||_l==56351||_l==56863||_l==57375||_l==57887||_l==60447||_l==60959||_l==61471||_l==61983||_l==62495||_l==63007||_l==63519||_l==64031||_l==64543||_l==65567||_l==66079||_l==67103||_l==67615||_l==68127||_l==68639||_l==69151||_l==69663||_l==70175||_l==72223||_l==74271||_l==74783||_l==75807||_l==76831||_l==77343||_l==77855||_l==78367||_l==78879||_l==79391||_l==81439||_l==81951||_l==82463||_l==82975||_l==83487||_l==83999||_l==84511||_l==85023||_l==85535||_l==87071||_l==87583||_l==88095||_l==89119||_l==90143||_l==91167||_l==92191||_l==92703||_l==93215||_l==94239||_l==94751||_l==95263||_l==97823||_l==98335||_l==99359||_l==101407||_l==101919||_l==102431||_l==102943||_l==103455||_l==103967||_l==105503||_l==108575||_l==109087||_l==110623||_l==111647||_l==112159||_l==112671||_l==113183||_l==113695||_l==114719||_l==115231||_l==115743||_l==116255||_l==116767||_l==117279||_l==119839||_l==120351||_l==120863||_l==121375||_l==122911||_l==123935||_l==124447||_l==124959||_l==127007||_l==127519||_l==128031||_l==128543||_l==129055||_l==129567||_l==130079||_l==131103||_l==131615||_l==133151||_l==133663||_l==134175||_l==134687||_l==136223||_l==136735||_l==138271||_l==140319){_l=Kl(2,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Jt(),kl(182);if(Hl==52||Hl==79)Hl==79&&vs(),kl(27),xl(52),kl(266),Df();Hl==94&&(xl(94),kl(15),xl(7)),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(2,Pl,_l)}}switch(_l){case-1:$t(),kl(182);if(Hl==52||Hl==79)Hl==79&&(Nl(),ds()),kl(27),Sl(52),kl(266),Nl(),_f();Hl==94&&(Sl(94),kl(15),Sl(7));break;default:_f()}Vl.endNonterminal(\"GroupingSpec\",Pl)}function Vt(){switch(Hl){case 31:Ll(254);break;default:_l=Hl}if(_l==3103||_l==35871||_l==36895||_l==37407||_l==37919||_l==38431||_l==39455||_l==39967||_l==40479||_l==40991||_l==41503||_l==42015||_l==42527||_l==43039||_l==43551||_l==44063||_l==45087||_l==45599||_l==46111||_l==46623||_l==47647||_l==48159||_l==49183||_l==49695||_l==50207||_l==51743||_l==52255||_l==52767||_l==53279||_l==53791||_l==54303||_l==55327||_l==55839||_l==56351||_l==56863||_l==57375||_l==57887||_l==60447||_l==60959||_l==61471||_l==61983||_l==62495||_l==63007||_l==63519||_l==64031||_l==64543||_l==65567||_l==66079||_l==67103||_l==67615||_l==68127||_l==68639||_l==69151||_l==69663||_l==70175||_l==72223||_l==74271||_l==74783||_l==75807||_l==76831||_l==77343||_l==77855||_l==78367||_l==78879||_l==79391||_l==81439||_l==81951||_l==82463||_l==82975||_l==83487||_l==83999||_l==84511||_l==85023||_l==85535||_l==87071||_l==87583||_l==88095||_l==89119||_l==90143||_l==91167||_l==92191||_l==92703||_l==93215||_l==94239||_l==94751||_l==95263||_l==97823||_l==98335||_l==99359||_l==101407||_l==101919||_l==102431||_l==102943||_l==103455||_l==103967||_l==105503||_l==108575||_l==109087||_l==110623||_l==111647||_l==112159||_l==112671||_l==113183||_l==113695||_l==114719||_l==115231||_l==115743||_l==116255||_l==116767||_l==117279||_l==119839||_l==120351||_l==120863||_l==121375||_l==122911||_l==123935||_l==124447||_l==124959||_l==127007||_l==127519||_l==128031||_l==128543||_l==129055||_l==129567||_l==130079||_l==131103||_l==131615||_l==133151||_l==133663||_l==134175||_l==134687||_l==136223||_l==136735||_l==138271||_l==140319){_l=Kl(2,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Jt(),kl(182);if(Hl==52||Hl==79)Hl==79&&vs(),kl(27),xl(52),kl(266),Df();Hl==94&&(xl(94),kl(15),xl(7)),Jl(2,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(2,t,-2)}}}switch(_l){case-1:Jt(),kl(182);if(Hl==52||Hl==79)Hl==79&&vs(),kl(27),xl(52),kl(266),Df();Hl==94&&(xl(94),kl(15),xl(7));break;case-3:break;default:Df()}}function $t(){Vl.startNonterminal(\"GroupingVariable\",Pl),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"GroupingVariable\",Pl)}function Jt(){xl(31),kl(254),pi()}function Kt(){Vl.startNonterminal(\"OrderByClause\",Pl);switch(Hl){case 201:Sl(201),kl(34),Sl(87);break;default:Sl(236),kl(67),Sl(201),kl(34),Sl(87)}kl(266),Nl(),Gt(),Vl.endNonterminal(\"OrderByClause\",Pl)}function Qt(){switch(Hl){case 201:xl(201),kl(34),xl(87);break;default:xl(236),kl(67),xl(201),kl(34),xl(87)}kl(266),Yt()}function Gt(){Vl.startNonterminal(\"OrderSpecList\",Pl),Zt();for(;;){kl(176);if(Hl!=41)break;Sl(41),kl(266),Nl(),Zt()}Vl.endNonterminal(\"OrderSpecList\",Pl)}function Yt(){en();for(;;){kl(176);if(Hl!=41)break;xl(41),kl(266),en()}}function Zt(){Vl.startNonterminal(\"OrderSpec\",Pl),_f(),Nl(),tn(),Vl.endNonterminal(\"OrderSpec\",Pl)}function en(){Df(),nn()}function tn(){Vl.startNonterminal(\"OrderModifier\",Pl);if(Hl==80||Hl==113)switch(Hl){case 80:Sl(80);break;default:Sl(113)}kl(179);if(Hl==123){Sl(123),kl(121);switch(Hl){case 147:Sl(147);break;default:Sl(173)}}kl(177),Hl==94&&(Sl(94),kl(15),Sl(7)),Vl.endNonterminal(\"OrderModifier\",Pl)}function nn(){if(Hl==80||Hl==113)switch(Hl){case 80:xl(80);break;default:xl(113)}kl(179);if(Hl==123){xl(123),kl(121);switch(Hl){case 147:xl(147);break;default:xl(173)}}kl(177),Hl==94&&(xl(94),kl(15),xl(7))}function rn(){Vl.startNonterminal(\"ReturnClause\",Pl),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"ReturnClause\",Pl)}function sn(){xl(220),kl(266),Df()}function on(){Vl.startNonterminal(\"QuantifiedExpr\",Pl);switch(Hl){case 235:Sl(235);break;default:Sl(129)}kl(21),Nl(),an();for(;;){if(Hl!=41)break;Sl(41),kl(21),Nl(),an()}Sl(224),kl(266),Nl(),_f(),Vl.endNonterminal(\"QuantifiedExpr\",Pl)}function un(){switch(Hl){case 235:xl(235);break;default:xl(129)}kl(21),fn();for(;;){if(Hl!=41)break;xl(41),kl(21),fn()}xl(224),kl(266),Df()}function an(){Vl.startNonterminal(\"QuantifiedVarDecl\",Pl),Sl(31),kl(254),Nl(),hi(),kl(110),Hl==79&&(Nl(),ds()),kl(53),Sl(154),kl(266),Nl(),_f(),Vl.endNonterminal(\"QuantifiedVarDecl\",Pl)}function fn(){xl(31),kl(254),pi(),kl(110),Hl==79&&vs(),kl(53),xl(154),kl(266),Df()}function ln(){Vl.startNonterminal(\"SwitchExpr\",Pl),Sl(243),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),hn();if(Hl!=88)break}Sl(109),kl(70),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"SwitchExpr\",Pl)}function cn(){xl(243),kl(22),xl(34),kl(266),Y(),xl(37);for(;;){kl(35),pn();if(Hl!=88)break}xl(109),kl(70),xl(220),kl(266),Df()}function hn(){Vl.startNonterminal(\"SwitchCaseClause\",Pl);for(;;){Sl(88),kl(266),Nl(),dn();if(Hl!=88)break}Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"SwitchCaseClause\",Pl)}function pn(){for(;;){xl(88),kl(266),vn();if(Hl!=88)break}xl(220),kl(266),Df()}function dn(){Vl.startNonterminal(\"SwitchCaseOperand\",Pl),_f(),Vl.endNonterminal(\"SwitchCaseOperand\",Pl)}function vn(){Df()}function mn(){Vl.startNonterminal(\"TypeswitchExpr\",Pl),Sl(253),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),yn();if(Hl!=88)break}Sl(109),kl(95),Hl==31&&(Sl(31),kl(254),Nl(),hi()),kl(70),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"TypeswitchExpr\",Pl)}function gn(){xl(253),kl(22),xl(34),kl(266),Y(),xl(37);for(;;){kl(35),bn();if(Hl!=88)break}xl(109),kl(95),Hl==31&&(xl(31),kl(254),pi()),kl(70),xl(220),kl(266),Df()}function yn(){Vl.startNonterminal(\"CaseClause\",Pl),Sl(88),kl(261),Hl==31&&(Sl(31),kl(254),Nl(),hi(),kl(30),Sl(79)),kl(259),Nl(),wn(),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"CaseClause\",Pl)}function bn(){xl(88),kl(261),Hl==31&&(xl(31),kl(254),pi(),kl(30),xl(79)),kl(259),En(),xl(220),kl(266),Df()}function wn(){Vl.startNonterminal(\"SequenceTypeUnion\",Pl),ms();for(;;){kl(134);if(Hl!=279)break;Sl(279),kl(259),Nl(),ms()}Vl.endNonterminal(\"SequenceTypeUnion\",Pl)}function En(){gs();for(;;){kl(134);if(Hl!=279)break;xl(279),kl(259),gs()}}function Sn(){Vl.startNonterminal(\"IfExpr\",Pl),Sl(152),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37),kl(77),Sl(245),kl(266),Nl(),_f(),Sl(122),kl(266),Nl(),_f(),Vl.endNonterminal(\"IfExpr\",Pl)}function xn(){xl(152),kl(22),xl(34),kl(266),Y(),xl(37),kl(77),xl(245),kl(266),Df(),xl(122),kl(266),Df()}function Tn(){Vl.startNonterminal(\"TryCatchExpr\",Pl),Cn();for(;;){kl(36),Nl(),On(),kl(183);if(Hl!=91)break}Vl.endNonterminal(\"TryCatchExpr\",Pl)}function Nn(){kn();for(;;){kl(36),Mn(),kl(183);if(Hl!=91)break}}function Cn(){Vl.startNonterminal(\"TryClause\",Pl),Sl(250),kl(87),Sl(276),kl(266),Nl(),Ln(),Sl(282),Vl.endNonterminal(\"TryClause\",Pl)}function kn(){xl(250),kl(87),xl(276),kl(266),An(),xl(282)}function Ln(){Vl.startNonterminal(\"TryTargetExpr\",Pl),G(),Vl.endNonterminal(\"TryTargetExpr\",Pl)}function An(){Y()}function On(){Vl.startNonterminal(\"CatchClause\",Pl),Sl(91),kl(256),Nl(),_n(),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"CatchClause\",Pl)}function Mn(){xl(91),kl(256),Dn(),xl(276),kl(266),Y(),xl(282)}function _n(){Vl.startNonterminal(\"CatchErrorList\",Pl),Qr();for(;;){kl(136);if(Hl!=279)break;Sl(279),kl(256),Nl(),Qr()}Vl.endNonterminal(\"CatchErrorList\",Pl)}function Dn(){Gr();for(;;){kl(136);if(Hl!=279)break;xl(279),kl(256),Gr()}}function Pn(){Vl.startNonterminal(\"OrExpr\",Pl),Bn();for(;;){if(Hl!=200)break;Sl(200),kl(266),Nl(),Bn()}Vl.endNonterminal(\"OrExpr\",Pl)}function Hn(){jn();for(;;){if(Hl!=200)break;xl(200),kl(266),jn()}}function Bn(){Vl.startNonterminal(\"AndExpr\",Pl),Fn();for(;;){if(Hl!=75)break;Sl(75),kl(266),Nl(),Fn()}Vl.endNonterminal(\"AndExpr\",Pl)}function jn(){In();for(;;){if(Hl!=75)break;xl(75),kl(266),In()}}function Fn(){Vl.startNonterminal(\"ComparisonExpr\",Pl),qn();if(Hl==27||Hl==54||Hl==57||Hl==58||Hl==60||Hl==61||Hl==62||Hl==63||Hl==128||Hl==146||Hl==150||Hl==164||Hl==172||Hl==178||Hl==186){switch(Hl){case 128:case 146:case 150:case 172:case 178:case 186:Nl(),mr();break;case 57:case 63:case 164:Nl(),yr();break;default:Nl(),dr()}kl(266),Nl(),qn()}Vl.endNonterminal(\"ComparisonExpr\",Pl)}function In(){Rn();if(Hl==27||Hl==54||Hl==57||Hl==58||Hl==60||Hl==61||Hl==62||Hl==63||Hl==128||Hl==146||Hl==150||Hl==164||Hl==172||Hl==178||Hl==186){switch(Hl){case 128:case 146:case 150:case 172:case 178:case 186:gr();break;case 57:case 63:case 164:br();break;default:vr()}kl(266),Rn()}}function qn(){Vl.startNonterminal(\"FTContainsExpr\",Pl),Un(),Hl==99&&(Sl(99),kl(76),Sl(244),kl(162),Nl(),Jo(),Hl==271&&(Nl(),ha())),Vl.endNonterminal(\"FTContainsExpr\",Pl)}function Rn(){zn(),Hl==99&&(xl(99),kl(76),xl(244),kl(162),Ko(),Hl==271&&pa())}function Un(){Vl.startNonterminal(\"StringConcatExpr\",Pl),Wn();for(;;){if(Hl!=280)break;Sl(280),kl(266),Nl(),Wn()}Vl.endNonterminal(\"StringConcatExpr\",Pl)}function zn(){Xn();for(;;){if(Hl!=280)break;xl(280),kl(266),Xn()}}function Wn(){Vl.startNonterminal(\"RangeExpr\",Pl),Vn(),Hl==248&&(Sl(248),kl(266),Nl(),Vn()),Vl.endNonterminal(\"RangeExpr\",Pl)}function Xn(){$n(),Hl==248&&(xl(248),kl(266),$n())}function Vn(){Vl.startNonterminal(\"AdditiveExpr\",Pl),Jn();for(;;){if(Hl!=40&&Hl!=42)break;switch(Hl){case 40:Sl(40);break;default:Sl(42)}kl(266),Nl(),Jn()}Vl.endNonterminal(\"AdditiveExpr\",Pl)}function $n(){Kn();for(;;){if(Hl!=40&&Hl!=42)break;switch(Hl){case 40:xl(40);break;default:xl(42)}kl(266),Kn()}}function Jn(){Vl.startNonterminal(\"MultiplicativeExpr\",Pl),Qn();for(;;){if(Hl!=38&&Hl!=118&&Hl!=151&&Hl!=180)break;switch(Hl){case 38:Sl(38);break;case 118:Sl(118);break;case 151:Sl(151);break;default:Sl(180)}kl(266),Nl(),Qn()}Vl.endNonterminal(\"MultiplicativeExpr\",Pl)}function Kn(){Gn();for(;;){if(Hl!=38&&Hl!=118&&Hl!=151&&Hl!=180)break;switch(Hl){case 38:xl(38);break;case 118:xl(118);break;case 151:xl(151);break;default:xl(180)}kl(266),Gn()}}function Qn(){Vl.startNonterminal(\"UnionExpr\",Pl),Yn();for(;;){if(Hl!=254&&Hl!=279)break;switch(Hl){case 254:Sl(254);break;default:Sl(279)}kl(266),Nl(),Yn()}Vl.endNonterminal(\"UnionExpr\",Pl)}function Gn(){Zn();for(;;){if(Hl!=254&&Hl!=279)break;switch(Hl){case 254:xl(254);break;default:xl(279)}kl(266),Zn()}}function Yn(){Vl.startNonterminal(\"IntersectExceptExpr\",Pl),er();for(;;){kl(222);if(Hl!=131&&Hl!=162)break;switch(Hl){case 162:Sl(162);break;default:Sl(131)}kl(266),Nl(),er()}Vl.endNonterminal(\"IntersectExceptExpr\",Pl)}function Zn(){tr();for(;;){kl(222);if(Hl!=131&&Hl!=162)break;switch(Hl){case 162:xl(162);break;default:xl(131)}kl(266),tr()}}function er(){Vl.startNonterminal(\"InstanceofExpr\",Pl),nr(),kl(223),Hl==160&&(Sl(160),kl(64),Sl(196),kl(259),Nl(),ms()),Vl.endNonterminal(\"InstanceofExpr\",Pl)}function tr(){rr(),kl(223),Hl==160&&(xl(160),kl(64),xl(196),kl(259),gs())}function nr(){Vl.startNonterminal(\"TreatExpr\",Pl),ir(),kl(224),Hl==249&&(Sl(249),kl(30),Sl(79),kl(259),Nl(),ms()),Vl.endNonterminal(\"TreatExpr\",Pl)}function rr(){sr(),kl(224),Hl==249&&(xl(249),kl(30),xl(79),kl(259),gs())}function ir(){Vl.startNonterminal(\"CastableExpr\",Pl),or(),kl(225),Hl==90&&(Sl(90),kl(30),Sl(79),kl(254),Nl(),hs()),Vl.endNonterminal(\"CastableExpr\",Pl)}function sr(){ur(),kl(225),Hl==90&&(xl(90),kl(30),xl(79),kl(254),ps())}function or(){Vl.startNonterminal(\"CastExpr\",Pl),ar(),kl(227),Hl==89&&(Sl(89),kl(30),Sl(79),kl(254),Nl(),hs()),Vl.endNonterminal(\"CastExpr\",Pl)}function ur(){fr(),kl(227),Hl==89&&(xl(89),kl(30),xl(79),kl(254),ps())}function ar(){Vl.startNonterminal(\"UnaryExpr\",Pl);for(;;){kl(266);if(Hl!=40&&Hl!=42)break;switch(Hl){case 42:Sl(42);break;default:Sl(40)}}Nl(),lr(),Vl.endNonterminal(\"UnaryExpr\",Pl)}function fr(){for(;;){kl(266);if(Hl!=40&&Hl!=42)break;switch(Hl){case 42:xl(42);break;default:xl(40)}}cr()}function lr(){Vl.startNonterminal(\"ValueExpr\",Pl);switch(Hl){case 260:Ll(247);break;default:_l=Hl}switch(_l){case 87812:case 123140:case 129284:case 141572:wr();break;case 35:Tr();break;default:hr()}Vl.endNonterminal(\"ValueExpr\",Pl)}function cr(){switch(Hl){case 260:Ll(247);break;default:_l=Hl}switch(_l){case 87812:case 123140:case 129284:case 141572:Er();break;case 35:Nr();break;default:pr()}}function hr(){Vl.startNonterminal(\"SimpleMapExpr\",Pl),Lr();for(;;){if(Hl!=26)break;Sl(26),kl(265),Nl(),Lr()}Vl.endNonterminal(\"SimpleMapExpr\",Pl)}function pr(){Ar();for(;;){if(Hl!=26)break;xl(26),kl(265),Ar()}}function dr(){Vl.startNonterminal(\"GeneralComp\",Pl);switch(Hl){case 60:Sl(60);break;case 27:Sl(27);break;case 54:Sl(54);break;case 58:Sl(58);break;case 61:Sl(61);break;default:Sl(62)}Vl.endNonterminal(\"GeneralComp\",Pl)}function vr(){switch(Hl){case 60:xl(60);break;case 27:xl(27);break;case 54:xl(54);break;case 58:xl(58);break;case 61:xl(61);break;default:xl(62)}}function mr(){Vl.startNonterminal(\"ValueComp\",Pl);switch(Hl){case 128:Sl(128);break;case 186:Sl(186);break;case 178:Sl(178);break;case 172:Sl(172);break;case 150:Sl(150);break;default:Sl(146)}Vl.endNonterminal(\"ValueComp\",Pl)}function gr(){switch(Hl){case 128:xl(128);break;case 186:xl(186);break;case 178:xl(178);break;case 172:xl(172);break;case 150:xl(150);break;default:xl(146)}}function yr(){Vl.startNonterminal(\"NodeComp\",Pl);switch(Hl){case 164:Sl(164);break;case 57:Sl(57);break;default:Sl(63)}Vl.endNonterminal(\"NodeComp\",Pl)}function br(){switch(Hl){case 164:xl(164);break;case 57:xl(57);break;default:xl(63)}}function wr(){Vl.startNonterminal(\"ValidateExpr\",Pl),Sl(260),kl(160);if(Hl!=276)switch(Hl){case 252:Sl(252),kl(254),Nl(),go();break;default:Nl(),Sr()}kl(87),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"ValidateExpr\",Pl)}function Er(){xl(260),kl(160);if(Hl!=276)switch(Hl){case 252:xl(252),kl(254),yo();break;default:xr()}kl(87),xl(276),kl(266),Y(),xl(282)}function Sr(){Vl.startNonterminal(\"ValidationMode\",Pl);switch(Hl){case 171:Sl(171);break;default:Sl(240)}Vl.endNonterminal(\"ValidationMode\",Pl)}function xr(){switch(Hl){case 171:xl(171);break;default:xl(240)}}function Tr(){Vl.startNonterminal(\"ExtensionExpr\",Pl);for(;;){Nl(),Cr(),kl(100);if(Hl!=35)break}Sl(276),kl(273),Hl!=282&&(Nl(),G()),Sl(282),Vl.endNonterminal(\"ExtensionExpr\",Pl)}function Nr(){for(;;){kr(),kl(100);if(Hl!=35)break}xl(276),kl(273),Hl!=282&&Y(),xl(282)}function Cr(){Vl.startNonterminal(\"Pragma\",Pl),Sl(35),Al(251),Hl==21&&Sl(21),Ha(),Al(10),Hl==21&&(Sl(21),Al(0),Sl(1)),Al(5),Sl(30),Vl.endNonterminal(\"Pragma\",Pl)}function kr(){xl(35),Al(251),Hl==21&&xl(21),Ba(),Al(10),Hl==21&&(xl(21),Al(0),xl(1)),Al(5),xl(30)}function Lr(){Vl.startNonterminal(\"PathExpr\",Pl);switch(Hl){case 46:Sl(46),kl(285);switch(Hl){case 25:case 26:case 27:case 37:case 38:case 40:case 41:case 42:case 49:case 53:case 57:case 58:case 60:case 61:case 62:case 63:case 69:case 87:case 99:case 205:case 232:case 247:case 273:case 279:case 280:case 281:case 282:break;default:Nl(),Or()}break;case 47:Sl(47),kl(264),Nl(),Or();break;default:Or()}Vl.endNonterminal(\"PathExpr\",Pl)}function Ar(){switch(Hl){case 46:xl(46),kl(285);switch(Hl){case 25:case 26:case 27:case 37:case 38:case 40:case 41:case 42:case 49:case 53:case 57:case 58:case 60:case 61:case 62:case 63:case 69:case 87:case 99:case 205:case 232:case 247:case 273:case 279:case 280:case 281:case 282:break;default:Mr()}break;case 47:xl(47),kl(264),Mr();break;default:Mr()}}function Or(){Vl.startNonterminal(\"RelativePathExpr\",Pl),_r();for(;;){switch(Hl){case 26:Ll(265);break;default:_l=Hl}if(_l!=25&&_l!=27&&_l!=37&&_l!=38&&_l!=40&&_l!=41&&_l!=42&&_l!=46&&_l!=47&&_l!=49&&_l!=53&&_l!=54&&_l!=57&&_l!=58&&_l!=60&&_l!=61&&_l!=62&&_l!=63&&_l!=69&&_l!=70&&_l!=75&&_l!=79&&_l!=80&&_l!=81&&_l!=84&&_l!=87&&_l!=88&&_l!=89&&_l!=90&&_l!=94&&_l!=99&&_l!=105&&_l!=109&&_l!=113&&_l!=118&&_l!=122&&_l!=123&&_l!=126&&_l!=128&&_l!=131&&_l!=137&&_l!=146&&_l!=148&&_l!=150&&_l!=151&&_l!=160&&_l!=162&&_l!=163&&_l!=164&&_l!=172&&_l!=174&&_l!=178&&_l!=180&&_l!=181&&_l!=186&&_l!=198&&_l!=200&&_l!=201&&_l!=205&&_l!=220&&_l!=224&&_l!=232&&_l!=236&&_l!=237&&_l!=247&&_l!=248&&_l!=249&&_l!=254&&_l!=266&&_l!=270&&_l!=273&&_l!=279&&_l!=280&&_l!=281&&_l!=282&&_l!=23578&&_l!=24090){_l=Kl(3,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{switch(Hl){case 46:xl(46);break;case 47:xl(47);break;default:xl(26)}kl(264),Dr(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(3,Pl,_l)}}if(_l!=-1&&_l!=46&&_l!=47)break;switch(Hl){case 46:Sl(46);break;case 47:Sl(47);break;default:Sl(26)}kl(264),Nl(),_r()}Vl.endNonterminal(\"RelativePathExpr\",Pl)}function Mr(){Dr();for(;;){switch(Hl){case 26:Ll(265);break;default:_l=Hl}if(_l!=25&&_l!=27&&_l!=37&&_l!=38&&_l!=40&&_l!=41&&_l!=42&&_l!=46&&_l!=47&&_l!=49&&_l!=53&&_l!=54&&_l!=57&&_l!=58&&_l!=60&&_l!=61&&_l!=62&&_l!=63&&_l!=69&&_l!=70&&_l!=75&&_l!=79&&_l!=80&&_l!=81&&_l!=84&&_l!=87&&_l!=88&&_l!=89&&_l!=90&&_l!=94&&_l!=99&&_l!=105&&_l!=109&&_l!=113&&_l!=118&&_l!=122&&_l!=123&&_l!=126&&_l!=128&&_l!=131&&_l!=137&&_l!=146&&_l!=148&&_l!=150&&_l!=151&&_l!=160&&_l!=162&&_l!=163&&_l!=164&&_l!=172&&_l!=174&&_l!=178&&_l!=180&&_l!=181&&_l!=186&&_l!=198&&_l!=200&&_l!=201&&_l!=205&&_l!=220&&_l!=224&&_l!=232&&_l!=236&&_l!=237&&_l!=247&&_l!=248&&_l!=249&&_l!=254&&_l!=266&&_l!=270&&_l!=273&&_l!=279&&_l!=280&&_l!=281&&_l!=282&&_l!=23578&&_l!=24090){_l=Kl(3,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{switch(Hl){case 46:xl(46);break;case 47:xl(47);break;default:xl(26)}kl(264),Dr(),Jl(3,t,-1);continue}catch(a){Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(3,t,-2);break}}}if(_l!=-1&&_l!=46&&_l!=47)break;switch(Hl){case 46:xl(46);break;case 47:xl(47);break;default:xl(26)}kl(264),Dr()}}function _r(){Vl.startNonterminal(\"StepExpr\",Pl);switch(Hl){case 82:Ll(284);break;case 121:Ll(282);break;case 184:case 216:Ll(281);break;case 96:case 119:case 202:case 244:case 256:Ll(246);break;case 78:case 124:case 152:case 165:case 167:case 242:case 243:case 253:Ll(239);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(245);break;case 6:case 70:case 72:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 137:case 141:case 145:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(243);break;default:_l=Hl}if(_l==35922||_l==35961||_l==36024||_l==36056||_l==38482||_l==38521||_l==38584||_l==38616||_l==40530||_l==40569||_l==40632||_l==40664||_l==41042||_l==41081||_l==41144||_l==41176||_l==41554||_l==41593||_l==41656||_l==41688||_l==43090||_l==43129||_l==43192||_l==43224||_l==45138||_l==45177||_l==45240||_l==45272||_l==45650||_l==45689||_l==45752||_l==45784||_l==46162||_l==46201||_l==46264||_l==46296||_l==48210||_l==48249||_l==48312||_l==48344||_l==53842||_l==53881||_l==53944||_l==53976||_l==55890||_l==55929||_l==55992||_l==56024||_l==57938||_l==57977||_l==58040||_l==58072||_l==60498||_l==60537||_l==60600||_l==60632||_l==62546||_l==62585||_l==62648||_l==62680||_l==63058||_l==63097||_l==63160||_l==63192||_l==64594||_l==64633||_l==64696||_l==64728||_l==65618||_l==65657||_l==65720||_l==65752||_l==67154||_l==67193||_l==67256||_l==67288||_l==70226||_l==70265||_l==70328||_l==70360||_l==74834||_l==74873||_l==74936||_l==74968||_l==75858||_l==75897||_l==75960||_l==75992||_l==76882||_l==76921||_l==76984||_l==77016||_l==77394||_l==77433||_l==77496||_l==77528||_l==82002||_l==82041||_l==82104||_l==82136||_l==83026||_l==83065||_l==83128||_l==83160||_l==83538||_l==83577||_l==83640||_l==83672||_l==84050||_l==84089||_l==84152||_l==84184||_l==88146||_l==88185||_l==88248||_l==88280||_l==89170||_l==89209||_l==89272||_l==89304||_l==91218||_l==91257||_l==91320||_l==91352||_l==92242||_l==92281||_l==92344||_l==92376||_l==92754||_l==92793||_l==92856||_l==92888||_l==95314||_l==95353||_l==95416||_l==95448||_l==101458||_l==101497||_l==101560||_l==101592||_l==102482||_l==102521||_l==102584||_l==102616||_l==102994||_l==103033||_l==103096||_l==103128||_l==112722||_l==112761||_l==112824||_l==112856||_l==114770||_l==114809||_l==114872||_l==114904||_l==120914||_l==120953||_l==121016||_l==121048||_l==121426||_l==121465||_l==121528||_l==121560||_l==127058||_l==127097||_l==127160||_l==127192||_l==127570||_l==127609||_l==127672||_l==127704||_l==130130||_l==130169||_l==130232||_l==130264||_l==136274||_l==136313||_l==136376||_l==136408||_l==138322||_l==138361||_l==138424||_l==138456){_l=Kl(4,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Zr(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(4,Pl,_l)}}switch(_l){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 34:case 44:case 54:case 55:case 59:case 68:case 276:case 278:case 3154:case 3193:case 9912:case 9944:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14993:case 14994:case 14996:case 14998:case 14999:case 15e3:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15033:case 15034:case 15039:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15074:case 15075:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15090:case 15091:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15101:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17553:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:case 36946:case 36985:case 37048:case 37080:case 37458:case 37497:case 37560:case 37592:case 37970:case 38009:case 38072:case 38104:case 39506:case 39545:case 39608:case 39640:case 40018:case 40057:case 42066:case 42105:case 42168:case 42200:case 42578:case 42617:case 42680:case 42712:case 43602:case 43641:case 43704:case 43736:case 44114:case 44153:case 44216:case 44248:case 46674:case 46713:case 46776:case 46808:case 47698:case 47737:case 47800:case 47832:case 49234:case 49273:case 49336:case 49368:case 49746:case 49785:case 49848:case 49880:case 50258:case 50297:case 50360:case 50392:case 51794:case 51833:case 51896:case 51928:case 52306:case 52345:case 52408:case 52440:case 52818:case 52857:case 52920:case 52952:case 53330:case 53369:case 53432:case 53464:case 54354:case 54393:case 54456:case 54488:case 55378:case 55417:case 55480:case 55512:case 56402:case 56441:case 56504:case 56536:case 56914:case 56953:case 57016:case 57048:case 57426:case 57465:case 57528:case 57560:case 61010:case 61049:case 61112:case 61144:case 61522:case 61561:case 61624:case 61656:case 62034:case 62073:case 62136:case 62168:case 63570:case 63609:case 63672:case 63704:case 64082:case 64121:case 64184:case 64216:case 66130:case 66169:case 66232:case 66264:case 67666:case 67705:case 67768:case 67800:case 68178:case 68217:case 68280:case 68312:case 68690:case 68729:case 68792:case 68824:case 69202:case 69241:case 69304:case 69336:case 69714:case 69753:case 69816:case 69848:case 72274:case 72313:case 72376:case 72408:case 74322:case 74361:case 74424:case 74456:case 77906:case 77945:case 78008:case 78040:case 78418:case 78457:case 78520:case 78552:case 78930:case 78969:case 79032:case 79064:case 79442:case 79481:case 79544:case 79576:case 81490:case 81529:case 81592:case 81624:case 82514:case 82553:case 82616:case 82648:case 84562:case 84601:case 84664:case 84696:case 85074:case 85113:case 85176:case 85208:case 85586:case 85625:case 87122:case 87161:case 87224:case 87256:case 87634:case 87673:case 87736:case 87768:case 90194:case 90233:case 90296:case 90328:case 93266:case 93305:case 93368:case 93400:case 94290:case 94329:case 94392:case 94424:case 94802:case 94841:case 94904:case 94936:case 97874:case 97913:case 97976:case 98008:case 98386:case 98425:case 98488:case 98520:case 99410:case 99449:case 99512:case 99544:case 101970:case 102009:case 102072:case 102104:case 103506:case 103545:case 103608:case 103640:case 104018:case 104057:case 104120:case 104152:case 105554:case 105593:case 105656:case 105688:case 108626:case 108665:case 108728:case 108760:case 109138:case 109177:case 109240:case 109272:case 110674:case 110713:case 110776:case 110808:case 111698:case 111737:case 111800:case 111832:case 112210:case 112249:case 112312:case 112344:case 113234:case 113273:case 113336:case 113368:case 113746:case 113785:case 113848:case 113880:case 115282:case 115321:case 115384:case 115416:case 115794:case 115833:case 115896:case 115928:case 116306:case 116345:case 116408:case 116440:case 116818:case 116857:case 116920:case 116952:case 117330:case 117369:case 117432:case 117464:case 119890:case 119929:case 119992:case 120024:case 120402:case 120441:case 120504:case 120536:case 122962:case 123001:case 123064:case 123096:case 123986:case 124025:case 124498:case 124537:case 124600:case 124632:case 125010:case 125049:case 125112:case 125144:case 128082:case 128121:case 128184:case 128216:case 128594:case 128633:case 128696:case 128728:case 129106:case 129145:case 129208:case 129240:case 129618:case 129657:case 129720:case 129752:case 131154:case 131193:case 131256:case 131288:case 131666:case 131705:case 131768:case 131800:case 133202:case 133241:case 133304:case 133336:case 133714:case 133753:case 133816:case 133848:case 134226:case 134265:case 134328:case 134360:case 134738:case 134777:case 134840:case 134872:case 136786:case 136825:case 136888:case 136920:case 140370:case 140409:case 140472:case 140504:case 141394:case 141408:case 141431:case 141433:case 141496:case 141514:case 141528:case 141556:case 141568:Yr();break;default:Pr()}Vl.endNonterminal(\"StepExpr\",Pl)}function Dr(){switch(Hl){case 82:Ll(284);break;case 121:Ll(282);break;case 184:case 216:Ll(281);break;case 96:case 119:case 202:case 244:case 256:Ll(246);break;case 78:case 124:case 152:case 165:case 167:case 242:case 243:case 253:Ll(239);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(245);break;case 6:case 70:case 72:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 137:case 141:case 145:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(243);break;default:_l=Hl}if(_l==35922||_l==35961||_l==36024||_l==36056||_l==38482||_l==38521||_l==38584||_l==38616||_l==40530||_l==40569||_l==40632||_l==40664||_l==41042||_l==41081||_l==41144||_l==41176||_l==41554||_l==41593||_l==41656||_l==41688||_l==43090||_l==43129||_l==43192||_l==43224||_l==45138||_l==45177||_l==45240||_l==45272||_l==45650||_l==45689||_l==45752||_l==45784||_l==46162||_l==46201||_l==46264||_l==46296||_l==48210||_l==48249||_l==48312||_l==48344||_l==53842||_l==53881||_l==53944||_l==53976||_l==55890||_l==55929||_l==55992||_l==56024||_l==57938||_l==57977||_l==58040||_l==58072||_l==60498||_l==60537||_l==60600||_l==60632||_l==62546||_l==62585||_l==62648||_l==62680||_l==63058||_l==63097||_l==63160||_l==63192||_l==64594||_l==64633||_l==64696||_l==64728||_l==65618||_l==65657||_l==65720||_l==65752||_l==67154||_l==67193||_l==67256||_l==67288||_l==70226||_l==70265||_l==70328||_l==70360||_l==74834||_l==74873||_l==74936||_l==74968||_l==75858||_l==75897||_l==75960||_l==75992||_l==76882||_l==76921||_l==76984||_l==77016||_l==77394||_l==77433||_l==77496||_l==77528||_l==82002||_l==82041||_l==82104||_l==82136||_l==83026||_l==83065||_l==83128||_l==83160||_l==83538||_l==83577||_l==83640||_l==83672||_l==84050||_l==84089||_l==84152||_l==84184||_l==88146||_l==88185||_l==88248||_l==88280||_l==89170||_l==89209||_l==89272||_l==89304||_l==91218||_l==91257||_l==91320||_l==91352||_l==92242||_l==92281||_l==92344||_l==92376||_l==92754||_l==92793||_l==92856||_l==92888||_l==95314||_l==95353||_l==95416||_l==95448||_l==101458||_l==101497||_l==101560||_l==101592||_l==102482||_l==102521||_l==102584||_l==102616||_l==102994||_l==103033||_l==103096||_l==103128||_l==112722||_l==112761||_l==112824||_l==112856||_l==114770||_l==114809||_l==114872||_l==114904||_l==120914||_l==120953||_l==121016||_l==121048||_l==121426||_l==121465||_l==121528||_l==121560||_l==127058||_l==127097||_l==127160||_l==127192||_l==127570||_l==127609||_l==127672||_l==127704||_l==130130||_l==130169||_l==130232||_l==130264||_l==136274||_l==136313||_l==136376||_l==136408||_l==138322||_l==138361||_l==138424||_l==138456){_l=Kl(4,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Zr(),Jl(4,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(4,t,-2)}}}switch(_l){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 34:case 44:case 54:case 55:case 59:case 68:case 276:case 278:case 3154:case 3193:case 9912:case 9944:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14993:case 14994:case 14996:case 14998:case 14999:case 15e3:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15033:case 15034:case 15039:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15074:case 15075:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15090:case 15091:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15101:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17553:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:case 36946:case 36985:case 37048:case 37080:case 37458:case 37497:case 37560:case 37592:case 37970:case 38009:case 38072:case 38104:case 39506:case 39545:case 39608:case 39640:case 40018:case 40057:case 42066:case 42105:case 42168:case 42200:case 42578:case 42617:case 42680:case 42712:case 43602:case 43641:case 43704:case 43736:case 44114:case 44153:case 44216:case 44248:case 46674:case 46713:case 46776:case 46808:case 47698:case 47737:case 47800:case 47832:case 49234:case 49273:case 49336:case 49368:case 49746:case 49785:case 49848:case 49880:case 50258:case 50297:case 50360:case 50392:case 51794:case 51833:case 51896:case 51928:case 52306:case 52345:case 52408:case 52440:case 52818:case 52857:case 52920:case 52952:case 53330:case 53369:case 53432:case 53464:case 54354:case 54393:case 54456:case 54488:case 55378:case 55417:case 55480:case 55512:case 56402:case 56441:case 56504:case 56536:case 56914:case 56953:case 57016:case 57048:case 57426:case 57465:case 57528:case 57560:case 61010:case 61049:case 61112:case 61144:case 61522:case 61561:case 61624:case 61656:case 62034:case 62073:case 62136:case 62168:case 63570:case 63609:case 63672:case 63704:case 64082:case 64121:case 64184:case 64216:case 66130:case 66169:case 66232:case 66264:case 67666:case 67705:case 67768:case 67800:case 68178:case 68217:case 68280:case 68312:case 68690:case 68729:case 68792:case 68824:case 69202:case 69241:case 69304:case 69336:case 69714:case 69753:case 69816:case 69848:case 72274:case 72313:case 72376:case 72408:case 74322:case 74361:case 74424:case 74456:case 77906:case 77945:case 78008:case 78040:case 78418:case 78457:case 78520:case 78552:case 78930:case 78969:case 79032:case 79064:case 79442:case 79481:case 79544:case 79576:case 81490:case 81529:case 81592:case 81624:case 82514:case 82553:case 82616:case 82648:case 84562:case 84601:case 84664:case 84696:case 85074:case 85113:case 85176:case 85208:case 85586:case 85625:case 87122:case 87161:case 87224:case 87256:case 87634:case 87673:case 87736:case 87768:case 90194:case 90233:case 90296:case 90328:case 93266:case 93305:case 93368:case 93400:case 94290:case 94329:case 94392:case 94424:case 94802:case 94841:case 94904:case 94936:case 97874:case 97913:case 97976:case 98008:case 98386:case 98425:case 98488:case 98520:case 99410:case 99449:case 99512:case 99544:case 101970:case 102009:case 102072:case 102104:case 103506:case 103545:case 103608:case 103640:case 104018:case 104057:case 104120:case 104152:case 105554:case 105593:case 105656:case 105688:case 108626:case 108665:case 108728:case 108760:case 109138:case 109177:case 109240:case 109272:case 110674:case 110713:case 110776:case 110808:case 111698:case 111737:case 111800:case 111832:case 112210:case 112249:case 112312:case 112344:case 113234:case 113273:case 113336:case 113368:case 113746:case 113785:case 113848:case 113880:case 115282:case 115321:case 115384:case 115416:case 115794:case 115833:case 115896:case 115928:case 116306:case 116345:case 116408:case 116440:case 116818:case 116857:case 116920:case 116952:case 117330:case 117369:case 117432:case 117464:case 119890:case 119929:case 119992:case 120024:case 120402:case 120441:case 120504:case 120536:case 122962:case 123001:case 123064:case 123096:case 123986:case 124025:case 124498:case 124537:case 124600:case 124632:case 125010:case 125049:case 125112:case 125144:case 128082:case 128121:case 128184:case 128216:case 128594:case 128633:case 128696:case 128728:case 129106:case 129145:case 129208:case 129240:case 129618:case 129657:case 129720:case 129752:case 131154:case 131193:case 131256:case 131288:case 131666:case 131705:case 131768:case 131800:case 133202:case 133241:case 133304:case 133336:case 133714:case 133753:case 133816:case 133848:case 134226:case 134265:case 134328:case 134360:case 134738:case 134777:case 134840:case 134872:case 136786:case 136825:case 136888:case 136920:case 140370:case 140409:case 140472:case 140504:case 141394:case 141408:case 141431:case 141433:case 141496:case 141514:case 141528:case 141556:case 141568:Zr();break;case-3:break;default:Hr()}}function Pr(){Vl.startNonterminal(\"AxisStep\",Pl);switch(Hl){case 73:case 74:case 206:case 212:case 213:Ll(241);break;default:_l=Hl}switch(_l){case 45:case 26185:case 26186:case 26318:case 26324:case 26325:Ur();break;default:Br()}kl(237),Nl(),ni(),Vl.endNonterminal(\"AxisStep\",Pl)}function Hr(){switch(Hl){case 73:case 74:case 206:case 212:case 213:Ll(241);break;default:_l=Hl}switch(_l){case 45:case 26185:case 26186:case 26318:case 26324:case 26325:zr();break;default:jr()}kl(237),ri()}function Br(){Vl.startNonterminal(\"ForwardStep\",Pl);switch(Hl){case 82:Ll(244);break;case 93:case 111:case 112:case 135:case 136:case 229:Ll(241);break;default:_l=Hl}switch(_l){case 26194:case 26205:case 26223:case 26224:case 26247:case 26248:case 26341:Fr(),kl(256),Nl(),Jr();break;default:qr()}Vl.endNonterminal(\"ForwardStep\",Pl)}function jr(){switch(Hl){case 82:Ll(244);break;case 93:case 111:case 112:case 135:case 136:case 229:Ll(241);break;default:_l=Hl}switch(_l){case 26194:case 26205:case 26223:case 26224:case 26247:case 26248:case 26341:Ir(),kl(256),Kr();break;default:Rr()}}function Fr(){Vl.startNonterminal(\"ForwardAxis\",Pl);switch(Hl){case 93:Sl(93),kl(26),Sl(51);break;case 111:Sl(111),kl(26),Sl(51);break;case 82:Sl(82),kl(26),Sl(51);break;case 229:Sl(229),kl(26),Sl(51);break;case 112:Sl(112),kl(26),Sl(51);break;case 136:Sl(136),kl(26),Sl(51);break;default:Sl(135),kl(26),Sl(51)}Vl.endNonterminal(\"ForwardAxis\",Pl)}function Ir(){switch(Hl){case 93:xl(93),kl(26),xl(51);break;case 111:xl(111),kl(26),xl(51);break;case 82:xl(82),kl(26),xl(51);break;case 229:xl(229),kl(26),xl(51);break;case 112:xl(112),kl(26),xl(51);break;case 136:xl(136),kl(26),xl(51);break;default:xl(135),kl(26),xl(51)}}function qr(){Vl.startNonterminal(\"AbbrevForwardStep\",Pl),Hl==66&&Sl(66),kl(256),Nl(),Jr(),Vl.endNonterminal(\"AbbrevForwardStep\",Pl)}function Rr(){Hl==66&&xl(66),kl(256),Kr()}function Ur(){Vl.startNonterminal(\"ReverseStep\",Pl);switch(Hl){case 45:Vr();break;default:Wr(),kl(256),Nl(),Jr()}Vl.endNonterminal(\"ReverseStep\",Pl)}function zr(){switch(Hl){case 45:$r();break;default:Xr(),kl(256),Kr()}}function Wr(){Vl.startNonterminal(\"ReverseAxis\",Pl);switch(Hl){case 206:Sl(206),kl(26),Sl(51);break;case 73:Sl(73),kl(26),Sl(51);break;case 213:Sl(213),kl(26),Sl(51);break;case 212:Sl(212),kl(26),Sl(51);break;default:Sl(74),kl(26),Sl(51)}Vl.endNonterminal(\"ReverseAxis\",Pl)}function Xr(){switch(Hl){case 206:xl(206),kl(26),xl(51);break;case 73:xl(73),kl(26),xl(51);break;case 213:xl(213),kl(26),xl(51);break;case 212:xl(212),kl(26),xl(51);break;default:xl(74),kl(26),xl(51)}}function Vr(){Vl.startNonterminal(\"AbbrevReverseStep\",Pl),Sl(45),Vl.endNonterminal(\"AbbrevReverseStep\",Pl)}function $r(){xl(45)}function Jr(){Vl.startNonterminal(\"NodeTest\",Pl);switch(Hl){case 82:case 96:case 120:case 121:case 185:case 191:case 216:case 226:case 227:case 244:Ll(240);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Ps();break;default:Qr()}Vl.endNonterminal(\"NodeTest\",Pl)}function Kr(){switch(Hl){case 82:case 96:case 120:case 121:case 185:case 191:case 216:case 226:case 227:case 244:Ll(240);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Hs();break;default:Gr()}}function Qr(){Vl.startNonterminal(\"NameTest\",Pl);switch(Hl){case 5:Sl(5);break;default:Ha()}Vl.endNonterminal(\"NameTest\",Pl)}function Gr(){switch(Hl){case 5:xl(5);break;default:Ba()}}function Yr(){Vl.startNonterminal(\"PostfixExpr\",Pl),ol();for(;;){kl(240);if(Hl!=34&&Hl!=68)break;switch(Hl){case 68:Nl(),ii();break;default:Nl(),ei()}}Vl.endNonterminal(\"PostfixExpr\",Pl)}function Zr(){ul();for(;;){kl(240);if(Hl!=34&&Hl!=68)break;switch(Hl){case 68:si();break;default:ti()}}}function ei(){Vl.startNonterminal(\"ArgumentList\",Pl),Sl(34),kl(275);if(Hl!=37){Nl(),Ti();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(270),Nl(),Ti()}}Sl(37),Vl.endNonterminal(\"ArgumentList\",Pl)}function ti(){xl(34),kl(275);if(Hl!=37){Ni();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(270),Ni()}}xl(37)}function ni(){Vl.startNonterminal(\"PredicateList\",Pl);for(;;){kl(237);if(Hl!=68)break;Nl(),ii()}Vl.endNonterminal(\"PredicateList\",Pl)}function ri(){for(;;){kl(237);if(Hl!=68)break;si()}}function ii(){Vl.startNonterminal(\"Predicate\",Pl),Sl(68),kl(266),Nl(),G(),Sl(69),Vl.endNonterminal(\"Predicate\",Pl)}function si(){xl(68),kl(266),Y(),xl(69)}function oi(){Vl.startNonterminal(\"Literal\",Pl);switch(Hl){case 11:Sl(11);break;default:ai()}Vl.endNonterminal(\"Literal\",Pl)}function ui(){switch(Hl){case 11:xl(11);break;default:fi()}}function ai(){Vl.startNonterminal(\"NumericLiteral\",Pl);switch(Hl){case 8:Sl(8);break;case 9:Sl(9);break;default:Sl(10)}Vl.endNonterminal(\"NumericLiteral\",Pl)}function fi(){switch(Hl){case 8:xl(8);break;case 9:xl(9);break;default:xl(10)}}function li(){Vl.startNonterminal(\"VarRef\",Pl),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"VarRef\",Pl)}function ci(){xl(31),kl(254),pi()}function hi(){Vl.startNonterminal(\"VarName\",Pl),Ha(),Vl.endNonterminal(\"VarName\",Pl)}function pi(){Ba()}function di(){Vl.startNonterminal(\"ParenthesizedExpr\",Pl),Sl(34),kl(268),Hl!=37&&(Nl(),G()),Sl(37),Vl.endNonterminal(\"ParenthesizedExpr\",Pl)}function vi(){xl(34),kl(268),Hl!=37&&Y(),xl(37)}function mi(){Vl.startNonterminal(\"ContextItemExpr\",Pl),Sl(44),Vl.endNonterminal(\"ContextItemExpr\",Pl)}function gi(){xl(44)}function yi(){Vl.startNonterminal(\"OrderedExpr\",Pl),Sl(202),kl(87),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"OrderedExpr\",Pl)}function bi(){xl(202),kl(87),xl(276),kl(266),Y(),xl(282)}function wi(){Vl.startNonterminal(\"UnorderedExpr\",Pl),Sl(256),kl(87),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"UnorderedExpr\",Pl)}function Ei(){xl(256),kl(87),xl(276),kl(266),Y(),xl(282)}function Si(){Vl.startNonterminal(\"FunctionCall\",Pl),ja(),kl(22),Nl(),ei(),Vl.endNonterminal(\"FunctionCall\",Pl)}function xi(){Fa(),kl(22),ti()}function Ti(){Vl.startNonterminal(\"Argument\",Pl);switch(Hl){case 64:Ci();break;default:_f()}Vl.endNonterminal(\"Argument\",Pl)}function Ni(){switch(Hl){case 64:ki();break;default:Df()}}function Ci(){Vl.startNonterminal(\"ArgumentPlaceholder\",Pl),Sl(64),Vl.endNonterminal(\"ArgumentPlaceholder\",Pl)}function ki(){xl(64)}function Li(){Vl.startNonterminal(\"Constructor\",Pl);switch(Hl){case 54:case 55:case 59:Oi();break;default:Ji()}Vl.endNonterminal(\"Constructor\",Pl)}function Ai(){switch(Hl){case 54:case 55:case 59:Mi();break;default:Ki()}}function Oi(){Vl.startNonterminal(\"DirectConstructor\",Pl);switch(Hl){case 54:_i();break;case 55:Wi();break;default:Vi()}Vl.endNonterminal(\"DirectConstructor\",Pl)}function Mi(){switch(Hl){case 54:Di();break;case 55:Xi();break;default:$i()}}function _i(){Vl.startNonterminal(\"DirElemConstructor\",Pl),Sl(54),Al(4),Sl(20),Pi();switch(Hl){case 48:Sl(48);break;default:Sl(61);for(;;){Al(174);if(Hl==56)break;Ui()}Sl(56),Al(4),Sl(20),Al(12),Hl==21&&Sl(21),Al(8),Sl(61)}Vl.endNonterminal(\"DirElemConstructor\",Pl)}function Di(){xl(54),Al(4),xl(20),Hi();switch(Hl){case 48:xl(48);break;default:xl(61);for(;;){Al(174);if(Hl==56)break;zi()}xl(56),Al(4),xl(20),Al(12),Hl==21&&xl(21),Al(8),xl(61)}}function Pi(){Vl.startNonterminal(\"DirAttributeList\",Pl);for(;;){Al(19);if(Hl!=21)break;Sl(21),Al(91),Hl==20&&(Sl(20),Al(11),Hl==21&&Sl(21),Al(7),Sl(60),Al(18),Hl==21&&Sl(21),Bi())}Vl.endNonterminal(\"DirAttributeList\",Pl)}function Hi(){for(;;){Al(19);if(Hl!=21)break;xl(21),Al(91),Hl==20&&(xl(20),Al(11),Hl==21&&xl(21),Al(7),xl(60),Al(18),Hl==21&&xl(21),ji())}}function Bi(){Vl.startNonterminal(\"DirAttributeValue\",Pl),Al(14);switch(Hl){case 28:Sl(28);for(;;){Al(167);if(Hl==28)break;switch(Hl){case 13:Sl(13);break;default:Fi()}}Sl(28);break;default:Sl(33);for(;;){Al(168);if(Hl==33)break;switch(Hl){case 14:Sl(14);break;default:qi()}}Sl(33)}Vl.endNonterminal(\"DirAttributeValue\",Pl)}function ji(){Al(14);switch(Hl){case 28:xl(28);for(;;){Al(167);if(Hl==28)break;switch(Hl){case 13:xl(13);break;default:Ii()}}xl(28);break;default:xl(33);for(;;){Al(168);if(Hl==33)break;switch(Hl){case 14:xl(14);break;default:Ri()}}xl(33)}}function Fi(){Vl.startNonterminal(\"QuotAttrValueContent\",Pl);switch(Hl){case 16:Sl(16);break;default:Vf()}Vl.endNonterminal(\"QuotAttrValueContent\",Pl)}function Ii(){switch(Hl){case 16:xl(16);break;default:$f()}}function qi(){Vl.startNonterminal(\"AposAttrValueContent\",Pl);switch(Hl){case 17:Sl(17);break;default:Vf()}Vl.endNonterminal(\"AposAttrValueContent\",Pl)}function Ri(){switch(Hl){case 17:xl(17);break;default:$f()}}function Ui(){Vl.startNonterminal(\"DirElemContent\",Pl);switch(Hl){case 54:case 55:case 59:Oi();break;case 4:Sl(4);break;case 15:Sl(15);break;default:Vf()}Vl.endNonterminal(\"DirElemContent\",Pl)}function zi(){switch(Hl){case 54:case 55:case 59:Mi();break;case 4:xl(4);break;case 15:xl(15);break;default:$f()}}function Wi(){Vl.startNonterminal(\"DirCommentConstructor\",Pl),Sl(55),Al(1),Sl(2),Al(6),Sl(43),Vl.endNonterminal(\"DirCommentConstructor\",Pl)}function Xi(){xl(55),Al(1),xl(2),Al(6),xl(43)}function Vi(){Vl.startNonterminal(\"DirPIConstructor\",Pl),Sl(59),Al(3),Sl(18),Al(13),Hl==21&&(Sl(21),Al(2),Sl(3)),Al(9),Sl(65),Vl.endNonterminal(\"DirPIConstructor\",Pl)}function $i(){xl(59),Al(3),xl(18),Al(13),Hl==21&&(xl(21),Al(2),xl(3)),Al(9),xl(65)}function Ji(){Vl.startNonterminal(\"ComputedConstructor\",Pl);switch(Hl){case 119:Qf();break;case 121:Qi();break;case 82:Yf();break;case 184:Yi();break;case 244:il();break;case 96:nl();break;default:el()}Vl.endNonterminal(\"ComputedConstructor\",Pl)}function Ki(){switch(Hl){case 119:Gf();break;case 121:Gi();break;case 82:Zf();break;case 184:Zi();break;case 244:sl();break;case 96:rl();break;default:tl()}}function Qi(){Vl.startNonterminal(\"CompElemConstructor\",Pl),Sl(121),kl(257);switch(Hl){case 276:Sl(276),kl(266),Nl(),G(),Sl(282);break;default:Nl(),Ha()}kl(87),Sl(276),kl(276),Hl!=282&&(Nl(),Jf()),Sl(282),Vl.endNonterminal(\"CompElemConstructor\",Pl)}function Gi(){xl(121),kl(257);switch(Hl){case 276:xl(276),kl(266),Y(),xl(282);break;default:Ba()}kl(87),xl(276),kl(276),Hl!=282&&Kf(),xl(282)}function Yi(){Vl.startNonterminal(\"CompNamespaceConstructor\",Pl),Sl(184),kl(250);switch(Hl){case 276:Sl(276),kl(266),Nl(),ns(),Sl(282);break;default:Nl(),es()}kl(87),Sl(276),kl(266),Nl(),is(),Sl(282),Vl.endNonterminal(\"CompNamespaceConstructor\",Pl)}function Zi(){xl(184),kl(250);switch(Hl){case 276:xl(276),kl(266),rs(),xl(282);break;default:ts()}kl(87),xl(276),kl(266),ss(),xl(282)}function es(){Vl.startNonterminal(\"Prefix\",Pl),Ia(),Vl.endNonterminal(\"Prefix\",Pl)}function ts(){qa()}function ns(){Vl.startNonterminal(\"PrefixExpr\",Pl),G(),Vl.endNonterminal(\"PrefixExpr\",Pl)}function rs(){Y()}function is(){Vl.startNonterminal(\"URIExpr\",Pl),G(),Vl.endNonterminal(\"URIExpr\",Pl)}function ss(){Y()}function os(){Vl.startNonterminal(\"FunctionItemExpr\",Pl);switch(Hl){case 145:Ll(92);break;default:_l=Hl}switch(_l){case 32:case 17553:ls();break;default:as()}Vl.endNonterminal(\"FunctionItemExpr\",Pl)}function us(){switch(Hl){case 145:Ll(92);break;default:_l=Hl}switch(_l){case 32:case 17553:cs();break;default:fs()}}function as(){Vl.startNonterminal(\"NamedFunctionRef\",Pl),Ha(),kl(20),Sl(29),kl(16),Sl(8),Vl.endNonterminal(\"NamedFunctionRef\",Pl)}function fs(){Ba(),kl(20),xl(29),kl(16),xl(8)}function ls(){Vl.startNonterminal(\"InlineFunctionExpr\",Pl);for(;;){kl(97);if(Hl!=32)break;Nl(),B()}Sl(145),kl(22),Sl(34),kl(94),Hl==31&&(Nl(),U()),Sl(37),kl(111),Hl==79&&(Sl(79),kl(259),Nl(),ms()),kl(87),Nl(),V(),Vl.endNonterminal(\"InlineFunctionExpr\",Pl)}function cs(){for(;;){kl(97);if(Hl!=32)break;j()}xl(145),kl(22),xl(34),kl(94),Hl==31&&z(),xl(37),kl(111),Hl==79&&(xl(79),kl(259),gs()),kl(87),$()}function hs(){Vl.startNonterminal(\"SingleType\",Pl),vo(),kl(226),Hl==64&&Sl(64),Vl.endNonterminal(\"SingleType\",Pl)}function ps(){mo(),kl(226),Hl==64&&xl(64)}function ds(){Vl.startNonterminal(\"TypeDeclaration\",Pl),Sl(79),kl(259),Nl(),ms(),Vl.endNonterminal(\"TypeDeclaration\",Pl)}function vs(){xl(79),kl(259),gs()}function ms(){Vl.startNonterminal(\"SequenceType\",Pl);switch(Hl){case 124:Ll(242);break;default:_l=Hl}switch(_l){case 17532:Sl(124),kl(22),Sl(34),kl(23),Sl(37);break;default:ws(),kl(238);switch(Hl){case 39:case 40:case 64:Nl(),ys();break;default:}}Vl.endNonterminal(\"SequenceType\",Pl)}function gs(){switch(Hl){case 124:Ll(242);break;default:_l=Hl}switch(_l){case 17532:xl(124),kl(22),xl(34),kl(23),xl(37);break;default:Es(),kl(238);switch(Hl){case 39:case 40:case 64:bs();break;default:}}}function ys(){Vl.startNonterminal(\"OccurrenceIndicator\",Pl);switch(Hl){case 64:Sl(64);break;case 39:Sl(39);break;default:Sl(40)}Vl.endNonterminal(\"OccurrenceIndicator\",Pl)}function bs(){switch(Hl){case 64:xl(64);break;case 39:xl(39);break;default:xl(40)}}function ws(){Vl.startNonterminal(\"ItemType\",Pl);switch(Hl){case 78:case 82:case 96:case 120:case 121:case 145:case 165:case 167:case 185:case 191:case 194:case 216:case 226:case 227:case 242:case 244:Ll(242);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Ps();break;case 17573:Sl(165),kl(22),Sl(34),kl(23),Sl(37);break;case 32:case 17553:bo();break;case 34:No();break;case 17486:case 17575:case 17602:Ss();break;case 17650:Ts();break;default:_s()}Vl.endNonterminal(\"ItemType\",Pl)}function Es(){switch(Hl){case 78:case 82:case 96:case 120:case 121:case 145:case 165:case 167:case 185:case 191:case 194:case 216:case 226:case 227:case 242:case 244:Ll(242);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Hs();break;case 17573:xl(165),kl(22),xl(34),kl(23),xl(37);break;case 32:case 17553:wo();break;case 34:Co();break;case 17486:case 17575:case 17602:xs();break;case 17650:Ns();break;default:Ds()}}function Ss(){Vl.startNonterminal(\"JSONTest\",Pl);switch(Hl){case 167:Cs();break;case 194:Ls();break;default:Os()}Vl.endNonterminal(\"JSONTest\",Pl)}function xs(){switch(Hl){case 167:ks();break;case 194:As();break;default:Ms()}}function Ts(){Vl.startNonterminal(\"StructuredItemTest\",Pl),Sl(242),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"StructuredItemTest\",Pl)}function Ns(){xl(242),kl(22),xl(34),kl(23),xl(37)}function Cs(){Vl.startNonterminal(\"JSONItemTest\",Pl),Sl(167),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"JSONItemTest\",Pl)}function ks(){xl(167),kl(22),xl(34),kl(23),xl(37)}function Ls(){Vl.startNonterminal(\"JSONObjectTest\",Pl),Sl(194),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"JSONObjectTest\",Pl)}function As(){xl(194),kl(22),xl(34),kl(23),xl(37)}function Os(){Vl.startNonterminal(\"JSONArrayTest\",Pl),Sl(78),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"JSONArrayTest\",Pl)}function Ms(){xl(78),kl(22),xl(34),kl(23),xl(37)}function _s(){Vl.startNonterminal(\"AtomicOrUnionType\",Pl),Ha(),Vl.endNonterminal(\"AtomicOrUnionType\",Pl)}function Ds(){Ba()}function Ps(){Vl.startNonterminal(\"KindTest\",Pl);switch(Hl){case 120:Fs();break;case 121:no();break;case 82:Js();break;case 227:oo();break;case 226:Ys();break;case 216:Vs();break;case 96:Us();break;case 244:qs();break;case 185:Ws();break;default:Bs()}Vl.endNonterminal(\"KindTest\",Pl)}function Hs(){switch(Hl){case 120:Is();break;case 121:ro();break;case 82:Ks();break;case 227:uo();break;case 226:Zs();break;case 216:$s();break;case 96:zs();break;case 244:Rs();break;case 185:Xs();break;default:js()}}function Bs(){Vl.startNonterminal(\"AnyKindTest\",Pl),Sl(191),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"AnyKindTest\",Pl)}function js(){xl(191),kl(22),xl(34),kl(23),xl(37)}function Fs(){Vl.startNonterminal(\"DocumentTest\",Pl),Sl(120),kl(22),Sl(34),kl(144);if(Hl!=37)switch(Hl){case 121:Nl(),no();break;default:Nl(),oo()}kl(23),Sl(37),Vl.endNonterminal(\"DocumentTest\",Pl)}function Is(){xl(120),kl(22),xl(34),kl(144);if(Hl!=37)switch(Hl){case 121:ro();break;default:uo()}kl(23),xl(37)}function qs(){Vl.startNonterminal(\"TextTest\",Pl),Sl(244),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"TextTest\",Pl)}function Rs(){xl(244),kl(22),xl(34),kl(23),xl(37)}function Us(){Vl.startNonterminal(\"CommentTest\",Pl),Sl(96),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"CommentTest\",Pl)}function zs(){xl(96),kl(22),xl(34),kl(23),xl(37)}function Ws(){Vl.startNonterminal(\"NamespaceNodeTest\",Pl),Sl(185),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"NamespaceNodeTest\",Pl)}function Xs(){xl(185),kl(22),xl(34),kl(23),xl(37)}function Vs(){Vl.startNonterminal(\"PITest\",Pl),Sl(216),kl(22),Sl(34),kl(252);if(Hl!=37)switch(Hl){case 11:Sl(11);break;default:Nl(),Ia()}kl(23),Sl(37),Vl.endNonterminal(\"PITest\",Pl)}function $s(){xl(216),kl(22),xl(34),kl(252);if(Hl!=37)switch(Hl){case 11:xl(11);break;default:qa()}kl(23),xl(37)}function Js(){Vl.startNonterminal(\"AttributeTest\",Pl),Sl(82),kl(22),Sl(34),kl(260),Hl!=37&&(Nl(),Qs(),kl(101),Hl==41&&(Sl(41),kl(254),Nl(),go())),kl(23),Sl(37),Vl.endNonterminal(\"AttributeTest\",Pl)}function Ks(){xl(82),kl(22),xl(34),kl(260),Hl!=37&&(Gs(),kl(101),Hl==41&&(xl(41),kl(254),yo())),kl(23),xl(37)}function Qs(){Vl.startNonterminal(\"AttribNameOrWildcard\",Pl);switch(Hl){case 38:Sl(38);break;default:lo()}Vl.endNonterminal(\"AttribNameOrWildcard\",Pl)}function Gs(){switch(Hl){case 38:xl(38);break;default:co()}}function Ys(){Vl.startNonterminal(\"SchemaAttributeTest\",Pl),Sl(226),kl(22),Sl(34),kl(254),Nl(),eo(),kl(23),Sl(37),Vl.endNonterminal(\"SchemaAttributeTest\",Pl)}function Zs(){xl(226),kl(22),xl(34),kl(254),to(),kl(23),xl(37)}function eo(){Vl.startNonterminal(\"AttributeDeclaration\",Pl),lo(),Vl.endNonterminal(\"AttributeDeclaration\",Pl)}function to(){co()}function no(){Vl.startNonterminal(\"ElementTest\",Pl),Sl(121),kl(22),Sl(34),kl(260),Hl!=37&&(Nl(),io(),kl(101),Hl==41&&(Sl(41),kl(254),Nl(),go(),kl(102),Hl==64&&Sl(64))),kl(23),Sl(37),Vl.endNonterminal(\"ElementTest\",Pl)}function ro(){xl(121),kl(22),xl(34),kl(260),Hl!=37&&(so(),kl(101),Hl==41&&(xl(41),kl(254),yo(),kl(102),Hl==64&&xl(64))),kl(23),xl(37)}function io(){Vl.startNonterminal(\"ElementNameOrWildcard\",Pl);switch(Hl){case 38:Sl(38);break;default:ho()}Vl.endNonterminal(\"ElementNameOrWildcard\",Pl)}function so(){switch(Hl){case 38:xl(38);break;default:po()}}function oo(){Vl.startNonterminal(\"SchemaElementTest\",Pl),Sl(227),kl(22),Sl(34),kl(254),Nl(),ao(),kl(23),Sl(37),Vl.endNonterminal(\"SchemaElementTest\",Pl)}function uo(){xl(227),kl(22),xl(34),kl(254),fo(),kl(23),xl(37)}function ao(){Vl.startNonterminal(\"ElementDeclaration\",Pl),ho(),Vl.endNonterminal(\"ElementDeclaration\",Pl)}function fo(){po()}function lo(){Vl.startNonterminal(\"AttributeName\",Pl),Ha(),Vl.endNonterminal(\"AttributeName\",Pl)}function co(){Ba()}function ho(){Vl.startNonterminal(\"ElementName\",Pl),Ha(),Vl.endNonterminal(\"ElementName\",Pl)}function po(){Ba()}function vo(){Vl.startNonterminal(\"SimpleTypeName\",Pl),go(),Vl.endNonterminal(\"SimpleTypeName\",Pl)}function mo(){yo()}function go(){Vl.startNonterminal(\"TypeName\",Pl),Ha(),Vl.endNonterminal(\"TypeName\",Pl)}function yo(){Ba()}function bo(){Vl.startNonterminal(\"FunctionTest\",Pl);for(;;){kl(97);if(Hl!=32)break;Nl(),B()}switch(Hl){case 145:Ll(22);break;default:_l=Hl}_l=Kl(5,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{So(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(5,Pl,_l)}switch(_l){case-1:Nl(),Eo();break;default:Nl(),xo()}Vl.endNonterminal(\"FunctionTest\",Pl)}function wo(){for(;;){kl(97);if(Hl!=32)break;j()}switch(Hl){case 145:Ll(22);break;default:_l=Hl}_l=Kl(5,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{So(),Jl(5,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(5,t,-2)}}switch(_l){case-1:So();break;case-3:break;default:To()}}function Eo(){Vl.startNonterminal(\"AnyFunctionTest\",Pl),Sl(145),kl(22),Sl(34),kl(24),Sl(38),kl(23),Sl(37),Vl.endNonterminal(\"AnyFunctionTest\",Pl)}function So(){xl(145),kl(22),xl(34),kl(24),xl(38),kl(23),xl(37)}function xo(){Vl.startNonterminal(\"TypedFunctionTest\",Pl),Sl(145),kl(22),Sl(34),kl(262);if(Hl!=37){Nl(),ms();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(259),Nl(),ms()}}Sl(37),kl(30),Sl(79),kl(259),Nl(),ms(),Vl.endNonterminal(\"TypedFunctionTest\",Pl)}function To(){xl(145),kl(22),xl(34),kl(262);if(Hl!=37){gs();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(259),gs()}}xl(37),kl(30),xl(79),kl(259),gs()}function No(){Vl.startNonterminal(\"ParenthesizedItemType\",Pl),Sl(34),kl(259),Nl(),ws(),kl(23),Sl(37),Vl.endNonterminal(\"ParenthesizedItemType\",Pl)}function Co(){xl(34),kl(259),Es(),kl(23),xl(37)}function ko(){Vl.startNonterminal(\"RevalidationDecl\",Pl),Sl(108),kl(72),Sl(222),kl(152);switch(Hl){case 240:Sl(240);break;case 171:Sl(171);break;default:Sl(233)}Vl.endNonterminal(\"RevalidationDecl\",Pl)}function Lo(){Vl.startNonterminal(\"InsertExprTargetChoice\",Pl);switch(Hl){case 70:Sl(70);break;case 84:Sl(84);break;default:if(Hl==79){Sl(79),kl(119);switch(Hl){case 134:Sl(134);break;default:Sl(170)}}kl(54),Sl(163)}Vl.endNonterminal(\"InsertExprTargetChoice\",Pl)}function Ao(){switch(Hl){case 70:xl(70);break;case 84:xl(84);break;default:if(Hl==79){xl(79),kl(119);switch(Hl){case 134:xl(134);break;default:xl(170)}}kl(54),xl(163)}}function Oo(){Vl.startNonterminal(\"InsertExpr\",Pl),Sl(159),kl(129);switch(Hl){case 191:Sl(191);break;default:Sl(192)}kl(266),Nl(),Fo(),Nl(),Lo(),kl(266),Nl(),qo(),Vl.endNonterminal(\"InsertExpr\",Pl)}function Mo(){xl(159),kl(129);switch(Hl){case 191:xl(191);break;default:xl(192)}kl(266),Io(),Ao(),kl(266),Ro()}function _o(){Vl.startNonterminal(\"DeleteExpr\",Pl),Sl(110),kl(129);switch(Hl){case 191:Sl(191);break;default:Sl(192)}kl(266),Nl(),qo(),Vl.endNonterminal(\"DeleteExpr\",Pl)}function Do(){xl(110),kl(129);switch(Hl){case 191:xl(191);break;default:xl(192)}kl(266),Ro()}function Po(){Vl.startNonterminal(\"ReplaceExpr\",Pl),Sl(219),kl(130),Hl==261&&(Sl(261),kl(64),Sl(196)),kl(62),Sl(191),kl(266),Nl(),qo(),Sl(270),kl(266),Nl(),_f(),Vl.endNonterminal(\"ReplaceExpr\",Pl)}function Ho(){xl(219),kl(130),Hl==261&&(xl(261),kl(64),xl(196)),kl(62),xl(191),kl(266),Ro(),xl(270),kl(266),Df()}function Bo(){Vl.startNonterminal(\"RenameExpr\",Pl),Sl(218),kl(62),Sl(191),kl(266),Nl(),qo(),Sl(79),kl(266),Nl(),Uo(),Vl.endNonterminal(\"RenameExpr\",Pl)}function jo(){xl(218),kl(62),xl(191),kl(266),Ro(),xl(79),kl(266),zo()}function Fo(){Vl.startNonterminal(\"SourceExpr\",Pl),_f(),Vl.endNonterminal(\"SourceExpr\",Pl)}function Io(){Df()}function qo(){Vl.startNonterminal(\"TargetExpr\",Pl),_f(),Vl.endNonterminal(\"TargetExpr\",Pl)}function Ro(){Df()}function Uo(){Vl.startNonterminal(\"NewNameExpr\",Pl),_f(),Vl.endNonterminal(\"NewNameExpr\",Pl)}function zo(){Df()}function Wo(){Vl.startNonterminal(\"TransformExpr\",Pl),Sl(103),kl(21),Nl(),Vo();for(;;){if(Hl!=41)break;Sl(41),kl(21),Nl(),Vo()}Sl(181),kl(266),Nl(),_f(),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"TransformExpr\",Pl)}function Xo(){xl(103),kl(21),$o();for(;;){if(Hl!=41)break;xl(41),kl(21),$o()}xl(181),kl(266),Df(),xl(220),kl(266),Df()}function Vo(){Vl.startNonterminal(\"TransformSpec\",Pl),Sl(31),kl(254),Nl(),hi(),kl(27),Sl(52),kl(266),Nl(),_f(),Vl.endNonterminal(\"TransformSpec\",Pl)}function $o(){xl(31),kl(254),pi(),kl(27),xl(52),kl(266),Df()}function Jo(){Vl.startNonterminal(\"FTSelection\",Pl),Yo();for(;;){kl(211);switch(Hl){case 81:Ll(151);break;default:_l=Hl}if(_l!=115&&_l!=117&&_l!=127&&_l!=202&&_l!=223&&_l!=269&&_l!=64593&&_l!=121425)break;Nl(),Su()}Vl.endNonterminal(\"FTSelection\",Pl)}function Ko(){Zo();for(;;){kl(211);switch(Hl){case 81:Ll(151);break;default:_l=Hl}if(_l!=115&&_l!=117&&_l!=127&&_l!=202&&_l!=223&&_l!=269&&_l!=64593&&_l!=121425)break;xu()}}function Qo(){Vl.startNonterminal(\"FTWeight\",Pl),Sl(264),kl(87),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"FTWeight\",Pl)}function Go(){xl(264),kl(87),xl(276),kl(266),Y(),xl(282)}function Yo(){Vl.startNonterminal(\"FTOr\",Pl),eu();for(;;){if(Hl!=144)break;Sl(144),kl(162),Nl(),eu()}Vl.endNonterminal(\"FTOr\",Pl)}function Zo(){tu();for(;;){if(Hl!=144)break;xl(144),kl(162),tu()}}function eu(){Vl.startNonterminal(\"FTAnd\",Pl),nu();for(;;){if(Hl!=142)break;Sl(142),kl(162),Nl(),nu()}Vl.endNonterminal(\"FTAnd\",Pl)}function tu(){ru();for(;;){if(Hl!=142)break;xl(142),kl(162),ru()}}function nu(){Vl.startNonterminal(\"FTMildNot\",Pl),iu();for(;;){kl(212);if(Hl!=193)break;Sl(193),kl(53),Sl(154),kl(162),Nl(),iu()}Vl.endNonterminal(\"FTMildNot\",Pl)}function ru(){su();for(;;){kl(212);if(Hl!=193)break;xl(193),kl(53),xl(154),kl(162),su()}}function iu(){Vl.startNonterminal(\"FTUnaryNot\",Pl),Hl==143&&Sl(143),kl(155),Nl(),ou(),Vl.endNonterminal(\"FTUnaryNot\",Pl)}function su(){Hl==143&&xl(143),kl(155),uu()}function ou(){Vl.startNonterminal(\"FTPrimaryWithOptions\",Pl),au(),kl(214),Hl==259&&(Nl(),Fu()),Hl==264&&(Nl(),Qo()),Vl.endNonterminal(\"FTPrimaryWithOptions\",Pl)}function uu(){fu(),kl(214),Hl==259&&Iu(),Hl==264&&Go()}function au(){Vl.startNonterminal(\"FTPrimary\",Pl);switch(Hl){case 34:Sl(34),kl(162),Nl(),Jo(),Sl(37);break;case 35:du();break;default:lu(),kl(215),Hl==195&&(Nl(),yu())}Vl.endNonterminal(\"FTPrimary\",Pl)}function fu(){switch(Hl){case 34:xl(34),kl(162),Ko(),xl(37);break;case 35:vu();break;default:cu(),kl(215),Hl==195&&bu()}}function lu(){Vl.startNonterminal(\"FTWords\",Pl),hu(),kl(221);if(Hl==71||Hl==76||Hl==210)Nl(),mu();Vl.endNonterminal(\"FTWords\",Pl)}function cu(){pu(),kl(221),(Hl==71||Hl==76||Hl==210)&&gu()}function hu(){Vl.startNonterminal(\"FTWordsValue\",Pl);switch(Hl){case 11:Sl(11);break;default:Sl(276),kl(266),Nl(),G(),Sl(282)}Vl.endNonterminal(\"FTWordsValue\",Pl)}function pu(){switch(Hl){case 11:xl(11);break;default:xl(276),kl(266),Y(),xl(282)}}function du(){Vl.startNonterminal(\"FTExtensionSelection\",Pl);for(;;){Nl(),Cr(),kl(100);if(Hl!=35)break}Sl(276),kl(166),Hl!=282&&(Nl(),Jo()),Sl(282),Vl.endNonterminal(\"FTExtensionSelection\",Pl)}function vu(){for(;;){kr(),kl(100);if(Hl!=35)break}xl(276),kl(166),Hl!=282&&Ko(),xl(282)}function mu(){Vl.startNonterminal(\"FTAnyallOption\",Pl);switch(Hl){case 76:Sl(76),kl(218),Hl==272&&Sl(272);break;case 71:Sl(71),kl(219),Hl==273&&Sl(273);break;default:Sl(210)}Vl.endNonterminal(\"FTAnyallOption\",Pl)}function gu(){switch(Hl){case 76:xl(76),kl(218),Hl==272&&xl(272);break;case 71:xl(71),kl(219),Hl==273&&xl(273);break;default:xl(210)}}function yu(){Vl.startNonterminal(\"FTTimes\",Pl),Sl(195),kl(149),Nl(),wu(),Sl(247),Vl.endNonterminal(\"FTTimes\",Pl)}function bu(){xl(195),kl(149),Eu(),xl(247)}function wu(){Vl.startNonterminal(\"FTRange\",Pl);switch(Hl){case 130:Sl(130),kl(266),Nl(),Vn();break;case 81:Sl(81),kl(125);switch(Hl){case 173:Sl(173),kl(266),Nl(),Vn();break;default:Sl(183),kl(266),Nl(),Vn()}break;default:Sl(140),kl(266),Nl(),Vn(),Sl(248),kl(266),Nl(),Vn()}Vl.endNonterminal(\"FTRange\",Pl)}function Eu(){switch(Hl){case 130:xl(130),kl(266),$n();break;case 81:xl(81),kl(125);switch(Hl){case 173:xl(173),kl(266),$n();break;default:xl(183),kl(266),$n()}break;default:xl(140),kl(266),$n(),xl(248),kl(266),$n()}}function Su(){Vl.startNonterminal(\"FTPosFilter\",Pl);switch(Hl){case 202:Tu();break;case 269:Cu();break;case 117:Lu();break;case 115:case 223:_u();break;default:Bu()}Vl.endNonterminal(\"FTPosFilter\",Pl)}function xu(){switch(Hl){case 202:Nu();break;case 269:ku();break;case 117:Au();break;case 115:case 223:Du();break;default:ju()}}function Tu(){Vl.startNonterminal(\"FTOrder\",Pl),Sl(202),Vl.endNonterminal(\"FTOrder\",Pl)}function Nu(){xl(202)}function Cu(){Vl.startNonterminal(\"FTWindow\",Pl),Sl(269),kl(266),Nl(),Vn(),Nl(),Ou(),Vl.endNonterminal(\"FTWindow\",Pl)}function ku(){xl(269),kl(266),$n(),Mu()}function Lu(){Vl.startNonterminal(\"FTDistance\",Pl),Sl(117),kl(149),Nl(),wu(),Nl(),Ou(),Vl.endNonterminal(\"FTDistance\",Pl)}function Au(){xl(117),kl(149),Eu(),Mu()}function Ou(){Vl.startNonterminal(\"FTUnit\",Pl);switch(Hl){case 273:Sl(273);break;case 232:Sl(232);break;default:Sl(205)}Vl.endNonterminal(\"FTUnit\",Pl)}function Mu(){switch(Hl){case 273:xl(273);break;case 232:xl(232);break;default:xl(205)}}function _u(){Vl.startNonterminal(\"FTScope\",Pl);switch(Hl){case 223:Sl(223);break;default:Sl(115)}kl(132),Nl(),Pu(),Vl.endNonterminal(\"FTScope\",Pl)}function Du(){switch(Hl){case 223:xl(223);break;default:xl(115)}kl(132),Hu()}function Pu(){Vl.startNonterminal(\"FTBigUnit\",Pl);switch(Hl){case 231:Sl(231);break;default:Sl(204)}Vl.endNonterminal(\"FTBigUnit\",Pl)}function Hu(){switch(Hl){case 231:xl(231);break;default:xl(204)}}function Bu(){Vl.startNonterminal(\"FTContent\",Pl);switch(Hl){case 81:Sl(81),kl(117);switch(Hl){case 237:Sl(237);break;default:Sl(126)}break;default:Sl(127),kl(42),Sl(100)}Vl.endNonterminal(\"FTContent\",Pl)}function ju(){switch(Hl){case 81:xl(81),kl(117);switch(Hl){case 237:xl(237);break;default:xl(126)}break;default:xl(127),kl(42),xl(100)}}function Fu(){Vl.startNonterminal(\"FTMatchOptions\",Pl);for(;;){Sl(259),kl(181),Nl(),qu(),kl(214);if(Hl!=259)break}Vl.endNonterminal(\"FTMatchOptions\",Pl)}function Iu(){for(;;){xl(259),kl(181),Ru(),kl(214);if(Hl!=259)break}}function qu(){Vl.startNonterminal(\"FTMatchOption\",Pl);switch(Hl){case 188:Ll(161);break;default:_l=Hl}switch(_l){case 169:oa();break;case 268:case 137404:aa();break;case 246:case 126140:Ju();break;case 238:case 122044:Vu();break;case 114:Wu();break;case 239:case 122556:ea();break;case 199:la();break;default:Uu()}Vl.endNonterminal(\"FTMatchOption\",Pl)}function Ru(){switch(Hl){case 188:Ll(161);break;default:_l=Hl}switch(_l){case 169:ua();break;case 268:case 137404:fa();break;case 246:case 126140:Ku();break;case 238:case 122044:$u();break;case 114:Xu();break;case 239:case 122556:ta();break;case 199:ca();break;default:zu()}}function Uu(){Vl.startNonterminal(\"FTCaseOption\",Pl);switch(Hl){case 88:Sl(88),kl(124);switch(Hl){case 158:Sl(158);break;default:Sl(230)}break;case 177:Sl(177);break;default:Sl(258)}Vl.endNonterminal(\"FTCaseOption\",Pl)}function zu(){switch(Hl){case 88:xl(88),kl(124);switch(Hl){case 158:xl(158);break;default:xl(230)}break;case 177:xl(177);break;default:xl(258)}}function Wu(){Vl.startNonterminal(\"FTDiacriticsOption\",Pl),Sl(114),kl(124);switch(Hl){case 158:Sl(158);break;default:Sl(230)}Vl.endNonterminal(\"FTDiacriticsOption\",Pl)}function Xu(){xl(114),kl(124);switch(Hl){case 158:xl(158);break;default:xl(230)}}function Vu(){Vl.startNonterminal(\"FTStemOption\",Pl);switch(Hl){case 238:Sl(238);break;default:Sl(188),kl(74),Sl(238)}Vl.endNonterminal(\"FTStemOption\",Pl)}function $u(){switch(Hl){case 238:xl(238);break;default:xl(188),kl(74),xl(238)}}function Ju(){Vl.startNonterminal(\"FTThesaurusOption\",Pl);switch(Hl){case 246:Sl(246),kl(142);switch(Hl){case 81:Nl(),Qu();break;case 109:Sl(109);break;default:Sl(34),kl(112);switch(Hl){case 81:Nl(),Qu();break;default:Sl(109)}for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(31),Nl(),Qu()}Sl(37)}break;default:Sl(188),kl(78),Sl(246)}Vl.endNonterminal(\"FTThesaurusOption\",Pl)}function Ku(){switch(Hl){case 246:xl(246),kl(142);switch(Hl){case 81:Gu();break;case 109:xl(109);break;default:xl(34),kl(112);switch(Hl){case 81:Gu();break;default:xl(109)}for(;;){kl(101);if(Hl!=41)break;xl(41),kl(31),Gu()}xl(37)}break;default:xl(188),kl(78),xl(246)}}function Qu(){Vl.startNonterminal(\"FTThesaurusID\",Pl),Sl(81),kl(15),Sl(7),kl(220),Hl==217&&(Sl(217),kl(17),Sl(11)),kl(216);switch(Hl){case 81:Ll(165);break;default:_l=Hl}if(_l==130||_l==140||_l==88657||_l==93777)Nl(),Yu(),kl(58),Sl(175);Vl.endNonterminal(\"FTThesaurusID\",Pl)}function Gu(){xl(81),kl(15),xl(7),kl(220),Hl==217&&(xl(217),kl(17),xl(11)),kl(216);switch(Hl){case 81:Ll(165);break;default:_l=Hl}if(_l==130||_l==140||_l==88657||_l==93777)Zu(),kl(58),xl(175)}function Yu(){Vl.startNonterminal(\"FTLiteralRange\",Pl);switch(Hl){case 130:Sl(130),kl(16),Sl(8);break;case 81:Sl(81),kl(125);switch(Hl){case 173:Sl(173),kl(16),Sl(8);break;default:Sl(183),kl(16),Sl(8)}break;default:Sl(140),kl(16),Sl(8),kl(79),Sl(248),kl(16),Sl(8)}Vl.endNonterminal(\"FTLiteralRange\",Pl)}function Zu(){switch(Hl){case 130:xl(130),kl(16),xl(8);break;case 81:xl(81),kl(125);switch(Hl){case 173:xl(173),kl(16),xl(8);break;default:xl(183),kl(16),xl(8)}break;default:xl(140),kl(16),xl(8),kl(79),xl(248),kl(16),xl(8)}}function ea(){Vl.startNonterminal(\"FTStopWordOption\",Pl);switch(Hl){case 239:Sl(239),kl(86),Sl(273),kl(142);switch(Hl){case 109:Sl(109);for(;;){kl(217);if(Hl!=131&&Hl!=254)break;Nl(),ia()}break;default:Nl(),na();for(;;){kl(217);if(Hl!=131&&Hl!=254)break;Nl(),ia()}}break;default:Sl(188),kl(75),Sl(239),kl(86),Sl(273)}Vl.endNonterminal(\"FTStopWordOption\",Pl)}function ta(){switch(Hl){case 239:xl(239),kl(86),xl(273),kl(142);switch(Hl){case 109:xl(109);for(;;){kl(217);if(Hl!=131&&Hl!=254)break;sa()}break;default:ra();for(;;){kl(217);if(Hl!=131&&Hl!=254)break;sa()}}break;default:xl(188),kl(75),xl(239),kl(86),xl(273)}}function na(){Vl.startNonterminal(\"FTStopWords\",Pl);switch(Hl){case 81:Sl(81),kl(15),Sl(7);break;default:Sl(34),kl(17),Sl(11);for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(17),Sl(11)}Sl(37)}Vl.endNonterminal(\"FTStopWords\",Pl)}function ra(){switch(Hl){case 81:xl(81),kl(15),xl(7);break;default:xl(34),kl(17),xl(11);for(;;){kl(101);if(Hl!=41)break;xl(41),kl(17),xl(11)}xl(37)}}function ia(){Vl.startNonterminal(\"FTStopWordsInclExcl\",Pl);switch(Hl){case 254:Sl(254);break;default:Sl(131)}kl(99),Nl(),na(),Vl.endNonterminal(\"FTStopWordsInclExcl\",Pl)}function sa(){switch(Hl){case 254:xl(254);break;default:xl(131)}kl(99),ra()}function oa(){Vl.startNonterminal(\"FTLanguageOption\",Pl),Sl(169),kl(17),Sl(11),Vl.endNonterminal(\"FTLanguageOption\",Pl)}function ua(){xl(169),kl(17),xl(11)}function aa(){Vl.startNonterminal(\"FTWildCardOption\",Pl);switch(Hl){case 268:Sl(268);break;default:Sl(188),kl(84),Sl(268)}Vl.endNonterminal(\"FTWildCardOption\",Pl)}function fa(){switch(Hl){case 268:xl(268);break;default:xl(188),kl(84),xl(268)}}function la(){Vl.startNonterminal(\"FTExtensionOption\",Pl),Sl(199),kl(254),Nl(),Ha(),kl(17),Sl(11),Vl.endNonterminal(\"FTExtensionOption\",Pl)}function ca(){xl(199),kl(254),Ba(),kl(17),xl(11)}function ha(){Vl.startNonterminal(\"FTIgnoreOption\",Pl),Sl(271),kl(42),Sl(100),kl(266),Nl(),Qn(),Vl.endNonterminal(\"FTIgnoreOption\",Pl)}function pa(){xl(271),kl(42),xl(100),kl(266),Gn()}function da(){Vl.startNonterminal(\"CollectionDecl\",Pl),Sl(95),kl(254),Nl(),Ha(),kl(107),Hl==79&&(Nl(),va()),Vl.endNonterminal(\"CollectionDecl\",Pl)}function va(){Vl.startNonterminal(\"CollectionTypeDecl\",Pl),Sl(79),kl(259),Nl(),ws(),kl(156),Hl!=53&&(Nl(),ys()),Vl.endNonterminal(\"CollectionTypeDecl\",Pl)}function ma(){Vl.startNonterminal(\"IndexName\",Pl),Ha(),Vl.endNonterminal(\"IndexName\",Pl)}function ga(){Vl.startNonterminal(\"IndexDomainExpr\",Pl),Lr(),Vl.endNonterminal(\"IndexDomainExpr\",Pl)}function ya(){Vl.startNonterminal(\"IndexKeySpec\",Pl),ba(),Hl==79&&(Nl(),wa()),kl(146),Hl==94&&(Nl(),Sa()),Vl.endNonterminal(\"IndexKeySpec\",Pl)}function ba(){Vl.startNonterminal(\"IndexKeyExpr\",Pl),Lr(),Vl.endNonterminal(\"IndexKeyExpr\",Pl)}function wa(){Vl.startNonterminal(\"IndexKeyTypeDecl\",Pl),Sl(79),kl(254),Nl(),Ea(),kl(169);if(Hl==39||Hl==40||Hl==64)Nl(),ys();Vl.endNonterminal(\"IndexKeyTypeDecl\",Pl)}function Ea(){Vl.startNonterminal(\"AtomicType\",Pl),Ha(),Vl.endNonterminal(\"AtomicType\",Pl)}function Sa(){Vl.startNonterminal(\"IndexKeyCollation\",Pl),Sl(94),kl(15),Sl(7),Vl.endNonterminal(\"IndexKeyCollation\",Pl)}function xa(){Vl.startNonterminal(\"IndexDecl\",Pl),Sl(155),kl(254),Nl(),ma(),kl(65),Sl(197),kl(63),Sl(192),kl(265),Nl(),ga(),Sl(87),kl(265),Nl(),ya();for(;;){kl(103);if(Hl!=41)break;Sl(41),kl(265),Nl(),ya()}Vl.endNonterminal(\"IndexDecl\",Pl)}function Ta(){Vl.startNonterminal(\"ICDecl\",Pl),Sl(161),kl(40),Sl(97),kl(254),Nl(),Ha(),kl(120);switch(Hl){case 197:Nl(),Na();break;default:Nl(),Aa()}Vl.endNonterminal(\"ICDecl\",Pl)}function Na(){Vl.startNonterminal(\"ICCollection\",Pl),Sl(197),kl(39),Sl(95),kl(254),Nl(),Ha(),kl(140);switch(Hl){case 31:Nl(),Ca();break;case 191:Nl(),ka();break;default:Nl(),La()}Vl.endNonterminal(\"ICCollection\",Pl)}function Ca(){Vl.startNonterminal(\"ICCollSequence\",Pl),li(),kl(37),Sl(92),kl(266),Nl(),_f(),Vl.endNonterminal(\"ICCollSequence\",Pl)}function ka(){Vl.startNonterminal(\"ICCollSequenceUnique\",Pl),Sl(191),kl(21),Nl(),li(),kl(37),Sl(92),kl(80),Sl(255),kl(57),Sl(168),kl(265),Nl(),Lr(),Vl.endNonterminal(\"ICCollSequenceUnique\",Pl)}function La(){Vl.startNonterminal(\"ICCollNode\",Pl),Sl(138),kl(62),Sl(191),kl(21),Nl(),li(),kl(37),Sl(92),kl(266),Nl(),_f(),Vl.endNonterminal(\"ICCollNode\",Pl)}function Aa(){Vl.startNonterminal(\"ICForeignKey\",Pl),Sl(139),kl(57),Sl(168),kl(51),Nl(),Oa(),Nl(),Ma(),Vl.endNonterminal(\"ICForeignKey\",Pl)}function Oa(){Vl.startNonterminal(\"ICForeignKeySource\",Pl),Sl(140),kl(39),Nl(),_a(),Vl.endNonterminal(\"ICForeignKeySource\",Pl)}function Ma(){Vl.startNonterminal(\"ICForeignKeyTarget\",Pl),Sl(248),kl(39),Nl(),_a(),Vl.endNonterminal(\"ICForeignKeyTarget\",Pl)}function _a(){Vl.startNonterminal(\"ICForeignKeyValues\",Pl),Sl(95),kl(254),Nl(),Ha(),kl(62),Sl(191),kl(21),Nl(),li(),kl(57),Sl(168),kl(265),Nl(),Lr(),Vl.endNonterminal(\"ICForeignKeyValues\",Pl)}function Da(){xl(36);for(;;){Al(89);if(Hl==50)break;switch(Hl){case 24:xl(24);break;default:Da()}}xl(50)}function Pa(){switch(Hl){case 22:xl(22);break;default:Da()}}function Ha(){Vl.startNonterminal(\"EQName\",Pl),Al(249);switch(Hl){case 82:Sl(82);break;case 96:Sl(96);break;case 120:Sl(120);break;case 121:Sl(121);break;case 124:Sl(124);break;case 145:Sl(145);break;case 152:Sl(152);break;case 165:Sl(165);break;case 185:Sl(185);break;case 191:Sl(191);break;case 216:Sl(216);break;case 226:Sl(226);break;case 227:Sl(227);break;case 243:Sl(243);break;case 244:Sl(244);break;case 253:Sl(253);break;case 78:Sl(78);break;case 167:Sl(167);break;case 242:Sl(242);break;default:ja()}Vl.endNonterminal(\"EQName\",Pl)}function Ba(){Al(249);switch(Hl){case 82:xl(82);break;case 96:xl(96);break;case 120:xl(120);break;case 121:xl(121);break;case 124:xl(124);break;case 145:xl(145);break;case 152:xl(152);break;case 165:xl(165);break;case 185:xl(185);break;case 191:xl(191);break;case 216:xl(216);break;case 226:xl(226);break;case 227:xl(227);break;case 243:xl(243);break;case 244:xl(244);break;case 253:xl(253);break;case 78:xl(78);break;case 167:xl(167);break;case 242:xl(242);break;default:Fa()}}function ja(){Vl.startNonterminal(\"FunctionName\",Pl);switch(Hl){case 6:Sl(6);break;case 70:Sl(70);break;case 73:Sl(73);break;case 74:Sl(74);break;case 75:Sl(75);break;case 79:Sl(79);break;case 80:Sl(80);break;case 84:Sl(84);break;case 88:Sl(88);break;case 89:Sl(89);break;case 90:Sl(90);break;case 93:Sl(93);break;case 94:Sl(94);break;case 103:Sl(103);break;case 105:Sl(105);break;case 108:Sl(108);break;case 109:Sl(109);break;case 110:Sl(110);break;case 111:Sl(111);break;case 112:Sl(112);break;case 113:Sl(113);break;case 118:Sl(118);break;case 119:Sl(119);break;case 122:Sl(122);break;case 123:Sl(123);break;case 126:Sl(126);break;case 128:Sl(128);break;case 129:Sl(129);break;case 131:Sl(131);break;case 134:Sl(134);break;case 135:Sl(135);break;case 136:Sl(136);break;case 137:Sl(137);break;case 146:Sl(146);break;case 148:Sl(148);break;case 150:Sl(150);break;case 151:Sl(151);break;case 153:Sl(153);break;case 159:Sl(159);break;case 160:Sl(160);break;case 162:Sl(162);break;case 163:Sl(163);break;case 164:Sl(164);break;case 170:Sl(170);break;case 172:Sl(172);break;case 174:Sl(174);break;case 178:Sl(178);break;case 180:Sl(180);break;case 181:Sl(181);break;case 182:Sl(182);break;case 184:Sl(184);break;case 186:Sl(186);break;case 198:Sl(198);break;case 200:Sl(200);break;case 201:Sl(201);break;case 202:Sl(202);break;case 206:Sl(206);break;case 212:Sl(212);break;case 213:Sl(213);break;case 218:Sl(218);break;case 219:Sl(219);break;case 220:Sl(220);break;case 224:Sl(224);break;case 229:Sl(229);break;case 235:Sl(235);break;case 236:Sl(236);break;case 237:Sl(237);break;case 248:Sl(248);break;case 249:Sl(249);break;case 250:Sl(250);break;case 254:Sl(254);break;case 256:Sl(256);break;case 260:Sl(260);break;case 266:Sl(266);break;case 270:Sl(270);break;case 274:Sl(274);break;case 72:Sl(72);break;case 81:Sl(81);break;case 83:Sl(83);break;case 85:Sl(85);break;case 86:Sl(86);break;case 91:Sl(91);break;case 98:Sl(98);break;case 101:Sl(101);break;case 102:Sl(102);break;case 104:Sl(104);break;case 106:Sl(106);break;case 125:Sl(125);break;case 132:Sl(132);break;case 133:Sl(133);break;case 141:Sl(141);break;case 154:Sl(154);break;case 155:Sl(155);break;case 161:Sl(161);break;case 171:Sl(171);break;case 192:Sl(192);break;case 199:Sl(199);break;case 203:Sl(203);break;case 222:Sl(222);break;case 225:Sl(225);break;case 228:Sl(228);break;case 234:Sl(234);break;case 240:Sl(240);break;case 251:Sl(251);break;case 252:Sl(252);break;case 257:Sl(257);break;case 261:Sl(261);break;case 262:Sl(262);break;case 263:Sl(263);break;case 267:Sl(267);break;case 97:Sl(97);break;case 176:Sl(176);break;case 221:Sl(221);break;case 77:Sl(77);break;case 166:Sl(166);break;default:Sl(194)}Vl.endNonterminal(\"FunctionName\",Pl)}function Fa(){switch(Hl){case 6:xl(6);break;case 70:xl(70);break;case 73:xl(73);break;case 74:xl(74);break;case 75:xl(75);break;case 79:xl(79);break;case 80:xl(80);break;case 84:xl(84);break;case 88:xl(88);break;case 89:xl(89);break;case 90:xl(90);break;case 93:xl(93);break;case 94:xl(94);break;case 103:xl(103);break;case 105:xl(105);break;case 108:xl(108);break;case 109:xl(109);break;case 110:xl(110);break;case 111:xl(111);break;case 112:xl(112);break;case 113:xl(113);break;case 118:xl(118);break;case 119:xl(119);break;case 122:xl(122);break;case 123:xl(123);break;case 126:xl(126);break;case 128:xl(128);break;case 129:xl(129);break;case 131:xl(131);break;case 134:xl(134);break;case 135:xl(135);break;case 136:xl(136);break;case 137:xl(137);break;case 146:xl(146);break;case 148:xl(148);break;case 150:xl(150);break;case 151:xl(151);break;case 153:xl(153);break;case 159:xl(159);break;case 160:xl(160);break;case 162:xl(162);break;case 163:xl(163);break;case 164:xl(164);break;case 170:xl(170);break;case 172:xl(172);break;case 174:xl(174);break;case 178:xl(178);break;case 180:xl(180);break;case 181:xl(181);break;case 182:xl(182);break;case 184:xl(184);break;case 186:xl(186);break;case 198:xl(198);break;case 200:xl(200);break;case 201:xl(201);break;case 202:xl(202);break;case 206:xl(206);break;case 212:xl(212);break;case 213:xl(213);break;case 218:xl(218);break;case 219:xl(219);break;case 220:xl(220);break;case 224:xl(224);break;case 229:xl(229);break;case 235:xl(235);break;case 236:xl(236);break;case 237:xl(237);break;case 248:xl(248);break;case 249:xl(249);break;case 250:xl(250);break;case 254:xl(254);break;case 256:xl(256);break;case 260:xl(260);break;case 266:xl(266);break;case 270:xl(270);break;case 274:xl(274);break;case 72:xl(72);break;case 81:xl(81);break;case 83:xl(83);break;case 85:xl(85);break;case 86:xl(86);break;case 91:xl(91);break;case 98:xl(98);break;case 101:xl(101);break;case 102:xl(102);break;case 104:xl(104);break;case 106:xl(106);break;case 125:xl(125);break;case 132:xl(132);break;case 133:xl(133);break;case 141:xl(141);break;case 154:xl(154);break;case 155:xl(155);break;case 161:xl(161);break;case 171:xl(171);break;case 192:xl(192);break;case 199:xl(199);break;case 203:xl(203);break;case 222:xl(222);break;case 225:xl(225);break;case 228:xl(228);break;case 234:xl(234);break;case 240:xl(240);break;case 251:xl(251);break;case 252:xl(252);break;case 257:xl(257);break;case 261:xl(261);break;case 262:xl(262);break;case 263:xl(263);break;case 267:xl(267);break;case 97:xl(97);break;case 176:xl(176);break;case 221:xl(221);break;case 77:xl(77);break;case 166:xl(166);break;default:xl(194)}}function Ia(){Vl.startNonterminal(\"NCName\",Pl);switch(Hl){case 19:Sl(19);break;case 70:Sl(70);break;case 75:Sl(75);break;case 79:Sl(79);break;case 80:Sl(80);break;case 84:Sl(84);break;case 88:Sl(88);break;case 89:Sl(89);break;case 90:Sl(90);break;case 94:Sl(94);break;case 105:Sl(105);break;case 109:Sl(109);break;case 113:Sl(113);break;case 118:Sl(118);break;case 122:Sl(122);break;case 123:Sl(123);break;case 126:Sl(126);break;case 128:Sl(128);break;case 131:Sl(131);break;case 137:Sl(137);break;case 146:Sl(146);break;case 148:Sl(148);break;case 150:Sl(150);break;case 151:Sl(151);break;case 160:Sl(160);break;case 162:Sl(162);break;case 163:Sl(163);break;case 164:Sl(164);break;case 172:Sl(172);break;case 174:Sl(174);break;case 178:Sl(178);break;case 180:Sl(180);break;case 181:Sl(181);break;case 186:Sl(186);break;case 198:Sl(198);break;case 200:Sl(200);break;case 201:Sl(201);break;case 220:Sl(220);break;case 224:Sl(224);break;case 236:Sl(236);break;case 237:Sl(237);break;case 248:Sl(248);break;case 249:Sl(249);break;case 254:Sl(254);break;case 266:Sl(266);break;case 270:Sl(270);break;case 73:Sl(73);break;case 74:Sl(74);break;case 82:Sl(82);break;case 93:Sl(93);break;case 96:Sl(96);break;case 103:Sl(103);break;case 108:Sl(108);break;case 110:Sl(110);break;case 111:Sl(111);break;case 112:Sl(112);break;case 119:Sl(119);break;case 120:Sl(120);break;case 121:Sl(121);break;case 124:Sl(124);break;case 129:Sl(129);break;case 134:Sl(134);break;case 135:Sl(135);break;case 136:Sl(136);break;case 145:Sl(145);break;case 152:Sl(152);break;case 153:Sl(153);break;case 159:Sl(159);break;case 165:Sl(165);break;case 170:Sl(170);break;case 182:Sl(182);break;case 184:Sl(184);break;case 185:Sl(185);break;case 191:Sl(191);break;case 202:Sl(202);break;case 206:Sl(206);break;case 212:Sl(212);break;case 213:Sl(213);break;case 216:Sl(216);break;case 218:Sl(218);break;case 219:Sl(219);break;case 226:Sl(226);break;case 227:Sl(227);break;case 229:Sl(229);break;case 235:Sl(235);break;case 243:Sl(243);break;case 244:Sl(244);break;case 250:Sl(250);break;case 253:Sl(253);break;case 256:Sl(256);break;case 260:Sl(260);break;case 262:Sl(262);break;case 274:Sl(274);break;case 72:Sl(72);break;case 81:Sl(81);break;case 83:Sl(83);break;case 85:Sl(85);break;case 86:Sl(86);break;case 91:Sl(91);break;case 98:Sl(98);break;case 101:Sl(101);break;case 102:Sl(102);break;case 104:Sl(104);break;case 106:Sl(106);break;case 125:Sl(125);break;case 132:Sl(132);break;case 133:Sl(133);break;case 141:Sl(141);break;case 154:Sl(154);break;case 155:Sl(155);break;case 161:Sl(161);break;case 171:Sl(171);break;case 192:Sl(192);break;case 199:Sl(199);break;case 203:Sl(203);break;case 222:Sl(222);break;case 225:Sl(225);break;case 228:Sl(228);break;case 234:Sl(234);break;case 240:Sl(240);break;case 251:Sl(251);break;case 252:Sl(252);break;case 257:Sl(257);break;case 261:Sl(261);break;case 263:Sl(263);break;case 267:Sl(267);break;case 97:Sl(97);break;case 176:Sl(176);break;case 221:Sl(221);break;case 77:Sl(77);break;case 166:Sl(166);break;default:Sl(194)}Vl.endNonterminal(\"NCName\",Pl)}function qa(){switch(Hl){case 19:xl(19);break;case 70:xl(70);break;case 75:xl(75);break;case 79:xl(79);break;case 80:xl(80);break;case 84:xl(84);break;case 88:xl(88);break;case 89:xl(89);break;case 90:xl(90);break;case 94:xl(94);break;case 105:xl(105);break;case 109:xl(109);break;case 113:xl(113);break;case 118:xl(118);break;case 122:xl(122);break;case 123:xl(123);break;case 126:xl(126);break;case 128:xl(128);break;case 131:xl(131);break;case 137:xl(137);break;case 146:xl(146);break;case 148:xl(148);break;case 150:xl(150);break;case 151:xl(151);break;case 160:xl(160);break;case 162:xl(162);break;case 163:xl(163);break;case 164:xl(164);break;case 172:xl(172);break;case 174:xl(174);break;case 178:xl(178);break;case 180:xl(180);break;case 181:xl(181);break;case 186:xl(186);break;case 198:xl(198);break;case 200:xl(200);break;case 201:xl(201);break;case 220:xl(220);break;case 224:xl(224);break;case 236:xl(236);break;case 237:xl(237);break;case 248:xl(248);break;case 249:xl(249);break;case 254:xl(254);break;case 266:xl(266);break;case 270:xl(270);break;case 73:xl(73);break;case 74:xl(74);break;case 82:xl(82);break;case 93:xl(93);break;case 96:xl(96);break;case 103:xl(103);break;case 108:xl(108);break;case 110:xl(110);break;case 111:xl(111);break;case 112:xl(112);break;case 119:xl(119);break;case 120:xl(120);break;case 121:xl(121);break;case 124:xl(124);break;case 129:xl(129);break;case 134:xl(134);break;case 135:xl(135);break;case 136:xl(136);break;case 145:xl(145);break;case 152:xl(152);break;case 153:xl(153);break;case 159:xl(159);break;case 165:xl(165);break;case 170:xl(170);break;case 182:xl(182);break;case 184:xl(184);break;case 185:xl(185);break;case 191:xl(191);break;case 202:xl(202);break;case 206:xl(206);break;case 212:xl(212);break;case 213:xl(213);break;case 216:xl(216);break;case 218:xl(218);break;case 219:xl(219);break;case 226:xl(226);break;case 227:xl(227);break;case 229:xl(229);break;case 235:xl(235);break;case 243:xl(243);break;case 244:xl(244);break;case 250:xl(250);break;case 253:xl(253);break;case 256:xl(256);break;case 260:xl(260);break;case 262:xl(262);break;case 274:xl(274);break;case 72:xl(72);break;case 81:xl(81);break;case 83:xl(83);break;case 85:xl(85);break;case 86:xl(86);break;case 91:xl(91);break;case 98:xl(98);break;case 101:xl(101);break;case 102:xl(102);break;case 104:xl(104);break;case 106:xl(106);break;case 125:xl(125);break;case 132:xl(132);break;case 133:xl(133);break;case 141:xl(141);break;case 154:xl(154);break;case 155:xl(155);break;case 161:xl(161);break;case 171:xl(171);break;case 192:xl(192);break;case 199:xl(199);break;case 203:xl(203);break;case 222:xl(222);break;case 225:xl(225);break;case 228:xl(228);break;case 234:xl(234);break;case 240:xl(240);break;case 251:xl(251);break;case 252:xl(252);break;case 257:xl(257);break;case 261:xl(261);break;case 263:xl(263);break;case 267:xl(267);break;case 97:xl(97);break;case 176:xl(176);break;case 221:xl(221);break;case 77:xl(77);break;case 166:xl(166);break;default:xl(194)}}function Ra(){Vl.startNonterminal(\"MainModule\",Pl),l(),Nl(),Ua(),Vl.endNonterminal(\"MainModule\",Pl)}function Ua(){Vl.startNonterminal(\"Program\",Pl),$a(),Vl.endNonterminal(\"Program\",Pl)}function za(){Vl.startNonterminal(\"Statements\",Pl);for(;;){kl(277);switch(Hl){case 34:Ll(268);break;case 35:Ol(251);break;case 46:Ll(283);break;case 47:Ll(264);break;case 54:Ol(4);break;case 55:Ol(1);break;case 59:Ol(3);break;case 66:Ll(256);break;case 68:Ll(271);break;case 77:Ll(199);break;case 82:Ll(280);break;case 121:Ll(279);break;case 132:Ll(202);break;case 137:Ll(207);break;case 174:Ll(204);break;case 218:Ll(205);break;case 219:Ll(206);break;case 260:Ll(209);break;case 276:Ll(276);break;case 278:Ll(272);break;case 5:case 45:Ll(185);break;case 31:case 32:Ll(254);break;case 40:case 42:Ll(266);break;case 86:case 102:Ll(200);break;case 110:case 159:Ll(208);break;case 184:case 216:Ll(267);break;case 103:case 129:case 235:case 262:Ll(196);break;case 8:case 9:case 10:case 11:case 44:Ll(191);break;case 78:case 124:case 165:case 167:case 242:Ll(190);break;case 96:case 119:case 202:case 244:case 250:case 256:Ll(203);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(197);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 104:case 105:case 106:case 108:case 109:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 131:case 133:case 134:case 141:case 145:case 146:case 148:case 150:case 151:case 152:case 153:case 154:case 155:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 236:case 237:case 240:case 243:case 248:case 249:case 251:case 252:case 253:case 254:case 257:case 261:case 263:case 266:case 267:case 270:case 274:Ll(194);break;default:_l=Hl}if(_l!=25&&_l!=53&&_l!=282&&_l!=12805&&_l!=12806&&_l!=12808&&_l!=12809&&_l!=12810&&_l!=12811&&_l!=12844&&_l!=12845&&_l!=12846&&_l!=12870&&_l!=12872&&_l!=12873&&_l!=12874&&_l!=12875&&_l!=12877&&_l!=12878&&_l!=12879&&_l!=12880&&_l!=12881&&_l!=12882&&_l!=12883&&_l!=12884&&_l!=12885&&_l!=12886&&_l!=12888&&_l!=12889&&_l!=12890&&_l!=12891&&_l!=12893&&_l!=12894&&_l!=12896&&_l!=12897&&_l!=12898&&_l!=12901&&_l!=12902&&_l!=12903&&_l!=12904&&_l!=12905&&_l!=12906&&_l!=12908&&_l!=12909&&_l!=12910&&_l!=12911&&_l!=12912&&_l!=12913&&_l!=12918&&_l!=12919&&_l!=12920&&_l!=12921&&_l!=12922&&_l!=12923&&_l!=12924&&_l!=12925&&_l!=12926&&_l!=12928&&_l!=12929&&_l!=12931&&_l!=12932&&_l!=12933&&_l!=12934&&_l!=12935&&_l!=12936&&_l!=12937&&_l!=12941&&_l!=12945&&_l!=12946&&_l!=12948&&_l!=12950&&_l!=12951&&_l!=12952&&_l!=12953&&_l!=12954&&_l!=12955&&_l!=12959&&_l!=12960&&_l!=12961&&_l!=12962&&_l!=12963&&_l!=12964&&_l!=12965&&_l!=12966&&_l!=12967&&_l!=12970&&_l!=12971&&_l!=12972&&_l!=12974&&_l!=12976&&_l!=12978&&_l!=12980&&_l!=12981&&_l!=12982&&_l!=12984&&_l!=12985&&_l!=12986&&_l!=12991&&_l!=12992&&_l!=12994&&_l!=12998&&_l!=12999&&_l!=13e3&&_l!=13001&&_l!=13002&&_l!=13003&&_l!=13006&&_l!=13012&&_l!=13013&&_l!=13016&&_l!=13018&&_l!=13019&&_l!=13020&&_l!=13021&&_l!=13022&&_l!=13024&&_l!=13025&&_l!=13026&&_l!=13027&&_l!=13028&&_l!=13029&&_l!=13034&&_l!=13035&&_l!=13036&&_l!=13037&&_l!=13040&&_l!=13042&&_l!=13043&&_l!=13044&&_l!=13048&&_l!=13049&&_l!=13050&&_l!=13051&&_l!=13052&&_l!=13053&&_l!=13054&&_l!=13056&&_l!=13057&&_l!=13060&&_l!=13061&&_l!=13062&&_l!=13063&&_l!=13066&&_l!=13067&&_l!=13070&&_l!=13074&&_l!=16134&&_l!=20997&&_l!=20998&&_l!=21e3&&_l!=21001&&_l!=21002&&_l!=21003&&_l!=21036&&_l!=21037&&_l!=21038&&_l!=21062&&_l!=21064&&_l!=21065&&_l!=21066&&_l!=21067&&_l!=21069&&_l!=21070&&_l!=21071&&_l!=21072&&_l!=21073&&_l!=21074&&_l!=21075&&_l!=21076&&_l!=21077&&_l!=21078&&_l!=21080&&_l!=21081&&_l!=21082&&_l!=21083&&_l!=21085&&_l!=21086&&_l!=21088&&_l!=21089&&_l!=21090&&_l!=21093&&_l!=21094&&_l!=21095&&_l!=21096&&_l!=21097&&_l!=21098&&_l!=21100&&_l!=21101&&_l!=21102&&_l!=21103&&_l!=21104&&_l!=21105&&_l!=21110&&_l!=21111&&_l!=21112&&_l!=21113&&_l!=21114&&_l!=21115&&_l!=21116&&_l!=21117&&_l!=21118&&_l!=21120&&_l!=21121&&_l!=21123&&_l!=21124&&_l!=21125&&_l!=21126&&_l!=21127&&_l!=21128&&_l!=21129&&_l!=21133&&_l!=21137&&_l!=21138&&_l!=21140&&_l!=21142&&_l!=21143&&_l!=21144&&_l!=21145&&_l!=21146&&_l!=21147&&_l!=21151&&_l!=21152&&_l!=21153&&_l!=21154&&_l!=21155&&_l!=21156&&_l!=21157&&_l!=21158&&_l!=21159&&_l!=21162&&_l!=21163&&_l!=21164&&_l!=21166&&_l!=21168&&_l!=21170&&_l!=21172&&_l!=21173&&_l!=21174&&_l!=21176&&_l!=21177&&_l!=21178&&_l!=21183&&_l!=21184&&_l!=21186&&_l!=21190&&_l!=21191&&_l!=21192&&_l!=21193&&_l!=21194&&_l!=21195&&_l!=21198&&_l!=21204&&_l!=21205&&_l!=21208&&_l!=21210&&_l!=21211&&_l!=21212&&_l!=21213&&_l!=21214&&_l!=21216&&_l!=21217&&_l!=21218&&_l!=21219&&_l!=21220&&_l!=21221&&_l!=21226&&_l!=21227&&_l!=21228&&_l!=21229&&_l!=21232&&_l!=21234&&_l!=21235&&_l!=21236&&_l!=21240&&_l!=21241&&_l!=21242&&_l!=21243&&_l!=21244&&_l!=21245&&_l!=21246&&_l!=21248&&_l!=21249&&_l!=21252&&_l!=21253&&_l!=21254&&_l!=21255&&_l!=21258&&_l!=21259&&_l!=21262&&_l!=21266&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284&&_l!=144389&&_l!=144390&&_l!=144392&&_l!=144393&&_l!=144394&&_l!=144395&&_l!=144428&&_l!=144429&&_l!=144430&&_l!=144454&&_l!=144456&&_l!=144457&&_l!=144458&&_l!=144459&&_l!=144461&&_l!=144462&&_l!=144463&&_l!=144464&&_l!=144465&&_l!=144466&&_l!=144467&&_l!=144468&&_l!=144469&&_l!=144470&&_l!=144472&&_l!=144473&&_l!=144474&&_l!=144475&&_l!=144477&&_l!=144478&&_l!=144480&&_l!=144481&&_l!=144482&&_l!=144485&&_l!=144486&&_l!=144487&&_l!=144488&&_l!=144489&&_l!=144490&&_l!=144492&&_l!=144493&&_l!=144494&&_l!=144495&&_l!=144496&&_l!=144497&&_l!=144502&&_l!=144503&&_l!=144504&&_l!=144505&&_l!=144506&&_l!=144507&&_l!=144508&&_l!=144509&&_l!=144510&&_l!=144512&&_l!=144513&&_l!=144515&&_l!=144516&&_l!=144517&&_l!=144518&&_l!=144519&&_l!=144520&&_l!=144521&&_l!=144525&&_l!=144529&&_l!=144530&&_l!=144532&&_l!=144534&&_l!=144535&&_l!=144536&&_l!=144537&&_l!=144538&&_l!=144539&&_l!=144543&&_l!=144544&&_l!=144545&&_l!=144546&&_l!=144547&&_l!=144548&&_l!=144549&&_l!=144550&&_l!=144551&&_l!=144554&&_l!=144555&&_l!=144556&&_l!=144558&&_l!=144560&&_l!=144562&&_l!=144564&&_l!=144565&&_l!=144566&&_l!=144568&&_l!=144569&&_l!=144570&&_l!=144575&&_l!=144576&&_l!=144578&&_l!=144582&&_l!=144583&&_l!=144584&&_l!=144585&&_l!=144586&&_l!=144587&&_l!=144590&&_l!=144596&&_l!=144597&&_l!=144600&&_l!=144602&&_l!=144603&&_l!=144604&&_l!=144605&&_l!=144606&&_l!=144608&&_l!=144609&&_l!=144610&&_l!=144611&&_l!=144612&&_l!=144613&&_l!=144618&&_l!=144619&&_l!=144620&&_l!=144621&&_l!=144624&&_l!=144626&&_l!=144627&&_l!=144628&&_l!=144632&&_l!=144633&&_l!=144634&&_l!=144635&&_l!=144636&&_l!=144637&&_l!=144638&&_l!=144640&&_l!=144641&&_l!=144644&&_l!=144645&&_l!=144646&&_l!=144647&&_l!=144650&&_l!=144651&&_l!=144654&&_l!=144658){_l=Kl(6,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Qa(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(6,Pl,_l)}}if(_l!=-1&&_l!=53&&_l!=16134&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284)break;Nl(),Ka()}Vl.endNonterminal(\"Statements\",Pl)}function Wa(){for(;;){kl(277);switch(Hl){case 34:Ll(268);break;case 35:Ol(251);break;case 46:Ll(283);break;case 47:Ll(264);break;case 54:Ol(4);break;case 55:Ol(1);break;case 59:Ol(3);break;case 66:Ll(256);break;case 68:Ll(271);break;case 77:Ll(199);break;case 82:Ll(280);break;case 121:Ll(279);break;case 132:Ll(202);break;case 137:Ll(207);break;case 174:Ll(204);break;case 218:Ll(205);break;case 219:Ll(206);break;case 260:Ll(209);break;case 276:Ll(276);break;case 278:Ll(272);break;case 5:case 45:Ll(185);break;case 31:case 32:Ll(254);break;case 40:case 42:Ll(266);break;case 86:case 102:Ll(200);break;case 110:case 159:Ll(208);break;case 184:case 216:Ll(267);break;case 103:case 129:case 235:case 262:Ll(196);break;case 8:case 9:case 10:case 11:case 44:Ll(191);break;case 78:case 124:case 165:case 167:case 242:Ll(190);break;case 96:case 119:case 202:case 244:case 250:case 256:Ll(203);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(197);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 104:case 105:case 106:case 108:case 109:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 131:case 133:case 134:case 141:case 145:case 146:case 148:case 150:case 151:case 152:case 153:case 154:case 155:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 236:case 237:case 240:case 243:case 248:case 249:case 251:case 252:case 253:case 254:case 257:case 261:case 263:case 266:case 267:case 270:case 274:Ll(194);break;default:_l=Hl}if(_l!=25&&_l!=53&&_l!=282&&_l!=12805&&_l!=12806&&_l!=12808&&_l!=12809&&_l!=12810&&_l!=12811&&_l!=12844&&_l!=12845&&_l!=12846&&_l!=12870&&_l!=12872&&_l!=12873&&_l!=12874&&_l!=12875&&_l!=12877&&_l!=12878&&_l!=12879&&_l!=12880&&_l!=12881&&_l!=12882&&_l!=12883&&_l!=12884&&_l!=12885&&_l!=12886&&_l!=12888&&_l!=12889&&_l!=12890&&_l!=12891&&_l!=12893&&_l!=12894&&_l!=12896&&_l!=12897&&_l!=12898&&_l!=12901&&_l!=12902&&_l!=12903&&_l!=12904&&_l!=12905&&_l!=12906&&_l!=12908&&_l!=12909&&_l!=12910&&_l!=12911&&_l!=12912&&_l!=12913&&_l!=12918&&_l!=12919&&_l!=12920&&_l!=12921&&_l!=12922&&_l!=12923&&_l!=12924&&_l!=12925&&_l!=12926&&_l!=12928&&_l!=12929&&_l!=12931&&_l!=12932&&_l!=12933&&_l!=12934&&_l!=12935&&_l!=12936&&_l!=12937&&_l!=12941&&_l!=12945&&_l!=12946&&_l!=12948&&_l!=12950&&_l!=12951&&_l!=12952&&_l!=12953&&_l!=12954&&_l!=12955&&_l!=12959&&_l!=12960&&_l!=12961&&_l!=12962&&_l!=12963&&_l!=12964&&_l!=12965&&_l!=12966&&_l!=12967&&_l!=12970&&_l!=12971&&_l!=12972&&_l!=12974&&_l!=12976&&_l!=12978&&_l!=12980&&_l!=12981&&_l!=12982&&_l!=12984&&_l!=12985&&_l!=12986&&_l!=12991&&_l!=12992&&_l!=12994&&_l!=12998&&_l!=12999&&_l!=13e3&&_l!=13001&&_l!=13002&&_l!=13003&&_l!=13006&&_l!=13012&&_l!=13013&&_l!=13016&&_l!=13018&&_l!=13019&&_l!=13020&&_l!=13021&&_l!=13022&&_l!=13024&&_l!=13025&&_l!=13026&&_l!=13027&&_l!=13028&&_l!=13029&&_l!=13034&&_l!=13035&&_l!=13036&&_l!=13037&&_l!=13040&&_l!=13042&&_l!=13043&&_l!=13044&&_l!=13048&&_l!=13049&&_l!=13050&&_l!=13051&&_l!=13052&&_l!=13053&&_l!=13054&&_l!=13056&&_l!=13057&&_l!=13060&&_l!=13061&&_l!=13062&&_l!=13063&&_l!=13066&&_l!=13067&&_l!=13070&&_l!=13074&&_l!=16134&&_l!=20997&&_l!=20998&&_l!=21e3&&_l!=21001&&_l!=21002&&_l!=21003&&_l!=21036&&_l!=21037&&_l!=21038&&_l!=21062&&_l!=21064&&_l!=21065&&_l!=21066&&_l!=21067&&_l!=21069&&_l!=21070&&_l!=21071&&_l!=21072&&_l!=21073&&_l!=21074&&_l!=21075&&_l!=21076&&_l!=21077&&_l!=21078&&_l!=21080&&_l!=21081&&_l!=21082&&_l!=21083&&_l!=21085&&_l!=21086&&_l!=21088&&_l!=21089&&_l!=21090&&_l!=21093&&_l!=21094&&_l!=21095&&_l!=21096&&_l!=21097&&_l!=21098&&_l!=21100&&_l!=21101&&_l!=21102&&_l!=21103&&_l!=21104&&_l!=21105&&_l!=21110&&_l!=21111&&_l!=21112&&_l!=21113&&_l!=21114&&_l!=21115&&_l!=21116&&_l!=21117&&_l!=21118&&_l!=21120&&_l!=21121&&_l!=21123&&_l!=21124&&_l!=21125&&_l!=21126&&_l!=21127&&_l!=21128&&_l!=21129&&_l!=21133&&_l!=21137&&_l!=21138&&_l!=21140&&_l!=21142&&_l!=21143&&_l!=21144&&_l!=21145&&_l!=21146&&_l!=21147&&_l!=21151&&_l!=21152&&_l!=21153&&_l!=21154&&_l!=21155&&_l!=21156&&_l!=21157&&_l!=21158&&_l!=21159&&_l!=21162&&_l!=21163&&_l!=21164&&_l!=21166&&_l!=21168&&_l!=21170&&_l!=21172&&_l!=21173&&_l!=21174&&_l!=21176&&_l!=21177&&_l!=21178&&_l!=21183&&_l!=21184&&_l!=21186&&_l!=21190&&_l!=21191&&_l!=21192&&_l!=21193&&_l!=21194&&_l!=21195&&_l!=21198&&_l!=21204&&_l!=21205&&_l!=21208&&_l!=21210&&_l!=21211&&_l!=21212&&_l!=21213&&_l!=21214&&_l!=21216&&_l!=21217&&_l!=21218&&_l!=21219&&_l!=21220&&_l!=21221&&_l!=21226&&_l!=21227&&_l!=21228&&_l!=21229&&_l!=21232&&_l!=21234&&_l!=21235&&_l!=21236&&_l!=21240&&_l!=21241&&_l!=21242&&_l!=21243&&_l!=21244&&_l!=21245&&_l!=21246&&_l!=21248&&_l!=21249&&_l!=21252&&_l!=21253&&_l!=21254&&_l!=21255&&_l!=21258&&_l!=21259&&_l!=21262&&_l!=21266&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284&&_l!=144389&&_l!=144390&&_l!=144392&&_l!=144393&&_l!=144394&&_l!=144395&&_l!=144428&&_l!=144429&&_l!=144430&&_l!=144454&&_l!=144456&&_l!=144457&&_l!=144458&&_l!=144459&&_l!=144461&&_l!=144462&&_l!=144463&&_l!=144464&&_l!=144465&&_l!=144466&&_l!=144467&&_l!=144468&&_l!=144469&&_l!=144470&&_l!=144472&&_l!=144473&&_l!=144474&&_l!=144475&&_l!=144477&&_l!=144478&&_l!=144480&&_l!=144481&&_l!=144482&&_l!=144485&&_l!=144486&&_l!=144487&&_l!=144488&&_l!=144489&&_l!=144490&&_l!=144492&&_l!=144493&&_l!=144494&&_l!=144495&&_l!=144496&&_l!=144497&&_l!=144502&&_l!=144503&&_l!=144504&&_l!=144505&&_l!=144506&&_l!=144507&&_l!=144508&&_l!=144509&&_l!=144510&&_l!=144512&&_l!=144513&&_l!=144515&&_l!=144516&&_l!=144517&&_l!=144518&&_l!=144519&&_l!=144520&&_l!=144521&&_l!=144525&&_l!=144529&&_l!=144530&&_l!=144532&&_l!=144534&&_l!=144535&&_l!=144536&&_l!=144537&&_l!=144538&&_l!=144539&&_l!=144543&&_l!=144544&&_l!=144545&&_l!=144546&&_l!=144547&&_l!=144548&&_l!=144549&&_l!=144550&&_l!=144551&&_l!=144554&&_l!=144555&&_l!=144556&&_l!=144558&&_l!=144560&&_l!=144562&&_l!=144564&&_l!=144565&&_l!=144566&&_l!=144568&&_l!=144569&&_l!=144570&&_l!=144575&&_l!=144576&&_l!=144578&&_l!=144582&&_l!=144583&&_l!=144584&&_l!=144585&&_l!=144586&&_l!=144587&&_l!=144590&&_l!=144596&&_l!=144597&&_l!=144600&&_l!=144602&&_l!=144603&&_l!=144604&&_l!=144605&&_l!=144606&&_l!=144608&&_l!=144609&&_l!=144610&&_l!=144611&&_l!=144612&&_l!=144613&&_l!=144618&&_l!=144619&&_l!=144620&&_l!=144621&&_l!=144624&&_l!=144626&&_l!=144627&&_l!=144628&&_l!=144632&&_l!=144633&&_l!=144634&&_l!=144635&&_l!=144636&&_l!=144637&&_l!=144638&&_l!=144640&&_l!=144641&&_l!=144644&&_l!=144645&&_l!=144646&&_l!=144647&&_l!=144650&&_l!=144651&&_l!=144654&&_l!=144658){_l=Kl(6,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Qa(),Jl(6,t,-1);continue}catch(a){Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(6,t,-2);break}}}if(_l!=-1&&_l!=53&&_l!=16134&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284)break;Qa()}}function Xa(){Vl.startNonterminal(\"StatementsAndExpr\",Pl),za(),Nl(),G(),Vl.endNonterminal(\"StatementsAndExpr\",Pl)}function Va(){Wa(),Y()}function $a(){Vl.startNonterminal(\"StatementsAndOptionalExpr\",Pl),za(),Hl!=25&&Hl!=282&&(Nl(),G()),Vl.endNonterminal(\"StatementsAndOptionalExpr\",Pl)}function Ja(){Wa(),Hl!=25&&Hl!=282&&Y()}function Ka(){Vl.startNonterminal(\"Statement\",Pl);switch(Hl){case 132:Ll(188);break;case 137:Ll(195);break;case 174:Ll(192);break;case 250:Ll(189);break;case 262:Ll(186);break;case 276:Ll(276);break;case 31:case 32:Ll(254);break;case 86:case 102:Ll(187);break;case 152:case 243:case 253:case 267:Ll(184);break;default:_l=Hl}if(_l==2836||_l==3103||_l==3104||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17675||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27412||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==35871||_l==35872||_l==36116||_l==36895||_l==36896||_l==37140||_l==37407||_l==37408||_l==37652||_l==37919||_l==37920||_l==38164||_l==38431||_l==38432||_l==38676||_l==39455||_l==39456||_l==39700||_l==39967||_l==39968||_l==40212||_l==40479||_l==40480||_l==40724||_l==40991||_l==40992||_l==41236||_l==41503||_l==41504||_l==41748||_l==42015||_l==42016||_l==42260||_l==42527||_l==42528||_l==42772||_l==43039||_l==43040||_l==43284||_l==43551||_l==43552||_l==43796||_l==44063||_l==44064||_l==44308||_l==45087||_l==45088||_l==45332||_l==45599||_l==45600||_l==45844||_l==46111||_l==46112||_l==46356||_l==46623||_l==46624||_l==46868||_l==47647||_l==47648||_l==47892||_l==48159||_l==48160||_l==48404||_l==49183||_l==49184||_l==49428||_l==49695||_l==49696||_l==49940||_l==50207||_l==50208||_l==50452||_l==51743||_l==51744||_l==51988||_l==52255||_l==52256||_l==52500||_l==52767||_l==52768||_l==53012||_l==53279||_l==53280||_l==53524||_l==53791||_l==53792||_l==54036||_l==54303||_l==54304||_l==54548||_l==55327||_l==55328||_l==55572||_l==55839||_l==55840||_l==56084||_l==56351||_l==56352||_l==56596||_l==56863||_l==56864||_l==57108||_l==57375||_l==57376||_l==57620||_l==57887||_l==57888||_l==58132||_l==60447||_l==60448||_l==60692||_l==60959||_l==60960||_l==61204||_l==61471||_l==61472||_l==61716||_l==61983||_l==61984||_l==62228||_l==62495||_l==62496||_l==62740||_l==63007||_l==63008||_l==63252||_l==63519||_l==63520||_l==63764||_l==64031||_l==64032||_l==64276||_l==64543||_l==64544||_l==64788||_l==65567||_l==65568||_l==65812||_l==66079||_l==66080||_l==66324||_l==67103||_l==67104||_l==67348||_l==67615||_l==67616||_l==67860||_l==68127||_l==68128||_l==68372||_l==68639||_l==68640||_l==68884||_l==69151||_l==69152||_l==69396||_l==69663||_l==69664||_l==69908||_l==70175||_l==70176||_l==70420||_l==72223||_l==72224||_l==72468||_l==74271||_l==74272||_l==74516||_l==74783||_l==74784||_l==75028||_l==75807||_l==75808||_l==76052||_l==76831||_l==76832||_l==77076||_l==77343||_l==77344||_l==77588||_l==77855||_l==77856||_l==78100||_l==78367||_l==78368||_l==78612||_l==78879||_l==78880||_l==79124||_l==79391||_l==79392||_l==79636||_l==81439||_l==81440||_l==81684||_l==81951||_l==81952||_l==82196||_l==82463||_l==82464||_l==82708||_l==82975||_l==82976||_l==83220||_l==83487||_l==83488||_l==83732||_l==83999||_l==84e3||_l==84244||_l==84511||_l==84512||_l==84756||_l==85023||_l==85024||_l==85268||_l==85535||_l==85536||_l==85780||_l==87071||_l==87072||_l==87316||_l==87583||_l==87584||_l==87828||_l==88095||_l==88096||_l==88340||_l==89119||_l==89120||_l==89364||_l==90143||_l==90144||_l==90388||_l==91167||_l==91168||_l==91412||_l==92191||_l==92192||_l==92436||_l==92703||_l==92704||_l==92948||_l==93215||_l==93216||_l==93460||_l==94239||_l==94240||_l==94484||_l==94751||_l==94752||_l==94996||_l==95263||_l==95264||_l==95508||_l==97823||_l==97824||_l==98068||_l==98335||_l==98336||_l==98580||_l==99359||_l==99360||_l==99604||_l==101407||_l==101408||_l==101652||_l==101919||_l==101920||_l==102164||_l==102431||_l==102432||_l==102676||_l==102943||_l==102944||_l==103188||_l==103455||_l==103456||_l==103700||_l==103967||_l==103968||_l==104212||_l==105503||_l==105504||_l==105748||_l==108575||_l==108576||_l==108820||_l==109087||_l==109088||_l==109332||_l==110623||_l==110624||_l==110868||_l==111647||_l==111648||_l==111892||_l==112159||_l==112160||_l==112404||_l==112671||_l==112672||_l==112916||_l==113183||_l==113184||_l==113428||_l==113695||_l==113696||_l==113940||_l==114719||_l==114720||_l==114964||_l==115231||_l==115232||_l==115476||_l==115743||_l==115744||_l==115988||_l==116255||_l==116256||_l==116500||_l==116767||_l==116768||_l==117012||_l==117279||_l==117280||_l==117524||_l==119839||_l==119840||_l==120084||_l==120351||_l==120352||_l==120596||_l==120863||_l==120864||_l==121108||_l==121375||_l==121376||_l==121620||_l==122911||_l==122912||_l==123156||_l==123935||_l==123936||_l==124180||_l==124447||_l==124448||_l==124692||_l==124959||_l==124960||_l==125204||_l==127007||_l==127008||_l==127252||_l==127519||_l==127520||_l==127764||_l==128031||_l==128032||_l==128276||_l==128543||_l==128544||_l==128788||_l==129055||_l==129056||_l==129300||_l==129567||_l==129568||_l==129812||_l==130079||_l==130080||_l==130324||_l==131103||_l==131104||_l==131348||_l==131615||_l==131616||_l==131860||_l==133151||_l==133152||_l==133396||_l==133663||_l==133664||_l==133908||_l==134175||_l==134176||_l==134420||_l==134687||_l==134688||_l==134932||_l==136223||_l==136224||_l==136468||_l==136735||_l==136736||_l==136980||_l==138271||_l==138272||_l==138516||_l==140319||_l==140320||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(7,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ya(),_l=-1}catch(a){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),ef(),_l=-2}catch(f){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),nf(),_l=-3}catch(l){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),kf(),_l=-12}catch(c){_l=-13}}}}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(7,Pl,_l)}}switch(_l){case-2:Za();break;case-3:tf();break;case 90198:rf();break;case 90214:of();break;case 113284:af();break;case 16009:case 16046:case 116910:case 119945:case 128649:lf();break;case 17560:df();break;case 17651:mf();break;case 141562:wf();break;case 17661:Sf();break;case-12:case 16134:Cf();break;case-13:Lf();break;case 53:Of();break;default:Ga()}Vl.endNonterminal(\"Statement\",Pl)}function Qa(){switch(Hl){case 132:Ll(188);break;case 137:Ll(195);break;case 174:Ll(192);break;case 250:Ll(189);break;case 262:Ll(186);break;case 276:Ll(276);break;case 31:case 32:Ll(254);break;case 86:case 102:Ll(187);break;case 152:case 243:case 253:case 267:Ll(184);break;default:_l=Hl}if(_l==2836||_l==3103||_l==3104||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17675||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27412||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==35871||_l==35872||_l==36116||_l==36895||_l==36896||_l==37140||_l==37407||_l==37408||_l==37652||_l==37919||_l==37920||_l==38164||_l==38431||_l==38432||_l==38676||_l==39455||_l==39456||_l==39700||_l==39967||_l==39968||_l==40212||_l==40479||_l==40480||_l==40724||_l==40991||_l==40992||_l==41236||_l==41503||_l==41504||_l==41748||_l==42015||_l==42016||_l==42260||_l==42527||_l==42528||_l==42772||_l==43039||_l==43040||_l==43284||_l==43551||_l==43552||_l==43796||_l==44063||_l==44064||_l==44308||_l==45087||_l==45088||_l==45332||_l==45599||_l==45600||_l==45844||_l==46111||_l==46112||_l==46356||_l==46623||_l==46624||_l==46868||_l==47647||_l==47648||_l==47892||_l==48159||_l==48160||_l==48404||_l==49183||_l==49184||_l==49428||_l==49695||_l==49696||_l==49940||_l==50207||_l==50208||_l==50452||_l==51743||_l==51744||_l==51988||_l==52255||_l==52256||_l==52500||_l==52767||_l==52768||_l==53012||_l==53279||_l==53280||_l==53524||_l==53791||_l==53792||_l==54036||_l==54303||_l==54304||_l==54548||_l==55327||_l==55328||_l==55572||_l==55839||_l==55840||_l==56084||_l==56351||_l==56352||_l==56596||_l==56863||_l==56864||_l==57108||_l==57375||_l==57376||_l==57620||_l==57887||_l==57888||_l==58132||_l==60447||_l==60448||_l==60692||_l==60959||_l==60960||_l==61204||_l==61471||_l==61472||_l==61716||_l==61983||_l==61984||_l==62228||_l==62495||_l==62496||_l==62740||_l==63007||_l==63008||_l==63252||_l==63519||_l==63520||_l==63764||_l==64031||_l==64032||_l==64276||_l==64543||_l==64544||_l==64788||_l==65567||_l==65568||_l==65812||_l==66079||_l==66080||_l==66324||_l==67103||_l==67104||_l==67348||_l==67615||_l==67616||_l==67860||_l==68127||_l==68128||_l==68372||_l==68639||_l==68640||_l==68884||_l==69151||_l==69152||_l==69396||_l==69663||_l==69664||_l==69908||_l==70175||_l==70176||_l==70420||_l==72223||_l==72224||_l==72468||_l==74271||_l==74272||_l==74516||_l==74783||_l==74784||_l==75028||_l==75807||_l==75808||_l==76052||_l==76831||_l==76832||_l==77076||_l==77343||_l==77344||_l==77588||_l==77855||_l==77856||_l==78100||_l==78367||_l==78368||_l==78612||_l==78879||_l==78880||_l==79124||_l==79391||_l==79392||_l==79636||_l==81439||_l==81440||_l==81684||_l==81951||_l==81952||_l==82196||_l==82463||_l==82464||_l==82708||_l==82975||_l==82976||_l==83220||_l==83487||_l==83488||_l==83732||_l==83999||_l==84e3||_l==84244||_l==84511||_l==84512||_l==84756||_l==85023||_l==85024||_l==85268||_l==85535||_l==85536||_l==85780||_l==87071||_l==87072||_l==87316||_l==87583||_l==87584||_l==87828||_l==88095||_l==88096||_l==88340||_l==89119||_l==89120||_l==89364||_l==90143||_l==90144||_l==90388||_l==91167||_l==91168||_l==91412||_l==92191||_l==92192||_l==92436||_l==92703||_l==92704||_l==92948||_l==93215||_l==93216||_l==93460||_l==94239||_l==94240||_l==94484||_l==94751||_l==94752||_l==94996||_l==95263||_l==95264||_l==95508||_l==97823||_l==97824||_l==98068||_l==98335||_l==98336||_l==98580||_l==99359||_l==99360||_l==99604||_l==101407||_l==101408||_l==101652||_l==101919||_l==101920||_l==102164||_l==102431||_l==102432||_l==102676||_l==102943||_l==102944||_l==103188||_l==103455||_l==103456||_l==103700||_l==103967||_l==103968||_l==104212||_l==105503||_l==105504||_l==105748||_l==108575||_l==108576||_l==108820||_l==109087||_l==109088||_l==109332||_l==110623||_l==110624||_l==110868||_l==111647||_l==111648||_l==111892||_l==112159||_l==112160||_l==112404||_l==112671||_l==112672||_l==112916||_l==113183||_l==113184||_l==113428||_l==113695||_l==113696||_l==113940||_l==114719||_l==114720||_l==114964||_l==115231||_l==115232||_l==115476||_l==115743||_l==115744||_l==115988||_l==116255||_l==116256||_l==116500||_l==116767||_l==116768||_l==117012||_l==117279||_l==117280||_l==117524||_l==119839||_l==119840||_l==120084||_l==120351||_l==120352||_l==120596||_l==120863||_l==120864||_l==121108||_l==121375||_l==121376||_l==121620||_l==122911||_l==122912||_l==123156||_l==123935||_l==123936||_l==124180||_l==124447||_l==124448||_l==124692||_l==124959||_l==124960||_l==125204||_l==127007||_l==127008||_l==127252||_l==127519||_l==127520||_l==127764||_l==128031||_l==128032||_l==128276||_l==128543||_l==128544||_l==128788||_l==129055||_l==129056||_l==129300||_l==129567||_l==129568||_l==129812||_l==130079||_l==130080||_l==130324||_l==131103||_l==131104||_l==131348||_l==131615||_l==131616||_l==131860||_l==133151||_l==133152||_l==133396||_l==133663||_l==133664||_l==133908||_l==134175||_l==134176||_l==134420||_l==134687||_l==134688||_l==134932||_l==136223||_l==136224||_l==136468||_l==136735||_l==136736||_l==136980||_l==138271||_l==138272||_l==138516||_l==140319||_l==140320||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(7,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ya(),Jl(7,t,-1),_l=-15}catch(a){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),ef(),Jl(7,t,-2),_l=-15}catch(f){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),nf(),Jl(7,t,-3),_l=-15}catch(l){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),kf(),Jl(7,t,-12),_l=-15}catch(c){_l=-13,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(7,t,-13)}}}}}}switch(_l){case-2:ef();break;case-3:nf();break;case 90198:sf();break;case 90214:uf();break;case 113284:ff();break;case 16009:case 16046:case 116910:case 119945:case 128649:cf();break;case 17560:vf();break;case 17651:gf();break;case 141562:Ef();break;case 17661:xf();break;case-12:case 16134:kf();break;case-13:Af();break;case 53:Mf();break;case-15:break;default:Ya()}}function Ga(){Vl.startNonterminal(\"ApplyStatement\",Pl),Pf(),Sl(53),Vl.endNonterminal(\"ApplyStatement\",Pl)}function Ya(){Hf(),xl(53)}function Za(){Vl.startNonterminal(\"AssignStatement\",Pl),Sl(31),kl(254),Nl(),hi(),kl(27),Sl(52),kl(266),Nl(),_f(),Sl(53),Vl.endNonterminal(\"AssignStatement\",Pl)}function ef(){xl(31),kl(254),pi(),kl(27),xl(52),kl(266),Df(),xl(53)}function tf(){Vl.startNonterminal(\"BlockStatement\",Pl),Sl(276),kl(276),Nl(),za(),Sl(282),Vl.endNonterminal(\"BlockStatement\",Pl)}function nf(){xl(276),kl(276),Wa(),xl(282)}function rf(){Vl.startNonterminal(\"BreakStatement\",Pl),Sl(86),kl(59),Sl(176),kl(28),Sl(53),Vl.endNonterminal(\"BreakStatement\",Pl)}function sf(){xl(86),kl(59),xl(176),kl(28),xl(53)}function of(){Vl.startNonterminal(\"ContinueStatement\",Pl),Sl(102),kl(59),Sl(176),kl(28),Sl(53),Vl.endNonterminal(\"ContinueStatement\",Pl)}function uf(){xl(102),kl(59),xl(176),kl(28),xl(53)}function af(){Vl.startNonterminal(\"ExitStatement\",Pl),Sl(132),kl(71),Sl(221),kl(266),Nl(),_f(),Sl(53),Vl.endNonterminal(\"ExitStatement\",Pl)}function ff(){xl(132),kl(71),xl(221),kl(266),Df(),xl(53)}function lf(){Vl.startNonterminal(\"FLWORStatement\",Pl),tt();for(;;){kl(173);if(Hl==220)break;Nl(),rt()}Nl(),hf(),Vl.endNonterminal(\"FLWORStatement\",Pl)}function cf(){nt();for(;;){kl(173);if(Hl==220)break;it()}pf()}function hf(){Vl.startNonterminal(\"ReturnStatement\",Pl),Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"ReturnStatement\",Pl)}function pf(){xl(220),kl(269),Qa()}function df(){Vl.startNonterminal(\"IfStatement\",Pl),Sl(152),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37),kl(77),Sl(245),kl(269),Nl(),Ka(),kl(48),Sl(122),kl(269),Nl(),Ka(),Vl.endNonterminal(\"IfStatement\",Pl)}function vf(){xl(152),kl(22),xl(34),kl(266),Y(),xl(37),kl(77),xl(245),kl(269),Qa(),kl(48),xl(122),kl(269),Qa()}function mf(){Vl.startNonterminal(\"SwitchStatement\",Pl),Sl(243),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),yf(),kl(113);if(Hl!=88)break}Sl(109),kl(70),Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"SwitchStatement\",Pl)}function gf(){xl(243),kl(22),xl(34),kl(266),Y(),xl(37);for(;;){kl(35),bf(),kl(113);if(Hl!=88)break}xl(109),kl(70),xl(220),kl(269),Qa()}function yf(){Vl.startNonterminal(\"SwitchCaseStatement\",Pl);for(;;){Sl(88),kl(266),Nl(),dn();if(Hl!=88)break}Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"SwitchCaseStatement\",Pl)}function bf(){for(;;){xl(88),kl(266),vn();if(Hl!=88)break}xl(220),kl(269),Qa()}function wf(){Vl.startNonterminal(\"TryCatchStatement\",Pl),Sl(250),kl(87),Nl(),tf();for(;;){kl(36),Sl(91),kl(256),Nl(),_n(),Nl(),tf(),kl(277);switch(Hl){case 91:Ll(278);break;default:_l=Hl}if(_l==38491||_l==45659||_l==46171||_l==60507||_l==65627||_l==67163||_l==74843||_l==76891||_l==77403||_l==82011||_l==83035||_l==84059||_l==88155||_l==91227||_l==92251||_l==95323||_l==102491||_l==127067||_l==127579||_l==130139){_l=Kl(8,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{kl(36),xl(91),kl(256),Dn(),nf(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(8,Pl,_l)}}if(_l!=-1&&_l!=2651&&_l!=3163&&_l!=35931&&_l!=36955&&_l!=37467&&_l!=37979&&_l!=39515&&_l!=40027&&_l!=40539&&_l!=41051&&_l!=41563&&_l!=42075&&_l!=42587&&_l!=43099&&_l!=43611&&_l!=44123&&_l!=45147&&_l!=46683&&_l!=47707&&_l!=48219&&_l!=49243&&_l!=49755&&_l!=50267&&_l!=51803&&_l!=52315&&_l!=52827&&_l!=53339&&_l!=53851&&_l!=54363&&_l!=55387&&_l!=55899&&_l!=56411&&_l!=56923&&_l!=57435&&_l!=57947&&_l!=61019&&_l!=61531&&_l!=62043&&_l!=62555&&_l!=63067&&_l!=63579&&_l!=64091&&_l!=64603&&_l!=66139&&_l!=67675&&_l!=68187&&_l!=68699&&_l!=69211&&_l!=69723&&_l!=70235&&_l!=72283&&_l!=74331&&_l!=75867&&_l!=77915&&_l!=78427&&_l!=78939&&_l!=79451&&_l!=81499&&_l!=82523&&_l!=83547&&_l!=84571&&_l!=85083&&_l!=85595&&_l!=87131&&_l!=87643&&_l!=89179&&_l!=90203&&_l!=92763&&_l!=93275&&_l!=94299&&_l!=94811&&_l!=97883&&_l!=98395&&_l!=99419&&_l!=101467&&_l!=101979&&_l!=103003&&_l!=103515&&_l!=104027&&_l!=105563&&_l!=108635&&_l!=109147&&_l!=110683&&_l!=111707&&_l!=112219&&_l!=112731&&_l!=113243&&_l!=113755&&_l!=114779&&_l!=115291&&_l!=115803&&_l!=116315&&_l!=116827&&_l!=117339&&_l!=119899&&_l!=120411&&_l!=120923&&_l!=121435&&_l!=122971&&_l!=123995&&_l!=124507&&_l!=125019&&_l!=128091&&_l!=128603&&_l!=129115&&_l!=129627&&_l!=131163&&_l!=131675&&_l!=133211&&_l!=133723&&_l!=134235&&_l!=134747&&_l!=136283&&_l!=136795&&_l!=138331&&_l!=140379)break}Vl.endNonterminal(\"TryCatchStatement\",Pl)}function Ef(){xl(250),kl(87),nf(),kl(36),xl(91),kl(256),Dn(),nf();for(;;){kl(277);switch(Hl){case 91:Ll(278);break;default:_l=Hl}if(_l==38491||_l==45659||_l==46171||_l==60507||_l==65627||_l==67163||_l==74843||_l==76891||_l==77403||_l==82011||_l==83035||_l==84059||_l==88155||_l==91227||_l==92251||_l==95323||_l==102491||_l==127067||_l==127579||_l==130139){_l=Kl(8,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{kl(36),xl(91),kl(256),Dn(),nf(),Jl(8,t,-1);continue}catch(a){Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(8,t,-2);break}}}if(_l!=-1&&_l!=2651&&_l!=3163&&_l!=35931&&_l!=36955&&_l!=37467&&_l!=37979&&_l!=39515&&_l!=40027&&_l!=40539&&_l!=41051&&_l!=41563&&_l!=42075&&_l!=42587&&_l!=43099&&_l!=43611&&_l!=44123&&_l!=45147&&_l!=46683&&_l!=47707&&_l!=48219&&_l!=49243&&_l!=49755&&_l!=50267&&_l!=51803&&_l!=52315&&_l!=52827&&_l!=53339&&_l!=53851&&_l!=54363&&_l!=55387&&_l!=55899&&_l!=56411&&_l!=56923&&_l!=57435&&_l!=57947&&_l!=61019&&_l!=61531&&_l!=62043&&_l!=62555&&_l!=63067&&_l!=63579&&_l!=64091&&_l!=64603&&_l!=66139&&_l!=67675&&_l!=68187&&_l!=68699&&_l!=69211&&_l!=69723&&_l!=70235&&_l!=72283&&_l!=74331&&_l!=75867&&_l!=77915&&_l!=78427&&_l!=78939&&_l!=79451&&_l!=81499&&_l!=82523&&_l!=83547&&_l!=84571&&_l!=85083&&_l!=85595&&_l!=87131&&_l!=87643&&_l!=89179&&_l!=90203&&_l!=92763&&_l!=93275&&_l!=94299&&_l!=94811&&_l!=97883&&_l!=98395&&_l!=99419&&_l!=101467&&_l!=101979&&_l!=103003&&_l!=103515&&_l!=104027&&_l!=105563&&_l!=108635&&_l!=109147&&_l!=110683&&_l!=111707&&_l!=112219&&_l!=112731&&_l!=113243&&_l!=113755&&_l!=114779&&_l!=115291&&_l!=115803&&_l!=116315&&_l!=116827&&_l!=117339&&_l!=119899&&_l!=120411&&_l!=120923&&_l!=121435&&_l!=122971&&_l!=123995&&_l!=124507&&_l!=125019&&_l!=128091&&_l!=128603&&_l!=129115&&_l!=129627&&_l!=131163&&_l!=131675&&_l!=133211&&_l!=133723&&_l!=134235&&_l!=134747&&_l!=136283&&_l!=136795&&_l!=138331&&_l!=140379)break;kl(36),xl(91),kl(256),Dn(),nf()}}function Sf(){Vl.startNonterminal(\"TypeswitchStatement\",Pl),Sl(253),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),Tf(),kl(113);if(Hl!=88)break}Sl(109),kl(95),Hl==31&&(Sl(31),kl(254),Nl(),hi()),kl(70),Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"TypeswitchStatement\",Pl)}function xf(){xl(253),kl(22),xl(34),kl(266),Y(),xl(37);for(;;){kl(35),Nf(),kl(113);if(Hl!=88)break}xl(109),kl(95),Hl==31&&(xl(31),kl(254),pi()),kl(70),xl(220),kl(269),Qa()}function Tf(){Vl.startNonterminal(\"CaseStatement\",Pl),Sl(88),kl(261),Hl==31&&(Sl(31),kl(254),Nl(),hi(),kl(30),Sl(79)),kl(259),Nl(),ms(),kl(70),Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"CaseStatement\",Pl)}function Nf(){xl(88),kl(261),Hl==31&&(xl(31),kl(254),pi(),kl(30),xl(79)),kl(259),gs(),kl(70),xl(220),kl(269),Qa()}function Cf(){Vl.startNonterminal(\"VarDeclStatement\",Pl);for(;;){kl(98);if(Hl!=32)break;Nl(),B()}Sl(262),kl(21),Sl(31),kl(254),Nl(),hi(),kl(157),Hl==79&&(Nl(),ds()),kl(145),Hl==52&&(Sl(52),kl(266),Nl(),_f());for(;;){if(Hl!=41)break;Sl(41),kl(21),Sl(31),kl(254),Nl(),hi(),kl(157),Hl==79&&(Nl(),ds()),kl(145),Hl==52&&(Sl(52),kl(266),Nl(),_f())}Sl(53),Vl.endNonterminal(\"VarDeclStatement\",Pl)}function kf(){for(;;){kl(98);if(Hl!=32)break;j()}xl(262),kl(21),xl(31),kl(254),pi(),kl(157),Hl==79&&vs(),kl(145),Hl==52&&(xl(52),kl(266),Df());for(;;){if(Hl!=41)break;xl(41),kl(21),xl(31),kl(254),pi(),kl(157),Hl==79&&vs(),kl(145),Hl==52&&(xl(52),kl(266),Df())}xl(53)}function Lf(){Vl.startNonterminal(\"WhileStatement\",Pl),Sl(267),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37),kl(269),Nl(),Ka(),Vl.endNonterminal(\"WhileStatement\",Pl)}function Af(){xl(267),kl(22),xl(34),kl(266),Y(),xl(37),kl(269),Qa()}function Of(){Vl.startNonterminal(\"VoidStatement\",Pl),Sl(53),Vl.endNonterminal(\"VoidStatement\",Pl)}function Mf(){xl(53)}function _f(){Vl.startNonterminal(\"ExprSingle\",Pl);switch(Hl){case 137:Ll(235);break;case 174:Ll(232);break;case 250:Ll(231);break;case 152:case 243:case 253:Ll(228);break;default:_l=Hl}switch(_l){case 16009:case 16046:case 116910:case 119945:case 128649:Z();break;case 17560:Sn();break;case 17651:ln();break;case 141562:Tn();break;case 17661:mn();break;default:Pf()}Vl.endNonterminal(\"ExprSingle\",Pl)}function Df(){switch(Hl){case 137:Ll(235);break;case 174:Ll(232);break;case 250:Ll(231);break;case 152:case 243:case 253:Ll(228);break;default:_l=Hl}switch(_l){case 16009:case 16046:case 116910:case 119945:case 128649:et();break;case 17560:xn();break;case 17651:cn();break;case 141562:Nn();break;case 17661:gn();break;default:Hf()}}function Pf(){Vl.startNonterminal(\"ExprSimple\",Pl);switch(Hl){case 77:Ll(230);break;case 218:Ll(233);break;case 219:Ll(234);break;case 110:case 159:Ll(236);break;case 103:case 129:case 235:Ll(229);break;default:_l=Hl}if(_l==133851){_l=Kl(9,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ho(),_l=-6}catch(a){_l=-11}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(9,Pl,_l)}}switch(_l){case 16001:case 16107:on();break;case 97951:case 98463:Oo();break;case 97902:case 98414:_o();break;case 98010:Bo();break;case-6:case 98011:Po();break;case 15975:Wo();break;case 85102:Bf();break;case 85151:Ff();break;case 85210:qf();break;case-11:Uf();break;case 85069:Wf();break;default:Pn()}Vl.endNonterminal(\"ExprSimple\",Pl)}function Hf(){switch(Hl){case 77:Ll(230);break;case 218:Ll(233);break;case 219:Ll(234);break;case 110:case 159:Ll(236);break;case 103:case 129:case 235:Ll(229);break;default:_l=Hl}if(_l==133851){_l=Kl(9,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ho(),Jl(9,t,-6),_l=-13}catch(a){_l=-11,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(9,t,-11)}}}switch(_l){case 16001:case 16107:un();break;case 97951:case 98463:Mo();break;case 97902:case 98414:Do();break;case 98010:jo();break;case-6:case 98011:Ho();break;case 15975:Xo();break;case 85102:jf();break;case 85151:If();break;case 85210:Rf();break;case-11:zf();break;case 85069:Xf();break;case-13:break;default:Hn()}}function Bf(){Vl.startNonterminal(\"JSONDeleteExpr\",Pl),Sl(110),kl(56),Sl(166),kl(263),Nl(),Yr(),Vl.endNonterminal(\"JSONDeleteExpr\",Pl)}function jf(){xl(110),kl(56),xl(166),kl(263),Zr()}function Ff(){Vl.startNonterminal(\"JSONInsertExpr\",Pl);switch(Hl){case 159:Ll(56);break;default:_l=Hl}_l=Kl(10,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(159),kl(56),xl(166),kl(266),Df(),xl(163),kl(266),Df();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(266),Df(),Jl(11,f,-1)}catch(m){Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,f,-2)}_l=-2}}_l==-1&&(xl(81),kl(69),xl(211),kl(266),Df()),_l=-1}catch(g){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(10,Pl,_l)}switch(_l){case-1:Sl(159),kl(56),Sl(166),kl(266),Nl(),_f(),Sl(163),kl(266),Nl(),_f();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(266),Df(),_l=-1}catch(m){_l=-2}Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,Pl,_l)}}_l==-1&&(Sl(81),kl(69),Sl(211),kl(266),Nl(),_f());break;default:Sl(159),kl(56),Sl(166),kl(266),Nl(),hl(),Sl(163),kl(266),Nl(),_f()}Vl.endNonterminal(\"JSONInsertExpr\",Pl)}function If(){switch(Hl){case 159:Ll(56);break;default:_l=Hl}_l=Kl(10,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(159),kl(56),xl(166),kl(266),Df(),xl(163),kl(266),Df();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(266),Df(),Jl(11,f,-1)}catch(m){Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,f,-2)}_l=-2}}_l==-1&&(xl(81),kl(69),xl(211),kl(266),Df()),Jl(10,t,-1),_l=-3}catch(g){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(10,t,-2)}}switch(_l){case-1:xl(159),kl(56),xl(166),kl(266),Df(),xl(163),kl(266),Df();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(266),Df(),Jl(11,f,-1)}catch(m){Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,f,-2)}_l=-2}}_l==-1&&(xl(81),kl(69),xl(211),kl(266),Df());break;case-3:break;default:xl(159),kl(56),xl(166),kl(266),pl(),xl(163),kl(266),Df()}}function qf(){Vl.startNonterminal(\"JSONRenameExpr\",Pl),Sl(218),kl(56),Sl(166),kl(263),Nl(),Yr(),Sl(79),kl(266),Nl(),_f(),Vl.endNonterminal(\"JSONRenameExpr\",Pl)}function Rf(){xl(218),kl(56),xl(166),kl(263),Zr(),xl(79),kl(266),Df()}function Uf(){Vl.startNonterminal(\"JSONReplaceExpr\",Pl),Sl(219),kl(82),Sl(261),kl(64),Sl(196),kl(56),Sl(166),kl(263),Nl(),Yr(),Sl(270),kl(266),Nl(),_f(),Vl.endNonterminal(\"JSONReplaceExpr\",Pl)}function zf(){xl(219),kl(82),xl(261),kl(64),xl(196),kl(56),xl(166),kl(263),Zr(),xl(270),kl(266),Df()}function Wf(){Vl.startNonterminal(\"JSONAppendExpr\",Pl),Sl(77),kl(56),Sl(166),kl(266),Nl(),_f(),Sl(163),kl(266),Nl(),_f(),Vl.endNonterminal(\"JSONAppendExpr\",Pl)}function Xf(){xl(77),kl(56),xl(166),kl(266),Df(),xl(163),kl(266),Df()}function Vf(){Vl.startNonterminal(\"CommonContent\",Pl);switch(Hl){case 12:Sl(12);break;case 23:Sl(23);break;case 277:Sl(277);break;case 283:Sl(283);break;default:yl()}Vl.endNonterminal(\"CommonContent\",Pl)}function $f(){switch(Hl){case 12:xl(12);break;case 23:xl(23);break;case 277:xl(277);break;case 283:xl(283);break;default:bl()}}function Jf(){Vl.startNonterminal(\"ContentExpr\",Pl),Xa(),Vl.endNonterminal(\"ContentExpr\",Pl)}function Kf(){Va()}function Qf(){Vl.startNonterminal(\"CompDocConstructor\",Pl),Sl(119),kl(87),Nl(),yl(),Vl.endNonterminal(\"CompDocConstructor\",Pl)}function Gf(){xl(119),kl(87),bl()}function Yf(){Vl.startNonterminal(\"CompAttrConstructor\",Pl),Sl(82),kl(257);switch(Hl){case 276:Sl(276),kl(266),Nl(),G(),Sl(282);break;default:Nl(),Ha()}kl(87);switch(Hl){case 276:Ll(276);break;default:_l=Hl}if(_l==144660){_l=Kl(12,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(12,Pl,_l)}}switch(_l){case-1:Sl(276),kl(88),Sl(282);break;default:Nl(),yl()}Vl.endNonterminal(\"CompAttrConstructor\",Pl)}function Zf(){xl(82),kl(257);switch(Hl){case 276:xl(276),kl(266),Y(),xl(282);break;default:Ba()}kl(87);switch(Hl){case 276:Ll(276);break;default:_l=Hl}if(_l==144660){_l=Kl(12,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),Jl(12,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(12,t,-2)}}}switch(_l){case-1:xl(276),kl(88),xl(282);break;case-3:break;default:bl()}}function el(){Vl.startNonterminal(\"CompPIConstructor\",Pl),Sl(216),kl(250);switch(Hl){case 276:Sl(276),kl(266),Nl(),G(),Sl(282);break;default:Nl(),Ia()}kl(87);switch(Hl){case 276:Ll(276);break;default:_l=Hl}if(_l==144660){_l=Kl(13,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(13,Pl,_l)}}switch(_l){case-1:Sl(276),kl(88),Sl(282);break;default:Nl(),yl()}Vl.endNonterminal(\"CompPIConstructor\",Pl)}function tl(){xl(216),kl(250);switch(Hl){case 276:xl(276),kl(266),Y(),xl(282);break;default:qa()}kl(87);switch(Hl){case 276:Ll(276);break;default:_l=Hl}if(_l==144660){_l=Kl(13,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),Jl(13,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(13,t,-2)}}}switch(_l){case-1:xl(276),kl(88),xl(282);break;case-3:break;default:bl()}}function nl(){Vl.startNonterminal(\"CompCommentConstructor\",Pl),Sl(96),kl(87),Nl(),yl(),Vl.endNonterminal(\"CompCommentConstructor\",Pl)}function rl(){xl(96),kl(87),bl()}function il(){Vl.startNonterminal(\"CompTextConstructor\",Pl),Sl(244),kl(87),Nl(),yl(),Vl.endNonterminal(\"CompTextConstructor\",Pl)}function sl(){xl(244),kl(87),bl()}function ol(){Vl.startNonterminal(\"PrimaryExpr\",Pl);switch(Hl){case 184:Ll(255);break;case 216:Ll(253);break;case 276:Ll(276);break;case 82:case 121:Ll(258);break;case 96:case 244:Ll(93);break;case 119:case 202:case 256:Ll(139);break;case 6:case 70:case 72:case 73:case 74:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 93:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 111:case 112:case 113:case 118:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 141:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 186:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 206:case 212:case 213:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 228:case 229:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(92);break;default:_l=Hl}if(_l==2836||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==36116||_l==37140||_l==37652||_l==38164||_l==38676||_l==39700||_l==40212||_l==40724||_l==41236||_l==41748||_l==42260||_l==42772||_l==43284||_l==43796||_l==44308||_l==45332||_l==45844||_l==46356||_l==46868||_l==47892||_l==48404||_l==49428||_l==49940||_l==50452||_l==51988||_l==52500||_l==53012||_l==53524||_l==54036||_l==54548||_l==55572||_l==56084||_l==56596||_l==57108||_l==57620||_l==58132||_l==60692||_l==61204||_l==61716||_l==62228||_l==62740||_l==63252||_l==63764||_l==64276||_l==64788||_l==65812||_l==66324||_l==67348||_l==67860||_l==68372||_l==68884||_l==69396||_l==69908||_l==70420||_l==72468||_l==74516||_l==75028||_l==76052||_l==77076||_l==77588||_l==78100||_l==78612||_l==79124||_l==79636||_l==81684||_l==82196||_l==82708||_l==83220||_l==83732||_l==84244||_l==84756||_l==85268||_l==85780||_l==87316||_l==87828||_l==88340||_l==89364||_l==90388||_l==91412||_l==92436||_l==92948||_l==93460||_l==94484||_l==94996||_l==95508||_l==98068||_l==98580||_l==99604||_l==101652||_l==102164||_l==102676||_l==103188||_l==103700||_l==104212||_l==105748||_l==108820||_l==109332||_l==110868||_l==111892||_l==112404||_l==112916||_l==113428||_l==113940||_l==114964||_l==115476||_l==115988||_l==116500||_l==117012||_l==117524||_l==120084||_l==120596||_l==121108||_l==121620||_l==123156||_l==124180||_l==124692||_l==125204||_l==127252||_l==127764||_l==128276||_l==128788||_l==129300||_l==129812||_l==130324||_l==131348||_l==131860||_l==133396||_l==133908||_l==134420||_l==134932||_l==136468||_l==136980||_l==138516||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(14,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{bl(),_l=-10}catch(a){_l=-11}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(14,Pl,_l)}}switch(_l){case 8:case 9:case 10:case 11:oi();break;case 31:li();break;case 34:di();break;case 44:mi();break;case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:Si();break;case 141514:yi();break;case 141568:wi();break;case 32:case 78:case 120:case 124:case 145:case 152:case 165:case 167:case 185:case 191:case 226:case 227:case 242:case 243:case 253:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14969:case 14970:case 14971:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14994:case 14996:case 14998:case 14999:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15014:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15034:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:os();break;case-10:case 27412:yl();break;case-11:ll();break;case 68:ml();break;case 278:al();break;default:Li()}Vl.endNonterminal(\"PrimaryExpr\",Pl)}function ul(){switch(Hl){case 184:Ll(255);break;case 216:Ll(253);break;case 276:Ll(276);break;case 82:case 121:Ll(258);break;case 96:case 244:Ll(93);break;case 119:case 202:case 256:Ll(139);break;case 6:case 70:case 72:case 73:case 74:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 93:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 111:case 112:case 113:case 118:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 141:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 186:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 206:case 212:case 213:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 228:case 229:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(92);break;default:_l=Hl}if(_l==2836||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==36116||_l==37140||_l==37652||_l==38164||_l==38676||_l==39700||_l==40212||_l==40724||_l==41236||_l==41748||_l==42260||_l==42772||_l==43284||_l==43796||_l==44308||_l==45332||_l==45844||_l==46356||_l==46868||_l==47892||_l==48404||_l==49428||_l==49940||_l==50452||_l==51988||_l==52500||_l==53012||_l==53524||_l==54036||_l==54548||_l==55572||_l==56084||_l==56596||_l==57108||_l==57620||_l==58132||_l==60692||_l==61204||_l==61716||_l==62228||_l==62740||_l==63252||_l==63764||_l==64276||_l==64788||_l==65812||_l==66324||_l==67348||_l==67860||_l==68372||_l==68884||_l==69396||_l==69908||_l==70420||_l==72468||_l==74516||_l==75028||_l==76052||_l==77076||_l==77588||_l==78100||_l==78612||_l==79124||_l==79636||_l==81684||_l==82196||_l==82708||_l==83220||_l==83732||_l==84244||_l==84756||_l==85268||_l==85780||_l==87316||_l==87828||_l==88340||_l==89364||_l==90388||_l==91412||_l==92436||_l==92948||_l==93460||_l==94484||_l==94996||_l==95508||_l==98068||_l==98580||_l==99604||_l==101652||_l==102164||_l==102676||_l==103188||_l==103700||_l==104212||_l==105748||_l==108820||_l==109332||_l==110868||_l==111892||_l==112404||_l==112916||_l==113428||_l==113940||_l==114964||_l==115476||_l==115988||_l==116500||_l==117012||_l==117524||_l==120084||_l==120596||_l==121108||_l==121620||_l==123156||_l==124180||_l==124692||_l==125204||_l==127252||_l==127764||_l==128276||_l==128788||_l==129300||_l==129812||_l==130324||_l==131348||_l==131860||_l==133396||_l==133908||_l==134420||_l==134932||_l==136468||_l==136980||_l==138516||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(14,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{bl(),Jl(14,t,-10),_l=-14}catch(a){_l=-11,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(14,t,-11)}}}switch(_l){case 8:case 9:case 10:case 11:ui();break;case 31:ci();break;case 34:vi();break;case 44:gi();break;case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:xi();break;case 141514:bi();break;case 141568:Ei();break;case 32:case 78:case 120:case 124:case 145:case 152:case 165:case 167:case 185:case 191:case 226:case 227:case 242:case 243:case 253:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14969:case 14970:case 14971:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14994:case 14996:case 14998:case 14999:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15014:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15034:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:us();break;case-10:case 27412:bl();break;case-11:cl();break;case 68:gl();break;case 278:fl();break;case-14:break;default:Ai()}}function al(){Vl.startNonterminal(\"JSONSimpleObjectUnion\",Pl),Sl(278),kl(272),Hl!=281&&(Nl(),G()),Sl(281),Vl.endNonterminal(\"JSONSimpleObjectUnion\",Pl)}function fl(){xl(278),kl(272),Hl!=281&&Y(),xl(281)}function ll(){Vl.startNonterminal(\"ObjectConstructor\",Pl),Sl(276),kl(273),Hl!=282&&(Nl(),hl()),Sl(282),Vl.endNonterminal(\"ObjectConstructor\",Pl)}function cl(){xl(276),kl(273),Hl!=282&&pl(),xl(282)}function hl(){Vl.startNonterminal(\"PairConstructorList\",Pl),dl();for(;;){if(Hl!=41)break;Sl(41),kl(266),Nl(),dl()}Vl.endNonterminal(\"PairConstructorList\",Pl)}function pl(){vl();for(;;){if(Hl!=41)break;xl(41),kl(266),vl()}}function dl(){Vl.startNonterminal(\"PairConstructor\",Pl),_f(),Sl(49),kl(266),Nl(),_f(),Vl.endNonterminal(\"PairConstructor\",Pl)}function vl(){Df(),xl(49),kl(266),Df()}function ml(){Vl.startNonterminal(\"ArrayConstructor\",Pl),Sl(68),kl(271),Hl!=69&&(Nl(),G()),Sl(69),Vl.endNonterminal(\"ArrayConstructor\",Pl)}function gl(){xl(68),kl(271),Hl!=69&&Y(),xl(69)}function yl(){Vl.startNonterminal(\"BlockExpr\",Pl),Sl(276),kl(276),Nl(),$a(),Sl(282),Vl.endNonterminal(\"BlockExpr\",Pl)}function bl(){xl(276),kl(276),Ja(),xl(282)}function wl(){Vl.startNonterminal(\"FunctionDecl\",Pl),Sl(145),kl(254),Nl(),Ha(),kl(22),Sl(34),kl(94),Hl==31&&(Nl(),U()),Sl(37),kl(148),Hl==79&&(Nl(),El()),kl(118);switch(Hl){case 276:Sl(276),kl(276),Nl(),$a(),Sl(282);break;default:Sl(133)}Vl.endNonterminal(\"FunctionDecl\",Pl)}function El(){Vl.startNonterminal(\"ReturnType\",Pl),Sl(79),kl(259),Nl(),ms(),Vl.endNonterminal(\"ReturnType\",Pl)}function Sl(e){Hl==e?(Nl(),Vl.terminal(i.TOKEN[Hl],Bl,jl>Gl?Gl:jl),Dl=Bl,Pl=jl,Hl=Fl,Hl!=0&&(Bl=Il,jl=ql,Fl=0)):Ml(Bl,jl,0,Hl,e)}function xl(e){Hl==e?(Dl=Bl,Pl=jl,Hl=Fl,Hl!=0&&(Bl=Il,jl=ql,Fl=0)):Ml(Bl,jl,0,Hl,e)}function Tl(e){var t=Dl,n=Pl,r=Hl,i=Bl,s=jl;Hl=e,Bl=Yl,jl=Zl,Fl=0,Pa(),Dl=t,Pl=n,Hl=r,Hl!=0&&(Bl=i,jl=s)}function Nl(){Pl!=Bl&&(Vl.whitespace(Pl,Bl),Pl=Bl)}function Cl(e){var t;for(;;){t=ec(e);if(t!=22){if(t!=36)break;Tl(t)}}return t}function kl(e){Hl==0&&(Hl=Cl(e),Bl=Yl,jl=Zl)}function Ll(e){Fl==0&&(Fl=Cl(e),Il=Yl,ql=Zl),_l=Fl<<9|Hl}function Al(e){Hl==0&&(Hl=ec(e),Bl=Yl,jl=Zl)}function Ol(e){Fl==0&&(Fl=ec(e),Il=Yl,ql=Zl),_l=Fl<<9|Hl}function Ml(e,t,r,i,s){throw t>=Ul&&(Rl=e,Ul=t,zl=r,Wl=i,Xl=s),new n.ParseException(Rl,Ul,zl,Wl,Xl)}function Jl(e,t,n){$l[(t<<4)+e]=n}function Kl(e,t){var n=$l[(t<<4)+e];return typeof n!=\"undefined\"?n:0}function ec(e){var t=!1;Yl=Zl;var n=Zl,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<Gl?Ql.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<Gl?Ql.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,Zl=n)}r>>=12;if(r==0){Zl=n-1;var f=Zl<Gl?Ql.charCodeAt(Zl):0;return f>=56320&&f<57344&&--Zl,Ml(Yl,Zl,s,-1,-1)}if(t)for(var d=r>>9;d>0;--d){--Zl;var f=Zl<Gl?Ql.charCodeAt(Zl):0;f>=56320&&f<57344&&--Zl}else Zl-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return Ql},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=Ql.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+Ql.substring(e.getBegin(),Math.min(Ql.length,e.getBegin()+64))+\"...\"},this.parse_XQuery=function(){Vl.startNonterminal(\"XQuery\",Pl),kl(274),Nl(),o(),Sl(25),Vl.endNonterminal(\"XQuery\",Pl)};var _l,Dl,Pl,Hl,Bl,jl,Fl,Il,ql,Rl,Ul,zl,Wl,Xl,Vl,$l,Ql,Gl,Yl,Zl};r.getTokenSet=function(e){var t=[],n=e<0?-e:r.INITIAL[e]&4095;for(var i=0;i<284;i+=32){var s=i,o=(i>>5)*3612+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&15)+r.EXPECTED[a>>4]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[70,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,38,30,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,38,38],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,355,371,387,423,423,423,415,339,331,339,331,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,440,440,440,440,440,440,440,324,339,339,339,339,339,339,339,339,401,423,423,424,422,423,423,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,338,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,70,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,30,30,30,30,30,30,30,30,30,30,30,30,38,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,38,30,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,38,38,38,38,38,38,38,38,38,38,38,38,30,30,38,38,38,38,38,38,38,69,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,38,30,38,30,30,38],r.INITIAL=[1,12290,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286],r.TRANSITION=[38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25307,18176,18180,18180,18180,18210,18180,18180,18180,18180,18222,18180,18180,18180,18180,18198,18180,18182,18238,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,38623,20771,20784,20796,20808,43870,38625,20832,38672,38672,38672,43215,38672,38672,50505,28718,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19553,19028,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,22954,20869,38672,38672,38672,37958,38672,38672,36976,20909,20888,38672,38672,38672,38672,39926,20282,20925,20958,38672,38672,38672,43215,38672,38672,25928,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,20997,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,21013,21118,38672,38672,38672,24651,38672,38672,44696,38672,42922,38824,21095,21058,21048,21080,21111,48022,20832,38672,38672,38672,43215,21139,38672,25530,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,21157,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,18776,18792,20360,18810,18830,18835,19257,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38666,38672,38672,38672,21880,38671,38672,36460,38672,21173,38661,21224,38672,21231,38672,42738,42750,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,21247,38672,38672,38672,28875,38672,38672,21266,38672,38672,21288,21300,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,31059,38672,38672,38672,38672,38672,38672,24860,21316,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,18988,50434,18503,18525,21353,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,24749,21390,38672,38672,38672,23220,38672,38672,49687,45814,21411,38672,38672,38672,38672,41859,18366,21448,21478,38672,38672,38672,43215,38672,38672,50505,21515,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,46185,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,21462,21573,21537,21537,21537,21580,21532,21537,21542,21615,21558,21644,21596,21609,21631,21657,21669,21681,20832,38672,38672,38672,21337,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,21697,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,30462,38672,38672,38672,22025,23251,38672,22249,23257,42922,30462,38672,21719,21725,21741,21766,21750,21795,38672,38672,38672,46035,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,30475,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,24785,38672,38672,38672,30470,38672,38672,38672,37115,50393,21856,21832,21850,21834,21872,21896,21908,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,21924,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,37301,25812,27394,21985,22003,21985,22017,27392,21987,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,42072,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,20981,38672,38672,38672,30470,24643,38672,48413,22054,26165,22041,22070,22074,22074,22090,20979,48442,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,22114,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,47221,22137,22155,22137,22169,47219,22139,22193,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,22230,38672,22247,38672,29641,22265,42072,33771,38672,38672,38672,38672,26929,22475,35267,22475,22475,36544,42277,22411,22411,33858,26727,37227,26727,26727,35540,39463,38672,38672,38672,38672,38672,38672,18609,24891,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,21432,38031,38672,38672,38672,38672,38672,22291,38672,26931,22311,22475,22475,22475,22475,33849,22352,22411,35447,22411,22411,33324,22381,26727,45449,26727,26727,32918,33802,38672,38672,38672,38672,30028,38672,38672,22475,36607,22475,22475,28015,33854,22411,22410,22411,22411,27851,26727,45441,26727,26727,22521,33795,38672,38672,22807,38672,38672,28255,22475,22475,38505,29442,22411,22411,34626,26485,26727,26727,26860,26998,22647,38672,38672,22428,26931,48359,22475,42142,32794,22411,28347,37402,26727,22521,32486,38672,18915,38672,22451,22474,36860,37042,22411,22492,22517,22520,26312,34036,26929,42625,42144,35207,26975,22537,26310,35759,22589,36765,22624,22640,22663,22685,22706,39617,42139,28345,26456,39814,47009,22727,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,23092,42922,38672,38672,38672,38672,38672,31140,31152,22751,38672,38672,38672,43215,38672,38672,26131,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,27937,27268,22230,38672,38672,38672,29641,38672,40144,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,36544,22411,22411,22411,33858,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,18609,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,22803,38672,38672,38672,22886,38672,38672,38672,38672,42922,36439,22823,22844,22866,22878,36438,22828,20832,38672,38672,38672,43215,38672,38672,50505,41329,38672,22902,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,22923,38672,38672,38672,30470,38672,38672,38672,23115,42922,38672,38672,38672,38672,38672,26339,22940,22970,38672,38672,38672,43215,38672,38672,23007,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,47631,27268,22230,38672,38672,38672,29641,38672,48650,23029,38672,38672,38672,38672,26929,22475,22475,22475,22475,36544,22411,22411,22411,33858,26727,26727,26727,26727,30990,42723,23085,38672,38672,38672,38672,38672,23048,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,23072,23108,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,46833,22411,22411,22411,22411,22411,47864,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,43252,33854,22411,22411,22411,22411,48185,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,18878,38672,38672,38672,35592,32963,38672,38672,23153,42922,37950,35335,23190,23196,23212,38672,41919,23236,23274,38672,38672,45078,23291,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,25157,23483,23350,24209,23309,45351,38672,18269,42564,28228,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19821,23376,23336,23369,23392,24203,23434,23465,24172,23726,19833,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,18729,23481,23642,24581,23499,23504,24048,23353,23520,23933,23353,24164,23917,24518,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,23536,23854,23815,23561,23577,23632,24450,24255,23689,23658,23674,23716,23742,24268,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,23773,23804,23842,24040,23870,23886,23449,23700,23902,23320,23949,23992,43796,19722,19792,19745,19771,19808,19113,19859,19875,24027,23545,23592,24064,24137,24459,24094,24110,23407,20069,47383,20010,46515,35979,20039,20679,24126,24567,24482,24153,24188,23616,24225,20191,20207,20223,20259,20298,20337,24284,24078,24374,24300,24330,24314,23418,20424,20452,20468,24361,23826,23606,24390,24419,20532,24435,24475,24498,24628,20608,23750,23928,24403,20644,23757,24508,20660,20054,24345,20695,24537,24597,24613,24552,23788,24240,23964,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,39906,38672,38672,38672,30470,24672,38672,38672,24667,26611,24688,24695,24695,24695,24711,26910,24735,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,24765,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,20739,24828,48943,18855,18871,18894,40258,24858,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19087,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,24876,24922,24938,19905,19631,19046,24954,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,24970,18446,19976,19994,19525,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,21250,35576,24999,24999,24999,35584,31668,31680,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,25271,38672,38672,38672,38672,18953,18958,18794,35998,19418,19887,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,50381,27744,38672,38672,38672,30470,38672,38672,38672,38672,42922,40452,25015,25015,25015,25023,27746,40454,20832,25047,38672,38672,43215,38672,38672,50505,38672,38672,25065,38672,38672,38672,38672,18953,18958,18794,35998,19418,20310,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,50286,50295,38672,38672,38672,23056,38672,38672,38672,38672,42922,44048,25088,25088,25088,25096,46630,44050,25120,38672,38672,38672,43215,38672,38672,50505,38672,38672,18699,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,25136,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,25152,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25173,38672,38672,38672,38672,30470,25218,38672,38672,21395,32346,38672,38672,38672,25210,25237,21393,25221,25256,38672,38672,38672,43215,38672,38672,50505,22214,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19206,20349,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,38672,38672,38672,38672,38672,41563,25293,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,34976,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,25437,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,30057,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,25455,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,40102,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,49130,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25482,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25500,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38220,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,25563,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,28464,25582,25594,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,21426,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25610,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,44752,25631,25649,25671,25683,44753,25633,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,35735,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,25717,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,38672,38672,38672,38672,38672,38672,24860,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,31997,38672,25754,25760,25776,23293,41839,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,25800,20452,20468,20484,20497,50424,20500,20516,25828,20548,20592,20589,50171,25844,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,25049,38672,38672,38672,22098,25865,25896,25377,25881,25913,30410,30418,25964,25978,25990,26006,26018,25344,45647,38672,26034,48091,26052,33210,26086,26116,26153,26223,35321,26181,25701,26211,26248,26264,43583,44602,26280,26296,26329,38672,38672,38672,30176,26355,38925,41958,22850,24803,38672,44654,30480,22475,22475,22475,36601,25393,22411,22411,43601,22690,26727,26727,26727,39641,30990,39463,38672,43148,28319,38672,29724,26374,19326,38672,38672,32428,40296,38574,45608,22475,22475,26394,26439,26475,26509,22411,37859,28780,26529,38451,26727,26727,43300,45056,22573,30349,25414,26545,38672,26563,38672,40287,48411,38672,26599,35364,28653,26627,31403,45616,49789,33849,44356,22411,30609,28411,41138,33324,35718,26727,47625,44193,29223,41749,42781,38094,28940,38672,21816,21032,26644,38672,47420,26664,22475,41307,22336,31195,39296,22411,22411,26685,31454,47988,26726,26727,30787,32911,36940,26744,38697,46064,38672,26779,26799,26821,22787,22475,23131,26837,37515,22411,36778,26853,26876,26727,33519,46887,26926,38672,38672,26931,37355,35081,26947,38899,38878,26969,48550,26727,26994,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,38555,27014,22600,47761,48246,27057,27076,27094,27113,28343,26456,27133,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,27153,38672,38672,22098,38672,38672,38672,38672,39378,27172,38672,27196,27202,27218,27234,27246,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,27262,42259,26453,27284,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,46100,48405,27326,25277,38672,38672,28258,22475,22475,22475,37137,27346,22411,22411,22411,22411,39760,37334,26727,26727,26727,26727,27410,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,27435,38672,38672,33108,38672,49441,22475,22475,22475,38002,42895,22411,22411,22411,22411,27454,27481,26727,26727,26727,43058,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,46997,37168,35831,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,27504,38672,38672,22098,38672,27541,38672,27559,23976,27578,27586,27602,27617,27629,27645,27657,25344,38672,38672,27676,44992,38672,22924,38672,38672,38672,38672,38672,38672,27673,50511,27692,47251,26513,26453,41246,27710,25375,29768,38672,38672,32334,38672,27740,38672,27762,27784,38672,25948,27789,27805,27821,22475,22475,27840,27878,22411,22411,22690,27915,27931,26727,26727,30990,39463,44557,38672,38672,44934,38672,38225,48405,33126,27953,38672,38672,27694,47073,35424,37245,22475,35786,48497,47338,42686,30280,22411,37334,37394,27977,27995,43743,26727,32919,30349,25414,38672,38672,24003,38672,30096,48411,38672,38672,26931,22475,22475,22475,28013,28031,33849,22411,22411,22411,28053,28070,33324,26727,26727,26727,28092,28109,32918,41804,28131,38672,38672,49206,38672,28149,38672,22475,22475,22475,22780,33754,33854,22411,22411,42031,22411,31454,26727,26727,26727,28171,22521,33795,38672,38672,31346,38672,46687,21493,22475,28191,22475,23131,22411,30274,22411,36778,26727,35228,26727,31599,28213,38672,38672,38672,28250,28274,47411,42142,28296,31494,28347,36728,31954,22521,26313,38672,38672,28317,27136,22475,28335,22411,36897,26977,26727,22564,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,28363,28379,28427,28480,28257,28343,26456,28257,28345,26459,33538,36362,36357,28504,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,24521,38672,38672,22098,38672,28530,45484,38672,46575,28549,28557,28573,28587,28595,28611,28623,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,19750,26547,38672,26546,19755,28639,42141,48492,27360,44280,27268,25375,29257,27180,28679,29641,21703,38672,25730,38672,38083,42329,28697,28734,27137,27824,36531,43498,28750,22608,46434,28774,46408,28796,28814,28833,26727,28849,39463,38672,38672,38672,25738,38672,29761,48405,38672,38672,38672,19698,28258,22475,22475,22475,27023,35786,22411,22411,22411,22411,28891,37334,26727,26727,26727,26727,28912,43066,28929,28956,38672,38672,33876,38672,28992,48411,38672,38672,29009,29030,27032,22475,22475,22669,33849,29109,45393,22411,22411,32729,33324,29133,37067,26727,26727,34717,32918,41804,38672,38672,38672,38672,38672,29157,38672,29181,22475,22475,29202,33754,43112,22411,22411,32083,22411,34472,29222,26727,26727,29239,22521,33795,38672,29256,29273,38672,29294,28255,32383,27117,29315,23131,44876,34578,42252,36778,44915,26727,29337,26998,46887,21810,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,29370,38672,27136,22475,29387,22411,41041,26977,26727,43751,26312,34036,26929,22475,42144,22411,29411,29240,26310,35759,22476,22411,26978,48196,29430,26953,38544,39617,34809,33567,37775,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38673,29464,38672,22098,22435,29483,38672,29506,26195,29530,29540,29556,29570,29582,29598,29610,25344,38672,29626,25072,29668,50094,29711,40102,40331,29748,21064,29784,29812,29843,29873,29903,29919,29957,26423,29973,30010,25375,30044,30091,38782,30112,30134,26137,30161,38672,38672,26583,38672,26929,39099,30212,36878,44806,30228,43650,28758,46842,30244,46765,30296,30317,30336,30384,39463,20089,31354,30434,38799,41183,30450,30496,38672,30542,30564,29278,30580,39823,30631,28663,42103,30647,30685,30712,30766,30811,30837,34161,30878,30901,34681,30930,30980,31006,31022,25414,31049,38672,18321,49090,31075,31094,31128,34195,32584,46802,31168,22475,33645,42347,31190,47486,31211,22411,47598,49959,31232,32841,31257,26727,39569,42011,31278,31335,49499,35851,39273,31370,43966,34186,21188,33468,37601,29186,31389,31426,42239,40895,22411,31442,31481,31454,31519,31539,30795,31561,31595,33795,38672,48757,39401,38672,30196,28255,39519,43549,31615,23131,34822,47675,31635,36778,22546,47769,31572,26998,46887,39201,31656,18290,31696,31734,31750,31772,31808,31845,31869,31903,37385,31919,31970,26378,18593,32021,48908,39526,44237,32042,32063,32099,48723,41712,26312,41270,26929,22475,32144,22411,32167,44894,26310,32185,46276,40692,44326,31465,20435,32208,32228,32248,32274,32295,32319,32362,32399,32415,28257,28345,26459,32457,32473,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,32509,38672,22098,32530,32548,43771,30190,32600,32630,38672,32616,32654,32662,32678,32690,25344,38672,38672,48277,43215,38672,38672,38672,38672,29732,38672,38672,32706,29731,26036,33631,42208,32724,38438,44280,27268,25375,21272,38672,38672,31985,38672,38672,38672,26576,32745,36837,38672,26929,32766,22475,22475,22475,32810,32857,22411,22411,22690,27419,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,40108,38672,28258,22475,22475,22475,42113,35786,22411,22411,22411,22411,32877,37334,26727,26727,26727,26728,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,32026,38672,26931,22475,22475,46869,22475,22475,33849,22411,22411,39678,22411,22411,33324,26727,26727,41099,26727,26727,32918,41804,38672,38672,38672,38672,38672,30118,38672,22475,22475,22475,42121,33754,33854,22411,22411,48685,22411,31454,26727,26727,26727,46758,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,36404,38672,38672,38672,44299,22475,42143,31823,22411,32169,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,27097,32897,36362,47020,32935,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,25031,38672,38672,43445,32979,32987,33003,33009,33025,33041,33053,25344,38672,38672,38672,43215,38672,38672,29467,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,33069,38672,38672,38672,29641,38672,38672,38672,33103,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,33124,38672,18284,28258,22475,22475,22475,22475,40837,22411,22411,22411,22411,22411,34394,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,33142,38672,33163,42808,38672,42803,38566,22475,22475,37994,22475,22475,33849,22411,22411,47479,22411,22411,33324,26727,26727,31312,26727,26727,41720,33181,38672,38672,34958,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,34949,49071,38672,28255,22475,22475,29048,29442,22411,22411,43834,26485,26727,26727,49882,26998,33184,33200,40222,33234,22991,22475,33277,33313,50063,43479,33349,26727,33377,32128,26313,33405,26648,22985,33423,33443,35387,48797,34523,33492,40922,33514,26312,34036,46959,32375,33535,33554,33575,35236,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,28488,33591,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,32005,38672,38672,33617,38672,38672,38672,30064,38672,30073,38672,30064,33661,30069,38721,42958,22411,33692,33700,33716,25375,38672,38672,25941,29641,33732,20082,38672,38672,38672,38672,38672,26929,22475,22475,22475,33752,25393,22411,22411,23137,22690,26727,26727,26727,49362,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,25615,38672,33770,28258,22475,22475,22475,22475,40491,22411,22411,22411,22411,22411,40736,26727,26727,26727,26727,26727,33787,33803,33407,38672,38672,38672,38672,38672,38672,38672,38672,33819,48351,22475,22475,22475,22475,33849,46363,22411,22411,22411,22411,33324,48523,26727,26727,26727,26727,32918,33802,38672,38672,48282,38672,38672,38672,38672,22475,22475,22475,22475,33840,33854,22411,22411,22411,28403,27851,26727,26727,26727,43360,22521,33795,38672,38672,42813,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,33874,21141,27136,22475,42143,22411,22411,26977,26727,22520,33892,34036,21208,22475,46215,22411,33914,26727,33935,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,42795,38672,22098,25439,25194,32493,40646,40656,38304,38312,33959,33974,33986,34002,34014,25344,38672,38672,38672,49261,33079,38672,38672,23275,34030,34052,38672,34078,34127,34177,34211,38408,34239,34258,29354,34285,25375,38672,38672,36069,29641,38672,34301,38672,38672,38672,34327,24011,26929,47957,34366,22475,34410,34439,34460,34488,32881,44853,22711,39788,26727,49664,34508,39463,38672,28969,45656,28681,19706,18253,38672,26070,26232,47650,46594,28258,42618,22475,45107,34547,44588,22411,34575,22411,34594,34618,34642,27997,26727,35481,34668,34697,32919,33803,38672,38672,38672,44387,34733,34759,38672,38672,38672,26931,34796,22475,22475,22475,34845,34862,31216,22411,22411,37262,22411,34878,31262,26727,26727,28913,26727,34894,33802,38672,34931,35005,30145,35033,35049,30548,35079,26669,35097,35117,35142,44418,22411,35167,35192,43624,31718,26727,43013,39321,47169,35252,30750,31033,38672,35289,35307,35357,32192,22475,35380,35403,34559,22411,35440,35463,30821,35479,35497,35530,35556,35608,38672,38672,24906,47811,35630,37839,28037,35670,48379,27078,35705,48704,22521,26313,33898,38672,35734,27136,22475,42143,22411,22411,26977,26727,22520,28514,35751,26929,35782,35802,36916,32303,49941,26310,49171,22476,22411,26978,48196,35867,35883,35899,35915,42139,28345,26456,28257,28343,26456,35951,36348,35941,33538,36362,36357,34905,35967,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,33252,38672,22098,38672,38672,38672,38672,42922,38672,20573,33260,46302,45557,36019,36031,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,34780,22475,25393,22411,22411,36047,22690,26727,26727,36130,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,20243,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,36066,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,45849,38672,38672,38672,38672,38672,38672,38672,38672,26931,36085,22475,22475,22475,22475,33849,36106,22411,22411,22411,22411,33324,36126,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,19729,38672,22098,38672,39473,38672,44217,36146,36184,36196,36212,36218,36234,36250,36262,25344,38672,36278,38672,43215,38672,25421,18575,38672,27438,38672,38672,46139,36299,48111,34141,26409,36335,39145,44169,36378,36420,36455,38672,29371,36476,38672,27543,38672,36498,35844,31373,34743,36516,40527,36565,29321,36586,36623,36646,22411,36676,29093,36714,29346,28817,43388,36750,36802,37724,36836,38672,38672,38672,26061,38672,38672,38672,38672,38672,28258,36853,42951,22475,36876,38513,34492,36894,36913,40984,22411,43282,35514,28798,26727,43717,26727,36932,33803,38672,38672,36956,38672,38672,18909,32575,38672,38672,26931,22475,22475,41976,35273,36992,33849,22411,22411,45307,44424,37025,33324,26727,26727,40875,39885,37058,32918,33802,34967,38672,38672,32750,38672,38672,38672,22475,38401,22475,22475,28015,33854,34444,22411,22411,22411,27851,26727,37091,26727,26727,22521,33795,37110,34940,38672,46173,45770,29014,37131,22475,22475,37153,29988,22411,22411,37195,37219,26727,26727,36392,46887,38346,38672,39265,26931,22475,37243,42142,22411,37261,28347,26727,37278,22521,26313,38672,37296,38672,27136,22475,37317,22411,48861,26977,26727,48595,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,35925,29395,39608,37350,37371,26459,33538,37783,48331,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,41939,38672,22098,38672,25566,38672,38672,29887,39046,39054,37418,37432,37440,37456,37468,25500,38672,37493,38672,43215,38672,28533,38672,38672,27562,38672,38672,37494,37484,23258,20853,42141,37510,47612,44280,27268,25375,38672,29490,38672,29641,38672,37531,37550,38672,38672,38672,37570,27517,39732,22475,40520,37590,25393,37627,22412,37898,37646,31523,26727,48530,31241,31792,37683,37699,24812,38672,37723,38672,38672,38672,38672,38672,38672,38672,28258,37740,22475,37799,22475,35786,45030,31853,36110,22411,22411,37334,31545,34712,40790,26727,26727,32919,33803,38672,21024,48965,38672,38672,33943,28155,37816,38672,26931,46335,37834,22475,27041,22475,34377,49011,37855,22411,33297,22411,27890,39339,37875,26727,27899,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,48203,38672,38672,38672,26931,29057,22475,42142,32786,22411,28347,22555,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,37895,26977,49110,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,37914,31619,41895,26978,37938,37974,41757,45432,39617,42139,28345,26456,28257,28343,26456,28257,36549,37075,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,25240,38672,24719,38672,46651,38018,25104,38054,38118,38157,38142,38161,38126,38177,38189,25344,38672,45759,49561,49547,38205,49199,38672,38241,38259,34062,38289,38328,38371,38273,38387,38424,38467,39556,38529,27268,25375,40213,38672,38672,38590,21779,38672,38614,38641,21123,43234,38689,38713,41522,39725,26628,22475,25393,38737,22411,29117,22690,32232,31319,26727,38753,34652,38772,35341,38672,38798,38815,38672,38672,40618,38672,38672,38672,38840,33601,40485,22475,38858,22475,35786,47683,38876,40856,22411,22411,37334,32114,26727,42187,26727,26727,32919,33803,38672,38672,38672,38672,24776,38672,36500,33087,26755,48300,22475,22475,22475,46796,41600,49410,22411,22411,22411,38894,29994,47730,26727,26727,26727,46465,44085,32918,33802,38915,38949,38972,38992,38672,39015,39031,44824,39070,29039,39086,28015,33854,39115,39131,22365,39171,27851,40395,48234,48581,49654,22521,39190,33147,39225,26763,39254,38337,41515,31410,48668,36570,39289,44624,49920,36050,39312,46490,26727,39337,39355,46887,39394,38672,20942,22766,22475,39417,21499,22411,39448,25398,26727,39489,22521,47568,38672,38672,46680,45512,39505,42143,39542,32076,39585,39633,39657,35567,35614,26929,29075,42144,39674,26975,39694,26310,35759,35126,47451,29414,27465,39712,39748,39776,39804,46246,41657,47873,28257,28343,26456,28257,28345,26459,39839,39865,36357,34905,30398,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,39901,22098,38672,30368,39922,38672,45211,39942,39950,39966,39980,39988,40004,40016,25344,35063,40032,40048,40074,25784,40124,38672,40160,20023,50351,40199,40238,40274,40312,49237,40347,40363,36660,40411,40427,25375,38672,40443,18661,36161,37534,38672,18669,43864,38672,38672,44690,26929,22475,37009,40470,40507,25393,22411,40543,31503,45950,26727,47993,40578,40601,30990,39463,38672,44715,38672,38672,40617,29165,40634,41441,21201,19353,22907,40672,45368,47429,22475,22475,40708,37034,28896,40724,22411,47891,41633,40762,35506,40782,26727,47175,32919,22394,40806,38672,38654,32566,38672,38672,38672,38672,48740,26931,22475,38860,22475,40833,22475,33849,22411,41060,22411,40853,22411,33324,26727,38756,26727,40872,26727,32918,33802,38672,38672,20973,45998,38672,38672,38672,22475,22475,22475,22475,22458,40891,22411,22411,22411,22411,40911,26727,26727,26727,26727,22501,33795,23174,18332,38672,38672,38672,40938,22475,40962,22475,40684,22411,40981,22411,31782,26727,49841,26727,26998,28442,38672,38672,38672,26931,41e3,41019,42142,41039,41057,28347,41076,41095,22521,44039,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,34915,34036,27330,41115,29084,41137,35817,26727,27724,35759,41154,41218,41701,41262,41286,47258,44155,39617,42139,28345,26456,28257,28343,26456,28257,28345,28115,33538,27862,36357,34905,46290,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,26904,22098,38672,38672,41323,22275,41345,40139,38672,26358,41381,41394,41410,41422,25344,38672,38672,45842,43215,38672,38672,38672,41438,50256,38672,22231,41440,45848,38672,34773,41457,34829,39879,41487,27268,25375,38102,38672,38672,29641,38672,41538,41554,33261,38672,38672,36430,26929,41579,35101,34846,45533,41616,41649,40556,45401,41673,41736,41773,26727,41789,40746,42656,41831,38672,41855,41875,32532,32708,46542,38672,38672,38672,38672,28258,22475,22475,41594,22475,35786,22411,22411,22411,41893,22411,37334,26727,26727,37094,26727,26727,32919,27373,41911,29299,38672,38672,38672,41935,25466,38672,41955,26931,22475,41121,41974,22475,22475,34152,22411,46370,41992,22411,22411,30778,26727,31887,42009,26727,26727,32918,33802,38243,38672,38672,38672,38672,38672,38672,22475,22475,48461,22475,28015,42027,22411,22411,42047,22411,37764,26727,26727,48819,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,22208,38672,18340,22475,22475,42142,22411,22411,28347,26727,26727,28175,42067,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,30944,42088,42137,42160,42180,48196,42203,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,31078,38672,38672,32435,32438,32441,42224,25897,46967,28280,42275,42293,31579,27268,42319,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,46624,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,41023,22411,22411,22411,22411,22411,42864,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,42345,42143,29941,22411,26977,42363,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,44743,22177,38672,38672,27385,38672,45876,42383,22121,42412,42425,42433,42449,42461,25344,38672,32955,42527,43215,18706,42477,42499,33244,42519,38672,42543,40174,42559,42580,42605,42641,42672,40377,42708,42766,25375,38672,38672,38672,42829,42880,42911,43973,27961,38672,38672,23013,42938,22475,42974,41003,39432,42995,32861,22411,36698,35176,43029,43292,26727,43049,43082,43138,38672,38672,38672,25328,43172,43191,38672,43210,28234,38672,43231,48341,22475,43250,22475,22325,43268,47118,39174,22411,22411,43316,43332,43358,40585,26727,37280,43376,43410,33803,38672,38672,41815,45184,39238,30360,38672,43434,50186,43461,43495,48777,43514,43538,22475,43573,43599,31640,43617,43640,22411,43666,43692,49367,43710,43733,26727,47922,33802,43767,38672,38672,43787,43812,38672,43850,50024,43886,43557,22475,28015,33854,43908,34242,22411,22411,27851,46470,43935,44079,26727,39658,43953,38672,43989,21331,38672,38672,33824,22475,22475,49385,34223,22411,22411,22411,44011,26727,26727,26727,44027,46887,19958,38672,38672,50007,22475,22475,28197,22411,22411,44066,26727,26727,44101,26313,20872,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26890,47793,44124,44140,44185,44209,20435,28340,26976,33389,44233,44253,44277,44296,28343,26456,28257,28345,26459,44315,44342,38482,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,18636,22098,44386,29857,38069,44372,44403,44440,44464,44480,44494,44510,44526,44538,25344,44554,46908,38672,40088,38672,38672,41365,38672,43156,26783,26781,47212,47203,34311,44573,42979,44618,41232,44280,27268,44640,44676,38672,44712,29827,28456,38672,38672,38672,44731,44769,38672,40058,44785,40965,44822,22475,44840,44869,48063,22411,22690,39155,44892,44910,26727,30990,39463,38672,44931,38672,44950,44971,38672,38672,38672,38672,38672,44987,28258,45008,41301,22475,22475,37611,28054,22411,45028,22411,22411,45046,30301,30320,26727,26727,28093,30742,33803,38672,38672,45072,32638,30075,38672,46548,37818,38672,42396,22475,22475,47037,45094,33476,49452,22411,22411,49585,32047,36630,35654,26727,26727,39696,33919,26493,44108,45157,32514,38672,49604,38672,38672,38672,45200,22475,22475,43892,45227,28015,33854,22411,41993,40562,22411,27851,26727,26727,32834,45248,22521,33795,38672,22295,45267,19361,38672,28255,36090,22475,45286,43473,42051,22411,45304,43005,43694,26727,49877,26998,46887,38672,50299,46144,45323,22475,22475,42142,22411,22411,28347,26727,26727,49054,26313,45345,36168,40817,45367,22475,45384,22411,30669,26977,26727,45417,45465,36482,45500,45528,32279,22411,44261,26727,45549,35759,34423,35689,37179,48196,20435,28340,26976,27310,33427,47309,26456,32258,46222,29141,45599,45573,45589,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,42503,22098,38672,38672,19843,38672,45632,29682,29695,45672,45688,45703,45719,45731,25344,25697,36820,25484,43215,48936,33218,45747,38933,25691,45794,45830,45905,45865,45892,45921,30595,45937,41471,45980,45966,25375,45996,46014,46030,34093,38672,38672,46051,24794,46090,46124,46160,46201,46238,46262,46318,46334,46351,46386,26710,46424,30615,39597,40389,46450,46486,30259,41502,46506,46564,38672,46591,46610,46646,38672,45270,33165,46667,46703,46719,46781,46818,46866,45012,35786,47344,42692,28076,22411,34531,37334,42303,43342,43676,26727,37661,41688,46885,38672,46904,39209,44660,46924,28976,46946,38672,30957,20847,49903,46983,47036,22475,47053,33288,31829,47089,22411,22411,47105,35219,43394,47140,26727,26727,47156,32918,33802,47191,38672,41877,37707,38672,50210,38598,47237,45288,47274,47290,28015,43827,47306,47325,28394,29934,30696,36786,37667,47360,43033,22521,43418,47376,50112,38672,38355,49147,28255,47399,22475,22475,47445,47467,34602,22411,47502,47526,50046,26727,47556,46887,36283,49516,38672,48840,29206,44799,47584,47703,30662,30727,45251,31880,34269,39367,47647,38672,49567,38494,40946,47666,47699,47719,39849,48630,47746,32945,47785,47809,47827,47850,47889,47907,48880,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,49752,49772,47949,47973,48009,48038,49034,30862,33538,36362,36357,47933,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,48079,38672,38672,48107,38672,19671,30510,30518,48127,30518,30526,48143,48155,25344,38672,38672,38672,44955,38672,29647,38672,38672,38672,38672,29652,46888,38672,38672,45329,35643,48171,30851,45141,48219,48262,38672,38672,38672,29641,38672,38672,50200,50208,38672,38672,38672,48298,33458,22475,22475,22475,48316,48375,22411,22411,28301,37203,26727,26727,26727,30914,41169,48395,38672,34989,34103,38672,38672,38672,48429,38672,34985,36969,28258,49732,31174,47066,48458,46734,22411,37326,35682,48477,41625,48513,26727,48546,48566,33498,48611,32919,33803,38672,32557,38672,48646,38672,38672,38672,19786,38672,26931,22475,48666,22475,22475,22475,32777,22411,48684,22411,22411,22411,31945,26727,48701,26727,26727,26727,32918,33361,38672,45778,38672,38672,38672,38672,41194,35417,22475,22475,22475,28015,42844,22411,22411,22411,22411,27851,48720,26727,26727,26727,22521,33795,48739,38672,38672,48756,38672,35766,48773,22475,22475,45119,48793,22411,42164,43122,48813,26727,43937,26998,46887,48835,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,43522,42144,48856,26975,48877,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,20436,32151,30885,28257,28345,26459,33538,22735,48896,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,48924,48962,36314,45181,38672,50538,38672,45169,48959,38038,34111,48981,48993,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,27525,42141,49009,31292,44280,27268,25375,38672,36812,40252,29641,38672,38672,38672,38672,43194,38672,38672,26929,45232,22475,37800,22475,25393,49027,22411,46850,22690,27979,26727,26727,49050,30990,39463,38672,38672,38672,38672,38672,38672,49070,38672,38672,49087,38672,28258,22475,49810,22475,22475,35786,22411,22411,34386,22411,22411,37334,26727,26727,49106,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,49126,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,49146,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,49163,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,49187,38672,21516,38672,20816,49222,49253,38672,49277,49291,49304,49320,49332,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,31934,32212,26453,47540,49348,25375,38672,38672,38672,29641,38672,38672,38672,43175,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,35291,38672,38672,38672,36319,22475,22475,22475,22475,22475,31707,22411,22411,22411,22411,22411,45130,26727,26727,26727,26727,26727,32918,33802,38672,38842,38672,38672,38672,38672,38672,22475,22475,49383,22475,49401,33854,22411,42856,22411,47124,27851,26727,41079,26727,26727,49426,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25610,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,41202,49468,49480,25344,38672,38672,38672,43215,49496,38672,49515,38672,38672,46071,46074,38672,49532,28993,37922,42141,49583,32824,44280,27268,25375,38672,38672,46108,29641,46524,46533,49601,38672,38672,38672,38672,26929,22475,22475,49620,37001,25393,22411,29448,22411,49639,26727,26727,48625,36734,30990,43097,49680,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,49703,38672,38672,26931,22475,22475,49727,22475,22475,48053,22411,22411,49748,22411,22411,46748,26727,26727,49768,26727,26727,32918,33802,20903,38672,38672,38672,38672,38672,38672,22475,49788,22475,22475,28015,33854,26700,22411,22411,22411,27851,42367,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,45477,38672,38672,43215,38672,38672,49711,38672,38672,38672,49707,38672,38672,27156,49805,37753,37630,26453,49986,49826,25375,38672,20236,38672,29641,38672,38672,38672,38672,38672,38672,28133,26929,22475,22475,22475,47834,25393,22411,22411,22411,49862,26727,26727,26727,37879,30990,39463,38672,45808,38672,38672,38672,38672,38672,38672,29514,38672,38672,28258,49898,22475,31756,22475,35786,22411,49919,22411,36688,22411,37334,40766,26727,26727,49936,26727,32919,33803,38672,25655,38672,38672,38672,38672,38672,38672,38672,26931,22475,37984,22475,22475,22475,35151,22411,46398,22411,22411,22411,43919,26727,31302,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38999,38672,22475,22475,26805,22475,49623,33854,22411,22411,49957,22411,49975,26727,26727,47510,26727,49846,33795,38672,38672,18612,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,30025,38672,38672,50002,26931,50023,22475,27060,22411,22411,28347,50040,26727,22521,26313,38672,40323,38672,27136,29066,42143,22411,50062,26977,27488,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,41360,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,34339,19585,19583,40183,33676,50079,27766,27768,50110,33673,34350,50128,50140,20832,38672,38672,38672,43215,38672,38672,25515,38672,38672,38672,38672,38672,38672,38672,18953,20613,18794,19200,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,18475,50434,18503,18525,50156,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,20273,38672,42922,31104,31112,50226,50240,50248,42483,50272,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,25547,38672,38672,25544,18953,18958,18794,35998,18531,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,42589,38672,38672,38672,38672,24842,35017,50315,50319,50335,50343,43995,50367,20832,38672,38672,38672,43215,38672,38672,25359,38672,38672,23171,38672,38672,38672,23167,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19075,50434,18503,18525,50409,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,38672,38672,38672,38672,38672,38672,24860,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,22230,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,36544,22411,22411,22411,33858,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38956,38672,38672,29796,50456,50460,50460,50482,38955,50476,50498,38672,38672,38672,38672,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,38672,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,18475,50434,18503,18525,50156,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,50527,20452,20468,20484,20497,50424,20500,20516,26100,20548,20592,20589,50171,18953,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,94505,94505,90408,90408,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,1,12290,94505,94505,94505,94505,94505,94505,94505,94505,94505,0,94505,90408,94505,94505,94505,94505,94505,94505,94505,94505,94505,364,94505,90408,94505,94505,94505,94505,94505,94505,94505,69632,73728,94505,94505,94505,94505,94505,65536,94505,3,0,0,2183168,0,0,0,90408,94505,298,299,0,2134016,302,303,0,0,0,0,0,1636,0,0,0,0,0,0,0,0,0,1645,0,0,2732032,0,0,0,0,0,0,0,0,0,0,2904064,2908160,0,0,0,0,0,1699,0,0,0,0,0,0,0,0,0,0,0,2963,0,0,0,0,0,2424832,0,0,0,0,0,0,0,0,0,0,0,0,2625536,0,0,0,0,0,2045,0,0,0,0,2049,0,0,0,0,0,0,0,2711,0,0,0,0,0,0,0,0,0,2976,0,534,534,534,534,534,2699264,2715648,0,0,2772992,2805760,2830336,0,2863104,2920448,0,0,0,0,0,0,0,303,303,303,303,0,303,303,303,303,0,2805760,2920448,0,0,0,0,0,2920448,0,0,0,0,0,0,0,2732032,0,2179072,2179072,2179072,2179072,2424832,2433024,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3125248,2625536,2179072,2179072,2179072,2179072,2179072,2179072,2699264,2179072,2715648,2179072,2723840,2179072,2732032,2772992,2179072,2125824,2125824,2125824,2125824,2125824,2592768,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2551808,2125824,2125824,2125824,2125824,2125824,2637824,2125824,2179072,2179072,2805760,2179072,2830336,2179072,2179072,2863104,2179072,2179072,2179072,2179072,2920448,2179072,2179072,2179072,0,0,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,0,2502656,0,0,3010560,0,0,0,0,2990080,2179072,2179072,2699264,2125824,2715648,2125824,2723840,2125824,2732032,2772992,2125824,2125824,2125824,2805760,2125824,2830336,2125824,2125824,2863104,2125824,2125824,2125824,2125824,2920448,2863104,2125824,2125824,2125824,2125824,2920448,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,1142784,0,2179072,2125824,2125824,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,975,2125824,0,0,0,0,0,0,2510848,2514944,0,0,2547712,2596864,0,0,0,0,0,0,735,0,0,0,0,735,0,741,0,0,0,2789376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3137,0,0,2142208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2733,0,2662400,0,2813952,0,0,0,0,2375680,0,0,0,0,0,0,0,0,0,350,351,352,0,0,0,0,2584576,0,0,0,0,2838528,0,0,2838528,0,0,0,0,0,0,0,0,1122,0,0,0,0,0,0,0,0,0,0,1186,0,0,0,0,0,0,0,2891776,0,0,0,0,0,2392064,2412544,0,0,2838528,0,0,0,0,0,0,262144,0,0,0,0,0,0,0,0,0,0,706,0,0,0,0,0,0,0,0,2179072,2179072,2179072,2408448,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,0,2126724,2126724,2617344,2179072,2179072,2179072,2179072,2179072,2179072,2662400,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2584576,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2801664,2813952,2179072,2838528,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,1798,2125824,2125824,2125824,2408448,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2662400,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2801664,2813952,2125824,2838528,2125824,2813952,2125824,2838528,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3125248,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,2822144,0,0,2883584,0,0,0,0,0,0,0,0,0,0,3080192,3100672,3104768,0,0,0,0,3186688,0,0,0,0,0,0,0,0,0,0,305,306,0,0,0,0,0,0,2797568,0,0,0,0,0,0,0,2850816,2867200,0,0,2883584,0,0,0,0,0,2072,0,0,0,0,0,0,0,0,0,0,0,3134,0,0,0,0,2465792,0,0,2719744,0,0,0,0,0,0,0,0,0,0,3014656,3207168,0,2691072,0,0,3215360,0,0,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2179072,2179072,2179072,2179072,2179072,2461696,2465792,2179072,2179072,2179072,2179072,2179072,2179072,2523136,2179072,2179072,2179072,0,1342,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,2473984,2478080,2179072,2179072,2179072,2179072,2179072,2179072,2600960,2179072,2179072,2179072,2179072,2641920,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,1047,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3035136,2125824,2125824,3072e3,2125824,2125824,2125824,3121152,2125824,2125824,3141632,2125824,2125824,2125824,3170304,2179072,2179072,2719744,2179072,2179072,2179072,2179072,2179072,2768896,2777088,2781184,2797568,2822144,2179072,2179072,2179072,0,900,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,298,0,299,0,302,0,303,0,0,0,2473984,2478080,2179072,3063808,2179072,2179072,2179072,2179072,3100672,2179072,2179072,3133440,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2551808,2179072,2179072,2179072,2179072,2179072,2637824,2179072,2179072,2179072,2179072,3207168,2179072,0,0,0,0,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,2125824,2125824,2125824,2408448,2125824,2125824,2125824,2719744,2125824,2125824,2125824,2125824,2125824,2768896,2777088,2781184,2797568,2822144,2125824,2125824,2125824,2883584,2179072,2912256,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3039232,2125824,2912256,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3039232,2125824,2125824,0,2125824,2126799,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,245760,0,0,2179072,2125824,2125824,3063808,2125824,2125824,2125824,2125824,2125824,3100672,2125824,2125824,3133440,2125824,2125824,2125824,2125824,2125824,2125824,0,2179072,2125824,2125824,2457600,2179072,2179072,2179072,2179072,2457600,2125824,2125824,2125824,3207168,2125824,0,0,0,0,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,1894,2125824,2125824,2125824,2408448,2125824,2125824,2125824,2125824,2125824,3207168,2125824,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,0,2486272,0,0,0,0,0,2678784,2854912,3006464,0,2924544,0,0,0,0,0,0,0,0,0,3162112,3170304,0,0,3219456,3035136,0,0,0,0,0,3072e3,2650112,0,0,2809856,0,0,0,0,0,0,0,1650,0,0,0,0,0,0,1654,0,2686976,2736128,0,0,2531328,2707456,0,3190784,0,0,2576384,0,0,0,0,0,0,0,1688,0,0,0,0,0,0,0,0,0,2742,0,0,0,0,0,0,0,3121152,3141632,0,0,0,2924544,0,2682880,0,0,0,0,0,0,3112960,2387968,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2453504,2179072,2473984,2482176,2179072,2179072,2179072,0,901,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,0,2179072,2125824,2125824,2179072,2179072,2179072,2531328,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2605056,2179072,2629632,2179072,2179072,2179072,2179072,2179072,2125824,2527232,2125824,2125824,2125824,2125824,2125824,3092480,2125824,2527232,2125824,2650112,2179072,2179072,2179072,2707456,2179072,2736128,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2887680,2179072,2125824,2125824,2125824,2125824,2441216,0,0,0,0,0,0,0,0,0,2932736,2179072,2924544,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3035136,2179072,2179072,3072e3,2179072,2125824,2658304,2973696,2125824,2125824,2658304,2973696,2125824,2711552,256e4,2179072,256e4,2125824,256e4,2125824,2125824,2125824,2125824,2125824,3223552,975,0,2125824,2125824,2416640,2125824,2125824,2125824,2445312,2125824,2125824,2125824,2125824,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,1047,0,0,2179072,2125824,2125824,2179072,3121152,2179072,2179072,3141632,2179072,2179072,2179072,3170304,2179072,2179072,3190784,3194880,2179072,0,0,0,0,0,0,1134592,0,0,0,0,0,0,0,0,0,0,1134592,2125824,2125824,3190784,3194880,2125824,0,0,0,0,0,0,2387968,2125824,2125824,2125824,2420736,2125824,2125824,2125824,2125824,2125824,2453504,2125824,2707456,2125824,2736128,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2887680,2125824,2125824,2924544,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3141632,2125824,2125824,2125824,3170304,2125824,2125824,3190784,3194880,2125824,2179072,2125824,2125824,2179072,2125824,2125824,2179072,2125824,2125824,2985984,2985984,2985984,0,0,0,0,0,0,0,69632,73728,0,419,419,0,0,65536,419,2179072,3112960,3219456,2125824,2125824,3112960,3219456,2125824,2125824,3112960,3219456,0,0,0,0,0,0,0,1701,0,0,0,0,0,0,0,0,0,1624,0,0,0,0,0,0,0,3022848,0,0,3145728,0,3203072,0,0,0,0,0,0,0,0,0,0,335,336,0,0,0,0,0,0,0,0,3067904,0,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0,0,0,2445312,0,2842624,0,0,0,2637824,0,0,0,0,2621440,0,0,0,0,0,2100,0,0,0,0,0,0,0,0,0,0,0,2727936,0,0,0,3084288,3182592,2899968,0,2961408,0,0,2179072,2179072,2416640,2179072,2179072,2179072,2445312,2179072,2179072,2179072,0,901,2126724,2126724,2126724,2126724,2126724,2425732,2433924,2126724,2126724,2126724,2126724,2458574,2126798,2126798,2126798,2126798,2183168,0,0,0,0,0,0,0,396,0,0,0,0,0,396,0,0,2179072,2179072,2179072,2727936,2752512,2179072,2179072,2179072,2842624,2846720,2179072,2895872,2916352,2179072,2179072,2945024,2179072,2179072,2994176,2179072,3002368,2179072,2179072,3022848,2179072,3067904,3084288,3096576,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,237568,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2605056,2125824,2629632,2125824,2125824,2650112,2125824,2125824,2125824,2707456,2125824,2736128,2125824,2125824,2125824,2125824,2179072,2179072,2179072,3223552,0,0,2125824,2125824,2416640,2125824,2125824,2125824,2445312,2125824,2125824,2125824,2125824,2125824,2600960,2125824,2125824,2125824,2125824,2641920,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3010560,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2940,0,2637824,2125824,2125824,2125824,2125824,2727936,2752512,2125824,2125824,2125824,2125824,2842624,2846720,2125824,2895872,2916352,2125824,2125824,2125824,2125824,2945024,2125824,2125824,2994176,2125824,3002368,2125824,2125824,3022848,2125824,3067904,3084288,2125824,3096576,2125824,2125824,0,0,0,2928640,0,0,0,3059712,0,2543616,2666496,0,2633728,0,0,0,0,0,0,766,767,0,0,0,754,0,0,774,0,2179072,2179072,2179072,2494464,2179072,2179072,2514944,2179072,2179072,2179072,2543616,2547712,2179072,2179072,2596864,2179072,2126724,2126724,2126724,2126724,2126724,2593668,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126798,0,0,0,0,0,0,2510848,2514944,0,0,2547712,2596864,0,0,0,0,0,0,1164,0,0,0,0,0,0,0,0,0,0,1564,0,1566,0,0,0,2179072,2179072,3059712,2179072,2179072,2179072,2179072,2179072,2179072,3178496,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2928640,2125824,2125824,2125824,2998272,2125824,2125824,2125824,2125824,3059712,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3178496,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3010560,2125824,2125824,2125824,2125824,2125824,2502656,2125824,2125824,2125824,2494464,2125824,2125824,2514944,2125824,2125824,2125824,2543616,2547712,2125824,2125824,2596864,2125824,2125824,2125824,2125824,2125824,3059712,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3178496,2179072,2125824,2125824,2179072,2126724,2126724,2126798,2126798,2441216,0,0,0,0,0,0,0,0,0,2932736,2965504,0,0,3076096,0,0,2695168,3174400,2646016,2613248,2703360,0,0,0,0,2977792,0,0,3047424,3129344,0,2981888,2396160,0,3153920,0,0,0,2740224,0,0,0,0,0,0,1106,0,0,0,0,0,0,0,0,0,334,0,0,0,0,0,0,0,0,2793472,0,0,0,0,0,2469888,2506752,2756608,0,0,2580480,0,0,0,0,0,0,1146880,0,1146880,0,0,0,0,0,0,0,302,302,302,302,0,302,302,302,302,0,2396160,2400256,2179072,2179072,2441216,2179072,2469888,2179072,2179072,2179072,2519040,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,241664,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3223552,2179072,2125824,2125824,2179072,2179072,2125824,2125824,2125824,2588672,2179072,2613248,2646016,2179072,2179072,2695168,2756608,2179072,2179072,2179072,2932736,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,245760,2125824,2125824,2125824,2125824,2125824,2125824,2584576,2125824,2125824,2125824,2125824,2125824,2617344,2125824,2125824,2125824,2125824,2125824,2125824,2662400,2179072,2179072,2179072,3129344,2179072,2179072,3153920,3166208,3174400,2396160,2400256,2125824,2125824,2441216,2125824,2469888,2125824,2125824,2125824,2519040,2125824,2125824,2125824,2125824,2125824,2519040,2125824,2125824,2125824,2125824,2588672,2125824,2613248,2646016,2125824,2125824,2695168,2756608,2125824,2125824,2125824,2125824,2932736,2125824,0,3108864,3198976,0,0,3043328,0,3149824,2936832,0,2760704,3132,0,0,0,0,534,534,534,534,534,534,534,534,534,534,534,3503,2953216,0,0,2826240,3158016,2428928,0,3018752,2764800,2572288,0,0,3051520,2179072,2428928,2437120,2179072,2486272,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2654208,2678784,2760704,2764800,2854912,2969600,2179072,3006464,2179072,3018752,2179072,2179072,2179072,3149824,2125824,2428928,2437120,2125824,2486272,2125824,2125824,2125824,2125824,2125824,2654208,2678784,2760704,2764800,2785280,2854912,2969600,2125824,3006464,2125824,3018752,2125824,2125824,2125824,2125824,3149824,2179072,3051520,2125824,3051520,2125824,3051520,0,2490368,2498560,0,0,0,0,2875392,0,0,0,3132,0,0,2834432,0,3227648,2568192,2564096,0,2940928,2179072,2179072,2498560,2179072,2179072,2179072,2555904,2564096,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3137536,2125824,2125824,2125824,2125824,2457600,2125824,2125824,2125824,2125824,2183168,0,0,0,0,0,0,0,333,0,0,0,0,0,333,0,0,2125824,3137536,2125824,2125824,2498560,2125824,2125824,2125824,2555904,2564096,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3132,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,2126725,2125824,2125824,2125824,2502656,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3010560,2179072,2179072,2125824,2125824,2502656,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3010560,2179072,2179072,2126724,2126724,2503556,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2592768,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3117056,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2928640,2179072,2179072,2179072,2998272,2179072,2179072,3031040,0,0,0,2179072,2449408,2179072,2535424,2179072,2609152,2179072,2859008,2179072,2179072,2179072,3031040,2125824,2449408,2125824,2535424,2125824,2609152,2125824,2859008,2125824,2125824,2125824,3031040,2125824,2125824,2449408,2125824,2125824,2125824,2125824,2461696,2465792,2125824,2125824,2125824,2125824,2125824,2125824,2523136,2125824,2125824,2125824,298,0,0,0,298,0,299,0,0,0,299,0,302,2125824,2125824,2125824,3026944,2404352,2125824,2125824,2125824,2125824,3026944,2539520,0,2949120,2179072,2658304,2973696,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,452,452,111044,452,452,452,452,452,452,452,452,452,452,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,452,111044,111044,111044,111044,111044,0,0,0,0,0,0,0,0,0,360,0,0,0,0,0,360,3,0,0,2183168,0,0,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,2124,0,0,0,0,0,534,534,534,534,534,847,534,534,861,534,534,0,302,118784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3127,0,0,0,302,0,0,0,302,119197,73728,0,0,0,0,0,65536,0,0,0,0,0,2403,0,0,0,0,0,0,0,0,0,0,302,302,0,0,0,0,302,302,302,302,302,302,0,0,0,0,0,302,0,302,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2966,0,3,0,0,2183168,0,0,0,0,0,33396,299,0,2134016,49784,303,0,0,0,0,0,2428,0,0,0,0,0,0,0,0,0,0,0,172032,0,0,0,0,0,0,0,0,0,298,0,0,0,302,0,0,0,2424832,2433024,0,0,2457600,2105631,12290,3,0,0,293,0,0,0,0,293,0,0,0,0,0,0,0,2024,0,0,0,0,0,0,0,0,0,2455,0,0,0,0,0,0,0,0,0,0,122880,122880,122880,122880,122880,122880,122880,122880,122880,0,0,122880,0,0,0,0,0,0,0,0,0,0,0,785,0,790,0,793,0,0,0,122880,0,122880,122880,122880,0,0,0,0,0,122880,0,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,0,0,122880,0,0,0,0,0,0,0,0,122880,0,0,0,0,0,0,0,0,0,0,0,0,1216,0,0,0,0,147456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3148,0,0,0,0,1067,1071,0,0,1075,1079,0,2424832,2433024,0,0,2457600,0,0,0,131072,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,2479,2437,0,0,0,0,0,2484,0,0,0,0,0,0,1675,0,0,0,0,0,0,0,0,0,0,3260,0,0,534,534,534,131072,0,0,131072,131072,0,0,0,0,0,0,0,131072,0,0,131072,0,0,131072,0,0,0,0,0,135168,135168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225708,0,0,0,135168,0,0,135168,0,0,0,0,0,0,0,0,0,0,0,1096,0,0,0,0,0,0,0,135168,0,135168,135168,135168,135168,135168,135168,0,135168,135168,135168,135168,135168,135168,0,0,0,0,0,135168,0,135168,1,12290,3,0,0,2183168,0,0,0,0,0,629,630,0,2134016,633,634,0,0,0,0,0,2725,0,0,0,0,0,0,0,0,0,0,0,2200245,2200245,2200245,0,0,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,1434,2125824,2125824,2125824,2125824,2932736,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3129344,2125824,2125824,3153920,3166208,3174400,2506752,2506752,2506752,0,303,139264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,266240,0,0,0,0,0,303,0,0,0,303,69632,139681,0,0,0,0,0,65536,0,0,0,0,0,2738,0,0,0,0,0,0,0,0,0,0,0,2013,0,0,0,0,303,303,303,303,303,303,0,0,0,0,0,303,0,303,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,0,300,3,0,0,2183168,0,0,0,0,0,298,33399,0,2134016,302,49787,0,0,0,0,0,2763,534,534,534,534,534,534,534,534,534,534,556,556,3020,556,556,556,61440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,360,300,300,300,143660,370,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,143660,300,300,143660,300,300,300,143730,300,300,300,143730,69632,73728,300,300,143660,300,300,65536,300,300,0,0,300,300,143660,300,300,300,300,300,300,300,300,300,365,300,0,143660,300,300,300,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,300,300,143660,300,300,300,300,300,300,300,300,300,300,300,143730,300,300,300,300,300,300,300,300,143660,143660,143660,143660,143660,143660,143660,143660,143660,300,300,300,300,300,300,300,300,143660,300,143660,143660,143660,143660,300,143660,143660,143660,143660,143660,143660,300,0,300,0,300,300,300,143660,300,143660,143660,143660,143660,143660,143730,143660,143730,143730,143730,143730,143730,143730,143660,143660,143660,143660,143660,143660,143660,143660,1,12290,0,0,0,0,2200245,2200245,0,0,0,0,0,0,0,0,0,0,0,1153,1154,0,0,0,0,0,0,155648,155648,0,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,0,0,0,0,155648,0,0,0,0,0,155648,155648,0,155648,155648,0,12290,0,0,0,0,155648,0,155648,0,0,0,0,0,155648,0,0,0,0,0,0,1148,0,0,0,0,0,0,0,0,1157,3,0,0,2183168,126976,0,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,2934,0,0,0,0,0,0,0,0,0,0,0,2446,0,0,0,0,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,163840,159744,159744,159744,159744,0,0,159744,0,0,0,0,0,0,0,0,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,163840,159744,159744,159744,159744,159744,0,0,0,0,0,0,0,0,0,364,0,0,0,0,131072,131072,25155,0,0,0,159744,0,0,0,25155,25155,25155,159744,25155,25155,25155,25155,25155,25155,25155,159744,159744,159744,159744,25155,159744,25155,1,12290,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,24576,975,2125824,2125824,2125824,2125824,3092480,0,0,0,2404352,2179072,2179072,2179072,2179072,3026944,2404352,2125824,2125824,2125824,2125824,2592768,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2449408,0,2535424,2125824,2609152,2125824,2859008,2125824,2125824,2125824,3031040,2125824,2527232,0,0,0,2179072,2527232,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,1,12290,167936,167936,167936,0,0,167936,0,0,0,0,0,0,0,0,167936,167936,167936,167936,167936,167936,167936,167936,0,0,0,0,0,0,0,0,0,364,0,0,0,0,155648,0,172032,172032,0,172032,0,0,172032,172032,0,172032,0,0,0,0,172032,172032,0,0,0,0,0,0,0,0,0,0,172032,0,0,0,172032,172032,0,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,0,0,0,0,0,0,0,0,0,364,0,292,0,0,0,0,1,288,3,0,0,0,294,0,0,0,0,0,0,0,0,0,0,348,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,1,0,176128,176128,176128,0,0,176128,0,0,0,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,176128,0,0,0,0,0,0,0,0,0,364,0,292,0,0,0,347,3,78114,78114,292,0,627,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,2946,0,0,0,0,0,0,0,0,0,0,0,245760,0,0,0,0,78114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,672,0,1102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155648,0,0,0,0,1146,0,0,0,0,1151,0,0,0,0,0,0,0,346,0,404,0,0,0,0,0,404,0,0,0,2098,0,0,0,0,0,0,0,0,0,0,0,0,0,2717,0,0,534,2135,534,534,534,534,534,534,534,534,534,534,534,2147,534,534,534,534,534,534,1775,534,534,534,1780,534,534,534,534,534,534,534,2545,534,534,534,534,534,534,0,2549,2220,556,556,556,556,556,556,556,556,556,556,556,2232,556,556,556,556,556,556,2590,556,556,556,556,556,556,2598,556,556,2307,580,580,580,580,580,580,580,580,580,580,580,2319,580,580,580,0,0,0,2006,0,1069,0,0,0,2008,0,1073,0,2573,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1396,0,0,2955,0,0,0,2959,0,0,0,0,0,0,0,0,0,0,371,0,0,372,0,0,0,534,3150,534,534,534,3153,534,534,534,534,534,534,534,534,534,534,2547,534,534,534,0,0,3161,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,556,556,556,556,580,3206,580,580,580,3209,580,580,580,580,580,580,580,580,2679,580,580,580,534,580,556,534,580,580,3217,580,580,580,580,580,580,580,580,580,580,580,580,580,534,580,556,534,580,580,3309,580,580,580,580,3310,3311,580,580,580,580,580,580,580,580,2875,580,580,580,580,580,580,580,580,3071,580,580,580,580,580,580,580,580,3233,580,580,580,580,534,580,556,1993,534,534,534,1997,556,556,556,2001,534,534,534,3339,534,534,534,534,534,534,3345,534,534,534,534,556,3407,556,3409,556,556,556,556,556,556,556,556,1373,556,556,556,556,556,556,556,3364,556,580,580,580,580,580,580,3370,580,580,580,580,580,580,3376,580,580,580,3380,580,534,556,580,0,0,0,0,0,0,0,0,0,2925,0,0,0,0,0,3132,0,0,0,0,3391,534,534,534,534,534,534,534,534,534,534,534,2198,534,2200,534,534,534,534,534,534,3406,556,556,556,556,556,556,556,556,556,556,556,556,26009,1341,975,580,556,556,556,556,3422,580,580,580,580,580,580,580,580,580,580,580,1449,580,580,580,580,580,580,580,3522,580,580,580,580,580,580,580,580,580,0,0,0,534,534,534,534,3585,534,556,556,3,78114,78114,292,0,0,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,2973,0,0,2975,0,0,534,534,2980,534,534,534,534,534,534,2532,534,534,534,534,534,534,534,534,534,534,2793,534,534,534,534,534,0,0,0,304,0,0,0,0,0,0,0,0,0,0,0,0,0,2732,0,0,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,0,192965,0,1,12290,192965,192965,192965,0,0,192965,0,0,0,0,0,0,0,0,0,0,0,1201,0,0,0,0,0,0,0,0,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,0,192965,192965,192965,192965,192965,0,0,0,0,0,0,0,0,0,364,0,304,0,0,0,0,0,0,0,0,196608,0,0,0,0,0,0,0,0,0,0,0,0,1582,0,0,0,301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,727,406,406,406,406,406,406,0,0,0,0,0,406,0,406,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,118784,298,3,78114,78114,292,0,0,0,0,0,298,299,0,301,302,303,0,0,0,0,0,3142,0,0,0,0,0,0,0,0,0,0,0,2978,534,534,534,534,0,0,0,0,733,406,0,0,0,0,0,0,0,0,0,0,0,1240,0,0,0,1244,0,0,1175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2871296,0,0,1171,1171,0,0,0,1175,1650,0,0,0,0,0,0,0,0,0,364,0,253952,0,0,0,0,580,580,580,1540,2005,0,0,0,0,1546,2007,0,0,0,0,1552,0,0,0,1558,0,0,0,0,0,0,0,0,0,0,405,0,0,0,0,0,2009,0,0,0,0,1558,2011,0,0,0,0,0,0,0,0,0,0,406,0,0,0,0,0,534,534,534,534,2549,0,556,556,556,556,556,556,556,556,556,556,1410,556,556,556,556,556,0,306,0,306,0,0,0,0,0,0,0,0,0,306,0,0,0,0,0,0,1155072,0,0,0,0,0,0,0,0,0,0,0,0,0,2705,0,0,0,0,0,204800,204800,0,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,205106,204800,204800,205105,205106,204800,205105,205105,204800,204800,0,0,0,0,0,0,0,0,0,364,299,0,0,0,0,0,3,0,0,2183794,0,0,0,0,0,298,299,151552,2134016,302,303,0,0,0,0,0,155648,155648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,655,212992,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,757,0,151552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,286720,2179072,2179072,2179072,2179072,2179072,2126724,2126724,2126724,2126724,2126724,0,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3036110,2126798,2126798,3072974,2126798,2126798,2126798,3122126,2700164,2126724,2716548,2126724,2724740,2126724,2732932,2773892,2126724,2126724,2126724,2806660,2126724,2831236,2126724,2126724,973,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2864004,2126724,2126724,2126724,2126724,2921348,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2626436,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3117956,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,0,0,975,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3224526,2179072,2126798,2126724,2179072,2179072,2126724,2126724,2126798,2126798,0,2486272,0,0,0,0,0,2678784,2854912,3006464,2126798,2126798,2126798,2626510,2126798,2126798,2126798,2126798,2126798,2126798,2700238,2126798,2716622,2126798,2724814,2126798,2126798,2126798,2126798,2126798,2454478,2126798,2474958,2483150,2126798,2126798,2126798,2126798,2126798,2126798,2532302,2733006,2773966,2126798,2126798,2126798,2806734,2126798,2831310,2126798,2126798,2864078,2126798,2126798,2126798,2126798,2921422,2126724,2409348,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2814852,2126724,2839428,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3126148,2126724,2126724,2126724,2126724,2126798,2126798,2585550,2126798,2126798,2126798,2126798,2126798,2618318,2126798,2126798,2126798,2126798,2126798,2126798,2663374,2179072,2179072,2179072,3207168,2179072,0,0,0,0,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2552708,2126724,2126724,2126724,2126724,2126724,2638724,2126724,2126724,2720644,2126724,2126724,2126724,2126724,2126724,2769796,2777988,2782084,2798468,2823044,2126724,2126724,2126724,2884484,2126724,2913156,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3040132,2126724,2126724,2126724,2728836,2753412,2126724,2126724,2126724,2126724,2843524,2847620,2126724,2896772,2917252,2126724,2126724,2126724,2126724,3150724,2126798,2429902,2438094,2126798,2487246,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2929614,2126798,2126798,2126798,2999246,2126798,3064708,2126724,2126724,2126724,2126724,2126724,3101572,2126724,2126724,3134340,2126724,2126724,2126724,2126724,2126724,2126724,2585476,2126724,2126724,2126724,2126724,2126724,2618244,2126724,2126724,2126724,2126798,2720718,2126798,2126798,2126798,2126798,2126798,2769870,2778062,2782158,2798542,2823118,2126798,2126798,2126798,2884558,2126798,2913230,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3040206,2126798,2126798,2126798,2126798,2126798,2601934,2126798,2126798,2126798,2126798,2642894,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2606030,2126798,2630606,2126798,2126798,2651086,2126798,2126798,2126798,3064782,2126798,2126798,2126798,2126798,2126798,3101646,2126798,2126798,3134414,2126798,2126798,2126798,2126798,2126798,2126798,0,2179072,2126798,2126724,2457600,2179072,2179072,2179072,2179072,2458500,2126798,2126798,2126798,3208142,2126798,2179072,2126798,2126724,2179072,2179072,2179072,2179072,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3011460,2126724,2126724,2126724,2126798,2126798,2503630,0,0,0,0,2388868,2126724,2126724,2126724,2421636,2126724,2126724,2126724,2126724,2126724,2454404,2126724,2126724,2126724,3027844,2405326,2126798,2126798,2126798,2126798,3027918,2539520,0,2949120,2179072,2658304,2973696,2474884,2483076,2126724,2126724,2126724,2126724,2126724,2126724,2532228,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2601860,2126724,2126724,2126724,2126724,2642820,2126724,2126724,2126724,2126724,2126724,2655108,2679684,2761604,2765700,2786180,2855812,2970500,2126724,3007364,2126724,3019652,2605956,2126724,2630532,2126724,2126724,2651012,2126724,2126724,2126724,2708356,2126724,2737028,2126724,2126724,2126724,2126724,2462596,2466692,2126724,2126724,2126724,2126724,2126724,2126724,2524036,2126724,2126724,2126724,2126724,3036036,2126724,2126724,3072900,2126724,2126724,2126724,3122052,2126724,2126724,3142532,2126724,2126724,2126724,3171204,2126724,2126724,3191684,3195780,2126724,0,0,0,0,0,0,2388942,2126798,2126798,2126798,2421710,2708430,2126798,2737102,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2888654,2126798,2126798,2925518,2126798,2126798,2126798,2126798,2179072,2126798,2126724,2179072,2179072,2179072,2179072,2126724,2126724,2126724,2126724,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2802638,2814926,2126798,2839502,2126798,2126798,2126798,3142606,2126798,2126798,2126798,3171278,2126798,2126798,3191758,3195854,2126798,2179072,2126798,2126724,2179072,2126724,2126798,2179072,2126724,2126798,2179072,2126724,2126798,2985984,2986884,2986958,0,0,0,0,0,0,0,69632,73728,315,316,316,421,422,65536,429,2179072,3112960,3219456,2126724,2126724,3113860,3220356,2126798,2126798,3113934,3220430,0,0,0,0,0,0,0,2046,0,0,0,0,0,0,0,0,0,1238,0,0,0,0,0,0,2179072,2179072,2179072,3223552,0,0,2126724,2126724,2417540,2126724,2126724,2126724,2446212,2126724,2126724,2126724,2126724,2888580,2126724,2126724,2925444,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,0,0,2126798,2126798,2126798,2409422,2126798,2126798,2945924,2126724,2126724,2995076,2126724,3003268,2126724,2126724,3023748,2126724,3068804,3085188,2126724,3097476,2126724,2126724,2126724,2519940,2126724,2126724,2126724,2126724,2589572,2126724,2614148,2646916,2126724,2126724,2696068,2757508,2638798,2126798,2126798,2126798,2126798,2728910,2753486,2126798,2126798,2126798,2126798,2843598,2847694,2126798,2896846,2917326,2126798,2126798,2945998,2126798,2126798,2995150,2126798,3003342,2126798,2126798,3023822,2126798,3068878,3085262,2126798,3097550,2179072,2179072,3059712,2179072,2179072,2179072,2179072,2179072,2179072,3178496,2126724,2126724,2126724,2126724,2126724,2126724,3224452,0,0,2126798,2126798,2417614,2126798,2126798,2126798,2446286,2126798,2126724,2126724,3060612,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3179396,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3126222,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3118030,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2495438,2126798,2126798,2515918,2126798,2126798,2126798,2544590,2548686,2126798,2126798,2597838,2126798,2126798,2126798,2126798,2425806,2433998,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,0,0,0,2179072,2126798,2126724,2126798,2126798,2126798,3060686,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3179470,2179072,2126798,2126724,2179072,2126724,2659204,2974596,2126724,2126798,2659278,2974670,2126798,2711552,256e4,2179072,2560900,2126724,2560974,2126798,2126798,2126798,2126798,2462670,2466766,2126798,2126798,2126798,2126798,2126798,2126798,2524110,2126798,2126798,2126798,2126798,0,0,0,0,0,0,0,0,0,0,2473984,2478080,2179072,2179072,2179072,3129344,2179072,2179072,3153920,3166208,3174400,2397060,2401156,2126724,2126724,2442116,2126724,2470788,3154820,3167108,3175300,2397134,2401230,2126798,2126798,2442190,2126798,2470862,2126798,2126798,2126798,2520014,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3130318,2126798,2126798,3154894,3167182,3175374,2506752,2507726,2507652,2126798,2126798,2589646,2126798,2614222,2646990,2126798,2126798,2696142,2757582,2126798,2126798,2126798,2126798,2933710,2126798,2126798,2126798,2126798,2593742,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2449408,0,2535424,2179072,3006464,2179072,3018752,2179072,2179072,2179072,3149824,2126724,2429828,2438020,2126724,2487172,2126724,2126724,2126724,2126724,2933636,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3130244,2126724,2126724,2126798,2126798,2655182,2679758,2761678,2765774,2786254,2855886,2970574,2126798,3007438,2126798,3019726,2126798,2126798,2126798,2126798,0,2502656,0,0,3010560,0,0,0,0,2990080,2179072,2179072,2126798,3150798,2179072,3051520,2126724,3052420,2126798,3052494,0,2490368,2498560,0,0,0,0,2875392,2179072,2179072,2179072,2555904,2564096,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3137536,2126724,2126724,2126724,3208068,2126724,0,0,0,0,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2552782,2126798,2126798,2126798,2126798,2126798,2126724,2499460,2126724,2126724,2126724,2556804,2564996,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2929540,2126724,2126724,2126724,2999172,2126724,2126724,2126724,3138436,2126798,2126798,2499534,2126798,2126798,2126798,2556878,2565070,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3011534,2126798,2126798,2126798,0,0,0,0,0,0,0,0,0,0,0,0,0,322,323,0,2126724,2450308,2126724,2536324,2126724,2610052,2126724,2859908,2126724,2126724,2126724,3031940,2126724,2126798,2450382,2126798,2126798,2126798,2126798,3093454,0,0,0,2404352,2179072,2179072,2179072,2179072,3026944,2405252,2126724,2126724,2495364,2126724,2126724,2515844,2126724,2126724,2126724,2544516,2548612,2126724,2126724,2597764,2126724,2126724,2126724,2663300,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2802564,2536398,2126798,2610126,2126798,2859982,2126798,2126798,2126798,3032014,2126798,2527232,0,0,0,2179072,2527232,2179072,2179072,2179072,2179072,2179072,2126724,2528132,2126724,2126724,2126724,2126724,2126724,3093380,2126798,2528206,2126798,2126798,2126798,2126798,3138510,2940928,2941828,2941902,0,0,0,0,0,2748416,2879488,0,0,0,0,0,172032,0,172032,0,0,0,0,0,0,0,0,0,364,0,0,122880,122880,0,0,0,221184,221184,0,0,0,0,0,0,0,0,0,221184,221184,0,0,221184,221184,221184,0,0,0,0,0,0,221184,0,0,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,0,0,0,0,0,0,0,0,0,364,338,292,0,0,0,0,0,0,221184,0,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,139264,299,0,0,2142208,0,0,0,98304,0,0,0,53248,0,0,0,0,0,0,0,2061,2062,0,0,0,0,0,0,0,0,159744,0,0,0,0,0,0,0,0,1198,0,0,0,0,0,0,0,0,1212,0,0,0,0,0,0,0,0,1578,0,0,0,577536,0,0,1583,0,0,0,302,0,303,0,0,0,303,0,0,0,2461696,0,0,0,0,0,0,1159168,416,416,0,0,0,0,0,416,0,0,98304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12290,2179072,3121152,2179072,2179072,3141632,2179072,2179072,2179072,3170304,2179072,2179072,3190784,3194880,2179072,901,0,0,0,0,0,229376,0,0,0,0,0,0,0,0,1666,0,0,0,0,0,2958,0,0,0,0,2962,0,0,0,0,2967,0,0,901,0,2387968,2125824,2125824,2125824,2420736,2125824,2125824,2125824,2125824,2125824,2453504,2125824,2473984,2482176,2125824,2125824,2125824,2125824,2125824,2125824,2531328,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3190784,3194880,2125824,975,0,0,0,975,0,2387968,2125824,2125824,2125824,2420736,2179072,2179072,2179072,3223552,901,0,2125824,2125824,2416640,2125824,2125824,2125824,2445312,2125824,2125824,2125824,2125824,2125824,3223552,0,0,2125824,2125824,2416640,2125824,2125824,2125824,2445312,2125824,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,0,0,0,0,0,0,0,0,0,379,0,0,0,0,0,0,0,217088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,307,308,0,0,0,114688,0,241664,258048,0,0,0,0,0,0,0,0,0,0,676,677,678,0,0,0,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,0,0,0,0,0,0,0,0,0,386,0,0,0,0,0,386,0,0,0,2183168,0,0,270336,0,0,298,299,0,2134016,302,303,200704,0,0,180224,0,0,0,0,0,0,0,0,2424832,2433024,0,0,2457600,20480,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2126724,2126724,2126724,2126724,2126724,1,12290,2113825,0,0,0,0,0,0,295,0,0,0,295,0,0,0,0,0,0,2387968,0,0,0,0,0,0,0,0,0,0,330,381,383,0,0,0,0,0,266240,0,0,0,0,0,0,0,0,0,0,0,266240,0,0,0,0,0,0,0,0,0,0,1,12290,0,0,266240,0,0,0,0,0,0,0,0,0,0,0,0,0,338,339,340,2113825,0,0,2183168,0,0,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,237568,0,0,0,0,0,0,0,0,0,0,0,1657,0,0,0,0,274432,274432,274432,274432,274432,274432,0,0,0,0,0,274432,0,274432,1,12290,3,0,0,0,0,0,0,0,90408,90408,90408,90408,0,94505,1,12290,3,78114,292,0,0,0,0,0,0,0,0,0,0,0,0,1611,0,0,0,3,78114,78114,292,0,0,0,0,0,298,299,0,0,302,303,0,0,0,0,0,2134016,0,0,0,0,0,0,0,0,0,1163264,78114,1066,0,0,0,0,0,0,0,0,0,0,0,0,0,0,308,307,534,534,534,1341,901,556,556,556,556,556,556,556,556,556,556,556,580,580,3062,580,580,2009,0,0,0,0,0,2011,0,0,0,0,0,0,0,0,0,0,722,0,0,0,0,0,0,2954,0,0,0,0,0,0,0,0,0,0,0,0,0,0,330,0,0,1650,0,0,0,0,0,0,0,0,2089,0,0,0,0,0,0,0,2086,0,0,0,0,0,2092,0,0,290,1066,0,0,0,0,0,0,0,0,0,0,0,0,0,0,680,681,3,78114,78449,292,0,0,0,0,0,298,299,0,0,302,303,0,0,0,0,0,2134016,0,0,0,0,0,0,0,0,1138688,0,0,0,0,0,2134016,0,0,0,0,0,0,0,739,0,0,0,0,0,0,1150976,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1192,0,0,0,0,0,0,0,0,0,0,0,0,0,385,337,0,581,557,557,557,557,557,557,557,581,581,581,534,581,581,581,581,581,581,581,557,557,534,557,581,557,581,1,12290,1,12290,3,78115,292,0,0,0,0,0,0,0,0,0,0,0,0,1680,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,1,12290,282624,282624,282624,0,0,282624,0,0,0,0,0,0,0,0,0,0,0,2027,0,0,0,0,0,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,0,282624,282624,282624,282624,282624,0,0,0,0,0,0,0,0,0,637,0,0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,3047424,3129344,0,2981888,2396160,0,3153920,3132,0,0,2740224,0,0,0,0,0,0,1181,1183,0,0,0,0,0,0,0,0,0,1608,1609,1610,0,0,0,0,0,0,0,286720,286720,0,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,0,0,0,0,0,0,0,0,0,705,0,0,0,709,0,0,0,3108864,3198976,0,0,3043328,0,3149824,2936832,0,2760704,3252,0,0,0,0,0,0,0,69632,73728,167936,0,0,0,0,65536,0,0,0,0,3329,0,0,2834432,0,3227648,2568192,2564096,0,2940928,2179072,2179072,2498560,3329,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,0,2125824,2125824,0,0,0,308,0,0,0,0,0,307,0,307,308,0,307,307,0,0,0,307,307,308,308,0,0,0,0,0,0,307,407,308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,783,0,0,0,308,412,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,2134016,0,0,0,0,0,0,57344,0,0,0,0,0,0,1120,0,0,0,0,0,0,0,0,0,0,1239,0,0,0,0,0,456,456,456,482,482,456,482,482,482,482,482,482,482,507,482,482,482,482,482,482,482,482,482,482,482,482,482,482,527,482,482,482,482,482,535,558,535,558,535,535,558,535,582,558,558,558,558,558,558,558,582,582,582,535,582,582,582,582,582,582,582,558,558,535,558,582,558,582,1,12290,0,667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,769,0,697,0,0,0,0,0,0,0,704,0,0,0,0,0,0,0,0,1639,0,0,0,0,0,0,0,0,1660,1661,0,1663,0,0,0,0,0,729,0,0,0,0,0,0,0,0,0,0,0,740,0,0,0,0,0,0,2834432,0,3227648,2568192,2564096,0,2940928,2179072,2179072,2498560,0,0,0,638,0,0,0,0,0,0,0,0,0,0,755,0,0,0,0,0,2134749,0,0,0,0,0,0,0,0,0,0,0,1169,734,0,0,0,0,0,0,761,0,0,765,0,0,0,0,772,0,0,0,0,0,0,0,69632,73728,172032,0,0,0,0,65536,0,0,0,641,0,0,0,0,0,0,804,0,0,0,780,0,0,0,0,0,327,0,69632,73728,0,0,0,0,0,65536,0,0,0,821,776,0,0,0,0,0,825,826,776,776,0,0,0,0,0,0,0,780,0,0,0,0,0,0,0,0,1677,0,1679,0,0,0,0,0,0,776,729,776,0,534,534,836,840,534,534,534,534,534,534,866,534,871,534,878,534,881,534,534,895,534,534,556,556,556,909,913,1018,580,1025,580,1028,580,580,1042,580,580,0,0,0,840,987,913,836,1052,881,534,534,909,1057,954,556,556,0,983,1062,1028,580,580,534,534,556,556,580,580,0,0,0,0,0,0,0,0,0,0,0,78114,1066,0,0,1068,1072,0,0,1076,1080,0,0,0,0,0,0,0,406,406,406,406,0,406,406,406,406,0,0,1144,0,0,0,0,0,0,0,0,0,0,0,0,0,508,515,515,0,0,0,1634,0,0,0,0,0,0,0,0,0,0,0,0,0,3126,0,0,1769,534,534,1772,534,534,534,534,534,534,534,534,534,534,1784,534,534,534,534,534,884,534,534,534,534,534,556,556,903,556,556,0,580,580,580,984,580,990,580,580,1003,580,580,1014,580,534,534,534,534,1789,534,534,534,534,534,534,534,1341,1799,556,556,0,580,580,580,580,580,580,580,580,580,580,580,580,580,0,0,0,0,534,534,556,556,556,1806,556,556,556,556,556,1812,556,556,556,556,556,556,0,0,580,580,580,580,580,580,580,580,580,2370,580,580,580,580,580,580,556,556,556,1825,556,556,556,556,556,556,556,556,556,556,556,556,955,556,556,556,1885,556,556,556,556,556,556,556,26009,1895,580,580,580,580,580,1902,2017,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,2042,0,0,0,0,0,0,0,0,0,2051,0,0,0,0,0,0,1196,0,0,0,0,0,0,0,0,0,0,1223,0,0,0,0,0,2109,2110,0,0,2112,0,0,0,2110,0,0,2117,0,0,0,0,0,0,0,69632,73728,221184,0,0,0,0,65536,0,2150,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1313,0,0,0,2464,0,0,0,0,0,0,0,0,0,0,0,0,0,3135,0,0,534,534,534,534,2502,534,534,534,534,534,534,534,534,534,534,534,534,2510,534,534,534,2601,556,556,556,556,556,556,556,556,556,556,556,556,556,2611,556,556,556,556,556,2563,556,556,556,556,556,556,556,556,556,556,1388,556,556,556,556,1393,556,556,556,556,2632,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1967,0,0,0,2698,0,0,0,0,0,0,2703,0,0,0,0,0,0,0,2115,0,0,0,0,0,0,0,0,0,2729,0,0,0,0,0,0,2749,2750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,789,0,0,0,0,0,0,0,2762,0,534,534,534,534,534,534,534,534,534,534,534,2521,534,534,534,534,534,2773,534,534,2777,534,534,534,534,534,534,534,534,534,534,2786,556,2820,556,556,2824,556,556,556,556,556,556,556,556,556,556,2833,580,580,580,2869,580,580,2873,580,580,580,580,580,580,580,580,580,580,2899,580,580,580,580,580,580,2882,580,580,580,580,580,580,580,580,580,580,580,2890,580,580,534,534,556,556,580,580,0,0,0,0,0,3324,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,221184,0,221184,0,0,0,0,2931,0,0,0,0,0,0,0,0,0,0,0,0,0,534,534,534,534,534,534,3010,534,534,534,534,534,534,534,534,556,556,556,556,556,556,3412,556,556,556,556,556,556,3051,556,556,556,556,556,556,556,556,556,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3091,580,3093,580,580,580,580,580,580,580,580,580,534,580,556,534,534,556,556,580,3132,3387,0,3389,0,534,3392,534,3394,534,534,534,534,534,534,534,534,1777,534,534,534,534,534,534,534,534,2157,534,534,534,534,534,534,534,534,2182,534,534,534,534,2187,534,534,534,534,3448,534,534,534,534,534,534,534,534,534,534,556,556,556,556,556,3023,556,3461,556,556,556,556,556,556,556,556,556,556,556,580,580,580,580,3064,580,3475,580,580,580,580,580,580,580,580,580,580,580,0,0,0,0,3561,534,0,3490,0,3492,534,534,534,534,534,534,534,534,534,534,534,534,534,2794,534,534,0,0,3533,0,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1281,309,310,311,0,0,0,0,0,0,0,0,0,0,0,0,0,640,0,0,0,0,420,0,0,0,0,443,0,0,0,0,0,0,0,0,0,1109,0,1111,1112,0,0,0,0,0,0,443,443,420,443,443,443,443,443,443,443,443,443,443,443,443,443,526,443,526,526,526,443,526,526,526,526,443,536,559,536,559,536,536,559,536,583,559,559,559,559,559,559,559,583,583,583,536,583,583,583,583,583,583,583,559,559,609,614,583,614,620,1,12290,534,534,874,534,534,534,534,534,534,534,534,556,556,556,556,556,0,580,580,580,580,580,580,1021,580,580,580,580,580,580,580,580,0,0,0,534,580,556,556,556,556,556,556,556,580,580,580,534,580,580,580,580,0,0,0,0,0,0,0,0,0,0,3445,534,0,0,0,1657,0,0,0,0,0,0,0,0,0,0,0,0,0,3262,534,534,1785,534,534,534,534,534,534,534,534,534,534,534,1341,0,556,556,0,580,580,580,580,580,580,580,580,580,1006,580,580,580,0,0,1544,0,0,0,0,0,1550,0,0,0,0,0,0,347,0,0,0,0,0,0,0,0,0,0,167936,167936,167936,167936,167936,167936,167936,167936,580,580,1970,580,580,580,580,580,1977,580,580,580,580,580,580,580,1444,580,580,580,580,580,1456,580,580,0,0,2425,0,0,0,0,0,0,0,0,0,0,0,0,0,654,0,0,2612,556,556,556,556,0,2615,0,0,0,0,580,580,580,580,580,534,556,580,0,3382,0,0,3385,0,0,0,580,2621,580,580,580,580,2625,580,580,580,580,580,580,580,580,580,580,3221,580,580,580,580,580,0,0,0,312,313,314,315,316,317,318,319,320,321,0,0,0,0,0,0,1249,0,0,0,0,0,0,534,534,534,534,534,850,534,534,534,534,534,0,312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1172,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0,0,0,655,0,0,422,430,421,430,0,312,430,444,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,478,483,483,494,483,483,483,483,483,483,483,483,509,509,522,522,523,523,523,523,523,523,523,523,523,523,523,509,523,523,523,523,523,537,560,537,560,537,537,560,537,584,560,560,560,560,560,560,560,584,584,584,606,584,584,584,584,584,584,607,608,608,606,608,607,608,607,1,12290,0,0,811,0,0,0,0,0,0,0,0,0,0,0,0,0,679,0,0,0,695,0,0,0,534,534,534,534,534,534,534,534,534,534,534,534,1720,534,534,882,534,534,556,556,955,556,556,0,580,580,1029,580,580,534,534,556,556,580,580,0,0,0,3322,0,0,3325,0,0,0,0,1161,0,0,0,0,0,0,0,0,0,0,0,0,0,249856,0,0,0,0,0,0,0,1193,0,0,0,0,0,0,0,0,0,0,0,0,0,1134592,0,0,0,0,0,1206,0,0,0,0,0,0,0,0,0,0,0,0,0,1218,0,0,534,534,1254,534,1257,534,534,534,534,534,534,534,534,1271,534,1276,534,534,1280,534,534,1283,534,534,534,534,534,534,534,534,534,534,534,534,534,1294,534,534,534,534,534,1341,901,556,556,1345,556,556,1349,556,556,556,556,556,0,0,0,0,0,0,580,580,580,580,580,0,3580,0,534,534,534,534,534,534,556,556,556,556,556,1363,556,1368,556,556,1372,556,556,1375,556,556,556,556,556,0,2296,0,0,580,580,580,580,580,580,580,2355,580,580,580,580,2360,580,580,580,580,1437,580,580,1441,580,580,580,580,580,580,580,580,1455,580,1460,580,580,1464,580,580,1467,580,580,580,580,580,580,580,580,580,580,0,0,188416,534,580,556,1669,0,0,0,0,0,0,1676,0,0,0,0,0,0,0,0,0,1199,1200,0,0,0,0,0,580,1923,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1459,580,580,1936,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1919,580,534,2176,534,534,534,534,534,534,534,534,534,534,534,534,534,534,0,0,534,534,534,534,2192,2193,534,534,534,534,534,534,534,534,534,534,556,556,556,556,3022,556,2262,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1819,556,556,556,2278,2279,2280,556,556,556,556,556,556,556,556,556,556,1846,556,556,556,1851,556,2349,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1985,580,580,580,2365,2366,2367,580,580,580,580,580,580,580,580,580,580,0,3558,0,3560,534,534,0,2399,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1243,0,0,0,0,0,2465,2466,0,0,0,0,0,0,0,0,0,0,0,2090,0,0,0,0,580,580,580,2663,580,580,580,580,580,580,580,580,580,580,580,580,534,580,556,3105,534,534,534,534,534,2790,534,534,534,534,534,534,534,534,534,534,556,3019,556,556,556,556,2917,0,0,0,0,0,2923,0,0,0,0,0,0,0,2927,0,0,0,0,0,2200246,0,0,0,0,0,0,0,0,0,0,0,1617,0,0,0,0,0,0,0,0,2972,0,0,0,0,0,0,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2987,534,534,534,534,534,534,534,534,534,534,899,556,556,556,556,556,556,556,556,556,3027,556,556,556,556,556,556,556,556,556,556,556,1432,26009,1341,975,580,0,3139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1597,0,534,534,534,534,3175,534,534,534,534,556,556,556,556,556,556,556,556,556,556,556,556,556,556,580,580,580,580,580,580,580,580,580,3438,0,3439,0,0,0,0,0,0,0,534,3446,534,3447,534,534,534,3451,534,534,534,534,534,534,534,556,3459,556,556,556,556,556,2589,556,556,2593,556,556,556,556,556,556,556,2606,556,556,556,556,556,556,556,556,2269,556,556,556,556,556,556,556,3460,556,556,556,3464,556,556,556,556,556,556,556,556,580,3473,580,0,0,2920,0,0,0,0,0,0,0,0,0,2926,0,0,0,0,0,1147,0,1149,0,0,0,0,0,0,0,0,534,557,534,557,534,534,557,534,3474,580,580,580,3478,580,580,580,580,580,580,580,580,0,0,0,534,534,3583,3584,534,534,556,556,3596,556,556,556,3598,580,580,580,3600,0,534,534,556,556,580,580,0,0,0,0,3244,0,0,0,0,0,323,323,373,0,0,0,0,0,0,0,0,0,0,0,0,0,725,0,0,0,0,373,0,432,438,0,445,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,484,484,495,484,484,484,484,484,484,484,484,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,538,561,538,561,538,538,561,538,585,561,561,561,561,561,561,561,585,585,585,538,585,585,585,585,585,585,585,561,561,538,561,585,561,585,1,12290,787,0,0,0,0,534,534,534,534,534,534,534,534,859,534,534,534,534,534,534,2139,534,534,2142,534,534,534,534,534,534,534,1760,1761,1762,534,534,1765,1766,534,534,1114,1115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1613,0,1100,0,1231,0,0,0,0,0,1115,0,0,0,0,0,1214,0,0,0,0,0,3088384,0,0,0,0,0,0,0,0,0,0,0,752,0,0,0,0,0,0,1246,1114,0,0,0,0,0,0,0,0,0,534,534,1255,534,534,534,1341,901,556,556,1346,556,556,556,556,556,556,556,556,1389,556,556,556,556,556,556,556,556,1397,556,556,556,1401,556,556,556,556,556,556,556,556,556,556,1880,556,556,556,556,556,580,1438,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1934,580,580,580,1465,580,580,580,580,580,580,580,580,580,580,580,580,580,1491,580,580,1478,580,580,580,580,580,580,580,1487,580,580,1489,580,580,580,1493,1517,580,580,580,580,580,0,534,580,556,534,534,534,534,534,556,580,534,556,580,534,556,580,534,556,580,0,0,0,0,0,0,0,69632,73728,0,135168,135168,0,0,65536,135168,556,556,556,556,1872,556,556,556,556,556,556,556,556,556,556,556,1832,556,556,556,556,1968,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2362,580,580,2004,0,2005,0,0,0,0,0,2007,0,0,0,0,0,0,0,2418,0,0,0,0,0,2422,0,0,2009,0,0,0,0,0,2011,0,0,0,0,0,2014,0,0,0,0,0,0,1576,0,0,0,0,0,0,0,0,0,0,2077,0,0,0,0,0,2067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,827,2121,0,0,0,0,0,0,0,0,0,0,534,534,534,534,534,534,534,534,2770,534,534,534,534,2137,534,534,534,534,2141,534,534,534,534,534,534,534,534,2518,534,534,534,534,534,534,534,534,2803,534,534,534,534,534,534,534,534,2989,534,534,534,534,534,534,534,534,3165,534,534,534,534,534,534,534,534,3270,534,534,534,534,534,534,534,534,3280,556,556,556,556,556,556,556,1426,556,556,556,556,26009,1341,975,580,556,556,2222,556,556,556,556,2226,556,556,556,556,556,556,556,556,1405,556,556,556,556,556,556,556,580,580,2309,580,580,580,580,2313,580,580,580,580,580,580,580,580,580,3527,580,580,580,0,3531,0,0,2462,0,0,0,0,0,2467,0,0,0,0,0,0,0,0,0,1640,0,0,0,0,0,0,534,534,534,2489,2490,534,534,534,534,534,534,534,534,534,534,534,534,2522,534,534,534,534,534,534,2529,534,534,534,534,534,534,534,534,534,534,534,534,534,2993,534,534,2620,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2376,2660,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3316,2707,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1100,0,0,0,0,2724,0,0,0,0,0,0,0,0,0,0,0,0,1686,0,0,0,0,0,0,0,2752,0,0,0,0,0,0,0,0,0,0,0,0,2028,0,0,0,534,534,534,534,534,2800,534,534,534,534,534,534,534,534,534,534,1307,534,534,534,534,534,2891,580,580,580,580,580,580,580,2897,580,580,580,580,580,580,580,1471,580,580,580,580,580,580,580,580,1045,580,0,0,0,534,580,556,3128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1128,534,534,534,534,534,3176,534,534,534,556,556,556,556,556,556,556,3511,556,3513,556,556,556,556,580,556,556,3297,556,556,580,580,580,580,580,580,580,580,580,580,580,3374,580,580,3132,0,0,0,0,534,534,534,534,534,534,3397,534,534,534,534,0,0,556,556,556,556,556,556,556,556,556,556,1392,556,556,556,556,556,325,326,327,0,0,0,0,0,0,0,0,0,0,0,0,0,741,0,0,0,0,0,324,372,327,371,0,0,0,0,0,0,0,0,0,0,1110,0,0,0,0,0,324,0,0,371,371,401,0,327,0,0,0,0,0,0,0,0,0,1678,0,0,0,0,0,0,0,0,0,326,0,0,0,446,459,459,459,459,459,459,459,459,472,459,459,459,459,459,459,459,459,459,459,459,459,485,485,459,485,485,500,502,485,485,500,485,511,511,511,511,511,511,511,511,511,511,511,511,511,511,528,511,511,511,511,511,539,562,539,562,539,539,562,539,586,562,562,562,562,562,562,562,586,586,586,539,586,586,586,586,586,586,586,562,562,539,562,586,562,586,1,12290,0,651,652,0,0,0,0,0,0,0,0,0,0,663,664,0,0,0,0,364,364,0,0,0,0,0,0,0,0,0,0,0,723,0,0,0,0,0,0,0,0,0,682,0,0,0,0,0,0,0,0,0,0,364,364,364,0,0,0,0,0,355,0,0,466,466,466,466,466,466,466,466,471,466,466,466,466,466,466,466,466,466,466,466,471,0,713,0,0,0,0,0,0,720,0,0,0,724,0,0,0,0,0,0,1621,0,0,0,0,0,0,0,0,0,0,769,0,0,0,0,0,0,0,0,0,762,763,0,0,0,0,0,771,0,773,0,0,0,0,0,0,1637,0,0,0,0,0,0,0,0,0,0,1095,0,0,0,0,0,0,0,0,0,790,793,0,0,0,793,793,790,0,0,0,0,0,0,0,106496,0,106496,0,0,0,0,106496,106496,0,0,0,773,0,785,0,802,0,0,0,0,793,0,700,0,0,0,0,364,364,0,0,0,0,0,0,0,0,0,1141,0,810,0,0,0,0,0,810,810,813,0,0,0,773,0,0,0,0,0,375,0,0,0,0,367,0,384,0,350,0,0,0,0,822,0,0,0,0,0,0,0,0,0,771,0,0,0,0,0,385,0,69632,73728,0,0,0,0,0,65536,0,0,822,802,822,0,534,534,837,534,843,534,534,856,534,534,867,534,872,534,534,880,883,888,534,896,534,534,556,556,556,910,556,556,556,556,556,2604,2605,556,556,556,556,556,556,556,556,556,3189,556,556,556,556,556,556,916,556,556,929,556,556,940,556,945,556,556,953,956,961,556,969,1019,580,580,1027,1030,1035,580,1043,580,580,0,0,0,534,580,556,556,556,556,556,2825,556,556,556,556,556,556,556,556,556,556,2284,556,556,556,556,556,837,534,1053,888,534,910,556,1058,961,556,0,984,580,1063,1035,580,0,2919,0,0,0,0,0,0,0,0,0,0,0,0,0,2458,0,0,0,0,1087,0,0,0,0,0,0,0,0,0,1097,0,0,0,0,0,0,1659,0,0,0,0,0,0,0,0,0,0,751,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2032,0,0,0,0,0,1104,0,0,0,0,0,0,0,0,0,0,0,0,2078,0,0,0,1129,0,0,0,364,364,0,0,0,0,0,0,0,0,0,0,0,2471,0,0,0,0,0,1143,0,0,0,0,0,0,0,0,1152,0,0,0,0,0,0,0,2442,0,0,0,0,0,0,0,2450,1121,0,0,0,0,0,0,0,0,0,0,0,0,0,1189,0,0,0,0,364,364,0,0,0,0,0,0,0,1139,0,0,0,0,0,328,0,0,0,0,0,0,0,0,0,0,0,2757,2758,0,0,0,534,1282,534,534,534,534,534,534,534,534,534,534,534,534,534,1297,1337,534,534,1341,901,556,556,556,556,556,556,556,556,556,556,1354,556,556,1419,556,556,556,556,556,556,1429,556,556,26009,1341,975,580,580,580,580,1523,580,0,534,580,556,534,534,534,534,534,556,556,556,556,556,2837,556,556,556,556,556,556,556,556,556,556,1862,1863,556,556,556,556,1461,580,580,580,1466,580,580,580,580,580,580,580,580,580,580,580,1915,580,580,580,580,580,580,1481,580,580,580,580,580,580,580,580,580,580,580,580,580,1933,580,580,580,1495,580,580,580,580,580,580,580,580,580,580,1511,580,580,580,0,2005,0,0,0,0,0,2007,0,0,0,0,0,0,0,2074,0,0,0,0,0,0,0,0,342,0,0,0,0,0,0,0,580,580,580,1521,580,580,0,534,580,556,534,534,534,534,534,556,580,534,556,580,3610,3611,3612,534,556,580,0,0,0,0,0,0,307,442,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,0,0,1585,0,0,1588,1589,1590,0,1592,1593,0,0,0,0,1598,1631,1632,0,0,0,0,0,0,0,0,1641,1642,0,0,0,0,0,0,0,155648,0,0,0,0,0,0,0,0,0,364,0,0,0,0,0,0,0,0,0,0,0,0,1212,534,534,534,0,0,0,0,1648,0,0,1650,0,0,0,0,1652,1653,0,0,0,0,0,441,0,0,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,552,575,552,575,552,552,575,552,0,0,1671,1672,1673,1674,0,0,0,0,0,0,0,0,0,0,0,2483,0,0,0,0,0,1683,0,0,1686,0,0,0,0,0,1690,0,0,0,1694,1695,1706,1566,1566,1708,534,1710,534,1711,1712,534,1714,534,534,534,1718,534,534,534,534,534,886,534,534,534,534,534,556,556,908,556,556,556,556,556,2254,556,556,556,556,556,556,556,556,556,556,1431,556,26009,1341,975,1435,534,534,1739,534,1741,534,534,534,534,534,534,534,534,1749,1750,1752,534,1786,534,534,534,534,534,534,534,534,534,1797,1341,0,1802,556,556,556,556,556,3041,556,556,556,556,556,556,556,556,556,556,3200,556,556,556,556,556,556,1804,556,1805,556,1807,556,1809,556,556,556,1813,556,556,556,556,556,0,0,0,0,0,0,580,580,2618,580,580,556,556,556,556,1826,556,556,556,556,1830,556,556,556,556,1834,556,556,556,556,556,3055,556,556,556,556,556,580,580,580,3063,580,580,580,580,1724,1915,1819,534,534,534,534,556,556,556,556,580,580,580,580,0,0,2692,0,0,1836,556,556,556,556,556,556,556,556,1844,1845,1847,556,556,556,556,556,0,2297,0,0,580,580,580,580,580,580,580,2667,580,580,580,580,580,580,580,580,580,2653,580,580,580,580,2657,580,556,556,556,1855,1856,1857,556,556,1860,1861,556,556,556,556,556,556,0,0,580,580,580,2862,580,580,580,580,556,1869,556,556,556,1873,556,556,556,556,556,556,556,1882,556,556,0,580,580,580,580,580,580,580,1002,580,580,580,580,580,580,3555,3556,580,580,0,0,3559,0,534,534,1903,580,1905,580,580,580,1909,580,580,580,580,580,580,580,580,580,580,3528,580,580,0,0,0,1922,580,580,580,580,1926,580,580,580,580,1930,580,1932,580,580,580,580,580,1524,0,1270,1454,1362,534,534,534,534,534,556,1952,1953,580,580,1956,1957,580,580,580,580,580,580,580,1965,580,580,534,534,556,556,580,580,3321,0,0,0,3323,0,0,0,0,0,0,2114,0,0,0,0,0,0,0,0,0,0,2605056,0,0,0,0,2887680,580,1969,580,580,580,580,580,580,580,1978,580,580,580,580,580,580,0,534,580,556,534,534,534,534,534,556,580,580,580,1989,534,580,556,1766,534,1995,534,1861,556,1999,556,1957,580,2003,580,0,2005,0,0,0,0,0,2007,0,0,0,0,0,0,0,2702,0,0,0,0,0,0,0,2706,0,2018,0,0,2021,2022,0,0,0,2026,0,0,0,0,0,0,0,414,414,0,0,0,0,0,414,0,0,0,2069,0,0,0,0,0,0,0,0,0,0,0,0,0,742,0,0,0,1650,0,0,0,0,0,0,0,2088,0,0,0,0,0,0,0,451,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,2095,0,2097,0,0,0,0,0,0,0,0,2106,0,0,0,0,0,0,0,184725,184925,184925,184925,0,184925,184925,184925,184925,184925,184925,0,0,0,0,0,184925,0,184925,1,12290,534,534,534,2153,534,2155,534,534,534,534,534,534,534,534,534,534,1746,534,534,534,534,534,534,2204,2205,534,534,0,0,0,0,556,556,556,556,556,556,556,556,556,2558,556,556,556,556,2238,556,2240,556,556,556,556,556,556,556,556,556,556,556,2231,556,556,556,556,556,2291,2292,556,556,0,0,0,0,580,580,580,580,580,580,580,1506,580,580,580,580,580,1513,580,580,580,580,2325,580,2327,580,580,580,580,580,580,580,580,580,580,580,2318,580,580,580,580,580,2378,2379,580,580,2145,2317,2230,534,2385,534,534,556,2389,556,556,0,580,580,580,580,580,580,997,580,580,580,580,580,580,2328,580,2330,580,580,580,580,580,580,580,2342,580,580,580,580,580,580,580,580,580,1474,580,580,580,580,580,580,580,2393,580,580,2005,0,2007,0,2009,0,2011,0,0,0,0,0,0,0,2727,0,0,0,0,0,0,0,0,0,1579,0,0,0,0,0,0,0,2437,2438,0,0,0,0,0,0,0,0,0,0,0,0,0,1089,0,0,534,2526,534,534,534,2531,534,534,534,534,534,534,534,2538,534,534,534,534,534,534,2169,534,534,534,534,534,534,534,534,534,534,2782,534,534,2785,534,534,534,534,534,534,534,2543,534,534,534,534,534,534,534,534,0,2549,556,556,2587,556,556,556,556,2591,556,556,556,2596,556,556,556,556,556,0,2615,0,0,0,0,580,580,580,580,580,534,556,580,0,0,0,0,0,0,0,3386,556,556,556,2603,556,556,556,556,556,556,556,556,2609,556,556,556,556,556,556,3042,556,3044,556,556,556,556,556,556,556,1404,556,556,1411,556,556,556,556,556,580,580,580,2623,580,580,580,580,580,580,580,580,580,580,580,580,1451,580,580,580,580,580,580,2635,580,2637,580,580,580,580,580,580,580,580,580,580,1914,580,580,580,580,580,580,580,2662,580,580,580,580,580,580,580,2669,580,580,580,580,580,580,2895,580,580,580,580,580,580,580,580,580,1046,0,0,0,534,580,556,580,580,580,2675,580,580,580,580,580,580,580,580,534,580,556,534,2913,556,2915,580,534,534,534,2798,534,534,534,534,534,534,534,534,534,534,534,534,534,3348,534,556,556,556,556,556,2846,556,556,556,556,556,556,556,556,556,556,556,2245,556,556,556,556,0,2943,2944,0,2945,0,2947,0,0,0,0,2949,0,0,0,0,0,0,0,225883,225883,225883,225883,225734,225883,225883,225883,225883,225883,225883,225734,225734,225734,225734,225734,225899,225734,225899,1,12290,2968,2969,0,2971,0,0,2974,0,0,0,2977,534,534,534,534,534,0,0,0,0,556,2214,556,556,556,556,556,0,0,0,0,0,0,580,2617,580,580,580,534,2984,534,534,534,534,534,2988,534,534,534,534,534,534,534,2994,534,534,534,534,534,3e3,534,534,534,534,534,534,534,534,534,534,1763,534,534,534,534,534,3009,3011,534,534,534,3014,534,3016,3017,534,556,556,556,556,556,556,0,0,580,2861,580,580,580,580,580,580,0,1267,1451,1359,534,534,534,1530,534,556,3024,556,556,556,556,556,3028,556,556,556,556,556,556,556,3034,556,556,556,556,556,3185,556,556,556,556,556,556,556,556,556,556,2229,556,556,2233,556,556,556,556,556,556,3040,556,556,3043,556,556,556,556,556,556,556,556,1829,556,556,556,556,556,556,556,3050,3052,556,556,556,556,3056,556,3058,3059,556,580,580,580,580,580,580,3083,580,580,580,580,580,580,580,580,580,2331,580,580,580,580,2335,580,580,3066,580,580,580,580,580,3070,580,580,580,580,580,580,580,3076,580,3092,3094,580,580,580,580,3098,580,3100,3101,580,534,580,556,534,534,534,534,534,887,534,534,534,534,534,556,556,556,556,556,0,0,0,2299,580,580,580,580,580,580,580,3084,580,3086,580,580,580,580,580,580,3106,556,3108,580,3110,0,0,0,0,0,0,3116,0,0,3119,0,0,0,0,364,364,0,0,0,0,0,1096,0,0,0,0,0,0,0,286720,0,0,0,0,0,0,0,0,0,643,0,0,0,0,0,0,0,0,0,3140,3141,0,0,0,0,0,0,0,0,0,0,0,0,2107,0,0,0,556,556,556,556,3184,556,556,556,556,556,556,556,556,556,556,556,2272,556,556,556,556,556,556,556,3195,556,556,556,556,556,556,556,556,3203,556,556,556,556,556,556,3197,556,556,556,556,556,556,556,556,556,2594,556,556,556,556,556,556,556,556,556,580,580,580,3208,580,580,580,580,580,580,580,3213,580,580,580,580,1907,580,580,580,580,580,580,580,580,1918,580,580,580,580,580,3096,580,580,3099,580,580,580,534,580,556,534,534,534,534,534,534,3278,534,534,556,556,556,556,556,556,556,556,556,556,556,3515,556,556,580,556,3296,556,556,556,580,580,580,580,580,580,580,580,580,580,580,580,3214,3326,3327,0,3132,0,3331,0,0,0,0,0,0,0,534,534,534,2766,534,534,534,534,534,2771,534,534,534,3405,556,556,556,556,556,556,556,556,556,556,556,556,960,556,556,556,556,556,3420,556,580,580,580,580,580,580,580,580,580,580,580,580,1452,580,580,580,580,580,3436,580,0,0,0,0,0,0,0,0,0,0,534,534,534,534,534,534,534,534,534,534,3502,534,534,534,534,534,3450,534,534,534,534,534,534,534,534,556,556,556,3281,556,556,556,3284,556,556,556,3463,556,556,556,556,556,556,556,556,556,580,580,580,580,580,580,3302,580,580,580,580,580,580,580,3477,580,580,580,580,580,580,580,580,580,3486,3487,0,0,0,0,364,364,0,0,0,0,1137,1095,0,0,0,0,0,0,0,69632,73728,266240,0,0,0,0,65536,0,0,0,0,0,3493,3494,3495,534,534,534,3498,534,3500,534,534,534,534,534,534,534,3269,534,534,534,534,534,534,534,534,534,2781,534,534,534,534,534,534,534,3505,3506,3507,556,556,556,3510,556,3512,556,556,556,556,3517,3518,3519,3520,580,580,580,3523,580,3525,580,580,580,580,3530,0,0,0,0,0,0,1687,0,0,0,0,0,0,0,0,0,0,783,0,0,0,0,0,0,0,0,0,0,0,3562,534,534,534,3566,556,556,3568,556,556,556,3572,556,580,580,3574,580,580,580,3578,580,0,0,0,534,534,534,534,534,534,556,556,580,580,0,3111,0,0,0,0,0,0,0,0,0,0,398,0,0,0,0,0,0,0,0,328,329,0,0,0,0,0,0,0,0,0,0,0,0,2409,0,0,0,0,368,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1629,0,0,0,0,368,0,0,0,376,378,0,0,0,0,0,0,0,0,2025,0,0,0,0,0,0,0,0,2047,0,0,0,0,0,0,0,0,2087,0,0,0,0,0,0,0,0,2127,0,0,534,534,534,534,534,0,0,411,0,0,0,411,69632,73728,0,368,368,0,423,65536,368,0,0,368,423,492,496,492,492,501,492,492,492,501,492,423,423,329,423,0,0,423,423,0,0,0,0,0,0,0,0,0,2048,0,0,0,0,0,0,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,540,563,540,563,540,540,563,540,587,563,563,563,563,563,563,563,587,587,587,540,587,587,587,587,587,587,587,563,563,540,563,587,563,587,1,12290,0,769,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1644,0,556,556,556,556,933,556,556,556,556,556,556,556,556,556,556,556,2285,556,2287,556,556,0,0,1207,0,1096,0,0,0,0,0,0,0,0,0,0,0,0,2447,0,0,0,534,534,534,534,1260,534,534,534,534,534,1272,534,534,534,534,534,0,0,0,2212,556,556,556,556,556,556,556,3029,556,556,556,556,556,556,556,556,3030,556,556,556,556,556,556,556,534,534,534,1341,901,556,556,556,556,556,556,556,556,1352,556,556,0,580,580,580,580,580,580,998,580,580,580,580,580,580,2650,580,580,580,580,580,580,580,580,580,2315,580,2317,580,580,580,580,556,556,556,1364,556,556,556,556,556,556,556,556,556,556,556,556,1378,1380,556,556,556,556,556,1871,556,556,556,556,556,556,556,556,556,556,556,556,1413,556,556,1417,534,534,534,534,534,3567,556,556,556,556,556,556,556,3573,580,580,580,580,580,2677,580,580,580,580,580,580,534,580,556,534,534,534,534,556,556,556,556,580,534,3597,556,556,556,3599,580,580,580,0,534,534,556,556,580,580,0,0,0,3243,0,0,0,0,0,0,0,657,0,0,0,0,0,0,0,0,306,306,306,0,0,0,0,0,424,424,0,424,433,0,424,424,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,486,486,460,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,541,564,541,564,541,541,564,541,588,564,564,564,564,564,564,564,588,588,588,541,588,588,588,588,588,588,588,564,564,541,564,588,564,588,1,12290,78114,1066,0,0,1069,1073,0,0,1077,1081,0,0,0,0,0,0,0,703,0,0,0,0,0,0,0,0,0,2104,0,0,0,0,0,0,0,0,0,0,1194,0,0,0,0,0,0,0,0,0,0,0,0,2472,0,0,0,0,1670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1667,0,0,0,0,0,2044,0,0,0,0,0,0,0,0,0,0,0,0,2704,0,0,0,0,2068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1681,1682,2392,580,580,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2928,0,0,0,2932,0,0,0,0,0,2938,0,0,0,0,0,0,0,719,0,0,0,0,0,0,0,0,0,721,0,0,0,0,0,0,2953,0,0,2956,0,0,0,0,0,2961,0,0,0,0,0,0,0,748,0,0,0,0,0,0,0,0,333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1204,2995,534,534,534,534,534,534,534,534,534,3004,534,534,534,534,534,0,0,2211,0,556,556,556,556,556,556,556,2268,556,556,556,556,2273,556,556,556,534,534,534,3012,534,534,3015,534,534,534,3018,556,556,556,556,556,0,0,0,0,580,580,580,580,580,580,580,556,556,534,556,580,556,580,1,12290,556,556,556,556,3054,556,556,3057,556,556,556,3060,580,580,580,580,0,0,0,0,0,0,0,0,2396,0,0,0,3077,580,580,580,580,580,580,580,580,580,580,3087,580,580,580,580,0,0,0,0,0,0,3442,0,3444,0,534,534,0,3120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2015,0,0,534,534,3151,534,534,534,534,534,534,534,534,534,534,534,534,534,3458,556,556,534,534,534,534,3163,534,534,534,534,534,534,534,3168,534,3170,534,534,534,534,534,1261,534,534,534,1270,534,534,534,534,534,534,534,2493,534,534,534,534,534,534,534,534,534,2196,534,534,534,534,534,534,556,556,556,580,580,3207,580,580,580,580,580,580,580,580,580,580,1962,580,580,580,580,580,580,3227,580,580,580,580,580,580,580,580,580,580,580,534,580,556,2912,534,2914,556,2916,3275,534,534,534,534,534,534,534,556,556,556,556,556,556,556,556,580,580,580,556,556,3287,556,556,556,556,556,556,556,556,556,3293,556,556,556,556,556,556,3466,556,556,556,556,556,556,580,580,580,580,580,580,580,580,580,580,3306,3587,3588,556,556,580,580,3591,3592,580,580,0,0,0,534,534,534,534,534,534,534,534,534,1716,534,534,534,0,683,684,0,0,0,0,689,0,0,0,364,364,364,0,0,0,0,0,534,830,534,534,534,534,534,534,860,534,534,534,534,534,534,2180,2181,534,534,534,534,534,534,2188,534,0,751,0,0,0,0,0,751,751,0,0,816,0,0,0,0,0,0,0,1134592,0,0,0,0,0,0,1134592,0,0,0,0,970,556,0,580,580,580,580,988,580,580,580,580,580,580,580,580,1044,580,0,0,0,841,988,914,534,534,534,534,897,556,556,556,556,970,0,580,580,580,580,1044,0,0,0,1145,0,0,0,0,0,0,0,0,0,0,0,0,0,2408448,0,0,534,1318,534,534,534,534,534,534,534,534,534,534,534,534,534,534,0,2549,1696,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1190,580,580,1988,580,534,580,556,534,534,534,534,556,556,556,556,580,580,580,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2122,0,0,0,0,0,0,0,0,534,534,534,534,534,2768,534,2769,534,534,2540,534,534,534,534,534,534,534,534,534,534,534,534,534,0,0,0,0,556,556,556,556,556,556,556,556,556,556,556,556,0,0,975,580,0,3129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2053,0,3235,534,3237,556,3239,580,0,0,0,0,0,0,0,0,0,0,0,3124,3125,0,0,0,556,556,556,3298,556,580,580,580,580,580,580,580,580,580,580,580,2359,580,580,580,580,3317,580,534,534,556,556,580,580,0,0,0,0,0,0,0,0,0,2076,0,0,0,0,0,0,461,461,479,487,487,479,487,487,487,487,487,487,487,487,512,520,520,520,520,520,520,520,520,520,520,520,520,520,520,529,520,520,520,520,520,542,565,542,565,542,542,565,542,589,565,565,565,565,565,565,565,589,589,589,542,589,589,589,589,589,589,589,565,565,542,565,589,565,589,1,12290,0,0,760,0,0,764,0,0,0,0,0,0,0,0,0,0,0,3132,0,0,0,0,0,778,0,0,0,0,0,0,0,782,0,0,0,0,0,0,0,779,0,0,0,0,788,0,0,0,0,0,0,800,0,0,0,0,0,0,805,0,0,0,782,0,0,0,0,364,364,0,0,0,1136,0,0,0,0,0,0,0,1606,0,0,0,0,0,0,0,0,553,576,553,576,553,553,576,553,0,805,0,0,0,0,0,805,805,0,0,0,0,782,0,0,0,0,0,534,831,534,534,534,846,534,534,534,534,534,0,2210,0,0,556,556,556,556,556,556,556,1893,26009,0,1898,580,1900,580,1901,580,0,0,0,0,823,778,0,0,823,0,0,0,0,0,0,0,0,2468,0,0,0,0,0,0,0,0,2022,0,2116,0,0,0,0,0,0,0,0,0,823,534,534,534,534,844,534,852,534,534,534,534,0,0,556,556,556,556,556,2815,556,2816,556,556,917,556,925,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2583,556,971,556,0,580,580,580,580,580,991,580,999,580,580,580,580,580,580,3097,580,580,580,580,580,534,580,556,534,534,534,534,1054,898,556,556,556,1059,971,0,580,580,580,1064,1045,0,1159,0,0,0,0,0,0,0,1167,0,0,0,0,0,0,0,789,0,0,0,0,0,0,770,0,0,0,1219,0,0,0,0,0,0,0,0,1224,0,0,0,0,0,0,0,1134592,0,364,0,0,0,1134592,0,0,0,1134592,1134592,0,0,1134592,0,0,1134592,0,1134592,534,534,1284,534,534,534,534,534,534,534,1292,534,534,534,534,534,0,2209,0,0,556,556,556,556,556,556,556,1842,556,556,556,556,556,556,556,556,26009,1896,580,580,580,580,580,580,534,534,534,1321,534,534,1325,534,534,534,534,534,1331,534,534,534,534,534,534,534,3342,534,3344,534,534,534,534,534,556,1338,534,534,1341,901,556,556,556,556,556,556,556,556,556,556,556,2568,556,556,556,556,556,1357,556,556,556,556,556,556,556,556,556,1376,556,556,556,556,556,0,2615,0,0,0,0,580,580,580,2619,580,556,556,556,1384,556,556,556,556,556,556,556,556,556,556,556,556,1816,1817,556,556,580,580,580,1522,580,580,0,534,580,556,534,534,534,534,534,556,556,556,556,556,3196,556,3198,556,556,556,556,556,556,556,556,1878,1879,556,556,556,556,556,556,534,534,534,534,1773,534,534,534,534,534,534,1781,534,534,534,534,0,0,556,556,556,2813,556,556,556,556,556,2818,556,556,1823,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2842,556,556,556,1853,556,556,556,556,1859,556,556,556,556,556,556,556,556,2840,556,556,556,556,556,556,556,1868,556,556,556,556,556,556,1876,556,556,556,556,556,556,556,556,2850,556,556,556,556,556,556,556,556,1886,1888,556,556,556,556,556,26009,0,580,580,580,580,580,580,0,1525,1526,1527,534,534,1529,534,534,556,580,580,580,1955,580,580,580,580,580,580,580,580,1964,580,580,580,580,580,1940,1941,1943,580,580,580,580,580,580,580,1951,580,580,580,1972,580,580,580,580,580,580,580,580,580,1982,1984,580,580,580,580,1925,580,580,580,580,580,580,580,580,580,580,580,2372,580,2374,580,580,0,0,0,2057,0,0,0,0,0,2063,0,0,0,0,0,0,0,1089,0,0,0,0,1241,1242,0,0,0,0,0,0,2071,0,0,0,0,0,0,0,0,2079,0,0,0,0,0,534,833,534,534,534,534,534,534,534,534,534,1306,534,534,534,534,534,534,2134,534,534,534,534,534,534,534,534,534,534,534,2146,534,534,534,534,534,534,534,3453,534,534,534,534,534,556,556,556,556,556,556,2826,556,556,556,556,556,556,556,556,556,949,556,556,556,556,967,556,2189,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1314,2203,534,534,534,534,0,0,0,0,556,556,556,556,556,556,2219,2290,556,556,556,556,0,0,0,0,580,580,580,580,580,580,2306,2377,580,580,580,580,2146,2318,2231,534,534,534,534,556,556,556,556,580,580,580,580,0,534,534,556,556,580,580,0,0,0,0,0,0,3246,0,0,0,0,0,2413,2414,0,0,2417,0,2419,0,0,0,0,0,0,0,0,2712,0,0,0,0,0,0,0,0,2728,0,0,0,0,0,0,0,0,2429,0,0,0,0,0,0,0,0,2406,0,0,0,0,0,0,0,0,2454,0,0,0,0,0,0,0,0,1587,0,0,0,0,0,0,0,1595,1596,0,0,0,2424,0,0,2427,0,0,0,0,0,0,2431,0,0,0,0,0,0,0,1159168,0,1159168,0,0,0,0,1159168,1159168,0,0,0,2452,0,0,0,0,0,0,0,2456,2457,0,0,2460,0,0,2463,0,0,0,0,0,0,0,0,0,0,2473,0,0,0,0,0,639,0,0,0,0,644,645,646,647,648,649,534,2487,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,3008,534,534,534,2515,534,534,534,534,534,534,534,534,534,534,534,534,1293,534,534,534,534,2527,534,534,534,534,534,534,2534,534,534,534,534,534,534,534,534,3343,534,534,534,534,534,534,556,534,534,2541,534,534,534,2544,534,534,534,534,534,534,534,0,0,0,0,556,556,556,556,2217,556,556,556,2574,556,556,556,556,556,556,2579,556,556,556,556,556,556,556,1427,1428,556,556,556,26009,1341,975,580,2585,556,556,556,556,556,556,2592,556,556,556,556,556,556,2599,556,556,556,556,556,3290,556,556,556,556,3291,3292,556,556,556,556,556,0,0,2298,0,580,580,580,580,580,580,580,2886,580,580,580,580,580,580,580,580,580,3312,580,580,580,580,580,580,2673,580,580,580,2676,580,580,580,580,580,580,580,2681,2682,2683,534,534,534,534,534,1289,534,534,534,534,534,534,534,534,534,534,534,2185,534,534,534,534,2720,2721,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2080,0,0,0,2736,0,0,0,0,0,0,0,0,0,0,2746,0,0,0,0,0,667,0,0,0,0,0,729,0,780,0,0,0,0,0,305,0,0,0,0,0,0,0,0,0,0,0,1565,0,0,0,0,0,0,2751,0,0,0,2753,0,0,0,0,0,0,0,0,0,0,2109,534,534,534,534,534,2787,2788,534,534,534,534,2791,534,534,534,534,534,534,534,534,534,556,556,3178,556,556,556,556,2796,534,534,534,2799,534,2801,534,534,534,534,534,534,2805,534,534,534,534,534,534,2492,534,534,534,534,534,534,534,534,534,1745,534,534,534,534,534,534,2834,2835,556,556,556,556,2838,556,556,556,556,556,556,556,556,556,2257,556,556,556,556,556,556,556,2844,556,556,556,2847,556,2849,556,556,556,556,556,556,556,2854,580,2867,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1949,580,580,580,2883,2884,580,580,580,580,2887,580,580,580,580,580,580,580,1928,580,580,580,580,580,580,580,580,1912,1913,580,580,580,580,1920,580,580,580,580,2893,580,580,580,2896,580,2898,580,580,580,580,580,580,1190,534,580,556,534,534,534,534,534,556,580,2903,580,580,580,580,580,580,534,580,556,534,534,556,556,580,580,0,0,3242,0,0,0,0,0,0,0,0,225734,225734,225734,225734,225734,225734,225734,225734,0,0,0,0,0,0,0,0,0,366,0,0,0,0,0,0,580,2918,0,0,2921,2922,0,0,0,0,0,0,0,0,0,0,0,3132,0,0,3255,0,534,534,534,534,2986,534,534,534,534,534,534,534,2992,534,534,534,534,534,534,891,534,534,534,534,556,556,556,556,556,0,0,0,0,580,580,2302,580,580,580,580,556,556,556,3026,556,556,556,556,556,556,556,3032,556,556,556,556,556,556,1841,556,556,556,556,556,556,556,556,556,3357,556,3359,556,556,556,556,580,580,580,580,3068,580,580,580,580,580,580,580,3074,580,580,580,580,580,2311,580,580,2314,580,580,580,580,580,580,2322,3138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1191,3247,0,0,0,0,0,0,0,0,0,0,3132,0,0,0,0,0,0,0,0,0,534,534,534,534,2767,534,534,534,534,534,534,534,534,3265,534,534,534,534,534,534,534,534,534,534,534,534,1341,0,556,556,534,534,3276,534,534,534,534,534,556,556,556,556,556,556,3283,556,556,556,556,556,3299,580,580,580,580,580,580,580,3304,580,580,580,580,580,3479,580,3481,580,580,3483,580,580,0,0,0,0,0,0,1210,0,0,0,0,0,0,0,0,0,0,2421,0,0,0,0,0,3132,0,0,0,0,534,534,534,534,534,534,534,534,3399,534,3401,3402,534,3404,534,556,556,556,556,556,556,556,556,3414,556,3416,3417,556,3419,556,3421,580,580,580,580,580,580,580,580,3430,580,3432,3433,580,3435,580,3437,0,0,0,0,0,0,0,0,0,0,534,534,534,534,534,534,534,3499,534,3501,534,534,580,580,580,3553,580,3554,580,580,580,580,0,0,0,0,534,534,534,534,534,534,3538,534,3539,534,534,534,3604,3605,3606,534,556,580,534,556,580,534,556,580,0,0,0,0,0,0,0,3211264,0,0,0,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,0,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3117056,2125824,2125824,2125824,2125824,590,566,566,566,566,566,566,566,590,590,590,543,590,590,590,590,590,590,590,566,566,543,566,590,566,590,1,12290,556,556,1398,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2853,556,0,0,730,0,0,0,0,0,0,0,0,0,0,0,0,0,1126,1127,0,534,534,534,534,2138,534,534,534,534,534,534,534,534,534,534,534,534,2784,534,534,534,556,556,556,2223,556,556,556,556,556,556,556,556,556,556,556,556,1849,556,556,556,580,580,580,2310,580,580,580,580,580,580,580,580,580,580,580,580,1490,580,580,580,402,0,0,0,0,380,0,69632,73728,0,0,0,0,425,65536,0,0,0,0,364,364,1133,0,0,0,0,0,0,0,0,0,0,3133,0,0,0,3136,0,425,425,0,425,0,439,425,425,462,462,462,469,462,462,462,462,462,462,462,462,469,462,462,462,462,462,462,462,462,476,462,488,488,462,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,531,544,567,544,567,544,544,567,544,591,567,567,567,567,567,567,567,591,591,591,544,591,591,591,591,591,591,591,567,567,544,567,591,567,591,1,12290,0,0,0,653,654,0,0,0,0,0,0,0,0,0,0,0,0,2939,0,0,2941,0,0,0,654,0,654,0,0,0,0,814,0,0,0,654,0,0,0,0,374,0,0,0,0,0,0,0,0,0,0,0,534,2130,534,534,534,556,919,556,556,556,556,556,556,556,556,556,556,957,556,556,556,556,556,556,3545,556,3546,556,556,556,556,580,580,580,580,580,580,0,0,0,534,534,534,534,534,534,556,556,534,534,884,534,534,556,556,957,556,556,0,580,580,1031,580,580,580,580,580,2907,580,580,534,580,556,534,534,556,556,580,580,0,0,0,0,0,0,0,3117,0,0,0,290,1066,0,0,1069,1073,0,0,1077,1081,0,0,0,0,0,0,0,1094,0,0,0,0,0,0,0,0,0,192965,192965,192965,192965,192965,192965,192965,192965,0,0,0,1088,1089,0,0,0,0,0,0,0,0,0,0,0,0,131072,131072,0,0,0,1130,0,0,364,364,0,0,0,0,0,0,0,0,0,0,0,3132,0,3254,0,0,1089,1088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2093,0,1088,0,0,0,0,0,0,0,0,0,0,0,0,534,1253,534,534,534,534,534,1303,534,534,1305,534,534,534,1309,534,534,534,0,901,556,556,556,556,556,556,556,556,556,556,556,556,3549,580,580,580,534,534,534,534,1287,534,534,534,534,534,534,534,534,534,534,534,534,2804,534,534,2807,534,534,1320,534,534,534,534,534,534,534,534,534,534,534,1334,534,534,534,534,534,1323,534,534,534,534,534,534,534,534,534,534,534,2509,534,534,534,534,534,534,534,1341,901,556,1344,556,556,556,556,556,556,556,556,556,2283,556,556,556,556,556,556,556,556,1358,1365,556,556,556,556,556,556,556,556,556,1379,556,556,0,580,580,580,985,989,992,580,1e3,580,580,580,1015,1017,556,556,556,1399,556,556,556,556,556,556,556,1412,556,556,556,556,556,556,1858,556,556,556,556,556,556,556,556,556,1402,556,556,556,556,556,556,556,1416,556,1436,580,580,580,580,580,580,580,580,580,580,580,1450,1457,580,580,580,580,580,3069,580,580,580,580,580,580,580,580,580,580,1510,580,580,580,580,580,580,1518,580,580,580,580,0,1266,1450,1358,534,534,1320,534,534,556,556,556,556,556,3354,556,556,556,556,556,556,3360,556,556,556,556,556,556,2615,0,580,580,580,580,580,580,580,580,580,2626,580,580,580,580,580,580,556,1412,556,556,580,580,1504,580,580,1066,0,0,0,0,0,0,0,1107,0,0,0,0,0,0,0,0,658,0,0,661,0,0,0,0,1570,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1228,1721,1722,534,534,534,534,1729,534,534,534,534,534,534,534,534,534,556,3177,556,556,556,3180,556,534,1770,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1311,534,556,556,1824,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3204,556,556,556,1838,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3294,556,580,1987,580,580,534,580,556,534,534,534,534,556,556,556,556,580,580,580,580,0,0,0,0,2694,2029,0,2030,0,0,0,0,0,0,0,0,0,2039,0,0,0,0,0,0,1700,0,0,0,0,0,0,0,0,0,298,0,0,0,0,0,0,534,534,2190,534,534,534,534,534,2195,534,534,534,534,534,534,534,1326,534,534,534,534,534,534,534,534,1291,534,534,534,534,534,534,534,556,2276,556,556,556,556,556,556,2282,556,556,556,556,556,556,556,1810,556,556,556,556,556,556,556,556,3188,556,556,556,556,556,556,556,580,2363,580,580,580,580,580,580,2369,580,580,580,580,580,580,580,2329,580,580,580,580,580,580,580,580,580,3557,0,0,0,0,534,534,580,580,2634,580,580,580,580,580,580,580,580,580,580,580,580,580,1948,580,580,0,0,0,0,2699,0,0,0,0,0,0,0,0,0,0,0,0,163840,0,0,0,534,534,534,534,534,2778,534,534,534,534,534,534,534,534,534,534,1779,534,534,534,534,534,534,2809,534,534,0,0,556,556,556,556,556,556,556,556,2817,556,556,556,556,556,3465,556,3467,556,556,3469,556,556,580,580,580,580,580,580,580,580,580,580,3373,580,3375,580,556,556,556,2858,556,556,0,0,580,580,580,580,580,580,580,580,1445,580,580,580,1454,580,580,580,2866,580,580,580,580,580,580,2874,580,580,580,580,580,580,580,580,1473,580,580,580,580,580,580,580,534,2996,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1767,1768,3036,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2275,580,3078,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1966,580,0,0,0,0,3130,0,0,0,0,0,0,0,0,0,0,0,0,167936,0,0,0,534,534,3174,534,534,534,534,534,534,556,556,556,556,556,556,556,1828,556,556,556,556,556,556,556,556,26009,0,580,580,580,580,580,580,0,0,0,0,3535,534,534,534,534,534,534,534,534,534,534,534,534,2991,534,534,534,3542,556,556,556,556,556,556,556,556,556,556,556,556,3550,580,580,580,580,580,3082,580,580,3085,580,580,580,580,580,580,580,1911,580,580,580,580,580,580,580,580,580,3072,580,580,580,580,580,580,463,463,463,447,447,463,447,447,447,447,447,447,447,447,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,545,568,545,568,545,545,568,545,592,568,568,568,568,568,568,568,592,592,592,545,592,592,592,592,592,592,592,568,568,545,568,592,568,592,1,12290,0,0,0,655,0,655,0,0,0,0,0,0,0,0,655,0,0,0,0,0,0,0,0,0,0,0,556,920,556,556,934,556,556,556,556,556,556,556,556,556,556,556,2841,556,556,556,556,0,0,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,1155,0,0,0,0,0,1177,0,0,0,0,0,0,0,0,0,0,0,0,0,2461696,0,0,0,0,0,1232,0,0,0,0,0,0,0,0,0,0,0,0,0,2801664,0,0,534,534,534,534,1322,534,534,534,534,534,1329,534,534,534,534,534,534,534,2505,534,2507,534,534,534,534,534,534,534,1793,534,534,534,534,1341,0,556,556,556,556,1359,556,556,556,556,556,556,556,556,556,556,556,556,556,965,556,556,556,556,556,1421,556,556,556,556,556,556,556,556,26009,1341,975,580,580,580,580,1974,1975,580,580,580,580,580,580,580,580,580,580,2641,580,580,580,2644,580,556,556,1534,556,580,580,580,1538,580,1066,0,1542,0,0,0,1548,0,0,0,1554,0,0,0,1560,0,0,0,0,0,0,0,0,0,2444,0,0,0,2448,0,0,1599,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1569,534,534,1723,534,534,534,534,534,534,534,534,534,1734,534,534,534,534,534,534,892,534,534,534,534,556,556,556,556,556,0,0,2298,0,0,0,580,580,580,580,580,580,3480,580,580,580,580,580,580,0,0,0,534,3582,534,534,534,534,556,3586,1754,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1316,0,2096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2108,0,534,534,534,534,2154,534,534,534,534,534,534,534,534,534,534,534,534,3006,534,534,534,556,556,556,2239,556,556,556,556,556,556,556,556,556,556,556,556,1864,556,556,1867,580,580,580,2326,580,580,580,580,580,580,580,580,580,580,580,580,1512,580,580,580,556,556,3194,556,556,556,556,556,556,556,556,556,556,556,556,556,1414,556,556,0,0,3328,3132,0,0,0,0,0,0,0,0,0,534,534,534,534,534,851,534,534,534,534,534,580,580,3379,580,580,534,556,580,0,0,0,3384,0,0,0,0,0,0,306,204800,0,0,0,0,0,0,0,0,0,364,298,0,0,0,0,0,3132,0,0,0,0,534,534,534,534,3395,534,534,534,534,534,534,534,2156,534,2158,534,534,534,534,534,534,534,2170,534,534,534,534,534,534,534,534,534,2546,534,534,534,534,0,2549,387,389,339,0,0,0,0,0,0,338,0,0,339,0,0,0,0,0,0,2023,0,0,0,0,0,0,0,0,0,0,359,0,0,0,0,0,0,0,0,386,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,393,394,0,395,0,0,0,0,0,395,0,0,0,0,0,1209,0,0,0,0,1214,0,0,0,0,0,0,0,2405,0,0,0,0,0,0,0,0,0,1094,0,0,0,0,1099,0,0,0,338,0,0,440,0,0,464,464,464,464,464,464,464,464,546,569,546,569,546,546,569,546,475,464,464,464,493,470,493,493,493,493,493,493,493,493,464,464,470,464,464,464,464,464,464,464,464,464,464,464,474,474,464,475,464,464,464,593,569,569,569,569,569,569,569,593,593,593,546,593,593,593,593,593,593,593,569,569,546,569,593,569,593,1,12290,0,0,0,699,0,0,0,0,0,0,0,0,708,0,710,0,0,0,0,431,0,0,0,0,0,0,0,0,0,0,0,0,1643,0,0,0,0,743,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2411,0,0,759,0,0,0,0,0,0,0,0,0,0,0,656,0,775,0,0,0,0,0,824,0,0,0,0,0,0,779,656,0,0,796,0,0,0,0,699,0,0,0,0,0,0,799,0,0,0,0,434,0,0,331,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,796,779,0,0,801,0,660,0,775,0,0,0,0,0,0,0,0,2755,0,0,0,0,0,0,0,0,2937,0,0,0,0,0,0,0,0,2741,0,0,0,2745,0,2747,0,0,0,775,801,0,801,796,0,0,0,815,0,0,0,656,818,828,0,0,0,0,534,832,534,534,534,848,534,534,862,534,534,534,534,534,534,2504,534,534,534,534,534,534,534,534,534,898,534,556,556,556,556,556,534,534,875,534,534,534,534,893,534,534,534,556,556,904,556,556,0,580,580,976,580,580,580,580,580,580,1007,580,580,580,580,580,1908,580,580,580,580,580,580,580,580,580,1921,556,921,556,556,935,556,556,556,556,948,556,556,556,556,966,556,556,556,556,580,580,580,580,580,580,0,3594,0,534,534,534,534,534,534,534,534,534,3156,534,534,534,534,534,534,534,2802,534,534,534,534,534,534,534,534,534,1795,534,534,1341,1800,556,556,580,1022,580,580,580,580,1040,580,580,580,0,0,0,534,580,556,556,556,556,580,580,580,580,580,580,3428,580,580,580,580,580,534,556,580,3381,0,3383,0,0,0,0,0,0,0,2126,0,0,0,534,534,534,534,534,534,534,534,534,534,1717,534,534,0,0,1131,0,364,364,0,1134,0,0,0,0,0,0,0,0,0,2481,0,0,0,0,0,0,0,1174,0,0,0,0,0,0,1091,0,0,0,0,0,0,0,0,111044,111044,111044,111044,111044,111044,111044,111044,1,12290,1093,0,0,0,0,0,0,1197,0,0,0,0,1202,0,0,0,0,0,0,2033,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,324,0,0,0,0,1131,0,0,1237,0,0,0,0,0,0,0,0,0,2713,0,0,0,0,0,0,1216,0,0,0,0,1248,0,0,0,0,0,0,0,534,534,534,841,534,534,534,534,534,534,534,556,556,1360,556,556,556,556,556,556,556,556,556,556,556,556,1382,580,580,1497,580,580,580,580,580,580,580,580,580,580,580,580,580,2334,580,580,556,1533,556,556,580,580,1537,580,580,1066,0,0,0,0,0,0,0,1121,0,0,1124,1125,0,0,0,0,1584,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1614,0,0,0,1602,0,0,1605,0,1607,0,0,0,0,0,0,0,0,122880,0,122880,122880,122880,122880,122880,0,0,1697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2423,0,534,1755,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2162,534,556,1822,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3049,556,556,556,556,2265,556,556,556,556,556,556,556,556,556,556,556,3031,556,556,556,556,0,0,0,0,2402,0,2404,0,0,2407,0,0,0,0,0,0,0,1165,0,0,0,0,0,0,0,0,0,750,0,0,0,0,0,0,2412,0,0,0,2415,2416,0,0,0,0,0,0,0,0,0,0,0,106496,0,0,0,0,0,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,0,2912256,0,3207168,0,0,0,0,2440,0,2441,0,0,0,0,0,0,0,0,0,0,2470,0,0,0,0,0,2461,0,0,0,0,0,0,0,0,2469,0,0,0,0,0,2475,0,0,0,0,2478,0,0,0,0,0,0,0,0,0,2486,0,0,0,0,435,0,0,447,463,463,463,463,463,463,463,463,463,473,463,463,463,463,463,463,534,2500,2501,534,534,534,534,534,2506,534,2508,534,534,534,534,2512,2525,534,534,534,534,534,534,2533,534,534,534,534,2537,534,534,534,534,534,534,1262,534,534,534,534,534,534,1277,534,534,556,556,556,2561,556,556,2564,2565,556,556,556,556,556,2570,556,2572,556,556,556,556,2576,556,556,556,556,556,556,556,556,2582,556,556,0,580,580,977,580,580,580,993,580,580,580,580,580,580,1443,580,580,580,1447,580,580,1458,580,580,556,556,2602,556,556,556,556,556,556,556,556,556,556,556,556,556,1833,556,556,2685,534,534,556,2687,556,556,580,2689,580,580,0,0,0,0,0,0,0,2936,0,0,0,0,0,0,0,0,0,2036,0,0,0,0,0,0,0,0,2708,0,0,0,0,0,0,0,2714,2715,2716,0,0,0,0,0,0,2060,0,0,0,0,0,2064,0,0,2066,0,2735,0,2737,0,0,0,2740,0,0,2743,0,0,0,0,0,0,0,2960,0,0,0,0,0,0,0,0,0,2430,0,0,0,0,0,2435,534,534,2810,534,0,0,2811,556,556,556,556,556,556,556,556,556,2566,556,556,556,556,556,556,556,2856,556,556,2859,556,0,0,2860,580,580,580,580,580,580,580,2651,580,580,580,580,580,580,2658,580,580,2892,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2321,580,2902,580,580,2905,580,580,2908,580,2909,2910,2911,534,534,556,556,580,580,0,0,0,0,0,3115,0,0,0,0,0,0,0,69632,73728,0,0,0,420,0,65536,0,2929,2930,0,0,0,0,2935,0,0,0,0,0,0,0,0,0,0,2730,0,0,0,0,0,534,534,2997,534,2999,534,534,534,534,534,534,3005,534,534,3007,534,534,534,534,534,1324,534,534,534,534,534,534,534,534,1335,1336,556,3037,556,3039,556,556,556,556,556,556,556,3046,556,556,3048,556,556,556,556,580,580,580,580,580,1066,0,0,0,0,0,0,0,377,0,380,0,0,0,380,0,0,580,580,3079,580,3081,580,580,580,580,580,580,580,3088,580,580,3090,534,534,534,534,534,3164,534,534,534,534,534,534,534,3169,534,534,534,534,534,534,2779,534,534,534,534,534,534,534,534,534,534,3167,534,534,534,534,534,3181,3182,556,556,556,556,3186,3187,556,556,556,556,556,3191,556,556,0,580,580,978,580,580,580,995,580,580,1009,580,580,580,580,580,2353,2354,580,580,580,580,580,580,2361,580,580,556,556,556,580,580,580,580,580,580,580,3210,3211,580,580,580,580,580,1442,580,580,580,580,1448,580,580,580,580,580,580,3524,580,3526,580,580,580,580,0,0,0,0,0,0,0,0,0,0,534,534,3215,3216,580,580,580,580,580,3220,580,580,580,580,580,580,580,580,1507,580,580,580,580,580,580,580,3226,580,580,580,580,580,580,580,580,580,580,580,580,534,580,556,2684,556,556,556,3288,556,556,556,556,556,556,556,556,556,556,556,556,2258,556,556,556,3307,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2347,2348,3132,0,0,0,0,534,534,3393,534,534,534,534,3398,534,534,534,534,534,534,1290,534,534,534,534,534,534,534,534,534,1267,534,534,534,534,534,534,534,3403,534,534,556,556,3408,556,556,556,556,3413,556,556,556,556,556,556,1874,556,556,556,556,556,1881,556,556,556,3418,556,556,556,580,580,3424,580,580,580,580,3429,580,580,580,580,580,1468,580,580,580,580,580,580,580,1476,580,580,3434,580,580,580,0,0,0,0,0,3441,0,0,0,0,534,534,534,534,3497,534,534,534,534,534,534,534,534,1731,534,534,534,534,1735,534,534,534,3563,3564,534,534,556,556,556,3569,3570,556,556,556,580,580,580,580,580,580,580,580,580,3212,580,580,580,3575,3576,580,580,580,0,0,0,534,534,534,534,534,534,556,556,0,580,580,979,580,580,580,580,580,580,580,580,580,580,2358,580,580,580,580,580,341,342,343,344,345,0,0,0,0,0,0,0,0,0,0,0,0,221184,0,0,0,0,0,0,390,0,0,0,0,0,0,0,0,0,0,0,0,302,0,0,0,344,344,345,344,0,343,344,448,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,480,489,489,497,489,499,489,489,499,499,489,499,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,547,570,547,570,547,547,570,547,594,570,570,570,570,570,570,570,594,594,594,547,594,594,594,594,594,594,594,570,570,547,570,594,570,594,1,12290,650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,665,666,0,668,669,0,0,0,0,0,675,0,0,0,0,0,0,0,1220,1250,1251,0,1220,0,534,534,534,0,0,0,685,0,0,0,0,0,0,692,364,364,364,0,0,0,0,0,687,0,0,0,0,0,364,364,364,0,0,0,0,0,734,0,0,0,0,0,0,0,0,0,0,0,1691,0,0,0,0,712,0,714,0,716,0,0,0,0,0,0,0,0,0,726,0,0,0,0,436,0,0,0,0,0,0,0,0,0,0,0,0,2138112,0,0,0,0,0,0,639,745,746,747,0,0,0,0,0,753,754,0,0,0,0,0,748,0,0,803,0,0,0,0,0,0,0,0,1134592,0,0,1134592,0,0,0,0,0,685,0,0,665,0,685,0,797,668,716,0,685,798,0,0,0,0,0,1090,1091,1092,1093,0,0,0,0,0,0,0,0,2948,0,0,0,0,0,2951,0,0,0,754,0,0,0,0,0,0,0,0,747,807,808,0,0,0,0,0,1119,0,0,0,0,0,0,0,0,0,0,0,3055616,0,0,0,3133440,0,0,0,0,747,0,0,812,692,0,0,0,817,0,0,0,0,0,0,2073,0,2075,0,0,0,0,0,0,0,0,1702,0,0,1703,0,0,1704,0,819,0,0,0,685,692,0,0,685,817,817,0,0,0,0,0,0,0,3131,0,0,0,0,0,0,0,0,749,0,0,0,0,0,0,756,870,873,534,534,534,885,889,534,534,534,534,556,556,556,911,915,918,556,926,556,556,556,941,943,946,556,556,556,958,962,556,556,0,580,580,980,986,580,580,580,580,1004,580,580,580,580,580,1469,580,580,580,580,580,580,580,580,580,580,2627,580,580,2630,2631,580,1020,580,580,580,1032,1036,580,580,580,580,0,0,0,1048,1049,1050,838,534,885,889,1055,911,556,958,962,1060,0,985,580,1032,1036,1065,1101,0,0,0,0,1105,0,0,1108,0,0,0,0,0,0,0,0,249856,249856,249856,249856,249856,249856,249856,249856,1,12290,1298,534,534,1302,534,534,534,534,534,534,534,534,534,534,1312,534,534,534,534,534,1727,534,534,534,534,534,534,534,534,534,534,1796,534,1341,0,556,556,534,1319,534,534,534,534,534,534,534,534,534,534,1332,534,534,534,534,534,534,1304,534,534,534,534,534,534,534,534,534,1266,1273,534,534,534,534,534,556,1383,556,556,556,556,556,556,556,1390,556,556,1394,556,556,556,556,556,1385,556,556,556,556,556,556,556,556,556,556,2595,556,556,556,556,556,580,580,580,1482,580,580,1486,580,580,580,580,580,580,580,580,580,1929,580,580,580,580,580,580,580,1496,580,580,1503,580,580,580,580,580,580,580,580,580,580,1516,1615,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1655,0,0,0,1647,0,1649,0,0,0,1651,0,741,0,0,0,0,0,0,330,0,0,0,0,0,0,0,330,0,0,69632,73728,0,418,418,0,0,65536,418,0,0,0,534,1709,534,534,534,534,534,534,1715,534,534,534,534,0,0,556,2812,556,556,556,556,556,556,556,556,3356,556,556,556,556,556,556,556,534,534,1787,534,534,534,534,534,534,534,534,534,1341,0,556,1803,556,556,556,556,1839,556,556,556,1843,556,556,1848,556,556,556,556,556,556,1892,556,26009,0,580,580,580,580,580,580,0,1269,1453,1361,534,534,534,534,534,556,580,580,580,1906,580,580,580,580,580,580,580,580,580,580,580,580,1917,580,580,580,1935,580,580,580,1939,580,580,1944,580,580,580,580,580,580,580,580,1945,580,580,580,580,580,580,580,0,0,2010,0,1077,0,0,0,2012,0,1081,0,0,0,0,0,0,0,3144,0,0,0,0,0,0,3147,0,534,534,534,2177,534,534,534,534,534,534,534,534,534,534,534,534,1341,1800,556,556,556,556,2263,556,556,556,556,556,556,556,556,556,556,556,556,556,1850,556,556,580,580,2350,580,580,580,580,580,580,580,580,580,580,580,580,580,2346,580,580,0,2550,0,1800,556,556,556,556,556,556,556,556,556,556,556,556,2569,556,2571,556,556,2613,556,556,556,0,0,0,2616,0,1896,580,580,580,580,580,580,3219,580,580,580,580,580,580,580,580,3225,0,0,2761,0,0,0,534,2765,534,534,534,534,534,534,534,534,534,3166,534,534,534,534,534,3171,534,534,2789,534,534,534,534,534,534,534,534,534,534,534,534,534,1295,534,534,556,556,2836,556,556,556,556,556,556,556,556,556,556,556,556,556,1865,556,556,534,534,2985,534,534,534,534,534,534,534,534,534,534,534,534,534,1310,534,534,534,534,534,2998,534,534,534,534,534,534,534,534,534,534,534,534,1341,1801,556,556,556,3025,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3205,556,556,3038,556,556,556,556,556,556,556,556,556,556,556,556,556,2247,556,556,580,580,3067,580,580,580,580,580,580,580,580,580,580,580,580,580,2643,580,580,580,580,580,3080,580,580,580,580,580,580,580,580,580,580,580,580,2345,580,580,580,534,534,534,534,534,3267,534,534,534,534,534,534,534,534,534,534,2159,534,534,534,534,2163,3285,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2289,3336,534,534,534,534,3340,534,534,534,534,534,3346,534,534,534,556,556,556,556,580,580,580,580,580,1066,0,0,0,1545,0,0,0,0,0,1620,0,0,1623,0,1625,0,0,0,0,0,0,0,2480,0,0,0,0,0,0,0,0,555,578,555,578,555,555,578,555,556,556,3351,556,556,556,556,3355,556,556,556,556,556,3361,556,556,0,580,580,981,580,580,580,580,580,580,1010,1012,580,580,580,580,1029,580,580,580,580,580,0,0,0,534,580,556,3377,580,580,580,580,534,556,580,0,0,0,0,0,0,0,0,0,3251,0,3132,3253,0,0,3256,3132,0,0,0,0,534,534,534,534,534,3396,534,534,534,3400,534,534,534,534,534,1742,534,534,534,534,534,534,534,534,534,534,2536,534,534,534,534,534,388,0,0,0,392,388,0,0,0,0,0,0,0,0,0,0,0,233472,0,0,0,0,0,0,0,404,0,346,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,437,0,0,0,0,0,0,0,0,0,0,0,636,0,0,0,0,515,515,515,515,0,0,0,0,0,0,0,0,0,515,515,515,515,515,515,515,515,548,571,548,571,548,548,571,548,595,571,571,571,571,571,571,571,595,595,595,548,595,595,595,595,595,595,595,571,571,610,615,595,615,621,1,12290,0,0,744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1668,534,534,876,534,534,534,534,894,534,534,534,556,556,905,556,556,0,580,580,982,580,580,580,580,1001,1005,1011,580,1016,580,580,1023,580,580,580,580,1041,580,580,580,0,0,0,534,580,556,556,556,556,580,580,580,580,580,1066,0,0,1544,0,0,0,0,0,0,2764,534,534,534,534,534,534,534,534,534,1268,534,534,534,534,534,534,0,0,0,0,1162,0,0,0,0,0,0,0,0,0,0,1173,0,0,0,1178,0,0,0,0,1094,0,0,0,0,0,0,0,0,274432,274432,274432,0,274432,274432,274432,274432,1256,534,534,534,534,534,534,534,534,1269,534,534,534,534,1279,534,534,534,534,534,1757,534,534,534,534,534,534,534,534,534,534,2197,534,534,534,534,534,534,534,534,1341,901,556,556,556,1347,556,556,556,556,556,556,556,1877,556,556,556,556,556,556,556,556,26009,0,580,1899,580,580,580,580,556,556,1361,556,556,556,556,1371,556,556,556,556,556,556,556,556,3468,556,556,3470,556,580,580,580,556,556,556,556,1422,556,556,556,556,556,556,556,26009,1341,975,580,580,580,580,1990,1991,1992,534,1994,534,534,556,1998,556,556,580,580,580,3367,580,580,580,580,3371,580,580,580,580,580,580,3232,580,580,580,580,580,580,534,580,556,2384,534,534,534,2388,556,556,556,580,580,1439,580,580,580,580,580,580,580,580,580,1453,580,580,580,580,580,2381,2382,2383,534,534,534,534,556,556,556,556,3410,556,556,556,556,556,556,556,580,1463,580,580,580,580,580,580,580,580,580,580,580,580,580,1477,580,580,1498,580,580,580,580,580,580,580,580,580,580,580,1514,580,580,580,580,2005,0,2007,0,2009,0,2011,0,0,0,0,0,0,0,2034,2035,0,2037,2038,0,0,0,0,0,0,0,1555,0,0,0,1561,0,0,0,0,0,0,0,0,0,286720,286720,0,286720,286720,1,12290,0,0,0,1586,0,0,0,0,0,0,0,0,0,0,0,0,303,0,0,0,0,1600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2434,0,556,1852,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3363,0,1556,0,0,0,0,0,1562,0,0,0,0,0,0,0,0,305,204800,204800,0,205105,204800,1,12290,0,0,0,2070,0,0,0,0,0,0,0,0,0,0,0,0,337,0,0,0,0,0,2111,0,0,0,0,0,0,0,0,0,0,0,0,0,1188,0,0,534,2165,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2173,534,2250,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2584,2337,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2375,580,2211,0,0,0,556,556,556,556,556,556,556,556,556,556,556,556,2597,556,556,556,556,556,556,2588,556,556,556,556,556,556,556,556,556,556,556,556,2831,556,556,556,534,3107,556,3109,580,0,0,0,0,0,0,0,0,0,0,0,0,2138112,1170,0,0,0,0,0,3132,3330,0,0,3332,0,0,0,0,0,534,3335,534,534,534,534,534,1774,534,534,534,1778,534,534,534,534,534,534,534,1776,534,534,534,534,534,534,534,534,534,2535,534,534,534,534,534,534,534,3337,534,534,534,534,534,534,534,534,534,534,534,534,534,556,556,556,556,556,556,556,556,3350,556,556,3352,556,556,556,556,556,556,556,556,556,556,556,556,2852,556,556,556,556,556,580,3366,580,580,3368,580,580,580,580,580,580,580,580,580,1946,580,580,580,580,580,580,3132,0,3388,0,3390,534,534,534,534,534,534,534,534,534,534,534,556,556,902,556,556,0,0,0,783,0,783,0,0,0,0,0,0,0,0,783,0,0,0,0,556,556,556,556,556,556,556,556,2557,556,556,556,556,556,556,2848,556,556,556,556,556,556,556,556,556,947,556,556,556,556,556,556,556,922,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1381,556,556,972,0,580,580,580,580,580,580,996,580,580,580,580,580,580,1910,580,580,580,580,1916,580,580,580,580,78114,1066,0,0,1070,1074,0,0,1078,1082,0,0,0,0,0,0,0,1222,0,0,0,0,1225,0,1181,0,534,3162,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2201,534,580,580,580,3218,580,580,580,580,580,580,580,580,580,580,580,580,2629,580,580,580,347,347,349,347,0,0,347,347,0,0,0,0,348,0,0,0,0,0,0,2125,0,0,2128,0,534,534,2131,534,534,0,0,0,347,347,349,347,347,347,347,347,347,506,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,549,572,549,572,549,549,572,549,596,572,572,572,572,572,572,572,596,596,596,549,596,596,596,596,596,596,596,572,572,549,572,596,572,596,1,12290,0,0,0,715,0,717,0,0,0,0,0,0,0,0,0,0,0,1147348,0,0,0,0,0,0,0,732,0,0,0,0,0,0,0,0,0,0,0,0,353,354,355,356,758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,673,674,0,0,0,0,0,0,0,794,795,0,0,0,0,795,0,0,0,0,0,795,0,0,794,809,0,803,0,657,0,0,0,0,0,0,0,0,0,0,0,0,3117056,0,0,0,0,820,0,0,0,0,0,0,795,0,0,0,0,0,0,0,0,1159168,364,0,0,0,0,0,0,0,0,0,0,795,534,534,839,534,534,534,534,857,534,534,534,534,534,534,1728,534,534,534,534,534,534,534,534,534,534,3272,534,534,534,3273,3274,534,534,877,879,534,534,890,534,534,534,534,556,556,906,912,556,556,556,556,580,580,580,580,580,1066,0,1543,0,0,0,1549,556,556,556,930,556,556,556,556,556,950,952,556,556,963,556,556,556,556,556,1840,556,556,556,556,556,556,556,556,556,556,1831,556,556,556,556,1835,580,1024,1026,580,580,1037,580,580,580,580,0,0,0,534,580,556,556,556,556,580,580,580,580,580,1066,1540,0,0,0,1546,0,0,0,0,0,131072,0,131072,131072,131072,131072,0,131072,131072,131072,131072,131072,131072,0,0,0,0,0,131072,0,131072,1,12290,839,879,534,890,534,912,952,556,963,556,0,986,1026,580,1037,580,580,580,580,2005,0,2007,0,2009,0,2011,0,0,2397,0,0,0,0,0,330,331,332,0,0,0,0,0,0,0,0,0,2083,0,0,0,0,0,0,0,0,0,0,0,0,2731,0,0,0,0,0,0,1132,364,364,0,0,1135,0,0,0,1138,0,1140,0,0,0,0,556,556,556,556,556,556,556,2556,556,556,556,556,556,556,2577,556,556,556,556,556,556,556,556,556,26009,1897,580,580,580,580,580,580,1142,0,0,0,0,0,0,0,0,0,0,0,0,0,1156,0,0,0,0,556,556,556,556,556,556,2555,556,556,556,556,2559,1158,0,0,0,0,1163,0,0,0,0,1168,0,0,0,0,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,1247,0,0,0,0,0,0,0,1168,534,534,534,534,534,534,1743,534,534,534,534,534,534,534,534,534,897,534,556,556,556,556,914,534,534,534,1286,1288,534,534,534,534,534,534,534,534,534,534,534,556,556,907,556,556,534,534,534,1341,901,556,556,556,556,1348,556,556,556,556,556,556,0,2298,580,580,580,580,580,580,580,580,2640,580,580,580,580,580,580,2645,580,580,580,1440,580,580,580,580,580,580,580,580,580,580,580,580,2670,2671,580,580,1494,580,580,580,580,580,580,580,1508,580,580,580,580,580,580,580,2678,580,580,580,580,534,580,556,534,534,534,1996,556,556,556,2e3,580,580,1519,1520,580,580,580,0,534,580,556,534,1528,534,534,1531,556,556,556,556,580,580,580,580,580,1066,1541,0,0,0,1547,0,0,0,0,556,556,556,2553,556,2554,556,556,556,556,556,556,0,0,580,580,580,580,2863,580,580,580,1532,556,556,1535,580,1536,580,580,1539,1066,0,0,0,0,0,0,0,1577,0,0,0,0,0,0,0,0,0,770,0,0,0,0,0,0,0,0,1617,0,0,0,0,0,0,0,0,0,0,0,0,0,1203,0,0,0,0,1633,0,0,0,0,0,0,0,0,0,0,0,0,0,1217,0,0,0,0,0,0,1658,0,0,0,0,0,0,0,0,0,0,0,364,364,364,0,0,0,0,1698,0,0,0,0,0,0,0,0,0,0,0,0,0,1226,0,0,534,1738,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2207,2549,534,534,534,1788,534,534,534,534,1794,534,534,534,1341,0,556,556,556,556,556,1891,556,556,26009,1896,580,580,580,580,580,580,1470,1472,580,580,580,580,580,580,580,580,1960,580,580,1963,580,580,580,580,556,556,1870,556,556,556,1875,556,556,556,556,556,556,556,556,1884,556,556,556,556,1890,556,556,556,26009,0,580,580,580,580,580,580,1927,580,580,580,580,1931,580,580,580,580,580,1904,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2672,580,580,580,1971,580,580,580,580,580,580,580,580,1980,580,580,580,580,580,1504,580,580,580,580,580,580,580,580,580,580,2316,580,580,2320,580,580,1986,580,580,580,534,580,556,534,534,534,534,556,556,556,556,580,580,580,580,0,0,0,2693,0,0,0,0,0,2099,0,2101,2102,2103,0,2105,0,0,0,0,0,0,0,69632,73728,0,0,0,0,424,65536,0,0,0,0,2123,0,0,0,0,0,0,0,2129,534,534,534,534,0,2211,556,556,556,556,556,556,556,556,556,556,3045,556,556,556,556,556,534,534,2136,534,534,534,534,534,534,534,534,534,534,534,534,534,1333,534,534,534,534,534,2166,534,2168,534,2171,534,534,534,534,534,534,534,534,534,3271,534,534,534,534,534,534,534,534,534,534,2178,534,534,534,534,534,2184,534,534,534,534,534,534,534,2792,534,534,534,534,534,534,534,534,534,2519,534,534,534,534,534,534,534,534,534,534,2206,0,0,0,0,2213,556,556,556,556,556,556,939,556,944,556,951,556,954,556,556,968,556,2221,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1415,556,556,556,2251,556,2253,556,2256,556,556,556,556,556,556,556,556,556,2607,556,556,556,2610,556,556,556,556,556,2264,556,556,556,556,556,2270,556,556,556,556,556,556,1369,556,556,556,1374,556,556,556,556,556,556,556,556,556,2293,0,0,0,0,2300,580,580,580,580,580,580,1942,580,580,580,1947,580,580,580,580,580,580,2308,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2880,580,580,580,2338,580,2340,580,2343,580,580,580,580,580,580,580,580,580,1961,580,580,580,580,580,580,580,580,580,2351,580,580,580,580,580,2357,580,580,580,580,580,580,1958,1959,580,580,580,580,580,580,580,580,580,3234,580,580,580,534,580,556,0,0,2400,2401,0,0,0,0,0,0,0,0,0,0,0,0,399,0,0,0,2436,0,0,2439,0,0,0,0,2443,0,0,0,0,0,0,0,0,2818048,2846720,0,2916352,0,0,3002368,0,0,0,2451,0,0,0,0,0,0,0,0,0,0,0,2459,0,0,0,0,556,556,2552,556,556,556,556,556,556,556,556,556,2851,556,556,556,556,556,556,0,0,0,2477,0,0,0,0,0,0,0,0,0,2485,0,0,0,0,0,1195,0,0,0,0,0,0,0,0,0,0,0,111044,0,0,0,0,534,534,534,534,534,2503,534,534,534,534,534,534,534,534,534,534,2520,534,534,534,534,534,556,556,556,556,2562,556,556,556,556,556,2567,556,556,556,556,556,0,0,0,0,580,580,580,580,2304,580,580,580,2633,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2901,580,534,534,534,2686,556,556,556,2688,580,580,580,2690,2691,0,0,0,0,0,0,2453,0,0,0,0,0,0,0,0,0,0,1185,0,0,0,0,0,0,0,0,2709,0,2710,0,0,0,0,0,0,0,0,0,0,0,1159168,0,0,0,0,2855,556,556,556,556,556,0,0,580,580,580,580,580,2864,580,2865,580,580,2904,580,580,580,580,580,534,580,556,534,534,556,556,580,580,0,0,0,3113,0,0,0,0,0,0,0,0,254407,254407,254407,254407,254407,254407,254407,254407,1,12290,556,556,556,3053,556,556,556,556,556,556,556,580,3061,580,580,580,580,580,2649,580,580,580,580,580,580,580,580,580,580,2371,580,580,580,580,580,580,580,580,580,3095,580,580,580,580,580,580,580,534,580,556,534,534,2386,2387,556,556,2390,2391,534,534,3338,534,534,534,534,534,534,534,534,534,3347,534,534,3349,556,556,556,556,3353,556,556,556,556,556,556,556,556,556,3362,556,556,556,556,580,580,580,580,580,3427,580,580,580,3431,580,580,580,580,1031,580,580,580,580,580,0,0,0,534,580,556,556,556,3365,580,580,580,580,3369,580,580,580,580,580,580,580,580,2356,580,580,580,580,580,580,580,580,3378,580,580,580,534,556,580,0,0,0,0,0,0,0,0,402,0,0,0,0,0,0,0,534,534,534,3449,534,534,534,534,534,534,534,534,534,556,556,556,3179,556,556,556,556,556,3462,556,556,556,556,556,556,556,556,556,556,580,580,580,3300,580,580,580,3303,580,580,580,580,580,3476,580,580,580,580,580,580,580,580,580,580,0,0,0,534,580,556,0,0,3491,0,534,534,534,534,534,534,534,534,534,534,534,534,3158,534,534,534,534,534,3565,534,556,556,556,556,556,3571,556,556,580,580,580,580,580,580,580,580,580,3372,580,580,580,580,580,580,3577,580,580,3579,0,3581,534,534,534,534,534,534,556,556,556,556,556,2224,556,556,2227,556,556,556,556,556,556,2235,400,0,0,0,0,0,367,375,403,0,0,0,0,0,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2054,408,410,0,0,367,375,0,69632,73728,0,0,0,0,426,65536,0,0,0,0,556,2551,556,556,556,556,556,556,556,556,556,556,2271,556,556,556,556,556,426,426,0,426,0,410,426,449,0,0,0,0,0,0,0,0,534,556,534,556,534,534,556,534,367,0,0,395,0,0,0,0,0,350,0,0,367,0,0,395,0,408,0,490,490,0,490,490,490,490,490,490,490,490,516,516,516,516,449,449,449,449,524,449,449,525,449,516,530,516,516,516,530,516,516,516,516,532,550,573,550,573,550,550,573,550,597,573,573,573,573,573,573,573,597,597,597,550,597,597,597,597,597,597,597,573,573,611,616,597,616,622,1,12290,0,0,636,0,0,0,0,0,0,0,0,0,0,0,0,0,1567,1568,0,789,0,0,0,0,534,834,534,534,534,534,534,534,863,865,534,534,534,534,534,1790,1792,534,534,534,534,534,1341,0,556,556,0,580,580,580,983,987,580,580,580,580,580,580,1013,580,556,556,556,556,936,938,556,556,556,556,556,556,556,556,556,556,2829,556,556,2832,556,556,78114,1066,0,0,0,0,0,0,0,0,0,0,0,1083,0,0,0,0,0,1234,0,0,0,0,0,0,0,0,0,0,0,2050,0,0,0,0,1085,0,0,0,0,0,0,0,0,0,0,0,0,1098,0,0,0,0,0,1235,0,0,0,0,0,0,0,0,0,0,0,122880,0,0,0,0,0,0,1116,0,0,0,0,0,0,0,0,0,0,0,0,0,1581,1582,0,0,0,0,1085,1208,0,0,0,0,0,0,1215,0,0,0,0,0,0,347,348,349,0,0,0,0,0,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,0,0,0,1220,0,0,0,0,0,0,0,0,0,0,1220,1229,534,534,534,1259,534,534,534,1263,534,534,1274,534,534,1278,534,534,534,534,534,534,3001,534,534,534,534,534,534,534,534,534,1327,534,534,534,534,534,534,534,1299,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2497,534,534,534,534,1341,901,556,556,556,556,556,556,556,1351,556,556,556,556,556,1423,556,556,556,1430,556,556,26009,1341,975,580,1355,556,556,1366,556,556,1370,556,556,556,556,556,556,556,556,556,2828,556,556,556,556,556,556,1462,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3315,580,1479,580,580,580,1483,580,580,580,580,580,580,580,580,580,580,580,2877,580,580,580,580,0,1571,1572,0,0,0,0,0,0,0,0,0,0,0,0,0,1612,0,0,0,0,0,0,1603,0,0,0,0,0,0,0,0,0,0,0,364,364,364,0,696,0,1616,0,1618,0,0,0,1622,0,0,0,1626,0,0,0,1630,0,0,0,0,1572,0,0,0,0,0,0,0,0,0,0,0,364,364,364,695,0,534,534,534,1724,534,534,534,534,534,534,534,534,534,534,534,534,1782,1783,534,534,556,1837,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1818,556,556,556,556,1889,556,556,556,556,26009,0,580,580,580,580,580,580,1976,580,580,580,580,580,1981,580,580,580,0,0,0,2031,0,2032,0,0,0,0,0,0,0,0,0,0,0,2200246,151552,2200246,0,0,2175,534,534,534,534,534,534,534,534,534,534,534,2186,534,534,534,534,534,534,1758,534,534,534,534,1764,534,534,534,534,0,0,556,556,556,556,2814,556,556,556,556,556,0,0,0,0,580,2301,580,580,580,580,580,1038,580,580,580,580,0,0,0,534,580,556,580,580,2394,2395,0,1544,0,1550,0,1556,0,1562,0,0,0,0,0,0,374,0,0,0,0,0,0,0,359,0,0,0,0,0,0,0,0,0,0,0,0,0,2052,0,0,2476,0,0,0,0,0,0,0,0,0,2482,0,0,0,0,0,0,0,69632,73728,0,0,0,345,344,65536,343,534,534,534,534,2530,534,534,534,534,534,534,534,534,534,534,534,1275,534,534,534,534,580,2661,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3075,580,580,0,0,2722,0,0,0,0,0,0,0,0,0,0,0,0,0,1665,0,0,534,2797,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2511,534,556,556,2845,556,556,556,556,556,556,556,556,556,556,556,556,556,2259,556,556,0,0,2970,0,0,0,0,0,0,0,0,534,534,534,534,534,534,855,534,534,534,534,0,0,0,0,3122,3123,0,0,0,0,0,0,0,0,0,0,0,2424832,2433024,0,0,2457600,3149,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1737,3172,534,534,534,534,534,534,534,534,556,556,556,556,556,556,556,2242,556,556,556,556,556,556,556,556,1406,556,556,556,556,556,556,556,580,580,580,3229,580,580,580,580,580,580,580,580,580,534,580,556,556,556,556,580,580,580,580,3426,580,580,580,580,580,580,580,2639,580,580,580,580,580,580,580,580,580,2344,580,580,580,580,580,580,534,3236,556,3238,580,3240,3241,0,0,0,0,3245,0,0,0,0,0,0,640,0,0,0,0,0,0,0,0,0,323,397,0,0,0,323,0,0,0,3258,0,0,0,0,0,0,0,0,3261,0,534,534,534,534,534,534,534,3154,3155,534,534,534,534,3159,3160,3263,534,534,534,3266,534,534,534,534,534,534,534,534,534,534,534,1330,534,534,534,534,580,580,3318,534,3319,556,3320,580,0,0,0,0,0,0,0,0,543,566,543,566,543,543,566,543,556,556,3543,556,3544,556,556,556,556,556,556,556,556,580,580,3551,580,3552,580,580,580,580,580,580,580,580,0,0,0,0,534,534,3536,534,3537,534,534,534,534,534,534,534,1730,534,534,534,534,534,534,534,534,534,2183,534,534,534,534,534,534,409,355,0,0,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,638,0,0,641,642,0,0,0,0,0,0,0,0,1591,0,0,1594,0,0,0,0,466,477,466,0,0,466,0,0,0,0,0,0,0,0,517,517,521,521,521,521,466,466,466,466,466,466,466,471,466,521,517,521,521,517,521,521,521,521,533,551,574,551,574,551,551,574,551,598,574,574,574,574,574,574,574,598,598,598,551,598,598,598,598,598,598,598,574,574,612,617,598,617,623,1,12290,0,0,731,0,0,0,637,731,0,737,738,637,0,0,0,0,0,0,656,0,0,659,660,0,0,0,0,0,0,0,2754,0,0,0,0,0,0,0,0,0,2420,0,0,0,0,0,0,777,0,0,0,0,0,0,0,0,0,0,786,0,791,0,0,0,0,0,1575,0,0,0,0,0,0,0,0,0,0,303,303,0,0,0,0,0,0,0,0,791,0,0,0,0,0,0,791,0,0,0,0,0,0,672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016,0,0,0,0,806,0,0,0,0,0,637,0,0,0,0,0,0,0,69632,73728,0,0,0,349,347,65536,0,0,0,0,777,0,0,0,0,0,0,0,777,777,0,637,0,0,0,786,0,791,0,777,0,806,0,0,0,658,0,777,791,829,0,534,835,534,534,534,534,854,858,864,534,869,556,556,927,931,937,556,942,556,556,556,556,556,959,556,556,556,556,556,1424,556,556,556,556,556,556,26009,1341,975,580,534,534,886,534,534,556,556,959,556,556,0,580,580,1033,580,580,580,580,1033,580,580,580,580,580,0,0,0,534,580,556,0,1086,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2449,0,0,0,0,1103,0,0,0,0,0,0,0,0,0,0,0,1113,0,0,0,1117,1118,0,0,0,0,0,0,0,0,0,0,0,364,364,208896,0,0,0,0,0,0,1179,0,1182,0,0,0,0,0,1187,0,0,0,0,0,0,2726,0,0,0,0,0,0,0,0,0,0,784,0,0,0,0,0,0,0,0,1205,0,0,1086,0,0,0,1211,0,1213,0,0,0,0,0,0,0,1638,0,0,0,0,0,0,0,0,0,1123,0,0,0,0,0,0,0,0,0,1221,0,0,0,0,0,0,0,0,0,0,1227,0,0,0,0,654,0,0,0,0,0,0,0,0,0,0,0,0,2964,2965,0,0,1230,1187,0,1211,1233,0,1236,0,0,0,0,0,1117,0,0,0,0,0,0,2739,0,0,0,0,2744,0,0,0,0,0,0,299,0,0,0,303,2424832,2433024,0,0,2457600,0,1245,0,0,0,0,0,1245,0,0,1136,1245,0,1252,534,534,534,534,534,534,3279,534,556,556,556,556,556,556,556,556,556,556,3514,556,556,556,580,534,534,1258,534,534,534,534,1264,534,534,534,534,534,534,534,534,534,3455,534,534,3457,556,556,556,534,534,1285,534,534,534,534,534,534,534,534,534,534,1296,534,534,534,534,534,534,3341,534,534,534,534,534,534,534,534,556,580,3607,3608,3609,534,556,580,534,556,580,0,0,0,0,0,0,333,0,0,333,0,0,333,0,0,0,534,534,1301,534,534,534,534,534,534,534,534,1308,534,534,534,1315,1317,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2149,534,1339,534,1341,901,1343,556,556,556,556,556,1350,556,556,556,556,556,556,2225,556,556,556,556,556,556,556,556,556,2244,556,556,556,556,2248,556,1356,556,556,556,556,556,556,556,556,556,556,1377,556,556,556,556,556,556,2241,556,2243,556,556,556,556,556,556,556,1425,556,556,556,556,556,26009,1341,975,580,556,556,556,556,1400,556,556,556,1407,1409,556,556,556,556,556,556,1386,556,556,556,556,556,556,556,1395,556,1480,580,580,580,580,1485,580,580,580,580,580,580,580,580,1492,580,580,580,580,2352,580,580,580,580,580,580,580,580,580,580,580,2628,580,580,580,580,580,580,1499,1501,580,580,580,580,580,580,580,580,580,580,580,580,2878,580,580,2881,1550,0,0,0,1556,0,0,0,1562,0,0,0,0,0,0,0,0,2957312,0,0,0,0,0,0,0,0,1150,0,0,0,0,0,0,0,0,1166,0,0,0,0,0,0,0,0,1179,0,0,0,0,0,0,0,0,0,0,0,0,2094,0,0,0,1573,1574,0,0,0,0,0,1580,0,0,0,0,0,0,0,69632,73728,0,0,0,373,0,65536,0,0,0,1601,0,0,0,0,0,0,0,0,0,0,0,0,0,1677,0,0,0,0,0,0,1619,0,0,0,0,0,0,0,1627,1628,0,0,0,0,0,1604,0,0,0,0,0,0,0,0,0,0,0,254407,0,0,0,0,0,0,0,0,1635,0,0,0,0,0,0,0,0,0,0,0,382,0,0,0,386,0,0,0,1685,0,0,0,0,0,1689,0,0,1692,0,0,0,0,0,0,3143,0,0,0,0,0,0,0,0,0,0,2756,0,0,2759,0,0,0,0,0,0,1689,0,0,0,0,0,0,0,0,0,0,1705,0,1707,1681,534,534,534,534,534,534,534,534,534,534,534,1719,534,534,534,534,534,1791,534,534,534,534,534,534,1341,0,556,556,556,556,556,2295,0,0,0,580,580,580,580,580,580,580,2666,580,580,580,580,580,580,580,580,580,1446,580,580,580,580,580,580,534,534,534,1725,534,534,534,534,534,534,534,534,534,534,1736,534,534,534,534,534,2179,534,534,534,534,534,534,534,534,534,534,2143,534,2145,534,534,534,534,534,534,1740,534,534,534,534,534,534,534,534,534,534,1751,534,534,534,534,534,2207,0,0,0,556,556,556,556,556,556,556,1403,556,556,556,556,556,556,556,556,1408,556,556,556,556,556,556,556,534,534,1756,534,534,534,534,534,534,534,534,534,534,534,534,534,2172,534,534,2002,580,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,696,0,0,2019,2020,0,0,0,0,0,0,0,0,0,0,0,0,662,0,0,0,2055,2056,0,0,2058,2059,0,0,0,0,0,0,0,0,0,0,0,2617344,0,0,0,0,2081,0,0,0,0,2084,2085,0,0,0,0,0,2091,0,0,0,0,0,0,3259,0,0,0,0,0,0,534,534,534,534,534,849,534,534,534,534,534,534,534,2152,534,534,534,534,534,534,534,534,534,534,2161,534,534,534,534,534,534,3452,534,3454,534,534,3456,534,556,556,556,556,3509,556,556,556,556,556,556,556,556,556,580,580,580,580,580,580,0,0,0,3595,534,534,2164,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2174,534,534,534,2191,534,534,534,2194,534,534,534,534,2199,534,534,534,534,534,534,1759,534,534,534,534,534,534,534,534,534,1732,534,534,534,534,534,534,556,2237,556,556,556,556,556,556,556,556,556,556,2246,556,556,2249,556,556,2277,556,556,556,556,2281,556,556,556,556,2286,556,556,556,556,556,1808,556,556,556,556,556,556,556,556,556,556,2608,556,556,556,556,556,580,2324,580,580,580,580,580,580,580,580,580,580,2333,580,580,2336,580,580,2364,580,580,580,580,2368,580,580,580,580,2373,580,580,580,580,580,2665,580,580,580,580,580,580,580,580,580,580,1979,580,580,580,580,580,2398,0,0,0,0,0,0,0,0,0,0,2408,0,0,0,0,0,0,687,0,0,0,770,0,0,0,0,789,0,0,0,0,0,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,176128,534,534,2488,534,534,534,534,534,534,534,534,534,534,2496,534,534,534,534,534,882,534,534,534,534,534,556,556,556,556,556,3411,556,556,556,3415,556,556,534,534,2514,534,534,2516,534,2517,534,534,534,534,534,534,534,2524,534,534,2528,534,534,534,534,534,534,534,534,534,534,534,534,2539,556,556,2560,556,556,556,556,556,556,556,556,556,556,556,556,556,3472,580,580,556,556,556,2575,556,556,556,2578,556,556,2580,556,2581,556,556,556,556,556,1827,556,556,556,556,556,556,556,556,556,556,1814,556,556,556,556,1820,580,2646,580,2647,580,580,580,580,580,580,580,580,2655,580,580,2659,0,2696,2697,0,0,2700,2701,0,0,0,0,0,0,0,0,0,0,3178496,2670592,0,2744320,0,0,2772,534,2775,534,534,534,534,2780,534,534,534,2783,534,534,534,534,534,534,534,3002,3003,534,534,534,534,534,534,534,534,2494,534,534,534,534,534,534,534,534,1744,534,534,534,1748,534,534,1753,2808,534,534,534,0,0,556,556,556,556,556,556,556,556,556,556,3358,556,556,556,556,556,2819,556,2822,556,556,556,556,2827,556,556,556,2830,556,556,556,556,556,556,2255,556,556,556,556,556,556,556,556,556,2228,556,2230,556,556,556,556,556,556,2857,556,556,556,0,0,580,580,580,580,580,580,580,580,2652,580,580,580,580,580,580,580,580,580,2868,580,2871,580,580,580,580,2876,580,580,580,2879,580,580,580,580,1034,580,580,580,580,580,0,0,0,534,580,556,580,580,580,580,2906,580,580,580,534,580,556,534,534,556,556,580,580,0,0,3112,0,3114,0,0,0,3118,0,0,534,534,534,534,3013,534,534,534,534,534,556,556,556,3021,556,556,556,556,556,2266,2267,556,556,556,556,556,556,2274,556,556,0,580,580,580,580,580,580,994,580,580,1008,580,580,580,580,580,2341,580,580,580,580,580,580,580,580,580,580,0,0,733,534,580,556,0,0,3121,0,0,0,0,0,0,0,0,0,0,0,0,0,1693,0,0,534,3173,534,534,534,534,534,534,534,556,556,556,556,556,556,556,2839,556,556,556,556,556,556,556,556,1811,556,556,556,556,556,556,556,556,556,3183,556,556,556,556,556,556,556,556,556,556,556,556,556,3033,556,556,556,556,3193,556,556,556,556,556,556,3199,556,3201,556,556,556,556,556,0,0,0,0,580,580,580,2303,580,2305,580,580,580,3228,580,3230,580,580,580,580,580,580,580,580,534,580,556,556,556,556,580,3423,580,3425,580,580,580,580,580,580,580,580,580,2888,580,580,580,580,580,580,0,0,0,3248,0,0,0,0,0,0,0,3132,0,0,0,0,0,0,0,0,0,3334,534,534,0,3257,0,0,0,0,0,0,0,0,0,0,0,534,534,534,534,2982,534,534,3264,534,534,534,3268,534,534,534,534,534,534,534,534,534,1328,534,534,534,534,534,534,534,534,534,534,3277,534,534,534,556,556,556,556,556,3282,556,556,556,556,556,2294,0,0,0,580,580,580,580,580,580,580,580,3482,580,580,3484,580,0,0,0,556,3286,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1883,556,3295,556,556,556,556,580,580,580,580,580,3301,580,580,580,3305,580,580,580,580,2380,534,580,556,534,534,534,534,556,556,556,556,580,580,580,580,0,534,3601,556,3602,580,3603,3489,0,0,0,534,534,534,3496,534,534,534,534,534,534,534,534,1265,534,534,534,534,534,534,534,3504,556,556,556,3508,556,556,556,556,556,556,556,556,3516,556,580,580,580,580,2624,580,580,580,580,580,580,580,580,580,580,580,1475,580,580,580,580,580,580,3521,580,580,580,580,580,580,580,580,3529,580,0,0,0,0,0,0,122880,122880,122880,122880,122880,0,122880,0,2105631,12290,0,3532,0,3534,534,534,534,534,534,534,534,534,534,3540,3541,534,534,534,534,534,2208,0,0,0,556,556,556,556,556,556,556,1387,556,556,556,1391,556,556,556,556,556,357,358,0,0,0,0,0,0,0,364,0,292,0,0,0,0,0,0,688,0,0,0,0,364,364,364,0,0,0,0,0,391,0,0,0,0,0,0,0,0,0,0,0,0,722,0,735,654,467,467,481,0,0,481,358,358,358,503,358,358,358,358,467,467,599,575,575,575,575,575,575,575,599,599,599,552,599,599,599,599,599,599,599,575,575,552,575,599,575,599,1,12290,556,556,928,556,556,556,556,556,556,556,556,556,556,964,556,556,556,556,556,2294,2615,0,0,0,0,580,580,580,580,580,534,556,580,0,0,0,0,0,0,0,0,2924,0,0,0,0,0,0,534,534,534,891,534,556,556,556,964,556,0,580,580,580,1038,580,580,580,580,2636,580,2638,580,580,580,580,2642,580,580,580,580,0,0,0,3440,0,0,0,3443,0,0,534,534,78114,1066,0,0,0,0,0,0,0,0,0,0,0,0,1084,0,0,0,0,670,0,0,0,0,0,0,0,0,0,0,0,0,2432,0,0,0,1184,0,0,0,0,0,0,0,0,0,0,0,0,534,534,534,2132,2133,534,534,1340,1341,901,556,556,556,556,556,556,556,556,556,1353,556,556,556,556,580,3590,580,580,580,580,0,0,0,534,534,534,534,534,534,1713,534,534,534,534,534,534,534,2140,534,534,534,534,534,534,534,534,534,2990,534,534,534,534,534,534,556,556,1362,556,556,556,556,556,556,556,556,556,556,556,556,556,3047,556,556,556,0,1551,0,0,0,1557,0,0,0,1563,0,0,0,0,0,0,0,1650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172032,0,1656,0,0,0,0,0,0,0,0,1662,0,1664,0,0,0,0,0,0,172032,172032,172032,172032,172032,172032,172032,172032,1,12290,534,534,1771,534,534,534,534,534,534,534,534,534,534,534,534,534,2523,534,534,556,556,1854,556,556,556,556,556,556,556,556,556,556,556,1866,556,556,556,556,932,556,556,556,556,556,556,556,556,556,556,556,1815,556,556,556,556,556,1887,556,556,556,556,556,556,26009,0,580,580,580,580,580,580,2312,580,580,580,580,580,580,580,580,580,1488,580,580,580,580,580,580,580,580,580,1924,580,580,580,580,580,580,580,580,580,580,580,580,3073,580,580,580,580,580,1937,580,580,580,580,580,580,580,580,580,580,580,1950,580,580,580,580,2648,580,580,580,580,580,580,580,580,2656,580,580,580,580,580,3231,580,580,580,580,580,580,580,534,580,556,580,580,580,1973,580,580,580,580,580,580,580,580,580,1983,580,580,580,580,1484,580,580,580,580,580,580,580,580,580,580,580,3222,580,580,580,580,0,0,0,2043,0,0,0,0,0,0,0,0,0,0,0,0,733,1171,0,0,534,2151,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2795,534,2236,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2600,2323,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3089,580,580,580,580,2622,580,580,580,580,580,580,580,580,580,580,580,580,580,3224,580,580,2695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2120,2734,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2719,534,2774,534,2776,534,534,534,534,534,534,534,534,534,534,534,534,2160,534,534,534,556,2821,556,2823,556,556,556,556,556,556,556,556,556,556,556,556,3190,556,556,556,580,580,580,2870,580,2872,580,580,580,580,580,580,580,580,580,580,2654,580,580,580,580,580,0,0,0,0,2933,0,0,0,0,0,0,0,0,0,0,0,534,534,534,2981,534,556,556,556,556,3289,556,556,556,556,556,556,556,556,556,556,556,3202,556,556,556,556,580,3308,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3314,580,580,556,556,3589,556,580,580,580,580,3593,580,0,0,0,534,534,534,3152,534,534,534,534,534,534,534,3157,534,534,534,0,0,359,0,0,0,0,0,0,364,0,292,0,0,0,0,0,0,702,0,0,0,0,0,0,0,0,0,0,2600960,0,0,2768896,2777088,2781184,0,0,369,0,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,2040,2041,0,600,576,576,576,576,576,576,576,600,600,600,553,600,600,600,600,600,600,600,576,576,553,576,600,576,600,1,12290,556,923,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2234,556,556,556,556,556,1367,556,556,556,556,556,556,556,556,556,556,556,3547,3548,556,556,580,580,580,580,580,1500,580,580,580,580,580,580,580,580,580,580,580,580,580,3102,3103,3104,534,1646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2748,0,0,1684,0,0,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,580,580,580,1938,580,580,580,580,580,580,580,580,580,580,580,580,3223,580,580,580,0,0,0,2723,0,0,0,0,0,0,0,0,0,0,0,0,734,0,0,0,2942,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2760,0,0,0,0,3249,0,3250,0,0,0,0,3132,0,0,0,0,0,0,0,3333,0,534,534,534,0,0,0,360,361,362,363,0,0,364,0,292,0,0,0,0,0,0,718,0,0,0,0,0,0,0,0,0,0,2445,0,0,0,0,0,0,361,0,360,0,0,0,69632,73728,0,0,0,0,427,65536,0,0,0,0,685,534,534,838,842,845,534,853,534,534,534,868,427,427,0,427,0,361,427,450,0,0,0,0,0,0,0,0,690,691,0,364,364,364,0,0,0,0,0,491,491,0,498,498,498,498,504,505,498,498,518,518,518,518,450,450,450,450,450,450,450,450,450,518,518,518,518,518,518,518,518,554,577,554,577,554,554,577,554,601,577,577,577,577,577,577,577,601,601,601,554,601,601,601,601,601,601,601,577,577,613,618,601,618,624,1,12290,534,534,887,534,534,556,556,960,556,556,0,580,580,1034,580,580,580,580,1502,580,580,580,580,580,580,580,580,580,580,580,2332,580,580,580,580,534,2513,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2806,534,534,534,534,2542,534,534,534,534,534,534,534,534,534,534,0,0,0,0,556,556,556,2216,556,2218,556,580,2674,580,580,580,580,580,580,580,580,580,580,534,580,556,534,534,534,534,534,2491,534,534,534,534,2495,534,534,534,534,534,0,0,0,0,556,556,2215,556,556,556,556,602,578,578,578,578,578,578,578,602,602,602,555,602,602,602,602,602,602,602,578,578,555,578,602,578,602,1,12290,0,0,698,0,0,0,0,0,0,0,0,0,0,0,0,0,2410,0,0,728,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2952,0,0,0,728,0,784,0,0,0,0,0,0,0,0,784,0,0,0,0,686,0,0,0,0,0,0,364,364,364,0,0,0,0,0,671,0,0,0,0,0,0,0,0,0,0,0,3145,3146,0,0,0,556,924,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2260,2261,0,0,1176,0,0,0,0,0,0,0,0,0,0,0,0,0,2433,0,0,534,1300,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2548,0,0,1418,556,556,556,556,556,556,556,556,556,556,556,26009,1341,975,580,580,580,580,2664,580,580,580,580,2668,580,580,580,580,580,580,1505,580,580,1509,580,580,580,580,580,1515,0,0,1553,0,0,0,1559,0,0,0,0,0,0,0,0,0,299,0,0,0,0,0,0,0,0,0,2082,0,0,0,0,0,0,0,0,0,0,0,0,736,0,0,0,0,0,0,0,534,534,534,534,2167,534,534,534,534,534,534,534,534,534,534,534,1733,534,534,534,534,556,556,556,2252,556,556,556,556,556,556,556,556,556,556,556,556,3471,580,580,580,580,580,580,2339,580,580,580,580,580,580,580,580,580,580,580,580,3485,0,0,3488,2499,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2202,0,0,0,0,736,534,534,534,534,534,534,534,534,534,534,534,1747,534,534,534,534,1051,534,534,892,534,1056,556,556,965,556,0,1061,580,580,1039,580,580,580,580,2885,580,580,580,580,580,580,580,580,580,580,580,2680,534,580,556,534,556,556,1420,556,556,556,556,556,556,556,556,556,26009,1341,975,580,580,580,580,2894,580,580,580,580,580,580,580,580,580,580,580,2900,580,580,580,580,534,534,534,534,1726,534,534,534,534,534,534,534,534,534,534,534,2144,534,534,2148,534,1821,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2843,580,580,1954,580,580,580,580,580,580,580,580,580,580,580,580,580,3313,580,580,580,580,556,2586,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2288,556,556,556,556,556,2614,0,0,0,0,0,0,580,580,580,580,580,1039,580,580,580,580,0,0,0,534,580,556,0,0,0,0,2957,0,0,0,0,0,0,0,0,0,0,0,534,2979,534,534,534,2983,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2498,3065,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2889,580,580,580,580,580,3192,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3035,1134592,0,1134592,0,0,0,1134592,1135007,1135007,0,0,0,0,0,1135007,0,0,0,0,700,701,0,0,0,0,0,707,0,0,0,711,0,1134592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2718,0,0,1134592,1134592,0,0,0,0,1135196,1135196,1135196,1135196,1134592,1135196,1135196,1135196,1135196,1135196,1135196,0,1134592,1134592,1134592,1134592,1135196,1134592,1135196,1,12290,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,0,2125824,2125824,2125824,2125824,3137536,2940928,2940928,2940928,0,0,0,0,0,2748416,2879488,0,0,0,0,0,2113,0,0,0,2113,0,0,2118,2119,0,0,0,0,0,1180,0,0,0,1184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2474,0,1147348,1147348,1147348,451,451,1147348,451,451,451,451,451,451,451,451,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,0,0,0,0,0,0,0,0,768,0,0,0,0,0,0,0,451,0,0,0,0,0,1147348,1147348,1147348,1147399,1147399,1147348,1147399,1147399,1,12290,3,0,0,0,0,0,253952,0,0,0,253952,0,0,0,0,0,0,0,0,0,0,0,0,0,2950,0,0,0,0,1159168,0,1159168,1159168,0,1159168,1159168,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,0,0,0,0,0,0,0,0,781,0,0,0,0,0,792,0,0,1159168,0,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1,12290,3,0,0,0,0,249856,0,0,0,249856,0,0,0,0,0,0,0,69632,73728,163840,0,0,0,0,65536,0,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,974,2125824,2125824,2125824,2125824,3149824,2125824,2428928,2437120,2125824,2486272,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2625536,2125824,2125824,2125824,2125824,2125824,2125824,2699264,2125824,2715648,2125824,2723840,2125824,0,106496,106496,0,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,0,0,106496,0,0,106496,106496,106496,106496,106496,106496,106496,106496,106496,0,0,0,0,0,0,0,0,0,0,0,2183168,0,0,0,0,0,0,0,0,2134016,0,0,0,0,0,0,0,0,0,0,0,695,0,0,0,0,0,3108864,3198976,0,0,3043328,0,3149824,2936832,0,2760704,0,0,0,0,0,0,0,69632,73728,0,369,369,0,0,65536,369],r.EXPECTED=[127,143,342,950,172,201,188,217,769,963,247,263,279,295,311,327,1395,373,1083,374,374,374,374,374,374,374,374,374,419,391,407,466,435,589,1682,909,574,156,1220,451,495,511,527,543,559,634,1096,678,694,755,649,785,801,817,833,849,865,881,897,937,979,995,1023,1039,1055,479,1112,1128,1473,1144,1160,1206,1236,357,662,1266,709,1282,1292,1308,1324,1339,1355,1411,1427,1443,618,1459,724,1489,604,1518,1528,231,1070,1544,1560,1576,1592,1622,1250,1638,1654,1606,921,1670,739,1698,1714,1820,1190,1730,1746,1502,1758,1774,1790,1806,1175,1850,1860,1836,1009,1370,1876,1385,375,1892,1896,1903,1903,1903,1898,1902,1903,1910,1907,1914,1918,1922,1926,1929,1933,1937,1941,1945,4040,4040,4040,4106,4040,4040,2020,2279,4040,1949,4040,4040,4040,2429,2379,4040,4040,4040,4040,2438,4040,4040,3112,2651,3443,2444,1955,1984,1994,1998,4040,4040,4040,4040,4040,2017,2042,4040,4040,4040,2024,2285,2030,2034,4040,4040,4040,4040,4040,2041,4040,4040,3002,2285,2285,2285,2285,2285,2111,1988,1988,1988,1988,1988,1990,1955,1955,1955,1955,1955,2101,3099,1988,1988,1988,1988,1988,2120,1955,1955,1955,1955,1955,2046,2055,4040,4040,2212,2349,4040,4040,4040,4137,3441,4040,4040,4040,4040,3531,4040,2745,1988,1988,1988,2066,1955,1955,1955,1957,2073,4040,4040,2473,3002,2285,2285,2026,1988,1988,3101,1955,1955,1956,2072,4040,2471,4040,2284,2285,3098,1988,1988,2078,1955,2068,2129,2446,3554,2285,2112,1988,2120,1955,2083,2281,2286,1988,2067,2089,2095,2113,2049,2107,3097,2114,2079,3096,3100,2079,3096,2114,2051,2118,2126,2135,2139,2143,2156,2160,2170,2170,2170,2163,2167,2170,2173,2177,2181,2185,2189,2193,2197,2201,2205,2209,2216,4040,4040,4040,2131,4040,4040,4040,2220,4040,2226,4040,2283,2287,1988,1954,2122,2098,1961,4040,4040,4040,1970,4040,2474,1980,4040,2321,3139,4040,2440,3145,4427,2277,3219,2796,3151,3505,3155,4040,3263,3161,2906,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4041,2255,2259,2262,2266,2270,2274,3465,2291,4040,4040,4040,4040,3213,2296,2312,2303,2396,2240,2243,2309,2316,2320,2649,4006,4040,2726,2326,3670,4040,4040,4040,4040,2231,3466,4040,4040,4040,3429,2237,4040,2618,3123,2249,2253,3877,2348,4040,4040,4013,2355,4040,2359,4040,4040,4040,4040,3173,2321,2227,2367,3192,4040,4040,2459,4040,4040,3192,4040,4040,4348,2989,2882,2918,3129,2349,4040,3014,2311,2670,2331,3577,4417,2336,2379,4040,4040,2549,2340,4040,4040,4040,2984,4040,4040,4040,4040,3591,2979,4040,4040,4040,3390,4180,4419,3131,4040,3190,3194,4040,2950,2989,2918,3210,4040,2469,2788,3212,4040,4005,3283,3279,4282,4040,3281,4226,4226,2601,4283,3283,3283,1966,3282,3279,1966,4227,3283,4191,2462,2478,4040,4040,4040,4040,2588,2522,4040,4040,4040,2007,2858,2484,3025,2492,2495,2498,2502,2503,2507,2511,2515,4040,2521,4040,4040,2526,4040,3968,2913,2541,2545,3867,2553,2563,2574,2578,4040,3387,3385,4040,2582,4040,3458,2587,4040,3120,4040,4040,4040,3174,2074,2409,2537,2432,4040,4040,4040,2536,2416,4040,2373,2377,4040,4040,4040,4040,4255,2378,4040,4040,4040,4040,4256,2379,4040,2838,3503,4040,4040,4040,4040,2839,3504,3974,3509,4040,4040,3730,3536,4040,3349,2906,4040,3326,2556,3181,3383,3394,3403,4040,4397,4040,3553,3551,3545,4040,2668,2912,3478,3399,2548,2592,3456,3471,2600,4040,4040,4040,4242,4040,3147,4040,3818,4040,4037,3923,3990,3561,4003,4040,2655,4039,4040,4040,4040,3167,4040,4040,4040,3331,3171,4040,4040,4040,4040,3632,3179,4040,2638,2611,2615,4040,2388,2622,4040,4040,4040,4040,2389,2349,4040,4040,4040,2397,2390,4040,4040,4040,3141,4040,4040,3846,4040,4040,2630,2517,4070,2637,2412,2989,4040,4040,4040,4040,2344,4040,4040,4040,4040,4040,3269,2989,2380,3207,4040,3463,4040,4040,4040,3861,3470,4040,4040,4040,3475,4040,3482,4040,4040,2631,3905,4040,4040,4040,4040,2631,3905,2424,3909,4040,2152,2595,3785,3915,2631,4365,2642,4040,4040,4040,4040,4085,2646,4040,4040,4040,4040,4085,2646,4040,4040,2464,4040,4040,2285,2285,2285,2285,2025,1988,1988,1988,1988,1988,2120,3610,3833,4040,4040,4040,4365,2656,4040,4040,4040,2660,2665,3980,2516,3196,2674,2678,3830,2685,4040,4040,3830,2685,4040,4040,2299,2690,4040,3184,3458,2004,3969,3197,3312,3251,2696,4040,2037,2690,4040,3251,2696,4040,2702,2709,3195,4e3,2713,2717,4040,2715,4040,2679,2723,4040,2730,2734,2739,3644,4040,2705,2583,3646,2583,2749,2753,2704,3203,2944,2566,2570,2956,2945,3843,2568,2568,2761,3815,3641,2765,3607,2769,2773,2775,2779,2783,2787,4040,4040,4040,3316,4040,4040,3564,2792,3570,2800,2804,2808,2810,2814,2818,2821,2823,2824,4040,4040,3315,4040,3428,2828,3896,3248,2833,2843,2434,2453,3918,2849,2907,2853,4040,2150,2148,4040,4040,4040,4040,2405,2349,4040,4040,4040,4040,2405,2349,4040,4040,4040,4040,2362,3442,4040,4040,4040,4040,2363,3773,3950,4040,4040,4040,2857,4040,2559,2968,3853,2862,2937,4379,2869,3988,3295,4040,2873,4040,4040,4040,3554,2285,2285,2285,2285,1987,1988,1988,1988,1989,1955,1955,1955,1955,1956,2103,4040,4040,4040,2472,4040,2109,2285,2285,2285,2113,3527,2877,4040,4040,4040,2886,2890,4040,4040,4040,4040,2980,4040,3336,2829,3897,2895,2899,4040,2911,2917,4040,4040,2922,4040,4040,4040,4040,2844,2923,4040,4040,2626,4289,4040,3453,3038,4353,4386,3183,4040,4040,4041,4370,4040,4040,2845,2924,4040,4040,4040,4040,4040,2990,4040,2558,2928,4420,2935,4040,2943,2949,4040,2970,2954,4040,4040,4040,4040,3855,2960,4040,4040,4040,4040,3855,2960,4040,4040,4040,4040,3389,4040,2966,3897,2974,2327,4275,4040,3590,2978,4040,3535,3379,3488,3521,3230,4040,4040,3540,4040,4040,4040,3439,4040,4040,4040,4364,4040,4040,4040,4040,4040,4040,4040,4040,4378,4040,4040,4040,2605,4040,4040,2245,4040,4040,3459,4040,4040,4038,3923,4040,2013,3616,2411,4040,3631,2988,4040,4040,3631,2988,4040,4040,4040,2994,4040,4040,2350,4262,2381,3617,4040,4040,4346,4040,4040,3e3,4040,4040,4346,4040,2350,4208,3615,2881,4040,2795,3174,3112,3180,3024,3111,3180,3180,3933,3014,3113,3113,3006,3181,3014,3013,3014,3175,4047,3018,3029,3053,4040,4040,4040,4040,3634,4040,4221,4040,3650,4040,4040,4040,4040,2631,3651,4040,4040,4040,4040,3648,4287,4291,4040,4010,4017,4303,4022,2632,3182,4040,4032,4040,1950,4012,4040,2865,4045,4051,3043,3047,4064,3061,3065,3069,3073,3077,3081,3105,3084,4040,4040,3633,4040,4040,3443,2444,4040,4040,4040,2450,4040,4040,4040,4349,4040,4040,3014,3276,2487,2961,2691,4276,3109,1976,3117,3127,3289,3135,3305,4040,3324,3322,4040,4040,3734,3779,3739,3744,3969,4040,3748,3754,3761,3943,3887,3765,4057,4040,2488,2962,2692,3163,3224,3188,3412,4040,4040,2085,3201,4040,4040,4040,4040,2343,3217,3223,3228,4040,4040,4040,3234,4040,4040,4040,4040,4040,3238,4040,4040,4040,4040,3422,4040,2529,2686,4354,3245,4040,4040,4040,4342,4040,4040,4040,4040,1972,4040,4040,4040,4040,4040,3255,4040,4040,4040,3423,3952,2686,4355,3261,4040,4040,3267,4040,4040,4040,1974,4040,4040,4040,3273,4040,4220,3981,2680,4356,3895,4040,3287,4040,4040,3293,4040,4040,2062,4040,4220,3953,3299,2146,4040,3303,4040,2607,4040,4040,2061,4040,4248,3309,3894,3498,4040,4360,4040,4040,4040,4369,4040,4374,3056,4383,3622,4040,4040,4390,4040,4040,4424,2742,4040,2633,4040,3056,4040,3039,3157,4040,4040,4040,4040,4040,4040,4040,2455,4325,4040,4040,4040,4040,4040,4040,4040,3320,4040,3330,3911,3335,3629,3588,4213,3943,3587,4213,4213,4040,3341,3589,3589,3628,4214,3341,3340,3341,3630,4040,4040,4040,4040,4040,4040,4040,4040,3836,2349,3347,4040,3354,3001,4080,4404,3358,3362,3366,3369,3373,3373,3377,4040,4040,3835,4091,3410,4040,4040,3416,4040,4040,3420,3427,4040,3433,4040,4331,3447,4040,4040,3797,4040,3795,4040,4040,4345,4040,2350,1964,4040,2879,4040,3397,4040,2904,4040,3350,3488,4040,3486,2535,3492,3496,4040,4040,4040,3502,4040,4040,4040,4127,4028,2010,4131,4141,4145,4149,4153,4157,4161,4165,4169,4173,4134,4377,4293,2534,3516,4040,4040,4040,2839,3504,4040,4040,4040,4040,2931,3442,4040,3450,4040,2902,4040,3799,4363,3520,4196,3525,3406,2349,2757,2305,2996,4393,4347,3544,4040,3549,4040,4040,3549,4040,4040,3558,2756,2305,4077,4395,3960,4040,3568,4040,3823,2349,4040,3997,3750,3574,3884,3961,4269,4040,4270,4040,3581,3944,3585,3595,3931,3600,2001,3930,3604,3604,4211,3614,3932,3621,3626,3662,3638,3655,3656,3660,3667,3674,3678,3682,3685,4040,4040,4040,3840,2596,3740,3850,2668,2332,3343,4040,3859,4040,4040,4040,2233,3865,2891,3735,2465,2351,3690,3698,3874,3702,3705,3709,3713,3717,3721,3725,3729,4040,2423,2421,3241,3772,4040,4040,2939,3777,3783,3789,3793,4136,2698,3342,2633,2425,3803,4040,4040,3808,2349,4040,4040,4186,3812,4040,4040,4040,3009,3822,3827,4040,3871,2532,4318,3881,4040,3891,3773,4040,4040,4040,4040,3901,4040,4040,4040,4040,4040,2385,4040,4040,4040,4040,3014,4040,2394,4040,2401,2379,4035,3922,4040,4040,2292,3927,4040,4040,4040,4040,3937,4040,4040,4040,4040,2091,3941,3948,4040,3957,3757,3966,2835,3112,4040,4040,2222,3979,4040,4040,2719,3973,2632,3183,3021,4040,4055,4040,4061,2419,4040,3023,4068,4074,4084,4112,4089,4095,3596,4100,4308,4099,4104,4110,4099,4113,4119,3257,4117,4123,4040,4040,4040,4040,4177,4184,2836,3686,4190,3693,4195,4200,4410,4205,4218,4040,3090,2735,4225,3093,4231,4040,4040,4040,3631,4235,2661,4040,2681,4429,2369,4040,4239,4040,4040,4040,4040,3804,4246,4040,4040,4040,4252,4040,4040,4040,2631,4260,4266,4040,4040,4040,4025,4185,2837,2686,2480,4274,4040,4280,4040,4040,4040,4040,4201,3978,4018,4303,3768,4040,3050,4040,4040,3985,4040,4040,3994,4040,4322,4385,4329,4040,4040,4040,4040,4335,4040,4040,4040,4040,3663,4339,4040,4040,4297,4040,3057,3087,4301,3962,3032,4040,4040,4040,4040,2624,4307,4040,4040,4040,4040,2624,4312,4315,4040,2322,3436,2837,2058,4040,4040,3035,4040,4401,4408,3694,4040,4040,3512,4040,2631,4414,4040,3511,4558,4433,6024,6027,4439,4466,4468,4468,4446,4455,4467,4468,4468,4468,4468,4468,4468,4473,4468,4468,4463,4457,4459,4479,4477,4483,4468,4469,4493,4496,4506,4510,4524,4519,4511,4500,4502,4502,4518,4519,4498,4515,4523,4528,4532,4536,4539,4547,4546,4543,4551,4554,4556,4566,5097,4574,6086,5003,5101,5101,5101,4593,4599,4602,4602,4602,4602,4608,4640,4568,4622,4628,5101,4434,5101,5099,5101,6713,5101,6256,5101,5101,4584,5992,5101,5101,4729,5101,5473,6277,5101,5007,4602,5693,4609,5696,5699,5699,5699,5699,4601,4602,5699,4602,4619,4621,4623,4627,6087,5101,4434,6165,6164,5101,5101,6380,6242,5096,5101,4576,5101,6463,5101,5101,5635,4488,5366,6275,5101,4581,5101,4590,5411,5123,5123,5123,5697,5699,4603,4621,4621,4622,4627,4627,4628,5101,4583,5448,6513,5474,5101,5008,5101,5101,4602,4632,5123,5699,4602,4602,4602,5704,5121,4602,4621,4627,5101,4583,6563,5101,4584,6017,5101,5101,5699,5701,4602,4602,4602,4632,4640,5705,5101,5101,5101,4734,5700,4602,4602,4602,5705,4643,5701,5101,5101,4824,5651,4602,4650,5101,5101,4824,6512,5010,5695,5123,5123,5698,5690,4602,4608,5696,5700,5703,5101,4602,5101,5101,5121,5123,5123,5123,5699,5699,5699,5702,5123,5698,5699,5702,4602,4602,5704,4607,4602,5705,5123,5697,5704,5101,5101,4816,4822,5699,4602,5704,5695,5698,5702,5694,5701,4651,4652,4650,5101,4592,5101,5101,5815,5567,5101,5101,5106,6519,6761,6550,6560,4662,4695,4656,4660,4693,4666,4673,4670,4680,4684,4691,4693,4693,4693,4693,4694,4676,4699,4693,4703,4708,4714,4704,4726,4740,4744,4687,4751,4753,4748,4787,4789,4789,4791,4757,4759,4761,4763,4776,4776,4770,4767,4774,4717,4675,4710,4780,4784,4795,4797,4801,4805,4809,5101,4592,6198,6202,4990,5007,5230,6461,5101,6373,5101,5101,4824,6698,4831,5101,5101,5101,4736,5108,5108,5101,5101,4826,6485,5490,5979,4838,5101,4720,4985,5101,4720,5101,5101,4853,5311,4857,5333,4876,4902,4906,4906,4906,4906,4908,4915,4917,4912,4921,4925,4928,4931,4934,4939,4938,4943,4944,4959,4949,4948,4953,4956,4963,5101,5107,5101,4892,5101,5007,5101,5101,5695,5123,5123,5123,5123,5696,5699,5988,5101,5101,5101,4825,5300,5101,5608,5101,4811,5449,6426,4969,5101,5101,4988,6219,5101,5018,4987,5101,5101,4860,5101,5101,4995,5015,5101,6412,5034,5101,5101,5101,4893,6751,6138,5101,5101,5101,4894,6729,5101,5101,5101,4965,5055,5068,5081,5086,5091,5076,5095,5101,4824,5933,5929,5376,5087,4434,5101,5101,5101,4979,5008,6409,5996,5101,5999,5151,5987,5376,5101,4826,6502,6738,6204,5101,6730,5101,5101,4891,5101,4570,5101,5115,5127,5074,4442,5096,5101,5101,5101,4975,5538,5411,5986,5281,5101,4840,5628,5355,5382,4434,4736,5101,4973,5101,5101,5101,4840,5687,5132,5075,5140,5890,5072,5076,5141,6462,4888,5101,5101,4895,5101,5343,5073,6582,4451,5101,4894,5101,5101,6416,5101,5101,5101,6191,5101,5415,5892,5074,6583,5096,5101,5101,4898,5999,5411,5280,5101,5101,4974,4978,5134,5157,5101,5101,5007,5101,5132,5075,5159,5101,4897,5101,5871,4980,5101,5949,5135,5159,5101,4976,5101,5101,5010,5101,5101,5169,4434,5101,5101,5009,5101,5101,5101,4613,4614,4975,5101,4614,5101,5411,4978,6164,6391,5101,4977,6380,5395,5376,5188,4872,5243,5197,5197,5194,5197,5199,5203,5205,5207,5209,5209,5209,5213,5213,5213,5213,5214,5213,5213,5215,5219,5221,5101,5101,5101,5036,5101,5059,5063,5372,5101,5101,5101,6378,6010,5101,4978,6569,5101,4980,5101,5417,5101,5101,5101,5891,5074,5240,5101,5351,6463,5247,5101,5101,5257,5101,5101,5101,5068,5263,6448,5875,5101,4981,5101,5101,5876,6281,5416,5275,4435,5874,5101,4990,6089,5406,5410,5101,5265,5407,5285,5101,5101,5297,6402,5101,5101,5304,5309,5101,5101,5101,5057,5371,5101,5101,5101,5059,5330,4833,5427,5101,5010,4978,5101,5415,5358,5101,5101,5101,5100,5883,5359,5101,5101,5102,6015,4893,5258,5101,5342,5432,5101,5348,5101,5024,6570,5977,5382,4434,5101,5101,5102,6113,5726,5101,6379,5101,5101,5101,5102,5101,5101,6462,5101,4561,5876,5101,6422,6426,5381,6381,6423,6427,5382,5101,5031,5101,5101,4866,4885,4811,5438,6425,5399,6381,5479,5101,5101,5101,5104,5106,5060,5064,5101,5035,5101,5101,5051,5101,5350,5101,5879,4896,5431,5101,5101,5101,5106,5101,4975,5471,5101,5101,5101,5107,6430,5101,5101,5101,5108,4890,6429,6381,5101,5101,5102,6446,5479,5101,5101,5453,5269,5410,5101,4614,5101,5101,6380,5153,5101,5101,5732,5268,5470,5101,5101,5102,6697,5459,5468,6381,5101,5041,5046,5045,5478,5101,5101,5453,4614,5101,5101,5101,5111,6088,5350,5877,5413,5538,5101,5101,5047,5047,5047,5461,5101,6088,6119,5106,5267,5271,5101,5047,6213,5101,5101,5404,4990,5404,5408,5404,4990,5404,5962,5423,5961,5101,6084,5423,5233,6104,5101,4990,5232,5230,5101,5232,4989,5232,5232,5232,5231,6488,5101,5101,5101,5168,5876,5722,5483,4434,5099,5101,5101,6498,6279,5487,5101,4886,6166,5489,5856,5494,5500,5498,5504,5504,5504,5504,5506,5513,5510,5517,5519,5519,5519,5521,5519,5525,5525,5525,5525,5527,6280,5415,5319,5672,5101,5005,6438,5101,5101,5103,5101,5101,5101,6361,6199,5571,5101,5101,5101,5176,5626,6498,5551,5101,6442,5561,5101,5814,5566,5575,5101,5101,5101,5181,6167,5004,6438,5101,5102,6092,6381,5580,5101,5101,5004,6127,5600,5863,5606,5862,5605,5101,5101,5235,5101,5101,5101,5424,5102,6128,5601,5864,5607,5101,5101,5101,5224,5101,6167,5101,5006,6440,5101,5569,5101,5102,6180,5148,5101,5101,5996,5101,6283,5464,5101,5101,5101,5228,5101,5620,5101,5101,5101,5232,5176,5626,6753,5665,5101,5101,5632,5321,4434,5101,5102,6362,6200,5027,5562,5101,5570,5101,5101,5223,5746,5463,5101,5101,5101,5266,4989,5621,5101,5101,5101,5278,6754,5666,5101,5101,5265,5407,6755,5376,5101,5101,4990,5101,5612,5415,5320,6393,5101,5101,5176,5639,5646,4577,5568,5410,5640,5664,5101,5101,5101,5293,5175,5639,5663,5376,5659,5376,5101,5101,5101,4980,5657,5676,5101,5101,5288,5037,5658,5101,5101,5101,5411,5123,5098,5101,5423,5101,5102,6471,6477,5098,5101,5424,5101,5101,5426,5098,5424,5101,5102,6558,5101,5101,5101,6393,5101,5426,5424,5568,5424,5233,5101,5101,5102,6562,5101,5104,5101,5101,5101,4974,6215,5710,4879,5101,6496,5376,5101,5105,5101,5424,5424,5099,5101,5105,5101,5101,5101,5720,4722,5730,5742,5751,5757,5766,5764,5767,5755,5761,5771,5774,5776,5778,5790,5782,5785,5789,5790,5791,5796,5795,5801,5797,5806,5101,5108,4976,5101,5110,6702,5101,5111,6707,5101,5123,5123,5123,5698,5699,5699,5700,4602,5801,5802,5801,5801,4998,5101,5098,5101,5101,5425,5101,5101,5812,5819,5557,5101,5145,5281,5101,4844,5876,4852,5595,5101,4888,5101,5950,5136,4434,5101,4615,5101,5101,5823,5848,5941,5101,5101,5363,5101,5472,5373,5101,5101,5386,5101,5860,4888,5868,5887,5011,5011,5101,5101,5414,5101,6528,5376,5101,5101,5414,6347,5545,5908,6527,4732,5904,6529,5101,5101,5423,5101,5101,5100,5942,5101,5101,5101,5426,5101,5101,5101,5479,5912,5924,5101,5101,5423,5163,5158,5101,5101,5101,4989,5101,5350,5929,5376,5101,5101,5454,5270,6215,5393,5374,5101,5168,5173,5101,5101,5101,5021,5109,5101,5411,5101,5853,5101,6347,5101,5100,5101,5102,5947,5925,5101,5101,5530,4980,4811,5650,5954,5376,4812,5959,5955,5101,5184,5539,6436,5879,5098,5102,5538,5101,6166,5101,5102,5447,5442,4585,5993,5101,5101,5538,6089,5099,4592,5101,5101,5546,5903,4584,5993,5101,5101,5649,5940,5102,4586,5994,5101,5231,4887,5101,4974,5100,5101,5101,6712,5101,5101,4584,5995,5101,5101,5706,5898,4585,5995,5101,5101,5808,5101,5106,5101,5413,6346,5102,6004,5101,5101,5833,5840,6392,5107,5412,5876,4894,5152,5101,5035,5576,5101,5101,5106,6016,5101,5101,5837,5841,5101,5101,5338,5101,6015,5101,5101,5101,5547,5412,5101,5101,5101,5612,5101,6161,5101,5101,5101,5679,5101,5101,6367,5101,5101,5842,6096,5101,6282,5101,4486,6021,6046,6045,6046,6046,6043,6046,6050,6054,6058,6062,6071,6066,6070,6071,6071,6075,6075,6075,6075,6078,6082,5101,5101,5842,6097,5103,5234,5101,5101,5880,5305,5101,5101,5047,5101,5101,6102,5109,6108,5101,5236,5101,5101,5325,5101,6117,5101,6123,5101,5249,6209,6202,5101,6493,5101,5101,5897,5101,5101,6142,6181,5096,5843,6097,5101,5101,5966,5101,5101,5996,5101,5101,5101,5876,5103,6174,5101,5101,5416,5421,5101,5101,5251,6200,6204,5101,5101,5101,5949,6147,6152,6e3,4980,4980,4980,5101,5292,4635,5101,5299,5101,5101,5058,5062,5371,6361,5737,5101,5101,5975,4848,5988,6137,5101,5101,5101,5882,5102,5734,5738,5101,5317,6462,5349,6382,5101,6160,6159,5101,6173,5101,5101,5999,5101,5101,6667,5106,4894,6247,4978,5101,5101,6004,5101,6361,6199,6203,5101,5101,5101,5896,6382,6382,5101,5101,6111,5418,5101,5101,6668,4893,6186,5101,6769,5879,5101,5101,5529,6188,5101,5101,6126,5599,5102,6197,6201,6205,5419,6182,4434,5101,5101,6089,5252,6201,6205,5585,5101,5101,5101,6007,6455,4450,5101,5101,6133,5101,5101,5101,5695,6454,4449,4434,5101,5350,5101,5878,5101,6280,4886,4988,6229,5101,5101,6162,4614,5101,6378,4434,5101,5375,5101,4562,6229,5101,4978,6214,6161,4980,5101,5101,6162,5101,5101,5101,5655,5640,6234,5101,5101,5101,6089,5101,6258,4434,6240,5101,6258,4434,5101,5404,5962,5101,5102,5437,6424,6235,5101,5101,5568,5410,5101,5101,6236,5101,6165,5101,5101,5101,6259,5101,5101,6164,5101,5101,5101,5648,5849,5942,5101,6260,5101,6165,5101,5405,5409,5101,5057,5268,5409,5101,5101,5102,6742,5253,5101,5101,5101,6260,5101,5101,6259,5101,6167,6258,5101,5101,5101,6112,6259,5101,6259,6165,4847,5987,5376,5568,6497,6259,5568,6497,6168,6257,6257,6261,6251,6254,6254,5101,5101,5101,6169,5118,5101,5916,5101,5414,5538,5101,5101,5918,4896,5553,4884,5037,6272,6287,6305,6299,6305,6303,6299,6309,6293,6290,6295,6322,6313,6327,6316,6319,6323,6332,6331,6339,6339,6340,6339,6339,6339,6336,6344,5101,5101,5101,6178,5224,5747,5376,5101,5101,5415,5101,5101,6351,4893,4893,4882,5230,5001,5101,6372,5101,5101,6214,4980,5101,6357,5969,5101,5417,5419,6353,6366,4434,5101,6371,6390,6397,6401,5101,5418,4636,5647,6434,5101,5101,5101,6192,5943,5101,5008,5101,4978,5101,4979,5101,5416,5101,6351,4893,5419,6352,4894,6268,6367,5002,5101,5101,6279,5641,5101,5101,5290,5101,6452,5101,5101,5101,6223,5101,6470,6459,6480,6475,6479,6205,5101,5423,5407,5101,5057,5061,5390,6481,5101,5101,5101,6228,5589,5588,5587,5101,5436,5442,6428,5402,5101,5101,5102,6143,6182,5106,5745,6520,5101,5455,5409,5101,5057,5061,5370,6267,5101,5410,5101,5535,5101,5101,5177,5640,5423,5999,5101,5101,6360,5736,6738,6204,5101,5101,6378,5101,5224,5077,5101,5008,6265,5555,5101,5415,5070,5082,5622,5101,5101,6278,6165,5233,5101,5377,6377,6386,5103,5101,5679,5101,5538,5101,5101,5101,5534,5538,4826,5935,6737,6204,4827,5936,6535,6204,6191,6191,5101,5101,6378,6393,5232,5101,5036,5101,5543,5259,5326,6190,5101,5101,5101,6278,5443,6506,4434,5101,5568,6236,5101,5101,5568,5101,5102,6511,5134,6507,5164,4451,5101,5101,6392,5101,6165,5101,6192,6192,6192,5101,5101,6378,6392,5101,5101,6517,5376,5101,5583,5101,5101,5101,6011,6524,5101,6278,5101,5101,5101,5037,6155,5101,5101,5101,6382,6533,6549,5101,5101,5101,6379,6393,5101,6544,6381,5101,5593,5101,5101,5229,5634,5101,6676,6549,5101,5616,6230,5101,5351,5877,4895,5411,5432,5101,5101,5101,5031,5101,6675,6548,5101,5101,5101,6391,5101,6539,5426,5101,5101,5417,5920,4896,5101,5648,6722,5416,6462,5101,5562,5101,6554,6381,5101,5680,5101,5101,6381,5101,5101,5101,5101,4583,5101,6540,5425,5101,5426,5101,5101,6709,5417,4895,5102,4595,5101,5101,6406,5101,4594,5403,6540,5101,5714,5003,4991,6090,6568,5101,5101,6464,4988,5101,6091,6381,5101,5842,5037,5998,5996,5996,5413,4893,5101,5101,5101,6419,5101,6091,5101,5101,6492,6491,5101,6091,5101,4895,4561,4896,5101,5101,6090,6089,4896,5101,5101,6494,6256,4559,5101,5101,6090,5101,5101,6090,4561,6089,4561,5101,6089,4560,5537,6089,5101,5537,6574,6752,4888,4577,5716,5997,6579,5101,5844,5037,5101,5101,5101,6196,5101,6462,6465,6463,4869,5826,5829,6587,4489,4646,6598,6591,6597,6593,6605,6602,6607,6611,6613,6617,6619,6628,6625,6632,6621,6635,6639,6640,6644,6647,6654,6653,6651,6658,6661,6665,5101,6574,6723,5101,5876,6281,5670,5418,5421,5101,5101,5101,6469,5107,5101,4975,5101,4976,6672,5101,5101,5101,6682,6494,5101,5101,5101,6695,6680,5313,6686,5101,5877,5684,4434,6246,5101,5101,6163,5101,5101,5101,6692,5101,5101,6495,5101,5101,6703,5101,5101,5101,6713,5101,5101,6718,6717,4834,6722,5101,5418,5422,5101,6727,6734,5101,5881,5357,5337,6746,5101,5101,5101,6495,6378,5101,6222,6745,5101,5889,5128,5074,4442,6224,6747,5101,5877,5615,5671,5876,5101,5879,5101,5899,6230,5101,5101,6089,5101,5101,4892,5101,5412,5002,6734,5101,5101,6711,5101,5101,5253,5101,5877,5877,5877,5101,5101,5101,6771,5101,5101,6575,5642,4635,5411,6089,5101,4889,5258,5101,5252,4561,5101,5101,6090,5252,4561,5876,5876,5101,5101,5101,5914,6353,6148,5106,4974,5101,5101,5972,5101,4989,5101,6165,5425,5101,6688,5107,5101,6111,5724,6759,5725,4561,5101,5101,5983,5994,5101,5190,5879,5101,5101,5101,5344,5376,5106,5101,5101,5413,6463,5879,5102,6775,6767,5101,5101,5997,5101,5101,5101,4811,4583,6765,5101,5101,5101,5101,6098,5420,5101,5998,5101,5101,5101,4818,5109,5101,5413,5537,5101,5101,6165,5101,6111,6564,5101,5998,5101,6769,5101,5101,6132,6137,5101,6098,5101,5101,6033,6031,6039,5105,5101,5109,5101,4863,5101,6776,5101,5101,5101,6035,4434,5101,6161,5536,5101,5036,5102,5101,5101,6088,5101,5101,5412,6089,1048576,1073741824,0,0,0,-872415232,4194560,4196352,270532608,2097152,4194304,117440512,134217728,4194304,16777216,4194432,3145728,16777216,134217728,536870912,1073741824,0,541065216,541065216,-2143289344,-2143289344,4194304,4194304,4196352,-2143289344,4194304,4194432,37748736,541065216,-2143289344,4194304,4194304,4194304,4194304,37748736,4194304,4194304,4198144,4196352,8540160,4194304,4194304,4194304,4196352,276901888,4194304,4194304,8425488,4194304,1,0,1024,1024,0,1024,742391808,239075328,-1405091840,742391808,742391808,775946240,239075328,171966464,775946240,171966464,171966464,171966464,171966464,-1405091840,775946240,775946240,-1405091840,-1371537408,775946240,775946240,775946240,171966464,239075328,239075328,171966464,775946240,-1371537408,775946240,775946240,-1371537408,239075328,775946240,775946240,775946240,775946240,4718592,64,4718592,2097216,4720640,541589504,4194368,541589504,4194400,4194368,541065280,4194368,-2143289280,4194368,-2143285440,-2143285408,-2143285408,-2109730976,-2143285408,-2143285408,-2143285408,-2143285408,776470528,-2143285408,-2109730976,775946336,775946304,776470528,775946304,-1908404384,2,4,8,262144,0,0,0,2147483648,8,262144,262144,1048576,0,128,4096,0,4194304,128,128,0,1048576,0,0,1536,1792,0,0,1,2,4,128,2097152,8192,8392704,0,0,1,4,8,262144,536870912,64,64,32,96,96,96,96,128,1536,524288,96,64,524288,524288,1536,1024,0,0,0,29,96,1048576,128,128,128,128,2048,2048,2048,2048,2048,2048,0,96,524288,96,64,0,0,128,1024,524288,64,64,96,96,524288,524288,4100,1024,100680704,96,524288,64,96,524288,64,80,528,524304,1048592,2097168,268435472,16,16,2,536936448,16,262160,16,536936448,16,17,17,20,16,48,16,16,20,560,24,560,48,2097680,3145744,1048592,1048592,2097168,16,1049104,2228784,2097168,2097168,16,16,16,16,20,48,48,3146256,2097680,1048592,16,16,16,28,0,2097552,3146256,16,16,16,21,16,16,28,16,0,16,0,-2046820352,0,0,2,2,2,2098064,17,21,266240,1048576,67108864,2147483648,0,0,64,65536,1048576,0,16,16,163577856,17,528,528,16,528,-161430188,-161429676,-161429676,-161430188,-161429680,-161430188,-161430188,-161429680,-161429676,-161349072,-161429675,-161349072,-161349072,-161349072,-161349072,-161347728,-161347728,-161347728,-161347728,-161298572,-160774288,-160299084,-161298572,-161298576,-160299088,-161298576,-160774284,-160774284,-161298572,-161298572,-161298572,-161298572,112,21,53,146804757,146812949,146862101,146863389,-161429676,-160905388,-161429676,-161429676,-161429676,-161429676,-161429675,-161349072,146863421,148960541,146863389,146863389,148960541,146863421,148960541,148960541,-161429740,-161429676,-160905388,-161298572,-161298572,-18860267,-160774284,-18729163,0,0,1,6,8,16,262144,0,0,1,8,0,24,0,0,1,14,16,32,1024,32768,100663296,-1073741824,0,0,0,150528,131072,16777216,0,0,1,102,1,32768,131328,131072,524288,2097152,8388608,16777216,164096,0,0,0,1007,0,1073741825,2147483648,2147483648,1073741824,8,0,0,58368,0,0,65536,1048576,4096,1048576,512,512,9476,134218240,0,1073741824,2621440,1073741824,2147483648,2147483648,0,0,66048,0,0,0,67108864,0,0,0,16384,0,0,0,8,0,0,0,9,4456448,8,16777216,1073774592,1226014816,100665360,100665360,100665360,100665360,-2046818288,1091799136,1091799136,1091803360,1091799136,1091799136,-2044196848,1091799136,1091799136,1091799136,1091799136,1091799136,1158908e3,1158908001,1192462432,1192462448,1192462448,1192462448,1192462448,1200851056,1091799393,1200851056,1200851056,1091799393,1200851056,1200851056,1200851056,1192462448,1870638912,1870638912,1870655296,1870638912,1870655296,1870655296,1870655296,1870655296,1870655296,1870655312,1870655316,1870655316,1870655316,1870655317,1870655348,1870655316,1870655316,1870655312,1870655312,1879027568,1879043952,1870655316,1870655316,1870655316,1870638928,1879043952,1879043956,0,0,1,12288,0,229440,1048576,1224736768,100663296,0,0,0,1024,0,0,8192,0,0,0,576,0,231488,1090519040,0,0,0,2048,0,0,134217728,0,1157627904,1191182336,0,0,131584,268435456,49152,0,0,0,134217728,0,0,0,16,0,0,0,13,0,9437184,231744,0,0,235712,0,0,131328,0,0,131072,32768,0,0,134217728,0,52e4,7864320,1862270976,0,0,0,4096,0,0,0,1862270976,1862270976,1862270976,0,16252928,0,0,0,8192,64,98304,1048576,150994944,83886080,117440512,0,0,2,4,16,32,256,1024,8192,33554432,0,0,64,256,3584,8192,16384,65536,262144,524288,1048576,2097152,4194304,2147483648,8192,98304,393216,524288,1048576,1048576,2097152,4194304,251658240,536870912,8192,16384,98304,393216,251658240,536870912,1073741824,0,0,2097152,0,0,0,0,1,0,0,0,2,0,0,0,3,240,0,83886080,117440512,64,0,2,0,0,524288,524288,524288,524288,256,1536,2048,8192,16384,256,1536,8192,65536,262144,524288,2097152,67108864,4194304,16777216,100663296,134217728,536870912,524288,2097152,134217728,268435456,536870912,1073741824,0,0,524288,2097152,0,0,1048576,2097152,67108864,1073741824,0,0,1536,65536,262144,524288,33554432,0,1024,65536,262144,2097152,2097152,1073741824,0,0,2,8,16,32,0,8192,4096,0,0,605503,1066401792,9476,512,0,32,384,8192,4194312,4194312,541065224,4194312,4194312,4194312,4194312,4194344,-869654016,-869654016,4203820,-869654016,-869654016,-869654016,-869654016,1279402504,1279402504,1279402504,1279402504,2143549415,2143549415,2143549415,2143549415,2143549423,2143549423,2143549423,2143549423,2143549423,2143549423,0,0,2,16384,32768,260,512,0,0,0,65536,0,0,0,384,8192,0,32,512,0,1050624,262144,512,1275208192,139264,1275068416,0,0,4,128,1024,2048,16384,262144,8,4194304,0,0,0,82432,0,40,0,0,4,256,1024,98304,131072,16777216,268435456,0,0,300,4203520,0,0,2097152,1073741824,2147483648,0,0,520,4333568,1275068416,0,0,4194304,1024,0,4096,8192,0,0,0,520,520,0,0,0,164096,999,29619200,2113929216,0,0,0,1007,1007,1007,0,0,8,124160,32,512,0,2048,524288,0,536870912,0,139264,0,0,0,139264,0,40,0,2621440,0,0,2147483648,1610612736,0,0,0,229376,0,40,0,524288,2097152,1073741824,44,0,0,0,262144,0,0,16384,229376,4194304,25165824,100663296,402653184,1610612736,0,110,110,110,0,0,8388608,8388608,8192,33554432,67108864,134217728,1073741824,0,2147483648,0,0,0,12545,25165824,33554432,67108864,402653184,536870912,0,104,104,104,8192,33554432,134217728,0,0,8388608,134217728,1073741824,0,229376,25165824,33554432,402653184,536870912,0,0,256,1024,65536,16777216,268435456,0,0,0,524288,0,0,0,64,0,0,0,128,0,0,0,256,0,0,0,300,524288,2097152,2147483648,0,0,1,6,32,64,256,512,256,1024,4096,8192,65536,2,4,32,64,256,1024,0,2,4,256,1024,65536,4,64,256,1024,0,0,8,8388608,0,98304,131072,25165824,268435456,536870912,0,0,8388608,4096,0,0,8,8,8,0,2048,524288,67108864,536870912,32,4100,67108864,0,32768,0,32768,0,1049088,0,134348800,270532608,0,1049088,1049088,8192,1049088,12845065,12845065,12845065,12845065,147193865,5505537,5591557,5587465,5587457,5587457,147202057,5587457,5587457,5591557,5587457,13894153,13894153,13894153,13894153,81003049,13894153,-1881791493,-1881791493,-1881791493,-1881791493,0,0,8,33554432,262144,0,33554432,1024,0,4,0,0,0,867647,1,5505024,0,0,15,16,32,192,86528,9,0,0,16,8192,0,0,23,0,75497472,0,0,0,1048576,5505024,-1887436800,0,0,0,2097152,268435456,0,0,4096,8192,67108864,0,0,262144,4194304,8388608,0,0,33554432,8192,0,0,288,8388608,0,0,0,81920,0,0,24,282624,64,896,8192,131072,262144,1048576,16777216,33554432,-1946157056,0,0,0,2621440,0,131072,0,32,0,0,2048,3145728,0,16384,65536,0,0,268435456,32,64,384,512,5120,8192,0,64,0,2048,1048576,0,0,32,64,384,8192,131072,0,0,32768,134217728,0,0,8,32,64,1024,2048,0,2,8,32,384,8192,131072,33554432,131072,1048576,33554432,134217728,2147483648,0,0,2048,524288,536870912,0,1073741824,0,131072,33554432,2147483648,0,0,33554432,1073741824,0,32,0,524288,0,0,67108864,64,64,0,96,96,0,524288,524288,524288,64,64,64,64,96,96,96,0,0,0,28,0,8396800,4194304,134217728,2048,134217728,0,0,32,1,0,8396800,0,0,32,64,128,1024,2048,262144,0,16384,0,2,4,64,128,3840,16384,19922944,2080374784,0,16384,16384,16777216,16384,32768,1048576,2097152,4194304,16777216,524288,268567040,16384,2113544,68489237,72618005,68423701,68423701,68423701,68489237,68423701,-2079059883,-2079059947,68423701,85200917,68423701,68423701,68423701,68423701,68423765,-2079059883,68425749,68423703,69488664,85200919,69488664,69488664,69488664,69488664,70537244,70537245,70537245,70537245,70537309,70537245,-2076946339,-2076946403,70537245,-2076946339,70537245,70537245,70537245,70537245,70539293,-2022351745,-2022351745,-2022351617,-2022351745,-2022351617,-2022351617,-2022351617,-2022351617,-2022351617,-2022351617,-2022351745,-2022351617,-2022351617,0,0,40,67108864,331776,83886080,0,0,59,140224,5505024,5242880,-2080374784,-2080374784,268288,29,0,284672,0,0,68157440,137363456,0,66,66,0,63,64,351232,63,192,351232,7340032,-2030043136,0,0,0,4194304,1,1024,32,64,256,32768,65536,512,131072,268435456,0,0,134348800,134348800,16,4096,262144,1048576,4194304,8388608,16777216,33554432,5242880,0,7,0,0,142606336,0,-872415232,0,0,0,131072,0,0,0,999,259072,4194304,25165824,0,20480,0,0,64,256,1536,8192,16384,0,12,3145728,0,0,0,3145728,64,3072,20480,65536,262144,32,192,3072,20480,4,1048576,0,0,128,131072,0,134218752,0,0,128,134217728,5242880,0,6,0,0,16384,65536,7340032,50331648,32,192,1024,2048,4096,8192,65536,32768,65536,4194304,16777216,2147483648,0,0,1,4,0,0,256,1536,65536,65536,2097152,4194304,50331648,2147483648,32,192,1024,65536,268435456,0,0,32768,4194304,16777216,0,0,184549376,0,0,243269632,0,0,32768,131072,131072,0,32768,32768,1,2,4,2097152,16777216,134217728,268435456,1073741824,2147483648,128,2097152,4194304,50331648,0,0,0,8388608,0,0,0,768,2,4,50331648,0,0,536870912,9216,0,0,0,49152,2,4,128,50331648,0,0,4096,4194304,268435456,0,0,1075838976,2097152,2097152,268435456,4194432,268435968,268435968,1073743872,268435968,0,128,6144,0,229376,128,268435968,268436032,256,256,536871168,256,256,256,256,257,256,384,-1879046336,-1879046334,1073744256,-1879046334,-1879046326,-1879046334,-1879046334,-1879046326,-1879046326,-1845491902,-1878784182,268444480,268444480,268436288,268436288,268436288,268436288,268436289,268444480,268444480,268444480,268444480,2100318149,2100318149,2100318149,2100318149,2100326341,2100326341,2100318149,2100326341,2100326341,0,0,256,2048,2048,0,0,0,4,8,262144,134217728,1,1024,0,4096,0,64,1856,2147483648,0,0,256,65536,2432,0,1864,0,1,2,16,32,64,0,301989888,0,262144,131072,0,0,832,8192,0,1,2,56,64,896,0,1,4036,19939328,2080374784,2080374784,0,0,0,16252928,1,16,32,128,512,2304,0,8,0,512,301989888,0,0,262144,524288,134217728,536870912,0,24576,0,0,0,33554432,0,0,0,32768,0,0,2097152,134217728,0,32768,196608,0,0,0,1,128,512,2048,524288,268435456,536870912,0,33554432,262144,8192,0,0,256,8388608,0,0,1,4,128,3584,16384,3145728,16777216,67108864,134217728,805306368,1073741824,0,0,1024,2048,16384,3145728,0,8192,0,8192,0,536870912,524288,536870912,1073741824,0,1,2,112,128,3072,2048,3145728,16777216,536870912,1073741824,0,0,2097152,16777216,1073741824,0,0,0,8192,8192,8192,9216,33554432,32768,33554432,0,0,262144,0,16777216,0,16777216,16777216,16777216,16777216,0,0,2097152,16777216,0,0,16777216,268500992,4243456,0,0,512,65536,0,4096,4096,0,4096,4096,4096,4096,0,0,0,32,0,0,0,41,0,4243456,4096,12289,1073754113,12289,12289,1124073472,12289,12289,1098920193,1098920193,1124073488,1124073472,1124073472,1258292224,1124073472,1124073474,1124073472,1124073472,1124073472,1124073472,1124073472,1392574464,1124073472,12289,1124085761,1124085761,1124085761,1124085761,1132474625,1098920209,1132474625,1132474625,1098920209,1132474625,1132474625,1132474625,1132474625,1400975617,1124085777,1124085761,1124085761,1258304513,2132360255,2132360255,2132622399,2132360255,2132622399,2132622399,2140749119,2141011263,2132622399,2132622399,2132622399,2132622399,2132360255,2141011263,2141011263,0,0,512,131072,0,128,131072,1024,134217728,0,0,0,50331648,1073741824,0,1,4,64,128,3584,318767104,0,0,0,268435456,0,12289,0,0,0,159383552,25165824,0,0,0,536870912,0,0,0,24576,58720256,0,0,12305,13313,0,0,0,1073741824,0,0,0,12561,0,78081,327155712,0,0,0,1275068416,0,605247,1058013184,1073741824,1073741824,8388608,0,0,503616,7864320,867391,1058013184,1073741824,0,1,6,96,384,512,1024,4096,8192,16384,229376,25165824,33554432,268435456,536870912,0,867647,1066401792,0,0,0,512,1048576,0,0,9,8388608,12288,0,0,0,512,2760704,77824,0,0,0,1024,2048,3145728,2048,77824,524288,1048576,0,0,0,512,0,1048576,0,1,30,32,1024,2048,1024,2048,339968,524288,1048576,16777216,100663296,134217728,805306368,1073741824,1024,2048,12288,65536,0,65536,0,0,19947520,0,0,0,16777216,0,0,0,5,1024,2048,12288,327680,524288,33554432,134217728,536870912,1073741824,14,16,1024,4096,8192,229376,0,2,16384,4194304,2147483648,0,0,0,8,0,65536,262144,7340032,50331648,67108864,2147483648,4096,65536,262144,524288,1048576,33554432,256,0,256,0,256,1,12,1024,134217728,262144,134217728,536870912,0,0,268435456,1,4,8,134217728,4,8,536870912,0,2,16,64,128,0,0,262144,536870912,0,0,1073741824,32768,0,8,32,512,4096,9437184,0,0,1048576,2097152,4194304,67108864,134217728,0,1024,137363456,66,25165824,26214400,92274688,92274688,25165952,92274688,25165824,25165824,92274688,25165824,25165824,92274688,92274688,92274720,92274688,25165824,92274688,93323264,25165890,100721664,100721664,25165890,100721928,100721928,100787464,100853e3,100721928,100721928,125977600,125977600,125977600,125977600,127026176,125977600,125846528,125846528,125846560,125846528,125846528,125846528,126895104,125846528,125977600,127026176,125977600,125977600,127026176,127026176,281843,281843,1330419,281843,1330419,281843,1330419,1330419,281843,281843,281843,5524723,39079155,72633587,5524723,5524723,5524723,5524723,93605107,72633587,72633587,92556531,93605107,127290611,127290611,97799411,127290611,131484915,0,0,1536,2147483648,0,0,17408,33554432,0,1,12,1024,262144,0,58624,0,0,1536,0,189696,0,0,0,1792,2147483648,0,148480,50331648,0,1,14,1024,4096,65536,524288,240,19456,262144,0,0,19456,262144,0,4194304,0,0,1024,2097152,0,0,0,150528,0,0,0,512,4096,8192,131072,0,57344,0,0,0,2048,100663296,0,0,256,0,65536,524288,1048576,33554432,67108864,2,48,64,128,3072,16384,262144,0,0,32,4096,8192,131072,1048576,8388608,33554432,134217728,2048,262144,0,0,2048,268435456,16,64,128,262144,0,0,32768,65536,131072,0,1,2,16,64,0],r.TOKEN=[\"(0)\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSection\",\"Wildcard\",\"EQName\",\"URILiteral\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"StringLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"PITarget\",\"NCName\",\"QName\",\"S\",\"S\",\"CharRef\",\"CommentContents\",\"EOF\",\"'!'\",\"'!='\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$'\",\"'%'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"')'\",\"'*'\",\"'*'\",\"'+'\",\"','\",\"'-'\",\"'-->'\",\"'.'\",\"'..'\",\"'/'\",\"'//'\",\"'/>'\",\"':'\",\"':)'\",\"'::'\",\"':='\",\"';'\",\"'<'\",\"'<!--'\",\"'</'\",\"'<<'\",\"'<='\",\"'<?'\",\"'='\",\"'>'\",\"'>='\",\"'>>'\",\"'?'\",\"'?>'\",\"'@'\",\"'NaN'\",\"'['\",\"']'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'{|'\",\"'|'\",\"'||'\",\"'|}'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/tree_ops.js\":[function(e,t,n){\"use strict\";n.TreeOps={flatten:function(e){var t=this,n=\"\";if(!e)throw new Error(\"Invalid node found\");return e.value===undefined?e.children.forEach(function(e){n+=t.flatten(e)}):n+=e.value,n},concat:function(e,t,n){var r=n?{}:e;n&&Object.keys(e).forEach(function(t){r[t]=e[t]});var i=Object.keys(t);return i.forEach(function(e){r[e]=t[e]}),r},removeParentPtr:function(e){e.getParent!==undefined&&delete e.getParent;for(var t in e.children){var n=e.children[t];this.removeParentPtr(n)}},inRange:function(e,t,n){if(e&&e.sl<=t.line&&t.line<=e.el){if(e.sl<t.line&&t.line<e.el)return!0;if(e.sl===t.line&&t.line<e.el)return e.sc<=t.col;if(e.sl===t.line&&e.el===t.line)return e.sc<=t.col&&t.col<=e.ec+(n?1:0);if(e.sl<t.line&&e.el===t.line)return t.col<=e.ec+(n?1:0)}},findNode:function(e,t){if(!e)return;var n=e.pos;if(this.inRange(n,t)===!0){for(var r in e.children){var i=e.children[r],s=this.findNode(i,t);if(s!==undefined)return s}return e}return},astAsXML:function(e,t){var n=\"\";t=t?t:\"\",e.value&&(n+=t+\"<\"+e.name+\">\"+e.value+\"</\"+e.name+\">\\n\"),n+=t+\"<\"+e.name+\">\\n\";var r=this;return e.children.forEach(function(e){n+=r.astAsXML(e,t+\"  \")}),n+=t+\"</\"+e.name+\">\\n\",n}}},{}],\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\":[function(e,t,n){\"use strict\";n.parseComment=function(e){e=e.trim();var t=e.substring(0,3)===\"(:~\";if(t){var n=e.split(\"\\n\"),r={description:\"\"};return n.forEach(function(e,t){t===0&&(e=e.substring(3)),e=e.trim(),e[0]===\":\"&&(e=e.substring(1)),e=e.trim(),r.description+=\" \"+e}),r.description=r.description.trim(),r.description=r.description.substring(0,r.description.length-2).trim(),r}}},{}],\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\":[function(e,t,n){var r=e(\"lodash\"),i=e(\"./parse_comment\").parseComment;n.XQDoc=function(e){\"use strict\";var t={};this.getDoc=function(){return t},this.WS=function(e){e.value.trim().substring(0,3)===\"(:~\"&&(e.getParent.comment=i(e.value))},this.AnnotatedDecl=function(e){this.visitChildren(e),e.comment=e.getParent.comment,e.getParent.comment=undefined},this.XQuery=function(e){this.visitChildren(e)},this.getXQDoc=function(e){var t={moduleNamespace:e.moduleNamespace,description:e.description,variables:[],functions:[]};return r.forEach(e.variables,function(e){var n=r.cloneDeep(e.qname);n.annotations=e.annotations,n.description=e.description,n.type=e.type,n.occurrence=e.occurrence,t.variables.push(n)}),r.forEach(e.functions,function(e,n){if(n.substring(0,\"http://www.w3.org/2001/XMLSchema#\".length)===\"http://www.w3.org/2001/XMLSchema#\")return;var r=n.split(\"#\");t.functions.push({name:r[0],uri:r[1],params:e.params})}),t},this.visit=function(e){var t=e.name,n=!1;typeof this[t]==\"function\"&&(n=this[t](e)===!0),n||this.visitChildren(e)},this.visitChildren=function(e,t){for(var n=0;n<e.children.length;n++){var r=e.children[n];t!==undefined&&typeof t[r.name]==\"function\"?t[r.name](r):this.visit(r)}},this.visit(e)}},{\"./parse_comment\":\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\",lodash:\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/lib/xqlint.js\":[function(e,t,n){\"use strict\";var r=e(\"lodash\"),i=e(\"./parsers/JSONiqParser\").JSONiqParser,s=e(\"./parsers/XQueryParser\").XQueryParser,o=e(\"./parsers/JSONParseTreeHandler\").JSONParseTreeHandler,u=e(\"./compiler/translator\").Translator,a=e(\"./formatter/style_checker\").StyleChecker,f=e(\"./xqdoc/xqdoc\").XQDoc,l=e(\"../lib/completion/completer\"),c=e(\"./tree_ops\").TreeOps,h=n.createStaticContext=function(){var t=e(\"./compiler/static_context\").StaticContext;return new t},p=function(e,t,n){var r=e.substring(0,t),i=e.substring(0,n),s=r.split(\"\\n\").length,o=t-r.lastIndexOf(\"\\n\"),u=i.split(\"\\n\").length,a=n-i.lastIndexOf(\"\\n\"),f={sl:s-1,sc:o-1,el:u-1,ec:a-1};return f};n.JSONiqLexer=e(\"./lexers/jsoniq_lexer\").JSONiqLexer,n.XQueryLexer=e(\"./lexers/xquery_lexer\").XQueryLexer,n.XQLint=function(e,t){r.defaults&&(t=r.defaults(t?t:{},{styleCheck:!1}));var n,d,v=t.staticContext?t.staticContext:h();this.getAST=function(){return n},this.printAST=function(){return c.astAsXML(n,\"  \")},this.getXQDoc=function(){return d.getXQDoc(v)};var m=[];this.getMarkers=function(){return m},this.getMarkers=function(e){var t=[];return m.forEach(function(n){(n.type===e||e===undefined)&&t.push(n)}),t},this.getErrors=function(){return this.getMarkers(\"error\")},this.getWarnings=function(){return this.getMarkers(\"warning\")},this.getCompletions=function(t){return l.complete(e,n,v,t)};var g=!1;this.hasSyntaxError=function(){return g};var y=t.fileName?t.fileName:\"\",b=y.substring(y.length-\".jq\".length).indexOf(\".jq\")!==-1&&e.indexOf(\"xquery version\")!==0||e.indexOf(\"jsoniq version\")===0,w=new o(e),E=b?new i(e,w):new s(e,w);try{E.parse_XQuery()}catch(S){if(!(S instanceof E.ParseException))throw S;g=!0,w.closeParseTree();var x=p(e,S.getBegin(),S.getEnd()),T=E.getErrorMessage(S);x.sc===x.ec&&x.ec++,m.push({pos:x,type:\"error\",level:\"error\",message:T})}n=w.getParseTree(),t.styleCheck&&(m=m.concat((new a(n,e)).getMarkers())),d=new f(n);var N=new u(v,n);m=m.concat(N.getMarkers())}},{\"../lib/completion/completer\":\"/node_modules/xqlint/lib/completion/completer.js\",\"./compiler/static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\",\"./compiler/translator\":\"/node_modules/xqlint/lib/compiler/translator.js\",\"./formatter/style_checker\":\"/node_modules/xqlint/lib/formatter/style_checker.js\",\"./lexers/jsoniq_lexer\":\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\",\"./lexers/xquery_lexer\":\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\",\"./parsers/JSONParseTreeHandler\":\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\",\"./parsers/JSONiqParser\":\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\",\"./parsers/XQueryParser\":\"/node_modules/xqlint/lib/parsers/XQueryParser.js\",\"./tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./xqdoc/xqdoc\":\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\",lodash:\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/node_modules/lodash/index.js\":[function(e,t,n){(function(e){(function(){function Ht(e,t){if(e!==t){var n=e===null,i=e===r,s=e===e,o=t===null,u=t===r,a=t===t;if(e>t&&!o||!s||n&&!u&&a||i&&a)return 1;if(e<t&&!n||!a||o&&!i&&s||u&&s)return-1}return 0}function Bt(e,t,n){var r=e.length,i=n?r:-1;while(n?i--:++i<r)if(t(e[i],i,e))return i;return-1}function jt(e,t,n){if(t!==t)return Jt(e,n);var r=n-1,i=e.length;while(++r<i)if(e[r]===t)return r;return-1}function Ft(e){return typeof e==\"function\"||!1}function It(e){return e==null?\"\":e+\"\"}function qt(e,t){var n=-1,r=e.length;while(++n<r&&t.indexOf(e.charAt(n))>-1);return n}function Rt(e,t){var n=e.length;while(n--&&t.indexOf(e.charAt(n))>-1);return n}function Ut(e,t){return Ht(e.criteria,t.criteria)||e.index-t.index}function zt(e,t,n){var r=-1,i=e.criteria,s=t.criteria,o=i.length,u=n.length;while(++r<o){var a=Ht(i[r],s[r]);if(a){if(r>=u)return a;var f=n[r];return a*(f===\"asc\"||f===!0?1:-1)}}return e.index-t.index}function Wt(e){return St[e]}function Xt(e){return xt[e]}function Vt(e,t,n){return t?e=Ct[e]:n&&(e=kt[e]),\"\\\\\"+e}function $t(e){return\"\\\\\"+kt[e]}function Jt(e,t,n){var r=e.length,i=t+(n?0:-1);while(n?i--:++i<r){var s=e[i];if(s!==s)return i}return-1}function Kt(e){return!!e&&typeof e==\"object\"}function Qt(e){return e<=160&&e>=9&&e<=13||e==32||e==160||e==5760||e==6158||e>=8192&&(e<=8202||e==8232||e==8233||e==8239||e==8287||e==12288||e==65279)}function Gt(e,t){var n=-1,r=e.length,i=-1,s=[];while(++n<r)e[n]===t&&(e[n]=S,s[++i]=n);return s}function Yt(e,t){var n,r=-1,i=e.length,s=-1,o=[];while(++r<i){var u=e[r],a=t?t(u,r,e):u;if(!r||n!==a)n=a,o[++s]=u}return o}function Zt(e){var t=-1,n=e.length;while(++t<n&&Qt(e.charCodeAt(t)));return t}function en(e){var t=e.length;while(t--&&Qt(e.charCodeAt(t)));return t}function tn(e){return Tt[e]}function nn(e){function Hn(e){if(Kt(e)&&!mu(e)&&!(e instanceof In)){if(e instanceof jn)return e;if(Mt.call(e,\"__chain__\")&&Mt.call(e,\"__wrapped__\"))return gs(e)}return new jn(e)}function Bn(){}function jn(e,t,n){this.__wrapped__=e,this.__actions__=n||[],this.__chain__=!!t}function In(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Ln,this.__views__=[]}function qn(){var e=new In(this.__wrapped__);return e.__actions__=Yn(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Yn(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Yn(this.__views__),e}function Rn(){if(this.__filtered__){var e=new In(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e}function Un(){var e=this.__wrapped__.value(),t=this.__dir__,n=mu(e),r=t<0,i=n?e.length:0,s=Ki(0,i,this.__views__),o=s.start,u=s.end,a=u-o,f=r?u:o-1,l=this.__iteratees__,c=l.length,h=0,p=xn(a,this.__takeCount__);if(!n||i<y||i==a&&p==a)return ii(r&&n?e.reverse():e,this.__actions__);var d=[];e:while(a--&&h<p){f+=t;var v=-1,m=e[f];while(++v<c){var g=l[v],E=g.iteratee,S=g.type,x=E(m);if(S==w)m=x;else if(!x){if(S==b)continue e;break e}}d[h++]=m}return d}function zn(){this.__data__={}}function Wn(e){return this.has(e)&&delete this.__data__[e]}function Xn(e){return e==\"__proto__\"?r:this.__data__[e]}function Vn(e){return e!=\"__proto__\"&&Mt.call(this.__data__,e)}function $n(e,t){return e!=\"__proto__\"&&(this.__data__[e]=t),this}function Jn(e){var t=e?e.length:0;this.data={hash:gn(null),set:new cn};while(t--)this.push(e[t])}function Kn(e,t){var n=e.data,r=typeof t==\"string\"||Nu(t)?n.set.has(t):n.hash[t];return r?0:-1}function Qn(e){var t=this.data;typeof e==\"string\"||Nu(e)?t.set.add(e):t.hash[e]=!0}function Gn(e,n){var r=-1,i=e.length,s=-1,o=n.length,u=t(i+o);while(++r<i)u[r]=e[r];while(++s<o)u[r++]=n[s];return u}function Yn(e,n){var r=-1,i=e.length;n||(n=t(i));while(++r<i)n[r]=e[r];return n}function Zn(e,t){var n=-1,r=e.length;while(++n<r)if(t(e[n],n,e)===!1)break;return e}function er(e,t){var n=e.length;while(n--)if(t(e[n],n,e)===!1)break;return e}function tr(e,t){var n=-1,r=e.length;while(++n<r)if(!t(e[n],n,e))return!1;return!0}function nr(e,t,n,r){var i=-1,s=e.length,o=r,u=o;while(++i<s){var a=e[i],f=+t(a);n(f,o)&&(o=f,u=a)}return u}function rr(e,t){var n=-1,r=e.length,i=-1,s=[];while(++n<r){var o=e[n];t(o,n,e)&&(s[++i]=o)}return s}function ir(e,n){var r=-1,i=e.length,s=t(i);while(++r<i)s[r]=n(e[r],r,e);return s}function sr(e,t){var n=-1,r=t.length,i=e.length;while(++n<r)e[i+n]=t[n];return e}function or(e,t,n,r){var i=-1,s=e.length;r&&s&&(n=e[++i]);while(++i<s)n=t(n,e[i],i,e);return n}function ur(e,t,n,r){var i=e.length;r&&i&&(n=e[--i]);while(i--)n=t(n,e[i],i,e);return n}function ar(e,t){var n=-1,r=e.length;while(++n<r)if(t(e[n],n,e))return!0;return!1}function fr(e,t){var n=e.length,r=0;while(n--)r+=+t(e[n])||0;return r}function lr(e,t){return e===r?t:e}function cr(e,t,n,i){return e===r||!Mt.call(i,n)?t:e}function hr(e,t,n){var i=-1,s=ta(t),o=s.length;while(++i<o){var u=s[i],a=e[u],f=n(a,t[u],u,e,t);if((f===f?f!==a:a===a)||a===r&&!(u in e))e[u]=f}return e}function pr(e,t){return t==null?e:vr(t,ta(t),e)}function dr(e,n){var i=-1,s=e==null,o=!s&&es(e),u=o?e.length:0,a=n.length,f=t(a);while(++i<a){var l=n[i];o?f[i]=ts(l,u)?e[l]:r:f[i]=s?r:e[l]}return f}function vr(e,t,n){n||(n={});var r=-1,i=t.length;while(++r<i){var s=t[r];n[s]=e[s]}return n}function mr(e,t,n){var i=typeof e;return i==\"function\"?t===r?e:ui(e,t,n):e==null?qa:i==\"object\"?qr(e):t===r?Ja(e):Rr(e,t)}function gr(e,t,n,i,s,o,u){var a;n&&(a=s?n(e,i,s):n(e));if(a!==r)return a;if(!Nu(e))return e;var f=mu(e);if(f){a=Qi(e);if(!t)return Yn(e,a)}else{var l=Dt.call(e),c=l==L;if(!(l==M||l==x||c&&!s))return Et[l]?Yi(e,l,t):s?e:{};a=Gi(c?{}:e);if(!t)return pr(a,e)}o||(o=[]),u||(u=[]);var h=o.length;while(h--)if(o[h]==e)return u[h];return o.push(e),u.push(a),(f?Zn:_r)(e,function(r,i){a[i]=gr(r,t,n,i,e,o,u)}),a}function br(e,t,n){if(typeof e!=\"function\")throw new Ct(E);return hn(function(){e.apply(r,n)},t)}function wr(e,t){var n=e?e.length:0,r=[];if(!n)return r;var i=-1,s=Xi(),o=s==jt,u=o&&t.length>=y?mi(t):null,a=t.length;u&&(s=Kn,o=!1,t=u);e:while(++i<n){var f=e[i];if(o&&f===f){var l=a;while(l--)if(t[l]===f)continue e;r.push(f)}else s(t,f,0)<0&&r.push(f)}return r}function xr(e,t){var n=!0;return Er(e,function(e,r,i){return n=!!t(e,r,i),n}),n}function Tr(e,t,n,r){var i=r,s=i;return Er(e,function(e,o,u){var a=+t(e,o,u);if(n(a,i)||a===r&&a===s)i=a,s=e}),s}function Nr(e,t,n,i){var s=e.length;n=n==null?0:+n||0,n<0&&(n=-n>s?0:s+n),i=i===r||i>s?s:+i||0,i<0&&(i+=s),s=n>i?0:i>>>0,n>>>=0;while(n<s)e[n++]=t;return e}function Cr(e,t){var n=[];return Er(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function kr(e,t,n,r){var i;return n(e,function(e,n,s){if(t(e,n,s))return i=r?n:e,!1}),i}function Lr(e,t,n,r){r||(r=[]);var i=-1,s=e.length;while(++i<s){var o=e[i];Kt(o)&&es(o)&&(n||mu(o)||vu(o))?t?Lr(o,t,n,r):sr(r,o):n||(r[r.length]=o)}return r}function Mr(e,t){return Ar(e,t,na)}function _r(e,t){return Ar(e,t,ta)}function Dr(e,t){return Or(e,t,ta)}function Pr(e,t){var n=-1,r=t.length,i=-1,s=[];while(++n<r){var o=t[n];Tu(e[o])&&(s[++i]=o)}return s}function Hr(e,t,n){if(e==null)return;n!==r&&n in vs(e)&&(t=[n]);var i=0,s=t.length;while(e!=null&&i<s)e=e[t[i++]];return i&&i==s?e:r}function Br(e,t,n,r,i,s){return e===t?!0:e==null||t==null||!Nu(e)&&!Kt(t)?e!==e&&t!==t:jr(e,t,Br,n,r,i,s)}function jr(e,t,n,r,i,s,o){var u=mu(e),a=mu(t),f=T,l=T;u||(f=Dt.call(e),f==x?f=M:f!=M&&(u=Pu(e))),a||(l=Dt.call(t),l==x?l=M:l!=M&&(a=Pu(t)));var c=f==M,h=l==M,p=f==l;if(p&&!u&&!c)return qi(e,t,f);if(!i){var d=c&&Mt.call(e,\"__wrapped__\"),v=h&&Mt.call(t,\"__wrapped__\");if(d||v)return n(d?e.value():e,v?t.value():t,r,i,s,o)}if(!p)return!1;s||(s=[]),o||(o=[]);var m=s.length;while(m--)if(s[m]==e)return o[m]==t;s.push(e),o.push(t);var g=(u?Ii:Ri)(e,t,n,r,i,s,o);return s.pop(),o.pop(),g}function Fr(e,t,n){var i=t.length,s=i,o=!n;if(e==null)return!s;e=vs(e);while(i--){var u=t[i];if(o&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}while(++i<s){u=t[i];var a=u[0],f=e[a],l=u[1];if(o&&u[2]){if(f===r&&!(a in e))return!1}else{var c=n?n(f,l,a):r;if(c===r?!Br(l,f,n,!0):!c)return!1}}return!0}function Ir(e,n){var r=-1,i=es(e)?t(e.length):[];return Er(e,function(e,t,s){i[++r]=n(e,t,s)}),i}function qr(e){var t=$i(e);if(t.length==1&&t[0][2]){var n=t[0][0],i=t[0][1];return function(e){return e==null?!1:e[n]===i&&(i!==r||n in vs(e))}}return function(e){return Fr(e,t)}}function Rr(e,t){var n=mu(e),i=rs(e)&&os(t),s=e+\"\";return e=ms(e),function(o){if(o==null)return!1;var u=s;o=vs(o);if((n||!i)&&!(u in o)){o=e.length==1?o:Hr(o,Qr(e,0,-1));if(o==null)return!1;u=Ps(e),o=vs(o)}return o[u]===t?t!==r||u in o:Br(t,o[u],r,!0)}}function Ur(e,t,n,i,s){if(!Nu(e))return e;var o=es(t)&&(mu(t)||Pu(t)),u=o?r:ta(t);return Zn(u||t,function(a,f){u&&(f=a,a=t[f]);if(Kt(a))i||(i=[]),s||(s=[]),zr(e,t,f,Ur,n,i,s);else{var l=e[f],c=n?n(l,a,f,e,t):r,h=c===r;h&&(c=a),(c!==r||o&&!(f in e))&&(h||(c===c?c!==l:l===l))&&(e[f]=c)}}),e}function zr(e,t,n,i,s,o,u){var a=o.length,f=t[n];while(a--)if(o[a]==f){e[n]=u[a];return}var l=e[n],c=s?s(l,f,n,e,t):r,h=c===r;h&&(c=f,es(f)&&(mu(f)||Pu(f))?c=mu(l)?l:es(l)?Yn(l):[]:Mu(f)||vu(f)?c=vu(l)?Iu(l):Mu(l)?l:{}:h=!1),o.push(f),u.push(c);if(h)e[n]=i(c,f,s,o,u);else if(c===c?c!==l:l===l)e[n]=c}function Wr(e){return function(t){return t==null?r:t[e]}}function Xr(e){var t=e+\"\";return e=ms(e),function(n){return Hr(n,e,t)}}function Vr(e,t){var n=e?t.length:0;while(n--){var r=t[n];if(r!=i&&ts(r)){var i=r;pn.call(e,r,1)}}return e}function $r(e,t){return e+yn(Cn()*(t-e+1))}function Jr(e,t,n,r,i){return i(e,function(e,i,s){n=r?(r=!1,e):t(n,e,i,s)}),n}function Qr(e,n,i){var s=-1,o=e.length;n=n==null?0:+n||0,n<0&&(n=-n>o?0:o+n),i=i===r||i>o?o:+i||0,i<0&&(i+=o),o=n>i?0:i-n>>>0,n>>>=0;var u=t(o);while(++s<o)u[s]=e[s+n];return u}function Gr(e,t){var n;return Er(e,function(e,r,i){return n=t(e,r,i),!n}),!!n}function Yr(e,t){var n=e.length;e.sort(t);while(n--)e[n]=e[n].value;return e}function Zr(e,t,n){var r=Ui(),i=-1;t=ir(t,function(e){return r(e)});var s=Ir(e,function(e){var n=ir(t,function(t){return t(e)});return{criteria:n,index:++i,value:e}});return Yr(s,function(e,t){return zt(e,t,n)})}function ei(e,t){var n=0;return Er(e,function(e,r,i){n+=+t(e,r,i)||0}),n}function ti(e,t){var n=-1,r=Xi(),i=e.length,s=r==jt,o=s&&i>=y,u=o?mi():null,a=[];u?(r=Kn,s=!1):(o=!1,u=t?[]:a);e:while(++n<i){var f=e[n],l=t?t(f,n,e):f;if(s&&f===f){var c=u.length;while(c--)if(u[c]===l)continue e;t&&u.push(l),a.push(f)}else r(u,l,0)<0&&((t||o)&&u.push(l),a.push(f))}return a}function ni(e,n){var r=-1,i=n.length,s=t(i);while(++r<i)s[r]=e[n[r]];return s}function ri(e,t,n,r){var i=e.length,s=r?i:-1;while((r?s--:++s<i)&&t(e[s],s,e));return n?Qr(e,r?0:s,r?s+1:i):Qr(e,r?s+1:0,r?i:s)}function ii(e,t){var n=e;n instanceof In&&(n=n.value());var r=-1,i=t.length;while(++r<i){var s=t[r];n=s.func.apply(s.thisArg,sr([n],s.args))}return n}function si(e,t,n){var r=0,i=e?e.length:r;if(typeof t==\"number\"&&t===t&&i<=Mn){while(r<i){var s=r+i>>>1,o=e[s];(n?o<=t:o<t)&&o!==null?r=s+1:i=s}return i}return oi(e,t,qa,n)}function oi(e,t,n,i){t=n(t);var s=0,o=e?e.length:0,u=t!==t,a=t===null,f=t===r;while(s<o){var l=yn((s+o)/2),c=n(e[l]),h=c!==r,p=c===c;if(u)var d=p||i;else a?d=p&&h&&(i||c!=null):f?d=p&&(i||h):c==null?d=!1:d=i?c<=t:c<t;d?s=l+1:o=l}return xn(o,On)}function ui(e,t,n){if(typeof e!=\"function\")return qa;if(t===r)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,i){return e.call(t,n,r,i)};case 4:return function(n,r,i,s){return e.call(t,n,r,i,s)};case 5:return function(n,r,i,s,o){return e.call(t,n,r,i,s,o)}}return function(){return e.apply(t,arguments)}}function ai(e){var t=new on(e.byteLength),n=new dn(t);return n.set(new dn(e)),t}function fi(e,n,r){var i=r.length,s=-1,o=Sn(e.length-i,0),u=-1,a=n.length,f=t(a+o);while(++u<a)f[u]=n[u];while(++s<i)f[r[s]]=e[s];while(o--)f[u++]=e[s++];return f}function li(e,n,r){var i=-1,s=r.length,o=-1,u=Sn(e.length-s,0),a=-1,f=n.length,l=t(u+f);while(++o<u)l[o]=e[o];var c=o;while(++a<f)l[c+a]=n[a];while(++i<s)l[c+r[i]]=e[o++];return l}function ci(e,t){return function(n,r,i){var s=t?t():{};r=Ui(r,i,3);if(mu(n)){var o=-1,u=n.length;while(++o<u){var a=n[o];e(s,a,r(a,o,n),n)}}else Er(n,function(t,n,i){e(s,t,r(t,n,i),i)});return s}}function hi(e){return uu(function(t,n){var i=-1,s=t==null?0:n.length,o=s>2?n[s-2]:r,u=s>2?n[2]:r,a=s>1?n[s-1]:r;typeof o==\"function\"?(o=ui(o,a,5),s-=2):(o=typeof a==\"function\"?a:r,s-=o?1:0),u&&ns(n[0],n[1],u)&&(o=s<3?r:o,s=1);while(++i<s){var f=n[i];f&&e(t,f,o)}return t})}function pi(e,t){return function(n,r){var i=n?Vi(n):0;if(!ss(i))return e(n,r);var s=t?i:-1,o=vs(n);while(t?s--:++s<i)if(r(o[s],s,o)===!1)break;return n}}function di(e){return function(t,n,r){var i=vs(t),s=r(t),o=s.length,u=e?o:-1;while(e?u--:++u<o){var a=s[u];if(n(i[a],a,i)===!1)break}return t}}function vi(e,t){function r(){var i=this&&this!==Pt&&this instanceof r?n:e;return i.apply(t,arguments)}var n=yi(e);return r}function mi(e){return gn&&cn?new Jn(e):null}function gi(e){return function(t){var n=-1,r=Ba(ga(t)),i=r.length,s=\"\";while(++n<i)s=e(s,r[n],n);return s}}function yi(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=yr(e.prototype),r=e.apply(n,t);return Nu(r)?r:n}}function bi(e){function t(n,i,s){s&&ns(n,i,s)&&(i=r);var o=Fi(n,e,r,r,r,r,r,i);return o.placeholder=t.placeholder,o}return t}function wi(e,t){return uu(function(n){var i=n[0];return i==null?i:(n.push(t),e.apply(r,n))})}function Ei(e,t){return function(n,i,s){s&&ns(n,i,s)&&(i=r),i=Ui(i,s,3);if(i.length==1){n=mu(n)?n:ds(n);var o=nr(n,i,e,t);if(!n.length||o!==t)return o}return Tr(n,i,e,t)}}function Si(e,t){return function(n,i,s){i=Ui(i,s,3);if(mu(n)){var o=Bt(n,i,t);return o>-1?n[o]:r}return kr(n,i,e)}}function xi(e){return function(t,n,r){return!t||!t.length?-1:(n=Ui(n,r,3),Bt(t,n,e))}}function Ti(e){return function(t,n,r){return n=Ui(n,r,3),kr(t,n,e,!0)}}function Ni(e){return function(){var n,i=arguments.length,s=e?i:-1,o=0,u=t(i);while(e?s--:++s<i){var f=u[o++]=arguments[s];if(typeof f!=\"function\")throw new Ct(E);!n&&jn.prototype.thru&&Wi(f)==\"wrapper\"&&(n=new jn([],!0))}s=n?-1:i;while(++s<i){f=u[s];var c=Wi(f),d=c==\"wrapper\"?zi(f):r;d&&is(d[0])&&d[1]==(h|a|l|p)&&!d[4].length&&d[9]==1?n=n[Wi(d[0])].apply(n,d[3]):n=f.length==1&&is(f)?n[c]():n.thru(f)}return function(){var e=arguments,t=e[0];if(n&&e.length==1&&mu(t)&&t.length>=y)return n.plant(t).value();var r=0,s=i?u[r].apply(this,e):t;while(++r<i)s=u[r].call(this,s);return s}}}function Ci(e,t){return function(n,i,s){return typeof i==\"function\"&&s===r&&mu(n)?e(n,i):t(n,ui(i,s,3))}}function ki(e){return function(t,n,i){if(typeof n!=\"function\"||i!==r)n=ui(n,i,3);return e(t,n,na)}}function Li(e){return function(t,n,i){if(typeof n!=\"function\"||i!==r)n=ui(n,i,3);return e(t,n)}}function Ai(e){return function(t,n,r){var i={};return n=Ui(n,r,3),_r(t,function(t,r,s){var o=n(t,r,s);r=e?o:r,t=e?t:o,i[r]=t}),i}}function Oi(e){return function(t,n,r){return t=It(t),(e?t:\"\")+Pi(t,n,r)+(e?\"\":t)}}function Mi(e){var t=uu(function(n,i){var s=Gt(i,t.placeholder);return Fi(n,e,r,i,s)});return t}function _i(e,t){return function(n,i,s,o){var u=arguments.length<3;return typeof i==\"function\"&&o===r&&mu(n)?e(n,i,s,u):Jr(n,Ui(i,o,4),s,u,t)}}function Di(e,n,i,p,d,v,m,g,y,b){function k(){var u=arguments.length,a=u,f=t(u);while(a--)f[a]=arguments[a];p&&(f=fi(f,p,d)),v&&(f=li(f,v,m));if(x||N){var h=k.placeholder,L=Gt(f,h);u-=L.length;if(u<b){var A=g?Yn(g):r,O=Sn(b-u,0),M=x?L:r,_=x?r:L,D=x?f:r,P=x?r:f;n|=x?l:c,n&=~(x?c:l),T||(n&=~(s|o));var H=[e,n,i,D,M,P,_,A,y,O],B=Di.apply(r,H);return is(e)&&hs(B,H),B.placeholder=h,B}}var j=E?i:this,F=S?j[e]:e;return g&&(f=cs(f,g)),w&&y<f.length&&(f.length=y),this&&this!==Pt&&this instanceof k&&(F=C||yi(e)),F.apply(j,f)}var w=n&h,E=n&s,S=n&o,x=n&a,T=n&u,N=n&f,C=S?r:yi(e);return k}function Pi(e,t,n){var r=e.length;t=+t;if(r>=t||!wn(t))return\"\";var i=t-r;return n=n==null?\" \":n+\"\",Ca(n,mn(i/n.length)).slice(0,i)}function Hi(e,n,r,i){function a(){var n=-1,s=arguments.length,f=-1,l=i.length,c=t(l+s);while(++f<l)c[f]=i[f];while(s--)c[f++]=arguments[++n];var h=this&&this!==Pt&&this instanceof a?u:e;return h.apply(o?r:this,c)}var o=n&s,u=yi(e);return a}function Bi(e){var t=H[e];return function(e,n){return n=n===r?0:+n||0,n?(n=fn(10,n),t(e*n)/n):t(e)}}function ji(e){return function(t,n,r,i){var s=Ui(r);return r==null&&s===mr?si(t,n,e):oi(t,n,s(r,i,1),e)}}function Fi(e,t,n,i,u,a,f,h){var p=t&o;if(!p&&typeof e!=\"function\")throw new Ct(E);var d=i?i.length:0;d||(t&=~(l|c),i=u=r),d-=u?u.length:0;if(t&c){var v=i,m=u;i=u=r}var g=p?r:zi(e),y=[e,t,n,i,u,v,m,a,f,h];g&&(us(y,g),t=y[1],h=y[9]),y[9]=h==null?p?0:e.length:Sn(h-d,0)||0;if(t==s)var b=vi(y[0],y[2]);else t!=l&&t!=(s|l)||!!y[4].length?b=Di.apply(r,y):b=Hi.apply(r,y);var w=g?Kr:hs;return w(b,y)}function Ii(e,t,n,i,s,o,u){var a=-1,f=e.length,l=t.length;if(f!=l&&!(s&&l>f))return!1;while(++a<f){var c=e[a],h=t[a],p=i?i(s?h:c,s?c:h,a):r;if(p!==r){if(p)continue;return!1}if(s){if(!ar(t,function(e){return c===e||n(c,e,i,s,o,u)}))return!1}else if(c!==h&&!n(c,h,i,s,o,u))return!1}return!0}function qi(e,t,n){switch(n){case N:case C:return+e==+t;case k:return e.name==t.name&&e.message==t.message;case O:return e!=+e?t!=+t:e==+t;case _:case P:return e==t+\"\"}return!1}function Ri(e,t,n,i,s,o,u){var a=ta(e),f=a.length,l=ta(t),c=l.length;if(f!=c&&!s)return!1;var h=f;while(h--){var p=a[h];if(!(s?p in t:Mt.call(t,p)))return!1}var d=s;while(++h<f){p=a[h];var v=e[p],m=t[p],g=i?i(s?m:v,s?v:m,p):r;if(g===r?!n(v,m,i,s,o,u):!g)return!1;d||(d=p==\"constructor\")}if(!d){var y=e.constructor,b=t.constructor;if(y!=b&&\"constructor\"in e&&\"constructor\"in t&&!(typeof y==\"function\"&&y instanceof y&&typeof b==\"function\"&&b instanceof b))return!1}return!0}function Ui(e,t,n){var r=Hn.callback||Fa;return r=r===Fa?mr:r,n?r(e,t,n):r}function Wi(e){var t=e.name,n=Pn[t],r=n?n.length:0;while(r--){var i=n[r],s=i.func;if(s==null||s==e)return i.name}return t}function Xi(e,t,n){var r=Hn.indexOf||Ms;return r=r===Ms?jt:r,e?r(e,t,n):r}function $i(e){var t=oa(e),n=t.length;while(n--)t[n][2]=os(t[n][1]);return t}function Ji(e,t){var n=e==null?r:e[t];return Lu(n)?n:r}function Ki(e,t,n){var r=-1,i=n.length;while(++r<i){var s=n[r],o=s.size;switch(s.type){case\"drop\":e+=o;break;case\"dropRight\":t-=o;break;case\"take\":t=xn(t,e+o);break;case\"takeRight\":e=Sn(e,t-o)}}return{start:e,end:t}}function Qi(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]==\"string\"&&Mt.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}function Gi(e){var t=e.constructor;return typeof t==\"function\"&&t instanceof t||(t=xt),new t}function Yi(e,t,n){var r=e.constructor;switch(t){case B:return ai(e);case N:case C:return new r(+e);case j:case F:case I:case q:case R:case U:case z:case W:case X:var i=e.buffer;return new r(n?ai(i):i,e.byteOffset,e.length);case O:case P:return new r(e);case _:var s=new r(e.source,lt.exec(e));s.lastIndex=e.lastIndex}return s}function Zi(e,t,n){e!=null&&!rs(t,e)&&(t=ms(t),e=t.length==1?e:Hr(e,Qr(t,0,-1)),t=Ps(t));var i=e==null?e:e[t];return i==null?r:i.apply(e,n)}function es(e){return e!=null&&ss(Vi(e))}function ts(e,t){return e=typeof e==\"number\"||pt.test(e)?+e:-1,t=t==null?_n:t,e>-1&&e%1==0&&e<t}function ns(e,t,n){if(!Nu(n))return!1;var r=typeof t;if(r==\"number\"?es(n)&&ts(t,n.length):r==\"string\"&&t in n){var i=n[t];return e===e?e===i:i!==i}return!1}function rs(e,t){var n=typeof e;if(n==\"string\"&&rt.test(e)||n==\"number\")return!0;if(mu(e))return!1;var r=!nt.test(e);return r||t!=null&&e in vs(t)}function is(e){var t=Wi(e);if(t in In.prototype){var n=Hn[t];if(e===n)return!0;var r=zi(n);return!!r&&e===r[0]}return!1}function ss(e){return typeof e==\"number\"&&e>-1&&e%1==0&&e<=_n}function os(e){return e===e&&!Nu(e)}function us(e,t){var n=e[1],r=t[1],i=n|r,o=i<h,f=r==h&&n==a||r==h&&n==p&&e[7].length<=t[8]||r==(h|p)&&n==a;if(!o&&!f)return e;r&s&&(e[2]=t[2],i|=n&s?0:u);var l=t[3];if(l){var c=e[3];e[3]=c?fi(c,l,t[4]):Yn(l),e[4]=c?Gt(e[3],S):Yn(t[4])}return l=t[5],l&&(c=e[5],e[5]=c?li(c,l,t[6]):Yn(l),e[6]=c?Gt(e[5],S):Yn(t[6])),l=t[7],l&&(e[7]=Yn(l)),r&h&&(e[8]=e[8]==null?t[8]:xn(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=i,e}function as(e,t){return e===r?t:qu(e,t,as)}function fs(e,t){e=vs(e);var n=-1,r=t.length,i={};while(++n<r){var s=t[n];s in e&&(i[s]=e[s])}return i}function ls(e,t){var n={};return Mr(e,function(e,r,i){t(e,r,i)&&(n[r]=e)}),n}function cs(e,t){var n=e.length,i=xn(t.length,n),s=Yn(e);while(i--){var o=t[i];e[i]=ts(o,n)?s[o]:r}return e}function ps(e){var t=na(e),n=t.length,r=n&&e.length,i=!!r&&ss(r)&&(mu(e)||vu(e)),s=-1,o=[];while(++s<n){var u=t[s];(i&&ts(u,r)||Mt.call(e,u))&&o.push(u)}return o}function ds(e){return e==null?[]:es(e)?Nu(e)?e:xt(e):ca(e)}function vs(e){return Nu(e)?e:xt(e)}function ms(e){if(mu(e))return e;var t=[];return It(e).replace(it,function(e,n,r,i){t.push(r?i.replace(at,\"$1\"):n||e)}),t}function gs(e){return e instanceof In?e.clone():new jn(e.__wrapped__,e.__chain__,Yn(e.__actions__))}function ys(e,n,r){(r?ns(e,n,r):n==null)?n=1:n=Sn(yn(n)||1,1);var i=0,s=e?e.length:0,o=-1,u=t(mn(s/n));while(i<s)u[++o]=Qr(e,i,i+=n);return u}function bs(e){var t=-1,n=e?e.length:0,r=-1,i=[];while(++t<n){var s=e[t];s&&(i[++r]=s)}return i}function Es(e,t,n){var r=e?e.length:0;if(!r)return[];if(n?ns(e,t,n):t==null)t=1;return Qr(e,t<0?0:t)}function Ss(e,t,n){var r=e?e.length:0;if(!r)return[];if(n?ns(e,t,n):t==null)t=1;return t=r-(+t||0),Qr(e,0,t<0?0:t)}function xs(e,t,n){return e&&e.length?ri(e,Ui(t,n,3),!0,!0):[]}function Ts(e,t,n){return e&&e.length?ri(e,Ui(t,n,3),!0):[]}function Ns(e,t,n,r){var i=e?e.length:0;return i?(n&&typeof n!=\"number\"&&ns(e,t,n)&&(n=0,r=i),Nr(e,t,n,r)):[]}function Ls(e){return e?e[0]:r}function As(e,t,n){var r=e?e.length:0;return n&&ns(e,t,n)&&(t=!1),r?Lr(e,t):[]}function Os(e){var t=e?e.length:0;return t?Lr(e,!0):[]}function Ms(e,t,n){var r=e?e.length:0;if(!r)return-1;if(typeof n==\"number\")n=n<0?Sn(r+n,0):n;else if(n){var i=si(e,t);return i<r&&(t===t?t===e[i]:e[i]!==e[i])?i:-1}return jt(e,t,n||0)}function _s(e){return Ss(e,1)}function Ps(e){var t=e?e.length:0;return t?e[t-1]:r}function Hs(e,t,n){var r=e?e.length:0;if(!r)return-1;var i=r;if(typeof n==\"number\")i=(n<0?Sn(r+n,0):xn(n||0,r-1))+1;else if(n){i=si(e,t,!0)-1;var s=e[i];return(t===t?t===s:s!==s)?i:-1}if(t!==t)return Jt(e,i,!0);while(i--)if(e[i]===t)return i;return-1}function Bs(){var e=arguments,t=e[0];if(!t||!t.length)return t;var n=0,r=Xi(),i=e.length;while(++n<i){var s=0,o=e[n];while((s=r(t,o,s))>-1)pn.call(t,s,1)}return t}function Fs(e,t,n){var r=[];if(!e||!e.length)return r;var i=-1,s=[],o=e.length;t=Ui(t,n,3);while(++i<o){var u=e[i];t(u,i,e)&&(r.push(u),s.push(i))}return Vr(e,s),r}function Is(e){return Es(e,1)}function qs(e,t,n){var r=e?e.length:0;return r?(n&&typeof n!=\"number\"&&ns(e,t,n)&&(t=0,n=r),Qr(e,t,n)):[]}function zs(e,t,n){var r=e?e.length:0;if(!r)return[];if(n?ns(e,t,n):t==null)t=1;return Qr(e,0,t<0?0:t)}function Ws(e,t,n){var r=e?e.length:0;if(!r)return[];if(n?ns(e,t,n):t==null)t=1;return t=r-(+t||0),Qr(e,t<0?0:t)}function Xs(e,t,n){return e&&e.length?ri(e,Ui(t,n,3),!1,!0):[]}function Vs(e,t,n){return e&&e.length?ri(e,Ui(t,n,3)):[]}function Js(e,t,n,i){var s=e?e.length:0;if(!s)return[];t!=null&&typeof t!=\"boolean\"&&(i=n,n=ns(e,t,i)?r:t,t=!1);var o=Ui();if(n!=null||o!==mr)n=o(n,i,3);return t&&Xi()==jt?Yt(e,n):ti(e,n)}function Ks(e){if(!e||!e.length)return[];var n=-1,r=0;e=rr(e,function(e){if(es(e))return r=Sn(e.length,r),!0});var i=t(r);while(++n<r)i[n]=ir(e,Wr(n));return i}function Qs(e,t,n){var i=e?e.length:0;if(!i)return[];var s=Ks(e);return t==null?s:(t=ui(t,n,4),ir(s,function(e){return or(e,t,r,!0)}))}function Ys(){var e=-1,t=arguments.length;while(++e<t){var n=arguments[e];if(es(n))var r=r?sr(wr(r,n),wr(n,r)):n}return r?ti(r):[]}function eo(e,t){var n=-1,r=e?e.length:0,i={};r&&!t&&!mu(e[0])&&(t=[]);while(++n<r){var s=e[n];t?i[s]=t[n]:s&&(i[s[0]]=s[1])}return i}function no(e){var t=Hn(e);return t.__chain__=!0,t}function ro(e,t,n){return t.call(n,e),e}function io(e,t,n){return t.call(n,e)}function so(){return no(this)}function oo(){return new jn(this.value(),this.__chain__)}function ao(e){var t,n=this;while(n instanceof Bn){var r=gs(n);t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t}function fo(){var e=this.__wrapped__,t=function(e){return n&&n.__dir__<0?e:e.reverse()};if(e instanceof In){var n=e;return this.__actions__.length&&(n=new In(this)),n=n.reverse(),n.__actions__.push({func:io,args:[t],thisArg:r}),new jn(n,this.__chain__)}return this.thru(t)}function lo(){return this.value()+\"\"}function co(){return ii(this.__wrapped__,this.__actions__)}function vo(e,t,n){var i=mu(e)?tr:xr;n&&ns(e,t,n)&&(t=r);if(typeof t!=\"function\"||n!==r)t=Ui(t,n,3);return i(e,t)}function mo(e,t,n){var r=mu(e)?rr:Cr;return t=Ui(t,n,3),r(e,t)}function bo(e,t){return go(e,qr(t))}function xo(e,t,n,r){var i=e?Vi(e):0;return ss(i)||(e=ca(e),i=e.length),typeof n!=\"number\"||r&&ns(t,n,r)?n=0:n=n<0?Sn(i+n,0):n||0,typeof e==\"string\"||!mu(e)&&Du(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&Xi(e,t,n)>-1}function Co(e,t,n){var r=mu(e)?ir:Ir;return t=Ui(t,n,3),r(e,t)}function Lo(e,t){return Co(e,Ja(t))}function Mo(e,t,n){var r=mu(e)?rr:Cr;return t=Ui(t,n,3),r(e,function(e,n,r){return!t(e,n,r)})}function _o(e,t,n){if(n?ns(e,t,n):t==null){e=ds(e);var i=e.length;return i>0?e[$r(0,i-1)]:r}var s=-1,o=Fu(e),i=o.length,u=i-1;t=xn(t<0?0:+t||0,i);while(++s<t){var a=$r(s,u),f=o[a];o[a]=o[s],o[s]=f}return o.length=t,o}function Do(e){return _o(e,Ln)}function Po(e){var t=e?Vi(e):0;return ss(t)?t:ta(e).length}function Ho(e,t,n){var i=mu(e)?ar:Gr;n&&ns(e,t,n)&&(t=r);if(typeof t!=\"function\"||n!==r)t=Ui(t,n,3);return i(e,t)}function Bo(e,t,n){if(e==null)return[];n&&ns(e,t,n)&&(t=r);var i=-1;t=Ui(t,n,3);var s=Ir(e,function(e,n,r){return{criteria:t(e,n,r),index:++i,value:e}});return Yr(s,Ut)}function Fo(e,t,n,i){return e==null?[]:(i&&ns(t,n,i)&&(n=r),mu(t)||(t=t==null?[]:[t]),mu(n)||(n=n==null?[]:[n]),Zr(e,t,n))}function Io(e,t){return mo(e,qr(t))}function Ro(e,t){if(typeof t!=\"function\"){if(typeof e!=\"function\")throw new Ct(E);var n=e;e=t,t=n}return e=wn(e=+e)?e:0,function(){if(--e<1)return t.apply(this,arguments)}}function Uo(e,t,n){return n&&ns(e,t,n)&&(t=r),t=e&&t==null?e.length:Sn(+t||0,0),Fi(e,h,r,r,r,r,t)}function zo(e,t){var n;if(typeof t!=\"function\"){if(typeof e!=\"function\")throw new Ct(E);var i=e;e=t,t=i}return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=r),n}}function Ko(e,t,n){function v(){f&&un(f),s&&un(s),c=0,s=f=l=r}function m(t,n){n&&un(n),s=f=l=r,t&&(c=qo(),o=e.apply(a,i),!f&&!s&&(i=a=r))}function g(){var e=t-(qo()-u);e<=0||e>t?m(l,s):f=hn(g,e)}function y(){m(p,f)}function b(){i=arguments,u=qo(),a=this,l=p&&(f||!d);if(h===!1)var n=d&&!f;else{!s&&!d&&(c=u);var v=h-(u-c),m=v<=0||v>h;m?(s&&(s=un(s)),c=u,o=e.apply(a,i)):s||(s=hn(y,v))}return m&&f?f=un(f):!f&&t!==h&&(f=hn(g,t)),n&&(m=!0,o=e.apply(a,i)),m&&!f&&!s&&(i=a=r),o}var i,s,o,u,a,f,l,c=0,h=!1,p=!0;if(typeof e!=\"function\")throw new Ct(E);t=t<0?0:+t||0;if(n===!0){var d=!0;p=!1}else Nu(n)&&(d=!!n.leading,h=\"maxWait\"in n&&Sn(+n.maxWait||0,t),p=\"trailing\"in n?!!n.trailing:p);return b.cancel=v,b}function eu(e,t){if(typeof e!=\"function\"||t&&typeof t!=\"function\")throw new Ct(E);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],s=n.cache;if(s.has(i))return s.get(i);var o=e.apply(this,r);return n.cache=s.set(i,o),o};return n.cache=new eu.Cache,n}function nu(e){if(typeof e!=\"function\")throw new Ct(E);return function(){return!e.apply(this,arguments)}}function ru(e){return zo(2,e)}function uu(e,n){if(typeof e!=\"function\")throw new Ct(E);return n=Sn(n===r?e.length-1:+n||0,0),function(){var r=arguments,i=-1,s=Sn(r.length-n,0),o=t(s);while(++i<s)o[i]=r[n+i];switch(n){case 0:return e.call(this,o);case 1:return e.call(this,r[0],o);case 2:return e.call(this,r[0],r[1],o)}var u=t(n+1);i=-1;while(++i<n)u[i]=r[i];return u[n]=o,e.apply(this,u)}}function au(e){if(typeof e!=\"function\")throw new Ct(E);return function(t){return e.apply(this,t)}}function fu(e,t,n){var r=!0,i=!0;if(typeof e!=\"function\")throw new Ct(E);return n===!1?r=!1:Nu(n)&&(r=\"leading\"in n?!!n.leading:r,i=\"trailing\"in n?!!n.trailing:i),Ko(e,t,{leading:r,maxWait:+t,trailing:i})}function lu(e,t){return t=t==null?qa:t,Fi(t,l,r,[e],[])}function cu(e,t,n,r){return t&&typeof t!=\"boolean\"&&ns(e,t,n)?t=!1:typeof t==\"function\"&&(r=n,n=t,t=!1),typeof n==\"function\"?gr(e,t,ui(n,r,1)):gr(e,t)}function hu(e,t,n){return typeof t==\"function\"?gr(e,!0,ui(t,n,1)):gr(e,!0)}function pu(e,t){return e>t}function du(e,t){return e>=t}function vu(e){return Kt(e)&&es(e)&&Mt.call(e,\"callee\")&&!ln.call(e,\"callee\")}function gu(e){return e===!0||e===!1||Kt(e)&&Dt.call(e)==N}function yu(e){return Kt(e)&&Dt.call(e)==C}function bu(e){return!!e&&e.nodeType===1&&Kt(e)&&!Mu(e)}function wu(e){return e==null?!0:es(e)&&(mu(e)||Du(e)||vu(e)||Kt(e)&&Tu(e.splice))?!e.length:!ta(e).length}function Eu(e,t,n,i){n=typeof n==\"function\"?ui(n,i,3):r;var s=n?n(e,t):r;return s===r?Br(e,t,n):!!s}function Su(e){return Kt(e)&&typeof e.message==\"string\"&&Dt.call(e)==k}function xu(e){return typeof e==\"number\"&&wn(e)}function Tu(e){return Nu(e)&&Dt.call(e)==L}function Nu(e){var t=typeof e;return!!e&&(t==\"object\"||t==\"function\")}function Cu(e,t,n,i){return n=typeof n==\"function\"?ui(n,i,3):r,Fr(e,$i(t),n)}function ku(e){return Ou(e)&&e!=+e}function Lu(e){return e==null?!1:Tu(e)?sn.test(Ot.call(e)):Kt(e)&&ht.test(e)}function Au(e){return e===null}function Ou(e){return typeof e==\"number\"||Kt(e)&&Dt.call(e)==O}function Mu(e){var t;if(!Kt(e)||Dt.call(e)!=M||!!vu(e)||!Mt.call(e,\"constructor\")&&(t=e.constructor,typeof t==\"function\"&&!(t instanceof t)))return!1;var n;return Mr(e,function(e,t){n=t}),n===r||Mt.call(e,n)}function _u(e){return Nu(e)&&Dt.call(e)==_}function Du(e){return typeof e==\"string\"||Kt(e)&&Dt.call(e)==P}function Pu(e){return Kt(e)&&ss(e.length)&&!!wt[Dt.call(e)]}function Hu(e){return e===r}function Bu(e,t){return e<t}function ju(e,t){return e<=t}function Fu(e){var t=e?Vi(e):0;return ss(t)?t?Yn(e):[]:ca(e)}function Iu(e){return vr(e,na(e))}function Uu(e,t,n){var i=yr(e);return n&&ns(e,t,n)&&(t=r),t?pr(i,t):i}function Gu(e){return Pr(e,na(e))}function Yu(e,t,n){var i=e==null?r:Hr(e,ms(t),t+\"\");return i===r?n:i}function Zu(e,t){if(e==null)return!1;var n=Mt.call(e,t);if(!n&&!rs(t)){t=ms(t),e=t.length==1?e:Hr(e,Qr(t,0,-1));if(e==null)return!1;t=Ps(t),n=Mt.call(e,t)}return n||ss(e.length)&&ts(t,e.length)&&(mu(e)||vu(e))}function ea(e,t,n){n&&ns(e,t,n)&&(t=r);var i=-1,s=ta(e),o=s.length,u={};while(++i<o){var a=s[i],f=e[a];t?Mt.call(u,f)?u[f].push(a):u[f]=[a]:u[f]=a}return u}function na(e){if(e==null)return[];Nu(e)||(e=xt(e));var n=e.length;n=n&&ss(n)&&(mu(e)||vu(e))&&n||0;var r=e.constructor,i=-1,s=typeof r==\"function\"&&r.prototype===e,o=t(n),u=n>0;while(++i<n)o[i]=i+\"\";for(var a in e)(!u||!ts(a,n))&&(a!=\"constructor\"||!s&&!!Mt.call(e,a))&&o.push(a);return o}function oa(e){e=vs(e);var n=-1,r=ta(e),i=r.length,s=t(i);while(++n<i){var o=r[n];s[n]=[o,e[o]]}return s}function aa(e,t,n){var i=e==null?r:e[t];return i===r&&(e!=null&&!rs(t,e)&&(t=ms(t),e=t.length==1?e:Hr(e,Qr(t,0,-1)),i=e==null?r:e[Ps(t)]),i=i===r?n:i),Tu(i)?i.call(e):i}function fa(e,t,n){if(e==null)return e;var r=t+\"\";t=e[r]!=null||rs(t,e)?[r]:ms(t);var i=-1,s=t.length,o=s-1,u=e;while(u!=null&&++i<s){var a=t[i];Nu(u)&&(i==o?u[a]=n:u[a]==null&&(u[a]=ts(t[i+1])?[]:{})),u=u[a]}return e}function la(e,t,n,i){var s=mu(e)||Pu(e);t=Ui(t,i,4);if(n==null)if(s||Nu(e)){var o=e.constructor;s?n=mu(e)?new o:[]:n=yr(Tu(o)?o.prototype:r)}else n={};return(s?Zn:_r)(e,function(e,r,i){return t(n,e,r,i)}),n}function ca(e){return ni(e,ta(e))}function ha(e){return ni(e,na(e))}function pa(e,t,n){return t=+t||0,n===r?(n=t,t=0):n=+n||0,e>=xn(t,n)&&e<Sn(t,n)}function da(e,t,n){n&&ns(e,t,n)&&(t=n=r);var i=e==null,s=t==null;n==null&&(s&&typeof e==\"boolean\"?(n=e,e=1):typeof t==\"boolean\"&&(n=t,s=!0)),i&&s&&(t=1,s=!1),e=+e||0,s?(t=e,e=0):t=+t||0;if(n||e%1||t%1){var o=Cn();return xn(e+o*(t-e+an(\"1e-\"+((o+\"\").length-1))),t)}return $r(e,t)}function ma(e){return e=It(e),e&&e.charAt(0).toUpperCase()+e.slice(1)}function ga(e){return e=It(e),e&&e.replace(dt,Wt).replace(ut,\"\")}function ya(e,t,n){e=It(e),t+=\"\";var i=e.length;return n=n===r?i:xn(n<0?0:+n||0,i),n-=t.length,n>=0&&e.indexOf(t,n)==n}function ba(e){return e=It(e),e&&Y.test(e)?e.replace(Q,Xt):e}function wa(e){return e=It(e),e&&ot.test(e)?e.replace(st,Vt):e||\"(?:)\"}function Sa(e,t,n){e=It(e),t=+t;var r=e.length;if(r>=t||!wn(t))return e;var i=(t-r)/2,s=yn(i),o=mn(i);return n=Pi(\"\",o,n),n.slice(0,s)+e+n}function Na(e,t,n){return(n?ns(e,t,n):t==null)?t=0:t&&(t=+t),e=Ma(e),Nn(e,t||(ct.test(e)?16:10))}function Ca(e,t){var n=\"\";e=It(e),t=+t;if(t<1||!e||!wn(t))return n;do t%2&&(n+=e),t=yn(t/2),e+=e;while(t);return n}function Aa(e,t,n){return e=It(e),n=n==null?0:xn(n<0?0:+n||0,e.length),e.lastIndexOf(t,n)==n}function Oa(e,t,n){var i=Hn.templateSettings;n&&ns(e,t,n)&&(t=n=r),e=It(e),t=hr(pr({},n||t),i,cr);var s=hr(pr({},t.imports),i.imports,cr),o=ta(s),u=ni(s,o),a,f,l=0,c=t.interpolate||vt,h=\"__p += '\",p=Tt((t.escape||vt).source+\"|\"+c.source+\"|\"+(c===tt?ft:vt).source+\"|\"+(t.evaluate||vt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(\"sourceURL\"in t?t.sourceURL:\"lodash.templateSources[\"+ ++bt+\"]\")+\"\\n\";e.replace(p,function(t,n,r,i,s,o){return r||(r=i),h+=e.slice(l,o).replace(mt,$t),n&&(a=!0,h+=\"' +\\n__e(\"+n+\") +\\n'\"),s&&(f=!0,h+=\"';\\n\"+s+\";\\n__p += '\"),r&&(h+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=o+t.length,t}),h+=\"';\\n\";var v=t.variable;v||(h=\"with (obj) {\\n\"+h+\"\\n}\\n\"),h=(f?h.replace(V,\"\"):h).replace($,\"$1\").replace(J,\"$1;\"),h=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(a?\", __e = _.escape\":\"\")+(f?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var m=ja(function(){return D(o,d+\"return \"+h).apply(r,u)});m.source=h;if(Su(m))throw m;return m}function Ma(e,t,n){var r=e;return e=It(e),e?(n?ns(r,t,n):t==null)?e.slice(Zt(e),en(e)+1):(t+=\"\",e.slice(qt(e,t),Rt(e,t)+1)):e}function _a(e,t,n){var r=e;return e=It(e),e?(n?ns(r,t,n):t==null)?e.slice(Zt(e)):e.slice(qt(e,t+\"\")):e}function Da(e,t,n){var r=e;return e=It(e),e?(n?ns(r,t,n):t==null)?e.slice(0,en(e)+1):e.slice(0,Rt(e,t+\"\")+1):e}function Pa(e,t,n){n&&ns(e,t,n)&&(t=r);var i=d,s=v;if(t!=null)if(Nu(t)){var o=\"separator\"in t?t.separator:o;i=\"length\"in t?+t.length||0:i,s=\"omission\"in t?It(t.omission):s}else i=+t||0;e=It(e);if(i>=e.length)return e;var u=i-s.length;if(u<1)return s;var a=e.slice(0,u);if(o==null)return a+s;if(_u(o)){if(e.slice(u).search(o)){var f,l,c=e.slice(0,u);o.global||(o=Tt(o.source,(lt.exec(o)||\"\")+\"g\")),o.lastIndex=0;while(f=o.exec(c))l=f.index;a=a.slice(0,l==null?u:l)}}else if(e.indexOf(o,u)!=u){var h=a.lastIndexOf(o);h>-1&&(a=a.slice(0,h))}return a+s}function Ha(e){return e=It(e),e&&G.test(e)?e.replace(K,tn):e}function Ba(e,t,n){return n&&ns(e,t,n)&&(t=r),e=It(e),e.match(t||gt)||[]}function Fa(e,t,n){return n&&ns(e,t,n)&&(t=r),Kt(e)?Ra(e):mr(e,t)}function Ia(e){return function(){return e}}function qa(e){return e}function Ra(e){return qr(gr(e,!0))}function Ua(e,t){return Rr(e,gr(t,!0))}function Xa(e,t,n){if(n==null){var i=Nu(t),s=i?ta(t):r,o=s&&s.length?Pr(t,s):r;if(o?!o.length:!i)o=!1,n=t,t=e,e=this}o||(o=Pr(t,ta(t)));var u=!0,a=-1,f=Tu(e),l=o.length;n===!1?u=!1:Nu(n)&&\"chain\"in n&&(u=n.chain);while(++a<l){var c=o[a],h=t[c];e[c]=h,f&&(e.prototype[c]=function(t){return function(){var n=this.__chain__;if(u||n){var r=e(this.__wrapped__),i=r.__actions__=Yn(this.__actions__);return i.push({func:t,args:arguments,thisArg:e}),r.__chain__=n,r}return t.apply(e,sr([this.value()],arguments))}}(h))}return e}function Va(){return Pt._=Qt,this}function $a(){}function Ja(e){return rs(e)?Wr(e):Xr(e)}function Ka(e){return function(t){return Hr(e,ms(t),t+\"\")}}function Qa(e,n,i){i&&ns(e,n,i)&&(n=i=r),e=+e||0,i=i==null?1:+i||0,n==null?(n=e,e=0):n=+n||0;var s=-1,o=Sn(mn((n-e)/(i||1)),0),u=t(o);while(++s<o)u[s]=e,e+=i;return u}function Ga(e,n,r){e=yn(e);if(e<1||!wn(e))return[];var i=-1,s=t(xn(e,An));n=ui(n,r,1);while(++i<e)i<An?s[i]=n(i):n(i);return s}function Ya(e){var t=++_t;return It(e)+t}function Za(e,t){return(+e||0)+(+t||0)}function of(e,t,n){return n&&ns(e,t,n)&&(t=r),t=Ui(t,n,3),t.length==1?fr(mu(e)?e:ds(e),t):ei(e,t)}e=e?rn.defaults(Pt.Object(),e,rn.pick(Pt,yt)):Pt;var t=e.Array,n=e.Date,A=e.Error,D=e.Function,H=e.Math,St=e.Number,xt=e.Object,Tt=e.RegExp,Nt=e.String,Ct=e.TypeError,kt=t.prototype,Lt=xt.prototype,At=Nt.prototype,Ot=D.prototype.toString,Mt=Lt.hasOwnProperty,_t=0,Dt=Lt.toString,Qt=Pt._,sn=Tt(\"^\"+Ot.call(Mt).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),on=e.ArrayBuffer,un=e.clearTimeout,an=e.parseFloat,fn=H.pow,ln=Lt.propertyIsEnumerable,cn=Ji(e,\"Set\"),hn=e.setTimeout,pn=kt.splice,dn=e.Uint8Array,vn=Ji(e,\"WeakMap\"),mn=H.ceil,gn=Ji(xt,\"create\"),yn=H.floor,bn=Ji(t,\"isArray\"),wn=e.isFinite,En=Ji(xt,\"keys\"),Sn=H.max,xn=H.min,Tn=Ji(n,\"now\"),Nn=e.parseInt,Cn=H.random,kn=St.NEGATIVE_INFINITY,Ln=St.POSITIVE_INFINITY,An=4294967295,On=An-1,Mn=An>>>1,_n=9007199254740991,Dn=vn&&new vn,Pn={},Fn=Hn.support={};Hn.templateSettings={escape:Z,evaluate:et,interpolate:tt,variable:\"\",imports:{_:Hn}};var yr=function(){function e(){}return function(t){if(Nu(t)){e.prototype=t;var n=new e;e.prototype=r}return n||{}}}(),Er=pi(_r),Sr=pi(Dr,!0),Ar=di(),Or=di(!0),Kr=Dn?function(e,t){return Dn.set(e,t),e}:qa,zi=Dn?function(e){return Dn.get(e)}:$a,Vi=Wr(\"length\"),hs=function(){var e=0,t=0;return function(n,r){var i=qo(),s=g-(i-t);t=i;if(s>0){if(++e>=m)return n}else e=0;return Kr(n,r)}}(),ws=uu(function(e,t){return Kt(e)&&es(e)?wr(e,Lr(t,!1,!0)):[]}),Cs=xi(),ks=xi(!0),Ds=uu(function(e){var n=e.length,r=n,i=t(c),s=Xi(),o=s==jt,u=[];while(r--){var a=e[r]=es(a=e[r])?a:[];i[r]=o&&a.length>=120?mi(r&&a):null}var f=e[0],l=-1,c=f?f.length:0,h=i[0];e:while(++l<c){a=f[l];if((h?Kn(h,a):s(u,a,0))<0){var r=n;while(--r){var p=i[r];if((p?Kn(p,a):s(e[r],a,0))<0)continue e}h&&h.push(a),u.push(a)}}return u}),js=uu(function(e,t){t=Lr(t);var n=dr(e,t);return Vr(e,t.sort(Ht)),n}),Rs=ji(),Us=ji(!0),$s=uu(function(e){return ti(Lr(e,!1,!0))}),Gs=uu(function(e,t){return es(e)?wr(e,t):[]}),Zs=uu(Ks),to=uu(function(e){var t=e.length,n=t>2?e[t-2]:r,i=t>1?e[t-1]:r;return t>2&&typeof n==\"function\"?t-=2:(n=t>1&&typeof i==\"function\"?(--t,i):r,i=r),e.length=t,Qs(e,n,i)}),uo=uu(function(e){return e=Lr(e),this.thru(function(t){return Gn(mu(t)?t:[vs(t)],e)})}),ho=uu(function(e,t){return dr(e,Lr(t))}),po=ci(function(e,t,n){Mt.call(e,n)?++e[n]:e[n]=1}),go=Si(Er),yo=Si(Sr,!0),wo=Ci(Zn,Er),Eo=Ci(er,Sr),So=ci(function(e,t,n){Mt.call(e,n)?e[n].push(t):e[n]=[t]}),To=ci(function(e,t,n){e[n]=t}),No=uu(function(e,n,i){var s=-1,o=typeof n==\"function\",u=rs(n),a=es(e)?t(e.length):[];return Er(e,function(e){var t=o?n:u&&e!=null?e[n]:r;a[++s]=t?t.apply(e,i):Zi(e,n,i)}),a}),ko=ci(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Ao=_i(or,Er),Oo=_i(ur,Sr),jo=uu(function(e,t){if(e==null)return[];var n=t[2];return n&&ns(t[0],t[1],n)&&(t.length=1),Zr(e,Lr(t),[])}),qo=Tn||function(){return(new n).getTime()},Wo=uu(function(e,t,n){var r=s;if(n.length){var i=Gt(n,Wo.placeholder);r|=l}return Fi(e,r,t,n,i)}),Xo=uu(function(e,t){t=t.length?Lr(t):Gu(e);var n=-1,r=t.length;while(++n<r){var i=t[n];e[i]=Fi(e[i],s,e)}return e}),Vo=uu(function(e,t,n){var r=s|o;if(n.length){var i=Gt(n,Vo.placeholder);r|=l}return Fi(t,r,e,n,i)}),$o=bi(a),Jo=bi(f),Qo=uu(function(e,t){return br(e,1,t)}),Go=uu(function(e,t,n){return br(e,t,n)}),Yo=Ni(),Zo=Ni(!0),tu=uu(function(e,t){t=Lr(t);if(typeof e!=\"function\"||!tr(t,Ft))throw new Ct(E);var n=t.length;return uu(function(r){var i=xn(r.length,n);while(i--)r[i]=t[i](r[i]);return e.apply(this,r)})}),iu=Mi(l),su=Mi(c),ou=uu(function(e,t){return Fi(e,p,r,r,r,Lr(t))}),mu=bn||function(e){return Kt(e)&&ss(e.length)&&Dt.call(e)==T},qu=hi(Ur),Ru=hi(function(e,t,n){return n?hr(e,t,n):pr(e,t)}),zu=wi(Ru,lr),Wu=wi(qu,as),Xu=Ti(_r),Vu=Ti(Dr),$u=ki(Ar),Ju=ki(Or),Ku=Li(_r),Qu=Li(Dr),ta=En?function(e){var t=e==null?r:e.constructor;return typeof t==\"function\"&&t.prototype===e||typeof e!=\"function\"&&es(e)?ps(e):Nu(e)?En(e):[]}:ps,ra=Ai(!0),ia=Ai(),sa=uu(function(e,t){if(e==null)return{};if(typeof t[0]!=\"function\"){var t=ir(Lr(t),Nt);return fs(e,wr(na(e),t))}var n=ui(t[0],t[1],3);return ls(e,function(e,t,r){return!n(e,t,r)})}),ua=uu(function(e,t){return e==null?{}:typeof t[0]==\"function\"?ls(e,ui(t[0],t[1],3)):fs(e,Lr(t))}),va=gi(function(e,t,n){return t=t.toLowerCase(),e+(n?t.charAt(0).toUpperCase()+t.slice(1):t)}),Ea=gi(function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()}),xa=Oi(),Ta=Oi(!0),ka=gi(function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}),La=gi(function(e,t,n){return e+(n?\" \":\"\")+(t.charAt(0).toUpperCase()+t.slice(1))}),ja=uu(function(e,t){try{return e.apply(r,t)}catch(n){return Su(n)?n:new A(n)}}),za=uu(function(e,t){return function(n){return Zi(n,e,t)}}),Wa=uu(function(e,t){return function(n){return Zi(e,n,t)}}),ef=Bi(\"ceil\"),tf=Bi(\"floor\"),nf=Ei(pu,kn),rf=Ei(Bu,Ln),sf=Bi(\"round\");return Hn.prototype=Bn.prototype,jn.prototype=yr(Bn.prototype),jn.prototype.constructor=jn,In.prototype=yr(Bn.prototype),In.prototype.constructor=In,zn.prototype[\"delete\"]=Wn,zn.prototype.get=Xn,zn.prototype.has=Vn,zn.prototype.set=$n,Jn.prototype.push=Qn,eu.Cache=zn,Hn.after=Ro,Hn.ary=Uo,Hn.assign=Ru,Hn.at=ho,Hn.before=zo,Hn.bind=Wo,Hn.bindAll=Xo,Hn.bindKey=Vo,Hn.callback=Fa,Hn.chain=no,Hn.chunk=ys,Hn.compact=bs,Hn.constant=Ia,Hn.countBy=po,Hn.create=Uu,Hn.curry=$o,Hn.curryRight=Jo,Hn.debounce=Ko,Hn.defaults=zu,Hn.defaultsDeep=Wu,Hn.defer=Qo,Hn.delay=Go,Hn.difference=ws,Hn.drop=Es,Hn.dropRight=Ss,Hn.dropRightWhile=xs,Hn.dropWhile=Ts,Hn.fill=Ns,Hn.filter=mo,Hn.flatten=As,Hn.flattenDeep=Os,Hn.flow=Yo,Hn.flowRight=Zo,Hn.forEach=wo,Hn.forEachRight=Eo,Hn.forIn=$u,Hn.forInRight=Ju,Hn.forOwn=Ku,Hn.forOwnRight=Qu,Hn.functions=Gu,Hn.groupBy=So,Hn.indexBy=To,Hn.initial=_s,Hn.intersection=Ds,Hn.invert=ea,Hn.invoke=No,Hn.keys=ta,Hn.keysIn=na,Hn.map=Co,Hn.mapKeys=ra,Hn.mapValues=ia,Hn.matches=Ra,Hn.matchesProperty=Ua,Hn.memoize=eu,Hn.merge=qu,Hn.method=za,Hn.methodOf=Wa,Hn.mixin=Xa,Hn.modArgs=tu,Hn.negate=nu,Hn.omit=sa,Hn.once=ru,Hn.pairs=oa,Hn.partial=iu,Hn.partialRight=su,Hn.partition=ko,Hn.pick=ua,Hn.pluck=Lo,Hn.property=Ja,Hn.propertyOf=Ka,Hn.pull=Bs,Hn.pullAt=js,Hn.range=Qa,Hn.rearg=ou,Hn.reject=Mo,Hn.remove=Fs,Hn.rest=Is,Hn.restParam=uu,Hn.set=fa,Hn.shuffle=Do,Hn.slice=qs,Hn.sortBy=Bo,Hn.sortByAll=jo,Hn.sortByOrder=Fo,Hn.spread=au,Hn.take=zs,Hn.takeRight=Ws,Hn.takeRightWhile=Xs,Hn.takeWhile=Vs,Hn.tap=ro,Hn.throttle=fu,Hn.thru=io,Hn.times=Ga,Hn.toArray=Fu,Hn.toPlainObject=Iu,Hn.transform=la,Hn.union=$s,Hn.uniq=Js,Hn.unzip=Ks,Hn.unzipWith=Qs,Hn.values=ca,Hn.valuesIn=ha,Hn.where=Io,Hn.without=Gs,Hn.wrap=lu,Hn.xor=Ys,Hn.zip=Zs,Hn.zipObject=eo,Hn.zipWith=to,Hn.backflow=Zo,Hn.collect=Co,Hn.compose=Zo,Hn.each=wo,Hn.eachRight=Eo,Hn.extend=Ru,Hn.iteratee=Fa,Hn.methods=Gu,Hn.object=eo,Hn.select=mo,Hn.tail=Is,Hn.unique=Js,Xa(Hn,Hn),Hn.add=Za,Hn.attempt=ja,Hn.camelCase=va,Hn.capitalize=ma,Hn.ceil=ef,Hn.clone=cu,Hn.cloneDeep=hu,Hn.deburr=ga,Hn.endsWith=ya,Hn.escape=ba,Hn.escapeRegExp=wa,Hn.every=vo,Hn.find=go,Hn.findIndex=Cs,Hn.findKey=Xu,Hn.findLast=yo,Hn.findLastIndex=ks,Hn.findLastKey=Vu,Hn.findWhere=bo,Hn.first=Ls,Hn.floor=tf,Hn.get=Yu,Hn.gt=pu,Hn.gte=du,Hn.has=Zu,Hn.identity=qa,Hn.includes=xo,Hn.indexOf=Ms,Hn.inRange=pa,Hn.isArguments=vu,Hn.isArray=mu,Hn.isBoolean=gu,Hn.isDate=yu,Hn.isElement=bu,Hn.isEmpty=wu,Hn.isEqual=Eu,Hn.isError=Su,Hn.isFinite=xu,Hn.isFunction=Tu,Hn.isMatch=Cu,Hn.isNaN=ku,Hn.isNative=Lu,Hn.isNull=Au,Hn.isNumber=Ou,Hn.isObject=Nu,Hn.isPlainObject=Mu,Hn.isRegExp=_u,Hn.isString=Du,Hn.isTypedArray=Pu,Hn.isUndefined=Hu,Hn.kebabCase=Ea,Hn.last=Ps,Hn.lastIndexOf=Hs,Hn.lt=Bu,Hn.lte=ju,Hn.max=nf,Hn.min=rf,Hn.noConflict=Va,Hn.noop=$a,Hn.now=qo,Hn.pad=Sa,Hn.padLeft=xa,Hn.padRight=Ta,Hn.parseInt=Na,Hn.random=da,Hn.reduce=Ao,Hn.reduceRight=Oo,Hn.repeat=Ca,Hn.result=aa,Hn.round=sf,Hn.runInContext=nn,Hn.size=Po,Hn.snakeCase=ka,Hn.some=Ho,Hn.sortedIndex=Rs,Hn.sortedLastIndex=Us,Hn.startCase=La,Hn.startsWith=Aa,Hn.sum=of,Hn.template=Oa,Hn.trim=Ma,Hn.trimLeft=_a,Hn.trimRight=Da,Hn.trunc=Pa,Hn.unescape=Ha,Hn.uniqueId=Ya,Hn.words=Ba,Hn.all=vo,Hn.any=Ho,Hn.contains=xo,Hn.eq=Eu,Hn.detect=go,Hn.foldl=Ao,Hn.foldr=Oo,Hn.head=Ls,Hn.include=xo,Hn.inject=Ao,Xa(Hn,function(){var e={};return _r(Hn,function(t,n){Hn.prototype[n]||(e[n]=t)}),e}(),!1),Hn.sample=_o,Hn.prototype.sample=function(e){return!this.__chain__&&e==null?_o(this.value()):this.thru(function(t){return _o(t,e)})},Hn.VERSION=i,Zn([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(e){Hn[e].placeholder=Hn}),Zn([\"drop\",\"take\"],function(e,t){In.prototype[e]=function(n){var r=this.__filtered__;if(r&&!t)return new In(this);n=n==null?1:Sn(yn(n)||0,0);var i=this.clone();return r?i.__takeCount__=xn(i.__takeCount__,n):i.__views__.push({size:n,type:e+(i.__dir__<0?\"Right\":\"\")}),i},In.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}}),Zn([\"filter\",\"map\",\"takeWhile\"],function(e,t){var n=t+1,r=n!=w;In.prototype[e]=function(e,t){var i=this.clone();return i.__iteratees__.push({iteratee:Ui(e,t,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),Zn([\"first\",\"last\"],function(e,t){var n=\"take\"+(t?\"Right\":\"\");In.prototype[e]=function(){return this[n](1).value()[0]}}),Zn([\"initial\",\"rest\"],function(e,t){var n=\"drop\"+(t?\"\":\"Right\");In.prototype[e]=function(){return this.__filtered__?new In(this):this[n](1)}}),Zn([\"pluck\",\"where\"],function(e,t){var n=t?\"filter\":\"map\",r=t?qr:Ja;In.prototype[e]=function(e){return this[n](r(e))}}),In.prototype.compact=function(){return this.filter(qa)},In.prototype.reject=function(e,t){return e=Ui(e,t,1),this.filter(function(t){return!e(t)})},In.prototype.slice=function(e,t){e=e==null?0:+e||0;var n=this;return n.__filtered__&&(e>0||t<0)?new In(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==r&&(t=+t||0,n=t<0?n.dropRight(-t):n.take(t-e)),n)},In.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},In.prototype.toArray=function(){return this.take(Ln)},_r(In.prototype,function(e,t){var n=/^(?:filter|map|reject)|While$/.test(t),i=/^(?:first|last)$/.test(t),s=Hn[i?\"take\"+(t==\"last\"?\"Right\":\"\"):t];if(!s)return;Hn.prototype[t]=function(){var t=i?[1]:arguments,o=this.__chain__,u=this.__wrapped__,a=!!this.__actions__.length,f=u instanceof In,l=t[0],c=f||mu(u);c&&n&&typeof l==\"function\"&&l.length!=1&&(f=c=!1);var h=function(e){return i&&o?s(e,1)[0]:s.apply(r,sr([e],t))},p={func:io,args:[h],thisArg:r},d=f&&!a;if(i&&!o)return d?(u=u.clone(),u.__actions__.push(p),e.call(u)):s.call(r,this.value())[0];if(!i&&c){u=d?u:new In(this);var v=e.apply(u,t);return v.__actions__.push(p),new jn(v,o)}return this.thru(h)}}),Zn([\"join\",\"pop\",\"push\",\"replace\",\"shift\",\"sort\",\"splice\",\"split\",\"unshift\"],function(e){var t=(/^(?:replace|split)$/.test(e)?At:kt)[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",r=/^(?:join|pop|replace|shift)$/.test(e);Hn.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?t.apply(this.value(),e):this[n](function(n){return t.apply(n,e)})}}),_r(In.prototype,function(e,t){var n=Hn[t];if(n){var r=n.name,i=Pn[r]||(Pn[r]=[]);i.push({name:t,func:n})}}),Pn[Di(r,o).name]=[{name:\"wrapper\",func:r}],In.prototype.clone=qn,In.prototype.reverse=Rn,In.prototype.value=Un,Hn.prototype.chain=so,Hn.prototype.commit=oo,Hn.prototype.concat=uo,Hn.prototype.plant=ao,Hn.prototype.reverse=fo,Hn.prototype.toString=lo,Hn.prototype.run=Hn.prototype.toJSON=Hn.prototype.valueOf=Hn.prototype.value=co,Hn.prototype.collect=Hn.prototype.map,Hn.prototype.head=Hn.prototype.first,Hn.prototype.select=Hn.prototype.filter,Hn.prototype.tail=Hn.prototype.rest,Hn}var r,i=\"3.10.1\",s=1,o=2,u=4,a=8,f=16,l=32,c=64,h=128,p=256,d=30,v=\"...\",m=150,g=16,y=200,b=1,w=2,E=\"Expected a function\",S=\"__lodash_placeholder__\",x=\"[object Arguments]\",T=\"[object Array]\",N=\"[object Boolean]\",C=\"[object Date]\",k=\"[object Error]\",L=\"[object Function]\",A=\"[object Map]\",O=\"[object Number]\",M=\"[object Object]\",_=\"[object RegExp]\",D=\"[object Set]\",P=\"[object String]\",H=\"[object WeakMap]\",B=\"[object ArrayBuffer]\",j=\"[object Float32Array]\",F=\"[object Float64Array]\",I=\"[object Int8Array]\",q=\"[object Int16Array]\",R=\"[object Int32Array]\",U=\"[object Uint8Array]\",z=\"[object Uint8ClampedArray]\",W=\"[object Uint16Array]\",X=\"[object Uint32Array]\",V=/\\b__p \\+= '';/g,$=/\\b(__p \\+=) '' \\+/g,J=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,K=/&(?:amp|lt|gt|quot|#39|#96);/g,Q=/[&<>\"'`]/g,G=RegExp(K.source),Y=RegExp(Q.source),Z=/<%-([\\s\\S]+?)%>/g,et=/<%([\\s\\S]+?)%>/g,tt=/<%=([\\s\\S]+?)%>/g,nt=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,rt=/^\\w*$/,it=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g,st=/^[:!,]|[\\\\^$.*+?()[\\]{}|\\/]|(^[0-9a-fA-Fnrtuvx])|([\\n\\r\\u2028\\u2029])/g,ot=RegExp(st.source),ut=/[\\u0300-\\u036f\\ufe20-\\ufe23]/g,at=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,ct=/^0[xX]/,ht=/^\\[object .+?Constructor\\]$/,pt=/^\\d+$/,dt=/[\\xc0-\\xd6\\xd8-\\xde\\xdf-\\xf6\\xf8-\\xff]/g,vt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,gt=function(){var e=\"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",t=\"[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]+\";return RegExp(e+\"+(?=\"+e+t+\")|\"+e+\"?\"+t+\"|\"+e+\"+|[0-9]+\",\"g\")}(),yt=[\"Array\",\"ArrayBuffer\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Math\",\"Number\",\"Object\",\"RegExp\",\"Set\",\"String\",\"_\",\"clearTimeout\",\"isFinite\",\"parseFloat\",\"parseInt\",\"setTimeout\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\"],bt=-1,wt={};wt[j]=wt[F]=wt[I]=wt[q]=wt[R]=wt[U]=wt[z]=wt[W]=wt[X]=!0,wt[x]=wt[T]=wt[B]=wt[N]=wt[C]=wt[k]=wt[L]=wt[A]=wt[O]=wt[M]=wt[_]=wt[D]=wt[P]=wt[H]=!1;var Et={};Et[x]=Et[T]=Et[B]=Et[N]=Et[C]=Et[j]=Et[F]=Et[I]=Et[q]=Et[R]=Et[O]=Et[M]=Et[_]=Et[P]=Et[U]=Et[z]=Et[W]=Et[X]=!0,Et[k]=Et[L]=Et[A]=Et[D]=Et[H]=!1;var St={\"\\u00c0\":\"A\",\"\\u00c1\":\"A\",\"\\u00c2\":\"A\",\"\\u00c3\":\"A\",\"\\u00c4\":\"A\",\"\\u00c5\":\"A\",\"\\u00e0\":\"a\",\"\\u00e1\":\"a\",\"\\u00e2\":\"a\",\"\\u00e3\":\"a\",\"\\u00e4\":\"a\",\"\\u00e5\":\"a\",\"\\u00c7\":\"C\",\"\\u00e7\":\"c\",\"\\u00d0\":\"D\",\"\\u00f0\":\"d\",\"\\u00c8\":\"E\",\"\\u00c9\":\"E\",\"\\u00ca\":\"E\",\"\\u00cb\":\"E\",\"\\u00e8\":\"e\",\"\\u00e9\":\"e\",\"\\u00ea\":\"e\",\"\\u00eb\":\"e\",\"\\u00cc\":\"I\",\"\\u00cd\":\"I\",\"\\u00ce\":\"I\",\"\\u00cf\":\"I\",\"\\u00ec\":\"i\",\"\\u00ed\":\"i\",\"\\u00ee\":\"i\",\"\\u00ef\":\"i\",\"\\u00d1\":\"N\",\"\\u00f1\":\"n\",\"\\u00d2\":\"O\",\"\\u00d3\":\"O\",\"\\u00d4\":\"O\",\"\\u00d5\":\"O\",\"\\u00d6\":\"O\",\"\\u00d8\":\"O\",\"\\u00f2\":\"o\",\"\\u00f3\":\"o\",\"\\u00f4\":\"o\",\"\\u00f5\":\"o\",\"\\u00f6\":\"o\",\"\\u00f8\":\"o\",\"\\u00d9\":\"U\",\"\\u00da\":\"U\",\"\\u00db\":\"U\",\"\\u00dc\":\"U\",\"\\u00f9\":\"u\",\"\\u00fa\":\"u\",\"\\u00fb\":\"u\",\"\\u00fc\":\"u\",\"\\u00dd\":\"Y\",\"\\u00fd\":\"y\",\"\\u00ff\":\"y\",\"\\u00c6\":\"Ae\",\"\\u00e6\":\"ae\",\"\\u00de\":\"Th\",\"\\u00fe\":\"th\",\"\\u00df\":\"ss\"},xt={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"`\":\"&#96;\"},Tt={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\",\"&#96;\":\"`\"},Nt={\"function\":!0,object:!0},Ct={0:\"x30\",1:\"x31\",2:\"x32\",3:\"x33\",4:\"x34\",5:\"x35\",6:\"x36\",7:\"x37\",8:\"x38\",9:\"x39\",A:\"x41\",B:\"x42\",C:\"x43\",D:\"x44\",E:\"x45\",F:\"x46\",a:\"x61\",b:\"x62\",c:\"x63\",d:\"x64\",e:\"x65\",f:\"x66\",n:\"x6e\",r:\"x72\",t:\"x74\",u:\"x75\",v:\"x76\",x:\"x78\"},kt={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},Lt=Nt[typeof n]&&n&&!n.nodeType&&n,At=Nt[typeof t]&&t&&!t.nodeType&&t,Ot=Lt&&At&&typeof e==\"object\"&&e&&e.Object&&e,Mt=Nt[typeof self]&&self&&self.Object&&self,_t=Nt[typeof window]&&window&&window.Object&&window,Dt=At&&At.exports===Lt&&Lt,Pt=Ot||_t!==(this&&this.window)&&_t||Mt||this,rn=nn();typeof define==\"function\"&&typeof define.amd==\"object\"&&define.amd?(Pt._=rn,define(function(){return rn})):Lt&&At?Dt?(At.exports=rn)._=rn:Lt._=rn:Pt._=rn}).call(this)}).call(this,typeof global!=\"undefined\"?global:typeof self!=\"undefined\"?self:typeof window!=\"undefined\"?window:{})},{}]},{},[\"/node_modules/xqlint/lib/xqlint.js\"])}),define(\"ace/mode/xquery_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"./xquery/xqlint\"),o=s.XQLint,u=function(e){return function(t){var n=e,r=n[t],i={},s={};return r.functions.forEach(function(e){s[t+\"#\"+e.name+\"#\"+e.arity]={params:[]},e.parameters.forEach(function(n){s[t+\"#\"+e.name+\"#\"+e.arity].params.push(\"$\"+n.name)})}),r.variables.forEach(function(e){var n=e.name.substring(e.name.indexOf(\":\")+1);i[t+\"#\"+n]={type:\"VarDecl\",annotations:[]}}),{variables:i,functions:s}}},a=t.XQueryWorker=function(e){i.call(this,e),this.setTimeout(200);var t=this;this.sender.on(\"complete\",function(e){if(t.xqlint){var n={line:e.data.pos.row,col:e.data.pos.column},r=t.xqlint.getCompletions(n);t.sender.emit(\"complete\",r)}}),this.sender.on(\"setAvailableModuleNamespaces\",function(e){t.availableModuleNamespaces=e.data}),this.sender.on(\"setFileName\",function(e){t.fileName=e.data}),this.sender.on(\"setModuleResolver\",function(e){t.moduleResolver=u(e.data)})};r.inherits(a,i),function(){this.onUpdate=function(){this.sender.emit(\"start\");var e=this.doc.getValue(),t=s.createStaticContext();this.moduleResolver&&t.setModuleResolver(this.moduleResolver),this.availableModuleNamespaces&&(t.availableModuleNamespaces=this.availableModuleNamespaces);var n={styleCheck:this.styleCheck,staticContext:t,fileName:this.fileName};this.xqlint=new o(e,n),this.sender.emit(\"markers\",this.xqlint.getMarkers())}}.call(a.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ace.js",
    "content": "(function(){function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.define.packaged)t.original=i.define,i.define=t,i.define.packaged=!0;if(!i.require||!i.require.packaged)r.original=i.require,i.require=r,i.require.packaged=!0}var ACE_NAMESPACE = \"ace\",e=function(){return this}();!e&&typeof window!=\"undefined\"&&(e=window);if(!ACE_NAMESPACE&&typeof requirejs!=\"undefined\")return;var t=function(e,n,r){if(typeof e!=\"string\"){t.original?t.original.apply(this,arguments):(console.error(\"dropping module because define wasn't a string.\"),console.trace());return}arguments.length==2&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)};t.modules={},t.payloads={};var n=function(e,t,n){if(typeof t==\"string\"){var i=s(e,t);if(i!=undefined)return n&&n(),i}else if(Object.prototype.toString.call(t)===\"[object Array]\"){var o=[];for(var u=0,a=t.length;u<a;++u){var f=s(e,t[u]);if(f==undefined&&r.original)return;o.push(f)}return n&&n.apply(null,o)||!0}},r=function(e,t){var i=n(\"\",e,t);return i==undefined&&r.original?r.original.apply(this,arguments):i},i=function(e,t){if(t.indexOf(\"!\")!==-1){var n=t.split(\"!\");return i(e,n[0])+\"!\"+i(e,n[1])}if(t.charAt(0)==\".\"){var r=e.split(\"/\").slice(0,-1).join(\"/\");t=r+\"/\"+t;while(t.indexOf(\".\")!==-1&&s!=t){var s=t;t=t.replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return t},s=function(e,r){r=i(e,r);var s=t.modules[r];if(!s){s=t.payloads[r];if(typeof s==\"function\"){var o={},u={id:r,uri:\"\",exports:o,packaged:!0},a=function(e,t){return n(r,e,t)},f=s(a,o,u);o=f||u.exports,t.modules[r]=o,delete t.payloads[r]}s=t.modules[r]=o||s}return s};o(ACE_NAMESPACE)})(),ace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function o(e){return(e.global?\"g\":\"\")+(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.extended?\"x\":\"\")+(e.sticky?\"y\":\"\")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,\"\")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,\"\"),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e==\"string\"&&t){!i&&t.length>1&&u(t,\"\")>-1&&(a=RegExp(this.source,r.replace.call(o(this),\"g\",\"\")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}}),ace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"],function(e,t,n){\"use strict\";e(\"./regexp\"),e(\"./es5-shim\"),typeof Element!=\"undefined\"&&!Element.prototype.remove&&Object.defineProperty(Element.prototype,\"remove\",{enumerable:!1,writable:!0,configurable:!0,value:function(){this.parentNode&&this.parentNode.removeChild(this)}})}),ace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};if(typeof navigator!=\"object\")return;var r=(navigator.platform.match(/mac|win|linux/i)||[\"other\"])[0].toLowerCase(),i=navigator.userAgent;t.isWin=r==\"win\",t.isMac=r==\"mac\",t.isLinux=r==\"linux\",t.isIE=navigator.appName==\"Microsoft Internet Explorer\"||navigator.appName.indexOf(\"MSAppHost\")>=0?parseFloat((i.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=i.match(/ Gecko\\/\\d+/),t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)==\"[object Opera]\",t.isWebKit=parseFloat(i.split(\"WebKit/\")[1])||undefined,t.isChrome=parseFloat(i.split(\" Chrome/\")[1])||undefined,t.isEdge=parseFloat(i.split(\" Edge/\")[1])||undefined,t.isAIR=i.indexOf(\"AdobeAIR\")>=0,t.isIPad=i.indexOf(\"iPad\")>=0,t.isAndroid=i.indexOf(\"Android\")>=0,t.isChromeOS=i.indexOf(\" CrOS \")>=0,t.isIOS=/iPad|iPhone|iPod/.test(i)&&!window.MSStream,t.isIOS&&(t.isMac=!0),t.isMobile=t.isIPad||t.isAndroid}),ace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"./useragent\"),i=\"http://www.w3.org/1999/xhtml\";t.buildDom=function o(e,t,n){if(typeof e==\"string\"&&e){var r=document.createTextNode(e);return t&&t.appendChild(r),r}if(!Array.isArray(e))return e;if(typeof e[0]!=\"string\"||!e[0]){var i=[];for(var s=0;s<e.length;s++){var u=o(e[s],t,n);u&&i.push(u)}return i}var a=document.createElement(e[0]),f=e[1],l=1;f&&typeof f==\"object\"&&!Array.isArray(f)&&(l=2);for(var s=l;s<e.length;s++)o(e[s],a,n);return l==2&&Object.keys(f).forEach(function(e){var t=f[e];e===\"class\"?a.className=Array.isArray(t)?t.join(\" \"):t:typeof t==\"function\"||e==\"value\"?a[e]=t:e===\"ref\"?n&&(n[t]=a):t!=null&&a.setAttribute(e,t)}),t&&t.appendChild(a),a},t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName(\"head\")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||i,e):document.createElement(e)},t.removeChildren=function(e){e.innerHTML=\"\"},t.createTextNode=function(e,t){var n=t?t.ownerDocument:document;return n.createTextNode(e)},t.createFragment=function(e){var t=e?e.ownerDocument:document;return t.createDocumentFragment()},t.hasCssClass=function(e,t){var n=(e.className+\"\").split(/\\s+/g);return n.indexOf(t)!==-1},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=\" \"+n)},t.removeCssClass=function(e,t){var n=e.className.split(/\\s+/g);for(;;){var r=n.indexOf(t);if(r==-1)break;n.splice(r,1)}e.className=n.join(\" \")},t.toggleCssClass=function(e,t){var n=e.className.split(/\\s+/g),r=!0;for(;;){var i=n.indexOf(t);if(i==-1)break;r=!1,n.splice(i,1)}return r&&n.push(t),e.className=n.join(\" \"),r},t.setCssClass=function(e,n,r){r?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n=0,r;t=t||document;if(r=t.querySelectorAll(\"style\"))while(n<r.length)if(r[n++].id===e)return!0},t.importCssString=function(n,r,i){var s=i;if(!i||!i.getRootNode)s=document;else{s=i.getRootNode();if(!s||s==i)s=document}var o=s.ownerDocument||s;if(r&&t.hasCssString(r,s))return null;r&&(n+=\"\\n/*# sourceURL=ace/css/\"+r+\" */\");var u=t.createElement(\"style\");u.appendChild(o.createTextNode(n)),r&&(u.id=r),s==o&&(s=t.getDocumentHead(o)),s.insertBefore(u,s.firstChild)},t.importCssStylsheet=function(e,n){t.buildDom([\"link\",{rel:\"stylesheet\",href:e}],t.getDocumentHead(n))},t.scrollbarWidth=function(e){var n=t.createElement(\"ace_inner\");n.style.width=\"100%\",n.style.minWidth=\"0px\",n.style.height=\"200px\",n.style.display=\"block\";var r=t.createElement(\"ace_outer\"),i=r.style;i.position=\"absolute\",i.left=\"-10000px\",i.overflow=\"hidden\",i.width=\"200px\",i.minWidth=\"0px\",i.height=\"150px\",i.display=\"block\",r.appendChild(n);var s=e.documentElement;s.appendChild(r);var o=n.offsetWidth;i.overflow=\"scroll\";var u=n.offsetWidth;return o==u&&(u=r.clientWidth),s.removeChild(r),o-u},typeof document==\"undefined\"&&(t.importCssString=function(){}),t.computedStyle=function(e,t){return window.getComputedStyle(e,\"\")||{}},t.setStyle=function(e,t,n){e[t]!==n&&(e[t]=n)},t.HAS_CSS_ANIMATION=!1,t.HAS_CSS_TRANSFORMS=!1,t.HI_DPI=r.isWin?typeof window!=\"undefined\"&&window.devicePixelRatio>=1.5:!0;if(typeof document!=\"undefined\"){var s=document.createElement(\"div\");t.HI_DPI&&s.style.transform!==undefined&&(t.HAS_CSS_TRANSFORMS=!0),!r.isEdge&&typeof s.style.animationName!=\"undefined\"&&(t.HAS_CSS_ANIMATION=!0),s=null}t.HAS_CSS_TRANSFORMS?t.translate=function(e,t,n){e.style.transform=\"translate(\"+Math.round(t)+\"px, \"+Math.round(n)+\"px)\"}:t.translate=function(e,t,n){e.style.top=Math.round(n)+\"px\",e.style.left=Math.round(t)+\"px\"}}),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./oop\"),i=function(){var e={MODIFIER_KEYS:{16:\"Shift\",17:\"Ctrl\",18:\"Alt\",224:\"Meta\"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,\"super\":8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",\"-13\":\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:\" \",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",59:\";\",61:\"=\",65:\"a\",66:\"b\",67:\"c\",68:\"d\",69:\"e\",70:\"f\",71:\"g\",72:\"h\",73:\"i\",74:\"j\",75:\"k\",76:\"l\",77:\"m\",78:\"n\",79:\"o\",80:\"p\",81:\"q\",82:\"r\",83:\"s\",84:\"t\",85:\"u\",86:\"v\",87:\"w\",88:\"x\",89:\"y\",90:\"z\",107:\"+\",109:\"-\",110:\".\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",111:\"/\",106:\"*\"}},t,n;for(n in e.FUNCTION_KEYS)t=e.FUNCTION_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);for(n in e.PRINTABLE_KEYS)t=e.PRINTABLE_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);return r.mixin(e,e.MODIFIER_KEYS),r.mixin(e,e.PRINTABLE_KEYS),r.mixin(e,e.FUNCTION_KEYS),e.enter=e[\"return\"],e.escape=e.esc,e.del=e[\"delete\"],e[173]=\"-\",function(){var t=[\"cmd\",\"ctrl\",\"alt\",\"shift\"];for(var n=Math.pow(2,t.length);n--;)e.KEY_MODS[n]=t.filter(function(t){return n&e.KEY_MODS[t]}).join(\"-\")+\"-\"}(),e.KEY_MODS[0]=\"\",e.KEY_MODS[-1]=\"input-\",e}();r.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return typeof t!=\"string\"&&(t=String.fromCharCode(e)),t.toLowerCase()}}),ace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function a(e,t,n){var a=u(t);if(!i.isMac&&s){t.getModifierState&&(t.getModifierState(\"OS\")||t.getModifierState(\"Win\"))&&(a|=8);if(s.altGr){if((3&a)==3)return;s.altGr=0}if(n===18||n===17){var f=\"location\"in t?t.location:t.keyLocation;if(n===17&&f===1)s[n]==1&&(o=t.timeStamp);else if(n===18&&a===3&&f===2){var l=t.timeStamp-o;l<50&&(s.altGr=!0)}}}n in r.MODIFIER_KEYS&&(n=-1),a&8&&n>=91&&n<=93&&(n=-1);if(!a&&n===13){var f=\"location\"in t?t.location:t.keyLocation;if(f===3){e(t,a,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&a&8){e(t,a,n);if(t.defaultPrevented)return;a&=-9}return!!a||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,a,n):!1}function f(){s=Object.create(null)}var r=e(\"./keys\"),i=e(\"./useragent\"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent(\"on\"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent(\"on\"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type==\"dblclick\"?0:e.type==\"contextmenu\"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,\"mousemove\",n,!0),t.removeListener(document,\"mouseup\",i,!0),t.removeListener(document,\"dragstart\",i,!0)}return t.addListener(document,\"mousemove\",n,!0),t.addListener(document,\"mouseup\",i,!0),t.addListener(document,\"dragstart\",i,!0),i},t.addTouchMoveListener=function(e,n){var r,i;t.addListener(e,\"touchstart\",function(e){var t=e.touches,n=t[0];r=n.clientX,i=n.clientY}),t.addListener(e,\"touchmove\",function(e){var t=e.touches;if(t.length>1)return;var s=t[0];e.wheelX=r-s.clientX,e.wheelY=i-s.clientY,r=s.clientX,i=s.clientY,n(e)})},t.addMouseWheelListener=function(e,n){\"onmousewheel\"in e?t.addListener(e,\"mousewheel\",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):\"onwheel\"in e?t.addListener(e,\"wheel\",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,\"DOMMouseScroll\",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){function c(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s](\"mousedown\",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}function h(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s](\"mousedown\",e),r[s](l[o],e)}var o=0,u,a,f,l={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};Array.isArray(e)||(e=[e]),e.forEach(function(e){t.addListener(e,\"mousedown\",c),i.isOldIE&&t.addListener(e,\"dblclick\",h)})};var u=!i.isMac||!i.isOpera||\"KeyboardEvent\"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[u(e)]},t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!(\"KeyboardEvent\"in window)){var o=null;r(e,\"keydown\",function(e){o=e.keyCode}),r(e,\"keypress\",function(e){return a(n,e,o)})}else{var u=null;r(e,\"keydown\",function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=a(n,e,e.keyCode);return u=e.defaultPrevented,t}),r(e,\"keypress\",function(e){u&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),u=null)}),r(e,\"keyup\",function(e){s[e.keyCode]=null}),s||(f(),r(window,\"focus\",f))}};if(typeof window==\"object\"&&window.postMessage&&!i.isOldIE){var l=1;t.nextTick=function(e,n){n=n||window;var r=\"zero-timeout-message-\"+l++,i=function(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,\"message\",i),e())};t.addListener(n,\"message\",i),n.postMessage(r,\"*\")}}t.$idleBlocked=!1,t.onIdle=function(e,n){return setTimeout(function r(){t.$idleBlocked?setTimeout(r,100):e()},n)},t.$idleBlockId=null,t.blockIdle=function(e){t.$idleBlockId&&clearTimeout(t.$idleBlockId),t.$idleBlocked=!0,t.$idleBlockId=setTimeout(function(){t.$idleBlocked=!1},e||100)},t.nextFrame=typeof window==\"object\"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"../lib/dom\"),o=e(\"../lib/lang\"),u=i.isChrome<18,a=i.isIE,f=i.isChrome>63,l=400,c=e(\"../lib/keys\"),h=c.KEY_MODS,p=i.isIOS,d=p?/\\s/:/\\n/,v=function(e,t){function W(){x=!0,n.blur(),n.focus(),x=!1}function V(e){e.keyCode==27&&n.value.length<n.selectionStart&&(g||(T=n.value),N=C=-1,A()),X()}function J(){clearTimeout($),$=setTimeout(function(){b&&(n.style.cssText=b,b=\"\"),t.renderer.$keepTextAreaAtCursor==null&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())},0)}function Q(e,t,n){var r=null,i=!1;n.addEventListener(\"keydown\",function(e){r&&clearTimeout(r),i=!0},!0),n.addEventListener(\"keyup\",function(e){r=setTimeout(function(){i=!1},100)},!0);var s=function(e){if(document.activeElement!==n)return;if(i||g)return;if(v)return;var r=n.selectionStart,s=n.selectionEnd,o=null,u=0;console.log(r,s);if(r==0)o=c.up;else if(r==1)o=c.home;else if(s>C&&T[s]==\"\\n\")o=c.end;else if(r<N&&T[r-1]==\" \")o=c.left,u=h.option;else if(r<N||r==N&&C!=N&&r==s)o=c.left;else if(s>C&&T.slice(0,s).split(\"\\n\").length>2)o=c.down;else if(s>C&&T[s-1]==\" \")o=c.right,u=h.option;else if(s>C||s==C&&C!=N&&r==s)o=c.right;r!==s&&(u|=h.shift),o&&(t.onCommandKey(null,u,o),N=r,C=s,A(\"\"))};document.addEventListener(\"selectionchange\",s),t.on(\"destroy\",function(){document.removeEventListener(\"selectionchange\",s)})}var n=s.createElement(\"textarea\");n.className=\"ace_text-input\",n.setAttribute(\"wrap\",\"off\"),n.setAttribute(\"autocorrect\",\"off\"),n.setAttribute(\"autocapitalize\",\"off\"),n.setAttribute(\"spellcheck\",!1),n.style.opacity=\"0\",e.insertBefore(n,e.firstChild);var v=!1,m=!1,g=!1,y=!1,b=\"\",w=!0,E=!1;i.isMobile||(n.style.fontSize=\"1px\");var S=!1,x=!1,T=\"\",N=0,C=0;try{var k=document.activeElement===n}catch(L){}r.addListener(n,\"blur\",function(e){if(x)return;t.onBlur(e),k=!1}),r.addListener(n,\"focus\",function(e){if(x)return;k=!0;if(i.isEdge)try{if(!document.hasFocus())return}catch(e){}t.onFocus(e),i.isEdge?setTimeout(A):A()}),this.$focusScroll=!1,this.focus=function(){if(b||f||this.$focusScroll==\"browser\")return n.focus({preventScroll:!0});var e=n.style.top;n.style.position=\"fixed\",n.style.top=\"0px\";try{var t=n.getBoundingClientRect().top!=0}catch(r){return}var i=[];if(t){var s=n.parentElement;while(s&&s.nodeType==1)i.push(s),s.setAttribute(\"ace_nocontext\",!0),!s.parentElement&&s.getRootNode?s=s.getRootNode().host:s=s.parentElement}n.focus({preventScroll:!0}),t&&i.forEach(function(e){e.removeAttribute(\"ace_nocontext\")}),setTimeout(function(){n.style.position=\"\",n.style.top==\"0px\"&&(n.style.top=e)},0)},this.blur=function(){n.blur()},this.isFocused=function(){return k},t.on(\"beforeEndOperation\",function(){if(t.curOp&&t.curOp.command.name==\"insertstring\")return;g&&(T=n.value=\"\",z()),A()});var A=p?function(e){if(!k||v&&!e)return;e||(e=\"\");var r=\"\\n ab\"+e+\"cde fg\\n\";r!=n.value&&(n.value=T=r);var i=4,s=4+(e.length||(t.selection.isEmpty()?0:1));(N!=i||C!=s)&&n.setSelectionRange(i,s),N=i,C=s}:function(){if(g||y)return;if(!k&&!D)return;g=!0;var e=t.selection,r=e.getRange(),i=e.cursor.row,s=r.start.column,o=r.end.column,u=t.session.getLine(i);if(r.start.row!=i){var a=t.session.getLine(i-1);s=r.start.row<i-1?0:s,o+=a.length+1,u=a+\"\\n\"+u}else if(r.end.row!=i){var f=t.session.getLine(i+1);o=r.end.row>i+1?f.length:o,o+=u.length+1,u=u+\"\\n\"+f}u.length>l&&(s<l&&o<l?u=u.slice(0,l):(u=\"\\n\",s=0,o=1));var c=u+\"\\n\\n\";c!=T&&(n.value=T=c,N=C=c.length),D&&(N=n.selectionStart,C=n.selectionEnd);if(C!=o||N!=s||n.selectionEnd!=C)try{n.setSelectionRange(s,o),N=s,C=o}catch(h){}g=!1};k&&t.onFocus();var O=function(e){return e.selectionStart===0&&e.selectionEnd>=T.length&&e.value===T&&T&&e.selectionEnd!==C},M=function(e){if(g)return;v?v=!1:O(n)&&(t.selectAll(),A())},_=null;this.setInputHandler=function(e){_=e},this.getInputHandler=function(){return _};var D=!1,P=function(e,r){D&&(D=!1);if(m)return A(),e&&t.onPaste(e),m=!1,\"\";var i=n.selectionStart,s=n.selectionEnd,o=N,u=T.length-C,a=e,f=e.length-i,l=e.length-s,c=0;while(o>0&&T[c]==e[c])c++,o--;a=a.slice(c),c=1;while(u>0&&T.length-c>N-1&&T[T.length-c]==e[e.length-c])c++,u--;return f-=c-1,l-=c-1,a=a.slice(0,a.length-c+1),!r&&f==a.length&&!o&&!u&&!l?\"\":(y=!0,a&&!o&&!u&&!f&&!l||S?t.onTextInput(a):t.onTextInput(a,{extendLeft:o,extendRight:u,restoreStart:f,restoreEnd:l}),y=!1,T=e,N=i,C=s,a)},H=function(e){if(g)return U();var t=n.value,r=P(t,!0);(t.length>l+100||d.test(r))&&A()},B=function(e,t,n){var r=e.clipboardData||window.clipboardData;if(!r||u)return;var i=a||n?\"Text\":\"text/plain\";try{return t?r.setData(i,t)!==!1:r.getData(i)}catch(e){if(!n)return B(e,t,!0)}},j=function(e,i){var s=t.getCopyText();if(!s)return r.preventDefault(e);B(e,s)?(p&&(A(s),v=s,setTimeout(function(){v=!1},10)),i?t.onCut():t.onCopy(),r.preventDefault(e)):(v=!0,n.value=s,n.select(),setTimeout(function(){v=!1,A(),i?t.onCut():t.onCopy()}))},F=function(e){j(e,!0)},I=function(e){j(e,!1)},q=function(e){var s=B(e);typeof s==\"string\"?(s&&t.onPaste(s,e),i.isIE&&setTimeout(A),r.preventDefault(e)):(n.value=\"\",m=!0)};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,\"select\",M),r.addListener(n,\"input\",H),r.addListener(n,\"cut\",F),r.addListener(n,\"copy\",I),r.addListener(n,\"paste\",q),(!(\"oncut\"in n)||!(\"oncopy\"in n)||!(\"onpaste\"in n))&&r.addListener(e,\"keydown\",function(e){if(i.isMac&&!e.metaKey||!e.ctrlKey)return;switch(e.keyCode){case 67:I(e);break;case 86:q(e);break;case 88:F(e)}});var R=function(e){if(g||!t.onCompositionStart||t.$readOnly)return;g={};if(S)return;setTimeout(U,0),t.on(\"mousedown\",W);var r=t.getSelectionRange();r.end.row=r.start.row,r.end.column=r.start.column,g.markerRange=r,g.selectionStart=N,t.onCompositionStart(g),g.useTextareaForIME?(n.value=\"\",T=\"\",N=0,C=0):(n.msGetInputContext&&(g.context=n.msGetInputContext()),n.getInputContext&&(g.context=n.getInputContext()))},U=function(){if(!g||!t.onCompositionUpdate||t.$readOnly)return;if(S)return W();if(g.useTextareaForIME)t.onCompositionUpdate(n.value);else{var e=n.value;P(e),g.markerRange&&(g.context&&(g.markerRange.start.column=g.selectionStart=g.context.compositionStartOffset),g.markerRange.end.column=g.markerRange.start.column+C-g.selectionStart)}},z=function(e){if(!t.onCompositionEnd||t.$readOnly)return;g=!1,t.onCompositionEnd(),t.off(\"mousedown\",W),e&&H()},X=o.delayedCall(U,50).schedule.bind(null,null);r.addListener(n,\"compositionstart\",R),r.addListener(n,\"compositionupdate\",U),r.addListener(n,\"keyup\",V),r.addListener(n,\"keydown\",X),r.addListener(n,\"compositionend\",z),this.getElement=function(){return n},this.setCommandMode=function(e){S=e,n.readOnly=!1},this.setReadOnly=function(e){S||(n.readOnly=e)},this.setCopyWithEmptySelection=function(e){E=e},this.onContextMenu=function(e){D=!0,A(),t._emit(\"nativecontextmenu\",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){b||(b=n.style.cssText),n.style.cssText=(o?\"z-index:100000;\":\"\")+(i.isIE?\"opacity:0.1;\":\"\")+\"text-indent: -\"+(N+C)*t.renderer.characterWidth*.5+\"px;\";var u=t.container.getBoundingClientRect(),a=s.computedStyle(t.container),f=u.top+(parseInt(a.borderTopWidth)||0),l=u.left+(parseInt(u.borderLeftWidth)||0),c=u.bottom-f-n.clientHeight-2,h=function(e){n.style.left=e.clientX-l-2+\"px\",n.style.top=Math.min(e.clientY-f-2,c)+\"px\"};h(e);if(e.type!=\"mousedown\")return;t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout($),i.isWin&&r.capture(t.container,h,J)},this.onContextMenuClose=J;var $,K=function(e){t.textInput.onContextMenu(e),J()};r.addListener(n,\"mouseup\",K),r.addListener(n,\"mousedown\",function(e){e.preventDefault(),J()}),r.addListener(t.renderer.scroller,\"contextmenu\",K),r.addListener(n,\"contextmenu\",K),p&&Q(e,t,n)};t.TextInput=v}),ace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(e)),t.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(e)),t.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(e)),t.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(e)),t.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(e)),t.setDefaultHandler(\"touchmove\",this.onTouchMove.bind(e));var n=[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"];n.forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,\"getLineRange\"),e.selectByWords=this.extendSelectionBy.bind(e,\"getWordRange\")}function u(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}function a(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row==e.end.row-1&&!e.start.column&&!e.end.column)var n=t.column-4;else var n=2*t.row-e.start.row-e.end.row;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}var r=e(\"../lib/useragent\"),i=0,s=550;(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var i=this.editor,s=e.getButton();if(s!==0){var o=i.getSelectionRange(),u=o.isEmpty();(u||s==1)&&i.selection.moveToPosition(n),s==2&&(i.textInput.onContextMenu(e.domEvent),r.isMozilla||e.preventDefault());return}this.mousedownEvent.time=Date.now();if(t&&!i.isFocused()){i.focus();if(this.$focusTimeout&&!this.$clickSelection&&!i.inMultiSelectMode){this.setState(\"focusWait\"),this.captureMouse(e);return}}return this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;if(!this.mousedownEvent)return;this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle(\"ace_selecting\"),this.setState(\"select\")},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=a(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=a(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle(\"ace_selecting\"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>i||t-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState(\"select\")):(i=n.selection.getWordRange(t.row,t.column),this.setState(\"selectByWords\")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState(\"selectByLines\");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState(\"selectAll\")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,r=e.domEvent.timeStamp,i=r-n.t,o=i?e.wheelX/i:n.vx,u=i?e.wheelY/i:n.vy;i<s&&(o=(o+n.vx)/2,u=(u+n.vy)/2);var a=Math.abs(o/u),f=!1;a>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(f=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(f=!0);if(f)n.allowed=r;else if(r-n.allowed<s){var l=Math.abs(o)<=1.5*Math.abs(n.vx)&&Math.abs(u)<=1.5*Math.abs(n.vy);l?(f=!0,n.allowed=r):n.allowed=0}n.t=r,n.vx=o,n.vy=u;if(f)return t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()},this.onTouchMove=function(e){this.editor._emit(\"mousewheel\",e)}}).call(o.prototype),t.DefaultHandlers=o}),ace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\");(function(){this.$init=function(){return this.$element=i.createElement(\"div\"),this.$element.className=\"ace_tooltip\",this.$element.style.display=\"none\",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){this.getElement().textContent=e},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+\"px\",this.getElement().style.top=t+\"px\"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){e!=null&&this.setText(e),t!=null&&n!=null&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display=\"block\",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display=\"none\",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(s.prototype),t.Tooltip=s}),ace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],function(e,t,n){\"use strict\";function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annotations[r];if(!s)return c();var o=t.session.getLength();if(r==o){var a=t.renderer.pixelToScreenCoordinates(0,u.y).row,l=u.$pos;if(a>t.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join(\"<br/>\"),i.setHtml(f),i.show(),t._signal(\"showGutterTooltip\",i),t.on(\"mousewheel\",c);if(e.$tooltipFollowsMouse)h(u);else{var p=u.domEvent.target,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+\"px\",v.top=d.bottom+\"px\"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t._signal(\"hideGutterTooltip\",i),t.removeEventListener(\"mousewheel\",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler(\"guttermousedown\",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i==\"foldWidgets\")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState(\"selectByLines\"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler(\"guttermousemove\",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,\"ace_fold-widget\"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,\"mouseout\",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on(\"changeSession\",c)}function a(e){o.call(this,e)}var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/event\"),o=e(\"../tooltip\").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),ace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),ace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.moveCursorToPosition(e),S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left<a.x.right?-3:2),l/i<=1&&(c.row+=a.y.top<a.y.bottom?-1:1);var h=e.row!=c.row,v=e.column!=c.column,m=!n||e.row!=n.row;h||v&&!m?E?r-E>=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,\"ace_selection\",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,\"mousemove\",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.selection.fromOrientedRange(m),t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,\"mousemove\",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e==\"text/plain\"||e==\"Text\"})}function _(e){var t=[\"copy\",\"copymove\",\"all\",\"uninitialized\"],n=[\"move\",\"copymove\",\"linkmove\",\"all\",\"uninitialized\"],r=s.isMac?e.altKey:e.ctrlKey,i=\"uninitialized\";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o=\"none\";return r&&t.indexOf(i)>=0?o=\"copy\":n.indexOf(i)>=0?o=\"move\":t.indexOf(i)>=0&&(o=\"copy\"),o}var t=e.editor,n=r.createElement(\"img\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",s.isOpera&&(n.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\");var f=[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener(\"mousedown\",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?\"copy\":\"copyMove\",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData(\"Text\",t.session.getTextRange()),w=!0,this.setState(\"drag\")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n==\"move\"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case\"move\":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case\"copy\":m=t.moveText(m,g,!0)}else{var r=n.getData(\"Text\");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,\"dragstart\",this.onDragStart.bind(e)),i.addListener(c,\"dragend\",this.onDragEnd.bind(e)),i.addListener(c,\"dragenter\",this.onDragEnter.bind(e)),i.addListener(c,\"dragover\",this.onDragOver.bind(e)),i.addListener(c,\"dragleave\",this.onDragLeave.bind(e)),i.addListener(c,\"drop\",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e(\"../lib/dom\"),i=e(\"../lib/event\"),s=e(\"../lib/useragent\"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle(\"ace_dragging\");var n=s.isWin?\"default\":\"move\";e.renderer.setCursorStyle(n),this.setState(\"dragReady\")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state==\"dragReady\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state===\"dragWait\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;\"unselectable\"in o&&(o.unselectable=\"on\");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState(\"dragWait\")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),ace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"./dom\");t.get=function(e,t){var n=new XMLHttpRequest;n.open(\"GET\",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement(\"script\");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState==\"loaded\"||i.readyState==\"complete\")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement(\"a\");return t.href=e,t.href}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"no use strict\";function o(e){typeof console!=\"undefined\"&&console.warn&&console.warn.apply(console,arguments)}function u(e,t){var n=new Error(e);n.data=t,typeof console==\"object\"&&console.error&&console.error(n),setTimeout(function(){throw n})}var r=e(\"./oop\"),i=e(\"./event_emitter\").EventEmitter,s={setOptions:function(e){Object.keys(e).forEach(function(t){this.setOption(t,e[t])},this)},getOptions:function(e){var t={};if(!e){var n=this.$options;e=Object.keys(n).filter(function(e){return!n[e].hidden})}else Array.isArray(e)||(t=e,e=Object.keys(t));return e.forEach(function(e){t[e]=this.getOption(e)},this),t},setOption:function(e,t){if(this[\"$\"+e]===t)return;var n=this.$options[e];if(!n)return o('misspelled option \"'+e+'\"');if(n.forwardTo)return this[n.forwardTo]&&this[n.forwardTo].setOption(e,t);n.handlesSet||(this[\"$\"+e]=t),n&&n.set&&n.set.call(this,t)},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this[\"$\"+e]:o('misspelled option \"'+e+'\"')}},a=function(){this.$defaultOptions={}};(function(){r.implement(this,i),this.defineOptions=function(e,t,n){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(n).forEach(function(t){var r=n[t];typeof r==\"string\"&&(r={forwardTo:r}),r.name||(r.name=t),e.$options[r.name]=r,\"initialValue\"in r&&(e[\"$\"+r.name]=r.initialValue)}),r.implement(e,s),this},this.resetOptions=function(e){Object.keys(e.$options).forEach(function(t){var n=e.$options[t];\"value\"in n&&e.setOption(t,n.value)})},this.setDefaultValue=function(e,t,n){var r=this.$defaultOptions[e]||(this.$defaultOptions[e]={});r[t]&&(r.forwardTo?this.setDefaultValue(r.forwardTo,t,n):r[t].value=n)},this.setDefaultValues=function(e,t){Object.keys(t).forEach(function(n){this.setDefaultValue(e,n,t[n])},this)},this.warn=o,this.reportError=u}).call(a.prototype),t.AppConfig=a}),ace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"],function(e,t,n){\"no use strict\";function l(r){if(!u||!u.document)return;a.packaged=r||e.packaged||n.packaged||u.define&&define.packaged;var i={},s=\"\",o=document.currentScript||document._currentScript,f=o&&o.ownerDocument||document,l=f.getElementsByTagName(\"script\");for(var h=0;h<l.length;h++){var p=l[h],d=p.src||p.getAttribute(\"src\");if(!d)continue;var v=p.attributes;for(var m=0,g=v.length;m<g;m++){var y=v[m];y.name.indexOf(\"data-ace-\")===0&&(i[c(y.name.replace(/^data-ace-/,\"\"))]=y.value)}var b=d.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);b&&(s=b[1])}s&&(i.base=i.base||s,i.packaged=!0),i.basePath=i.base,i.workerPath=i.workerPath||i.base,i.modePath=i.modePath||i.base,i.themePath=i.themePath||i.base,delete i.base;for(var w in i)typeof i[w]!=\"undefined\"&&t.set(w,i[w])}function c(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCase()})}var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./lib/net\"),o=e(\"./lib/app_config\").AppConfig;n.exports=t=new o;var u=function(){return this||typeof window!=\"undefined\"&&window}(),a={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:\"\",suffix:\".js\",$moduleUrls:{},loadWorkerFromBlob:!0};t.get=function(e){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);return a[e]},t.set=function(e,t){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);a[e]=t},t.all=function(){return r.copyObject(a)},t.$modes={},t.moduleUrl=function(e,t){if(a.$moduleUrls[e])return a.$moduleUrls[e];var n=e.split(\"/\");t=t||n[n.length-2]||\"\";var r=t==\"snippets\"?\"/\":\"-\",i=n[n.length-1];if(t==\"worker\"&&r==\"-\"){var s=new RegExp(\"^\"+t+\"[\\\\-_]|[\\\\-_]\"+t+\"$\",\"g\");i=i.replace(s,\"\")}(!i||i==t)&&n.length>1&&(i=n[n.length-2]);var o=a[t+\"Path\"];return o==null?o=a.basePath:r==\"/\"&&(t=r=\"\"),o&&o.slice(-1)!=\"/\"&&(o+=\"/\"),o+t+r+i+this.get(\"suffix\")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit(\"load.module\",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get(\"packaged\"))return a();s.loadScript(t.moduleUrl(n,o),a),f()};var f=function(){!a.basePath&&!a.workerPath&&!a.modePath&&!a.themePath&&!Object.keys(a.$moduleUrls).length&&(console.error(\"Unable to infer path to ace from script src,\",\"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\"or with webpack use ace/webpack-resolver\"),f=function(){})};t.init=l}),ace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"./default_handlers\").DefaultHandlers,o=e(\"./default_gutter_handler\").GutterHandler,u=e(\"./mouse_event\").MouseEvent,a=e(\"./dragdrop_handler\").DragdropHandler,f=e(\"../config\"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,\"click\",this.onMouseEvent.bind(this,\"click\")),r.addListener(u,\"mousemove\",this.onMouseMove.bind(this,\"mousemove\")),r.addMultiMouseDownListener([u,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,\"onMouseEvent\"),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,\"mousewheel\")),r.addTouchMoveListener(e.container,this.onTouchMove.bind(this,\"touchmove\"));var f=e.renderer.$gutter;r.addListener(f,\"mousedown\",this.onMouseEvent.bind(this,\"guttermousedown\")),r.addListener(f,\"click\",this.onMouseEvent.bind(this,\"gutterclick\")),r.addListener(f,\"dblclick\",this.onMouseEvent.bind(this,\"gutterdblclick\")),r.addListener(f,\"mousemove\",this.onMouseEvent.bind(this,\"guttermousemove\")),r.addListener(u,\"mousedown\",n),r.addListener(f,\"mousedown\",n),i.isIE&&e.renderer.scrollBarV&&(r.addListener(e.renderer.scrollBarV.element,\"mousedown\",n),r.addListener(e.renderer.scrollBarH.element,\"mousedown\",n)),e.on(\"mousemove\",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle(\"default\"):s.setCursorStyle(\"\")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new u(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor,s=this.editor.renderer;s.$keepTextAreaAtCursor&&(s.$keepTextAreaAtCursor=null);var o=this,a=function(e){if(!e)return;if(i.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new u(e,o.editor),o.$mouseMoved=!0},f=function(e){n.off(\"beforeEndOperation\",c),clearInterval(h),l(),o[o.state+\"End\"]&&o[o.state+\"End\"](e),o.state=\"\",s.$keepTextAreaAtCursor==null&&(s.$keepTextAreaAtCursor=!0,s.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent(\"mouseup\",e),n.endOperation()},l=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type==\"dblclick\")return setTimeout(function(){f(e)});var c=function(e){if(!o.releaseMouse)return;n.curOp.command.name&&n.curOp.selectionChanged&&(o[o.state+\"End\"]&&o[o.state+\"End\"](),o.state=\"\",o.releaseMouse())};n.on(\"beforeEndOperation\",c),n.startOperation({command:{name:\"mouse\"}}),o.$onCaptureMouseMove=a,o.releaseMouse=r.capture(this.editor.container,a,f);var h=setInterval(l,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!=\"contextmenu\")return;this.editor.off(\"nativecontextmenu\",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on(\"nativecontextmenu\",e)}}).call(l.prototype),f.defineOptions(l.prototype,\"mouseHandler\",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimeout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),ace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function i(e){e.on(\"click\",function(t){var n=t.getDocumentPosition(),i=e.session,s=i.getFoldAt(n.row,n.column,1);s&&(t.getAccelKey()?i.removeFold(s):i.expandFold(s),t.stop());var o=t.domEvent&&t.domEvent.target;o&&r.hasCssClass(o,\"ace_inline_button\")&&r.hasCssClass(o,\"ace_toggle_wrap\")&&(i.setOption(\"wrap\",!0),e.renderer.scrollCursorIntoView())}),e.on(\"gutterclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on(\"gutterdblclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold(\"...\",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}var r=e(\"../lib/dom\");t.FoldHandler=i}),ace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"../lib/keys\"),i=e(\"../lib/event\"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e==\"function\"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||\"\"}).filter(Boolean).join(\" \")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command==\"null\"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return!o&&e==-1&&(s={command:\"insertstring\"},o=u.exec(\"insertstring\",this.$editor,t)),o&&this.$editor._signal&&this.$editor._signal(\"keyboardActivity\",s),o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(s.prototype),t.KeyBinding=s}),ace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function F(e,t,n,r){var i=s?d:p,c=null,h=null,v=null,m=0,g=null,y=null,b=-1,w=null,E=null,T=[];if(!r)for(w=0,r=[];w<n;w++)r[w]=R(e[w]);o=s,u=!1,a=!1,f=!1,l=!1;for(E=0;E<n;E++){c=m,T[E]=h=q(e,r,T,E),m=i[c][h],g=m&240,m&=15,t[E]=v=i[m][5];if(g>0)if(g==16){for(w=b;w<E;w++)t[w]=1;b=-1}else b=-1;y=i[m][6];if(y)b==-1&&(b=E);else if(b>-1){for(w=b;w<E;w++)t[w]=v;b=-1}r[E]==S&&(t[E]=0),o|=v}if(l)for(w=0;w<n;w++)if(r[w]==x){t[w]=s;for(var C=w-1;C>=0;C--){if(r[C]!=N)break;t[C]=s}}}function I(e,t,n){if(o<e)return;if(e==1&&s==m&&!f){n.reverse();return}var r=n.length,i=0,u,a,l,c;while(i<r){if(t[i]>=e){u=i+1;while(u<r&&t[u]>=e)u++;for(a=i,l=u-1;a<l;a++,l--)c=n[a],n[a]=n[l],n[l]=c;i=u}i++}}function q(e,t,n,r){var i=t[r],o,c,h,p;switch(i){case g:case y:u=!1;case E:case w:return i;case b:return u?w:b;case T:return u=!0,a=!0,y;case N:return E;case C:if(r<1||r+1>=t.length||(o=n[r-1])!=b&&o!=w||(c=t[r+1])!=b&&c!=w)return E;return u&&(c=w),c==o?c:E;case k:o=r>0?n[r-1]:S;if(o==b&&r+1<t.length&&t[r+1]==b)return b;return E;case L:if(r>0&&n[r-1]==b)return b;if(u)return E;p=r+1,h=t.length;while(p<h&&t[p]==L)p++;if(p<h&&t[p]==b)return b;return E;case A:h=t.length,p=r+1;while(p<h&&t[p]==A)p++;if(p<h){var d=e[r],v=d>=1425&&d<=2303||d==64286;o=t[p];if(v&&(o==y||o==T))return y}if(r<1||(o=t[r-1])==S)return E;return n[r-1];case S:return u=!1,f=!0,s;case x:return l=!0,E;case O:case M:case D:case P:case _:u=!1;case H:return E}}function R(e){var t=e.charCodeAt(0),n=t>>8;return n==0?t>191?g:B[t]:n==5?/[\\u0591-\\u05f4]/.test(e)?y:g:n==6?/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(e)?A:/[\\u0660-\\u0669\\u066b-\\u066c]/.test(e)?w:t==1642?L:/[\\u06f0-\\u06f9]/.test(e)?b:T:n==32&&t<=8287?j[t&255]:n==254?t>=65136?T:E:E}function U(e){return e>=\"\\u064b\"&&e<=\"\\u0655\"}var r=[\"\\u0621\",\"\\u0641\"],i=[\"\\u063a\",\"\\u064a\"],s=0,o=0,u=!1,a=!1,f=!1,l=!1,c=!1,h=!1,p=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],d=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],v=0,m=1,g=0,y=1,b=2,w=3,E=4,S=5,x=6,T=7,N=8,C=9,k=10,L=11,A=12,O=13,M=14,_=15,D=16,P=17,H=18,B=[H,H,H,H,H,H,H,H,H,x,S,x,N,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,S,S,S,x,N,E,E,L,L,L,E,E,E,E,E,k,C,k,C,C,b,b,b,b,b,b,b,b,b,b,C,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,H,H,H,H,H,H,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,C,E,L,L,L,L,E,E,E,E,g,E,E,H,E,E,L,L,b,b,E,g,E,E,E,b,g,E,E,E,E,E],j=[N,N,N,N,N,N,N,N,N,N,N,H,H,H,g,y,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,N,S,O,M,_,D,P,C,L,L,L,L,L,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,C,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,N];t.L=g,t.R=y,t.EN=b,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.RLE=7,t.DOT=\"\\u00b7\",t.doBidiReorder=function(e,n,r){if(e.length<2)return{};var i=e.split(\"\"),o=new Array(i.length),u=new Array(i.length),a=[];s=r?m:v,F(i,a,i.length,n);for(var f=0;f<o.length;o[f]=f,f++);I(2,a,o),I(1,a,o);for(var f=0;f<o.length-1;f++)n[f]===w?a[f]=t.AN:a[f]===y&&(n[f]>T&&n[f]<O||n[f]===E||n[f]===H)?a[f]=t.ON_R:f>0&&i[f-1]===\"\\u0644\"&&/\\u0622|\\u0623|\\u0625|\\u0627/.test(i[f])&&(a[f-1]=a[f]=t.R_H,f++);i[i.length-1]===t.DOT&&(a[i.length-1]=t.B),i[0]===\"\\u202b\"&&(a[0]=t.RLE);for(var f=0;f<o.length;f++)u[f]=a[o[f]];return{logicalFromVisual:o,bidiLevels:u}},t.hasBidiCharacters=function(e,t){var n=!1;for(var r=0;r<e.length;r++)t[r]=R(e.charAt(r)),!n&&(t[r]==y||t[r]==T||t[r]==w)&&(n=!0);return n},t.getVisualFromLogicalIdx=function(e,t){for(var n=0;n<t.logicalFromVisual.length;n++)if(t.logicalFromVisual[n]==e)return n;return 0}}),ace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"./lib/bidiutil\"),i=e(\"./lib/lang\"),s=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/,o=function(e){this.session=e,this.bidiMap={},this.currentRow=null,this.bidiUtil=r,this.charWidths=[],this.EOL=\"\\u00ac\",this.showInvisibles=!0,this.isRtlDir=!1,this.$isRtl=!1,this.line=\"\",this.wrapIndent=0,this.EOF=\"\\u00b6\",this.RLE=\"\\u202b\",this.contentWidth=0,this.fontMetrics=null,this.rtlLineOffset=0,this.wrapOffset=0,this.isMoveLeftOperation=!1,this.seenBidi=s.test(e.getValue())};(function(){this.isBidiRow=function(e,t,n){return this.seenBidi?(e!==this.currentRow&&(this.currentRow=e,this.updateRowLine(t,n),this.updateBidiMap()),this.bidiMap.bidiLevels):!1},this.onChange=function(e){this.seenBidi?this.currentRow=null:e.action==\"insert\"&&s.test(e.lines.join(\"\\n\"))&&(this.seenBidi=!0,this.currentRow=null)},this.getDocumentRow=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n=this.session.$getRowCacheIndex(t,this.currentRow);n>=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n,r=this.session.$getRowCacheIndex(t,this.currentRow);while(this.currentRow-e>0){n=this.session.$getRowCacheIndex(t,this.currentRow-e-1);if(n!==r)break;r=n,e++}}else e=this.currentRow;return e},this.updateRowLine=function(e,t){e===undefined&&(e=this.getDocumentRow());var n=e===this.session.getLength()-1,s=n?this.EOF:this.EOL;this.wrapIndent=0,this.line=this.session.getLine(e),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE;if(this.session.$useWrapMode){var o=this.session.$wrapData[e];o&&(t===undefined&&(t=this.getSplitIndex()),t>0&&o.length?(this.wrapIndent=o.indent,this.wrapOffset=this.wrapIndent*this.charWidths[r.L],this.line=t<o.length?this.line.substring(o[t-1],o[t]):this.line.substring(o[o.length-1])):this.line=this.line.substring(0,o[t])),t==o.length&&(this.line+=this.showInvisibles?s:r.DOT)}else this.line+=this.showInvisibles?s:r.DOT;var u=this.session,a=0,f;this.line=this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g,function(e,t){return e===\"\t\"||u.isFullWidth(e.charCodeAt(0))?(f=e===\"\t\"?u.getScreenTabSize(t+a):2,a+=f-1,i.stringRepeat(r.DOT,f)):e}),this.isRtlDir&&(this.fontMetrics.$main.textContent=this.line.charAt(this.line.length-1)==r.DOT?this.line.substr(0,this.line.length-1):this.line,this.rtlLineOffset=this.contentWidth-this.fontMetrics.$main.getBoundingClientRect().width)},this.updateBidiMap=function(){var e=[];r.hasBidiCharacters(this.line,e)||this.isRtlDir?this.bidiMap=r.doBidiReorder(this.line,e,this.isRtlDir):this.bidiMap={}},this.markAsDirty=function(){this.currentRow=null},this.updateCharacterWidths=function(e){if(this.characterWidth===e.$characterSize.width)return;this.fontMetrics=e;var t=this.characterWidth=e.$characterSize.width,n=e.$measureCharWidth(\"\\u05d4\");this.charWidths[r.L]=this.charWidths[r.EN]=this.charWidths[r.ON_R]=t,this.charWidths[r.R]=this.charWidths[r.AN]=n,this.charWidths[r.R_H]=n*.45,this.charWidths[r.B]=this.charWidths[r.RLE]=0,this.currentRow=null},this.setShowInvisibles=function(e){this.showInvisibles=e,this.currentRow=null},this.setEolChar=function(e){this.EOL=e},this.setContentWidth=function(e){this.contentWidth=e},this.isRtlLine=function(e){return this.$isRtl?!0:e!=undefined?this.session.getLine(e).charAt(0)==this.RLE:this.isRtlDir},this.setRtlDirection=function(e,t){var n=e.getCursorPosition();for(var r=e.selection.getSelectionAnchor().row;r<=n.row;r++)!t&&e.session.getLine(r).charAt(0)===e.session.$bidiHandler.RLE?e.session.doc.removeInLine(r,0,1):t&&e.session.getLine(r).charAt(0)!==e.session.$bidiHandler.RLE&&e.session.doc.insert({column:0,row:r},e.session.$bidiHandler.RLE)},this.getPosLeft=function(e){e-=this.wrapIndent;var t=this.line.charAt(0)===this.RLE?1:0,n=e>t?this.session.getOverwrite()?e:e-1:t,i=r.getVisualFromLogicalIdx(n,this.bidiMap),s=this.bidiMap.bidiLevels,o=0;!this.session.getOverwrite()&&e<=t&&s[i]%2!==0&&i++;for(var u=0;u<i;u++)o+=this.charWidths[s[u]];return!this.session.getOverwrite()&&e>t&&s[i]%2===0&&(o+=this.charWidths[s[i]]),this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(o+=this.rtlLineOffset),o},this.getSelections=function(e,t){var n=this.bidiMap,r=n.bidiLevels,i,s=[],o=0,u=Math.min(e,t)-this.wrapIndent,a=Math.max(e,t)-this.wrapIndent,f=!1,l=!1,c=0;this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var h,p=0;p<r.length;p++)h=n.logicalFromVisual[p],i=r[p],f=h>=u&&h<a,f&&!l?c=o:!f&&l&&s.push({left:c,width:o-c}),o+=this.charWidths[i],l=f;f&&p===r.length&&s.push({left:c,width:o-c});if(this.isRtlDir)for(var d=0;d<s.length;d++)s[d].left+=this.rtlLineOffset;return s},this.offsetToCol=function(e){this.isRtlDir&&(e-=this.rtlLineOffset);var t=0,e=Math.max(e,0),n=0,r=0,i=this.bidiMap.bidiLevels,s=this.charWidths[i[r]];this.wrapIndent&&(e-=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);while(e>n+s/2){n+=s;if(r===i.length-1){s=0;break}s=this.charWidths[i[++r]]}return r>0&&i[r-1]%2!==0&&i[r]%2===0?(e<n&&r--,t=this.bidiMap.logicalFromVisual[r]):r>0&&i[r-1]%2===0&&i[r]%2!==0?t=1+(e>n?this.bidiMap.logicalFromVisual[r]:this.bidiMap.logicalFromVisual[r-1]):this.isRtlDir&&r===i.length-1&&s===0&&i[r-1]%2===0||!this.isRtlDir&&r===0&&i[r]%2!==0?t=1+this.bidiMap.logicalFromVisual[r]:(r>0&&i[r-1]%2!==0&&s!==0&&r--,t=this.bidiMap.logicalFromVisual[r]),t===0&&this.isRtlDir&&t++,t+this.wrapIndent}}).call(o.prototype),t.BidiHandler=o}),ace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var t=this;this.cursor.on(\"change\",function(e){t.$cursorChanged=!0,t.$silent||t._emit(\"changeCursor\"),!t.$isEmpty&&!t.$silent&&t._emit(\"changeSelection\"),!t.$keepDesiredColumnOnChange&&e.old.column!=e.value.column&&(t.$desiredColumn=null)}),this.anchor.on(\"change\",function(){t.$anchorChanged=!0,!t.$isEmpty&&!t.$silent&&t._emit(\"changeSelection\")})};(function(){r.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.$isEmpty=!1,this.anchor.setPosition(e,t)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit(\"changeSelection\"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var n=t?e.end:e.start,r=t?e.start:e.end;this.$setSelection(n.row,n.column,r.row,r.column)},this.$setSelection=function(e,t,n,r){var i=this.$isEmpty,s=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(n,r),this.$isEmpty=!o.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit(\"changeCursor\"),(this.$cursorChanged||this.$anchorChanged||i!=this.$isEmpty||s)&&this._emit(\"changeSelection\")},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t==\"undefined\"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e==\"number\"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var r=e.column,i=e.column+t;return n<0&&(r=e.column-t,i=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(r,i).split(\" \").length-1==t},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(e,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var n=this.session.getTabSize(),e=this.lead;this.wouldMoveIntoSoftTab(e,n,1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,n):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,n=this.session.documentToScreenRow(e,t),r=this.session.screenToDocumentPosition(n,0),i=this.session.getDisplayLine(e,null,r.row,r.column),s=i.match(/^\\s*/);s[0].length!=t&&!this.session.$useEmacsStyleLineStart&&(r.column+=s[0].length),this.moveCursorToPosition(r)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var n=this.session.getLine(t.row);if(t.column==n.length){var r=n.search(/\\s+$/);r>0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var i=this.session.getFoldAt(e,t,1);if(i){this.moveCursorTo(i.end.row,i.end.column);return}this.session.nonTokenRe.exec(r)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t));if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e<this.doc.getLength()-1&&this.moveCursorWordRight();return}this.session.tokenRe.exec(r)&&(t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)},this.moveCursorLongWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1)){this.moveCursorTo(n.start.row,n.start.column);return}var r=this.session.getFoldStringAt(e,t,-1);r==null&&(r=this.doc.getLine(e).substring(0,t));var s=i.stringReverse(r);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0,this.session.nonTokenRe.exec(s)&&(t-=this.session.nonTokenRe.lastIndex,s=s.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0);if(t<=0){this.moveCursorTo(e,0),this.moveCursorLeft(),e>0&&this.moveCursorWordLeft();return}this.session.tokenRe.exec(s)&&(t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t=0,n,r=/\\s/,i=this.session.tokenRe;i.lastIndex=0;if(this.session.tokenRe.exec(e))t=this.session.tokenRe.lastIndex;else{while((n=e[t])&&r.test(n))t++;if(t<1){i.lastIndex=0;while((n=e[t])&&!i.test(n)){i.lastIndex=0,t++;if(r.test(n)){if(t>2){t--;break}while((n=e[t])&&r.test(n))t++;if(t>2)break}}}}return i.lastIndex=0,t},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e<s&&/^\\s*$/.test(r));/^\\s+/.test(r)||(r=\"\"),t=0}var o=this.$shortWordEndIndex(r);this.moveCursorTo(e,t+o)},this.moveCursorShortWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1))return this.moveCursorTo(n.start.row,n.start.column);var r=this.session.getLine(e).substring(0,t);if(t===0){do e--,r=this.doc.getLine(e);while(e>0&&/^\\s*$/.test(r));t=r.length,/\\s+$/.test(r)||(r=\"\")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column),r;t===0&&(e!==0&&(this.session.$bidiHandler.isBidiRow(n.row,this.lead.row)?(r=this.session.$bidiHandler.getPosLeft(n.column),n.column=Math.round(r/this.session.$bidiHandler.charWidths[0])):r=n.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var i=this.session.screenToDocumentPosition(n.row+e,n.column,r);e!==0&&t===0&&i.row===this.lead.row&&i.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[i.row]&&(i.row>0||e>0)&&i.row++,this.moveCursorTo(i.row,i.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0;var i=this.session.getLine(e);/[\\uDC00-\\uDFFF]/.test(i.charAt(t))&&i.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),ace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"./config\"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:\"text\"},o=\"g\",u=[];for(var a=0;a<n.length;a++){var f=n[a];f.defaultToken&&(s.defaultToken=f.defaultToken),f.caseInsensitive&&(o=\"gi\");if(f.regex==null)continue;f.regex instanceof RegExp&&(f.regex=f.regex.toString().slice(1,-1));var l=f.regex,c=(new RegExp(\"(?:(\"+l+\")|(.))\")).exec(\"a\").length-2;Array.isArray(f.token)?f.token.length==1||c==1?f.token=f.token[0]:c-1!=f.token.length?(this.reportError(\"number of classes and regexp groups doesn't match\",{rule:f,groupCount:c-1}),f.token=f.token[0]):(f.tokenArray=f.token,f.token=null,f.onMatch=this.$arrayTokens):typeof f.token==\"function\"&&!f.onMatch&&(c>1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\\\\d/.test(f.regex)?l=f.regex.replace(/\\\\([0-9]+)/g,function(e,t){return\"\\\\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!=\"string\"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push(\"$\")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp(\"(\"+r.join(\")|(\")+\")|($)\",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n==\"string\")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;i<s;i++)t[i]&&(r[r.length]={type:n[i],value:t[i]});return r},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return\"text\";var n=[],r=this.tokenArray;for(var i=0,s=r.length;i<s;i++)t[i+1]&&(n[n.length]={type:r[i],value:t[i+1]});return n},this.removeCapturingGroups=function(e){var t=e.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!]|(\\()/g,function(e,t){return t?\"(?:\":e});return t},this.createSplitterRegexp=function(e,t){if(e.indexOf(\"(?=\")!=-1){var n=0,r=!1,i={};e.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g,function(e,t,s,o,u,a){return r?r=u!=\"]\":u?r=!0:o?(n==i.stack&&(i.end=a+1,i.stack=-1),n--):s&&(n++,s.length!=1&&(i.stack=n,i.start=a)),e}),i.end!=null&&/^\\)*$/.test(e.substr(i.end))&&(e=e.substring(0,i.start)+e.substr(i.end))}return e.charAt(0)!=\"^\"&&(e=\"^\"+e),e.charAt(e.length-1)!=\"$\"&&(e+=\"$\"),new RegExp(e,(t||\"\").replace(\"g\",\"\"))},this.getLineTokens=function(e,t){if(t&&typeof t!=\"string\"){var n=t.slice(0);t=n[0],t===\"#tmp\"&&(n.shift(),t=n.shift())}else var n=[];var r=t||\"start\",s=this.states[r];s||(r=\"start\",s=this.states[r]);var o=this.matchMappings[r],u=this.regExps[r];u.lastIndex=0;var a,f=[],l=0,c=0,h={type:null,value:\"\"};while(a=u.exec(e)){var p=o.defaultToken,d=null,v=a[0],m=u.lastIndex;if(m-v.length>l){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;y<a.length-2;y++){if(a[y+1]===undefined)continue;d=s[o[y]],d.onMatch?p=d.onMatch(v,r,n,e):p=d.token,d.next&&(typeof d.next==\"string\"?r=d.next:r=d.next(r,n),s=this.states[r],s||(this.reportError(\"state doesn't exist\",r),r=\"start\",s=this.states[r]),o=this.matchMappings[r],l=m,u=this.regExps[r],u.lastIndex=m),d.consumeLineEnd&&(l=m);break}if(v)if(typeof p==\"string\")!!d&&d.merge===!1||h.type!==p?(h.type&&f.push(h),h={type:p,value:v}):h.value+=v;else if(p){h.type&&f.push(h),h={type:null,value:\"\"};for(var y=0;y<p.length;y++)f.push(p[y])}if(l==e.length)break;l=m;if(c++>i){c>2*e.length&&this.reportError(\"infinite loop with in ace tokenizer\",{startState:t,line:e});while(l<e.length)h.type&&f.push(h),h={value:e.substring(l,l+=2e3),type:\"overflow\"};r=\"start\",n=[];break}}return h.type&&f.push(h),n.length>1&&n[0]!==r&&n.unshift(\"#tmp\",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),ace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=function(){this.$rules={start:[{token:\"empty_line\",regex:\"^$\"},{defaultToken:\"text\"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i<r.length;i++){var s=r[i];if(s.next||s.onMatch)typeof s.next==\"string\"&&s.next.indexOf(t)!==0&&(s.next=t+s.next),s.nextState&&s.nextState.indexOf(t)!==0&&(s.nextState=t+s.nextState)}this.$rules[t+n]=r}},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,n,i,s){var o=typeof e==\"function\"?(new e).getRules():e;if(i)for(var u=0;u<i.length;u++)i[u]=t+i[u];else{i=[];for(var a in o)i.push(t+a)}this.addRules(o,t);if(n){var f=Array.prototype[s?\"push\":\"unshift\"];for(var u=0;u<i.length;u++)f.apply(this.$rules[i[u]],r.deepCopy(n))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds};var e=function(e,t){return(e!=\"start\"||t.length)&&t.unshift(this.nextState,e),this.nextState},t=function(e,t){return t.shift(),t.shift()||\"start\"};this.normalizeRules=function(){function i(s){var o=r[s];o.processed=!0;for(var u=0;u<o.length;u++){var a=o[u],f=null;Array.isArray(a)&&(f=a,a={}),!a.regex&&a.start&&(a.regex=a.start,a.next||(a.next=[]),a.next.push({defaultToken:a.token},{token:a.token+\".end\",regex:a.end||a.start,next:\"pop\"}),a.token=a.token+\".start\",a.push=!0);var l=a.next||a.push;if(l&&Array.isArray(l)){var c=a.stateName;c||(c=a.token,typeof c!=\"string\"&&(c=c[0]||\"\"),r[c]&&(c+=n++)),r[c]=l,a.next=c,i(c)}else l==\"pop\"&&(a.next=t);a.push&&(a.nextState=a.next||a.push,a.next=e,delete a.push);if(a.rules)for(var h in a.rules)r[h]?r[h].push&&r[h].push.apply(r[h],a.rules[h]):r[h]=a.rules[h];var p=typeof a==\"string\"?a:a.include;p&&(Array.isArray(p)?f=p.map(function(e){return r[e]}):f=r[p]);if(f){var d=[u,1].concat(f);a.noEscape&&(d=d.filter(function(e){return!e.next})),o.splice.apply(o,d),u--}a.keywordMap&&(a.token=this.createKeywordMapper(a.keywordMap,a.defaultToken||\"text\",a.caseInsensitive),delete a.defaultToken)}}var n=0,r=this.$rules;Object.keys(r).forEach(i,this)},this.createKeywordMapper=function(e,t,n,r){var i=Object.create(null);return Object.keys(e).forEach(function(t){var s=e[t];n&&(s=s.toLowerCase());var o=s.split(r||\"|\");for(var u=o.length;u--;)i[o[u]]=t}),Object.getPrototypeOf(i)&&(i.__proto__=null),this.$keywordList=Object.keys(i),e=null,n?function(e){return i[e.toLowerCase()]||t}:function(e){return i[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(i.prototype),t.TextHighlightRules=i}),ace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(){this.$behaviours={}};(function(){this.add=function(e,t,n){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=n},this.addBehaviours=function(e){for(var t in e)for(var n in e[t])this.add(t,n,e[t][n])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if(typeof e==\"function\")var n=(new e).getBehaviours(t);else var n=e.getBehaviours(t);this.addBehaviours(n)},this.getBehaviours=function(e){if(!e)return this.$behaviours;var t={};for(var n=0;n<e.length;n++)this.$behaviours[e[n]]&&(t[e[n]]=this.$behaviours[e[n]]);return t}}).call(r.prototype),t.Behaviour=r}),ace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=function(e,t,n){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var r=e.getTokenAt(t,n);this.$tokenIndex=r?r.index:-1};(function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){this.$tokenIndex+=1;var e;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new r(this.$row,t,this.$row,t+e.value.length)}}).call(i.prototype),t.TokenIterator=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c={'\"':'\"',\"'\":\"'\"},h=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},p=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},d=function(e){this.add(\"braces\",\"insertion\",function(t,n,r,i,s){var u=r.getCursorPosition(),a=i.doc.getLine(u.row);if(s==\"{\"){h(r);var l=r.getSelectionRange(),c=i.doc.getTextRange(l);if(c!==\"\"&&c!==\"{\"&&r.getWrapBehavioursEnabled())return p(l,c,\"{\",\"}\");if(d.isSaneInsertion(r,i))return/[\\]\\}\\)]/.test(a[u.column])||r.inMultiSelectMode||e&&e.braces?(d.recordAutoInsert(r,i,\"}\"),{text:\"{}\",selection:[1,1]}):(d.recordMaybeInsert(r,i,\"{\"),{text:\"{\",selection:[1,1]})}else if(s==\"}\"){h(r);var v=a.substring(u.column,u.column+1);if(v==\"}\"){var m=i.$findOpeningBracket(\"}\",{column:u.column+1,row:u.row});if(m!==null&&d.isAutoInsertedClosing(u,a,s))return d.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(s==\"\\n\"||s==\"\\r\\n\"){h(r);var g=\"\";d.isMaybeInsertedClosing(u,a)&&(g=o.stringRepeat(\"}\",f.maybeInsertedBrackets),d.clearMaybeInsertedClosing());var v=a.substring(u.column,u.column+1);if(v===\"}\"){var y=i.findMatchingBracket({row:u.row,column:u.column+1},\"}\");if(!y)return null;var b=this.$getIndent(i.getLine(y.row))}else{if(!g){d.clearMaybeInsertedClosing();return}var b=this.$getIndent(a)}var w=b+i.getTabString();return{text:\"\\n\"+w+\"\\n\"+b+g,selection:[1,w.length,1,w.length]}}d.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return p(s,o,\"(\",\")\");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return p(s,o,\"[\",\"]\");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){var s=r.$mode.$quotes||c;if(i.length==1&&s[i]){if(this.lineCommentStart&&this.lineCommentStart.indexOf(i)!=-1)return;h(n);var o=i,u=n.getSelectionRange(),a=r.doc.getTextRange(u);if(a!==\"\"&&(a.length!=1||!s[a])&&n.getWrapBehavioursEnabled())return p(u,a,o,o);if(!a){var f=n.getCursorPosition(),l=r.doc.getLine(f.row),d=l.substring(f.column-1,f.column),v=l.substring(f.column,f.column+1),m=r.getTokenAt(f.row,f.column),g=r.getTokenAt(f.row,f.column+1);if(d==\"\\\\\"&&m&&/escape/.test(m.type))return null;var y=m&&/string|escape/.test(m.type),b=!g||/string|escape/.test(g.type),w;if(v==o)w=y!==b,w&&/string\\.end/.test(g.type)&&(w=!1);else{if(y&&!b)return null;if(y&&b)return null;var E=r.$mode.tokenRe;E.lastIndex=0;var S=E.test(d);E.lastIndex=0;var x=E.test(d);if(S||x)return null;if(v&&!/[\\s;,.})\\]\\\\]/.test(v))return null;w=!0}return{text:w?o+o:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.$mode.$quotes||c,o=r.doc.getTextRange(i);if(!i.isMultiLine()&&s.hasOwnProperty(o)){h(n);var u=r.doc.getLine(i.start.row),a=u.substring(i.start.column+1,i.start.column+2);if(a==o)return i.end.column++,i}})};d.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},d.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},d.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},d.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},d.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},d.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},d.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},d.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(d,i),t.CstyleBehaviour=d}),ace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],i=0,s=[];for(var o=0;o<r.length;o+=2)s.push(i+=r[o]),r[o+1]&&s.push(45,i+=r[o+1]);t.wordChars=String.fromCharCode.apply(null,s)}),ace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../config\"),i=e(\"../tokenizer\").Tokenizer,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"../unicode\"),a=e(\"../lib/lang\"),f=e(\"../token_iterator\").TokenIterator,l=e(\"../range\").Range,c=function(){this.HighlightRules=s};(function(){this.$defaultBehaviour=new o,this.tokenRe=new RegExp(\"^[\"+u.wordChars+\"\\\\$_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+u.wordChars+\"\\\\$_]|\\\\s])+\",\"g\"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new i(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart=\"\",this.blockComment=\"\",this.toggleCommentLines=function(e,t,n,r){function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var i=t.doc,s=!0,o=!0,u=Infinity,f=t.getTabSize(),l=!1;if(!this.lineCommentStart){if(!this.blockComment)return!1;var c=this.blockComment.start,h=this.blockComment.end,p=new RegExp(\"^(\\\\s*)(?:\"+a.escapeRegExp(c)+\")\"),d=new RegExp(\"(?:\"+a.escapeRegExp(h)+\")\\\\s*$\"),v=function(e,t){if(g(e,t))return;if(!s||/\\S/.test(e))i.insertInLine({row:t,column:e.length},h),i.insertInLine({row:t,column:u},c)},m=function(e,t){var n;(n=e.match(d))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(p.test(e))return!0;var r=t.getTokens(n);for(var i=0;i<r.length;i++)if(r[i].type===\"comment\")return!0}}else{if(Array.isArray(this.lineCommentStart))var p=this.lineCommentStart.map(a.escapeRegExp).join(\"|\"),c=this.lineCommentStart[0];else var p=a.escapeRegExp(this.lineCommentStart),c=this.lineCommentStart;p=new RegExp(\"^(\\\\s*)(?:\"+p+\") ?\"),l=t.getUseSoftTabs();var m=function(e,t){var n=e.match(p);if(!n)return;var r=n[1].length,s=n[0].length;!b(e,r,s)&&n[0][s-1]==\" \"&&s--,i.removeInLine(t,r,s)},y=c+\" \",v=function(e,t){if(!s||/\\S/.test(e))b(e,u,u)?i.insertInLine({row:t,column:u},y):i.insertInLine({row:t,column:u},c)},g=function(e,t){return p.test(e)},b=function(e,t,n){var r=0;while(t--&&e.charAt(t)==\" \")r++;if(r%f!=0)return!1;var r=0;while(e.charAt(n++)==\" \")r++;return f>2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\\S/);n!==-1?(n<u&&(u=n),o&&!g(e,t)&&(o=!1)):E>e.length&&(E=e.length)}),u==Infinity&&(u=E,s=!1,o=!1),l&&u%f!=0&&(u=Math.floor(u/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new f(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,a=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new l(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new f(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new l(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);a.start.row==c&&(a.start.column+=h),a.end.row==c&&(a.end.column+=h),t.selection.fromOrientedRange(a)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)if(e[t]){var n=e[t],i=n.prototype.$id,s=r.$modes[i];s||(r.$modes[i]=s=new n),r.$modes[t]||(r.$modes[t]=s),this.$embeds.push(t),this.$modes[t]=s}var o=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(var t=0;t<o.length;t++)(function(e){var n=o[t],r=e[n];e[o[t]]=function(){return this.$delegator(n,arguments,r)}})(this)},this.$delegator=function(e,t,n){var r=t[0]||\"start\";if(typeof r!=\"string\"){if(Array.isArray(r[2])){var i=r[2][r[2].length-1],s=this.$modes[i];if(s)return s[e].apply(s,[r[1]].concat([].slice.call(t,1)))}r=r[0]||\"start\"}for(var o=0;o<this.$embeds.length;o++){if(!this.$modes[this.$embeds[o]])continue;var u=r.split(this.$embeds[o]);if(!u[0]&&u[1]){t[0]=u[1];var s=this.$modes[this.$embeds[o]];return s[e].apply(s,t)}}var a=n.apply(this,t);return n?a:undefined},this.transformAction=function(e,t,n,r,i){if(this.$behaviour){var s=this.$behaviour.getBehaviours();for(var o in s)if(s[o][t]){var u=s[o][t].apply(this,arguments);if(u)return u}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,n=[];for(var r in t){var i=t[r];for(var s=0,o=i.length;s<o;s++)if(typeof i[s].token==\"string\")/keyword|support|storage/.test(i[s].token)&&n.push(i[s].regex);else if(typeof i[s].token==\"object\")for(var u=0,a=i[s].token.length;u<a;u++)if(/keyword|support|storage/.test(i[s].token[u])){var r=i[s].regex.match(/\\(.+?\\)/g)[u];n.push(r.substr(1,r.length-2))}}this.completionKeywords=n}return e?n.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,n,r){var i=this.$keywordList||this.$createKeywordList();return i.map(function(e){return{name:e,value:e,score:0,meta:\"keyword\"}})},this.$id=\"ace/mode/text\"}).call(c.prototype),t.Mode=c}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var n=this;this.$worker=function(){if(!n.running)return;var e=new Date,t=n.currentLine,r=-1,i=n.doc,s=t;while(n.lines[t])t++;var o=i.getLength(),u=0;n.running=!1;while(t<o){n.$tokenizeRow(t),r=t;do t++;while(n.lines[t]);u++;if(u%5===0&&new Date-e>20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,r==-1&&(r=t),s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal(\"update\",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.lines[t]=null;else if(e.action==\"remove\")this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||\"start\"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+\"\"!=r.state+\"\"?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),ace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||\"text\"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+\"\"==e+\"\")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:\"\");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),ace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e(\"../range\").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f<i.length;f++){s=i[f],o=s.range.compareStart(t,n);if(o==-1){e(null,t,n,r,a);return}u=e(null,s.start.row,s.start.column,r,a),u=!u&&e(s.placeholder,s.start.row,s.start.column,r);if(u||o===0)return;a=!s.sameRow,r=s.end.column}e(null,t,n,r,a)},this.getNextFoldTo=function(e,t){var n,r;for(var i=0;i<this.folds.length;i++){n=this.folds[i],r=n.range.compareEnd(e,t);if(r==-1)return{fold:n,kind:\"after\"};if(r===0)return{fold:n,kind:\"inside\"}}return null},this.addRemoveChars=function(e,t,n){var r=this.getNextFoldTo(e,t),i,s;if(r){i=r.fold;if(r.kind==\"inside\"&&i.start.column!=t&&i.start.row!=e)window.console&&window.console.log(e,t,i);else if(i.start.row==e){s=this.folds;var o=s.indexOf(i);o===0&&(this.start.column+=n);for(o;o<s.length;o++){i=s[o],i.start.column+=n;if(!i.sameRow)return;i.end.column+=n}this.end.column+=n}}},this.split=function(e,t){var n=this.getNextFoldTo(e,t);if(!n||n.kind==\"inside\")return null;var r=n.fold,s=this.folds,o=this.foldData,u=s.indexOf(r),a=s[u-1];this.end.row=a.end.row,this.end.column=a.end.column,s=s.splice(u,s.length-u);var f=new i(o,s);return o.splice(o.indexOf(this)+1,0,f),f},this.merge=function(e){var t=e.folds;for(var n=0;n<t.length;n++)this.addFold(t[n]);var r=this.foldData;r.splice(r.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+\": [\"];return this.folds.forEach(function(t){e.push(\"  \"+t.toString())}),e.push(\"]\"),e.join(\"\\n\")},this.idxToPosition=function(e){var t=0;for(var n=0;n<this.folds.length;n++){var r=this.folds[n];e-=r.start.column-t;if(e<0)return{row:r.start.row,column:r.start.column+e};e-=r.placeholder.length;if(e<0)return r.start;t=r.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(i.prototype),t.FoldLine=i}),ace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=r.comparePoints,s=function(){this.ranges=[]};(function(){this.comparePoints=i,this.pointIndex=function(e,t,n){var r=this.ranges;for(var s=n||0;s<r.length;s++){var o=r[s],u=i(e,o.end);if(u>0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s<t.length;s++){r=n,n=t[s];var o=i(r.end,n.start);if(o<0)continue;if(o==0&&!r.isEmpty()&&!n.isEmpty())continue;i(r.end,n.end)<0&&(r.end.row=n.end.row,r.end.column=n.end.column),t.splice(s,1),e.push(n),n=r,s--}return this.ranges=t,e},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row<e)return[];var r=this.pointIndex({row:e,column:0});r<0&&(r=-r-1);var i=this.pointIndex({row:t,column:0},r);i<0&&(i=-i-1);var s=[];for(var o=r;o<i;o++)s.push(n[o]);return s},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on(\"change\",this.onChange)},this.detach=function(){if(!this.session)return;this.session.removeListener(\"change\",this.onChange),this.session=null},this.$onChange=function(e){var t=e.start,n=e.end,r=t.row,i=n.row,s=this.ranges;for(var o=0,u=s.length;o<u;o++){var a=s[o];if(a.end.row>=r)break}if(e.action==\"insert\"){var f=i-r,l=-t.column+n.column;for(;o<u;o++){var a=s[o];if(a.start.row>r)break;a.start.row==r&&a.start.column>=t.column&&(a.start.column!=t.column||!this.$insertRight)&&(a.start.column+=l,a.start.row+=f);if(a.end.row==r&&a.end.column>=t.column){if(a.end.column==t.column&&this.$insertRight)continue;a.end.column==t.column&&l>0&&o<u-1&&a.end.column>a.start.column&&a.end.column==s[o+1].start.column&&(a.end.column-=l),a.end.column+=l,a.end.row+=f}}}else{var f=r-i,l=t.column-n.column;for(;o<u;o++){var a=s[o];if(a.start.row>i)break;if(a.end.row<i&&(r<a.end.row||r==a.end.row&&t.column<a.end.column))a.end.row=r,a.end.column=t.column;else if(a.end.row==i)if(a.end.column<=n.column){if(f||a.end.column>t.column)a.end.column=t.column,a.end.row=t.row}else a.end.column+=l,a.end.row+=f;else a.end.row>i&&(a.end.row+=f);if(a.start.row<i&&(r<a.start.row||r==a.start.row&&t.column<a.start.column))a.start.row=r,a.start.column=t.column;else if(a.start.row==i)if(a.start.column<=n.column){if(f||a.start.column>t.column)a.start.column=t.column,a.start.row=t.row}else a.start.column+=l,a.start.row+=f;else a.start.row>i&&(a.start.row+=f)}}if(f!=0&&o<u)for(;o<u;o++){var a=s[o];a.start.row+=f,a.end.row+=f}}}).call(s.prototype),t.RangeList=s}),ace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function u(e,t){e.row-=t.row,e.row==0&&(e.column-=t.column)}function a(e,t){u(e.start,t),u(e.end,t)}function f(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row}function l(e,t){f(e.start,t),f(e.end,t)}var r=e(\"../range\").Range,i=e(\"../range_list\").RangeList,s=e(\"../lib/oop\"),o=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]};s.inherits(o,i),function(){this.toString=function(){return'\"'+this.placeholder+'\" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach(function(t){t.setFoldLine(e)})},this.clone=function(){var e=this.range.clone(),t=new o(e,this.placeholder);return this.subFolds.forEach(function(e){t.subFolds.push(e.clone())}),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(this.range.isEqual(e))return;if(!this.range.containsRange(e))throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);a(e,this.start);var t=e.start.row,n=e.start.column;for(var r=0,i=-1;r<this.subFolds.length;r++){i=this.subFolds[r].range.compare(t,n);if(i!=1)break}var s=this.subFolds[r];if(i==0)return s.addSubFold(e);var t=e.range.end.row,n=e.range.end.column;for(var o=r,i=-1;o<this.subFolds.length;o++){i=this.subFolds[o].range.compare(t,n);if(i!=1)break}var u=this.subFolds[o];if(i==0)throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);var f=this.subFolds.splice(r,o-r,e);return e.setFoldLine(this.foldLine),e},this.restoreRange=function(e){return l(e,this.start)}}.call(o.prototype)}),ace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function u(){this.getFoldAt=function(e,t,n){var r=this.getFoldLine(e);if(!r)return null;var i=r.folds;for(var s=0;s<i.length;s++){var o=i[s];if(o.range.contains(e,t)){if(n==1&&o.range.isEnd(e,t))continue;if(n==-1&&o.range.isStart(e,t))continue;return o}}},this.getFoldsInRange=function(e){var t=e.start,n=e.end,r=this.$foldData,i=[];t.column+=1,n.column-=1;for(var s=0;s<r.length;s++){var o=r[s].range.compareRange(e);if(o==2)continue;if(o==-2)break;var u=r[s].folds;for(var a=0;a<u.length;a++){var f=u[a];o=f.range.compareRange(e);if(o==-2)break;if(o==2)continue;if(o==42)break;i.push(f)}}return t.column-=1,n.column+=1,i},this.getFoldsInRangeList=function(e){if(Array.isArray(e)){var t=[];e.forEach(function(e){t=t.concat(this.getFoldsInRange(e))},this)}else var t=this.getFoldsInRange(e);return t},this.getAllFolds=function(){var e=[],t=this.$foldData;for(var n=0;n<t.length;n++)for(var r=0;r<t[n].folds.length;r++)e.push(t[n].folds[r]);return e},this.getFoldStringAt=function(e,t,n,r){r=r||this.getFoldLine(e);if(!r)return null;var i={end:{column:0}},s,o;for(var u=0;u<r.folds.length;u++){o=r.folds[u];var a=o.range.compareEnd(e,t);if(a==-1){s=this.getLine(o.start.row).substring(i.end.column,o.start.column);break}if(a===0)return null;i=o}return s||(s=this.getLine(o.start.row).substring(i.end.column)),n==-1?s.substring(0,t-i.end.column):n==1?s.substring(t-i.end.column):s},this.getFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.start.row<=e&&i.end.row>=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.end.row>=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i<n.length;i++){var s=n[i],o=s.end.row,u=s.start.row;if(o>=t){u<t&&(u>=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u<f||u==f&&a<=l-2){var c=this.getFoldAt(u,a,1),h=this.getFoldAt(f,l,-1);if(c&&h==c)return c.addSubFold(o);c&&!c.range.isStart(u,a)&&this.removeFold(c),h&&!h.range.isEnd(f,l)&&this.removeFold(h);var p=this.getFoldsInRange(o.range);p.length>0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d<n.length;d++){var v=n[d];if(f==v.start.row){v.addFold(o),r=!0;break}if(u==v.end.row){v.addFold(o),r=!0;if(!o.sameRow){var m=n[d+1];if(m&&m.start.row==f){v.merge(m);break}}break}if(f<=v.start.row)break}return r||(v=this.$addFoldLine(new i(this.$foldData,o))),this.$useWrapMode?this.$updateWrapData(v.start.row,v.start.row):this.$updateRowLengthCache(v.start.row,v.start.row),this.$modified=!0,this._signal(\"changeFold\",{data:o,action:\"add\"}),o}throw new Error(\"The range has to be at least 2 characters width\")},this.addFolds=function(e){e.forEach(function(e){this.addFold(e)},this)},this.removeFold=function(e){var t=e.foldLine,n=t.start.row,r=t.end.row,i=this.$foldData,s=t.folds;if(s.length==1)i.splice(i.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))s.pop(),t.end.row=s[s.length-1].end.row,t.end.column=s[s.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))s.shift(),t.start.row=s[0].start.row,t.start.column=s[0].start.column;else if(e.sameRow)s.splice(s.indexOf(e),1);else{var o=t.split(e.start.row,e.start.column);s=o.folds,s.shift(),o.start.row=s[0].start.row,o.start.column=s[0].start.column}this.$updating||(this.$useWrapMode?this.$updateWrapData(n,r):this.$updateRowLengthCache(n,r)),this.$modified=!0,this._signal(\"changeFold\",{data:e,action:\"remove\"})},this.removeFolds=function(e){var t=[];for(var n=0;n<e.length;n++)t.push(e[n]);t.forEach(function(e){this.removeFold(e)},this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach(function(t){e.restoreRange(t),this.addFold(t)},this),e.collapseChildren>0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e==\"number\"?n=new r(e,0,e,this.getLine(e).length):\"row\"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o=\"\";return e.walk(function(e,t,n,u){if(t<r)return;if(t==r){if(n<i)return;u=Math.max(i,u)}e!=null?o+=e:o+=s.getLine(t).substring(u,n)},t,n),o},this.getDisplayLine=function(e,t,n,r){var i=this.getFoldLine(e);if(!i){var s;return s=this.doc.getLine(e),s.substring(r||0,t||s.length)}return this.getFoldDisplayLine(i,e,t,n,r)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map(function(t){var n=t.folds.map(function(e){return e.clone()});return new i(e,n)}),e},this.toggleFold=function(e){var t=this.selection,n=t.getRange(),r,i;if(n.isEmpty()){var s=n.start;r=this.getFoldAt(s.row,s.column);if(r){this.expandFold(r);return}(i=this.findMatchingBracket(s))?n.comparePoint(i)==1?n.end=i:(n.start=i,n.start.column++,n.end.column--):(i=this.findMatchingBracket({row:s.row,column:s.column+1}))?(n.comparePoint(i)==1?n.end=i:n.start=i,n.start.column++):n=this.getCommentFoldRange(s.row,s.column)||n}else{var o=this.getFoldsInRange(n);if(e&&o.length){this.expandFolds(o);return}o.length==1&&(r=o[0])}r||(r=this.getFoldAt(n.start.row,n.start.column));if(r&&r.range.toString()==n.toString()){this.expandFold(r);return}var u=\"...\";if(!n.isMultiLine()){u=this.getTextRange(n);if(u.length<4)return;u=u.trim().substring(0,2)+\"..\"}this.addFold(u,n)},this.getCommentFoldRange=function(e,t,n){var i=new o(this,e,t),s=i.getCurrentToken(),u=s.type;if(s&&/^comment|string/.test(u)){u=u.match(/comment|string/)[0],u==\"comment\"&&(u+=\"|doc-start\");var a=new RegExp(u),f=new r;if(n!=1){do s=i.stepBackward();while(s&&a.test(s.type));i.stepForward()}f.start.row=i.getCurrentTokenRow(),f.start.column=i.getCurrentTokenColumn()+2,i=new o(this,e,t);if(n!=-1){var l=-1;do{s=i.stepForward();if(l==-1){var c=this.getState(i.$row);a.test(c)||(l=i.$row)}else if(i.$row>l)break}while(s&&a.test(s.type));s=i.stepBackward()}else s=i.getCurrentToken();return f.end.row=i.getCurrentTokenRow(),f.end.column=i.getCurrentTokenColumn()+s.value.length-2,f}},this.foldAll=function(e,t,n){n==undefined&&(n=1e5);var r=this.foldWidgets;if(!r)return;t=t||this.getLength(),e=e||0;for(var i=e;i<t;i++){r[i]==null&&(r[i]=this.getFoldWidget(i));if(r[i]!=\"start\")continue;var s=this.getFoldWidgetRange(i);if(s&&s.isMultiLine()&&s.end.row<=t&&s.start.row>=e){i=s.end.row;try{var o=this.addFold(\"...\",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle=\"markbegin\",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error(\"invalid fold style: \"+e+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");if(this.$foldStyle==e)return;this.$foldStyle=e,e==\"manual\"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off(\"change\",this.$updateFoldWidgets),this.off(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets),this._signal(\"changeAnnotation\");if(!e||this.$foldStyle==\"manual\"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on(\"change\",this.$updateFoldWidgets),this.on(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s==\"start\"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=\" ace_invalid\")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n===\"end\"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range))return this.removeFold(s),s}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,f,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold(\"...\",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold(\"...\",n)}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.foldWidgets[t]=null;else if(e.action==\"remove\")this.foldWidgets.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,r)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e(\"../range\").Range,i=e(\"./fold_line\").FoldLine,s=e(\"./fold\").Fold,o=e(\"../token_iterator\").TokenIterator;t.Folding=u}),ace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n==\"\")return null;var r=n.match(/([\\(\\[\\{])|([\\)\\]\\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\",\"<\":\">\",\">\":\"<\"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end)\\b/,\"(?:start|begin|end)\")+\")+\"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:start|begin)\\b/,\"(?:start|begin|end)\")+\")+\"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a<l){var c=f.charAt(a);if(c==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else c==e&&(s+=1);a+=1}do u=o.stepForward();while(u&&!n.test(u.type));if(u==null)break;a=0}return null}}var r=e(\"../token_iterator\").TokenIterator,i=e(\"../range\").Range;t.BracketMatch=s}),ace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./bidihandler\").BidiHandler,o=e(\"./config\"),u=e(\"./lib/event_emitter\").EventEmitter,a=e(\"./selection\").Selection,f=e(\"./mode/text\").Mode,l=e(\"./range\").Range,c=e(\"./document\").Document,h=e(\"./background_tokenizer\").BackgroundTokenizer,p=e(\"./search_highlight\").SearchHighlight,d=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.id=\"session\"+ ++d.$uid,this.$foldData.toString=function(){return this.join(\"\\n\")},this.on(\"changeFold\",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this);if(typeof e!=\"object\"||!e.getLine)e=new c(e);this.setDocument(e),this.selection=new a(this),this.$bidiHandler=new s(this),o.resetOptions(this),this.setMode(t),o._signal(\"session\",this)};d.$uid=0,function(){function m(e){return e<4352?!1:e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,u),this.setDocument=function(e){this.doc&&this.doc.removeListener(\"change\",this.$onChange),this.doc=e,e.on(\"change\",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t<s))return i;r=i-1}}return n-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){this.$modified=!0,this.$bidiHandler.onChange(e),this.$resetRowCache(e.start.row);var t=this.$updateInternalDataOnChange(e);!this.$fromUndo&&this.$undoManager&&(t&&t.length&&(this.$undoManager.add({action:\"removeFolds\",folds:t},this.mergeUndoDeltas),this.mergeUndoDeltas=!0),this.$undoManager.add(e,this.mergeUndoDeltas),this.mergeUndoDeltas=!0,this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(e),this._signal(\"change\",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var n=this.bgTokenizer.getTokens(e),r,i=0;if(t==null){var s=n.length-1;i=this.getLine(e).length}else for(var s=0;s<n.length;s++){i+=n[s].value.length;if(i>=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(\" \",this.getTabSize()):\"\t\"},this.setUseSoftTabs=function(e){this.setOption(\"useSoftTabs\",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption(\"tabSize\",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.setNavigateWithinSoftTabs=function(e){this.setOption(\"navigateWithinSoftTabs\",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption(\"overwrite\",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=\"\"),this.$decorations[e]+=\" \"+t,this._signal(\"changeBreakpoint\",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||\"\").replace(\" \"+t,\"\"),this._signal(\"changeBreakpoint\",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]=\"ace_breakpoint\";this._signal(\"changeBreakpoint\",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal(\"changeBreakpoint\",{})},this.setBreakpoint=function(e,t){t===undefined&&(t=\"ace_breakpoint\"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.addMarker=function(e,t,n,r){var i=this.$markerId++,s={range:e,type:n||\"line\",renderer:typeof n==\"function\"?n:null,clazz:t,inFront:!!r,id:i};return r?(this.$frontMarkers[i]=s,this._signal(\"changeFrontMarker\")):(this.$backMarkers[i]=s,this._signal(\"changeBackMarker\")),i},this.addDynamicMarker=function(e,t){if(!e.update)return;var n=this.$markerId++;return e.id=n,e.inFront=!!t,t?(this.$frontMarkers[n]=e,this._signal(\"changeFrontMarker\")):(this.$backMarkers[n]=e,this._signal(\"changeBackMarker\")),e},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(!t)return;var n=t.inFront?this.$frontMarkers:this.$backMarkers;delete n[e],this._signal(t.inFront?\"changeFrontMarker\":\"changeBackMarker\")},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new p(null,\"ace_selected-word\",\"text\");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,n,r){typeof t!=\"number\"&&(n=t,t=e),n||(n=\"ace_step\");var i=new l(e,0,t,Infinity);return i.id=this.addMarker(i,n,\"fullLine\",r),i},this.setAnnotations=function(e){this.$annotations=e,this._signal(\"changeAnnotation\",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r?\\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine=\"\\n\"},this.getWordRange=function(e,t){var n=this.getLine(e),r=!1;t>0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\\s+$/.test(n.slice(t-1,t+1)))var i=/\\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(o<n.length&&n.charAt(o).match(i))o++;return new l(e,s,e,o)},this.getAWordRange=function(e,t){var n=this.getWordRange(e,t),r=this.getLine(n.end.row);while(r.charAt(n.end.column).match(/[ \\t]/))n.end.column+=1;return n},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption(\"useWorker\",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._signal(\"tokenizerUpdate\",e)},this.$modes=o.$modes,this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&typeof e==\"object\"){if(e.getTokenizer)return this.$onChangeMode(e);var n=e,r=n.path}else r=e||\"ace/mode/text\";this.$modes[\"ace/mode/text\"]||(this.$modes[\"ace/mode/text\"]=new f);if(this.$modes[r]&&!n){this.$onChangeMode(this.$modes[r]),t&&t();return}this.$modeId=r,o.loadModule([\"mode\",r],function(e){if(this.$modeId!==r)return t&&t();this.$modes[r]&&!n?this.$onChangeMode(this.$modes[r]):e&&e.Mode&&(e=new e.Mode(n),n||(this.$modes[r]=e,e.$id=r),this.$onChangeMode(e)),t&&t()}.bind(this)),this.$mode||this.$onChangeMode(this.$modes[\"ace/mode/text\"],!0)},this.$onChangeMode=function(e,t){t||(this.$modeId=e.$id);if(this.$mode===e)return;this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker();var n=e.getTokenizer();if(n.addEventListener!==undefined){var r=this.onReloadTokenizer.bind(this);n.addEventListener(\"update\",r)}if(!this.bgTokenizer){this.bgTokenizer=new h(n);var i=this;this.bgTokenizer.addEventListener(\"update\",function(e){i._signal(\"tokenizerUpdate\",e)})}else this.bgTokenizer.setTokenizer(n);this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit(\"changeMode\"))},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){o.warn(\"Could not load worker\",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){if(this.$scrollTop===e||isNaN(e))return;this.$scrollTop=e,this._signal(\"changeScrollTop\",e)},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){if(this.$scrollLeft===e||isNaN(e))return;this.$scrollLeft=e,this._signal(\"changeScrollLeft\",e)},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(this.lineWidgetsWidth!=null)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach(function(t){t&&t.screenWidth>e&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;a<u;a++){if(a>o){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=e.length-1;n!=-1;n--){var r=e[n];r.action==\"insert\"||r.action==\"remove\"?this.doc.revertDelta(r):r.folds&&this.addFolds(r.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=0;n<e.length;n++){var r=e[n];(r.action==\"insert\"||r.action==\"remove\")&&this.doc.applyDelta(r)}!t&&this.$undoSelect&&(e.selectionAfter?this.selection.fromJSON(e.selectionAfter):this.selection.setRange(this.$getUndoSelection(e,!1))),this.$fromUndo=!1},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t){function n(e){return t?e.action!==\"insert\":e.action===\"insert\"}var r,i,s;for(var o=0;o<e.length;o++){var u=e[o];if(!u.start)continue;if(!r){n(u)?(r=l.fromPoints(u.start,u.end),s=!0):(r=l.fromPoints(u.start,u.start),s=!1);continue}n(u)?(i=u.start,r.compare(i.row,i.column)==-1&&r.setStart(i),i=u.end,r.compare(i.row,i.column)==1&&r.setEnd(i),s=!0):(i=u.start,r.compare(i.row,i.column)==-1&&(r=l.fromPoints(u.start,u.start)),s=!1)}return r},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,n){var r=this.getTextRange(e),i=this.getFoldsInRange(e),s=l.fromPoints(t,t);if(!n){this.remove(e);var o=e.start.row-e.end.row,u=o?-e.end.column:e.start.column-e.end.column;u&&(s.start.row==e.end.row&&s.start.column>e.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,f=s.start,o=f.row-a.row,u=f.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new l(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o<r;++o)if(s.charAt(o)!=\" \")break;o<r&&s.charAt(o)==\"\t\"?(n.start.column=o,n.end.column=o+1):(n.start.column=0,n.end.column=o),this.remove(n)}},this.$moveLines=function(e,t,n){e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t);if(n<0){var r=this.getRowFoldStart(e+n);if(r<0)return 0;var i=r-e}else if(n>0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new l(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal(\"changeWrapMode\")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal(\"changeWrapMode\")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal(\"changeWrapLimit\")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=null;this.$updating=!0;if(u!=0)if(n===\"remove\"){this[t?\"$wrapData\":\"$rowLengthCache\"].splice(s,u);var f=this.$foldData;a=this.getFoldsInRange(e),this.removeFolds(a);var l=this.getFoldLine(i.row),c=0;if(l){l.addRemoveChars(i.row,i.column,r.column-i.column),l.shiftRow(-u);var h=this.getFoldLine(s);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=i.row&&l.shiftRow(-u)}o=s}else{var p=Array(u);p.unshift(s,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(s),c=0;if(l){var v=l.range.compareInside(r.row,r.column);v==0?(l=l.split(r.row,r.column),l&&(l.shiftRow(u),l.addRemoveChars(o,0,i.column-r.column))):v==-1&&(l.addRemoveChars(s,0,i.column-r.column),l.shiftRow(u)),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=s&&l.shiftRow(u)}}else{u=Math.abs(e.start.column-e.end.column),n===\"remove\"&&(a=this.getFoldsInRange(e),this.removeFolds(a),u=-u);var l=this.getFoldLine(s);l&&l.addRemoveChars(s,r.column,u)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error(\"doc.getLength() and $wrapData.length have to be the same!\"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),o=this.$wrapData,u=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,o){var u;if(e!=null){u=this.$getDisplayTokens(e,a.length),u[0]=n;for(var f=1;f<u.length;f++)u[f]=s}else u=this.$getDisplayTokens(r[t].substring(o,i),a.length);a=a.concat(u)}.bind(this),f.end.row,r[f.end.row].length+1),o[f.start.row]=this.$computeWrapSplits(a,u,i),l=f.end.row+1):(a=this.$getDisplayTokens(r[l]),o[l]=this.$computeWrapSplits(a,u,i),l++)};var e=1,t=2,n=3,s=4,a=9,c=10,d=11,v=12;this.$computeWrapSplits=function(e,r,i){function g(){var t=0;if(m===0)return t;if(p)for(var n=0;n<e.length;n++){var r=e[n];if(r==c)t+=1;else{if(r!=d){if(r==v)continue;break}t+=i}}return h&&p!==!1&&(t+=i),Math.min(t,m)}function y(t){var n=t-f;for(var r=f;r<t;r++){var i=e[r];if(i===12||i===2)n-=1}o.length||(b=g(),o.indent=b),l+=n,o.push(l),f=t}if(e.length==0)return[];var o=[],u=e.length,f=0,l=0,h=this.$wrapAsCode,p=this.$indentedSoftWrap,m=r<=Math.max(2*i,8)||p===!1?0:Math.floor(r/2),b=0;while(u-f>r-b){var w=f+r-b;if(e[w-1]>=c&&e[w]>=c){y(w);continue}if(e[w]==n||e[w]==s){for(w;w!=f-1;w--)if(e[w]==n)break;if(w>f){y(w);continue}w=f+r;for(w;w<e.length;w++)if(e[w]!=s)break;if(w==e.length)break;y(w);continue}var E=Math.max(w-(r-(r>>2)),f-1);while(w>E&&e[w]<n)w--;if(h){while(w>E&&e[w]<n)w--;while(w>E&&e[w]==a)w--}else while(w>E&&e[w]<c)w--;if(w>E){y(++w);continue}w=f+r,e[w]==t&&w--,y(w-b)}return o},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o<n.length;o++){var u=n.charCodeAt(o);if(u==9){s=this.getScreenTabSize(i.length+r),i.push(d);for(var f=1;f<s;f++)i.push(v)}else u==32?i.push(c):u>39&&u<48||u>57&&u<64?i.push(a):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i<e.length;i++){r=e.charCodeAt(i),r==9?n+=this.getScreenTabSize(n):r>=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]<t.column?n.indent:0}return 0},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:undefined},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t,n){if(e<0)return{row:0,column:0};var r,i=0,s=0,o,u=0,a=0,f=this.$screenRowCache,l=this.$getRowCacheIndex(f,e),c=f.length;if(c&&l>=0)var u=f[l],i=this.$docRowCache[l],h=e>f[c-1];else var h=!c;var p=this.getLength()-1,d=this.getNextFoldLine(i),v=d?d.start.row:Infinity;while(u<=e){a=this.getRowLength(i);if(u+a>e||i>=p)break;u+=a,i++,i>v&&(i=d.end.row+1,d=this.getNextFoldLine(i,d),v=d?d.start.row:Infinity),h&&(this.$docRowCache.push(i),this.$screenRowCache.push(u))}if(d&&d.start.row<=i)r=this.getFoldDisplayLine(d),i=d.start.row;else{if(u+a<=e||i>p)return{row:p,column:this.getLine(p).length};r=this.getLine(i),d=null}var m=0,g=Math.floor(e-u);if(this.$useWrapMode){var y=this.$wrapData[i];y&&(o=y[g],g>0&&y.length&&(m=y.indent,s=y[g-1]||y[y.length-1],r=r.substring(s)))}return n!==undefined&&this.$bidiHandler.isBidiRow(u+g,i,g)&&(t=this.$bidiHandler.offsetToCol(n)),s+=this.$getStringScreenWidth(r,t-m)[1],this.$useWrapMode&&s>=o&&(s=o-1),d?d.idxToPosition(s):{row:i,column:s}},this.documentToScreenPosition=function(e,t){if(typeof t==\"undefined\")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u<e){if(u>=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d=\"\";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);var v=0;if(this.$useWrapMode){var m=this.$wrapData[i];if(m){var g=0;while(d.length>=m[g])r++,g++;d=d.substring(m[g-1]||0,d.length),v=g>0?m.indent:0}}return{row:r,column:v+this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;r<n.length;r++)t=n[r],e-=t.end.row-t.start.row}else{var i=this.$wrapData.length,s=0,r=0,t=this.$foldData[r++],o=t?t.start.row:Infinity;while(s<i){var u=this.$wrapData[s];e+=u?u.length+1:1,s++,s>o&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){if(!this.$enableVarChar)return;this.$getStringScreenWidth=function(t,n,r){if(n===0)return[0,0];n||(n=Infinity),r=r||0;var i,s;for(s=0;s<t.length;s++){i=t.charAt(s),i===\"\t\"?r+=this.getScreenTabSize(r):r+=e.getCharacterWidth(i);if(r>n)break}return[r,s]}},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=m}.call(d.prototype),e(\"./edit_session/folding\").Folding.call(d.prototype),e(\"./edit_session/bracket_match\").BracketMatch.call(d.prototype),o.defineOptions(d.prototype,\"session\",{wrap:{set:function(e){!e||e==\"off\"?e=!1:e==\"free\"?e=!0:e==\"printMargin\"?e=-1:typeof e==\"string\"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;this.$wrap=e;if(!e)this.setUseWrapMode(!1);else{var t=typeof e==\"number\"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}},get:function(){return this.getUseWrapMode()?this.$wrap==-1?\"printMargin\":this.getWrapLimitRange().min?this.$wrap:\"free\":\"off\"},handlesSet:!0},wrapMethod:{set:function(e){e=e==\"auto\"?this.$mode.type!=\"text\":e!=\"text\",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:\"auto\"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){e=parseInt(e);if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal(\"changeTabSize\")},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(e){this.setFoldStyle(e)},handlesSet:!0},overwrite:{set:function(e){this._signal(\"changeOverwrite\")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId},handlesSet:!0}}),t.EditSession=d}),ace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";function u(e,t){function n(e){return/\\w/.test(e)||t.regExp?\"\\\\b\":\"\"}return n(e[0])+e+n(e[e.length-1])}var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i,o){return r=new s(e,n,i,o),n==o&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start)?(r=null,!1):!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;h<a;h++)if(i[c+h].search(u[h])==-1)continue e;var p=i[c],d=i[c+a-1],v=p.length-p.match(u[0])[0].length,m=d.match(u[a-1])[0].length;if(l&&l.end.row===c&&l.end.column>v)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;g<i.length;g++){var y=r.getMatchOffsets(i[g],u);for(var h=0;h<y.length;h++){var b=y[h];o.push(new s(g,b.offset,g,b.offset+b.length))}}if(n){var w=n.start.column,E=n.start.column,g=0,h=o.length-1;while(g<h&&o[g].start.column<w&&o[g].start.row==n.start.row)g++;while(g<h&&o[h].end.column>E&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g<h;g++)o[g].start.row+=n.start.row,o[g].end.row+=n.start.row}return o},this.replace=function(e,t){var n=this.$options,r=this.$assembleRegExp(n);if(n.$isMultiLine)return t;if(!r)return;var i=r.exec(e);if(!i||i[0].length!=e.length)return null;t=e.replace(r,t);if(n.preserveCase){t=t.split(\"\");for(var s=Math.min(e.length,e.length);s--;){var o=e[s];o&&o.toLowerCase()!=o?t[s]=t[s].toUpperCase():t[s]=t[s].toLowerCase()}t=t.join(\"\")}return t},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var n=e.needle;if(!e.needle)return e.re=!1;e.regExp||(n=r.escapeRegExp(n)),e.wholeWord&&(n=u(n,e));var i=e.caseSensitive?\"gm\":\"gmi\";e.$isMultiLine=!t&&/[\\n\\r]/.test(n);if(e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(n,i);try{var s=new RegExp(n,i)}catch(o){s=!1}return e.re=s},this.$assembleMultilineRegExp=function(e,t){var n=e.replace(/\\r\\n|\\r|\\n/g,\"$\\n^\").split(\"\\n\"),r=[];for(var i=0;i<n.length;i++)try{r.push(new RegExp(n[i],t))}catch(s){return!1}return r},this.$matchIterator=function(e,t){var n=this.$assembleRegExp(t);if(!n)return!1;var r=t.backwards==1,i=t.skipCurrent!=0,s=t.range,o=t.start;o||(o=s?s[r?\"end\":\"start\"]:e.selection.getRange()),o.start&&(o=o[i!=r?\"end\":\"start\"]);var u=s?s.start.row:0,a=s?s.end.row:e.getLength()-1;if(r)var f=function(e){var n=o.row;if(c(n,o.column,e))return;for(n--;n>=u;n--)if(c(n,Number.MAX_VALUE,e))return;if(t.wrap==0)return;for(n=a,u=o.row;n>=u;n--)if(c(n,Number.MAX_VALUE,e))return};else var f=function(e){var n=o.row;if(c(n,o.column,e))return;for(n+=1;n<=a;n++)if(c(n,0,e))return;if(t.wrap==0)return;for(n=u,a=o.row;n<=a;n++)if(c(n,0,e))return};if(t.$isMultiLine)var l=n.length,c=function(t,i,s){var o=r?t-l+1:t;if(o<0)return;var u=e.getLine(o),a=u.search(n[0]);if(!r&&a<i||a===-1)return;for(var f=1;f<l;f++){u=e.getLine(o+f);if(u.search(n[f])==-1)return}var c=u.match(n[l-1])[0].length;if(r&&c>i)return;if(s(o,a,o+l-1,c))return!0};else if(r)var c=function(t,r,i){var s=e.getLine(t),o=[],u,a=0;n.lastIndex=0;while(u=n.exec(s)){var f=u[0].length;a=u.index;if(!f){if(a>=s.length)break;n.lastIndex=a+=1}if(u.index+f>r)break;o.push(u.index,f)}for(var l=o.length-1;l>=0;l-=2){var c=o[l-1],f=o[l];if(i(t,c,t,c+f))return!0}};else var c=function(t,r,i){var s=e.getLine(t),o,u;n.lastIndex=r;while(u=n.exec(s)){var a=u[0].length;o=u.index;if(i(t,o,t,o+a))return!0;if(!a){n.lastIndex=o+=1;if(o>=s.length)return!1}}};return{forEach:f}}}).call(o.prototype),t.Search=o}),ace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e,t){this.platform=t||(i.isMac?\"mac\":\"win\"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e(\"../lib/keys\"),i=e(\"../lib/useragent\"),s=r.KEY_MODS;u.prototype=o.prototype,function(){function e(e){return typeof e==\"object\"&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e==\"string\"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e==\"object\"&&e&&(n==undefined&&(n=e.position),e=e[this.platform]);if(!e)return;if(typeof t==\"function\")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split(\"|\").forEach(function(e){var r=\"\";if(e.indexOf(\" \")!=-1){var i=e.split(/\\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?\" \":\"\")+n,this._addCommandToBinding(r,\"chainKeys\")},this),r+=\" \"}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(t,n,r){var i=this.commandKeyBinding,s;if(!n)delete i[t];else if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?(s=i[t].indexOf(n))!=-1&&i[t].splice(s,1):i[t]=[i[t]],typeof r!=\"number\"&&(r=e(n));var o=i[t];for(s=0;s<o.length;s++){var u=o[s],a=e(u);if(a>r)break}o.splice(s,0,n)}},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n==\"string\")return this.bindKey(n,t);typeof n==\"function\"&&(n={exec:n});if(typeof n!=\"object\")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]==\"shift\")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!=\"undefined\"&&console.error(\"invalid modifier \"+t[o]+\" in \"+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){if(r<0)return;var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=\" \"+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o==\"chainKeys\"||o[o.length-1]==\"chainKeys\")return e.$keyChain=e.$keyChain||i,{command:\"null\"};if(e.$keyChain)if(!!t&&t!=4||n.length!=1){if(t==-1||r>0)e.$keyChain=\"\"}else e.$keyChain=e.$keyChain.slice(0,-i.length-1);return{command:o}},this.getStatusText=function(e,t){return t.$keyChain||\"\"}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),ace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../keyboard/hash_handler\").MultiHashHandler,s=e(\"../lib/event_emitter\").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler(\"exec\",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e==\"string\"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(this.$checkCommandState!=0&&e.isAvailable&&!e.isAvailable(t))return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit(\"exec\",i),this._signal(\"afterExec\",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit(\"changeStatus\"),this.recording?(this.macro.pop(),this.removeEventListener(\"exec\",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on(\"exec\",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t==\"string\"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!=\"string\"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),ace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t){return{win:e,mac:t}}var r=e(\"../lib/lang\"),i=e(\"../config\"),s=e(\"../range\").Range;t.commands=[{name:\"showSettingsMenu\",bindKey:o(\"Ctrl-,\",\"Command-,\"),exec:function(e){i.loadModule(\"ace/ext/settings_menu\",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:\"goToNextError\",bindKey:o(\"Alt-E\",\"F4\"),exec:function(e){i.loadModule(\"./ext/error_marker\",function(t){t.showErrorMarker(e,1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"goToPreviousError\",bindKey:o(\"Alt-Shift-E\",\"Shift-F4\"),exec:function(e){i.loadModule(\"./ext/error_marker\",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"selectall\",bindKey:o(\"Ctrl-A\",\"Command-A\"),exec:function(e){e.selectAll()},readOnly:!0},{name:\"centerselection\",bindKey:o(null,\"Ctrl-L\"),exec:function(e){e.centerSelection()},readOnly:!0},{name:\"gotoline\",bindKey:o(\"Ctrl-L\",\"Command-L\"),exec:function(e,t){typeof t!=\"number\"&&(t=parseInt(prompt(\"Enter line number:\"),10)),isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:\"fold\",bindKey:o(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"unfold\",bindKey:o(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleFoldWidget\",bindKey:o(\"F2\",\"F2\"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleParentFoldWidget\",bindKey:o(\"Alt-F2\",\"Alt-F2\"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"foldall\",bindKey:o(null,\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAll()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldOther\",bindKey:o(\"Alt-0\",\"Command-Option-0\"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:\"center\",readOnly:!0},{name:\"unfoldall\",bindKey:o(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(e){e.session.unfold()},scrollIntoView:\"center\",readOnly:!0},{name:\"findnext\",bindKey:o(\"Ctrl-K\",\"Command-G\"),exec:function(e){e.findNext()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"findprevious\",bindKey:o(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(e){e.findPrevious()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"selectOrFindNext\",bindKey:o(\"Alt-K\",\"Ctrl-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:\"selectOrFindPrevious\",bindKey:o(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:\"find\",bindKey:o(\"Ctrl-F\",\"Command-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e)})},readOnly:!0},{name:\"overwrite\",bindKey:\"Insert\",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:\"selecttostart\",bindKey:o(\"Ctrl-Shift-Home\",\"Command-Shift-Home|Command-Shift-Up\"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",bindKey:o(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(e){e.navigateFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",bindKey:o(\"Shift-Up\",\"Shift-Up|Ctrl-Shift-P\"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golineup\",bindKey:o(\"Up\",\"Up|Ctrl-P\"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttoend\",bindKey:o(\"Ctrl-Shift-End\",\"Command-Shift-End|Command-Shift-Down\"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",bindKey:o(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(e){e.navigateFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",bindKey:o(\"Shift-Down\",\"Shift-Down|Ctrl-Shift-N\"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golinedown\",bindKey:o(\"Down\",\"Down|Ctrl-N\"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordleft\",bindKey:o(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordleft\",bindKey:o(\"Ctrl-Left\",\"Option-Left\"),exec:function(e){e.navigateWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolinestart\",bindKey:o(\"Alt-Shift-Left\",\"Command-Shift-Left|Ctrl-Shift-A\"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolinestart\",bindKey:o(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(e){e.navigateLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectleft\",bindKey:o(\"Shift-Left\",\"Shift-Left|Ctrl-Shift-B\"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoleft\",bindKey:o(\"Left\",\"Left|Ctrl-B\"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordright\",bindKey:o(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordright\",bindKey:o(\"Ctrl-Right\",\"Option-Right\"),exec:function(e){e.navigateWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolineend\",bindKey:o(\"Alt-Shift-Right\",\"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolineend\",bindKey:o(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(e){e.navigateLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectright\",bindKey:o(\"Shift-Right\",\"Shift-Right\"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoright\",bindKey:o(\"Right\",\"Right|Ctrl-F\"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectpagedown\",bindKey:\"Shift-PageDown\",exec:function(e){e.selectPageDown()},readOnly:!0},{name:\"pagedown\",bindKey:o(null,\"Option-PageDown\"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:\"gotopagedown\",bindKey:o(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:\"selectpageup\",bindKey:\"Shift-PageUp\",exec:function(e){e.selectPageUp()},readOnly:!0},{name:\"pageup\",bindKey:o(null,\"Option-PageUp\"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:\"gotopageup\",bindKey:\"PageUp\",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:\"scrollup\",bindKey:o(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"scrolldown\",bindKey:o(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"selectlinestart\",bindKey:\"Shift-Home\",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectlineend\",bindKey:\"Shift-End\",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"togglerecording\",bindKey:o(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:\"replaymacro\",bindKey:o(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:\"jumptomatching\",bindKey:o(\"Ctrl-P\",\"Ctrl-P\"),exec:function(e){e.jumpToMatching()},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"selecttomatching\",bindKey:o(\"Ctrl-Shift-P\",\"Ctrl-Shift-P\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"expandToMatching\",bindKey:o(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"passKeysToBrowser\",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:\"copy\",exec:function(e){},readOnly:!0},{name:\"cut\",exec:function(e){var t=e.$copyWithEmptySelection&&e.selection.isEmpty(),n=t?e.selection.getLineRange():e.selection.getRange();e._emit(\"cut\",n),n.isEmpty()||e.session.remove(n),e.clearSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"paste\",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:\"cursor\"},{name:\"removeline\",bindKey:o(\"Ctrl-D\",\"Command-D\"),exec:function(e){e.removeLines()},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",bindKey:o(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(e){e.duplicateSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",bindKey:o(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(e){e.sortLines()},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",bindKey:o(\"Ctrl-/\",\"Command-/\"),exec:function(e){e.toggleCommentLines()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",bindKey:o(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(e){e.toggleBlockComment()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",bindKey:o(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(e){e.modifyNumber(1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",bindKey:o(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",bindKey:o(\"Ctrl-H\",\"Command-Option-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e,!0)})}},{name:\"undo\",bindKey:o(\"Ctrl-Z\",\"Command-Z\"),exec:function(e){e.undo()}},{name:\"redo\",bindKey:o(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(e){e.redo()}},{name:\"copylinesup\",bindKey:o(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(e){e.copyLinesUp()},scrollIntoView:\"cursor\"},{name:\"movelinesup\",bindKey:o(\"Alt-Up\",\"Option-Up\"),exec:function(e){e.moveLinesUp()},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",bindKey:o(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(e){e.copyLinesDown()},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",bindKey:o(\"Alt-Down\",\"Option-Down\"),exec:function(e){e.moveLinesDown()},scrollIntoView:\"cursor\"},{name:\"del\",bindKey:o(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(e){e.remove(\"right\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",bindKey:o(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(e){e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",bindKey:o(\"Shift-Delete\",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",bindKey:o(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(e){e.removeToLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",bindKey:o(\"Alt-Delete\",\"Ctrl-K|Command-Delete\"),exec:function(e){e.removeToLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestarthard\",bindKey:o(\"Ctrl-Shift-Backspace\",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineendhard\",bindKey:o(\"Ctrl-Shift-Delete\",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",bindKey:o(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(e){e.removeWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",bindKey:o(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(e){e.removeWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",bindKey:o(\"Shift-Tab\",\"Shift-Tab\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",bindKey:o(\"Tab\",\"Tab\"),exec:function(e){e.indent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",bindKey:o(\"Ctrl-[\",\"Ctrl-[\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",bindKey:o(\"Ctrl-]\",\"Ctrl-]\"),exec:function(e){e.blockIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",exec:function(e,t){e.insert(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",exec:function(e,t){e.insert(r.stringRepeat(t.text||\"\",t.times||1))},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",bindKey:o(null,\"Ctrl-O\"),exec:function(e){e.splitLine()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",bindKey:o(\"Alt-Shift-X\",\"Ctrl-T\"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:\"cursor\"},{name:\"touppercase\",bindKey:o(\"Ctrl-U\",\"Ctrl-U\"),exec:function(e){e.toUpperCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",bindKey:o(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(e){e.toLowerCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"expandtoline\",bindKey:o(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"joinlines\",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\\n\\s*/,\" \").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=\" \"+c),f+=c}i.row+1<e.session.doc.getLength()-1&&(f+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new s(n.row,0,i.row+2,0),f),a>0?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:\"forEach\",readOnly:!0},{name:\"invertSelection\",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o<r.length;o++)o==r.length-1&&(r[o].end.row!==t||r[o].end.column!==n)&&i.push(new s(r[o].end.row,r[o].end.column,t,n)),o===0?(r[o].start.row!==0||r[o].start.column!==0)&&i.push(new s(0,0,r[o].start.row,r[o].start.column)):i.push(new s(r[o-1].end.row,r[o-1].end.column,r[o].start.row,r[o].start.column));e.exitMultiSelectMode(),e.clearSelection();for(var o=0;o<i.length;o++)e.selection.addRange(i[o],!1)},readOnly:!0,scrollIntoView:\"none\"}]}),ace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";n.exports={lineMode:!1}}),ace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/lang\"),o=e(\"./lib/useragent\"),u=e(\"./keyboard/textinput\").TextInput,a=e(\"./mouse/mouse_handler\").MouseHandler,f=e(\"./mouse/fold_handler\").FoldHandler,l=e(\"./keyboard/keybinding\").KeyBinding,c=e(\"./edit_session\").EditSession,h=e(\"./search\").Search,p=e(\"./range\").Range,d=e(\"./lib/event_emitter\").EventEmitter,v=e(\"./commands/command_manager\").CommandManager,m=e(\"./commands/default_commands\").commands,g=e(\"./config\"),y=e(\"./token_iterator\").TokenIterator,b=e(\"./clipboard\"),w=function(e,t,n){var r=e.getContainerElement();this.container=r,this.renderer=e,this.id=\"editor\"+ ++w.$uid,this.commands=new v(o.isMac?\"mac\":\"win\",m),typeof document==\"object\"&&(this.textInput=new u(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.$mouseHandler=new a(this),new f(this)),this.keyBinding=new l(this),this.$search=(new h).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on(\"exec\",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=s.delayedCall(function(){this._signal(\"input\",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on(\"change\",function(e,t){t._$emitInputEvent.schedule(31)}),this.setSession(t||n&&n.session||new c(\"\")),g.resetOptions(this),n&&this.setOptions(n),g._signal(\"editor\",this)};w.$uid=0,function(){r.implement(this,d),this.$initOperationListeners=function(){this.commands.on(\"exec\",this.startOperation.bind(this),!0),this.commands.on(\"afterExec\",this.endOperation.bind(this),!0),this.$opResetTimer=s.delayedCall(this.endOperation.bind(this,!0)),this.on(\"change\",function(){this.curOp||(this.startOperation(),this.curOp.selectionBefore=this.$lastSel),this.curOp.docChanged=!0}.bind(this),!0),this.on(\"changeSelection\",function(){this.curOp||(this.startOperation(),this.curOp.selectionBefore=this.$lastSel),this.curOp.selectionChanged=!0}.bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp=this.session.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.selectionBefore=this.selection.toJSON()},this.endOperation=function(e){if(this.curOp){if(e&&e.returnValue===!1)return this.curOp=null;if(e==1&&this.curOp.command&&this.curOp.command.name==\"mouse\")return;this._signal(\"beforeEndOperation\");if(!this.curOp)return;var t=this.curOp.command,n=t&&t.scrollIntoView;if(n){switch(n){case\"center-animate\":n=\"animate\";case\"center\":this.renderer.scrollCursorIntoView(null,.5);break;case\"animate\":case\"cursor\":this.renderer.scrollCursorIntoView();break;case\"selectionPart\":var r=this.selection.getRange(),i=this.renderer.layerConfig;(r.start.row>=i.lastRow||r.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}n==\"animate\"&&this.renderer.animateScrolling(this.curOp.scrollTop)}var s=this.selection.toJSON();this.curOp.selectionAfter=s,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(s),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name==\"insertstring\"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\\s/.test(i)||/\\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!=\"always\"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e==\"string\"&&e!=\"ace\"){this.$keybindingId=e;var n=this;g.loadModule([\"keybinding\",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off(\"change\",this.$onDocumentChange),this.session.off(\"changeMode\",this.$onChangeMode),this.session.off(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.session.off(\"changeTabSize\",this.$onChangeTabSize),this.session.off(\"changeWrapLimit\",this.$onChangeWrapLimit),this.session.off(\"changeWrapMode\",this.$onChangeWrapMode),this.session.off(\"changeFold\",this.$onChangeFold),this.session.off(\"changeFrontMarker\",this.$onChangeFrontMarker),this.session.off(\"changeBackMarker\",this.$onChangeBackMarker),this.session.off(\"changeBreakpoint\",this.$onChangeBreakpoint),this.session.off(\"changeAnnotation\",this.$onChangeAnnotation),this.session.off(\"changeOverwrite\",this.$onCursorChange),this.session.off(\"changeScrollTop\",this.$onScrollTopChange),this.session.off(\"changeScrollLeft\",this.$onScrollLeftChange);var n=this.session.getSelection();n.off(\"changeCursor\",this.$onCursorChange),n.off(\"changeSelection\",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on(\"change\",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on(\"changeMode\",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on(\"changeTabSize\",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on(\"changeWrapLimit\",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on(\"changeWrapMode\",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on(\"changeFold\",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on(\"changeFrontMarker\",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on(\"changeBackMarker\",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on(\"changeBreakpoint\",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on(\"changeAnnotation\",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on(\"changeOverwrite\",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on(\"changeScrollTop\",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on(\"changeScrollLeft\",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on(\"changeCursor\",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on(\"changeSelection\",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal(\"changeSession\",{session:e,oldSession:t}),this.curOp=null,t&&t._signal(\"changeEditor\",{oldEditor:this}),e&&e._signal(\"changeEditor\",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption(\"fontSize\")||i.computedStyle(this.container).fontSize},this.setFontSize=function(e){this.setOption(\"fontSize\",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,\"ace_bracket\",\"text\"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}if(i.type.indexOf(\"tag-open\")!=-1){i=r.stepForward();if(!i)return}var s=i.value,o=0,u=r.stepBackward();if(u.value==\"<\"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(i&&o>=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(u&&o<=0);r.stepForward()}if(!i){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}var a=r.getCurrentTokenRow(),f=r.getCurrentTokenColumn(),l=new p(a,f,a,f+i.value.length),c=t.$backMarkers[t.$tagHighlight];t.$tagHighlight&&c!=undefined&&l.compareRange(c.range)!==0&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),t.$tagHighlight||(t.$tagHighlight=t.addMarker(l,\"ace_bracket\",\"text\"))},50)},this.focus=function(){var e=this;setTimeout(function(){e.isFocused()||e.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){if(this.$isFocused)return;this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit(\"focus\",e)},this.onBlur=function(e){if(!this.$isFocused)return;this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit(\"blur\",e)},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=this.session.$useWrapMode,n=e.start.row==e.end.row?e.end.row:Infinity;this.renderer.updateLines(e.start.row,n,t),this._signal(\"change\",e),this.$cursorChange(),this.$updateHighlightActiveLine()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine(),this._signal(\"changeSelection\")},this.$updateHighlightActiveLine=function(){var e=this.getSession(),t;if(this.$highlightActiveLine){if(this.$selectionStyle!=\"line\"||!this.selection.isMultiLine())t=this.getCursorPosition();this.renderer.theme&&this.renderer.theme.$selectionColorConflict&&!this.selection.isEmpty()&&(t=!1),this.renderer.$maxLines&&this.session.getLength()===1&&!(this.renderer.$minLines>1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,\"ace_active-line\",\"screenLine\"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal(\"changeBackMarker\"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,\"ace_selection\",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal(\"changeSelection\")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column,r=t.end.column,i=e.getLine(t.start.row),s=i.substring(n,r);if(s.length>5e3||!/[\\w\\d]/.test(s))return;var o=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s}),u=i.substring(n-1,r+1);if(!o.test(u))return;return o},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit(\"changeMode\",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText(),t=this.session.doc.getNewLineCharacter(),n=!1;if(!e&&this.$copyWithEmptySelection){n=!0;var r=this.selection.getAllRanges();for(var i=0;i<r.length;i++){var s=r[i];if(i&&r[i-1].start.row==s.start.row)continue;e+=this.session.getLine(s.start.row)+t}}var o={text:e};return this._signal(\"copy\",o),b.lineMode=n?o.text:\"\",o.text},this.onCopy=function(){this.commands.exec(\"copy\",this)},this.onCut=function(){this.commands.exec(\"cut\",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec(\"paste\",this,n)},this.$handlePaste=function(e){typeof e==\"string\"&&(e={text:e}),this._signal(\"paste\",e);var t=e.text,n=t==b.lineMode,r=this.session;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)n?r.insert({row:this.selection.lead.row,column:0},t):this.insert(t);else if(n)this.selection.rangeList.ranges.forEach(function(e){r.insert({row:e.start.row,column:0},t)});else{var i=t.split(/\\r\\n|\\r|\\n/),s=this.selection.rangeList.ranges;if(i.length>s.length||i.length<2||!i[1])return this.commands.exec(\"insertstring\",this,t);for(var o=s.length;o--;){var u=s[o];u.isEmpty()||r.remove(u),r.insert(u.start,i[o])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),\"insertion\",this,n,e);s&&(e!==s.text&&(this.inVirtualSelectionMode||(this.session.mergeUndoDeltas=!1,this.mergeNextCommand=!1)),e=s.text)}e==\"\t\"&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()&&e.indexOf(\"\\n\")==-1){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e==\"\\n\"||e==\"\\r\\n\"){var u=n.getLine(i.row);if(i.column>u.search(/\\S|$/)){var a=u.substr(i.column).search(/\\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:\"insertstring\"}});var n=this.applyComposition.bind(this,e,t);this.selection.rangeCount?this.forEachSelection(n):n(),this.endOperation()},this.applyComposition=function(e,t){if(t.extendLeft||t.extendRight){var n=this.selection.getRange();n.start.column-=t.extendLeft,n.end.column+=t.extendRight,this.selection.setRange(n),!e&&!n.isEmpty()&&this.remove()}(e||!this.selection.isEmpty())&&this.insert(e,!0);if(t.restoreStart||t.restoreEnd){var n=this.selection.getRange();n.start.column-=t.restoreStart,n.end.column-=t.restoreEnd,this.selection.setRange(n)}},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption(\"scrollSpeed\",e)},this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\")},this.setDragDelay=function(e){this.setOption(\"dragDelay\",e)},this.getDragDelay=function(){return this.getOption(\"dragDelay\")},this.setSelectionStyle=function(e){this.setOption(\"selectionStyle\",e)},this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\")},this.setHighlightActiveLine=function(e){this.setOption(\"highlightActiveLine\",e)},this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\")},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.setHighlightSelectedWord=function(e){this.setOption(\"highlightSelectedWord\",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption(\"readOnly\",e)},this.getReadOnly=function(){return this.getOption(\"readOnly\")},this.setBehavioursEnabled=function(e){this.setOption(\"behavioursEnabled\",e)},this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\")},this.setWrapBehavioursEnabled=function(e){this.setOption(\"wrapBehavioursEnabled\",e)},this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\")},this.setShowFoldWidgets=function(e){this.setOption(\"showFoldWidgets\",e)},this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.remove=function(e){this.selection.isEmpty()&&(e==\"left\"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,\"deletion\",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]==\"\\n\"){var o=n.getLine(t.end.row);/^\\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert(\"\\n\"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;t<n.length?(r=n.charAt(t)+n.charAt(t-1),i=new p(e.row,t-1,e.row,t+1)):(r=n.charAt(t-1)+n.charAt(t-2),i=new p(e.row,t-2,e.row,t)),this.session.replace(i,r),this.session.selection.moveToPosition(i.end)},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(t.start.row<t.end.row){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}if(t.start.column<t.end.column){var r=e.getTextRange(t);if(!/^\\s+$/.test(r)){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}}var i=e.getLine(t.start.row),o=t.start,u=e.getTabSize(),a=e.documentToScreenColumn(o.row,o.column);if(this.session.getUseSoftTabs())var f=u-a%u,l=s.stringRepeat(\" \",f);else{var f=a%u;while(i[t.start.column-1]==\" \"&&f)t.start.column--,f--;this.selection.setSelectionRange(t),l=\"\t\"}return this.insert(l)},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,\"\t\")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){var e=this.$getSelectedRows(),t=this.session,n=[];for(var r=e.first;r<=e.last;r++)n.push(t.getLine(r));n.sort(function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0});var i=new p(0,0,0,0);for(var r=e.first;r<=e.last;r++){var s=t.getLine(r);i.start.row=r,i.end.row=r,i.end.column=s.length,t.replace(i,n[r-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex<t){var i=n.exec(r);if(i.index<=t&&i.index+i[0].length>=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(\".\")>=0?s.start+s.value.indexOf(\".\")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&n<o?e*=Math.pow(10,s.end-n-1):e*=Math.pow(10,s.end-n),a+=e,a/=Math.pow(10,u);var f=a.toFixed(u),l=new p(t,s.start,t,s.end);this.session.replace(l,f),this.moveCursorTo(t,Math.max(s.start+1,n+f.length-s.value.length))}}else this.toggleWord()},this.$toggleWordPairs=[[\"first\",\"last\"],[\"true\",\"false\"],[\"yes\",\"no\"],[\"width\",\"height\"],[\"top\",\"bottom\"],[\"right\",\"left\"],[\"on\",\"off\"],[\"x\",\"y\"],[\"get\",\"set\"],[\"max\",\"min\"],[\"horizontal\",\"vertical\"],[\"show\",\"hide\"],[\"add\",\"remove\"],[\"up\",\"down\"],[\"before\",\"after\"],[\"even\",\"odd\"],[\"inside\",\"outside\"],[\"next\",\"previous\"],[\"increase\",\"decrease\"],[\"attach\",\"detach\"],[\"&&\",\"||\"],[\"==\",\"!=\"]],this.toggleWord=function(){var e=this.selection.getCursor().row,t=this.selection.getCursor().column;this.selection.selectWord();var n=this.getSelectedText(),r=this.selection.getWordRange().start.column,i=n.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g,\"$1 \").split(/\\s/),o=t-r-1;o<0&&(o=0);var u=0,a=0,f=this;n.match(/[A-Za-z0-9_]+/)&&i.forEach(function(t,i){a=u+t.length,o>=u&&o<=a&&(n=t,f.selection.clearSelection(),f.moveCursorTo(e,u+r),f.selection.selectTo(e,a+r)),u=a});var l=this.$toggleWordPairs,c;for(var h=0;h<l.length;h++){var p=l[h];for(var d=0;d<=1;d++){var v=+!d,m=n.match(new RegExp(\"^\\\\s?_?(\"+s.escapeRegExp(p[d])+\")\\\\s?$\",\"i\"));if(m){var g=n.match(new RegExp(\"([_]|^|\\\\s)(\"+s.escapeRegExp(m[1])+\")($|\\\\s)\",\"g\"));g&&(c=n.replace(new RegExp(s.escapeRegExp(p[d]),\"i\"),function(e){var t=p[v];return e.toUpperCase()==e?t=t.toUpperCase():e.charAt(0).toUpperCase()==e.charAt(0)&&(t=t.substr(0,0)+p[v].charAt(0).toUpperCase()+t.substr(1)),t}),this.insert(c),c=\"\")}}}},this.removeLines=function(){var e=this.$getSelectedRows();this.session.removeFullLines(e.first,e.last),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,n=e.getRange(),r=e.isBackwards();if(n.isEmpty()){var i=n.start.row;t.duplicateLines(i,i)}else{var s=r?n.start:n.end,o=t.insert(s,t.getTextRange(n),!1);n.start=s,n.end=o,e.setSelectionRange(n,r)}},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,n){return this.session.moveText(e,t,n)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var n,r,i=this.selection;if(!i.inMultiSelectMode||this.inVirtualSelectionMode){var s=i.toOrientedRange();n=this.$getSelectedRows(s),r=this.session.$moveLines(n.first,n.last,t?0:e),t&&e==-1&&(r=0),s.moveBy(r,0),i.fromOrientedRange(s)}else{var o=i.rangeList.ranges;i.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;var u=0,a=0,f=o.length;for(var l=0;l<f;l++){var c=l;o[l].moveBy(u,0),n=this.$getSelectedRows(o[l]);var h=n.first,p=n.last;while(++l<f){a&&o[l].moveBy(a,0);var d=this.$getSelectedRows(o[l]);if(t&&d.first!=p)break;if(!t&&d.first>p+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection());var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(s.value.match(/[{}()\\[\\]]/g))for(;f<s.value.length&&!u;f++){if(!c[s.value[f]])continue;l=c[s.value[f]]+\".\"+s.type.replace(\"rparen\",\"lparen\"),isNaN(a[l])&&(a[l]=0);switch(s.value[f]){case\"(\":case\"[\":case\"{\":a[l]++;break;case\")\":case\"]\":case\"}\":a[l]--,a[l]===-1&&(o=\"bracket\",u=!0)}}else s.type.indexOf(\"tag-name\")!==-1&&(isNaN(a[s.value])&&(a[s.value]=0),i.value===\"<\"?a[s.value]++:i.value===\"</\"&&a[s.value]--,a[s.value]===-1&&(o=\"tag\",u=!0));u||(i=s,s=r.stepForward(),f=0)}while(s&&!u);if(!o)return;var h,d;if(o===\"bracket\"){h=this.session.getBracketRange(n);if(!h){h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1,r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1),d=h.start;if(t||d.row===n.row&&Math.abs(d.column-n.column)<2)h=this.session.getBracketRange(d)}}else if(o===\"tag\"){if(!s||s.type.indexOf(\"tag-name\")===-1)return;var v=s.value;h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2,r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2);if(h.compare(n.row,n.column)===0){u=!1;do s=i,i=r.stepBackward(),i&&(i.type.indexOf(\"tag-close\")!==-1&&h.setEnd(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+1),s.value===v&&s.type.indexOf(\"tag-name\")!==-1&&(i.value===\"<\"?a[v]++:i.value===\"</\"&&a[v]--,a[v]===0&&(u=!0)));while(i&&!u)}s&&s.type.indexOf(\"tag-name\")&&(d=h.start,d.row==n.row&&Math.abs(d.column-n.column)<2&&(d=h.end))}d=h&&h.cursor||d,d&&(e?h&&t?this.selection.setRange(h):h&&h.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(d.row,d.column):this.selection.moveTo(d.row,d.column))},this.gotoLine=function(e,t,n){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,n)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var n=this.$search.find(this.session),r=0;return n?(this.$tryReplace(n,e)&&(r=1),this.selection.setSelectionRange(n),this.renderer.scrollSelectionIntoView(n.start,n.end),r):r},this.replaceAll=function(e,t){t&&this.$search.set(t);var n=this.$search.findAll(this.session),r=0;if(!n.length)return r;var i=this.getSelectionRange();this.selection.moveTo(0,0);for(var s=n.length-1;s>=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e==\"string\"||e instanceof RegExp?t.needle=e:typeof e==\"object\"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.session.unfold(e),this.selection.setSelectionRange(e);var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal(\"destroy\",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement(\"div\"));var i=this.$scrollAnchor;i.style.cssText=\"position:absolute\",this.container.insertBefore(i,this.container.firstChild);var s=this.on(\"changeSelection\",function(){r=!0}),o=this.renderer.on(\"beforeRender\",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on(\"afterRender\",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.top<o.height&&s.top+t.top+o.lineHeight>window.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+\"px\",i.style.left=s.left+\"px\",i.style.height=o.lineHeight+\"px\",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.off(\"changeSelection\",s),this.renderer.off(\"afterRender\",u),this.renderer.off(\"beforeRender\",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||\"ace\",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!=\"wide\",i.setCssClass(t.element,\"ace_slim-cursors\",/slim/.test(e))}}.call(w.prototype),g.defineOptions(w.prototype,\"editor\",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal(\"changeSelectionStyle\",{data:e})},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[!1,!0,\"always\"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?E.attach(this):E.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?E.attach(this):E.detach(this)}},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",displayIndentGuides:\"renderer\",showGutter:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",hasCssTransforms:\"renderer\",maxPixelHeight:\"renderer\",useTextareaForIME:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimeout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",navigateWithinSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",indentedSoftWrap:\"session\",foldStyle:\"session\",mode:\"session\"});var E={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?\"\\u00b7\":\"\"))+\"\"},getWidth:function(e,t,n){return Math.max(t.toString().length,(n.lastRow+1).toString().length,2)*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on(\"changeSelection\",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off(\"changeSelection\",this.update),this.update(null,e)}};t.Editor=w}),ace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";function i(e,t){for(var n=t;n--;){var r=e[n];if(r&&!r[0].ignore){while(n<t-1){var i=d(e[n],e[n+1]);e[n]=i[0],e[n+1]=i[1],n++}return!0}}}function a(e){var t=e.action==\"insert\",n=e.start,r=e.end,i=(r.row-n.row)*(t?1:-1),s=(r.column-n.column)*(t?1:-1);t&&(r=n);for(var o in this.marks){var a=this.marks[o],f=u(a,n);if(f<0)continue;if(f===0&&t){if(a.bias!=1){a.bias==-1;continue}f=1}var l=t?f:u(a,r);if(l>0){a.row+=i,a.column+=a.row==r.row?s:0;continue}!t&&l<=0&&(a.row=n.row,a.column=n.column,l===0&&(a.bias=1))}}function f(e){return{row:e.row,column:e.column}}function l(e){return{start:f(e.start),end:f(e.end),action:e.action,lines:e.lines.slice()}}function c(e){e=e||this;if(Array.isArray(e))return e.map(c).join(\"\\n\");var t=\"\";e.action?(t=e.action==\"insert\"?\"+\":\"-\",t+=\"[\"+e.lines+\"]\"):e.value&&(Array.isArray(e.value)?t=e.value.map(h).join(\"\\n\"):t=h(e.value)),e.start&&(t+=h(e));if(e.id||e.rev)t+=\"\t(\"+(e.id||e.rev)+\")\";return t}function h(e){return e.start.row+\":\"+e.start.column+\"=>\"+e.end.row+\":\"+e.end.column}function p(e,t){var n=e.action==\"insert\",r=t.action==\"insert\";if(n&&r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}else if(!n&&r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(!n&&!r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}return[t,e]}function d(e,t){for(var n=e.length;n--;)for(var r=0;r<t.length;r++)if(!p(e[n],t[r])){while(n<e.length){while(r--)p(t[r],e[n]);r=t.length,n++}return[e,t]}return e.selectionBefore=t.selectionBefore=e.selectionAfter=t.selectionAfter=null,[t,e]}function v(e,t){var n=e.action==\"insert\",r=t.action==\"insert\";if(n&&r)o(e.start,t.start)<0?m(t,e,1):m(e,t,1);else if(n&&!r)o(e.start,t.end)>=0?m(e,t,-1):o(e.start,t.start)<=0?m(t,e,1):(m(e,s.fromPoints(t.start,e.start),-1),m(t,e,1));else if(!n&&r)o(t.start,e.end)>=0?m(t,e,-1):o(t.start,e.start)<=0?m(e,t,1):(m(t,s.fromPoints(e.start,t.start),-1),m(e,t,1));else if(!n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0)){var i,u;return o(e.start,t.start)<0&&(i=e,e=y(e,t.start)),o(e.end,t.end)>0&&(u=y(e,t.end)),g(t.end,e.start,e.end,-1),u&&!i&&(e.lines=u.lines,e.start=u.start,e.end=u.end,u=e),[t,i,u].filter(Boolean)}m(e,t,-1)}return[t,e]}function m(e,t,n){g(e.start,t.start,t.end,n),g(e.end,t.start,t.end,n)}function g(e,t,n,r){e.row==(r==1?t:n).row&&(e.column+=r*(n.column-t.column)),e.row+=r*(n.row-t.row)}function y(e,t){var n=e.lines,r=e.end;e.end=f(t);var i=e.end.row-e.start.row,s=n.splice(i,n.length),o=i?t.column:t.column-e.start.column;n.push(s[0].substring(0,o)),s[0]=s[0].substr(o);var u={start:f(t),end:r,lines:s,action:e.action};return u}function b(e,t){t=l(t);for(var n=e.length;n--;){var r=e[n];for(var i=0;i<r.length;i++){var s=r[i],o=v(s,t);t=o[0],o.length!=2&&(o[2]?(r.splice(i+1,1,o[1],o[2]),i++):o[1]||(r.splice(i,1),i--))}r.length||e.splice(n,1)}return e}function w(e,t){for(var n=0;n<t.length;n++){var r=t[n];for(var i=0;i<r.length;i++)b(e,r[i])}}var r=function(){this.$maxRev=0,this.$fromUndo=!1,this.reset()};(function(){this.addSession=function(e){this.$session=e},this.add=function(e,t,n){if(this.$fromUndo)return;if(e==this.$lastDelta)return;if(t===!1||!this.lastDeltas)this.lastDeltas=[],this.$undoStack.push(this.lastDeltas),e.id=this.$rev=++this.$maxRev;if(e.action==\"remove\"||e.action==\"insert\")this.$lastDelta=e;this.lastDeltas.push(e)},this.addSelection=function(e,t){this.selections.push({value:e,rev:t||this.$rev})},this.startNewGroup=function(){return this.lastDeltas=null,this.$rev},this.markIgnored=function(e,t){t==null&&(t=this.$rev+1);var n=this.$undoStack;for(var r=n.length;r--;){var i=n[r][0];if(i.id<=e)break;i.id<t&&(i.ignore=!0)}this.lastDeltas=null},this.getSelection=function(e,t){var n=this.selections;for(var r=n.length;r--;){var i=n[r];if(i.rev<e)return t&&(i=n[r+1]),i}},this.getRevision=function(){return this.$rev},this.getDeltas=function(e,t){t==null&&(t=this.$rev+1);var n=this.$undoStack,r=null,i=0;for(var s=n.length;s--;){var o=n[s][0];o.id<t&&!r&&(r=s+1);if(o.id<=e){i=s+1;break}}return n.slice(i,r)},this.getChangedRanges=function(e,t){t==null&&(t=this.$rev+1)},this.getChangedLines=function(e,t){t==null&&(t=this.$rev+1)},this.undo=function(e,t){this.lastDeltas=null;var n=this.$undoStack;if(!i(n,n.length))return;e||(e=this.$session),this.$redoStackBaseRev!==this.$rev&&this.$redoStack.length&&(this.$redoStack=[]),this.$fromUndo=!0;var r=n.pop(),s=null;return r&&r.length&&(s=e.undoChanges(r,t),this.$redoStack.push(r),this.$syncRev()),this.$fromUndo=!1,s},this.redo=function(e,t){this.lastDeltas=null,e||(e=this.$session),this.$fromUndo=!0;if(this.$redoStackBaseRev!=this.$rev){var n=this.getDeltas(this.$redoStackBaseRev,this.$rev+1);w(this.$redoStack,n),this.$redoStackBaseRev=this.$rev,this.$redoStack.forEach(function(e){e[0].id=++this.$maxRev},this)}var r=this.$redoStack.pop(),i=null;return r&&(i=e.redoChanges(r,t),this.$undoStack.push(r),this.$syncRev()),this.$fromUndo=!1,i},this.$syncRev=function(){var e=this.$undoStack,t=e[e.length-1],n=t&&t[0].id||0;this.$redoStackBaseRev=n,this.$rev=n},this.reset=function(){this.lastDeltas=null,this.$lastDelta=null,this.$undoStack=[],this.$redoStack=[],this.$rev=0,this.mark=0,this.$redoStackBaseRev=this.$rev,this.selections=[]},this.canUndo=function(){return this.$undoStack.length>0},this.canRedo=function(){return this.$redoStack.length>0},this.bookmark=function(e){e==undefined&&(e=this.$rev),this.mark=e},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(e){return e?c(e):c(this.$undoStack)+\"\\n---\\n\"+c(this.$redoStack)}}).call(r.prototype);var s=e(\"./range\").Range,o=s.comparePoints,u=s.comparePoints;t.UndoManager=r}),ace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=function(e,t){this.element=e,this.canvasHeight=t||5e5,this.element.style.height=this.canvasHeight*2+\"px\",this.cells=[],this.cellCache=[],this.$offsetCoefficient=0};(function(){this.moveContainer=function(e){r.translate(this.element,0,-(e.firstRowScreen*e.lineHeight%this.canvasHeight)-e.offset*this.$offsetCoefficient)},this.pageChanged=function(e,t){return Math.floor(e.firstRowScreen*e.lineHeight/this.canvasHeight)!==Math.floor(t.firstRowScreen*t.lineHeight/this.canvasHeight)},this.computeLineTop=function(e,t,n){var r=t.firstRowScreen*t.lineHeight,i=Math.floor(r/this.canvasHeight),s=n.documentToScreenRow(e,0)*t.lineHeight;return s-i*this.canvasHeight},this.computeLineHeight=function(e,t,n){return t.lineHeight*n.getRowLength(e)},this.getLength=function(){return this.cells.length},this.get=function(e){return this.cells[e]},this.shift=function(){this.$cacheCell(this.cells.shift())},this.pop=function(){this.$cacheCell(this.cells.pop())},this.push=function(e){if(Array.isArray(e)){this.cells.push.apply(this.cells,e);var t=r.createFragment(this.element);for(var n=0;n<e.length;n++)t.appendChild(e[n].element);this.element.appendChild(t)}else this.cells.push(e),this.element.appendChild(e.element)},this.unshift=function(e){if(Array.isArray(e)){this.cells.unshift.apply(this.cells,e);var t=r.createFragment(this.element);for(var n=0;n<e.length;n++)t.appendChild(e[n].element);this.element.firstChild?this.element.insertBefore(t,this.element.firstChild):this.element.appendChild(t)}else this.cells.unshift(e),this.element.insertAdjacentElement(\"afterbegin\",e.element)},this.last=function(){return this.cells.length?this.cells[this.cells.length-1]:null},this.$cacheCell=function(e){if(!e)return;e.element.remove(),this.cellCache.push(e)},this.createCell=function(e,t,n,i){var s=this.cellCache.pop();if(!s){var o=r.createElement(\"div\");i&&i(o),this.element.appendChild(o),s={element:o,text:\"\",row:e}}return s.row=e,s}}).call(i.prototype),t.Lines=i}),ace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\"],function(e,t,n){\"use strict\";function f(e){var t=document.createTextNode(\"\");e.appendChild(t);var n=r.createElement(\"span\");return e.appendChild(n),e}var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"../lib/event_emitter\").EventEmitter,u=e(\"./lines\").Lines,a=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_gutter-layer\",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$lines=new u(this.element),this.$lines.$offsetCoefficient=1};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener(\"change\",this.$updateAnnotations),this.session=e,e&&e.on(\"change\",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.addGutterDecoration\"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.removeGutterDecoration\"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var n=e[t],r=n.row,i=this.$annotations[r];i||(i=this.$annotations[r]={text:[]});var o=n.text;o=o?s.escapeHTML(o):n.html||\"\",i.text.indexOf(o)===-1&&i.text.push(o);var u=n.type;u==\"error\"?i.className=\" ace_error\":u==\"warning\"&&i.className!=\" ace_error\"?i.className=\" ace_warning\":u==\"info\"&&!i.className&&(i.className=\" ace_info\")}},this.$updateAnnotations=function(e){if(!this.$annotations.length)return;var t=e.start.row,n=e.end.row-t;if(n!==0)if(e.action==\"remove\")this.$annotations.splice(t,n+1,null);else{var r=new Array(n+1);r.unshift(t,1),this.$annotations.splice.apply(this.$annotations,r)}},this.update=function(e){this.config=e;var t=this.session,n=e.firstRow,r=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1);this.oldLastRow=r,this.config=e,this.$lines.moveContainer(e),this.$updateCursorRow();var i=t.getNextFoldLine(n),s=i?i.start.row:Infinity,o=null,u=-1,a=n;for(;;){a>s&&(a=i.end.row+1,i=t.getNextFoldLine(a,i),s=i?i.start.row:Infinity);if(a>r){while(this.$lines.getLength()>u+1)this.$lines.pop();break}o=this.$lines.get(++u),o?o.row=a:(o=this.$lines.createCell(a,e,this.session,f),this.$lines.push(o)),this.$renderCell(o,e,i,a),a++}this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,n=t.gutterRenderer||this.$renderer,r=t.$firstLineNumber,i=this.$lines.last()?this.$lines.last().text:\"\";if(this.$fixedWidth||t.$useWrapMode)i=t.getLength()+r-1;var s=n?n.getWidth(t,i,e):i.toString().length*e.characterWidth,o=this.$padding||this.$computePadding();s+=o.left+o.right,s!==this.gutterWidth&&!isNaN(s)&&(this.gutterWidth=s,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+\"px\",this._signal(\"changeGutterWidth\",s))},this.$updateCursorRow=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.getCursor();if(this.$cursorRow===e.row)return;this.$cursorRow=e.row},this.updateLineHighlight=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.cursor.row;this.$cursorRow=e;if(this.$cursorCell&&this.$cursorCell.row==e)return;this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\"));var t=this.$lines.cells;this.$cursorCell=null;for(var n=0;n<t.length;n++){var r=t[n];if(r.row>=this.$cursorRow){if(r.row>this.$cursorRow){var i=this.session.getFoldLine(this.$cursorRow);if(!(n>0&&i&&i.start.row==t[n-1].row))break;r=t[n-1]}r.element.className=\"ace_gutter-active-line \"+r.element.className,this.$cursorCell=r;break}}},this.scrollLines=function(e){var t=this.config;this.config=e,this.$updateCursorRow();if(this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=Math.min(e.lastRow+e.gutterOffset,this.session.getLength()-1),r=this.oldLastRow;this.oldLastRow=n;if(!t||r<e.firstRow)return this.update(e);if(n<t.firstRow)return this.update(e);if(t.firstRow<e.firstRow)for(var i=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);i>0;i--)this.$lines.shift();if(r>n)for(var i=this.session.getFoldedRowCount(n+1,r);i>0;i--)this.$lines.pop();e.firstRow<t.firstRow&&this.$lines.unshift(this.$renderLines(e,e.firstRow,t.firstRow-1)),n>r&&this.$lines.push(this.$renderLines(e,r+1,n)),this.updateLineHighlight(),this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$renderLines=function(e,t,n){var r=[],i=t,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>n)break;var u=this.$lines.createCell(i,e,this.session,f);this.$renderCell(u,e,s,i),r.push(u),i++}return r},this.$renderCell=function(e,t,n,i){var s=e.element,o=this.session,u=s.childNodes[0],a=s.childNodes[1],f=o.$firstLineNumber,l=o.$breakpoints,c=o.$decorations,h=o.gutterRenderer||this.$renderer,p=this.$showFoldWidgets&&o.foldWidgets,d=n?n.start.row:Number.MAX_VALUE,v=\"ace_gutter-cell \";this.$highlightGutterLine&&(i==this.$cursorRow||n&&i<this.$cursorRow&&i>=d&&this.$cursorRow<=n.end.row)&&(v+=\"ace_gutter-active-line \",this.$cursorCell!=e&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\")),this.$cursorCell=e)),l[i]&&(v+=l[i]),c[i]&&(v+=c[i]),this.$annotations[i]&&(v+=this.$annotations[i].className),s.className!=v&&(s.className=v);if(p){var m=p[i];m==null&&(m=p[i]=o.getFoldWidget(i))}if(m){var v=\"ace_fold-widget ace_\"+m;m==\"start\"&&i==d&&i<n.end.row?v+=\" ace_closed\":v+=\" ace_open\",a.className!=v&&(a.className=v);var g=t.lineHeight+\"px\";r.setStyle(a.style,\"height\",g),r.setStyle(a.style,\"display\",\"inline-block\")}else a&&r.setStyle(a.style,\"display\",\"none\");var y=(h?h.getText(o,i):i+f).toString();return y!==u.data&&(u.data=y),r.setStyle(e.element.style,\"height\",this.$lines.computeLineHeight(i,t,o)+\"px\"),r.setStyle(e.element.style,\"top\",this.$lines.computeLineTop(i,t,o)+\"px\"),e.text=y,e},this.$fixedWidth=!1,this.$highlightGutterLine=!0,this.$renderer=\"\",this.setHighlightGutterLine=function(e){this.$highlightGutterLine=e},this.$showLineNumbers=!0,this.$renderer=\"\",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return 0},getText:function(){return\"\"}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?r.addCssClass(this.element,\"ace_folding-enabled\"):r.removeCssClass(this.element,\"ace_folding-enabled\"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=r.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=(parseInt(e.borderLeftWidth)||0)+(parseInt(e.paddingLeft)||0)+1,this.$padding.right=(parseInt(e.borderRightWidth)||0)+(parseInt(e.paddingRight)||0),this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),n=this.element.getBoundingClientRect();if(e.x<t.left+n.left)return\"markers\";if(this.$showFoldWidgets&&e.x>n.right-t.right)return\"foldWidgets\"}}).call(a.prototype),t.Gutter=a}),ace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../lib/dom\"),s=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_marker-layer\",e.appendChild(this.element)};(function(){function e(e,t,n,r){return(e?1:0)|(t?2:0)|(n?4:0)|(r?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var n=this.i!=-1&&this.element.childNodes[this.i];n?this.i++:(n=document.createElement(\"div\"),this.element.appendChild(n),this.i=-1),n.style.cssText=t,n.className=e},this.update=function(e){if(!e)return;this.config=e,this.i=0;var t;for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type==\"fullLine\"?this.drawFullLineMarker(t,i,r.clazz,e):r.type==\"screenLine\"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type==\"text\"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+\" ace_start\"+\" ace_br15\",e)}if(this.i!=-1)while(this.i<this.element.childElementCount)this.element.removeChild(this.element.lastChild)},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,n,i,s,o){var u=this.session,a=n.start.row,f=n.end.row,l=a,c=0,h=0,p=u.getScreenLastRowColumn(l),d=new r(l,n.start.column,l,h);for(;l<=f;l++)d.start.row=d.end.row=l,d.start.column=l==a?n.start.column:u.getRowWrapIndent(l),d.end.column=p,c=h,h=p,p=l+1<f?u.getScreenLastRowColumn(l+1):l==f?0:n.end.column,this.drawSingleLineMarker(t,d,i+(l==a?\" ace_start\":\"\")+\" ace_br\"+e(l==a||l==a+1&&n.start.column,c<h,h>p,l==f),s,l==f?0:1,o)},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;i=i||\"\";if(this.session.$bidiHandler.isBidiRow(t.start.row)){var f=t.clone();f.end.row=f.start.row,f.end.column=this.session.getLine(f.start.row).length,this.drawBidiSingleLineMarker(e,f,n+\" ace_br1 ace_start\",r,null,i)}else this.elt(n+\" ace_br1 ace_start\",\"height:\"+o+\"px;\"+\"right:0;\"+\"top:\"+u+\"px;left:\"+a+\"px;\"+(i||\"\"));if(this.session.$bidiHandler.isBidiRow(t.end.row)){var f=t.clone();f.start.row=f.end.row,f.start.column=0,this.drawBidiSingleLineMarker(e,f,n+\" ace_br12\",r,null,i)}else{u=this.$getTop(t.end.row,r);var l=t.end.column*r.characterWidth;this.elt(n+\" ace_br12\",\"height:\"+o+\"px;\"+\"width:\"+l+\"px;\"+\"top:\"+u+\"px;\"+\"left:\"+s+\"px;\"+(i||\"\"))}o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<=0)return;u=this.$getTop(t.start.row+1,r);var c=(t.start.column?1:0)|(t.end.column?0:8);this.elt(n+(c?\" ace_br\"+c:\"\"),\"height:\"+o+\"px;\"+\"right:0;\"+\"top:\"+u+\"px;\"+\"left:\"+s+\"px;\"+(i||\"\"))},this.drawSingleLineMarker=function(e,t,n,r,i,s){if(this.session.$bidiHandler.isBidiRow(t.start.row))return this.drawBidiSingleLineMarker(e,t,n,r,i,s);var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;this.elt(n,\"height:\"+o+\"px;\"+\"width:\"+u+\"px;\"+\"top:\"+a+\"px;\"+\"left:\"+f+\"px;\"+(s||\"\"))},this.drawBidiSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=this.$getTop(t.start.row,r),a=this.$padding,f=this.session.$bidiHandler.getSelections(t.start.column,t.end.column);f.forEach(function(e){this.elt(n,\"height:\"+o+\"px;\"+\"width:\"+e.width+(i||0)+\"px;\"+\"top:\"+u+\"px;\"+\"left:\"+(a+e.left)+\"px;\"+(s||\"\"))},this)},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),this.elt(n,\"height:\"+o+\"px;\"+\"top:\"+s+\"px;\"+\"left:0;right:0;\"+(i||\"\"))},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;this.elt(n,\"height:\"+o+\"px;\"+\"top:\"+s+\"px;\"+\"left:0;right:0;\"+(i||\"\"))}}).call(s.prototype),t.Marker=s}),ace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"./lines\").Lines,u=e(\"../lib/event_emitter\").EventEmitter,a=function(e){this.dom=i,this.element=this.dom.createElement(\"div\"),this.element.className=\"ace_layer ace_text-layer\",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new o(this.element)};(function(){r.implement(this,u),this.EOF_CHAR=\"\\u00b6\",this.EOL_CHAR_LF=\"\\u00ac\",this.EOL_CHAR_CRLF=\"\\u00a4\",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR=\"\\u2014\",this.SPACE_CHAR=\"\\u00b7\",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var e=this.session.doc,t=e.getNewLineCharacter()==\"\\n\"&&e.getNewLineMode()!=\"windows\",n=t?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=n)return this.EOL_CHAR=n,!0},this.setPadding=function(e){this.$padding=e,this.element.style.margin=\"0 \"+e+\"px\"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on(\"changeCharacterSize\",function(e){this._signal(\"changeCharacterSize\",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n<e+1;n++)if(this.showInvisibles){var r=this.dom.createElement(\"span\");r.className=\"ace_invisible ace_invisible_tab\",r.textContent=s.stringRepeat(this.TAB_CHAR,n),t.push(r)}else t.push(this.dom.createTextNode(s.stringRepeat(\" \",n),this.element));if(this.displayIndentGuides){this.$indentGuideRe=/\\s\\S| \\t|\\t |\\s$/;var i=\"ace_indent-guide\",o=\"\",u=\"\";if(this.showInvisibles){i+=\" ace_invisible\",o=\" ace_invisible_space\",u=\" ace_invisible_tab\";var a=s.stringRepeat(this.SPACE_CHAR,this.tabSize),f=s.stringRepeat(this.TAB_CHAR,this.tabSize)}else var a=s.stringRepeat(\" \",this.tabSize),f=a;var r=this.dom.createElement(\"span\");r.className=i+o,r.textContent=a,this.$tabStrings[\" \"]=r;var r=this.dom.createElement(\"span\");r.className=i+u,r.textContent=f,this.$tabStrings[\"\t\"]=r}},this.updateLines=function(e,t,n){if(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)return this.update(e);this.config=e;var r=Math.max(t,e.firstRow),i=Math.min(n,e.lastRow),s=this.element.childNodes,o=0;for(var u=e.firstRow;u<r;u++){var a=this.session.getFoldLine(u);if(a){if(a.containsRow(r)){r=a.start.row;break}u=a.end.row}o++}var f=!1,u=r,a=this.session.getNextFoldLine(u),l=a?a.start.row:Infinity;for(;;){u>l&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),l=a?a.start.row:Infinity);if(u>i)break;var c=s[o++];if(c){this.dom.removeChildren(c),this.$renderLine(c,u,u==l?a:!1);var h=e.lineHeight*this.session.getRowLength(u)+\"px\";c.style.height!=h&&(f=!0,c.style.height=h)}u++}if(f)while(o<this.$lines.cells.length){var p=this.$lines.cells[o++];p.element.style.top=this.$lines.computeLineTop(p.row,e,this.session)+\"px\"}},this.scrollLines=function(e){var t=this.config;this.config=e;if(this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=e.lastRow,r=t?t.lastRow:-1;if(!t||r<e.firstRow)return this.update(e);if(n<t.firstRow)return this.update(e);if(!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);if(t.firstRow<e.firstRow)for(var i=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);i>0;i--)this.$lines.shift();if(t.lastRow>e.lastRow)for(var i=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);i>0;i--)this.$lines.pop();e.firstRow<t.firstRow&&this.$lines.unshift(this.$renderLinesFragment(e,e.firstRow,t.firstRow-1)),e.lastRow>t.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,n){var r=[],s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=this.$lines.createCell(s,e,this.session),f=a.element;this.dom.removeChildren(f),i.setStyle(f.style,\"height\",this.$lines.computeLineHeight(s,e,this.session)+\"px\"),i.setStyle(f.style,\"top\",this.$lines.computeLineTop(s,e,this.session)+\"px\"),this.$renderLine(f,s,s==u?o:!1),this.$useLineGroups()?f.className=\"ace_line_group\":f.className=\"ace_line\",r.push(a),s++}return r},this.update=function(e){this.$lines.moveContainer(e),this.config=e;var t=e.firstRow,n=e.lastRow,r=this.$lines;while(r.getLength())r.pop();r.push(this.$renderLinesFragment(e,t,n))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var o=this,u=/(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g,a=this.dom.createFragment(this.element),f,l=0;while(f=u.exec(r)){var c=f[1],h=f[2],p=f[3],d=f[4],v=f[5];if(!o.showInvisibles&&h)continue;var m=l!=f.index?r.slice(l,f.index):\"\";l=f.index+f[0].length,m&&a.appendChild(this.dom.createTextNode(m,this.element));if(c){var g=o.session.getScreenTabSize(t+f.index);a.appendChild(o.$tabStrings[g].cloneNode(!0)),t+=g-1}else if(h)if(o.showInvisibles){var y=this.dom.createElement(\"span\");y.className=\"ace_invisible ace_invisible_space\",y.textContent=s.stringRepeat(o.SPACE_CHAR,h.length),a.appendChild(y)}else a.appendChild(this.com.createTextNode(h,this.element));else if(p){var y=this.dom.createElement(\"span\");y.className=\"ace_invisible ace_invisible_space ace_invalid\",y.textContent=s.stringRepeat(o.SPACE_CHAR,p.length),a.appendChild(y)}else if(d){var b=o.showInvisibles?o.SPACE_CHAR:\"\";t+=1;var y=this.dom.createElement(\"span\");y.style.width=o.config.characterWidth*2+\"px\",y.className=o.showInvisibles?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\",y.textContent=o.showInvisibles?o.SPACE_CHAR:\"\",a.appendChild(y)}else if(v){t+=1;var y=i.createElement(\"span\");y.style.width=o.config.characterWidth*2+\"px\",y.className=\"ace_cjk\",y.textContent=v,a.appendChild(y)}}a.appendChild(this.dom.createTextNode(l?r.slice(l):r,this.element));if(!this.$textToken[n.type]){var w=\"ace_\"+n.type.replace(/\\./g,\" ace_\"),y=this.dom.createElement(\"span\");n.type==\"fold\"&&(y.style.width=n.value.length*this.config.characterWidth+\"px\"),y.className=w,y.appendChild(a),e.appendChild(y)}else e.appendChild(a);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);if(r<=0||r>=n)return t;if(t[0]==\" \"){r-=r%this.tabSize;var i=r/this.tabSize;for(var s=0;s<i;s++)e.appendChild(this.$tabStrings[\" \"].cloneNode(!0));return t.substr(r)}if(t[0]==\"\t\"){for(var s=0;s<r;s++)e.appendChild(this.$tabStrings[\"\t\"].cloneNode(!0));return t.substr(r)}return t},this.$createLineElement=function(e){var t=this.dom.createElement(\"div\");return t.className=\"ace_line\",t.style.height=this.config.lineHeight+\"px\",t},this.$renderWrappedLine=function(e,t,n){var r=0,i=0,o=n[0],u=0,a=this.$createLineElement();e.appendChild(a);for(var f=0;f<t.length;f++){var l=t[f],c=l.value;if(f==0&&this.displayIndentGuides){r=c.length,c=this.renderIndentGuide(a,c,o);if(!c)continue;r-=c.length}if(r+c.length<o)u=this.$renderToken(a,u,l,c),r+=c.length;else{while(r+c.length>=o)u=this.$renderToken(a,u,l,c.substring(0,o-r)),c=c.substring(o-r),r=o,a=this.$createLineElement(),e.appendChild(a),a.appendChild(this.dom.createTextNode(s.stringRepeat(\"\\u00a0\",n.indent),this.element)),i++,u=0,o=n[i]||Number.MAX_VALUE;c.length!=0&&(r+=c.length,u=this.$renderToken(a,u,l,c))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s<t.length;s++){r=t[s],i=r.value;if(n+i.length>this.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,n,r,i);n=this.$renderToken(e,n,r,i)}},this.$renderOverflowMessage=function(e,t,n,r){this.$renderToken(e,t,n,r.slice(0,this.MAX_LINE_LENGTH-t));var i=this.dom.createElement(\"span\");i.className=\"ace_inline_button ace_keyword ace_toggle_wrap\",i.style.position=\"absolute\",i.style.right=\"0\",i.textContent=\"<click to see more...>\",e.appendChild(i)},this.$renderLine=function(e,t,n){!n&&n!=0&&(n=this.session.getFoldLine(t));if(n)var r=this.$getFoldLineTokens(t,n);else var r=this.session.getTokens(t);var i=e;if(r.length){var s=this.session.getRowSplitData(t);if(s&&s.length){this.$renderWrappedLine(e,r,s);var i=e.lastChild}else{var i=e;this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i)),this.$renderSimpleLine(i,r)}}else this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i));if(this.showInvisibles&&i){n&&(t=n.end.row);var o=this.dom.createElement(\"span\");o.className=\"ace_invisible ace_invisible_eol\",o.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,i.appendChild(o)}},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.length<t){s+=e[i].value.length,i++;if(i==e.length)return}if(s!=t){var o=e[i].value.substring(t-s);o.length>n-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(s<n&&i<e.length){var o=e[i].value;o.length+s>n?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:\"fold\",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(a.prototype),t.Text=a}),ace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_cursor-layer\",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,\"ace_hidden-cursors\"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)r.setStyle(t[n].style,\"opacity\",e?\"\":\"0\")},this.$startCssAnimation=function(){var e=this.cursors;for(var t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+\"ms\";setTimeout(function(){r.addCssClass(this.element,\"ace_animate-blinking\")}.bind(this))},this.$stopCssAnimation=function(){r.removeCssClass(this.element,\"ace_animate-blinking\")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,r.setCssClass(this.element,\"ace_smooth-blinking\",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=r.createElement(\"div\");return e.className=\"ace_cursor\",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&r.removeCssClass(this.element,\"ace_smooth-blinking\"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible){this.$stopCssAnimation();return}this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,\"ace_smooth-blinking\")}.bind(this));if(r.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.isCursorInView=function(e,t){return e.top>=0&&e.top<t.maxHeight},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,i=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=0,s=t.length;n<s;n++){var o=this.getPixelPosition(t[n].cursor,!0);if((o.top>e.height+e.offset||o.top<0)&&n>1)continue;var u=this.cursors[i++]||this.addCursor(),a=u.style;this.drawCursor?this.drawCursor(u,o,e,t[n],this.session):this.isCursorInView(o,e)?(r.setStyle(a,\"display\",\"block\"),r.translate(u,o.left,o.top),r.setStyle(a,\"width\",Math.round(e.characterWidth)+\"px\"),r.setStyle(a,\"height\",e.lineHeight+\"px\")):r.setStyle(a,\"display\",\"none\")}while(this.cursors.length>i)this.removeCursor();var f=this.session.getOverwrite();this.$setOverwrite(f),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,\"ace_overwrite-cursors\"):r.removeCssClass(this.element,\"ace_overwrite-cursors\"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(i.prototype),t.Cursor=i}),ace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/event\"),o=e(\"./lib/event_emitter\").EventEmitter,u=32768,a=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix,this.inner=i.createElement(\"div\"),this.inner.className=\"ace_scrollbar-inner\",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,\"scroll\",this.onScroll.bind(this)),s.addListener(this.element,\"mousedown\",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?\"\":\"none\",this.isVisible=e,this.coeff=1}}).call(a.prototype);var f=function(e,t){a.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\",this.$minWidth=0};r.inherits(f,a),function(){this.classSuffix=\"-v\",this.onScroll=function(){if(!this.skipEvent){this.scrollTop=this.element.scrollTop;if(this.coeff!=1){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit(\"scroll\",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+\"px\"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>u?(this.coeff=u/e,e=u):this.coeff!=1&&(this.coeff=1),this.inner.style.height=e+\"px\"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(f.prototype);var l=function(e,t){a.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\"};r.inherits(l,a),function(){this.classSuffix=\"-h\",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit(\"scroll\",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+\"px\"},this.setInnerWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(l.prototype),t.ScrollBar=f,t.ScrollBarV=f,t.ScrollBarH=l,t.VScrollBar=f,t.HScrollBar=l}),ace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"./lib/event\"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var n=this;this._flush=function(e){n.pending=!1;var t=n.changes;t&&(r.blockIdle(100),n.changes=0,n.onRender(t));if(n.changes){if(n.$recursionLimit--<0)return;n.schedule()}else n.$recursionLimit=2}};(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(r.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call(i.prototype),t.RenderLoop=i}),ace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"../lib/event\"),u=e(\"../lib/useragent\"),a=e(\"../lib/event_emitter\").EventEmitter,f=256,l=typeof ResizeObserver==\"function\",c=200,h=t.FontMetrics=function(e){this.el=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.innerHTML=s.stringRepeat(\"X\",f),this.$characterSize={width:0,height:0},l?this.$addObserver():this.checkForSizeChanges()};(function(){r.implement(this,a),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height=\"auto\",e.left=e.top=\"0px\",e.visibility=\"hidden\",e.position=\"absolute\",e.whiteSpace=\"pre\",u.isIE<8?e[\"font-family\"]=\"inherit\":e.font=\"inherit\",e.overflow=t?\"hidden\":\"visible\"},this.checkForSizeChanges=function(e){e===undefined&&(e=this.$measureSizes());if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight=\"bold\";var t=this.$measureSizes();this.$measureNode.style.fontWeight=\"\",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit(\"changeCharacterSize\",{data:e})}},this.$addObserver=function(){var e=this;this.$observer=new window.ResizeObserver(function(t){var n=t[0].contentRect;e.checkForSizeChanges({height:n.height,width:n.width/f})}),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=o.onIdle(function t(){e.checkForSizeChanges(),o.onIdle(t,500)},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){var t={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/f};return t.width===0||t.height===0?null:t},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,f);var t=this.$main.getBoundingClientRect();return t.width/f},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(e,t){return[\"div\",{style:\"position: absolute;top:\"+e+\"px;left:\"+t+\"px;\"}]};this.els=i.buildDom([e(0,0),e(c,0),e(0,c),e(c,c)],this.el)},this.transformCoordinates=function(e,t){function r(e,t,n){var r=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1])/r,(+e[1]*n[0]-e[0]*n[1])/r]}function i(e,t){return[e[0]-t[0],e[1]-t[1]]}function s(e,t){return[e[0]+t[0],e[1]+t[1]]}function o(e,t){return[e*t[0],e*t[1]]}function u(e){var t=e.getBoundingClientRect();return[t.left,t.top]}if(e){var n=this.$getZoom(this.el);e=o(1/n,e)}this.els||this.$initTransformMeasureNodes();var a=u(this.els[0]),f=u(this.els[1]),l=u(this.els[2]),h=u(this.els[3]),p=r(i(h,f),i(h,l),i(s(f,l),s(h,a))),d=o(1+p[0],i(f,a)),v=o(1+p[1],i(l,a));if(t){var m=t,g=p[0]*m[0]/c+p[1]*m[1]/c+1,y=s(o(m[0],d),o(m[1],v));return s(o(1/g/c,y),a)}var b=i(e,a),w=r(i(d,o(p[0],b)),i(v,o(p[1],b)),b);return o(c,w)}}).call(h.prototype)}),ace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./config\"),o=e(\"./layer/gutter\").Gutter,u=e(\"./layer/marker\").Marker,a=e(\"./layer/text\").Text,f=e(\"./layer/cursor\").Cursor,l=e(\"./scrollbar\").HScrollBar,c=e(\"./scrollbar\").VScrollBar,h=e(\"./renderloop\").RenderLoop,p=e(\"./layer/font_metrics\").FontMetrics,d=e(\"./lib/event_emitter\").EventEmitter,v='.ace_br1 {border-top-left-radius    : 3px;}.ace_br2 {border-top-right-radius   : 3px;}.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'source-code-pro\\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \\'\\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block;   }.ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}',m=e(\"./lib/useragent\"),g=m.isIE;i.importCssString(v,\"ace_editor.css\");var y=function(e,t){var n=this;this.container=e||i.createElement(\"div\"),i.addCssClass(this.container,\"ace_editor\"),i.HI_DPI&&i.addCssClass(this.container,\"ace_hidpi\"),this.setTheme(t),this.$gutter=i.createElement(\"div\"),this.$gutter.className=\"ace_gutter\",this.container.appendChild(this.$gutter),this.$gutter.setAttribute(\"aria-hidden\",!0),this.scroller=i.createElement(\"div\"),this.scroller.className=\"ace_scroller\",this.container.appendChild(this.scroller),this.content=i.createElement(\"div\"),this.content.className=\"ace_content\",this.scroller.appendChild(this.content),this.$gutterLayer=new o(this.$gutter),this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this)),this.$markerBack=new u(this.content);var r=this.$textLayer=new a(this.content);this.canvas=r.element,this.$markerFront=new u(this.content),this.$cursorLayer=new f(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new c(this.container,this),this.scrollBarH=new l(this.container,this),this.scrollBarV.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener(\"changeCharacterSize\",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal(\"changeCharacterSize\",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!m.isIOS,this.$loop=new h(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit(\"renderer\",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,d),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle(\"ace_nobold\",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t};if(this.$changedLines.lastRow<this.layerConfig.firstRow){if(!n)return;this.$changedLines.lastRow=this.layerConfig.lastRow}if(this.$changedLines.firstRow>this.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var s=0,o=this.$size,u={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};r&&(e||o.height!=r)&&(o.height=r,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\",s|=this.CHANGE_SCROLL);if(n&&(e||o.width!=n)){s|=this.CHANGE_SIZE,o.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,i.setStyle(this.scrollBarH.element.style,\"left\",t+\"px\"),i.setStyle(this.scroller.style,\"left\",t+this.margin.left+\"px\"),o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()-this.margin.h),i.setStyle(this.$gutter.style,\"left\",this.margin.left+\"px\");var a=this.scrollBarV.getWidth()+\"px\";i.setStyle(this.scrollBarH.element.style,\"right\",a),i.setStyle(this.scroller.style,\"right\",a),i.setStyle(this.scroller.style,\"bottom\",this.scrollBarH.getHeight());if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)s|=this.CHANGE_FULL}return o.$dirty=!n||!r,s&&this._signal(\"resize\",u),s},this.onGutterResize=function(e){var t=this.$showGutter?e:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption(\"animatedScroll\",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption(\"showInvisibles\",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\")},this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\")},this.setDisplayIndentGuides=function(e){this.setOption(\"displayIndentGuides\",e)},this.setShowPrintMargin=function(e){this.setOption(\"showPrintMargin\",e)},this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\")},this.setPrintMarginColumn=function(e){this.setOption(\"printMarginColumn\",e)},this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\")},this.getShowGutter=function(){return this.getOption(\"showGutter\")},this.setShowGutter=function(e){return this.setOption(\"showGutter\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement(\"div\");e.className=\"ace_layer ace_print-margin-layer\",this.$printMarginEl=i.createElement(\"div\"),this.$printMarginEl.className=\"ace_print-margin\",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+\"px\",t.visibility=this.$showPrintMargin?\"visible\":\"hidden\",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){var e=this.textarea.style;if(!this.$keepTextAreaAtCursor){i.translate(this.textarea,-100,0);return}var t=this.$cursorLayer.$pixelPos;if(!t)return;var n=this.$composition;n&&n.markerRange&&(t=this.$cursorLayer.getPixelPosition(n.markerRange.start,!0));var r=this.layerConfig,s=t.top,o=t.left;s-=r.offset;var u=n&&n.useTextareaForIME?this.lineHeight:g?0:1;if(s<0||s>r.height-u){i.translate(this.textarea,0,0);return}var a=1;if(!n)s+=this.lineHeight;else if(n.useTextareaForIME){var f=this.textarea.value;a=this.characterWidth*this.session.$getStringScreenWidth(f)[0],u+=2}else s+=this.lineHeight+2;o-=this.scrollLeft,o>this.$size.scrollerWidth-a&&(o=this.$size.scrollerWidth-a),o+=this.gutterWidth+this.margin.left,i.setStyle(e,\"height\",u+\"px\"),i.setStyle(e,\"width\",a+\"px\"),i.translate(this.textarea,Math.min(o,this.$size.scrollerWidth-a),Math.min(s,this.$size.height-u))},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.setMargin=function(e,t,n,r){var i=this.margin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption(\"hScrollBarAlwaysVisible\",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption(\"vScrollBarAlwaysVisible\",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal(\"beforeRender\"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig()|this.$loop.clear();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig()|this.$loop.clear())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),i.translate(this.content,-this.scrollLeft,-n.offset);var s=n.width+2*this.$padding+\"px\",o=n.minHeight+\"px\";i.setStyle(this.content.style,\"width\",s),i.setStyle(this.content.style,\"height\",o)}e&this.CHANGE_H_SCROLL&&(i.translate(this.content,-this.scrollLeft,-n.offset),this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal(\"afterRender\");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&(e&this.CHANGE_GUTTER||e&this.CHANGE_LINES?this.$gutterLayer.update(n):this.$gutterLayer.scrollLines(n)),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal(\"afterRender\");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(n):e&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal(\"afterRender\")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var r=n<=2*this.lineHeight,i=!r&&e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var s=this.container.clientWidth;this.container.style.height=n+\"px\",this.$updateCachedSize(!0,this.$gutterWidth,s,n),this.desiredHeight=n,this._signal(\"autosize\")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),u=this.$horizScroll!==o;u&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var f=t.scrollerHeight+this.lineHeight,l=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=l;var c=this.scrollMargin;this.session.setScrollTop(Math.max(-c.top,Math.min(this.scrollTop,i-t.scrollerHeight+c.bottom))),this.session.setScrollLeft(Math.max(-c.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+c.right)));var h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+l<0||this.scrollTop>c.top),p=a!==h;p&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var d=this.scrollTop%this.lineHeight,v=Math.ceil(f/this.lineHeight)-1,m=Math.max(0,Math.round((this.scrollTop-d)/this.lineHeight)),g=m+v,y,b,w=this.lineHeight;m=e.screenToDocumentRow(m,0);var E=e.getFoldLine(m);E&&(m=E.start.row),y=e.documentToScreenRow(m,0),b=e.getRowLength(m)*w,g=Math.min(e.screenToDocumentRow(g,0),e.getLength()-1),f=t.scrollerHeight+e.getRowLength(g)*w+b,d=this.scrollTop-y*w;var S=0;if(this.layerConfig.width!=s||u)S=this.CHANGE_H_SCROLL;if(u||p)S=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal(\"scrollbarVisibilityChanged\"),p&&(s=this.$getLongestLine());return this.layerConfig={width:s,padding:this.$padding,firstRow:m,firstRowScreen:y,lastRow:g,lineHeight:w,characterWidth:this.characterWidth,minHeight:f,maxHeight:i,offset:d,gutterOffset:w?Math.max(0,Math.ceil((d+t.height-t.scrollerHeight)/w)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(s-this.$padding),S},this.$updateLines=function(){if(!this.$changedLines)return;var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(t<n.firstRow)return;if(t===Infinity){this.$showGutter&&this.$gutterLayer.update(n),this.$textLayer.update(n);return}return this.$textLayer.updateLines(n,e,t),!0},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),this.$textLayer&&e>this.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(this.$size.scrollerHeight===0)return;var r=this.$cursorLayer.getPixelPosition(e),i=r.left,s=r.top,o=n&&n.top||0,u=n&&n.bottom||0,a=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;a+o>s?(t&&a+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-u<s+this.lineHeight&&(t&&a+this.$size.scrollerHeight-u<s-this.lineHeight&&(s+=t*this.$size.scrollerHeight),this.session.setScrollTop(s+this.lineHeight+u-this.$size.scrollerHeight));var f=this.scrollLeft;f>i?(i<this.$padding+2*this.layerConfig.characterWidth&&(i=-this.scrollMargin.left),this.session.setScrollLeft(i)):f+this.$size.scrollerWidth<i+this.characterWidth?this.session.setScrollLeft(Math.round(i+this.characterWidth-this.$size.scrollerWidth)):f<=this.$padding&&i-f<this.characterWidth&&this.session.setScrollLeft(0)},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){typeof e==\"number\"&&(e={row:e,column:0});var n=this.$cursorLayer.getPixelPosition(e),r=this.$size.scrollerHeight-this.lineHeight,i=n.top-r*(t||0);return this.session.setScrollTop(i),i},this.STEPS=8,this.$calcSteps=function(e,t){var n=0,r=this.STEPS,i=[],s=function(e,t,n){return n*(Math.pow(e-1,3)+1)+t};for(n=0;n<r;++n)i.push(s(n/this.STEPS,e,t-e));return i},this.scrollToLine=function(e,t,n,r){var i=this.$cursorLayer.getPixelPosition({row:e,column:0}),s=i.top;t&&(s-=this.$size.scrollerHeight/2);var o=this.scrollTop;this.session.setScrollTop(s),n!==!1&&this.animateScrolling(o,r)},this.animateScrolling=function(e,t){var n=this.scrollTop;if(!this.$animatedScroll)return;var r=this;if(e==n)return;if(this.$scrollAnimation){var i=this.$scrollAnimation.steps;if(i.length){e=i[0];if(e==n)return}}var s=r.$calcSteps(e,n);this.$scrollAnimation={from:e,to:n,steps:s},clearInterval(this.$timer),r.session.setScrollTop(s.shift()),r.session.$scrollTop=n,this.$timer=setInterval(function(){s.length?(r.session.setScrollTop(s.shift()),r.session.$scrollTop=n):n!=null?(r.session.$scrollTop=-1,r.session.setScrollTop(n),n=null):(r.$timer=clearInterval(r.$timer),r.$scrollAnimation=null,t&&t())},10)},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){if(t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),u=this.$blockCursor?Math.floor(s):Math.round(s);return{row:o,column:u,side:s-u>0?1:-1,offsetX:i}},this.screenToTextCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=this.$blockCursor?Math.floor(s):Math.round(s),u=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(u,Math.max(o,0),i)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+(this.session.$bidiHandler.isBidiRow(r.row,e)?this.session.$bidiHandler.getPosLeft(r.column):Math.round(r.column*this.characterWidth)),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,\"ace_focus\")},this.visualizeBlur=function(){i.removeCssClass(this.container,\"ace_focus\")},this.showComposition=function(e){this.$composition=e,e.cssText||(e.cssText=this.textarea.style.cssText,e.keepTextAreaAtCursor=this.$keepTextAreaAtCursor),e.useTextareaForIME=this.$useTextareaForIME,this.$useTextareaForIME?(this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=\"\",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display=\"none\"):e.markerId=this.session.addMarker(e.markerRange,\"ace_composition_marker\",\"text\")},this.setCompositionText=function(e){var t=this.session.selection.cursor;this.addToken(e,\"composition_placeholder\",t.row,t.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),i.removeCssClass(this.textarea,\"ace_composition\"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null,this.$cursorLayer.element.style.display=\"\"},this.addToken=function(e,t,n,r){var i=this.session;i.bgTokenizer.lines[n]=null;var s={type:t,value:e},o=i.getTokens(n);if(r==null)o.push(s);else{var u=0;for(var a=0;a<o.length;a++){var f=o[a];u+=f.value.length;if(r<=u){var l=f.value.length-(u-r),c=f.value.slice(0,l),h=f.value.slice(l);o.splice(a,1,{type:f.type,value:c},s,{type:f.type,value:h});break}}}this.updateLines(n,n)},this.setTheme=function(e,t){function o(r){if(n.$themeId!=e)return t&&t();if(!r||!r.cssClass)throw new Error(\"couldn't load module \"+e+\" or it didn't call define\");r.$id&&(n.$themeId=r.$id),i.importCssString(r.cssText,r.cssClass,n.container),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s=\"padding\"in r?r.padding:\"padding\"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,\"ace_dark\",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent(\"themeLoaded\",{theme:r}),t&&t()}var n=this;this.$themeId=e,n._dispatchEvent(\"themeChange\",{theme:e});if(!e||typeof e==\"string\"){var r=e||this.$options.theme.initialValue;s.loadModule([\"theme\",r],o)}else o(e)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,t!==!1)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){i.setStyle(this.scroller.style,\"cursor\",e)},this.setMouseCursor=function(e){i.setStyle(this.scroller.style,\"cursor\",e)},this.attachToShadowRoot=function(){i.importCssString(v,\"ace_editor.css\",this.container)},this.destroy=function(){this.$fontMetrics.destroy(),this.$cursorLayer.destroy()}}).call(y.prototype),s.defineOptions(y.prototype,\"renderer\",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){typeof e==\"number\"&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?\"block\":\"none\",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,\"ace_fade-fold-widgets\",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){this.$gutterLayer.setHighlightGutterLine(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},hScrollBarAlwaysVisible:{set:function(e){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){typeof e==\"number\"&&(e+=\"px\"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.$minLines<562949953421311||(this.$minLines=0),this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0;if(this.$scrollPastEnd==e)return;this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:\"./theme/textmate\",handlesSet:!0},hasCssTransforms:{},useTextareaForIME:{initialValue:!m.isMobile&&!m.isIE}}),t.VirtualRenderer=y}),ace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"],function(e,t,n){\"use strict\";function u(e){var t=\"importScripts('\"+i.qualifyURL(e)+\"');\";try{return new Blob([t],{type:\"application/javascript\"})}catch(n){var r=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new r;return s.append(t),s.getBlob(\"application/javascript\")}}function a(e){if(typeof Worker==\"undefined\")return{postMessage:function(){},terminate:function(){}};if(o.get(\"loadWorkerFromBlob\")){var t=u(e),n=window.URL||window.webkitURL,r=n.createObjectURL(t);return new Worker(r)}return new Worker(e)}var r=e(\"../lib/oop\"),i=e(\"../lib/net\"),s=e(\"../lib/event_emitter\").EventEmitter,o=e(\"../config\"),f=function(e){e.postMessage||(e=this.$createWorkerFromOldConfig.apply(this,arguments)),this.$worker=e,this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.$createWorkerFromOldConfig=function(t,n,r,i,s){e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl);if(o.get(\"packaged\")||!e.toUrl)i=i||o.moduleUrl(n,\"worker\");else{var u=this.$normalizePath;i=i||u(e.toUrl(\"ace/worker/worker.js\",null,\"_\"));var f={};t.forEach(function(t){f[t]=u(e.toUrl(t,null,\"_\").replace(/(\\.js)?(\\?.*)?$/,\"\"))})}return this.$worker=a(i),s&&this.send(\"importScripts\",s),this.$worker.postMessage({init:!0,tlns:f,module:n,classname:r}),this.$worker},this.onMessage=function(e){var t=e.data;switch(t.type){case\"event\":this._signal(t.name,{data:t.data});break;case\"call\":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case\"error\":this.reportError(t.data);break;case\"log\":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal(\"terminate\",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off(\"change\",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{t.data&&t.data.err&&(t.data.err={message:t.data.err.message,stack:t.data.err.stack,code:t.data.err.code}),this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call(\"setValue\",[e.getValue()]),e.on(\"change\",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),e.action==\"insert\"?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;if(!e)return;this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call(\"setValue\",[this.$doc.getValue()]):this.emit(\"change\",{data:e})}}).call(f.prototype);var l=function(e,t,n){var r=null,i=!1,u=Object.create(s),a=[],l=new f({messageBuffer:a,terminate:function(){},postMessage:function(e){a.push(e);if(!r)return;i?setTimeout(c):c()}});l.setEmitSync=function(e){i=e};var c=function(){var e=a.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};return u.postMessage=function(e){l.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:\"call\",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:\"event\",name:e,data:t})},o.loadModule([\"worker\",t],function(e){r=new e[n](u);while(a.length)c()}),l};t.UIWorkerClient=l,t.WorkerClient=f,t.createWorker=a}),ace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/oop\"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on(\"change\",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on(\"changeCursor\",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);r.$insertRight=!0,r.detach(),e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)},this.onUpdate=function(e){if(this.$updating)return this.updateAnchors(e);var t=e;if(t.start.row!==t.end.row)return;if(t.start.row!==this.pos.row)return;this.$updating=!0;var n=e.action===\"insert\"?t.end.column-t.start.column:t.start.column-t.end.column,i=t.start.column>=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;this.updateAnchors(e),i&&(this.length+=n);if(i&&!this.session.$fromUndo)if(e.action===\"insert\")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.insertMergedLines(a,e.lines)}else if(e.action===\"remove\")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.remove(new r(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(this.$updating)return;var e=this,t=this.session,n=function(n,i){t.removeMarker(n.markerId),n.markerId=t.addMarker(new r(n.row,n.column,n.row,n.column+e.length),i,null,!1)};n(this.pos,this.mainClass);for(var i=this.others.length;i--;)n(this.others[i],this.othersClass)},this.onCursorChange=function(e){if(this.$updating||!this.session)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit(\"cursorEnter\",e)):(this.hideOtherMarkers(),this._emit(\"cursorLeave\",e))},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener(\"change\",this.$onUpdate),this.session.selection.removeEventListener(\"changeCursor\",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(this.$undoStackDepth===-1)return;var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n<t;n++)e.undo(this.session,!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}).call(o.prototype),t.PlaceHolder=o}),ace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){function s(e,t){return e.row==t.row&&e.column==t.column}function o(e){var t=e.domEvent,n=t.altKey,o=t.shiftKey,u=t.ctrlKey,a=e.getAccelKey(),f=e.getButton();u&&i.isMac&&(f=t.button);if(e.editor.inMultiSelectMode&&f==2){e.editor.textInput.onContextMenu(e.domEvent);return}if(!u&&!n&&!a){f===0&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode();return}if(f!==0)return;var l=e.editor,c=l.selection,h=l.inMultiSelectMode,p=e.getDocumentPosition(),d=c.getCursor(),v=e.inSelection()||c.isEmpty()&&s(p,d),m=e.x,g=e.y,y=function(e){m=e.clientX,g=e.clientY},b=l.session,w=l.renderer.pixelToScreenCoordinates(m,g),E=w,S;if(l.$mouseHandler.$enableJumpToDef)u&&n||a&&n?S=o?\"block\":\"add\":n&&l.$blockSelectEnabled&&(S=\"block\");else if(a&&!n){S=\"add\";if(!h&&o)return}else n&&l.$blockSelectEnabled&&(S=\"block\");S&&i.isMac&&t.ctrlKey&&l.$mouseHandler.cancelContextMenu();if(S==\"add\"){if(!h&&v)return;if(!h){var x=c.toOrientedRange();l.addSelectionMarker(x)}var T=c.rangeList.rangeAtPoint(p);l.inVirtualSelectionMode=!0,o&&(T=null,x=c.ranges[0]||x,l.removeSelectionMarker(x)),l.once(\"mouseup\",function(){var e=c.toOrientedRange();T&&e.isEmpty()&&s(T.cursor,e.cursor)?c.substractPoint(e.cursor):(o?c.substractPoint(x.cursor):x&&(l.removeSelectionMarker(x),c.addRange(x)),c.addRange(e)),l.inVirtualSelectionMode=!1})}else if(S==\"block\"){e.stop(),l.inVirtualSelectionMode=!0;var N,C=[],k=function(){var e=l.renderer.pixelToScreenCoordinates(m,g),t=b.screenToDocumentPosition(e.row,e.column,e.offsetX);if(s(E,e)&&s(t,c.lead))return;E=e,l.selection.moveToPosition(t),l.renderer.scrollCursorIntoView(),l.removeSelectionMarkers(C),C=c.rectangularRangeBlock(E,w),l.$mouseHandler.$clickSelection&&C.length==1&&C[0].isEmpty()&&(C[0]=l.$mouseHandler.$clickSelection.clone()),C.forEach(l.addSelectionMarker,l),l.updateSelectionMarkers()};h&&!a?c.toSingleRange():!h&&a&&(N=c.toOrientedRange(),l.addSelectionMarker(N)),o?w=b.documentToScreenPosition(c.lead):c.moveToPosition(p),E={row:-1,column:-1};var L=function(e){k(),clearInterval(O),l.removeSelectionMarkers(C),C.length||(C=[c.toOrientedRange()]),N&&(l.removeSelectionMarker(N),c.toSingleRange(N));for(var t=0;t<C.length;t++)c.addRange(C[t]);l.inVirtualSelectionMode=!1,l.$mouseHandler.$clickSelection=null},A=k;r.capture(l.container,y,L);var O=setInterval(function(){A()},20);return e.preventDefault()}}var r=e(\"../lib/event\"),i=e(\"../lib/useragent\");t.onMouseDown=o}),ace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"],function(e,t,n){t.defaultCommands=[{name:\"addCursorAbove\",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:\"Ctrl-Alt-Up\",mac:\"Ctrl-Alt-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelow\",exec:function(e){e.selectMoreLines(1)},bindKey:{win:\"Ctrl-Alt-Down\",mac:\"Ctrl-Alt-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorAboveSkipCurrent\",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Up\",mac:\"Ctrl-Alt-Shift-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelowSkipCurrent\",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Down\",mac:\"Ctrl-Alt-Shift-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreBefore\",exec:function(e){e.selectMore(-1)},bindKey:{win:\"Ctrl-Alt-Left\",mac:\"Ctrl-Alt-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreAfter\",exec:function(e){e.selectMore(1)},bindKey:{win:\"Ctrl-Alt-Right\",mac:\"Ctrl-Alt-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextBefore\",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Left\",mac:\"Ctrl-Alt-Shift-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextAfter\",exec:function(e){e.selectMore(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Right\",mac:\"Ctrl-Alt-Shift-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"splitIntoLines\",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:\"Ctrl-Alt-L\",mac:\"Ctrl-Alt-L\"},readOnly:!0},{name:\"alignCursors\",exec:function(e){e.alignCursors()},bindKey:{win:\"Ctrl-Alt-A\",mac:\"Ctrl-Alt-A\"},scrollIntoView:\"cursor\"},{name:\"findAll\",exec:function(e){e.findAll()},bindKey:{win:\"Ctrl-Alt-K\",mac:\"Ctrl-Alt-G\"},scrollIntoView:\"cursor\",readOnly:!0}],t.multiSelectCommands=[{name:\"singleSelection\",bindKey:\"esc\",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:\"cursor\",readOnly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var r=e(\"../keyboard/hash_handler\").HashHandler;t.keyboardHandler=new r(t.multiSelectCommands)}),ace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"],function(e,t,n){function h(e,t,n){return c.$options.wrap=!0,c.$options.needle=t,c.$options.backwards=n==-1,c.find(e)}function v(e,t){return e.row==t.row&&e.column==t.column}function m(e){if(e.$multiselectOnSessionChange)return;e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on(\"changeSession\",e.$multiselectOnSessionChange),e.on(\"mousedown\",o),e.commands.addCommands(f.defaultCommands),g(e)}function g(e){function r(t){n&&(e.renderer.setMouseCursor(\"\"),n=!1)}var t=e.textInput.getElement(),n=!1;u.addListener(t,\"keydown\",function(t){var i=t.keyCode==18&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&i?n||(e.renderer.setMouseCursor(\"crosshair\"),n=!0):n&&r()}),u.addListener(t,\"keyup\",r),u.addListener(t,\"blur\",r)}var r=e(\"./range_list\").RangeList,i=e(\"./range\").Range,s=e(\"./selection\").Selection,o=e(\"./mouse/multi_select_handler\").onMouseDown,u=e(\"./lib/event\"),a=e(\"./lib/lang\"),f=e(\"./commands/multi_select_commands\");t.commands=f.defaultCommands.concat(f.multiSelectCommands);var l=e(\"./search\").Search,c=new l,p=e(\"./edit_session\").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(p.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(!e)return;if(!this.inMultiSelectMode&&this.rangeCount===0){var n=this.toOrientedRange();this.rangeList.add(n),this.rangeList.add(e);if(this.rangeList.ranges.length!=2)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(n),this.$onAddRange(n)}e.cursor||(e.cursor=e.end);var r=this.rangeList.add(e);return this.$onAddRange(e),r.length&&this.$onRemoveRange(r),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal(\"multiSelect\"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length&&this.$onRemoveRange(e)},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal(\"addRange\",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal(\"removeRange\",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal(\"singleSelect\"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c<o;c++)f.push(this.getLineRange(c,!0));l=this.getLineRange(o,!0),l.end.column=n.end.column,f.push(l),f.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.cursor),s=this.session.documentToScreenPosition(this.anchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column<t.column;if(s)var o=e.column,u=t.column,a=e.offsetX,f=t.offsetX;else var o=t.column,u=e.column,a=t.offsetX,f=e.offsetX;var l=e.row<t.row;if(l)var c=e.row,h=t.row;else var c=t.row,h=e.row;o<0&&(o=0),c<0&&(c=0),c==h&&(n=!0);var p;for(var d=c;d<=h;d++){var m=i.fromPoints(this.session.screenToDocumentPosition(d,o,a),this.session.screenToDocumentPosition(d,u,f));if(m.isEmpty()){if(p&&v(m.end,p))break;p=m.end}m.cursor=s?m.start:m.end,r.push(m)}l&&r.reverse();if(!n){var g=r.length-1;while(r[g].isEmpty()&&g>0)g--;if(g>0){var y=0;while(r[y].isEmpty())y++}for(var b=g;b>=y;b--)r[b].isEmpty()&&r.splice(b,1)}return r}}.call(s.prototype);var d=e(\"./editor\").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,\"ace_selection\",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle(\"ace_multiselect\"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle(\"ace_multiselect\"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit(\"changeSelection\")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction==\"forEach\"?r=n.forEachSelection(t,e.args):t.multiSelectAction==\"forEachLine\"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction==\"single\"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges(),u.ranges[0]&&u.fromOrientedRange(u.ranges[0]);var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r<t.length;r++)n.push(this.session.getTextRange(t[r]));var i=this.session.getDocument().getNewLineCharacter();e=n.join(i),e.length==(n.length-1)*i.length&&(e=\"\")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var n=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&t==this.multiSelect.anchor)return;var r=t==this.multiSelect.anchor?n.cursor==n.start?n.end:n.start:n.cursor;r.row!=t.row||this.session.$clipPositionToDocument(r.row,r.column).column!=t.column?this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()):this.multiSelect.mergeOverlappingRanges()}},this.findAll=function(e,t,n){t=t||{},t.needle=e||t.needle;if(t.needle==undefined){var r=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(r)}this.$search.set(t);var i=this.$search.findAll(this.session);if(!i.length)return 0;var s=this.multiSelect;n||s.toSingleRange(i[0]);for(var o=i.length;o--;)s.addRange(i[o],!0);return r&&s.rangeList.rangeAtPoint(r.start)&&s.addRange(r,!0),i.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),r=n.cursor==n.end,s=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(s.column=this.selection.$desiredColumn);var o=this.session.screenToDocumentPosition(s.row+e,s.column);if(!n.isEmpty())var u=this.session.documentToScreenPosition(r?n.end:n.start),a=this.session.screenToDocumentPosition(u.row+e,u.column);else var a=o;if(r){var f=i.fromPoints(o,a);f.cursor=f.start}else{var f=i.fromPoints(a,o);f.cursor=f.end}f.desiredColumn=s.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(n);else if(t)var l=n.cursor;this.selection.addRange(f),l&&this.selection.substractPoint(l)},this.transposeSelections=function(e){var t=this.session,n=t.multiSelect,r=n.ranges;for(var i=r.length;i--;){var s=r[i];if(s.isEmpty()){var o=t.getWordRange(s.start.row,s.start.column);s.start.row=o.start.row,s.start.column=o.start.column,s.end.row=o.end.row,s.end.column=o.end.column}}n.mergeOverlappingRanges();var u=[];for(var i=r.length;i--;){var s=r[i];u.unshift(t.getTextRange(s))}e<0?u.unshift(u.pop()):u.push(u.shift());for(var i=r.length;i--;){var s=r[i],o=s.clone();t.replace(s,u[i]),s.start.row=o.start.row,s.start.column=o.start.column}n.fromOrientedRange(n.ranges[0])},this.selectMore=function(e,t,n){var r=this.session,i=r.multiSelect,s=i.toOrientedRange();if(s.isEmpty()){s=r.getWordRange(s.start.row,s.start.column),s.cursor=e==-1?s.start:s.end,this.multiSelect.addRange(s);if(n)return}var o=r.getTextRange(s),u=h(r,o,e);u&&(u.cursor=e==-1?u.start:u.end,this.session.unfold(u),this.multiSelect.addRange(u),this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(s.cursor)},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges,r=-1,s=n.filter(function(e){if(e.cursor.row==r)return!0;r=e.cursor.row});if(!n.length||s.length==n.length-1){var o=this.selection.getRange(),u=o.start.row,f=o.end.row,l=u==f;if(l){var c=this.session.getLength(),h;do h=this.session.getLine(f);while(/[=:]/.test(h)&&++f<c);do h=this.session.getLine(u);while(/[=:]/.test(h)&&--u>0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.removeFullLines(u,f);p=this.$reAlignText(p,l),this.session.insert({row:u,column:0},p.join(\"\\n\")+\"\\n\"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),i<v&&(v=i),i});n.forEach(function(t,n){var r=t.cursor,s=d-r.column,o=m[n]-v;s>o?e.insert(r,a.stringRepeat(\" \",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(\" \",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),s<t[2].length&&(s=t[2].length),o>t[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off(\"addRange\",this.$onAddRange),n.multiSelect.off(\"removeRange\",this.$onRemoveRange),n.multiSelect.off(\"multiSelect\",this.$onMultiSelect),n.multiSelect.off(\"singleSelect\",this.$onSingleSelect),n.multiSelect.lead.off(\"change\",this.$checkMultiselectChange),n.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange)),t&&(t.multiSelect.on(\"addRange\",this.$onAddRange),t.multiSelect.on(\"removeRange\",this.$onRemoveRange),t.multiSelect.on(\"multiSelect\",this.$onMultiSelect),t.multiSelect.on(\"singleSelect\",this.$onSingleSelect),t.multiSelect.lead.on(\"change\",this.$checkMultiselectChange),t.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e(\"./config\").defineOptions(d.prototype,\"editor\",{enableMultiselect:{set:function(e){m(this),e?(this.on(\"changeSession\",this.$multiselectOnSessionChange),this.on(\"mousedown\",o)):(this.off(\"changeSession\",this.$multiselectOnSessionChange),this.off(\"mousedown\",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),ace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../range\").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?\"start\":t==\"markbeginend\"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?\"end\":\"\"},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++t<a){var c=e.getLine(t).search(i);if(c==-1)continue;if(c<=o)break;l=t}if(l>f){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a==\"start\"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.$id=\"ace/theme/textmate\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)}),ace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on(\"change\",this.updateOnChange),this.session.on(\"changeFold\",this.updateOnFold),this.session.on(\"changeEditor\",this.$onChangeEditor)}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./range\").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on(\"beforeRender\",this.measureWidgets),e.renderer.on(\"afterRender\",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off(\"beforeRender\",this.measureWidgets),t.renderer.off(\"afterRender\",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(!n||!e.action)return;var r=e.data,i=r.start.row,s=r.end.row,o=e.action==\"add\";for(var u=i+1;u<s;u++)n[u]&&(n[u].hidden=o);n[s]&&(o?n[i]?n[s].hidden=o:n[i]=n[s]:(n[i]==n[s]&&(n[i]=undefined),n[s].hidden=o))},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(!t)return;var n=e.start.row,r=e.end.row-n;if(r!==0)if(e.action==\"remove\"){var i=t.splice(n+1,r);i.forEach(function(e){e&&this.removeLineWidget(e)},this),this.$updateRows()}else{var s=new Array(r);s.unshift(n,0),t.splice.apply(t,s),this.$updateRows()}},this.$updateRows=function(){var e=this.session.lineWidgets;if(!e)return;var t=!0;e.forEach(function(e,n){if(e){t=!1,e.row=n;while(e.$oldWidget)e.$oldWidget.row=n,e=e.$oldWidget}}),t&&(this.session.lineWidgets=null)},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength()));var t=this.session.lineWidgets[e.row];t&&(e.$oldWidget=t,t.el&&t.el.parentNode&&(t.el.parentNode.removeChild(t.el),t._inDocument=!1)),this.session.lineWidgets[e.row]=e,e.session=this.session;var n=this.editor.renderer;e.html&&!e.el&&(e.el=i.createElement(\"div\"),e.el.innerHTML=e.html),e.el&&(i.addCssClass(e.el,\"ace_lineWidgetContainer\"),e.el.style.position=\"absolute\",e.el.style.zIndex=5,n.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),e.pixelHeight==null&&(e.pixelHeight=e.el.offsetHeight),e.rowCount==null&&(e.rowCount=e.pixelHeight/n.layerConfig.lineHeight);var r=this.session.getFoldAt(e.row,0);e.$fold=r;if(r){var s=this.session.lineWidgets;e.row==r.end.row&&!s[r.start.row]?s[r.start.row]=e:e.hidden=!0}return this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,n),this.onWidgetChanged(e),e},this.removeLineWidget=function(e){e._inDocument=!1,e.session=null,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el);if(e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(t){}if(this.session.lineWidgets){var n=this.session.lineWidgets[e.row];if(n==e)this.session.lineWidgets[e.row]=e.$oldWidget,e.$oldWidget&&this.onWidgetChanged(e.$oldWidget);else while(n){if(n.$oldWidget==e){n.$oldWidget=e.$oldWidget;break}n=n.$oldWidget}}this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows()},this.getWidgetsAtRow=function(e){var t=this.session.lineWidgets,n=t&&t[e],r=[];while(n)r.push(n),n=n.$oldWidget;return r},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,r=t.layerConfig;if(!n||!n.length)return;var i=Infinity;for(var s=0;s<n.length;s++){var o=n[s];if(!o||!o.el)continue;if(o.session!=this.session)continue;if(!o._inDocument){if(this.session.lineWidgets[o.row]!=o)continue;o._inDocument=!0,t.container.appendChild(o.el)}o.h=o.el.offsetHeight,o.fixedWidth||(o.w=o.el.offsetWidth,o.screenWidth=Math.ceil(o.w/r.characterWidth));var u=o.h/r.lineHeight;o.coverLine&&(u-=this.session.getRowLineCount(o.row),u<0&&(u=0)),o.rowCount!=u&&(o.rowCount=u,o.row<i&&(i=o.row))}i!=Infinity&&(this.session._emit(\"changeFold\",{data:{start:{row:i}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]},this.renderWidgets=function(e,t){var n=t.layerConfig,r=this.session.lineWidgets;if(!r)return;var i=Math.min(this.firstRow,n.firstRow),s=Math.max(this.lastRow,n.lastRow,r.length);while(i>0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;if(u.hidden){u.el.style.top=-100-(u.pixelHeight||0)+\"px\";continue}u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+\"px\";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+\"px\",u.fullWidth&&u.screenWidth&&(u.el.style.minWidth=n.width+2*n.padding+\"px\"),u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+\"px\":u.el.style.right=\"\"}}}).call(o.prototype),t.LineWidgets=o}),ace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?\"unshift\":\"push\"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e(\"../line_widgets\").LineWidgets,i=e(\"../lib/dom\"),s=e(\"../range\").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.widgetManager.getWidgetsAtRow(o).filter(function(e){return e.type==\"errorMarker\"})[0];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!=\"number\"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:[\"Looks good!\"],className:\"ace_ok\"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement(\"div\"),type:\"errorMarker\"},p=h.el.appendChild(i.createElement(\"div\")),d=h.el.appendChild(i.createElement(\"div\"));d.className=\"error_widget_arrow \"+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+\"px\",h.el.className=\"error_widget_wrapper\",p.className=\"error_widget \"+l.className,p.innerHTML=l.text.join(\"<br>\"),p.appendChild(i.createElement(\"div\"));var m=function(e,t,n){if(t===0&&(n===\"esc\"||n===\"return\"))return h.destroy(),{command:\"null\"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off(\"changeSelection\",h.destroy),e.off(\"changeSession\",h.destroy),e.off(\"mouseup\",h.destroy),e.off(\"change\",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on(\"changeSelection\",h.destroy),e.on(\"changeSession\",h.destroy),e.on(\"mouseup\",h.destroy),e.on(\"change\",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(\"    .error_widget_wrapper {        background: inherit;        color: inherit;        border:none    }    .error_widget {        border-top: solid 2px;        border-bottom: solid 2px;        margin: 5px 0;        padding: 10px 40px;        white-space: pre-wrap;    }    .error_widget.ace_error, .error_widget_arrow.ace_error{        border-color: #ff5a5a    }    .error_widget.ace_warning, .error_widget_arrow.ace_warning{        border-color: #F1D817    }    .error_widget.ace_info, .error_widget_arrow.ace_info{        border-color: #5a5a5a    }    .error_widget.ace_ok, .error_widget_arrow.ace_ok{        border-color: #5aaa5a    }    .error_widget_arrow {        position: absolute;        border: solid 5px;        border-top-color: transparent!important;        border-right-color: transparent!important;        border-left-color: transparent!important;        top: -5px;    }\",\"\")}),ace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/dom\"),i=e(\"./lib/event\"),s=e(\"./range\").Range,o=e(\"./editor\").Editor,u=e(\"./edit_session\").EditSession,a=e(\"./undomanager\").UndoManager,f=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.require=e,typeof define==\"function\"&&(t.define=define),t.edit=function(e,n){if(typeof e==\"string\"){var s=e;e=document.getElementById(s);if(!e)throw new Error(\"ace.edit can't find div #\"+s)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var u=\"\";if(e&&/input|textarea/i.test(e.tagName)){var a=e;u=a.value,e=r.createElement(\"pre\"),a.parentNode.replaceChild(e,a)}else e&&(u=e.textContent,e.innerHTML=\"\");var l=t.createEditSession(u),c=new o(new f(e),l,n),h={document:l,editor:c,onResize:c.resize.bind(c,null)};return a&&(h.textarea=a),i.addListener(window,\"resize\",h.onResize),c.on(\"destroy\",function(){i.removeListener(window,\"resize\",h.onResize),h.editor.container.env=null}),c.container.env=c.env=h,c},t.createEditSession=function(e,t){var n=new u(e,t);return n.setUndoManager(new a),n},t.Range=s,t.Editor=o,t.EditSession=u,t.UndoManager=a,t.VirtualRenderer=f,t.version=\"1.4.3\"});            (function() {\n                ace.require([\"ace/ace\"], function(a) {\n                    if (a) {\n                        a.config.init(true);\n                        a.define = ace.define;\n                    }\n                    if (!window.ace)\n                        window.ace = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        window.ace[key] = a[key];\n                    window.ace[\"default\"] = window.ace;\n                    if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                        module.exports = window.ace;\n                    }\n                });\n            })();\n        "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-beautify.js",
    "content": "ace.define(\"ace/ext/beautify\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function i(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../token_iterator\").TokenIterator;t.singletonTags=[\"area\",\"base\",\"br\",\"col\",\"command\",\"embed\",\"hr\",\"html\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"],t.blockTags=[\"article\",\"aside\",\"blockquote\",\"body\",\"div\",\"dl\",\"fieldset\",\"footer\",\"form\",\"head\",\"header\",\"html\",\"nav\",\"ol\",\"p\",\"script\",\"section\",\"style\",\"table\",\"tbody\",\"tfoot\",\"thead\",\"ul\"],t.beautify=function(e){var n=new r(e,0,0),s=n.getCurrentToken(),o=e.getTabString(),u=t.singletonTags,a=t.blockTags,f,l=!1,c=!1,h=!1,p=\"\",d=\"\",v=\"\",m=0,g=0,y=0,b=0,w=0,E=0,S=0,x,T=0,N=0,C=[],k=!1,L,A=!1,O=!1,M=!1,_=!1,D={0:0},P=[],H=function(){f&&f.value&&f.type!==\"string.regexp\"&&(f.value=f.value.trim())},B=function(){p=p.replace(/ +$/,\"\")},j=function(){p=p.trimRight(),l=!1};while(s!==null){T=n.getCurrentTokenRow(),C=n.$rowTokens,f=n.stepForward();if(typeof s!=\"undefined\"){d=s.value,w=0,M=v===\"style\"||e.$modeId===\"ace/mode/css\",i(s,\"tag-open\")?(O=!0,f&&(_=a.indexOf(f.value)!==-1),d===\"</\"&&(_&&!l&&N<1&&N++,M&&(N=1),w=1,_=!1)):i(s,\"tag-close\")?O=!1:i(s,\"comment.start\")?_=!0:i(s,\"comment.end\")&&(_=!1),!O&&!N&&s.type===\"paren.rparen\"&&s.value.substr(0,1)===\"}\"&&N++,T!==x&&(N=T,x&&(N-=x));if(N){j();for(;N>0;N--)p+=\"\\n\";l=!0,!i(s,\"comment\")&&!s.type.match(/^(comment|string)$/)&&(d=d.trimLeft())}if(d){s.type===\"keyword\"&&d.match(/^(if|else|elseif|for|foreach|while|switch)$/)?(P[m]=d,H(),h=!0,d.match(/^(else|elseif)$/)&&p.match(/\\}[\\s]*$/)&&(j(),c=!0)):s.type===\"paren.lparen\"?(H(),d.substr(-1)===\"{\"&&(h=!0,A=!1,O||(N=1)),d.substr(0,1)===\"{\"&&(c=!0,p.substr(-1)!==\"[\"&&p.trimRight().substr(-1)===\"[\"?(j(),c=!1):p.trimRight().substr(-1)===\")\"?j():B())):s.type===\"paren.rparen\"?(w=1,d.substr(0,1)===\"}\"&&(P[m-1]===\"case\"&&w++,p.trimRight().substr(-1)===\"{\"?j():(c=!0,M&&(N+=2))),d.substr(0,1)===\"]\"&&p.substr(-1)!==\"}\"&&p.trimRight().substr(-1)===\"}\"&&(c=!1,b++,j()),d.substr(0,1)===\")\"&&p.substr(-1)!==\"(\"&&p.trimRight().substr(-1)===\"(\"&&(c=!1,b++,j()),B()):s.type!==\"keyword.operator\"&&s.type!==\"keyword\"||!d.match(/^(=|==|===|!=|!==|&&|\\|\\||and|or|xor|\\+=|.=|>|>=|<|<=|=>)$/)?s.type===\"punctuation.operator\"&&d===\";\"?(j(),H(),h=!0,M&&N++):s.type===\"punctuation.operator\"&&d.match(/^(:|,)$/)?(j(),H(),d.match(/^(,)$/)&&S>0&&E===0?N++:(h=!0,l=!1)):s.type===\"support.php_tag\"&&d===\"?>\"&&!l?(j(),c=!0):i(s,\"attribute-name\")&&p.substr(-1).match(/^\\s$/)?c=!0:i(s,\"attribute-equals\")?(B(),H()):i(s,\"tag-close\")&&(B(),d===\"/>\"&&(c=!0)):(j(),H(),c=!0,h=!0);if(l&&(!s.type.match(/^(comment)$/)||!!d.substr(0,1).match(/^[/#]$/))&&(!s.type.match(/^(string)$/)||!!d.substr(0,1).match(/^['\"]$/))){b=y;if(m>g){b++;for(L=m;L>g;L--)D[L]=b}else m<g&&(b=D[m]);g=m,y=b,w&&(b-=w),A&&!E&&(b++,A=!1);for(L=0;L<b;L++)p+=o}s.type===\"keyword\"&&d.match(/^(case|default)$/)&&(P[m]=d,m++),s.type===\"keyword\"&&d.match(/^(break)$/)&&P[m-1]&&P[m-1].match(/^(case|default)$/)&&m--,s.type===\"paren.lparen\"&&(E+=(d.match(/\\(/g)||[]).length,S+=(d.match(/\\{/g)||[]).length,m+=d.length),s.type===\"keyword\"&&d.match(/^(if|else|elseif|for|while)$/)?(A=!0,E=0):!E&&d.trim()&&s.type!==\"comment\"&&(A=!1);if(s.type===\"paren.rparen\"){E-=(d.match(/\\)/g)||[]).length,S-=(d.match(/\\}/g)||[]).length;for(L=0;L<d.length;L++)m--,d.substr(L,1)===\"}\"&&P[m]===\"case\"&&m--}c&&!l&&(B(),p.substr(-1)!==\"\\n\"&&(p+=\" \")),p+=d,h&&(p+=\" \"),l=!1,c=!1,h=!1;if(i(s,\"tag-close\")&&(_||a.indexOf(v)!==-1)||i(s,\"doctype\")&&d===\">\")_&&f&&f.value===\"</\"?N=-1:N=1;i(s,\"tag-open\")&&d===\"</\"?m--:i(s,\"tag-open\")&&d===\"<\"&&u.indexOf(f.value)===-1?m++:i(s,\"tag-name\")?v=d:i(s,\"tag-close\")&&d===\"/>\"&&u.indexOf(v)===-1&&m--,x=T}}s=f}p=p.trim(),e.doc.setValue(p)},t.commands=[{name:\"beautify\",exec:function(e){t.beautify(e.session)},bindKey:\"Ctrl-Shift-B\"}]});                (function() {\n                    ace.require([\"ace/ext/beautify\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-elastic_tabstops_lite.js",
    "content": "ace.define(\"ace/ext/elastic_tabstops_lite\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=function(e){this.$editor=e;var t=this,n=[],r=!1;this.onAfterExec=function(){r=!1,t.processRows(n),n=[]},this.onExec=function(){r=!0},this.onChange=function(e){r&&(n.indexOf(e.start.row)==-1&&n.push(e.start.row),e.end.row!=e.start.row&&n.push(e.end.row))}};(function(){this.processRows=function(e){this.$inChange=!0;var t=[];for(var n=0,r=e.length;n<r;n++){var i=e[n];if(t.indexOf(i)>-1)continue;var s=this.$findCellWidthsForBlock(i),o=this.$setBlockCellWidthsToMax(s.cellWidths),u=s.firstRow;for(var a=0,f=o.length;a<f;a++){var l=o[a];t.push(u),this.$adjustRow(u,l),u++}}this.$inChange=!1},this.$findCellWidthsForBlock=function(e){var t=[],n,r=e;while(r>=0){n=this.$cellWidthsForRow(r);if(n.length==0)break;t.unshift(n),r--}var i=r+1;r=e;var s=this.$editor.session.getLength();while(r<s-1){r++,n=this.$cellWidthsForRow(r);if(n.length==0)break;t.push(n)}return{cellWidths:t,firstRow:i}},this.$cellWidthsForRow=function(e){var t=this.$selectionColumnsForRow(e),n=[-1].concat(this.$tabsForRow(e)),r=n.map(function(e){return 0}).slice(1),i=this.$editor.session.getLine(e);for(var s=0,o=n.length-1;s<o;s++){var u=n[s]+1,a=n[s+1],f=this.$rightmostSelectionInCell(t,a),l=i.substring(u,a);r[s]=Math.max(l.replace(/\\s+$/g,\"\").length,f-u)}return r},this.$selectionColumnsForRow=function(e){var t=[],n=this.$editor.getCursorPosition();return this.$editor.session.getSelection().isEmpty()&&e==n.row&&t.push(n.column),t},this.$setBlockCellWidthsToMax=function(e){var t=!0,n,r,i,s=this.$izip_longest(e);for(var o=0,u=s.length;o<u;o++){var a=s[o];if(!a.push){console.error(a);continue}a.push(NaN);for(var f=0,l=a.length;f<l;f++){var c=a[f];t&&(n=f,i=0,t=!1);if(isNaN(c)){r=f;for(var h=n;h<r;h++)e[h][o]=i;t=!0}i=Math.max(i,c)}}return e},this.$rightmostSelectionInCell=function(e,t){var n=0;if(e.length){var r=[];for(var i=0,s=e.length;i<s;i++)e[i]<=t?r.push(i):r.push(0);n=Math.max.apply(Math,r)}return n},this.$tabsForRow=function(e){var t=[],n=this.$editor.session.getLine(e),r=/\\t/g,i;while((i=r.exec(n))!=null)t.push(i.index);return t},this.$adjustRow=function(e,t){var n=this.$tabsForRow(e);if(n.length==0)return;var r=0,i=-1,s=this.$izip(t,n);for(var o=0,u=s.length;o<u;o++){var a=s[o][0],f=s[o][1];i+=1+a,f+=r;var l=i-f;if(l==0)continue;var c=this.$editor.session.getLine(e).substr(0,f),h=c.replace(/\\s*$/g,\"\"),p=c.length-h.length;l>0&&(this.$editor.session.getDocument().insertInLine({row:e,column:f+1},Array(l+1).join(\" \")+\"\t\"),this.$editor.session.getDocument().removeInLine(e,f,f+1),r+=l),l<0&&p>=-l&&(this.$editor.session.getDocument().removeInLine(e,f+l,f),r+=l)}},this.$izip_longest=function(e){if(!e[0])return[];var t=e[0].length,n=e.length;for(var r=1;r<n;r++){var i=e[r].length;i>t&&(t=i)}var s=[];for(var o=0;o<t;o++){var u=[];for(var r=0;r<n;r++)e[r][o]===\"\"?u.push(NaN):u.push(e[r][o]);s.push(u)}return s},this.$izip=function(e,t){var n=e.length>=t.length?t.length:e.length,r=[];for(var i=0;i<n;i++){var s=[e[i],t[i]];r.push(s)}return r}}).call(r.prototype),t.ElasticTabstopsLite=r;var i=e(\"../editor\").Editor;e(\"../config\").defineOptions(i.prototype,\"editor\",{useElasticTabstops:{set:function(e){e?(this.elasticTabstops||(this.elasticTabstops=new r(this)),this.commands.on(\"afterExec\",this.elasticTabstops.onAfterExec),this.commands.on(\"exec\",this.elasticTabstops.onExec),this.on(\"change\",this.elasticTabstops.onChange)):this.elasticTabstops&&(this.commands.removeListener(\"afterExec\",this.elasticTabstops.onAfterExec),this.commands.removeListener(\"exec\",this.elasticTabstops.onExec),this.removeListener(\"change\",this.elasticTabstops.onChange))}}})});                (function() {\n                    ace.require([\"ace/ext/elastic_tabstops_lite\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-emmet.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/lang\"),o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=e(\"./keyboard/hash_handler\").HashHandler,f=e(\"./tokenizer\").Tokenizer,l=o.comparePoints,c=function(){this.snippetMap={},this.snippetNameMap={}};(function(){r.implement(this,i),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}return c.$tokenizer=new f({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:n.inFormatString&&(r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\\n\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(\",\")},next:\"start\"},{regex:\"/(\"+t(\"/\")+\"+)/(?:(\"+t(\"/\")+\"*)/)(\\\\w*):?\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],\"\"},next:\"start\"},{regex:\"`\"+t(\"`\")+\"*`\",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),\"\"},next:\"start\"},{regex:\"\\\\?\",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:\"start\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:\"/(\"+t(\"/\")+\"+)/\",token:\"regex\"},{regex:\"\",onMatch:function(e,t,n){n.inFormatString=!0},next:\"start\"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+\"__\"]||{})[n]}if(/^\\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,\"\");if(!e)return;var r=e.session;switch(t){case\"CURRENT_WORD\":var i=r.getWordRange();case\"SELECTION\":case\"SELECTED_TEXT\":return r.getTextRange(i);case\"CURRENT_LINE\":return r.getLine(e.getCursorPosition().row);case\"PREV_LINE\":return r.getLine(e.getCursorPosition().row-1);case\"LINE_INDEX\":return e.getCursorPosition().column;case\"LINE_NUMBER\":return e.getCursorPosition().row+1;case\"SOFT_TABS\":return r.getUseSoftTabs()?\"YES\":\"NO\";case\"TAB_SIZE\":return r.getTabSize();case\"FILENAME\":case\"FILEPATH\":return\"\";case\"FULLNAME\":return\"Ace\"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||\"\":this.$getDefaultValue(e,t)||\"\"},this.tmStrFormat=function(e,t,n){var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,\"\"));var s=this.tokenizeTmSnippet(t.fmt,\"formatString\"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t=\"E\";for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"object\"){e[r]=\"\";if(i.changeCase&&i.local){var u=e[r+1];u&&typeof u==\"string\"&&(i.changeCase==\"u\"?e[r]=u[0].toUpperCase():e[r]=u[0].toLowerCase(),e[r+1]=u.substr(1))}else i.changeCase&&(t=i.changeCase)}else t==\"U\"?e[r]=i.toUpperCase():t==\"L\"&&(e[r]=i.toLowerCase())}return e.join(\"\")});return this.variables.__=null,u},this.resolveVariables=function(e,t){function o(t){var n=e.indexOf(t,r+1);n!=-1&&(r=n)}var n=[];for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"string\")n.push(i);else{if(typeof i!=\"object\")continue;if(i.skip)o(i);else{if(i.processed<r)continue;if(i.text){var s=this.getVariableValue(t,i.text);s&&i.fmtString&&(s=this.tmStrFormat(s,i)),i.processed=r,i.expectIf==null?s&&(n.push(s),o(i)):s?i.skip=i.elseBranch:o(i)}else i.tabstopId!=null?n.push(i):i.changeCase!=null&&n.push(i)}}}return n},this.insertSnippetForSelection=function(e,t){function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(a[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=e.session.getTabString(),s=r.match(/^\\s*/)[0];n.column<s.length&&(s=s.slice(0,n.column)),t=t.replace(/\\r/g,\"\");var o=this.tokenizeTmSnippet(t);o=this.resolveVariables(o,e),o=o.map(function(e){return e==\"\\n\"?e+s:typeof e==\"string\"?e.replace(/\\t/g,i):e});var u=[];o.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=u[n];r||(r=u[n]=[],r.index=n,r.value=\"\");if(r.indexOf(e)!==-1)return;r.push(e);var i=o.indexOf(e,t+1);if(i===-1)return;var s=o.slice(t+1,i),a=s.some(function(e){return typeof e==\"object\"});a&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),u.forEach(function(e){e.length=0});var a={};for(var l=0;l<o.length;l++){var c=o[l];if(typeof c!=\"object\")continue;var p=c.tabstopId,d=o.indexOf(c,l+1);if(a[p]){a[p]===c&&(a[p]=null);continue}var v=u[p],m=typeof v.value==\"string\"?[v.value]:f(v.value);m.unshift(l+1,Math.max(0,d-l)),m.push(c),a[p]=c,o.splice.apply(o,m),v.indexOf(c)===-1&&v.push(c)}var g=0,y=0,b=\"\";o.forEach(function(e){if(typeof e==\"string\"){var t=e.split(\"\\n\");t.length>1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e.start?e.end={row:g,column:y}:e.start={row:g,column:y}});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new h(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function o(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var o=r[t];if(e.name){var a=o[e.name];a&&i.unregister(a),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=s.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),e&&e.content?a(e):Array.isArray(e)&&e.forEach(a),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e,n=e.action[0]==\"r\",r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p<h.length;p++){var d=h[p];if(d.end.row<r.row)continue;if(n&&l(r,d.start)<0&&l(i,d.end)>0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e(\"./lib/dom\").importCssString(\".ace_snippet-marker {    -moz-box-sizing: border-box;    box-sizing: border-box;    background: rgba(194, 193, 208, 0.09);    border: 1px dotted rgba(211, 208, 235, 0.62);    position: absolute;}\"),t.snippetManager=new c;var m=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),ace.define(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"resources\",\"resources\",\"tabStops\",\"resources\",\"utils\",\"actions\",\"ace/config\",\"ace/config\"],function(e,t,n){\"use strict\";function f(){}var r=e(\"ace/keyboard/hash_handler\").HashHandler,i=e(\"ace/editor\").Editor,s=e(\"ace/snippets\").snippetManager,o=e(\"ace/range\").Range,u,a;f.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),u||(u=window.emmet);var t=u.resources||u.require(\"resources\");t.setVariable(\"indentation\",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var n=this.ace.session.doc;this.ace.selection.setRange({start:n.indexToPosition(e),end:n.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,n=e.session.getLine(t).length,r=e.session.doc.positionToIndex({row:t,column:0});return{start:r,end:r+n}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,n,r){n==null&&(n=t==null?this.getContent().length:t),t==null&&(t=0);var i=this.ace,u=i.session.doc,a=o.fromPoints(u.indexToPosition(t),u.indexToPosition(n));i.session.remove(a),a.end=a.start,e=this.$updateTabstops(e),s.insertSnippet(i,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split(\"/\").pop();if(e==\"html\"||e==\"php\"){var t=this.ace.getCursorPosition(),n=this.ace.session.getState(t.row);typeof n!=\"string\"&&(n=n[0]),n&&(n=n.split(\"-\"),n.length>1?e=n[0]:e==\"php\"&&(e=\"html\"))}return e},getProfileName:function(){var e=u.resources||u.require(\"resources\");switch(this.getSyntax()){case\"css\":return\"css\";case\"xml\":case\"xsl\":return\"xml\";case\"html\":var t=e.getVariable(\"profile\");return t||(t=this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i)!=-1?\"xhtml\":\"html\"),t;default:var n=this.ace.session.$mode;return n.emmetConfig&&n.emmetConfig.profile||\"xhtml\"}},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return\"\"},$updateTabstops:function(e){var t=1e3,n=0,r=null,i=u.tabStops||u.require(\"tabStops\"),s=u.resources||u.require(\"resources\"),o=s.getVocabulary(\"user\"),a={tabstop:function(e){var s=parseInt(e.group,10),o=s===0;o?s=++n:s+=t;var u=e.placeholder;u&&(u=i.processText(u,a));var f=\"${\"+s+(u?\":\"+u:\"\")+\"}\";return o&&(r=[e.start,f]),f},escape:function(e){return e==\"$\"?\"\\\\$\":e==\"\\\\\"?\"\\\\\\\\\":e}};e=i.processText(e,a);if(o.variables.insert_final_tabstop&&!/\\$\\{0\\}$/.test(e))e+=\"${0}\";else if(r){var f=u.utils?u.utils.common:u.require(\"utils\");e=f.replaceSubstring(e,\"${0}\",r[0],r[1])}return e}};var l={expand_abbreviation:{mac:\"ctrl+alt+e\",win:\"alt+e\"},match_pair_outward:{mac:\"ctrl+d\",win:\"ctrl+,\"},match_pair_inward:{mac:\"ctrl+j\",win:\"ctrl+shift+0\"},matching_pair:{mac:\"ctrl+alt+j\",win:\"alt+j\"},next_edit_point:\"alt+right\",prev_edit_point:\"alt+left\",toggle_comment:{mac:\"command+/\",win:\"ctrl+/\"},split_join_tag:{mac:\"shift+command+'\",win:\"shift+ctrl+`\"},remove_tag:{mac:\"command+'\",win:\"shift+ctrl+;\"},evaluate_math_expression:{mac:\"shift+command+y\",win:\"shift+ctrl+y\"},increment_number_by_1:\"ctrl+up\",decrement_number_by_1:\"ctrl+down\",increment_number_by_01:\"alt+up\",decrement_number_by_01:\"alt+down\",increment_number_by_10:{mac:\"alt+command+up\",win:\"shift+alt+up\"},decrement_number_by_10:{mac:\"alt+command+down\",win:\"shift+alt+down\"},select_next_item:{mac:\"shift+command+.\",win:\"shift+ctrl+.\"},select_previous_item:{mac:\"shift+command+,\",win:\"shift+ctrl+,\"},reflect_css_value:{mac:\"shift+command+r\",win:\"shift+ctrl+r\"},encode_decode_data_url:{mac:\"shift+ctrl+d\",win:\"ctrl+'\"},expand_abbreviation_with_tab:\"Tab\",wrap_with_abbreviation:{mac:\"shift+ctrl+a\",win:\"shift+ctrl+a\"}},c=new f;t.commands=new r,t.runEmmetCommand=function d(e){try{c.setupContext(e);var n=u.actions||u.require(\"actions\");if(this.action==\"expand_abbreviation_with_tab\"){if(!e.selection.isEmpty())return!1;var r=e.selection.lead,i=e.session.getTokenAt(r.row,r.column);if(i&&/\\btag\\b/.test(i.type))return!1}if(this.action==\"wrap_with_abbreviation\")return setTimeout(function(){n.run(\"wrap_with_abbreviation\",c)},0);var s=n.run(this.action,c)}catch(o){if(!u)return t.load(d.bind(this,e)),!0;e._signal(\"changeStatus\",typeof o==\"string\"?o:o.message),console.log(o),s=!1}return s};for(var h in l)t.commands.addCommand({name:\"emmet:\"+h,action:h,bindKey:l[h],exec:t.runEmmetCommand,multiSelectAction:\"forEach\"});t.updateCommands=function(e,n){n?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){if(!e)return!1;if(e.emmetConfig)return!0;var t=e.$id||e;return/css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(t)},t.isAvailable=function(e,n){if(/(evaluate_math_expression|expand_abbreviation)$/.test(n))return!0;var r=e.session.$mode,i=t.isSupportedMode(r);if(i&&r.$modes)try{c.setupContext(e),/js|php/.test(c.getSyntax())&&(i=!1)}catch(s){}return i};var p=function(e,n){var r=n;if(!r)return;var i=t.isSupportedMode(r.session.$mode);e.enableEmmet===!1&&(i=!1),i&&t.load(),t.updateCommands(r,i)};t.load=function(t){typeof a==\"string\"&&e(\"ace/config\").loadModule(a,function(){a=null,t&&t()})},t.AceEmmetEditor=f,e(\"ace/config\").defineOptions(i.prototype,\"editor\",{enableEmmet:{set:function(e){this[e?\"on\":\"removeListener\"](\"changeMode\",p),p({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){typeof e==\"string\"?a=e:u=e}});                (function() {\n                    ace.require([\"ace/ext/emmet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-error_marker.js",
    "content": ";                (function() {\n                    ace.require([\"ace/ext/error_marker\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-keybinding_menu.js",
    "content": "ace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/dom\"),i=\"#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 100000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {vertical-align: middle;}.ace_optionsMenuEntry button[ace_selected_button=true] {background: #e7e7e7;box-shadow: 1px 0px 2px 0px #adadad inset;border-color: #adadad;}.ace_optionsMenuEntry button {background: white;border: 1px solid lightgray;margin: 0px;}.ace_optionsMenuEntry button:hover{background: #f0f0f0;}\";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?\"top: \"+i+\";\":\"\",o=o?\"bottom: \"+o+\";\":\"\",s=s?\"right: \"+s+\";\":\"\",u=u?\"left: \"+u+\";\":\"\";var a=document.createElement(\"div\"),f=document.createElement(\"div\");a.style.cssText=\"margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);\",a.addEventListener(\"click\",function(){document.removeEventListener(\"keydown\",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener(\"keydown\",l),f.style.cssText=i+s+o+u,f.addEventListener(\"click\",function(e){e.stopPropagation()});var c=r.createElement(\"div\");c.style.position=\"relative\";var h=r.createElement(\"div\");h.className=\"ace_closeButton\",h.addEventListener(\"click\",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),ace.define(\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/keys\");n.exports.getEditorKeybordShortcuts=function(e){var t=r.KEY_MODS,n=[],i={};return e.keyBinding.$handlers.forEach(function(e){var t=e.commandKeyBinding;for(var r in t){var s=r.replace(/(^|-)\\w/g,function(e){return e.toUpperCase()}),o=t[r];Array.isArray(o)||(o=[o]),o.forEach(function(e){typeof e!=\"string\"&&(e=e.name),i[e]?i[e].key+=\"|\"+s:(i[e]={key:s,command:e},n.push(i[e]))})}}),n}}),ace.define(\"ace/ext/keybinding_menu\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/ext/menu_tools/overlay_page\",\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\"],function(e,t,n){\"use strict\";function i(t){if(!document.getElementById(\"kbshortcutmenu\")){var n=e(\"./menu_tools/overlay_page\").overlayPage,r=e(\"./menu_tools/get_editor_keyboard_shortcuts\").getEditorKeybordShortcuts,i=r(t),s=document.createElement(\"div\"),o=i.reduce(function(e,t){return e+'<div class=\"ace_optionsMenuEntry\"><span class=\"ace_optionsMenuCommand\">'+t.command+\"</span> : \"+'<span class=\"ace_optionsMenuKey\">'+t.key+\"</span></div>\"},\"\");s.id=\"kbshortcutmenu\",s.innerHTML=\"<h1>Keyboard Shortcuts</h1>\"+o+\"</div>\",n(t,s,\"0\",\"0\",\"0\",null)}}var r=e(\"ace/editor\").Editor;n.exports.init=function(e){r.prototype.showKeyboardShortcuts=function(){i(this)},e.commands.addCommands([{name:\"showKeyboardShortcuts\",bindKey:{win:\"Ctrl-Alt-h\",mac:\"Command-Alt-h\"},exec:function(e,t){e.showKeyboardShortcuts()}}])}});                (function() {\n                    ace.require([\"ace/ext/keybinding_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-language_tools.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/lang\"),o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=e(\"./keyboard/hash_handler\").HashHandler,f=e(\"./tokenizer\").Tokenizer,l=o.comparePoints,c=function(){this.snippetMap={},this.snippetNameMap={}};(function(){r.implement(this,i),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}return c.$tokenizer=new f({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:n.inFormatString&&(r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\\n\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(\",\")},next:\"start\"},{regex:\"/(\"+t(\"/\")+\"+)/(?:(\"+t(\"/\")+\"*)/)(\\\\w*):?\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],\"\"},next:\"start\"},{regex:\"`\"+t(\"`\")+\"*`\",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),\"\"},next:\"start\"},{regex:\"\\\\?\",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:\"start\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:\"/(\"+t(\"/\")+\"+)/\",token:\"regex\"},{regex:\"\",onMatch:function(e,t,n){n.inFormatString=!0},next:\"start\"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+\"__\"]||{})[n]}if(/^\\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,\"\");if(!e)return;var r=e.session;switch(t){case\"CURRENT_WORD\":var i=r.getWordRange();case\"SELECTION\":case\"SELECTED_TEXT\":return r.getTextRange(i);case\"CURRENT_LINE\":return r.getLine(e.getCursorPosition().row);case\"PREV_LINE\":return r.getLine(e.getCursorPosition().row-1);case\"LINE_INDEX\":return e.getCursorPosition().column;case\"LINE_NUMBER\":return e.getCursorPosition().row+1;case\"SOFT_TABS\":return r.getUseSoftTabs()?\"YES\":\"NO\";case\"TAB_SIZE\":return r.getTabSize();case\"FILENAME\":case\"FILEPATH\":return\"\";case\"FULLNAME\":return\"Ace\"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||\"\":this.$getDefaultValue(e,t)||\"\"},this.tmStrFormat=function(e,t,n){var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,\"\"));var s=this.tokenizeTmSnippet(t.fmt,\"formatString\"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t=\"E\";for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"object\"){e[r]=\"\";if(i.changeCase&&i.local){var u=e[r+1];u&&typeof u==\"string\"&&(i.changeCase==\"u\"?e[r]=u[0].toUpperCase():e[r]=u[0].toLowerCase(),e[r+1]=u.substr(1))}else i.changeCase&&(t=i.changeCase)}else t==\"U\"?e[r]=i.toUpperCase():t==\"L\"&&(e[r]=i.toLowerCase())}return e.join(\"\")});return this.variables.__=null,u},this.resolveVariables=function(e,t){function o(t){var n=e.indexOf(t,r+1);n!=-1&&(r=n)}var n=[];for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"string\")n.push(i);else{if(typeof i!=\"object\")continue;if(i.skip)o(i);else{if(i.processed<r)continue;if(i.text){var s=this.getVariableValue(t,i.text);s&&i.fmtString&&(s=this.tmStrFormat(s,i)),i.processed=r,i.expectIf==null?s&&(n.push(s),o(i)):s?i.skip=i.elseBranch:o(i)}else i.tabstopId!=null?n.push(i):i.changeCase!=null&&n.push(i)}}}return n},this.insertSnippetForSelection=function(e,t){function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(a[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=e.session.getTabString(),s=r.match(/^\\s*/)[0];n.column<s.length&&(s=s.slice(0,n.column)),t=t.replace(/\\r/g,\"\");var o=this.tokenizeTmSnippet(t);o=this.resolveVariables(o,e),o=o.map(function(e){return e==\"\\n\"?e+s:typeof e==\"string\"?e.replace(/\\t/g,i):e});var u=[];o.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=u[n];r||(r=u[n]=[],r.index=n,r.value=\"\");if(r.indexOf(e)!==-1)return;r.push(e);var i=o.indexOf(e,t+1);if(i===-1)return;var s=o.slice(t+1,i),a=s.some(function(e){return typeof e==\"object\"});a&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),u.forEach(function(e){e.length=0});var a={};for(var l=0;l<o.length;l++){var c=o[l];if(typeof c!=\"object\")continue;var p=c.tabstopId,d=o.indexOf(c,l+1);if(a[p]){a[p]===c&&(a[p]=null);continue}var v=u[p],m=typeof v.value==\"string\"?[v.value]:f(v.value);m.unshift(l+1,Math.max(0,d-l)),m.push(c),a[p]=c,o.splice.apply(o,m),v.indexOf(c)===-1&&v.push(c)}var g=0,y=0,b=\"\";o.forEach(function(e){if(typeof e==\"string\"){var t=e.split(\"\\n\");t.length>1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e.start?e.end={row:g,column:y}:e.start={row:g,column:y}});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new h(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function o(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var o=r[t];if(e.name){var a=o[e.name];a&&i.unregister(a),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=s.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),e&&e.content?a(e):Array.isArray(e)&&e.forEach(a),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e,n=e.action[0]==\"r\",r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p<h.length;p++){var d=h[p];if(d.end.row<r.row)continue;if(n&&l(r,d.start)<0&&l(i,d.end)>0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e(\"./lib/dom\").importCssString(\".ace_snippet-marker {    -moz-box-sizing: border-box;    box-sizing: border-box;    background: rgba(194, 193, 208, 0.09);    border: 1px dotted rgba(211, 208, 235, 0.62);    position: absolute;}\"),t.snippetManager=new c;var m=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),ace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../virtual_renderer\").VirtualRenderer,i=e(\"../editor\").Editor,s=e(\"../range\").Range,o=e(\"../lib/event\"),u=e(\"../lib/lang\"),a=e(\"../lib/dom\"),f=function(e){var t=new r(e);t.$maxLines=4;var n=new i(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusTimeout=0,n.$highlightTagPending=!0,n},l=function(e){var t=a.createElement(\"div\"),n=new f(t);e&&e.appendChild(t),t.style.display=\"none\",n.renderer.content.style.cursor=\"default\",n.renderer.setStyle(\"ace_autocomplete\"),n.setOption(\"displayIndentGuides\",!1),n.setOption(\"dragDelay\",150);var r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=0,n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(\"\"),n.session.$searchHighlight.clazz=\"ace_highlight-marker\",n.on(\"mousedown\",function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),c.start.row=c.end.row=t.row,e.stop()});var i,l=new s(-1,0,-1,Infinity),c=new s(-1,0,-1,Infinity);c.id=n.session.addMarker(c,\"ace_active-line\",\"fullLine\"),n.setSelectOnHover=function(e){e?l.id&&(n.session.removeMarker(l.id),l.id=null):l.id=n.session.addMarker(l,\"ace_line-hover\",\"fullLine\")},n.setSelectOnHover(!1),n.on(\"mousemove\",function(e){if(!i){i=e;return}if(i.x==e.x&&i.y==e.y)return;i=e,i.scrollTop=n.renderer.scrollTop;var t=i.getDocumentPosition().row;l.start.row!=t&&(l.id||n.setRow(t),p(t))}),n.renderer.on(\"beforeRender\",function(){if(i&&l.start.row!=-1){i.$pos=null;var e=i.getDocumentPosition().row;l.id||n.setRow(e),p(e,!0)}}),n.renderer.on(\"afterRender\",function(){var e=n.getRow(),t=n.renderer.$textLayer,r=t.element.childNodes[e-t.config.firstRow];r!==t.selectedNode&&t.selectedNode&&a.removeCssClass(t.selectedNode,\"ace_selected\"),t.selectedNode=r,r&&a.addCssClass(r,\"ace_selected\")});var h=function(){p(-1)},p=function(e,t){e!==l.start.row&&(l.start.row=l.end.row=e,t||n.session._emit(\"changeBackMarker\"),n._emit(\"changeHoverMarker\"))};n.getHoveredRow=function(){return l.start.row},o.addListener(n.container,\"mouseout\",h),n.on(\"hide\",h),n.on(\"changeSelection\",h),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return typeof t==\"string\"?t:t&&t.value||\"\"};var d=n.session.bgTokenizer;return d.$tokenizeRow=function(e){function s(e,n){e&&r.push({type:(t.className||\"\")+(n||\"\"),value:e})}var t=n.data[e],r=[];if(!t)return r;typeof t==\"string\"&&(t={value:t});var i=t.caption||t.value||t.name,o=i.toLowerCase(),u=(n.filterText||\"\").toLowerCase(),a=0,f=0;for(var l=0;l<=u.length;l++)if(l!=f&&(t.matchMask&1<<l||l==u.length)){var c=u.slice(f,l);f=l;var h=o.indexOf(c,a);if(h==-1)continue;s(i.slice(a,h),\"\"),a=h+c.length,s(i.slice(h,a),\"completion-highlight\")}return s(i.slice(a,i.length),\"\"),t.meta&&r.push({type:\"completion-meta\",value:t.meta}),r},d.$updateOnChange=r,d.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.isOpen=!1,n.isTopdown=!1,n.autoSelect=!0,n.filterText=\"\",n.data=[],n.setData=function(e,t){n.filterText=t||\"\",n.setValue(u.stringRepeat(\"\\n\",e.length),-1),n.data=e||[],n.setRow(0)},n.getData=function(e){return n.data[e]},n.getRow=function(){return c.start.row},n.setRow=function(e){e=Math.max(this.autoSelect?0:-1,Math.min(this.data.length,e)),c.start.row!=e&&(n.selection.clearSelection(),c.start.row=c.end.row=e||0,n.session._emit(\"changeBackMarker\"),n.moveCursorTo(e||0,0),n.isOpen&&n._signal(\"select\"))},n.on(\"changeSelection\",function(){n.isOpen&&n.setRow(n.selection.lead.row),n.renderer.scrollCursorIntoView()}),n.hide=function(){this.container.style.display=\"none\",this._signal(\"hide\"),n.isOpen=!1},n.show=function(e,t,r){var s=this.container,o=window.innerHeight,u=window.innerWidth,a=this.renderer,f=a.$maxLines*t*1.4,l=e.top+this.$borderSize,c=l>o/2&&!r;c&&l+t+f>o?(a.$maxPixelHeight=l-2*this.$borderSize,s.style.top=\"\",s.style.bottom=o-l+\"px\",n.isTopdown=!1):(l+=t,a.$maxPixelHeight=o-l-.2*t,s.style.top=l+\"px\",s.style.bottom=\"\",n.isTopdown=!0),s.style.display=\"\";var h=e.left;h+s.offsetWidth>u&&(h=u-s.offsetWidth),s.style.left=h+\"px\",this._signal(\"show\"),i=null,n.isOpen=!0},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n};a.importCssString(\".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {    background-color: #CAD6FA;    z-index: 1;}.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {    background-color: #3a674e;}.ace_editor.ace_autocomplete .ace_line-hover {    border: 1px solid #abbffe;    margin-top: -1px;    background: rgba(233,233,253,0.4);    position: absolute;    z-index: 2;}.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {    border: 1px solid rgba(109, 150, 13, 0.8);    background: rgba(58, 103, 78, 0.62);}.ace_completion-meta {    opacity: 0.5;    margin: 0.9em;}.ace_editor.ace_autocomplete .ace_completion-highlight{    color: #2d69c7;}.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{    color: #93ca12;}.ace_editor.ace_autocomplete {    width: 300px;    z-index: 200000;    border: 1px lightgray solid;    position: fixed;    box-shadow: 2px 3px 5px rgba(0,0,0,.2);    line-height: 1.4;    background: #fefefe;    color: #111;}.ace_dark.ace_editor.ace_autocomplete {    border: 1px #484747 solid;    box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);    line-height: 1.4;    background: #25282c;    color: #c1c1c1;}\",\"autocompletion.css\"),t.AcePopup=l}),ace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.parForEach=function(e,t,n){var r=0,i=e.length;i===0&&n();for(var s=0;s<i;s++)t(e[s],function(e,t){r++,r===i&&n(e,t)})};var r=/[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;t.retrievePrecedingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;i.push(e[s])}return i.reverse().join(\"\")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t;s<e.length;s++){if(!n.test(e[s]))break;i.push(e[s])}return i},t.getCompletionPrefix=function(e){var t=e.getCursorPosition(),n=e.session.getLine(t.row),r;return e.completers.forEach(function(e){e.identifierRegexps&&e.identifierRegexps.forEach(function(e){!r&&e&&(r=this.retrievePrecedingIdentifier(n,t.column,e))}.bind(this))}.bind(this)),r||this.retrievePrecedingIdentifier(n,t.column)}}),ace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\"],function(e,t,n){\"use strict\";var r=e(\"./keyboard/hash_handler\").HashHandler,i=e(\"./autocomplete/popup\").AcePopup,s=e(\"./autocomplete/util\"),o=e(\"./lib/event\"),u=e(\"./lib/lang\"),a=e(\"./lib/dom\"),f=e(\"./snippets\").snippetManager,l=function(){this.autoInsert=!1,this.autoSelect=!0,this.exactMatch=!1,this.gatherCompletionsId=0,this.keyboardHandler=new r,this.keyboardHandler.bindKeys(this.commands),this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.changeTimer=u.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=u.delayedCall(this.updateDocTooltip.bind(this),50)};(function(){this.$init=function(){return this.popup=new i(document.body||document.documentElement),this.popup.on(\"click\",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on(\"show\",this.tooltipTimer.bind(null,null)),this.popup.on(\"select\",this.tooltipTimer.bind(null,null)),this.popup.on(\"changeHoverMarker\",this.tooltipTimer.bind(null,null)),this.popup},this.getPopup=function(){return this.popup||this.$init()},this.openPopup=function(e,t,n){this.popup||this.$init(),this.popup.autoSelect=this.autoSelect,this.popup.setData(this.completions.filtered,this.completions.filterText),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var r=e.renderer;this.popup.setRow(this.autoSelect?0:-1);if(!n){this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize());var i=r.layerConfig.lineHeight,s=r.$cursorLayer.getPixelPosition(this.base,!0);s.left-=this.popup.getTextLeftOffset();var o=e.container.getBoundingClientRect();s.top+=o.top-r.layerConfig.offset,s.left+=o.left-e.renderer.scrollLeft,s.left+=r.gutterWidth,this.popup.show(s,i)}else n&&!t&&this.detach()},this.detach=function(){this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off(\"changeSelection\",this.changeListener),this.editor.off(\"blur\",this.blurListener),this.editor.off(\"mousedown\",this.mousedownListener),this.editor.off(\"mousewheel\",this.mousewheelListener),this.changeTimer.cancel(),this.hideDocTooltip(),this.gatherCompletionsId+=1,this.popup&&this.popup.isOpen&&this.popup.hide(),this.base&&this.base.detach(),this.activated=!1,this.completions=this.base=null},this.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.column<this.base.column)&&this.detach(),this.activated?this.changeTimer.schedule():this.detach()},this.blurListener=function(e){var t=document.activeElement,n=this.editor.textInput.getElement(),r=e.relatedTarget&&this.tooltipNode&&this.tooltipNode.contains(e.relatedTarget),i=this.popup&&this.popup.container;t!=n&&t.parentNode!=i&&!r&&t!=this.tooltipNode&&e.relatedTarget!=n&&this.detach()},this.mousedownListener=function(e){this.detach()},this.mousewheelListener=function(e){this.detach()},this.goTo=function(e){var t=this.popup.getRow(),n=this.popup.session.getLength()-1;switch(e){case\"up\":t=t<=0?n:t-1;break;case\"down\":t=t>=n?-1:t+1;break;case\"start\":t=0;break;case\"end\":t=n}this.popup.setRow(t)},this.insertMatch=function(e,t){e||(e=this.popup.getData(this.popup.getRow()));if(!e)return!1;if(e.completer&&e.completer.insertMatch)e.completer.insertMatch(this.editor,e);else{if(this.completions.filterText){var n=this.editor.selection.getAllRanges();for(var r=0,i;i=n[r];r++)i.start.column-=this.completions.filterText.length,this.editor.session.remove(i)}e.snippet?f.insertSnippet(this.editor,e.snippet):this.editor.execCommand(\"insertstring\",e.value||e)}this.detach()},this.commands={Up:function(e){e.completer.goTo(\"up\")},Down:function(e){e.completer.goTo(\"down\")},\"Ctrl-Up|Ctrl-Home\":function(e){e.completer.goTo(\"start\")},\"Ctrl-Down|Ctrl-End\":function(e){e.completer.goTo(\"end\")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},\"Shift-Return\":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(!!t||!!e.tabstopManager)return t;e.completer.goTo(\"down\")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},this.gatherCompletions=function(e,t){var n=e.getSession(),r=e.getCursorPosition(),i=s.getCompletionPrefix(e);this.base=n.doc.createAnchor(r.row,r.column-i.length),this.base.$insertRight=!0;var o=[],u=e.completers.length;return e.completers.forEach(function(a,f){a.getCompletions(e,n,r,i,function(n,r){!n&&r&&(o=o.concat(r)),t(null,{prefix:s.getCompletionPrefix(e),matches:o,finished:--u===0})})}),!0},this.showPopup=function(e){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on(\"changeSelection\",this.changeListener),e.on(\"blur\",this.blurListener),e.on(\"mousedown\",this.mousedownListener),e.on(\"mousewheel\",this.mousewheelListener),this.updateCompletions()},this.updateCompletions=function(e){if(e&&this.base&&this.completions){var t=this.editor.getCursorPosition(),n=this.editor.session.getTextRange({start:this.base,end:t});if(n==this.completions.filterText)return;this.completions.setFilter(n);if(!this.completions.filtered.length)return this.detach();if(this.completions.filtered.length==1&&this.completions.filtered[0].value==n&&!this.completions.filtered[0].snippet)return this.detach();this.openPopup(this.editor,n,e);return}var r=this.gatherCompletionsId;this.gatherCompletions(this.editor,function(t,n){var i=function(){if(!n.finished)return;return this.detach()}.bind(this),s=n.prefix,o=n&&n.matches;if(!o||!o.length)return i();if(s.indexOf(n.prefix)!==0||r!=this.gatherCompletionsId)return;this.completions=new c(o),this.exactMatch&&(this.completions.exactMatch=!0),this.completions.setFilter(s);var u=this.completions.filtered;if(!u.length)return i();if(u.length==1&&u[0].value==s&&!u[0].snippet)return i();if(this.autoInsert&&u.length==1&&n.finished)return this.insertMatch(u[0]);this.openPopup(this.editor,s,e)}.bind(this))},this.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},this.updateDocTooltip=function(){var e=this.popup,t=e.data,n=t&&(t[e.getHoveredRow()]||t[e.getRow()]),r=null;if(!n||!this.editor||!this.popup.isOpen)return this.hideDocTooltip();this.editor.completers.some(function(e){return e.getDocTooltip&&(r=e.getDocTooltip(n)),r}),r||(r=n),typeof r==\"string\"&&(r={docText:r});if(!r||!r.docHTML&&!r.docText)return this.hideDocTooltip();this.showDocTooltip(r)},this.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=a.createElement(\"div\"),this.tooltipNode.className=\"ace_tooltip ace_doc-tooltip\",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents=\"auto\",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this),this.tooltipNode.onclick=this.onTooltipClick.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var n=this.popup,r=n.container.getBoundingClientRect();t.style.top=n.container.style.top,t.style.bottom=n.container.style.bottom,t.style.display=\"block\",window.innerWidth-r.right<320?r.left<320?n.isTopdown?(t.style.top=r.bottom+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.top=n.container.offsetTop-t.offsetHeight+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.right=window.innerWidth-r.left+\"px\",t.style.left=\"\"):(t.style.left=r.right+1+\"px\",t.style.right=\"\")},this.hideDocTooltip=function(){this.tooltipTimer.cancel();if(!this.tooltipNode)return;var e=this.tooltipNode;!this.editor.isFocused()&&document.activeElement==e&&this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)},this.onTooltipClick=function(e){var t=e.target;while(t&&t!=this.tooltipNode){if(t.nodeName==\"A\"&&t.href){t.rel=\"noreferrer\",t.target=\"_blank\";break}t=t.parentNode}}}).call(l.prototype),l.startCommand={name:\"startAutocomplete\",exec:function(e){e.completer||(e.completer=new l),e.completer.autoInsert=!1,e.completer.autoSelect=!0,e.completer.showPopup(e),e.completer.cancelContextMenu()},bindKey:\"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"};var c=function(e,t){this.all=e,this.filtered=e,this.filterText=t||\"\",this.exactMatch=!1};(function(){this.setFilter=function(e){if(e.length>this.filterText&&e.lastIndexOf(this.filterText,0)===0)var t=this.filtered;else var t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort(function(e,t){return t.exactMatch-e.exactMatch||t.$score-e.$score||(e.caption||e.value)<(t.caption||t.value)});var n=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t===n?!1:(n=t,!0)}),this.filtered=t},this.filterCompletions=function(e,t){var n=[],r=t.toUpperCase(),i=t.toLowerCase();e:for(var s=0,o;o=e[s];s++){var u=o.caption||o.value||o.snippet;if(!u)continue;var a=-1,f=0,l=0,c,h;if(this.exactMatch){if(t!==u.substr(0,t.length))continue e}else{var p=u.toLowerCase().indexOf(i);if(p>-1)l=p;else for(var d=0;d<t.length;d++){var v=u.indexOf(i[d],a+1),m=u.indexOf(r[d],a+1);c=v>=0?m<0||v<m?v:m:m;if(c<0)continue e;h=c-a-1,h>0&&(a===-1&&(l+=10),l+=h,f|=1<<d),a=c}}o.matchMask=f,o.exactMatch=l?0:1,o.$score=(o.score||0)-l,n.push(o)}return n}}).call(c.prototype),t.Autocomplete=l,t.FilteredList=c}),ace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){function s(e,t){var n=e.getTextRange(r.fromPoints({row:0,column:0},t));return n.split(i).length-1}function o(e,t){var n=s(e,t),r=e.getValue().split(i),o=Object.create(null),u=r[n];return r.forEach(function(e,t){if(!e||e===u)return;var i=Math.abs(n-t),s=r.length-i;o[e]?o[e]=Math.max(s,o[e]):o[e]=s}),o}var r=e(\"../range\").Range,i=/[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;t.getCompletions=function(e,t,n,r,i){var s=o(t,n),u=Object.keys(s);i(null,u.map(function(e){return{caption:e,value:e,score:s[e],meta:\"local\"}}))}}),ace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../snippets\").snippetManager,i=e(\"../autocomplete\").Autocomplete,s=e(\"../config\"),o=e(\"../lib/lang\"),u=e(\"../autocomplete/util\"),a=e(\"../autocomplete/text_completer\"),f={getCompletions:function(e,t,n,r,i){if(t.$mode.completer)return t.$mode.completer.getCompletions(e,t,n,r,i);var s=e.session.getState(n.row),o=t.$mode.getCompletions(s,t,n,r);i(null,o)}},l={getCompletions:function(e,t,n,i,s){var o=[],u=t.getTokenAt(n.row,n.column);u&&u.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/)?o.push(\"html-tag\"):o=r.getActiveScopes(e);var a=r.snippetMap,f=[];o.forEach(function(e){var t=a[e]||[];for(var n=t.length;n--;){var r=t[n],i=r.name||r.tabTrigger;if(!i)continue;f.push({caption:i,snippet:r.content,meta:r.tabTrigger&&!r.name?r.tabTrigger+\"\\u21e5 \":\"snippet\",type:\"snippet\"})}},this),s(null,f)},getDocTooltip:function(e){e.type==\"snippet\"&&!e.docHTML&&(e.docHTML=[\"<b>\",o.escapeHTML(e.caption),\"</b>\",\"<hr></hr>\",o.escapeHTML(e.snippet)].join(\"\"))}},c=[l,a,f];t.setCompleters=function(e){c.length=0,e&&c.push.apply(c,e)},t.addCompleter=function(e){c.push(e)},t.textCompleter=a,t.keyWordCompleter=f,t.snippetCompleter=l;var h={name:\"expandSnippet\",exec:function(e){return r.expandWithTab(e)},bindKey:\"Tab\"},p=function(e,t){d(t.session.$mode)},d=function(e){var t=e.$id;r.files||(r.files={}),v(t),e.modes&&e.modes.forEach(d)},v=function(e){if(!e||r.files[e])return;var t=e.replace(\"mode\",\"snippets\");r.files[e]={},s.loadModule(t,function(t){t&&(r.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=r.parseSnippetFile(t.snippetText)),r.register(t.snippets||[],t.scope),t.includeScopes&&(r.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){v(\"ace/mode/\"+e)})))})},m=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if(e.command.name===\"backspace\")n&&!u.getCompletionPrefix(t)&&t.completer.detach();else if(e.command.name===\"insertstring\"){var r=u.getCompletionPrefix(t);r&&!n&&(t.completer||(t.completer=new i),t.completer.autoInsert=!1,t.completer.showPopup(t))}},g=e(\"../editor\").Editor;e(\"../config\").defineOptions(g.prototype,\"editor\",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.on(\"afterExec\",m)):this.commands.removeListener(\"afterExec\",m)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(h),this.on(\"changeMode\",p),p(null,this)):(this.commands.removeCommand(h),this.off(\"changeMode\",p))},value:!1}})});                (function() {\n                    ace.require([\"ace/ext/language_tools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-linking.js",
    "content": "ace.define(\"ace/ext/linking\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"],function(e,t,n){function i(e){var n=e.editor,r=e.getAccelKey();if(r){var n=e.editor,i=e.getDocumentPosition(),s=n.session,o=s.getTokenAt(i.row,i.column);t.previousLinkingHover&&t.previousLinkingHover!=o&&n._emit(\"linkHoverOut\"),n._emit(\"linkHover\",{position:i,token:o}),t.previousLinkingHover=o}else t.previousLinkingHover&&(n._emit(\"linkHoverOut\"),t.previousLinkingHover=!1)}function s(e){var t=e.getAccelKey(),n=e.getButton();if(n==0&&t){var r=e.editor,i=e.getDocumentPosition(),s=r.session,o=s.getTokenAt(i.row,i.column);r._emit(\"linkClick\",{position:i,token:o})}}var r=e(\"ace/editor\").Editor;e(\"../config\").defineOptions(r.prototype,\"editor\",{enableLinking:{set:function(e){e?(this.on(\"click\",s),this.on(\"mousemove\",i)):(this.off(\"click\",s),this.off(\"mousemove\",i))},value:!1}}),t.previousLinkingHover=!1});                (function() {\n                    ace.require([\"ace/ext/linking\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-modelist.js",
    "content": "ace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function i(e){var t=a.text,n=e.split(/[\\/\\\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode=\"ace/mode/\"+e,this.extensions=n;var r;/\\^/.test(n)?r=n.replace(/\\|(\\^)?/g,function(e,t){return\"$|\"+(t?\"^\":\"^.*\\\\.\")})+\"$\":r=\"^.*\\\\.(\"+n+\")$\",this.extRe=new RegExp(r,\"gi\")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:[\"abap\"],ABC:[\"abc\"],ActionScript:[\"as\"],ADA:[\"ada|adb\"],Apache_Conf:[\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],AsciiDoc:[\"asciidoc|adoc\"],ASL:[\"dsl|asl\"],Assembly_x86:[\"asm|a\"],AutoHotKey:[\"ahk\"],Apex:[\"apex|cls|trigger|tgr\"],BatchFile:[\"bat|cmd\"],Bro:[\"bro\"],C_Cpp:[\"cpp|c|cc|cxx|h|hh|hpp|ino\"],C9Search:[\"c9search_results\"],Cirru:[\"cirru|cr\"],Clojure:[\"clj|cljs\"],Cobol:[\"CBL|COB\"],coffee:[\"coffee|cf|cson|^Cakefile\"],ColdFusion:[\"cfm\"],CSharp:[\"cs\"],Csound_Document:[\"csd\"],Csound_Orchestra:[\"orc\"],Csound_Score:[\"sco\"],CSS:[\"css\"],Curly:[\"curly\"],D:[\"d|di\"],Dart:[\"dart\"],Diff:[\"diff|patch\"],Dockerfile:[\"^Dockerfile\"],Dot:[\"dot\"],Drools:[\"drl\"],Edifact:[\"edi\"],Eiffel:[\"e|ge\"],EJS:[\"ejs\"],Elixir:[\"ex|exs\"],Elm:[\"elm\"],Erlang:[\"erl|hrl\"],Forth:[\"frt|fs|ldr|fth|4th\"],Fortran:[\"f|f90\"],FSharp:[\"fsi|fs|ml|mli|fsx|fsscript\"],FSL:[\"fsl\"],FTL:[\"ftl\"],Gcode:[\"gcode\"],Gherkin:[\"feature\"],Gitignore:[\"^.gitignore\"],Glsl:[\"glsl|frag|vert\"],Gobstones:[\"gbs\"],golang:[\"go\"],GraphQLSchema:[\"gql\"],Groovy:[\"groovy\"],HAML:[\"haml\"],Handlebars:[\"hbs|handlebars|tpl|mustache\"],Haskell:[\"hs\"],Haskell_Cabal:[\"cabal\"],haXe:[\"hx\"],Hjson:[\"hjson\"],HTML:[\"html|htm|xhtml|vue|we|wpy\"],HTML_Elixir:[\"eex|html.eex\"],HTML_Ruby:[\"erb|rhtml|html.erb\"],INI:[\"ini|conf|cfg|prefs\"],Io:[\"io\"],Jack:[\"jack\"],Jade:[\"jade|pug\"],Java:[\"java\"],JavaScript:[\"js|jsm|jsx\"],JSON:[\"json\"],JSONiq:[\"jq\"],JSP:[\"jsp\"],JSSM:[\"jssm|jssm_state\"],JSX:[\"jsx\"],Julia:[\"jl\"],Kotlin:[\"kt|kts\"],LaTeX:[\"tex|latex|ltx|bib\"],LESS:[\"less\"],Liquid:[\"liquid\"],Lisp:[\"lisp\"],LiveScript:[\"ls\"],LogiQL:[\"logic|lql\"],LSL:[\"lsl\"],Lua:[\"lua\"],LuaPage:[\"lp\"],Lucene:[\"lucene\"],Makefile:[\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],Markdown:[\"md|markdown\"],Mask:[\"mask\"],MATLAB:[\"matlab\"],Maze:[\"mz\"],MEL:[\"mel\"],MIXAL:[\"mixal\"],MUSHCode:[\"mc|mush\"],MySQL:[\"mysql\"],Nix:[\"nix\"],NSIS:[\"nsi|nsh\"],ObjectiveC:[\"m|mm\"],OCaml:[\"ml|mli\"],Pascal:[\"pas|p\"],Perl:[\"pl|pm\"],Perl6:[\"p6|pl6|pm6\"],pgSQL:[\"pgsql\"],PHP_Laravel_blade:[\"blade.php\"],PHP:[\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],Puppet:[\"epp|pp\"],Pig:[\"pig\"],Powershell:[\"ps1\"],Praat:[\"praat|praatscript|psc|proc\"],Prolog:[\"plg|prolog\"],Properties:[\"properties\"],Protobuf:[\"proto\"],Python:[\"py\"],R:[\"r\"],Razor:[\"cshtml|asp\"],RDoc:[\"Rd\"],Red:[\"red|reds\"],RHTML:[\"Rhtml\"],RST:[\"rst\"],Ruby:[\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],Rust:[\"rs\"],SASS:[\"sass\"],SCAD:[\"scad\"],Scala:[\"scala\"],Scheme:[\"scm|sm|rkt|oak|scheme\"],SCSS:[\"scss\"],SH:[\"sh|bash|^.bashrc\"],SJS:[\"sjs\"],Slim:[\"slim|skim\"],Smarty:[\"smarty|tpl\"],snippets:[\"snippets\"],Soy_Template:[\"soy\"],Space:[\"space\"],SQL:[\"sql\"],SQLServer:[\"sqlserver\"],Stylus:[\"styl|stylus\"],SVG:[\"svg\"],Swift:[\"swift\"],Tcl:[\"tcl\"],Terraform:[\"tf\",\"tfvars\",\"terragrunt\"],Tex:[\"tex\"],Text:[\"txt\"],Textile:[\"textile\"],Toml:[\"toml\"],TSX:[\"tsx\"],Twig:[\"latte|twig|swig\"],Typescript:[\"ts|typescript|str\"],Vala:[\"vala\"],VBScript:[\"vbs|vb\"],Velocity:[\"vm\"],Verilog:[\"v|vh|sv|svh\"],VHDL:[\"vhd|vhdl\"],Visualforce:[\"vfp|component|page\"],Wollok:[\"wlk|wpgm|wtest\"],XML:[\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],XQuery:[\"xq\"],YAML:[\"yaml|yml\"],Django:[\"html\"]},u={ObjectiveC:\"Objective-C\",CSharp:\"C#\",golang:\"Go\",C_Cpp:\"C and C++\",Csound_Document:\"Csound Document\",Csound_Orchestra:\"Csound\",Csound_Score:\"Csound Score\",coffee:\"CoffeeScript\",HTML_Ruby:\"HTML (Ruby)\",HTML_Elixir:\"HTML (Elixir)\",FTL:\"FreeMarker\",PHP_Laravel_blade:\"PHP (Blade Template)\",Perl6:\"Perl 6\",AutoHotKey:\"AutoHotkey / AutoIt\"},a={};for(var f in o){var l=o[f],c=(u[f]||f).replace(/_/g,\" \"),h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}});                (function() {\n                    ace.require([\"ace/ext/modelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-options.js",
    "content": "ace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/dom\"),i=\"#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 100000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {vertical-align: middle;}.ace_optionsMenuEntry button[ace_selected_button=true] {background: #e7e7e7;box-shadow: 1px 0px 2px 0px #adadad inset;border-color: #adadad;}.ace_optionsMenuEntry button {background: white;border: 1px solid lightgray;margin: 0px;}.ace_optionsMenuEntry button:hover{background: #f0f0f0;}\";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?\"top: \"+i+\";\":\"\",o=o?\"bottom: \"+o+\";\":\"\",s=s?\"right: \"+s+\";\":\"\",u=u?\"left: \"+u+\";\":\"\";var a=document.createElement(\"div\"),f=document.createElement(\"div\");a.style.cssText=\"margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);\",a.addEventListener(\"click\",function(){document.removeEventListener(\"keydown\",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener(\"keydown\",l),f.style.cssText=i+s+o+u,f.addEventListener(\"click\",function(e){e.stopPropagation()});var c=r.createElement(\"div\");c.style.position=\"relative\";var h=r.createElement(\"div\");h.className=\"ace_closeButton\",h.addEventListener(\"click\",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),ace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function i(e){var t=a.text,n=e.split(/[\\/\\\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode=\"ace/mode/\"+e,this.extensions=n;var r;/\\^/.test(n)?r=n.replace(/\\|(\\^)?/g,function(e,t){return\"$|\"+(t?\"^\":\"^.*\\\\.\")})+\"$\":r=\"^.*\\\\.(\"+n+\")$\",this.extRe=new RegExp(r,\"gi\")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:[\"abap\"],ABC:[\"abc\"],ActionScript:[\"as\"],ADA:[\"ada|adb\"],Apache_Conf:[\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],AsciiDoc:[\"asciidoc|adoc\"],ASL:[\"dsl|asl\"],Assembly_x86:[\"asm|a\"],AutoHotKey:[\"ahk\"],Apex:[\"apex|cls|trigger|tgr\"],BatchFile:[\"bat|cmd\"],Bro:[\"bro\"],C_Cpp:[\"cpp|c|cc|cxx|h|hh|hpp|ino\"],C9Search:[\"c9search_results\"],Cirru:[\"cirru|cr\"],Clojure:[\"clj|cljs\"],Cobol:[\"CBL|COB\"],coffee:[\"coffee|cf|cson|^Cakefile\"],ColdFusion:[\"cfm\"],CSharp:[\"cs\"],Csound_Document:[\"csd\"],Csound_Orchestra:[\"orc\"],Csound_Score:[\"sco\"],CSS:[\"css\"],Curly:[\"curly\"],D:[\"d|di\"],Dart:[\"dart\"],Diff:[\"diff|patch\"],Dockerfile:[\"^Dockerfile\"],Dot:[\"dot\"],Drools:[\"drl\"],Edifact:[\"edi\"],Eiffel:[\"e|ge\"],EJS:[\"ejs\"],Elixir:[\"ex|exs\"],Elm:[\"elm\"],Erlang:[\"erl|hrl\"],Forth:[\"frt|fs|ldr|fth|4th\"],Fortran:[\"f|f90\"],FSharp:[\"fsi|fs|ml|mli|fsx|fsscript\"],FSL:[\"fsl\"],FTL:[\"ftl\"],Gcode:[\"gcode\"],Gherkin:[\"feature\"],Gitignore:[\"^.gitignore\"],Glsl:[\"glsl|frag|vert\"],Gobstones:[\"gbs\"],golang:[\"go\"],GraphQLSchema:[\"gql\"],Groovy:[\"groovy\"],HAML:[\"haml\"],Handlebars:[\"hbs|handlebars|tpl|mustache\"],Haskell:[\"hs\"],Haskell_Cabal:[\"cabal\"],haXe:[\"hx\"],Hjson:[\"hjson\"],HTML:[\"html|htm|xhtml|vue|we|wpy\"],HTML_Elixir:[\"eex|html.eex\"],HTML_Ruby:[\"erb|rhtml|html.erb\"],INI:[\"ini|conf|cfg|prefs\"],Io:[\"io\"],Jack:[\"jack\"],Jade:[\"jade|pug\"],Java:[\"java\"],JavaScript:[\"js|jsm|jsx\"],JSON:[\"json\"],JSONiq:[\"jq\"],JSP:[\"jsp\"],JSSM:[\"jssm|jssm_state\"],JSX:[\"jsx\"],Julia:[\"jl\"],Kotlin:[\"kt|kts\"],LaTeX:[\"tex|latex|ltx|bib\"],LESS:[\"less\"],Liquid:[\"liquid\"],Lisp:[\"lisp\"],LiveScript:[\"ls\"],LogiQL:[\"logic|lql\"],LSL:[\"lsl\"],Lua:[\"lua\"],LuaPage:[\"lp\"],Lucene:[\"lucene\"],Makefile:[\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],Markdown:[\"md|markdown\"],Mask:[\"mask\"],MATLAB:[\"matlab\"],Maze:[\"mz\"],MEL:[\"mel\"],MIXAL:[\"mixal\"],MUSHCode:[\"mc|mush\"],MySQL:[\"mysql\"],Nix:[\"nix\"],NSIS:[\"nsi|nsh\"],ObjectiveC:[\"m|mm\"],OCaml:[\"ml|mli\"],Pascal:[\"pas|p\"],Perl:[\"pl|pm\"],Perl6:[\"p6|pl6|pm6\"],pgSQL:[\"pgsql\"],PHP_Laravel_blade:[\"blade.php\"],PHP:[\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],Puppet:[\"epp|pp\"],Pig:[\"pig\"],Powershell:[\"ps1\"],Praat:[\"praat|praatscript|psc|proc\"],Prolog:[\"plg|prolog\"],Properties:[\"properties\"],Protobuf:[\"proto\"],Python:[\"py\"],R:[\"r\"],Razor:[\"cshtml|asp\"],RDoc:[\"Rd\"],Red:[\"red|reds\"],RHTML:[\"Rhtml\"],RST:[\"rst\"],Ruby:[\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],Rust:[\"rs\"],SASS:[\"sass\"],SCAD:[\"scad\"],Scala:[\"scala\"],Scheme:[\"scm|sm|rkt|oak|scheme\"],SCSS:[\"scss\"],SH:[\"sh|bash|^.bashrc\"],SJS:[\"sjs\"],Slim:[\"slim|skim\"],Smarty:[\"smarty|tpl\"],snippets:[\"snippets\"],Soy_Template:[\"soy\"],Space:[\"space\"],SQL:[\"sql\"],SQLServer:[\"sqlserver\"],Stylus:[\"styl|stylus\"],SVG:[\"svg\"],Swift:[\"swift\"],Tcl:[\"tcl\"],Terraform:[\"tf\",\"tfvars\",\"terragrunt\"],Tex:[\"tex\"],Text:[\"txt\"],Textile:[\"textile\"],Toml:[\"toml\"],TSX:[\"tsx\"],Twig:[\"latte|twig|swig\"],Typescript:[\"ts|typescript|str\"],Vala:[\"vala\"],VBScript:[\"vbs|vb\"],Velocity:[\"vm\"],Verilog:[\"v|vh|sv|svh\"],VHDL:[\"vhd|vhdl\"],Visualforce:[\"vfp|component|page\"],Wollok:[\"wlk|wpgm|wtest\"],XML:[\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],XQuery:[\"xq\"],YAML:[\"yaml|yml\"],Django:[\"html\"]},u={ObjectiveC:\"Objective-C\",CSharp:\"C#\",golang:\"Go\",C_Cpp:\"C and C++\",Csound_Document:\"Csound Document\",Csound_Orchestra:\"Csound\",Csound_Score:\"Csound Score\",coffee:\"CoffeeScript\",HTML_Ruby:\"HTML (Ruby)\",HTML_Elixir:\"HTML (Elixir)\",FTL:\"FreeMarker\",PHP_Laravel_blade:\"PHP (Blade Template)\",Perl6:\"Perl 6\",AutoHotKey:\"AutoHotkey / AutoIt\"},a={};for(var f in o){var l=o[f],c=(u[f]||f).replace(/_/g,\" \"),h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}}),ace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=[[\"Chrome\"],[\"Clouds\"],[\"Crimson Editor\"],[\"Dawn\"],[\"Dreamweaver\"],[\"Eclipse\"],[\"GitHub\"],[\"IPlastic\"],[\"Solarized Light\"],[\"TextMate\"],[\"Tomorrow\"],[\"XCode\"],[\"Kuroir\"],[\"KatzenMilch\"],[\"SQL Server\",\"sqlserver\",\"light\"],[\"Ambiance\",\"ambiance\",\"dark\"],[\"Chaos\",\"chaos\",\"dark\"],[\"Clouds Midnight\",\"clouds_midnight\",\"dark\"],[\"Dracula\",\"\",\"dark\"],[\"Cobalt\",\"cobalt\",\"dark\"],[\"Gruvbox\",\"gruvbox\",\"dark\"],[\"Green on Black\",\"gob\",\"dark\"],[\"idle Fingers\",\"idle_fingers\",\"dark\"],[\"krTheme\",\"kr_theme\",\"dark\"],[\"Merbivore\",\"merbivore\",\"dark\"],[\"Merbivore Soft\",\"merbivore_soft\",\"dark\"],[\"Mono Industrial\",\"mono_industrial\",\"dark\"],[\"Monokai\",\"monokai\",\"dark\"],[\"Pastel on dark\",\"pastel_on_dark\",\"dark\"],[\"Solarized Dark\",\"solarized_dark\",\"dark\"],[\"Terminal\",\"terminal\",\"dark\"],[\"Tomorrow Night\",\"tomorrow_night\",\"dark\"],[\"Tomorrow Night Blue\",\"tomorrow_night_blue\",\"dark\"],[\"Tomorrow Night Bright\",\"tomorrow_night_bright\",\"dark\"],[\"Tomorrow Night 80s\",\"tomorrow_night_eighties\",\"dark\"],[\"Twilight\",\"twilight\",\"dark\"],[\"Vibrant Ink\",\"vibrant_ink\",\"dark\"]];t.themesByName={},t.themes=r.map(function(e){var n=e[1]||e[0].replace(/ /g,\"_\").toLowerCase(),r={caption:e[0],theme:\"ace/theme/\"+n,isDark:e[2]==\"dark\",name:n};return t.themesByName[n]=r,r})}),ace.define(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"],function(e,t,n){\"use strict\";var r=e(\"./menu_tools/overlay_page\").overlayPage,i=e(\"../lib/dom\"),s=e(\"../lib/oop\"),o=e(\"../lib/event_emitter\").EventEmitter,u=i.buildDom,a=e(\"./modelist\"),f=e(\"./themelist\"),l={Bright:[],Dark:[]};f.themes.forEach(function(e){l[e.isDark?\"Dark\":\"Bright\"].push({caption:e.caption,value:e.theme})});var c=a.modes.map(function(e){return{caption:e.caption,value:e.mode}}),h={Main:{Mode:{path:\"mode\",type:\"select\",items:c},Theme:{path:\"theme\",type:\"select\",items:l},Keybinding:{type:\"buttonBar\",path:\"keyboardHandler\",items:[{caption:\"Ace\",value:null},{caption:\"Vim\",value:\"ace/keyboard/vim\"},{caption:\"Emacs\",value:\"ace/keyboard/emacs\"},{caption:\"Sublime\",value:\"ace/keyboard/sublime\"}]},\"Font Size\":{path:\"fontSize\",type:\"number\",defaultValue:12,defaults:[{caption:\"12px\",value:12},{caption:\"24px\",value:24}]},\"Soft Wrap\":{type:\"buttonBar\",path:\"wrap\",items:[{caption:\"Off\",value:\"off\"},{caption:\"View\",value:\"free\"},{caption:\"margin\",value:\"printMargin\"},{caption:\"40\",value:\"40\"}]},\"Cursor Style\":{path:\"cursorStyle\",items:[{caption:\"Ace\",value:\"ace\"},{caption:\"Slim\",value:\"slim\"},{caption:\"Smooth\",value:\"smooth\"},{caption:\"Smooth And Slim\",value:\"smooth slim\"},{caption:\"Wide\",value:\"wide\"}]},Folding:{path:\"foldStyle\",items:[{caption:\"Manual\",value:\"manual\"},{caption:\"Mark begin\",value:\"markbegin\"},{caption:\"Mark begin and end\",value:\"markbeginend\"}]},\"Soft Tabs\":[{path:\"useSoftTabs\"},{path:\"tabSize\",type:\"number\",values:[2,3,4,8,16]}],Overscroll:{type:\"buttonBar\",path:\"scrollPastEnd\",items:[{caption:\"None\",value:0},{caption:\"Half\",value:.5},{caption:\"Full\",value:1}]}},More:{\"Atomic soft tabs\":{path:\"navigateWithinSoftTabs\"},\"Enable Behaviours\":{path:\"behavioursEnabled\"},\"Full Line Selection\":{type:\"checkbox\",values:\"text|line\",path:\"selectionStyle\"},\"Highlight Active Line\":{path:\"highlightActiveLine\"},\"Show Invisibles\":{path:\"showInvisibles\"},\"Show Indent Guides\":{path:\"displayIndentGuides\"},\"Persistent Scrollbar\":[{path:\"hScrollBarAlwaysVisible\"},{path:\"vScrollBarAlwaysVisible\"}],\"Animate scrolling\":{path:\"animatedScroll\"},\"Show Gutter\":{path:\"showGutter\"},\"Show Line Numbers\":{path:\"showLineNumbers\"},\"Relative Line Numbers\":{path:\"relativeLineNumbers\"},\"Fixed Gutter Width\":{path:\"fixedWidthGutter\"},\"Show Print Margin\":[{path:\"showPrintMargin\"},{type:\"number\",path:\"printMarginColumn\"}],\"Indented Soft Wrap\":{path:\"indentedSoftWrap\"},\"Highlight selected word\":{path:\"highlightSelectedWord\"},\"Fade Fold Widgets\":{path:\"fadeFoldWidgets\"},\"Use textarea for IME\":{path:\"useTextareaForIME\"},\"Merge Undo Deltas\":{path:\"mergeUndoDeltas\",items:[{caption:\"Always\",value:\"always\"},{caption:\"Never\",value:\"false\"},{caption:\"Timed\",value:\"true\"}]},\"Elastic Tabstops\":{path:\"useElasticTabstops\"},\"Incremental Search\":{path:\"useIncrementalSearch\"},\"Read-only\":{path:\"readOnly\"},\"Copy without selection\":{path:\"copyWithEmptySelection\"},\"Live Autocompletion\":{path:\"enableLiveAutocompletion\"}}},p=function(e,t){this.editor=e,this.container=t||document.createElement(\"div\"),this.groups=[],this.options={}};(function(){s.implement(this,o),this.add=function(e){e.Main&&s.mixin(h.Main,e.Main),e.More&&s.mixin(h.More,e.More)},this.render=function(){this.container.innerHTML=\"\",u([\"table\",{id:\"controls\"},this.renderOptionGroup(h.Main),[\"tr\",null,[\"td\",{colspan:2},[\"table\",{id:\"more-controls\"},this.renderOptionGroup(h.More)]]]],this.container)},this.renderOptionGroup=function(e){return Object.keys(e).map(function(t,n){var r=e[t];return r.position||(r.position=n/1e4),r.label||(r.label=t),r}).sort(function(e,t){return e.position-t.position}).map(function(e){return this.renderOption(e.label,e)},this)},this.renderOptionControl=function(e,t){var n=this;if(Array.isArray(t))return t.map(function(t){return n.renderOptionControl(e,t)});var r,i=n.getOption(t);t.values&&t.type!=\"checkbox\"&&(typeof t.values==\"string\"&&(t.values=t.values.split(\"|\")),t.items=t.values.map(function(e){return{value:e,name:e}}));if(t.type==\"buttonBar\")r=[\"div\",t.items.map(function(e){return[\"button\",{value:e.value,ace_selected_button:i==e.value,onclick:function(){n.setOption(t,e.value);var r=this.parentNode.querySelectorAll(\"[ace_selected_button]\");for(var i=0;i<r.length;i++)r[i].removeAttribute(\"ace_selected_button\");this.setAttribute(\"ace_selected_button\",!0)}},e.desc||e.caption||e.name]})];else if(t.type==\"number\")r=[\"input\",{type:\"number\",value:i||t.defaultValue,style:\"width:3em\",oninput:function(){n.setOption(t,parseInt(this.value))}}],t.defaults&&(r=[r,t.defaults.map(function(e){return[\"button\",{onclick:function(){var t=this.parentNode.firstChild;t.value=e.value,t.oninput()}},e.caption]})]);else if(t.items){var s=function(e){return e.map(function(e){return[\"option\",{value:e.value||e.name},e.desc||e.caption||e.name]})},o=Array.isArray(t.items)?s(t.items):Object.keys(t.items).map(function(e){return[\"optgroup\",{label:e},s(t.items[e])]});r=[\"select\",{id:e,value:i,onchange:function(){n.setOption(t,this.value)}},o]}else typeof t.values==\"string\"&&(t.values=t.values.split(\"|\")),t.values&&(i=i==t.values[1]),r=[\"input\",{type:\"checkbox\",id:e,checked:i||null,onchange:function(){var e=this.checked;t.values&&(e=t.values[e?1:0]),n.setOption(t,e)}}],t.type==\"checkedNumber\"&&(r=[r,[]]);return r},this.renderOption=function(e,t){if(t.path&&!t.onchange&&!this.editor.$options[t.path])return;this.options[t.path]=t;var n=\"-\"+t.path,r=this.renderOptionControl(n,t);return[\"tr\",{\"class\":\"ace_optionsMenuEntry\"},[\"td\",[\"label\",{\"for\":n},e]],[\"td\",r]]},this.setOption=function(e,t){typeof e==\"string\"&&(e=this.options[e]),t==\"false\"&&(t=!1),t==\"true\"&&(t=!0),t==\"null\"&&(t=null),t==\"undefined\"&&(t=undefined),typeof t==\"string\"&&parseFloat(t).toString()==t&&(t=parseFloat(t)),e.onchange?e.onchange(t):e.path&&this.editor.setOption(e.path,t),this._signal(\"setOption\",{name:e.path,value:t})},this.getOption=function(e){return e.getValue?e.getValue():this.editor.getOption(e.path)}}).call(p.prototype),t.OptionPanel=p});                (function() {\n                    ace.require([\"ace/ext/options\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-rtl.js",
    "content": "ace.define(\"ace/ext/rtl\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";function u(e,t){var n=t.getSelection().lead;t.session.$bidiHandler.isRtlLine(n.row)&&n.column===0&&(t.session.$bidiHandler.isMoveLeftOperation&&n.row>0?t.getSelection().moveCursorTo(n.row-1,t.session.getLine(n.row-1).length):t.getSelection().isEmpty()?n.column+=1:n.setPosition(n.row,n.column+1))}function a(e){e.editor.session.$bidiHandler.isMoveLeftOperation=/gotoleft|selectleft|backspace|removewordleft/.test(e.command.name)}function f(e,t){var n=t.session;n.$bidiHandler.currentRow=null;if(n.$bidiHandler.isRtlLine(e.start.row)&&e.action===\"insert\"&&e.lines.length>1)for(var r=e.start.row;r<e.end.row;r++)n.getLine(r+1).charAt(0)!==n.$bidiHandler.RLE&&(n.doc.$lines[r+1]=n.$bidiHandler.RLE+n.getLine(r+1))}function l(e,t){var n=t.session,r=n.$bidiHandler,i=t.$textLayer.$lines.cells,s=t.layerConfig.width-t.layerConfig.padding+\"px\";i.forEach(function(e){var t=e.element.style;r&&r.isRtlLine(e.row)?(t.direction=\"rtl\",t.textAlign=\"right\",t.width=s):(t.direction=\"\",t.textAlign=\"\",t.width=\"\")})}function c(e){function n(e){var t=e.element.style;t.direction=t.textAlign=t.width=\"\"}var t=e.$textLayer.$lines;t.cells.forEach(n),t.cellCache.forEach(n)}var r=e(\"ace/lib/dom\"),i=e(\"ace/lib/lang\"),s=[{name:\"leftToRight\",bindKey:{win:\"Ctrl-Alt-Shift-L\",mac:\"Command-Alt-Shift-L\"},exec:function(e){e.session.$bidiHandler.setRtlDirection(e,!1)},readOnly:!0},{name:\"rightToLeft\",bindKey:{win:\"Ctrl-Alt-Shift-R\",mac:\"Command-Alt-Shift-R\"},exec:function(e){e.session.$bidiHandler.setRtlDirection(e,!0)},readOnly:!0}],o=e(\"../editor\").Editor;e(\"../config\").defineOptions(o.prototype,\"editor\",{rtlText:{set:function(e){e?(this.on(\"change\",f),this.on(\"changeSelection\",u),this.renderer.on(\"afterRender\",l),this.commands.on(\"exec\",a),this.commands.addCommands(s)):(this.off(\"change\",f),this.off(\"changeSelection\",u),this.renderer.off(\"afterRender\",l),this.commands.off(\"exec\",a),this.commands.removeCommands(s),c(this.renderer)),this.renderer.updateFull()}},rtl:{set:function(e){this.session.$bidiHandler.$isRtl=e,e?(this.setOption(\"rtlText\",!1),this.renderer.on(\"afterRender\",l),this.session.$bidiHandler.seenBidi=!0):(this.renderer.off(\"afterRender\",l),c(this.renderer)),this.renderer.updateFull()}}})});                (function() {\n                    ace.require([\"ace/ext/rtl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-searchbox.js",
    "content": "ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/event\"),o='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: \"\";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width:  2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing:    border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/keys\"),f=999;r.importCssString(o,\"ace_searchbox\");var l=function(e,t,n){var i=r.createElement(\"div\");r.buildDom([\"div\",{\"class\":\"ace_search right\"},[\"span\",{action:\"hide\",\"class\":\"ace_searchbtn_close\"}],[\"div\",{\"class\":\"ace_search_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:\"Search for\",spellcheck:\"false\"}],[\"span\",{action:\"findPrev\",\"class\":\"ace_searchbtn prev\"},\"\\u200b\"],[\"span\",{action:\"findNext\",\"class\":\"ace_searchbtn next\"},\"\\u200b\"],[\"span\",{action:\"findAll\",\"class\":\"ace_searchbtn\",title:\"Alt-Enter\"},\"All\"]],[\"div\",{\"class\":\"ace_replace_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:\"Replace with\",spellcheck:\"false\"}],[\"span\",{action:\"replaceAndFindNext\",\"class\":\"ace_searchbtn\"},\"Replace\"],[\"span\",{action:\"replaceAll\",\"class\":\"ace_searchbtn\"},\"All\"]],[\"div\",{\"class\":\"ace_search_options\"},[\"span\",{action:\"toggleReplace\",\"class\":\"ace_button\",title:\"Toggle Replace mode\",style:\"float:left;margin-top:-2px;padding:0 5px;\"},\"+\"],[\"span\",{\"class\":\"ace_search_counter\"}],[\"span\",{action:\"toggleRegexpMode\",\"class\":\"ace_button\",title:\"RegExp Search\"},\".*\"],[\"span\",{action:\"toggleCaseSensitive\",\"class\":\"ace_button\",title:\"CaseSensitive Search\"},\"Aa\"],[\"span\",{action:\"toggleWholeWords\",\"class\":\"ace_button\",title:\"Whole Word Search\"},\"\\\\b\"],[\"span\",{action:\"searchInSelection\",\"class\":\"ace_button\",title:\"Search In Selection\"},\"S\"]]],i),this.element=i.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),r.importCssString(o,\"ace_searchbox\",e.container)};(function(){this.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},this.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOption=e.querySelector(\"[action=searchInSelection]\"),this.replaceOption=e.querySelector(\"[action=toggleReplace]\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\"),this.searchCounter=e.querySelector(\".ace_search_counter\")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,\"mousedown\",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,\"click\",function(e){var n=e.target||e.srcElement,r=n.getAttribute(\"action\");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,\"input\",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,\"focus\",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,\"focus\",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({\"Ctrl-f|Command-f\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},\"Ctrl-H|Command-Option-F\":function(e){if(e.editor.getReadOnly())return;e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus()},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:\"toggleReplace\",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:\"searchInSelection\",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]),this.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,\"ace_active-line\"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(e){r.setCssClass(this.replaceOption,\"checked\",this.searchRange),r.setCssClass(this.searchOption,\"checked\",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?\"-\":\"+\",r.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?\"none\":\"\",this.replaceBox.style.display=this.replaceOption.checked&&!t?\"\":\"none\",this.find(!1,!1,e)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var i=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange}),s=!i&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",s),this.editor._emit(\"findSearchBox\",{match:!s}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=0,r=0;if(t){var i=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),s=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(s-=e.session.doc.positionToIndex(this.searchRange.start));var o=t.lastIndex=0,u;while(u=t.exec(i)){n++,o=u.index,o<=s&&r++;if(n>f)break;if(!u[0]){t.lastIndex=o+=1;if(o>=i.length)break}}}this.searchCounter.textContent=r+\" of \"+(n>f?f+\"+\":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",t),this.editor._emit(\"findSearchBox\",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off(\"changeSession\",this.setSession),this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on(\"changeSession\",this.setSession),this.element.style.display=\"\",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}});                (function() {\n                    ace.require([\"ace/ext/searchbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-settings_menu.js",
    "content": "ace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/dom\"),i=\"#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 100000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {vertical-align: middle;}.ace_optionsMenuEntry button[ace_selected_button=true] {background: #e7e7e7;box-shadow: 1px 0px 2px 0px #adadad inset;border-color: #adadad;}.ace_optionsMenuEntry button {background: white;border: 1px solid lightgray;margin: 0px;}.ace_optionsMenuEntry button:hover{background: #f0f0f0;}\";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?\"top: \"+i+\";\":\"\",o=o?\"bottom: \"+o+\";\":\"\",s=s?\"right: \"+s+\";\":\"\",u=u?\"left: \"+u+\";\":\"\";var a=document.createElement(\"div\"),f=document.createElement(\"div\");a.style.cssText=\"margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);\",a.addEventListener(\"click\",function(){document.removeEventListener(\"keydown\",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener(\"keydown\",l),f.style.cssText=i+s+o+u,f.addEventListener(\"click\",function(e){e.stopPropagation()});var c=r.createElement(\"div\");c.style.position=\"relative\";var h=r.createElement(\"div\");h.className=\"ace_closeButton\",h.addEventListener(\"click\",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),ace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function i(e){var t=a.text,n=e.split(/[\\/\\\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode=\"ace/mode/\"+e,this.extensions=n;var r;/\\^/.test(n)?r=n.replace(/\\|(\\^)?/g,function(e,t){return\"$|\"+(t?\"^\":\"^.*\\\\.\")})+\"$\":r=\"^.*\\\\.(\"+n+\")$\",this.extRe=new RegExp(r,\"gi\")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:[\"abap\"],ABC:[\"abc\"],ActionScript:[\"as\"],ADA:[\"ada|adb\"],Apache_Conf:[\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],AsciiDoc:[\"asciidoc|adoc\"],ASL:[\"dsl|asl\"],Assembly_x86:[\"asm|a\"],AutoHotKey:[\"ahk\"],Apex:[\"apex|cls|trigger|tgr\"],BatchFile:[\"bat|cmd\"],Bro:[\"bro\"],C_Cpp:[\"cpp|c|cc|cxx|h|hh|hpp|ino\"],C9Search:[\"c9search_results\"],Cirru:[\"cirru|cr\"],Clojure:[\"clj|cljs\"],Cobol:[\"CBL|COB\"],coffee:[\"coffee|cf|cson|^Cakefile\"],ColdFusion:[\"cfm\"],CSharp:[\"cs\"],Csound_Document:[\"csd\"],Csound_Orchestra:[\"orc\"],Csound_Score:[\"sco\"],CSS:[\"css\"],Curly:[\"curly\"],D:[\"d|di\"],Dart:[\"dart\"],Diff:[\"diff|patch\"],Dockerfile:[\"^Dockerfile\"],Dot:[\"dot\"],Drools:[\"drl\"],Edifact:[\"edi\"],Eiffel:[\"e|ge\"],EJS:[\"ejs\"],Elixir:[\"ex|exs\"],Elm:[\"elm\"],Erlang:[\"erl|hrl\"],Forth:[\"frt|fs|ldr|fth|4th\"],Fortran:[\"f|f90\"],FSharp:[\"fsi|fs|ml|mli|fsx|fsscript\"],FSL:[\"fsl\"],FTL:[\"ftl\"],Gcode:[\"gcode\"],Gherkin:[\"feature\"],Gitignore:[\"^.gitignore\"],Glsl:[\"glsl|frag|vert\"],Gobstones:[\"gbs\"],golang:[\"go\"],GraphQLSchema:[\"gql\"],Groovy:[\"groovy\"],HAML:[\"haml\"],Handlebars:[\"hbs|handlebars|tpl|mustache\"],Haskell:[\"hs\"],Haskell_Cabal:[\"cabal\"],haXe:[\"hx\"],Hjson:[\"hjson\"],HTML:[\"html|htm|xhtml|vue|we|wpy\"],HTML_Elixir:[\"eex|html.eex\"],HTML_Ruby:[\"erb|rhtml|html.erb\"],INI:[\"ini|conf|cfg|prefs\"],Io:[\"io\"],Jack:[\"jack\"],Jade:[\"jade|pug\"],Java:[\"java\"],JavaScript:[\"js|jsm|jsx\"],JSON:[\"json\"],JSONiq:[\"jq\"],JSP:[\"jsp\"],JSSM:[\"jssm|jssm_state\"],JSX:[\"jsx\"],Julia:[\"jl\"],Kotlin:[\"kt|kts\"],LaTeX:[\"tex|latex|ltx|bib\"],LESS:[\"less\"],Liquid:[\"liquid\"],Lisp:[\"lisp\"],LiveScript:[\"ls\"],LogiQL:[\"logic|lql\"],LSL:[\"lsl\"],Lua:[\"lua\"],LuaPage:[\"lp\"],Lucene:[\"lucene\"],Makefile:[\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],Markdown:[\"md|markdown\"],Mask:[\"mask\"],MATLAB:[\"matlab\"],Maze:[\"mz\"],MEL:[\"mel\"],MIXAL:[\"mixal\"],MUSHCode:[\"mc|mush\"],MySQL:[\"mysql\"],Nix:[\"nix\"],NSIS:[\"nsi|nsh\"],ObjectiveC:[\"m|mm\"],OCaml:[\"ml|mli\"],Pascal:[\"pas|p\"],Perl:[\"pl|pm\"],Perl6:[\"p6|pl6|pm6\"],pgSQL:[\"pgsql\"],PHP_Laravel_blade:[\"blade.php\"],PHP:[\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],Puppet:[\"epp|pp\"],Pig:[\"pig\"],Powershell:[\"ps1\"],Praat:[\"praat|praatscript|psc|proc\"],Prolog:[\"plg|prolog\"],Properties:[\"properties\"],Protobuf:[\"proto\"],Python:[\"py\"],R:[\"r\"],Razor:[\"cshtml|asp\"],RDoc:[\"Rd\"],Red:[\"red|reds\"],RHTML:[\"Rhtml\"],RST:[\"rst\"],Ruby:[\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],Rust:[\"rs\"],SASS:[\"sass\"],SCAD:[\"scad\"],Scala:[\"scala\"],Scheme:[\"scm|sm|rkt|oak|scheme\"],SCSS:[\"scss\"],SH:[\"sh|bash|^.bashrc\"],SJS:[\"sjs\"],Slim:[\"slim|skim\"],Smarty:[\"smarty|tpl\"],snippets:[\"snippets\"],Soy_Template:[\"soy\"],Space:[\"space\"],SQL:[\"sql\"],SQLServer:[\"sqlserver\"],Stylus:[\"styl|stylus\"],SVG:[\"svg\"],Swift:[\"swift\"],Tcl:[\"tcl\"],Terraform:[\"tf\",\"tfvars\",\"terragrunt\"],Tex:[\"tex\"],Text:[\"txt\"],Textile:[\"textile\"],Toml:[\"toml\"],TSX:[\"tsx\"],Twig:[\"latte|twig|swig\"],Typescript:[\"ts|typescript|str\"],Vala:[\"vala\"],VBScript:[\"vbs|vb\"],Velocity:[\"vm\"],Verilog:[\"v|vh|sv|svh\"],VHDL:[\"vhd|vhdl\"],Visualforce:[\"vfp|component|page\"],Wollok:[\"wlk|wpgm|wtest\"],XML:[\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],XQuery:[\"xq\"],YAML:[\"yaml|yml\"],Django:[\"html\"]},u={ObjectiveC:\"Objective-C\",CSharp:\"C#\",golang:\"Go\",C_Cpp:\"C and C++\",Csound_Document:\"Csound Document\",Csound_Orchestra:\"Csound\",Csound_Score:\"Csound Score\",coffee:\"CoffeeScript\",HTML_Ruby:\"HTML (Ruby)\",HTML_Elixir:\"HTML (Elixir)\",FTL:\"FreeMarker\",PHP_Laravel_blade:\"PHP (Blade Template)\",Perl6:\"Perl 6\",AutoHotKey:\"AutoHotkey / AutoIt\"},a={};for(var f in o){var l=o[f],c=(u[f]||f).replace(/_/g,\" \"),h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}}),ace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=[[\"Chrome\"],[\"Clouds\"],[\"Crimson Editor\"],[\"Dawn\"],[\"Dreamweaver\"],[\"Eclipse\"],[\"GitHub\"],[\"IPlastic\"],[\"Solarized Light\"],[\"TextMate\"],[\"Tomorrow\"],[\"XCode\"],[\"Kuroir\"],[\"KatzenMilch\"],[\"SQL Server\",\"sqlserver\",\"light\"],[\"Ambiance\",\"ambiance\",\"dark\"],[\"Chaos\",\"chaos\",\"dark\"],[\"Clouds Midnight\",\"clouds_midnight\",\"dark\"],[\"Dracula\",\"\",\"dark\"],[\"Cobalt\",\"cobalt\",\"dark\"],[\"Gruvbox\",\"gruvbox\",\"dark\"],[\"Green on Black\",\"gob\",\"dark\"],[\"idle Fingers\",\"idle_fingers\",\"dark\"],[\"krTheme\",\"kr_theme\",\"dark\"],[\"Merbivore\",\"merbivore\",\"dark\"],[\"Merbivore Soft\",\"merbivore_soft\",\"dark\"],[\"Mono Industrial\",\"mono_industrial\",\"dark\"],[\"Monokai\",\"monokai\",\"dark\"],[\"Pastel on dark\",\"pastel_on_dark\",\"dark\"],[\"Solarized Dark\",\"solarized_dark\",\"dark\"],[\"Terminal\",\"terminal\",\"dark\"],[\"Tomorrow Night\",\"tomorrow_night\",\"dark\"],[\"Tomorrow Night Blue\",\"tomorrow_night_blue\",\"dark\"],[\"Tomorrow Night Bright\",\"tomorrow_night_bright\",\"dark\"],[\"Tomorrow Night 80s\",\"tomorrow_night_eighties\",\"dark\"],[\"Twilight\",\"twilight\",\"dark\"],[\"Vibrant Ink\",\"vibrant_ink\",\"dark\"]];t.themesByName={},t.themes=r.map(function(e){var n=e[1]||e[0].replace(/ /g,\"_\").toLowerCase(),r={caption:e[0],theme:\"ace/theme/\"+n,isDark:e[2]==\"dark\",name:n};return t.themesByName[n]=r,r})}),ace.define(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"],function(e,t,n){\"use strict\";var r=e(\"./menu_tools/overlay_page\").overlayPage,i=e(\"../lib/dom\"),s=e(\"../lib/oop\"),o=e(\"../lib/event_emitter\").EventEmitter,u=i.buildDom,a=e(\"./modelist\"),f=e(\"./themelist\"),l={Bright:[],Dark:[]};f.themes.forEach(function(e){l[e.isDark?\"Dark\":\"Bright\"].push({caption:e.caption,value:e.theme})});var c=a.modes.map(function(e){return{caption:e.caption,value:e.mode}}),h={Main:{Mode:{path:\"mode\",type:\"select\",items:c},Theme:{path:\"theme\",type:\"select\",items:l},Keybinding:{type:\"buttonBar\",path:\"keyboardHandler\",items:[{caption:\"Ace\",value:null},{caption:\"Vim\",value:\"ace/keyboard/vim\"},{caption:\"Emacs\",value:\"ace/keyboard/emacs\"},{caption:\"Sublime\",value:\"ace/keyboard/sublime\"}]},\"Font Size\":{path:\"fontSize\",type:\"number\",defaultValue:12,defaults:[{caption:\"12px\",value:12},{caption:\"24px\",value:24}]},\"Soft Wrap\":{type:\"buttonBar\",path:\"wrap\",items:[{caption:\"Off\",value:\"off\"},{caption:\"View\",value:\"free\"},{caption:\"margin\",value:\"printMargin\"},{caption:\"40\",value:\"40\"}]},\"Cursor Style\":{path:\"cursorStyle\",items:[{caption:\"Ace\",value:\"ace\"},{caption:\"Slim\",value:\"slim\"},{caption:\"Smooth\",value:\"smooth\"},{caption:\"Smooth And Slim\",value:\"smooth slim\"},{caption:\"Wide\",value:\"wide\"}]},Folding:{path:\"foldStyle\",items:[{caption:\"Manual\",value:\"manual\"},{caption:\"Mark begin\",value:\"markbegin\"},{caption:\"Mark begin and end\",value:\"markbeginend\"}]},\"Soft Tabs\":[{path:\"useSoftTabs\"},{path:\"tabSize\",type:\"number\",values:[2,3,4,8,16]}],Overscroll:{type:\"buttonBar\",path:\"scrollPastEnd\",items:[{caption:\"None\",value:0},{caption:\"Half\",value:.5},{caption:\"Full\",value:1}]}},More:{\"Atomic soft tabs\":{path:\"navigateWithinSoftTabs\"},\"Enable Behaviours\":{path:\"behavioursEnabled\"},\"Full Line Selection\":{type:\"checkbox\",values:\"text|line\",path:\"selectionStyle\"},\"Highlight Active Line\":{path:\"highlightActiveLine\"},\"Show Invisibles\":{path:\"showInvisibles\"},\"Show Indent Guides\":{path:\"displayIndentGuides\"},\"Persistent Scrollbar\":[{path:\"hScrollBarAlwaysVisible\"},{path:\"vScrollBarAlwaysVisible\"}],\"Animate scrolling\":{path:\"animatedScroll\"},\"Show Gutter\":{path:\"showGutter\"},\"Show Line Numbers\":{path:\"showLineNumbers\"},\"Relative Line Numbers\":{path:\"relativeLineNumbers\"},\"Fixed Gutter Width\":{path:\"fixedWidthGutter\"},\"Show Print Margin\":[{path:\"showPrintMargin\"},{type:\"number\",path:\"printMarginColumn\"}],\"Indented Soft Wrap\":{path:\"indentedSoftWrap\"},\"Highlight selected word\":{path:\"highlightSelectedWord\"},\"Fade Fold Widgets\":{path:\"fadeFoldWidgets\"},\"Use textarea for IME\":{path:\"useTextareaForIME\"},\"Merge Undo Deltas\":{path:\"mergeUndoDeltas\",items:[{caption:\"Always\",value:\"always\"},{caption:\"Never\",value:\"false\"},{caption:\"Timed\",value:\"true\"}]},\"Elastic Tabstops\":{path:\"useElasticTabstops\"},\"Incremental Search\":{path:\"useIncrementalSearch\"},\"Read-only\":{path:\"readOnly\"},\"Copy without selection\":{path:\"copyWithEmptySelection\"},\"Live Autocompletion\":{path:\"enableLiveAutocompletion\"}}},p=function(e,t){this.editor=e,this.container=t||document.createElement(\"div\"),this.groups=[],this.options={}};(function(){s.implement(this,o),this.add=function(e){e.Main&&s.mixin(h.Main,e.Main),e.More&&s.mixin(h.More,e.More)},this.render=function(){this.container.innerHTML=\"\",u([\"table\",{id:\"controls\"},this.renderOptionGroup(h.Main),[\"tr\",null,[\"td\",{colspan:2},[\"table\",{id:\"more-controls\"},this.renderOptionGroup(h.More)]]]],this.container)},this.renderOptionGroup=function(e){return Object.keys(e).map(function(t,n){var r=e[t];return r.position||(r.position=n/1e4),r.label||(r.label=t),r}).sort(function(e,t){return e.position-t.position}).map(function(e){return this.renderOption(e.label,e)},this)},this.renderOptionControl=function(e,t){var n=this;if(Array.isArray(t))return t.map(function(t){return n.renderOptionControl(e,t)});var r,i=n.getOption(t);t.values&&t.type!=\"checkbox\"&&(typeof t.values==\"string\"&&(t.values=t.values.split(\"|\")),t.items=t.values.map(function(e){return{value:e,name:e}}));if(t.type==\"buttonBar\")r=[\"div\",t.items.map(function(e){return[\"button\",{value:e.value,ace_selected_button:i==e.value,onclick:function(){n.setOption(t,e.value);var r=this.parentNode.querySelectorAll(\"[ace_selected_button]\");for(var i=0;i<r.length;i++)r[i].removeAttribute(\"ace_selected_button\");this.setAttribute(\"ace_selected_button\",!0)}},e.desc||e.caption||e.name]})];else if(t.type==\"number\")r=[\"input\",{type:\"number\",value:i||t.defaultValue,style:\"width:3em\",oninput:function(){n.setOption(t,parseInt(this.value))}}],t.defaults&&(r=[r,t.defaults.map(function(e){return[\"button\",{onclick:function(){var t=this.parentNode.firstChild;t.value=e.value,t.oninput()}},e.caption]})]);else if(t.items){var s=function(e){return e.map(function(e){return[\"option\",{value:e.value||e.name},e.desc||e.caption||e.name]})},o=Array.isArray(t.items)?s(t.items):Object.keys(t.items).map(function(e){return[\"optgroup\",{label:e},s(t.items[e])]});r=[\"select\",{id:e,value:i,onchange:function(){n.setOption(t,this.value)}},o]}else typeof t.values==\"string\"&&(t.values=t.values.split(\"|\")),t.values&&(i=i==t.values[1]),r=[\"input\",{type:\"checkbox\",id:e,checked:i||null,onchange:function(){var e=this.checked;t.values&&(e=t.values[e?1:0]),n.setOption(t,e)}}],t.type==\"checkedNumber\"&&(r=[r,[]]);return r},this.renderOption=function(e,t){if(t.path&&!t.onchange&&!this.editor.$options[t.path])return;this.options[t.path]=t;var n=\"-\"+t.path,r=this.renderOptionControl(n,t);return[\"tr\",{\"class\":\"ace_optionsMenuEntry\"},[\"td\",[\"label\",{\"for\":n},e]],[\"td\",r]]},this.setOption=function(e,t){typeof e==\"string\"&&(e=this.options[e]),t==\"false\"&&(t=!1),t==\"true\"&&(t=!0),t==\"null\"&&(t=null),t==\"undefined\"&&(t=undefined),typeof t==\"string\"&&parseFloat(t).toString()==t&&(t=parseFloat(t)),e.onchange?e.onchange(t):e.path&&this.editor.setOption(e.path,t),this._signal(\"setOption\",{name:e.path,value:t})},this.getOption=function(e){return e.getValue?e.getValue():this.editor.getOption(e.path)}}).call(p.prototype),t.OptionPanel=p}),ace.define(\"ace/ext/settings_menu\",[\"require\",\"exports\",\"module\",\"ace/ext/options\",\"ace/ext/menu_tools/overlay_page\",\"ace/editor\"],function(e,t,n){\"use strict\";function s(e){if(!document.getElementById(\"ace_settingsmenu\")){var t=new r(e);t.render(),t.container.id=\"ace_settingsmenu\",i(e,t.container,\"0\",\"0\",\"0\"),t.container.querySelector(\"select,input,button,checkbox\").focus()}}var r=e(\"ace/ext/options\").OptionPanel,i=e(\"./menu_tools/overlay_page\").overlayPage;n.exports.init=function(t){var n=e(\"ace/editor\").Editor;n.prototype.showSettingsMenu=function(){s(this)}}});                (function() {\n                    ace.require([\"ace/ext/settings_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-spellcheck.js",
    "content": "ace.define(\"ace/ext/spellcheck\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\");t.contextMenuHandler=function(e){var t=e.target,n=t.textInput.getElement();if(!t.selection.isEmpty())return;var i=t.getCursorPosition(),s=t.session.getWordRange(i.row,i.column),o=t.session.getTextRange(s);t.session.tokenRe.lastIndex=0;if(!t.session.tokenRe.test(o))return;var u=\"\\x01\\x01\",a=o+\" \"+u;n.value=a,n.setSelectionRange(o.length,o.length+1),n.setSelectionRange(0,0),n.setSelectionRange(0,o.length);var f=!1;r.addListener(n,\"keydown\",function l(){r.removeListener(n,\"keydown\",l),f=!0}),t.textInput.setInputHandler(function(e){console.log(e,a,n.selectionStart,n.selectionEnd);if(e==a)return\"\";if(e.lastIndexOf(a,0)===0)return e.slice(a.length);if(e.substr(n.selectionEnd)==a)return e.slice(0,-a.length);if(e.slice(-2)==u){var r=e.slice(0,-2);if(r.slice(-1)==\" \")return f?r.substring(0,n.selectionEnd):(r=r.slice(0,-1),t.session.replace(s,r),\"\")}return e})};var i=e(\"../editor\").Editor;e(\"../config\").defineOptions(i.prototype,\"editor\",{spellcheck:{set:function(e){var n=this.textInput.getElement();n.spellcheck=!!e,e?this.on(\"nativecontextmenu\",t.contextMenuHandler):this.removeListener(\"nativecontextmenu\",t.contextMenuHandler)},value:!0}})});                (function() {\n                    ace.require([\"ace/ext/spellcheck\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-split.js",
    "content": "ace.define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./editor\").Editor,u=e(\"./virtual_renderer\").VirtualRenderer,a=e(\"./edit_session\").EditSession,f=function(e,t,n){this.BELOW=1,this.BESIDE=0,this.$container=e,this.$theme=t,this.$splits=0,this.$editorCSS=\"\",this.$editors=[],this.$orientation=this.BESIDE,this.setSplits(n||1),this.$cEditor=this.$editors[0],this.on(\"focus\",function(e){this.$cEditor=e}.bind(this))};(function(){r.implement(this,s),this.$createEditor=function(){var e=document.createElement(\"div\");e.className=this.$editorCSS,e.style.cssText=\"position: absolute; top:0px; bottom:0px\",this.$container.appendChild(e);var t=new o(new u(e,this.$theme));return t.on(\"focus\",function(){this._emit(\"focus\",t)}.bind(this)),this.$editors.push(t),t.setFontSize(this.$fontSize),t},this.setSplits=function(e){var t;if(e<1)throw\"The number of splits have to be > 0!\";if(e==this.$splits)return;if(e>this.$splits){while(this.$splits<this.$editors.length&&this.$splits<e)t=this.$editors[this.$splits],this.$container.appendChild(t.container),t.setFontSize(this.$fontSize),this.$splits++;while(this.$splits<e)this.$createEditor(),this.$splits++}else while(this.$splits>e)t=this.$editors[this.$splits-1],this.$container.removeChild(t.container),this.$splits--;this.resize()},this.getSplits=function(){return this.$splits},this.getEditor=function(e){return this.$editors[e]},this.getCurrentEditor=function(){return this.$cEditor},this.focus=function(){this.$cEditor.focus()},this.blur=function(){this.$cEditor.blur()},this.setTheme=function(e){this.$editors.forEach(function(t){t.setTheme(e)})},this.setKeyboardHandler=function(e){this.$editors.forEach(function(t){t.setKeyboardHandler(e)})},this.forEach=function(e,t){this.$editors.forEach(e,t)},this.$fontSize=\"\",this.setFontSize=function(e){this.$fontSize=e,this.forEach(function(t){t.setFontSize(e)})},this.$cloneSession=function(e){var t=new a(e.getDocument(),e.getMode()),n=e.getUndoManager();return t.setUndoManager(n),t.setTabSize(e.getTabSize()),t.setUseSoftTabs(e.getUseSoftTabs()),t.setOverwrite(e.getOverwrite()),t.setBreakpoints(e.getBreakpoints()),t.setUseWrapMode(e.getUseWrapMode()),t.setUseWorker(e.getUseWorker()),t.setWrapLimitRange(e.$wrapLimitRange.min,e.$wrapLimitRange.max),t.$foldData=e.$cloneFoldData(),t},this.setSession=function(e,t){var n;t==null?n=this.$cEditor:n=this.$editors[t];var r=this.$editors.some(function(t){return t.session===e});return r&&(e=this.$cloneSession(e)),n.setSession(e),e},this.getOrientation=function(){return this.$orientation},this.setOrientation=function(e){if(this.$orientation==e)return;this.$orientation=e,this.resize()},this.resize=function(){var e=this.$container.clientWidth,t=this.$container.clientHeight,n;if(this.$orientation==this.BESIDE){var r=e/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=r+\"px\",n.container.style.top=\"0px\",n.container.style.left=i*r+\"px\",n.container.style.height=t+\"px\",n.resize()}else{var s=t/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=e+\"px\",n.container.style.top=i*s+\"px\",n.container.style.left=\"0px\",n.container.style.height=s+\"px\",n.resize()}}}).call(f.prototype),t.Split=f}),ace.define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"],function(e,t,n){\"use strict\";n.exports=e(\"../split\")});                (function() {\n                    ace.require([\"ace/ext/split\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-static_highlight.js",
    "content": "ace.define(\"ace/ext/static_highlight\",[\"require\",\"exports\",\"module\",\"ace/edit_session\",\"ace/layer/text\",\"ace/config\",\"ace/lib/dom\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function f(e){this.type=e,this.style={},this.textContent=\"\"}var r=e(\"../edit_session\").EditSession,i=e(\"../layer/text\").Text,s=\".ace_static_highlight {font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;font-size: 12px;white-space: pre-wrap}.ace_static_highlight .ace_gutter {width: 2em;text-align: right;padding: 0 3px 0 0;margin-right: 3px;contain: none;}.ace_static_highlight.ace_show_gutter .ace_line {padding-left: 2.6em;}.ace_static_highlight .ace_line { position: relative; }.ace_static_highlight .ace_gutter-cell {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;user-select: none;top: 0;bottom: 0;left: 0;position: absolute;}.ace_static_highlight .ace_gutter-cell:before {content: counter(ace_line, decimal);counter-increment: ace_line;}.ace_static_highlight {counter-reset: ace_line;}\",o=e(\"../config\"),u=e(\"../lib/dom\"),a=e(\"../lib/lang\").escapeHTML;f.prototype.cloneNode=function(){return this},f.prototype.appendChild=function(e){this.textContent+=e.toString()},f.prototype.toString=function(){var e=[];if(this.type!=\"fragment\"){e.push(\"<\",this.type),this.className&&e.push(\" class='\",this.className,\"'\");var t=[];for(var n in this.style)t.push(n,\":\",this.style[n]);t.length&&e.push(\" style='\",t.join(\"\"),\"'\"),e.push(\">\")}return this.textContent&&e.push(this.textContent),this.type!=\"fragment\"&&e.push(\"</\",this.type,\">\"),e.join(\"\")};var l={createTextNode:function(e,t){return a(e)},createElement:function(e){return new f(e)},createFragment:function(){return new f(\"fragment\")}},c=function(){this.config={},this.dom=l};c.prototype=i.prototype;var h=function(e,t,n){var r=e.className.match(/lang-(\\w+)/),i=t.mode||r&&\"ace/mode/\"+r[1];if(!i)return!1;var s=t.theme||\"ace/theme/textmate\",o=\"\",a=[];if(e.firstElementChild){var f=0;for(var l=0;l<e.childNodes.length;l++){var c=e.childNodes[l];c.nodeType==3?(f+=c.data.length,o+=c.data):a.push(f,c)}}else o=e.textContent,t.trim&&(o=o.trim());h.render(o,i,s,t.firstLineNumber,!t.showGutter,function(t){u.importCssString(t.css,\"ace_highlight\"),e.innerHTML=t.html;var r=e.firstChild.firstChild;for(var i=0;i<a.length;i+=2){var s=t.session.doc.indexToPosition(a[i]),o=a[i+1],f=r.children[s.row];f&&f.appendChild(o)}n&&n()})};h.render=function(e,t,n,i,s,u){function c(){var r=h.renderSync(e,t,n,i,s);return u?u(r):r}var a=1,f=r.prototype.$modes;typeof n==\"string\"&&(a++,o.loadModule([\"theme\",n],function(e){n=e,--a||c()}));var l;return t&&typeof t==\"object\"&&!t.getTokenizer&&(l=t,t=l.path),typeof t==\"string\"&&(a++,o.loadModule([\"mode\",t],function(e){if(!f[t]||l)f[t]=new e.Mode(l);t=f[t],--a||c()})),--a||c()},h.renderSync=function(e,t,n,i,o){i=parseInt(i||1,10);var u=new r(\"\");u.setUseWorker(!1),u.setMode(t);var a=new c;a.setSession(u),Object.keys(a.$tabStrings).forEach(function(e){if(typeof a.$tabStrings[e]==\"string\"){var t=l.createFragment();t.textContent=a.$tabStrings[e],a.$tabStrings[e]=t}}),u.setValue(e);var f=u.getLength(),h=l.createElement(\"div\");h.className=n.cssClass;var p=l.createElement(\"div\");p.className=\"ace_static_highlight\"+(o?\"\":\" ace_show_gutter\"),p.style[\"counter-reset\"]=\"ace_line \"+(i-1);for(var d=0;d<f;d++){var v=l.createElement(\"div\");v.className=\"ace_line\";if(!o){var m=l.createElement(\"span\");m.className=\"ace_gutter ace_gutter-cell\",m.textContent=\"\",v.appendChild(m)}a.$renderLine(v,d,!1),v.textContent+=\"\\n\",p.appendChild(v)}return h.appendChild(p),{css:s+n.cssText,html:h.toString(),session:u}},n.exports=h,n.exports.highlight=h});                (function() {\n                    ace.require([\"ace/ext/static_highlight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-statusbar.js",
    "content": "ace.define(\"ace/ext/statusbar\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"ace/lib/dom\"),i=e(\"ace/lib/lang\"),s=function(e,t){this.element=r.createElement(\"div\"),this.element.className=\"ace_status-indicator\",this.element.style.cssText=\"display: inline-block;\",t.appendChild(this.element);var n=i.delayedCall(function(){this.updateStatus(e)}.bind(this)).schedule.bind(null,100);e.on(\"changeStatus\",n),e.on(\"changeSelection\",n),e.on(\"keyboardActivity\",n)};(function(){this.updateStatus=function(e){function n(e,n){e&&t.push(e,n||\"|\")}var t=[];n(e.keyBinding.getStatusText(e)),e.commands.recording&&n(\"REC\");var r=e.selection,i=r.lead;if(!r.isEmpty()){var s=e.getSelectionRange();n(\"(\"+(s.end.row-s.start.row)+\":\"+(s.end.column-s.start.column)+\")\",\" \")}n(i.row+\":\"+i.column,\" \"),r.rangeCount&&n(\"[\"+r.rangeCount+\"]\",\" \"),t.pop(),this.element.textContent=t.join(\"\")}}).call(s.prototype),t.StatusBar=s});                (function() {\n                    ace.require([\"ace/ext/statusbar\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-textarea.js",
    "content": "ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.$id=\"ace/theme/textmate\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)}),ace.define(\"ace/ext/textarea\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/net\",\"ace/ace\",\"ace/theme/textmate\"],function(e,t,n){\"use strict\";function a(e,t){for(var n in t)e.style[n]=t[n]}function f(e,t){if(e.type!=\"textarea\")throw new Error(\"Textarea required!\");var n=e.parentNode,i=document.createElement(\"div\"),s=function(){var t=\"position:relative;\";[\"margin-top\",\"margin-left\",\"margin-right\",\"margin-bottom\"].forEach(function(n){t+=n+\":\"+u(e,i,n)+\";\"});var n=u(e,i,\"width\")||e.clientWidth+\"px\",r=u(e,i,\"height\")||e.clientHeight+\"px\";t+=\"height:\"+r+\";width:\"+n+\";\",t+=\"display:inline-block;\",i.setAttribute(\"style\",t)};r.addListener(window,\"resize\",s),s(),n.insertBefore(i,e.nextSibling);while(n!==document){if(n.tagName.toUpperCase()===\"FORM\"){var o=n.onsubmit;n.onsubmit=function(n){e.value=t(),o&&o.call(this,n)};break}n=n.parentNode}return i}function l(t,n,r){s.loadScript(t,function(){e([n],r)})}function c(e,t,n,r,i){function u(e){return e===\"true\"||e==1}var s=e.getSession(),o=e.renderer;return e.setDisplaySettings=function(t){t==null&&(t=n.style.display==\"none\"),t?(n.style.display=\"block\",n.hideButton.focus(),e.on(\"focus\",function r(){e.removeListener(\"focus\",r),n.style.display=\"none\"})):e.focus()},e.$setOption=e.setOption,e.$getOption=e.getOption,e.setOption=function(t,n){switch(t){case\"mode\":e.$setOption(\"mode\",\"ace/mode/\"+n);break;case\"theme\":e.$setOption(\"theme\",\"ace/theme/\"+n);break;case\"keybindings\":switch(n){case\"vim\":e.setKeyboardHandler(\"ace/keyboard/vim\");break;case\"emacs\":e.setKeyboardHandler(\"ace/keyboard/emacs\");break;default:e.setKeyboardHandler(null)}break;case\"wrap\":case\"fontSize\":e.$setOption(t,n);break;default:e.$setOption(t,u(n))}},e.getOption=function(t){switch(t){case\"mode\":return e.$getOption(\"mode\").substr(\"ace/mode/\".length);case\"theme\":return e.$getOption(\"theme\").substr(\"ace/theme/\".length);case\"keybindings\":var n=e.getKeyboardHandler();switch(n&&n.$id){case\"ace/keyboard/vim\":return\"vim\";case\"ace/keyboard/emacs\":return\"emacs\";default:return\"ace\"}break;default:return e.$getOption(t)}},e.setOptions(i),e}function h(e,n,i){function f(e,t,n,r){if(!n){e.push(\"<input type='checkbox' title='\",t,\"' \",r+\"\"==\"true\"?\"checked='true'\":\"\",\"'></input>\");return}e.push(\"<select title='\"+t+\"'>\");for(var i in n)e.push(\"<option value='\"+i+\"' \"),r==i&&e.push(\" selected \"),e.push(\">\",n[i],\"</option>\");e.push(\"</select>\")}var s=null,o={mode:\"Mode:\",wrap:\"Soft Wrap:\",theme:\"Theme:\",fontSize:\"Font Size:\",showGutter:\"Display Gutter:\",keybindings:\"Keyboard\",showPrintMargin:\"Show Print Margin:\",useSoftTabs:\"Use Soft Tabs:\",showInvisibles:\"Show Invisibles\"},u={mode:{text:\"Plain\",javascript:\"JavaScript\",xml:\"XML\",html:\"HTML\",css:\"CSS\",scss:\"SCSS\",python:\"Python\",php:\"PHP\",java:\"Java\",ruby:\"Ruby\",c_cpp:\"C/C++\",coffee:\"CoffeeScript\",json:\"json\",perl:\"Perl\",clojure:\"Clojure\",ocaml:\"OCaml\",csharp:\"C#\",haxe:\"haXe\",svg:\"SVG\",textile:\"Textile\",groovy:\"Groovy\",liquid:\"Liquid\",Scala:\"Scala\"},theme:{clouds:\"Clouds\",clouds_midnight:\"Clouds Midnight\",cobalt:\"Cobalt\",crimson_editor:\"Crimson Editor\",dawn:\"Dawn\",gob:\"Green on Black\",eclipse:\"Eclipse\",idle_fingers:\"Idle Fingers\",kr_theme:\"Kr Theme\",merbivore:\"Merbivore\",merbivore_soft:\"Merbivore Soft\",mono_industrial:\"Mono Industrial\",monokai:\"Monokai\",pastel_on_dark:\"Pastel On Dark\",solarized_dark:\"Solarized Dark\",solarized_light:\"Solarized Light\",textmate:\"Textmate\",twilight:\"Twilight\",vibrant_ink:\"Vibrant Ink\"},showGutter:s,fontSize:{\"10px\":\"10px\",\"11px\":\"11px\",\"12px\":\"12px\",\"14px\":\"14px\",\"16px\":\"16px\"},wrap:{off:\"Off\",40:\"40\",80:\"80\",free:\"Free\"},keybindings:{ace:\"ace\",vim:\"vim\",emacs:\"emacs\"},showPrintMargin:s,useSoftTabs:s,showInvisibles:s},a=[];a.push(\"<table><tr><th>Setting</th><th>Value</th></tr>\");for(var l in t.defaultOptions)a.push(\"<tr><td>\",o[l],\"</td>\"),a.push(\"<td>\"),f(a,l,u[l],i.getOption(l)),a.push(\"</td></tr>\");a.push(\"</table>\"),e.innerHTML=a.join(\"\");var c=function(e){var t=e.currentTarget;i.setOption(t.title,t.value)},h=function(e){var t=e.currentTarget;i.setOption(t.title,t.checked)},p=e.getElementsByTagName(\"select\");for(var d=0;d<p.length;d++)p[d].onchange=c;var v=e.getElementsByTagName(\"input\");for(var d=0;d<v.length;d++)v[d].onclick=h;var m=document.createElement(\"input\");m.type=\"button\",m.value=\"Hide\",r.addListener(m,\"click\",function(){i.setDisplaySettings(!1)}),e.appendChild(m),e.hideButton=m}var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"../lib/net\"),o=e(\"../ace\");e(\"../theme/textmate\"),n.exports=t=o;var u=function(e,t,n){var r=e.style[n];r||(window.getComputedStyle?r=window.getComputedStyle(e,\"\").getPropertyValue(n):r=e.currentStyle[n]);if(!r||r==\"auto\"||r==\"intrinsic\")r=t.style[n];return r};t.transformTextarea=function(e,n){var s=e.autofocus||document.activeElement==e,u,l=f(e,function(){return u.getValue()});e.style.display=\"none\",l.style.background=\"white\";var p=document.createElement(\"div\");a(p,{top:\"0px\",left:\"0px\",right:\"0px\",bottom:\"0px\",border:\"1px solid gray\",position:\"absolute\"}),l.appendChild(p);var d=document.createElement(\"div\");a(d,{position:\"absolute\",right:\"0px\",bottom:\"0px\",cursor:\"nw-resize\",border:\"solid 9px\",borderColor:\"lightblue gray gray #ceade6\",zIndex:101});var v=document.createElement(\"div\"),m={top:\"0px\",left:\"20%\",right:\"0px\",bottom:\"0px\",position:\"absolute\",padding:\"5px\",zIndex:100,color:\"white\",display:\"none\",overflow:\"auto\",fontSize:\"14px\",boxShadow:\"-5px 2px 3px gray\"};i.isOldIE?m.backgroundColor=\"#333\":m.backgroundColor=\"rgba(0, 0, 0, 0.6)\",a(v,m),l.appendChild(v),n=n||t.defaultOptions;var g=o.edit(p);u=g.getSession(),u.setValue(e.value||e.innerHTML),s&&g.focus(),l.appendChild(d),c(g,p,v,o,n),h(v,d,g);var y=\"\";return r.addListener(d,\"mousemove\",function(e){var t=this.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;n+r<(t.width+t.height)/2?(this.style.cursor=\"pointer\",y=\"toggle\"):(y=\"resize\",this.style.cursor=\"nw-resize\")}),r.addListener(d,\"mousedown\",function(e){e.preventDefault();if(y==\"toggle\"){g.setDisplaySettings();return}l.style.zIndex=1e5;var t=l.getBoundingClientRect(),n=t.width+t.left-e.clientX,i=t.height+t.top-e.clientY;r.capture(d,function(e){l.style.width=e.clientX-t.left+n+\"px\",l.style.height=e.clientY-t.top+i+\"px\",g.resize()},function(){})}),g},t.defaultOptions={mode:\"javascript\",theme:\"textmate\",wrap:\"off\",fontSize:\"12px\",showGutter:\"false\",keybindings:\"ace\",showPrintMargin:\"false\",useSoftTabs:\"true\",showInvisibles:\"false\"}});                (function() {\n                    ace.require([\"ace/ext/textarea\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-themelist.js",
    "content": "ace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=[[\"Chrome\"],[\"Clouds\"],[\"Crimson Editor\"],[\"Dawn\"],[\"Dreamweaver\"],[\"Eclipse\"],[\"GitHub\"],[\"IPlastic\"],[\"Solarized Light\"],[\"TextMate\"],[\"Tomorrow\"],[\"XCode\"],[\"Kuroir\"],[\"KatzenMilch\"],[\"SQL Server\",\"sqlserver\",\"light\"],[\"Ambiance\",\"ambiance\",\"dark\"],[\"Chaos\",\"chaos\",\"dark\"],[\"Clouds Midnight\",\"clouds_midnight\",\"dark\"],[\"Dracula\",\"\",\"dark\"],[\"Cobalt\",\"cobalt\",\"dark\"],[\"Gruvbox\",\"gruvbox\",\"dark\"],[\"Green on Black\",\"gob\",\"dark\"],[\"idle Fingers\",\"idle_fingers\",\"dark\"],[\"krTheme\",\"kr_theme\",\"dark\"],[\"Merbivore\",\"merbivore\",\"dark\"],[\"Merbivore Soft\",\"merbivore_soft\",\"dark\"],[\"Mono Industrial\",\"mono_industrial\",\"dark\"],[\"Monokai\",\"monokai\",\"dark\"],[\"Pastel on dark\",\"pastel_on_dark\",\"dark\"],[\"Solarized Dark\",\"solarized_dark\",\"dark\"],[\"Terminal\",\"terminal\",\"dark\"],[\"Tomorrow Night\",\"tomorrow_night\",\"dark\"],[\"Tomorrow Night Blue\",\"tomorrow_night_blue\",\"dark\"],[\"Tomorrow Night Bright\",\"tomorrow_night_bright\",\"dark\"],[\"Tomorrow Night 80s\",\"tomorrow_night_eighties\",\"dark\"],[\"Twilight\",\"twilight\",\"dark\"],[\"Vibrant Ink\",\"vibrant_ink\",\"dark\"]];t.themesByName={},t.themes=r.map(function(e){var n=e[1]||e[0].replace(/ /g,\"_\").toLowerCase(),r={caption:e[0],theme:\"ace/theme/\"+n,isDark:e[2]==\"dark\",name:n};return t.themesByName[n]=r,r})});                (function() {\n                    ace.require([\"ace/ext/themelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/ext-whitespace.js",
    "content": "ace.define(\"ace/ext/whitespace\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\");t.$detectIndentation=function(e,t){function c(e){var t=0;for(var r=e;r<n.length;r+=e)t+=n[r]||0;return t}var n=[],r=[],i=0,s=0,o=Math.min(e.length,1e3);for(var u=0;u<o;u++){var a=e[u];if(!/^\\s*[^*+\\-\\s]/.test(a))continue;if(a[0]==\"\t\")i++,s=-Number.MAX_VALUE;else{var f=a.match(/^ */)[0].length;if(f&&a[f]!=\"\t\"){var l=f-s;l>0&&!(s%l)&&!(f%l)&&(r[l]=(r[l]||0)+1),n[f]=(n[f]||0)+1}s=f}while(u<o&&a[a.length-1]==\"\\\\\")a=e[u++]}var h=r.reduce(function(e,t){return e+t},0),p={score:0,length:0},d=0;for(var u=1;u<12;u++){var v=c(u);u==1?(d=v,v=n[1]?.9:.8,n.length||(v=0)):v/=d,r[u]&&(v+=r[u]/h),v>p.score&&(p={score:v,length:u})}if(p.score&&p.score>1.4)var m=p.length;if(i>d+1){if(m==1||d<i/4||p.score<1.8)m=undefined;return{ch:\"\t\",length:m}}if(d>i+1)return{ch:\" \",length:m}},t.detectIndentation=function(e){var n=e.getLines(0,1e3),r=t.$detectIndentation(n)||{};return r.ch&&e.setUseSoftTabs(r.ch==\" \"),r.length&&e.setTabSize(r.length),r},t.trimTrailingSpace=function(e,t){var n=e.getDocument(),r=n.getAllLines(),i=t&&t.trimEmpty?-1:0,s=[],o=-1;t&&t.keepCursorPosition&&(e.selection.rangeCount?e.selection.rangeList.ranges.forEach(function(e,t,n){var r=n[t+1];if(r&&r.cursor.row==e.cursor.row)return;s.push(e.cursor)}):s.push(e.selection.getCursor()),o=0);var u=s[o]&&s[o].row;for(var a=0,f=r.length;a<f;a++){var l=r[a],c=l.search(/\\s+$/);a==u&&(c<s[o].column&&c>i&&(c=s[o].column),o++,u=s[o]?s[o].row:-1),c>i&&n.removeInLine(a,c,l.length)}},t.convertIndentation=function(e,t,n){var i=e.getTabString()[0],s=e.getTabSize();n||(n=s),t||(t=i);var o=t==\"\t\"?t:r.stringRepeat(t,n),u=e.doc,a=u.getAllLines(),f={},l={};for(var c=0,h=a.length;c<h;c++){var p=a[c],d=p.match(/^\\s*/)[0];if(d){var v=e.$getStringScreenWidth(d)[0],m=Math.floor(v/s),g=v%s,y=f[m]||(f[m]=r.stringRepeat(o,m));y+=l[g]||(l[g]=r.stringRepeat(\" \",g)),y!=d&&(u.removeInLine(c,0,d.length),u.insertInLine({row:c,column:0},y))}}e.setTabSize(n),e.setUseSoftTabs(t==\" \")},t.$parseStringArg=function(e){var t={};/t/.test(e)?t.ch=\"\t\":/s/.test(e)&&(t.ch=\" \");var n=e.match(/\\d+/);return n&&(t.length=parseInt(n[0],10)),t},t.$parseArg=function(e){return e?typeof e==\"string\"?t.$parseStringArg(e):typeof e.text==\"string\"?t.$parseStringArg(e.text):e:{}},t.commands=[{name:\"detectIndentation\",exec:function(e){t.detectIndentation(e.session)}},{name:\"trimTrailingSpace\",exec:function(e,n){t.trimTrailingSpace(e.session,n)}},{name:\"convertIndentation\",exec:function(e,n){var r=t.$parseArg(n);t.convertIndentation(e.session,r.ch,r.length)}},{name:\"setIndentation\",exec:function(e,n){var r=t.$parseArg(n);r.length&&e.session.setTabSize(r.length),r.ch&&e.session.setUseSoftTabs(r.ch==\" \")}}]});                (function() {\n                    ace.require([\"ace/ext/whitespace\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/keybinding-emacs.js",
    "content": "ace.define(\"ace/occur\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/edit_session\",\"ace/search_highlight\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function a(){}var r=e(\"./lib/oop\"),i=e(\"./range\").Range,s=e(\"./search\").Search,o=e(\"./edit_session\").EditSession,u=e(\"./search_highlight\").SearchHighlight;r.inherits(a,s),function(){this.enter=function(e,t){if(!t.needle)return!1;var n=e.getCursorPosition();this.displayOccurContent(e,t);var r=this.originalToOccurPosition(e.session,n);return e.moveCursorToPosition(r),!0},this.exit=function(e,t){var n=t.translatePosition&&e.getCursorPosition(),r=n&&this.occurToOriginalPosition(e.session,n);return this.displayOriginalContent(e),r&&e.moveCursorToPosition(r),!0},this.highlight=function(e,t){var n=e.$occurHighlight=e.$occurHighlight||e.addDynamicMarker(new u(null,\"ace_occur-highlight\",\"text\"));n.setRegexp(t),e._emit(\"changeBackMarker\")},this.displayOccurContent=function(e,t){this.$originalSession=e.session;var n=this.matchingLines(e.session,t),r=n.map(function(e){return e.content}),i=new o(r.join(\"\\n\"));i.$occur=this,i.$occurMatchingLines=n,e.setSession(i),this.$useEmacsStyleLineStart=this.$originalSession.$useEmacsStyleLineStart,i.$useEmacsStyleLineStart=this.$useEmacsStyleLineStart,this.highlight(i,t.re),i._emit(\"changeBackMarker\")},this.displayOriginalContent=function(e){e.setSession(this.$originalSession),this.$originalSession.$useEmacsStyleLineStart=this.$useEmacsStyleLineStart},this.originalToOccurPosition=function(e,t){var n=e.$occurMatchingLines,r={row:0,column:0};if(!n)return r;for(var i=0;i<n.length;i++)if(n[i].row===t.row)return{row:i,column:t.column};return r},this.occurToOriginalPosition=function(e,t){var n=e.$occurMatchingLines;return!n||!n[t.row]?t:{row:n[t.row].row,column:t.column}},this.matchingLines=function(e,t){t=r.mixin({},t);if(!e||!t.needle)return[];var n=new s;return n.set(t),n.findAll(e).reduce(function(t,n){var r=n.start.row,i=t[t.length-1];return i&&i.row===r?t:t.concat({row:r,content:e.getLine(r)})},[])}}.call(a.prototype);var f=e(\"./lib/dom\");f.importCssString(\".ace_occur-highlight {\\n    border-radius: 4px;\\n    background-color: rgba(87, 255, 8, 0.25);\\n    position: absolute;\\n    z-index: 4;\\n    box-sizing: border-box;\\n    box-shadow: 0 0 4px rgb(91, 255, 50);\\n}\\n.ace_dark .ace_occur-highlight {\\n    background-color: rgb(80, 140, 85);\\n    box-shadow: 0 0 4px rgb(60, 120, 70);\\n}\\n\",\"incremental-occur-highlighting\"),t.Occur=a}),ace.define(\"ace/commands/occur_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/occur\",\"ace/keyboard/hash_handler\",\"ace/lib/oop\"],function(e,t,n){function f(){}var r=e(\"../config\"),i=e(\"../occur\").Occur,s={name:\"occur\",exec:function(e,t){var n=!!e.session.$occur,r=(new i).enter(e,t);r&&!n&&f.installIn(e)},readOnly:!0},o=[{name:\"occurexit\",bindKey:\"esc|Ctrl-G\",exec:function(e){var t=e.session.$occur;if(!t)return;t.exit(e,{}),e.session.$occur||f.uninstallFrom(e)},readOnly:!0},{name:\"occuraccept\",bindKey:\"enter\",exec:function(e){var t=e.session.$occur;if(!t)return;t.exit(e,{translatePosition:!0}),e.session.$occur||f.uninstallFrom(e)},readOnly:!0}],u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/oop\");a.inherits(f,u),function(){this.isOccurHandler=!0,this.attach=function(e){u.call(this,o,e.commands.platform),this.$editor=e};var e=this.handleKeyboard;this.handleKeyboard=function(t,n,r,i){var s=e.call(this,t,n,r,i);return s&&s.command?s:undefined}}.call(f.prototype),f.installIn=function(e){var t=new this;e.keyBinding.addKeyboardHandler(t),e.commands.addCommands(o)},f.uninstallFrom=function(e){e.commands.removeCommands(o);var t=e.getKeyboardHandler();t.isOccurHandler&&e.keyBinding.removeKeyboardHandler(t)},t.occurStartCommand=s}),ace.define(\"ace/commands/incremental_search_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/commands/occur_commands\"],function(e,t,n){function u(e){this.$iSearch=e}var r=e(\"../config\"),i=e(\"../lib/oop\"),s=e(\"../keyboard/hash_handler\").HashHandler,o=e(\"./occur_commands\").occurStartCommand;t.iSearchStartCommands=[{name:\"iSearch\",bindKey:{win:\"Ctrl-F\",mac:\"Command-F\"},exec:function(e,t){r.loadModule([\"core\",\"ace/incremental_search\"],function(n){var r=n.iSearch=n.iSearch||new n.IncrementalSearch;r.activate(e,t.backwards),t.jumpToFirstMatch&&r.next(t)})},readOnly:!0},{name:\"iSearchBackwards\",exec:function(e,t){e.execCommand(\"iSearch\",{backwards:!0})},readOnly:!0},{name:\"iSearchAndGo\",bindKey:{win:\"Ctrl-K\",mac:\"Command-G\"},exec:function(e,t){e.execCommand(\"iSearch\",{jumpToFirstMatch:!0,useCurrentOrPrevSearch:!0})},readOnly:!0},{name:\"iSearchBackwardsAndGo\",bindKey:{win:\"Ctrl-Shift-K\",mac:\"Command-Shift-G\"},exec:function(e){e.execCommand(\"iSearch\",{jumpToFirstMatch:!0,backwards:!0,useCurrentOrPrevSearch:!0})},readOnly:!0}],t.iSearchCommands=[{name:\"restartSearch\",bindKey:{win:\"Ctrl-F\",mac:\"Command-F\"},exec:function(e){e.cancelSearch(!0)}},{name:\"searchForward\",bindKey:{win:\"Ctrl-S|Ctrl-K\",mac:\"Ctrl-S|Command-G\"},exec:function(e,t){t.useCurrentOrPrevSearch=!0,e.next(t)}},{name:\"searchBackward\",bindKey:{win:\"Ctrl-R|Ctrl-Shift-K\",mac:\"Ctrl-R|Command-Shift-G\"},exec:function(e,t){t.useCurrentOrPrevSearch=!0,t.backwards=!0,e.next(t)}},{name:\"extendSearchTerm\",exec:function(e,t){e.addString(t)}},{name:\"extendSearchTermSpace\",bindKey:\"space\",exec:function(e){e.addString(\" \")}},{name:\"shrinkSearchTerm\",bindKey:\"backspace\",exec:function(e){e.removeChar()}},{name:\"confirmSearch\",bindKey:\"return\",exec:function(e){e.deactivate()}},{name:\"cancelSearch\",bindKey:\"esc|Ctrl-G\",exec:function(e){e.deactivate(!0)}},{name:\"occurisearch\",bindKey:\"Ctrl-O\",exec:function(e){var t=i.mixin({},e.$options);e.deactivate(),o.exec(e.$editor,t)}},{name:\"yankNextWord\",bindKey:\"Ctrl-w\",exec:function(e){var t=e.$editor,n=t.selection.getRangeOfMovements(function(e){e.moveCursorWordRight()}),r=t.session.getTextRange(n);e.addString(r)}},{name:\"yankNextChar\",bindKey:\"Ctrl-Alt-y\",exec:function(e){var t=e.$editor,n=t.selection.getRangeOfMovements(function(e){e.moveCursorRight()}),r=t.session.getTextRange(n);e.addString(r)}},{name:\"recenterTopBottom\",bindKey:\"Ctrl-l\",exec:function(e){e.$editor.execCommand(\"recenterTopBottom\")}},{name:\"selectAllMatches\",bindKey:\"Ctrl-space\",exec:function(e){var t=e.$editor,n=t.session.$isearchHighlight,r=n&&n.cache?n.cache.reduce(function(e,t){return e.concat(t?t:[])},[]):[];e.deactivate(!1),r.forEach(t.selection.addRange.bind(t.selection))}},{name:\"searchAsRegExp\",bindKey:\"Alt-r\",exec:function(e){e.convertNeedleToRegExp()}}].map(function(e){return e.readOnly=!0,e.isIncrementalSearchCommand=!0,e.scrollIntoView=\"animate-cursor\",e}),i.inherits(u,s),function(){this.attach=function(e){var n=this.$iSearch;s.call(this,t.iSearchCommands,e.commands.platform),this.$commandExecHandler=e.commands.addEventListener(\"exec\",function(t){if(!t.command.isIncrementalSearchCommand)return n.deactivate();t.stopPropagation(),t.preventDefault();var r=e.session.getScrollTop(),i=t.command.exec(n,t.args||{});return e.renderer.scrollCursorIntoView(null,.5),e.renderer.animateScrolling(r),i})},this.detach=function(e){if(!this.$commandExecHandler)return;e.commands.removeEventListener(\"exec\",this.$commandExecHandler),delete this.$commandExecHandler};var e=this.handleKeyboard;this.handleKeyboard=function(t,n,r,i){if((n===1||n===8)&&r===\"v\"||n===1&&r===\"y\")return null;var s=e.call(this,t,n,r,i);if(s.command)return s;if(n==-1){var o=this.commands.extendSearchTerm;if(o)return{command:o,args:r}}return!1}}.call(u.prototype),t.IncrementalSearchKeyboardHandler=u}),ace.define(\"ace/incremental_search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/search_highlight\",\"ace/commands/incremental_search_commands\",\"ace/lib/dom\",\"ace/commands/command_manager\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";function f(){this.$options={wrap:!1,skipCurrent:!1},this.$keyboardHandler=new a(this)}function l(e){return e instanceof RegExp}function c(e){var t=String(e),n=t.indexOf(\"/\"),r=t.lastIndexOf(\"/\");return{expression:t.slice(n+1,r),flags:t.slice(r+1)}}function h(e,t){try{return new RegExp(e,t)}catch(n){return e}}function p(e){return h(e.expression,e.flags)}var r=e(\"./lib/oop\"),i=e(\"./range\").Range,s=e(\"./search\").Search,o=e(\"./search_highlight\").SearchHighlight,u=e(\"./commands/incremental_search_commands\"),a=u.IncrementalSearchKeyboardHandler;r.inherits(f,s),function(){this.activate=function(e,t){this.$editor=e,this.$startPos=this.$currentPos=e.getCursorPosition(),this.$options.needle=\"\",this.$options.backwards=t,e.keyBinding.addKeyboardHandler(this.$keyboardHandler),this.$originalEditorOnPaste=e.onPaste,e.onPaste=this.onPaste.bind(this),this.$mousedownHandler=e.addEventListener(\"mousedown\",this.onMouseDown.bind(this)),this.selectionFix(e),this.statusMessage(!0)},this.deactivate=function(e){this.cancelSearch(e);var t=this.$editor;t.keyBinding.removeKeyboardHandler(this.$keyboardHandler),this.$mousedownHandler&&(t.removeEventListener(\"mousedown\",this.$mousedownHandler),delete this.$mousedownHandler),t.onPaste=this.$originalEditorOnPaste,this.message(\"\")},this.selectionFix=function(e){e.selection.isEmpty()&&!e.session.$emacsMark&&e.clearSelection()},this.highlight=function(e){var t=this.$editor.session,n=t.$isearchHighlight=t.$isearchHighlight||t.addDynamicMarker(new o(null,\"ace_isearch-result\",\"text\"));n.setRegexp(e),t._emit(\"changeBackMarker\")},this.cancelSearch=function(e){var t=this.$editor;return this.$prevNeedle=this.$options.needle,this.$options.needle=\"\",e?(t.moveCursorToPosition(this.$startPos),this.$currentPos=this.$startPos):t.pushEmacsMark&&t.pushEmacsMark(this.$startPos,!1),this.highlight(null),i.fromPoints(this.$currentPos,this.$currentPos)},this.highlightAndFindWithNeedle=function(e,t){if(!this.$editor)return null;var n=this.$options;t&&(n.needle=t.call(this,n.needle||\"\")||\"\");if(n.needle.length===0)return this.statusMessage(!0),this.cancelSearch(!0);n.start=this.$currentPos;var r=this.$editor.session,s=this.find(r),o=this.$editor.emacsMark?!!this.$editor.emacsMark():!this.$editor.selection.isEmpty();return s&&(n.backwards&&(s=i.fromPoints(s.end,s.start)),this.$editor.selection.setRange(i.fromPoints(o?this.$startPos:s.end,s.end)),e&&(this.$currentPos=s.end),this.highlight(n.re)),this.statusMessage(s),s},this.addString=function(e){return this.highlightAndFindWithNeedle(!1,function(t){if(!l(t))return t+e;var n=c(t);return n.expression+=e,p(n)})},this.removeChar=function(e){return this.highlightAndFindWithNeedle(!1,function(e){if(!l(e))return e.substring(0,e.length-1);var t=c(e);return t.expression=t.expression.substring(0,t.expression.length-1),p(t)})},this.next=function(e){return e=e||{},this.$options.backwards=!!e.backwards,this.$currentPos=this.$editor.getCursorPosition(),this.highlightAndFindWithNeedle(!0,function(t){return e.useCurrentOrPrevSearch&&t.length===0?this.$prevNeedle||\"\":t})},this.onMouseDown=function(e){return this.deactivate(),!0},this.onPaste=function(e){this.addString(e)},this.convertNeedleToRegExp=function(){return this.highlightAndFindWithNeedle(!1,function(e){return l(e)?e:h(e,\"ig\")})},this.convertNeedleToString=function(){return this.highlightAndFindWithNeedle(!1,function(e){return l(e)?c(e).expression:e})},this.statusMessage=function(e){var t=this.$options,n=\"\";n+=t.backwards?\"reverse-\":\"\",n+=\"isearch: \"+t.needle,n+=e?\"\":\" (not found)\",this.message(n)},this.message=function(e){this.$editor.showCommandLine?(this.$editor.showCommandLine(e),this.$editor.focus()):console.log(e)}}.call(f.prototype),t.IncrementalSearch=f;var d=e(\"./lib/dom\");d.importCssString&&d.importCssString(\".ace_marker-layer .ace_isearch-result {  position: absolute;  z-index: 6;  box-sizing: border-box;}div.ace_isearch-result {  border-radius: 4px;  background-color: rgba(255, 200, 0, 0.5);  box-shadow: 0 0 4px rgb(255, 200, 0);}.ace_dark div.ace_isearch-result {  background-color: rgb(100, 110, 160);  box-shadow: 0 0 4px rgb(80, 90, 140);}\",\"incremental-search-highlighting\");var v=e(\"./commands/command_manager\");(function(){this.setupIncrementalSearch=function(e,t){if(this.usesIncrementalSearch==t)return;this.usesIncrementalSearch=t;var n=u.iSearchStartCommands,r=t?\"addCommands\":\"removeCommands\";this[r](n)}}).call(v.CommandManager.prototype);var m=e(\"./editor\").Editor;e(\"./config\").defineOptions(m.prototype,\"editor\",{useIncrementalSearch:{set:function(e){this.keyBinding.$handlers.forEach(function(t){t.setupIncrementalSearch&&t.setupIncrementalSearch(this,e)}),this._emit(\"incrementalSearchSettingChanged\",{isEnabled:e})}}})}),ace.define(\"ace/keyboard/emacs\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/incremental_search\",\"ace/commands/incremental_search_commands\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\");e(\"../incremental_search\");var i=e(\"../commands/incremental_search_commands\"),s=e(\"./hash_handler\").HashHandler;t.handler=new s,t.handler.isEmacs=!0,t.handler.$id=\"ace/keyboard/emacs\";var o=!1,u,a;t.handler.attach=function(e){o||(o=!0,r.importCssString(\"            .emacs-mode .ace_cursor{                border: 1px rgba(50,250,50,0.8) solid!important;                box-sizing: border-box!important;                background-color: rgba(0,250,0,0.9);                opacity: 0.5;            }            .emacs-mode .ace_hidden-cursors .ace_cursor{                opacity: 1;                background-color: transparent;            }            .emacs-mode .ace_overwrite-cursors .ace_cursor {                opacity: 1;                background-color: transparent;                border-width: 0 0 2px 2px !important;            }            .emacs-mode .ace_text-layer {                z-index: 4            }            .emacs-mode .ace_cursor-layer {                z-index: 2            }\",\"emacsMode\")),u=e.session.$selectLongWords,e.session.$selectLongWords=!0,a=e.session.$useEmacsStyleLineStart,e.session.$useEmacsStyleLineStart=!0,e.session.$emacsMark=null,e.session.$emacsMarkRing=e.session.$emacsMarkRing||[],e.emacsMark=function(){return this.session.$emacsMark},e.setEmacsMark=function(e){this.session.$emacsMark=e},e.pushEmacsMark=function(e,t){var n=this.session.$emacsMark;n&&this.session.$emacsMarkRing.push(n),!e||t?this.setEmacsMark(e):this.session.$emacsMarkRing.push(e)},e.popEmacsMark=function(){var e=this.emacsMark();return e?(this.setEmacsMark(null),e):this.session.$emacsMarkRing.pop()},e.getLastEmacsMark=function(e){return this.session.$emacsMark||this.session.$emacsMarkRing.slice(-1)[0]},e.emacsMarkForSelection=function(e){var t=this.selection,n=this.multiSelect?this.multiSelect.getAllRanges().length:1,r=t.index||0,i=this.session.$emacsMarkRing,s=i.length-(n-r),o=i[s]||t.anchor;return e&&i.splice(s,1,\"row\"in e&&\"column\"in e?e:undefined),o},e.on(\"click\",l),e.on(\"changeSession\",f),e.renderer.$blockCursor=!0,e.setStyle(\"emacs-mode\"),e.commands.addCommands(d),t.handler.platform=e.commands.platform,e.$emacsModeHandler=this,e.addEventListener(\"copy\",this.onCopy),e.addEventListener(\"paste\",this.onPaste)},t.handler.detach=function(e){e.renderer.$blockCursor=!1,e.session.$selectLongWords=u,e.session.$useEmacsStyleLineStart=a,e.removeEventListener(\"click\",l),e.removeEventListener(\"changeSession\",f),e.unsetStyle(\"emacs-mode\"),e.commands.removeCommands(d),e.removeEventListener(\"copy\",this.onCopy),e.removeEventListener(\"paste\",this.onPaste),e.$emacsModeHandler=null};var f=function(e){e.oldSession&&(e.oldSession.$selectLongWords=u,e.oldSession.$useEmacsStyleLineStart=a),u=e.session.$selectLongWords,e.session.$selectLongWords=!0,a=e.session.$useEmacsStyleLineStart,e.session.$useEmacsStyleLineStart=!0,e.session.hasOwnProperty(\"$emacsMark\")||(e.session.$emacsMark=null),e.session.hasOwnProperty(\"$emacsMarkRing\")||(e.session.$emacsMarkRing=[])},l=function(e){e.editor.session.$emacsMark=null},c=e(\"../lib/keys\").KEY_MODS,h={C:\"ctrl\",S:\"shift\",M:\"alt\",CMD:\"command\"},p=[\"C-S-M-CMD\",\"S-M-CMD\",\"C-M-CMD\",\"C-S-CMD\",\"C-S-M\",\"M-CMD\",\"S-CMD\",\"S-M\",\"C-CMD\",\"C-M\",\"C-S\",\"CMD\",\"M\",\"S\",\"C\"];p.forEach(function(e){var t=0;e.split(\"-\").forEach(function(e){t|=c[h[e]]}),h[t]=e.toLowerCase()+\"-\"}),t.handler.onCopy=function(e,n){if(n.$handlesEmacsOnCopy)return;n.$handlesEmacsOnCopy=!0,t.handler.commands.killRingSave.exec(n),n.$handlesEmacsOnCopy=!1},t.handler.onPaste=function(e,t){t.pushEmacsMark(t.getCursorPosition())},t.handler.bindKey=function(e,t){typeof e==\"object\"&&(e=e[this.platform]);if(!e)return;var n=this.commandKeyBinding;e.split(\"|\").forEach(function(e){e=e.toLowerCase(),n[e]=t;var r=e.split(\" \").slice(0,-1);r.reduce(function(e,t,n){var r=e[n-1]?e[n-1]+\" \":\"\";return e.concat([r+t])},[]).forEach(function(e){n[e]||(n[e]=\"null\")})},this)},t.handler.getStatusText=function(e,t){var n=\"\";return t.count&&(n+=t.count),t.keyChain&&(n+=\" \"+t.keyChain),n},t.handler.handleKeyboard=function(e,t,n,r){if(r===-1)return undefined;var i=e.editor;i._signal(\"changeStatus\");if(t==-1){i.pushEmacsMark();if(e.count){var s=(new Array(e.count+1)).join(n);return e.count=null,{command:\"insertstring\",args:s}}}var o=h[t];if(o==\"c-\"||e.count){var u=parseInt(n[n.length-1]);if(typeof u==\"number\"&&!isNaN(u))return e.count=Math.max(e.count,0)||0,e.count=10*e.count+u,{command:\"null\"}}o&&(n=o+n),e.keyChain&&(n=e.keyChain+=\" \"+n);var a=this.commandKeyBinding[n];e.keyChain=a==\"null\"?n:\"\";if(!a)return undefined;if(a===\"null\")return{command:\"null\"};if(a===\"universalArgument\")return e.count=-4,{command:\"null\"};var f;typeof a!=\"string\"&&(f=a.args,a.command&&(a=a.command),a===\"goorselect\"&&(a=i.emacsMark()?f[1]:f[0],f=null));if(typeof a==\"string\"){(a===\"insertstring\"||a===\"splitline\"||a===\"togglecomment\")&&i.pushEmacsMark(),a=this.commands[a]||i.commands.commands[a];if(!a)return undefined}!a.readOnly&&!a.isYank&&(e.lastCommand=null),!a.readOnly&&i.emacsMark()&&i.setEmacsMark(null);if(e.count){var u=e.count;e.count=0;if(!a||!a.handlesCount)return{args:f,command:{exec:function(e,t){for(var n=0;n<u;n++)a.exec(e,t)},multiSelectAction:a.multiSelectAction}};f||(f={}),typeof f==\"object\"&&(f.count=u)}return{command:a,args:f}},t.emacsKeys={\"Up|C-p\":{command:\"goorselect\",args:[\"golineup\",\"selectup\"]},\"Down|C-n\":{command:\"goorselect\",args:[\"golinedown\",\"selectdown\"]},\"Left|C-b\":{command:\"goorselect\",args:[\"gotoleft\",\"selectleft\"]},\"Right|C-f\":{command:\"goorselect\",args:[\"gotoright\",\"selectright\"]},\"C-Left|M-b\":{command:\"goorselect\",args:[\"gotowordleft\",\"selectwordleft\"]},\"C-Right|M-f\":{command:\"goorselect\",args:[\"gotowordright\",\"selectwordright\"]},\"Home|C-a\":{command:\"goorselect\",args:[\"gotolinestart\",\"selecttolinestart\"]},\"End|C-e\":{command:\"goorselect\",args:[\"gotolineend\",\"selecttolineend\"]},\"C-Home|S-M-,\":{command:\"goorselect\",args:[\"gotostart\",\"selecttostart\"]},\"C-End|S-M-.\":{command:\"goorselect\",args:[\"gotoend\",\"selecttoend\"]},\"S-Up|S-C-p\":\"selectup\",\"S-Down|S-C-n\":\"selectdown\",\"S-Left|S-C-b\":\"selectleft\",\"S-Right|S-C-f\":\"selectright\",\"S-C-Left|S-M-b\":\"selectwordleft\",\"S-C-Right|S-M-f\":\"selectwordright\",\"S-Home|S-C-a\":\"selecttolinestart\",\"S-End|S-C-e\":\"selecttolineend\",\"S-C-Home\":\"selecttostart\",\"S-C-End\":\"selecttoend\",\"C-l\":\"recenterTopBottom\",\"M-s\":\"centerselection\",\"M-g\":\"gotoline\",\"C-x C-p\":\"selectall\",\"C-Down\":{command:\"goorselect\",args:[\"gotopagedown\",\"selectpagedown\"]},\"C-Up\":{command:\"goorselect\",args:[\"gotopageup\",\"selectpageup\"]},\"PageDown|C-v\":{command:\"goorselect\",args:[\"gotopagedown\",\"selectpagedown\"]},\"PageUp|M-v\":{command:\"goorselect\",args:[\"gotopageup\",\"selectpageup\"]},\"S-C-Down\":\"selectpagedown\",\"S-C-Up\":\"selectpageup\",\"C-s\":\"iSearch\",\"C-r\":\"iSearchBackwards\",\"M-C-s\":\"findnext\",\"M-C-r\":\"findprevious\",\"S-M-5\":\"replace\",Backspace:\"backspace\",\"Delete|C-d\":\"del\",\"Return|C-m\":{command:\"insertstring\",args:\"\\n\"},\"C-o\":\"splitline\",\"M-d|C-Delete\":{command:\"killWord\",args:\"right\"},\"C-Backspace|M-Backspace|M-Delete\":{command:\"killWord\",args:\"left\"},\"C-k\":\"killLine\",\"C-y|S-Delete\":\"yank\",\"M-y\":\"yankRotate\",\"C-g\":\"keyboardQuit\",\"C-w|C-S-W\":\"killRegion\",\"M-w\":\"killRingSave\",\"C-Space\":\"setMark\",\"C-x C-x\":\"exchangePointAndMark\",\"C-t\":\"transposeletters\",\"M-u\":\"touppercase\",\"M-l\":\"tolowercase\",\"M-/\":\"autocomplete\",\"C-u\":\"universalArgument\",\"M-;\":\"togglecomment\",\"C-/|C-x u|S-C--|C-z\":\"undo\",\"S-C-/|S-C-x u|C--|S-C-z\":\"redo\",\"C-x r\":\"selectRectangularRegion\",\"M-x\":{command:\"focusCommandLine\",args:\"M-x \"}},t.handler.bindKeys(t.emacsKeys),t.handler.addCommands({recenterTopBottom:function(e){var t=e.renderer,n=t.$cursorLayer.getPixelPosition(),r=t.$size.scrollerHeight-t.lineHeight,i=t.scrollTop;Math.abs(n.top-i)<2?i=n.top-r:Math.abs(n.top-i-r*.5)<2?i=n.top:i=n.top-r*.5,e.session.setScrollTop(i)},selectRectangularRegion:function(e){e.multiSelect.toggleBlockSelection()},setMark:{exec:function(e,t){function u(){var t=e.popEmacsMark();t&&e.moveCursorToPosition(t)}if(t&&t.count){e.inMultiSelectMode?e.forEachSelection(u):u(),u();return}var n=e.emacsMark(),r=e.selection.getAllRanges(),i=r.map(function(e){return{row:e.start.row,column:e.start.column}}),s=!0,o=r.every(function(e){return e.isEmpty()});if(s&&(n||!o)){e.inMultiSelectMode?e.forEachSelection({exec:e.clearSelection.bind(e)}):e.clearSelection(),n&&e.pushEmacsMark(null);return}if(!n){i.forEach(function(t){e.pushEmacsMark(t)}),e.setEmacsMark(i[i.length-1]);return}},readOnly:!0,handlesCount:!0},exchangePointAndMark:{exec:function(t,n){var r=t.selection;if(!n.count&&!r.isEmpty()){r.setSelectionRange(r.getRange(),!r.isBackwards());return}if(n.count){var i={row:r.lead.row,column:r.lead.column};r.clearSelection(),r.moveCursorToPosition(t.emacsMarkForSelection(i))}else r.selectToPosition(t.emacsMarkForSelection())},readOnly:!0,handlesCount:!0,multiSelectAction:\"forEach\"},killWord:{exec:function(e,n){e.clearSelection(),n==\"left\"?e.selection.selectWordLeft():e.selection.selectWordRight();var r=e.getSelectionRange(),i=e.session.getTextRange(r);t.killRing.add(i),e.session.remove(r),e.clearSelection()},multiSelectAction:\"forEach\"},killLine:function(e){e.pushEmacsMark(null),e.clearSelection();var n=e.getSelectionRange(),r=e.session.getLine(n.start.row);n.end.column=r.length,r=r.substr(n.start.column);var i=e.session.getFoldLine(n.start.row);i&&n.end.row!=i.end.row&&(n.end.row=i.end.row,r=\"x\"),/^\\s*$/.test(r)&&(n.end.row++,r=e.session.getLine(n.end.row),n.end.column=/^\\s*$/.test(r)?r.length:0);var s=e.session.getTextRange(n);e.prevOp.command==this?t.killRing.append(s):t.killRing.add(s),e.session.remove(n),e.clearSelection()},yank:function(e){e.onPaste(t.killRing.get()||\"\"),e.keyBinding.$data.lastCommand=\"yank\"},yankRotate:function(e){if(e.keyBinding.$data.lastCommand!=\"yank\")return;e.undo(),e.session.$emacsMarkRing.pop(),e.onPaste(t.killRing.rotate()),e.keyBinding.$data.lastCommand=\"yank\"},killRegion:{exec:function(e){t.killRing.add(e.getCopyText()),e.commands.byName.cut.exec(e),e.setEmacsMark(null)},readOnly:!0,multiSelectAction:\"forEach\"},killRingSave:{exec:function(e){e.$handlesEmacsOnCopy=!0;var n=e.session.$emacsMarkRing.slice(),r=[];t.killRing.add(e.getCopyText()),setTimeout(function(){function t(){var t=e.selection,n=t.getRange(),i=t.isBackwards()?n.end:n.start;r.push({row:i.row,column:i.column}),t.clearSelection()}e.$handlesEmacsOnCopy=!1,e.inMultiSelectMode?e.forEachSelection({exec:t}):t(),e.session.$emacsMarkRing=n.concat(r.reverse())},0)},readOnly:!0},keyboardQuit:function(e){e.selection.clearSelection(),e.setEmacsMark(null),e.keyBinding.$data.count=null},focusCommandLine:function(e,t){e.showCommandLine&&e.showCommandLine(t)}}),t.handler.addCommands(i.iSearchStartCommands);var d=t.handler.commands;d.yank.isYank=!0,d.yankRotate.isYank=!0,t.killRing={$data:[],add:function(e){e&&this.$data.push(e),this.$data.length>30&&this.$data.shift()},append:function(e){var t=this.$data.length-1,n=this.$data[t]||\"\";e&&(n+=e),n&&(this.$data[t]=n)},get:function(e){return e=e||1,this.$data.slice(this.$data.length-e,this.$data.length).reverse().join(\"\\n\")},pop:function(){return this.$data.length>1&&this.$data.pop(),this.get()},rotate:function(){return this.$data.unshift(this.$data.pop()),this.get()}}});                (function() {\n                    ace.require([\"ace/keyboard/emacs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/keybinding-sublime.js",
    "content": "ace.define(\"ace/keyboard/sublime\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/oop\",\"ace/lib/useragent\",\"ace/keyboard/hash_handler\"],function(e,t,n){\"use strict\";function u(e,t,n){function f(e){return e?/\\s/.test(e)?\"s\":e==\"_\"?\"_\":e.toUpperCase()==e&&e.toLowerCase()!=e?\"W\":e.toUpperCase()!=e&&e.toLowerCase()==e?\"w\":\"o\":\"-\"}var r=e.selection,i=r.lead.row,s=r.lead.column,o=e.session.getLine(i);if(!o[s+t]){var u=(n?\"selectWord\":\"moveCursorShortWord\")+(t==1?\"Right\":\"Left\");return e.selection[u]()}t==-1&&s--;while(o[s]){var a=f(o[s])+f(o[s+t]);s+=t;if(t==1){if(a==\"WW\"&&f(o[s+1])==\"w\")break}else{if(a==\"wW\"){if(f(o[s-1])==\"W\"){s-=1;break}continue}if(a==\"Ww\")break}if(/w[s_oW]|_[sWo]|o[s_wW]|s[W]|W[so]/.test(a))break}t==-1&&s++,n?e.selection.moveCursorTo(i,s):e.selection.moveTo(i,s)}var r=e(\"../lib/keys\"),i=e(\"../lib/oop\"),s=e(\"../lib/useragent\"),o=e(\"../keyboard/hash_handler\").HashHandler;t.handler=new o,t.handler.addCommands([{name:\"find_all_under\",exec:function(e){e.selection.isEmpty()&&e.selection.selectWord(),e.findAll()},readOnly:!0},{name:\"find_under\",exec:function(e){e.selection.isEmpty()&&e.selection.selectWord(),e.findNext()},readOnly:!0},{name:\"find_under_prev\",exec:function(e){e.selection.isEmpty()&&e.selection.selectWord(),e.findPrevious()},readOnly:!0},{name:\"find_under_expand\",exec:function(e){e.selectMore(1,!1,!0)},scrollIntoView:\"animate\",readOnly:!0},{name:\"find_under_expand_skip\",exec:function(e){e.selectMore(1,!0,!0)},scrollIntoView:\"animate\",readOnly:!0},{name:\"delete_to_hard_bol\",exec:function(e){var t=e.selection.getCursor();e.session.remove({start:{row:t.row,column:0},end:t})},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"delete_to_hard_eol\",exec:function(e){var t=e.selection.getCursor();e.session.remove({start:t,end:{row:t.row,column:Infinity}})},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"moveToWordStartLeft\",exec:function(e){e.selection.moveCursorLongWordLeft(),e.clearSelection()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"moveToWordEndRight\",exec:function(e){e.selection.moveCursorLongWordRight(),e.clearSelection()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"selectToWordStartLeft\",exec:function(e){var t=e.selection;t.$moveSelection(t.moveCursorLongWordLeft)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"selectToWordEndRight\",exec:function(e){var t=e.selection;t.$moveSelection(t.moveCursorLongWordRight)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"selectSubWordRight\",exec:function(e){u(e,1,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectSubWordLeft\",exec:function(e){u(e,-1,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"moveSubWordRight\",exec:function(e){u(e,1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"moveSubWordLeft\",exec:function(e){u(e,-1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0}]),[{bindKey:{mac:\"cmd-k cmd-backspace|cmd-backspace\",win:\"ctrl-shift-backspace|ctrl-k ctrl-backspace\"},name:\"removetolinestarthard\"},{bindKey:{mac:\"cmd-k cmd-k|cmd-delete|ctrl-k\",win:\"ctrl-shift-delete|ctrl-k ctrl-k\"},name:\"removetolineendhard\"},{bindKey:{mac:\"cmd-shift-d\",win:\"ctrl-shift-d\"},name:\"duplicateSelection\"},{bindKey:{mac:\"cmd-l\",win:\"ctrl-l\"},name:\"expandtoline\"},{bindKey:{mac:\"cmd-shift-a\",win:\"ctrl-shift-a\"},name:\"expandSelection\",args:{to:\"tag\"}},{bindKey:{mac:\"cmd-shift-j\",win:\"ctrl-shift-j\"},name:\"expandSelection\",args:{to:\"indentation\"}},{bindKey:{mac:\"ctrl-shift-m\",win:\"ctrl-shift-m\"},name:\"expandSelection\",args:{to:\"brackets\"}},{bindKey:{mac:\"cmd-shift-space\",win:\"ctrl-shift-space\"},name:\"expandSelection\",args:{to:\"scope\"}},{bindKey:{mac:\"ctrl-cmd-g\",win:\"alt-f3\"},name:\"find_all_under\"},{bindKey:{mac:\"alt-cmd-g\",win:\"ctrl-f3\"},name:\"find_under\"},{bindKey:{mac:\"shift-alt-cmd-g\",win:\"ctrl-shift-f3\"},name:\"find_under_prev\"},{bindKey:{mac:\"cmd-g\",win:\"f3\"},name:\"findnext\"},{bindKey:{mac:\"shift-cmd-g\",win:\"shift-f3\"},name:\"findprevious\"},{bindKey:{mac:\"cmd-d\",win:\"ctrl-d\"},name:\"find_under_expand\"},{bindKey:{mac:\"cmd-k cmd-d\",win:\"ctrl-k ctrl-d\"},name:\"find_under_expand_skip\"},{bindKey:{mac:\"cmd-alt-[\",win:\"ctrl-shift-[\"},name:\"toggleFoldWidget\"},{bindKey:{mac:\"cmd-alt-]\",win:\"ctrl-shift-]\"},name:\"unfold\"},{bindKey:{mac:\"cmd-k cmd-0|cmd-k cmd-j\",win:\"ctrl-k ctrl-0|ctrl-k ctrl-j\"},name:\"unfoldall\"},{bindKey:{mac:\"cmd-k cmd-1\",win:\"ctrl-k ctrl-1\"},name:\"foldOther\",args:{level:1}},{bindKey:{win:\"ctrl-left\",mac:\"alt-left\"},name:\"moveToWordStartLeft\"},{bindKey:{win:\"ctrl-right\",mac:\"alt-right\"},name:\"moveToWordEndRight\"},{bindKey:{win:\"ctrl-shift-left\",mac:\"alt-shift-left\"},name:\"selectToWordStartLeft\"},{bindKey:{win:\"ctrl-shift-right\",mac:\"alt-shift-right\"},name:\"selectToWordEndRight\"},{bindKey:{mac:\"ctrl-alt-shift-right|ctrl-shift-right\",win:\"alt-shift-right\"},name:\"selectSubWordRight\"},{bindKey:{mac:\"ctrl-alt-shift-left|ctrl-shift-left\",win:\"alt-shift-left\"},name:\"selectSubWordLeft\"},{bindKey:{mac:\"ctrl-alt-right|ctrl-right\",win:\"alt-right\"},name:\"moveSubWordRight\"},{bindKey:{mac:\"ctrl-alt-left|ctrl-left\",win:\"alt-left\"},name:\"moveSubWordLeft\"},{bindKey:{mac:\"ctrl-m\",win:\"ctrl-m\"},name:\"jumptomatching\",args:{to:\"brackets\"}},{bindKey:{mac:\"ctrl-f6\",win:\"ctrl-f6\"},name:\"goToNextError\"},{bindKey:{mac:\"ctrl-shift-f6\",win:\"ctrl-shift-f6\"},name:\"goToPreviousError\"},{bindKey:{mac:\"ctrl-o\"},name:\"splitline\"},{bindKey:{mac:\"ctrl-shift-w\",win:\"alt-shift-w\"},name:\"surrowndWithTag\"},{bindKey:{mac:\"cmd-alt-.\",win:\"alt-.\"},name:\"close_tag\"},{bindKey:{mac:\"cmd-j\",win:\"ctrl-j\"},name:\"joinlines\"},{bindKey:{mac:\"ctrl--\",win:\"alt--\"},name:\"jumpBack\"},{bindKey:{mac:\"ctrl-shift--\",win:\"alt-shift--\"},name:\"jumpForward\"},{bindKey:{mac:\"cmd-k cmd-l\",win:\"ctrl-k ctrl-l\"},name:\"tolowercase\"},{bindKey:{mac:\"cmd-k cmd-u\",win:\"ctrl-k ctrl-u\"},name:\"touppercase\"},{bindKey:{mac:\"cmd-shift-v\",win:\"ctrl-shift-v\"},name:\"paste_and_indent\"},{bindKey:{mac:\"cmd-k cmd-v|cmd-alt-v\",win:\"ctrl-k ctrl-v\"},name:\"paste_from_history\"},{bindKey:{mac:\"cmd-shift-enter\",win:\"ctrl-shift-enter\"},name:\"addLineBefore\"},{bindKey:{mac:\"cmd-enter\",win:\"ctrl-enter\"},name:\"addLineAfter\"},{bindKey:{mac:\"ctrl-shift-k\",win:\"ctrl-shift-k\"},name:\"removeline\"},{bindKey:{mac:\"ctrl-alt-up\",win:\"ctrl-up\"},name:\"scrollup\"},{bindKey:{mac:\"ctrl-alt-down\",win:\"ctrl-down\"},name:\"scrolldown\"},{bindKey:{mac:\"cmd-a\",win:\"ctrl-a\"},name:\"selectall\"},{bindKey:{linux:\"alt-shift-down\",mac:\"ctrl-shift-down\",win:\"ctrl-alt-down\"},name:\"addCursorBelow\"},{bindKey:{linux:\"alt-shift-up\",mac:\"ctrl-shift-up\",win:\"ctrl-alt-up\"},name:\"addCursorAbove\"},{bindKey:{mac:\"cmd-k cmd-c|ctrl-l\",win:\"ctrl-k ctrl-c\"},name:\"centerselection\"},{bindKey:{mac:\"f5\",win:\"f9\"},name:\"sortlines\"},{bindKey:{mac:\"ctrl-f5\",win:\"ctrl-f9\"},name:\"sortlines\",args:{caseSensitive:!0}},{bindKey:{mac:\"cmd-shift-l\",win:\"ctrl-shift-l\"},name:\"splitIntoLines\"},{bindKey:{mac:\"ctrl-cmd-down\",win:\"ctrl-shift-down\"},name:\"movelinesdown\"},{bindKey:{mac:\"ctrl-cmd-up\",win:\"ctrl-shift-up\"},name:\"movelinesup\"},{bindKey:{mac:\"alt-down\",win:\"alt-down\"},name:\"modifyNumberDown\"},{bindKey:{mac:\"alt-up\",win:\"alt-up\"},name:\"modifyNumberUp\"},{bindKey:{mac:\"cmd-/\",win:\"ctrl-/\"},name:\"togglecomment\"},{bindKey:{mac:\"cmd-alt-/\",win:\"ctrl-shift-/\"},name:\"toggleBlockComment\"},{bindKey:{linux:\"ctrl-alt-q\",mac:\"ctrl-q\",win:\"ctrl-q\"},name:\"togglerecording\"},{bindKey:{linux:\"ctrl-alt-shift-q\",mac:\"ctrl-shift-q\",win:\"ctrl-shift-q\"},name:\"replaymacro\"},{bindKey:{mac:\"ctrl-t\",win:\"ctrl-t\"},name:\"transpose\"}].forEach(function(e){var n=t.handler.commands[e.name];n&&(n.bindKey=e.bindKey),t.handler.bindKey(e.bindKey,n||e.name)})});                (function() {\n                    ace.require([\"ace/keyboard/sublime\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/keybinding-vim.js",
    "content": "ace.define(\"ace/keyboard/vim\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/search\",\"ace/lib/useragent\",\"ace/search_highlight\",\"ace/commands/multi_select_commands\",\"ace/mode/text\",\"ace/multi_select\"],function(e,t,n){\"use strict\";function r(){function t(e){return typeof e!=\"object\"?e+\"\":\"line\"in e?e.line+\":\"+e.ch:\"anchor\"in e?t(e.anchor)+\"->\"+t(e.head):Array.isArray(e)?\"[\"+e.map(function(e){return t(e)})+\"]\":JSON.stringify(e)}var e=\"\";for(var n=0;n<arguments.length;n++){var r=arguments[n],i=t(r);e+=i+\"  \"}console.log(e)}function m(e){return{row:e.line,column:e.ch}}function g(e){return new E(e.row,e.column)}function x(e){e.setOption(\"disableInput\",!0),e.setOption(\"showCursorWhenSelecting\",!1),v.signal(e,\"vim-mode-change\",{mode:\"normal\"}),e.on(\"cursorActivity\",Gn),tt(e),v.on(e.getInputField(),\"paste\",M(e))}function T(e){e.setOption(\"disableInput\",!1),e.off(\"cursorActivity\",Gn),v.off(e.getInputField(),\"paste\",M(e)),e.state.vim=null}function N(e,t){this==v.keyMap.vim&&v.rmClass(e.getWrapperElement(),\"cm-fat-cursor\"),(!t||t.attach!=C)&&T(e)}function C(e,t){this==v.keyMap.vim&&v.addClass(e.getWrapperElement(),\"cm-fat-cursor\"),(!t||t.attach!=C)&&x(e)}function k(e,t){if(!t)return undefined;if(this[e])return this[e];var n=O(e);if(!n)return!1;var r=v.Vim.findKey(t,n);return typeof r==\"function\"&&v.signal(t,\"vim-keypress\",n),r}function O(e){if(e.charAt(0)==\"'\")return e.charAt(1);var t=e.split(/-(?!$)/),n=t[t.length-1];if(t.length==1&&t[0].length==1)return!1;if(t.length==2&&t[0]==\"Shift\"&&n.length==1)return!1;var r=!1;for(var i=0;i<t.length;i++){var s=t[i];s in L?t[i]=L[s]:r=!0,s in A&&(t[i]=A[s])}return r?(X(n)&&(t[t.length-1]=n.toLowerCase()),\"<\"+t.join(\"-\")+\">\"):!1}function M(e){var t=e.state.vim;return t.onPasteFn||(t.onPasteFn=function(){t.insertMode||(e.setCursor(St(e.getCursor(),0,1)),yt.enterInsertMode(e,{},t))}),t.onPasteFn}function H(e,t){var n=[];for(var r=e;r<e+t;r++)n.push(String.fromCharCode(r));return n}function R(e,t){return t>=e.firstLine()&&t<=e.lastLine()}function U(e){return/^[a-z]$/.test(e)}function z(e){return\"()[]{}\".indexOf(e)!=-1}function W(e){return _.test(e)}function X(e){return/^[A-Z]$/.test(e)}function V(e){return/^\\s*$/.test(e)}function $(e,t){for(var n=0;n<t.length;n++)if(t[n]==e)return!0;return!1}function K(e,t,n,r,i){if(t===undefined&&!i)throw Error(\"defaultValue is required unless callback is provided\");n||(n=\"string\"),J[e]={type:n,defaultValue:t,callback:i};if(r)for(var s=0;s<r.length;s++)J[r[s]]=J[e];t&&Q(e,t)}function Q(e,t,n,r){var i=J[e];r=r||{};var s=r.scope;if(!i)return new Error(\"Unknown option: \"+e);if(i.type==\"boolean\"){if(t&&t!==!0)return new Error(\"Invalid argument: \"+e+\"=\"+t);t!==!1&&(t=!0)}i.callback?(s!==\"local\"&&i.callback(t,undefined),s!==\"global\"&&n&&i.callback(t,n)):(s!==\"local\"&&(i.value=i.type==\"boolean\"?!!t:t),s!==\"global\"&&n&&(n.state.vim.options[e]={value:t}))}function G(e,t,n){var r=J[e];n=n||{};var i=n.scope;if(!r)return new Error(\"Unknown option: \"+e);if(r.callback){var s=t&&r.callback(undefined,t);if(i!==\"global\"&&s!==undefined)return s;if(i!==\"local\")return r.callback();return}var s=i!==\"global\"&&t&&t.state.vim.options[e];return(s||i!==\"local\"&&r||{}).value}function et(){this.latestRegister=undefined,this.isPlaying=!1,this.isRecording=!1,this.replaySearchQueries=[],this.onRecordingDone=undefined,this.lastInsertModeChanges=Z()}function tt(e){return e.state.vim||(e.state.vim={inputState:new ot,lastEditInputState:undefined,lastEditActionCommand:undefined,lastHPos:-1,lastHSPos:-1,lastMotion:null,marks:{},fakeCursor:null,insertMode:!1,insertModeRepeat:undefined,visualMode:!1,visualLine:!1,visualBlock:!1,lastSelection:null,lastPastedText:null,sel:{},options:{}}),e.state.vim}function rt(){nt={searchQuery:null,searchIsReversed:!1,lastSubstituteReplacePart:undefined,jumpList:Y(),macroModeState:new et,lastCharacterSearch:{increment:0,forward:!0,selectedCharacter:\"\"},registerController:new lt({}),searchHistoryController:new ct,exCommandHistoryController:new ct};for(var e in J){var t=J[e];t.value=t.defaultValue}}function ot(){this.prefixRepeat=[],this.motionRepeat=[],this.operator=null,this.operatorArgs=null,this.motion=null,this.motionArgs=null,this.keyBuffer=[],this.registerName=null}function ut(e,t){e.state.vim.inputState=new ot,v.signal(e,\"vim-command-done\",t)}function at(e,t,n){this.clear(),this.keyBuffer=[e||\"\"],this.insertModeChanges=[],this.searchQueries=[],this.linewise=!!t,this.blockwise=!!n}function ft(e,t){var n=nt.registerController.registers;if(!e||e.length!=1)throw Error(\"Register name must be 1 character\");n[e]=t,q.push(e)}function lt(e){this.registers=e,this.unnamedRegister=e['\"']=new at,e[\".\"]=new at,e[\":\"]=new at,e[\"/\"]=new at}function ct(){this.historyBuffer=[],this.iterator=0,this.initialPrefix=null}function dt(e,t){pt[e]=t}function vt(e,t){var n=[];for(var r=0;r<t;r++)n.push(e);return n}function gt(e,t){mt[e]=t}function bt(e,t){yt[e]=t}function wt(e,t,n){var r=Math.min(Math.max(e.firstLine(),t.line),e.lastLine()),i=Pt(e,r)-1;i=n?i+1:i;var s=Math.min(Math.max(0,t.ch),i);return E(r,s)}function Et(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function St(e,t,n){return typeof t==\"object\"&&(n=t.ch,t=t.line),E(e.line+t,e.ch+n)}function xt(e,t){return{line:t.line-e.line,ch:t.line-e.line}}function Tt(e,t,n,r){var i,s=[],o=[];for(var u=0;u<t.length;u++){var a=t[u];if(n==\"insert\"&&a.context!=\"insert\"||a.context&&a.context!=n||r.operator&&a.type==\"action\"||!(i=Nt(e,a.keys)))continue;i==\"partial\"&&s.push(a),i==\"full\"&&o.push(a)}return{partial:s.length&&s,full:o.length&&o}}function Nt(e,t){if(t.slice(-11)==\"<character>\"){var n=t.length-11,r=e.slice(0,n),i=t.slice(0,n);return r==i&&e.length>n?\"full\":i.indexOf(r)==0?\"partial\":!1}return e==t?\"full\":t.indexOf(e)==0?\"partial\":!1}function Ct(e){var t=/^.*(<[^>]+>)$/.exec(e),n=t?t[1]:e.slice(-1);if(n.length>1)switch(n){case\"<CR>\":n=\"\\n\";break;case\"<Space>\":n=\" \";break;default:n=\"\"}return n}function kt(e,t,n){return function(){for(var r=0;r<n;r++)t(e)}}function Lt(e){return E(e.line,e.ch)}function At(e,t){return e.ch==t.ch&&e.line==t.line}function Ot(e,t){return e.line<t.line?!0:e.line==t.line&&e.ch<t.ch?!0:!1}function Mt(e,t){return arguments.length>2&&(t=Mt.apply(undefined,Array.prototype.slice.call(arguments,1))),Ot(e,t)?e:t}function _t(e,t){return arguments.length>2&&(t=_t.apply(undefined,Array.prototype.slice.call(arguments,1))),Ot(e,t)?t:e}function Dt(e,t,n){var r=Ot(e,t),i=Ot(t,n);return r&&i}function Pt(e,t){return e.getLine(t).length}function Ht(e){return e.trim?e.trim():e.replace(/^\\s+|\\s+$/g,\"\")}function Bt(e){return e.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g,\"\\\\$1\")}function jt(e,t,n){var r=Pt(e,t),i=(new Array(n-r+1)).join(\" \");e.setCursor(E(t,r)),e.replaceRange(i,e.getCursor())}function Ft(e,t){var n=[],r=e.listSelections(),i=Lt(e.clipPos(t)),s=!At(t,i),o=e.getCursor(\"head\"),u=qt(r,o),a=At(r[u].head,r[u].anchor),f=r.length-1,l=f-u>u?f:0,c=r[l].anchor,h=Math.min(c.line,i.line),p=Math.max(c.line,i.line),d=c.ch,v=i.ch,m=r[l].head.ch-d,g=v-d;m>0&&g<=0?(d++,s||v--):m<0&&g>=0?(d--,a||v++):m<0&&g==-1&&(d--,v++);for(var y=h;y<=p;y++){var b={anchor:new E(y,d),head:new E(y,v)};n.push(b)}return e.setSelections(n),t.ch=v,c.ch=d,c}function It(e,t,n){var r=[];for(var i=0;i<n;i++){var s=St(t,i,0);r.push({anchor:s,head:s})}e.setSelections(r,0)}function qt(e,t,n){for(var r=0;r<e.length;r++){var i=n!=\"head\"&&At(e[r].anchor,t),s=n!=\"anchor\"&&At(e[r].head,t);if(i||s)return r}return-1}function Rt(e,t){var n=t.lastSelection,r=function(){var t=e.listSelections(),n=t[0],r=t[t.length-1],i=Ot(n.anchor,n.head)?n.anchor:n.head,s=Ot(r.anchor,r.head)?r.head:r.anchor;return[i,s]},i=function(){var t=e.getCursor(),r=e.getCursor(),i=n.visualBlock;if(i){var s=i.width,o=i.height;r=E(t.line+o,t.ch+s);var u=[];for(var a=t.line;a<r.line;a++){var f=E(a,t.ch),l=E(a,r.ch),c={anchor:f,head:l};u.push(c)}e.setSelections(u)}else{var h=n.anchorMark.find(),p=n.headMark.find(),d=p.line-h.line,v=p.ch-h.ch;r={line:r.line+d,ch:d?r.ch:v+r.ch},n.visualLine&&(t=E(t.line,0),r=E(r.line,Pt(e,r.line))),e.setSelection(t,r)}return[t,r]};return t.visualMode?r():i()}function Ut(e,t){var n=t.sel.anchor,r=t.sel.head;t.lastPastedText&&(r=e.posFromIndex(e.indexFromPos(n)+t.lastPastedText.length),t.lastPastedText=null),t.lastSelection={anchorMark:e.setBookmark(n),headMark:e.setBookmark(r),anchor:Lt(n),head:Lt(r),visualMode:t.visualMode,visualLine:t.visualLine,visualBlock:t.visualBlock}}function zt(e,t,n){var r=e.state.vim.sel,i=r.head,s=r.anchor,o;return Ot(n,t)&&(o=n,n=t,t=o),Ot(i,s)?(i=Mt(t,i),s=_t(s,n)):(s=Mt(t,s),i=_t(i,n),i=St(i,0,-1),i.ch==-1&&i.line!=e.firstLine()&&(i=E(i.line-1,Pt(e,i.line-1)))),[s,i]}function Wt(e,t,n){var r=e.state.vim;t=t||r.sel;var n=n||r.visualLine?\"line\":r.visualBlock?\"block\":\"char\",i=Xt(e,t,n);e.setSelections(i.ranges,i.primary),Yn(e)}function Xt(e,t,n,r){var i=Lt(t.head),s=Lt(t.anchor);if(n==\"char\"){var o=!r&&!Ot(t.head,t.anchor)?1:0,u=Ot(t.head,t.anchor)?1:0;return i=St(t.head,0,o),s=St(t.anchor,0,u),{ranges:[{anchor:s,head:i}],primary:0}}if(n==\"line\"){if(!Ot(t.head,t.anchor)){s.ch=0;var a=e.lastLine();i.line>a&&(i.line=a),i.ch=Pt(e,i.line)}else i.ch=0,s.ch=Pt(e,s.line);return{ranges:[{anchor:s,head:i}],primary:0}}if(n==\"block\"){var f=Math.min(s.line,i.line),l=Math.min(s.ch,i.ch),c=Math.max(s.line,i.line),h=Math.max(s.ch,i.ch)+1,p=c-f+1,d=i.line==f?0:p-1,v=[];for(var m=0;m<p;m++)v.push({anchor:E(f+m,l),head:E(f+m,h)});return{ranges:v,primary:d}}}function Vt(e){var t=e.getCursor(\"head\");return e.getSelection().length==1&&(t=Mt(t,e.getCursor(\"anchor\"))),t}function $t(e,t){var n=e.state.vim;t!==!1&&e.setCursor(wt(e,n.sel.head)),Ut(e,n),n.visualMode=!1,n.visualLine=!1,n.visualBlock=!1,v.signal(e,\"vim-mode-change\",{mode:\"normal\"}),n.fakeCursor&&n.fakeCursor.clear()}function Jt(e,t,n){var r=e.getRange(t,n);if(/\\n\\s*$/.test(r)){var i=r.split(\"\\n\");i.pop();var s;for(var s=i.pop();i.length>0&&s&&V(s);s=i.pop())n.line--,n.ch=0;s?(n.line--,n.ch=Pt(e,n.line)):n.ch=0}}function Kt(e,t,n){t.ch=0,n.ch=0,n.line++}function Qt(e){if(!e)return 0;var t=e.search(/\\S/);return t==-1?e.length:t}function Gt(e,t,n,r,i){var s=Vt(e),o=e.getLine(s.line),u=s.ch,a=i?D[0]:P[0];while(!a(o.charAt(u))){u++;if(u>=o.length)return null}r?a=P[0]:(a=D[0],a(o.charAt(u))||(a=D[1]));var f=u,l=u;while(a(o.charAt(f))&&f<o.length)f++;while(a(o.charAt(l))&&l>=0)l--;l++;if(t){var c=f;while(/\\s/.test(o.charAt(f))&&f<o.length)f++;if(c==f){var h=l;while(/\\s/.test(o.charAt(l-1))&&l>0)l--;l||(l=h)}}return{start:E(s.line,l),end:E(s.line,f)}}function Yt(e,t,n){At(t,n)||nt.jumpList.add(e,t,n)}function Zt(e,t){nt.lastCharacterSearch.increment=e,nt.lastCharacterSearch.forward=t.forward,nt.lastCharacterSearch.selectedCharacter=t.selectedCharacter}function nn(e,t,n,r){var i=Lt(e.getCursor()),s=n?1:-1,o=n?e.lineCount():-1,u=i.ch,a=i.line,f=e.getLine(a),l={lineText:f,nextCh:f.charAt(u),lastCh:null,index:u,symb:r,reverseSymb:(n?{\")\":\"(\",\"}\":\"{\"}:{\"(\":\")\",\"{\":\"}\"})[r],forward:n,depth:0,curMoveThrough:!1},c=en[r];if(!c)return i;var h=tn[c].init,p=tn[c].isComplete;h&&h(l);while(a!==o&&t){l.index+=s,l.nextCh=l.lineText.charAt(l.index);if(!l.nextCh){a+=s,l.lineText=e.getLine(a)||\"\";if(s>0)l.index=0;else{var d=l.lineText.length;l.index=d>0?d-1:0}l.nextCh=l.lineText.charAt(l.index)}p(l)&&(i.line=a,i.ch=l.index,t--)}return l.nextCh||l.curMoveThrough?E(a,l.index):i}function rn(e,t,n,r,i){var s=t.line,o=t.ch,u=e.getLine(s),a=n?1:-1,f=r?P:D;if(i&&u==\"\"){s+=a,u=e.getLine(s);if(!R(e,s))return null;o=n?0:u.length}for(;;){if(i&&u==\"\")return{from:0,to:0,line:s};var l=a>0?u.length:-1,c=l,h=l;while(o!=l){var p=!1;for(var d=0;d<f.length&&!p;++d)if(f[d](u.charAt(o))){c=o;while(o!=l&&f[d](u.charAt(o)))o+=a;h=o,p=c!=h;if(c==t.ch&&s==t.line&&h==c+a)continue;return{from:Math.min(c,h+1),to:Math.max(c,h),line:s}}p||(o+=a)}s+=a;if(!R(e,s))return null;u=e.getLine(s),o=a>0?0:u.length}}function sn(e,t,n,r,i,s){var o=Lt(t),u=[];(r&&!i||!r&&i)&&n++;var a=!r||!i;for(var f=0;f<n;f++){var l=rn(e,t,r,s,a);if(!l){var c=Pt(e,e.lastLine());u.push(r?{line:e.lastLine(),from:c,to:c}:{line:0,from:0,to:0});break}u.push(l),t=E(l.line,r?l.to-1:l.from)}var h=u.length!=n,p=u[0],d=u.pop();return r&&!i?(!h&&(p.from!=o.ch||p.line!=o.line)&&(d=u.pop()),E(d.line,d.from)):r&&i?E(d.line,d.to-1):!r&&i?(!h&&(p.to!=o.ch||p.line!=o.line)&&(d=u.pop()),E(d.line,d.to)):E(d.line,d.from)}function on(e,t,n,r){var i=e.getCursor(),s=i.ch,o;for(var u=0;u<t;u++){var a=e.getLine(i.line);o=fn(s,a,r,n,!0);if(o==-1)return null;s=o}return E(e.getCursor().line,o)}function un(e,t){var n=e.getCursor().line;return wt(e,E(n,t-1))}function an(e,t,n,r){if(!$(n,I))return;t.marks[n]&&t.marks[n].clear(),t.marks[n]=e.setBookmark(r)}function fn(e,t,n,r,i){var s;return r?(s=t.indexOf(n,e+1),s!=-1&&!i&&(s-=1)):(s=t.lastIndexOf(n,e-1),s!=-1&&!i&&(s+=1)),s}function ln(e,t,n,r,i){function c(t){return!/\\S/.test(e.getLine(t))}function h(e,t,n){return n?c(e)!=c(e+t):!c(e)&&c(e+t)}function p(t){r=r>0?1:-1;var n=e.ace.session.getFoldLine(t);n&&t+r>n.start.row&&t+r<n.end.row&&(r=(r>0?n.end.row:n.start.row)-t)}var s=t.line,o=e.firstLine(),u=e.lastLine(),a,f,l=s;if(r){while(o<=l&&l<=u&&n>0)p(l),h(l,r)&&n--,l+=r;return new E(l,0)}var d=e.state.vim;if(d.visualLine&&h(s,1,!0)){var v=d.sel.anchor;h(v.line,-1,!0)&&(!i||v.line!=s)&&(s+=1)}var m=c(s);for(l=s;l<=u&&n;l++)h(l,1,!0)&&(!i||c(l)!=m)&&n--;f=new E(l,0),l>u&&!m?m=!0:i=!1;for(l=s;l>o;l--)if(!i||c(l)==m||l==s)if(h(l,-1,!0))break;return a=new E(l,0),{start:a,end:f}}function cn(e,t,n,r){var i=t,s,o,u={\"(\":/[()]/,\")\":/[()]/,\"[\":/[[\\]]/,\"]\":/[[\\]]/,\"{\":/[{}]/,\"}\":/[{}]/,\"<\":/[<>]/,\">\":/[<>]/}[n],a={\"(\":\"(\",\")\":\"(\",\"[\":\"[\",\"]\":\"[\",\"{\":\"{\",\"}\":\"{\",\"<\":\"<\",\">\":\"<\"}[n],f=e.getLine(i.line).charAt(i.ch),l=f===a?1:0;s=e.scanForBracket(E(i.line,i.ch+l),-1,null,{bracketRegex:u}),o=e.scanForBracket(E(i.line,i.ch+l),1,null,{bracketRegex:u});if(!s||!o)return{start:i,end:i};s=s.pos,o=o.pos;if(s.line==o.line&&s.ch>o.ch||s.line>o.line){var c=s;s=o,o=c}return r?o.ch+=1:s.ch+=1,{start:s,end:o}}function hn(e,t,n,r){var i=Lt(t),s=e.getLine(i.line),o=s.split(\"\"),u,a,f,l,c=o.indexOf(n);i.ch<c?i.ch=c:c<i.ch&&o[i.ch]==n&&(a=i.ch,--i.ch);if(o[i.ch]==n&&!a)u=i.ch+1;else for(f=i.ch;f>-1&&!u;f--)o[f]==n&&(u=f+1);if(u&&!a)for(f=u,l=o.length;f<l&&!a;f++)o[f]==n&&(a=f);return!u||!a?{start:i,end:i}:(r&&(--u,++a),{start:E(i.line,u),end:E(i.line,a)})}function pn(){}function dn(e){var t=e.state.vim;return t.searchState_||(t.searchState_=new pn)}function vn(e,t,n,r,i){e.openDialog?e.openDialog(t,r,{bottom:!0,value:i.value,onKeyDown:i.onKeyDown,onKeyUp:i.onKeyUp,selectValueOnOpen:!1,onClose:function(){e.state.vim&&(e.state.vim.status=\"\",e.ace.renderer.$loop.schedule(e.ace.renderer.CHANGE_CURSOR))}}):r(prompt(n,\"\"))}function mn(e){return yn(e,\"/\")}function gn(e){return bn(e,\"/\")}function yn(e,t){var n=bn(e,t)||[];if(!n.length)return[];var r=[];if(n[0]!==0)return;for(var i=0;i<n.length;i++)typeof n[i]==\"number\"&&r.push(e.substring(n[i]+1,n[i+1]));return r}function bn(e,t){t||(t=\"/\");var n=!1,r=[];for(var i=0;i<e.length;i++){var s=e.charAt(i);!n&&s==t&&r.push(i),n=!n&&s==\"\\\\\"}return r}function wn(e){var t=\"|(){\",n=\"}\",r=!1,i=[];for(var s=-1;s<e.length;s++){var o=e.charAt(s)||\"\",u=e.charAt(s+1)||\"\",a=u&&t.indexOf(u)!=-1;r?((o!==\"\\\\\"||!a)&&i.push(o),r=!1):o===\"\\\\\"?(r=!0,u&&n.indexOf(u)!=-1&&(a=!0),(!a||u===\"\\\\\")&&i.push(o)):(i.push(o),a&&u!==\"\\\\\"&&i.push(\"\\\\\"))}return i.join(\"\")}function Sn(e){var t=!1,n=[];for(var r=-1;r<e.length;r++){var i=e.charAt(r)||\"\",s=e.charAt(r+1)||\"\";En[i+s]?(n.push(En[i+s]),r++):t?(n.push(i),t=!1):i===\"\\\\\"?(t=!0,W(s)||s===\"$\"?n.push(\"$\"):s!==\"/\"&&s!==\"\\\\\"&&n.push(\"\\\\\")):(i===\"$\"&&n.push(\"$\"),n.push(i),s===\"/\"&&n.push(\"\\\\\"))}return n.join(\"\")}function Tn(e){var t=new v.StringStream(e),n=[];while(!t.eol()){while(t.peek()&&t.peek()!=\"\\\\\")n.push(t.next());var r=!1;for(var i in xn)if(t.match(i,!0)){r=!0,n.push(xn[i]);break}r||n.push(t.next())}return n.join(\"\")}function Nn(e,t,n){var r=nt.registerController.getRegister(\"/\");r.setText(e);if(e instanceof RegExp)return e;var i=gn(e),s,o;if(!i.length)s=e;else{s=e.substring(0,i[0]);var u=e.substring(i[0]);o=u.indexOf(\"i\")!=-1}if(!s)return null;G(\"pcre\")||(s=wn(s)),n&&(t=/^[^A-Z]*$/.test(s));var a=new RegExp(s,t||o?\"i\":undefined);return a}function Cn(e,t){e.openNotification?e.openNotification('<span style=\"color: red\">'+t+\"</span>\",{bottom:!0,duration:5e3}):alert(t)}function kn(e,t){var n='<span style=\"font-family: monospace; white-space: pre\">'+(e||\"\")+'<input type=\"text\" autocorrect=\"off\" autocapitalize=\"none\" autocomplete=\"off\"></span>';return t&&(n+=' <span style=\"color: #888\">'+t+\"</span>\"),n}function An(e,t){var n=(t.prefix||\"\")+\" \"+(t.desc||\"\"),r=kn(t.prefix,t.desc);vn(e,r,n,t.onClose,t)}function On(e,t){if(e instanceof RegExp&&t instanceof RegExp){var n=[\"global\",\"multiline\",\"ignoreCase\",\"source\"];for(var r=0;r<n.length;r++){var i=n[r];if(e[i]!==t[i])return!1}return!0}return!1}function Mn(e,t,n,r){if(!t)return;var i=dn(e),s=Nn(t,!!n,!!r);if(!s)return;return Dn(e,s),On(s,i.getQuery())?s:(i.setQuery(s),s)}function _n(e){if(e.source.charAt(0)==\"^\")var t=!0;return{token:function(n){if(t&&!n.sol()){n.skipToEnd();return}var r=n.match(e,!1);if(r){if(r[0].length==0)return n.next(),\"searching\";if(!n.sol()){n.backUp(1);if(!e.exec(n.next()+r[0]))return n.next(),null}return n.match(e),\"searching\"}while(!n.eol()){n.next();if(n.match(e,!1))break}},query:e}}function Dn(e,t){var n=dn(e),r=n.getOverlay();if(!r||t!=r.query)r&&e.removeOverlay(r),r=_n(t),e.addOverlay(r),e.showMatchesOnScrollbar&&(n.getScrollbarAnnotate()&&n.getScrollbarAnnotate().clear(),n.setScrollbarAnnotate(e.showMatchesOnScrollbar(t))),n.setOverlay(r)}function Pn(e,t,n,r){return r===undefined&&(r=1),e.operation(function(){var i=e.getCursor(),s=e.getSearchCursor(n,i);for(var o=0;o<r;o++){var u=s.find(t);o==0&&u&&At(s.from(),i)&&(u=s.find(t));if(!u){s=e.getSearchCursor(n,t?E(e.lastLine()):E(e.firstLine(),0));if(!s.find(t))return}}return s.from()})}function Hn(e){var t=dn(e);e.removeOverlay(dn(e).getOverlay()),t.setOverlay(null),t.getScrollbarAnnotate()&&(t.getScrollbarAnnotate().clear(),t.setScrollbarAnnotate(null))}function Bn(e,t,n){return typeof e!=\"number\"&&(e=e.line),t instanceof Array?$(e,t):n?e>=t&&e<=n:e==t}function jn(e){var t=e.ace.renderer;return{top:t.getFirstFullyVisibleRow(),bottom:t.getLastFullyVisibleRow()}}function Fn(e,t,n){var r=t.marks[n];return r&&r.find()}function Un(e,t,n,r,i,s,o,u,a){function c(){e.operation(function(){while(!f)h(),p();d()})}function h(){var t=e.getRange(s.from(),s.to()),n=t.replace(o,u);s.replace(n)}function p(){while(s.findNext()&&Bn(s.from(),r,i)){if(!n&&l&&s.from().line==l.line)continue;e.scrollIntoView(s.from(),30),e.setSelection(s.from(),s.to()),l=s.from(),f=!1;return}f=!0}function d(t){t&&t(),e.focus();if(l){e.setCursor(l);var n=e.state.vim;n.exMode=!1,n.lastHPos=n.lastHSPos=l.ch}a&&a()}function m(t,n,r){v.e_stop(t);var i=v.keyName(t);switch(i){case\"Y\":h(),p();break;case\"N\":p();break;case\"A\":var s=a;a=undefined,e.operation(c),a=s;break;case\"L\":h();case\"Q\":case\"Esc\":case\"Ctrl-C\":case\"Ctrl-[\":d(r)}return f&&d(r),!0}e.state.vim.exMode=!0;var f=!1,l=s.from();p();if(f){Cn(e,\"No matches for \"+o.source);return}if(!t){c(),a&&a();return}An(e,{prefix:\"replace with <strong>\"+u+\"</strong> (y/n/a/q/l)\",onKeyDown:m})}function zn(e){var t=e.state.vim,n=nt.macroModeState,r=nt.registerController.getRegister(\".\"),i=n.isPlaying,s=n.lastInsertModeChanges;i||(e.off(\"change\",Qn),v.off(e.getInputField(),\"keydown\",tr)),!i&&t.insertModeRepeat>1&&(nr(e,t,t.insertModeRepeat-1,!0),t.lastEditInputState.repeatOverride=t.insertModeRepeat),delete t.insertModeRepeat,t.insertMode=!1,e.setCursor(e.getCursor().line,e.getCursor().ch-1),e.setOption(\"keyMap\",\"vim\"),e.setOption(\"disableInput\",!0),e.toggleOverwrite(!1),r.setText(s.changes.join(\"\")),v.signal(e,\"vim-mode-change\",{mode:\"normal\"}),n.isRecording&&Jn(n)}function Wn(e){b.unshift(e)}function Xn(e,t,n,r,i){var s={keys:e,type:t};s[t]=n,s[t+\"Args\"]=r;for(var o in i)s[o]=i[o];Wn(s)}function Vn(e,t,n,r){var i=nt.registerController.getRegister(r);if(r==\":\"){i.keyBuffer[0]&&Rn.processCommand(e,i.keyBuffer[0]),n.isPlaying=!1;return}var s=i.keyBuffer,o=0;n.isPlaying=!0,n.replaySearchQueries=i.searchQueries.slice(0);for(var u=0;u<s.length;u++){var a=s[u],f,l;while(a){f=/<\\w+-.+?>|<\\w+>|./.exec(a),l=f[0],a=a.substring(f.index+l.length),v.Vim.handleKey(e,l,\"macro\");if(t.insertMode){var c=i.insertModeChanges[o++].changes;nt.macroModeState.lastInsertModeChanges.changes=c,rr(e,c,1),zn(e)}}}n.isPlaying=!1}function $n(e,t){if(e.isPlaying)return;var n=e.latestRegister,r=nt.registerController.getRegister(n);r&&r.pushText(t)}function Jn(e){if(e.isPlaying)return;var t=e.latestRegister,n=nt.registerController.getRegister(t);n&&n.pushInsertModeChanges&&n.pushInsertModeChanges(e.lastInsertModeChanges)}function Kn(e,t){if(e.isPlaying)return;var n=e.latestRegister,r=nt.registerController.getRegister(n);r&&r.pushSearchQuery&&r.pushSearchQuery(t)}function Qn(e,t){var n=nt.macroModeState,r=n.lastInsertModeChanges;if(!n.isPlaying)while(t){r.expectCursorActivityForChange=!0;if(r.ignoreCount>1)r.ignoreCount--;else if(t.origin==\"+input\"||t.origin==\"paste\"||t.origin===undefined){var i=e.listSelections().length;i>1&&(r.ignoreCount=i);var s=t.text.join(\"\\n\");r.maybeReset&&(r.changes=[],r.maybeReset=!1),e.state.overwrite&&!/\\n/.test(s)?r.changes.push([s]):r.changes.push(s)}t=t.next}}function Gn(e){var t=e.state.vim;if(t.insertMode){var n=nt.macroModeState;if(n.isPlaying)return;var r=n.lastInsertModeChanges;r.expectCursorActivityForChange?r.expectCursorActivityForChange=!1:r.maybeReset=!0}else e.curOp.isVimOp||Zn(e,t);t.visualMode&&Yn(e)}function Yn(e){var t=e.state.vim,n=wt(e,Lt(t.sel.head)),r=St(n,0,1);t.fakeCursor&&t.fakeCursor.clear(),t.fakeCursor=e.markText(n,r,{className:\"cm-animate-fat-cursor\"})}function Zn(e,t){var n=e.getCursor(\"anchor\"),r=e.getCursor(\"head\");t.visualMode&&!e.somethingSelected()?$t(e,!1):!t.visualMode&&!t.insertMode&&e.somethingSelected()&&(t.visualMode=!0,t.visualLine=!1,v.signal(e,\"vim-mode-change\",{mode:\"visual\"}));if(t.visualMode){var i=Ot(r,n)?0:-1,s=Ot(r,n)?-1:0;r=St(r,0,i),n=St(n,0,s),t.sel={anchor:n,head:r},an(e,t,\"<\",Mt(r,n)),an(e,t,\">\",_t(r,n))}else t.insertMode||(t.lastHPos=e.getCursor().ch)}function er(e){this.keyName=e}function tr(e){function i(){return n.maybeReset&&(n.changes=[],n.maybeReset=!1),n.changes.push(new er(r)),!0}var t=nt.macroModeState,n=t.lastInsertModeChanges,r=v.keyName(e);if(!r)return;(r.indexOf(\"Delete\")!=-1||r.indexOf(\"Backspace\")!=-1)&&v.lookupKey(r,\"vim-insert\",i)}function nr(e,t,n,r){function u(){s?ht.processAction(e,t,t.lastEditActionCommand):ht.evalInput(e,t)}function a(n){if(i.lastInsertModeChanges.changes.length>0){n=t.lastEditActionCommand?n:1;var r=i.lastInsertModeChanges;rr(e,r.changes,n)}}var i=nt.macroModeState;i.isPlaying=!0;var s=!!t.lastEditActionCommand,o=t.inputState;t.inputState=t.lastEditInputState;if(s&&t.lastEditActionCommand.interlaceInsertRepeat)for(var f=0;f<n;f++)u(),a(1);else r||u(),a(n);t.inputState=o,t.insertMode&&!r&&zn(e),i.isPlaying=!1}function rr(e,t,n){function r(t){return typeof t==\"string\"?v.commands[t](e):t(e),!0}var i=e.getCursor(\"head\"),s=nt.macroModeState.lastInsertModeChanges.inVisualBlock;if(s){var o=e.state.vim,u=o.lastSelection,a=xt(u.anchor,u.head);It(e,i,a.line+1),n=e.listSelections().length,e.setCursor(i)}for(var f=0;f<n;f++){s&&e.setCursor(St(i,f,0));for(var l=0;l<t.length;l++){var c=t[l];if(c instanceof er)v.lookupKey(c.keyName,\"vim-insert\",r);else if(typeof c==\"string\"){var h=e.getCursor();e.replaceRange(c,h,h)}else{var p=e.getCursor(),d=St(p,0,c[0].length);e.replaceRange(c[0],p,d)}}}s&&e.setCursor(St(i,0,1))}function sr(e,t,n){t.length>1&&t[0]==\"n\"&&(t=t.replace(\"numpad\",\"\")),t=ir[t]||t;var r=\"\";return n.ctrlKey&&(r+=\"C-\"),n.altKey&&(r+=\"A-\"),(r||t.length>1)&&n.shiftKey&&(r+=\"S-\"),r+=t,r.length>1&&(r=\"<\"+r+\">\"),r}function ur(e){var t=new e.constructor;return Object.keys(e).forEach(function(n){var r=e[n];Array.isArray(r)?r=r.slice():r&&typeof r==\"object\"&&r.constructor!=Object&&(r=ur(r)),t[n]=r}),e.sel&&(t.sel={head:e.sel.head&&Lt(e.sel.head),anchor:e.sel.anchor&&Lt(e.sel.anchor)}),t}function ar(e,t,n){var r=!1,i=S.maybeInitVimState_(e),s=i.visualBlock||i.wasInVisualBlock;i.wasInVisualBlock&&!e.ace.inMultiSelectMode?i.wasInVisualBlock=!1:e.ace.inMultiSelectMode&&i.visualBlock&&(i.wasInVisualBlock=!0);if(t==\"<Esc>\"&&!i.insertMode&&!i.visualMode&&e.ace.inMultiSelectMode)e.ace.exitMultiSelectMode();else if(s||!e.ace.inMultiSelectMode||e.ace.inVirtualSelectionMode)r=S.handleKey(e,t,n);else{var o=ur(i);e.operation(function(){e.ace.forEachSelection(function(){var i=e.ace.selection;e.state.vim.lastHPos=i.$desiredColumn==null?i.lead.column:i.$desiredColumn;var s=e.getCursor(\"head\"),u=e.getCursor(\"anchor\"),a=Ot(s,u)?0:-1,f=Ot(s,u)?-1:0;s=St(s,0,a),u=St(u,0,f),e.state.vim.sel.head=s,e.state.vim.sel.anchor=u,r=or(e,t,n),i.$desiredColumn=e.state.vim.lastHPos==-1?null:e.state.vim.lastHPos,e.virtualSelectionMode()&&(e.state.vim=ur(o))}),e.curOp.cursorActivity&&!r&&(e.curOp.cursorActivity=!1)},!0)}return r&&!i.visualMode&&!i.insert&&Zn(e,i),r}function lr(e,t){t.off(\"beforeEndOperation\",lr);var n=t.state.cm.vimCmd;n&&t.execCommand(n.exec?n:n.name,n.args),t.curOp=t.prevOp}var i=e(\"../range\").Range,s=e(\"../lib/event_emitter\").EventEmitter,o=e(\"../lib/dom\"),u=e(\"../lib/oop\"),a=e(\"../lib/keys\"),f=e(\"../lib/event\"),l=e(\"../search\").Search,c=e(\"../lib/useragent\"),h=e(\"../search_highlight\").SearchHighlight,p=e(\"../commands/multi_select_commands\"),d=e(\"../mode/text\").Mode.prototype.tokenRe;e(\"../multi_select\");var v=function(e){this.ace=e,this.state={},this.marks={},this.$uid=0,this.onChange=this.onChange.bind(this),this.onSelectionChange=this.onSelectionChange.bind(this),this.onBeforeEndOperation=this.onBeforeEndOperation.bind(this),this.ace.on(\"change\",this.onChange),this.ace.on(\"changeSelection\",this.onSelectionChange),this.ace.on(\"beforeEndOperation\",this.onBeforeEndOperation)};v.Pos=function(e,t){if(!(this instanceof E))return new E(e,t);this.line=e,this.ch=t},v.defineOption=function(e,t,n){},v.commands={redo:function(e){e.ace.redo()},undo:function(e){e.ace.undo()},newlineAndIndent:function(e){e.ace.insert(\"\\n\")}},v.keyMap={},v.addClass=v.rmClass=function(){},v.e_stop=v.e_preventDefault=f.stopEvent,v.keyName=function(e){var t=a[e.keyCode]||e.key||\"\";return t.length==1&&(t=t.toUpperCase()),t=f.getModifierString(e).replace(/(^|-)\\w/g,function(e){return e.toUpperCase()})+t,t},v.keyMap[\"default\"]=function(e){return function(t){var n=t.ace.commands.commandKeyBinding[e.toLowerCase()];return n&&t.ace.execCommand(n)!==!1}},v.lookupKey=function cr(e,t,n){typeof t==\"string\"&&(t=v.keyMap[t]);var r=typeof t==\"function\"?t(e):t[e];if(r===!1)return\"nothing\";if(r===\"...\")return\"multi\";if(r!=null&&n(r))return\"handled\";if(t.fallthrough){if(!Array.isArray(t.fallthrough))return cr(e,t.fallthrough,n);for(var i=0;i<t.fallthrough.length;i++){var s=cr(e,t.fallthrough[i],n);if(s)return s}}},v.signal=function(e,t,n){return e._signal(t,n)},v.on=f.addListener,v.off=f.removeListener,v.isWordChar=function(e){return e<\"\"?/^\\w$/.test(e):(d.lastIndex=0,d.test(e))},function(){u.implement(v.prototype,s),this.destroy=function(){this.ace.off(\"change\",this.onChange),this.ace.off(\"changeSelection\",this.onSelectionChange),this.ace.off(\"beforeEndOperation\",this.onBeforeEndOperation),this.removeOverlay()},this.virtualSelectionMode=function(){return this.ace.inVirtualSelectionMode&&this.ace.selection.index},this.onChange=function(e){var t={text:e.action[0]==\"i\"?e.lines:[]},n=this.curOp=this.curOp||{};n.changeHandlers||(n.changeHandlers=this._eventRegistry.change&&this._eventRegistry.change.slice()),n.lastChange?n.lastChange.next=n.lastChange=t:n.lastChange=n.change=t,this.$updateMarkers(e)},this.onSelectionChange=function(){var e=this.curOp=this.curOp||{};e.cursorActivityHandlers||(e.cursorActivityHandlers=this._eventRegistry.cursorActivity&&this._eventRegistry.cursorActivity.slice()),this.curOp.cursorActivity=!0,this.ace.inMultiSelectMode&&this.ace.keyBinding.removeKeyboardHandler(p.keyboardHandler)},this.operation=function(e,t){if(!t&&this.curOp||t&&this.curOp&&this.curOp.force)return e();(t||!this.ace.curOp)&&this.curOp&&this.onBeforeEndOperation();if(!this.ace.curOp){var n=this.ace.prevOp;this.ace.startOperation({command:{name:\"vim\",scrollIntoView:\"cursor\"}})}var r=this.curOp=this.curOp||{};this.curOp.force=t;var i=e();return this.ace.curOp&&this.ace.curOp.command.name==\"vim\"&&(this.state.dialog&&(this.ace.curOp.command.scrollIntoView=!1),this.ace.endOperation(),!r.cursorActivity&&!r.lastChange&&n&&(this.ace.prevOp=n)),(t||!this.ace.curOp)&&this.curOp&&this.onBeforeEndOperation(),i},this.onBeforeEndOperation=function(){var e=this.curOp;e&&(e.change&&this.signal(\"change\",e.change,e),e&&e.cursorActivity&&this.signal(\"cursorActivity\",null,e),this.curOp=null)},this.signal=function(e,t,n){var r=n?n[e+\"Handlers\"]:(this._eventRegistry||{})[e];if(!r)return;r=r.slice();for(var i=0;i<r.length;i++)r[i](this,t)},this.firstLine=function(){return 0},this.lastLine=function(){return this.ace.session.getLength()-1},this.lineCount=function(){return this.ace.session.getLength()},this.setCursor=function(e,t){typeof e==\"object\"&&(t=e.ch,e=e.line),this.ace.inVirtualSelectionMode||this.ace.exitMultiSelectMode(),this.ace.session.unfold({row:e,column:t}),this.ace.selection.moveTo(e,t)},this.getCursor=function(e){var t=this.ace.selection,n=e==\"anchor\"?t.isEmpty()?t.lead:t.anchor:e==\"head\"||!e?t.lead:t.getRange()[e];return g(n)},this.listSelections=function(e){var t=this.ace.multiSelect.rangeList.ranges;return!t.length||this.ace.inVirtualSelectionMode?[{anchor:this.getCursor(\"anchor\"),head:this.getCursor(\"head\")}]:t.map(function(e){return{anchor:this.clipPos(g(e.cursor==e.end?e.start:e.end)),head:this.clipPos(g(e.cursor))}},this)},this.setSelections=function(e,t){var n=this.ace.multiSelect,r=e.map(function(e){var t=m(e.anchor),n=m(e.head),r=i.comparePoints(t,n)<0?new i.fromPoints(t,n):new i.fromPoints(n,t);return r.cursor=i.comparePoints(r.start,n)?r.end:r.start,r});if(this.ace.inVirtualSelectionMode){this.ace.selection.fromOrientedRange(r[0]);return}t?r[t]&&r.push(r.splice(t,1)[0]):r=r.reverse(),n.toSingleRange(r[0].clone());var s=this.ace.session;for(var o=0;o<r.length;o++){var u=s.$clipRangeToDocument(r[o]);n.addRange(u)}},this.setSelection=function(e,t,n){var r=this.ace.selection;r.moveTo(e.line,e.ch),r.selectTo(t.line,t.ch),n&&n.origin==\"*mouse\"&&this.onBeforeEndOperation()},this.somethingSelected=function(e){return!this.ace.selection.isEmpty()},this.clipPos=function(e){var t=this.ace.session.$clipPositionToDocument(e.line,e.ch);return g(t)},this.markText=function(e){return{clear:function(){},find:function(){}}},this.$updateMarkers=function(e){var t=e.action==\"insert\",n=e.start,r=e.end,s=(r.row-n.row)*(t?1:-1),o=(r.column-n.column)*(t?1:-1);t&&(r=n);for(var u in this.marks){var a=this.marks[u],f=i.comparePoints(a,n);if(f<0)continue;if(f===0&&t){if(a.bias!=1){a.bias=-1;continue}f=1}var l=t?f:i.comparePoints(a,r);if(l>0){a.row+=s,a.column+=a.row==r.row?o:0;continue}!t&&l<=0&&(a.row=n.row,a.column=n.column,l===0&&(a.bias=1))}};var e=function(e,t,n,r){this.cm=e,this.id=t,this.row=n,this.column=r,e.marks[this.id]=this};e.prototype.clear=function(){delete this.cm.marks[this.id]},e.prototype.find=function(){return g(this)},this.setBookmark=function(t,n){var r=new e(this,this.$uid++,t.line,t.ch);if(!n||!n.insertLeft)r.$insertRight=!0;return this.marks[r.id]=r,r},this.moveH=function(e,t){if(t==\"char\"){var n=this.ace.selection;n.clearSelection(),n.moveCursorBy(0,e)}},this.findPosV=function(e,t,n,r){if(n==\"page\"){var i=this.ace.renderer,s=i.layerConfig;t*=Math.floor(s.height/s.lineHeight),n=\"line\"}if(n==\"line\"){var o=this.ace.session.documentToScreenPosition(e.line,e.ch);r!=null&&(o.column=r),o.row+=t,o.row=Math.min(Math.max(0,o.row),this.ace.session.getScreenLength()-1);var u=this.ace.session.screenToDocumentPosition(o.row,o.column);return g(u)}debugger},this.charCoords=function(e,t){if(t==\"div\"||!t){var n=this.ace.session.documentToScreenPosition(e.line,e.ch);return{left:n.column,top:n.row}}if(t==\"local\"){var r=this.ace.renderer,n=this.ace.session.documentToScreenPosition(e.line,e.ch),i=r.layerConfig.lineHeight,s=r.layerConfig.characterWidth,o=i*n.row;return{left:n.column*s,top:o,bottom:o+i}}},this.coordsChar=function(e,t){var n=this.ace.renderer;if(t==\"local\"){var r=Math.max(0,Math.floor(e.top/n.lineHeight)),i=Math.max(0,Math.floor(e.left/n.characterWidth)),s=n.session.screenToDocumentPosition(r,i);return g(s)}if(t==\"div\")throw\"not implemented\"},this.getSearchCursor=function(e,t,n){var r=!1,i=!1;e instanceof RegExp&&!e.global&&(r=!e.ignoreCase,e=e.source,i=!0);var s=new l;t.ch==undefined&&(t.ch=Number.MAX_VALUE);var o={row:t.line,column:t.ch},u=this,a=null;return{findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(t){s.setOptions({needle:e,caseSensitive:r,wrap:!1,backwards:t,regExp:i,start:a||o});var n=s.find(u.ace.session);return n&&n.isEmpty()&&u.getLine(n.start.row).length==n.start.column&&(s.$options.start=n,n=s.find(u.ace.session)),a=n,a},from:function(){return a&&g(a.start)},to:function(){return a&&g(a.end)},replace:function(e){a&&(a.end=u.ace.session.doc.replace(a,e))}}},this.scrollTo=function(e,t){var n=this.ace.renderer,r=n.layerConfig,i=r.maxHeight;i-=(n.$size.scrollerHeight-n.lineHeight)*n.$scrollPastEnd,t!=null&&this.ace.session.setScrollTop(Math.max(0,Math.min(t,i))),e!=null&&this.ace.session.setScrollLeft(Math.max(0,Math.min(e,r.width)))},this.scrollInfo=function(){return 0},this.scrollIntoView=function(e,t){if(e){var n=this.ace.renderer,r={top:0,bottom:t};n.scrollCursorIntoView(m(e),n.lineHeight*2/n.$size.scrollerHeight,r)}},this.getLine=function(e){return this.ace.session.getLine(e)},this.getRange=function(e,t){return this.ace.session.getTextRange(new i(e.line,e.ch,t.line,t.ch))},this.replaceRange=function(e,t,n){return n||(n=t),this.ace.session.replace(new i(t.line,t.ch,n.line,n.ch),e)},this.replaceSelections=function(e){var t=this.ace.selection;if(this.ace.inVirtualSelectionMode){this.ace.session.replace(t.getRange(),e[0]||\"\");return}t.inVirtualSelectionMode=!0;var n=t.rangeList.ranges;n.length||(n=[this.ace.multiSelect.getRange()]);for(var r=n.length;r--;)this.ace.session.replace(n[r],e[r]||\"\");t.inVirtualSelectionMode=!1},this.getSelection=function(){return this.ace.getSelectedText()},this.getSelections=function(){return this.listSelections().map(function(e){return this.getRange(e.anchor,e.head)},this)},this.getInputField=function(){return this.ace.textInput.getElement()},this.getWrapperElement=function(){return this.ace.container};var t={indentWithTabs:\"useSoftTabs\",indentUnit:\"tabSize\",tabSize:\"tabSize\",firstLineNumber:\"firstLineNumber\",readOnly:\"readOnly\"};this.setOption=function(e,n){this.state[e]=n;switch(e){case\"indentWithTabs\":e=t[e],n=!n;break;default:e=t[e]}e&&this.ace.setOption(e,n)},this.getOption=function(e,n){var r=t[e];r&&(n=this.ace.getOption(r));switch(e){case\"indentWithTabs\":return e=t[e],!n}return r?n:this.state[e]},this.toggleOverwrite=function(e){return this.state.overwrite=e,this.ace.setOverwrite(e)},this.addOverlay=function(e){if(!this.$searchHighlight||!this.$searchHighlight.session){var t=new h(null,\"ace_highlight-marker\",\"text\"),n=this.ace.session.addDynamicMarker(t);t.id=n.id,t.session=this.ace.session,t.destroy=function(e){t.session.off(\"change\",t.updateOnChange),t.session.off(\"changeEditor\",t.destroy),t.session.removeMarker(t.id),t.session=null},t.updateOnChange=function(e){var n=e.start.row;n==e.end.row?t.cache[n]=undefined:t.cache.splice(n,t.cache.length)},t.session.on(\"changeEditor\",t.destroy),t.session.on(\"change\",t.updateOnChange)}var r=new RegExp(e.query.source,\"gmi\");this.$searchHighlight=e.highlight=t,this.$searchHighlight.setRegexp(r),this.ace.renderer.updateBackMarkers()},this.removeOverlay=function(e){this.$searchHighlight&&this.$searchHighlight.session&&this.$searchHighlight.destroy()},this.getScrollInfo=function(){var e=this.ace.renderer,t=e.layerConfig;return{left:e.scrollLeft,top:e.scrollTop,height:t.maxHeight,width:t.width,clientHeight:t.height,clientWidth:t.width}},this.getValue=function(){return this.ace.getValue()},this.setValue=function(e){return this.ace.setValue(e)},this.getTokenTypeAt=function(e){var t=this.ace.session.getTokenAt(e.line,e.ch);return t&&/comment|string/.test(t.type)?\"string\":\"\"},this.findMatchingBracket=function(e){var t=this.ace.session.findMatchingBracket(m(e));return{to:t&&g(t)}},this.indentLine=function(e,t){t===!0?this.ace.session.indentRows(e,e,\"\t\"):t===!1&&this.ace.session.outdentRows(new i(e,0,e,0))},this.indexFromPos=function(e){return this.ace.session.doc.positionToIndex(m(e))},this.posFromIndex=function(e){return g(this.ace.session.doc.indexToPosition(e))},this.focus=function(e){return this.ace.textInput.focus()},this.blur=function(e){return this.ace.blur()},this.defaultTextHeight=function(e){return this.ace.renderer.layerConfig.lineHeight},this.scanForBracket=function(e,t,n,r){var i=r.bracketRegex.source,s=/paren|text|operator|tag/;if(t==1)var o=this.ace.session.$findClosingBracket(i.slice(1,2),m(e),s);else var o=this.ace.session.$findOpeningBracket(i.slice(-2,-1),{row:e.line,column:e.ch+1},s);return o&&{pos:g(o)}},this.refresh=function(){return this.ace.resize(!0)},this.getMode=function(){return{name:this.getOption(\"mode\")}}}.call(v.prototype);var y=v.StringStream=function(e,t){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0};y.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||undefined},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(e){var t=this.string.charAt(this.pos);if(typeof e==\"string\")var n=t==e;else var n=t&&(e.test?e.test(t):e(t));if(n)return++this.pos,t},eatWhile:function(e){var t=this.pos;while(this.eat(e));return this.pos>t},eatSpace:function(){var e=this.pos;while(/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},backUp:function(e){this.pos-=e},column:function(){throw\"not implemented\"},indentation:function(){throw\"not implemented\"},match:function(e,t,n){if(typeof e!=\"string\"){var s=this.string.slice(this.pos).match(e);return s&&s.index>0?null:(s&&t!==!1&&(this.pos+=s[0].length),s)}var r=function(e){return n?e.toLowerCase():e},i=this.string.substr(this.pos,e.length);if(r(i)==r(e))return t!==!1&&(this.pos+=e.length),!0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}}},v.defineExtension=function(e,t){v.prototype[e]=t},o.importCssString(\".normal-mode .ace_cursor{    border: none;    background-color: rgba(255,0,0,0.5);}.normal-mode .ace_hidden-cursors .ace_cursor{  background-color: transparent;  border: 1px solid red;  opacity: 0.7}.ace_dialog {  position: absolute;  left: 0; right: 0;  background: inherit;  z-index: 15;  padding: .1em .8em;  overflow: hidden;  color: inherit;}.ace_dialog-top {  border-bottom: 1px solid #444;  top: 0;}.ace_dialog-bottom {  border-top: 1px solid #444;  bottom: 0;}.ace_dialog input {  border: none;  outline: none;  background: transparent;  width: 20em;  color: inherit;  font-family: monospace;}\",\"vimMode\"),function(){function e(e,t,n){var r=e.ace.container,i;return i=r.appendChild(document.createElement(\"div\")),n?i.className=\"ace_dialog ace_dialog-bottom\":i.className=\"ace_dialog ace_dialog-top\",typeof t==\"string\"?i.innerHTML=t:i.appendChild(t),i}function t(e,t){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=t}v.defineExtension(\"openDialog\",function(n,r,i){function a(e){if(typeof e==\"string\")f.value=e;else{if(o)return;if(e&&e.type==\"blur\"&&document.activeElement===f)return;u.state.dialog=null,o=!0,s.parentNode.removeChild(s),u.focus(),i.onClose&&i.onClose(s)}}if(this.virtualSelectionMode())return;i||(i={}),t(this,null);var s=e(this,n,i.bottom),o=!1,u=this;this.state.dialog=s;var f=s.getElementsByTagName(\"input\")[0],l;if(f)i.value&&(f.value=i.value,i.selectValueOnOpen!==!1&&f.select()),i.onInput&&v.on(f,\"input\",function(e){i.onInput(e,f.value,a)}),i.onKeyUp&&v.on(f,\"keyup\",function(e){i.onKeyUp(e,f.value,a)}),v.on(f,\"keydown\",function(e){if(i&&i.onKeyDown&&i.onKeyDown(e,f.value,a))return;e.keyCode==13&&r(f.value);if(e.keyCode==27||i.closeOnEnter!==!1&&e.keyCode==13)f.blur(),v.e_stop(e),a()}),i.closeOnBlur!==!1&&v.on(f,\"blur\",a),f.focus();else if(l=s.getElementsByTagName(\"button\")[0])v.on(l,\"click\",function(){a(),u.focus()}),i.closeOnBlur!==!1&&v.on(l,\"blur\",a),l.focus();return a}),v.defineExtension(\"openNotification\",function(n,r){function a(){if(s)return;s=!0,clearTimeout(o),i.parentNode.removeChild(i)}if(this.virtualSelectionMode())return;t(this,a);var i=e(this,n,r&&r.bottom),s=!1,o,u=r&&typeof r.duration!=\"undefined\"?r.duration:5e3;return v.on(i,\"click\",function(e){v.e_preventDefault(e),a()}),u&&(o=setTimeout(a,u)),a})}();var b=[{keys:\"<Left>\",type:\"keyToKey\",toKeys:\"h\"},{keys:\"<Right>\",type:\"keyToKey\",toKeys:\"l\"},{keys:\"<Up>\",type:\"keyToKey\",toKeys:\"k\"},{keys:\"<Down>\",type:\"keyToKey\",toKeys:\"j\"},{keys:\"<Space>\",type:\"keyToKey\",toKeys:\"l\"},{keys:\"<BS>\",type:\"keyToKey\",toKeys:\"h\",context:\"normal\"},{keys:\"<C-Space>\",type:\"keyToKey\",toKeys:\"W\"},{keys:\"<C-BS>\",type:\"keyToKey\",toKeys:\"B\",context:\"normal\"},{keys:\"<S-Space>\",type:\"keyToKey\",toKeys:\"w\"},{keys:\"<S-BS>\",type:\"keyToKey\",toKeys:\"b\",context:\"normal\"},{keys:\"<C-n>\",type:\"keyToKey\",toKeys:\"j\"},{keys:\"<C-p>\",type:\"keyToKey\",toKeys:\"k\"},{keys:\"<C-[>\",type:\"keyToKey\",toKeys:\"<Esc>\"},{keys:\"<C-c>\",type:\"keyToKey\",toKeys:\"<Esc>\"},{keys:\"<C-[>\",type:\"keyToKey\",toKeys:\"<Esc>\",context:\"insert\"},{keys:\"<C-c>\",type:\"keyToKey\",toKeys:\"<Esc>\",context:\"insert\"},{keys:\"s\",type:\"keyToKey\",toKeys:\"cl\",context:\"normal\"},{keys:\"s\",type:\"keyToKey\",toKeys:\"c\",context:\"visual\"},{keys:\"S\",type:\"keyToKey\",toKeys:\"cc\",context:\"normal\"},{keys:\"S\",type:\"keyToKey\",toKeys:\"VdO\",context:\"visual\"},{keys:\"<Home>\",type:\"keyToKey\",toKeys:\"0\"},{keys:\"<End>\",type:\"keyToKey\",toKeys:\"$\"},{keys:\"<PageUp>\",type:\"keyToKey\",toKeys:\"<C-b>\"},{keys:\"<PageDown>\",type:\"keyToKey\",toKeys:\"<C-f>\"},{keys:\"<CR>\",type:\"keyToKey\",toKeys:\"j^\",context:\"normal\"},{keys:\"<Ins>\",type:\"action\",action:\"toggleOverwrite\",context:\"insert\"},{keys:\"H\",type:\"motion\",motion:\"moveToTopLine\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\"M\",type:\"motion\",motion:\"moveToMiddleLine\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\"L\",type:\"motion\",motion:\"moveToBottomLine\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\"h\",type:\"motion\",motion:\"moveByCharacters\",motionArgs:{forward:!1}},{keys:\"l\",type:\"motion\",motion:\"moveByCharacters\",motionArgs:{forward:!0}},{keys:\"j\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!0,linewise:!0}},{keys:\"k\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!1,linewise:!0}},{keys:\"gj\",type:\"motion\",motion:\"moveByDisplayLines\",motionArgs:{forward:!0}},{keys:\"gk\",type:\"motion\",motion:\"moveByDisplayLines\",motionArgs:{forward:!1}},{keys:\"w\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!1}},{keys:\"W\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!1,bigWord:!0}},{keys:\"e\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!0,inclusive:!0}},{keys:\"E\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\"b\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!1}},{keys:\"B\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!1,bigWord:!0}},{keys:\"ge\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!0,inclusive:!0}},{keys:\"gE\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\"{\",type:\"motion\",motion:\"moveByParagraph\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\"}\",type:\"motion\",motion:\"moveByParagraph\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\"<C-f>\",type:\"motion\",motion:\"moveByPage\",motionArgs:{forward:!0}},{keys:\"<C-b>\",type:\"motion\",motion:\"moveByPage\",motionArgs:{forward:!1}},{keys:\"<C-d>\",type:\"motion\",motion:\"moveByScroll\",motionArgs:{forward:!0,explicitRepeat:!0}},{keys:\"<C-u>\",type:\"motion\",motion:\"moveByScroll\",motionArgs:{forward:!1,explicitRepeat:!0}},{keys:\"gg\",type:\"motion\",motion:\"moveToLineOrEdgeOfDocument\",motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\"G\",type:\"motion\",motion:\"moveToLineOrEdgeOfDocument\",motionArgs:{forward:!0,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\"0\",type:\"motion\",motion:\"moveToStartOfLine\"},{keys:\"^\",type:\"motion\",motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\"+\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!0,toFirstChar:!0}},{keys:\"-\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!1,toFirstChar:!0}},{keys:\"_\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!0,toFirstChar:!0,repeatOffset:-1}},{keys:\"$\",type:\"motion\",motion:\"moveToEol\",motionArgs:{inclusive:!0}},{keys:\"%\",type:\"motion\",motion:\"moveToMatchedSymbol\",motionArgs:{inclusive:!0,toJumplist:!0}},{keys:\"f<character>\",type:\"motion\",motion:\"moveToCharacter\",motionArgs:{forward:!0,inclusive:!0}},{keys:\"F<character>\",type:\"motion\",motion:\"moveToCharacter\",motionArgs:{forward:!1}},{keys:\"t<character>\",type:\"motion\",motion:\"moveTillCharacter\",motionArgs:{forward:!0,inclusive:!0}},{keys:\"T<character>\",type:\"motion\",motion:\"moveTillCharacter\",motionArgs:{forward:!1}},{keys:\";\",type:\"motion\",motion:\"repeatLastCharacterSearch\",motionArgs:{forward:!0}},{keys:\",\",type:\"motion\",motion:\"repeatLastCharacterSearch\",motionArgs:{forward:!1}},{keys:\"'<character>\",type:\"motion\",motion:\"goToMark\",motionArgs:{toJumplist:!0,linewise:!0}},{keys:\"`<character>\",type:\"motion\",motion:\"goToMark\",motionArgs:{toJumplist:!0}},{keys:\"]`\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!0}},{keys:\"[`\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!1}},{keys:\"]'\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!0,linewise:!0}},{keys:\"['\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!1,linewise:!0}},{keys:\"]p\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!0,isEdit:!0,matchIndent:!0}},{keys:\"[p\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!1,isEdit:!0,matchIndent:!0}},{keys:\"]<character>\",type:\"motion\",motion:\"moveToSymbol\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\"[<character>\",type:\"motion\",motion:\"moveToSymbol\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\"|\",type:\"motion\",motion:\"moveToColumn\"},{keys:\"o\",type:\"motion\",motion:\"moveToOtherHighlightedEnd\",context:\"visual\"},{keys:\"O\",type:\"motion\",motion:\"moveToOtherHighlightedEnd\",motionArgs:{sameLine:!0},context:\"visual\"},{keys:\"d\",type:\"operator\",operator:\"delete\"},{keys:\"y\",type:\"operator\",operator:\"yank\"},{keys:\"c\",type:\"operator\",operator:\"change\"},{keys:\">\",type:\"operator\",operator:\"indent\",operatorArgs:{indentRight:!0}},{keys:\"<\",type:\"operator\",operator:\"indent\",operatorArgs:{indentRight:!1}},{keys:\"g~\",type:\"operator\",operator:\"changeCase\"},{keys:\"gu\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!0},isEdit:!0},{keys:\"gU\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!1},isEdit:!0},{keys:\"n\",type:\"motion\",motion:\"findNext\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\"N\",type:\"motion\",motion:\"findNext\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\"x\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveByCharacters\",motionArgs:{forward:!0},operatorMotionArgs:{visualLine:!1}},{keys:\"X\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveByCharacters\",motionArgs:{forward:!1},operatorMotionArgs:{visualLine:!0}},{keys:\"D\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveToEol\",motionArgs:{inclusive:!0},context:\"normal\"},{keys:\"D\",type:\"operator\",operator:\"delete\",operatorArgs:{linewise:!0},context:\"visual\"},{keys:\"Y\",type:\"operatorMotion\",operator:\"yank\",motion:\"moveToEol\",motionArgs:{inclusive:!0},context:\"normal\"},{keys:\"Y\",type:\"operator\",operator:\"yank\",operatorArgs:{linewise:!0},context:\"visual\"},{keys:\"C\",type:\"operatorMotion\",operator:\"change\",motion:\"moveToEol\",motionArgs:{inclusive:!0},context:\"normal\"},{keys:\"C\",type:\"operator\",operator:\"change\",operatorArgs:{linewise:!0},context:\"visual\"},{keys:\"~\",type:\"operatorMotion\",operator:\"changeCase\",motion:\"moveByCharacters\",motionArgs:{forward:!0},operatorArgs:{shouldMoveCursor:!0},context:\"normal\"},{keys:\"~\",type:\"operator\",operator:\"changeCase\",context:\"visual\"},{keys:\"<C-w>\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!1},context:\"insert\"},{keys:\"<C-i>\",type:\"action\",action:\"jumpListWalk\",actionArgs:{forward:!0}},{keys:\"<C-o>\",type:\"action\",action:\"jumpListWalk\",actionArgs:{forward:!1}},{keys:\"<C-e>\",type:\"action\",action:\"scroll\",actionArgs:{forward:!0,linewise:!0}},{keys:\"<C-y>\",type:\"action\",action:\"scroll\",actionArgs:{forward:!1,linewise:!0}},{keys:\"a\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"charAfter\"},context:\"normal\"},{keys:\"A\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"eol\"},context:\"normal\"},{keys:\"A\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"endOfSelectedArea\"},context:\"visual\"},{keys:\"i\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"inplace\"},context:\"normal\"},{keys:\"I\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"firstNonBlank\"},context:\"normal\"},{keys:\"I\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"startOfSelectedArea\"},context:\"visual\"},{keys:\"o\",type:\"action\",action:\"newLineAndEnterInsertMode\",isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!0},context:\"normal\"},{keys:\"O\",type:\"action\",action:\"newLineAndEnterInsertMode\",isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!1},context:\"normal\"},{keys:\"v\",type:\"action\",action:\"toggleVisualMode\"},{keys:\"V\",type:\"action\",action:\"toggleVisualMode\",actionArgs:{linewise:!0}},{keys:\"<C-v>\",type:\"action\",action:\"toggleVisualMode\",actionArgs:{blockwise:!0}},{keys:\"<C-q>\",type:\"action\",action:\"toggleVisualMode\",actionArgs:{blockwise:!0}},{keys:\"gv\",type:\"action\",action:\"reselectLastSelection\"},{keys:\"J\",type:\"action\",action:\"joinLines\",isEdit:!0},{keys:\"p\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!0,isEdit:!0}},{keys:\"P\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!1,isEdit:!0}},{keys:\"r<character>\",type:\"action\",action:\"replace\",isEdit:!0},{keys:\"@<character>\",type:\"action\",action:\"replayMacro\"},{keys:\"q<character>\",type:\"action\",action:\"enterMacroRecordMode\"},{keys:\"R\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{replace:!0}},{keys:\"u\",type:\"action\",action:\"undo\",context:\"normal\"},{keys:\"u\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!0},context:\"visual\",isEdit:!0},{keys:\"U\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!1},context:\"visual\",isEdit:!0},{keys:\"<C-r>\",type:\"action\",action:\"redo\"},{keys:\"m<character>\",type:\"action\",action:\"setMark\"},{keys:'\"<character>',type:\"action\",action:\"setRegister\"},{keys:\"zz\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"center\"}},{keys:\"z.\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"center\"},motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\"zt\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"top\"}},{keys:\"z<CR>\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"top\"},motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\"z-\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"bottom\"}},{keys:\"zb\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"bottom\"},motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\".\",type:\"action\",action:\"repeatLastEdit\"},{keys:\"<C-a>\",type:\"action\",action:\"incrementNumberToken\",isEdit:!0,actionArgs:{increase:!0,backtrack:!1}},{keys:\"<C-x>\",type:\"action\",action:\"incrementNumberToken\",isEdit:!0,actionArgs:{increase:!1,backtrack:!1}},{keys:\"<C-t>\",type:\"action\",action:\"indent\",actionArgs:{indentRight:!0},context:\"insert\"},{keys:\"<C-d>\",type:\"action\",action:\"indent\",actionArgs:{indentRight:!1},context:\"insert\"},{keys:\"a<character>\",type:\"motion\",motion:\"textObjectManipulation\"},{keys:\"i<character>\",type:\"motion\",motion:\"textObjectManipulation\",motionArgs:{textObjectInner:!0}},{keys:\"/\",type:\"search\",searchArgs:{forward:!0,querySrc:\"prompt\",toJumplist:!0}},{keys:\"?\",type:\"search\",searchArgs:{forward:!1,querySrc:\"prompt\",toJumplist:!0}},{keys:\"*\",type:\"search\",searchArgs:{forward:!0,querySrc:\"wordUnderCursor\",wholeWordOnly:!0,toJumplist:!0}},{keys:\"#\",type:\"search\",searchArgs:{forward:!1,querySrc:\"wordUnderCursor\",wholeWordOnly:!0,toJumplist:!0}},{keys:\"g*\",type:\"search\",searchArgs:{forward:!0,querySrc:\"wordUnderCursor\",toJumplist:!0}},{keys:\"g#\",type:\"search\",searchArgs:{forward:!1,querySrc:\"wordUnderCursor\",toJumplist:!0}},{keys:\":\",type:\"ex\"}],w=[{name:\"colorscheme\",shortName:\"colo\"},{name:\"map\"},{name:\"imap\",shortName:\"im\"},{name:\"nmap\",shortName:\"nm\"},{name:\"vmap\",shortName:\"vm\"},{name:\"unmap\"},{name:\"write\",shortName:\"w\"},{name:\"undo\",shortName:\"u\"},{name:\"redo\",shortName:\"red\"},{name:\"set\",shortName:\"se\"},{name:\"set\",shortName:\"se\"},{name:\"setlocal\",shortName:\"setl\"},{name:\"setglobal\",shortName:\"setg\"},{name:\"sort\",shortName:\"sor\"},{name:\"substitute\",shortName:\"s\",possiblyAsync:!0},{name:\"nohlsearch\",shortName:\"noh\"},{name:\"yank\",shortName:\"y\"},{name:\"delmarks\",shortName:\"delm\"},{name:\"registers\",shortName:\"reg\",excludeFromCommandHistory:!0},{name:\"global\",shortName:\"g\"}],E=v.Pos,S=function(){return st};v.defineOption(\"vimMode\",!1,function(e,t,n){t&&e.getOption(\"keyMap\")!=\"vim\"?e.setOption(\"keyMap\",\"vim\"):!t&&n!=v.Init&&/^vim/.test(e.getOption(\"keyMap\"))&&e.setOption(\"keyMap\",\"default\")});var L={Shift:\"S\",Ctrl:\"C\",Alt:\"A\",Cmd:\"D\",Mod:\"A\"},A={Enter:\"CR\",Backspace:\"BS\",Delete:\"Del\",Insert:\"Ins\"},_=/[\\d]/,D=[v.isWordChar,function(e){return e&&!v.isWordChar(e)&&!/\\s/.test(e)}],P=[function(e){return/\\S/.test(e)}],B=H(65,26),j=H(97,26),F=H(48,10),I=[].concat(B,j,F,[\"<\",\">\"]),q=[].concat(B,j,F,[\"-\",'\"',\".\",\":\",\"/\"]),J={};K(\"filetype\",undefined,\"string\",[\"ft\"],function(e,t){if(t===undefined)return;if(e===undefined){var n=t.getOption(\"mode\");return n==\"null\"?\"\":n}var n=e==\"\"?\"null\":e;t.setOption(\"mode\",n)});var Y=function(){function s(s,o,u){function l(n){var r=++t%e,o=i[r];o&&o.clear(),i[r]=s.setBookmark(n)}var a=t%e,f=i[a];if(f){var c=f.find();c&&!At(c,o)&&l(o)}else l(o);l(u),n=t,r=t-e+1,r<0&&(r=0)}function o(s,o){t+=o,t>n?t=n:t<r&&(t=r);var u=i[(e+t)%e];if(u&&!u.find()){var a=o>0?1:-1,f,l=s.getCursor();do{t+=a,u=i[(e+t)%e];if(u&&(f=u.find())&&!At(l,f))break}while(t<n&&t>r)}return u}var e=100,t=-1,n=0,r=0,i=new Array(e);return{cachedCursor:undefined,add:s,move:o}},Z=function(e){return e?{changes:e.changes,expectCursorActivityForChange:e.expectCursorActivityForChange}:{changes:[],expectCursorActivityForChange:!1}};et.prototype={exitMacroRecordMode:function(){var e=nt.macroModeState;e.onRecordingDone&&e.onRecordingDone(),e.onRecordingDone=undefined,e.isRecording=!1},enterMacroRecordMode:function(e,t){var n=nt.registerController.getRegister(t);n&&(n.clear(),this.latestRegister=t,e.openDialog&&(this.onRecordingDone=e.openDialog(\"(recording)[\"+t+\"]\",null,{bottom:!0})),this.isRecording=!0)}};var nt,it,st={buildKeyMap:function(){},getRegisterController:function(){return nt.registerController},resetVimGlobalState_:rt,getVimGlobalState_:function(){return nt},maybeInitVimState_:tt,suppressErrorLogging:!1,InsertModeKey:er,map:function(e,t,n){Rn.map(e,t,n)},unmap:function(e,t){Rn.unmap(e,t)},setOption:Q,getOption:G,defineOption:K,defineEx:function(e,t,n){if(!t)t=e;else if(e.indexOf(t)!==0)throw new Error('(Vim.defineEx) \"'+t+'\" is not a prefix of \"'+e+'\", command not registered');qn[e]=n,Rn.commandMap_[t]={name:e,shortName:t,type:\"api\"}},handleKey:function(e,t,n){var r=this.findKey(e,t,n);if(typeof r==\"function\")return r()},findKey:function(e,t,n){function i(){var r=nt.macroModeState;if(r.isRecording){if(t==\"q\")return r.exitMacroRecordMode(),ut(e),!0;n!=\"mapping\"&&$n(r,t)}}function s(){if(t==\"<Esc>\")return ut(e),r.visualMode?$t(e):r.insertMode&&zn(e),!0}function o(n){var r;while(n)r=/<\\w+-.+?>|<\\w+>|./.exec(n),t=r[0],n=n.substring(r.index+t.length),v.Vim.handleKey(e,t,\"mapping\")}function u(){if(s())return!0;var n=r.inputState.keyBuffer=r.inputState.keyBuffer+t,i=t.length==1,o=ht.matchCommand(n,b,r.inputState,\"insert\");while(n.length>1&&o.type!=\"full\"){var n=r.inputState.keyBuffer=n.slice(1),u=ht.matchCommand(n,b,r.inputState,\"insert\");u.type!=\"none\"&&(o=u)}if(o.type==\"none\")return ut(e),!1;if(o.type==\"partial\")return it&&window.clearTimeout(it),it=window.setTimeout(function(){r.insertMode&&r.inputState.keyBuffer&&ut(e)},G(\"insertModeEscKeysTimeout\")),!i;it&&window.clearTimeout(it);if(i){var a=e.listSelections();for(var f=0;f<a.length;f++){var l=a[f].head;e.replaceRange(\"\",St(l,0,-(n.length-1)),l,\"+input\")}nt.macroModeState.lastInsertModeChanges.changes.pop()}return ut(e),o.command}function a(){if(i()||s())return!0;var n=r.inputState.keyBuffer=r.inputState.keyBuffer+t;if(/^[1-9]\\d*$/.test(n))return!0;var o=/^(\\d*)(.*)$/.exec(n);if(!o)return ut(e),!1;var u=r.visualMode?\"visual\":\"normal\",a=ht.matchCommand(o[2]||o[1],b,r.inputState,u);if(a.type==\"none\")return ut(e),!1;if(a.type==\"partial\")return!0;r.inputState.keyBuffer=\"\";var o=/^(\\d*)(.*)$/.exec(n);return o[1]&&o[1]!=\"0\"&&r.inputState.pushRepeatDigit(o[1]),a.command}var r=tt(e),f;return r.insertMode?f=u():f=a(),f===!1?undefined:f===!0?function(){return!0}:function(){if((f.operator||f.isEdit)&&e.getOption(\"readOnly\"))return;return e.operation(function(){e.curOp.isVimOp=!0;try{f.type==\"keyToKey\"?o(f.toKeys):ht.processCommand(e,r,f)}catch(t){throw e.state.vim=undefined,tt(e),v.Vim.suppressErrorLogging||console.log(t),t}return!0})}},handleEx:function(e,t){Rn.processCommand(e,t)},defineMotion:dt,defineAction:bt,defineOperator:gt,mapCommand:Xn,_mapCommand:Wn,defineRegister:ft,exitVisualMode:$t,exitInsertMode:zn};ot.prototype.pushRepeatDigit=function(e){this.operator?this.motionRepeat=this.motionRepeat.concat(e):this.prefixRepeat=this.prefixRepeat.concat(e)},ot.prototype.getRepeat=function(){var e=0;if(this.prefixRepeat.length>0||this.motionRepeat.length>0)e=1,this.prefixRepeat.length>0&&(e*=parseInt(this.prefixRepeat.join(\"\"),10)),this.motionRepeat.length>0&&(e*=parseInt(this.motionRepeat.join(\"\"),10));return e},at.prototype={setText:function(e,t,n){this.keyBuffer=[e||\"\"],this.linewise=!!t,this.blockwise=!!n},pushText:function(e,t){t&&(this.linewise||this.keyBuffer.push(\"\\n\"),this.linewise=!0),this.keyBuffer.push(e)},pushInsertModeChanges:function(e){this.insertModeChanges.push(Z(e))},pushSearchQuery:function(e){this.searchQueries.push(e)},clear:function(){this.keyBuffer=[],this.insertModeChanges=[],this.searchQueries=[],this.linewise=!1},toString:function(){return this.keyBuffer.join(\"\")}},lt.prototype={pushText:function(e,t,n,r,i){r&&n.charAt(n.length-1)!==\"\\n\"&&(n+=\"\\n\");var s=this.isValidRegister(e)?this.getRegister(e):null;if(!s){switch(t){case\"yank\":this.registers[0]=new at(n,r,i);break;case\"delete\":case\"change\":n.indexOf(\"\\n\")==-1?this.registers[\"-\"]=new at(n,r):(this.shiftNumericRegisters_(),this.registers[1]=new at(n,r))}this.unnamedRegister.setText(n,r,i);return}var o=X(e);o?s.pushText(n,r):s.setText(n,r,i),this.unnamedRegister.setText(s.toString(),r)},getRegister:function(e){return this.isValidRegister(e)?(e=e.toLowerCase(),this.registers[e]||(this.registers[e]=new at),this.registers[e]):this.unnamedRegister},isValidRegister:function(e){return e&&$(e,q)},shiftNumericRegisters_:function(){for(var e=9;e>=2;e--)this.registers[e]=this.getRegister(\"\"+(e-1))}},ct.prototype={nextMatch:function(e,t){var n=this.historyBuffer,r=t?-1:1;this.initialPrefix===null&&(this.initialPrefix=e);for(var i=this.iterator+r;t?i>=0:i<n.length;i+=r){var s=n[i];for(var o=0;o<=s.length;o++)if(this.initialPrefix==s.substring(0,o))return this.iterator=i,s}if(i>=n.length)return this.iterator=n.length,this.initialPrefix;if(i<0)return e},pushInput:function(e){var t=this.historyBuffer.indexOf(e);t>-1&&this.historyBuffer.splice(t,1),e.length&&this.historyBuffer.push(e)},reset:function(){this.initialPrefix=null,this.iterator=this.historyBuffer.length}};var ht={matchCommand:function(e,t,n,r){var i=Tt(e,t,r,n);if(!i.full&&!i.partial)return{type:\"none\"};if(!i.full&&i.partial)return{type:\"partial\"};var s;for(var o=0;o<i.full.length;o++){var u=i.full[o];s||(s=u)}if(s.keys.slice(-11)==\"<character>\"){var a=Ct(e);if(/<C-.>/.test(a))return{type:\"none\"};n.selectedCharacter=a}return{type:\"full\",command:s}},processCommand:function(e,t,n){t.inputState.repeatOverride=n.repeatOverride;switch(n.type){case\"motion\":this.processMotion(e,t,n);break;case\"operator\":this.processOperator(e,t,n);break;case\"operatorMotion\":this.processOperatorMotion(e,t,n);break;case\"action\":this.processAction(e,t,n);break;case\"search\":this.processSearch(e,t,n);break;case\"ex\":case\"keyToEx\":this.processEx(e,t,n);break;default:}},processMotion:function(e,t,n){t.inputState.motion=n.motion,t.inputState.motionArgs=Et(n.motionArgs),this.evalInput(e,t)},processOperator:function(e,t,n){var r=t.inputState;if(r.operator){if(r.operator==n.operator){r.motion=\"expandToLine\",r.motionArgs={linewise:!0},this.evalInput(e,t);return}ut(e)}r.operator=n.operator,r.operatorArgs=Et(n.operatorArgs),t.visualMode&&this.evalInput(e,t)},processOperatorMotion:function(e,t,n){var r=t.visualMode,i=Et(n.operatorMotionArgs);i&&r&&i.visualLine&&(t.visualLine=!0),this.processOperator(e,t,n),r||this.processMotion(e,t,n)},processAction:function(e,t,n){var r=t.inputState,i=r.getRepeat(),s=!!i,o=Et(n.actionArgs)||{};r.selectedCharacter&&(o.selectedCharacter=r.selectedCharacter),n.operator&&this.processOperator(e,t,n),n.motion&&this.processMotion(e,t,n),(n.motion||n.operator)&&this.evalInput(e,t),o.repeat=i||1,o.repeatIsExplicit=s,o.registerName=r.registerName,ut(e),t.lastMotion=null,n.isEdit&&this.recordLastEdit(t,r,n),yt[n.action](e,o,t)},processSearch:function(e,t,n){function a(r,i,s){nt.searchHistoryController.pushInput(r),nt.searchHistoryController.reset();try{Mn(e,r,i,s)}catch(o){Cn(e,\"Invalid regex: \"+r),ut(e);return}ht.processMotion(e,t,{type:\"motion\",motion:\"findNext\",motionArgs:{forward:!0,toJumplist:n.searchArgs.toJumplist}})}function f(e){a(e,!0,!0);var t=nt.macroModeState;t.isRecording&&Kn(t,e)}function l(t,n,i){var s=v.keyName(t),o,a;s==\"Up\"||s==\"Down\"?(o=s==\"Up\"?!0:!1,a=t.target?t.target.selectionEnd:0,n=nt.searchHistoryController.nextMatch(n,o)||\"\",i(n),a&&t.target&&(t.target.selectionEnd=t.target.selectionStart=Math.min(a,t.target.value.length))):s!=\"Left\"&&s!=\"Right\"&&s!=\"Ctrl\"&&s!=\"Alt\"&&s!=\"Shift\"&&nt.searchHistoryController.reset();var f;try{f=Mn(e,n,!0,!0)}catch(t){}f?e.scrollIntoView(Pn(e,!r,f),30):(Hn(e),e.scrollTo(u.left,u.top))}function c(t,n,r){var i=v.keyName(t);i==\"Esc\"||i==\"Ctrl-C\"||i==\"Ctrl-[\"||i==\"Backspace\"&&n==\"\"?(nt.searchHistoryController.pushInput(n),nt.searchHistoryController.reset(),Mn(e,o),Hn(e),e.scrollTo(u.left,u.top),v.e_stop(t),ut(e),r(),e.focus()):i==\"Up\"||i==\"Down\"?v.e_stop(t):i==\"Ctrl-U\"&&(v.e_stop(t),r(\"\"))}if(!e.getSearchCursor)return;var r=n.searchArgs.forward,i=n.searchArgs.wholeWordOnly;dn(e).setReversed(!r);var s=r?\"/\":\"?\",o=dn(e).getQuery(),u=e.getScrollInfo();switch(n.searchArgs.querySrc){case\"prompt\":var h=nt.macroModeState;if(h.isPlaying){var p=h.replaySearchQueries.shift();a(p,!0,!1)}else An(e,{onClose:f,prefix:s,desc:Ln,onKeyUp:l,onKeyDown:c});break;case\"wordUnderCursor\":var d=Gt(e,!1,!0,!1,!0),m=!0;d||(d=Gt(e,!1,!0,!1,!1),m=!1);if(!d)return;var p=e.getLine(d.start.line).substring(d.start.ch,d.end.ch);m&&i?p=\"\\\\b\"+p+\"\\\\b\":p=Bt(p),nt.jumpList.cachedCursor=e.getCursor(),e.setCursor(d.start),a(p,!0,!1)}},processEx:function(e,t,n){function r(t){nt.exCommandHistoryController.pushInput(t),nt.exCommandHistoryController.reset(),Rn.processCommand(e,t)}function i(t,n,r){var i=v.keyName(t),s,o;if(i==\"Esc\"||i==\"Ctrl-C\"||i==\"Ctrl-[\"||i==\"Backspace\"&&n==\"\")nt.exCommandHistoryController.pushInput(n),nt.exCommandHistoryController.reset(),v.e_stop(t),ut(e),r(),e.focus();i==\"Up\"||i==\"Down\"?(v.e_stop(t),s=i==\"Up\"?!0:!1,o=t.target?t.target.selectionEnd:0,n=nt.exCommandHistoryController.nextMatch(n,s)||\"\",r(n),o&&t.target&&(t.target.selectionEnd=t.target.selectionStart=Math.min(o,t.target.value.length))):i==\"Ctrl-U\"?(v.e_stop(t),r(\"\")):i!=\"Left\"&&i!=\"Right\"&&i!=\"Ctrl\"&&i!=\"Alt\"&&i!=\"Shift\"&&nt.exCommandHistoryController.reset()}n.type==\"keyToEx\"?Rn.processCommand(e,n.exArgs.input):t.visualMode?An(e,{onClose:r,prefix:\":\",value:\"'<,'>\",onKeyDown:i,selectValueOnOpen:!1}):An(e,{onClose:r,prefix:\":\",onKeyDown:i})},evalInput:function(e,t){var n=t.inputState,r=n.motion,i=n.motionArgs||{},s=n.operator,o=n.operatorArgs||{},u=n.registerName,a=t.sel,f=Lt(t.visualMode?wt(e,a.head):e.getCursor(\"head\")),l=Lt(t.visualMode?wt(e,a.anchor):e.getCursor(\"anchor\")),c=Lt(f),h=Lt(l),p,d,v;s&&this.recordLastEdit(t,n),n.repeatOverride!==undefined?v=n.repeatOverride:v=n.getRepeat();if(v>0&&i.explicitRepeat)i.repeatIsExplicit=!0;else if(i.noRepeat||!i.explicitRepeat&&v===0)v=1,i.repeatIsExplicit=!1;n.selectedCharacter&&(i.selectedCharacter=o.selectedCharacter=n.selectedCharacter),i.repeat=v,ut(e);if(r){var m=pt[r](e,f,i,t);t.lastMotion=pt[r];if(!m)return;if(i.toJumplist){!s&&e.ace.curOp!=null&&(e.ace.curOp.command.scrollIntoView=\"center-animate\");var g=nt.jumpList,y=g.cachedCursor;y?(Yt(e,y,m),delete g.cachedCursor):Yt(e,f,m)}m instanceof Array?(d=m[0],p=m[1]):p=m,p||(p=Lt(f));if(t.visualMode){if(!t.visualBlock||p.ch!==Infinity)p=wt(e,p,t.visualBlock);d&&(d=wt(e,d,!0)),d=d||h,a.anchor=d,a.head=p,Wt(e),an(e,t,\"<\",Ot(d,p)?d:p),an(e,t,\">\",Ot(d,p)?p:d)}else s||(p=wt(e,p),e.setCursor(p.line,p.ch))}if(s){if(o.lastSel){d=h;var b=o.lastSel,w=Math.abs(b.head.line-b.anchor.line),S=Math.abs(b.head.ch-b.anchor.ch);b.visualLine?p=E(h.line+w,h.ch):b.visualBlock?p=E(h.line+w,h.ch+S):b.head.line==b.anchor.line?p=E(h.line,h.ch+S):p=E(h.line+w,h.ch),t.visualMode=!0,t.visualLine=b.visualLine,t.visualBlock=b.visualBlock,a=t.sel={anchor:d,head:p},Wt(e)}else t.visualMode&&(o.lastSel={anchor:Lt(a.anchor),head:Lt(a.head),visualBlock:t.visualBlock,visualLine:t.visualLine});var x,T,N,C,k;if(t.visualMode){x=Mt(a.head,a.anchor),T=_t(a.head,a.anchor),N=t.visualLine||o.linewise,C=t.visualBlock?\"block\":N?\"line\":\"char\",k=Xt(e,{anchor:x,head:T},C);if(N){var L=k.ranges;if(C==\"block\")for(var A=0;A<L.length;A++)L[A].head.ch=Pt(e,L[A].head.line);else C==\"line\"&&(L[0].head=E(L[0].head.line+1,0))}}else{x=Lt(d||h),T=Lt(p||c);if(Ot(T,x)){var O=x;x=T,T=O}N=i.linewise||o.linewise,N?Kt(e,x,T):i.forward&&Jt(e,x,T),C=\"char\";var M=!i.inclusive||N;k=Xt(e,{anchor:x,head:T},C,M)}e.setSelections(k.ranges,k.primary),t.lastMotion=null,o.repeat=v,o.registerName=u,o.linewise=N;var _=mt[s](e,o,k.ranges,h,p);t.visualMode&&$t(e,_!=null),_&&e.setCursor(_)}},recordLastEdit:function(e,t,n){var r=nt.macroModeState;if(r.isPlaying)return;e.lastEditInputState=t,e.lastEditActionCommand=n,r.lastInsertModeChanges.changes=[],r.lastInsertModeChanges.expectCursorActivityForChange=!1}},pt={moveToTopLine:function(e,t,n){var r=jn(e).top+n.repeat-1;return E(r,Qt(e.getLine(r)))},moveToMiddleLine:function(e){var t=jn(e),n=Math.floor((t.top+t.bottom)*.5);return E(n,Qt(e.getLine(n)))},moveToBottomLine:function(e,t,n){var r=jn(e).bottom-n.repeat+1;return E(r,Qt(e.getLine(r)))},expandToLine:function(e,t,n){var r=t;return E(r.line+n.repeat-1,Infinity)},findNext:function(e,t,n){var r=dn(e),i=r.getQuery();if(!i)return;var s=!n.forward;return s=r.isReversed()?!s:s,Dn(e,i),Pn(e,s,i,n.repeat)},goToMark:function(e,t,n,r){var i=Fn(e,r,n.selectedCharacter);return i?n.linewise?{line:i.line,ch:Qt(e.getLine(i.line))}:i:null},moveToOtherHighlightedEnd:function(e,t,n,r){if(r.visualBlock&&n.sameLine){var i=r.sel;return[wt(e,E(i.anchor.line,i.head.ch)),wt(e,E(i.head.line,i.anchor.ch))]}return[r.sel.head,r.sel.anchor]},jumpToMark:function(e,t,n,r){var i=t;for(var s=0;s<n.repeat;s++){var o=i;for(var u in r.marks){if(!U(u))continue;var a=r.marks[u].find(),f=n.forward?Ot(a,o):Ot(o,a);if(f)continue;if(n.linewise&&a.line==o.line)continue;var l=At(o,i),c=n.forward?Dt(o,a,i):Dt(i,a,o);if(l||c)i=a}}return n.linewise&&(i=E(i.line,Qt(e.getLine(i.line)))),i},moveByCharacters:function(e,t,n){var r=t,i=n.repeat,s=n.forward?r.ch+i:r.ch-i;return E(r.line,s)},moveByLines:function(e,t,n,r){var i=t,s=i.ch;switch(r.lastMotion){case this.moveByLines:case this.moveByDisplayLines:case this.moveByScroll:case this.moveToColumn:case this.moveToEol:s=r.lastHPos;break;default:r.lastHPos=s}var o=n.repeat+(n.repeatOffset||0),u=n.forward?i.line+o:i.line-o,a=e.firstLine(),f=e.lastLine();if(u<a&&i.line==a)return this.moveToStartOfLine(e,t,n,r);if(u>f&&i.line==f)return this.moveToEol(e,t,n,r);var l=e.ace.session.getFoldLine(u);return l&&(n.forward?u>l.start.row&&(u=l.end.row+1):u=l.start.row),n.toFirstChar&&(s=Qt(e.getLine(u)),r.lastHPos=s),r.lastHSPos=e.charCoords(E(u,s),\"div\").left,E(u,s)},moveByDisplayLines:function(e,t,n,r){var i=t;switch(r.lastMotion){case this.moveByDisplayLines:case this.moveByScroll:case this.moveByLines:case this.moveToColumn:case this.moveToEol:break;default:r.lastHSPos=e.charCoords(i,\"div\").left}var s=n.repeat,o=e.findPosV(i,n.forward?s:-s,\"line\",r.lastHSPos);if(o.hitSide)if(n.forward)var u=e.charCoords(o,\"div\"),a={top:u.top+8,left:r.lastHSPos},o=e.coordsChar(a,\"div\");else{var f=e.charCoords(E(e.firstLine(),0),\"div\");f.left=r.lastHSPos,o=e.coordsChar(f,\"div\")}return r.lastHPos=o.ch,o},moveByPage:function(e,t,n){var r=t,i=n.repeat;return e.findPosV(r,n.forward?i:-i,\"page\")},moveByParagraph:function(e,t,n){var r=n.forward?1:-1;return ln(e,t,n.repeat,r)},moveByScroll:function(e,t,n,r){var i=e.getScrollInfo(),s=null,o=n.repeat;o||(o=i.clientHeight/(2*e.defaultTextHeight()));var u=e.charCoords(t,\"local\");n.repeat=o;var s=pt.moveByDisplayLines(e,t,n,r);if(!s)return null;var a=e.charCoords(s,\"local\");return e.scrollTo(null,i.top+a.top-u.top),s},moveByWords:function(e,t,n){return sn(e,t,n.repeat,!!n.forward,!!n.wordEnd,!!n.bigWord)},moveTillCharacter:function(e,t,n){var r=n.repeat,i=on(e,r,n.forward,n.selectedCharacter),s=n.forward?-1:1;return Zt(s,n),i?(i.ch+=s,i):null},moveToCharacter:function(e,t,n){var r=n.repeat;return Zt(0,n),on(e,r,n.forward,n.selectedCharacter)||t},moveToSymbol:function(e,t,n){var r=n.repeat;return nn(e,r,n.forward,n.selectedCharacter)||t},moveToColumn:function(e,t,n,r){var i=n.repeat;return r.lastHPos=i-1,r.lastHSPos=e.charCoords(t,\"div\").left,un(e,i)},moveToEol:function(e,t,n,r){var i=t;r.lastHPos=Infinity;var s=E(i.line+n.repeat-1,Infinity),o=e.clipPos(s);return o.ch--,r.lastHSPos=e.charCoords(o,\"div\").left,s},moveToFirstNonWhiteSpaceCharacter:function(e,t){var n=t;return E(n.line,Qt(e.getLine(n.line)))},moveToMatchedSymbol:function(e,t){var n=t,r=n.line,i=n.ch,s=e.getLine(r),o;do{o=s.charAt(i++);if(o&&z(o)){var u=e.getTokenTypeAt(E(r,i));if(u!==\"string\"&&u!==\"comment\")break}}while(o);if(o){var a=e.findMatchingBracket(E(r,i));return a.to}return n},moveToStartOfLine:function(e,t){return E(t.line,0)},moveToLineOrEdgeOfDocument:function(e,t,n){var r=n.forward?e.lastLine():e.firstLine();return n.repeatIsExplicit&&(r=n.repeat-e.getOption(\"firstLineNumber\")),E(r,Qt(e.getLine(r)))},textObjectManipulation:function(e,t,n,r){var i={\"(\":\")\",\")\":\"(\",\"{\":\"}\",\"}\":\"{\",\"[\":\"]\",\"]\":\"[\",\"<\":\">\",\">\":\"<\"},s={\"'\":!0,'\"':!0,\"`\":!0},o=n.selectedCharacter;o==\"b\"?o=\"(\":o==\"B\"&&(o=\"{\");var u=!n.textObjectInner,a;if(i[o])a=cn(e,t,o,u);else if(s[o])a=hn(e,t,o,u);else if(o===\"W\")a=Gt(e,u,!0,!0);else if(o===\"w\")a=Gt(e,u,!0,!1);else{if(o!==\"p\")return null;a=ln(e,t,n.repeat,0,u),n.linewise=!0;if(r.visualMode)r.visualLine||(r.visualLine=!0);else{var f=r.inputState.operatorArgs;f&&(f.linewise=!0),a.end.line--}}return e.state.vim.visualMode?zt(e,a.start,a.end):[a.start,a.end]},repeatLastCharacterSearch:function(e,t,n){var r=nt.lastCharacterSearch,i=n.repeat,s=n.forward===r.forward,o=(r.increment?1:0)*(s?-1:1);e.moveH(-o,\"char\"),n.inclusive=s?!0:!1;var u=on(e,i,s,r.selectedCharacter);return u?(u.ch+=o,u):(e.moveH(o,\"char\"),t)}},mt={change:function(e,t,n){var r,i,s=e.state.vim;nt.macroModeState.lastInsertModeChanges.inVisualBlock=s.visualBlock;if(!s.visualMode){var o=n[0].anchor,u=n[0].head;i=e.getRange(o,u);var a=s.lastEditInputState||{};if(a.motion==\"moveByWords\"&&!V(i)){var f=/\\s+$/.exec(i);f&&a.motionArgs&&a.motionArgs.forward&&(u=St(u,0,-f[0].length),i=i.slice(0,-f[0].length))}var l=new E(o.line-1,Number.MAX_VALUE),c=e.firstLine()==e.lastLine();u.line>e.lastLine()&&t.linewise&&!c?e.replaceRange(\"\",l,u):e.replaceRange(\"\",o,u),t.linewise&&(c||(e.setCursor(l),v.commands.newlineAndIndent(e)),o.ch=Number.MAX_VALUE),r=o}else{i=e.getSelection();var h=vt(\"\",n.length);e.replaceSelections(h),r=Mt(n[0].head,n[0].anchor)}nt.registerController.pushText(t.registerName,\"change\",i,t.linewise,n.length>1),yt.enterInsertMode(e,{head:r},e.state.vim)},\"delete\":function(e,t,n){var r,i,s=e.state.vim;if(!s.visualBlock){var o=n[0].anchor,u=n[0].head;t.linewise&&u.line!=e.firstLine()&&o.line==e.lastLine()&&o.line==u.line-1&&(o.line==e.firstLine()?o.ch=0:o=E(o.line-1,Pt(e,o.line-1))),i=e.getRange(o,u),e.replaceRange(\"\",o,u),r=o,t.linewise&&(r=pt.moveToFirstNonWhiteSpaceCharacter(e,o))}else{i=e.getSelection();var a=vt(\"\",n.length);e.replaceSelections(a),r=n[0].anchor}nt.registerController.pushText(t.registerName,\"delete\",i,t.linewise,s.visualBlock);var f=s.insertMode;return wt(e,r,f)},indent:function(e,t,n){var r=e.state.vim,i=n[0].anchor.line,s=r.visualBlock?n[n.length-1].anchor.line:n[0].head.line,o=r.visualMode?t.repeat:1;t.linewise&&s--;for(var u=i;u<=s;u++)for(var a=0;a<o;a++)e.indentLine(u,t.indentRight);return pt.moveToFirstNonWhiteSpaceCharacter(e,n[0].anchor)},changeCase:function(e,t,n,r,i){var s=e.getSelections(),o=[],u=t.toLower;for(var a=0;a<s.length;a++){var f=s[a],l=\"\";if(u===!0)l=f.toLowerCase();else if(u===!1)l=f.toUpperCase();else for(var c=0;c<f.length;c++){var h=f.charAt(c);l+=X(h)?h.toLowerCase():h.toUpperCase()}o.push(l)}return e.replaceSelections(o),t.shouldMoveCursor?i:!e.state.vim.visualMode&&t.linewise&&n[0].anchor.line+1==n[0].head.line?pt.moveToFirstNonWhiteSpaceCharacter(e,r):t.linewise?r:Mt(n[0].anchor,n[0].head)},yank:function(e,t,n,r){var i=e.state.vim,s=e.getSelection(),o=i.visualMode?Mt(i.sel.anchor,i.sel.head,n[0].head,n[0].anchor):r;return nt.registerController.pushText(t.registerName,\"yank\",s,t.linewise,i.visualBlock),o}},yt={jumpListWalk:function(e,t,n){if(n.visualMode)return;var r=t.repeat,i=t.forward,s=nt.jumpList,o=s.move(e,i?r:-r),u=o?o.find():undefined;u=u?u:e.getCursor(),e.setCursor(u),e.ace.curOp.command.scrollIntoView=\"center-animate\"},scroll:function(e,t,n){if(n.visualMode)return;var r=t.repeat||1,i=e.defaultTextHeight(),s=e.getScrollInfo().top,o=i*r,u=t.forward?s+o:s-o,a=Lt(e.getCursor()),f=e.charCoords(a,\"local\");if(t.forward)u>f.top?(a.line+=(u-f.top)/i,a.line=Math.ceil(a.line),e.setCursor(a),f=e.charCoords(a,\"local\"),e.scrollTo(null,f.top)):e.scrollTo(null,u);else{var l=u+e.getScrollInfo().clientHeight;l<f.bottom?(a.line-=(f.bottom-l)/i,a.line=Math.floor(a.line),e.setCursor(a),f=e.charCoords(a,\"local\"),e.scrollTo(null,f.bottom-e.getScrollInfo().clientHeight)):e.scrollTo(null,u)}},scrollToCursor:function(e,t){var n=e.getCursor().line,r=e.charCoords(E(n,0),\"local\"),i=e.getScrollInfo().clientHeight,s=r.top,o=r.bottom-s;switch(t.position){case\"center\":s=s-i/2+o;break;case\"bottom\":s=s-i+o*1.4;break;case\"top\":s+=o*.4}e.scrollTo(null,s)},replayMacro:function(e,t,n){var r=t.selectedCharacter,i=t.repeat,s=nt.macroModeState;r==\"@\"&&(r=s.latestRegister);while(i--)Vn(e,n,s,r)},enterMacroRecordMode:function(e,t){var n=nt.macroModeState,r=t.selectedCharacter;nt.registerController.isValidRegister(r)&&n.enterMacroRecordMode(e,r)},toggleOverwrite:function(e){e.state.overwrite?(e.toggleOverwrite(!1),e.setOption(\"keyMap\",\"vim-insert\"),v.signal(e,\"vim-mode-change\",{mode:\"insert\"})):(e.toggleOverwrite(!0),e.setOption(\"keyMap\",\"vim-replace\"),v.signal(e,\"vim-mode-change\",{mode:\"replace\"}))},enterInsertMode:function(e,t,n){if(e.getOption(\"readOnly\"))return;n.insertMode=!0,n.insertModeRepeat=t&&t.repeat||1;var r=t?t.insertAt:null,i=n.sel,s=t.head||e.getCursor(\"head\"),o=e.listSelections().length;if(r==\"eol\")s=E(s.line,Pt(e,s.line));else if(r==\"charAfter\")s=St(s,0,1);else if(r==\"firstNonBlank\")s=pt.moveToFirstNonWhiteSpaceCharacter(e,s);else if(r==\"startOfSelectedArea\")n.visualBlock?(s=E(Math.min(i.head.line,i.anchor.line),Math.min(i.head.ch,i.anchor.ch)),o=Math.abs(i.head.line-i.anchor.line)+1):i.head.line<i.anchor.line?s=i.head:s=E(i.anchor.line,0);else if(r==\"endOfSelectedArea\")n.visualBlock?(s=E(Math.min(i.head.line,i.anchor.line),Math.max(i.head.ch+1,i.anchor.ch)),o=Math.abs(i.head.line-i.anchor.line)+1):i.head.line>=i.anchor.line?s=St(i.head,0,1):s=E(i.anchor.line,0);else if(r==\"inplace\"&&n.visualMode)return;e.setOption(\"disableInput\",!1),t&&t.replace?(e.toggleOverwrite(!0),e.setOption(\"keyMap\",\"vim-replace\"),v.signal(e,\"vim-mode-change\",{mode:\"replace\"})):(e.toggleOverwrite(!1),e.setOption(\"keyMap\",\"vim-insert\"),v.signal(e,\"vim-mode-change\",{mode:\"insert\"})),nt.macroModeState.isPlaying||(e.on(\"change\",Qn),v.on(e.getInputField(),\"keydown\",tr)),n.visualMode&&$t(e),It(e,s,o)},toggleVisualMode:function(e,t,n){var r=t.repeat,i=e.getCursor(),s;n.visualMode?n.visualLine^t.linewise||n.visualBlock^t.blockwise?(n.visualLine=!!t.linewise,n.visualBlock=!!t.blockwise,v.signal(e,\"vim-mode-change\",{mode:\"visual\",subMode:n.visualLine?\"linewise\":n.visualBlock?\"blockwise\":\"\"}),Wt(e)):$t(e):(n.visualMode=!0,n.visualLine=!!t.linewise,n.visualBlock=!!t.blockwise,s=wt(e,E(i.line,i.ch+r-1),!0),n.sel={anchor:i,head:s},v.signal(e,\"vim-mode-change\",{mode:\"visual\",subMode:n.visualLine?\"linewise\":n.visualBlock?\"blockwise\":\"\"}),Wt(e),an(e,n,\"<\",Mt(i,s)),an(e,n,\">\",_t(i,s)))},reselectLastSelection:function(e,t,n){var r=n.lastSelection;n.visualMode&&Ut(e,n);if(r){var i=r.anchorMark.find(),s=r.headMark.find();if(!i||!s)return;n.sel={anchor:i,head:s},n.visualMode=!0,n.visualLine=r.visualLine,n.visualBlock=r.visualBlock,Wt(e),an(e,n,\"<\",Mt(i,s)),an(e,n,\">\",_t(i,s)),v.signal(e,\"vim-mode-change\",{mode:\"visual\",subMode:n.visualLine?\"linewise\":n.visualBlock?\"blockwise\":\"\"})}},joinLines:function(e,t,n){var r,i;if(n.visualMode){r=e.getCursor(\"anchor\"),i=e.getCursor(\"head\");if(Ot(i,r)){var s=i;i=r,r=s}i.ch=Pt(e,i.line)-1}else{var o=Math.max(t.repeat,2);r=e.getCursor(),i=wt(e,E(r.line+o-1,Infinity))}var u=0;for(var a=r.line;a<i.line;a++){u=Pt(e,r.line);var s=E(r.line+1,Pt(e,r.line+1)),f=e.getRange(r,s);f=f.replace(/\\n\\s*/g,\" \"),e.replaceRange(f,r,s)}var l=E(r.line,u);n.visualMode&&$t(e,!1),e.setCursor(l)},newLineAndEnterInsertMode:function(e,t,n){n.insertMode=!0;var r=Lt(e.getCursor());if(r.line===e.firstLine()&&!t.after)e.replaceRange(\"\\n\",E(e.firstLine(),0)),e.setCursor(e.firstLine(),0);else{r.line=t.after?r.line:r.line-1,r.ch=Pt(e,r.line),e.setCursor(r);var i=v.commands.newlineAndIndentContinueComment||v.commands.newlineAndIndent;i(e)}this.enterInsertMode(e,{repeat:t.repeat},n)},paste:function(e,t,n){var r=Lt(e.getCursor()),i=nt.registerController.getRegister(t.registerName),s=i.toString();if(!s)return;if(t.matchIndent){var o=e.getOption(\"tabSize\"),u=function(e){var t=e.split(\"\t\").length-1,n=e.split(\" \").length-1;return t*o+n*1},a=e.getLine(e.getCursor().line),f=u(a.match(/^\\s*/)[0]),l=s.replace(/\\n$/,\"\"),c=s!==l,h=u(s.match(/^\\s*/)[0]),s=l.replace(/^\\s*/gm,function(t){var n=f+(u(t)-h);if(n<0)return\"\";if(e.getOption(\"indentWithTabs\")){var r=Math.floor(n/o);return Array(r+1).join(\"\t\")}return Array(n+1).join(\" \")});s+=c?\"\\n\":\"\"}if(t.repeat>1)var s=Array(t.repeat+1).join(s);var p=i.linewise,d=i.blockwise;if(p&&!d)n.visualMode?s=n.visualLine?s.slice(0,-1):\"\\n\"+s.slice(0,s.length-1)+\"\\n\":t.after?(s=\"\\n\"+s.slice(0,s.length-1),r.ch=Pt(e,r.line)):r.ch=0;else{if(d){s=s.split(\"\\n\");for(var v=0;v<s.length;v++)s[v]=s[v]==\"\"?\" \":s[v]}r.ch+=t.after?1:0}var m,g;if(n.visualMode){n.lastPastedText=s;var y,b=Rt(e,n),w=b[0],S=b[1],x=e.getSelection(),T=e.listSelections(),N=(new Array(T.length)).join(\"1\").split(\"1\");n.lastSelection&&(y=n.lastSelection.headMark.find()),nt.registerController.unnamedRegister.setText(x),d?(e.replaceSelections(N),S=E(w.line+s.length-1,w.ch),e.setCursor(w),Ft(e,S),e.replaceSelections(s),m=w):n.visualBlock?(e.replaceSelections(N),e.setCursor(w),e.replaceRange(s,w,w),m=w):(e.replaceRange(s,w,S),m=e.posFromIndex(e.indexFromPos(w)+s.length-1)),y&&(n.lastSelection.headMark=e.setBookmark(y)),p&&(m.ch=0)}else if(d){e.setCursor(r);for(var v=0;v<s.length;v++){var C=r.line+v;C>e.lastLine()&&e.replaceRange(\"\\n\",E(C,0));var k=Pt(e,C);k<r.ch&&jt(e,C,r.ch)}e.setCursor(r),Ft(e,E(r.line+s.length-1,r.ch)),e.replaceSelections(s),m=r}else e.replaceRange(s,r),p&&t.after?m=E(r.line+1,Qt(e.getLine(r.line+1))):p&&!t.after?m=E(r.line,Qt(e.getLine(r.line))):!p&&t.after?(g=e.indexFromPos(r),m=e.posFromIndex(g+s.length-1)):(g=e.indexFromPos(r),m=e.posFromIndex(g+s.length));n.visualMode&&$t(e,!1),e.setCursor(m)},undo:function(e,t){e.operation(function(){kt(e,v.commands.undo,t.repeat)(),e.setCursor(e.getCursor(\"anchor\"))})},redo:function(e,t){kt(e,v.commands.redo,t.repeat)()},setRegister:function(e,t,n){n.inputState.registerName=t.selectedCharacter},setMark:function(e,t,n){var r=t.selectedCharacter;an(e,n,r,e.getCursor())},replace:function(e,t,n){var r=t.selectedCharacter,i=e.getCursor(),s,o,u=e.listSelections();if(n.visualMode)i=e.getCursor(\"start\"),o=e.getCursor(\"end\");else{var a=e.getLine(i.line);s=i.ch+t.repeat,s>a.length&&(s=a.length),o=E(i.line,s)}if(r==\"\\n\")n.visualMode||e.replaceRange(\"\",i,o),(v.commands.newlineAndIndentContinueComment||v.commands.newlineAndIndent)(e);else{var f=e.getRange(i,o);f=f.replace(/[^\\n]/g,r);if(n.visualBlock){var l=(new Array(e.getOption(\"tabSize\")+1)).join(\" \");f=e.getSelection(),f=f.replace(/\\t/g,l).replace(/[^\\n]/g,r).split(\"\\n\"),e.replaceSelections(f)}else e.replaceRange(f,i,o);n.visualMode?(i=Ot(u[0].anchor,u[0].head)?u[0].anchor:u[0].head,e.setCursor(i),$t(e,!1)):e.setCursor(St(o,0,-1))}},incrementNumberToken:function(e,t){var n=e.getCursor(),r=e.getLine(n.line),i=/(-?)(?:(0x)([\\da-f]+)|(0b|0|)(\\d+))/gi,s,o,u,a;while((s=i.exec(r))!==null){o=s.index,u=o+s[0].length;if(n.ch<u)break}if(!t.backtrack&&u<=n.ch)return;if(!s)return;var f=s[2]||s[4],l=s[3]||s[5],c=t.increase?1:-1,h={\"0b\":2,0:8,\"\":10,\"0x\":16}[f.toLowerCase()],p=parseInt(s[1]+l,h)+c*t.repeat;a=p.toString(h);var d=f?(new Array(l.length-a.length+1+s[1].length)).join(\"0\"):\"\";a.charAt(0)===\"-\"?a=\"-\"+f+d+a.substr(1):a=f+d+a;var v=E(n.line,o),m=E(n.line,u);e.replaceRange(a,v,m),e.setCursor(E(n.line,o+a.length-1))},repeatLastEdit:function(e,t,n){var r=n.lastEditInputState;if(!r)return;var i=t.repeat;i&&t.repeatIsExplicit?n.lastEditInputState.repeatOverride=i:i=n.lastEditInputState.repeatOverride||i,nr(e,n,i,!1)},indent:function(e,t){e.indentLine(e.getCursor().line,t.indentRight)},exitInsertMode:zn},en={\"(\":\"bracket\",\")\":\"bracket\",\"{\":\"bracket\",\"}\":\"bracket\",\"[\":\"section\",\"]\":\"section\",\"*\":\"comment\",\"/\":\"comment\",m:\"method\",M:\"method\",\"#\":\"preprocess\"},tn={bracket:{isComplete:function(e){if(e.nextCh===e.symb){e.depth++;if(e.depth>=1)return!0}else e.nextCh===e.reverseSymb&&e.depth--;return!1}},section:{init:function(e){e.curMoveThrough=!0,e.symb=(e.forward?\"]\":\"[\")===e.symb?\"{\":\"}\"},isComplete:function(e){return e.index===0&&e.nextCh===e.symb}},comment:{isComplete:function(e){var t=e.lastCh===\"*\"&&e.nextCh===\"/\";return e.lastCh=e.nextCh,t}},method:{init:function(e){e.symb=e.symb===\"m\"?\"{\":\"}\",e.reverseSymb=e.symb===\"{\"?\"}\":\"{\"},isComplete:function(e){return e.nextCh===e.symb?!0:!1}},preprocess:{init:function(e){e.index=0},isComplete:function(e){if(e.nextCh===\"#\"){var t=e.lineText.match(/#(\\w+)/)[1];if(t===\"endif\"){if(e.forward&&e.depth===0)return!0;e.depth++}else if(t===\"if\"){if(!e.forward&&e.depth===0)return!0;e.depth--}if(t===\"else\"&&e.depth===0)return!0}return!1}}};K(\"pcre\",!0,\"boolean\"),pn.prototype={getQuery:function(){return nt.query},setQuery:function(e){nt.query=e},getOverlay:function(){return this.searchOverlay},setOverlay:function(e){this.searchOverlay=e},isReversed:function(){return nt.isReversed},setReversed:function(e){nt.isReversed=e},getScrollbarAnnotate:function(){return this.annotate},setScrollbarAnnotate:function(e){this.annotate=e}};var En={\"\\\\n\":\"\\n\",\"\\\\r\":\"\\r\",\"\\\\t\":\"\t\"},xn={\"\\\\/\":\"/\",\"\\\\\\\\\":\"\\\\\",\"\\\\n\":\"\\n\",\"\\\\r\":\"\\r\",\"\\\\t\":\"\t\"},Ln=\"(Javascript regexp)\",In=function(){this.buildCommandMap_()};In.prototype={processCommand:function(e,t,n){var r=this;e.operation(function(){e.curOp.isVimOp=!0,r._processCommand(e,t,n)})},_processCommand:function(e,t,n){var r=e.state.vim,i=nt.registerController.getRegister(\":\"),s=i.toString();r.visualMode&&$t(e);var o=new v.StringStream(t);i.setText(t);var u=n||{};u.input=t;try{this.parseInput_(e,o,u)}catch(a){throw Cn(e,a),a}var f,l;if(!u.commandName)u.line!==undefined&&(l=\"move\");else{f=this.matchCommand_(u.commandName);if(f){l=f.name,f.excludeFromCommandHistory&&i.setText(s),this.parseCommandArgs_(o,u,f);if(f.type==\"exToKey\"){for(var c=0;c<f.toKeys.length;c++)v.Vim.handleKey(e,f.toKeys[c],\"mapping\");return}if(f.type==\"exToEx\"){this.processCommand(e,f.toInput);return}}}if(!l){Cn(e,'Not an editor command \":'+t+'\"');return}try{qn[l](e,u),(!f||!f.possiblyAsync)&&u.callback&&u.callback()}catch(a){throw Cn(e,a),a}},parseInput_:function(e,t,n){t.eatWhile(\":\"),t.eat(\"%\")?(n.line=e.firstLine(),n.lineEnd=e.lastLine()):(n.line=this.parseLineSpec_(e,t),n.line!==undefined&&t.eat(\",\")&&(n.lineEnd=this.parseLineSpec_(e,t)));var r=t.match(/^(\\w+)/);return r?n.commandName=r[1]:n.commandName=t.match(/.*/)[0],n},parseLineSpec_:function(e,t){var n=t.match(/^(\\d+)/);if(n)return parseInt(n[1],10)-1;switch(t.next()){case\".\":return this.parseLineSpecOffset_(t,e.getCursor().line);case\"$\":return this.parseLineSpecOffset_(t,e.lastLine());case\"'\":var r=t.next(),i=Fn(e,e.state.vim,r);if(!i)throw new Error(\"Mark not set\");return this.parseLineSpecOffset_(t,i.line);case\"-\":case\"+\":return t.backUp(1),this.parseLineSpecOffset_(t,e.getCursor().line);default:return t.backUp(1),undefined}},parseLineSpecOffset_:function(e,t){var n=e.match(/^([+-])?(\\d+)/);if(n){var r=parseInt(n[2],10);n[1]==\"-\"?t-=r:t+=r}return t},parseCommandArgs_:function(e,t,n){if(e.eol())return;t.argString=e.match(/.*/)[0];var r=n.argDelimiter||/\\s+/,i=Ht(t.argString).split(r);i.length&&i[0]&&(t.args=i)},matchCommand_:function(e){for(var t=e.length;t>0;t--){var n=e.substring(0,t);if(this.commandMap_[n]){var r=this.commandMap_[n];if(r.name.indexOf(e)===0)return r}}return null},buildCommandMap_:function(){this.commandMap_={};for(var e=0;e<w.length;e++){var t=w[e],n=t.shortName||t.name;this.commandMap_[n]=t}},map:function(e,t,n){if(e!=\":\"&&e.charAt(0)==\":\"){if(n)throw Error(\"Mode not supported for ex mappings\");var r=e.substring(1);t!=\":\"&&t.charAt(0)==\":\"?this.commandMap_[r]={name:r,type:\"exToEx\",toInput:t.substring(1),user:!0}:this.commandMap_[r]={name:r,type:\"exToKey\",toKeys:t,user:!0}}else if(t!=\":\"&&t.charAt(0)==\":\"){var i={keys:e,type:\"keyToEx\",exArgs:{input:t.substring(1)}};n&&(i.context=n),b.unshift(i)}else{var i={keys:e,type:\"keyToKey\",toKeys:t};n&&(i.context=n),b.unshift(i)}},unmap:function(e,t){if(e!=\":\"&&e.charAt(0)==\":\"){if(t)throw Error(\"Mode not supported for ex mappings\");var n=e.substring(1);if(this.commandMap_[n]&&this.commandMap_[n].user){delete this.commandMap_[n];return}}else{var r=e;for(var i=0;i<b.length;i++)if(r==b[i].keys&&b[i].context===t){b.splice(i,1);return}}}};var qn={colorscheme:function(e,t){if(!t.args||t.args.length<1){Cn(e,e.getOption(\"theme\"));return}e.setOption(\"theme\",t.args[0])},map:function(e,t,n){var r=t.args;if(!r||r.length<2){e&&Cn(e,\"Invalid mapping: \"+t.input);return}Rn.map(r[0],r[1],n)},imap:function(e,t){this.map(e,t,\"insert\")},nmap:function(e,t){this.map(e,t,\"normal\")},vmap:function(e,t){this.map(e,t,\"visual\")},unmap:function(e,t,n){var r=t.args;if(!r||r.length<1){e&&Cn(e,\"No such mapping: \"+t.input);return}Rn.unmap(r[0],n)},move:function(e,t){ht.processCommand(e,e.state.vim,{type:\"motion\",motion:\"moveToLineOrEdgeOfDocument\",motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0},repeatOverride:t.line+1})},set:function(e,t){var n=t.args,r=t.setCfg||{};if(!n||n.length<1){e&&Cn(e,\"Invalid mapping: \"+t.input);return}var i=n[0].split(\"=\"),s=i[0],o=i[1],u=!1;if(s.charAt(s.length-1)==\"?\"){if(o)throw Error(\"Trailing characters: \"+t.argString);s=s.substring(0,s.length-1),u=!0}o===undefined&&s.substring(0,2)==\"no\"&&(s=s.substring(2),o=!1);var a=J[s]&&J[s].type==\"boolean\";a&&o==undefined&&(o=!0);if(!a&&o===undefined||u){var f=G(s,e,r);f instanceof Error?Cn(e,f.message):f===!0||f===!1?Cn(e,\" \"+(f?\"\":\"no\")+s):Cn(e,\"  \"+s+\"=\"+f)}else{var l=Q(s,o,e,r);l instanceof Error&&Cn(e,l.message)}},setlocal:function(e,t){t.setCfg={scope:\"local\"},this.set(e,t)},setglobal:function(e,t){t.setCfg={scope:\"global\"},this.set(e,t)},registers:function(e,t){var n=t.args,r=nt.registerController.registers,i=\"----------Registers----------<br><br>\";if(!n)for(var s in r){var o=r[s].toString();o.length&&(i+='\"'+s+\"    \"+o+\"<br>\")}else{var s;n=n.join(\"\");for(var u=0;u<n.length;u++){s=n.charAt(u);if(!nt.registerController.isValidRegister(s))continue;var a=r[s]||new at;i+='\"'+s+\"    \"+a.toString()+\"<br>\"}}Cn(e,i)},sort:function(e,t){function u(){if(t.argString){var e=new v.StringStream(t.argString);e.eat(\"!\")&&(n=!0);if(e.eol())return;if(!e.eatSpace())return\"Invalid arguments\";var u=e.match(/([dinuox]+)?\\s*(\\/.+\\/)?\\s*/);if(!u&&!e.eol())return\"Invalid arguments\";if(u[1]){r=u[1].indexOf(\"i\")!=-1,i=u[1].indexOf(\"u\")!=-1;var a=u[1].indexOf(\"d\")!=-1||u[1].indexOf(\"n\")!=-1&&1,f=u[1].indexOf(\"x\")!=-1&&1,l=u[1].indexOf(\"o\")!=-1&&1;if(a+f+l>1)return\"Invalid arguments\";s=a&&\"decimal\"||f&&\"hex\"||l&&\"octal\"}u[2]&&(o=new RegExp(u[2].substr(1,u[2].length-2),r?\"i\":\"\"))}}function S(e,t){if(n){var i;i=e,e=t,t=i}r&&(e=e.toLowerCase(),t=t.toLowerCase());var o=s&&d.exec(e),u=s&&d.exec(t);return o?(o=parseInt((o[1]+o[2]).toLowerCase(),m),u=parseInt((u[1]+u[2]).toLowerCase(),m),o-u):e<t?-1:1}function x(e,t){if(n){var i;i=e,e=t,t=i}return r&&(e[0]=e[0].toLowerCase(),t[0]=t[0].toLowerCase()),e[0]<t[0]?-1:1}var n,r,i,s,o,a=u();if(a){Cn(e,a+\": \"+t.argString);return}var f=t.line||e.firstLine(),l=t.lineEnd||t.line||e.lastLine();if(f==l)return;var c=E(f,0),h=E(l,Pt(e,l)),p=e.getRange(c,h).split(\"\\n\"),d=o?o:s==\"decimal\"?/(-?)([\\d]+)/:s==\"hex\"?/(-?)(?:0x)?([0-9a-f]+)/i:s==\"octal\"?/([0-7]+)/:null,m=s==\"decimal\"?10:s==\"hex\"?16:s==\"octal\"?8:null,g=[],y=[];if(s||o)for(var b=0;b<p.length;b++){var w=o?p[b].match(o):null;w&&w[0]!=\"\"?g.push(w):!o&&d.exec(p[b])?g.push(p[b]):y.push(p[b])}else y=p;g.sort(o?x:S);if(o)for(var b=0;b<g.length;b++)g[b]=g[b].input;else s||y.sort(S);p=n?g.concat(y):y.concat(g);if(i){var T=p,N;p=[];for(var b=0;b<T.length;b++)T[b]!=N&&p.push(T[b]),N=T[b]}e.replaceRange(p.join(\"\\n\"),c,h)},global:function(e,t){var n=t.argString;if(!n){Cn(e,\"Regular Expression missing from global\");return}var r=t.line!==undefined?t.line:e.firstLine(),i=t.lineEnd||t.line||e.lastLine(),s=mn(n),o=n,u;s.length&&(o=s[0],u=s.slice(1,s.length).join(\"/\"));if(o)try{Mn(e,o,!0,!0)}catch(a){Cn(e,\"Invalid regex: \"+o);return}var f=dn(e).getQuery(),l=[],c=\"\";for(var h=r;h<=i;h++){var p=f.test(e.getLine(h));p&&(l.push(h+1),c+=e.getLine(h)+\"<br>\")}if(!u){Cn(e,c);return}var d=0,v=function(){if(d<l.length){var t=l[d]+u;Rn.processCommand(e,t,{callback:v})}d++};v()},substitute:function(e,t){if(!e.getSearchCursor)throw new Error(\"Search feature not available. Requires searchcursor.js or any other getSearchCursor implementation.\");var n=t.argString,r=n?yn(n,n[0]):[],i,s=\"\",o,u,a,f=!1,l=!1;if(r.length)i=r[0],s=r[1],i&&i[i.length-1]===\"$\"&&(i=i.slice(0,i.length-1)+\"\\\\n\",s=s?s+\"\\n\":\"\\n\"),s!==undefined&&(G(\"pcre\")?s=Tn(s):s=Sn(s),nt.lastSubstituteReplacePart=s),o=r[2]?r[2].split(\" \"):[];else if(n&&n.length){Cn(e,\"Substitutions should be of the form :s/pattern/replace/\");return}o&&(u=o[0],a=parseInt(o[1]),u&&(u.indexOf(\"c\")!=-1&&(f=!0,u.replace(\"c\",\"\")),u.indexOf(\"g\")!=-1&&(l=!0,u.replace(\"g\",\"\")),i=i.replace(/\\//g,\"\\\\/\")+\"/\"+u));if(i)try{Mn(e,i,!0,!0)}catch(c){Cn(e,\"Invalid regex: \"+i);return}s=s||nt.lastSubstituteReplacePart;if(s===undefined){Cn(e,\"No previous substitute regular expression\");return}var h=dn(e),p=h.getQuery(),d=t.line!==undefined?t.line:e.getCursor().line,v=t.lineEnd||d;d==e.firstLine()&&v==e.lastLine()&&(v=Infinity),a&&(d=v,v=d+a-1);var m=wt(e,E(d,0)),g=e.getSearchCursor(p,m);Un(e,f,l,d,v,g,p,s,t.callback)},redo:v.commands.redo,undo:v.commands.undo,write:function(e){v.commands.save?v.commands.save(e):e.save&&e.save()},nohlsearch:function(e){Hn(e)},yank:function(e){var t=Lt(e.getCursor()),n=t.line,r=e.getLine(n);nt.registerController.pushText(\"0\",\"yank\",r,!0,!0)},delmarks:function(e,t){if(!t.argString||!Ht(t.argString)){Cn(e,\"Argument required\");return}var n=e.state.vim,r=new v.StringStream(Ht(t.argString));while(!r.eol()){r.eatSpace();var i=r.pos;if(!r.match(/[a-zA-Z]/,!1)){Cn(e,\"Invalid argument: \"+t.argString.substring(i));return}var s=r.next();if(r.match(\"-\",!0)){if(!r.match(/[a-zA-Z]/,!1)){Cn(e,\"Invalid argument: \"+t.argString.substring(i));return}var o=s,u=r.next();if(!(U(o)&&U(u)||X(o)&&X(u))){Cn(e,\"Invalid argument: \"+o+\"-\");return}var a=o.charCodeAt(0),f=u.charCodeAt(0);if(a>=f){Cn(e,\"Invalid argument: \"+t.argString.substring(i));return}for(var l=0;l<=f-a;l++){var c=String.fromCharCode(a+l);delete n.marks[c]}}else delete n.marks[s]}}},Rn=new In;v.keyMap.vim={attach:C,detach:N,call:k},K(\"insertModeEscKeysTimeout\",200,\"number\"),v.keyMap[\"vim-insert\"]={\"Ctrl-N\":\"autocomplete\",\"Ctrl-P\":\"autocomplete\",Enter:function(e){var t=v.commands.newlineAndIndentContinueComment||v.commands.newlineAndIndent;t(e)},fallthrough:[\"default\"],attach:C,detach:N,call:k},v.keyMap[\"vim-replace\"]={Backspace:\"goCharLeft\",fallthrough:[\"vim-insert\"],attach:C,detach:N,call:k},rt(),v.Vim=S(),S=v.Vim;var ir={\"return\":\"CR\",backspace:\"BS\",\"delete\":\"Del\",esc:\"Esc\",left:\"Left\",right:\"Right\",up:\"Up\",down:\"Down\",space:\"Space\",home:\"Home\",end:\"End\",pageup:\"PageUp\",pagedown:\"PageDown\",enter:\"CR\"},or=S.handleKey.bind(S);S.handleKey=function(e,t,n){return e.operation(function(){return or(e,t,n)},!0)},t.CodeMirror=v;var fr=S.maybeInitVimState_;t.handler={$id:\"ace/keyboard/vim\",drawCursor:function(e,t,n,r,s){var u=this.state.vim||{},a=n.characterWidth,f=n.lineHeight,l=t.top,c=t.left;if(!u.insertMode){var h=r.cursor?i.comparePoints(r.cursor,r.start)<=0:s.selection.isBackwards()||s.selection.isEmpty();!h&&c>a&&(c-=a)}!u.insertMode&&u.status&&(f/=2,l+=f),o.translate(e,c,l),o.setStyle(e.style,\"width\",a+\"px\"),o.setStyle(e.style,\"height\",f+\"px\")},handleKeyboard:function(e,t,n,r,i){var s=e.editor,o=s.state.cm,u=fr(o);if(r==-1)return;u.insertMode||(t==-1?(n.charCodeAt(0)>255&&e.inputKey&&(n=e.inputKey,n&&e.inputHash==4&&(n=n.toUpperCase())),e.inputChar=n):t==4||t==0?e.inputKey==n&&e.inputHash==t&&e.inputChar?(n=e.inputChar,t=-1):(e.inputChar=null,e.inputKey=n,e.inputHash=t):e.inputChar=e.inputKey=null);if(n==\"c\"&&t==1&&!c.isMac&&s.getCopyText())return s.once(\"copy\",function(){s.selection.clearSelection()}),{command:\"null\",passEvent:!0};if(n==\"esc\"&&!u.insertMode&&!u.visualMode&&!o.ace.inMultiSelectMode){var a=dn(o),f=a.getOverlay();f&&o.removeOverlay(f)}if(t==-1||t&1||t===0&&n.length>1){var l=u.insertMode,h=sr(t,n,i||{});u.status==null&&(u.status=\"\");var p=ar(o,h,\"user\");u=fr(o),p&&u.status!=null?u.status+=h:u.status==null&&(u.status=\"\"),o._signal(\"changeStatus\");if(!p&&(t!=-1||l))return;return{command:\"null\",passEvent:!p}}},attach:function(e){function n(){var n=fr(t).insertMode;t.ace.renderer.setStyle(\"normal-mode\",!n),e.textInput.setCommandMode(!n),e.renderer.$keepTextAreaAtCursor=n,e.renderer.$blockCursor=!n}e.state||(e.state={});var t=new v(e);e.state.cm=t,e.$vimModeHandler=this,v.keyMap.vim.attach(t),fr(t).status=null,t.on(\"vim-command-done\",function(){if(t.virtualSelectionMode())return;fr(t).status=null,t.ace._signal(\"changeStatus\"),t.ace.session.markUndoGroup()}),t.on(\"changeStatus\",function(){t.ace.renderer.updateCursor(),t.ace._signal(\"changeStatus\")}),t.on(\"vim-mode-change\",function(){if(t.virtualSelectionMode())return;n(),t._signal(\"changeStatus\")}),n(),e.renderer.$cursorLayer.drawCursor=this.drawCursor.bind(t)},detach:function(e){var t=e.state.cm;v.keyMap.vim.detach(t),t.destroy(),e.state.cm=null,e.$vimModeHandler=null,e.renderer.$cursorLayer.drawCursor=null,e.renderer.setStyle(\"normal-mode\",!1),e.textInput.setCommandMode(!1),e.renderer.$keepTextAreaAtCursor=!0},getStatusText:function(e){var t=e.state.cm,n=fr(t);if(n.insertMode)return\"INSERT\";var r=\"\";return n.visualMode&&(r+=\"VISUAL\",n.visualLine&&(r+=\" LINE\"),n.visualBlock&&(r+=\" BLOCK\")),n.status&&(r+=(r?\" \":\"\")+n.status),r}},S.defineOption({name:\"wrap\",set:function(e,t){t&&t.ace.setOption(\"wrap\",e)},type:\"boolean\"},!1),S.defineEx(\"write\",\"w\",function(){console.log(\":write is not implemented\")}),b.push({keys:\"zc\",type:\"action\",action:\"fold\",actionArgs:{open:!1}},{keys:\"zC\",type:\"action\",action:\"fold\",actionArgs:{open:!1,all:!0}},{keys:\"zo\",type:\"action\",action:\"fold\",actionArgs:{open:!0}},{keys:\"zO\",type:\"action\",action:\"fold\",actionArgs:{open:!0,all:!0}},{keys:\"za\",type:\"action\",action:\"fold\",actionArgs:{toggle:!0}},{keys:\"zA\",type:\"action\",action:\"fold\",actionArgs:{toggle:!0,all:!0}},{keys:\"zf\",type:\"action\",action:\"fold\",actionArgs:{open:!0,all:!0}},{keys:\"zd\",type:\"action\",action:\"fold\",actionArgs:{open:!0,all:!0}},{keys:\"<C-A-k>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorAbove\"}},{keys:\"<C-A-j>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorBelow\"}},{keys:\"<C-A-S-k>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorAboveSkipCurrent\"}},{keys:\"<C-A-S-j>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorBelowSkipCurrent\"}},{keys:\"<C-A-h>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectMoreBefore\"}},{keys:\"<C-A-l>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectMoreAfter\"}},{keys:\"<C-A-S-h>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectNextBefore\"}},{keys:\"<C-A-S-l>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectNextAfter\"}}),yt.aceCommand=function(e,t,n){e.vimCmd=t,e.ace.inVirtualSelectionMode?e.ace.on(\"beforeEndOperation\",lr):lr(null,e.ace)},yt.fold=function(e,t,n){e.ace.execCommand([\"toggleFoldWidget\",\"toggleFoldWidget\",\"foldOther\",\"unfoldall\"][(t.all?2:0)+(t.open?1:0)])},t.handler.defaultKeymap=b,t.handler.actions=yt,t.Vim=S,S.map(\"Y\",\"yy\",\"normal\")});                (function() {\n                    ace.require([\"ace/keyboard/vim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-abap.js",
    "content": "ace.define(\"ace/mode/abap_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"ADD ALIAS ALIASES ASCENDING ASSERT ASSIGN ASSIGNING AT BACK CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY DATA DEFINE DEFINITION DEFERRED DELETE DESCENDING DESCRIBE DETAIL DIVIDE DO ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT FETCH FIELDS FORM FORMAT FREE FROM FUNCTION GENERATE GET HIDE IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION LEAVE LIKE LINE LOAD LOCAL LOOP MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY ON OVERLAY OPTIONAL OTHERS PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURN RETURNING ROLLBACK SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES UNASSIGN ULINE UNPACK UPDATE WHEN WHILE WINDOW WRITE OCCURS STRUCTURE OBJECT PROPERTY CASTING APPEND RAISING VALUE COLOR CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT ID NUMBER FOR TITLE OUTPUT WITH EXIT USING INTO WHERE GROUP BY HAVING ORDER BY SINGLE APPENDING CORRESPONDING FIELDS OF TABLE LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN\",\"constant.language\":\"TRUE FALSE NULL SPACE\",\"support.type\":\"c n i p f d t x string xstring decfloat16 decfloat34\",\"keyword.operator\":\"abs sign ceil floor trunc frac acos asin atan cos sin tan abapOperator cosh sinh tanh exp log log10 sqrt strlen xstrlen charlen numofchar dbmaxlen lines\"},\"text\",!0,\" \"),t=\"WITH\\\\W+(?:HEADER\\\\W+LINE|FRAME|KEY)|NO\\\\W+STANDARD\\\\W+PAGE\\\\W+HEADING|EXIT\\\\W+FROM\\\\W+STEP\\\\W+LOOP|BEGIN\\\\W+OF\\\\W+(?:BLOCK|LINE)|BEGIN\\\\W+OF|END\\\\W+OF\\\\W+(?:BLOCK|LINE)|END\\\\W+OF|NO\\\\W+INTERVALS|RESPECTING\\\\W+BLANKS|SEPARATED\\\\W+BY|USING\\\\W+(?:EDIT\\\\W+MASK)|WHERE\\\\W+(?:LINE)|RADIOBUTTON\\\\W+GROUP|REF\\\\W+TO|(?:PUBLIC|PRIVATE|PROTECTED)(?:\\\\W+SECTION)?|DELETING\\\\W+(?:TRAILING|LEADING)(?:ALL\\\\W+OCCURRENCES)|(?:FIRST|LAST)\\\\W+OCCURRENCE|INHERITING\\\\W+FROM|LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|IS\\\\W+(?:NOT\\\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)\";this.$rules={start:[{token:\"string\",regex:\"`\",next:\"string\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"doc.comment\",regex:/^\\*.+/},{token:\"comment\",regex:/\".+$/},{token:\"invalid\",regex:\"\\\\.{2,}\"},{token:\"keyword.operator\",regex:/\\W[\\-+%=<>*]\\W|\\*\\*|[~:,\\.&$]|->*?|=>/},{token:\"paren.lparen\",regex:\"[\\\\[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+\\\\b\"},{token:\"variable.parameter\",regex:/sy|pa?\\d\\d\\d\\d\\|t\\d\\d\\d\\.|innnn/},{token:\"keyword\",regex:t},{token:\"variable.parameter\",regex:/\\w+-\\w[\\-\\w]*/},{token:e,regex:\"\\\\b\\\\w+\\\\b\"},{caseInsensitive:!0}],qstring:[{token:\"constant.language.escape\",regex:\"''\"},{token:\"string\",regex:\"'\",next:\"start\"},{defaultToken:\"string\"}],string:[{token:\"constant.language.escape\",regex:\"``\"},{token:\"string\",regex:\"`\",next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.AbapHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/abap\",[\"require\",\"exports\",\"module\",\"ace/mode/abap_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function a(){this.HighlightRules=r,this.foldingRules=new i}var r=e(\"./abap_highlight_rules\").AbapHighlightRules,i=e(\"./folding/coffee\").FoldMode,s=e(\"../range\").Range,o=e(\"./text\").Mode,u=e(\"../lib/oop\");u.inherits(a,o),function(){this.lineCommentStart='\"',this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);return r},this.$id=\"ace/mode/abap\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-abc.js",
    "content": "ace.define(\"ace/mode/abc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"zupfnoter.information.comment.line.percentage\",\"information.keyword\",\"in formation.keyword.embedded\"],regex:\"(%%%%)(hn\\\\.[a-z]*)(.*)\",comment:\"Instruction Comment\"},{token:[\"information.comment.line.percentage\",\"information.keyword.embedded\"],regex:\"(%%)(.*)\",comment:\"Instruction Comment\"},{token:\"comment.line.percentage\",regex:\"%.*\",comment:\"Comments\"},{token:\"barline.keyword.operator\",regex:\"[\\\\[:]*[|:][|\\\\]:]*(?:\\\\[?[0-9]+)?|\\\\[[0-9]+\",comment:\"Bar lines\"},{token:[\"information.keyword.embedded\",\"information.argument.string.unquoted\"],regex:\"(\\\\[[A-Za-z]:)([^\\\\]]*\\\\])\",comment:\"embedded Header lines\"},{token:[\"information.keyword\",\"information.argument.string.unquoted\"],regex:\"^([A-Za-z]:)([^%\\\\\\\\]*)\",comment:\"Header lines\"},{token:[\"text\",\"entity.name.function\",\"string.unquoted\",\"text\"],regex:\"(\\\\[)([A-Z]:)(.*?)(\\\\])\",comment:\"Inline fields\"},{token:[\"accent.constant.language\",\"pitch.constant.numeric\",\"duration.constant.numeric\"],regex:\"([\\\\^=_]*)([A-Ga-gz][,']*)([0-9]*/*[><0-9]*)\",comment:\"Notes\"},{token:\"zupfnoter.jumptarget.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\:.*?[\\\\\"!]',comment:\"Zupfnoter jumptarget\"},{token:\"zupfnoter.goto.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\@.*?[\\\\\"!]',comment:\"Zupfnoter goto\"},{token:\"zupfnoter.annotation.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\!.*?[\\\\\"!]',comment:\"Zupfnoter annoation\"},{token:\"zupfnoter.annotationref.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\#.*?[\\\\\"!]',comment:\"Zupfnoter annotation reference\"},{token:\"chordname.string.quoted\",regex:'[\\\\\"!]\\\\^.*?[\\\\\"!]',comment:\"abc chord\"},{token:\"string.quoted\",regex:'[\\\\\"!].*?[\\\\\"!]',comment:\"abc annotation\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"abc\"],name:\"ABC\",scopeName:\"text.abcnotation\"},r.inherits(s,i),t.ABCHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/abc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/abc_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./abc_highlight_rules\").ABCHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.$id=\"ace/mode/abc\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-actionscript.js",
    "content": "ace.define(\"ace/mode/actionscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"support.class.actionscript.2\",regex:\"\\\\b(?:R(?:ecordset|DBMSResolver|adioButton(?:Group)?)|X(?:ML(?:Socket|Node|Connector)?|UpdateResolverDataHolder)|M(?:M(?:Save|Execute)|icrophoneMicrophone|o(?:use|vieClip(?:Loader)?)|e(?:nu(?:Bar)?|dia(?:Controller|Display|Playback))|ath)|B(?:yName|inding|utton)|S(?:haredObject|ystem|crollPane|t(?:yleSheet|age|ream)|ound|e(?:ndEvent|rviceObject)|OAPCall|lide)|N(?:umericStepper|et(?:stream|S(?:tream|ervices)|Connection|Debug(?:Config)?))|C(?:heckBox|o(?:ntextMenu(?:Item)?|okie|lor|m(?:ponentMixins|boBox))|ustomActions|lient|amera)|T(?:ypedValue|ext(?:Snapshot|Input|F(?:ield|ormat)|Area)|ree|AB)|Object|D(?:ownload|elta(?:Item|Packet)?|at(?:e(?:Chooser|Field)?|a(?:G(?:lue|rid)|Set|Type)))|U(?:RL|TC|IScrollBar)|P(?:opUpManager|endingCall|r(?:intJob|o(?:duct|gressBar)))|E(?:ndPoint|rror)|Video|Key|F(?:RadioButton|GridColumn|MessageBox|BarChart|S(?:croll(?:Bar|Pane)|tyleFormat|plitView)|orm|C(?:heckbox|omboBox|alendar)|unction|T(?:icker|ooltip(?:Lite)?|ree(?:Node)?)|IconButton|D(?:ataGrid|raggablePane)|P(?:ieChart|ushButton|ro(?:gressBar|mptBox))|L(?:i(?:stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(?:indow|SDLURL|ebService(?:Connector)?)|L(?:ist|o(?:calConnection|ad(?:er|Vars)|g)|a(?:unch|bel))|A(?:sBroadcaster|cc(?:ordion|essibility)|S(?:Set(?:Native|PropFlags)|N(?:ew|ative)|C(?:onstructor|lamp(?:2)?)|InstanceOf)|pplication|lert|rray))\\\\b\"},{token:\"support.function.actionscript.2\",regex:\"\\\\b(?:s(?:h(?:ift|ow(?:GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(?:ow|ePane))|c(?:hema|ale(?:X|Mode|Y|Content)|r(?:oll(?:Track|Drag)?|een(?:Resolution|Color|DPI)))|t(?:yleSheet|op(?:Drag|A(?:nimation|llSounds|gent))?|epSize|a(?:tus|rt(?:Drag|A(?:nimation|gent))?))|i(?:n|ze|lence(?:TimeOut|Level))|o(?:ngname|urce|rt(?:Items(?:By)?|On(?:HeaderRelease)?|able(?:Columns)?)?)|u(?:ppressInvalidCalls|bstr(?:ing)?)|p(?:li(?:ce|t)|aceCol(?:umnsEqually|lumnsEqually))|e(?:nd(?:DefaultPushButtonEvent|AndLoad)?|curity|t(?:R(?:GB|o(?:otNode|w(?:Height|Count))|esizable(?:Columns)?|a(?:nge|te))|G(?:ain|roupName)|X(?:AxisTitle)?|M(?:i(?:n(?:imum|utes)|lliseconds)|o(?:nth(?:Names)?|tionLevel|de)|ultilineMode|e(?:ssage|nu(?:ItemEnabled(?:At)?|EnabledAt)|dia)|a(?:sk|ximum))|B(?:u(?:tton(?:s|Width)|fferTime)|a(?:seTabIndex|ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Target|P(?:osition|roperties)|barState|Location)|t(?:yle(?:Property)?|opOnFocus|at(?:us|e))|i(?:ze|lenceLevel)|ort(?:able(?:Columns)?|Function)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)?|Style|Color|ed(?:Node(?:s)?|Cell|I(?:nd(?:ices|ex)|tem(?:s)?))?|able))|kin|m(?:oothness|allScroll))|H(?:ighlight(?:s|Color)|Scroll|o(?:urs|rizontal)|eader(?:Symbol|Height|Text|Property|Format|Width|Location)?|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:ode(?:Properties|ExpansionHandler)|ewTextFormat)|C(?:h(?:ildNodes|a(?:ngeHandler|rt(?:Title|EventHandler)))|o(?:ntent(?:Size)?|okie|lumns)|ell(?:Symbol|Data)|l(?:i(?:ckHandler|pboard)|oseHandler)|redentials)|T(?:ype(?:dVaule)?|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:out(?:Handler)?)?)|oggle|extFormat|ransform)|I(?:s(?:Branch|Open)|n(?:terval|putProperty)|con(?:SymbolName)?|te(?:rator|m(?:ByKey|Symbol)))|Orientation|D(?:i(?:splay(?:Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(?:pth(?:Below|To|Above)|fault(?:GatewayURL|Mappings|NodeIconSymbolName)|l(?:iveryMode|ay)|bug(?:ID)?)|a(?:yOfWeekNames|t(?:e(?:Filter)?|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Provider|All(?:Height|Property|Format|Width))?))|ra(?:wConnectors|gContent))|U(?:se(?:Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(?:osition|ercentComplete|an(?:e(?:M(?:inimumSize|aximumSize)|Size|Title))?|ro(?:pert(?:y(?:Data)?|iesAt)|gress))|E(?:nabled|dit(?:Handler|able)|xpand(?:NodeTrigger|erSymbolName))|V(?:Scroll|olume|alue(?:Source)?)|KeyFrameInterval|Quality|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:opback|adTarget)|a(?:rgeScroll|bel(?:Source|Placement)?))|A(?:s(?:Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:e(?:State(?:Handler)?|Handler)|ateHandler)|utoH(?:ideScrollBar|eight)))?|paratorBefore|ek|lect(?:ion(?:Disabled|Unfocused)?|ed(?:Node(?:s)?|Child|I(?:nd(?:ices|ex)|tem(?:s)?)|Dat(?:e|a))?|able(?:Ranges)?)|rver(?:String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(?:scroll(?:Policy)?|tml(?:Text)?|i(?:t(?:Test(?:TextNearPos)?|Area)|de(?:BuiltInItems|Child)?|ghlight(?:2D|3D)?)|orizontal|e(?:ight|ader(?:Re(?:nderer|lease)|Height|Text))|P(?:osition|ageScrollSize)|a(?:s(?:childNodes|MP3|S(?:creen(?:Broadcast|Playback)|treaming(?:Video|Audio)|ort)|Next|OwnProperty|Pr(?:inting|evious)|EmbeddedVideo|VideoEncoder|A(?:ccesibility|udio(?:Encoder)?))|ndlerName)|LineScrollSize)|ye(?:sLabel|ar)|n(?:o(?:t|de(?:Name|Close|Type|Open|Value)|Label)|u(?:llValue|mChild(?:S(?:creens|lides)|ren|Forms))|e(?:w(?:Item|line|Value|LocationDialog)|xt(?:S(?:cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(?:s)?)|c(?:h(?:ildNodes|eck|a(?:nge(?:sPending)?|r(?:CodeAt|At))|r)|o(?:s|n(?:st(?:ant|ructor)|nect|c(?:urrency|at)|t(?:ent(?:Type|Path)?|ains|rol(?:Placement|lerPolicy))|denseWhite|version)|py|l(?:or|umn(?:Stretch|Name(?:s)?|Count))|m(?:p(?:onent|lete)|ment))|u(?:stomItems|ePoint(?:s)?|r(?:veTo|Value|rent(?:Slide|ChildSlide|Item|F(?:ocused(?:S(?:creen|lide)|Form)|ps))))|e(?:il|ll(?:Renderer|Press|Edit|Focus(?:In|Out)))|l(?:i(?:ck|ents)|o(?:se(?:Button|Pane)?|ne(?:Node)?)|ear(?:S(?:haredObjects|treams)|Timeout|Interval)?)|a(?:ncelLabel|tch|p(?:tion|abilities)|l(?:cFields|l(?:e(?:e|r))?))|reate(?:GatewayConnection|Menu|Se(?:rver|gment)|C(?:hild(?:AtDepth)?|l(?:ient|ass(?:ChildAtDepth|Object(?:AtDepth)?))|all)|Text(?:Node|Field)|Item|Object(?:AtDepth)?|PopUp|E(?:lement|mptyMovieClip)))|t(?:h(?:is|row)|ype(?:of|Name)?|i(?:tle(?:StyleDeclaration)?|me(?:out)?)|o(?:talTime|String|olTipText|p|UpperCase|ggle(?:HighQuality)?|Lo(?:caleString|werCase))|e(?:st|llTarget|xt(?:RightMargin|Bold|S(?:ize|elected)|Height|Color|I(?:ndent|talic)|Disabled|Underline|F(?:ield|ont)|Width|LeftMargin|Align)?)|a(?:n|rget(?:Path)?|b(?:Stops|Children|Index|Enabled|leName))|r(?:y|igger|ac(?:e|k(?:AsMenu)?)))|i(?:s(?:Running|Branch|NaN|Con(?:soleOpen|nected)|Toggled|Installed|Open|D(?:own|ebugger)|P(?:urchased|ro(?:totypeOf|pertyEnumerable))|Empty|F(?:inite|ullyPopulated)|Local|Active)|n(?:s(?:tall|ertBefore)|cludeDeltaPacketInfo|t|it(?:ialize|Component|Pod|A(?:pplication|gent))?|de(?:nt|terminate|x(?:InParent(?:Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(?:F(?:ield|unction))?|t(?:e(?:ratorScrolled|m(?:s|RollO(?:ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(?:Case|White))|o(?:s|n(?:R(?:ollO(?:ut|ver)|e(?:s(?:ize|ult)|l(?:ease(?:Outside)?|aseOutside)))|XML|Mouse(?:Move|Down|Up|Wheel)|S(?:ync|croller|tatus|oundComplete|e(?:tFocus|lect(?:edItem)?))|N(?:oticeEvent|etworkChange)|C(?:hanged|onnect|l(?:ipEvent|ose))|ID3|D(?:isconnect|eactivate|ata|ragO(?:ut|ver))|Un(?:install|load)|P(?:aymentResult|ress)|EnterFrame|K(?:illFocus|ey(?:Down|Up))|Fault|Lo(?:ad|g)|A(?:ctiv(?:ity|ate)|ppSt(?:op|art)))?|pe(?:n|ration)|verLayChildren|kLabel|ldValue|r(?:d)?)|d(?:i(?:s(?:connect|play(?:Normal|ed(?:Month|Year)|Full)|able(?:Shader|d(?:Ranges|Days)|CloseBox|Events))|rection)|o(?:cTypeDecl|tall|Decoding|main|LazyDecoding)|u(?:plicateMovieClip|ration)|e(?:stroy(?:ChildAt|Object)|code|fault(?:PushButton(?:Enabled)?|KeydownHandler)?|l(?:ta(?:Packet(?:Changed)?)?|ete(?:PopUp|All)?)|blocking)|a(?:shBoardSave|yNames|ta(?:Provider)?|rkshadow)|r(?:opdown(?:Width)?|a(?:w|gO(?:ut|ver))))|u(?:se(?:Sort|HandCursor|Codepage|EchoSuppression)|n(?:shift|install|derline|escape|format|watch|lo(?:ck|ad(?:Movie(?:Num)?)?))|pdate(?:Results|Mode|I(?:nputProperties|tem(?:ByIndex)?)|P(?:acket|roperties)|View|AfterEvent)|rl)|join|p(?:ixelAspectRatio|o(?:sition|p|w)|u(?:sh|rge|blish)|ercen(?:tComplete|Loaded)|lay(?:head(?:Change|Time)|ing|Hidden|erType)?|a(?:ssword|use|r(?:se(?:XML|CSS|Int|Float)|ent(?:Node|Is(?:S(?:creen|lide)|Form))|ams))|r(?:int(?:Num|AsBitmap(?:Num)?)?|o(?:to(?:type)?|pert(?:y|ies)|gress)|e(?:ss|v(?:ious(?:S(?:ibling|lide)|Value)?|Scene|Frame)|ferred(?:Height|Width))))|e(?:scape|n(?:code(?:r)?|ter(?:Frame)?|dFill|able(?:Shader|d|CloseBox|Events))|dit(?:able|Field|LocationDialog)|v(?:ent|al(?:uate)?)|q|x(?:tended|p|ec(?:ute)?|actSettings)|m(?:phasized(?:StyleDeclaration)?|bedFonts))|v(?:i(?:sible|ewPod)|ScrollPolicy|o(?:id|lume)|ersion|P(?:osition|ageScrollSize)|a(?:l(?:idat(?:ionError|e(?:Property|ActivationKey)?)|ue(?:Of)?)|riable)|LineScrollSize)|k(?:ind|ey(?:Down|Up|Press|FrameInterval))|q(?:sort|uality)|f(?:scommand|i(?:n(?:d(?:Text|First|Last)?|ally)|eldInfo|lter(?:ed|Func)?|rst(?:Slide|Child|DayOfWeek|VisibleNode)?)|o(?:nt|cus(?:In|edCell|Out|Enabled)|r(?:egroundDisabled|mat(?:ter)?))|unctionName|ps|l(?:oor|ush)|ace|romCharCode)|w(?:i(?:th|dth)|ordWrap|atch|riteAccess)|l(?:t|i(?:st(?:Owner)?|ne(?:Style|To))|o(?:c(?:k|a(?:t(?:ion|eByld)|l(?:ToGlobal|FileReadDisable)))|opback|ad(?:Movie(?:Num)?|S(?:crollContent|ound)|ed|Variables(?:Num)?|Application)?|g(?:Changes)?)|e(?:ngth|ft(?:Margin)?|ading)?|a(?:st(?:Slide|Child|Index(?:Of)?)?|nguage|b(?:el(?:Placement|F(?:ield|unction))?|leField)))|a(?:s(?:scociate(?:Controller|Display)|in|pectRatio|function)|nd|c(?:ceptConnection|tiv(?:ityLevel|ePlayControl)|os)|t(?:t(?:ach(?:Movie|Sound|Video|Audio)|ributes)|an(?:2)?)|dd(?:header|RequestHeader|Menu(?:Item(?:At)?|At)?|Sort|Header|No(?:tice|de(?:At)?)|C(?:olumn(?:At)?|uePoint)|T(?:oLocalInternetCache|reeNode(?:At)?)|I(?:con|tem(?:s(?:At)?|At)?)|DeltaItem|P(?:od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(?:Size|Play|KeyNav|Load)|pp(?:endChild|ly(?:Changes|Updates)?)|vHardwareDisable|fterLoaded|l(?:ternateRowColors|ign|l(?:ow(?:InsecureDomain|Domain)|Transitions(?:InDone|OutDone))|bum)|r(?:tist|row|g(?:uments|List))|gent|bs)|r(?:ight(?:Margin)?|o(?:ot(?:S(?:creen|lide)|Form)|und|w(?:Height|Count)|llO(?:ut|ver))|e(?:s(?:yncDepth|t(?:orePane|artAnimation|rict)|iz(?:e|able(?:Columns)?)|olveDelta|ult(?:s)?|ponse)|c(?:o(?:ncile(?:Results|Updates)|rd)|eive(?:Video|Audio))|draw|jectConnection|place(?:Sel|ItemAt|AllItems)?|ve(?:al(?:Child)?|rse)|quest(?:SizeChange|Payment)?|f(?:errer|resh(?:ScrollContent|Destinations|Pane|FromSources)?)|lease(?:Outside)?|ad(?:Only|Access)|gister(?:SkinElement|C(?:olor(?:Style|Name)|lass)|InheritingStyle|Proxy)|move(?:Range|M(?:ovieClip|enu(?:Item(?:At)?|At))|Background|Sort|No(?:tice|de(?:sAt|At)?)|C(?:olum(?:nAt|At)|uePoints)|T(?:extField|reeNode(?:At)?)|Item(?:At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(?:C(?:olumns|uePoints)|Items)?))|a(?:ndom|te|dioDot))|g(?:t|oto(?:Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(?:Stop|Play))|e(?:nre|t(?:R(?:GB|o(?:otNode|wCount)|e(?:sizable|mote))|X(?:AxisTitle)?|M(?:i(?:n(?:imum(?:Size)?|utes)|lliseconds)|onth(?:Names)?|ultilineMode|e(?:ssage|nu(?:ItemAt|EnabledAt|At))|aximum(?:Size)?)|B(?:ytes(?:Total|Loaded)|ounds|utton(?:s|Width)|eginIndex|a(?:ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Position|barState|Location)|t(?:yle(?:Names)?|opOnFocus|ate)|ize|o(?:urce|rtState)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)|Style|ed(?:Node(?:s)?|Cell|Text|I(?:nd(?:ices|ex)|tem(?:s)?))?)|rvice)|moothness|WFVersion)|H(?:ighlight(?:s|Color)|ours|e(?:ight|ader(?:Height|Text|Property|Format|Width|Location)?)|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:o(?:tices|de(?:DisplayedAt|At))|um(?:Children|berAvailable)|e(?:wTextFormat|xtHighestDepth))|C(?:h(?:ild(?:S(?:creen|lide)|Nodes|Form|At)|artTitle)|o(?:n(?:tent|figInfo)|okie|de|unt|lumn(?:Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(?:ll|retIndex))|T(?:ypedValue|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:stamp|zoneOffset|out(?:State|Handler)|r)?)|oggle|ext(?:Extent|Format)?|r(?:ee(?:NodeAt|Length)|ans(?:form|actionId)))|I(?:s(?:Branch|Open)|n(?:stanceAtDepth|d(?:icesByKey|exByKey))|con(?:SymbolName)?|te(?:rator|m(?:sByKey|By(?:Name|Key)|id|ID|At))|d)|O(?:utput(?:Parameter(?:s|ByName)?|Value(?:s)?)|peration|ri(?:entation|ginalCellData))|D(?:i(?:s(?:play(?:Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(?:pth|faultNodeIconSymbolName|l(?:taPacket|ay)|bug(?:Config|ID)?)|a(?:y(?:OfWeekNames)?|t(?:e|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Label|All(?:Height|Property|Format|Width))?))|rawConnectors)|U(?:se(?:Shadow|HandCursor|rInput|Fade)|RL|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear))|P(?:o(?:sition|ds)|ercentComplete|a(?:n(?:e(?:M(?:inimums|aximums)|Height|Title|Width))?|rentNode)|r(?:operty(?:Name|Data)?|efer(?:ences|red(?:Height|Width))))|E(?:n(?:dIndex|abled)|ditingData|x(?:panderSymbolName|andNodeTrigger))|V(?:iewed(?:Pods|Applications)|olume|ersion|alue(?:Source)?)|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|o(?:ntList|cus)|ullYear|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:cal|adTarget)|ength|a(?:stTabIndex|bel(?:Source)?))|A(?:s(?:cii|Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:eState(?:Handler)?|ateHandler)|utoH(?:ideScrollBar|eight)|llItems|gent))?)?|lobal(?:StyleFormat|ToLocal)?|ain|roupName)|x(?:updatePackety|mlDecl)?|m(?:y(?:MethodName|Call)|in(?:imum)?|o(?:nthNames|tion(?:TimeOut|Level)|de(?:lChanged)?|use(?:Move|O(?:ut|ver)|Down(?:Somewhere|Outside)?|Up(?:Somewhere)?|WheelEnabled)|ve(?:To)?)|u(?:ted|lti(?:pleS(?:imultaneousAllowed|elections)|line))|e(?:ssage|nu(?:Show|Hide)?|th(?:od)?|diaType)|a(?:nufacturer|tch|x(?:scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(?:substring|chr|ord|length))|b(?:ytes(?:Total|Loaded)|indFormat(?:Strings|Function)|o(?:ttom(?:Scroll)?|ld|rder(?:Color)?)|u(?:tton(?:Height|Width)|iltInItems|ffer(?:Time|Length)|llet)|e(?:foreApplyUpdates|gin(?:GradientFill|Fill))|lockIndent|a(?:ndwidth|ckground(?:Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\\\\b\"},{token:\"support.constant.actionscript.2\",regex:\"\\\\b(?:__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\\\\b\"},{token:\"keyword.control.actionscript.2\",regex:\"\\\\b(?:dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\\\\b\"},{token:\"storage.type.actionscript.2\",regex:\"\\\\b(?:Boolean|Number|String|Void)\\\\b\"},{token:\"constant.language.actionscript.2\",regex:\"\\\\b(?:null|undefined|true|false)\\\\b\"},{token:\"constant.numeric.actionscript.2\",regex:\"\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"punctuation.definition.string.begin.actionscript.2\",regex:'\"',push:[{token:\"punctuation.definition.string.end.actionscript.2\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.actionscript.2\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.actionscript.2\"}]},{token:\"punctuation.definition.string.begin.actionscript.2\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.actionscript.2\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.actionscript.2\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.actionscript.2\"}]},{token:\"support.constant.actionscript.2\",regex:\"\\\\b(?:BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\\\\b\"},{token:\"punctuation.definition.comment.actionscript.2\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.actionscript.2\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.actionscript.2\"}]},{token:\"punctuation.definition.comment.actionscript.2\",regex:\"//.*$\",push_:[{token:\"comment.line.double-slash.actionscript.2\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-slash.actionscript.2\"}]},{token:\"keyword.operator.actionscript.2\",regex:\"\\\\binstanceof\\\\b\"},{token:\"keyword.operator.symbolic.actionscript.2\",regex:\"[-!%&*+=/?:]\"},{token:[\"meta.preprocessor.actionscript.2\",\"punctuation.definition.preprocessor.actionscript.2\",\"meta.preprocessor.actionscript.2\"],regex:\"^([ \\\\t]*)(#)([a-zA-Z]+)\"},{token:[\"storage.type.function.actionscript.2\",\"meta.function.actionscript.2\",\"entity.name.function.actionscript.2\",\"meta.function.actionscript.2\",\"punctuation.definition.parameters.begin.actionscript.2\"],regex:\"\\\\b(function)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()\",push:[{token:\"punctuation.definition.parameters.end.actionscript.2\",regex:\"\\\\)\",next:\"pop\"},{token:\"variable.parameter.function.actionscript.2\",regex:\"[^,)$]+\"},{defaultToken:\"meta.function.actionscript.2\"}]},{token:[\"storage.type.class.actionscript.2\",\"meta.class.actionscript.2\",\"entity.name.type.class.actionscript.2\",\"meta.class.actionscript.2\",\"storage.modifier.extends.actionscript.2\",\"meta.class.actionscript.2\",\"entity.other.inherited-class.actionscript.2\"],regex:\"\\\\b(class)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*)(?:(\\\\s+)(extends)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*))?\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"as\"],keyEquivalent:\"^~A\",name:\"ActionScript\",scopeName:\"source.actionscript.2\"},r.inherits(s,i),t.ActionScriptHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/actionscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/actionscript_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./actionscript_highlight_rules\").ActionScriptHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/actionscript\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-ada.js",
    "content": "ace.define(\"ace/mode/ada_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|body|private|then|if|procedure|type|case|in|protected|constant|interface|until||is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor\",t=\"true|false|null\",n=\"count|min|max|avg|sum|rank|now|coalesce|main\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.AdaHighlightRules=s}),ace.define(\"ace/mode/ada\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ada_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ada_highlight_rules\").AdaHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*(begin|loop|then|is|do)\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){var r=t+n;return r.match(/^\\s*(begin|end)$/)?!0:!1},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=t.getLine(n-1),s=this.$getIndent(i).length,u=this.$getIndent(r).length;if(u<=s)return;t.outdentRows(new o(n,0,n+2,0))},this.$id=\"ace/mode/ada\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-apache_conf.js",
    "content": "ace.define(\"ace/mode/apache_conf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"punctuation.definition.comment.apacheconf\",\"comment.line.hash.ini\",\"comment.line.hash.ini\"],regex:\"^((?:\\\\s)*)(#)(.*$)\"},{token:[\"punctuation.definition.tag.apacheconf\",\"entity.tag.apacheconf\",\"text\",\"string.value.apacheconf\",\"punctuation.definition.tag.apacheconf\"],regex:\"(<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(?:(\\\\s)(.+?))?(>)\"},{token:[\"punctuation.definition.tag.apacheconf\",\"entity.tag.apacheconf\",\"punctuation.definition.tag.apacheconf\"],regex:\"(</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(>)\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"string.regexp.apacheconf\",\"text\",\"string.replacement.apacheconf\",\"text\"],regex:\"(Rewrite(?:Rule|Cond))(\\\\s+)(.+?)(\\\\s+)(.+?)($|\\\\s)\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"entity.status.apacheconf\",\"text\",\"string.regexp.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(RedirectMatch)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"entity.status.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(Redirect)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"string.regexp.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(ScriptAliasMatch|AliasMatch)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)(\\\\s))?\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?\"},{token:\"keyword.core.apacheconf\",regex:\"\\\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\\\b\"},{token:\"keyword.mpm.apacheconf\",regex:\"\\\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\\\b\"},{token:\"keyword.access.apacheconf\",regex:\"\\\\b(?:Allow|Deny|Order)\\\\b\"},{token:\"keyword.actions.apacheconf\",regex:\"\\\\b(?:Action|Script)\\\\b\"},{token:\"keyword.alias.apacheconf\",regex:\"\\\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\\\b\"},{token:\"keyword.auth.apacheconf\",regex:\"\\\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\\\b\"},{token:\"keyword.auth_anon.apacheconf\",regex:\"\\\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\\\b\"},{token:\"keyword.auth_dbm.apacheconf\",regex:\"\\\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\\\b\"},{token:\"keyword.auth_digest.apacheconf\",regex:\"\\\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\\\b\"},{token:\"keyword.auth_ldap.apacheconf\",regex:\"\\\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\\\b\"},{token:\"keyword.autoindex.apacheconf\",regex:\"\\\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\\\b\"},{token:\"keyword.cache.apacheconf\",regex:\"\\\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\\\b\"},{token:\"keyword.cern_meta.apacheconf\",regex:\"\\\\b(?:MetaDir|MetaFiles|MetaSuffix)\\\\b\"},{token:\"keyword.cgi.apacheconf\",regex:\"\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\\\b\"},{token:\"keyword.cgid.apacheconf\",regex:\"\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\\\b\"},{token:\"keyword.charset_lite.apacheconf\",regex:\"\\\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\\\b\"},{token:\"keyword.dav.apacheconf\",regex:\"\\\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\\\b\"},{token:\"keyword.deflate.apacheconf\",regex:\"\\\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\\\b\"},{token:\"keyword.dir.apacheconf\",regex:\"\\\\b(?:DirectoryIndex|DirectorySlash)\\\\b\"},{token:\"keyword.disk_cache.apacheconf\",regex:\"\\\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\\\b\"},{token:\"keyword.dumpio.apacheconf\",regex:\"\\\\b(?:DumpIOInput|DumpIOOutput)\\\\b\"},{token:\"keyword.env.apacheconf\",regex:\"\\\\b(?:PassEnv|SetEnv|UnsetEnv)\\\\b\"},{token:\"keyword.expires.apacheconf\",regex:\"\\\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\\\b\"},{token:\"keyword.ext_filter.apacheconf\",regex:\"\\\\b(?:ExtFilterDefine|ExtFilterOptions)\\\\b\"},{token:\"keyword.file_cache.apacheconf\",regex:\"\\\\b(?:CacheFile|MMapFile)\\\\b\"},{token:\"keyword.headers.apacheconf\",regex:\"\\\\b(?:Header|RequestHeader)\\\\b\"},{token:\"keyword.imap.apacheconf\",regex:\"\\\\b(?:ImapBase|ImapDefault|ImapMenu)\\\\b\"},{token:\"keyword.include.apacheconf\",regex:\"\\\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\\\b\"},{token:\"keyword.isapi.apacheconf\",regex:\"\\\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\\\b\"},{token:\"keyword.ldap.apacheconf\",regex:\"\\\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\\\b\"},{token:\"keyword.log.apacheconf\",regex:\"\\\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\\\b\"},{token:\"keyword.mem_cache.apacheconf\",regex:\"\\\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\\\b\"},{token:\"keyword.mime.apacheconf\",regex:\"\\\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\\\b\"},{token:\"keyword.misc.apacheconf\",regex:\"\\\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\\\b\"},{token:\"keyword.negotiation.apacheconf\",regex:\"\\\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\\\b\"},{token:\"keyword.nw_ssl.apacheconf\",regex:\"\\\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\\\b\"},{token:\"keyword.proxy.apacheconf\",regex:\"\\\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\\\b\"},{token:\"keyword.rewrite.apacheconf\",regex:\"\\\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\\\b\"},{token:\"keyword.setenvif.apacheconf\",regex:\"\\\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\\\b\"},{token:\"keyword.so.apacheconf\",regex:\"\\\\b(?:LoadFile|LoadModule)\\\\b\"},{token:\"keyword.ssl.apacheconf\",regex:\"\\\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\\\b\"},{token:\"keyword.usertrack.apacheconf\",regex:\"\\\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\\\b\"},{token:\"keyword.vhost_alias.apacheconf\",regex:\"\\\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\\\b\"},{token:[\"keyword.php.apacheconf\",\"text\",\"entity.property.apacheconf\",\"text\",\"string.value.apacheconf\",\"text\"],regex:\"\\\\b(php_value|php_flag)\\\\b(?:(\\\\s+)(.+?)(?:(\\\\s+)(.+?))?)?(\\\\s)\"},{token:[\"punctuation.variable.apacheconf\",\"variable.env.apacheconf\",\"variable.misc.apacheconf\",\"punctuation.variable.apacheconf\"],regex:\"(%\\\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\\\})\"},{token:[\"entity.mime-type.apacheconf\",\"text\"],regex:\"\\\\b((?:text|image|application|video|audio)/.+?)(\\\\s)\"},{token:\"entity.helper.apacheconf\",regex:\"\\\\b(?:from|unset|set|on|off)\\\\b\",caseInsensitive:!0},{token:\"constant.integer.apacheconf\",regex:\"\\\\b\\\\d+\\\\b\"},{token:[\"text\",\"punctuation.definition.flag.apacheconf\",\"string.flag.apacheconf\",\"punctuation.definition.flag.apacheconf\",\"text\"],regex:\"(\\\\s)(\\\\[)(.*?)(\\\\])(\\\\s)\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"conf\",\"CONF\",\"htaccess\",\"HTACCESS\",\"htgroups\",\"HTGROUPS\",\"htpasswd\",\"HTPASSWD\",\".htaccess\",\".HTACCESS\",\".htgroups\",\".HTGROUPS\",\".htpasswd\",\".HTPASSWD\"],name:\"Apache Conf\",scopeName:\"source.apacheconf\"},r.inherits(s,i),t.ApacheConfHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/apache_conf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apache_conf_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./apache_conf_highlight_rules\").ApacheConfHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/apache_conf\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-apex.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/apex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../mode/text_highlight_rules\").TextHighlightRules,s=e(\"../mode/doc_comment_highlight_rules\").DocCommentHighlightRules,o=function(){function t(t){return t.slice(-3)==\"__c\"?\"support.function\":e(t)}function n(e,t){return{regex:e+(t.multiline?\"\":\"(?=.)\"),token:\"string.start\",next:[{regex:t.escape,token:\"character.escape\"},{regex:t.error,token:\"error.invalid\"},{regex:e+(t.multiline?\"\":\"|$\"),token:\"string.end\",next:t.next||\"start\"},{defaultToken:\"string\"}]}}function r(){return[{token:\"comment\",regex:\"\\\\/\\\\/(?=.)\",next:[s.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}]},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:[s.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var e=this.createKeywordMapper({\"variable.language\":\"activate|any|autonomous|begin|bigdecimal|byte|cast|char|collect|const|end|exit|export|float|goto|group|having|hint|import|inner|into|join|loop|number|object|of|outer|parallel|pragma|retrieve|returning|search|short|stat|synchronized|then|this_month|transaction|type|when\",keyword:\"private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final|and|array|as|asc|break|bulk|by|catch|class|commit|continue|convertcurrency|delete|desc|do|else|enum|extends|false|final|finally|for|from|future|global|if|implements|in|insert|instanceof|interface|last_90_days|last_month|last_n_days|last_week|like|limit|list|map|merge|new|next_90_days|next_month|next_n_days|next_week|not|null|nulls|on|or|override|package|return|rollback|savepoint|select|set|sort|super|testmethod|this|this_week|throw|today|tolabel|tomorrow|trigger|true|try|undelete|update|upsert|using|virtual|webservice|where|while|yesterday|switch|case|default\",\"storage.type\":\"def|boolean|byte|char|short|int|float|pblob|date|datetime|decimal|double|id|integer|long|string|time|void|blob|Object\",\"constant.language\":\"true|false|null|after|before|count|excludes|first|includes|last|order|sharing|with\",\"support.function\":\"system|apex|label|apexpages|userinfo|schema\"},\"identifier\",!0);this.$rules={start:[n(\"'\",{escape:/\\\\[nb'\"\\\\]/,error:/\\\\./,multiline:!1}),r(\"c\"),{type:\"decoration\",token:[\"meta.package.apex\",\"keyword.other.package.apex\",\"meta.package.apex\",\"storage.modifier.package.apex\",\"meta.package.apex\",\"punctuation.terminator.apex\"],regex:/^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*)((?:;)?))?/},{regex:/@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,token:\"constant.language\"},{regex:/[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,token:t},{regex:\"`#%\",token:\"error.invalid\"},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[LlDdEe][+-]?\\d+)?)\\b|\\.\\d+[LlDdEe]/},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[]/,next:\"maybe_soql\",merge:!1},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\",merge:!1},{token:\"paren.rparen\",regex:/[\\])}]/,merge:!1}],maybe_soql:[{regex:/\\s+/,token:\"text\"},{regex:/(SELECT|FIND)\\b/,token:\"keyword\",caseInsensitive:!0,next:\"soql\"},{regex:\"\",token:\"none\",next:\"start\"}],soql:[{regex:\"(:?ASC|BY|CATEGORY|CUBE|DATA|DESC|END|FIND|FIRST|FOR|FROM|GROUP|HAVING|IN|LAST|LIMIT|NETWORK|NULLS|OFFSET|ORDER|REFERENCE|RETURNING|ROLLUP|SCOPE|SELECT|SNIPPET|TRACKING|TYPEOF|UPDATE|USING|VIEW|VIEWSTAT|WHERE|WITH|AND|OR)\\\\b\",token:\"keyword\",caseInsensitive:!0},{regex:\"(:?target_length|toLabel|convertCurrency|count|Contact|Account|User|FIELDS)\\\\b\",token:\"support.function\",caseInsensitive:!0},{token:\"paren.rparen\",regex:/[\\]]/,next:\"start\",merge:!1},n(\"'\",{escape:/\\\\[nb'\"\\\\]/,error:/\\\\./,multiline:!1,next:\"soql\"}),n('\"',{escape:/\\\\[nb'\"\\\\]/,error:/\\\\./,multiline:!1,next:\"soql\"}),{regex:/\\\\./,token:\"character.escape\"},{regex:/[\\?\\&\\|\\!\\{\\}\\[\\]\\(\\)\\^\\~\\*\\:\\\"\\'\\+\\-\\,\\.=\\\\\\/]/,token:\"keyword.operator\"}],\"log-start\":[{token:\"timestamp.invisible\",regex:/^[\\d:.() ]+\\|/,next:\"log-header\"},{token:\"timestamp.invisible\",regex:/^  (Number of|Maximum)[^:]*:/,next:\"log-comment\"},{token:\"invisible\",regex:/^Execute Anonymous:/,next:\"log-comment\"},{defaultToken:\"text\"}],\"log-comment\":[{token:\"log-comment\",regex:/.*$/,next:\"log-start\"}],\"log-header\":[{token:\"timestamp.invisible\",regex:/((USER_DEBUG|\\[\\d+\\]|DEBUG)\\|)+/},{token:\"keyword\",regex:\"(?:EXECUTION_FINISHED|EXECUTION_STARTED|CODE_UNIT_STARTED|CUMULATIVE_LIMIT_USAGE|LIMIT_USAGE_FOR_NS|CUMULATIVE_LIMIT_USAGE_END|CODE_UNIT_FINISHED)\"},{regex:\"\",next:\"log-start\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,i),t.ApexHighlightRules=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/apex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apex_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";function a(){i.call(this),this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=new u}var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./apex_highlight_rules\").ApexHighlightRules,o=e(\"../mode/folding/cstyle\").FoldMode,u=e(\"../mode/behaviour/cstyle\").CstyleBehaviour;r.inherits(a,i),a.prototype.lineCommentStart=\"//\",a.prototype.blockComment={start:\"/*\",end:\"*/\"},t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-applescript.js",
    "content": "ace.define(\"ace/mode/applescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"about|above|after|against|and|around|as|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|contain|contains|continue|copy|div|does|eighth|else|end|equal|equals|error|every|exit|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|into|is|it|its|last|local|me|middle|mod|my|ninth|not|of|on|onto|or|over|prop|property|put|ref|reference|repeat|returning|script|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|try|until|where|while|whose|with|without\",t=\"AppleScript|false|linefeed|return|pi|quote|result|space|tab|true\",n=\"activate|beep|count|delay|launch|log|offset|read|round|run|say|summarize|write\",r=\"alias|application|boolean|class|constant|date|file|integer|list|number|real|record|string|text|character|characters|contents|day|frontmost|id|item|length|month|name|paragraph|paragraphs|rest|reverse|running|time|version|weekday|word|words|year\",i=this.createKeywordMapper({\"support.function\":n,\"constant.language\":t,\"support.type\":r,keyword:e},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\(\\\\*\",next:\"comment\"},{token:\"string\",regex:'\".*?\"'},{token:\"support.type\",regex:\"\\\\b(POSIX file|POSIX path|(date|time) string|quoted form)\\\\b\"},{token:\"support.function\",regex:\"\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\\\b|^\\\\s*return\\\\b\"},{token:\"constant.language\",regex:\"\\\\b(text item delimiters|current application|missing value)\\\\b\"},{token:\"keyword\",regex:\"\\\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference))\\\\b\"},{token:i,regex:\"[a-zA-Z][a-zA-Z0-9_]*\\\\b\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\)\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.AppleScriptHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/applescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/applescript_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./applescript_highlight_rules\").AppleScriptHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"(*\",end:\"*)\"},this.$id=\"ace/mode/applescript\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-asciidoc.js",
    "content": "ace.define(\"ace/mode/asciidoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){function t(e){var t=/\\w/.test(e)?\"\\\\b\":\"(?:\\\\B|^)\";return t+e+\"[^\"+e+\"].*?\"+e+\"(?![\\\\w*])\"}var e=\"[a-zA-Z\\u00a1-\\uffff]+\\\\b\";this.$rules={start:[{token:\"empty\",regex:/$/},{token:\"literal\",regex:/^\\.{4,}\\s*$/,next:\"listingBlock\"},{token:\"literal\",regex:/^-{4,}\\s*$/,next:\"literalBlock\"},{token:\"string\",regex:/^\\+{4,}\\s*$/,next:\"passthroughBlock\"},{token:\"keyword\",regex:/^={4,}\\s*$/},{token:\"text\",regex:/^\\s*$/},{token:\"empty\",regex:\"\",next:\"dissallowDelimitedBlock\"}],dissallowDelimitedBlock:[{include:\"paragraphEnd\"},{token:\"comment\",regex:\"^//.+$\"},{token:\"keyword\",regex:\"^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):\"},{include:\"listStart\"},{token:\"literal\",regex:/^\\s+.+$/,next:\"indentedBlock\"},{token:\"empty\",regex:\"\",next:\"text\"}],paragraphEnd:[{token:\"doc.comment\",regex:/^\\/{4,}\\s*$/,next:\"commentBlock\"},{token:\"tableBlock\",regex:/^\\s*[|!]=+\\s*$/,next:\"tableBlock\"},{token:\"keyword\",regex:/^(?:--|''')\\s*$/,next:\"start\"},{token:\"option\",regex:/^\\[.*\\]\\s*$/,next:\"start\"},{token:\"pageBreak\",regex:/^>{3,}$/,next:\"start\"},{token:\"literal\",regex:/^\\.{4,}\\s*$/,next:\"listingBlock\"},{token:\"titleUnderline\",regex:/^(?:={2,}|-{2,}|~{2,}|\\^{2,}|\\+{2,})\\s*$/,next:\"start\"},{token:\"singleLineTitle\",regex:/^={1,5}\\s+\\S.*$/,next:\"start\"},{token:\"otherBlock\",regex:/^(?:\\*{2,}|_{2,})\\s*$/,next:\"start\"},{token:\"optionalTitle\",regex:/^\\.[^.\\s].+$/,next:\"start\"}],listStart:[{token:\"keyword\",regex:/^\\s*(?:\\d+\\.|[a-zA-Z]\\.|[ixvmIXVM]+\\)|\\*{1,5}|-|\\.{1,5})\\s/,next:\"listText\"},{token:\"meta.tag\",regex:/^.+(?::{2,4}|;;)(?: |$)/,next:\"listText\"},{token:\"support.function.list.callout\",regex:/^(?:<\\d+>|\\d+>|>) /,next:\"text\"},{token:\"keyword\",regex:/^\\+\\s*$/,next:\"start\"}],text:[{token:[\"link\",\"variable.language\"],regex:/((?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+)(\\[.*?\\])/},{token:\"link\",regex:/(?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+/},{token:\"link\",regex:/\\b[\\w\\.\\/\\-]+@[\\w\\.\\/\\-]+\\b/},{include:\"macros\"},{include:\"paragraphEnd\"},{token:\"literal\",regex:/\\+{3,}/,next:\"smallPassthrough\"},{token:\"escape\",regex:/\\((?:C|TM|R)\\)|\\.{3}|->|<-|=>|<=|&#(?:\\d+|x[a-fA-F\\d]+);|(?: |^)--(?=\\s+\\S)/},{token:\"escape\",regex:/\\\\[_*'`+#]|\\\\{2}[_*'`+#]{2}/},{token:\"keyword\",regex:/\\s\\+$/},{token:\"text\",regex:e},{token:[\"keyword\",\"string\",\"keyword\"],regex:/(<<[\\w\\d\\-$]+,)(.*?)(>>|$)/},{token:\"keyword\",regex:/<<[\\w\\d\\-$]+,?|>>/},{token:\"constant.character\",regex:/\\({2,3}.*?\\){2,3}/},{token:\"keyword\",regex:/\\[\\[.+?\\]\\]/},{token:\"support\",regex:/^\\[{3}[\\w\\d =\\-]+\\]{3}/},{include:\"quotes\"},{token:\"empty\",regex:/^\\s*$/,next:\"start\"}],listText:[{include:\"listStart\"},{include:\"text\"}],indentedBlock:[{token:\"literal\",regex:/^[\\s\\w].+$/,next:\"indentedBlock\"},{token:\"literal\",regex:\"\",next:\"start\"}],listingBlock:[{token:\"literal\",regex:/^\\.{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"constant.numeric\",regex:\"<\\\\d+>\"},{token:\"literal\",regex:\"[^<]+\"},{token:\"literal\",regex:\"<\"}],literalBlock:[{token:\"literal\",regex:/^-{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"constant.numeric\",regex:\"<\\\\d+>\"},{token:\"literal\",regex:\"[^<]+\"},{token:\"literal\",regex:\"<\"}],passthroughBlock:[{token:\"literal\",regex:/^\\+{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"literal\",regex:e+\"|\\\\d+\"},{include:\"macros\"},{token:\"literal\",regex:\".\"}],smallPassthrough:[{token:\"literal\",regex:/[+]{3,}/,next:\"dissallowDelimitedBlock\"},{token:\"literal\",regex:/^\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"literal\",regex:e+\"|\\\\d+\"},{include:\"macros\"}],commentBlock:[{token:\"doc.comment\",regex:/^\\/{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"doc.comment\",regex:\"^.*$\"}],tableBlock:[{token:\"tableBlock\",regex:/^\\s*\\|={3,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"tableBlock\",regex:/^\\s*!={3,}\\s*$/,next:\"innerTableBlock\"},{token:\"tableBlock\",regex:/\\|/},{include:\"text\",noEscape:!0}],innerTableBlock:[{token:\"tableBlock\",regex:/^\\s*!={3,}\\s*$/,next:\"tableBlock\"},{token:\"tableBlock\",regex:/^\\s*|={3,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"tableBlock\",regex:/!/}],macros:[{token:\"macro\",regex:/{[\\w\\-$]+}/},{token:[\"text\",\"string\",\"text\",\"constant.character\",\"text\"],regex:/({)([\\w\\-$]+)(:)?(.+)?(})/},{token:[\"text\",\"markup.list.macro\",\"keyword\",\"string\"],regex:/(\\w+)(footnote(?:ref)?::?)([^\\s\\[]+)?(\\[.*?\\])?/},{token:[\"markup.list.macro\",\"keyword\",\"string\"],regex:/([a-zA-Z\\-][\\w\\.\\/\\-]*::?)([^\\s\\[]+)(\\[.*?\\])?/},{token:[\"markup.list.macro\",\"keyword\"],regex:/([a-zA-Z\\-][\\w\\.\\/\\-]+::?)(\\[.*?\\])/},{token:\"keyword\",regex:/^:.+?:(?= |$)/}],quotes:[{token:\"string.italic\",regex:/__[^_\\s].*?__/},{token:\"string.italic\",regex:t(\"_\")},{token:\"keyword.bold\",regex:/\\*\\*[^*\\s].*?\\*\\*/},{token:\"keyword.bold\",regex:t(\"\\\\*\")},{token:\"literal\",regex:t(\"\\\\+\")},{token:\"literal\",regex:/\\+\\+[^+\\s].*?\\+\\+/},{token:\"literal\",regex:/\\$\\$.+?\\$\\$/},{token:\"literal\",regex:t(\"`\")},{token:\"keyword\",regex:t(\"^\")},{token:\"keyword\",regex:t(\"~\")},{token:\"keyword\",regex:/##?/},{token:\"keyword\",regex:/(?:\\B|^)``|\\b''/}]};var n={macro:\"constant.character\",tableBlock:\"doc.comment\",titleUnderline:\"markup.heading\",singleLineTitle:\"markup.heading\",pageBreak:\"string\",option:\"string.regexp\",otherBlock:\"markup.list\",literal:\"support.function\",optionalTitle:\"constant.numeric\",escape:\"constant.language.escape\",link:\"markup.underline.list\"};for(var r in this.$rules){var i=this.$rules[r];for(var s=i.length;s--;){var o=i[s];if(o.include||typeof o==\"string\"){var u=[s,1].concat(this.$rules[o.include||o]);o.noEscape&&(u=u.filter(function(e){return!e.next})),i.splice.apply(i,u)}else o.token in n&&(o.token=n[o.token])}}};r.inherits(s,i),t.AsciidocHighlightRules=s}),ace.define(\"ace/mode/folding/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:\\|={10,}|[\\.\\/=\\-~^+]{4,}\\s*$|={1,5} )/,this.singleLineHeadingRe=/^={1,5}(?=\\s+\\S)/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]==\"=\"?this.singleLineHeadingRe.test(r)?\"start\":e.getLine(n-1).length!=e.getLine(n).length?\"\":\"start\":e.bgTokenizer.getState(n)==\"dissallowDelimitedBlock\"?\"end\":\"start\":\"\"},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type}function d(){var t=f.value.match(p);if(t)return t[0].length;var r=c.indexOf(f.value[0])+1;return r==1&&e.getLine(n-1).length!=e.getLine(n).length?Infinity:r}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;var f,c=[\"=\",\"-\",\"~\",\"^\",\"+\"],h=\"markup.heading\",p=this.singleLineHeadingRe;if(l(n)==h){var v=d();while(++n<o){if(l(n)!=h)continue;var m=d();if(m<=v)break}var g=f&&f.value.match(this.singleLineHeadingRe);a=g?n-1:n-2;if(a>u)while(a>u&&(!l(a)||f.value[0]==\"[\"))a--;if(a>u){var y=e.getLine(a).length;return new s(u,i,a,y)}}else{var b=e.bgTokenizer.getState(n);if(b==\"dissallowDelimitedBlock\"){while(n-->0)if(e.bgTokenizer.getState(n).lastIndexOf(\"Block\")==-1)break;a=n+1;if(a<u){var y=e.getLine(n).length;return new s(a,5,u,i-5)}}else{while(++n<o)if(e.bgTokenizer.getState(n)==\"dissallowDelimitedBlock\")break;a=n;if(a>u){var y=e.getLine(n).length;return new s(u,5,a,y-5)}}}}}.call(o.prototype)}),ace.define(\"ace/mode/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asciidoc_highlight_rules\",\"ace/mode/folding/asciidoc\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./asciidoc_highlight_rules\").AsciidocHighlightRules,o=e(\"./folding/asciidoc\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,n){if(e==\"listblock\"){var r=/^((?:.+)?)([-+*][ ]+)/.exec(t);return r?(new Array(r[1].length+1)).join(\" \")+r[2]:\"\"}return this.$getIndent(t)},this.$id=\"ace/mode/asciidoc\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-asl.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/asl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"Default|DefinitionBlock|Device|Method|Else|ElseIf|For|Function|If|Include|Method|Return|Scope|Switch|Case|While|Break|BreakPoint|Continue|NoOp|Wait\",t=\"Add|And|Decrement|Divide|Increment|Index|LAnd|LEqual|LGreater|LGreaterEqual|LLess|LLessEqual|LNot|LNotEqual|LOr|Mod|Multiply|NAnd|NOr|Not|Or|RefOf|Revision|ShiftLeft|ShiftRight|Subtract|XOr|DerefOf\",n=\"AccessAs|Acquire|Alias|BankField|Buffer|Concatenate|ConcatenateResTemplate|CondRefOf|Connection|CopyObject|CreateBitField|CreateByteField|CreateDWordField|CreateField|CreateQWordField|CreateWordField|DataTableRegion|Debug|DMA|DWordIO|DWordMemory|DWordSpace|EisaId|EISAID|EndDependentFn|Event|ExtendedIO|ExtendedMemory|ExtendedSpace|External|Fatal|Field|FindSetLeftBit|FindSetRightBit|FixedDMA|FixedIO|Fprintf|FromBCD|GpioInt|GpioIo|I2CSerialBusV2|IndexField|Interrupt|IO|IRQ|IRQNoFlags|Load|LoadTable|Match|Memory32|Memory32Fixed|Mid|Mutex|Name|Notify|Offset|ObjectType|OperationRegion|Package|PowerResource|Printf|QWordIO|QWordMemory|QWordSpace|RawDataBuffer|Register|Release|Reset|ResourceTemplate|Signal|SizeOf|Sleep|SPISerialBusV2|Stall|StartDependentFn|StartDependentFnNoPri|Store|ThermalZone|Timer|ToBCD|ToBuffer|ToDecimalString|ToInteger|ToPLD|ToString|ToUUID|UARTSerialBusV2|Unicode|Unload|VendorLong|VendorShort|WordBusNumber|WordIO|WordSpace\",r=\"AttribQuick|AttribSendReceive|AttribByte|AttribBytes|AttribRawBytes|AttribRawProcessBytes|AttribWord|AttribBlock|AttribProcessCall|AttribBlockProcessCall|AnyAcc|ByteAcc|WordAcc|DWordAcc|QWordAcc|BufferAcc|AddressRangeMemory|AddressRangeReserved|AddressRangeNVS|AddressRangeACPI|RegionSpaceKeyword|FFixedHW|PCC|AddressingMode7Bit|AddressingMode10Bit|DataBitsFive|DataBitsSix|DataBitsSeven|DataBitsEight|DataBitsNine|BusMaster|NotBusMaster|ClockPhaseFirst|ClockPhaseSecond|ClockPolarityLow|ClockPolarityHigh|SubDecode|PosDecode|BigEndianing|LittleEndian|FlowControlNone|FlowControlXon|FlowControlHardware|Edge|Level|ActiveHigh|ActiveLow|ActiveBoth|Decode16|Decode10|IoRestrictionNone|IoRestrictionInputOnly|IoRestrictionOutputOnly|IoRestrictionNoneAndPreserve|Lock|NoLock|MTR|MEQ|MLE|MLT|MGE|MGT|MaxFixed|MaxNotFixed|Cacheable|WriteCombining|Prefetchable|NonCacheable|MinFixed|MinNotFixed|ParityTypeNone|ParityTypeSpace|ParityTypeMark|ParityTypeOdd|ParityTypeEven|PullDefault|PullUp|PullDown|PullNone|PolarityHigh|PolarityLow|ISAOnlyRanges|NonISAOnlyRanges|EntireRange|ReadWrite|ReadOnly|UserDefRegionSpace|SystemIO|SystemMemory|PCI_Config|EmbeddedControl|SMBus|SystemCMOS|PciBarTarget|IPMI|GeneralPurposeIO|GenericSerialBus|ResourceConsumer|ResourceProducer|Serialized|NotSerialized|Shared|Exclusive|SharedAndWake|ExclusiveAndWake|ControllerInitiated|DeviceInitiated|StopBitsZero|StopBitsOne|StopBitsOnePlusHalf|StopBitsTwo|Width8Bit|Width16Bit|Width32Bit|Width64Bit|Width128Bit|Width256Bit|SparseTranslation|DenseTranslation|TypeTranslation|TypeStatic|Preserve|WriteAsOnes|WriteAsZeros|Transfer8|Transfer16|Transfer8_16|ThreeWireMode|FourWireMode\",s=\"UnknownObj|IntObj|StrObj|BuffObj|PkgObj|FieldUnitObj|DeviceObj|EventObj|MethodObj|MutexObj|OpRegionObj|PowerResObj|ProcessorObj|ThermalZoneObj|BuffFieldObj|DDBHandleObj\",o=\"__FILE__|__PATH__|__LINE__|__DATE__|__IASL__\",u=\"Memory24|Processor\",a=this.createKeywordMapper({keyword:e,\"keyword.operator\":t,\"function.buildin\":n,\"constant.language\":o,\"storage.type\":s,\"constant.character\":r,\"invalid.deprecated\":u},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\[\",next:\"ignoredfield\"},{token:\"variable\",regex:\"\\\\Local[0-7]|\\\\Arg[0-6]\"},{token:\"keyword\",regex:\"#\\\\s*(?:define|elif|else|endif|error|if|ifdef|ifndef|include|includebuffer|line|pragma|undef|warning)\\\\b\",next:\"directive\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"constant.character\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/(One(s)?|Zero|True|False|[0-9]+)\\b/},{token:a,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"/|!|\\\\$|%|&|\\\\||\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|\\\\^|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\|=\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],ignoredfield:[{token:\"comment\",regex:\"\\\\]\",next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>*s\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]*s',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.ASLHighlightRules=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/asl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asl_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./asl_highlight_rules\").ASLHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.$id=\"ace/mode/asl\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-assembly_x86.js",
    "content": "ace.define(\"ace/mode/assembly_x86_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.control.assembly\",regex:\"\\\\b(?:aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vtestps|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(?:n?e|n?z)?|call|j(?:mp|n?e|ge?|ae?|le?|be?|n?o|n?z))\\\\b\",caseInsensitive:!0},{token:\"variable.parameter.register.assembly\",regex:\"\\\\b(?:CS|DS|ES|FS|GS|SS|RAX|EAX|RBX|EBX|RCX|ECX|RDX|EDX|RCX|RIP|EIP|IP|RSP|ESP|SP|RSI|ESI|SI|RDI|EDI|DI|RFLAGS|EFLAGS|FLAGS|R8-15|(?:Y|X)MM(?:[0-9]|10|11|12|13|14|15)|(?:A|B|C|D)(?:X|H|L)|CR(?:[0-4]|DR(?:[0-7]|TR6|TR7|EFER)))\\\\b\",caseInsensitive:!0},{token:\"constant.character.decimal.assembly\",regex:\"\\\\b[0-9]+\\\\b\"},{token:\"constant.character.hexadecimal.assembly\",regex:\"\\\\b0x[A-F0-9]+\\\\b\",caseInsensitive:!0},{token:\"constant.character.hexadecimal.assembly\",regex:\"\\\\b[A-F0-9]+h\\\\b\",caseInsensitive:!0},{token:\"string.assembly\",regex:/'([^\\\\']|\\\\.)*'/},{token:\"string.assembly\",regex:/\"([^\\\\\"]|\\\\.)*\"/},{token:\"support.function.directive.assembly\",regex:\"^\\\\[\",push:[{token:\"support.function.directive.assembly\",regex:\"\\\\]$\",next:\"pop\"},{defaultToken:\"support.function.directive.assembly\"}]},{token:[\"support.function.directive.assembly\",\"support.function.directive.assembly\",\"entity.name.function.assembly\"],regex:\"(^struc)( )([_a-zA-Z][_a-zA-Z0-9]*)\"},{token:\"support.function.directive.assembly\",regex:\"^endstruc\\\\b\"},{token:[\"support.function.directive.assembly\",\"entity.name.function.assembly\",\"support.function.directive.assembly\",\"constant.character.assembly\"],regex:\"^(%macro )([_a-zA-Z][_a-zA-Z0-9]*)( )([0-9]+)\"},{token:\"support.function.directive.assembly\",regex:\"^%endmacro\"},{token:[\"text\",\"support.function.directive.assembly\",\"text\",\"entity.name.function.assembly\"],regex:\"(\\\\s*)(%define|%xdefine|%idefine|%undef|%assign|%defstr|%strcat|%strlen|%substr|%00|%0|%rotate|%rep|%endrep|%include|\\\\$\\\\$|\\\\$|%unmacro|%if|%elif|%else|%endif|%(?:el)?ifdef|%(?:el)?ifmacro|%(?:el)?ifctx|%(?:el)?ifidn|%(?:el)?ifidni|%(?:el)?ifid|%(?:el)?ifnum|%(?:el)?ifstr|%(?:el)?iftoken|%(?:el)?ifempty|%(?:el)?ifenv|%pathsearch|%depend|%use|%push|%pop|%repl|%arg|%stacksize|%local|%error|%warning|%fatal|%line|%!|%comment|%endcomment|__NASM_VERSION_ID__|__NASM_VER__|__FILE__|__LINE__|__BITS__|__OUTPUT_FORMAT__|__DATE__|__TIME__|__DATE_NUM__|_TIME__NUM__|__UTC_DATE__|__UTC_TIME__|__UTC_DATE_NUM__|__UTC_TIME_NUM__|__POSIX_TIME__|__PASS__|ISTRUC|AT|IEND|BITS 16|BITS 32|BITS 64|USE16|USE32|__SECT__|ABSOLUTE|EXTERN|GLOBAL|COMMON|CPU|FLOAT)\\\\b( ?)((?:[_a-zA-Z][_a-zA-Z0-9]*)?)\",caseInsensitive:!0},{token:\"support.function.directive.assembly\",regex:\"\\\\b(?:d[bwdqtoy]|res[bwdqto]|equ|times|align|alignb|sectalign|section|ptr|byte|word|dword|qword|incbin)\\\\b\",caseInsensitive:!0},{token:\"entity.name.function.assembly\",regex:\"^\\\\s*%%[\\\\w.]+?:$\"},{token:\"entity.name.function.assembly\",regex:\"^\\\\s*%\\\\$[\\\\w.]+?:$\"},{token:\"entity.name.function.assembly\",regex:\"^[\\\\w.]+?:\"},{token:\"entity.name.function.assembly\",regex:\"^[\\\\w.]+?\\\\b\"},{token:\"comment.assembly\",regex:\";.*$\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"asm\"],name:\"Assembly x86\",scopeName:\"source.assembly\"},r.inherits(s,i),t.AssemblyX86HighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/assembly_x86\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/assembly_x86_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./assembly_x86_highlight_rules\").AssemblyX86HighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=[\";\"],this.$id=\"ace/mode/assembly_x86\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-autohotkey.js",
    "content": "ace.define(\"ace/mode/autohotkey_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"And|ByRef|Case|Const|ContinueCase|ContinueLoop|Default|Dim|Do|Else|ElseIf|EndFunc|EndIf|EndSelect|EndSwitch|EndWith|Enum|Exit|ExitLoop|False|For|Func|Global|If|In|Local|Next|Not|Or|ReDim|Return|Select|Step|Switch|Then|To|True|Until|WEnd|While|With|Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitRotate|BitShift|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|ControlTreeView|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCallbackFree|DllCallbackGetPtr|DllCallbackRegister|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFSLink|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GUICreate|GUICtrlCreateAvi|GUICtrlCreateButton|GUICtrlCreateCheckbox|GUICtrlCreateCombo|GUICtrlCreateContextMenu|GUICtrlCreateDate|GUICtrlCreateDummy|GUICtrlCreateEdit|GUICtrlCreateGraphic|GUICtrlCreateGroup|GUICtrlCreateIcon|GUICtrlCreateInput|GUICtrlCreateLabel|GUICtrlCreateList|GUICtrlCreateListView|GUICtrlCreateListViewItem|GUICtrlCreateMenu|GUICtrlCreateMenuItem|GUICtrlCreateMonthCal|GUICtrlCreateObj|GUICtrlCreatePic|GUICtrlCreateProgress|GUICtrlCreateRadio|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTabItem|GUICtrlCreateTreeView|GUICtrlCreateTreeViewItem|GUICtrlCreateUpdown|GUICtrlDelete|GUICtrlGetHandle|GUICtrlGetState|GUICtrlRead|GUICtrlRecvMsg|GUICtrlRegisterListViewSort|GUICtrlSendMsg|GUICtrlSendToDummy|GUICtrlSetBkColor|GUICtrlSetColor|GUICtrlSetCursor|GUICtrlSetData|GUICtrlSetFont|GUICtrlSetDefColor|GUICtrlSetDefBkColor|GUICtrlSetGraphic|GUICtrlSetImage|GUICtrlSetLimit|GUICtrlSetOnEvent|GUICtrlSetPos|GUICtrlSetResizing|GUICtrlSetState|GUICtrlSetStyle|GUICtrlSetTip|GUIDelete|GUIGetCursorInfo|GUIGetMsg|GUIGetStyle|GUIRegisterMsg|GUISetAccelerators()|GUISetBkColor|GUISetCoord|GUISetCursor|GUISetFont|GUISetHelp|GUISetIcon|GUISetOnEvent|GUISetState|GUISetStyle|GUIStartGroup|GUISwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsPtr|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Opt|Ping|PixelChecksum|PixelGetColor|PixelSearch|PluginClose|PluginOpen|ProcessClose|ProcessExists|ProcessGetStats|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProgressOn|ProgressSet|Ptr|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAs|RunAsWait|RunWait|Send|SendKeepActive|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdioClose|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPRecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|UDPShutdown|UDPStartup|VarGetType|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive|ArrayAdd|ArrayBinarySearch|ArrayConcatenate|ArrayDelete|ArrayDisplay|ArrayFindAll|ArrayInsert|ArrayMax|ArrayMaxIndex|ArrayMin|ArrayMinIndex|ArrayPop|ArrayPush|ArrayReverse|ArraySearch|ArraySort|ArraySwap|ArrayToClip|ArrayToString|ArrayTrim|ChooseColor|ChooseFont|ClipBoard_ChangeChain|ClipBoard_Close|ClipBoard_CountFormats|ClipBoard_Empty|ClipBoard_EnumFormats|ClipBoard_FormatStr|ClipBoard_GetData|ClipBoard_GetDataEx|ClipBoard_GetFormatName|ClipBoard_GetOpenWindow|ClipBoard_GetOwner|ClipBoard_GetPriorityFormat|ClipBoard_GetSequenceNumber|ClipBoard_GetViewer|ClipBoard_IsFormatAvailable|ClipBoard_Open|ClipBoard_RegisterFormat|ClipBoard_SetData|ClipBoard_SetDataEx|ClipBoard_SetViewer|ClipPutFile|ColorConvertHSLtoRGB|ColorConvertRGBtoHSL|ColorGetBlue|ColorGetGreen|ColorGetRed|Date_Time_CompareFileTime|Date_Time_DOSDateTimeToArray|Date_Time_DOSDateTimeToFileTime|Date_Time_DOSDateTimeToStr|Date_Time_DOSDateToArray|Date_Time_DOSDateToStr|Date_Time_DOSTimeToArray|Date_Time_DOSTimeToStr|Date_Time_EncodeFileTime|Date_Time_EncodeSystemTime|Date_Time_FileTimeToArray|Date_Time_FileTimeToDOSDateTime|Date_Time_FileTimeToLocalFileTime|Date_Time_FileTimeToStr|Date_Time_FileTimeToSystemTime|Date_Time_GetFileTime|Date_Time_GetLocalTime|Date_Time_GetSystemTime|Date_Time_GetSystemTimeAdjustment|Date_Time_GetSystemTimeAsFileTime|Date_Time_GetSystemTimes|Date_Time_GetTickCount|Date_Time_GetTimeZoneInformation|Date_Time_LocalFileTimeToFileTime|Date_Time_SetFileTime|Date_Time_SetLocalTime|Date_Time_SetSystemTime|Date_Time_SetSystemTimeAdjustment|Date_Time_SetTimeZoneInformation|Date_Time_SystemTimeToArray|Date_Time_SystemTimeToDateStr|Date_Time_SystemTimeToDateTimeStr|Date_Time_SystemTimeToFileTime|Date_Time_SystemTimeToTimeStr|Date_Time_SystemTimeToTzSpecificLocalTime|Date_Time_TzSpecificLocalTimeToSystemTime|DateAdd|DateDayOfWeek|DateDaysInMonth|DateDiff|DateIsLeapYear|DateIsValid|DateTimeFormat|DateTimeSplit|DateToDayOfWeek|DateToDayOfWeekISO|DateToDayValue|DateToMonth|DayValueToDate|DebugBugReportEnv|DebugOut|DebugSetup|Degree|EventLog__Backup|EventLog__Clear|EventLog__Close|EventLog__Count|EventLog__DeregisterSource|EventLog__Full|EventLog__Notify|EventLog__Oldest|EventLog__Open|EventLog__OpenBackup|EventLog__Read|EventLog__RegisterSource|EventLog__Report|FileCountLines|FileCreate|FileListToArray|FilePrint|FileReadToArray|FileWriteFromArray|FileWriteLog|FileWriteToLine|GDIPlus_ArrowCapCreate|GDIPlus_ArrowCapDispose|GDIPlus_ArrowCapGetFillState|GDIPlus_ArrowCapGetHeight|GDIPlus_ArrowCapGetMiddleInset|GDIPlus_ArrowCapGetWidth|GDIPlus_ArrowCapSetFillState|GDIPlus_ArrowCapSetHeight|GDIPlus_ArrowCapSetMiddleInset|GDIPlus_ArrowCapSetWidth|GDIPlus_BitmapCloneArea|GDIPlus_BitmapCreateFromFile|GDIPlus_BitmapCreateFromGraphics|GDIPlus_BitmapCreateFromHBITMAP|GDIPlus_BitmapCreateHBITMAPFromBitmap|GDIPlus_BitmapDispose|GDIPlus_BitmapLockBits|GDIPlus_BitmapUnlockBits|GDIPlus_BrushClone|GDIPlus_BrushCreateSolid|GDIPlus_BrushDispose|GDIPlus_BrushGetType|GDIPlus_CustomLineCapDispose|GDIPlus_Decoders|GDIPlus_DecodersGetCount|GDIPlus_DecodersGetSize|GDIPlus_Encoders|GDIPlus_EncodersGetCLSID|GDIPlus_EncodersGetCount|GDIPlus_EncodersGetParamList|GDIPlus_EncodersGetParamListSize|GDIPlus_EncodersGetSize|GDIPlus_FontCreate|GDIPlus_FontDispose|GDIPlus_FontFamilyCreate|GDIPlus_FontFamilyDispose|GDIPlus_GraphicsClear|GDIPlus_GraphicsCreateFromHDC|GDIPlus_GraphicsCreateFromHWND|GDIPlus_GraphicsDispose|GDIPlus_GraphicsDrawArc|GDIPlus_GraphicsDrawBezier|GDIPlus_GraphicsDrawClosedCurve|GDIPlus_GraphicsDrawCurve|GDIPlus_GraphicsDrawEllipse|GDIPlus_GraphicsDrawImage|GDIPlus_GraphicsDrawImageRect|GDIPlus_GraphicsDrawImageRectRect|GDIPlus_GraphicsDrawLine|GDIPlus_GraphicsDrawPie|GDIPlus_GraphicsDrawPolygon|GDIPlus_GraphicsDrawRect|GDIPlus_GraphicsDrawString|GDIPlus_GraphicsDrawStringEx|GDIPlus_GraphicsFillClosedCurve|GDIPlus_GraphicsFillEllipse|GDIPlus_GraphicsFillPie|GDIPlus_GraphicsFillRect|GDIPlus_GraphicsGetDC|GDIPlus_GraphicsGetSmoothingMode|GDIPlus_GraphicsMeasureString|GDIPlus_GraphicsReleaseDC|GDIPlus_GraphicsSetSmoothingMode|GDIPlus_GraphicsSetTransform|GDIPlus_ImageDispose|GDIPlus_ImageGetGraphicsContext|GDIPlus_ImageGetHeight|GDIPlus_ImageGetWidth|GDIPlus_ImageLoadFromFile|GDIPlus_ImageSaveToFile|GDIPlus_ImageSaveToFileEx|GDIPlus_MatrixCreate|GDIPlus_MatrixDispose|GDIPlus_MatrixRotate|GDIPlus_ParamAdd|GDIPlus_ParamInit|GDIPlus_PenCreate|GDIPlus_PenDispose|GDIPlus_PenGetAlignment|GDIPlus_PenGetColor|GDIPlus_PenGetCustomEndCap|GDIPlus_PenGetDashCap|GDIPlus_PenGetDashStyle|GDIPlus_PenGetEndCap|GDIPlus_PenGetWidth|GDIPlus_PenSetAlignment|GDIPlus_PenSetColor|GDIPlus_PenSetCustomEndCap|GDIPlus_PenSetDashCap|GDIPlus_PenSetDashStyle|GDIPlus_PenSetEndCap|GDIPlus_PenSetWidth|GDIPlus_RectFCreate|GDIPlus_Shutdown|GDIPlus_Startup|GDIPlus_StringFormatCreate|GDIPlus_StringFormatDispose|GetIP|GUICtrlAVI_Close|GUICtrlAVI_Create|GUICtrlAVI_Destroy|GUICtrlAVI_Open|GUICtrlAVI_OpenEx|GUICtrlAVI_Play|GUICtrlAVI_Seek|GUICtrlAVI_Show|GUICtrlAVI_Stop|GUICtrlButton_Click|GUICtrlButton_Create|GUICtrlButton_Destroy|GUICtrlButton_Enable|GUICtrlButton_GetCheck|GUICtrlButton_GetFocus|GUICtrlButton_GetIdealSize|GUICtrlButton_GetImage|GUICtrlButton_GetImageList|GUICtrlButton_GetState|GUICtrlButton_GetText|GUICtrlButton_GetTextMargin|GUICtrlButton_SetCheck|GUICtrlButton_SetFocus|GUICtrlButton_SetImage|GUICtrlButton_SetImageList|GUICtrlButton_SetSize|GUICtrlButton_SetState|GUICtrlButton_SetStyle|GUICtrlButton_SetText|GUICtrlButton_SetTextMargin|GUICtrlButton_Show|GUICtrlComboBox_AddDir|GUICtrlComboBox_AddString|GUICtrlComboBox_AutoComplete|GUICtrlComboBox_BeginUpdate|GUICtrlComboBox_Create|GUICtrlComboBox_DeleteString|GUICtrlComboBox_Destroy|GUICtrlComboBox_EndUpdate|GUICtrlComboBox_FindString|GUICtrlComboBox_FindStringExact|GUICtrlComboBox_GetComboBoxInfo|GUICtrlComboBox_GetCount|GUICtrlComboBox_GetCurSel|GUICtrlComboBox_GetDroppedControlRect|GUICtrlComboBox_GetDroppedControlRectEx|GUICtrlComboBox_GetDroppedState|GUICtrlComboBox_GetDroppedWidth|GUICtrlComboBox_GetEditSel|GUICtrlComboBox_GetEditText|GUICtrlComboBox_GetExtendedUI|GUICtrlComboBox_GetHorizontalExtent|GUICtrlComboBox_GetItemHeight|GUICtrlComboBox_GetLBText|GUICtrlComboBox_GetLBTextLen|GUICtrlComboBox_GetList|GUICtrlComboBox_GetListArray|GUICtrlComboBox_GetLocale|GUICtrlComboBox_GetLocaleCountry|GUICtrlComboBox_GetLocaleLang|GUICtrlComboBox_GetLocalePrimLang|GUICtrlComboBox_GetLocaleSubLang|GUICtrlComboBox_GetMinVisible|GUICtrlComboBox_GetTopIndex|GUICtrlComboBox_InitStorage|GUICtrlComboBox_InsertString|GUICtrlComboBox_LimitText|GUICtrlComboBox_ReplaceEditSel|GUICtrlComboBox_ResetContent|GUICtrlComboBox_SelectString|GUICtrlComboBox_SetCurSel|GUICtrlComboBox_SetDroppedWidth|GUICtrlComboBox_SetEditSel|GUICtrlComboBox_SetEditText|GUICtrlComboBox_SetExtendedUI|GUICtrlComboBox_SetHorizontalExtent|GUICtrlComboBox_SetItemHeight|GUICtrlComboBox_SetMinVisible|GUICtrlComboBox_SetTopIndex|GUICtrlComboBox_ShowDropDown|GUICtrlComboBoxEx_AddDir|GUICtrlComboBoxEx_AddString|GUICtrlComboBoxEx_BeginUpdate|GUICtrlComboBoxEx_Create|GUICtrlComboBoxEx_CreateSolidBitMap|GUICtrlComboBoxEx_DeleteString|GUICtrlComboBoxEx_Destroy|GUICtrlComboBoxEx_EndUpdate|GUICtrlComboBoxEx_FindStringExact|GUICtrlComboBoxEx_GetComboBoxInfo|GUICtrlComboBoxEx_GetComboControl|GUICtrlComboBoxEx_GetCount|GUICtrlComboBoxEx_GetCurSel|GUICtrlComboBoxEx_GetDroppedControlRect|GUICtrlComboBoxEx_GetDroppedControlRectEx|GUICtrlComboBoxEx_GetDroppedState|GUICtrlComboBoxEx_GetDroppedWidth|GUICtrlComboBoxEx_GetEditControl|GUICtrlComboBoxEx_GetEditSel|GUICtrlComboBoxEx_GetEditText|GUICtrlComboBoxEx_GetExtendedStyle|GUICtrlComboBoxEx_GetExtendedUI|GUICtrlComboBoxEx_GetImageList|GUICtrlComboBoxEx_GetItem|GUICtrlComboBoxEx_GetItemEx|GUICtrlComboBoxEx_GetItemHeight|GUICtrlComboBoxEx_GetItemImage|GUICtrlComboBoxEx_GetItemIndent|GUICtrlComboBoxEx_GetItemOverlayImage|GUICtrlComboBoxEx_GetItemParam|GUICtrlComboBoxEx_GetItemSelectedImage|GUICtrlComboBoxEx_GetItemText|GUICtrlComboBoxEx_GetItemTextLen|GUICtrlComboBoxEx_GetList|GUICtrlComboBoxEx_GetListArray|GUICtrlComboBoxEx_GetLocale|GUICtrlComboBoxEx_GetLocaleCountry|GUICtrlComboBoxEx_GetLocaleLang|GUICtrlComboBoxEx_GetLocalePrimLang|GUICtrlComboBoxEx_GetLocaleSubLang|GUICtrlComboBoxEx_GetMinVisible|GUICtrlComboBoxEx_GetTopIndex|GUICtrlComboBoxEx_InitStorage|GUICtrlComboBoxEx_InsertString|GUICtrlComboBoxEx_LimitText|GUICtrlComboBoxEx_ReplaceEditSel|GUICtrlComboBoxEx_ResetContent|GUICtrlComboBoxEx_SetCurSel|GUICtrlComboBoxEx_SetDroppedWidth|GUICtrlComboBoxEx_SetEditSel|GUICtrlComboBoxEx_SetEditText|GUICtrlComboBoxEx_SetExtendedStyle|GUICtrlComboBoxEx_SetExtendedUI|GUICtrlComboBoxEx_SetImageList|GUICtrlComboBoxEx_SetItem|GUICtrlComboBoxEx_SetItemEx|GUICtrlComboBoxEx_SetItemHeight|GUICtrlComboBoxEx_SetItemImage|GUICtrlComboBoxEx_SetItemIndent|GUICtrlComboBoxEx_SetItemOverlayImage|GUICtrlComboBoxEx_SetItemParam|GUICtrlComboBoxEx_SetItemSelectedImage|GUICtrlComboBoxEx_SetMinVisible|GUICtrlComboBoxEx_SetTopIndex|GUICtrlComboBoxEx_ShowDropDown|GUICtrlDTP_Create|GUICtrlDTP_Destroy|GUICtrlDTP_GetMCColor|GUICtrlDTP_GetMCFont|GUICtrlDTP_GetMonthCal|GUICtrlDTP_GetRange|GUICtrlDTP_GetRangeEx|GUICtrlDTP_GetSystemTime|GUICtrlDTP_GetSystemTimeEx|GUICtrlDTP_SetFormat|GUICtrlDTP_SetMCColor|GUICtrlDTP_SetMCFont|GUICtrlDTP_SetRange|GUICtrlDTP_SetRangeEx|GUICtrlDTP_SetSystemTime|GUICtrlDTP_SetSystemTimeEx|GUICtrlEdit_AppendText|GUICtrlEdit_BeginUpdate|GUICtrlEdit_CanUndo|GUICtrlEdit_CharFromPos|GUICtrlEdit_Create|GUICtrlEdit_Destroy|GUICtrlEdit_EmptyUndoBuffer|GUICtrlEdit_EndUpdate|GUICtrlEdit_Find|GUICtrlEdit_FmtLines|GUICtrlEdit_GetFirstVisibleLine|GUICtrlEdit_GetLimitText|GUICtrlEdit_GetLine|GUICtrlEdit_GetLineCount|GUICtrlEdit_GetMargins|GUICtrlEdit_GetModify|GUICtrlEdit_GetPasswordChar|GUICtrlEdit_GetRECT|GUICtrlEdit_GetRECTEx|GUICtrlEdit_GetSel|GUICtrlEdit_GetText|GUICtrlEdit_GetTextLen|GUICtrlEdit_HideBalloonTip|GUICtrlEdit_InsertText|GUICtrlEdit_LineFromChar|GUICtrlEdit_LineIndex|GUICtrlEdit_LineLength|GUICtrlEdit_LineScroll|GUICtrlEdit_PosFromChar|GUICtrlEdit_ReplaceSel|GUICtrlEdit_Scroll|GUICtrlEdit_SetLimitText|GUICtrlEdit_SetMargins|GUICtrlEdit_SetModify|GUICtrlEdit_SetPasswordChar|GUICtrlEdit_SetReadOnly|GUICtrlEdit_SetRECT|GUICtrlEdit_SetRECTEx|GUICtrlEdit_SetRECTNP|GUICtrlEdit_SetRectNPEx|GUICtrlEdit_SetSel|GUICtrlEdit_SetTabStops|GUICtrlEdit_SetText|GUICtrlEdit_ShowBalloonTip|GUICtrlEdit_Undo|GUICtrlHeader_AddItem|GUICtrlHeader_ClearFilter|GUICtrlHeader_ClearFilterAll|GUICtrlHeader_Create|GUICtrlHeader_CreateDragImage|GUICtrlHeader_DeleteItem|GUICtrlHeader_Destroy|GUICtrlHeader_EditFilter|GUICtrlHeader_GetBitmapMargin|GUICtrlHeader_GetImageList|GUICtrlHeader_GetItem|GUICtrlHeader_GetItemAlign|GUICtrlHeader_GetItemBitmap|GUICtrlHeader_GetItemCount|GUICtrlHeader_GetItemDisplay|GUICtrlHeader_GetItemFlags|GUICtrlHeader_GetItemFormat|GUICtrlHeader_GetItemImage|GUICtrlHeader_GetItemOrder|GUICtrlHeader_GetItemParam|GUICtrlHeader_GetItemRect|GUICtrlHeader_GetItemRectEx|GUICtrlHeader_GetItemText|GUICtrlHeader_GetItemWidth|GUICtrlHeader_GetOrderArray|GUICtrlHeader_GetUnicodeFormat|GUICtrlHeader_HitTest|GUICtrlHeader_InsertItem|GUICtrlHeader_Layout|GUICtrlHeader_OrderToIndex|GUICtrlHeader_SetBitmapMargin|GUICtrlHeader_SetFilterChangeTimeout|GUICtrlHeader_SetHotDivider|GUICtrlHeader_SetImageList|GUICtrlHeader_SetItem|GUICtrlHeader_SetItemAlign|GUICtrlHeader_SetItemBitmap|GUICtrlHeader_SetItemDisplay|GUICtrlHeader_SetItemFlags|GUICtrlHeader_SetItemFormat|GUICtrlHeader_SetItemImage|GUICtrlHeader_SetItemOrder|GUICtrlHeader_SetItemParam|GUICtrlHeader_SetItemText|GUICtrlHeader_SetItemWidth|GUICtrlHeader_SetOrderArray|GUICtrlHeader_SetUnicodeFormat|GUICtrlIpAddress_ClearAddress|GUICtrlIpAddress_Create|GUICtrlIpAddress_Destroy|GUICtrlIpAddress_Get|GUICtrlIpAddress_GetArray|GUICtrlIpAddress_GetEx|GUICtrlIpAddress_IsBlank|GUICtrlIpAddress_Set|GUICtrlIpAddress_SetArray|GUICtrlIpAddress_SetEx|GUICtrlIpAddress_SetFocus|GUICtrlIpAddress_SetFont|GUICtrlIpAddress_SetRange|GUICtrlIpAddress_ShowHide|GUICtrlListBox_AddFile|GUICtrlListBox_AddString|GUICtrlListBox_BeginUpdate|GUICtrlListBox_Create|GUICtrlListBox_DeleteString|GUICtrlListBox_Destroy|GUICtrlListBox_Dir|GUICtrlListBox_EndUpdate|GUICtrlListBox_FindInText|GUICtrlListBox_FindString|GUICtrlListBox_GetAnchorIndex|GUICtrlListBox_GetCaretIndex|GUICtrlListBox_GetCount|GUICtrlListBox_GetCurSel|GUICtrlListBox_GetHorizontalExtent|GUICtrlListBox_GetItemData|GUICtrlListBox_GetItemHeight|GUICtrlListBox_GetItemRect|GUICtrlListBox_GetItemRectEx|GUICtrlListBox_GetListBoxInfo|GUICtrlListBox_GetLocale|GUICtrlListBox_GetLocaleCountry|GUICtrlListBox_GetLocaleLang|GUICtrlListBox_GetLocalePrimLang|GUICtrlListBox_GetLocaleSubLang|GUICtrlListBox_GetSel|GUICtrlListBox_GetSelCount|GUICtrlListBox_GetSelItems|GUICtrlListBox_GetSelItemsText|GUICtrlListBox_GetText|GUICtrlListBox_GetTextLen|GUICtrlListBox_GetTopIndex|GUICtrlListBox_InitStorage|GUICtrlListBox_InsertString|GUICtrlListBox_ItemFromPoint|GUICtrlListBox_ReplaceString|GUICtrlListBox_ResetContent|GUICtrlListBox_SelectString|GUICtrlListBox_SelItemRange|GUICtrlListBox_SelItemRangeEx|GUICtrlListBox_SetAnchorIndex|GUICtrlListBox_SetCaretIndex|GUICtrlListBox_SetColumnWidth|GUICtrlListBox_SetCurSel|GUICtrlListBox_SetHorizontalExtent|GUICtrlListBox_SetItemData|GUICtrlListBox_SetItemHeight|GUICtrlListBox_SetLocale|GUICtrlListBox_SetSel|GUICtrlListBox_SetTabStops|GUICtrlListBox_SetTopIndex|GUICtrlListBox_Sort|GUICtrlListBox_SwapString|GUICtrlListBox_UpdateHScroll|GUICtrlListView_AddArray|GUICtrlListView_AddColumn|GUICtrlListView_AddItem|GUICtrlListView_AddSubItem|GUICtrlListView_ApproximateViewHeight|GUICtrlListView_ApproximateViewRect|GUICtrlListView_ApproximateViewWidth|GUICtrlListView_Arrange|GUICtrlListView_BeginUpdate|GUICtrlListView_CancelEditLabel|GUICtrlListView_ClickItem|GUICtrlListView_CopyItems|GUICtrlListView_Create|GUICtrlListView_CreateDragImage|GUICtrlListView_CreateSolidBitMap|GUICtrlListView_DeleteAllItems|GUICtrlListView_DeleteColumn|GUICtrlListView_DeleteItem|GUICtrlListView_DeleteItemsSelected|GUICtrlListView_Destroy|GUICtrlListView_DrawDragImage|GUICtrlListView_EditLabel|GUICtrlListView_EnableGroupView|GUICtrlListView_EndUpdate|GUICtrlListView_EnsureVisible|GUICtrlListView_FindInText|GUICtrlListView_FindItem|GUICtrlListView_FindNearest|GUICtrlListView_FindParam|GUICtrlListView_FindText|GUICtrlListView_GetBkColor|GUICtrlListView_GetBkImage|GUICtrlListView_GetCallbackMask|GUICtrlListView_GetColumn|GUICtrlListView_GetColumnCount|GUICtrlListView_GetColumnOrder|GUICtrlListView_GetColumnOrderArray|GUICtrlListView_GetColumnWidth|GUICtrlListView_GetCounterPage|GUICtrlListView_GetEditControl|GUICtrlListView_GetExtendedListViewStyle|GUICtrlListView_GetGroupInfo|GUICtrlListView_GetGroupViewEnabled|GUICtrlListView_GetHeader|GUICtrlListView_GetHotCursor|GUICtrlListView_GetHotItem|GUICtrlListView_GetHoverTime|GUICtrlListView_GetImageList|GUICtrlListView_GetISearchString|GUICtrlListView_GetItem|GUICtrlListView_GetItemChecked|GUICtrlListView_GetItemCount|GUICtrlListView_GetItemCut|GUICtrlListView_GetItemDropHilited|GUICtrlListView_GetItemEx|GUICtrlListView_GetItemFocused|GUICtrlListView_GetItemGroupID|GUICtrlListView_GetItemImage|GUICtrlListView_GetItemIndent|GUICtrlListView_GetItemParam|GUICtrlListView_GetItemPosition|GUICtrlListView_GetItemPositionX|GUICtrlListView_GetItemPositionY|GUICtrlListView_GetItemRect|GUICtrlListView_GetItemRectEx|GUICtrlListView_GetItemSelected|GUICtrlListView_GetItemSpacing|GUICtrlListView_GetItemSpacingX|GUICtrlListView_GetItemSpacingY|GUICtrlListView_GetItemState|GUICtrlListView_GetItemStateImage|GUICtrlListView_GetItemText|GUICtrlListView_GetItemTextArray|GUICtrlListView_GetItemTextString|GUICtrlListView_GetNextItem|GUICtrlListView_GetNumberOfWorkAreas|GUICtrlListView_GetOrigin|GUICtrlListView_GetOriginX|GUICtrlListView_GetOriginY|GUICtrlListView_GetOutlineColor|GUICtrlListView_GetSelectedColumn|GUICtrlListView_GetSelectedCount|GUICtrlListView_GetSelectedIndices|GUICtrlListView_GetSelectionMark|GUICtrlListView_GetStringWidth|GUICtrlListView_GetSubItemRect|GUICtrlListView_GetTextBkColor|GUICtrlListView_GetTextColor|GUICtrlListView_GetToolTips|GUICtrlListView_GetTopIndex|GUICtrlListView_GetUnicodeFormat|GUICtrlListView_GetView|GUICtrlListView_GetViewDetails|GUICtrlListView_GetViewLarge|GUICtrlListView_GetViewList|GUICtrlListView_GetViewRect|GUICtrlListView_GetViewSmall|GUICtrlListView_GetViewTile|GUICtrlListView_HideColumn|GUICtrlListView_HitTest|GUICtrlListView_InsertColumn|GUICtrlListView_InsertGroup|GUICtrlListView_InsertItem|GUICtrlListView_JustifyColumn|GUICtrlListView_MapIDToIndex|GUICtrlListView_MapIndexToID|GUICtrlListView_RedrawItems|GUICtrlListView_RegisterSortCallBack|GUICtrlListView_RemoveAllGroups|GUICtrlListView_RemoveGroup|GUICtrlListView_Scroll|GUICtrlListView_SetBkColor|GUICtrlListView_SetBkImage|GUICtrlListView_SetCallBackMask|GUICtrlListView_SetColumn|GUICtrlListView_SetColumnOrder|GUICtrlListView_SetColumnOrderArray|GUICtrlListView_SetColumnWidth|GUICtrlListView_SetExtendedListViewStyle|GUICtrlListView_SetGroupInfo|GUICtrlListView_SetHotItem|GUICtrlListView_SetHoverTime|GUICtrlListView_SetIconSpacing|GUICtrlListView_SetImageList|GUICtrlListView_SetItem|GUICtrlListView_SetItemChecked|GUICtrlListView_SetItemCount|GUICtrlListView_SetItemCut|GUICtrlListView_SetItemDropHilited|GUICtrlListView_SetItemEx|GUICtrlListView_SetItemFocused|GUICtrlListView_SetItemGroupID|GUICtrlListView_SetItemImage|GUICtrlListView_SetItemIndent|GUICtrlListView_SetItemParam|GUICtrlListView_SetItemPosition|GUICtrlListView_SetItemPosition32|GUICtrlListView_SetItemSelected|GUICtrlListView_SetItemState|GUICtrlListView_SetItemStateImage|GUICtrlListView_SetItemText|GUICtrlListView_SetOutlineColor|GUICtrlListView_SetSelectedColumn|GUICtrlListView_SetSelectionMark|GUICtrlListView_SetTextBkColor|GUICtrlListView_SetTextColor|GUICtrlListView_SetToolTips|GUICtrlListView_SetUnicodeFormat|GUICtrlListView_SetView|GUICtrlListView_SetWorkAreas|GUICtrlListView_SimpleSort|GUICtrlListView_SortItems|GUICtrlListView_SubItemHitTest|GUICtrlListView_UnRegisterSortCallBack|GUICtrlMenu_AddMenuItem|GUICtrlMenu_AppendMenu|GUICtrlMenu_CheckMenuItem|GUICtrlMenu_CheckRadioItem|GUICtrlMenu_CreateMenu|GUICtrlMenu_CreatePopup|GUICtrlMenu_DeleteMenu|GUICtrlMenu_DestroyMenu|GUICtrlMenu_DrawMenuBar|GUICtrlMenu_EnableMenuItem|GUICtrlMenu_FindItem|GUICtrlMenu_FindParent|GUICtrlMenu_GetItemBmp|GUICtrlMenu_GetItemBmpChecked|GUICtrlMenu_GetItemBmpUnchecked|GUICtrlMenu_GetItemChecked|GUICtrlMenu_GetItemCount|GUICtrlMenu_GetItemData|GUICtrlMenu_GetItemDefault|GUICtrlMenu_GetItemDisabled|GUICtrlMenu_GetItemEnabled|GUICtrlMenu_GetItemGrayed|GUICtrlMenu_GetItemHighlighted|GUICtrlMenu_GetItemID|GUICtrlMenu_GetItemInfo|GUICtrlMenu_GetItemRect|GUICtrlMenu_GetItemRectEx|GUICtrlMenu_GetItemState|GUICtrlMenu_GetItemStateEx|GUICtrlMenu_GetItemSubMenu|GUICtrlMenu_GetItemText|GUICtrlMenu_GetItemType|GUICtrlMenu_GetMenu|GUICtrlMenu_GetMenuBackground|GUICtrlMenu_GetMenuBarInfo|GUICtrlMenu_GetMenuContextHelpID|GUICtrlMenu_GetMenuData|GUICtrlMenu_GetMenuDefaultItem|GUICtrlMenu_GetMenuHeight|GUICtrlMenu_GetMenuInfo|GUICtrlMenu_GetMenuStyle|GUICtrlMenu_GetSystemMenu|GUICtrlMenu_InsertMenuItem|GUICtrlMenu_InsertMenuItemEx|GUICtrlMenu_IsMenu|GUICtrlMenu_LoadMenu|GUICtrlMenu_MapAccelerator|GUICtrlMenu_MenuItemFromPoint|GUICtrlMenu_RemoveMenu|GUICtrlMenu_SetItemBitmaps|GUICtrlMenu_SetItemBmp|GUICtrlMenu_SetItemBmpChecked|GUICtrlMenu_SetItemBmpUnchecked|GUICtrlMenu_SetItemChecked|GUICtrlMenu_SetItemData|GUICtrlMenu_SetItemDefault|GUICtrlMenu_SetItemDisabled|GUICtrlMenu_SetItemEnabled|GUICtrlMenu_SetItemGrayed|GUICtrlMenu_SetItemHighlighted|GUICtrlMenu_SetItemID|GUICtrlMenu_SetItemInfo|GUICtrlMenu_SetItemState|GUICtrlMenu_SetItemSubMenu|GUICtrlMenu_SetItemText|GUICtrlMenu_SetItemType|GUICtrlMenu_SetMenu|GUICtrlMenu_SetMenuBackground|GUICtrlMenu_SetMenuContextHelpID|GUICtrlMenu_SetMenuData|GUICtrlMenu_SetMenuDefaultItem|GUICtrlMenu_SetMenuHeight|GUICtrlMenu_SetMenuInfo|GUICtrlMenu_SetMenuStyle|GUICtrlMenu_TrackPopupMenu|GUICtrlMonthCal_Create|GUICtrlMonthCal_Destroy|GUICtrlMonthCal_GetColor|GUICtrlMonthCal_GetColorArray|GUICtrlMonthCal_GetCurSel|GUICtrlMonthCal_GetCurSelStr|GUICtrlMonthCal_GetFirstDOW|GUICtrlMonthCal_GetFirstDOWStr|GUICtrlMonthCal_GetMaxSelCount|GUICtrlMonthCal_GetMaxTodayWidth|GUICtrlMonthCal_GetMinReqHeight|GUICtrlMonthCal_GetMinReqRect|GUICtrlMonthCal_GetMinReqRectArray|GUICtrlMonthCal_GetMinReqWidth|GUICtrlMonthCal_GetMonthDelta|GUICtrlMonthCal_GetMonthRange|GUICtrlMonthCal_GetMonthRangeMax|GUICtrlMonthCal_GetMonthRangeMaxStr|GUICtrlMonthCal_GetMonthRangeMin|GUICtrlMonthCal_GetMonthRangeMinStr|GUICtrlMonthCal_GetMonthRangeSpan|GUICtrlMonthCal_GetRange|GUICtrlMonthCal_GetRangeMax|GUICtrlMonthCal_GetRangeMaxStr|GUICtrlMonthCal_GetRangeMin|GUICtrlMonthCal_GetRangeMinStr|GUICtrlMonthCal_GetSelRange|GUICtrlMonthCal_GetSelRangeMax|GUICtrlMonthCal_GetSelRangeMaxStr|GUICtrlMonthCal_GetSelRangeMin|GUICtrlMonthCal_GetSelRangeMinStr|GUICtrlMonthCal_GetToday|GUICtrlMonthCal_GetTodayStr|GUICtrlMonthCal_GetUnicodeFormat|GUICtrlMonthCal_HitTest|GUICtrlMonthCal_SetColor|GUICtrlMonthCal_SetCurSel|GUICtrlMonthCal_SetDayState|GUICtrlMonthCal_SetFirstDOW|GUICtrlMonthCal_SetMaxSelCount|GUICtrlMonthCal_SetMonthDelta|GUICtrlMonthCal_SetRange|GUICtrlMonthCal_SetSelRange|GUICtrlMonthCal_SetToday|GUICtrlMonthCal_SetUnicodeFormat|GUICtrlRebar_AddBand|GUICtrlRebar_AddToolBarBand|GUICtrlRebar_BeginDrag|GUICtrlRebar_Create|GUICtrlRebar_DeleteBand|GUICtrlRebar_Destroy|GUICtrlRebar_DragMove|GUICtrlRebar_EndDrag|GUICtrlRebar_GetBandBackColor|GUICtrlRebar_GetBandBorders|GUICtrlRebar_GetBandBordersEx|GUICtrlRebar_GetBandChildHandle|GUICtrlRebar_GetBandChildSize|GUICtrlRebar_GetBandCount|GUICtrlRebar_GetBandForeColor|GUICtrlRebar_GetBandHeaderSize|GUICtrlRebar_GetBandID|GUICtrlRebar_GetBandIdealSize|GUICtrlRebar_GetBandLength|GUICtrlRebar_GetBandLParam|GUICtrlRebar_GetBandMargins|GUICtrlRebar_GetBandMarginsEx|GUICtrlRebar_GetBandRect|GUICtrlRebar_GetBandRectEx|GUICtrlRebar_GetBandStyle|GUICtrlRebar_GetBandStyleBreak|GUICtrlRebar_GetBandStyleChildEdge|GUICtrlRebar_GetBandStyleFixedBMP|GUICtrlRebar_GetBandStyleFixedSize|GUICtrlRebar_GetBandStyleGripperAlways|GUICtrlRebar_GetBandStyleHidden|GUICtrlRebar_GetBandStyleHideTitle|GUICtrlRebar_GetBandStyleNoGripper|GUICtrlRebar_GetBandStyleTopAlign|GUICtrlRebar_GetBandStyleUseChevron|GUICtrlRebar_GetBandStyleVariableHeight|GUICtrlRebar_GetBandText|GUICtrlRebar_GetBarHeight|GUICtrlRebar_GetBKColor|GUICtrlRebar_GetColorScheme|GUICtrlRebar_GetRowCount|GUICtrlRebar_GetRowHeight|GUICtrlRebar_GetTextColor|GUICtrlRebar_GetToolTips|GUICtrlRebar_GetUnicodeFormat|GUICtrlRebar_HitTest|GUICtrlRebar_IDToIndex|GUICtrlRebar_MaximizeBand|GUICtrlRebar_MinimizeBand|GUICtrlRebar_MoveBand|GUICtrlRebar_SetBandBackColor|GUICtrlRebar_SetBandForeColor|GUICtrlRebar_SetBandHeaderSize|GUICtrlRebar_SetBandID|GUICtrlRebar_SetBandIdealSize|GUICtrlRebar_SetBandLength|GUICtrlRebar_SetBandLParam|GUICtrlRebar_SetBandStyle|GUICtrlRebar_SetBandStyleBreak|GUICtrlRebar_SetBandStyleChildEdge|GUICtrlRebar_SetBandStyleFixedBMP|GUICtrlRebar_SetBandStyleFixedSize|GUICtrlRebar_SetBandStyleGripperAlways|GUICtrlRebar_SetBandStyleHidden|GUICtrlRebar_SetBandStyleHideTitle|GUICtrlRebar_SetBandStyleNoGripper|GUICtrlRebar_SetBandStyleTopAlign|GUICtrlRebar_SetBandStyleUseChevron|GUICtrlRebar_SetBandStyleVariableHeight|GUICtrlRebar_SetBandText|GUICtrlRebar_SetBKColor|GUICtrlRebar_SetColorScheme|GUICtrlRebar_SetTextColor|GUICtrlRebar_SetToolTips|GUICtrlRebar_SetUnicodeFormat|GUICtrlRebar_ShowBand|GUICtrlSlider_ClearSel|GUICtrlSlider_ClearTics|GUICtrlSlider_Create|GUICtrlSlider_Destroy|GUICtrlSlider_GetBuddy|GUICtrlSlider_GetChannelRect|GUICtrlSlider_GetLineSize|GUICtrlSlider_GetNumTics|GUICtrlSlider_GetPageSize|GUICtrlSlider_GetPos|GUICtrlSlider_GetPTics|GUICtrlSlider_GetRange|GUICtrlSlider_GetRangeMax|GUICtrlSlider_GetRangeMin|GUICtrlSlider_GetSel|GUICtrlSlider_GetSelEnd|GUICtrlSlider_GetSelStart|GUICtrlSlider_GetThumbLength|GUICtrlSlider_GetThumbRect|GUICtrlSlider_GetThumbRectEx|GUICtrlSlider_GetTic|GUICtrlSlider_GetTicPos|GUICtrlSlider_GetToolTips|GUICtrlSlider_GetUnicodeFormat|GUICtrlSlider_SetBuddy|GUICtrlSlider_SetLineSize|GUICtrlSlider_SetPageSize|GUICtrlSlider_SetPos|GUICtrlSlider_SetRange|GUICtrlSlider_SetRangeMax|GUICtrlSlider_SetRangeMin|GUICtrlSlider_SetSel|GUICtrlSlider_SetSelEnd|GUICtrlSlider_SetSelStart|GUICtrlSlider_SetThumbLength|GUICtrlSlider_SetTic|GUICtrlSlider_SetTicFreq|GUICtrlSlider_SetTipSide|GUICtrlSlider_SetToolTips|GUICtrlSlider_SetUnicodeFormat|GUICtrlStatusBar_Create|GUICtrlStatusBar_Destroy|GUICtrlStatusBar_EmbedControl|GUICtrlStatusBar_GetBorders|GUICtrlStatusBar_GetBordersHorz|GUICtrlStatusBar_GetBordersRect|GUICtrlStatusBar_GetBordersVert|GUICtrlStatusBar_GetCount|GUICtrlStatusBar_GetHeight|GUICtrlStatusBar_GetIcon|GUICtrlStatusBar_GetParts|GUICtrlStatusBar_GetRect|GUICtrlStatusBar_GetRectEx|GUICtrlStatusBar_GetText|GUICtrlStatusBar_GetTextFlags|GUICtrlStatusBar_GetTextLength|GUICtrlStatusBar_GetTextLengthEx|GUICtrlStatusBar_GetTipText|GUICtrlStatusBar_GetUnicodeFormat|GUICtrlStatusBar_GetWidth|GUICtrlStatusBar_IsSimple|GUICtrlStatusBar_Resize|GUICtrlStatusBar_SetBkColor|GUICtrlStatusBar_SetIcon|GUICtrlStatusBar_SetMinHeight|GUICtrlStatusBar_SetParts|GUICtrlStatusBar_SetSimple|GUICtrlStatusBar_SetText|GUICtrlStatusBar_SetTipText|GUICtrlStatusBar_SetUnicodeFormat|GUICtrlStatusBar_ShowHide|GUICtrlTab_Create|GUICtrlTab_DeleteAllItems|GUICtrlTab_DeleteItem|GUICtrlTab_DeselectAll|GUICtrlTab_Destroy|GUICtrlTab_FindTab|GUICtrlTab_GetCurFocus|GUICtrlTab_GetCurSel|GUICtrlTab_GetDisplayRect|GUICtrlTab_GetDisplayRectEx|GUICtrlTab_GetExtendedStyle|GUICtrlTab_GetImageList|GUICtrlTab_GetItem|GUICtrlTab_GetItemCount|GUICtrlTab_GetItemImage|GUICtrlTab_GetItemParam|GUICtrlTab_GetItemRect|GUICtrlTab_GetItemRectEx|GUICtrlTab_GetItemState|GUICtrlTab_GetItemText|GUICtrlTab_GetRowCount|GUICtrlTab_GetToolTips|GUICtrlTab_GetUnicodeFormat|GUICtrlTab_HighlightItem|GUICtrlTab_HitTest|GUICtrlTab_InsertItem|GUICtrlTab_RemoveImage|GUICtrlTab_SetCurFocus|GUICtrlTab_SetCurSel|GUICtrlTab_SetExtendedStyle|GUICtrlTab_SetImageList|GUICtrlTab_SetItem|GUICtrlTab_SetItemImage|GUICtrlTab_SetItemParam|GUICtrlTab_SetItemSize|GUICtrlTab_SetItemState|GUICtrlTab_SetItemText|GUICtrlTab_SetMinTabWidth|GUICtrlTab_SetPadding|GUICtrlTab_SetToolTips|GUICtrlTab_SetUnicodeFormat|GUICtrlToolbar_AddBitmap|GUICtrlToolbar_AddButton|GUICtrlToolbar_AddButtonSep|GUICtrlToolbar_AddString|GUICtrlToolbar_ButtonCount|GUICtrlToolbar_CheckButton|GUICtrlToolbar_ClickAccel|GUICtrlToolbar_ClickButton|GUICtrlToolbar_ClickIndex|GUICtrlToolbar_CommandToIndex|GUICtrlToolbar_Create|GUICtrlToolbar_Customize|GUICtrlToolbar_DeleteButton|GUICtrlToolbar_Destroy|GUICtrlToolbar_EnableButton|GUICtrlToolbar_FindToolbar|GUICtrlToolbar_GetAnchorHighlight|GUICtrlToolbar_GetBitmapFlags|GUICtrlToolbar_GetButtonBitmap|GUICtrlToolbar_GetButtonInfo|GUICtrlToolbar_GetButtonInfoEx|GUICtrlToolbar_GetButtonParam|GUICtrlToolbar_GetButtonRect|GUICtrlToolbar_GetButtonRectEx|GUICtrlToolbar_GetButtonSize|GUICtrlToolbar_GetButtonState|GUICtrlToolbar_GetButtonStyle|GUICtrlToolbar_GetButtonText|GUICtrlToolbar_GetColorScheme|GUICtrlToolbar_GetDisabledImageList|GUICtrlToolbar_GetExtendedStyle|GUICtrlToolbar_GetHotImageList|GUICtrlToolbar_GetHotItem|GUICtrlToolbar_GetImageList|GUICtrlToolbar_GetInsertMark|GUICtrlToolbar_GetInsertMarkColor|GUICtrlToolbar_GetMaxSize|GUICtrlToolbar_GetMetrics|GUICtrlToolbar_GetPadding|GUICtrlToolbar_GetRows|GUICtrlToolbar_GetString|GUICtrlToolbar_GetStyle|GUICtrlToolbar_GetStyleAltDrag|GUICtrlToolbar_GetStyleCustomErase|GUICtrlToolbar_GetStyleFlat|GUICtrlToolbar_GetStyleList|GUICtrlToolbar_GetStyleRegisterDrop|GUICtrlToolbar_GetStyleToolTips|GUICtrlToolbar_GetStyleTransparent|GUICtrlToolbar_GetStyleWrapable|GUICtrlToolbar_GetTextRows|GUICtrlToolbar_GetToolTips|GUICtrlToolbar_GetUnicodeFormat|GUICtrlToolbar_HideButton|GUICtrlToolbar_HighlightButton|GUICtrlToolbar_HitTest|GUICtrlToolbar_IndexToCommand|GUICtrlToolbar_InsertButton|GUICtrlToolbar_InsertMarkHitTest|GUICtrlToolbar_IsButtonChecked|GUICtrlToolbar_IsButtonEnabled|GUICtrlToolbar_IsButtonHidden|GUICtrlToolbar_IsButtonHighlighted|GUICtrlToolbar_IsButtonIndeterminate|GUICtrlToolbar_IsButtonPressed|GUICtrlToolbar_LoadBitmap|GUICtrlToolbar_LoadImages|GUICtrlToolbar_MapAccelerator|GUICtrlToolbar_MoveButton|GUICtrlToolbar_PressButton|GUICtrlToolbar_SetAnchorHighlight|GUICtrlToolbar_SetBitmapSize|GUICtrlToolbar_SetButtonBitMap|GUICtrlToolbar_SetButtonInfo|GUICtrlToolbar_SetButtonInfoEx|GUICtrlToolbar_SetButtonParam|GUICtrlToolbar_SetButtonSize|GUICtrlToolbar_SetButtonState|GUICtrlToolbar_SetButtonStyle|GUICtrlToolbar_SetButtonText|GUICtrlToolbar_SetButtonWidth|GUICtrlToolbar_SetCmdID|GUICtrlToolbar_SetColorScheme|GUICtrlToolbar_SetDisabledImageList|GUICtrlToolbar_SetDrawTextFlags|GUICtrlToolbar_SetExtendedStyle|GUICtrlToolbar_SetHotImageList|GUICtrlToolbar_SetHotItem|GUICtrlToolbar_SetImageList|GUICtrlToolbar_SetIndent|GUICtrlToolbar_SetIndeterminate|GUICtrlToolbar_SetInsertMark|GUICtrlToolbar_SetInsertMarkColor|GUICtrlToolbar_SetMaxTextRows|GUICtrlToolbar_SetMetrics|GUICtrlToolbar_SetPadding|GUICtrlToolbar_SetParent|GUICtrlToolbar_SetRows|GUICtrlToolbar_SetStyle|GUICtrlToolbar_SetStyleAltDrag|GUICtrlToolbar_SetStyleCustomErase|GUICtrlToolbar_SetStyleFlat|GUICtrlToolbar_SetStyleList|GUICtrlToolbar_SetStyleRegisterDrop|GUICtrlToolbar_SetStyleToolTips|GUICtrlToolbar_SetStyleTransparent|GUICtrlToolbar_SetStyleWrapable|GUICtrlToolbar_SetToolTips|GUICtrlToolbar_SetUnicodeFormat|GUICtrlToolbar_SetWindowTheme|GUICtrlTreeView_Add|GUICtrlTreeView_AddChild|GUICtrlTreeView_AddChildFirst|GUICtrlTreeView_AddFirst|GUICtrlTreeView_BeginUpdate|GUICtrlTreeView_ClickItem|GUICtrlTreeView_Create|GUICtrlTreeView_CreateDragImage|GUICtrlTreeView_CreateSolidBitMap|GUICtrlTreeView_Delete|GUICtrlTreeView_DeleteAll|GUICtrlTreeView_DeleteChildren|GUICtrlTreeView_Destroy|GUICtrlTreeView_DisplayRect|GUICtrlTreeView_DisplayRectEx|GUICtrlTreeView_EditText|GUICtrlTreeView_EndEdit|GUICtrlTreeView_EndUpdate|GUICtrlTreeView_EnsureVisible|GUICtrlTreeView_Expand|GUICtrlTreeView_ExpandedOnce|GUICtrlTreeView_FindItem|GUICtrlTreeView_FindItemEx|GUICtrlTreeView_GetBkColor|GUICtrlTreeView_GetBold|GUICtrlTreeView_GetChecked|GUICtrlTreeView_GetChildCount|GUICtrlTreeView_GetChildren|GUICtrlTreeView_GetCount|GUICtrlTreeView_GetCut|GUICtrlTreeView_GetDropTarget|GUICtrlTreeView_GetEditControl|GUICtrlTreeView_GetExpanded|GUICtrlTreeView_GetFirstChild|GUICtrlTreeView_GetFirstItem|GUICtrlTreeView_GetFirstVisible|GUICtrlTreeView_GetFocused|GUICtrlTreeView_GetHeight|GUICtrlTreeView_GetImageIndex|GUICtrlTreeView_GetImageListIconHandle|GUICtrlTreeView_GetIndent|GUICtrlTreeView_GetInsertMarkColor|GUICtrlTreeView_GetISearchString|GUICtrlTreeView_GetItemByIndex|GUICtrlTreeView_GetItemHandle|GUICtrlTreeView_GetItemParam|GUICtrlTreeView_GetLastChild|GUICtrlTreeView_GetLineColor|GUICtrlTreeView_GetNext|GUICtrlTreeView_GetNextChild|GUICtrlTreeView_GetNextSibling|GUICtrlTreeView_GetNextVisible|GUICtrlTreeView_GetNormalImageList|GUICtrlTreeView_GetParentHandle|GUICtrlTreeView_GetParentParam|GUICtrlTreeView_GetPrev|GUICtrlTreeView_GetPrevChild|GUICtrlTreeView_GetPrevSibling|GUICtrlTreeView_GetPrevVisible|GUICtrlTreeView_GetScrollTime|GUICtrlTreeView_GetSelected|GUICtrlTreeView_GetSelectedImageIndex|GUICtrlTreeView_GetSelection|GUICtrlTreeView_GetSiblingCount|GUICtrlTreeView_GetState|GUICtrlTreeView_GetStateImageIndex|GUICtrlTreeView_GetStateImageList|GUICtrlTreeView_GetText|GUICtrlTreeView_GetTextColor|GUICtrlTreeView_GetToolTips|GUICtrlTreeView_GetTree|GUICtrlTreeView_GetUnicodeFormat|GUICtrlTreeView_GetVisible|GUICtrlTreeView_GetVisibleCount|GUICtrlTreeView_HitTest|GUICtrlTreeView_HitTestEx|GUICtrlTreeView_HitTestItem|GUICtrlTreeView_Index|GUICtrlTreeView_InsertItem|GUICtrlTreeView_IsFirstItem|GUICtrlTreeView_IsParent|GUICtrlTreeView_Level|GUICtrlTreeView_SelectItem|GUICtrlTreeView_SelectItemByIndex|GUICtrlTreeView_SetBkColor|GUICtrlTreeView_SetBold|GUICtrlTreeView_SetChecked|GUICtrlTreeView_SetCheckedByIndex|GUICtrlTreeView_SetChildren|GUICtrlTreeView_SetCut|GUICtrlTreeView_SetDropTarget|GUICtrlTreeView_SetFocused|GUICtrlTreeView_SetHeight|GUICtrlTreeView_SetIcon|GUICtrlTreeView_SetImageIndex|GUICtrlTreeView_SetIndent|GUICtrlTreeView_SetInsertMark|GUICtrlTreeView_SetInsertMarkColor|GUICtrlTreeView_SetItemHeight|GUICtrlTreeView_SetItemParam|GUICtrlTreeView_SetLineColor|GUICtrlTreeView_SetNormalImageList|GUICtrlTreeView_SetScrollTime|GUICtrlTreeView_SetSelected|GUICtrlTreeView_SetSelectedImageIndex|GUICtrlTreeView_SetState|GUICtrlTreeView_SetStateImageIndex|GUICtrlTreeView_SetStateImageList|GUICtrlTreeView_SetText|GUICtrlTreeView_SetTextColor|GUICtrlTreeView_SetToolTips|GUICtrlTreeView_SetUnicodeFormat|GUICtrlTreeView_Sort|GUIImageList_Add|GUIImageList_AddBitmap|GUIImageList_AddIcon|GUIImageList_AddMasked|GUIImageList_BeginDrag|GUIImageList_Copy|GUIImageList_Create|GUIImageList_Destroy|GUIImageList_DestroyIcon|GUIImageList_DragEnter|GUIImageList_DragLeave|GUIImageList_DragMove|GUIImageList_Draw|GUIImageList_DrawEx|GUIImageList_Duplicate|GUIImageList_EndDrag|GUIImageList_GetBkColor|GUIImageList_GetIcon|GUIImageList_GetIconHeight|GUIImageList_GetIconSize|GUIImageList_GetIconSizeEx|GUIImageList_GetIconWidth|GUIImageList_GetImageCount|GUIImageList_GetImageInfoEx|GUIImageList_Remove|GUIImageList_ReplaceIcon|GUIImageList_SetBkColor|GUIImageList_SetIconSize|GUIImageList_SetImageCount|GUIImageList_Swap|GUIScrollBars_EnableScrollBar|GUIScrollBars_GetScrollBarInfoEx|GUIScrollBars_GetScrollBarRect|GUIScrollBars_GetScrollBarRGState|GUIScrollBars_GetScrollBarXYLineButton|GUIScrollBars_GetScrollBarXYThumbBottom|GUIScrollBars_GetScrollBarXYThumbTop|GUIScrollBars_GetScrollInfo|GUIScrollBars_GetScrollInfoEx|GUIScrollBars_GetScrollInfoMax|GUIScrollBars_GetScrollInfoMin|GUIScrollBars_GetScrollInfoPage|GUIScrollBars_GetScrollInfoPos|GUIScrollBars_GetScrollInfoTrackPos|GUIScrollBars_GetScrollPos|GUIScrollBars_GetScrollRange|GUIScrollBars_Init|GUIScrollBars_ScrollWindow|GUIScrollBars_SetScrollInfo|GUIScrollBars_SetScrollInfoMax|GUIScrollBars_SetScrollInfoMin|GUIScrollBars_SetScrollInfoPage|GUIScrollBars_SetScrollInfoPos|GUIScrollBars_SetScrollRange|GUIScrollBars_ShowScrollBar|GUIToolTip_Activate|GUIToolTip_AddTool|GUIToolTip_AdjustRect|GUIToolTip_BitsToTTF|GUIToolTip_Create|GUIToolTip_DelTool|GUIToolTip_Destroy|GUIToolTip_EnumTools|GUIToolTip_GetBubbleHeight|GUIToolTip_GetBubbleSize|GUIToolTip_GetBubbleWidth|GUIToolTip_GetCurrentTool|GUIToolTip_GetDelayTime|GUIToolTip_GetMargin|GUIToolTip_GetMarginEx|GUIToolTip_GetMaxTipWidth|GUIToolTip_GetText|GUIToolTip_GetTipBkColor|GUIToolTip_GetTipTextColor|GUIToolTip_GetTitleBitMap|GUIToolTip_GetTitleText|GUIToolTip_GetToolCount|GUIToolTip_GetToolInfo|GUIToolTip_HitTest|GUIToolTip_NewToolRect|GUIToolTip_Pop|GUIToolTip_PopUp|GUIToolTip_SetDelayTime|GUIToolTip_SetMargin|GUIToolTip_SetMaxTipWidth|GUIToolTip_SetTipBkColor|GUIToolTip_SetTipTextColor|GUIToolTip_SetTitle|GUIToolTip_SetToolInfo|GUIToolTip_SetWindowTheme|GUIToolTip_ToolExists|GUIToolTip_ToolToArray|GUIToolTip_TrackActivate|GUIToolTip_TrackPosition|GUIToolTip_TTFToBits|GUIToolTip_Update|GUIToolTip_UpdateTipText|HexToString|IE_Example|IE_Introduction|IE_VersionInfo|IEAction|IEAttach|IEBodyReadHTML|IEBodyReadText|IEBodyWriteHTML|IECreate|IECreateEmbedded|IEDocGetObj|IEDocInsertHTML|IEDocInsertText|IEDocReadHTML|IEDocWriteHTML|IEErrorHandlerDeRegister|IEErrorHandlerRegister|IEErrorNotify|IEFormElementCheckBoxSelect|IEFormElementGetCollection|IEFormElementGetObjByName|IEFormElementGetValue|IEFormElementOptionSelect|IEFormElementRadioSelect|IEFormElementSetValue|IEFormGetCollection|IEFormGetObjByName|IEFormImageClick|IEFormReset|IEFormSubmit|IEFrameGetCollection|IEFrameGetObjByName|IEGetObjById|IEGetObjByName|IEHeadInsertEventScript|IEImgClick|IEImgGetCollection|IEIsFrameSet|IELinkClickByIndex|IELinkClickByText|IELinkGetCollection|IELoadWait|IELoadWaitTimeout|IENavigate|IEPropertyGet|IEPropertySet|IEQuit|IETableGetCollection|IETableWriteToArray|IETagNameAllGetCollection|IETagNameGetCollection|Iif|INetExplorerCapable|INetGetSource|INetMail|INetSmtpMail|IsPressed|MathCheckDiv|Max|MemGlobalAlloc|MemGlobalFree|MemGlobalLock|MemGlobalSize|MemGlobalUnlock|MemMoveMemory|MemMsgBox|MemShowError|MemVirtualAlloc|MemVirtualAllocEx|MemVirtualFree|MemVirtualFreeEx|Min|MouseTrap|NamedPipes_CallNamedPipe|NamedPipes_ConnectNamedPipe|NamedPipes_CreateNamedPipe|NamedPipes_CreatePipe|NamedPipes_DisconnectNamedPipe|NamedPipes_GetNamedPipeHandleState|NamedPipes_GetNamedPipeInfo|NamedPipes_PeekNamedPipe|NamedPipes_SetNamedPipeHandleState|NamedPipes_TransactNamedPipe|NamedPipes_WaitNamedPipe|Net_Share_ConnectionEnum|Net_Share_FileClose|Net_Share_FileEnum|Net_Share_FileGetInfo|Net_Share_PermStr|Net_Share_ResourceStr|Net_Share_SessionDel|Net_Share_SessionEnum|Net_Share_SessionGetInfo|Net_Share_ShareAdd|Net_Share_ShareCheck|Net_Share_ShareDel|Net_Share_ShareEnum|Net_Share_ShareGetInfo|Net_Share_ShareSetInfo|Net_Share_StatisticsGetSvr|Net_Share_StatisticsGetWrk|Now|NowCalc|NowCalcDate|NowDate|NowTime|PathFull|PathMake|PathSplit|ProcessGetName|ProcessGetPriority|Radian|ReplaceStringInFile|RunDOS|ScreenCapture_Capture|ScreenCapture_CaptureWnd|ScreenCapture_SaveImage|ScreenCapture_SetBMPFormat|ScreenCapture_SetJPGQuality|ScreenCapture_SetTIFColorDepth|ScreenCapture_SetTIFCompression|Security__AdjustTokenPrivileges|Security__GetAccountSid|Security__GetLengthSid|Security__GetTokenInformation|Security__ImpersonateSelf|Security__IsValidSid|Security__LookupAccountName|Security__LookupAccountSid|Security__LookupPrivilegeValue|Security__OpenProcessToken|Security__OpenThreadToken|Security__OpenThreadTokenEx|Security__SetPrivilege|Security__SidToStringSid|Security__SidTypeStr|Security__StringSidToSid|SendMessage|SendMessageA|SetDate|SetTime|Singleton|SoundClose|SoundLength|SoundOpen|SoundPause|SoundPlay|SoundPos|SoundResume|SoundSeek|SoundStatus|SoundStop|SQLite_Changes|SQLite_Close|SQLite_Display2DResult|SQLite_Encode|SQLite_ErrCode|SQLite_ErrMsg|SQLite_Escape|SQLite_Exec|SQLite_FetchData|SQLite_FetchNames|SQLite_GetTable|SQLite_GetTable2d|SQLite_LastInsertRowID|SQLite_LibVersion|SQLite_Open|SQLite_Query|SQLite_QueryFinalize|SQLite_QueryReset|SQLite_QuerySingleRow|SQLite_SaveMode|SQLite_SetTimeout|SQLite_Shutdown|SQLite_SQLiteExe|SQLite_Startup|SQLite_TotalChanges|StringAddComma|StringBetween|StringEncrypt|StringInsert|StringProper|StringRepeat|StringReverse|StringSplit|StringToHex|TCPIpToName|TempFile|TicksToTime|Timer_Diff|Timer_GetTimerID|Timer_Init|Timer_KillAllTimers|Timer_KillTimer|Timer_SetTimer|TimeToTicks|VersionCompare|viClose|viExecCommand|viFindGpib|viGpibBusReset|viGTL|viOpen|viSetAttribute|viSetTimeout|WeekNumberISO|WinAPI_AttachConsole|WinAPI_AttachThreadInput|WinAPI_Beep|WinAPI_BitBlt|WinAPI_CallNextHookEx|WinAPI_Check|WinAPI_ClientToScreen|WinAPI_CloseHandle|WinAPI_CommDlgExtendedError|WinAPI_CopyIcon|WinAPI_CreateBitmap|WinAPI_CreateCompatibleBitmap|WinAPI_CreateCompatibleDC|WinAPI_CreateEvent|WinAPI_CreateFile|WinAPI_CreateFont|WinAPI_CreateFontIndirect|WinAPI_CreateProcess|WinAPI_CreateSolidBitmap|WinAPI_CreateSolidBrush|WinAPI_CreateWindowEx|WinAPI_DefWindowProc|WinAPI_DeleteDC|WinAPI_DeleteObject|WinAPI_DestroyIcon|WinAPI_DestroyWindow|WinAPI_DrawEdge|WinAPI_DrawFrameControl|WinAPI_DrawIcon|WinAPI_DrawIconEx|WinAPI_DrawText|WinAPI_EnableWindow|WinAPI_EnumDisplayDevices|WinAPI_EnumWindows|WinAPI_EnumWindowsPopup|WinAPI_EnumWindowsTop|WinAPI_ExpandEnvironmentStrings|WinAPI_ExtractIconEx|WinAPI_FatalAppExit|WinAPI_FillRect|WinAPI_FindExecutable|WinAPI_FindWindow|WinAPI_FlashWindow|WinAPI_FlashWindowEx|WinAPI_FloatToInt|WinAPI_FlushFileBuffers|WinAPI_FormatMessage|WinAPI_FrameRect|WinAPI_FreeLibrary|WinAPI_GetAncestor|WinAPI_GetAsyncKeyState|WinAPI_GetClassName|WinAPI_GetClientHeight|WinAPI_GetClientRect|WinAPI_GetClientWidth|WinAPI_GetCurrentProcess|WinAPI_GetCurrentProcessID|WinAPI_GetCurrentThread|WinAPI_GetCurrentThreadId|WinAPI_GetCursorInfo|WinAPI_GetDC|WinAPI_GetDesktopWindow|WinAPI_GetDeviceCaps|WinAPI_GetDIBits|WinAPI_GetDlgCtrlID|WinAPI_GetDlgItem|WinAPI_GetFileSizeEx|WinAPI_GetFocus|WinAPI_GetForegroundWindow|WinAPI_GetIconInfo|WinAPI_GetLastError|WinAPI_GetLastErrorMessage|WinAPI_GetModuleHandle|WinAPI_GetMousePos|WinAPI_GetMousePosX|WinAPI_GetMousePosY|WinAPI_GetObject|WinAPI_GetOpenFileName|WinAPI_GetOverlappedResult|WinAPI_GetParent|WinAPI_GetProcessAffinityMask|WinAPI_GetSaveFileName|WinAPI_GetStdHandle|WinAPI_GetStockObject|WinAPI_GetSysColor|WinAPI_GetSysColorBrush|WinAPI_GetSystemMetrics|WinAPI_GetTextExtentPoint32|WinAPI_GetWindow|WinAPI_GetWindowDC|WinAPI_GetWindowHeight|WinAPI_GetWindowLong|WinAPI_GetWindowRect|WinAPI_GetWindowText|WinAPI_GetWindowThreadProcessId|WinAPI_GetWindowWidth|WinAPI_GetXYFromPoint|WinAPI_GlobalMemStatus|WinAPI_GUIDFromString|WinAPI_GUIDFromStringEx|WinAPI_HiWord|WinAPI_InProcess|WinAPI_IntToFloat|WinAPI_InvalidateRect|WinAPI_IsClassName|WinAPI_IsWindow|WinAPI_IsWindowVisible|WinAPI_LoadBitmap|WinAPI_LoadImage|WinAPI_LoadLibrary|WinAPI_LoadLibraryEx|WinAPI_LoadShell32Icon|WinAPI_LoadString|WinAPI_LocalFree|WinAPI_LoWord|WinAPI_MakeDWord|WinAPI_MAKELANGID|WinAPI_MAKELCID|WinAPI_MakeLong|WinAPI_MessageBeep|WinAPI_Mouse_Event|WinAPI_MoveWindow|WinAPI_MsgBox|WinAPI_MulDiv|WinAPI_MultiByteToWideChar|WinAPI_MultiByteToWideCharEx|WinAPI_OpenProcess|WinAPI_PointFromRect|WinAPI_PostMessage|WinAPI_PrimaryLangId|WinAPI_PtInRect|WinAPI_ReadFile|WinAPI_ReadProcessMemory|WinAPI_RectIsEmpty|WinAPI_RedrawWindow|WinAPI_RegisterWindowMessage|WinAPI_ReleaseCapture|WinAPI_ReleaseDC|WinAPI_ScreenToClient|WinAPI_SelectObject|WinAPI_SetBkColor|WinAPI_SetCapture|WinAPI_SetCursor|WinAPI_SetDefaultPrinter|WinAPI_SetDIBits|WinAPI_SetEvent|WinAPI_SetFocus|WinAPI_SetFont|WinAPI_SetHandleInformation|WinAPI_SetLastError|WinAPI_SetParent|WinAPI_SetProcessAffinityMask|WinAPI_SetSysColors|WinAPI_SetTextColor|WinAPI_SetWindowLong|WinAPI_SetWindowPos|WinAPI_SetWindowsHookEx|WinAPI_SetWindowText|WinAPI_ShowCursor|WinAPI_ShowError|WinAPI_ShowMsg|WinAPI_ShowWindow|WinAPI_StringFromGUID|WinAPI_SubLangId|WinAPI_SystemParametersInfo|WinAPI_TwipsPerPixelX|WinAPI_TwipsPerPixelY|WinAPI_UnhookWindowsHookEx|WinAPI_UpdateLayeredWindow|WinAPI_UpdateWindow|WinAPI_ValidateClassName|WinAPI_WaitForInputIdle|WinAPI_WaitForMultipleObjects|WinAPI_WaitForSingleObject|WinAPI_WideCharToMultiByte|WinAPI_WindowFromPoint|WinAPI_WriteConsole|WinAPI_WriteFile|WinAPI_WriteProcessMemory|WinNet_AddConnection|WinNet_AddConnection2|WinNet_AddConnection3|WinNet_CancelConnection|WinNet_CancelConnection2|WinNet_CloseEnum|WinNet_ConnectionDialog|WinNet_ConnectionDialog1|WinNet_DisconnectDialog|WinNet_DisconnectDialog1|WinNet_EnumResource|WinNet_GetConnection|WinNet_GetConnectionPerformance|WinNet_GetLastError|WinNet_GetNetworkInformation|WinNet_GetProviderName|WinNet_GetResourceInformation|WinNet_GetResourceParent|WinNet_GetUniversalName|WinNet_GetUser|WinNet_OpenEnum|WinNet_RestoreConnection|WinNet_UseConnection|Word_VersionInfo|WordAttach|WordCreate|WordDocAdd|WordDocAddLink|WordDocAddPicture|WordDocClose|WordDocFindReplace|WordDocGetCollection|WordDocLinkGetCollection|WordDocOpen|WordDocPrint|WordDocPropertyGet|WordDocPropertySet|WordDocSave|WordDocSaveAs|WordErrorHandlerDeRegister|WordErrorHandlerRegister|WordErrorNotify|WordMacroRun|WordPropertyGet|WordPropertySet|WordQuit|ce|comments-end|comments-start|cs|include|include-once|NoTrayIcon|RequireAdmin|AutoIt3Wrapper_Au3Check_Parameters|AutoIt3Wrapper_Au3Check_Stop_OnWarning|AutoIt3Wrapper_Change2CUI|AutoIt3Wrapper_Compression|AutoIt3Wrapper_cvsWrapper_Parameters|AutoIt3Wrapper_Icon|AutoIt3Wrapper_Outfile|AutoIt3Wrapper_Outfile_Type|AutoIt3Wrapper_Plugin_Funcs|AutoIt3Wrapper_Res_Comment|AutoIt3Wrapper_Res_Description|AutoIt3Wrapper_Res_Field|AutoIt3Wrapper_Res_File_Add|AutoIt3Wrapper_Res_Fileversion|AutoIt3Wrapper_Res_FileVersion_AutoIncrement|AutoIt3Wrapper_Res_Icon_Add|AutoIt3Wrapper_Res_Language|AutoIt3Wrapper_Res_LegalCopyright|AutoIt3Wrapper_res_requestedExecutionLevel|AutoIt3Wrapper_Res_SaveSource|AutoIt3Wrapper_Run_After|AutoIt3Wrapper_Run_Au3check|AutoIt3Wrapper_Run_Before|AutoIt3Wrapper_Run_cvsWrapper|AutoIt3Wrapper_Run_Debug_Mode|AutoIt3Wrapper_Run_Obfuscator|AutoIt3Wrapper_Run_Tidy|AutoIt3Wrapper_Tidy_Stop_OnError|AutoIt3Wrapper_UseAnsi|AutoIt3Wrapper_UseUpx|AutoIt3Wrapper_UseX64|AutoIt3Wrapper_Version|EndRegion|forceref|Obfuscator_Ignore_Funcs|Obfuscator_Ignore_Variables|Obfuscator_Parameters|Region|Tidy_Parameters\",t=\"AppDataCommonDir|AppDataDir|AutoItExe|AutoItPID|AutoItUnicode|AutoItVersion|AutoItX64|COM_EventObj|CommonFilesDir|Compiled|ComputerName|ComSpec|CR|CRLF|DesktopCommonDir|DesktopDepth|DesktopDir|DesktopHeight|DesktopRefresh|DesktopWidth|DocumentsCommonDir|error|exitCode|exitMethod|extended|FavoritesCommonDir|FavoritesDir|GUI_CtrlHandle|GUI_CtrlId|GUI_DragFile|GUI_DragId|GUI_DropId|GUI_WinHandle|HomeDrive|HomePath|HomeShare|HotKeyPressed|HOUR|InetGetActive|InetGetBytesRead|IPAddress1|IPAddress2|IPAddress3|IPAddress4|KBLayout|LF|LogonDNSDomain|LogonDomain|LogonServer|MDAY|MIN|MON|MyDocumentsDir|NumParams|OSBuild|OSLang|OSServicePack|OSTYPE|OSVersion|ProcessorArch|ProgramFilesDir|ProgramsCommonDir|ProgramsDir|ScriptDir|ScriptFullPath|ScriptLineNumber|ScriptName|SEC|StartMenuCommonDir|StartMenuDir|StartupCommonDir|StartupDir|SW_DISABLE|SW_ENABLE|SW_HIDE|SW_LOCK|SW_MAXIMIZE|SW_MINIMIZE|SW_RESTORE|SW_SHOW|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWMINNOACTIVE|SW_SHOWNA|SW_SHOWNOACTIVATE|SW_SHOWNORMAL|SW_UNLOCK|SystemDir|TAB|TempDir|TRAY_ID|TrayIconFlashing|TrayIconVisible|UserName|UserProfileDir|WDAY|WindowsDir|WorkingDir|YDAY|YEAR\";this.$rules={start:[{token:\"comment.line.ahk\",regex:\"(?:^| );.*$\"},{token:\"comment.block.ahk\",regex:\"/\\\\*\",push:[{token:\"comment.block.ahk\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.ahk\"}]},{token:\"doc.comment.ahk\",regex:\"#cs\",push:[{token:\"doc.comment.ahk\",regex:\"#ce\",next:\"pop\"},{defaultToken:\"doc.comment.ahk\"}]},{token:\"keyword.command.ahk\",regex:\"(?:\\\\b|^)(?:allowsamelinecomments|clipboardtimeout|commentflag|errorstdout|escapechar|hotkeyinterval|hotkeymodifiertimeout|hotstring|include|includeagain|installkeybdhook|installmousehook|keyhistory|ltrim|maxhotkeysperinterval|maxmem|maxthreads|maxthreadsbuffer|maxthreadsperhotkey|noenv|notrayicon|persistent|singleinstance|usehook|winactivateforce|autotrim|blockinput|click|clipwait|continue|control|controlclick|controlfocus|controlget|controlgetfocus|controlgetpos|controlgettext|controlmove|controlsend|controlsendraw|controlsettext|coordmode|critical|detecthiddentext|detecthiddenwindows|drive|driveget|drivespacefree|edit|endrepeat|envadd|envdiv|envget|envmult|envset|envsub|envupdate|exit|exitapp|fileappend|filecopy|filecopydir|filecreatedir|filecreateshortcut|filedelete|filegetattrib|filegetshortcut|filegetsize|filegettime|filegetversion|fileinstall|filemove|filemovedir|fileread|filereadline|filerecycle|filerecycleempty|fileremovedir|fileselectfile|fileselectfolder|filesetattrib|filesettime|formattime|getkeystate|gosub|goto|groupactivate|groupadd|groupclose|groupdeactivate|gui|guicontrol|guicontrolget|hideautoitwin|hotkey|ifequal|ifexist|ifgreater|ifgreaterorequal|ifinstring|ifless|iflessorequal|ifmsgbox|ifnotequal|ifnotexist|ifnotinstring|ifwinactive|ifwinexist|ifwinnotactive|ifwinnotexist|imagesearch|inidelete|iniread|iniwrite|input|inputbox|keyhistory|keywait|listhotkeys|listlines|listvars|menu|mouseclick|mouseclickdrag|mousegetpos|mousemove|msgbox|onexit|outputdebug|pause|pixelgetcolor|pixelsearch|postmessage|process|progress|random|regdelete|regread|regwrite|reload|repeat|run|runas|runwait|send|sendevent|sendinput|sendmode|sendplay|sendmessage|sendraw|setbatchlines|setcapslockstate|setcontroldelay|setdefaultmousespeed|setenv|setformat|setkeydelay|setmousedelay|setnumlockstate|setscrolllockstate|setstorecapslockmode|settimer|settitlematchmode|setwindelay|setworkingdir|shutdown|sleep|sort|soundbeep|soundget|soundgetwavevolume|soundplay|soundset|soundsetwavevolume|splashimage|splashtextoff|splashtexton|splitpath|statusbargettext|statusbarwait|stringcasesense|stringgetpos|stringleft|stringlen|stringlower|stringmid|stringreplace|stringright|stringsplit|stringtrimleft|stringtrimright|stringupper|suspend|sysget|thread|tooltip|transform|traytip|urldownloadtofile|while|winactivate|winactivatebottom|winclose|winget|wingetactivestats|wingetactivetitle|wingetclass|wingetpos|wingettext|wingettitle|winhide|winkill|winmaximize|winmenuselectitem|winminimize|winminimizeall|winminimizeallundo|winmove|winrestore|winset|winsettitle|winshow|winwait|winwaitactive|winwaitclose|winwaitnotactive)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.ahk\",regex:\"(?:\\\\b|^)(?:if|else|return|loop|break|for|while|global|local|byref)\\\\b\",caseInsensitive:!0},{token:\"support.function.ahk\",regex:\"(?:\\\\b|^)(?:abs|acos|asc|asin|atan|ceil|chr|cos|dllcall|exp|fileexist|floor|getkeystate|il_add|il_create|il_destroy|instr|substr|isfunc|islabel|ln|log|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|onmessage|numget|numput|registercallback|regexmatch|regexreplace|round|sin|tan|sqrt|strlen|sb_seticon|sb_setparts|sb_settext|tv_add|tv_delete|tv_getchild|tv_getcount|tv_getnext|tv_get|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist)\\\\b\",caseInsensitive:!0},{token:\"variable.predefined.ahk\",regex:\"(?:\\\\b|^)(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_formatfloat|a_formatinteger|a_gui|a_guievent|a_guicontrol|a_guicontrolevent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|programfiles|a_programfiles|a_programs|a_programscommon|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel)\\\\b\",caseInsensitive:!0},{token:\"support.constant.ahk\",regex:\"(?:\\\\b|^)(?:shift|lshift|rshift|alt|lalt|ralt|control|lcontrol|rcontrol|ctrl|lctrl|rctrl|lwin|rwin|appskey|altdown|altup|shiftdown|shiftup|ctrldown|ctrlup|lwindown|lwinup|rwindown|rwinup|lbutton|rbutton|mbutton|wheelup|wheelleft|wheelright|wheeldown|xbutton1|xbutton2|joy1|joy2|joy3|joy4|joy5|joy6|joy7|joy8|joy9|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy30|joy31|joy32|joyx|joyy|joyz|joyr|joyu|joyv|joypov|joyname|joybuttons|joyaxes|joyinfo|space|tab|enter|escape|esc|backspace|bs|delete|del|insert|ins|pgup|pgdn|home|end|up|down|left|right|printscreen|ctrlbreak|pause|scrolllock|capslock|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadmult|numpadadd|numpadsub|numpaddiv|numpaddot|numpaddel|numpadins|numpadclear|numpadup|numpaddown|numpadleft|numpadright|numpadhome|numpadend|numpadpgup|numpadpgdn|numpadenter|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f20|f21|f22|f23|f24|browser_back|browser_forward|browser_refresh|browser_stop|browser_search|browser_favorites|browser_home|volume_mute|volume_down|volume_up|media_next|media_prev|media_stop|media_play_pause|launch_mail|launch_media|launch_app1|launch_app2)\\\\b\",caseInsensitive:!0},{token:\"variable.parameter\",regex:\"(?:\\\\b|^)(?:pixel|mouse|screen|relative|rgb|ltrim|rtrim|join|low|belownormal|normal|abovenormal|high|realtime|ahk_id|ahk_pid|ahk_class|ahk_group|between|contains|in|is|integer|float|integerfast|floatfast|number|digit|xdigit|alpha|upper|lower|alnum|time|date|not|or|and|alwaysontop|topmost|top|bottom|transparent|transcolor|redraw|region|id|idlast|processname|minmax|controllist|count|list|capacity|statuscd|eject|lock|unlock|label|filesystem|label|setlabel|serial|type|status|static|seconds|minutes|hours|days|read|parse|logoff|close|error|single|tray|add|rename|check|uncheck|togglecheck|enable|disable|toggleenable|default|nodefault|standard|nostandard|color|delete|deleteall|icon|noicon|tip|click|show|mainwindow|nomainwindow|useerrorlevel|text|picture|pic|groupbox|button|checkbox|radio|dropdownlist|ddl|combobox|listbox|listview|datetime|monthcal|updown|slider|tab|tab2|statusbar|treeview|iconsmall|tile|report|sortdesc|nosort|nosorthdr|grid|hdr|autosize|range|xm|ym|ys|xs|xp|yp|font|resize|owner|submit|nohide|minimize|maximize|restore|noactivate|na|cancel|destroy|center|margin|maxsize|minsize|owndialogs|guiescape|guiclose|guisize|guicontextmenu|guidropfiles|tabstop|section|altsubmit|wrap|hscroll|vscroll|border|top|bottom|buttons|expand|first|imagelist|lines|wantctrla|wantf2|vis|visfirst|number|uppercase|lowercase|limit|password|multi|wantreturn|group|background|bold|italic|strike|underline|norm|backgroundtrans|theme|caption|delimiter|minimizebox|maximizebox|sysmenu|toolwindow|flash|style|exstyle|check3|checked|checkedgray|readonly|password|hidden|left|right|center|notab|section|move|focus|hide|choose|choosestring|text|pos|enabled|disabled|visible|lastfound|lastfoundexist|alttab|shiftalttab|alttabmenu|alttabandmenu|alttabmenudismiss|notimers|interrupt|priority|waitclose|blind|raw|unicode|deref|pow|bitnot|bitand|bitor|bitxor|bitshiftleft|bitshiftright|yes|no|ok|cancel|abort|retry|ignore|tryagain|on|off|all|hkey_local_machine|hkey_users|hkey_current_user|hkey_classes_root|hkey_current_config|hklm|hku|hkcu|hkcr|hkcc|reg_sz|reg_expand_sz|reg_multi_sz|reg_dword|reg_qword|reg_binary|reg_link|reg_resource_list|reg_full_resource_descriptor|reg_resource_requirements_list|reg_dword_big_endian)\\\\b\",caseInsensitive:!0},{keywordMap:{\"constant.language\":e},regex:\"\\\\w+\\\\b\"},{keywordMap:{\"variable.function\":t},regex:\"@\\\\w+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"keyword.operator.ahk\",regex:\"=|==|<>|:=|<|>|\\\\*|\\\\/|\\\\+|:|\\\\?|\\\\-\"},{token:\"punctuation.ahk\",regex:\"#|`|::|,|\\\\{|\\\\}|\\\\(|\\\\)|\\\\%\"},{token:[\"punctuation.quote.double\",\"string.quoted.ahk\",\"punctuation.quote.double\"],regex:'(\")((?:[^\"]|\"\")*)(\")'},{token:[\"label.ahk\",\"punctuation.definition.label.ahk\"],regex:\"^([^: ]+)(:)(?!:)\"}]},this.normalizeRules()};s.metaData={name:\"AutoHotKey\",scopeName:\"source.ahk\",fileTypes:[\"ahk\"],foldingStartMarker:\"^\\\\s*/\\\\*|^(?![^{]*?;|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|;|/\\\\*(?!.*?\\\\*/.*\\\\S))\",foldingStopMarker:\"^\\\\s*\\\\*/|^\\\\s*\\\\}\"},r.inherits(s,i),t.AutoHotKeyHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/autohotkey\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/autohotkey_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./autohotkey_highlight_rules\").AutoHotKeyHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/autohotkey\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-batchfile.js",
    "content": "ace.define(\"ace/mode/batchfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.command.dosbatch\",regex:\"\\\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.statement.dosbatch\",regex:\"\\\\b(?:goto|call|exit)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.conditional.if.dosbatch\",regex:\"\\\\bif\\\\s+not\\\\s+(?:exist|defined|errorlevel|cmdextversion)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.conditional.dosbatch\",regex:\"\\\\b(?:if|else)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.repeat.dosbatch\",regex:\"\\\\bfor\\\\b\",caseInsensitive:!0},{token:\"keyword.operator.dosbatch\",regex:\"\\\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\\\b\"},{token:[\"doc.comment\",\"comment\"],regex:\"(?:^|\\\\b)(rem)($|\\\\s.*$)\",caseInsensitive:!0},{token:\"comment.line.colons.dosbatch\",regex:\"::.*$\"},{include:\"variable\"},{token:\"punctuation.definition.string.begin.shell\",regex:'\"',push:[{token:\"punctuation.definition.string.end.shell\",regex:'\"',next:\"pop\"},{include:\"variable\"},{defaultToken:\"string.quoted.double.dosbatch\"}]},{token:\"keyword.operator.pipe.dosbatch\",regex:\"[|]\"},{token:\"keyword.operator.redirect.shell\",regex:\"&>|\\\\d*>&\\\\d*|\\\\d*(?:>>|>|<)|\\\\d*<&|\\\\d*<>\"}],variable:[{token:\"constant.numeric\",regex:\"%%\\\\w+|%[*\\\\d]|%\\\\w+%\"},{token:\"constant.numeric\",regex:\"%~\\\\d+\"},{token:[\"markup.list\",\"constant.other\",\"markup.list\"],regex:\"(%)(\\\\w+)(%?)\"}]},this.normalizeRules()};s.metaData={name:\"Batch File\",scopeName:\"source.dosbatch\",fileTypes:[\"bat\"]},r.inherits(s,i),t.BatchFileHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/batchfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/batchfile_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./batchfile_highlight_rules\").BatchFileHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"::\",this.blockComment=\"\",this.$id=\"ace/mode/batchfile\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-bro.js",
    "content": "ace.define(\"ace/mode/bro_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"punctuation.definition.comment.bro\",regex:/#/,push:[{token:\"comment.line.number-sign.bro\",regex:/$/,next:\"pop\"},{defaultToken:\"comment.line.number-sign.bro\"}]},{token:\"keyword.control.bro\",regex:/\\b(?:break|case|continue|else|for|if|return|switch|next|when|timeout|schedule)\\b/},{token:[\"meta.function.bro\",\"meta.function.bro\",\"storage.type.bro\",\"meta.function.bro\",\"entity.name.function.bro\",\"meta.function.bro\"],regex:/^(\\s*)(?:function|hook|event)(\\s*)(.*)(\\s*\\()(.*)(\\).*$)/},{token:\"storage.type.bro\",regex:/\\b(?:bool|enum|double|int|count|port|addr|subnet|any|file|interval|time|string|table|vector|set|record|pattern|hook)\\b/},{token:\"storage.modifier.bro\",regex:/\\b(?:global|const|redef|local|&(?:optional|rotate_interval|rotate_size|add_func|del_func|expire_func|expire_create|expire_read|expire_write|persistent|synchronized|encrypt|mergeable|priority|group|type_column|log|error_handler))\\b/},{token:\"keyword.operator.bro\",regex:/\\s*(?:\\||&&|(?:>|<|!)=?|==)\\s*|\\b!?in\\b/},{token:\"constant.language.bro\",regex:/\\b(?:T|F)\\b/},{token:\"constant.numeric.bro\",regex:/\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:\\/(?:tcp|udp|icmp)|\\s*(?:u?sec|min|hr|day)s?)?\\b/},{token:\"punctuation.definition.string.begin.bro\",regex:/\"/,push:[{token:\"punctuation.definition.string.end.bro\",regex:/\"/,next:\"pop\"},{include:\"#string_escaped_char\"},{include:\"#string_placeholder\"},{defaultToken:\"string.quoted.double.bro\"}]},{token:\"punctuation.definition.string.begin.bro\",regex:/\\//,push:[{token:\"punctuation.definition.string.end.bro\",regex:/\\//,next:\"pop\"},{include:\"#string_escaped_char\"},{include:\"#string_placeholder\"},{defaultToken:\"string.quoted.regex.bro\"}]},{token:[\"meta.preprocessor.bro.load\",\"keyword.other.special-method.bro\"],regex:/^(\\s*)(\\@load(?:-sigs)?)\\b/,push:[{token:[],regex:/(?=\\#)|$/,next:\"pop\"},{defaultToken:\"meta.preprocessor.bro.load\"}]},{token:[\"meta.preprocessor.bro.if\",\"keyword.other.special-method.bro\",\"meta.preprocessor.bro.if\"],regex:/^(\\s*)(\\@endif|\\@if(?:n?def)?)(.*$)/,push:[{token:[],regex:/$/,next:\"pop\"},{defaultToken:\"meta.preprocessor.bro.if\"}]}],\"#disabled\":[{token:\"text\",regex:/^\\s*\\@if(?:n?def)?\\b.*$/,push:[{token:\"text\",regex:/^\\s*\\@endif\\b.*$/,next:\"pop\"},{include:\"#disabled\"},{include:\"#pragma-mark\"}],comment:\"eat nested preprocessor ifdefs\"}],\"#preprocessor-rule-other\":[{token:[\"text\",\"meta.preprocessor.bro\",\"meta.preprocessor.bro\",\"text\"],regex:/^(\\s*)(@if)((?:n?def)?)\\b(.*?)(?:(?=)|$)/,push:[{token:[\"text\",\"meta.preprocessor.bro\",\"text\"],regex:/^(\\s*)(@endif)\\b(.*$)/,next:\"pop\"},{include:\"$base\"}]}],\"#string_escaped_char\":[{token:\"constant.character.escape.bro\",regex:/\\\\(?:\\\\|[abefnprtv'\"?]|[0-3]\\d{,2}|[4-7]\\d?|x[a-fA-F0-9]{,2})/},{token:\"invalid.illegal.unknown-escape.bro\",regex:/\\\\./}],\"#string_placeholder\":[{token:\"constant.other.placeholder.bro\",regex:/%(?:\\d+\\$)?[#0\\- +']*[,;:_]?(?:-?\\d+|\\*(?:-?\\d+\\$)?)?(?:\\.(?:-?\\d+|\\*(?:-?\\d+\\$)?)?)?(?:hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?[diouxXDOUeEfFgGaACcSspn%]/},{token:\"invalid.illegal.placeholder.bro\",regex:/%/}]},this.normalizeRules()};s.metaData={fileTypes:[\"bro\"],foldingStartMarker:\"^(\\\\@if(n?def)?)\",foldingStopMarker:\"^\\\\@endif\",keyEquivalent:\"@B\",name:\"Bro\",scopeName:\"source.bro\"},r.inherits(s,i),t.BroHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/bro\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/bro_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./bro_highlight_rules\").BroHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/bro\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/bro\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-c9search.js",
    "content": "ace.define(\"ace/mode/c9search_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function o(e,t){try{return new RegExp(e,t)}catch(n){}}var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){this.$rules={start:[{tokenNames:[\"c9searchresults.constant.numeric\",\"c9searchresults.text\",\"c9searchresults.text\",\"c9searchresults.keyword\"],regex:/(^\\s+[0-9]+)(:)(\\d*\\s?)([^\\r\\n]+)/,onMatch:function(e,t,n){var r=this.splitRegex.exec(e),i=this.tokenNames,s=[{type:i[0],value:r[1]},{type:i[1],value:r[2]}];r[3]&&(r[3]==\" \"?s[1]={type:i[1],value:r[2]+\" \"}:s.push({type:i[1],value:r[3]}));var o=n[1],u=r[4],a,f=0;if(o&&o.exec){o.lastIndex=0;while(a=o.exec(u)){var l=u.substring(f,a.index);f=o.lastIndex,l&&s.push({type:i[2],value:l});if(a[0])s.push({type:i[3],value:a[0]});else if(!l)break}}return f<u.length&&s.push({type:i[2],value:u.substr(f)}),s}},{regex:\"^Searching for [^\\\\r\\\\n]*$\",onMatch:function(e,t,n){var r=e.split(\"\\x01\");if(r.length<3)return\"text\";var s,u,a=0,f=[{value:r[a++]+\"'\",type:\"text\"},{value:u=r[a++],type:\"text\"},{value:\"'\"+r[a++],type:\"text\"}];r[2]!==\" in\"&&f.push({value:\"'\"+r[a++]+\"'\",type:\"text\"},{value:r[a++],type:\"text\"}),f.push({value:\" \"+r[a++]+\" \",type:\"text\"}),r[a+1]?(s=r[a+1],f.push({value:\"(\"+r[a+1]+\")\",type:\"text\"}),a+=1):a-=1;while(a++<r.length)r[a]&&f.push({value:r[a],type:\"text\"});u&&(/regex/.test(s)||(u=i.escapeRegExp(u)),/whole/.test(s)&&(u=\"\\\\b\"+u+\"\\\\b\"));var l=u&&o(\"(\"+u+\")\",/ sensitive/.test(s)?\"g\":\"ig\");return l&&(n[0]=t,n[1]=l),f}},{regex:\"^(?=Found \\\\d+ matches)\",token:\"text\",next:\"numbers\"},{token:\"string\",regex:\"^\\\\S:?[^:]+\",next:\"numbers\"}],numbers:[{regex:\"\\\\d+\",token:\"constant.numeric\"},{regex:\"$\",token:\"text\",next:\"start\"}]},this.normalizeRules()};r.inherits(u,s),t.C9SearchHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^(\\S.*:|Searching for.*)$/,this.foldingStopMarker=/^(\\s+|Found.*)$/,this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getAllLines(n),s=r[n],o=/^(Found.*|Searching for.*)$/,u=/^(\\S.*:|\\s*)$/,a=o.test(s)?o:u,f=n,l=n;if(this.foldingStartMarker.test(s)){for(var c=n+1,h=e.getLength();c<h;c++)if(a.test(r[c]))break;l=c}else if(this.foldingStopMarker.test(s)){for(var c=n-1;c>=0;c--){s=r[c];if(a.test(s))break}f=c}if(f!=l){var p=s.length;return a===o&&(p=s.search(/\\(Found[^)]+\\)$|$/)),new i(f,p,l,0)}}}.call(o.prototype)}),ace.define(\"ace/mode/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c9search_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/c9search\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c9search_highlight_rules\").C9SearchHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/c9search\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u};r.inherits(a,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c9search\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-c_cpp.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-cirru.js",
    "content": "ace.define(\"ace/mode/cirru_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"constant.numeric\",regex:/[\\d\\.]+/},{token:\"comment.line.double-dash\",regex:/--/,next:\"comment\"},{token:\"storage.modifier\",regex:/\\(/},{token:\"storage.modifier\",regex:/,/,next:\"line\"},{token:\"support.function\",regex:/[^\\(\\)\"\\s]+/,next:\"line\"},{token:\"string.quoted.double\",regex:/\"/,next:\"string\"},{token:\"storage.modifier\",regex:/\\)/}],comment:[{token:\"comment.line.double-dash\",regex:/ +[^\\n]+/,next:\"start\"}],string:[{token:\"string.quoted.double\",regex:/\"/,next:\"line\"},{token:\"constant.character.escape\",regex:/\\\\/,next:\"escape\"},{token:\"string.quoted.double\",regex:/[^\\\\\"]+/}],escape:[{token:\"constant.character.escape\",regex:/./,next:\"string\"}],line:[{token:\"constant.numeric\",regex:/[\\d\\.]+/},{token:\"markup.raw\",regex:/^\\s*/,next:\"start\"},{token:\"storage.modifier\",regex:/\\$/,next:\"start\"},{token:\"variable.parameter\",regex:/[^\\(\\)\"\\s]+/},{token:\"storage.modifier\",regex:/\\(/,next:\"start\"},{token:\"storage.modifier\",regex:/\\)/},{token:\"markup.raw\",regex:/^ */,next:\"start\"},{token:\"string.quoted.double\",regex:/\"/,next:\"string\"}]}};r.inherits(s,i),t.CirruHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/cirru\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cirru_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./cirru_highlight_rules\").CirruHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/cirru\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-clojure.js",
    "content": "ace.define(\"ace/mode/clojure_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - -> ->> .. / < <= = == > &gt; >= &gt;= accessor aclone add-classpath add-watch agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq zero? zipmap\",t=\"throw try var def do fn if let loop monitor-enter monitor-exit new quote recur set!\",n=\"true false nil\",r=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"support.function\":e},\"identifier\",!1,\" \");this.$rules={start:[{token:\"comment\",regex:\";.*$\"},{token:\"keyword\",regex:\"[\\\\(|\\\\)]\"},{token:\"keyword\",regex:\"[\\\\'\\\\(]\"},{token:\"keyword\",regex:\"[\\\\[|\\\\]]\"},{token:\"keyword\",regex:\"[\\\\{|\\\\}|\\\\#\\\\{|\\\\#\\\\}]\"},{token:\"keyword\",regex:\"[\\\\&]\"},{token:\"keyword\",regex:\"[\\\\#\\\\^\\\\{]\"},{token:\"keyword\",regex:\"[\\\\%]\"},{token:\"keyword\",regex:\"[@]\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language\",regex:\"[!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+||=|!=|<=|>=|<>|<|>|!|&&]\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant\",regex:/:[^()\\[\\]{}'\"\\^%`,;\\s]+/},{token:\"string.regexp\",regex:'/#\"(?:\\\\.|(?:\\\\\")|[^\"\"\\n])*\"/g'}],string:[{token:\"constant.language.escape\",regex:\"\\\\\\\\.|\\\\\\\\$\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:'\"',next:\"start\"}]}};r.inherits(s,i),t.ClojureHighlightRules=s}),ace.define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\)/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\))/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\\s+)/);return t?t[1]:\"\"}}).call(i.prototype),t.MatchingParensOutdent=i}),ace.define(\"ace/mode/clojure\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/clojure_highlight_rules\",\"ace/mode/matching_parens_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./clojure_highlight_rules\").ClojureHighlightRules,o=e(\"./matching_parens_outdent\").MatchingParensOutdent,u=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.minorIndentFunctions=[\"defn\",\"defn-\",\"defmacro\",\"def\",\"deftest\",\"testing\"],this.$toIndent=function(e){return e.split(\"\").map(function(e){return/\\s/.exec(e)?e:\" \"}).join(\"\")},this.$calculateIndent=function(e,t){var n=this.$getIndent(e),r=0,i,s;for(var o=e.length-1;o>=0;o--){s=e[o],s===\"(\"?(r--,i=!0):s===\"(\"||s===\"[\"||s===\"{\"?(r--,i=!1):(s===\")\"||s===\"]\"||s===\"}\")&&r++;if(r<0)break}if(!(r<0&&i))return r<0&&!i?this.$toIndent(e.substring(0,o+1)):r>0?(n=n.substring(0,n.length-t.length),n):n;o+=1;var u=o,a=\"\";for(;;){s=e[o];if(s===\" \"||s===\"\t\")return this.minorIndentFunctions.indexOf(a)!==-1?this.$toIndent(e.substring(0,u-1)+t):this.$toIndent(e.substring(0,o+1));if(s===undefined)return this.$toIndent(e.substring(0,u-1)+t);a+=e[o],o++}},this.getNextLineIndent=function(e,t,n){return this.$calculateIndent(t,n)},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/clojure\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-cobol.js",
    "content": "ace.define(\"ace/mode/cobol_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT\",t=\"true|false|null\",n=\"count|min|max|avg|sum|rank|now|coalesce|main\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\*.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.CobolHighlightRules=s}),ace.define(\"ace/mode/cobol\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cobol_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./cobol_highlight_rules\").CobolHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"*\",this.$id=\"ace/mode/cobol\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-coffee.js",
    "content": "ace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=\"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\",t=\"this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|own|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes|yield|export|import|default\",n=\"true|false|null|undefined|NaN|Infinity\",r=\"case|const|function|var|void|with|enum|implements|interface|let|package|private|protected|public|static\",i=\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\",s=\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|\",o=\"window|arguments|prototype|document\",u=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"invalid.illegal\":r,\"language.support.class\":i,\"language.support.function\":s,\"variable.language\":o},\"identifier\"),a={token:[\"paren.lparen\",\"variable.parameter\",\"paren.rparen\",\"text\",\"storage.type\"],regex:/(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source},f=/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"},{stateName:\"qdoc\",token:\"string\",regex:\"'''\",next:[{token:\"string\",regex:\"'''\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqdoc\",token:\"string\",regex:'\"\"\"',next:[{token:\"string\",regex:'\"\"\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qstring\",token:\"string\",regex:\"'\",next:[{token:\"string\",regex:\"'\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqstring\",token:\"string.start\",regex:'\"',next:[{token:\"string.end\",regex:'\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"js\",token:\"string\",regex:\"`\",next:[{token:\"string\",regex:\"`\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{regex:\"[{}]\",onMatch:function(e,t,n){this.next=\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift()||\"\";if(this.next.indexOf(\"string\")!=-1)return\"paren.string\"}return\"paren\"}},{token:\"string.regex\",regex:\"///\",next:\"heregex\"},{token:\"string.regex\",regex:/(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/},{token:\"comment\",regex:\"###(?!#)\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:[\"punctuation.operator\",\"text\",\"identifier\"],regex:\"(\\\\.)(\\\\s*)(\"+r+\")\"},{token:\"punctuation.operator\",regex:\"\\\\.{1,3}\"},{token:[\"keyword\",\"text\",\"language.support.class\",\"text\",\"keyword\",\"text\",\"language.support.class\"],regex:\"(class)(\\\\s+)(\"+e+\")(?:(\\\\s+)(extends)(\\\\s+)(\"+e+\"))?\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\"].concat(a.token),regex:\"(\"+e+\")(\\\\s*)([=:])(\\\\s*)\"+a.regex},a,{token:\"variable\",regex:\"@(?:\"+e+\")?\"},{token:u,regex:e},{token:\"punctuation.operator\",regex:\"\\\\,|\\\\.\"},{token:\"storage.type\",regex:\"[\\\\-=]>\"},{token:\"keyword.operator\",regex:\"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"},{token:\"paren.lparen\",regex:\"[({[]\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?///[imgy]{0,4}\",next:\"start\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{token:\"string.regex\",regex:\"\\\\S+\"}],comment:[{token:\"comment\",regex:\"###\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function l(){this.HighlightRules=r,this.$outdent=new i,this.foldingRules=new s}var r=e(\"./coffee_highlight_rules\").CoffeeHighlightRules,i=e(\"./matching_brace_outdent\").MatchingBraceOutdent,s=e(\"./folding/coffee\").FoldMode,o=e(\"../range\").Range,u=e(\"./text\").Mode,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"../lib/oop\");f.inherits(l,u),function(){var e=/(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;this.lineCommentStart=\"#\",this.blockComment={start:\"###\",end:\"###\"},this.getNextLineIndent=function(t,n,r){var i=this.$getIndent(n),s=this.getTokenizer().getLineTokens(n,t).tokens;return(!s.length||s[s.length-1].type!==\"comment\")&&t===\"start\"&&e.test(n)&&(i+=r),i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/coffee_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/coffee\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-coldfusion.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/coldfusion_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=function(){s.call(this),this.$rules.tag[2].token=function(e,t){var n=t.slice(0,2)==\"cf\"?\"keyword\":\"meta.tag\";return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",n+\".tag-name.xml\"]};var e=Object.keys(this.$rules).filter(function(e){return/^(js|css)-/.test(e)});this.embedRules({cfmlComment:[{regex:\"<!---\",token:\"comment.start\",push:\"cfmlComment\"},{regex:\"--->\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}]},\"\",[{regex:\"<!---\",token:\"comment.start\",push:\"cfmlComment\"}],[\"comment\",\"start\",\"tag_whitespace\",\"cdata\"].concat(e)),this.$rules.cfTag=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"pop\"}];var t={token:function(e,t){return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"keyword.tag-name.xml\"]},regex:\"(</?)(cf[-_a-zA-Z0-9:.]+)\",push:\"cfTag\"};e.forEach(function(e){this.$rules[e].unshift(t)},this),this.embedTagRules((new i({jsx:!1})).getRules(),\"cfjs-\",\"cfscript\"),this.normalizeRules()};r.inherits(o,s),t.ColdfusionHighlightRules=o}),ace.define(\"ace/mode/coldfusion\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html\",\"ace/mode/coldfusion_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./html\").Mode,o=e(\"./coldfusion_highlight_rules\").ColdfusionHighlightRules,u=\"cfabort|cfapplication|cfargument|cfassociate|cfbreak|cfcache|cfcollection|cfcookie|cfdbinfo|cfdirectory|cfdump|cfelse|cfelseif|cferror|cfexchangecalendar|cfexchangeconnection|cfexchangecontact|cfexchangefilter|cfexchangetask|cfexit|cffeed|cffile|cfflush|cfftp|cfheader|cfhtmlhead|cfhttpparam|cfimage|cfimport|cfinclude|cfindex|cfinsert|cfinvokeargument|cflocation|cflog|cfmailparam|cfNTauthenticate|cfobject|cfobjectcache|cfparam|cfpdfformparam|cfprint|cfprocparam|cfprocresult|cfproperty|cfqueryparam|cfregistry|cfreportparam|cfrethrow|cfreturn|cfschedule|cfsearch|cfset|cfsetting|cfthrow|cfzipparam)\".split(\"|\"),a=function(){s.call(this),this.HighlightRules=o};r.inherits(a,s),function(){this.voidElements=r.mixin(i.arrayToMap(u),this.voidElements),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.$id=\"ace/mode/coldfusion\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-csharp.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\"constant.language\":\"null|true|false\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:/'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/},{token:\"string\",start:'\"',end:'\"|$',next:[{token:\"constant.language.escape\",regex:/\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},{token:\"invalid\",regex:/\\\\./}]},{token:\"string\",start:'@\"',end:'\"',next:[{token:\"constant.language.escape\",regex:'\"\"'}]},{token:\"string\",start:/\\$\"/,end:'\"|$',next:[{token:\"constant.language.escape\",regex:/\\\\(:?$)|{{/},{token:\"constant.language.escape\",regex:/\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},{token:\"invalid\",regex:/\\\\./}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"keyword\",regex:\"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.CSharpHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/folding/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./cstyle\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.usingRe=/^\\s*using \\S/,this.getFoldWidgetRangeBase=this.getFoldWidgetRange,this.getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=this.getFoldWidgetBase(e,t,n);if(!r){var i=e.getLine(n);if(/^\\s*#region\\b/.test(i))return\"start\";var s=this.usingRe;if(s.test(i)){var o=e.getLine(n-1),u=e.getLine(n+1);if(!s.test(o)&&s.test(u))return\"start\"}}return r},this.getFoldWidgetRange=function(e,t,n){var r=this.getFoldWidgetRangeBase(e,t,n);if(r)return r;var i=e.getLine(n);if(this.usingRe.test(i))return this.getUsingStatementBlock(e,i,n);if(/^\\s*#region\\b/.test(i))return this.getRegionBlock(e,i,n)},this.getUsingStatementBlock=function(e,t,n){var r=t.match(this.usingRe)[0].length-1,s=e.getLength(),o=n,u=n;while(++n<s){t=e.getLine(n);if(/^\\s*$/.test(t))continue;if(!this.usingRe.test(t))break;u=n}if(u>o){var a=e.getLine(u).length;return new i(o,r,u,a)}},this.getRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*#(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csharp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/csharp\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./csharp_highlight_rules\").CSharpHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/csharp\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null},this.$id=\"ace/mode/csharp\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-csound_document.js",
    "content": "ace.define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.semicolonComments={token:\"comment.line.semicolon.csound\",regex:\";.*$\"},this.comments=[{token:\"punctuation.definition.comment.begin.csound\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.end.csound\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.csound\"}]},{token:\"comment.line.double-slash.csound\",regex:\"//.*$\"},this.semicolonComments],this.macroUses=[{token:[\"entity.name.function.preprocessor.csound\",\"punctuation.definition.macro-parameter-value-list.begin.csound\"],regex:/(\\$[A-Z_a-z]\\w*\\.?)(\\()/,next:\"macro parameter value list\"},{token:\"entity.name.function.preprocessor.csound\",regex:/\\$[A-Z_a-z]\\w*(?:\\.|\\b)/}],this.numbers=[{token:\"constant.numeric.float.csound\",regex:/(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/},{token:[\"storage.type.number.csound\",\"constant.numeric.integer.hexadecimal.csound\"],regex:/(0[Xx])([0-9A-Fa-f]+)/},{token:\"constant.numeric.integer.decimal.csound\",regex:/\\d+/}],this.bracedStringContents=[{token:\"constant.character.escape.csound\",regex:/\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/},{token:\"constant.character.placeholder.csound\",regex:/%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/},{token:\"constant.character.escape.csound\",regex:/%%/}],this.quotedStringContents=[this.macroUses,this.bracedStringContents];var e=[this.comments,{token:\"keyword.preprocessor.csound\",regex:/#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/},{token:\"keyword.preprocessor.csound\",regex:/#include/,push:[this.comments,{token:\"string.csound\",regex:/([^ \\t])(?:.*?\\1)/,next:\"pop\"}]},{token:\"keyword.preprocessor.csound\",regex:/#[ \\t]*define/,next:\"define directive\"},{token:\"keyword.preprocessor.csound\",regex:/#(?:ifn?def|undef)\\b/,next:\"macro directive\"},this.macroUses];this.$rules={start:e,\"define directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.begin.csound\",regex:/\\(/,next:\"macro parameter name list\"},{token:\"punctuation.definition.macro.begin.csound\",regex:/#/,next:\"macro body\"}],\"macro parameter name list\":[{token:\"variable.parameter.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.end.csound\",regex:/\\)/,next:\"define directive\"}],\"macro body\":[{token:\"constant.character.escape.csound\",regex:/\\\\#/},{token:\"punctuation.definition.macro.end.csound\",regex:/#/,next:\"start\"},e],\"macro directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"macro parameter value list\":[{token:\"punctuation.definition.macro-parameter-value-list.end.csound\",regex:/\\)/,next:\"start\"},{token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"macro parameter value quoted string\"},this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),{token:\"punctuation.macro-parameter-value-separator.csound\",regex:\"[#']\"}],\"macro parameter value quoted string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/\"/,next:\"macro parameter value list\"},this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"macro parameter value parenthetical\":[{token:\"constant.character.escape.csound\",regex:/\\\\\\)/},this.popRule({token:\"punctuation.macro-parameter-value-parenthetical.end.csound\",regex:/\\)/}),this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),e]}};r.inherits(s,i),function(){this.pushRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){r.length===0&&r.push(n);if(Array.isArray(e.next))for(var s=0;s<e.next.length;s++)r.push(e.next[s]);else r.push(e.next);return this.next=r[r.length-1],e.token},get next(){return Array.isArray(e.next)?e.next[e.next.length-1]:e.next},set next(t){if(Array.isArray(e.next)){var n=e.next[e.next.length-1],r=n.length-1,i=t.length-1;if(i>r)while(r>=0&&i>=0){if(n.charAt(r)!==t.charAt(i)){var s=t.substr(0,i);for(var o=0;o<e.next.length;o++)e.next[o]=s+e.next[o];break}r--,i--}}else e.next=t},get token(){return e.token}}},this.popRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){return r.pop(),e.next?(r.push(e.next),this.next=r[r.length-1]):this.next=r.length>1?r[r.length-1]:r.pop(),e.token}}}}.call(s.prototype),t.CsoundPreprocessorHighlightRules=s}),ace.define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,s=function(){i.call(this),this.quotedStringContents.push({token:\"invalid.illegal.csound-score\",regex:/[^\"]*$/});var e=this.$rules.start;e.push({token:\"keyword.control.csound-score\",regex:/[abCdefiqstvxy]/},{token:\"invalid.illegal.csound-score\",regex:/w/},{token:\"constant.numeric.language.csound-score\",regex:/z/},{token:[\"keyword.control.csound-score\",\"constant.numeric.integer.decimal.csound-score\"],regex:/([nNpP][pP])(\\d+)/},{token:\"keyword.other.csound-score\",regex:/[mn]/,push:[{token:\"empty\",regex:/$/,next:\"pop\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/}]},{token:\"keyword.preprocessor.csound-score\",regex:/r\\b/,next:\"repeat section\"},this.numbers,{token:\"keyword.operator.csound-score\",regex:\"[!+\\\\-*/^%&|<>#~.]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound-score\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.braced-loop.begin.csound-score\",regex:/{/,next:\"loop after left brace\"})),this.addRules({\"repeat section\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"repeat section before label\"}],\"repeat section before label\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound-score\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound-score\"}],\"loop after left brace\":[this.popRule({token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"loop after repeat count\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after repeat count\":[this.popRule({token:\"entity.name.function.preprocessor.csound-score\",regex:/[A-Z_a-z]\\w*\\b/,next:\"loop after macro name\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after macro name\":[e,this.popRule({token:\"punctuation.braced-loop.end.csound-score\",regex:/}/})]}),this.normalizeRules()};r.inherits(s,i),t.CsoundScoreHighlightRules=s}),ace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"setn|foreach|foreachi|gcinfo|log10|maxn\",s=this.createKeywordMapper({keyword:e,\"support.function\":n,\"keyword.deprecated\":i,\"constant.library\":r,\"constant.language\":t,\"variable.language\":\"self\"},\"identifier\"),o=\"(?:(?:[1-9]\\\\d*)|(?:0))\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:\"+o+\"|\"+u+\")\",f=\"(?:\\\\.\\\\d+)\",l=\"(?:\\\\d+)\",c=\"(?:(?:\"+l+\"?\"+f+\")|(?:\"+l+\"\\\\.))\",h=\"(?:\"+c+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"string.start\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"string.end\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:h},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),ace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"variable.language\":\"self|cls\",\"constant.language\":t,keyword:e},\"identifier\"),i=\"[uU]?\",s=\"[rR]\",o=\"[fF]\",u=\"(?:[rR][fF]|[fF][rR])\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:s+'\"{3}',next:\"rawqqstring3\"},{token:\"string\",regex:s+'\"(?=.)',next:\"rawqqstring\"},{token:\"string\",regex:s+\"'{3}\",next:\"rawqstring3\"},{token:\"string\",regex:s+\"'(?=.)\",next:\"rawqstring\"},{token:\"string\",regex:o+'\"{3}',next:\"fqqstring3\"},{token:\"string\",regex:o+'\"(?=.)',next:\"fqqstring\"},{token:\"string\",regex:o+\"'{3}\",next:\"fqstring3\"},{token:\"string\",regex:o+\"'(?=.)\",next:\"fqstring\"},{token:\"string\",regex:u+'\"{3}',next:\"rfqqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"rfqqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"rfqstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"rfqstring\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"punctuation\",regex:\",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"},{include:\"constants\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],rawqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],rawqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],fqqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"fqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rfqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring:[{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstringParRules:[{token:\"paren.lparen\",regex:\"[\\\\[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)]\"},{token:\"string\",regex:\"\\\\s+\"},{token:\"string\",regex:\"'(.)*'\"},{token:\"string\",regex:'\"(.)*\"'},{token:\"function.support\",regex:\"(!s|!r|!a)\"},{include:\"constants\"},{token:\"paren.rparen\",regex:\"}\",next:\"pop\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"}],constants:[{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:[\"punctuation\",\"function.support\"],regex:\"(\\\\.)([a-zA-Z_]+)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=e(\"../lib/oop\"),s=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,o=e(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules,u=e(\"./lua_highlight_rules\").LuaHighlightRules,a=e(\"./python_highlight_rules\").PythonHighlightRules,f=function(){s.call(this);var e=[\"ATSadd\",\"ATSaddnz\",\"ATSbufread\",\"ATScross\",\"ATSinfo\",\"ATSinterpread\",\"ATSpartialtap\",\"ATSread\",\"ATSreadnz\",\"ATSsinnoi\",\"FLbox\",\"FLbutBank\",\"FLbutton\",\"FLcloseButton\",\"FLcolor\",\"FLcolor2\",\"FLcount\",\"FLexecButton\",\"FLgetsnap\",\"FLgroup\",\"FLgroupEnd\",\"FLgroup_end\",\"FLhide\",\"FLhvsBox\",\"FLhvsBoxSetValue\",\"FLjoy\",\"FLkeyIn\",\"FLknob\",\"FLlabel\",\"FLloadsnap\",\"FLmouse\",\"FLpack\",\"FLpackEnd\",\"FLpack_end\",\"FLpanel\",\"FLpanelEnd\",\"FLpanel_end\",\"FLprintk\",\"FLprintk2\",\"FLroller\",\"FLrun\",\"FLsavesnap\",\"FLscroll\",\"FLscrollEnd\",\"FLscroll_end\",\"FLsetAlign\",\"FLsetBox\",\"FLsetColor\",\"FLsetColor2\",\"FLsetFont\",\"FLsetPosition\",\"FLsetSize\",\"FLsetSnapGroup\",\"FLsetText\",\"FLsetTextColor\",\"FLsetTextSize\",\"FLsetTextType\",\"FLsetVal\",\"FLsetVal_i\",\"FLsetVali\",\"FLsetsnap\",\"FLshow\",\"FLslidBnk\",\"FLslidBnk2\",\"FLslidBnk2Set\",\"FLslidBnk2Setk\",\"FLslidBnkGetHandle\",\"FLslidBnkSet\",\"FLslidBnkSetk\",\"FLslider\",\"FLtabs\",\"FLtabsEnd\",\"FLtabs_end\",\"FLtext\",\"FLupdate\",\"FLvalue\",\"FLvkeybd\",\"FLvslidBnk\",\"FLvslidBnk2\",\"FLxyin\",\"JackoAudioIn\",\"JackoAudioInConnect\",\"JackoAudioOut\",\"JackoAudioOutConnect\",\"JackoFreewheel\",\"JackoInfo\",\"JackoInit\",\"JackoMidiInConnect\",\"JackoMidiOut\",\"JackoMidiOutConnect\",\"JackoNoteOut\",\"JackoOn\",\"JackoTransport\",\"K35_hpf\",\"K35_lpf\",\"MixerClear\",\"MixerGetLevel\",\"MixerReceive\",\"MixerSend\",\"MixerSetLevel\",\"MixerSetLevel_i\",\"OSCbundle\",\"OSCcount\",\"OSCinit\",\"OSCinitM\",\"OSClisten\",\"OSCraw\",\"OSCsend\",\"OSCsend_lo\",\"S\",\"STKBandedWG\",\"STKBeeThree\",\"STKBlowBotl\",\"STKBlowHole\",\"STKBowed\",\"STKBrass\",\"STKClarinet\",\"STKDrummer\",\"STKFMVoices\",\"STKFlute\",\"STKHevyMetl\",\"STKMandolin\",\"STKModalBar\",\"STKMoog\",\"STKPercFlut\",\"STKPlucked\",\"STKResonate\",\"STKRhodey\",\"STKSaxofony\",\"STKShakers\",\"STKSimple\",\"STKSitar\",\"STKStifKarp\",\"STKTubeBell\",\"STKVoicForm\",\"STKWhistle\",\"STKWurley\",\"a\",\"abs\",\"active\",\"adsr\",\"adsyn\",\"adsynt\",\"adsynt2\",\"aftouch\",\"alpass\",\"alwayson\",\"ampdb\",\"ampdbfs\",\"ampmidi\",\"ampmidid\",\"areson\",\"aresonk\",\"atone\",\"atonek\",\"atonex\",\"babo\",\"balance\",\"balance2\",\"bamboo\",\"barmodel\",\"bbcutm\",\"bbcuts\",\"beadsynt\",\"beosc\",\"betarand\",\"bexprnd\",\"bformdec1\",\"bformenc1\",\"binit\",\"biquad\",\"biquada\",\"birnd\",\"bpf\",\"bpfcos\",\"bqrez\",\"butbp\",\"butbr\",\"buthp\",\"butlp\",\"butterbp\",\"butterbr\",\"butterhp\",\"butterlp\",\"button\",\"buzz\",\"c2r\",\"cabasa\",\"cauchy\",\"cauchyi\",\"cbrt\",\"ceil\",\"cell\",\"cent\",\"centroid\",\"ceps\",\"cepsinv\",\"chanctrl\",\"changed\",\"changed2\",\"chani\",\"chano\",\"chebyshevpoly\",\"checkbox\",\"chn_S\",\"chn_a\",\"chn_k\",\"chnclear\",\"chnexport\",\"chnget\",\"chngetks\",\"chnmix\",\"chnparams\",\"chnset\",\"chnsetks\",\"chuap\",\"clear\",\"clfilt\",\"clip\",\"clockoff\",\"clockon\",\"cmp\",\"cmplxprod\",\"comb\",\"combinv\",\"compilecsd\",\"compileorc\",\"compilestr\",\"compress\",\"compress2\",\"connect\",\"control\",\"convle\",\"convolve\",\"copya2ftab\",\"copyf2array\",\"cos\",\"cosh\",\"cosinv\",\"cosseg\",\"cossegb\",\"cossegr\",\"cps2pch\",\"cpsmidi\",\"cpsmidib\",\"cpsmidinn\",\"cpsoct\",\"cpspch\",\"cpstmid\",\"cpstun\",\"cpstuni\",\"cpsxpch\",\"cpumeter\",\"cpuprc\",\"cross2\",\"crossfm\",\"crossfmi\",\"crossfmpm\",\"crossfmpmi\",\"crosspm\",\"crosspmi\",\"crunch\",\"ctlchn\",\"ctrl14\",\"ctrl21\",\"ctrl7\",\"ctrlinit\",\"cuserrnd\",\"dam\",\"date\",\"dates\",\"db\",\"dbamp\",\"dbfsamp\",\"dcblock\",\"dcblock2\",\"dconv\",\"dct\",\"dctinv\",\"deinterleave\",\"delay\",\"delay1\",\"delayk\",\"delayr\",\"delayw\",\"deltap\",\"deltap3\",\"deltapi\",\"deltapn\",\"deltapx\",\"deltapxw\",\"denorm\",\"diff\",\"diode_ladder\",\"directory\",\"diskgrain\",\"diskin\",\"diskin2\",\"dispfft\",\"display\",\"distort\",\"distort1\",\"divz\",\"doppler\",\"dot\",\"downsamp\",\"dripwater\",\"dssiactivate\",\"dssiaudio\",\"dssictls\",\"dssiinit\",\"dssilist\",\"dumpk\",\"dumpk2\",\"dumpk3\",\"dumpk4\",\"duserrnd\",\"dust\",\"dust2\",\"envlpx\",\"envlpxr\",\"ephasor\",\"eqfil\",\"evalstr\",\"event\",\"event_i\",\"exciter\",\"exitnow\",\"exp\",\"expcurve\",\"expon\",\"exprand\",\"exprandi\",\"expseg\",\"expsega\",\"expsegb\",\"expsegba\",\"expsegr\",\"fareylen\",\"fareyleni\",\"faustaudio\",\"faustcompile\",\"faustctl\",\"faustdsp\",\"faustgen\",\"faustplay\",\"fft\",\"fftinv\",\"ficlose\",\"filebit\",\"filelen\",\"filenchnls\",\"filepeak\",\"filescal\",\"filesr\",\"filevalid\",\"fillarray\",\"filter2\",\"fin\",\"fini\",\"fink\",\"fiopen\",\"flanger\",\"flashtxt\",\"flooper\",\"flooper2\",\"floor\",\"fmanal\",\"fmax\",\"fmb3\",\"fmbell\",\"fmin\",\"fmmetal\",\"fmod\",\"fmpercfl\",\"fmrhode\",\"fmvoice\",\"fmwurlie\",\"fof\",\"fof2\",\"fofilter\",\"fog\",\"fold\",\"follow\",\"follow2\",\"foscil\",\"foscili\",\"fout\",\"fouti\",\"foutir\",\"foutk\",\"fprintks\",\"fprints\",\"frac\",\"fractalnoise\",\"framebuffer\",\"freeverb\",\"ftaudio\",\"ftchnls\",\"ftconv\",\"ftcps\",\"ftfree\",\"ftgen\",\"ftgenonce\",\"ftgentmp\",\"ftlen\",\"ftload\",\"ftloadk\",\"ftlptim\",\"ftmorf\",\"ftom\",\"ftprint\",\"ftresize\",\"ftresizei\",\"ftsamplebank\",\"ftsave\",\"ftsavek\",\"ftslice\",\"ftsr\",\"gain\",\"gainslider\",\"gauss\",\"gaussi\",\"gausstrig\",\"gbuzz\",\"genarray\",\"genarray_i\",\"gendy\",\"gendyc\",\"gendyx\",\"getcfg\",\"getcol\",\"getftargs\",\"getrow\",\"getrowlin\",\"getseed\",\"gogobel\",\"grain\",\"grain2\",\"grain3\",\"granule\",\"guiro\",\"harmon\",\"harmon2\",\"harmon3\",\"harmon4\",\"hdf5read\",\"hdf5write\",\"hilbert\",\"hilbert2\",\"hrtfearly\",\"hrtfmove\",\"hrtfmove2\",\"hrtfreverb\",\"hrtfstat\",\"hsboscil\",\"hvs1\",\"hvs2\",\"hvs3\",\"hypot\",\"i\",\"ihold\",\"imagecreate\",\"imagefree\",\"imagegetpixel\",\"imageload\",\"imagesave\",\"imagesetpixel\",\"imagesize\",\"in\",\"in32\",\"inch\",\"inh\",\"init\",\"initc14\",\"initc21\",\"initc7\",\"inleta\",\"inletf\",\"inletk\",\"inletkid\",\"inletv\",\"ino\",\"inq\",\"inrg\",\"ins\",\"insglobal\",\"insremot\",\"int\",\"integ\",\"interleave\",\"interp\",\"invalue\",\"inx\",\"inz\",\"jacktransport\",\"jitter\",\"jitter2\",\"joystick\",\"jspline\",\"k\",\"la_i_add_mc\",\"la_i_add_mr\",\"la_i_add_vc\",\"la_i_add_vr\",\"la_i_assign_mc\",\"la_i_assign_mr\",\"la_i_assign_t\",\"la_i_assign_vc\",\"la_i_assign_vr\",\"la_i_conjugate_mc\",\"la_i_conjugate_mr\",\"la_i_conjugate_vc\",\"la_i_conjugate_vr\",\"la_i_distance_vc\",\"la_i_distance_vr\",\"la_i_divide_mc\",\"la_i_divide_mr\",\"la_i_divide_vc\",\"la_i_divide_vr\",\"la_i_dot_mc\",\"la_i_dot_mc_vc\",\"la_i_dot_mr\",\"la_i_dot_mr_vr\",\"la_i_dot_vc\",\"la_i_dot_vr\",\"la_i_get_mc\",\"la_i_get_mr\",\"la_i_get_vc\",\"la_i_get_vr\",\"la_i_invert_mc\",\"la_i_invert_mr\",\"la_i_lower_solve_mc\",\"la_i_lower_solve_mr\",\"la_i_lu_det_mc\",\"la_i_lu_det_mr\",\"la_i_lu_factor_mc\",\"la_i_lu_factor_mr\",\"la_i_lu_solve_mc\",\"la_i_lu_solve_mr\",\"la_i_mc_create\",\"la_i_mc_set\",\"la_i_mr_create\",\"la_i_mr_set\",\"la_i_multiply_mc\",\"la_i_multiply_mr\",\"la_i_multiply_vc\",\"la_i_multiply_vr\",\"la_i_norm1_mc\",\"la_i_norm1_mr\",\"la_i_norm1_vc\",\"la_i_norm1_vr\",\"la_i_norm_euclid_mc\",\"la_i_norm_euclid_mr\",\"la_i_norm_euclid_vc\",\"la_i_norm_euclid_vr\",\"la_i_norm_inf_mc\",\"la_i_norm_inf_mr\",\"la_i_norm_inf_vc\",\"la_i_norm_inf_vr\",\"la_i_norm_max_mc\",\"la_i_norm_max_mr\",\"la_i_print_mc\",\"la_i_print_mr\",\"la_i_print_vc\",\"la_i_print_vr\",\"la_i_qr_eigen_mc\",\"la_i_qr_eigen_mr\",\"la_i_qr_factor_mc\",\"la_i_qr_factor_mr\",\"la_i_qr_sym_eigen_mc\",\"la_i_qr_sym_eigen_mr\",\"la_i_random_mc\",\"la_i_random_mr\",\"la_i_random_vc\",\"la_i_random_vr\",\"la_i_size_mc\",\"la_i_size_mr\",\"la_i_size_vc\",\"la_i_size_vr\",\"la_i_subtract_mc\",\"la_i_subtract_mr\",\"la_i_subtract_vc\",\"la_i_subtract_vr\",\"la_i_t_assign\",\"la_i_trace_mc\",\"la_i_trace_mr\",\"la_i_transpose_mc\",\"la_i_transpose_mr\",\"la_i_upper_solve_mc\",\"la_i_upper_solve_mr\",\"la_i_vc_create\",\"la_i_vc_set\",\"la_i_vr_create\",\"la_i_vr_set\",\"la_k_a_assign\",\"la_k_add_mc\",\"la_k_add_mr\",\"la_k_add_vc\",\"la_k_add_vr\",\"la_k_assign_a\",\"la_k_assign_f\",\"la_k_assign_mc\",\"la_k_assign_mr\",\"la_k_assign_t\",\"la_k_assign_vc\",\"la_k_assign_vr\",\"la_k_conjugate_mc\",\"la_k_conjugate_mr\",\"la_k_conjugate_vc\",\"la_k_conjugate_vr\",\"la_k_current_f\",\"la_k_current_vr\",\"la_k_distance_vc\",\"la_k_distance_vr\",\"la_k_divide_mc\",\"la_k_divide_mr\",\"la_k_divide_vc\",\"la_k_divide_vr\",\"la_k_dot_mc\",\"la_k_dot_mc_vc\",\"la_k_dot_mr\",\"la_k_dot_mr_vr\",\"la_k_dot_vc\",\"la_k_dot_vr\",\"la_k_f_assign\",\"la_k_get_mc\",\"la_k_get_mr\",\"la_k_get_vc\",\"la_k_get_vr\",\"la_k_invert_mc\",\"la_k_invert_mr\",\"la_k_lower_solve_mc\",\"la_k_lower_solve_mr\",\"la_k_lu_det_mc\",\"la_k_lu_det_mr\",\"la_k_lu_factor_mc\",\"la_k_lu_factor_mr\",\"la_k_lu_solve_mc\",\"la_k_lu_solve_mr\",\"la_k_mc_set\",\"la_k_mr_set\",\"la_k_multiply_mc\",\"la_k_multiply_mr\",\"la_k_multiply_vc\",\"la_k_multiply_vr\",\"la_k_norm1_mc\",\"la_k_norm1_mr\",\"la_k_norm1_vc\",\"la_k_norm1_vr\",\"la_k_norm_euclid_mc\",\"la_k_norm_euclid_mr\",\"la_k_norm_euclid_vc\",\"la_k_norm_euclid_vr\",\"la_k_norm_inf_mc\",\"la_k_norm_inf_mr\",\"la_k_norm_inf_vc\",\"la_k_norm_inf_vr\",\"la_k_norm_max_mc\",\"la_k_norm_max_mr\",\"la_k_qr_eigen_mc\",\"la_k_qr_eigen_mr\",\"la_k_qr_factor_mc\",\"la_k_qr_factor_mr\",\"la_k_qr_sym_eigen_mc\",\"la_k_qr_sym_eigen_mr\",\"la_k_random_mc\",\"la_k_random_mr\",\"la_k_random_vc\",\"la_k_random_vr\",\"la_k_subtract_mc\",\"la_k_subtract_mr\",\"la_k_subtract_vc\",\"la_k_subtract_vr\",\"la_k_t_assign\",\"la_k_trace_mc\",\"la_k_trace_mr\",\"la_k_upper_solve_mc\",\"la_k_upper_solve_mr\",\"la_k_vc_set\",\"la_k_vr_set\",\"lenarray\",\"lfo\",\"limit\",\"limit1\",\"lincos\",\"line\",\"linen\",\"linenr\",\"lineto\",\"link_beat_force\",\"link_beat_get\",\"link_beat_request\",\"link_create\",\"link_enable\",\"link_is_enabled\",\"link_metro\",\"link_peers\",\"link_tempo_get\",\"link_tempo_set\",\"linlin\",\"linrand\",\"linseg\",\"linsegb\",\"linsegr\",\"liveconv\",\"locsend\",\"locsig\",\"log\",\"log10\",\"log2\",\"logbtwo\",\"logcurve\",\"loopseg\",\"loopsegp\",\"looptseg\",\"loopxseg\",\"lorenz\",\"loscil\",\"loscil3\",\"loscil3phs\",\"loscilphs\",\"loscilx\",\"lowpass2\",\"lowres\",\"lowresx\",\"lpf18\",\"lpform\",\"lpfreson\",\"lphasor\",\"lpinterp\",\"lposcil\",\"lposcil3\",\"lposcila\",\"lposcilsa\",\"lposcilsa2\",\"lpread\",\"lpreson\",\"lpshold\",\"lpsholdp\",\"lpslot\",\"lua_exec\",\"lua_iaopcall\",\"lua_iaopcall_off\",\"lua_ikopcall\",\"lua_ikopcall_off\",\"lua_iopcall\",\"lua_iopcall_off\",\"lua_opdef\",\"mac\",\"maca\",\"madsr\",\"mags\",\"mandel\",\"mandol\",\"maparray\",\"maparray_i\",\"marimba\",\"massign\",\"max\",\"max_k\",\"maxabs\",\"maxabsaccum\",\"maxaccum\",\"maxalloc\",\"maxarray\",\"mclock\",\"mdelay\",\"median\",\"mediank\",\"metro\",\"mfb\",\"midglobal\",\"midiarp\",\"midic14\",\"midic21\",\"midic7\",\"midichannelaftertouch\",\"midichn\",\"midicontrolchange\",\"midictrl\",\"mididefault\",\"midifilestatus\",\"midiin\",\"midinoteoff\",\"midinoteoncps\",\"midinoteonkey\",\"midinoteonoct\",\"midinoteonpch\",\"midion\",\"midion2\",\"midiout\",\"midiout_i\",\"midipgm\",\"midipitchbend\",\"midipolyaftertouch\",\"midiprogramchange\",\"miditempo\",\"midremot\",\"min\",\"minabs\",\"minabsaccum\",\"minaccum\",\"minarray\",\"mincer\",\"mirror\",\"mode\",\"modmatrix\",\"monitor\",\"moog\",\"moogladder\",\"moogladder2\",\"moogvcf\",\"moogvcf2\",\"moscil\",\"mp3bitrate\",\"mp3in\",\"mp3len\",\"mp3nchnls\",\"mp3scal\",\"mp3sr\",\"mpulse\",\"mrtmsg\",\"mtof\",\"mton\",\"multitap\",\"mute\",\"mvchpf\",\"mvclpf1\",\"mvclpf2\",\"mvclpf3\",\"mvclpf4\",\"mxadsr\",\"nchnls_hw\",\"nestedap\",\"nlalp\",\"nlfilt\",\"nlfilt2\",\"noise\",\"noteoff\",\"noteon\",\"noteondur\",\"noteondur2\",\"notnum\",\"nreverb\",\"nrpn\",\"nsamp\",\"nstance\",\"nstrnum\",\"ntom\",\"ntrpol\",\"nxtpow2\",\"octave\",\"octcps\",\"octmidi\",\"octmidib\",\"octmidinn\",\"octpch\",\"olabuffer\",\"oscbnk\",\"oscil\",\"oscil1\",\"oscil1i\",\"oscil3\",\"oscili\",\"oscilikt\",\"osciliktp\",\"oscilikts\",\"osciln\",\"oscils\",\"oscilx\",\"out\",\"out32\",\"outc\",\"outch\",\"outh\",\"outiat\",\"outic\",\"outic14\",\"outipat\",\"outipb\",\"outipc\",\"outkat\",\"outkc\",\"outkc14\",\"outkpat\",\"outkpb\",\"outkpc\",\"outleta\",\"outletf\",\"outletk\",\"outletkid\",\"outletv\",\"outo\",\"outq\",\"outq1\",\"outq2\",\"outq3\",\"outq4\",\"outrg\",\"outs\",\"outs1\",\"outs2\",\"outvalue\",\"outx\",\"outz\",\"p\",\"p5gconnect\",\"p5gdata\",\"pan\",\"pan2\",\"pareq\",\"part2txt\",\"partials\",\"partikkel\",\"partikkelget\",\"partikkelset\",\"partikkelsync\",\"passign\",\"paulstretch\",\"pcauchy\",\"pchbend\",\"pchmidi\",\"pchmidib\",\"pchmidinn\",\"pchoct\",\"pchtom\",\"pconvolve\",\"pcount\",\"pdclip\",\"pdhalf\",\"pdhalfy\",\"peak\",\"pgmassign\",\"pgmchn\",\"phaser1\",\"phaser2\",\"phasor\",\"phasorbnk\",\"phs\",\"pindex\",\"pinker\",\"pinkish\",\"pitch\",\"pitchac\",\"pitchamdf\",\"planet\",\"platerev\",\"plltrack\",\"pluck\",\"poisson\",\"pol2rect\",\"polyaft\",\"polynomial\",\"port\",\"portk\",\"poscil\",\"poscil3\",\"pow\",\"powershape\",\"powoftwo\",\"pows\",\"prealloc\",\"prepiano\",\"print\",\"print_type\",\"printarray\",\"printf\",\"printf_i\",\"printk\",\"printk2\",\"printks\",\"printks2\",\"prints\",\"product\",\"pset\",\"ptable\",\"ptable3\",\"ptablei\",\"ptableiw\",\"ptablew\",\"ptrack\",\"puts\",\"pvadd\",\"pvbufread\",\"pvcross\",\"pvinterp\",\"pvoc\",\"pvread\",\"pvs2array\",\"pvs2tab\",\"pvsadsyn\",\"pvsanal\",\"pvsarp\",\"pvsbandp\",\"pvsbandr\",\"pvsbin\",\"pvsblur\",\"pvsbuffer\",\"pvsbufread\",\"pvsbufread2\",\"pvscale\",\"pvscent\",\"pvsceps\",\"pvscross\",\"pvsdemix\",\"pvsdiskin\",\"pvsdisp\",\"pvsenvftw\",\"pvsfilter\",\"pvsfread\",\"pvsfreeze\",\"pvsfromarray\",\"pvsftr\",\"pvsftw\",\"pvsfwrite\",\"pvsgain\",\"pvshift\",\"pvsifd\",\"pvsin\",\"pvsinfo\",\"pvsinit\",\"pvslock\",\"pvsmaska\",\"pvsmix\",\"pvsmooth\",\"pvsmorph\",\"pvsosc\",\"pvsout\",\"pvspitch\",\"pvstanal\",\"pvstencil\",\"pvstrace\",\"pvsvoc\",\"pvswarp\",\"pvsynth\",\"pwd\",\"pyassign\",\"pyassigni\",\"pyassignt\",\"pycall\",\"pycall1\",\"pycall1i\",\"pycall1t\",\"pycall2\",\"pycall2i\",\"pycall2t\",\"pycall3\",\"pycall3i\",\"pycall3t\",\"pycall4\",\"pycall4i\",\"pycall4t\",\"pycall5\",\"pycall5i\",\"pycall5t\",\"pycall6\",\"pycall6i\",\"pycall6t\",\"pycall7\",\"pycall7i\",\"pycall7t\",\"pycall8\",\"pycall8i\",\"pycall8t\",\"pycalli\",\"pycalln\",\"pycallni\",\"pycallt\",\"pyeval\",\"pyevali\",\"pyevalt\",\"pyexec\",\"pyexeci\",\"pyexect\",\"pyinit\",\"pylassign\",\"pylassigni\",\"pylassignt\",\"pylcall\",\"pylcall1\",\"pylcall1i\",\"pylcall1t\",\"pylcall2\",\"pylcall2i\",\"pylcall2t\",\"pylcall3\",\"pylcall3i\",\"pylcall3t\",\"pylcall4\",\"pylcall4i\",\"pylcall4t\",\"pylcall5\",\"pylcall5i\",\"pylcall5t\",\"pylcall6\",\"pylcall6i\",\"pylcall6t\",\"pylcall7\",\"pylcall7i\",\"pylcall7t\",\"pylcall8\",\"pylcall8i\",\"pylcall8t\",\"pylcalli\",\"pylcalln\",\"pylcallni\",\"pylcallt\",\"pyleval\",\"pylevali\",\"pylevalt\",\"pylexec\",\"pylexeci\",\"pylexect\",\"pylrun\",\"pylruni\",\"pylrunt\",\"pyrun\",\"pyruni\",\"pyrunt\",\"qinf\",\"qnan\",\"r2c\",\"rand\",\"randh\",\"randi\",\"random\",\"randomh\",\"randomi\",\"rbjeq\",\"readclock\",\"readf\",\"readfi\",\"readk\",\"readk2\",\"readk3\",\"readk4\",\"readks\",\"readscore\",\"readscratch\",\"rect2pol\",\"release\",\"remoteport\",\"remove\",\"repluck\",\"reshapearray\",\"reson\",\"resonk\",\"resonr\",\"resonx\",\"resonxk\",\"resony\",\"resonz\",\"resyn\",\"reverb\",\"reverb2\",\"reverbsc\",\"rewindscore\",\"rezzy\",\"rfft\",\"rifft\",\"rms\",\"rnd\",\"rnd31\",\"round\",\"rspline\",\"rtclock\",\"s16b14\",\"s32b14\",\"samphold\",\"sandpaper\",\"sc_lag\",\"sc_lagud\",\"sc_phasor\",\"sc_trig\",\"scale\",\"scalearray\",\"scanhammer\",\"scans\",\"scantable\",\"scanu\",\"schedkwhen\",\"schedkwhennamed\",\"schedule\",\"schedwhen\",\"scoreline\",\"scoreline_i\",\"seed\",\"sekere\",\"select\",\"semitone\",\"sense\",\"sensekey\",\"seqtime\",\"seqtime2\",\"serialBegin\",\"serialEnd\",\"serialFlush\",\"serialPrint\",\"serialRead\",\"serialWrite\",\"serialWrite_i\",\"setcol\",\"setctrl\",\"setksmps\",\"setrow\",\"setscorepos\",\"sfilist\",\"sfinstr\",\"sfinstr3\",\"sfinstr3m\",\"sfinstrm\",\"sfload\",\"sflooper\",\"sfpassign\",\"sfplay\",\"sfplay3\",\"sfplay3m\",\"sfplaym\",\"sfplist\",\"sfpreset\",\"shaker\",\"shiftin\",\"shiftout\",\"signum\",\"sin\",\"sinh\",\"sininv\",\"sinsyn\",\"sleighbells\",\"slicearray\",\"slicearray_i\",\"slider16\",\"slider16f\",\"slider16table\",\"slider16tablef\",\"slider32\",\"slider32f\",\"slider32table\",\"slider32tablef\",\"slider64\",\"slider64f\",\"slider64table\",\"slider64tablef\",\"slider8\",\"slider8f\",\"slider8table\",\"slider8tablef\",\"sliderKawai\",\"sndloop\",\"sndwarp\",\"sndwarpst\",\"sockrecv\",\"sockrecvs\",\"socksend\",\"socksends\",\"sorta\",\"sortd\",\"soundin\",\"space\",\"spat3d\",\"spat3di\",\"spat3dt\",\"spdist\",\"splitrig\",\"sprintf\",\"sprintfk\",\"spsend\",\"sqrt\",\"squinewave\",\"statevar\",\"stix\",\"strcat\",\"strcatk\",\"strchar\",\"strchark\",\"strcmp\",\"strcmpk\",\"strcpy\",\"strcpyk\",\"strecv\",\"streson\",\"strfromurl\",\"strget\",\"strindex\",\"strindexk\",\"strlen\",\"strlenk\",\"strlower\",\"strlowerk\",\"strrindex\",\"strrindexk\",\"strset\",\"strsub\",\"strsubk\",\"strtod\",\"strtodk\",\"strtol\",\"strtolk\",\"strupper\",\"strupperk\",\"stsend\",\"subinstr\",\"subinstrinit\",\"sum\",\"sumarray\",\"svfilter\",\"syncgrain\",\"syncloop\",\"syncphasor\",\"system\",\"system_i\",\"tab\",\"tab2array\",\"tab2pvs\",\"tab_i\",\"tabifd\",\"table\",\"table3\",\"table3kt\",\"tablecopy\",\"tablefilter\",\"tablefilteri\",\"tablegpw\",\"tablei\",\"tableicopy\",\"tableigpw\",\"tableikt\",\"tableimix\",\"tableiw\",\"tablekt\",\"tablemix\",\"tableng\",\"tablera\",\"tableseg\",\"tableshuffle\",\"tableshufflei\",\"tablew\",\"tablewa\",\"tablewkt\",\"tablexkt\",\"tablexseg\",\"tabmorph\",\"tabmorpha\",\"tabmorphak\",\"tabmorphi\",\"tabplay\",\"tabrec\",\"tabrowlin\",\"tabsum\",\"tabw\",\"tabw_i\",\"tambourine\",\"tan\",\"tanh\",\"taninv\",\"taninv2\",\"tbvcf\",\"tempest\",\"tempo\",\"temposcal\",\"tempoval\",\"timedseq\",\"timeinstk\",\"timeinsts\",\"timek\",\"times\",\"tival\",\"tlineto\",\"tone\",\"tonek\",\"tonex\",\"tradsyn\",\"trandom\",\"transeg\",\"transegb\",\"transegr\",\"trcross\",\"trfilter\",\"trhighest\",\"trigger\",\"trigseq\",\"trim\",\"trim_i\",\"trirand\",\"trlowest\",\"trmix\",\"trscale\",\"trshift\",\"trsplit\",\"turnoff\",\"turnoff2\",\"turnon\",\"tvconv\",\"unirand\",\"unwrap\",\"upsamp\",\"urandom\",\"urd\",\"vactrol\",\"vadd\",\"vadd_i\",\"vaddv\",\"vaddv_i\",\"vaget\",\"valpass\",\"vaset\",\"vbap\",\"vbapg\",\"vbapgmove\",\"vbaplsinit\",\"vbapmove\",\"vbapz\",\"vbapzmove\",\"vcella\",\"vco\",\"vco2\",\"vco2ft\",\"vco2ift\",\"vco2init\",\"vcomb\",\"vcopy\",\"vcopy_i\",\"vdel_k\",\"vdelay\",\"vdelay3\",\"vdelayk\",\"vdelayx\",\"vdelayxq\",\"vdelayxs\",\"vdelayxw\",\"vdelayxwq\",\"vdelayxws\",\"vdivv\",\"vdivv_i\",\"vecdelay\",\"veloc\",\"vexp\",\"vexp_i\",\"vexpseg\",\"vexpv\",\"vexpv_i\",\"vibes\",\"vibr\",\"vibrato\",\"vincr\",\"vlimit\",\"vlinseg\",\"vlowres\",\"vmap\",\"vmirror\",\"vmult\",\"vmult_i\",\"vmultv\",\"vmultv_i\",\"voice\",\"vosim\",\"vphaseseg\",\"vport\",\"vpow\",\"vpow_i\",\"vpowv\",\"vpowv_i\",\"vpvoc\",\"vrandh\",\"vrandi\",\"vsubv\",\"vsubv_i\",\"vtaba\",\"vtabi\",\"vtabk\",\"vtable1k\",\"vtablea\",\"vtablei\",\"vtablek\",\"vtablewa\",\"vtablewi\",\"vtablewk\",\"vtabwa\",\"vtabwi\",\"vtabwk\",\"vwrap\",\"waveset\",\"websocket\",\"weibull\",\"wgbow\",\"wgbowedbar\",\"wgbrass\",\"wgclar\",\"wgflute\",\"wgpluck\",\"wgpluck2\",\"wguide1\",\"wguide2\",\"wiiconnect\",\"wiidata\",\"wiirange\",\"wiisend\",\"window\",\"wrap\",\"writescratch\",\"wterrain\",\"xadsr\",\"xin\",\"xout\",\"xscanmap\",\"xscans\",\"xscansmap\",\"xscanu\",\"xtratim\",\"xyscale\",\"zacl\",\"zakinit\",\"zamod\",\"zar\",\"zarg\",\"zaw\",\"zawm\",\"zdf_1pole\",\"zdf_1pole_mode\",\"zdf_2pole\",\"zdf_2pole_mode\",\"zdf_ladder\",\"zfilter2\",\"zir\",\"ziw\",\"ziwm\",\"zkcl\",\"zkmod\",\"zkr\",\"zkw\",\"zkwm\"],t=[\"array\",\"bformdec\",\"bformenc\",\"copy2ftab\",\"copy2ttab\",\"hrtfer\",\"ktableseg\",\"lentab\",\"maxtab\",\"mintab\",\"pop\",\"pop_f\",\"push\",\"push_f\",\"scalet\",\"sndload\",\"soundout\",\"soundouts\",\"specaddm\",\"specdiff\",\"specdisp\",\"specfilt\",\"spechist\",\"specptrk\",\"specscal\",\"specsum\",\"spectrum\",\"stack\",\"sumtab\",\"tabgen\",\"tabmap\",\"tabmap_i\",\"tabslice\",\"tb0\",\"tb0_init\",\"tb1\",\"tb10\",\"tb10_init\",\"tb11\",\"tb11_init\",\"tb12\",\"tb12_init\",\"tb13\",\"tb13_init\",\"tb14\",\"tb14_init\",\"tb15\",\"tb15_init\",\"tb1_init\",\"tb2\",\"tb2_init\",\"tb3\",\"tb3_init\",\"tb4\",\"tb4_init\",\"tb5\",\"tb5_init\",\"tb6\",\"tb6_init\",\"tb7\",\"tb7_init\",\"tb8\",\"tb8_init\",\"tb9\",\"tb9_init\",\"vbap16\",\"vbap4\",\"vbap4move\",\"vbap8\",\"vbap8move\",\"xyin\"];e=r.arrayToMap(e),t=r.arrayToMap(t),this.lineContinuations=[{token:\"constant.character.escape.line-continuation.csound\",regex:/\\\\$/},this.pushRule({token:\"constant.character.escape.line-continuation.csound\",regex:/\\\\/,next:\"line continuation\"})],this.comments.push(this.lineContinuations),this.quotedStringContents.push(this.lineContinuations,{token:\"invalid.illegal\",regex:/[^\"\\\\]*$/});var n=this.$rules.start;n.splice(1,0,{token:[\"text.csound\",\"entity.name.label.csound\",\"entity.punctuation.label.csound\",\"text.csound\"],regex:/^([ \\t]*)(\\w+)(:)([ \\t]+|$)/}),n.push(this.pushRule({token:\"keyword.function.csound\",regex:/\\binstr\\b/,next:\"instrument numbers and identifiers\"}),this.pushRule({token:\"keyword.function.csound\",regex:/\\bopcode\\b/,next:\"after opcode keyword\"}),{token:\"keyword.other.csound\",regex:/\\bend(?:in|op)\\b/},{token:\"variable.language.csound\",regex:/\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/},this.numbers,{token:\"keyword.operator.csound\",regex:\"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~\\u00ac]|[=!+\\\\-*/^%&|<>#?:]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"braced string\"}),{token:\"keyword.control.csound\",regex:/\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/},this.pushRule({token:\"keyword.control.csound\",regex:/\\b[ik]?goto\\b/,next:\"goto before label\"}),this.pushRule({token:\"keyword.control.csound\",regex:/\\b(?:r(?:einit|igoto)|tigoto)\\b/,next:\"goto before label\"}),this.pushRule({token:\"keyword.control.csound\",regex:/\\bc(?:g|in?|k|nk?)goto\\b/,next:[\"goto before label\",\"goto before argument\"]}),this.pushRule({token:\"keyword.control.csound\",regex:/\\btimout\\b/,next:[\"goto before label\",\"goto before argument\",\"goto before argument\"]}),this.pushRule({token:\"keyword.control.csound\",regex:/\\bloop_[gl][et]\\b/,next:[\"goto before label\",\"goto before argument\",\"goto before argument\",\"goto before argument\"]}),this.pushRule({token:\"support.function.csound\",regex:/\\b(?:readscore|scoreline(?:_i)?)\\b/,next:\"Csound score opcode\"}),this.pushRule({token:\"support.function.csound\",regex:/\\bpyl?run[it]?\\b(?!$)/,next:\"Python opcode\"}),this.pushRule({token:\"support.function.csound\",regex:/\\blua_(?:exec|opdef)\\b(?!$)/,next:\"Lua opcode\"}),{token:\"support.variable.csound\",regex:/\\bp\\d+\\b/},{regex:/\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/,onMatch:function(n,r,i,s){var o=n.split(this.splitRegex),u=o[1],a;return e.hasOwnProperty(u)?a=\"support.function.csound\":t.hasOwnProperty(u)&&(a=\"invalid.deprecated.csound\"),a?o[2]?[{type:a,value:u},{type:\"punctuation.type-annotation.csound\",value:o[2]},{type:\"type-annotation.storage.type.csound\",value:o[3]}]:a:\"text.csound\"}}),this.$rules[\"macro parameter value list\"].splice(2,0,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"macro parameter value braced string\"}),this.addRules({\"macro parameter value braced string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/}}/,next:\"macro parameter value list\"},{defaultToken:\"string.braced.csound\"}],\"instrument numbers and identifiers\":[this.comments,{token:\"entity.name.function.csound\",regex:/\\d+|[A-Z_a-z]\\w*/},this.popRule({token:\"empty\",regex:/$/})],\"after opcode keyword\":[this.comments,this.popRule({token:\"empty\",regex:/$/}),this.popRule({token:\"entity.name.function.opcode.csound\",regex:/[A-Z_a-z]\\w*/,next:\"opcode type signatures\"})],\"opcode type signatures\":[this.comments,this.popRule({token:\"empty\",regex:/$/}),{token:\"storage.type.csound\",regex:/\\b(?:0|[afijkKoOpPStV\\[\\]]+)/}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"braced string\":[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/}}/}),this.bracedStringContents,{defaultToken:\"string.braced.csound\"}],\"goto before argument\":[this.popRule({token:\"text.csound\",regex:/,/}),n],\"goto before label\":[{token:\"text.csound\",regex:/\\s+/},this.comments,this.popRule({token:\"entity.name.label.csound\",regex:/\\w+/}),this.popRule({token:\"empty\",regex:/(?!\\w)/})],\"Csound score opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"csound-score-start\"},this.popRule({token:\"empty\",regex:/$/})],\"Python opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"python-start\"},this.popRule({token:\"empty\",regex:/$/})],\"Lua opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"lua-start\"},this.popRule({token:\"empty\",regex:/$/})],\"line continuation\":[this.popRule({token:\"empty\",regex:/$/}),this.semicolonComments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}]});var i=[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/}}/})];this.embedRules(o,\"csound-score-\",i),this.embedRules(a,\"python-\",i),this.embedRules(u,\"lua-\",i),this.normalizeRules()};i.inherits(f,s),t.CsoundOrchestraHighlightRules=f}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/csound_document_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_orchestra_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules,s=e(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules,o=e(\"./html_highlight_rules\").HtmlHighlightRules,u=e(\"./text_highlight_rules\").TextHighlightRules,a=function(){this.$rules={start:[{token:[\"meta.tag.punctuation.tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:/(<)(CsoundSynthesi[sz]er)(>)/,next:\"synthesizer\"},{defaultToken:\"text.csound-document\"}],synthesizer:[{token:[\"meta.tag.punctuation.end-tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(</)(CsoundSynthesi[sz]er)(>)\",next:\"start\"},{token:[\"meta.tag.punctuation.tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(<)(CsInstruments)(>)\",next:\"csound-start\"},{token:[\"meta.tag.punctuation.tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(<)(CsScore)(>)\",next:\"csound-score-start\"},{token:[\"meta.tag.punctuation.tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(<)([Hh][Tt][Mm][Ll])(>)\",next:\"html-start\"}]},this.embedRules(i,\"csound-\",[{token:[\"meta.tag.punctuation.end-tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(</)(CsInstruments)(>)\",next:\"synthesizer\"}]),this.embedRules(s,\"csound-score-\",[{token:[\"meta.tag.punctuation.end-tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(</)(CsScore)(>)\",next:\"synthesizer\"}]),this.embedRules(o,\"html-\",[{token:[\"meta.tag.punctuation.end-tag-open.csound-document\",\"entity.name.tag.begin.csound-document\",\"meta.tag.punctuation.tag-close.csound-document\"],regex:\"(</)([Hh][Tt][Mm][Ll])(>)\",next:\"synthesizer\"}]),this.normalizeRules()};r.inherits(a,u),t.CsoundDocumentHighlightRules=a}),ace.define(\"ace/mode/csound_document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_document_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./csound_document_highlight_rules\").CsoundDocumentHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-csound_orchestra.js",
    "content": "ace.define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.semicolonComments={token:\"comment.line.semicolon.csound\",regex:\";.*$\"},this.comments=[{token:\"punctuation.definition.comment.begin.csound\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.end.csound\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.csound\"}]},{token:\"comment.line.double-slash.csound\",regex:\"//.*$\"},this.semicolonComments],this.macroUses=[{token:[\"entity.name.function.preprocessor.csound\",\"punctuation.definition.macro-parameter-value-list.begin.csound\"],regex:/(\\$[A-Z_a-z]\\w*\\.?)(\\()/,next:\"macro parameter value list\"},{token:\"entity.name.function.preprocessor.csound\",regex:/\\$[A-Z_a-z]\\w*(?:\\.|\\b)/}],this.numbers=[{token:\"constant.numeric.float.csound\",regex:/(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/},{token:[\"storage.type.number.csound\",\"constant.numeric.integer.hexadecimal.csound\"],regex:/(0[Xx])([0-9A-Fa-f]+)/},{token:\"constant.numeric.integer.decimal.csound\",regex:/\\d+/}],this.bracedStringContents=[{token:\"constant.character.escape.csound\",regex:/\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/},{token:\"constant.character.placeholder.csound\",regex:/%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/},{token:\"constant.character.escape.csound\",regex:/%%/}],this.quotedStringContents=[this.macroUses,this.bracedStringContents];var e=[this.comments,{token:\"keyword.preprocessor.csound\",regex:/#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/},{token:\"keyword.preprocessor.csound\",regex:/#include/,push:[this.comments,{token:\"string.csound\",regex:/([^ \\t])(?:.*?\\1)/,next:\"pop\"}]},{token:\"keyword.preprocessor.csound\",regex:/#[ \\t]*define/,next:\"define directive\"},{token:\"keyword.preprocessor.csound\",regex:/#(?:ifn?def|undef)\\b/,next:\"macro directive\"},this.macroUses];this.$rules={start:e,\"define directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.begin.csound\",regex:/\\(/,next:\"macro parameter name list\"},{token:\"punctuation.definition.macro.begin.csound\",regex:/#/,next:\"macro body\"}],\"macro parameter name list\":[{token:\"variable.parameter.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.end.csound\",regex:/\\)/,next:\"define directive\"}],\"macro body\":[{token:\"constant.character.escape.csound\",regex:/\\\\#/},{token:\"punctuation.definition.macro.end.csound\",regex:/#/,next:\"start\"},e],\"macro directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"macro parameter value list\":[{token:\"punctuation.definition.macro-parameter-value-list.end.csound\",regex:/\\)/,next:\"start\"},{token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"macro parameter value quoted string\"},this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),{token:\"punctuation.macro-parameter-value-separator.csound\",regex:\"[#']\"}],\"macro parameter value quoted string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/\"/,next:\"macro parameter value list\"},this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"macro parameter value parenthetical\":[{token:\"constant.character.escape.csound\",regex:/\\\\\\)/},this.popRule({token:\"punctuation.macro-parameter-value-parenthetical.end.csound\",regex:/\\)/}),this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),e]}};r.inherits(s,i),function(){this.pushRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){r.length===0&&r.push(n);if(Array.isArray(e.next))for(var s=0;s<e.next.length;s++)r.push(e.next[s]);else r.push(e.next);return this.next=r[r.length-1],e.token},get next(){return Array.isArray(e.next)?e.next[e.next.length-1]:e.next},set next(t){if(Array.isArray(e.next)){var n=e.next[e.next.length-1],r=n.length-1,i=t.length-1;if(i>r)while(r>=0&&i>=0){if(n.charAt(r)!==t.charAt(i)){var s=t.substr(0,i);for(var o=0;o<e.next.length;o++)e.next[o]=s+e.next[o];break}r--,i--}}else e.next=t},get token(){return e.token}}},this.popRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){return r.pop(),e.next?(r.push(e.next),this.next=r[r.length-1]):this.next=r.length>1?r[r.length-1]:r.pop(),e.token}}}}.call(s.prototype),t.CsoundPreprocessorHighlightRules=s}),ace.define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,s=function(){i.call(this),this.quotedStringContents.push({token:\"invalid.illegal.csound-score\",regex:/[^\"]*$/});var e=this.$rules.start;e.push({token:\"keyword.control.csound-score\",regex:/[abCdefiqstvxy]/},{token:\"invalid.illegal.csound-score\",regex:/w/},{token:\"constant.numeric.language.csound-score\",regex:/z/},{token:[\"keyword.control.csound-score\",\"constant.numeric.integer.decimal.csound-score\"],regex:/([nNpP][pP])(\\d+)/},{token:\"keyword.other.csound-score\",regex:/[mn]/,push:[{token:\"empty\",regex:/$/,next:\"pop\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/}]},{token:\"keyword.preprocessor.csound-score\",regex:/r\\b/,next:\"repeat section\"},this.numbers,{token:\"keyword.operator.csound-score\",regex:\"[!+\\\\-*/^%&|<>#~.]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound-score\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.braced-loop.begin.csound-score\",regex:/{/,next:\"loop after left brace\"})),this.addRules({\"repeat section\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"repeat section before label\"}],\"repeat section before label\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound-score\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound-score\"}],\"loop after left brace\":[this.popRule({token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"loop after repeat count\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after repeat count\":[this.popRule({token:\"entity.name.function.preprocessor.csound-score\",regex:/[A-Z_a-z]\\w*\\b/,next:\"loop after macro name\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after macro name\":[e,this.popRule({token:\"punctuation.braced-loop.end.csound-score\",regex:/}/})]}),this.normalizeRules()};r.inherits(s,i),t.CsoundScoreHighlightRules=s}),ace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"setn|foreach|foreachi|gcinfo|log10|maxn\",s=this.createKeywordMapper({keyword:e,\"support.function\":n,\"keyword.deprecated\":i,\"constant.library\":r,\"constant.language\":t,\"variable.language\":\"self\"},\"identifier\"),o=\"(?:(?:[1-9]\\\\d*)|(?:0))\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:\"+o+\"|\"+u+\")\",f=\"(?:\\\\.\\\\d+)\",l=\"(?:\\\\d+)\",c=\"(?:(?:\"+l+\"?\"+f+\")|(?:\"+l+\"\\\\.))\",h=\"(?:\"+c+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"string.start\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"string.end\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:h},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),ace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"variable.language\":\"self|cls\",\"constant.language\":t,keyword:e},\"identifier\"),i=\"[uU]?\",s=\"[rR]\",o=\"[fF]\",u=\"(?:[rR][fF]|[fF][rR])\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:s+'\"{3}',next:\"rawqqstring3\"},{token:\"string\",regex:s+'\"(?=.)',next:\"rawqqstring\"},{token:\"string\",regex:s+\"'{3}\",next:\"rawqstring3\"},{token:\"string\",regex:s+\"'(?=.)\",next:\"rawqstring\"},{token:\"string\",regex:o+'\"{3}',next:\"fqqstring3\"},{token:\"string\",regex:o+'\"(?=.)',next:\"fqqstring\"},{token:\"string\",regex:o+\"'{3}\",next:\"fqstring3\"},{token:\"string\",regex:o+\"'(?=.)\",next:\"fqstring\"},{token:\"string\",regex:u+'\"{3}',next:\"rfqqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"rfqqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"rfqstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"rfqstring\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"punctuation\",regex:\",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"},{include:\"constants\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],rawqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],rawqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],fqqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"fqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rfqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring:[{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstringParRules:[{token:\"paren.lparen\",regex:\"[\\\\[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)]\"},{token:\"string\",regex:\"\\\\s+\"},{token:\"string\",regex:\"'(.)*'\"},{token:\"string\",regex:'\"(.)*\"'},{token:\"function.support\",regex:\"(!s|!r|!a)\"},{include:\"constants\"},{token:\"paren.rparen\",regex:\"}\",next:\"pop\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"}],constants:[{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:[\"punctuation\",\"function.support\"],regex:\"(\\\\.)([a-zA-Z_]+)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=e(\"../lib/oop\"),s=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,o=e(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules,u=e(\"./lua_highlight_rules\").LuaHighlightRules,a=e(\"./python_highlight_rules\").PythonHighlightRules,f=function(){s.call(this);var e=[\"ATSadd\",\"ATSaddnz\",\"ATSbufread\",\"ATScross\",\"ATSinfo\",\"ATSinterpread\",\"ATSpartialtap\",\"ATSread\",\"ATSreadnz\",\"ATSsinnoi\",\"FLbox\",\"FLbutBank\",\"FLbutton\",\"FLcloseButton\",\"FLcolor\",\"FLcolor2\",\"FLcount\",\"FLexecButton\",\"FLgetsnap\",\"FLgroup\",\"FLgroupEnd\",\"FLgroup_end\",\"FLhide\",\"FLhvsBox\",\"FLhvsBoxSetValue\",\"FLjoy\",\"FLkeyIn\",\"FLknob\",\"FLlabel\",\"FLloadsnap\",\"FLmouse\",\"FLpack\",\"FLpackEnd\",\"FLpack_end\",\"FLpanel\",\"FLpanelEnd\",\"FLpanel_end\",\"FLprintk\",\"FLprintk2\",\"FLroller\",\"FLrun\",\"FLsavesnap\",\"FLscroll\",\"FLscrollEnd\",\"FLscroll_end\",\"FLsetAlign\",\"FLsetBox\",\"FLsetColor\",\"FLsetColor2\",\"FLsetFont\",\"FLsetPosition\",\"FLsetSize\",\"FLsetSnapGroup\",\"FLsetText\",\"FLsetTextColor\",\"FLsetTextSize\",\"FLsetTextType\",\"FLsetVal\",\"FLsetVal_i\",\"FLsetVali\",\"FLsetsnap\",\"FLshow\",\"FLslidBnk\",\"FLslidBnk2\",\"FLslidBnk2Set\",\"FLslidBnk2Setk\",\"FLslidBnkGetHandle\",\"FLslidBnkSet\",\"FLslidBnkSetk\",\"FLslider\",\"FLtabs\",\"FLtabsEnd\",\"FLtabs_end\",\"FLtext\",\"FLupdate\",\"FLvalue\",\"FLvkeybd\",\"FLvslidBnk\",\"FLvslidBnk2\",\"FLxyin\",\"JackoAudioIn\",\"JackoAudioInConnect\",\"JackoAudioOut\",\"JackoAudioOutConnect\",\"JackoFreewheel\",\"JackoInfo\",\"JackoInit\",\"JackoMidiInConnect\",\"JackoMidiOut\",\"JackoMidiOutConnect\",\"JackoNoteOut\",\"JackoOn\",\"JackoTransport\",\"K35_hpf\",\"K35_lpf\",\"MixerClear\",\"MixerGetLevel\",\"MixerReceive\",\"MixerSend\",\"MixerSetLevel\",\"MixerSetLevel_i\",\"OSCbundle\",\"OSCcount\",\"OSCinit\",\"OSCinitM\",\"OSClisten\",\"OSCraw\",\"OSCsend\",\"OSCsend_lo\",\"S\",\"STKBandedWG\",\"STKBeeThree\",\"STKBlowBotl\",\"STKBlowHole\",\"STKBowed\",\"STKBrass\",\"STKClarinet\",\"STKDrummer\",\"STKFMVoices\",\"STKFlute\",\"STKHevyMetl\",\"STKMandolin\",\"STKModalBar\",\"STKMoog\",\"STKPercFlut\",\"STKPlucked\",\"STKResonate\",\"STKRhodey\",\"STKSaxofony\",\"STKShakers\",\"STKSimple\",\"STKSitar\",\"STKStifKarp\",\"STKTubeBell\",\"STKVoicForm\",\"STKWhistle\",\"STKWurley\",\"a\",\"abs\",\"active\",\"adsr\",\"adsyn\",\"adsynt\",\"adsynt2\",\"aftouch\",\"alpass\",\"alwayson\",\"ampdb\",\"ampdbfs\",\"ampmidi\",\"ampmidid\",\"areson\",\"aresonk\",\"atone\",\"atonek\",\"atonex\",\"babo\",\"balance\",\"balance2\",\"bamboo\",\"barmodel\",\"bbcutm\",\"bbcuts\",\"beadsynt\",\"beosc\",\"betarand\",\"bexprnd\",\"bformdec1\",\"bformenc1\",\"binit\",\"biquad\",\"biquada\",\"birnd\",\"bpf\",\"bpfcos\",\"bqrez\",\"butbp\",\"butbr\",\"buthp\",\"butlp\",\"butterbp\",\"butterbr\",\"butterhp\",\"butterlp\",\"button\",\"buzz\",\"c2r\",\"cabasa\",\"cauchy\",\"cauchyi\",\"cbrt\",\"ceil\",\"cell\",\"cent\",\"centroid\",\"ceps\",\"cepsinv\",\"chanctrl\",\"changed\",\"changed2\",\"chani\",\"chano\",\"chebyshevpoly\",\"checkbox\",\"chn_S\",\"chn_a\",\"chn_k\",\"chnclear\",\"chnexport\",\"chnget\",\"chngetks\",\"chnmix\",\"chnparams\",\"chnset\",\"chnsetks\",\"chuap\",\"clear\",\"clfilt\",\"clip\",\"clockoff\",\"clockon\",\"cmp\",\"cmplxprod\",\"comb\",\"combinv\",\"compilecsd\",\"compileorc\",\"compilestr\",\"compress\",\"compress2\",\"connect\",\"control\",\"convle\",\"convolve\",\"copya2ftab\",\"copyf2array\",\"cos\",\"cosh\",\"cosinv\",\"cosseg\",\"cossegb\",\"cossegr\",\"cps2pch\",\"cpsmidi\",\"cpsmidib\",\"cpsmidinn\",\"cpsoct\",\"cpspch\",\"cpstmid\",\"cpstun\",\"cpstuni\",\"cpsxpch\",\"cpumeter\",\"cpuprc\",\"cross2\",\"crossfm\",\"crossfmi\",\"crossfmpm\",\"crossfmpmi\",\"crosspm\",\"crosspmi\",\"crunch\",\"ctlchn\",\"ctrl14\",\"ctrl21\",\"ctrl7\",\"ctrlinit\",\"cuserrnd\",\"dam\",\"date\",\"dates\",\"db\",\"dbamp\",\"dbfsamp\",\"dcblock\",\"dcblock2\",\"dconv\",\"dct\",\"dctinv\",\"deinterleave\",\"delay\",\"delay1\",\"delayk\",\"delayr\",\"delayw\",\"deltap\",\"deltap3\",\"deltapi\",\"deltapn\",\"deltapx\",\"deltapxw\",\"denorm\",\"diff\",\"diode_ladder\",\"directory\",\"diskgrain\",\"diskin\",\"diskin2\",\"dispfft\",\"display\",\"distort\",\"distort1\",\"divz\",\"doppler\",\"dot\",\"downsamp\",\"dripwater\",\"dssiactivate\",\"dssiaudio\",\"dssictls\",\"dssiinit\",\"dssilist\",\"dumpk\",\"dumpk2\",\"dumpk3\",\"dumpk4\",\"duserrnd\",\"dust\",\"dust2\",\"envlpx\",\"envlpxr\",\"ephasor\",\"eqfil\",\"evalstr\",\"event\",\"event_i\",\"exciter\",\"exitnow\",\"exp\",\"expcurve\",\"expon\",\"exprand\",\"exprandi\",\"expseg\",\"expsega\",\"expsegb\",\"expsegba\",\"expsegr\",\"fareylen\",\"fareyleni\",\"faustaudio\",\"faustcompile\",\"faustctl\",\"faustdsp\",\"faustgen\",\"faustplay\",\"fft\",\"fftinv\",\"ficlose\",\"filebit\",\"filelen\",\"filenchnls\",\"filepeak\",\"filescal\",\"filesr\",\"filevalid\",\"fillarray\",\"filter2\",\"fin\",\"fini\",\"fink\",\"fiopen\",\"flanger\",\"flashtxt\",\"flooper\",\"flooper2\",\"floor\",\"fmanal\",\"fmax\",\"fmb3\",\"fmbell\",\"fmin\",\"fmmetal\",\"fmod\",\"fmpercfl\",\"fmrhode\",\"fmvoice\",\"fmwurlie\",\"fof\",\"fof2\",\"fofilter\",\"fog\",\"fold\",\"follow\",\"follow2\",\"foscil\",\"foscili\",\"fout\",\"fouti\",\"foutir\",\"foutk\",\"fprintks\",\"fprints\",\"frac\",\"fractalnoise\",\"framebuffer\",\"freeverb\",\"ftaudio\",\"ftchnls\",\"ftconv\",\"ftcps\",\"ftfree\",\"ftgen\",\"ftgenonce\",\"ftgentmp\",\"ftlen\",\"ftload\",\"ftloadk\",\"ftlptim\",\"ftmorf\",\"ftom\",\"ftprint\",\"ftresize\",\"ftresizei\",\"ftsamplebank\",\"ftsave\",\"ftsavek\",\"ftslice\",\"ftsr\",\"gain\",\"gainslider\",\"gauss\",\"gaussi\",\"gausstrig\",\"gbuzz\",\"genarray\",\"genarray_i\",\"gendy\",\"gendyc\",\"gendyx\",\"getcfg\",\"getcol\",\"getftargs\",\"getrow\",\"getrowlin\",\"getseed\",\"gogobel\",\"grain\",\"grain2\",\"grain3\",\"granule\",\"guiro\",\"harmon\",\"harmon2\",\"harmon3\",\"harmon4\",\"hdf5read\",\"hdf5write\",\"hilbert\",\"hilbert2\",\"hrtfearly\",\"hrtfmove\",\"hrtfmove2\",\"hrtfreverb\",\"hrtfstat\",\"hsboscil\",\"hvs1\",\"hvs2\",\"hvs3\",\"hypot\",\"i\",\"ihold\",\"imagecreate\",\"imagefree\",\"imagegetpixel\",\"imageload\",\"imagesave\",\"imagesetpixel\",\"imagesize\",\"in\",\"in32\",\"inch\",\"inh\",\"init\",\"initc14\",\"initc21\",\"initc7\",\"inleta\",\"inletf\",\"inletk\",\"inletkid\",\"inletv\",\"ino\",\"inq\",\"inrg\",\"ins\",\"insglobal\",\"insremot\",\"int\",\"integ\",\"interleave\",\"interp\",\"invalue\",\"inx\",\"inz\",\"jacktransport\",\"jitter\",\"jitter2\",\"joystick\",\"jspline\",\"k\",\"la_i_add_mc\",\"la_i_add_mr\",\"la_i_add_vc\",\"la_i_add_vr\",\"la_i_assign_mc\",\"la_i_assign_mr\",\"la_i_assign_t\",\"la_i_assign_vc\",\"la_i_assign_vr\",\"la_i_conjugate_mc\",\"la_i_conjugate_mr\",\"la_i_conjugate_vc\",\"la_i_conjugate_vr\",\"la_i_distance_vc\",\"la_i_distance_vr\",\"la_i_divide_mc\",\"la_i_divide_mr\",\"la_i_divide_vc\",\"la_i_divide_vr\",\"la_i_dot_mc\",\"la_i_dot_mc_vc\",\"la_i_dot_mr\",\"la_i_dot_mr_vr\",\"la_i_dot_vc\",\"la_i_dot_vr\",\"la_i_get_mc\",\"la_i_get_mr\",\"la_i_get_vc\",\"la_i_get_vr\",\"la_i_invert_mc\",\"la_i_invert_mr\",\"la_i_lower_solve_mc\",\"la_i_lower_solve_mr\",\"la_i_lu_det_mc\",\"la_i_lu_det_mr\",\"la_i_lu_factor_mc\",\"la_i_lu_factor_mr\",\"la_i_lu_solve_mc\",\"la_i_lu_solve_mr\",\"la_i_mc_create\",\"la_i_mc_set\",\"la_i_mr_create\",\"la_i_mr_set\",\"la_i_multiply_mc\",\"la_i_multiply_mr\",\"la_i_multiply_vc\",\"la_i_multiply_vr\",\"la_i_norm1_mc\",\"la_i_norm1_mr\",\"la_i_norm1_vc\",\"la_i_norm1_vr\",\"la_i_norm_euclid_mc\",\"la_i_norm_euclid_mr\",\"la_i_norm_euclid_vc\",\"la_i_norm_euclid_vr\",\"la_i_norm_inf_mc\",\"la_i_norm_inf_mr\",\"la_i_norm_inf_vc\",\"la_i_norm_inf_vr\",\"la_i_norm_max_mc\",\"la_i_norm_max_mr\",\"la_i_print_mc\",\"la_i_print_mr\",\"la_i_print_vc\",\"la_i_print_vr\",\"la_i_qr_eigen_mc\",\"la_i_qr_eigen_mr\",\"la_i_qr_factor_mc\",\"la_i_qr_factor_mr\",\"la_i_qr_sym_eigen_mc\",\"la_i_qr_sym_eigen_mr\",\"la_i_random_mc\",\"la_i_random_mr\",\"la_i_random_vc\",\"la_i_random_vr\",\"la_i_size_mc\",\"la_i_size_mr\",\"la_i_size_vc\",\"la_i_size_vr\",\"la_i_subtract_mc\",\"la_i_subtract_mr\",\"la_i_subtract_vc\",\"la_i_subtract_vr\",\"la_i_t_assign\",\"la_i_trace_mc\",\"la_i_trace_mr\",\"la_i_transpose_mc\",\"la_i_transpose_mr\",\"la_i_upper_solve_mc\",\"la_i_upper_solve_mr\",\"la_i_vc_create\",\"la_i_vc_set\",\"la_i_vr_create\",\"la_i_vr_set\",\"la_k_a_assign\",\"la_k_add_mc\",\"la_k_add_mr\",\"la_k_add_vc\",\"la_k_add_vr\",\"la_k_assign_a\",\"la_k_assign_f\",\"la_k_assign_mc\",\"la_k_assign_mr\",\"la_k_assign_t\",\"la_k_assign_vc\",\"la_k_assign_vr\",\"la_k_conjugate_mc\",\"la_k_conjugate_mr\",\"la_k_conjugate_vc\",\"la_k_conjugate_vr\",\"la_k_current_f\",\"la_k_current_vr\",\"la_k_distance_vc\",\"la_k_distance_vr\",\"la_k_divide_mc\",\"la_k_divide_mr\",\"la_k_divide_vc\",\"la_k_divide_vr\",\"la_k_dot_mc\",\"la_k_dot_mc_vc\",\"la_k_dot_mr\",\"la_k_dot_mr_vr\",\"la_k_dot_vc\",\"la_k_dot_vr\",\"la_k_f_assign\",\"la_k_get_mc\",\"la_k_get_mr\",\"la_k_get_vc\",\"la_k_get_vr\",\"la_k_invert_mc\",\"la_k_invert_mr\",\"la_k_lower_solve_mc\",\"la_k_lower_solve_mr\",\"la_k_lu_det_mc\",\"la_k_lu_det_mr\",\"la_k_lu_factor_mc\",\"la_k_lu_factor_mr\",\"la_k_lu_solve_mc\",\"la_k_lu_solve_mr\",\"la_k_mc_set\",\"la_k_mr_set\",\"la_k_multiply_mc\",\"la_k_multiply_mr\",\"la_k_multiply_vc\",\"la_k_multiply_vr\",\"la_k_norm1_mc\",\"la_k_norm1_mr\",\"la_k_norm1_vc\",\"la_k_norm1_vr\",\"la_k_norm_euclid_mc\",\"la_k_norm_euclid_mr\",\"la_k_norm_euclid_vc\",\"la_k_norm_euclid_vr\",\"la_k_norm_inf_mc\",\"la_k_norm_inf_mr\",\"la_k_norm_inf_vc\",\"la_k_norm_inf_vr\",\"la_k_norm_max_mc\",\"la_k_norm_max_mr\",\"la_k_qr_eigen_mc\",\"la_k_qr_eigen_mr\",\"la_k_qr_factor_mc\",\"la_k_qr_factor_mr\",\"la_k_qr_sym_eigen_mc\",\"la_k_qr_sym_eigen_mr\",\"la_k_random_mc\",\"la_k_random_mr\",\"la_k_random_vc\",\"la_k_random_vr\",\"la_k_subtract_mc\",\"la_k_subtract_mr\",\"la_k_subtract_vc\",\"la_k_subtract_vr\",\"la_k_t_assign\",\"la_k_trace_mc\",\"la_k_trace_mr\",\"la_k_upper_solve_mc\",\"la_k_upper_solve_mr\",\"la_k_vc_set\",\"la_k_vr_set\",\"lenarray\",\"lfo\",\"limit\",\"limit1\",\"lincos\",\"line\",\"linen\",\"linenr\",\"lineto\",\"link_beat_force\",\"link_beat_get\",\"link_beat_request\",\"link_create\",\"link_enable\",\"link_is_enabled\",\"link_metro\",\"link_peers\",\"link_tempo_get\",\"link_tempo_set\",\"linlin\",\"linrand\",\"linseg\",\"linsegb\",\"linsegr\",\"liveconv\",\"locsend\",\"locsig\",\"log\",\"log10\",\"log2\",\"logbtwo\",\"logcurve\",\"loopseg\",\"loopsegp\",\"looptseg\",\"loopxseg\",\"lorenz\",\"loscil\",\"loscil3\",\"loscil3phs\",\"loscilphs\",\"loscilx\",\"lowpass2\",\"lowres\",\"lowresx\",\"lpf18\",\"lpform\",\"lpfreson\",\"lphasor\",\"lpinterp\",\"lposcil\",\"lposcil3\",\"lposcila\",\"lposcilsa\",\"lposcilsa2\",\"lpread\",\"lpreson\",\"lpshold\",\"lpsholdp\",\"lpslot\",\"lua_exec\",\"lua_iaopcall\",\"lua_iaopcall_off\",\"lua_ikopcall\",\"lua_ikopcall_off\",\"lua_iopcall\",\"lua_iopcall_off\",\"lua_opdef\",\"mac\",\"maca\",\"madsr\",\"mags\",\"mandel\",\"mandol\",\"maparray\",\"maparray_i\",\"marimba\",\"massign\",\"max\",\"max_k\",\"maxabs\",\"maxabsaccum\",\"maxaccum\",\"maxalloc\",\"maxarray\",\"mclock\",\"mdelay\",\"median\",\"mediank\",\"metro\",\"mfb\",\"midglobal\",\"midiarp\",\"midic14\",\"midic21\",\"midic7\",\"midichannelaftertouch\",\"midichn\",\"midicontrolchange\",\"midictrl\",\"mididefault\",\"midifilestatus\",\"midiin\",\"midinoteoff\",\"midinoteoncps\",\"midinoteonkey\",\"midinoteonoct\",\"midinoteonpch\",\"midion\",\"midion2\",\"midiout\",\"midiout_i\",\"midipgm\",\"midipitchbend\",\"midipolyaftertouch\",\"midiprogramchange\",\"miditempo\",\"midremot\",\"min\",\"minabs\",\"minabsaccum\",\"minaccum\",\"minarray\",\"mincer\",\"mirror\",\"mode\",\"modmatrix\",\"monitor\",\"moog\",\"moogladder\",\"moogladder2\",\"moogvcf\",\"moogvcf2\",\"moscil\",\"mp3bitrate\",\"mp3in\",\"mp3len\",\"mp3nchnls\",\"mp3scal\",\"mp3sr\",\"mpulse\",\"mrtmsg\",\"mtof\",\"mton\",\"multitap\",\"mute\",\"mvchpf\",\"mvclpf1\",\"mvclpf2\",\"mvclpf3\",\"mvclpf4\",\"mxadsr\",\"nchnls_hw\",\"nestedap\",\"nlalp\",\"nlfilt\",\"nlfilt2\",\"noise\",\"noteoff\",\"noteon\",\"noteondur\",\"noteondur2\",\"notnum\",\"nreverb\",\"nrpn\",\"nsamp\",\"nstance\",\"nstrnum\",\"ntom\",\"ntrpol\",\"nxtpow2\",\"octave\",\"octcps\",\"octmidi\",\"octmidib\",\"octmidinn\",\"octpch\",\"olabuffer\",\"oscbnk\",\"oscil\",\"oscil1\",\"oscil1i\",\"oscil3\",\"oscili\",\"oscilikt\",\"osciliktp\",\"oscilikts\",\"osciln\",\"oscils\",\"oscilx\",\"out\",\"out32\",\"outc\",\"outch\",\"outh\",\"outiat\",\"outic\",\"outic14\",\"outipat\",\"outipb\",\"outipc\",\"outkat\",\"outkc\",\"outkc14\",\"outkpat\",\"outkpb\",\"outkpc\",\"outleta\",\"outletf\",\"outletk\",\"outletkid\",\"outletv\",\"outo\",\"outq\",\"outq1\",\"outq2\",\"outq3\",\"outq4\",\"outrg\",\"outs\",\"outs1\",\"outs2\",\"outvalue\",\"outx\",\"outz\",\"p\",\"p5gconnect\",\"p5gdata\",\"pan\",\"pan2\",\"pareq\",\"part2txt\",\"partials\",\"partikkel\",\"partikkelget\",\"partikkelset\",\"partikkelsync\",\"passign\",\"paulstretch\",\"pcauchy\",\"pchbend\",\"pchmidi\",\"pchmidib\",\"pchmidinn\",\"pchoct\",\"pchtom\",\"pconvolve\",\"pcount\",\"pdclip\",\"pdhalf\",\"pdhalfy\",\"peak\",\"pgmassign\",\"pgmchn\",\"phaser1\",\"phaser2\",\"phasor\",\"phasorbnk\",\"phs\",\"pindex\",\"pinker\",\"pinkish\",\"pitch\",\"pitchac\",\"pitchamdf\",\"planet\",\"platerev\",\"plltrack\",\"pluck\",\"poisson\",\"pol2rect\",\"polyaft\",\"polynomial\",\"port\",\"portk\",\"poscil\",\"poscil3\",\"pow\",\"powershape\",\"powoftwo\",\"pows\",\"prealloc\",\"prepiano\",\"print\",\"print_type\",\"printarray\",\"printf\",\"printf_i\",\"printk\",\"printk2\",\"printks\",\"printks2\",\"prints\",\"product\",\"pset\",\"ptable\",\"ptable3\",\"ptablei\",\"ptableiw\",\"ptablew\",\"ptrack\",\"puts\",\"pvadd\",\"pvbufread\",\"pvcross\",\"pvinterp\",\"pvoc\",\"pvread\",\"pvs2array\",\"pvs2tab\",\"pvsadsyn\",\"pvsanal\",\"pvsarp\",\"pvsbandp\",\"pvsbandr\",\"pvsbin\",\"pvsblur\",\"pvsbuffer\",\"pvsbufread\",\"pvsbufread2\",\"pvscale\",\"pvscent\",\"pvsceps\",\"pvscross\",\"pvsdemix\",\"pvsdiskin\",\"pvsdisp\",\"pvsenvftw\",\"pvsfilter\",\"pvsfread\",\"pvsfreeze\",\"pvsfromarray\",\"pvsftr\",\"pvsftw\",\"pvsfwrite\",\"pvsgain\",\"pvshift\",\"pvsifd\",\"pvsin\",\"pvsinfo\",\"pvsinit\",\"pvslock\",\"pvsmaska\",\"pvsmix\",\"pvsmooth\",\"pvsmorph\",\"pvsosc\",\"pvsout\",\"pvspitch\",\"pvstanal\",\"pvstencil\",\"pvstrace\",\"pvsvoc\",\"pvswarp\",\"pvsynth\",\"pwd\",\"pyassign\",\"pyassigni\",\"pyassignt\",\"pycall\",\"pycall1\",\"pycall1i\",\"pycall1t\",\"pycall2\",\"pycall2i\",\"pycall2t\",\"pycall3\",\"pycall3i\",\"pycall3t\",\"pycall4\",\"pycall4i\",\"pycall4t\",\"pycall5\",\"pycall5i\",\"pycall5t\",\"pycall6\",\"pycall6i\",\"pycall6t\",\"pycall7\",\"pycall7i\",\"pycall7t\",\"pycall8\",\"pycall8i\",\"pycall8t\",\"pycalli\",\"pycalln\",\"pycallni\",\"pycallt\",\"pyeval\",\"pyevali\",\"pyevalt\",\"pyexec\",\"pyexeci\",\"pyexect\",\"pyinit\",\"pylassign\",\"pylassigni\",\"pylassignt\",\"pylcall\",\"pylcall1\",\"pylcall1i\",\"pylcall1t\",\"pylcall2\",\"pylcall2i\",\"pylcall2t\",\"pylcall3\",\"pylcall3i\",\"pylcall3t\",\"pylcall4\",\"pylcall4i\",\"pylcall4t\",\"pylcall5\",\"pylcall5i\",\"pylcall5t\",\"pylcall6\",\"pylcall6i\",\"pylcall6t\",\"pylcall7\",\"pylcall7i\",\"pylcall7t\",\"pylcall8\",\"pylcall8i\",\"pylcall8t\",\"pylcalli\",\"pylcalln\",\"pylcallni\",\"pylcallt\",\"pyleval\",\"pylevali\",\"pylevalt\",\"pylexec\",\"pylexeci\",\"pylexect\",\"pylrun\",\"pylruni\",\"pylrunt\",\"pyrun\",\"pyruni\",\"pyrunt\",\"qinf\",\"qnan\",\"r2c\",\"rand\",\"randh\",\"randi\",\"random\",\"randomh\",\"randomi\",\"rbjeq\",\"readclock\",\"readf\",\"readfi\",\"readk\",\"readk2\",\"readk3\",\"readk4\",\"readks\",\"readscore\",\"readscratch\",\"rect2pol\",\"release\",\"remoteport\",\"remove\",\"repluck\",\"reshapearray\",\"reson\",\"resonk\",\"resonr\",\"resonx\",\"resonxk\",\"resony\",\"resonz\",\"resyn\",\"reverb\",\"reverb2\",\"reverbsc\",\"rewindscore\",\"rezzy\",\"rfft\",\"rifft\",\"rms\",\"rnd\",\"rnd31\",\"round\",\"rspline\",\"rtclock\",\"s16b14\",\"s32b14\",\"samphold\",\"sandpaper\",\"sc_lag\",\"sc_lagud\",\"sc_phasor\",\"sc_trig\",\"scale\",\"scalearray\",\"scanhammer\",\"scans\",\"scantable\",\"scanu\",\"schedkwhen\",\"schedkwhennamed\",\"schedule\",\"schedwhen\",\"scoreline\",\"scoreline_i\",\"seed\",\"sekere\",\"select\",\"semitone\",\"sense\",\"sensekey\",\"seqtime\",\"seqtime2\",\"serialBegin\",\"serialEnd\",\"serialFlush\",\"serialPrint\",\"serialRead\",\"serialWrite\",\"serialWrite_i\",\"setcol\",\"setctrl\",\"setksmps\",\"setrow\",\"setscorepos\",\"sfilist\",\"sfinstr\",\"sfinstr3\",\"sfinstr3m\",\"sfinstrm\",\"sfload\",\"sflooper\",\"sfpassign\",\"sfplay\",\"sfplay3\",\"sfplay3m\",\"sfplaym\",\"sfplist\",\"sfpreset\",\"shaker\",\"shiftin\",\"shiftout\",\"signum\",\"sin\",\"sinh\",\"sininv\",\"sinsyn\",\"sleighbells\",\"slicearray\",\"slicearray_i\",\"slider16\",\"slider16f\",\"slider16table\",\"slider16tablef\",\"slider32\",\"slider32f\",\"slider32table\",\"slider32tablef\",\"slider64\",\"slider64f\",\"slider64table\",\"slider64tablef\",\"slider8\",\"slider8f\",\"slider8table\",\"slider8tablef\",\"sliderKawai\",\"sndloop\",\"sndwarp\",\"sndwarpst\",\"sockrecv\",\"sockrecvs\",\"socksend\",\"socksends\",\"sorta\",\"sortd\",\"soundin\",\"space\",\"spat3d\",\"spat3di\",\"spat3dt\",\"spdist\",\"splitrig\",\"sprintf\",\"sprintfk\",\"spsend\",\"sqrt\",\"squinewave\",\"statevar\",\"stix\",\"strcat\",\"strcatk\",\"strchar\",\"strchark\",\"strcmp\",\"strcmpk\",\"strcpy\",\"strcpyk\",\"strecv\",\"streson\",\"strfromurl\",\"strget\",\"strindex\",\"strindexk\",\"strlen\",\"strlenk\",\"strlower\",\"strlowerk\",\"strrindex\",\"strrindexk\",\"strset\",\"strsub\",\"strsubk\",\"strtod\",\"strtodk\",\"strtol\",\"strtolk\",\"strupper\",\"strupperk\",\"stsend\",\"subinstr\",\"subinstrinit\",\"sum\",\"sumarray\",\"svfilter\",\"syncgrain\",\"syncloop\",\"syncphasor\",\"system\",\"system_i\",\"tab\",\"tab2array\",\"tab2pvs\",\"tab_i\",\"tabifd\",\"table\",\"table3\",\"table3kt\",\"tablecopy\",\"tablefilter\",\"tablefilteri\",\"tablegpw\",\"tablei\",\"tableicopy\",\"tableigpw\",\"tableikt\",\"tableimix\",\"tableiw\",\"tablekt\",\"tablemix\",\"tableng\",\"tablera\",\"tableseg\",\"tableshuffle\",\"tableshufflei\",\"tablew\",\"tablewa\",\"tablewkt\",\"tablexkt\",\"tablexseg\",\"tabmorph\",\"tabmorpha\",\"tabmorphak\",\"tabmorphi\",\"tabplay\",\"tabrec\",\"tabrowlin\",\"tabsum\",\"tabw\",\"tabw_i\",\"tambourine\",\"tan\",\"tanh\",\"taninv\",\"taninv2\",\"tbvcf\",\"tempest\",\"tempo\",\"temposcal\",\"tempoval\",\"timedseq\",\"timeinstk\",\"timeinsts\",\"timek\",\"times\",\"tival\",\"tlineto\",\"tone\",\"tonek\",\"tonex\",\"tradsyn\",\"trandom\",\"transeg\",\"transegb\",\"transegr\",\"trcross\",\"trfilter\",\"trhighest\",\"trigger\",\"trigseq\",\"trim\",\"trim_i\",\"trirand\",\"trlowest\",\"trmix\",\"trscale\",\"trshift\",\"trsplit\",\"turnoff\",\"turnoff2\",\"turnon\",\"tvconv\",\"unirand\",\"unwrap\",\"upsamp\",\"urandom\",\"urd\",\"vactrol\",\"vadd\",\"vadd_i\",\"vaddv\",\"vaddv_i\",\"vaget\",\"valpass\",\"vaset\",\"vbap\",\"vbapg\",\"vbapgmove\",\"vbaplsinit\",\"vbapmove\",\"vbapz\",\"vbapzmove\",\"vcella\",\"vco\",\"vco2\",\"vco2ft\",\"vco2ift\",\"vco2init\",\"vcomb\",\"vcopy\",\"vcopy_i\",\"vdel_k\",\"vdelay\",\"vdelay3\",\"vdelayk\",\"vdelayx\",\"vdelayxq\",\"vdelayxs\",\"vdelayxw\",\"vdelayxwq\",\"vdelayxws\",\"vdivv\",\"vdivv_i\",\"vecdelay\",\"veloc\",\"vexp\",\"vexp_i\",\"vexpseg\",\"vexpv\",\"vexpv_i\",\"vibes\",\"vibr\",\"vibrato\",\"vincr\",\"vlimit\",\"vlinseg\",\"vlowres\",\"vmap\",\"vmirror\",\"vmult\",\"vmult_i\",\"vmultv\",\"vmultv_i\",\"voice\",\"vosim\",\"vphaseseg\",\"vport\",\"vpow\",\"vpow_i\",\"vpowv\",\"vpowv_i\",\"vpvoc\",\"vrandh\",\"vrandi\",\"vsubv\",\"vsubv_i\",\"vtaba\",\"vtabi\",\"vtabk\",\"vtable1k\",\"vtablea\",\"vtablei\",\"vtablek\",\"vtablewa\",\"vtablewi\",\"vtablewk\",\"vtabwa\",\"vtabwi\",\"vtabwk\",\"vwrap\",\"waveset\",\"websocket\",\"weibull\",\"wgbow\",\"wgbowedbar\",\"wgbrass\",\"wgclar\",\"wgflute\",\"wgpluck\",\"wgpluck2\",\"wguide1\",\"wguide2\",\"wiiconnect\",\"wiidata\",\"wiirange\",\"wiisend\",\"window\",\"wrap\",\"writescratch\",\"wterrain\",\"xadsr\",\"xin\",\"xout\",\"xscanmap\",\"xscans\",\"xscansmap\",\"xscanu\",\"xtratim\",\"xyscale\",\"zacl\",\"zakinit\",\"zamod\",\"zar\",\"zarg\",\"zaw\",\"zawm\",\"zdf_1pole\",\"zdf_1pole_mode\",\"zdf_2pole\",\"zdf_2pole_mode\",\"zdf_ladder\",\"zfilter2\",\"zir\",\"ziw\",\"ziwm\",\"zkcl\",\"zkmod\",\"zkr\",\"zkw\",\"zkwm\"],t=[\"array\",\"bformdec\",\"bformenc\",\"copy2ftab\",\"copy2ttab\",\"hrtfer\",\"ktableseg\",\"lentab\",\"maxtab\",\"mintab\",\"pop\",\"pop_f\",\"push\",\"push_f\",\"scalet\",\"sndload\",\"soundout\",\"soundouts\",\"specaddm\",\"specdiff\",\"specdisp\",\"specfilt\",\"spechist\",\"specptrk\",\"specscal\",\"specsum\",\"spectrum\",\"stack\",\"sumtab\",\"tabgen\",\"tabmap\",\"tabmap_i\",\"tabslice\",\"tb0\",\"tb0_init\",\"tb1\",\"tb10\",\"tb10_init\",\"tb11\",\"tb11_init\",\"tb12\",\"tb12_init\",\"tb13\",\"tb13_init\",\"tb14\",\"tb14_init\",\"tb15\",\"tb15_init\",\"tb1_init\",\"tb2\",\"tb2_init\",\"tb3\",\"tb3_init\",\"tb4\",\"tb4_init\",\"tb5\",\"tb5_init\",\"tb6\",\"tb6_init\",\"tb7\",\"tb7_init\",\"tb8\",\"tb8_init\",\"tb9\",\"tb9_init\",\"vbap16\",\"vbap4\",\"vbap4move\",\"vbap8\",\"vbap8move\",\"xyin\"];e=r.arrayToMap(e),t=r.arrayToMap(t),this.lineContinuations=[{token:\"constant.character.escape.line-continuation.csound\",regex:/\\\\$/},this.pushRule({token:\"constant.character.escape.line-continuation.csound\",regex:/\\\\/,next:\"line continuation\"})],this.comments.push(this.lineContinuations),this.quotedStringContents.push(this.lineContinuations,{token:\"invalid.illegal\",regex:/[^\"\\\\]*$/});var n=this.$rules.start;n.splice(1,0,{token:[\"text.csound\",\"entity.name.label.csound\",\"entity.punctuation.label.csound\",\"text.csound\"],regex:/^([ \\t]*)(\\w+)(:)([ \\t]+|$)/}),n.push(this.pushRule({token:\"keyword.function.csound\",regex:/\\binstr\\b/,next:\"instrument numbers and identifiers\"}),this.pushRule({token:\"keyword.function.csound\",regex:/\\bopcode\\b/,next:\"after opcode keyword\"}),{token:\"keyword.other.csound\",regex:/\\bend(?:in|op)\\b/},{token:\"variable.language.csound\",regex:/\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/},this.numbers,{token:\"keyword.operator.csound\",regex:\"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~\\u00ac]|[=!+\\\\-*/^%&|<>#?:]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"braced string\"}),{token:\"keyword.control.csound\",regex:/\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/},this.pushRule({token:\"keyword.control.csound\",regex:/\\b[ik]?goto\\b/,next:\"goto before label\"}),this.pushRule({token:\"keyword.control.csound\",regex:/\\b(?:r(?:einit|igoto)|tigoto)\\b/,next:\"goto before label\"}),this.pushRule({token:\"keyword.control.csound\",regex:/\\bc(?:g|in?|k|nk?)goto\\b/,next:[\"goto before label\",\"goto before argument\"]}),this.pushRule({token:\"keyword.control.csound\",regex:/\\btimout\\b/,next:[\"goto before label\",\"goto before argument\",\"goto before argument\"]}),this.pushRule({token:\"keyword.control.csound\",regex:/\\bloop_[gl][et]\\b/,next:[\"goto before label\",\"goto before argument\",\"goto before argument\",\"goto before argument\"]}),this.pushRule({token:\"support.function.csound\",regex:/\\b(?:readscore|scoreline(?:_i)?)\\b/,next:\"Csound score opcode\"}),this.pushRule({token:\"support.function.csound\",regex:/\\bpyl?run[it]?\\b(?!$)/,next:\"Python opcode\"}),this.pushRule({token:\"support.function.csound\",regex:/\\blua_(?:exec|opdef)\\b(?!$)/,next:\"Lua opcode\"}),{token:\"support.variable.csound\",regex:/\\bp\\d+\\b/},{regex:/\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/,onMatch:function(n,r,i,s){var o=n.split(this.splitRegex),u=o[1],a;return e.hasOwnProperty(u)?a=\"support.function.csound\":t.hasOwnProperty(u)&&(a=\"invalid.deprecated.csound\"),a?o[2]?[{type:a,value:u},{type:\"punctuation.type-annotation.csound\",value:o[2]},{type:\"type-annotation.storage.type.csound\",value:o[3]}]:a:\"text.csound\"}}),this.$rules[\"macro parameter value list\"].splice(2,0,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"macro parameter value braced string\"}),this.addRules({\"macro parameter value braced string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/}}/,next:\"macro parameter value list\"},{defaultToken:\"string.braced.csound\"}],\"instrument numbers and identifiers\":[this.comments,{token:\"entity.name.function.csound\",regex:/\\d+|[A-Z_a-z]\\w*/},this.popRule({token:\"empty\",regex:/$/})],\"after opcode keyword\":[this.comments,this.popRule({token:\"empty\",regex:/$/}),this.popRule({token:\"entity.name.function.opcode.csound\",regex:/[A-Z_a-z]\\w*/,next:\"opcode type signatures\"})],\"opcode type signatures\":[this.comments,this.popRule({token:\"empty\",regex:/$/}),{token:\"storage.type.csound\",regex:/\\b(?:0|[afijkKoOpPStV\\[\\]]+)/}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"braced string\":[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/}}/}),this.bracedStringContents,{defaultToken:\"string.braced.csound\"}],\"goto before argument\":[this.popRule({token:\"text.csound\",regex:/,/}),n],\"goto before label\":[{token:\"text.csound\",regex:/\\s+/},this.comments,this.popRule({token:\"entity.name.label.csound\",regex:/\\w+/}),this.popRule({token:\"empty\",regex:/(?!\\w)/})],\"Csound score opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"csound-score-start\"},this.popRule({token:\"empty\",regex:/$/})],\"Python opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"python-start\"},this.popRule({token:\"empty\",regex:/$/})],\"Lua opcode\":[this.comments,{token:\"punctuation.definition.string.begin.csound\",regex:/{{/,next:\"lua-start\"},this.popRule({token:\"empty\",regex:/$/})],\"line continuation\":[this.popRule({token:\"empty\",regex:/$/}),this.semicolonComments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}]});var i=[this.popRule({token:\"punctuation.definition.string.end.csound\",regex:/}}/})];this.embedRules(o,\"csound-score-\",i),this.embedRules(a,\"python-\",i),this.embedRules(u,\"lua-\",i),this.normalizeRules()};i.inherits(f,s),t.CsoundOrchestraHighlightRules=f}),ace.define(\"ace/mode/csound_orchestra\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_orchestra_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"/*\",end:\"*/\"}}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-csound_score.js",
    "content": "ace.define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.semicolonComments={token:\"comment.line.semicolon.csound\",regex:\";.*$\"},this.comments=[{token:\"punctuation.definition.comment.begin.csound\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.end.csound\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.csound\"}]},{token:\"comment.line.double-slash.csound\",regex:\"//.*$\"},this.semicolonComments],this.macroUses=[{token:[\"entity.name.function.preprocessor.csound\",\"punctuation.definition.macro-parameter-value-list.begin.csound\"],regex:/(\\$[A-Z_a-z]\\w*\\.?)(\\()/,next:\"macro parameter value list\"},{token:\"entity.name.function.preprocessor.csound\",regex:/\\$[A-Z_a-z]\\w*(?:\\.|\\b)/}],this.numbers=[{token:\"constant.numeric.float.csound\",regex:/(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/},{token:[\"storage.type.number.csound\",\"constant.numeric.integer.hexadecimal.csound\"],regex:/(0[Xx])([0-9A-Fa-f]+)/},{token:\"constant.numeric.integer.decimal.csound\",regex:/\\d+/}],this.bracedStringContents=[{token:\"constant.character.escape.csound\",regex:/\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/},{token:\"constant.character.placeholder.csound\",regex:/%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/},{token:\"constant.character.escape.csound\",regex:/%%/}],this.quotedStringContents=[this.macroUses,this.bracedStringContents];var e=[this.comments,{token:\"keyword.preprocessor.csound\",regex:/#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/},{token:\"keyword.preprocessor.csound\",regex:/#include/,push:[this.comments,{token:\"string.csound\",regex:/([^ \\t])(?:.*?\\1)/,next:\"pop\"}]},{token:\"keyword.preprocessor.csound\",regex:/#[ \\t]*define/,next:\"define directive\"},{token:\"keyword.preprocessor.csound\",regex:/#(?:ifn?def|undef)\\b/,next:\"macro directive\"},this.macroUses];this.$rules={start:e,\"define directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.begin.csound\",regex:/\\(/,next:\"macro parameter name list\"},{token:\"punctuation.definition.macro.begin.csound\",regex:/#/,next:\"macro body\"}],\"macro parameter name list\":[{token:\"variable.parameter.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/},{token:\"punctuation.definition.macro-parameter-name-list.end.csound\",regex:/\\)/,next:\"define directive\"}],\"macro body\":[{token:\"constant.character.escape.csound\",regex:/\\\\#/},{token:\"punctuation.definition.macro.end.csound\",regex:/#/,next:\"start\"},e],\"macro directive\":[this.comments,{token:\"entity.name.function.preprocessor.csound\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"macro parameter value list\":[{token:\"punctuation.definition.macro-parameter-value-list.end.csound\",regex:/\\)/,next:\"start\"},{token:\"punctuation.definition.string.begin.csound\",regex:/\"/,next:\"macro parameter value quoted string\"},this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),{token:\"punctuation.macro-parameter-value-separator.csound\",regex:\"[#']\"}],\"macro parameter value quoted string\":[{token:\"constant.character.escape.csound\",regex:/\\\\[#'()]/},{token:\"invalid.illegal.csound\",regex:/[#'()]/},{token:\"punctuation.definition.string.end.csound\",regex:/\"/,next:\"macro parameter value list\"},this.quotedStringContents,{defaultToken:\"string.quoted.csound\"}],\"macro parameter value parenthetical\":[{token:\"constant.character.escape.csound\",regex:/\\\\\\)/},this.popRule({token:\"punctuation.macro-parameter-value-parenthetical.end.csound\",regex:/\\)/}),this.pushRule({token:\"punctuation.macro-parameter-value-parenthetical.begin.csound\",regex:/\\(/,next:\"macro parameter value parenthetical\"}),e]}};r.inherits(s,i),function(){this.pushRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){r.length===0&&r.push(n);if(Array.isArray(e.next))for(var s=0;s<e.next.length;s++)r.push(e.next[s]);else r.push(e.next);return this.next=r[r.length-1],e.token},get next(){return Array.isArray(e.next)?e.next[e.next.length-1]:e.next},set next(t){if(Array.isArray(e.next)){var n=e.next[e.next.length-1],r=n.length-1,i=t.length-1;if(i>r)while(r>=0&&i>=0){if(n.charAt(r)!==t.charAt(i)){var s=t.substr(0,i);for(var o=0;o<e.next.length;o++)e.next[o]=s+e.next[o];break}r--,i--}}else e.next=t},get token(){return e.token}}},this.popRule=function(e){return{regex:e.regex,onMatch:function(t,n,r,i){return r.pop(),e.next?(r.push(e.next),this.next=r[r.length-1]):this.next=r.length>1?r[r.length-1]:r.pop(),e.token}}}}.call(s.prototype),t.CsoundPreprocessorHighlightRules=s}),ace.define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules,s=function(){i.call(this),this.quotedStringContents.push({token:\"invalid.illegal.csound-score\",regex:/[^\"]*$/});var e=this.$rules.start;e.push({token:\"keyword.control.csound-score\",regex:/[abCdefiqstvxy]/},{token:\"invalid.illegal.csound-score\",regex:/w/},{token:\"constant.numeric.language.csound-score\",regex:/z/},{token:[\"keyword.control.csound-score\",\"constant.numeric.integer.decimal.csound-score\"],regex:/([nNpP][pP])(\\d+)/},{token:\"keyword.other.csound-score\",regex:/[mn]/,push:[{token:\"empty\",regex:/$/,next:\"pop\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/}]},{token:\"keyword.preprocessor.csound-score\",regex:/r\\b/,next:\"repeat section\"},this.numbers,{token:\"keyword.operator.csound-score\",regex:\"[!+\\\\-*/^%&|<>#~.]\"},this.pushRule({token:\"punctuation.definition.string.begin.csound-score\",regex:/\"/,next:\"quoted string\"}),this.pushRule({token:\"punctuation.braced-loop.begin.csound-score\",regex:/{/,next:\"loop after left brace\"})),this.addRules({\"repeat section\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"repeat section before label\"}],\"repeat section before label\":[{token:\"empty\",regex:/$/,next:\"start\"},this.comments,{token:\"entity.name.label.csound-score\",regex:/[A-Z_a-z]\\w*/,next:\"start\"}],\"quoted string\":[this.popRule({token:\"punctuation.definition.string.end.csound-score\",regex:/\"/}),this.quotedStringContents,{defaultToken:\"string.quoted.csound-score\"}],\"loop after left brace\":[this.popRule({token:\"constant.numeric.integer.decimal.csound-score\",regex:/\\d+/,next:\"loop after repeat count\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after repeat count\":[this.popRule({token:\"entity.name.function.preprocessor.csound-score\",regex:/[A-Z_a-z]\\w*\\b/,next:\"loop after macro name\"}),this.comments,{token:\"invalid.illegal.csound\",regex:/\\S.*/}],\"loop after macro name\":[e,this.popRule({token:\"punctuation.braced-loop.end.csound-score\",regex:/}/})]}),this.normalizeRules()};r.inherits(s,i),t.CsoundScoreHighlightRules=s}),ace.define(\"ace/mode/csound_score\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_score_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"/*\",end:\"*/\"}}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-csp.js",
    "content": "ace.define(\"ace/mode/csp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"constant.language\":\"child-src|connect-src|default-src|font-src|frame-src|img-src|manifest-src|media-src|object-src|script-src|style-src|worker-src|base-uri|plugin-types|sandbox|disown-opener|form-action|frame-ancestors|report-uri|report-to|upgrade-insecure-requests|block-all-mixed-content|require-sri-for|reflected-xss|referrer|policy-uri\",variable:\"'none'|'self'|'unsafe-inline'|'unsafe-eval'|'strict-dynamic'|'unsafe-hashed-attributes'\"},\"identifier\",!0);this.$rules={start:[{token:\"string.link\",regex:/https?:[^;\\s]*/},{token:\"operator.punctuation\",regex:/;/},{token:e,regex:/[^\\s;]+/}]}};r.inherits(s,i),t.CspHighlightRules=s}),ace.define(\"ace/mode/csp\",[\"require\",\"exports\",\"module\",\"ace/mode/text\",\"ace/mode/csp_highlight_rules\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./text\").Mode,i=e(\"./csp_highlight_rules\").CspHighlightRules,s=e(\"../lib/oop\"),o=function(){this.HighlightRules=i};s.inherits(o,r),function(){this.$id=\"ace/mode/csp\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-css.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c});                (function() {\n                    ace.require([\"ace/mode/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-curly.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/curly_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=function(){i.call(this),this.$rules.start.unshift({token:\"variable\",regex:\"{{\",push:\"curly-start\"}),this.$rules[\"curly-start\"]=[{token:\"variable\",regex:\"}}\",next:\"pop\"}],this.normalizeRules()};r.inherits(s,i),t.CurlyHighlightRules=s}),ace.define(\"ace/mode/curly\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/html\",\"ace/mode/curly_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,o=e(\"./folding/html\").FoldMode,u=e(\"./curly_highlight_rules\").CurlyHighlightRules,a=function(){i.call(this),this.HighlightRules=u,this.$outdent=new s,this.foldingRules=new o};r.inherits(a,i),function(){this.$id=\"ace/mode/curly\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-d.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/d_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"this|super|import|module|body|mixin|__traits|invariant|alias|asm|delete|typeof|typeid|sizeof|cast|new|in|is|typedef|__vector|__parameters\",t=\"break|case|continue|default|do|else|for|foreach|foreach_reverse|goto|if|return|switch|while|catch|try|throw|finally|version|assert|unittest|with\",n=\"auto|bool|char|dchar|wchar|byte|ubyte|float|double|real|cfloat|creal|cdouble|cent|ifloat|ireal|idouble|int|long|short|void|uint|ulong|ushort|ucent|function|delegate|string|wstring|dstring|size_t|ptrdiff_t|hash_t|Object\",r=\"abstract|align|debug|deprecated|export|extern|const|final|in|inout|out|ref|immutable|lazy|nothrow|override|package|pragma|private|protected|public|pure|scope|shared|__gshared|synchronized|static|volatile\",s=\"class|struct|union|template|interface|enum|macro\",o={token:\"constant.language.escape\",regex:\"\\\\\\\\(?:(?:x[0-9A-F]{2})|(?:[0-7]{1,3})|(?:['\\\"\\\\?0abfnrtv\\\\\\\\])|(?:u[0-9a-fA-F]{4})|(?:U[0-9a-fA-F]{8}))\"},u=\"null|true|false|__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__|__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__\",a=\"/|/\\\\=|&|&\\\\=|&&|\\\\|\\\\|\\\\=|\\\\|\\\\||\\\\-|\\\\-\\\\=|\\\\-\\\\-|\\\\+|\\\\+\\\\=|\\\\+\\\\+|\\\\<|\\\\<\\\\=|\\\\<\\\\<|\\\\<\\\\<\\\\=|\\\\<\\\\>|\\\\<\\\\>\\\\=|\\\\>|\\\\>\\\\=|\\\\>\\\\>\\\\=|\\\\>\\\\>\\\\>\\\\=|\\\\>\\\\>|\\\\>\\\\>\\\\>|\\\\!|\\\\!\\\\=|\\\\!\\\\<\\\\>|\\\\!\\\\<\\\\>\\\\=|\\\\!\\\\<|\\\\!\\\\<\\\\=|\\\\!\\\\>|\\\\!\\\\>\\\\=|\\\\?|\\\\$|\\\\=|\\\\=\\\\=|\\\\*|\\\\*\\\\=|%|%\\\\=|\\\\^|\\\\^\\\\=|\\\\^\\\\^|\\\\^\\\\^\\\\=|~|~\\\\=|\\\\=\\\\>|#\",f=this.$keywords=this.createKeywordMapper({\"keyword.modifier\":r,\"keyword.control\":t,\"keyword.type\":n,keyword:e,\"keyword.storage\":s,punctation:\"\\\\.|\\\\,|;|\\\\.\\\\.|\\\\.\\\\.\\\\.\",\"keyword.operator\":a,\"constant.language\":u},\"identifier\"),l=\"[a-zA-Z_\\u00a1-\\uffff][a-zA-Z\\\\d_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"star-comment\"},{token:\"comment.shebang\",regex:\"^\\\\s*#!.*\"},{token:\"comment\",regex:\"\\\\/\\\\+\",next:\"plus-comment\"},{onMatch:function(e,t,n){return n.unshift(this.next,e.substr(2)),\"string\"},regex:'q\"(?:[\\\\[\\\\(\\\\{\\\\<]+)',next:\"operator-heredoc-string\"},{onMatch:function(e,t,n){return n.unshift(this.next,e.substr(2)),\"string\"},regex:'q\"(?:[a-zA-Z_]+)$',next:\"identifier-heredoc-string\"},{token:\"string\",regex:'[xr]?\"',next:\"quote-string\"},{token:\"string\",regex:\"[xr]?`\",next:\"backtick-string\"},{token:\"string\",regex:\"[xr]?['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?['][cdw]?\"},{token:[\"keyword\",\"text\",\"paren.lparen\"],regex:/(asm)(\\s*)({)/,next:\"d-asm\"},{token:[\"keyword\",\"text\",\"paren.lparen\",\"constant.language\"],regex:\"(__traits)(\\\\s*)(\\\\()(\"+l+\")\"},{token:[\"keyword\",\"text\",\"variable.module\"],regex:\"(import|module)(\\\\s+)((?:\"+l+\"\\\\.?)*)\"},{token:[\"keyword.storage\",\"text\",\"entity.name.type\"],regex:\"(\"+s+\")(\\\\s*)(\"+l+\")\"},{token:[\"keyword\",\"text\",\"variable.storage\",\"text\"],regex:\"(alias|typedef)(\\\\s*)(\"+l+\")(\\\\s*)\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F_]+(l|ul|u|f|F|L|U|UL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d[\\\\d_]*(?:(?:\\\\.[\\\\d_]*)?(?:[eE][+-]?[\\\\d_]+)?)?(l|ul|u|f|F|L|U|UL)?\\\\b\"},{token:\"entity.other.attribute-name\",regex:\"@\"+l},{token:f,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:a},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.|\\\\:\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],\"star-comment\":[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],\"plus-comment\":[{token:\"comment\",regex:\"\\\\+\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],\"quote-string\":[o,{token:\"string\",regex:'\"[cdw]?',next:\"start\"},{defaultToken:\"string\"}],\"backtick-string\":[o,{token:\"string\",regex:\"`[cdw]?\",next:\"start\"},{defaultToken:\"string\"}],\"operator-heredoc-string\":[{onMatch:function(e,t,n){e=e.substring(e.length-2,e.length-1);var r={\">\":\"<\",\"]\":\"[\",\")\":\"(\",\"}\":\"{\"};return Object.keys(r).indexOf(e)!=-1&&(e=r[e]),e!=n[1]?\"string\":(n.shift(),n.shift(),\"string\")},regex:'(?:[\\\\]\\\\)}>]+)\"',next:\"start\"},{token:\"string\",regex:\"[^\\\\]\\\\)}>]+\"}],\"identifier-heredoc-string\":[{onMatch:function(e,t,n){return e=e.substring(0,e.length-1),e!=n[1]?\"string\":(n.shift(),n.shift(),\"string\")},regex:'^(?:[A-Za-z_][a-zA-Z0-9]+)\"',next:\"start\"},{token:\"string\",regex:\"[^\\\\]\\\\)}>]+\"}],\"d-asm\":[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"keyword.instruction\",regex:\"[a-zA-Z]+\",next:\"d-asm-instruction\"},{token:\"text\",regex:\"\\\\s+\"}],\"d-asm-instruction\":[{token:\"constant.language\",regex:/AL|AH|AX|EAX|BL|BH|BX|EBX|CL|CH|CX|ECX|DL|DH|DX|EDX|BP|EBP|SP|ESP|DI|EDI|SI|ESI/i},{token:\"identifier\",regex:\"[a-zA-Z]+\"},{token:\"string\",regex:'\".*\"'},{token:\"comment\",regex:\"//.*$\"},{token:\"constant.numeric\",regex:\"[0-9.xA-F]+\"},{token:\"punctuation.operator\",regex:\"\\\\,\"},{token:\"punctuation.operator\",regex:\";\",next:\"d-asm\"},{token:\"text\",regex:\"\\\\s+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};o.metaData={comment:\"D language\",fileTypes:[\"d\",\"di\"],firstLineMatch:\"^#!.*\\\\b[glr]?dmd\\\\b.\",foldingStartMarker:\"(?x)/\\\\*\\\\*(?!\\\\*)|^(?![^{]*?//|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|//|/\\\\*(?!.*?\\\\*/.*\\\\S))\",foldingStopMarker:\"(?<!\\\\*)\\\\*\\\\*/|^\\\\s*\\\\}\",keyEquivalent:\"^~D\",name:\"D\",scopeName:\"source.d\"},r.inherits(o,s),t.DHighlightRules=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/d\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/d_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./d_highlight_rules\").DHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/d\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-dart.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/dart_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"true|false|null\",t=\"this|super\",n=\"try|catch|finally|throw|rethrow|assert|break|case|continue|default|do|else|for|if|in|return|switch|while|new|deferred|async|await\",r=\"abstract|class|extends|external|factory|implements|get|native|operator|set|typedef|with|enum\",s=\"static|final|const\",o=\"void|bool|num|int|double|dynamic|var|String\",u=this.createKeywordMapper({\"constant.language.dart\":e,\"variable.language.dart\":t,\"keyword.control.dart\":n,\"keyword.declaration.dart\":r,\"storage.modifier.dart\":s,\"storage.type.primitive.dart\":o},\"identifier\"),a=[{token:\"constant.language.escape\",regex:/\\\\./},{token:\"text\",regex:/\\$(?:\\w+|{[^\"'}]+})?/},{defaultToken:\"string\"}];this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:[\"meta.preprocessor.script.dart\"],regex:\"^(#!.*)$\"},{token:\"keyword.other.import.dart\",regex:\"(?:\\\\b)(?:library|import|export|part|of|show|hide)(?:\\\\b)\"},{token:[\"keyword.other.import.dart\",\"text\"],regex:\"(?:\\\\b)(prefix)(\\\\s*:)\"},{regex:\"\\\\bas\\\\b\",token:\"keyword.cast.dart\"},{regex:\"\\\\?|:\",token:\"keyword.control.ternary.dart\"},{regex:\"(?:\\\\b)(is\\\\!?)(?:\\\\b)\",token:[\"keyword.operator.dart\"]},{regex:\"(<<|>>>?|~|\\\\^|\\\\||&)\",token:[\"keyword.operator.bitwise.dart\"]},{regex:\"((?:&|\\\\^|\\\\||<<|>>>?)=)\",token:[\"keyword.operator.assignment.bitwise.dart\"]},{regex:\"(===?|!==?|<=?|>=?)\",token:[\"keyword.operator.comparison.dart\"]},{regex:\"((?:[+*/%-]|\\\\~)=)\",token:[\"keyword.operator.assignment.arithmetic.dart\"]},{regex:\"=\",token:\"keyword.operator.assignment.dart\"},{token:\"string\",regex:\"'''\",next:\"qdoc\"},{token:\"string\",regex:'\"\"\"',next:\"qqdoc\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{regex:\"(\\\\-\\\\-|\\\\+\\\\+)\",token:[\"keyword.operator.increment-decrement.dart\"]},{regex:\"(\\\\-|\\\\+|\\\\*|\\\\/|\\\\~\\\\/|%)\",token:[\"keyword.operator.arithmetic.dart\"]},{regex:\"(!|&&|\\\\|\\\\|)\",token:[\"keyword.operator.logical.dart\"]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qdoc:[{token:\"string\",regex:\"'''\",next:\"start\"}].concat(a),qqdoc:[{token:\"string\",regex:'\"\"\"',next:\"start\"}].concat(a),qstring:[{token:\"string\",regex:\"'|$\",next:\"start\"}].concat(a),qqstring:[{token:\"string\",regex:'\"|$',next:\"start\"}].concat(a)},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.DartHighlightRules=o}),ace.define(\"ace/mode/dart\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/dart_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./dart_highlight_rules\").DartHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/dart\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-diff.js",
    "content": "ace.define(\"ace/mode/diff_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{regex:\"^(?:\\\\*{15}|={67}|-{3}|\\\\+{3})$\",token:\"punctuation.definition.separator.diff\",name:\"keyword\"},{regex:\"^(@@)(\\\\s*.+?\\\\s*)(@@)(.*)$\",token:[\"constant\",\"constant.numeric\",\"constant\",\"comment.doc.tag\"]},{regex:\"^(\\\\d+)([,\\\\d]+)(a|d|c)(\\\\d+)([,\\\\d]+)(.*)$\",token:[\"constant.numeric\",\"punctuation.definition.range.diff\",\"constant.function\",\"constant.numeric\",\"punctuation.definition.range.diff\",\"invalid\"],name:\"meta.\"},{regex:\"^(\\\\-{3}|\\\\+{3}|\\\\*{3})( .+)$\",token:[\"constant.numeric\",\"meta.tag\"]},{regex:\"^([!+>])(.*?)(\\\\s*)$\",token:[\"support.constant\",\"text\",\"invalid\"]},{regex:\"^([<\\\\-])(.*?)(\\\\s*)$\",token:[\"support.function\",\"string\",\"invalid\"]},{regex:\"^(diff)(\\\\s+--\\\\w+)?(.+?)( .+)?$\",token:[\"variable\",\"variable\",\"keyword\",\"variable\"]},{regex:\"^Index.+$\",token:\"variable\"},{regex:\"^\\\\s+$\",token:\"text\"},{regex:\"\\\\s*$\",token:\"invalid\"},{defaultToken:\"invisible\",caseInsensitive:!0}]}};r.inherits(s,i),t.DiffHighlightRules=s}),ace.define(\"ace/mode/folding/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(e,t){this.regExpList=e,this.flag=t,this.foldingStartMarker=RegExp(\"^(\"+e.join(\"|\")+\")\",this.flag)};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i={row:n,column:r.length},o=this.regExpList;for(var u=1;u<=o.length;u++){var a=RegExp(\"^(\"+o.slice(0,u).join(\"|\")+\")\",this.flag);if(a.test(r))break}for(var f=e.getLength();++n<f;){r=e.getLine(n);if(a.test(r))break}if(n==i.row+1)return;return new s(i.row,i.column,n-1,r.length)}}.call(o.prototype)}),ace.define(\"ace/mode/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/diff_highlight_rules\",\"ace/mode/folding/diff\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./diff_highlight_rules\").DiffHighlightRules,o=e(\"./folding/diff\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o([\"diff\",\"@@|\\\\*{5}\"],\"i\")};r.inherits(u,i),function(){this.$id=\"ace/mode/diff\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-django.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/django\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){this.$rules={start:[{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant\",regex:\"[0-9]+\"},{token:\"variable\",regex:\"[-_a-zA-Z0-9:]+\"}],tag:[{token:\"entity.name.function\",regex:\"[a-zA-Z][_a-zA-Z0-9]*\",next:\"start\"}]}};r.inherits(u,o);var a=function(){this.$rules=(new s).getRules();for(var e in this.$rules)this.$rules[e].unshift({token:\"comment.line\",regex:\"\\\\{#.*?#\\\\}\"},{token:\"comment.block\",regex:\"\\\\{\\\\%\\\\s*comment\\\\s*\\\\%\\\\}\",merge:!0,next:\"django-comment\"},{token:\"constant.language\",regex:\"\\\\{\\\\{\",next:\"django-start\"},{token:\"constant.language\",regex:\"\\\\{\\\\%\",next:\"django-tag\"}),this.embedRules(u,\"django-\",[{token:\"comment.block\",regex:\"\\\\{\\\\%\\\\s*endcomment\\\\s*\\\\%\\\\}\",merge:!0,next:\"start\"},{token:\"constant.language\",regex:\"\\\\%\\\\}\",next:\"start\"},{token:\"constant.language\",regex:\"\\\\}\\\\}\",next:\"start\"}])};r.inherits(a,s);var f=function(){i.call(this),this.HighlightRules=a};r.inherits(f,i),function(){this.$id=\"ace/mode/django\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-dockerfile.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f}),ace.define(\"ace/mode/dockerfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./sh_highlight_rules\").ShHighlightRules,s=function(){i.call(this);var e=this.$rules.start;for(var t=0;t<e.length;t++)if(e[t].token==\"variable.language\"){e.splice(t,0,{token:\"constant.language\",regex:\"(?:^(?:FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|COPY|LABEL)\\\\b)\",caseInsensitive:!0});break}};r.inherits(s,i),t.DockerfileHighlightRules=s}),ace.define(\"ace/mode/dockerfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh\",\"ace/mode/dockerfile_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./sh\").Mode,s=e(\"./dockerfile_highlight_rules\").DockerfileHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/dockerfile\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-dot.js",
    "content": "ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/dot_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,u=function(){var e=i.arrayToMap(\"strict|node|edge|graph|digraph|subgraph\".split(\"|\")),t=i.arrayToMap(\"damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z\".split(\"|\"));this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},{token:\"comment\",regex:/#.*$/},{token:\"comment\",merge:!0,regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/[+\\-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?\\b/},{token:\"keyword.operator\",regex:/\\+|=|\\->/},{token:\"punctuation.operator\",regex:/,|;/},{token:\"paren.lparen\",regex:/[\\[{]/},{token:\"paren.rparen\",regex:/[\\]}]/},{token:\"comment\",regex:/^#!.*$/},{token:function(n){return e.hasOwnProperty(n.toLowerCase())?\"keyword\":t.hasOwnProperty(n.toLowerCase())?\"variable\":\"text\"},regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'[^\"\\\\\\\\]+',merge:!0},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\",merge:!0},{token:\"string\",regex:'\"|$',next:\"start\",merge:!0}],qstring:[{token:\"string\",regex:\"[^'\\\\\\\\]+\",merge:!0},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\",merge:!0},{token:\"string\",regex:\"'|$\",next:\"start\",merge:!0}]}};r.inherits(u,s),t.DotHighlightRules=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/dot\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matching_brace_outdent\",\"ace/mode/dot_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,o=e(\"./dot_highlight_rules\").DotHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=o,this.$outdent=new s,this.foldingRules=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=[\"//\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/dot\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-drools.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|var\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{regex:\"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",token:\"keyword\",next:[{regex:\"{\",token:\"paren.lparen\",next:[{regex:\"}\",token:\"paren.rparen\",next:\"start\"},{regex:\"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",token:\"keyword\"}]},{token:\"text\",regex:\"\\\\s+\"},{token:\"identifier\",regex:\"\\\\w+\"},{token:\"punctuation.operator\",regex:\".\"},{token:\"text\",regex:\"\\\\s+\"},{regex:\"\",next:\"start\"}]},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.JavaHighlightRules=o}),ace.define(\"ace/mode/drools_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/java_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./java_highlight_rules\").JavaHighlightRules,o=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,u=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][\\\\.a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",f=function(){var e=\"date|effective|expires|lock|on|active|no|loop|auto|focus|activation|group|agenda|ruleflow|duration|timer|calendars|refract|direct|dialect|salience|enabled|attributes|extends|template|function|contains|matches|eval|excludes|soundslike|memberof|not|in|or|and|exists|forall|over|from|entry|point|accumulate|acc|collect|action|reverse|result|end|init|instanceof|extends|super|boolean|char|byte|short|int|long|float|double|this|void|class|new|case|final|if|else|for|while|do|default|try|catch|finally|switch|synchronized|return|throw|break|continue|assert|modify|static|public|protected|private|abstract|native|transient|volatile|strictfp|throws|interface|enum|implements|type|window|trait|no-loop|str\",t=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",n=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":\"null\",\"support.class\":t,\"support.function\":\"retract|update|modify|insert\"},\"identifier\"),r=function(){return[{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"}]},i=function(e){return[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},o.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:e},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"}]},f=function(e){return[{token:\"comment.block\",regex:\"\\\\*\\\\/\",next:e},{defaultToken:\"comment.block\"}]},l=function(){return[{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}]};this.$rules={start:[].concat(i(\"block.comment\"),[{token:\"entity.name.type\",regex:\"@[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:[\"keyword\",\"text\",\"entity.name.type\"],regex:\"(package)(\\\\s+)(\"+a+\")\"},{token:[\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],regex:\"(import)(\\\\s+)(function)(\\\\s+)(\"+a+\")\"},{token:[\"keyword\",\"text\",\"entity.name.type\"],regex:\"(import)(\\\\s+)(\"+a+\")\"},{token:[\"keyword\",\"text\",\"entity.name.type\",\"text\",\"variable\"],regex:\"(global)(\\\\s+)(\"+a+\")(\\\\s+)(\"+u+\")\"},{token:[\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],regex:\"(declare)(\\\\s+)(trait)(\\\\s+)(\"+u+\")\"},{token:[\"keyword\",\"text\",\"entity.name.type\"],regex:\"(declare)(\\\\s+)(\"+u+\")\"},{token:[\"keyword\",\"text\",\"entity.name.type\"],regex:\"(extends)(\\\\s+)(\"+a+\")\"},{token:[\"keyword\",\"text\"],regex:\"(rule)(\\\\s+)\",next:\"asset.name\"}],r(),[{token:[\"variable.other\",\"text\",\"text\"],regex:\"(\"+u+\")(\\\\s*)(:)\"},{token:[\"keyword\",\"text\"],regex:\"(query)(\\\\s+)\",next:\"asset.name\"},{token:[\"keyword\",\"text\"],regex:\"(when)(\\\\s*)\"},{token:[\"keyword\",\"text\"],regex:\"(then)(\\\\s*)\",next:\"java-start\"},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/}],l()),\"block.comment\":f(\"start\"),\"asset.name\":[{token:\"entity.name\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"entity.name\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"entity.name\",regex:u},{regex:\"\",token:\"empty\",next:\"start\"}]},this.embedRules(o,\"doc-\",[o.getEndRule(\"start\")]),this.embedRules(s,\"java-\",[{token:\"support.function\",regex:\"\\\\b(insert|modify|retract|update)\\\\b\"},{token:\"keyword\",regex:\"\\\\bend\\\\b\",next:\"start\"}])};r.inherits(f,i),t.DroolsHighlightRules=f}),ace.define(\"ace/mode/folding/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,s),function(){this.foldingStartMarker=/\\b(rule|declare|query|when|then)\\b/,this.foldingStopMarker=/\\bend\\b/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),s=r.match(this.foldingStartMarker);if(s){var u=s.index;if(s[1]){var a={row:n,column:r.length},f=new o(e,a.row,a.column),l=\"end\",c=f.getCurrentToken();c.value==\"when\"&&(l=\"then\");while(c){if(c.value==l)return i.fromPoints(a,{row:f.getCurrentTokenRow(),column:f.getCurrentTokenColumn()});c=f.stepForward()}}}}}.call(u.prototype)}),ace.define(\"ace/mode/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/drools_highlight_rules\",\"ace/mode/folding/drools\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./drools_highlight_rules\").DroolsHighlightRules,o=e(\"./folding/drools\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/drools\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-edifact.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/edifact_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"UNH\",t=\"ADR|AGR|AJT|ALC|ALI|APP|APR|ARD|ARR|ASI|ATT|AUT|BAS|BGM|BII|BUS|CAV|CCD|CCI|CDI|CDS|CDV|CED|CIN|CLA|CLI|CMP|CNI|CNT|COD|COM|COT|CPI|CPS|CPT|CST|CTA|CUX|DAM|DFN|DGS|DII|DIM|DLI|DLM|DMS|DOC|DRD|DSG|DSI|DTM|EDT|EFI|ELM|ELU|ELV|EMP|EQA|EQD|EQN|ERC|ERP|EVE|FCA|FII|FNS|FNT|FOR|FSQ|FTX|GDS|GEI|GID|GIN|GIR|GOR|GPO|GRU|HAN|HYN|ICD|IDE|IFD|IHC|IMD|IND|INP|INV|IRQ|LAN|LIN|LOC|MEA|MEM|MKS|MOA|MSG|MTD|NAD|NAT|PAC|PAI|PAS|PCC|PCD|PCI|PDI|PER|PGI|PIA|PNA|POC|PRC|PRI|PRV|PSD|PTY|PYT|QRS|QTY|QUA|QVR|RCS|REL|RFF|RJL|RNG|ROD|RSL|RTE|SAL|SCC|SCD|SEG|SEL|SEQ|SFI|SGP|SGU|SPR|SPS|STA|STC|STG|STS|TAX|TCC|TDT|TEM|TMD|TMP|TOD|TPL|TRU|TSR|UNB|UNZ|UNT|UGH|UGT|UNS|VLI\",e=\"UNH\",n=\"null|Infinity|NaN|undefined\",r=\"\",s=\"BY|SE|ON|INV|JP|UNOA\",o=this.createKeywordMapper({\"variable.language\":\"this\",keyword:s,\"entity.name.segment\":t,\"entity.name.header\":e,\"constant.language\":n,\"support.function\":r},\"identifier\");this.$rules={start:[{token:\"punctuation.operator\",regex:\"\\\\+.\\\\+\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:o,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+\"},{token:\"punctuation.operator\",regex:\"\\\\:|'\"},{token:\"identifier\",regex:\"\\\\:D\\\\:\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};o.metaData={fileTypes:[\"edi\"],keyEquivalent:\"^~E\",name:\"Edifact\",scopeName:\"source.edifact\"},r.inherits(o,s),t.EdifactHighlightRules=o}),ace.define(\"ace/mode/edifact\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/edifact_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./edifact_highlight_rules\").EdifactHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/edifact\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-eiffel.js",
    "content": "ace.define(\"ace/mode/eiffel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"across|agent|alias|all|attached|as|assign|attribute|check|class|convert|create|debug|deferred|detachable|do|else|elseif|end|ensure|expanded|export|external|feature|from|frozen|if|inherit|inspect|invariant|like|local|loop|not|note|obsolete|old|once|Precursor|redefine|rename|require|rescue|retry|select|separate|some|then|undefine|until|variant|when\",t=\"and|implies|or|xor\",n=\"Void\",r=\"True|False\",i=\"Current|Result\",s=this.createKeywordMapper({\"constant.language\":n,\"constant.language.boolean\":r,\"variable.language\":i,\"keyword.operator\":t,keyword:e},\"identifier\",!0),o=/(?:[^\"%\\b\\f\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)+?/;this.$rules={start:[{token:\"string.quoted.other\",regex:/\"\\[/,next:\"aligned_verbatim_string\"},{token:\"string.quoted.other\",regex:/\"\\{/,next:\"non-aligned_verbatim_string\"},{token:\"string.quoted.double\",regex:/\"(?:[^%\\b\\f\\n\\r\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)*?\"/},{token:\"comment.line.double-dash\",regex:/--.*/},{token:\"constant.character\",regex:/'(?:[^%\\b\\f\\n\\r\\t\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)'/},{token:\"constant.numeric\",regex:/\\b0(?:[xX][\\da-fA-F](?:_*[\\da-fA-F])*|[cC][0-7](?:_*[0-7])*|[bB][01](?:_*[01])*)\\b/},{token:\"constant.numeric\",regex:/(?:\\d(?:_*\\d)*)?\\.(?:(?:\\d(?:_*\\d)*)?[eE][+-]?)?\\d(?:_*\\d)*|\\d(?:_*\\d)*\\.?/},{token:\"paren.lparen\",regex:/[\\[({]|<<|\\|\\(/},{token:\"paren.rparen\",regex:/[\\])}]|>>|\\|\\)/},{token:\"keyword.operator\",regex:/:=|->|\\.(?=\\w)|[;,:?]/},{token:\"keyword.operator\",regex:/\\\\\\\\|\\|\\.\\.\\||\\.\\.|\\/[~\\/]?|[><\\/]=?|[-+*^=~]/},{token:function(e){var t=s(e);return t===\"identifier\"&&e===e.toUpperCase()&&(t=\"entity.name.type\"),t},regex:/[a-zA-Z][a-zA-Z\\d_]*\\b/},{token:\"text\",regex:/\\s+/}],aligned_verbatim_string:[{token:\"string\",regex:/]\"/,next:\"start\"},{token:\"string\",regex:o}],\"non-aligned_verbatim_string\":[{token:\"string.quoted.other\",regex:/}\"/,next:\"start\"},{token:\"string.quoted.other\",regex:o}]}};r.inherits(s,i),t.EiffelHighlightRules=s}),ace.define(\"ace/mode/eiffel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/eiffel_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./eiffel_highlight_rules\").EiffelHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/eiffel\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-ejs.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/ejs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=function(e,t){i.call(this),e||(e=\"(?:<%|<\\\\?|{{)\"),t||(t=\"(?:%>|\\\\?>|}})\");for(var n in this.$rules)this.$rules[n].unshift({token:\"markup.list.meta.tag\",regex:e+\"(?![>}])[-=]?\",push:\"ejs-start\"});this.embedRules((new s({jsx:!1})).getRules(),\"ejs-\",[{token:\"markup.list.meta.tag\",regex:\"-?\"+t,next:\"pop\"},{token:\"comment\",regex:\"//.*?\"+t,next:\"pop\"}]),this.normalizeRules()};r.inherits(o,i),t.EjsHighlightRules=o;var r=e(\"../lib/oop\"),u=e(\"./html\").Mode,a=e(\"./javascript\").Mode,f=e(\"./css\").Mode,l=e(\"./ruby\").Mode,c=function(){u.call(this),this.HighlightRules=o,this.createModeDelegates({\"js-\":a,\"css-\":f,\"ejs-\":a})};r.inherits(c,u),function(){this.$id=\"ace/mode/ejs\"}.call(c.prototype),t.Mode=c});                (function() {\n                    ace.require([\"ace/mode/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-elixir.js",
    "content": "ace.define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"meta.module.elixir\",\"keyword.control.module.elixir\",\"meta.module.elixir\",\"entity.name.type.module.elixir\"],regex:\"^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc (?:~[a-z])?\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc ~[A-Z]\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc (?:~[a-z])?'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc ~[A-Z]'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.false\",regex:\"@(?:module|type)?doc false\",comment:\"@doc false is treated as documentation\"},{token:\"comment.documentation.string\",regex:'@(?:module|type)?doc \"',push:[{token:\"comment.documentation.string\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.string\"}],comment:\"@doc with string is treated as documentation\"},{token:\"keyword.control.elixir\",regex:\"\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\"},{token:\"keyword.operator.elixir\",regex:\"\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b\",comment:\" as above, just doesn't need a 'end' and does a logic operation\"},{token:\"constant.language.elixir\",regex:\"\\\\b(?:nil|true|false)\\\\b(?![?!])\"},{token:\"variable.language.elixir\",regex:\"\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.readwrite.module.elixir\"],regex:\"(@)([a-zA-Z_]\\\\w*)\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.anonymous.elixir\"],regex:\"(&)(\\\\d*)\"},{token:\"variable.other.constant.elixir\",regex:\"\\\\b[A-Z]\\\\w*\\\\b\"},{token:\"constant.numeric.elixir\",regex:\"\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\"},{token:\"punctuation.definition.constant.elixir\",regex:\":'\",push:[{token:\"punctuation.definition.constant.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.single-quoted.elixir\"}]},{token:\"punctuation.definition.constant.elixir\",regex:':\"',push:[{token:\"punctuation.definition.constant.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.double-quoted.elixir\"}]},{token:\"punctuation.definition.string.begin.elixir\",regex:\"(?:''')\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>''')\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"^\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.heredoc.elixir\"}],comment:\"Single-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.elixir\"}],comment:\"single quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'(?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'(?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'\"',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.elixir\"}],comment:\"double quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[a-z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[a-z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[A-Z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[A-Z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:[\"punctuation.definition.constant.elixir\",\"constant.other.symbol.elixir\"],regex:\"(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)\",comment:\"symbols\"},{token:\"punctuation.definition.constant.elixir\",regex:\"(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)\",comment:\"symbols\"},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(#)(.*)\"},{token:\"constant.numeric.elixir\",regex:\"\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",comment:'\\n\t\t\tmatches questionmark-letters.\\n\\n\t\t\texamples (1st alternation = hex):\\n\t\t\t?\\\\x1     ?\\\\x61\\n\\n\t\t\texamples (2rd alternation = escaped):\\n\t\t\t?\\\\n      ?\\\\b\\n\\n\t\t\texamples (3rd alternation = normal):\\n\t\t\t?a       ?A       ?0 \\n\t\t\t?*       ?\"       ?( \\n\t\t\t?.       ?#\\n\t\t\t\\n\t\t\tthe negative lookbehind prevents against matching\\n\t\t\tp(42.tainted?)\\n\t\t\t'},{token:\"keyword.operator.assignment.augmented.elixir\",regex:\"\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=\"},{token:\"keyword.operator.comparison.elixir\",regex:\"===?|!==?|<=?|>=?\"},{token:\"keyword.operator.bitwise.elixir\",regex:\"\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}\"},{token:\"keyword.operator.logical.elixir\",regex:\"!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\",originalRegex:\"(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\"},{token:\"keyword.operator.arithmetic.elixir\",regex:\"\\\\*|\\\\+|\\\\-|/\"},{token:\"keyword.operator.other.elixir\",regex:\"\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>\"},{token:\"keyword.operator.assignment.elixir\",regex:\"=\"},{token:\"punctuation.separator.other.elixir\",regex:\":\"},{token:\"punctuation.separator.statement.elixir\",regex:\"\\\\;\"},{token:\"punctuation.separator.object.elixir\",regex:\",\"},{token:\"punctuation.separator.method.elixir\",regex:\"\\\\.\"},{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{|\\\\}\"},{token:\"punctuation.section.array.elixir\",regex:\"\\\\[|\\\\]\"},{token:\"punctuation.section.function.elixir\",regex:\"\\\\(|\\\\)\"}],\"#escaped_char\":[{token:\"constant.character.escape.elixir\",regex:\"\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)\"}],\"#interpolated_elixir\":[{token:[\"source.elixir.embedded.source\",\"source.elixir.embedded.source.empty\"],regex:\"(#\\\\{)(\\\\})\"},{todo:{token:\"punctuation.section.embedded.elixir\",regex:\"#\\\\{\",push:[{token:\"punctuation.section.embedded.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"},{include:\"$self\"},{defaultToken:\"source.elixir.embedded.source\"}]}}],\"#nest_curly_and_self\":[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{\",push:[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"}]},{include:\"$self\"}],\"#regex_sub\":[{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{token:[\"punctuation.definition.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"punctuation.definition.arbitrary-repitition.elixir\"],regex:\"(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})\"},{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\[(?:\\\\^?\\\\])?\",push:[{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\]\",next:\"pop\"},{include:\"#escaped_char\"},{defaultToken:\"string.regexp.character-class.elixir\"}]},{token:\"punctuation.definition.group.elixir\",regex:\"\\\\(\",push:[{token:\"punctuation.definition.group.elixir\",regex:\"\\\\)\",next:\"pop\"},{include:\"#regex_sub\"},{defaultToken:\"string.regexp.group.elixir\"}]},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)\",originalRegex:\"(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$\",comment:\"We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.\"}]},this.normalizeRules()};s.metaData={comment:\"Textmate bundle for Elixir Programming Language.\",fileTypes:[\"ex\",\"exs\"],firstLineMatch:\"^#!/.*\\\\belixir\",foldingStartMarker:\"(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$\",foldingStopMarker:\"^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)\",keyEquivalent:\"^~E\",name:\"Elixir\",scopeName:\"source.elixir\"},r.inherits(s,i),t.ElixirHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./elixir_highlight_rules\").ElixirHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/elixir\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-elm.js",
    "content": "ace.define(\"ace/mode/elm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({keyword:\"as|case|class|data|default|deriving|do|else|export|foreign|hiding|jsevent|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|open|then|type|where|_|port|\\u03bb\"},\"identifier\"),t=/\\\\(\\d+|['\"\\\\&trnbvf])/,n=/[a-z_]/.source,r=/[A-Z]/.source,i=/[a-z_A-Z0-9']/.source;this.$rules={start:[{token:\"string.start\",regex:'\"',next:\"string\"},{token:\"string.character\",regex:\"'(?:\"+t.source+\"|.)'?\"},{regex:/0(?:[xX][0-9A-Fa-f]+|[oO][0-7]+)|\\d+(\\.\\d+)?([eE][-+]?\\d*)?/,token:\"constant.numeric\"},{token:\"comment\",regex:\"--.*\"},{token:\"keyword\",regex:/\\.\\.|\\||:|=|\\\\|\"|->|<-|\\u2192/},{token:\"keyword.operator\",regex:/[-!#$%&*+.\\/<=>?@\\\\^|~:\\u03BB\\u2192]+/},{token:\"operator.punctuation\",regex:/[,;`]/},{regex:r+i+\"+\\\\.?\",token:function(e){return e[e.length-1]==\".\"?\"entity.name.function\":\"constant.language\"}},{regex:\"^\"+n+i+\"+\",token:function(e){return\"constant.language\"}},{token:e,regex:\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"},{regex:\"{-#?\",token:\"comment.start\",onMatch:function(e,t,n){return this.next=e.length==2?\"blockComment\":\"docComment\",this.token}},{token:\"variable.language\",regex:/\\[markdown\\|/,next:\"markdown\"},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/}],markdown:[{regex:/\\|\\]/,next:\"start\"},{defaultToken:\"string\"}],blockComment:[{regex:\"{-\",token:\"comment.start\",push:\"blockComment\"},{regex:\"-}\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}],docComment:[{regex:\"{-\",token:\"comment.start\",push:\"docComment\"},{regex:\"-}\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"doc.comment\"}],string:[{token:\"constant.language.escape\",regex:t},{token:\"text\",regex:/\\\\(\\s|$)/,next:\"stringGap\"},{token:\"string.end\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}],stringGap:[{token:\"text\",regex:/\\\\/,next:\"string\"},{token:\"error\",regex:\"\",next:\"start\"}]},this.normalizeRules()};r.inherits(s,i),t.ElmHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/elm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elm_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./elm_highlight_rules\").ElmHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"{-\",end:\"-}\",nestable:!0},this.$id=\"ace/mode/elm\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-erlang.js",
    "content": "ace.define(\"ace/mode/erlang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#module-directive\"},{include:\"#import-export-directive\"},{include:\"#behaviour-directive\"},{include:\"#record-directive\"},{include:\"#define-directive\"},{include:\"#macro-directive\"},{include:\"#directive\"},{include:\"#function\"},{include:\"#everything-else\"}],\"#atom\":[{token:\"punctuation.definition.symbol.begin.erlang\",regex:\"'\",push:[{token:\"punctuation.definition.symbol.end.erlang\",regex:\"'\",next:\"pop\"},{token:[\"punctuation.definition.escape.erlang\",\"constant.other.symbol.escape.erlang\",\"punctuation.definition.escape.erlang\",\"constant.other.symbol.escape.erlang\",\"constant.other.symbol.escape.erlang\"],regex:\"(\\\\\\\\)(?:([bdefnrstv\\\\\\\\'\\\"])|(\\\\^)([@-_])|([0-7]{1,3}))\"},{token:\"invalid.illegal.atom.erlang\",regex:\"\\\\\\\\\\\\^?.?\"},{defaultToken:\"constant.other.symbol.quoted.single.erlang\"}]},{token:\"constant.other.symbol.unquoted.erlang\",regex:\"[a-z][a-zA-Z\\\\d@_]*\"}],\"#behaviour-directive\":[{token:[\"meta.directive.behaviour.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.behaviour.erlang\",\"keyword.control.directive.behaviour.erlang\",\"meta.directive.behaviour.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.behaviour.erlang\",\"entity.name.type.class.behaviour.definition.erlang\",\"meta.directive.behaviour.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.behaviour.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(behaviour)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"}],\"#binary\":[{token:\"punctuation.definition.binary.begin.erlang\",regex:\"<<\",push:[{token:\"punctuation.definition.binary.end.erlang\",regex:\">>\",next:\"pop\"},{token:[\"punctuation.separator.binary.erlang\",\"punctuation.separator.value-size.erlang\"],regex:\"(,)|(:)\"},{include:\"#internal-type-specifiers\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.binary.erlang\"}]}],\"#character\":[{token:[\"punctuation.definition.character.erlang\",\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"constant.character.escape.erlang\"],regex:\"(\\\\$)(\\\\\\\\)(?:([bdefnrstv\\\\\\\\'\\\"])|(\\\\^)([@-_])|([0-7]{1,3}))\"},{token:\"invalid.illegal.character.erlang\",regex:\"\\\\$\\\\\\\\\\\\^?.?\"},{token:[\"punctuation.definition.character.erlang\",\"constant.character.erlang\"],regex:\"(\\\\$)(\\\\S)\"},{token:\"invalid.illegal.character.erlang\",regex:\"\\\\$.?\"}],\"#comment\":[{token:\"punctuation.definition.comment.erlang\",regex:\"%.*$\",push_:[{token:\"comment.line.percentage.erlang\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.percentage.erlang\"}]}],\"#define-directive\":[{token:[\"meta.directive.define.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.define.erlang\",\"keyword.control.directive.define.erlang\",\"meta.directive.define.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.define.erlang\",\"entity.name.function.macro.definition.erlang\",\"meta.directive.define.erlang\",\"punctuation.separator.parameters.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(,)\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.define.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.directive.define.erlang\"}]},{token:\"meta.directive.define.erlang\",regex:\"(?=^\\\\s*-\\\\s*define\\\\s*\\\\(\\\\s*[a-zA-Z\\\\d@_]+\\\\s*\\\\()\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.define.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{token:[\"text\",\"punctuation.section.directive.begin.erlang\",\"text\",\"keyword.control.directive.define.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\",\"text\",\"entity.name.function.macro.definition.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\()\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"text\",\"punctuation.separator.parameters.erlang\"],regex:\"(\\\\))(\\\\s*)(,)\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{token:\"punctuation.separator.define.erlang\",regex:\"\\\\|\\\\||\\\\||:|;|,|\\\\.|->\"},{include:\"#everything-else\"},{defaultToken:\"meta.directive.define.erlang\"}]}],\"#directive\":[{token:[\"meta.directive.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.erlang\",\"keyword.control.directive.erlang\",\"meta.directive.erlang\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\(?)\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\)?)(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.directive.erlang\"}]},{token:[\"meta.directive.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.erlang\",\"keyword.control.directive.erlang\",\"meta.directive.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\.)\"}],\"#everything-else\":[{include:\"#comment\"},{include:\"#record-usage\"},{include:\"#macro-usage\"},{include:\"#expression\"},{include:\"#keyword\"},{include:\"#textual-operator\"},{include:\"#function-call\"},{include:\"#tuple\"},{include:\"#list\"},{include:\"#binary\"},{include:\"#parenthesized-expression\"},{include:\"#character\"},{include:\"#number\"},{include:\"#atom\"},{include:\"#string\"},{include:\"#symbolic-operator\"},{include:\"#variable\"}],\"#expression\":[{token:\"keyword.control.if.erlang\",regex:\"\\\\bif\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.if.erlang\"}]},{token:\"keyword.control.case.erlang\",regex:\"\\\\bcase\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.case.erlang\"}]},{token:\"keyword.control.receive.erlang\",regex:\"\\\\breceive\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.receive.erlang\"}]},{token:[\"keyword.control.fun.erlang\",\"text\",\"entity.name.type.class.module.erlang\",\"text\",\"punctuation.separator.module-function.erlang\",\"text\",\"entity.name.function.erlang\",\"text\",\"punctuation.separator.function-arity.erlang\"],regex:\"\\\\b(fun)(\\\\s*)(?:([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(/)\"},{token:\"keyword.control.fun.erlang\",regex:\"\\\\bfun\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{token:\"text\",regex:\"(?=\\\\()\",push:[{token:\"punctuation.separator.clauses.erlang\",regex:\";|(?=\\\\bend\\\\b)\",next:\"pop\"},{include:\"#internal-function-parts\"}]},{include:\"#everything-else\"},{defaultToken:\"meta.expression.fun.erlang\"}]},{token:\"keyword.control.try.erlang\",regex:\"\\\\btry\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.try.erlang\"}]},{token:\"keyword.control.begin.erlang\",regex:\"\\\\bbegin\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.begin.erlang\"}]},{token:\"keyword.control.query.erlang\",regex:\"\\\\bquery\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.query.erlang\"}]}],\"#function\":[{token:[\"meta.function.erlang\",\"entity.name.function.definition.erlang\",\"meta.function.erlang\"],regex:\"^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(?=\\\\()\",push:[{token:\"punctuation.terminator.function.erlang\",regex:\"\\\\.\",next:\"pop\"},{token:[\"text\",\"entity.name.function.erlang\",\"text\"],regex:\"^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(?=\\\\()\"},{token:\"text\",regex:\"(?=\\\\()\",push:[{token:\"punctuation.separator.clauses.erlang\",regex:\";|(?=\\\\.)\",next:\"pop\"},{include:\"#parenthesized-expression\"},{include:\"#internal-function-parts\"}]},{include:\"#everything-else\"},{defaultToken:\"meta.function.erlang\"}]}],\"#function-call\":[{token:\"meta.function-call.erlang\",regex:\"(?=(?:[a-z][a-zA-Z\\\\d@_]*|'[^']*')\\\\s*(?:\\\\(|:\\\\s*(?:[a-z][a-zA-Z\\\\d@_]*|'[^']*')\\\\s*\\\\())\",push:[{token:\"punctuation.definition.parameters.end.erlang\",regex:\"\\\\)\",next:\"pop\"},{token:[\"entity.name.type.class.module.erlang\",\"text\",\"punctuation.separator.module-function.erlang\",\"text\",\"entity.name.function.guard.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"(?:(erlang)(\\\\s*)(:)(\\\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\\\s*)(\\\\()\",push:[{token:\"text\",regex:\"(?=\\\\))\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{token:[\"entity.name.type.class.module.erlang\",\"text\",\"punctuation.separator.module-function.erlang\",\"text\",\"entity.name.function.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"(?:([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(\\\\()\",push:[{token:\"text\",regex:\"(?=\\\\))\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{defaultToken:\"meta.function-call.erlang\"}]}],\"#import-export-directive\":[{token:[\"meta.directive.import.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.import.erlang\",\"keyword.control.directive.import.erlang\",\"meta.directive.import.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.import.erlang\",\"entity.name.type.class.module.erlang\",\"meta.directive.import.erlang\",\"punctuation.separator.parameters.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(import)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(,)\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.import.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#internal-function-list\"},{defaultToken:\"meta.directive.import.erlang\"}]},{token:[\"meta.directive.export.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.export.erlang\",\"keyword.control.directive.export.erlang\",\"meta.directive.export.erlang\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(export)(\\\\s*)(\\\\()\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.export.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#internal-function-list\"},{defaultToken:\"meta.directive.export.erlang\"}]}],\"#internal-expression-punctuation\":[{token:[\"punctuation.separator.clause-head-body.erlang\",\"punctuation.separator.clauses.erlang\",\"punctuation.separator.expressions.erlang\"],regex:\"(->)|(;)|(,)\"}],\"#internal-function-list\":[{token:\"punctuation.definition.list.begin.erlang\",regex:\"\\\\[\",push:[{token:\"punctuation.definition.list.end.erlang\",regex:\"\\\\]\",next:\"pop\"},{token:[\"entity.name.function.erlang\",\"text\",\"punctuation.separator.function-arity.erlang\"],regex:\"([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(/)\",push:[{token:\"punctuation.separator.list.erlang\",regex:\",|(?=\\\\])\",next:\"pop\"},{include:\"#everything-else\"}]},{include:\"#everything-else\"},{defaultToken:\"meta.structure.list.function.erlang\"}]}],\"#internal-function-parts\":[{token:\"text\",regex:\"(?=\\\\()\",push:[{token:\"punctuation.separator.clause-head-body.erlang\",regex:\"->\",next:\"pop\"},{token:\"punctuation.definition.parameters.begin.erlang\",regex:\"\\\\(\",push:[{token:\"punctuation.definition.parameters.end.erlang\",regex:\"\\\\)\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{token:\"punctuation.separator.guards.erlang\",regex:\",|;\"},{include:\"#everything-else\"}]},{token:\"punctuation.separator.expressions.erlang\",regex:\",\"},{include:\"#everything-else\"}],\"#internal-record-body\":[{token:\"punctuation.definition.class.record.begin.erlang\",regex:\"\\\\{\",push:[{token:\"meta.structure.record.erlang\",regex:\"(?=\\\\})\",next:\"pop\"},{token:[\"variable.other.field.erlang\",\"variable.language.omitted.field.erlang\",\"text\",\"keyword.operator.assignment.erlang\"],regex:\"(?:([a-z][a-zA-Z\\\\d@_]*|'[^']*')|(_))(\\\\s*)(=|::)\",push:[{token:\"punctuation.separator.class.record.erlang\",regex:\",|(?=\\\\})\",next:\"pop\"},{include:\"#everything-else\"}]},{token:[\"variable.other.field.erlang\",\"text\",\"punctuation.separator.class.record.erlang\"],regex:\"([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)((?:,)?)\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.record.erlang\"}]}],\"#internal-type-specifiers\":[{token:\"punctuation.separator.value-type.erlang\",regex:\"/\",push:[{token:\"text\",regex:\"(?=,|:|>>)\",next:\"pop\"},{token:[\"storage.type.erlang\",\"storage.modifier.signedness.erlang\",\"storage.modifier.endianness.erlang\",\"storage.modifier.unit.erlang\",\"punctuation.separator.type-specifiers.erlang\"],regex:\"(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)\"}]}],\"#keyword\":[{token:\"keyword.control.erlang\",regex:\"\\\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\\\b\"}],\"#list\":[{token:\"punctuation.definition.list.begin.erlang\",regex:\"\\\\[\",push:[{token:\"punctuation.definition.list.end.erlang\",regex:\"\\\\]\",next:\"pop\"},{token:\"punctuation.separator.list.erlang\",regex:\"\\\\||\\\\|\\\\||,\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.list.erlang\"}]}],\"#macro-directive\":[{token:[\"meta.directive.ifdef.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.ifdef.erlang\",\"keyword.control.directive.ifdef.erlang\",\"meta.directive.ifdef.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.ifdef.erlang\",\"entity.name.function.macro.erlang\",\"meta.directive.ifdef.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.ifdef.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(ifdef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"},{token:[\"meta.directive.ifndef.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.ifndef.erlang\",\"keyword.control.directive.ifndef.erlang\",\"meta.directive.ifndef.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.ifndef.erlang\",\"entity.name.function.macro.erlang\",\"meta.directive.ifndef.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.ifndef.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(ifndef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"},{token:[\"meta.directive.undef.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.undef.erlang\",\"keyword.control.directive.undef.erlang\",\"meta.directive.undef.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.undef.erlang\",\"entity.name.function.macro.erlang\",\"meta.directive.undef.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.undef.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(undef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"}],\"#macro-usage\":[{token:[\"keyword.operator.macro.erlang\",\"meta.macro-usage.erlang\",\"entity.name.function.macro.erlang\"],regex:\"(\\\\?\\\\??)(\\\\s*)([a-zA-Z\\\\d@_]+)\"}],\"#module-directive\":[{token:[\"meta.directive.module.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.module.erlang\",\"keyword.control.directive.module.erlang\",\"meta.directive.module.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.module.erlang\",\"entity.name.type.class.module.definition.erlang\",\"meta.directive.module.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.module.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(module)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"}],\"#number\":[{token:\"text\",regex:\"(?=\\\\d)\",push:[{token:\"text\",regex:\"(?!\\\\d)\",next:\"pop\"},{token:[\"constant.numeric.float.erlang\",\"punctuation.separator.integer-float.erlang\",\"constant.numeric.float.erlang\",\"punctuation.separator.float-exponent.erlang\"],regex:\"(\\\\d+)(\\\\.)(\\\\d+)((?:[eE][\\\\+\\\\-]?\\\\d+)?)\"},{token:[\"constant.numeric.integer.binary.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.binary.erlang\"],regex:\"(2)(#)([0-1]+)\"},{token:[\"constant.numeric.integer.base-3.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-3.erlang\"],regex:\"(3)(#)([0-2]+)\"},{token:[\"constant.numeric.integer.base-4.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-4.erlang\"],regex:\"(4)(#)([0-3]+)\"},{token:[\"constant.numeric.integer.base-5.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-5.erlang\"],regex:\"(5)(#)([0-4]+)\"},{token:[\"constant.numeric.integer.base-6.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-6.erlang\"],regex:\"(6)(#)([0-5]+)\"},{token:[\"constant.numeric.integer.base-7.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-7.erlang\"],regex:\"(7)(#)([0-6]+)\"},{token:[\"constant.numeric.integer.octal.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.octal.erlang\"],regex:\"(8)(#)([0-7]+)\"},{token:[\"constant.numeric.integer.base-9.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-9.erlang\"],regex:\"(9)(#)([0-8]+)\"},{token:[\"constant.numeric.integer.decimal.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.decimal.erlang\"],regex:\"(10)(#)(\\\\d+)\"},{token:[\"constant.numeric.integer.base-11.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-11.erlang\"],regex:\"(11)(#)([\\\\daA]+)\"},{token:[\"constant.numeric.integer.base-12.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-12.erlang\"],regex:\"(12)(#)([\\\\da-bA-B]+)\"},{token:[\"constant.numeric.integer.base-13.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-13.erlang\"],regex:\"(13)(#)([\\\\da-cA-C]+)\"},{token:[\"constant.numeric.integer.base-14.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-14.erlang\"],regex:\"(14)(#)([\\\\da-dA-D]+)\"},{token:[\"constant.numeric.integer.base-15.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-15.erlang\"],regex:\"(15)(#)([\\\\da-eA-E]+)\"},{token:[\"constant.numeric.integer.hexadecimal.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.hexadecimal.erlang\"],regex:\"(16)(#)([\\\\da-fA-F]+)\"},{token:[\"constant.numeric.integer.base-17.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-17.erlang\"],regex:\"(17)(#)([\\\\da-gA-G]+)\"},{token:[\"constant.numeric.integer.base-18.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-18.erlang\"],regex:\"(18)(#)([\\\\da-hA-H]+)\"},{token:[\"constant.numeric.integer.base-19.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-19.erlang\"],regex:\"(19)(#)([\\\\da-iA-I]+)\"},{token:[\"constant.numeric.integer.base-20.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-20.erlang\"],regex:\"(20)(#)([\\\\da-jA-J]+)\"},{token:[\"constant.numeric.integer.base-21.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-21.erlang\"],regex:\"(21)(#)([\\\\da-kA-K]+)\"},{token:[\"constant.numeric.integer.base-22.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-22.erlang\"],regex:\"(22)(#)([\\\\da-lA-L]+)\"},{token:[\"constant.numeric.integer.base-23.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-23.erlang\"],regex:\"(23)(#)([\\\\da-mA-M]+)\"},{token:[\"constant.numeric.integer.base-24.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-24.erlang\"],regex:\"(24)(#)([\\\\da-nA-N]+)\"},{token:[\"constant.numeric.integer.base-25.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-25.erlang\"],regex:\"(25)(#)([\\\\da-oA-O]+)\"},{token:[\"constant.numeric.integer.base-26.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-26.erlang\"],regex:\"(26)(#)([\\\\da-pA-P]+)\"},{token:[\"constant.numeric.integer.base-27.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-27.erlang\"],regex:\"(27)(#)([\\\\da-qA-Q]+)\"},{token:[\"constant.numeric.integer.base-28.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-28.erlang\"],regex:\"(28)(#)([\\\\da-rA-R]+)\"},{token:[\"constant.numeric.integer.base-29.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-29.erlang\"],regex:\"(29)(#)([\\\\da-sA-S]+)\"},{token:[\"constant.numeric.integer.base-30.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-30.erlang\"],regex:\"(30)(#)([\\\\da-tA-T]+)\"},{token:[\"constant.numeric.integer.base-31.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-31.erlang\"],regex:\"(31)(#)([\\\\da-uA-U]+)\"},{token:[\"constant.numeric.integer.base-32.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-32.erlang\"],regex:\"(32)(#)([\\\\da-vA-V]+)\"},{token:[\"constant.numeric.integer.base-33.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-33.erlang\"],regex:\"(33)(#)([\\\\da-wA-W]+)\"},{token:[\"constant.numeric.integer.base-34.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-34.erlang\"],regex:\"(34)(#)([\\\\da-xA-X]+)\"},{token:[\"constant.numeric.integer.base-35.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-35.erlang\"],regex:\"(35)(#)([\\\\da-yA-Y]+)\"},{token:[\"constant.numeric.integer.base-36.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-36.erlang\"],regex:\"(36)(#)([\\\\da-zA-Z]+)\"},{token:\"invalid.illegal.integer.erlang\",regex:\"\\\\d+#[\\\\da-zA-Z]+\"},{token:\"constant.numeric.integer.decimal.erlang\",regex:\"\\\\d+\"}]}],\"#parenthesized-expression\":[{token:\"punctuation.section.expression.begin.erlang\",regex:\"\\\\(\",push:[{token:\"punctuation.section.expression.end.erlang\",regex:\"\\\\)\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.parenthesized\"}]}],\"#record-directive\":[{token:[\"meta.directive.record.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.record.erlang\",\"keyword.control.directive.import.erlang\",\"meta.directive.record.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.record.erlang\",\"entity.name.type.class.record.definition.erlang\",\"meta.directive.record.erlang\",\"punctuation.separator.parameters.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(record)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(,)\",push:[{token:[\"punctuation.definition.class.record.end.erlang\",\"meta.directive.record.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.record.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\})(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#internal-record-body\"},{defaultToken:\"meta.directive.record.erlang\"}]}],\"#record-usage\":[{token:[\"keyword.operator.record.erlang\",\"meta.record-usage.erlang\",\"entity.name.type.class.record.erlang\",\"meta.record-usage.erlang\",\"punctuation.separator.record-field.erlang\",\"meta.record-usage.erlang\",\"variable.other.field.erlang\"],regex:\"(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(\\\\.)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')\"},{token:[\"keyword.operator.record.erlang\",\"meta.record-usage.erlang\",\"entity.name.type.class.record.erlang\"],regex:\"(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')\",push:[{token:\"punctuation.definition.class.record.end.erlang\",regex:\"\\\\}\",next:\"pop\"},{include:\"#internal-record-body\"},{defaultToken:\"meta.record-usage.erlang\"}]}],\"#string\":[{token:\"punctuation.definition.string.begin.erlang\",regex:'\"',push:[{token:\"punctuation.definition.string.end.erlang\",regex:'\"',next:\"pop\"},{token:[\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"constant.character.escape.erlang\"],regex:\"(\\\\\\\\)(?:([bdefnrstv\\\\\\\\'\\\"])|(\\\\^)([@-_])|([0-7]{1,3}))\"},{token:\"invalid.illegal.string.erlang\",regex:\"\\\\\\\\\\\\^?.?\"},{token:[\"punctuation.definition.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"constant.other.placeholder.erlang\"],regex:\"(~)(?:((?:\\\\-)?)(\\\\d+)|(\\\\*))?(?:(\\\\.)(?:(\\\\d+)|(\\\\*)))?(?:(\\\\.)(?:(\\\\*)|(.)))?([~cfegswpWPBX#bx\\\\+ni])\"},{token:[\"punctuation.definition.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"constant.other.placeholder.erlang\"],regex:\"(~)((?:\\\\*)?)((?:\\\\d+)?)([~du\\\\-#fsacl])\"},{token:\"invalid.illegal.string.erlang\",regex:\"~.?\"},{defaultToken:\"string.quoted.double.erlang\"}]}],\"#symbolic-operator\":[{token:\"keyword.operator.symbolic.erlang\",regex:\"\\\\+\\\\+|\\\\+|--|-|\\\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::\"}],\"#textual-operator\":[{token:\"keyword.operator.textual.erlang\",regex:\"\\\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\\\b\"}],\"#tuple\":[{token:\"punctuation.definition.tuple.begin.erlang\",regex:\"\\\\{\",push:[{token:\"punctuation.definition.tuple.end.erlang\",regex:\"\\\\}\",next:\"pop\"},{token:\"punctuation.separator.tuple.erlang\",regex:\",\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.tuple.erlang\"}]}],\"#variable\":[{token:[\"variable.other.erlang\",\"variable.language.omitted.erlang\"],regex:\"(_[a-zA-Z\\\\d@_]+|[A-Z][a-zA-Z\\\\d@_]*)|(_)\"}]},this.normalizeRules()};s.metaData={comment:\"The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace).  Also, the function/module/record/macro names must be given unquoted.  -- desp\",fileTypes:[\"erl\",\"hrl\"],keyEquivalent:\"^~E\",name:\"Erlang\",scopeName:\"source.erlang\"},r.inherits(s,i),t.ErlangHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/erlang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/erlang_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./erlang_highlight_rules\").ErlangHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"%\",this.blockComment=null,this.$id=\"ace/mode/erlang\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-forth.js",
    "content": "ace.define(\"ace/mode/forth_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#forth\"}],\"#comment\":[{token:\"comment.line.double-dash.forth\",regex:\"(?:^|\\\\s)--\\\\s.*$\",comment:\"line comments for iForth\"},{token:\"comment.line.backslash.forth\",regex:\"(?:^|\\\\s)\\\\\\\\[\\\\s\\\\S]*$\",comment:\"ANSI line comment\"},{token:\"comment.line.backslash-g.forth\",regex:\"(?:^|\\\\s)\\\\\\\\[Gg] .*$\",comment:\"gForth line comment\"},{token:\"comment.block.forth\",regex:\"(?:^|\\\\s)\\\\(\\\\*(?=\\\\s|$)\",push:[{token:\"comment.block.forth\",regex:\"(?:^|\\\\s)\\\\*\\\\)(?=\\\\s|$)\",next:\"pop\"},{defaultToken:\"comment.block.forth\"}],comment:\"multiline comments for iForth\"},{token:\"comment.block.documentation.forth\",regex:\"\\\\bDOC\\\\b\",caseInsensitive:!0,push:[{token:\"comment.block.documentation.forth\",regex:\"\\\\bENDDOC\\\\b\",caseInsensitive:!0,next:\"pop\"},{defaultToken:\"comment.block.documentation.forth\"}],comment:\"documentation comments for iForth\"},{token:\"comment.line.parentheses.forth\",regex:\"(?:^|\\\\s)\\\\.?\\\\( [^)]*\\\\)\",comment:\"ANSI line comment\"}],\"#constant\":[{token:\"constant.language.forth\",regex:\"(?:^|\\\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\\\s|$)\",caseInsensitive:!0},{token:\"constant.numeric.forth\",regex:\"(?:^|\\\\s)[$#%]?[-+]?[0-9]+(?:\\\\.[0-9]*e-?[0-9]+|\\\\.?[0-9a-fA-F]*)(?=\\\\s|$)\"},{token:\"constant.character.forth\",regex:\"(?:^|\\\\s)(?:[&^]\\\\S|(?:\\\"|')\\\\S(?:\\\"|'))(?=\\\\s|$)\"}],\"#forth\":[{include:\"#constant\"},{include:\"#comment\"},{include:\"#string\"},{include:\"#word\"},{include:\"#variable\"},{include:\"#storage\"},{include:\"#word-def\"}],\"#storage\":[{token:\"storage.type.forth\",regex:\"(?:^|\\\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\\\s|$)\",caseInsensitive:!0}],\"#string\":[{token:\"string.quoted.double.forth\",regex:'(ABORT\" |BREAK\" |\\\\.\" |C\" |0\"|S\\\\\\\\?\" )([^\"]+\")',caseInsensitive:!0},{token:\"string.unquoted.forth\",regex:\"(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\\\S+(?=\\\\s|$)\",caseInsensitive:!0}],\"#variable\":[{token:\"variable.language.forth\",regex:\"\\\\b(?:I|J)\\\\b\",caseInsensitive:!0}],\"#word\":[{token:\"keyword.control.immediate.forth\",regex:\"(?:^|\\\\s)\\\\[(?:\\\\?DO|\\\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\\\](?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.other.immediate.forth\",regex:\"(?:^|\\\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT'S|])(?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.control.compile-only.forth\",regex:'(?:^|\\\\s)(?:-DO|\\\\-LOOP|\\\\?DO|\\\\?LEAVE|\\\\+DO|\\\\+LOOP|ABORT\\\\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\\\-DO|U\\\\+DO|UNTIL|WHILE)(?=\\\\s|$)',caseInsensitive:!0},{token:\"keyword.other.compile-only.forth\",regex:\"(?:^|\\\\s)(?:\\\\?DUP-0=-IF|\\\\?DUP-IF|\\\\)|\\\\[|\\\\['\\\\]|\\\\[CHAR\\\\]|\\\\[COMPILE\\\\]|\\\\[IS\\\\]|\\\\[TO\\\\]|<COMPILATION|<INTERPRETATION|ASSERT\\\\(|ASSERT0\\\\(|ASSERT1\\\\(|ASSERT2\\\\(|ASSERT3\\\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.other.non-immediate.forth\",regex:\"(?:^|\\\\s)(?:'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.other.warning.forth\",regex:'(?:^|\\\\s)(?:~~|BREAK:|BREAK\"|DBG)(?=\\\\s|$)',caseInsensitive:!0}],\"#word-def\":[{token:[\"keyword.other.compile-only.forth\",\"keyword.other.compile-only.forth\",\"meta.block.forth\",\"entity.name.function.forth\"],regex:\"(:NONAME)|(^:|\\\\s:)(\\\\s)(\\\\S+)(?=\\\\s|$)\",caseInsensitive:!0,push:[{token:\"keyword.other.compile-only.forth\",regex:\";(?:CODE)?\",caseInsensitive:!0,next:\"pop\"},{include:\"#constant\"},{include:\"#comment\"},{include:\"#string\"},{include:\"#word\"},{include:\"#variable\"},{include:\"#storage\"},{defaultToken:\"meta.block.forth\"}]}]},this.normalizeRules()};s.metaData={fileTypes:[\"frt\",\"fs\",\"ldr\",\"fth\",\"4th\"],foldingStartMarker:\"/\\\\*\\\\*|\\\\{\\\\s*$\",foldingStopMarker:\"\\\\*\\\\*/|^\\\\s*\\\\}\",keyEquivalent:\"^~F\",name:\"Forth\",scopeName:\"source.forth\"},r.inherits(s,i),t.ForthHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/forth\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/forth_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./forth_highlight_rules\").ForthHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment=null,this.$id=\"ace/mode/forth\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-fortran.js",
    "content": "ace.define(\"ace/mode/fortran_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"call|case|contains|continue|cycle|do|else|elseif|end|enddo|endif|function|if|implicit|in|include|inout|intent|module|none|only|out|print|program|return|select|status|stop|subroutine|return|then|use|while|write|CALL|CASE|CONTAINS|CONTINUE|CYCLE|DO|ELSE|ELSEIF|END|ENDDO|ENDIF|FUNCTION|IF|IMPLICIT|IN|INCLUDE|INOUT|INTENT|MODULE|NONE|ONLY|OUT|PRINT|PROGRAM|RETURN|SELECT|STATUS|STOP|SUBROUTINE|RETURN|THEN|USE|WHILE|WRITE\",t=\"and|or|not|eq|ne|gt|ge|lt|le|AND|OR|NOT|EQ|NE|GT|GE|LT|LE\",n=\"true|false|TRUE|FALSE\",r=\"abs|achar|acos|acosh|adjustl|adjustr|aimag|aint|all|allocate|anint|any|asin|asinh|associated|atan|atan2|atanh|bessel_j0|bessel_j1|bessel_jn|bessel_y0|bessel_y1|bessel_yn|bge|bgt|bit_size|ble|blt|btest|ceiling|char|cmplx|conjg|cos|cosh|count|cpu_time|cshift|date_and_time|dble|deallocate|digits|dim|dot_product|dprod|dshiftl|dshiftr|dsqrt|eoshift|epsilon|erf|erfc|erfc_scaled|exp|float|floor|format|fraction|gamma|input|len|lge|lgt|lle|llt|log|log10|maskl|maskr|matmul|max|maxloc|maxval|merge|min|minloc|minval|mod|modulo|nint|not|norm2|null|nullify|pack|parity|popcnt|poppar|precision|present|product|radix|random_number|random_seed|range|repeat|reshape|round|rrspacing|same_type_as|scale|scan|selected_char_kind|selected_int_kind|selected_real_kind|set_exponent|shape|shifta|shiftl|shiftr|sign|sin|sinh|size|sngl|spacing|spread|sqrt|sum|system_clock|tan|tanh|tiny|trailz|transfer|transpose|trim|ubound|unpack|verify|ABS|ACHAR|ACOS|ACOSH|ADJUSTL|ADJUSTR|AIMAG|AINT|ALL|ALLOCATE|ANINT|ANY|ASIN|ASINH|ASSOCIATED|ATAN|ATAN2|ATANH|BESSEL_J0|BESSEL_J1|BESSEL_JN|BESSEL_Y0|BESSEL_Y1|BESSEL_YN|BGE|BGT|BIT_SIZE|BLE|BLT|BTEST|CEILING|CHAR|CMPLX|CONJG|COS|COSH|COUNT|CPU_TIME|CSHIFT|DATE_AND_TIME|DBLE|DEALLOCATE|DIGITS|DIM|DOT_PRODUCT|DPROD|DSHIFTL|DSHIFTR|DSQRT|EOSHIFT|EPSILON|ERF|ERFC|ERFC_SCALED|EXP|FLOAT|FLOOR|FORMAT|FRACTION|GAMMA|INPUT|LEN|LGE|LGT|LLE|LLT|LOG|LOG10|MASKL|MASKR|MATMUL|MAX|MAXLOC|MAXVAL|MERGE|MIN|MINLOC|MINVAL|MOD|MODULO|NINT|NOT|NORM2|NULL|NULLIFY|PACK|PARITY|POPCNT|POPPAR|PRECISION|PRESENT|PRODUCT|RADIX|RANDOM_NUMBER|RANDOM_SEED|RANGE|REPEAT|RESHAPE|ROUND|RRSPACING|SAME_TYPE_AS|SCALE|SCAN|SELECTED_CHAR_KIND|SELECTED_INT_KIND|SELECTED_REAL_KIND|SET_EXPONENT|SHAPE|SHIFTA|SHIFTL|SHIFTR|SIGN|SIN|SINH|SIZE|SNGL|SPACING|SPREAD|SQRT|SUM|SYSTEM_CLOCK|TAN|TANH|TINY|TRAILZ|TRANSFER|TRANSPOSE|TRIM|UBOUND|UNPACK|VERIFY\",i=\"logical|character|integer|real|type|LOGICAL|CHARACTER|INTEGER|REAL|TYPE\",s=\"allocatable|dimension|intent|parameter|pointer|target|private|public|ALLOCATABLE|DIMENSION|INTENT|PARAMETER|POINTER|TARGET|PRIVATE|PUBLIC\",o=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":r,\"constant.language\":n,keyword:e,\"keyword.operator\":t,\"storage.type\":i,\"storage.modifier\":s},\"identifier\"),u=\"(?:r|u|ur|R|U|UR|Ur|uR)?\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"!.*$\"},{token:\"string\",regex:u+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|define|undef|INCLUDE|IMPORT|DEFINE|UNDEF)\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|ifdef|else|elseif|ifndef|ENDIF|IFDEF|ELSE|ELSEIF|IFNDEF)\\\\b\"},{token:o,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.FortranHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/fortran\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fortran_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./fortran_highlight_rules\").FortranHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"!\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={\"return\":1,\"break\":1,\"continue\":1,RETURN:1,BREAK:1,CONTINUE:1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/fortran\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-fsharp.js",
    "content": "ace.define(\"ace/mode/fsharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({variable:\"this\",keyword:\"abstract|assert|base|begin|class|default|delegate|done|downcast|downto|elif|else|exception|extern|false|finally|function|global|inherit|inline|interface|internal|lazy|match|member|module|mutable|namespace|open|or|override|private|public|rec|return|return!|select|static|struct|then|to|true|try|typeof|upcast|use|use!|val|void|when|while|with|yield|yield!|__SOURCE_DIRECTORY__|as|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall|trait|virtual|volatile|and|do|end|for|fun|if|in|let|let!|new|not|null|of|endif\",constant:\"true|false\"},\"identifier\"),t=\"(?:(?:(?:(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.))|(?:\\\\d+))(?:[eE][+-]?\\\\d+))|(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.)))\";this.$rules={start:[{token:\"variable.classes\",regex:\"\\\\[\\\\<[.]*\\\\>\\\\]\"},{token:\"comment\",regex:\"//.*$\"},{token:\"comment.start\",regex:/\\(\\*(?!\\))/,push:\"blockComment\"},{token:\"string\",regex:\"'.'\"},{token:\"string\",regex:'\"\"\"',next:[{token:\"constant.language.escape\",regex:/\\\\./,next:\"qqstring\"},{token:\"string\",regex:'\"\"\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"',next:[{token:\"constant.language.escape\",regex:/\\\\./,next:\"qqstring\"},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}]},{token:[\"verbatim.string\",\"string\"],regex:'(@?)(\")',stateName:\"qqstring\",next:[{token:\"constant.language.escape\",regex:'\"\"'},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.float\",regex:\"(?:\"+t+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.float\",regex:t},{token:\"constant.integer\",regex:\"(?:(?:(?:[1-9]\\\\d*)|(?:0))|(?:0[oO]?[0-7]+)|(?:0[xX][\\\\dA-Fa-f]+)|(?:0[bB][01]+))\\\\b\"},{token:[\"keyword.type\",\"variable\"],regex:\"(type\\\\s)([a-zA-Z0-9_$-]*\\\\b)\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|\\\\(\\\\*\\\\)\"},{token:\"paren.lpar\",regex:\"[[({]\"},{token:\"paren.rpar\",regex:\"[\\\\])}]\"}],blockComment:[{regex:/\\(\\*\\)/,token:\"comment\"},{regex:/\\(\\*(?!\\))/,token:\"comment.start\",push:\"blockComment\"},{regex:/\\*\\)/,token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.FSharpHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/fsharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsharp_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./fsharp_highlight_rules\").FSharpHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"(*\",end:\"*)\",nestable:!0},this.$id=\"ace/mode/fsharp\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-fsl.js",
    "content": "ace.define(\"ace/mode/fsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"punctuation.definition.comment.mn\",regex:/\\/\\*/,push:[{token:\"punctuation.definition.comment.mn\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.fsl\"}]},{token:\"comment.line.fsl\",regex:/\\/\\//,push:[{token:\"comment.line.fsl\",regex:/$/,next:\"pop\"},{defaultToken:\"comment.line.fsl\"}]},{token:\"entity.name.function\",regex:/\\${/,push:[{token:\"entity.name.function\",regex:/}/,next:\"pop\"},{defaultToken:\"keyword.other\"}],comment:\"js outcalls\"},{token:\"constant.numeric\",regex:/[0-9]*\\.[0-9]*\\.[0-9]*/,comment:\"semver\"},{token:\"constant.language.fslLanguage\",regex:\"(?:graph_layout|machine_name|machine_author|machine_license|machine_comment|machine_language|machine_version|machine_reference|npm_name|graph_layout|on_init|on_halt|on_end|on_terminate|on_finalize|on_transition|on_action|on_stochastic_action|on_legal|on_main|on_forced|on_validation|on_validation_failure|on_transition_refused|on_forced_transition_refused|on_action_refused|on_enter|on_exit|start_states|end_states|terminal_states|final_states|fsl_version)\\\\s*:\"},{token:\"keyword.control.transition.fslArrow\",regex:/<->|<-|->|<=>|=>|<=|<~>|~>|<~|<-=>|<=->|<-~>|<~->|<=~>|<~=>/},{token:\"constant.numeric.fslProbability\",regex:/[0-9]+%/,comment:\"edge probability annotation\"},{token:\"constant.character.fslAction\",regex:/\\'[^']*\\'/,comment:\"action annotation\"},{token:\"string.quoted.double.fslLabel.doublequoted\",regex:/\\\"[^\"]*\\\"/,comment:\"fsl label annotation\"},{token:\"entity.name.tag.fslLabel.atom\",regex:/[a-zA-Z0-9_.+&()#@!?,]/,comment:\"fsl label annotation\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"fsl\",\"fsl_state\"],name:\"FSL\",scopeName:\"source.fsl\"},r.inherits(s,i),t.FSLHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/fsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsl_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./fsl_highlight_rules\").FSLHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/fsl\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-ftl.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/ftl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"\\\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|upper_case|word_list|xhtml|xml\",t=\"c|round|floor|ceiling\",n=\"iso_[a-z_]+\",r=\"first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk\",i=\"keys|values\",s=\"children|parent|root|ancestors|node_name|node_type|node_namespace\",o=\"byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|eval|has_content|interpret|is_[a-z_]+|namespacenew\",u=e+t+n+r+i+s+o,a=\"default|exists|if_exists|web_safe\",f=\"data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|now|output_encoding|template_name|url_escaping_charset|vars|version\",l=\"gt|gte|lt|lte|as|in|using\",c=\"true|false\",h=\"encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|attributes\";this.$rules={start:[{token:\"constant.character.entity\",regex:/&[^;]+;/},{token:\"support.function\",regex:\"\\\\?(\"+u+\")\"},{token:\"support.function.deprecated\",regex:\"\\\\?(\"+a+\")\"},{token:\"language.variable\",regex:\"\\\\.(?:\"+f+\")\"},{token:\"constant.language\",regex:\"\\\\b(\"+c+\")\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\b(?:\"+l+\")\\\\b\"},{token:\"entity.other.attribute-name\",regex:h},{token:\"string\",regex:/['\"]/,next:\"qstring\"},{token:function(e){return e.match(\"^[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?$\")?\"constant.numeric\":\"variable\"},regex:/[\\w.+\\-]+/},{token:\"keyword.operator\",regex:\"!|\\\\.|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qstring:[{token:\"constant.character.escape\",regex:'\\\\\\\\[nrtvef\\\\\\\\\"$]'},{token:\"string\",regex:/['\"]/,next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(o,s);var u=function(){i.call(this);var e=\"assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|setting|stop|switch|t|visit\",t=[{token:\"comment\",regex:\"<#--\",next:\"ftl-dcomment\"},{token:\"string.interpolated\",regex:\"\\\\${\",push:\"ftl-start\"},{token:\"keyword.function\",regex:\"</?#(\"+e+\")\",push:\"ftl-start\"},{token:\"keyword.other\",regex:\"</?@[a-zA-Z\\\\.]+\",push:\"ftl-start\"}],n=[{token:\"keyword\",regex:\"/?>\",next:\"pop\"},{token:\"string.interpolated\",regex:\"}\",next:\"pop\"}];for(var r in this.$rules)this.$rules[r].unshift.apply(this.$rules[r],t);this.embedRules(o,\"ftl-\",n,[\"start\"]),this.addRules({\"ftl-dcomment\":[{token:\"comment\",regex:\"-->\",next:\"pop\"},{defaultToken:\"comment\"}]}),this.normalizeRules()};r.inherits(u,i),t.FtlHighlightRules=u}),ace.define(\"ace/mode/ftl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ftl_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ftl_highlight_rules\").FtlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.$id=\"ace/mode/ftl\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-gcode.js",
    "content": "ace.define(\"ace/mode/gcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"IF|DO|WHILE|ENDWHILE|CALL|ENDIF|SUB|ENDSUB|GOTO|REPEAT|ENDREPEAT|CALL\",t=\"PI\",n=\"ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\(.*\\\\)\"},{token:\"comment\",regex:\"([N])([0-9]+)\"},{token:\"string\",regex:\"([G])([0-9]+\\\\.?[0-9]?)\"},{token:\"string\",regex:\"([M])([0-9]+\\\\.?[0-9]?)\"},{token:\"constant.numeric\",regex:\"([-+]?([0-9]*\\\\.?[0-9]+\\\\.?))|(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\"},{token:r,regex:\"[A-Z]\"},{token:\"keyword.operator\",regex:\"EQ|LT|GT|NE|GE|LE|OR|XOR\"},{token:\"paren.lparen\",regex:\"[\\\\[]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.GcodeHighlightRules=s}),ace.define(\"ace/mode/gcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gcode_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./gcode_highlight_rules\").GcodeHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.$id=\"ace/mode/gcode\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-gherkin.js",
    "content": "ace.define(\"ace/mode/gherkin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\",o=function(){var e=[{name:\"en\",labels:\"Feature|Background|Scenario(?: Outline)?|Examples\",keywords:\"Given|When|Then|And|But\"}],t=e.map(function(e){return e.labels}).join(\"|\"),n=e.map(function(e){return e.keywords}).join(\"|\");this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:(?:[1-9]\\\\d*)|(?:0))\"},{token:\"comment\",regex:\"#.*$\"},{token:\"keyword\",regex:\"(?:\"+t+\"):|(?:\"+n+\")\\\\b\"},{token:\"keyword\",regex:\"\\\\*\"},{token:\"string\",regex:'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"text\",regex:\"^\\\\s*(?=@[\\\\w])\",next:[{token:\"text\",regex:\"\\\\s+\"},{token:\"variable.parameter\",regex:\"@[\\\\w]+\"},{token:\"empty\",regex:\"\",next:\"start\"}]},{token:\"comment\",regex:\"<[^>]+>\"},{token:\"comment\",regex:\"\\\\|(?=.)\",next:\"table-item\"},{token:\"comment\",regex:\"\\\\|$\",next:\"start\"}],qqstring3:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],\"table-item\":[{token:\"comment\",regex:/$/,next:\"start\"},{token:\"comment\",regex:/\\|/},{token:\"string\",regex:/\\\\./},{defaultToken:\"string\"}]},this.normalizeRules()};r.inherits(o,i),t.GherkinHighlightRules=o}),ace.define(\"ace/mode/gherkin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gherkin_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./gherkin_highlight_rules\").GherkinHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/gherkin\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=\"  \",s=this.getTokenizer().getLineTokens(t,e),o=s.tokens;return console.log(e),t.match(\"[ ]*\\\\|\")&&(r+=\"| \"),o.length&&o[o.length-1].type==\"comment\"?r:(e==\"start\"&&(t.match(\"Scenario:|Feature:|Scenario Outline:|Background:\")?r+=i:t.match(\"(Given|Then).+(:)$|Examples:\")?r+=i:t.match(\"\\\\*.+\")&&(r+=\"* \")),r)}}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-gitignore.js",
    "content": "ace.define(\"ace/mode/gitignore_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:/^\\s*#.*$/},{token:\"keyword\",regex:/^\\s*!.*$/}]},this.normalizeRules()};s.metaData={fileTypes:[\"gitignore\"],name:\"Gitignore\"},r.inherits(s,i),t.GitignoreHighlightRules=s}),ace.define(\"ace/mode/gitignore\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gitignore_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./gitignore_highlight_rules\").GitignoreHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/gitignore\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-glsl.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/glsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,s=function(){var e=\"attribute|const|uniform|varying|break|continue|do|for|while|if|else|in|out|inout|float|int|void|bool|true|false|lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|samplerCube|struct\",t=\"radians|degrees|sin|cos|tan|asin|acos|atan|pow|exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|normalize|faceforward|reflect|refract|matrixCompMult|lessThan|lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|texture2DProjLod|textureCube|textureCubeLod|gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|gl_DepthRangeParameters|gl_DepthRange|gl_Position|gl_PointSize|gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData\",n=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t},\"identifier\");this.$rules=(new i).$rules,this.$rules.start.forEach(function(e){typeof e.token==\"function\"&&(e.token=n)})};r.inherits(s,i),t.glslHighlightRules=s}),ace.define(\"ace/mode/glsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/glsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./glsl_highlight_rules\").glslHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.$id=\"ace/mode/glsl\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-gobstones.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/gobstones_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"program|procedure|function|interactive|if|then|else|switch|repeat|while|foreach|in|not|div|mod|Skip|return\",t=\"False|True\",n=\"Poner|Sacar|Mover|IrAlBorde|VaciarTablero|nroBolitas|hayBolitas|puedeMover|siguiente|previo|opuesto|minBool|maxBool|minDir|maxDir|minColor|maxColor\",r=\"Verde|Rojo|Azul|Negro|Norte|Sur|Este|Oeste\",s=this.createKeywordMapper({keyword:e,\"constant.language\":t,\"support.function\":n,\"support.type\":r},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{token:\"comment\",regex:\"#.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:True|False)\\\\b\"},{token:\"keyword.operator\",regex:\":=|\\\\.\\\\.|,|;|\\\\|\\\\||\\\\/\\\\/|\\\\+|\\\\-|\\\\^|\\\\*|>|<|>=|=>|==|&&\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.GobstonesHighlightRules=o}),ace.define(\"ace/mode/gobstones\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/gobstones_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./gobstones_highlight_rules\").GobstonesHighlightRules,o=function(){i.call(this),this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/gobstones\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-golang.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/golang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"else|break|case|return|goto|if|const|select|continue|struct|default|switch|for|range|func|import|package|chan|defer|fallthrough|go|interface|map|range|select|type|var\",t=\"string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error\",n=\"new|close|cap|copy|panic|panicln|print|println|len|make|delete|real|recover|imag|append\",r=\"nil|true|false|iota\",s=this.createKeywordMapper({keyword:e,\"constant.language\":r,\"support.function\":n,\"support.type\":t},\"\"),o=\"\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u{4}|U\\\\h{6}|[abfnrtv'\\\"\\\\\\\\])\".replace(/\\\\h/g,\"[a-fA-F\\\\d]\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:/\"(?:[^\"\\\\]|\\\\.)*?\"/},{token:\"string\",regex:\"`\",next:\"bqstring\"},{token:\"constant.numeric\",regex:\"'(?:[^\\\\'\\ud800-\\udbff]|[\\ud800-\\udbff][\\udc00-\\udfff]|\"+o.replace('\"',\"\")+\")'\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:[\"keyword\",\"text\",\"entity.name.function\"],regex:\"(func)(\\\\s+)([a-zA-Z_$][a-zA-Z0-9_$]*)\\\\b\"},{token:function(e){return e[e.length-1]==\"(\"?[{type:s(e.slice(0,-1))||\"support.function\",value:e.slice(0,-1)},{type:\"paren.lparen\",value:e.slice(-1)}]:s(e)||\"identifier\"},regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\\\\(?\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],bqstring:[{token:\"string\",regex:\"`\",next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.GolangHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/golang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/golang_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./golang_highlight_rules\").GolangHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new a,this.$behaviour=new u};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/golang\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-graphqlschema.js",
    "content": "ace.define(\"ace/mode/graphqlschema_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"type|interface|union|enum|schema|input|implements|extends|scalar\",t=\"Int|Float|String|ID|Boolean\",n=this.createKeywordMapper({keyword:e,\"storage.type\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.GraphQLSchemaHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/graphqlschema\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/graphqlschema_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./graphqlschema_highlight_rules\").GraphQLSchemaHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/graphqlschema\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-groovy.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/groovy_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"assert|with|abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|def|float|native|super|while\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"support.function\":n,\"constant.language\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"\"\"',next:\"qqstring\"},{token:\"string\",regex:\"'''\",next:\"qstring\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\?:|\\\\?\\\\.|\\\\*\\\\.|<=>|=~|==~|\\\\.@|\\\\*\\\\.@|\\\\.&|as|in|is|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"constant.language.escape\",regex:/\\\\(?:u[0-9A-Fa-f]{4}|.|$)/},{token:\"constant.language.escape\",regex:/\\$[\\w\\d]+/},{token:\"constant.language.escape\",regex:/\\$\\{[^\"\\}]+\\}?/},{token:\"string\",regex:'\"{3,5}',next:\"start\"},{token:\"string\",regex:\".+?\"}],qstring:[{token:\"constant.language.escape\",regex:/\\\\(?:u[0-9A-Fa-f]{4}|.|$)/},{token:\"string\",regex:\"'{3,5}\",next:\"start\"},{token:\"string\",regex:\".+?\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.GroovyHighlightRules=o}),ace.define(\"ace/mode/groovy\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/groovy_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./groovy_highlight_rules\").GroovyHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/groovy\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-haml.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),ace.define(\"ace/mode/haml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./ruby_highlight_rules\"),o=s.RubyHighlightRules,u=function(){i.call(this),this.$rules={start:[{token:\"comment.block\",regex:/^\\/$/,next:\"comment\"},{token:\"comment.block\",regex:/^\\-#$/,next:\"comment\"},{token:\"comment.line\",regex:/\\/\\s*.*/},{token:\"comment.line\",regex:/-#\\s*.*/},{token:\"keyword.other.doctype\",regex:\"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"},s.qString,s.qqString,s.tString,{token:\"meta.tag.haml\",regex:/(%[\\w:\\-]+)/},{token:\"keyword.attribute-name.class.haml\",regex:/\\.[\\w-]+/},{token:\"keyword.attribute-name.id.haml\",regex:/#[\\w-]+/,next:\"element_class\"},s.constantNumericHex,s.constantNumericFloat,s.constantOtherSymbol,{token:\"text\",regex:/=|-|~/,next:\"embedded_ruby\"}],element_class:[{token:\"keyword.attribute-name.class.haml\",regex:/\\.[\\w-]+/},{token:\"punctuation.section\",regex:/\\{/,next:\"element_attributes\"},s.constantOtherSymbol,{token:\"empty\",regex:\"$|(?!\\\\.|#|\\\\{|\\\\[|=|-|~|\\\\/])\",next:\"start\"}],element_attributes:[s.constantOtherSymbol,s.qString,s.qqString,s.tString,s.constantNumericHex,s.constantNumericFloat,{token:\"punctuation.section\",regex:/$|\\}/,next:\"start\"}],embedded_ruby:[s.constantNumericHex,s.constantNumericFloat,s.instanceVariable,s.qString,s.qqString,s.tString,{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},{token:(new o).getKeywords(),regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:[\"keyword\",\"text\",\"text\"],regex:\"(?:do|\\\\{)(?: \\\\|[^|]+\\\\|)?$\",next:\"start\"},{token:[\"text\"],regex:\"^$\",next:\"start\"},{token:[\"text\"],regex:\"^(?!.*\\\\|\\\\s*$)\",next:\"start\"}],comment:[{token:\"comment.block\",regex:/^$/,next:\"start\"},{token:\"comment.block\",regex:/\\s+.*/}]},this.normalizeRules()};r.inherits(u,i),t.HamlHighlightRules=u}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/haml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haml_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haml_highlight_rules\").HamlHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/haml\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-handlebars.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/handlebars_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";function s(e,t){return t.splice(0,3),t.shift()||\"start\"}var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,o=function(){i.call(this);var e={regex:\"(?={{)\",push:\"handlebars\"};for(var t in this.$rules)this.$rules[t].unshift(e);this.$rules.handlebars=[{token:\"comment.start\",regex:\"{{!--\",push:[{token:\"comment.end\",regex:\"--}}\",next:s},{defaultToken:\"comment\"}]},{token:\"comment.start\",regex:\"{{!\",push:[{token:\"comment.end\",regex:\"}}\",next:s},{defaultToken:\"comment\"}]},{token:\"support.function\",regex:\"{{{\",push:[{token:\"support.function\",regex:\"}}}\",next:s},{token:\"variable.parameter\",regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"}]},{token:\"storage.type.start\",regex:\"{{[#\\\\^/&]?\",push:[{token:\"storage.type.end\",regex:\"}}\",next:s},{token:\"variable.parameter\",regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"}]}],this.normalizeRules()};r.inherits(o,i),t.HandlebarsHighlightRules=o}),ace.define(\"ace/mode/behaviour/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour/xml\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour/xml\").XmlBehaviour,s=function(){i.call(this)};r.inherits(s,i),t.HtmlBehaviour=s}),ace.define(\"ace/mode/handlebars\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/handlebars_highlight_rules\",\"ace/mode/behaviour/html\",\"ace/mode/folding/html\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./handlebars_highlight_rules\").HandlebarsHighlightRules,o=e(\"./behaviour/html\").HtmlBehaviour,u=e(\"./folding/html\").FoldMode,a=function(){i.call(this),this.HighlightRules=s,this.$behaviour=new o};r.inherits(a,i),function(){this.blockComment={start:\"{{!--\",end:\"--}}\"},this.$id=\"ace/mode/handlebars\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-haskell.js",
    "content": "ace.define(\"ace/mode/haskell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"punctuation.definition.entity.haskell\",\"keyword.operator.function.infix.haskell\",\"punctuation.definition.entity.haskell\"],regex:\"(`)([a-zA-Z_']*?)(`)\",comment:\"In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).\"},{token:\"constant.language.unit.haskell\",regex:\"\\\\(\\\\)\"},{token:\"constant.language.empty-list.haskell\",regex:\"\\\\[\\\\]\"},{token:\"keyword.other.haskell\",regex:\"\\\\b(module|signature)\\\\b\",push:[{token:\"keyword.other.haskell\",regex:\"\\\\bwhere\\\\b\",next:\"pop\"},{include:\"#module_name\"},{include:\"#module_exports\"},{token:\"invalid\",regex:\"[a-z]+\"},{defaultToken:\"meta.declaration.module.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"\\\\bclass\\\\b\",push:[{token:\"keyword.other.haskell\",regex:\"\\\\bwhere\\\\b\",next:\"pop\"},{token:\"support.class.prelude.haskell\",regex:\"\\\\b(?:Monad|Functor|Eq|Ord|Read|Show|Num|(?:Frac|Ra)tional|Enum|Bounded|Real(?:Frac|Float)?|Integral|Floating)\\\\b\"},{token:\"entity.other.inherited-class.haskell\",regex:\"[A-Z][A-Za-z_']*\"},{token:\"variable.other.generic-type.haskell\",regex:\"\\\\b[a-z][a-zA-Z0-9_']*\\\\b\"},{defaultToken:\"meta.declaration.class.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"\\\\binstance\\\\b\",push:[{token:\"keyword.other.haskell\",regex:\"\\\\bwhere\\\\b|$\",next:\"pop\"},{include:\"#type_signature\"},{defaultToken:\"meta.declaration.instance.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"import\",push:[{token:\"meta.import.haskell\",regex:\"$|;|^\",next:\"pop\"},{token:\"keyword.other.haskell\",regex:\"qualified|as|hiding\"},{include:\"#module_name\"},{include:\"#module_exports\"},{defaultToken:\"meta.import.haskell\"}]},{token:[\"keyword.other.haskell\",\"meta.deriving.haskell\"],regex:\"(deriving)(\\\\s*\\\\()\",push:[{token:\"meta.deriving.haskell\",regex:\"\\\\)\",next:\"pop\"},{token:\"entity.other.inherited-class.haskell\",regex:\"\\\\b[A-Z][a-zA-Z_']*\"},{defaultToken:\"meta.deriving.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"\\\\b(?:deriving|where|data|type|case|of|let|in|newtype|default)\\\\b\"},{token:\"keyword.operator.haskell\",regex:\"\\\\binfix[lr]?\\\\b\"},{token:\"keyword.control.haskell\",regex:\"\\\\b(?:do|if|then|else)\\\\b\"},{token:\"constant.numeric.float.haskell\",regex:\"\\\\b(?:[0-9]+\\\\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\\\b\",comment:\"Floats are always decimal\"},{token:\"constant.numeric.haskell\",regex:\"\\\\b(?:[0-9]+|0(?:[xX][0-9a-fA-F]+|[oO][0-7]+))\\\\b\"},{token:[\"meta.preprocessor.c\",\"punctuation.definition.preprocessor.c\",\"meta.preprocessor.c\"],regex:\"^(\\\\s*)(#)(\\\\s*\\\\w+)\",comment:'In addition to Haskell\\'s \"native\" syntax, GHC permits the C preprocessor to be run on a source file.'},{include:\"#pragma\"},{token:\"punctuation.definition.string.begin.haskell\",regex:'\"',push:[{token:\"punctuation.definition.string.end.haskell\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.haskell\",regex:\"\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\\\"'\\\\&])\"},{token:\"constant.character.escape.octal.haskell\",regex:\"\\\\\\\\o[0-7]+|\\\\\\\\x[0-9A-Fa-f]+|\\\\\\\\[0-9]+\"},{token:\"constant.character.escape.control.haskell\",regex:\"\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]\"},{defaultToken:\"string.quoted.double.haskell\"}]},{token:[\"punctuation.definition.string.begin.haskell\",\"string.quoted.single.haskell\",\"constant.character.escape.haskell\",\"constant.character.escape.octal.haskell\",\"constant.character.escape.hexadecimal.haskell\",\"constant.character.escape.control.haskell\",\"punctuation.definition.string.end.haskell\"],regex:\"(')(?:([\\\\ -\\\\[\\\\]-~])|(\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\\\"'\\\\&]))|(\\\\\\\\o[0-7]+)|(\\\\\\\\x[0-9A-Fa-f]+)|(\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]))(')\"},{token:[\"meta.function.type-declaration.haskell\",\"entity.name.function.haskell\",\"meta.function.type-declaration.haskell\",\"keyword.other.double-colon.haskell\"],regex:\"^(\\\\s*)([a-z_][a-zA-Z0-9_']*|\\\\([|!%$+\\\\-.,=</>]+\\\\))(\\\\s*)(::)\",push:[{token:\"meta.function.type-declaration.haskell\",regex:\"$\",next:\"pop\"},{include:\"#type_signature\"},{defaultToken:\"meta.function.type-declaration.haskell\"}]},{token:\"support.constant.haskell\",regex:\"\\\\b(?:Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\\\(\\\\)|\\\\[\\\\])\\\\b\"},{token:\"constant.other.haskell\",regex:\"\\\\b[A-Z]\\\\w*\\\\b\"},{include:\"#comments\"},{token:\"support.function.prelude.haskell\",regex:\"\\\\b(?:abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\\\b\"},{include:\"#infix_op\"},{token:\"keyword.operator.haskell\",regex:\"[|!%$?~+:\\\\-.=</>\\\\\\\\]+\",comment:\"In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.\"},{token:\"punctuation.separator.comma.haskell\",regex:\",\"}],\"#block_comment\":[{token:\"punctuation.definition.comment.haskell\",regex:\"\\\\{-(?!#)\",push:[{include:\"#block_comment\"},{token:\"punctuation.definition.comment.haskell\",regex:\"-\\\\}\",next:\"pop\"},{defaultToken:\"comment.block.haskell\"}]}],\"#comments\":[{token:\"punctuation.definition.comment.haskell\",regex:\"--.*\",push_:[{token:\"comment.line.double-dash.haskell\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-dash.haskell\"}]},{include:\"#block_comment\"}],\"#infix_op\":[{token:\"entity.name.function.infix.haskell\",regex:\"\\\\([|!%$+:\\\\-.=</>]+\\\\)|\\\\(,+\\\\)\"}],\"#module_exports\":[{token:\"meta.declaration.exports.haskell\",regex:\"\\\\(\",push:[{token:\"meta.declaration.exports.haskell.end\",regex:\"\\\\)\",next:\"pop\"},{token:\"entity.name.function.haskell\",regex:\"\\\\b[a-z][a-zA-Z_']*\"},{token:\"storage.type.haskell\",regex:\"\\\\b[A-Z][A-Za-z_']*\"},{token:\"punctuation.separator.comma.haskell\",regex:\",\"},{include:\"#infix_op\"},{token:\"meta.other.unknown.haskell\",regex:\"\\\\(.*?\\\\)\",comment:\"So named because I don't know what to call this.\"},{defaultToken:\"meta.declaration.exports.haskell.end\"}]}],\"#module_name\":[{token:\"support.other.module.haskell\",regex:\"[A-Z][A-Za-z._']*\"}],\"#pragma\":[{token:\"meta.preprocessor.haskell\",regex:\"\\\\{-#\",push:[{token:\"meta.preprocessor.haskell\",regex:\"#-\\\\}\",next:\"pop\"},{token:\"keyword.other.preprocessor.haskell\",regex:\"\\\\b(?:LANGUAGE|UNPACK|INLINE)\\\\b\"},{defaultToken:\"meta.preprocessor.haskell\"}]}],\"#type_signature\":[{token:[\"meta.class-constraint.haskell\",\"entity.other.inherited-class.haskell\",\"meta.class-constraint.haskell\",\"variable.other.generic-type.haskell\",\"meta.class-constraint.haskell\",\"keyword.other.big-arrow.haskell\"],regex:\"(\\\\(\\\\s*)([A-Z][A-Za-z]*)(\\\\s+)([a-z][A-Za-z_']*)(\\\\)\\\\s*)(=>)\"},{include:\"#pragma\"},{token:\"keyword.other.arrow.haskell\",regex:\"->\"},{token:\"keyword.other.big-arrow.haskell\",regex:\"=>\"},{token:\"support.type.prelude.haskell\",regex:\"\\\\b(?:Int(?:eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(?:Error)?)\\\\b\"},{token:\"variable.other.generic-type.haskell\",regex:\"\\\\b[a-z][a-zA-Z0-9_']*\\\\b\"},{token:\"storage.type.haskell\",regex:\"\\\\b[A-Z][a-zA-Z0-9_']*\\\\b\"},{token:\"support.constant.unit.haskell\",regex:\"\\\\(\\\\)\"},{include:\"#comments\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"hs\"],keyEquivalent:\"^~H\",name:\"Haskell\",scopeName:\"source.haskell\"},r.inherits(s,i),t.HaskellHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/haskell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haskell_highlight_rules\").HaskellHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment=null,this.$id=\"ace/mode/haskell\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-haskell_cabal.js",
    "content": "ace.define(\"ace/mode/haskell_cabal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"^\\\\s*--.*$\"},{token:[\"keyword\"],regex:/^(\\s*\\w.*?)(:(?:\\s+|$))/},{token:\"constant.numeric\",regex:/[\\d_]+(?:(?:[\\.\\d_]*)?)/},{token:\"constant.language.boolean\",regex:\"(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"},{token:\"markup.heading\",regex:/^(\\w.*)$/}]}};r.inherits(s,i),t.CabalHighlightRules=s}),ace.define(\"ace/mode/folding/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.isHeading=function(e,t){var n=\"markup.heading\",r=e.getTokens(t)[0];return t==0||r&&r.type.lastIndexOf(n,0)===0},this.getFoldWidget=function(e,t,n){if(this.isHeading(e,n))return\"start\";if(t===\"markbeginend\"&&!/^\\s*$/.test(e.getLine(n))){var r=e.getLength();while(++n<r)if(!/^\\s*$/.test(e.getLine(n)))break;if(n==r||this.isHeading(e,n))return\"end\"}return\"\"},this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(this.isHeading(e,n)){while(++n<o)if(this.isHeading(e,n)){n--;break}a=n;if(a>u)while(a>u&&/^\\s*$/.test(e.getLine(a)))a--;if(a>u){var f=e.getLine(a).length;return new s(u,i,a,f)}}else if(this.getFoldWidget(e,t,n)===\"end\"){var a=n,f=e.getLine(a).length;while(--n>=0)if(this.isHeading(e,n))break;var r=e.getLine(n),i=r.length;return new s(n,i,a,f)}}}.call(o.prototype)}),ace.define(\"ace/mode/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_cabal_highlight_rules\",\"ace/mode/folding/haskell_cabal\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haskell_cabal_highlight_rules\").CabalHighlightRules,o=e(\"./folding/haskell_cabal\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment=null,this.$id=\"ace/mode/haskell_cabal\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-haxe.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/haxe_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std\",t=\"null|true|false\",n=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({<]\"},{token:\"paren.rparen\",regex:\"[\\\\])}>]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.HaxeHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/haxe\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haxe_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haxe_highlight_rules\").HaxeHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/haxe\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-hjson.js",
    "content": "ace.define(\"ace/mode/hjson_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comments\"},{include:\"#rootObject\"},{include:\"#value\"}],\"#array\":[{token:\"paren.lparen\",regex:/\\[/,push:[{token:\"paren.rparen\",regex:/\\]/,next:\"pop\"},{include:\"#value\"},{include:\"#comments\"},{token:\"text\",regex:/,|$/},{token:\"invalid.illegal\",regex:/[^\\s\\]]/},{defaultToken:\"array\"}]}],\"#comments\":[{token:[\"comment.punctuation\",\"comment.line\"],regex:/(#)(.*$)/},{token:\"comment.punctuation\",regex:/\\/\\*/,push:[{token:\"comment.punctuation\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block\"}]},{token:[\"comment.punctuation\",\"comment.line\"],regex:/(\\/\\/)(.*$)/}],\"#constant\":[{token:\"constant\",regex:/\\b(?:true|false|null)\\b/}],\"#keyname\":[{token:\"keyword\",regex:/(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*(?=:)/}],\"#mstring\":[{token:\"string\",regex:/'''/,push:[{token:\"string\",regex:/'''/,next:\"pop\"},{defaultToken:\"string\"}]}],\"#number\":[{token:\"constant.numeric\",regex:/-?(?:0|[1-9]\\d*)(?:(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)?/,comment:\"handles integer and decimal numbers\"}],\"#object\":[{token:\"paren.lparen\",regex:/\\{/,push:[{token:\"paren.rparen\",regex:/\\}/,next:\"pop\"},{include:\"#keyname\"},{include:\"#value\"},{token:\"text\",regex:/:/},{token:\"text\",regex:/,/},{defaultToken:\"paren\"}]}],\"#rootObject\":[{token:\"paren\",regex:/(?=\\s*(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*:)/,push:[{token:\"paren.rparen\",regex:/---none---/,next:\"pop\"},{include:\"#keyname\"},{include:\"#value\"},{token:\"text\",regex:/:/},{token:\"text\",regex:/,/},{defaultToken:\"paren\"}]}],\"#string\":[{token:\"string\",regex:/\"/,push:[{token:\"string\",regex:/\"/,next:\"pop\"},{token:\"constant.language.escape\",regex:/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/},{token:\"invalid.illegal\",regex:/\\\\./},{defaultToken:\"string\"}]}],\"#ustring\":[{token:\"string\",regex:/\\b[^:,0-9\\-\\{\\[\\}\\]\\s].*$/}],\"#value\":[{include:\"#constant\"},{include:\"#number\"},{include:\"#string\"},{include:\"#array\"},{include:\"#object\"},{include:\"#comments\"},{include:\"#mstring\"},{include:\"#ustring\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"hjson\"],foldingStartMarker:\"(?x:     # turn on extended mode\\n              ^    # a line beginning with\\n              \\\\s*    # some optional space\\n              [{\\\\[]  # the start of an object or array\\n              (?!    # but not followed by\\n              .*   # whatever\\n              [}\\\\]]  # and the close of an object or array\\n              ,?   # an optional comma\\n              \\\\s*  # some optional space\\n              $    # at the end of the line\\n              )\\n              |    # ...or...\\n              [{\\\\[]  # the start of an object or array\\n              \\\\s*    # some optional space\\n              $    # at the end of the line\\n            )\",foldingStopMarker:\"(?x:   # turn on extended mode\\n             ^    # a line beginning with\\n             \\\\s*  # some optional space\\n             [}\\\\]]  # and the close of an object or array\\n             )\",keyEquivalent:\"^~J\",name:\"Hjson\",scopeName:\"source.hjson\"},r.inherits(s,i),t.HjsonHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/hjson\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/hjson_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./hjson_highlight_rules\").HjsonHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/hjson\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-html.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v});                (function() {\n                    ace.require([\"ace/mode/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-html_elixir.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"meta.module.elixir\",\"keyword.control.module.elixir\",\"meta.module.elixir\",\"entity.name.type.module.elixir\"],regex:\"^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc (?:~[a-z])?\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc ~[A-Z]\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc (?:~[a-z])?'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc ~[A-Z]'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.false\",regex:\"@(?:module|type)?doc false\",comment:\"@doc false is treated as documentation\"},{token:\"comment.documentation.string\",regex:'@(?:module|type)?doc \"',push:[{token:\"comment.documentation.string\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.string\"}],comment:\"@doc with string is treated as documentation\"},{token:\"keyword.control.elixir\",regex:\"\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\"},{token:\"keyword.operator.elixir\",regex:\"\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b\",comment:\" as above, just doesn't need a 'end' and does a logic operation\"},{token:\"constant.language.elixir\",regex:\"\\\\b(?:nil|true|false)\\\\b(?![?!])\"},{token:\"variable.language.elixir\",regex:\"\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.readwrite.module.elixir\"],regex:\"(@)([a-zA-Z_]\\\\w*)\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.anonymous.elixir\"],regex:\"(&)(\\\\d*)\"},{token:\"variable.other.constant.elixir\",regex:\"\\\\b[A-Z]\\\\w*\\\\b\"},{token:\"constant.numeric.elixir\",regex:\"\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\"},{token:\"punctuation.definition.constant.elixir\",regex:\":'\",push:[{token:\"punctuation.definition.constant.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.single-quoted.elixir\"}]},{token:\"punctuation.definition.constant.elixir\",regex:':\"',push:[{token:\"punctuation.definition.constant.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.double-quoted.elixir\"}]},{token:\"punctuation.definition.string.begin.elixir\",regex:\"(?:''')\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>''')\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"^\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.heredoc.elixir\"}],comment:\"Single-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.elixir\"}],comment:\"single quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'(?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'(?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'\"',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.elixir\"}],comment:\"double quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[a-z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[a-z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[A-Z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[A-Z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:[\"punctuation.definition.constant.elixir\",\"constant.other.symbol.elixir\"],regex:\"(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)\",comment:\"symbols\"},{token:\"punctuation.definition.constant.elixir\",regex:\"(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)\",comment:\"symbols\"},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(#)(.*)\"},{token:\"constant.numeric.elixir\",regex:\"\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",comment:'\\n\t\t\tmatches questionmark-letters.\\n\\n\t\t\texamples (1st alternation = hex):\\n\t\t\t?\\\\x1     ?\\\\x61\\n\\n\t\t\texamples (2rd alternation = escaped):\\n\t\t\t?\\\\n      ?\\\\b\\n\\n\t\t\texamples (3rd alternation = normal):\\n\t\t\t?a       ?A       ?0 \\n\t\t\t?*       ?\"       ?( \\n\t\t\t?.       ?#\\n\t\t\t\\n\t\t\tthe negative lookbehind prevents against matching\\n\t\t\tp(42.tainted?)\\n\t\t\t'},{token:\"keyword.operator.assignment.augmented.elixir\",regex:\"\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=\"},{token:\"keyword.operator.comparison.elixir\",regex:\"===?|!==?|<=?|>=?\"},{token:\"keyword.operator.bitwise.elixir\",regex:\"\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}\"},{token:\"keyword.operator.logical.elixir\",regex:\"!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\",originalRegex:\"(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\"},{token:\"keyword.operator.arithmetic.elixir\",regex:\"\\\\*|\\\\+|\\\\-|/\"},{token:\"keyword.operator.other.elixir\",regex:\"\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>\"},{token:\"keyword.operator.assignment.elixir\",regex:\"=\"},{token:\"punctuation.separator.other.elixir\",regex:\":\"},{token:\"punctuation.separator.statement.elixir\",regex:\"\\\\;\"},{token:\"punctuation.separator.object.elixir\",regex:\",\"},{token:\"punctuation.separator.method.elixir\",regex:\"\\\\.\"},{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{|\\\\}\"},{token:\"punctuation.section.array.elixir\",regex:\"\\\\[|\\\\]\"},{token:\"punctuation.section.function.elixir\",regex:\"\\\\(|\\\\)\"}],\"#escaped_char\":[{token:\"constant.character.escape.elixir\",regex:\"\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)\"}],\"#interpolated_elixir\":[{token:[\"source.elixir.embedded.source\",\"source.elixir.embedded.source.empty\"],regex:\"(#\\\\{)(\\\\})\"},{todo:{token:\"punctuation.section.embedded.elixir\",regex:\"#\\\\{\",push:[{token:\"punctuation.section.embedded.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"},{include:\"$self\"},{defaultToken:\"source.elixir.embedded.source\"}]}}],\"#nest_curly_and_self\":[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{\",push:[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"}]},{include:\"$self\"}],\"#regex_sub\":[{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{token:[\"punctuation.definition.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"punctuation.definition.arbitrary-repitition.elixir\"],regex:\"(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})\"},{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\[(?:\\\\^?\\\\])?\",push:[{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\]\",next:\"pop\"},{include:\"#escaped_char\"},{defaultToken:\"string.regexp.character-class.elixir\"}]},{token:\"punctuation.definition.group.elixir\",regex:\"\\\\(\",push:[{token:\"punctuation.definition.group.elixir\",regex:\"\\\\)\",next:\"pop\"},{include:\"#regex_sub\"},{defaultToken:\"string.regexp.group.elixir\"}]},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)\",originalRegex:\"(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$\",comment:\"We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.\"}]},this.normalizeRules()};s.metaData={comment:\"Textmate bundle for Elixir Programming Language.\",fileTypes:[\"ex\",\"exs\"],firstLineMatch:\"^#!/.*\\\\belixir\",foldingStartMarker:\"(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$\",foldingStopMarker:\"^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)\",keyEquivalent:\"^~E\",name:\"Elixir\",scopeName:\"source.elixir\"},r.inherits(s,i),t.ElixirHighlightRules=s}),ace.define(\"ace/mode/html_elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/elixir_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./elixir_highlight_rules\").ElixirHighlightRules,o=function(){i.call(this);var e=[{regex:\"<%%|%%>\",token:\"constant.language.escape\"},{token:\"comment.start.eex\",regex:\"<%#\",push:[{token:\"comment.end.eex\",regex:\"%>\",next:\"pop\",defaultToken:\"comment\"}]},{token:\"support.elixir_tag\",regex:\"<%+(?!>)[-=]?\",push:\"elixir-start\"}],t=[{token:\"support.elixir_tag\",regex:\"%>\",next:\"pop\"},{token:\"comment\",regex:\"#(?:[^%]|%[^>])*\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(s,\"elixir-\",t,[\"start\"]),this.normalizeRules()};r.inherits(o,i),t.HtmlElixirHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./elixir_highlight_rules\").ElixirHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/elixir\"}.call(u.prototype),t.Mode=u}),ace.define(\"ace/mode/html_elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_elixir_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/elixir\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_elixir_highlight_rules\").HtmlElixirHighlightRules,s=e(\"./html\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./elixir\").Mode,f=function(){s.call(this),this.HighlightRules=i,this.createModeDelegates({\"js-\":o,\"css-\":u,\"elixir-\":a})};r.inherits(f,s),function(){this.$id=\"ace/mode/html_elixir\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-html_ruby.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),ace.define(\"ace/mode/html_ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=function(){i.call(this);var e=[{regex:\"<%%|%%>\",token:\"constant.language.escape\"},{token:\"comment.start.erb\",regex:\"<%#\",push:[{token:\"comment.end.erb\",regex:\"%>\",next:\"pop\",defaultToken:\"comment\"}]},{token:\"support.ruby_tag\",regex:\"<%+(?!>)[-=]?\",push:\"ruby-start\"}],t=[{token:\"support.ruby_tag\",regex:\"%>\",next:\"pop\"},{token:\"comment\",regex:\"#(?:[^%]|%[^>])*\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(s,\"ruby-\",t,[\"start\"]),this.normalizeRules()};r.inherits(o,i),t.HtmlRubyHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/html_ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_ruby_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_ruby_highlight_rules\").HtmlRubyHighlightRules,s=e(\"./html\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./ruby\").Mode,f=function(){s.call(this),this.HighlightRules=i,this.createModeDelegates({\"js-\":o,\"css-\":u,\"ruby-\":a})};r.inherits(f,s),function(){this.$id=\"ace/mode/html_ruby\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-ini.js",
    "content": "ace.define(\"ace/mode/ini_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=\"\\\\\\\\(?:[\\\\\\\\0abtrn;#=:]|x[a-fA-F\\\\d]{4})\",o=function(){this.$rules={start:[{token:\"punctuation.definition.comment.ini\",regex:\"#.*\",push_:[{token:\"comment.line.number-sign.ini\",regex:\"$|^\",next:\"pop\"},{defaultToken:\"comment.line.number-sign.ini\"}]},{token:\"punctuation.definition.comment.ini\",regex:\";.*\",push_:[{token:\"comment.line.semicolon.ini\",regex:\"$|^\",next:\"pop\"},{defaultToken:\"comment.line.semicolon.ini\"}]},{token:[\"keyword.other.definition.ini\",\"text\",\"punctuation.separator.key-value.ini\"],regex:\"\\\\b([a-zA-Z0-9_.-]+)\\\\b(\\\\s*)(=)\"},{token:[\"punctuation.definition.entity.ini\",\"constant.section.group-title.ini\",\"punctuation.definition.entity.ini\"],regex:\"^(\\\\[)(.*?)(\\\\])\"},{token:\"punctuation.definition.string.begin.ini\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.ini\",regex:\"'\",next:\"pop\"},{token:\"constant.language.escape\",regex:s},{defaultToken:\"string.quoted.single.ini\"}]},{token:\"punctuation.definition.string.begin.ini\",regex:'\"',push:[{token:\"constant.language.escape\",regex:s},{token:\"punctuation.definition.string.end.ini\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.ini\"}]}]},this.normalizeRules()};o.metaData={fileTypes:[\"ini\",\"conf\"],keyEquivalent:\"^~I\",name:\"Ini\",scopeName:\"source.ini\"},r.inherits(o,i),t.IniHighlightRules=o}),ace.define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/,this.getFoldWidgetRange=function(e,t,n){var r=this.foldingStartMarker,s=e.getLine(n),o=s.match(r);if(!o)return;var u=o[1]+\".\",a=s.length,f=e.getLength(),l=n,c=n;while(++n<f){s=e.getLine(n);if(/^\\s*$/.test(s))continue;o=s.match(r);if(o&&o[1].lastIndexOf(u,0)!==0)break;c=n}if(c>l){var h=e.getLine(c).length;return new i(l,a,c,h)}}}.call(o.prototype)}),ace.define(\"ace/mode/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ini_highlight_rules\",\"ace/mode/folding/ini\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ini_highlight_rules\").IniHighlightRules,o=e(\"./folding/ini\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.blockComment=null,this.$id=\"ace/mode/ini\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-io.js",
    "content": "ace.define(\"ace/mode/io_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"text\",\"meta.empty-parenthesis.io\"],regex:\"(\\\\()(\\\\))\",comment:\"we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob\"},{token:[\"text\",\"meta.comma-parenthesis.io\"],regex:\"(\\\\,)(\\\\))\",comment:\"We want to do the same for ,) -- Seckar; same as above -- Rob\"},{token:\"keyword.control.io\",regex:\"\\\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\\\b\"},{token:\"punctuation.definition.comment.io\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.io\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.io\"}]},{token:\"punctuation.definition.comment.io\",regex:\"//\",push:[{token:\"comment.line.double-slash.io\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-slash.io\"}]},{token:\"punctuation.definition.comment.io\",regex:\"#\",push:[{token:\"comment.line.number-sign.io\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.number-sign.io\"}]},{token:\"variable.language.io\",regex:\"\\\\b(?:self|sender|target|proto|protos|parent)\\\\b\",comment:\"I wonder if some of this isn't variable.other.language? --Allan; scoping this as variable.language to match Objective-C's handling of 'self', which is inconsistent with C++'s handling of 'this' but perhaps intentionally so -- Rob\"},{token:\"keyword.operator.io\",regex:\"<=|>=|=|:=|\\\\*|\\\\||\\\\|\\\\||\\\\+|-|/|&|&&|>|<|\\\\?|@|@@|\\\\b(?:and|or)\\\\b\"},{token:\"constant.other.io\",regex:\"\\\\bGL[\\\\w_]+\\\\b\"},{token:\"support.class.io\",regex:\"\\\\b[A-Z](?:\\\\w+)?\\\\b\"},{token:\"support.function.io\",regex:\"\\\\b(?:clone|call|init|method|list|vector|block|\\\\w+(?=\\\\s*\\\\())\\\\b\"},{token:\"support.function.open-gl.io\",regex:\"\\\\bgl(?:u|ut)?[A-Z]\\\\w+\\\\b\"},{token:\"punctuation.definition.string.begin.io\",regex:'\"\"\"',push:[{token:\"punctuation.definition.string.end.io\",regex:'\"\"\"',next:\"pop\"},{token:\"constant.character.escape.io\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.triple.io\"}]},{token:\"punctuation.definition.string.begin.io\",regex:'\"',push:[{token:\"punctuation.definition.string.end.io\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.io\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.io\"}]},{token:\"constant.numeric.io\",regex:\"\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"variable.other.global.io\",regex:\"Lobby\\\\b\"},{token:\"constant.language.io\",regex:\"\\\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\\\b\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"io\"],keyEquivalent:\"^~I\",name:\"Io\",scopeName:\"source.io\"},r.inherits(s,i),t.IoHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/io\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/io_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./io_highlight_rules\").IoHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/io\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-jack.js",
    "content": "ace.define(\"ace/mode/jack_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"string\",regex:'\"',next:\"string2\"},{token:\"string\",regex:\"'\",next:\"string1\"},{token:\"constant.numeric\",regex:\"-?0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"(?:0|[-+]?[1-9][0-9]*)\\\\b\"},{token:\"constant.binary\",regex:\"<[0-9A-Fa-f][0-9A-Fa-f](\\\\s+[0-9A-Fa-f][0-9A-Fa-f])*>\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"constant.language.null\",regex:\"null\\\\b\"},{token:\"storage.type\",regex:\"(?:Integer|Boolean|Null|String|Buffer|Tuple|List|Object|Function|Coroutine|Form)\\\\b\"},{token:\"keyword\",regex:\"(?:return|abort|vars|for|delete|in|is|escape|exec|split|and|if|elif|else|while)\\\\b\"},{token:\"language.builtin\",regex:\"(?:lines|source|parse|read-stream|interval|substr|parseint|write|print|range|rand|inspect|bind|i-values|i-pairs|i-map|i-filter|i-chunk|i-all\\\\?|i-any\\\\?|i-collect|i-zip|i-merge|i-each)\\\\b\"},{token:\"comment\",regex:\"--.*$\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"storage.form\",regex:\"@[a-z]+\"},{token:\"constant.other.symbol\",regex:\":+[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?\"},{token:\"variable\",regex:\"[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?\"},{token:\"keyword.operator\",regex:\"\\\\|\\\\||\\\\^\\\\^|&&|!=|==|<=|<|>=|>|\\\\+|-|\\\\*|\\\\/|\\\\^|\\\\%|\\\\#|\\\\!\"},{token:\"text\",regex:\"\\\\s+\"}],string1:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/},{token:\"string\",regex:\"[^'\\\\\\\\]+\"},{token:\"string\",regex:\"'\",next:\"start\"},{token:\"string\",regex:\"\",next:\"start\"}],string2:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:'\"',next:\"start\"},{token:\"string\",regex:\"\",next:\"start\"}]}};r.inherits(s,i),t.JackHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/jack\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jack_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jack_highlight_rules\").JackHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"--\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e==\"start\"){var i=t.match(/^.*[\\{\\(\\[]\\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/jack\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-jade.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(e){return\"(?:[^\"+s.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},f=function(){u.call(this);var e={token:\"support.function\",regex:/^\\s*(```+[^`]*|~~~+[^~]*)$/,onMatch:function(e,t,n,i){var s=e.match(/^(\\s*)([`~]+)(.*)/),o=/[\\w-]+|$/.exec(s[3])[0];return r[o]||(o=\"\"),n.unshift(\"githubblock\",[],[s[1],s[2],o],t),this.token},next:\"githubblock\"},t=[{token:\"support.function\",regex:\".*\",onMatch:function(e,t,n,i){var s=n[1],o=n[2][0],u=n[2][1],a=n[2][2],f=/^(\\s*)(`+|~+)\\s*$/.exec(e);if(f&&f[1].length<o.length+3&&f[2].length>=u.length&&f[2][0]==u[0])return n.splice(0,3),this.next=n.shift(),this.token;this.next=\"\";if(a&&r[a]){var l=r[a].getTokenizer().getLineTokens(e,s.slice(0));return n[1]=l.state,l.tokens}return this.token}}];this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s|$)/,next:\"header\"},e,{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\s*\\\\[)(\"+a(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\!?\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+a('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},e,{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:t}),this.normalizeRules()};i.inherits(f,o),t.MarkdownHighlightRules=f}),ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./css_highlight_rules\"),u=function(){var e=i.arrayToMap(o.supportType.split(\"|\")),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unquote\".split(\"|\")),n=i.arrayToMap(o.supportConstant.split(\"|\")),r=i.arrayToMap(o.supportConstantColor.split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),u=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":u.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),ace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./css_highlight_rules\"),o=function(){var e=\"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|or|and|when|not\",t=e.split(\"|\"),n=s.supportType.split(\"|\"),r=this.createKeywordMapper({\"support.constant\":s.supportConstant,keyword:e,\"support.constant.color\":s.supportConstantColor,\"support.constant.fonts\":s.supportConstantFonts},\"identifier\",!0),i=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+i+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:i},{token:[\"support.function\",\"paren.lparen\",\"string\",\"paren.rparen\"],regex:\"(url)(\\\\()(.*)(\\\\))\"},{token:[\"support.function\",\"paren.lparen\"],regex:\"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"},{token:function(e){return t.indexOf(e.toLowerCase())>-1?\"keyword\":\"variable\"},regex:\"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"},{token:\"variable\",regex:\"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"},{token:function(e,t){return n.indexOf(e.toLowerCase())>-1?[\"support.type.property\",\"text\"]:[\"support.type.unknownProperty\",\"text\"]},regex:\"([a-z0-9-_]+)(\\\\s*:)\"},{token:\"keyword\",regex:\"&\"},{token:r,regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z_][a-z0-9-_]*\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(o,i),t.LessHighlightRules=o}),ace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=\"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\",t=\"this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|own|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes|yield|export|import|default\",n=\"true|false|null|undefined|NaN|Infinity\",r=\"case|const|function|var|void|with|enum|implements|interface|let|package|private|protected|public|static\",i=\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\",s=\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|\",o=\"window|arguments|prototype|document\",u=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"invalid.illegal\":r,\"language.support.class\":i,\"language.support.function\":s,\"variable.language\":o},\"identifier\"),a={token:[\"paren.lparen\",\"variable.parameter\",\"paren.rparen\",\"text\",\"storage.type\"],regex:/(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source},f=/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"},{stateName:\"qdoc\",token:\"string\",regex:\"'''\",next:[{token:\"string\",regex:\"'''\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqdoc\",token:\"string\",regex:'\"\"\"',next:[{token:\"string\",regex:'\"\"\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qstring\",token:\"string\",regex:\"'\",next:[{token:\"string\",regex:\"'\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqstring\",token:\"string.start\",regex:'\"',next:[{token:\"string.end\",regex:'\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"js\",token:\"string\",regex:\"`\",next:[{token:\"string\",regex:\"`\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{regex:\"[{}]\",onMatch:function(e,t,n){this.next=\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift()||\"\";if(this.next.indexOf(\"string\")!=-1)return\"paren.string\"}return\"paren\"}},{token:\"string.regex\",regex:\"///\",next:\"heregex\"},{token:\"string.regex\",regex:/(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/},{token:\"comment\",regex:\"###(?!#)\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:[\"punctuation.operator\",\"text\",\"identifier\"],regex:\"(\\\\.)(\\\\s*)(\"+r+\")\"},{token:\"punctuation.operator\",regex:\"\\\\.{1,3}\"},{token:[\"keyword\",\"text\",\"language.support.class\",\"text\",\"keyword\",\"text\",\"language.support.class\"],regex:\"(class)(\\\\s+)(\"+e+\")(?:(\\\\s+)(extends)(\\\\s+)(\"+e+\"))?\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\"].concat(a.token),regex:\"(\"+e+\")(\\\\s*)([=:])(\\\\s*)\"+a.regex},a,{token:\"variable\",regex:\"@(?:\"+e+\")?\"},{token:u,regex:e},{token:\"punctuation.operator\",regex:\"\\\\,|\\\\.\"},{token:\"storage.type\",regex:\"[\\\\-=]>\"},{token:\"keyword.operator\",regex:\"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"},{token:\"paren.lparen\",regex:\"[({[]\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?///[imgy]{0,4}\",next:\"start\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{token:\"string.regex\",regex:\"\\\\S+\"}],comment:[{token:\"comment\",regex:\"###\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),ace.define(\"ace/mode/jade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/scss_highlight_rules\",\"ace/mode/less_highlight_rules\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){\"use strict\";function l(e,t){return{token:\"entity.name.function.jade\",regex:\"^\\\\s*\\\\:\"+e,next:t+\"start\"}}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,o=e(\"./scss_highlight_rules\").ScssHighlightRules,u=e(\"./less_highlight_rules\").LessHighlightRules,a=e(\"./coffee_highlight_rules\").CoffeeHighlightRules,f=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,c=function(){var e=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={start:[{token:\"keyword.control.import.include.jade\",regex:\"\\\\s*\\\\binclude\\\\b\"},{token:\"keyword.other.doctype.jade\",regex:\"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"},{onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/^\\s*\\/\\//,next:\"comment_block\"},l(\"markdown\",\"markdown-\"),l(\"sass\",\"sass-\"),l(\"less\",\"less-\"),l(\"coffee\",\"coffee-\"),{token:[\"storage.type.function.jade\",\"entity.name.function.jade\",\"punctuation.definition.parameters.begin.jade\",\"variable.parameter.function.jade\",\"punctuation.definition.parameters.end.jade\"],regex:\"^(\\\\s*mixin)( [\\\\w\\\\-]+)(\\\\s*\\\\()(.*?)(\\\\))\"},{token:[\"storage.type.function.jade\",\"entity.name.function.jade\"],regex:\"^(\\\\s*mixin)( [\\\\w\\\\-]+)\"},{token:\"source.js.embedded.jade\",regex:\"^\\\\s*(?:-|=|!=)\",next:\"js-start\"},{token:\"string.interpolated.jade\",regex:\"[#!]\\\\{[^\\\\}]+\\\\}\"},{token:\"meta.tag.any.jade\",regex:/^\\s*(?!\\w+:)(?:[\\w-]+|(?=\\.|#)])/,next:\"tag_single\"},{token:\"suport.type.attribute.id.jade\",regex:\"#\\\\w+\"},{token:\"suport.type.attribute.class.jade\",regex:\"\\\\.\\\\w+\"},{token:\"punctuation\",regex:\"\\\\s*(?:\\\\()\",next:\"tag_attributes\"}],comment_block:[{regex:/^\\s*(?:\\/\\/)?/,onMatch:function(e,t,n){return e.length<=n[1]?e.slice(-1)==\"/\"?(n[1]=e.length-2,this.next=\"\",\"comment\"):(n.shift(),n.shift(),this.next=n.shift(),\"text\"):(this.next=\"\",\"comment\")},next:\"start\"},{defaultToken:\"comment\"}],tag_single:[{token:\"entity.other.attribute-name.class.jade\",regex:\"\\\\.[\\\\w-]+\"},{token:\"entity.other.attribute-name.id.jade\",regex:\"#[\\\\w-]+\"},{token:[\"text\",\"punctuation\"],regex:\"($)|((?!\\\\.|#|=|-))\",next:\"start\"}],tag_attributes:[{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:[\"entity.other.attribute-name.jade\",\"punctuation\"],regex:\"([a-zA-Z:\\\\.-]+)(=)?\",next:\"attribute_strings\"},{token:\"punctuation\",regex:\"\\\\)\",next:\"start\"}],attribute_strings:[{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:\"(?=\\\\S)\",next:\"tag_attributes\"}],qqstring:[{token:\"constant.language.escape\",regex:e},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"tag_attributes\"}],qstring:[{token:\"constant.language.escape\",regex:e},{token:\"string\",regex:\"[^'\\\\\\\\]+\"},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"tag_attributes\"}]},this.embedRules(f,\"js-\",[{token:\"text\",regex:\".$\",next:\"start\"}])};r.inherits(c,i),t.JadeHighlightRules=c}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/jade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jade_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jade_highlight_rules\").JadeHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/jade\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-java.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|var\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{regex:\"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",token:\"keyword\",next:[{regex:\"{\",token:\"paren.lparen\",next:[{regex:\"}\",token:\"paren.rparen\",next:\"start\"},{regex:\"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",token:\"keyword\"}]},{token:\"text\",regex:\"\\\\s+\"},{token:\"identifier\",regex:\"\\\\w+\"},{token:\"punctuation.operator\",regex:\".\"},{token:\"text\",regex:\"\\\\s+\"},{regex:\"\",next:\"start\"}]},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.JavaHighlightRules=o}),ace.define(\"ace/mode/folding/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./cstyle\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.importRegex=/^import /,this.getCStyleFoldWidget=this.getFoldWidget,this.getFoldWidget=function(e,t,n){if(t===\"markbegin\"){var r=e.getLine(n);if(this.importRegex.test(r))if(n==0||!this.importRegex.test(e.getLine(n-1)))return\"start\"}return this.getCStyleFoldWidget(e,t,n)},this.getCstyleFoldWidgetRange=this.getFoldWidgetRange,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n),o=i.match(this.importRegex);if(!o||t!==\"markbegin\")return this.getCstyleFoldWidgetRange(e,t,n,r);var u=o[0].length,a=e.getLength(),f=n,l=n;while(++n<a){var i=e.getLine(n);if(i.match(/^\\s*$/))continue;if(!i.match(this.importRegex))break;l=n}if(l>f){var c=e.getLine(l).length;return new s(f,u,l,c)}}}.call(o.prototype)}),ace.define(\"ace/mode/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/java_highlight_rules\",\"ace/mode/folding/java\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./java_highlight_rules\").JavaHighlightRules,o=e(\"./folding/java\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/java\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-javascript.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-json.js",
    "content": "ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"text\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./json_highlight_rules\").JsonHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e==\"start\"){var i=t.match(/^.*[\\{\\(\\[]\\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/json_worker\",\"JsonWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/json\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-jsoniq.js",
    "content": "ace.define(\"ace/mode/xquery/jsoniq_lexer\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=function r(t,n,i){function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(s)return s(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return o(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var s=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)o(i[u]);return o(i[0])}({\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(e,t,n){var r=n.JSONiqTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 80:f(80);break;case 94:f(94);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 143:f(143);break;case 150:f(150);break;case 163:f(163);break;case 183:f(183);break;case 189:f(189);break;case 214:f(214);break;case 224:f(224);break;case 225:f(225);break;case 241:f(241);break;case 242:f(242);break;case 251:f(251);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 17:f(17);break;case 68:f(68);break;case 71:f(71);break;case 72:f(72);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 91:f(91);break;case 92:f(92);break;case 101:f(101);break;case 103:f(103);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 111:f(111);break;case 116:f(116);break;case 117:f(117);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 127:f(127);break;case 129:f(129);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 151:f(151);break;case 157:f(157);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 168:f(168);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 180:f(180);break;case 182:f(182);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 216:f(216);break;case 217:f(217);break;case 218:f(218);break;case 222:f(222);break;case 227:f(227);break;case 233:f(233);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 248:f(248);break;case 252:f(252);break;case 254:f(254);break;case 258:f(258);break;case 264:f(264);break;case 268:f(268);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 260:f(260);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 28:f(28);break;case 68:f(68);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 92:f(92);break;case 103:f(103);break;case 107:f(107);break;case 111:f(111);break;case 116:f(116);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 218:f(218);break;case 222:f(222);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 264:f(264);break;case 268:f(268);break;case 71:f(71);break;case 72:f(72);break;case 80:f(80);break;case 91:f(91);break;case 94:f(94);break;case 101:f(101);break;case 106:f(106);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 117:f(117);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 127:f(127);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 143:f(143);break;case 150:f(150);break;case 151:f(151);break;case 157:f(157);break;case 163:f(163);break;case 168:f(168);break;case 180:f(180);break;case 182:f(182);break;case 183:f(183);break;case 189:f(189);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 214:f(214);break;case 216:f(216);break;case 217:f(217);break;case 224:f(224);break;case 225:f(225);break;case 227:f(227);break;case 233:f(233);break;case 241:f(241);break;case 242:f(242);break;case 248:f(248);break;case 251:f(251);break;case 254:f(254);break;case 258:f(258);break;case 260:f(260);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=30)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 58:f(58);break;case 57:f(57);break;case 59:f(59);break;case 43:f(43);break;case 45:f(45);break;case 44:f(44);break;case 37:f(37);break;case 41:f(41);break;case 277:f(277);break;case 274:f(274);break;case 42:f(42);break;case 46:f(46);break;case 52:f(52);break;case 65:f(65);break;case 66:f(66);break;case 49:f(49);break;case 51:f(51);break;case 56:f(56);break;case 54:f(54);break;case 36:f(36);break;case 276:f(276);break;case 40:f(40);break;case 5:f(5);break;case 4:f(4);break;case 6:f(6);break;case 15:f(15);break;case 16:f(16);break;case 18:f(18);break;case 19:f(19);break;case 20:f(20);break;case 8:f(8);break;case 9:f(9);break;case 7:f(7);break;case 35:f(35);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 61:f(61);break;case 53:f(53);break;case 29:f(29);break;case 60:f(60);break;case 37:f(37);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 25:f(25);break;case 9:f(9);break;case 10:f(10);break;case 58:f(58);break;case 57:f(57);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;default:f(35)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 23:f(23);break;case 27:f(27);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 22:f(22);break;case 26:f(26);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 14:f(14);break;case 67:f(67);break;default:f(35)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 12:f(12);break;case 50:f(50);break;default:f(35)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 13:f(13);break;case 62:f(62);break;case 63:f(63);break;default:f(35)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 11:f(11);break;case 38:f(38);break;case 39:f(39);break;default:f(35)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 55:f(55);break;case 44:f(44);break;case 32:f(32);break;default:f(35)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(6);switch(y){case 33:f(33);break;case 34:f(34);break;case 55:f(55);break;case 44:f(44);break;default:f(35)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(5);switch(y){case 3:f(3);break;case 2:f(2);break;case 1:f(1);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 21:f(21);break;case 31:f(31);break;case 23:f(23);break;case 24:f(24);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<279;i+=32){var s=i,o=(i>>5)*2066+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,37,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37,37,37,37,37,37,37,37,37,37,37,37,31,31,37,37,37,37,37,37,37,66,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,37,31,37,31,31,37],r.INITIAL=[1,2,49155,57348,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,17408,19288,17439,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19074,36169,17439,36866,17466,36890,36866,22314,19105,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22182,19288,19121,36866,17466,18345,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19273,19552,19304,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19332,17423,19363,36866,17466,17537,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,18614,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19391,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19427,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36154,19288,19457,36866,17466,17740,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22780,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22375,22197,18469,36866,17466,36890,36866,21991,24018,22987,17556,17575,22288,17486,17509,17525,18373,21331,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,19485,19501,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19537,22390,19568,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19596,19611,19457,36866,17466,36890,36866,18246,19627,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22242,20553,19457,36866,17466,36890,36866,18648,30477,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36472,19288,19457,36866,17466,17809,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,21770,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19643,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19672,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20538,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,17975,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22345,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19726,19742,21529,24035,23112,26225,23511,27749,27397,24035,34360,24035,24036,23114,35166,23114,23114,19758,23511,35247,23511,23511,28447,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,19821,23511,23511,23511,23511,23512,19441,36539,24035,24035,24035,24035,19846,19869,23114,23114,23114,28618,32187,19892,23511,23511,23511,34585,20402,36647,24035,24035,24036,23114,33757,23114,23114,23029,20271,23511,27070,23511,23511,30562,24035,24035,29274,26576,23114,23114,31118,23036,29695,23511,23511,32431,23634,30821,24035,23110,19913,23114,23467,31261,23261,34299,19932,24035,32609,19965,35389,19984,27689,19830,29391,29337,20041,22643,35619,33728,20062,20121,20166,35100,26145,20211,23008,19876,20208,20227,25670,20132,26578,27685,20141,20243,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36094,19288,19457,36866,17466,21724,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22735,19552,20287,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22750,19288,21529,24035,23112,28056,23511,29483,28756,24035,24035,24035,24036,23114,23114,23114,23114,20327,23511,23511,23511,23511,31156,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,20371,23511,23511,23511,23511,27443,20395,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,29457,29700,23511,23511,23511,23511,33444,20402,24035,24035,24035,24036,23114,23114,23114,23114,28350,20421,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,20447,20475,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20523,22257,20569,20783,21715,17603,20699,20837,20614,20630,21149,20670,21405,17486,17509,17525,18373,19179,20695,20716,20732,20755,19194,18042,21641,20592,20779,20598,21412,17470,17591,20896,17468,17619,20799,20700,21031,20744,20699,20828,18075,21259,20581,20853,18048,20868,20884,17756,17784,17800,17825,17854,21171,21200,20931,20947,21378,20955,20971,18086,20645,21002,20986,18178,17960,18012,18381,18064,29176,21044,21438,21018,21122,21393,21060,21844,21094,20654,17493,18150,18166,18214,25967,20763,21799,21110,21830,21138,21246,21301,18336,18361,21165,21187,20812,21216,21232,21287,21317,18553,21347,21363,21428,21454,21271,21483,21499,21515,21575,21467,18712,21591,21633,21078,18189,18198,20679,21657,21701,21074,21687,21740,21756,21786,21815,21860,21876,21892,21946,21962,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36457,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,36813,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,21981,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,22151,22007,18884,17900,17922,17944,18178,17960,18012,18381,18064,27898,17884,18890,17906,17928,22042,25022,18130,36931,36963,17493,18150,18166,22070,22112,25026,18134,36935,18262,18278,18294,18320,18336,18361,22142,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36109,19288,18469,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22167,19288,19457,36866,17466,17768,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22227,36487,22273,36866,17466,36890,36866,19316,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18749,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,22304,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19580,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22330,19089,19457,36866,17466,18721,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22765,19347,19457,36866,17466,36890,36866,18114,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34541,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,22540,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29908,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22561,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,23837,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22584,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36442,19288,21605,24035,23112,28137,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,31568,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22690,19288,19457,36866,17466,36890,36866,21991,27584,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,22659,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22360,19552,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22675,22811,19457,36866,17466,36890,36866,19133,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22827,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36064,19288,22865,22881,32031,22897,22913,22956,29939,24035,24035,24035,23003,23114,23114,23114,23024,22420,23511,23511,23511,23052,29116,23073,29268,24035,25563,26915,23106,23131,23114,23114,23159,23181,23197,23248,23511,23511,23282,23305,22493,32364,24035,33472,30138,26325,31770,33508,27345,33667,23114,23321,23473,23351,35793,36576,23511,23375,22500,24145,24035,29197,20192,24533,23440,23114,19017,23459,22839,23489,23510,23511,33563,23528,32076,25389,24035,26576,23561,23583,23114,32683,22516,23622,23655,23511,23634,35456,37144,23110,23683,34153,20499,32513,25824,23705,24035,24035,23111,23114,19874,27078,33263,19830,24035,23112,19872,27741,23266,24036,23114,30243,20507,32241,20150,31862,27464,35108,23727,23007,35895,34953,26578,27685,20141,24569,31691,19787,33967,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36427,19552,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,27027,26576,23114,23114,23114,31471,23756,22468,23511,23511,23511,34687,23772,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,23788,24035,24035,24035,21559,23828,23114,23114,23114,25086,22839,23853,23511,23511,23511,23876,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,31761,23909,23953,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36049,19288,21605,30825,23112,23987,23511,24003,31001,27617,24034,24035,24036,24052,24089,23114,23114,22420,24109,24168,23511,23511,29116,24188,27609,20017,29516,24035,26576,24222,19968,23114,24252,33811,22468,24270,33587,23511,24320,27443,22493,24035,24035,24035,24035,24339,23113,23114,23114,23114,28128,28618,29700,23511,23511,23511,28276,34564,20402,24035,24035,32929,24036,23114,23114,23114,24357,23029,22839,23511,23511,23511,24377,25645,24035,34112,24035,26576,23114,26643,23114,32683,22516,23511,25638,23511,23711,24035,24395,27809,23114,24414,20499,24432,30917,23628,24035,30680,23111,23114,30233,27078,25748,24452,24035,23112,19872,27741,23266,24036,23114,24475,19829,26577,26597,26154,24519,24556,24596,23007,20046,20132,26578,24634,20141,24569,31691,24679,24727,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36412,19288,21605,19943,34861,32618,26027,29483,32016,32050,36233,24776,35574,24801,24819,32671,31289,22420,24868,24886,20087,26849,29116,19803,24035,24035,24035,36228,26576,23114,23114,23114,24981,33811,22468,23511,23511,23511,29028,27443,22493,24923,27965,24035,24035,32797,24946,23443,23114,23114,29636,24997,22849,28252,23511,23511,23511,25042,25110,24035,24035,34085,24036,25133,23114,23114,25152,23029,22839,25169,23511,36764,23511,25645,30403,24035,25186,26576,31806,24093,25212,32683,22516,32713,26245,34293,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,32406,23111,23114,28676,30944,27689,25234,24035,23112,19872,37063,23266,24036,23114,30243,20379,26100,29218,20211,30105,25257,25284,23007,20046,20132,26578,27685,20141,24569,24834,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36034,19288,21671,25314,25072,25330,25346,25362,29939,29951,35288,29984,23812,27216,25405,25424,30456,22584,26292,25461,25480,31592,29116,25516,34963,25545,27007,25579,33937,25614,25661,25686,34872,25702,25718,25734,25769,25795,25811,25840,22493,26533,25856,24035,25876,30763,27481,25909,23114,28987,25936,25954,29700,25983,23511,31412,26043,26063,22568,29241,29592,26116,31216,35383,26170,34783,26194,26221,22839,26241,26261,22477,26283,26308,27306,31035,24655,26576,29854,33386,26341,32683,22516,32153,30926,26361,19996,26381,35463,26397,26424,34646,26478,35605,31386,26494,35567,31964,22940,23689,25218,30309,32289,19830,33605,23112,32109,27733,27084,24496,35886,35221,26525,36602,26549,26558,26574,26594,26613,26629,26666,26700,26578,27685,23740,24285,31691,26733,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36397,19552,18991,25887,28117,32618,26776,29483,29939,26802,24035,24035,24036,28664,23114,23114,23114,22420,30297,23511,23511,23511,29116,19803,24035,24035,24035,25559,26576,23114,23114,23114,30525,33811,22468,23511,23511,23511,28725,27443,22493,24035,24035,27249,24035,24035,23113,23114,23114,26827,23114,28618,29700,23511,23511,26845,23511,34564,20402,24035,24035,26979,24036,23114,23114,23114,24974,23029,22839,23511,23511,23511,26865,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,33305,24035,25598,23114,19874,34253,27689,19830,24035,23112,19872,27741,23266,24036,23114,26886,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,26931,24569,26439,26947,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36019,19288,26995,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,27043,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,27061,23511,23511,23511,23511,23512,24694,24035,24035,29978,24035,24035,23113,23114,33114,23114,23114,30010,29700,23511,35913,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,27155,26576,23114,23114,30447,23036,29695,23511,23511,30935,20099,24152,25529,27100,34461,27121,22625,29156,26009,27137,30422,31903,31655,28870,27171,32439,31731,19830,27232,22612,27265,26786,25494,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,20342,27288,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,27322,27339,28020,27361,27382,29939,24035,24035,32581,24036,23114,23114,23114,27425,22420,23511,23511,23511,27442,28306,19803,24035,24035,24035,24035,26710,23114,23114,23114,23114,32261,22468,23511,23511,23511,23511,35719,24694,29510,24035,24035,24035,24035,26717,23114,23114,23114,23114,28618,32217,23511,23511,23511,23511,34585,20402,24035,24035,24035,27459,23114,23114,23114,36252,23029,20271,23511,23511,23511,28840,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,27480,34483,28401,29761,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36382,19288,21605,27497,27517,28504,28898,27569,29939,29401,27600,27323,27633,19025,27662,23114,27705,22420,20483,27721,23511,27765,28306,19803,23540,24035,24610,27781,27805,26650,23114,28573,32990,25920,22468,26870,23511,26684,34262,34737,25057,34622,24035,24035,23971,24206,27825,27847,23114,23114,27865,27885,35766,27914,23511,23511,32766,32844,27934,28795,26909,27955,26092,27988,25445,28005,28036,28052,21965,23511,32196,19897,28072,28102,36534,21541,23801,28153,28180,28197,28221,23036,32695,28251,28268,28292,23667,34825,23930,24580,28322,28344,31627,28366,25996,23628,24035,24035,23111,23114,19874,27078,27689,35625,33477,33359,27674,28393,33992,24036,23114,30243,19829,28417,28433,28463,23008,19876,20208,23007,20046,20132,28489,28520,20141,24569,31691,19787,28550,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,28589,24035,24035,24035,24035,28608,23114,23114,23114,23114,28618,20431,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36004,19288,28634,31951,28565,28702,28718,28741,32544,20175,28792,32086,20105,28811,29059,29862,28856,22420,28886,30354,23359,28922,28306,28952,23888,26320,36506,24035,29331,28968,36609,23114,29003,31661,27061,30649,27366,23511,29023,27918,24694,24035,24035,23893,33094,30867,23113,23114,23114,29044,34184,30010,29700,23511,23511,29081,29102,34585,20402,27789,24035,24035,24036,23114,29132,23114,23114,23029,20271,23511,29153,23511,23511,30562,30174,24035,24035,27409,25438,23114,23114,29172,36668,31332,23511,23511,29192,30144,24035,23110,30203,23114,23467,31544,23261,23628,24035,22545,23111,23114,29213,27078,27689,29234,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,29257,23008,19876,20208,28768,29290,29320,34776,29353,20141,22435,29378,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36367,19288,21605,34616,19006,32618,31497,31507,36216,20184,24035,34393,29424,34668,23114,34900,29447,22420,30360,23511,37089,29473,28306,19803,29499,24398,24035,24035,26576,31799,29532,29550,23114,33811,22468,32298,29571,31184,23511,23512,37127,36628,29589,24035,24135,24035,23113,29608,23114,27831,29634,28618,29652,30037,23511,24172,29671,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,29555,29690,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,29719,24035,23110,29738,23114,23467,34035,29756,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,29777,34364,28181,30243,29799,31920,27272,27185,23008,31126,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29828,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35989,19552,19687,35139,28649,29878,29894,29924,29939,23224,23085,31969,24036,35173,24752,24803,23114,22420,31190,30318,24870,23511,28306,29967,23967,24035,24035,24035,26576,3e4,23114,23114,23114,33811,22468,30026,23511,23511,23511,23512,26078,24035,24035,24035,30053,37137,30071,23114,23114,33368,25136,28618,30723,23511,23511,37096,31356,34585,20402,30092,30127,30160,24036,35740,30219,24960,30259,23029,20271,34042,30285,30342,30376,23289,30055,30400,30419,30438,32640,33532,33514,30472,18792,26267,24323,23057,30493,23639,20008,30196,33188,30517,20075,23511,30541,23628,30578,33928,28776,30594,19874,30610,30637,19830,30677,27646,19872,25779,23266,23232,35016,30243,30696,29812,30712,30746,27206,30779,30807,23007,33395,20132,26578,27685,31703,22928,31691,19787,31079,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36352,19288,23335,30841,26131,30888,30904,30986,29939,24035,24704,31017,20025,23114,26178,31051,31095,22420,23511,22524,31142,31172,28534,31206,35497,25196,24035,28592,24503,23114,31239,31285,23114,31305,31321,31355,31372,31407,23511,30556,24694,24035,27501,19805,24035,24035,23113,23114,31428,24066,23114,28618,29700,23511,31837,18809,23511,34585,31448,24035,24035,24035,23090,23114,23114,23114,23114,31619,35038,23511,23511,23511,23511,33714,24035,33085,24035,29431,23114,31467,23114,23143,31487,23511,31523,23511,35195,36783,24035,30111,23567,23114,23467,31543,31560,23628,24035,24035,23111,23114,19874,30953,31584,34508,24035,31608,26345,37055,23266,31643,31677,31719,31747,31786,31822,26898,23008,19876,31859,23007,20046,20132,26578,27685,20141,24569,31691,31878,31936,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35974,19288,21605,27972,35663,31985,29655,32001,36715,24785,25893,23545,31912,19853,19916,25938,24540,22420,31843,29674,29573,32735,28936,19803,24035,24035,32047,24035,26576,23114,23114,27544,23114,33811,22468,23511,23511,32161,23511,23512,32066,24035,33313,24035,24035,24035,23113,27426,32102,23114,23114,28618,32125,23511,32144,23511,23511,33569,20402,24035,27045,24035,24036,23114,23114,28328,23114,30076,32177,23511,23511,30384,23511,30562,24035,24035,24035,26576,23114,23114,23114,23595,32212,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,22635,25753,32233,32257,32277,19829,26577,26597,20211,23008,19876,32322,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,32352,35285,32380,34196,33016,30661,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,32404,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,32422,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,30269,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,19949,24035,23111,32455,19874,31269,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36337,19552,19209,21617,26509,32475,32491,32529,29939,24035,32578,25241,32597,23114,32634,29007,32656,22420,23511,32729,26365,32751,28306,32788,32882,24035,24035,32813,36727,23114,33182,23114,27553,33235,32829,23511,32706,23511,28906,28377,26962,32881,32904,32898,32920,24035,32953,23114,32977,26408,23114,28164,33006,23511,33039,35774,23511,32306,20402,33076,30872,24035,24036,25408,33110,28979,23114,23029,20271,35835,33130,33054,23511,30562,33148,24035,24035,33167,23114,23114,33775,23036,20459,23511,23511,25464,24646,24035,24035,22446,23114,23114,25627,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,31391,33204,33220,33251,33287,26577,26597,20211,33329,19876,33345,23007,20046,20132,26578,27685,28473,22599,31691,33411,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35959,19288,21907,27243,29843,32618,33427,31507,29939,33460,34090,24035,24036,33493,24416,33530,23114,22420,33548,24379,33585,23511,28306,19803,33603,24202,24035,24035,25593,33749,28205,23114,23114,32388,22468,33853,33060,23511,23511,31339,33621,24035,24035,34397,24618,30757,33663,23114,23114,33683,35684,28618,26678,23511,23511,32506,33699,34585,20402,24035,32562,26973,24036,23114,23114,33377,33773,23029,20271,23511,23511,30621,23511,23860,24035,33791,21553,26576,36558,23114,33809,23036,32857,26047,23511,33827,23634,24035,24035,23110,23114,23114,31252,23511,33845,23628,24035,24459,23111,23114,33869,27078,30791,29783,24035,24742,19872,33895,23266,26462,19710,33879,33919,26577,26597,24123,24930,21930,20208,30501,33953,25268,20252,33983,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36322,19552,23390,33634,35154,34008,34024,34058,35544,34106,34128,26811,33151,34144,34169,34212,23114,34228,34244,34278,34315,23511,34331,34347,34380,34413,24035,24663,26576,34429,34453,34477,29534,33811,22468,34499,34524,34557,25170,34580,35436,23937,34601,24035,24341,26453,23113,34638,34662,23114,24236,28618,34684,34703,34729,23511,35352,34753,34799,24035,34815,32558,34848,34888,35814,34923,23165,29137,23606,30326,30730,34939,33023,30562,36848,34979,24035,24847,34996,23114,23114,35032,29695,35054,23511,23511,35091,33296,35124,24296,28235,24361,36276,32772,35067,35189,27301,30855,24852,22452,35211,35237,35316,25500,35270,23405,24304,35304,29362,24036,23114,35332,19829,26577,26597,20211,23008,19876,20208,35368,28823,23920,32336,35405,20141,24569,31691,35421,35479,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35944,22795,21605,33647,35877,35513,30962,35529,34073,35557,24035,24035,20405,31107,23114,23114,23114,35590,34713,23511,23511,23511,35641,19803,29408,32937,25298,24035,35657,23115,27849,24760,35679,26205,22468,23511,35700,24907,24901,35075,31893,34980,24035,24035,24035,24035,23113,35009,23114,23114,23114,28618,35716,30970,23511,23511,23511,34585,23215,24035,24035,24035,24036,35735,23114,23114,23114,27105,35756,35790,23511,23511,23511,35254,35446,24035,24035,31223,35809,23114,23114,23036,36825,35830,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,31031,20355,19872,33903,23266,24036,23114,28686,19829,26577,26597,20211,23008,23424,20208,24711,31065,24486,26578,27685,20141,19773,35851,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36307,19288,21605,35494,19702,32618,33437,31507,29939,25117,24035,27939,24036,27869,23114,26829,23114,22420,23494,23511,33132,23511,28306,19803,24035,34832,24035,24035,26576,23114,25153,23114,23114,33811,22468,23511,23511,35911,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35929,19288,21605,25860,23112,36185,23511,36201,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,26748,24035,24035,24035,24035,24035,36249,23114,23114,23114,23114,28618,28835,23511,23511,23511,23511,34585,20402,24035,27151,24035,26760,23114,27989,23114,23114,36268,20271,23511,24436,23511,29703,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36292,19288,21605,36503,21922,32618,34534,31507,36522,24035,33793,24035,35864,23114,23114,36555,23417,22420,23511,23511,36574,26020,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,36592,24035,24035,36625,24035,24035,23113,23114,32961,23114,23114,29618,29700,23511,29086,23511,23511,34585,20402,36644,24035,24035,24036,29740,23114,23114,23114,29065,36663,31527,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,31451,23112,36684,23511,36700,29939,24035,24035,24035,30185,23114,23114,23114,27526,22420,23511,23511,23511,32865,28306,19803,36743,24035,27017,24035,26576,27535,23114,31432,23114,33811,22468,33271,23511,32128,23511,23512,24694,24035,27196,24035,24035,24035,23113,32459,23114,23114,23114,28618,29700,33829,36762,23511,23511,34585,20402,24035,36746,24035,29722,23114,23114,34437,23114,34907,20271,23511,23511,18801,23511,23206,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,36837,24035,24035,33739,23114,23114,25094,23511,23261,23628,24035,36780,23111,24073,19874,27078,35344,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22720,19288,36799,36866,17466,36890,36864,21991,22211,22987,17556,17575,22288,17486,17509,17525,18373,17631,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22705,19288,19457,36866,17466,36890,36866,19375,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36124,19288,36951,36866,17466,36890,36866,21991,22404,22987,17556,17575,22288,17486,17509,17525,18373,18567,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36979,36995,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18027,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,21529,24035,23112,23033,23511,31507,25377,24035,24035,24035,24036,23114,23114,23114,23114,37040,23511,23511,23511,23511,28086,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,37079,23511,23511,23511,23511,23512,34766,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,37112,37160,18469,36866,17466,36890,36866,17656,37174,22987,17556,17575,22288,17486,17509,17525,18373,18537,22984,17553,17572,22285,18780,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,53264,18,49172,57366,24,8192,28,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,0,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,127011,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,3002368,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2576384,2215936,2215936,2215936,2416640,2424832,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2543616,2215936,2215936,2215936,2215936,2215936,2629632,2215936,2617344,2215936,2215936,2215936,2215936,2215936,2215936,2691072,2215936,2707456,2215936,2715648,2215936,2723840,2764800,2215936,2215936,2797568,2215936,2822144,2215936,2215936,2854912,2215936,2215936,2215936,2912256,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,180224,0,0,2174976,0,0,2170880,2617344,2170880,2170880,2170880,2170880,2170880,2170880,2691072,2170880,2707456,2170880,2715648,2170880,2723840,2764800,2170880,2170880,2797568,2170880,2170880,2797568,2170880,2822144,2170880,2170880,2854912,2170880,2170880,2170880,2912256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2609152,2215936,2215936,2215936,2215936,2215936,2215936,2654208,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,184599,280,0,2174976,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,544,0,546,0,0,2179072,0,0,0,552,0,0,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2158592,2158592,2232320,2232320,0,2240512,2240512,0,0,0,644,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2711552,2170880,2170880,2170880,2170880,2170880,2760704,2768896,2789376,2813952,2170880,2170880,2170880,2875392,2904064,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,167936,0,0,0,0,2174976,0,0,2215936,2215936,2514944,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2592768,2215936,2215936,2215936,2215936,2215936,2215936,2215936,32768,0,0,0,0,0,2174976,32768,0,2633728,2215936,2215936,2215936,2215936,2215936,2215936,2711552,2215936,2215936,2215936,2215936,2215936,2760704,2768896,2789376,2813952,2215936,2215936,2215936,2875392,2904064,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,65819,2215936,2215936,3031040,2215936,3055616,2215936,2215936,2215936,2215936,3092480,2215936,2215936,3125248,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2170880,2170880,2494464,2170880,2170880,0,0,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2641920,2170880,2170880,2170880,2699264,2170880,2727936,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3026944,2170880,2170880,3063808,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,2379776,2215936,2523136,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2596864,2215936,2621440,2215936,2215936,2641920,2215936,2215936,0,0,0,0,0,0,2179072,548,0,0,0,0,287,2170880,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2215936,2215936,2699264,2215936,2727936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2879488,2215936,2916352,2215936,2215936,0,0,0,0,188416,0,2179072,0,0,0,0,0,287,2170880,0,2171019,2171019,2171019,2400395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3031179,2171019,3055755,2171019,2171019,2215936,3133440,2215936,2215936,2215936,3162112,2215936,2215936,3182592,3186688,2215936,0,0,0,0,0,0,0,0,0,0,2171019,2171019,2171019,2171019,2171019,2171019,2523275,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2597003,2171019,2621579,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,4337664,28,2170880,2170880,2170880,2629632,2170880,2170880,2170880,2170880,2719744,2744320,2170880,2170880,2170880,2834432,2838528,2170880,2908160,2170880,2170880,2936832,2215936,2215936,2215936,2215936,2719744,2744320,2215936,2215936,2215936,2834432,2838528,2215936,2908160,2215936,2215936,2936832,2215936,2215936,2985984,2215936,2994176,2215936,2215936,3014656,2215936,3059712,3076096,3088384,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2445312,2215936,2465792,2473984,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171019,2171019,2494603,2171019,2171019,2215936,2215936,2215936,3215360,0,0,0,0,0,0,0,0,0,0,0,0,0,2379776,2170880,2170880,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3016168,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,124,124,0,128,128,2170880,2170880,2170880,3215360,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2535424,2539520,2170880,2170880,2588672,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,0,2387968,2392064,2170880,2170880,2433024,2170880,2170880,2170880,3170304,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,2215936,2215936,2215936,2535424,2539520,2215936,2215936,2588672,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,136,0,2215936,2215936,2920448,2215936,2215936,2215936,2990080,2215936,2215936,2215936,2215936,3051520,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3108864,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3026944,2215936,2215936,3063808,2215936,2215936,3112960,2215936,2215936,2215936,3170304,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2537049,2539520,2170880,2170880,2588672,2170880,2170880,2170880,1508,2170880,2170880,2170880,1512,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2686976,2748416,2170880,2170880,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3121152,2170880,2170880,3145728,3158016,3166208,2170880,2420736,2428928,2170880,2478080,2170880,2170880,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2646016,2670592,0,0,3145728,3158016,3166208,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,0,2170880,2215936,2215936,2580480,2215936,2605056,2637824,2215936,2215936,2686976,2748416,2215936,2215936,2215936,2924544,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,286,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2387968,2392064,2170880,2170880,2433024,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,1625,2170880,2170880,2580480,2170880,2605056,2637824,2170880,647,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2686976,0,0,2748416,2170880,2170880,0,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,0,0,28,28,2170880,3141632,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2170880,2420736,2428928,2752512,2756608,0,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2170880,3141632,2170880,2170880,2490368,2215936,2490368,2215936,2215936,2215936,2547712,2555904,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,245760,0,3129344,2170880,2170880,2490368,2170880,2170880,2170880,0,0,2547712,2555904,2170880,2170880,2170880,0,0,0,0,0,0,0,0,0,2220032,0,0,45056,0,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2158592,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1482,97,97,97,97,97,97,97,1354,97,97,97,97,97,97,97,97,1148,97,97,97,97,97,97,97,2584576,2170880,2170880,1512,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2170880,2850816,2170880,2170880,2170880,3022848,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,287,2170880,2215936,3022848,2170880,2441216,2170880,2527232,0,0,2170880,2600960,2170880,0,2850816,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2596864,2170880,2621440,2170880,2170880,2641920,2170880,2170880,2170880,3022848,2170880,2519040,2170880,2170880,2170880,2170880,2170880,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2170880,2170880,2170880,2514944,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2519040,0,2024,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,2024,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,2170880,2215936,2650112,2965504,2215936,0,0,2170880,2650112,2965504,2170880,2551808,2170880,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,141,45,45,67,67,67,67,67,224,67,67,238,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,0,2551808,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2977792,2977792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53264,18,49172,57366,24,8192,29,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,49172,0,0,0,24,24,24,0,28,28,28,28,102432,127,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,0,0,0,2220032,110630,0,0,0,114730,106539,136,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,4256099,4256099,24,24,0,28,28,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,0,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,2170880,2547712,2555904,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2215936,2215936,543,543,545,545,0,0,2179072,0,550,551,551,0,287,2171166,2171166,18,0,0,0,0,0,0,0,0,2220032,0,0,645,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,149,2584576,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2519040,0,0,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,0,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,53264,18,49172,57366,24,155648,28,102432,155648,155687,114730,106539,0,0,155648,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,0,0,2220032,0,94208,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,208896,18,278528,24,24,0,28,28,53264,18,159765,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,0,28,139394,28,28,102432,131,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,32768,53264,0,18,18,24,24,0,28,28,0,546,0,0,2183168,0,0,552,832,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2170880,2170880,2170880,2170880,2654208,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,1084,0,1088,0,1092,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,937,0,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,644,0,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,826,0,828,0,0,2183168,0,0,830,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2170880,2170880,2633728,2170880,2170880,2170880,2170880,2170880,2170880,2711552,2170880,2170880,2170880,2170880,2170880,2760704,53264,18,49172,57366,24,8192,28,172066,172032,110630,172066,106539,0,0,172032,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,102432,0,98304,0,0,2220032,110630,0,0,0,0,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,45056,0,0,0,53264,18,49172,57366,25,8192,30,102432,0,110630,114730,106539,0,0,176219,53264,18,18,49172,0,57366,0,124,124,124,0,128,128,128,128,102432,128,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,546,0,0,2183168,0,65536,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2646016,2670592,2752512,2756608,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,65536,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,143,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,67,1824,67,1826,67,67,67,67,17,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,120,121,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,67,67,37139,37139,24853,24853,0,0,2179072,548,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,45,45,2033,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,0,369,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,978,0,546,70179,0,2183168,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1013,67,67,67,67,67,67,67,67,67,67,473,67,67,67,67,483,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,97,97,1359,97,97,97,67,67,1584,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,1659,45,45,45,45,45,45,45,45,45,1667,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,45,1668,45,45,45,45,67,67,1694,67,67,67,67,67,67,67,67,67,67,67,67,67,774,67,67,1713,97,97,97,97,97,97,97,0,97,97,1723,97,97,97,97,0,45,45,45,45,45,45,1538,45,45,45,45,45,1559,45,45,1561,45,45,45,45,45,45,45,687,45,45,45,45,45,45,45,45,448,45,45,45,45,45,45,67,67,67,67,1771,1772,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,97,67,67,67,67,67,1821,67,67,67,67,67,67,1827,67,67,67,0,0,0,0,0,0,97,97,1614,97,97,97,97,97,603,97,97,605,97,97,608,97,97,97,97,0,1532,45,45,45,45,45,45,45,45,45,45,450,45,45,45,45,67,67,97,97,97,97,97,97,0,0,1839,97,97,97,97,0,0,97,97,97,97,97,45,45,45,45,45,45,45,67,67,67,67,67,67,67,97,1883,97,1885,97,0,1888,0,97,97,0,97,97,1848,97,97,97,97,1852,45,45,45,45,45,45,45,384,391,45,45,45,45,45,45,45,385,45,45,45,45,45,45,45,45,1237,45,45,45,45,45,45,67,0,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,1951,45,45,45,45,45,45,45,45,67,67,67,67,1963,97,2023,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,1994,67,1995,67,67,67,67,67,67,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,0,0,0,0,2220032,110630,0,0,0,114730,106539,137,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2793472,2805760,2170880,2830336,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,67,67,37139,37139,24853,24853,0,0,281,549,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,2031,2032,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1769,67,0,546,70179,549,549,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,1858,45,641,0,0,0,0,41606,926,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,456,67,0,0,0,1313,0,0,0,1096,1319,0,0,0,0,97,97,97,97,97,97,97,97,1110,97,97,97,97,67,67,67,67,1301,1476,0,0,0,0,1307,1478,0,0,0,0,0,0,0,0,97,97,97,97,1486,97,1487,97,1313,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,67,67,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,97,45,1853,45,1855,45,45,45,45,53264,18,49172,57366,26,8192,31,102432,0,110630,114730,106539,0,0,225368,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,18,49172,163840,57366,0,24,24,229376,0,28,28,28,229376,102432,0,0,0,0,2220167,110630,0,0,0,114730,106539,0,2171019,2171019,2171019,2171019,2592907,2171019,2171019,2171019,2171019,2633867,2171019,2171019,2171019,2171019,2171019,2171019,2654347,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3117195,2171019,2171019,2171019,2171019,2240641,0,0,0,0,0,0,0,0,368,0,140,2171019,2171019,2171019,2416779,2424971,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2617483,2171019,2171019,2642059,2171019,2171019,2171019,2699403,2171019,2728075,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3215499,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2171019,2822283,2171019,2171019,2855051,2171019,2171019,2171019,2912395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3002507,2171019,2171019,2215936,2215936,2494464,2215936,2215936,2215936,2171166,2171166,2416926,2425118,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2576670,2171166,2617630,2171166,2171166,2171166,2171166,2171166,2171166,2691358,2171166,2707742,2171166,2715934,2171166,2724126,2765086,2171166,2171166,2797854,2171166,2822430,2171166,2171166,2855198,2171166,2171166,2171166,2912542,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2793758,2806046,2171166,2830622,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3109150,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2543902,2171166,2171166,2171166,2171166,2171166,2629918,2793611,2805899,2171019,2830475,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,0,546,0,0,2183168,0,0,552,0,2171166,2171166,2171166,2400542,2171166,2171166,2171166,0,2171166,2171166,2171166,0,2171166,2920734,2171166,2171166,2171166,2990366,2171166,2171166,2171166,2171166,3117342,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,0,53264,0,18,18,4329472,2232445,0,2240641,4337664,2711691,2171019,2171019,2171019,2171019,2171019,2760843,2769035,2789515,2814091,2171019,2171019,2171019,2875531,2904203,2171019,2171019,3092619,2171019,2171019,3125387,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3199115,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2793472,2805760,2215936,2830336,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2494464,2170880,2170880,2171166,2171166,2634014,2171166,2171166,2171166,2171166,2171166,2171166,2711838,2171166,2171166,2171166,2171166,2171166,2760990,2769182,2789662,2814238,2171166,2171166,2171166,2875678,2904350,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3199262,2171166,0,0,0,0,0,0,0,0,0,2379915,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2445451,2171019,2465931,2474123,2171019,2171019,3113099,2171019,2171019,3133579,2171019,2171019,2171019,3162251,2171019,2171019,3182731,3186827,2171019,2379776,2879627,2171019,2916491,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3027083,2171019,2171019,3063947,2699550,2171166,2728222,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2879774,2171166,2916638,2171166,2171166,2171166,2171166,2171166,2609438,2171166,2171166,2171166,2171166,2171166,2171166,2654494,2171166,2171166,2171166,2171166,2171166,2445598,2171166,2466078,2474270,2171166,2171166,2171166,2171166,2171166,2171166,2523422,2171019,2437259,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2543755,2171019,2171019,2171019,2584715,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2908299,2171019,2171019,2936971,2171019,2171019,2986123,2171019,2994315,2171019,2171019,3014795,2171019,3059851,3076235,3088523,2171166,2171166,2986270,2171166,2994462,2171166,2171166,3014942,2171166,3059998,3076382,3088670,2171166,2171166,2171166,2171166,2171166,2171166,3027230,2171166,2171166,3064094,2171166,2171166,3113246,2171166,2171166,3133726,2506891,2171019,2171019,2171019,2535563,2539659,2171019,2171019,2588811,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2691211,2171019,2707595,2171019,2715787,2171019,2723979,2764939,2171019,2171019,2797707,2215936,2215936,3170304,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2453790,2457886,2171166,2171166,2171166,2486558,2171166,2171166,2507038,2171166,2171166,2171166,2535710,2539806,2171166,2171166,2588958,2171166,2171166,2171166,2171166,2515230,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2593054,2171166,2171166,2171166,2171166,3051806,2171166,2171166,2171166,2171166,2171166,2171166,3170590,0,2388107,2392203,2171019,2171019,2433163,2171019,2461835,2171019,2171019,2171019,2510987,2171019,2171019,2171019,2171019,2580619,2171019,2605195,2637963,2171019,2171019,2171019,2920587,2171019,2171019,2171019,2990219,2171019,2171019,2171019,2171019,3051659,2171019,2171019,2171019,2453643,2457739,2171019,2171019,2171019,2171019,2171019,2171019,2515083,2171019,2171019,2171019,2171019,2646155,2670731,2752651,2756747,2846859,2961547,2171019,2998411,2171019,3010699,2171019,2171019,2687115,2748555,2171019,2171019,2171019,2924683,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3121291,2171019,2171019,2171019,3170443,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,3145867,3158155,3166347,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,553,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2388254,2392350,2171166,2171166,2433310,2171166,2461982,2171166,2171166,2171166,2511134,2171166,2171166,0,2171166,2171166,2580766,2171166,2605342,2638110,2171166,2171166,2171166,2171166,3031326,2171166,3055902,2171166,2171166,2171166,2171166,3092766,2171166,2171166,3125534,2171166,2171166,2171166,3162398,2171166,2171166,3182878,3186974,2171166,0,0,0,2171019,2171019,2171019,2171019,3109003,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2171166,2687262,0,0,2748702,2171166,2171166,0,2171166,2924830,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2597150,2171166,2621726,2171166,2171166,2642206,2171166,2171166,2171166,2171166,3121438,2171166,2171166,3146014,3158302,3166494,2171019,2420875,2429067,2171019,2478219,2171019,2171019,2171019,2171019,2547851,2556043,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3129483,2215936,2171019,3141771,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2171166,2421022,2429214,2171166,2478366,2171166,2171166,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2646302,2670878,0,0,0,0,37,110630,0,0,0,114730,106539,0,45,45,45,45,45,1405,1406,45,45,45,45,1409,45,45,45,45,45,1415,45,45,45,45,45,45,45,45,45,45,1238,45,45,45,45,67,2752798,2756894,0,2847006,2961694,2171166,2998558,2171166,3010846,2171166,2171166,2171166,3141918,2171019,2171019,2490507,3129344,2171166,2171166,2490654,2171166,2171166,2171166,0,0,2547998,2556190,2171166,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,167,45,45,45,45,185,187,45,45,198,45,45,0,2171166,2171166,2171166,2171166,2171166,2171166,3129630,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2576523,2171019,2171019,2171019,2171019,2171019,2609291,2171019,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2171166,2171166,2494750,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,147,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,3002654,2171166,2171166,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2175257,0,0,2584862,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2171166,2171019,2441355,2171019,2527371,2171019,2601099,2171019,2850955,2171019,2171019,2171019,3022987,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,69632,287,2170880,2215936,3022848,2171166,2441502,2171166,2527518,0,0,2171166,2601246,2171166,0,2851102,2171166,2171166,2171166,2171166,2720030,2744606,2171166,2171166,2171166,2834718,2838814,2171166,2908446,2171166,2171166,2937118,3023134,2171019,2519179,2171019,2171019,2171019,2171019,2171019,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,3215646,0,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2486411,2171019,2171019,2171019,2629771,2171019,2171019,2171019,2171019,2719883,2744459,2171019,2171019,2171019,2834571,2838667,2171019,2519326,0,0,2171166,2171166,0,2171166,2171166,2171166,2396299,2171019,2171019,2171019,2171019,3018891,2396160,2215936,2215936,2215936,2215936,3018752,2396446,0,0,2171166,2171166,2171166,2171166,3019038,2171019,2650251,2965643,2171019,2215936,2650112,2965504,2215936,0,0,2171166,2650398,2965790,2171166,2551947,2171019,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,144,45,45,67,67,67,67,67,228,67,67,67,67,67,67,67,67,67,1929,97,97,97,97,0,0,0,2552094,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2977931,2977792,2978078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,1321,97,131072,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,28,28,0,140,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2584576,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,140,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3002368,2170880,2170880,2215936,2215936,2494464,2215936,2215936,2215936,2215936,2215936,2215936,3215360,544,0,0,0,544,0,546,0,0,0,546,0,0,2183168,0,0,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,0,2170880,2170880,2170880,0,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,552,0,0,0,552,0,287,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,644,0,2215936,2215936,3170304,544,0,546,0,552,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,140,0,0,53264,18,49172,57366,24,8192,28,102432,249856,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,151640,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640,53264,18,49172,57366,24,8192,28,102432,253952,110630,114730,106539,0,0,32856,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,192512,53264,18,18,49172,0,57366,0,2232445,184320,2232445,0,2240641,2240641,184320,2240641,102432,0,0,0,221184,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3108864,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,0,0,0,45056,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,127,127,53264,18,49172,258071,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,204800,53264,18,49172,57366,24,27,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,33,0,33,33,33,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,0,0,0,0,0,0,0,0,0,0,139,2170880,2170880,2170880,2416640,67,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,0,0,97,97,0,97,97,97,45,2030,45,45,45,45,67,1573,67,67,67,67,67,67,67,67,67,67,67,1699,67,67,67,67,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,97,97,97,1355,97,97,97,1358,97,97,97,641,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,45,1187,45,45,45,45,45,0,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,592,97,97,97,97,97,97,97,97,97,97,1531,45,45,45,45,45,45,45,45,45,45,45,45,1680,45,45,45,641,0,924,0,925,41606,0,0,0,0,45,45,45,45,45,45,1186,45,45,45,45,45,45,67,67,37139,37139,24853,24853,0,70179,282,0,0,65820,65820,369,287,97,0,0,97,97,0,97,2028,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1767,67,67,67,0,0,0,0,0,0,1612,97,97,97,97,97,97,0,1785,97,97,97,97,97,97,0,0,97,97,97,97,1790,97,0,0,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,241664,2387968,2392064,2170880,2170880,2433024,53264,19,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,274432,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,270336,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,1134711,53264,18,49172,57366,24,8192,28,102432,0,1126440,1126440,1126440,0,0,1126400,53264,18,49172,57366,24,8192,28,102432,36,110630,114730,106539,0,0,217088,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,94,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,96,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,24666,53264,18,18,49172,0,57366,0,24,24,24,126,28,28,28,28,102432,53264,122,123,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,2170880,2170880,4256099,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1319,0,0,0,0,97,97,97,97,97,97,97,1109,97,97,97,97,1113,132,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,146,150,45,45,45,45,45,175,45,180,45,186,45,189,45,45,203,67,256,67,67,270,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,293,297,97,97,97,97,97,322,97,327,97,333,97,0,0,97,2026,0,2027,97,97,45,45,45,45,45,45,67,67,67,1685,67,67,67,67,67,67,67,1690,67,336,97,97,350,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,2424832,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2617344,2170880,45,439,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,525,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,97,622,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,1527,369,648,45,45,45,45,45,45,45,45,45,659,45,45,45,45,408,45,45,45,45,45,45,45,45,45,45,45,1239,45,45,45,67,729,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,762,67,746,67,67,67,67,67,67,67,67,67,759,67,67,67,67,0,0,0,1477,0,1086,0,0,0,1479,0,1090,67,67,796,67,67,799,67,67,67,67,67,67,67,67,67,67,67,67,1291,67,67,67,811,67,67,67,67,67,816,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,833,97,97,97,97,97,97,97,97,1380,0,0,0,45,45,45,45,45,1185,45,45,45,45,45,45,45,386,45,45,45,45,45,45,45,45,1810,45,45,45,45,45,45,67,97,97,844,97,97,97,97,97,97,97,97,97,857,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,45,45,97,97,97,894,97,97,897,97,97,97,97,97,97,97,97,97,0,0,0,1382,45,45,45,97,909,97,97,97,97,97,914,97,97,97,97,97,97,97,923,67,67,1079,67,67,67,67,67,37689,1085,25403,1089,66365,1093,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,148,1114,97,97,97,97,97,97,1122,97,97,97,97,97,97,97,97,97,606,97,97,97,97,97,97,97,97,97,97,1173,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,145,45,45,67,67,67,67,67,1762,67,67,67,1766,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,1934,67,67,1255,67,67,67,67,67,67,67,67,67,67,67,67,67,1035,67,67,67,67,67,67,1297,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,97,1327,97,97,97,97,97,97,97,97,97,97,97,97,33344,97,97,97,1335,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,97,97,1377,97,97,97,97,97,97,0,1179,0,45,45,45,45,670,45,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,67,67,1438,67,67,1442,67,67,67,67,67,67,67,67,67,67,67,67,1592,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,0,0,1305,0,0,0,0,0,1311,0,0,0,1317,0,0,0,0,0,0,0,97,97,1322,97,97,1491,97,97,1495,97,97,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,1551,45,1553,45,1504,97,97,97,97,97,97,97,97,97,97,1513,97,97,97,97,0,45,45,45,45,1536,45,45,45,45,1540,45,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,67,67,67,1700,67,67,67,97,1648,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,1541,0,97,97,97,97,0,1940,0,97,97,97,97,97,97,45,45,2011,45,45,45,2015,67,67,2017,67,67,67,2021,97,67,67,812,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,97,97,910,97,97,97,97,97,97,97,97,97,97,97,923,0,0,0,45,45,45,45,1184,45,45,45,45,1188,45,45,45,45,1414,45,45,45,1417,45,1419,45,45,45,45,45,443,45,45,45,45,45,45,453,45,45,67,67,67,67,1244,67,67,67,67,1248,67,67,67,67,67,67,67,0,37139,24853,0,0,0,282,41098,65820,97,1324,97,97,97,97,1328,97,97,97,97,97,97,97,97,97,0,0,930,45,45,45,45,97,97,97,97,1378,97,97,97,97,0,1179,0,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,45,975,45,45,45,45,67,67,1923,67,1925,67,67,1927,67,97,97,97,97,97,0,0,97,97,97,97,1985,45,45,45,45,45,45,1560,45,45,45,45,45,45,45,45,45,946,45,45,950,45,45,45,0,97,97,97,1939,0,0,0,97,1943,97,97,1945,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,990,45,45,45,67,257,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,337,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,370,2170880,2170880,2170880,2416640,401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,459,461,67,67,67,67,67,67,67,67,475,67,480,67,67,67,67,67,67,1054,67,67,67,67,67,67,67,67,67,67,1698,67,67,67,67,67,484,67,67,487,67,67,67,67,67,67,67,67,67,67,67,67,67,1459,67,67,97,556,558,97,97,97,97,97,97,97,97,572,97,577,97,97,0,0,1896,97,97,97,97,97,97,1903,45,45,45,45,983,45,45,45,45,988,45,45,45,45,45,45,1195,45,45,45,45,45,45,45,45,45,45,1549,45,45,45,45,45,581,97,97,584,97,97,97,97,97,97,97,97,97,97,97,97,97,1153,97,97,369,0,45,45,45,45,45,45,45,45,45,45,45,662,45,45,45,684,45,45,45,45,45,45,45,45,45,45,45,45,1004,45,45,45,67,67,67,749,67,67,67,67,67,67,67,67,67,761,67,67,67,67,67,67,1068,67,67,67,1071,67,67,67,67,1076,794,795,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,544,97,97,97,97,847,97,97,97,97,97,97,97,97,97,859,97,0,0,2025,97,20480,97,97,2029,45,45,45,45,45,45,67,67,67,1575,67,67,67,67,67,67,67,67,67,1775,67,67,67,97,97,97,97,892,893,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1515,97,993,994,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,992,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,67,1607,67,67,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,97,97,596,97,45,1556,1557,45,45,45,45,45,45,45,45,45,45,45,45,45,45,696,45,1596,1597,67,67,67,67,67,67,67,67,67,67,67,67,67,67,499,67,97,97,97,1621,97,97,97,97,97,97,97,97,97,97,97,97,97,1346,97,97,97,97,1740,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,45,45,67,97,97,97,97,97,97,1836,0,97,97,97,97,97,0,0,97,97,97,1984,97,45,45,45,45,45,45,1808,45,45,45,45,45,45,45,45,67,739,67,67,67,67,67,744,45,45,1909,45,45,45,45,45,45,45,67,1917,67,1918,67,67,67,67,67,67,1247,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,1922,67,67,67,67,67,67,67,97,1930,97,1931,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,1576,67,67,67,67,1580,67,67,0,97,97,1938,97,0,0,0,97,97,97,97,97,97,45,45,45,699,45,45,45,704,45,45,45,45,45,45,45,45,987,45,45,45,45,45,45,45,67,67,97,97,97,97,0,0,97,97,97,2006,97,97,97,97,0,45,1533,45,45,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,722,723,45,45,45,45,45,45,2045,67,67,67,2047,0,0,97,97,97,2051,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,409,45,45,45,45,45,45,45,45,45,1957,45,67,67,67,67,67,1836,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,45,67,67,67,1761,67,67,67,1764,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,45,45,420,45,45,422,45,45,425,45,45,45,45,45,45,45,387,45,45,45,45,397,45,45,45,67,460,67,67,67,67,67,67,67,67,67,67,67,67,67,67,515,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,97,0,2039,97,97,97,97,97,45,45,45,45,1426,45,45,45,67,67,67,67,67,67,67,67,67,1689,67,67,67,97,557,97,97,97,97,97,97,97,97,97,97,97,97,97,97,612,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,896,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,97,45,939,45,45,45,45,943,45,45,45,45,45,45,45,45,45,45,1916,67,67,67,67,67,45,67,67,67,67,67,67,67,1015,67,67,67,67,1019,67,67,67,67,67,67,1271,67,67,67,67,67,67,1277,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,67,67,67,804,67,67,67,67,67,1077,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2543616,2170880,2170880,2170880,2170880,2170880,2629632,1169,97,1171,97,97,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,936,45,45,67,67,214,67,220,67,67,233,67,243,67,248,67,67,67,67,67,67,1298,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,1617,97,0,0,0,45,45,45,1183,45,45,45,45,45,45,45,45,45,393,45,45,45,45,45,45,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,1281,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,776,1323,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,907,45,1412,45,45,45,45,45,45,45,1418,45,45,45,45,45,45,686,45,45,45,690,45,45,695,45,45,67,67,67,67,67,1465,67,67,67,67,67,67,67,67,67,67,67,97,97,97,1712,97,97,97,97,1741,97,97,97,45,45,45,45,45,45,45,45,45,426,45,45,45,45,45,45,67,67,67,1924,67,67,67,67,67,97,97,97,97,97,0,0,97,97,1983,97,97,45,45,1987,45,1988,45,0,97,97,97,97,0,0,0,1942,97,97,97,97,97,45,45,45,700,45,45,45,45,45,45,45,45,45,45,711,45,45,153,45,45,166,45,176,45,181,45,45,188,191,196,45,204,255,258,263,67,271,67,67,0,37139,24853,0,0,0,282,41098,65820,97,97,97,294,97,300,97,97,313,97,323,97,328,97,97,335,338,343,97,351,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,41098,0,140,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,45,1411,67,67,486,67,67,67,67,67,67,67,67,67,67,67,67,67,1251,67,67,501,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,67,67,67,67,1443,67,67,67,67,67,67,67,67,67,67,1263,67,67,67,67,67,97,97,583,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1526,97,598,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,0,97,97,1796,97,97,97,97,97,97,97,45,45,45,45,45,1744,45,45,45,369,0,651,45,653,45,654,45,656,45,45,45,660,45,45,45,45,1558,45,45,45,45,45,45,45,45,1566,45,45,681,45,683,45,45,45,45,45,45,45,45,691,692,694,45,45,45,716,45,45,45,45,45,45,45,45,45,45,45,45,709,45,45,712,45,714,45,45,45,718,45,45,45,45,45,45,45,726,45,45,45,733,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,747,67,67,67,67,67,67,67,67,67,760,67,67,67,0,0,0,0,0,0,97,1613,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,67,764,67,67,67,67,768,67,770,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,1977,67,778,779,781,67,67,67,67,67,67,788,789,67,67,792,793,67,67,67,813,67,67,67,67,67,67,67,67,67,824,37689,544,25403,546,70179,0,0,66365,66365,552,0,836,97,838,97,839,97,841,97,97,97,845,97,97,97,97,97,97,97,97,97,858,97,97,0,1728,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,1802,45,97,97,862,97,97,97,97,866,97,868,97,97,97,97,97,97,0,0,97,97,1788,97,97,97,0,0,97,97,876,877,879,97,97,97,97,97,97,886,887,97,97,890,891,97,97,97,97,97,97,97,899,97,97,97,903,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,1646,97,97,97,97,911,97,97,97,97,97,97,97,97,97,922,923,45,955,45,957,45,45,45,45,45,45,45,45,45,45,45,45,195,45,45,45,45,45,981,982,45,45,45,45,45,45,989,45,45,45,45,45,170,45,45,45,45,45,45,45,45,45,45,411,45,45,45,45,45,67,1023,67,67,67,67,67,67,1031,67,1033,67,67,67,67,67,67,67,817,819,67,67,67,67,67,37689,544,67,1065,67,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,1078,67,67,1081,1082,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2437406,2171166,2171166,97,1115,97,1117,97,97,97,97,97,97,1125,97,1127,97,97,97,0,97,97,97,0,97,97,97,97,1644,97,97,97,0,97,97,97,0,97,97,1642,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,97,316,97,97,97,97,97,97,97,97,97,1159,97,97,97,97,97,97,97,97,97,97,97,97,97,1502,97,97,97,97,97,1172,97,97,1175,1176,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,935,45,45,45,1233,45,45,45,1236,45,45,45,45,45,45,45,67,67,67,67,67,67,1873,67,67,45,45,1218,45,45,45,1223,45,45,45,45,45,45,45,1230,45,45,67,67,215,219,222,67,230,67,67,244,246,249,67,67,67,67,67,67,1882,97,97,97,97,0,0,0,97,97,97,97,97,97,45,1904,45,1905,45,67,67,67,67,67,1258,67,1260,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,67,67,67,1283,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,67,818,67,67,67,67,67,67,37689,544,67,67,1295,67,67,67,67,67,67,67,67,0,0,0,0,0,0,2174976,0,0,97,97,97,1326,97,97,97,97,97,97,97,97,97,97,97,97,97,1514,97,97,97,97,97,1338,97,1340,97,97,97,97,97,97,97,97,97,97,97,1500,97,97,1503,97,1363,97,97,97,97,97,97,97,1370,97,97,97,97,97,97,97,563,97,97,97,97,97,97,578,97,1375,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,685,45,45,45,45,45,45,45,45,45,45,45,1003,45,45,45,45,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1778,97,97,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,609,97,97,97,45,1542,45,45,45,45,45,45,45,1548,45,45,45,45,45,1554,45,1570,1571,45,67,67,67,67,67,67,1578,67,67,67,67,67,67,67,1055,67,67,67,67,67,1061,67,67,1582,67,67,67,67,67,67,67,1588,67,67,67,67,67,1594,67,67,67,67,67,97,2038,0,97,97,97,97,97,2044,45,45,45,995,45,45,45,45,1e3,45,45,45,45,45,45,45,1809,45,1811,45,45,45,45,45,67,1610,1611,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,1618,1647,1649,97,97,97,1652,97,1654,1655,97,0,45,45,45,1658,45,45,67,67,216,67,67,67,67,234,67,67,67,67,252,254,1845,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,945,45,947,45,45,45,45,45,67,67,67,67,67,1881,97,97,97,97,97,0,0,0,97,97,97,97,97,1902,45,45,45,45,45,45,1908,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1921,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,0,97,1937,97,97,1940,0,0,97,97,97,97,97,97,1947,1948,1949,45,45,45,1952,45,1954,45,45,45,45,1959,1960,1961,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,67,67,67,757,67,67,67,67,67,67,1964,67,1966,67,67,67,67,1971,1972,1973,97,0,0,0,97,97,1104,97,97,97,97,97,97,97,97,97,97,884,97,97,97,889,97,97,1978,97,0,0,1981,97,97,97,97,45,45,45,45,45,45,736,45,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,45,67,67,67,67,0,2049,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,933,45,45,45,45,1234,45,45,45,45,45,45,45,45,45,45,67,97,97,288,97,97,97,97,97,97,317,97,97,97,97,97,97,0,0,97,1787,97,97,97,97,0,0,45,45,378,45,45,45,45,45,390,45,45,45,45,45,45,45,424,45,45,45,431,433,45,45,45,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,67,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,97,97,632,97,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,97,97,855,97,97,97,97,67,97,97,97,97,97,97,1837,0,97,97,97,97,97,0,0,0,1897,97,97,97,97,97,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,97,2010,45,45,45,45,45,45,2016,67,67,67,67,67,67,2022,45,2046,67,67,67,0,0,2050,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,932,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,45,45,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,701,702,45,45,705,706,45,45,45,45,45,45,703,45,45,45,45,45,45,45,45,45,719,45,45,45,45,45,725,45,45,45,369,649,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1216,25403,546,70179,0,0,66365,66365,552,834,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,97,1799,97,97,45,45,45,1569,45,45,45,1572,67,67,67,67,67,67,67,67,67,67,67,0,0,0,1306,0,67,67,67,1598,67,67,67,67,67,67,67,67,1606,67,67,1609,97,97,97,1650,97,97,1653,97,97,97,0,45,45,1657,45,45,45,1206,45,45,45,45,45,45,45,45,45,45,45,45,1421,45,45,45,1703,67,67,67,67,67,67,67,67,67,67,97,97,1711,97,97,0,1895,0,97,97,97,97,97,97,45,45,45,45,45,958,45,960,45,45,45,45,45,45,45,45,1913,45,45,1915,67,67,67,67,67,67,67,466,67,67,67,67,67,67,481,67,45,1749,45,45,45,45,45,45,45,45,1755,45,45,45,45,45,173,45,45,45,45,45,45,45,45,45,45,974,45,45,45,45,45,67,67,67,67,67,1773,67,67,67,67,67,67,67,97,97,97,97,1886,0,0,0,97,97,67,2035,2036,67,67,97,0,0,97,2041,2042,97,97,45,45,45,45,1662,45,45,45,45,45,45,45,45,45,45,45,1397,45,45,45,45,151,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,437,205,45,67,67,67,218,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,67,97,97,97,97,298,97,97,97,97,97,97,97,97,97,97,97,870,97,97,97,97,97,97,97,97,352,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,365,0,41098,0,140,45,45,45,45,45,1427,45,45,67,67,67,67,67,67,67,1435,520,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1037,617,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,923,45,1232,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,1919,67,1759,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1021,45,154,45,162,45,45,45,45,45,45,45,45,45,45,45,45,964,45,45,45,206,45,67,67,67,67,221,67,229,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,67,67,755,67,67,67,67,67,67,67,67,785,67,67,67,67,67,67,67,67,802,67,67,67,807,67,67,67,97,97,97,97,353,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,366,0,0,0,140,2170880,2170880,2170880,2416640,402,45,45,45,45,45,45,45,410,45,45,45,45,45,45,45,674,45,45,45,45,45,45,45,45,389,45,394,45,45,398,45,45,45,45,441,45,45,45,45,45,447,45,45,45,454,45,45,67,67,67,67,67,67,67,67,67,67,67,1768,67,67,67,67,67,488,67,67,67,67,67,67,67,496,67,67,67,67,67,67,67,1774,67,67,67,67,67,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,97,97,67,67,523,67,67,527,67,67,67,67,67,533,67,67,67,540,97,97,97,585,97,97,97,97,97,97,97,593,97,97,97,97,97,97,1784,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,0,0,18,18,24,24,0,28,28,97,97,620,97,97,624,97,97,97,97,97,630,97,97,97,637,713,45,45,45,45,45,45,721,45,45,45,45,45,45,45,45,1197,45,45,45,45,45,45,45,45,730,732,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1581,67,45,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,67,775,67,67,67,67,1066,67,67,67,67,67,67,67,67,67,67,67,67,479,67,67,67,67,67,67,1080,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,287,0,0,0,287,0,2379776,2170880,2170880,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,97,920,97,97,0,0,0,0,45,1181,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,45,1219,45,45,45,45,45,45,1226,45,45,45,45,45,45,959,45,45,45,45,45,45,45,45,45,184,45,45,45,45,202,45,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1266,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1279,67,67,67,67,67,272,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,67,1286,67,67,67,67,67,67,67,67,67,1293,67,67,67,1296,67,67,67,67,67,67,67,0,0,0,0,0,281,94,0,0,97,97,97,1366,97,97,97,97,97,97,97,97,97,1373,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,0,97,1376,97,97,97,97,97,97,97,0,0,0,45,45,1384,45,45,67,208,67,67,67,67,67,67,237,67,67,67,67,67,67,67,1069,1070,67,67,67,67,67,67,67,0,37140,24854,0,0,0,0,41098,65821,45,1423,45,45,45,45,45,45,67,67,1431,67,67,67,67,67,67,67,1083,37689,0,25403,0,66365,0,0,0,1436,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1830,67,1452,1453,67,67,67,67,1456,67,67,67,67,67,67,67,67,67,771,67,67,67,67,67,67,1461,67,67,67,1464,67,1466,67,67,67,67,67,67,1470,67,67,67,67,67,67,1587,67,67,67,67,67,67,67,67,1595,1489,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1129,97,1505,1506,97,97,97,97,1510,97,97,97,97,97,97,97,97,97,1163,1164,97,97,97,97,97,1516,97,97,97,1519,97,1521,97,97,97,97,97,97,1525,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,67,67,67,1600,67,67,67,67,67,67,67,67,67,67,67,1301,0,0,0,1307,97,97,1620,97,97,97,97,97,97,97,1627,97,97,97,97,97,97,913,97,97,97,97,919,97,97,97,0,97,97,97,1781,97,97,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,1792,1860,45,1862,1863,45,1865,45,67,67,67,67,67,67,67,67,1875,67,1877,1878,67,1880,67,97,97,97,97,97,1887,0,1889,97,97,18,0,139621,0,0,0,0,0,0,364,237568,0,367,0,97,1893,0,0,0,97,1898,1899,97,1901,97,45,45,45,45,45,2014,45,67,67,67,67,67,2020,67,97,1989,45,1990,45,45,45,67,67,67,67,67,67,1996,67,1997,67,67,67,67,67,273,67,0,37139,24853,0,0,0,0,41098,65820,67,67,97,97,97,97,0,0,97,97,2005,0,97,2007,97,97,18,0,139621,0,0,0,642,0,133,364,0,0,367,41606,0,97,97,2056,2057,0,2059,45,67,0,97,45,67,0,97,45,45,67,209,67,67,67,223,67,67,67,67,67,67,67,67,67,786,67,67,67,791,67,67,45,45,940,45,45,45,45,45,45,45,45,45,45,45,45,45,45,727,45,45,67,67,67,67,67,67,67,67,1016,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,142,45,45,67,210,67,67,67,225,67,67,239,67,67,67,250,67,67,67,67,67,464,67,67,67,67,67,476,67,67,67,67,67,67,67,1709,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,1843,0,67,259,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,289,97,97,97,303,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,97,339,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,0,358,0,0,0,0,0,0,41098,0,140,45,45,45,45,45,1953,45,1955,45,45,45,67,67,67,67,67,67,67,1687,1688,67,67,67,67,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1203,45,458,67,67,67,67,67,67,67,67,67,470,477,67,67,67,67,67,67,67,1970,97,97,97,1974,0,0,0,97,1103,97,97,97,97,97,97,97,97,97,97,97,1372,97,97,97,97,67,522,67,67,67,67,67,67,67,67,67,67,67,536,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,1701,67,555,97,97,97,97,97,97,97,97,97,567,574,97,97,97,97,97,301,97,309,97,97,97,97,97,97,97,97,97,900,97,97,97,905,97,97,97,619,97,97,97,97,97,97,97,97,97,97,97,633,97,97,18,0,139621,0,0,362,0,0,0,364,0,0,367,41606,369,649,45,45,45,45,45,45,45,45,45,45,45,45,663,664,67,67,67,67,750,751,67,67,67,67,758,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,67,1057,1058,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,67,67,67,67,67,67,512,67,67,67,97,97,97,97,895,97,97,97,97,97,97,97,97,97,97,97,902,97,97,97,97,67,67,1051,67,67,67,67,67,67,67,67,67,67,67,1062,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1302,0,0,0,1308,97,97,97,97,1145,97,97,97,97,97,97,97,97,97,97,97,1139,97,97,97,97,1156,97,97,97,97,97,97,1161,97,97,97,97,97,1166,97,97,18,640,139621,0,641,0,0,0,0,364,0,0,367,41606,67,67,67,67,1257,67,67,67,67,67,67,67,67,67,67,67,0,0,1305,0,0,97,97,1337,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1630,97,67,1474,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,2380062,2171166,2171166,97,1529,97,97,0,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,45,45,67,67,67,67,1707,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1891,1739,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,1198,45,1200,45,45,45,45,97,97,1894,0,0,97,97,97,97,97,97,45,45,45,45,45,672,45,45,45,45,45,45,45,45,45,45,45,1420,45,45,45,45,67,67,1965,67,1967,67,67,67,97,97,97,97,0,1976,0,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,97,97,1979,0,0,97,1982,97,97,97,1986,45,45,45,45,45,735,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,1770,67,67,2e3,97,97,97,2002,0,97,97,97,0,97,97,97,97,97,97,1798,97,97,97,45,45,45,2034,67,67,67,67,97,0,0,2040,97,97,97,97,45,45,45,45,1752,45,45,45,1753,1754,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,675,45,45,45,45,45,45,438,45,45,45,45,45,445,45,45,45,45,45,45,45,45,67,1430,67,67,67,67,67,67,67,67,67,524,67,67,67,67,67,531,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1096,97,97,97,621,97,97,97,97,97,628,97,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,665,45,45,45,45,45,45,45,45,45,676,45,45,45,45,45,942,45,45,45,45,45,45,45,45,45,45,707,708,45,45,45,45,763,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,809,810,67,67,67,67,783,67,67,67,67,67,67,67,67,67,67,67,0,1303,0,0,0,97,861,97,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,45,45,956,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,67,67,67,67,1027,67,67,67,67,1032,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1097,1064,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,67,1098,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,331,97,97,97,97,1158,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,1309,0,0,0,1315,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1374,97,45,45,1543,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1240,67,67,1583,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1252,67,97,97,97,1635,97,97,97,0,97,97,97,97,97,97,97,97,1800,97,45,45,45,97,97,1793,97,97,97,97,97,97,97,97,97,97,45,45,45,1743,45,45,45,1746,45,0,97,97,97,97,97,1851,97,45,45,45,45,1856,45,45,45,45,1864,45,45,67,67,1869,67,67,67,67,1874,67,0,97,97,45,67,2058,97,45,67,0,97,45,67,0,97,45,45,67,211,67,67,67,67,67,67,240,67,67,67,67,67,67,67,1444,67,67,67,67,67,67,67,67,67,509,67,67,67,67,67,67,67,67,67,268,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,290,97,97,97,305,97,97,319,97,97,97,330,97,97,18,640,139621,0,641,0,0,0,0,364,0,643,367,41606,97,97,348,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,45,45,380,45,45,45,45,45,45,395,45,45,45,400,369,0,45,45,45,45,45,45,45,45,658,45,45,45,45,45,972,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,745,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,67,67,37689,1086,25403,1090,66365,1094,0,0,97,843,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,1121,97,97,97,97,1126,97,97,97,97,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1400,45,67,67,67,1011,67,67,67,67,67,67,67,67,67,67,67,0,1304,0,0,0,1190,45,45,1193,1194,45,45,45,45,45,1199,45,1201,45,45,45,45,1911,45,45,45,45,45,67,67,67,67,67,67,67,1579,67,67,67,67,45,1205,45,45,45,45,45,45,45,45,1211,45,45,45,45,45,984,45,45,45,45,45,45,45,45,45,45,45,1550,45,45,45,45,45,1217,45,45,45,45,45,45,1225,45,45,45,45,1229,45,45,45,1388,45,45,45,45,45,45,1396,45,45,45,45,45,444,45,45,45,45,45,45,45,45,45,67,67,1574,67,67,67,67,67,67,67,67,67,67,1590,67,67,67,67,67,1254,67,67,67,67,67,1259,67,1261,67,67,67,67,1265,67,67,67,67,67,67,1708,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,0,0,67,67,67,67,1285,67,67,67,67,1289,67,67,67,67,67,67,67,67,37689,1087,25403,1091,66365,1095,0,0,97,97,97,97,1339,97,1341,97,97,97,97,1345,97,97,97,97,97,561,97,97,97,97,97,573,97,97,97,97,97,97,1717,97,0,97,97,97,97,97,97,97,591,97,97,97,97,97,97,97,97,97,1329,97,97,97,97,97,97,97,97,97,97,1351,97,97,97,97,97,97,1357,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,568,97,97,97,97,97,97,97,1365,97,97,97,97,1369,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1399,45,45,45,1413,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1669,45,1422,45,45,1425,45,45,1428,45,1429,67,67,67,67,67,67,67,67,1468,67,67,67,67,67,67,67,67,529,67,67,67,67,67,67,539,67,67,1475,67,0,0,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,97,97,1530,97,0,45,45,1534,45,45,45,45,45,45,45,45,1956,45,45,67,67,67,67,67,67,67,67,67,1599,67,67,1601,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,67,1632,97,1634,0,97,97,97,1640,97,97,97,1643,97,97,1645,97,97,97,97,97,912,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,1660,1661,45,45,45,45,1665,1666,45,45,45,45,45,1670,1692,1693,67,67,67,67,67,1697,67,67,67,67,67,67,67,1702,97,97,1714,1715,97,97,97,97,0,1721,1722,97,97,97,97,97,97,1353,97,97,97,97,97,97,97,97,1362,1726,97,0,0,97,97,97,0,97,97,97,1734,97,97,97,97,97,848,849,97,97,97,97,856,97,97,97,97,97,354,0,53264,0,18,18,24,24,0,28,28,45,45,1750,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1681,45,0,1846,97,97,97,97,97,97,45,45,1854,45,45,45,45,1859,67,67,67,1879,67,67,97,97,1884,97,97,0,0,0,97,97,97,1105,97,97,97,97,97,97,97,97,97,97,1344,97,97,97,1347,97,1892,97,0,0,0,97,97,97,1900,97,97,45,45,45,45,45,997,45,45,45,45,45,45,45,45,45,45,1002,45,45,1005,1006,45,67,67,67,67,67,1926,67,67,1928,97,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,1737,97,0,97,97,97,97,0,0,0,97,97,1944,97,97,1946,45,45,45,1544,45,45,45,45,45,45,45,45,45,45,45,45,190,45,45,45,152,155,45,163,45,45,177,179,182,45,45,45,193,197,45,45,45,1672,45,45,45,45,45,1677,45,1679,45,45,45,45,996,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,67,260,264,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,295,299,302,97,310,97,97,324,326,329,97,97,97,0,97,97,1639,0,1641,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,97,97,97,1523,97,97,97,97,97,97,97,97,1719,97,97,97,97,97,97,97,97,1720,97,97,97,97,97,97,97,312,97,97,97,97,97,97,97,97,1123,97,97,97,97,97,97,97,340,344,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,373,375,419,45,45,45,45,45,45,45,45,45,428,45,45,435,45,45,45,1751,45,45,45,45,45,45,45,45,45,45,45,45,1410,45,45,45,67,67,67,505,67,67,67,67,67,67,67,67,67,514,67,67,67,67,67,67,1969,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,0,97,2064,2065,0,2066,45,521,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,465,67,67,67,474,67,67,67,67,67,67,67,1467,67,67,67,67,67,67,67,67,67,97,97,97,97,97,1933,0,97,97,97,602,97,97,97,97,97,97,97,97,97,611,97,97,18,640,139621,358,641,0,0,0,0,364,0,0,367,0,618,97,97,97,97,97,97,97,97,97,97,631,97,97,97,97,97,881,97,97,97,97,97,97,97,97,97,97,569,97,97,97,97,97,369,0,45,652,45,45,45,45,45,657,45,45,45,45,45,45,1235,45,45,45,45,45,45,45,45,67,67,67,1432,67,67,67,67,67,67,67,766,67,67,67,67,67,67,67,67,773,67,67,67,0,1305,0,1311,0,1317,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,97,0,97,97,97,1724,97,97,97,777,67,67,782,67,67,67,67,67,67,67,67,67,67,67,67,535,67,67,67,67,67,67,67,814,67,67,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,0,97,837,97,97,97,97,97,97,1496,97,97,97,97,97,97,97,97,97,97,918,97,97,97,97,0,842,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1168,97,97,97,97,864,97,97,97,97,97,97,97,97,871,97,97,97,0,1637,97,97,0,97,97,97,97,97,97,97,97,97,97,1801,45,45,97,875,97,97,880,97,97,97,97,97,97,97,97,97,97,97,1151,1152,97,97,97,67,67,67,1040,67,67,67,67,67,67,67,67,67,67,67,67,790,67,67,67,1180,0,649,45,45,45,45,45,45,45,45,45,45,45,45,45,200,45,45,67,67,67,1454,67,67,67,67,67,67,67,67,67,67,67,67,806,67,67,67,0,0,0,1481,0,1094,0,0,97,1483,97,97,97,97,97,97,304,97,97,318,97,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,97,97,1332,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,1633,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,1381,0,0,45,45,45,45,97,97,1727,0,97,97,97,0,97,97,97,97,97,97,97,97,626,97,97,97,97,97,97,636,45,45,1760,67,67,67,67,67,67,67,1765,67,67,67,67,67,67,67,1299,67,67,67,0,0,0,0,0,0,97,97,97,97,1616,97,97,1803,45,45,45,45,1807,45,45,45,45,45,1813,45,45,45,67,67,1684,67,67,67,67,67,67,67,67,67,67,67,822,67,67,37689,544,67,67,1818,67,67,67,67,1822,67,67,67,67,67,1828,67,67,67,67,67,97,0,0,97,97,97,97,97,45,45,45,2012,2013,45,45,67,67,67,2018,2019,67,67,97,67,97,97,97,1833,97,97,0,0,97,97,1840,97,97,0,0,97,97,97,0,97,97,1733,97,1735,97,97,97,0,97,97,97,1849,97,97,97,45,45,45,45,45,1857,45,45,45,1910,45,1912,45,45,1914,45,67,67,67,67,67,67,67,67,67,67,1017,67,67,1020,67,45,1861,45,45,45,45,45,67,67,67,67,67,1872,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,67,1446,67,67,67,67,67,1876,67,67,67,67,67,97,97,97,97,97,0,0,0,1890,97,97,97,97,97,1134,97,97,97,97,97,97,97,97,97,97,570,97,97,97,97,580,1935,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1906,45,67,67,67,67,2048,0,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,931,45,45,45,45,45,45,1674,45,1676,45,45,45,45,45,45,45,446,45,45,45,45,45,45,45,67,67,67,67,1871,67,67,67,67,0,97,97,45,67,0,97,2060,2061,0,2063,45,67,0,97,45,45,156,45,45,45,45,45,45,45,45,45,192,45,45,45,45,1673,45,45,45,45,45,45,45,45,45,45,45,429,45,45,45,45,67,67,67,269,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,349,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,374,45,45,67,67,213,217,67,67,67,67,67,242,67,247,67,253,45,45,698,45,45,45,45,45,45,45,45,45,45,45,45,45,399,45,45,0,0,0,0,925,41606,0,929,0,0,45,45,45,45,45,45,1391,45,45,1395,45,45,45,45,45,45,423,45,45,45,45,45,45,45,436,45,67,67,67,67,1041,67,1043,67,67,67,67,67,67,67,67,67,67,1776,67,67,97,97,97,1099,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,888,97,97,97,1131,97,97,97,97,1135,97,1137,97,97,97,97,97,97,97,1497,97,97,97,97,97,97,97,97,97,883,97,97,97,97,97,97,1310,0,0,0,1316,0,0,0,0,1100,0,0,0,97,97,97,97,97,1107,97,97,97,97,97,97,97,97,1343,97,97,97,97,97,97,1348,0,0,1317,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,1112,97,45,1804,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1868,67,1870,67,67,67,67,67,1817,67,67,1819,67,67,67,67,67,67,67,67,67,67,67,67,823,67,37689,544,67,97,1832,97,97,1834,97,0,0,97,97,97,97,97,0,0,97,97,97,0,1732,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,97,1177,0,0,925,0,0,0,0,97,97,97,97,0,0,1941,97,97,97,97,97,97,45,45,45,1991,1992,45,67,67,67,67,67,67,67,67,67,1998,134,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,941,45,45,944,45,45,45,45,45,45,952,45,45,207,67,67,67,67,67,226,67,67,67,67,67,67,67,67,67,820,67,67,67,67,37689,544,369,650,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1682,25403,546,70179,0,0,66365,66365,552,835,97,97,97,97,97,97,97,1522,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,1725,67,67,67,1695,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,1036,67,67,67,265,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,296,97,97,97,97,314,97,97,97,97,332,334,97,97,97,97,97,1146,1147,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,97,97,345,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,372,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,1213,45,45,45,45,404,406,45,45,45,45,45,45,45,45,45,45,45,45,45,434,45,45,45,440,45,45,45,45,45,45,45,45,451,452,45,45,45,67,1683,67,67,67,1686,67,67,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,490,492,67,67,67,67,67,67,67,67,67,67,67,1447,67,67,1450,67,67,67,67,67,526,67,67,67,67,67,67,67,67,537,538,67,67,67,67,67,506,67,67,508,67,67,511,67,67,67,67,0,1476,0,0,0,0,0,1478,0,0,0,0,0,0,0,0,97,97,1484,97,97,97,97,97,97,865,97,97,97,97,97,97,97,97,97,97,1499,97,97,97,97,97,97,97,97,97,587,589,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,97,97,97,97,623,97,97,97,97,97,97,97,97,634,635,97,97,97,97,97,1160,97,97,97,97,97,97,97,97,97,97,97,1628,97,97,97,97,369,0,45,45,45,45,45,655,45,45,45,45,45,45,45,45,999,45,1001,45,45,45,45,45,45,45,45,715,45,45,45,720,45,45,45,45,45,45,45,45,728,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,840,97,97,97,97,97,1174,97,97,97,97,0,0,925,0,0,0,0,0,0,0,1100,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,97,938,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,680,45,968,45,970,45,973,45,45,45,45,45,45,45,45,45,45,962,45,45,45,45,45,979,45,45,45,45,45,985,45,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,688,45,45,45,45,45,45,45,1007,1008,67,67,67,67,67,1014,67,67,67,67,67,67,67,67,67,1045,67,67,67,67,67,67,67,1038,67,67,67,67,67,67,1044,67,1046,67,1049,67,67,67,67,67,67,800,67,67,67,67,67,67,808,67,67,0,0,0,1102,97,97,97,97,97,1108,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,97,1371,97,97,97,97,97,97,97,97,1132,97,97,97,97,97,97,1138,97,1140,97,1143,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,45,1191,45,45,45,45,45,1196,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,991,45,67,67,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,1048,67,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,97,1386,45,1387,45,45,45,45,45,45,45,45,45,45,45,45,45,455,45,457,45,45,1424,45,45,45,45,45,67,67,67,67,1433,67,1434,67,67,67,67,67,767,67,67,67,67,67,67,67,67,67,67,67,1591,67,1593,67,67,45,45,1805,45,45,45,45,45,45,45,45,45,1814,45,45,1816,67,67,67,67,1820,67,67,67,67,67,67,67,67,67,1829,67,67,67,67,67,815,67,67,67,67,821,67,67,67,37689,544,67,1831,97,97,97,97,1835,0,0,97,97,97,97,97,0,0,97,97,97,1731,97,97,97,97,97,97,97,97,97,853,97,97,97,97,97,97,0,97,97,97,97,1850,97,97,45,45,45,45,45,45,45,45,1547,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,961,45,45,45,45,965,45,967,1907,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1920,0,1936,97,97,97,0,0,0,97,97,97,97,97,97,45,45,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,67,67,97,97,97,97,0,0,28672,97,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,2054,97,97,291,97,97,97,97,97,97,320,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,97,12288,0,925,926,1179,0,45,377,45,45,45,381,45,45,392,45,45,396,45,45,45,45,971,45,45,45,45,45,45,45,45,45,45,45,45,1756,45,45,45,67,67,67,67,463,67,67,67,467,67,67,478,67,67,482,67,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,1472,67,502,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1460,67,97,97,97,97,560,97,97,97,564,97,97,575,97,97,579,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,930,97,599,97,97,97,97,97,97,97,97,97,97,97,97,97,97,872,97,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1758,0,362,0,0,925,41606,0,0,0,0,45,45,934,45,45,45,164,168,174,178,45,45,45,45,45,194,45,45,45,165,45,45,45,45,45,45,45,45,45,199,45,45,45,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,67,1060,67,67,67,67,67,67,1052,1053,67,67,67,67,67,67,67,67,67,67,1063,97,1157,97,97,97,97,97,97,97,97,97,97,97,97,1167,97,97,97,97,97,1379,97,97,97,0,0,0,45,1383,45,45,45,1806,45,45,45,45,45,45,1812,45,45,45,45,67,67,67,67,67,1577,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,1282,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1471,67,45,1402,45,45,45,45,45,45,45,45,45,45,45,45,45,45,417,45,67,1462,67,67,67,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,1517,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1128,97,97,97,97,1636,97,97,97,0,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,1705,67,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,1842,0,0,1779,97,97,97,1782,97,0,0,97,97,97,97,97,97,0,0,97,97,97,1789,97,97,0,0,0,97,1847,97,97,97,97,97,45,45,45,45,45,45,45,45,1675,45,45,45,45,45,45,45,45,737,738,67,740,67,741,67,743,67,67,67,67,67,67,1968,67,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,2062,97,45,67,0,97,45,67,67,97,97,2001,97,0,0,2004,97,97,0,97,97,97,97,1797,97,97,97,97,97,45,45,45,67,261,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,292,97,97,97,97,311,315,321,325,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,97,97,1330,97,97,1333,1334,97,341,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,363,364,0,367,41098,369,140,45,45,45,45,1221,45,45,45,45,45,45,45,45,45,45,45,413,45,45,416,45,376,45,45,45,45,382,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,45,45,403,45,45,45,45,45,45,45,45,45,45,414,45,45,45,418,67,67,67,462,67,67,67,67,468,67,67,67,67,67,67,67,67,1602,67,1604,67,67,67,67,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,500,67,67,67,67,67,1067,67,67,67,67,67,1072,67,67,67,67,67,67,274,0,37139,24853,0,0,0,0,41098,65820,67,67,504,67,67,67,67,67,67,67,510,67,67,67,517,519,541,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,554,97,97,97,559,97,97,97,97,565,97,97,97,97,97,97,97,1718,0,97,97,97,97,97,97,97,898,97,97,97,97,97,97,906,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,597,97,97,97,97,97,1520,97,97,97,97,97,97,97,97,97,97,0,45,1656,45,45,45,97,97,601,97,97,97,97,97,97,97,607,97,97,97,614,616,638,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,369,0,45,45,45,45,45,45,45,45,45,45,661,45,45,45,407,45,45,45,45,45,45,45,45,45,45,45,45,45,1815,45,67,45,667,45,45,45,45,45,45,45,45,45,45,678,45,45,45,421,45,45,45,45,45,45,45,45,45,45,45,45,976,977,45,45,45,682,45,45,45,45,45,45,45,45,45,45,693,45,45,697,67,67,748,67,67,67,67,754,67,67,67,67,67,67,67,67,67,1274,67,67,67,67,67,67,67,67,765,67,67,67,67,769,67,67,67,67,67,67,67,67,67,1589,67,67,67,67,67,67,67,67,780,67,67,784,67,67,67,67,67,67,67,67,67,67,67,1777,67,97,97,97,97,97,97,846,97,97,97,97,852,97,97,97,97,97,97,97,1742,45,45,45,45,45,45,45,1747,97,97,97,863,97,97,97,97,867,97,97,97,97,97,97,97,308,97,97,97,97,97,97,97,97,97,97,12288,1178,925,0,1179,0,97,97,97,878,97,97,882,97,97,97,97,97,97,97,97,97,97,12288,0,925,0,1179,0,908,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,0,954,45,45,45,45,45,45,45,45,45,45,963,45,45,966,45,45,157,45,45,171,45,45,45,45,45,45,45,45,45,45,948,45,45,45,45,45,1022,67,67,1026,67,67,67,1030,67,67,67,67,67,67,67,67,67,1603,1605,67,67,67,1608,67,67,67,1039,67,67,1042,67,67,67,67,67,67,67,67,67,67,471,67,67,67,67,67,0,1100,0,97,97,97,97,97,97,97,97,97,97,97,97,97,904,97,97,97,97,1116,97,97,1120,97,97,97,1124,97,97,97,97,97,97,562,97,97,97,571,97,97,97,97,97,97,97,97,97,1133,97,97,1136,97,97,97,97,97,97,97,97,915,917,97,97,97,97,97,0,97,1170,97,97,97,97,97,97,97,97,0,0,925,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,45,1993,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,1278,67,0,0,0,45,45,1182,45,45,45,45,45,45,45,45,45,1189,1204,45,45,45,1207,45,45,1209,45,1210,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,45,689,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,236,67,67,67,67,67,67,67,801,67,67,67,805,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,1249,67,67,67,67,67,67,507,67,67,67,67,67,67,67,67,67,67,1300,0,0,0,0,0,1267,67,67,1269,67,1270,67,67,67,67,67,67,67,67,67,1280,97,1349,97,1350,97,97,97,97,97,97,97,97,97,1360,97,97,97,0,1980,97,97,97,97,97,45,45,45,45,45,45,673,45,45,45,45,677,45,45,45,45,1401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,953,67,1437,67,1440,67,67,67,67,1445,67,67,67,1448,67,67,67,67,67,67,1029,67,67,67,67,67,67,67,67,67,67,1825,67,67,67,67,67,1473,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,1320,0,834,97,97,97,97,1490,97,1493,97,97,97,97,1498,97,97,97,1501,97,97,97,0,97,1638,97,0,97,97,97,97,97,97,97,97,916,97,97,97,97,97,97,0,1528,97,97,97,0,45,45,45,1535,45,45,45,45,45,45,45,1867,67,67,67,67,67,67,67,67,67,97,97,97,97,1932,0,0,1555,45,45,45,45,45,45,45,45,45,45,45,45,45,1567,45,45,158,45,45,172,45,45,45,183,45,45,45,45,201,45,45,67,212,67,67,67,67,231,235,241,245,67,67,67,67,67,67,493,67,67,67,67,67,67,67,67,67,67,472,67,67,67,67,67,97,97,97,97,1651,97,97,97,97,97,0,45,45,45,45,45,45,45,1539,45,45,45,67,1704,67,1706,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,1841,97,0,1844,97,97,97,97,1716,97,97,97,0,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1385,1748,45,45,45,45,45,45,45,45,45,45,45,45,45,1757,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,97,97,1780,97,97,97,0,0,1786,97,97,97,97,97,0,0,97,97,1730,0,97,97,97,97,97,1736,97,1738,67,97,97,97,97,97,97,0,1838,97,97,97,97,97,0,0,97,1729,97,0,97,97,97,97,97,97,97,97,1162,97,97,97,1165,97,97,97,45,1950,45,45,45,45,45,45,45,45,1958,67,67,67,1962,67,67,67,67,67,1246,67,67,67,67,67,67,67,67,67,67,67,97,1710,97,97,97,1999,67,97,97,97,97,0,2003,97,97,97,0,97,97,2008,2009,45,67,67,67,67,0,0,97,97,97,97,45,2052,67,2053,0,0,0,0,925,41606,0,0,930,0,45,45,45,45,45,45,1392,45,1394,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,45,1563,1565,45,45,45,1568,0,97,2055,45,67,0,97,45,67,0,97,45,67,28672,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,679,45,45,67,67,266,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,346,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,362,0,364,0,367,41098,369,140,371,45,45,45,379,45,45,45,388,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,449,45,45,45,45,45,67,67,542,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,97,97,97,97,1622,97,97,97,97,97,97,97,1629,97,97,0,1794,1795,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1745,45,45,97,639,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,45,731,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,251,67,67,67,67,67,798,67,67,67,67,67,67,67,67,67,67,67,67,1073,67,67,67,860,97,97,97,97,97,97,97,97,97,97,97,97,97,97,873,0,0,1101,97,97,97,97,97,97,97,97,97,97,97,97,97,921,97,0,67,67,67,67,1245,67,67,67,67,67,67,67,67,67,67,67,67,1250,67,67,1253,0,0,1312,0,0,0,1318,0,0,0,0,0,0,97,97,97,97,1106,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,97,1155,97,97,1325,97,97,97,97,97,97,97,97,97,97,97,97,97,1141,97,97,67,67,1439,67,1441,67,67,67,67,67,67,67,67,67,67,67,67,1264,67,67,67,97,97,1492,97,1494,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,97,67,67,67,2037,67,97,0,0,97,97,97,2043,97,45,45,45,442,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,232,67,67,67,67,67,67,67,67,1823,67,67,67,67,67,67,67,67,97,97,97,97,1975,0,0,97,874,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1142,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,65,86,117,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,63,84,115,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,61,82,113,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,59,80,111,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,57,78,109,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,55,76,107,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,53,74,105,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,51,72,103,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,49,70,101,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,47,68,99,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,45,67,97,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,213085,53264,18,49172,57366,24,8192,28,102432,0,0,0,44,0,0,32863,53264,18,49172,57366,24,8192,28,102432,0,41,41,41,0,0,1138688,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,89,53264,18,18,49172,0,57366,0,24,24,24,0,127,127,127,127,102432,67,262,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,342,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,360,0,0,364,0,367,41098,369,140,45,45,45,45,717,45,45,45,45,45,45,45,45,45,45,45,412,45,45,45,45,45,67,1009,67,67,67,67,67,67,67,67,67,67,67,67,67,1292,67,67,1294,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,1615,97,97,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,66,87,118,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,64,85,116,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,62,83,114,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,60,81,112,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,58,79,110,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,56,77,108,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,54,75,106,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,52,73,104,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,50,71,102,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,48,69,100,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,46,67,98,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,233472,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,69724,53264,18,18,49172,0,57366,262144,24,24,24,0,28,28,28,28,102432,45,45,161,45,45,45,45,45,45,45,45,45,45,45,45,45,710,45,45,28,139621,359,0,0,0,364,0,367,41098,369,140,45,45,45,45,1389,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,45,67,503,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1449,67,67,97,600,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1154,97,0,0,0,0,925,41606,927,0,0,0,45,45,45,45,45,45,1866,67,67,67,67,67,67,67,67,67,67,772,67,67,67,67,67,45,45,969,45,45,45,45,45,45,45,45,45,45,45,45,45,951,45,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,45,0,0,0,1314,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1488,67,67,267,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,347,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,361,0,0,364,0,367,41098,369,140,45,45,45,45,734,45,45,45,67,67,67,67,67,742,67,67,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,1214,45,45,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1361,97,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,45,45,0,0,0,0,2220032,0,0,1130496,0,0,0,0,2170880,2171020,2170880,2170880,18,0,0,131072,0,0,0,90112,0,2220032,0,0,0,0,0,0,0,0,97,97,97,1485,97,97,97,97,0,45,45,45,45,45,1537,45,45,45,45,45,1390,45,1393,45,45,45,45,1398,45,45,45,2170880,2171167,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,0,0,0,0,0,2183168,0,0,0,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2721252,2744320,2170880,2170880,2170880,2834432,2840040,2170880,2908160,2170880,2170880,2936832,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3014656,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,0,0,0,0,2220032,0,0,0,1142784,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3215360,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,543,0,545,0,0,2183168,0,0,831,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,2170880,2170880,3092480,2170880,2170880,3125248,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,0,0,0,67,67,37139,37139,24853,24853,0,0,0,0,0,65820,65820,0,287,97,97,97,97,97,1783,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,1791,0,0,546,70179,0,0,0,0,552,0,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,97,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,0,0,147456,0,0,0,0,925,41606,0,928,0,0,45,45,45,45,45,45,998,45,45,45,45,45,45,45,45,45,1562,45,1564,45,45,45,45,0,2158592,2158592,0,0,0,0,2232320,2232320,2232320,0,2240512,2240512,2240512,2240512,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640],r.EXPECTED=[291,300,304,341,315,309,305,295,319,323,327,329,296,333,337,339,342,346,350,294,356,360,312,367,352,371,363,375,379,383,387,391,395,726,399,405,518,684,405,405,405,405,808,405,405,405,512,405,405,405,431,405,405,406,405,405,404,405,405,405,405,405,405,405,908,631,410,415,405,414,419,608,405,429,602,405,435,443,405,441,641,478,405,447,451,450,456,643,461,460,762,679,465,469,741,473,477,482,486,492,932,931,523,498,504,720,405,510,596,405,516,941,580,522,929,527,590,589,897,939,534,538,547,551,555,559,563,567,571,969,575,708,690,689,579,584,634,405,594,731,405,600,882,405,606,895,786,452,612,405,615,620,876,624,628,638,647,651,655,659,663,667,676,683,688,695,694,791,405,699,437,405,706,714,405,712,825,870,405,718,724,769,768,823,730,735,745,751,422,755,759,425,766,902,810,587,775,888,887,405,773,992,405,779,962,405,785,781,986,790,795,797,506,500,499,801,805,814,820,829,833,837,841,845,849,853,857,861,616,865,869,868,488,405,874,816,405,880,738,405,886,892,543,405,901,906,913,912,918,494,541,922,926,936,945,949,953,957,530,966,973,960,702,701,405,979,981,405,985,747,405,990,998,914,405,996,1004,672,975,974,1014,1002,1008,670,1012,405,405,405,405,405,401,1018,1022,1026,1106,1071,1111,1111,1111,1082,1145,1030,1101,1034,1038,1106,1106,1106,1106,1046,1206,1052,1106,1072,1111,1111,1042,1134,1065,1111,1112,1056,1160,1207,1062,1204,1208,1069,1106,1106,1106,1076,1111,1207,1161,1122,1205,1064,1094,1106,1106,1107,1111,1111,1111,1078,1086,1207,1092,1098,1046,1058,1106,1106,1110,1111,1111,1116,1120,1161,1126,1202,1104,1106,1145,1146,1129,1138,1088,1151,1048,1157,1153,1132,1141,1165,1107,1111,1172,1179,1109,1183,1175,1143,1147,1187,1108,1191,1195,1144,1199,1168,1212,1216,1220,1224,1228,1232,1236,1557,1247,1241,1241,1038,1434,1241,1241,1241,1241,1254,1275,1617,1241,1280,1287,1241,1241,1241,1287,1241,2114,1291,1241,1243,1241,2049,1824,2094,2095,1520,1309,1241,1241,1302,1241,1321,1311,1241,1241,1313,1778,1325,1336,1241,1241,1325,1330,1353,1241,1241,1695,1354,1241,1241,1241,1294,1686,1331,1241,1696,1368,1241,1338,1370,1241,1392,1399,1364,2017,1406,2016,1405,1716,1406,1407,1422,1417,1421,1241,1241,1241,1349,1426,1241,1774,1756,1241,1773,1241,1241,1345,1964,1812,1432,1241,1241,1345,1993,1459,1241,1241,1241,1395,1848,1767,1465,1241,1241,1394,1847,1242,1477,1241,1241,1428,1241,1445,1492,1241,1241,1438,1241,1499,1241,1241,1241,1455,1241,1818,1448,1241,1250,1241,2026,1623,1449,1241,1612,1616,1241,1614,1241,1257,1241,1241,1985,1292,1586,1512,1241,1517,2050,1526,1674,1519,1524,1647,2051,1532,1537,1551,1544,1550,1555,1561,1571,1578,1584,1590,1591,1653,1595,1602,1606,1610,1634,1628,1640,1633,1645,1241,1241,1241,1469,1241,1970,1651,1241,1270,1241,1241,1819,1449,1241,1293,1664,1241,1241,1481,1485,1574,1672,1241,1241,1513,1317,1487,1684,1241,1241,1533,1299,1694,1241,1241,1295,1241,1241,1241,1546,1700,1241,1241,1707,1241,1713,1241,1849,1715,1241,1720,1241,1276,1267,1241,1241,2107,1657,1864,1241,1881,1241,1326,1292,1241,1685,1358,1724,1338,1241,1363,1362,1342,1340,1361,1339,1833,1372,1360,1833,1833,1342,1343,1835,1341,1731,1738,1344,1241,1745,1241,1379,1241,1241,2092,1241,1388,1761,1754,1241,1386,1241,1400,1760,1241,1241,1241,1598,1734,1241,1241,1241,1635,1645,1241,1780,1766,1241,1241,1332,1771,1241,1241,1629,2079,1241,1242,1784,1241,1241,1680,1639,2063,1790,1241,1241,1741,1241,1241,1800,1241,1241,1762,1473,1241,1806,1241,1241,1786,1240,1709,1241,1241,1241,1668,1811,1241,1940,1241,1401,1974,1241,1408,1413,1382,1241,1816,1241,1241,1802,2086,1811,1241,1817,1945,1823,2095,2095,2047,2094,2046,2080,1241,1409,1312,1376,2096,2048,1241,1241,1807,1241,1241,1241,2035,1241,1241,1828,1241,2057,2061,1241,1241,1843,1241,2059,1241,1241,1241,1690,1847,1241,1241,1241,1703,2102,1848,1241,1241,1853,1292,1848,1241,2016,1857,1241,2002,1868,1241,1436,1241,1241,1271,1305,1241,1874,1241,1241,1884,2037,1892,1241,1890,1241,1461,1241,1241,1795,1241,1241,1891,1241,1878,1241,1888,1241,1888,1905,1896,2087,1912,1903,1241,1911,1906,1916,1905,2027,1863,1925,2088,1859,1861,1922,1927,1931,1935,1494,1241,1241,1918,1907,1939,1917,1944,1949,1241,1241,1451,1955,1241,1241,1241,1796,1727,2061,1241,1241,1899,1241,1660,1968,1241,1241,1951,1678,1978,1241,1241,1241,1839,1241,1241,1984,1982,1241,1488,1241,1241,1624,1450,1989,1241,1241,1241,1870,1995,1292,1241,1241,1958,1261,1241,1996,1241,1241,1241,2039,2008,1241,1241,1750,2e3,1241,1256,2001,1960,1241,1564,1241,1504,1241,1241,1442,1241,1241,1564,1528,1263,1241,1508,1241,1241,1468,1498,2006,1540,2015,1539,2014,1748,2013,1539,1831,2014,2012,1500,1567,2022,2021,1241,1580,1241,1241,2033,2037,1791,2045,2031,1241,1621,1241,1641,2044,1241,1241,1241,2093,1241,1241,2055,1241,1241,2067,1241,1283,1241,1241,1241,2101,2071,1241,1241,1241,2073,1848,2040,1241,1241,1241,2077,1241,1241,2106,1241,1241,2084,1241,2111,1241,1241,1381,1380,1241,1241,1241,2100,1241,2129,2118,2122,2126,2197,2133,3010,2825,2145,2698,2156,2226,2160,2161,2165,2174,2293,2194,2630,2201,2203,2152,3019,2226,2263,2209,2213,2218,2269,2292,2269,2269,2184,2226,2238,2148,2151,3017,2245,2214,2269,2269,2185,2226,2292,2269,2291,2269,2269,2269,2292,2205,3019,2226,2226,2160,2160,2160,2261,2160,2160,2160,2262,2276,2160,2160,2277,2216,2283,2216,2269,2269,2268,2269,2267,2269,2269,2269,2271,2568,2292,2269,2293,2269,2182,2190,2269,2186,2226,2226,2226,2226,2227,2160,2160,2160,2160,2263,2160,2275,2277,2282,2215,2217,2269,2269,2291,2269,2269,2293,2291,2269,2220,2269,2295,2294,2269,2269,2305,2233,2262,2278,2218,2269,2234,2226,2226,2228,2160,2160,2160,2289,2220,2294,2294,2269,2269,2304,2269,2160,2160,2287,2269,2269,2305,2269,2269,2312,2269,2269,2225,2226,2160,2287,2289,2219,2304,2295,2314,2234,2226,2314,2269,2226,2226,2160,2288,2219,2222,2304,2296,2269,2224,2160,2160,2269,2302,2294,2314,2224,2226,2288,2220,2294,2269,2290,2269,2269,2293,2269,2269,2269,2269,2270,2221,2313,2225,2227,2160,2300,2269,2225,2261,2309,2234,2229,2223,2318,2318,2318,2328,2336,2340,2344,2350,2637,2712,2358,2362,2372,2135,2378,2398,2135,2135,2135,2135,2136,2417,2241,2135,2378,2135,2135,2980,2984,2135,3006,2135,2135,2135,2945,2931,2425,2400,2135,2135,2135,2954,2135,2481,2433,2135,2135,2988,2824,2135,2135,2482,2434,2135,2135,2440,2445,2452,2135,2135,2998,3002,2961,2441,2446,2453,2463,2974,2135,2135,2135,2140,2642,2709,2459,2470,2465,2135,2135,3005,2135,2135,2987,2823,2458,2469,2464,2975,2135,2135,2135,2353,2488,2447,2324,2974,2135,2409,2459,2448,2135,2961,2487,2446,2476,2323,2973,2135,2135,2135,2354,2476,2974,2135,2135,2135,2957,2135,2135,2960,2135,2135,2135,2363,2409,2459,2474,2465,2487,2571,2973,2135,2135,2168,2973,2135,2135,2135,2959,2135,2135,2135,2506,2135,2957,2488,2170,2135,2135,2135,2960,2135,2818,2493,2135,2135,3033,2135,2135,2135,2934,2819,2494,2135,2135,2135,2976,2780,2499,2135,2135,2135,3e3,2968,2135,2935,2135,2135,2135,2364,2507,2135,2135,2934,2135,2135,2780,2492,2507,2135,2135,2506,2780,2135,2135,2782,2780,2135,2782,2135,2783,2374,2514,2135,2135,2135,3007,2530,2974,2135,2135,2135,3008,2135,2135,2134,2135,2526,2531,2975,2135,2135,3042,2581,2575,2956,2135,2135,2135,2394,2135,2508,2535,2840,2844,2495,2135,2135,2136,2684,2537,2842,2846,2135,2136,2561,2581,2551,2536,2841,2845,2975,3043,2582,2843,2555,2135,3040,3044,2538,2844,2975,2135,2135,2253,2644,2672,2542,2554,2135,2135,2346,2873,2551,2555,2135,2135,2135,2381,2559,2565,2538,2553,2135,2560,2914,2576,2590,2135,2135,2135,2408,2136,2596,2624,2135,2135,2135,2409,2135,2618,2597,3008,2135,2135,2380,2956,2601,2135,2135,2135,2410,2620,2624,2135,2136,2383,2135,2135,2783,2623,2135,2135,2393,2888,2136,2621,3008,2135,2618,2618,2622,2135,2135,2405,2414,2619,2384,2624,2135,2136,2950,2135,2138,2135,2139,2135,2604,2623,2135,2140,2878,2665,2957,2622,2135,2135,2428,2762,2606,2612,2135,2135,2501,2586,2604,3038,2135,2604,3036,2387,2958,2386,2135,2141,2135,2421,2387,2385,2135,2385,2384,2384,2135,2386,2628,2384,2135,2135,2501,2596,2591,2135,2135,2135,2400,2135,2634,2135,2135,2559,2580,2575,2648,2135,2135,2135,2429,2649,2135,2135,2135,2435,2654,2658,2135,2135,2135,2436,2649,2178,2659,2135,2135,2595,2601,2669,2677,2135,2135,2616,2957,2879,2665,2691,2135,2363,2367,2900,2878,2664,2690,2975,2877,2643,2670,2974,2671,2975,2135,2135,2619,2608,2669,2673,2135,2135,2653,2177,2672,2135,2135,2135,2486,2168,2251,2255,2695,2974,2709,2135,2135,2135,2487,2169,2399,2716,2975,2135,2363,2770,2776,2640,2717,2135,2135,2729,2135,2135,2641,2718,2135,2135,2135,2505,2135,2640,2257,2974,2135,2727,2975,2135,2365,2332,2895,2957,2135,2959,2135,2365,2749,2754,2959,2958,2958,2135,2380,2793,2799,2135,2735,2738,2135,2381,2135,2135,2940,2974,2135,2744,2135,2135,2739,2519,2976,2745,2135,2135,2135,2509,2755,2135,2135,2135,2510,2772,2778,2135,2135,2740,2520,2135,2771,2777,2135,2135,2759,2750,2792,2798,2135,2135,2781,2392,2779,2135,2135,2135,2521,2135,2679,2248,2135,2135,2681,2480,2135,2135,2786,3e3,2135,2679,2683,2135,2135,2416,2135,2135,2135,2525,2135,2730,2135,2135,2135,2560,2581,2135,2805,2135,2135,2804,2962,2832,2974,2135,2382,2135,2135,2958,2135,2135,2960,2135,2829,2833,2975,2961,2965,2969,2973,2968,2972,2135,2135,2135,2641,2135,2515,2966,2970,2851,2478,2135,2135,2808,2135,2809,2135,2135,2135,2722,2852,2479,2135,2135,2815,2135,2135,2766,2853,2480,2135,2857,2479,2135,2388,2723,2135,2364,2331,2894,2858,2480,2135,2135,2850,2478,2135,2135,2135,2806,2864,2135,2399,2256,2974,2865,2135,2135,2862,2135,2135,2135,2685,2807,2865,2135,2135,2807,2863,2135,2135,2135,2686,2884,2807,2135,2809,2807,2135,2135,2807,2806,2705,2810,2808,2700,2869,2702,2702,2702,2704,2883,2135,2135,2135,2730,2884,2135,2135,2135,2731,2321,2546,2135,2135,2876,2255,2889,2322,2547,2135,2401,2135,2135,2135,2949,2367,2893,2544,2973,2906,2973,2135,2135,2877,2663,2368,2901,2907,2974,2366,2899,2905,2972,2920,2974,2135,2135,2911,2900,2920,2363,2913,2918,2465,2941,2975,2135,2135,2924,2928,2974,2945,2931,2135,2135,2135,2765,2136,2955,2135,2135,2939,2931,2380,2135,2135,2380,2135,2135,2135,2780,2507,2137,2135,2137,2135,2139,2135,2806,2810,2135,2135,2135,2992,2135,2135,2962,2966,2970,2974,2135,2135,2787,3014,2135,2521,2993,2135,2135,2135,2803,2135,2135,2135,2618,2607,2997,3001,2135,2135,2963,2967,2971,2975,2135,2135,2791,2797,2135,3009,2999,3003,2787,3001,2135,2135,2964,2968,2785,2999,3003,2135,2135,2135,2804,2785,2999,3004,2135,2135,2135,2807,2135,2135,3023,2135,2135,2135,2811,2135,2135,3027,2135,2135,2135,2837,2968,3028,2135,2135,2135,2875,2135,2784,3029,2135,2408,2457,2446,0,14,0,-2120220672,1610612736,-2074083328,-2002780160,-2111830528,1073872896,1342177280,1075807216,4096,16384,2048,8192,0,8192,0,0,0,0,1,0,0,0,2,0,-2145386496,8388608,1073741824,0,2147483648,2147483648,2097152,2097152,2097152,536870912,0,0,134217728,33554432,1536,268435456,268435456,268435456,268435456,128,256,32,0,65536,131072,524288,16777216,268435456,2147483648,1572864,1835008,640,32768,65536,262144,1048576,2097152,196608,196800,196608,196608,0,131072,131072,131072,196608,196624,196608,196624,196608,196608,128,4096,16384,16384,2048,0,4,0,0,2147483648,2097152,0,1024,32,32,0,65536,1572864,1048576,32768,32768,32768,32768,196608,196608,196608,64,64,196608,196608,131072,131072,131072,131072,268435456,268435456,64,196736,196608,196608,196608,131072,196608,196608,16384,4,4,4,2,32,32,65536,1048576,12582912,1073741824,0,0,2,8,16,96,2048,32768,0,0,131072,268435456,268435456,268435456,256,256,196608,196672,196608,196608,196608,196608,4,0,256,256,256,256,32,32,32768,32,32,32,32,32768,268435456,268435456,268435456,196608,196608,196608,196624,196608,196608,196608,16,16,16,268435456,196608,64,64,64,196608,196608,196608,196672,268435456,64,64,196608,196608,16,196608,196608,196608,268435456,64,196608,131072,262144,4194304,25165824,33554432,134217728,268435456,268435456,196608,262152,8,256,512,3072,16384,200,-1073741816,8392713,40,8392718,520,807404072,40,520,100663304,0,0,-540651761,-540651761,257589048,0,262144,0,0,3,8,256,0,4,6,4100,8388612,0,0,0,3,4,8,256,512,1024,0,2097152,0,0,-537854471,-537854471,0,100663296,0,0,1,2,0,0,0,16384,0,0,0,96,14336,0,0,0,7,8,234881024,0,0,0,8,0,0,0,0,262144,0,0,16,64,384,512,0,1,1,0,12582912,0,0,0,0,33554432,67108864,-606084144,-606084144,-606084138,0,0,28,32,768,1966080,-608174080,0,0,0,14,35056,16,64,896,24576,98304,98304,131072,262144,524288,1048576,4194304,25165824,1048576,62914560,134217728,-805306368,0,384,512,16384,65536,131072,262144,29360128,33554432,134217728,268435456,1073741824,2147483648,262144,524288,1048576,29360128,33554432,524288,1048576,16777216,33554432,134217728,268435456,1073741824,0,0,0,123856,1966080,0,64,384,16384,65536,131072,16384,65536,524288,268435456,2147483648,0,0,524288,2147483648,0,0,1,16,0,256,524288,0,0,0,25,96,128,-537854471,0,0,0,32,7404800,-545259520,0,0,0,60,0,249,64768,1048576,6291456,6291456,25165824,100663296,402653184,1073741824,96,128,1280,2048,4096,57344,6291456,57344,6291456,8388608,16777216,33554432,201326592,1342177280,2147483648,0,57344,6291456,8388608,100663296,134217728,2147483648,0,0,0,1,8,16,64,128,64,128,256,1024,131072,131072,131072,262144,524288,16777216,57344,6291456,8388608,67108864,134217728,64,256,1024,2048,4096,57344,64,256,0,24576,32768,6291456,67108864,134217728,0,1,64,256,24576,32768,4194304,32768,4194304,67108864,0,0,64,256,0,0,24576,32768,0,16384,4194304,67108864,64,16384,0,0,1,64,256,16384,4194304,67108864,0,0,0,16384,0,16384,16384,0,-470447874,-470447874,-470447874,0,0,128,0,0,8,96,2048,32768,262144,8388608,35056,1376256,-471859200,0,0,14,16,224,2048,32768,2097152,4194304,8388608,-486539264,0,96,128,2048,32768,262144,2097152,262144,2097152,8388608,33554432,536870912,1073741824,2147483648,0,1610612736,2147483648,0,0,1,524288,1048576,12582912,0,0,0,151311,264503296,2097152,8388608,33554432,1610612736,2147483648,262144,8388608,33554432,536870912,67108864,4194304,0,4194304,0,4194304,4194304,0,0,524288,8388608,536870912,1073741824,2147483648,1,4097,8388609,96,2048,32768,1073741824,2147483648,0,96,2048,2147483648,0,0,96,2048,0,0,1,12582912,0,0,0,0,1641895695,1641895695,0,0,0,249,7404800,15,87808,1835008,1639972864,0,768,5120,16384,65536,1835008,1835008,12582912,16777216,1610612736,0,3,4,8,768,4096,65536,0,0,256,512,786432,8,256,512,4096,16384,1835008,16384,1835008,12582912,1610612736,0,0,0,256,0,0,0,4,8,16,32,1,2,8,256,16384,524288,16384,524288,1048576,12582912,1610612736,0,0,0,8388608,0,0,0,524288,4194304,0,0,0,8388608,-548662288,-548662288,-548662288,0,0,256,16384,65536,520093696,-1073741824,0,0,0,16777216,0,16,32,960,4096,4980736,520093696,1073741824,0,32,896,4096,57344,1048576,6291456,8388608,16777216,100663296,134217728,268435456,2147483648,0,512,786432,4194304,33554432,134217728,268435456,0,786432,4194304,134217728,268435456,0,524288,4194304,268435456,0,0,0,0,0,4194304,4194304,-540651761,0,0,0,2,4,8,16,96,128,264503296,-805306368,0,0,0,8,256,512,19456,131072,3072,16384,131072,262144,8388608,16777216,512,1024,2048,16384,131072,262144,131072,262144,8388608,33554432,201326592,268435456,0,3,4,256,1024,2048,57344,16384,131072,8388608,33554432,134217728,268435456,0,3,256,1024,16384,131072,33554432,134217728,1073741824,2147483648,0,0,256,524288,2147483648,0,3,256,33554432,134217728,1073741824,0,1,2,33554432,1,2,134217728,1073741824,0,1,2,134217728,0,0,0,64,0,0,0,16,32,896,4096,786432,4194304,16777216,33554432,201326592,268435456,1073741824,2147483648,0,0,0,15,0,4980736,4980736,4980736,70460,70460,3478332,0,0,1008,4984832,520093696,60,4864,65536,0,0,0,12,16,32,256,512,4096,65536,0,0,0,67108864,0,0,0,12,0,256,512,65536,0,0,1024,512,131072,131072,4,16,32,65536,0,4,16,32,0,0,0,4,16,0,0,16384,67108864,0,0,1,24,96,128,256,1024],r.TOKEN=[\"(0)\",\"JSONChar\",\"JSONCharRef\",\"JSONPredefinedCharRef\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$$'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(e,t,n){\"use strict\";var r=e(\"./JSONiqTokenizer\").JSONiqTokenizer,i=e(\"./lexer\").Lexer,s=\"NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"JSONPredefinedCharRef\",token:\"constant.language.escape\"},{name:\"JSONCharRef\",token:\"constant.language.escape\"},{name:\"JSONChar\",token:\"string\"}]};n.JSONiqLexer=function(){return new i(r,d)}},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(e,t,n){\"use strict\";var r=function(e){var t=e;this.tokens=[],this.reset=function(){t=t,this.tokens=[]},this.startNonterminal=function(){},this.endNonterminal=function(){},this.terminal=function(e,n,r){this.tokens.push({name:e,value:t.substring(n,r)})},this.whitespace=function(e,n){this.tokens.push({name:\"WS\",value:t.substring(e,n)})}};n.Lexer=function(e,t){this.tokens=[],this.getLineTokens=function(n,i){i=i===\"start\"||!i?'[\"start\"]':i;var s=JSON.parse(i),o=new r(n),u=new e(n,o),a=[];for(;;){var f=s[s.length-1];try{o.tokens=[],u[\"parse_\"+f]();var l=null;o.tokens.length>1&&o.tokens[0].name===\"WS\"&&(a.push({type:\"text\",value:o.tokens[0].value}),o.tokens.splice(0,1));var c=o.tokens[0],h=t[f];for(var p=0;p<h.length;p++){var d=t[f][p];if(typeof d.name==\"function\"&&d.name(c)||d.name===c.name){l=d;break}}if(c.name===\"EOF\")break;if(c.value===\"\")throw\"Encountered empty string lexical rule.\";a.push({type:l===null?\"text\":typeof l.token==\"function\"?l.token(c.value):l.token,value:c.value}),l&&l.next&&l.next(s)}catch(v){if(v instanceof u.ParseException){var m=0;for(var g=0;g<a.length;g++)m+=a[g].value.length;return a.push({type:\"text\",value:n.substring(m)}),{tokens:a,state:JSON.stringify([\"start\"])}}throw v}}return{tokens:a,state:JSON.stringify(s)}}}},{}]},{},[\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\"])}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function a(e,t){var n=!0,r=e.type.split(\".\"),i=t.split(\".\");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../behaviour/xml\").XmlBehaviour,u=e(\"../../token_iterator\").TokenIterator,f=function(){this.inherit(s,[\"braces\",\"parens\",\"string_dquotes\"]),this.inherit(o),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var s=n.getCursorPosition(),o=new u(r,s.row,s.column),f=o.getCurrentToken(),l=!1,e=JSON.parse(e).pop();if(f&&f.value===\">\"||e!==\"StartTag\")return;if(!f||!a(f,\"meta.tag\")&&(!a(f,\"text\")||!f.value.match(\"/\"))){do f=o.stepBackward();while(f&&(a(f,\"string\")||a(f,\"keyword.operator\")||a(f,\"entity.attribute-name\")||a(f,\"text\")))}else l=!0;var c=o.stepBackward();if(!f||!a(f,\"meta.tag\")||c!==null&&c.value.match(\"/\"))return;var h=f.value.substring(1);if(l)var h=h.substring(0,s.column-f.start);return{text:\"></\"+h+\">\",selection:[1,1]}}})};r.inherits(f,i),t.XQueryBehaviour=f}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/jsoniq\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/jsoniq_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"../worker/worker_client\").WorkerClient,i=e(\"../lib/oop\"),s=e(\"./text\").Mode,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./xquery/jsoniq_lexer\").JSONiqLexer,a=e(\"../range\").Range,f=e(\"./behaviour/xquery\").XQueryBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=e(\"../anchor\").Anchor,h=function(){this.$tokenizer=new u,this.$behaviour=new f,this.foldingRules=new l,this.$highlightRules=new o};i.inherits(h,s),function(){this.completer={getCompletions:function(e,t,n,r,i){if(!t.$worker)return i();t.$worker.emit(\"complete\",{data:{pos:n,prefix:r}}),t.$worker.on(\"complete\",function(e){i(null,e.data)})}},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=t.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);return i&&(r+=n),r},this.checkOutdent=function(e,t,n){return/^\\s+$/.test(t)?/^\\s*[\\}\\)]/.test(n):!1},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=r.match(/^(\\s*[\\}\\)])/);if(!i)return 0;var s=i[1].length,o=t.findMatchingBracket({row:n,column:s});if(!o||o.row==n)return 0;var u=this.$getIndent(t.getLine(o.row));t.replace(new a(n,0,n,s-1),u)},this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,u=/^\\s*\\(:(.*):\\)/;for(i=n;i<=r;i++)if(!u.test(t.getLine(i))){o=!1;break}var f=new a(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(u)[1]:\"(:\"+s+\":)\")},this.createWorker=function(e){var t=new r([\"ace\"],\"ace/mode/xquery_worker\",\"XQueryWorker\"),n=this;return t.attachToDocument(e.getDocument()),t.on(\"ok\",function(t){e.clearAnnotations()}),t.on(\"markers\",function(t){e.clearAnnotations(),n.addMarkers(t.data,e)}),t},this.removeMarkers=function(e){var t=e.getMarkers(!1);for(var n in t)t[n].clazz.indexOf(\"language_highlight_\")===0&&e.removeMarker(n);for(var r=0;r<e.markerAnchors.length;r++)e.markerAnchors[r].detach();e.markerAnchors=[]},this.addMarkers=function(e,t){var n=this;t.markerAnchors||(t.markerAnchors=[]),this.removeMarkers(t),t.languageAnnos=[],e.forEach(function(e){function u(i){r&&t.removeMarker(r),o.row=n.row;if(e.pos.sc!==undefined&&e.pos.ec!==undefined){var s=new a(e.pos.sl,e.pos.sc,e.pos.el,e.pos.ec);r=t.addMarker(s,\"language_highlight_\"+(e.type?e.type:\"default\"))}i&&t.setAnnotations(t.languageAnnos)}var n=new c(t.getDocument(),e.pos.sl,e.pos.sc||0);t.markerAnchors.push(n);var r,i=e.pos.ec-e.pos.sc,s=e.pos.el-e.pos.sl,o={guttertext:e.message,type:e.level||\"warning\",text:e.message};u(),n.on(\"change\",function(){u(!0)}),e.message&&t.languageAnnos.push(o)}),t.setAnnotations(t.languageAnnos)},this.$id=\"ace/mode/jsoniq\"}.call(h.prototype),t.Mode=h});                (function() {\n                    ace.require([\"ace/mode/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-jsp.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|var\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{regex:\"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",token:\"keyword\",next:[{regex:\"{\",token:\"paren.lparen\",next:[{regex:\"}\",token:\"paren.rparen\",next:\"start\"},{regex:\"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",token:\"keyword\"}]},{token:\"text\",regex:\"\\\\s+\"},{token:\"identifier\",regex:\"\\\\w+\"},{token:\"punctuation.operator\",regex:\".\"},{token:\"text\",regex:\"\\\\s+\"},{regex:\"\",next:\"start\"}]},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.JavaHighlightRules=o}),ace.define(\"ace/mode/jsp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/java_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./java_highlight_rules\").JavaHighlightRules,o=function(){i.call(this);var e=\"request|response|out|session|application|config|pageContext|page|Exception\",t=\"page|include|taglib\",n=[{token:\"comment\",regex:\"<%--\",push:\"jsp-dcomment\"},{token:\"meta.tag\",regex:\"<%@?|<%=?|<%!?|<jsp:[^>]+>\",push:\"jsp-start\"}],r=[{token:\"meta.tag\",regex:\"%>|<\\\\/jsp:[^>]+>\",next:\"pop\"},{token:\"variable.language\",regex:e},{token:\"keyword\",regex:t}];for(var o in this.$rules)this.$rules[o].unshift.apply(this.$rules[o],n);this.embedRules(s,\"jsp-\",r,[\"start\"]),this.addRules({\"jsp-dcomment\":[{token:\"comment\",regex:\".*?--%>\",next:\"pop\"}]}),this.normalizeRules()};r.inherits(o,i),t.JspHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/jsp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jsp_highlight_rules\").JspHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.$id=\"ace/mode/jsp\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-jssm.js",
    "content": "ace.define(\"ace/mode/jssm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"punctuation.definition.comment.mn\",regex:/\\/\\*/,push:[{token:\"punctuation.definition.comment.mn\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.jssm\"}],comment:\"block comment\"},{token:\"comment.line.jssm\",regex:/\\/\\//,push:[{token:\"comment.line.jssm\",regex:/$/,next:\"pop\"},{defaultToken:\"comment.line.jssm\"}],comment:\"block comment\"},{token:\"entity.name.function\",regex:/\\${/,push:[{token:\"entity.name.function\",regex:/}/,next:\"pop\"},{defaultToken:\"keyword.other\"}],comment:\"js outcalls\"},{token:\"constant.numeric\",regex:/[0-9]*\\.[0-9]*\\.[0-9]*/,comment:\"semver\"},{token:\"constant.language.jssmLanguage\",regex:/graph_layout\\s*:/,comment:\"jssm language tokens\"},{token:\"constant.language.jssmLanguage\",regex:/machine_name\\s*:/,comment:\"jssm language tokens\"},{token:\"constant.language.jssmLanguage\",regex:/machine_version\\s*:/,comment:\"jssm language tokens\"},{token:\"constant.language.jssmLanguage\",regex:/jssm_version\\s*:/,comment:\"jssm language tokens\"},{token:\"keyword.control.transition.jssmArrow.legal_legal\",regex:/<->/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.legal_none\",regex:/<-/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.none_legal\",regex:/->/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.main_main\",regex:/<=>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.none_main\",regex:/=>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.main_none\",regex:/<=/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.forced_forced\",regex:/<~>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.none_forced\",regex:/~>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.forced_none\",regex:/<~/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.legal_main\",regex:/<-=>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.main_legal\",regex:/<=->/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.legal_forced\",regex:/<-~>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.forced_legal\",regex:/<~->/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.main_forced\",regex:/<=~>/,comment:\"transitions\"},{token:\"keyword.control.transition.jssmArrow.forced_main\",regex:/<~=>/,comment:\"transitions\"},{token:\"constant.numeric.jssmProbability\",regex:/[0-9]+%/,comment:\"edge probability annotation\"},{token:\"constant.character.jssmAction\",regex:/\\'[^']*\\'/,comment:\"action annotation\"},{token:\"entity.name.tag.jssmLabel.doublequoted\",regex:/\\\"[^\"]*\\\"/,comment:\"jssm label annotation\"},{token:\"entity.name.tag.jssmLabel.atom\",regex:/[a-zA-Z0-9_.+&()#@!?,]/,comment:\"jssm label annotation\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"jssm\",\"jssm_state\"],name:\"JSSM\",scopeName:\"source.jssm\"},r.inherits(s,i),t.JSSMHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/jssm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jssm_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jssm_highlight_rules\").JSSMHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/jssm\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-jsx.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/jsx_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){var e=i.arrayToMap(\"break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|if|throw|delete|in|try|class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|number|int|string|boolean|variant|log|assert\".split(\"|\")),t=i.arrayToMap(\"null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined\".split(\"|\")),n=i.arrayToMap(\"debugger|with|const|export|let|private|public|yield|protected|extern|native|as|operator|__fake__|__readonly__\".split(\"|\")),r=\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:[\"storage.type\",\"text\",\"entity.name.function\"],regex:\"(function)(\\\\s+)(\"+r+\")\"},{token:function(r){return r==\"this\"?\"variable.language\":r==\"function\"?\"storage.type\":e.hasOwnProperty(r)||n.hasOwnProperty(r)?\"keyword\":t.hasOwnProperty(r)?\"constant.language\":/^_?[A-Z][a-zA-Z0-9_]*$/.test(r)?\"language.support.class\":\"identifier\"},regex:r},{token:\"keyword.operator\",regex:\"!|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({<]\"},{token:\"paren.rparen\",regex:\"[\\\\])}>]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(u,o),t.JsxHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/jsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsx_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";function f(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a}var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jsx_highlight_rules\").JsxHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode;r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/jsx\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-julia.js",
    "content": "ace.define(\"ace/mode/julia_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#function_decl\"},{include:\"#function_call\"},{include:\"#type_decl\"},{include:\"#keyword\"},{include:\"#operator\"},{include:\"#number\"},{include:\"#string\"},{include:\"#comment\"}],\"#bracket\":[{token:\"keyword.bracket.julia\",regex:\"\\\\(|\\\\)|\\\\[|\\\\]|\\\\{|\\\\}|,\"}],\"#comment\":[{token:[\"punctuation.definition.comment.julia\",\"comment.line.number-sign.julia\"],regex:\"(#)(?!\\\\{)(.*$)\"}],\"#function_call\":[{token:[\"support.function.julia\",\"text\"],regex:\"([a-zA-Z0-9_]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*\\\\()\"}],\"#function_decl\":[{token:[\"keyword.other.julia\",\"meta.function.julia\",\"entity.name.function.julia\",\"meta.function.julia\",\"text\"],regex:\"(function|macro)(\\\\s*)([a-zA-Z0-9_\\\\{]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*)([(\\\\\\\\{])\"}],\"#keyword\":[{token:\"keyword.other.julia\",regex:\"\\\\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\\\\b\"},{token:\"keyword.control.julia\",regex:\"\\\\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\\\\b\"},{token:\"storage.modifier.variable.julia\",regex:\"\\\\b(?:global|local|const|export|import|importall|using)\\\\b\"},{token:\"variable.macro.julia\",regex:\"@[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"}],\"#number\":[{token:\"constant.numeric.julia\",regex:\"\\\\b0(?:x|X)[0-9a-fA-F]*|(?:\\\\b[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]*)?(?:im)?|\\\\bInf(?:32)?\\\\b|\\\\bNaN(?:32)?\\\\b|\\\\btrue\\\\b|\\\\bfalse\\\\b\"}],\"#operator\":[{token:\"keyword.operator.update.julia\",regex:\"=|:=|\\\\+=|-=|\\\\*=|/=|//=|\\\\.//=|\\\\.\\\\*=|\\\\\\\\=|\\\\.\\\\\\\\=|^=|\\\\.^=|%=|\\\\|=|&=|\\\\$=|<<=|>>=\"},{token:\"keyword.operator.ternary.julia\",regex:\"\\\\?|:\"},{token:\"keyword.operator.boolean.julia\",regex:\"\\\\|\\\\||&&|!\"},{token:\"keyword.operator.arrow.julia\",regex:\"->|<-|-->\"},{token:\"keyword.operator.relation.julia\",regex:\">|<|>=|<=|==|!=|\\\\.>|\\\\.<|\\\\.>=|\\\\.>=|\\\\.==|\\\\.!=|\\\\.=|\\\\.!|<:|:>\"},{token:\"keyword.operator.range.julia\",regex:\":\"},{token:\"keyword.operator.shift.julia\",regex:\"<<|>>\"},{token:\"keyword.operator.bitwise.julia\",regex:\"\\\\||\\\\&|~\"},{token:\"keyword.operator.arithmetic.julia\",regex:\"\\\\+|-|\\\\*|\\\\.\\\\*|/|\\\\./|//|\\\\.//|%|\\\\.%|\\\\\\\\|\\\\.\\\\\\\\|\\\\^|\\\\.\\\\^\"},{token:\"keyword.operator.isa.julia\",regex:\"::\"},{token:\"keyword.operator.dots.julia\",regex:\"\\\\.(?=[a-zA-Z])|\\\\.\\\\.+\"},{token:\"keyword.operator.interpolation.julia\",regex:\"\\\\$#?(?=.)\"},{token:[\"variable\",\"keyword.operator.transposed-variable.julia\"],regex:\"([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+)((?:'|\\\\.')*\\\\.?')\"},{token:\"text\",regex:\"\\\\[|\\\\(\"},{token:[\"text\",\"keyword.operator.transposed-matrix.julia\"],regex:\"([\\\\]\\\\)])((?:'|\\\\.')*\\\\.?')\"}],\"#string\":[{token:\"punctuation.definition.string.begin.julia\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.julia\",regex:\"'\",next:\"pop\"},{include:\"#string_escaped_char\"},{defaultToken:\"string.quoted.single.julia\"}]},{token:\"punctuation.definition.string.begin.julia\",regex:'\"',push:[{token:\"punctuation.definition.string.end.julia\",regex:'\"',next:\"pop\"},{include:\"#string_escaped_char\"},{defaultToken:\"string.quoted.double.julia\"}]},{token:\"punctuation.definition.string.begin.julia\",regex:'\\\\b[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\"',push:[{token:\"punctuation.definition.string.end.julia\",regex:'\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*',next:\"pop\"},{include:\"#string_custom_escaped_char\"},{defaultToken:\"string.quoted.custom-double.julia\"}]},{token:\"punctuation.definition.string.begin.julia\",regex:\"`\",push:[{token:\"punctuation.definition.string.end.julia\",regex:\"`\",next:\"pop\"},{include:\"#string_escaped_char\"},{defaultToken:\"string.quoted.backtick.julia\"}]}],\"#string_custom_escaped_char\":[{token:\"constant.character.escape.julia\",regex:'\\\\\\\\\"'}],\"#string_escaped_char\":[{token:\"constant.character.escape.julia\",regex:\"\\\\\\\\(?:\\\\\\\\|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)\"}],\"#type_decl\":[{token:[\"keyword.control.type.julia\",\"meta.type.julia\",\"entity.name.type.julia\",\"entity.other.inherited-class.julia\",\"punctuation.separator.inheritance.julia\",\"entity.other.inherited-class.julia\"],regex:\"(type|immutable)(\\\\s+)([a-zA-Z0-9_]+)(?:(\\\\s*)(<:)(\\\\s*[.a-zA-Z0-9_:]+))?\"},{token:[\"other.typed-variable.julia\",\"support.type.julia\"],regex:\"([a-zA-Z0-9_]+)(::[a-zA-Z0-9_{}]+)\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"jl\"],firstLineMatch:\"^#!.*\\\\bjulia\\\\s*$\",foldingStartMarker:\"^\\\\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\\\\b(?!.*\\\\bend\\\\b).*$\",foldingStopMarker:\"^\\\\s*(?:end)\\\\b.*$\",name:\"Julia\",scopeName:\"source.julia\"},r.inherits(s,i),t.JuliaHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/julia\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/julia_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./julia_highlight_rules\").JuliaHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.blockComment=\"\",this.$id=\"ace/mode/julia\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-kotlin.js",
    "content": "ace.define(\"ace/mode/kotlin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comments\"},{token:[\"text\",\"keyword.other.kotlin\",\"text\",\"entity.name.package.kotlin\",\"text\"],regex:/^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*))?/},{include:\"#imports\"},{include:\"#statements\"}],\"#classes\":[{token:\"text\",regex:/(?=\\s*(?:companion|class|object|interface))/,push:[{token:\"text\",regex:/}|(?=$)/,next:\"pop\"},{token:[\"keyword.other.kotlin\",\"text\"],regex:/\\b((?:companion\\s*)?)(class|object|interface)\\b/,push:[{token:\"text\",regex:/(?=<|{|\\(|:)/,next:\"pop\"},{token:\"keyword.other.kotlin\",regex:/\\bobject\\b/},{token:\"entity.name.type.class.kotlin\",regex:/\\w+/}]},{token:\"text\",regex:/</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#generics\"}]},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#parameters\"}]},{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?={|$)/,next:\"pop\"},{token:\"entity.other.inherited-class.kotlin\",regex:/\\w+/},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#expressions\"}]}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#statements\"}]}]}],\"#comments\":[{token:\"punctuation.definition.comment.kotlin\",regex:/\\/\\*/,push:[{token:\"punctuation.definition.comment.kotlin\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.kotlin\"}]},{token:[\"text\",\"punctuation.definition.comment.kotlin\",\"comment.line.double-slash.kotlin\"],regex:/(\\s*)(\\/\\/)(.*$)/}],\"#constants\":[{token:\"constant.language.kotlin\",regex:/\\b(?:true|false|null|this|super)\\b/},{token:\"constant.numeric.kotlin\",regex:/\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\b/},{token:\"constant.other.kotlin\",regex:/\\b[A-Z][A-Z0-9_]+\\b/}],\"#expressions\":[{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#expressions\"}]},{include:\"#types\"},{include:\"#strings\"},{include:\"#constants\"},{include:\"#comments\"},{include:\"#keywords\"}],\"#functions\":[{token:\"text\",regex:/(?=\\s*fun)/,push:[{token:\"text\",regex:/}|(?=$)/,next:\"pop\"},{token:\"keyword.other.kotlin\",regex:/\\bfun\\b/,push:[{token:\"text\",regex:/(?=\\()/,next:\"pop\"},{token:\"text\",regex:/</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#generics\"}]},{token:[\"text\",\"entity.name.function.kotlin\"],regex:/((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/}]},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#parameters\"}]},{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?={|=|$)/,next:\"pop\"},{include:\"#types\"}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/(?=\\})/,next:\"pop\"},{include:\"#statements\"}]},{token:\"keyword.operator.assignment.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=$)/,next:\"pop\"},{include:\"#expressions\"}]}]}],\"#generics\":[{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?=,|>)/,next:\"pop\"},{include:\"#types\"}]},{include:\"#keywords\"},{token:\"storage.type.generic.kotlin\",regex:/\\w+/}],\"#getters-and-setters\":[{token:[\"entity.name.function.kotlin\",\"text\"],regex:/\\b(get)\\b(\\s*\\(\\s*\\))/,push:[{token:\"text\",regex:/\\}|(?=\\bset\\b)|$/,next:\"pop\"},{token:\"keyword.operator.assignment.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=$|\\bset\\b)/,next:\"pop\"},{include:\"#expressions\"}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#expressions\"}]}]},{token:[\"entity.name.function.kotlin\",\"text\"],regex:/\\b(set)\\b(\\s*)(?=\\()/,push:[{token:\"text\",regex:/\\}|(?=\\bget\\b)|$/,next:\"pop\"},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#parameters\"}]},{token:\"keyword.operator.assignment.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=$|\\bset\\b)/,next:\"pop\"},{include:\"#expressions\"}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#expressions\"}]}]}],\"#imports\":[{token:[\"text\",\"keyword.other.kotlin\",\"text\",\"keyword.other.kotlin\"],regex:/^(\\s*)(import)(\\s+[^ $]+\\s+)((?:as)?)/}],\"#keywords\":[{token:\"storage.modifier.kotlin\",regex:/\\b(?:var|val|public|private|protected|abstract|final|enum|open|attribute|annotation|override|inline|var|val|vararg|lazy|in|out|internal|data|tailrec|operator|infix|const|yield|typealias|typeof)\\b/},{token:\"keyword.control.catch-exception.kotlin\",regex:/\\b(?:try|catch|finally|throw)\\b/},{token:\"keyword.control.kotlin\",regex:/\\b(?:if|else|while|for|do|return|when|where|break|continue)\\b/},{token:\"keyword.operator.kotlin\",regex:/\\b(?:in|is|as|assert)\\b/},{token:\"keyword.operator.comparison.kotlin\",regex:/==|!=|===|!==|<=|>=|<|>/},{token:\"keyword.operator.assignment.kotlin\",regex:/=/},{token:\"keyword.operator.declaration.kotlin\",regex:/:/},{token:\"keyword.operator.dot.kotlin\",regex:/\\./},{token:\"keyword.operator.increment-decrement.kotlin\",regex:/\\-\\-|\\+\\+/},{token:\"keyword.operator.arithmetic.kotlin\",regex:/\\-|\\+|\\*|\\/|%/},{token:\"keyword.operator.arithmetic.assign.kotlin\",regex:/\\+=|\\-=|\\*=|\\/=/},{token:\"keyword.operator.logical.kotlin\",regex:/!|&&|\\|\\|/},{token:\"keyword.operator.range.kotlin\",regex:/\\.\\./},{token:\"punctuation.terminator.kotlin\",regex:/;/}],\"#namespaces\":[{token:\"keyword.other.kotlin\",regex:/\\bnamespace\\b/},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#statements\"}]}],\"#parameters\":[{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?=,|\\)|=)/,next:\"pop\"},{include:\"#types\"}]},{token:\"keyword.operator.declaration.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=,|\\))/,next:\"pop\"},{include:\"#expressions\"}]},{include:\"#keywords\"},{token:\"variable.parameter.function.kotlin\",regex:/\\w+/}],\"#statements\":[{include:\"#namespaces\"},{include:\"#typedefs\"},{include:\"#classes\"},{include:\"#functions\"},{include:\"#variables\"},{include:\"#getters-and-setters\"},{include:\"#expressions\"}],\"#strings\":[{token:\"punctuation.definition.string.begin.kotlin\",regex:/\"\"\"/,push:[{token:\"punctuation.definition.string.end.kotlin\",regex:/\"\"\"/,next:\"pop\"},{token:\"variable.parameter.template.kotlin\",regex:/\\$\\w+|\\$\\{[^\\}]+\\}/},{token:\"constant.character.escape.kotlin\",regex:/\\\\./},{defaultToken:\"string.quoted.third.kotlin\"}]},{token:\"punctuation.definition.string.begin.kotlin\",regex:/\"/,push:[{token:\"punctuation.definition.string.end.kotlin\",regex:/\"/,next:\"pop\"},{token:\"variable.parameter.template.kotlin\",regex:/\\$\\w+|\\$\\{[^\\}]+\\}/},{token:\"constant.character.escape.kotlin\",regex:/\\\\./},{defaultToken:\"string.quoted.double.kotlin\"}]},{token:\"punctuation.definition.string.begin.kotlin\",regex:/'/,push:[{token:\"punctuation.definition.string.end.kotlin\",regex:/'/,next:\"pop\"},{token:\"constant.character.escape.kotlin\",regex:/\\\\./},{defaultToken:\"string.quoted.single.kotlin\"}]},{token:\"punctuation.definition.string.begin.kotlin\",regex:/`/,push:[{token:\"punctuation.definition.string.end.kotlin\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quoted.single.kotlin\"}]}],\"#typedefs\":[{token:\"text\",regex:/(?=\\s*type)/,push:[{token:\"text\",regex:/(?=$)/,next:\"pop\"},{token:\"keyword.other.kotlin\",regex:/\\btype\\b/},{token:\"text\",regex:/</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#generics\"}]},{include:\"#expressions\"}]}],\"#types\":[{token:\"storage.type.buildin.kotlin\",regex:/\\b(?:Any|Unit|String|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic)\\b/},{token:\"storage.type.buildin.array.kotlin\",regex:/\\b(?:IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray)\\b/},{token:[\"storage.type.buildin.collection.kotlin\",\"text\"],regex:/\\b(Array|List|Map)(<\\b)/,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#types\"},{include:\"#keywords\"}]},{token:\"text\",regex:/\\w+</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#types\"},{include:\"#keywords\"}]},{token:[\"keyword.operator.tuple.kotlin\",\"text\"],regex:/(#)(\\()/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#expressions\"}]},{token:\"text\",regex:/\\{/,push:[{token:\"text\",regex:/\\}/,next:\"pop\"},{include:\"#statements\"}]},{token:\"text\",regex:/\\(/,push:[{token:\"text\",regex:/\\)/,next:\"pop\"},{include:\"#types\"}]},{token:\"keyword.operator.declaration.kotlin\",regex:/->/}],\"#variables\":[{token:\"text\",regex:/(?=\\s*(?:var|val))/,push:[{token:\"text\",regex:/(?=:|=|$)/,next:\"pop\"},{token:\"keyword.other.kotlin\",regex:/\\b(?:var|val)\\b/,push:[{token:\"text\",regex:/(?=:|=|$)/,next:\"pop\"},{token:\"text\",regex:/</,push:[{token:\"text\",regex:/>/,next:\"pop\"},{include:\"#generics\"}]},{token:[\"text\",\"entity.name.variable.kotlin\"],regex:/((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/}]},{token:\"keyword.operator.declaration.kotlin\",regex:/:/,push:[{token:\"text\",regex:/(?==|$)/,next:\"pop\"},{include:\"#types\"},{include:\"#getters-and-setters\"}]},{token:\"keyword.operator.assignment.kotlin\",regex:/=/,push:[{token:\"text\",regex:/(?=$)/,next:\"pop\"},{include:\"#expressions\"},{include:\"#getters-and-setters\"}]}]}]},this.normalizeRules()};s.metaData={fileTypes:[\"kt\",\"kts\"],name:\"Kotlin\",scopeName:\"source.Kotlin\"},r.inherits(s,i),t.KotlinHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/kotlin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/kotlin_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./kotlin_highlight_rules\").KotlinHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new o};r.inherits(a,i),function(){this.$id=\"ace/mode/kotlin\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-latex.js",
    "content": "ace.define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\",\"lparen\",\"storage.type\",\"rparen\"],regex:\"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\begin)({)(verbatim)(})\",next:\"verbatim\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\begin)({)(lstlisting)(})\",next:\"lstlisting\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"},{token:\"storage.type\",regex:/\\\\verb\\b\\*?/,next:[{token:[\"keyword.operator\",\"string\",\"keyword.operator\"],regex:\"(.)(.*?)(\\\\1|$)|\",next:\"start\"}]},{token:\"storage.type\",regex:\"\\\\\\\\[a-zA-Z]+\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\[^a-zA-Z]?\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"equation\"}],equation:[{token:\"comment\",regex:\"%.*$\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"start\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"},{token:\"error\",regex:\"^\\\\s*$\",next:\"start\"},{defaultToken:\"string\"}],verbatim:[{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\end)({)(verbatim)(})\",next:\"start\"},{defaultToken:\"text\"}],lstlisting:[{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\end)({)(lstlisting)(})\",next:\"start\"},{defaultToken:\"text\"}]},this.normalizeRules()};r.inherits(s,i),t.LatexHighlightRules=s}),ace.define(\"ace/mode/folding/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u={\"\\\\subparagraph\":1,\"\\\\paragraph\":2,\"\\\\subsubsubsection\":3,\"\\\\subsubsection\":4,\"\\\\subsection\":5,\"\\\\section\":6,\"\\\\chapter\":7,\"\\\\part\":8,\"\\\\begin\":9,\"\\\\end\":10},a=t.FoldMode=function(){};r.inherits(a,i),function(){this.foldingStartMarker=/^\\s*\\\\(begin)|\\s*\\\\(part|chapter|(?:sub)*(?:section|paragraph))\\b|{\\s*$/,this.foldingStopMarker=/^\\s*\\\\(end)\\b|^\\s*}/,this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.latexBlock(e,n,i[0].length-1):i[2]?this.latexSection(e,n,i[0].length-1):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[1]?this.latexBlock(e,n,i[0].length-1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.latexBlock=function(e,t,n,r){var i={\"\\\\begin\":1,\"\\\\end\":-1},u=new o(e,t,n),a=u.getCurrentToken();if(!a||a.type!=\"storage.type\"&&a.type!=\"constant.character.escape\")return;var f=a.value,l=i[f],c=function(){var e=u.stepForward(),t=e.type==\"lparen\"?u.stepForward().value:\"\";return l===-1&&(u.stepBackward(),t&&u.stepBackward()),t},h=[c()],p=l===-1?u.getCurrentTokenColumn():e.getLine(t).length,d=t;u.step=l===-1?u.stepBackward:u.stepForward;while(a=u.step()){if(!a||a.type!=\"storage.type\"&&a.type!=\"constant.character.escape\")continue;var v=i[a.value];if(!v)continue;var m=c();if(v===l)h.unshift(m);else if(h.shift()!==m||!h.length)break}if(h.length)return;l==1&&(u.stepBackward(),u.stepBackward());if(r)return u.getCurrentTokenRange();var t=u.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,d,p):new s(d,p,t,u.getCurrentTokenColumn())},this.latexSection=function(e,t,n){var r=new o(e,t,n),i=r.getCurrentToken();if(!i||i.type!=\"storage.type\")return;var a=u[i.value]||0,f=0,l=t;while(i=r.stepForward()){if(i.type!==\"storage.type\")continue;var c=u[i.value]||0;if(c>=9){f||(l=r.getCurrentTokenRow()-1),f+=c==9?1:-1;if(f<0)break}else if(c>=a)break}f||(l=r.getCurrentTokenRow()-1);while(l>t&&!/\\S/.test(e.getLine(l)))l--;return new s(t,e.getLine(t).length,l,e.getLine(l).length)}}.call(a.prototype)}),ace.define(\"ace/mode/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/latex_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/latex\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./latex_highlight_rules\").LatexHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/latex\").FoldMode,a=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new o({braces:!0})};r.inherits(a,i),function(){this.type=\"text\",this.lineCommentStart=\"%\",this.$id=\"ace/mode/latex\",this.getMatching=function(e,t,n){t==undefined&&(t=e.selection.lead),typeof t==\"object\"&&(n=t.column,t=t.row);var r=e.getTokenAt(t,n);if(!r)return;if(r.value==\"\\\\begin\"||r.value==\"\\\\end\")return this.foldingRules.latexBlock(e,t,n,!0)}}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-less.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./css_highlight_rules\"),o=function(){var e=\"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|or|and|when|not\",t=e.split(\"|\"),n=s.supportType.split(\"|\"),r=this.createKeywordMapper({\"support.constant\":s.supportConstant,keyword:e,\"support.constant.color\":s.supportConstantColor,\"support.constant.fonts\":s.supportConstantFonts},\"identifier\",!0),i=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+i+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:i},{token:[\"support.function\",\"paren.lparen\",\"string\",\"paren.rparen\"],regex:\"(url)(\\\\()(.*)(\\\\))\"},{token:[\"support.function\",\"paren.lparen\"],regex:\"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"},{token:function(e){return t.indexOf(e.toLowerCase())>-1?\"keyword\":\"variable\"},regex:\"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"},{token:\"variable\",regex:\"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"},{token:function(e,t){return n.indexOf(e.toLowerCase())>-1?[\"support.type.property\",\"text\"]:[\"support.type.unknownProperty\",\"text\"]},regex:\"([a-z0-9-_]+)(\\\\s*:)\"},{token:\"keyword\",regex:\"&\"},{token:r,regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z_][a-z0-9-_]*\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(o,i),t.LessHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./less_highlight_rules\").LessHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./css_completions\").CssCompletions,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(\"ruleset\",t,n,r)},this.$id=\"ace/mode/less\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-liquid.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/behaviour/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function a(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./xml\").XmlBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=e(\"../../lib/lang\"),f=function(){s.call(this),this.add(\"autoBraceTagClosing\",\"insertion\",function(e,t,n,r,i){if(i==\"}\"){var s=n.getSelectionRange().start,u=new o(r,s.row,s.column),f=u.getCurrentToken()||u.stepBackward();if(!f||!(f.value.trim()===\"%\"||a(f,\"tag-name\")||a(f,\"tag-whitespace\")||a(f,\"attribute-name\")||a(f,\"attribute-equals\")||a(f,\"attribute-value\")))return;if(a(f,\"reference.attribute-value\"))return;if(a(f,\"attribute-value\")){var l=u.getCurrentTokenColumn()+f.value.length;if(s.column<l)return;if(s.column==l){var c=u.stepForward();if(c&&a(c,\"attribute-value\"))return;u.stepBackward()}}if(/{%\\s*%/.test(r.getLine(s.row)))return;if(/^\\s*}/.test(r.getLine(s.row).slice(s.column)))return;while(!f.type!=\"keyword.block\"){f=u.stepBackward();if(f.value==\"{%\"){for(;;){f=u.stepForward();if(f.type===\"keyword.block\")break;if(f.value.trim()==\"%\"){f=null;break}}break}}if(!f)return;var h=u.getCurrentTokenRow(),p=u.getCurrentTokenColumn();if(a(u.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==s.row&&(d=d.substring(0,s.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"}{% end\"+d+\" %}\",selection:[1,1]}}})};r.inherits(f,i),t.LiquidBehaviour=f}),ace.define(\"ace/mode/liquid_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=function(){s.call(this);var e=\"date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split\",t=\"capture|endcapture|case|endcase|when|comment|endcomment|cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow\",n=\"for|if|case|capture|unless|tablerow|marker|comment\",r=\"forloop|tablerowloop\",i=\"assign\",o=this.createKeywordMapper({\"variable.language\":r,keyword:t,\"keyword.block\":n,\"support.function\":e,\"keyword.definition\":i},\"identifier\");for(var u in this.$rules)this.$rules[u].unshift({token:\"variable\",regex:\"{%\",push:\"liquid-start\"},{token:\"variable\",regex:\"{{\",push:\"liquid-start\"});this.addRules({\"liquid-start\":[{token:\"variable\",regex:\"}}\",next:\"pop\"},{token:\"variable\",regex:\"%}\",next:\"pop\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:o,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"/|\\\\*|\\\\-|\\\\+|=|!=|\\\\?\\\\:\"},{token:\"paren.lparen\",regex:/[\\[\\({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"text\",regex:\"\\\\s+\"}]}),this.normalizeRules()};r.inherits(o,i),t.LiquidHighlightRules=o}),ace.define(\"ace/mode/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/html\",\"ace/mode/html_completions\",\"ace/mode/behaviour/liquid\",\"ace/mode/liquid_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./html\").Mode,o=e(\"./html_completions\").HtmlCompletions,u=e(\"./behaviour/liquid\").LiquidBehaviour,a=e(\"./liquid_highlight_rules\").LiquidHighlightRules,f=e(\"./matching_brace_outdent\").MatchingBraceOutdent,l=function(){this.HighlightRules=a,this.$outdent=new f,this.$behaviour=new u,this.$completer=new o};r.inherits(l,i),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=(new s).voidElements,this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/liquid\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-lisp.js",
    "content": "ace.define(\"ace/mode/lisp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"case|do|let|loop|if|else|when\",t=\"eq|neq|and|or\",n=\"null|nil\",r=\"cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn\",i=this.createKeywordMapper({\"keyword.control\":e,\"keyword.operator\":t,\"constant.language\":n,\"support.function\":r},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\";.*$\"},{token:[\"storage.type.function-type.lisp\",\"text\",\"entity.name.function.lisp\"],regex:\"(?:\\\\b(?:(defun|defmethod|defmacro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"},{token:[\"punctuation.definition.constant.character.lisp\",\"constant.character.lisp\"],regex:\"(#)((?:\\\\w|[\\\\\\\\+-=<>'\\\"&#])+)\"},{token:[\"punctuation.definition.variable.lisp\",\"variable.other.global.lisp\",\"punctuation.definition.variable.lisp\"],regex:\"(\\\\*)(\\\\S*)(\\\\*)\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"}],qqstring:[{token:\"constant.character.escape.lisp\",regex:\"\\\\\\\\.\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"}]}};r.inherits(s,i),t.LispHighlightRules=s}),ace.define(\"ace/mode/lisp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lisp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lisp_highlight_rules\").LispHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\";\",this.$id=\"ace/mode/lisp\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-livescript.js",
    "content": "ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/livescript\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/text\"],function(e,t,n){function u(e,t){function n(){}return n.prototype=(e.superclass=t).prototype,(e.prototype=new n).constructor=e,typeof t.extended==\"function\"&&t.extended(e),e}function a(e,t){var n={}.hasOwnProperty;for(var r in t)n.call(t,r)&&(e[r]=t[r]);return e}var r,i,s,o;r=\"(?![\\\\d\\\\s])[$\\\\w\\\\xAA-\\\\uFFDC](?:(?!\\\\s)[$\\\\w\\\\xAA-\\\\uFFDC]|-[A-Za-z])*\",t.Mode=i=function(t){function o(){var t;this.$tokenizer=new(e(\"../tokenizer\").Tokenizer)(o.Rules);if(t=e(\"../mode/matching_brace_outdent\"))this.$outdent=new t.MatchingBraceOutdent;this.$id=\"ace/mode/livescript\",this.$behaviour=new(e(\"./behaviour/cstyle\").CstyleBehaviour)}var n,i=u((a(o,t).displayName=\"LiveScriptMode\",o),t).prototype,s=o;return n=RegExp(\"(?:[({[=:]|[-~]>|\\\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\\\s*all)?|const|var|let|new|catch(?:\\\\s*\"+r+\")?))\\\\s*$\"),i.getNextLineIndent=function(e,t,r){var i,s;return i=this.$getIndent(t),s=this.$tokenizer.getLineTokens(t,e).tokens,(!s.length||s[s.length-1].type!==\"comment\")&&e===\"start\"&&n.test(t)&&(i+=r),i},i.lineCommentStart=\"#\",i.blockComment={start:\"###\",end:\"###\"},i.checkOutdent=function(e,t,n){var r;return(r=this.$outdent)!=null?r.checkOutdent(t,n):void 8},i.autoOutdent=function(e,t,n){var r;return(r=this.$outdent)!=null?r.autoOutdent(t,n):void 8},o}(e(\"../mode/text\").Mode),s=\"(?![$\\\\w]|-[A-Za-z]|\\\\s*:(?![:=]))\",o={defaultToken:\"string\"},i.Rules={start:[{token:\"keyword\",regex:\"(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)\"+s},{token:\"constant.language\",regex:\"(?:true|false|yes|no|on|off|null|void|undefined)\"+s},{token:\"invalid.illegal\",regex:\"(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)\"+s},{token:\"language.support.class\",regex:\"(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)\"+s},{token:\"language.support.function\",regex:\"(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)\"+s},{token:\"variable.language\",regex:\"(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)\"+s},{token:\"identifier\",regex:r+\"\\\\s*:(?![:=])\"},{token:\"variable\",regex:r},{token:\"keyword.operator\",regex:\"(?:\\\\.{3}|\\\\s+\\\\?)\"},{token:\"keyword.variable\",regex:\"(?:@+|::|\\\\.\\\\.)\",next:\"key\"},{token:\"keyword.operator\",regex:\"\\\\.\\\\s*\",next:\"key\"},{token:\"string\",regex:\"\\\\\\\\\\\\S[^\\\\s,;)}\\\\]]*\"},{token:\"string.doc\",regex:\"'''\",next:\"qdoc\"},{token:\"string.doc\",regex:'\"\"\"',next:\"qqdoc\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"string\",regex:\"`\",next:\"js\"},{token:\"string\",regex:\"<\\\\[\",next:\"words\"},{token:\"string.regex\",regex:\"//\",next:\"heregex\"},{token:\"comment.doc\",regex:\"/\\\\*\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:\"string.regex\",regex:\"\\\\/(?:[^[\\\\/\\\\n\\\\\\\\]*(?:(?:\\\\\\\\.|\\\\[[^\\\\]\\\\n\\\\\\\\]*(?:\\\\\\\\.[^\\\\]\\\\n\\\\\\\\]*)*\\\\])[^[\\\\/\\\\n\\\\\\\\]*)*)\\\\/[gimy$]{0,4}\",next:\"key\"},{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*|(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*|(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)(?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)\"},{token:\"lparen\",regex:\"[({[]\"},{token:\"rparen\",regex:\"[)}\\\\]]\",next:\"key\"},{token:\"keyword.operator\",regex:\"[\\\\^!|&%+\\\\-]+\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?//[gimy$?]{0,4}\",next:\"start\"},{token:\"string.regex\",regex:\"\\\\s*#{\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{defaultToken:\"string.regex\"}],key:[{token:\"keyword.operator\",regex:\"[.?@!]+\"},{token:\"identifier\",regex:r,next:\"start\"},{token:\"text\",regex:\"\",next:\"start\"}],comment:[{token:\"comment.doc\",regex:\".*?\\\\*/\",next:\"start\"},{defaultToken:\"comment.doc\"}],qdoc:[{token:\"string\",regex:\".*?'''\",next:\"key\"},o],qqdoc:[{token:\"string\",regex:'.*?\"\"\"',next:\"key\"},o],qstring:[{token:\"string\",regex:\"[^\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\']*)*'\",next:\"key\"},o],qqstring:[{token:\"string\",regex:'[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',next:\"key\"},o],js:[{token:\"string\",regex:\"[^\\\\\\\\`]*(?:\\\\\\\\.[^\\\\\\\\`]*)*`\",next:\"key\"},o],words:[{token:\"string\",regex:\".*?\\\\]>\",next:\"key\"},o]}});                (function() {\n                    ace.require([\"ace/mode/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-logiql.js",
    "content": "ace.define(\"ace/mode/logiql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.block\",regex:\"/\\\\*\",push:[{token:\"comment.block\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block\"}]},{token:\"comment.single\",regex:\"//.*\"},{token:\"constant.numeric\",regex:\"\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?[fd]?\"},{token:\"string\",regex:'\"',push:[{token:\"string\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"constant.language\",regex:\"\\\\b(true|false)\\\\b\"},{token:\"entity.name.type.logicblox\",regex:\"`[a-zA-Z_:]+(\\\\d|\\\\a)*\\\\b\"},{token:\"keyword.start\",regex:\"->\",comment:\"Constraint\"},{token:\"keyword.start\",regex:\"-->\",comment:\"Level 1 Constraint\"},{token:\"keyword.start\",regex:\"<-\",comment:\"Rule\"},{token:\"keyword.start\",regex:\"<--\",comment:\"Level 1 Rule\"},{token:\"keyword.end\",regex:\"\\\\.\",comment:\"Terminator\"},{token:\"keyword.other\",regex:\"!\",comment:\"Negation\"},{token:\"keyword.other\",regex:\",\",comment:\"Conjunction\"},{token:\"keyword.other\",regex:\";\",comment:\"Disjunction\"},{token:\"keyword.operator\",regex:\"<=|>=|!=|<|>\",comment:\"Equality\"},{token:\"keyword.other\",regex:\"@\",comment:\"Equality\"},{token:\"keyword.operator\",regex:\"\\\\+|-|\\\\*|/\",comment:\"Arithmetic operations\"},{token:\"keyword\",regex:\"::\",comment:\"Colon colon\"},{token:\"support.function\",regex:\"\\\\b(agg\\\\s*<<)\",push:[{include:\"$self\"},{token:\"support.function\",regex:\">>\",next:\"pop\"}]},{token:\"storage.modifier\",regex:\"\\\\b(lang:[\\\\w:]*)\"},{token:[\"storage.type\",\"text\"],regex:\"(export|sealed|clauses|block|alias|alias_all)(\\\\s*\\\\()(?=`)\"},{token:\"entity.name\",regex:\"[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\\\(|\\\\[))\"},{token:\"variable.parameter\",regex:\"([a-zA-Z][a-zA-Z_0-9]*|_)\\\\s*(?=(,|\\\\.|<-|->|\\\\)|\\\\]|=))\"}]},this.normalizeRules()};r.inherits(s,i),t.LogiQLHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/logiql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/logiql_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/token_iterator\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./logiql_highlight_rules\").LogiQLHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=e(\"../token_iterator\").TokenIterator,a=e(\"../range\").Range,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./matching_brace_outdent\").MatchingBraceOutdent,c=function(){this.HighlightRules=s,this.foldingRules=new o,this.$outdent=new l,this.$behaviour=new f};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(/comment|string/.test(o))return r;if(s.length&&s[s.length-1].type==\"comment.single\")return r;var u=t.match();return/(-->|<--|<-|->|{)\\s*$/.test(t)&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)?!0:n!==\"\\n\"&&n!==\"\\r\\n\"?!1:/^\\s+/.test(t)?!0:!1},this.autoOutdent=function(e,t,n){if(this.$outdent.autoOutdent(t,n))return;var r=t.getLine(n),i=r.match(/^\\s+/),s=r.lastIndexOf(\".\")+1;if(!i||!n||!s)return 0;var o=t.getLine(n+1),u=this.getMatching(t,{row:n,column:s});if(!u||u.start.row==n)return 0;s=i[0].length;var f=this.$getIndent(t.getLine(u.start.row));t.replace(new a(n+1,0,n+1,s),f)},this.getMatching=function(e,t,n){t==undefined&&(t=e.selection.lead),typeof t==\"object\"&&(n=t.column,t=t.row);var r=e.getTokenAt(t,n),i=\"keyword.start\",s=\"keyword.end\",o;if(!r)return;if(r.type==i){var f=new u(e,t,n);f.step=f.stepForward}else{if(r.type!=s)return;var f=new u(e,t,n);f.step=f.stepBackward}while(o=f.step())if(o.type==i||o.type==s)break;if(!o||o.type==r.type)return;var l=f.getCurrentTokenColumn(),t=f.getCurrentTokenRow();return new a(t,l,t,l+o.value.length)},this.$id=\"ace/mode/logiql\"}.call(c.prototype),t.Mode=c});                (function() {\n                    ace.require([\"ace/mode/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-logtalk.js",
    "content": "ace.define(\"ace/mode/logtalk_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"punctuation.definition.comment.logtalk\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.logtalk\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.logtalk\"}]},{todo:\"fix grouping\",token:[\"comment.line.percentage.logtalk\",\"punctuation.definition.comment.logtalk\"],regex:\"%.*$\\\\n?\"},{todo:\"fix grouping\",token:[\"storage.type.opening.logtalk\",\"punctuation.definition.storage.type.logtalk\"],regex:\":-\\\\s(?:object|protocol|category|module)(?=[(])\"},{todo:\"fix grouping\",token:[\"storage.type.closing.logtalk\",\"punctuation.definition.storage.type.logtalk\"],regex:\":-\\\\send_(?:object|protocol|category)(?=[.])\"},{caseInsensitive:!1,token:\"storage.type.relations.logtalk\",regex:\"\\\\b(?:complements|extends|i(?:nstantiates|mp(?:orts|lements))|specializes)(?=[(])\"},{caseInsensitive:!1,todo:\"fix grouping\",token:[\"storage.modifier.others.logtalk\",\"punctuation.definition.storage.modifier.logtalk\"],regex:\":-\\\\s(?:e(?:lse|ndif)|built_in|dynamic|synchronized|threaded)(?=[.])\"},{caseInsensitive:!1,todo:\"fix grouping\",token:[\"storage.modifier.others.logtalk\",\"punctuation.definition.storage.modifier.logtalk\"],regex:\":-\\\\s(?:c(?:alls|oinductive)|e(?:lif|n(?:coding|sure_loaded)|xport)|i(?:f|n(?:clude|itialization|fo))|reexport|set_(?:logtalk|prolog)_flag|uses)(?=[(])\"},{caseInsensitive:!1,todo:\"fix grouping\",token:[\"storage.modifier.others.logtalk\",\"punctuation.definition.storage.modifier.logtalk\"],regex:\":-\\\\s(?:alias|info|d(?:ynamic|iscontiguous)|m(?:eta_(?:non_terminal|predicate)|ode|ultifile)|p(?:ublic|r(?:otected|ivate))|op|use(?:s|_module)|synchronized)(?=[(])\"},{token:\"keyword.operator.message-sending.logtalk\",regex:\"(:|::|\\\\^\\\\^)\"},{token:\"keyword.operator.external-call.logtalk\",regex:\"([{}])\"},{token:\"keyword.operator.mode.logtalk\",regex:\"(\\\\?|@)\"},{token:\"keyword.operator.comparison.term.logtalk\",regex:\"(@=<|@<|@>|@>=|==|\\\\\\\\==)\"},{token:\"keyword.operator.comparison.arithmetic.logtalk\",regex:\"(=<|<|>|>=|=:=|=\\\\\\\\=)\"},{token:\"keyword.operator.bitwise.logtalk\",regex:\"(<<|>>|/\\\\\\\\|\\\\\\\\/|\\\\\\\\)\"},{token:\"keyword.operator.evaluable.logtalk\",regex:\"\\\\b(?:e|pi|div|mod|rem)\\\\b(?![-!(^~])\"},{token:\"keyword.operator.evaluable.logtalk\",regex:\"(\\\\*\\\\*|\\\\+|-|\\\\*|/|//)\"},{token:\"keyword.operator.misc.logtalk\",regex:\"(:-|!|\\\\\\\\+|,|;|-->|->|=|\\\\=|\\\\.|=\\\\.\\\\.|\\\\^|\\\\bas\\\\b|\\\\bis\\\\b)\"},{caseInsensitive:!1,token:\"support.function.evaluable.logtalk\",regex:\"\\\\b(a(bs|cos|sin|tan|tan2)|c(eiling|os)|div|exp|flo(at(_(integer|fractional)_part)?|or)|log|m(ax|in|od)|r(em|ound)|s(i(n|gn)|qrt)|t(an|runcate)|xor)(?=[(])\"},{token:\"support.function.control.logtalk\",regex:\"\\\\b(?:true|fa(?:il|lse)|repeat|(?:instantiation|system)_error)\\\\b(?![-!(^~])\"},{token:\"support.function.control.logtalk\",regex:\"\\\\b((?:type|domain|existence|permission|representation|evaluation|resource|syntax)_error)(?=[(])\"},{token:\"support.function.control.logtalk\",regex:\"\\\\b(?:ca(?:ll|tch)|ignore|throw|once)(?=[(])\"},{token:\"support.function.chars-and-bytes-io.logtalk\",regex:\"\\\\b(?:(?:get|p(?:eek|ut))_(c(?:har|ode)|byte)|nl)(?=[(])\"},{token:\"support.function.chars-and-bytes-io.logtalk\",regex:\"\\\\bnl\\\\b\"},{token:\"support.function.atom-term-processing.logtalk\",regex:\"\\\\b(?:atom_(?:length|c(?:hars|o(?:ncat|des)))|sub_atom|char_code|number_c(?:har|ode)s)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.term-testing.logtalk\",regex:\"\\\\b(?:var|atom(ic)?|integer|float|c(?:allable|ompound)|n(?:onvar|umber)|ground|acyclic_term)(?=[(])\"},{token:\"support.function.term-comparison.logtalk\",regex:\"\\\\b(compare)(?=[(])\"},{token:\"support.function.term-io.logtalk\",regex:\"\\\\b(?:read(_term)?|write(?:q|_(?:canonical|term))?|(current_)?(?:char_conversion|op))(?=[(])\"},{caseInsensitive:!1,token:\"support.function.term-creation-and-decomposition.logtalk\",regex:\"\\\\b(arg|copy_term|functor|numbervars|term_variables)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.term-unification.logtalk\",regex:\"\\\\b(subsumes_term|unify_with_occurs_check)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.stream-selection-and-control.logtalk\",regex:\"\\\\b(?:(?:se|curren)t_(?:in|out)put|open|close|flush_output|stream_property|at_end_of_stream|set_stream_position)(?=[(])\"},{token:\"support.function.stream-selection-and-control.logtalk\",regex:\"\\\\b(?:flush_output|at_end_of_stream)\\\\b\"},{token:\"support.function.prolog-flags.logtalk\",regex:\"\\\\b((?:se|curren)t_prolog_flag)(?=[(])\"},{token:\"support.function.compiling-and-loading.logtalk\",regex:\"\\\\b(logtalk_(?:compile|l(?:ibrary_path|oad|oad_context)|make(_target_action)?))(?=[(])\"},{token:\"support.function.compiling-and-loading.logtalk\",regex:\"\\\\b(logtalk_make)\\\\b\"},{caseInsensitive:!1,token:\"support.function.event-handling.logtalk\",regex:\"\\\\b(?:(?:abolish|define)_events|current_event)(?=[(])\"},{token:\"support.function.implementation-defined-hooks.logtalk\",regex:\"\\\\b(?:(?:create|current|set)_logtalk_flag|halt)(?=[(])\"},{token:\"support.function.implementation-defined-hooks.logtalk\",regex:\"\\\\b(halt)\\\\b\"},{token:\"support.function.sorting.logtalk\",regex:\"\\\\b((key)?(sort))(?=[(])\"},{caseInsensitive:!1,token:\"support.function.entity-creation-and-abolishing.logtalk\",regex:\"\\\\b((c(?:reate|urrent)|abolish)_(?:object|protocol|category))(?=[(])\"},{caseInsensitive:!1,token:\"support.function.reflection.logtalk\",regex:\"\\\\b((object|protocol|category)_property|co(mplements_object|nforms_to_protocol)|extends_(object|protocol|category)|imp(orts_category|lements_protocol)|(instantiat|specializ)es_class)(?=[(])\"},{token:\"support.function.logtalk\",regex:\"\\\\b((?:for|retract)all)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.execution-context.logtalk\",regex:\"\\\\b(?:context|parameter|se(?:lf|nder)|this)(?=[(])\"},{token:\"support.function.database.logtalk\",regex:\"\\\\b(?:a(?:bolish|ssert(?:a|z))|clause|retract(all)?)(?=[(])\"},{token:\"support.function.all-solutions.logtalk\",regex:\"\\\\b((?:bag|set)of|f(?:ind|or)all)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.multi-threading.logtalk\",regex:\"\\\\b(threaded(_(call|once|ignore|exit|peek|wait|notify))?)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.engines.logtalk\",regex:\"\\\\b(threaded_engine(_(create|destroy|self|next(?:_reified)?|yield|post|fetch))?)(?=[(])\"},{caseInsensitive:!1,token:\"support.function.reflection.logtalk\",regex:\"\\\\b(?:current_predicate|predicate_property)(?=[(])\"},{token:\"support.function.event-handler.logtalk\",regex:\"\\\\b(?:before|after)(?=[(])\"},{token:\"support.function.message-forwarding-handler.logtalk\",regex:\"\\\\b(forward)(?=[(])\"},{token:\"support.function.grammar-rule.logtalk\",regex:\"\\\\b(?:expand_(?:goal|term)|(?:goal|term)_expansion|phrase)(?=[(])\"},{token:\"punctuation.definition.string.begin.logtalk\",regex:\"'\",push:[{token:\"constant.character.escape.logtalk\",regex:\"\\\\\\\\([\\\\\\\\abfnrtv\\\"']|(x[a-fA-F0-9]+|[0-7]+)\\\\\\\\)\"},{token:\"punctuation.definition.string.end.logtalk\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.quoted.single.logtalk\"}]},{token:\"punctuation.definition.string.begin.logtalk\",regex:'\"',push:[{token:\"constant.character.escape.logtalk\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.logtalk\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.logtalk\"}]},{token:\"constant.numeric.logtalk\",regex:\"\\\\b(0b[0-1]+|0o[0-7]+|0x[0-9a-fA-F]+)\\\\b\"},{token:\"constant.numeric.logtalk\",regex:\"\\\\b(0'\\\\\\\\.|0'.|0''|0'\\\")\"},{token:\"constant.numeric.logtalk\",regex:\"\\\\b(\\\\d+\\\\.?\\\\d*((e|E)(\\\\+|-)?\\\\d+)?)\\\\b\"},{token:\"variable.other.logtalk\",regex:\"\\\\b([A-Z_][A-Za-z0-9_]*)\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.LogtalkHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/logtalk\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/logtalk_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"../tokenizer\").Tokenizer,o=e(\"./logtalk_highlight_rules\").LogtalkHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=o,this.foldingRules=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"%\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/logtalk\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-lsl.js",
    "content": "ace.define(\"ace/mode/lsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=this.createKeywordMapper({\"constant.language.float.lsl\":\"DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI\",\"constant.language.integer.lsl\":\"ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|CHARACTER_RADIUS|CHARACTER_STAY_WITHIN_PARCEL|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DENSITY|ERR_GENERIC|ERR_MALFORMED_PARAMS|ERR_PARCEL_PERMISSIONS|ERR_RUNTIME_PERMISSIONS|ERR_THROTTLED|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|FALSE|FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_BODY_SHAPE_TYPE|OBJECT_CHARACTER_TIME|OBJECT_CLICK_ACTION|OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_HOVER_HEIGHT|OBJECT_LAST_OWNER_ID|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_PHYSICS_COST|OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_RENDER_WEIGHT|OBJECT_RETURN_PARCEL|OBJECT_RETURN_PARCEL_OWNER|OBJECT_RETURN_REGION|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|OBJECT_TEMP_ON_REZ|OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|PARCEL_DETAILS_SEE_AVATARS|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|PARCEL_FLAG_ALLOW_TERRAFORM|PARCEL_FLAG_LOCAL_SOUND_ONLY|PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|PARCEL_FLAG_USE_LAND_PASS_LIST|PARCEL_MEDIA_COMMAND_AGENT|PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|PARCEL_MEDIA_COMMAND_PAUSE|PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASS_ALWAYS|PASS_IF_NOT_HANDLED|PASS_NEVER|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|PERMISSION_RETURN_OBJECTS|PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_ALPHA_MODE|PRIM_ALPHA_MODE_BLEND|PRIM_ALPHA_MODE_EMISSIVE|PRIM_ALPHA_MODE_MASK|PRIM_ALPHA_MODE_NONE|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CONTROLS_STANDARD|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|PRIM_MEDIA_WIDTH_PIXELS|PRIM_NAME|PRIM_NORMAL|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|PRIM_SLICE|PRIM_SPECULAR|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|PROFILE_SCRIPT_MEMORY|PSYS_PART_BF_DEST_COLOR|PSYS_PART_BF_ONE|PSYS_PART_BF_ONE_MINUS_DEST_COLOR|PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA|PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR|PSYS_PART_BF_SOURCE_ALPHA|PSYS_PART_BF_SOURCE_COLOR|PSYS_PART_BF_ZERO|PSYS_PART_BLEND_FUNC_DEST|PSYS_PART_BLEND_FUNC_SOURCE|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|PSYS_PART_END_COLOR|PSYS_PART_END_GLOW|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_MAX_AGE|PSYS_PART_RIBBON_MASK|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_GLOW|PSYS_PART_START_SCALE|PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|RC_REJECT_TYPES|REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|TRUE|TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|WANDER_PAUSE_AT_WAYPOINTS|XP_ERROR_EXPERIENCES_DISABLED|XP_ERROR_EXPERIENCE_DISABLED|XP_ERROR_EXPERIENCE_SUSPENDED|XP_ERROR_INVALID_EXPERIENCE|XP_ERROR_INVALID_PARAMETERS|XP_ERROR_KEY_NOT_FOUND|XP_ERROR_MATURITY_EXCEEDED|XP_ERROR_NONE|XP_ERROR_NOT_FOUND|XP_ERROR_NOT_PERMITTED|XP_ERROR_NO_EXPERIENCE|XP_ERROR_QUOTA_EXCEEDED|XP_ERROR_RETRY_UPDATE|XP_ERROR_STORAGE_EXCEPTION|XP_ERROR_STORE_DISABLED|XP_ERROR_THROTTLED|XP_ERROR_UNKNOWN_ERROR\",\"constant.language.integer.boolean.lsl\":\"FALSE|TRUE\",\"constant.language.quaternion.lsl\":\"ZERO_ROTATION\",\"constant.language.string.lsl\":\"EOF|JSON_ARRAY|JSON_DELETE|JSON_FALSE|JSON_INVALID|JSON_NULL|JSON_NUMBER|JSON_OBJECT|JSON_STRING|JSON_TRUE|NULL_KEY|TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED\",\"constant.language.vector.lsl\":\"TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR\",\"invalid.broken.lsl\":\"LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH\",\"invalid.deprecated.lsl\":\"ATTACH_LPEC|ATTACH_RPEC|DATA_RATING|OBJECT_ATTACHMENT_GEOMETRY_BYTES|OBJECT_ATTACHMENT_SURFACE_AREA|PRIM_CAST_SHADOWS|PRIM_MATERIAL_LIGHT|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP|llClearExperiencePermissions|llCloud|llGetExperienceList|llMakeExplosion|llMakeFire|llMakeFountain|llMakeSmoke|llRemoteDataSetRegion|llSound|llSoundPreload|llXorBase64Strings|llXorBase64StringsCorrect\",\"invalid.illegal.lsl\":\"event\",\"invalid.unimplemented.lsl\":\"CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|PERMISSION_CHANGE_JOINTS|PERMISSION_CHANGE_PERMISSIONS|PERMISSION_EXPERIENCE|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|PRIM_PHYSICS_MATERIAL|PSYS_SRC_OBJ_REL_MASK|llCollisionSprite|llPointAt|llRefreshPrimURL|llReleaseCamera|llRemoteLoadScript|llSetPrimURL|llStopPointAt|llTakeCamera\",\"reserved.godmode.lsl\":\"llGodLikeRezObject|llSetInventoryPermMask|llSetObjectPermMask\",\"reserved.log.lsl\":\"print\",\"keyword.control.lsl\":\"do|else|for|if|jump|return|while\",\"storage.type.lsl\":\"float|integer|key|list|quaternion|rotation|string|vector\",\"support.function.lsl\":\"llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|llAdjustSoundVolume|llAgentInExperience|llAllowInventoryDrop|llAngleBetween|llApplyImpulse|llApplyRotationalImpulse|llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|llAvatarOnLinkSitTarget|llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|llBase64ToInteger|llBase64ToString|llBreakAllLinks|llBreakLink|llCSV2List|llCastRay|llCeil|llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|llCollisionFilter|llCollisionSound|llCos|llCreateCharacter|llCreateKeyValue|llCreateLink|llDataSizeKeyValue|llDeleteCharacter|llDeleteKeyValue|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|llDetectedGrab|llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llEvade|llExecCharacterCmd|llFabs|llFleeFrom|llFloor|llForceMouselook|llFrand|llGenerateKey|llGetAccel|llGetAgentInfo|llGetAgentLanguage|llGetAgentList|llGetAgentSize|llGetAlpha|llGetAndResetTime|llGetAnimation|llGetAnimationList|llGetAnimationOverride|llGetAttached|llGetAttachedList|llGetBoundingBox|llGetCameraPos|llGetCameraRot|llGetCenterOfMass|llGetClosestNavPoint|llGetColor|llGetCreator|llGetDate|llGetDisplayName|llGetEnergy|llGetEnv|llGetExperienceDetails|llGetExperienceErrorMessage|llGetForce|llGetFreeMemory|llGetFreeURLs|llGetGMTclock|llGetGeometricCenter|llGetHTTPHeader|llGetInventoryCreator|llGetInventoryKey|llGetInventoryName|llGetInventoryNumber|llGetInventoryPermMask|llGetInventoryType|llGetKey|llGetLandOwnerAt|llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|llGetListLength|llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|llGetMaxScaleFactor|llGetMemoryLimit|llGetMinScaleFactor|llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|llGetNumberOfPrims|llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|llGetObjectMass|llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|llGetOmega|llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|llGetParcelMaxPrims|llGetParcelMusicURL|llGetParcelPrimCount|llGetParcelPrimOwners|llGetPermissions|llGetPermissionsKey|llGetPhysicsMaterial|llGetPos|llGetPrimMediaParams|llGetPrimitiveParams|llGetRegionAgentCount|llGetRegionCorner|llGetRegionFPS|llGetRegionFlags|llGetRegionName|llGetRegionTimeDilation|llGetRootPosition|llGetRootRotation|llGetRot|llGetSPMaxMemory|llGetScale|llGetScriptName|llGetScriptState|llGetSimStats|llGetSimulatorHostname|llGetStartParameter|llGetStaticPath|llGetStatus|llGetSubString|llGetSunDirection|llGetTexture|llGetTextureOffset|llGetTextureRot|llGetTextureScale|llGetTime|llGetTimeOfDay|llGetTimestamp|llGetTorque|llGetUnixTime|llGetUsedMemory|llGetUsername|llGetVel|llGetWallclock|llGiveInventory|llGiveInventoryList|llGiveMoney|llGround|llGroundContour|llGroundNormal|llGroundRepel|llGroundSlope|llHTTPRequest|llHTTPResponse|llInsertString|llInstantMessage|llIntegerToBase64|llJson2List|llJsonGetValue|llJsonSetValue|llJsonValueType|llKey2Name|llKeyCountKeyValue|llKeysKeyValue|llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|llList2Json|llList2Key|llList2List|llList2ListStrided|llList2Rot|llList2String|llList2Vector|llListFindList|llListInsertList|llListRandomize|llListReplaceList|llListSort|llListStatistics|llListen|llListenControl|llListenRemove|llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|llLoopSoundSlave|llMD5String|llManageEstateAccess|llMapDestination|llMessageLinked|llMinEventDelay|llModPow|llModifyLand|llMoveToTarget|llNavigateTo|llOffsetTexture|llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|llPassCollisions|llPassTouches|llPatrolPoints|llPlaySound|llPlaySoundSlave|llPow|llPreloadSound|llPursue|llPushObject|llReadKeyValue|llRegionSay|llRegionSayTo|llReleaseControls|llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|llRemoveFromLandBanList|llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|llRequestAgentData|llRequestDisplayName|llRequestExperiencePermissions|llRequestInventoryData|llRequestPermissions|llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|llResetScript|llResetTime|llReturnObjectsByID|llReturnObjectsByOwner|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|llRot2Fwd|llRot2Left|llRot2Up|llRotBetween|llRotLookAt|llRotTarget|llRotTargetRemove|llRotateTexture|llRound|llSHA1String|llSameGroup|llSay|llScaleByFactor|llScaleTexture|llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetAnimationOverride|llSetBuoyancy|llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|llSetHoverHeight|llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|llSetLinkColor|llSetLinkMedia|llSetLinkPrimitiveParams|llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|llSetParcelMusicURL|llSetPayPrice|llSetPhysicsMaterial|llSetPos|llSetPrimMediaParams|llSetPrimitiveParams|llSetRegionPos|llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|llSetSitText|llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|llSetTexture|llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|llSetVehicleFlags|llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|llSetVehicleVectorParam|llSetVelocity|llShout|llSin|llSitTarget|llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|llUnSit|llUnescapeURL|llUpdateCharacter|llUpdateKeyValue|llVecDist|llVecMag|llVecNorm|llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64\",\"support.function.event.lsl\":\"at_rot_target|at_target|attach|changed|collision|collision_end|collision_start|control|dataserver|email|experience_permissions|experience_permissions_denied|http_request|http_response|land_collision|land_collision_end|land_collision_start|link_message|listen|money|moving_end|moving_start|no_sensor|not_at_rot_target|not_at_target|object_rez|on_rez|path_update|remote_data|run_time_permissions|sensor|state_entry|state_exit|timer|touch|touch_end|touch_start|transaction_result\"},\"identifier\");this.$rules={start:[{token:\"comment.line.double-slash.lsl\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.block.begin.lsl\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.quoted.double.lsl\",start:'\"',end:'\"',next:[{token:\"constant.character.escape.lsl\",regex:/\\\\[tn\"\\\\]/}]},{token:\"constant.numeric.lsl\",regex:\"(0[xX][0-9a-fA-F]+|[+-]?[0-9]+(?:(?:\\\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)?)\\\\b\"},{token:\"entity.name.state.lsl\",regex:\"\\\\b((state)\\\\s+[A-Za-z_]\\\\w*|default)\\\\b\"},{token:e,regex:\"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"support.function.user-defined.lsl\",regex:/\\b([a-zA-Z_]\\w*)(?=\\(.*?\\))/},{token:\"keyword.operator.lsl\",regex:\"\\\\+\\\\+|\\\\-\\\\-|<<|>>|&&?|\\\\|\\\\|?|\\\\^|~|[!%<>=*+\\\\-\\\\/]=?\"},{token:\"invalid.illegal.keyword.operator.lsl\",regex:\":=?\"},{token:\"punctuation.operator.lsl\",regex:\"\\\\,|\\\\;\"},{token:\"paren.lparen.lsl\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen.lsl\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text.lsl\",regex:\"\\\\s+\"}],comment:[{token:\"comment.block.end.lsl\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment.block.lsl\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.LSLHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/lsl\",[\"require\",\"exports\",\"module\",\"ace/mode/lsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/text\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./lsl_highlight_rules\").LSLHighlightRules,i=e(\"./matching_brace_outdent\").MatchingBraceOutdent,s=e(\"../range\").Range,o=e(\"./text\").Mode,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"../lib/oop\"),l=function(){this.HighlightRules=r,this.$outdent=new i,this.$behaviour=new u,this.foldingRules=new a};f.inherits(l,o),function(){this.lineCommentStart=[\"//\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type===\"comment.block.lsl\")return r;if(e===\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/lsl\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-lua.js",
    "content": "ace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"setn|foreach|foreachi|gcinfo|log10|maxn\",s=this.createKeywordMapper({keyword:e,\"support.function\":n,\"keyword.deprecated\":i,\"constant.library\":r,\"constant.language\":t,\"variable.language\":\"self\"},\"identifier\"),o=\"(?:(?:[1-9]\\\\d*)|(?:0))\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:\"+o+\"|\"+u+\")\",f=\"(?:\\\\.\\\\d+)\",l=\"(?:\\\\d+)\",c=\"(?:(?:\"+l+\"?\"+f+\")|(?:\"+l+\"\\\\.))\",h=\"(?:\"+c+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"string.start\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"string.end\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:h},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),ace.define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/,this.foldingStopMarker=/\\bend\\b|^\\s*}|\\]=*\\]/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]==\"then\"&&/\\belseif\\b/.test(r))return;if(o[1]){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"start\"}else{if(!o[2])return\"start\";var u=e.bgTokenizer.getState(n)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[0]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(o[0][0]!==\"]\")return\"end\";var u=e.bgTokenizer.getState(n-1)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.luaBlock(e,n,i.index+1):i[2]?e.getCommentFoldRange(n,i.index+1):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[0]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.luaBlock(e,n,i.index+1):i[0][0]===\"]\"?e.getCommentFoldRange(n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.luaBlock=function(e,t,n){var r=new o(e,t,n),i={\"function\":1,\"do\":1,then:1,elseif:-1,end:-1,repeat:1,until:-1},u=r.getCurrentToken();if(!u||u.type!=\"keyword\")return;var a=u.value,f=[a],l=i[a];if(!l)return;var c=l===-1?r.getCurrentTokenColumn():e.getLine(t).length,h=t;r.step=l===-1?r.stepBackward:r.stepForward;while(u=r.step()){if(u.type!==\"keyword\")continue;var p=l*i[u.value];if(p>0)f.unshift(u.value);else if(p<=0){f.shift();if(!f.length&&u.value!=\"elseif\")break;p===0&&f.unshift(u.value)}}var t=r.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,h,c):new s(h,c,t,r.getCurrentTokenColumn())}}.call(u.prototype)}),ace.define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lua_highlight_rules\").LuaHighlightRules,o=e(\"./folding/lua\").FoldMode,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){function n(t){var n=0;for(var r=0;r<t.length;r++){var i=t[r];i.type==\"keyword\"?i.value in e&&(n+=e[i.value]):i.type==\"paren.lparen\"?n+=i.value.length:i.type==\"paren.rparen\"&&(n-=i.value.length)}return n<0?-1:n>0?1:0}this.lineCommentStart=\"--\",this.blockComment={start:\"--[\",end:\"]--\"};var e={\"function\":1,then:1,\"do\":1,\"else\":1,elseif:1,repeat:1,end:-1,until:-1},t=[\"else\",\"elseif\",\"end\",\"until\"];this.getNextLineIndent=function(e,t,r){var i=this.$getIndent(t),s=0,o=this.getTokenizer().getLineTokens(t,e),u=o.tokens;return e==\"start\"&&(s=n(u)),s>0?i+r:s<0&&i.substr(i.length-r.length)==r&&!this.checkOutdent(e,t,\"\\n\")?i.substr(0,i.length-r.length):i},this.checkOutdent=function(e,n,r){if(r!=\"\\n\"&&r!=\"\\r\"&&r!=\"\\r\\n\")return!1;if(n.match(/^\\s*[\\)\\}\\]]$/))return!0;var i=this.getTokenizer().getLineTokens(n.trim(),e).tokens;return!i||!i.length?!1:i[0].type==\"keyword\"&&t.indexOf(i[0].value)!=-1},this.autoOutdent=function(e,t,r){var i=t.getLine(r-1),s=this.$getIndent(i).length,o=this.getTokenizer().getLineTokens(i,\"start\").tokens,a=t.getTabString().length,f=s+a*n(o),l=this.$getIndent(t.getLine(r)).length;if(l<=f)return;t.outdentRows(new u(r,0,r+2,0))},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/lua_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/lua\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-luapage.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"setn|foreach|foreachi|gcinfo|log10|maxn\",s=this.createKeywordMapper({keyword:e,\"support.function\":n,\"keyword.deprecated\":i,\"constant.library\":r,\"constant.language\":t,\"variable.language\":\"self\"},\"identifier\"),o=\"(?:(?:[1-9]\\\\d*)|(?:0))\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:\"+o+\"|\"+u+\")\",f=\"(?:\\\\.\\\\d+)\",l=\"(?:\\\\d+)\",c=\"(?:(?:\"+l+\"?\"+f+\")|(?:\"+l+\"\\\\.))\",h=\"(?:\"+c+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"string.start\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"string.end\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:h},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),ace.define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/,this.foldingStopMarker=/\\bend\\b|^\\s*}|\\]=*\\]/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]==\"then\"&&/\\belseif\\b/.test(r))return;if(o[1]){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"start\"}else{if(!o[2])return\"start\";var u=e.bgTokenizer.getState(n)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[0]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(o[0][0]!==\"]\")return\"end\";var u=e.bgTokenizer.getState(n-1)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.luaBlock(e,n,i.index+1):i[2]?e.getCommentFoldRange(n,i.index+1):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[0]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.luaBlock(e,n,i.index+1):i[0][0]===\"]\"?e.getCommentFoldRange(n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.luaBlock=function(e,t,n){var r=new o(e,t,n),i={\"function\":1,\"do\":1,then:1,elseif:-1,end:-1,repeat:1,until:-1},u=r.getCurrentToken();if(!u||u.type!=\"keyword\")return;var a=u.value,f=[a],l=i[a];if(!l)return;var c=l===-1?r.getCurrentTokenColumn():e.getLine(t).length,h=t;r.step=l===-1?r.stepBackward:r.stepForward;while(u=r.step()){if(u.type!==\"keyword\")continue;var p=l*i[u.value];if(p>0)f.unshift(u.value);else if(p<=0){f.shift();if(!f.length&&u.value!=\"elseif\")break;p===0&&f.unshift(u.value)}}var t=r.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,h,c):new s(h,c,t,r.getCurrentTokenColumn())}}.call(u.prototype)}),ace.define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lua_highlight_rules\").LuaHighlightRules,o=e(\"./folding/lua\").FoldMode,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){function n(t){var n=0;for(var r=0;r<t.length;r++){var i=t[r];i.type==\"keyword\"?i.value in e&&(n+=e[i.value]):i.type==\"paren.lparen\"?n+=i.value.length:i.type==\"paren.rparen\"&&(n-=i.value.length)}return n<0?-1:n>0?1:0}this.lineCommentStart=\"--\",this.blockComment={start:\"--[\",end:\"]--\"};var e={\"function\":1,then:1,\"do\":1,\"else\":1,elseif:1,repeat:1,end:-1,until:-1},t=[\"else\",\"elseif\",\"end\",\"until\"];this.getNextLineIndent=function(e,t,r){var i=this.$getIndent(t),s=0,o=this.getTokenizer().getLineTokens(t,e),u=o.tokens;return e==\"start\"&&(s=n(u)),s>0?i+r:s<0&&i.substr(i.length-r.length)==r&&!this.checkOutdent(e,t,\"\\n\")?i.substr(0,i.length-r.length):i},this.checkOutdent=function(e,n,r){if(r!=\"\\n\"&&r!=\"\\r\"&&r!=\"\\r\\n\")return!1;if(n.match(/^\\s*[\\)\\}\\]]$/))return!0;var i=this.getTokenizer().getLineTokens(n.trim(),e).tokens;return!i||!i.length?!1:i[0].type==\"keyword\"&&t.indexOf(i[0].value)!=-1},this.autoOutdent=function(e,t,r){var i=t.getLine(r-1),s=this.$getIndent(i).length,o=this.getTokenizer().getLineTokens(i,\"start\").tokens,a=t.getTabString().length,f=s+a*n(o),l=this.$getIndent(t.getLine(r)).length;if(l<=f)return;t.outdentRows(new u(r,0,r+2,0))},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/lua_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/lua\"}.call(f.prototype),t.Mode=f}),ace.define(\"ace/mode/luapage_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/lua_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./lua_highlight_rules\").LuaHighlightRules,o=function(){i.call(this);var e=[{token:\"keyword\",regex:\"<\\\\%\\\\=?\",push:\"lua-start\"},{token:\"keyword\",regex:\"<\\\\?lua\\\\=?\",push:\"lua-start\"}],t=[{token:\"keyword\",regex:\"\\\\%>\",next:\"pop\"},{token:\"keyword\",regex:\"\\\\?>\",next:\"pop\"}];this.embedRules(s,\"lua-\",t,[\"start\"]);for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.normalizeRules()};r.inherits(o,i),t.LuaPageHighlightRules=o}),ace.define(\"ace/mode/luapage\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/lua\",\"ace/mode/luapage_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./lua\").Mode,o=e(\"./luapage_highlight_rules\").LuaPageHighlightRules,u=function(){i.call(this),this.HighlightRules=o,this.createModeDelegates({\"lua-\":s})};r.inherits(u,i),function(){this.$id=\"ace/mode/luapage\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-lucene.js",
    "content": "ace.define(\"ace/mode/lucene_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"constant.language.escape\",regex:/\\\\[\\+\\-&\\|!\\(\\)\\{\\}\\[\\]^\"~\\*\\?:\\\\]/},{token:\"constant.character.negation\",regex:\"\\\\-\"},{token:\"constant.character.interro\",regex:\"\\\\?\"},{token:\"constant.character.required\",regex:\"\\\\+\"},{token:\"constant.character.asterisk\",regex:\"\\\\*\"},{token:\"constant.character.proximity\",regex:\"~(?:0\\\\.[0-9]+|[0-9]+)?\"},{token:\"keyword.operator\",regex:\"(AND|OR|NOT|TO)\\\\b\"},{token:\"paren.lparen\",regex:\"[\\\\(\\\\{\\\\[]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}\\\\]]\"},{token:\"keyword\",regex:\"(?:\\\\\\\\.|[^\\\\s:\\\\\\\\])+:\"},{token:\"string\",regex:'\"(?:\\\\\\\\\"|[^\"])*\"'},{token:\"term\",regex:\"\\\\w+\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(o,s),t.LuceneHighlightRules=o}),ace.define(\"ace/mode/lucene\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lucene_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lucene_highlight_rules\").LuceneHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.$id=\"ace/mode/lucene\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-makefile.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),ace.define(\"ace/mode/makefile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/sh_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./sh_highlight_rules\"),o=function(){var e=this.createKeywordMapper({keyword:s.reservedKeywords,\"support.function.builtin\":s.languageConstructs,\"invalid.deprecated\":\"debugger\"},\"string\");this.$rules={start:[{token:\"string.interpolated.backtick.makefile\",regex:\"`\",next:\"shell-start\"},{token:\"punctuation.definition.comment.makefile\",regex:/#(?=.)/,next:\"comment\"},{token:[\"keyword.control.makefile\"],regex:\"^(?:\\\\s*\\\\b)(\\\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\\\b)\"},{token:[\"entity.name.function.makefile\",\"text\"],regex:\"^([^\\\\t ]+(?:\\\\s[^\\\\t ]+)*:)(\\\\s*.*)\"}],comment:[{token:\"punctuation.definition.comment.makefile\",regex:/.+\\\\/},{token:\"punctuation.definition.comment.makefile\",regex:\".+\",next:\"start\"}],\"shell-start\":[{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"string\",regex:\"\\\\w+\"},{token:\"string.interpolated.backtick.makefile\",regex:\"`\",next:\"start\"}]}};r.inherits(o,i),t.MakefileHighlightRules=o}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/makefile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/makefile_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./makefile_highlight_rules\").MakefileHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$indentWithTabs=!0,this.$id=\"ace/mode/makefile\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-markdown.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(e){return\"(?:[^\"+s.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},f=function(){u.call(this);var e={token:\"support.function\",regex:/^\\s*(```+[^`]*|~~~+[^~]*)$/,onMatch:function(e,t,n,i){var s=e.match(/^(\\s*)([`~]+)(.*)/),o=/[\\w-]+|$/.exec(s[3])[0];return r[o]||(o=\"\"),n.unshift(\"githubblock\",[],[s[1],s[2],o],t),this.token},next:\"githubblock\"},t=[{token:\"support.function\",regex:\".*\",onMatch:function(e,t,n,i){var s=n[1],o=n[2][0],u=n[2][1],a=n[2][2],f=/^(\\s*)(`+|~+)\\s*$/.exec(e);if(f&&f[1].length<o.length+3&&f[2].length>=u.length&&f[2][0]==u[0])return n.splice(0,3),this.next=n.shift(),this.token;this.next=\"\";if(a&&r[a]){var l=r[a].getTokenizer().getLineTokens(e,s.slice(0));return n[1]=l.state,l.tokens}return this.token}}];this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s|$)/,next:\"header\"},e,{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\s*\\\\[)(\"+a(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\!?\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+a('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},e,{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:t}),this.normalizeRules()};i.inherits(f,o),t.MarkdownHighlightRules=f}),ace.define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:[=-]+\\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]==\"`\"?e.bgTokenizer.getState(n)==\"start\"?\"end\":\"start\":\"start\":\"\"},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}function h(){var e=f.value[0];return e==\"=\"?6:e==\"-\"?5:7-f.value.search(/[^#]|$/)}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;if(r[0]==\"`\"){if(e.bgTokenizer.getState(n)!==\"start\"){while(++n<o){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(u,i,n,0)}while(n-->0){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(n,r.length,u,0)}var f,c=\"markup.heading\";if(l(n)){var p=h();while(++n<o){if(!l(n))continue;var d=h();if(d>=p)break}a=n-(!f||[\"=\",\"-\"].indexOf(f.value[0])==-1?1:2);if(a>u)while(a>u&&/^\\s*$/.test(e.getLine(a)))a--;if(a>u){var v=e.getLine(a).length;return new s(u,i,a,v)}}}}.call(o.prototype)}),ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),ace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f}),ace.define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript\").Mode,o=e(\"./xml\").Mode,u=e(\"./html\").Mode,a=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,f=e(\"./folding/markdown\").FoldMode,l=function(){this.HighlightRules=a,this.createModeDelegates({javascript:e(\"./javascript\").Mode,html:e(\"./html\").Mode,bash:e(\"./sh\").Mode,sh:e(\"./sh\").Mode,xml:e(\"./xml\").Mode,css:e(\"./css\").Mode}),this.foldingRules=new f,this.$behaviour=this.$defaultBehaviour};r.inherits(l,i),function(){this.type=\"text\",this.blockComment={start:\"<!--\",end:\"-->\"},this.getNextLineIndent=function(e,t,n){if(e==\"listblock\"){var r=/^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(t);if(!r)return\"\";var i=r[2];return i||(i=parseInt(r[3],10)+1+\".\"),r[1]+i+r[4]}return this.$getIndent(t)},this.$id=\"ace/mode/markdown\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-mask.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(e){return\"(?:[^\"+s.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},f=function(){u.call(this);var e={token:\"support.function\",regex:/^\\s*(```+[^`]*|~~~+[^~]*)$/,onMatch:function(e,t,n,i){var s=e.match(/^(\\s*)([`~]+)(.*)/),o=/[\\w-]+|$/.exec(s[3])[0];return r[o]||(o=\"\"),n.unshift(\"githubblock\",[],[s[1],s[2],o],t),this.token},next:\"githubblock\"},t=[{token:\"support.function\",regex:\".*\",onMatch:function(e,t,n,i){var s=n[1],o=n[2][0],u=n[2][1],a=n[2][2],f=/^(\\s*)(`+|~+)\\s*$/.exec(e);if(f&&f[1].length<o.length+3&&f[2].length>=u.length&&f[2][0]==u[0])return n.splice(0,3),this.next=n.shift(),this.token;this.next=\"\";if(a&&r[a]){var l=r[a].getTokenizer().getLineTokens(e,s.slice(0));return n[1]=l.state,l.tokens}return this.token}}];this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s|$)/,next:\"header\"},e,{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\s*\\\\[)(\"+a(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\!?\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+a('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},e,{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:t}),this.normalizeRules()};i.inherits(f,o),t.MarkdownHighlightRules=f}),ace.define(\"ace/mode/mask_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/css_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";function N(){function t(e,t,n){var r=\"js-\"+e+\"-\",i=e===\"block\"?[\"start\"]:[\"start\",\"no_regex\"];s(o,r,t,i,n)}function n(){s(u,\"css-block-\",/\\}/)}function r(){s(a,\"md-multiline-\",/(\"\"\"|''')/,[])}function i(){s(f,\"html-multiline-\",/(\"\"\"|''')/)}function s(t,n,r,i,s){var o=\"pop\",u=i||[\"start\"];u.length===0&&(u=null),/block|multiline/.test(n)&&(o=n+\"end\",e.$rules[o]=[k(\"empty\",\"\",\"start\")]),e.embedRules(t,n,[k(s||w,r,o)],u,u==null?!0:!1)}this.$rules={start:[k(\"comment\",\"\\\\/\\\\/.*$\"),k(\"comment\",\"\\\\/\\\\*\",[k(\"comment\",\".*?\\\\*\\\\/\",\"start\"),k(\"comment\",\".+\")]),C.string(\"'''\"),C.string('\"\"\"'),C.string('\"'),C.string(\"'\"),C.syntax(/(markdown|md)\\b/,\"md-multiline\",\"multiline\"),C.syntax(/html\\b/,\"html-multiline\",\"multiline\"),C.syntax(/(slot|event)\\b/,\"js-block\",\"block\"),C.syntax(/style\\b/,\"css-block\",\"block\"),C.syntax(/var\\b/,\"js-statement\",\"attr\"),C.tag(),k(b,\"[[({>]\"),k(w,\"[\\\\])};]\",\"start\"),{caseInsensitive:!0}]};var e=this;t(\"interpolation\",/\\]/,w+\".\"+g),t(\"statement\",/\\)|}|;/),t(\"block\",/\\}/),n(),r(),i(),this.normalizeRules()}function k(e,t,n){var r,i,s;return arguments.length===4?(r=n,i=arguments[3]):typeof n==\"string\"?i=n:r=n,typeof e==\"function\"&&(s=e,e=\"empty\"),{token:e,regex:t,push:r,next:i,onMatch:s}}t.MaskHighlightRules=N;var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./css_highlight_rules\").CssHighlightRules,a=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,f=e(\"./html_highlight_rules\").HtmlHighlightRules,l=\"keyword.support.constant.language\",c=\"support.function.markup.bold\",h=\"keyword\",p=\"constant.language\",d=\"keyword.control.markup.italic\",v=\"support.variable.class\",m=\"keyword.operator\",g=\"markup.italic\",y=\"markup.bold\",b=\"paren.lparen\",w=\"paren.rparen\",E,S,x,T;(function(){E=i.arrayToMap(\"log\".split(\"|\")),x=i.arrayToMap(\":dualbind|:bind|:import|slot|event|style|html|markdown|md\".split(\"|\")),S=i.arrayToMap(\"debugger|define|var|if|each|for|of|else|switch|case|with|visible|+if|+each|+for|+switch|+with|+visible|include|import\".split(\"|\")),T=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\"))})(),r.inherits(N,s);var C={string:function(e,t){var n=k(\"string.start\",e,[k(b+\".\"+g,/~\\[/,C.interpolation()),k(\"string.end\",e,\"pop\"),{defaultToken:\"string\"}],t);if(e.length===1){var r=k(\"string.escape\",\"\\\\\\\\\"+e);n.push.unshift(r)}return n},interpolation:function(){return[k(d,/\\s*\\w*\\s*:/),\"js-interpolation-start\"]},tagHead:function(e){return k(v,e,[k(v,/[\\w\\-_]+/),k(b+\".\"+g,/~\\[/,C.interpolation()),C.goUp()])},tag:function(){return{token:\"tag\",onMatch:function(e){return void 0!==S[e]?h:void 0!==x[e]?p:void 0!==E[e]?\"support.function\":void 0!==T[e.toLowerCase()]?l:c},regex:/([@\\w\\-_:+]+)|((^|\\s)(?=\\s*(\\.|#)))/,push:[C.tagHead(/\\./),C.tagHead(/#/),C.expression(),C.attribute(),k(b,/[;>{]/,\"pop\")]}},syntax:function(e,t,n){return{token:p,regex:e,push:{attr:[t+\"-start\",k(m,/;/,\"start\")],multiline:[C.tagHead(/\\./),C.tagHead(/#/),C.attribute(),C.expression(),k(b,/[>\\{]/),k(m,/;/,\"start\"),k(b,/'''|\"\"\"/,[t+\"-start\"])],block:[C.tagHead(/\\./),C.tagHead(/#/),C.attribute(),C.expression(),k(b,/\\{/,[t+\"-start\"])]}[n]}},attribute:function(){return k(function(e){return/^x\\-/.test(e)?v+\".\"+y:v},/[\\w_-]+/,[k(m,/\\s*=\\s*/,[C.string('\"'),C.string(\"'\"),C.word(),C.goUp()]),C.goUp()])},expression:function(){return k(b,/\\(/,[\"js-statement-start\"])},word:function(){return k(\"string\",/[\\w-_]+/)},goUp:function(){return k(\"text\",\"\",\"pop\")},goStart:function(){return k(\"text\",\"\",\"start\")}}}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/mask\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mask_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mask_highlight_rules\").MaskHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/mask\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-matlab.js",
    "content": "ace.define(\"ace/mode/matlab_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while\",t=\"true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout\",n=\"abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:.(?:close|closeVar|computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab.io.MatFile|matlab.mixin.(?:Copyable|Heterogeneous(?:.getDefaultScalarElement)?)|matlabrc|matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta.(?:class(?:.fromName)?|DynamicProperty|EnumeratedValue|event|MetaData|method|package(?:.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|ncwriteschema|ndgrid|ndims|ne|NET(?:.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|NetException|setStaticProperty))?|netcdf.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:.(?:create|getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:.isPlatformSupported)?|VideoWriter(?:.getProfiles)?|view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|ylabel|ylim|zeros|zip|zlabel|zlim|zoom|addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|cholcov|Classification(?:BaggedEnsemble|Discriminant(?:.(?:fit|make|template))?|Ensemble|KNN(?:.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:.fit)?|geo(?:cdf|inv|mean|pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|LinearModel(?:.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:.fit)?|nan(?:cov|max|mean|median|min|std|sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|regstats|relieff|ridge|robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztestadapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|reflect|regionprops|registration.metric.(?:MattesMutualInformation|MeanSquares)|registration.optimizer.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb|bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog\",r=\"cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse\",i=this.createKeywordMapper({\"storage.type\":r,\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"string\",regex:\"'\",stateName:\"qstring\",next:[{token:\"constant.language.escape\",regex:\"''\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}]},{token:\"text\",regex:\"\\\\s+\"},{regex:\"\",next:\"noQstring\"}],noQstring:[{regex:\"^\\\\s*%{\\\\s*$\",token:\"comment.start\",push:\"blockComment\"},{token:\"comment\",regex:\"%[^\\r\\n]*\"},{token:\"string\",regex:'\"',stateName:\"qqstring\",next:[{token:\"constant.language.escape\",regex:/\\\\./},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\",next:\"start\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\",next:\"start\"},{token:\"paren.lparen\",regex:\"[({\\\\[]\",next:\"start\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"},{token:\"text\",regex:\"$\",next:\"start\"}],blockComment:[{regex:\"^\\\\s*%{\\\\s*$\",token:\"comment.start\",push:\"blockComment\"},{regex:\"^\\\\s*%}\\\\s*$\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.MatlabHighlightRules=s}),ace.define(\"ace/mode/matlab\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matlab_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./matlab_highlight_rules\").MatlabHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"%\",this.blockComment={start:\"%{\",end:\"%}\"},this.$id=\"ace/mode/matlab\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-maze.js",
    "content": "ace.define(\"ace/mode/maze_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.control\",regex:/##|``/,comment:\"Wall\"},{token:\"entity.name.tag\",regex:/\\.\\./,comment:\"Path\"},{token:\"keyword.control\",regex:/<>/,comment:\"Splitter\"},{token:\"entity.name.tag\",regex:/\\*[\\*A-Za-z0-9]/,comment:\"Signal\"},{token:\"constant.numeric\",regex:/[0-9]{2}/,comment:\"Pause\"},{token:\"keyword.control\",regex:/\\^\\^/,comment:\"Start\"},{token:\"keyword.control\",regex:/\\(\\)/,comment:\"Hole\"},{token:\"support.function\",regex:/>>/,comment:\"Out\"},{token:\"support.function\",regex:/>\\//,comment:\"Ln Out\"},{token:\"support.function\",regex:/<</,comment:\"In\"},{token:\"keyword.control\",regex:/--/,comment:\"One use\"},{token:\"constant.language\",regex:/%[LRUDNlrudn]/,comment:\"Direction\"},{token:[\"entity.name.function\",\"keyword.other\",\"keyword.operator\",\"keyword.other\",\"keyword.operator\",\"constant.numeric\",\"keyword.operator\",\"keyword.other\",\"keyword.operator\",\"constant.numeric\",\"string.quoted.double\",\"string.quoted.single\"],regex:/([A-Za-z][A-Za-z0-9])( *-> *)(?:([-+*\\/]=)( *)((?:-)?)([0-9]+)|(=)( *)(?:((?:-)?)([0-9]+)|(\"[^\"]*\")|('[^']*')))/,comment:\"Assignment function\"},{token:[\"entity.name.function\",\"keyword.other\",\"keyword.control\",\"keyword.other\",\"keyword.operator\",\"keyword.other\",\"keyword.operator\",\"constant.numeric\",\"entity.name.tag\",\"keyword.other\",\"keyword.control\",\"keyword.other\",\"constant.language\",\"keyword.other\",\"keyword.control\",\"keyword.other\",\"constant.language\"],regex:/([A-Za-z][A-Za-z0-9])( *-> *)(IF|if)( *)(?:([<>]=?|==)( *)((?:-)?)([0-9]+)|(\\*[\\*A-Za-z0-9]))( *)(THEN|then)( *)(%[LRUDNlrudn])(?:( *)(ELSE|else)( *)(%[LRUDNlrudn]))?/,comment:\"Equality Function\"},{token:\"entity.name.function\",regex:/[A-Za-z][A-Za-z0-9]/,comment:\"Function cell\"},{token:\"comment.line.double-slash\",regex:/ *\\/\\/.*/,comment:\"Comment\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"mz\"],name:\"Maze\",scopeName:\"source.maze\"},r.inherits(s,i),t.MazeHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/maze\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/maze_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./maze_highlight_rules\").MazeHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/maze\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-mel.js",
    "content": "ace.define(\"ace/mode/mel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{caseInsensitive:!0,token:\"storage.type.mel\",regex:\"\\\\b(matrix|string|vector|float|int|void)\\\\b\"},{caseInsensitive:!0,token:\"support.function.mel\",regex:\"\\\\b((s(h(ow(ManipCtx|S(hadingGroupAttrEditor|electionInTitle)|H(idden|elp)|Window)|el(f(Button|TabLayout|Layout)|lField)|ading(GeometryRelCtx|Node|Connection|LightRelCtx))|y(s(tem|File)|mbol(Button|CheckBox))|nap(shot|Mode|2to2 |TogetherCtx|Key)|c(ulpt|ene(UIReplacement|Editor)|ale(BrushBrightness |Constraint|Key(Ctx)?)?|r(ipt(Node|Ctx|Table|edPanel(Type)?|Job|EditorInfo)|oll(Field|Layout))|mh)|t(itch(Surface(Points)?|AndExplodeShell )|a(ckTrace|rt(sWith |String ))|r(cmp|i(ng(ToStringArray |Array(Remove(Duplicates | )|C(ount |atenate )|ToString |Intersector))|p )|oke))|i(n(gleProfileBirailSurface)?|ze|gn|mplify)|o(u(nd(Control)?|rce)|ft(Mod(Ctx)?)?|rt)|u(perCtx|rface(S(haderList|ampler))?|b(st(itute(Geometry|AllString )?|ring)|d(M(irror|a(tchTopology|p(SewMove|Cut)))|iv(Crease|DisplaySmoothness)?|C(ollapse|leanTopology)|T(o(Blind|Poly)|ransferUVsToCache)|DuplicateAndConnect|EditUV|ListComponentConversion|AutoProjection)))|p(h(ere|rand)|otLight(PreviewPort)?|aceLocator|r(ing|eadSheetEditor))|e(t(s|MenuMode|Sta(te |rtupMessage|mpDensity )|NodeTypeFlag|ConstraintRestPosition |ToolTo|In(putDeviceMapping|finity)|D(ynamic|efaultShadingGroup|rivenKeyframe)|UITemplate|P(ar(ticleAttr|ent)|roject )|E(scapeCtx|dit(or|Ctx))|Key(Ctx|frame|Path)|F(ocus|luidAttr)|Attr(Mapping)?)|parator|ed|l(ect(Mode|ionConnection|Context|Type|edNodes|Pr(iority|ef)|Key(Ctx)?)?|LoadSettings)|archPathArray )|kin(Cluster|Percent)|q(uareSurface|rt)|w(itchTable|atchDisplayPort)|a(ve(Menu|Shelf|ToolSettings|I(nitialState|mage)|Pref(s|Objects)|Fluid|A(ttrPreset |llShelves))|mpleImage)|rtContext|mooth(step|Curve|TangentSurface))|h(sv_to_rgb|yp(ot|er(Graph|Shade|Panel))|i(tTest|de|lite)|ot(Box|key(Check)?)|ud(Button|Slider(Button)?)|e(lp(Line)?|adsUpDisplay|rmite)|wRe(nder(Load)?|flectionMap)|ard(enPointCurve|ware(RenderPanel)?))|n(o(nLinear|ise|de(Type|IconButton|Outliner|Preset)|rmal(ize |Constraint))|urbs(Boolean|S(elect|quare)|C(opyUVSet|ube)|To(Subdiv|Poly(gonsPref)?)|Plane|ViewDirectionVector )|ew(ton|PanelItems)|ame(space(Info)?|Command|Field))|c(h(oice|dir|eck(Box(Grp)?|DefaultRenderGlobals)|a(n(nelBox|geSubdiv(Region|ComponentDisplayLevel))|racter(Map|OutlineEditor)?))|y(cleCheck|linder)|tx(Completion|Traverse|EditMode|Abort)|irc(ularFillet|le)|o(s|n(str(uctionHistory|ain(Value)?)|nect(ionInfo|Control|Dynamic|Joint|Attr)|t(extInfo|rol)|dition|e|vert(SolidTx|Tessellation|Unit|FromOldLayers |Lightmap)|firmDialog)|py(SkinWeights|Key|Flexor|Array )|l(or(Slider(Grp|ButtonGrp)|Index(SliderGrp)?|Editor|AtPoint)?|umnLayout|lision)|arsenSubdivSelectionList|m(p(onentEditor|utePolysetVolume |actHairSystem )|mand(Port|Echo|Line)))|u(tKey|r(ve(MoveEPCtx|SketchCtx|CVCtx|Intersect|OnSurface|E(ditorCtx|PCtx)|AddPtCtx)?|rent(Ctx|Time(Ctx)?|Unit)))|p(GetSolverAttr|Button|S(olver(Types)?|e(t(SolverAttr|Edit)|am))|C(o(nstraint|llision)|ache)|Tool|P(anel|roperty))|eil|l(ip(Schedule(rOutliner)?|TrimBefore |Editor(CurrentTimeCtx)?)?|ose(Surface|Curve)|uster|ear(Cache)?|amp)|a(n(CreateManip|vas)|tch(Quiet)?|pitalizeString |mera(View)?)|r(oss(Product )?|eate(RenderLayer|MotionField |SubdivRegion|N(ode|ewShelf )|D(isplayLayer|rawCtx)|Editor))|md(Shell|FileOutput))|M(R(ender(ShadowData|Callback|Data|Util|View|Line(Array)?)|ampAttribute)|G(eometryData|lobal)|M(odelMessage|essage|a(nipData|t(erial|rix)))|BoundingBox|S(yntax|ceneMessage|t(atus|ring(Array)?)|imple|pace|elect(ion(Mask|List)|Info)|watchRender(Register|Base))|H(ardwareRenderer|WShaderSwatchGenerator)|NodeMessage|C(o(nditionMessage|lor(Array)?|m(putation|mand(Result|Message)))|ursor|loth(Material|S(ystem|olverRegister)|Con(straint|trol)|Triangle|Particle|Edge|Force)|allbackIdArray)|T(ypeId|ime(r(Message)?|Array)?|oolsInfo|esselationParams|r(imBoundaryArray|ansformationMatrix))|I(ntArray|t(Geometry|Mesh(Polygon|Edge|Vertex|FaceVertex)|S(urfaceCV|electionList)|CurveCV|Instancer|eratorType|D(ependency(Graph|Nodes)|ag)|Keyframe)|k(System|HandleGroup)|mage)|3dView|Object(SetMessage|Handle|Array)?|D(G(M(odifier|essage)|Context)|ynSwept(Triangle|Line)|istance|oubleArray|evice(State|Channel)|a(ta(Block|Handle)|g(M(odifier|essage)|Path(Array)?))|raw(Request(Queue)?|Info|Data|ProcedureBase))|U(serEventMessage|i(nt(Array|64Array)|Message))|P(o(int(Array)?|lyMessage)|lug(Array)?|rogressWindow|x(G(eometry(Iterator|Data)|lBuffer)|M(idiInputDevice|odelEditorCommand|anipContainer)|S(urfaceShape(UI)?|pringNode|electionContext)|HwShaderNode|Node|Co(ntext(Command)?|m(ponentShape|mand))|T(oolCommand|ransform(ationMatrix)?)|IkSolver(Node)?|3dModelView|ObjectSet|D(eformerNode|ata|ragAndDropBehavior)|PolyT(weakUVCommand|rg)|EmitterNode|F(i(eldNode|leTranslator)|luidEmitterNode)|LocatorNode))|E(ulerRotation|vent(Message)?)|ayatomr|Vector(Array)?|Quaternion|F(n(R(otateManip|eflectShader|adialField)|G(e(nericAttribute|ometry(Data|Filter))|ravityField)|M(otionPath|es(sageAttribute|h(Data)?)|a(nip3D|trix(Data|Attribute)))|B(l(innShader|endShapeDeformer)|ase)|S(caleManip|t(ateManip|ring(Data|ArrayData))|ingleIndexedComponent|ubd(Names|Data)?|p(hereData|otLight)|et|kinCluster)|HikEffector|N(on(ExtendedLight|AmbientLight)|u(rbs(Surface(Data)?|Curve(Data)?)|meric(Data|Attribute))|ewtonField)|C(haracter|ircleSweepManip|ompo(nent(ListData)?|undAttribute)|urveSegmentManip|lip|amera)|T(ypedAttribute|oggleManip|urbulenceField|r(ipleIndexedComponent|ansform))|I(ntArrayData|k(Solver|Handle|Joint|Effector))|D(ynSweptGeometryData|i(s(cManip|tanceManip)|rection(Manip|alLight))|ouble(IndexedComponent|ArrayData)|ependencyNode|a(ta|gNode)|ragField)|U(ni(tAttribute|formField)|Int64ArrayData)|P(hong(Shader|EShader)|oint(On(SurfaceManip|CurveManip)|Light|ArrayData)|fxGeometry|lugin(Data)?|arti(cleSystem|tion))|E(numAttribute|xpression)|V(o(lume(Light|AxisField)|rtexField)|ectorArrayData)|KeyframeDelta(Move|B(lockAddRemove|reakdown)|Scale|Tangent|InfType|Weighted|AddRemove)?|F(ield|luid|reePointTriadManip)|W(ireDeformer|eightGeometryFilter)|L(ight(DataAttribute)?|a(yeredShader|ttice(D(eformer|ata))?|mbertShader))|A(ni(sotropyShader|mCurve)|ttribute|irField|r(eaLight|rayAttrsData)|mbientLight))?|ile(IO|Object)|eedbackLine|loat(Matrix|Point(Array)?|Vector(Array)?|Array))|L(i(ghtLinks|brary)|ockMessage)|A(n(im(Message|C(ontrol|urveC(hange|lipboard(Item(Array)?)?))|Util)|gle)|ttribute(Spec(Array)?|Index)|r(rayData(Builder|Handle)|g(Database|Parser|List))))|t(hreePointArcCtx|ime(Control|Port|rX)|o(ol(Button|HasOptions|Collection|Dropped|PropertyWindow)|NativePath |upper|kenize(List )?|l(ower|erance)|rus|ggle(WindowVisibility|Axis)?)|u(rbulence|mble(Ctx)?)|ex(RotateContext|M(oveContext|anipContext)|t(ScrollList|Curves|ure(HairColor |DisplacePlane |PlacementContext|Window)|ToShelf |Field(Grp|ButtonGrp)?)?|S(caleContext|electContext|mudgeUVContext)|WinToolCtx)|woPointArcCtx|a(n(gentConstraint)?|bLayout)|r(im|unc(ate(HairCache|FluidCache))?|a(ns(formLimits|lator)|c(e|k(Ctx)?))))|i(s(olateSelect|Connected|True|Dirty|ParentOf |Valid(String |ObjectName |UiName )|AnimCurve )|n(s(tance(r)?|ert(Joint(Ctx)?|K(not(Surface|Curve)|eyCtx)))|heritTransform|t(S(crollBar|lider(Grp)?)|er(sect|nalVar|ToUI )|Field(Grp)?))|conText(Radio(Button|Collection)|Button|StaticLabel|CheckBox)|temFilter(Render|Type|Attr)?|prEngine|k(S(ystem(Info)?|olver|plineHandleCtx)|Handle(Ctx|DisplayScale)?|fkDisplayMethod)|m(portComposerCurves |fPlugins|age))|o(ceanNurbsPreviewPlane |utliner(Panel|Editor)|p(tion(Menu(Grp)?|Var)|en(GLExtension|MayaPref))|verrideModifier|ffset(Surface|Curve(OnSurface)?)|r(ientConstraint|bit(Ctx)?)|b(soleteProc |j(ect(Center|Type(UI)?|Layer )|Exists)))|d(yn(RelEd(itor|Panel)|Globals|C(ontrol|ache)|P(a(intEditor|rticleCtx)|ref)|Exp(ort|ression)|amicLoad)|i(s(connect(Joint|Attr)|tanceDim(Context|ension)|pla(y(RGBColor|S(tats|urface|moothness)|C(olor|ull)|Pref|LevelOfDetail|Affected)|cementToPoly)|kCache|able)|r(name |ect(ionalLight|KeyCtx)|map)|mWhen)|o(cServer|Blur|t(Product )?|ubleProfileBirailSurface|peSheetEditor|lly(Ctx)?)|uplicate(Surface|Curve)?|e(tach(Surface|Curve|DeviceAttr)|vice(Panel|Editor)|f(ine(DataServer|VirtualDevice)|ormer|ault(Navigation|LightListCheckBox))|l(ete(Sh(elfTab |adingGroupsAndMaterials )|U(nusedBrushes |I)|Attr)?|randstr)|g_to_rad)|agPose|r(opoffLocator|ag(gerContext)?)|g(timer|dirty|Info|eval))|CBG |u(serCtx|n(t(angleUV|rim)|i(t|form)|do(Info)?|loadPlugin|assignInputDevice|group)|iTemplate|p(dateAE |Axis)|v(Snapshot|Link))|joint(C(tx|luster)|DisplayScale|Lattice)?|p(sd(ChannelOutliner|TextureFile|E(ditTextureFile|xport))|close|i(c(ture|kWalk)|xelMove)|o(se|int(MatrixMult |C(onstraint|urveConstraint)|On(Surface|Curve)|Position|Light)|p(upMenu|en)|w|l(y(Reduce|GeoSampler|M(irrorFace|ove(UV|Edge|Vertex|Facet(UV)?)|erge(UV|Edge(Ctx)?|Vertex|Facet(Ctx)?)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|l(indData|endColor))|S(traightenUVBorder|oftEdge|u(perCtx|bdivide(Edge|Facet))|p(her(icalProjection|e)|lit(Ring|Ctx|Edge|Vertex)?)|e(tToFaceNormal|parate|wEdge|lect(Constraint(Monitor)?|EditCtx))|mooth)|Normal(izeUV|PerVertex)?|C(hipOff|ylind(er|ricalProjection)|o(ne|pyUV|l(or(BlindData|Set|PerVertex)|lapse(Edge|Facet)))|u(t(Ctx)?|be)|l(ipboard|oseBorder)|acheMonitor|rea(seEdge|teFacet(Ctx)?))|T(o(Subdiv|rus)|r(iangulate|ansfer))|In(stallAction|fo)|Options|D(uplicate(Edge|AndConnect)|el(Edge|Vertex|Facet))|U(nite|VSet)|P(yramid|oke|lan(e|arProjection)|r(ism|ojection))|E(ditUV|valuate|xtrude(Edge|Facet))|Qu(eryBlindData|ad)|F(orceUV|lip(UV|Edge))|WedgeFace|L(istComponentConversion|ayoutUV)|A(utoProjection|ppend(Vertex|FacetCtx)?|verage(Normal|Vertex)))|eVectorConstraint))|utenv|er(cent|formanceOptions)|fxstrokes|wd|l(uginInfo|a(y(b(last|ackOptions))?|n(e|arSrf)))|a(steKey|ne(l(History|Configuration)?|Layout)|thAnimation|irBlend|use|lettePort|r(ti(cle(RenderInfo|Instancer|Exists)?|tion)|ent(Constraint)?|am(Dim(Context|ension)|Locator)))|r(int|o(j(ect(ion(Manip|Context)|Curve|Tangent)|FileViewer)|pMo(dCtx|ve)|gress(Bar|Window)|mptDialog)|eloadRefEd))|e(n(codeString|d(sWith |String )|v|ableDevice)|dit(RenderLayer(Globals|Members)|or(Template)?|DisplayLayer(Globals|Members)|AttrLimits )|v(ent|al(Deferred|Echo)?)|quivalent(Tol | )|ffector|r(f|ror)|x(clusiveLightCheckBox|t(end(Surface|Curve)|rude)|ists|p(ortComposerCurves |ression(EditorListen)?)?|ec(uteForEachObject )?|actWorldBoundingBox)|mit(ter)?)|v(i(sor|ew(Set|HeadOn|2dToolCtx|C(lipPlane|amera)|Place|Fit|LookAt))|o(lumeAxis|rtex)|e(ctorize|rifyCmd )|alidateShelfName )|key(Tangent|frame(Region(MoveKeyCtx|S(caleKeyCtx|e(tKeyCtx|lectKeyCtx))|CurrentTimeCtx|TrackCtx|InsertKeyCtx|D(irectKeyCtx|ollyCtx))|Stats|Outliner)?)|qu(it|erySubdiv)|f(c(heck|lose)|i(nd(RelatedSkinCluster |MenuItem |er|Keyframe|AllIntersections )|tBspline|l(ter(StudioImport|Curve|Expand)?|e(BrowserDialog|test|Info|Dialog|Extension )?|letCurve)|rstParentOf )|o(ntDialog|pen|rmLayout)|print|eof|flush|write|l(o(or|w|at(S(crollBar|lider(Grp|ButtonGrp|2)?)|Eq |Field(Grp)?))|u(shUndo|id(CacheInfo|Emitter|VoxelInfo))|exor)|r(omNativePath |e(eFormFillet|wind|ad)|ameLayout)|get(word|line)|mod)|w(hatIs|i(ndow(Pref)?|re(Context)?)|orkspace|ebBrowser(Prefs)?|a(itCursor|rning)|ri(nkle(Context)?|teTake))|l(s(T(hroughFilter|ype )|UI)?|i(st(Relatives|MenuAnnotation |Sets|History|NodeTypes|C(onnections|ameras)|Transforms |InputDevice(s|Buttons|Axes)|erEditor|DeviceAttachments|Unselected |A(nimatable|ttr))|n(step|eIntersection )|ght(link|List(Panel|Editor)?))|o(ckNode|okThru|ft|ad(NewShelf |P(lugin|refObjects)|Fluid)|g)|a(ssoContext|y(out|er(Button|ed(ShaderPort|TexturePort)))|ttice(DeformKeyCtx)?|unch(ImageEditor)?))|a(ssign(Command|InputDevice)|n(notate|im(C(one|urveEditor)|Display|View)|gle(Between)?)|tt(ach(Surface|Curve|DeviceAttr)|r(ibute(Menu|Info|Exists|Query)|NavigationControlGrp|Co(ntrolGrp|lorSliderGrp|mpatibility)|PresetEditWin|EnumOptionMenu(Grp)?|Field(Grp|SliderGrp)))|i(r|mConstraint)|d(d(NewShelfTab|Dynamic|PP|Attr(ibuteEditorNodeHelp)?)|vanceToNextDrivenKey)|uto(Place|Keyframe)|pp(endStringArray|l(y(Take|AttrPreset)|icationName))|ffect(s|edNet)|l(i(as(Attr)?|gn(Surface|C(tx|urve))?)|lViewFit)|r(c(len|Len(DimContext|gthDimension))|t(BuildPaintMenu|Se(tPaintCtx|lectCtx)|3dPaintCtx|UserPaintCtx|PuttyCtx|FluidAttrCtx|Attr(SkinPaintCtx|Ctx|PaintVertexCtx))|rayMapper)|mbientLight|b(s|out))|r(igid(Body|Solver)|o(t(at(ionInterpolation|e))?|otOf |undConstantRadius|w(ColumnLayout|Layout)|ll(Ctx)?)|un(up|TimeCommand)|e(s(olutionNode|et(Tool|AE )|ampleFluid)|hash|n(der(GlobalsNode|Manip|ThumbnailUpdate|Info|er|Partition|QualityNode|Window(SelectContext|Editor)|LayerButton)?|ame(SelectionList |UI|Attr)?)|cord(Device|Attr)|target|order(Deformers)?|do|v(olve|erse(Surface|Curve))|quires|f(ineSubdivSelectionList|erence(Edit|Query)?|resh(AE )?)|loadImage|adTake|root|move(MultiInstance|Joint)|build(Surface|Curve))|a(n(d(state|omizeFollicles )?|geControl)|d(i(o(MenuItemCollection|Button(Grp)?|Collection)|al)|_to_deg)|mpColorPort)|gb_to_hsv)|g(o(toBindPose |al)|e(t(M(odifiers|ayaPanelTypes )|Classification|InputDeviceRange|pid|env|DefaultBrush|Pa(nel|rticleAttr)|F(ileList|luidAttr)|A(ttr|pplicationVersionAsFloat ))|ometryConstraint)|l(Render(Editor)?|obalStitch)|a(uss|mma)|r(id(Layout)?|oup(ObjectsByName )?|a(dientControl(NoAttr)?|ph(SelectContext|TrackCtx|DollyCtx)|vity|bColor))|match)|x(pmPicker|form|bmLangPathList )|m(i(n(imizeApp)?|rrorJoint)|o(del(CurrentTimeCtx|Panel|Editor)|use|v(In|e(IKtoFK |VertexAlongDirection|KeyCtx)?|Out))|u(te|ltiProfileBirailSurface)|e(ssageLine|nu(BarLayout|Item(ToShelf )?|Editor)?|mory)|a(nip(Rotate(Context|LimitsCtx)|Move(Context|LimitsCtx)|Scale(Context|LimitsCtx)|Options)|tch|ke(Roll |SingleSurface|TubeOn |Identity|Paintable|bot|Live)|rker|g|x))|b(in(Membership|d(Skin|Pose))|o(neLattice|undary|x(ZoomCtx|DollyCtx))|u(tton(Manip)?|ild(BookmarkMenu|KeyframeMenu)|fferCurve)|e(ssel|vel(Plus)?)|l(indDataType|end(Shape(Panel|Editor)?|2|TwoAttr))|a(sename(Ex | )|tchRender|ke(Results|Simulation|Clip|PartialHistory|FluidShading )))))\\\\b\"},{caseInsensitive:!0,token:\"support.constant.mel\",regex:\"\\\\b(s(h(ellTessellate|a(d(ing(Map|Engine)|erGlow)|pe))|n(ow|apshot(Shape)?)|c(ulpt|aleConstraint|ript)|t(yleCurve|itch(Srf|AsNurbsShell)|u(cco|dioClearCoat)|encil|roke(Globals)?)|i(ngleShadingSwitch|mpleVolumeShader)|o(ftMod(Manip|Handle)?|lidFractal)|u(rface(Sha(der|pe)|Info|EdManip|VarGroup|Luminance)|b(Surface|d(M(odifier(UV|World)?|ap(SewMove|Cut|pingManip))|B(lindData|ase)|iv(ReverseFaces|SurfaceVarGroup|Co(llapse|mponentId)|To(Nurbs|Poly))?|HierBlind|CleanTopology|Tweak(UV)?|P(lanarProj|rojManip)|LayoutUV|A(ddTopology|utoProj))|Curve))|p(BirailSrf|otLight|ring)|e(tRange|lectionListOperator)|k(inCluster|etchPlane)|quareSrf|ampler(Info)?|m(ooth(Curve|TangentSrf)|ear))|h(svToRgb|yper(GraphInfo|View|Layout)|ik(Solver|Handle|Effector)|oldMatrix|eightField|w(Re(nderGlobals|flectionMap)|Shader)|a(ir(System|Constraint|TubeShader)|rd(enPoint|wareRenderGlobals)))|n(o(n(ExtendedLightShapeNode|Linear|AmbientLightShapeNode)|ise|rmalConstraint)|urbs(Surface|Curve|T(oSubdiv(Proc)?|essellate)|DimShape)|e(twork|wtonField))|c(h(o(ice|oser)|ecker|aracter(Map|Offset)?)|o(n(straint|tr(olPoint|ast)|dition)|py(ColorSet|UVSet))|urve(Range|Shape|Normalizer(Linear|Angle)?|In(tersect|fo)|VarGroup|From(Mesh(CoM|Edge)?|Su(rface(Bnd|CoS|Iso)?|bdiv(Edge|Face)?)))|l(ip(Scheduler|Library)|o(se(stPointOnSurface|Surface|Curve)|th|ud)|uster(Handle)?|amp)|amera(View)?|r(eate(BPManip|ColorSet|UVSet)|ater))|t(ime(ToUnitConversion|Function)?|oo(nLineAttributes|lDrawManip)|urbulenceField|ex(BaseDeformManip|ture(BakeSet|2d|ToGeom|3d|Env)|SmudgeUVManip|LatticeDeformManip)|weak|angentConstraint|r(i(pleShadingSwitch|m(WithBoundaries)?)|ansform(Geometry)?))|i(n(s(tancer|ertKnot(Surface|Curve))|tersectSurface)|k(RPsolver|MCsolver|S(ystem|olver|Csolver|plineSolver)|Handle|PASolver|Effector)|m(plicit(Box|Sphere|Cone)|agePlane))|o(cean(Shader)?|pticalFX|ffset(Surface|C(os|urve))|ldBlindDataBase|rient(Constraint|ationMarker)|bject(RenderFilter|MultiFilter|BinFilter|S(criptFilter|et)|NameFilter|TypeFilter|Filter|AttrFilter))|d(yn(Globals|Base)|i(s(tance(Between|DimShape)|pla(yLayer(Manager)?|cementShader)|kCache)|rect(ionalLight|edDisc)|mensionShape)|o(ubleShadingSwitch|f)|pBirailSrf|e(tach(Surface|Curve)|pendNode|f(orm(Bend|S(ine|quash)|Twist|ableShape|F(unc|lare)|Wave)|ault(RenderUtilityList|ShaderList|TextureList|LightList))|lete(Co(lorSet|mponent)|UVSet))|ag(Node|Pose)|r(opoffLocator|agField))|u(seBackground|n(trim|i(t(Conversion|ToTimeConversion)|formField)|known(Transform|Dag)?)|vChooser)|j(iggle|oint(Cluster|Ffd|Lattice)?)|p(sdFileTex|hong(E)?|o(s(tProcessList|itionMarker)|int(MatrixMult|Constraint|On(SurfaceInfo|CurveInfo)|Emitter|Light)|l(y(Reduce|M(irror|o(difier(UV|World)?|ve(UV|Edge|Vertex|Face(tUV)?))|erge(UV|Edge|Vert|Face)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|lindData|ase)|S(traightenUVBorder|oftEdge|ubd(Edge|Face)|p(h(ere|Proj)|lit(Ring|Edge|Vert)?)|e(parate|wEdge)|mooth(Proxy|Face)?)|Normal(izeUV|PerVertex)?|C(hipOff|yl(inder|Proj)|o(ne|pyUV|l(orPerVertex|lapse(Edge|F)))|u(t(Manip(Container)?)?|be)|loseBorder|rea(seEdge|t(or|eFace)))|T(o(Subdiv|rus)|weak(UV)?|r(iangulate|ansfer))|OptUvs|D(uplicateEdge|el(Edge|Vertex|Facet))|Unite|P(yramid|oke(Manip)?|lan(e|arProj)|r(i(sm|mitive)|oj))|Extrude(Edge|Vertex|Face)|VertexNormalManip|Quad|Flip(UV|Edge)|WedgeFace|LayoutUV|A(utoProj|ppend(Vertex)?|verageVertex))|eVectorConstraint))|fx(Geometry|Hair|Toon)|l(usMinusAverage|a(n(e|arTrimSurface)|ce(2dTexture|3dTexture)))|a(ssMatrix|irBlend|r(ti(cle(SamplerInfo|C(olorMapper|loud)|TranspMapper|IncandMapper|AgeMapper)?|tion)|ent(Constraint|Tessellate)|amDimension))|r(imitive|o(ject(ion|Curve|Tangent)|xyManager)))|e(n(tity|v(Ball|ironmentFog|S(phere|ky)|C(hrome|ube)|Fog))|x(t(end(Surface|Curve)|rude)|p(lodeNurbsShell|ression)))|v(iewManip|o(lume(Shader|Noise|Fog|Light|AxisField)|rtexField)|e(ctor(RenderGlobals|Product)|rtexBakeSet))|quadShadingSwitch|f(i(tBspline|eld|l(ter(Resample|Simplify|ClosestSample|Euler)?|e|letCurve))|o(urByFourMatrix|llicle)|urPointOn(MeshInfo|Subd)|f(BlendSrf(Obsolete)?|d|FilletSrf)|l(ow|uid(S(hape|liceManip)|Texture(2D|3D)|Emitter)|exorShape)|ra(ctal|meCache))|w(tAddMatrix|ire|ood|eightGeometryFilter|ater|rap)|l(ight(Info|Fog|Li(st|nker))?|o(cator|okAt|d(Group|Thresholds)|ft)|uminance|ea(stSquaresModifier|ther)|a(yered(Shader|Texture)|ttice|mbert))|a(n(notationShape|i(sotropic|m(Blend(InOut)?|C(urve(T(T|U|L|A)|U(T|U|L|A))?|lip)))|gleBetween)|tt(ach(Surface|Curve)|rHierarchyTest)|i(rField|mConstraint)|dd(Matrix|DoubleLinear)|udio|vg(SurfacePoints|NurbsSurfacePoints|Curves)|lign(Manip|Surface|Curve)|r(cLengthDimension|tAttrPaintTest|eaLight|rayMapper)|mbientLight|bstractBase(NurbsConversion|Create))|r(igid(Body|Solver|Constraint)|o(ck|undConstantRadius)|e(s(olution|ultCurve(TimeTo(Time|Unitless|Linear|Angular))?)|nder(Rect|Globals(List)?|Box|Sphere|Cone|Quality|L(ight|ayer(Manager)?))|cord|v(olve(dPrimitive)?|erse(Surface|Curve)?)|f(erence|lect)|map(Hsv|Color|Value)|build(Surface|Curve))|a(dialField|mp(Shader)?)|gbToHsv|bfSrf)|g(uide|eo(Connect(or|able)|metry(Shape|Constraint|VarGroup|Filter))|lobal(Stitch|CacheControl)|ammaCorrect|r(id|oup(Id|Parts)|a(nite|vityField)))|Fur(Globals|Description|Feedback|Attractors)|xformManip|m(o(tionPath|untain|vie)|u(te|lt(Matrix|i(plyDivide|listerLight)|DoubleLinear))|pBirailSrf|e(sh(VarGroup)?|ntalray(Texture|IblShape))|a(terialInfo|ke(Group|Nurb(sSquare|Sphere|C(ylinder|ircle|one|ube)|Torus|Plane)|CircularArc|T(hreePointCircularArc|extCurves|woPointCircularArc))|rble))|b(irailSrf|o(neLattice|olean|undary(Base)?)|u(lge|mp(2d|3d))|evel(Plus)?|l(in(n|dDataTemplate)|end(Shape|Color(s|Sets)|TwoAttr|Device|Weighted)?)|a(se(GeometryVarGroup|ShadingSwitch|Lattice)|keSet)|r(ownian|ush)))\\\\b\"},{caseInsensitive:!0,token:\"keyword.control.mel\",regex:\"\\\\b(if|in|else|for|while|break|continue|case|default|do|switch|return|switch|case|source|catch|alias)\\\\b\"},{token:\"keyword.other.mel\",regex:\"\\\\b(global)\\\\b\"},{caseInsensitive:!0,token:\"constant.language.mel\",regex:\"\\\\b(null|undefined)\\\\b\"},{token:\"constant.numeric.mel\",regex:\"\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"punctuation.definition.string.begin.mel\",regex:'\"',push:[{token:\"constant.character.escape.mel\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.mel\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.mel\"}]},{token:[\"variable.other.mel\",\"punctuation.definition.variable.mel\"],regex:\"(\\\\$)([a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*?\\\\b)\"},{token:\"punctuation.definition.string.begin.mel\",regex:\"'\",push:[{token:\"constant.character.escape.mel\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.mel\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.quoted.single.mel\"}]},{token:\"constant.language.mel\",regex:\"\\\\b(false|true|yes|no|on|off)\\\\b\"},{token:\"punctuation.definition.comment.mel\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.mel\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.mel\"}]},{token:[\"comment.line.double-slash.mel\",\"punctuation.definition.comment.mel\"],regex:\"(//)(.*$\\\\n?)\"},{caseInsensitive:!0,token:\"keyword.operator.mel\",regex:\"\\\\b(instanceof)\\\\b\"},{token:\"keyword.operator.symbolic.mel\",regex:\"[-\\\\!\\\\%\\\\&\\\\*\\\\+\\\\=\\\\/\\\\?\\\\:]\"},{token:[\"meta.preprocessor.mel\",\"punctuation.definition.preprocessor.mel\"],regex:\"(^[ \\\\t]*)((?:#)[a-zA-Z]+)\"},{token:[\"meta.function.mel\",\"keyword.other.mel\",\"storage.type.mel\",\"entity.name.function.mel\",\"punctuation.section.function.mel\"],regex:\"(global\\\\s*)?(proc\\\\s*)(\\\\w+\\\\s*\\\\[?\\\\]?\\\\s+|\\\\s+)([A-Za-z_][A-Za-z0-9_\\\\.]*)(\\\\s*\\\\()\",push:[{include:\"$self\"},{token:\"punctuation.section.function.mel\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"meta.function.mel\"}]}]},this.normalizeRules()};r.inherits(s,i),t.MELHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/mel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mel_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mel_highlight_rules\").MELHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.$behaviour=new o,this.foldingRules=new u};r.inherits(a,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/mel\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-mixal.js",
    "content": "ace.define(\"ace/mode/mixal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=function(e){return e&&e.search(/^[A-Z\\u0394\\u03a0\\u03a30-9]{1,10}$/)>-1&&e.search(/[A-Z\\u0394\\u03a0\\u03a3]/)>-1},t=function(e){return e&&[\"NOP\",\"ADD\",\"FADD\",\"SUB\",\"FSUB\",\"MUL\",\"FMUL\",\"DIV\",\"FDIV\",\"NUM\",\"CHAR\",\"HLT\",\"SLA\",\"SRA\",\"SLAX\",\"SRAX\",\"SLC\",\"SRC\",\"MOVE\",\"LDA\",\"LD1\",\"LD2\",\"LD3\",\"LD4\",\"LD5\",\"LD6\",\"LDX\",\"LDAN\",\"LD1N\",\"LD2N\",\"LD3N\",\"LD4N\",\"LD5N\",\"LD6N\",\"LDXN\",\"STA\",\"ST1\",\"ST2\",\"ST3\",\"ST4\",\"ST5\",\"ST6\",\"STX\",\"STJ\",\"STZ\",\"JBUS\",\"IOC\",\"IN\",\"OUT\",\"JRED\",\"JMP\",\"JSJ\",\"JOV\",\"JNOV\",\"JL\",\"JE\",\"JG\",\"JGE\",\"JNE\",\"JLE\",\"JAN\",\"JAZ\",\"JAP\",\"JANN\",\"JANZ\",\"JANP\",\"J1N\",\"J1Z\",\"J1P\",\"J1NN\",\"J1NZ\",\"J1NP\",\"J2N\",\"J2Z\",\"J2P\",\"J2NN\",\"J2NZ\",\"J2NP\",\"J3N\",\"J3Z\",\"J3P\",\"J3NN\",\"J3NZ\",\"J3NP\",\"J4N\",\"J4Z\",\"J4P\",\"J4NN\",\"J4NZ\",\"J4NP\",\"J5N\",\"J5Z\",\"J5P\",\"J5NN\",\"J5NZ\",\"J5NP\",\"J6N\",\"J6Z\",\"J6P\",\"J6NN\",\"J6NZ\",\"J6NP\",\"JXAN\",\"JXZ\",\"JXP\",\"JXNN\",\"JXNZ\",\"JXNP\",\"INCA\",\"DECA\",\"ENTA\",\"ENNA\",\"INC1\",\"DEC1\",\"ENT1\",\"ENN1\",\"INC2\",\"DEC2\",\"ENT2\",\"ENN2\",\"INC3\",\"DEC3\",\"ENT3\",\"ENN3\",\"INC4\",\"DEC4\",\"ENT4\",\"ENN4\",\"INC5\",\"DEC5\",\"ENT5\",\"ENN5\",\"INC6\",\"DEC6\",\"ENT6\",\"ENN6\",\"INCX\",\"DECX\",\"ENTX\",\"ENNX\",\"CMPA\",\"FCMP\",\"CMP1\",\"CMP2\",\"CMP3\",\"CMP4\",\"CMP5\",\"CMP6\",\"CMPX\",\"EQU\",\"ORIG\",\"CON\",\"ALF\",\"END\"].indexOf(e)>-1},n=function(e){return e&&e.search(/[^ A-Z\\u0394\\u03a0\\u03a30-9.,()+*/=$<>@;:'-]/)==-1};this.$rules={start:[{token:\"comment.line.character\",regex:/^ *\\*.*$/},{token:function(t,r,i,s,o,u){return[e(t)?\"variable.other\":\"invalid.illegal\",\"text\",\"keyword.control\",\"text\",n(o)?\"text\":\"invalid.illegal\",\"comment.line.character\"]},regex:/^(\\S+)?( +)(ALF)(  )(.{5})(\\s+.*)?$/},{token:function(t,r,i,s,o,u){return[e(t)?\"variable.other\":\"invalid.illegal\",\"text\",\"keyword.control\",\"text\",n(o)?\"text\":\"invalid.illegal\",\"comment.line.character\"]},regex:/^(\\S+)?( +)(ALF)( )(\\S.{4})(\\s+.*)?$/},{token:function(n,r,i,s){return[e(n)?\"variable.other\":\"invalid.illegal\",\"text\",t(i)?\"keyword.control\":\"invalid.illegal\",\"comment.line.character\"]},regex:/^(\\S+)?( +)(\\S+)(?:\\s*)$/},{token:function(r,i,s,o,u,a){return[e(r)?\"variable.other\":\"invalid.illegal\",\"text\",t(s)?\"keyword.control\":\"invalid.illegal\",\"text\",n(u)?\"text\":\"invalid.illegal\",\"comment.line.character\"]},regex:/^(\\S+)?( +)(\\S+)( +)(\\S+)(\\s+.*)?$/},{defaultToken:\"text\"}]}};r.inherits(s,i),t.MixalHighlightRules=s}),ace.define(\"ace/mode/mixal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mixal_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mixal_highlight_rules\").MixalHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/mixal\",this.lineCommentStart=\"*\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-mushcode.js",
    "content": "ace.define(\"ace/mode/mushcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"@if|@ifelse|@switch|@halt|@dolist|@create|@scent|@sound|@touch|@ataste|@osound|@ahear|@aahear|@amhear|@otouch|@otaste|@drop|@odrop|@adrop|@dropfail|@odropfail|@smell|@oemit|@emit|@pemit|@parent|@clone|@taste|whisper|page|say|pose|semipose|teach|touch|taste|smell|listen|look|move|go|home|follow|unfollow|desert|dismiss|@tel\",t=\"=#0\",n=\"default|edefault|eval|get_eval|get|grep|grepi|hasattr|hasattrp|hasattrval|hasattrpval|lattr|nattr|poss|udefault|ufun|u|v|uldefault|xget|zfun|band|bnand|bnot|bor|bxor|shl|shr|and|cand|cor|eq|gt|gte|lt|lte|nand|neq|nor|not|or|t|xor|con|entrances|exit|followers|home|lcon|lexits|loc|locate|lparent|lsearch|next|num|owner|parent|pmatch|rloc|rnum|room|where|zone|worn|held|carried|acos|asin|atan|ceil|cos|e|exp|fdiv|fmod|floor|log|ln|pi|power|round|sin|sqrt|tan|aposs|andflags|conn|commandssent|controls|doing|elock|findable|flags|fullname|hasflag|haspower|hastype|hidden|idle|isbaker|lock|lstats|money|who|name|nearby|obj|objflags|photo|poll|powers|pendingtext|receivedtext|restarts|restarttime|subj|shortestpath|tmoney|type|visible|cat|element|elements|extract|filter|filterbool|first|foreach|fold|grab|graball|index|insert|itemize|items|iter|last|ldelete|map|match|matchall|member|mix|munge|pick|remove|replace|rest|revwords|setdiff|setinter|setunion|shuffle|sort|sortby|splice|step|wordpos|words|add|lmath|max|mean|median|min|mul|percent|sign|stddev|sub|val|bound|abs|inc|dec|dist2d|dist3d|div|floordiv|mod|modulo|remainder|vadd|vdim|vdot|vmag|vmax|vmin|vmul|vsub|vunit|regedit|regeditall|regeditalli|regediti|regmatch|regmatchi|regrab|regraball|regraballi|regrabi|regrep|regrepi|after|alphamin|alphamax|art|before|brackets|capstr|case|caseall|center|containsfansi|comp|decompose|decrypt|delete|edit|encrypt|escape|if|ifelse|lcstr|left|lit|ljust|merge|mid|ostrlen|pos|repeat|reverse|right|rjust|scramble|secure|space|spellnum|squish|strcat|strmatch|strinsert|stripansi|stripfansi|strlen|switch|switchall|table|tr|trim|ucstr|unsafe|wrap|ctitle|cwho|channels|clock|cflags|ilev|itext|inum|convsecs|convutcsecs|convtime|ctime|etimefmt|isdaylight|mtime|secs|msecs|starttime|time|timefmt|timestring|utctime|atrlock|clone|create|cook|dig|emit|lemit|link|oemit|open|pemit|remit|set|tel|wipe|zemit|fbcreate|fbdestroy|fbwrite|fbclear|fbcopy|fbcopyto|fbclip|fbdump|fbflush|fbhset|fblist|fbstats|qentries|qentry|play|ansi|break|c|asc|die|isdbref|isint|isnum|isletters|linecoords|localize|lnum|nameshort|null|objeval|r|rand|s|setq|setr|soundex|soundslike|valid|vchart|vchart2|vlabel|@@|bakerdays|bodybuild|box|capall|catalog|children|ctrailer|darttime|debt|detailbar|exploredroom|fansitoansi|fansitoxansi|fullbar|halfbar|isdarted|isnewbie|isword|lambda|lobjects|lplayers|lthings|lvexits|lvobjects|lvplayers|lvthings|newswrap|numsuffix|playerson|playersthisweek|randomad|randword|realrandword|replacechr|second|splitamount|strlenall|text|third|tofansi|totalac|unique|getaddressroom|listpropertycomm|listpropertyres|lotowner|lotrating|lotratingcount|lotvalue|boughtproduct|companyabb|companyicon|companylist|companyname|companyowners|companyvalue|employees|invested|productlist|productname|productowners|productrating|productratingcount|productsoldat|producttype|ratedproduct|soldproduct|topproducts|totalspentonproduct|totalstock|transfermoney|uniquebuyercount|uniqueproductsbought|validcompany|deletepicture|fbsave|getpicturesecurity|haspicture|listpictures|picturesize|replacecolor|rgbtocolor|savepicture|setpicturesecurity|showpicture|piechart|piechartlabel|createmaze|drawmaze|drawwireframe\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"constant.language\":t,keyword:e},\"identifier\"),i=\"(?:r|u|ur|R|U|UR|Ur|uR)?\",s=\"(?:(?:[1-9]\\\\d*)|(?:0))\",o=\"(?:0[oO]?[0-7]+)\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:0[bB][01]+)\",f=\"(?:\"+s+\"|\"+o+\"|\"+u+\"|\"+a+\")\",l=\"(?:[eE][+-]?\\\\d+)\",c=\"(?:\\\\.\\\\d+)\",h=\"(?:\\\\d+)\",p=\"(?:(?:\"+h+\"?\"+c+\")|(?:\"+h+\"\\\\.))\",d=\"(?:(?:\"+p+\"|\"+h+\")\"+l+\")\",v=\"(?:\"+d+\"|\"+p+\")\";this.$rules={start:[{token:\"variable\",regex:\"%[0-9]{1}\"},{token:\"variable\",regex:\"%q[0-9A-Za-z]{1}\"},{token:\"variable\",regex:\"%[a-zA-Z]{1}\"},{token:\"variable.language\",regex:\"%[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:\"(?:\"+v+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:v},{token:\"constant.numeric\",regex:f+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:f+\"\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|#|%|<<|>>|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.MushCodeRules=s}),ace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\"+e+\")(?:\\\\s*)(?:#.*)?$\")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)}),ace.define(\"ace/mode/mushcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mushcode_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mushcode_highlight_rules\").MushCodeRules,o=e(\"./folding/pythonic\").FoldMode,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o(\"\\\\:\"),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/mushcode\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-mysql.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/mysql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){function i(e){var t=e.start,n=e.escape;return{token:\"string.start\",regex:t,next:[{token:\"constant.language.escape\",regex:n},{token:\"string.end\",next:\"start\",regex:t},{defaultToken:\"string\"}]}}var e=\"alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat\",t=\"by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl\",n=\"charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee\",r=this.createKeywordMapper({\"support.function\":t,keyword:e,constant:\"false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat\",\"variable.language\":n},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"(?:-- |#).*$\"},i({start:'\"',escape:/\\\\[0'\"bnrtZ\\\\%_]?/}),i({start:\"'\",escape:/\\\\[0'\"bnrtZ\\\\%_]?/}),s.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"constant.class\",regex:\"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"constant.buildin\",regex:\"`[^`]*`\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,o),t.MysqlHighlightRules=u}),ace.define(\"ace/mode/mysql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mysql_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./mysql_highlight_rules\").MysqlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=[\"--\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/mysql\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-nix.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/nix_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"true|false\",t=\"with|import|if|else|then|inherit\",n=\"let|in|rec\",r=this.createKeywordMapper({\"constant.language.nix\":e,\"keyword.control.nix\":t,\"keyword.declaration.nix\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:/#.*$/},{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"constant\",regex:\"<[^>]+>\"},{regex:\"(==|!=|<=?|>=?)\",token:[\"keyword.operator.comparison.nix\"]},{regex:\"((?:[+*/%-]|\\\\~)=)\",token:[\"keyword.operator.assignment.arithmetic.nix\"]},{regex:\"=\",token:\"keyword.operator.assignment.nix\"},{token:\"string\",regex:\"''\",next:\"qqdoc\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"string\",regex:'\"',push:\"qqstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{regex:\"}\",token:function(e,t,n){return n[1]&&n[1].charAt(0)==\"q\"?\"constant.language.escape\":\"text\"},next:\"pop\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqdoc:[{token:\"constant.language.escape\",regex:/\\$\\{/,push:\"start\"},{token:\"string\",regex:\"''\",next:\"pop\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:/\\$\\{/,push:\"start\"},{token:\"string\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:/\\$\\{/,push:\"start\"},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},this.normalizeRules()};r.inherits(s,i),t.NixHighlightRules=s}),ace.define(\"ace/mode/nix\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/nix_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./nix_highlight_rules\").NixHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/nix\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-nsis.js",
    "content": "ace.define(\"ace/mode/nsis_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.compiler.nsis\",regex:/^\\s*!(?:include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|pragma|finalize|getdllversion|gettlbversion|system|tempfile|warning|verbose|define|undef|insertmacro|macro|macroend|makensis|searchparse|searchreplace)\\b/,caseInsensitive:!0},{token:\"keyword.command.nsis\",regex:/^\\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEDllCharacteristics|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\\b/,caseInsensitive:!0},{token:\"keyword.control.nsis\",regex:/^\\s*!(?:ifdef|ifndef|if|ifmacrodef|ifmacrondef|else|endif)\\b/,caseInsensitive:!0},{token:\"keyword.plugin.nsis\",regex:/^\\s*\\w+::\\w+/,caseInsensitive:!0},{token:\"keyword.operator.comparison.nsis\",regex:/[!<>]?=|<>|<|>/},{token:\"support.function.nsis\",regex:/(?:\\b|^\\s*)(?:Function|FunctionEnd|Section|SectionEnd|SectionGroup|SectionGroupEnd|PageEx|PageExEnd)\\b/,caseInsensitive:!0},{token:\"support.library.nsis\",regex:/\\${[\\w\\.:-]+}/},{token:\"constant.nsis\",regex:/\\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\\b/,caseInsensitive:!0},{token:\"constant.library.nsis\",regex:/\\${(?:AtLeastServicePack|AtLeastWin7|AtLeastWin8|AtLeastWin10|AtLeastWin95|AtLeastWin98|AtLeastWin2000|AtLeastWin2003|AtLeastWin2008|AtLeastWin2008R2|AtLeastWinME|AtLeastWinNT4|AtLeastWinVista|AtLeastWinXP|AtMostServicePack|AtMostWin7|AtMostWin8|AtMostWin10|AtMostWin95|AtMostWin98|AtMostWin2000|AtMostWin2003|AtMostWin2008|AtMostWin2008R2|AtMostWinME|AtMostWinNT4|AtMostWinVista|AtMostWinXP|IsDomainController|IsNT|IsServer|IsServicePack|IsWin7|IsWin8|IsWin10|IsWin95|IsWin98|IsWin2000|IsWin2003|IsWin2008|IsWin2008R2|IsWinME|IsWinNT4|IsWinVista|IsWinXP)}/},{token:\"constant.language.boolean.true.nsis\",regex:/\\b(?:true|on)\\b/},{token:\"constant.language.boolean.false.nsis\",regex:/\\b(?:false|off)\\b/},{token:\"constant.language.option.nsis\",regex:/(?:\\b|^\\s*)(?:(?:un\\.)?components|(?:un\\.)?custom|(?:un\\.)?directory|(?:un\\.)?instfiles|(?:un\\.)?license|uninstConfirm|admin|all|auto|both|bottom|bzip2|current|force|hide|highest|ifdiff|ifnewer|lastused|leave|left|listonly|lzma|nevershow|none|normal|notset|right|show|silent|silentlog|textonly|top|try|user|Win10|Win7|Win8|WinVista|zlib)\\b/,caseInsensitive:!0},{token:\"constant.language.slash-option.nsis\",regex:/\\b\\/(?:a|BRANDING|CENTER|COMPONENTSONLYONCUSTOM|CUSTOMSTRING=|date|e|ENABLECANCEL|FILESONLY|file|FINAL|GLOBAL|gray|ifempty|ifndef|ignorecase|IMGID=|ITALIC|LANG=|NOCUSTOM|noerrors|NONFATAL|nonfatal|oname=|o|REBOOTOK|redef|RESIZETOFIT|r|SHORT|SILENT|SOLID|STRIKE|TRIM|UNDERLINE|utcdate|windows|x)\\b/,caseInsensitive:!0},{token:\"constant.numeric.nsis\",regex:/\\b(?:0(?:x|X)[0-9a-fA-F]+|[0-9]+(?:\\.[0-9]+)?)\\b/},{token:\"entity.name.function.nsis\",regex:/\\$\\([\\w\\.:-]+\\)/},{token:\"storage.type.function.nsis\",regex:/\\$\\w+/},{token:\"punctuation.definition.string.begin.nsis\",regex:/`/,push:[{token:\"punctuation.definition.string.end.nsis\",regex:/`/,next:\"pop\"},{token:\"constant.character.escape.nsis\",regex:/\\$\\\\./},{defaultToken:\"string.quoted.back.nsis\"}]},{token:\"punctuation.definition.string.begin.nsis\",regex:/\"/,push:[{token:\"punctuation.definition.string.end.nsis\",regex:/\"/,next:\"pop\"},{token:\"constant.character.escape.nsis\",regex:/\\$\\\\./},{defaultToken:\"string.quoted.double.nsis\"}]},{token:\"punctuation.definition.string.begin.nsis\",regex:/'/,push:[{token:\"punctuation.definition.string.end.nsis\",regex:/'/,next:\"pop\"},{token:\"constant.character.escape.nsis\",regex:/\\$\\\\./},{defaultToken:\"string.quoted.single.nsis\"}]},{token:[\"punctuation.definition.comment.nsis\",\"comment.line.nsis\"],regex:/(;|#)(.*$)/},{token:\"punctuation.definition.comment.nsis\",regex:/\\/\\*/,push:[{token:\"punctuation.definition.comment.nsis\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.nsis\"}]},{token:\"text\",regex:/(?:!include|!insertmacro)\\b/}]},this.normalizeRules()};s.metaData={comment:\"\\n\ttodo: - highlight functions\\n\t\",fileTypes:[\"nsi\",\"nsh\"],name:\"NSIS\",scopeName:\"source.nsis\"},r.inherits(s,i),t.NSISHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/nsis\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/nsis_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./nsis_highlight_rules\").NSISHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=[\";\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/nsis\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-objectivec.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/objectivec_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/c_cpp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./c_cpp_highlight_rules\"),o=s.c_cppHighlightRules,u=function(){var e=\"\\\\\\\\(?:[abefnrtv'\\\"?\\\\\\\\]|[0-3]\\\\d{1,2}|[4-7]\\\\d?|222|x[a-zA-Z0-9]+)\",t=[{regex:\"\\\\b_cmd\\\\b\",token:\"variable.other.selector.objc\"},{regex:\"\\\\b(?:self|super)\\\\b\",token:\"variable.language.objc\"}],n=new o,r=n.getRules();this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:[\"storage.type.objc\",\"punctuation.definition.storage.type.objc\",\"entity.name.type.objc\",\"text\",\"entity.other.inherited-class.objc\"],regex:\"(@)(interface|protocol)(?!.+;)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*:\\\\s*)([A-Za-z]+)\"},{token:[\"storage.type.objc\"],regex:\"(@end)\"},{token:[\"storage.type.objc\",\"entity.name.type.objc\",\"entity.other.inherited-class.objc\"],regex:\"(@implementation)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*?::\\\\s*(?:[A-Za-z][A-Za-z0-9]*))?\"},{token:\"string.begin.objc\",regex:'@\"',next:\"constant_NSString\"},{token:\"storage.type.objc\",regex:\"\\\\bid\\\\s*<\",next:\"protocol_list\"},{token:\"keyword.control.macro.objc\",regex:\"\\\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\\\b\"},{token:[\"punctuation.definition.keyword.objc\",\"keyword.control.exception.objc\"],regex:\"(@)(try|catch|finally|throw)\\\\b\"},{token:[\"punctuation.definition.keyword.objc\",\"keyword.other.objc\"],regex:\"(@)(defs|encode)\\\\b\"},{token:[\"storage.type.id.objc\",\"text\"],regex:\"(\\\\bid\\\\b)(\\\\s|\\\\n)?\"},{token:\"storage.type.objc\",regex:\"\\\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\\\b\"},{token:[\"punctuation.definition.storage.type.objc\",\"storage.type.objc\"],regex:\"(@)(class|protocol)\\\\b\"},{token:[\"punctuation.definition.storage.type.objc\",\"punctuation\"],regex:\"(@selector)(\\\\s*\\\\()\",next:\"selectors\"},{token:[\"punctuation.definition.storage.modifier.objc\",\"storage.modifier.objc\"],regex:\"(@)(synchronized|public|private|protected|package)\\\\b\"},{token:\"constant.language.objc\",regex:\"\\\\bYES|NO|Nil|nil\\\\b\"},{token:\"support.variable.foundation\",regex:\"\\\\bNSApp\\\\b\"},{token:[\"support.function.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\\\b)\"},{token:[\"support.function.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\\\b)\"},{token:[\"support.class.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\\\b)\"},{token:[\"support.class.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"},{token:[\"support.type.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"},{token:[\"support.class.quartz\"],regex:\"(?:\\\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\\\b)\"},{token:[\"support.type.quartz\"],regex:\"(?:\\\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\\\b)\"},{token:[\"support.type.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\\\b)\"},{token:[\"support.constant.cocoa\"],regex:\"(?:\\\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\\\b)\"},{token:[\"support.constant.notification.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\\\b)\"},{token:[\"support.constant.notification.cocoa\"],regex:\"(?:\\\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\\\b)\"},{token:[\"support.constant.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\\\b)\"},{token:[\"support.constant.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\\\b)\"},{token:\"support.function.C99.c\",regex:s.cFunctions},{token:n.getKeywords(),regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.section.scope.begin.objc\",regex:\"\\\\[\",next:\"bracketed_content\"},{token:\"meta.function.objc\",regex:\"^(?:-|\\\\+)\\\\s*\"}],constant_NSString:[{token:\"constant.character.escape.objc\",regex:e},{token:\"invalid.illegal.unknown-escape.objc\",regex:\"\\\\\\\\.\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"punctuation.definition.string.end\",regex:'\"',next:\"start\"}],protocol_list:[{token:\"punctuation.section.scope.end.objc\",regex:\">\",next:\"start\"},{token:\"support.other.protocol.objc\",regex:\"\\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\\b\"}],selectors:[{token:\"support.function.any-method.name-of-parameter.objc\",regex:\"\\\\b(?:[a-zA-Z_:][\\\\w]*)+\"},{token:\"punctuation\",regex:\"\\\\)\",next:\"start\"}],bracketed_content:[{token:\"punctuation.section.scope.end.objc\",regex:\"]\",next:\"start\"},{token:[\"support.function.any-method.objc\"],regex:\"(?:predicateWithFormat:| NSPredicate predicateWithFormat:)\",next:\"start\"},{token:\"support.function.any-method.objc\",regex:\"\\\\w+(?::|(?=]))\",next:\"start\"}],bracketed_strings:[{token:\"punctuation.section.scope.end.objc\",regex:\"]\",next:\"start\"},{token:\"keyword.operator.logical.predicate.cocoa\",regex:\"\\\\b(?:AND|OR|NOT|IN)\\\\b\"},{token:[\"invalid.illegal.unknown-method.objc\",\"punctuation.separator.arguments.objc\"],regex:\"\\\\b(\\\\w+)(:)\"},{regex:\"\\\\b(?:ALL|ANY|SOME|NONE)\\\\b\",token:\"constant.language.predicate.cocoa\"},{regex:\"\\\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\\\b\",token:\"constant.language.predicate.cocoa\"},{regex:\"\\\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\\\b\",token:\"keyword.operator.comparison.predicate.cocoa\"},{regex:\"\\\\bC(?:ASEINSENSITIVE|I)\\\\b\",token:\"keyword.other.modifier.predicate.cocoa\"},{regex:\"\\\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\\\b\",token:\"keyword.other.predicate.cocoa\"},{regex:e,token:\"constant.character.escape.objc\"},{regex:\"\\\\\\\\.\",token:\"invalid.illegal.unknown-escape.objc\"},{token:\"string\",regex:'[^\"\\\\\\\\]'},{token:\"punctuation.definition.string.end.objc\",regex:'\"',next:\"predicates\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],methods:[{token:\"meta.function.objc\",regex:\"(?=\\\\{|#)|;\",next:\"start\"}]};for(var u in r)this.$rules[u]?this.$rules[u].push&&this.$rules[u].push.apply(this.$rules[u],r[u]):this.$rules[u]=r[u];this.$rules.bracketed_content=this.$rules.bracketed_content.concat(this.$rules.start,t),this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(u,o),t.ObjectiveCHighlightRules=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/objectivec\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/objectivec_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./objectivec_highlight_rules\").ObjectiveCHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/objectivec\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-ocaml.js",
    "content": "ace.define(\"ace/mode/ocaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|or|private|rec|sig|struct|then|to|try|type|val|virtual|when|while|with\",t=\"true|false\",n=\"abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|add_available_units|add_big_int|add_buffer|add_channel|add_char|add_initializer|add_int_big_int|add_interfaces|add_num|add_string|add_substitute|add_substring|alarm|allocated_bytes|allow_only|allow_unsafe_modules|always|append|appname_get|appname_set|approx_num_exp|approx_num_fix|arg|argv|arith_status|array|array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|chown|chr|chroot|classify_float|clear|clear_available_units|clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|close_out|close_out_noerr|close_process|close_process|close_process_full|close_process_in|close_process_out|close_subwindow|close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|combine|combine|command|compact|compare|compare_big_int|compare_num|complex32|complex64|concat|conj|connect|contains|contains_from|contents|copy|cos|cosh|count|count|counters|create|create_alarm|create_image|create_matrix|create_matrix|create_matrix|create_object|create_object_and_run_initializers|create_object_opt|create_process|create_process|create_process_env|create_process_env|create_table|current|current_dir_name|current_point|current_x|current_y|curveto|custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|error_message|escaped|establish_server|executable_name|execv|execve|execvp|execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|float|float32|float64|float_of_big_int|float_of_bits|float_of_int|float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|for_all|for_all2|force|force_newline|force_val|foreground|fork|format_of_string|formatter_of_buffer|formatter_of_out_channel|fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|genarray_of_array1|genarray_of_array2|genarray_of_array3|get|get_all_formatter_output_functions|get_approx_printing|get_copy|get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|get_formatter_output_functions|get_formatter_tag_functions|get_image|get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|global_replace|global_substitute|gmtime|green|grid|group_beginning|group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|marshal|match_beginning|match_end|matched_group|matched_string|max|max_array_length|max_big_int|max_elt|max_float|max_int|max_num|max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|output_char|output_string|output_value|over_max_boxes|pack|params|parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|power_big_int_positive_big_int|power_big_int_positive_int|power_int_positive_big_int|power_int_positive_int|power_num|pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|pp_get_all_formatter_output_functions|pp_get_ellipsis_text|pp_get_formatter_output_functions|pp_get_formatter_tag_functions|pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|pp_set_all_formatter_output_functions|pp_set_ellipsis_text|pp_set_formatter_out_channel|pp_set_formatter_output_functions|pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|print_bool|print_break|print_char|print_cut|print_endline|print_float|print_flush|print_if_newline|print_int|print_newline|print_space|print_stat|print_string|print_tab|print_tbreak|printf|prohibit|public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|regexp_string_case_fold|register|register_exception|rem|remember_mode|remove|remove_assoc|remove_assq|rename|replace|replace_first|replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|run_initializers|run_initializers_opt|scanf|search_backward|search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|set_all_formatter_output_functions|set_approx_printing|set_binary_mode_in|set_binary_mode_out|set_close_on_exec|set_close_on_exec|set_color|set_ellipsis_text|set_error_when_null_denominator|set_field|set_floating_precision|set_font|set_formatter_out_channel|set_formatter_output_functions|set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|str_formatter|string|string_after|string_before|string_match|string_of_big_int|string_of_bool|string_of_float|string_of_format|string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|sub_right|subset|subset|substitute_first|substring|succ|succ|succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|temp_file|text_size|time|time|time|timed_read|timed_write|times|times|tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|wait_timed_read|wait_timed_write|wait_write|waitpid|white|widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\"),i=\"(?:(?:[1-9]\\\\d*)|(?:0))\",s=\"(?:0[oO]?[0-7]+)\",o=\"(?:0[xX][\\\\dA-Fa-f]+)\",u=\"(?:0[bB][01]+)\",a=\"(?:\"+i+\"|\"+s+\"|\"+o+\"|\"+u+\")\",f=\"(?:[eE][+-]?\\\\d+)\",l=\"(?:\\\\.\\\\d+)\",c=\"(?:\\\\d+)\",h=\"(?:(?:\"+c+\"?\"+l+\")|(?:\"+c+\"\\\\.))\",p=\"(?:(?:\"+h+\"|\"+c+\")\"+f+\")\",d=\"(?:\"+p+\"|\"+h+\")\";this.$rules={start:[{token:\"comment\",regex:\"\\\\(\\\\*.*?\\\\*\\\\)\\\\s*?$\"},{token:\"comment\",regex:\"\\\\(\\\\*.*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"'.'\"},{token:\"string\",regex:'\"',next:\"qstring\"},{token:\"constant.numeric\",regex:\"(?:\"+d+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:d},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\)\",next:\"start\"},{defaultToken:\"comment\"}],qstring:[{token:\"string\",regex:'\"',next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(s,i),t.OcamlHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/ocaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ocaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ocaml_highlight_rules\").OcamlHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour,this.$outdent=new o};r.inherits(a,i);var f=/(?:[({[=:]|[-=]>|\\b(?:else|try|with))\\s*$/;(function(){this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,a=/^\\s*\\(\\*(.*)\\*\\)/;for(i=n;i<=r;i++)if(!a.test(t.getLine(i))){o=!1;break}var f=new u(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(a)[1]:\"(*\"+s+\"*)\")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return(!i.length||i[i.length-1].type!==\"comment\")&&e===\"start\"&&f.test(t)&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/ocaml\"}).call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-pascal.js",
    "content": "ace.define(\"ace/mode/pascal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{caseInsensitive:!0,token:\"keyword.control.pascal\",regex:\"\\\\b(?:(absolute|abstract|all|and|and_then|array|as|asm|attribute|begin|bindable|case|class|const|constructor|destructor|div|do|do|else|end|except|export|exports|external|far|file|finalization|finally|for|forward|goto|if|implementation|import|in|inherited|initialization|interface|interrupt|is|label|library|mod|module|name|near|nil|not|object|of|only|operator|or|or_else|otherwise|packed|pow|private|program|property|protected|public|published|qualified|record|repeat|resident|restricted|segment|set|shl|shr|then|to|try|type|unit|until|uses|value|var|view|virtual|while|with|xor))\\\\b\"},{caseInsensitive:!0,token:[\"variable.pascal\",\"text\",\"storage.type.prototype.pascal\",\"entity.name.function.prototype.pascal\"],regex:\"\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?(?=(?:\\\\(.*?\\\\))?;\\\\s*(?:attribute|forward|external))\"},{caseInsensitive:!0,token:[\"variable.pascal\",\"text\",\"storage.type.function.pascal\",\"entity.name.function.pascal\"],regex:\"\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?\"},{token:\"constant.numeric.pascal\",regex:\"\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"punctuation.definition.comment.pascal\",regex:\"--.*$\",push_:[{token:\"comment.line.double-dash.pascal.one\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-dash.pascal.one\"}]},{token:\"punctuation.definition.comment.pascal\",regex:\"//.*$\",push_:[{token:\"comment.line.double-slash.pascal.two\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-slash.pascal.two\"}]},{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\(\\\\*\",push:[{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\*\\\\)\",next:\"pop\"},{defaultToken:\"comment.block.pascal.one\"}]},{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\{\",push:[{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\}\",next:\"pop\"},{defaultToken:\"comment.block.pascal.two\"}]},{token:\"punctuation.definition.string.begin.pascal\",regex:'\"',push:[{token:\"constant.character.escape.pascal\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.pascal\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.pascal\"}]},{token:\"punctuation.definition.string.begin.pascal\",regex:\"'\",push:[{token:\"constant.character.escape.apostrophe.pascal\",regex:\"''\"},{token:\"punctuation.definition.string.end.pascal\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.quoted.single.pascal\"}]},{token:\"keyword.operator\",regex:\"[+\\\\-;,/*%]|:=|=\"}]},this.normalizeRules()};r.inherits(s,i),t.PascalHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/pascal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pascal_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./pascal_highlight_rules\").PascalHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=[\"--\",\"//\"],this.blockComment=[{start:\"(*\",end:\"*)\"},{start:\"{\",end:\"}\"}],this.$id=\"ace/mode/pascal\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-perl.js",
    "content": "ace.define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\",t=\"ARGV|ENV|INC|SIG\",n=\"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do\",r=this.createKeywordMapper({keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment.doc\",regex:\"^=(?:begin|item)\\\\b\",next:\"block_comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0x[0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"},{token:\"comment\",regex:\"#.*$\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}],block_comment:[{token:\"comment.doc\",regex:\"^=cut\\\\b\",next:\"start\"},{defaultToken:\"comment.doc\"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/perl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./perl_highlight_rules\").PerlHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u({start:\"^=(begin|item)\\\\b\",end:\"^=(cut)\\\\b\"}),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.blockComment=[{start:\"=begin\",end:\"=cut\",lineStartOnly:!0},{start:\"=item\",end:\"=cut\",lineStartOnly:!0}],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/perl\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-perl6.js",
    "content": "ace.define(\"ace/mode/perl6_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"my|our|class|role|grammar|is|does|sub|method|submethod|try|default|when|if|elsif|else|unless|with|orwith|without|for|given|proceed|succeed|loop|while|until|repeat|module|use|need|import|require|unit|constant|enum|multi|return|has|token|rule|make|made|proto|state|augment|but|anon|supersede|let|subset|gather|returns|return-rw|temp|BEGIN|CHECK|INIT|END|CLOSE|ENTER|LEAVE|KEEP|UNDO|PRE|POST|FIRST|NEXT|LAST|CATCH|CONTROL|QUIT|DOC\",t=\"Any|Array|Associative|AST|atomicint|Attribute|Backtrace|Backtrace::Frame|Bag|Baggy|BagHash|Blob|Block|Bool|Buf|Callable|CallFrame|Cancellation|Capture|Channel|Code|compiler|Complex|ComplexStr|Cool|CurrentThreadScheduler|Cursor|Date|Dateish|DateTime|Distro|Duration|Encoding|Exception|Failure|FatRat|Grammar|Hash|HyperWhatever|Instant|Int|IntStr|IO|IO::ArgFiles|IO::CatHandle|IO::Handle|IO::Notification|IO::Path|IO::Path::Cygwin|IO::Path::QNX|IO::Path::Unix|IO::Path::Win32|IO::Pipe|IO::Socket|IO::Socket::Async|IO::Socket::INET|IO::Spec|IO::Spec::Cygwin|IO::Spec::QNX|IO::Spec::Unix|IO::Spec::Win32|IO::Special|Iterable|Iterator|Junction|Kernel|Label|List|Lock|Lock::Async|Macro|Map|Match|Metamodel::AttributeContainer|Metamodel::C3MRO|Metamodel::ClassHOW|Metamodel::EnumHOW|Metamodel::Finalization|Metamodel::MethodContainer|Metamodel::MROBasedMethodDispatch|Metamodel::MultipleInheritance|Metamodel::Naming|Metamodel::Primitives|Metamodel::PrivateMethodContainer|Metamodel::RoleContainer|Metamodel::Trusting|Method|Mix|MixHash|Mixy|Mu|NFC|NFD|NFKC|NFKD|Nil|Num|Numeric|NumStr|ObjAt|Order|Pair|Parameter|Perl|Pod::Block|Pod::Block::Code|Pod::Block::Comment|Pod::Block::Declarator|Pod::Block::Named|Pod::Block::Para|Pod::Block::Table|Pod::Heading|Pod::Item|Positional|PositionalBindFailover|Proc|Proc::Async|Promise|Proxy|PseudoStash|QuantHash|Range|Rat|Rational|RatStr|Real|Regex|Routine|Scalar|Scheduler|Semaphore|Seq|Set|SetHash|Setty|Signature|Slip|Stash|Str|StrDistance|Stringy|Sub|Submethod|Supplier|Supplier::Preserving|Supply|Systemic|Tap|Telemetry|Telemetry::Instrument::Thread|Telemetry::Instrument::Usage|Telemetry::Period|Telemetry::Sampler|Thread|ThreadPoolScheduler|UInt|Uni|utf8|Variable|Version|VM|Whatever|WhateverCode|WrapHandle|int|uint|num|str|int8|int16|int32|int64|uint8|uint16|uint32|uint64|long|longlong|num32|num64|size_t|bool|CArray|Pointer|Backtrace|Backtrace::Frame|Exception|Failure|X::AdHoc|X::Anon::Augment|X::Anon::Multi|X::Assignment::RO|X::Attribute::NoPackage|X::Attribute::Package|X::Attribute::Undeclared|X::Augment::NoSuchType|X::Bind|X::Bind::NativeType|X::Bind::Slice|X::Caller::NotDynamic|X::Channel::ReceiveOnClosed|X::Channel::SendOnClosed|X::Comp|X::Composition::NotComposable|X::Constructor::Positional|X::ControlFlow|X::ControlFlow::Return|X::DateTime::TimezoneClash|X::Declaration::Scope|X::Declaration::Scope::Multi|X::Does::TypeObject|X::Eval::NoSuchLang|X::Export::NameClash|X::IO|X::IO::Chdir|X::IO::Chmod|X::IO::Copy|X::IO::Cwd|X::IO::Dir|X::IO::DoesNotExist|X::IO::Link|X::IO::Mkdir|X::IO::Move|X::IO::Rename|X::IO::Rmdir|X::IO::Symlink|X::IO::Unlink|X::Inheritance::NotComposed|X::Inheritance::Unsupported|X::Method::InvalidQualifier|X::Method::NotFound|X::Method::Private::Permission|X::Method::Private::Unqualified|X::Mixin::NotComposable|X::NYI|X::NoDispatcher|X::Numeric::Real|X::OS|X::Obsolete|X::OutOfRange|X::Package::Stubbed|X::Parameter::Default|X::Parameter::MultipleTypeConstraints|X::Parameter::Placeholder|X::Parameter::Twigil|X::Parameter::WrongOrder|X::Phaser::Multiple|X::Phaser::PrePost|X::Placeholder::Block|X::Placeholder::Mainline|X::Pod|X::Proc::Async|X::Proc::Async::AlreadyStarted|X::Proc::Async::CharsOrBytes|X::Proc::Async::MustBeStarted|X::Proc::Async::OpenForWriting|X::Proc::Async::TapBeforeSpawn|X::Proc::Unsuccessful|X::Promise::CauseOnlyValidOnBroken|X::Promise::Vowed|X::Redeclaration|X::Role::Initialization|X::Seq::Consumed|X::Sequence::Deduction|X::Signature::NameClash|X::Signature::Placeholder|X::Str::Numeric|X::StubCode|X::Syntax|X::Syntax::Augment::WithoutMonkeyTyping|X::Syntax::Comment::Embedded|X::Syntax::Confused|X::Syntax::InfixInTermPosition|X::Syntax::Malformed|X::Syntax::Missing|X::Syntax::NegatedPair|X::Syntax::NoSelf|X::Syntax::Number::RadixOutOfRange|X::Syntax::P5|X::Syntax::Regex::Adverb|X::Syntax::Regex::SolitaryQuantifier|X::Syntax::Reserved|X::Syntax::Self::WithoutObject|X::Syntax::Signature::InvocantMarker|X::Syntax::Term::MissingInitializer|X::Syntax::UnlessElse|X::Syntax::Variable::Match|X::Syntax::Variable::Numeric|X::Syntax::Variable::Twigil|X::Temporal|X::Temporal::InvalidFormat|X::TypeCheck|X::TypeCheck::Assignment|X::TypeCheck::Binding|X::TypeCheck::Return|X::TypeCheck::Splice|X::Undeclared\",n=\"abs|abs2rel|absolute|accept|ACCEPTS|accessed|acos|acosec|acosech|acosh|acotan|acotanh|acquire|act|action|actions|add|add_attribute|add_enum_value|add_fallback|add_method|add_parent|add_private_method|add_role|add_trustee|adverb|after|all|allocate|allof|allowed|alternative-names|annotations|antipair|antipairs|any|anyof|app_lifetime|append|arch|archname|args|arity|asec|asech|asin|asinh|ASSIGN-KEY|ASSIGN-POS|assuming|ast|at|atan|atan2|atanh|AT-KEY|atomic-assign|atomic-dec-fetch|atomic-fetch|atomic-fetch-add|atomic-fetch-dec|atomic-fetch-inc|atomic-fetch-sub|atomic-inc-fetch|AT-POS|attributes|auth|await|backtrace|Bag|BagHash|base|basename|base-repeating|batch|BIND-KEY|BIND-POS|bind-stderr|bind-stdin|bind-stdout|bind-udp|bits|bless|block|bool-only|bounds|break|Bridge|broken|BUILD|build-date|bytes|cache|callframe|calling-package|CALL-ME|callsame|callwith|can|cancel|candidates|cando|canonpath|caps|caption|Capture|cas|catdir|categorize|categorize-list|catfile|catpath|cause|ceiling|cglobal|changed|Channel|chars|chdir|child|child-name|child-typename|chmod|chomp|chop|chr|chrs|chunks|cis|classify|classify-list|cleanup|clone|close|closed|close-stdin|code|codes|collate|column|comb|combinations|command|comment|compiler|Complex|compose|compose_type|composer|condition|config|configure_destroy|configure_type_checking|conj|connect|constraints|construct|contains|contents|copy|cos|cosec|cosech|cosh|cotan|cotanh|count|count-only|cpu-cores|cpu-usage|CREATE|create_type|cross|cue|curdir|curupdir|d|Date|DateTime|day|daycount|day-of-month|day-of-week|day-of-year|days-in-month|declaration|decode|decoder|deepmap|defined|DEFINITE|delayed|DELETE-KEY|DELETE-POS|denominator|desc|DESTROY|destroyers|devnull|did-you-mean|die|dir|dirname|dir-sep|DISTROnames|do|done|duckmap|dynamic|e|eager|earlier|elems|emit|enclosing|encode|encoder|encoding|end|ends-with|enum_from_value|enum_value_list|enum_values|enums|eof|EVAL|EVALFILE|exception|excludes-max|excludes-min|EXISTS-KEY|EXISTS-POS|exit|exitcode|exp|expected|explicitly-manage|expmod|extension|f|fail|fc|feature|file|filename|find_method|find_method_qualified|finish|first|flat|flatmap|flip|floor|flush|fmt|format|formatter|freeze|from|from-list|from-loop|from-posix|full|full-barrier|get|get_value|getc|gist|got|grab|grabpairs|grep|handle|handled|handles|hardware|has_accessor|head|headers|hh-mm-ss|hidden|hides|hour|how|hyper|id|illegal|im|in|indent|index|indices|indir|infinite|infix|install_method_cache|Instant|instead|int-bounds|interval|in-timezone|invalid-str|invert|invocant|IO|IO::Notification.watch-path|is_trusted|is_type|isa|is-absolute|is-hidden|is-initial-thread|is-int|is-lazy|is-leap-year|isNaN|is-prime|is-relative|is-routine|is-setting|is-win|item|iterator|join|keep|kept|KERNELnames|key|keyof|keys|kill|kv|kxxv|l|lang|last|lastcall|later|lazy|lc|leading|level|line|lines|link|listen|live|local|lock|log|log10|lookup|lsb|MAIN|match|max|maxpairs|merge|message|method_table|methods|migrate|min|minmax|minpairs|minute|misplaced|Mix|MixHash|mkdir|mode|modified|month|move|mro|msb|multiness|name|named|named_names|narrow|nativecast|native-descriptor|nativesizeof|new|new_type|new-from-daycount|new-from-pairs|next|nextcallee|next-handle|nextsame|nextwith|NFC|NFD|NFKC|NFKD|nl-in|nl-out|nodemap|none|norm|not|note|now|nude|numerator|Numeric|of|offset|offset-in-hours|offset-in-minutes|old|on-close|one|on-switch|open|opened|operation|optional|ord|ords|orig|os-error|osname|out-buffer|pack|package|package-kind|package-name|packages|pair|pairs|pairup|parameter|params|parent|parent-name|parents|parse|parse-base|parsefile|parse-names|parts|path|path-sep|payload|peer-host|peer-port|periods|perl|permutations|phaser|pick|pickpairs|pid|placeholder|plus|polar|poll|polymod|pop|pos|positional|posix|postfix|postmatch|precomp-ext|precomp-target|pred|prefix|prematch|prepend|print|printf|print-nl|print-to|private|private_method_table|proc|produce|Promise|prompt|protect|pull-one|push|push-all|push-at-least|push-exactly|push-until-lazy|put|qualifier-type|quit|r|race|radix|rand|range|raw|re|read|readchars|readonly|ready|Real|reallocate|reals|reason|rebless|receive|recv|redispatcher|redo|reduce|rel2abs|relative|release|rename|repeated|replacement|report|reserved|resolve|restore|result|resume|rethrow|reverse|right|rindex|rmdir|roles_to_compose|rolish|roll|rootdir|roots|rotate|rotor|round|roundrobin|routine-type|run|rwx|s|samecase|samemark|samewith|say|schedule-on|scheduler|scope|sec|sech|second|seek|self|send|Set|set_hidden|set_name|set_package|set_rw|set_value|SetHash|set-instruments|setup_finalization|shape|share|shell|shift|sibling|sigil|sign|signal|signals|signature|sin|sinh|sink|sink-all|skip|skip-at-least|skip-at-least-pull-one|skip-one|sleep|sleep-timer|sleep-until|Slip|slurp|slurp-rest|slurpy|snap|snapper|so|socket-host|socket-port|sort|source|source-package|spawn|SPEC|splice|split|splitdir|splitpath|sprintf|spurt|sqrt|squish|srand|stable|start|started|starts-with|status|stderr|stdout|sub_signature|subbuf|subbuf-rw|subname|subparse|subst|subst-mutate|substr|substr-eq|substr-rw|succ|sum|Supply|symlink|t|tail|take|take-rw|tan|tanh|tap|target|target-name|tc|tclc|tell|then|throttle|throw|timezone|tmpdir|to|today|toggle|to-posix|total|trailing|trans|tree|trim|trim-leading|trim-trailing|truncate|truncated-to|trusts|try_acquire|trying|twigil|type|type_captures|typename|uc|udp|uncaught_handler|unimatch|uniname|uninames|uniparse|uniprop|uniprops|unique|unival|univals|unlink|unlock|unpack|unpolar|unshift|unwrap|updir|USAGE|utc|val|value|values|VAR|variable|verbose-config|version|VMnames|volume|vow|w|wait|warn|watch|watch-path|week|weekday-of-month|week-number|week-year|WHAT|WHERE|WHEREFORE|WHICH|WHO|whole-second|WHY|wordcase|words|workaround|wrap|write|write-to|yada|year|yield|yyyy-mm-dd|z|zip|zip-latest|plan|done-testing|bail-out|todo|skip|skip-rest|diag|subtest|pass|flunk|ok|nok|cmp-ok|is-deeply|isnt|is-approx|like|unlike|use-ok|isa-ok|does-ok|can-ok|dies-ok|lives-ok|eval-dies-ok|eval-lives-ok|throws-like|fails-like|rw|required|native|repr|export|symbol\",r=\"pi|Inf|tau|time\",i=\"eq|ne|gt|lt|le|ge|div|gcd|lcm|leg|cmp|ff|fff|x|before|after|Z|X|and|or|andthen|notandthen|orelse|xor\",s=this.createKeywordMapper({keyword:e,\"storage.type\":t,\"constant.language\":r,\"support.function\":n,\"keyword.operator\":i},\"identifier\"),o=\"[a-zA-Z_][a-zA-Z_0-9:-]*\\\\b\",u={token:\"constant.numeric\",regex:\"0x[0-9a-fA-F]+\\\\b\"},a={token:\"constant.numeric\",regex:\"[+-.]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},f={token:\"constant.numeric\",regex:\"(?:\\\\d+_?\\\\d+)+\\\\b\"},l={token:\"constant.numeric\",regex:\"\\\\+?\\\\d+i\\\\b\"},c={token:\"constant.language.boolean\",regex:\"(?:True|False)\\\\b\"},h={token:\"constant.other\",regex:\"v[0-9](?:\\\\.[a-zA-Z0-9*])*\\\\b\"},p={token:s,regex:\"[a-zA-Z][\\\\:a-zA-Z0-9_-]*\\\\b\"},d={token:\"variable.language\",regex:\"[$@%&][?*!.]?[a-zA-Z0-9_-]+\\\\b\"},v={token:\"variable.language\",regex:\"\\\\$[/|!]?|@\\\\$/\"},m={token:\"keyword.operator\",regex:\"=|<|>|\\\\+|\\\\*|-|/|~|%|\\\\?|!|\\\\^|\\\\.|\\\\:|\\\\,|\\u00bb|\\u00ab|\\\\||\\\\&|\\u269b|\\u2218\"},g={token:\"constant.language\",regex:\"\\ud835\\udc52|\\u03c0|\\u03c4|\\u221e\"},y={token:\"string.quoted.single\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},b={token:\"string.quoted.single\",regex:\"[<](?:[a-zA-Z0-9 ])*[>]\"},w={token:\"string.regexp\",regex:\"[m|rx]?[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"};this.$rules={start:[{token:\"comment.block\",regex:\"#[`|=]\\\\(.*\\\\)\"},{token:\"comment.block\",regex:\"#[`|=]\\\\[.*\\\\]\"},{token:\"comment.doc\",regex:\"^=(?:begin)\\\\b\",next:\"block_comment\"},{token:\"string.unquoted\",regex:\"q[x|w]?\\\\:to/END/;\",next:\"qheredoc\"},{token:\"string.unquoted\",regex:\"qq[x|w]?\\\\:to/END/;\",next:\"qqheredoc\"},w,y,{token:\"string.quoted.double\",regex:'\"',next:\"qqstring\"},b,{token:[\"keyword\",\"text\",\"variable.module\"],regex:\"(use)(\\\\s+)((?:\"+o+\"\\\\.?)*)\"},u,a,f,l,c,h,p,d,v,m,g,{token:\"comment\",regex:\"#.*$\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"constant.language.escape\",regex:'\\\\\\\\(?:[nrtef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},d,v,{token:\"lparen\",regex:\"{\",next:\"qqinterpolation\"},{token:\"string.quoted.double\",regex:'\"',next:\"start\"},{defaultToken:\"string.quoted.double\"}],qqinterpolation:[u,a,f,l,c,h,p,d,v,m,g,y,w,{token:\"rparen\",regex:\"}\",next:\"qqstring\"}],block_comment:[{token:\"comment.doc\",regex:\"^=end +[a-zA-Z_0-9]*\",next:\"start\"},{defaultToken:\"comment.doc\"}],qheredoc:[{token:\"string.unquoted\",regex:\"END$\",next:\"start\"},{defaultToken:\"string.unquoted\"}],qqheredoc:[d,v,{token:\"lparen\",regex:\"{\",next:\"qqheredocinterpolation\"},{token:\"string.unquoted\",regex:\"END$\",next:\"start\"},{defaultToken:\"string.unquoted\"}],qqheredocinterpolation:[u,a,f,l,c,h,p,d,v,m,g,y,w,{token:\"rparen\",regex:\"}\",next:\"qqheredoc\"}]}};r.inherits(s,i),t.Perl6HighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/perl6\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl6_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./perl6_highlight_rules\").Perl6HighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u({start:\"^=(begin)\\\\b\",end:\"^=(end)\\\\b\"}),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.blockComment=[{start:\"=begin\",end:\"=end\",lineStartOnly:!0},{start:\"=item\",end:\"=end\",lineStartOnly:!0}],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/perl6\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/perl6\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-pgsql.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\",t=\"ARGV|ENV|INC|SIG\",n=\"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do\",r=this.createKeywordMapper({keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment.doc\",regex:\"^=(?:begin|item)\\\\b\",next:\"block_comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0x[0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"},{token:\"comment\",regex:\"#.*$\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}],block_comment:[{token:\"comment.doc\",regex:\"^=cut\\\\b\",next:\"start\"},{defaultToken:\"comment.doc\"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),ace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"variable.language\":\"self|cls\",\"constant.language\":t,keyword:e},\"identifier\"),i=\"[uU]?\",s=\"[rR]\",o=\"[fF]\",u=\"(?:[rR][fF]|[fF][rR])\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:s+'\"{3}',next:\"rawqqstring3\"},{token:\"string\",regex:s+'\"(?=.)',next:\"rawqqstring\"},{token:\"string\",regex:s+\"'{3}\",next:\"rawqstring3\"},{token:\"string\",regex:s+\"'(?=.)\",next:\"rawqstring\"},{token:\"string\",regex:o+'\"{3}',next:\"fqqstring3\"},{token:\"string\",regex:o+'\"(?=.)',next:\"fqqstring\"},{token:\"string\",regex:o+\"'{3}\",next:\"fqstring3\"},{token:\"string\",regex:o+\"'(?=.)\",next:\"fqstring\"},{token:\"string\",regex:u+'\"{3}',next:\"rfqqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"rfqqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"rfqstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"rfqstring\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"punctuation\",regex:\",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"},{include:\"constants\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],rawqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],rawqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],fqqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"fqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rfqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring:[{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstringParRules:[{token:\"paren.lparen\",regex:\"[\\\\[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)]\"},{token:\"string\",regex:\"\\\\s+\"},{token:\"string\",regex:\"'(.)*'\"},{token:\"string\",regex:'\"(.)*\"'},{token:\"function.support\",regex:\"(!s|!r|!a)\"},{include:\"constants\"},{token:\"paren.rparen\",regex:\"}\",next:\"pop\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"}],constants:[{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:[\"punctuation\",\"function.support\"],regex:\"(\\\\.)([a-zA-Z_]+)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"text\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/pgsql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/perl_highlight_rules\",\"ace/mode/python_highlight_rules\",\"ace/mode/json_highlight_rules\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./perl_highlight_rules\").PerlHighlightRules,a=e(\"./python_highlight_rules\").PythonHighlightRules,f=e(\"./json_highlight_rules\").JsonHighlightRules,l=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,c=function(){var e=\"abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|anyrange|array|as|asc|assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|create|cross|cstring|csv|current|current_catalog|current_date|current_role|current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|date|daterange|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|event|event_trigger|except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|int4|int4range|int8|int8range|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|json|key|label|language|language_handler|large|last|lateral|lc_collate|lc_ctype|leading|leakproof|least|left|level|like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|match|materialized|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|numrange|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|procedural|procedure|program|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|references|refresh|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|simple|smallint|smgr|snapshot|some|stable|standalone|start|statement|statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsrange|tstzrange|tsvector|txid_snapshot|type|types|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone\",t=\"RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|acldefault|aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anyrange_in|anyrange_out|anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_remove|array_replace|array_send|array_smaller|array_to_json|array_to_string|array_typanalyze|array_upper|arraycontained|arraycontains|arraycontjoinsel|arraycontsel|arrayoverlap|ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcanreturn|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|btfloat4sortsupport|btfloat84cmp|btfloat8cmp|btfloat8sortsupport|btgetbitmap|btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint2sortsupport|btint42cmp|btint48cmp|btint4cmp|btint4sortsupport|btint82cmp|btint84cmp|btint8cmp|btint8sortsupport|btmarkpos|btnamecmp|btnamesortsupport|btoidcmp|btoidsortsupport|btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|bytea_string_agg_finalfn|bytea_string_agg_transfn|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|date_sortsupport|date_trunc|daterange|daterange_canonical|daterange_subdiff|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|dsynonym_lexize|dtrunc|elem_contained_by_range|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|euc_tw_to_utf8|event_trigger_in|event_trigger_out|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|has_function_privilege|has_language_privilege|has_schema_privilege|has_sequence_privilege|has_server_privilege|has_table_privilege|has_tablespace_privilege|has_type_privilege|hash_aclitem|hash_array|hash_numeric|hash_range|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4range|int4range_canonical|int4range_subdiff|int4recv|int4send|int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|int8range|int8range_canonical|int8range_subdiff|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_transform|interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isempty|isfinite|ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|json_agg|json_agg_finalfn|json_agg_transfn|json_array_element|json_array_element_text|json_array_elements|json_array_length|json_each|json_each_text|json_extract_path|json_extract_path_op|json_extract_path_text|json_extract_path_text_op|json_in|json_object_field|json_object_field_text|json_object_keys|json_out|json_populate_record|json_populate_recordset|json_recv|json_send|justify_days|justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|lo_lseek64|lo_open|lo_tell|lo_tell64|lo_truncate|lo_truncate64|lo_unlink|log|loread|lower|lower_inc|lower_inf|lowrite|lpad|lseg|lseg_center|lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_and|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_not|macaddr_or|macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_transform|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|numrange|numrange_subdiff|obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|pg_available_extension_versions|pg_available_extensions|pg_backend_pid|pg_backup_start_time|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_for|pg_collation_is_visible|pg_column_is_updatable|pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|pg_event_trigger_dropped_objects|pg_export_snapshot|pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|pg_get_multixact_members|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_identify_object|pg_indexes_size|pg_is_in_backup|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|pg_opfamily_is_visible|pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|pg_relation_is_updatable|pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|pg_stat_get_buf_written_backend|pg_stat_get_checkpoint_sync_time|pg_stat_get_checkpoint_write_time|pg_stat_get_db_blk_read_time|pg_stat_get_db_blk_write_time|pg_stat_get_db_blocks_fetched|pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|pg_stat_get_db_conflict_tablespace|pg_stat_get_db_deadlocks|pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|pg_stat_get_db_temp_bytes|pg_stat_get_db_temp_files|pg_stat_get_db_tuples_deleted|pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|pg_stat_get_function_calls|pg_stat_get_function_self_time|pg_stat_get_function_total_time|pg_stat_get_last_analyze_time|pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_total_time|pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|pg_tablespace_databases|pg_tablespace_location|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|pg_trigger_depth|pg_try_advisory_lock|pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|pg_xlog_location_diff|pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|range_adjacent|range_after|range_before|range_cmp|range_contained_by|range_contains|range_contains_elem|range_eq|range_ge|range_gist_compress|range_gist_consistent|range_gist_decompress|range_gist_penalty|range_gist_picksplit|range_gist_same|range_gist_union|range_gt|range_in|range_intersect|range_le|range_lt|range_minus|range_ne|range_out|range_overlaps|range_overleft|range_overright|range_recv|range_send|range_typanalyze|range_union|rangesel|rank|record_eq|record_ge|record_gt|record_in|record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|row_to_json|rpad|rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|smgrout|spg_kd_choose|spg_kd_config|spg_kd_inner_consistent|spg_kd_picksplit|spg_quad_choose|spg_quad_config|spg_quad_inner_consistent|spg_quad_leaf_consistent|spg_quad_picksplit|spg_range_quad_choose|spg_range_quad_config|spg_range_quad_inner_consistent|spg_range_quad_leaf_consistent|spg_range_quad_picksplit|spg_text_choose|spg_text_config|spg_text_inner_consistent|spg_text_leaf_consistent|spg_text_picksplit|spgbeginscan|spgbuild|spgbuildempty|spgbulkdelete|spgcanreturn|spgcostestimate|spgendscan|spggetbitmap|spggettuple|spginsert|spgmarkpos|spgoptions|spgrescan|spgrestrpos|spgvacuumcleanup|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|time_smaller|time_transform|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|timestamp_sortsupport|timestamp_transform|timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|to_json|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsrange|tsrange_subdiff|tstzrange|tstzrange_subdiff|tsvector_cmp|tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|upper|upper_inc|upper_inf|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|varbit_recv|varbit_send|varbit_transform|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|varbitlt|varbitne|varbittypmodin|varbittypmodout|varchar_transform|varcharin|varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists\",n=this.createKeywordMapper({\"support.function\":t,keyword:e},\"identifier\",!0),r=[{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"variable.language\",regex:'\".*?\"'},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:n,regex:\"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|~=|~>=~|~>~|~~|~~\\\\*\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}];this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"keyword.statementBegin\",regex:\"[a-zA-Z]+\",next:\"statement\"},{token:\"support.buildin\",regex:\"^\\\\\\\\[\\\\S]+.*$\"}],statement:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentStatement\"},{token:\"statementEnd\",regex:\";\",next:\"start\"},{token:\"string\",regex:\"\\\\$perl\\\\$\",next:\"perl-start\"},{token:\"string\",regex:\"\\\\$python\\\\$\",next:\"python-start\"},{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"json-start\"},{token:\"string\",regex:\"\\\\$(js|javascript)\\\\$\",next:\"javascript-start\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$$\",next:\"dollarSql\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarStatementString\"}].concat(r),dollarSql:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentDollarSql\"},{token:\"string\",regex:\"^\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSqlString\"}].concat(r),comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],commentStatement:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"statement\"},{defaultToken:\"comment\"}],commentDollarSql:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"dollarSql\"},{defaultToken:\"comment\"}],dollarStatementString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\".+\"}],dollarSqlString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSql\"},{token:\"string\",regex:\".+\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.embedRules(u,\"perl-\",[{token:\"string\",regex:\"\\\\$perl\\\\$\",next:\"statement\"}]),this.embedRules(a,\"python-\",[{token:\"string\",regex:\"\\\\$python\\\\$\",next:\"statement\"}]),this.embedRules(f,\"json-\",[{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"statement\"}]),this.embedRules(l,\"javascript-\",[{token:\"string\",regex:\"\\\\$(js|javascript)\\\\$\",next:\"statement\"}])};r.inherits(c,o),t.PgsqlHighlightRules=c}),ace.define(\"ace/mode/pgsql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pgsql_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./pgsql_highlight_rules\").PgsqlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){return e==\"start\"||e==\"keyword.statementEnd\"?\"\":this.$getIndent(t)},this.$id=\"ace/mode/pgsql\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-php.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(){var e=s,t=i.arrayToMap(\"abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|mysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|mysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|mysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|mysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|mysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|mysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|mysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|mysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|mysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|mysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|mysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|mysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|mysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|mysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|mysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|mysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|mysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|mysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type\".split(\"|\")),n=i.arrayToMap(\"abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|public|static|switch|throw|trait|try|use|var|while|xor|yield\".split(\"|\")),r=i.arrayToMap(\"__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset\".split(\"|\")),o=i.arrayToMap(\"true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__\".split(\"|\")),u=i.arrayToMap(\"$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv\".split(\"|\")),a=i.arrayToMap(\"key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase\".split(\"|\")),f=i.arrayToMap(\"cfunction|old_function\".split(\"|\")),l=i.arrayToMap([]);this.$rules={start:[{token:\"comment\",regex:/(?:#|\\/\\/)(?:[^?]|\\?[^>])*/},e.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language\",regex:\"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"},{token:[\"keyword\",\"text\",\"support.class\"],regex:\"\\\\b(new)(\\\\s+)(\\\\w+)\"},{token:[\"support.class\",\"keyword.operator\"],regex:\"\\\\b(\\\\w+)(::)\"},{token:\"constant.language\",regex:\"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"},{token:function(e){return n.hasOwnProperty(e)?\"keyword\":o.hasOwnProperty(e)?\"constant.language\":u.hasOwnProperty(e)?\"variable.language\":l.hasOwnProperty(e)?\"invalid.illegal\":t.hasOwnProperty(e)?\"support.function\":e==\"debugger\"?\"invalid.deprecated\":e.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/)?\"variable\":\"identifier\"},regex:/[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{onMatch:function(e,t,n){e=e.substr(3);if(e[0]==\"'\"||e[0]=='\"')e=e.slice(1,-1);return n.unshift(this.next,e),\"markup.list\"},regex:/<<<(?:\\w+|'\\w+'|\"\\w+\")$/,next:\"heredoc\"},{token:\"keyword.operator\",regex:\"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:/[,;]/},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],heredoc:[{onMatch:function(e,t,n){return n[1]!=e?\"string\":(n.shift(),n.shift(),\"markup.list\")},regex:\"^\\\\w+(?=;?$)\",next:\"start\"},{token:\"string\",regex:\".*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"constant.language.escape\",regex:'\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:\"variable\",regex:/\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/},{token:\"variable\",regex:/\\$\\{[^\"\\}]+\\}?/},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string\",regex:\"'\",next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(a,o);var f=function(){u.call(this);var e=[{token:\"support.php_tag\",regex:\"<\\\\?(?:php|=)?\",push:\"php-start\"}],t=[{token:\"support.php_tag\",regex:\"\\\\?>\",next:\"pop\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(a,\"php-\",t,[\"start\"]),this.normalizeRules()};r.inherits(f,u),t.PhpHighlightRules=f,t.PhpLangHighlightRules=a}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function s(e,t){return e.type.lastIndexOf(t)>-1}var r={abs:[\"int abs(int number)\",\"Return the absolute value of the number\"],acos:[\"float acos(float number)\",\"Return the arc cosine of the number in radians\"],acosh:[\"float acosh(float number)\",\"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"],addGlob:[\"bool addGlob(string pattern[,int flags [, array options]])\",\"Add files matching the glob pattern. See php's glob for the pattern syntax.\"],addPattern:[\"bool addPattern(string pattern[, string path [, array options]])\",\"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"],addcslashes:[\"string addcslashes(string str, string charlist)\",\"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"],addslashes:[\"string addslashes(string str)\",\"Escapes single quote, double quotes and backslash characters in a string with backslashes\"],apache_child_terminate:[\"bool apache_child_terminate(void)\",\"Terminate apache process after this request\"],apache_get_modules:[\"array apache_get_modules(void)\",\"Get a list of loaded Apache modules\"],apache_get_version:[\"string apache_get_version(void)\",\"Fetch Apache version\"],apache_getenv:[\"bool apache_getenv(string variable [, bool walk_to_top])\",\"Get an Apache subprocess_env variable\"],apache_lookup_uri:[\"object apache_lookup_uri(string URI)\",\"Perform a partial request of the given URI to obtain information about it\"],apache_note:[\"string apache_note(string note_name [, string note_value])\",\"Get and set Apache request notes\"],apache_request_auth_name:[\"string apache_request_auth_name()\",\"\"],apache_request_auth_type:[\"string apache_request_auth_type()\",\"\"],apache_request_discard_request_body:[\"long apache_request_discard_request_body()\",\"\"],apache_request_err_headers_out:[\"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all headers that go out in case of an error or a subrequest\"],apache_request_headers:[\"array apache_request_headers(void)\",\"Fetch all HTTP request headers\"],apache_request_headers_in:[\"array apache_request_headers_in()\",\"* fetch all incoming request headers\"],apache_request_headers_out:[\"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all outgoing request headers\"],apache_request_is_initial_req:[\"bool apache_request_is_initial_req()\",\"\"],apache_request_log_error:[\"boolean apache_request_log_error(string message, [long facility])\",\"\"],apache_request_meets_conditions:[\"long apache_request_meets_conditions()\",\"\"],apache_request_remote_host:[\"int apache_request_remote_host([int type])\",\"\"],apache_request_run:[\"long apache_request_run()\",\"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"],apache_request_satisfies:[\"long apache_request_satisfies()\",\"\"],apache_request_server_port:[\"int apache_request_server_port()\",\"\"],apache_request_set_etag:[\"void apache_request_set_etag()\",\"\"],apache_request_set_last_modified:[\"void apache_request_set_last_modified()\",\"\"],apache_request_some_auth_required:[\"bool apache_request_some_auth_required()\",\"\"],apache_request_sub_req_lookup_file:[\"object apache_request_sub_req_lookup_file(string file)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_sub_req_lookup_uri:[\"object apache_request_sub_req_lookup_uri(string uri)\",\"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"],apache_request_sub_req_method_uri:[\"object apache_request_sub_req_method_uri(string method, string uri)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_update_mtime:[\"long apache_request_update_mtime([int dependency_mtime])\",\"\"],apache_reset_timeout:[\"bool apache_reset_timeout(void)\",\"Reset the Apache write timer\"],apache_response_headers:[\"array apache_response_headers(void)\",\"Fetch all HTTP response headers\"],apache_setenv:[\"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\"Set an Apache subprocess_env variable\"],array_change_key_case:[\"array array_change_key_case(array input [, int case=CASE_LOWER])\",\"Retuns an array with all string keys lowercased [or uppercased]\"],array_chunk:[\"array array_chunk(array input, int size [, bool preserve_keys])\",\"Split array into chunks\"],array_combine:[\"array array_combine(array keys, array values)\",\"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"],array_count_values:[\"array array_count_values(array input)\",\"Return the value as key and the frequency of that value in input as value\"],array_diff:[\"array array_diff(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"],array_diff_assoc:[\"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"],array_diff_key:[\"array array_diff_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"],array_diff_uassoc:[\"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"],array_diff_ukey:[\"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"],array_fill:[\"array array_fill(int start_key, int num, mixed val)\",\"Create an array containing num elements starting with index start_key each initialized to val\"],array_fill_keys:[\"array array_fill_keys(array keys, mixed val)\",\"Create an array using the elements of the first parameter as keys each initialized to val\"],array_filter:[\"array array_filter(array input [, mixed callback])\",\"Filters elements from the array via the callback.\"],array_flip:[\"array array_flip(array input)\",\"Return array with key <-> value flipped\"],array_intersect:[\"array array_intersect(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments\"],array_intersect_assoc:[\"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"],array_intersect_key:[\"array array_intersect_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"],array_intersect_uassoc:[\"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"],array_intersect_ukey:[\"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"],array_key_exists:[\"bool array_key_exists(mixed key, array search)\",\"Checks if the given key or index exists in the array\"],array_keys:[\"array array_keys(array input [, mixed search_value[, bool strict]])\",\"Return just the keys from the input array, optionally only for the specified search_value\"],array_map:[\"array array_map(mixed callback, array input1 [, array input2 ,...])\",\"Applies the callback to the elements in given arrays.\"],array_merge:[\"array array_merge(array arr1, array arr2 [, array ...])\",\"Merges elements from passed arrays into one array\"],array_merge_recursive:[\"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\"Recursively merges elements from passed arrays into one array\"],array_multisort:[\"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"],array_pad:[\"array array_pad(array input, int pad_size, mixed pad_value)\",\"Returns a copy of input array padded with pad_value to size pad_size\"],array_pop:[\"mixed array_pop(array stack)\",\"Pops an element off the end of the array\"],array_product:[\"mixed array_product(array input)\",\"Returns the product of the array entries\"],array_push:[\"int array_push(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the end of the array\"],array_rand:[\"mixed array_rand(array input [, int num_req])\",\"Return key/keys for random entry/entries in the array\"],array_reduce:[\"mixed array_reduce(array input, mixed callback [, mixed initial])\",\"Iteratively reduce the array to a single value via the callback.\"],array_replace:[\"array array_replace(array arr1, array arr2 [, array ...])\",\"Replaces elements from passed arrays into one array\"],array_replace_recursive:[\"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\"Recursively replaces elements from passed arrays into one array\"],array_reverse:[\"array array_reverse(array input [, bool preserve keys])\",\"Return input as a new array with the order of the entries reversed\"],array_search:[\"mixed array_search(mixed needle, array haystack [, bool strict])\",\"Searches the array for a given value and returns the corresponding key if successful\"],array_shift:[\"mixed array_shift(array stack)\",\"Pops an element off the beginning of the array\"],array_slice:[\"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\"Returns elements specified by offset and length\"],array_splice:[\"array array_splice(array input, int offset [, int length [, array replacement]])\",\"Removes the elements designated by offset and length and replace them with supplied array\"],array_sum:[\"mixed array_sum(array input)\",\"Returns the sum of the array entries\"],array_udiff:[\"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"],array_udiff_assoc:[\"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"],array_udiff_uassoc:[\"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"],array_uintersect:[\"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"],array_uintersect_assoc:[\"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"],array_uintersect_uassoc:[\"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"],array_unique:[\"array array_unique(array input [, int sort_flags])\",\"Removes duplicate values from array\"],array_unshift:[\"int array_unshift(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the beginning of the array\"],array_values:[\"array array_values(array input)\",\"Return just the values from the input array\"],array_walk:[\"bool array_walk(array input, string funcname [, mixed userdata])\",\"Apply a user function to every member of an array\"],array_walk_recursive:[\"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\"Apply a user function recursively to every member of an array\"],arsort:[\"bool arsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order and maintain index association\"],asin:[\"float asin(float number)\",\"Returns the arc sine of the number in radians\"],asinh:[\"float asinh(float number)\",\"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"],asort:[\"bool asort(array &array_arg [, int sort_flags])\",\"Sort an array and maintain index association\"],assert:[\"int assert(string|bool assertion)\",\"Checks if assertion is false\"],assert_options:[\"mixed assert_options(int what [, mixed value])\",\"Set/get the various assert flags\"],atan:[\"float atan(float number)\",\"Returns the arc tangent of the number in radians\"],atan2:[\"float atan2(float y, float x)\",\"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"],atanh:[\"float atanh(float number)\",\"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"],attachIterator:[\"void attachIterator(Iterator iterator[, mixed info])\",\"Attach a new iterator\"],base64_decode:[\"string base64_decode(string str[, bool strict])\",\"Decodes string using MIME base64 algorithm\"],base64_encode:[\"string base64_encode(string str)\",\"Encodes string using MIME base64 algorithm\"],base_convert:[\"string base_convert(string number, int frombase, int tobase)\",\"Converts a number in a string from any base <= 36 to any base <= 36\"],basename:[\"string basename(string path [, string suffix])\",\"Returns the filename component of the path\"],bcadd:[\"string bcadd(string left_operand, string right_operand [, int scale])\",\"Returns the sum of two arbitrary precision numbers\"],bccomp:[\"int bccomp(string left_operand, string right_operand [, int scale])\",\"Compares two arbitrary precision numbers\"],bcdiv:[\"string bcdiv(string left_operand, string right_operand [, int scale])\",\"Returns the quotient of two arbitrary precision numbers (division)\"],bcmod:[\"string bcmod(string left_operand, string right_operand)\",\"Returns the modulus of the two arbitrary precision operands\"],bcmul:[\"string bcmul(string left_operand, string right_operand [, int scale])\",\"Returns the multiplication of two arbitrary precision numbers\"],bcpow:[\"string bcpow(string x, string y [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another\"],bcpowmod:[\"string bcpowmod(string x, string y, string mod [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"],bcscale:[\"bool bcscale(int scale)\",\"Sets default scale parameter for all bc math functions\"],bcsqrt:[\"string bcsqrt(string operand [, int scale])\",\"Returns the square root of an arbitray precision number\"],bcsub:[\"string bcsub(string left_operand, string right_operand [, int scale])\",\"Returns the difference between two arbitrary precision numbers\"],bin2hex:[\"string bin2hex(string data)\",\"Converts the binary representation of data to hex\"],bind_textdomain_codeset:[\"string bind_textdomain_codeset (string domain, string codeset)\",\"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"],bindec:[\"int bindec(string binary_number)\",\"Returns the decimal equivalent of the binary number\"],bindtextdomain:[\"string bindtextdomain(string domain_name, string dir)\",\"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"],birdstep_autocommit:[\"bool birdstep_autocommit(int index)\",\"\"],birdstep_close:[\"bool birdstep_close(int id)\",\"\"],birdstep_commit:[\"bool birdstep_commit(int index)\",\"\"],birdstep_connect:[\"int birdstep_connect(string server, string user, string pass)\",\"\"],birdstep_exec:[\"int birdstep_exec(int index, string exec_str)\",\"\"],birdstep_fetch:[\"bool birdstep_fetch(int index)\",\"\"],birdstep_fieldname:[\"string birdstep_fieldname(int index, int col)\",\"\"],birdstep_fieldnum:[\"int birdstep_fieldnum(int index)\",\"\"],birdstep_freeresult:[\"bool birdstep_freeresult(int index)\",\"\"],birdstep_off_autocommit:[\"bool birdstep_off_autocommit(int index)\",\"\"],birdstep_result:[\"mixed birdstep_result(int index, mixed col)\",\"\"],birdstep_rollback:[\"bool birdstep_rollback(int index)\",\"\"],bzcompress:[\"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\"Compresses a string into BZip2 encoded data\"],bzdecompress:[\"string bzdecompress(string source [, int small])\",\"Decompresses BZip2 compressed data\"],bzerrno:[\"int bzerrno(resource bz)\",\"Returns the error number\"],bzerror:[\"array bzerror(resource bz)\",\"Returns the error number and error string in an associative array\"],bzerrstr:[\"string bzerrstr(resource bz)\",\"Returns the error string\"],bzopen:[\"resource bzopen(string|int file|fp, string mode)\",\"Opens a new BZip2 stream\"],bzread:[\"string bzread(resource bz[, int length])\",\"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"],cal_days_in_month:[\"int cal_days_in_month(int calendar, int month, int year)\",\"Returns the number of days in a month for a given year and calendar\"],cal_from_jd:[\"array cal_from_jd(int jd, int calendar)\",\"Converts from Julian Day Count to a supported calendar and return extended information\"],cal_info:[\"array cal_info([int calendar])\",\"Returns information about a particular calendar\"],cal_to_jd:[\"int cal_to_jd(int calendar, int month, int day, int year)\",\"Converts from a supported calendar to Julian Day Count\"],call_user_func:[\"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],call_user_func_array:[\"mixed call_user_func_array(string function_name, array parameters)\",\"Call a user function which is the first parameter with the arguments contained in array\"],call_user_method:[\"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\"Call a user method on a specific object or class\"],call_user_method_array:[\"mixed call_user_method_array(string method_name, mixed object, array params)\",\"Call a user method on a specific object or class using a parameter array\"],ceil:[\"float ceil(float number)\",\"Returns the next highest integer value of the number\"],chdir:[\"bool chdir(string directory)\",\"Change the current directory\"],checkdate:[\"bool checkdate(int month, int day, int year)\",\"Returns true(1) if it is a valid date in gregorian calendar\"],chgrp:[\"bool chgrp(string filename, mixed group)\",\"Change file group\"],chmod:[\"bool chmod(string filename, int mode)\",\"Change file mode\"],chown:[\"bool chown (string filename, mixed user)\",\"Change file owner\"],chr:[\"string chr(int ascii)\",\"Converts ASCII code to a character\"],chroot:[\"bool chroot(string directory)\",\"Change root directory\"],chunk_split:[\"string chunk_split(string str [, int chunklen [, string ending]])\",\"Returns split line\"],class_alias:[\"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\"Creates an alias for user defined class\"],class_exists:[\"bool class_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],class_implements:[\"array class_implements(mixed what [, bool autoload ])\",\"Return all classes and interfaces implemented by SPL\"],class_parents:[\"array class_parents(object instance [, boolean autoload = true])\",\"Return an array containing the names of all parent classes\"],clearstatcache:[\"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\"Clear file stat cache\"],closedir:[\"void closedir([resource dir_handle])\",\"Close directory connection identified by the dir_handle\"],closelog:[\"bool closelog(void)\",\"Close connection to system logger\"],collator_asort:[\"bool collator_asort( Collator $coll, array(string) $arr )\",\"* Sort array using specified collator, maintaining index association.\"],collator_compare:[\"int collator_compare( Collator $coll, string $str1, string $str2 )\",\"* Compare two strings.\"],collator_create:[\"Collator collator_create( string $locale )\",\"* Create collator.\"],collator_get_attribute:[\"int collator_get_attribute( Collator $coll, int $attr )\",\"* Get collation attribute value.\"],collator_get_error_code:[\"int collator_get_error_code( Collator $coll )\",\"* Get collator's last error code.\"],collator_get_error_message:[\"string collator_get_error_message( Collator $coll )\",\"* Get text description for collator's last error code.\"],collator_get_locale:[\"string collator_get_locale( Collator $coll, int $type )\",\"* Gets the locale name of the collator.\"],collator_get_sort_key:[\"bool collator_get_sort_key( Collator $coll, string $str )\",\"* Get a sort key for a string from a Collator. }}}\"],collator_get_strength:[\"int collator_get_strength(Collator coll)\",\"* Returns the current collation strength.\"],collator_set_attribute:[\"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\"* Set collation attribute.\"],collator_set_strength:[\"bool collator_set_strength(Collator coll, int strength)\",\"* Set the collation strength.\"],collator_sort:[\"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\"* Sort array using specified collator.\"],collator_sort_with_sort_keys:[\"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"],com_create_guid:[\"string com_create_guid()\",\"Generate a globally unique identifier (GUID)\"],com_event_sink:[\"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\"Connect events from a COM object to a PHP object\"],com_get_active_object:[\"object com_get_active_object(string progid [, int code_page ])\",\"Returns a handle to an already running instance of a COM object\"],com_load_typelib:[\"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\"Loads a Typelibrary and registers its constants\"],com_message_pump:[\"bool com_message_pump([int timeoutms])\",\"Process COM messages, sleeping for up to timeoutms milliseconds\"],com_print_typeinfo:[\"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\"Print out a PHP class definition for a dispatchable interface\"],compact:[\"array compact(mixed var_names [, mixed ...])\",\"Creates a hash containing variables and their values\"],compose_locale:[\"static string compose_locale($array)\",\"* Creates a locale by combining the parts of locale-ID passed  * }}}\"],confirm_extname_compiled:[\"string confirm_extname_compiled(string arg)\",\"Return a string to confirm that the module is compiled in\"],connection_aborted:[\"int connection_aborted(void)\",\"Returns true if client disconnected\"],connection_status:[\"int connection_status(void)\",\"Returns the connection status bitfield\"],constant:[\"mixed constant(string const_name)\",\"Given the name of a constant this function will return the constant's associated value\"],convert_cyr_string:[\"string convert_cyr_string(string str, string from, string to)\",\"Convert from one Cyrillic character set to another\"],convert_uudecode:[\"string convert_uudecode(string data)\",\"decode a uuencoded string\"],convert_uuencode:[\"string convert_uuencode(string data)\",\"uuencode a string\"],copy:[\"bool copy(string source_file, string destination_file [, resource context])\",\"Copy a file\"],cos:[\"float cos(float number)\",\"Returns the cosine of the number in radians\"],cosh:[\"float cosh(float number)\",\"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"],count:[\"int count(mixed var [, int mode])\",\"Count the number of elements in a variable (usually an array)\"],count_chars:[\"mixed count_chars(string input [, int mode])\",\"Returns info about what characters are used in input\"],crc32:[\"string crc32(string str)\",\"Calculate the crc32 polynomial of a string\"],create_function:[\"string create_function(string args, string code)\",\"Creates an anonymous function, and returns its name (funny, eh?)\"],crypt:[\"string crypt(string str [, string salt])\",\"Hash a string\"],ctype_alnum:[\"bool ctype_alnum(mixed c)\",\"Checks for alphanumeric character(s)\"],ctype_alpha:[\"bool ctype_alpha(mixed c)\",\"Checks for alphabetic character(s)\"],ctype_cntrl:[\"bool ctype_cntrl(mixed c)\",\"Checks for control character(s)\"],ctype_digit:[\"bool ctype_digit(mixed c)\",\"Checks for numeric character(s)\"],ctype_graph:[\"bool ctype_graph(mixed c)\",\"Checks for any printable character(s) except space\"],ctype_lower:[\"bool ctype_lower(mixed c)\",\"Checks for lowercase character(s)\"],ctype_print:[\"bool ctype_print(mixed c)\",\"Checks for printable character(s)\"],ctype_punct:[\"bool ctype_punct(mixed c)\",\"Checks for any printable character which is not whitespace or an alphanumeric character\"],ctype_space:[\"bool ctype_space(mixed c)\",\"Checks for whitespace character(s)\"],ctype_upper:[\"bool ctype_upper(mixed c)\",\"Checks for uppercase character(s)\"],ctype_xdigit:[\"bool ctype_xdigit(mixed c)\",\"Checks for character(s) representing a hexadecimal digit\"],curl_close:[\"void curl_close(resource ch)\",\"Close a cURL session\"],curl_copy_handle:[\"resource curl_copy_handle(resource ch)\",\"Copy a cURL handle along with all of it's preferences\"],curl_errno:[\"int curl_errno(resource ch)\",\"Return an integer containing the last error number\"],curl_error:[\"string curl_error(resource ch)\",\"Return a string contain the last error for the current session\"],curl_exec:[\"bool curl_exec(resource ch)\",\"Perform a cURL session\"],curl_getinfo:[\"mixed curl_getinfo(resource ch [, int option])\",\"Get information regarding a specific transfer\"],curl_init:[\"resource curl_init([string url])\",\"Initialize a cURL session\"],curl_multi_add_handle:[\"int curl_multi_add_handle(resource mh, resource ch)\",\"Add a normal cURL handle to a cURL multi handle\"],curl_multi_close:[\"void curl_multi_close(resource mh)\",\"Close a set of cURL handles\"],curl_multi_exec:[\"int curl_multi_exec(resource mh, int &still_running)\",\"Run the sub-connections of the current cURL handle\"],curl_multi_getcontent:[\"string curl_multi_getcontent(resource ch)\",\"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"],curl_multi_info_read:[\"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\"Get information about the current transfers\"],curl_multi_init:[\"resource curl_multi_init(void)\",\"Returns a new cURL multi handle\"],curl_multi_remove_handle:[\"int curl_multi_remove_handle(resource mh, resource ch)\",\"Remove a multi handle from a set of cURL handles\"],curl_multi_select:[\"int curl_multi_select(resource mh[, double timeout])\",'Get all the sockets associated with the cURL extension, which can then be \"selected\"'],curl_setopt:[\"bool curl_setopt(resource ch, int option, mixed value)\",\"Set an option for a cURL transfer\"],curl_setopt_array:[\"bool curl_setopt_array(resource ch, array options)\",\"Set an array of option for a cURL transfer\"],curl_version:[\"array curl_version([int version])\",\"Return cURL version information.\"],current:[\"mixed current(array array_arg)\",\"Return the element currently pointed to by the internal array pointer\"],date:[\"string date(string format [, long timestamp])\",\"Format a local date/time\"],date_add:[\"DateTime date_add(DateTime object, DateInterval interval)\",\"Adds an interval to the current date in object.\"],date_create:[\"DateTime date_create([string time[, DateTimeZone object]])\",\"Returns new DateTime object\"],date_create_from_format:[\"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\"Returns new DateTime object formatted according to the specified format\"],date_date_set:[\"DateTime date_date_set(DateTime object, long year, long month, long day)\",\"Sets the date.\"],date_default_timezone_get:[\"string date_default_timezone_get()\",\"Gets the default timezone used by all date/time functions in a script\"],date_default_timezone_set:[\"bool date_default_timezone_set(string timezone_identifier)\",\"Sets the default timezone used by all date/time functions in a script\"],date_diff:[\"DateInterval date_diff(DateTime object [, bool absolute])\",\"Returns the difference between two DateTime objects.\"],date_format:[\"string date_format(DateTime object, string format)\",\"Returns date formatted according to given format\"],date_get_last_errors:[\"array date_get_last_errors()\",\"Returns the warnings and errors found while parsing a date/time string.\"],date_interval_create_from_date_string:[\"DateInterval date_interval_create_from_date_string(string time)\",\"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"],date_interval_format:[\"string date_interval_format(DateInterval object, string format)\",\"Formats the interval.\"],date_isodate_set:[\"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\"Sets the ISO date.\"],date_modify:[\"DateTime date_modify(DateTime object, string modify)\",\"Alters the timestamp.\"],date_offset_get:[\"long date_offset_get(DateTime object)\",\"Returns the DST offset.\"],date_parse:[\"array date_parse(string date)\",\"Returns associative array with detailed info about given date\"],date_parse_from_format:[\"array date_parse_from_format(string format, string date)\",\"Returns associative array with detailed info about given date\"],date_sub:[\"DateTime date_sub(DateTime object, DateInterval interval)\",\"Subtracts an interval to the current date in object.\"],date_sun_info:[\"array date_sun_info(long time, float latitude, float longitude)\",\"Returns an array with information about sun set/rise and twilight begin/end\"],date_sunrise:[\"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunrise for a given day and location\"],date_sunset:[\"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunset for a given day and location\"],date_time_set:[\"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\"Sets the time.\"],date_timestamp_get:[\"long date_timestamp_get(DateTime object)\",\"Gets the Unix timestamp.\"],date_timestamp_set:[\"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\"Sets the date and time based on an Unix timestamp.\"],date_timezone_get:[\"DateTimeZone date_timezone_get(DateTime object)\",\"Return new DateTimeZone object relative to give DateTime\"],date_timezone_set:[\"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\"Sets the timezone for the DateTime object.\"],datefmt_create:[\"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\"* Create formatter.\"],datefmt_format:[\"string datefmt_format( [mixed]int $args or array $args )\",\"* Format the time value as a string. }}}\"],datefmt_get_calendar:[\"string datefmt_get_calendar( IntlDateFormatter $mf )\",\"* Get formatter calendar.\"],datefmt_get_datetype:[\"string datefmt_get_datetype( IntlDateFormatter $mf )\",\"* Get formatter datetype.\"],datefmt_get_error_code:[\"int datefmt_get_error_code( IntlDateFormatter $nf )\",\"* Get formatter's last error code.\"],datefmt_get_error_message:[\"string datefmt_get_error_message( IntlDateFormatter $coll )\",\"* Get text description for formatter's last error code.\"],datefmt_get_locale:[\"string datefmt_get_locale(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_get_pattern:[\"string datefmt_get_pattern( IntlDateFormatter $mf )\",\"* Get formatter pattern.\"],datefmt_get_timetype:[\"string datefmt_get_timetype( IntlDateFormatter $mf )\",\"* Get formatter timetype.\"],datefmt_get_timezone_id:[\"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\"* Get formatter timezone_id.\"],datefmt_isLenient:[\"string datefmt_isLenient(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_localtime:[\"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\"* Parse the string $value to a localtime array  }}}\"],datefmt_parse:[\"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"],datefmt_setLenient:[\"string datefmt_setLenient(IntlDateFormatter $mf)\",\"* Set formatter lenient.\"],datefmt_set_calendar:[\"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\"* Set formatter calendar.\"],datefmt_set_pattern:[\"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],datefmt_set_timezone_id:[\"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\"* Set formatter timezone_id.\"],dba_close:[\"void dba_close(resource handle)\",\"Closes database\"],dba_delete:[\"bool dba_delete(string key, resource handle)\",\"Deletes the entry associated with key    If inifile: remove all other key lines\"],dba_exists:[\"bool dba_exists(string key, resource handle)\",\"Checks, if the specified key exists\"],dba_fetch:[\"string dba_fetch(string key, [int skip ,] resource handle)\",\"Fetches the data associated with key\"],dba_firstkey:[\"string dba_firstkey(resource handle)\",\"Resets the internal key pointer and returns the first key\"],dba_handlers:[\"array dba_handlers([bool full_info])\",\"List configured database handlers\"],dba_insert:[\"bool dba_insert(string key, string value, resource handle)\",\"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"],dba_key_split:[\"array|false dba_key_split(string key)\",\"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"],dba_list:[\"array dba_list()\",\"List opened databases\"],dba_nextkey:[\"string dba_nextkey(resource handle)\",\"Returns the next key\"],dba_open:[\"resource dba_open(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode\"],dba_optimize:[\"bool dba_optimize(resource handle)\",\"Optimizes (e.g. clean up, vacuum) database\"],dba_popen:[\"resource dba_popen(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode persistently\"],dba_replace:[\"bool dba_replace(string key, string value, resource handle)\",\"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"],dba_sync:[\"bool dba_sync(resource handle)\",\"Synchronizes database\"],dcgettext:[\"string dcgettext(string domain_name, string msgid, long category)\",\"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"],dcngettext:[\"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\"Plural version of dcgettext()\"],debug_backtrace:[\"array debug_backtrace([bool provide_object])\",\"Return backtrace as array\"],debug_print_backtrace:[\"void debug_print_backtrace(void) */\",\"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);\",\"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"],dom_document_relaxNG_validate_xml:[\"boolean dom_document_relaxNG_validate_xml(string source); */\",\"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"],dom_document_rename_node:[\"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"],dom_document_save:[\"int dom_document_save(string file);\",\"Convenience method to save to file\"],dom_document_save_html:[\"string dom_document_save_html();\",\"Convenience method to output as html\"],dom_document_save_html_file:[\"int dom_document_save_html_file(string file);\",\"Convenience method to save to file as html\"],dom_document_savexml:[\"string dom_document_savexml([node n]);\",\"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"],dom_document_schema_validate:[\"boolean dom_document_schema_validate(string source); */\",\"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"],dom_document_schema_validate_file:[\"boolean dom_document_schema_validate_file(string filename); */\",\"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"],dom_document_validate:[\"boolean dom_document_validate();\",\"Since: DOM extended\"],dom_document_xinclude:[\"int dom_document_xinclude([int options])\",\"Substitutues xincludes in a DomDocument\"],dom_domconfiguration_can_set_parameter:[\"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"],dom_domconfiguration_get_parameter:[\"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"],dom_domconfiguration_set_parameter:[\"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"],dom_domerrorhandler_handle_error:[\"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"],dom_domimplementation_create_document:[\"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"],dom_domimplementation_create_document_type:[\"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"],dom_domimplementation_get_feature:[\"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"],dom_domimplementation_has_feature:[\"boolean dom_domimplementation_has_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"],dom_domimplementationlist_item:[\"domdomimplementation dom_domimplementationlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"],dom_domimplementationsource_get_domimplementation:[\"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"],dom_domimplementationsource_get_domimplementations:[\"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"],dom_domstringlist_item:[\"domstring dom_domstringlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"],dom_element_get_attribute:[\"string dom_element_get_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"],dom_element_get_attribute_node:[\"DOMAttr dom_element_get_attribute_node(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"],dom_element_get_attribute_node_ns:[\"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"],dom_element_get_attribute_ns:[\"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"],dom_element_get_elements_by_tag_name:[\"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"],dom_element_get_elements_by_tag_name_ns:[\"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"],dom_element_has_attribute:[\"boolean dom_element_has_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"],dom_element_has_attribute_ns:[\"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"],dom_element_remove_attribute:[\"void dom_element_remove_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"],dom_element_remove_attribute_node:[\"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"],dom_element_remove_attribute_ns:[\"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"],dom_element_set_attribute:[\"void dom_element_set_attribute(string name, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"],dom_element_set_attribute_node:[\"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"],dom_element_set_attribute_node_ns:[\"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"],dom_element_set_attribute_ns:[\"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"],dom_element_set_id_attribute:[\"void dom_element_set_id_attribute(string name, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"],dom_element_set_id_attribute_node:[\"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"],dom_element_set_id_attribute_ns:[\"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"],dom_import_simplexml:[\"somNode dom_import_simplexml(sxeobject node)\",\"Get a simplexml_element object from dom to allow for processing\"],dom_namednodemap_get_named_item:[\"DOMNode dom_namednodemap_get_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"],dom_namednodemap_get_named_item_ns:[\"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"],dom_namednodemap_item:[\"DOMNode dom_namednodemap_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"],dom_namednodemap_remove_named_item:[\"DOMNode dom_namednodemap_remove_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"],dom_namednodemap_remove_named_item_ns:[\"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"],dom_namednodemap_set_named_item:[\"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"],dom_namednodemap_set_named_item_ns:[\"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"],dom_namelist_get_name:[\"string dom_namelist_get_name(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"],dom_namelist_get_namespace_uri:[\"string dom_namelist_get_namespace_uri(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"],dom_node_append_child:[\"DomNode dom_node_append_child(DomNode newChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"],dom_node_clone_node:[\"DomNode dom_node_clone_node(boolean deep);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"],dom_node_compare_document_position:[\"short dom_node_compare_document_position(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"],dom_node_get_feature:[\"DomNode dom_node_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"],dom_node_get_user_data:[\"mixed dom_node_get_user_data(string key);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"],dom_node_has_attributes:[\"boolean dom_node_has_attributes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"],dom_node_has_child_nodes:[\"boolean dom_node_has_child_nodes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"],dom_node_insert_before:[\"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"],dom_node_is_default_namespace:[\"boolean dom_node_is_default_namespace(string namespaceURI);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"],dom_node_is_equal_node:[\"boolean dom_node_is_equal_node(DomNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"],dom_node_is_same_node:[\"boolean dom_node_is_same_node(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"],dom_node_is_supported:[\"boolean dom_node_is_supported(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"],dom_node_lookup_namespace_uri:[\"string dom_node_lookup_namespace_uri(string prefix);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"],dom_node_lookup_prefix:[\"string dom_node_lookup_prefix(string namespaceURI);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"],dom_node_normalize:[\"void dom_node_normalize();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"],dom_node_remove_child:[\"DomNode dom_node_remove_child(DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"],dom_node_replace_child:[\"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"],dom_node_set_user_data:[\"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"],dom_nodelist_item:[\"DOMNode dom_nodelist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"],dom_string_extend_find_offset16:[\"int dom_string_extend_find_offset16(int offset32);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"],dom_string_extend_find_offset32:[\"int dom_string_extend_find_offset32(int offset16);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"],dom_text_is_whitespace_in_element_content:[\"boolean dom_text_is_whitespace_in_element_content();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"],dom_text_replace_whole_text:[\"DOMText dom_text_replace_whole_text(string content);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"],dom_text_split_text:[\"DOMText dom_text_split_text(int offset);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"],dom_userdatahandler_handle:[\"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"],dom_xpath_evaluate:[\"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"],dom_xpath_query:[\"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"],dom_xpath_register_ns:[\"boolean dom_xpath_register_ns(string prefix, string uri); */\",'PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Oss\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid XPath Context\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}'],dom_xpath_register_php_functions:[\"void dom_xpath_register_php_functions() */\",'PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"a\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions'],each:[\"array each(array arr)\",\"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"],easter_date:[\"int easter_date([int year])\",\"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"],easter_days:[\"int easter_days([int year, [int method]])\",\"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"],echo:[\"void echo(string arg1 [, string ...])\",\"Output one or more strings\"],empty:[\"bool empty( mixed var )\",\"Determine whether a variable is empty\"],enchant_broker_describe:[\"array enchant_broker_describe(resource broker)\",\"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"],enchant_broker_dict_exists:[\"bool enchant_broker_dict_exists(resource broker, string tag)\",\"Whether a dictionary exists or not. Using non-empty tag\"],enchant_broker_free:[\"boolean enchant_broker_free(resource broker)\",\"Destroys the broker object and its dictionnaries\"],enchant_broker_free_dict:[\"resource enchant_broker_free_dict(resource dict)\",\"Free the dictionary resource\"],enchant_broker_get_dict_path:[\"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\"Get the directory path for a given backend, works with ispell and myspell\"],enchant_broker_get_error:[\"string enchant_broker_get_error(resource broker)\",\"Returns the last error of the broker\"],enchant_broker_init:[\"resource enchant_broker_init()\",\"create a new broker object capable of requesting\"],enchant_broker_list_dicts:[\"string enchant_broker_list_dicts(resource broker)\",\"Lists the dictionaries available for the given broker\"],enchant_broker_request_dict:[\"resource enchant_broker_request_dict(resource broker, string tag)\",'create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\"en_US\", \"de_DE\", ...)'],enchant_broker_request_pwl_dict:[\"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"],enchant_broker_set_dict_path:[\"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\"Set the directory path for a given backend, works with ispell and myspell\"],enchant_broker_set_ordering:[\"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"],enchant_dict_add_to_personal:[\"void enchant_dict_add_to_personal(resource dict, string word)\",\"add 'word' to personal word list\"],enchant_dict_add_to_session:[\"void enchant_dict_add_to_session(resource dict, string word)\",\"add 'word' to this spell-checking session\"],enchant_dict_check:[\"bool enchant_dict_check(resource dict, string word)\",\"If the word is correctly spelled return true, otherwise return false\"],enchant_dict_describe:[\"array enchant_dict_describe(resource dict)\",\"Describes an individual dictionary 'dict'\"],enchant_dict_get_error:[\"string enchant_dict_get_error(resource dict)\",\"Returns the last error of the current spelling-session\"],enchant_dict_is_in_session:[\"bool enchant_dict_is_in_session(resource dict, string word)\",\"whether or not 'word' exists in this spelling-session\"],enchant_dict_quick_check:[\"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"],enchant_dict_store_replacement:[\"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"],enchant_dict_suggest:[\"array enchant_dict_suggest(resource dict, string word)\",\"Will return a list of values if any of those pre-conditions are not met.\"],end:[\"mixed end(array array_arg)\",\"Advances array argument's internal pointer to the last element and return it\"],ereg:[\"int ereg(string pattern, string string [, array registers])\",\"Regular expression match\"],ereg_replace:[\"string ereg_replace(string pattern, string replacement, string string)\",\"Replace regular expression\"],eregi:[\"int eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match\"],eregi_replace:[\"string eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression\"],error_get_last:[\"array error_get_last()\",\"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"],error_log:[\"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\"Send an error message somewhere\"],error_reporting:[\"int error_reporting([int new_error_level])\",\"Return the current error_reporting level, and if an argument was passed - change to the new level\"],escapeshellarg:[\"string escapeshellarg(string arg)\",\"Quote and escape an argument for use in a shell command\"],escapeshellcmd:[\"string escapeshellcmd(string command)\",\"Escape shell metacharacters\"],exec:[\"string exec(string command [, array &output [, int &return_value]])\",\"Execute an external program\"],exif_imagetype:[\"int exif_imagetype(string imagefile)\",\"Get the type of an image\"],exif_read_data:[\"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"],exif_tagname:[\"string exif_tagname(index)\",\"Get headername for index or false if not defined\"],exif_thumbnail:[\"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\"Reads the embedded thumbnail\"],exit:[\"void exit([mixed status])\",\"Output a message and terminate the current script\"],exp:[\"float exp(float number)\",\"Returns e raised to the power of the number\"],explode:[\"array explode(string separator, string str [, int limit])\",\"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"],expm1:[\"float expm1(float number)\",\"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"],extension_loaded:[\"bool extension_loaded(string extension_name)\",\"Returns true if the named extension is loaded\"],extract:[\"int extract(array var_array [, int extract_type [, string prefix]])\",\"Imports variables into symbol table from an array\"],ezmlm_hash:[\"int ezmlm_hash(string addr)\",\"Calculate EZMLM list hash value.\"],fclose:[\"bool fclose(resource fp)\",\"Close an open file pointer\"],feof:[\"bool feof(resource fp)\",\"Test for end-of-file on a file pointer\"],fflush:[\"bool fflush(resource fp)\",\"Flushes output\"],fgetc:[\"string fgetc(resource fp)\",\"Get a character from file pointer\"],fgetcsv:[\"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\"Get line from file pointer and parse for CSV fields\"],fgets:[\"string fgets(resource fp[, int length])\",\"Get a line from file pointer\"],fgetss:[\"string fgetss(resource fp [, int length [, string allowable_tags]])\",\"Get a line from file pointer and strip HTML tags\"],file:[\"array file(string filename [, int flags[, resource context]])\",\"Read entire file into an array\"],file_exists:[\"bool file_exists(string filename)\",\"Returns true if filename exists\"],file_get_contents:[\"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\"Read the entire file into a string\"],file_put_contents:[\"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\"Write/Create a file with contents data and return the number of bytes written\"],fileatime:[\"int fileatime(string filename)\",\"Get last access time of file\"],filectime:[\"int filectime(string filename)\",\"Get inode modification time of file\"],filegroup:[\"int filegroup(string filename)\",\"Get file group\"],fileinode:[\"int fileinode(string filename)\",\"Get file inode\"],filemtime:[\"int filemtime(string filename)\",\"Get last modification time of file\"],fileowner:[\"int fileowner(string filename)\",\"Get file owner\"],fileperms:[\"int fileperms(string filename)\",\"Get file permissions\"],filesize:[\"int filesize(string filename)\",\"Get file size\"],filetype:[\"string filetype(string filename)\",\"Get file type\"],filter_has_var:[\"mixed filter_has_var(constant type, string variable_name)\",\"* Returns true if the variable with the name 'name' exists in source.\"],filter_input:[\"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\"* Returns the filtered variable 'name'* from source `type`.\"],filter_input_array:[\"mixed filter_input_array(constant type, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],filter_var:[\"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\"* Returns the filtered version of the vriable.\"],filter_var_array:[\"mixed filter_var_array(array data, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],finfo_buffer:[\"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\"Return infromation about a string buffer.\"],finfo_close:[\"resource finfo_close(resource finfo)\",\"Close fileinfo resource.\"],finfo_file:[\"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\"Return information about a file.\"],finfo_open:[\"resource finfo_open([int options [, string arg]])\",\"Create a new fileinfo resource.\"],finfo_set_flags:[\"bool finfo_set_flags(resource finfo, int options)\",\"Set libmagic configuration options.\"],floatval:[\"float floatval(mixed var)\",\"Get the float value of a variable\"],flock:[\"bool flock(resource fp, int operation [, int &wouldblock])\",\"Portable file locking\"],floor:[\"float floor(float number)\",\"Returns the next lowest integer value from the number\"],flush:[\"void flush(void)\",\"Flush the output buffer\"],fmod:[\"float fmod(float x, float y)\",\"Returns the remainder of dividing x by y as a float\"],fnmatch:[\"bool fnmatch(string pattern, string filename [, int flags])\",\"Match filename against pattern\"],fopen:[\"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\"Open a file or a URL and return a file pointer\"],forward_static_call:[\"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],fpassthru:[\"int fpassthru(resource fp)\",\"Output all remaining data from a file pointer\"],fprintf:[\"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string into a stream\"],fputcsv:[\"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\"Format line as CSV and write to file pointer\"],fread:[\"string fread(resource fp, int length)\",\"Binary-safe file read\"],frenchtojd:[\"int frenchtojd(int month, int day, int year)\",\"Converts a french republic calendar date to julian day count\"],fscanf:[\"mixed fscanf(resource stream, string format [, string ...])\",\"Implements a mostly ANSI compatible fscanf()\"],fseek:[\"int fseek(resource fp, int offset [, int whence])\",\"Seek on a file pointer\"],fsockopen:[\"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open Internet or Unix domain socket connection\"],fstat:[\"array fstat(resource fp)\",\"Stat() on a filehandle\"],ftell:[\"int ftell(resource fp)\",\"Get file pointer's read/write position\"],ftok:[\"int ftok(string pathname, string proj)\",\"Convert a pathname and a project identifier to a System V IPC key\"],ftp_alloc:[\"bool ftp_alloc(resource stream, int size[, &response])\",\"Attempt to allocate space on the remote FTP server\"],ftp_cdup:[\"bool ftp_cdup(resource stream)\",\"Changes to the parent directory\"],ftp_chdir:[\"bool ftp_chdir(resource stream, string directory)\",\"Changes directories\"],ftp_chmod:[\"int ftp_chmod(resource stream, int mode, string filename)\",\"Sets permissions on a file\"],ftp_close:[\"bool ftp_close(resource stream)\",\"Closes the FTP stream\"],ftp_connect:[\"resource ftp_connect(string host [, int port [, int timeout]])\",\"Opens a FTP stream\"],ftp_delete:[\"bool ftp_delete(resource stream, string file)\",\"Deletes a file\"],ftp_exec:[\"bool ftp_exec(resource stream, string command)\",\"Requests execution of a program on the FTP server\"],ftp_fget:[\"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server and writes it to an open file\"],ftp_fput:[\"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server\"],ftp_get:[\"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server and writes it to a local file\"],ftp_get_option:[\"mixed ftp_get_option(resource stream, int option)\",\"Gets an FTP option\"],ftp_login:[\"bool ftp_login(resource stream, string username, string password)\",\"Logs into the FTP server\"],ftp_mdtm:[\"int ftp_mdtm(resource stream, string filename)\",\"Returns the last modification time of the file, or -1 on error\"],ftp_mkdir:[\"string ftp_mkdir(resource stream, string directory)\",\"Creates a directory and returns the absolute path for the new directory or false on error\"],ftp_nb_continue:[\"int ftp_nb_continue(resource stream)\",\"Continues retrieving/sending a file nbronously\"],ftp_nb_fget:[\"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server asynchronly and writes it to an open file\"],ftp_nb_fput:[\"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server nbronly\"],ftp_nb_get:[\"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server nbhronly and writes it to a local file\"],ftp_nb_put:[\"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_nlist:[\"array ftp_nlist(resource stream, string directory)\",\"Returns an array of filenames in the given directory\"],ftp_pasv:[\"bool ftp_pasv(resource stream, bool pasv)\",\"Turns passive mode on or off\"],ftp_put:[\"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_pwd:[\"string ftp_pwd(resource stream)\",\"Returns the present working directory\"],ftp_raw:[\"array ftp_raw(resource stream, string command)\",\"Sends a literal command to the FTP server\"],ftp_rawlist:[\"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\"Returns a detailed listing of a directory as an array of output lines\"],ftp_rename:[\"bool ftp_rename(resource stream, string src, string dest)\",\"Renames the given file to a new path\"],ftp_rmdir:[\"bool ftp_rmdir(resource stream, string directory)\",\"Removes a directory\"],ftp_set_option:[\"bool ftp_set_option(resource stream, int option, mixed value)\",\"Sets an FTP option\"],ftp_site:[\"bool ftp_site(resource stream, string cmd)\",\"Sends a SITE command to the server\"],ftp_size:[\"int ftp_size(resource stream, string filename)\",\"Returns the size of the file, or -1 on error\"],ftp_ssl_connect:[\"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\"Opens a FTP-SSL stream\"],ftp_systype:[\"string ftp_systype(resource stream)\",\"Returns the system type identifier\"],ftruncate:[\"bool ftruncate(resource fp, int size)\",\"Truncate file to 'size' length\"],func_get_arg:[\"mixed func_get_arg(int arg_num)\",\"Get the $arg_num'th argument that was passed to the function\"],func_get_args:[\"array func_get_args()\",\"Get an array of the arguments that were passed to the function\"],func_num_args:[\"int func_num_args(void)\",\"Get the number of arguments that were passed to the function\"],\"function \":[\"\",\"\"],\"foreach \":[\"\",\"\"],function_exists:[\"bool function_exists(string function_name)\",\"Checks if the function exists\"],fwrite:[\"int fwrite(resource fp, string str [, int length])\",\"Binary-safe file write\"],gc_collect_cycles:[\"int gc_collect_cycles(void)\",\"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"],gc_disable:[\"void gc_disable(void)\",\"Deactivates the circular reference collector\"],gc_enable:[\"void gc_enable(void)\",\"Activates the circular reference collector\"],gc_enabled:[\"void gc_enabled(void)\",\"Returns status of the circular reference collector\"],gd_info:[\"array gd_info()\",\"\"],getKeywords:[\"static array getKeywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"],get_browser:[\"mixed get_browser([string browser_name [, bool return_array]])\",\"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"],get_called_class:[\"string get_called_class()\",'Retrieves the \"Late Static Binding\" class name'],get_cfg_var:[\"mixed get_cfg_var(string option_name)\",\"Get the value of a PHP configuration option\"],get_class:[\"string get_class([object object])\",\"Retrieves the class name\"],get_class_methods:[\"array get_class_methods(mixed class)\",\"Returns an array of method names for class or class instance.\"],get_class_vars:[\"array get_class_vars(string class_name)\",\"Returns an array of default properties of the class.\"],get_current_user:[\"string get_current_user(void)\",\"Get the name of the owner of the current PHP script\"],get_declared_classes:[\"array get_declared_classes()\",\"Returns an array of all declared classes.\"],get_declared_interfaces:[\"array get_declared_interfaces()\",\"Returns an array of all declared interfaces.\"],get_defined_constants:[\"array get_defined_constants([bool categorize])\",\"Return an array containing the names and values of all defined constants\"],get_defined_functions:[\"array get_defined_functions(void)\",\"Returns an array of all defined functions\"],get_defined_vars:[\"array get_defined_vars(void)\",\"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"],get_display_language:[\"static string get_display_language($locale[, $in_locale = null])\",\"* gets the language for the $locale in $in_locale or default_locale\"],get_display_name:[\"static string get_display_name($locale[, $in_locale = null])\",\"* gets the name for the $locale in $in_locale or default_locale\"],get_display_region:[\"static string get_display_region($locale, $in_locale = null)\",\"* gets the region for the $locale in $in_locale or default_locale\"],get_display_script:[\"static string get_display_script($locale, $in_locale = null)\",\"* gets the script for the $locale in $in_locale or default_locale\"],get_extension_funcs:[\"array get_extension_funcs(string extension_name)\",\"Returns an array with the names of functions belonging to the named extension\"],get_headers:[\"array get_headers(string url[, int format])\",\"fetches all the headers sent by the server in response to a HTTP request\"],get_html_translation_table:[\"array get_html_translation_table([int table [, int quote_style]])\",\"Returns the internal translation table used by htmlspecialchars and htmlentities\"],get_include_path:[\"string get_include_path()\",\"Get the current include_path configuration option\"],get_included_files:[\"array get_included_files(void)\",\"Returns an array with the file names that were include_once()'d\"],get_loaded_extensions:[\"array get_loaded_extensions([bool zend_extensions])\",\"Return an array containing names of loaded extensions\"],get_magic_quotes_gpc:[\"int get_magic_quotes_gpc(void)\",\"Get the current active configuration setting of magic_quotes_gpc\"],get_magic_quotes_runtime:[\"int get_magic_quotes_runtime(void)\",\"Get the current active configuration setting of magic_quotes_runtime\"],get_meta_tags:[\"array get_meta_tags(string filename [, bool use_include_path])\",\"Extracts all meta tag content attributes from a file and returns an array\"],get_object_vars:[\"array get_object_vars(object obj)\",\"Returns an array of object properties\"],get_parent_class:[\"string get_parent_class([mixed object])\",\"Retrieves the parent class name for object or class or current scope.\"],get_resource_type:[\"string get_resource_type(resource res)\",\"Get the resource type name for a given resource\"],getallheaders:[\"array getallheaders(void)\",\"\"],getcwd:[\"mixed getcwd(void)\",\"Gets the current directory\"],getdate:[\"array getdate([int timestamp])\",\"Get date/time information\"],getenv:[\"string getenv(string varname)\",\"Get the value of an environment variable\"],gethostbyaddr:[\"string gethostbyaddr(string ip_address)\",\"Get the Internet host name corresponding to a given IP address\"],gethostbyname:[\"string gethostbyname(string hostname)\",\"Get the IP address corresponding to a given Internet host name\"],gethostbynamel:[\"array gethostbynamel(string hostname)\",\"Return a list of IP addresses that a given hostname resolves to.\"],gethostname:[\"string gethostname()\",\"Get the host name of the current machine\"],getimagesize:[\"array getimagesize(string imagefile [, array info])\",\"Get the size of an image as 4-element array\"],getlastmod:[\"int getlastmod(void)\",\"Get time of last page modification\"],getmygid:[\"int getmygid(void)\",\"Get PHP script owner's GID\"],getmyinode:[\"int getmyinode(void)\",\"Get the inode of the current script being parsed\"],getmypid:[\"int getmypid(void)\",\"Get current process ID\"],getmyuid:[\"int getmyuid(void)\",\"Get PHP script owner's UID\"],getopt:[\"array getopt(string options [, array longopts])\",\"Get options from the command line argument list\"],getprotobyname:[\"int getprotobyname(string name)\",\"Returns protocol number associated with name as per /etc/protocols\"],getprotobynumber:[\"string getprotobynumber(int proto)\",\"Returns protocol name associated with protocol number proto\"],getrandmax:[\"int getrandmax(void)\",\"Returns the maximum value a random number can have\"],getrusage:[\"array getrusage([int who])\",\"Returns an array of usage statistics\"],getservbyname:[\"int getservbyname(string service, string protocol)\",'Returns port associated with service. Protocol must be \"tcp\" or \"udp\"'],getservbyport:[\"string getservbyport(int port, string protocol)\",'Returns service name associated with port. Protocol must be \"tcp\" or \"udp\"'],gettext:[\"string gettext(string msgid)\",\"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"],gettimeofday:[\"array gettimeofday([bool get_as_float])\",\"Returns the current time as array\"],gettype:[\"string gettype(mixed var)\",\"Returns the type of the variable\"],glob:[\"array glob(string pattern [, int flags])\",\"Find pathnames matching a pattern\"],gmdate:[\"string gmdate(string format [, long timestamp])\",\"Format a GMT date/time\"],gmmktime:[\"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a GMT date\"],gmp_abs:[\"resource gmp_abs(resource a)\",\"Calculates absolute value\"],gmp_add:[\"resource gmp_add(resource a, resource b)\",\"Add a and b\"],gmp_and:[\"resource gmp_and(resource a, resource b)\",\"Calculates logical AND of a and b\"],gmp_clrbit:[\"void gmp_clrbit(resource &a, int index)\",\"Clears bit in a\"],gmp_cmp:[\"int gmp_cmp(resource a, resource b)\",\"Compares two numbers\"],gmp_com:[\"resource gmp_com(resource a)\",\"Calculates one's complement of a\"],gmp_div_q:[\"resource gmp_div_q(resource a, resource b [, int round])\",\"Divide a by b, returns quotient only\"],gmp_div_qr:[\"array gmp_div_qr(resource a, resource b [, int round])\",\"Divide a by b, returns quotient and reminder\"],gmp_div_r:[\"resource gmp_div_r(resource a, resource b [, int round])\",\"Divide a by b, returns reminder only\"],gmp_divexact:[\"resource gmp_divexact(resource a, resource b)\",\"Divide a by b using exact division algorithm\"],gmp_fact:[\"resource gmp_fact(int a)\",\"Calculates factorial function\"],gmp_gcd:[\"resource gmp_gcd(resource a, resource b)\",\"Computes greatest common denominator (gcd) of a and b\"],gmp_gcdext:[\"array gmp_gcdext(resource a, resource b)\",\"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"],gmp_hamdist:[\"int gmp_hamdist(resource a, resource b)\",\"Calculates hamming distance between a and b\"],gmp_init:[\"resource gmp_init(mixed number [, int base])\",\"Initializes GMP number\"],gmp_intval:[\"int gmp_intval(resource gmpnumber)\",\"Gets signed long value of GMP number\"],gmp_invert:[\"resource gmp_invert(resource a, resource b)\",\"Computes the inverse of a modulo b\"],gmp_jacobi:[\"int gmp_jacobi(resource a, resource b)\",\"Computes Jacobi symbol\"],gmp_legendre:[\"int gmp_legendre(resource a, resource b)\",\"Computes Legendre symbol\"],gmp_mod:[\"resource gmp_mod(resource a, resource b)\",\"Computes a modulo b\"],gmp_mul:[\"resource gmp_mul(resource a, resource b)\",\"Multiply a and b\"],gmp_neg:[\"resource gmp_neg(resource a)\",\"Negates a number\"],gmp_nextprime:[\"resource gmp_nextprime(resource a)\",\"Finds next prime of a\"],gmp_or:[\"resource gmp_or(resource a, resource b)\",\"Calculates logical OR of a and b\"],gmp_perfect_square:[\"bool gmp_perfect_square(resource a)\",\"Checks if a is an exact square\"],gmp_popcount:[\"int gmp_popcount(resource a)\",\"Calculates the population count of a\"],gmp_pow:[\"resource gmp_pow(resource base, int exp)\",\"Raise base to power exp\"],gmp_powm:[\"resource gmp_powm(resource base, resource exp, resource mod)\",\"Raise base to power exp and take result modulo mod\"],gmp_prob_prime:[\"int gmp_prob_prime(resource a[, int reps])\",'Checks if a is \"probably prime\"'],gmp_random:[\"resource gmp_random([int limiter])\",\"Gets random number\"],gmp_scan0:[\"int gmp_scan0(resource a, int start)\",\"Finds first zero bit\"],gmp_scan1:[\"int gmp_scan1(resource a, int start)\",\"Finds first non-zero bit\"],gmp_setbit:[\"void gmp_setbit(resource &a, int index[, bool set_clear])\",\"Sets or clear bit in a\"],gmp_sign:[\"int gmp_sign(resource a)\",\"Gets the sign of the number\"],gmp_sqrt:[\"resource gmp_sqrt(resource a)\",\"Takes integer part of square root of a\"],gmp_sqrtrem:[\"array gmp_sqrtrem(resource a)\",\"Square root with remainder\"],gmp_strval:[\"string gmp_strval(resource gmpnumber [, int base])\",\"Gets string representation of GMP number\"],gmp_sub:[\"resource gmp_sub(resource a, resource b)\",\"Subtract b from a\"],gmp_testbit:[\"bool gmp_testbit(resource a, int index)\",\"Tests if bit is set in a\"],gmp_xor:[\"resource gmp_xor(resource a, resource b)\",\"Calculates logical exclusive OR of a and b\"],gmstrftime:[\"string gmstrftime(string format [, int timestamp])\",\"Format a GMT/UCT time/date according to locale settings\"],grapheme_extract:[\"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\"Function to extract a sequence of default grapheme clusters\"],grapheme_stripos:[\"int grapheme_stripos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another, ignoring case differences\"],grapheme_stristr:[\"string grapheme_stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_strlen:[\"int grapheme_strlen(string str)\",\"Get number of graphemes in a string\"],grapheme_strpos:[\"int grapheme_strpos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another\"],grapheme_strripos:[\"int grapheme_strripos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another, ignoring case\"],grapheme_strrpos:[\"int grapheme_strrpos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another\"],grapheme_strstr:[\"string grapheme_strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_substr:[\"string grapheme_substr(string str, int start [, int length])\",\"Returns part of a string\"],gregoriantojd:[\"int gregoriantojd(int month, int day, int year)\",\"Converts a gregorian calendar date to julian day count\"],gzcompress:[\"string gzcompress(string data [, int level])\",\"Gzip-compress a string\"],gzdeflate:[\"string gzdeflate(string data [, int level])\",\"Gzip-compress a string\"],gzencode:[\"string gzencode(string data [, int level [, int encoding_mode]])\",\"GZ encode a string\"],gzfile:[\"array gzfile(string filename [, int use_include_path])\",\"Read und uncompress entire .gz-file into an array\"],gzinflate:[\"string gzinflate(string data [, int length])\",\"Unzip a gzip-compressed string\"],gzopen:[\"resource gzopen(string filename, string mode [, int use_include_path])\",\"Open a .gz-file and return a .gz-file pointer\"],gzuncompress:[\"string gzuncompress(string data [, int length])\",\"Unzip a gzip-compressed string\"],hash:[\"string hash(string algo, string data[, bool raw_output = false])\",\"Generate a hash of a given input string Returns lowercase hexits by default\"],hash_algos:[\"array hash_algos(void)\",\"Return a list of registered hashing algorithms\"],hash_copy:[\"resource hash_copy(resource context)\",\"Copy hash resource\"],hash_file:[\"string hash_file(string algo, string filename[, bool raw_output = false])\",\"Generate a hash of a given file Returns lowercase hexits by default\"],hash_final:[\"string hash_final(resource context[, bool raw_output=false])\",\"Output resulting digest\"],hash_hmac:[\"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"],hash_hmac_file:[\"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"],hash_init:[\"resource hash_init(string algo[, int options, string key])\",\"Initialize a hashing context\"],hash_update:[\"bool hash_update(resource context, string data)\",\"Pump data into the hashing algorithm\"],hash_update_file:[\"bool hash_update_file(resource context, string filename[, resource context])\",\"Pump data into the hashing algorithm from a file\"],hash_update_stream:[\"int hash_update_stream(resource context, resource handle[, integer length])\",\"Pump data into the hashing algorithm from an open stream\"],header:[\"void header(string header [, bool replace, [int http_response_code]])\",\"Sends a raw HTTP header\"],header_remove:[\"void header_remove([string name])\",\"Removes an HTTP header previously set using header()\"],headers_list:[\"array headers_list(void)\",\"Return list of headers to be sent / already sent\"],headers_sent:[\"bool headers_sent([string &$file [, int &$line]])\",\"Returns true if headers have already been sent, false otherwise\"],hebrev:[\"string hebrev(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text\"],hebrevc:[\"string hebrevc(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text with newline conversion\"],hexdec:[\"int hexdec(string hexadecimal_number)\",\"Returns the decimal equivalent of the hexadecimal number\"],highlight_file:[\"bool highlight_file(string file_name [, bool return] )\",\"Syntax highlight a source file\"],highlight_string:[\"bool highlight_string(string string [, bool return] )\",\"Syntax highlight a string or optionally return it\"],html_entity_decode:[\"string html_entity_decode(string string [, int quote_style][, string charset])\",\"Convert all HTML entities to their applicable characters\"],htmlentities:[\"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert all applicable characters to HTML entities\"],htmlspecialchars:[\"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert special characters to HTML entities\"],htmlspecialchars_decode:[\"string htmlspecialchars_decode(string string [, int quote_style])\",\"Convert special HTML entities back to characters\"],http_build_query:[\"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\"Generates a form-encoded query string from an associative array or object.\"],hypot:[\"float hypot(float num1, float num2)\",\"Returns sqrt(num1*num1 + num2*num2)\"],ibase_add_user:[\"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Add a user to security database\"],ibase_affected_rows:[\"int ibase_affected_rows( [ resource link_identifier ] )\",\"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"],ibase_backup:[\"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\"Initiates a backup task in the service manager and returns immediately\"],ibase_blob_add:[\"bool ibase_blob_add(resource blob_handle, string data)\",\"Add data into created blob\"],ibase_blob_cancel:[\"bool ibase_blob_cancel(resource blob_handle)\",\"Cancel creating blob\"],ibase_blob_close:[\"string ibase_blob_close(resource blob_handle)\",\"Close blob\"],ibase_blob_create:[\"resource ibase_blob_create([resource link_identifier])\",\"Create blob for adding data\"],ibase_blob_echo:[\"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\"Output blob contents to browser\"],ibase_blob_get:[\"string ibase_blob_get(resource blob_handle, int len)\",\"Get len bytes data from open blob\"],ibase_blob_import:[\"string ibase_blob_import([ resource link_identifier, ] resource file)\",\"Create blob, copy file in it, and close it\"],ibase_blob_info:[\"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\"Return blob length and other useful info\"],ibase_blob_open:[\"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\"Open blob for retrieving data parts\"],ibase_close:[\"bool ibase_close([resource link_identifier])\",\"Close an InterBase connection\"],ibase_commit:[\"bool ibase_commit( resource link_identifier )\",\"Commit transaction\"],ibase_commit_ret:[\"bool ibase_commit_ret( resource link_identifier )\",\"Commit transaction and retain the transaction context\"],ibase_connect:[\"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a connection to an InterBase database\"],ibase_db_info:[\"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\"Request statistics about a database\"],ibase_delete_user:[\"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Delete a user from security database\"],ibase_drop_db:[\"bool ibase_drop_db([resource link_identifier])\",\"Drop an InterBase database\"],ibase_errcode:[\"int ibase_errcode(void)\",\"Return error code\"],ibase_errmsg:[\"string ibase_errmsg(void)\",\"Return error message\"],ibase_execute:[\"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a previously prepared query\"],ibase_fetch_assoc:[\"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_fetch_object:[\"object ibase_fetch_object(resource result [, int fetch_flags])\",\"Fetch a object from the results of a query\"],ibase_fetch_row:[\"array ibase_fetch_row(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_field_info:[\"array ibase_field_info(resource query_result, int field_number)\",\"Get information about a field\"],ibase_free_event_handler:[\"bool ibase_free_event_handler(resource event)\",\"Frees the event handler set by ibase_set_event_handler()\"],ibase_free_query:[\"bool ibase_free_query(resource query)\",\"Free memory used by a query\"],ibase_free_result:[\"bool ibase_free_result(resource result)\",\"Free the memory used by a result\"],ibase_gen_id:[\"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\"Increments the named generator and returns its new value\"],ibase_maintain_db:[\"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\"Execute a maintenance command on the database server\"],ibase_modify_user:[\"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Modify a user in security database\"],ibase_name_result:[\"bool ibase_name_result(resource result, string name)\",\"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"],ibase_num_fields:[\"int ibase_num_fields(resource query_result)\",\"Get the number of fields in result\"],ibase_num_params:[\"int ibase_num_params(resource query)\",\"Get the number of params in a prepared query\"],ibase_num_rows:[\"int ibase_num_rows( resource result_identifier )\",\"Return the number of rows that are available in a result\"],ibase_param_info:[\"array ibase_param_info(resource query, int field_number)\",\"Get information about a parameter\"],ibase_pconnect:[\"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a persistent connection to an InterBase database\"],ibase_prepare:[\"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\"Prepare a query for later execution\"],ibase_query:[\"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a query\"],ibase_restore:[\"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\"Initiates a restore task in the service manager and returns immediately\"],ibase_rollback:[\"bool ibase_rollback( resource link_identifier )\",\"Rollback transaction\"],ibase_rollback_ret:[\"bool ibase_rollback_ret( resource link_identifier )\",\"Rollback transaction and retain the transaction context\"],ibase_server_info:[\"string ibase_server_info(resource service_handle, int action)\",\"Request information about a database server\"],ibase_service_attach:[\"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\"Connect to the service manager\"],ibase_service_detach:[\"bool ibase_service_detach(resource service_handle)\",\"Disconnect from the service manager\"],ibase_set_event_handler:[\"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\"Register the callback for handling each of the named events\"],ibase_trans:[\"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\"Start a transaction over one or several databases\"],ibase_wait_event:[\"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"],iconv:[\"string iconv(string in_charset, string out_charset, string str)\",\"Returns str converted to the out_charset character set\"],iconv_get_encoding:[\"mixed iconv_get_encoding([string type])\",\"Get internal encoding and output encoding for ob_iconv_handler()\"],iconv_mime_decode:[\"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\"Decodes a mime header field\"],iconv_mime_decode_headers:[\"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\"Decodes multiple mime header fields\"],iconv_mime_encode:[\"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\"Composes a mime header field with field_name and field_value in a specified scheme\"],iconv_set_encoding:[\"bool iconv_set_encoding(string type, string charset)\",\"Sets internal encoding and output encoding for ob_iconv_handler()\"],iconv_strlen:[\"int iconv_strlen(string str [, string charset])\",\"Returns the character count of str\"],iconv_strpos:[\"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\"Finds position of first occurrence of needle within part of haystack beginning with offset\"],iconv_strrpos:[\"int iconv_strrpos(string haystack, string needle [, string charset])\",\"Finds position of last occurrence of needle within part of haystack beginning with offset\"],iconv_substr:[\"string iconv_substr(string str, int offset, [int length, string charset])\",\"Returns specified part of a string\"],idate:[\"int idate(string format [, int timestamp])\",\"Format a local time/date as integer\"],idn_to_ascii:[\"int idn_to_ascii(string domain[, int options])\",\"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"],idn_to_utf8:[\"int idn_to_utf8(string domain[, int options])\",\"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"],ignore_user_abort:[\"int ignore_user_abort([string value])\",\"Set whether we want to ignore a user abort event or not\"],image2wbmp:[\"bool image2wbmp(resource im [, string filename [, int threshold]])\",\"Output WBMP image to browser or file\"],image_type_to_extension:[\"string image_type_to_extension(int imagetype [, bool include_dot])\",\"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],image_type_to_mime_type:[\"string image_type_to_mime_type(int imagetype)\",\"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],imagealphablending:[\"bool imagealphablending(resource im, bool on)\",\"Turn alpha blending mode on or off for the given image\"],imageantialias:[\"bool imageantialias(resource im, bool on)\",\"Should antialiased functions used or not\"],imagearc:[\"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\"Draw a partial ellipse\"],imagechar:[\"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\"Draw a character\"],imagecharup:[\"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\"Draw a character rotated 90 degrees counter-clockwise\"],imagecolorallocate:[\"int imagecolorallocate(resource im, int red, int green, int blue)\",\"Allocate a color for an image\"],imagecolorallocatealpha:[\"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\"Allocate a color with an alpha level.  Works for true color and palette based images\"],imagecolorat:[\"int imagecolorat(resource im, int x, int y)\",\"Get the index of the color of a pixel\"],imagecolorclosest:[\"int imagecolorclosest(resource im, int red, int green, int blue)\",\"Get the index of the closest color to the specified color\"],imagecolorclosestalpha:[\"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\"Find the closest matching colour with alpha transparency\"],imagecolorclosesthwb:[\"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\"Get the index of the color which has the hue, white and blackness nearest to the given color\"],imagecolordeallocate:[\"bool imagecolordeallocate(resource im, int index)\",\"De-allocate a color for an image\"],imagecolorexact:[\"int imagecolorexact(resource im, int red, int green, int blue)\",\"Get the index of the specified color\"],imagecolorexactalpha:[\"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\"Find exact match for colour with transparency\"],imagecolormatch:[\"bool imagecolormatch(resource im1, resource im2)\",\"Makes the colors of the palette version of an image more closely match the true color version\"],imagecolorresolve:[\"int imagecolorresolve(resource im, int red, int green, int blue)\",\"Get the index of the specified color or its closest possible alternative\"],imagecolorresolvealpha:[\"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"],imagecolorset:[\"void imagecolorset(resource im, int col, int red, int green, int blue)\",\"Set the color for the specified palette index\"],imagecolorsforindex:[\"array imagecolorsforindex(resource im, int col)\",\"Get the colors for an index\"],imagecolorstotal:[\"int imagecolorstotal(resource im)\",\"Find out the number of colors in an image's palette\"],imagecolortransparent:[\"int imagecolortransparent(resource im [, int col])\",\"Define a color as transparent\"],imageconvolution:[\"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\"Apply a 3x3 convolution matrix, using coefficient div and offset\"],imagecopy:[\"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\"Copy part of an image\"],imagecopymerge:[\"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopymergegray:[\"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopyresampled:[\"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image using resampling to help ensure clarity\"],imagecopyresized:[\"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image\"],imagecreate:[\"resource imagecreate(int x_size, int y_size)\",\"Create a new image\"],imagecreatefromgd:[\"resource imagecreatefromgd(string filename)\",\"Create a new image from GD file or URL\"],imagecreatefromgd2:[\"resource imagecreatefromgd2(string filename)\",\"Create a new image from GD2 file or URL\"],imagecreatefromgd2part:[\"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\"Create a new image from a given part of GD2 file or URL\"],imagecreatefromgif:[\"resource imagecreatefromgif(string filename)\",\"Create a new image from GIF file or URL\"],imagecreatefromjpeg:[\"resource imagecreatefromjpeg(string filename)\",\"Create a new image from JPEG file or URL\"],imagecreatefrompng:[\"resource imagecreatefrompng(string filename)\",\"Create a new image from PNG file or URL\"],imagecreatefromstring:[\"resource imagecreatefromstring(string image)\",\"Create a new image from the image stream in the string\"],imagecreatefromwbmp:[\"resource imagecreatefromwbmp(string filename)\",\"Create a new image from WBMP file or URL\"],imagecreatefromxbm:[\"resource imagecreatefromxbm(string filename)\",\"Create a new image from XBM file or URL\"],imagecreatefromxpm:[\"resource imagecreatefromxpm(string filename)\",\"Create a new image from XPM file or URL\"],imagecreatetruecolor:[\"resource imagecreatetruecolor(int x_size, int y_size)\",\"Create a new true color image\"],imagedashedline:[\"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a dashed line\"],imagedestroy:[\"bool imagedestroy(resource im)\",\"Destroy an image\"],imageellipse:[\"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefill:[\"bool imagefill(resource im, int x, int y, int col)\",\"Flood fill\"],imagefilledarc:[\"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\"Draw a filled partial ellipse\"],imagefilledellipse:[\"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefilledpolygon:[\"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\"Draw a filled polygon\"],imagefilledrectangle:[\"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a filled rectangle\"],imagefilltoborder:[\"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\"Flood fill to specific color\"],imagefilter:[\"bool imagefilter(resource src_im, int filtertype, [args] )\",\"Applies Filter an image using a custom angle\"],imagefontheight:[\"int imagefontheight(int font)\",\"Get font height\"],imagefontwidth:[\"int imagefontwidth(int font)\",\"Get font width\"],imageftbbox:[\"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\"Give the bounding box of a text using fonts via freetype2\"],imagefttext:[\"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\"Write text to the image using fonts via freetype2\"],imagegammacorrect:[\"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\"Apply a gamma correction to a GD image\"],imagegd:[\"bool imagegd(resource im [, string filename])\",\"Output GD image to browser or file\"],imagegd2:[\"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\"Output GD2 image to browser or file\"],imagegif:[\"bool imagegif(resource im [, string filename])\",\"Output GIF image to browser or file\"],imagegrabscreen:[\"resource imagegrabscreen()\",\"Grab a screenshot\"],imagegrabwindow:[\"resource imagegrabwindow(int window_handle [, int client_area])\",\"Grab a window or its client area using a windows handle (HWND property in COM instance)\"],imageinterlace:[\"int imageinterlace(resource im [, int interlace])\",\"Enable or disable interlace\"],imageistruecolor:[\"bool imageistruecolor(resource im)\",\"return true if the image uses truecolor\"],imagejpeg:[\"bool imagejpeg(resource im [, string filename [, int quality]])\",\"Output JPEG image to browser or file\"],imagelayereffect:[\"bool imagelayereffect(resource im, int effect)\",\"Set the alpha blending flag to use the bundled libgd layering effects\"],imageline:[\"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a line\"],imageloadfont:[\"int imageloadfont(string filename)\",\"Load a new font\"],imagepalettecopy:[\"void imagepalettecopy(resource dst, resource src)\",\"Copy the palette from the src image onto the dst image\"],imagepng:[\"bool imagepng(resource im [, string filename])\",\"Output PNG image to browser or file\"],imagepolygon:[\"bool imagepolygon(resource im, array point, int num_points, int col)\",\"Draw a polygon\"],imagepsbbox:[\"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\"Return the bounding box needed by a string if rasterized\"],imagepscopyfont:[\"int imagepscopyfont(int font_index)\",\"Make a copy of a font for purposes like extending or reenconding\"],imagepsencodefont:[\"bool imagepsencodefont(resource font_index, string filename)\",\"To change a fonts character encoding vector\"],imagepsextendfont:[\"bool imagepsextendfont(resource font_index, float extend)\",\"Extend or or condense (if extend < 1) a font\"],imagepsfreefont:[\"bool imagepsfreefont(resource font_index)\",\"Free memory used by a font\"],imagepsloadfont:[\"resource imagepsloadfont(string pathname)\",\"Load a new font from specified file\"],imagepsslantfont:[\"bool imagepsslantfont(resource font_index, float slant)\",\"Slant a font\"],imagepstext:[\"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\"Rasterize a string over an image\"],imagerectangle:[\"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a rectangle\"],imagerotate:[\"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\"Rotate an image using a custom angle\"],imagesavealpha:[\"bool imagesavealpha(resource im, bool on)\",\"Include alpha channel to a saved image\"],imagesetbrush:[\"bool imagesetbrush(resource image, resource brush)\",'Set the brush image to $brush when filling $image with the \"IMG_COLOR_BRUSHED\" color'],imagesetpixel:[\"bool imagesetpixel(resource im, int x, int y, int col)\",\"Set a single pixel\"],imagesetstyle:[\"bool imagesetstyle(resource im, array styles)\",\"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"],imagesetthickness:[\"bool imagesetthickness(resource im, int thickness)\",\"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"],imagesettile:[\"bool imagesettile(resource image, resource tile)\",'Set the tile image to $tile when filling $image with the \"IMG_COLOR_TILED\" color'],imagestring:[\"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\"Draw a string horizontally\"],imagestringup:[\"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\"Draw a string vertically - rotated 90 degrees counter-clockwise\"],imagesx:[\"int imagesx(resource im)\",\"Get image width\"],imagesy:[\"int imagesy(resource im)\",\"Get image height\"],imagetruecolortopalette:[\"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"],imagettfbbox:[\"array imagettfbbox(float size, float angle, string font_file, string text)\",\"Give the bounding box of a text using TrueType fonts\"],imagettftext:[\"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\"Write text to the image using a TrueType font\"],imagetypes:[\"int imagetypes(void)\",\"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"],imagewbmp:[\"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\"Output WBMP image to browser or file\"],imagexbm:[\"int imagexbm(int im, string filename [, int foreground])\",\"Output XBM image to browser or file\"],imap_8bit:[\"string imap_8bit(string text)\",\"Convert an 8-bit string to a quoted-printable string\"],imap_alerts:[\"array imap_alerts(void)\",\"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"],imap_append:[\"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\"Append a new message to a specified mailbox\"],imap_base64:[\"string imap_base64(string text)\",\"Decode BASE64 encoded text\"],imap_binary:[\"string imap_binary(string text)\",\"Convert an 8bit string to a base64 string\"],imap_body:[\"string imap_body(resource stream_id, int msg_no [, int options])\",\"Read the message body\"],imap_bodystruct:[\"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\"Read the structure of a specified body section of a specific message\"],imap_check:[\"object imap_check(resource stream_id)\",\"Get mailbox properties\"],imap_clearflag_full:[\"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Clears flags on messages\"],imap_close:[\"bool imap_close(resource stream_id [, int options])\",\"Close an IMAP stream\"],imap_createmailbox:[\"bool imap_createmailbox(resource stream_id, string mailbox)\",\"Create a new mailbox\"],imap_delete:[\"bool imap_delete(resource stream_id, int msg_no [, int options])\",\"Mark a message for deletion\"],imap_deletemailbox:[\"bool imap_deletemailbox(resource stream_id, string mailbox)\",\"Delete a mailbox\"],imap_errors:[\"array imap_errors(void)\",\"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"],imap_expunge:[\"bool imap_expunge(resource stream_id)\",\"Permanently delete all messages marked for deletion\"],imap_fetch_overview:[\"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\"Read an overview of the information in the headers of the given message sequence\"],imap_fetchbody:[\"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\"Get a specific body section\"],imap_fetchheader:[\"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\"Get the full unfiltered header for a message\"],imap_fetchstructure:[\"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\"Read the full structure of a message\"],imap_gc:[\"bool imap_gc(resource stream_id, int flags)\",\"This function garbage collects (purges) the cache of entries of a specific type.\"],imap_get_quota:[\"array imap_get_quota(resource stream_id, string qroot)\",\"Returns the quota set to the mailbox account qroot\"],imap_get_quotaroot:[\"array imap_get_quotaroot(resource stream_id, string mbox)\",\"Returns the quota set to the mailbox account mbox\"],imap_getacl:[\"array imap_getacl(resource stream_id, string mailbox)\",\"Gets the ACL for a given mailbox\"],imap_getmailboxes:[\"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"],imap_getsubscribed:[\"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"],imap_headerinfo:[\"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\"Read the headers of the message\"],imap_headers:[\"array imap_headers(resource stream_id)\",\"Returns headers for all messages in a mailbox\"],imap_last_error:[\"string imap_last_error(void)\",\"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"],imap_list:[\"array imap_list(resource stream_id, string ref, string pattern)\",\"Read the list of mailboxes\"],imap_listscan:[\"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\"Read list of mailboxes containing a certain string\"],imap_lsub:[\"array imap_lsub(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes\"],imap_mail:[\"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\"Send an email message\"],imap_mail_compose:[\"string imap_mail_compose(array envelope, array body)\",\"Create a MIME message based on given envelope and body sections\"],imap_mail_copy:[\"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\"Copy specified message to a mailbox\"],imap_mail_move:[\"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\"Move specified message to a mailbox\"],imap_mailboxmsginfo:[\"object imap_mailboxmsginfo(resource stream_id)\",\"Returns info about the current mailbox\"],imap_mime_header_decode:[\"array imap_mime_header_decode(string str)\",\"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"],imap_msgno:[\"int imap_msgno(resource stream_id, int unique_msg_id)\",\"Get the sequence number associated with a UID\"],imap_mutf7_to_utf8:[\"string imap_mutf7_to_utf8(string in)\",\"Decode a modified UTF-7 string to UTF-8\"],imap_num_msg:[\"int imap_num_msg(resource stream_id)\",\"Gives the number of messages in the current mailbox\"],imap_num_recent:[\"int imap_num_recent(resource stream_id)\",\"Gives the number of recent messages in current mailbox\"],imap_open:[\"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\"Open an IMAP stream to a mailbox\"],imap_ping:[\"bool imap_ping(resource stream_id)\",\"Check if the IMAP stream is still active\"],imap_qprint:[\"string imap_qprint(string text)\",\"Convert a quoted-printable string to an 8-bit string\"],imap_renamemailbox:[\"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\"Rename a mailbox\"],imap_reopen:[\"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\"Reopen an IMAP stream to a new mailbox\"],imap_rfc822_parse_adrlist:[\"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\"Parses an address string\"],imap_rfc822_parse_headers:[\"object imap_rfc822_parse_headers(string headers [, string default_host])\",\"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"],imap_rfc822_write_address:[\"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\"Returns a properly formatted email address given the mailbox, host, and personal info\"],imap_savebody:['bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \"\"[, int options = 0]])',\"Save a specific body section to a file\"],imap_search:[\"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\"Return a list of messages matching the given criteria\"],imap_set_quota:[\"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\"Will set the quota for qroot mailbox\"],imap_setacl:[\"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\"Sets the ACL for a given mailbox\"],imap_setflag_full:[\"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Sets flags on messages\"],imap_sort:[\"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\"Sort an array of message headers, optionally including only messages that meet specified criteria.\"],imap_status:[\"object imap_status(resource stream_id, string mailbox, int options)\",\"Get status info from a mailbox\"],imap_subscribe:[\"bool imap_subscribe(resource stream_id, string mailbox)\",\"Subscribe to a mailbox\"],imap_thread:[\"array imap_thread(resource stream_id [, int options])\",\"Return threaded by REFERENCES tree\"],imap_timeout:[\"mixed imap_timeout(int timeout_type [, int timeout])\",\"Set or fetch imap timeout\"],imap_uid:[\"int imap_uid(resource stream_id, int msg_no)\",\"Get the unique message id associated with a standard sequential message number\"],imap_undelete:[\"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\"Remove the delete flag from a message\"],imap_unsubscribe:[\"bool imap_unsubscribe(resource stream_id, string mailbox)\",\"Unsubscribe from a mailbox\"],imap_utf7_decode:[\"string imap_utf7_decode(string buf)\",\"Decode a modified UTF-7 string\"],imap_utf7_encode:[\"string imap_utf7_encode(string buf)\",\"Encode a string in modified UTF-7\"],imap_utf8:[\"string imap_utf8(string mime_encoded_text)\",\"Convert a mime-encoded text to UTF-8\"],imap_utf8_to_mutf7:[\"string imap_utf8_to_mutf7(string in)\",\"Encode a UTF-8 string to modified UTF-7\"],implode:[\"string implode([string glue,] array pieces)\",\"Joins array elements placing glue string between items and return one string\"],import_request_variables:[\"bool import_request_variables(string types [, string prefix])\",\"Import GET/POST/Cookie variables into the global scope\"],in_array:[\"bool in_array(mixed needle, array haystack [, bool strict])\",\"Checks if the given value exists in the array\"],include:[\"bool include(string path)\",\"Includes and evaluates the specified file\"],include_once:[\"bool include_once(string path)\",\"Includes and evaluates the specified file\"],inet_ntop:[\"string inet_ntop(string in_addr)\",\"Converts a packed inet address to a human readable IP address string\"],inet_pton:[\"string inet_pton(string ip_address)\",\"Converts a human readable IP address to a packed binary string\"],ini_get:[\"string ini_get(string varname)\",\"Get a configuration option\"],ini_get_all:[\"array ini_get_all([string extension[, bool details = true]])\",\"Get all configuration options\"],ini_restore:[\"void ini_restore(string varname)\",\"Restore the value of a configuration option specified by varname\"],ini_set:[\"string ini_set(string varname, string newvalue)\",\"Set a configuration option, returns false on error and the old value of the configuration option on success\"],interface_exists:[\"bool interface_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],intl_error_name:[\"string intl_error_name()\",\"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"],intl_get_error_code:[\"int intl_get_error_code()\",\"* Get code of the last occured error.\"],intl_get_error_message:[\"string intl_get_error_message()\",\"* Get text description of the last occured error.\"],intl_is_failure:[\"bool intl_is_failure()\",\"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"],intval:[\"int intval(mixed var [, int base])\",\"Get the integer value of a variable using the optional base for the conversion\"],ip2long:[\"int ip2long(string ip_address)\",\"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"],iptcembed:[\"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\"Embed binary IPTC data into a JPEG image.\"],iptcparse:[\"array iptcparse(string iptcdata)\",\"Parse binary IPTC-data into associative array\"],is_a:[\"bool is_a(object object, string class_name)\",\"Returns true if the object is of this class or has this class as one of its parents\"],is_array:[\"bool is_array(mixed var)\",\"Returns true if variable is an array\"],is_bool:[\"bool is_bool(mixed var)\",\"Returns true if variable is a boolean\"],is_callable:[\"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\"Returns true if var is callable.\"],is_dir:[\"bool is_dir(string filename)\",\"Returns true if file is directory\"],is_executable:[\"bool is_executable(string filename)\",\"Returns true if file is executable\"],is_file:[\"bool is_file(string filename)\",\"Returns true if file is a regular file\"],is_finite:[\"bool is_finite(float val)\",\"Returns whether argument is finite\"],is_float:[\"bool is_float(mixed var)\",\"Returns true if variable is float point\"],is_infinite:[\"bool is_infinite(float val)\",\"Returns whether argument is infinite\"],is_link:[\"bool is_link(string filename)\",\"Returns true if file is symbolic link\"],is_long:[\"bool is_long(mixed var)\",\"Returns true if variable is a long (integer)\"],is_nan:[\"bool is_nan(float val)\",\"Returns whether argument is not a number\"],is_null:[\"bool is_null(mixed var)\",\"Returns true if variable is null\"],is_numeric:[\"bool is_numeric(mixed value)\",\"Returns true if value is a number or a numeric string\"],is_object:[\"bool is_object(mixed var)\",\"Returns true if variable is an object\"],is_readable:[\"bool is_readable(string filename)\",\"Returns true if file can be read\"],is_resource:[\"bool is_resource(mixed var)\",\"Returns true if variable is a resource\"],is_scalar:[\"bool is_scalar(mixed value)\",\"Returns true if value is a scalar\"],is_string:[\"bool is_string(mixed var)\",\"Returns true if variable is a string\"],is_subclass_of:[\"bool is_subclass_of(object object, string class_name)\",\"Returns true if the object has this class as one of its parents\"],is_uploaded_file:[\"bool is_uploaded_file(string path)\",\"Check if file was created by rfc1867 upload\"],is_writable:[\"bool is_writable(string filename)\",\"Returns true if file can be written\"],isset:[\"bool isset(mixed var [, mixed var])\",\"Determine whether a variable is set\"],iterator_apply:[\"int iterator_apply(Traversable it, mixed function [, mixed params])\",\"Calls a function for every element in an iterator\"],iterator_count:[\"int iterator_count(Traversable it)\",\"Count the elements in an iterator\"],iterator_to_array:[\"array iterator_to_array(Traversable it [, bool use_keys = true])\",\"Copy the iterator into an array\"],jddayofweek:[\"mixed jddayofweek(int juliandaycount [, int mode])\",\"Returns name or number of day of week from julian day count\"],jdmonthname:[\"string jdmonthname(int juliandaycount, int mode)\",\"Returns name of month for julian day count\"],jdtofrench:[\"string jdtofrench(int juliandaycount)\",\"Converts a julian day count to a french republic calendar date\"],jdtogregorian:[\"string jdtogregorian(int juliandaycount)\",\"Converts a julian day count to a gregorian calendar date\"],jdtojewish:[\"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\"Converts a julian day count to a jewish calendar date\"],jdtojulian:[\"string jdtojulian(int juliandaycount)\",\"Convert a julian day count to a julian calendar date\"],jdtounix:[\"int jdtounix(int jday)\",\"Convert Julian Day to UNIX timestamp\"],jewishtojd:[\"int jewishtojd(int month, int day, int year)\",\"Converts a jewish calendar date to a julian day count\"],join:[\"string join(array src, string glue)\",\"An alias for implode\"],jpeg2wbmp:[\"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert JPEG image to WBMP image\"],json_decode:[\"mixed json_decode(string json [, bool assoc [, long depth]])\",\"Decodes the JSON representation into a PHP value\"],json_encode:[\"string json_encode(mixed data [, int options])\",\"Returns the JSON representation of a value\"],json_last_error:[\"int json_last_error()\",\"Returns the error code of the last json_decode().\"],juliantojd:[\"int juliantojd(int month, int day, int year)\",\"Converts a julian calendar date to julian day count\"],key:[\"mixed key(array array_arg)\",\"Return the key of the element currently pointed to by the internal array pointer\"],krsort:[\"bool krsort(array &array_arg [, int sort_flags])\",\"Sort an array by key value in reverse order\"],ksort:[\"bool ksort(array &array_arg [, int sort_flags])\",\"Sort an array by key\"],lcfirst:[\"string lcfirst(string str)\",\"Make a string's first character lowercase\"],lcg_value:[\"float lcg_value()\",\"Returns a value from the combined linear congruential generator\"],lchgrp:[\"bool lchgrp(string filename, mixed group)\",\"Change symlink group\"],ldap_8859_to_t61:[\"string ldap_8859_to_t61(string value)\",\"Translate 8859 characters to t61 characters\"],ldap_add:[\"bool ldap_add(resource link, string dn, array entry)\",\"Add entries to LDAP directory\"],ldap_bind:[\"bool ldap_bind(resource link [, string dn [, string password]])\",\"Bind to LDAP directory\"],ldap_compare:[\"bool ldap_compare(resource link, string dn, string attr, string value)\",\"Determine if an entry has a specific value for one of its attributes\"],ldap_connect:[\"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\"Connect to an LDAP server\"],ldap_count_entries:[\"int ldap_count_entries(resource link, resource result)\",\"Count the number of entries in a search result\"],ldap_delete:[\"bool ldap_delete(resource link, string dn)\",\"Delete an entry from a directory\"],ldap_dn2ufn:[\"string ldap_dn2ufn(string dn)\",\"Convert DN to User Friendly Naming format\"],ldap_err2str:[\"string ldap_err2str(int errno)\",\"Convert error number to error string\"],ldap_errno:[\"int ldap_errno(resource link)\",\"Get the current ldap error number\"],ldap_error:[\"string ldap_error(resource link)\",\"Get the current ldap error string\"],ldap_explode_dn:[\"array ldap_explode_dn(string dn, int with_attrib)\",\"Splits DN into its component parts\"],ldap_first_attribute:[\"string ldap_first_attribute(resource link, resource result_entry)\",\"Return first attribute\"],ldap_first_entry:[\"resource ldap_first_entry(resource link, resource result)\",\"Return first result id\"],ldap_first_reference:[\"resource ldap_first_reference(resource link, resource result)\",\"Return first reference\"],ldap_free_result:[\"bool ldap_free_result(resource result)\",\"Free result memory\"],ldap_get_attributes:[\"array ldap_get_attributes(resource link, resource result_entry)\",\"Get attributes from a search result entry\"],ldap_get_dn:[\"string ldap_get_dn(resource link, resource result_entry)\",\"Get the DN of a result entry\"],ldap_get_entries:[\"array ldap_get_entries(resource link, resource result)\",\"Get all result entries\"],ldap_get_option:[\"bool ldap_get_option(resource link, int option, mixed retval)\",\"Get the current value of various session-wide parameters\"],ldap_get_values_len:[\"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\"Get all values with lengths from a result entry\"],ldap_list:[\"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Single-level search\"],ldap_mod_add:[\"bool ldap_mod_add(resource link, string dn, array entry)\",\"Add attribute values to current\"],ldap_mod_del:[\"bool ldap_mod_del(resource link, string dn, array entry)\",\"Delete attribute values\"],ldap_mod_replace:[\"bool ldap_mod_replace(resource link, string dn, array entry)\",\"Replace attribute values with new ones\"],ldap_next_attribute:[\"string ldap_next_attribute(resource link, resource result_entry)\",\"Get the next attribute in result\"],ldap_next_entry:[\"resource ldap_next_entry(resource link, resource result_entry)\",\"Get next result entry\"],ldap_next_reference:[\"resource ldap_next_reference(resource link, resource reference_entry)\",\"Get next reference\"],ldap_parse_reference:[\"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\"Extract information from reference entry\"],ldap_parse_result:[\"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\"Extract information from result\"],ldap_read:[\"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Read an entry\"],ldap_rename:[\"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\"Modify the name of an entry\"],ldap_sasl_bind:[\"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\"Bind to LDAP directory using SASL\"],ldap_search:[\"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Search LDAP tree under base_dn\"],ldap_set_option:[\"bool ldap_set_option(resource link, int option, mixed newval)\",\"Set the value of various session-wide parameters\"],ldap_set_rebind_proc:[\"bool ldap_set_rebind_proc(resource link, string callback)\",\"Set a callback function to do re-binds on referral chasing.\"],ldap_sort:[\"bool ldap_sort(resource link, resource result, string sortfilter)\",\"Sort LDAP result entries\"],ldap_start_tls:[\"bool ldap_start_tls(resource link)\",\"Start TLS\"],ldap_t61_to_8859:[\"string ldap_t61_to_8859(string value)\",\"Translate t61 characters to 8859 characters\"],ldap_unbind:[\"bool ldap_unbind(resource link)\",\"Unbind from LDAP directory\"],leak:[\"void leak(int num_bytes=3)\",\"Cause an intentional memory leak, for testing/debugging purposes\"],levenshtein:[\"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\"Calculate Levenshtein distance between two strings\"],libxml_clear_errors:[\"void libxml_clear_errors()\",\"Clear last error from libxml\"],libxml_disable_entity_loader:[\"bool libxml_disable_entity_loader([boolean disable])\",\"Disable/Enable ability to load external entities\"],libxml_get_errors:[\"object libxml_get_errors()\",\"Retrieve array of errors\"],libxml_get_last_error:[\"object libxml_get_last_error()\",\"Retrieve last error from libxml\"],libxml_set_streams_context:[\"void libxml_set_streams_context(resource streams_context)\",\"Set the streams context for the next libxml document load or write\"],libxml_use_internal_errors:[\"bool libxml_use_internal_errors([boolean use_errors])\",\"Disable libxml errors and allow user to fetch error information as needed\"],link:[\"int link(string target, string link)\",\"Create a hard link\"],linkinfo:[\"int linkinfo(string filename)\",\"Returns the st_dev field of the UNIX C stat structure describing the link\"],litespeed_request_headers:[\"array litespeed_request_headers(void)\",\"Fetch all HTTP request headers\"],litespeed_response_headers:[\"array litespeed_response_headers(void)\",\"Fetch all HTTP response headers\"],locale_accept_from_http:[\"string locale_accept_from_http(string $http_accept)\",null],locale_canonicalize:[\"static string locale_canonicalize(Locale $loc, string $locale)\",\"* @param string $locale The locale string to canonicalize\"],locale_filter_matches:[\"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"],locale_get_all_variants:[\"static array locale_get_all_variants($locale)\",\"* gets an array containing the list of variants, or null\"],locale_get_default:[\"static string locale_get_default( )\",\"Get default locale\"],locale_get_keywords:[\"static array locale_get_keywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"],locale_get_primary_language:[\"static string locale_get_primary_language($locale)\",\"* gets the primary language for the $locale\"],locale_get_region:[\"static string locale_get_region($locale)\",\"* gets the region for the $locale\"],locale_get_script:[\"static string locale_get_script($locale)\",\"* gets the script for the $locale\"],locale_lookup:[\"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\"* Searchs the items in $langtag for the best match to the language * range\"],locale_set_default:[\"static string locale_set_default( string $locale )\",\"Set default locale\"],localeconv:[\"array localeconv(void)\",\"Returns numeric formatting information based on the current locale\"],localtime:[\"array localtime([int timestamp [, bool associative_array]])\",\"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"],log:[\"float log(float number, [float base])\",\"Returns the natural logarithm of the number, or the base log if base is specified\"],log10:[\"float log10(float number)\",\"Returns the base-10 logarithm of the number\"],log1p:[\"float log1p(float number)\",\"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"],long2ip:[\"string long2ip(int proper_address)\",\"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"],lstat:[\"array lstat(string filename)\",\"Give information about a file or symbolic link\"],ltrim:[\"string ltrim(string str [, string character_mask])\",\"Strips whitespace from the beginning of a string\"],mail:[\"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"Send an email message\"],max:[\"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the highest value in an array or a series of arguments\"],mb_check_encoding:[\"bool mb_check_encoding([string var[, string encoding]])\",\"Check if the string is valid for the specified encoding\"],mb_convert_case:[\"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\"Returns a case-folded version of sourcestring\"],mb_convert_encoding:[\"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\"Returns converted string in desired encoding\"],mb_convert_kana:[\"string mb_convert_kana(string str [, string option] [, string encoding])\",\"Conversion between full-width character and half-width character (Japanese)\"],mb_convert_variables:[\"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\"Converts the string resource in variables to desired encoding\"],mb_decode_mimeheader:[\"string mb_decode_mimeheader(string string)\",'Decodes the MIME \"encoded-word\" in the string'],mb_decode_numericentity:[\"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\"Converts HTML numeric entities to character code\"],mb_detect_encoding:[\"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\"Encodings of the given string is returned (as a string)\"],mb_detect_order:[\"bool|array mb_detect_order([mixed encoding-list])\",\"Sets the current detect_order or Return the current detect_order as a array\"],mb_encode_mimeheader:[\"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",'Converts the string to MIME \"encoded-word\" in the format of =?charset?(B|Q)?encoded_string?='],mb_encode_numericentity:[\"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\"Converts specified characters to HTML numeric entities\"],mb_encoding_aliases:[\"array mb_encoding_aliases(string encoding)\",\"Returns an array of the aliases of a given encoding name\"],mb_ereg:[\"int mb_ereg(string pattern, string string [, array registers])\",\"Regular expression match for multibyte string\"],mb_ereg_match:[\"bool mb_ereg_match(string pattern, string string [,string option])\",\"Regular expression match for multibyte string\"],mb_ereg_replace:[\"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\"Replace regular expression for multibyte string\"],mb_ereg_search:[\"bool mb_ereg_search([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_getpos:[\"int mb_ereg_search_getpos(void)\",\"Get search start position\"],mb_ereg_search_getregs:[\"array mb_ereg_search_getregs(void)\",\"Get matched substring of the last time\"],mb_ereg_search_init:[\"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\"Initialize string and regular expression for search.\"],mb_ereg_search_pos:[\"array mb_ereg_search_pos([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_regs:[\"array mb_ereg_search_regs([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_setpos:[\"bool mb_ereg_search_setpos(int position)\",\"Set search start position\"],mb_eregi:[\"int mb_eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match for multibyte string\"],mb_eregi_replace:[\"string mb_eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression for multibyte string\"],mb_get_info:[\"mixed mb_get_info([string type])\",\"Returns the current settings of mbstring\"],mb_http_input:[\"mixed mb_http_input([string type])\",\"Returns the input encoding\"],mb_http_output:[\"string mb_http_output([string encoding])\",\"Sets the current output_encoding or returns the current output_encoding as a string\"],mb_internal_encoding:[\"string mb_internal_encoding([string encoding])\",\"Sets the current internal encoding or Returns the current internal encoding as a string\"],mb_language:[\"string mb_language([string language])\",\"Sets the current language or Returns the current language as a string\"],mb_list_encodings:[\"mixed mb_list_encodings()\",\"Returns an array of all supported entity encodings\"],mb_output_handler:[\"string mb_output_handler(string contents, int status)\",\"Returns string in output buffer converted to the http_output encoding\"],mb_parse_str:[\"bool mb_parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],mb_preferred_mime_name:[\"string mb_preferred_mime_name(string encoding)\",\"Return the preferred MIME name (charset) as a string\"],mb_regex_encoding:[\"string mb_regex_encoding([string encoding])\",\"Returns the current encoding for regex as a string.\"],mb_regex_set_options:[\"string mb_regex_set_options([string options])\",\"Set or get the default options for mbregex functions\"],mb_send_mail:[\"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"*  Sends an email message with MIME scheme\"],mb_split:[\"array mb_split(string pattern, string string [, int limit])\",\"split multibyte string into array by regular expression\"],mb_strcut:[\"string mb_strcut(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_strimwidth:[\"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\"Trim the string in terminal width\"],mb_stripos:[\"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of first occurrence of a string within another, case insensitive\"],mb_stristr:[\"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another, case insensitive\"],mb_strlen:[\"int mb_strlen(string str [, string encoding])\",\"Get character numbers of a string\"],mb_strpos:[\"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of first occurrence of a string within another\"],mb_strrchr:[\"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another\"],mb_strrichr:[\"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another, case insensitive\"],mb_strripos:[\"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of last occurrence of a string within another, case insensitive\"],mb_strrpos:[\"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of last occurrence of a string within another\"],mb_strstr:[\"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another\"],mb_strtolower:[\"string mb_strtolower(string sourcestring [, string encoding])\",\"*  Returns a lowercased version of sourcestring\"],mb_strtoupper:[\"string mb_strtoupper(string sourcestring [, string encoding])\",\"*  Returns a uppercased version of sourcestring\"],mb_strwidth:[\"int mb_strwidth(string str [, string encoding])\",\"Gets terminal width of a string\"],mb_substitute_character:[\"mixed mb_substitute_character([mixed substchar])\",\"Sets the current substitute_character or returns the current substitute_character\"],mb_substr:[\"string mb_substr(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_substr_count:[\"int mb_substr_count(string haystack, string needle [, string encoding])\",\"Count the number of substring occurrences\"],mcrypt_cbc:[\"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_cfb:[\"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_create_iv:[\"string mcrypt_create_iv(int size, int source)\",\"Create an initialization vector (IV)\"],mcrypt_decrypt:[\"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_ecb:[\"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_enc_get_algorithms_name:[\"string mcrypt_enc_get_algorithms_name(resource td)\",\"Returns the name of the algorithm specified by the descriptor td\"],mcrypt_enc_get_block_size:[\"int mcrypt_enc_get_block_size(resource td)\",\"Returns the block size of the cipher specified by the descriptor td\"],mcrypt_enc_get_iv_size:[\"int mcrypt_enc_get_iv_size(resource td)\",\"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_key_size:[\"int mcrypt_enc_get_key_size(resource td)\",\"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_modes_name:[\"string mcrypt_enc_get_modes_name(resource td)\",\"Returns the name of the mode specified by the descriptor td\"],mcrypt_enc_get_supported_key_sizes:[\"array mcrypt_enc_get_supported_key_sizes(resource td)\",\"This function decrypts the crypttext\"],mcrypt_enc_is_block_algorithm:[\"bool mcrypt_enc_is_block_algorithm(resource td)\",\"Returns TRUE if the alrogithm is a block algorithms\"],mcrypt_enc_is_block_algorithm_mode:[\"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_enc_is_block_mode:[\"bool mcrypt_enc_is_block_mode(resource td)\",\"Returns TRUE if the mode outputs blocks\"],mcrypt_enc_self_test:[\"int mcrypt_enc_self_test(resource td)\",\"This function runs the self test on the algorithm specified by the descriptor td\"],mcrypt_encrypt:[\"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_generic:[\"string mcrypt_generic(resource td, string data)\",\"This function encrypts the plaintext\"],mcrypt_generic_deinit:[\"bool mcrypt_generic_deinit(resource td)\",\"This function terminates encrypt specified by the descriptor td\"],mcrypt_generic_init:[\"int mcrypt_generic_init(resource td, string key, string iv)\",\"This function initializes all buffers for the specific module\"],mcrypt_get_block_size:[\"int mcrypt_get_block_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_get_cipher_name:[\"string mcrypt_get_cipher_name(string cipher)\",\"Get the key size of cipher\"],mcrypt_get_iv_size:[\"int mcrypt_get_iv_size(string cipher, string module)\",\"Get the IV size of cipher (Usually the same as the blocksize)\"],mcrypt_get_key_size:[\"int mcrypt_get_key_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_list_algorithms:[\"array mcrypt_list_algorithms([string lib_dir])\",'List all algorithms in \"module_dir\"'],mcrypt_list_modes:[\"array mcrypt_list_modes([string lib_dir])\",'List all modes \"module_dir\"'],mcrypt_module_close:[\"bool mcrypt_module_close(resource td)\",\"Free the descriptor td\"],mcrypt_module_get_algo_block_size:[\"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\"Returns the block size of the algorithm\"],mcrypt_module_get_algo_key_size:[\"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\"Returns the maximum supported key size of the algorithm\"],mcrypt_module_get_supported_key_sizes:[\"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\"This function decrypts the crypttext\"],mcrypt_module_is_block_algorithm:[\"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\"Returns TRUE if the algorithm is a block algorithm\"],mcrypt_module_is_block_algorithm_mode:[\"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_module_is_block_mode:[\"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode outputs blocks of bytes\"],mcrypt_module_open:[\"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\"Opens the module of the algorithm and the mode to be used\"],mcrypt_module_self_test:[\"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",'Does a self test of the module \"module\"'],mcrypt_ofb:[\"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],md5:[\"string md5(string str, [ bool raw_output])\",\"Calculate the md5 hash of a string\"],md5_file:[\"string md5_file(string filename [, bool raw_output])\",\"Calculate the md5 hash of given filename\"],mdecrypt_generic:[\"string mdecrypt_generic(resource td, string data)\",\"This function decrypts the plaintext\"],memory_get_peak_usage:[\"int memory_get_peak_usage([real_usage])\",\"Returns the peak allocated by PHP memory\"],memory_get_usage:[\"int memory_get_usage([real_usage])\",\"Returns the allocated by PHP memory\"],metaphone:[\"string metaphone(string text[, int phones])\",\"Break english phrases down into their phonemes\"],method_exists:[\"bool method_exists(object object, string method)\",\"Checks if the class method exists\"],mhash:[\"string mhash(int hash, string data [, string key])\",\"Hash data with hash\"],mhash_count:[\"int mhash_count(void)\",\"Gets the number of available hashes\"],mhash_get_block_size:[\"int mhash_get_block_size(int hash)\",\"Gets the block size of hash\"],mhash_get_hash_name:[\"string mhash_get_hash_name(int hash)\",\"Gets the name of hash\"],mhash_keygen_s2k:[\"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\"Generates a key using hash functions\"],microtime:[\"mixed microtime([bool get_as_float])\",\"Returns either a string or a float containing the current time in seconds and microseconds\"],mime_content_type:[\"string mime_content_type(string filename|resource stream)\",\"Return content-type for file\"],min:[\"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the lowest value in an array or a series of arguments\"],mkdir:[\"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\"Create a directory\"],mktime:[\"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a date\"],money_format:[\"string money_format(string format , float value)\",\"Convert monetary value(s) to string\"],move_uploaded_file:[\"bool move_uploaded_file(string path, string new_path)\",\"Move a file if and only if it was created by an upload\"],msg_get_queue:[\"resource msg_get_queue(int key [, int perms])\",\"Attach to a message queue\"],msg_queue_exists:[\"bool msg_queue_exists(int key)\",\"Check whether a message queue exists\"],msg_receive:[\"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_remove_queue:[\"bool msg_remove_queue(resource queue)\",\"Destroy the queue\"],msg_send:[\"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_set_queue:[\"bool msg_set_queue(resource queue, array data)\",\"Set information for a message queue\"],msg_stat_queue:[\"array msg_stat_queue(resource queue)\",\"Returns information about a message queue\"],msgfmt_create:[\"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\"* Create formatter.\"],msgfmt_format:[\"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\"* Format a message.\"],msgfmt_format_message:[\"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\"* Format a message.\"],msgfmt_get_error_code:[\"int msgfmt_get_error_code( MessageFormatter $nf )\",\"* Get formatter's last error code.\"],msgfmt_get_error_message:[\"string msgfmt_get_error_message( MessageFormatter $coll )\",\"* Get text description for formatter's last error code.\"],msgfmt_get_locale:[\"string msgfmt_get_locale(MessageFormatter $mf)\",\"* Get formatter locale.\"],msgfmt_get_pattern:[\"string msgfmt_get_pattern( MessageFormatter $mf )\",\"* Get formatter pattern.\"],msgfmt_parse:[\"array msgfmt_parse( MessageFormatter $nf, string $source )\",\"* Parse a message.\"],msgfmt_set_pattern:[\"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],mssql_bind:[\"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\"Adds a parameter to a stored procedure or a remote stored procedure\"],mssql_close:[\"bool mssql_close([resource conn_id])\",\"Closes a connection to a MS-SQL server\"],mssql_connect:[\"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a connection to a MS-SQL server\"],mssql_data_seek:[\"bool mssql_data_seek(resource result_id, int offset)\",\"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"],mssql_execute:[\"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\"Executes a stored procedure on a MS-SQL server database\"],mssql_fetch_array:[\"array mssql_fetch_array(resource result_id [, int result_type])\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_assoc:[\"array mssql_fetch_assoc(resource result_id)\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_batch:[\"int mssql_fetch_batch(resource result_index)\",\"Returns the next batch of records\"],mssql_fetch_field:[\"object mssql_fetch_field(resource result_id [, int offset])\",\"Gets information about certain fields in a query result\"],mssql_fetch_object:[\"object mssql_fetch_object(resource result_id)\",\"Returns a pseudo-object of the current row in the result set specified by result_id\"],mssql_fetch_row:[\"array mssql_fetch_row(resource result_id)\",\"Returns an array of the current row in the result set specified by result_id\"],mssql_field_length:[\"int mssql_field_length(resource result_id [, int offset])\",\"Get the length of a MS-SQL field\"],mssql_field_name:[\"string mssql_field_name(resource result_id [, int offset])\",\"Returns the name of the field given by offset in the result set given by result_id\"],mssql_field_seek:[\"bool mssql_field_seek(resource result_id, int offset)\",\"Seeks to the specified field offset\"],mssql_field_type:[\"string mssql_field_type(resource result_id [, int offset])\",\"Returns the type of a field\"],mssql_free_result:[\"bool mssql_free_result(resource result_index)\",\"Free a MS-SQL result index\"],mssql_free_statement:[\"bool mssql_free_statement(resource result_index)\",\"Free a MS-SQL statement index\"],mssql_get_last_message:[\"string mssql_get_last_message(void)\",\"Gets the last message from the MS-SQL server\"],mssql_guid_string:[\"string mssql_guid_string(string binary [,bool short_format])\",\"Converts a 16 byte binary GUID to a string\"],mssql_init:[\"int mssql_init(string sp_name [, resource conn_id])\",\"Initializes a stored procedure or a remote stored procedure\"],mssql_min_error_severity:[\"void mssql_min_error_severity(int severity)\",\"Sets the lower error severity\"],mssql_min_message_severity:[\"void mssql_min_message_severity(int severity)\",\"Sets the lower message severity\"],mssql_next_result:[\"bool mssql_next_result(resource result_id)\",\"Move the internal result pointer to the next result\"],mssql_num_fields:[\"int mssql_num_fields(resource mssql_result_index)\",\"Returns the number of fields fetched in from the result id specified\"],mssql_num_rows:[\"int mssql_num_rows(resource mssql_result_index)\",\"Returns the number of rows fetched in from the result id specified\"],mssql_pconnect:[\"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a persistent connection to a MS-SQL server\"],mssql_query:[\"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\"Perform an SQL query on a MS-SQL server database\"],mssql_result:[\"string mssql_result(resource result_id, int row, mixed field)\",\"Returns the contents of one cell from a MS-SQL result set\"],mssql_rows_affected:[\"int mssql_rows_affected(resource conn_id)\",\"Returns the number of records affected by the query\"],mssql_select_db:[\"bool mssql_select_db(string database_name [, resource conn_id])\",\"Select a MS-SQL database\"],mt_getrandmax:[\"int mt_getrandmax(void)\",\"Returns the maximum value a random number from Mersenne Twister can have\"],mt_rand:[\"int mt_rand([int min, int max])\",\"Returns a random number from Mersenne Twister\"],mt_srand:[\"void mt_srand([int seed])\",\"Seeds Mersenne Twister random number generator\"],mysql_affected_rows:[\"int mysql_affected_rows([int link_identifier])\",\"Gets number of affected rows in previous MySQL operation\"],mysql_client_encoding:[\"string mysql_client_encoding([int link_identifier])\",\"Returns the default character set for the current connection\"],mysql_close:[\"bool mysql_close([int link_identifier])\",\"Close a MySQL connection\"],mysql_connect:[\"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\"Opens a connection to a MySQL Server\"],mysql_create_db:[\"bool mysql_create_db(string database_name [, int link_identifier])\",\"Create a MySQL database\"],mysql_data_seek:[\"bool mysql_data_seek(resource result, int row_number)\",\"Move internal result pointer\"],mysql_db_query:[\"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_drop_db:[\"bool mysql_drop_db(string database_name [, int link_identifier])\",\"Drops (delete) a MySQL database\"],mysql_errno:[\"int mysql_errno([int link_identifier])\",\"Returns the number of the error message from previous MySQL operation\"],mysql_error:[\"string mysql_error([int link_identifier])\",\"Returns the text of the error message from previous MySQL operation\"],mysql_escape_string:[\"string mysql_escape_string(string to_be_escaped)\",\"Escape string for mysql query\"],mysql_fetch_array:[\"array mysql_fetch_array(resource result [, int result_type])\",\"Fetch a result row as an array (associative, numeric or both)\"],mysql_fetch_assoc:[\"array mysql_fetch_assoc(resource result)\",\"Fetch a result row as an associative array\"],mysql_fetch_field:[\"object mysql_fetch_field(resource result [, int field_offset])\",\"Gets column information from a result and return as an object\"],mysql_fetch_lengths:[\"array mysql_fetch_lengths(resource result)\",\"Gets max data size of each column in a result\"],mysql_fetch_object:[\"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysql_fetch_row:[\"array mysql_fetch_row(resource result)\",\"Gets a result row as an enumerated array\"],mysql_field_flags:[\"string mysql_field_flags(resource result, int field_offset)\",\"Gets the flags associated with the specified field in a result\"],mysql_field_len:[\"int mysql_field_len(resource result, int field_offset)\",\"Returns the length of the specified field\"],mysql_field_name:[\"string mysql_field_name(resource result, int field_index)\",\"Gets the name of the specified field in a result\"],mysql_field_seek:[\"bool mysql_field_seek(resource result, int field_offset)\",\"Sets result pointer to a specific field offset\"],mysql_field_table:[\"string mysql_field_table(resource result, int field_offset)\",\"Gets name of the table the specified field is in\"],mysql_field_type:[\"string mysql_field_type(resource result, int field_offset)\",\"Gets the type of the specified field in a result\"],mysql_free_result:[\"bool mysql_free_result(resource result)\",\"Free result memory\"],mysql_get_client_info:[\"string mysql_get_client_info(void)\",\"Returns a string that represents the client library version\"],mysql_get_host_info:[\"string mysql_get_host_info([int link_identifier])\",\"Returns a string describing the type of connection in use, including the server host name\"],mysql_get_proto_info:[\"int mysql_get_proto_info([int link_identifier])\",\"Returns the protocol version used by current connection\"],mysql_get_server_info:[\"string mysql_get_server_info([int link_identifier])\",\"Returns a string that represents the server version number\"],mysql_info:[\"string mysql_info([int link_identifier])\",\"Returns a string containing information about the most recent query\"],mysql_insert_id:[\"int mysql_insert_id([int link_identifier])\",\"Gets the ID generated from the previous INSERT operation\"],mysql_list_dbs:[\"resource mysql_list_dbs([int link_identifier])\",\"List databases available on a MySQL server\"],mysql_list_fields:[\"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\"List MySQL result fields\"],mysql_list_processes:[\"resource mysql_list_processes([int link_identifier])\",\"Returns a result set describing the current server threads\"],mysql_list_tables:[\"resource mysql_list_tables(string database_name [, int link_identifier])\",\"List tables in a MySQL database\"],mysql_num_fields:[\"int mysql_num_fields(resource result)\",\"Gets number of fields in a result\"],mysql_num_rows:[\"int mysql_num_rows(resource result)\",\"Gets number of rows in a result\"],mysql_pconnect:[\"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\"Opens a persistent connection to a MySQL Server\"],mysql_ping:[\"bool mysql_ping([int link_identifier])\",\"Ping a server connection. If no connection then reconnect.\"],mysql_query:[\"resource mysql_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_real_escape_string:[\"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysql_result:[\"mixed mysql_result(resource result, int row [, mixed field])\",\"Gets result data\"],mysql_select_db:[\"bool mysql_select_db(string database_name [, int link_identifier])\",\"Selects a MySQL database\"],mysql_set_charset:[\"bool mysql_set_charset(string csname [, int link_identifier])\",\"sets client character set\"],mysql_stat:[\"string mysql_stat([int link_identifier])\",\"Returns a string containing status information\"],mysql_thread_id:[\"int mysql_thread_id([int link_identifier])\",\"Returns the thread id of current connection\"],mysql_unbuffered_query:[\"resource mysql_unbuffered_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL, without fetching and buffering the result rows\"],mysqli_affected_rows:[\"mixed mysqli_affected_rows(object link)\",\"Get number of affected rows in previous MySQL operation\"],mysqli_autocommit:[\"bool mysqli_autocommit(object link, bool mode)\",\"Turn auto commit on or of\"],mysqli_cache_stats:[\"array mysqli_cache_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_change_user:[\"bool mysqli_change_user(object link, string user, string password, string database)\",\"Change logged-in user of the active connection\"],mysqli_character_set_name:[\"string mysqli_character_set_name(object link)\",\"Returns the name of the character set used for this connection\"],mysqli_close:[\"bool mysqli_close(object link)\",\"Close connection\"],mysqli_commit:[\"bool mysqli_commit(object link)\",\"Commit outstanding actions and close transaction\"],mysqli_connect:[\"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\"Open a connection to a mysql server\"],mysqli_connect_errno:[\"int mysqli_connect_errno(void)\",\"Returns the numerical value of the error message from last connect command\"],mysqli_connect_error:[\"string mysqli_connect_error(void)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_data_seek:[\"bool mysqli_data_seek(object result, int offset)\",\"Move internal result pointer\"],mysqli_debug:[\"void mysqli_debug(string debug)\",\"\"],mysqli_dump_debug_info:[\"bool mysqli_dump_debug_info(object link)\",\"\"],mysqli_embedded_server_end:[\"void mysqli_embedded_server_end(void)\",\"\"],mysqli_embedded_server_start:[\"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\"initialize and start embedded server\"],mysqli_errno:[\"int mysqli_errno(object link)\",\"Returns the numerical value of the error message from previous MySQL operation\"],mysqli_error:[\"string mysqli_error(object link)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_fetch_all:[\"mixed mysqli_fetch_all (object result [,int resulttype])\",\"Fetches all result rows as an associative array, a numeric array, or both\"],mysqli_fetch_array:[\"mixed mysqli_fetch_array (object result [,int resulttype])\",\"Fetch a result row as an associative array, a numeric array, or both\"],mysqli_fetch_assoc:[\"mixed mysqli_fetch_assoc (object result)\",\"Fetch a result row as an associative array\"],mysqli_fetch_field:[\"mixed mysqli_fetch_field (object result)\",\"Get column information from a result and return as an object\"],mysqli_fetch_field_direct:[\"mixed mysqli_fetch_field_direct (object result, int offset)\",\"Fetch meta-data for a single field\"],mysqli_fetch_fields:[\"mixed mysqli_fetch_fields (object result)\",\"Return array of objects containing field meta-data\"],mysqli_fetch_lengths:[\"mixed mysqli_fetch_lengths (object result)\",\"Get the length of each output in a result\"],mysqli_fetch_object:[\"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysqli_fetch_row:[\"array mysqli_fetch_row (object result)\",\"Get a result row as an enumerated array\"],mysqli_field_count:[\"int mysqli_field_count(object link)\",\"Fetch the number of fields returned by the last query for the given link\"],mysqli_field_seek:[\"int mysqli_field_seek(object result, int fieldnr)\",\"Set result pointer to a specified field offset\"],mysqli_field_tell:[\"int mysqli_field_tell(object result)\",\"Get current field offset of result pointer\"],mysqli_free_result:[\"void mysqli_free_result(object result)\",\"Free query result memory for the given result handle\"],mysqli_get_charset:[\"object mysqli_get_charset(object link)\",\"returns a character set object\"],mysqli_get_client_info:[\"string mysqli_get_client_info(void)\",\"Get MySQL client info\"],mysqli_get_client_stats:[\"array mysqli_get_client_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_client_version:[\"int mysqli_get_client_version(void)\",\"Get MySQL client info\"],mysqli_get_connection_stats:[\"array mysqli_get_connection_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_host_info:[\"string mysqli_get_host_info (object link)\",\"Get MySQL host info\"],mysqli_get_proto_info:[\"int mysqli_get_proto_info(object link)\",\"Get MySQL protocol information\"],mysqli_get_server_info:[\"string mysqli_get_server_info(object link)\",\"Get MySQL server info\"],mysqli_get_server_version:[\"int mysqli_get_server_version(object link)\",\"Return the MySQL version for the server referenced by the given link\"],mysqli_get_warnings:[\"object mysqli_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}'],mysqli_info:[\"string mysqli_info(object link)\",\"Get information about the most recent query\"],mysqli_init:[\"resource mysqli_init(void)\",\"Initialize mysqli and return a resource for use with mysql_real_connect\"],mysqli_insert_id:[\"mixed mysqli_insert_id(object link)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_kill:[\"bool mysqli_kill(object link, int processid)\",\"Kill a mysql process on the server\"],mysqli_link_construct:[\"object mysqli_link_construct()\",\"\"],mysqli_more_results:[\"bool mysqli_more_results(object link)\",\"check if there any more query results from a multi query\"],mysqli_multi_query:[\"bool mysqli_multi_query(object link, string query)\",\"allows to execute multiple queries\"],mysqli_next_result:[\"bool mysqli_next_result(object link)\",\"read next result from multi_query\"],mysqli_num_fields:[\"int mysqli_num_fields(object result)\",\"Get number of fields in result\"],mysqli_num_rows:[\"mixed mysqli_num_rows(object result)\",\"Get number of rows in result\"],mysqli_options:[\"bool mysqli_options(object link, int flags, mixed values)\",\"Set options\"],mysqli_ping:[\"bool mysqli_ping(object link)\",\"Ping a server connection or reconnect if there is no connection\"],mysqli_poll:[\"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\"Poll connections\"],mysqli_prepare:[\"mixed mysqli_prepare(object link, string query)\",\"Prepare a SQL statement for execution\"],mysqli_query:[\"mixed mysqli_query(object link, string query [,int resultmode]) */\",'PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Os|l\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Empty query\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid value for resultmode\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT'],mysqli_real_connect:[\"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\"Open a connection to a mysql server\"],mysqli_real_escape_string:[\"string mysqli_real_escape_string(object link, string escapestr)\",\"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysqli_real_query:[\"bool mysqli_real_query(object link, string query)\",\"Binary-safe version of mysql_query()\"],mysqli_reap_async_query:[\"int mysqli_reap_async_query(object link)\",\"Poll connections\"],mysqli_refresh:[\"bool mysqli_refresh(object link, long options)\",\"Flush tables or caches, or reset replication server information\"],mysqli_report:[\"bool mysqli_report(int flags)\",\"sets report level\"],mysqli_rollback:[\"bool mysqli_rollback(object link)\",\"Undo actions from current transaction\"],mysqli_select_db:[\"bool mysqli_select_db(object link, string dbname)\",\"Select a MySQL database\"],mysqli_set_charset:[\"bool mysqli_set_charset(object link, string csname)\",\"sets client character set\"],mysqli_set_local_infile_default:[\"void mysqli_set_local_infile_default(object link)\",\"unsets user defined handler for load local infile command\"],mysqli_set_local_infile_handler:[\"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\"Set callback functions for LOAD DATA LOCAL INFILE\"],mysqli_sqlstate:[\"string mysqli_sqlstate(object link)\",\"Returns the SQLSTATE error from previous MySQL operation\"],mysqli_ssl_set:[\"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\"\"],mysqli_stat:[\"mixed mysqli_stat(object link)\",\"Get current system status\"],mysqli_stmt_affected_rows:[\"mixed mysqli_stmt_affected_rows(object stmt)\",\"Return the number of rows affected in the last query for the given link\"],mysqli_stmt_attr_get:[\"int mysqli_stmt_attr_get(object stmt, long attr)\",\"\"],mysqli_stmt_attr_set:[\"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\"\"],mysqli_stmt_bind_param:[\"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\"Bind variables to a prepared statement as parameters\"],mysqli_stmt_bind_result:[\"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\"Bind variables to a prepared statement for result storage\"],mysqli_stmt_close:[\"bool mysqli_stmt_close(object stmt)\",\"Close statement\"],mysqli_stmt_data_seek:[\"void mysqli_stmt_data_seek(object stmt, int offset)\",\"Move internal result pointer\"],mysqli_stmt_errno:[\"int mysqli_stmt_errno(object stmt)\",\"\"],mysqli_stmt_error:[\"string mysqli_stmt_error(object stmt)\",\"\"],mysqli_stmt_execute:[\"bool mysqli_stmt_execute(object stmt)\",\"Execute a prepared statement\"],mysqli_stmt_fetch:[\"mixed mysqli_stmt_fetch(object stmt)\",\"Fetch results from a prepared statement into the bound variables\"],mysqli_stmt_field_count:[\"int mysqli_stmt_field_count(object stmt) {\",\"Return the number of result columns for the given statement\"],mysqli_stmt_free_result:[\"void mysqli_stmt_free_result(object stmt)\",\"Free stored result memory for the given statement handle\"],mysqli_stmt_get_result:[\"object mysqli_stmt_get_result(object link)\",\"Buffer result set on client\"],mysqli_stmt_get_warnings:[\"object mysqli_stmt_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \"mysqli_stmt\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_stmt_init:[\"mixed mysqli_stmt_init(object link)\",\"Initialize statement object\"],mysqli_stmt_insert_id:[\"mixed mysqli_stmt_insert_id(object stmt)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_stmt_next_result:[\"bool mysqli_stmt_next_result(object link)\",\"read next result from multi_query\"],mysqli_stmt_num_rows:[\"mixed mysqli_stmt_num_rows(object stmt)\",\"Return the number of rows in statements result set\"],mysqli_stmt_param_count:[\"int mysqli_stmt_param_count(object stmt)\",\"Return the number of parameter for the given statement\"],mysqli_stmt_prepare:[\"bool mysqli_stmt_prepare(object stmt, string query)\",\"prepare server side statement with query\"],mysqli_stmt_reset:[\"bool mysqli_stmt_reset(object stmt)\",\"reset a prepared statement\"],mysqli_stmt_result_metadata:[\"mixed mysqli_stmt_result_metadata(object stmt)\",\"return result set from statement\"],mysqli_stmt_send_long_data:[\"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\"\"],mysqli_stmt_sqlstate:[\"string mysqli_stmt_sqlstate(object stmt)\",\"\"],mysqli_stmt_store_result:[\"bool mysqli_stmt_store_result(stmt)\",\"\"],mysqli_store_result:[\"object mysqli_store_result(object link)\",\"Buffer result set on client\"],mysqli_thread_id:[\"int mysqli_thread_id(object link)\",\"Return the current thread ID\"],mysqli_thread_safe:[\"bool mysqli_thread_safe(void)\",\"Return whether thread safety is given or not\"],mysqli_use_result:[\"mixed mysqli_use_result(object link)\",\"Directly retrieve query results - do not buffer results on client side\"],mysqli_warning_count:[\"int mysqli_warning_count (object link)\",\"Return number of warnings from the last query for the given link\"],natcasesort:[\"void natcasesort(array &array_arg)\",\"Sort an array using case-insensitive natural sort\"],natsort:[\"void natsort(array &array_arg)\",\"Sort an array using natural sort\"],next:[\"mixed next(array array_arg)\",\"Move array argument's internal pointer to the next element and return it\"],ngettext:[\"string ngettext(string MSGID1, string MSGID2, int N)\",\"Plural version of gettext()\"],nl2br:[\"string nl2br(string str [, bool is_xhtml])\",\"Converts newlines to HTML line breaks\"],nl_langinfo:[\"string nl_langinfo(int item)\",\"Query language and locale information\"],normalizer_is_normalize:[\"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\"* Test if a string is in a given normalization form.\"],normalizer_normalize:[\"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\"* Normalize a string.\"],nsapi_request_headers:[\"array nsapi_request_headers(void)\",\"Get all headers from the request\"],nsapi_response_headers:[\"array nsapi_response_headers(void)\",\"Get all headers from the response\"],nsapi_virtual:[\"bool nsapi_virtual(string uri)\",\"Perform an NSAPI sub-request\"],number_format:[\"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\"Formats a number with grouped thousands\"],numfmt_create:[\"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\"* Create number formatter.\"],numfmt_format:[\"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\"* Format a number.\"],numfmt_format_currency:[\"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\"* Format a number as currency.\"],numfmt_get_attribute:[\"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_get_error_code:[\"int numfmt_get_error_code( NumberFormatter $nf )\",\"* Get formatter's last error code.\"],numfmt_get_error_message:[\"string numfmt_get_error_message( NumberFormatter $nf )\",\"* Get text description for formatter's last error code.\"],numfmt_get_locale:[\"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\"* Get formatter locale.\"],numfmt_get_pattern:[\"string numfmt_get_pattern( NumberFormatter $nf )\",\"* Get formatter pattern.\"],numfmt_get_symbol:[\"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\"* Get formatter symbol value.\"],numfmt_get_text_attribute:[\"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_parse:[\"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\"* Parse a number.\"],numfmt_parse_currency:[\"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\"* Parse a number as currency.\"],numfmt_parse_message:[\"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\"* Parse a message.\"],numfmt_set_attribute:[\"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\"* Get formatter attribute value.\"],numfmt_set_pattern:[\"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\"* Set formatter pattern.\"],numfmt_set_symbol:[\"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\"* Set formatter symbol value.\"],numfmt_set_text_attribute:[\"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\"* Get formatter attribute value.\"],ob_clean:[\"bool ob_clean(void)\",\"Clean (delete) the current output buffer\"],ob_end_clean:[\"bool ob_end_clean(void)\",\"Clean the output buffer, and delete current output buffer\"],ob_end_flush:[\"bool ob_end_flush(void)\",\"Flush (send) the output buffer, and delete current output buffer\"],ob_flush:[\"bool ob_flush(void)\",\"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"],ob_get_clean:[\"bool ob_get_clean(void)\",\"Get current buffer contents and delete current output buffer\"],ob_get_contents:[\"string ob_get_contents(void)\",\"Return the contents of the output buffer\"],ob_get_flush:[\"bool ob_get_flush(void)\",\"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"],ob_get_length:[\"int ob_get_length(void)\",\"Return the length of the output buffer\"],ob_get_level:[\"int ob_get_level(void)\",\"Return the nesting level of the output buffer\"],ob_get_status:[\"false|array ob_get_status([bool full_status])\",\"Return the status of the active or all output buffers\"],ob_gzhandler:[\"string ob_gzhandler(string str, int mode)\",\"Encode str based on accept-encoding setting - designed to be called from ob_start()\"],ob_iconv_handler:[\"string ob_iconv_handler(string contents, int status)\",\"Returns str in output buffer converted to the iconv.output_encoding character set\"],ob_implicit_flush:[\"void ob_implicit_flush([int flag])\",\"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"],ob_list_handlers:[\"false|array ob_list_handlers()\",\"*  List all output_buffers in an array\"],ob_start:[\"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\"Turn on Output Buffering (specifying an optional output handler).\"],oci_bind_array_by_name:[\"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\"Bind a PHP array to an Oracle PL/SQL type by name\"],oci_bind_by_name:[\"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\"Bind a PHP variable to an Oracle placeholder by name\"],oci_cancel:[\"bool oci_cancel(resource stmt)\",\"Cancel reading from a cursor\"],oci_close:[\"bool oci_close(resource connection)\",\"Disconnect from database\"],oci_collection_append:[\"bool oci_collection_append(string value)\",\"Append an object to the collection\"],oci_collection_assign:[\"bool oci_collection_assign(object from)\",\"Assign a collection from another existing collection\"],oci_collection_element_assign:[\"bool oci_collection_element_assign(int index, string val)\",\"Assign element val to collection at index ndx\"],oci_collection_element_get:[\"string oci_collection_element_get(int ndx)\",\"Retrieve the value at collection index ndx\"],oci_collection_max:[\"int oci_collection_max()\",\"Return the max value of a collection. For a varray this is the maximum length of the array\"],oci_collection_size:[\"int oci_collection_size()\",\"Return the size of a collection\"],oci_collection_trim:[\"bool oci_collection_trim(int num)\",\"Trim num elements from the end of a collection\"],oci_commit:[\"bool oci_commit(resource connection)\",\"Commit the current context\"],oci_connect:[\"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_define_by_name:[\"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\"Define a PHP variable to an Oracle column by name\"],oci_error:[\"array oci_error([resource stmt|connection|global])\",\"Return the last error of stmt|connection|global. If no error happened returns false.\"],oci_execute:[\"bool oci_execute(resource stmt [, int mode])\",\"Execute a parsed statement\"],oci_fetch:[\"bool oci_fetch(resource stmt)\",\"Prepare a new row of data for reading\"],oci_fetch_all:[\"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\"Fetch all rows of result data into an array\"],oci_fetch_array:[\"array oci_fetch_array( resource stmt [, int mode ])\",\"Fetch a result row as an array\"],oci_fetch_assoc:[\"array oci_fetch_assoc( resource stmt )\",\"Fetch a result row as an associative array\"],oci_fetch_object:[\"object oci_fetch_object( resource stmt )\",\"Fetch a result row as an object\"],oci_fetch_row:[\"array oci_fetch_row( resource stmt )\",\"Fetch a result row as an enumerated array\"],oci_field_is_null:[\"bool oci_field_is_null(resource stmt, int col)\",\"Tell whether a column is NULL\"],oci_field_name:[\"string oci_field_name(resource stmt, int col)\",\"Tell the name of a column\"],oci_field_precision:[\"int oci_field_precision(resource stmt, int col)\",\"Tell the precision of a column\"],oci_field_scale:[\"int oci_field_scale(resource stmt, int col)\",\"Tell the scale of a column\"],oci_field_size:[\"int oci_field_size(resource stmt, int col)\",\"Tell the maximum data size of a column\"],oci_field_type:[\"mixed oci_field_type(resource stmt, int col)\",\"Tell the data type of a column\"],oci_field_type_raw:[\"int oci_field_type_raw(resource stmt, int col)\",\"Tell the raw oracle data type of a column\"],oci_free_collection:[\"bool oci_free_collection()\",\"Deletes collection object\"],oci_free_descriptor:[\"bool oci_free_descriptor()\",\"Deletes large object description\"],oci_free_statement:[\"bool oci_free_statement(resource stmt)\",\"Free all resources associated with a statement\"],oci_internal_debug:[\"void oci_internal_debug(int onoff)\",\"Toggle internal debugging output for the OCI extension\"],oci_lob_append:[\"bool oci_lob_append( object lob )\",\"Appends data from a LOB to another LOB\"],oci_lob_close:[\"bool oci_lob_close()\",\"Closes lob descriptor\"],oci_lob_copy:[\"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\"Copies data from a LOB to another LOB\"],oci_lob_eof:[\"bool oci_lob_eof()\",\"Checks if EOF is reached\"],oci_lob_erase:[\"int oci_lob_erase( [ int offset [, int length ] ] )\",\"Erases a specified portion of the internal LOB, starting at a specified offset\"],oci_lob_export:[\"bool oci_lob_export([string filename [, int start [, int length]]])\",\"Writes a large object into a file\"],oci_lob_flush:[\"bool oci_lob_flush( [ int flag ] )\",\"Flushes the LOB buffer\"],oci_lob_import:[\"bool oci_lob_import( string filename )\",\"Loads file into a LOB\"],oci_lob_is_equal:[\"bool oci_lob_is_equal( object lob1, object lob2 )\",\"Tests to see if two LOB/FILE locators are equal\"],oci_lob_load:[\"string oci_lob_load()\",\"Loads a large object\"],oci_lob_read:[\"string oci_lob_read( int length )\",\"Reads particular part of a large object\"],oci_lob_rewind:[\"bool oci_lob_rewind()\",\"Rewind pointer of a LOB\"],oci_lob_save:[\"bool oci_lob_save( string data [, int offset ])\",\"Saves a large object\"],oci_lob_seek:[\"bool oci_lob_seek( int offset [, int whence ])\",\"Moves the pointer of a LOB\"],oci_lob_size:[\"int oci_lob_size()\",\"Returns size of a large object\"],oci_lob_tell:[\"int oci_lob_tell()\",\"Tells LOB pointer position\"],oci_lob_truncate:[\"bool oci_lob_truncate( [ int length ])\",\"Truncates a LOB\"],oci_lob_write:[\"int oci_lob_write( string string [, int length ])\",\"Writes data to current position of a LOB\"],oci_lob_write_temporary:[\"bool oci_lob_write_temporary(string var [, int lob_type])\",\"Writes temporary blob\"],oci_new_collection:[\"object oci_new_collection(resource connection, string tdo [, string schema])\",\"Initialize a new collection\"],oci_new_connect:[\"resource oci_new_connect(string user, string pass [, string db])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_new_cursor:[\"resource oci_new_cursor(resource connection)\",\"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"],oci_new_descriptor:[\"object oci_new_descriptor(resource connection [, int type])\",\"Initialize a new empty descriptor LOB/FILE (LOB is default)\"],oci_num_fields:[\"int oci_num_fields(resource stmt)\",\"Return the number of result columns in a statement\"],oci_num_rows:[\"int oci_num_rows(resource stmt)\",\"Return the row count of an OCI statement\"],oci_parse:[\"resource oci_parse(resource connection, string query)\",\"Parse a query and return a statement\"],oci_password_change:[\"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\"Changes the password of an account\"],oci_pconnect:[\"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"],oci_result:[\"string oci_result(resource stmt, mixed column)\",\"Return a single column of result data\"],oci_rollback:[\"bool oci_rollback(resource connection)\",\"Rollback the current context\"],oci_server_version:[\"string oci_server_version(resource connection)\",\"Return a string containing server version information\"],oci_set_action:[\"bool oci_set_action(resource connection, string value)\",\"Sets the action attribute on the connection\"],oci_set_client_identifier:[\"bool oci_set_client_identifier(resource connection, string value)\",\"Sets the client identifier attribute on the connection\"],oci_set_client_info:[\"bool oci_set_client_info(resource connection, string value)\",\"Sets the client info attribute on the connection\"],oci_set_edition:[\"bool oci_set_edition(string value)\",\"Sets the edition attribute for all subsequent connections created\"],oci_set_module_name:[\"bool oci_set_module_name(resource connection, string value)\",\"Sets the module attribute on the connection\"],oci_set_prefetch:[\"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"],oci_statement_type:[\"string oci_statement_type(resource stmt)\",\"Return the query type of an OCI statement\"],ocifetchinto:[\"int ocifetchinto(resource stmt, array &output [, int mode])\",\"Fetch a row of result data into an array\"],ocigetbufferinglob:[\"bool ocigetbufferinglob()\",\"Returns current state of buffering for a LOB\"],ocisetbufferinglob:[\"bool ocisetbufferinglob( boolean flag )\",\"Enables/disables buffering for a LOB\"],octdec:[\"int octdec(string octal_number)\",\"Returns the decimal equivalent of an octal string\"],odbc_autocommit:[\"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\"Toggle autocommit mode or get status\"],odbc_binmode:[\"bool odbc_binmode(int result_id, int mode)\",\"Handle binary column data\"],odbc_close:[\"void odbc_close(resource connection_id)\",\"Close an ODBC connection\"],odbc_close_all:[\"void odbc_close_all(void)\",\"Close all ODBC connections\"],odbc_columnprivileges:[\"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"],odbc_columns:[\"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\"Returns a result identifier that can be used to fetch a list of column names in specified tables\"],odbc_commit:[\"bool odbc_commit(resource connection_id)\",\"Commit an ODBC transaction\"],odbc_connect:[\"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\"Connect to a datasource\"],odbc_cursor:[\"string odbc_cursor(resource result_id)\",\"Get cursor name\"],odbc_data_source:[\"array odbc_data_source(resource connection_id, int fetch_type)\",\"Return information about the currently connected data source\"],odbc_error:[\"string odbc_error([resource connection_id])\",\"Get the last error code\"],odbc_errormsg:[\"string odbc_errormsg([resource connection_id])\",\"Get the last error message\"],odbc_exec:[\"resource odbc_exec(resource connection_id, string query [, int flags])\",\"Prepare and execute an SQL statement\"],odbc_execute:[\"bool odbc_execute(resource result_id [, array parameters_array])\",\"Execute a prepared statement\"],odbc_fetch_array:[\"array odbc_fetch_array(int result [, int rownumber])\",\"Fetch a result row as an associative array\"],odbc_fetch_into:[\"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\"Fetch one result row into an array\"],odbc_fetch_object:[\"object odbc_fetch_object(int result [, int rownumber])\",\"Fetch a result row as an object\"],odbc_fetch_row:[\"bool odbc_fetch_row(resource result_id [, int row_number])\",\"Fetch a row\"],odbc_field_len:[\"int odbc_field_len(resource result_id, int field_number)\",\"Get the length (precision) of a column\"],odbc_field_name:[\"string odbc_field_name(resource result_id, int field_number)\",\"Get a column name\"],odbc_field_num:[\"int odbc_field_num(resource result_id, string field_name)\",\"Return column number\"],odbc_field_scale:[\"int odbc_field_scale(resource result_id, int field_number)\",\"Get the scale of a column\"],odbc_field_type:[\"string odbc_field_type(resource result_id, int field_number)\",\"Get the datatype of a column\"],odbc_foreignkeys:[\"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"],odbc_free_result:[\"bool odbc_free_result(resource result_id)\",\"Free resources associated with a result\"],odbc_gettypeinfo:[\"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\"Returns a result identifier containing information about data types supported by the data source\"],odbc_longreadlen:[\"bool odbc_longreadlen(int result_id, int length)\",\"Handle LONG columns\"],odbc_next_result:[\"bool odbc_next_result(resource result_id)\",\"Checks if multiple results are avaiable\"],odbc_num_fields:[\"int odbc_num_fields(resource result_id)\",\"Get number of columns in a result\"],odbc_num_rows:[\"int odbc_num_rows(resource result_id)\",\"Get number of rows in a result\"],odbc_pconnect:[\"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\"Establish a persistent connection to a datasource\"],odbc_prepare:[\"resource odbc_prepare(resource connection_id, string query)\",\"Prepares a statement for execution\"],odbc_primarykeys:[\"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\"Returns a result identifier listing the column names that comprise the primary key for a table\"],odbc_procedurecolumns:[\"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"],odbc_procedures:[\"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\"Returns a result identifier containg the list of procedure names in a datasource\"],odbc_result:[\"mixed odbc_result(resource result_id, mixed field)\",\"Get result data\"],odbc_result_all:[\"int odbc_result_all(resource result_id [, string format])\",\"Print result as HTML table\"],odbc_rollback:[\"bool odbc_rollback(resource connection_id)\",\"Rollback a transaction\"],odbc_setoption:[\"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\"Sets connection or statement options\"],odbc_specialcolumns:[\"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"],odbc_statistics:[\"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"],odbc_tableprivileges:[\"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\"Returns a result identifier containing a list of tables and the privileges associated with each table\"],odbc_tables:[\"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\"Call the SQLTables function\"],opendir:[\"mixed opendir(string path[, resource context])\",\"Open a directory and return a dir_handle\"],openlog:[\"bool openlog(string ident, int option, int facility)\",\"Open connection to system logger\"],openssl_csr_export:[\"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\"Exports a CSR to file or a var\"],openssl_csr_export_to_file:[\"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\"Exports a CSR to file\"],openssl_csr_get_public_key:[\"mixed openssl_csr_get_public_key(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_get_subject:[\"mixed openssl_csr_get_subject(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_new:[\"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\"Generates a privkey and CSR\"],openssl_csr_sign:[\"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\"Signs a cert with another CERT\"],openssl_decrypt:[\"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\"Takes raw or base64 encoded string and dectupt it using given method and key\"],openssl_dh_compute_key:[\"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\"Computes shared sicret for public value of remote DH key and local DH key\"],openssl_digest:[\"string openssl_digest(string data, string method [, bool raw_output=false])\",\"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"],openssl_encrypt:[\"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\"Encrypts given data with given method and key, returns raw or base64 encoded string\"],openssl_error_string:[\"mixed openssl_error_string(void)\",\"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"],openssl_get_cipher_methods:[\"array openssl_get_cipher_methods([bool aliases = false])\",\"Return array of available cipher methods\"],openssl_get_md_methods:[\"array openssl_get_md_methods([bool aliases = false])\",\"Return array of available digest methods\"],openssl_open:[\"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\"Opens data\"],openssl_pkcs12_export:[\"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS12 to a var\"],openssl_pkcs12_export_to_file:[\"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS to file\"],openssl_pkcs12_read:[\"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\"Parses a PKCS12 to an array\"],openssl_pkcs7_decrypt:[\"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"],openssl_pkcs7_encrypt:[\"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"],openssl_pkcs7_sign:[\"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"],openssl_pkcs7_verify:[\"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"],openssl_pkey_export:[\"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\"Gets an exportable representation of a key into a string or file\"],openssl_pkey_export_to_file:[\"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\"Gets an exportable representation of a key into a file\"],openssl_pkey_free:[\"void openssl_pkey_free(int key)\",\"Frees a key\"],openssl_pkey_get_details:[\"resource openssl_pkey_get_details(resource key)\",\"returns an array with the key details (bits, pkey, type)\"],openssl_pkey_get_private:[\"int openssl_pkey_get_private(string key [, string passphrase])\",\"Gets private keys\"],openssl_pkey_get_public:[\"int openssl_pkey_get_public(mixed cert)\",\"Gets public key from X.509 certificate\"],openssl_pkey_new:[\"resource openssl_pkey_new([array configargs])\",\"Generates a new private key\"],openssl_private_decrypt:[\"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\"Decrypts data with private key\"],openssl_private_encrypt:[\"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with private key\"],openssl_public_decrypt:[\"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\"Decrypts data with public key\"],openssl_public_encrypt:[\"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with public key\"],openssl_random_pseudo_bytes:[\"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\"Returns a string of the length specified filled with random pseudo bytes\"],openssl_seal:[\"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\"Seals data\"],openssl_sign:[\"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\"Signs data\"],openssl_verify:[\"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\"Verifys data\"],openssl_x509_check_private_key:[\"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\"Checks if a private key corresponds to a CERT\"],openssl_x509_checkpurpose:[\"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"],openssl_x509_export:[\"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_export_to_file:[\"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_free:[\"void openssl_x509_free(resource x509)\",\"Frees X.509 certificates\"],openssl_x509_parse:[\"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\"Returns an array of the fields/values of the CERT\"],openssl_x509_read:[\"resource openssl_x509_read(mixed cert)\",\"Reads X.509 certificates\"],ord:[\"int ord(string character)\",\"Returns ASCII value of character\"],output_add_rewrite_var:[\"bool output_add_rewrite_var(string name, string value)\",\"Add URL rewriter values\"],output_reset_rewrite_vars:[\"bool output_reset_rewrite_vars(void)\",\"Reset(clear) URL rewriter values\"],pack:[\"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Takes one or more arguments and packs them into a binary string according to the format argument\"],parse_ini_file:[\"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\"Parse configuration file\"],parse_ini_string:[\"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\"Parse configuration string\"],parse_locale:[\"static array parse_locale($locale)\",\"* parses a locale-id into an array the different parts of it\"],parse_str:[\"void parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],parse_url:[\"mixed parse_url(string url, [int url_component])\",\"Parse a URL and return its components\"],passthru:[\"void passthru(string command [, int &return_value])\",\"Execute an external program and display raw output\"],pathinfo:[\"array pathinfo(string path[, int options])\",\"Returns information about a certain string\"],pclose:[\"int pclose(resource fp)\",\"Close a file pointer opened by popen()\"],pcnlt_sigwaitinfo:[\"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\"Synchronously wait for queued signals\"],pcntl_alarm:[\"int pcntl_alarm(int seconds)\",\"Set an alarm clock for delivery of a signal\"],pcntl_exec:[\"bool pcntl_exec(string path [, array args [, array envs]])\",\"Executes specified program in current process space as defined by exec(2)\"],pcntl_fork:[\"int pcntl_fork(void)\",\"Forks the currently running process following the same behavior as the UNIX fork() system call\"],pcntl_getpriority:[\"int pcntl_getpriority([int pid [, int process_identifier]])\",\"Get the priority of any process\"],pcntl_setpriority:[\"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\"Change the priority of any process\"],pcntl_signal:[\"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\"Assigns a system signal handler to a PHP function\"],pcntl_signal_dispatch:[\"bool pcntl_signal_dispatch()\",\"Dispatch signals to signal handlers\"],pcntl_sigprocmask:[\"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\"Examine and change blocked signals\"],pcntl_sigtimedwait:[\"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\"Wait for queued signals\"],pcntl_wait:[\"int pcntl_wait(int &status)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_waitpid:[\"int pcntl_waitpid(int pid, int &status, int options)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_wexitstatus:[\"int pcntl_wexitstatus(int status)\",\"Returns the status code of a child's exit\"],pcntl_wifexited:[\"bool pcntl_wifexited(int status)\",\"Returns true if the child status code represents a successful exit\"],pcntl_wifsignaled:[\"bool pcntl_wifsignaled(int status)\",\"Returns true if the child status code represents a process that was terminated due to a signal\"],pcntl_wifstopped:[\"bool pcntl_wifstopped(int status)\",\"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"],pcntl_wstopsig:[\"int pcntl_wstopsig(int status)\",\"Returns the number of the signal that caused the process to stop who's status code is passed\"],pcntl_wtermsig:[\"int pcntl_wtermsig(int status)\",\"Returns the number of the signal that terminated the process who's status code is passed\"],pdo_drivers:[\"array pdo_drivers()\",\"Return array of available PDO drivers\"],pfsockopen:[\"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open persistent Internet or Unix domain socket connection\"],pg_affected_rows:[\"int pg_affected_rows(resource result)\",\"Returns the number of affected tuples\"],pg_cancel_query:[\"bool pg_cancel_query(resource connection)\",\"Cancel request\"],pg_client_encoding:[\"string pg_client_encoding([resource connection])\",\"Get the current client encoding\"],pg_close:[\"bool pg_close([resource connection])\",\"Close a PostgreSQL connection\"],pg_connect:[\"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a PostgreSQL connection\"],pg_connection_busy:[\"bool pg_connection_busy(resource connection)\",\"Get connection is busy or not\"],pg_connection_reset:[\"bool pg_connection_reset(resource connection)\",\"Reset connection (reconnect)\"],pg_connection_status:[\"int pg_connection_status(resource connnection)\",\"Get connection status\"],pg_convert:[\"array pg_convert(resource db, string table, array values[, int options])\",\"Check and convert values for PostgreSQL SQL statement\"],pg_copy_from:[\"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\"Copy table from array\"],pg_copy_to:[\"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\"Copy table to array\"],pg_dbname:[\"string pg_dbname([resource connection])\",\"Get the database name\"],pg_delete:[\"mixed pg_delete(resource db, string table, array ids[, int options])\",\"Delete records has ids (id=>value)\"],pg_end_copy:[\"bool pg_end_copy([resource connection])\",\"Sync with backend. Completes the Copy command\"],pg_escape_bytea:[\"string pg_escape_bytea([resource connection,] string data)\",\"Escape binary for bytea type\"],pg_escape_string:[\"string pg_escape_string([resource connection,] string data)\",\"Escape string for text/char type\"],pg_execute:[\"resource pg_execute([resource connection,] string stmtname, array params)\",\"Execute a prepared query\"],pg_fetch_all:[\"array pg_fetch_all(resource result)\",\"Fetch all rows into array\"],pg_fetch_all_columns:[\"array pg_fetch_all_columns(resource result [, int column_number])\",\"Fetch all rows into array\"],pg_fetch_array:[\"array pg_fetch_array(resource result [, int row [, int result_type]])\",\"Fetch a row as an array\"],pg_fetch_assoc:[\"array pg_fetch_assoc(resource result [, int row])\",\"Fetch a row as an assoc array\"],pg_fetch_object:[\"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\"Fetch a row as an object\"],pg_fetch_result:[\"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\"Returns values from a result identifier\"],pg_fetch_row:[\"array pg_fetch_row(resource result [, int row [, int result_type]])\",\"Get a row as an enumerated array\"],pg_field_is_null:[\"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\"Test if a field is NULL\"],pg_field_name:[\"string pg_field_name(resource result, int field_number)\",\"Returns the name of the field\"],pg_field_num:[\"int pg_field_num(resource result, string field_name)\",\"Returns the field number of the named field\"],pg_field_prtlen:[\"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\"Returns the printed length\"],pg_field_size:[\"int pg_field_size(resource result, int field_number)\",\"Returns the internal size of the field\"],pg_field_table:[\"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\"Returns the name of the table field belongs to, or table's oid if oid_only is true\"],pg_field_type:[\"string pg_field_type(resource result, int field_number)\",\"Returns the type name for the given field\"],pg_field_type_oid:[\"string pg_field_type_oid(resource result, int field_number)\",\"Returns the type oid for the given field\"],pg_free_result:[\"bool pg_free_result(resource result)\",\"Free result memory\"],pg_get_notify:[\"array pg_get_notify([resource connection[, result_type]])\",\"Get asynchronous notification\"],pg_get_pid:[\"int pg_get_pid([resource connection)\",\"Get backend(server) pid\"],pg_get_result:[\"resource pg_get_result(resource connection)\",\"Get asynchronous query result\"],pg_host:[\"string pg_host([resource connection])\",\"Returns the host name associated with the connection\"],pg_insert:[\"mixed pg_insert(resource db, string table, array values[, int options])\",\"Insert values (filed=>value) to table\"],pg_last_error:[\"string pg_last_error([resource connection])\",\"Get the error message string\"],pg_last_notice:[\"string pg_last_notice(resource connection)\",\"Returns the last notice set by the backend\"],pg_last_oid:[\"string pg_last_oid(resource result)\",\"Returns the last object identifier\"],pg_lo_close:[\"bool pg_lo_close(resource large_object)\",\"Close a large object\"],pg_lo_create:[\"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\"Create a large object\"],pg_lo_export:[\"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\"Export large object direct to filesystem\"],pg_lo_import:[\"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\"Import large object direct from filesystem\"],pg_lo_open:[\"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\"Open a large object and return fd\"],pg_lo_read:[\"string pg_lo_read(resource large_object [, int len])\",\"Read a large object\"],pg_lo_read_all:[\"int pg_lo_read_all(resource large_object)\",\"Read a large object and send straight to browser\"],pg_lo_seek:[\"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\"Seeks position of large object\"],pg_lo_tell:[\"int pg_lo_tell(resource large_object)\",\"Returns current position of large object\"],pg_lo_unlink:[\"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\"Delete a large object\"],pg_lo_write:[\"int pg_lo_write(resource large_object, string buf [, int len])\",\"Write a large object\"],pg_meta_data:[\"array pg_meta_data(resource db, string table)\",\"Get meta_data\"],pg_num_fields:[\"int pg_num_fields(resource result)\",\"Return the number of fields in the result\"],pg_num_rows:[\"int pg_num_rows(resource result)\",\"Return the number of rows in the result\"],pg_options:[\"string pg_options([resource connection])\",\"Get the options associated with the connection\"],pg_parameter_status:[\"string|false pg_parameter_status([resource connection,] string param_name)\",\"Returns the value of a server parameter\"],pg_pconnect:[\"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a persistent PostgreSQL connection\"],pg_ping:[\"bool pg_ping([resource connection])\",\"Ping database. If connection is bad, try to reconnect.\"],pg_port:[\"int pg_port([resource connection])\",\"Return the port number associated with the connection\"],pg_prepare:[\"resource pg_prepare([resource connection,] string stmtname, string query)\",\"Prepare a query for future execution\"],pg_put_line:[\"bool pg_put_line([resource connection,] string query)\",\"Send null-terminated string to backend server\"],pg_query:[\"resource pg_query([resource connection,] string query)\",\"Execute a query\"],pg_query_params:[\"resource pg_query_params([resource connection,] string query, array params)\",\"Execute a query\"],pg_result_error:[\"string pg_result_error(resource result)\",\"Get error message associated with result\"],pg_result_error_field:[\"string pg_result_error_field(resource result, int fieldcode)\",\"Get error message field associated with result\"],pg_result_seek:[\"bool pg_result_seek(resource result, int offset)\",\"Set internal row offset\"],pg_result_status:[\"mixed pg_result_status(resource result[, long result_type])\",\"Get status of query result\"],pg_select:[\"mixed pg_select(resource db, string table, array ids[, int options])\",\"Select records that has ids (id=>value)\"],pg_send_execute:[\"bool pg_send_execute(resource connection, string stmtname, array params)\",\"Executes prevriously prepared stmtname asynchronously\"],pg_send_prepare:[\"bool pg_send_prepare(resource connection, string stmtname, string query)\",\"Asynchronously prepare a query for future execution\"],pg_send_query:[\"bool pg_send_query(resource connection, string query)\",\"Send asynchronous query\"],pg_send_query_params:[\"bool pg_send_query_params(resource connection, string query, array params)\",\"Send asynchronous parameterized query\"],pg_set_client_encoding:[\"int pg_set_client_encoding([resource connection,] string encoding)\",\"Set client encoding\"],pg_set_error_verbosity:[\"int pg_set_error_verbosity([resource connection,] int verbosity)\",\"Set error verbosity\"],pg_trace:[\"bool pg_trace(string filename [, string mode [, resource connection]])\",\"Enable tracing a PostgreSQL connection\"],pg_transaction_status:[\"int pg_transaction_status(resource connnection)\",\"Get transaction status\"],pg_tty:[\"string pg_tty([resource connection])\",\"Return the tty name associated with the connection\"],pg_unescape_bytea:[\"string pg_unescape_bytea(string data)\",\"Unescape binary for bytea type\"],pg_untrace:[\"bool pg_untrace([resource connection])\",\"Disable tracing of a PostgreSQL connection\"],pg_update:[\"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\"Update table using values (field=>value) and ids (id=>value)\"],pg_version:[\"array pg_version([resource connection])\",\"Returns an array with client, protocol and server version (when available)\"],php_egg_logo_guid:[\"string php_egg_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_ini_loaded_file:[\"string php_ini_loaded_file(void)\",\"Return the actual loaded ini filename\"],php_ini_scanned_files:[\"string php_ini_scanned_files(void)\",\"Return comma-separated string of .ini files parsed from the additional ini dir\"],php_logo_guid:[\"string php_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_real_logo_guid:[\"string php_real_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_sapi_name:[\"string php_sapi_name(void)\",\"Return the current SAPI module name\"],php_snmpv3:[\"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"],php_strip_whitespace:[\"string php_strip_whitespace(string file_name)\",\"Return source with stripped comments and whitespace\"],php_uname:[\"string php_uname(void)\",\"Return information about the system PHP was built on\"],phpcredits:[\"void phpcredits([int flag])\",\"Prints the list of people who've contributed to the PHP project\"],phpinfo:[\"void phpinfo([int what])\",\"Output a page of useful information about PHP and the current request\"],phpversion:[\"string phpversion([string extension])\",\"Return the current PHP version\"],pi:[\"float pi(void)\",\"Returns an approximation of pi\"],png2wbmp:[\"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert PNG image to WBMP image\"],popen:[\"resource popen(string command, string mode)\",\"Execute a command and open either a read or a write pipe to it\"],posix_access:[\"bool posix_access(string file [, int mode])\",\"Determine accessibility of a file (POSIX.1 5.6.3)\"],posix_ctermid:[\"string posix_ctermid(void)\",\"Generate terminal path name (POSIX.1, 4.7.1)\"],posix_get_last_error:[\"int posix_get_last_error(void)\",\"Retrieve the error number set by the last posix function which failed.\"],posix_getcwd:[\"string posix_getcwd(void)\",\"Get working directory pathname (POSIX.1, 5.2.2)\"],posix_getegid:[\"int posix_getegid(void)\",\"Get the current effective group id (POSIX.1, 4.2.1)\"],posix_geteuid:[\"int posix_geteuid(void)\",\"Get the current effective user id (POSIX.1, 4.2.1)\"],posix_getgid:[\"int posix_getgid(void)\",\"Get the current group id (POSIX.1, 4.2.1)\"],posix_getgrgid:[\"array posix_getgrgid(long gid)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgrnam:[\"array posix_getgrnam(string groupname)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgroups:[\"array posix_getgroups(void)\",\"Get supplementary group id's (POSIX.1, 4.2.3)\"],posix_getlogin:[\"string posix_getlogin(void)\",\"Get user name (POSIX.1, 4.2.4)\"],posix_getpgid:[\"int posix_getpgid(void)\",\"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"],posix_getpgrp:[\"int posix_getpgrp(void)\",\"Get current process group id (POSIX.1, 4.3.1)\"],posix_getpid:[\"int posix_getpid(void)\",\"Get the current process id (POSIX.1, 4.1.1)\"],posix_getppid:[\"int posix_getppid(void)\",\"Get the parent process id (POSIX.1, 4.1.1)\"],posix_getpwnam:[\"array posix_getpwnam(string groupname)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getpwuid:[\"array posix_getpwuid(long uid)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getrlimit:[\"array posix_getrlimit(void)\",\"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"],posix_getsid:[\"int posix_getsid(void)\",\"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"],posix_getuid:[\"int posix_getuid(void)\",\"Get the current user id (POSIX.1, 4.2.1)\"],posix_initgroups:[\"bool posix_initgroups(string name, int base_group_id)\",\"Calculate the group access list for the user specified in name.\"],posix_isatty:[\"bool posix_isatty(int fd)\",\"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"],posix_kill:[\"bool posix_kill(int pid, int sig)\",\"Send a signal to a process (POSIX.1, 3.3.2)\"],posix_mkfifo:[\"bool posix_mkfifo(string pathname, int mode)\",\"Make a FIFO special file (POSIX.1, 5.4.2)\"],posix_mknod:[\"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\"Make a special or ordinary file (POSIX.1)\"],posix_setegid:[\"bool posix_setegid(long uid)\",\"Set effective group id\"],posix_seteuid:[\"bool posix_seteuid(long uid)\",\"Set effective user id\"],posix_setgid:[\"bool posix_setgid(int uid)\",\"Set group id (POSIX.1, 4.2.2)\"],posix_setpgid:[\"bool posix_setpgid(int pid, int pgid)\",\"Set process group id for job control (POSIX.1, 4.3.3)\"],posix_setsid:[\"int posix_setsid(void)\",\"Create session and set process group id (POSIX.1, 4.3.2)\"],posix_setuid:[\"bool posix_setuid(long uid)\",\"Set user id (POSIX.1, 4.2.2)\"],posix_strerror:[\"string posix_strerror(int errno)\",\"Retrieve the system error message associated with the given errno.\"],posix_times:[\"array posix_times(void)\",\"Get process times (POSIX.1, 4.5.2)\"],posix_ttyname:[\"string posix_ttyname(int fd)\",\"Determine terminal device name (POSIX.1, 4.7.2)\"],posix_uname:[\"array posix_uname(void)\",\"Get system name (POSIX.1, 4.4.1)\"],pow:[\"number pow(number base, number exponent)\",\"Returns base raised to the power of exponent. Returns integer result when possible\"],preg_filter:[\"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement and only return matches.\"],preg_grep:[\"array preg_grep(string regex, array input [, int flags])\",\"Searches array and returns entries which match regex\"],preg_last_error:[\"int preg_last_error()\",\"Returns the error code of the last regexp execution.\"],preg_match:[\"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\"Perform a Perl-style regular expression match\"],preg_match_all:[\"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\"Perform a Perl-style global regular expression match\"],preg_quote:[\"string preg_quote(string str [, string delim_char])\",\"Quote regular expression characters plus an optional character\"],preg_replace:[\"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement.\"],preg_replace_callback:[\"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement using replacement callback.\"],preg_split:[\"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\"Split string into an array using a perl-style regular expression as a delimiter\"],prev:[\"mixed prev(array array_arg)\",\"Move array argument's internal pointer to the previous element and return it\"],print:[\"int print(string arg)\",\"Output a string\"],print_r:[\"mixed print_r(mixed var [, bool return])\",\"Prints out or returns information about the specified variable\"],printf:[\"int printf(string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string\"],proc_close:[\"int proc_close(resource process)\",\"close a process opened by proc_open\"],proc_get_status:[\"array proc_get_status(resource process)\",\"get information about a process opened by proc_open\"],proc_nice:[\"bool proc_nice(int priority)\",\"Change the priority of the current process\"],proc_open:[\"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\"Run a process with more control over it's file descriptors\"],proc_terminate:[\"bool proc_terminate(resource process [, long signal])\",\"kill a process opened by proc_open\"],property_exists:[\"bool property_exists(mixed object_or_class, string property_name)\",\"Checks if the object or class has a property\"],pspell_add_to_personal:[\"bool pspell_add_to_personal(int pspell, string word)\",\"Adds a word to a personal list\"],pspell_add_to_session:[\"bool pspell_add_to_session(int pspell, string word)\",\"Adds a word to the current session\"],pspell_check:[\"bool pspell_check(int pspell, string word)\",\"Returns true if word is valid\"],pspell_clear_session:[\"bool pspell_clear_session(int pspell)\",\"Clears the current session\"],pspell_config_create:[\"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\"Create a new config to be used later to create a manager\"],pspell_config_data_dir:[\"bool pspell_config_data_dir(int conf, string directory)\",\"location of language data files\"],pspell_config_dict_dir:[\"bool pspell_config_dict_dir(int conf, string directory)\",\"location of the main word list\"],pspell_config_ignore:[\"bool pspell_config_ignore(int conf, int ignore)\",\"Ignore words <= n chars\"],pspell_config_mode:[\"bool pspell_config_mode(int conf, long mode)\",\"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"],pspell_config_personal:[\"bool pspell_config_personal(int conf, string personal)\",\"Use a personal dictionary for this config\"],pspell_config_repl:[\"bool pspell_config_repl(int conf, string repl)\",\"Use a personal dictionary with replacement pairs for this config\"],pspell_config_runtogether:[\"bool pspell_config_runtogether(int conf, bool runtogether)\",\"Consider run-together words as valid components\"],pspell_config_save_repl:[\"bool pspell_config_save_repl(int conf, bool save)\",\"Save replacement pairs when personal list is saved for this config\"],pspell_new:[\"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary\"],pspell_new_config:[\"int pspell_new_config(int config)\",\"Load a dictionary based on the given config\"],pspell_new_personal:[\"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary with a personal wordlist\"],pspell_save_wordlist:[\"bool pspell_save_wordlist(int pspell)\",\"Saves the current (personal) wordlist\"],pspell_store_replacement:[\"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\"Notify the dictionary of a user-selected replacement\"],pspell_suggest:[\"array pspell_suggest(int pspell, string word)\",\"Returns array of suggestions\"],putenv:[\"bool putenv(string setting)\",\"Set the value of an environment variable\"],quoted_printable_decode:[\"string quoted_printable_decode(string str)\",\"Convert a quoted-printable string to an 8 bit string\"],quoted_printable_encode:[\"string quoted_printable_encode(string str) */\",'PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \"s\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}'],quotemeta:[\"string quotemeta(string str)\",\"Quotes meta characters\"],rad2deg:[\"float rad2deg(float number)\",\"Converts the radian number to the equivalent number in degrees\"],rand:[\"int rand([int min, int max])\",\"Returns a random number\"],range:[\"array range(mixed low, mixed high[, int step])\",\"Create an array containing the range of integers or characters from low to high (inclusive)\"],rawurldecode:[\"string rawurldecode(string str)\",\"Decodes URL-encodes string\"],rawurlencode:[\"string rawurlencode(string str)\",\"URL-encodes string\"],readdir:[\"string readdir([resource dir_handle])\",\"Read directory entry from dir_handle\"],readfile:[\"int readfile(string filename [, bool use_include_path[, resource context]])\",\"Output a file or a URL\"],readgzfile:[\"int readgzfile(string filename [, int use_include_path])\",\"Output a .gz-file\"],readline:[\"string readline([string prompt])\",\"Reads a line\"],readline_add_history:[\"bool readline_add_history(string prompt)\",\"Adds a line to the history\"],readline_callback_handler_install:[\"void readline_callback_handler_install(string prompt, mixed callback)\",\"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"],readline_callback_handler_remove:[\"bool readline_callback_handler_remove()\",\"Removes a previously installed callback handler and restores terminal settings\"],readline_callback_read_char:[\"void readline_callback_read_char()\",\"Informs the readline callback interface that a character is ready for input\"],readline_clear_history:[\"bool readline_clear_history(void)\",\"Clears the history\"],readline_completion_function:[\"bool readline_completion_function(string funcname)\",\"Readline completion function?\"],readline_info:[\"mixed readline_info([string varname [, string newvalue]])\",\"Gets/sets various internal readline variables.\"],readline_list_history:[\"array readline_list_history(void)\",\"Lists the history\"],readline_on_new_line:[\"void readline_on_new_line(void)\",\"Inform readline that the cursor has moved to a new line\"],readline_read_history:[\"bool readline_read_history([string filename])\",\"Reads the history\"],readline_redisplay:[\"void readline_redisplay(void)\",\"Ask readline to redraw the display\"],readline_write_history:[\"bool readline_write_history([string filename])\",\"Writes the history\"],readlink:[\"string readlink(string filename)\",\"Return the target of a symbolic link\"],realpath:[\"string realpath(string path)\",\"Return the resolved path\"],realpath_cache_get:[\"bool realpath_cache_get()\",\"Get current size of realpath cache\"],realpath_cache_size:[\"bool realpath_cache_size()\",\"Get current size of realpath cache\"],recode_file:[\"bool recode_file(string request, resource input, resource output)\",\"Recode file input into file output according to request\"],recode_string:[\"string recode_string(string request, string str)\",\"Recode string str according to request string\"],register_shutdown_function:[\"void register_shutdown_function(string function_name)\",\"Register a user-level function to be called on request termination\"],register_tick_function:[\"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\"Registers a tick callback function\"],rename:[\"bool rename(string old_name, string new_name[, resource context])\",\"Rename a file\"],require:[\"bool require(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],require_once:[\"bool require_once(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],reset:[\"mixed reset(array array_arg)\",\"Set array argument's internal pointer to the first element and return it\"],restore_error_handler:[\"void restore_error_handler(void)\",\"Restores the previously defined error handler function\"],restore_exception_handler:[\"void restore_exception_handler(void)\",\"Restores the previously defined exception handler function\"],restore_include_path:[\"void restore_include_path()\",\"Restore the value of the include_path configuration option\"],rewind:[\"bool rewind(resource fp)\",\"Rewind the position of a file pointer\"],rewinddir:[\"void rewinddir([resource dir_handle])\",\"Rewind dir_handle back to the start\"],rmdir:[\"bool rmdir(string dirname[, resource context])\",\"Remove a directory\"],round:[\"float round(float number [, int precision [, int mode]])\",\"Returns the number rounded to specified precision\"],rsort:[\"bool rsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order\"],rtrim:[\"string rtrim(string str [, string character_mask])\",\"Removes trailing whitespace\"],scandir:[\"array scandir(string dir [, int sorting_order [, resource context]])\",\"List files & directories inside the specified path\"],sem_acquire:[\"bool sem_acquire(resource id)\",\"Acquires the semaphore with the given id, blocking if necessary\"],sem_get:[\"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"],sem_release:[\"bool sem_release(resource id)\",\"Releases the semaphore with the given id\"],sem_remove:[\"bool sem_remove(resource id)\",\"Removes semaphore from Unix systems\"],serialize:[\"string serialize(mixed variable)\",\"Returns a string representation of variable (which can later be unserialized)\"],session_cache_expire:[\"int session_cache_expire([int new_cache_expire])\",\"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"],session_cache_limiter:[\"string session_cache_limiter([string new_cache_limiter])\",\"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"],session_decode:[\"bool session_decode(string data)\",\"Deserializes data and reinitializes the variables\"],session_destroy:[\"bool session_destroy(void)\",\"Destroy the current session and all data associated with it\"],session_encode:[\"string session_encode(void)\",\"Serializes the current setup and returns the serialized representation\"],session_get_cookie_params:[\"array session_get_cookie_params(void)\",\"Return the session cookie parameters\"],session_id:[\"string session_id([string newid])\",\"Return the current session id. If newid is given, the session id is replaced with newid\"],session_is_registered:[\"bool session_is_registered(string varname)\",\"Checks if a variable is registered in session\"],session_module_name:[\"string session_module_name([string newname])\",\"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"],session_name:[\"string session_name([string newname])\",\"Return the current session name. If newname is given, the session name is replaced with newname\"],session_regenerate_id:[\"bool session_regenerate_id([bool delete_old_session])\",\"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"],session_register:[\"bool session_register(mixed var_names [, mixed ...])\",\"Adds varname(s) to the list of variables which are freezed at the session end\"],session_save_path:[\"string session_save_path([string newname])\",\"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"],session_set_cookie_params:[\"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\"Set session cookie parameters\"],session_set_save_handler:[\"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\"Sets user-level functions\"],session_start:[\"bool session_start(void)\",\"Begin session - reinitializes freezed variables, registers browsers etc\"],session_unregister:[\"bool session_unregister(string varname)\",\"Removes varname from the list of variables which are freezed at the session end\"],session_unset:[\"void session_unset(void)\",\"Unset all registered variables\"],session_write_close:[\"void session_write_close(void)\",\"Write session data and end session\"],set_error_handler:[\"string set_error_handler(string error_handler [, int error_types])\",\"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"],set_exception_handler:[\"string set_exception_handler(callable exception_handler)\",\"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"],set_include_path:[\"string set_include_path(string new_include_path)\",\"Sets the include_path configuration option\"],set_magic_quotes_runtime:[\"bool set_magic_quotes_runtime(int new_setting)\",\"Set the current active configuration setting of magic_quotes_runtime and return previous\"],set_time_limit:[\"bool set_time_limit(int seconds)\",\"Sets the maximum time a script can run\"],setcookie:[\"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie\"],setlocale:[\"string setlocale(mixed category, string locale [, string ...])\",\"Set locale information\"],setrawcookie:[\"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie with no url encoding of the value\"],settype:[\"bool settype(mixed var, string type)\",\"Set the type of the variable\"],sha1:[\"string sha1(string str [, bool raw_output])\",\"Calculate the sha1 hash of a string\"],sha1_file:[\"string sha1_file(string filename [, bool raw_output])\",\"Calculate the sha1 hash of given filename\"],shell_exec:[\"string shell_exec(string cmd)\",\"Execute command via shell and return complete output as string\"],shm_attach:[\"int shm_attach(int key [, int memsize [, int perm]])\",\"Creates or open a shared memory segment\"],shm_detach:[\"bool shm_detach(resource shm_identifier)\",\"Disconnects from shared memory segment\"],shm_get_var:[\"mixed shm_get_var(resource id, int variable_key)\",\"Returns a variable from shared memory\"],shm_has_var:[\"bool shm_has_var(resource id, int variable_key)\",\"Checks whether a specific entry exists\"],shm_put_var:[\"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\"Inserts or updates a variable in shared memory\"],shm_remove:[\"bool shm_remove(resource shm_identifier)\",\"Removes shared memory from Unix systems\"],shm_remove_var:[\"bool shm_remove_var(resource id, int variable_key)\",\"Removes variable from shared memory\"],shmop_close:[\"void shmop_close (int shmid)\",\"closes a shared memory segment\"],shmop_delete:[\"bool shmop_delete (int shmid)\",\"mark segment for deletion\"],shmop_open:[\"int shmop_open (int key, string flags, int mode, int size)\",\"gets and attaches a shared memory segment\"],shmop_read:[\"string shmop_read (int shmid, int start, int count)\",\"reads from a shm segment\"],shmop_size:[\"int shmop_size (int shmid)\",\"returns the shm size\"],shmop_write:[\"int shmop_write (int shmid, string data, int offset)\",\"writes to a shared memory segment\"],shuffle:[\"bool shuffle(array array_arg)\",\"Randomly shuffle the contents of an array\"],similar_text:[\"int similar_text(string str1, string str2 [, float percent])\",\"Calculates the similarity between two strings\"],simplexml_import_dom:[\"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\"Get a simplexml_element object from dom to allow for processing\"],simplexml_load_file:[\"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a filename and return a simplexml_element object to allow for processing\"],simplexml_load_string:[\"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a string and return a simplexml_element object to allow for processing\"],sin:[\"float sin(float number)\",\"Returns the sine of the number in radians\"],sinh:[\"float sinh(float number)\",\"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"],sleep:[\"void sleep(int seconds)\",\"Delay for a given number of seconds\"],smfi_addheader:[\"bool smfi_addheader(string headerf, string headerv)\",\"Adds a header to the current message.\"],smfi_addrcpt:[\"bool smfi_addrcpt(string rcpt)\",\"Add a recipient to the message envelope.\"],smfi_chgheader:[\"bool smfi_chgheader(string headerf, string headerv)\",\"Changes a header's value for the current message.\"],smfi_delrcpt:[\"bool smfi_delrcpt(string rcpt)\",\"Removes the named recipient from the current message's envelope.\"],smfi_getsymval:[\"string smfi_getsymval(string macro)\",\"Returns the value of the given macro or NULL if the macro is not defined.\"],smfi_replacebody:[\"bool smfi_replacebody(string body)\",\"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"],smfi_setflags:[\"void smfi_setflags(long flags)\",\"Sets the flags describing the actions the filter may take.\"],smfi_setreply:[\"bool smfi_setreply(string rcode, string xcode, string message)\",\"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"],smfi_settimeout:[\"void smfi_settimeout(long timeout)\",\"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"],snmp2_get:[\"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_getnext:[\"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_real_walk:[\"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmp2_set:[\"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmp2_walk:[\"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],snmp3_get:[\"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_getnext:[\"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_real_walk:[\"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_set:[\"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_walk:[\"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp_get_quick_print:[\"bool snmp_get_quick_print(void)\",\"Return the current status of quick_print\"],snmp_get_valueretrieval:[\"int snmp_get_valueretrieval()\",\"Return the method how the SNMP values will be returned\"],snmp_read_mib:[\"int snmp_read_mib(string filename)\",\"Reads and parses a MIB file into the active MIB tree.\"],snmp_set_enum_print:[\"void snmp_set_enum_print(int enum_print)\",\"Return all values that are enums with their enum value instead of the raw integer\"],snmp_set_oid_output_format:[\"void snmp_set_oid_output_format(int oid_format)\",\"Set the OID output format.\"],snmp_set_quick_print:[\"void snmp_set_quick_print(int quick_print)\",\"Return all objects including their respective object id withing the specified one\"],snmp_set_valueretrieval:[\"void snmp_set_valueretrieval(int method)\",\"Specify the method how the SNMP values will be returned\"],snmpget:[\"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmpgetnext:[\"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmprealwalk:[\"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmpset:[\"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmpwalk:[\"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],socket_accept:[\"resource socket_accept(resource socket)\",\"Accepts a connection on the listening socket fd\"],socket_bind:[\"bool socket_bind(resource socket, string addr [, int port])\",\"Binds an open socket to a listening port, port is only specified in AF_INET family.\"],socket_clear_error:[\"void socket_clear_error([resource socket])\",\"Clears the error on the socket or the last error code.\"],socket_close:[\"void socket_close(resource socket)\",\"Closes a file descriptor\"],socket_connect:[\"bool socket_connect(resource socket, string addr [, int port])\",\"Opens a connection to addr:port on the socket specified by socket\"],socket_create:[\"resource socket_create(int domain, int type, int protocol)\",\"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"],socket_create_listen:[\"resource socket_create_listen(int port[, int backlog])\",\"Opens a socket on port to accept connections\"],socket_create_pair:[\"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\"Creates a pair of indistinguishable sockets and stores them in fds.\"],socket_get_option:[\"mixed socket_get_option(resource socket, int level, int optname)\",\"Gets socket options for the socket\"],socket_getpeername:[\"bool socket_getpeername(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_getsockname:[\"bool socket_getsockname(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_last_error:[\"int socket_last_error([resource socket])\",\"Returns the last socket error (either the last used or the provided socket resource)\"],socket_listen:[\"bool socket_listen(resource socket[, int backlog])\",\"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"],socket_read:[\"string socket_read(resource socket, int length [, int type])\",\"Reads a maximum of length bytes from socket\"],socket_recv:[\"int socket_recv(resource socket, string &buf, int len, int flags)\",\"Receives data from a connected socket\"],socket_recvfrom:[\"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\"Receives data from a socket, connected or not\"],socket_select:[\"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"],socket_send:[\"int socket_send(resource socket, string buf, int len, int flags)\",\"Sends data to a connected socket\"],socket_sendto:[\"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\"Sends a message to a socket, whether it is connected or not\"],socket_set_block:[\"bool socket_set_block(resource socket)\",\"Sets blocking mode on a socket resource\"],socket_set_nonblock:[\"bool socket_set_nonblock(resource socket)\",\"Sets nonblocking mode on a socket resource\"],socket_set_option:[\"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\"Sets socket options for the socket\"],socket_shutdown:[\"bool socket_shutdown(resource socket[, int how])\",\"Shuts down a socket for receiving, sending, or both.\"],socket_strerror:[\"string socket_strerror(int errno)\",\"Returns a string describing an error\"],socket_write:[\"int socket_write(resource socket, string buf[, int length])\",\"Writes the buffer to the socket resource, length is optional\"],solid_fetch_prev:[\"bool solid_fetch_prev(resource result_id)\",\"\"],sort:[\"bool sort(array &array_arg [, int sort_flags])\",\"Sort an array\"],soundex:[\"string soundex(string str)\",\"Calculate the soundex key of a string\"],spl_autoload:[\"void spl_autoload(string class_name [, string file_extensions])\",\"Default implementation for __autoload()\"],spl_autoload_call:[\"void spl_autoload_call(string class_name)\",\"Try all registerd autoload function to load the requested class\"],spl_autoload_extensions:[\"string spl_autoload_extensions([string file_extensions])\",\"Register and return default file extensions for spl_autoload\"],spl_autoload_functions:[\"false|array spl_autoload_functions()\",\"Return all registered __autoload() functionns\"],spl_autoload_register:['bool spl_autoload_register([mixed autoload_function = \"spl_autoload\" [, throw = true [, prepend]]])',\"Register given function as __autoload() implementation\"],spl_autoload_unregister:[\"bool spl_autoload_unregister(mixed autoload_function)\",\"Unregister given function as __autoload() implementation\"],spl_classes:[\"array spl_classes()\",\"Return an array containing the names of all clsses and interfaces defined in SPL\"],spl_object_hash:[\"string spl_object_hash(object obj)\",\"Return hash id for given object\"],split:[\"array split(string pattern, string string [, int limit])\",\"Split string into array by regular expression\"],spliti:[\"array spliti(string pattern, string string [, int limit])\",\"Split string into array by regular expression case-insensitive\"],sprintf:[\"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\"Return a formatted string\"],sql_regcase:[\"string sql_regcase(string string)\",\"Make regular expression for case insensitive match\"],sqlite_array_query:[\"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\"Executes a query against a given database and returns an array of arrays.\"],sqlite_busy_timeout:[\"void sqlite_busy_timeout(resource db, int ms)\",\"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"],sqlite_changes:[\"int sqlite_changes(resource db)\",\"Returns the number of rows that were changed by the most recent SQL statement.\"],sqlite_close:[\"void sqlite_close(resource db)\",\"Closes an open sqlite database.\"],sqlite_column:[\"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\"Fetches a column from the current row of a result set.\"],sqlite_create_aggregate:[\"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\"Registers an aggregate function for queries.\"],sqlite_create_function:[\"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",'Registers a \"regular\" function for queries.'],sqlite_current:[\"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the current row from a result set as an array.\"],sqlite_error_string:[\"string sqlite_error_string(int error_code)\",\"Returns the textual description of an error code.\"],sqlite_escape_string:[\"string sqlite_escape_string(string item)\",\"Escapes a string for use as a query parameter.\"],sqlite_exec:[\"boolean sqlite_exec(string query, resource db[, string &error_message])\",\"Executes a result-less query against a given database\"],sqlite_factory:[\"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"],sqlite_fetch_all:[\"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\"Fetches all rows from a result set as an array of arrays.\"],sqlite_fetch_array:[\"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the next row from a result set as an array.\"],sqlite_fetch_column_types:[\"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\"Return an array of column types from a particular table.\"],sqlite_fetch_object:[\"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\"Fetches the next row from a result set as an object.\"],sqlite_fetch_single:[\"string sqlite_fetch_single(resource result [, bool decode_binary])\",\"Fetches the first column of a result set as a string.\"],sqlite_field_name:[\"string sqlite_field_name(resource result, int field_index)\",\"Returns the name of a particular field of a result set.\"],sqlite_has_prev:[\"bool sqlite_has_prev(resource result)\",\"* Returns whether a previous row is available.\"],sqlite_key:[\"int sqlite_key(resource result)\",\"Return the current row index of a buffered result.\"],sqlite_last_error:[\"int sqlite_last_error(resource db)\",\"Returns the error code of the last error for a database.\"],sqlite_last_insert_rowid:[\"int sqlite_last_insert_rowid(resource db)\",\"Returns the rowid of the most recently inserted row.\"],sqlite_libencoding:[\"string sqlite_libencoding()\",\"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"],sqlite_libversion:[\"string sqlite_libversion()\",\"Returns the version of the linked SQLite library.\"],sqlite_next:[\"bool sqlite_next(resource result)\",\"Seek to the next row number of a result set.\"],sqlite_num_fields:[\"int sqlite_num_fields(resource result)\",\"Returns the number of fields in a result set.\"],sqlite_num_rows:[\"int sqlite_num_rows(resource result)\",\"Returns the number of rows in a buffered result set.\"],sqlite_open:[\"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database. Will create the database if it does not exist.\"],sqlite_popen:[\"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"],sqlite_prev:[\"bool sqlite_prev(resource result)\",\"* Seek to the previous row number of a result set.\"],sqlite_query:[\"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\"Executes a query against a given database and returns a result handle.\"],sqlite_rewind:[\"bool sqlite_rewind(resource result)\",\"Seek to the first row number of a buffered result set.\"],sqlite_seek:[\"bool sqlite_seek(resource result, int row)\",\"Seek to a particular row number of a buffered result set.\"],sqlite_single_query:[\"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\"Executes a query and returns either an array for one single column or the value of the first row.\"],sqlite_udf_decode_binary:[\"string sqlite_udf_decode_binary(string data)\",\"Decode binary encoding on a string parameter passed to an UDF.\"],sqlite_udf_encode_binary:[\"string sqlite_udf_encode_binary(string data)\",\"Apply binary encoding (if required) to a string to return from an UDF.\"],sqlite_unbuffered_query:[\"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\"Executes a query that does not prefetch and buffer all data.\"],sqlite_valid:[\"bool sqlite_valid(resource result)\",\"Returns whether more rows are available.\"],sqrt:[\"float sqrt(float number)\",\"Returns the square root of the number\"],srand:[\"void srand([int seed])\",\"Seeds random number generator\"],sscanf:[\"mixed sscanf(string str, string format [, string ...])\",\"Implements an ANSI C compatible sscanf\"],stat:[\"array stat(string filename)\",\"Give information about a file\"],str_getcsv:[\"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\"Parse a CSV string into an array\"],str_ireplace:[\"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace / case-insensitive\"],str_pad:[\"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\"Returns input string padded on the left or right to specified length with pad_string\"],str_repeat:[\"string str_repeat(string input, int mult)\",\"Returns the input string repeat mult times\"],str_replace:[\"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace\"],str_rot13:[\"string str_rot13(string str)\",\"Perform the rot13 transform on a string\"],str_shuffle:[\"void str_shuffle(string str)\",\"Shuffles string. One permutation of all possible is created\"],str_split:[\"array str_split(string str [, int split_length])\",\"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"],str_word_count:[\"mixed str_word_count(string str, [int format [, string charlist]])\",'Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, \\'word\\' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \"\\'\" and \"-\" characters.'],strcasecmp:[\"int strcasecmp(string str1, string str2)\",\"Binary safe case-insensitive string comparison\"],strchr:[\"string strchr(string haystack, string needle)\",\"An alias for strstr\"],strcmp:[\"int strcmp(string str1, string str2)\",\"Binary safe string comparison\"],strcoll:[\"int strcoll(string str1, string str2)\",\"Compares two strings using the current locale\"],strcspn:[\"int strcspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"],stream_bucket_append:[\"void stream_bucket_append(resource brigade, resource bucket)\",\"Append bucket to brigade\"],stream_bucket_make_writeable:[\"object stream_bucket_make_writeable(resource brigade)\",\"Return a bucket object from the brigade for operating on\"],stream_bucket_new:[\"resource stream_bucket_new(resource stream, string buffer)\",\"Create a new bucket for use on the current stream\"],stream_bucket_prepend:[\"void stream_bucket_prepend(resource brigade, resource bucket)\",\"Prepend bucket to brigade\"],stream_context_create:[\"resource stream_context_create([array options[, array params]])\",\"Create a file context and optionally set parameters\"],stream_context_get_default:[\"resource stream_context_get_default([array options])\",\"Get a handle on the default file/stream context and optionally set parameters\"],stream_context_get_options:[\"array stream_context_get_options(resource context|resource stream)\",\"Retrieve options for a stream/wrapper/context\"],stream_context_get_params:[\"array stream_context_get_params(resource context|resource stream)\",\"Get parameters of a file context\"],stream_context_set_default:[\"resource stream_context_set_default(array options)\",\"Set default file/stream context, returns the context as a resource\"],stream_context_set_option:[\"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\"Set an option for a wrapper\"],stream_context_set_params:[\"bool stream_context_set_params(resource context|resource stream, array options)\",\"Set parameters for a file context\"],stream_copy_to_stream:[\"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\"Reads up to maxlen bytes from source stream and writes them to dest stream.\"],stream_filter_append:[\"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Append a filter to a stream\"],stream_filter_prepend:[\"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Prepend a filter to a stream\"],stream_filter_register:[\"bool stream_filter_register(string filtername, string classname)\",\"Registers a custom filter handler class\"],stream_filter_remove:[\"bool stream_filter_remove(resource stream_filter)\",\"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"],stream_get_contents:[\"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"],stream_get_filters:[\"array stream_get_filters(void)\",\"Returns a list of registered filters\"],stream_get_line:[\"string stream_get_line(resource stream, int maxlen [, string ending])\",\"Read up to maxlen bytes from a stream or until the ending string is found\"],stream_get_meta_data:[\"array stream_get_meta_data(resource fp)\",\"Retrieves header/meta data from streams/file pointers\"],stream_get_transports:[\"array stream_get_transports()\",\"Retrieves list of registered socket transports\"],stream_get_wrappers:[\"array stream_get_wrappers()\",\"Retrieves list of registered stream wrappers\"],stream_is_local:[\"bool stream_is_local(resource stream|string url)\",\"\"],stream_resolve_include_path:[\"string stream_resolve_include_path(string filename)\",\"Determine what file will be opened by calls to fopen() with a relative path\"],stream_select:[\"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"],stream_set_blocking:[\"bool stream_set_blocking(resource socket, int mode)\",\"Set blocking/non-blocking mode on a socket or stream\"],stream_set_timeout:[\"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\"Set timeout on stream read to seconds + microseonds\"],stream_set_write_buffer:[\"int stream_set_write_buffer(resource fp, int buffer)\",\"Set file write buffer\"],stream_socket_accept:[\"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\"Accept a client connection from a server socket\"],stream_socket_client:[\"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\"Open a client connection to a remote address\"],stream_socket_enable_crypto:[\"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\"Enable or disable a specific kind of crypto on the stream\"],stream_socket_get_name:[\"string stream_socket_get_name(resource stream, bool want_peer)\",\"Returns either the locally bound or remote name for a socket stream\"],stream_socket_pair:[\"array stream_socket_pair(int domain, int type, int protocol)\",\"Creates a pair of connected, indistinguishable socket streams\"],stream_socket_recvfrom:[\"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\"Receives data from a socket stream\"],stream_socket_sendto:[\"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"],stream_socket_server:[\"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\"Create a server socket bound to localaddress\"],stream_socket_shutdown:[\"int stream_socket_shutdown(resource stream, int how)\",\"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"],stream_supports_lock:[\"bool stream_supports_lock(resource stream)\",\"Tells whether the stream supports locking through flock().\"],stream_wrapper_register:[\"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\"Registers a custom URL protocol handler class\"],stream_wrapper_restore:[\"bool stream_wrapper_restore(string protocol)\",\"Restore the original protocol handler, overriding if necessary\"],stream_wrapper_unregister:[\"bool stream_wrapper_unregister(string protocol)\",\"Unregister a wrapper for the life of the current request.\"],strftime:[\"string strftime(string format [, int timestamp])\",\"Format a local time/date according to locale settings\"],strip_tags:[\"string strip_tags(string str [, string allowable_tags])\",\"Strips HTML and PHP tags from a string\"],stripcslashes:[\"string stripcslashes(string str)\",\"Strips backslashes from a string. Uses C-style conventions\"],stripos:[\"int stripos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another, case insensitive\"],stripslashes:[\"string stripslashes(string str)\",\"Strips backslashes from a string\"],stristr:[\"string stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another, case insensitive\"],strlen:[\"int strlen(string str)\",\"Get string length\"],strnatcasecmp:[\"int strnatcasecmp(string s1, string s2)\",\"Returns the result of case-insensitive string comparison using 'natural' algorithm\"],strnatcmp:[\"int strnatcmp(string s1, string s2)\",\"Returns the result of string comparison using 'natural' algorithm\"],strncasecmp:[\"int strncasecmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strncmp:[\"int strncmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strpbrk:[\"array strpbrk(string haystack, string char_list)\",\"Search a string for any of a set of characters\"],strpos:[\"int strpos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another\"],strptime:[\"string strptime(string timestamp, string format)\",\"Parse a time/date generated with strftime()\"],strrchr:[\"string strrchr(string haystack, string needle)\",\"Finds the last occurrence of a character in a string within another\"],strrev:[\"string strrev(string str)\",\"Reverse a string\"],strripos:[\"int strripos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strrpos:[\"int strrpos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strspn:[\"int strspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"],strstr:[\"string strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],strtok:[\"string strtok([string str,] string token)\",\"Tokenize a string\"],strtolower:[\"string strtolower(string str)\",\"Makes a string lowercase\"],strtotime:[\"int strtotime(string time [, int now ])\",\"Convert string representation of date and time to a timestamp\"],strtoupper:[\"string strtoupper(string str)\",\"Makes a string uppercase\"],strtr:[\"string strtr(string str, string from[, string to])\",\"Translates characters in str using given translation tables\"],strval:[\"string strval(mixed var)\",\"Get the string value of a variable\"],substr:[\"string substr(string str, int start [, int length])\",\"Returns part of a string\"],substr_compare:[\"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"],substr_count:[\"int substr_count(string haystack, string needle [, int offset [, int length]])\",\"Returns the number of times a substring occurs in the string\"],substr_replace:[\"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\"Replaces part of a string with another string\"],sybase_affected_rows:[\"int sybase_affected_rows([resource link_id])\",\"Get number of affected rows in last query\"],sybase_close:[\"bool sybase_close([resource link_id])\",\"Close Sybase connection\"],sybase_connect:[\"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\"Open Sybase server connection\"],sybase_data_seek:[\"bool sybase_data_seek(resource result, int offset)\",\"Move internal row pointer\"],sybase_deadlock_retry_count:[\"void sybase_deadlock_retry_count(int retry_count)\",\"Sets deadlock retry count\"],sybase_fetch_array:[\"array sybase_fetch_array(resource result)\",\"Fetch row as array\"],sybase_fetch_assoc:[\"array sybase_fetch_assoc(resource result)\",\"Fetch row as array without numberic indices\"],sybase_fetch_field:[\"object sybase_fetch_field(resource result [, int offset])\",\"Get field information\"],sybase_fetch_object:[\"object sybase_fetch_object(resource result [, mixed object])\",\"Fetch row as object\"],sybase_fetch_row:[\"array sybase_fetch_row(resource result)\",\"Get row as enumerated array\"],sybase_field_seek:[\"bool sybase_field_seek(resource result, int offset)\",\"Set field offset\"],sybase_free_result:[\"bool sybase_free_result(resource result)\",\"Free result memory\"],sybase_get_last_message:[\"string sybase_get_last_message(void)\",\"Returns the last message from server (over min_message_severity)\"],sybase_min_client_severity:[\"void sybase_min_client_severity(int severity)\",\"Sets minimum client severity\"],sybase_min_server_severity:[\"void sybase_min_server_severity(int severity)\",\"Sets minimum server severity\"],sybase_num_fields:[\"int sybase_num_fields(resource result)\",\"Get number of fields in result\"],sybase_num_rows:[\"int sybase_num_rows(resource result)\",\"Get number of rows in result\"],sybase_pconnect:[\"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\"Open persistent Sybase connection\"],sybase_query:[\"int sybase_query(string query [, resource link_id])\",\"Send Sybase query\"],sybase_result:[\"string sybase_result(resource result, int row, mixed field)\",\"Get result data\"],sybase_select_db:[\"bool sybase_select_db(string database [, resource link_id])\",\"Select Sybase database\"],sybase_set_message_handler:[\"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"],sybase_unbuffered_query:[\"int sybase_unbuffered_query(string query [, resource link_id])\",\"Send Sybase query\"],symlink:[\"int symlink(string target, string link)\",\"Create a symbolic link\"],sys_get_temp_dir:[\"string sys_get_temp_dir()\",\"Returns directory path used for temporary files\"],sys_getloadavg:[\"array sys_getloadavg()\",\"\"],syslog:[\"bool syslog(int priority, string message)\",\"Generate a system log message\"],system:[\"int system(string command [, int &return_value])\",\"Execute an external program and display output\"],tan:[\"float tan(float number)\",\"Returns the tangent of the number in radians\"],tanh:[\"float tanh(float number)\",\"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"],tempnam:[\"string tempnam(string dir, string prefix)\",\"Create a unique filename in a directory\"],textdomain:[\"string textdomain(string domain)\",'Set the textdomain to \"domain\". Returns the current domain'],tidy_access_count:[\"int tidy_access_count()\",\"Returns the Number of Tidy accessibility warnings encountered for specified document.\"],tidy_clean_repair:[\"boolean tidy_clean_repair()\",\"Execute configured cleanup and repair operations on parsed markup\"],tidy_config_count:[\"int tidy_config_count()\",\"Returns the Number of Tidy configuration errors encountered for specified document.\"],tidy_diagnose:[\"boolean tidy_diagnose()\",\"Run configured diagnostics on parsed and repaired markup.\"],tidy_error_count:[\"int tidy_error_count()\",\"Returns the Number of Tidy errors encountered for specified document.\"],tidy_get_body:[\"TidyNode tidy_get_body(resource tidy)\",\"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"],tidy_get_config:[\"array tidy_get_config()\",\"Get current Tidy configuarion\"],tidy_get_error_buffer:[\"string tidy_get_error_buffer([boolean detailed])\",\"Return warnings and errors which occured parsing the specified document\"],tidy_get_head:[\"TidyNode tidy_get_head()\",\"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"],tidy_get_html:[\"TidyNode tidy_get_html()\",\"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"],tidy_get_html_ver:[\"int tidy_get_html_ver()\",\"Get the Detected HTML version for the specified document.\"],tidy_get_opt_doc:[\"string tidy_get_opt_doc(tidy resource, string optname)\",\"Returns the documentation for the given option name\"],tidy_get_output:[\"string tidy_get_output()\",\"Return a string representing the parsed tidy markup\"],tidy_get_release:[\"string tidy_get_release()\",\"Get release date (version) for Tidy library\"],tidy_get_root:[\"TidyNode tidy_get_root()\",\"Returns a TidyNode Object representing the root of the tidy parse tree\"],tidy_get_status:[\"int tidy_get_status()\",\"Get status of specfied document.\"],tidy_getopt:[\"mixed tidy_getopt(string option)\",\"Returns the value of the specified configuration option for the tidy document.\"],tidy_is_xhtml:[\"boolean tidy_is_xhtml()\",\"Indicates if the document is a XHTML document.\"],tidy_is_xml:[\"boolean tidy_is_xml()\",\"Indicates if the document is a generic (non HTML/XHTML) XML document.\"],tidy_parse_file:[\"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\"Parse markup in file or URI\"],tidy_parse_string:[\"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\"Parse a document stored in a string\"],tidy_repair_file:[\"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\"Repair a file using an optionally provided configuration file\"],tidy_repair_string:[\"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\"Repair a string using an optionally provided configuration file\"],tidy_warning_count:[\"int tidy_warning_count()\",\"Returns the Number of Tidy warnings encountered for specified document.\"],time:[\"int time(void)\",\"Return current UNIX timestamp\"],time_nanosleep:[\"mixed time_nanosleep(long seconds, long nanoseconds)\",\"Delay for a number of seconds and nano seconds\"],time_sleep_until:[\"mixed time_sleep_until(float timestamp)\",\"Make the script sleep until the specified time\"],timezone_abbreviations_list:[\"array timezone_abbreviations_list()\",\"Returns associative array containing dst, offset and the timezone name\"],timezone_identifiers_list:[\"array timezone_identifiers_list([long what[, string country]])\",\"Returns numerically index array with all timezone identifiers.\"],timezone_location_get:[\"array timezone_location_get()\",\"Returns location information for a timezone, including country code, latitude/longitude and comments\"],timezone_name_from_abbr:[\"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\"Returns the timezone name from abbrevation\"],timezone_name_get:[\"string timezone_name_get(DateTimeZone object)\",\"Returns the name of the timezone.\"],timezone_offset_get:[\"long timezone_offset_get(DateTimeZone object, DateTime object)\",\"Returns the timezone offset.\"],timezone_open:[\"DateTimeZone timezone_open(string timezone)\",\"Returns new DateTimeZone object\"],timezone_transitions_get:[\"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"],timezone_version_get:[\"array timezone_version_get()\",\"Returns the Olson database version number.\"],tmpfile:[\"resource tmpfile(void)\",\"Create a temporary file that will be deleted automatically after use\"],token_get_all:[\"array token_get_all(string source)\",\"\"],token_name:[\"string token_name(int type)\",\"\"],touch:[\"bool touch(string filename [, int time [, int atime]])\",\"Set modification time of file\"],trigger_error:[\"void trigger_error(string messsage [, int error_type])\",\"Generates a user-level error/warning/notice message\"],trim:[\"string trim(string str [, string character_mask])\",\"Strips whitespace from the beginning and end of a string\"],uasort:[\"bool uasort(array array_arg, string cmp_function)\",\"Sort an array with a user-defined comparison function and maintain index association\"],ucfirst:[\"string ucfirst(string str)\",\"Make a string's first character lowercase\"],ucwords:[\"string ucwords(string str)\",\"Uppercase the first character of every word in a string\"],uksort:[\"bool uksort(array array_arg, string cmp_function)\",\"Sort an array by keys using a user-defined comparison function\"],umask:[\"int umask([int mask])\",\"Return or change the umask\"],uniqid:[\"string uniqid([string prefix [, bool more_entropy]])\",\"Generates a unique ID\"],unixtojd:[\"int unixtojd([int timestamp])\",\"Convert UNIX timestamp to Julian Day\"],unlink:[\"bool unlink(string filename[, context context])\",\"Delete a file\"],unpack:[\"array unpack(string format, string input)\",\"Unpack binary string into named array elements according to format argument\"],unregister_tick_function:[\"void unregister_tick_function(string function_name)\",\"Unregisters a tick callback function\"],unserialize:[\"mixed unserialize(string variable_representation)\",\"Takes a string representation of variable and recreates it\"],unset:[\"void unset (mixed var [, mixed var])\",\"Unset a given variable\"],urldecode:[\"string urldecode(string str)\",\"Decodes URL-encoded string\"],urlencode:[\"string urlencode(string str)\",\"URL-encodes string\"],usleep:[\"void usleep(int micro_seconds)\",\"Delay for a given number of micro seconds\"],usort:[\"bool usort(array array_arg, string cmp_function)\",\"Sort an array by values using a user-defined comparison function\"],utf8_decode:[\"string utf8_decode(string data)\",\"Converts a UTF-8 encoded string to ISO-8859-1\"],utf8_encode:[\"string utf8_encode(string data)\",\"Encodes an ISO-8859-1 string to UTF-8\"],var_dump:[\"void var_dump(mixed var)\",\"Dumps a string representation of variable to output\"],var_export:[\"mixed var_export(mixed var [, bool return])\",\"Outputs or returns a string representation of a variable\"],variant_abs:[\"mixed variant_abs(mixed left)\",\"Returns the absolute value of a variant\"],variant_add:[\"mixed variant_add(mixed left, mixed right)\",'\"Adds\" two variant values together and returns the result'],variant_and:[\"mixed variant_and(mixed left, mixed right)\",\"performs a bitwise AND operation between two variants and returns the result\"],variant_cast:[\"object variant_cast(object variant, int type)\",\"Convert a variant into a new variant object of another type\"],variant_cat:[\"mixed variant_cat(mixed left, mixed right)\",\"concatenates two variant values together and returns the result\"],variant_cmp:[\"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\"Compares two variants\"],variant_date_from_timestamp:[\"object variant_date_from_timestamp(int timestamp)\",\"Returns a variant date representation of a unix timestamp\"],variant_date_to_timestamp:[\"int variant_date_to_timestamp(object variant)\",\"Converts a variant date/time value to unix timestamp\"],variant_div:[\"mixed variant_div(mixed left, mixed right)\",\"Returns the result from dividing two variants\"],variant_eqv:[\"mixed variant_eqv(mixed left, mixed right)\",\"Performs a bitwise equivalence on two variants\"],variant_fix:[\"mixed variant_fix(mixed left)\",\"Returns the integer part ? of a variant\"],variant_get_type:[\"int variant_get_type(object variant)\",\"Returns the VT_XXX type code for a variant\"],variant_idiv:[\"mixed variant_idiv(mixed left, mixed right)\",\"Converts variants to integers and then returns the result from dividing them\"],variant_imp:[\"mixed variant_imp(mixed left, mixed right)\",\"Performs a bitwise implication on two variants\"],variant_int:[\"mixed variant_int(mixed left)\",\"Returns the integer portion of a variant\"],variant_mod:[\"mixed variant_mod(mixed left, mixed right)\",\"Divides two variants and returns only the remainder\"],variant_mul:[\"mixed variant_mul(mixed left, mixed right)\",\"multiplies the values of the two variants and returns the result\"],variant_neg:[\"mixed variant_neg(mixed left)\",\"Performs logical negation on a variant\"],variant_not:[\"mixed variant_not(mixed left)\",\"Performs bitwise not negation on a variant\"],variant_or:[\"mixed variant_or(mixed left, mixed right)\",\"Performs a logical disjunction on two variants\"],variant_pow:[\"mixed variant_pow(mixed left, mixed right)\",\"Returns the result of performing the power function with two variants\"],variant_round:[\"mixed variant_round(mixed left, int decimals)\",\"Rounds a variant to the specified number of decimal places\"],variant_set:[\"void variant_set(object variant, mixed value)\",\"Assigns a new value for a variant object\"],variant_set_type:[\"void variant_set_type(object variant, int type)\",'Convert a variant into another type.  Variant is modified \"in-place\"'],variant_sub:[\"mixed variant_sub(mixed left, mixed right)\",\"subtracts the value of the right variant from the left variant value and returns the result\"],variant_xor:[\"mixed variant_xor(mixed left, mixed right)\",\"Performs a logical exclusion on two variants\"],version_compare:[\"int version_compare(string ver1, string ver2 [, string oper])\",'Compares two \"PHP-standardized\" version number strings'],vfprintf:[\"int vfprintf(resource stream, string format, array args)\",\"Output a formatted string into a stream\"],virtual:[\"bool virtual(string filename)\",\"Perform an Apache sub-request\"],vprintf:[\"int vprintf(string format, array args)\",\"Output a formatted string\"],vsprintf:[\"string vsprintf(string format, array args)\",\"Return a formatted string\"],wddx_add_vars:[\"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\"Serializes given variables and adds them to packet given by packet_id\"],wddx_deserialize:[\"mixed wddx_deserialize(mixed packet)\",\"Deserializes given packet and returns a PHP value\"],wddx_packet_end:[\"string wddx_packet_end(resource packet_id)\",\"Ends specified WDDX packet and returns the string containing the packet\"],wddx_packet_start:[\"resource wddx_packet_start([string comment])\",\"Starts a WDDX packet with optional comment and returns the packet id\"],wddx_serialize_value:[\"string wddx_serialize_value(mixed var [, string comment])\",\"Creates a new packet and serializes the given value\"],wddx_serialize_vars:[\"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\"Creates a new packet and serializes given variables into a struct\"],wordwrap:[\"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\"Wraps buffer to selected number of characters using string break char\"],xml_error_string:[\"string xml_error_string(int code)\",\"Get XML parser error string\"],xml_get_current_byte_index:[\"int xml_get_current_byte_index(resource parser)\",\"Get current byte index for an XML parser\"],xml_get_current_column_number:[\"int xml_get_current_column_number(resource parser)\",\"Get current column number for an XML parser\"],xml_get_current_line_number:[\"int xml_get_current_line_number(resource parser)\",\"Get current line number for an XML parser\"],xml_get_error_code:[\"int xml_get_error_code(resource parser)\",\"Get XML parser error code\"],xml_parse:[\"int xml_parse(resource parser, string data [, int isFinal])\",\"Start parsing an XML document\"],xml_parse_into_struct:[\"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\"Parsing a XML document\"],xml_parser_create:[\"resource xml_parser_create([string encoding])\",\"Create an XML parser\"],xml_parser_create_ns:[\"resource xml_parser_create_ns([string encoding [, string sep]])\",\"Create an XML parser\"],xml_parser_free:[\"int xml_parser_free(resource parser)\",\"Free an XML parser\"],xml_parser_get_option:[\"int xml_parser_get_option(resource parser, int option)\",\"Get options from an XML parser\"],xml_parser_set_option:[\"int xml_parser_set_option(resource parser, int option, mixed value)\",\"Set options in an XML parser\"],xml_set_character_data_handler:[\"int xml_set_character_data_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_default_handler:[\"int xml_set_default_handler(resource parser, string hdl)\",\"Set up default handler\"],xml_set_element_handler:[\"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\"Set up start and end element handlers\"],xml_set_end_namespace_decl_handler:[\"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_external_entity_ref_handler:[\"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\"Set up external entity reference handler\"],xml_set_notation_decl_handler:[\"int xml_set_notation_decl_handler(resource parser, string hdl)\",\"Set up notation declaration handler\"],xml_set_object:[\"int xml_set_object(resource parser, object &obj)\",\"Set up object which should be used for callbacks\"],xml_set_processing_instruction_handler:[\"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\"Set up processing instruction (PI) handler\"],xml_set_start_namespace_decl_handler:[\"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_unparsed_entity_decl_handler:[\"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\"Set up unparsed entity declaration handler\"],xmlrpc_decode:[\"array xmlrpc_decode(string xml [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_decode_request:[\"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_encode:[\"string xmlrpc_encode(mixed value)\",\"Generates XML for a PHP value\"],xmlrpc_encode_request:[\"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\"Generates XML for a method request\"],xmlrpc_get_type:[\"string xmlrpc_get_type(mixed value)\",\"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"],xmlrpc_is_fault:[\"bool xmlrpc_is_fault(array)\",\"Determines if an array value represents an XMLRPC fault.\"],xmlrpc_parse_method_descriptions:[\"array xmlrpc_parse_method_descriptions(string xml)\",\"Decodes XML into a list of method descriptions\"],xmlrpc_server_add_introspection_data:[\"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\"Adds introspection documentation\"],xmlrpc_server_call_method:[\"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\"Parses XML requests and call methods\"],xmlrpc_server_create:[\"resource xmlrpc_server_create(void)\",\"Creates an xmlrpc server\"],xmlrpc_server_destroy:[\"int xmlrpc_server_destroy(resource server)\",\"Destroys server resources\"],xmlrpc_server_register_introspection_callback:[\"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\"Register a PHP function to generate documentation\"],xmlrpc_server_register_method:[\"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\"Register a PHP function to handle method matching method_name\"],xmlrpc_set_type:[\"bool xmlrpc_set_type(string value, string type)\",\"Sets xmlrpc type, base64 or datetime, for a PHP string value\"],xmlwriter_end_attribute:[\"bool xmlwriter_end_attribute(resource xmlwriter)\",\"End attribute - returns FALSE on error\"],xmlwriter_end_cdata:[\"bool xmlwriter_end_cdata(resource xmlwriter)\",\"End current CDATA - returns FALSE on error\"],xmlwriter_end_comment:[\"bool xmlwriter_end_comment(resource xmlwriter)\",\"Create end comment - returns FALSE on error\"],xmlwriter_end_document:[\"bool xmlwriter_end_document(resource xmlwriter)\",\"End current document - returns FALSE on error\"],xmlwriter_end_dtd:[\"bool xmlwriter_end_dtd(resource xmlwriter)\",\"End current DTD - returns FALSE on error\"],xmlwriter_end_dtd_attlist:[\"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\"End current DTD AttList - returns FALSE on error\"],xmlwriter_end_dtd_element:[\"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\"End current DTD element - returns FALSE on error\"],xmlwriter_end_dtd_entity:[\"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\"End current DTD Entity - returns FALSE on error\"],xmlwriter_end_element:[\"bool xmlwriter_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_end_pi:[\"bool xmlwriter_end_pi(resource xmlwriter)\",\"End current PI - returns FALSE on error\"],xmlwriter_flush:[\"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\"Output current buffer\"],xmlwriter_full_end_element:[\"bool xmlwriter_full_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_open_memory:[\"resource xmlwriter_open_memory()\",\"Create new xmlwriter using memory for string output\"],xmlwriter_open_uri:[\"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\"Create new xmlwriter using source uri for output\"],xmlwriter_output_memory:[\"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\"Output current buffer as string\"],xmlwriter_set_indent:[\"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\"Toggle indentation on/off - returns FALSE on error\"],xmlwriter_set_indent_string:[\"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\"Set string used for indenting - returns FALSE on error\"],xmlwriter_start_attribute:[\"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\"Create start attribute - returns FALSE on error\"],xmlwriter_start_attribute_ns:[\"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced attribute - returns FALSE on error\"],xmlwriter_start_cdata:[\"bool xmlwriter_start_cdata(resource xmlwriter)\",\"Create start CDATA tag - returns FALSE on error\"],xmlwriter_start_comment:[\"bool xmlwriter_start_comment(resource xmlwriter)\",\"Create start comment - returns FALSE on error\"],xmlwriter_start_document:[\"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\"Create document tag - returns FALSE on error\"],xmlwriter_start_dtd:[\"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\"Create start DTD tag - returns FALSE on error\"],xmlwriter_start_dtd_attlist:[\"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\"Create start DTD AttList - returns FALSE on error\"],xmlwriter_start_dtd_element:[\"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\"Create start DTD element - returns FALSE on error\"],xmlwriter_start_dtd_entity:[\"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\"Create start DTD Entity - returns FALSE on error\"],xmlwriter_start_element:[\"bool xmlwriter_start_element(resource xmlwriter, string name)\",\"Create start element tag - returns FALSE on error\"],xmlwriter_start_element_ns:[\"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced element tag - returns FALSE on error\"],xmlwriter_start_pi:[\"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\"Create start PI tag - returns FALSE on error\"],xmlwriter_text:[\"bool xmlwriter_text(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xmlwriter_write_attribute:[\"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\"Write full attribute - returns FALSE on error\"],xmlwriter_write_attribute_ns:[\"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\"Write full namespaced attribute - returns FALSE on error\"],xmlwriter_write_cdata:[\"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\"Write full CDATA tag - returns FALSE on error\"],xmlwriter_write_comment:[\"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\"Write full comment tag - returns FALSE on error\"],xmlwriter_write_dtd:[\"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\"Write full DTD tag - returns FALSE on error\"],xmlwriter_write_dtd_attlist:[\"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\"Write full DTD AttList tag - returns FALSE on error\"],xmlwriter_write_dtd_element:[\"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\"Write full DTD element tag - returns FALSE on error\"],xmlwriter_write_dtd_entity:[\"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\"Write full DTD Entity tag - returns FALSE on error\"],xmlwriter_write_element:[\"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\"Write full element tag - returns FALSE on error\"],xmlwriter_write_element_ns:[\"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\"Write full namesapced element tag - returns FALSE on error\"],xmlwriter_write_pi:[\"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\"Write full PI tag - returns FALSE on error\"],xmlwriter_write_raw:[\"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xsl_xsltprocessor_get_parameter:[\"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_has_exslt_support:[\"bool xsl_xsltprocessor_has_exslt_support();\",\"\"],xsl_xsltprocessor_import_stylesheet:[\"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_register_php_functions:[\"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\"\"],xsl_xsltprocessor_remove_parameter:[\"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_set_parameter:[\"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\"\"],xsl_xsltprocessor_set_profiling:[\"bool xsl_xsltprocessor_set_profiling(string filename) */\",'PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s!\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling'],xsl_xsltprocessor_transform_to_doc:[\"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_transform_to_uri:[\"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\"\"],xsl_xsltprocessor_transform_to_xml:[\"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\"\"],zend_logo_guid:[\"string zend_logo_guid(void)\",\"Return the special ID used to request the Zend logo in phpinfo screens\"],zend_version:[\"string zend_version(void)\",\"Get the version of the Zend Engine\"],zip_close:[\"void zip_close(resource zip)\",\"Close a Zip archive\"],zip_entry_close:[\"void zip_entry_close(resource zip_ent)\",\"Close a zip entry\"],zip_entry_compressedsize:[\"int zip_entry_compressedsize(resource zip_entry)\",\"Return the compressed size of a ZZip entry\"],zip_entry_compressionmethod:[\"string zip_entry_compressionmethod(resource zip_entry)\",\"Return a string containing the compression method used on a particular entry\"],zip_entry_filesize:[\"int zip_entry_filesize(resource zip_entry)\",\"Return the actual filesize of a ZZip entry\"],zip_entry_name:[\"string zip_entry_name(resource zip_entry)\",\"Return the name given a ZZip entry\"],zip_entry_open:[\"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\"Open a Zip File, pointed by the resource entry\"],zip_entry_read:[\"mixed zip_entry_read(resource zip_entry [, int len])\",\"Read from an open directory entry\"],zip_open:[\"resource zip_open(string filename)\",\"Create new zip using source uri for output\"],zip_read:[\"resource zip_read(resource zip)\",\"Returns the next file in the archive\"],zlib_get_coding_type:[\"string zlib_get_coding_type(void)\",\"Returns the coding type used for output compression\"]},i={$_COOKIE:{type:\"array\"},$_ENV:{type:\"array\"},$_FILES:{type:\"array\"},$_GET:{type:\"array\"},$_POST:{type:\"array\"},$_REQUEST:{type:\"array\"},$_SERVER:{type:\"array\",value:{DOCUMENT_ROOT:1,GATEWAY_INTERFACE:1,HTTP_ACCEPT:1,HTTP_ACCEPT_CHARSET:1,HTTP_ACCEPT_ENCODING:1,HTTP_ACCEPT_LANGUAGE:1,HTTP_CONNECTION:1,HTTP_HOST:1,HTTP_REFERER:1,HTTP_USER_AGENT:1,PATH_TRANSLATED:1,PHP_SELF:1,QUERY_STRING:1,REMOTE_ADDR:1,REMOTE_PORT:1,REQUEST_METHOD:1,REQUEST_URI:1,SCRIPT_FILENAME:1,SCRIPT_NAME:1,SERVER_ADMIN:1,SERVER_NAME:1,SERVER_PORT:1,SERVER_PROTOCOL:1,SERVER_SIGNATURE:1,SERVER_SOFTWARE:1}},$_SESSION:{type:\"array\"},$GLOBALS:{type:\"array\"}},o=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(i.type===\"support.php_tag\"&&i.value===\"<?\")return this.getTagCompletions(e,t,n,r);if(i.type===\"identifier\"){if(i.index>0){var o=t.getTokenAt(n.row,i.start);if(o.type===\"support.php_tag\")return this.getTagCompletions(e,t,n,r)}return this.getFunctionCompletions(e,t,n,r)}if(s(i,\"variable\"))return this.getVariableCompletions(e,t,n,r);var u=t.getLine(n.row).substr(0,n.column);return i.type===\"string\"&&/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(u)?this.getArrayKeyCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return[{caption:\"php\",value:\"php\",meta:\"php tag\",score:1e6},{caption:\"=\",value:\"=\",meta:\"php tag\",score:1e6}]},this.getFunctionCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\"($0)\",meta:\"php function\",score:1e6,docHTML:r[e][1]}})},this.getVariableCompletions=function(e,t,n,r){var s=Object.keys(i);return s.map(function(e){return{caption:e,value:e,meta:\"php variable\",score:1e6}})},this.getArrayKeyCompletions=function(e,t,n,r){var s=t.getLine(n.row).substr(0,n.column),o=s.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];if(!i[o])return[];var u=[];return i[o].type===\"array\"&&i[o].value&&(u=Object.keys(i[o].value)),u.map(function(e){return{caption:e,value:e,meta:\"php array key\",score:1e6}})}}).call(o.prototype),t.PhpCompletions=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./php_highlight_rules\").PhpHighlightRules,o=e(\"./php_highlight_rules\").PhpLangHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=e(\"../worker/worker_client\").WorkerClient,l=e(\"./php_completions\").PhpCompletions,c=e(\"./behaviour/cstyle\").CstyleBehaviour,h=e(\"./folding/cstyle\").FoldMode,p=e(\"../unicode\"),d=e(\"./html\").Mode,v=e(\"./javascript\").Mode,m=e(\"./css\").Mode,g=function(e){this.HighlightRules=o,this.$outdent=new u,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new h};r.inherits(g,i),function(){this.tokenRe=new RegExp(\"^[\"+p.wordChars+\"_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+p.wordChars+\"_]|\\\\s])+\",\"g\"),this.lineCommentStart=[\"//\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[:]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o!=\"doc-start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id=\"ace/mode/php-inline\"}.call(g.prototype);var y=function(e){if(e&&e.inline){var t=new g;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}d.call(this),this.HighlightRules=s,this.createModeDelegates({\"js-\":v,\"css-\":m,\"php-\":g}),this.foldingRules.subModes[\"php-\"]=new h};r.inherits(y,d),function(){this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/php_worker\",\"PhpWorker\");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call(\"setOptions\",[{inline:!0}]),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/php\"}.call(y.prototype),t.Mode=y});                (function() {\n                    ace.require([\"ace/mode/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-php_laravel_blade.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(){var e=s,t=i.arrayToMap(\"abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|mysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|mysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|mysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|mysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|mysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|mysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|mysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|mysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|mysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|mysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|mysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|mysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|mysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|mysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|mysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|mysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|mysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|mysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type\".split(\"|\")),n=i.arrayToMap(\"abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|public|static|switch|throw|trait|try|use|var|while|xor|yield\".split(\"|\")),r=i.arrayToMap(\"__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset\".split(\"|\")),o=i.arrayToMap(\"true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__\".split(\"|\")),u=i.arrayToMap(\"$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv\".split(\"|\")),a=i.arrayToMap(\"key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase\".split(\"|\")),f=i.arrayToMap(\"cfunction|old_function\".split(\"|\")),l=i.arrayToMap([]);this.$rules={start:[{token:\"comment\",regex:/(?:#|\\/\\/)(?:[^?]|\\?[^>])*/},e.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language\",regex:\"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"},{token:[\"keyword\",\"text\",\"support.class\"],regex:\"\\\\b(new)(\\\\s+)(\\\\w+)\"},{token:[\"support.class\",\"keyword.operator\"],regex:\"\\\\b(\\\\w+)(::)\"},{token:\"constant.language\",regex:\"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"},{token:function(e){return n.hasOwnProperty(e)?\"keyword\":o.hasOwnProperty(e)?\"constant.language\":u.hasOwnProperty(e)?\"variable.language\":l.hasOwnProperty(e)?\"invalid.illegal\":t.hasOwnProperty(e)?\"support.function\":e==\"debugger\"?\"invalid.deprecated\":e.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/)?\"variable\":\"identifier\"},regex:/[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{onMatch:function(e,t,n){e=e.substr(3);if(e[0]==\"'\"||e[0]=='\"')e=e.slice(1,-1);return n.unshift(this.next,e),\"markup.list\"},regex:/<<<(?:\\w+|'\\w+'|\"\\w+\")$/,next:\"heredoc\"},{token:\"keyword.operator\",regex:\"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:/[,;]/},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],heredoc:[{onMatch:function(e,t,n){return n[1]!=e?\"string\":(n.shift(),n.shift(),\"markup.list\")},regex:\"^\\\\w+(?=;?$)\",next:\"start\"},{token:\"string\",regex:\".*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"constant.language.escape\",regex:'\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:\"variable\",regex:/\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/},{token:\"variable\",regex:/\\$\\{[^\"\\}]+\\}?/},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string\",regex:\"'\",next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(a,o);var f=function(){u.call(this);var e=[{token:\"support.php_tag\",regex:\"<\\\\?(?:php|=)?\",push:\"php-start\"}],t=[{token:\"support.php_tag\",regex:\"\\\\?>\",next:\"pop\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(a,\"php-\",t,[\"start\"]),this.normalizeRules()};r.inherits(f,u),t.PhpHighlightRules=f,t.PhpLangHighlightRules=a}),ace.define(\"ace/mode/php_laravel_blade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./php_highlight_rules\").PhpHighlightRules,s=function(){i.call(this);var e={start:[{include:\"comments\"},{include:\"directives\"},{include:\"parenthesis\"}],comments:[{token:\"punctuation.definition.comment.blade\",regex:\"(\\\\/\\\\/(.)*)|(\\\\#(.)*)\",next:\"pop\"},{token:\"punctuation.definition.comment.begin.php\",regex:\"(?:\\\\/\\\\*)\",push:[{token:\"punctuation.definition.comment.end.php\",regex:\"(?:\\\\*\\\\/)\",next:\"pop\"},{defaultToken:\"comment.block.blade\"}]},{token:\"punctuation.definition.comment.begin.blade\",regex:\"(?:\\\\{\\\\{\\\\-\\\\-)\",push:[{token:\"punctuation.definition.comment.end.blade\",regex:\"(?:\\\\-\\\\-\\\\}\\\\})\",next:\"pop\"},{defaultToken:\"comment.block.blade\"}]}],parenthesis:[{token:\"parenthesis.begin.blade\",regex:\"\\\\(\",push:[{token:\"parenthesis.end.blade\",regex:\"\\\\)\",next:\"pop\"},{include:\"strings\"},{include:\"variables\"},{include:\"lang\"},{include:\"parenthesis\"},{defaultToken:\"source.blade\"}]}],directives:[{token:[\"directive.declaration.blade\",\"keyword.directives.blade\"],regex:\"(@)(endunless|endisset|endempty|endauth|endguest|endcomponent|endslot|endalert|endverbatim|endsection|show|php|endphp|endpush|endprepend|endenv|endforelse|isset|empty|component|slot|alert|json|verbatim|section|auth|guest|hasSection|forelse|includeIf|includeWhen|includeFirst|each|push|stack|prepend|inject|env|elseenv|unless|yield|extends|parent|include|acfrepeater|block|can|cannot|choice|debug|elsecan|elsecannot|embed|hipchat|lang|layout|macro|macrodef|minify|partial|render|servers|set|slack|story|task|unset|wpposts|acfend|after|append|breakpoint|endafter|endcan|endcannot|endembed|endmacro|endmarkdown|endminify|endpartial|endsetup|endstory|endtask|endunless|markdown|overwrite|setup|stop|wpempty|wpend|wpquery)\"},{token:[\"directive.declaration.blade\",\"keyword.control.blade\"],regex:\"(@)(if|else|elseif|endif|foreach|endforeach|switch|case|break|default|endswitch|for|endfor|while|endwhile|continue)\"},{token:[\"directive.ignore.blade\",\"injections.begin.blade\"],regex:\"(@?)(\\\\{\\\\{)\",push:[{token:\"injections.end.blade\",regex:\"\\\\}\\\\}\",next:\"pop\"},{include:\"strings\"},{include:\"variables\"},{defaultToken:\"source.blade\"}]},{token:\"injections.unescaped.begin.blade\",regex:\"\\\\{\\\\!\\\\!\",push:[{token:\"injections.unescaped.end.blade\",regex:\"\\\\!\\\\!\\\\}\",next:\"pop\"},{include:\"strings\"},{include:\"variables\"},{defaultToken:\"source.blade\"}]}],lang:[{token:\"keyword.operator.blade\",regex:\"(?:!=|!|<=|>=|<|>|===|==|=|\\\\+\\\\+|\\\\;|\\\\,|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod|as)\\\\b\"},{token:\"constant.language.blade\",regex:\"\\\\b(?:TRUE|FALSE|true|false)\\\\b\"}],strings:[{token:\"punctuation.definition.string.begin.blade\",regex:'\"',push:[{token:\"punctuation.definition.string.end.blade\",regex:'\"',next:\"pop\"},{token:\"string.character.escape.blade\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.blade\"}]},{token:\"punctuation.definition.string.begin.blade\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.blade\",regex:\"'\",next:\"pop\"},{token:\"string.character.escape.blade\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.blade\"}]}],variables:[{token:\"variable.blade\",regex:\"\\\\$([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.blade\",\"constant.other.property.blade\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.blade\",\"meta.function-call.object.blade\",\"punctuation.definition.variable.blade\",\"variable.blade\",\"punctuation.definition.variable.blade\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))\"}]},t=e.start;for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],t);Object.keys(e).forEach(function(t){this.$rules[t]||(this.$rules[t]=e[t])},this),this.normalizeRules()};r.inherits(s,i),t.PHPLaravelBladeHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function s(e,t){return e.type.lastIndexOf(t)>-1}var r={abs:[\"int abs(int number)\",\"Return the absolute value of the number\"],acos:[\"float acos(float number)\",\"Return the arc cosine of the number in radians\"],acosh:[\"float acosh(float number)\",\"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"],addGlob:[\"bool addGlob(string pattern[,int flags [, array options]])\",\"Add files matching the glob pattern. See php's glob for the pattern syntax.\"],addPattern:[\"bool addPattern(string pattern[, string path [, array options]])\",\"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"],addcslashes:[\"string addcslashes(string str, string charlist)\",\"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"],addslashes:[\"string addslashes(string str)\",\"Escapes single quote, double quotes and backslash characters in a string with backslashes\"],apache_child_terminate:[\"bool apache_child_terminate(void)\",\"Terminate apache process after this request\"],apache_get_modules:[\"array apache_get_modules(void)\",\"Get a list of loaded Apache modules\"],apache_get_version:[\"string apache_get_version(void)\",\"Fetch Apache version\"],apache_getenv:[\"bool apache_getenv(string variable [, bool walk_to_top])\",\"Get an Apache subprocess_env variable\"],apache_lookup_uri:[\"object apache_lookup_uri(string URI)\",\"Perform a partial request of the given URI to obtain information about it\"],apache_note:[\"string apache_note(string note_name [, string note_value])\",\"Get and set Apache request notes\"],apache_request_auth_name:[\"string apache_request_auth_name()\",\"\"],apache_request_auth_type:[\"string apache_request_auth_type()\",\"\"],apache_request_discard_request_body:[\"long apache_request_discard_request_body()\",\"\"],apache_request_err_headers_out:[\"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all headers that go out in case of an error or a subrequest\"],apache_request_headers:[\"array apache_request_headers(void)\",\"Fetch all HTTP request headers\"],apache_request_headers_in:[\"array apache_request_headers_in()\",\"* fetch all incoming request headers\"],apache_request_headers_out:[\"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all outgoing request headers\"],apache_request_is_initial_req:[\"bool apache_request_is_initial_req()\",\"\"],apache_request_log_error:[\"boolean apache_request_log_error(string message, [long facility])\",\"\"],apache_request_meets_conditions:[\"long apache_request_meets_conditions()\",\"\"],apache_request_remote_host:[\"int apache_request_remote_host([int type])\",\"\"],apache_request_run:[\"long apache_request_run()\",\"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"],apache_request_satisfies:[\"long apache_request_satisfies()\",\"\"],apache_request_server_port:[\"int apache_request_server_port()\",\"\"],apache_request_set_etag:[\"void apache_request_set_etag()\",\"\"],apache_request_set_last_modified:[\"void apache_request_set_last_modified()\",\"\"],apache_request_some_auth_required:[\"bool apache_request_some_auth_required()\",\"\"],apache_request_sub_req_lookup_file:[\"object apache_request_sub_req_lookup_file(string file)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_sub_req_lookup_uri:[\"object apache_request_sub_req_lookup_uri(string uri)\",\"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"],apache_request_sub_req_method_uri:[\"object apache_request_sub_req_method_uri(string method, string uri)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_update_mtime:[\"long apache_request_update_mtime([int dependency_mtime])\",\"\"],apache_reset_timeout:[\"bool apache_reset_timeout(void)\",\"Reset the Apache write timer\"],apache_response_headers:[\"array apache_response_headers(void)\",\"Fetch all HTTP response headers\"],apache_setenv:[\"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\"Set an Apache subprocess_env variable\"],array_change_key_case:[\"array array_change_key_case(array input [, int case=CASE_LOWER])\",\"Retuns an array with all string keys lowercased [or uppercased]\"],array_chunk:[\"array array_chunk(array input, int size [, bool preserve_keys])\",\"Split array into chunks\"],array_combine:[\"array array_combine(array keys, array values)\",\"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"],array_count_values:[\"array array_count_values(array input)\",\"Return the value as key and the frequency of that value in input as value\"],array_diff:[\"array array_diff(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"],array_diff_assoc:[\"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"],array_diff_key:[\"array array_diff_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"],array_diff_uassoc:[\"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"],array_diff_ukey:[\"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"],array_fill:[\"array array_fill(int start_key, int num, mixed val)\",\"Create an array containing num elements starting with index start_key each initialized to val\"],array_fill_keys:[\"array array_fill_keys(array keys, mixed val)\",\"Create an array using the elements of the first parameter as keys each initialized to val\"],array_filter:[\"array array_filter(array input [, mixed callback])\",\"Filters elements from the array via the callback.\"],array_flip:[\"array array_flip(array input)\",\"Return array with key <-> value flipped\"],array_intersect:[\"array array_intersect(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments\"],array_intersect_assoc:[\"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"],array_intersect_key:[\"array array_intersect_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"],array_intersect_uassoc:[\"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"],array_intersect_ukey:[\"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"],array_key_exists:[\"bool array_key_exists(mixed key, array search)\",\"Checks if the given key or index exists in the array\"],array_keys:[\"array array_keys(array input [, mixed search_value[, bool strict]])\",\"Return just the keys from the input array, optionally only for the specified search_value\"],array_map:[\"array array_map(mixed callback, array input1 [, array input2 ,...])\",\"Applies the callback to the elements in given arrays.\"],array_merge:[\"array array_merge(array arr1, array arr2 [, array ...])\",\"Merges elements from passed arrays into one array\"],array_merge_recursive:[\"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\"Recursively merges elements from passed arrays into one array\"],array_multisort:[\"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"],array_pad:[\"array array_pad(array input, int pad_size, mixed pad_value)\",\"Returns a copy of input array padded with pad_value to size pad_size\"],array_pop:[\"mixed array_pop(array stack)\",\"Pops an element off the end of the array\"],array_product:[\"mixed array_product(array input)\",\"Returns the product of the array entries\"],array_push:[\"int array_push(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the end of the array\"],array_rand:[\"mixed array_rand(array input [, int num_req])\",\"Return key/keys for random entry/entries in the array\"],array_reduce:[\"mixed array_reduce(array input, mixed callback [, mixed initial])\",\"Iteratively reduce the array to a single value via the callback.\"],array_replace:[\"array array_replace(array arr1, array arr2 [, array ...])\",\"Replaces elements from passed arrays into one array\"],array_replace_recursive:[\"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\"Recursively replaces elements from passed arrays into one array\"],array_reverse:[\"array array_reverse(array input [, bool preserve keys])\",\"Return input as a new array with the order of the entries reversed\"],array_search:[\"mixed array_search(mixed needle, array haystack [, bool strict])\",\"Searches the array for a given value and returns the corresponding key if successful\"],array_shift:[\"mixed array_shift(array stack)\",\"Pops an element off the beginning of the array\"],array_slice:[\"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\"Returns elements specified by offset and length\"],array_splice:[\"array array_splice(array input, int offset [, int length [, array replacement]])\",\"Removes the elements designated by offset and length and replace them with supplied array\"],array_sum:[\"mixed array_sum(array input)\",\"Returns the sum of the array entries\"],array_udiff:[\"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"],array_udiff_assoc:[\"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"],array_udiff_uassoc:[\"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"],array_uintersect:[\"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"],array_uintersect_assoc:[\"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"],array_uintersect_uassoc:[\"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"],array_unique:[\"array array_unique(array input [, int sort_flags])\",\"Removes duplicate values from array\"],array_unshift:[\"int array_unshift(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the beginning of the array\"],array_values:[\"array array_values(array input)\",\"Return just the values from the input array\"],array_walk:[\"bool array_walk(array input, string funcname [, mixed userdata])\",\"Apply a user function to every member of an array\"],array_walk_recursive:[\"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\"Apply a user function recursively to every member of an array\"],arsort:[\"bool arsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order and maintain index association\"],asin:[\"float asin(float number)\",\"Returns the arc sine of the number in radians\"],asinh:[\"float asinh(float number)\",\"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"],asort:[\"bool asort(array &array_arg [, int sort_flags])\",\"Sort an array and maintain index association\"],assert:[\"int assert(string|bool assertion)\",\"Checks if assertion is false\"],assert_options:[\"mixed assert_options(int what [, mixed value])\",\"Set/get the various assert flags\"],atan:[\"float atan(float number)\",\"Returns the arc tangent of the number in radians\"],atan2:[\"float atan2(float y, float x)\",\"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"],atanh:[\"float atanh(float number)\",\"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"],attachIterator:[\"void attachIterator(Iterator iterator[, mixed info])\",\"Attach a new iterator\"],base64_decode:[\"string base64_decode(string str[, bool strict])\",\"Decodes string using MIME base64 algorithm\"],base64_encode:[\"string base64_encode(string str)\",\"Encodes string using MIME base64 algorithm\"],base_convert:[\"string base_convert(string number, int frombase, int tobase)\",\"Converts a number in a string from any base <= 36 to any base <= 36\"],basename:[\"string basename(string path [, string suffix])\",\"Returns the filename component of the path\"],bcadd:[\"string bcadd(string left_operand, string right_operand [, int scale])\",\"Returns the sum of two arbitrary precision numbers\"],bccomp:[\"int bccomp(string left_operand, string right_operand [, int scale])\",\"Compares two arbitrary precision numbers\"],bcdiv:[\"string bcdiv(string left_operand, string right_operand [, int scale])\",\"Returns the quotient of two arbitrary precision numbers (division)\"],bcmod:[\"string bcmod(string left_operand, string right_operand)\",\"Returns the modulus of the two arbitrary precision operands\"],bcmul:[\"string bcmul(string left_operand, string right_operand [, int scale])\",\"Returns the multiplication of two arbitrary precision numbers\"],bcpow:[\"string bcpow(string x, string y [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another\"],bcpowmod:[\"string bcpowmod(string x, string y, string mod [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"],bcscale:[\"bool bcscale(int scale)\",\"Sets default scale parameter for all bc math functions\"],bcsqrt:[\"string bcsqrt(string operand [, int scale])\",\"Returns the square root of an arbitray precision number\"],bcsub:[\"string bcsub(string left_operand, string right_operand [, int scale])\",\"Returns the difference between two arbitrary precision numbers\"],bin2hex:[\"string bin2hex(string data)\",\"Converts the binary representation of data to hex\"],bind_textdomain_codeset:[\"string bind_textdomain_codeset (string domain, string codeset)\",\"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"],bindec:[\"int bindec(string binary_number)\",\"Returns the decimal equivalent of the binary number\"],bindtextdomain:[\"string bindtextdomain(string domain_name, string dir)\",\"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"],birdstep_autocommit:[\"bool birdstep_autocommit(int index)\",\"\"],birdstep_close:[\"bool birdstep_close(int id)\",\"\"],birdstep_commit:[\"bool birdstep_commit(int index)\",\"\"],birdstep_connect:[\"int birdstep_connect(string server, string user, string pass)\",\"\"],birdstep_exec:[\"int birdstep_exec(int index, string exec_str)\",\"\"],birdstep_fetch:[\"bool birdstep_fetch(int index)\",\"\"],birdstep_fieldname:[\"string birdstep_fieldname(int index, int col)\",\"\"],birdstep_fieldnum:[\"int birdstep_fieldnum(int index)\",\"\"],birdstep_freeresult:[\"bool birdstep_freeresult(int index)\",\"\"],birdstep_off_autocommit:[\"bool birdstep_off_autocommit(int index)\",\"\"],birdstep_result:[\"mixed birdstep_result(int index, mixed col)\",\"\"],birdstep_rollback:[\"bool birdstep_rollback(int index)\",\"\"],bzcompress:[\"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\"Compresses a string into BZip2 encoded data\"],bzdecompress:[\"string bzdecompress(string source [, int small])\",\"Decompresses BZip2 compressed data\"],bzerrno:[\"int bzerrno(resource bz)\",\"Returns the error number\"],bzerror:[\"array bzerror(resource bz)\",\"Returns the error number and error string in an associative array\"],bzerrstr:[\"string bzerrstr(resource bz)\",\"Returns the error string\"],bzopen:[\"resource bzopen(string|int file|fp, string mode)\",\"Opens a new BZip2 stream\"],bzread:[\"string bzread(resource bz[, int length])\",\"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"],cal_days_in_month:[\"int cal_days_in_month(int calendar, int month, int year)\",\"Returns the number of days in a month for a given year and calendar\"],cal_from_jd:[\"array cal_from_jd(int jd, int calendar)\",\"Converts from Julian Day Count to a supported calendar and return extended information\"],cal_info:[\"array cal_info([int calendar])\",\"Returns information about a particular calendar\"],cal_to_jd:[\"int cal_to_jd(int calendar, int month, int day, int year)\",\"Converts from a supported calendar to Julian Day Count\"],call_user_func:[\"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],call_user_func_array:[\"mixed call_user_func_array(string function_name, array parameters)\",\"Call a user function which is the first parameter with the arguments contained in array\"],call_user_method:[\"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\"Call a user method on a specific object or class\"],call_user_method_array:[\"mixed call_user_method_array(string method_name, mixed object, array params)\",\"Call a user method on a specific object or class using a parameter array\"],ceil:[\"float ceil(float number)\",\"Returns the next highest integer value of the number\"],chdir:[\"bool chdir(string directory)\",\"Change the current directory\"],checkdate:[\"bool checkdate(int month, int day, int year)\",\"Returns true(1) if it is a valid date in gregorian calendar\"],chgrp:[\"bool chgrp(string filename, mixed group)\",\"Change file group\"],chmod:[\"bool chmod(string filename, int mode)\",\"Change file mode\"],chown:[\"bool chown (string filename, mixed user)\",\"Change file owner\"],chr:[\"string chr(int ascii)\",\"Converts ASCII code to a character\"],chroot:[\"bool chroot(string directory)\",\"Change root directory\"],chunk_split:[\"string chunk_split(string str [, int chunklen [, string ending]])\",\"Returns split line\"],class_alias:[\"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\"Creates an alias for user defined class\"],class_exists:[\"bool class_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],class_implements:[\"array class_implements(mixed what [, bool autoload ])\",\"Return all classes and interfaces implemented by SPL\"],class_parents:[\"array class_parents(object instance [, boolean autoload = true])\",\"Return an array containing the names of all parent classes\"],clearstatcache:[\"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\"Clear file stat cache\"],closedir:[\"void closedir([resource dir_handle])\",\"Close directory connection identified by the dir_handle\"],closelog:[\"bool closelog(void)\",\"Close connection to system logger\"],collator_asort:[\"bool collator_asort( Collator $coll, array(string) $arr )\",\"* Sort array using specified collator, maintaining index association.\"],collator_compare:[\"int collator_compare( Collator $coll, string $str1, string $str2 )\",\"* Compare two strings.\"],collator_create:[\"Collator collator_create( string $locale )\",\"* Create collator.\"],collator_get_attribute:[\"int collator_get_attribute( Collator $coll, int $attr )\",\"* Get collation attribute value.\"],collator_get_error_code:[\"int collator_get_error_code( Collator $coll )\",\"* Get collator's last error code.\"],collator_get_error_message:[\"string collator_get_error_message( Collator $coll )\",\"* Get text description for collator's last error code.\"],collator_get_locale:[\"string collator_get_locale( Collator $coll, int $type )\",\"* Gets the locale name of the collator.\"],collator_get_sort_key:[\"bool collator_get_sort_key( Collator $coll, string $str )\",\"* Get a sort key for a string from a Collator. }}}\"],collator_get_strength:[\"int collator_get_strength(Collator coll)\",\"* Returns the current collation strength.\"],collator_set_attribute:[\"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\"* Set collation attribute.\"],collator_set_strength:[\"bool collator_set_strength(Collator coll, int strength)\",\"* Set the collation strength.\"],collator_sort:[\"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\"* Sort array using specified collator.\"],collator_sort_with_sort_keys:[\"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"],com_create_guid:[\"string com_create_guid()\",\"Generate a globally unique identifier (GUID)\"],com_event_sink:[\"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\"Connect events from a COM object to a PHP object\"],com_get_active_object:[\"object com_get_active_object(string progid [, int code_page ])\",\"Returns a handle to an already running instance of a COM object\"],com_load_typelib:[\"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\"Loads a Typelibrary and registers its constants\"],com_message_pump:[\"bool com_message_pump([int timeoutms])\",\"Process COM messages, sleeping for up to timeoutms milliseconds\"],com_print_typeinfo:[\"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\"Print out a PHP class definition for a dispatchable interface\"],compact:[\"array compact(mixed var_names [, mixed ...])\",\"Creates a hash containing variables and their values\"],compose_locale:[\"static string compose_locale($array)\",\"* Creates a locale by combining the parts of locale-ID passed  * }}}\"],confirm_extname_compiled:[\"string confirm_extname_compiled(string arg)\",\"Return a string to confirm that the module is compiled in\"],connection_aborted:[\"int connection_aborted(void)\",\"Returns true if client disconnected\"],connection_status:[\"int connection_status(void)\",\"Returns the connection status bitfield\"],constant:[\"mixed constant(string const_name)\",\"Given the name of a constant this function will return the constant's associated value\"],convert_cyr_string:[\"string convert_cyr_string(string str, string from, string to)\",\"Convert from one Cyrillic character set to another\"],convert_uudecode:[\"string convert_uudecode(string data)\",\"decode a uuencoded string\"],convert_uuencode:[\"string convert_uuencode(string data)\",\"uuencode a string\"],copy:[\"bool copy(string source_file, string destination_file [, resource context])\",\"Copy a file\"],cos:[\"float cos(float number)\",\"Returns the cosine of the number in radians\"],cosh:[\"float cosh(float number)\",\"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"],count:[\"int count(mixed var [, int mode])\",\"Count the number of elements in a variable (usually an array)\"],count_chars:[\"mixed count_chars(string input [, int mode])\",\"Returns info about what characters are used in input\"],crc32:[\"string crc32(string str)\",\"Calculate the crc32 polynomial of a string\"],create_function:[\"string create_function(string args, string code)\",\"Creates an anonymous function, and returns its name (funny, eh?)\"],crypt:[\"string crypt(string str [, string salt])\",\"Hash a string\"],ctype_alnum:[\"bool ctype_alnum(mixed c)\",\"Checks for alphanumeric character(s)\"],ctype_alpha:[\"bool ctype_alpha(mixed c)\",\"Checks for alphabetic character(s)\"],ctype_cntrl:[\"bool ctype_cntrl(mixed c)\",\"Checks for control character(s)\"],ctype_digit:[\"bool ctype_digit(mixed c)\",\"Checks for numeric character(s)\"],ctype_graph:[\"bool ctype_graph(mixed c)\",\"Checks for any printable character(s) except space\"],ctype_lower:[\"bool ctype_lower(mixed c)\",\"Checks for lowercase character(s)\"],ctype_print:[\"bool ctype_print(mixed c)\",\"Checks for printable character(s)\"],ctype_punct:[\"bool ctype_punct(mixed c)\",\"Checks for any printable character which is not whitespace or an alphanumeric character\"],ctype_space:[\"bool ctype_space(mixed c)\",\"Checks for whitespace character(s)\"],ctype_upper:[\"bool ctype_upper(mixed c)\",\"Checks for uppercase character(s)\"],ctype_xdigit:[\"bool ctype_xdigit(mixed c)\",\"Checks for character(s) representing a hexadecimal digit\"],curl_close:[\"void curl_close(resource ch)\",\"Close a cURL session\"],curl_copy_handle:[\"resource curl_copy_handle(resource ch)\",\"Copy a cURL handle along with all of it's preferences\"],curl_errno:[\"int curl_errno(resource ch)\",\"Return an integer containing the last error number\"],curl_error:[\"string curl_error(resource ch)\",\"Return a string contain the last error for the current session\"],curl_exec:[\"bool curl_exec(resource ch)\",\"Perform a cURL session\"],curl_getinfo:[\"mixed curl_getinfo(resource ch [, int option])\",\"Get information regarding a specific transfer\"],curl_init:[\"resource curl_init([string url])\",\"Initialize a cURL session\"],curl_multi_add_handle:[\"int curl_multi_add_handle(resource mh, resource ch)\",\"Add a normal cURL handle to a cURL multi handle\"],curl_multi_close:[\"void curl_multi_close(resource mh)\",\"Close a set of cURL handles\"],curl_multi_exec:[\"int curl_multi_exec(resource mh, int &still_running)\",\"Run the sub-connections of the current cURL handle\"],curl_multi_getcontent:[\"string curl_multi_getcontent(resource ch)\",\"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"],curl_multi_info_read:[\"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\"Get information about the current transfers\"],curl_multi_init:[\"resource curl_multi_init(void)\",\"Returns a new cURL multi handle\"],curl_multi_remove_handle:[\"int curl_multi_remove_handle(resource mh, resource ch)\",\"Remove a multi handle from a set of cURL handles\"],curl_multi_select:[\"int curl_multi_select(resource mh[, double timeout])\",'Get all the sockets associated with the cURL extension, which can then be \"selected\"'],curl_setopt:[\"bool curl_setopt(resource ch, int option, mixed value)\",\"Set an option for a cURL transfer\"],curl_setopt_array:[\"bool curl_setopt_array(resource ch, array options)\",\"Set an array of option for a cURL transfer\"],curl_version:[\"array curl_version([int version])\",\"Return cURL version information.\"],current:[\"mixed current(array array_arg)\",\"Return the element currently pointed to by the internal array pointer\"],date:[\"string date(string format [, long timestamp])\",\"Format a local date/time\"],date_add:[\"DateTime date_add(DateTime object, DateInterval interval)\",\"Adds an interval to the current date in object.\"],date_create:[\"DateTime date_create([string time[, DateTimeZone object]])\",\"Returns new DateTime object\"],date_create_from_format:[\"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\"Returns new DateTime object formatted according to the specified format\"],date_date_set:[\"DateTime date_date_set(DateTime object, long year, long month, long day)\",\"Sets the date.\"],date_default_timezone_get:[\"string date_default_timezone_get()\",\"Gets the default timezone used by all date/time functions in a script\"],date_default_timezone_set:[\"bool date_default_timezone_set(string timezone_identifier)\",\"Sets the default timezone used by all date/time functions in a script\"],date_diff:[\"DateInterval date_diff(DateTime object [, bool absolute])\",\"Returns the difference between two DateTime objects.\"],date_format:[\"string date_format(DateTime object, string format)\",\"Returns date formatted according to given format\"],date_get_last_errors:[\"array date_get_last_errors()\",\"Returns the warnings and errors found while parsing a date/time string.\"],date_interval_create_from_date_string:[\"DateInterval date_interval_create_from_date_string(string time)\",\"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"],date_interval_format:[\"string date_interval_format(DateInterval object, string format)\",\"Formats the interval.\"],date_isodate_set:[\"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\"Sets the ISO date.\"],date_modify:[\"DateTime date_modify(DateTime object, string modify)\",\"Alters the timestamp.\"],date_offset_get:[\"long date_offset_get(DateTime object)\",\"Returns the DST offset.\"],date_parse:[\"array date_parse(string date)\",\"Returns associative array with detailed info about given date\"],date_parse_from_format:[\"array date_parse_from_format(string format, string date)\",\"Returns associative array with detailed info about given date\"],date_sub:[\"DateTime date_sub(DateTime object, DateInterval interval)\",\"Subtracts an interval to the current date in object.\"],date_sun_info:[\"array date_sun_info(long time, float latitude, float longitude)\",\"Returns an array with information about sun set/rise and twilight begin/end\"],date_sunrise:[\"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunrise for a given day and location\"],date_sunset:[\"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunset for a given day and location\"],date_time_set:[\"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\"Sets the time.\"],date_timestamp_get:[\"long date_timestamp_get(DateTime object)\",\"Gets the Unix timestamp.\"],date_timestamp_set:[\"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\"Sets the date and time based on an Unix timestamp.\"],date_timezone_get:[\"DateTimeZone date_timezone_get(DateTime object)\",\"Return new DateTimeZone object relative to give DateTime\"],date_timezone_set:[\"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\"Sets the timezone for the DateTime object.\"],datefmt_create:[\"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\"* Create formatter.\"],datefmt_format:[\"string datefmt_format( [mixed]int $args or array $args )\",\"* Format the time value as a string. }}}\"],datefmt_get_calendar:[\"string datefmt_get_calendar( IntlDateFormatter $mf )\",\"* Get formatter calendar.\"],datefmt_get_datetype:[\"string datefmt_get_datetype( IntlDateFormatter $mf )\",\"* Get formatter datetype.\"],datefmt_get_error_code:[\"int datefmt_get_error_code( IntlDateFormatter $nf )\",\"* Get formatter's last error code.\"],datefmt_get_error_message:[\"string datefmt_get_error_message( IntlDateFormatter $coll )\",\"* Get text description for formatter's last error code.\"],datefmt_get_locale:[\"string datefmt_get_locale(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_get_pattern:[\"string datefmt_get_pattern( IntlDateFormatter $mf )\",\"* Get formatter pattern.\"],datefmt_get_timetype:[\"string datefmt_get_timetype( IntlDateFormatter $mf )\",\"* Get formatter timetype.\"],datefmt_get_timezone_id:[\"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\"* Get formatter timezone_id.\"],datefmt_isLenient:[\"string datefmt_isLenient(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_localtime:[\"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\"* Parse the string $value to a localtime array  }}}\"],datefmt_parse:[\"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"],datefmt_setLenient:[\"string datefmt_setLenient(IntlDateFormatter $mf)\",\"* Set formatter lenient.\"],datefmt_set_calendar:[\"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\"* Set formatter calendar.\"],datefmt_set_pattern:[\"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],datefmt_set_timezone_id:[\"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\"* Set formatter timezone_id.\"],dba_close:[\"void dba_close(resource handle)\",\"Closes database\"],dba_delete:[\"bool dba_delete(string key, resource handle)\",\"Deletes the entry associated with key    If inifile: remove all other key lines\"],dba_exists:[\"bool dba_exists(string key, resource handle)\",\"Checks, if the specified key exists\"],dba_fetch:[\"string dba_fetch(string key, [int skip ,] resource handle)\",\"Fetches the data associated with key\"],dba_firstkey:[\"string dba_firstkey(resource handle)\",\"Resets the internal key pointer and returns the first key\"],dba_handlers:[\"array dba_handlers([bool full_info])\",\"List configured database handlers\"],dba_insert:[\"bool dba_insert(string key, string value, resource handle)\",\"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"],dba_key_split:[\"array|false dba_key_split(string key)\",\"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"],dba_list:[\"array dba_list()\",\"List opened databases\"],dba_nextkey:[\"string dba_nextkey(resource handle)\",\"Returns the next key\"],dba_open:[\"resource dba_open(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode\"],dba_optimize:[\"bool dba_optimize(resource handle)\",\"Optimizes (e.g. clean up, vacuum) database\"],dba_popen:[\"resource dba_popen(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode persistently\"],dba_replace:[\"bool dba_replace(string key, string value, resource handle)\",\"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"],dba_sync:[\"bool dba_sync(resource handle)\",\"Synchronizes database\"],dcgettext:[\"string dcgettext(string domain_name, string msgid, long category)\",\"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"],dcngettext:[\"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\"Plural version of dcgettext()\"],debug_backtrace:[\"array debug_backtrace([bool provide_object])\",\"Return backtrace as array\"],debug_print_backtrace:[\"void debug_print_backtrace(void) */\",\"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);\",\"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"],dom_document_relaxNG_validate_xml:[\"boolean dom_document_relaxNG_validate_xml(string source); */\",\"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"],dom_document_rename_node:[\"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"],dom_document_save:[\"int dom_document_save(string file);\",\"Convenience method to save to file\"],dom_document_save_html:[\"string dom_document_save_html();\",\"Convenience method to output as html\"],dom_document_save_html_file:[\"int dom_document_save_html_file(string file);\",\"Convenience method to save to file as html\"],dom_document_savexml:[\"string dom_document_savexml([node n]);\",\"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"],dom_document_schema_validate:[\"boolean dom_document_schema_validate(string source); */\",\"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"],dom_document_schema_validate_file:[\"boolean dom_document_schema_validate_file(string filename); */\",\"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"],dom_document_validate:[\"boolean dom_document_validate();\",\"Since: DOM extended\"],dom_document_xinclude:[\"int dom_document_xinclude([int options])\",\"Substitutues xincludes in a DomDocument\"],dom_domconfiguration_can_set_parameter:[\"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"],dom_domconfiguration_get_parameter:[\"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"],dom_domconfiguration_set_parameter:[\"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"],dom_domerrorhandler_handle_error:[\"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"],dom_domimplementation_create_document:[\"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"],dom_domimplementation_create_document_type:[\"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"],dom_domimplementation_get_feature:[\"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"],dom_domimplementation_has_feature:[\"boolean dom_domimplementation_has_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"],dom_domimplementationlist_item:[\"domdomimplementation dom_domimplementationlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"],dom_domimplementationsource_get_domimplementation:[\"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"],dom_domimplementationsource_get_domimplementations:[\"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"],dom_domstringlist_item:[\"domstring dom_domstringlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"],dom_element_get_attribute:[\"string dom_element_get_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"],dom_element_get_attribute_node:[\"DOMAttr dom_element_get_attribute_node(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"],dom_element_get_attribute_node_ns:[\"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"],dom_element_get_attribute_ns:[\"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"],dom_element_get_elements_by_tag_name:[\"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"],dom_element_get_elements_by_tag_name_ns:[\"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"],dom_element_has_attribute:[\"boolean dom_element_has_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"],dom_element_has_attribute_ns:[\"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"],dom_element_remove_attribute:[\"void dom_element_remove_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"],dom_element_remove_attribute_node:[\"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"],dom_element_remove_attribute_ns:[\"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"],dom_element_set_attribute:[\"void dom_element_set_attribute(string name, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"],dom_element_set_attribute_node:[\"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"],dom_element_set_attribute_node_ns:[\"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"],dom_element_set_attribute_ns:[\"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"],dom_element_set_id_attribute:[\"void dom_element_set_id_attribute(string name, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"],dom_element_set_id_attribute_node:[\"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"],dom_element_set_id_attribute_ns:[\"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"],dom_import_simplexml:[\"somNode dom_import_simplexml(sxeobject node)\",\"Get a simplexml_element object from dom to allow for processing\"],dom_namednodemap_get_named_item:[\"DOMNode dom_namednodemap_get_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"],dom_namednodemap_get_named_item_ns:[\"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"],dom_namednodemap_item:[\"DOMNode dom_namednodemap_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"],dom_namednodemap_remove_named_item:[\"DOMNode dom_namednodemap_remove_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"],dom_namednodemap_remove_named_item_ns:[\"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"],dom_namednodemap_set_named_item:[\"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"],dom_namednodemap_set_named_item_ns:[\"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"],dom_namelist_get_name:[\"string dom_namelist_get_name(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"],dom_namelist_get_namespace_uri:[\"string dom_namelist_get_namespace_uri(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"],dom_node_append_child:[\"DomNode dom_node_append_child(DomNode newChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"],dom_node_clone_node:[\"DomNode dom_node_clone_node(boolean deep);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"],dom_node_compare_document_position:[\"short dom_node_compare_document_position(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"],dom_node_get_feature:[\"DomNode dom_node_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"],dom_node_get_user_data:[\"mixed dom_node_get_user_data(string key);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"],dom_node_has_attributes:[\"boolean dom_node_has_attributes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"],dom_node_has_child_nodes:[\"boolean dom_node_has_child_nodes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"],dom_node_insert_before:[\"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"],dom_node_is_default_namespace:[\"boolean dom_node_is_default_namespace(string namespaceURI);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"],dom_node_is_equal_node:[\"boolean dom_node_is_equal_node(DomNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"],dom_node_is_same_node:[\"boolean dom_node_is_same_node(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"],dom_node_is_supported:[\"boolean dom_node_is_supported(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"],dom_node_lookup_namespace_uri:[\"string dom_node_lookup_namespace_uri(string prefix);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"],dom_node_lookup_prefix:[\"string dom_node_lookup_prefix(string namespaceURI);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"],dom_node_normalize:[\"void dom_node_normalize();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"],dom_node_remove_child:[\"DomNode dom_node_remove_child(DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"],dom_node_replace_child:[\"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"],dom_node_set_user_data:[\"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"],dom_nodelist_item:[\"DOMNode dom_nodelist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"],dom_string_extend_find_offset16:[\"int dom_string_extend_find_offset16(int offset32);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"],dom_string_extend_find_offset32:[\"int dom_string_extend_find_offset32(int offset16);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"],dom_text_is_whitespace_in_element_content:[\"boolean dom_text_is_whitespace_in_element_content();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"],dom_text_replace_whole_text:[\"DOMText dom_text_replace_whole_text(string content);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"],dom_text_split_text:[\"DOMText dom_text_split_text(int offset);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"],dom_userdatahandler_handle:[\"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"],dom_xpath_evaluate:[\"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"],dom_xpath_query:[\"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"],dom_xpath_register_ns:[\"boolean dom_xpath_register_ns(string prefix, string uri); */\",'PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Oss\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid XPath Context\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}'],dom_xpath_register_php_functions:[\"void dom_xpath_register_php_functions() */\",'PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"a\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions'],each:[\"array each(array arr)\",\"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"],easter_date:[\"int easter_date([int year])\",\"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"],easter_days:[\"int easter_days([int year, [int method]])\",\"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"],echo:[\"void echo(string arg1 [, string ...])\",\"Output one or more strings\"],empty:[\"bool empty( mixed var )\",\"Determine whether a variable is empty\"],enchant_broker_describe:[\"array enchant_broker_describe(resource broker)\",\"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"],enchant_broker_dict_exists:[\"bool enchant_broker_dict_exists(resource broker, string tag)\",\"Whether a dictionary exists or not. Using non-empty tag\"],enchant_broker_free:[\"boolean enchant_broker_free(resource broker)\",\"Destroys the broker object and its dictionnaries\"],enchant_broker_free_dict:[\"resource enchant_broker_free_dict(resource dict)\",\"Free the dictionary resource\"],enchant_broker_get_dict_path:[\"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\"Get the directory path for a given backend, works with ispell and myspell\"],enchant_broker_get_error:[\"string enchant_broker_get_error(resource broker)\",\"Returns the last error of the broker\"],enchant_broker_init:[\"resource enchant_broker_init()\",\"create a new broker object capable of requesting\"],enchant_broker_list_dicts:[\"string enchant_broker_list_dicts(resource broker)\",\"Lists the dictionaries available for the given broker\"],enchant_broker_request_dict:[\"resource enchant_broker_request_dict(resource broker, string tag)\",'create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\"en_US\", \"de_DE\", ...)'],enchant_broker_request_pwl_dict:[\"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"],enchant_broker_set_dict_path:[\"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\"Set the directory path for a given backend, works with ispell and myspell\"],enchant_broker_set_ordering:[\"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"],enchant_dict_add_to_personal:[\"void enchant_dict_add_to_personal(resource dict, string word)\",\"add 'word' to personal word list\"],enchant_dict_add_to_session:[\"void enchant_dict_add_to_session(resource dict, string word)\",\"add 'word' to this spell-checking session\"],enchant_dict_check:[\"bool enchant_dict_check(resource dict, string word)\",\"If the word is correctly spelled return true, otherwise return false\"],enchant_dict_describe:[\"array enchant_dict_describe(resource dict)\",\"Describes an individual dictionary 'dict'\"],enchant_dict_get_error:[\"string enchant_dict_get_error(resource dict)\",\"Returns the last error of the current spelling-session\"],enchant_dict_is_in_session:[\"bool enchant_dict_is_in_session(resource dict, string word)\",\"whether or not 'word' exists in this spelling-session\"],enchant_dict_quick_check:[\"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"],enchant_dict_store_replacement:[\"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"],enchant_dict_suggest:[\"array enchant_dict_suggest(resource dict, string word)\",\"Will return a list of values if any of those pre-conditions are not met.\"],end:[\"mixed end(array array_arg)\",\"Advances array argument's internal pointer to the last element and return it\"],ereg:[\"int ereg(string pattern, string string [, array registers])\",\"Regular expression match\"],ereg_replace:[\"string ereg_replace(string pattern, string replacement, string string)\",\"Replace regular expression\"],eregi:[\"int eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match\"],eregi_replace:[\"string eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression\"],error_get_last:[\"array error_get_last()\",\"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"],error_log:[\"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\"Send an error message somewhere\"],error_reporting:[\"int error_reporting([int new_error_level])\",\"Return the current error_reporting level, and if an argument was passed - change to the new level\"],escapeshellarg:[\"string escapeshellarg(string arg)\",\"Quote and escape an argument for use in a shell command\"],escapeshellcmd:[\"string escapeshellcmd(string command)\",\"Escape shell metacharacters\"],exec:[\"string exec(string command [, array &output [, int &return_value]])\",\"Execute an external program\"],exif_imagetype:[\"int exif_imagetype(string imagefile)\",\"Get the type of an image\"],exif_read_data:[\"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"],exif_tagname:[\"string exif_tagname(index)\",\"Get headername for index or false if not defined\"],exif_thumbnail:[\"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\"Reads the embedded thumbnail\"],exit:[\"void exit([mixed status])\",\"Output a message and terminate the current script\"],exp:[\"float exp(float number)\",\"Returns e raised to the power of the number\"],explode:[\"array explode(string separator, string str [, int limit])\",\"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"],expm1:[\"float expm1(float number)\",\"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"],extension_loaded:[\"bool extension_loaded(string extension_name)\",\"Returns true if the named extension is loaded\"],extract:[\"int extract(array var_array [, int extract_type [, string prefix]])\",\"Imports variables into symbol table from an array\"],ezmlm_hash:[\"int ezmlm_hash(string addr)\",\"Calculate EZMLM list hash value.\"],fclose:[\"bool fclose(resource fp)\",\"Close an open file pointer\"],feof:[\"bool feof(resource fp)\",\"Test for end-of-file on a file pointer\"],fflush:[\"bool fflush(resource fp)\",\"Flushes output\"],fgetc:[\"string fgetc(resource fp)\",\"Get a character from file pointer\"],fgetcsv:[\"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\"Get line from file pointer and parse for CSV fields\"],fgets:[\"string fgets(resource fp[, int length])\",\"Get a line from file pointer\"],fgetss:[\"string fgetss(resource fp [, int length [, string allowable_tags]])\",\"Get a line from file pointer and strip HTML tags\"],file:[\"array file(string filename [, int flags[, resource context]])\",\"Read entire file into an array\"],file_exists:[\"bool file_exists(string filename)\",\"Returns true if filename exists\"],file_get_contents:[\"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\"Read the entire file into a string\"],file_put_contents:[\"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\"Write/Create a file with contents data and return the number of bytes written\"],fileatime:[\"int fileatime(string filename)\",\"Get last access time of file\"],filectime:[\"int filectime(string filename)\",\"Get inode modification time of file\"],filegroup:[\"int filegroup(string filename)\",\"Get file group\"],fileinode:[\"int fileinode(string filename)\",\"Get file inode\"],filemtime:[\"int filemtime(string filename)\",\"Get last modification time of file\"],fileowner:[\"int fileowner(string filename)\",\"Get file owner\"],fileperms:[\"int fileperms(string filename)\",\"Get file permissions\"],filesize:[\"int filesize(string filename)\",\"Get file size\"],filetype:[\"string filetype(string filename)\",\"Get file type\"],filter_has_var:[\"mixed filter_has_var(constant type, string variable_name)\",\"* Returns true if the variable with the name 'name' exists in source.\"],filter_input:[\"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\"* Returns the filtered variable 'name'* from source `type`.\"],filter_input_array:[\"mixed filter_input_array(constant type, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],filter_var:[\"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\"* Returns the filtered version of the vriable.\"],filter_var_array:[\"mixed filter_var_array(array data, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],finfo_buffer:[\"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\"Return infromation about a string buffer.\"],finfo_close:[\"resource finfo_close(resource finfo)\",\"Close fileinfo resource.\"],finfo_file:[\"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\"Return information about a file.\"],finfo_open:[\"resource finfo_open([int options [, string arg]])\",\"Create a new fileinfo resource.\"],finfo_set_flags:[\"bool finfo_set_flags(resource finfo, int options)\",\"Set libmagic configuration options.\"],floatval:[\"float floatval(mixed var)\",\"Get the float value of a variable\"],flock:[\"bool flock(resource fp, int operation [, int &wouldblock])\",\"Portable file locking\"],floor:[\"float floor(float number)\",\"Returns the next lowest integer value from the number\"],flush:[\"void flush(void)\",\"Flush the output buffer\"],fmod:[\"float fmod(float x, float y)\",\"Returns the remainder of dividing x by y as a float\"],fnmatch:[\"bool fnmatch(string pattern, string filename [, int flags])\",\"Match filename against pattern\"],fopen:[\"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\"Open a file or a URL and return a file pointer\"],forward_static_call:[\"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],fpassthru:[\"int fpassthru(resource fp)\",\"Output all remaining data from a file pointer\"],fprintf:[\"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string into a stream\"],fputcsv:[\"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\"Format line as CSV and write to file pointer\"],fread:[\"string fread(resource fp, int length)\",\"Binary-safe file read\"],frenchtojd:[\"int frenchtojd(int month, int day, int year)\",\"Converts a french republic calendar date to julian day count\"],fscanf:[\"mixed fscanf(resource stream, string format [, string ...])\",\"Implements a mostly ANSI compatible fscanf()\"],fseek:[\"int fseek(resource fp, int offset [, int whence])\",\"Seek on a file pointer\"],fsockopen:[\"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open Internet or Unix domain socket connection\"],fstat:[\"array fstat(resource fp)\",\"Stat() on a filehandle\"],ftell:[\"int ftell(resource fp)\",\"Get file pointer's read/write position\"],ftok:[\"int ftok(string pathname, string proj)\",\"Convert a pathname and a project identifier to a System V IPC key\"],ftp_alloc:[\"bool ftp_alloc(resource stream, int size[, &response])\",\"Attempt to allocate space on the remote FTP server\"],ftp_cdup:[\"bool ftp_cdup(resource stream)\",\"Changes to the parent directory\"],ftp_chdir:[\"bool ftp_chdir(resource stream, string directory)\",\"Changes directories\"],ftp_chmod:[\"int ftp_chmod(resource stream, int mode, string filename)\",\"Sets permissions on a file\"],ftp_close:[\"bool ftp_close(resource stream)\",\"Closes the FTP stream\"],ftp_connect:[\"resource ftp_connect(string host [, int port [, int timeout]])\",\"Opens a FTP stream\"],ftp_delete:[\"bool ftp_delete(resource stream, string file)\",\"Deletes a file\"],ftp_exec:[\"bool ftp_exec(resource stream, string command)\",\"Requests execution of a program on the FTP server\"],ftp_fget:[\"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server and writes it to an open file\"],ftp_fput:[\"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server\"],ftp_get:[\"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server and writes it to a local file\"],ftp_get_option:[\"mixed ftp_get_option(resource stream, int option)\",\"Gets an FTP option\"],ftp_login:[\"bool ftp_login(resource stream, string username, string password)\",\"Logs into the FTP server\"],ftp_mdtm:[\"int ftp_mdtm(resource stream, string filename)\",\"Returns the last modification time of the file, or -1 on error\"],ftp_mkdir:[\"string ftp_mkdir(resource stream, string directory)\",\"Creates a directory and returns the absolute path for the new directory or false on error\"],ftp_nb_continue:[\"int ftp_nb_continue(resource stream)\",\"Continues retrieving/sending a file nbronously\"],ftp_nb_fget:[\"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server asynchronly and writes it to an open file\"],ftp_nb_fput:[\"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server nbronly\"],ftp_nb_get:[\"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server nbhronly and writes it to a local file\"],ftp_nb_put:[\"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_nlist:[\"array ftp_nlist(resource stream, string directory)\",\"Returns an array of filenames in the given directory\"],ftp_pasv:[\"bool ftp_pasv(resource stream, bool pasv)\",\"Turns passive mode on or off\"],ftp_put:[\"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_pwd:[\"string ftp_pwd(resource stream)\",\"Returns the present working directory\"],ftp_raw:[\"array ftp_raw(resource stream, string command)\",\"Sends a literal command to the FTP server\"],ftp_rawlist:[\"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\"Returns a detailed listing of a directory as an array of output lines\"],ftp_rename:[\"bool ftp_rename(resource stream, string src, string dest)\",\"Renames the given file to a new path\"],ftp_rmdir:[\"bool ftp_rmdir(resource stream, string directory)\",\"Removes a directory\"],ftp_set_option:[\"bool ftp_set_option(resource stream, int option, mixed value)\",\"Sets an FTP option\"],ftp_site:[\"bool ftp_site(resource stream, string cmd)\",\"Sends a SITE command to the server\"],ftp_size:[\"int ftp_size(resource stream, string filename)\",\"Returns the size of the file, or -1 on error\"],ftp_ssl_connect:[\"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\"Opens a FTP-SSL stream\"],ftp_systype:[\"string ftp_systype(resource stream)\",\"Returns the system type identifier\"],ftruncate:[\"bool ftruncate(resource fp, int size)\",\"Truncate file to 'size' length\"],func_get_arg:[\"mixed func_get_arg(int arg_num)\",\"Get the $arg_num'th argument that was passed to the function\"],func_get_args:[\"array func_get_args()\",\"Get an array of the arguments that were passed to the function\"],func_num_args:[\"int func_num_args(void)\",\"Get the number of arguments that were passed to the function\"],\"function \":[\"\",\"\"],\"foreach \":[\"\",\"\"],function_exists:[\"bool function_exists(string function_name)\",\"Checks if the function exists\"],fwrite:[\"int fwrite(resource fp, string str [, int length])\",\"Binary-safe file write\"],gc_collect_cycles:[\"int gc_collect_cycles(void)\",\"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"],gc_disable:[\"void gc_disable(void)\",\"Deactivates the circular reference collector\"],gc_enable:[\"void gc_enable(void)\",\"Activates the circular reference collector\"],gc_enabled:[\"void gc_enabled(void)\",\"Returns status of the circular reference collector\"],gd_info:[\"array gd_info()\",\"\"],getKeywords:[\"static array getKeywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"],get_browser:[\"mixed get_browser([string browser_name [, bool return_array]])\",\"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"],get_called_class:[\"string get_called_class()\",'Retrieves the \"Late Static Binding\" class name'],get_cfg_var:[\"mixed get_cfg_var(string option_name)\",\"Get the value of a PHP configuration option\"],get_class:[\"string get_class([object object])\",\"Retrieves the class name\"],get_class_methods:[\"array get_class_methods(mixed class)\",\"Returns an array of method names for class or class instance.\"],get_class_vars:[\"array get_class_vars(string class_name)\",\"Returns an array of default properties of the class.\"],get_current_user:[\"string get_current_user(void)\",\"Get the name of the owner of the current PHP script\"],get_declared_classes:[\"array get_declared_classes()\",\"Returns an array of all declared classes.\"],get_declared_interfaces:[\"array get_declared_interfaces()\",\"Returns an array of all declared interfaces.\"],get_defined_constants:[\"array get_defined_constants([bool categorize])\",\"Return an array containing the names and values of all defined constants\"],get_defined_functions:[\"array get_defined_functions(void)\",\"Returns an array of all defined functions\"],get_defined_vars:[\"array get_defined_vars(void)\",\"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"],get_display_language:[\"static string get_display_language($locale[, $in_locale = null])\",\"* gets the language for the $locale in $in_locale or default_locale\"],get_display_name:[\"static string get_display_name($locale[, $in_locale = null])\",\"* gets the name for the $locale in $in_locale or default_locale\"],get_display_region:[\"static string get_display_region($locale, $in_locale = null)\",\"* gets the region for the $locale in $in_locale or default_locale\"],get_display_script:[\"static string get_display_script($locale, $in_locale = null)\",\"* gets the script for the $locale in $in_locale or default_locale\"],get_extension_funcs:[\"array get_extension_funcs(string extension_name)\",\"Returns an array with the names of functions belonging to the named extension\"],get_headers:[\"array get_headers(string url[, int format])\",\"fetches all the headers sent by the server in response to a HTTP request\"],get_html_translation_table:[\"array get_html_translation_table([int table [, int quote_style]])\",\"Returns the internal translation table used by htmlspecialchars and htmlentities\"],get_include_path:[\"string get_include_path()\",\"Get the current include_path configuration option\"],get_included_files:[\"array get_included_files(void)\",\"Returns an array with the file names that were include_once()'d\"],get_loaded_extensions:[\"array get_loaded_extensions([bool zend_extensions])\",\"Return an array containing names of loaded extensions\"],get_magic_quotes_gpc:[\"int get_magic_quotes_gpc(void)\",\"Get the current active configuration setting of magic_quotes_gpc\"],get_magic_quotes_runtime:[\"int get_magic_quotes_runtime(void)\",\"Get the current active configuration setting of magic_quotes_runtime\"],get_meta_tags:[\"array get_meta_tags(string filename [, bool use_include_path])\",\"Extracts all meta tag content attributes from a file and returns an array\"],get_object_vars:[\"array get_object_vars(object obj)\",\"Returns an array of object properties\"],get_parent_class:[\"string get_parent_class([mixed object])\",\"Retrieves the parent class name for object or class or current scope.\"],get_resource_type:[\"string get_resource_type(resource res)\",\"Get the resource type name for a given resource\"],getallheaders:[\"array getallheaders(void)\",\"\"],getcwd:[\"mixed getcwd(void)\",\"Gets the current directory\"],getdate:[\"array getdate([int timestamp])\",\"Get date/time information\"],getenv:[\"string getenv(string varname)\",\"Get the value of an environment variable\"],gethostbyaddr:[\"string gethostbyaddr(string ip_address)\",\"Get the Internet host name corresponding to a given IP address\"],gethostbyname:[\"string gethostbyname(string hostname)\",\"Get the IP address corresponding to a given Internet host name\"],gethostbynamel:[\"array gethostbynamel(string hostname)\",\"Return a list of IP addresses that a given hostname resolves to.\"],gethostname:[\"string gethostname()\",\"Get the host name of the current machine\"],getimagesize:[\"array getimagesize(string imagefile [, array info])\",\"Get the size of an image as 4-element array\"],getlastmod:[\"int getlastmod(void)\",\"Get time of last page modification\"],getmygid:[\"int getmygid(void)\",\"Get PHP script owner's GID\"],getmyinode:[\"int getmyinode(void)\",\"Get the inode of the current script being parsed\"],getmypid:[\"int getmypid(void)\",\"Get current process ID\"],getmyuid:[\"int getmyuid(void)\",\"Get PHP script owner's UID\"],getopt:[\"array getopt(string options [, array longopts])\",\"Get options from the command line argument list\"],getprotobyname:[\"int getprotobyname(string name)\",\"Returns protocol number associated with name as per /etc/protocols\"],getprotobynumber:[\"string getprotobynumber(int proto)\",\"Returns protocol name associated with protocol number proto\"],getrandmax:[\"int getrandmax(void)\",\"Returns the maximum value a random number can have\"],getrusage:[\"array getrusage([int who])\",\"Returns an array of usage statistics\"],getservbyname:[\"int getservbyname(string service, string protocol)\",'Returns port associated with service. Protocol must be \"tcp\" or \"udp\"'],getservbyport:[\"string getservbyport(int port, string protocol)\",'Returns service name associated with port. Protocol must be \"tcp\" or \"udp\"'],gettext:[\"string gettext(string msgid)\",\"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"],gettimeofday:[\"array gettimeofday([bool get_as_float])\",\"Returns the current time as array\"],gettype:[\"string gettype(mixed var)\",\"Returns the type of the variable\"],glob:[\"array glob(string pattern [, int flags])\",\"Find pathnames matching a pattern\"],gmdate:[\"string gmdate(string format [, long timestamp])\",\"Format a GMT date/time\"],gmmktime:[\"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a GMT date\"],gmp_abs:[\"resource gmp_abs(resource a)\",\"Calculates absolute value\"],gmp_add:[\"resource gmp_add(resource a, resource b)\",\"Add a and b\"],gmp_and:[\"resource gmp_and(resource a, resource b)\",\"Calculates logical AND of a and b\"],gmp_clrbit:[\"void gmp_clrbit(resource &a, int index)\",\"Clears bit in a\"],gmp_cmp:[\"int gmp_cmp(resource a, resource b)\",\"Compares two numbers\"],gmp_com:[\"resource gmp_com(resource a)\",\"Calculates one's complement of a\"],gmp_div_q:[\"resource gmp_div_q(resource a, resource b [, int round])\",\"Divide a by b, returns quotient only\"],gmp_div_qr:[\"array gmp_div_qr(resource a, resource b [, int round])\",\"Divide a by b, returns quotient and reminder\"],gmp_div_r:[\"resource gmp_div_r(resource a, resource b [, int round])\",\"Divide a by b, returns reminder only\"],gmp_divexact:[\"resource gmp_divexact(resource a, resource b)\",\"Divide a by b using exact division algorithm\"],gmp_fact:[\"resource gmp_fact(int a)\",\"Calculates factorial function\"],gmp_gcd:[\"resource gmp_gcd(resource a, resource b)\",\"Computes greatest common denominator (gcd) of a and b\"],gmp_gcdext:[\"array gmp_gcdext(resource a, resource b)\",\"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"],gmp_hamdist:[\"int gmp_hamdist(resource a, resource b)\",\"Calculates hamming distance between a and b\"],gmp_init:[\"resource gmp_init(mixed number [, int base])\",\"Initializes GMP number\"],gmp_intval:[\"int gmp_intval(resource gmpnumber)\",\"Gets signed long value of GMP number\"],gmp_invert:[\"resource gmp_invert(resource a, resource b)\",\"Computes the inverse of a modulo b\"],gmp_jacobi:[\"int gmp_jacobi(resource a, resource b)\",\"Computes Jacobi symbol\"],gmp_legendre:[\"int gmp_legendre(resource a, resource b)\",\"Computes Legendre symbol\"],gmp_mod:[\"resource gmp_mod(resource a, resource b)\",\"Computes a modulo b\"],gmp_mul:[\"resource gmp_mul(resource a, resource b)\",\"Multiply a and b\"],gmp_neg:[\"resource gmp_neg(resource a)\",\"Negates a number\"],gmp_nextprime:[\"resource gmp_nextprime(resource a)\",\"Finds next prime of a\"],gmp_or:[\"resource gmp_or(resource a, resource b)\",\"Calculates logical OR of a and b\"],gmp_perfect_square:[\"bool gmp_perfect_square(resource a)\",\"Checks if a is an exact square\"],gmp_popcount:[\"int gmp_popcount(resource a)\",\"Calculates the population count of a\"],gmp_pow:[\"resource gmp_pow(resource base, int exp)\",\"Raise base to power exp\"],gmp_powm:[\"resource gmp_powm(resource base, resource exp, resource mod)\",\"Raise base to power exp and take result modulo mod\"],gmp_prob_prime:[\"int gmp_prob_prime(resource a[, int reps])\",'Checks if a is \"probably prime\"'],gmp_random:[\"resource gmp_random([int limiter])\",\"Gets random number\"],gmp_scan0:[\"int gmp_scan0(resource a, int start)\",\"Finds first zero bit\"],gmp_scan1:[\"int gmp_scan1(resource a, int start)\",\"Finds first non-zero bit\"],gmp_setbit:[\"void gmp_setbit(resource &a, int index[, bool set_clear])\",\"Sets or clear bit in a\"],gmp_sign:[\"int gmp_sign(resource a)\",\"Gets the sign of the number\"],gmp_sqrt:[\"resource gmp_sqrt(resource a)\",\"Takes integer part of square root of a\"],gmp_sqrtrem:[\"array gmp_sqrtrem(resource a)\",\"Square root with remainder\"],gmp_strval:[\"string gmp_strval(resource gmpnumber [, int base])\",\"Gets string representation of GMP number\"],gmp_sub:[\"resource gmp_sub(resource a, resource b)\",\"Subtract b from a\"],gmp_testbit:[\"bool gmp_testbit(resource a, int index)\",\"Tests if bit is set in a\"],gmp_xor:[\"resource gmp_xor(resource a, resource b)\",\"Calculates logical exclusive OR of a and b\"],gmstrftime:[\"string gmstrftime(string format [, int timestamp])\",\"Format a GMT/UCT time/date according to locale settings\"],grapheme_extract:[\"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\"Function to extract a sequence of default grapheme clusters\"],grapheme_stripos:[\"int grapheme_stripos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another, ignoring case differences\"],grapheme_stristr:[\"string grapheme_stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_strlen:[\"int grapheme_strlen(string str)\",\"Get number of graphemes in a string\"],grapheme_strpos:[\"int grapheme_strpos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another\"],grapheme_strripos:[\"int grapheme_strripos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another, ignoring case\"],grapheme_strrpos:[\"int grapheme_strrpos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another\"],grapheme_strstr:[\"string grapheme_strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_substr:[\"string grapheme_substr(string str, int start [, int length])\",\"Returns part of a string\"],gregoriantojd:[\"int gregoriantojd(int month, int day, int year)\",\"Converts a gregorian calendar date to julian day count\"],gzcompress:[\"string gzcompress(string data [, int level])\",\"Gzip-compress a string\"],gzdeflate:[\"string gzdeflate(string data [, int level])\",\"Gzip-compress a string\"],gzencode:[\"string gzencode(string data [, int level [, int encoding_mode]])\",\"GZ encode a string\"],gzfile:[\"array gzfile(string filename [, int use_include_path])\",\"Read und uncompress entire .gz-file into an array\"],gzinflate:[\"string gzinflate(string data [, int length])\",\"Unzip a gzip-compressed string\"],gzopen:[\"resource gzopen(string filename, string mode [, int use_include_path])\",\"Open a .gz-file and return a .gz-file pointer\"],gzuncompress:[\"string gzuncompress(string data [, int length])\",\"Unzip a gzip-compressed string\"],hash:[\"string hash(string algo, string data[, bool raw_output = false])\",\"Generate a hash of a given input string Returns lowercase hexits by default\"],hash_algos:[\"array hash_algos(void)\",\"Return a list of registered hashing algorithms\"],hash_copy:[\"resource hash_copy(resource context)\",\"Copy hash resource\"],hash_file:[\"string hash_file(string algo, string filename[, bool raw_output = false])\",\"Generate a hash of a given file Returns lowercase hexits by default\"],hash_final:[\"string hash_final(resource context[, bool raw_output=false])\",\"Output resulting digest\"],hash_hmac:[\"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"],hash_hmac_file:[\"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"],hash_init:[\"resource hash_init(string algo[, int options, string key])\",\"Initialize a hashing context\"],hash_update:[\"bool hash_update(resource context, string data)\",\"Pump data into the hashing algorithm\"],hash_update_file:[\"bool hash_update_file(resource context, string filename[, resource context])\",\"Pump data into the hashing algorithm from a file\"],hash_update_stream:[\"int hash_update_stream(resource context, resource handle[, integer length])\",\"Pump data into the hashing algorithm from an open stream\"],header:[\"void header(string header [, bool replace, [int http_response_code]])\",\"Sends a raw HTTP header\"],header_remove:[\"void header_remove([string name])\",\"Removes an HTTP header previously set using header()\"],headers_list:[\"array headers_list(void)\",\"Return list of headers to be sent / already sent\"],headers_sent:[\"bool headers_sent([string &$file [, int &$line]])\",\"Returns true if headers have already been sent, false otherwise\"],hebrev:[\"string hebrev(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text\"],hebrevc:[\"string hebrevc(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text with newline conversion\"],hexdec:[\"int hexdec(string hexadecimal_number)\",\"Returns the decimal equivalent of the hexadecimal number\"],highlight_file:[\"bool highlight_file(string file_name [, bool return] )\",\"Syntax highlight a source file\"],highlight_string:[\"bool highlight_string(string string [, bool return] )\",\"Syntax highlight a string or optionally return it\"],html_entity_decode:[\"string html_entity_decode(string string [, int quote_style][, string charset])\",\"Convert all HTML entities to their applicable characters\"],htmlentities:[\"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert all applicable characters to HTML entities\"],htmlspecialchars:[\"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert special characters to HTML entities\"],htmlspecialchars_decode:[\"string htmlspecialchars_decode(string string [, int quote_style])\",\"Convert special HTML entities back to characters\"],http_build_query:[\"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\"Generates a form-encoded query string from an associative array or object.\"],hypot:[\"float hypot(float num1, float num2)\",\"Returns sqrt(num1*num1 + num2*num2)\"],ibase_add_user:[\"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Add a user to security database\"],ibase_affected_rows:[\"int ibase_affected_rows( [ resource link_identifier ] )\",\"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"],ibase_backup:[\"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\"Initiates a backup task in the service manager and returns immediately\"],ibase_blob_add:[\"bool ibase_blob_add(resource blob_handle, string data)\",\"Add data into created blob\"],ibase_blob_cancel:[\"bool ibase_blob_cancel(resource blob_handle)\",\"Cancel creating blob\"],ibase_blob_close:[\"string ibase_blob_close(resource blob_handle)\",\"Close blob\"],ibase_blob_create:[\"resource ibase_blob_create([resource link_identifier])\",\"Create blob for adding data\"],ibase_blob_echo:[\"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\"Output blob contents to browser\"],ibase_blob_get:[\"string ibase_blob_get(resource blob_handle, int len)\",\"Get len bytes data from open blob\"],ibase_blob_import:[\"string ibase_blob_import([ resource link_identifier, ] resource file)\",\"Create blob, copy file in it, and close it\"],ibase_blob_info:[\"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\"Return blob length and other useful info\"],ibase_blob_open:[\"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\"Open blob for retrieving data parts\"],ibase_close:[\"bool ibase_close([resource link_identifier])\",\"Close an InterBase connection\"],ibase_commit:[\"bool ibase_commit( resource link_identifier )\",\"Commit transaction\"],ibase_commit_ret:[\"bool ibase_commit_ret( resource link_identifier )\",\"Commit transaction and retain the transaction context\"],ibase_connect:[\"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a connection to an InterBase database\"],ibase_db_info:[\"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\"Request statistics about a database\"],ibase_delete_user:[\"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Delete a user from security database\"],ibase_drop_db:[\"bool ibase_drop_db([resource link_identifier])\",\"Drop an InterBase database\"],ibase_errcode:[\"int ibase_errcode(void)\",\"Return error code\"],ibase_errmsg:[\"string ibase_errmsg(void)\",\"Return error message\"],ibase_execute:[\"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a previously prepared query\"],ibase_fetch_assoc:[\"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_fetch_object:[\"object ibase_fetch_object(resource result [, int fetch_flags])\",\"Fetch a object from the results of a query\"],ibase_fetch_row:[\"array ibase_fetch_row(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_field_info:[\"array ibase_field_info(resource query_result, int field_number)\",\"Get information about a field\"],ibase_free_event_handler:[\"bool ibase_free_event_handler(resource event)\",\"Frees the event handler set by ibase_set_event_handler()\"],ibase_free_query:[\"bool ibase_free_query(resource query)\",\"Free memory used by a query\"],ibase_free_result:[\"bool ibase_free_result(resource result)\",\"Free the memory used by a result\"],ibase_gen_id:[\"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\"Increments the named generator and returns its new value\"],ibase_maintain_db:[\"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\"Execute a maintenance command on the database server\"],ibase_modify_user:[\"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Modify a user in security database\"],ibase_name_result:[\"bool ibase_name_result(resource result, string name)\",\"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"],ibase_num_fields:[\"int ibase_num_fields(resource query_result)\",\"Get the number of fields in result\"],ibase_num_params:[\"int ibase_num_params(resource query)\",\"Get the number of params in a prepared query\"],ibase_num_rows:[\"int ibase_num_rows( resource result_identifier )\",\"Return the number of rows that are available in a result\"],ibase_param_info:[\"array ibase_param_info(resource query, int field_number)\",\"Get information about a parameter\"],ibase_pconnect:[\"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a persistent connection to an InterBase database\"],ibase_prepare:[\"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\"Prepare a query for later execution\"],ibase_query:[\"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a query\"],ibase_restore:[\"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\"Initiates a restore task in the service manager and returns immediately\"],ibase_rollback:[\"bool ibase_rollback( resource link_identifier )\",\"Rollback transaction\"],ibase_rollback_ret:[\"bool ibase_rollback_ret( resource link_identifier )\",\"Rollback transaction and retain the transaction context\"],ibase_server_info:[\"string ibase_server_info(resource service_handle, int action)\",\"Request information about a database server\"],ibase_service_attach:[\"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\"Connect to the service manager\"],ibase_service_detach:[\"bool ibase_service_detach(resource service_handle)\",\"Disconnect from the service manager\"],ibase_set_event_handler:[\"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\"Register the callback for handling each of the named events\"],ibase_trans:[\"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\"Start a transaction over one or several databases\"],ibase_wait_event:[\"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"],iconv:[\"string iconv(string in_charset, string out_charset, string str)\",\"Returns str converted to the out_charset character set\"],iconv_get_encoding:[\"mixed iconv_get_encoding([string type])\",\"Get internal encoding and output encoding for ob_iconv_handler()\"],iconv_mime_decode:[\"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\"Decodes a mime header field\"],iconv_mime_decode_headers:[\"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\"Decodes multiple mime header fields\"],iconv_mime_encode:[\"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\"Composes a mime header field with field_name and field_value in a specified scheme\"],iconv_set_encoding:[\"bool iconv_set_encoding(string type, string charset)\",\"Sets internal encoding and output encoding for ob_iconv_handler()\"],iconv_strlen:[\"int iconv_strlen(string str [, string charset])\",\"Returns the character count of str\"],iconv_strpos:[\"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\"Finds position of first occurrence of needle within part of haystack beginning with offset\"],iconv_strrpos:[\"int iconv_strrpos(string haystack, string needle [, string charset])\",\"Finds position of last occurrence of needle within part of haystack beginning with offset\"],iconv_substr:[\"string iconv_substr(string str, int offset, [int length, string charset])\",\"Returns specified part of a string\"],idate:[\"int idate(string format [, int timestamp])\",\"Format a local time/date as integer\"],idn_to_ascii:[\"int idn_to_ascii(string domain[, int options])\",\"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"],idn_to_utf8:[\"int idn_to_utf8(string domain[, int options])\",\"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"],ignore_user_abort:[\"int ignore_user_abort([string value])\",\"Set whether we want to ignore a user abort event or not\"],image2wbmp:[\"bool image2wbmp(resource im [, string filename [, int threshold]])\",\"Output WBMP image to browser or file\"],image_type_to_extension:[\"string image_type_to_extension(int imagetype [, bool include_dot])\",\"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],image_type_to_mime_type:[\"string image_type_to_mime_type(int imagetype)\",\"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],imagealphablending:[\"bool imagealphablending(resource im, bool on)\",\"Turn alpha blending mode on or off for the given image\"],imageantialias:[\"bool imageantialias(resource im, bool on)\",\"Should antialiased functions used or not\"],imagearc:[\"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\"Draw a partial ellipse\"],imagechar:[\"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\"Draw a character\"],imagecharup:[\"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\"Draw a character rotated 90 degrees counter-clockwise\"],imagecolorallocate:[\"int imagecolorallocate(resource im, int red, int green, int blue)\",\"Allocate a color for an image\"],imagecolorallocatealpha:[\"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\"Allocate a color with an alpha level.  Works for true color and palette based images\"],imagecolorat:[\"int imagecolorat(resource im, int x, int y)\",\"Get the index of the color of a pixel\"],imagecolorclosest:[\"int imagecolorclosest(resource im, int red, int green, int blue)\",\"Get the index of the closest color to the specified color\"],imagecolorclosestalpha:[\"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\"Find the closest matching colour with alpha transparency\"],imagecolorclosesthwb:[\"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\"Get the index of the color which has the hue, white and blackness nearest to the given color\"],imagecolordeallocate:[\"bool imagecolordeallocate(resource im, int index)\",\"De-allocate a color for an image\"],imagecolorexact:[\"int imagecolorexact(resource im, int red, int green, int blue)\",\"Get the index of the specified color\"],imagecolorexactalpha:[\"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\"Find exact match for colour with transparency\"],imagecolormatch:[\"bool imagecolormatch(resource im1, resource im2)\",\"Makes the colors of the palette version of an image more closely match the true color version\"],imagecolorresolve:[\"int imagecolorresolve(resource im, int red, int green, int blue)\",\"Get the index of the specified color or its closest possible alternative\"],imagecolorresolvealpha:[\"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"],imagecolorset:[\"void imagecolorset(resource im, int col, int red, int green, int blue)\",\"Set the color for the specified palette index\"],imagecolorsforindex:[\"array imagecolorsforindex(resource im, int col)\",\"Get the colors for an index\"],imagecolorstotal:[\"int imagecolorstotal(resource im)\",\"Find out the number of colors in an image's palette\"],imagecolortransparent:[\"int imagecolortransparent(resource im [, int col])\",\"Define a color as transparent\"],imageconvolution:[\"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\"Apply a 3x3 convolution matrix, using coefficient div and offset\"],imagecopy:[\"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\"Copy part of an image\"],imagecopymerge:[\"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopymergegray:[\"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopyresampled:[\"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image using resampling to help ensure clarity\"],imagecopyresized:[\"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image\"],imagecreate:[\"resource imagecreate(int x_size, int y_size)\",\"Create a new image\"],imagecreatefromgd:[\"resource imagecreatefromgd(string filename)\",\"Create a new image from GD file or URL\"],imagecreatefromgd2:[\"resource imagecreatefromgd2(string filename)\",\"Create a new image from GD2 file or URL\"],imagecreatefromgd2part:[\"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\"Create a new image from a given part of GD2 file or URL\"],imagecreatefromgif:[\"resource imagecreatefromgif(string filename)\",\"Create a new image from GIF file or URL\"],imagecreatefromjpeg:[\"resource imagecreatefromjpeg(string filename)\",\"Create a new image from JPEG file or URL\"],imagecreatefrompng:[\"resource imagecreatefrompng(string filename)\",\"Create a new image from PNG file or URL\"],imagecreatefromstring:[\"resource imagecreatefromstring(string image)\",\"Create a new image from the image stream in the string\"],imagecreatefromwbmp:[\"resource imagecreatefromwbmp(string filename)\",\"Create a new image from WBMP file or URL\"],imagecreatefromxbm:[\"resource imagecreatefromxbm(string filename)\",\"Create a new image from XBM file or URL\"],imagecreatefromxpm:[\"resource imagecreatefromxpm(string filename)\",\"Create a new image from XPM file or URL\"],imagecreatetruecolor:[\"resource imagecreatetruecolor(int x_size, int y_size)\",\"Create a new true color image\"],imagedashedline:[\"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a dashed line\"],imagedestroy:[\"bool imagedestroy(resource im)\",\"Destroy an image\"],imageellipse:[\"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefill:[\"bool imagefill(resource im, int x, int y, int col)\",\"Flood fill\"],imagefilledarc:[\"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\"Draw a filled partial ellipse\"],imagefilledellipse:[\"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefilledpolygon:[\"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\"Draw a filled polygon\"],imagefilledrectangle:[\"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a filled rectangle\"],imagefilltoborder:[\"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\"Flood fill to specific color\"],imagefilter:[\"bool imagefilter(resource src_im, int filtertype, [args] )\",\"Applies Filter an image using a custom angle\"],imagefontheight:[\"int imagefontheight(int font)\",\"Get font height\"],imagefontwidth:[\"int imagefontwidth(int font)\",\"Get font width\"],imageftbbox:[\"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\"Give the bounding box of a text using fonts via freetype2\"],imagefttext:[\"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\"Write text to the image using fonts via freetype2\"],imagegammacorrect:[\"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\"Apply a gamma correction to a GD image\"],imagegd:[\"bool imagegd(resource im [, string filename])\",\"Output GD image to browser or file\"],imagegd2:[\"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\"Output GD2 image to browser or file\"],imagegif:[\"bool imagegif(resource im [, string filename])\",\"Output GIF image to browser or file\"],imagegrabscreen:[\"resource imagegrabscreen()\",\"Grab a screenshot\"],imagegrabwindow:[\"resource imagegrabwindow(int window_handle [, int client_area])\",\"Grab a window or its client area using a windows handle (HWND property in COM instance)\"],imageinterlace:[\"int imageinterlace(resource im [, int interlace])\",\"Enable or disable interlace\"],imageistruecolor:[\"bool imageistruecolor(resource im)\",\"return true if the image uses truecolor\"],imagejpeg:[\"bool imagejpeg(resource im [, string filename [, int quality]])\",\"Output JPEG image to browser or file\"],imagelayereffect:[\"bool imagelayereffect(resource im, int effect)\",\"Set the alpha blending flag to use the bundled libgd layering effects\"],imageline:[\"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a line\"],imageloadfont:[\"int imageloadfont(string filename)\",\"Load a new font\"],imagepalettecopy:[\"void imagepalettecopy(resource dst, resource src)\",\"Copy the palette from the src image onto the dst image\"],imagepng:[\"bool imagepng(resource im [, string filename])\",\"Output PNG image to browser or file\"],imagepolygon:[\"bool imagepolygon(resource im, array point, int num_points, int col)\",\"Draw a polygon\"],imagepsbbox:[\"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\"Return the bounding box needed by a string if rasterized\"],imagepscopyfont:[\"int imagepscopyfont(int font_index)\",\"Make a copy of a font for purposes like extending or reenconding\"],imagepsencodefont:[\"bool imagepsencodefont(resource font_index, string filename)\",\"To change a fonts character encoding vector\"],imagepsextendfont:[\"bool imagepsextendfont(resource font_index, float extend)\",\"Extend or or condense (if extend < 1) a font\"],imagepsfreefont:[\"bool imagepsfreefont(resource font_index)\",\"Free memory used by a font\"],imagepsloadfont:[\"resource imagepsloadfont(string pathname)\",\"Load a new font from specified file\"],imagepsslantfont:[\"bool imagepsslantfont(resource font_index, float slant)\",\"Slant a font\"],imagepstext:[\"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\"Rasterize a string over an image\"],imagerectangle:[\"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a rectangle\"],imagerotate:[\"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\"Rotate an image using a custom angle\"],imagesavealpha:[\"bool imagesavealpha(resource im, bool on)\",\"Include alpha channel to a saved image\"],imagesetbrush:[\"bool imagesetbrush(resource image, resource brush)\",'Set the brush image to $brush when filling $image with the \"IMG_COLOR_BRUSHED\" color'],imagesetpixel:[\"bool imagesetpixel(resource im, int x, int y, int col)\",\"Set a single pixel\"],imagesetstyle:[\"bool imagesetstyle(resource im, array styles)\",\"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"],imagesetthickness:[\"bool imagesetthickness(resource im, int thickness)\",\"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"],imagesettile:[\"bool imagesettile(resource image, resource tile)\",'Set the tile image to $tile when filling $image with the \"IMG_COLOR_TILED\" color'],imagestring:[\"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\"Draw a string horizontally\"],imagestringup:[\"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\"Draw a string vertically - rotated 90 degrees counter-clockwise\"],imagesx:[\"int imagesx(resource im)\",\"Get image width\"],imagesy:[\"int imagesy(resource im)\",\"Get image height\"],imagetruecolortopalette:[\"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"],imagettfbbox:[\"array imagettfbbox(float size, float angle, string font_file, string text)\",\"Give the bounding box of a text using TrueType fonts\"],imagettftext:[\"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\"Write text to the image using a TrueType font\"],imagetypes:[\"int imagetypes(void)\",\"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"],imagewbmp:[\"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\"Output WBMP image to browser or file\"],imagexbm:[\"int imagexbm(int im, string filename [, int foreground])\",\"Output XBM image to browser or file\"],imap_8bit:[\"string imap_8bit(string text)\",\"Convert an 8-bit string to a quoted-printable string\"],imap_alerts:[\"array imap_alerts(void)\",\"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"],imap_append:[\"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\"Append a new message to a specified mailbox\"],imap_base64:[\"string imap_base64(string text)\",\"Decode BASE64 encoded text\"],imap_binary:[\"string imap_binary(string text)\",\"Convert an 8bit string to a base64 string\"],imap_body:[\"string imap_body(resource stream_id, int msg_no [, int options])\",\"Read the message body\"],imap_bodystruct:[\"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\"Read the structure of a specified body section of a specific message\"],imap_check:[\"object imap_check(resource stream_id)\",\"Get mailbox properties\"],imap_clearflag_full:[\"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Clears flags on messages\"],imap_close:[\"bool imap_close(resource stream_id [, int options])\",\"Close an IMAP stream\"],imap_createmailbox:[\"bool imap_createmailbox(resource stream_id, string mailbox)\",\"Create a new mailbox\"],imap_delete:[\"bool imap_delete(resource stream_id, int msg_no [, int options])\",\"Mark a message for deletion\"],imap_deletemailbox:[\"bool imap_deletemailbox(resource stream_id, string mailbox)\",\"Delete a mailbox\"],imap_errors:[\"array imap_errors(void)\",\"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"],imap_expunge:[\"bool imap_expunge(resource stream_id)\",\"Permanently delete all messages marked for deletion\"],imap_fetch_overview:[\"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\"Read an overview of the information in the headers of the given message sequence\"],imap_fetchbody:[\"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\"Get a specific body section\"],imap_fetchheader:[\"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\"Get the full unfiltered header for a message\"],imap_fetchstructure:[\"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\"Read the full structure of a message\"],imap_gc:[\"bool imap_gc(resource stream_id, int flags)\",\"This function garbage collects (purges) the cache of entries of a specific type.\"],imap_get_quota:[\"array imap_get_quota(resource stream_id, string qroot)\",\"Returns the quota set to the mailbox account qroot\"],imap_get_quotaroot:[\"array imap_get_quotaroot(resource stream_id, string mbox)\",\"Returns the quota set to the mailbox account mbox\"],imap_getacl:[\"array imap_getacl(resource stream_id, string mailbox)\",\"Gets the ACL for a given mailbox\"],imap_getmailboxes:[\"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"],imap_getsubscribed:[\"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"],imap_headerinfo:[\"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\"Read the headers of the message\"],imap_headers:[\"array imap_headers(resource stream_id)\",\"Returns headers for all messages in a mailbox\"],imap_last_error:[\"string imap_last_error(void)\",\"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"],imap_list:[\"array imap_list(resource stream_id, string ref, string pattern)\",\"Read the list of mailboxes\"],imap_listscan:[\"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\"Read list of mailboxes containing a certain string\"],imap_lsub:[\"array imap_lsub(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes\"],imap_mail:[\"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\"Send an email message\"],imap_mail_compose:[\"string imap_mail_compose(array envelope, array body)\",\"Create a MIME message based on given envelope and body sections\"],imap_mail_copy:[\"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\"Copy specified message to a mailbox\"],imap_mail_move:[\"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\"Move specified message to a mailbox\"],imap_mailboxmsginfo:[\"object imap_mailboxmsginfo(resource stream_id)\",\"Returns info about the current mailbox\"],imap_mime_header_decode:[\"array imap_mime_header_decode(string str)\",\"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"],imap_msgno:[\"int imap_msgno(resource stream_id, int unique_msg_id)\",\"Get the sequence number associated with a UID\"],imap_mutf7_to_utf8:[\"string imap_mutf7_to_utf8(string in)\",\"Decode a modified UTF-7 string to UTF-8\"],imap_num_msg:[\"int imap_num_msg(resource stream_id)\",\"Gives the number of messages in the current mailbox\"],imap_num_recent:[\"int imap_num_recent(resource stream_id)\",\"Gives the number of recent messages in current mailbox\"],imap_open:[\"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\"Open an IMAP stream to a mailbox\"],imap_ping:[\"bool imap_ping(resource stream_id)\",\"Check if the IMAP stream is still active\"],imap_qprint:[\"string imap_qprint(string text)\",\"Convert a quoted-printable string to an 8-bit string\"],imap_renamemailbox:[\"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\"Rename a mailbox\"],imap_reopen:[\"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\"Reopen an IMAP stream to a new mailbox\"],imap_rfc822_parse_adrlist:[\"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\"Parses an address string\"],imap_rfc822_parse_headers:[\"object imap_rfc822_parse_headers(string headers [, string default_host])\",\"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"],imap_rfc822_write_address:[\"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\"Returns a properly formatted email address given the mailbox, host, and personal info\"],imap_savebody:['bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \"\"[, int options = 0]])',\"Save a specific body section to a file\"],imap_search:[\"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\"Return a list of messages matching the given criteria\"],imap_set_quota:[\"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\"Will set the quota for qroot mailbox\"],imap_setacl:[\"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\"Sets the ACL for a given mailbox\"],imap_setflag_full:[\"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Sets flags on messages\"],imap_sort:[\"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\"Sort an array of message headers, optionally including only messages that meet specified criteria.\"],imap_status:[\"object imap_status(resource stream_id, string mailbox, int options)\",\"Get status info from a mailbox\"],imap_subscribe:[\"bool imap_subscribe(resource stream_id, string mailbox)\",\"Subscribe to a mailbox\"],imap_thread:[\"array imap_thread(resource stream_id [, int options])\",\"Return threaded by REFERENCES tree\"],imap_timeout:[\"mixed imap_timeout(int timeout_type [, int timeout])\",\"Set or fetch imap timeout\"],imap_uid:[\"int imap_uid(resource stream_id, int msg_no)\",\"Get the unique message id associated with a standard sequential message number\"],imap_undelete:[\"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\"Remove the delete flag from a message\"],imap_unsubscribe:[\"bool imap_unsubscribe(resource stream_id, string mailbox)\",\"Unsubscribe from a mailbox\"],imap_utf7_decode:[\"string imap_utf7_decode(string buf)\",\"Decode a modified UTF-7 string\"],imap_utf7_encode:[\"string imap_utf7_encode(string buf)\",\"Encode a string in modified UTF-7\"],imap_utf8:[\"string imap_utf8(string mime_encoded_text)\",\"Convert a mime-encoded text to UTF-8\"],imap_utf8_to_mutf7:[\"string imap_utf8_to_mutf7(string in)\",\"Encode a UTF-8 string to modified UTF-7\"],implode:[\"string implode([string glue,] array pieces)\",\"Joins array elements placing glue string between items and return one string\"],import_request_variables:[\"bool import_request_variables(string types [, string prefix])\",\"Import GET/POST/Cookie variables into the global scope\"],in_array:[\"bool in_array(mixed needle, array haystack [, bool strict])\",\"Checks if the given value exists in the array\"],include:[\"bool include(string path)\",\"Includes and evaluates the specified file\"],include_once:[\"bool include_once(string path)\",\"Includes and evaluates the specified file\"],inet_ntop:[\"string inet_ntop(string in_addr)\",\"Converts a packed inet address to a human readable IP address string\"],inet_pton:[\"string inet_pton(string ip_address)\",\"Converts a human readable IP address to a packed binary string\"],ini_get:[\"string ini_get(string varname)\",\"Get a configuration option\"],ini_get_all:[\"array ini_get_all([string extension[, bool details = true]])\",\"Get all configuration options\"],ini_restore:[\"void ini_restore(string varname)\",\"Restore the value of a configuration option specified by varname\"],ini_set:[\"string ini_set(string varname, string newvalue)\",\"Set a configuration option, returns false on error and the old value of the configuration option on success\"],interface_exists:[\"bool interface_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],intl_error_name:[\"string intl_error_name()\",\"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"],intl_get_error_code:[\"int intl_get_error_code()\",\"* Get code of the last occured error.\"],intl_get_error_message:[\"string intl_get_error_message()\",\"* Get text description of the last occured error.\"],intl_is_failure:[\"bool intl_is_failure()\",\"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"],intval:[\"int intval(mixed var [, int base])\",\"Get the integer value of a variable using the optional base for the conversion\"],ip2long:[\"int ip2long(string ip_address)\",\"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"],iptcembed:[\"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\"Embed binary IPTC data into a JPEG image.\"],iptcparse:[\"array iptcparse(string iptcdata)\",\"Parse binary IPTC-data into associative array\"],is_a:[\"bool is_a(object object, string class_name)\",\"Returns true if the object is of this class or has this class as one of its parents\"],is_array:[\"bool is_array(mixed var)\",\"Returns true if variable is an array\"],is_bool:[\"bool is_bool(mixed var)\",\"Returns true if variable is a boolean\"],is_callable:[\"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\"Returns true if var is callable.\"],is_dir:[\"bool is_dir(string filename)\",\"Returns true if file is directory\"],is_executable:[\"bool is_executable(string filename)\",\"Returns true if file is executable\"],is_file:[\"bool is_file(string filename)\",\"Returns true if file is a regular file\"],is_finite:[\"bool is_finite(float val)\",\"Returns whether argument is finite\"],is_float:[\"bool is_float(mixed var)\",\"Returns true if variable is float point\"],is_infinite:[\"bool is_infinite(float val)\",\"Returns whether argument is infinite\"],is_link:[\"bool is_link(string filename)\",\"Returns true if file is symbolic link\"],is_long:[\"bool is_long(mixed var)\",\"Returns true if variable is a long (integer)\"],is_nan:[\"bool is_nan(float val)\",\"Returns whether argument is not a number\"],is_null:[\"bool is_null(mixed var)\",\"Returns true if variable is null\"],is_numeric:[\"bool is_numeric(mixed value)\",\"Returns true if value is a number or a numeric string\"],is_object:[\"bool is_object(mixed var)\",\"Returns true if variable is an object\"],is_readable:[\"bool is_readable(string filename)\",\"Returns true if file can be read\"],is_resource:[\"bool is_resource(mixed var)\",\"Returns true if variable is a resource\"],is_scalar:[\"bool is_scalar(mixed value)\",\"Returns true if value is a scalar\"],is_string:[\"bool is_string(mixed var)\",\"Returns true if variable is a string\"],is_subclass_of:[\"bool is_subclass_of(object object, string class_name)\",\"Returns true if the object has this class as one of its parents\"],is_uploaded_file:[\"bool is_uploaded_file(string path)\",\"Check if file was created by rfc1867 upload\"],is_writable:[\"bool is_writable(string filename)\",\"Returns true if file can be written\"],isset:[\"bool isset(mixed var [, mixed var])\",\"Determine whether a variable is set\"],iterator_apply:[\"int iterator_apply(Traversable it, mixed function [, mixed params])\",\"Calls a function for every element in an iterator\"],iterator_count:[\"int iterator_count(Traversable it)\",\"Count the elements in an iterator\"],iterator_to_array:[\"array iterator_to_array(Traversable it [, bool use_keys = true])\",\"Copy the iterator into an array\"],jddayofweek:[\"mixed jddayofweek(int juliandaycount [, int mode])\",\"Returns name or number of day of week from julian day count\"],jdmonthname:[\"string jdmonthname(int juliandaycount, int mode)\",\"Returns name of month for julian day count\"],jdtofrench:[\"string jdtofrench(int juliandaycount)\",\"Converts a julian day count to a french republic calendar date\"],jdtogregorian:[\"string jdtogregorian(int juliandaycount)\",\"Converts a julian day count to a gregorian calendar date\"],jdtojewish:[\"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\"Converts a julian day count to a jewish calendar date\"],jdtojulian:[\"string jdtojulian(int juliandaycount)\",\"Convert a julian day count to a julian calendar date\"],jdtounix:[\"int jdtounix(int jday)\",\"Convert Julian Day to UNIX timestamp\"],jewishtojd:[\"int jewishtojd(int month, int day, int year)\",\"Converts a jewish calendar date to a julian day count\"],join:[\"string join(array src, string glue)\",\"An alias for implode\"],jpeg2wbmp:[\"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert JPEG image to WBMP image\"],json_decode:[\"mixed json_decode(string json [, bool assoc [, long depth]])\",\"Decodes the JSON representation into a PHP value\"],json_encode:[\"string json_encode(mixed data [, int options])\",\"Returns the JSON representation of a value\"],json_last_error:[\"int json_last_error()\",\"Returns the error code of the last json_decode().\"],juliantojd:[\"int juliantojd(int month, int day, int year)\",\"Converts a julian calendar date to julian day count\"],key:[\"mixed key(array array_arg)\",\"Return the key of the element currently pointed to by the internal array pointer\"],krsort:[\"bool krsort(array &array_arg [, int sort_flags])\",\"Sort an array by key value in reverse order\"],ksort:[\"bool ksort(array &array_arg [, int sort_flags])\",\"Sort an array by key\"],lcfirst:[\"string lcfirst(string str)\",\"Make a string's first character lowercase\"],lcg_value:[\"float lcg_value()\",\"Returns a value from the combined linear congruential generator\"],lchgrp:[\"bool lchgrp(string filename, mixed group)\",\"Change symlink group\"],ldap_8859_to_t61:[\"string ldap_8859_to_t61(string value)\",\"Translate 8859 characters to t61 characters\"],ldap_add:[\"bool ldap_add(resource link, string dn, array entry)\",\"Add entries to LDAP directory\"],ldap_bind:[\"bool ldap_bind(resource link [, string dn [, string password]])\",\"Bind to LDAP directory\"],ldap_compare:[\"bool ldap_compare(resource link, string dn, string attr, string value)\",\"Determine if an entry has a specific value for one of its attributes\"],ldap_connect:[\"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\"Connect to an LDAP server\"],ldap_count_entries:[\"int ldap_count_entries(resource link, resource result)\",\"Count the number of entries in a search result\"],ldap_delete:[\"bool ldap_delete(resource link, string dn)\",\"Delete an entry from a directory\"],ldap_dn2ufn:[\"string ldap_dn2ufn(string dn)\",\"Convert DN to User Friendly Naming format\"],ldap_err2str:[\"string ldap_err2str(int errno)\",\"Convert error number to error string\"],ldap_errno:[\"int ldap_errno(resource link)\",\"Get the current ldap error number\"],ldap_error:[\"string ldap_error(resource link)\",\"Get the current ldap error string\"],ldap_explode_dn:[\"array ldap_explode_dn(string dn, int with_attrib)\",\"Splits DN into its component parts\"],ldap_first_attribute:[\"string ldap_first_attribute(resource link, resource result_entry)\",\"Return first attribute\"],ldap_first_entry:[\"resource ldap_first_entry(resource link, resource result)\",\"Return first result id\"],ldap_first_reference:[\"resource ldap_first_reference(resource link, resource result)\",\"Return first reference\"],ldap_free_result:[\"bool ldap_free_result(resource result)\",\"Free result memory\"],ldap_get_attributes:[\"array ldap_get_attributes(resource link, resource result_entry)\",\"Get attributes from a search result entry\"],ldap_get_dn:[\"string ldap_get_dn(resource link, resource result_entry)\",\"Get the DN of a result entry\"],ldap_get_entries:[\"array ldap_get_entries(resource link, resource result)\",\"Get all result entries\"],ldap_get_option:[\"bool ldap_get_option(resource link, int option, mixed retval)\",\"Get the current value of various session-wide parameters\"],ldap_get_values_len:[\"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\"Get all values with lengths from a result entry\"],ldap_list:[\"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Single-level search\"],ldap_mod_add:[\"bool ldap_mod_add(resource link, string dn, array entry)\",\"Add attribute values to current\"],ldap_mod_del:[\"bool ldap_mod_del(resource link, string dn, array entry)\",\"Delete attribute values\"],ldap_mod_replace:[\"bool ldap_mod_replace(resource link, string dn, array entry)\",\"Replace attribute values with new ones\"],ldap_next_attribute:[\"string ldap_next_attribute(resource link, resource result_entry)\",\"Get the next attribute in result\"],ldap_next_entry:[\"resource ldap_next_entry(resource link, resource result_entry)\",\"Get next result entry\"],ldap_next_reference:[\"resource ldap_next_reference(resource link, resource reference_entry)\",\"Get next reference\"],ldap_parse_reference:[\"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\"Extract information from reference entry\"],ldap_parse_result:[\"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\"Extract information from result\"],ldap_read:[\"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Read an entry\"],ldap_rename:[\"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\"Modify the name of an entry\"],ldap_sasl_bind:[\"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\"Bind to LDAP directory using SASL\"],ldap_search:[\"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Search LDAP tree under base_dn\"],ldap_set_option:[\"bool ldap_set_option(resource link, int option, mixed newval)\",\"Set the value of various session-wide parameters\"],ldap_set_rebind_proc:[\"bool ldap_set_rebind_proc(resource link, string callback)\",\"Set a callback function to do re-binds on referral chasing.\"],ldap_sort:[\"bool ldap_sort(resource link, resource result, string sortfilter)\",\"Sort LDAP result entries\"],ldap_start_tls:[\"bool ldap_start_tls(resource link)\",\"Start TLS\"],ldap_t61_to_8859:[\"string ldap_t61_to_8859(string value)\",\"Translate t61 characters to 8859 characters\"],ldap_unbind:[\"bool ldap_unbind(resource link)\",\"Unbind from LDAP directory\"],leak:[\"void leak(int num_bytes=3)\",\"Cause an intentional memory leak, for testing/debugging purposes\"],levenshtein:[\"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\"Calculate Levenshtein distance between two strings\"],libxml_clear_errors:[\"void libxml_clear_errors()\",\"Clear last error from libxml\"],libxml_disable_entity_loader:[\"bool libxml_disable_entity_loader([boolean disable])\",\"Disable/Enable ability to load external entities\"],libxml_get_errors:[\"object libxml_get_errors()\",\"Retrieve array of errors\"],libxml_get_last_error:[\"object libxml_get_last_error()\",\"Retrieve last error from libxml\"],libxml_set_streams_context:[\"void libxml_set_streams_context(resource streams_context)\",\"Set the streams context for the next libxml document load or write\"],libxml_use_internal_errors:[\"bool libxml_use_internal_errors([boolean use_errors])\",\"Disable libxml errors and allow user to fetch error information as needed\"],link:[\"int link(string target, string link)\",\"Create a hard link\"],linkinfo:[\"int linkinfo(string filename)\",\"Returns the st_dev field of the UNIX C stat structure describing the link\"],litespeed_request_headers:[\"array litespeed_request_headers(void)\",\"Fetch all HTTP request headers\"],litespeed_response_headers:[\"array litespeed_response_headers(void)\",\"Fetch all HTTP response headers\"],locale_accept_from_http:[\"string locale_accept_from_http(string $http_accept)\",null],locale_canonicalize:[\"static string locale_canonicalize(Locale $loc, string $locale)\",\"* @param string $locale The locale string to canonicalize\"],locale_filter_matches:[\"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"],locale_get_all_variants:[\"static array locale_get_all_variants($locale)\",\"* gets an array containing the list of variants, or null\"],locale_get_default:[\"static string locale_get_default( )\",\"Get default locale\"],locale_get_keywords:[\"static array locale_get_keywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"],locale_get_primary_language:[\"static string locale_get_primary_language($locale)\",\"* gets the primary language for the $locale\"],locale_get_region:[\"static string locale_get_region($locale)\",\"* gets the region for the $locale\"],locale_get_script:[\"static string locale_get_script($locale)\",\"* gets the script for the $locale\"],locale_lookup:[\"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\"* Searchs the items in $langtag for the best match to the language * range\"],locale_set_default:[\"static string locale_set_default( string $locale )\",\"Set default locale\"],localeconv:[\"array localeconv(void)\",\"Returns numeric formatting information based on the current locale\"],localtime:[\"array localtime([int timestamp [, bool associative_array]])\",\"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"],log:[\"float log(float number, [float base])\",\"Returns the natural logarithm of the number, or the base log if base is specified\"],log10:[\"float log10(float number)\",\"Returns the base-10 logarithm of the number\"],log1p:[\"float log1p(float number)\",\"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"],long2ip:[\"string long2ip(int proper_address)\",\"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"],lstat:[\"array lstat(string filename)\",\"Give information about a file or symbolic link\"],ltrim:[\"string ltrim(string str [, string character_mask])\",\"Strips whitespace from the beginning of a string\"],mail:[\"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"Send an email message\"],max:[\"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the highest value in an array or a series of arguments\"],mb_check_encoding:[\"bool mb_check_encoding([string var[, string encoding]])\",\"Check if the string is valid for the specified encoding\"],mb_convert_case:[\"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\"Returns a case-folded version of sourcestring\"],mb_convert_encoding:[\"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\"Returns converted string in desired encoding\"],mb_convert_kana:[\"string mb_convert_kana(string str [, string option] [, string encoding])\",\"Conversion between full-width character and half-width character (Japanese)\"],mb_convert_variables:[\"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\"Converts the string resource in variables to desired encoding\"],mb_decode_mimeheader:[\"string mb_decode_mimeheader(string string)\",'Decodes the MIME \"encoded-word\" in the string'],mb_decode_numericentity:[\"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\"Converts HTML numeric entities to character code\"],mb_detect_encoding:[\"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\"Encodings of the given string is returned (as a string)\"],mb_detect_order:[\"bool|array mb_detect_order([mixed encoding-list])\",\"Sets the current detect_order or Return the current detect_order as a array\"],mb_encode_mimeheader:[\"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",'Converts the string to MIME \"encoded-word\" in the format of =?charset?(B|Q)?encoded_string?='],mb_encode_numericentity:[\"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\"Converts specified characters to HTML numeric entities\"],mb_encoding_aliases:[\"array mb_encoding_aliases(string encoding)\",\"Returns an array of the aliases of a given encoding name\"],mb_ereg:[\"int mb_ereg(string pattern, string string [, array registers])\",\"Regular expression match for multibyte string\"],mb_ereg_match:[\"bool mb_ereg_match(string pattern, string string [,string option])\",\"Regular expression match for multibyte string\"],mb_ereg_replace:[\"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\"Replace regular expression for multibyte string\"],mb_ereg_search:[\"bool mb_ereg_search([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_getpos:[\"int mb_ereg_search_getpos(void)\",\"Get search start position\"],mb_ereg_search_getregs:[\"array mb_ereg_search_getregs(void)\",\"Get matched substring of the last time\"],mb_ereg_search_init:[\"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\"Initialize string and regular expression for search.\"],mb_ereg_search_pos:[\"array mb_ereg_search_pos([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_regs:[\"array mb_ereg_search_regs([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_setpos:[\"bool mb_ereg_search_setpos(int position)\",\"Set search start position\"],mb_eregi:[\"int mb_eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match for multibyte string\"],mb_eregi_replace:[\"string mb_eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression for multibyte string\"],mb_get_info:[\"mixed mb_get_info([string type])\",\"Returns the current settings of mbstring\"],mb_http_input:[\"mixed mb_http_input([string type])\",\"Returns the input encoding\"],mb_http_output:[\"string mb_http_output([string encoding])\",\"Sets the current output_encoding or returns the current output_encoding as a string\"],mb_internal_encoding:[\"string mb_internal_encoding([string encoding])\",\"Sets the current internal encoding or Returns the current internal encoding as a string\"],mb_language:[\"string mb_language([string language])\",\"Sets the current language or Returns the current language as a string\"],mb_list_encodings:[\"mixed mb_list_encodings()\",\"Returns an array of all supported entity encodings\"],mb_output_handler:[\"string mb_output_handler(string contents, int status)\",\"Returns string in output buffer converted to the http_output encoding\"],mb_parse_str:[\"bool mb_parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],mb_preferred_mime_name:[\"string mb_preferred_mime_name(string encoding)\",\"Return the preferred MIME name (charset) as a string\"],mb_regex_encoding:[\"string mb_regex_encoding([string encoding])\",\"Returns the current encoding for regex as a string.\"],mb_regex_set_options:[\"string mb_regex_set_options([string options])\",\"Set or get the default options for mbregex functions\"],mb_send_mail:[\"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"*  Sends an email message with MIME scheme\"],mb_split:[\"array mb_split(string pattern, string string [, int limit])\",\"split multibyte string into array by regular expression\"],mb_strcut:[\"string mb_strcut(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_strimwidth:[\"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\"Trim the string in terminal width\"],mb_stripos:[\"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of first occurrence of a string within another, case insensitive\"],mb_stristr:[\"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another, case insensitive\"],mb_strlen:[\"int mb_strlen(string str [, string encoding])\",\"Get character numbers of a string\"],mb_strpos:[\"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of first occurrence of a string within another\"],mb_strrchr:[\"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another\"],mb_strrichr:[\"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another, case insensitive\"],mb_strripos:[\"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of last occurrence of a string within another, case insensitive\"],mb_strrpos:[\"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of last occurrence of a string within another\"],mb_strstr:[\"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another\"],mb_strtolower:[\"string mb_strtolower(string sourcestring [, string encoding])\",\"*  Returns a lowercased version of sourcestring\"],mb_strtoupper:[\"string mb_strtoupper(string sourcestring [, string encoding])\",\"*  Returns a uppercased version of sourcestring\"],mb_strwidth:[\"int mb_strwidth(string str [, string encoding])\",\"Gets terminal width of a string\"],mb_substitute_character:[\"mixed mb_substitute_character([mixed substchar])\",\"Sets the current substitute_character or returns the current substitute_character\"],mb_substr:[\"string mb_substr(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_substr_count:[\"int mb_substr_count(string haystack, string needle [, string encoding])\",\"Count the number of substring occurrences\"],mcrypt_cbc:[\"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_cfb:[\"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_create_iv:[\"string mcrypt_create_iv(int size, int source)\",\"Create an initialization vector (IV)\"],mcrypt_decrypt:[\"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_ecb:[\"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_enc_get_algorithms_name:[\"string mcrypt_enc_get_algorithms_name(resource td)\",\"Returns the name of the algorithm specified by the descriptor td\"],mcrypt_enc_get_block_size:[\"int mcrypt_enc_get_block_size(resource td)\",\"Returns the block size of the cipher specified by the descriptor td\"],mcrypt_enc_get_iv_size:[\"int mcrypt_enc_get_iv_size(resource td)\",\"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_key_size:[\"int mcrypt_enc_get_key_size(resource td)\",\"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_modes_name:[\"string mcrypt_enc_get_modes_name(resource td)\",\"Returns the name of the mode specified by the descriptor td\"],mcrypt_enc_get_supported_key_sizes:[\"array mcrypt_enc_get_supported_key_sizes(resource td)\",\"This function decrypts the crypttext\"],mcrypt_enc_is_block_algorithm:[\"bool mcrypt_enc_is_block_algorithm(resource td)\",\"Returns TRUE if the alrogithm is a block algorithms\"],mcrypt_enc_is_block_algorithm_mode:[\"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_enc_is_block_mode:[\"bool mcrypt_enc_is_block_mode(resource td)\",\"Returns TRUE if the mode outputs blocks\"],mcrypt_enc_self_test:[\"int mcrypt_enc_self_test(resource td)\",\"This function runs the self test on the algorithm specified by the descriptor td\"],mcrypt_encrypt:[\"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_generic:[\"string mcrypt_generic(resource td, string data)\",\"This function encrypts the plaintext\"],mcrypt_generic_deinit:[\"bool mcrypt_generic_deinit(resource td)\",\"This function terminates encrypt specified by the descriptor td\"],mcrypt_generic_init:[\"int mcrypt_generic_init(resource td, string key, string iv)\",\"This function initializes all buffers for the specific module\"],mcrypt_get_block_size:[\"int mcrypt_get_block_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_get_cipher_name:[\"string mcrypt_get_cipher_name(string cipher)\",\"Get the key size of cipher\"],mcrypt_get_iv_size:[\"int mcrypt_get_iv_size(string cipher, string module)\",\"Get the IV size of cipher (Usually the same as the blocksize)\"],mcrypt_get_key_size:[\"int mcrypt_get_key_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_list_algorithms:[\"array mcrypt_list_algorithms([string lib_dir])\",'List all algorithms in \"module_dir\"'],mcrypt_list_modes:[\"array mcrypt_list_modes([string lib_dir])\",'List all modes \"module_dir\"'],mcrypt_module_close:[\"bool mcrypt_module_close(resource td)\",\"Free the descriptor td\"],mcrypt_module_get_algo_block_size:[\"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\"Returns the block size of the algorithm\"],mcrypt_module_get_algo_key_size:[\"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\"Returns the maximum supported key size of the algorithm\"],mcrypt_module_get_supported_key_sizes:[\"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\"This function decrypts the crypttext\"],mcrypt_module_is_block_algorithm:[\"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\"Returns TRUE if the algorithm is a block algorithm\"],mcrypt_module_is_block_algorithm_mode:[\"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_module_is_block_mode:[\"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode outputs blocks of bytes\"],mcrypt_module_open:[\"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\"Opens the module of the algorithm and the mode to be used\"],mcrypt_module_self_test:[\"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",'Does a self test of the module \"module\"'],mcrypt_ofb:[\"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],md5:[\"string md5(string str, [ bool raw_output])\",\"Calculate the md5 hash of a string\"],md5_file:[\"string md5_file(string filename [, bool raw_output])\",\"Calculate the md5 hash of given filename\"],mdecrypt_generic:[\"string mdecrypt_generic(resource td, string data)\",\"This function decrypts the plaintext\"],memory_get_peak_usage:[\"int memory_get_peak_usage([real_usage])\",\"Returns the peak allocated by PHP memory\"],memory_get_usage:[\"int memory_get_usage([real_usage])\",\"Returns the allocated by PHP memory\"],metaphone:[\"string metaphone(string text[, int phones])\",\"Break english phrases down into their phonemes\"],method_exists:[\"bool method_exists(object object, string method)\",\"Checks if the class method exists\"],mhash:[\"string mhash(int hash, string data [, string key])\",\"Hash data with hash\"],mhash_count:[\"int mhash_count(void)\",\"Gets the number of available hashes\"],mhash_get_block_size:[\"int mhash_get_block_size(int hash)\",\"Gets the block size of hash\"],mhash_get_hash_name:[\"string mhash_get_hash_name(int hash)\",\"Gets the name of hash\"],mhash_keygen_s2k:[\"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\"Generates a key using hash functions\"],microtime:[\"mixed microtime([bool get_as_float])\",\"Returns either a string or a float containing the current time in seconds and microseconds\"],mime_content_type:[\"string mime_content_type(string filename|resource stream)\",\"Return content-type for file\"],min:[\"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the lowest value in an array or a series of arguments\"],mkdir:[\"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\"Create a directory\"],mktime:[\"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a date\"],money_format:[\"string money_format(string format , float value)\",\"Convert monetary value(s) to string\"],move_uploaded_file:[\"bool move_uploaded_file(string path, string new_path)\",\"Move a file if and only if it was created by an upload\"],msg_get_queue:[\"resource msg_get_queue(int key [, int perms])\",\"Attach to a message queue\"],msg_queue_exists:[\"bool msg_queue_exists(int key)\",\"Check whether a message queue exists\"],msg_receive:[\"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_remove_queue:[\"bool msg_remove_queue(resource queue)\",\"Destroy the queue\"],msg_send:[\"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_set_queue:[\"bool msg_set_queue(resource queue, array data)\",\"Set information for a message queue\"],msg_stat_queue:[\"array msg_stat_queue(resource queue)\",\"Returns information about a message queue\"],msgfmt_create:[\"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\"* Create formatter.\"],msgfmt_format:[\"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\"* Format a message.\"],msgfmt_format_message:[\"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\"* Format a message.\"],msgfmt_get_error_code:[\"int msgfmt_get_error_code( MessageFormatter $nf )\",\"* Get formatter's last error code.\"],msgfmt_get_error_message:[\"string msgfmt_get_error_message( MessageFormatter $coll )\",\"* Get text description for formatter's last error code.\"],msgfmt_get_locale:[\"string msgfmt_get_locale(MessageFormatter $mf)\",\"* Get formatter locale.\"],msgfmt_get_pattern:[\"string msgfmt_get_pattern( MessageFormatter $mf )\",\"* Get formatter pattern.\"],msgfmt_parse:[\"array msgfmt_parse( MessageFormatter $nf, string $source )\",\"* Parse a message.\"],msgfmt_set_pattern:[\"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],mssql_bind:[\"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\"Adds a parameter to a stored procedure or a remote stored procedure\"],mssql_close:[\"bool mssql_close([resource conn_id])\",\"Closes a connection to a MS-SQL server\"],mssql_connect:[\"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a connection to a MS-SQL server\"],mssql_data_seek:[\"bool mssql_data_seek(resource result_id, int offset)\",\"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"],mssql_execute:[\"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\"Executes a stored procedure on a MS-SQL server database\"],mssql_fetch_array:[\"array mssql_fetch_array(resource result_id [, int result_type])\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_assoc:[\"array mssql_fetch_assoc(resource result_id)\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_batch:[\"int mssql_fetch_batch(resource result_index)\",\"Returns the next batch of records\"],mssql_fetch_field:[\"object mssql_fetch_field(resource result_id [, int offset])\",\"Gets information about certain fields in a query result\"],mssql_fetch_object:[\"object mssql_fetch_object(resource result_id)\",\"Returns a pseudo-object of the current row in the result set specified by result_id\"],mssql_fetch_row:[\"array mssql_fetch_row(resource result_id)\",\"Returns an array of the current row in the result set specified by result_id\"],mssql_field_length:[\"int mssql_field_length(resource result_id [, int offset])\",\"Get the length of a MS-SQL field\"],mssql_field_name:[\"string mssql_field_name(resource result_id [, int offset])\",\"Returns the name of the field given by offset in the result set given by result_id\"],mssql_field_seek:[\"bool mssql_field_seek(resource result_id, int offset)\",\"Seeks to the specified field offset\"],mssql_field_type:[\"string mssql_field_type(resource result_id [, int offset])\",\"Returns the type of a field\"],mssql_free_result:[\"bool mssql_free_result(resource result_index)\",\"Free a MS-SQL result index\"],mssql_free_statement:[\"bool mssql_free_statement(resource result_index)\",\"Free a MS-SQL statement index\"],mssql_get_last_message:[\"string mssql_get_last_message(void)\",\"Gets the last message from the MS-SQL server\"],mssql_guid_string:[\"string mssql_guid_string(string binary [,bool short_format])\",\"Converts a 16 byte binary GUID to a string\"],mssql_init:[\"int mssql_init(string sp_name [, resource conn_id])\",\"Initializes a stored procedure or a remote stored procedure\"],mssql_min_error_severity:[\"void mssql_min_error_severity(int severity)\",\"Sets the lower error severity\"],mssql_min_message_severity:[\"void mssql_min_message_severity(int severity)\",\"Sets the lower message severity\"],mssql_next_result:[\"bool mssql_next_result(resource result_id)\",\"Move the internal result pointer to the next result\"],mssql_num_fields:[\"int mssql_num_fields(resource mssql_result_index)\",\"Returns the number of fields fetched in from the result id specified\"],mssql_num_rows:[\"int mssql_num_rows(resource mssql_result_index)\",\"Returns the number of rows fetched in from the result id specified\"],mssql_pconnect:[\"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a persistent connection to a MS-SQL server\"],mssql_query:[\"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\"Perform an SQL query on a MS-SQL server database\"],mssql_result:[\"string mssql_result(resource result_id, int row, mixed field)\",\"Returns the contents of one cell from a MS-SQL result set\"],mssql_rows_affected:[\"int mssql_rows_affected(resource conn_id)\",\"Returns the number of records affected by the query\"],mssql_select_db:[\"bool mssql_select_db(string database_name [, resource conn_id])\",\"Select a MS-SQL database\"],mt_getrandmax:[\"int mt_getrandmax(void)\",\"Returns the maximum value a random number from Mersenne Twister can have\"],mt_rand:[\"int mt_rand([int min, int max])\",\"Returns a random number from Mersenne Twister\"],mt_srand:[\"void mt_srand([int seed])\",\"Seeds Mersenne Twister random number generator\"],mysql_affected_rows:[\"int mysql_affected_rows([int link_identifier])\",\"Gets number of affected rows in previous MySQL operation\"],mysql_client_encoding:[\"string mysql_client_encoding([int link_identifier])\",\"Returns the default character set for the current connection\"],mysql_close:[\"bool mysql_close([int link_identifier])\",\"Close a MySQL connection\"],mysql_connect:[\"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\"Opens a connection to a MySQL Server\"],mysql_create_db:[\"bool mysql_create_db(string database_name [, int link_identifier])\",\"Create a MySQL database\"],mysql_data_seek:[\"bool mysql_data_seek(resource result, int row_number)\",\"Move internal result pointer\"],mysql_db_query:[\"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_drop_db:[\"bool mysql_drop_db(string database_name [, int link_identifier])\",\"Drops (delete) a MySQL database\"],mysql_errno:[\"int mysql_errno([int link_identifier])\",\"Returns the number of the error message from previous MySQL operation\"],mysql_error:[\"string mysql_error([int link_identifier])\",\"Returns the text of the error message from previous MySQL operation\"],mysql_escape_string:[\"string mysql_escape_string(string to_be_escaped)\",\"Escape string for mysql query\"],mysql_fetch_array:[\"array mysql_fetch_array(resource result [, int result_type])\",\"Fetch a result row as an array (associative, numeric or both)\"],mysql_fetch_assoc:[\"array mysql_fetch_assoc(resource result)\",\"Fetch a result row as an associative array\"],mysql_fetch_field:[\"object mysql_fetch_field(resource result [, int field_offset])\",\"Gets column information from a result and return as an object\"],mysql_fetch_lengths:[\"array mysql_fetch_lengths(resource result)\",\"Gets max data size of each column in a result\"],mysql_fetch_object:[\"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysql_fetch_row:[\"array mysql_fetch_row(resource result)\",\"Gets a result row as an enumerated array\"],mysql_field_flags:[\"string mysql_field_flags(resource result, int field_offset)\",\"Gets the flags associated with the specified field in a result\"],mysql_field_len:[\"int mysql_field_len(resource result, int field_offset)\",\"Returns the length of the specified field\"],mysql_field_name:[\"string mysql_field_name(resource result, int field_index)\",\"Gets the name of the specified field in a result\"],mysql_field_seek:[\"bool mysql_field_seek(resource result, int field_offset)\",\"Sets result pointer to a specific field offset\"],mysql_field_table:[\"string mysql_field_table(resource result, int field_offset)\",\"Gets name of the table the specified field is in\"],mysql_field_type:[\"string mysql_field_type(resource result, int field_offset)\",\"Gets the type of the specified field in a result\"],mysql_free_result:[\"bool mysql_free_result(resource result)\",\"Free result memory\"],mysql_get_client_info:[\"string mysql_get_client_info(void)\",\"Returns a string that represents the client library version\"],mysql_get_host_info:[\"string mysql_get_host_info([int link_identifier])\",\"Returns a string describing the type of connection in use, including the server host name\"],mysql_get_proto_info:[\"int mysql_get_proto_info([int link_identifier])\",\"Returns the protocol version used by current connection\"],mysql_get_server_info:[\"string mysql_get_server_info([int link_identifier])\",\"Returns a string that represents the server version number\"],mysql_info:[\"string mysql_info([int link_identifier])\",\"Returns a string containing information about the most recent query\"],mysql_insert_id:[\"int mysql_insert_id([int link_identifier])\",\"Gets the ID generated from the previous INSERT operation\"],mysql_list_dbs:[\"resource mysql_list_dbs([int link_identifier])\",\"List databases available on a MySQL server\"],mysql_list_fields:[\"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\"List MySQL result fields\"],mysql_list_processes:[\"resource mysql_list_processes([int link_identifier])\",\"Returns a result set describing the current server threads\"],mysql_list_tables:[\"resource mysql_list_tables(string database_name [, int link_identifier])\",\"List tables in a MySQL database\"],mysql_num_fields:[\"int mysql_num_fields(resource result)\",\"Gets number of fields in a result\"],mysql_num_rows:[\"int mysql_num_rows(resource result)\",\"Gets number of rows in a result\"],mysql_pconnect:[\"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\"Opens a persistent connection to a MySQL Server\"],mysql_ping:[\"bool mysql_ping([int link_identifier])\",\"Ping a server connection. If no connection then reconnect.\"],mysql_query:[\"resource mysql_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_real_escape_string:[\"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysql_result:[\"mixed mysql_result(resource result, int row [, mixed field])\",\"Gets result data\"],mysql_select_db:[\"bool mysql_select_db(string database_name [, int link_identifier])\",\"Selects a MySQL database\"],mysql_set_charset:[\"bool mysql_set_charset(string csname [, int link_identifier])\",\"sets client character set\"],mysql_stat:[\"string mysql_stat([int link_identifier])\",\"Returns a string containing status information\"],mysql_thread_id:[\"int mysql_thread_id([int link_identifier])\",\"Returns the thread id of current connection\"],mysql_unbuffered_query:[\"resource mysql_unbuffered_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL, without fetching and buffering the result rows\"],mysqli_affected_rows:[\"mixed mysqli_affected_rows(object link)\",\"Get number of affected rows in previous MySQL operation\"],mysqli_autocommit:[\"bool mysqli_autocommit(object link, bool mode)\",\"Turn auto commit on or of\"],mysqli_cache_stats:[\"array mysqli_cache_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_change_user:[\"bool mysqli_change_user(object link, string user, string password, string database)\",\"Change logged-in user of the active connection\"],mysqli_character_set_name:[\"string mysqli_character_set_name(object link)\",\"Returns the name of the character set used for this connection\"],mysqli_close:[\"bool mysqli_close(object link)\",\"Close connection\"],mysqli_commit:[\"bool mysqli_commit(object link)\",\"Commit outstanding actions and close transaction\"],mysqli_connect:[\"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\"Open a connection to a mysql server\"],mysqli_connect_errno:[\"int mysqli_connect_errno(void)\",\"Returns the numerical value of the error message from last connect command\"],mysqli_connect_error:[\"string mysqli_connect_error(void)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_data_seek:[\"bool mysqli_data_seek(object result, int offset)\",\"Move internal result pointer\"],mysqli_debug:[\"void mysqli_debug(string debug)\",\"\"],mysqli_dump_debug_info:[\"bool mysqli_dump_debug_info(object link)\",\"\"],mysqli_embedded_server_end:[\"void mysqli_embedded_server_end(void)\",\"\"],mysqli_embedded_server_start:[\"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\"initialize and start embedded server\"],mysqli_errno:[\"int mysqli_errno(object link)\",\"Returns the numerical value of the error message from previous MySQL operation\"],mysqli_error:[\"string mysqli_error(object link)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_fetch_all:[\"mixed mysqli_fetch_all (object result [,int resulttype])\",\"Fetches all result rows as an associative array, a numeric array, or both\"],mysqli_fetch_array:[\"mixed mysqli_fetch_array (object result [,int resulttype])\",\"Fetch a result row as an associative array, a numeric array, or both\"],mysqli_fetch_assoc:[\"mixed mysqli_fetch_assoc (object result)\",\"Fetch a result row as an associative array\"],mysqli_fetch_field:[\"mixed mysqli_fetch_field (object result)\",\"Get column information from a result and return as an object\"],mysqli_fetch_field_direct:[\"mixed mysqli_fetch_field_direct (object result, int offset)\",\"Fetch meta-data for a single field\"],mysqli_fetch_fields:[\"mixed mysqli_fetch_fields (object result)\",\"Return array of objects containing field meta-data\"],mysqli_fetch_lengths:[\"mixed mysqli_fetch_lengths (object result)\",\"Get the length of each output in a result\"],mysqli_fetch_object:[\"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysqli_fetch_row:[\"array mysqli_fetch_row (object result)\",\"Get a result row as an enumerated array\"],mysqli_field_count:[\"int mysqli_field_count(object link)\",\"Fetch the number of fields returned by the last query for the given link\"],mysqli_field_seek:[\"int mysqli_field_seek(object result, int fieldnr)\",\"Set result pointer to a specified field offset\"],mysqli_field_tell:[\"int mysqli_field_tell(object result)\",\"Get current field offset of result pointer\"],mysqli_free_result:[\"void mysqli_free_result(object result)\",\"Free query result memory for the given result handle\"],mysqli_get_charset:[\"object mysqli_get_charset(object link)\",\"returns a character set object\"],mysqli_get_client_info:[\"string mysqli_get_client_info(void)\",\"Get MySQL client info\"],mysqli_get_client_stats:[\"array mysqli_get_client_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_client_version:[\"int mysqli_get_client_version(void)\",\"Get MySQL client info\"],mysqli_get_connection_stats:[\"array mysqli_get_connection_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_host_info:[\"string mysqli_get_host_info (object link)\",\"Get MySQL host info\"],mysqli_get_proto_info:[\"int mysqli_get_proto_info(object link)\",\"Get MySQL protocol information\"],mysqli_get_server_info:[\"string mysqli_get_server_info(object link)\",\"Get MySQL server info\"],mysqli_get_server_version:[\"int mysqli_get_server_version(object link)\",\"Return the MySQL version for the server referenced by the given link\"],mysqli_get_warnings:[\"object mysqli_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}'],mysqli_info:[\"string mysqli_info(object link)\",\"Get information about the most recent query\"],mysqli_init:[\"resource mysqli_init(void)\",\"Initialize mysqli and return a resource for use with mysql_real_connect\"],mysqli_insert_id:[\"mixed mysqli_insert_id(object link)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_kill:[\"bool mysqli_kill(object link, int processid)\",\"Kill a mysql process on the server\"],mysqli_link_construct:[\"object mysqli_link_construct()\",\"\"],mysqli_more_results:[\"bool mysqli_more_results(object link)\",\"check if there any more query results from a multi query\"],mysqli_multi_query:[\"bool mysqli_multi_query(object link, string query)\",\"allows to execute multiple queries\"],mysqli_next_result:[\"bool mysqli_next_result(object link)\",\"read next result from multi_query\"],mysqli_num_fields:[\"int mysqli_num_fields(object result)\",\"Get number of fields in result\"],mysqli_num_rows:[\"mixed mysqli_num_rows(object result)\",\"Get number of rows in result\"],mysqli_options:[\"bool mysqli_options(object link, int flags, mixed values)\",\"Set options\"],mysqli_ping:[\"bool mysqli_ping(object link)\",\"Ping a server connection or reconnect if there is no connection\"],mysqli_poll:[\"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\"Poll connections\"],mysqli_prepare:[\"mixed mysqli_prepare(object link, string query)\",\"Prepare a SQL statement for execution\"],mysqli_query:[\"mixed mysqli_query(object link, string query [,int resultmode]) */\",'PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Os|l\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Empty query\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid value for resultmode\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT'],mysqli_real_connect:[\"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\"Open a connection to a mysql server\"],mysqli_real_escape_string:[\"string mysqli_real_escape_string(object link, string escapestr)\",\"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysqli_real_query:[\"bool mysqli_real_query(object link, string query)\",\"Binary-safe version of mysql_query()\"],mysqli_reap_async_query:[\"int mysqli_reap_async_query(object link)\",\"Poll connections\"],mysqli_refresh:[\"bool mysqli_refresh(object link, long options)\",\"Flush tables or caches, or reset replication server information\"],mysqli_report:[\"bool mysqli_report(int flags)\",\"sets report level\"],mysqli_rollback:[\"bool mysqli_rollback(object link)\",\"Undo actions from current transaction\"],mysqli_select_db:[\"bool mysqli_select_db(object link, string dbname)\",\"Select a MySQL database\"],mysqli_set_charset:[\"bool mysqli_set_charset(object link, string csname)\",\"sets client character set\"],mysqli_set_local_infile_default:[\"void mysqli_set_local_infile_default(object link)\",\"unsets user defined handler for load local infile command\"],mysqli_set_local_infile_handler:[\"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\"Set callback functions for LOAD DATA LOCAL INFILE\"],mysqli_sqlstate:[\"string mysqli_sqlstate(object link)\",\"Returns the SQLSTATE error from previous MySQL operation\"],mysqli_ssl_set:[\"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\"\"],mysqli_stat:[\"mixed mysqli_stat(object link)\",\"Get current system status\"],mysqli_stmt_affected_rows:[\"mixed mysqli_stmt_affected_rows(object stmt)\",\"Return the number of rows affected in the last query for the given link\"],mysqli_stmt_attr_get:[\"int mysqli_stmt_attr_get(object stmt, long attr)\",\"\"],mysqli_stmt_attr_set:[\"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\"\"],mysqli_stmt_bind_param:[\"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\"Bind variables to a prepared statement as parameters\"],mysqli_stmt_bind_result:[\"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\"Bind variables to a prepared statement for result storage\"],mysqli_stmt_close:[\"bool mysqli_stmt_close(object stmt)\",\"Close statement\"],mysqli_stmt_data_seek:[\"void mysqli_stmt_data_seek(object stmt, int offset)\",\"Move internal result pointer\"],mysqli_stmt_errno:[\"int mysqli_stmt_errno(object stmt)\",\"\"],mysqli_stmt_error:[\"string mysqli_stmt_error(object stmt)\",\"\"],mysqli_stmt_execute:[\"bool mysqli_stmt_execute(object stmt)\",\"Execute a prepared statement\"],mysqli_stmt_fetch:[\"mixed mysqli_stmt_fetch(object stmt)\",\"Fetch results from a prepared statement into the bound variables\"],mysqli_stmt_field_count:[\"int mysqli_stmt_field_count(object stmt) {\",\"Return the number of result columns for the given statement\"],mysqli_stmt_free_result:[\"void mysqli_stmt_free_result(object stmt)\",\"Free stored result memory for the given statement handle\"],mysqli_stmt_get_result:[\"object mysqli_stmt_get_result(object link)\",\"Buffer result set on client\"],mysqli_stmt_get_warnings:[\"object mysqli_stmt_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \"mysqli_stmt\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_stmt_init:[\"mixed mysqli_stmt_init(object link)\",\"Initialize statement object\"],mysqli_stmt_insert_id:[\"mixed mysqli_stmt_insert_id(object stmt)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_stmt_next_result:[\"bool mysqli_stmt_next_result(object link)\",\"read next result from multi_query\"],mysqli_stmt_num_rows:[\"mixed mysqli_stmt_num_rows(object stmt)\",\"Return the number of rows in statements result set\"],mysqli_stmt_param_count:[\"int mysqli_stmt_param_count(object stmt)\",\"Return the number of parameter for the given statement\"],mysqli_stmt_prepare:[\"bool mysqli_stmt_prepare(object stmt, string query)\",\"prepare server side statement with query\"],mysqli_stmt_reset:[\"bool mysqli_stmt_reset(object stmt)\",\"reset a prepared statement\"],mysqli_stmt_result_metadata:[\"mixed mysqli_stmt_result_metadata(object stmt)\",\"return result set from statement\"],mysqli_stmt_send_long_data:[\"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\"\"],mysqli_stmt_sqlstate:[\"string mysqli_stmt_sqlstate(object stmt)\",\"\"],mysqli_stmt_store_result:[\"bool mysqli_stmt_store_result(stmt)\",\"\"],mysqli_store_result:[\"object mysqli_store_result(object link)\",\"Buffer result set on client\"],mysqli_thread_id:[\"int mysqli_thread_id(object link)\",\"Return the current thread ID\"],mysqli_thread_safe:[\"bool mysqli_thread_safe(void)\",\"Return whether thread safety is given or not\"],mysqli_use_result:[\"mixed mysqli_use_result(object link)\",\"Directly retrieve query results - do not buffer results on client side\"],mysqli_warning_count:[\"int mysqli_warning_count (object link)\",\"Return number of warnings from the last query for the given link\"],natcasesort:[\"void natcasesort(array &array_arg)\",\"Sort an array using case-insensitive natural sort\"],natsort:[\"void natsort(array &array_arg)\",\"Sort an array using natural sort\"],next:[\"mixed next(array array_arg)\",\"Move array argument's internal pointer to the next element and return it\"],ngettext:[\"string ngettext(string MSGID1, string MSGID2, int N)\",\"Plural version of gettext()\"],nl2br:[\"string nl2br(string str [, bool is_xhtml])\",\"Converts newlines to HTML line breaks\"],nl_langinfo:[\"string nl_langinfo(int item)\",\"Query language and locale information\"],normalizer_is_normalize:[\"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\"* Test if a string is in a given normalization form.\"],normalizer_normalize:[\"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\"* Normalize a string.\"],nsapi_request_headers:[\"array nsapi_request_headers(void)\",\"Get all headers from the request\"],nsapi_response_headers:[\"array nsapi_response_headers(void)\",\"Get all headers from the response\"],nsapi_virtual:[\"bool nsapi_virtual(string uri)\",\"Perform an NSAPI sub-request\"],number_format:[\"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\"Formats a number with grouped thousands\"],numfmt_create:[\"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\"* Create number formatter.\"],numfmt_format:[\"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\"* Format a number.\"],numfmt_format_currency:[\"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\"* Format a number as currency.\"],numfmt_get_attribute:[\"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_get_error_code:[\"int numfmt_get_error_code( NumberFormatter $nf )\",\"* Get formatter's last error code.\"],numfmt_get_error_message:[\"string numfmt_get_error_message( NumberFormatter $nf )\",\"* Get text description for formatter's last error code.\"],numfmt_get_locale:[\"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\"* Get formatter locale.\"],numfmt_get_pattern:[\"string numfmt_get_pattern( NumberFormatter $nf )\",\"* Get formatter pattern.\"],numfmt_get_symbol:[\"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\"* Get formatter symbol value.\"],numfmt_get_text_attribute:[\"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_parse:[\"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\"* Parse a number.\"],numfmt_parse_currency:[\"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\"* Parse a number as currency.\"],numfmt_parse_message:[\"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\"* Parse a message.\"],numfmt_set_attribute:[\"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\"* Get formatter attribute value.\"],numfmt_set_pattern:[\"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\"* Set formatter pattern.\"],numfmt_set_symbol:[\"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\"* Set formatter symbol value.\"],numfmt_set_text_attribute:[\"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\"* Get formatter attribute value.\"],ob_clean:[\"bool ob_clean(void)\",\"Clean (delete) the current output buffer\"],ob_end_clean:[\"bool ob_end_clean(void)\",\"Clean the output buffer, and delete current output buffer\"],ob_end_flush:[\"bool ob_end_flush(void)\",\"Flush (send) the output buffer, and delete current output buffer\"],ob_flush:[\"bool ob_flush(void)\",\"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"],ob_get_clean:[\"bool ob_get_clean(void)\",\"Get current buffer contents and delete current output buffer\"],ob_get_contents:[\"string ob_get_contents(void)\",\"Return the contents of the output buffer\"],ob_get_flush:[\"bool ob_get_flush(void)\",\"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"],ob_get_length:[\"int ob_get_length(void)\",\"Return the length of the output buffer\"],ob_get_level:[\"int ob_get_level(void)\",\"Return the nesting level of the output buffer\"],ob_get_status:[\"false|array ob_get_status([bool full_status])\",\"Return the status of the active or all output buffers\"],ob_gzhandler:[\"string ob_gzhandler(string str, int mode)\",\"Encode str based on accept-encoding setting - designed to be called from ob_start()\"],ob_iconv_handler:[\"string ob_iconv_handler(string contents, int status)\",\"Returns str in output buffer converted to the iconv.output_encoding character set\"],ob_implicit_flush:[\"void ob_implicit_flush([int flag])\",\"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"],ob_list_handlers:[\"false|array ob_list_handlers()\",\"*  List all output_buffers in an array\"],ob_start:[\"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\"Turn on Output Buffering (specifying an optional output handler).\"],oci_bind_array_by_name:[\"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\"Bind a PHP array to an Oracle PL/SQL type by name\"],oci_bind_by_name:[\"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\"Bind a PHP variable to an Oracle placeholder by name\"],oci_cancel:[\"bool oci_cancel(resource stmt)\",\"Cancel reading from a cursor\"],oci_close:[\"bool oci_close(resource connection)\",\"Disconnect from database\"],oci_collection_append:[\"bool oci_collection_append(string value)\",\"Append an object to the collection\"],oci_collection_assign:[\"bool oci_collection_assign(object from)\",\"Assign a collection from another existing collection\"],oci_collection_element_assign:[\"bool oci_collection_element_assign(int index, string val)\",\"Assign element val to collection at index ndx\"],oci_collection_element_get:[\"string oci_collection_element_get(int ndx)\",\"Retrieve the value at collection index ndx\"],oci_collection_max:[\"int oci_collection_max()\",\"Return the max value of a collection. For a varray this is the maximum length of the array\"],oci_collection_size:[\"int oci_collection_size()\",\"Return the size of a collection\"],oci_collection_trim:[\"bool oci_collection_trim(int num)\",\"Trim num elements from the end of a collection\"],oci_commit:[\"bool oci_commit(resource connection)\",\"Commit the current context\"],oci_connect:[\"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_define_by_name:[\"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\"Define a PHP variable to an Oracle column by name\"],oci_error:[\"array oci_error([resource stmt|connection|global])\",\"Return the last error of stmt|connection|global. If no error happened returns false.\"],oci_execute:[\"bool oci_execute(resource stmt [, int mode])\",\"Execute a parsed statement\"],oci_fetch:[\"bool oci_fetch(resource stmt)\",\"Prepare a new row of data for reading\"],oci_fetch_all:[\"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\"Fetch all rows of result data into an array\"],oci_fetch_array:[\"array oci_fetch_array( resource stmt [, int mode ])\",\"Fetch a result row as an array\"],oci_fetch_assoc:[\"array oci_fetch_assoc( resource stmt )\",\"Fetch a result row as an associative array\"],oci_fetch_object:[\"object oci_fetch_object( resource stmt )\",\"Fetch a result row as an object\"],oci_fetch_row:[\"array oci_fetch_row( resource stmt )\",\"Fetch a result row as an enumerated array\"],oci_field_is_null:[\"bool oci_field_is_null(resource stmt, int col)\",\"Tell whether a column is NULL\"],oci_field_name:[\"string oci_field_name(resource stmt, int col)\",\"Tell the name of a column\"],oci_field_precision:[\"int oci_field_precision(resource stmt, int col)\",\"Tell the precision of a column\"],oci_field_scale:[\"int oci_field_scale(resource stmt, int col)\",\"Tell the scale of a column\"],oci_field_size:[\"int oci_field_size(resource stmt, int col)\",\"Tell the maximum data size of a column\"],oci_field_type:[\"mixed oci_field_type(resource stmt, int col)\",\"Tell the data type of a column\"],oci_field_type_raw:[\"int oci_field_type_raw(resource stmt, int col)\",\"Tell the raw oracle data type of a column\"],oci_free_collection:[\"bool oci_free_collection()\",\"Deletes collection object\"],oci_free_descriptor:[\"bool oci_free_descriptor()\",\"Deletes large object description\"],oci_free_statement:[\"bool oci_free_statement(resource stmt)\",\"Free all resources associated with a statement\"],oci_internal_debug:[\"void oci_internal_debug(int onoff)\",\"Toggle internal debugging output for the OCI extension\"],oci_lob_append:[\"bool oci_lob_append( object lob )\",\"Appends data from a LOB to another LOB\"],oci_lob_close:[\"bool oci_lob_close()\",\"Closes lob descriptor\"],oci_lob_copy:[\"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\"Copies data from a LOB to another LOB\"],oci_lob_eof:[\"bool oci_lob_eof()\",\"Checks if EOF is reached\"],oci_lob_erase:[\"int oci_lob_erase( [ int offset [, int length ] ] )\",\"Erases a specified portion of the internal LOB, starting at a specified offset\"],oci_lob_export:[\"bool oci_lob_export([string filename [, int start [, int length]]])\",\"Writes a large object into a file\"],oci_lob_flush:[\"bool oci_lob_flush( [ int flag ] )\",\"Flushes the LOB buffer\"],oci_lob_import:[\"bool oci_lob_import( string filename )\",\"Loads file into a LOB\"],oci_lob_is_equal:[\"bool oci_lob_is_equal( object lob1, object lob2 )\",\"Tests to see if two LOB/FILE locators are equal\"],oci_lob_load:[\"string oci_lob_load()\",\"Loads a large object\"],oci_lob_read:[\"string oci_lob_read( int length )\",\"Reads particular part of a large object\"],oci_lob_rewind:[\"bool oci_lob_rewind()\",\"Rewind pointer of a LOB\"],oci_lob_save:[\"bool oci_lob_save( string data [, int offset ])\",\"Saves a large object\"],oci_lob_seek:[\"bool oci_lob_seek( int offset [, int whence ])\",\"Moves the pointer of a LOB\"],oci_lob_size:[\"int oci_lob_size()\",\"Returns size of a large object\"],oci_lob_tell:[\"int oci_lob_tell()\",\"Tells LOB pointer position\"],oci_lob_truncate:[\"bool oci_lob_truncate( [ int length ])\",\"Truncates a LOB\"],oci_lob_write:[\"int oci_lob_write( string string [, int length ])\",\"Writes data to current position of a LOB\"],oci_lob_write_temporary:[\"bool oci_lob_write_temporary(string var [, int lob_type])\",\"Writes temporary blob\"],oci_new_collection:[\"object oci_new_collection(resource connection, string tdo [, string schema])\",\"Initialize a new collection\"],oci_new_connect:[\"resource oci_new_connect(string user, string pass [, string db])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_new_cursor:[\"resource oci_new_cursor(resource connection)\",\"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"],oci_new_descriptor:[\"object oci_new_descriptor(resource connection [, int type])\",\"Initialize a new empty descriptor LOB/FILE (LOB is default)\"],oci_num_fields:[\"int oci_num_fields(resource stmt)\",\"Return the number of result columns in a statement\"],oci_num_rows:[\"int oci_num_rows(resource stmt)\",\"Return the row count of an OCI statement\"],oci_parse:[\"resource oci_parse(resource connection, string query)\",\"Parse a query and return a statement\"],oci_password_change:[\"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\"Changes the password of an account\"],oci_pconnect:[\"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"],oci_result:[\"string oci_result(resource stmt, mixed column)\",\"Return a single column of result data\"],oci_rollback:[\"bool oci_rollback(resource connection)\",\"Rollback the current context\"],oci_server_version:[\"string oci_server_version(resource connection)\",\"Return a string containing server version information\"],oci_set_action:[\"bool oci_set_action(resource connection, string value)\",\"Sets the action attribute on the connection\"],oci_set_client_identifier:[\"bool oci_set_client_identifier(resource connection, string value)\",\"Sets the client identifier attribute on the connection\"],oci_set_client_info:[\"bool oci_set_client_info(resource connection, string value)\",\"Sets the client info attribute on the connection\"],oci_set_edition:[\"bool oci_set_edition(string value)\",\"Sets the edition attribute for all subsequent connections created\"],oci_set_module_name:[\"bool oci_set_module_name(resource connection, string value)\",\"Sets the module attribute on the connection\"],oci_set_prefetch:[\"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"],oci_statement_type:[\"string oci_statement_type(resource stmt)\",\"Return the query type of an OCI statement\"],ocifetchinto:[\"int ocifetchinto(resource stmt, array &output [, int mode])\",\"Fetch a row of result data into an array\"],ocigetbufferinglob:[\"bool ocigetbufferinglob()\",\"Returns current state of buffering for a LOB\"],ocisetbufferinglob:[\"bool ocisetbufferinglob( boolean flag )\",\"Enables/disables buffering for a LOB\"],octdec:[\"int octdec(string octal_number)\",\"Returns the decimal equivalent of an octal string\"],odbc_autocommit:[\"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\"Toggle autocommit mode or get status\"],odbc_binmode:[\"bool odbc_binmode(int result_id, int mode)\",\"Handle binary column data\"],odbc_close:[\"void odbc_close(resource connection_id)\",\"Close an ODBC connection\"],odbc_close_all:[\"void odbc_close_all(void)\",\"Close all ODBC connections\"],odbc_columnprivileges:[\"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"],odbc_columns:[\"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\"Returns a result identifier that can be used to fetch a list of column names in specified tables\"],odbc_commit:[\"bool odbc_commit(resource connection_id)\",\"Commit an ODBC transaction\"],odbc_connect:[\"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\"Connect to a datasource\"],odbc_cursor:[\"string odbc_cursor(resource result_id)\",\"Get cursor name\"],odbc_data_source:[\"array odbc_data_source(resource connection_id, int fetch_type)\",\"Return information about the currently connected data source\"],odbc_error:[\"string odbc_error([resource connection_id])\",\"Get the last error code\"],odbc_errormsg:[\"string odbc_errormsg([resource connection_id])\",\"Get the last error message\"],odbc_exec:[\"resource odbc_exec(resource connection_id, string query [, int flags])\",\"Prepare and execute an SQL statement\"],odbc_execute:[\"bool odbc_execute(resource result_id [, array parameters_array])\",\"Execute a prepared statement\"],odbc_fetch_array:[\"array odbc_fetch_array(int result [, int rownumber])\",\"Fetch a result row as an associative array\"],odbc_fetch_into:[\"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\"Fetch one result row into an array\"],odbc_fetch_object:[\"object odbc_fetch_object(int result [, int rownumber])\",\"Fetch a result row as an object\"],odbc_fetch_row:[\"bool odbc_fetch_row(resource result_id [, int row_number])\",\"Fetch a row\"],odbc_field_len:[\"int odbc_field_len(resource result_id, int field_number)\",\"Get the length (precision) of a column\"],odbc_field_name:[\"string odbc_field_name(resource result_id, int field_number)\",\"Get a column name\"],odbc_field_num:[\"int odbc_field_num(resource result_id, string field_name)\",\"Return column number\"],odbc_field_scale:[\"int odbc_field_scale(resource result_id, int field_number)\",\"Get the scale of a column\"],odbc_field_type:[\"string odbc_field_type(resource result_id, int field_number)\",\"Get the datatype of a column\"],odbc_foreignkeys:[\"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"],odbc_free_result:[\"bool odbc_free_result(resource result_id)\",\"Free resources associated with a result\"],odbc_gettypeinfo:[\"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\"Returns a result identifier containing information about data types supported by the data source\"],odbc_longreadlen:[\"bool odbc_longreadlen(int result_id, int length)\",\"Handle LONG columns\"],odbc_next_result:[\"bool odbc_next_result(resource result_id)\",\"Checks if multiple results are avaiable\"],odbc_num_fields:[\"int odbc_num_fields(resource result_id)\",\"Get number of columns in a result\"],odbc_num_rows:[\"int odbc_num_rows(resource result_id)\",\"Get number of rows in a result\"],odbc_pconnect:[\"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\"Establish a persistent connection to a datasource\"],odbc_prepare:[\"resource odbc_prepare(resource connection_id, string query)\",\"Prepares a statement for execution\"],odbc_primarykeys:[\"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\"Returns a result identifier listing the column names that comprise the primary key for a table\"],odbc_procedurecolumns:[\"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"],odbc_procedures:[\"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\"Returns a result identifier containg the list of procedure names in a datasource\"],odbc_result:[\"mixed odbc_result(resource result_id, mixed field)\",\"Get result data\"],odbc_result_all:[\"int odbc_result_all(resource result_id [, string format])\",\"Print result as HTML table\"],odbc_rollback:[\"bool odbc_rollback(resource connection_id)\",\"Rollback a transaction\"],odbc_setoption:[\"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\"Sets connection or statement options\"],odbc_specialcolumns:[\"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"],odbc_statistics:[\"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"],odbc_tableprivileges:[\"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\"Returns a result identifier containing a list of tables and the privileges associated with each table\"],odbc_tables:[\"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\"Call the SQLTables function\"],opendir:[\"mixed opendir(string path[, resource context])\",\"Open a directory and return a dir_handle\"],openlog:[\"bool openlog(string ident, int option, int facility)\",\"Open connection to system logger\"],openssl_csr_export:[\"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\"Exports a CSR to file or a var\"],openssl_csr_export_to_file:[\"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\"Exports a CSR to file\"],openssl_csr_get_public_key:[\"mixed openssl_csr_get_public_key(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_get_subject:[\"mixed openssl_csr_get_subject(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_new:[\"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\"Generates a privkey and CSR\"],openssl_csr_sign:[\"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\"Signs a cert with another CERT\"],openssl_decrypt:[\"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\"Takes raw or base64 encoded string and dectupt it using given method and key\"],openssl_dh_compute_key:[\"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\"Computes shared sicret for public value of remote DH key and local DH key\"],openssl_digest:[\"string openssl_digest(string data, string method [, bool raw_output=false])\",\"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"],openssl_encrypt:[\"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\"Encrypts given data with given method and key, returns raw or base64 encoded string\"],openssl_error_string:[\"mixed openssl_error_string(void)\",\"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"],openssl_get_cipher_methods:[\"array openssl_get_cipher_methods([bool aliases = false])\",\"Return array of available cipher methods\"],openssl_get_md_methods:[\"array openssl_get_md_methods([bool aliases = false])\",\"Return array of available digest methods\"],openssl_open:[\"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\"Opens data\"],openssl_pkcs12_export:[\"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS12 to a var\"],openssl_pkcs12_export_to_file:[\"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS to file\"],openssl_pkcs12_read:[\"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\"Parses a PKCS12 to an array\"],openssl_pkcs7_decrypt:[\"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"],openssl_pkcs7_encrypt:[\"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"],openssl_pkcs7_sign:[\"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"],openssl_pkcs7_verify:[\"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"],openssl_pkey_export:[\"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\"Gets an exportable representation of a key into a string or file\"],openssl_pkey_export_to_file:[\"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\"Gets an exportable representation of a key into a file\"],openssl_pkey_free:[\"void openssl_pkey_free(int key)\",\"Frees a key\"],openssl_pkey_get_details:[\"resource openssl_pkey_get_details(resource key)\",\"returns an array with the key details (bits, pkey, type)\"],openssl_pkey_get_private:[\"int openssl_pkey_get_private(string key [, string passphrase])\",\"Gets private keys\"],openssl_pkey_get_public:[\"int openssl_pkey_get_public(mixed cert)\",\"Gets public key from X.509 certificate\"],openssl_pkey_new:[\"resource openssl_pkey_new([array configargs])\",\"Generates a new private key\"],openssl_private_decrypt:[\"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\"Decrypts data with private key\"],openssl_private_encrypt:[\"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with private key\"],openssl_public_decrypt:[\"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\"Decrypts data with public key\"],openssl_public_encrypt:[\"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with public key\"],openssl_random_pseudo_bytes:[\"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\"Returns a string of the length specified filled with random pseudo bytes\"],openssl_seal:[\"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\"Seals data\"],openssl_sign:[\"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\"Signs data\"],openssl_verify:[\"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\"Verifys data\"],openssl_x509_check_private_key:[\"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\"Checks if a private key corresponds to a CERT\"],openssl_x509_checkpurpose:[\"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"],openssl_x509_export:[\"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_export_to_file:[\"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_free:[\"void openssl_x509_free(resource x509)\",\"Frees X.509 certificates\"],openssl_x509_parse:[\"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\"Returns an array of the fields/values of the CERT\"],openssl_x509_read:[\"resource openssl_x509_read(mixed cert)\",\"Reads X.509 certificates\"],ord:[\"int ord(string character)\",\"Returns ASCII value of character\"],output_add_rewrite_var:[\"bool output_add_rewrite_var(string name, string value)\",\"Add URL rewriter values\"],output_reset_rewrite_vars:[\"bool output_reset_rewrite_vars(void)\",\"Reset(clear) URL rewriter values\"],pack:[\"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Takes one or more arguments and packs them into a binary string according to the format argument\"],parse_ini_file:[\"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\"Parse configuration file\"],parse_ini_string:[\"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\"Parse configuration string\"],parse_locale:[\"static array parse_locale($locale)\",\"* parses a locale-id into an array the different parts of it\"],parse_str:[\"void parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],parse_url:[\"mixed parse_url(string url, [int url_component])\",\"Parse a URL and return its components\"],passthru:[\"void passthru(string command [, int &return_value])\",\"Execute an external program and display raw output\"],pathinfo:[\"array pathinfo(string path[, int options])\",\"Returns information about a certain string\"],pclose:[\"int pclose(resource fp)\",\"Close a file pointer opened by popen()\"],pcnlt_sigwaitinfo:[\"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\"Synchronously wait for queued signals\"],pcntl_alarm:[\"int pcntl_alarm(int seconds)\",\"Set an alarm clock for delivery of a signal\"],pcntl_exec:[\"bool pcntl_exec(string path [, array args [, array envs]])\",\"Executes specified program in current process space as defined by exec(2)\"],pcntl_fork:[\"int pcntl_fork(void)\",\"Forks the currently running process following the same behavior as the UNIX fork() system call\"],pcntl_getpriority:[\"int pcntl_getpriority([int pid [, int process_identifier]])\",\"Get the priority of any process\"],pcntl_setpriority:[\"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\"Change the priority of any process\"],pcntl_signal:[\"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\"Assigns a system signal handler to a PHP function\"],pcntl_signal_dispatch:[\"bool pcntl_signal_dispatch()\",\"Dispatch signals to signal handlers\"],pcntl_sigprocmask:[\"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\"Examine and change blocked signals\"],pcntl_sigtimedwait:[\"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\"Wait for queued signals\"],pcntl_wait:[\"int pcntl_wait(int &status)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_waitpid:[\"int pcntl_waitpid(int pid, int &status, int options)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_wexitstatus:[\"int pcntl_wexitstatus(int status)\",\"Returns the status code of a child's exit\"],pcntl_wifexited:[\"bool pcntl_wifexited(int status)\",\"Returns true if the child status code represents a successful exit\"],pcntl_wifsignaled:[\"bool pcntl_wifsignaled(int status)\",\"Returns true if the child status code represents a process that was terminated due to a signal\"],pcntl_wifstopped:[\"bool pcntl_wifstopped(int status)\",\"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"],pcntl_wstopsig:[\"int pcntl_wstopsig(int status)\",\"Returns the number of the signal that caused the process to stop who's status code is passed\"],pcntl_wtermsig:[\"int pcntl_wtermsig(int status)\",\"Returns the number of the signal that terminated the process who's status code is passed\"],pdo_drivers:[\"array pdo_drivers()\",\"Return array of available PDO drivers\"],pfsockopen:[\"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open persistent Internet or Unix domain socket connection\"],pg_affected_rows:[\"int pg_affected_rows(resource result)\",\"Returns the number of affected tuples\"],pg_cancel_query:[\"bool pg_cancel_query(resource connection)\",\"Cancel request\"],pg_client_encoding:[\"string pg_client_encoding([resource connection])\",\"Get the current client encoding\"],pg_close:[\"bool pg_close([resource connection])\",\"Close a PostgreSQL connection\"],pg_connect:[\"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a PostgreSQL connection\"],pg_connection_busy:[\"bool pg_connection_busy(resource connection)\",\"Get connection is busy or not\"],pg_connection_reset:[\"bool pg_connection_reset(resource connection)\",\"Reset connection (reconnect)\"],pg_connection_status:[\"int pg_connection_status(resource connnection)\",\"Get connection status\"],pg_convert:[\"array pg_convert(resource db, string table, array values[, int options])\",\"Check and convert values for PostgreSQL SQL statement\"],pg_copy_from:[\"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\"Copy table from array\"],pg_copy_to:[\"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\"Copy table to array\"],pg_dbname:[\"string pg_dbname([resource connection])\",\"Get the database name\"],pg_delete:[\"mixed pg_delete(resource db, string table, array ids[, int options])\",\"Delete records has ids (id=>value)\"],pg_end_copy:[\"bool pg_end_copy([resource connection])\",\"Sync with backend. Completes the Copy command\"],pg_escape_bytea:[\"string pg_escape_bytea([resource connection,] string data)\",\"Escape binary for bytea type\"],pg_escape_string:[\"string pg_escape_string([resource connection,] string data)\",\"Escape string for text/char type\"],pg_execute:[\"resource pg_execute([resource connection,] string stmtname, array params)\",\"Execute a prepared query\"],pg_fetch_all:[\"array pg_fetch_all(resource result)\",\"Fetch all rows into array\"],pg_fetch_all_columns:[\"array pg_fetch_all_columns(resource result [, int column_number])\",\"Fetch all rows into array\"],pg_fetch_array:[\"array pg_fetch_array(resource result [, int row [, int result_type]])\",\"Fetch a row as an array\"],pg_fetch_assoc:[\"array pg_fetch_assoc(resource result [, int row])\",\"Fetch a row as an assoc array\"],pg_fetch_object:[\"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\"Fetch a row as an object\"],pg_fetch_result:[\"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\"Returns values from a result identifier\"],pg_fetch_row:[\"array pg_fetch_row(resource result [, int row [, int result_type]])\",\"Get a row as an enumerated array\"],pg_field_is_null:[\"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\"Test if a field is NULL\"],pg_field_name:[\"string pg_field_name(resource result, int field_number)\",\"Returns the name of the field\"],pg_field_num:[\"int pg_field_num(resource result, string field_name)\",\"Returns the field number of the named field\"],pg_field_prtlen:[\"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\"Returns the printed length\"],pg_field_size:[\"int pg_field_size(resource result, int field_number)\",\"Returns the internal size of the field\"],pg_field_table:[\"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\"Returns the name of the table field belongs to, or table's oid if oid_only is true\"],pg_field_type:[\"string pg_field_type(resource result, int field_number)\",\"Returns the type name for the given field\"],pg_field_type_oid:[\"string pg_field_type_oid(resource result, int field_number)\",\"Returns the type oid for the given field\"],pg_free_result:[\"bool pg_free_result(resource result)\",\"Free result memory\"],pg_get_notify:[\"array pg_get_notify([resource connection[, result_type]])\",\"Get asynchronous notification\"],pg_get_pid:[\"int pg_get_pid([resource connection)\",\"Get backend(server) pid\"],pg_get_result:[\"resource pg_get_result(resource connection)\",\"Get asynchronous query result\"],pg_host:[\"string pg_host([resource connection])\",\"Returns the host name associated with the connection\"],pg_insert:[\"mixed pg_insert(resource db, string table, array values[, int options])\",\"Insert values (filed=>value) to table\"],pg_last_error:[\"string pg_last_error([resource connection])\",\"Get the error message string\"],pg_last_notice:[\"string pg_last_notice(resource connection)\",\"Returns the last notice set by the backend\"],pg_last_oid:[\"string pg_last_oid(resource result)\",\"Returns the last object identifier\"],pg_lo_close:[\"bool pg_lo_close(resource large_object)\",\"Close a large object\"],pg_lo_create:[\"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\"Create a large object\"],pg_lo_export:[\"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\"Export large object direct to filesystem\"],pg_lo_import:[\"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\"Import large object direct from filesystem\"],pg_lo_open:[\"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\"Open a large object and return fd\"],pg_lo_read:[\"string pg_lo_read(resource large_object [, int len])\",\"Read a large object\"],pg_lo_read_all:[\"int pg_lo_read_all(resource large_object)\",\"Read a large object and send straight to browser\"],pg_lo_seek:[\"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\"Seeks position of large object\"],pg_lo_tell:[\"int pg_lo_tell(resource large_object)\",\"Returns current position of large object\"],pg_lo_unlink:[\"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\"Delete a large object\"],pg_lo_write:[\"int pg_lo_write(resource large_object, string buf [, int len])\",\"Write a large object\"],pg_meta_data:[\"array pg_meta_data(resource db, string table)\",\"Get meta_data\"],pg_num_fields:[\"int pg_num_fields(resource result)\",\"Return the number of fields in the result\"],pg_num_rows:[\"int pg_num_rows(resource result)\",\"Return the number of rows in the result\"],pg_options:[\"string pg_options([resource connection])\",\"Get the options associated with the connection\"],pg_parameter_status:[\"string|false pg_parameter_status([resource connection,] string param_name)\",\"Returns the value of a server parameter\"],pg_pconnect:[\"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a persistent PostgreSQL connection\"],pg_ping:[\"bool pg_ping([resource connection])\",\"Ping database. If connection is bad, try to reconnect.\"],pg_port:[\"int pg_port([resource connection])\",\"Return the port number associated with the connection\"],pg_prepare:[\"resource pg_prepare([resource connection,] string stmtname, string query)\",\"Prepare a query for future execution\"],pg_put_line:[\"bool pg_put_line([resource connection,] string query)\",\"Send null-terminated string to backend server\"],pg_query:[\"resource pg_query([resource connection,] string query)\",\"Execute a query\"],pg_query_params:[\"resource pg_query_params([resource connection,] string query, array params)\",\"Execute a query\"],pg_result_error:[\"string pg_result_error(resource result)\",\"Get error message associated with result\"],pg_result_error_field:[\"string pg_result_error_field(resource result, int fieldcode)\",\"Get error message field associated with result\"],pg_result_seek:[\"bool pg_result_seek(resource result, int offset)\",\"Set internal row offset\"],pg_result_status:[\"mixed pg_result_status(resource result[, long result_type])\",\"Get status of query result\"],pg_select:[\"mixed pg_select(resource db, string table, array ids[, int options])\",\"Select records that has ids (id=>value)\"],pg_send_execute:[\"bool pg_send_execute(resource connection, string stmtname, array params)\",\"Executes prevriously prepared stmtname asynchronously\"],pg_send_prepare:[\"bool pg_send_prepare(resource connection, string stmtname, string query)\",\"Asynchronously prepare a query for future execution\"],pg_send_query:[\"bool pg_send_query(resource connection, string query)\",\"Send asynchronous query\"],pg_send_query_params:[\"bool pg_send_query_params(resource connection, string query, array params)\",\"Send asynchronous parameterized query\"],pg_set_client_encoding:[\"int pg_set_client_encoding([resource connection,] string encoding)\",\"Set client encoding\"],pg_set_error_verbosity:[\"int pg_set_error_verbosity([resource connection,] int verbosity)\",\"Set error verbosity\"],pg_trace:[\"bool pg_trace(string filename [, string mode [, resource connection]])\",\"Enable tracing a PostgreSQL connection\"],pg_transaction_status:[\"int pg_transaction_status(resource connnection)\",\"Get transaction status\"],pg_tty:[\"string pg_tty([resource connection])\",\"Return the tty name associated with the connection\"],pg_unescape_bytea:[\"string pg_unescape_bytea(string data)\",\"Unescape binary for bytea type\"],pg_untrace:[\"bool pg_untrace([resource connection])\",\"Disable tracing of a PostgreSQL connection\"],pg_update:[\"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\"Update table using values (field=>value) and ids (id=>value)\"],pg_version:[\"array pg_version([resource connection])\",\"Returns an array with client, protocol and server version (when available)\"],php_egg_logo_guid:[\"string php_egg_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_ini_loaded_file:[\"string php_ini_loaded_file(void)\",\"Return the actual loaded ini filename\"],php_ini_scanned_files:[\"string php_ini_scanned_files(void)\",\"Return comma-separated string of .ini files parsed from the additional ini dir\"],php_logo_guid:[\"string php_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_real_logo_guid:[\"string php_real_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_sapi_name:[\"string php_sapi_name(void)\",\"Return the current SAPI module name\"],php_snmpv3:[\"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"],php_strip_whitespace:[\"string php_strip_whitespace(string file_name)\",\"Return source with stripped comments and whitespace\"],php_uname:[\"string php_uname(void)\",\"Return information about the system PHP was built on\"],phpcredits:[\"void phpcredits([int flag])\",\"Prints the list of people who've contributed to the PHP project\"],phpinfo:[\"void phpinfo([int what])\",\"Output a page of useful information about PHP and the current request\"],phpversion:[\"string phpversion([string extension])\",\"Return the current PHP version\"],pi:[\"float pi(void)\",\"Returns an approximation of pi\"],png2wbmp:[\"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert PNG image to WBMP image\"],popen:[\"resource popen(string command, string mode)\",\"Execute a command and open either a read or a write pipe to it\"],posix_access:[\"bool posix_access(string file [, int mode])\",\"Determine accessibility of a file (POSIX.1 5.6.3)\"],posix_ctermid:[\"string posix_ctermid(void)\",\"Generate terminal path name (POSIX.1, 4.7.1)\"],posix_get_last_error:[\"int posix_get_last_error(void)\",\"Retrieve the error number set by the last posix function which failed.\"],posix_getcwd:[\"string posix_getcwd(void)\",\"Get working directory pathname (POSIX.1, 5.2.2)\"],posix_getegid:[\"int posix_getegid(void)\",\"Get the current effective group id (POSIX.1, 4.2.1)\"],posix_geteuid:[\"int posix_geteuid(void)\",\"Get the current effective user id (POSIX.1, 4.2.1)\"],posix_getgid:[\"int posix_getgid(void)\",\"Get the current group id (POSIX.1, 4.2.1)\"],posix_getgrgid:[\"array posix_getgrgid(long gid)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgrnam:[\"array posix_getgrnam(string groupname)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgroups:[\"array posix_getgroups(void)\",\"Get supplementary group id's (POSIX.1, 4.2.3)\"],posix_getlogin:[\"string posix_getlogin(void)\",\"Get user name (POSIX.1, 4.2.4)\"],posix_getpgid:[\"int posix_getpgid(void)\",\"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"],posix_getpgrp:[\"int posix_getpgrp(void)\",\"Get current process group id (POSIX.1, 4.3.1)\"],posix_getpid:[\"int posix_getpid(void)\",\"Get the current process id (POSIX.1, 4.1.1)\"],posix_getppid:[\"int posix_getppid(void)\",\"Get the parent process id (POSIX.1, 4.1.1)\"],posix_getpwnam:[\"array posix_getpwnam(string groupname)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getpwuid:[\"array posix_getpwuid(long uid)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getrlimit:[\"array posix_getrlimit(void)\",\"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"],posix_getsid:[\"int posix_getsid(void)\",\"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"],posix_getuid:[\"int posix_getuid(void)\",\"Get the current user id (POSIX.1, 4.2.1)\"],posix_initgroups:[\"bool posix_initgroups(string name, int base_group_id)\",\"Calculate the group access list for the user specified in name.\"],posix_isatty:[\"bool posix_isatty(int fd)\",\"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"],posix_kill:[\"bool posix_kill(int pid, int sig)\",\"Send a signal to a process (POSIX.1, 3.3.2)\"],posix_mkfifo:[\"bool posix_mkfifo(string pathname, int mode)\",\"Make a FIFO special file (POSIX.1, 5.4.2)\"],posix_mknod:[\"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\"Make a special or ordinary file (POSIX.1)\"],posix_setegid:[\"bool posix_setegid(long uid)\",\"Set effective group id\"],posix_seteuid:[\"bool posix_seteuid(long uid)\",\"Set effective user id\"],posix_setgid:[\"bool posix_setgid(int uid)\",\"Set group id (POSIX.1, 4.2.2)\"],posix_setpgid:[\"bool posix_setpgid(int pid, int pgid)\",\"Set process group id for job control (POSIX.1, 4.3.3)\"],posix_setsid:[\"int posix_setsid(void)\",\"Create session and set process group id (POSIX.1, 4.3.2)\"],posix_setuid:[\"bool posix_setuid(long uid)\",\"Set user id (POSIX.1, 4.2.2)\"],posix_strerror:[\"string posix_strerror(int errno)\",\"Retrieve the system error message associated with the given errno.\"],posix_times:[\"array posix_times(void)\",\"Get process times (POSIX.1, 4.5.2)\"],posix_ttyname:[\"string posix_ttyname(int fd)\",\"Determine terminal device name (POSIX.1, 4.7.2)\"],posix_uname:[\"array posix_uname(void)\",\"Get system name (POSIX.1, 4.4.1)\"],pow:[\"number pow(number base, number exponent)\",\"Returns base raised to the power of exponent. Returns integer result when possible\"],preg_filter:[\"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement and only return matches.\"],preg_grep:[\"array preg_grep(string regex, array input [, int flags])\",\"Searches array and returns entries which match regex\"],preg_last_error:[\"int preg_last_error()\",\"Returns the error code of the last regexp execution.\"],preg_match:[\"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\"Perform a Perl-style regular expression match\"],preg_match_all:[\"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\"Perform a Perl-style global regular expression match\"],preg_quote:[\"string preg_quote(string str [, string delim_char])\",\"Quote regular expression characters plus an optional character\"],preg_replace:[\"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement.\"],preg_replace_callback:[\"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement using replacement callback.\"],preg_split:[\"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\"Split string into an array using a perl-style regular expression as a delimiter\"],prev:[\"mixed prev(array array_arg)\",\"Move array argument's internal pointer to the previous element and return it\"],print:[\"int print(string arg)\",\"Output a string\"],print_r:[\"mixed print_r(mixed var [, bool return])\",\"Prints out or returns information about the specified variable\"],printf:[\"int printf(string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string\"],proc_close:[\"int proc_close(resource process)\",\"close a process opened by proc_open\"],proc_get_status:[\"array proc_get_status(resource process)\",\"get information about a process opened by proc_open\"],proc_nice:[\"bool proc_nice(int priority)\",\"Change the priority of the current process\"],proc_open:[\"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\"Run a process with more control over it's file descriptors\"],proc_terminate:[\"bool proc_terminate(resource process [, long signal])\",\"kill a process opened by proc_open\"],property_exists:[\"bool property_exists(mixed object_or_class, string property_name)\",\"Checks if the object or class has a property\"],pspell_add_to_personal:[\"bool pspell_add_to_personal(int pspell, string word)\",\"Adds a word to a personal list\"],pspell_add_to_session:[\"bool pspell_add_to_session(int pspell, string word)\",\"Adds a word to the current session\"],pspell_check:[\"bool pspell_check(int pspell, string word)\",\"Returns true if word is valid\"],pspell_clear_session:[\"bool pspell_clear_session(int pspell)\",\"Clears the current session\"],pspell_config_create:[\"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\"Create a new config to be used later to create a manager\"],pspell_config_data_dir:[\"bool pspell_config_data_dir(int conf, string directory)\",\"location of language data files\"],pspell_config_dict_dir:[\"bool pspell_config_dict_dir(int conf, string directory)\",\"location of the main word list\"],pspell_config_ignore:[\"bool pspell_config_ignore(int conf, int ignore)\",\"Ignore words <= n chars\"],pspell_config_mode:[\"bool pspell_config_mode(int conf, long mode)\",\"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"],pspell_config_personal:[\"bool pspell_config_personal(int conf, string personal)\",\"Use a personal dictionary for this config\"],pspell_config_repl:[\"bool pspell_config_repl(int conf, string repl)\",\"Use a personal dictionary with replacement pairs for this config\"],pspell_config_runtogether:[\"bool pspell_config_runtogether(int conf, bool runtogether)\",\"Consider run-together words as valid components\"],pspell_config_save_repl:[\"bool pspell_config_save_repl(int conf, bool save)\",\"Save replacement pairs when personal list is saved for this config\"],pspell_new:[\"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary\"],pspell_new_config:[\"int pspell_new_config(int config)\",\"Load a dictionary based on the given config\"],pspell_new_personal:[\"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary with a personal wordlist\"],pspell_save_wordlist:[\"bool pspell_save_wordlist(int pspell)\",\"Saves the current (personal) wordlist\"],pspell_store_replacement:[\"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\"Notify the dictionary of a user-selected replacement\"],pspell_suggest:[\"array pspell_suggest(int pspell, string word)\",\"Returns array of suggestions\"],putenv:[\"bool putenv(string setting)\",\"Set the value of an environment variable\"],quoted_printable_decode:[\"string quoted_printable_decode(string str)\",\"Convert a quoted-printable string to an 8 bit string\"],quoted_printable_encode:[\"string quoted_printable_encode(string str) */\",'PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \"s\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}'],quotemeta:[\"string quotemeta(string str)\",\"Quotes meta characters\"],rad2deg:[\"float rad2deg(float number)\",\"Converts the radian number to the equivalent number in degrees\"],rand:[\"int rand([int min, int max])\",\"Returns a random number\"],range:[\"array range(mixed low, mixed high[, int step])\",\"Create an array containing the range of integers or characters from low to high (inclusive)\"],rawurldecode:[\"string rawurldecode(string str)\",\"Decodes URL-encodes string\"],rawurlencode:[\"string rawurlencode(string str)\",\"URL-encodes string\"],readdir:[\"string readdir([resource dir_handle])\",\"Read directory entry from dir_handle\"],readfile:[\"int readfile(string filename [, bool use_include_path[, resource context]])\",\"Output a file or a URL\"],readgzfile:[\"int readgzfile(string filename [, int use_include_path])\",\"Output a .gz-file\"],readline:[\"string readline([string prompt])\",\"Reads a line\"],readline_add_history:[\"bool readline_add_history(string prompt)\",\"Adds a line to the history\"],readline_callback_handler_install:[\"void readline_callback_handler_install(string prompt, mixed callback)\",\"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"],readline_callback_handler_remove:[\"bool readline_callback_handler_remove()\",\"Removes a previously installed callback handler and restores terminal settings\"],readline_callback_read_char:[\"void readline_callback_read_char()\",\"Informs the readline callback interface that a character is ready for input\"],readline_clear_history:[\"bool readline_clear_history(void)\",\"Clears the history\"],readline_completion_function:[\"bool readline_completion_function(string funcname)\",\"Readline completion function?\"],readline_info:[\"mixed readline_info([string varname [, string newvalue]])\",\"Gets/sets various internal readline variables.\"],readline_list_history:[\"array readline_list_history(void)\",\"Lists the history\"],readline_on_new_line:[\"void readline_on_new_line(void)\",\"Inform readline that the cursor has moved to a new line\"],readline_read_history:[\"bool readline_read_history([string filename])\",\"Reads the history\"],readline_redisplay:[\"void readline_redisplay(void)\",\"Ask readline to redraw the display\"],readline_write_history:[\"bool readline_write_history([string filename])\",\"Writes the history\"],readlink:[\"string readlink(string filename)\",\"Return the target of a symbolic link\"],realpath:[\"string realpath(string path)\",\"Return the resolved path\"],realpath_cache_get:[\"bool realpath_cache_get()\",\"Get current size of realpath cache\"],realpath_cache_size:[\"bool realpath_cache_size()\",\"Get current size of realpath cache\"],recode_file:[\"bool recode_file(string request, resource input, resource output)\",\"Recode file input into file output according to request\"],recode_string:[\"string recode_string(string request, string str)\",\"Recode string str according to request string\"],register_shutdown_function:[\"void register_shutdown_function(string function_name)\",\"Register a user-level function to be called on request termination\"],register_tick_function:[\"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\"Registers a tick callback function\"],rename:[\"bool rename(string old_name, string new_name[, resource context])\",\"Rename a file\"],require:[\"bool require(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],require_once:[\"bool require_once(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],reset:[\"mixed reset(array array_arg)\",\"Set array argument's internal pointer to the first element and return it\"],restore_error_handler:[\"void restore_error_handler(void)\",\"Restores the previously defined error handler function\"],restore_exception_handler:[\"void restore_exception_handler(void)\",\"Restores the previously defined exception handler function\"],restore_include_path:[\"void restore_include_path()\",\"Restore the value of the include_path configuration option\"],rewind:[\"bool rewind(resource fp)\",\"Rewind the position of a file pointer\"],rewinddir:[\"void rewinddir([resource dir_handle])\",\"Rewind dir_handle back to the start\"],rmdir:[\"bool rmdir(string dirname[, resource context])\",\"Remove a directory\"],round:[\"float round(float number [, int precision [, int mode]])\",\"Returns the number rounded to specified precision\"],rsort:[\"bool rsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order\"],rtrim:[\"string rtrim(string str [, string character_mask])\",\"Removes trailing whitespace\"],scandir:[\"array scandir(string dir [, int sorting_order [, resource context]])\",\"List files & directories inside the specified path\"],sem_acquire:[\"bool sem_acquire(resource id)\",\"Acquires the semaphore with the given id, blocking if necessary\"],sem_get:[\"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"],sem_release:[\"bool sem_release(resource id)\",\"Releases the semaphore with the given id\"],sem_remove:[\"bool sem_remove(resource id)\",\"Removes semaphore from Unix systems\"],serialize:[\"string serialize(mixed variable)\",\"Returns a string representation of variable (which can later be unserialized)\"],session_cache_expire:[\"int session_cache_expire([int new_cache_expire])\",\"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"],session_cache_limiter:[\"string session_cache_limiter([string new_cache_limiter])\",\"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"],session_decode:[\"bool session_decode(string data)\",\"Deserializes data and reinitializes the variables\"],session_destroy:[\"bool session_destroy(void)\",\"Destroy the current session and all data associated with it\"],session_encode:[\"string session_encode(void)\",\"Serializes the current setup and returns the serialized representation\"],session_get_cookie_params:[\"array session_get_cookie_params(void)\",\"Return the session cookie parameters\"],session_id:[\"string session_id([string newid])\",\"Return the current session id. If newid is given, the session id is replaced with newid\"],session_is_registered:[\"bool session_is_registered(string varname)\",\"Checks if a variable is registered in session\"],session_module_name:[\"string session_module_name([string newname])\",\"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"],session_name:[\"string session_name([string newname])\",\"Return the current session name. If newname is given, the session name is replaced with newname\"],session_regenerate_id:[\"bool session_regenerate_id([bool delete_old_session])\",\"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"],session_register:[\"bool session_register(mixed var_names [, mixed ...])\",\"Adds varname(s) to the list of variables which are freezed at the session end\"],session_save_path:[\"string session_save_path([string newname])\",\"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"],session_set_cookie_params:[\"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\"Set session cookie parameters\"],session_set_save_handler:[\"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\"Sets user-level functions\"],session_start:[\"bool session_start(void)\",\"Begin session - reinitializes freezed variables, registers browsers etc\"],session_unregister:[\"bool session_unregister(string varname)\",\"Removes varname from the list of variables which are freezed at the session end\"],session_unset:[\"void session_unset(void)\",\"Unset all registered variables\"],session_write_close:[\"void session_write_close(void)\",\"Write session data and end session\"],set_error_handler:[\"string set_error_handler(string error_handler [, int error_types])\",\"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"],set_exception_handler:[\"string set_exception_handler(callable exception_handler)\",\"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"],set_include_path:[\"string set_include_path(string new_include_path)\",\"Sets the include_path configuration option\"],set_magic_quotes_runtime:[\"bool set_magic_quotes_runtime(int new_setting)\",\"Set the current active configuration setting of magic_quotes_runtime and return previous\"],set_time_limit:[\"bool set_time_limit(int seconds)\",\"Sets the maximum time a script can run\"],setcookie:[\"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie\"],setlocale:[\"string setlocale(mixed category, string locale [, string ...])\",\"Set locale information\"],setrawcookie:[\"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie with no url encoding of the value\"],settype:[\"bool settype(mixed var, string type)\",\"Set the type of the variable\"],sha1:[\"string sha1(string str [, bool raw_output])\",\"Calculate the sha1 hash of a string\"],sha1_file:[\"string sha1_file(string filename [, bool raw_output])\",\"Calculate the sha1 hash of given filename\"],shell_exec:[\"string shell_exec(string cmd)\",\"Execute command via shell and return complete output as string\"],shm_attach:[\"int shm_attach(int key [, int memsize [, int perm]])\",\"Creates or open a shared memory segment\"],shm_detach:[\"bool shm_detach(resource shm_identifier)\",\"Disconnects from shared memory segment\"],shm_get_var:[\"mixed shm_get_var(resource id, int variable_key)\",\"Returns a variable from shared memory\"],shm_has_var:[\"bool shm_has_var(resource id, int variable_key)\",\"Checks whether a specific entry exists\"],shm_put_var:[\"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\"Inserts or updates a variable in shared memory\"],shm_remove:[\"bool shm_remove(resource shm_identifier)\",\"Removes shared memory from Unix systems\"],shm_remove_var:[\"bool shm_remove_var(resource id, int variable_key)\",\"Removes variable from shared memory\"],shmop_close:[\"void shmop_close (int shmid)\",\"closes a shared memory segment\"],shmop_delete:[\"bool shmop_delete (int shmid)\",\"mark segment for deletion\"],shmop_open:[\"int shmop_open (int key, string flags, int mode, int size)\",\"gets and attaches a shared memory segment\"],shmop_read:[\"string shmop_read (int shmid, int start, int count)\",\"reads from a shm segment\"],shmop_size:[\"int shmop_size (int shmid)\",\"returns the shm size\"],shmop_write:[\"int shmop_write (int shmid, string data, int offset)\",\"writes to a shared memory segment\"],shuffle:[\"bool shuffle(array array_arg)\",\"Randomly shuffle the contents of an array\"],similar_text:[\"int similar_text(string str1, string str2 [, float percent])\",\"Calculates the similarity between two strings\"],simplexml_import_dom:[\"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\"Get a simplexml_element object from dom to allow for processing\"],simplexml_load_file:[\"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a filename and return a simplexml_element object to allow for processing\"],simplexml_load_string:[\"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a string and return a simplexml_element object to allow for processing\"],sin:[\"float sin(float number)\",\"Returns the sine of the number in radians\"],sinh:[\"float sinh(float number)\",\"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"],sleep:[\"void sleep(int seconds)\",\"Delay for a given number of seconds\"],smfi_addheader:[\"bool smfi_addheader(string headerf, string headerv)\",\"Adds a header to the current message.\"],smfi_addrcpt:[\"bool smfi_addrcpt(string rcpt)\",\"Add a recipient to the message envelope.\"],smfi_chgheader:[\"bool smfi_chgheader(string headerf, string headerv)\",\"Changes a header's value for the current message.\"],smfi_delrcpt:[\"bool smfi_delrcpt(string rcpt)\",\"Removes the named recipient from the current message's envelope.\"],smfi_getsymval:[\"string smfi_getsymval(string macro)\",\"Returns the value of the given macro or NULL if the macro is not defined.\"],smfi_replacebody:[\"bool smfi_replacebody(string body)\",\"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"],smfi_setflags:[\"void smfi_setflags(long flags)\",\"Sets the flags describing the actions the filter may take.\"],smfi_setreply:[\"bool smfi_setreply(string rcode, string xcode, string message)\",\"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"],smfi_settimeout:[\"void smfi_settimeout(long timeout)\",\"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"],snmp2_get:[\"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_getnext:[\"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_real_walk:[\"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmp2_set:[\"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmp2_walk:[\"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],snmp3_get:[\"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_getnext:[\"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_real_walk:[\"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_set:[\"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_walk:[\"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp_get_quick_print:[\"bool snmp_get_quick_print(void)\",\"Return the current status of quick_print\"],snmp_get_valueretrieval:[\"int snmp_get_valueretrieval()\",\"Return the method how the SNMP values will be returned\"],snmp_read_mib:[\"int snmp_read_mib(string filename)\",\"Reads and parses a MIB file into the active MIB tree.\"],snmp_set_enum_print:[\"void snmp_set_enum_print(int enum_print)\",\"Return all values that are enums with their enum value instead of the raw integer\"],snmp_set_oid_output_format:[\"void snmp_set_oid_output_format(int oid_format)\",\"Set the OID output format.\"],snmp_set_quick_print:[\"void snmp_set_quick_print(int quick_print)\",\"Return all objects including their respective object id withing the specified one\"],snmp_set_valueretrieval:[\"void snmp_set_valueretrieval(int method)\",\"Specify the method how the SNMP values will be returned\"],snmpget:[\"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmpgetnext:[\"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmprealwalk:[\"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmpset:[\"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmpwalk:[\"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],socket_accept:[\"resource socket_accept(resource socket)\",\"Accepts a connection on the listening socket fd\"],socket_bind:[\"bool socket_bind(resource socket, string addr [, int port])\",\"Binds an open socket to a listening port, port is only specified in AF_INET family.\"],socket_clear_error:[\"void socket_clear_error([resource socket])\",\"Clears the error on the socket or the last error code.\"],socket_close:[\"void socket_close(resource socket)\",\"Closes a file descriptor\"],socket_connect:[\"bool socket_connect(resource socket, string addr [, int port])\",\"Opens a connection to addr:port on the socket specified by socket\"],socket_create:[\"resource socket_create(int domain, int type, int protocol)\",\"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"],socket_create_listen:[\"resource socket_create_listen(int port[, int backlog])\",\"Opens a socket on port to accept connections\"],socket_create_pair:[\"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\"Creates a pair of indistinguishable sockets and stores them in fds.\"],socket_get_option:[\"mixed socket_get_option(resource socket, int level, int optname)\",\"Gets socket options for the socket\"],socket_getpeername:[\"bool socket_getpeername(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_getsockname:[\"bool socket_getsockname(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_last_error:[\"int socket_last_error([resource socket])\",\"Returns the last socket error (either the last used or the provided socket resource)\"],socket_listen:[\"bool socket_listen(resource socket[, int backlog])\",\"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"],socket_read:[\"string socket_read(resource socket, int length [, int type])\",\"Reads a maximum of length bytes from socket\"],socket_recv:[\"int socket_recv(resource socket, string &buf, int len, int flags)\",\"Receives data from a connected socket\"],socket_recvfrom:[\"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\"Receives data from a socket, connected or not\"],socket_select:[\"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"],socket_send:[\"int socket_send(resource socket, string buf, int len, int flags)\",\"Sends data to a connected socket\"],socket_sendto:[\"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\"Sends a message to a socket, whether it is connected or not\"],socket_set_block:[\"bool socket_set_block(resource socket)\",\"Sets blocking mode on a socket resource\"],socket_set_nonblock:[\"bool socket_set_nonblock(resource socket)\",\"Sets nonblocking mode on a socket resource\"],socket_set_option:[\"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\"Sets socket options for the socket\"],socket_shutdown:[\"bool socket_shutdown(resource socket[, int how])\",\"Shuts down a socket for receiving, sending, or both.\"],socket_strerror:[\"string socket_strerror(int errno)\",\"Returns a string describing an error\"],socket_write:[\"int socket_write(resource socket, string buf[, int length])\",\"Writes the buffer to the socket resource, length is optional\"],solid_fetch_prev:[\"bool solid_fetch_prev(resource result_id)\",\"\"],sort:[\"bool sort(array &array_arg [, int sort_flags])\",\"Sort an array\"],soundex:[\"string soundex(string str)\",\"Calculate the soundex key of a string\"],spl_autoload:[\"void spl_autoload(string class_name [, string file_extensions])\",\"Default implementation for __autoload()\"],spl_autoload_call:[\"void spl_autoload_call(string class_name)\",\"Try all registerd autoload function to load the requested class\"],spl_autoload_extensions:[\"string spl_autoload_extensions([string file_extensions])\",\"Register and return default file extensions for spl_autoload\"],spl_autoload_functions:[\"false|array spl_autoload_functions()\",\"Return all registered __autoload() functionns\"],spl_autoload_register:['bool spl_autoload_register([mixed autoload_function = \"spl_autoload\" [, throw = true [, prepend]]])',\"Register given function as __autoload() implementation\"],spl_autoload_unregister:[\"bool spl_autoload_unregister(mixed autoload_function)\",\"Unregister given function as __autoload() implementation\"],spl_classes:[\"array spl_classes()\",\"Return an array containing the names of all clsses and interfaces defined in SPL\"],spl_object_hash:[\"string spl_object_hash(object obj)\",\"Return hash id for given object\"],split:[\"array split(string pattern, string string [, int limit])\",\"Split string into array by regular expression\"],spliti:[\"array spliti(string pattern, string string [, int limit])\",\"Split string into array by regular expression case-insensitive\"],sprintf:[\"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\"Return a formatted string\"],sql_regcase:[\"string sql_regcase(string string)\",\"Make regular expression for case insensitive match\"],sqlite_array_query:[\"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\"Executes a query against a given database and returns an array of arrays.\"],sqlite_busy_timeout:[\"void sqlite_busy_timeout(resource db, int ms)\",\"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"],sqlite_changes:[\"int sqlite_changes(resource db)\",\"Returns the number of rows that were changed by the most recent SQL statement.\"],sqlite_close:[\"void sqlite_close(resource db)\",\"Closes an open sqlite database.\"],sqlite_column:[\"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\"Fetches a column from the current row of a result set.\"],sqlite_create_aggregate:[\"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\"Registers an aggregate function for queries.\"],sqlite_create_function:[\"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",'Registers a \"regular\" function for queries.'],sqlite_current:[\"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the current row from a result set as an array.\"],sqlite_error_string:[\"string sqlite_error_string(int error_code)\",\"Returns the textual description of an error code.\"],sqlite_escape_string:[\"string sqlite_escape_string(string item)\",\"Escapes a string for use as a query parameter.\"],sqlite_exec:[\"boolean sqlite_exec(string query, resource db[, string &error_message])\",\"Executes a result-less query against a given database\"],sqlite_factory:[\"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"],sqlite_fetch_all:[\"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\"Fetches all rows from a result set as an array of arrays.\"],sqlite_fetch_array:[\"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the next row from a result set as an array.\"],sqlite_fetch_column_types:[\"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\"Return an array of column types from a particular table.\"],sqlite_fetch_object:[\"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\"Fetches the next row from a result set as an object.\"],sqlite_fetch_single:[\"string sqlite_fetch_single(resource result [, bool decode_binary])\",\"Fetches the first column of a result set as a string.\"],sqlite_field_name:[\"string sqlite_field_name(resource result, int field_index)\",\"Returns the name of a particular field of a result set.\"],sqlite_has_prev:[\"bool sqlite_has_prev(resource result)\",\"* Returns whether a previous row is available.\"],sqlite_key:[\"int sqlite_key(resource result)\",\"Return the current row index of a buffered result.\"],sqlite_last_error:[\"int sqlite_last_error(resource db)\",\"Returns the error code of the last error for a database.\"],sqlite_last_insert_rowid:[\"int sqlite_last_insert_rowid(resource db)\",\"Returns the rowid of the most recently inserted row.\"],sqlite_libencoding:[\"string sqlite_libencoding()\",\"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"],sqlite_libversion:[\"string sqlite_libversion()\",\"Returns the version of the linked SQLite library.\"],sqlite_next:[\"bool sqlite_next(resource result)\",\"Seek to the next row number of a result set.\"],sqlite_num_fields:[\"int sqlite_num_fields(resource result)\",\"Returns the number of fields in a result set.\"],sqlite_num_rows:[\"int sqlite_num_rows(resource result)\",\"Returns the number of rows in a buffered result set.\"],sqlite_open:[\"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database. Will create the database if it does not exist.\"],sqlite_popen:[\"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"],sqlite_prev:[\"bool sqlite_prev(resource result)\",\"* Seek to the previous row number of a result set.\"],sqlite_query:[\"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\"Executes a query against a given database and returns a result handle.\"],sqlite_rewind:[\"bool sqlite_rewind(resource result)\",\"Seek to the first row number of a buffered result set.\"],sqlite_seek:[\"bool sqlite_seek(resource result, int row)\",\"Seek to a particular row number of a buffered result set.\"],sqlite_single_query:[\"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\"Executes a query and returns either an array for one single column or the value of the first row.\"],sqlite_udf_decode_binary:[\"string sqlite_udf_decode_binary(string data)\",\"Decode binary encoding on a string parameter passed to an UDF.\"],sqlite_udf_encode_binary:[\"string sqlite_udf_encode_binary(string data)\",\"Apply binary encoding (if required) to a string to return from an UDF.\"],sqlite_unbuffered_query:[\"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\"Executes a query that does not prefetch and buffer all data.\"],sqlite_valid:[\"bool sqlite_valid(resource result)\",\"Returns whether more rows are available.\"],sqrt:[\"float sqrt(float number)\",\"Returns the square root of the number\"],srand:[\"void srand([int seed])\",\"Seeds random number generator\"],sscanf:[\"mixed sscanf(string str, string format [, string ...])\",\"Implements an ANSI C compatible sscanf\"],stat:[\"array stat(string filename)\",\"Give information about a file\"],str_getcsv:[\"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\"Parse a CSV string into an array\"],str_ireplace:[\"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace / case-insensitive\"],str_pad:[\"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\"Returns input string padded on the left or right to specified length with pad_string\"],str_repeat:[\"string str_repeat(string input, int mult)\",\"Returns the input string repeat mult times\"],str_replace:[\"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace\"],str_rot13:[\"string str_rot13(string str)\",\"Perform the rot13 transform on a string\"],str_shuffle:[\"void str_shuffle(string str)\",\"Shuffles string. One permutation of all possible is created\"],str_split:[\"array str_split(string str [, int split_length])\",\"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"],str_word_count:[\"mixed str_word_count(string str, [int format [, string charlist]])\",'Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, \\'word\\' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \"\\'\" and \"-\" characters.'],strcasecmp:[\"int strcasecmp(string str1, string str2)\",\"Binary safe case-insensitive string comparison\"],strchr:[\"string strchr(string haystack, string needle)\",\"An alias for strstr\"],strcmp:[\"int strcmp(string str1, string str2)\",\"Binary safe string comparison\"],strcoll:[\"int strcoll(string str1, string str2)\",\"Compares two strings using the current locale\"],strcspn:[\"int strcspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"],stream_bucket_append:[\"void stream_bucket_append(resource brigade, resource bucket)\",\"Append bucket to brigade\"],stream_bucket_make_writeable:[\"object stream_bucket_make_writeable(resource brigade)\",\"Return a bucket object from the brigade for operating on\"],stream_bucket_new:[\"resource stream_bucket_new(resource stream, string buffer)\",\"Create a new bucket for use on the current stream\"],stream_bucket_prepend:[\"void stream_bucket_prepend(resource brigade, resource bucket)\",\"Prepend bucket to brigade\"],stream_context_create:[\"resource stream_context_create([array options[, array params]])\",\"Create a file context and optionally set parameters\"],stream_context_get_default:[\"resource stream_context_get_default([array options])\",\"Get a handle on the default file/stream context and optionally set parameters\"],stream_context_get_options:[\"array stream_context_get_options(resource context|resource stream)\",\"Retrieve options for a stream/wrapper/context\"],stream_context_get_params:[\"array stream_context_get_params(resource context|resource stream)\",\"Get parameters of a file context\"],stream_context_set_default:[\"resource stream_context_set_default(array options)\",\"Set default file/stream context, returns the context as a resource\"],stream_context_set_option:[\"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\"Set an option for a wrapper\"],stream_context_set_params:[\"bool stream_context_set_params(resource context|resource stream, array options)\",\"Set parameters for a file context\"],stream_copy_to_stream:[\"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\"Reads up to maxlen bytes from source stream and writes them to dest stream.\"],stream_filter_append:[\"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Append a filter to a stream\"],stream_filter_prepend:[\"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Prepend a filter to a stream\"],stream_filter_register:[\"bool stream_filter_register(string filtername, string classname)\",\"Registers a custom filter handler class\"],stream_filter_remove:[\"bool stream_filter_remove(resource stream_filter)\",\"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"],stream_get_contents:[\"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"],stream_get_filters:[\"array stream_get_filters(void)\",\"Returns a list of registered filters\"],stream_get_line:[\"string stream_get_line(resource stream, int maxlen [, string ending])\",\"Read up to maxlen bytes from a stream or until the ending string is found\"],stream_get_meta_data:[\"array stream_get_meta_data(resource fp)\",\"Retrieves header/meta data from streams/file pointers\"],stream_get_transports:[\"array stream_get_transports()\",\"Retrieves list of registered socket transports\"],stream_get_wrappers:[\"array stream_get_wrappers()\",\"Retrieves list of registered stream wrappers\"],stream_is_local:[\"bool stream_is_local(resource stream|string url)\",\"\"],stream_resolve_include_path:[\"string stream_resolve_include_path(string filename)\",\"Determine what file will be opened by calls to fopen() with a relative path\"],stream_select:[\"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"],stream_set_blocking:[\"bool stream_set_blocking(resource socket, int mode)\",\"Set blocking/non-blocking mode on a socket or stream\"],stream_set_timeout:[\"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\"Set timeout on stream read to seconds + microseonds\"],stream_set_write_buffer:[\"int stream_set_write_buffer(resource fp, int buffer)\",\"Set file write buffer\"],stream_socket_accept:[\"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\"Accept a client connection from a server socket\"],stream_socket_client:[\"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\"Open a client connection to a remote address\"],stream_socket_enable_crypto:[\"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\"Enable or disable a specific kind of crypto on the stream\"],stream_socket_get_name:[\"string stream_socket_get_name(resource stream, bool want_peer)\",\"Returns either the locally bound or remote name for a socket stream\"],stream_socket_pair:[\"array stream_socket_pair(int domain, int type, int protocol)\",\"Creates a pair of connected, indistinguishable socket streams\"],stream_socket_recvfrom:[\"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\"Receives data from a socket stream\"],stream_socket_sendto:[\"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"],stream_socket_server:[\"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\"Create a server socket bound to localaddress\"],stream_socket_shutdown:[\"int stream_socket_shutdown(resource stream, int how)\",\"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"],stream_supports_lock:[\"bool stream_supports_lock(resource stream)\",\"Tells whether the stream supports locking through flock().\"],stream_wrapper_register:[\"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\"Registers a custom URL protocol handler class\"],stream_wrapper_restore:[\"bool stream_wrapper_restore(string protocol)\",\"Restore the original protocol handler, overriding if necessary\"],stream_wrapper_unregister:[\"bool stream_wrapper_unregister(string protocol)\",\"Unregister a wrapper for the life of the current request.\"],strftime:[\"string strftime(string format [, int timestamp])\",\"Format a local time/date according to locale settings\"],strip_tags:[\"string strip_tags(string str [, string allowable_tags])\",\"Strips HTML and PHP tags from a string\"],stripcslashes:[\"string stripcslashes(string str)\",\"Strips backslashes from a string. Uses C-style conventions\"],stripos:[\"int stripos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another, case insensitive\"],stripslashes:[\"string stripslashes(string str)\",\"Strips backslashes from a string\"],stristr:[\"string stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another, case insensitive\"],strlen:[\"int strlen(string str)\",\"Get string length\"],strnatcasecmp:[\"int strnatcasecmp(string s1, string s2)\",\"Returns the result of case-insensitive string comparison using 'natural' algorithm\"],strnatcmp:[\"int strnatcmp(string s1, string s2)\",\"Returns the result of string comparison using 'natural' algorithm\"],strncasecmp:[\"int strncasecmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strncmp:[\"int strncmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strpbrk:[\"array strpbrk(string haystack, string char_list)\",\"Search a string for any of a set of characters\"],strpos:[\"int strpos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another\"],strptime:[\"string strptime(string timestamp, string format)\",\"Parse a time/date generated with strftime()\"],strrchr:[\"string strrchr(string haystack, string needle)\",\"Finds the last occurrence of a character in a string within another\"],strrev:[\"string strrev(string str)\",\"Reverse a string\"],strripos:[\"int strripos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strrpos:[\"int strrpos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strspn:[\"int strspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"],strstr:[\"string strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],strtok:[\"string strtok([string str,] string token)\",\"Tokenize a string\"],strtolower:[\"string strtolower(string str)\",\"Makes a string lowercase\"],strtotime:[\"int strtotime(string time [, int now ])\",\"Convert string representation of date and time to a timestamp\"],strtoupper:[\"string strtoupper(string str)\",\"Makes a string uppercase\"],strtr:[\"string strtr(string str, string from[, string to])\",\"Translates characters in str using given translation tables\"],strval:[\"string strval(mixed var)\",\"Get the string value of a variable\"],substr:[\"string substr(string str, int start [, int length])\",\"Returns part of a string\"],substr_compare:[\"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"],substr_count:[\"int substr_count(string haystack, string needle [, int offset [, int length]])\",\"Returns the number of times a substring occurs in the string\"],substr_replace:[\"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\"Replaces part of a string with another string\"],sybase_affected_rows:[\"int sybase_affected_rows([resource link_id])\",\"Get number of affected rows in last query\"],sybase_close:[\"bool sybase_close([resource link_id])\",\"Close Sybase connection\"],sybase_connect:[\"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\"Open Sybase server connection\"],sybase_data_seek:[\"bool sybase_data_seek(resource result, int offset)\",\"Move internal row pointer\"],sybase_deadlock_retry_count:[\"void sybase_deadlock_retry_count(int retry_count)\",\"Sets deadlock retry count\"],sybase_fetch_array:[\"array sybase_fetch_array(resource result)\",\"Fetch row as array\"],sybase_fetch_assoc:[\"array sybase_fetch_assoc(resource result)\",\"Fetch row as array without numberic indices\"],sybase_fetch_field:[\"object sybase_fetch_field(resource result [, int offset])\",\"Get field information\"],sybase_fetch_object:[\"object sybase_fetch_object(resource result [, mixed object])\",\"Fetch row as object\"],sybase_fetch_row:[\"array sybase_fetch_row(resource result)\",\"Get row as enumerated array\"],sybase_field_seek:[\"bool sybase_field_seek(resource result, int offset)\",\"Set field offset\"],sybase_free_result:[\"bool sybase_free_result(resource result)\",\"Free result memory\"],sybase_get_last_message:[\"string sybase_get_last_message(void)\",\"Returns the last message from server (over min_message_severity)\"],sybase_min_client_severity:[\"void sybase_min_client_severity(int severity)\",\"Sets minimum client severity\"],sybase_min_server_severity:[\"void sybase_min_server_severity(int severity)\",\"Sets minimum server severity\"],sybase_num_fields:[\"int sybase_num_fields(resource result)\",\"Get number of fields in result\"],sybase_num_rows:[\"int sybase_num_rows(resource result)\",\"Get number of rows in result\"],sybase_pconnect:[\"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\"Open persistent Sybase connection\"],sybase_query:[\"int sybase_query(string query [, resource link_id])\",\"Send Sybase query\"],sybase_result:[\"string sybase_result(resource result, int row, mixed field)\",\"Get result data\"],sybase_select_db:[\"bool sybase_select_db(string database [, resource link_id])\",\"Select Sybase database\"],sybase_set_message_handler:[\"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"],sybase_unbuffered_query:[\"int sybase_unbuffered_query(string query [, resource link_id])\",\"Send Sybase query\"],symlink:[\"int symlink(string target, string link)\",\"Create a symbolic link\"],sys_get_temp_dir:[\"string sys_get_temp_dir()\",\"Returns directory path used for temporary files\"],sys_getloadavg:[\"array sys_getloadavg()\",\"\"],syslog:[\"bool syslog(int priority, string message)\",\"Generate a system log message\"],system:[\"int system(string command [, int &return_value])\",\"Execute an external program and display output\"],tan:[\"float tan(float number)\",\"Returns the tangent of the number in radians\"],tanh:[\"float tanh(float number)\",\"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"],tempnam:[\"string tempnam(string dir, string prefix)\",\"Create a unique filename in a directory\"],textdomain:[\"string textdomain(string domain)\",'Set the textdomain to \"domain\". Returns the current domain'],tidy_access_count:[\"int tidy_access_count()\",\"Returns the Number of Tidy accessibility warnings encountered for specified document.\"],tidy_clean_repair:[\"boolean tidy_clean_repair()\",\"Execute configured cleanup and repair operations on parsed markup\"],tidy_config_count:[\"int tidy_config_count()\",\"Returns the Number of Tidy configuration errors encountered for specified document.\"],tidy_diagnose:[\"boolean tidy_diagnose()\",\"Run configured diagnostics on parsed and repaired markup.\"],tidy_error_count:[\"int tidy_error_count()\",\"Returns the Number of Tidy errors encountered for specified document.\"],tidy_get_body:[\"TidyNode tidy_get_body(resource tidy)\",\"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"],tidy_get_config:[\"array tidy_get_config()\",\"Get current Tidy configuarion\"],tidy_get_error_buffer:[\"string tidy_get_error_buffer([boolean detailed])\",\"Return warnings and errors which occured parsing the specified document\"],tidy_get_head:[\"TidyNode tidy_get_head()\",\"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"],tidy_get_html:[\"TidyNode tidy_get_html()\",\"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"],tidy_get_html_ver:[\"int tidy_get_html_ver()\",\"Get the Detected HTML version for the specified document.\"],tidy_get_opt_doc:[\"string tidy_get_opt_doc(tidy resource, string optname)\",\"Returns the documentation for the given option name\"],tidy_get_output:[\"string tidy_get_output()\",\"Return a string representing the parsed tidy markup\"],tidy_get_release:[\"string tidy_get_release()\",\"Get release date (version) for Tidy library\"],tidy_get_root:[\"TidyNode tidy_get_root()\",\"Returns a TidyNode Object representing the root of the tidy parse tree\"],tidy_get_status:[\"int tidy_get_status()\",\"Get status of specfied document.\"],tidy_getopt:[\"mixed tidy_getopt(string option)\",\"Returns the value of the specified configuration option for the tidy document.\"],tidy_is_xhtml:[\"boolean tidy_is_xhtml()\",\"Indicates if the document is a XHTML document.\"],tidy_is_xml:[\"boolean tidy_is_xml()\",\"Indicates if the document is a generic (non HTML/XHTML) XML document.\"],tidy_parse_file:[\"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\"Parse markup in file or URI\"],tidy_parse_string:[\"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\"Parse a document stored in a string\"],tidy_repair_file:[\"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\"Repair a file using an optionally provided configuration file\"],tidy_repair_string:[\"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\"Repair a string using an optionally provided configuration file\"],tidy_warning_count:[\"int tidy_warning_count()\",\"Returns the Number of Tidy warnings encountered for specified document.\"],time:[\"int time(void)\",\"Return current UNIX timestamp\"],time_nanosleep:[\"mixed time_nanosleep(long seconds, long nanoseconds)\",\"Delay for a number of seconds and nano seconds\"],time_sleep_until:[\"mixed time_sleep_until(float timestamp)\",\"Make the script sleep until the specified time\"],timezone_abbreviations_list:[\"array timezone_abbreviations_list()\",\"Returns associative array containing dst, offset and the timezone name\"],timezone_identifiers_list:[\"array timezone_identifiers_list([long what[, string country]])\",\"Returns numerically index array with all timezone identifiers.\"],timezone_location_get:[\"array timezone_location_get()\",\"Returns location information for a timezone, including country code, latitude/longitude and comments\"],timezone_name_from_abbr:[\"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\"Returns the timezone name from abbrevation\"],timezone_name_get:[\"string timezone_name_get(DateTimeZone object)\",\"Returns the name of the timezone.\"],timezone_offset_get:[\"long timezone_offset_get(DateTimeZone object, DateTime object)\",\"Returns the timezone offset.\"],timezone_open:[\"DateTimeZone timezone_open(string timezone)\",\"Returns new DateTimeZone object\"],timezone_transitions_get:[\"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"],timezone_version_get:[\"array timezone_version_get()\",\"Returns the Olson database version number.\"],tmpfile:[\"resource tmpfile(void)\",\"Create a temporary file that will be deleted automatically after use\"],token_get_all:[\"array token_get_all(string source)\",\"\"],token_name:[\"string token_name(int type)\",\"\"],touch:[\"bool touch(string filename [, int time [, int atime]])\",\"Set modification time of file\"],trigger_error:[\"void trigger_error(string messsage [, int error_type])\",\"Generates a user-level error/warning/notice message\"],trim:[\"string trim(string str [, string character_mask])\",\"Strips whitespace from the beginning and end of a string\"],uasort:[\"bool uasort(array array_arg, string cmp_function)\",\"Sort an array with a user-defined comparison function and maintain index association\"],ucfirst:[\"string ucfirst(string str)\",\"Make a string's first character lowercase\"],ucwords:[\"string ucwords(string str)\",\"Uppercase the first character of every word in a string\"],uksort:[\"bool uksort(array array_arg, string cmp_function)\",\"Sort an array by keys using a user-defined comparison function\"],umask:[\"int umask([int mask])\",\"Return or change the umask\"],uniqid:[\"string uniqid([string prefix [, bool more_entropy]])\",\"Generates a unique ID\"],unixtojd:[\"int unixtojd([int timestamp])\",\"Convert UNIX timestamp to Julian Day\"],unlink:[\"bool unlink(string filename[, context context])\",\"Delete a file\"],unpack:[\"array unpack(string format, string input)\",\"Unpack binary string into named array elements according to format argument\"],unregister_tick_function:[\"void unregister_tick_function(string function_name)\",\"Unregisters a tick callback function\"],unserialize:[\"mixed unserialize(string variable_representation)\",\"Takes a string representation of variable and recreates it\"],unset:[\"void unset (mixed var [, mixed var])\",\"Unset a given variable\"],urldecode:[\"string urldecode(string str)\",\"Decodes URL-encoded string\"],urlencode:[\"string urlencode(string str)\",\"URL-encodes string\"],usleep:[\"void usleep(int micro_seconds)\",\"Delay for a given number of micro seconds\"],usort:[\"bool usort(array array_arg, string cmp_function)\",\"Sort an array by values using a user-defined comparison function\"],utf8_decode:[\"string utf8_decode(string data)\",\"Converts a UTF-8 encoded string to ISO-8859-1\"],utf8_encode:[\"string utf8_encode(string data)\",\"Encodes an ISO-8859-1 string to UTF-8\"],var_dump:[\"void var_dump(mixed var)\",\"Dumps a string representation of variable to output\"],var_export:[\"mixed var_export(mixed var [, bool return])\",\"Outputs or returns a string representation of a variable\"],variant_abs:[\"mixed variant_abs(mixed left)\",\"Returns the absolute value of a variant\"],variant_add:[\"mixed variant_add(mixed left, mixed right)\",'\"Adds\" two variant values together and returns the result'],variant_and:[\"mixed variant_and(mixed left, mixed right)\",\"performs a bitwise AND operation between two variants and returns the result\"],variant_cast:[\"object variant_cast(object variant, int type)\",\"Convert a variant into a new variant object of another type\"],variant_cat:[\"mixed variant_cat(mixed left, mixed right)\",\"concatenates two variant values together and returns the result\"],variant_cmp:[\"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\"Compares two variants\"],variant_date_from_timestamp:[\"object variant_date_from_timestamp(int timestamp)\",\"Returns a variant date representation of a unix timestamp\"],variant_date_to_timestamp:[\"int variant_date_to_timestamp(object variant)\",\"Converts a variant date/time value to unix timestamp\"],variant_div:[\"mixed variant_div(mixed left, mixed right)\",\"Returns the result from dividing two variants\"],variant_eqv:[\"mixed variant_eqv(mixed left, mixed right)\",\"Performs a bitwise equivalence on two variants\"],variant_fix:[\"mixed variant_fix(mixed left)\",\"Returns the integer part ? of a variant\"],variant_get_type:[\"int variant_get_type(object variant)\",\"Returns the VT_XXX type code for a variant\"],variant_idiv:[\"mixed variant_idiv(mixed left, mixed right)\",\"Converts variants to integers and then returns the result from dividing them\"],variant_imp:[\"mixed variant_imp(mixed left, mixed right)\",\"Performs a bitwise implication on two variants\"],variant_int:[\"mixed variant_int(mixed left)\",\"Returns the integer portion of a variant\"],variant_mod:[\"mixed variant_mod(mixed left, mixed right)\",\"Divides two variants and returns only the remainder\"],variant_mul:[\"mixed variant_mul(mixed left, mixed right)\",\"multiplies the values of the two variants and returns the result\"],variant_neg:[\"mixed variant_neg(mixed left)\",\"Performs logical negation on a variant\"],variant_not:[\"mixed variant_not(mixed left)\",\"Performs bitwise not negation on a variant\"],variant_or:[\"mixed variant_or(mixed left, mixed right)\",\"Performs a logical disjunction on two variants\"],variant_pow:[\"mixed variant_pow(mixed left, mixed right)\",\"Returns the result of performing the power function with two variants\"],variant_round:[\"mixed variant_round(mixed left, int decimals)\",\"Rounds a variant to the specified number of decimal places\"],variant_set:[\"void variant_set(object variant, mixed value)\",\"Assigns a new value for a variant object\"],variant_set_type:[\"void variant_set_type(object variant, int type)\",'Convert a variant into another type.  Variant is modified \"in-place\"'],variant_sub:[\"mixed variant_sub(mixed left, mixed right)\",\"subtracts the value of the right variant from the left variant value and returns the result\"],variant_xor:[\"mixed variant_xor(mixed left, mixed right)\",\"Performs a logical exclusion on two variants\"],version_compare:[\"int version_compare(string ver1, string ver2 [, string oper])\",'Compares two \"PHP-standardized\" version number strings'],vfprintf:[\"int vfprintf(resource stream, string format, array args)\",\"Output a formatted string into a stream\"],virtual:[\"bool virtual(string filename)\",\"Perform an Apache sub-request\"],vprintf:[\"int vprintf(string format, array args)\",\"Output a formatted string\"],vsprintf:[\"string vsprintf(string format, array args)\",\"Return a formatted string\"],wddx_add_vars:[\"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\"Serializes given variables and adds them to packet given by packet_id\"],wddx_deserialize:[\"mixed wddx_deserialize(mixed packet)\",\"Deserializes given packet and returns a PHP value\"],wddx_packet_end:[\"string wddx_packet_end(resource packet_id)\",\"Ends specified WDDX packet and returns the string containing the packet\"],wddx_packet_start:[\"resource wddx_packet_start([string comment])\",\"Starts a WDDX packet with optional comment and returns the packet id\"],wddx_serialize_value:[\"string wddx_serialize_value(mixed var [, string comment])\",\"Creates a new packet and serializes the given value\"],wddx_serialize_vars:[\"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\"Creates a new packet and serializes given variables into a struct\"],wordwrap:[\"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\"Wraps buffer to selected number of characters using string break char\"],xml_error_string:[\"string xml_error_string(int code)\",\"Get XML parser error string\"],xml_get_current_byte_index:[\"int xml_get_current_byte_index(resource parser)\",\"Get current byte index for an XML parser\"],xml_get_current_column_number:[\"int xml_get_current_column_number(resource parser)\",\"Get current column number for an XML parser\"],xml_get_current_line_number:[\"int xml_get_current_line_number(resource parser)\",\"Get current line number for an XML parser\"],xml_get_error_code:[\"int xml_get_error_code(resource parser)\",\"Get XML parser error code\"],xml_parse:[\"int xml_parse(resource parser, string data [, int isFinal])\",\"Start parsing an XML document\"],xml_parse_into_struct:[\"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\"Parsing a XML document\"],xml_parser_create:[\"resource xml_parser_create([string encoding])\",\"Create an XML parser\"],xml_parser_create_ns:[\"resource xml_parser_create_ns([string encoding [, string sep]])\",\"Create an XML parser\"],xml_parser_free:[\"int xml_parser_free(resource parser)\",\"Free an XML parser\"],xml_parser_get_option:[\"int xml_parser_get_option(resource parser, int option)\",\"Get options from an XML parser\"],xml_parser_set_option:[\"int xml_parser_set_option(resource parser, int option, mixed value)\",\"Set options in an XML parser\"],xml_set_character_data_handler:[\"int xml_set_character_data_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_default_handler:[\"int xml_set_default_handler(resource parser, string hdl)\",\"Set up default handler\"],xml_set_element_handler:[\"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\"Set up start and end element handlers\"],xml_set_end_namespace_decl_handler:[\"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_external_entity_ref_handler:[\"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\"Set up external entity reference handler\"],xml_set_notation_decl_handler:[\"int xml_set_notation_decl_handler(resource parser, string hdl)\",\"Set up notation declaration handler\"],xml_set_object:[\"int xml_set_object(resource parser, object &obj)\",\"Set up object which should be used for callbacks\"],xml_set_processing_instruction_handler:[\"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\"Set up processing instruction (PI) handler\"],xml_set_start_namespace_decl_handler:[\"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_unparsed_entity_decl_handler:[\"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\"Set up unparsed entity declaration handler\"],xmlrpc_decode:[\"array xmlrpc_decode(string xml [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_decode_request:[\"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_encode:[\"string xmlrpc_encode(mixed value)\",\"Generates XML for a PHP value\"],xmlrpc_encode_request:[\"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\"Generates XML for a method request\"],xmlrpc_get_type:[\"string xmlrpc_get_type(mixed value)\",\"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"],xmlrpc_is_fault:[\"bool xmlrpc_is_fault(array)\",\"Determines if an array value represents an XMLRPC fault.\"],xmlrpc_parse_method_descriptions:[\"array xmlrpc_parse_method_descriptions(string xml)\",\"Decodes XML into a list of method descriptions\"],xmlrpc_server_add_introspection_data:[\"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\"Adds introspection documentation\"],xmlrpc_server_call_method:[\"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\"Parses XML requests and call methods\"],xmlrpc_server_create:[\"resource xmlrpc_server_create(void)\",\"Creates an xmlrpc server\"],xmlrpc_server_destroy:[\"int xmlrpc_server_destroy(resource server)\",\"Destroys server resources\"],xmlrpc_server_register_introspection_callback:[\"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\"Register a PHP function to generate documentation\"],xmlrpc_server_register_method:[\"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\"Register a PHP function to handle method matching method_name\"],xmlrpc_set_type:[\"bool xmlrpc_set_type(string value, string type)\",\"Sets xmlrpc type, base64 or datetime, for a PHP string value\"],xmlwriter_end_attribute:[\"bool xmlwriter_end_attribute(resource xmlwriter)\",\"End attribute - returns FALSE on error\"],xmlwriter_end_cdata:[\"bool xmlwriter_end_cdata(resource xmlwriter)\",\"End current CDATA - returns FALSE on error\"],xmlwriter_end_comment:[\"bool xmlwriter_end_comment(resource xmlwriter)\",\"Create end comment - returns FALSE on error\"],xmlwriter_end_document:[\"bool xmlwriter_end_document(resource xmlwriter)\",\"End current document - returns FALSE on error\"],xmlwriter_end_dtd:[\"bool xmlwriter_end_dtd(resource xmlwriter)\",\"End current DTD - returns FALSE on error\"],xmlwriter_end_dtd_attlist:[\"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\"End current DTD AttList - returns FALSE on error\"],xmlwriter_end_dtd_element:[\"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\"End current DTD element - returns FALSE on error\"],xmlwriter_end_dtd_entity:[\"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\"End current DTD Entity - returns FALSE on error\"],xmlwriter_end_element:[\"bool xmlwriter_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_end_pi:[\"bool xmlwriter_end_pi(resource xmlwriter)\",\"End current PI - returns FALSE on error\"],xmlwriter_flush:[\"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\"Output current buffer\"],xmlwriter_full_end_element:[\"bool xmlwriter_full_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_open_memory:[\"resource xmlwriter_open_memory()\",\"Create new xmlwriter using memory for string output\"],xmlwriter_open_uri:[\"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\"Create new xmlwriter using source uri for output\"],xmlwriter_output_memory:[\"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\"Output current buffer as string\"],xmlwriter_set_indent:[\"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\"Toggle indentation on/off - returns FALSE on error\"],xmlwriter_set_indent_string:[\"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\"Set string used for indenting - returns FALSE on error\"],xmlwriter_start_attribute:[\"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\"Create start attribute - returns FALSE on error\"],xmlwriter_start_attribute_ns:[\"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced attribute - returns FALSE on error\"],xmlwriter_start_cdata:[\"bool xmlwriter_start_cdata(resource xmlwriter)\",\"Create start CDATA tag - returns FALSE on error\"],xmlwriter_start_comment:[\"bool xmlwriter_start_comment(resource xmlwriter)\",\"Create start comment - returns FALSE on error\"],xmlwriter_start_document:[\"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\"Create document tag - returns FALSE on error\"],xmlwriter_start_dtd:[\"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\"Create start DTD tag - returns FALSE on error\"],xmlwriter_start_dtd_attlist:[\"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\"Create start DTD AttList - returns FALSE on error\"],xmlwriter_start_dtd_element:[\"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\"Create start DTD element - returns FALSE on error\"],xmlwriter_start_dtd_entity:[\"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\"Create start DTD Entity - returns FALSE on error\"],xmlwriter_start_element:[\"bool xmlwriter_start_element(resource xmlwriter, string name)\",\"Create start element tag - returns FALSE on error\"],xmlwriter_start_element_ns:[\"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced element tag - returns FALSE on error\"],xmlwriter_start_pi:[\"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\"Create start PI tag - returns FALSE on error\"],xmlwriter_text:[\"bool xmlwriter_text(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xmlwriter_write_attribute:[\"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\"Write full attribute - returns FALSE on error\"],xmlwriter_write_attribute_ns:[\"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\"Write full namespaced attribute - returns FALSE on error\"],xmlwriter_write_cdata:[\"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\"Write full CDATA tag - returns FALSE on error\"],xmlwriter_write_comment:[\"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\"Write full comment tag - returns FALSE on error\"],xmlwriter_write_dtd:[\"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\"Write full DTD tag - returns FALSE on error\"],xmlwriter_write_dtd_attlist:[\"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\"Write full DTD AttList tag - returns FALSE on error\"],xmlwriter_write_dtd_element:[\"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\"Write full DTD element tag - returns FALSE on error\"],xmlwriter_write_dtd_entity:[\"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\"Write full DTD Entity tag - returns FALSE on error\"],xmlwriter_write_element:[\"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\"Write full element tag - returns FALSE on error\"],xmlwriter_write_element_ns:[\"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\"Write full namesapced element tag - returns FALSE on error\"],xmlwriter_write_pi:[\"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\"Write full PI tag - returns FALSE on error\"],xmlwriter_write_raw:[\"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xsl_xsltprocessor_get_parameter:[\"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_has_exslt_support:[\"bool xsl_xsltprocessor_has_exslt_support();\",\"\"],xsl_xsltprocessor_import_stylesheet:[\"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_register_php_functions:[\"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\"\"],xsl_xsltprocessor_remove_parameter:[\"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_set_parameter:[\"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\"\"],xsl_xsltprocessor_set_profiling:[\"bool xsl_xsltprocessor_set_profiling(string filename) */\",'PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s!\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling'],xsl_xsltprocessor_transform_to_doc:[\"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_transform_to_uri:[\"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\"\"],xsl_xsltprocessor_transform_to_xml:[\"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\"\"],zend_logo_guid:[\"string zend_logo_guid(void)\",\"Return the special ID used to request the Zend logo in phpinfo screens\"],zend_version:[\"string zend_version(void)\",\"Get the version of the Zend Engine\"],zip_close:[\"void zip_close(resource zip)\",\"Close a Zip archive\"],zip_entry_close:[\"void zip_entry_close(resource zip_ent)\",\"Close a zip entry\"],zip_entry_compressedsize:[\"int zip_entry_compressedsize(resource zip_entry)\",\"Return the compressed size of a ZZip entry\"],zip_entry_compressionmethod:[\"string zip_entry_compressionmethod(resource zip_entry)\",\"Return a string containing the compression method used on a particular entry\"],zip_entry_filesize:[\"int zip_entry_filesize(resource zip_entry)\",\"Return the actual filesize of a ZZip entry\"],zip_entry_name:[\"string zip_entry_name(resource zip_entry)\",\"Return the name given a ZZip entry\"],zip_entry_open:[\"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\"Open a Zip File, pointed by the resource entry\"],zip_entry_read:[\"mixed zip_entry_read(resource zip_entry [, int len])\",\"Read from an open directory entry\"],zip_open:[\"resource zip_open(string filename)\",\"Create new zip using source uri for output\"],zip_read:[\"resource zip_read(resource zip)\",\"Returns the next file in the archive\"],zlib_get_coding_type:[\"string zlib_get_coding_type(void)\",\"Returns the coding type used for output compression\"]},i={$_COOKIE:{type:\"array\"},$_ENV:{type:\"array\"},$_FILES:{type:\"array\"},$_GET:{type:\"array\"},$_POST:{type:\"array\"},$_REQUEST:{type:\"array\"},$_SERVER:{type:\"array\",value:{DOCUMENT_ROOT:1,GATEWAY_INTERFACE:1,HTTP_ACCEPT:1,HTTP_ACCEPT_CHARSET:1,HTTP_ACCEPT_ENCODING:1,HTTP_ACCEPT_LANGUAGE:1,HTTP_CONNECTION:1,HTTP_HOST:1,HTTP_REFERER:1,HTTP_USER_AGENT:1,PATH_TRANSLATED:1,PHP_SELF:1,QUERY_STRING:1,REMOTE_ADDR:1,REMOTE_PORT:1,REQUEST_METHOD:1,REQUEST_URI:1,SCRIPT_FILENAME:1,SCRIPT_NAME:1,SERVER_ADMIN:1,SERVER_NAME:1,SERVER_PORT:1,SERVER_PROTOCOL:1,SERVER_SIGNATURE:1,SERVER_SOFTWARE:1}},$_SESSION:{type:\"array\"},$GLOBALS:{type:\"array\"}},o=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(i.type===\"support.php_tag\"&&i.value===\"<?\")return this.getTagCompletions(e,t,n,r);if(i.type===\"identifier\"){if(i.index>0){var o=t.getTokenAt(n.row,i.start);if(o.type===\"support.php_tag\")return this.getTagCompletions(e,t,n,r)}return this.getFunctionCompletions(e,t,n,r)}if(s(i,\"variable\"))return this.getVariableCompletions(e,t,n,r);var u=t.getLine(n.row).substr(0,n.column);return i.type===\"string\"&&/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(u)?this.getArrayKeyCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return[{caption:\"php\",value:\"php\",meta:\"php tag\",score:1e6},{caption:\"=\",value:\"=\",meta:\"php tag\",score:1e6}]},this.getFunctionCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\"($0)\",meta:\"php function\",score:1e6,docHTML:r[e][1]}})},this.getVariableCompletions=function(e,t,n,r){var s=Object.keys(i);return s.map(function(e){return{caption:e,value:e,meta:\"php variable\",score:1e6}})},this.getArrayKeyCompletions=function(e,t,n,r){var s=t.getLine(n.row).substr(0,n.column),o=s.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];if(!i[o])return[];var u=[];return i[o].type===\"array\"&&i[o].value&&(u=Object.keys(i[o].value)),u.map(function(e){return{caption:e,value:e,meta:\"php array key\",score:1e6}})}}).call(o.prototype),t.PhpCompletions=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./php_highlight_rules\").PhpHighlightRules,o=e(\"./php_highlight_rules\").PhpLangHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=e(\"../worker/worker_client\").WorkerClient,l=e(\"./php_completions\").PhpCompletions,c=e(\"./behaviour/cstyle\").CstyleBehaviour,h=e(\"./folding/cstyle\").FoldMode,p=e(\"../unicode\"),d=e(\"./html\").Mode,v=e(\"./javascript\").Mode,m=e(\"./css\").Mode,g=function(e){this.HighlightRules=o,this.$outdent=new u,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new h};r.inherits(g,i),function(){this.tokenRe=new RegExp(\"^[\"+p.wordChars+\"_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+p.wordChars+\"_]|\\\\s])+\",\"g\"),this.lineCommentStart=[\"//\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[:]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o!=\"doc-start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id=\"ace/mode/php-inline\"}.call(g.prototype);var y=function(e){if(e&&e.inline){var t=new g;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}d.call(this),this.HighlightRules=s,this.createModeDelegates({\"js-\":v,\"css-\":m,\"php-\":g}),this.foldingRules.subModes[\"php-\"]=new h};r.inherits(y,d),function(){this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/php_worker\",\"PhpWorker\");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call(\"setOptions\",[{inline:!0}]),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/php\"}.call(y.prototype),t.Mode=y}),ace.define(\"ace/mode/php_laravel_blade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_laravel_blade_highlight_rules\",\"ace/mode/php\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./php_laravel_blade_highlight_rules\").PHPLaravelBladeHighlightRules,s=e(\"./php\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html\").Mode,f=function(){s.call(this),this.HighlightRules=i,this.createModeDelegates({\"js-\":o,\"css-\":u,\"html-\":a})};r.inherits(f,s),function(){this.$id=\"ace/mode/php_laravel_blade\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-pig.js",
    "content": "ace.define(\"ace/mode/pig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.block.pig\",regex:/\\/\\*/,push:[{token:\"comment.block.pig\",regex:/\\*\\//,next:\"pop\"},{defaultToken:\"comment.block.pig\"}]},{token:\"comment.line.double-dash.asciidoc\",regex:/--.*$/},{token:\"keyword.control.pig\",regex:/\\b(?:ASSERT|LOAD|STORE|DUMP|FILTER|DISTINCT|FOREACH|GENERATE|STREAM|JOIN|COGROUP|GROUP|CROSS|ORDER|LIMIT|UNION|SPLIT|DESCRIBE|EXPLAIN|ILLUSTRATE|AS|BY|INTO|USING|LIMIT|PARALLEL|OUTER|INNER|DEFAULT|LEFT|SAMPLE|RANK|CUBE|ALL|KILL|QUIT|MAPREDUCE|ASC|DESC|THROUGH|SHIP|CACHE|DECLARE|CASE|WHEN|THEN|END|IN|PARTITION|FULL|IMPORT|IF|ONSCHEMA|INPUT|OUTPUT)\\b/,caseInsensitive:!0},{token:\"storage.datatypes.pig\",regex:/\\b(?:int|long|float|double|chararray|bytearray|boolean|datetime|biginteger|bigdecimal|tuple|bag|map)\\b/,caseInsensitive:!0},{token:\"support.function.storage.pig\",regex:/\\b(?:PigStorage|BinStorage|BinaryStorage|PigDump|HBaseStorage|JsonLoader|JsonStorage|AvroStorage|TextLoader|PigStreaming|TrevniStorage|AccumuloStorage)\\b/},{token:\"support.function.udf.pig\",regex:/\\b(?:DIFF|TOBAG|TOMAP|TOP|TOTUPLE|RANDOM|FLATTEN|flatten|CUBE|ROLLUP|IsEmpty|ARITY|PluckTuple|SUBTRACT|BagToString)\\b/},{token:\"support.function.udf.math.pig\",regex:/\\b(?:ABS|ACOS|ASIN|ATAN|CBRT|CEIL|COS|COSH|EXP|FLOOR|LOG|LOG10|ROUND|ROUND_TO|SIN|SINH|SQRT|TAN|TANH|AVG|COUNT|COUNT_STAR|MAX|MIN|SUM|COR|COV)\\b/},{token:\"support.function.udf.string.pig\",regex:/\\b(?:CONCAT|INDEXOF|LAST_INDEX_OF|LCFIRST|LOWER|REGEX_EXTRACT|REGEX_EXTRACT_ALL|REPLACE|SIZE|STRSPLIT|SUBSTRING|TOKENIZE|TRIM|UCFIRST|UPPER|LTRIM|RTRIM|ENDSWITH|STARTSWITH|TRIM)\\b/},{token:\"support.function.udf.datetime.pig\",regex:/\\b(?:AddDuration|CurrentTime|DaysBetween|GetDay|GetHour|GetMilliSecond|GetMinute|GetMonth|GetSecond|GetWeek|GetWeekYear|GetYear|HoursBetween|MilliSecondsBetween|MinutesBetween|MonthsBetween|SecondsBetween|SubtractDuration|ToDate|WeeksBetween|YearsBetween|ToMilliSeconds|ToString|ToUnixTime)\\b/},{token:\"support.function.command.pig\",regex:/\\b(?:cat|cd|copyFromLocal|copyToLocal|cp|ls|mkdir|mv|pwd|rm)\\b/},{token:\"variable.pig\",regex:/\\$[a_zA-Z0-9_]+/},{token:\"constant.language.pig\",regex:/\\b(?:NULL|true|false|stdin|stdout|stderr)\\b/,caseInsensitive:!0},{token:\"constant.numeric.pig\",regex:/\\b\\d+(?:\\.\\d+)?\\b/},{token:\"keyword.operator.comparison.pig\",regex:/!=|==|<|>|<=|>=|\\b(?:MATCHES|IS|OR|AND|NOT)\\b/,caseInsensitive:!0},{token:\"keyword.operator.arithmetic.pig\",regex:/\\+|\\-|\\*|\\/|\\%|\\?|:|::|\\.\\.|#/},{token:\"string.quoted.double.pig\",regex:/\"/,push:[{token:\"string.quoted.double.pig\",regex:/\"/,next:\"pop\"},{token:\"constant.character.escape.pig\",regex:/\\\\./},{defaultToken:\"string.quoted.double.pig\"}]},{token:\"string.quoted.single.pig\",regex:/'/,push:[{token:\"string.quoted.single.pig\",regex:/'/,next:\"pop\"},{token:\"constant.character.escape.pig\",regex:/\\\\./},{defaultToken:\"string.quoted.single.pig\"}]},{todo:{token:[\"text\",\"keyword.parameter.pig\",\"text\",\"storage.type.parameter.pig\"],regex:/^(\\s*)(set)(\\s+)(\\S+)/,caseInsensitive:!0,push:[{token:\"text\",regex:/$/,next:\"pop\"},{include:\"$self\"}]}},{token:[\"text\",\"keyword.alias.pig\",\"text\",\"storage.type.alias.pig\"],regex:/(\\s*)(DEFINE|DECLARE|REGISTER)(\\s+)(\\S+)/,caseInsensitive:!0,push:[{token:\"text\",regex:/;?$/,next:\"pop\"}]}]},this.normalizeRules()};s.metaData={fileTypes:[\"pig\"],name:\"Pig\",scopeName:\"source.pig\"},r.inherits(s,i),t.PigHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/pig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pig_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./pig_highlight_rules\").PigHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/pig\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-plain_text.js",
    "content": "ace.define(\"ace/mode/plain_text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./behaviour\").Behaviour,u=function(){this.HighlightRules=s,this.$behaviour=new o};r.inherits(u,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,n){return\"\"},this.$id=\"ace/mode/plain_text\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-powershell.js",
    "content": "ace.define(\"ace/mode/powershell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"begin|break|catch|continue|data|do|dynamicparam|else|elseif|end|exit|filter|finally|for|foreach|from|function|if|in|inlinescript|hidden|parallel|param|process|return|sequence|switch|throw|trap|try|until|while|workflow\",t=\"Get-AppBackgroundTask|Start-AppBackgroundTask|Unregister-AppBackgroundTask|Disable-AppBackgroundTaskDiagnosticLog|Enable-AppBackgroundTaskDiagnosticLog|Set-AppBackgroundTaskResourcePolicy|Get-AppLockerFileInformation|Get-AppLockerPolicy|New-AppLockerPolicy|Set-AppLockerPolicy|Test-AppLockerPolicy|Get-AppxLastError|Get-AppxLog|Add-AppxPackage|Add-AppxVolume|Dismount-AppxVolume|Get-AppxDefaultVolume|Get-AppxPackage|Get-AppxPackageManifest|Get-AppxVolume|Mount-AppxVolume|Move-AppxPackage|Remove-AppxPackage|Remove-AppxVolume|Set-AppxDefaultVolume|Clear-AssignedAccess|Get-AssignedAccess|Set-AssignedAccess|Add-BitLockerKeyProtector|Backup-BitLockerKeyProtector|Clear-BitLockerAutoUnlock|Disable-BitLocker|Disable-BitLockerAutoUnlock|Enable-BitLocker|Enable-BitLockerAutoUnlock|Get-BitLockerVolume|Lock-BitLocker|Remove-BitLockerKeyProtector|Resume-BitLocker|Suspend-BitLocker|Unlock-BitLocker|Add-BitsFile|Complete-BitsTransfer|Get-BitsTransfer|Remove-BitsTransfer|Resume-BitsTransfer|Set-BitsTransfer|Start-BitsTransfer|Suspend-BitsTransfer|Add-BCDataCacheExtension|Clear-BCCache|Disable-BC|Disable-BCDowngrading|Disable-BCServeOnBattery|Enable-BCDistributed|Enable-BCDowngrading|Enable-BCHostedClient|Enable-BCHostedServer|Enable-BCLocal|Enable-BCServeOnBattery|Export-BCCachePackage|Export-BCSecretKey|Get-BCClientConfiguration|Get-BCContentServerConfiguration|Get-BCDataCache|Get-BCDataCacheExtension|Get-BCHashCache|Get-BCHostedCacheServerConfiguration|Get-BCNetworkConfiguration|Get-BCStatus|Import-BCCachePackage|Import-BCSecretKey|Publish-BCFileContent|Publish-BCWebContent|Remove-BCDataCacheExtension|Reset-BC|Set-BCAuthentication|Set-BCCache|Set-BCDataCacheEntryMaxAge|Set-BCMinSMBLatency|Set-BCSecretKey|Export-BinaryMiLog|Get-CimAssociatedInstance|Get-CimClass|Get-CimInstance|Get-CimSession|Import-BinaryMiLog|Invoke-CimMethod|New-CimInstance|New-CimSession|New-CimSessionOption|Register-CimIndicationEvent|Remove-CimInstance|Remove-CimSession|Set-CimInstance|ConvertFrom-CIPolicy|Add-SignerRule|Edit-CIPolicyRule|Get-CIPolicy|Get-CIPolicyInfo|Get-SystemDriver|Merge-CIPolicy|New-CIPolicy|New-CIPolicyRule|Remove-CIPolicyRule|Set-CIPolicyVersion|Set-HVCIOptions|Set-RuleOption|Add-MpPreference|Get-MpComputerStatus|Get-MpPreference|Get-MpThreat|Get-MpThreatCatalog|Get-MpThreatDetection|Remove-MpPreference|Remove-MpThreat|Set-MpPreference|Start-MpScan|Start-MpWDOScan|Update-MpSignature|Disable-DAManualEntryPointSelection|Enable-DAManualEntryPointSelection|Get-DAClientExperienceConfiguration|Get-DAEntryPointTableItem|New-DAEntryPointTableItem|Remove-DAEntryPointTableItem|Rename-DAEntryPointTableItem|Reset-DAClientExperienceConfiguration|Reset-DAEntryPointTableItem|Set-DAClientExperienceConfiguration|Set-DAEntryPointTableItem|Add-ProvisionedAppxPackage|Apply-WindowsUnattend|Get-ProvisionedAppxPackage|Remove-ProvisionedAppxPackage|Add-AppxProvisionedPackage|Add-WindowsCapability|Add-WindowsDriver|Add-WindowsImage|Add-WindowsPackage|Clear-WindowsCorruptMountPoint|Disable-WindowsOptionalFeature|Dismount-WindowsImage|Enable-WindowsOptionalFeature|Expand-WindowsCustomDataImage|Expand-WindowsImage|Export-WindowsDriver|Export-WindowsImage|Get-AppxProvisionedPackage|Get-WIMBootEntry|Get-WindowsCapability|Get-WindowsDriver|Get-WindowsEdition|Get-WindowsImage|Get-WindowsImageContent|Get-WindowsOptionalFeature|Get-WindowsPackage|Mount-WindowsImage|New-WindowsCustomImage|New-WindowsImage|Optimize-WindowsImage|Remove-AppxProvisionedPackage|Remove-WindowsCapability|Remove-WindowsDriver|Remove-WindowsImage|Remove-WindowsPackage|Repair-WindowsImage|Save-WindowsImage|Set-AppXProvisionedDataFile|Set-WindowsEdition|Set-WindowsProductKey|Split-WindowsImage|Update-WIMBootEntry|Use-WindowsUnattend|Add-DnsClientNrptRule|Clear-DnsClientCache|Get-DnsClient|Get-DnsClientCache|Get-DnsClientGlobalSetting|Get-DnsClientNrptGlobal|Get-DnsClientNrptPolicy|Get-DnsClientNrptRule|Get-DnsClientServerAddress|Register-DnsClient|Remove-DnsClientNrptRule|Set-DnsClient|Set-DnsClientGlobalSetting|Set-DnsClientNrptGlobal|Set-DnsClientNrptRule|Set-DnsClientServerAddress|Resolve-DnsName|Add-EtwTraceProvider|Get-AutologgerConfig|Get-EtwTraceProvider|Get-EtwTraceSession|New-AutologgerConfig|New-EtwTraceSession|Remove-AutologgerConfig|Remove-EtwTraceProvider|Remove-EtwTraceSession|Send-EtwTraceSession|Set-AutologgerConfig|Set-EtwTraceProvider|Set-EtwTraceSession|Get-WinAcceptLanguageFromLanguageListOptOut|Get-WinCultureFromLanguageListOptOut|Get-WinDefaultInputMethodOverride|Get-WinHomeLocation|Get-WinLanguageBarOption|Get-WinSystemLocale|Get-WinUILanguageOverride|Get-WinUserLanguageList|New-WinUserLanguageList|Set-Culture|Set-WinAcceptLanguageFromLanguageListOptOut|Set-WinCultureFromLanguageListOptOut|Set-WinDefaultInputMethodOverride|Set-WinHomeLocation|Set-WinLanguageBarOption|Set-WinSystemLocale|Set-WinUILanguageOverride|Set-WinUserLanguageList|Connect-IscsiTarget|Disconnect-IscsiTarget|Get-IscsiConnection|Get-IscsiSession|Get-IscsiTarget|Get-IscsiTargetPortal|New-IscsiTargetPortal|Register-IscsiSession|Remove-IscsiTargetPortal|Set-IscsiChapSecret|Unregister-IscsiSession|Update-IscsiTarget|Update-IscsiTargetPortal|Get-IseSnippet|Import-IseSnippet|New-IseSnippet|Add-KdsRootKey|Clear-KdsCache|Get-KdsConfiguration|Get-KdsRootKey|Set-KdsConfiguration|Test-KdsRootKey|Compress-Archive|Expand-Archive|Export-Counter|Get-Counter|Get-WinEvent|Import-Counter|New-WinEvent|Start-Transcript|Stop-Transcript|Add-Computer|Add-Content|Checkpoint-Computer|Clear-Content|Clear-EventLog|Clear-Item|Clear-ItemProperty|Clear-RecycleBin|Complete-Transaction|Convert-Path|Copy-Item|Copy-ItemProperty|Debug-Process|Disable-ComputerRestore|Enable-ComputerRestore|Get-ChildItem|Get-Clipboard|Get-ComputerRestorePoint|Get-Content|Get-ControlPanelItem|Get-EventLog|Get-HotFix|Get-Item|Get-ItemProperty|Get-ItemPropertyValue|Get-Location|Get-Process|Get-PSDrive|Get-PSProvider|Get-Service|Get-Transaction|Get-WmiObject|Invoke-Item|Invoke-WmiMethod|Join-Path|Limit-EventLog|Move-Item|Move-ItemProperty|New-EventLog|New-Item|New-ItemProperty|New-PSDrive|New-Service|New-WebServiceProxy|Pop-Location|Push-Location|Register-WmiEvent|Remove-Computer|Remove-EventLog|Remove-Item|Remove-ItemProperty|Remove-PSDrive|Remove-WmiObject|Rename-Computer|Rename-Item|Rename-ItemProperty|Reset-ComputerMachinePassword|Resolve-Path|Restart-Computer|Restart-Service|Restore-Computer|Resume-Service|Set-Clipboard|Set-Content|Set-Item|Set-ItemProperty|Set-Location|Set-Service|Set-WmiInstance|Show-ControlPanelItem|Show-EventLog|Split-Path|Start-Process|Start-Service|Start-Transaction|Stop-Computer|Stop-Process|Stop-Service|Suspend-Service|Test-ComputerSecureChannel|Test-Connection|Test-Path|Undo-Transaction|Use-Transaction|Wait-Process|Write-EventLog|Export-ODataEndpointProxy|ConvertFrom-SecureString|ConvertTo-SecureString|Get-Acl|Get-AuthenticodeSignature|Get-CmsMessage|Get-Credential|Get-ExecutionPolicy|Get-PfxCertificate|Protect-CmsMessage|Set-Acl|Set-AuthenticodeSignature|Set-ExecutionPolicy|Unprotect-CmsMessage|ConvertFrom-SddlString|Format-Hex|Get-FileHash|Import-PowerShellDataFile|New-Guid|New-TemporaryFile|Add-Member|Add-Type|Clear-Variable|Compare-Object|ConvertFrom-Csv|ConvertFrom-Json|ConvertFrom-String|ConvertFrom-StringData|Convert-String|ConvertTo-Csv|ConvertTo-Html|ConvertTo-Json|ConvertTo-Xml|Debug-Runspace|Disable-PSBreakpoint|Disable-RunspaceDebug|Enable-PSBreakpoint|Enable-RunspaceDebug|Export-Alias|Export-Clixml|Export-Csv|Export-FormatData|Export-PSSession|Format-Custom|Format-List|Format-Table|Format-Wide|Get-Alias|Get-Culture|Get-Date|Get-Event|Get-EventSubscriber|Get-FormatData|Get-Host|Get-Member|Get-PSBreakpoint|Get-PSCallStack|Get-Random|Get-Runspace|Get-RunspaceDebug|Get-TraceSource|Get-TypeData|Get-UICulture|Get-Unique|Get-Variable|Group-Object|Import-Alias|Import-Clixml|Import-Csv|Import-LocalizedData|Import-PSSession|Invoke-Expression|Invoke-RestMethod|Invoke-WebRequest|Measure-Command|Measure-Object|New-Alias|New-Event|New-Object|New-TimeSpan|New-Variable|Out-File|Out-GridView|Out-Printer|Out-String|Read-Host|Register-EngineEvent|Register-ObjectEvent|Remove-Event|Remove-PSBreakpoint|Remove-TypeData|Remove-Variable|Select-Object|Select-String|Select-Xml|Send-MailMessage|Set-Alias|Set-Date|Set-PSBreakpoint|Set-TraceSource|Set-Variable|Show-Command|Sort-Object|Start-Sleep|Tee-Object|Trace-Command|Unblock-File|Unregister-Event|Update-FormatData|Update-List|Update-TypeData|Wait-Debugger|Wait-Event|Write-Debug|Write-Error|Write-Host|Write-Information|Write-Output|Write-Progress|Write-Verbose|Write-Warning|Connect-WSMan|Disable-WSManCredSSP|Disconnect-WSMan|Enable-WSManCredSSP|Get-WSManCredSSP|Get-WSManInstance|Invoke-WSManAction|New-WSManInstance|New-WSManSessionOption|Remove-WSManInstance|Set-WSManInstance|Set-WSManQuickConfig|Test-WSMan|Debug-MMAppPrelaunch|Disable-MMAgent|Enable-MMAgent|Get-MMAgent|Set-MMAgent|Add-DtcClusterTMMapping|Get-Dtc|Get-DtcAdvancedHostSetting|Get-DtcAdvancedSetting|Get-DtcClusterDefault|Get-DtcClusterTMMapping|Get-DtcDefault|Get-DtcLog|Get-DtcNetworkSetting|Get-DtcTransaction|Get-DtcTransactionsStatistics|Get-DtcTransactionsTraceSession|Get-DtcTransactionsTraceSetting|Install-Dtc|Remove-DtcClusterTMMapping|Reset-DtcLog|Set-DtcAdvancedHostSetting|Set-DtcAdvancedSetting|Set-DtcClusterDefault|Set-DtcClusterTMMapping|Set-DtcDefault|Set-DtcLog|Set-DtcNetworkSetting|Set-DtcTransaction|Set-DtcTransactionsTraceSession|Set-DtcTransactionsTraceSetting|Start-Dtc|Start-DtcTransactionsTraceSession|Stop-Dtc|Stop-DtcTransactionsTraceSession|Test-Dtc|Uninstall-Dtc|Write-DtcTransactionsTraceSession|Complete-DtcDiagnosticTransaction|Join-DtcDiagnosticResourceManager|New-DtcDiagnosticTransaction|Receive-DtcDiagnosticTransaction|Send-DtcDiagnosticTransaction|Start-DtcDiagnosticResourceManager|Stop-DtcDiagnosticResourceManager|Undo-DtcDiagnosticTransaction|Disable-NetAdapter|Disable-NetAdapterBinding|Disable-NetAdapterChecksumOffload|Disable-NetAdapterEncapsulatedPacketTaskOffload|Disable-NetAdapterIPsecOffload|Disable-NetAdapterLso|Disable-NetAdapterPacketDirect|Disable-NetAdapterPowerManagement|Disable-NetAdapterQos|Disable-NetAdapterRdma|Disable-NetAdapterRsc|Disable-NetAdapterRss|Disable-NetAdapterSriov|Disable-NetAdapterVmq|Enable-NetAdapter|Enable-NetAdapterBinding|Enable-NetAdapterChecksumOffload|Enable-NetAdapterEncapsulatedPacketTaskOffload|Enable-NetAdapterIPsecOffload|Enable-NetAdapterLso|Enable-NetAdapterPacketDirect|Enable-NetAdapterPowerManagement|Enable-NetAdapterQos|Enable-NetAdapterRdma|Enable-NetAdapterRsc|Enable-NetAdapterRss|Enable-NetAdapterSriov|Enable-NetAdapterVmq|Get-NetAdapter|Get-NetAdapterAdvancedProperty|Get-NetAdapterBinding|Get-NetAdapterChecksumOffload|Get-NetAdapterEncapsulatedPacketTaskOffload|Get-NetAdapterHardwareInfo|Get-NetAdapterIPsecOffload|Get-NetAdapterLso|Get-NetAdapterPacketDirect|Get-NetAdapterPowerManagement|Get-NetAdapterQos|Get-NetAdapterRdma|Get-NetAdapterRsc|Get-NetAdapterRss|Get-NetAdapterSriov|Get-NetAdapterSriovVf|Get-NetAdapterStatistics|Get-NetAdapterVmq|Get-NetAdapterVmqQueue|Get-NetAdapterVPort|New-NetAdapterAdvancedProperty|Remove-NetAdapterAdvancedProperty|Rename-NetAdapter|Reset-NetAdapterAdvancedProperty|Restart-NetAdapter|Set-NetAdapter|Set-NetAdapterAdvancedProperty|Set-NetAdapterBinding|Set-NetAdapterChecksumOffload|Set-NetAdapterEncapsulatedPacketTaskOffload|Set-NetAdapterIPsecOffload|Set-NetAdapterLso|Set-NetAdapterPacketDirect|Set-NetAdapterPowerManagement|Set-NetAdapterQos|Set-NetAdapterRdma|Set-NetAdapterRsc|Set-NetAdapterRss|Set-NetAdapterSriov|Set-NetAdapterVmq|Get-NetConnectionProfile|Set-NetConnectionProfile|Add-NetEventNetworkAdapter|Add-NetEventPacketCaptureProvider|Add-NetEventProvider|Add-NetEventVmNetworkAdapter|Add-NetEventVmSwitch|Add-NetEventWFPCaptureProvider|Get-NetEventNetworkAdapter|Get-NetEventPacketCaptureProvider|Get-NetEventProvider|Get-NetEventSession|Get-NetEventVmNetworkAdapter|Get-NetEventVmSwitch|Get-NetEventWFPCaptureProvider|New-NetEventSession|Remove-NetEventNetworkAdapter|Remove-NetEventPacketCaptureProvider|Remove-NetEventProvider|Remove-NetEventSession|Remove-NetEventVmNetworkAdapter|Remove-NetEventVmSwitch|Remove-NetEventWFPCaptureProvider|Set-NetEventPacketCaptureProvider|Set-NetEventProvider|Set-NetEventSession|Set-NetEventWFPCaptureProvider|Start-NetEventSession|Stop-NetEventSession|Add-NetLbfoTeamMember|Add-NetLbfoTeamNic|Get-NetLbfoTeam|Get-NetLbfoTeamMember|Get-NetLbfoTeamNic|New-NetLbfoTeam|Remove-NetLbfoTeam|Remove-NetLbfoTeamMember|Remove-NetLbfoTeamNic|Rename-NetLbfoTeam|Set-NetLbfoTeam|Set-NetLbfoTeamMember|Set-NetLbfoTeamNic|Add-NetNatExternalAddress|Add-NetNatStaticMapping|Get-NetNat|Get-NetNatExternalAddress|Get-NetNatGlobal|Get-NetNatSession|Get-NetNatStaticMapping|New-NetNat|Remove-NetNat|Remove-NetNatExternalAddress|Remove-NetNatStaticMapping|Set-NetNat|Set-NetNatGlobal|Get-NetQosPolicy|New-NetQosPolicy|Remove-NetQosPolicy|Set-NetQosPolicy|Copy-NetFirewallRule|Copy-NetIPsecMainModeCryptoSet|Copy-NetIPsecMainModeRule|Copy-NetIPsecPhase1AuthSet|Copy-NetIPsecPhase2AuthSet|Copy-NetIPsecQuickModeCryptoSet|Copy-NetIPsecRule|Disable-NetFirewallRule|Disable-NetIPsecMainModeRule|Disable-NetIPsecRule|Enable-NetFirewallRule|Enable-NetIPsecMainModeRule|Enable-NetIPsecRule|Find-NetIPsecRule|Get-NetFirewallAddressFilter|Get-NetFirewallApplicationFilter|Get-NetFirewallInterfaceFilter|Get-NetFirewallInterfaceTypeFilter|Get-NetFirewallPortFilter|Get-NetFirewallProfile|Get-NetFirewallRule|Get-NetFirewallSecurityFilter|Get-NetFirewallServiceFilter|Get-NetFirewallSetting|Get-NetIPsecDospSetting|Get-NetIPsecMainModeCryptoSet|Get-NetIPsecMainModeRule|Get-NetIPsecMainModeSA|Get-NetIPsecPhase1AuthSet|Get-NetIPsecPhase2AuthSet|Get-NetIPsecQuickModeCryptoSet|Get-NetIPsecQuickModeSA|Get-NetIPsecRule|New-NetFirewallRule|New-NetIPsecDospSetting|New-NetIPsecMainModeCryptoSet|New-NetIPsecMainModeRule|New-NetIPsecPhase1AuthSet|New-NetIPsecPhase2AuthSet|New-NetIPsecQuickModeCryptoSet|New-NetIPsecRule|Open-NetGPO|Remove-NetFirewallRule|Remove-NetIPsecDospSetting|Remove-NetIPsecMainModeCryptoSet|Remove-NetIPsecMainModeRule|Remove-NetIPsecMainModeSA|Remove-NetIPsecPhase1AuthSet|Remove-NetIPsecPhase2AuthSet|Remove-NetIPsecQuickModeCryptoSet|Remove-NetIPsecQuickModeSA|Remove-NetIPsecRule|Rename-NetFirewallRule|Rename-NetIPsecMainModeCryptoSet|Rename-NetIPsecMainModeRule|Rename-NetIPsecPhase1AuthSet|Rename-NetIPsecPhase2AuthSet|Rename-NetIPsecQuickModeCryptoSet|Rename-NetIPsecRule|Save-NetGPO|Set-NetFirewallAddressFilter|Set-NetFirewallApplicationFilter|Set-NetFirewallInterfaceFilter|Set-NetFirewallInterfaceTypeFilter|Set-NetFirewallPortFilter|Set-NetFirewallProfile|Set-NetFirewallRule|Set-NetFirewallSecurityFilter|Set-NetFirewallServiceFilter|Set-NetFirewallSetting|Set-NetIPsecDospSetting|Set-NetIPsecMainModeCryptoSet|Set-NetIPsecMainModeRule|Set-NetIPsecPhase1AuthSet|Set-NetIPsecPhase2AuthSet|Set-NetIPsecQuickModeCryptoSet|Set-NetIPsecRule|Show-NetFirewallRule|Show-NetIPsecRule|Sync-NetIPsecRule|Update-NetIPsecRule|Get-DAPolicyChange|New-NetIPsecAuthProposal|New-NetIPsecMainModeCryptoProposal|New-NetIPsecQuickModeCryptoProposal|Add-NetSwitchTeamMember|Get-NetSwitchTeam|Get-NetSwitchTeamMember|New-NetSwitchTeam|Remove-NetSwitchTeam|Remove-NetSwitchTeamMember|Rename-NetSwitchTeam|Find-NetRoute|Get-NetCompartment|Get-NetIPAddress|Get-NetIPConfiguration|Get-NetIPInterface|Get-NetIPv4Protocol|Get-NetIPv6Protocol|Get-NetNeighbor|Get-NetOffloadGlobalSetting|Get-NetPrefixPolicy|Get-NetRoute|Get-NetTCPConnection|Get-NetTCPSetting|Get-NetTransportFilter|Get-NetUDPEndpoint|Get-NetUDPSetting|New-NetIPAddress|New-NetNeighbor|New-NetRoute|New-NetTransportFilter|Remove-NetIPAddress|Remove-NetNeighbor|Remove-NetRoute|Remove-NetTransportFilter|Set-NetIPAddress|Set-NetIPInterface|Set-NetIPv4Protocol|Set-NetIPv6Protocol|Set-NetNeighbor|Set-NetOffloadGlobalSetting|Set-NetRoute|Set-NetTCPSetting|Set-NetUDPSetting|Test-NetConnection|Get-DAConnectionStatus|Get-NCSIPolicyConfiguration|Reset-NCSIPolicyConfiguration|Set-NCSIPolicyConfiguration|Disable-NetworkSwitchEthernetPort|Disable-NetworkSwitchFeature|Disable-NetworkSwitchVlan|Enable-NetworkSwitchEthernetPort|Enable-NetworkSwitchFeature|Enable-NetworkSwitchVlan|Get-NetworkSwitchEthernetPort|Get-NetworkSwitchFeature|Get-NetworkSwitchGlobalData|Get-NetworkSwitchVlan|New-NetworkSwitchVlan|Remove-NetworkSwitchEthernetPortIPAddress|Remove-NetworkSwitchVlan|Restore-NetworkSwitchConfiguration|Save-NetworkSwitchConfiguration|Set-NetworkSwitchEthernetPortIPAddress|Set-NetworkSwitchPortMode|Set-NetworkSwitchPortProperty|Set-NetworkSwitchVlanProperty|Add-NetIPHttpsCertBinding|Disable-NetDnsTransitionConfiguration|Disable-NetIPHttpsProfile|Disable-NetNatTransitionConfiguration|Enable-NetDnsTransitionConfiguration|Enable-NetIPHttpsProfile|Enable-NetNatTransitionConfiguration|Get-Net6to4Configuration|Get-NetDnsTransitionConfiguration|Get-NetDnsTransitionMonitoring|Get-NetIPHttpsConfiguration|Get-NetIPHttpsState|Get-NetIsatapConfiguration|Get-NetNatTransitionConfiguration|Get-NetNatTransitionMonitoring|Get-NetTeredoConfiguration|Get-NetTeredoState|New-NetIPHttpsConfiguration|New-NetNatTransitionConfiguration|Remove-NetIPHttpsCertBinding|Remove-NetIPHttpsConfiguration|Remove-NetNatTransitionConfiguration|Rename-NetIPHttpsConfiguration|Reset-Net6to4Configuration|Reset-NetDnsTransitionConfiguration|Reset-NetIPHttpsConfiguration|Reset-NetIsatapConfiguration|Reset-NetTeredoConfiguration|Set-Net6to4Configuration|Set-NetDnsTransitionConfiguration|Set-NetIPHttpsConfiguration|Set-NetIsatapConfiguration|Set-NetNatTransitionConfiguration|Set-NetTeredoConfiguration|Find-Package|Find-PackageProvider|Get-Package|Get-PackageProvider|Get-PackageSource|Import-PackageProvider|Install-Package|Install-PackageProvider|Register-PackageSource|Save-Package|Set-PackageSource|Uninstall-Package|Unregister-PackageSource|Clear-PcsvDeviceLog|Get-PcsvDevice|Get-PcsvDeviceLog|Restart-PcsvDevice|Set-PcsvDeviceBootConfiguration|Set-PcsvDeviceNetworkConfiguration|Set-PcsvDeviceUserPassword|Start-PcsvDevice|Stop-PcsvDevice|AfterAll|AfterEach|Assert-MockCalled|Assert-VerifiableMocks|BeforeAll|BeforeEach|Context|Describe|Get-MockDynamicParameters|Get-TestDriveItem|In|InModuleScope|Invoke-Mock|Invoke-Pester|It|Mock|New-Fixture|Set-DynamicParameterVariables|Setup|Should|Add-CertificateEnrollmentPolicyServer|Export-Certificate|Export-PfxCertificate|Get-Certificate|Get-CertificateAutoEnrollmentPolicy|Get-CertificateEnrollmentPolicyServer|Get-CertificateNotificationTask|Get-PfxData|Import-Certificate|Import-PfxCertificate|New-CertificateNotificationTask|New-SelfSignedCertificate|Remove-CertificateEnrollmentPolicyServer|Remove-CertificateNotificationTask|Set-CertificateAutoEnrollmentPolicy|Switch-Certificate|Test-Certificate|Disable-PnpDevice|Enable-PnpDevice|Get-PnpDevice|Get-PnpDeviceProperty|Find-DscResource|Find-Module|Find-Script|Get-InstalledModule|Get-InstalledScript|Get-PSRepository|Install-Module|Install-Script|New-ScriptFileInfo|Publish-Module|Publish-Script|Register-PSRepository|Save-Module|Save-Script|Set-PSRepository|Test-ScriptFileInfo|Uninstall-Module|Uninstall-Script|Unregister-PSRepository|Update-Module|Update-ModuleManifest|Update-Script|Update-ScriptFileInfo|Add-Printer|Add-PrinterDriver|Add-PrinterPort|Get-PrintConfiguration|Get-Printer|Get-PrinterDriver|Get-PrinterPort|Get-PrinterProperty|Get-PrintJob|Read-PrinterNfcTag|Remove-Printer|Remove-PrinterDriver|Remove-PrinterPort|Remove-PrintJob|Rename-Printer|Restart-PrintJob|Resume-PrintJob|Set-PrintConfiguration|Set-Printer|Set-PrinterProperty|Suspend-PrintJob|Write-PrinterNfcTag|Configuration|Disable-DscDebug|Enable-DscDebug|Get-DscConfiguration|Get-DscConfigurationStatus|Get-DscLocalConfigurationManager|Get-DscResource|New-DscChecksum|Remove-DscConfigurationDocument|Restore-DscConfiguration|Stop-DscConfiguration|Invoke-DscResource|Publish-DscConfiguration|Set-DscLocalConfigurationManager|Start-DscConfiguration|Test-DscConfiguration|Update-DscConfiguration|Disable-PSTrace|Disable-PSWSManCombinedTrace|Disable-WSManTrace|Enable-PSTrace|Enable-PSWSManCombinedTrace|Enable-WSManTrace|Get-LogProperties|Set-LogProperties|Start-Trace|Stop-Trace|PSConsoleHostReadline|Get-PSReadlineKeyHandler|Get-PSReadlineOption|Remove-PSReadlineKeyHandler|Set-PSReadlineKeyHandler|Set-PSReadlineOption|Add-JobTrigger|Disable-JobTrigger|Disable-ScheduledJob|Enable-JobTrigger|Enable-ScheduledJob|Get-JobTrigger|Get-ScheduledJob|Get-ScheduledJobOption|New-JobTrigger|New-ScheduledJobOption|Register-ScheduledJob|Remove-JobTrigger|Set-JobTrigger|Set-ScheduledJob|Set-ScheduledJobOption|Unregister-ScheduledJob|New-PSWorkflowSession|New-PSWorkflowExecutionOption|Invoke-AsWorkflow|Disable-ScheduledTask|Enable-ScheduledTask|Export-ScheduledTask|Get-ClusteredScheduledTask|Get-ScheduledTask|Get-ScheduledTaskInfo|New-ScheduledTask|New-ScheduledTaskAction|New-ScheduledTaskPrincipal|New-ScheduledTaskSettingsSet|New-ScheduledTaskTrigger|Register-ClusteredScheduledTask|Register-ScheduledTask|Set-ClusteredScheduledTask|Set-ScheduledTask|Start-ScheduledTask|Stop-ScheduledTask|Unregister-ClusteredScheduledTask|Unregister-ScheduledTask|Confirm-SecureBootUEFI|Format-SecureBootUEFI|Get-SecureBootPolicy|Get-SecureBootUEFI|Set-SecureBootUEFI|Block-SmbShareAccess|Close-SmbOpenFile|Close-SmbSession|Disable-SmbDelegation|Enable-SmbDelegation|Get-SmbBandwidthLimit|Get-SmbClientConfiguration|Get-SmbClientNetworkInterface|Get-SmbConnection|Get-SmbDelegation|Get-SmbMapping|Get-SmbMultichannelConnection|Get-SmbMultichannelConstraint|Get-SmbOpenFile|Get-SmbServerConfiguration|Get-SmbServerNetworkInterface|Get-SmbSession|Get-SmbShare|Get-SmbShareAccess|Grant-SmbShareAccess|New-SmbMapping|New-SmbMultichannelConstraint|New-SmbShare|Remove-SmbBandwidthLimit|Remove-SmbMapping|Remove-SmbMultichannelConstraint|Remove-SmbShare|Revoke-SmbShareAccess|Set-SmbBandwidthLimit|Set-SmbClientConfiguration|Set-SmbPathAcl|Set-SmbServerConfiguration|Set-SmbShare|Unblock-SmbShareAccess|Update-SmbMultichannelConnection|Move-SmbClient|Get-SmbWitnessClient|Move-SmbWitnessClient|Get-StartApps|Export-StartLayout|Import-StartLayout|Disable-PhysicalDiskIndication|Disable-StorageDiagnosticLog|Enable-PhysicalDiskIndication|Enable-StorageDiagnosticLog|Flush-Volume|Get-DiskSNV|Get-PhysicalDiskSNV|Get-StorageEnclosureSNV|Initialize-Volume|Write-FileSystemCache|Add-InitiatorIdToMaskingSet|Add-PartitionAccessPath|Add-PhysicalDisk|Add-TargetPortToMaskingSet|Add-VirtualDiskToMaskingSet|Block-FileShareAccess|Clear-Disk|Clear-FileStorageTier|Clear-StorageDiagnosticInfo|Connect-VirtualDisk|Debug-FileShare|Debug-StorageSubSystem|Debug-Volume|Disable-PhysicalDiskIdentification|Disable-StorageEnclosureIdentification|Disable-StorageHighAvailability|Disconnect-VirtualDisk|Dismount-DiskImage|Enable-PhysicalDiskIdentification|Enable-StorageEnclosureIdentification|Enable-StorageHighAvailability|Format-Volume|Get-DedupProperties|Get-Disk|Get-DiskImage|Get-DiskStorageNodeView|Get-FileIntegrity|Get-FileShare|Get-FileShareAccessControlEntry|Get-FileStorageTier|Get-InitiatorId|Get-InitiatorPort|Get-MaskingSet|Get-OffloadDataTransferSetting|Get-Partition|Get-PartitionSupportedSize|Get-PhysicalDisk|Get-PhysicalDiskStorageNodeView|Get-ResiliencySetting|Get-StorageAdvancedProperty|Get-StorageDiagnosticInfo|Get-StorageEnclosure|Get-StorageEnclosureStorageNodeView|Get-StorageEnclosureVendorData|Get-StorageFaultDomain|Get-StorageFileServer|Get-StorageFirmwareInformation|Get-StorageHealthAction|Get-StorageHealthReport|Get-StorageHealthSetting|Get-StorageJob|Get-StorageNode|Get-StoragePool|Get-StorageProvider|Get-StorageReliabilityCounter|Get-StorageSetting|Get-StorageSubSystem|Get-StorageTier|Get-StorageTierSupportedSize|Get-SupportedClusterSizes|Get-SupportedFileSystems|Get-TargetPort|Get-TargetPortal|Get-VirtualDisk|Get-VirtualDiskSupportedSize|Get-Volume|Get-VolumeCorruptionCount|Get-VolumeScrubPolicy|Grant-FileShareAccess|Hide-VirtualDisk|Initialize-Disk|Mount-DiskImage|New-FileShare|New-MaskingSet|New-Partition|New-StorageFileServer|New-StoragePool|New-StorageSubsystemVirtualDisk|New-StorageTier|New-VirtualDisk|New-VirtualDiskClone|New-VirtualDiskSnapshot|New-Volume|Optimize-StoragePool|Optimize-Volume|Register-StorageSubsystem|Remove-FileShare|Remove-InitiatorId|Remove-InitiatorIdFromMaskingSet|Remove-MaskingSet|Remove-Partition|Remove-PartitionAccessPath|Remove-PhysicalDisk|Remove-StorageFileServer|Remove-StorageHealthSetting|Remove-StoragePool|Remove-StorageTier|Remove-TargetPortFromMaskingSet|Remove-VirtualDisk|Remove-VirtualDiskFromMaskingSet|Rename-MaskingSet|Repair-FileIntegrity|Repair-VirtualDisk|Repair-Volume|Reset-PhysicalDisk|Reset-StorageReliabilityCounter|Resize-Partition|Resize-StorageTier|Resize-VirtualDisk|Revoke-FileShareAccess|Set-Disk|Set-FileIntegrity|Set-FileShare|Set-FileStorageTier|Set-InitiatorPort|Set-Partition|Set-PhysicalDisk|Set-ResiliencySetting|Set-StorageFileServer|Set-StorageHealthSetting|Set-StoragePool|Set-StorageProvider|Set-StorageSetting|Set-StorageSubSystem|Set-StorageTier|Set-VirtualDisk|Set-Volume|Set-VolumeScrubPolicy|Show-VirtualDisk|Start-StorageDiagnosticLog|Stop-StorageDiagnosticLog|Stop-StorageJob|Unblock-FileShareAccess|Unregister-StorageSubsystem|Update-Disk|Update-HostStorageCache|Update-StorageFirmware|Update-StoragePool|Update-StorageProviderCache|Write-VolumeCache|Disable-TlsCipherSuite|Disable-TlsSessionTicketKey|Enable-TlsCipherSuite|Enable-TlsSessionTicketKey|Export-TlsSessionTicketKey|Get-TlsCipherSuite|New-TlsSessionTicketKey|Get-TroubleshootingPack|Invoke-TroubleshootingPack|Clear-Tpm|ConvertTo-TpmOwnerAuth|Disable-TpmAutoProvisioning|Enable-TpmAutoProvisioning|Get-Tpm|Get-TpmEndorsementKeyInfo|Get-TpmSupportedFeature|Import-TpmOwnerAuth|Initialize-Tpm|Set-TpmOwnerAuth|Unblock-Tpm|Add-VpnConnection|Add-VpnConnectionRoute|Add-VpnConnectionTriggerApplication|Add-VpnConnectionTriggerDnsConfiguration|Add-VpnConnectionTriggerTrustedNetwork|Get-VpnConnection|Get-VpnConnectionTrigger|New-EapConfiguration|New-VpnServerAddress|Remove-VpnConnection|Remove-VpnConnectionRoute|Remove-VpnConnectionTriggerApplication|Remove-VpnConnectionTriggerDnsConfiguration|Remove-VpnConnectionTriggerTrustedNetwork|Set-VpnConnection|Set-VpnConnectionIPsecConfiguration|Set-VpnConnectionProxy|Set-VpnConnectionTriggerDnsConfiguration|Set-VpnConnectionTriggerTrustedNetwork|Add-OdbcDsn|Disable-OdbcPerfCounter|Disable-WdacBidTrace|Enable-OdbcPerfCounter|Enable-WdacBidTrace|Get-OdbcDriver|Get-OdbcDsn|Get-OdbcPerfCounter|Get-WdacBidTrace|Remove-OdbcDsn|Set-OdbcDriver|Set-OdbcDsn|Get-WindowsDeveloperLicense|Show-WindowsDeveloperLicenseRegistration|Unregister-WindowsDeveloperLicense|Disable-WindowsErrorReporting|Enable-WindowsErrorReporting|Get-WindowsErrorReporting|Get-WindowsSearchSetting|Set-WindowsSearchSetting|Get-WindowsUpdateLog\",n=this.createKeywordMapper({\"support.function\":t,keyword:e},\"identifier\"),r=\"eq|ne|gt|lt|le|ge|like|notlike|match|notmatch|contains|notcontains|in|notin|band|bor|bxor|bnot|ceq|cne|cgt|clt|cle|cge|clike|cnotlike|cmatch|cnotmatch|ccontains|cnotcontains|cin|cnotin|ieq|ine|igt|ilt|ile|ige|ilike|inotlike|imatch|inotmatch|icontains|inotcontains|iin|inotin|and|or|xor|not|split|join|replace|f|csplit|creplace|isplit|ireplace|is|isnot|as|shl|shr\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment.start\",regex:\"<#\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"[$](?:[Tt]rue|[Ff]alse)\\\\b\"},{token:\"constant.language\",regex:\"[$][Nn]ull\\\\b\"},{token:\"variable.instance\",regex:\"[$][a-zA-Z][a-zA-Z0-9_]*\\\\b\"},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\-(?:\"+r+\")\"},{token:\"keyword.operator\",regex:\"&|\\\\+|\\\\-|\\\\*|\\\\/|\\\\%|\\\\=|\\\\>|\\\\&|\\\\!|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment.end\",regex:\"#>\",next:\"start\"},{token:\"doc.comment.tag\",regex:\"^\\\\.\\\\w+\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.PowershellHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/powershell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/powershell_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./powershell_highlight_rules\").PowershellHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a({start:\"^\\\\s*(<#)\",end:\"^[#\\\\s]>\\\\s*$\"})};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.blockComment={start:\"<#\",end:\"#>\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null},this.$id=\"ace/mode/powershell\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-praat.js",
    "content": "ace.define(\"ace/mode/praat_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"if|then|else|elsif|elif|endif|fi|endfor|endproc|while|endwhile|repeat|until|select|plus|minus|assert|asserterror\",t=\"macintosh|windows|unix|praatVersion|praatVersion\\\\$pi|undefined|newline\\\\$|tab\\\\$|shellDirectory\\\\$|homeDirectory\\\\$|preferencesDirectory\\\\$|temporaryDirectory\\\\$|defaultDirectory\\\\$\",n=\"clearinfo|endSendPraat\",r=\"writeInfo|writeInfoLine|appendInfo|appendInfoLine|info\\\\$|writeFile|writeFileLine|appendFile|appendFileLine|abs|round|floor|ceiling|min|max|imin|imax|sqrt|sin|cos|tan|arcsin|arccos|arctan|arctan2|sinc|sincpi|exp|ln|lnBeta|lnGamma|log10|log2|sinh|cosh|tanh|arcsinh|arccosh|arctanh|sigmoid|invSigmoid|erf|erfc|random(?:Uniform|Integer|Gauss|Poisson|Binomial)|gaussP|gaussQ|invGaussQ|incompleteGammaP|incompleteBeta|chiSquareP|chiSquareQ|invChiSquareQ|studentP|studentQ|invStudentQ|fisherP|fisherQ|invFisherQ|binomialP|binomialQ|invBinomialP|invBinomialQ|hertzToBark|barkToHerz|hertzToMel|melToHertz|hertzToSemitones|semitonesToHerz|erb|hertzToErb|erbToHertz|phonToDifferenceLimens|differenceLimensToPhon|soundPressureToPhon|beta|beta2|besselI|besselK|numberOfColumns|numberOfRows|selected|selected\\\\$|numberOfSelected|variableExists|index|rindex|startsWith|endsWith|index_regex|rindex_regex|replace_regex\\\\$|length|extractWord\\\\$|extractLine\\\\$|extractNumber|left\\\\$|right\\\\$|mid\\\\$|replace\\\\$|date\\\\$|fixed\\\\$|percent\\\\$|zero#|linear#|randomUniform#|randomInteger#|randomGauss#|beginPause|endPause|demoShow|demoWindowTitle|demoInput|demoWaitForInput|demoClicked|demoClickedIn|demoX|demoY|demoKeyPressed|demoKey\\\\$|demoExtraControlKeyPressed|demoShiftKeyPressed|demoCommandKeyPressed|demoOptionKeyPressed|environment\\\\$|chooseReadFile\\\\$|chooseDirectory\\\\$|createDirectory|fileReadable|deleteFile|selectObject|removeObject|plusObject|minusObject|runScript|exitScript|beginSendPraat|endSendPraat|objectsAreIdentical\",i=\"Activation|AffineTransform|AmplitudeTier|Art|Artword|Autosegment|BarkFilter|CCA|Categories|Cepstrum|Cepstrumc|ChebyshevSeries|ClassificationTable|Cochleagram|Collection|Configuration|Confusion|ContingencyTable|Corpus|Correlation|Covariance|CrossCorrelationTable|CrossCorrelationTables|DTW|Diagonalizer|Discriminant|Dissimilarity|Distance|Distributions|DurationTier|EEG|ERP|ERPTier|Eigen|Excitation|Excitations|ExperimentMFC|FFNet|FeatureWeights|Formant|FormantFilter|FormantGrid|FormantPoint|FormantTier|GaussianMixture|HMM|HMM_Observation|HMM_ObservationSequence|HMM_State|HMM_StateSequence|Harmonicity|ISpline|Index|Intensity|IntensityTier|IntervalTier|KNN|KlattGrid|KlattTable|LFCC|LPC|Label|LegendreSeries|LinearRegression|LogisticRegression|LongSound|Ltas|MFCC|MSpline|ManPages|Manipulation|Matrix|MelFilter|MixingMatrix|Movie|Network|OTGrammar|OTHistory|OTMulti|PCA|PairDistribution|ParamCurve|Pattern|Permutation|Pitch|PitchTier|PointProcess|Polygon|Polynomial|Procrustes|RealPoint|RealTier|ResultsMFC|Roots|SPINET|SSCP|SVD|Salience|ScalarProduct|Similarity|SimpleString|SortedSetOfString|Sound|Speaker|Spectrogram|Spectrum|SpectrumTier|SpeechSynthesizer|SpellingChecker|Strings|StringsIndex|Table|TableOfReal|TextGrid|TextInterval|TextPoint|TextTier|Tier|Transition|VocalTract|Weight|WordList\";this.$rules={start:[{token:\"string.interpolated\",regex:/'((?:\\.?[a-z][a-zA-Z0-9_.]*)(?:\\$|#|:[0-9]+)?)'/},{token:[\"text\",\"text\",\"keyword.operator\",\"text\",\"keyword\"],regex:/(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(stopwatch)/},{token:[\"text\",\"keyword\",\"text\",\"string\"],regex:/(^\\s*)(print(?:line|tab)?|echo|exit|pause|send(?:praat|socket)|include|execute|system(?:_nocheck)?)(\\s+)(.*)/},{token:[\"text\",\"keyword\"],regex:\"(^\\\\s*)(\"+n+\")$\"},{token:[\"text\",\"keyword.operator\",\"text\"],regex:/(\\s+)((?:\\+|-|\\/|\\*|<|>)=?|==?|!=|%|\\^|\\||and|or|not)(\\s+)/},{token:[\"text\",\"text\",\"keyword.operator\",\"text\",\"keyword\",\"text\",\"keyword\"],regex:/(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(?:((?:no)?warn|(?:unix_)?nocheck|noprogress)(\\s+))?((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/},{token:[\"text\",\"keyword\",\"text\",\"keyword\"],regex:/(^\\s*)((?:no(?:warn|check))?)(\\s*)(\\b(?:editor(?::?)|endeditor)\\b)/},{token:[\"text\",\"keyword\",\"text\",\"keyword\"],regex:/(^\\s*)(?:(demo)?(\\s+))((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/},{token:[\"text\",\"keyword\",\"text\",\"keyword\"],regex:/^(\\s*)(?:(demo)(\\s+))?(10|12|14|16|24)$/},{token:[\"text\",\"support.function\",\"text\"],regex:/(\\s*)(do\\$?)(\\s*:\\s*|\\s*\\(\\s*)/},{token:\"entity.name.type\",regex:\"(\"+i+\")\"},{token:\"variable.language\",regex:\"(\"+t+\")\"},{token:[\"support.function\",\"text\"],regex:\"((?:\"+r+\")\\\\$?)(\\\\s*(?::|\\\\())\"},{token:\"keyword\",regex:/(\\bfor\\b)/,next:\"for\"},{token:\"keyword\",regex:\"(\\\\b(?:\"+e+\")\\\\b)\"},{token:\"string\",regex:/\"[^\"]*\"/},{token:\"string\",regex:/\"[^\"]*$/,next:\"brokenstring\"},{token:[\"text\",\"keyword\",\"text\",\"entity.name.section\"],regex:/(^\\s*)(\\bform\\b)(\\s+)(.*)/,next:\"form\"},{token:\"constant.numeric\",regex:/\\b[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"keyword\",\"text\",\"entity.name.function\"],regex:/(procedure)(\\s+)([^:\\s]+)/},{token:[\"entity.name.function\",\"text\"],regex:/(@\\S+)(:|\\s*\\()/},{token:[\"text\",\"keyword\",\"text\",\"entity.name.function\"],regex:/(^\\s*)(call)(\\s+)(\\S+)/},{token:\"comment\",regex:/(^\\s*#|;).*$/},{token:\"text\",regex:/\\s+/}],form:[{token:[\"keyword\",\"text\",\"constant.numeric\"],regex:/((?:optionmenu|choice)\\s+)(\\S+:\\s+)([0-9]+)/},{token:[\"keyword\",\"constant.numeric\"],regex:/((?:option|button)\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/},{token:[\"keyword\",\"string\"],regex:/((?:option|button)\\s+)(.*)/},{token:[\"keyword\",\"text\",\"string\"],regex:/((?:sentence|text)\\s+)(\\S+\\s*)(.*)/},{token:[\"keyword\",\"text\",\"string\",\"invalid.illegal\"],regex:/(word\\s+)(\\S+\\s*)(\\S+)?(\\s.*)?/},{token:[\"keyword\",\"text\",\"constant.language\"],regex:/(boolean\\s+)(\\S+\\s*)(0|1|\"?(?:yes|no)\"?)/},{token:[\"keyword\",\"text\",\"constant.numeric\"],regex:/((?:real|natural|positive|integer)\\s+)(\\S+\\s*)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/},{token:[\"keyword\",\"string\"],regex:/(comment\\s+)(.*)/},{token:\"keyword\",regex:\"endform\",next:\"start\"}],\"for\":[{token:[\"keyword\",\"text\",\"constant.numeric\",\"text\"],regex:/(from|to)(\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?)(\\s*)/},{token:[\"keyword\",\"text\"],regex:/(from|to)(\\s+\\S+\\s*)/},{token:\"text\",regex:/$/,next:\"start\"}],brokenstring:[{token:[\"text\",\"string\"],regex:/(\\s*\\.{3})([^\"]*)/},{token:\"string\",regex:/\"/,next:\"start\"}]}};r.inherits(s,i),t.PraatHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/praat\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/praat_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./praat_highlight_rules\").PraatHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/praat\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-prolog.js",
    "content": "ace.define(\"ace/mode/prolog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comment\"},{include:\"#basic_fact\"},{include:\"#rule\"},{include:\"#directive\"},{include:\"#fact\"}],\"#atom\":[{token:\"constant.other.atom.prolog\",regex:\"\\\\b[a-z][a-zA-Z0-9_]*\\\\b\"},{token:\"constant.numeric.prolog\",regex:\"-?\\\\d+(?:\\\\.\\\\d+)?\"},{include:\"#string\"}],\"#basic_elem\":[{include:\"#comment\"},{include:\"#statement\"},{include:\"#constants\"},{include:\"#operators\"},{include:\"#builtins\"},{include:\"#list\"},{include:\"#atom\"},{include:\"#variable\"}],\"#basic_fact\":[{token:[\"entity.name.function.fact.basic.prolog\",\"punctuation.end.fact.basic.prolog\"],regex:\"([a-z]\\\\w*)(\\\\.)\"}],\"#builtins\":[{token:\"support.function.builtin.prolog\",regex:\"\\\\b(?:abolish|abort|ancestors|arg|ascii|assert[az]|atom(?:ic)?|body|char|close|conc|concat|consult|define|definition|dynamic|dump|fail|file|free|free_proc|functor|getc|goal|halt|head|head|integer|length|listing|match_args|member|next_clause|nl|nonvar|nth|number|cvars|nvars|offset|op|print?|prompt|putc|quoted|ratom|read|redefine|rename|retract(?:all)?|see|seeing|seen|skip|spy|statistics|system|tab|tell|telling|term|time|told|univ|unlink_clause|unspy_predicate|var|write)\\\\b\"}],\"#comment\":[{token:[\"punctuation.definition.comment.prolog\",\"comment.line.percentage.prolog\"],regex:\"(%)(.*$)\"},{token:\"punctuation.definition.comment.prolog\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.prolog\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.prolog\"}]}],\"#constants\":[{token:\"constant.language.prolog\",regex:\"\\\\b(?:true|false|yes|no)\\\\b\"}],\"#directive\":[{token:\"keyword.operator.directive.prolog\",regex:\":-\",push:[{token:\"meta.directive.prolog\",regex:\"\\\\.\",next:\"pop\"},{include:\"#comment\"},{include:\"#statement\"},{defaultToken:\"meta.directive.prolog\"}]}],\"#expr\":[{include:\"#comments\"},{token:\"meta.expression.prolog\",regex:\"\\\\(\",push:[{token:\"meta.expression.prolog\",regex:\"\\\\)\",next:\"pop\"},{include:\"#expr\"},{defaultToken:\"meta.expression.prolog\"}]},{token:\"keyword.control.cutoff.prolog\",regex:\"!\"},{token:\"punctuation.control.and.prolog\",regex:\",\"},{token:\"punctuation.control.or.prolog\",regex:\";\"},{include:\"#basic_elem\"}],\"#fact\":[{token:[\"entity.name.function.fact.prolog\",\"punctuation.begin.fact.parameters.prolog\"],regex:\"([a-z]\\\\w*)(\\\\()(?!.*:-)\",push:[{token:[\"punctuation.end.fact.parameters.prolog\",\"punctuation.end.fact.prolog\"],regex:\"(\\\\))(\\\\.?)\",next:\"pop\"},{include:\"#parameter\"},{defaultToken:\"meta.fact.prolog\"}]}],\"#list\":[{token:\"punctuation.begin.list.prolog\",regex:\"\\\\[(?=.*\\\\])\",push:[{token:\"punctuation.end.list.prolog\",regex:\"\\\\]\",next:\"pop\"},{include:\"#comment\"},{token:\"punctuation.separator.list.prolog\",regex:\",\"},{token:\"punctuation.concat.list.prolog\",regex:\"\\\\|\",push:[{token:\"meta.list.concat.prolog\",regex:\"(?=\\\\s*\\\\])\",next:\"pop\"},{include:\"#basic_elem\"},{defaultToken:\"meta.list.concat.prolog\"}]},{include:\"#basic_elem\"},{defaultToken:\"meta.list.prolog\"}]}],\"#operators\":[{token:\"keyword.operator.prolog\",regex:\"\\\\\\\\\\\\+|\\\\bnot\\\\b|\\\\bis\\\\b|->|[><]|[><\\\\\\\\:=]?=|(?:=\\\\\\\\|\\\\\\\\=)=\"}],\"#parameter\":[{token:\"variable.language.anonymous.prolog\",regex:\"\\\\b_\\\\b\"},{token:\"variable.parameter.prolog\",regex:\"\\\\b[A-Z_]\\\\w*\\\\b\"},{token:\"punctuation.separator.parameters.prolog\",regex:\",\"},{include:\"#basic_elem\"},{token:\"text\",regex:\"[^\\\\s]\"}],\"#rule\":[{token:\"meta.rule.prolog\",regex:\"(?=[a-z]\\\\w*.*:-)\",push:[{token:\"punctuation.rule.end.prolog\",regex:\"\\\\.\",next:\"pop\"},{token:\"meta.rule.signature.prolog\",regex:\"(?=[a-z]\\\\w*.*:-)\",push:[{token:\"meta.rule.signature.prolog\",regex:\"(?=:-)\",next:\"pop\"},{token:\"entity.name.function.rule.prolog\",regex:\"[a-z]\\\\w*(?=\\\\(|\\\\s*:-)\"},{token:\"punctuation.rule.parameters.begin.prolog\",regex:\"\\\\(\",push:[{token:\"punctuation.rule.parameters.end.prolog\",regex:\"\\\\)\",next:\"pop\"},{include:\"#parameter\"},{defaultToken:\"meta.rule.parameters.prolog\"}]},{defaultToken:\"meta.rule.signature.prolog\"}]},{token:\"keyword.operator.definition.prolog\",regex:\":-\",push:[{token:\"meta.rule.definition.prolog\",regex:\"(?=\\\\.)\",next:\"pop\"},{include:\"#comment\"},{include:\"#expr\"},{defaultToken:\"meta.rule.definition.prolog\"}]},{defaultToken:\"meta.rule.prolog\"}]}],\"#statement\":[{token:\"meta.statement.prolog\",regex:\"(?=[a-z]\\\\w*\\\\()\",push:[{token:\"punctuation.end.statement.parameters.prolog\",regex:\"\\\\)\",next:\"pop\"},{include:\"#builtins\"},{include:\"#atom\"},{token:\"punctuation.begin.statement.parameters.prolog\",regex:\"\\\\(\",push:[{token:\"meta.statement.parameters.prolog\",regex:\"(?=\\\\))\",next:\"pop\"},{token:\"punctuation.separator.statement.prolog\",regex:\",\"},{include:\"#basic_elem\"},{defaultToken:\"meta.statement.parameters.prolog\"}]},{defaultToken:\"meta.statement.prolog\"}]}],\"#string\":[{token:\"punctuation.definition.string.begin.prolog\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.prolog\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.prolog\",regex:\"\\\\\\\\.\"},{token:\"constant.character.escape.quote.prolog\",regex:\"''\"},{defaultToken:\"string.quoted.single.prolog\"}]}],\"#variable\":[{token:\"variable.language.anonymous.prolog\",regex:\"\\\\b_\\\\b\"},{token:\"variable.other.prolog\",regex:\"\\\\b[A-Z_][a-zA-Z0-9_]*\\\\b\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"plg\",\"prolog\"],foldingStartMarker:\"(%\\\\s*region \\\\w*)|([a-z]\\\\w*.*:- ?)\",foldingStopMarker:\"(%\\\\s*end(\\\\s*region)?)|(?=\\\\.)\",keyEquivalent:\"^~P\",name:\"Prolog\",scopeName:\"source.prolog\"},r.inherits(s,i),t.PrologHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/prolog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/prolog_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./prolog_highlight_rules\").PrologHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"%\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/prolog\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-properties.js",
    "content": "ace.define(\"ace/mode/properties_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=/\\\\u[0-9a-fA-F]{4}|\\\\/;this.$rules={start:[{token:\"comment\",regex:/[!#].*$/},{token:\"keyword\",regex:/[=:]$/},{token:\"keyword\",regex:/[=:]/,next:\"value\"},{token:\"constant.language.escape\",regex:e},{defaultToken:\"variable\"}],value:[{regex:/\\\\$/,token:\"string\",next:\"value\"},{regex:/$/,token:\"string\",next:\"start\"},{token:\"constant.language.escape\",regex:e},{defaultToken:\"string\"}]}};r.inherits(s,i),t.PropertiesHighlightRules=s}),ace.define(\"ace/mode/properties\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/properties_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./properties_highlight_rules\").PropertiesHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.$id=\"ace/mode/properties\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-protobuf.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",f=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,l=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+f+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:f},{token:\"constant.language.escape\",regex:l},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/protobuf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|bool|string|bytes\",t=\"message|required|optional|repeated|package|import|option|enum\",n=this.createKeywordMapper({\"keyword.declaration.protobuf\":t,\"support.type\":e},\"identifier\");this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"constant\",regex:\"<[^>]+>\"},{regex:\"=\",token:\"keyword.operator.assignment.protobuf\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.ProtobufHighlightRules=s}),ace.define(\"ace/mode/protobuf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/protobuf_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./protobuf_highlight_rules\").ProtobufHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.foldingRules=new o,this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/protobuf\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-puppet.js",
    "content": "ace.define(\"ace/mode/puppet_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"keyword.type.puppet\",\"constant.class.puppet\",\"keyword.inherits.puppet\",\"constant.class.puppet\"],regex:'^\\\\s*(class)(\\\\s+(?:[-_A-Za-z0-9\".]+::)*[-_A-Za-z0-9\".]+\\\\s*)(?:(inherits\\\\s*)(\\\\s+(?:[-_A-Za-z0-9\".]+::)*[-_A-Za-z0-9\".]+\\\\s*))?'},{token:[\"storage.function.puppet\",\"name.function.puppet\",\"punctuation.lpar\"],regex:\"(^\\\\s*define)(\\\\s+[a-zA-Z0-9_:]+\\\\s*)(\\\\()\",push:[{token:\"punctuation.rpar.puppet\",regex:\"\\\\)\",next:\"pop\"},{include:\"constants\"},{include:\"variable\"},{include:\"strings\"},{include:\"operators\"},{defaultToken:\"string\"}]},{token:[\"language.support.class\",\"keyword.operator\"],regex:\"\\\\b([a-zA-Z_]+)(\\\\s+=>)\"},{token:[\"exported.resource.puppet\",\"keyword.name.resource.puppet\",\"paren.lpar\"],regex:\"(\\\\@\\\\@)?(\\\\s*[a-zA-Z_]*)(\\\\s*\\\\{)\"},{token:\"qualified.variable.puppet\",regex:\"(\\\\$([a-z][a-z0-9_]*)?(::[a-z][a-z0-9_]*)*::[a-z0-9_][a-zA-Z0-9_]*)\"},{token:\"singleline.comment.puppet\",regex:\"#(.)*$\"},{token:\"multiline.comment.begin.puppet\",regex:\"^\\\\s*\\\\/\\\\*\\\\s*$\",push:\"blockComment\"},{token:\"keyword.control.puppet\",regex:\"\\\\b(case|if|unless|else|elsif|in|default:|and|or)\\\\s+(?!::)\"},{token:\"keyword.control.puppet\",regex:\"\\\\b(import|default|inherits|include|require|contain|node|application|consumes|environment|site|function|produces)\\\\b\"},{token:\"support.function.puppet\",regex:\"\\\\b(lest|str2bool|escape|gsub|Timestamp|Timespan|with|alert|crit|debug|notice|sprintf|split|step|strftime|slice|shellquote|type|sha1|defined|scanf|reverse_each|regsubst|return|emerg|reduce|err|failed|fail|versioncmp|file|generate|then|info|realize|search|tag|tagged|template|epp|warning|hiera_include|each|assert_type|binary_file|create_resources|dig|digest|filter|lookup|find_file|fqdn_rand|hiera_array|hiera_hash|inline_epp|inline_template|map|match|md5|new|next)\\\\b\"},{token:\"constant.types.puppet\",regex:\"\\\\b(String|File|Package|Service|Class|Integer|Array|Catalogentry|Variant|Boolean|Undef|Number|Hash|Float|Numeric|NotUndef|Callable|Optional|Any|Regexp|Sensitive|Sensitive.new|Type|Resource|Default|Enum|Scalar|Collection|Data|Pattern|Tuple|Struct)\\\\b\"},{token:\"paren.lpar\",regex:\"[[({]\"},{token:\"paren.rpar\",regex:\"[\\\\])}]\"},{include:\"variable\"},{include:\"constants\"},{include:\"strings\"},{include:\"operators\"},{token:\"regexp.begin.string.puppet\",regex:\"\\\\s*(\\\\/(\\\\S)+)\\\\/\"}],blockComment:[{regex:\"^\\\\s*\\\\/\\\\*\\\\s*$\",token:\"multiline.comment.begin.puppet\",push:\"blockComment\"},{regex:\"^\\\\s*\\\\*\\\\/\\\\s*$\",token:\"multiline.comment.end.puppet\",next:\"pop\"},{defaultToken:\"comment\"}],constants:[{token:\"constant.language.puppet\",regex:\"\\\\b(false|true|running|stopped|installed|purged|latest|file|directory|held|undef|present|absent|link|mounted|unmounted)\\\\b\"}],variable:[{token:\"variable.puppet\",regex:\"(\\\\$[a-z0-9_{][a-zA-Z0-9_]*)\"}],strings:[{token:\"punctuation.quote.puppet\",regex:\"'\",push:[{token:\"punctuation.quote.puppet\",regex:\"'\",next:\"pop\"},{include:\"escaped_chars\"},{defaultToken:\"string\"}]},{token:\"punctuation.quote.puppet\",regex:'\"',push:[{token:\"punctuation.quote.puppet\",regex:'\"',next:\"pop\"},{include:\"escaped_chars\"},{include:\"variable\"},{defaultToken:\"string\"}]}],escaped_chars:[{token:\"constant.escaped_char.puppet\",regex:\"\\\\\\\\.\"}],operators:[{token:\"keyword.operator\",regex:\"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|::|,\"}]},this.normalizeRules()};r.inherits(s,i),t.PuppetHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/puppet\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/puppet_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./puppet_highlight_rules\").PuppetHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=function(){i.call(this),this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.$id=\"ace/mode/puppet\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-python.js",
    "content": "ace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"variable.language\":\"self|cls\",\"constant.language\":t,keyword:e},\"identifier\"),i=\"[uU]?\",s=\"[rR]\",o=\"[fF]\",u=\"(?:[rR][fF]|[fF][rR])\",a=\"(?:(?:[1-9]\\\\d*)|(?:0))\",f=\"(?:0[oO]?[0-7]+)\",l=\"(?:0[xX][\\\\dA-Fa-f]+)\",c=\"(?:0[bB][01]+)\",h=\"(?:\"+a+\"|\"+f+\"|\"+l+\"|\"+c+\")\",p=\"(?:[eE][+-]?\\\\d+)\",d=\"(?:\\\\.\\\\d+)\",v=\"(?:\\\\d+)\",m=\"(?:(?:\"+v+\"?\"+d+\")|(?:\"+v+\"\\\\.))\",g=\"(?:(?:\"+m+\"|\"+v+\")\"+p+\")\",y=\"(?:\"+g+\"|\"+m+\")\",b=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:s+'\"{3}',next:\"rawqqstring3\"},{token:\"string\",regex:s+'\"(?=.)',next:\"rawqqstring\"},{token:\"string\",regex:s+\"'{3}\",next:\"rawqstring3\"},{token:\"string\",regex:s+\"'(?=.)\",next:\"rawqstring\"},{token:\"string\",regex:o+'\"{3}',next:\"fqqstring3\"},{token:\"string\",regex:o+'\"(?=.)',next:\"fqqstring\"},{token:\"string\",regex:o+\"'{3}\",next:\"fqstring3\"},{token:\"string\",regex:o+\"'(?=.)\",next:\"fqstring\"},{token:\"string\",regex:u+'\"{3}',next:\"rfqqstring3\"},{token:\"string\",regex:u+'\"(?=.)',next:\"rfqqstring\"},{token:\"string\",regex:u+\"'{3}\",next:\"rfqstring3\"},{token:\"string\",regex:u+\"'(?=.)\",next:\"rfqstring\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"punctuation\",regex:\",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"},{include:\"constants\"}],qqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],rawqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],rawqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],rawqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rawqstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}],fqqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring3:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"\\\\\\\\$\",next:\"fqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstring:[{token:\"constant.language.escape\",regex:b},{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring3:[{token:\"string\",regex:'\"{3}',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring3:[{token:\"string\",regex:\"'{3}\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"rfqqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],rfqstring:[{token:\"string\",regex:\"'|$\",next:\"start\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"},{defaultToken:\"string\"}],fqstringParRules:[{token:\"paren.lparen\",regex:\"[\\\\[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)]\"},{token:\"string\",regex:\"\\\\s+\"},{token:\"string\",regex:\"'(.)*'\"},{token:\"string\",regex:'\"(.)*\"'},{token:\"function.support\",regex:\"(!s|!r|!a)\"},{include:\"constants\"},{token:\"paren.rparen\",regex:\"}\",next:\"pop\"},{token:\"paren.lparen\",regex:\"{\",push:\"fqstringParRules\"}],constants:[{token:\"constant.numeric\",regex:\"(?:\"+y+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:y},{token:\"constant.numeric\",regex:h+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:h+\"\\\\b\"},{token:[\"punctuation\",\"function.support\"],regex:\"(\\\\.)([a-zA-Z_]+)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\"+e+\")(?:\\\\s*)(?:#.*)?$\")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)}),ace.define(\"ace/mode/python\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/python_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./python_highlight_rules\").PythonHighlightRules,o=e(\"./folding/pythonic\").FoldMode,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o(\"\\\\:\"),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/python\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-r.js",
    "content": "ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){e||(e=\"text\"),this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:e,regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\s+\"},{token:\"nospell.\"+e,regex:\"\\\\w+\"}]}};r.inherits(o,s),t.TexHighlightRules=o}),ace.define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./tex_highlight_rules\").TexHighlightRules,u=function(){var e=i.arrayToMap(\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\".split(\"|\")),t=i.arrayToMap(\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|NA_complex_\".split(\"|\"));this.$rules={start:[{token:\"comment.sectionhead\",regex:\"#+(?!').*(?:----|====|####)\\\\s*$\"},{token:\"comment\",regex:\"#+'\",next:\"rd-start\"},{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:'[\"]',next:\"qqstring\"},{token:\"string\",regex:\"[']\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+L\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:TRUE|FALSE|T|F)\\\\b\"},{token:\"identifier\",regex:\"`.*?`\"},{onMatch:function(n){return e[n]?\"keyword\":t[n]?\"constant.language\":n==\"...\"||n.match(/^\\.\\.\\d+$/)?\"variable.language\":\"identifier\"},regex:\"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"},{token:\"keyword.operator\",regex:\"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"},{token:\"keyword.operator\",regex:\"%.*?%\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]};var n=(new o(\"comment\")).getRules();for(var r=0;r<n.start.length;r++)n.start[r].token+=\".virtual-comment\";this.addRules(n,\"rd-\"),this.$rules[\"rd-start\"].unshift({token:\"text\",regex:\"^\",next:\"start\"}),this.$rules[\"rd-start\"].unshift({token:\"keyword\",regex:\"@(?!@)[^ ]*\"}),this.$rules[\"rd-start\"].unshift({token:\"comment\",regex:\"@@\"}),this.$rules[\"rd-start\"].push({token:\"comment\",regex:\"[^%\\\\\\\\[({\\\\])}]+\"})};r.inherits(u,s),t.RHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/r\",[\"require\",\"exports\",\"module\",\"ace/unicode\",\"ace/range\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/r_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../unicode\"),i=e(\"../range\").Range,s=e(\"../lib/oop\"),o=e(\"./text\").Mode,u=e(\"./text_highlight_rules\").TextHighlightRules,a=e(\"./r_highlight_rules\").RHighlightRules,f=e(\"./matching_brace_outdent\").MatchingBraceOutdent,l=function(){this.HighlightRules=a,this.$outdent=new f,this.$behaviour=this.$defaultBehaviour};s.inherits(l,o),function(){this.lineCommentStart=\"#\",this.tokenRe=new RegExp(\"^[\"+r.wordChars+\"._]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+r.wordChars+\"._]|s])+\",\"g\"),this.$id=\"ace/mode/r\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-razor.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\"constant.language\":\"null|true|false\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:/'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/},{token:\"string\",start:'\"',end:'\"|$',next:[{token:\"constant.language.escape\",regex:/\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},{token:\"invalid\",regex:/\\\\./}]},{token:\"string\",start:'@\"',end:'\"',next:[{token:\"constant.language.escape\",regex:'\"\"'}]},{token:\"string\",start:/\\$\"/,end:'\"|$',next:[{token:\"constant.language.escape\",regex:/\\\\(:?$)|{{/},{token:\"constant.language.escape\",regex:/\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},{token:\"invalid\",regex:/\\\\./}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"keyword\",regex:\"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.CSharpHighlightRules=o}),ace.define(\"ace/mode/razor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/csharp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./html_highlight_rules\").HtmlHighlightRules,u=e(\"./csharp_highlight_rules\").CSharpHighlightRules,a=\"razor-block-\",f=function(){u.call(this);var e=function(e,t){return typeof t==\"function\"?t(e):t},t=\"in-braces\";this.$rules.start.unshift({regex:\"[\\\\[({]\",onMatch:function(e,n,r){var i=/razor-[^\\-]+-/.exec(n)[0];return r.unshift(e),r.unshift(i+t),this.next=i+t,\"paren.lparen\"}},{start:\"@\\\\*\",end:\"\\\\*@\",token:\"comment\"});var n={\"{\":\"}\",\"[\":\"]\",\"(\":\")\"};this.$rules[t]=i.deepCopy(this.$rules.start),this.$rules[t].unshift({regex:\"[\\\\])}]\",onMatch:function(t,r,i){var s=i[1];return n[s]!==t?\"invalid.illegal\":(i.shift(),i.shift(),this.next=e(t,i[0])||\"start\",\"paren.rparen\")}})};r.inherits(f,u);var l=function(){o.call(this);var e={regex:\"@[({]|@functions{\",onMatch:function(e,t,n){return n.unshift(e),n.unshift(\"razor-block-start\"),this.next=\"razor-block-start\",\"punctuation.block.razor\"}},t={\"@{\":\"}\",\"@(\":\")\",\"@functions{\":\"}\"},n={regex:\"[})]\",onMatch:function(e,n,r){var i=r[1];return t[i]!==e?\"invalid.illegal\":(r.shift(),r.shift(),this.next=r.shift()||\"start\",\"punctuation.block.razor\")}},r={regex:\"@(?![{(])\",onMatch:function(e,t,n){return n.unshift(\"razor-short-start\"),this.next=\"razor-short-start\",\"punctuation.short.razor\"}},i={token:\"\",regex:\"(?=[^A-Za-z_\\\\.()\\\\[\\\\]])\",next:\"pop\"},s={regex:\"@(?=if)\",onMatch:function(e,t,n){return n.unshift(function(e){return e!==\"}\"?\"start\":n.shift()||\"start\"}),this.next=\"razor-block-start\",\"punctuation.control.razor\"}},u=[{start:\"@\\\\*\",end:\"\\\\*@\",token:\"comment\"},{token:[\"meta.directive.razor\",\"text\",\"identifier\"],regex:\"^(\\\\s*@model)(\\\\s+)(.+)$\"},e,r];for(var a in this.$rules)this.$rules[a].unshift.apply(this.$rules[a],u);this.embedRules(f,\"razor-block-\",[n],[\"start\"]),this.embedRules(f,\"razor-short-\",[i],[\"start\"]),this.normalizeRules()};r.inherits(l,o),t.RazorHighlightRules=l,t.RazorLangHighlightRules=f}),ace.define(\"ace/mode/razor_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../token_iterator\").TokenIterator,i=[\"abstract\",\"as\",\"base\",\"bool\",\"break\",\"byte\",\"case\",\"catch\",\"char\",\"checked\",\"class\",\"const\",\"continue\",\"decimal\",\"default\",\"delegate\",\"do\",\"double\",\"else\",\"enum\",\"event\",\"explicit\",\"extern\",\"false\",\"finally\",\"fixed\",\"float\",\"for\",\"foreach\",\"goto\",\"if\",\"implicit\",\"in\",\"int\",\"interface\",\"internal\",\"is\",\"lock\",\"long\",\"namespace\",\"new\",\"null\",\"object\",\"operator\",\"out\",\"override\",\"params\",\"private\",\"protected\",\"public\",\"readonly\",\"ref\",\"return\",\"sbyte\",\"sealed\",\"short\",\"sizeof\",\"stackalloc\",\"static\",\"string\",\"struct\",\"switch\",\"this\",\"throw\",\"true\",\"try\",\"typeof\",\"uint\",\"ulong\",\"unchecked\",\"unsafe\",\"ushort\",\"using\",\"var\",\"virtual\",\"void\",\"volatile\",\"while\"],s=[\"Html\",\"Model\",\"Url\",\"Layout\"],o=function(){};(function(){this.getCompletions=function(e,t,n,r){if(e.lastIndexOf(\"razor-short-start\")==-1&&e.lastIndexOf(\"razor-block-start\")==-1)return[];var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(e.lastIndexOf(\"razor-short-start\")!=-1)return this.getShortStartCompletions(e,t,n,r);if(e.lastIndexOf(\"razor-block-start\")!=-1)return this.getKeywordCompletions(e,t,n,r)},this.getShortStartCompletions=function(e,t,n,r){return s.map(function(e){return{value:e,meta:\"keyword\",score:1e6}})},this.getKeywordCompletions=function(e,t,n,r){return s.concat(i).map(function(e){return{value:e,meta:\"keyword\",score:1e6}})}}).call(o.prototype),t.RazorCompletions=o}),ace.define(\"ace/mode/razor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/razor_highlight_rules\",\"ace/mode/razor_completions\",\"ace/mode/html_completions\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./razor_highlight_rules\").RazorHighlightRules,o=e(\"./razor_completions\").RazorCompletions,u=e(\"./html_completions\").HtmlCompletions,a=function(){i.call(this),this.$highlightRules=new s,this.$completer=new o,this.$htmlCompleter=new u};r.inherits(a,i),function(){this.getCompletions=function(e,t,n,r){var i=this.$completer.getCompletions(e,t,n,r),s=this.$htmlCompleter.getCompletions(e,t,n,r);return i.concat(s)},this.createWorker=function(e){return null},this.$id=\"ace/mode/razor\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-rdoc.js",
    "content": "ace.define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\",\"lparen\",\"storage.type\",\"rparen\"],regex:\"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\begin)({)(verbatim)(})\",next:\"verbatim\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\begin)({)(lstlisting)(})\",next:\"lstlisting\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"},{token:\"storage.type\",regex:/\\\\verb\\b\\*?/,next:[{token:[\"keyword.operator\",\"string\",\"keyword.operator\"],regex:\"(.)(.*?)(\\\\1|$)|\",next:\"start\"}]},{token:\"storage.type\",regex:\"\\\\\\\\[a-zA-Z]+\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\[^a-zA-Z]?\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"equation\"}],equation:[{token:\"comment\",regex:\"%.*$\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"start\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"},{token:\"error\",regex:\"^\\\\s*$\",next:\"start\"},{defaultToken:\"string\"}],verbatim:[{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\end)({)(verbatim)(})\",next:\"start\"},{defaultToken:\"text\"}],lstlisting:[{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\end)({)(lstlisting)(})\",next:\"start\"},{defaultToken:\"text\"}]},this.normalizeRules()};r.inherits(s,i),t.LatexHighlightRules=s}),ace.define(\"ace/mode/rdoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/latex_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./latex_highlight_rules\"),u=function(){this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:\"text\",regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.text\",regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.text\",regex:\"\\\\s+\"},{token:\"nospell.text\",regex:\"\\\\w+\"}]}};r.inherits(u,s),t.RDocHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/rdoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rdoc_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./rdoc_highlight_rules\").RDocHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=function(e){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.$id=\"ace/mode/rdoc\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-red.js",
    "content": "ace.define(\"ace/mode/red_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"\";this.$rules={start:[{token:\"keyword.operator\",regex:/\\s([\\-+%/=<>*]|(?:\\*\\*\\|\\/\\/|==|>>>?|<>|<<|=>|<=|=\\?))(\\s|(?=:))/},{token:\"string.email\",regex:/\\w[-\\w._]*\\@\\w[-\\w._]*/},{token:\"value.time\",regex:/\\b\\d+:\\d+(:\\d+)?/},{token:\"string.url\",regex:/\\w[-\\w_]*\\:(\\/\\/)?\\w[-\\w._]*(:\\d+)?/},{token:\"value.date\",regex:/(\\b\\d{1,4}[-/]\\d{1,2}[-/]\\d{1,2}|\\d{1,2}[-/]\\d{1,2}[-/]\\d{1,4})\\b/},{token:\"value.tuple\",regex:/\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(\\.\\d{1,3}){0,9}/},{token:\"value.pair\",regex:/[+-]?\\d+x[-+]?\\d+/},{token:\"value.binary\",regex:/\\b2#{([01]{8})+}/},{token:\"value.binary\",regex:/\\b64#{([\\w/=+])+}/},{token:\"value.binary\",regex:/(16)?#{([\\dabcdefABCDEF][\\dabcdefABCDEF])*}/},{token:\"value.issue\",regex:/#\\w[-\\w'*.]*/},{token:\"value.numeric\",regex:/[+-]?\\d['\\d]*(?:\\.\\d+)?e[-+]?\\d{1,3}\\%?(?!\\w)/},{token:\"invalid.illegal\",regex:/[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?[a-zA-Z]/},{token:\"value.numeric\",regex:/[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?(?![a-zA-Z])/},{token:\"value.character\",regex:/#\"(\\^[-@/_~^\"HKLM\\[]|.)\"/},{token:\"string.file\",regex:/%[-\\w\\.\\/]+/},{token:\"string.tag\",regex:/</,next:\"tag\"},{token:\"string\",regex:/\"/,next:\"string\"},{token:\"string.other\",regex:\"{\",next:\"string.other\"},{token:\"comment\",regex:\"comment [{]\",next:\"comment\"},{token:\"comment\",regex:/;.+$/},{token:\"paren.map-start\",regex:\"#\\\\(\"},{token:\"paren.block-start\",regex:\"[\\\\[]\"},{token:\"paren.block-end\",regex:\"[\\\\]]\"},{token:\"paren.parens-start\",regex:\"[(]\"},{token:\"paren.parens-end\",regex:\"\\\\)\"},{token:\"keyword\",regex:\"/local|/external\"},{token:\"keyword.preprocessor\",regex:\"#(if|either|switch|case|include|do|macrolocal|reset|process|trace)\"},{token:\"constant.datatype!\",regex:\"(?:datatype|unset|none|logic|block|paren|string|file|url|char|integer|float|word|set-word|lit-word|get-word|refinement|issue|native|action|op|function|path|lit-path|set-path|get-path|routine|bitset|point|object|typeset|error|vector|hash|pair|percent|tuple|map|binary|time|tag|email|handle|date|image|event|series|any-type|number|any-object|scalar|any-string|any-word|any-function|any-block|any-list|any-path|immediate|all-word|internal|external|default)!(?![-!?\\\\w~])\"},{token:\"keyword.function\",regex:\"\\\\b(?:collect|quote|on-parse-event|math|last|source|expand|show|context|object|input|quit|dir|make-dir|cause-error|error\\\\?|none\\\\?|block\\\\?|any-list\\\\?|word\\\\?|char\\\\?|any-string\\\\?|series\\\\?|binary\\\\?|attempt|url\\\\?|string\\\\?|suffix\\\\?|file\\\\?|object\\\\?|body-of|first|second|third|mod|clean-path|dir\\\\?|to-red-file|normalize-dir|list-dir|pad|empty\\\\?|dirize|offset\\\\?|what-dir|expand-directives|load|split-path|change-dir|to-file|path-thru|save|load-thru|View|float\\\\?|to-float|charset|\\\\?|probe|set-word\\\\?|q|words-of|replace|repend|react|function\\\\?|spec-of|unset\\\\?|halt|op\\\\?|any-function\\\\?|to-paren|tag\\\\?|routine|class-of|size-text|draw|handle\\\\?|link-tabs-to-parent|link-sub-to-parent|on-face-deep-change*|update-font-faces|do-actor|do-safe|do-events|pair\\\\?|foreach-face|hex-to-rgb|issue\\\\?|alter|path\\\\?|typeset\\\\?|datatype\\\\?|set-flag|layout|extract|image\\\\?|get-word\\\\?|to-logic|to-set-word|to-block|center-face|dump-face|request-font|request-file|request-dir|rejoin|ellipsize-at|any-block\\\\?|any-object\\\\?|map\\\\?|keys-of|a-an|also|parse-func-spec|help-string|what|routine\\\\?|action\\\\?|native\\\\?|refinement\\\\?|common-substr|red-complete-file|red-complete-path|unview|comment|\\\\?\\\\?|fourth|fifth|values-of|bitset\\\\?|email\\\\?|get-path\\\\?|hash\\\\?|integer\\\\?|lit-path\\\\?|lit-word\\\\?|logic\\\\?|paren\\\\?|percent\\\\?|set-path\\\\?|time\\\\?|tuple\\\\?|date\\\\?|vector\\\\?|any-path\\\\?|any-word\\\\?|number\\\\?|immediate\\\\?|scalar\\\\?|all-word\\\\?|to-bitset|to-binary|to-char|to-email|to-get-path|to-get-word|to-hash|to-integer|to-issue|to-lit-path|to-lit-word|to-map|to-none|to-pair|to-path|to-percent|to-refinement|to-set-path|to-string|to-tag|to-time|to-typeset|to-tuple|to-unset|to-url|to-word|to-image|to-date|parse-trace|modulo|eval-set-path|extract-boot-args|flip-exe-flag|split|do-file|exists-thru\\\\?|read-thru|do-thru|cos|sin|tan|acos|asin|atan|atan2|sqrt|clear-reactions|dump-reactions|react\\\\?|within\\\\?|overlap\\\\?|distance\\\\?|face\\\\?|metrics\\\\?|get-scroller|insert-event-func|remove-event-func|set-focus|help|fetch-help|about|ls|ll|pwd|cd|red-complete-input|matrix)(?![-!?\\\\w~])\"},{token:\"keyword.action\",regex:\"\\\\b(?:to|remove|copy|insert|change|clear|move|poke|put|random|reverse|sort|swap|take|trim|add|subtract|divide|multiply|make|reflect|form|mold|modify|absolute|negate|power|remainder|round|even\\\\?|odd\\\\?|and~|complement|or~|xor~|append|at|back|find|skip|tail|head|head\\\\?|index\\\\?|length\\\\?|next|pick|select|tail\\\\?|delete|read|write)(?![-_!?\\\\w~])\"},{token:\"keyword.native\",regex:\"\\\\b(?:not|any|set|uppercase|lowercase|checksum|try|catch|browse|throw|all|as|remove-each|func|function|does|has|do|reduce|compose|get|print|prin|equal\\\\?|not-equal\\\\?|strict-equal\\\\?|lesser\\\\?|greater\\\\?|lesser-or-equal\\\\?|greater-or-equal\\\\?|same\\\\?|type\\\\?|stats|bind|in|parse|union|unique|intersect|difference|exclude|complement\\\\?|dehex|negative\\\\?|positive\\\\?|max|min|shift|to-hex|sine|cosine|tangent|arcsine|arccosine|arctangent|arctangent2|NaN\\\\?|zero\\\\?|log-2|log-10|log-e|exp|square-root|construct|value\\\\?|as-pair|extend|debase|enbase|to-local-file|wait|unset|new-line|new-line\\\\?|context\\\\?|set-env|get-env|list-env|now|sign\\\\?|call|size\\\\?)(?![-!?\\\\w~])\"},{token:\"keyword\",regex:\"\\\\b(?:Red(?=\\\\s+\\\\[)|object|context|make|self|keep)(?![-!?\\\\w~])\"},{token:\"variable.language\",regex:\"this\"},{token:\"keyword.control\",regex:\"(?:while|if|return|case|unless|either|until|loop|repeat|forever|foreach|forall|switch|break|continue|exit)(?![-!?\\\\w~])\"},{token:\"constant.language\",regex:\"\\\\b(?:true|false|on|off|yes|none|no)(?![-!?\\\\w~])\"},{token:\"constant.numeric\",regex:/\\bpi(?![^-_])/},{token:\"constant.character\",regex:\"\\\\b(space|tab|newline|cr|lf)(?![-!?\\\\w~])\"},{token:\"keyword.operator\",regex:\"s(or|and|xor|is)s\"},{token:\"variable.get-path\",regex:/:\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},{token:\"variable.set-path\",regex:/\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*:/},{token:\"variable.lit-path\",regex:/'\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},{token:\"variable.path\",regex:/\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},{token:\"variable.refinement\",regex:/\\/\\w[-\\w'*.?!]*/},{token:\"keyword.view.style\",regex:\"\\\\b(?:window|base|button|text|field|area|check|radio|progress|slider|camera|text-list|drop-list|drop-down|panel|group-box|tab-panel|h1|h2|h3|h4|h5|box|image|init)(?![-!?\\\\w~])\"},{token:\"keyword.view.event\",regex:\"\\\\b(?:detect|on-detect|time|on-time|drawing|on-drawing|scroll|on-scroll|down|on-down|up|on-up|mid-down|on-mid-down|mid-up|on-mid-up|alt-down|on-alt-down|alt-up|on-alt-up|aux-down|on-aux-down|aux-up|on-aux-up|wheel|on-wheel|drag-start|on-drag-start|drag|on-drag|drop|on-drop|click|on-click|dbl-click|on-dbl-click|over|on-over|key|on-key|key-down|on-key-down|key-up|on-key-up|ime|on-ime|focus|on-focus|unfocus|on-unfocus|select|on-select|change|on-change|enter|on-enter|menu|on-menu|close|on-close|move|on-move|resize|on-resize|moving|on-moving|resizing|on-resizing|zoom|on-zoom|pan|on-pan|rotate|on-rotate|two-tap|on-two-tap|press-tap|on-press-tap|create|on-create|created|on-created)(?![-!?\\\\w~])\"},{token:\"keyword.view.option\",regex:\"\\\\b(?:all-over|center|color|default|disabled|down|flags|focus|font|font-color|font-name|font-size|hidden|hint|left|loose|name|no-border|now|rate|react|select|size|space)(?![-!?\\\\w~])\"},{token:\"constant.other.colour\",regex:\"\\\\b(?:Red|white|transparent|black|gray|aqua|beige|blue|brick|brown|coal|coffee|crimson|cyan|forest|gold|green|ivory|khaki|leaf|linen|magenta|maroon|mint|navy|oldrab|olive|orange|papaya|pewter|pink|purple|reblue|rebolor|sienna|silver|sky|snow|tanned|teal|violet|water|wheat|yello|yellow|glass)(?![-!?\\\\w~])\"},{token:\"variable.get-word\",regex:/\\:\\w[-\\w'*.?!]*/},{token:\"variable.set-word\",regex:/\\w[-\\w'*.?!]*\\:/},{token:\"variable.lit-word\",regex:/'\\w[-\\w'*.?!]*/},{token:\"variable.word\",regex:/\\b\\w+[-\\w'*.!?]*/},{caseInsensitive:!0}],string:[{token:\"string\",regex:/\"/,next:\"start\"},{defaultToken:\"string\"}],\"string.other\":[{token:\"string.other\",regex:/}/,next:\"start\"},{defaultToken:\"string.other\"}],tag:[{token:\"string.tag\",regex:/>/,next:\"start\"},{defaultToken:\"string.tag\"}],comment:[{token:\"comment\",regex:/}/,next:\"start\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.RedHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/red\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/red_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./red_highlight_rules\").RedHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=function(){this.HighlightRules=s,this.foldingRules=new o,this.$outdent=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"comment {\",end:\"}\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\[\\(]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/red\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-redshift.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"text\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),ace.define(\"ace/mode/redshift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/json_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./json_highlight_rules\").JsonHighlightRules,a=function(){var e=\"aes128|aes256|all|allowoverwrite|analyse|analyze|and|any|array|as|asc|authorization|backup|between|binary|blanksasnull|both|bytedict|bzip2|case|cast|check|collate|column|constraint|create|credentials|cross|current_date|current_time|current_timestamp|current_user|current_user_id|default|deferrable|deflate|defrag|delta|delta32k|desc|disable|distinct|do|else|emptyasnull|enable|encode|encrypt|encryption|end|except|explicit|false|for|foreign|freeze|from|full|globaldict256|globaldict64k|grant|group|gzip|having|identity|ignore|ilike|in|initially|inner|intersect|into|is|isnull|join|leading|left|like|limit|localtime|localtimestamp|lun|luns|lzo|lzop|minus|mostly13|mostly32|mostly8|natural|new|not|notnull|null|nulls|off|offline|offset|old|on|only|open|or|order|outer|overlaps|parallel|partition|percent|permissions|placing|primary|raw|readratio|recover|references|rejectlog|resort|restore|right|select|session_user|similar|some|sysdate|system|table|tag|tdes|text255|text32k|then|timestamp|to|top|trailing|true|truncatecolumns|union|unique|user|using|verbose|wallet|when|where|with|without\",t=\"current_schema|current_schemas|has_database_privilege|has_schema_privilege|has_table_privilege|age|current_time|current_timestamp|localtime|isfinite|now|ascii|get_bit|get_byte|octet_length|set_bit|set_byte|to_ascii|avg|count|listagg|max|min|stddev_samp|stddev_pop|sum|var_samp|var_pop|bit_and|bit_or|bool_and|bool_or|avg|count|cume_dist|dense_rank|first_value|last_value|lag|lead|listagg|max|median|min|nth_value|ntile|percent_rank|percentile_cont|percentile_disc|rank|ratio_to_report|row_number|case|coalesce|decode|greatest|least|nvl|nvl2|nullif|add_months|age|convert_timezone|current_date|timeofday|current_time|current_timestamp|date_cmp|date_cmp_timestamp|date_part_year|dateadd|datediff|date_part|date_trunc|extract|getdate|interval_cmp|isfinite|last_day|localtime|localtimestamp|months_between|next_day|now|sysdate|timestamp_cmp|timestamp_cmp_date|trunc|abs|acos|asin|atan|atan2|cbrt|ceiling|ceil|checksum|cos|cot|degrees|dexp|dlog1|dlog10|exp|floor|ln|log|mod|pi|power|radians|random|round|sin|sign|sqrt|tan|trunc|ascii|bpcharcmp|btrim|bttext_pattern_cmp|char_length|character_length|charindex|chr|concat|crc32|func_sha1|get_bit|get_byte|initcap|left|right|len|length|lower|lpad|rpad|ltrim|md5|octet_length|position|quote_ident|quote_literal|regexp_count|regexp_instr|regexp_replace|regexp_substr|repeat|replace|replicate|reverse|rtrim|set_bit|set_byte|split_part|strpos|strtol|substring|textlen|to_ascii|to_hex|translate|trim|upper|json_array_length|json_extract_array_element_text|json_extract_path_text|cast|convert|to_char|to_date|to_number|current_database|current_schema|current_schemas|current_user|current_user_id|has_database_privilege|has_schema_privilege|has_table_privilege|pg_backend_pid|pg_last_copy_count|pg_last_copy_id|pg_last_query_id|pg_last_unload_count|session_user|slice_num|user|version\",n=this.createKeywordMapper({\"support.function\":t,keyword:e},\"identifier\",!0),r=[{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"variable.language\",regex:'\".*?\"'},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:n,regex:\"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|~=|~>=~|~>~|~~|~~\\\\*\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}];this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"keyword.statementBegin\",regex:\"^[a-zA-Z]+\",next:\"statement\"},{token:\"support.buildin\",regex:\"^\\\\\\\\[\\\\S]+.*$\"}],statement:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentStatement\"},{token:\"statementEnd\",regex:\";\",next:\"start\"},{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"json-start\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$$\",next:\"dollarSql\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarStatementString\"}].concat(r),dollarSql:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentDollarSql\"},{token:\"string\",regex:\"^\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSqlString\"}].concat(r),comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],commentStatement:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"statement\"},{token:\"comment\",regex:\".+\"}],commentDollarSql:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"dollarSql\"},{token:\"comment\",regex:\".+\"}],dollarStatementString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\".+\"}],dollarSqlString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSql\"},{token:\"string\",regex:\".+\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.embedRules(u,\"json-\",[{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"statement\"}])};r.inherits(a,o),t.RedshiftHighlightRules=a}),ace.define(\"ace/mode/redshift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/redshift_highlight_rules\",\"ace/range\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./redshift_highlight_rules\").RedshiftHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){return e==\"start\"||e==\"keyword.statementEnd\"?\"\":this.$getIndent(t)},this.$id=\"ace/mode/redshift\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-rhtml.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){e||(e=\"text\"),this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:e,regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\s+\"},{token:\"nospell.\"+e,regex:\"\\\\w+\"}]}};r.inherits(o,s),t.TexHighlightRules=o}),ace.define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./tex_highlight_rules\").TexHighlightRules,u=function(){var e=i.arrayToMap(\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\".split(\"|\")),t=i.arrayToMap(\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|NA_complex_\".split(\"|\"));this.$rules={start:[{token:\"comment.sectionhead\",regex:\"#+(?!').*(?:----|====|####)\\\\s*$\"},{token:\"comment\",regex:\"#+'\",next:\"rd-start\"},{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:'[\"]',next:\"qqstring\"},{token:\"string\",regex:\"[']\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+L\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:TRUE|FALSE|T|F)\\\\b\"},{token:\"identifier\",regex:\"`.*?`\"},{onMatch:function(n){return e[n]?\"keyword\":t[n]?\"constant.language\":n==\"...\"||n.match(/^\\.\\.\\d+$/)?\"variable.language\":\"identifier\"},regex:\"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"},{token:\"keyword.operator\",regex:\"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"},{token:\"keyword.operator\",regex:\"%.*?%\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]};var n=(new o(\"comment\")).getRules();for(var r=0;r<n.start.length;r++)n.start[r].token+=\".virtual-comment\";this.addRules(n,\"rd-\"),this.$rules[\"rd-start\"].unshift({token:\"text\",regex:\"^\",next:\"start\"}),this.$rules[\"rd-start\"].unshift({token:\"keyword\",regex:\"@(?!@)[^ ]*\"}),this.$rules[\"rd-start\"].unshift({token:\"comment\",regex:\"@@\"}),this.$rules[\"rd-start\"].push({token:\"comment\",regex:\"[^%\\\\\\\\[({\\\\])}]+\"})};r.inherits(u,s),t.RHighlightRules=u}),ace.define(\"ace/mode/rhtml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/r_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./r_highlight_rules\").RHighlightRules,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){s.call(this),this.$rules.start.unshift({token:\"support.function.codebegin\",regex:\"^<!--\\\\s*begin.rcode\\\\s*(?:.*)\",next:\"r-start\"}),this.embedRules(i,\"r-\",[{token:\"support.function.codeend\",regex:\"^\\\\s*end.rcode\\\\s*-->\",next:\"start\"}],[\"start\"]),this.normalizeRules()};r.inherits(u,o),t.RHtmlHighlightRules=u}),ace.define(\"ace/mode/rhtml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/rhtml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./rhtml_highlight_rules\").RHtmlHighlightRules,o=function(e,t){i.call(this),this.$session=t,this.HighlightRules=s};r.inherits(o,i),function(){this.insertChunkInfo={value:\"<!--begin.rcode\\n\\nend.rcode-->\\n\",position:{row:0,column:15}},this.getLanguageMode=function(e){return this.$session.getState(e.row).match(/^r-/)?\"R\":\"HTML\"},this.$id=\"ace/mode/rhtml\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-rst.js",
    "content": "ace.define(\"ace/mode/rst_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e={title:\"markup.heading\",list:\"markup.heading\",table:\"constant\",directive:\"keyword.operator\",entity:\"string\",link:\"markup.underline.list\",bold:\"markup.bold\",italic:\"markup.italic\",literal:\"support.function\",comment:\"comment\"},t=\"(^|\\\\s|[\\\"'(<\\\\[{\\\\-/:])\",n=\"(?:$|(?=\\\\s|[\\\\\\\\.,;!?\\\\-/:\\\"')>\\\\]}]))\";this.$rules={start:[{token:e.title,regex:\"(^)([\\\\=\\\\-`:\\\\.'\\\"~\\\\^_\\\\*\\\\+#])(\\\\2{2,}\\\\s*$)\"},{token:[\"text\",e.directive,e.literal],regex:\"(^\\\\s*\\\\.\\\\. )([^: ]+::)(.*$)\",next:\"codeblock\"},{token:e.directive,regex:\"::$\",next:\"codeblock\"},{token:[e.entity,e.link],regex:\"(^\\\\.\\\\. _[^:]+:)(.*$)\"},{token:[e.entity,e.link],regex:\"(^__ )(https?://.*$)\"},{token:e.entity,regex:\"^\\\\.\\\\. \\\\[[^\\\\]]+\\\\] \"},{token:e.comment,regex:\"^\\\\.\\\\. .*$\",next:\"comment\"},{token:e.list,regex:\"^\\\\s*[\\\\*\\\\+-] \"},{token:e.list,regex:\"^\\\\s*(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\. \"},{token:e.list,regex:\"^\\\\s*\\\\(?(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\) \"},{token:e.table,regex:\"^={2,}(?: +={2,})+$\"},{token:e.table,regex:\"^\\\\+-{2,}(?:\\\\+-{2,})+\\\\+$\"},{token:e.table,regex:\"^\\\\+={2,}(?:\\\\+={2,})+\\\\+$\"},{token:[\"text\",e.literal],regex:t+\"(``)(?=\\\\S)\",next:\"code\"},{token:[\"text\",e.bold],regex:t+\"(\\\\*\\\\*)(?=\\\\S)\",next:\"bold\"},{token:[\"text\",e.italic],regex:t+\"(\\\\*)(?=\\\\S)\",next:\"italic\"},{token:e.entity,regex:\"\\\\|[\\\\w\\\\-]+?\\\\|\"},{token:e.entity,regex:\":[\\\\w-:]+:`\\\\S\",next:\"entity\"},{token:[\"text\",e.entity],regex:t+\"(_`)(?=\\\\S)\",next:\"entity\"},{token:e.entity,regex:\"_[A-Za-z0-9\\\\-]+?\"},{token:[\"text\",e.link],regex:t+\"(`)(?=\\\\S)\",next:\"link\"},{token:e.link,regex:\"[A-Za-z0-9\\\\-]+?__?\"},{token:e.link,regex:\"\\\\[[^\\\\]]+?\\\\]_\"},{token:e.link,regex:\"https?://\\\\S+\"},{token:e.table,regex:\"\\\\|\"}],codeblock:[{token:e.literal,regex:\"^ +.+$\",next:\"codeblock\"},{token:e.literal,regex:\"^$\",next:\"codeblock\"},{token:\"empty\",regex:\"\",next:\"start\"}],code:[{token:e.literal,regex:\"\\\\S``\"+n,next:\"start\"},{defaultToken:e.literal}],bold:[{token:e.bold,regex:\"\\\\S\\\\*\\\\*\"+n,next:\"start\"},{defaultToken:e.bold}],italic:[{token:e.italic,regex:\"\\\\S\\\\*\"+n,next:\"start\"},{defaultToken:e.italic}],entity:[{token:e.entity,regex:\"\\\\S`\"+n,next:\"start\"},{defaultToken:e.entity}],link:[{token:e.link,regex:\"\\\\S`__?\"+n,next:\"start\"},{defaultToken:e.link}],comment:[{token:e.comment,regex:\"^ +.+$\",next:\"comment\"},{token:e.comment,regex:\"^$\",next:\"comment\"},{token:\"empty\",regex:\"\",next:\"start\"}]}};r.inherits(o,s),t.RSTHighlightRules=o}),ace.define(\"ace/mode/rst\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rst_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./rst_highlight_rules\").RSTHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.type=\"text\",this.$id=\"ace/mode/rst\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-ruby.js",
    "content": "ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-rust.js",
    "content": "ace.define(\"ace/mode/rust_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=/\\\\(?:[nrt0'\"\\\\]|x[\\da-fA-F]{2}|u\\{[\\da-fA-F]{6}\\})/.source,o=function(){this.$rules={start:[{token:\"variable.other.source.rust\",regex:\"'[a-zA-Z_][a-zA-Z0-9_]*(?![\\\\'])\"},{token:\"string.quoted.single.source.rust\",regex:\"'(?:[^'\\\\\\\\]|\"+s+\")'\"},{token:\"identifier\",regex:/r#[a-zA-Z_][a-zA-Z0-9_]*\\b/},{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-1,t),\"string.quoted.raw.source.rust\"},regex:/r#*\"/,next:[{onMatch:function(e,t,n){var r=\"string.quoted.raw.source.rust\";return e.length>=n[1]?(e.length>n[1]&&(r=\"invalid\"),n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",r},regex:/\"#*/,next:\"start\"},{defaultToken:\"string.quoted.raw.source.rust\"}]},{token:\"string.quoted.double.source.rust\",regex:'\"',push:[{token:\"string.quoted.double.source.rust\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.source.rust\",regex:s},{defaultToken:\"string.quoted.double.source.rust\"}]},{token:[\"keyword.source.rust\",\"text\",\"entity.name.function.source.rust\"],regex:\"\\\\b(fn)(\\\\s+)((?:r#)?[a-zA-Z_][a-zA-Z0-9_]*)\"},{token:\"support.constant\",regex:\"\\\\b[a-zA-Z_][\\\\w\\\\d]*::\"},{token:\"keyword.source.rust\",regex:\"\\\\b(?:abstract|alignof|as|become|box|break|catch|continue|const|crate|default|do|dyn|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\\\b\"},{token:\"storage.type.source.rust\",regex:\"\\\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|u128|f16|f32|f64|i8|i16|i32|i64|i128|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\\\b\"},{token:\"variable.language.source.rust\",regex:\"\\\\bself\\\\b\"},{token:\"comment.line.doc.source.rust\",regex:\"//!.*$\"},{token:\"comment.line.double-dash.source.rust\",regex:\"//.*$\"},{token:\"comment.start.block.source.rust\",regex:\"/\\\\*\",stateName:\"comment\",push:[{token:\"comment.start.block.source.rust\",regex:\"/\\\\*\",push:\"comment\"},{token:\"comment.end.block.source.rust\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.source.rust\"}]},{token:\"keyword.operator\",regex:/\\$|[-=]>|[-+%^=!&|<>]=?|[*/](?![*/])=?/},{token:\"punctuation.operator\",regex:/[?:,;.]/},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"constant.language.source.rust\",regex:\"\\\\b(?:true|false|Some|None|Ok|Err)\\\\b\"},{token:\"support.constant.source.rust\",regex:\"\\\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\\\b\"},{token:\"meta.preprocessor.source.rust\",regex:\"\\\\b\\\\w\\\\(\\\\w\\\\)*!|#\\\\[[\\\\w=\\\\(\\\\)_]+\\\\]\\\\b\"},{token:\"constant.numeric.source.rust\",regex:/\\b(?:0x[a-fA-F0-9_]+|0o[0-7_]+|0b[01_]+|[0-9][0-9_]*(?!\\.))(?:[iu](?:size|8|16|32|64|128))?\\b/},{token:\"constant.numeric.source.rust\",regex:/\\b(?:[0-9][0-9_]*)(?:\\.[0-9][0-9_]*)?(?:[Ee][+-][0-9][0-9_]*)?(?:f32|f64)?\\b/}]},this.normalizeRules()};o.metaData={fileTypes:[\"rs\",\"rc\"],foldingStartMarker:\"^.*\\\\bfn\\\\s*(\\\\w+\\\\s*)?\\\\([^\\\\)]*\\\\)(\\\\s*\\\\{[^\\\\}]*)?\\\\s*$\",foldingStopMarker:\"^\\\\s*\\\\}\",name:\"Rust\",scopeName:\"source.rust\"},r.inherits(o,i),t.RustHighlightRules=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/rust\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rust_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./rust_highlight_rules\").RustHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\",nestable:!0},this.$quotes={'\"':'\"'},this.$id=\"ace/mode/rust\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-sass.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./css_highlight_rules\"),u=function(){var e=i.arrayToMap(o.supportType.split(\"|\")),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unquote\".split(\"|\")),n=i.arrayToMap(o.supportConstant.split(\"|\")),r=i.arrayToMap(o.supportConstantColor.split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),u=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":u.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),ace.define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=function(){s.call(this);var e=this.$rules.start;e[1].token==\"comment\"&&(e.splice(1,1,{onMatch:function(e,t,n){return n.unshift(this.next,-1,e.length-2,t),\"comment\"},regex:/^\\s*\\/\\*/,next:\"comment\"},{token:\"error.invalid\",regex:\"/\\\\*|[{;}]\"},{token:\"support.type\",regex:/^\\s*:[\\w\\-]+\\s/}),this.$rules.comment=[{regex:/^\\s*/,onMatch:function(e,t,n){return n[1]===-1&&(n[1]=Math.max(n[2],e.length-1)),e.length<=n[1]?(n.shift(),n.shift(),n.shift(),this.next=n.shift(),\"text\"):(this.next=\"\",\"comment\")},next:\"start\"},{defaultToken:\"comment\"}])};r.inherits(o,s),t.SassHighlightRules=o}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sass_highlight_rules\").SassHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/sass\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-scad.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/scad_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"module|if|else|for\",\"constant.language\":\"NULL\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},s.getStartRule(\"start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant\",regex:\"<[a-zA-Z0-9.]+>\"},{token:\"keyword\",regex:\"(?:use|include)\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(u,o),t.scadHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/scad\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scad_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scad_highlight_rules\").scadHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/scad\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-scala.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/scala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"case|default|do|else|for|if|match|while|throw|return|try|trye|catch|finally|yield|abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|null|override|package|private|protected|sealed|super|this|trait|type|val|var|with|assert|assume|require|print|println|printf|readLine|readBoolean|readByte|readShort|readChar|readInt|readLong|readFloat|readDouble\",t=\"true|false\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object|Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|Option|Array|Char|Byte|Int|Long|Nothing|App|Application|BufferedIterator|BigDecimal|BigInt|Console|Either|Enumeration|Equiv|Fractional|Function|IndexedSeq|Integral|Iterator|Map|Numeric|Nil|NotNull|Ordered|Ordering|PartialFunction|PartialOrdering|Product|Proxy|Range|Responder|Seq|Serializable|Set|Specializable|Stream|StringContext|Symbol|Traversable|TraversableOnce|Tuple|Vector|Pair|Triple\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"support.function\":n,\"constant.language\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"\"\"',next:\"tstring\"},{token:\"string\",regex:'\"(?=.)',next:\"string\"},{token:\"symbol.constant\",regex:\"'[\\\\w\\\\d_]+\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],string:[{token:\"escape\",regex:'\\\\\\\\\"'},{token:\"string\",regex:'\"',next:\"start\"},{token:\"string.invalid\",regex:'[^\"\\\\\\\\]*$',next:\"start\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'}],tstring:[{token:\"string\",regex:'\"{3,5}',next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.ScalaHighlightRules=o}),ace.define(\"ace/mode/scala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/scala_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./scala_highlight_rules\").ScalaHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/scala\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-scheme.js",
    "content": "ace.define(\"ace/mode/scheme_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"case|do|let|loop|if|else|when\",t=\"eq?|eqv?|equal?|and|or|not|null?\",n=\"#t|#f\",r=\"cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load\",i=this.createKeywordMapper({\"keyword.control\":e,\"keyword.operator\":t,\"constant.language\":n,\"support.function\":r},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\";.*$\"},{token:[\"storage.type.function-type.scheme\",\"text\",\"entity.name.function.scheme\"],regex:\"(?:\\\\b(?:(define|define-syntax|define-macro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"},{token:\"punctuation.definition.constant.character.scheme\",regex:\"#:\\\\S+\"},{token:[\"punctuation.definition.variable.scheme\",\"variable.other.global.scheme\",\"punctuation.definition.variable.scheme\"],regex:\"(\\\\*)(\\\\S*)(\\\\*)\"},{token:\"constant.numeric\",regex:\"#[xXoObB][0-9a-fA-F]+\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\"},{token:i,regex:\"[a-zA-Z_#][a-zA-Z0-9_\\\\-\\\\?\\\\!\\\\*]*\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"}],qqstring:[{token:\"constant.character.escape.scheme\",regex:\"\\\\\\\\.\"},{token:\"string\",regex:'[^\"\\\\\\\\]+',merge:!0},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\",merge:!0},{token:\"string\",regex:'\"|$',next:\"start\",merge:!0}]}};r.inherits(s,i),t.SchemeHighlightRules=s}),ace.define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\)/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\))/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\\s+)/);return t?t[1]:\"\"}}).call(i.prototype),t.MatchingParensOutdent=i}),ace.define(\"ace/mode/scheme\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scheme_highlight_rules\",\"ace/mode/matching_parens_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scheme_highlight_rules\").SchemeHighlightRules,o=e(\"./matching_parens_outdent\").MatchingParensOutdent,u=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.minorIndentFunctions=[\"define\",\"lambda\",\"define-macro\",\"define-syntax\",\"syntax-rules\",\"define-record-type\",\"define-structure\"],this.$toIndent=function(e){return e.split(\"\").map(function(e){return/\\s/.exec(e)?e:\" \"}).join(\"\")},this.$calculateIndent=function(e,t){var n=this.$getIndent(e),r=0,i,s;for(var o=e.length-1;o>=0;o--){s=e[o],s===\"(\"?(r--,i=!0):s===\"(\"||s===\"[\"||s===\"{\"?(r--,i=!1):(s===\")\"||s===\"]\"||s===\"}\")&&r++;if(r<0)break}if(!(r<0&&i))return r<0&&!i?this.$toIndent(e.substring(0,o+1)):r>0?(n=n.substring(0,n.length-t.length),n):n;o+=1;var u=o,a=\"\";for(;;){s=e[o];if(s===\" \"||s===\"\t\")return this.minorIndentFunctions.indexOf(a)!==-1?this.$toIndent(e.substring(0,u-1)+t):this.$toIndent(e.substring(0,o+1));if(s===undefined)return this.$toIndent(e.substring(0,u-1)+t);a+=e[o],o++}},this.getNextLineIndent=function(e,t,n){return this.$calculateIndent(t,n)},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/scheme\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-scss.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./css_highlight_rules\"),u=function(){var e=i.arrayToMap(o.supportType.split(\"|\")),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unquote\".split(\"|\")),n=i.arrayToMap(o.supportConstant.split(\"|\")),r=i.arrayToMap(o.supportConstantColor.split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),u=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":u.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"./css_completions\").CssCompletions,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new f,this.foldingRules=new a};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id=\"ace/mode/scss\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-sh.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-sjs.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/sjs_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=new i({noES6:!0}),t=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\",n=function(e){return e.isContextAware=!0,e},r=function(e){return{token:e.token,regex:e.regex,next:n(function(t,n){return n.length===0&&n.unshift(t),n.unshift(e.next),e.next})}},s=function(e){return{token:e.token,regex:e.regex,next:n(function(e,t){return t.shift(),t[0]||\"start\"})}};this.$rules=e.$rules,this.$rules.no_regex=[{token:\"keyword\",regex:\"(waitfor|or|and|collapse|spawn|retract)\\\\b\"},{token:\"keyword.operator\",regex:\"(->|=>|\\\\.\\\\.)\"},{token:\"variable.language\",regex:\"(hold|default)\\\\b\"},r({token:\"string\",regex:\"`\",next:\"bstring\"}),r({token:\"string\",regex:'\"',next:\"qqstring\"}),r({token:\"string\",regex:'\"',next:\"qqstring\"}),{token:[\"paren.lparen\",\"text\",\"paren.rparen\"],regex:\"(\\\\{)(\\\\s*)(\\\\|)\",next:\"block_arguments\"}].concat(this.$rules.no_regex),this.$rules.block_arguments=[{token:\"paren.rparen\",regex:\"\\\\|\",next:\"no_regex\"}].concat(this.$rules.function_arguments),this.$rules.bstring=[{token:\"constant.language.escape\",regex:t},{token:\"string\",regex:\"\\\\\\\\$\",next:\"bstring\"},r({token:\"paren.lparen\",regex:\"\\\\$\\\\{\",next:\"string_interp\"}),r({token:\"paren.lparen\",regex:\"\\\\$\",next:\"bstring_interp_single\"}),s({token:\"string\",regex:\"`\"}),{defaultToken:\"string\"}],this.$rules.qqstring=[{token:\"constant.language.escape\",regex:t},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},r({token:\"paren.lparen\",regex:\"#\\\\{\",next:\"string_interp\"}),s({token:\"string\",regex:'\"'}),{defaultToken:\"string\"}];var o=[];for(var u=0;u<this.$rules.no_regex.length;u++){var a=this.$rules.no_regex[u],f=String(a.token);f.indexOf(\"paren\")==-1&&(!a.next||a.next.isContextAware)&&o.push(a)}this.$rules.string_interp=[s({token:\"paren.rparen\",regex:\"\\\\}\"}),r({token:\"paren.lparen\",regex:\"{\",next:\"string_interp\"})].concat(o),this.$rules.bstring_interp_single=[{token:[\"identifier\",\"paren.lparen\"],regex:\"(\\\\w+)(\\\\()\",next:\"bstring_interp_single_call\"},s({token:\"identifier\",regex:\"\\\\w*\"})],this.$rules.bstring_interp_single_call=[r({token:\"paren.lparen\",regex:\"\\\\(\",next:\"bstring_interp_single_call\"}),s({token:\"paren.rparen\",regex:\"\\\\)\"})].concat(o)};r.inherits(o,s),t.SJSHighlightRules=o}),ace.define(\"ace/mode/sjs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/sjs_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./sjs_highlight_rules\").SJSHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/sjs\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-slim.js",
    "content": "ace.define(\"ace/mode/slim_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"keyword\",regex:/^(\\s*)(\\w+):\\s*/,onMatch:function(e,t,n,r){var i=/^\\s*/.exec(r)[0],s=e.match(/^(\\s*)(\\w+):/),o=s[2];return/^(javascript|ruby|coffee|markdown|css|scss|sass|less)$/.test(o)||(o=\"\"),n.unshift(\"language-embed\",[],[i,o],t),this.token},stateName:\"language-embed\",next:[{token:\"string\",regex:/^(\\s*)/,onMatch:function(e,t,n,r){var i=n[2][0];return i.length>=e.length?(n.splice(0,3),this.next=n.shift(),this.token):(this.next=\"\",[{type:\"text\",value:i}])},next:\"\"},{token:\"string\",regex:/.+/,onMatch:function(e,t,n,i){var s=n[2][0],o=n[2][1],u=n[1];if(r[o]){var a=r[o].getTokenizer().getLineTokens(i.slice(s.length),u.slice(0));return n[1]=a.state,a.tokens}return this.token}}]},{token:\"constant.begin.javascript.filter.slim\",regex:\"^(\\\\s*)():$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(ruby):$\"},{token:\"constant.begin.coffeescript.filter.slim\",regex:\"^(\\\\s*)():$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(markdown):$\"},{token:\"constant.begin.css.filter.slim\",regex:\"^(\\\\s*)():$\"},{token:\"constant.begin.scss.filter.slim\",regex:\"^(\\\\s*)():$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(sass):$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(less):$\"},{token:\"constant.begin..filter.slim\",regex:\"^(\\\\s*)(erb):$\"},{token:\"keyword.html.tags.slim\",regex:\"^(\\\\s*)((:?\\\\*(\\\\w)+)|doctype html|abbr|acronym|address|applet|area|article|aside|audio|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dialog|dfn|dir|div|dl|dt|embed|fieldset|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|link|li|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|source|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video|xmp|b|u|s|em|a)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)?\\\\b\"},{token:\"keyword.slim\",regex:\"^(\\\\s*)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)\"},{token:\"string\",regex:/^(\\s*)('|\\||\\/|(\\/!))\\s*/,onMatch:function(e,t,n,r){var i=/^\\s*/.exec(r)[0];return n.length<1?n.push(this.next):n[0]=\"mlString\",n.length<2?n.push(i.length):n[1]=i.length,this.token},next:\"mlString\"},{token:\"keyword.control.slim\",regex:\"^(\\\\s*)(\\\\-|==|=)\",push:[{token:\"control.end.slim\",regex:\"$\",next:\"pop\"},{include:\"rubyline\"},{include:\"misc\"}]},{token:\"paren\",regex:\"\\\\(\",push:[{token:\"paren\",regex:\"\\\\)\",next:\"pop\"},{include:\"misc\"}]},{token:\"paren\",regex:\"\\\\[\",push:[{token:\"paren\",regex:\"\\\\]\",next:\"pop\"},{include:\"misc\"}]},{include:\"misc\"}],mlString:[{token:\"indent\",regex:/^\\s*/,onMatch:function(e,t,n){var r=n[1];return r>=e.length?(this.next=\"start\",n.splice(0)):this.next=\"mlString\",this.token},next:\"start\"},{defaultToken:\"string\"}],rubyline:[{token:\"keyword.operator.ruby.embedded.slim\",regex:\"(==|=)(<>|><|<'|'<|<|>)?|-\"},{token:\"list.ruby.operators.slim\",regex:\"(\\\\b)(for|in|do|if|else|elsif|unless|while|yield|not|and|or)\\\\b\"},{token:\"string\",regex:\"['](.)*?[']\"},{token:\"string\",regex:'[\"](.)*?[\"]'}],misc:[{token:\"class.variable.slim\",regex:\"\\\\@([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:\"list.meta.slim\",regex:\"(\\\\b)(true|false|nil)(\\\\b)\"},{token:\"keyword.operator.equals.slim\",regex:\"=\"},{token:\"string\",regex:\"['](.)*?[']\"},{token:\"string\",regex:'[\"](.)*?[\"]'}]},this.normalizeRules()};i.inherits(o,s),t.SlimHighlightRules=o}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../config\").$modes,i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(e){return\"(?:[^\"+s.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},f=function(){u.call(this);var e={token:\"support.function\",regex:/^\\s*(```+[^`]*|~~~+[^~]*)$/,onMatch:function(e,t,n,i){var s=e.match(/^(\\s*)([`~]+)(.*)/),o=/[\\w-]+|$/.exec(s[3])[0];return r[o]||(o=\"\"),n.unshift(\"githubblock\",[],[s[1],s[2],o],t),this.token},next:\"githubblock\"},t=[{token:\"support.function\",regex:\".*\",onMatch:function(e,t,n,i){var s=n[1],o=n[2][0],u=n[2][1],a=n[2][2],f=/^(\\s*)(`+|~+)\\s*$/.exec(e);if(f&&f[1].length<o.length+3&&f[2].length>=u.length&&f[2][0]==u[0])return n.splice(0,3),this.next=n.shift(),this.token;this.next=\"\";if(a&&r[a]){var l=r[a].getTokenizer().getLineTokens(e,s.slice(0));return n[1]=l.state,l.tokens}return this.token}}];this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s|$)/,next:\"header\"},e,{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\s*\\\\[)(\"+a(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\!?\\\\[)(\"+a(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+a('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},e,{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:t}),this.normalizeRules()};i.inherits(f,o),t.MarkdownHighlightRules=f}),ace.define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:[=-]+\\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]==\"`\"?e.bgTokenizer.getState(n)==\"start\"?\"end\":\"start\":\"start\":\"\"},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}function h(){var e=f.value[0];return e==\"=\"?6:e==\"-\"?5:7-f.value.search(/[^#]|$/)}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;if(r[0]==\"`\"){if(e.bgTokenizer.getState(n)!==\"start\"){while(++n<o){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(u,i,n,0)}while(n-->0){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(n,r.length,u,0)}var f,c=\"markup.heading\";if(l(n)){var p=h();while(++n<o){if(!l(n))continue;var d=h();if(d>=p)break}a=n-(!f||[\"=\",\"-\"].indexOf(f.value[0])==-1?1:2);if(a>u)while(a>u&&/^\\s*$/.test(e.getLine(a)))a--;if(a>u){var v=e.getLine(a).length;return new s(u,i,a,v)}}}}.call(o.prototype)}),ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:\"+l+\"(?==))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string.start\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$`\"\\\\]|$)/},{include:\"variables\"},{token:\"keyword.operator\",regex:/`/},{token:\"string.end\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"\\\\$'\",push:[{token:\"constant.language.escape\",regex:/\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:[\"keyword\",\"text\",\"text\",\"text\",\"variable\"],regex:/(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{include:\"variables\"},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"},{token:\"punctuation.operator\",regex:\";\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"paren.rparen\",regex:\"[\\\\)\\\\}]\",next:\"pop\"}],variables:[{token:\"variable\",regex:/(\\$)(\\w+)/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\()/,push:\"start\"},{token:[\"variable\",\"paren.lparen\",\"keyword.operator\",\"variable\",\"keyword.operator\"],regex:/(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,push:\"start\"},{token:\"variable\",regex:/\\$[*@#?\\-$!0_]/},{token:[\"variable\",\"paren.lparen\"],regex:/(\\$)(\\{)/,push:\"start\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),ace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f}),ace.define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript\").Mode,o=e(\"./xml\").Mode,u=e(\"./html\").Mode,a=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,f=e(\"./folding/markdown\").FoldMode,l=function(){this.HighlightRules=a,this.createModeDelegates({javascript:e(\"./javascript\").Mode,html:e(\"./html\").Mode,bash:e(\"./sh\").Mode,sh:e(\"./sh\").Mode,xml:e(\"./xml\").Mode,css:e(\"./css\").Mode}),this.foldingRules=new f,this.$behaviour=this.$defaultBehaviour};r.inherits(l,i),function(){this.type=\"text\",this.blockComment={start:\"<!--\",end:\"-->\"},this.getNextLineIndent=function(e,t,n){if(e==\"listblock\"){var r=/^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(t);if(!r)return\"\";var i=r[2];return i||(i=parseInt(r[3],10)+1+\".\"),r[1]+i+r[4]}return this.$getIndent(t)},this.$id=\"ace/mode/markdown\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=\"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\",t=\"this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|own|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes|yield|export|import|default\",n=\"true|false|null|undefined|NaN|Infinity\",r=\"case|const|function|var|void|with|enum|implements|interface|let|package|private|protected|public|static\",i=\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\",s=\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|\",o=\"window|arguments|prototype|document\",u=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"invalid.illegal\":r,\"language.support.class\":i,\"language.support.function\":s,\"variable.language\":o},\"identifier\"),a={token:[\"paren.lparen\",\"variable.parameter\",\"paren.rparen\",\"text\",\"storage.type\"],regex:/(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source},f=/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"},{stateName:\"qdoc\",token:\"string\",regex:\"'''\",next:[{token:\"string\",regex:\"'''\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqdoc\",token:\"string\",regex:'\"\"\"',next:[{token:\"string\",regex:'\"\"\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qstring\",token:\"string\",regex:\"'\",next:[{token:\"string\",regex:\"'\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqstring\",token:\"string.start\",regex:'\"',next:[{token:\"string.end\",regex:'\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"js\",token:\"string\",regex:\"`\",next:[{token:\"string\",regex:\"`\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{regex:\"[{}]\",onMatch:function(e,t,n){this.next=\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift()||\"\";if(this.next.indexOf(\"string\")!=-1)return\"paren.string\"}return\"paren\"}},{token:\"string.regex\",regex:\"///\",next:\"heregex\"},{token:\"string.regex\",regex:/(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/},{token:\"comment\",regex:\"###(?!#)\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:[\"punctuation.operator\",\"text\",\"identifier\"],regex:\"(\\\\.)(\\\\s*)(\"+r+\")\"},{token:\"punctuation.operator\",regex:\"\\\\.{1,3}\"},{token:[\"keyword\",\"text\",\"language.support.class\",\"text\",\"keyword\",\"text\",\"language.support.class\"],regex:\"(class)(\\\\s+)(\"+e+\")(?:(\\\\s+)(extends)(\\\\s+)(\"+e+\"))?\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\"].concat(a.token),regex:\"(\"+e+\")(\\\\s*)([=:])(\\\\s*)\"+a.regex},a,{token:\"variable\",regex:\"@(?:\"+e+\")?\"},{token:u,regex:e},{token:\"punctuation.operator\",regex:\"\\\\,|\\\\.\"},{token:\"storage.type\",regex:\"[\\\\-=]>\"},{token:\"keyword.operator\",regex:\"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"},{token:\"paren.lparen\",regex:\"[({[]\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?///[imgy]{0,4}\",next:\"start\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{token:\"string.regex\",regex:\"\\\\S+\"}],comment:[{token:\"comment\",regex:\"###\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function l(){this.HighlightRules=r,this.$outdent=new i,this.foldingRules=new s}var r=e(\"./coffee_highlight_rules\").CoffeeHighlightRules,i=e(\"./matching_brace_outdent\").MatchingBraceOutdent,s=e(\"./folding/coffee\").FoldMode,o=e(\"../range\").Range,u=e(\"./text\").Mode,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"../lib/oop\");f.inherits(l,u),function(){var e=/(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;this.lineCommentStart=\"#\",this.blockComment={start:\"###\",end:\"###\"},this.getNextLineIndent=function(t,n,r){var i=this.$getIndent(n),s=this.getTokenizer().getLineTokens(n,t).tokens;return(!s.length||s[s.length-1].type!==\"comment\")&&t===\"start\"&&e.test(n)&&(i+=r),i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/coffee_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/coffee\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./css_highlight_rules\"),u=function(){var e=i.arrayToMap(o.supportType.split(\"|\")),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unquote\".split(\"|\")),n=i.arrayToMap(o.supportConstant.split(\"|\")),r=i.arrayToMap(o.supportConstantColor.split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),u=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":u.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),ace.define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"./css_completions\").CssCompletions,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new f,this.foldingRules=new a};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id=\"ace/mode/scss\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=function(){s.call(this);var e=this.$rules.start;e[1].token==\"comment\"&&(e.splice(1,1,{onMatch:function(e,t,n){return n.unshift(this.next,-1,e.length-2,t),\"comment\"},regex:/^\\s*\\/\\*/,next:\"comment\"},{token:\"error.invalid\",regex:\"/\\\\*|[{;}]\"},{token:\"support.type\",regex:/^\\s*:[\\w\\-]+\\s/}),this.$rules.comment=[{regex:/^\\s*/,onMatch:function(e,t,n){return n[1]===-1&&(n[1]=Math.max(n[2],e.length-1)),e.length<=n[1]?(n.shift(),n.shift(),n.shift(),this.next=n.shift(),\"text\"):(this.next=\"\",\"comment\")},next:\"start\"},{defaultToken:\"comment\"}])};r.inherits(o,s),t.SassHighlightRules=o}),ace.define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sass_highlight_rules\").SassHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/sass\"}.call(u.prototype),t.Mode=u}),ace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./css_highlight_rules\"),o=function(){var e=\"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|or|and|when|not\",t=e.split(\"|\"),n=s.supportType.split(\"|\"),r=this.createKeywordMapper({\"support.constant\":s.supportConstant,keyword:e,\"support.constant.color\":s.supportConstantColor,\"support.constant.fonts\":s.supportConstantFonts},\"identifier\",!0),i=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+i+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:i},{token:[\"support.function\",\"paren.lparen\",\"string\",\"paren.rparen\"],regex:\"(url)(\\\\()(.*)(\\\\))\"},{token:[\"support.function\",\"paren.lparen\"],regex:\"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"},{token:function(e){return t.indexOf(e.toLowerCase())>-1?\"keyword\":\"variable\"},regex:\"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"},{token:\"variable\",regex:\"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"},{token:function(e,t){return n.indexOf(e.toLowerCase())>-1?[\"support.type.property\",\"text\"]:[\"support.type.unknownProperty\",\"text\"]},regex:\"([a-z0-9-_]+)(\\\\s*:)\"},{token:\"keyword\",regex:\"&\"},{token:r,regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z_][a-z0-9-_]*\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(o,i),t.LessHighlightRules=o}),ace.define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./less_highlight_rules\").LessHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./css_completions\").CssCompletions,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(\"ruleset\",t,n,r)},this.$id=\"ace/mode/less\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},h=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/slim\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/slim_highlight_rules\",\"ace/mode/javascript\",\"ace/mode/markdown\",\"ace/mode/coffee\",\"ace/mode/scss\",\"ace/mode/sass\",\"ace/mode/less\",\"ace/mode/ruby\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./slim_highlight_rules\").SlimHighlightRules,o=function(){i.call(this),this.HighlightRules=s,this.createModeDelegates({javascript:e(\"./javascript\").Mode,markdown:e(\"./markdown\").Mode,coffee:e(\"./coffee\").Mode,scss:e(\"./scss\").Mode,sass:e(\"./sass\").Mode,less:e(\"./less\").Mode,ruby:e(\"./ruby\").Mode,css:e(\"./css\").Mode})};r.inherits(o,i),function(){this.$id=\"ace/mode/slim\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-smarty.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/smarty_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=function(){i.call(this);var e={start:[{include:\"#comments\"},{include:\"#blocks\"}],\"#blocks\":[{token:\"punctuation.section.embedded.begin.smarty\",regex:\"\\\\{%?\",push:[{token:\"punctuation.section.embedded.end.smarty\",regex:\"%?\\\\}\",next:\"pop\"},{include:\"#strings\"},{include:\"#variables\"},{include:\"#lang\"},{defaultToken:\"source.smarty\"}]}],\"#comments\":[{token:[\"punctuation.definition.comment.smarty\",\"comment.block.smarty\"],regex:\"(\\\\{%?)(\\\\*)\",push:[{token:\"comment.block.smarty\",regex:\"\\\\*%?\\\\}\",next:\"pop\"},{defaultToken:\"comment.block.smarty\"}]}],\"#lang\":[{token:\"keyword.operator.smarty\",regex:\"(?:!=|!|<=|>=|<|>|===|==|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod)\\\\b\"},{token:\"constant.language.smarty\",regex:\"\\\\b(?:TRUE|FALSE|true|false)\\\\b\"},{token:\"keyword.control.smarty\",regex:\"\\\\b(?:if|else|elseif|foreach|foreachelse|section|switch|case|break|default)\\\\b\"},{token:\"variable.parameter.smarty\",regex:\"\\\\b[a-zA-Z]+=\"},{token:\"support.function.built-in.smarty\",regex:\"\\\\b(?:capture|config_load|counter|cycle|debug|eval|fetch|include_php|include|insert|literal|math|strip|rdelim|ldelim|assign|constant|block|html_[a-z_]*)\\\\b\"},{token:\"support.function.variable-modifier.smarty\",regex:\"\\\\|(?:capitalize|cat|count_characters|count_paragraphs|count_sentences|count_words|date_format|default|escape|indent|lower|nl2br|regex_replace|replace|spacify|string_format|strip_tags|strip|truncate|upper|wordwrap)\"}],\"#strings\":[{token:\"punctuation.definition.string.begin.smarty\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.smarty\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.smarty\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.smarty\"}]},{token:\"punctuation.definition.string.begin.smarty\",regex:'\"',push:[{token:\"punctuation.definition.string.end.smarty\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.smarty\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.smarty\"}]}],\"#variables\":[{token:[\"punctuation.definition.variable.smarty\",\"variable.other.global.smarty\"],regex:\"\\\\b(\\\\$)(Smarty\\\\.)\"},{token:[\"punctuation.definition.variable.smarty\",\"variable.other.smarty\"],regex:\"(\\\\$)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.smarty\",\"variable.other.property.smarty\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.smarty\",\"meta.function-call.object.smarty\",\"punctuation.definition.variable.smarty\",\"variable.other.smarty\",\"punctuation.definition.variable.smarty\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))\"}]},t=e.start;for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],t);Object.keys(e).forEach(function(t){this.$rules[t]||(this.$rules[t]=e[t])},this),this.normalizeRules()};s.metaData={fileTypes:[\"tpl\"],foldingStartMarker:\"\\\\{%?\",foldingStopMarker:\"%?\\\\}\",name:\"Smarty\",scopeName:\"text.html.smarty\"},r.inherits(s,i),t.SmartyHighlightRules=s}),ace.define(\"ace/mode/smarty\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/smarty_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./smarty_highlight_rules\").SmartyHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/smarty\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-snippets.js",
    "content": "ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME\";this.$rules={start:[{token:\"constant.language.escape\",regex:/\\\\[\\$}`\\\\]/},{token:\"keyword\",regex:\"\\\\$(?:TM_)?(?:\"+e+\")\\\\b\"},{token:\"variable\",regex:\"\\\\$\\\\w+\"},{onMatch:function(e,t,n){return n[1]?n[1]++:n.unshift(t,1),this.tokenName},tokenName:\"markup.list\",regex:\"\\\\${\",next:\"varDecl\"},{onMatch:function(e,t,n){return n[1]?(n[1]--,n[1]||n.splice(0,2),this.tokenName):\"text\"},tokenName:\"markup.list\",regex:\"}\"},{token:\"doc.comment\",regex:/^\\${2}-{5,}$/}],varDecl:[{regex:/\\d+\\b/,token:\"constant.numeric\"},{token:\"keyword\",regex:\"(?:TM_)?(?:\"+e+\")\\\\b\"},{token:\"variable\",regex:\"\\\\w+\"},{regex:/:/,token:\"punctuation.operator\",next:\"start\"},{regex:/\\//,token:\"string.regex\",next:\"regexp\"},{regex:\"\",next:\"start\"}],regexp:[{regex:/\\\\./,token:\"escape\"},{regex:/\\[/,token:\"regex.start\",next:\"charClass\"},{regex:\"/\",token:\"string.regex\",next:\"format\"},{token:\"string.regex\",regex:\".\"}],charClass:[{regex:\"\\\\.\",token:\"escape\"},{regex:\"\\\\]\",token:\"regex.end\",next:\"regexp\"},{token:\"string.regex\",regex:\".\"}],format:[{regex:/\\\\[ulULE]/,token:\"keyword\"},{regex:/\\$\\d+/,token:\"variable\"},{regex:\"/[gim]*:?\",token:\"string.regex\",next:\"start\"},{token:\"string\",regex:\".\"}]}};r.inherits(o,s),t.SnippetHighlightRules=o;var u=function(){this.$rules={start:[{token:\"text\",regex:\"^\\\\t\",next:\"sn-start\"},{token:\"invalid\",regex:/^ \\s*/},{token:\"comment\",regex:/^#.*/},{token:\"constant.language.escape\",regex:\"^regex \",next:\"regex\"},{token:\"constant.language.escape\",regex:\"^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\\\b\"}],regex:[{token:\"text\",regex:\"\\\\.\"},{token:\"keyword\",regex:\"/\"},{token:\"empty\",regex:\"$\",next:\"start\"}]},this.embedRules(o,\"sn-\",[{token:\"text\",regex:\"^\\\\t\",next:\"sn-start\"},{onMatch:function(e,t,n){return n.splice(n.length),this.tokenName},tokenName:\"text\",regex:\"^(?!\t)\",next:\"start\"}])};r.inherits(u,s),t.SnippetGroupHighlightRules=u;var a=e(\"./folding/coffee\").FoldMode,f=function(){this.HighlightRules=u,this.foldingRules=new a,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){this.$indentWithTabs=!0,this.lineCommentStart=\"#\",this.$id=\"ace/mode/snippets\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-soy_template.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/soy_template_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=function(){i.call(this);var e={start:[{include:\"#template\"},{include:\"#if\"},{include:\"#comment-line\"},{include:\"#comment-block\"},{include:\"#comment-doc\"},{include:\"#call\"},{include:\"#css\"},{include:\"#param\"},{include:\"#print\"},{include:\"#msg\"},{include:\"#for\"},{include:\"#foreach\"},{include:\"#switch\"},{include:\"#tag\"},{include:\"text.html.basic\"}],\"#call\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.call.soy\"],regex:\"(\\\\{/?)(\\\\s*)(?=call|delcall)\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{token:[\"entity.name.tag.soy\",\"variable.parameter.soy\"],regex:\"(call|delcall)(\\\\s+[\\\\.\\\\w]+)\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\"],regex:\"\\\\b(data)(\\\\s*)(=)\"},{defaultToken:\"meta.tag.call.soy\"}]}],\"#comment-line\":[{token:[\"comment.line.double-slash.soy\",\"comment.line.double-slash.soy\"],regex:\"(//)(.*$)\"}],\"#comment-block\":[{token:\"punctuation.definition.comment.begin.soy\",regex:\"/\\\\*(?!\\\\*)\",push:[{token:\"punctuation.definition.comment.end.soy\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.soy\"}]}],\"#comment-doc\":[{token:\"punctuation.definition.comment.begin.soy\",regex:\"/\\\\*\\\\*(?!/)\",push:[{token:\"punctuation.definition.comment.end.soy\",regex:\"\\\\*/\",next:\"pop\"},{token:[\"support.type.soy\",\"text\",\"variable.parameter.soy\"],regex:\"(@param|@param\\\\?)(\\\\s+)(\\\\w+)\"},{defaultToken:\"comment.block.documentation.soy\"}]}],\"#css\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.css.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(css)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:\"support.constant.soy\",regex:\"\\\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\\\b\"},{defaultToken:\"meta.tag.css.soy\"}]}],\"#for\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.for.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(for)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword.operator.soy\",regex:\"\\\\bin\\\\b\"},{token:\"support.function.soy\",regex:\"\\\\brange\\\\b\"},{include:\"#variable\"},{include:\"#number\"},{include:\"#primitive\"},{defaultToken:\"meta.tag.for.soy\"}]}],\"#foreach\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.foreach.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(foreach)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword.operator.soy\",regex:\"\\\\bin\\\\b\"},{include:\"#variable\"},{defaultToken:\"meta.tag.foreach.soy\"}]}],\"#function\":[{token:\"support.function.soy\",regex:\"\\\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\\\b\"}],\"#if\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.if.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(if|elseif)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{include:\"#operator\"},{include:\"#function\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{defaultToken:\"meta.tag.if.soy\"}]}],\"#namespace\":[{token:[\"entity.name.tag.soy\",\"text\",\"variable.parameter.soy\"],regex:\"(namespace|delpackage)(\\\\s+)([\\\\w\\\\.]+)\"}],\"#number\":[{token:\"constant.numeric\",regex:\"[\\\\d]+\"}],\"#operator\":[{token:\"keyword.operator.soy\",regex:\"==|!=|\\\\band\\\\b|\\\\bor\\\\b|\\\\bnot\\\\b|-|\\\\+|/|\\\\?:\"}],\"#param\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.param.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(param)\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\"],regex:\"\\\\b([\\\\w]+)(\\\\s*)((?::)?)\"},{defaultToken:\"meta.tag.param.soy\"}]}],\"#primitive\":[{token:\"constant.language.soy\",regex:\"\\\\b(?:null|false|true)\\\\b\"}],\"#msg\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.msg.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(msg)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\"],regex:\"\\\\b(meaning|desc)(\\\\s*)(=)\"},{defaultToken:\"meta.tag.msg.soy\"}]}],\"#print\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.print.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(print)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{include:\"#print-parameter\"},{include:\"#number\"},{include:\"#primitive\"},{include:\"#attribute-lookup\"},{defaultToken:\"meta.tag.print.soy\"}]}],\"#print-parameter\":[{token:\"keyword.operator.soy\",regex:\"\\\\|\"},{token:\"variable.parameter.soy\",regex:\"noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate\"}],\"#special-character\":[{token:\"support.constant.soy\",regex:\"\\\\bsp\\\\b|\\\\bnil\\\\b|\\\\\\\\r|\\\\\\\\n|\\\\\\\\t|\\\\blb\\\\b|\\\\brb\\\\b\"}],\"#string-quoted-double\":[{token:\"string.quoted.double\",regex:'\"[^\"]*\"'}],\"#string-quoted-single\":[{token:\"string.quoted.single\",regex:\"'[^']*'\"}],\"#switch\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.switch.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(switch|case)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{include:\"#function\"},{include:\"#number\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{defaultToken:\"meta.tag.switch.soy\"}]}],\"#attribute-lookup\":[{token:\"punctuation.definition.attribute-lookup.begin.soy\",regex:\"\\\\[\",push:[{token:\"punctuation.definition.attribute-lookup.end.soy\",regex:\"\\\\]\",next:\"pop\"},{include:\"#variable\"},{include:\"#function\"},{include:\"#operator\"},{include:\"#number\"},{include:\"#primitive\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"}]}],\"#tag\":[{token:\"punctuation.definition.tag.begin.soy\",regex:\"\\\\{\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#namespace\"},{include:\"#variable\"},{include:\"#special-character\"},{include:\"#tag-simple\"},{include:\"#function\"},{include:\"#operator\"},{include:\"#attribute-lookup\"},{include:\"#number\"},{include:\"#primitive\"},{include:\"#print-parameter\"}]}],\"#tag-simple\":[{token:\"entity.name.tag.soy\",regex:\"{{\\\\s*(?:literal|else|ifempty|default)\\\\s*(?=\\\\})\"}],\"#template\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.template.soy\"],regex:\"(\\\\{/?)(\\\\s*)(?=template|deltemplate)\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:[\"entity.name.tag.soy\",\"text\",\"entity.name.function.soy\"],regex:\"(template|deltemplate)(\\\\s+)([\\\\.\\\\w]+)\",originalRegex:\"(?<=template|deltemplate)\\\\s+([\\\\.\\\\w]+)\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.double.soy\"],regex:'\\\\b(private)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\")'},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.single.soy\"],regex:\"\\\\b(private)(\\\\s*)(=)(\\\\s*)('true'|'false')\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.double.soy\"],regex:'\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\"|\"contextual\")'},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.single.soy\"],regex:\"\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)('true'|'false'|'contextual')\"},{defaultToken:\"meta.tag.template.soy\"}]}],\"#variable\":[{token:\"variable.other.soy\",regex:\"\\\\$[\\\\w\\\\.]+\"}]};for(var t in e)this.$rules[t]?this.$rules[t].unshift.apply(this.$rules[t],e[t]):this.$rules[t]=e[t];this.normalizeRules()};s.metaData={comment:\"SoyTemplate\",fileTypes:[\"soy\"],firstLineMatch:\"\\\\{\\\\s*namespace\\\\b\",foldingStartMarker:\"\\\\{\\\\s*template\\\\s+[^\\\\}]*\\\\}\",foldingStopMarker:\"\\\\{\\\\s*/\\\\s*template\\\\s*\\\\}\",name:\"SoyTemplate\",scopeName:\"source.soy\"},r.inherits(s,i),t.SoyTemplateHighlightRules=s}),ace.define(\"ace/mode/soy_template\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/soy_template_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./soy_template_highlight_rules\").SoyTemplateHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/soy_template\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-space.js",
    "content": "ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/space_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"empty_line\",regex:/ */,next:\"key\"},{token:\"empty_line\",regex:/$/,next:\"key\"}],key:[{token:\"variable\",regex:/\\S+/},{token:\"empty_line\",regex:/$/,next:\"start\"},{token:\"keyword.operator\",regex:/ /,next:\"value\"}],value:[{token:\"keyword.operator\",regex:/$/,next:\"start\"},{token:\"string\",regex:/[^$]/}]}};r.inherits(s,i),t.SpaceHighlightRules=s}),ace.define(\"ace/mode/space\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/coffee\",\"ace/mode/space_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./folding/coffee\").FoldMode,o=e(\"./space_highlight_rules\").SpaceHighlightRules,u=function(){this.HighlightRules=o,this.foldingRules=new s,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.$id=\"ace/mode/space\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-sparql.js",
    "content": "ace.define(\"ace/mode/sparql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comments\"},{include:\"#strings\"},{include:\"#string-language-suffixes\"},{include:\"#string-datatype-suffixes\"},{include:\"#logic-operators\"},{include:\"#relative-urls\"},{include:\"#xml-schema-types\"},{include:\"#rdf-schema-types\"},{include:\"#owl-types\"},{include:\"#qnames\"},{include:\"#keywords\"},{include:\"#built-in-functions\"},{include:\"#variables\"},{include:\"#boolean-literal\"},{include:\"#punctuation-operators\"}],\"#boolean-literal\":[{token:\"constant.language.boolean.sparql\",regex:/true|false/}],\"#built-in-functions\":[{token:\"support.function.sparql\",regex:/[Aa][Bb][Ss]|[Aa][Vv][Gg]|[Bb][Nn][Oo][Dd][Ee]|[Bb][Oo][Uu][Nn][Dd]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Aa][Ll][Ee][Ss][Cc][Ee]|[Cc][Oo][Nn][Cc][Aa][Tt]|[Cc][Oo][Nn][Tt][Aa][Ii][Nn][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Dd][Aa][Tt][Aa][Tt][Yy][Pp][Ee]|[Dd][Aa][Yy]|[Ee][Nn][Cc][Oo][Dd][Ee]_[Ff][Oo][Rr]_[Uu][Rr][Ii]|[Ee][Xx][Ii][Ss][Tt][Ss]|[Ff][Ll][Oo][Oo][Rr]|[Gg][Rr][Oo][Uu][Pp]_[Cc][Oo][Nn][Cc][Aa][Tt]|[Hh][Oo][Uu][Rr][Ss]|[Ii][Ff]|[Ii][Rr][Ii]|[Ii][Ss][Bb][Ll][Aa][Nn][Kk]|[Ii][Ss][Ii][Rr][Ii]|[Ii][Ss][Ll][Ii][Tt][Ee][Rr][Aa][Ll]|[Ii][Ss][Nn][Uu][Mm][Ee][Rr][Ii][Cc]|[Ii][Ss][Uu][Rr][Ii]|[Ll][Aa][Nn][Gg]|[Ll][Aa][Nn][Gg][Mm][Aa][Tt][Cc][Hh][Ee][Ss]|[Ll][Cc][Aa][Ss][Ee]|[Mm][Aa][Xx]|[Mm][Dd]5|[Mm][Ii][Nn]|[Mm][Ii][Nn][Uu][Tt][Ee][Ss]|[Mm][Oo][Nn][Tt][Hh]|[Nn][Oo][Ww]|[Rr][Aa][Nn][Dd]|[Rr][Ee][Gg][Ee][Xx]|[Rr][Ee][Pp][Ll][Aa][Cc][Ee]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Aa][Mm][Ee][Tt][Ee][Rr][Mm]|[Ss][Aa][Mm][Pp][Ll][Ee]|[Ss][Ee][Cc][Oo][Nn][Dd][Ss]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Hh][Aa](?:1|256|384|512)|[Ss][Tt][Rr]|[Ss][Tt][Rr][Aa][Ff][Tt][Ee][Rr]|[Ss][Tt][Rr][Bb][Ee][Ff][Oo][Rr][Ee]|[Ss][Tt][Rr][Dd][Tt]|[Ss][Tt][Rr][Ee][Nn][Dd][Ss]|[Ss][Tt][Rr][Ll][Aa][Nn][Gg]|[Ss][Tt][Rr][Ll][Ee][Nn]|[Ss][Tt][Rr][Ss][Tt][Aa][Rr][Tt][Ss]|[Ss][Tt][Rr][Uu][Uu][Ii][Dd]|[Ss][Uu][Bb][Ss][Tt][Rr]|[Ss][Uu][Mm]|[Tt][Ii][Mm][Ee][Zz][Oo][Nn][Ee]|[Tt][Zz]|[Uu][Cc][Aa][Ss][Ee]|[Uu][Rr][Ii]|[Uu][Uu][Ii][Dd]|[Yy][Ee][Aa][Rr]/}],\"#comments\":[{token:[\"punctuation.definition.comment.sparql\",\"comment.line.hash.sparql\"],regex:/(#)(.*$)/}],\"#keywords\":[{token:\"keyword.other.sparql\",regex:/[Aa][Dd][Dd]|[Aa][Ll][Ll]|[Aa][Ss]|[As][Ss][Cc]|[Aa][Ss][Kk]|[Bb][Aa][Ss][Ee]|[Bb][Ii][Nn][Dd]|[Bb][Yy]|[Cc][Ll][Ee][Aa][Rr]|[Cc][Oo][Nn][Ss][Tt][Rr][Uu][Cc][Tt]|[Cc][Oo][Pp][Yy]|[Cc][Rr][Ee][Aa][Tt][Ee]|[Dd][Aa][Tt][Aa]|[Dd][Ee][Ff][Aa][Uu][Ll][Tt]|[Dd][Ee][Ll][Ee][Tt][Ee]|[Dd][Ee][Sc][Cc]|[Dd][Ee][Ss][Cc][Rr][Ii][Bb][Ee]|[Dd][Ii][Ss][Tt][Ii][Nn][Cc][Tt]|[Dd][Rr][Oo][Pp]|[Ff][Ii][Ll][Tt][Ee][Rr]|[Ff][Rr][Oo][Mm]|[Gg][Rr][Aa][Pp][Hh]|[Gg][Rr][Oo][Uu][Pp]|[Hh][Aa][Vv][Ii][Nn][Gg]|[Ii][Nn][Ss][Ee][Rr][Tt]|[Ll][Ii][Mm][Ii][Tt]|[Ll][Oo][Aa][Dd]|[Mm][Ii][Nn][Uu][Ss]|[Mm][Oo][Vv][Ee]|[Nn][Aa][Mm][Ee][Dd]|[Oo][Ff][Ff][Ss][Ee][Tt]|[Oo][Pp][Tt][Ii][Oo][Nn][Aa][Ll]|[Oo][Rr][Dd][Ee][Rr]|[Pp][Rr][Ee][Ff][Ii][Xx]|[Rr][Ee][Dd][Uu][Cc][Ee][Dd]|[Ss][Ee][Ll][Ee][Cc][Tt]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Ee][Rr][Vv][Ii][Cc][Ee]|[Ss][Ii][Ll][Ee][Nn][Tt]|[Tt][Oo]|[Uu][Nn][Dd][Ee][Ff]|[Uu][Nn][Ii][Oo][Nn]|[Uu][Ss][Ii][Nn][Gg]|[Vv][Aa][Ll][Uu][Ee][Ss]|[Ww][He][Ee][Rr][Ee]|[Ww][Ii][Tt][Hh]/}],\"#logic-operators\":[{token:\"keyword.operator.logical.sparql\",regex:/\\|\\||&&|=|!=|<|>|<=|>=|(?:^|!?\\s)IN(?:!?\\s|$)|(?:^|!?\\s)NOT(?:!?\\s|$)|-|\\+|\\*|\\/|\\!/}],\"#owl-types\":[{token:\"support.type.datatype.owl.sparql\",regex:/owl:[a-zA-Z]+/}],\"#punctuation-operators\":[{token:\"keyword.operator.punctuation.sparql\",regex:/;|,|\\.|\\(|\\)|\\{|\\}|\\|/}],\"#qnames\":[{token:\"entity.name.other.qname.sparql\",regex:/(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/}],\"#rdf-schema-types\":[{token:\"support.type.datatype.rdf.schema.sparql\",regex:/rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/}],\"#relative-urls\":[{token:\"string.quoted.other.relative.url.sparql\",regex:/</,push:[{token:\"string.quoted.other.relative.url.sparql\",regex:/>/,next:\"pop\"},{defaultToken:\"string.quoted.other.relative.url.sparql\"}]}],\"#string-datatype-suffixes\":[{token:\"keyword.operator.datatype.suffix.sparql\",regex:/\\^\\^/}],\"#string-language-suffixes\":[{token:[\"keyword.operator.language.suffix.sparql\",\"constant.language.suffix.sparql\"],regex:/(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/}],\"#strings\":[{token:\"string.quoted.triple.sparql\",regex:/\"\"\"/,push:[{token:\"string.quoted.triple.sparql\",regex:/\"\"\"/,next:\"pop\"},{defaultToken:\"string.quoted.triple.sparql\"}]},{token:\"string.quoted.double.sparql\",regex:/\"/,push:[{token:\"string.quoted.double.sparql\",regex:/\"/,next:\"pop\"},{token:\"invalid.string.newline\",regex:/$/},{token:\"constant.character.escape.sparql\",regex:/\\\\./},{defaultToken:\"string.quoted.double.sparql\"}]}],\"#variables\":[{token:\"variable.other.sparql\",regex:/(?:\\?|\\$)[-_a-zA-Z0-9]+/}],\"#xml-schema-types\":[{token:\"support.type.datatype.schema.sparql\",regex:/xsd?:[a-z][a-zA-Z]+/}]},this.normalizeRules()};s.metaData={fileTypes:[\"rq\",\"sparql\"],name:\"SPARQL\",scopeName:\"source.sparql\"},r.inherits(s,i),t.SPARQLHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/sparql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sparql_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sparql_highlight_rules\").SPARQLHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/sparql\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-sql.js",
    "content": "ace.define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|foreign|not|references|default|null|inner|cross|natural|database|drop|grant\",t=\"true|false\",n=\"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl\",r=\"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|money|real|number|integer\",i=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t,\"storage.type\":r},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",start:\"/\\\\*\",end:\"\\\\*/\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"string\",regex:\"`.*?`\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]},this.normalizeRules()};r.inherits(s,i),t.SqlHighlightRules=s}),ace.define(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sql_highlight_rules\").SqlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/sql\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-sqlserver.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/sqlserver_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"ALL|AND|ANY|BETWEEN|EXISTS|IN|LIKE|NOT|OR|SOME\";e+=\"|NULL|IS|APPLY|INNER|OUTER|LEFT|RIGHT|JOIN|CROSS\";var t=\"OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|AVG|CHECKSUM_AGG|COUNT|COUNT_BIG|GROUPING|GROUPING_ID|MAX|MIN|STDEV|STDEVP|SUM|VAR|VARP|DENSE_RANK|NTILE|RANK|ROW_NUMBER@@DATEFIRST|@@DBTS|@@LANGID|@@LANGUAGE|@@LOCK_TIMEOUT|@@MAX_CONNECTIONS|@@MAX_PRECISION|@@NESTLEVEL|@@OPTIONS|@@REMSERVER|@@SERVERNAME|@@SERVICENAME|@@SPID|@@TEXTSIZE|@@VERSION|CAST|CONVERT|PARSE|TRY_CAST|TRY_CONVERT|TRY_PARSE@@CURSOR_ROWS|@@FETCH_STATUS|CURSOR_STATUS|@@DATEFIRST|@@LANGUAGE|CURRENT_TIMESTAMP|DATEADD|DATEDIFF|DATEFROMPARTS|DATENAME|DATEPART|DATETIME2FROMPARTS|DATETIMEFROMPARTS|DATETIMEOFFSETFROMPARTS|DAY|EOMONTH|GETDATE|GETUTCDATE|ISDATE|MONTH|SET DATEFIRST|SET DATEFORMAT|SET LANGUAGE|SMALLDATETIMEFROMPARTS|SP_HELPLANGUAGE|SWITCHOFFSET|SYSDATETIME|SYSDATETIMEOFFSET|SYSUTCDATETIME|TIMEFROMPARTS|TODATETIMEOFFSET|YEAR|CHOOSE|IIF|ABS|ACOS|ASIN|ATAN|ATN2|CEILING|COS|COT|DEGREES|EXP|FLOOR|LOG|LOG10|PI|POWER|RADIANS|RAND|ROUND|SIGN|SIN|SQRT|SQUARE|TAN|@@PROCID|APPLOCK_MODE|APPLOCK_TEST|APP_NAME|ASSEMBLYPROPERTY|COLUMNPROPERTY|COL_LENGTH|COL_NAME|DATABASEPROPERTYEX|DATABASE_PRINCIPAL_ID|DB_ID|DB_NAME|FILEGROUPPROPERTY|FILEGROUP_ID|FILEGROUP_NAME|FILEPROPERTY|FILE_ID|FILE_IDEX|FILE_NAME|FULLTEXTCATALOGPROPERTY|FULLTEXTSERVICEPROPERTY|INDEXKEY_PROPERTY|INDEXPROPERTY|INDEX_COL|OBJECTPROPERTY|OBJECTPROPERTYEX|OBJECT_DEFINITION|OBJECT_ID|OBJECT_NAME|OBJECT_SCHEMA_NAME|ORIGINAL_DB_NAME|PARSENAME|SCHEMA_ID|SCHEMA_NAME|SCOPE_IDENTITY|SERVERPROPERTY|STATS_DATE|TYPEPROPERTY|TYPE_ID|TYPE_NAME|CERTENCODED|CERTPRIVATEKEY|CURRENT_USER|DATABASE_PRINCIPAL_ID|HAS_PERMS_BY_NAME|IS_MEMBER|IS_ROLEMEMBER|IS_SRVROLEMEMBER|ORIGINAL_LOGIN|PERMISSIONS|PWDCOMPARE|PWDENCRYPT|SCHEMA_ID|SCHEMA_NAME|SESSION_USER|SUSER_ID|SUSER_NAME|SUSER_SID|SUSER_SNAME|SYS.FN_BUILTIN_PERMISSIONS|SYS.FN_GET_AUDIT_FILE|SYS.FN_MY_PERMISSIONS|SYSTEM_USER|USER_ID|USER_NAME|ASCII|CHAR|CHARINDEX|CONCAT|DIFFERENCE|FORMAT|LEN|LOWER|LTRIM|NCHAR|PATINDEX|QUOTENAME|REPLACE|REPLICATE|REVERSE|RTRIM|SOUNDEX|SPACE|STR|STUFF|SUBSTRING|UNICODE|UPPER|$PARTITION|@@ERROR|@@IDENTITY|@@PACK_RECEIVED|@@ROWCOUNT|@@TRANCOUNT|BINARY_CHECKSUM|CHECKSUM|CONNECTIONPROPERTY|CONTEXT_INFO|CURRENT_REQUEST_ID|ERROR_LINE|ERROR_MESSAGE|ERROR_NUMBER|ERROR_PROCEDURE|ERROR_SEVERITY|ERROR_STATE|FORMATMESSAGE|GETANSINULL|GET_FILESTREAM_TRANSACTION_CONTEXT|HOST_ID|HOST_NAME|ISNULL|ISNUMERIC|MIN_ACTIVE_ROWVERSION|NEWID|NEWSEQUENTIALID|ROWCOUNT_BIG|XACT_STATE|@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|PATINDEX|TEXTPTR|TEXTVALID|COALESCE|NULLIF\",n=\"BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML\",r=\"sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool\",s=\"ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE\";s+=\"|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT\",s+=\"|LOOP|HASH|MERGE|REMOTE\",s+=\"|TRY|CATCH|THROW\",s+=\"|TYPE\",s=s.split(\"|\"),s=s.filter(function(r,i,s){return e.split(\"|\").indexOf(r)===-1&&t.split(\"|\").indexOf(r)===-1&&n.split(\"|\").indexOf(r)===-1}),s=s.sort().join(\"|\");var o=this.createKeywordMapper({\"constant.language\":e,\"storage.type\":n,\"support.function\":t,\"support.storedprocedure\":r,keyword:s},\"identifier\",!0),u=\"SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT\".split(\"|\"),a=\"READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE\".split(\"|\");for(var f=0;f<a.length;f++)u.push(\"SET TRANSACTION ISOLATION LEVEL \"+a[f]);this.$rules={start:[{token:\"string.start\",regex:\"'\",next:[{token:\"constant.language.escape\",regex:/''/},{token:\"string.end\",next:\"start\",regex:\"'\"},{defaultToken:\"string\"}]},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",start:\"/\\\\*\",end:\"\\\\*/\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:o,regex:\"@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b(?!])\"},{token:\"constant.class\",regex:\"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=|\\\\*\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"punctuation\",regex:\",|;\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}]};for(var f=0;f<u.length;f++)this.$rules.start.unshift({token:\"set.statement\",regex:u[f]});this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules();var l=[],c=function(e,t){e.forEach(function(e){l.push({name:e,value:e,score:0,meta:t})})};c(r.split(\"|\"),\"procedure\"),c(e.split(\"|\"),\"operator\"),c(t.split(\"|\"),\"function\"),c(n.split(\"|\"),\"type\"),c(u,\"statement\"),c(s.split(\"|\"),\"keyword\"),this.completions=l};r.inherits(o,s),t.SqlHighlightRules=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/folding/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./cstyle\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\\bCASE\\b|\\bBEGIN\\b)|^\\s*(\\/\\*)/i,this.startRegionRe=/^\\s*(\\/\\*|--)#?region\\b/,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.getBeginEndBlock(e,n,o,s[1]);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;return},this.getBeginEndBlock=function(e,t,n,r){var s={row:t,column:n+r.length},o=e.getLength(),u,a=1,f=/(\\bCASE\\b|\\bBEGIN\\b)|(\\bEND\\b)/i;while(++t<o){u=e.getLine(t);var l=f.exec(u);if(!l)continue;l[1]?a++:a--;if(!a)break}var c=t;if(c>s.row)return new i(s.row,s.column,c,u.length)}}.call(o.prototype)}),ace.define(\"ace/mode/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sqlserver_highlight_rules\",\"ace/mode/folding/sqlserver\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sqlserver_highlight_rules\").SqlHighlightRules,o=e(\"./folding/sqlserver\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.getCompletions=function(e,t,n,r){return t.$mode.$highlightRules.completions},this.$id=\"ace/mode/sql\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-stylus.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/stylus_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./css_highlight_rules\"),o=function(){var e=this.createKeywordMapper({\"support.type\":s.supportType,\"support.function\":s.supportFunction,\"support.constant\":s.supportConstant,\"support.constant.color\":s.supportConstantColor,\"support.constant.fonts\":s.supportConstantFonts},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:[\"entity.name.function.stylus\",\"text\"],regex:\"^([-a-zA-Z_][-\\\\w]*)?(\\\\()\"},{token:[\"entity.other.attribute-name.class.stylus\"],regex:\"\\\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*\"},{token:[\"entity.language.stylus\"],regex:\"^ *&\"},{token:[\"variable.language.stylus\"],regex:\"(arguments)\"},{token:[\"keyword.stylus\"],regex:\"@[-\\\\w]+\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:s.pseudoElements},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:s.pseudoClasses},{token:[\"entity.name.tag.stylus\"],regex:\"(?:\\\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\\\b)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation.definition.entity.stylus\",\"entity.other.attribute-name.id.stylus\"],regex:\"(#)([a-zA-Z][a-zA-Z0-9_-]*)\"},{token:\"meta.vendor-prefix.stylus\",regex:\"-webkit-|-moz\\\\-|-ms-|-o-\"},{token:\"keyword.control.stylus\",regex:\"(?:!important|for|in|return|true|false|null|if|else|unless|return)\\\\b\"},{token:\"keyword.operator.stylus\",regex:\"!|~|\\\\+|-|(?:\\\\*)?\\\\*|\\\\/|%|(?:\\\\.)\\\\.\\\\.|<|>|(?:=|:|\\\\?|\\\\+|-|\\\\*|\\\\/|%|<|>)?=|!=\"},{token:\"keyword.operator.stylus\",regex:\"(?:in|is(?:nt)?|not)\\\\b\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:s.numRe},{token:\"keyword\",regex:\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\\\\b\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"}],qstring:[{token:\"string\",regex:\"[^'\\\\\\\\]+\"},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"}]}};r.inherits(o,i),t.StylusHighlightRules=o}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/stylus\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/stylus_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./stylus_highlight_rules\").StylusHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/stylus\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-svg.js",
    "content": "ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/svg_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./xml_highlight_rules\").XmlHighlightRules,o=function(){s.call(this),this.embedTagRules(i,\"js-\",\"script\"),this.normalizeRules()};r.inherits(o,s),t.SvgHighlightRules=o}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/svg\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/xml\",\"ace/mode/javascript\",\"ace/mode/svg_highlight_rules\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./xml\").Mode,s=e(\"./javascript\").Mode,o=e(\"./svg_highlight_rules\").SvgHighlightRules,u=e(\"./folding/mixed\").FoldMode,a=e(\"./folding/xml\").FoldMode,f=e(\"./folding/cstyle\").FoldMode,l=function(){i.call(this),this.HighlightRules=o,this.createModeDelegates({\"js-\":s}),this.foldingRules=new u(new a,{\"js-\":new f})};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.$id=\"ace/mode/svg\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-swift.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/swift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){function t(e,t){var n=t.nestable||t.interpolation,r=t.interpolation&&t.interpolation.nextState||\"start\",s={regex:e+(t.multiline?\"\":\"(?=.)\"),token:\"string.start\"},o=[t.escape&&{regex:t.escape,token:\"character.escape\"},t.interpolation&&{token:\"paren.quasi.start\",regex:i.escapeRegExp(t.interpolation.lead+t.interpolation.open),push:r},t.error&&{regex:t.error,token:\"error.invalid\"},{regex:e+(t.multiline?\"\":\"|$\"),token:\"string.end\",next:n?\"pop\":\"start\"},{defaultToken:\"string\"}].filter(Boolean);n?s.push=o:s.next=o;if(!t.interpolation)return s;var u=t.interpolation.open,a=t.interpolation.close,f={regex:\"[\"+i.escapeRegExp(u+a)+\"]\",onMatch:function(e,t,n){this.next=e==u?this.nextState:\"\";if(e==u&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==a&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==u?\"paren.lparen\":\"paren.rparen\"},nextState:r};return[f,s]}function n(){return[{token:\"comment\",regex:\"\\\\/\\\\/(?=.)\",next:[s.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}]},s.getStartRule(\"doc-start\"),{token:\"comment.start\",regex:/\\/\\*/,stateName:\"nested_comment\",push:[s.getTagRule(),{token:\"comment.start\",regex:/\\/\\*/,push:\"nested_comment\"},{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var e=this.createKeywordMapper({\"variable.language\":\"\",keyword:\"__COLUMN__|__FILE__|__FUNCTION__|__LINE__|as|associativity|break|case|class|continue|default|deinit|didSet|do|dynamicType|else|enum|extension|fallthrough|for|func|get|if|import|in|infix|init|inout|is|left|let|let|mutating|new|none|nonmutating|operator|override|postfix|precedence|prefix|protocol|return|right|safe|Self|self|set|struct|subscript|switch|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|convenience|dynamic|final|infix|lazy|mutating|nonmutating|optional|override|postfix|prefix|required|static|guard|defer\",\"storage.type\":\"bool|double|Double|extension|float|Float|int|Int|open|internal|fileprivate|private|public|string|String\",\"constant.language\":\"false|Infinity|NaN|nil|no|null|null|off|on|super|this|true|undefined|yes\",\"support.function\":\"\"},\"identifier\");this.$rules={start:[t('\"',{escape:/\\\\(?:[0\\\\tnr\"']|u{[a-fA-F1-9]{0,8}})/,interpolation:{lead:\"\\\\\",open:\"(\",close:\")\"},error:/\\\\./,multiline:!1}),n(),{regex:/@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,token:\"variable.parameter\"},{regex:/[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,token:e},{token:\"constant.numeric\",regex:/[+-]?(?:0(?:b[01]+|o[0-7]+|x[\\da-fA-F])|\\d+(?:(?:\\.\\d*)?(?:[PpEe][+-]?\\d+)?)\\b)/},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,o),t.HighlightRules=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/swift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/swift_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./swift_highlight_rules\").HighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\",nestable:!0},this.$id=\"ace/mode/swift\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-tcl.js",
    "content": "ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/tcl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"#.*\\\\\\\\$\",next:\"commentfollow\"},{token:\"comment\",regex:\"#.*$\"},{token:\"support.function\",regex:\"[\\\\\\\\]$\",next:\"splitlineStart\"},{token:\"text\",regex:/\\\\(?:[\"{}\\[\\]$\\\\])/},{token:\"text\",regex:\"^|[^{][;][^}]|[/\\r/]\",next:\"commandItem\"},{token:\"string\",regex:'[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[ ]*[\"]',next:\"qqstring\"},{token:\"variable.instance\",regex:\"[$]\",next:\"variable\"},{token:\"support.function\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"},{token:\"identifier\",regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"paren.lparen\",regex:\"[[{]\",next:\"commandItem\"},{token:\"paren.lparen\",regex:\"[(]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],commandItem:[{token:\"comment\",regex:\"#.*\\\\\\\\$\",next:\"commentfollow\"},{token:\"comment\",regex:\"#.*$\",next:\"start\"},{token:\"string\",regex:'[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"variable.instance\",regex:\"[$]\",next:\"variable\"},{token:\"support.function\",regex:\"(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])\",next:\"commandItem\"},{token:\"support.function\",regex:\"[a-zA-Z0-9_/]+(?:[:][:])\",next:\"commandItem\"},{token:\"support.function\",regex:\"(?:[:][:])\",next:\"commandItem\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"support.function\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"},{token:\"keyword\",regex:\"[a-zA-Z0-9_/]+\",next:\"start\"}],commentfollow:[{token:\"comment\",regex:\".*\\\\\\\\$\",next:\"commentfollow\"},{token:\"comment\",regex:\".+\",next:\"start\"}],splitlineStart:[{token:\"text\",regex:\"^.\",next:\"start\"}],variable:[{token:\"variable.instance\",regex:\"[a-zA-Z_\\\\d]+(?:[(][a-zA-Z_\\\\d]+[)])?\",next:\"start\"},{token:\"variable.instance\",regex:\"{?[a-zA-Z_\\\\d]+}?\",next:\"start\"}],qqstring:[{token:\"string\",regex:'(?:[^\\\\\\\\]|\\\\\\\\.)*?[\"]',next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(s,i),t.TclHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/tcl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/cstyle\",\"ace/mode/tcl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./folding/cstyle\").FoldMode,o=e(\"./tcl_highlight_rules\").TclHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=function(){this.HighlightRules=o,this.$outdent=new u,this.foldingRules=new s,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/tcl\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-terraform.js",
    "content": "ace.define(\"ace/mode/terraform_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"storage.function.terraform\"],regex:\"\\\\b(output|resource|data|variable|module|export)\\\\b\"},{token:\"variable.terraform\",regex:\"\\\\$\\\\s\",push:[{token:\"keyword.terraform\",regex:\"(-var-file|-var)\"},{token:\"variable.terraform\",regex:\"\\\\n|$\",next:\"pop\"},{include:\"strings\"},{include:\"variables\"},{include:\"operators\"},{defaultToken:\"text\"}]},{token:\"language.support.class\",regex:\"\\\\b(timeouts|provider|connection|provisioner|lifecycleprovider|atlas)\\\\b\"},{token:\"singleline.comment.terraform\",regex:\"#(.)*$\"},{token:\"multiline.comment.begin.terraform\",regex:\"^\\\\s*\\\\/\\\\*\",push:\"blockComment\"},{token:\"storage.function.terraform\",regex:\"^\\\\s*(locals|terraform)\\\\s*{\"},{token:\"paren.lpar\",regex:\"[[({]\"},{token:\"paren.rpar\",regex:\"[\\\\])}]\"},{include:\"constants\"},{include:\"strings\"},{include:\"operators\"},{include:\"variables\"}],blockComment:[{regex:\"^\\\\s*\\\\/\\\\*\",token:\"multiline.comment.begin.terraform\",push:\"blockComment\"},{regex:\"\\\\*\\\\/\\\\s*$\",token:\"multiline.comment.end.terraform\",next:\"pop\"},{defaultToken:\"comment\"}],constants:[{token:\"constant.language.terraform\",regex:\"\\\\b(true|false|yes|no|on|off|EOF)\\\\b\"},{token:\"constant.numeric.terraform\",regex:\"(\\\\b([0-9]+)([kKmMgG]b?)?\\\\b)|(\\\\b(0x[0-9A-Fa-f]+)([kKmMgG]b?)?\\\\b)\"}],variables:[{token:[\"variable.assignment.terraform\",\"keyword.operator\"],regex:\"\\\\b([a-zA-Z_]+)(\\\\s*=)\"}],interpolated_variables:[{token:\"variable.terraform\",regex:\"\\\\b(var|self|count|path|local)\\\\b(?:\\\\.*[a-zA-Z_-]*)?\"}],strings:[{token:\"punctuation.quote.terraform\",regex:\"'\",push:[{token:\"punctuation.quote.terraform\",regex:\"'\",next:\"pop\"},{include:\"escaped_chars\"},{defaultToken:\"string\"}]},{token:\"punctuation.quote.terraform\",regex:'\"',push:[{token:\"punctuation.quote.terraform\",regex:'\"',next:\"pop\"},{include:\"interpolation\"},{include:\"escaped_chars\"},{defaultToken:\"string\"}]}],escaped_chars:[{token:\"constant.escaped_char.terraform\",regex:\"\\\\\\\\.\"}],operators:[{token:\"keyword.operator\",regex:\"\\\\?|:|==|!=|>|<|>=|<=|&&|\\\\|\\\\||!|%|&|\\\\*|\\\\+|\\\\-|/|=\"}],interpolation:[{token:\"punctuation.interpolated.begin.terraform\",regex:\"\\\\$?\\\\$\\\\{\",push:[{token:\"punctuation.interpolated.end.terraform\",regex:\"\\\\}\",next:\"pop\"},{include:\"interpolated_variables\"},{include:\"operators\"},{include:\"constants\"},{include:\"strings\"},{include:\"functions\"},{include:\"parenthesis\"},{defaultToken:\"punctuation\"}]}],functions:[{token:\"keyword.function.terraform\",regex:\"\\\\b(abs|basename|base64decode|base64encode|base64gzip|base64sha256|base64sha512|bcrypt|ceil|chomp|chunklist|cidrhost|cidrnetmask|cidrsubnet|coalesce|coalescelist|compact|concat|contains|dirname|distinct|element|file|floor|flatten|format|formatlist|indent|index|join|jsonencode|keys|length|list|log|lookup|lower|map|matchkeys|max|merge|min|md5|pathexpand|pow|replace|rsadecrypt|sha1|sha256|sha512|signum|slice|sort|split|substr|timestamp|timeadd|title|transpose|trimspace|upper|urlencode|uuid|values|zipmap)\\\\b\"}],parenthesis:[{token:\"paren.lpar\",regex:\"\\\\[\"},{token:\"paren.rpar\",regex:\"\\\\]\"}]},this.normalizeRules()};r.inherits(s,i),t.TerraformHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/terraform\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/terraform_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./terraform_highlight_rules\").TerraformHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=function(){i.call(this),this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.$id=\"ace/mode/terraform\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-tex.js",
    "content": "ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){e||(e=\"text\"),this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:e,regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\s+\"},{token:\"nospell.\"+e,regex:\"\\\\w+\"}]}};r.inherits(o,s),t.TexHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/tex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./tex_highlight_rules\").TexHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=function(e){e?this.HighlightRules=s:this.HighlightRules=o,this.$outdent=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=\"%\",this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.allowAutoInsert=function(){return!1},this.$id=\"ace/mode/tex\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-text.js",
    "content": ";                (function() {\n                    ace.require([\"ace/mode/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-textile.js",
    "content": "ace.define(\"ace/mode/textile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:function(e){return e.charAt(0)==\"h\"?\"markup.heading.\"+e.charAt(1):\"markup.heading\"},regex:\"h1|h2|h3|h4|h5|h6|bq|p|bc|pre\",next:\"blocktag\"},{token:\"keyword\",regex:\"[\\\\*]+|[#]+\"},{token:\"text\",regex:\".+\"}],blocktag:[{token:\"keyword\",regex:\"\\\\. \",next:\"start\"},{token:\"keyword\",regex:\"\\\\(\",next:\"blocktagproperties\"}],blocktagproperties:[{token:\"keyword\",regex:\"\\\\)\",next:\"blocktag\"},{token:\"string\",regex:\"[a-zA-Z0-9\\\\-_]+\"},{token:\"keyword\",regex:\"#\"}]}};r.inherits(s,i),t.TextileHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/textile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/textile_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./textile_highlight_rules\").TextileHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,n){return e==\"intag\"?n:\"\"},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/textile\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-toml.js",
    "content": "ace.define(\"ace/mode/toml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"constant.language.boolean\":\"true|false\"},\"identifier\"),t=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment.toml\",regex:/#.*$/},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:[\"variable.keygroup.toml\"],regex:\"(?:^\\\\s*)(\\\\[\\\\[([^\\\\]]+)\\\\]\\\\])\"},{token:[\"variable.keygroup.toml\"],regex:\"(?:^\\\\s*)(\\\\[([^\\\\]]+)\\\\])\"},{token:e,regex:t},{token:\"support.date.toml\",regex:\"\\\\d{4}-\\\\d{2}-\\\\d{2}(T)\\\\d{2}:\\\\d{2}:\\\\d{2}(Z)\"},{token:\"constant.numeric.toml\",regex:\"-?\\\\d+(\\\\.?\\\\d+)?\"}],qqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"constant.language.escape\",regex:'\\\\\\\\[0tnr\"\\\\\\\\]'},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.TomlHighlightRules=s}),ace.define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/,this.getFoldWidgetRange=function(e,t,n){var r=this.foldingStartMarker,s=e.getLine(n),o=s.match(r);if(!o)return;var u=o[1]+\".\",a=s.length,f=e.getLength(),l=n,c=n;while(++n<f){s=e.getLine(n);if(/^\\s*$/.test(s))continue;o=s.match(r);if(o&&o[1].lastIndexOf(u,0)!==0)break;c=n}if(c>l){var h=e.getLine(c).length;return new i(l,a,c,h)}}}.call(o.prototype)}),ace.define(\"ace/mode/toml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/toml_highlight_rules\",\"ace/mode/folding/ini\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./toml_highlight_rules\").TomlHighlightRules,o=e(\"./folding/ini\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/toml\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-tsx.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=function(e){var t=[{token:[\"storage.type\",\"text\",\"entity.name.function.ts\"],regex:\"(function)(\\\\s+)([a-zA-Z0-9$_\\u00a1-\\uffff][a-zA-Z0-9d$_\\u00a1-\\uffff]*)\"},{token:\"keyword\",regex:\"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"},{token:[\"keyword\",\"storage.type.variable.ts\"],regex:\"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"},{token:\"keyword\",regex:\"\\\\b(?:super|export|import|keyof|infer)\\\\b\"},{token:[\"storage.type.variable.ts\"],regex:\"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"}],n=(new i({jsx:(e&&e.jsx)==1})).getRules();n.no_regex=t.concat(n.no_regex),this.$rules=n};r.inherits(s,i),t.TypeScriptHighlightRules=s}),ace.define(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./typescript_highlight_rules\").TypeScriptHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=function(){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/typescript\"}.call(f.prototype),t.Mode=f}),ace.define(\"ace/mode/tsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/typescript\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./typescript\").Mode,s=function(){i.call(this),this.$highlightRuleConfig={jsx:!0}};r.inherits(s,i),function(){this.$id=\"ace/mode/tsx\"}.call(s.prototype),t.Mode=s});                (function() {\n                    ace.require([\"ace/mode/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-turtle.js",
    "content": "ace.define(\"ace/mode/turtle_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comments\"},{include:\"#strings\"},{include:\"#base-prefix-declarations\"},{include:\"#string-language-suffixes\"},{include:\"#string-datatype-suffixes\"},{include:\"#relative-urls\"},{include:\"#xml-schema-types\"},{include:\"#rdf-schema-types\"},{include:\"#owl-types\"},{include:\"#qnames\"},{include:\"#punctuation-operators\"}],\"#base-prefix-declarations\":[{token:\"keyword.other.prefix.turtle\",regex:/@(?:base|prefix)/}],\"#comments\":[{token:[\"punctuation.definition.comment.turtle\",\"comment.line.hash.turtle\"],regex:/(#)(.*$)/}],\"#owl-types\":[{token:\"support.type.datatype.owl.turtle\",regex:/owl:[a-zA-Z]+/}],\"#punctuation-operators\":[{token:\"keyword.operator.punctuation.turtle\",regex:/;|,|\\.|\\(|\\)|\\[|\\]/}],\"#qnames\":[{token:\"entity.name.other.qname.turtle\",regex:/(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/}],\"#rdf-schema-types\":[{token:\"support.type.datatype.rdf.schema.turtle\",regex:/rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/}],\"#relative-urls\":[{token:\"string.quoted.other.relative.url.turtle\",regex:/</,push:[{token:\"string.quoted.other.relative.url.turtle\",regex:/>/,next:\"pop\"},{defaultToken:\"string.quoted.other.relative.url.turtle\"}]}],\"#string-datatype-suffixes\":[{token:\"keyword.operator.datatype.suffix.turtle\",regex:/\\^\\^/}],\"#string-language-suffixes\":[{token:[\"keyword.operator.language.suffix.turtle\",\"constant.language.suffix.turtle\"],regex:/(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/}],\"#strings\":[{token:\"string.quoted.triple.turtle\",regex:/\"\"\"/,push:[{token:\"string.quoted.triple.turtle\",regex:/\"\"\"/,next:\"pop\"},{defaultToken:\"string.quoted.triple.turtle\"}]},{token:\"string.quoted.double.turtle\",regex:/\"/,push:[{token:\"string.quoted.double.turtle\",regex:/\"/,next:\"pop\"},{token:\"invalid.string.newline\",regex:/$/},{token:\"constant.character.escape.turtle\",regex:/\\\\./},{defaultToken:\"string.quoted.double.turtle\"}]}],\"#xml-schema-types\":[{token:\"support.type.datatype.xml.schema.turtle\",regex:/xsd?:[a-z][a-zA-Z]+/}]},this.normalizeRules()};s.metaData={fileTypes:[\"ttl\",\"nt\"],name:\"Turtle\",scopeName:\"source.turtle\"},r.inherits(s,i),t.TurtleHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/turtle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/turtle_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./turtle_highlight_rules\").TurtleHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/turtle\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-twig.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/twig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){s.call(this);var e=\"autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim\";e=e+\"|end\"+e.replace(/\\|/g,\"|end\");var t=\"abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode\",n=\"attribute|constant|cycle|date|dump|parent|random|range|template_from_string\",r=\"constant|divisibleby|sameas|defined|empty|even|iterable|odd\",i=\"null|none|true|false\",o=\"b-and|b-xor|b-or|in|is|and|or|not\",u=this.createKeywordMapper({\"keyword.control.twig\":e,\"support.function.twig\":[t,n,r].join(\"|\"),\"keyword.operator.twig\":o,\"constant.language.twig\":i},\"identifier\");for(var a in this.$rules)this.$rules[a].unshift({token:\"variable.other.readwrite.local.twig\",regex:\"\\\\{\\\\{-?\",push:\"twig-start\"},{token:\"meta.tag.twig\",regex:\"\\\\{%-?\",push:\"twig-start\"},{token:\"comment.block.twig\",regex:\"\\\\{#-?\",push:\"twig-comment\"});this.$rules[\"twig-comment\"]=[{token:\"comment.block.twig\",regex:\".*-?#\\\\}\",next:\"pop\"}],this.$rules[\"twig-start\"]=[{token:\"variable.other.readwrite.local.twig\",regex:\"-?\\\\}\\\\}\",next:\"pop\"},{token:\"meta.tag.twig\",regex:\"-?%\\\\}\",next:\"pop\"},{token:\"string\",regex:\"'\",next:\"twig-qstring\"},{token:\"string\",regex:'\"',next:\"twig-qqstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator.assignment\",regex:\"=|~\"},{token:\"keyword.operator.comparison\",regex:\"==|!=|<|>|>=|<=|===\"},{token:\"keyword.operator.arithmetic\",regex:\"\\\\+|-|/|%|//|\\\\*|\\\\*\\\\*\"},{token:\"keyword.operator.other\",regex:\"\\\\.\\\\.|\\\\|\"},{token:\"punctuation.operator\",regex:/\\?|:|,|;|\\./},{token:\"paren.lparen\",regex:/[\\[\\({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"text\",regex:\"\\\\s+\"}],this.$rules[\"twig-qqstring\"]=[{token:\"constant.language.escape\",regex:/\\\\[\\\\\"$#ntr]|#{[^\"}]*}/},{token:\"string\",regex:'\"',next:\"twig-start\"},{defaultToken:\"string\"}],this.$rules[\"twig-qstring\"]=[{token:\"constant.language.escape\",regex:/\\\\[\\\\'ntr]}/},{token:\"string\",regex:\"'\",next:\"twig-start\"},{defaultToken:\"string\"}],this.normalizeRules()};r.inherits(u,o),t.TwigHighlightRules=u}),ace.define(\"ace/mode/twig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/twig_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./twig_highlight_rules\").TwigHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=function(){i.call(this),this.HighlightRules=s,this.$outdent=new o};r.inherits(u,i),function(){this.blockComment={start:\"{#\",end:\"#}\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/twig\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-typescript.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=function(e){var t=[{token:[\"storage.type\",\"text\",\"entity.name.function.ts\"],regex:\"(function)(\\\\s+)([a-zA-Z0-9$_\\u00a1-\\uffff][a-zA-Z0-9d$_\\u00a1-\\uffff]*)\"},{token:\"keyword\",regex:\"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"},{token:[\"keyword\",\"storage.type.variable.ts\"],regex:\"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"},{token:\"keyword\",regex:\"\\\\b(?:super|export|import|keyof|infer)\\\\b\"},{token:[\"storage.type.variable.ts\"],regex:\"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"}],n=(new i({jsx:(e&&e.jsx)==1})).getRules();n.no_regex=t.concat(n.no_regex),this.$rules=n};r.inherits(s,i),t.TypeScriptHighlightRules=s}),ace.define(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./typescript_highlight_rules\").TypeScriptHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=function(){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/typescript\"}.call(f.prototype),t.Mode=f});                (function() {\n                    ace.require([\"ace/mode/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-vala.js",
    "content": "ace.define(\"ace/mode/vala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"meta.using.vala\",\"keyword.other.using.vala\",\"meta.using.vala\",\"storage.modifier.using.vala\",\"meta.using.vala\",\"punctuation.terminator.vala\"],regex:\"^(\\\\s*)(using)\\\\b(?:(\\\\s*)([^ ;$]+)(\\\\s*)((?:;)?))?\"},{include:\"#code\"}],\"#all-types\":[{include:\"#primitive-arrays\"},{include:\"#primitive-types\"},{include:\"#object-types\"}],\"#annotations\":[{token:[\"storage.type.annotation.vala\",\"punctuation.definition.annotation-arguments.begin.vala\"],regex:\"(@[^ (]+)(\\\\()\",push:[{token:\"punctuation.definition.annotation-arguments.end.vala\",regex:\"\\\\)\",next:\"pop\"},{token:[\"constant.other.key.vala\",\"text\",\"keyword.operator.assignment.vala\"],regex:\"(\\\\w*)(\\\\s*)(=)\"},{include:\"#code\"},{token:\"punctuation.seperator.property.vala\",regex:\",\"},{defaultToken:\"meta.declaration.annotation.vala\"}]},{token:\"storage.type.annotation.vala\",regex:\"@\\\\w*\"}],\"#anonymous-classes-and-new\":[{token:\"keyword.control.new.vala\",regex:\"\\\\bnew\\\\b\",push_disabled:[{token:\"text\",regex:\"(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)\",next:\"pop\"},{token:[\"storage.type.vala\",\"text\"],regex:\"(\\\\w+)(\\\\s*)(?=\\\\[)\",push:[{token:\"text\",regex:\"}|(?=;|\\\\))\",next:\"pop\"},{token:\"text\",regex:\"\\\\[\",push:[{token:\"text\",regex:\"\\\\]\",next:\"pop\"},{include:\"#code\"}]},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"(?=})\",next:\"pop\"},{include:\"#code\"}]}]},{token:\"text\",regex:\"(?=\\\\w.*\\\\()\",push:[{token:\"text\",regex:\"(?<=\\\\))\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<=\\\\))\",next:\"pop\"},{include:\"#object-types\"},{token:\"text\",regex:\"\\\\(\",push:[{token:\"text\",regex:\"\\\\)\",next:\"pop\"},{include:\"#code\"}]}]},{token:\"meta.inner-class.vala\",regex:\"{\",push:[{token:\"meta.inner-class.vala\",regex:\"}\",next:\"pop\"},{include:\"#class-body\"},{defaultToken:\"meta.inner-class.vala\"}]}]}],\"#assertions\":[{token:[\"keyword.control.assert.vala\",\"meta.declaration.assertion.vala\"],regex:\"\\\\b(assert|requires|ensures)(\\\\s)\",push:[{token:\"meta.declaration.assertion.vala\",regex:\"$\",next:\"pop\"},{token:\"keyword.operator.assert.expression-seperator.vala\",regex:\":\"},{include:\"#code\"},{defaultToken:\"meta.declaration.assertion.vala\"}]}],\"#class\":[{token:\"meta.class.vala\",regex:\"(?=\\\\w?[\\\\w\\\\s]*(?:class|(?:@)?interface|enum|struct|namespace)\\\\s+\\\\w+)\",push:[{token:\"paren.vala\",regex:\"}\",next:\"pop\"},{include:\"#storage-modifiers\"},{include:\"#comments\"},{token:[\"storage.modifier.vala\",\"meta.class.identifier.vala\",\"entity.name.type.class.vala\"],regex:\"(class|(?:@)?interface|enum|struct|namespace)(\\\\s+)([\\\\w\\\\.]+)\"},{token:\"storage.modifier.extends.vala\",regex:\":\",push:[{token:\"meta.definition.class.inherited.classes.vala\",regex:\"(?={|,)\",next:\"pop\"},{include:\"#object-types-inherited\"},{include:\"#comments\"},{defaultToken:\"meta.definition.class.inherited.classes.vala\"}]},{token:[\"storage.modifier.implements.vala\",\"meta.definition.class.implemented.interfaces.vala\"],regex:\"(,)(\\\\s)\",push:[{token:\"meta.definition.class.implemented.interfaces.vala\",regex:\"(?=\\\\{)\",next:\"pop\"},{include:\"#object-types-inherited\"},{include:\"#comments\"},{defaultToken:\"meta.definition.class.implemented.interfaces.vala\"}]},{token:\"paren.vala\",regex:\"{\",push:[{token:\"paren.vala\",regex:\"(?=})\",next:\"pop\"},{include:\"#class-body\"},{defaultToken:\"meta.class.body.vala\"}]},{defaultToken:\"meta.class.vala\"}],comment:\"attempting to put namespace in here.\"}],\"#class-body\":[{include:\"#comments\"},{include:\"#class\"},{include:\"#enums\"},{include:\"#methods\"},{include:\"#annotations\"},{include:\"#storage-modifiers\"},{include:\"#code\"}],\"#code\":[{include:\"#comments\"},{include:\"#class\"},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"}\",next:\"pop\"},{include:\"#code\"}]},{include:\"#assertions\"},{include:\"#parens\"},{include:\"#constants-and-special-vars\"},{include:\"#anonymous-classes-and-new\"},{include:\"#keywords\"},{include:\"#storage-modifiers\"},{include:\"#strings\"},{include:\"#all-types\"}],\"#comments\":[{token:\"punctuation.definition.comment.vala\",regex:\"/\\\\*\\\\*/\"},{include:\"text.html.javadoc\"},{include:\"#comments-inline\"}],\"#comments-inline\":[{token:\"punctuation.definition.comment.vala\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.vala\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.vala\"}]},{token:[\"text\",\"punctuation.definition.comment.vala\",\"comment.line.double-slash.vala\"],regex:\"(\\\\s*)(//)(.*$)\"}],\"#constants-and-special-vars\":[{token:\"constant.language.vala\",regex:\"\\\\b(?:true|false|null)\\\\b\"},{token:\"variable.language.vala\",regex:\"\\\\b(?:this|base)\\\\b\"},{token:\"constant.numeric.vala\",regex:\"\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\\\b\"},{token:[\"keyword.operator.dereference.vala\",\"constant.other.vala\"],regex:\"((?:\\\\.)?)\\\\b([A-Z][A-Z0-9_]+)(?!<|\\\\.class|\\\\s*\\\\w+\\\\s*=)\\\\b\"}],\"#enums\":[{token:\"text\",regex:\"^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))\",push:[{token:\"text\",regex:\"(?=;|})\",next:\"pop\"},{token:\"constant.other.enum.vala\",regex:\"\\\\w+\",push:[{token:\"meta.enum.vala\",regex:\"(?=,|;|})\",next:\"pop\"},{include:\"#parens\"},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"}\",next:\"pop\"},{include:\"#class-body\"}]},{defaultToken:\"meta.enum.vala\"}]}]}],\"#keywords\":[{token:\"keyword.control.catch-exception.vala\",regex:\"\\\\b(?:try|catch|finally|throw)\\\\b\"},{token:\"keyword.control.vala\",regex:\"\\\\?|:|\\\\?\\\\?\"},{token:\"keyword.control.vala\",regex:\"\\\\b(?:return|break|case|continue|default|do|while|for|foreach|switch|if|else|in|yield|get|set|value)\\\\b\"},{token:\"keyword.operator.vala\",regex:\"\\\\b(?:typeof|is|as)\\\\b\"},{token:\"keyword.operator.comparison.vala\",regex:\"==|!=|<=|>=|<>|<|>\"},{token:\"keyword.operator.assignment.vala\",regex:\"=\"},{token:\"keyword.operator.increment-decrement.vala\",regex:\"\\\\-\\\\-|\\\\+\\\\+\"},{token:\"keyword.operator.arithmetic.vala\",regex:\"\\\\-|\\\\+|\\\\*|\\\\/|%\"},{token:\"keyword.operator.logical.vala\",regex:\"!|&&|\\\\|\\\\|\"},{token:\"keyword.operator.dereference.vala\",regex:\"\\\\.(?=\\\\S)\",originalRegex:\"(?<=\\\\S)\\\\.(?=\\\\S)\"},{token:\"punctuation.terminator.vala\",regex:\";\"},{token:\"keyword.operator.ownership\",regex:\"owned|unowned\"}],\"#methods\":[{token:\"meta.method.vala\",regex:\"(?!new)(?=\\\\w.*\\\\s+)(?=[^=]+\\\\()\",push:[{token:\"paren.vala\",regex:\"}|(?=;)\",next:\"pop\"},{include:\"#storage-modifiers\"},{token:[\"entity.name.function.vala\",\"meta.method.identifier.vala\"],regex:\"([\\\\~\\\\w\\\\.]+)(\\\\s*\\\\()\",push:[{token:\"meta.method.identifier.vala\",regex:\"\\\\)\",next:\"pop\"},{include:\"#parameters\"},{defaultToken:\"meta.method.identifier.vala\"}]},{token:\"meta.method.return-type.vala\",regex:\"(?=\\\\w.*\\\\s+\\\\w+\\\\s*\\\\()\",push:[{token:\"meta.method.return-type.vala\",regex:\"(?=\\\\w+\\\\s*\\\\()\",next:\"pop\"},{include:\"#all-types\"},{defaultToken:\"meta.method.return-type.vala\"}]},{include:\"#throws\"},{token:\"paren.vala\",regex:\"{\",push:[{token:\"paren.vala\",regex:\"(?=})\",next:\"pop\"},{include:\"#code\"},{defaultToken:\"meta.method.body.vala\"}]},{defaultToken:\"meta.method.vala\"}]}],\"#namespace\":[{token:\"text\",regex:\"^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))\",push:[{token:\"text\",regex:\"(?=;|})\",next:\"pop\"},{token:\"constant.other.namespace.vala\",regex:\"\\\\w+\",push:[{token:\"meta.namespace.vala\",regex:\"(?=,|;|})\",next:\"pop\"},{include:\"#parens\"},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"}\",next:\"pop\"},{include:\"#code\"}]},{defaultToken:\"meta.namespace.vala\"}]}],comment:\"This is not quite right. See the class grammar right now\"}],\"#object-types\":[{token:\"storage.type.generic.vala\",regex:\"\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<\",push:[{token:\"storage.type.generic.vala\",regex:\">|[^\\\\w\\\\s,\\\\?<\\\\[()\\\\]]\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\">|[^\\\\w\\\\s,\\\\?<\\\\[(?:[,]+)\\\\]]\",next:\"pop\"},{include:\"#object-types\"},{token:\"storage.type.generic.vala\",regex:\"<\",push:[{token:\"storage.type.generic.vala\",regex:\">|[^\\\\w\\\\s,\\\\[\\\\]<]\",next:\"pop\"},{defaultToken:\"storage.type.generic.vala\"}],comment:\"This is just to support <>'s with no actual type prefix\"},{defaultToken:\"storage.type.generic.vala\"}]},{token:\"storage.type.object.array.vala\",regex:\"\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*(?=\\\\[)\",push:[{token:\"storage.type.object.array.vala\",regex:\"(?=[^\\\\]\\\\s])\",next:\"pop\"},{token:\"text\",regex:\"\\\\[\",push:[{token:\"text\",regex:\"\\\\]\",next:\"pop\"},{include:\"#code\"}]},{defaultToken:\"storage.type.object.array.vala\"}]},{token:[\"storage.type.vala\",\"keyword.operator.dereference.vala\",\"storage.type.vala\"],regex:\"\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*\\\\b)\"}],\"#object-types-inherited\":[{token:\"entity.other.inherited-class.vala\",regex:\"\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<\",push:[{token:\"entity.other.inherited-class.vala\",regex:\">|[^\\\\w\\\\s,<]\",next:\"pop\"},{include:\"#object-types\"},{token:\"storage.type.generic.vala\",regex:\"<\",push:[{token:\"storage.type.generic.vala\",regex:\">|[^\\\\w\\\\s,<]\",next:\"pop\"},{defaultToken:\"storage.type.generic.vala\"}],comment:\"This is just to support <>'s with no actual type prefix\"},{defaultToken:\"entity.other.inherited-class.vala\"}]},{token:[\"entity.other.inherited-class.vala\",\"keyword.operator.dereference.vala\",\"entity.other.inherited-class.vala\"],regex:\"\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*)\"}],\"#parameters\":[{token:\"storage.modifier.vala\",regex:\"final\"},{include:\"#primitive-arrays\"},{include:\"#primitive-types\"},{include:\"#object-types\"},{token:\"variable.parameter.vala\",regex:\"\\\\w+\"}],\"#parens\":[{token:\"text\",regex:\"\\\\(\",push:[{token:\"text\",regex:\"\\\\)\",next:\"pop\"},{include:\"#code\"}]}],\"#primitive-arrays\":[{token:\"storage.type.primitive.array.vala\",regex:\"\\\\b(?:bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|int8|int16|int32|int64|uint8|uint16|uint32|uint64)(?:\\\\[\\\\])*\\\\b\"}],\"#primitive-types\":[{token:\"storage.type.primitive.vala\",regex:\"\\\\b(?:var|bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\\\\b\",comment:\"var is not really a primitive, but acts like one in most cases\"}],\"#storage-modifiers\":[{token:\"storage.modifier.vala\",regex:\"\\\\b(?:public|private|protected|internal|static|final|sealed|virtual|override|abstract|readonly|volatile|dynamic|async|unsafe|out|ref|weak|owned|unowned|const)\\\\b\",comment:\"Not sure about unsafe and readonly\"}],\"#strings\":[{token:\"punctuation.definition.string.begin.vala\",regex:'@\"',push:[{token:\"punctuation.definition.string.end.vala\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"\\\\\\\\.|%[\\\\w\\\\.\\\\-]+|\\\\$(?:\\\\w+|\\\\([\\\\w\\\\s\\\\+\\\\-\\\\*\\\\/]+\\\\))\"},{defaultToken:\"string.quoted.interpolated.vala\"}]},{token:\"punctuation.definition.string.begin.vala\",regex:'\"',push:[{token:\"punctuation.definition.string.end.vala\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"\\\\\\\\.\"},{token:\"constant.character.escape.vala\",regex:\"%[\\\\w\\\\.\\\\-]+\"},{defaultToken:\"string.quoted.double.vala\"}]},{token:\"punctuation.definition.string.begin.vala\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.vala\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.vala\"}]},{token:\"punctuation.definition.string.begin.vala\",regex:'\"\"\"',push:[{token:\"punctuation.definition.string.end.vala\",regex:'\"\"\"',next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"%[\\\\w\\\\.\\\\-]+\"},{defaultToken:\"string.quoted.triple.vala\"}]}],\"#throws\":[{token:\"storage.modifier.vala\",regex:\"throws\",push:[{token:\"meta.throwables.vala\",regex:\"(?={|;)\",next:\"pop\"},{include:\"#object-types\"},{defaultToken:\"meta.throwables.vala\"}]}],\"#values\":[{include:\"#strings\"},{include:\"#object-types\"},{include:\"#constants-and-special-vars\"}]},this.normalizeRules()};s.metaData={comment:\"Based heavily on the Java bundle's language syntax. TODO:\\n* Closures\\n* Delegates\\n* Properties: Better support for properties.\\n* Annotations\\n* Error domains\\n* Named arguments\\n* Array slicing, negative indexes, multidimensional\\n* construct blocks\\n* lock blocks?\\n* regex literals\\n* DocBlock syntax highlighting. (Currently importing javadoc)\\n* Folding rule for comments.\\n\",fileTypes:[\"vala\"],foldingStartMarker:\"(\\\\{\\\\s*(//.*)?$|^\\\\s*// \\\\{\\\\{\\\\{)\",foldingStopMarker:\"^\\\\s*(\\\\}|// \\\\}\\\\}\\\\}$)\",name:\"Vala\",scopeName:\"source.vala\"},r.inherits(s,i),t.ValaHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/vala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/vala_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"../tokenizer\").Tokenizer,o=e(\"./vala_highlight_rules\").ValaHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=e(\"./matching_brace_outdent\").MatchingBraceOutdent,c=function(){this.HighlightRules=o,this.$outdent=new l,this.$behaviour=new a,this.foldingRules=new f};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/vala\"}.call(c.prototype),t.Mode=c});                (function() {\n                    ace.require([\"ace/mode/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-vbscript.js",
    "content": "ace.define(\"ace/mode/vbscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"keyword.control.asp\":\"If|Then|Else|ElseIf|End|While|Wend|For|To|Each|Case|Select|Return|Continue|Do|Until|Loop|Next|With|Exit|Function|Property|Type|Enum|Sub|IIf\",\"storage.type.asp\":\"Dim|Call|Class|Const|Dim|Redim|Set|Let|Get|New|Randomize|Option|Explicit\",\"storage.modifier.asp\":\"Private|Public|Default\",\"keyword.operator.asp\":\"Mod|And|Not|Or|Xor|as\",\"constant.language.asp\":\"Empty|False|Nothing|Null|True\",\"support.class.asp\":\"Application|ObjectContext|Request|Response|Server|Session\",\"support.class.collection.asp\":\"Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables\",\"support.constant.asp\":\"TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout\",\"support.function.asp\":\"Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog|BinaryWrite|Clear|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex\",\"support.function.event.asp\":\"Application_OnEnd|Application_OnStart|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart\",\"support.function.vb.asp\":\"Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year\",\"support.type.vb.asp\":\"vbtrue|vbfalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|int32|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant|vbDataObject|vbDecimal|vbByte|vbArray\"},\"identifier\",!0);this.$rules={start:[{token:[\"meta.ending-space\"],regex:\"$\"},{token:[null],regex:\"^(?=\\\\t)\",next:\"state_3\"},{token:[null],regex:\"^(?= )\",next:\"state_4\"},{token:[\"text\",\"storage.type.function.asp\",\"text\",\"entity.name.function.asp\",\"text\",\"punctuation.definition.parameters.asp\",\"variable.parameter.function.asp\",\"punctuation.definition.parameters.asp\"],regex:\"^(\\\\s*)(Function|Sub)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()([^)]*)(\\\\))\"},{token:\"punctuation.definition.comment.asp\",regex:\"'|REM(?=\\\\s|$)\",next:\"comment\",caseInsensitive:!0},{token:\"storage.type.asp\",regex:\"On Error Resume Next|On Error GoTo\",caseInsensitive:!0},{token:\"punctuation.definition.string.begin.asp\",regex:'\"',next:\"string\"},{token:[\"punctuation.definition.variable.asp\"],regex:\"(\\\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b\\\\s*\"},{token:\"constant.numeric.asp\",regex:\"-?\\\\b(?:(?:0(?:x|X)[0-9a-fA-F]*)|(?:(?:[0-9]+\\\\.?[0-9]*)|(?:\\\\.[0-9]+))(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"},{regex:\"\\\\w+\",token:e},{token:[\"entity.name.function.asp\"],regex:\"(?:(\\\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b)(?=\\\\(\\\\)?))\"},{token:[\"keyword.operator.asp\"],regex:\"\\\\-|\\\\+|\\\\*\\\\/|\\\\>|\\\\<|\\\\=|\\\\&\"}],state_3:[{token:[\"meta.odd-tab.tabs\",\"meta.even-tab.tabs\"],regex:\"(\\\\t)(\\\\t)?\"},{token:\"meta.leading-space\",regex:\"(?=[^\\\\t])\",next:\"start\"},{token:\"meta.leading-space\",regex:\".\",next:\"state_3\"}],state_4:[{token:[\"meta.odd-tab.spaces\",\"meta.even-tab.spaces\"],regex:\"(  )(  )?\"},{token:\"meta.leading-space\",regex:\"(?=[^ ])\",next:\"start\"},{defaultToken:\"meta.leading-space\"}],comment:[{token:\"comment.line.apostrophe.asp\",regex:\"$|(?=(?:%>))\",next:\"start\"},{defaultToken:\"comment.line.apostrophe.asp\"}],string:[{token:\"constant.character.escape.apostrophe.asp\",regex:'\"\"'},{token:\"string.quoted.double.asp\",regex:'\"',next:\"start\"},{defaultToken:\"string.quoted.double.asp\"}]}};r.inherits(s,i),t.VBScriptHighlightRules=s}),ace.define(\"ace/mode/vbscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vbscript_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./vbscript_highlight_rules\").VBScriptHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=[\"'\",\"REM\"],this.$id=\"ace/mode/vbscript\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-velocity.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/velocity_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./html_highlight_rules\").HtmlHighlightRules,u=function(){o.call(this);var e=i.arrayToMap(\"true|false|null\".split(\"|\")),t=i.arrayToMap(\"_DateTool|_DisplayTool|_EscapeTool|_FieldTool|_MathTool|_NumberTool|_SerializerTool|_SortTool|_StringTool|_XPathTool\".split(\"|\")),n=i.arrayToMap(\"$contentRoot|$foreach\".split(\"|\")),r=i.arrayToMap(\"#set|#macro|#include|#parse|#if|#elseif|#else|#foreach|#break|#end|#stop\".split(\"|\"));this.$rules.start.push({token:\"comment\",regex:\"##.*$\"},{token:\"comment.block\",regex:\"#\\\\*\",next:\"vm_comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:function(i){return r.hasOwnProperty(i)?\"keyword\":e.hasOwnProperty(i)?\"constant.language\":n.hasOwnProperty(i)?\"variable.language\":t.hasOwnProperty(i)||t.hasOwnProperty(i.substring(1))?\"support.function\":i==\"debugger\"?\"invalid.deprecated\":i.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*)$/)?\"variable\":\"identifier\"},regex:\"[a-zA-Z$#][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}),this.$rules.vm_comment=[{token:\"comment\",regex:\"\\\\*#|-->\",next:\"start\"},{defaultToken:\"comment\"}],this.$rules.vm_start=[{token:\"variable\",regex:\"}\",next:\"pop\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:function(i){return r.hasOwnProperty(i)?\"keyword\":e.hasOwnProperty(i)?\"constant.language\":n.hasOwnProperty(i)?\"variable.language\":t.hasOwnProperty(i)||t.hasOwnProperty(i.substring(1))?\"support.function\":i==\"debugger\"?\"invalid.deprecated\":i.match(/^(\\$[a-zA-Z_$][a-zA-Z0-9_]*)$/)?\"variable\":\"identifier\"},regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}];for(var s in this.$rules)this.$rules[s].unshift({token:\"variable\",regex:\"\\\\${\",push:\"vm_start\"});this.normalizeRules()};r.inherits(u,s),t.VelocityHighlightRules=u}),ace.define(\"ace/mode/folding/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"##\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"##\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"##\"&&s[i]==\"##\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"##\"&&o[i]==\"##\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/velocity_highlight_rules\",\"ace/mode/folding/velocity\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./velocity_highlight_rules\").VelocityHighlightRules,o=e(\"./folding/velocity\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"##\",this.blockComment={start:\"#*\",end:\"*#\"},this.$id=\"ace/mode/velocity\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-verilog.js",
    "content": "ace.define(\"ace/mode/verilog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xorbegin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|macromodule|module|primitive|repeat|specify|table|task|while\",t=\"true|false|null\",n=\"count|min|max|avg|sum|rank|now|coalesce|main\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"//.*$\"},{token:\"comment.start\",regex:\"/\\\\*\",next:[{token:\"comment.end\",regex:\"\\\\*/\",next:\"start\"},{defaultToken:\"comment\"}]},{token:\"string.start\",regex:'\"',next:[{token:\"constant.language.escape\",regex:/\\\\(?:[ntvfa\\\\\"]|[0-7]{1,3}|\\x[a-fA-F\\d]{1,2}|)/,consumeLineEnd:!0},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string\",regex:\"'^[']'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]},this.normalizeRules()};r.inherits(s,i),t.VerilogHighlightRules=s}),ace.define(\"ace/mode/verilog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/verilog_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./verilog_highlight_rules\").VerilogHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"'},this.$id=\"ace/mode/verilog\"}.call(u.prototype),t.Mode=u});                (function() {\n                    ace.require([\"ace/mode/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-vhdl.js",
    "content": "ace.define(\"ace/mode/vhdl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"access|after|ailas|all|architecture|assert|attribute|begin|block|buffer|bus|case|component|configuration|disconnect|downto|else|elsif|end|entity|file|for|function|generate|generic|guarded|if|impure|in|inertial|inout|is|label|linkage|literal|loop|mapnew|next|of|on|open|others|out|port|process|pure|range|record|reject|report|return|select|shared|subtype|then|to|transport|type|unaffected|united|until|wait|when|while|with\",t=\"bit|bit_vector|boolean|character|integer|line|natural|positive|real|register|severity|signal|signed|std_logic|std_logic_vector|string||text|time|unsigned|variable\",n=\"array|constant\",r=\"abs|and|mod|nand|nor|not|rem|rol|ror|sla|sll|srasrl|xnor|xor\",i=\"true|false|null\",s=this.createKeywordMapper({\"keyword.operator\":r,keyword:e,\"constant.language\":i,\"storage.modifier\":n,\"storage.type\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"keyword\",regex:\"\\\\s*(?:library|package|use)\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"&|\\\\*|\\\\+|\\\\-|\\\\/|<|=|>|\\\\||=>|\\\\*\\\\*|:=|\\\\/=|>=|<=|<>\"},{token:\"punctuation.operator\",regex:\"\\\\'|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[(]\"},{token:\"paren.rparen\",regex:\"[\\\\])]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.VHDLHighlightRules=s}),ace.define(\"ace/mode/vhdl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vhdl_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./vhdl_highlight_rules\").VHDLHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/vhdl\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-visualforce.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\",f=t.supportConstantColor=\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"ruleset\"},{token:\"paren.rparen\",regex:\"\\\\}\"},{token:\"string\",regex:\"@(?!viewport)\",next:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"keyword\",regex:\"%\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:c},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{include:[\"strings\",\"url\",\"comments\"]},{token:\"paren.lparen\",regex:\"\\\\{\",next:\"start\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"string\",regex:\";\",next:\"start\"},{token:\"keyword\",regex:\"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)\"}],comments:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}]}],ruleset:[{regex:\"-(webkit|ms|moz|o)-\",token:\"text\"},{token:\"punctuation.operator\",regex:\"[:;]\"},{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{include:[\"strings\",\"url\",\"comments\"]},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{include:\"url\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}],url:[{token:\"support.function\",regex:\"(?:url(:?-prefix)?|domain|regexp)\\\\(\",push:[{token:\"support.function\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"string\"}]}],strings:[{token:\"string.start\",regex:\"'\",push:[{token:\"string.end\",regex:\"'|$\",next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'\"',push:[{token:\"string.end\",regex:'\"|$',next:\"pop\"},{include:\"escapes\"},{token:\"constant.language.escape\",regex:/\\\\$/,consumeLineEnd:!0},{defaultToken:\"string\"}]}],escapes:[{token:\"constant.language.escape\",regex:/\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,\"double\":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{\"default\":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},\"float\":{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,\"static\":1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e){if(typeof e[t]!=\"string\")continue;var n=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e===\"ruleset\"||t.$mode.$id==\"ace/mode/scss\"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+\": $0;\",meta:\"property\",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\\w\\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]==\"object\"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(/^(\\s+[^;]|\\s*$)/.test(f.substring(s.column)))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}}),this.add(\"!important\",\"insertion\",function(e,t,n,r,i){if(i===\"!\"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\\s*(;|}|$)/.test(o.substring(s.column)))return{text:\"!important\",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./css_completions\").CssCompletions,f=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules((new o({jsx:!1})).getRules(),\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"attribute-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,\"for\":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{\"for\":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,\"default\":1},section:{},summary:{},u:{},ul:{},\"var\":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\"))return this.getTagCompletions(e,t,n,r);if(f(i,\"tag-whitespace\")||f(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,n,r);if(f(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]==\"object\"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"];return i.map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/visualforce_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";function s(e){return{token:e.token+\".start\",regex:e.start,push:[{token:\"constant.language.escape\",regex:e.escape},{token:e.token+\".end\",regex:e.start,next:\"pop\"},{defaultToken:e.token}]}}var r=e(\"../lib/oop\"),i=e(\"../mode/html_highlight_rules\").HtmlHighlightRules,o=function(){var e=this.createKeywordMapper({\"variable.language\":\"$Action|$Api|$Component|$ComponentLabel|$CurrentPage|$FieldSet|$Label|$Label|$ObjectType|$Organization|$Page|$Permission|$Profile|$Resource|$SControl|$Setup|$Site|$System.OriginDateTime|$User|$UserRole|Site|UITheme|UIThemeDisplayed\",keyword:\"\",\"storage.type\":\"\",\"constant.language\":\"true|false|null|TRUE|FALSE|NULL\",\"support.function\":\"DATE|DATEVALUE|DATETIMEVALUE|DAY|MONTH|NOW|TODAY|YEAR|BLANKVALUE|ISBLANK|NULLVALUE|PRIORVALUE|AND|CASE|IF|ISCHANGED|ISNEW|ISNUMBER|NOT|OR|ABS|CEILING|EXP|FLOOR|LN|LOG|MAX|MIN|MOD|ROUND|SQRT|BEGINS|BR|CASESAFEID|CONTAINS|FIND|GETSESSIONID|HTMLENCODE|ISPICKVAL|JSENCODE|JSINHTMLENCODE|LEFT|LEN|LOWER|LPAD|MID|RIGHT|RPAD|SUBSTITUTE|TEXT|TRIM|UPPER|URLENCODE|VALUE|GETRECORDIDS|INCLUDE|LINKTO|REGEX|REQUIRESCRIPT|URLFOR|VLOOKUP|HTMLENCODE|JSENCODE|JSINHTMLENCODE|URLENCODE\"},\"identifier\");i.call(this);var t={token:\"keyword.start\",regex:\"{!\",push:\"Visualforce\"};for(var n in this.$rules)this.$rules[n].unshift(t);this.$rules.Visualforce=[s({start:'\"',escape:/\\\\[btnfr\"'\\\\]/,token:\"string\",multiline:!0}),s({start:\"'\",escape:/\\\\[btnfr\"'\\\\]/,token:\"string\",multiline:!0}),{token:\"comment.start\",regex:\"\\\\/\\\\*\",push:[{token:\"comment.end\",regex:\"\\\\*\\\\/|(?=})\",next:\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"keyword.end\",regex:\"}\",next:\"pop\"},{token:e,regex:/[a-zA-Z$_\\u00a1-\\uffff][a-zA-Z\\d$_\\u00a1-\\uffff]*\\b/},{token:\"keyword.operator\",regex:/==|<>|!=|<=|>=|&&|\\|\\||[+\\-*/^()=<>&]/},{token:\"punctuation.operator\",regex:/[?:,;.]/},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/}],this.normalizeRules()};r.inherits(o,i),t.VisualforceHighlightRules=o}),ace.define(\"ace/mode/visualforce\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/visualforce_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\"],function(e,t,n){\"use strict\";function a(){i.call(this),this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new o}var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./visualforce_highlight_rules\").VisualforceHighlightRules,o=e(\"./behaviour/xml\").XmlBehaviour,u=e(\"./folding/html\").FoldMode;r.inherits(a,i),a.prototype.emmetConfig={profile:\"xhtml\"},t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-wollok.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function a(){var e=o.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,n){var r=e.charAt(1)==\"/\"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:\"meta.tag.punctuation.\"+(r==1?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,r)},{type:\"meta.tag.tag-name.xml\",value:e.substr(r)}]},regex:\"</?\"+e+\"\",next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var n={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[n,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},n,f(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function f(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\",u=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),f(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+o+\")(\\\\.)(prototype)(\\\\.)(\"+o+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+o+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"from(?=\\\\s*('|\\\"))\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:o},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"storage.type\",regex:/=>/,next:\"start\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+o+\")(\\\\.)(\"+o+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:o},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),f(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:o},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",consumeLineEnd:!0},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)n.unshift(\"start\",t);else if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1||this.next.indexOf(\"jsx\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$quotes={'\"':'\"',\"'\":\"'\",\"`\":\"`\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/wollok_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"test|describe|package|inherits|false|import|else|or|class|and|not|native|override|program|self|try|const|var|catch|object|super|throw|if|null|return|true|new|constructor|method|mixin\",t=\"null|assert|console\",n=\"Object|Pair|String|Boolean|Number|Integer|Double|Collection|Set|List|Exception|Range|StackTraceElement\",r=this.createKeywordMapper({\"variable.language\":\"self\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"===|&&|\\\\*=|\\\\.\\\\.|\\\\*\\\\*|#|!|%|\\\\*|\\\\?:|\\\\+|\\\\/|,|\\\\+=|\\\\-|\\\\.\\\\.<|!==|:|\\\\/=|\\\\?\\\\.|\\\\+\\\\+|>|=|<|>=|=>|==|\\\\]|\\\\[|\\\\-=|\\\\->|\\\\||\\\\-\\\\-|<>|!=|%=|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.WollokHighlightRules=o}),ace.define(\"ace/mode/wollok\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/wollok_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./wollok_highlight_rules\").WollokHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/wollok\"}.call(o.prototype),t.Mode=o});                (function() {\n                    ace.require([\"ace/mode/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-xml.js",
    "content": "ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l});                (function() {\n                    ace.require([\"ace/mode/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-xquery.js",
    "content": "ace.define(\"ace/mode/xquery/xquery_lexer\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=function r(t,n,i){function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(s)return s(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return o(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var s=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)o(i[u]);return o(i[0])}({\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(e,t,n){var r=n.XQueryTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 77:f(77);break;case 91:f(91);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 140:f(140);break;case 147:f(147);break;case 160:f(160);break;case 180:f(180);break;case 186:f(186);break;case 211:f(211);break;case 221:f(221);break;case 222:f(222);break;case 238:f(238);break;case 239:f(239);break;case 248:f(248);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 14:f(14);break;case 65:f(65);break;case 68:f(68);break;case 69:f(69);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 88:f(88);break;case 89:f(89);break;case 98:f(98);break;case 100:f(100);break;case 103:f(103);break;case 104:f(104);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 113:f(113);break;case 114:f(114);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 148:f(148);break;case 154:f(154);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 165:f(165);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 177:f(177);break;case 179:f(179);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 213:f(213);break;case 214:f(214);break;case 215:f(215);break;case 219:f(219);break;case 224:f(224);break;case 230:f(230);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 245:f(245);break;case 249:f(249);break;case 251:f(251);break;case 255:f(255);break;case 261:f(261);break;case 265:f(265);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 257:f(257);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 26:f(26);break;case 65:f(65);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 89:f(89);break;case 100:f(100);break;case 104:f(104);break;case 108:f(108);break;case 113:f(113);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 126:f(126);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 215:f(215);break;case 219:f(219);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 249:f(249);break;case 261:f(261);break;case 265:f(265);break;case 68:f(68);break;case 69:f(69);break;case 77:f(77);break;case 88:f(88);break;case 91:f(91);break;case 98:f(98);break;case 103:f(103);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 114:f(114);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 124:f(124);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 140:f(140);break;case 147:f(147);break;case 148:f(148);break;case 154:f(154);break;case 160:f(160);break;case 165:f(165);break;case 177:f(177);break;case 179:f(179);break;case 180:f(180);break;case 186:f(186);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 211:f(211);break;case 213:f(213);break;case 214:f(214);break;case 221:f(221);break;case 222:f(222);break;case 224:f(224);break;case 230:f(230);break;case 238:f(238);break;case 239:f(239);break;case 245:f(245);break;case 248:f(248);break;case 251:f(251);break;case 255:f(255);break;case 257:f(257);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=28)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 55:f(55);break;case 54:f(54);break;case 56:f(56);break;case 40:f(40);break;case 42:f(42);break;case 41:f(41);break;case 35:f(35);break;case 38:f(38);break;case 274:f(274);break;case 271:f(271);break;case 39:f(39);break;case 43:f(43);break;case 49:f(49);break;case 62:f(62);break;case 63:f(63);break;case 46:f(46);break;case 48:f(48);break;case 53:f(53);break;case 51:f(51);break;case 34:f(34);break;case 273:f(273);break;case 2:f(2);break;case 1:f(1);break;case 3:f(3);break;case 12:f(12);break;case 13:f(13);break;case 15:f(15);break;case 16:f(16);break;case 17:f(17);break;case 5:f(5);break;case 6:f(6);break;case 4:f(4);break;case 33:f(33);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 58:f(58);break;case 50:f(50);break;case 27:f(27);break;case 57:f(57);break;case 35:f(35);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 23:f(23);break;case 6:f(6);break;case 7:f(7);break;case 55:f(55);break;case 54:f(54);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;default:f(33)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 20:f(20);break;case 25:f(25);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 19:f(19);break;case 24:f(24);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 11:f(11);break;case 64:f(64);break;default:f(33)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 9:f(9);break;case 47:f(47);break;default:f(33)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 10:f(10);break;case 59:f(59);break;case 60:f(60);break;default:f(33)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 8:f(8);break;case 36:f(36);break;case 37:f(37);break;default:f(33)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 52:f(52);break;case 41:f(41);break;case 30:f(30);break;default:f(33)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(5);switch(y){case 31:f(31);break;case 32:f(32);break;case 52:f(52);break;case 41:f(41);break;default:f(33)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(6);switch(y){case 18:f(18);break;case 29:f(29);break;case 19:f(19);break;case 21:f(21);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 18:f(18);break;case 29:f(29);break;case 20:f(20);break;case 22:f(22);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<276;i+=32){var s=i,o=(i>>5)*2062+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,35,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35,35,35,35,35,35,35,35,35,35,35,35,31,31,35,35,35,35,35,35,35,65,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,35,31,35,31,31,35],r.INITIAL=[1,2,36867,45060,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22908,18836,17152,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18579,21711,17152,19008,19233,20367,19008,28684,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20116,18836,18637,19008,19233,21267,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18763,18778,18794,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18821,22923,18906,19008,19233,17431,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18937,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19054,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,18953,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21843,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21696,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22429,20131,18720,19008,19233,20367,19008,17173,23559,36437,17330,17349,18921,17189,17208,17281,20355,18087,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,21242,19111,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19024,18836,18609,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19081,22444,18987,19008,19233,20367,19008,19065,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21992,22007,18987,19008,19233,20367,19008,18690,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22414,18836,18987,19008,19233,30651,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19138,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19280,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,19172,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21783,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19218,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21651,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19249,19265,19307,18888,27857,30536,24401,31444,23357,18888,19351,18888,18890,27211,19370,27211,27211,19392,24401,31911,24401,24401,25467,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,17994,24060,18888,18888,18888,18890,19468,27211,27211,27211,27211,19484,35367,19520,24401,24401,24401,19628,18888,29855,18888,18888,23086,27211,19538,27211,27211,30756,24012,24401,19560,24401,24401,26750,18888,18888,19327,27855,27211,27211,19580,17590,24017,24401,24401,19600,25665,18888,18888,28518,27211,27212,24016,19620,19868,28435,25722,18889,19644,27211,32888,35852,19868,31018,19694,19376,19717,22215,19735,22098,19751,35203,19776,19797,19817,19840,25783,31738,24135,19701,19856,31015,23516,31008,28311,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21768,18836,19307,18888,27857,27904,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,19888,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22399,18836,19918,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21666,18836,19307,18888,27857,27525,24401,29183,21467,18888,18888,18888,18890,27211,27211,27211,27211,19946,24401,24401,24401,24401,32382,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19998,24401,24401,24401,24401,31500,18467,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,20021,24401,24401,24401,24401,24401,34271,18888,18888,18888,18888,23086,27211,27211,27211,27211,32926,29908,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,20050,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20101,19039,20191,20412,20903,17569,20309,20872,25633,20623,20505,20218,20242,17189,17208,17281,20355,20265,20306,20328,20383,22490,20796,20619,21354,20654,20410,20956,21232,20765,17421,20535,17192,18127,22459,20312,25531,22470,20309,20428,18964,20466,20491,21342,21070,20521,20682,17714,18326,17543,17559,17585,22497,20559,19504,20279,20575,20290,20475,20604,20639,20226,20670,17661,21190,17703,21176,17730,19494,20698,20711,22480,21046,21116,18971,21130,20727,20755,17675,17753,17832,17590,25518,20394,20781,20831,20202,20847,21401,17292,17934,17979,18549,20863,20588,25542,20888,20919,18072,18117,20935,20972,21032,21062,21086,18239,21102,18563,21146,21162,21206,18351,20949,20902,18340,21222,21258,21283,18360,20249,17405,21295,21311,21327,20739,20343,21370,21386,21417,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21977,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,21452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,21504,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,36501,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,28674,21946,17617,36473,18223,17237,17477,19152,17860,17892,17675,17753,17832,21575,21534,17481,19156,17864,18731,17918,36551,17292,17934,21560,30628,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21798,18836,21612,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21636,18836,18987,19008,19233,17902,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21753,19096,21903,19008,19233,20367,19008,19291,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17379,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,21931,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18280,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21962,18594,18987,19008,19233,22043,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21681,21858,18987,19008,19233,20367,19008,21544,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,32319,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,22231,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,31678,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,33588,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,35019,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22248,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22324,18836,22059,18888,27857,30501,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,34365,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22354,18836,18987,19008,19233,20367,19008,17173,27086,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,19930,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22309,22513,18987,19008,19233,20367,19008,19122,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,22544,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22608,18836,22988,23004,27585,23020,23036,23067,22087,18888,18888,18888,23083,27211,27211,27211,23102,22121,24401,24401,24401,23122,31386,26154,19674,18888,28119,28232,19424,23705,27211,27211,23142,23173,23189,23212,24401,24401,23246,34427,31693,23262,18888,23290,23308,27783,27620,23327,35263,35107,33383,23346,18193,23393,32748,23968,24401,23414,35153,23463,18888,33913,23442,23482,27211,27211,23532,23552,21431,23575,24401,24401,23604,26095,23635,23657,18888,33482,23685,33251,27211,22187,18851,23721,35536,24401,18887,23750,32641,27211,23769,23787,20080,33012,24384,25659,18888,18889,27211,27211,19719,23889,23803,31018,18890,27211,31833,19406,19447,23086,23330,19828,28224,31826,23823,26917,34978,23850,26493,25782,23878,23914,23516,31008,22105,19419,27963,19659,29781,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22623,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,28909,25783,27211,27211,27211,34048,23933,22164,24401,24401,24401,28409,23949,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,26583,18888,18888,18888,35585,23984,27211,27211,27211,24005,22201,24033,24401,24401,24401,24052,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,26496,24076,24126,24151,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22638,18836,22059,19678,27857,24185,24401,24201,24217,26592,18888,18888,18890,24252,24268,27211,27211,22121,24287,24303,24401,24401,30613,19781,35432,36007,32649,18888,25783,24322,28966,23771,27211,35072,22164,24358,32106,26829,24400,31500,31693,18888,18888,18888,24801,18890,27211,27211,27211,27211,24418,19484,24401,24401,24401,24401,20167,31181,18888,18888,18888,27833,23086,27211,27211,33540,27211,30756,21431,24401,24401,22972,24401,26095,18888,36131,18888,27855,27211,24440,27211,22187,22968,24401,24459,24401,31699,28454,18888,34528,34570,35779,24478,24402,24494,25659,18888,36228,27211,27211,24515,30981,23734,31018,18890,27211,31833,19406,19447,23086,23330,24538,31017,27856,31741,30059,23377,24563,19837,25782,19760,31015,23516,25374,22105,19419,29793,24579,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22653,18836,22059,25756,19982,34097,23196,29183,24614,24110,23641,24673,26103,24697,24443,24713,28558,22121,24748,24462,24764,23398,30613,18888,18888,18888,18888,24798,25783,27211,27211,27211,34232,35072,22164,24401,24401,24401,33302,31500,22559,24106,24232,18888,18888,34970,24817,30411,27211,27211,32484,19484,29750,35127,24401,24401,19872,31181,24852,18888,18888,24871,29221,27211,27211,32072,27211,30756,34441,24401,24401,31571,24401,26095,33141,27802,27011,27855,25295,25607,24888,22187,22968,19195,34593,24906,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,33663,27211,27211,24924,24947,23588,31018,18890,27211,31833,22135,19447,23086,23330,19828,30904,31042,24972,19840,25e3,31738,30898,25782,19760,31015,23516,31008,22105,19419,25016,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22668,18836,25041,25057,31320,25073,25089,25105,22087,34796,24236,36138,34870,34125,25121,23106,35497,22248,36613,25137,30671,27365,30613,25153,26447,25199,25233,22574,23274,25249,25265,25281,25318,25344,25360,25400,25428,25452,26731,25504,31693,23669,25558,27407,25575,28599,25934,25599,27211,28180,27304,25623,25839,25649,24401,34820,25681,25698,22586,27775,30190,25745,25778,25799,25817,28995,33569,30756,21518,33443,25837,25855,25893,26095,31254,26677,30136,27855,25930,25950,27211,22187,22968,25966,25986,24401,23428,27763,36330,26959,26002,26029,26045,26085,26119,26170,26203,26222,26239,30527,26372,26274,28404,31018,33757,27211,34262,26316,36729,26345,26366,35337,31017,26388,26407,30954,26350,33861,26434,26463,26479,26512,23516,33189,26531,26547,27963,31293,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22683,18836,26568,26181,26608,34097,26643,29183,22087,26669,18888,18888,18890,26693,27211,27211,27211,22121,26720,24401,24401,24401,30613,18888,18888,18888,18888,26774,25783,27211,27211,27211,26619,35072,22164,24401,24401,24401,21596,31500,31693,18888,18888,33978,18888,18890,27211,27211,25801,27211,27211,19484,24401,24401,24401,26792,24401,31181,18888,18888,18888,35464,23086,27211,27211,27211,26809,30756,21431,24401,24401,24401,26828,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,31948,18889,35707,27211,19719,26845,19868,31018,18890,27211,31833,19406,19447,23086,23330,26905,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,24984,31088,19419,26945,27651,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22698,18836,26999,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23051,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,27033,24401,24401,24401,24401,24036,31693,18888,18888,27056,18888,18890,27211,27211,30320,27211,27211,27075,24401,24401,29032,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,33986,27855,27211,27211,27102,17590,24017,24401,24401,27123,27144,36254,27162,27210,27228,28500,18187,34842,33426,27244,35980,27277,27302,27320,36048,34013,20999,31882,21478,27895,27356,30287,27381,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,26329,30087,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,27406,27423,27445,35294,27461,22087,18888,18888,30140,18890,27211,27211,27989,27211,22121,24401,24401,25682,24401,18866,18888,18888,18888,18888,18888,34042,27211,27211,27211,27211,29700,22164,24401,24401,24401,24401,27128,31693,27477,18888,18888,18888,18890,27194,27211,27211,27211,27211,19484,35299,24401,24401,24401,24401,19628,18888,18888,18888,27059,23086,27211,27211,27211,33366,30756,24012,24401,24401,24401,35044,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,20815,27211,30818,19960,33969,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22713,18836,22059,27496,27516,27541,35231,27557,22087,29662,26292,23292,27573,24836,27601,27211,27636,22121,35544,27686,24401,27721,18866,18888,27799,18888,27818,22071,27853,32260,27211,26013,27873,27920,22164,29419,24401,29946,33413,26742,27751,26881,18888,18888,27261,36776,27936,27211,27211,27211,27988,28005,28031,28052,24401,24401,28069,28088,28135,25488,28152,26069,28167,27211,28340,24657,28196,30756,31523,24401,28212,34176,36174,24956,28248,28266,28290,21488,33077,28327,28356,17590,20986,23126,28391,28425,28102,28451,28470,28490,28516,28534,20034,33728,25868,25659,18888,18889,27211,27211,19719,23889,19868,30241,28274,28553,28574,19406,28590,23086,23330,19828,19452,28615,28660,26147,25783,31738,19837,25782,19760,29613,35958,29276,22105,19419,27963,23157,28700,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,22528,18888,18888,18888,18888,18890,27333,27211,27211,27211,27211,19484,30853,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22728,18836,28747,28782,28817,28841,28857,28880,28896,24161,28943,32011,36261,27340,28961,29492,28982,29011,24522,29027,25436,29048,23051,27500,29090,29110,30713,18888,23512,29130,25183,27211,29155,28927,27033,29173,23230,24401,29199,35373,31693,18888,18888,25583,32629,29218,27211,27211,31461,30692,29237,27075,24401,24401,24401,29262,29302,19628,18888,34329,18888,18888,23086,27211,29329,27211,27211,30756,24012,35933,24401,24401,24401,27705,31612,18888,18888,29346,29374,27211,35650,17590,21436,29393,24401,25970,18887,33895,18888,27211,32528,27212,24016,32769,19868,25659,18888,26889,27211,27211,29412,23889,24371,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31768,19840,25783,31738,19837,29435,29508,31102,29550,29606,22105,30300,29462,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22743,18836,22059,29629,29473,34097,33285,29183,29651,27254,18888,29678,33329,32535,27211,29694,29716,22121,19202,24401,32742,29741,18866,26776,33921,28474,18888,18888,25783,29766,27211,29809,27211,35072,22164,35825,24401,29828,24401,24036,36769,25217,18888,18888,29848,18890,27211,29871,27211,26258,27211,29894,24401,29929,24401,36587,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,29725,29962,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18473,18888,18888,19584,27211,27212,24016,29982,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19902,19447,32052,19544,19828,29998,30097,30031,19840,25783,30047,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,30075,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22758,18836,30121,30156,30206,30257,30273,30336,22087,35624,32837,25762,18890,29878,34934,26812,27211,22121,24931,23223,29202,24401,18866,34373,30352,18888,18888,18888,23447,24828,27211,27211,27211,35072,30370,35052,24401,24401,24401,24036,29523,18888,18888,27146,18888,31308,30386,27211,27211,30405,30558,19484,30427,24401,24401,29938,35686,19628,28766,30447,34506,35614,23086,28731,30482,30517,30552,30756,24012,20156,30574,30598,30667,26283,33464,28945,27670,30687,32915,33504,25328,17590,23963,20450,33837,21016,32397,26300,30708,30729,27885,30748,21588,36373,30779,26653,24628,33220,32514,30806,31835,25412,25906,26515,18890,28825,31833,26133,19447,28304,31730,23834,26057,30869,30885,32181,30920,30942,32797,25782,30970,31015,23516,31008,30997,31034,27963,19659,29450,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22773,18836,31058,31074,32463,31125,31141,31197,22087,18888,29534,35471,36738,27211,24342,31213,24424,22121,24401,20175,31229,31917,27736,31245,34334,27175,18888,29094,27286,27211,31278,31336,27211,31355,31371,24401,31402,31418,24401,31437,31693,18888,31619,32841,18888,18890,27211,27211,31460,31477,27211,19484,24401,24401,31497,36581,24401,33020,18888,18888,18888,18888,30007,27211,27211,27211,27211,31516,32310,24401,24401,24401,24401,31539,18888,28762,18888,24651,35740,27211,27211,28644,31565,35796,24401,24401,19318,32188,18888,24334,28366,27212,29966,29832,19868,25659,18888,18889,27211,27211,19719,31587,19868,31635,32435,33693,30105,31663,20005,31715,31757,31784,31812,30015,31851,31878,25783,31898,19837,25782,19760,31015,23516,31008,22105,19419,27963,31933,30221,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22788,18836,22059,25729,30466,31968,24306,31984,32e3,32807,35160,27017,29590,34941,19801,29377,33700,22121,27040,30431,29396,28864,29565,18888,18888,18888,32027,18888,25783,27211,27211,23698,27211,35072,22164,24401,24401,30845,24401,24036,32045,18888,26929,18888,18888,18890,27211,31481,32068,27211,27211,32088,24401,33058,32122,24401,24401,33736,18888,18888,33162,18888,23086,27211,27211,29484,27211,28375,32144,24401,24401,33831,24401,26750,18888,18888,18888,27855,27211,27211,27211,36704,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,33107,22171,33224,24271,32169,31017,27856,31741,19840,25783,31738,30234,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,32204,32232,32252,32677,33295,29074,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23619,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,32276,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,32299,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,33886,18889,36065,27211,19719,35326,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22803,18836,32335,31647,34666,32351,32367,32417,22087,18888,32433,19335,32451,27211,32479,27107,32500,22121,24401,32551,20085,32572,18866,22287,23753,18888,18888,32602,32665,27211,32693,27211,26972,32713,32729,24401,32764,24401,25877,32785,34768,18888,27390,32823,24594,24855,32857,24890,32878,32904,27211,32942,32977,24401,33e3,29313,24401,30790,26206,27666,33904,18888,23086,36353,27211,33036,27211,30756,24012,32153,24401,33056,24401,35861,18888,18888,30354,27972,27211,27211,33800,17590,20145,24401,24401,34638,20811,18888,18888,33074,27211,27212,36167,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,34616,24169,33093,33123,33157,27856,31741,23862,26552,34302,19837,25782,19760,31015,23516,31008,33178,19973,27963,23497,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22818,18836,33205,28113,33240,34097,33275,29183,22087,33318,35438,18888,18890,33345,26391,33382,27211,22121,33399,28072,33442,24401,18866,22232,18888,33459,18888,18888,33480,33498,25175,27211,27211,26704,22164,24775,35239,24401,24401,25914,29580,18888,18888,31109,25211,33520,33539,27211,27211,33556,36284,19484,33585,24401,24401,33604,32556,19628,18888,18888,31262,33658,23086,27211,27211,33679,27211,30756,24012,24401,24401,33716,24401,26854,27480,18888,33752,27855,33259,34701,27211,17590,32102,24782,23807,24401,18887,18888,18888,27211,27211,27212,33773,36105,19868,25659,18888,23368,27211,29157,19719,23889,34454,29286,18890,33794,25302,33816,19447,34079,33853,31862,31017,27856,31741,33877,28920,33937,19837,30461,34002,22276,36041,34029,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22833,18836,34064,32616,34113,34141,34157,34192,34208,32216,36013,31549,31952,34224,34248,34287,29330,34350,34389,34413,34481,26793,18866,26187,29635,22293,18888,36654,25783,34522,34544,34566,25821,35072,22164,34586,34609,34632,19604,24036,36644,36674,24681,18888,32401,34654,31339,34682,34698,27211,34717,34753,28053,34812,34836,24401,33619,19628,34858,32236,34906,24598,33523,27612,34890,34922,24732,29246,36717,33634,34465,32984,34168,26750,34957,18888,18888,34994,35010,27211,33040,17590,29913,35035,24401,36304,25482,30171,35883,35068,35088,26627,20441,31173,35123,35143,35176,24640,30492,29358,19719,35192,35219,25384,28801,35255,35279,32586,34496,23086,23330,29061,31017,27856,31741,19840,25783,31738,24547,25164,35315,31796,35353,34316,22105,19419,27963,24091,28630,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22848,18836,22059,34782,34088,35389,21008,35405,35421,35454,18888,18888,23466,35487,27211,27211,27211,35513,31154,24401,24401,24401,35560,18888,26863,36664,35601,24872,25783,30389,23536,26250,35647,35666,22164,19522,19564,30582,35682,27697,35575,29114,18888,18888,18888,18890,27211,35702,27211,27211,27211,35723,24401,35527,24401,24401,24401,19628,30184,18888,18888,18888,23086,35739,27211,27211,27211,29139,22938,24401,24401,24401,24401,23898,35756,18888,18888,25025,35778,27211,27211,17590,20064,35795,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,23917,18890,34550,31833,22262,19447,23086,23330,26418,31017,27856,31741,19840,25783,35812,19837,27187,35841,33135,23516,31008,22105,22148,28712,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22863,18836,22059,35877,28723,34097,31164,29183,22087,26758,18888,22592,18890,23989,27211,29812,27211,22121,33778,24401,31421,24401,18866,18888,18888,26872,18888,18888,25783,27211,30732,27211,27211,35072,22164,24401,24908,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22878,18836,22059,27837,27857,35899,24401,35915,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31602,18888,18888,18888,18888,26223,27211,27211,27211,27211,27211,19484,35931,24401,24401,24401,24401,19628,18888,28136,18888,18888,35949,27211,32862,27211,32697,30756,24012,24401,32283,24401,32128,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22893,18836,22059,35974,34882,34097,33960,29183,35996,18888,23311,18888,36029,27211,27211,36064,36081,22121,24401,24401,36104,33950,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,36121,18888,25559,18888,18888,18890,27211,27211,30313,27211,27211,36154,24401,24401,34397,24401,24401,19628,28250,18888,18888,18888,23086,30926,27211,27211,27211,26983,24012,33642,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,19354,27857,36190,24401,36206,22087,18888,18888,18888,18007,27211,27211,27211,24724,22121,24401,24401,24401,30827,18866,18888,36222,18888,28795,18888,25783,35100,27211,27429,27211,35072,22164,30836,24401,24499,24401,24036,31693,18888,36244,18888,18888,18890,27211,36088,27211,27211,27211,19484,24401,28036,24401,24401,24401,19628,18888,18888,35631,18888,35762,27211,27211,36277,27211,34730,24012,24401,24401,36300,24401,36320,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,25712,18888,18888,36346,27211,27212,19184,24402,19868,25659,32029,18889,27211,33359,19719,23889,36369,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22384,18836,36389,19008,19233,20367,36434,17173,17595,36437,17330,17349,18921,17189,17208,17281,20355,36453,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22369,18836,18987,19008,19233,20367,19008,21737,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21813,18836,36489,19008,19233,20367,19008,17173,17737,36437,17330,17349,18921,17189,17208,17281,20355,17768,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20543,22022,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,36517,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,19307,18888,27857,30756,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,36567,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,36603,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,36629,36690,18720,19008,19233,20367,19008,17454,17595,36437,17330,17349,18921,17189,17208,17281,20355,17223,17308,17327,17346,18918,36754,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,0,94242,0,118820,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2482176,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,27,27,27,2207744,2404352,2412544,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3104768,2605056,2207744,2207744,2207744,2207744,2207744,2207744,2678784,2207744,2695168,2207744,2703360,2207744,2711552,2752512,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,0,2158592,2158592,3170304,3174400,2158592,0,139,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2158592,2158592,2158592,2863104,2891776,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2785280,2207744,2809856,2207744,2207744,2842624,2207744,2207744,2207744,2899968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2473984,2207744,2207744,2494464,2207744,2207744,2207744,2523136,2158592,2404352,2412544,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2605056,2158592,2158592,2158592,2158592,2158592,2158592,2678784,2158592,2695168,2158592,2703360,2158592,2711552,2752512,2158592,2158592,2785280,2158592,2158592,2785280,2158592,2809856,2158592,2158592,2842624,2158592,2158592,2158592,2899968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,18,0,0,0,0,0,0,0,2211840,0,0,641,0,2158592,0,0,0,0,0,0,0,0,2211840,0,0,32768,0,2158592,0,2158592,2158592,2158592,2383872,2158592,2158592,2158592,2158592,3006464,2383872,2207744,2207744,2207744,2207744,2158877,2158877,2158877,2158877,0,0,0,2158877,2572573,2158877,2158877,0,2207744,2207744,2596864,2207744,2207744,2207744,2207744,2207744,2207744,2641920,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,167936,0,0,2162688,0,0,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,0,0,2146304,2146304,2224128,2224128,2232320,2232320,2232320,641,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2531328,2158592,2158592,2158592,2158592,2158592,2617344,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,2158592,2502656,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2158592,2158592,2158592,2158592,2158592,2699264,2158592,2158592,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2207744,2863104,2891776,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3018752,2207744,3043328,2207744,2207744,2207744,2207744,3080192,2207744,2207744,3112960,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,172310,279,0,2162688,0,0,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2158592,2158592,2158592,2404352,2412544,2158592,2510848,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2584576,2158592,2609152,2158592,2158592,2629632,2158592,2158592,2158592,2686976,2158592,2715648,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2158592,2158592,3170304,3174400,2158592,2367488,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,0,2207744,2207744,2207744,2433024,2207744,2453504,2461696,2207744,2207744,2207744,2207744,2207744,2207744,2510848,2207744,2207744,2207744,2207744,2207744,2531328,2207744,2207744,2207744,2207744,2207744,2617344,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,1508,2715648,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2867200,2207744,2904064,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2580480,2207744,2207744,2207744,2207744,2621440,2207744,2207744,2207744,3149824,2207744,2207744,3170304,3174400,2207744,0,0,0,0,0,0,0,0,0,0,138,2158592,2158592,2158592,2404352,2412544,2707456,2732032,2207744,2207744,2207744,2822144,2826240,2207744,2895872,2207744,2207744,2924544,2207744,2207744,2973696,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,285,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3186688,2158592,2207744,2207744,2158592,2158592,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2158592,0,0,2535424,2543616,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2990080,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2572288,2981888,2207744,2207744,3002368,2207744,3047424,3063808,3076096,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3203072,2708960,2732032,2158592,2158592,2158592,2822144,2827748,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2981888,2158592,2158592,3002368,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2981888,2158592,2158592,3003876,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,20480,0,0,0,0,0,2162688,20480,0,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2908160,2527232,2207744,2207744,2576384,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2908160,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,286,2158592,2158592,0,0,2158592,2158592,2158592,2158592,2633728,2658304,0,0,2740224,2744320,0,2834432,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,0,0,29315,0,0,0,0,45,45,45,45,45,933,45,45,45,45,442,45,45,45,45,45,45,45,45,45,67,67,2494464,2158592,2158592,2158592,2524757,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,1504,2158592,2498560,2158592,2158592,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,2736128,2158592,2158592,0,2158592,2912256,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3108864,2158592,2158592,3133440,3145728,3153920,2375680,2379776,2207744,2207744,2420736,2207744,2449408,2207744,2207744,2207744,2498560,2207744,2207744,2207744,2207744,2568192,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,551,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,2020,2158592,2592768,2625536,2207744,2207744,2674688,2736128,2207744,2207744,2207744,2912256,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,542,0,544,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,641,0,0,0,0,0,0,2367488,2158592,2498560,2158592,2158592,1621,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,1608,97,97,97,97,97,97,97,97,97,97,1107,97,97,1110,97,97,3133440,3145728,3153920,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3014656,2158592,2158592,3051520,2158592,2158592,3100672,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2416640,2207744,2465792,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2633728,2658304,2740224,2744320,2834432,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,32768,0,0,0,0,0,0,2367488,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2158592,2158592,2478080,2158592,2158592,2158592,2535424,2543616,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3117056,2207744,2207744,2478080,2207744,2207744,2207744,2207744,2699264,2207744,2207744,2207744,2207744,2207744,2748416,2756608,2777088,2801664,2207744,2207744,2158877,2158877,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,0,0,2535709,2543901,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2990365,2158877,2158877,2158730,2158730,2158730,2158730,2158730,2572426,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158592,2158592,2478080,2207744,2207744,2990080,2207744,2207744,2158592,2158592,2482176,2158592,2158592,0,0,0,2158592,2158592,2158592,0,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,3010560,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158592,2428928,2158592,2514944,0,0,2158592,2588672,2158592,0,2838528,2158592,2158592,2158592,3010560,2158592,2506752,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,0,29315,922,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,1539,45,3006464,2383872,0,2020,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,2207744,0,0,2158592,2637824,2953216,2158592,2539520,2158592,2539520,2207744,0,0,2539520,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,0,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2965504,2965504,2965504,0,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2474269,2158877,2158877,0,0,2158877,2158877,2158877,2158877,2634013,2658589,0,0,2740509,2744605,0,2834717,40976,18,36884,45078,24,28,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,36884,0,0,0,24,24,24,27,27,27,27,90143,0,0,86016,0,0,2211840,102439,0,0,0,98347,0,2158592,2158592,2158592,2158592,2158592,3158016,0,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,0,94242,0,0,0,2211840,102439,0,0,106538,98347,135,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2158592,2158592,2158592,2596864,2158592,2158592,2158592,2158592,2158592,2158592,2641920,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2494464,2158592,2158592,2158592,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,0,27,27,0,2158592,2498560,2158592,2158592,0,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2494464,2158592,2158592,2158592,3006464,2383872,0,0,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,40976,18,36884,45078,24,27,147488,94242,147456,147488,106538,98347,0,0,147456,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,81920,0,94242,0,0,0,2211840,0,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2428928,2158592,2514944,2158592,2588672,2158592,2838528,2158592,2158592,40976,18,151573,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,1487,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,0,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,130,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,3096576,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,644,2207744,2207744,2207744,3186688,2207744,0,1080,0,1084,0,1088,0,0,0,0,0,0,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2531466,2158730,2158730,2158730,2158730,2158730,2617482,0,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2158592,2818048,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,159779,159744,102439,159779,98347,0,0,159744,40976,18,18,36884,0,45078,0,2224253,172032,2224253,2232448,2232448,172032,2232448,90143,0,0,2170880,0,0,550,829,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,124,124,127,127,127,40976,18,36884,45078,25,29,90143,94242,0,102439,106538,98347,0,0,163931,40976,18,18,36884,0,45078,249856,24,24,24,27,27,27,27,90143,0,0,2170880,0,0,827,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,4243810,4243810,24,24,27,27,27,2207744,0,0,0,0,0,0,2166784,0,0,0,0,57344,286,2158592,2158592,2158592,2158592,2707456,2732032,2158592,2158592,2158592,2822144,2826240,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,53248,0,0,0,0,0,97,97,97,97,97,1613,97,97,97,97,97,97,1495,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,2207744,0,0,0,0,0,0,2166784,546,0,0,0,0,286,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,17,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,120,121,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,2170880,0,53248,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,196608,18,266240,24,24,27,27,27,0,94242,0,0,0,38,102439,0,0,106538,98347,0,45,45,45,45,45,45,45,1535,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,424,45,45,45,45,45,45,45,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,199,45,45,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1766,67,67,67,1767,67,24850,24850,12564,12564,0,0,2166784,546,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,743,57889,0,2170880,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1856,45,1858,1859,67,67,67,1009,67,67,67,67,67,67,67,67,67,67,67,1021,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,0,2367773,2158877,2158877,2158877,2158877,2158877,2158877,2699549,2158877,2158877,2158877,2158877,2158877,2748701,2756893,2777373,2801949,97,1115,97,97,97,97,97,97,97,97,97,97,97,97,97,97,857,97,67,67,67,67,67,1258,67,67,67,67,67,67,67,67,67,67,67,1826,67,97,97,97,97,97,97,1338,97,97,97,97,97,97,97,97,97,97,97,97,97,870,97,97,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1579,67,67,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,97,904,905,97,97,97,97,1620,97,97,97,97,97,97,97,97,97,97,97,0,921,0,0,0,0,0,0,45,1679,67,67,67,1682,67,67,67,67,67,67,67,67,67,1690,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,189,45,45,45,1748,45,45,45,1749,1750,45,45,45,45,45,45,45,45,67,67,67,67,1959,67,67,67,67,1768,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,1791,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1802,67,1817,67,67,67,67,67,67,1823,67,67,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,1848,45,45,45,45,45,45,45,45,45,45,45,659,45,45,45,45,45,45,45,1863,67,67,67,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,1878,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,67,67,67,67,97,97,97,97,0,0,0,1973,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1165,97,1167,67,24850,24850,12564,12564,0,0,2166784,0,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,1789,97,0,94242,0,0,0,2211840,102439,0,0,106538,98347,136,2158592,2158592,2158592,2158592,2158592,3158016,229376,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,67,24850,24850,12564,12564,0,0,280,547,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,1788,97,97,0,97,2024,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,235,67,67,67,67,67,57889,547,547,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,1799,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1092,0,0,0,0,0,97,97,97,97,1612,97,97,97,97,1616,97,1297,1472,0,0,0,0,1303,1474,0,0,0,0,1309,1476,0,0,0,0,97,97,97,1481,97,97,97,97,97,97,1488,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,97,607,97,97,97,97,40976,18,36884,45078,26,30,90143,94242,0,102439,106538,98347,0,0,213080,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,143448,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,0,0,0,97,97,97,97,1482,97,1483,97,97,97,97,97,97,1326,97,97,1329,1330,97,97,97,97,97,97,1159,1160,97,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,0,94242,0,0,0,2211974,102439,0,0,106538,98347,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2474122,2158730,2158730,2494602,2158730,2158730,2158730,2809994,2158730,2158730,2842762,2158730,2158730,2158730,2900106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3014794,2158730,2158730,3051658,2158730,2158730,3100810,2158730,2158730,2158730,2158730,3096714,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,2207744,541,541,543,543,0,0,2166784,0,548,549,549,0,286,2158877,2158877,2158877,2863389,2892061,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3186973,2158877,0,0,0,0,0,0,0,0,2367626,2158877,2404637,2412829,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2564381,2158877,2158877,2605341,2158877,2158877,2158877,2158877,2158877,2158877,2679069,2158877,2695453,2158877,2703645,2158877,2711837,2752797,2158877,0,2158877,2158877,2158877,2384010,2158730,2158730,2158730,2158730,3006602,2383872,2207744,2207744,2207744,2207744,2207744,2207744,3096576,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,0,2158877,2785565,2158877,2810141,2158877,2158877,2842909,2158877,2158877,2158877,2900253,2158877,2158877,2158877,2158877,2158877,2531613,2158877,2158877,2158877,2158877,2158877,2617629,2158877,2158877,2158877,2158877,2158730,2818186,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3105053,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,0,0,0,0,0,97,97,97,1611,97,97,97,97,97,97,97,1496,97,97,1499,97,97,97,97,97,2441354,2445450,2158730,2158730,2158730,2158730,2158730,2158730,2502794,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2433162,2158730,2453642,2461834,2158730,2158730,2158730,2158730,2158730,2158730,2580618,2158730,2158730,2158730,2158730,2621578,2158730,2158730,2158730,2158730,2158730,2158730,2699402,2158730,2158730,2158730,2158730,2678922,2158730,2695306,2158730,2703498,2158730,2711690,2752650,2158730,2158730,2785418,2158730,2158730,2158730,3113098,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3186826,2158730,2207744,2207744,2207744,2207744,2781184,2793472,2207744,2818048,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,541,0,543,2158877,2502941,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2580765,2158877,2158877,2158877,2158877,2621725,2158877,3019037,2158877,3043613,2158877,2158877,2158877,2158877,3080477,2158877,2158877,3113245,2158877,2158877,2158877,2158877,0,2158877,2908445,2158877,2158877,2158877,2978077,2158877,2158877,2158877,2158877,3039517,2158877,2158730,2510986,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2584714,2158730,2609290,2158730,2158730,2629770,2158730,2158730,2158730,2388106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2605194,2158730,2158730,2158730,2158730,2687114,2158730,2715786,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2867338,2158730,2904202,2158730,2158730,2158730,2642058,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2781322,2793610,2158730,3121290,2158730,2158730,2158730,3149962,2158730,2158730,3170442,3174538,2158730,2367488,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2441216,2445312,2207744,2207744,2207744,2207744,2207744,2207744,2502656,2158877,2433309,2158877,2453789,2461981,2158877,2158877,2158877,2158877,2158877,2158877,2511133,2158877,2158877,2158877,2158877,2584861,2158877,2609437,2158877,2158877,2629917,2158877,2158877,2158877,2687261,2158877,2715933,2158877,2158730,2158730,2973834,2158730,2982026,2158730,2158730,3002506,2158730,3047562,3063946,3076234,2158730,2158730,2158730,2158730,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158877,2507037,0,0,2158877,2158730,2158730,2158730,3203210,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2564096,2207744,2207744,2207744,2707741,2732317,2158877,2158877,2158877,2822429,2826525,2158877,2896157,2158877,2158877,2924829,2158877,2158877,2973981,2158877,18,0,0,0,0,0,0,0,2211840,0,0,642,0,2158592,0,45,1529,45,45,45,45,45,45,45,45,45,45,45,45,45,1755,45,67,67,2982173,2158877,2158877,3002653,2158877,3047709,3064093,3076381,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3203357,2523274,2527370,2158730,2158730,2576522,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2908298,2494749,2158877,2158877,2158877,2523421,2527517,2158877,2158877,2576669,2158877,2158877,2158877,2158877,2158877,2158877,0,40976,0,18,18,4321280,2224253,2232448,4329472,2232448,2158730,2498698,2158730,2158730,2158730,2158730,2568330,2158730,2592906,2625674,2158730,2158730,2674826,2736266,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2158730,2912394,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3109002,2158730,2158730,3133578,3145866,3154058,2375680,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375965,2380061,2158877,2158877,2421021,2158877,2449693,2158877,2158877,2158877,3117341,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3104906,2158730,2158730,2158730,2158730,2158730,2158730,2158877,2498845,2158877,2158877,0,2158877,2158877,2568477,2158877,2593053,2625821,2158877,2158877,2674973,0,0,0,0,97,97,1480,97,97,97,97,97,1485,97,97,97,0,97,97,1729,97,1731,97,97,97,97,97,97,97,311,97,97,97,97,97,97,97,97,1520,97,97,1523,97,97,1526,97,2736413,2158877,2158877,0,2158877,2912541,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3109149,2158877,2158877,3014941,2158877,2158877,3051805,2158877,2158877,3100957,2158877,2158877,3121437,2158877,2158877,2158877,3150109,3133725,3146013,3154205,2158730,2408586,2416778,2158730,2465930,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3018890,2158730,3043466,2158730,2158730,2158730,2158730,3080330,2633866,2658442,2740362,2744458,2834570,2949258,2158730,2986122,2158730,2998410,2158730,2158730,2158730,3129482,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158877,2408733,2416925,2158877,2466077,2158877,2158877,3170589,3174685,2158877,0,0,0,2158730,2158730,2158730,2158730,2158730,2424970,2158730,2158730,2158730,2158730,2707594,2732170,2158730,2158730,2158730,2822282,2826378,2158730,2896010,2158730,2158730,2924682,2949405,2158877,2986269,2158877,2998557,2158877,2158877,2158877,3129629,2158730,2158730,2478218,2158730,2158730,2158730,2535562,2543754,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3117194,2207744,2207744,2478080,2207744,2207744,2207744,2207744,3014656,2207744,2207744,3051520,2207744,2207744,3100672,2207744,2207744,3121152,2207744,2207744,2207744,2207744,2207744,2584576,2207744,2609152,2207744,2207744,2629632,2207744,2207744,2207744,2686976,2207744,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158877,2158877,2478365,0,2158877,2158877,2158877,2158877,2158877,2158877,2158730,2158730,2482314,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,823,0,825,2158730,2158730,2158730,2990218,2158730,2158730,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,135,0,2207744,2207744,2990080,2207744,2207744,2158877,2158877,2482461,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,2158877,2158730,2429066,2158730,2515082,2158730,2588810,2158730,2838666,2158730,2158730,2158730,3010698,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158877,2429213,2158877,2515229,0,0,2158877,2588957,2158877,0,2838813,2158877,2158877,2158877,3010845,2158730,2506890,2158730,2158730,2158730,2748554,2756746,2777226,2801802,2158730,2158730,2158730,2863242,2891914,2158730,2158730,2158730,2158730,2158730,2158730,2564234,2158730,2158730,2158730,2158730,2158730,2597002,2158730,2158730,2158730,3006464,2384157,0,0,2158877,2158877,2158877,2158877,3006749,2158730,2637962,2953354,2158730,2207744,2637824,2953216,2207744,0,0,2158877,2638109,2953501,2158877,2539658,2158730,2539520,2207744,0,0,2539805,2158877,2158730,2158730,2158730,2977930,2158730,2158730,2158730,2158730,3039370,2158730,2158730,2158730,2158730,2158730,2158730,3158154,2207744,0,2158877,2158730,2207744,0,2158877,2158730,2207744,0,2158877,2965642,2965504,2965789,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,97,1484,97,97,97,97,2158592,18,0,122880,0,0,0,77824,0,2211840,0,0,0,0,2158592,0,356,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,45,1751,45,45,45,45,45,45,45,67,67,1427,67,67,67,67,67,1432,67,67,67,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,122880,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,1322,550,0,286,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,4329472,27,27,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,542,0,0,0,542,0,544,0,0,0,544,0,550,0,0,0,0,0,97,97,1610,97,97,97,97,97,97,97,97,898,97,97,97,97,97,97,97,0,94242,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,94242,237568,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,192512,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,94,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,96,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,12378,40976,18,18,36884,0,45078,0,24,24,24,126,126,126,126,90143,0,0,2170880,0,0,0,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,20480,40976,0,18,18,24,24,27,27,27,40976,18,36884,45078,24,27,90143,94242,241664,102439,106538,98347,0,0,20568,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,200797,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,0,0,44,0,0,20575,40976,18,36884,45078,24,27,90143,94242,0,41,41,41,0,0,1126400,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,89,40976,18,18,36884,0,45078,0,24,24,24,27,131201,27,27,90143,0,0,2170880,0,0,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,208896,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,0,0,0,0,0,0,2367488,32768,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2433024,2158592,2453504,2461696,2158592,2158592,2158592,2158592,2158592,2158592,2510848,2158592,2158592,2158592,2158592,40976,18,36884,245783,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,221184,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,180224,40976,18,18,36884,155648,45078,0,24,24,217088,27,27,27,217088,90143,0,0,2170880,0,0,828,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,233472,0,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,718,45,45,45,45,45,45,45,45,45,727,131427,0,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,45,1808,45,45,45,45,67,67,67,67,67,67,67,97,97,0,0,97,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,0,0,97,97,97,97,97,97,1787,0,97,97,0,97,97,97,45,45,45,45,2029,45,67,67,67,67,2033,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,97,45,1798,45,45,1800,45,45,0,1472,0,0,0,0,0,1474,0,0,0,0,0,1476,0,0,0,0,1315,0,0,0,0,97,97,97,97,1320,97,97,0,0,97,97,97,97,1786,97,0,0,97,97,0,1790,1527,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,663,67,24850,24850,12564,12564,0,57889,281,0,0,53531,53531,367,286,97,97,0,0,97,97,97,1785,97,97,0,0,97,97,0,97,97,1979,97,97,45,45,1983,45,1984,45,45,45,45,45,652,45,45,45,45,45,45,45,45,45,45,690,45,45,694,45,45,40976,19,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,262144,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,46,67,98,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,45,67,97,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,258048,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,1122423,40976,18,36884,45078,24,27,90143,94242,0,1114152,1114152,1114152,0,0,1114112,40976,18,36884,45078,24,27,90143,94242,37,102439,106538,98347,0,0,204800,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,57436,40976,18,36884,45078,24,27,33,33,0,33,33,33,0,0,0,40976,18,18,36884,0,45078,0,124,124,124,127,127,127,127,90143,0,0,2170880,0,0,550,0,2158877,2158877,2158877,2388253,2158877,2158877,2158877,2158877,2158877,2781469,2793757,2158877,2818333,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2867485,2158877,2904349,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3096861,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2441501,2445597,2158877,2158877,2158877,2158877,2158877,40976,122,123,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,936,2158592,4243810,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,935,45,45,45,715,45,45,45,45,45,45,45,723,45,45,45,45,45,1182,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,45,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,47,68,99,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,48,69,100,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,49,70,101,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,50,71,102,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,51,72,103,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,52,73,104,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,53,74,105,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,54,75,106,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,55,76,107,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,56,77,108,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,57,78,109,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,58,79,110,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,59,80,111,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,60,81,112,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,61,82,113,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,62,83,114,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,63,84,115,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,64,85,116,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,65,86,117,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,66,87,118,40976,18,36884,45078,24,27,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,0,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1314,0,0,0,0,0,0,97,97,97,97,97,1321,97,18,131427,0,0,0,0,0,0,362,0,0,365,0,367,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1360,97,97,131,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,145,149,45,45,45,45,45,174,45,179,45,185,45,188,45,45,202,67,255,67,67,269,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,292,296,97,97,97,97,97,321,97,326,97,332,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,646,335,97,97,349,97,97,0,40976,0,18,18,24,24,27,27,27,437,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,523,67,67,67,67,67,67,67,67,67,67,67,67,511,67,67,67,97,97,97,620,97,97,97,97,97,97,97,97,97,97,97,97,97,1501,1502,97,793,67,67,796,67,67,67,67,67,67,67,67,67,67,808,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,2052,67,67,67,67,813,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,830,97,97,97,97,97,97,97,97,97,315,97,97,97,97,97,97,841,97,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,589,97,97,97,97,97,97,97,97,97,867,97,97,97,97,97,97,97,891,97,97,894,97,97,97,97,97,97,97,97,97,97,906,45,937,45,45,940,45,45,45,45,45,45,948,45,45,45,45,45,734,735,67,737,67,738,67,740,67,67,67,45,967,45,45,45,45,45,45,45,45,45,45,45,45,45,45,435,45,45,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,67,67,67,67,67,25398,1081,13112,1085,54074,1089,0,0,0,0,0,0,363,0,28809,0,139,45,45,45,45,45,45,1674,45,45,45,45,45,45,45,45,67,1913,67,1914,67,67,67,1918,67,67,97,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,630,97,97,97,97,97,1169,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,45,1534,45,45,45,45,45,1538,45,45,45,45,1233,45,45,45,45,45,45,67,67,67,67,67,67,67,67,742,67,45,45,1191,45,45,45,45,45,45,45,45,45,45,45,45,45,454,67,67,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,1251,67,0,0,97,97,97,97,45,45,67,67,2050,0,97,97,45,45,45,732,45,45,67,67,67,67,67,67,67,67,67,67,67,67,97,97,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,772,67,67,67,1293,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,368,2158592,2158592,2158592,2404352,2412544,1323,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,1737,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,1373,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,647,45,45,1387,45,45,1391,45,45,45,45,45,45,45,45,45,45,410,45,45,45,45,45,1400,45,45,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,941,45,943,45,45,45,45,45,45,951,45,67,1438,67,67,67,67,67,67,67,67,67,67,1447,67,67,67,67,67,67,782,67,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,97,1491,97,97,97,97,97,97,97,97,97,97,1500,97,97,97,0,97,97,97,97,97,97,97,97,97,97,1736,97,45,45,1541,45,45,45,45,45,45,45,45,45,45,45,45,45,677,45,45,67,1581,67,67,67,67,67,67,67,67,67,67,67,67,67,67,791,792,67,67,67,67,1598,67,1600,67,67,67,67,67,67,67,67,1472,97,97,97,1727,97,97,97,97,97,97,97,97,97,97,97,97,97,1513,97,97,67,67,97,1879,97,1881,97,0,1884,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,1842,97,97,67,67,67,67,67,97,97,97,97,1928,0,0,0,97,97,97,97,97,97,45,45,45,45,45,1903,45,45,45,67,67,67,67,97,97,97,97,1971,0,0,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1381,45,45,45,45,1976,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1747,809,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,97,907,97,97,97,97,97,97,97,97,97,97,97,638,0,0,0,0,1478,97,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,67,67,67,67,1244,67,67,67,67,67,67,67,67,67,67,67,477,67,67,67,67,67,67,1294,67,67,67,67,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1324,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,0,1374,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,945,45,45,45,45,45,45,45,45,1908,45,45,1910,45,67,67,67,67,67,67,67,67,1919,67,0,0,97,97,97,97,45,2048,67,2049,0,0,97,2051,45,45,45,939,45,45,45,45,45,45,45,45,45,45,45,45,397,45,45,45,1921,67,67,1923,67,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1947,45,1935,0,0,0,97,1939,97,97,1941,97,45,45,45,45,45,45,382,389,45,45,45,45,45,45,45,45,1810,45,45,1812,67,67,67,67,67,256,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,336,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,45,371,373,45,45,45,955,45,45,45,45,45,45,45,45,45,45,45,45,413,45,45,45,457,459,67,67,67,67,67,67,67,67,473,67,478,67,67,482,67,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,97,1828,97,554,556,97,97,97,97,97,97,97,97,570,97,575,97,97,579,97,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,330,97,97,67,746,67,67,67,67,67,67,67,67,67,758,67,67,67,67,67,67,67,1575,67,67,67,67,67,67,67,67,493,67,67,67,67,67,67,67,97,97,844,97,97,97,97,97,97,97,97,97,856,97,97,97,0,97,97,97,97,97,97,97,97,1735,97,97,97,0,97,97,97,97,97,97,97,1642,97,1644,97,97,890,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,67,67,67,67,1065,1066,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,67,67,67,496,67,67,97,97,1505,97,97,97,97,97,97,97,97,97,97,97,97,97,593,97,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,1617,97,97,1635,0,1637,97,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,67,67,1704,67,67,67,67,97,97,97,97,97,97,97,97,97,565,572,97,97,97,97,97,97,97,97,1832,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,1946,45,45,67,67,67,67,67,97,1926,97,1927,97,0,0,0,97,97,1934,2043,0,0,97,97,97,2047,45,45,67,67,0,1832,97,97,45,45,45,981,45,45,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,131427,0,0,0,0,362,0,365,28809,367,139,45,45,372,45,45,45,45,1661,1662,45,45,45,45,45,1666,45,45,45,45,45,1673,45,1675,45,45,45,45,45,45,45,67,1426,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,67,67,45,418,45,45,420,45,45,423,45,45,45,45,45,45,45,45,959,45,45,962,45,45,45,45,458,67,67,67,67,67,67,67,67,67,67,67,67,67,67,483,67,67,67,67,504,67,67,506,67,67,509,67,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,555,97,97,97,97,97,97,97,97,97,97,97,97,97,97,580,97,97,97,97,601,97,97,603,97,97,606,97,97,97,97,97,97,848,97,97,97,97,97,97,97,97,97,1498,97,97,97,97,97,97,45,45,714,45,45,45,45,45,45,45,45,45,45,45,45,45,989,990,45,67,67,67,67,67,1011,67,67,67,67,1015,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,467,67,67,67,67,67,67,67,45,45,1179,45,45,45,45,45,45,45,45,45,45,45,45,45,1003,1004,67,1217,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,728,67,1461,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,97,1516,97,97,97,97,97,97,97,97,97,97,97,97,97,97,871,97,67,67,67,1705,67,67,67,97,97,97,97,97,97,97,97,97,567,97,97,97,97,97,97,97,97,97,97,1715,97,97,97,97,97,97,97,97,97,0,0,0,45,45,1380,45,45,45,45,45,67,67,97,97,97,97,97,0,0,0,97,1887,97,97,0,0,97,97,97,0,97,97,97,97,97,2006,45,45,1907,45,45,45,45,45,67,67,67,67,67,67,67,67,67,1920,67,97,0,2035,97,97,97,97,97,45,45,45,45,67,67,67,1428,67,67,67,67,67,67,1435,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,146,45,152,45,45,165,45,175,45,180,45,45,187,190,195,45,203,254,257,262,67,270,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,293,97,299,97,97,312,97,322,97,327,97,97,334,337,342,97,350,97,97,0,40976,0,18,18,24,24,27,27,27,67,484,67,67,67,67,67,67,67,67,67,67,67,67,67,499,97,581,97,97,97,97,97,97,97,97,97,97,97,97,97,596,648,45,650,45,651,45,653,45,45,45,657,45,45,45,45,45,45,1954,67,67,67,1958,67,67,67,67,67,67,67,768,67,67,67,67,67,67,67,67,769,67,67,67,67,67,67,67,680,45,45,45,45,45,45,45,45,688,689,691,45,45,45,45,45,983,45,45,45,45,45,45,45,45,45,45,947,45,45,45,45,952,45,45,698,699,45,45,702,703,45,45,45,45,45,45,45,711,744,67,67,67,67,67,67,67,67,67,757,67,67,67,67,761,67,67,67,67,765,67,767,67,67,67,67,67,67,67,67,775,776,778,67,67,67,67,67,67,785,786,67,67,789,790,67,67,67,67,67,67,1442,67,67,67,67,67,67,67,67,67,97,97,97,1775,97,97,97,67,67,67,67,67,798,67,67,67,802,67,67,67,67,67,67,67,67,1465,67,67,1468,67,67,1471,67,67,810,67,67,67,67,67,67,67,67,67,821,25398,542,13112,544,57889,0,0,54074,54074,550,0,833,97,835,97,836,97,838,97,97,0,0,97,97,97,2002,97,97,97,97,97,45,45,45,45,45,1740,45,45,45,1744,45,45,45,97,842,97,97,97,97,97,97,97,97,97,855,97,97,97,97,0,1717,1718,97,97,97,97,97,1722,97,0,0,859,97,97,97,97,863,97,865,97,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,873,874,876,97,97,97,97,97,97,883,884,97,97,887,888,97,18,131427,0,0,0,0,0,0,362,225280,0,365,0,367,0,45,45,45,1531,45,45,45,45,45,45,45,45,45,45,45,1199,45,45,45,45,45,97,97,908,97,97,97,97,97,97,97,97,97,919,638,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2425117,2158877,2158877,2158877,2158877,2158877,2158877,2597149,2158877,2158877,2158877,2158877,2158877,2158877,2642205,2158877,2158877,2158877,2158877,2158877,3158301,0,2375818,2379914,2158730,2158730,2420874,2158730,2449546,2158730,2158730,953,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,965,978,45,45,45,45,45,45,985,45,45,45,45,45,45,45,45,971,45,45,45,45,45,45,45,67,67,67,67,67,1027,67,1029,67,67,67,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,1077,1078,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,366,0,139,2158730,2158730,2158730,2404490,2412682,1113,97,97,97,97,97,97,1121,97,1123,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1540,1155,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,1168,97,97,1171,1172,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,1533,45,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,183,45,45,45,45,201,45,45,45,1219,45,45,45,45,45,45,45,1226,45,45,45,45,45,168,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1046,67,67,1254,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,806,807,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,1351,97,97,97,1354,97,97,97,1359,97,97,97,0,97,97,97,97,1640,97,97,97,97,97,97,97,897,97,97,97,902,97,97,97,97,97,97,97,97,1366,97,97,97,97,97,97,97,1371,97,97,97,0,97,97,97,1730,97,97,97,97,97,97,97,97,915,97,97,97,97,0,360,0,67,67,67,1440,67,67,67,67,67,67,67,67,67,67,67,67,1017,67,1019,67,67,67,67,67,1453,67,67,67,67,67,67,67,67,67,67,1459,97,97,97,1493,97,97,97,97,97,97,97,97,97,97,97,97,97,1525,97,97,97,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,1514,67,67,67,67,1584,67,67,67,67,67,1590,67,67,67,67,67,67,67,783,67,67,67,788,67,67,67,67,67,67,67,67,67,1599,1601,67,67,67,1604,67,1606,1607,67,1472,0,1474,0,1476,0,97,97,97,97,97,97,1614,97,97,97,97,45,45,1850,45,45,45,45,1855,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,1229,97,1618,97,97,97,97,97,97,97,1625,97,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,447,45,45,45,45,45,67,67,1633,97,97,0,97,97,97,97,97,97,97,97,1643,1645,97,97,0,0,97,97,1784,97,97,97,0,0,97,97,0,97,1894,1895,97,1897,97,45,45,45,45,45,45,45,45,45,656,45,45,45,45,45,45,97,1648,97,1650,1651,97,0,45,45,45,1654,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,658,45,45,45,45,664,45,45,1659,45,45,45,45,45,45,45,45,45,45,45,45,45,1187,45,45,1669,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1005,67,67,1681,67,67,67,67,67,67,67,1686,67,67,67,67,67,67,67,784,67,67,67,67,67,67,67,67,1055,67,67,67,67,1060,67,67,97,97,1713,97,0,97,97,97,97,97,97,97,97,97,0,0,0,1378,45,45,45,45,45,45,45,408,45,45,45,45,45,45,45,45,1547,45,1549,45,45,45,45,45,97,97,1780,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,2027,2028,45,45,67,67,2031,2032,67,45,45,1804,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1917,67,67,67,67,67,67,67,1819,67,67,67,67,67,67,67,67,97,97,97,1708,97,97,97,97,97,45,45,1862,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,67,1877,97,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,1839,0,0,97,97,97,97,1936,0,0,97,97,97,97,97,97,1943,1944,1945,45,45,45,45,670,45,45,45,45,674,45,45,45,45,678,45,1948,45,1950,45,45,45,45,1955,1956,1957,67,67,67,1960,67,1962,67,67,67,67,1967,1968,1969,97,0,0,0,97,97,1974,97,0,1936,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1906,0,1977,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,1746,45,45,45,45,2011,67,67,2013,67,67,67,2017,97,97,0,0,2021,97,8192,97,97,2025,45,45,45,45,45,45,67,67,67,67,67,1916,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,140,45,45,45,1180,45,45,45,45,1184,45,45,45,45,45,45,45,387,45,392,45,45,396,45,45,399,45,45,67,207,67,67,67,67,67,67,236,67,67,67,67,67,67,67,800,67,67,67,67,67,67,67,67,67,1603,67,67,67,67,67,0,97,97,287,97,97,97,97,97,97,316,97,97,97,97,97,97,0,45,45,45,45,45,45,45,1656,1657,45,376,45,45,45,45,45,388,45,45,45,45,45,45,45,45,1406,45,45,45,45,45,45,45,67,67,67,67,462,67,67,67,67,67,474,67,67,67,67,67,67,67,817,67,67,67,67,25398,542,13112,544,97,97,97,97,559,97,97,97,97,97,571,97,97,97,97,97,97,896,97,97,97,900,97,97,97,97,97,97,912,914,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,45,391,45,45,45,45,45,45,45,45,713,45,45,45,45,45,45,45,45,45,45,45,45,45,45,662,45,1140,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,636,67,67,1283,67,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,1363,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,889,97,97,97,1714,0,97,97,97,97,97,97,97,97,97,0,0,926,45,45,45,45,45,45,45,45,672,45,45,45,45,45,45,45,45,686,45,45,45,45,45,45,45,45,944,45,45,45,45,45,45,45,45,1676,45,45,45,45,45,45,67,97,97,97,1833,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1902,45,45,45,45,45,957,45,45,45,45,961,45,963,45,45,45,67,97,2034,0,97,97,97,97,97,2040,45,45,45,2042,67,67,67,67,67,67,1574,67,67,67,67,67,1578,67,67,67,67,67,67,799,67,67,67,804,67,67,67,67,67,67,67,1298,0,0,0,1304,0,0,0,1310,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,1414,45,45,45,45,45,45,45,45,45,45,428,45,45,45,45,45,57889,0,0,54074,54074,550,831,97,97,97,97,97,97,97,97,97,568,97,97,97,97,578,97,45,45,968,45,45,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,67,67,67,67,67,25398,1082,13112,1086,54074,1090,0,0,0,0,0,0,364,0,0,0,139,2158592,2158592,2158592,2404352,2412544,67,67,67,67,1464,67,67,67,67,67,67,67,67,67,67,67,510,67,67,67,67,97,97,97,97,1519,97,97,97,97,97,97,97,97,97,97,97,918,97,0,0,0,0,1528,45,45,45,45,45,45,45,45,45,45,45,45,45,45,976,45,1554,45,45,45,45,45,45,45,45,1562,45,45,1565,45,45,45,45,683,45,45,45,687,45,45,692,45,45,45,45,45,1953,45,67,67,67,67,67,67,67,67,67,1014,67,67,67,67,67,67,1568,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,1594,97,97,1649,97,97,97,0,45,45,1653,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,45,45,1670,45,1672,45,45,45,45,45,45,45,45,45,45,67,736,67,67,67,67,67,741,67,67,67,1680,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,67,1692,67,67,67,67,67,67,67,1697,67,1699,67,67,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,468,475,67,67,67,67,67,67,1769,67,67,67,67,67,67,67,97,97,97,97,97,97,97,624,97,97,97,97,97,97,634,97,97,1792,97,97,97,97,97,97,97,45,45,45,45,45,45,45,958,45,45,45,45,45,45,964,45,150,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,977,204,45,67,67,67,217,67,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,67,67,67,67,271,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,351,97,0,40976,0,18,18,24,24,27,27,27,45,45,938,45,45,45,45,45,45,45,45,45,45,45,45,45,1398,45,45,45,153,45,161,45,45,45,45,45,45,45,45,45,45,45,45,660,661,45,45,205,45,67,67,67,67,220,67,228,67,67,67,67,67,67,67,0,0,0,0,0,280,94,0,0,67,67,67,67,67,272,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,352,97,0,40976,0,18,18,24,24,27,27,27,45,439,45,45,45,45,45,445,45,45,45,452,45,45,67,67,212,216,67,67,67,67,67,241,67,246,67,252,67,67,486,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,1245,67,67,67,67,67,67,67,67,1013,67,67,1016,67,67,67,67,67,521,67,67,525,67,67,67,67,67,531,67,67,67,538,67,0,0,2046,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,1418,45,45,1421,97,97,583,97,97,97,97,97,97,97,591,97,97,97,97,97,97,913,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,1384,97,618,97,97,622,97,97,97,97,97,628,97,97,97,635,97,18,131427,0,0,0,639,0,132,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,932,45,45,45,45,45,1544,45,45,45,45,45,1550,45,45,45,45,45,1194,45,1196,45,45,45,45,45,45,45,45,999,45,45,45,45,45,67,67,45,45,667,45,45,45,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,696,45,45,45,701,45,45,45,45,45,45,45,45,710,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,194,45,45,45,729,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,805,67,67,67,67,67,67,67,1587,67,1589,67,67,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,0,0,0,0,0,0,2162968,0,0,67,67,67,67,67,814,816,67,67,67,67,67,25398,542,13112,544,67,67,1008,67,67,67,67,67,67,67,67,67,67,67,1020,67,0,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,45,67,67,67,67,1429,67,1430,67,67,67,67,67,1062,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,1076,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,97,97,97,97,1102,97,97,97,97,97,97,97,97,97,97,97,1124,97,1126,97,97,1114,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1112,97,97,1156,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,97,97,1170,97,97,97,97,0,921,0,0,0,0,0,0,45,45,45,45,1532,45,45,45,45,1536,45,45,45,45,45,172,45,45,45,45,45,45,45,45,45,45,706,45,45,709,45,45,1177,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,1204,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,45,45,1232,45,45,45,45,45,45,45,67,1237,67,67,67,67,67,67,1053,1054,67,67,67,67,67,67,1061,67,67,1282,67,67,67,67,67,67,67,67,67,1289,67,67,67,1292,97,97,97,97,1339,97,97,97,97,97,97,1344,97,97,97,97,45,1849,45,1851,45,45,45,45,45,45,45,45,721,45,45,45,45,45,726,45,1385,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1188,45,45,1401,1402,45,45,45,45,1405,45,45,45,45,45,45,45,45,1752,45,45,45,45,45,67,67,1410,45,45,45,1413,45,1415,45,45,45,45,45,45,1419,45,45,45,45,1806,45,45,45,45,45,45,67,67,67,67,67,67,67,97,97,2019,0,97,67,67,67,1452,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,1259,67,67,67,67,67,67,1264,67,67,1460,67,1462,67,67,67,67,67,67,1466,67,67,67,67,67,67,67,67,1588,67,67,67,67,67,67,67,0,1300,0,0,0,1306,0,0,0,97,97,97,1506,97,97,97,97,97,97,97,97,1512,97,97,97,0,1728,97,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,1515,97,1517,97,97,97,97,97,97,1521,97,97,97,97,97,97,0,45,1652,45,45,45,1655,45,45,45,45,45,1542,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,1553,45,45,45,1556,45,45,45,45,45,45,45,45,45,45,45,45,45,693,45,45,45,67,67,67,67,1572,67,67,67,67,1576,67,67,67,67,67,67,67,67,1602,67,67,1605,67,67,67,0,67,1582,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1580,67,67,1596,67,67,67,67,67,67,67,67,67,67,67,67,67,0,542,0,544,67,67,67,67,1759,67,67,67,67,67,67,67,67,67,67,67,533,67,67,67,67,67,67,67,1770,67,67,67,67,67,97,97,97,97,97,97,1777,97,97,97,1793,97,97,97,97,97,45,45,45,45,45,45,45,998,45,45,1001,1002,45,45,67,67,45,1861,45,67,67,67,67,67,67,67,67,1871,67,1873,1874,67,0,97,45,67,0,97,45,67,16384,97,45,67,97,0,0,0,1473,0,1082,0,0,0,1475,0,1086,0,0,0,1477,1876,67,97,97,97,97,97,1883,0,1885,97,97,97,1889,0,0,0,286,0,0,0,286,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,126,126,126,2053,0,2055,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,2039,97,45,45,45,45,67,67,67,67,67,226,67,67,67,67,67,67,67,67,1246,67,67,1249,1250,67,67,67,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,141,45,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,1186,45,45,1189,45,45,155,45,45,45,45,45,45,45,45,45,191,45,45,45,45,700,45,45,45,45,45,45,45,45,45,45,45,1753,45,45,45,67,67,45,45,67,208,67,67,67,222,67,67,67,67,67,67,67,67,67,1764,67,67,67,67,67,67,67,258,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,288,97,97,97,302,97,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,338,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,370,45,45,45,45,716,45,45,45,45,45,722,45,45,45,45,45,45,1912,67,67,67,67,67,67,67,67,67,819,67,67,25398,542,13112,544,45,403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1409,45,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,67,771,67,67,67,67,520,67,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,1271,67,67,67,1274,67,67,67,1279,67,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,553,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,97,1138,97,97,97,97,617,97,97,97,97,97,97,97,97,97,97,97,631,97,97,97,0,1834,97,97,97,97,97,0,0,0,97,97,97,97,97,353,0,40976,0,18,18,24,24,27,27,27,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,682,45,45,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,67,67,747,748,67,67,67,67,755,67,67,67,67,67,67,67,0,0,0,1302,0,0,0,1308,0,67,794,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1701,67,97,97,97,845,846,97,97,97,97,853,97,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,97,892,97,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,45,992,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,1239,67,67,67,1063,67,67,67,67,67,1068,67,67,67,67,67,67,67,0,0,1301,0,0,0,1307,0,0,97,1141,97,97,97,97,97,97,97,97,97,97,97,1152,97,97,0,0,97,97,2001,0,97,2003,97,97,97,45,45,45,1739,45,45,45,1742,45,45,45,45,45,97,97,97,97,1157,97,97,97,97,97,1162,97,97,97,97,97,97,1145,97,97,97,97,97,1151,97,97,97,1253,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,539,45,1423,45,45,67,67,67,67,67,67,67,1431,67,67,67,67,67,67,67,1695,67,67,67,67,67,1700,67,1702,67,67,1439,67,67,67,67,67,67,67,67,67,67,67,67,67,514,67,67,97,97,1492,97,97,97,97,97,97,97,97,97,97,97,97,97,611,97,97,1703,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,852,97,97,97,97,97,97,45,1949,45,1951,45,45,45,67,67,67,67,67,67,67,1961,67,0,97,45,67,0,97,2060,2061,0,2062,45,67,97,0,0,2036,97,97,97,97,45,45,45,45,67,67,67,67,67,223,67,67,237,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,507,67,67,67,67,67,67,67,1963,67,67,67,97,97,97,97,0,1972,0,97,97,97,1975,0,921,29315,0,0,0,0,45,45,45,931,45,45,45,45,45,407,45,45,45,45,45,45,45,45,45,417,45,45,1989,67,67,67,67,67,67,67,67,67,67,67,1996,97,18,131427,0,0,360,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,930,45,45,45,45,45,45,444,45,45,45,45,45,45,45,67,67,97,97,1998,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,1985,45,1986,45,45,45,156,45,45,170,45,45,45,45,45,45,45,45,45,45,675,45,45,45,45,679,131427,0,358,0,0,362,0,365,28809,367,139,45,45,45,45,45,381,45,45,45,45,45,45,45,45,45,400,45,45,419,45,45,45,45,45,45,45,45,45,45,45,45,436,67,67,67,67,67,505,67,67,67,67,67,67,67,67,67,67,820,67,25398,542,13112,544,67,67,522,67,67,67,67,67,529,67,67,67,67,67,67,67,0,1299,0,0,0,1305,0,0,0,97,97,619,97,97,97,97,97,626,97,97,97,97,97,97,97,1105,97,97,97,97,1109,97,97,97,67,67,67,67,749,67,67,67,67,67,67,67,67,67,760,67,0,97,45,67,2058,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,2041,67,67,67,67,67,780,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,97,97,97,878,97,97,97,97,97,97,97,97,97,97,97,97,97,1629,97,0,45,979,45,45,45,45,984,45,45,45,45,45,45,45,45,45,1198,45,45,45,45,45,45,67,1023,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,470,67,67,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1094,0,0,0,1092,1315,0,0,0,0,97,97,97,97,97,97,97,97,97,1486,97,1489,97,97,97,1117,97,97,97,97,1122,97,97,97,97,97,97,97,1146,97,97,97,97,97,97,97,97,881,97,97,97,886,97,97,97,1311,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1615,97,97,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,97,1847,97,45,45,45,45,1852,45,45,45,45,45,45,45,1235,45,45,45,67,67,67,67,67,1868,67,67,67,1872,67,67,67,67,67,97,97,97,97,1882,0,0,0,97,97,97,97,0,1891,67,67,67,67,67,97,97,97,97,97,1929,0,0,97,97,97,97,97,97,45,1900,45,1901,45,45,45,1905,45,67,2054,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,2037,2038,97,97,45,45,45,45,67,67,67,67,1867,67,67,67,67,67,67,67,67,67,1774,97,97,97,97,97,97,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,142,45,45,45,1412,45,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,157,45,45,171,45,45,45,182,45,45,45,45,200,45,45,45,1543,45,45,45,45,45,45,45,45,1551,45,45,45,45,1181,45,45,45,45,45,45,45,45,45,45,45,1211,45,45,45,1214,45,45,45,67,209,67,67,67,224,67,67,238,67,67,67,249,67,0,97,2056,2057,0,2059,45,67,0,97,45,67,97,0,0,1937,97,97,97,97,97,97,45,45,45,45,45,45,1741,45,45,45,45,45,45,67,67,67,267,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,289,97,97,97,304,97,97,318,97,97,97,329,97,97,0,0,97,1783,97,97,97,97,0,0,97,97,0,97,97,97,45,2026,45,45,45,45,67,2030,67,67,67,67,67,67,1041,67,67,67,67,67,67,67,67,67,1044,67,67,67,67,67,67,97,97,347,97,97,97,0,40976,0,18,18,24,24,27,27,27,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1420,45,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,840,67,1007,67,67,67,67,67,67,67,67,67,67,67,67,67,67,759,67,67,67,67,67,67,67,1052,67,67,67,67,67,67,67,67,67,67,1031,67,67,67,67,67,97,97,97,1101,97,97,97,97,97,97,97,97,97,97,97,97,592,97,97,97,1190,45,45,45,45,45,1195,45,1197,45,45,45,45,1201,45,45,45,45,1952,45,45,67,67,67,67,67,67,67,67,67,67,67,67,250,67,67,67,1255,67,1257,67,67,67,67,1261,67,67,67,67,67,67,67,67,1685,67,67,67,67,67,67,67,0,24851,12565,0,0,0,0,28809,53532,67,67,1267,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,0,0,0,0,0,0,2162688,0,0,1281,67,67,67,67,1285,67,67,67,67,67,67,67,67,67,67,1070,67,67,67,67,67,1335,97,1337,97,97,97,97,1341,97,97,97,97,97,97,97,97,882,97,97,97,97,97,97,97,1347,97,97,97,97,97,97,1353,97,97,97,97,97,97,1361,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,0,544,0,550,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2158592,2990080,2158592,2158592,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,53530,97,97,97,1365,97,97,97,97,97,97,97,97,97,97,97,97,608,97,97,97,45,45,1424,45,1425,67,67,67,67,67,67,67,67,67,67,67,1058,67,67,67,67,45,1555,45,45,1557,45,45,45,45,45,45,45,45,45,45,45,707,45,45,45,45,67,67,1570,67,67,67,67,67,67,67,67,67,67,67,67,67,773,67,67,1595,67,67,1597,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,139,2158592,2158592,2158592,2404352,2412544,97,97,97,1636,97,97,97,1639,97,97,1641,97,97,97,97,97,97,1173,0,921,0,0,0,0,0,0,45,67,67,67,1693,67,67,67,67,67,67,67,1698,67,67,67,67,67,67,67,1773,67,97,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,880,97,97,97,97,97,97,97,97,1106,97,97,97,97,97,97,97,1860,45,45,67,67,1865,67,67,67,67,1870,67,67,67,67,1875,67,67,97,97,1880,97,97,0,0,0,97,97,1888,97,0,0,0,1938,97,97,97,97,97,45,45,45,45,45,45,1854,45,45,45,45,45,45,45,1909,45,45,1911,67,67,67,67,67,67,67,67,67,67,1248,67,67,67,67,67,67,1922,67,67,1924,97,97,97,97,97,0,0,0,97,97,97,97,97,1898,45,45,45,45,45,45,1904,45,45,67,67,67,67,97,97,97,97,0,0,16384,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,1724,2008,2009,45,45,67,67,67,2014,2015,67,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,45,2022,0,2023,97,97,45,45,45,45,45,45,67,67,67,67,67,67,1869,67,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,147,151,154,45,162,45,45,176,178,181,45,45,45,192,196,45,45,45,45,2012,67,67,67,67,67,67,2018,97,0,0,97,1978,97,97,97,1982,45,45,45,45,45,45,45,45,45,972,973,45,45,45,45,45,67,259,263,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,294,298,301,97,309,97,97,323,325,328,97,97,97,97,97,560,97,97,97,569,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,339,343,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,67,67,503,67,67,67,67,67,67,67,67,67,512,67,67,519,97,97,600,97,97,97,97,97,97,97,97,97,609,97,97,616,45,649,45,45,45,45,45,654,45,45,45,45,45,45,45,45,1393,45,45,45,45,45,45,45,45,1209,45,45,45,45,45,45,45,67,763,67,67,67,67,67,67,67,67,770,67,67,67,774,67,0,2045,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,994,45,45,45,45,45,45,45,45,45,45,67,67,213,67,219,67,67,232,67,242,67,247,67,67,67,779,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,67,811,67,67,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,834,97,97,97,97,97,839,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,645,97,97,861,97,97,97,97,97,97,97,97,868,97,97,97,872,97,97,877,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,97,97,97,97,909,97,97,97,97,97,97,97,97,97,0,0,0,18,18,24,24,27,27,27,1036,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,1033,67,67,67,97,97,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,0,67,67,67,1295,67,67,67,0,0,0,0,0,0,0,0,0,97,1317,97,97,97,97,97,97,1375,97,97,97,0,0,0,45,1379,45,45,45,45,45,45,422,45,45,45,429,431,45,45,45,45,0,1090,0,0,97,1479,97,97,97,97,97,97,97,97,97,97,1357,97,97,97,97,97,97,97,97,97,1716,97,97,97,97,97,97,97,97,97,1723,0,921,29315,0,0,0,0,45,929,45,45,45,45,45,45,45,1392,45,45,45,45,45,45,45,45,45,960,45,45,45,45,45,45,97,97,97,1738,45,45,45,45,45,45,45,1743,45,45,45,45,166,45,45,45,45,184,186,45,45,197,45,45,97,1779,0,0,97,97,97,97,97,97,0,0,97,97,0,97,18,131427,0,638,0,0,0,0,362,0,640,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,1537,45,45,45,45,45,1803,45,45,45,45,45,1809,45,45,45,67,67,67,1814,67,67,67,67,67,67,1821,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,0,0,67,67,67,1818,67,67,67,67,67,1824,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,1890,0,1829,97,97,0,0,97,97,1836,97,97,0,0,0,97,97,97,97,1981,45,45,45,45,45,45,45,45,45,1987,1845,97,97,97,45,45,45,45,45,1853,45,45,45,1857,45,45,45,67,1864,67,1866,67,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,1710,1711,67,67,97,97,97,97,97,0,0,0,1886,97,97,97,0,0,97,97,97,97,1838,0,0,0,97,1843,97,0,1893,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1745,45,45,67,67,67,67,67,97,97,97,97,97,0,0,1931,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,67,2044,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1660,45,45,45,45,45,45,45,45,45,45,45,45,453,45,455,67,67,67,67,268,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,348,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,359,0,0,362,0,365,28809,367,139,45,45,45,45,45,421,45,45,45,45,45,45,45,434,45,45,695,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1667,45,0,921,29315,0,925,0,0,45,45,45,45,45,45,45,45,45,1811,45,67,67,67,67,67,67,1037,67,1039,67,67,67,67,67,67,67,67,67,67,67,67,1277,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1095,0,0,0,1096,97,97,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,97,1131,97,1133,97,97,97,97,97,97,97,97,97,97,1370,97,97,97,97,97,1312,0,0,0,0,1096,0,0,0,97,97,97,97,97,97,97,1327,97,97,97,97,97,1332,97,97,97,1830,97,0,0,97,97,97,97,97,0,0,0,97,97,97,1896,97,97,45,45,45,45,45,45,45,45,45,1548,45,45,45,45,45,45,133,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,380,45,45,45,45,45,45,45,45,45,45,401,45,45,158,45,45,45,45,45,45,45,45,45,45,45,45,45,1200,45,45,45,45,206,67,67,67,67,67,225,67,67,67,67,67,67,67,67,754,67,67,67,67,67,67,67,57889,0,0,54074,54074,550,832,97,97,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,67,67,67,67,67,25398,1083,13112,1087,54074,1091,0,0,0,0,0,0,1316,0,831,97,97,97,97,97,97,97,1174,921,0,1175,0,0,0,0,45,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,148,67,67,264,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,295,97,97,97,97,313,97,97,97,97,331,333,97,18,131427,356,638,0,0,0,0,362,0,0,365,0,367,0,45,45,1530,45,45,45,45,45,45,45,45,45,45,45,45,988,45,45,45,97,344,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,402,404,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1756,67,438,45,45,45,45,45,45,45,45,449,450,45,45,45,67,67,214,218,221,67,229,67,67,243,245,248,67,67,67,67,67,488,490,67,67,67,67,67,67,67,67,67,67,67,1071,67,1073,67,67,67,67,67,524,67,67,67,67,67,67,67,67,535,536,67,67,67,67,67,67,1683,1684,67,67,67,67,1688,1689,67,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,97,97,97,585,587,97,97,97,97,97,97,97,97,97,97,97,1163,97,97,97,97,97,97,97,621,97,97,97,97,97,97,97,97,632,633,97,97,0,0,1782,97,97,97,97,97,0,0,97,97,0,97,712,45,45,45,717,45,45,45,45,45,45,45,45,725,45,45,45,163,167,173,177,45,45,45,45,45,193,45,45,45,45,982,45,45,45,45,45,45,987,45,45,45,45,45,1558,45,1560,45,45,45,45,45,45,45,45,704,705,45,45,45,45,45,45,45,45,731,45,45,45,67,67,67,67,67,739,67,67,67,67,67,67,273,0,24850,12564,0,0,0,0,28809,53531,67,67,67,764,67,67,67,67,67,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,812,67,67,67,67,818,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,97,97,97,97,837,97,97,97,97,97,602,97,97,97,97,97,97,97,97,97,97,1137,97,97,97,97,97,97,97,97,97,862,97,97,97,97,97,97,97,97,97,97,97,1627,97,97,97,0,97,97,97,97,910,97,97,97,97,916,97,97,97,0,0,0,97,97,1940,97,97,1942,45,45,45,45,45,45,385,45,45,45,45,395,45,45,45,45,966,45,969,45,45,45,45,45,45,45,45,45,45,975,45,45,45,406,45,45,45,45,45,45,45,45,45,45,45,45,974,45,45,45,67,67,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,67,67,1040,67,1042,67,1045,67,67,67,67,67,67,67,97,1706,97,97,97,1709,97,97,97,67,67,67,67,1051,67,67,67,67,67,1057,67,67,67,67,67,67,67,1443,67,67,1446,67,67,67,67,67,67,67,1297,0,0,0,1303,0,0,0,1309,67,67,67,67,1079,25398,0,13112,0,54074,0,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,1098,97,97,97,97,97,1104,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,1128,97,97,97,97,97,97,1134,97,1136,97,1139,97,97,97,97,97,97,1622,97,97,97,97,97,97,97,97,0,921,0,0,0,1176,0,646,45,67,67,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,67,97,1348,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1127,97,67,1569,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1448,1449,67,1816,67,67,67,67,67,67,67,67,67,1825,67,67,1827,97,97,0,1781,97,97,97,97,97,97,0,0,97,97,0,97,97,97,1831,0,0,97,97,97,97,97,0,0,0,97,97,97,1980,97,45,45,45,45,45,45,45,45,45,45,1395,45,45,45,45,45,97,1846,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,45,45,2010,45,67,67,67,67,67,2016,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,2007,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,143,45,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,67,1813,67,67,1815,45,45,67,210,67,67,67,67,67,67,239,67,67,67,67,67,67,67,1454,67,67,67,67,67,67,67,67,67,1445,67,67,67,67,67,67,97,97,290,97,97,97,97,97,97,319,97,97,97,97,97,97,303,97,97,317,97,97,97,97,97,97,305,97,97,97,97,97,97,97,97,97,899,97,97,97,97,97,97,375,45,45,45,379,45,45,390,45,45,394,45,45,45,45,45,443,45,45,45,45,45,45,45,45,67,67,67,67,67,461,67,67,67,465,67,67,476,67,67,480,67,67,67,67,67,67,1694,67,67,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,500,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,97,97,97,558,97,97,97,562,97,97,573,97,97,577,97,97,97,97,97,895,97,97,97,97,97,97,903,97,97,97,0,97,97,1638,97,97,97,97,97,97,97,97,1646,597,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1334,45,681,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1396,45,45,1399,45,45,730,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1434,67,67,67,67,67,67,750,67,67,67,67,67,67,67,67,67,67,1456,67,67,67,67,67,45,45,993,45,45,45,45,45,45,45,45,45,45,45,67,67,1238,67,67,1006,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1280,1048,1049,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,67,1286,67,67,67,67,67,67,67,1291,67,97,97,1100,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,920,97,97,1142,1143,97,97,97,97,97,97,97,97,97,97,1153,97,97,97,97,97,1158,97,97,97,1161,97,97,97,97,1166,97,97,97,97,97,1325,97,97,97,97,97,97,97,97,97,97,1328,97,97,97,97,97,97,97,45,1218,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,67,67,67,67,67,1269,67,67,67,67,67,67,67,67,1278,67,67,67,67,67,67,1761,67,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,97,97,1349,97,97,97,97,97,97,97,97,1358,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,0,921,0,0,926,0,0,0,45,45,1411,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1754,45,45,67,67,1301,0,1307,0,1313,97,97,97,97,97,97,97,97,97,97,97,21054,97,97,97,97,67,1757,67,67,67,1760,67,67,67,67,67,67,67,67,67,67,1467,67,67,67,67,67,1778,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,67,67,67,67,67,1820,67,1822,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1933,97,1892,97,97,97,97,97,97,1899,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,673,45,45,45,45,45,45,45,67,67,67,67,67,1925,97,97,97,97,0,0,0,97,97,97,97,97,623,97,97,97,97,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,1796,97,45,45,45,45,45,45,45,970,45,45,45,45,45,45,45,45,1417,45,45,45,45,45,45,45,67,1964,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,97,97,1721,97,97,0,0,1997,97,0,0,2e3,97,97,0,97,97,97,97,97,45,45,45,45,733,45,67,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,144,45,45,45,1805,45,1807,45,45,45,45,45,67,67,67,67,67,67,231,67,67,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,45,45,67,211,67,67,67,67,230,234,240,244,67,67,67,67,67,67,464,67,67,67,67,67,67,479,67,67,67,260,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,291,97,97,97,97,310,314,320,324,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,1355,97,97,97,97,97,97,1362,340,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,360,0,362,0,365,28809,367,139,369,45,45,45,374,67,67,460,67,67,67,67,466,67,67,67,67,67,67,67,67,801,67,67,67,67,67,67,67,67,67,487,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,67,1772,67,67,97,97,97,97,97,97,97,0,921,922,1175,0,0,0,0,45,67,502,67,67,67,67,67,67,67,508,67,67,67,515,517,67,67,67,67,67,97,97,97,97,97,0,0,0,1932,97,97,0,1999,97,97,97,0,97,97,2004,2005,97,45,45,45,45,1193,45,45,45,45,45,45,45,45,45,45,45,676,45,45,45,45,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,552,97,97,97,97,97,1377,0,0,45,45,45,45,45,45,45,45,655,45,45,45,45,45,45,45,97,97,557,97,97,97,97,563,97,97,97,97,97,97,97,97,1135,97,97,97,97,97,97,97,97,97,584,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,911,97,97,97,97,97,97,97,638,0,0,0,0,1315,0,0,0,0,97,97,97,1319,97,97,97,0,97,97,97,97,97,97,1733,97,97,97,97,97,97,1340,97,97,97,1343,97,97,1345,97,1346,97,599,97,97,97,97,97,97,97,605,97,97,97,612,614,97,97,97,97,97,1794,97,97,97,45,45,45,45,45,45,45,1207,45,45,45,45,45,45,1213,45,45,745,67,67,67,67,751,67,67,67,67,67,67,67,67,67,67,1577,67,67,67,67,67,762,67,67,67,67,766,67,67,67,67,67,67,67,67,67,67,1765,67,67,67,67,67,777,67,67,781,67,67,67,67,67,67,67,67,67,67,67,67,1592,1593,67,67,97,843,97,97,97,97,849,97,97,97,97,97,97,97,97,97,1510,97,97,97,97,97,97,97,860,97,97,97,97,864,97,97,97,97,97,97,97,97,97,1797,45,45,45,45,1801,45,97,875,97,97,879,97,97,97,97,97,97,97,97,97,97,97,1522,97,97,97,97,97,991,45,45,45,45,996,45,45,45,45,45,45,45,45,67,67,215,67,67,67,67,233,67,67,67,67,251,253,1022,67,67,67,1026,67,67,67,67,67,67,67,67,67,67,1035,67,67,1038,67,67,67,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,67,1064,67,67,67,1067,67,67,67,67,1072,67,67,67,67,67,67,1296,0,0,0,0,0,0,0,0,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,1096,0,921,29315,0,0,0,0,928,45,45,45,45,45,934,45,45,45,164,45,45,45,45,45,45,45,45,45,198,45,45,45,378,45,45,45,45,45,45,393,45,45,45,398,45,97,97,1116,97,97,97,1120,97,97,97,97,97,97,97,97,97,1147,1148,97,97,97,97,97,97,97,1129,97,97,1132,97,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,0,45,1178,45,45,45,45,45,45,45,45,45,1185,45,45,45,45,441,45,45,45,45,45,45,451,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,1260,67,67,67,1263,67,67,1265,1203,45,45,1205,45,1206,45,45,45,45,45,45,45,45,45,1216,67,1266,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,492,67,67,67,67,67,67,67,67,67,471,67,67,67,67,481,67,45,1386,45,1389,45,45,45,45,1394,45,45,45,1397,45,45,45,45,995,45,997,45,45,45,45,45,45,45,67,67,67,67,1915,67,67,67,67,67,1422,45,45,45,67,67,67,67,67,67,67,67,67,1433,67,1436,67,67,67,67,1441,67,67,67,1444,67,67,67,67,67,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,97,1494,97,97,97,1497,97,97,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,67,1571,67,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,67,67,1583,67,67,67,67,67,67,67,67,1591,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,97,1634,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1125,97,97,97,1647,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,1183,45,45,45,45,45,45,45,45,45,409,45,45,45,45,45,45,1658,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1668,1712,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,1835,97,97,97,97,0,0,0,97,97,1844,97,97,1726,0,97,97,97,97,97,1732,97,1734,97,97,97,97,97,300,97,308,97,97,97,97,97,97,97,97,866,97,97,97,97,97,97,97,67,67,67,1758,67,67,67,1762,67,67,67,67,67,67,67,67,1043,67,67,67,67,67,67,67,67,67,67,67,67,1771,67,67,67,97,97,97,97,97,1776,97,97,97,97,297,97,97,97,97,97,97,97,97,97,97,97,1108,97,97,97,97,67,67,67,1966,97,97,97,1970,0,0,0,97,97,97,97,0,97,97,97,1720,97,97,97,97,97,0,0,97,97,97,1837,97,0,1840,1841,97,97,97,1988,45,67,67,67,67,67,67,67,67,67,1994,1995,67,97,97,97,97,97,1103,97,97,97,97,97,97,97,97,97,97,917,97,97,0,0,0,67,67,265,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,345,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,361,362,0,365,28809,367,139,45,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,411,45,45,414,45,45,45,45,377,45,45,45,386,45,45,45,45,45,45,45,45,45,1223,45,45,45,45,45,45,45,45,45,426,45,45,433,45,45,45,67,67,67,67,67,463,67,67,67,472,67,67,67,67,67,67,67,527,67,67,67,67,67,67,537,67,540,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,564,97,97,97,97,97,97,97,637,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,927,45,45,45,45,45,45,45,45,45,1234,45,45,45,45,67,67,67,67,1240,45,697,45,45,45,45,45,45,45,45,45,45,708,45,45,45,45,1221,45,45,45,45,1225,45,45,45,45,45,45,384,45,45,45,45,45,45,45,45,45,1210,45,45,45,45,45,45,67,67,795,67,67,67,67,67,67,67,67,67,67,67,67,67,1470,67,67,67,67,67,67,67,815,67,67,67,67,67,67,25398,542,13112,544,97,97,97,893,97,97,97,97,97,97,97,97,97,97,97,97,1164,97,97,97,67,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,1687,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,1097,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1450,45,45,1388,45,1390,45,45,45,45,45,45,45,45,45,45,45,1236,67,67,67,67,67,1437,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1472,1490,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1503,67,67,67,67,67,97,97,97,97,97,0,1930,0,97,97,97,97,97,847,97,97,97,97,97,97,97,97,97,858,67,67,1965,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,1719,97,97,97,97,97,97,0,0,0,45,45,45,45,1382,45,1383,45,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,1563,45,45,45,45,45,67,261,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,341,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,1099,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1333,97,1230,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1992,67,1993,67,67,67,97,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,1665,45,45,45,45,45,131427,357,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,684,45,45,45,45,45,45,45,45,45,45,412,45,45,45,416,45,45,45,440,45,45,45,45,45,45,45,45,45,45,45,67,67,1990,67,1991,67,67,67,67,67,67,67,97,97,1707,97,97,97,97,97,97,501,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,67,67,67,526,67,67,67,67,67,67,67,67,67,67,1030,67,1032,67,67,67,67,598,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1632,0,921,29315,923,0,0,0,45,45,45,45,45,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,425,45,45,45,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1093,0,0,0,0,0,97,1609,97,97,97,97,97,97,97,97,97,1369,97,97,97,1372,97,97,67,67,266,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,346,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,665,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1677,45,45,45,45,67,45,45,954,45,956,45,45,45,45,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,448,45,45,45,45,67,456,67,67,67,67,67,1270,67,67,67,67,67,67,67,67,67,67,1069,67,67,67,67,67,67,97,97,97,1350,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,97,97,97,97,97,1376,0,0,0,45,45,45,45,45,45,45,45,1559,1561,45,45,45,1564,45,1566,1567,45,67,67,67,67,67,1573,67,67,67,67,67,67,67,67,67,67,1247,67,67,67,67,67,1252,97,1725,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1628,97,1630,0,0,94242,0,0,0,2211840,0,1118208,0,0,0,0,2158592,2158731,2158592,2158592,2158592,3117056,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3018752,2158592,3043328,2158592,2158592,2158592,2158592,3080192,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158878,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2605056,2158592,2158592,2207744,0,542,0,544,0,0,2166784,0,0,0,550,0,0,2158592,2158592,2686976,2158592,2715648,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2867200,2158592,2904064,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,0,2211840,0,0,1130496,0,0,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,139,0,0,0,139,0,2367488,2207744,0,0,0,0,176128,0,2166784,0,0,0,0,0,286,2158592,2158592,3170304,3174400,2158592,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,1508,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,2158592,2158592,2158592,2158592,3158016,67,24850,24850,12564,12564,0,0,0,0,0,53531,53531,0,286,97,97,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,1154,57889,0,0,0,0,550,0,97,97,97,97,97,97,97,97,97,561,97,97,97,97,97,97,576,97,97,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,0,0,139264,0,921,29315,0,0,926,0,45,45,45,45,45,45,45,45,45,719,720,45,45,45,45,45,45,45,45,685,45,45,45,45,45,45,45,45,45,942,45,45,946,45,45,45,950,45,45,0,2146304,2146304,0,0,0,0,2224128,2224128,2224128,2232320,2232320,2232320,2232320,0,0,1301,0,0,0,0,0,1307,0,0,0,0,0,1313,0,0,0,0,0,0,0,97,97,1318,97,97,97,97,97,97,1795,97,97,45,45,45,45,45,45,45,446,45,45,45,45,45,45,67,67,2158592,2146304,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,924,0,0,45,45,45,45,45,45,45,45,45,1e3,45,45,45,45,67,67],r.EXPECTED=[290,300,304,353,296,309,305,319,315,324,328,352,354,334,338,330,320,345,349,293,358,362,341,366,312,370,374,378,382,386,390,394,398,737,402,634,439,604,634,634,634,634,408,634,634,634,404,634,634,634,457,634,634,963,634,634,413,634,634,634,634,634,634,634,663,418,422,903,902,426,431,548,634,437,521,919,443,615,409,449,455,624,731,751,634,461,465,672,470,469,474,481,485,477,489,493,629,542,497,505,603,602,991,648,510,804,634,515,958,526,525,530,768,634,546,552,711,710,593,558,562,618,566,570,574,578,582,586,590,608,612,660,822,821,634,622,596,444,628,533,724,633,640,653,647,652,536,1008,451,450,445,657,670,676,685,689,693,697,701,704,707,715,719,798,815,634,723,762,996,634,728,969,730,735,908,634,741,679,889,511,747,634,750,755,499,666,499,501,759,772,776,780,634,787,784,797,802,809,808,427,814,1006,517,634,519,853,634,813,850,793,634,819,826,833,832,837,843,847,857,861,863,867,871,875,879,883,643,887,539,980,979,634,893,944,634,900,896,634,907,933,506,912,917,828,433,636,635,554,961,923,930,927,937,941,634,634,634,974,948,952,985,913,968,967,743,634,973,839,634,978,599,634,984,989,765,444,995,1e3,634,1003,790,955,1012,681,634,634,634,634,634,414,1016,1020,1024,1085,1027,1090,1090,1046,1080,1137,1108,1215,1049,1032,1039,1085,1085,1085,1085,1058,1062,1068,1085,1086,1090,1090,1091,1072,1064,1107,1090,1090,1090,1118,1123,1138,1078,1074,1084,1085,1085,1085,1087,1090,1062,1052,1060,1114,1062,1104,1085,1085,1090,1090,1028,1122,1063,1128,1139,1127,1158,1085,1085,1151,1090,1090,1090,1095,1090,1132,1073,1136,1143,1061,1150,1085,1155,1098,1101,1146,1162,1169,1101,1185,1151,1090,1110,1173,1054,1087,1109,1177,1165,1089,1204,1184,1107,1189,1193,1088,1197,1180,1201,1208,1042,1212,1219,1223,1227,1231,1235,1245,1777,1527,1686,1686,1238,1686,1254,1686,1686,1686,1294,1669,1686,1686,1686,1322,1625,1534,1268,1624,1275,1281,1443,1292,1300,1686,1686,1686,1350,1826,1306,1686,1686,1240,2032,1317,1321,1686,1686,1253,1686,1326,1686,1686,1686,1418,1709,1446,1686,1686,1686,1492,1686,1295,1447,1686,1686,1258,1686,1736,1686,1686,1520,1355,1686,1288,1348,1361,1686,1359,1686,1364,1498,1368,1302,1362,1381,1389,1395,1486,1686,1371,1377,1370,1686,1375,1382,1384,1402,1408,1385,1383,1619,1413,1423,1428,1433,1686,1686,1270,1686,1338,1686,1440,1686,1686,1686,1499,1465,1686,1686,1686,1639,1473,1884,1686,1686,1293,1864,1686,1686,1296,1321,1483,1686,1686,1686,1646,1686,1748,1496,1686,1418,1675,1686,1418,1702,1686,1418,1981,1686,1429,1409,1427,1504,1692,1686,1686,1313,1448,1651,1508,1686,1686,1340,1686,1903,1686,1686,1435,1513,1686,1283,1287,1519,1686,1524,1363,1568,1938,1539,1566,1579,1479,1533,1538,1553,1544,1552,1557,1563,1574,1557,1583,1589,1590,1759,1594,1603,1607,1611,1686,1436,1514,1686,1434,1656,1686,1434,1680,1686,1453,1686,1686,1686,1559,1617,1686,1770,1418,1623,1769,1629,1686,1515,1335,1686,1285,1686,1671,1921,1650,1686,1686,1344,1308,1666,1686,1686,1686,1659,1685,1686,1686,1686,1686,1241,1686,1686,1844,1691,1686,1630,1977,1970,1362,1686,1686,1686,1693,1698,1686,1686,1686,1697,1686,1764,1715,1686,1634,1638,1686,1599,1585,1686,1271,1686,1269,1686,1721,1686,1686,1354,1686,1801,1686,1799,1686,1640,1686,1686,1461,1686,1686,1732,1686,1944,1686,1740,1686,1746,1415,1396,1686,1598,1547,1417,1597,1416,1577,1546,1397,1577,1547,1548,1570,1398,1753,1686,1652,1509,1686,1686,1686,1757,1686,1419,1686,1763,1418,1768,1781,1686,1686,1686,1705,1686,2048,1792,1686,1686,1686,1735,1686,1797,1686,1686,1404,1686,1639,1815,1686,1686,1418,2017,1820,1686,1686,1803,1686,1686,1686,1736,1489,1686,1686,1825,1338,1260,1263,1686,1686,1785,1686,1686,1728,1686,1686,1749,1497,1830,1830,1262,1248,1261,1329,1260,1264,1329,1248,1249,1259,1540,1849,1842,1686,1686,1835,1686,1686,1816,1686,1686,1831,1882,1848,1686,1686,1686,1774,2071,1854,1686,1686,1469,1884,1686,1821,1859,1686,1686,1350,1883,1686,1686,1686,1781,1391,1875,1686,1686,1613,1644,1686,1686,1889,1686,1686,1662,1884,1686,1885,1890,1686,1686,1686,1894,1686,1686,1678,1686,1907,1686,1686,1529,1914,1686,1838,1686,1686,1881,1686,1686,1872,1876,1836,1919,1686,1837,1692,1910,1686,1925,1928,1742,1686,1811,1811,1930,1810,1929,1935,1928,1900,1942,1867,1868,1931,1035,1788,1948,1952,1956,1960,1964,1686,1976,1686,1686,1686,2065,1686,1992,2037,1686,1686,1998,2009,1972,2002,1686,1686,1686,2077,1300,2023,1686,1686,1686,1807,2031,1686,1686,1686,1860,1500,2032,1686,1686,1686,2083,1686,2036,1686,1277,1276,2042,1877,1686,1686,2041,1686,1686,2027,2037,2012,1686,2012,1855,1850,1686,2046,1686,1686,2054,1996,1686,1897,1309,2059,2052,1686,2058,1686,1686,2081,1686,1717,1477,1686,1331,1686,1686,1687,1686,1860,1681,1686,1686,1686,1966,1724,1686,1686,1686,1984,2015,1686,1686,1686,1988,1686,2063,1686,1686,1686,2005,1686,1727,1686,1686,1711,1457,2069,1686,1686,1686,2019,2075,1686,1686,1915,1686,1686,1793,1874,1686,1686,1491,1362,1449,1686,1686,1460,2098,2087,2091,2095,2184,2102,2113,2780,2117,2134,2142,2281,2146,2146,2146,2304,2296,2181,2639,2591,2872,2592,2873,2313,2195,2200,2281,2146,2273,2226,2204,2152,2219,2276,2167,2177,2276,2235,2276,2276,2230,2281,2276,2296,2276,2293,2276,2276,2276,2276,2234,2276,2311,2314,2210,2199,2217,2222,2276,2276,2276,2240,2276,2294,2276,2276,2173,2276,2198,2281,2281,2281,2281,2282,2146,2146,2146,2146,2205,2146,2204,2248,2276,2235,2276,2297,2276,2276,2276,2277,2256,2281,2283,2146,2146,2146,2275,2276,2295,2276,2276,2293,2146,2304,2264,2269,2221,2276,2276,2276,2293,2295,2276,2276,2276,2295,2263,2205,2268,2220,2172,2276,2276,2276,2296,2276,2276,2296,2294,2276,2276,2278,2281,2281,2280,2281,2281,2281,2283,2206,2223,2276,2276,2279,2281,2281,2146,2273,2276,2276,2281,2281,2281,2276,2292,2276,2298,2225,2276,2298,2169,2224,2292,2298,2171,2229,2281,2281,2171,2236,2281,2281,2281,2146,2275,2225,2292,2299,2276,2229,2281,2146,2276,2290,2297,2283,2146,2146,2274,2224,2227,2298,2225,2297,2276,2230,2170,2230,2282,2146,2147,2151,2156,2288,2276,2230,2303,2308,2236,2284,2228,2318,2318,2318,2326,2335,2339,2343,2349,2416,2693,2357,2592,2109,2592,2592,2162,2943,2823,2646,2592,2361,2592,2122,2592,2592,2122,2470,2592,2592,2592,2109,2107,2592,2592,2592,2123,2592,2592,2592,2125,2592,2413,2592,2592,2592,2127,2592,2592,2414,2592,2592,2592,2130,2952,2592,2594,2592,2592,2212,2609,2252,2592,2592,2592,2446,2434,2592,2592,2592,2212,2446,2450,2456,2431,2435,2592,2592,2243,2478,2448,2439,2946,2592,2592,2592,2368,2809,2813,2450,2441,2212,2812,2449,2440,2947,2592,2592,2592,2345,2451,2457,2948,2592,2124,2592,2592,2650,2823,2449,2455,2946,2592,2128,2592,2592,2649,2952,2592,2810,2448,2461,2991,2467,2592,2592,2329,2817,2474,2990,2466,2592,2592,2373,2447,2992,2469,2592,2592,2592,2373,2447,2477,2468,2592,2592,2353,2469,2592,2495,2592,2592,2415,2483,2592,2415,2496,2592,2592,2352,2592,2592,2352,2352,2469,2592,2592,2363,2331,2494,2592,2592,2592,2375,2592,2375,2415,2504,2592,2592,2367,2372,2503,2592,2592,2592,2389,2418,2415,2592,2592,2373,2592,2592,2592,2593,2732,2417,2415,2592,2417,2520,2592,2592,2592,2390,2521,2521,2592,2592,2592,2401,2599,2585,2526,2531,2120,2592,2212,2426,2450,2463,2948,2592,2592,2592,2213,2389,2527,2532,2121,2542,2551,2105,2592,2213,2592,2592,2592,2558,2538,2544,2553,2557,2537,2543,2552,2421,2572,2576,2546,2543,2547,2592,2592,2373,2615,2575,2545,2105,2592,2244,2479,2592,2129,2592,2592,2628,2690,2469,2562,2566,2592,2592,2592,2415,2928,2934,2401,2570,2574,2564,2572,2585,2590,2592,2592,2585,2965,2592,2592,2592,2445,2251,2592,2592,2592,2474,2592,2609,2892,2592,2362,2592,2592,2138,2851,2159,2592,2592,2592,2509,2888,2892,2592,2592,2592,2490,2418,2891,2592,2592,2376,2592,2592,2374,2592,2889,2388,2592,2373,2373,2890,2592,2592,2387,2592,2887,2505,2892,2592,2373,2610,2388,2592,2592,2376,2373,2592,2887,2891,2592,2374,2592,2592,2608,2159,2614,2620,2592,2592,2394,2594,2887,2399,2592,2887,2397,2508,2374,2507,2592,2375,2592,2592,2592,2595,2508,2506,2592,2506,2505,2505,2592,2507,2637,2505,2592,2592,2401,2661,2592,2643,2592,2592,2417,2592,2655,2592,2592,2592,2510,2414,2656,2592,2592,2592,2516,2592,2593,2660,2665,2880,2592,2592,2592,2522,2767,2666,2881,2592,2592,2420,2571,2696,2592,2592,2592,2580,2572,2686,2632,2698,2592,2383,2514,2592,2163,2932,2465,2685,2631,2697,2592,2388,2592,2592,2212,2604,2671,2632,2678,2592,2401,2405,2409,2592,2592,2592,2679,2592,2592,2592,2592,2108,2677,2591,2592,2592,2592,2419,2592,2683,2187,2191,2469,2671,2189,2467,2592,2401,2629,2633,2702,2468,2592,2592,2421,2536,2703,2469,2592,2592,2422,2573,2593,2672,2467,2592,2402,2406,2592,2402,2979,2592,2592,2626,2673,2467,2592,2446,2259,2947,2592,2377,2709,2592,2592,2522,2862,2713,2468,2592,2592,2581,2572,2562,2374,2374,2592,2376,2721,2724,2592,2592,2624,2373,2731,2592,2592,2592,2626,2732,2592,2592,2592,2755,2656,2726,2736,2741,2592,2486,2593,2381,2592,2727,2737,2742,2715,2747,2753,2592,2498,2469,2873,2743,2592,2592,2592,2791,2759,2763,2592,2592,2627,2704,2592,2592,2522,2789,2593,2761,2753,2592,2498,2863,2592,2592,2767,2592,2592,2592,2792,2789,2592,2592,2592,2803,2126,2592,2592,2592,2811,2122,2592,2592,2592,2834,2777,2592,2592,2592,2848,2936,2591,2489,2797,2592,2592,2670,2631,2490,2798,2592,2592,2592,2963,2807,2592,2592,2592,2965,2838,2592,2592,2592,2975,2330,2818,2829,2592,2498,2939,2592,2498,2592,2791,2331,2819,2830,2592,2592,2592,2982,2834,2817,2828,2106,2592,2592,2592,2405,2405,2817,2828,2592,2592,2415,2849,2842,2592,2522,2773,2592,2522,2868,2592,2580,2600,2586,2137,2850,2843,2592,2592,2855,2937,2844,2592,2592,2592,2987,2936,2591,2592,2592,2684,2630,2592,2856,2938,2592,2592,2860,2939,2592,2592,2872,2592,2861,2591,2592,2592,2887,2616,2592,2867,2592,2592,2708,2592,2498,2469,2498,2497,2785,2773,2499,2783,2770,2877,2877,2877,2772,2592,2592,2345,2885,2592,2592,2592,2715,2762,2515,2896,2592,2592,2715,2917,2516,2897,2592,2592,2592,2901,2906,2911,2592,2592,2956,2960,2715,2902,2907,2912,2593,2916,2920,2820,2922,2822,2592,2592,2715,2927,2921,2821,2106,2592,2592,2974,2408,2321,2821,2106,2592,2592,2983,2592,2593,2404,2408,2592,2592,2717,2749,2716,2928,2322,2822,2593,2926,2919,2820,2934,2823,2592,2592,2592,2651,2824,2592,2592,2592,2130,2952,2592,2592,2592,2592,2964,2592,2592,2716,2748,2592,2969,2592,2592,2716,2918,2368,2970,2592,2592,2592,2403,2407,2592,2592,2787,2211,2404,2409,2592,2592,2802,2837,2987,2592,2592,2592,2809,2427,2592,2793,2592,2592,2809,2447,1073741824,2147483648,539754496,542375936,402653184,554434560,571736064,545521856,268451840,335544320,268693630,512,2048,256,1024,0,1024,0,1073741824,2147483648,0,0,0,8388608,0,0,1073741824,1073741824,0,2147483648,537133056,4194304,1048576,268435456,-1073741824,0,0,0,1048576,0,0,0,1572864,0,0,0,4194304,0,134217728,16777216,0,0,32,64,98304,0,33554432,8388608,192,67108864,67108864,67108864,67108864,16,32,4,0,8192,196608,196608,229376,80,4096,524288,8388608,0,0,32,128,256,24576,24600,24576,24576,2,24576,24576,24576,24584,24592,24576,24578,24576,24578,24576,24576,16,512,2048,2048,256,4096,32768,1048576,4194304,67108864,134217728,268435456,262144,134217728,0,128,128,64,16384,16384,16384,67108864,32,32,4,4,4096,262144,134217728,0,0,0,2,0,8192,131072,131072,4096,4096,4096,4096,24576,24576,24576,8,8,24576,24576,16384,16384,16384,24576,24584,24576,24576,24576,16384,24576,536870912,262144,0,0,32,2048,8192,4,4096,4096,4096,786432,8388608,16777216,0,128,16384,16384,16384,32768,65536,2097152,32,32,32,32,4,4,4,4,4,4096,67108864,67108864,67108864,24576,24576,24576,24576,0,16384,16384,16384,16384,67108864,67108864,8,67108864,24576,8,8,8,24576,24576,24576,24578,24576,24576,24576,2,2,2,16384,67108864,67108864,67108864,32,67108864,8,8,24576,2048,2147483648,536870912,262144,262144,262144,67108864,8,24576,16384,32768,1048576,4194304,25165824,67108864,24576,32770,2,4,112,512,98304,524288,50,402653186,1049090,1049091,10,66,100925514,10,66,12582914,0,0,-1678194207,-1678194207,-1041543218,0,32768,0,0,32,65536,268435456,1,1,513,1048577,0,12582912,0,0,0,4,1792,0,0,0,7,29360128,0,0,0,8,0,0,0,12,1,1,0,0,-604102721,-604102721,4194304,8388608,0,0,0,31,925600,997981306,997981306,997981306,0,0,2048,8388608,0,0,1,2,4,32,64,512,8192,0,0,0,245760,997720064,0,0,0,32,0,0,0,3,12,16,32,8,112,3072,12288,16384,32768,65536,131072,7864320,16777216,973078528,0,0,65536,131072,3670016,4194304,16777216,33554432,2,8,48,2048,8192,16384,32768,65536,131072,524288,131072,524288,3145728,4194304,16777216,33554432,65536,131072,2097152,4194304,16777216,33554432,134217728,268435456,536870912,0,0,0,1024,0,8,48,2048,8192,65536,33554432,268435456,536870912,65536,268435456,536870912,0,0,32768,0,0,126,623104,65011712,0,32,65536,536870912,0,0,65536,524288,0,32,65536,0,0,0,2048,0,0,0,15482,245760,-604102721,0,0,0,18913,33062912,925600,-605028352,0,0,0,65536,31,8096,131072,786432,3145728,3145728,12582912,50331648,134217728,268435456,160,256,512,7168,131072,786432,131072,786432,1048576,2097152,12582912,16777216,268435456,1073741824,2147483648,12582912,16777216,33554432,268435456,1073741824,2147483648,3,12,16,160,256,7168,786432,1048576,12582912,16777216,268435456,1073741824,0,8,16,32,128,256,512,7168,786432,1048576,2097152,0,1,2,8,16,7168,786432,1048576,8388608,16777216,16777216,1073741824,0,0,0,0,1,0,0,8,32,128,256,7168,8,32,0,3072,0,8,32,3072,4096,524288,8,32,0,0,3072,4096,0,2048,524288,8388608,8,2048,0,0,1,12,256,4096,32768,262144,1048576,4194304,67108864,0,2048,0,2048,2048,1073741824,-58805985,-58805985,-58805985,0,0,262144,0,0,32,4194304,16777216,134217728,4382,172032,-58982400,0,0,2,28,256,4096,8192,8192,32768,131072,262144,524288,1,2,12,256,4096,0,0,4194304,67108864,134217728,805306368,1073741824,0,0,1,2,12,16,256,4096,1048576,67108864,134217728,268435456,0,512,1048576,4194304,201326592,1879048192,0,0,12,256,4096,134217728,268435456,536870912,12,256,268435456,536870912,0,12,256,0,0,1,32,64,512,0,0,205236961,205236961,0,0,0,1,96,640,1,10976,229376,204996608,0,640,2048,8192,229376,1572864,1572864,2097152,201326592,0,0,0,64,512,2048,229376,1572864,201326592,1572864,201326592,0,0,1,4382,0,1,32,2048,65536,131072,1572864,201326592,131072,1572864,134217728,0,0,524288,524288,0,0,0,-68582786,-68582786,-68582786,0,0,2097152,524288,0,524288,0,0,65536,131072,1572864,0,0,2,4,0,0,65011712,-134217728,0,0,0,0,2,4,120,512,-268435456,0,0,0,2,8,48,64,2048,8192,98304,524288,2097152,4194304,25165824,33554432,134217728,268435456,2147483648,0,0,25165824,33554432,134217728,1879048192,2147483648,0,0,4,112,512,622592,65011712,134217728,-268435456,16777216,33554432,134217728,1610612736,0,0,0,64,98304,524288,4194304,16777216,33554432,0,98304,524288,16777216,33554432,0,65536,524288,33554432,536870912,1073741824,0,65536,524288,536870912,1073741824,0,0,65536,524288,536870912,0,524288,0,524288,524288,1048576,2086666240,2147483648,0,-1678194207,0,0,0,8,32,2048,524288,8388608,0,0,33062912,436207616,2147483648,0,0,32,64,2432,16384,32768,32768,524288,3145728,4194304,25165824,25165824,167772160,268435456,2147483648,0,32,64,384,2048,16384,32768,1048576,2097152,4194304,25165824,32,64,128,256,2048,16384,2048,16384,1048576,4194304,16777216,33554432,134217728,536870912,1073741824,0,0,2048,16384,4194304,16777216,33554432,134217728,805306368,0,0,16777216,134217728,268435456,2147483648,0,622592,622592,622592,8807,8807,434791,0,0,16777216,0,0,0,7,608,8192,0,0,0,3,4,96,512,32,64,8192,0,0,16777216,134217728,0,0,2,4,8192,16384,65536,2097152,33554432,268435456],r.TOKEN=[\"(0)\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"QuotChar\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(e,t,n){\"use strict\";var r=function(e){var t=e;this.tokens=[],this.reset=function(){t=t,this.tokens=[]},this.startNonterminal=function(){},this.endNonterminal=function(){},this.terminal=function(e,n,r){this.tokens.push({name:e,value:t.substring(n,r)})},this.whitespace=function(e,n){this.tokens.push({name:\"WS\",value:t.substring(e,n)})}};n.Lexer=function(e,t){this.tokens=[],this.getLineTokens=function(n,i){i=i===\"start\"||!i?'[\"start\"]':i;var s=JSON.parse(i),o=new r(n),u=new e(n,o),a=[];for(;;){var f=s[s.length-1];try{o.tokens=[],u[\"parse_\"+f]();var l=null;o.tokens.length>1&&o.tokens[0].name===\"WS\"&&(a.push({type:\"text\",value:o.tokens[0].value}),o.tokens.splice(0,1));var c=o.tokens[0],h=t[f];for(var p=0;p<h.length;p++){var d=t[f][p];if(typeof d.name==\"function\"&&d.name(c)||d.name===c.name){l=d;break}}if(c.name===\"EOF\")break;if(c.value===\"\")throw\"Encountered empty string lexical rule.\";a.push({type:l===null?\"text\":typeof l.token==\"function\"?l.token(c.value):l.token,value:c.value}),l&&l.next&&l.next(s)}catch(v){if(v instanceof u.ParseException){var m=0;for(var g=0;g<a.length;g++)m+=a[g].value.length;return a.push({type:\"text\",value:n.substring(m)}),{tokens:a,state:JSON.stringify([\"start\"])}}throw v}}return{tokens:a,state:JSON.stringify(s)}}}},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(e,t,n){\"use strict\";var r=e(\"./XQueryTokenizer\").XQueryTokenizer,i=e(\"./lexer\").Lexer,s=\"after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotChar\",token:\"string\"}]};n.XQueryLexer=function(){return new i(r,d)}},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}]},{},[\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\"])}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function a(e,t){var n=!0,r=e.type.split(\".\"),i=t.split(\".\");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../behaviour/xml\").XmlBehaviour,u=e(\"../../token_iterator\").TokenIterator,f=function(){this.inherit(s,[\"braces\",\"parens\",\"string_dquotes\"]),this.inherit(o),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var s=n.getCursorPosition(),o=new u(r,s.row,s.column),f=o.getCurrentToken(),l=!1,e=JSON.parse(e).pop();if(f&&f.value===\">\"||e!==\"StartTag\")return;if(!f||!a(f,\"meta.tag\")&&(!a(f,\"text\")||!f.value.match(\"/\"))){do f=o.stepBackward();while(f&&(a(f,\"string\")||a(f,\"keyword.operator\")||a(f,\"entity.attribute-name\")||a(f,\"text\")))}else l=!0;var c=o.stepBackward();if(!f||!a(f,\"meta.tag\")||c!==null&&c.value.match(\"/\"))return;var h=f.value.substring(1);if(l)var h=h.substring(0,s.column-f.start);return{text:\"></\"+h+\">\",selection:[1,1]}}})};r.inherits(f,i),t.XQueryBehaviour=f}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/xquery\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/xquery_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"../worker/worker_client\").WorkerClient,i=e(\"../lib/oop\"),s=e(\"./text\").Mode,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./xquery/xquery_lexer\").XQueryLexer,a=e(\"../range\").Range,f=e(\"./behaviour/xquery\").XQueryBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=e(\"../anchor\").Anchor,h=function(){this.$tokenizer=new u,this.$behaviour=new f,this.foldingRules=new l,this.$highlightRules=new o};i.inherits(h,s),function(){this.completer={getCompletions:function(e,t,n,r,i){if(!t.$worker)return i();t.$worker.emit(\"complete\",{data:{pos:n,prefix:r}}),t.$worker.on(\"complete\",function(e){i(null,e.data)})}},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=t.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);return i&&(r+=n),r},this.checkOutdent=function(e,t,n){return/^\\s+$/.test(t)?/^\\s*[\\}\\)]/.test(n):!1},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=r.match(/^(\\s*[\\}\\)])/);if(!i)return 0;var s=i[1].length,o=t.findMatchingBracket({row:n,column:s});if(!o||o.row==n)return 0;var u=this.$getIndent(t.getLine(o.row));t.replace(new a(n,0,n,s-1),u)},this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,u=/^\\s*\\(:(.*):\\)/;for(i=n;i<=r;i++)if(!u.test(t.getLine(i))){o=!1;break}var f=new a(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(u)[1]:\"(:\"+s+\":)\")},this.createWorker=function(e){var t=new r([\"ace\"],\"ace/mode/xquery_worker\",\"XQueryWorker\"),n=this;return t.attachToDocument(e.getDocument()),t.on(\"ok\",function(t){e.clearAnnotations()}),t.on(\"markers\",function(t){e.clearAnnotations(),n.addMarkers(t.data,e)}),t.on(\"highlight\",function(t){n.$tokenizer.tokens=t.data.tokens,n.$tokenizer.lines=e.getDocument().getAllLines();var r=Object.keys(n.$tokenizer.tokens);for(var i=0;i<r.length;i++){var s=parseInt(r[i]);delete e.bgTokenizer.lines[s],delete e.bgTokenizer.states[s],e.bgTokenizer.fireUpdateEvent(s,s)}}),t},this.removeMarkers=function(e){var t=e.getMarkers(!1);for(var n in t)t[n].clazz.indexOf(\"language_highlight_\")===0&&e.removeMarker(n);for(var r=0;r<e.markerAnchors.length;r++)e.markerAnchors[r].detach();e.markerAnchors=[]},this.addMarkers=function(e,t){var n=this;t.markerAnchors||(t.markerAnchors=[]),this.removeMarkers(t),t.languageAnnos=[],e.forEach(function(e){function u(i){r&&t.removeMarker(r),o.row=n.row;if(e.pos.sc!==undefined&&e.pos.ec!==undefined){var s=new a(e.pos.sl,e.pos.sc,e.pos.el,e.pos.ec);r=t.addMarker(s,\"language_highlight_\"+(e.type?e.type:\"default\"))}i&&t.setAnnotations(t.languageAnnos)}var n=new c(t.getDocument(),e.pos.sl,e.pos.sc||0);t.markerAnchors.push(n);var r,i=e.pos.ec-e.pos.sc,s=e.pos.el-e.pos.sl,o={guttertext:e.message,type:e.level||\"warning\",text:e.message};u(),n.on(\"change\",function(){u(!0)}),e.message&&t.languageAnnos.push(o)}),t.setAnnotations(t.languageAnnos)},this.$id=\"ace/mode/xquery\"}.call(h.prototype),t.Mode=h});                (function() {\n                    ace.require([\"ace/mode/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/mode-yaml.js",
    "content": "ace.define(\"ace/mode/yaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"list.markup\",regex:/^(?:-{3}|\\.{3})\\s*(?=#|$)/},{token:\"list.markup\",regex:/^\\s*[\\-?](?:$|\\s)/},{token:\"constant\",regex:\"!![\\\\w//]+\"},{token:\"constant.language\",regex:\"[&\\\\*][a-zA-Z0-9-_]+\"},{token:[\"meta.tag\",\"keyword\"],regex:/^(\\s*\\w.*?)(:(?=\\s|$))/},{token:[\"meta.tag\",\"keyword\"],regex:/(\\w+?)(\\s*:(?=\\s|$))/},{token:\"keyword.operator\",regex:\"<<\\\\w*:\\\\w*\"},{token:\"keyword.operator\",regex:\"-\\\\s*(?=[{])\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:/[|>][-+\\d\\s]*$/,onMatch:function(e,t,n,r){var i=/^\\s*/.exec(r)[0];return n.length<1?n.push(this.next):n[0]=\"mlString\",n.length<2?n.push(i.length):n[1]=i.length,this.token},next:\"mlString\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)(?=[^\\d-\\w]|$)/},{token:\"constant.numeric\",regex:/[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/},{token:\"constant.language.boolean\",regex:\"\\\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:/[^\\s,:\\[\\]\\{\\}]+/}],mlString:[{token:\"indent\",regex:/^\\s*$/},{token:\"indent\",regex:/^\\s*/,onMatch:function(e,t,n){var r=n[1];return r>=e.length?(this.next=\"start\",n.splice(0)):this.next=\"mlString\",this.token},next:\"mlString\"},{token:\"string\",regex:\".+\"}]},this.normalizeRules()};r.inherits(s,i),t.YamlHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/yaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/yaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./yaml_highlight_rules\").YamlHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/coffee\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart=[\"#\"],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e==\"start\"){var i=t.match(/^.*[\\{\\(\\[]\\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/yaml\"}.call(a.prototype),t.Mode=a});                (function() {\n                    ace.require([\"ace/mode/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/abap.js",
    "content": "ace.define(\"ace/snippets/abap\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"abap\"});                (function() {\n                    ace.require([\"ace/snippets/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/abc.js",
    "content": "ace.define(\"ace/snippets/abc\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='\\nsnippet zupfnoter.print\\n\t%%%%hn.print {\"startpos\": ${1:pos_y}, \"t\":\"${2:title}\", \"v\":[${3:voices}], \"s\":[[${4:syncvoices}1,2]], \"f\":[${5:flowlines}],  \"sf\":[${6:subflowlines}], \"j\":[${7:jumplines}]}\\n\\nsnippet zupfnoter.note\\n\t%%%%hn.note {\"pos\": [${1:pos_x},${2:pos_y}], \"text\": \"${3:text}\", \"style\": \"${4:style}\"}\\n\\nsnippet zupfnoter.annotation\\n\t%%%%hn.annotation {\"id\": \"${1:id}\", \"pos\": [${2:pos}], \"text\": \"${3:text}\"}\\n\\nsnippet zupfnoter.lyrics\\n\t%%%%hn.lyrics {\"pos\": [${1:x_pos},${2:y_pos}]}\\n\\nsnippet zupfnoter.legend\\n\t%%%%hn.legend {\"pos\": [${1:x_pos},${2:y_pos}]}\\n\\n\\n\\nsnippet zupfnoter.target\\n\t\"^:${1:target}\"\\n\\nsnippet zupfnoter.goto\\n\t\"^@${1:target}@${2:distance}\"\\n\\nsnippet zupfnoter.annotationref\\n\t\"^#${1:target}\"\\n\\nsnippet zupfnoter.annotation\\n\t\"^!${1:text}@${2:x_offset},${3:y_offset}\"\\n\\n\\n',t.scope=\"abc\"});                (function() {\n                    ace.require([\"ace/snippets/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/actionscript.js",
    "content": "ace.define(\"ace/snippets/actionscript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet main\\n\tpackage {\\n\t\timport flash.display.*;\\n\t\timport flash.Events.*;\\n\t\\n\t\tpublic class Main extends Sprite {\\n\t\t\tpublic function Main (\t) {\\n\t\t\t\ttrace(\"start\");\\n\t\t\t\tstage.scaleMode = StageScaleMode.NO_SCALE;\\n\t\t\t\tstage.addEventListener(Event.RESIZE, resizeListener);\\n\t\t\t}\\n\t\\n\t\t\tprivate function resizeListener (e:Event):void {\\n\t\t\t\ttrace(\"The application window changed size!\");\\n\t\t\t\ttrace(\"New width:  \" + stage.stageWidth);\\n\t\t\t\ttrace(\"New height: \" + stage.stageHeight);\\n\t\t\t}\\n\t\\n\t\t}\\n\t\\n\t}\\nsnippet class\\n\t${1:public|internal} class ${2:name} ${3:extends } {\\n\t\tpublic function $2 (\t) {\\n\t\t\t(\"start\");\\n\t\t}\\n\t}\\nsnippet all\\n\tpackage name {\\n\\n\t\t${1:public|internal|final} class ${2:name} ${3:extends } {\\n\t\t\tprivate|public| static const FOO = \"abc\";\\n\t\t\tprivate|public| static var BAR = \"abc\";\\n\\n\t\t\t// class initializer - no JIT !! one time setup\\n\t\t\tif Cababilities.os == \"Linux|MacOS\" {\\n\t\t\t\tFOO = \"other\";\\n\t\t\t}\\n\\n\t\t\t// constructor:\\n\t\t\tpublic function $2 (\t){\\n\t\t\t\tsuper2();\\n\t\t\t\ttrace(\"start\");\\n\t\t\t}\\n\t\t\tpublic function name (a, b...){\\n\t\t\t\tsuper.name(..);\\n\t\t\t\tlable:break\\n\t\t\t}\\n\t\t}\\n\t}\\n\\n\tfunction A(){\\n\t\t// A can only be accessed within this file\\n\t}\\nsnippet switch\\n\tswitch(${1}){\\n\t\tcase ${2}:\\n\t\t\t${3}\\n\t\tbreak;\\n\t\tdefault:\\n\t}\\nsnippet case\\n\t\tcase ${1}:\\n\t\t\t${2}\\n\t\tbreak;\\nsnippet package\\n\tpackage ${1:package}{\\n\t\t${2}\\n\t}\\nsnippet wh\\n\twhile ${1:cond}{\\n\t\t${2}\\n\t}\\nsnippet do\\n\tdo {\\n\t\t${2}\\n\t} while (${1:cond})\\nsnippet while\\n\twhile ${1:cond}{\\n\t\t${2}\\n\t}\\nsnippet for enumerate names\\n\tfor (${1:var} in ${2:object}){\\n\t\t${3}\\n\t}\\nsnippet for enumerate values\\n\tfor each (${1:var} in ${2:object}){\\n\t\t${3}\\n\t}\\nsnippet get_set\\n\tfunction get ${1:name} {\\n\t\treturn ${2}\\n\t}\\n\tfunction set $1 (newValue) {\\n\t\t${3}\\n\t}\\nsnippet interface\\n\tinterface name {\\n\t\tfunction method(${1}):${2:returntype};\\n\t}\\nsnippet try\\n\ttry {\\n\t\t${1}\\n\t} catch (error:ErrorType) {\\n\t\t${2}\\n\t} finally {\\n\t\t${3}\\n\t}\\n# For Loop (same as c.snippet)\\nsnippet for for (..) {..}\\n\tfor (${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\t\t${4:/* code */}\\n\t}\\n# Custom For Loop\\nsnippet forr\\n\tfor (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {\\n\t\t${5:/* code */}\\n\t}\\n# If Condition\\nsnippet if\\n\tif (${1:/* condition */}) {\\n\t\t${2:/* code */}\\n\t}\\nsnippet el\\n\telse {\\n\t\t${1}\\n\t}\\n# Ternary conditional\\nsnippet t\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\nsnippet fun\\n\tfunction ${1:function_name}(${2})${3}\\n\t{\\n\t\t${4:/* code */}\\n\t}\\n# FlxSprite (usefull when using the flixel library)\\nsnippet FlxSprite\\n\tpackage\\n\t{\\n\t\timport org.flixel.*\\n\\n\t\tpublic class ${1:ClassName} extends ${2:FlxSprite}\\n\t\t{\\n\t\t\tpublic function $1(${3: X:Number, Y:Number}):void\\n\t\t\t{\\n\t\t\t\tsuper(X,Y);\\n\t\t\t\t${4: //code...}\\n\t\t\t}\\n\\n\t\t\toverride public function update():void\\n\t\t\t{\\n\t\t\t\tsuper.update();\\n\t\t\t\t${5: //code...}\\n\t\t\t}\\n\t\t}\\n\t}\\n\\n',t.scope=\"actionscript\"});                (function() {\n                    ace.require([\"ace/snippets/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/ada.js",
    "content": "ace.define(\"ace/snippets/ada\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ada\"});                (function() {\n                    ace.require([\"ace/snippets/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/apache_conf.js",
    "content": "ace.define(\"ace/snippets/apache_conf\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"apache_conf\"});                (function() {\n                    ace.require([\"ace/snippets/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/apex.js",
    "content": "ace.define(\"ace/snippets/apex\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"apex\"});                (function() {\n                    ace.require([\"ace/snippets/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/applescript.js",
    "content": "ace.define(\"ace/snippets/applescript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"applescript\"});                (function() {\n                    ace.require([\"ace/snippets/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/asciidoc.js",
    "content": "ace.define(\"ace/snippets/asciidoc\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"asciidoc\"});                (function() {\n                    ace.require([\"ace/snippets/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/asl.js",
    "content": "ace.define(\"ace/snippets/asl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"asl\"});                (function() {\n                    ace.require([\"ace/snippets/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/assembly_x86.js",
    "content": "ace.define(\"ace/snippets/assembly_x86\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"assembly_x86\"});                (function() {\n                    ace.require([\"ace/snippets/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/autohotkey.js",
    "content": "ace.define(\"ace/snippets/autohotkey\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"autohotkey\"});                (function() {\n                    ace.require([\"ace/snippets/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/batchfile.js",
    "content": "ace.define(\"ace/snippets/batchfile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"batchfile\"});                (function() {\n                    ace.require([\"ace/snippets/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/bro.js",
    "content": "ace.define(\"ace/snippets/bro\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/bro\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/c9search.js",
    "content": "ace.define(\"ace/snippets/c9search\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"c9search\"});                (function() {\n                    ace.require([\"ace/snippets/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/c_cpp.js",
    "content": "ace.define(\"ace/snippets/c_cpp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"## STL Collections\\n# std::array\\nsnippet array\\n\tstd::array<${1:T}, ${2:N}> ${3};${4}\\n# std::vector\\nsnippet vector\\n\tstd::vector<${1:T}> ${2};${3}\\n# std::deque\\nsnippet deque\\n\tstd::deque<${1:T}> ${2};${3}\\n# std::forward_list\\nsnippet flist\\n\tstd::forward_list<${1:T}> ${2};${3}\\n# std::list\\nsnippet list\\n\tstd::list<${1:T}> ${2};${3}\\n# std::set\\nsnippet set\\n\tstd::set<${1:T}> ${2};${3}\\n# std::map\\nsnippet map\\n\tstd::map<${1:Key}, ${2:T}> ${3};${4}\\n# std::multiset\\nsnippet mset\\n\tstd::multiset<${1:T}> ${2};${3}\\n# std::multimap\\nsnippet mmap\\n\tstd::multimap<${1:Key}, ${2:T}> ${3};${4}\\n# std::unordered_set\\nsnippet uset\\n\tstd::unordered_set<${1:T}> ${2};${3}\\n# std::unordered_map\\nsnippet umap\\n\tstd::unordered_map<${1:Key}, ${2:T}> ${3};${4}\\n# std::unordered_multiset\\nsnippet umset\\n\tstd::unordered_multiset<${1:T}> ${2};${3}\\n# std::unordered_multimap\\nsnippet ummap\\n\tstd::unordered_multimap<${1:Key}, ${2:T}> ${3};${4}\\n# std::stack\\nsnippet stack\\n\tstd::stack<${1:T}> ${2};${3}\\n# std::queue\\nsnippet queue\\n\tstd::queue<${1:T}> ${2};${3}\\n# std::priority_queue\\nsnippet pqueue\\n\tstd::priority_queue<${1:T}> ${2};${3}\\n##\\n## Access Modifiers\\n# private\\nsnippet pri\\n\tprivate\\n# protected\\nsnippet pro\\n\tprotected\\n# public\\nsnippet pub\\n\tpublic\\n# friend\\nsnippet fr\\n\tfriend\\n# mutable\\nsnippet mu\\n\tmutable\\n## \\n## Class\\n# class\\nsnippet cl\\n\tclass ${1:`Filename('$1', 'name')`} \\n\t{\\n\tpublic:\\n\t\t$1(${2});\\n\t\t~$1();\\n\\n\tprivate:\\n\t\t${3:/* data */}\\n\t};\\n# member function implementation\\nsnippet mfun\\n\t${4:void} ${1:`Filename('$1', 'ClassName')`}::${2:memberFunction}(${3}) {\\n\t\t${5:/* code */}\\n\t}\\n# namespace\\nsnippet ns\\n\tnamespace ${1:`Filename('', 'my')`} {\\n\t\t${2}\\n\t} /* namespace $1 */\\n##\\n## Input/Output\\n# std::cout\\nsnippet cout\\n\tstd::cout << ${1} << std::endl;${2}\\n# std::cin\\nsnippet cin\\n\tstd::cin >> ${1};${2}\\n##\\n## Iteration\\n# for i \\nsnippet fori\\n\tfor (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\t\t${4:/* code */}\\n\t}${5}\\n\\n# foreach\\nsnippet fore\\n\tfor (${1:auto} ${2:i} : ${3:container}) {\\n\t\t${4:/* code */}\\n\t}${5}\\n# iterator\\nsnippet iter\\n\tfor (${1:std::vector}<${2:type}>::${3:const_iterator} ${4:i} = ${5:container}.begin(); $4 != $5.end(); ++$4) {\\n\t\t${6}\\n\t}${7}\\n\\n# auto iterator\\nsnippet itera\\n\tfor (auto ${1:i} = $1.begin(); $1 != $1.end(); ++$1) {\\n\t\t${2:std::cout << *$1 << std::endl;}\\n\t}${3}\\n##\\n## Lambdas\\n# lamda (one line)\\nsnippet ld\\n\t[${1}](${2}){${3:/* code */}}${4}\\n# lambda (multi-line)\\nsnippet lld\\n\t[${1}](${2}){\\n\t\t${3:/* code */}\\n\t}${4}\\n\",t.scope=\"c_cpp\"});                (function() {\n                    ace.require([\"ace/snippets/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/cirru.js",
    "content": "ace.define(\"ace/snippets/cirru\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"cirru\"});                (function() {\n                    ace.require([\"ace/snippets/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/clojure.js",
    "content": "ace.define(\"ace/snippets/clojure\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet comm\\n\t(comment\\n\t  ${1}\\n\t  )\\nsnippet condp\\n\t(condp ${1:pred} ${2:expr}\\n\t  ${3})\\nsnippet def\\n\t(def ${1})\\nsnippet defm\\n\t(defmethod ${1:multifn} \"${2:doc-string}\" ${3:dispatch-val} [${4:args}]\\n\t  ${5})\\nsnippet defmm\\n\t(defmulti ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\\nsnippet defma\\n\t(defmacro ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\\nsnippet defn\\n\t(defn ${1:name} \"${2:doc-string}\" [${3:arg-list}]\\n\t  ${4})\\nsnippet defp\\n\t(defprotocol ${1:name}\\n\t  ${2})\\nsnippet defr\\n\t(defrecord ${1:name} [${2:fields}]\\n\t  ${3:protocol}\\n\t  ${4})\\nsnippet deft\\n\t(deftest ${1:name}\\n\t    (is (= ${2:assertion})))\\n\t  ${3})\\nsnippet is\\n\t(is (= ${1} ${2}))\\nsnippet defty\\n\t(deftype ${1:Name} [${2:fields}]\\n\t  ${3:Protocol}\\n\t  ${4})\\nsnippet doseq\\n\t(doseq [${1:elem} ${2:coll}]\\n\t  ${3})\\nsnippet fn\\n\t(fn [${1:arg-list}] ${2})\\nsnippet if\\n\t(if ${1:test-expr}\\n\t  ${2:then-expr}\\n\t  ${3:else-expr})\\nsnippet if-let \\n\t(if-let [${1:result} ${2:test-expr}]\\n\t\t(${3:then-expr} $1)\\n\t\t(${4:else-expr}))\\nsnippet imp\\n\t(:import [${1:package}])\\n\t& {:keys [${1:keys}] :or {${2:defaults}}}\\nsnippet let\\n\t(let [${1:name} ${2:expr}]\\n\t\t${3})\\nsnippet letfn\\n\t(letfn [(${1:name) [${2:args}]\\n\t          ${3})])\\nsnippet map\\n\t(map ${1:func} ${2:coll})\\nsnippet mapl\\n\t(map #(${1:lambda}) ${2:coll})\\nsnippet met\\n\t(${1:name} [${2:this} ${3:args}]\\n\t  ${4})\\nsnippet ns\\n\t(ns ${1:name}\\n\t  ${2})\\nsnippet dotimes\\n\t(dotimes [_ 10]\\n\t  (time\\n\t    (dotimes [_ ${1:times}]\\n\t      ${2})))\\nsnippet pmethod\\n\t(${1:name} [${2:this} ${3:args}])\\nsnippet refer\\n\t(:refer-clojure :exclude [${1}])\\nsnippet require\\n\t(:require [${1:namespace} :as [${2}]])\\nsnippet use\\n\t(:use [${1:namespace} :only [${2}]])\\nsnippet print\\n\t(println ${1})\\nsnippet reduce\\n\t(reduce ${1:(fn [p n] ${3})} ${2})\\nsnippet when\\n\t(when ${1:test} ${2:body})\\nsnippet when-let\\n\t(when-let [${1:result} ${2:test}]\\n\t\t${3:body})\\n',t.scope=\"clojure\"});                (function() {\n                    ace.require([\"ace/snippets/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/cobol.js",
    "content": "ace.define(\"ace/snippets/cobol\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"cobol\"});                (function() {\n                    ace.require([\"ace/snippets/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/coffee.js",
    "content": "ace.define(\"ace/snippets/coffee\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Closure loop\\nsnippet forindo\\n\tfor ${1:name} in ${2:array}\\n\t\tdo ($1) ->\\n\t\t\t${3:// body}\\n# Array comprehension\\nsnippet fora\\n\tfor ${1:name} in ${2:array}\\n\t\t${3:// body...}\\n# Object comprehension\\nsnippet foro\\n\tfor ${1:key}, ${2:value} of ${3:object}\\n\t\t${4:// body...}\\n# Range comprehension (inclusive)\\nsnippet forr\\n\tfor ${1:name} in [${2:start}..${3:finish}]\\n\t\t${4:// body...}\\nsnippet forrb\\n\tfor ${1:name} in [${2:start}..${3:finish}] by ${4:step}\\n\t\t${5:// body...}\\n# Range comprehension (exclusive)\\nsnippet forrex\\n\tfor ${1:name} in [${2:start}...${3:finish}]\\n\t\t${4:// body...}\\nsnippet forrexb\\n\tfor ${1:name} in [${2:start}...${3:finish}] by ${4:step}\\n\t\t${5:// body...}\\n# Function\\nsnippet fun\\n\t(${1:args}) ->\\n\t\t${2:// body...}\\n# Function (bound)\\nsnippet bfun\\n\t(${1:args}) =>\\n\t\t${2:// body...}\\n# Class\\nsnippet cla class ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\t\t${2}\\nsnippet cla class .. constructor: ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\t\tconstructor: (${2:args}) ->\\n\t\t\t${3}\\n\\n\t\t${4}\\nsnippet cla class .. extends ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\t\t${3}\\nsnippet cla class .. extends .. constructor: ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\t\tconstructor: (${3:args}) ->\\n\t\t\t${4}\\n\\n\t\t${5}\\n# If\\nsnippet if\\n\tif ${1:condition}\\n\t\t${2:// body...}\\n# If __ Else\\nsnippet ife\\n\tif ${1:condition}\\n\t\t${2:// body...}\\n\telse\\n\t\t${3:// body...}\\n# Else if\\nsnippet elif\\n\telse if ${1:condition}\\n\t\t${2:// body...}\\n# Ternary If\\nsnippet ifte\\n\tif ${1:condition} then ${2:value} else ${3:other}\\n# Unless\\nsnippet unl\\n\t${1:action} unless ${2:condition}\\n# Switch\\nsnippet swi\\n\tswitch ${1:object}\\n\t\twhen ${2:value}\\n\t\t\t${3:// body...}\\n\\n# Log\\nsnippet log\\n\tconsole.log ${1}\\n# Try __ Catch\\nsnippet try\\n\ttry\\n\t\t${1}\\n\tcatch ${2:error}\\n\t\t${3}\\n# Require\\nsnippet req\\n\t${2:$1} = require '${1:sys}'${3}\\n# Export\\nsnippet exp\\n\t${1:root} = exports ? this\\n\",t.scope=\"coffee\"});                (function() {\n                    ace.require([\"ace/snippets/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/coldfusion.js",
    "content": "ace.define(\"ace/snippets/coldfusion\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"coldfusion\"});                (function() {\n                    ace.require([\"ace/snippets/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/csharp.js",
    "content": "ace.define(\"ace/snippets/csharp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"csharp\"});                (function() {\n                    ace.require([\"ace/snippets/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/csound_document.js",
    "content": "ace.define(\"ace/snippets/csound_document\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# <CsoundSynthesizer>\\nsnippet synth\\n\t<CsoundSynthesizer>\\n\t<CsInstruments>\\n\t${1}\\n\t</CsInstruments>\\n\t<CsScore>\\n\te\\n\t</CsScore>\\n\t</CsoundSynthesizer>\\n\",t.scope=\"csound_document\"});                (function() {\n                    ace.require([\"ace/snippets/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/csound_orchestra.js",
    "content": "ace.define(\"ace/snippets/csound_orchestra\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# else\\nsnippet else\\n\telse\\n\t\t${1:/* statements */}\\n# elseif\\nsnippet elseif\\n\telseif ${1:/* condition */} then\\n\t\t${2:/* statements */}\\n# if\\nsnippet if\\n\tif ${1:/* condition */} then\\n\t\t${2:/* statements */}\\n\tendif\\n# instrument block\\nsnippet instr\\n\tinstr ${1:name}\\n\t\t${2:/* statements */}\\n\tendin\\n# i-time while loop\\nsnippet iwhile\\n\ti${1:Index} = ${2:0}\\n\twhile i${1:Index} < ${3:/* count */} do\\n\t\t${4:/* statements */}\\n\t\ti${1:Index} += 1\\n\tod\\n# k-rate while loop\\nsnippet kwhile\\n\tk${1:Index} = ${2:0}\\n\twhile k${1:Index} < ${3:/* count */} do\\n\t\t${4:/* statements */}\\n\t\tk${1:Index} += 1\\n\tod\\n# opcode\\nsnippet opcode\\n\topcode ${1:name}, ${2:/* output types */ 0}, ${3:/* input types */ 0}\\n\t\t${4:/* statements */}\\n\tendop\\n# until loop\\nsnippet until\\n\tuntil ${1:/* condition */} do\\n\t\t${2:/* statements */}\\n\tod\\n# while loop\\nsnippet while\\n\twhile ${1:/* condition */} do\\n\t\t${2:/* statements */}\\n\tod\\n\",t.scope=\"csound_orchestra\"});                (function() {\n                    ace.require([\"ace/snippets/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/csound_score.js",
    "content": "ace.define(\"ace/snippets/csound_score\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"csound_score\"});                (function() {\n                    ace.require([\"ace/snippets/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/csp.js",
    "content": "ace.define(\"ace/snippets/csp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/css.js",
    "content": "ace.define(\"ace/snippets/css\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet .\\n\t${1} {\\n\t\t${2}\\n\t}\\nsnippet !\\n\t !important\\nsnippet bdi:m+\\n\t-moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:m\\n\t-moz-border-image: ${1};\\nsnippet bdrz:m\\n\t-moz-border-radius: ${1};\\nsnippet bxsh:m+\\n\t-moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh:m\\n\t-moz-box-shadow: ${1};\\nsnippet bdi:w+\\n\t-webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:w\\n\t-webkit-border-image: ${1};\\nsnippet bdrz:w\\n\t-webkit-border-radius: ${1};\\nsnippet bxsh:w+\\n\t-webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh:w\\n\t-webkit-box-shadow: ${1};\\nsnippet @f\\n\t@font-face {\\n\t\tfont-family: ${1};\\n\t\tsrc: url(${2});\\n\t}\\nsnippet @i\\n\t@import url(${1});\\nsnippet @m\\n\t@media ${1:print} {\\n\t\t${2}\\n\t}\\nsnippet bg+\\n\tbackground: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\\nsnippet bga\\n\tbackground-attachment: ${1};\\nsnippet bga:f\\n\tbackground-attachment: fixed;\\nsnippet bga:s\\n\tbackground-attachment: scroll;\\nsnippet bgbk\\n\tbackground-break: ${1};\\nsnippet bgbk:bb\\n\tbackground-break: bounding-box;\\nsnippet bgbk:c\\n\tbackground-break: continuous;\\nsnippet bgbk:eb\\n\tbackground-break: each-box;\\nsnippet bgcp\\n\tbackground-clip: ${1};\\nsnippet bgcp:bb\\n\tbackground-clip: border-box;\\nsnippet bgcp:cb\\n\tbackground-clip: content-box;\\nsnippet bgcp:nc\\n\tbackground-clip: no-clip;\\nsnippet bgcp:pb\\n\tbackground-clip: padding-box;\\nsnippet bgc\\n\tbackground-color: #${1:FFF};\\nsnippet bgc:t\\n\tbackground-color: transparent;\\nsnippet bgi\\n\tbackground-image: url(${1});\\nsnippet bgi:n\\n\tbackground-image: none;\\nsnippet bgo\\n\tbackground-origin: ${1};\\nsnippet bgo:bb\\n\tbackground-origin: border-box;\\nsnippet bgo:cb\\n\tbackground-origin: content-box;\\nsnippet bgo:pb\\n\tbackground-origin: padding-box;\\nsnippet bgpx\\n\tbackground-position-x: ${1};\\nsnippet bgpy\\n\tbackground-position-y: ${1};\\nsnippet bgp\\n\tbackground-position: ${1:0} ${2:0};\\nsnippet bgr\\n\tbackground-repeat: ${1};\\nsnippet bgr:n\\n\tbackground-repeat: no-repeat;\\nsnippet bgr:x\\n\tbackground-repeat: repeat-x;\\nsnippet bgr:y\\n\tbackground-repeat: repeat-y;\\nsnippet bgr:r\\n\tbackground-repeat: repeat;\\nsnippet bgz\\n\tbackground-size: ${1};\\nsnippet bgz:a\\n\tbackground-size: auto;\\nsnippet bgz:ct\\n\tbackground-size: contain;\\nsnippet bgz:cv\\n\tbackground-size: cover;\\nsnippet bg\\n\tbackground: ${1};\\nsnippet bg:ie\\n\tfilter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\\nsnippet bg:n\\n\tbackground: none;\\nsnippet bd+\\n\tborder: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdb+\\n\tborder-bottom: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdbc\\n\tborder-bottom-color: #${1:000};\\nsnippet bdbi\\n\tborder-bottom-image: url(${1});\\nsnippet bdbi:n\\n\tborder-bottom-image: none;\\nsnippet bdbli\\n\tborder-bottom-left-image: url(${1});\\nsnippet bdbli:c\\n\tborder-bottom-left-image: continue;\\nsnippet bdbli:n\\n\tborder-bottom-left-image: none;\\nsnippet bdblrz\\n\tborder-bottom-left-radius: ${1};\\nsnippet bdbri\\n\tborder-bottom-right-image: url(${1});\\nsnippet bdbri:c\\n\tborder-bottom-right-image: continue;\\nsnippet bdbri:n\\n\tborder-bottom-right-image: none;\\nsnippet bdbrrz\\n\tborder-bottom-right-radius: ${1};\\nsnippet bdbs\\n\tborder-bottom-style: ${1};\\nsnippet bdbs:n\\n\tborder-bottom-style: none;\\nsnippet bdbw\\n\tborder-bottom-width: ${1};\\nsnippet bdb\\n\tborder-bottom: ${1};\\nsnippet bdb:n\\n\tborder-bottom: none;\\nsnippet bdbk\\n\tborder-break: ${1};\\nsnippet bdbk:c\\n\tborder-break: close;\\nsnippet bdcl\\n\tborder-collapse: ${1};\\nsnippet bdcl:c\\n\tborder-collapse: collapse;\\nsnippet bdcl:s\\n\tborder-collapse: separate;\\nsnippet bdc\\n\tborder-color: #${1:000};\\nsnippet bdci\\n\tborder-corner-image: url(${1});\\nsnippet bdci:c\\n\tborder-corner-image: continue;\\nsnippet bdci:n\\n\tborder-corner-image: none;\\nsnippet bdf\\n\tborder-fit: ${1};\\nsnippet bdf:c\\n\tborder-fit: clip;\\nsnippet bdf:of\\n\tborder-fit: overwrite;\\nsnippet bdf:ow\\n\tborder-fit: overwrite;\\nsnippet bdf:r\\n\tborder-fit: repeat;\\nsnippet bdf:sc\\n\tborder-fit: scale;\\nsnippet bdf:sp\\n\tborder-fit: space;\\nsnippet bdf:st\\n\tborder-fit: stretch;\\nsnippet bdi\\n\tborder-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:n\\n\tborder-image: none;\\nsnippet bdl+\\n\tborder-left: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdlc\\n\tborder-left-color: #${1:000};\\nsnippet bdli\\n\tborder-left-image: url(${1});\\nsnippet bdli:n\\n\tborder-left-image: none;\\nsnippet bdls\\n\tborder-left-style: ${1};\\nsnippet bdls:n\\n\tborder-left-style: none;\\nsnippet bdlw\\n\tborder-left-width: ${1};\\nsnippet bdl\\n\tborder-left: ${1};\\nsnippet bdl:n\\n\tborder-left: none;\\nsnippet bdlt\\n\tborder-length: ${1};\\nsnippet bdlt:a\\n\tborder-length: auto;\\nsnippet bdrz\\n\tborder-radius: ${1};\\nsnippet bdr+\\n\tborder-right: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdrc\\n\tborder-right-color: #${1:000};\\nsnippet bdri\\n\tborder-right-image: url(${1});\\nsnippet bdri:n\\n\tborder-right-image: none;\\nsnippet bdrs\\n\tborder-right-style: ${1};\\nsnippet bdrs:n\\n\tborder-right-style: none;\\nsnippet bdrw\\n\tborder-right-width: ${1};\\nsnippet bdr\\n\tborder-right: ${1};\\nsnippet bdr:n\\n\tborder-right: none;\\nsnippet bdsp\\n\tborder-spacing: ${1};\\nsnippet bds\\n\tborder-style: ${1};\\nsnippet bds:ds\\n\tborder-style: dashed;\\nsnippet bds:dtds\\n\tborder-style: dot-dash;\\nsnippet bds:dtdtds\\n\tborder-style: dot-dot-dash;\\nsnippet bds:dt\\n\tborder-style: dotted;\\nsnippet bds:db\\n\tborder-style: double;\\nsnippet bds:g\\n\tborder-style: groove;\\nsnippet bds:h\\n\tborder-style: hidden;\\nsnippet bds:i\\n\tborder-style: inset;\\nsnippet bds:n\\n\tborder-style: none;\\nsnippet bds:o\\n\tborder-style: outset;\\nsnippet bds:r\\n\tborder-style: ridge;\\nsnippet bds:s\\n\tborder-style: solid;\\nsnippet bds:w\\n\tborder-style: wave;\\nsnippet bdt+\\n\tborder-top: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdtc\\n\tborder-top-color: #${1:000};\\nsnippet bdti\\n\tborder-top-image: url(${1});\\nsnippet bdti:n\\n\tborder-top-image: none;\\nsnippet bdtli\\n\tborder-top-left-image: url(${1});\\nsnippet bdtli:c\\n\tborder-corner-image: continue;\\nsnippet bdtli:n\\n\tborder-corner-image: none;\\nsnippet bdtlrz\\n\tborder-top-left-radius: ${1};\\nsnippet bdtri\\n\tborder-top-right-image: url(${1});\\nsnippet bdtri:c\\n\tborder-top-right-image: continue;\\nsnippet bdtri:n\\n\tborder-top-right-image: none;\\nsnippet bdtrrz\\n\tborder-top-right-radius: ${1};\\nsnippet bdts\\n\tborder-top-style: ${1};\\nsnippet bdts:n\\n\tborder-top-style: none;\\nsnippet bdtw\\n\tborder-top-width: ${1};\\nsnippet bdt\\n\tborder-top: ${1};\\nsnippet bdt:n\\n\tborder-top: none;\\nsnippet bdw\\n\tborder-width: ${1};\\nsnippet bd\\n\tborder: ${1};\\nsnippet bd:n\\n\tborder: none;\\nsnippet b\\n\tbottom: ${1};\\nsnippet b:a\\n\tbottom: auto;\\nsnippet bxsh+\\n\tbox-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh\\n\tbox-shadow: ${1};\\nsnippet bxsh:n\\n\tbox-shadow: none;\\nsnippet bxz\\n\tbox-sizing: ${1};\\nsnippet bxz:bb\\n\tbox-sizing: border-box;\\nsnippet bxz:cb\\n\tbox-sizing: content-box;\\nsnippet cps\\n\tcaption-side: ${1};\\nsnippet cps:b\\n\tcaption-side: bottom;\\nsnippet cps:t\\n\tcaption-side: top;\\nsnippet cl\\n\tclear: ${1};\\nsnippet cl:b\\n\tclear: both;\\nsnippet cl:l\\n\tclear: left;\\nsnippet cl:n\\n\tclear: none;\\nsnippet cl:r\\n\tclear: right;\\nsnippet cp\\n\tclip: ${1};\\nsnippet cp:a\\n\tclip: auto;\\nsnippet cp:r\\n\tclip: rect(${1:0} ${2:0} ${3:0} ${4:0});\\nsnippet c\\n\tcolor: #${1:000};\\nsnippet ct\\n\tcontent: ${1};\\nsnippet ct:a\\n\tcontent: attr(${1});\\nsnippet ct:cq\\n\tcontent: close-quote;\\nsnippet ct:c\\n\tcontent: counter(${1});\\nsnippet ct:cs\\n\tcontent: counters(${1});\\nsnippet ct:ncq\\n\tcontent: no-close-quote;\\nsnippet ct:noq\\n\tcontent: no-open-quote;\\nsnippet ct:n\\n\tcontent: normal;\\nsnippet ct:oq\\n\tcontent: open-quote;\\nsnippet coi\\n\tcounter-increment: ${1};\\nsnippet cor\\n\tcounter-reset: ${1};\\nsnippet cur\\n\tcursor: ${1};\\nsnippet cur:a\\n\tcursor: auto;\\nsnippet cur:c\\n\tcursor: crosshair;\\nsnippet cur:d\\n\tcursor: default;\\nsnippet cur:ha\\n\tcursor: hand;\\nsnippet cur:he\\n\tcursor: help;\\nsnippet cur:m\\n\tcursor: move;\\nsnippet cur:p\\n\tcursor: pointer;\\nsnippet cur:t\\n\tcursor: text;\\nsnippet d\\n\tdisplay: ${1};\\nsnippet d:mib\\n\tdisplay: -moz-inline-box;\\nsnippet d:mis\\n\tdisplay: -moz-inline-stack;\\nsnippet d:b\\n\tdisplay: block;\\nsnippet d:cp\\n\tdisplay: compact;\\nsnippet d:ib\\n\tdisplay: inline-block;\\nsnippet d:itb\\n\tdisplay: inline-table;\\nsnippet d:i\\n\tdisplay: inline;\\nsnippet d:li\\n\tdisplay: list-item;\\nsnippet d:n\\n\tdisplay: none;\\nsnippet d:ri\\n\tdisplay: run-in;\\nsnippet d:tbcp\\n\tdisplay: table-caption;\\nsnippet d:tbc\\n\tdisplay: table-cell;\\nsnippet d:tbclg\\n\tdisplay: table-column-group;\\nsnippet d:tbcl\\n\tdisplay: table-column;\\nsnippet d:tbfg\\n\tdisplay: table-footer-group;\\nsnippet d:tbhg\\n\tdisplay: table-header-group;\\nsnippet d:tbrg\\n\tdisplay: table-row-group;\\nsnippet d:tbr\\n\tdisplay: table-row;\\nsnippet d:tb\\n\tdisplay: table;\\nsnippet ec\\n\tempty-cells: ${1};\\nsnippet ec:h\\n\tempty-cells: hide;\\nsnippet ec:s\\n\tempty-cells: show;\\nsnippet exp\\n\texpression()\\nsnippet fl\\n\tfloat: ${1};\\nsnippet fl:l\\n\tfloat: left;\\nsnippet fl:n\\n\tfloat: none;\\nsnippet fl:r\\n\tfloat: right;\\nsnippet f+\\n\tfont: ${1:1em} ${2:Arial},${3:sans-serif};\\nsnippet fef\\n\tfont-effect: ${1};\\nsnippet fef:eb\\n\tfont-effect: emboss;\\nsnippet fef:eg\\n\tfont-effect: engrave;\\nsnippet fef:n\\n\tfont-effect: none;\\nsnippet fef:o\\n\tfont-effect: outline;\\nsnippet femp\\n\tfont-emphasize-position: ${1};\\nsnippet femp:a\\n\tfont-emphasize-position: after;\\nsnippet femp:b\\n\tfont-emphasize-position: before;\\nsnippet fems\\n\tfont-emphasize-style: ${1};\\nsnippet fems:ac\\n\tfont-emphasize-style: accent;\\nsnippet fems:c\\n\tfont-emphasize-style: circle;\\nsnippet fems:ds\\n\tfont-emphasize-style: disc;\\nsnippet fems:dt\\n\tfont-emphasize-style: dot;\\nsnippet fems:n\\n\tfont-emphasize-style: none;\\nsnippet fem\\n\tfont-emphasize: ${1};\\nsnippet ff\\n\tfont-family: ${1};\\nsnippet ff:c\\n\tfont-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\\nsnippet ff:f\\n\tfont-family: ${1:Capitals,Impact},fantasy;\\nsnippet ff:m\\n\tfont-family: ${1:Monaco,'Courier New'},monospace;\\nsnippet ff:ss\\n\tfont-family: ${1:Helvetica,Arial},sans-serif;\\nsnippet ff:s\\n\tfont-family: ${1:Georgia,'Times New Roman'},serif;\\nsnippet fza\\n\tfont-size-adjust: ${1};\\nsnippet fza:n\\n\tfont-size-adjust: none;\\nsnippet fz\\n\tfont-size: ${1};\\nsnippet fsm\\n\tfont-smooth: ${1};\\nsnippet fsm:aw\\n\tfont-smooth: always;\\nsnippet fsm:a\\n\tfont-smooth: auto;\\nsnippet fsm:n\\n\tfont-smooth: never;\\nsnippet fst\\n\tfont-stretch: ${1};\\nsnippet fst:c\\n\tfont-stretch: condensed;\\nsnippet fst:e\\n\tfont-stretch: expanded;\\nsnippet fst:ec\\n\tfont-stretch: extra-condensed;\\nsnippet fst:ee\\n\tfont-stretch: extra-expanded;\\nsnippet fst:n\\n\tfont-stretch: normal;\\nsnippet fst:sc\\n\tfont-stretch: semi-condensed;\\nsnippet fst:se\\n\tfont-stretch: semi-expanded;\\nsnippet fst:uc\\n\tfont-stretch: ultra-condensed;\\nsnippet fst:ue\\n\tfont-stretch: ultra-expanded;\\nsnippet fs\\n\tfont-style: ${1};\\nsnippet fs:i\\n\tfont-style: italic;\\nsnippet fs:n\\n\tfont-style: normal;\\nsnippet fs:o\\n\tfont-style: oblique;\\nsnippet fv\\n\tfont-variant: ${1};\\nsnippet fv:n\\n\tfont-variant: normal;\\nsnippet fv:sc\\n\tfont-variant: small-caps;\\nsnippet fw\\n\tfont-weight: ${1};\\nsnippet fw:b\\n\tfont-weight: bold;\\nsnippet fw:br\\n\tfont-weight: bolder;\\nsnippet fw:lr\\n\tfont-weight: lighter;\\nsnippet fw:n\\n\tfont-weight: normal;\\nsnippet f\\n\tfont: ${1};\\nsnippet h\\n\theight: ${1};\\nsnippet h:a\\n\theight: auto;\\nsnippet l\\n\tleft: ${1};\\nsnippet l:a\\n\tleft: auto;\\nsnippet lts\\n\tletter-spacing: ${1};\\nsnippet lh\\n\tline-height: ${1};\\nsnippet lisi\\n\tlist-style-image: url(${1});\\nsnippet lisi:n\\n\tlist-style-image: none;\\nsnippet lisp\\n\tlist-style-position: ${1};\\nsnippet lisp:i\\n\tlist-style-position: inside;\\nsnippet lisp:o\\n\tlist-style-position: outside;\\nsnippet list\\n\tlist-style-type: ${1};\\nsnippet list:c\\n\tlist-style-type: circle;\\nsnippet list:dclz\\n\tlist-style-type: decimal-leading-zero;\\nsnippet list:dc\\n\tlist-style-type: decimal;\\nsnippet list:d\\n\tlist-style-type: disc;\\nsnippet list:lr\\n\tlist-style-type: lower-roman;\\nsnippet list:n\\n\tlist-style-type: none;\\nsnippet list:s\\n\tlist-style-type: square;\\nsnippet list:ur\\n\tlist-style-type: upper-roman;\\nsnippet lis\\n\tlist-style: ${1};\\nsnippet lis:n\\n\tlist-style: none;\\nsnippet mb\\n\tmargin-bottom: ${1};\\nsnippet mb:a\\n\tmargin-bottom: auto;\\nsnippet ml\\n\tmargin-left: ${1};\\nsnippet ml:a\\n\tmargin-left: auto;\\nsnippet mr\\n\tmargin-right: ${1};\\nsnippet mr:a\\n\tmargin-right: auto;\\nsnippet mt\\n\tmargin-top: ${1};\\nsnippet mt:a\\n\tmargin-top: auto;\\nsnippet m\\n\tmargin: ${1};\\nsnippet m:4\\n\tmargin: ${1:0} ${2:0} ${3:0} ${4:0};\\nsnippet m:3\\n\tmargin: ${1:0} ${2:0} ${3:0};\\nsnippet m:2\\n\tmargin: ${1:0} ${2:0};\\nsnippet m:0\\n\tmargin: 0;\\nsnippet m:a\\n\tmargin: auto;\\nsnippet mah\\n\tmax-height: ${1};\\nsnippet mah:n\\n\tmax-height: none;\\nsnippet maw\\n\tmax-width: ${1};\\nsnippet maw:n\\n\tmax-width: none;\\nsnippet mih\\n\tmin-height: ${1};\\nsnippet miw\\n\tmin-width: ${1};\\nsnippet op\\n\topacity: ${1};\\nsnippet op:ie\\n\tfilter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\\nsnippet op:ms\\n\t-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\\nsnippet orp\\n\torphans: ${1};\\nsnippet o+\\n\toutline: ${1:1px} ${2:solid} #${3:000};\\nsnippet oc\\n\toutline-color: ${1:#000};\\nsnippet oc:i\\n\toutline-color: invert;\\nsnippet oo\\n\toutline-offset: ${1};\\nsnippet os\\n\toutline-style: ${1};\\nsnippet ow\\n\toutline-width: ${1};\\nsnippet o\\n\toutline: ${1};\\nsnippet o:n\\n\toutline: none;\\nsnippet ovs\\n\toverflow-style: ${1};\\nsnippet ovs:a\\n\toverflow-style: auto;\\nsnippet ovs:mq\\n\toverflow-style: marquee;\\nsnippet ovs:mv\\n\toverflow-style: move;\\nsnippet ovs:p\\n\toverflow-style: panner;\\nsnippet ovs:s\\n\toverflow-style: scrollbar;\\nsnippet ovx\\n\toverflow-x: ${1};\\nsnippet ovx:a\\n\toverflow-x: auto;\\nsnippet ovx:h\\n\toverflow-x: hidden;\\nsnippet ovx:s\\n\toverflow-x: scroll;\\nsnippet ovx:v\\n\toverflow-x: visible;\\nsnippet ovy\\n\toverflow-y: ${1};\\nsnippet ovy:a\\n\toverflow-y: auto;\\nsnippet ovy:h\\n\toverflow-y: hidden;\\nsnippet ovy:s\\n\toverflow-y: scroll;\\nsnippet ovy:v\\n\toverflow-y: visible;\\nsnippet ov\\n\toverflow: ${1};\\nsnippet ov:a\\n\toverflow: auto;\\nsnippet ov:h\\n\toverflow: hidden;\\nsnippet ov:s\\n\toverflow: scroll;\\nsnippet ov:v\\n\toverflow: visible;\\nsnippet pb\\n\tpadding-bottom: ${1};\\nsnippet pl\\n\tpadding-left: ${1};\\nsnippet pr\\n\tpadding-right: ${1};\\nsnippet pt\\n\tpadding-top: ${1};\\nsnippet p\\n\tpadding: ${1};\\nsnippet p:4\\n\tpadding: ${1:0} ${2:0} ${3:0} ${4:0};\\nsnippet p:3\\n\tpadding: ${1:0} ${2:0} ${3:0};\\nsnippet p:2\\n\tpadding: ${1:0} ${2:0};\\nsnippet p:0\\n\tpadding: 0;\\nsnippet pgba\\n\tpage-break-after: ${1};\\nsnippet pgba:aw\\n\tpage-break-after: always;\\nsnippet pgba:a\\n\tpage-break-after: auto;\\nsnippet pgba:l\\n\tpage-break-after: left;\\nsnippet pgba:r\\n\tpage-break-after: right;\\nsnippet pgbb\\n\tpage-break-before: ${1};\\nsnippet pgbb:aw\\n\tpage-break-before: always;\\nsnippet pgbb:a\\n\tpage-break-before: auto;\\nsnippet pgbb:l\\n\tpage-break-before: left;\\nsnippet pgbb:r\\n\tpage-break-before: right;\\nsnippet pgbi\\n\tpage-break-inside: ${1};\\nsnippet pgbi:a\\n\tpage-break-inside: auto;\\nsnippet pgbi:av\\n\tpage-break-inside: avoid;\\nsnippet pos\\n\tposition: ${1};\\nsnippet pos:a\\n\tposition: absolute;\\nsnippet pos:f\\n\tposition: fixed;\\nsnippet pos:r\\n\tposition: relative;\\nsnippet pos:s\\n\tposition: static;\\nsnippet q\\n\tquotes: ${1};\\nsnippet q:en\\n\tquotes: '\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019';\\nsnippet q:n\\n\tquotes: none;\\nsnippet q:ru\\n\tquotes: '\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C';\\nsnippet rz\\n\tresize: ${1};\\nsnippet rz:b\\n\tresize: both;\\nsnippet rz:h\\n\tresize: horizontal;\\nsnippet rz:n\\n\tresize: none;\\nsnippet rz:v\\n\tresize: vertical;\\nsnippet r\\n\tright: ${1};\\nsnippet r:a\\n\tright: auto;\\nsnippet tbl\\n\ttable-layout: ${1};\\nsnippet tbl:a\\n\ttable-layout: auto;\\nsnippet tbl:f\\n\ttable-layout: fixed;\\nsnippet tal\\n\ttext-align-last: ${1};\\nsnippet tal:a\\n\ttext-align-last: auto;\\nsnippet tal:c\\n\ttext-align-last: center;\\nsnippet tal:l\\n\ttext-align-last: left;\\nsnippet tal:r\\n\ttext-align-last: right;\\nsnippet ta\\n\ttext-align: ${1};\\nsnippet ta:c\\n\ttext-align: center;\\nsnippet ta:l\\n\ttext-align: left;\\nsnippet ta:r\\n\ttext-align: right;\\nsnippet td\\n\ttext-decoration: ${1};\\nsnippet td:l\\n\ttext-decoration: line-through;\\nsnippet td:n\\n\ttext-decoration: none;\\nsnippet td:o\\n\ttext-decoration: overline;\\nsnippet td:u\\n\ttext-decoration: underline;\\nsnippet te\\n\ttext-emphasis: ${1};\\nsnippet te:ac\\n\ttext-emphasis: accent;\\nsnippet te:a\\n\ttext-emphasis: after;\\nsnippet te:b\\n\ttext-emphasis: before;\\nsnippet te:c\\n\ttext-emphasis: circle;\\nsnippet te:ds\\n\ttext-emphasis: disc;\\nsnippet te:dt\\n\ttext-emphasis: dot;\\nsnippet te:n\\n\ttext-emphasis: none;\\nsnippet th\\n\ttext-height: ${1};\\nsnippet th:a\\n\ttext-height: auto;\\nsnippet th:f\\n\ttext-height: font-size;\\nsnippet th:m\\n\ttext-height: max-size;\\nsnippet th:t\\n\ttext-height: text-size;\\nsnippet ti\\n\ttext-indent: ${1};\\nsnippet ti:-\\n\ttext-indent: -9999px;\\nsnippet tj\\n\ttext-justify: ${1};\\nsnippet tj:a\\n\ttext-justify: auto;\\nsnippet tj:d\\n\ttext-justify: distribute;\\nsnippet tj:ic\\n\ttext-justify: inter-cluster;\\nsnippet tj:ii\\n\ttext-justify: inter-ideograph;\\nsnippet tj:iw\\n\ttext-justify: inter-word;\\nsnippet tj:k\\n\ttext-justify: kashida;\\nsnippet tj:t\\n\ttext-justify: tibetan;\\nsnippet to+\\n\ttext-outline: ${1:0} ${2:0} #${3:000};\\nsnippet to\\n\ttext-outline: ${1};\\nsnippet to:n\\n\ttext-outline: none;\\nsnippet tr\\n\ttext-replace: ${1};\\nsnippet tr:n\\n\ttext-replace: none;\\nsnippet tsh+\\n\ttext-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet tsh\\n\ttext-shadow: ${1};\\nsnippet tsh:n\\n\ttext-shadow: none;\\nsnippet tt\\n\ttext-transform: ${1};\\nsnippet tt:c\\n\ttext-transform: capitalize;\\nsnippet tt:l\\n\ttext-transform: lowercase;\\nsnippet tt:n\\n\ttext-transform: none;\\nsnippet tt:u\\n\ttext-transform: uppercase;\\nsnippet tw\\n\ttext-wrap: ${1};\\nsnippet tw:no\\n\ttext-wrap: none;\\nsnippet tw:n\\n\ttext-wrap: normal;\\nsnippet tw:s\\n\ttext-wrap: suppress;\\nsnippet tw:u\\n\ttext-wrap: unrestricted;\\nsnippet t\\n\ttop: ${1};\\nsnippet t:a\\n\ttop: auto;\\nsnippet va\\n\tvertical-align: ${1};\\nsnippet va:bl\\n\tvertical-align: baseline;\\nsnippet va:b\\n\tvertical-align: bottom;\\nsnippet va:m\\n\tvertical-align: middle;\\nsnippet va:sub\\n\tvertical-align: sub;\\nsnippet va:sup\\n\tvertical-align: super;\\nsnippet va:tb\\n\tvertical-align: text-bottom;\\nsnippet va:tt\\n\tvertical-align: text-top;\\nsnippet va:t\\n\tvertical-align: top;\\nsnippet v\\n\tvisibility: ${1};\\nsnippet v:c\\n\tvisibility: collapse;\\nsnippet v:h\\n\tvisibility: hidden;\\nsnippet v:v\\n\tvisibility: visible;\\nsnippet whsc\\n\twhite-space-collapse: ${1};\\nsnippet whsc:ba\\n\twhite-space-collapse: break-all;\\nsnippet whsc:bs\\n\twhite-space-collapse: break-strict;\\nsnippet whsc:k\\n\twhite-space-collapse: keep-all;\\nsnippet whsc:l\\n\twhite-space-collapse: loose;\\nsnippet whsc:n\\n\twhite-space-collapse: normal;\\nsnippet whs\\n\twhite-space: ${1};\\nsnippet whs:n\\n\twhite-space: normal;\\nsnippet whs:nw\\n\twhite-space: nowrap;\\nsnippet whs:pl\\n\twhite-space: pre-line;\\nsnippet whs:pw\\n\twhite-space: pre-wrap;\\nsnippet whs:p\\n\twhite-space: pre;\\nsnippet wid\\n\twidows: ${1};\\nsnippet w\\n\twidth: ${1};\\nsnippet w:a\\n\twidth: auto;\\nsnippet wob\\n\tword-break: ${1};\\nsnippet wob:ba\\n\tword-break: break-all;\\nsnippet wob:bs\\n\tword-break: break-strict;\\nsnippet wob:k\\n\tword-break: keep-all;\\nsnippet wob:l\\n\tword-break: loose;\\nsnippet wob:n\\n\tword-break: normal;\\nsnippet wos\\n\tword-spacing: ${1};\\nsnippet wow\\n\tword-wrap: ${1};\\nsnippet wow:no\\n\tword-wrap: none;\\nsnippet wow:n\\n\tword-wrap: normal;\\nsnippet wow:s\\n\tword-wrap: suppress;\\nsnippet wow:u\\n\tword-wrap: unrestricted;\\nsnippet z\\n\tz-index: ${1};\\nsnippet z:a\\n\tz-index: auto;\\nsnippet zoo\\n\tzoom: 1;\\n\",t.scope=\"css\"});                (function() {\n                    ace.require([\"ace/snippets/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/curly.js",
    "content": "ace.define(\"ace/snippets/curly\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"curly\"});                (function() {\n                    ace.require([\"ace/snippets/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/d.js",
    "content": "ace.define(\"ace/snippets/d\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"d\"});                (function() {\n                    ace.require([\"ace/snippets/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/dart.js",
    "content": "ace.define(\"ace/snippets/dart\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet lib\\n\tlibrary ${1};\\n\t${2}\\nsnippet im\\n\timport '${1}';\\n\t${2}\\nsnippet pa\\n\tpart '${1}';\\n\t${2}\\nsnippet pao\\n\tpart of ${1};\\n\t${2}\\nsnippet main\\n\tvoid main() {\\n\t  ${1:/* code */}\\n\t}\\nsnippet st\\n\tstatic ${1}\\nsnippet fi\\n\tfinal ${1}\\nsnippet re\\n\treturn ${1}\\nsnippet br\\n\tbreak;\\nsnippet th\\n\tthrow ${1}\\nsnippet cl\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\nsnippet imp\\n\timplements ${1}\\nsnippet ext\\n\textends ${1}\\nsnippet if\\n\tif (${1:true}) {\\n\t  ${2}\\n\t}\\nsnippet ife\\n\tif (${1:true}) {\\n\t  ${2}\\n\t} else {\\n\t  ${3}\\n\t}\\nsnippet el\\n\telse\\nsnippet sw\\n\tswitch (${1}) {\\n\t  ${2}\\n\t}\\nsnippet cs\\n\tcase ${1}:\\n\t  ${2}\\nsnippet de\\n\tdefault:\\n\t  ${1}\\nsnippet for\\n\tfor (var ${2:i} = 0, len = ${1:things}.length; $2 < len; ${3:++}$2) {\\n\t  ${4:$1[$2]}\\n\t}\\nsnippet fore\\n\tfor (final ${2:item} in ${1:itemList}) {\\n\t  ${3:/* code */}\\n\t}\\nsnippet wh\\n\twhile (${1:/* condition */}) {\\n\t  ${2:/* code */}\\n\t}\\nsnippet dowh\\n\tdo {\\n\t  ${2:/* code */}\\n\t} while (${1:/* condition */});\\nsnippet as\\n\tassert(${1:/* condition */});\\nsnippet try\\n\ttry {\\n\t  ${2}\\n\t} catch (${1:Exception e}) {\\n\t}\\nsnippet tryf\\n\ttry {\\n\t  ${2}\\n\t} catch (${1:Exception e}) {\\n\t} finally {\\n\t}\\n\",t.scope=\"dart\"});                (function() {\n                    ace.require([\"ace/snippets/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/diff.js",
    "content": "ace.define(\"ace/snippets/diff\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# DEP-3 (http://dep.debian.net/deps/dep3/) style patch header\\nsnippet header DEP-3 style header\\n\tDescription: ${1}\\n\tOrigin: ${2:vendor|upstream|other}, ${3:url of the original patch}\\n\tBug: ${4:url in upstream bugtracker}\\n\tForwarded: ${5:no|not-needed|url}\\n\tAuthor: ${6:`g:snips_author`}\\n\tReviewed-by: ${7:name and email}\\n\tLast-Update: ${8:`strftime(\"%Y-%m-%d\")`}\\n\tApplied-Upstream: ${9:upstream version|url|commit}\\n\\n',t.scope=\"diff\"});                (function() {\n                    ace.require([\"ace/snippets/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/django.js",
    "content": "ace.define(\"ace/snippets/django\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Model Fields\\n\\n# Note: Optional arguments are using defaults that match what Django will use\\n# as a default, e.g. with max_length fields.  Doing this as a form of self\\n# documentation and to make it easy to know whether you should override the\\n# default or not.\\n\\n# Note: Optional arguments that are booleans will use the opposite since you\\n# can either not specify them, or override them, e.g. auto_now_add=False.\\n\\nsnippet auto\\n\t${1:FIELDNAME} = models.AutoField(${2})\\nsnippet bool\\n\t${1:FIELDNAME} = models.BooleanField(${2:default=True})\\nsnippet char\\n\t${1:FIELDNAME} = models.CharField(max_length=${2}${3:, blank=True})\\nsnippet comma\\n\t${1:FIELDNAME} = models.CommaSeparatedIntegerField(max_length=${2}${3:, blank=True})\\nsnippet date\\n\t${1:FIELDNAME} = models.DateField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet datetime\\n\t${1:FIELDNAME} = models.DateTimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet decimal\\n\t${1:FIELDNAME} = models.DecimalField(max_digits=${2}, decimal_places=${3})\\nsnippet email\\n\t${1:FIELDNAME} = models.EmailField(max_length=${2:75}${3:, blank=True})\\nsnippet file\\n\t${1:FIELDNAME} = models.FileField(upload_to=${2:path/for/upload}${3:, max_length=100})\\nsnippet filepath\\n\t${1:FIELDNAME} = models.FilePathField(path=${2:\\\"/abs/path/to/dir\\\"}${3:, max_length=100}${4:, match=\\\"*.ext\\\"}${5:, recursive=True}${6:, blank=True, })\\nsnippet float\\n\t${1:FIELDNAME} = models.FloatField(${2})\\nsnippet image\\n\t${1:FIELDNAME} = models.ImageField(upload_to=${2:path/for/upload}${3:, height_field=height, width_field=width}${4:, max_length=100})\\nsnippet int\\n\t${1:FIELDNAME} = models.IntegerField(${2})\\nsnippet ip\\n\t${1:FIELDNAME} = models.IPAddressField(${2})\\nsnippet nullbool\\n\t${1:FIELDNAME} = models.NullBooleanField(${2})\\nsnippet posint\\n\t${1:FIELDNAME} = models.PositiveIntegerField(${2})\\nsnippet possmallint\\n\t${1:FIELDNAME} = models.PositiveSmallIntegerField(${2})\\nsnippet slug\\n\t${1:FIELDNAME} = models.SlugField(max_length=${2:50}${3:, blank=True})\\nsnippet smallint\\n\t${1:FIELDNAME} = models.SmallIntegerField(${2})\\nsnippet text\\n\t${1:FIELDNAME} = models.TextField(${2:blank=True})\\nsnippet time\\n\t${1:FIELDNAME} = models.TimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet url\\n\t${1:FIELDNAME} = models.URLField(${2:verify_exists=False}${3:, max_length=200}${4:, blank=True})\\nsnippet xml\\n\t${1:FIELDNAME} = models.XMLField(schema_path=${2:None}${3:, blank=True})\\n# Relational Fields\\nsnippet fk\\n\t${1:FIELDNAME} = models.ForeignKey(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, to_field=''})\\nsnippet m2m\\n\t${1:FIELDNAME} = models.ManyToManyField(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, symmetrical=False}${6:, through=''}${7:, db_table=''})\\nsnippet o2o\\n\t${1:FIELDNAME} = models.OneToOneField(${2:OtherModel}${3:, parent_link=True}${4:, related_name=''}${5:, limit_choices_to=}${6:, to_field=''})\\n\\n# Code Skeletons\\n\\nsnippet form\\n\tclass ${1:FormName}(forms.Form):\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\t\t${3}\\n\\nsnippet model\\n\tclass ${1:ModelName}(models.Model):\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\t\t${3}\\n\t\t\\n\t\tclass Meta:\\n\t\t\t${4}\\n\t\t\\n\t\tdef __unicode__(self):\\n\t\t\t${5}\\n\t\t\\n\t\tdef save(self, force_insert=False, force_update=False):\\n\t\t\t${6}\\n\t\t\\n\t\t@models.permalink\\n\t\tdef get_absolute_url(self):\\n\t\t\treturn ('${7:view_or_url_name}' ${8})\\n\\nsnippet modeladmin\\n\tclass ${1:ModelName}Admin(admin.ModelAdmin):\\n\t\t${2}\\n\t\\n\tadmin.site.register($1, $1Admin)\\n\t\\nsnippet tabularinline\\n\tclass ${1:ModelName}Inline(admin.TabularInline):\\n\t\tmodel = $1\\n\\nsnippet stackedinline\\n\tclass ${1:ModelName}Inline(admin.StackedInline):\\n\t\tmodel = $1\\n\\nsnippet r2r\\n\treturn render_to_response('${1:template.html}', {\\n\t\t\t${2}\\n\t\t}${3:, context_instance=RequestContext(request)}\\n\t)\\n\",t.scope=\"django\"});                (function() {\n                    ace.require([\"ace/snippets/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/dockerfile.js",
    "content": "ace.define(\"ace/snippets/dockerfile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"dockerfile\"});                (function() {\n                    ace.require([\"ace/snippets/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/dot.js",
    "content": "ace.define(\"ace/snippets/dot\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"dot\"});                (function() {\n                    ace.require([\"ace/snippets/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/drools.js",
    "content": "ace.define(\"ace/snippets/drools\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='\\nsnippet rule\\n\trule \"${1?:rule_name}\"\\n\twhen\\n\t\t${2:// when...} \\n\tthen\\n\t\t${3:// then...}\\n\tend\\n\\nsnippet query\\n\tquery ${1?:query_name}\\n\t\t${2:// find} \\n\tend\\n\t\\nsnippet declare\\n\tdeclare ${1?:type_name}\\n\t\t${2:// attributes} \\n\tend\\n\\n',t.scope=\"drools\"});                (function() {\n                    ace.require([\"ace/snippets/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/edifact.js",
    "content": "ace.define(\"ace/snippets/edifact\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='## Access Modifiers\\nsnippet u\\n\tUN\\nsnippet un\\n\tUNB\\nsnippet pr\\n\tprivate\\n##\\n## Annotations\\nsnippet before\\n\t@Before\\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\\nsnippet mm\\n\t@ManyToMany\\n\t${1}\\nsnippet mo\\n\t@ManyToOne\\n\t${1}\\nsnippet om\\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\t${2}\\nsnippet oo\\n\t@OneToOne\\n\t${1}\\n##\\n## Basic Java packages and import\\nsnippet im\\n\timport\\nsnippet j.b\\n\tjava.beans.\\nsnippet j.i\\n\tjava.io.\\nsnippet j.m\\n\tjava.math.\\nsnippet j.n\\n\tjava.net.\\nsnippet j.u\\n\tjava.util.\\n##\\n## Class\\nsnippet cl\\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\\nsnippet in\\n\tinterface ${1:`Filename(\"\", \"untitled\")`} ${2:extends Parent}${3}\\nsnippet tc\\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n##\\n## Class Enhancements\\nsnippet ext\\n\textends \\nsnippet imp\\n\timplements\\n##\\n## Comments\\nsnippet /*\\n\t/*\\n\t * ${1}\\n\t */\\n##\\n## Constants\\nsnippet co\\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\\nsnippet cos\\n\tstatic public final String ${1:var} = \"${2}\";${3}\\n##\\n## Control Statements\\nsnippet case\\n\tcase ${1}:\\n\t\t${2}\\nsnippet def\\n\tdefault:\\n\t\t${2}\\nsnippet el\\n\telse\\nsnippet elif\\n\telse if (${1}) ${2}\\nsnippet if\\n\tif (${1}) ${2}\\nsnippet sw\\n\tswitch (${1}) {\\n\t\t${2}\\n\t}\\n##\\n## Create a Method\\nsnippet m\\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n##\\n## Create a Variable\\nsnippet v\\n\t${1:String} ${2:var}${3: = null}${4};${5}\\n##\\n## Enhancements to Methods, variables, classes, etc.\\nsnippet ab\\n\tabstract\\nsnippet fi\\n\tfinal\\nsnippet st\\n\tstatic\\nsnippet sy\\n\tsynchronized\\n##\\n## Error Methods\\nsnippet err\\n\tSystem.err.print(\"${1:Message}\");\\nsnippet errf\\n\tSystem.err.printf(\"${1:Message}\", ${2:exception});\\nsnippet errln\\n\tSystem.err.println(\"${1:Message}\");\\n##\\n## Exception Handling\\nsnippet as\\n\tassert ${1:test} : \"${2:Failure message}\";${3}\\nsnippet ca\\n\tcatch(${1:Exception} ${2:e}) ${3}\\nsnippet thr\\n\tthrow\\nsnippet ths\\n\tthrows\\nsnippet try\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t}\\nsnippet tryf\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t} finally {\\n\t}\\n##\\n## Find Methods\\nsnippet findall\\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\nsnippet findbyid\\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n##\\n## Javadocs\\nsnippet /**\\n\t/**\\n\t * ${1}\\n\t */\\nsnippet @au\\n\t@author `system(\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\":\\\\\" -f5 | cut -d \\\\\",\\\\\" -f1\")`\\nsnippet @br\\n\t@brief ${1:Description}\\nsnippet @fi\\n\t@file ${1:`Filename()`}.java\\nsnippet @pa\\n\t@param ${1:param}\\nsnippet @re\\n\t@return ${1:param}\\n##\\n## Logger Methods\\nsnippet debug\\n\tLogger.debug(${1:param});${2}\\nsnippet error\\n\tLogger.error(${1:param});${2}\\nsnippet info\\n\tLogger.info(${1:param});${2}\\nsnippet warn\\n\tLogger.warn(${1:param});${2}\\n##\\n## Loops\\nsnippet enfor\\n\tfor (${1} : ${2}) ${3}\\nsnippet for\\n\tfor (${1}; ${2}; ${3}) ${4}\\nsnippet wh\\n\twhile (${1}) ${2}\\n##\\n## Main method\\nsnippet main\\n\tpublic static void main (String[] args) {\\n\t\t${1:/* code */}\\n\t}\\n##\\n## Print Methods\\nsnippet print\\n\tSystem.out.print(\"${1:Message}\");\\nsnippet printf\\n\tSystem.out.printf(\"${1:Message}\", ${2:args});\\nsnippet println\\n\tSystem.out.println(${1});\\n##\\n## Render Methods\\nsnippet ren\\n\trender(${1:param});${2}\\nsnippet rena\\n\trenderArgs.put(\"${1}\", ${2});${3}\\nsnippet renb\\n\trenderBinary(${1:param});${2}\\nsnippet renj\\n\trenderJSON(${1:param});${2}\\nsnippet renx\\n\trenderXml(${1:param});${2}\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\t${1:public} void set${3:}(${2:String} ${4:}){\\n\t\tthis.$4 = $4;\\n\t}\\nsnippet get\\n\t${1:public} ${2:String} get${3:}(){\\n\t\treturn this.${4:};\\n\t}\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\treturn\\nsnippet br\\n\tbreak;\\n##\\n## Test Methods\\nsnippet t\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\nsnippet test\\n\t@Test\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\n##\\n## Utils\\nsnippet Sc\\n\tScanner\\n##\\n## Miscellaneous\\nsnippet action\\n\tpublic static void ${1:index}(${2:args}) { ${3} }\\nsnippet rnf\\n\tnotFound(${1:param});${2}\\nsnippet rnfin\\n\tnotFoundIfNull(${1:param});${2}\\nsnippet rr\\n\tredirect(${1:param});${2}\\nsnippet ru\\n\tunauthorized(${1:param});${2}\\nsnippet unless\\n\t(unless=${1:param});${2}\\n',t.scope=\"edifact\"});                (function() {\n                    ace.require([\"ace/snippets/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/eiffel.js",
    "content": "ace.define(\"ace/snippets/eiffel\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"eiffel\"});                (function() {\n                    ace.require([\"ace/snippets/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/ejs.js",
    "content": "ace.define(\"ace/snippets/ejs\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ejs\"});                (function() {\n                    ace.require([\"ace/snippets/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/elixir.js",
    "content": "ace.define(\"ace/snippets/elixir\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/elm.js",
    "content": "ace.define(\"ace/snippets/elm\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"elm\"});                (function() {\n                    ace.require([\"ace/snippets/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/erlang.js",
    "content": "ace.define(\"ace/snippets/erlang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# module and export all\\nsnippet mod\\n\t-module(${1:`Filename('', 'my')`}).\\n\t\\n\t-compile([export_all]).\\n\t\\n\tstart() ->\\n\t    ${2}\\n\t\\n\tstop() ->\\n\t    ok.\\n# define directive\\nsnippet def\\n\t-define(${1:macro}, ${2:body}).${3}\\n# export directive\\nsnippet exp\\n\t-export([${1:function}/${2:arity}]).\\n# include directive\\nsnippet inc\\n\t-include(\\\"${1:file}\\\").${2}\\n# behavior directive\\nsnippet beh\\n\t-behaviour(${1:behaviour}).${2}\\n# if expression\\nsnippet if\\n\tif\\n\t    ${1:guard} ->\\n\t        ${2:body}\\n\tend\\n# case expression\\nsnippet case\\n\tcase ${1:expression} of\\n\t    ${2:pattern} ->\\n\t        ${3:body};\\n\tend\\n# anonymous function\\nsnippet fun\\n\tfun (${1:Parameters}) -> ${2:body} end${3}\\n# try...catch\\nsnippet try\\n\ttry\\n\t    ${1}\\n\tcatch\\n\t    ${2:_:_} -> ${3:got_some_exception}\\n\tend\\n# record directive\\nsnippet rec\\n\t-record(${1:record}, {\\n\t    ${2:field}=${3:value}}).${4}\\n# todo comment\\nsnippet todo\\n\t%% TODO: ${1}\\n## Snippets below (starting with '%') are in EDoc format.\\n## See http://www.erlang.org/doc/apps/edoc/chapter.html#id56887 for more details\\n# doc comment\\nsnippet %d\\n\t%% @doc ${1}\\n# end of doc comment\\nsnippet %e\\n\t%% @end\\n# specification comment\\nsnippet %s\\n\t%% @spec ${1}\\n# private function marker\\nsnippet %p\\n\t%% @private\\n# OTP application\\nsnippet application\\n\t-module(${1:`Filename('', 'my')`}).\\n\\n\t-behaviour(application).\\n\\n\t-export([start/2, stop/1]).\\n\\n\tstart(_Type, _StartArgs) ->\\n\t    case ${2:root_supervisor}:start_link() of\\n\t        {ok, Pid} ->\\n\t            {ok, Pid};\\n\t        Other ->\\n\t\t          {error, Other}\\n\t    end.\\n\\n\tstop(_State) ->\\n\t    ok.\t\\n# OTP supervisor\\nsnippet supervisor\\n\t-module(${1:`Filename('', 'my')`}).\\n\\n\t-behaviour(supervisor).\\n\\n\t%% API\\n\t-export([start_link/0]).\\n\\n\t%% Supervisor callbacks\\n\t-export([init/1]).\\n\\n\t-define(SERVER, ?MODULE).\\n\\n\tstart_link() ->\\n\t    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\\n\\n\tinit([]) ->\\n\t    Server = {${2:my_server}, {$2, start_link, []},\\n\t      permanent, 2000, worker, [$2]},\\n\t    Children = [Server],\\n\t    RestartStrategy = {one_for_one, 0, 1},\\n\t    {ok, {RestartStrategy, Children}}.\\n# OTP gen_server\\nsnippet gen_server\\n\t-module(${1:`Filename('', 'my')`}).\\n\\n\t-behaviour(gen_server).\\n\\n\t%% API\\n\t-export([\\n\t         start_link/0\\n\t        ]).\\n\\n\t%% gen_server callbacks\\n\t-export([init/1, handle_call/3, handle_cast/2, handle_info/2,\\n\t         terminate/2, code_change/3]).\\n\\n\t-define(SERVER, ?MODULE).\\n\\n\t-record(state, {}).\\n\\n\t%%%===================================================================\\n\t%%% API\\n\t%%%===================================================================\\n\\n\tstart_link() ->\\n\t    gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).\\n\\n\t%%%===================================================================\\n\t%%% gen_server callbacks\\n\t%%%===================================================================\\n\\n\tinit([]) ->\\n\t    {ok, #state{}}.\\n\\n\thandle_call(_Request, _From, State) ->\\n\t    Reply = ok,\\n\t    {reply, Reply, State}.\\n\\n\thandle_cast(_Msg, State) ->\\n\t    {noreply, State}.\\n\\n\thandle_info(_Info, State) ->\\n\t    {noreply, State}.\\n\\n\tterminate(_Reason, _State) ->\\n\t    ok.\\n\\n\tcode_change(_OldVsn, State, _Extra) ->\\n\t    {ok, State}.\\n\\n\t%%%===================================================================\\n\t%%% Internal functions\\n\t%%%===================================================================\\n\\n\",t.scope=\"erlang\"});                (function() {\n                    ace.require([\"ace/snippets/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/forth.js",
    "content": "ace.define(\"ace/snippets/forth\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"forth\"});                (function() {\n                    ace.require([\"ace/snippets/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/fortran.js",
    "content": "ace.define(\"ace/snippets/fortran\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"fortran\"});                (function() {\n                    ace.require([\"ace/snippets/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/fsharp.js",
    "content": "ace.define(\"ace/snippets/fsharp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"fsharp\"});                (function() {\n                    ace.require([\"ace/snippets/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/fsl.js",
    "content": "ace.define(\"ace/snippets/fsl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/ftl.js",
    "content": "ace.define(\"ace/snippets/ftl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ftl\"});                (function() {\n                    ace.require([\"ace/snippets/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/gcode.js",
    "content": "ace.define(\"ace/snippets/gcode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"gcode\"});                (function() {\n                    ace.require([\"ace/snippets/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/gherkin.js",
    "content": "ace.define(\"ace/snippets/gherkin\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"gherkin\"});                (function() {\n                    ace.require([\"ace/snippets/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/gitignore.js",
    "content": "ace.define(\"ace/snippets/gitignore\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"gitignore\"});                (function() {\n                    ace.require([\"ace/snippets/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/glsl.js",
    "content": "ace.define(\"ace/snippets/glsl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"glsl\"});                (function() {\n                    ace.require([\"ace/snippets/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/gobstones.js",
    "content": "ace.define(\"ace/snippets/gobstones\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Procedure\\nsnippet proc\\n\tprocedure ${1?:name}(${2:argument}) {\\n\t\t${3:// body...}\\n\t}\\n\\n# Function\\nsnippet fun\\n\tfunction ${1?:name}(${2:argument}) {\\n\t\treturn ${3:// body...}\\n\t}\\n\\n# Repeat\\nsnippet rep\\n\trepeat ${1?:times} {\\n\t\t${2:// body...}\\n\t}\\n\\n# For\\nsnippet for\\n\tforeach ${1?:e} in ${2?:list} {\\n\t\t${3:// body...}\t\\n\t}\\n\\n# If\\nsnippet if\\n\tif (${1?:condition}) {\\n\t\t${3:// body...}\t\\n\t}\\n\\n# While\\n  while (${1?:condition}) {\\n    ${2:// body...}\t\\n  }\\n\",t.scope=\"gobstones\"});                (function() {\n                    ace.require([\"ace/snippets/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/golang.js",
    "content": "ace.define(\"ace/snippets/golang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"golang\"});                (function() {\n                    ace.require([\"ace/snippets/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/graphqlschema.js",
    "content": "ace.define(\"ace/snippets/graphqlschema\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Type Snippet\\ntrigger type\\nsnippet type\\n\ttype ${1:type_name} {\\n\t\t${2:type_siblings}\\n\t}\\n\\n# Input Snippet\\ntrigger input\\nsnippet input\\n\tinput ${1:input_name} {\\n\t\t${2:input_siblings}\\n\t}\\n\\n# Interface Snippet\\ntrigger interface\\nsnippet interface\\n\tinterface ${1:interface_name} {\\n\t\t${2:interface_siblings}\\n\t}\\n\\n# Interface Snippet\\ntrigger union\\nsnippet union\\n\tunion ${1:union_name} = ${2:type} | ${3: type}\\n\\n# Enum Snippet\\ntrigger enum\\nsnippet enum\\n\tenum ${1:enum_name} {\\n\t\t${2:enum_siblings}\\n\t}\\n\",t.scope=\"graphqlschema\"});                (function() {\n                    ace.require([\"ace/snippets/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/groovy.js",
    "content": "ace.define(\"ace/snippets/groovy\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"groovy\"});                (function() {\n                    ace.require([\"ace/snippets/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/haml.js",
    "content": "ace.define(\"ace/snippets/haml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet t\\n\t%table\\n\t\t%tr\\n\t\t\t%th\\n\t\t\t\t${1:headers}\\n\t\t%tr\\n\t\t\t%td\\n\t\t\t\t${2:headers}\\nsnippet ul\\n\t%ul\\n\t\t%li\\n\t\t\t${1:item}\\n\t\t%li\\nsnippet =rp\\n\t= render :partial => '${1:partial}'\\nsnippet =rpl\\n\t= render :partial => '${1:partial}', :locals => {}\\nsnippet =rpc\\n\t= render :partial => '${1:partial}', :collection => @$1\\n\\n\",t.scope=\"haml\"});                (function() {\n                    ace.require([\"ace/snippets/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/handlebars.js",
    "content": "ace.define(\"ace/snippets/handlebars\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"handlebars\"});                (function() {\n                    ace.require([\"ace/snippets/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/haskell.js",
    "content": "ace.define(\"ace/snippets/haskell\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet lang\\n\t{-# LANGUAGE ${1:OverloadedStrings} #-}\\nsnippet info\\n\t-- |\\n\t-- Module      :  ${1:Module.Namespace}\\n\t-- Copyright   :  ${2:Author} ${3:2011-2012}\\n\t-- License     :  ${4:BSD3}\\n\t--\\n\t-- Maintainer  :  ${5:email@something.com}\\n\t-- Stability   :  ${6:experimental}\\n\t-- Portability :  ${7:unknown}\\n\t--\\n\t-- ${8:Description}\\n\t--\\nsnippet import\\n\timport           ${1:Data.Text}\\nsnippet import2\\n\timport           ${1:Data.Text} (${2:head})\\nsnippet importq\\n\timport qualified ${1:Data.Text} as ${2:T}\\nsnippet inst\\n\tinstance ${1:Monoid} ${2:Type} where\\n\t\t${3}\\nsnippet type\\n\ttype ${1:Type} = ${2:Type}\\nsnippet data\\n\tdata ${1:Type} = ${2:$1} ${3:Int}\\nsnippet newtype\\n\tnewtype ${1:Type} = ${2:$1} ${3:Int}\\nsnippet class\\n\tclass ${1:Class} a where\\n\t\t${2}\\nsnippet module\\n\tmodule `substitute(substitute(expand('%:r'), '[/\\\\\\\\]','.','g'),'^\\\\%(\\\\l*\\\\.\\\\)\\\\?','','')` (\\n\t)\twhere\\n\t`expand('%') =~ 'Main' ? \\\"\\\\n\\\\nmain = do\\\\n  print \\\\\\\"hello world\\\\\\\"\\\" : \\\"\\\"`\\n\\nsnippet const\\n\t${1:name} :: ${2:a}\\n\t$1 = ${3:undefined}\\nsnippet fn\\n\t${1:fn} :: ${2:a} -> ${3:a}\\n\t$1 ${4} = ${5:undefined}\\nsnippet fn2\\n\t${1:fn} :: ${2:a} -> ${3:a} -> ${4:a}\\n\t$1 ${5} = ${6:undefined}\\nsnippet ap\\n\t${1:map} ${2:fn} ${3:list}\\nsnippet do\\n\tdo\\n\t\t\\nsnippet \\u03bb\\n\t\\\\${1:x} -> ${2}\\nsnippet \\\\\\n\t\\\\${1:x} -> ${2}\\nsnippet <-\\n\t${1:a} <- ${2:m a}\\nsnippet \\u2190\\n\t${1:a} <- ${2:m a}\\nsnippet ->\\n\t${1:m a} -> ${2:a}\\nsnippet \\u2192\\n\t${1:m a} -> ${2:a}\\nsnippet tup\\n\t(${1:a}, ${2:b})\\nsnippet tup2\\n\t(${1:a}, ${2:b}, ${3:c})\\nsnippet tup3\\n\t(${1:a}, ${2:b}, ${3:c}, ${4:d})\\nsnippet rec\\n\t${1:Record} { ${2:recFieldA} = ${3:undefined}\\n\t\t\t\t, ${4:recFieldB} = ${5:undefined}\\n\t\t\t\t}\\nsnippet case\\n\tcase ${1:something} of\\n\t\t${2} -> ${3}\\nsnippet let\\n\tlet ${1} = ${2}\\n\tin ${3}\\nsnippet where\\n\twhere\\n\t\t${1:fn} = ${2:undefined}\\n\",t.scope=\"haskell\"});                (function() {\n                    ace.require([\"ace/snippets/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/haskell_cabal.js",
    "content": "ace.define(\"ace/snippets/haskell_cabal\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"haskell_cabal\"});                (function() {\n                    ace.require([\"ace/snippets/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/haxe.js",
    "content": "ace.define(\"ace/snippets/haxe\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"haxe\"});                (function() {\n                    ace.require([\"ace/snippets/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/hjson.js",
    "content": "ace.define(\"ace/snippets/hjson\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/html.js",
    "content": "ace.define(\"ace/snippets/html\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Some useful Unicode entities\\n# Non-Breaking Space\\nsnippet nbs\\n\t&nbsp;\\n# \\u2190\\nsnippet left\\n\t&#x2190;\\n# \\u2192\\nsnippet right\\n\t&#x2192;\\n# \\u2191\\nsnippet up\\n\t&#x2191;\\n# \\u2193\\nsnippet down\\n\t&#x2193;\\n# \\u21a9\\nsnippet return\\n\t&#x21A9;\\n# \\u21e4\\nsnippet backtab\\n\t&#x21E4;\\n# \\u21e5\\nsnippet tab\\n\t&#x21E5;\\n# \\u21e7\\nsnippet shift\\n\t&#x21E7;\\n# \\u2303\\nsnippet ctrl\\n\t&#x2303;\\n# \\u2305\\nsnippet enter\\n\t&#x2305;\\n# \\u2318\\nsnippet cmd\\n\t&#x2318;\\n# \\u2325\\nsnippet option\\n\t&#x2325;\\n# \\u2326\\nsnippet delete\\n\t&#x2326;\\n# \\u232b\\nsnippet backspace\\n\t&#x232B;\\n# \\u238b\\nsnippet esc\\n\t&#x238B;\\n# Generic Doctype\\nsnippet doctype HTML 4.01 Strict\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\nsnippet doctype HTML 4.01 Transitional\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\nsnippet doctype HTML 5\\n\t<!DOCTYPE HTML>\\nsnippet doctype XHTML 1.0 Frameset\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Strict\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Transitional\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\nsnippet doctype XHTML 1.1\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# HTML Doctype 4.01 Strict\\nsnippet docts\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\n# HTML Doctype 4.01 Transitional\\nsnippet doct\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\n# HTML Doctype 5\\nsnippet doct5\\n\t<!DOCTYPE html>\\n# XHTML Doctype 1.0 Frameset\\nsnippet docxf\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\\n# XHTML Doctype 1.0 Strict\\nsnippet docxs\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\n# XHTML Doctype 1.0 Transitional\\nsnippet docxt\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\n# XHTML Doctype 1.1\\nsnippet docx\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# html5shiv\\nsnippet html5shiv\\n\t<!--[if lte IE 8]>\\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\"><\\/script>\\n\t<![endif]-->\\nsnippet html5printshiv\\n\t<!--[if lte IE 8]>\\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\"><\\/script>\\n\t<![endif]-->\\n# Attributes\\nsnippet attr\\n\t${1:attribute}=\"${2:property}\"\\nsnippet attr+\\n\t${1:attribute}=\"${2:property}\" attr+${3}\\nsnippet .\\n\tclass=\"${1}\"${2}\\nsnippet #\\n\tid=\"${1}\"${2}\\nsnippet alt\\n\talt=\"${1}\"${2}\\nsnippet charset\\n\tcharset=\"${1:utf-8}\"${2}\\nsnippet data\\n\tdata-${1}=\"${2:$1}\"${3}\\nsnippet for\\n\tfor=\"${1}\"${2}\\nsnippet height\\n\theight=\"${1}\"${2}\\nsnippet href\\n\thref=\"${1:#}\"${2}\\nsnippet lang\\n\tlang=\"${1:en}\"${2}\\nsnippet media\\n\tmedia=\"${1}\"${2}\\nsnippet name\\n\tname=\"${1}\"${2}\\nsnippet rel\\n\trel=\"${1}\"${2}\\nsnippet scope\\n\tscope=\"${1:row}\"${2}\\nsnippet src\\n\tsrc=\"${1}\"${2}\\nsnippet title=\\n\ttitle=\"${1}\"${2}\\nsnippet type\\n\ttype=\"${1}\"${2}\\nsnippet value\\n\tvalue=\"${1}\"${2}\\nsnippet width\\n\twidth=\"${1}\"${2}\\n# Elements\\nsnippet a\\n\t<a href=\"${1:#}\">${2:$1}</a>\\nsnippet a.\\n\t<a class=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a#\\n\t<a id=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a:ext\\n\t<a href=\"http://${1:example.com}\">${2:$1}</a>\\nsnippet a:mail\\n\t<a href=\"mailto:${1:joe@example.com}?subject=${2:feedback}\">${3:email me}</a>\\nsnippet abbr\\n\t<abbr title=\"${1}\">${2}</abbr>\\nsnippet address\\n\t<address>\\n\t\t${1}\\n\t</address>\\nsnippet area\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\nsnippet area+\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\n\tarea+${5}\\nsnippet area:c\\n\t<area shape=\"circle\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:d\\n\t<area shape=\"default\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:p\\n\t<area shape=\"poly\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:r\\n\t<area shape=\"rect\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet article\\n\t<article>\\n\t\t${1}\\n\t</article>\\nsnippet article.\\n\t<article class=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet article#\\n\t<article id=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet aside\\n\t<aside>\\n\t\t${1}\\n\t</aside>\\nsnippet aside.\\n\t<aside class=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet aside#\\n\t<aside id=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet audio\\n\t<audio src=\"${1}>${2}</audio>\\nsnippet b\\n\t<b>${1}</b>\\nsnippet base\\n\t<base href=\"${1}\" target=\"${2}\" />\\nsnippet bdi\\n\t<bdi>${1}</bdo>\\nsnippet bdo\\n\t<bdo dir=\"${1}\">${2}</bdo>\\nsnippet bdo:l\\n\t<bdo dir=\"ltr\">${1}</bdo>\\nsnippet bdo:r\\n\t<bdo dir=\"rtl\">${1}</bdo>\\nsnippet blockquote\\n\t<blockquote>\\n\t\t${1}\\n\t</blockquote>\\nsnippet body\\n\t<body>\\n\t\t${1}\\n\t</body>\\nsnippet br\\n\t<br />${1}\\nsnippet button\\n\t<button type=\"${1:submit}\">${2}</button>\\nsnippet button.\\n\t<button class=\"${1:button}\" type=\"${2:submit}\">${3}</button>\\nsnippet button#\\n\t<button id=\"${1}\" type=\"${2:submit}\">${3}</button>\\nsnippet button:s\\n\t<button type=\"submit\">${1}</button>\\nsnippet button:r\\n\t<button type=\"reset\">${1}</button>\\nsnippet canvas\\n\t<canvas>\\n\t\t${1}\\n\t</canvas>\\nsnippet caption\\n\t<caption>${1}</caption>\\nsnippet cite\\n\t<cite>${1}</cite>\\nsnippet code\\n\t<code>${1}</code>\\nsnippet col\\n\t<col />${1}\\nsnippet col+\\n\t<col />\\n\tcol+${1}\\nsnippet colgroup\\n\t<colgroup>\\n\t\t${1}\\n\t</colgroup>\\nsnippet colgroup+\\n\t<colgroup>\\n\t\t<col />\\n\t\tcol+${1}\\n\t</colgroup>\\nsnippet command\\n\t<command type=\"command\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:c\\n\t<command type=\"checkbox\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:r\\n\t<command type=\"radio\" radiogroup=\"${1}\" label=\"${2}\" icon=\"${3}\" />\\nsnippet datagrid\\n\t<datagrid>\\n\t\t${1}\\n\t</datagrid>\\nsnippet datalist\\n\t<datalist>\\n\t\t${1}\\n\t</datalist>\\nsnippet datatemplate\\n\t<datatemplate>\\n\t\t${1}\\n\t</datatemplate>\\nsnippet dd\\n\t<dd>${1}</dd>\\nsnippet dd.\\n\t<dd class=\"${1}\">${2}</dd>\\nsnippet dd#\\n\t<dd id=\"${1}\">${2}</dd>\\nsnippet del\\n\t<del>${1}</del>\\nsnippet details\\n\t<details>${1}</details>\\nsnippet dfn\\n\t<dfn>${1}</dfn>\\nsnippet dialog\\n\t<dialog>\\n\t\t${1}\\n\t</dialog>\\nsnippet div\\n\t<div>\\n\t\t${1}\\n\t</div>\\nsnippet div.\\n\t<div class=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet div#\\n\t<div id=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet dl\\n\t<dl>\\n\t\t${1}\\n\t</dl>\\nsnippet dl.\\n\t<dl class=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl#\\n\t<dl id=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl+\\n\t<dl>\\n\t\t<dt>${1}</dt>\\n\t\t<dd>${2}</dd>\\n\t\tdt+${3}\\n\t</dl>\\nsnippet dt\\n\t<dt>${1}</dt>\\nsnippet dt.\\n\t<dt class=\"${1}\">${2}</dt>\\nsnippet dt#\\n\t<dt id=\"${1}\">${2}</dt>\\nsnippet dt+\\n\t<dt>${1}</dt>\\n\t<dd>${2}</dd>\\n\tdt+${3}\\nsnippet em\\n\t<em>${1}</em>\\nsnippet embed\\n\t<embed src=${1} type=\"${2} />\\nsnippet fieldset\\n\t<fieldset>\\n\t\t${1}\\n\t</fieldset>\\nsnippet fieldset.\\n\t<fieldset class=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset#\\n\t<fieldset id=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset+\\n\t<fieldset>\\n\t\t<legend><span>${1}</span></legend>\\n\t\t${2}\\n\t</fieldset>\\n\tfieldset+${3}\\nsnippet figcaption\\n\t<figcaption>${1}</figcaption>\\nsnippet figure\\n\t<figure>${1}</figure>\\nsnippet footer\\n\t<footer>\\n\t\t${1}\\n\t</footer>\\nsnippet footer.\\n\t<footer class=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet footer#\\n\t<footer id=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet form\\n\t<form action=\"${1}\" method=\"${2:get}\" accept-charset=\"utf-8\">\\n\t\t${3}\\n\t</form>\\nsnippet form.\\n\t<form class=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet form#\\n\t<form id=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet h1\\n\t<h1>${1}</h1>\\nsnippet h1.\\n\t<h1 class=\"${1}\">${2}</h1>\\nsnippet h1#\\n\t<h1 id=\"${1}\">${2}</h1>\\nsnippet h2\\n\t<h2>${1}</h2>\\nsnippet h2.\\n\t<h2 class=\"${1}\">${2}</h2>\\nsnippet h2#\\n\t<h2 id=\"${1}\">${2}</h2>\\nsnippet h3\\n\t<h3>${1}</h3>\\nsnippet h3.\\n\t<h3 class=\"${1}\">${2}</h3>\\nsnippet h3#\\n\t<h3 id=\"${1}\">${2}</h3>\\nsnippet h4\\n\t<h4>${1}</h4>\\nsnippet h4.\\n\t<h4 class=\"${1}\">${2}</h4>\\nsnippet h4#\\n\t<h4 id=\"${1}\">${2}</h4>\\nsnippet h5\\n\t<h5>${1}</h5>\\nsnippet h5.\\n\t<h5 class=\"${1}\">${2}</h5>\\nsnippet h5#\\n\t<h5 id=\"${1}\">${2}</h5>\\nsnippet h6\\n\t<h6>${1}</h6>\\nsnippet h6.\\n\t<h6 class=\"${1}\">${2}</h6>\\nsnippet h6#\\n\t<h6 id=\"${1}\">${2}</h6>\\nsnippet head\\n\t<head>\\n\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\\n\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t${2}\\n\t</head>\\nsnippet header\\n\t<header>\\n\t\t${1}\\n\t</header>\\nsnippet header.\\n\t<header class=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet header#\\n\t<header id=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet hgroup\\n\t<hgroup>\\n\t\t${1}\\n\t</hgroup>\\nsnippet hgroup.\\n\t<hgroup class=\"${1}>\\n\t\t${2}\\n\t</hgroup>\\nsnippet hr\\n\t<hr />${1}\\nsnippet html\\n\t<html>\\n\t${1}\\n\t</html>\\nsnippet xhtml\\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\\n\t${1}\\n\t</html>\\nsnippet html5\\n\t<!DOCTYPE html>\\n\t<html>\\n\t\t<head>\\n\t\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\t\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t\t${2:meta}\\n\t\t</head>\\n\t\t<body>\\n\t\t\t${3:body}\\n\t\t</body>\\n\t</html>\\nsnippet xhtml5\\n\t<!DOCTYPE html>\\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\\n\t\t<head>\\n\t\t\t<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=utf-8\" />\\n\t\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t\t${2:meta}\\n\t\t</head>\\n\t\t<body>\\n\t\t\t${3:body}\\n\t\t</body>\\n\t</html>\\nsnippet i\\n\t<i>${1}</i>\\nsnippet iframe\\n\t<iframe src=\"${1}\" frameborder=\"0\"></iframe>${2}\\nsnippet iframe.\\n\t<iframe class=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet iframe#\\n\t<iframe id=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet img\\n\t<img src=\"${1}\" alt=\"${2}\" />${3}\\nsnippet img.\\n\t<img class=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet img#\\n\t<img id=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet input\\n\t<input type=\"${1:text/submit/hidden/button/image}\" name=\"${2}\" id=\"${3:$2}\" value=\"${4}\" />${5}\\nsnippet input.\\n\t<input class=\"${1}\" type=\"${2:text/submit/hidden/button/image}\" name=\"${3}\" id=\"${4:$3}\" value=\"${5}\" />${6}\\nsnippet input:text\\n\t<input type=\"text\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:submit\\n\t<input type=\"submit\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:hidden\\n\t<input type=\"hidden\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:button\\n\t<input type=\"button\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:image\\n\t<input type=\"image\" name=\"${1}\" id=\"${2:$1}\" src=\"${3}\" alt=\"${4}\" />${5}\\nsnippet input:checkbox\\n\t<input type=\"checkbox\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:radio\\n\t<input type=\"radio\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:color\\n\t<input type=\"color\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:date\\n\t<input type=\"date\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime\\n\t<input type=\"datetime\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime-local\\n\t<input type=\"datetime-local\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:email\\n\t<input type=\"email\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:file\\n\t<input type=\"file\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:month\\n\t<input type=\"month\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:number\\n\t<input type=\"number\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:password\\n\t<input type=\"password\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:range\\n\t<input type=\"range\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:reset\\n\t<input type=\"reset\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:search\\n\t<input type=\"search\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:time\\n\t<input type=\"time\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:url\\n\t<input type=\"url\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:week\\n\t<input type=\"week\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet ins\\n\t<ins>${1}</ins>\\nsnippet kbd\\n\t<kbd>${1}</kbd>\\nsnippet keygen\\n\t<keygen>${1}</keygen>\\nsnippet label\\n\t<label for=\"${2:$1}\">${1}</label>\\nsnippet label:i\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<input type=\"${3:text/submit/hidden/button}\" name=\"${4:$2}\" id=\"${5:$2}\" value=\"${6}\" />${7}\\nsnippet label:s\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<select name=\"${3:$2}\" id=\"${4:$2}\">\\n\t\t<option value=\"${5}\">${6:$5}</option>\\n\t</select>\\nsnippet legend\\n\t<legend>${1}</legend>\\nsnippet legend+\\n\t<legend><span>${1}</span></legend>\\nsnippet li\\n\t<li>${1}</li>\\nsnippet li.\\n\t<li class=\"${1}\">${2}</li>\\nsnippet li+\\n\t<li>${1}</li>\\n\tli+${2}\\nsnippet lia\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\nsnippet lia+\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\n\tlia+${3}\\nsnippet link\\n\t<link rel=\"${1}\" href=\"${2}\" title=\"${3}\" type=\"${4}\" />${5}\\nsnippet link:atom\\n\t<link rel=\"alternate\" href=\"${1:atom.xml}\" title=\"Atom\" type=\"application/atom+xml\" />${2}\\nsnippet link:css\\n\t<link rel=\"stylesheet\" href=\"${2:style.css}\" type=\"text/css\" media=\"${3:all}\" />${4}\\nsnippet link:favicon\\n\t<link rel=\"shortcut icon\" href=\"${1:favicon.ico}\" type=\"image/x-icon\" />${2}\\nsnippet link:rss\\n\t<link rel=\"alternate\" href=\"${1:rss.xml}\" title=\"RSS\" type=\"application/atom+xml\" />${2}\\nsnippet link:touch\\n\t<link rel=\"apple-touch-icon\" href=\"${1:favicon.png}\" />${2}\\nsnippet map\\n\t<map name=\"${1}\">\\n\t\t${2}\\n\t</map>\\nsnippet map.\\n\t<map class=\"${1}\" name=\"${2}\">\\n\t\t${3}\\n\t</map>\\nsnippet map#\\n\t<map name=\"${1}\" id=\"${2:$1}>\\n\t\t${3}\\n\t</map>\\nsnippet map+\\n\t<map name=\"${1}\">\\n\t\t<area shape=\"${2}\" coords=\"${3}\" href=\"${4}\" alt=\"${5}\" />${6}\\n\t</map>${7}\\nsnippet mark\\n\t<mark>${1}</mark>\\nsnippet menu\\n\t<menu>\\n\t\t${1}\\n\t</menu>\\nsnippet menu:c\\n\t<menu type=\"context\">\\n\t\t${1}\\n\t</menu>\\nsnippet menu:t\\n\t<menu type=\"toolbar\">\\n\t\t${1}\\n\t</menu>\\nsnippet meta\\n\t<meta http-equiv=\"${1}\" content=\"${2}\" />${3}\\nsnippet meta:compat\\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=${1:7,8,edge}\" />${3}\\nsnippet meta:refresh\\n\t<meta http-equiv=\"refresh\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meta:utf\\n\t<meta http-equiv=\"content-type\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meter\\n\t<meter>${1}</meter>\\nsnippet nav\\n\t<nav>\\n\t\t${1}\\n\t</nav>\\nsnippet nav.\\n\t<nav class=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet nav#\\n\t<nav id=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet noscript\\n\t<noscript>\\n\t\t${1}\\n\t</noscript>\\nsnippet object\\n\t<object data=\"${1}\" type=\"${2}\">\\n\t\t${3}\\n\t</object>${4}\\n# Embed QT Movie\\nsnippet movie\\n\t<object width=\"$2\" height=\"$3\" classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\"\\n\t codebase=\"http://www.apple.com/qtactivex/qtplugin.cab\">\\n\t\t<param name=\"src\" value=\"$1\" />\\n\t\t<param name=\"controller\" value=\"$4\" />\\n\t\t<param name=\"autoplay\" value=\"$5\" />\\n\t\t<embed src=\"${1:movie.mov}\"\\n\t\t\twidth=\"${2:320}\" height=\"${3:240}\"\\n\t\t\tcontroller=\"${4:true}\" autoplay=\"${5:true}\"\\n\t\t\tscale=\"tofit\" cache=\"true\"\\n\t\t\tpluginspage=\"http://www.apple.com/quicktime/download/\" />\\n\t</object>${6}\\nsnippet ol\\n\t<ol>\\n\t\t${1}\\n\t</ol>\\nsnippet ol.\\n\t<ol class=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol#\\n\t<ol id=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol+\\n\t<ol>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ol>\\nsnippet opt\\n\t<option value=\"${1}\">${2:$1}</option>\\nsnippet opt+\\n\t<option value=\"${1}\">${2:$1}</option>\\n\topt+${3}\\nsnippet optt\\n\t<option>${1}</option>\\nsnippet optgroup\\n\t<optgroup>\\n\t\t<option value=\"${1}\">${2:$1}</option>\\n\t\topt+${3}\\n\t</optgroup>\\nsnippet output\\n\t<output>${1}</output>\\nsnippet p\\n\t<p>${1}</p>\\nsnippet param\\n\t<param name=\"${1}\" value=\"${2}\" />${3}\\nsnippet pre\\n\t<pre>\\n\t\t${1}\\n\t</pre>\\nsnippet progress\\n\t<progress>${1}</progress>\\nsnippet q\\n\t<q>${1}</q>\\nsnippet rp\\n\t<rp>${1}</rp>\\nsnippet rt\\n\t<rt>${1}</rt>\\nsnippet ruby\\n\t<ruby>\\n\t\t<rp><rt>${1}</rt></rp>\\n\t</ruby>\\nsnippet s\\n\t<s>${1}</s>\\nsnippet samp\\n\t<samp>\\n\t\t${1}\\n\t</samp>\\nsnippet script\\n\t<script type=\"text/javascript\" charset=\"utf-8\">\\n\t\t${1}\\n\t<\\/script>\\nsnippet scriptsrc\\n\t<script src=\"${1}.js\" type=\"text/javascript\" charset=\"utf-8\"><\\/script>\\nsnippet newscript\\n\t<script type=\"application/javascript\" charset=\"utf-8\">\\n\t\t${1}\\n\t<\\/script>\\nsnippet newscriptsrc\\n\t<script src=\"${1}.js\" type=\"application/javascript\" charset=\"utf-8\"><\\/script>\\nsnippet section\\n\t<section>\\n\t\t${1}\\n\t</section>\\nsnippet section.\\n\t<section class=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet section#\\n\t<section id=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet select\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t${3}\\n\t</select>\\nsnippet select.\\n\t<select name=\"${1}\" id=\"${2:$1}\" class=\"${3}>\\n\t\t${4}\\n\t</select>\\nsnippet select+\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t<option value=\"${3}\">${4:$3}</option>\\n\t\topt+${5}\\n\t</select>\\nsnippet small\\n\t<small>${1}</small>\\nsnippet source\\n\t<source src=\"${1}\" type=\"${2}\" media=\"${3}\" />\\nsnippet span\\n\t<span>${1}</span>\\nsnippet strong\\n\t<strong>${1}</strong>\\nsnippet style\\n\t<style type=\"text/css\" media=\"${1:all}\">\\n\t\t${2}\\n\t</style>\\nsnippet sub\\n\t<sub>${1}</sub>\\nsnippet summary\\n\t<summary>\\n\t\t${1}\\n\t</summary>\\nsnippet sup\\n\t<sup>${1}</sup>\\nsnippet table\\n\t<table border=\"${1:0}\">\\n\t\t${2}\\n\t</table>\\nsnippet table.\\n\t<table class=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet table#\\n\t<table id=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet tbody\\n\t<tbody>\\n\t\t${1}\\n\t</tbody>\\nsnippet td\\n\t<td>${1}</td>\\nsnippet td.\\n\t<td class=\"${1}\">${2}</td>\\nsnippet td#\\n\t<td id=\"${1}\">${2}</td>\\nsnippet td+\\n\t<td>${1}</td>\\n\ttd+${2}\\nsnippet textarea\\n\t<textarea name=\"${1}\" id=${2:$1} rows=\"${3:8}\" cols=\"${4:40}\">${5}</textarea>${6}\\nsnippet tfoot\\n\t<tfoot>\\n\t\t${1}\\n\t</tfoot>\\nsnippet th\\n\t<th>${1}</th>\\nsnippet th.\\n\t<th class=\"${1}\">${2}</th>\\nsnippet th#\\n\t<th id=\"${1}\">${2}</th>\\nsnippet th+\\n\t<th>${1}</th>\\n\tth+${2}\\nsnippet thead\\n\t<thead>\\n\t\t${1}\\n\t</thead>\\nsnippet time\\n\t<time datetime=\"${1}\" pubdate=\"${2:$1}>${3:$1}</time>\\nsnippet title\\n\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\nsnippet tr\\n\t<tr>\\n\t\t${1}\\n\t</tr>\\nsnippet tr+\\n\t<tr>\\n\t\t<td>${1}</td>\\n\t\ttd+${2}\\n\t</tr>\\nsnippet track\\n\t<track src=\"${1}\" srclang=\"${2}\" label=\"${3}\" default=\"${4:default}>${5}</track>${6}\\nsnippet ul\\n\t<ul>\\n\t\t${1}\\n\t</ul>\\nsnippet ul.\\n\t<ul class=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul#\\n\t<ul id=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul+\\n\t<ul>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ul>\\nsnippet var\\n\t<var>${1}</var>\\nsnippet video\\n\t<video src=\"${1} height=\"${2}\" width=\"${3}\" preload=\"${5:none}\" autoplay=\"${6:autoplay}>${7}</video>${8}\\nsnippet wbr\\n\t<wbr />${1}\\n',t.scope=\"html\"});                (function() {\n                    ace.require([\"ace/snippets/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/html_elixir.js",
    "content": "ace.define(\"ace/snippets/html_elixir\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"html_elixir\"});                (function() {\n                    ace.require([\"ace/snippets/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/html_ruby.js",
    "content": "ace.define(\"ace/snippets/html_ruby\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"html_ruby\"});                (function() {\n                    ace.require([\"ace/snippets/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/ini.js",
    "content": "ace.define(\"ace/snippets/ini\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ini\"});                (function() {\n                    ace.require([\"ace/snippets/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/io.js",
    "content": "ace.define(\"ace/snippets/io\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippets=[{content:\"assertEquals(${1:expected}, ${2:expr})\",name:\"assertEquals\",scope:\"io\",tabTrigger:\"ae\"},{content:\"${1:${2:newValue} := ${3:Object} }clone do(\\n\t$0\\n)\",name:\"clone do\",scope:\"io\",tabTrigger:\"cdo\"},{content:'docSlot(\"${1:slotName}\", \"${2:documentation}\")',name:\"docSlot\",scope:\"io\",tabTrigger:\"ds\"},{content:\"(${1:header,}\\n\t${2:body}\\n)$0\",keyEquivalent:\"@(\",name:\"Indented Bracketed Line\",scope:\"io\",tabTrigger:\"(\"},{content:\"\\n\t$0\\n\",keyEquivalent:\"\\r\",name:\"Special: Return Inside Empty Parenthesis\",scope:\"io meta.empty-parenthesis.io, io meta.comma-parenthesis.io\"},{content:\"${1:methodName} := method(${2:args,}\\n\t$0\\n)\",name:\"method\",scope:\"io\",tabTrigger:\"m\"},{content:'newSlot(\"${1:slotName}\", ${2:defaultValue}, \"${3:docString}\")$0',name:\"newSlot\",scope:\"io\",tabTrigger:\"ns\"},{content:\"${1:name} := Object clone do(\\n\t$0\\n)\",name:\"Object clone do\",scope:\"io\",tabTrigger:\"ocdo\"},{content:\"test${1:SomeFeature} := method(\\n\t$0\\n)\",name:\"testMethod\",scope:\"io\",tabTrigger:\"ts\"},{content:\"${1:Something}Test := ${2:UnitTest} clone do(\\n\t$0\\n)\",name:\"UnitTest\",scope:\"io\",tabTrigger:\"ut\"}],t.scope=\"io\"});                (function() {\n                    ace.require([\"ace/snippets/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/jack.js",
    "content": "ace.define(\"ace/snippets/jack\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"jack\"});                (function() {\n                    ace.require([\"ace/snippets/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/jade.js",
    "content": "ace.define(\"ace/snippets/jade\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"jade\"});                (function() {\n                    ace.require([\"ace/snippets/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/java.js",
    "content": "ace.define(\"ace/snippets/java\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='## Access Modifiers\\nsnippet po\\n\tprotected\\nsnippet pu\\n\tpublic\\nsnippet pr\\n\tprivate\\n##\\n## Annotations\\nsnippet before\\n\t@Before\\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\\nsnippet mm\\n\t@ManyToMany\\n\t${1}\\nsnippet mo\\n\t@ManyToOne\\n\t${1}\\nsnippet om\\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\t${2}\\nsnippet oo\\n\t@OneToOne\\n\t${1}\\n##\\n## Basic Java packages and import\\nsnippet im\\n\timport\\nsnippet j.b\\n\tjava.beans.\\nsnippet j.i\\n\tjava.io.\\nsnippet j.m\\n\tjava.math.\\nsnippet j.n\\n\tjava.net.\\nsnippet j.u\\n\tjava.util.\\n##\\n## Class\\nsnippet cl\\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\\nsnippet in\\n\tinterface ${1:`Filename(\"\", \"untitled\")`} ${2:extends Parent}${3}\\nsnippet tc\\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n##\\n## Class Enhancements\\nsnippet ext\\n\textends \\nsnippet imp\\n\timplements\\n##\\n## Comments\\nsnippet /*\\n\t/*\\n\t * ${1}\\n\t */\\n##\\n## Constants\\nsnippet co\\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\\nsnippet cos\\n\tstatic public final String ${1:var} = \"${2}\";${3}\\n##\\n## Control Statements\\nsnippet case\\n\tcase ${1}:\\n\t\t${2}\\nsnippet def\\n\tdefault:\\n\t\t${2}\\nsnippet el\\n\telse\\nsnippet elif\\n\telse if (${1}) ${2}\\nsnippet if\\n\tif (${1}) ${2}\\nsnippet sw\\n\tswitch (${1}) {\\n\t\t${2}\\n\t}\\n##\\n## Create a Method\\nsnippet m\\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n##\\n## Create a Variable\\nsnippet v\\n\t${1:String} ${2:var}${3: = null}${4};${5}\\n##\\n## Enhancements to Methods, variables, classes, etc.\\nsnippet ab\\n\tabstract\\nsnippet fi\\n\tfinal\\nsnippet st\\n\tstatic\\nsnippet sy\\n\tsynchronized\\n##\\n## Error Methods\\nsnippet err\\n\tSystem.err.print(\"${1:Message}\");\\nsnippet errf\\n\tSystem.err.printf(\"${1:Message}\", ${2:exception});\\nsnippet errln\\n\tSystem.err.println(\"${1:Message}\");\\n##\\n## Exception Handling\\nsnippet as\\n\tassert ${1:test} : \"${2:Failure message}\";${3}\\nsnippet ca\\n\tcatch(${1:Exception} ${2:e}) ${3}\\nsnippet thr\\n\tthrow\\nsnippet ths\\n\tthrows\\nsnippet try\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t}\\nsnippet tryf\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t} finally {\\n\t}\\n##\\n## Find Methods\\nsnippet findall\\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\nsnippet findbyid\\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n##\\n## Javadocs\\nsnippet /**\\n\t/**\\n\t * ${1}\\n\t */\\nsnippet @au\\n\t@author `system(\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\":\\\\\" -f5 | cut -d \\\\\",\\\\\" -f1\")`\\nsnippet @br\\n\t@brief ${1:Description}\\nsnippet @fi\\n\t@file ${1:`Filename()`}.java\\nsnippet @pa\\n\t@param ${1:param}\\nsnippet @re\\n\t@return ${1:param}\\n##\\n## Logger Methods\\nsnippet debug\\n\tLogger.debug(${1:param});${2}\\nsnippet error\\n\tLogger.error(${1:param});${2}\\nsnippet info\\n\tLogger.info(${1:param});${2}\\nsnippet warn\\n\tLogger.warn(${1:param});${2}\\n##\\n## Loops\\nsnippet enfor\\n\tfor (${1} : ${2}) ${3}\\nsnippet for\\n\tfor (${1}; ${2}; ${3}) ${4}\\nsnippet wh\\n\twhile (${1}) ${2}\\n##\\n## Main method\\nsnippet main\\n\tpublic static void main (String[] args) {\\n\t\t${1:/* code */}\\n\t}\\n##\\n## Print Methods\\nsnippet print\\n\tSystem.out.print(\"${1:Message}\");\\nsnippet printf\\n\tSystem.out.printf(\"${1:Message}\", ${2:args});\\nsnippet println\\n\tSystem.out.println(${1});\\n##\\n## Render Methods\\nsnippet ren\\n\trender(${1:param});${2}\\nsnippet rena\\n\trenderArgs.put(\"${1}\", ${2});${3}\\nsnippet renb\\n\trenderBinary(${1:param});${2}\\nsnippet renj\\n\trenderJSON(${1:param});${2}\\nsnippet renx\\n\trenderXml(${1:param});${2}\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\t${1:public} void set${3:}(${2:String} ${4:}){\\n\t\tthis.$4 = $4;\\n\t}\\nsnippet get\\n\t${1:public} ${2:String} get${3:}(){\\n\t\treturn this.${4:};\\n\t}\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\treturn\\nsnippet br\\n\tbreak;\\n##\\n## Test Methods\\nsnippet t\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\nsnippet test\\n\t@Test\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\n##\\n## Utils\\nsnippet Sc\\n\tScanner\\n##\\n## Miscellaneous\\nsnippet action\\n\tpublic static void ${1:index}(${2:args}) { ${3} }\\nsnippet rnf\\n\tnotFound(${1:param});${2}\\nsnippet rnfin\\n\tnotFoundIfNull(${1:param});${2}\\nsnippet rr\\n\tredirect(${1:param});${2}\\nsnippet ru\\n\tunauthorized(${1:param});${2}\\nsnippet unless\\n\t(unless=${1:param});${2}\\n',t.scope=\"java\"});                (function() {\n                    ace.require([\"ace/snippets/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/javascript.js",
    "content": "ace.define(\"ace/snippets/javascript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Prototype\\nsnippet proto\\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\\n\t\t${4:// body...}\\n\t};\\n# Function\\nsnippet fun\\n\tfunction ${1?:function_name}(${2:argument}) {\\n\t\t${3:// body...}\\n\t}\\n# Anonymous Function\\nregex /((=)\\\\s*|(:)\\\\s*|(\\\\()|\\\\b)/f/(\\\\))?/\\nsnippet f\\n\tfunction${M1?: ${1:functionName}}($2) {\\n\t\t${0:$TM_SELECTED_TEXT}\\n\t}${M2?;}${M3?,}${M4?)}\\n# Immediate function\\ntrigger \\\\(?f\\\\(\\nendTrigger \\\\)?\\nsnippet f(\\n\t(function(${1}) {\\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\\n\t}(${1}));\\n# if\\nsnippet if\\n\tif (${1:true}) {\\n\t\t${0}\\n\t}\\n# if ... else\\nsnippet ife\\n\tif (${1:true}) {\\n\t\t${2}\\n\t} else {\\n\t\t${0}\\n\t}\\n# tertiary conditional\\nsnippet ter\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\n# switch\\nsnippet switch\\n\tswitch (${1:expression}) {\\n\t\tcase \\'${3:case}\\':\\n\t\t\t${4:// code}\\n\t\t\tbreak;\\n\t\t${5}\\n\t\tdefault:\\n\t\t\t${2:// code}\\n\t}\\n# case\\nsnippet case\\n\tcase \\'${1:case}\\':\\n\t\t${2:// code}\\n\t\tbreak;\\n\t${3}\\n\\n# while (...) {...}\\nsnippet wh\\n\twhile (${1:/* condition */}) {\\n\t\t${0:/* code */}\\n\t}\\n# try\\nsnippet try\\n\ttry {\\n\t\t${0:/* code */}\\n\t} catch (e) {}\\n# do...while\\nsnippet do\\n\tdo {\\n\t\t${2:/* code */}\\n\t} while (${1:/* condition */});\\n# Object Method\\nsnippet :f\\nregex /([,{[])|^\\\\s*/:f/\\n\t${1:method_name}: function(${2:attribute}) {\\n\t\t${0}\\n\t}${3:,}\\n# setTimeout function\\nsnippet setTimeout\\nregex /\\\\b/st|timeout|setTimeo?u?t?/\\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\\n# Get Elements\\nsnippet gett\\n\tgetElementsBy${1:TagName}(\\'${2}\\')${3}\\n# Get Element\\nsnippet get\\n\tgetElementBy${1:Id}(\\'${2}\\')${3}\\n# console.log (Firebug)\\nsnippet cl\\n\tconsole.log(${1});\\n# return\\nsnippet ret\\n\treturn ${1:result}\\n# for (property in object ) { ... }\\nsnippet fori\\n\tfor (var ${1:prop} in ${2:Things}) {\\n\t\t${0:$2[$1]}\\n\t}\\n# hasOwnProperty\\nsnippet has\\n\thasOwnProperty(${1})\\n# docstring\\nsnippet /**\\n\t/**\\n\t * ${1:description}\\n\t *\\n\t */\\nsnippet @par\\nregex /^\\\\s*\\\\*\\\\s*/@(para?m?)?/\\n\t@param {${1:type}} ${2:name} ${3:description}\\nsnippet @ret\\n\t@return {${1:type}} ${2:description}\\n# JSON.parse\\nsnippet jsonp\\n\tJSON.parse(${1:jstr});\\n# JSON.stringify\\nsnippet jsons\\n\tJSON.stringify(${1:object});\\n# self-defining function\\nsnippet sdf\\n\tvar ${1:function_name} = function(${2:argument}) {\\n\t\t${3:// initial code ...}\\n\\n\t\t$1 = function($2) {\\n\t\t\t${4:// main code}\\n\t\t};\\n\t}\\n# singleton\\nsnippet sing\\n\tfunction ${1:Singleton} (${2:argument}) {\\n\t\t// the cached instance\\n\t\tvar instance;\\n\\n\t\t// rewrite the constructor\\n\t\t$1 = function $1($2) {\\n\t\t\treturn instance;\\n\t\t};\\n\t\t\\n\t\t// carry over the prototype properties\\n\t\t$1.prototype = this;\\n\\n\t\t// the instance\\n\t\tinstance = new $1();\\n\\n\t\t// reset the constructor pointer\\n\t\tinstance.constructor = $1;\\n\\n\t\t${3:// code ...}\\n\\n\t\treturn instance;\\n\t}\\n# class\\nsnippet class\\nregex /^\\\\s*/clas{0,2}/\\n\tvar ${1:class} = function(${20}) {\\n\t\t$40$0\\n\t};\\n\t\\n\t(function() {\\n\t\t${60:this.prop = \"\"}\\n\t}).call(${1:class}.prototype);\\n\t\\n\texports.${1:class} = ${1:class};\\n# \\nsnippet for-\\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\\n\t\t${0:${2:Things}[${1:i}];}\\n\t}\\n# for (...) {...}\\nsnippet for\\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\\n\t\t${3:$2[$1]}$0\\n\t}\\n# for (...) {...} (Improved Native For-Loop)\\nsnippet forr\\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\\n\t\t${3:$2[$1]}$0\\n\t}\\n\\n\\n#modules\\nsnippet def\\n\tdefine(function(require, exports, module) {\\n\t\"use strict\";\\n\tvar ${1/.*\\\\///} = require(\"${1}\");\\n\t\\n\t$TM_SELECTED_TEXT\\n\t});\\nsnippet req\\nguard ^\\\\s*\\n\tvar ${1/.*\\\\///} = require(\"${1}\");\\n\t$0\\nsnippet requ\\nguard ^\\\\s*\\n\tvar ${1/.*\\\\/(.)/\\\\u$1/} = require(\"${1}\").${1/.*\\\\/(.)/\\\\u$1/};\\n\t$0\\n',t.scope=\"javascript\"});                (function() {\n                    ace.require([\"ace/snippets/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/json.js",
    "content": "ace.define(\"ace/snippets/json\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"json\"});                (function() {\n                    ace.require([\"ace/snippets/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/jsoniq.js",
    "content": "ace.define(\"ace/snippets/jsoniq\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet for\\n\tfor $${1:item} in ${2:expr}\\nsnippet return\\n\treturn ${1:expr}\\nsnippet import\\n\timport module namespace ${1:ns} = \"${2:http://www.example.com/}\";\\nsnippet some\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet every\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet if\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\nsnippet switch\\n\tswitch(${1:\"foo\"})\\n\tcase ${2:\"foo\"}\\n\treturn ${3:true}\\n\tdefault return ${4:false}\\nsnippet try\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\nsnippet tumbling\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet sliding\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet let\\n\tlet $${1:varname} := ${2:expr}\\nsnippet group\\n\tgroup by $${1:varname} := ${2:expr}\\nsnippet order\\n\torder by ${1:expr} ${2:descending}\\nsnippet stable\\n\tstable order by ${1:expr}\\nsnippet count\\n\tcount $${1:varname}\\nsnippet ordered\\n\tordered { ${1:expr} }\\nsnippet unordered\\n\tunordered { ${1:expr} }\\nsnippet treat \\n\ttreat as ${1:expr}\\nsnippet castable\\n\tcastable as ${1:atomicType}\\nsnippet cast\\n\tcast as ${1:atomicType}\\nsnippet typeswitch\\n\ttypeswitch(${1:expr})\\n\tcase ${2:type}  return ${3:expr}\\n\tdefault return ${4:expr}\\nsnippet var\\n\tdeclare variable $${1:varname} := ${2:expr};\\nsnippet fn\\n\tdeclare function ${1:ns}:${2:name}(){\\n\t${3:expr}\\n\t};\\nsnippet module\\n\tmodule namespace ${1:ns} = \"${2:http://www.example.com}\";\\n',t.scope=\"jsoniq\"});                (function() {\n                    ace.require([\"ace/snippets/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/jsp.js",
    "content": "ace.define(\"ace/snippets/jsp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet @page\\n\t<%@page contentType=\"text/html\" pageEncoding=\"UTF-8\"%>\\nsnippet jstl\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\\nsnippet jstl:c\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\\nsnippet jstl:fn\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\\nsnippet cpath\\n\t${pageContext.request.contextPath}\\nsnippet cout\\n\t<c:out value=\"${1}\" default=\"${2}\" />\\nsnippet cset\\n\t<c:set var=\"${1}\" value=\"${2}\" />\\nsnippet cremove\\n\t<c:remove var=\"${1}\" scope=\"${2:page}\" />\\nsnippet ccatch\\n\t<c:catch var=\"${1}\" />\\nsnippet cif\\n\t<c:if test=\"${${1}}\">\\n\t\t${2}\\n\t</c:if>\\nsnippet cchoose\\n\t<c:choose>\\n\t\t${1}\\n\t</c:choose>\\nsnippet cwhen\\n\t<c:when test=\"${${1}}\">\\n\t\t${2}\\n\t</c:when>\\nsnippet cother\\n\t<c:otherwise>\\n\t\t${1}\\n\t</c:otherwise>\\nsnippet cfore\\n\t<c:forEach items=\"${${1}}\" var=\"${2}\" varStatus=\"${3}\">\\n\t\t${4:<c:out value=\"$2\" />}\\n\t</c:forEach>\\nsnippet cfort\\n\t<c:set var=\"${1}\">${2:item1,item2,item3}</c:set>\\n\t<c:forTokens var=\"${3}\" items=\"${$1}\" delims=\"${4:,}\">\\n\t\t${5:<c:out value=\"$3\" />}\\n\t</c:forTokens>\\nsnippet cparam\\n\t<c:param name=\"${1}\" value=\"${2}\" />\\nsnippet cparam+\\n\t<c:param name=\"${1}\" value=\"${2}\" />\\n\tcparam+${3}\\nsnippet cimport\\n\t<c:import url=\"${1}\" />\\nsnippet cimport+\\n\t<c:import url=\"${1}\">\\n\t\t<c:param name=\"${2}\" value=\"${3}\" />\\n\t\tcparam+${4}\\n\t</c:import>\\nsnippet curl\\n\t<c:url value=\"${1}\" var=\"${2}\" />\\n\t<a href=\"${$2}\">${3}</a>\\nsnippet curl+\\n\t<c:url value=\"${1}\" var=\"${2}\">\\n\t\t<c:param name=\"${4}\" value=\"${5}\" />\\n\t\tcparam+${6}\\n\t</c:url>\\n\t<a href=\"${$2}\">${3}</a>\\nsnippet credirect\\n\t<c:redirect url=\"${1}\" />\\nsnippet contains\\n\t${fn:contains(${1:string}, ${2:substr})}\\nsnippet contains:i\\n\t${fn:containsIgnoreCase(${1:string}, ${2:substr})}\\nsnippet endswith\\n\t${fn:endsWith(${1:string}, ${2:suffix})}\\nsnippet escape\\n\t${fn:escapeXml(${1:string})}\\nsnippet indexof\\n\t${fn:indexOf(${1:string}, ${2:substr})}\\nsnippet join\\n\t${fn:join(${1:collection}, ${2:delims})}\\nsnippet length\\n\t${fn:length(${1:collection_or_string})}\\nsnippet replace\\n\t${fn:replace(${1:string}, ${2:substr}, ${3:replace})}\\nsnippet split\\n\t${fn:split(${1:string}, ${2:delims})}\\nsnippet startswith\\n\t${fn:startsWith(${1:string}, ${2:prefix})}\\nsnippet substr\\n\t${fn:substring(${1:string}, ${2:begin}, ${3:end})}\\nsnippet substr:a\\n\t${fn:substringAfter(${1:string}, ${2:substr})}\\nsnippet substr:b\\n\t${fn:substringBefore(${1:string}, ${2:substr})}\\nsnippet lc\\n\t${fn:toLowerCase(${1:string})}\\nsnippet uc\\n\t${fn:toUpperCase(${1:string})}\\nsnippet trim\\n\t${fn:trim(${1:string})}\\n',t.scope=\"jsp\"});                (function() {\n                    ace.require([\"ace/snippets/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/jssm.js",
    "content": "ace.define(\"ace/snippets/jssm\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/jsx.js",
    "content": "ace.define(\"ace/snippets/jsx\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"jsx\"});                (function() {\n                    ace.require([\"ace/snippets/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/julia.js",
    "content": "ace.define(\"ace/snippets/julia\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"julia\"});                (function() {\n                    ace.require([\"ace/snippets/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/kotlin.js",
    "content": "ace.define(\"ace/snippets/kotlin\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/latex.js",
    "content": "ace.define(\"ace/snippets/latex\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"latex\"});                (function() {\n                    ace.require([\"ace/snippets/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/less.js",
    "content": "ace.define(\"ace/snippets/less\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"less\"});                (function() {\n                    ace.require([\"ace/snippets/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/liquid.js",
    "content": "ace.define(\"ace/snippets/liquid\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='\\n# liquid specific snippets\\nsnippet ife\\n\t{% if ${1:condition} %}\\n\\n\t{% else %}\\n\\n\t{% endif %}\\nsnippet if\\n\t{% if ${1:condition} %}\\n\t\t\\n\t{% endif %}\\nsnippet for\\n\t{% for in ${1:iterator} %}\\n\\n\t{% endfor %}\\nsnippet capture\\n\t{% capture ${1} %}\\n\\n\t{% endcapture %}\\nsnippet comment\\n\t{% comment %}\\n\t  ${1:comment}\\n\t{% endcomment %}\\n\\n# Include html.snippets\\n# Some useful Unicode entities\\n# Non-Breaking Space\\nsnippet nbs\\n\t&nbsp;\\n# \\u2190\\nsnippet left\\n\t&#x2190;\\n# \\u2192\\nsnippet right\\n\t&#x2192;\\n# \\u2191\\nsnippet up\\n\t&#x2191;\\n# \\u2193\\nsnippet down\\n\t&#x2193;\\n# \\u21a9\\nsnippet return\\n\t&#x21A9;\\n# \\u21e4\\nsnippet backtab\\n\t&#x21E4;\\n# \\u21e5\\nsnippet tab\\n\t&#x21E5;\\n# \\u21e7\\nsnippet shift\\n\t&#x21E7;\\n# \\u2303\\nsnippet ctrl\\n\t&#x2303;\\n# \\u2305\\nsnippet enter\\n\t&#x2305;\\n# \\u2318\\nsnippet cmd\\n\t&#x2318;\\n# \\u2325\\nsnippet option\\n\t&#x2325;\\n# \\u2326\\nsnippet delete\\n\t&#x2326;\\n# \\u232b\\nsnippet backspace\\n\t&#x232B;\\n# \\u238b\\nsnippet esc\\n\t&#x238B;\\n# Generic Doctype\\nsnippet doctype HTML 4.01 Strict\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\nsnippet doctype HTML 4.01 Transitional\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\nsnippet doctype HTML 5\\n\t<!DOCTYPE HTML>\\nsnippet doctype XHTML 1.0 Frameset\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Strict\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Transitional\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\nsnippet doctype XHTML 1.1\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# HTML Doctype 4.01 Strict\\nsnippet docts\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\n# HTML Doctype 4.01 Transitional\\nsnippet doct\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\n# HTML Doctype 5\\nsnippet doct5\\n\t<!DOCTYPE html>\\n# XHTML Doctype 1.0 Frameset\\nsnippet docxf\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\\n# XHTML Doctype 1.0 Strict\\nsnippet docxs\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\n# XHTML Doctype 1.0 Transitional\\nsnippet docxt\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\n# XHTML Doctype 1.1\\nsnippet docx\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# html5shiv\\nsnippet html5shiv\\n\t<!--[if lte IE 8]>\\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\"><\\/script>\\n\t<![endif]-->\\nsnippet html5printshiv\\n\t<!--[if lte IE 8]>\\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\"><\\/script>\\n\t<![endif]-->\\n# Attributes\\nsnippet attr\\n\t${1:attribute}=\"${2:property}\"\\nsnippet attr+\\n\t${1:attribute}=\"${2:property}\" attr+${3}\\nsnippet .\\n\tclass=\"${1}\"${2}\\nsnippet #\\n\tid=\"${1}\"${2}\\nsnippet alt\\n\talt=\"${1}\"${2}\\nsnippet charset\\n\tcharset=\"${1:utf-8}\"${2}\\nsnippet data\\n\tdata-${1}=\"${2:$1}\"${3}\\nsnippet for\\n\tfor=\"${1}\"${2}\\nsnippet height\\n\theight=\"${1}\"${2}\\nsnippet href\\n\thref=\"${1:#}\"${2}\\nsnippet lang\\n\tlang=\"${1:en}\"${2}\\nsnippet media\\n\tmedia=\"${1}\"${2}\\nsnippet name\\n\tname=\"${1}\"${2}\\nsnippet rel\\n\trel=\"${1}\"${2}\\nsnippet scope\\n\tscope=\"${1:row}\"${2}\\nsnippet src\\n\tsrc=\"${1}\"${2}\\nsnippet title=\\n\ttitle=\"${1}\"${2}\\nsnippet type\\n\ttype=\"${1}\"${2}\\nsnippet value\\n\tvalue=\"${1}\"${2}\\nsnippet width\\n\twidth=\"${1}\"${2}\\n# Elements\\nsnippet a\\n\t<a href=\"${1:#}\">${2:$1}</a>\\nsnippet a.\\n\t<a class=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a#\\n\t<a id=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a:ext\\n\t<a href=\"http://${1:example.com}\">${2:$1}</a>\\nsnippet a:mail\\n\t<a href=\"mailto:${1:joe@example.com}?subject=${2:feedback}\">${3:email me}</a>\\nsnippet abbr\\n\t<abbr title=\"${1}\">${2}</abbr>\\nsnippet address\\n\t<address>\\n\t\t${1}\\n\t</address>\\nsnippet area\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\nsnippet area+\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\n\tarea+${5}\\nsnippet area:c\\n\t<area shape=\"circle\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:d\\n\t<area shape=\"default\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:p\\n\t<area shape=\"poly\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:r\\n\t<area shape=\"rect\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet article\\n\t<article>\\n\t\t${1}\\n\t</article>\\nsnippet article.\\n\t<article class=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet article#\\n\t<article id=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet aside\\n\t<aside>\\n\t\t${1}\\n\t</aside>\\nsnippet aside.\\n\t<aside class=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet aside#\\n\t<aside id=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet audio\\n\t<audio src=\"${1}>${2}</audio>\\nsnippet b\\n\t<b>${1}</b>\\nsnippet base\\n\t<base href=\"${1}\" target=\"${2}\" />\\nsnippet bdi\\n\t<bdi>${1}</bdo>\\nsnippet bdo\\n\t<bdo dir=\"${1}\">${2}</bdo>\\nsnippet bdo:l\\n\t<bdo dir=\"ltr\">${1}</bdo>\\nsnippet bdo:r\\n\t<bdo dir=\"rtl\">${1}</bdo>\\nsnippet blockquote\\n\t<blockquote>\\n\t\t${1}\\n\t</blockquote>\\nsnippet body\\n\t<body>\\n\t\t${1}\\n\t</body>\\nsnippet br\\n\t<br />${1}\\nsnippet button\\n\t<button type=\"${1:submit}\">${2}</button>\\nsnippet button.\\n\t<button class=\"${1:button}\" type=\"${2:submit}\">${3}</button>\\nsnippet button#\\n\t<button id=\"${1}\" type=\"${2:submit}\">${3}</button>\\nsnippet button:s\\n\t<button type=\"submit\">${1}</button>\\nsnippet button:r\\n\t<button type=\"reset\">${1}</button>\\nsnippet canvas\\n\t<canvas>\\n\t\t${1}\\n\t</canvas>\\nsnippet caption\\n\t<caption>${1}</caption>\\nsnippet cite\\n\t<cite>${1}</cite>\\nsnippet code\\n\t<code>${1}</code>\\nsnippet col\\n\t<col />${1}\\nsnippet col+\\n\t<col />\\n\tcol+${1}\\nsnippet colgroup\\n\t<colgroup>\\n\t\t${1}\\n\t</colgroup>\\nsnippet colgroup+\\n\t<colgroup>\\n\t\t<col />\\n\t\tcol+${1}\\n\t</colgroup>\\nsnippet command\\n\t<command type=\"command\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:c\\n\t<command type=\"checkbox\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:r\\n\t<command type=\"radio\" radiogroup=\"${1}\" label=\"${2}\" icon=\"${3}\" />\\nsnippet datagrid\\n\t<datagrid>\\n\t\t${1}\\n\t</datagrid>\\nsnippet datalist\\n\t<datalist>\\n\t\t${1}\\n\t</datalist>\\nsnippet datatemplate\\n\t<datatemplate>\\n\t\t${1}\\n\t</datatemplate>\\nsnippet dd\\n\t<dd>${1}</dd>\\nsnippet dd.\\n\t<dd class=\"${1}\">${2}</dd>\\nsnippet dd#\\n\t<dd id=\"${1}\">${2}</dd>\\nsnippet del\\n\t<del>${1}</del>\\nsnippet details\\n\t<details>${1}</details>\\nsnippet dfn\\n\t<dfn>${1}</dfn>\\nsnippet dialog\\n\t<dialog>\\n\t\t${1}\\n\t</dialog>\\nsnippet div\\n\t<div>\\n\t\t${1}\\n\t</div>\\nsnippet div.\\n\t<div class=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet div#\\n\t<div id=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet dl\\n\t<dl>\\n\t\t${1}\\n\t</dl>\\nsnippet dl.\\n\t<dl class=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl#\\n\t<dl id=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl+\\n\t<dl>\\n\t\t<dt>${1}</dt>\\n\t\t<dd>${2}</dd>\\n\t\tdt+${3}\\n\t</dl>\\nsnippet dt\\n\t<dt>${1}</dt>\\nsnippet dt.\\n\t<dt class=\"${1}\">${2}</dt>\\nsnippet dt#\\n\t<dt id=\"${1}\">${2}</dt>\\nsnippet dt+\\n\t<dt>${1}</dt>\\n\t<dd>${2}</dd>\\n\tdt+${3}\\nsnippet em\\n\t<em>${1}</em>\\nsnippet embed\\n\t<embed src=${1} type=\"${2} />\\nsnippet fieldset\\n\t<fieldset>\\n\t\t${1}\\n\t</fieldset>\\nsnippet fieldset.\\n\t<fieldset class=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset#\\n\t<fieldset id=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset+\\n\t<fieldset>\\n\t\t<legend><span>${1}</span></legend>\\n\t\t${2}\\n\t</fieldset>\\n\tfieldset+${3}\\nsnippet figcaption\\n\t<figcaption>${1}</figcaption>\\nsnippet figure\\n\t<figure>${1}</figure>\\nsnippet footer\\n\t<footer>\\n\t\t${1}\\n\t</footer>\\nsnippet footer.\\n\t<footer class=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet footer#\\n\t<footer id=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet form\\n\t<form action=\"${1}\" method=\"${2:get}\" accept-charset=\"utf-8\">\\n\t\t${3}\\n\t</form>\\nsnippet form.\\n\t<form class=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet form#\\n\t<form id=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet h1\\n\t<h1>${1}</h1>\\nsnippet h1.\\n\t<h1 class=\"${1}\">${2}</h1>\\nsnippet h1#\\n\t<h1 id=\"${1}\">${2}</h1>\\nsnippet h2\\n\t<h2>${1}</h2>\\nsnippet h2.\\n\t<h2 class=\"${1}\">${2}</h2>\\nsnippet h2#\\n\t<h2 id=\"${1}\">${2}</h2>\\nsnippet h3\\n\t<h3>${1}</h3>\\nsnippet h3.\\n\t<h3 class=\"${1}\">${2}</h3>\\nsnippet h3#\\n\t<h3 id=\"${1}\">${2}</h3>\\nsnippet h4\\n\t<h4>${1}</h4>\\nsnippet h4.\\n\t<h4 class=\"${1}\">${2}</h4>\\nsnippet h4#\\n\t<h4 id=\"${1}\">${2}</h4>\\nsnippet h5\\n\t<h5>${1}</h5>\\nsnippet h5.\\n\t<h5 class=\"${1}\">${2}</h5>\\nsnippet h5#\\n\t<h5 id=\"${1}\">${2}</h5>\\nsnippet h6\\n\t<h6>${1}</h6>\\nsnippet h6.\\n\t<h6 class=\"${1}\">${2}</h6>\\nsnippet h6#\\n\t<h6 id=\"${1}\">${2}</h6>\\nsnippet head\\n\t<head>\\n\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\\n\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t${2}\\n\t</head>\\nsnippet header\\n\t<header>\\n\t\t${1}\\n\t</header>\\nsnippet header.\\n\t<header class=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet header#\\n\t<header id=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet hgroup\\n\t<hgroup>\\n\t\t${1}\\n\t</hgroup>\\nsnippet hgroup.\\n\t<hgroup class=\"${1}>\\n\t\t${2}\\n\t</hgroup>\\nsnippet hr\\n\t<hr />${1}\\nsnippet html\\n\t<html>\\n\t${1}\\n\t</html>\\nsnippet xhtml\\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\\n\t${1}\\n\t</html>\\nsnippet html5\\n\t<!DOCTYPE html>\\n\t<html>\\n\t\t<head>\\n\t\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\t\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t\t${2:meta}\\n\t\t</head>\\n\t\t<body>\\n\t\t\t${3:body}\\n\t\t</body>\\n\t</html>\\nsnippet xhtml5\\n\t<!DOCTYPE html>\\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\\n\t\t<head>\\n\t\t\t<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=utf-8\" />\\n\t\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t\t${2:meta}\\n\t\t</head>\\n\t\t<body>\\n\t\t\t${3:body}\\n\t\t</body>\\n\t</html>\\nsnippet i\\n\t<i>${1}</i>\\nsnippet iframe\\n\t<iframe src=\"${1}\" frameborder=\"0\"></iframe>${2}\\nsnippet iframe.\\n\t<iframe class=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet iframe#\\n\t<iframe id=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet img\\n\t<img src=\"${1}\" alt=\"${2}\" />${3}\\nsnippet img.\\n\t<img class=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet img#\\n\t<img id=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet input\\n\t<input type=\"${1:text/submit/hidden/button/image}\" name=\"${2}\" id=\"${3:$2}\" value=\"${4}\" />${5}\\nsnippet input.\\n\t<input class=\"${1}\" type=\"${2:text/submit/hidden/button/image}\" name=\"${3}\" id=\"${4:$3}\" value=\"${5}\" />${6}\\nsnippet input:text\\n\t<input type=\"text\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:submit\\n\t<input type=\"submit\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:hidden\\n\t<input type=\"hidden\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:button\\n\t<input type=\"button\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:image\\n\t<input type=\"image\" name=\"${1}\" id=\"${2:$1}\" src=\"${3}\" alt=\"${4}\" />${5}\\nsnippet input:checkbox\\n\t<input type=\"checkbox\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:radio\\n\t<input type=\"radio\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:color\\n\t<input type=\"color\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:date\\n\t<input type=\"date\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime\\n\t<input type=\"datetime\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime-local\\n\t<input type=\"datetime-local\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:email\\n\t<input type=\"email\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:file\\n\t<input type=\"file\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:month\\n\t<input type=\"month\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:number\\n\t<input type=\"number\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:password\\n\t<input type=\"password\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:range\\n\t<input type=\"range\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:reset\\n\t<input type=\"reset\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:search\\n\t<input type=\"search\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:time\\n\t<input type=\"time\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:url\\n\t<input type=\"url\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:week\\n\t<input type=\"week\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet ins\\n\t<ins>${1}</ins>\\nsnippet kbd\\n\t<kbd>${1}</kbd>\\nsnippet keygen\\n\t<keygen>${1}</keygen>\\nsnippet label\\n\t<label for=\"${2:$1}\">${1}</label>\\nsnippet label:i\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<input type=\"${3:text/submit/hidden/button}\" name=\"${4:$2}\" id=\"${5:$2}\" value=\"${6}\" />${7}\\nsnippet label:s\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<select name=\"${3:$2}\" id=\"${4:$2}\">\\n\t\t<option value=\"${5}\">${6:$5}</option>\\n\t</select>\\nsnippet legend\\n\t<legend>${1}</legend>\\nsnippet legend+\\n\t<legend><span>${1}</span></legend>\\nsnippet li\\n\t<li>${1}</li>\\nsnippet li.\\n\t<li class=\"${1}\">${2}</li>\\nsnippet li+\\n\t<li>${1}</li>\\n\tli+${2}\\nsnippet lia\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\nsnippet lia+\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\n\tlia+${3}\\nsnippet link\\n\t<link rel=\"${1}\" href=\"${2}\" title=\"${3}\" type=\"${4}\" />${5}\\nsnippet link:atom\\n\t<link rel=\"alternate\" href=\"${1:atom.xml}\" title=\"Atom\" type=\"application/atom+xml\" />${2}\\nsnippet link:css\\n\t<link rel=\"stylesheet\" href=\"${2:style.css}\" type=\"text/css\" media=\"${3:all}\" />${4}\\nsnippet link:favicon\\n\t<link rel=\"shortcut icon\" href=\"${1:favicon.ico}\" type=\"image/x-icon\" />${2}\\nsnippet link:rss\\n\t<link rel=\"alternate\" href=\"${1:rss.xml}\" title=\"RSS\" type=\"application/atom+xml\" />${2}\\nsnippet link:touch\\n\t<link rel=\"apple-touch-icon\" href=\"${1:favicon.png}\" />${2}\\nsnippet map\\n\t<map name=\"${1}\">\\n\t\t${2}\\n\t</map>\\nsnippet map.\\n\t<map class=\"${1}\" name=\"${2}\">\\n\t\t${3}\\n\t</map>\\nsnippet map#\\n\t<map name=\"${1}\" id=\"${2:$1}>\\n\t\t${3}\\n\t</map>\\nsnippet map+\\n\t<map name=\"${1}\">\\n\t\t<area shape=\"${2}\" coords=\"${3}\" href=\"${4}\" alt=\"${5}\" />${6}\\n\t</map>${7}\\nsnippet mark\\n\t<mark>${1}</mark>\\nsnippet menu\\n\t<menu>\\n\t\t${1}\\n\t</menu>\\nsnippet menu:c\\n\t<menu type=\"context\">\\n\t\t${1}\\n\t</menu>\\nsnippet menu:t\\n\t<menu type=\"toolbar\">\\n\t\t${1}\\n\t</menu>\\nsnippet meta\\n\t<meta http-equiv=\"${1}\" content=\"${2}\" />${3}\\nsnippet meta:compat\\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=${1:7,8,edge}\" />${3}\\nsnippet meta:refresh\\n\t<meta http-equiv=\"refresh\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meta:utf\\n\t<meta http-equiv=\"content-type\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meter\\n\t<meter>${1}</meter>\\nsnippet nav\\n\t<nav>\\n\t\t${1}\\n\t</nav>\\nsnippet nav.\\n\t<nav class=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet nav#\\n\t<nav id=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet noscript\\n\t<noscript>\\n\t\t${1}\\n\t</noscript>\\nsnippet object\\n\t<object data=\"${1}\" type=\"${2}\">\\n\t\t${3}\\n\t</object>${4}\\n# Embed QT Movie\\nsnippet movie\\n\t<object width=\"$2\" height=\"$3\" classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\"\\n\t codebase=\"http://www.apple.com/qtactivex/qtplugin.cab\">\\n\t\t<param name=\"src\" value=\"$1\" />\\n\t\t<param name=\"controller\" value=\"$4\" />\\n\t\t<param name=\"autoplay\" value=\"$5\" />\\n\t\t<embed src=\"${1:movie.mov}\"\\n\t\t\twidth=\"${2:320}\" height=\"${3:240}\"\\n\t\t\tcontroller=\"${4:true}\" autoplay=\"${5:true}\"\\n\t\t\tscale=\"tofit\" cache=\"true\"\\n\t\t\tpluginspage=\"http://www.apple.com/quicktime/download/\" />\\n\t</object>${6}\\nsnippet ol\\n\t<ol>\\n\t\t${1}\\n\t</ol>\\nsnippet ol.\\n\t<ol class=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol#\\n\t<ol id=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol+\\n\t<ol>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ol>\\nsnippet opt\\n\t<option value=\"${1}\">${2:$1}</option>\\nsnippet opt+\\n\t<option value=\"${1}\">${2:$1}</option>\\n\topt+${3}\\nsnippet optt\\n\t<option>${1}</option>\\nsnippet optgroup\\n\t<optgroup>\\n\t\t<option value=\"${1}\">${2:$1}</option>\\n\t\topt+${3}\\n\t</optgroup>\\nsnippet output\\n\t<output>${1}</output>\\nsnippet p\\n\t<p>${1}</p>\\nsnippet param\\n\t<param name=\"${1}\" value=\"${2}\" />${3}\\nsnippet pre\\n\t<pre>\\n\t\t${1}\\n\t</pre>\\nsnippet progress\\n\t<progress>${1}</progress>\\nsnippet q\\n\t<q>${1}</q>\\nsnippet rp\\n\t<rp>${1}</rp>\\nsnippet rt\\n\t<rt>${1}</rt>\\nsnippet ruby\\n\t<ruby>\\n\t\t<rp><rt>${1}</rt></rp>\\n\t</ruby>\\nsnippet s\\n\t<s>${1}</s>\\nsnippet samp\\n\t<samp>\\n\t\t${1}\\n\t</samp>\\nsnippet script\\n\t<script type=\"text/javascript\" charset=\"utf-8\">\\n\t\t${1}\\n\t<\\/script>\\nsnippet scriptsrc\\n\t<script src=\"${1}.js\" type=\"text/javascript\" charset=\"utf-8\"><\\/script>\\nsnippet newscript\\n\t<script type=\"application/javascript\" charset=\"utf-8\">\\n\t\t${1}\\n\t<\\/script>\\nsnippet newscriptsrc\\n\t<script src=\"${1}.js\" type=\"application/javascript\" charset=\"utf-8\"><\\/script>\\nsnippet section\\n\t<section>\\n\t\t${1}\\n\t</section>\\nsnippet section.\\n\t<section class=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet section#\\n\t<section id=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet select\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t${3}\\n\t</select>\\nsnippet select.\\n\t<select name=\"${1}\" id=\"${2:$1}\" class=\"${3}>\\n\t\t${4}\\n\t</select>\\nsnippet select+\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t<option value=\"${3}\">${4:$3}</option>\\n\t\topt+${5}\\n\t</select>\\nsnippet small\\n\t<small>${1}</small>\\nsnippet source\\n\t<source src=\"${1}\" type=\"${2}\" media=\"${3}\" />\\nsnippet span\\n\t<span>${1}</span>\\nsnippet strong\\n\t<strong>${1}</strong>\\nsnippet style\\n\t<style type=\"text/css\" media=\"${1:all}\">\\n\t\t${2}\\n\t</style>\\nsnippet sub\\n\t<sub>${1}</sub>\\nsnippet summary\\n\t<summary>\\n\t\t${1}\\n\t</summary>\\nsnippet sup\\n\t<sup>${1}</sup>\\nsnippet table\\n\t<table border=\"${1:0}\">\\n\t\t${2}\\n\t</table>\\nsnippet table.\\n\t<table class=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet table#\\n\t<table id=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet tbody\\n\t<tbody>\\n\t\t${1}\\n\t</tbody>\\nsnippet td\\n\t<td>${1}</td>\\nsnippet td.\\n\t<td class=\"${1}\">${2}</td>\\nsnippet td#\\n\t<td id=\"${1}\">${2}</td>\\nsnippet td+\\n\t<td>${1}</td>\\n\ttd+${2}\\nsnippet textarea\\n\t<textarea name=\"${1}\" id=${2:$1} rows=\"${3:8}\" cols=\"${4:40}\">${5}</textarea>${6}\\nsnippet tfoot\\n\t<tfoot>\\n\t\t${1}\\n\t</tfoot>\\nsnippet th\\n\t<th>${1}</th>\\nsnippet th.\\n\t<th class=\"${1}\">${2}</th>\\nsnippet th#\\n\t<th id=\"${1}\">${2}</th>\\nsnippet th+\\n\t<th>${1}</th>\\n\tth+${2}\\nsnippet thead\\n\t<thead>\\n\t\t${1}\\n\t</thead>\\nsnippet time\\n\t<time datetime=\"${1}\" pubdate=\"${2:$1}>${3:$1}</time>\\nsnippet title\\n\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\nsnippet tr\\n\t<tr>\\n\t\t${1}\\n\t</tr>\\nsnippet tr+\\n\t<tr>\\n\t\t<td>${1}</td>\\n\t\ttd+${2}\\n\t</tr>\\nsnippet track\\n\t<track src=\"${1}\" srclang=\"${2}\" label=\"${3}\" default=\"${4:default}>${5}</track>${6}\\nsnippet ul\\n\t<ul>\\n\t\t${1}\\n\t</ul>\\nsnippet ul.\\n\t<ul class=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul#\\n\t<ul id=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul+\\n\t<ul>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ul>\\nsnippet var\\n\t<var>${1}</var>\\nsnippet video\\n\t<video src=\"${1} height=\"${2}\" width=\"${3}\" preload=\"${5:none}\" autoplay=\"${6:autoplay}>${7}</video>${8}\\nsnippet wbr\\n\t<wbr />${1}\\n',t.scope=\"liquid\"});                (function() {\n                    ace.require([\"ace/snippets/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/lisp.js",
    "content": "ace.define(\"ace/snippets/lisp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"lisp\"});                (function() {\n                    ace.require([\"ace/snippets/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/livescript.js",
    "content": "ace.define(\"ace/snippets/livescript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"livescript\"});                (function() {\n                    ace.require([\"ace/snippets/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/logiql.js",
    "content": "ace.define(\"ace/snippets/logiql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"logiql\"});                (function() {\n                    ace.require([\"ace/snippets/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/logtalk.js",
    "content": "ace.define(\"ace/snippets/logtalk\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"logtalk\"});                (function() {\n                    ace.require([\"ace/snippets/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/lsl.js",
    "content": "ace.define(\"ace/snippets/lsl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet @\\n\t@${1:label};\\nsnippet CAMERA_ACTIVE\\n\tCAMERA_ACTIVE, ${1:integer isActive}, $0\\nsnippet CAMERA_BEHINDNESS_ANGLE\\n\tCAMERA_BEHINDNESS_ANGLE, ${1:float degrees}, $0\\nsnippet CAMERA_BEHINDNESS_LAG\\n\tCAMERA_BEHINDNESS_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_DISTANCE\\n\tCAMERA_DISTANCE, ${1:float meters}, $0\\nsnippet CAMERA_FOCUS\\n\tCAMERA_FOCUS, ${1:vector position}, $0\\nsnippet CAMERA_FOCUS_LAG\\n\tCAMERA_FOCUS_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_FOCUS_LOCKED\\n\tCAMERA_FOCUS_LOCKED, ${1:integer isLocked}, $0\\nsnippet CAMERA_FOCUS_OFFSET\\n\tCAMERA_FOCUS_OFFSET, ${1:vector meters}, $0\\nsnippet CAMERA_FOCUS_THRESHOLD\\n\tCAMERA_FOCUS_THRESHOLD, ${1:float meters}, $0\\nsnippet CAMERA_PITCH\\n\tCAMERA_PITCH, ${1:float degrees}, $0\\nsnippet CAMERA_POSITION\\n\tCAMERA_POSITION, ${1:vector position}, $0\\nsnippet CAMERA_POSITION_LAG\\n\tCAMERA_POSITION_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_POSITION_LOCKED\\n\tCAMERA_POSITION_LOCKED, ${1:integer isLocked}, $0\\nsnippet CAMERA_POSITION_THRESHOLD\\n\tCAMERA_POSITION_THRESHOLD, ${1:float meters}, $0\\nsnippet CHARACTER_AVOIDANCE_MODE\\n\tCHARACTER_AVOIDANCE_MODE, ${1:integer flags}, $0\\nsnippet CHARACTER_DESIRED_SPEED\\n\tCHARACTER_DESIRED_SPEED, ${1:float speed}, $0\\nsnippet CHARACTER_DESIRED_TURN_SPEED\\n\tCHARACTER_DESIRED_TURN_SPEED, ${1:float speed}, $0\\nsnippet CHARACTER_LENGTH\\n\tCHARACTER_LENGTH, ${1:float length}, $0\\nsnippet CHARACTER_MAX_TURN_RADIUS\\n\tCHARACTER_MAX_TURN_RADIUS, ${1:float radius}, $0\\nsnippet CHARACTER_ORIENTATION\\n\tCHARACTER_ORIENTATION, ${1:integer orientation}, $0\\nsnippet CHARACTER_RADIUS\\n\tCHARACTER_RADIUS, ${1:float radius}, $0\\nsnippet CHARACTER_STAY_WITHIN_PARCEL\\n\tCHARACTER_STAY_WITHIN_PARCEL, ${1:boolean stay}, $0\\nsnippet CHARACTER_TYPE\\n\tCHARACTER_TYPE, ${1:integer type}, $0\\nsnippet HTTP_BODY_MAXLENGTH\\n\tHTTP_BODY_MAXLENGTH, ${1:integer length}, $0\\nsnippet HTTP_CUSTOM_HEADER\\n\tHTTP_CUSTOM_HEADER, ${1:string name}, ${2:string value}, $0\\nsnippet HTTP_METHOD\\n\tHTTP_METHOD, ${1:string method}, $0\\nsnippet HTTP_MIMETYPE\\n\tHTTP_MIMETYPE, ${1:string mimeType}, $0\\nsnippet HTTP_PRAGMA_NO_CACHE\\n\tHTTP_PRAGMA_NO_CACHE, ${1:integer send_header}, $0\\nsnippet HTTP_VERBOSE_THROTTLE\\n\tHTTP_VERBOSE_THROTTLE, ${1:integer noisy}, $0\\nsnippet HTTP_VERIFY_CERT\\n\tHTTP_VERIFY_CERT, ${1:integer verify}, $0\\nsnippet RC_DATA_FLAGS\\n\tRC_DATA_FLAGS, ${1:integer flags}, $0\\nsnippet RC_DETECT_PHANTOM\\n\tRC_DETECT_PHANTOM, ${1:integer dectedPhantom}, $0\\nsnippet RC_MAX_HITS\\n\tRC_MAX_HITS, ${1:integer maxHits}, $0\\nsnippet RC_REJECT_TYPES\\n\tRC_REJECT_TYPES, ${1:integer filterMask}, $0\\nsnippet at_rot_target\\n\tat_rot_target(${1:integer handle}, ${2:rotation targetrot}, ${3:rotation ourrot})\\n\t{\\n\t\t$0\\n\t}\\nsnippet at_target\\n\tat_target(${1:integer tnum}, ${2:vector targetpos}, ${3:vector ourpos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet attach\\n\tattach(${1:key id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet changed\\n\tchanged(${1:integer change})\\n\t{\\n\t\t$0\\n\t}\\nsnippet collision\\n\tcollision(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet collision_end\\n\tcollision_end(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet collision_start\\n\tcollision_start(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet control\\n\tcontrol(${1:key id}, ${2:integer level}, ${3:integer edge})\\n\t{\\n\t\t$0\\n\t}\\nsnippet dataserver\\n\tdataserver(${1:key query_id}, ${2:string data})\\n\t{\\n\t\t$0\\n\t}\\nsnippet do\\n\tdo\\n\t{\\n\t\t$0\\n\t}\\n\twhile (${1:condition});\\nsnippet else\\n\telse\\n\t{\\n\t\t$0\\n\t}\\nsnippet email\\n\temail(${1:string time}, ${2:string address}, ${3:string subject}, ${4:string message}, ${5:integer num_left})\\n\t{\\n\t\t$0\\n\t}\\nsnippet experience_permissions\\n\texperience_permissions(${1:key agent_id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet experience_permissions_denied\\n\texperience_permissions_denied(${1:key agent_id}, ${2:integer reason})\\n\t{\\n\t\t$0\\n\t}\\nsnippet for\\n\tfor (${1:start}; ${3:condition}; ${3:step})\\n\t{\\n\t\t$0\\n\t}\\nsnippet http_request\\n\thttp_request(${1:key request_id}, ${2:string method}, ${3:string body})\\n\t{\\n\t\t$0\\n\t}\\nsnippet http_response\\n\thttp_response(${1:key request_id}, ${2:integer status}, ${3:list metadata}, ${4:string body})\\n\t{\\n\t\t$0\\n\t}\\nsnippet if\\n\tif (${1:condition})\\n\t{\\n\t\t$0\\n\t}\\nsnippet jump\\n\tjump ${1:label};\\nsnippet land_collision\\n\tland_collision(${1:vector pos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet land_collision_end\\n\tland_collision_end(${1:vector pos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet land_collision_start\\n\tland_collision_start(${1:vector pos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet link_message\\n\tlink_message(${1:integer sender_num}, ${2:integer num}, ${3:string str}, ${4:key id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet listen\\n\tlisten(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string message})\\n\t{\\n\t\t$0\\n\t}\\nsnippet llAbs\\n\tllAbs(${1:integer val})\\nsnippet llAcos\\n\tllAcos(${1:float val})\\nsnippet llAddToLandBanList\\n\tllAddToLandBanList(${1:key agent}, ${2:float hours});\\n\t$0\\nsnippet llAddToLandPassList\\n\tllAddToLandPassList(${1:key agent}, ${2:float hours});\\n\t$0\\nsnippet llAdjustSoundVolume\\n\tllAdjustSoundVolume(${1:float volume});\\n\t$0\\nsnippet llAgentInExperience\\n\tllAgentInExperience(${1:key agent})\\nsnippet llAllowInventoryDrop\\n\tllAllowInventoryDrop(${1:integer add});\\n\t$0\\nsnippet llAngleBetween\\n\tllAngleBetween(${1:rotation a}, ${2:rotation b})\\nsnippet llApplyImpulse\\n\tllApplyImpulse(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llApplyRotationalImpulse\\n\tllApplyRotationalImpulse(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llAsin\\n\tllAsin(${1:float val})\\nsnippet llAtan2\\n\tllAtan2(${1:float y}, ${2:float x})\\nsnippet llAttachToAvatar\\n\tllAttachToAvatar(${1:integer attach_point});\\n\t$0\\nsnippet llAttachToAvatarTemp\\n\tllAttachToAvatarTemp(${1:integer attach_point});\\n\t$0\\nsnippet llAvatarOnLinkSitTarget\\n\tllAvatarOnLinkSitTarget(${1:integer link})\\nsnippet llAvatarOnSitTarget\\n\tllAvatarOnSitTarget()\\nsnippet llAxes2Rot\\n\tllAxes2Rot(${1:vector fwd}, ${2:vector left}, ${3:vector up})\\nsnippet llAxisAngle2Rot\\n\tllAxisAngle2Rot(${1:vector axis}, ${2:float angle})\\nsnippet llBase64ToInteger\\n\tllBase64ToInteger(${1:string str})\\nsnippet llBase64ToString\\n\tllBase64ToString(${1:string str})\\nsnippet llBreakAllLinks\\n\tllBreakAllLinks();\\n\t$0\\nsnippet llBreakLink\\n\tllBreakLink(${1:integer link});\\n\t$0\\nsnippet llCastRay\\n\tllCastRay(${1:vector start}, ${2:vector end}, ${3:list options});\\n\t$0\\nsnippet llCeil\\n\tllCeil(${1:float val})\\nsnippet llClearCameraParams\\n\tllClearCameraParams();\\n\t$0\\nsnippet llClearLinkMedia\\n\tllClearLinkMedia(${1:integer link}, ${2:integer face});\\n\t$0\\nsnippet llClearPrimMedia\\n\tllClearPrimMedia(${1:integer face});\\n\t$0\\nsnippet llCloseRemoteDataChannel\\n\tllCloseRemoteDataChannel(${1:key channel});\\n\t$0\\nsnippet llCollisionFilter\\n\tllCollisionFilter(${1:string name}, ${2:key id}, ${3:integer accept});\\n\t$0\\nsnippet llCollisionSound\\n\tllCollisionSound(${1:string impact_sound}, ${2:float impact_volume});\\n\t$0\\nsnippet llCos\\n\tllCos(${1:float theta})\\nsnippet llCreateCharacter\\n\tllCreateCharacter(${1:list options});\\n\t$0\\nsnippet llCreateKeyValue\\n\tllCreateKeyValue(${1:string k})\\nsnippet llCreateLink\\n\tllCreateLink(${1:key target}, ${2:integer parent});\\n\t$0\\nsnippet llCSV2List\\n\tllCSV2List(${1:string src})\\nsnippet llDataSizeKeyValue\\n\tllDataSizeKeyValue()\\nsnippet llDeleteCharacter\\n\tllDeleteCharacter();\\n\t$0\\nsnippet llDeleteKeyValue\\n\tllDeleteKeyValue(${1:string k})\\nsnippet llDeleteSubList\\n\tllDeleteSubList(${1:list src}, ${2:integer start}, ${3:integer end})\\nsnippet llDeleteSubString\\n\tllDeleteSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\nsnippet llDetachFromAvatar\\n\tllDetachFromAvatar();\\n\t$0\\nsnippet llDetectedGrab\\n\tllDetectedGrab(${1:integer number})\\nsnippet llDetectedGroup\\n\tllDetectedGroup(${1:integer number})\\nsnippet llDetectedKey\\n\tllDetectedKey(${1:integer number})\\nsnippet llDetectedLinkNumber\\n\tllDetectedLinkNumber(${1:integer number})\\nsnippet llDetectedName\\n\tllDetectedName(${1:integer number})\\nsnippet llDetectedOwner\\n\tllDetectedOwner(${1:integer number})\\nsnippet llDetectedPos\\n\tllDetectedPosl(${1:integer number})\\nsnippet llDetectedRot\\n\tllDetectedRot(${1:integer number})\\nsnippet llDetectedTouchBinormal\\n\tllDetectedTouchBinormal(${1:integer number})\\nsnippet llDetectedTouchFace\\n\tllDetectedTouchFace(${1:integer number})\\nsnippet llDetectedTouchNormal\\n\tllDetectedTouchNormal(${1:integer number})\\nsnippet llDetectedTouchPos\\n\tllDetectedTouchPos(${1:integer number})\\nsnippet llDetectedTouchST\\n\tllDetectedTouchST(${1:integer number})\\nsnippet llDetectedTouchUV\\n\tllDetectedTouchUV(${1:integer number})\\nsnippet llDetectedType\\n\tllDetectedType(${1:integer number})\\nsnippet llDetectedVel\\n\tllDetectedVel(${1:integer number})\\nsnippet llDialog\\n\tllDialog(${1:key agent}, ${2:string message}, ${3:list buttons}, ${4:integer channel});\\n\t$0\\nsnippet llDie\\n\tllDie();\\n\t$0\\nsnippet llDumpList2String\\n\tllDumpList2String(${1:list src}, ${2:string separator})\\nsnippet llEdgeOfWorld\\n\tllEdgeOfWorld(${1:vector pos}, ${2:vector dir})\\nsnippet llEjectFromLand\\n\tllEjectFromLand(${1:key agent});\\n\t$0\\nsnippet llEmail\\n\tllEmail(${1:string address}, ${2:string subject}, ${3:string message});\\n\t$0\\nsnippet llEscapeURL\\n\tllEscapeURL(${1:string url})\\nsnippet llEuler2Rot\\n\tllEuler2Rot(${1:vector v})\\nsnippet llExecCharacterCmd\\n\tllExecCharacterCmd(${1:integer command}, ${2:list options});\\n\t$0\\nsnippet llEvade\\n\tllEvade(${1:key target}, ${2:list options});\\n\t$0\\nsnippet llFabs\\n\tllFabs(${1:float val})\\nsnippet llFleeFrom\\n\tllFleeFrom(${1:vector position}, ${2:float distance}, ${3:list options});\\n\t$0\\nsnippet llFloor\\n\tllFloor(${1:float val})\\nsnippet llForceMouselook\\n\tllForceMouselook(${1:integer mouselook});\\n\t$0\\nsnippet llFrand\\n\tllFrand(${1:float mag})\\nsnippet llGenerateKey\\n\tllGenerateKey()\\nsnippet llGetAccel\\n\tllGetAccel()\\nsnippet llGetAgentInfo\\n\tllGetAgentInfo(${1:key id})\\nsnippet llGetAgentLanguage\\n\tllGetAgentLanguage(${1:key agent})\\nsnippet llGetAgentList\\n\tllGetAgentList(${1:integer scope}, ${2:list options})\\nsnippet llGetAgentSize\\n\tllGetAgentSize(${1:key agent})\\nsnippet llGetAlpha\\n\tllGetAlpha(${1:integer face})\\nsnippet llGetAndResetTime\\n\tllGetAndResetTime()\\nsnippet llGetAnimation\\n\tllGetAnimation(${1:key id})\\nsnippet llGetAnimationList\\n\tllGetAnimationList(${1:key agent})\\nsnippet llGetAnimationOverride\\n\tllGetAnimationOverride(${1:string anim_state})\\nsnippet llGetAttached\\n\tllGetAttached()\\nsnippet llGetAttachedList\\n\tllGetAttachedList(${1:key id})\\nsnippet llGetBoundingBox\\n\tllGetBoundingBox(${1:key object})\\nsnippet llGetCameraPos\\n\tllGetCameraPos()\\nsnippet llGetCameraRot\\n\tllGetCameraRot()\\nsnippet llGetCenterOfMass\\n\tllGetCenterOfMass()\\nsnippet llGetClosestNavPoint\\n\tllGetClosestNavPoint(${1:vector point}, ${2:list options})\\nsnippet llGetColor\\n\tllGetColor(${1:integer face})\\nsnippet llGetCreator\\n\tllGetCreator()\\nsnippet llGetDate\\n\tllGetDate()\\nsnippet llGetDisplayName\\n\tllGetDisplayName(${1:key id})\\nsnippet llGetEnergy\\n\tllGetEnergy()\\nsnippet llGetEnv\\n\tllGetEnv(${1:string name})\\nsnippet llGetExperienceDetails\\n\tllGetExperienceDetails(${1:key experience_id})\\nsnippet llGetExperienceErrorMessage\\n\tllGetExperienceErrorMessage(${1:integer error})\\nsnippet llGetForce\\n\tllGetForce()\\nsnippet llGetFreeMemory\\n\tllGetFreeMemory()\\nsnippet llGetFreeURLs\\n\tllGetFreeURLs()\\nsnippet llGetGeometricCenter\\n\tllGetGeometricCenter()\\nsnippet llGetGMTclock\\n\tllGetGMTclock()\\nsnippet llGetHTTPHeader\\n\tllGetHTTPHeader(${1:key request_id}, ${2:string header})\\nsnippet llGetInventoryCreator\\n\tllGetInventoryCreator(${1:string item})\\nsnippet llGetInventoryKey\\n\tllGetInventoryKey(${1:string name})\\nsnippet llGetInventoryName\\n\tllGetInventoryName(${1:integer type}, ${2:integer number})\\nsnippet llGetInventoryNumber\\n\tllGetInventoryNumber(${1:integer type})\\nsnippet llGetInventoryPermMask\\n\tllGetInventoryPermMask(${1:string item}, ${2:integer mask})\\nsnippet llGetInventoryType\\n\tllGetInventoryType(${1:string name})\\nsnippet llGetKey\\n\tllGetKey()\\nsnippet llGetLandOwnerAt\\n\tllGetLandOwnerAt(${1:vector pos})\\nsnippet llGetLinkKey\\n\tllGetLinkKey(${1:integer link})\\nsnippet llGetLinkMedia\\n\tllGetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params})\\nsnippet llGetLinkName\\n\tllGetLinkName(${1:integer link})\\nsnippet llGetLinkNumber\\n\tllGetLinkNumber()\\nsnippet llGetLinkNumberOfSides\\n\tllGetLinkNumberOfSides(${1:integer link})\\nsnippet llGetLinkPrimitiveParams\\n\tllGetLinkPrimitiveParams(${1:integer link}, ${2:list params})\\nsnippet llGetListEntryType\\n\tllGetListEntryType(${1:list src}, ${2:integer index})\\nsnippet llGetListLength\\n\tllGetListLength(${1:list src})\\nsnippet llGetLocalPos\\n\tllGetLocalPos()\\nsnippet llGetLocalRot\\n\tllGetLocalRot()\\nsnippet llGetMass\\n\tllGetMass()\\nsnippet llGetMassMKS\\n\tllGetMassMKS()\\nsnippet llGetMaxScaleFactor\\n\tllGetMaxScaleFactor()\\nsnippet llGetMemoryLimit\\n\tllGetMemoryLimit()\\nsnippet llGetMinScaleFactor\\n\tllGetMinScaleFactor()\\nsnippet llGetNextEmail\\n\tllGetNextEmail(${1:string address}, ${2:string subject});\\n\t$0\\nsnippet llGetNotecardLine\\n\tllGetNotecardLine(${1:string name}, ${2:integer line})\\nsnippet llGetNumberOfNotecardLines\\n\tllGetNumberOfNotecardLines(${1:string name})\\nsnippet llGetNumberOfPrims\\n\tllGetNumberOfPrims()\\nsnippet llGetNumberOfSides\\n\tllGetNumberOfSides()\\nsnippet llGetObjectDesc\\n\tllGetObjectDesc()\\nsnippet llGetObjectDetails\\n\tllGetObjectDetails(${1:key id}, ${2:list params})\\nsnippet llGetObjectMass\\n\tllGetObjectMass(${1:key id})\\nsnippet llGetObjectName\\n\tllGetObjectName()\\nsnippet llGetObjectPermMask\\n\tllGetObjectPermMask(${1:integer mask})\\nsnippet llGetObjectPrimCount\\n\tllGetObjectPrimCount(${1:key prim})\\nsnippet llGetOmega\\n\tllGetOmega()\\nsnippet llGetOwner\\n\tllGetOwner()\\nsnippet llGetOwnerKey\\n\tllGetOwnerKey(${1:key id})\\nsnippet llGetParcelDetails\\n\tllGetParcelDetails(${1:vector pos}, ${2:list params})\\nsnippet llGetParcelFlags\\n\tllGetParcelFlags(${1:vector pos})\\nsnippet llGetParcelMaxPrims\\n\tllGetParcelMaxPrims(${1:vector pos}, ${2:integer sim_wide})\\nsnippet llGetParcelMusicURL\\n\tllGetParcelMusicURL()\\nsnippet llGetParcelPrimCount\\n\tllGetParcelPrimCount(${1:vector pos}, ${2:integer category}, ${3:integer sim_wide})\\nsnippet llGetParcelPrimOwners\\n\tllGetParcelPrimOwners(${1:vector pos})\\nsnippet llGetPermissions\\n\tllGetPermissions()\\nsnippet llGetPermissionsKey\\n\tllGetPermissionsKey()\\nsnippet llGetPhysicsMaterial\\n\tllGetPhysicsMaterial()\\nsnippet llGetPos\\n\tllGetPos()\\nsnippet llGetPrimitiveParams\\n\tllGetPrimitiveParams(${1:list params})\\nsnippet llGetPrimMediaParams\\n\tllGetPrimMediaParams(${1:integer face}, ${2:list params})\\nsnippet llGetRegionAgentCount\\n\tllGetRegionAgentCount()\\nsnippet llGetRegionCorner\\n\tllGetRegionCorner()\\nsnippet llGetRegionFlags\\n\tllGetRegionFlags()\\nsnippet llGetRegionFPS\\n\tllGetRegionFPS()\\nsnippet llGetRegionName\\n\tllGetRegionName()\\nsnippet llGetRegionTimeDilation\\n\tllGetRegionTimeDilation()\\nsnippet llGetRootPosition\\n\tllGetRootPosition()\\nsnippet llGetRootRotation\\n\tllGetRootRotation()\\nsnippet llGetRot\\n\tllGetRot()\\nsnippet llGetScale\\n\tllGetScale()\\nsnippet llGetScriptName\\n\tllGetScriptName()\\nsnippet llGetScriptState\\n\tllGetScriptState(${1:string script})\\nsnippet llGetSimStats\\n\tllGetSimStats(${1:integer stat_type})\\nsnippet llGetSimulatorHostname\\n\tllGetSimulatorHostname()\\nsnippet llGetSPMaxMemory\\n\tllGetSPMaxMemory()\\nsnippet llGetStartParameter\\n\tllGetStartParameter()\\nsnippet llGetStaticPath\\n\tllGetStaticPath(${1:vector start}, ${2:vector end}, ${3:float radius}, ${4:list params})\\nsnippet llGetStatus\\n\tllGetStatus(${1:integer status})\\nsnippet llGetSubString\\n\tllGetSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\nsnippet llGetSunDirection\\n\tllGetSunDirection()\\nsnippet llGetTexture\\n\tllGetTexture(${1:integer face})\\nsnippet llGetTextureOffset\\n\tllGetTextureOffset(${1:integer face})\\nsnippet llGetTextureRot\\n\tllGetTextureRot(${1:integer face})\\nsnippet llGetTextureScale\\n\tllGetTextureScale(${1:integer face})\\nsnippet llGetTime\\n\tllGetTime()\\nsnippet llGetTimeOfDay\\n\tllGetTimeOfDay()\\nsnippet llGetTimestamp\\n\tllGetTimestamp()\\nsnippet llGetTorque\\n\tllGetTorque()\\nsnippet llGetUnixTime\\n\tllGetUnixTime()\\nsnippet llGetUsedMemory\\n\tllGetUsedMemory()\\nsnippet llGetUsername\\n\tllGetUsername(${1:key id})\\nsnippet llGetVel\\n\tllGetVel()\\nsnippet llGetWallclock\\n\tllGetWallclock()\\nsnippet llGiveInventory\\n\tllGiveInventory(${1:key destination}, ${2:string inventory});\\n\t$0\\nsnippet llGiveInventoryList\\n\tllGiveInventoryList(${1:key target}, ${2:string folder}, ${3:list inventory});\\n\t$0\\nsnippet llGiveMoney\\n\tllGiveMoney(${1:key destination}, ${2:integer amount})\\nsnippet llGround\\n\tllGround(${1:vector offset})\\nsnippet llGroundContour\\n\tllGroundContour(${1:vector offset})\\nsnippet llGroundNormal\\n\tllGroundNormal(${1:vector offset})\\nsnippet llGroundRepel\\n\tllGroundRepel(${1:float height}, ${2:integer water}, ${3:float tau});\\n\t$0\\nsnippet llGroundSlope\\n\tllGroundSlope(${1:vector offset})\\nsnippet llHTTPRequest\\n\tllHTTPRequest(${1:string url}, ${2:list parameters}, ${3:string body})\\nsnippet llHTTPResponse\\n\tllHTTPResponse(${1:key request_id}, ${2:integer status}, ${3:string body});\\n\t$0\\nsnippet llInsertString\\n\tllInsertString(${1:string dst}, ${2:integer pos}, ${3:string src})\\nsnippet llInstantMessage\\n\tllInstantMessage(${1:key user}, ${2:string message});\\n\t$0\\nsnippet llIntegerToBase64\\n\tllIntegerToBase64(${1:integer number})\\nsnippet llJson2List\\n\tllJson2List(${1:string json})\\nsnippet llJsonGetValue\\n\tllJsonGetValue(${1:string json}, ${2:list specifiers})\\nsnippet llJsonSetValue\\n\tllJsonSetValue(${1:string json}, ${2:list specifiers}, ${3:string newValue})\\nsnippet llJsonValueType\\n\tllJsonValueType(${1:string json}, ${2:list specifiers})\\nsnippet llKey2Name\\n\tllKey2Name(${1:key id})\\nsnippet llKeyCountKeyValue\\n\tllKeyCountKeyValue()\\nsnippet llKeysKeyValue\\n\tllKeysKeyValue(${1:integer first}, ${2:integer count})\\nsnippet llLinkParticleSystem\\n\tllLinkParticleSystem(${1:integer link}, ${2:list rules});\\n\t$0\\nsnippet llLinkSitTarget\\n\tllLinkSitTarget(${1:integer link}, ${2:vector offset}, ${3:rotation rot});\\n\t$0\\nsnippet llList2CSV\\n\tllList2CSV(${1:list src})\\nsnippet llList2Float\\n\tllList2Float(${1:list src}, ${2:integer index})\\nsnippet llList2Integer\\n\tllList2Integer(${1:list src}, ${2:integer index})\\nsnippet llList2Json\\n\tllList2Json(${1:string type}, ${2:list values})\\nsnippet llList2Key\\n\tllList2Key(${1:list src}, ${2:integer index})\\nsnippet llList2List\\n\tllList2List(${1:list src}, ${2:integer start}, ${3:integer end})\\nsnippet llList2ListStrided\\n\tllList2ListStrided(${1:list src}, ${2:integer start}, ${3:integer end}, ${4:integer stride})\\nsnippet llList2Rot\\n\tllList2Rot(${1:list src}, ${2:integer index})\\nsnippet llList2String\\n\tllList2String(${1:list src}, ${2:integer index})\\nsnippet llList2Vector\\n\tllList2Vector(${1:list src}, ${2:integer index})\\nsnippet llListen\\n\tllListen(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string msg})\\nsnippet llListenControl\\n\tllListenControl(${1:integer handle}, ${2:integer active});\\n\t$0\\nsnippet llListenRemove\\n\tllListenRemove(${1:integer handle});\\n\t$0\\nsnippet llListFindList\\n\tllListFindList(${1:list src}, ${2:list test})\\nsnippet llListInsertList\\n\tllListInsertList(${1:list dest}, ${2:list src}, ${3:integer start})\\nsnippet llListRandomize\\n\tllListRandomize(${1:list src}, ${2:integer stride})\\nsnippet llListReplaceList\\n\tllListReplaceList(${1:list dest}, ${2:list src}, ${3:integer start}, ${4:integer end})\\nsnippet llListSort\\n\tllListSort(${1:list src}, ${2:integer stride}, ${3:integer ascending})\\nsnippet llListStatistics\\n\tllListStatistics(${1:integer operation}, ${2:list src})\\nsnippet llLoadURL\\n\tllLoadURL(${1:key agent}, ${2:string message}, ${3:string url});\\n\t$0\\nsnippet llLog\\n\tllLog(${1:float val})\\nsnippet llLog10\\n\tllLog10(${1:float val})\\nsnippet llLookAt\\n\tllLookAt(${1:vector target}, ${2:float strength}, ${3:float damping});\\n\t$0\\nsnippet llLoopSound\\n\tllLoopSound(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llLoopSoundMaster\\n\tllLoopSoundMaster(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llLoopSoundSlave\\n\tllLoopSoundSlave(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llManageEstateAccess\\n\tllManageEstateAccess(${1:integer action}, ${2:key agent})\\nsnippet llMapDestination\\n\tllMapDestination(${1:string simname}, ${2:vector pos}, ${3:vector look_at});\\n\t$0\\nsnippet llMD5String\\n\tllMD5String(${1:string src}, ${2:integer nonce})\\nsnippet llMessageLinked\\n\tllMessageLinked(${1:integer link}, ${2:integer num}, ${3:string str}, ${4:key id});\\n\t$0\\nsnippet llMinEventDelay\\n\tllMinEventDelay(${1:float delay});\\n\t$0\\nsnippet llModifyLand\\n\tllModifyLand(${1:integer action}, ${2:integer brush});\\n\t$0\\nsnippet llModPow\\n\tllModPow(${1:integer a}, ${2:integer b}, ${3:integer c})\\nsnippet llMoveToTarget\\n\tllMoveToTarget(${1:vector target}, ${2:float tau});\\n\t$0\\nsnippet llNavigateTo\\n\tllNavigateTo(${1:vector pos}, ${2:list options});\\n\t$0\\nsnippet llOffsetTexture\\n\tllOffsetTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\t$0\\nsnippet llOpenRemoteDataChannel\\n\tllOpenRemoteDataChannel();\\n\t$0\\nsnippet llOverMyLand\\n\tllOverMyLand(${1:key id})\\nsnippet llOwnerSay\\n\tllOwnerSay(${1:string msg});\\n\t$0\\nsnippet llParcelMediaCommandList\\n\tllParcelMediaCommandList(${1:list commandList});\\n\t$0\\nsnippet llParcelMediaQuery\\n\tllParcelMediaQuery(${1:list query})\\nsnippet llParseString2List\\n\tllParseString2List(${1:string src}, ${2:list separators}, ${3:list spacers})\\nsnippet llParseStringKeepNulls\\n\tllParseStringKeepNulls(${1:string src}, ${2:list separators}, ${3:list spacers})\\nsnippet llParticleSystem\\n\tllParticleSystem(${1:list rules});\\n\t$0\\nsnippet llPassCollisions\\n\tllPassCollisions(${1:integer pass});\\n\t$0\\nsnippet llPassTouches\\n\tllPassTouches(${1:integer pass});\\n\t$0\\nsnippet llPatrolPoints\\n\tllPatrolPoints(${1:list patrolPoints}, ${2:list options});\\n\t$0\\nsnippet llPlaySound\\n\tllPlaySound(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llPlaySoundSlave\\n\tllPlaySoundSlave(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llPow\\n\tllPow(${1:float base}, ${2:float exponent})\\nsnippet llPreloadSound\\n\tllPreloadSound(${1:string sound});\\n\t$0\\nsnippet llPursue\\n\tllPursue(${1:key target}, ${2:list options});\\n\t$0\\nsnippet llPushObject\\n\tllPushObject(${1:key target}, ${2:vector impulse}, ${3:vector ang_impulse}, ${4:integer local});\\n\t$0\\nsnippet llReadKeyValue\\n\tllReadKeyValue(${1:string k})\\nsnippet llRegionSay\\n\tllRegionSay(${1:integer channel}, ${2:string msg});\\n\t$0\\nsnippet llRegionSayTo\\n\tllRegionSayTo(${1:key target}, ${2:integer channel}, ${3:string msg});\\n\t$0\\nsnippet llReleaseControls\\n\tllReleaseControls();\\n\t$0\\nsnippet llReleaseURL\\n\tllReleaseURL(${1:string url});\\n\t$0\\nsnippet llRemoteDataReply\\n\tllRemoteDataReply(${1:key channel}, ${2:key message_id}, ${3:string sdata}, ${4:integer idata});\\n\t$0\\nsnippet llRemoteLoadScriptPin\\n\tllRemoteLoadScriptPin(${1:key target}, ${2:string name}, ${3:integer pin}, ${4:integer running}, ${5:integer start_param});\\n\t$0\\nsnippet llRemoveFromLandBanList\\n\tllRemoveFromLandBanList(${1:key agent});\\n\t$0\\nsnippet llRemoveFromLandPassList\\n\tllRemoveFromLandPassList(${1:key agent});\\n\t$0\\nsnippet llRemoveInventory\\n\tllRemoveInventory(${1:string item});\\n\t$0\\nsnippet llRemoveVehicleFlags\\n\tllRemoveVehicleFlags(${1:integer flags});\\n\t$0\\nsnippet llRequestAgentData\\n\tllRequestAgentData(${1:key id}, ${2:integer data})\\nsnippet llRequestDisplayName\\n\tllRequestDisplayName(${1:key id})\\nsnippet llRequestExperiencePermissions\\n\tllRequestExperiencePermissions(${1:key agent}, ${2:string name})\\nsnippet llRequestInventoryData\\n\tllRequestInventoryData(${1:string name})\\nsnippet llRequestPermissions\\n\tllRequestPermissions(${1:key agent}, ${2:integer permissions})\\nsnippet llRequestSecureURL\\n\tllRequestSecureURL()\\nsnippet llRequestSimulatorData\\n\tllRequestSimulatorData(${1:string region}, ${2:integer data})\\nsnippet llRequestURL\\n\tllRequestURL()\\nsnippet llRequestUsername\\n\tllRequestUsername(${1:key id})\\nsnippet llResetAnimationOverride\\n\tllResetAnimationOverride(${1:string anim_state});\\n\t$0\\nsnippet llResetLandBanList\\n\tllResetLandBanList();\\n\t$0\\nsnippet llResetLandPassList\\n\tllResetLandPassList();\\n\t$0\\nsnippet llResetOtherScript\\n\tllResetOtherScript(${1:string name});\\n\t$0\\nsnippet llResetScript\\n\tllResetScript();\\n\t$0\\nsnippet llResetTime\\n\tllResetTime();\\n\t$0\\nsnippet llReturnObjectsByID\\n\tllReturnObjectsByID(${1:list objects})\\nsnippet llReturnObjectsByOwner\\n\tllReturnObjectsByOwner(${1:key owner}, ${2:integer scope})\\nsnippet llRezAtRoot\\n\tllRezAtRoot(${1:string inventory}, ${2:vector position}, ${3:vector velocity}, ${4:rotation rot}, ${5:integer param});\\n\t$0\\nsnippet llRezObject\\n\tllRezObject(${1:string inventory}, ${2:vector pos}, ${3:vector vel}, ${4:rotation rot}, ${5:integer param});\\n\t$0\\nsnippet llRot2Angle\\n\tllRot2Angle(${1:rotation rot})\\nsnippet llRot2Axis\\n\tllRot2Axis(${1:rotation rot})\\nsnippet llRot2Euler\\n\tllRot2Euler(${1:rotation quat})\\nsnippet llRot2Fwd\\n\tllRot2Fwd(${1:rotation q})\\nsnippet llRot2Left\\n\tllRot2Left(${1:rotation q})\\nsnippet llRot2Up\\n\tllRot2Up(${1:rotation q})\\nsnippet llRotateTexture\\n\tllRotateTexture(${1:float angle}, ${2:integer face});\\n\t$0\\nsnippet llRotBetween\\n\tllRotBetween(${1:vector start}, ${2:vector end})\\nsnippet llRotLookAt\\n\tllRotLookAt(${1:rotation target_direction}, ${2:float strength}, ${3:float damping});\\n\t$0\\nsnippet llRotTarget\\n\tllRotTarget(${1:rotation rot}, ${2:float error})\\nsnippet llRotTargetRemove\\n\tllRotTargetRemove(${1:integer handle});\\n\t$0\\nsnippet llRound\\n\tllRound(${1:float val})\\nsnippet llSameGroup\\n\tllSameGroup(${1:key group})\\nsnippet llSay\\n\tllSay(${1:integer channel}, ${2:string msg});\\n\t$0\\nsnippet llScaleByFactor\\n\tllScaleByFactor(${1:float scaling_factor})\\nsnippet llScaleTexture\\n\tllScaleTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\t$0\\nsnippet llScriptDanger\\n\tllScriptDanger(${1:vector pos})\\nsnippet llScriptProfiler\\n\tllScriptProfiler(${1:integer flags});\\n\t$0\\nsnippet llSendRemoteData\\n\tllSendRemoteData(${1:key channel}, ${2:string dest}, ${3:integer idata}, ${4:string sdata})\\nsnippet llSensor\\n\tllSensor(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc});\\n\t$0\\nsnippet llSensorRepeat\\n\tllSensorRepeat(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc}, ${6:float rate});\\n\t$0\\nsnippet llSetAlpha\\n\tllSetAlpha(${1:float alpha}, ${2:integer face});\\n\t$0\\nsnippet llSetAngularVelocity\\n\tllSetAngularVelocity(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llSetAnimationOverride\\n\tllSetAnimationOverride(${1:string anim_state}, ${2:string anim})\\nsnippet llSetBuoyancy\\n\tllSetBuoyancy(${1:float buoyancy});\\n\t$0\\nsnippet llSetCameraAtOffset\\n\tllSetCameraAtOffset(${1:vector offset});\\n\t$0\\nsnippet llSetCameraEyeOffset\\n\tllSetCameraEyeOffset(${1:vector offset});\\n\t$0\\nsnippet llSetCameraParams\\n\tllSetCameraParams(${1:list rules});\\n\t$0\\nsnippet llSetClickAction\\n\tllSetClickAction(${1:integer action});\\n\t$0\\nsnippet llSetColor\\n\tllSetColor(${1:vector color}, ${2:integer face});\\n\t$0\\nsnippet llSetContentType\\n\tllSetContentType(${1:key request_id}, ${2:integer content_type});\\n\t$0\\nsnippet llSetDamage\\n\tllSetDamage(${1:float damage});\\n\t$0\\nsnippet llSetForce\\n\tllSetForce(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llSetForceAndTorque\\n\tllSetForceAndTorque(${1:vector force}, ${2:vector torque}, ${3:integer local});\\n\t$0\\nsnippet llSetHoverHeight\\n\tllSetHoverHeight(${1:float height}, ${2:integer water}, ${3:float tau});\\n\t$0\\nsnippet llSetKeyframedMotion\\n\tllSetKeyframedMotion(${1:list keyframes}, ${2:list options});\\n\t$0\\nsnippet llSetLinkAlpha\\n\tllSetLinkAlpha(${1:integer link}, ${2:float alpha}, ${3:integer face});\\n\t$0\\nsnippet llSetLinkCamera\\n\tllSetLinkCamera(${1:integer link}, ${2:vector eye}, ${3:vector at});\\n\t$0\\nsnippet llSetLinkColor\\n\tllSetLinkColor(${1:integer link}, ${2:vector color}, ${3:integer face});\\n\t$0\\nsnippet llSetLinkMedia\\n\tllSetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params});\\n\t$0\\nsnippet llSetLinkPrimitiveParams\\n\tllSetLinkPrimitiveParams(${1:integer link}, ${2:list rules});\\n\t$0\\nsnippet llSetLinkPrimitiveParamsFast\\n\tllSetLinkPrimitiveParamsFast(${1:integer link}, ${2:list rules});\\n\t$0\\nsnippet llSetLinkTexture\\n\tllSetLinkTexture(${1:integer link}, ${2:string texture}, ${3:integer face});\\n\t$0\\nsnippet llSetLinkTextureAnim\\n\tllSetLinkTextureAnim(${1:integer link}, ${2:integer mode}, ${3:integer face}, ${4:integer sizex}, ${5:integer sizey}, ${6:float start}, ${7:float length}, ${8:float rate});\\n\t$0\\nsnippet llSetLocalRot\\n\tllSetLocalRot(${1:rotation rot});\\n\t$0\\nsnippet llSetMemoryLimit\\n\tllSetMemoryLimit(${1:integer limit})\\nsnippet llSetObjectDesc\\n\tllSetObjectDesc(${1:string description});\\n\t$0\\nsnippet llSetObjectName\\n\tllSetObjectName(${1:string name});\\n\t$0\\nsnippet llSetParcelMusicURL\\n\tllSetParcelMusicURL(${1:string url});\\n\t$0\\nsnippet llSetPayPrice\\n\tllSetPayPrice(${1:integer price}, [${2:integer price_button_a}, ${3:integer price_button_b}, ${4:integer price_button_c}, ${5:integer price_button_d}]);\\n\t$0\\nsnippet llSetPhysicsMaterial\\n\tllSetPhysicsMaterial(${1:integer mask}, ${2:float gravity_multiplier}, ${3:float restitution}, ${4:float friction}, ${5:float density});\\n\t$0\\nsnippet llSetPos\\n\tllSetPos(${1:vector pos});\\n\t$0\\nsnippet llSetPrimitiveParams\\n\tllSetPrimitiveParams(${1:list rules});\\n\t$0\\nsnippet llSetPrimMediaParams\\n\tllSetPrimMediaParams(${1:integer face}, ${2:list params});\\n\t$0\\nsnippet llSetRegionPos\\n\tllSetRegionPos(${1:vector position})\\nsnippet llSetRemoteScriptAccessPin\\n\tllSetRemoteScriptAccessPin(${1:integer pin});\\n\t$0\\nsnippet llSetRot\\n\tllSetRot(${1:rotation rot});\\n\t$0\\nsnippet llSetScale\\n\tllSetScale(${1:vector size});\\n\t$0\\nsnippet llSetScriptState\\n\tllSetScriptState(${1:string name}, ${2:integer run});\\n\t$0\\nsnippet llSetSitText\\n\tllSetSitText(${1:string text});\\n\t$0\\nsnippet llSetSoundQueueing\\n\tllSetSoundQueueing(${1:integer queue});\\n\t$0\\nsnippet llSetSoundRadius\\n\tllSetSoundRadius(${1:float radius});\\n\t$0\\nsnippet llSetStatus\\n\tllSetStatus(${1:integer status}, ${2:integer value});\\n\t$0\\nsnippet llSetText\\n\tllSetText(${1:string text}, ${2:vector color}, ${3:float alpha});\\n\t$0\\nsnippet llSetTexture\\n\tllSetTexture(${1:string texture}, ${2:integer face});\\n\t$0\\nsnippet llSetTextureAnim\\n\tllSetTextureAnim(${1:integer mode}, ${2:integer face}, ${3:integer sizex}, ${4:integer sizey}, ${5:float start}, ${6:float length}, ${7:float rate});\\n\t$0\\nsnippet llSetTimerEvent\\n\tllSetTimerEvent(${1:float sec});\\n\t$0\\nsnippet llSetTorque\\n\tllSetTorque(${1:vector torque}, ${2:integer local});\\n\t$0\\nsnippet llSetTouchText\\n\tllSetTouchText(${1:string text});\\n\t$0\\nsnippet llSetVehicleFlags\\n\tllSetVehicleFlags(${1:integer flags});\\n\t$0\\nsnippet llSetVehicleFloatParam\\n\tllSetVehicleFloatParam(${1:integer param}, ${2:float value});\\n\t$0\\nsnippet llSetVehicleRotationParam\\n\tllSetVehicleRotationParam(${1:integer param}, ${2:rotation rot});\\n\t$0\\nsnippet llSetVehicleType\\n\tllSetVehicleType(${1:integer type});\\n\t$0\\nsnippet llSetVehicleVectorParam\\n\tllSetVehicleVectorParam(${1:integer param}, ${2:vector vec});\\n\t$0\\nsnippet llSetVelocity\\n\tllSetVelocity(${1:vector force}, ${2:integer local});\\n\t$0\\nsnippet llSHA1String\\n\tllSHA1String(${1:string src})\\nsnippet llShout\\n\tllShout(${1:integer channel}, ${2:string msg});\\n\t$0\\nsnippet llSin\\n\tllSin(${1:float theta})\\nsnippet llSitTarget\\n\tllSitTarget(${1:vector offset}, ${2:rotation rot});\\n\t$0\\nsnippet llSleep\\n\tllSleep(${1:float sec});\\n\t$0\\nsnippet llSqrt\\n\tllSqrt(${1:float val})\\nsnippet llStartAnimation\\n\tllStartAnimation(${1:string anim});\\n\t$0\\nsnippet llStopAnimation\\n\tllStopAnimation(${1:string anim});\\n\t$0\\nsnippet llStopHover\\n\tllStopHover();\\n\t$0\\nsnippet llStopLookAt\\n\tllStopLookAt();\\n\t$0\\nsnippet llStopMoveToTarget\\n\tllStopMoveToTarget();\\n\t$0\\nsnippet llStopSound\\n\tllStopSound();\\n\t$0\\nsnippet llStringLength\\n\tllStringLength(${1:string str})\\nsnippet llStringToBase64\\n\tllStringToBase64(${1:string str})\\nsnippet llStringTrim\\n\tllStringTrim(${1:string src}, ${2:integer type})\\nsnippet llSubStringIndex\\n\tllSubStringIndex(${1:string source}, ${2:string pattern})\\nsnippet llTakeControls\\n\tllTakeControls(${1:integer controls}, ${2:integer accept}, ${3:integer pass_on});\\n\t$0\\nsnippet llTan\\n\tllTan(${1:float theta})\\nsnippet llTarget\\n\tllTarget(${1:vector position}, ${2:float range})\\nsnippet llTargetOmega\\n\tllTargetOmega(${1:vector axis}, ${2:float spinrate}, ${3:float gain});\\n\t$0\\nsnippet llTargetRemove\\n\tllTargetRemove(${1:integer handle});\\n\t$0\\nsnippet llTeleportAgent\\n\tllTeleportAgent(${1:key agent}, ${2:string landmark}, ${3:vector position}, ${4:vector look_at});\\n\t$0\\nsnippet llTeleportAgentGlobalCoords\\n\tllTeleportAgentGlobalCoords(${1:key agent}, ${2:vector global_coordinates}, ${3:vector region_coordinates}, ${4:vector look_at});\\n\t$0\\nsnippet llTeleportAgentHome\\n\tllTeleportAgentHome(${1:key agent});\\n\t$0\\nsnippet llTextBox\\n\tllTextBox(${1:key agent}, ${2:string message}, ${3:integer channel});\\n\t$0\\nsnippet llToLower\\n\tllToLower(${1:string src})\\nsnippet llToUpper\\n\tllToUpper(${1:string src})\\nsnippet llTransferLindenDollars\\n\tllTransferLindenDollars(${1:key destination}, ${2:integer amount})\\nsnippet llTriggerSound\\n\tllTriggerSound(${1:string sound}, ${2:float volume});\\n\t$0\\nsnippet llTriggerSoundLimited\\n\tllTriggerSoundLimited(${1:string sound}, ${2:float volume}, ${3:vector top_north_east}, ${4:vector bottom_south_west});\\n\t$0\\nsnippet llUnescapeURL\\n\tllUnescapeURL(${1:string url})\\nsnippet llUnSit\\n\tllUnSit(${1:key id});\\n\t$0\\nsnippet llUpdateCharacter\\n\tllUpdateCharacter(${1:list options})\\nsnippet llUpdateKeyValue\\n\tllUpdateKeyValue(${1:string k}, ${2:string v}, ${3:integer checked}, ${4:string ov})\\nsnippet llVecDist\\n\tllVecDist(${1:vector vec_a}, ${2:vector vec_b})\\nsnippet llVecMag\\n\tllVecMag(${1:vector vec})\\nsnippet llVecNorm\\n\tllVecNorm(${1:vector vec})\\nsnippet llVolumeDetect\\n\tllVolumeDetect(${1:integer detect});\\n\t$0\\nsnippet llWanderWithin\\n\tllWanderWithin(${1:vector origin}, ${2:vector dist}, ${3:list options});\\n\t$0\\nsnippet llWater\\n\tllWater(${1:vector offset});\\n\t$0\\nsnippet llWhisper\\n\tllWhisper(${1:integer channel}, ${2:string msg});\\n\t$0\\nsnippet llWind\\n\tllWind(${1:vector offset});\\n\t$0\\nsnippet llXorBase64\\n\tllXorBase64(${1:string str1}, ${2:string str2})\\nsnippet money\\n\tmoney(${1:key id}, ${2:integer amount})\\n\t{\\n\t\t$0\\n\t}\\nsnippet object_rez\\n\tobject_rez(${1:key id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet on_rez\\n\ton_rez(${1:integer start_param})\\n\t{\\n\t\t$0\\n\t}\\nsnippet path_update\\n\tpath_update(${1:integer type}, ${2:list reserved})\\n\t{\\n\t\t$0\\n\t}\\nsnippet remote_data\\n\tremote_data(${1:integer event_type}, ${2:key channel}, ${3:key message_id}, ${4:string sender}, ${5:integer idata}, ${6:string sdata})\\n\t{\\n\t\t$0\\n\t}\\nsnippet run_time_permissions\\n\trun_time_permissions(${1:integer perm})\\n\t{\\n\t\t$0\\n\t}\\nsnippet sensor\\n\tsensor(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet state\\n\tstate ${1:name}\\nsnippet touch\\n\ttouch(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet touch_end\\n\ttouch_end(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet touch_start\\n\ttouch_start(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet transaction_result\\n\ttransaction_result(${1:key id}, ${2:integer success}, ${3:string data})\\n\t{\\n\t\t$0\\n\t}\\nsnippet while\\n\twhile (${1:condition})\\n\t{\\n\t\t$0\\n\t}\\n\",t.scope=\"lsl\"});                (function() {\n                    ace.require([\"ace/snippets/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/lua.js",
    "content": "ace.define(\"ace/snippets/lua\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet #!\\n\t#!/usr/bin/env lua\\n\t$1\\nsnippet local\\n\tlocal ${1:x} = ${2:1}\\nsnippet fun\\n\tfunction ${1:fname}(${2:...})\\n\t\t${3:-- body}\\n\tend\\nsnippet for\\n\tfor ${1:i}=${2:1},${3:10} do\\n\t\t${4:print(i)}\\n\tend\\nsnippet forp\\n\tfor ${1:i},${2:v} in pairs(${3:table_name}) do\\n\t   ${4:-- body}\\n\tend\\nsnippet fori\\n\tfor ${1:i},${2:v} in ipairs(${3:table_name}) do\\n\t   ${4:-- body}\\n\tend\\n\",t.scope=\"lua\"});                (function() {\n                    ace.require([\"ace/snippets/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/luapage.js",
    "content": "ace.define(\"ace/snippets/luapage\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"luapage\"});                (function() {\n                    ace.require([\"ace/snippets/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/lucene.js",
    "content": "ace.define(\"ace/snippets/lucene\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"lucene\"});                (function() {\n                    ace.require([\"ace/snippets/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/makefile.js",
    "content": "ace.define(\"ace/snippets/makefile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet ifeq\\n\tifeq (${1:cond0},${2:cond1})\\n\t\t${3:code}\\n\tendif\\n\",t.scope=\"makefile\"});                (function() {\n                    ace.require([\"ace/snippets/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/markdown.js",
    "content": "ace.define(\"ace/snippets/markdown\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Markdown\\n\\n# Includes octopress (http://octopress.org/) snippets\\n\\nsnippet [\\n\t[${1:text}](http://${2:address} \"${3:title}\")\\nsnippet [*\\n\t[${1:link}](${2:`@*`} \"${3:title}\")${4}\\n\\nsnippet [:\\n\t[${1:id}]: http://${2:url} \"${3:title}\"\\nsnippet [:*\\n\t[${1:id}]: ${2:`@*`} \"${3:title}\"\\n\\nsnippet ![\\n\t![${1:alttext}](${2:/images/image.jpg} \"${3:title}\")\\nsnippet ![*\\n\t![${1:alt}](${2:`@*`} \"${3:title}\")${4}\\n\\nsnippet ![:\\n\t![${1:id}]: ${2:url} \"${3:title}\"\\nsnippet ![:*\\n\t![${1:id}]: ${2:`@*`} \"${3:title}\"\\n\\nsnippet ===\\nregex /^/=+/=*//\\n\t${PREV_LINE/./=/g}\\n\t\\n\t${0}\\nsnippet ---\\nregex /^/-+/-*//\\n\t${PREV_LINE/./-/g}\\n\t\\n\t${0}\\nsnippet blockquote\\n\t{% blockquote %}\\n\t${1:quote}\\n\t{% endblockquote %}\\n\\nsnippet blockquote-author\\n\t{% blockquote ${1:author}, ${2:title} %}\\n\t${3:quote}\\n\t{% endblockquote %}\\n\\nsnippet blockquote-link\\n\t{% blockquote ${1:author} ${2:URL} ${3:link_text} %}\\n\t${4:quote}\\n\t{% endblockquote %}\\n\\nsnippet bt-codeblock-short\\n\t```\\n\t${1:code_snippet}\\n\t```\\n\\nsnippet bt-codeblock-full\\n\t``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\\n\t${5:code_snippet}\\n\t```\\n\\nsnippet codeblock-short\\n\t{% codeblock %}\\n\t${1:code_snippet}\\n\t{% endcodeblock %}\\n\\nsnippet codeblock-full\\n\t{% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\\n\t${5:code_snippet}\\n\t{% endcodeblock %}\\n\\nsnippet gist-full\\n\t{% gist ${1:gist_id} ${2:filename} %}\\n\\nsnippet gist-short\\n\t{% gist ${1:gist_id} %}\\n\\nsnippet img\\n\t{% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\\n\\nsnippet youtube\\n\t{% youtube ${1:video_id} %}\\n\\n# The quote should appear only once in the text. It is inherently part of it.\\n# See http://octopress.org/docs/plugins/pullquote/ for more info.\\n\\nsnippet pullquote\\n\t{% pullquote %}\\n\t${1:text} {\" ${2:quote} \"} ${3:text}\\n\t{% endpullquote %}\\n',t.scope=\"markdown\"});                (function() {\n                    ace.require([\"ace/snippets/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/mask.js",
    "content": "ace.define(\"ace/snippets/mask\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mask\"});                (function() {\n                    ace.require([\"ace/snippets/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/matlab.js",
    "content": "ace.define(\"ace/snippets/matlab\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"matlab\"});                (function() {\n                    ace.require([\"ace/snippets/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/maze.js",
    "content": "ace.define(\"ace/snippets/maze\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet >\\ndescription assignment\\nscope maze\\n\t-> ${1}= ${2}\\n\\nsnippet >\\ndescription if\\nscope maze\\n\t-> IF ${2:**} THEN %${3:L} ELSE %${4:R}\\n\",t.scope=\"maze\"});                (function() {\n                    ace.require([\"ace/snippets/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/mel.js",
    "content": "ace.define(\"ace/snippets/mel\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mel\"});                (function() {\n                    ace.require([\"ace/snippets/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/mixal.js",
    "content": "ace.define(\"ace/snippets/mixal\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mixal\"});                (function() {\n                    ace.require([\"ace/snippets/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/mushcode.js",
    "content": "ace.define(\"ace/snippets/mushcode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mushcode\"});                (function() {\n                    ace.require([\"ace/snippets/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/mysql.js",
    "content": "ace.define(\"ace/snippets/mysql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mysql\"});                (function() {\n                    ace.require([\"ace/snippets/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/nix.js",
    "content": "ace.define(\"ace/snippets/nix\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"nix\"});                (function() {\n                    ace.require([\"ace/snippets/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/nsis.js",
    "content": "ace.define(\"ace/snippets/nsis\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/objectivec.js",
    "content": "ace.define(\"ace/snippets/objectivec\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"objectivec\"});                (function() {\n                    ace.require([\"ace/snippets/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/ocaml.js",
    "content": "ace.define(\"ace/snippets/ocaml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ocaml\"});                (function() {\n                    ace.require([\"ace/snippets/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/pascal.js",
    "content": "ace.define(\"ace/snippets/pascal\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"pascal\"});                (function() {\n                    ace.require([\"ace/snippets/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/perl.js",
    "content": "ace.define(\"ace/snippets/perl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# #!/usr/bin/perl\\nsnippet #!\\n\t#!/usr/bin/env perl\\n\\n# Hash Pointer\\nsnippet .\\n\t =>\\n# Function\\nsnippet sub\\n\tsub ${1:function_name} {\\n\t\t${2:#body ...}\\n\t}\\n# Conditional\\nsnippet if\\n\tif (${1}) {\\n\t\t${2:# body...}\\n\t}\\n# Conditional if..else\\nsnippet ife\\n\tif (${1}) {\\n\t\t${2:# body...}\\n\t}\\n\telse {\\n\t\t${3:# else...}\\n\t}\\n# Conditional if..elsif..else\\nsnippet ifee\\n\tif (${1}) {\\n\t\t${2:# body...}\\n\t}\\n\telsif (${3}) {\\n\t\t${4:# elsif...}\\n\t}\\n\telse {\\n\t\t${5:# else...}\\n\t}\\n# Conditional One-line\\nsnippet xif\\n\t${1:expression} if ${2:condition};${3}\\n# Unless conditional\\nsnippet unless\\n\tunless (${1}) {\\n\t\t${2:# body...}\\n\t}\\n# Unless conditional One-line\\nsnippet xunless\\n\t${1:expression} unless ${2:condition};${3}\\n# Try/Except\\nsnippet eval\\n\tlocal $@;\\n\teval {\\n\t\t${1:# do something risky...}\\n\t};\\n\tif (my $e = $@) {\\n\t\t${2:# handle failure...}\\n\t}\\n# While Loop\\nsnippet wh\\n\twhile (${1}) {\\n\t\t${2:# body...}\\n\t}\\n# While Loop One-line\\nsnippet xwh\\n\t${1:expression} while ${2:condition};${3}\\n# C-style For Loop\\nsnippet cfor\\n\tfor (my $${2:var} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\t\t${4:# body...}\\n\t}\\n# For loop one-line\\nsnippet xfor\\n\t${1:expression} for @${2:array};${3}\\n# Foreach Loop\\nsnippet for\\n\tforeach my $${1:x} (@${2:array}) {\\n\t\t${3:# body...}\\n\t}\\n# Foreach Loop One-line\\nsnippet fore\\n\t${1:expression} foreach @${2:array};${3}\\n# Package\\nsnippet package\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`};\\n\\n\t${2}\\n\\n\t1;\\n\\n\t__END__\\n# Package syntax perl >= 5.14\\nsnippet packagev514\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`} ${2:0.99};\\n\\n\t${3}\\n\\n\t1;\\n\\n\t__END__\\n#moose\\nsnippet moose\\n\tuse Moose;\\n\tuse namespace::autoclean;\\n\t${1:#}BEGIN {extends '${2:ParentClass}'};\\n\\n\t${3}\\n# parent\\nsnippet parent\\n\tuse parent qw(${1:Parent Class});\\n# Read File\\nsnippet slurp\\n\tmy $${1:var} = do { local $/; open my $file, '<', \\\"${2:file}\\\"; <$file> };\\n\t${3}\\n# strict warnings\\nsnippet strwar\\n\tuse strict;\\n\tuse warnings;\\n# older versioning with perlcritic bypass\\nsnippet vers\\n\t## no critic\\n\tour $VERSION = '${1:version}';\\n\teval $VERSION;\\n\t## use critic\\n# new 'switch' like feature\\nsnippet switch\\n\tuse feature 'switch';\\n\\n# Anonymous subroutine\\nsnippet asub\\n\tsub {\\n\t \t${1:# body }\\n\t}\\n\\n\\n\\n# Begin block\\nsnippet begin\\n\tBEGIN {\\n\t\t${1:# begin body}\\n\t}\\n\\n# call package function with some parameter\\nsnippet pkgmv\\n\t__PACKAGE__->${1:package_method}(${2:var})\\n\\n# call package function without a parameter\\nsnippet pkgm\\n\t__PACKAGE__->${1:package_method}()\\n\\n# call package \\\"get_\\\" function without a parameter\\nsnippet pkget\\n\t__PACKAGE__->get_${1:package_method}()\\n\\n# call package function with a parameter\\nsnippet pkgetv\\n\t__PACKAGE__->get_${1:package_method}(${2:var})\\n\\n# complex regex\\nsnippet qrx\\n\tqr/\\n\t     ${1:regex}\\n\t/xms\\n\\n#simpler regex\\nsnippet qr/\\n\tqr/${1:regex}/x\\n\\n#given\\nsnippet given\\n\tgiven ($${1:var}) {\\n\t\t${2:# cases}\\n\t\t${3:# default}\\n\t}\\n\\n# switch-like case\\nsnippet when\\n\twhen (${1:case}) {\\n\t\t${2:# body}\\n\t}\\n\\n# hash slice\\nsnippet hslice\\n\t@{ ${1:hash}  }{ ${2:array} }\\n\\n\\n# map\\nsnippet map\\n\tmap {  ${2: body }    }  ${1: @array } ;\\n\\n\\n\\n# Pod stub\\nsnippet ppod\\n\t=head1 NAME\\n\\n\t${1:ClassName} - ${2:ShortDesc}\\n\\n\t=head1 SYNOPSIS\\n\\n\t  use $1;\\n\\n\t  ${3:# synopsis...}\\n\\n\t=head1 DESCRIPTION\\n\\n\t${4:# longer description...}\\n\\n\\n\t=head1 INTERFACE\\n\\n\\n\t=head1 DEPENDENCIES\\n\\n\\n\t=head1 SEE ALSO\\n\\n\\n# Heading for a subroutine stub\\nsnippet psub\\n\t=head2 ${1:MethodName}\\n\\n\t${2:Summary....}\\n\\n# Heading for inline subroutine pod\\nsnippet psubi\\n\t=head2 ${1:MethodName}\\n\\n\t${2:Summary...}\\n\\n\\n\t=cut\\n# inline documented subroutine\\nsnippet subpod\\n\t=head2 $1\\n\\n\tSummary of $1\\n\\n\t=cut\\n\\n\tsub ${1:subroutine_name} {\\n\t\t${2:# body...}\\n\t}\\n# Subroutine signature\\nsnippet parg\\n\t=over 2\\n\\n\t=item\\n\tArguments\\n\\n\\n\t=over 3\\n\\n\t=item\\n\tC<${1:DataStructure}>\\n\\n\t  ${2:Sample}\\n\\n\\n\t=back\\n\\n\\n\t=item\\n\tReturn\\n\\n\t=over 3\\n\\n\\n\t=item\\n\tC<${3:...return data}>\\n\\n\\n\t=back\\n\\n\\n\t=back\\n\\n\\n\\n# Moose has\\nsnippet has\\n\thas ${1:attribute} => (\\n\t\tis\t    => '${2:ro|rw}',\\n\t\tisa \t=> '${3:Str|Int|HashRef|ArrayRef|etc}',\\n\t\tdefault => sub {\\n\t\t\t${4:defaultvalue}\\n\t\t},\\n\t\t${5:# other attributes}\\n\t);\\n\\n\\n# override\\nsnippet override\\n\toverride ${1:attribute} => sub {\\n\t\t${2:# my $self = shift;};\\n\t\t${3:# my ($self, $args) = @_;};\\n\t};\\n\\n\\n# use test classes\\nsnippet tuse\\n\tuse Test::More;\\n\tuse Test::Deep; # (); # uncomment to stop prototype errors\\n\tuse Test::Exception;\\n\\n# local test lib\\nsnippet tlib\\n\tuse lib qw{ ./t/lib };\\n\\n#test methods\\nsnippet tmeths\\n\t$ENV{TEST_METHOD} = '${1:regex}';\\n\\n# runtestclass\\nsnippet trunner\\n\tuse ${1:test_class};\\n\t$1->runtests();\\n\\n# Test::Class-style test\\nsnippet tsub\\n\tsub t${1:number}_${2:test_case} :Test(${3:num_of_tests}) {\\n\t\tmy $self = shift;\\n\t\t${4:#  body}\\n\\n\t}\\n\\n# Test::Routine-style test\\nsnippet trsub\\n\ttest ${1:test_name} => { description => '${2:Description of test.}'} => sub {\\n\t\tmy ($self) = @_;\\n\t\t${3:# test code}\\n\t};\\n\\n#prep test method\\nsnippet tprep\\n\tsub prep${1:number}_${2:test_case} :Test(startup) {\\n\t\tmy $self = shift;\\n\t\t${4:#  body}\\n\t}\\n\\n# cause failures to print stack trace\\nsnippet debug_trace\\n\tuse Carp; # 'verbose';\\n\t# cloak \\\"die\\\"\\n\t# warn \\\"warning\\\"\\n\t$SIG{'__DIE__'} = sub {\\n\t\trequire Carp; Carp::confess\\n\t};\\n\\n\",t.scope=\"perl\"});                (function() {\n                    ace.require([\"ace/snippets/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/perl6.js",
    "content": "ace.define(\"ace/snippets/perl6\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"perl6\"});                (function() {\n                    ace.require([\"ace/snippets/perl6\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/pgsql.js",
    "content": "ace.define(\"ace/snippets/pgsql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"pgsql\"});                (function() {\n                    ace.require([\"ace/snippets/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/php.js",
    "content": "ace.define(\"ace/snippets/php\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet ec\\n\techo ${1};\\nsnippet ns\\n\tnamespace ${1:Foo\\\\Bar\\\\Baz};\\n\t${2}\\nsnippet use\\n\tuse ${1:Foo\\\\Bar\\\\Baz};\\n\t${2}\\nsnippet c\\n\t${1:abstract }class ${2:$FILENAME}\\n\t{\\n\t\t${3}\\n\t}\\nsnippet i\\n\tinterface ${1:$FILENAME}\\n\t{\\n\t\t${2}\\n\t}\\nsnippet t.\\n\t$this->${1}\\nsnippet f\\n\tfunction ${1:foo}(${2:array }${3:$bar})\\n\t{\\n\t\t${4}\\n\t}\\n# method\\nsnippet m\\n\t${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\\n\t{\\n\t\t${7}\\n\t}\\n# setter method\\nsnippet sm\\n\t/**\\n\t * Sets the value of ${1:foo}\\n\t *\\n\t * @param ${2:$1} $$1 ${3:description}\\n\t *\\n\t * @return ${4:$FILENAME}\\n\t */\\n\t${5:public} function set${6:$2}(${7:$2 }$$1)\\n\t{\\n\t\t$this->${8:$1} = $$1;\\n\t\treturn $this;\\n\t}${9}\\n# getter method\\nsnippet gm\\n\t/**\\n\t * Gets the value of ${1:foo}\\n\t *\\n\t * @return ${2:$1}\\n\t */\\n\t${3:public} function get${4:$2}()\\n\t{\\n\t\treturn $this->${5:$1};\\n\t}${6}\\n#setter\\nsnippet $s\\n\t${1:$foo}->set${2:Bar}(${3});\\n#getter\\nsnippet $g\\n\t${1:$foo}->get${2:Bar}();\\n\\n# Tertiary conditional\\nsnippet =?:\\n\t$${1:foo} = ${2:true} ? ${3:a} : ${4};\\nsnippet ?:\\n\t${1:true} ? ${2:a} : ${3}\\n\\nsnippet C\\n\t$_COOKIE['${1:variable}']${2}\\nsnippet E\\n\t$_ENV['${1:variable}']${2}\\nsnippet F\\n\t$_FILES['${1:variable}']${2}\\nsnippet G\\n\t$_GET['${1:variable}']${2}\\nsnippet P\\n\t$_POST['${1:variable}']${2}\\nsnippet R\\n\t$_REQUEST['${1:variable}']${2}\\nsnippet S\\n\t$_SERVER['${1:variable}']${2}\\nsnippet SS\\n\t$_SESSION['${1:variable}']${2}\\n\\n# the following are old ones\\nsnippet inc\\n\tinclude '${1:file}';${2}\\nsnippet inc1\\n\tinclude_once '${1:file}';${2}\\nsnippet req\\n\trequire '${1:file}';${2}\\nsnippet req1\\n\trequire_once '${1:file}';${2}\\n# Start Docblock\\nsnippet /*\\n\t/**\\n\t * ${1}\\n\t */\\n# Class - post doc\\nsnippet doc_cp\\n\t/**\\n\t * ${1:undocumented class}\\n\t *\\n\t * @package ${2:default}\\n\t * @subpackage ${3:default}\\n\t * @author ${4:`g:snips_author`}\\n\t */${5}\\n# Class Variable - post doc\\nsnippet doc_vp\\n\t/**\\n\t * ${1:undocumented class variable}\\n\t *\\n\t * @var ${2:string}\\n\t */${3}\\n# Class Variable\\nsnippet doc_v\\n\t/**\\n\t * ${3:undocumented class variable}\\n\t *\\n\t * @var ${4:string}\\n\t */\\n\t${1:var} $${2};${5}\\n# Class\\nsnippet doc_c\\n\t/**\\n\t * ${3:undocumented class}\\n\t *\\n\t * @package ${4:default}\\n\t * @subpackage ${5:default}\\n\t * @author ${6:`g:snips_author`}\\n\t */\\n\t${1:}class ${2:}\\n\t{\\n\t\t${7}\\n\t} // END $1class $2\\n# Constant Definition - post doc\\nsnippet doc_dp\\n\t/**\\n\t * ${1:undocumented constant}\\n\t */${2}\\n# Constant Definition\\nsnippet doc_d\\n\t/**\\n\t * ${3:undocumented constant}\\n\t */\\n\tdefine(${1}, ${2});${4}\\n# Function - post doc\\nsnippet doc_fp\\n\t/**\\n\t * ${1:undocumented function}\\n\t *\\n\t * @return ${2:void}\\n\t * @author ${3:`g:snips_author`}\\n\t */${4}\\n# Function signature\\nsnippet doc_s\\n\t/**\\n\t * ${4:undocumented function}\\n\t *\\n\t * @return ${5:void}\\n\t * @author ${6:`g:snips_author`}\\n\t */\\n\t${1}function ${2}(${3});${7}\\n# Function\\nsnippet doc_f\\n\t/**\\n\t * ${4:undocumented function}\\n\t *\\n\t * @return ${5:void}\\n\t * @author ${6:`g:snips_author`}\\n\t */\\n\t${1}function ${2}(${3})\\n\t{${7}\\n\t}\\n# Header\\nsnippet doc_h\\n\t/**\\n\t * ${1}\\n\t *\\n\t * @author ${2:`g:snips_author`}\\n\t * @version ${3:$Id$}\\n\t * @copyright ${4:$2}, `strftime('%d %B, %Y')`\\n\t * @package ${5:default}\\n\t */\\n\\n# Interface\\nsnippet interface\\n\t/**\\n\t * ${2:undocumented class}\\n\t *\\n\t * @package ${3:default}\\n\t * @author ${4:`g:snips_author`}\\n\t */\\n\tinterface ${1:$FILENAME}\\n\t{\\n\t\t${5}\\n\t}\\n# class ...\\nsnippet class\\n\t/**\\n\t * ${1}\\n\t */\\n\tclass ${2:$FILENAME}\\n\t{\\n\t\t${3}\\n\t\t/**\\n\t\t * ${4}\\n\t\t */\\n\t\t${5:public} function ${6:__construct}(${7:argument})\\n\t\t{\\n\t\t\t${8:// code...}\\n\t\t}\\n\t}\\n# define(...)\\nsnippet def\\n\tdefine('${1}'${2});${3}\\n# defined(...)\\nsnippet def?\\n\t${1}defined('${2}')${3}\\nsnippet wh\\n\twhile (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t}\\n# do ... while\\nsnippet do\\n\tdo {\\n\t\t${2:// code... }\\n\t} while (${1:/* condition */});\\nsnippet if\\n\tif (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t}\\nsnippet ife\\n\tif (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t} else {\\n\t\t${3:// code...}\\n\t}\\n\t${4}\\nsnippet else\\n\telse {\\n\t\t${1:// code...}\\n\t}\\nsnippet elseif\\n\telseif (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t}\\nsnippet switch\\n\tswitch ($${1:variable}) {\\n\t\tcase '${2:value}':\\n\t\t\t${3:// code...}\\n\t\t\tbreak;\\n\t\t${5}\\n\t\tdefault:\\n\t\t\t${4:// code...}\\n\t\t\tbreak;\\n\t}\\nsnippet case\\n\tcase '${1:value}':\\n\t\t${2:// code...}\\n\t\tbreak;${3}\\nsnippet for\\n\tfor ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\t\t${4: // code...}\\n\t}\\nsnippet foreach\\n\tforeach ($${1:variable} as $${2:value}) {\\n\t\t${3:// code...}\\n\t}\\nsnippet foreachk\\n\tforeach ($${1:variable} as $${2:key} => $${3:value}) {\\n\t\t${4:// code...}\\n\t}\\n# $... = array (...)\\nsnippet array\\n\t$${1:arrayName} = array('${2}' => ${3});${4}\\nsnippet try\\n\ttry {\\n\t\t${2}\\n\t} catch (${1:Exception} $e) {\\n\t}\\n# lambda with closure\\nsnippet lambda\\n\t${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\\n\t\t${4}\\n\t};\\n# pre_dump();\\nsnippet pd\\n\techo '<pre>'; var_dump(${1}); echo '</pre>';\\n# pre_dump(); die();\\nsnippet pdd\\n\techo '<pre>'; var_dump(${1}); echo '</pre>'; die(${2:});\\nsnippet vd\\n\tvar_dump(${1});\\nsnippet vdd\\n\tvar_dump(${1}); die(${2:});\\nsnippet http_redirect\\n\theader (\\\"HTTP/1.1 301 Moved Permanently\\\");\\n\theader (\\\"Location: \\\".URL);\\n\texit();\\n# Getters & Setters\\nsnippet gs\\n\t/**\\n\t * Gets the value of ${1:foo}\\n\t *\\n\t * @return ${2:$1}\\n\t */\\n\tpublic function get${3:$2}()\\n\t{\\n\t\treturn $this->${4:$1};\\n\t}\\n\\n\t/**\\n\t * Sets the value of $1\\n\t *\\n\t * @param $2 $$1 ${5:description}\\n\t *\\n\t * @return ${6:$FILENAME}\\n\t */\\n\tpublic function set$3(${7:$2 }$$1)\\n\t{\\n\t\t$this->$4 = $$1;\\n\t\treturn $this;\\n\t}${8}\\n# anotation, get, and set, useful for doctrine\\nsnippet ags\\n\t/**\\n\t * ${1:description}\\n\t *\\n\t * @${7}\\n\t */\\n\t${2:protected} $${3:foo};\\n\\n\tpublic function get${4:$3}()\\n\t{\\n\t\treturn $this->$3;\\n\t}\\n\\n\tpublic function set$4(${5:$4 }$${6:$3})\\n\t{\\n\t\t$this->$3 = $$6;\\n\t\treturn $this;\\n\t}\\nsnippet rett\\n\treturn true;\\nsnippet retf\\n\treturn false;\\nscope html\\nsnippet <?\\n\t<?php\\n\\n\t${1}\\nsnippet <?e\\n\t<?php echo ${1} ?>\\n# this one is for php5.4\\nsnippet <?=\\n\t<?=${1}?>\\nsnippet ifil\\n\t<?php if (${1:/* condition */}): ?>\\n\t\t${2:<!-- code... -->}\\n\t<?php endif; ?>\\nsnippet ifeil\\n\t<?php if (${1:/* condition */}): ?>\\n\t\t${2:<!-- html... -->}\\n\t<?php else: ?>\\n\t\t${3:<!-- html... -->}\\n\t<?php endif; ?>\\n\t${4}\\nsnippet foreachil\\n\t<?php foreach ($${1:variable} as $${2:value}): ?>\\n\t\t${3:<!-- html... -->}\\n\t<?php endforeach; ?>\\nsnippet foreachkil\\n\t<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?>\\n\t\t${4:<!-- html... -->}\\n\t<?php endforeach; ?>\\nscope html-tag\\nsnippet ifil\\\\n\\\\\\n\t<?php if (${1:true}): ?>${2:code}<?php endif; ?>\\nsnippet ifeil\\\\n\\\\\\n\t<?php if (${1:true}): ?>${2:code}<?php else: ?>${3:code}<?php endif; ?>${4}\\n\",t.scope=\"php\"});                (function() {\n                    ace.require([\"ace/snippets/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/php_laravel_blade.js",
    "content": "ace.define(\"ace/snippets/php_laravel_blade\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"php\"});                (function() {\n                    ace.require([\"ace/snippets/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/pig.js",
    "content": "ace.define(\"ace/snippets/pig\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"pig\"});                (function() {\n                    ace.require([\"ace/snippets/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/plain_text.js",
    "content": "ace.define(\"ace/snippets/plain_text\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"plain_text\"});                (function() {\n                    ace.require([\"ace/snippets/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/powershell.js",
    "content": "ace.define(\"ace/snippets/powershell\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"powershell\"});                (function() {\n                    ace.require([\"ace/snippets/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/praat.js",
    "content": "ace.define(\"ace/snippets/praat\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"praat\"});                (function() {\n                    ace.require([\"ace/snippets/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/prolog.js",
    "content": "ace.define(\"ace/snippets/prolog\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"prolog\"});                (function() {\n                    ace.require([\"ace/snippets/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/properties.js",
    "content": "ace.define(\"ace/snippets/properties\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"properties\"});                (function() {\n                    ace.require([\"ace/snippets/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/protobuf.js",
    "content": "ace.define(\"ace/snippets/protobuf\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"\",t.scope=\"protobuf\"});                (function() {\n                    ace.require([\"ace/snippets/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/puppet.js",
    "content": "ace.define(\"ace/snippets/puppet\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"puppet\"});                (function() {\n                    ace.require([\"ace/snippets/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/python.js",
    "content": "ace.define(\"ace/snippets/python\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet #!\\n\t#!/usr/bin/env python\\nsnippet imp\\n\timport ${1:module}\\nsnippet from\\n\tfrom ${1:package} import ${2:module}\\n# Module Docstring\\nsnippet docs\\n\t\\'\\'\\'\\n\tFile: ${1:FILENAME:file_name}\\n\tAuthor: ${2:author}\\n\tDescription: ${3}\\n\t\\'\\'\\'\\nsnippet wh\\n\twhile ${1:condition}:\\n\t\t${2:# TODO: write code...}\\n# dowh - does the same as do...while in other languages\\nsnippet dowh\\n\twhile True:\\n\t\t${1:# TODO: write code...}\\n\t\tif ${2:condition}:\\n\t\t\tbreak\\nsnippet with\\n\twith ${1:expr} as ${2:var}:\\n\t\t${3:# TODO: write code...}\\n# New Class\\nsnippet cl\\n\tclass ${1:ClassName}(${2:object}):\\n\t\t\"\"\"${3:docstring for $1}\"\"\"\\n\t\tdef __init__(self, ${4:arg}):\\n\t\t\t${5:super($1, self).__init__()}\\n\t\t\tself.$4 = $4\\n\t\t\t${6}\\n# New Function\\nsnippet def\\n\tdef ${1:fname}(${2:`indent(\\'.\\') ? \\'self\\' : \\'\\'`}):\\n\t\t\"\"\"${3:docstring for $1}\"\"\"\\n\t\t${4:# TODO: write code...}\\nsnippet deff\\n\tdef ${1:fname}(${2:`indent(\\'.\\') ? \\'self\\' : \\'\\'`}):\\n\t\t${3:# TODO: write code...}\\n# New Method\\nsnippet defs\\n\tdef ${1:mname}(self, ${2:arg}):\\n\t\t${3:# TODO: write code...}\\n# New Property\\nsnippet property\\n\tdef ${1:foo}():\\n\t\tdoc = \"${2:The $1 property.}\"\\n\t\tdef fget(self):\\n\t\t\t${3:return self._$1}\\n\t\tdef fset(self, value):\\n\t\t\t${4:self._$1 = value}\\n# Ifs\\nsnippet if\\n\tif ${1:condition}:\\n\t\t${2:# TODO: write code...}\\nsnippet el\\n\telse:\\n\t\t${1:# TODO: write code...}\\nsnippet ei\\n\telif ${1:condition}:\\n\t\t${2:# TODO: write code...}\\n# For\\nsnippet for\\n\tfor ${1:item} in ${2:items}:\\n\t\t${3:# TODO: write code...}\\n# Encodes\\nsnippet cutf8\\n\t# -*- coding: utf-8 -*-\\nsnippet clatin1\\n\t# -*- coding: latin-1 -*-\\nsnippet cascii\\n\t# -*- coding: ascii -*-\\n# Lambda\\nsnippet ld\\n\t${1:var} = lambda ${2:vars} : ${3:action}\\nsnippet .\\n\tself.\\nsnippet try Try/Except\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\nsnippet try Try/Except/Else\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\n\telse:\\n\t\t${5:# TODO: write code...}\\nsnippet try Try/Except/Finally\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\n\tfinally:\\n\t\t${5:# TODO: write code...}\\nsnippet try Try/Except/Else/Finally\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\n\telse:\\n\t\t${5:# TODO: write code...}\\n\tfinally:\\n\t\t${6:# TODO: write code...}\\n# if __name__ == \\'__main__\\':\\nsnippet ifmain\\n\tif __name__ == \\'__main__\\':\\n\t\t${1:main()}\\n# __magic__\\nsnippet _\\n\t__${1:init}__${2}\\n# python debugger (pdb)\\nsnippet pdb\\n\timport pdb; pdb.set_trace()\\n# ipython debugger (ipdb)\\nsnippet ipdb\\n\timport ipdb; ipdb.set_trace()\\n# ipython debugger (pdbbb)\\nsnippet pdbbb\\n\timport pdbpp; pdbpp.set_trace()\\nsnippet pprint\\n\timport pprint; pprint.pprint(${1})${2}\\nsnippet \"\\n\t\"\"\"\\n\t${1:doc}\\n\t\"\"\"\\n# test function/method\\nsnippet test\\n\tdef test_${1:description}(${2:self}):\\n\t\t${3:# TODO: write code...}\\n# test case\\nsnippet testcase\\n\tclass ${1:ExampleCase}(unittest.TestCase):\\n\t\t\\n\t\tdef test_${2:description}(self):\\n\t\t\t${3:# TODO: write code...}\\nsnippet fut\\n\tfrom __future__ import ${1}\\n#getopt\\nsnippet getopt\\n\ttry:\\n\t\t# Short option syntax: \"hv:\"\\n\t\t# Long option syntax: \"help\" or \"verbose=\"\\n\t\topts, args = getopt.getopt(sys.argv[1:], \"${1:short_options}\", [${2:long_options}])\\n\t\\n\texcept getopt.GetoptError, err:\\n\t\t# Print debug info\\n\t\tprint str(err)\\n\t\t${3:error_action}\\n\\n\tfor option, argument in opts:\\n\t\tif option in (\"-h\", \"--help\"):\\n\t\t\t${4}\\n\t\telif option in (\"-v\", \"--verbose\"):\\n\t\t\tverbose = argument\\n',t.scope=\"python\"});                (function() {\n                    ace.require([\"ace/snippets/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/r.js",
    "content": "ace.define(\"ace/snippets/r\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet #!\\n\t#!/usr/bin/env Rscript\\n\\n# includes\\nsnippet lib\\n\tlibrary(${1:package})\\nsnippet req\\n\trequire(${1:package})\\nsnippet source\\n\tsource(\\'${1:file}\\')\\n\\n# conditionals\\nsnippet if\\n\tif (${1:condition}) {\\n\t\t${2:code}\\n\t}\\nsnippet el\\n\telse {\\n\t\t${1:code}\\n\t}\\nsnippet ei\\n\telse if (${1:condition}) {\\n\t\t${2:code}\\n\t}\\n\\n# functions\\nsnippet fun\\n\t${1:name} = function (${2:variables}) {\\n\t\t${3:code}\\n\t}\\nsnippet ret\\n\treturn(${1:code})\\n\\n# dataframes, lists, etc\\nsnippet df\\n\t${1:name}[${2:rows}, ${3:cols}]\\nsnippet c\\n\tc(${1:items})\\nsnippet li\\n\tlist(${1:items})\\nsnippet mat\\n\tmatrix(${1:data}, nrow=${2:rows}, ncol=${3:cols})\\n\\n# apply functions\\nsnippet apply\\n\tapply(${1:array}, ${2:margin}, ${3:function})\\nsnippet lapply\\n\tlapply(${1:list}, ${2:function})\\nsnippet sapply\\n\tsapply(${1:list}, ${2:function})\\nsnippet vapply\\n\tvapply(${1:list}, ${2:function}, ${3:type})\\nsnippet mapply\\n\tmapply(${1:function}, ${2:...})\\nsnippet tapply\\n\ttapply(${1:vector}, ${2:index}, ${3:function})\\nsnippet rapply\\n\trapply(${1:list}, ${2:function})\\n\\n# plyr functions\\nsnippet dd\\n\tddply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet dl\\n\tdlply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet da\\n\tdaply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet d_\\n\td_ply(${1:frame}, ${2:variables}, ${3:function})\\n\\nsnippet ad\\n\tadply(${1:array}, ${2:margin}, ${3:function})\\nsnippet al\\n\talply(${1:array}, ${2:margin}, ${3:function})\\nsnippet aa\\n\taaply(${1:array}, ${2:margin}, ${3:function})\\nsnippet a_\\n\ta_ply(${1:array}, ${2:margin}, ${3:function})\\n\\nsnippet ld\\n\tldply(${1:list}, ${2:function})\\nsnippet ll\\n\tllply(${1:list}, ${2:function})\\nsnippet la\\n\tlaply(${1:list}, ${2:function})\\nsnippet l_\\n\tl_ply(${1:list}, ${2:function})\\n\\nsnippet md\\n\tmdply(${1:matrix}, ${2:function})\\nsnippet ml\\n\tmlply(${1:matrix}, ${2:function})\\nsnippet ma\\n\tmaply(${1:matrix}, ${2:function})\\nsnippet m_\\n\tm_ply(${1:matrix}, ${2:function})\\n\\n# plot functions\\nsnippet pl\\n\tplot(${1:x}, ${2:y})\\nsnippet ggp\\n\tggplot(${1:data}, aes(${2:aesthetics}))\\nsnippet img\\n\t${1:(jpeg,bmp,png,tiff)}(filename=\"${2:filename}\", width=${3}, height=${4}, unit=\"${5}\")\\n\t${6:plot}\\n\tdev.off()\\n\\n# statistical test functions\\nsnippet fis\\n\tfisher.test(${1:x}, ${2:y})\\nsnippet chi\\n\tchisq.test(${1:x}, ${2:y})\\nsnippet tt\\n\tt.test(${1:x}, ${2:y})\\nsnippet wil\\n\twilcox.test(${1:x}, ${2:y})\\nsnippet cor\\n\tcor.test(${1:x}, ${2:y})\\nsnippet fte\\n\tvar.test(${1:x}, ${2:y})\\nsnippet kvt \\n\tkv.test(${1:x}, ${2:y})\\n',t.scope=\"r\"});                (function() {\n                    ace.require([\"ace/snippets/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/razor.js",
    "content": "ace.define(\"ace/snippets/razor\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet if\\n(${1} == ${2}) {\\n\t${3}\\n}\",t.scope=\"razor\"});                (function() {\n                    ace.require([\"ace/snippets/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/rdoc.js",
    "content": "ace.define(\"ace/snippets/rdoc\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"rdoc\"});                (function() {\n                    ace.require([\"ace/snippets/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/red.js",
    "content": "ace.define(\"ace/snippets/red\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\" \",t.scope=\"red\"});                (function() {\n                    ace.require([\"ace/snippets/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/redshift.js",
    "content": "ace.define(\"ace/snippets/redshift\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"redshift\"});                (function() {\n                    ace.require([\"ace/snippets/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/rhtml.js",
    "content": "ace.define(\"ace/snippets/rhtml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"rhtml\"});                (function() {\n                    ace.require([\"ace/snippets/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/rst.js",
    "content": "ace.define(\"ace/snippets/rst\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# rst\\n\\nsnippet :\\n\t:${1:field name}: ${2:field body}\\nsnippet *\\n\t*${1:Emphasis}*\\nsnippet **\\n\t**${1:Strong emphasis}**\\nsnippet _\\n\t\\\\`${1:hyperlink-name}\\\\`_\\n\t.. _\\\\`$1\\\\`: ${2:link-block}\\nsnippet =\\n\t${1:Title}\\n\t=====${2:=}\\n\t${3}\\nsnippet -\\n\t${1:Title}\\n\t-----${2:-}\\n\t${3}\\nsnippet cont:\\n\t.. contents::\\n\t\\n\",t.scope=\"rst\"});                (function() {\n                    ace.require([\"ace/snippets/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/ruby.js",
    "content": "ace.define(\"ace/snippets/ruby\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='########################################\\n# Ruby snippets - for Rails, see below #\\n########################################\\n\\n# encoding for Ruby 1.9\\nsnippet enc\\n\t# encoding: utf-8\\n\\n# #!/usr/bin/env ruby\\nsnippet #!\\n\t#!/usr/bin/env ruby\\n\t# encoding: utf-8\\n\\n# New Block\\nsnippet =b\\n\t=begin rdoc\\n\t\t${1}\\n\t=end\\nsnippet y\\n\t:yields: ${1:arguments}\\nsnippet rb\\n\t#!/usr/bin/env ruby -wKU\\nsnippet beg\\n\tbegin\\n\t\t${3}\\n\trescue ${1:Exception} => ${2:e}\\n\tend\\n\\nsnippet req require\\n\trequire \"${1}\"${2}\\nsnippet #\\n\t# =>\\nsnippet end\\n\t__END__\\nsnippet case\\n\tcase ${1:object}\\n\twhen ${2:condition}\\n\t\t${3}\\n\tend\\nsnippet when\\n\twhen ${1:condition}\\n\t\t${2}\\nsnippet def\\n\tdef ${1:method_name}\\n\t\t${2}\\n\tend\\nsnippet deft\\n\tdef test_${1:case_name}\\n\t\t${2}\\n\tend\\nsnippet if\\n\tif ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet ife\\n\tif ${1:condition}\\n\t\t${2}\\n\telse\\n\t\t${3}\\n\tend\\nsnippet elsif\\n\telsif ${1:condition}\\n\t\t${2}\\nsnippet unless\\n\tunless ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet while\\n\twhile ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet for\\n\tfor ${1:e} in ${2:c}\\n\t\t${3}\\n\tend\\nsnippet until\\n\tuntil ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet cla class .. end\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\t${2}\\n\tend\\nsnippet cla class .. initialize .. end\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\tdef initialize(${2:args})\\n\t\t\t${3}\\n\t\tend\\n\tend\\nsnippet cla class .. < ParentClass .. initialize .. end\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`} < ${2:ParentClass}\\n\t\tdef initialize(${3:args})\\n\t\t\t${4}\\n\t\tend\\n\tend\\nsnippet cla ClassName = Struct .. do .. end\\n\t${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`} = Struct.new(:${2:attr_names}) do\\n\t\tdef ${3:method_name}\\n\t\t\t${4}\\n\t\tend\\n\tend\\nsnippet cla class BlankSlate .. initialize .. end\\n\tclass ${1:BlankSlate}\\n\t\tinstance_methods.each { |meth| undef_method(meth) unless meth =~ /\\\\A__/ }\\n\tend\\nsnippet cla class << self .. end\\n\tclass << ${1:self}\\n\t\t${2}\\n\tend\\n# class .. < DelegateClass .. initialize .. end\\nsnippet cla-\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`} < DelegateClass(${2:ParentClass})\\n\t\tdef initialize(${3:args})\\n\t\t\tsuper(${4:del_obj})\\n\\n\t\t\t${5}\\n\t\tend\\n\tend\\nsnippet mod module .. end\\n\tmodule ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\t${2}\\n\tend\\nsnippet mod module .. module_function .. end\\n\tmodule ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\tmodule_function\\n\\n\t\t${2}\\n\tend\\nsnippet mod module .. ClassMethods .. end\\n\tmodule ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\tmodule ClassMethods\\n\t\t\t${2}\\n\t\tend\\n\\n\t\tmodule InstanceMethods\\n\\n\t\tend\\n\\n\t\tdef self.included(receiver)\\n\t\t\treceiver.extend         ClassMethods\\n\t\t\treceiver.send :include, InstanceMethods\\n\t\tend\\n\tend\\n# attr_reader\\nsnippet r\\n\tattr_reader :${1:attr_names}\\n# attr_writer\\nsnippet w\\n\tattr_writer :${1:attr_names}\\n# attr_accessor\\nsnippet rw\\n\tattr_accessor :${1:attr_names}\\nsnippet atp\\n\tattr_protected :${1:attr_names}\\nsnippet ata\\n\tattr_accessible :${1:attr_names}\\n# include Enumerable\\nsnippet Enum\\n\tinclude Enumerable\\n\\n\tdef each(&block)\\n\t\t${1}\\n\tend\\n# include Comparable\\nsnippet Comp\\n\tinclude Comparable\\n\\n\tdef <=>(other)\\n\t\t${1}\\n\tend\\n# extend Forwardable\\nsnippet Forw-\\n\textend Forwardable\\n# def self\\nsnippet defs\\n\tdef self.${1:class_method_name}\\n\t\t${2}\\n\tend\\n# def method_missing\\nsnippet defmm\\n\tdef method_missing(meth, *args, &blk)\\n\t\t${1}\\n\tend\\nsnippet defd\\n\tdef_delegator :${1:@del_obj}, :${2:del_meth}, :${3:new_name}\\nsnippet defds\\n\tdef_delegators :${1:@del_obj}, :${2:del_methods}\\nsnippet am\\n\talias_method :${1:new_name}, :${2:old_name}\\nsnippet app\\n\tif __FILE__ == $PROGRAM_NAME\\n\t\t${1}\\n\tend\\n# usage_if()\\nsnippet usai\\n\tif ARGV.${1}\\n\t\tabort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\\n\tend\\n# usage_unless()\\nsnippet usau\\n\tunless ARGV.${1}\\n\t\tabort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\\n\tend\\nsnippet array\\n\tArray.new(${1:10}) { |${2:i}| ${3} }\\nsnippet hash\\n\tHash.new { |${1:hash}, ${2:key}| $1[$2] = ${3} }\\nsnippet file File.foreach() { |line| .. }\\n\tFile.foreach(${1:\"path/to/file\"}) { |${2:line}| ${3} }\\nsnippet file File.read()\\n\tFile.read(${1:\"path/to/file\"})${2}\\nsnippet Dir Dir.global() { |file| .. }\\n\tDir.glob(${1:\"dir/glob/*\"}) { |${2:file}| ${3} }\\nsnippet Dir Dir[\"..\"]\\n\tDir[${1:\"glob/**/*.rb\"}]${2}\\nsnippet dir\\n\tFilename.dirname(__FILE__)\\nsnippet deli\\n\tdelete_if { |${1:e}| ${2} }\\nsnippet fil\\n\tfill(${1:range}) { |${2:i}| ${3} }\\n# flatten_once()\\nsnippet flao\\n\tinject(Array.new) { |${1:arr}, ${2:a}| $1.push(*$2)}${3}\\nsnippet zip\\n\tzip(${1:enums}) { |${2:row}| ${3} }\\n# downto(0) { |n| .. }\\nsnippet dow\\n\tdownto(${1:0}) { |${2:n}| ${3} }\\nsnippet ste\\n\tstep(${1:2}) { |${2:n}| ${3} }\\nsnippet tim\\n\ttimes { |${1:n}| ${2} }\\nsnippet upt\\n\tupto(${1:1.0/0.0}) { |${2:n}| ${3} }\\nsnippet loo\\n\tloop { ${1} }\\nsnippet ea\\n\teach { |${1:e}| ${2} }\\nsnippet ead\\n\teach do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet eab\\n\teach_byte { |${1:byte}| ${2} }\\nsnippet eac- each_char { |chr| .. }\\n\teach_char { |${1:chr}| ${2} }\\nsnippet eac- each_cons(..) { |group| .. }\\n\teach_cons(${1:2}) { |${2:group}| ${3} }\\nsnippet eai\\n\teach_index { |${1:i}| ${2} }\\nsnippet eaid\\n\teach_index do |${1:i}|\\n\t\t${2}\\n\tend\\nsnippet eak\\n\teach_key { |${1:key}| ${2} }\\nsnippet eakd\\n\teach_key do |${1:key}|\\n\t\t${2}\\n\tend\\nsnippet eal\\n\teach_line { |${1:line}| ${2} }\\nsnippet eald\\n\teach_line do |${1:line}|\\n\t\t${2}\\n\tend\\nsnippet eap\\n\teach_pair { |${1:name}, ${2:val}| ${3} }\\nsnippet eapd\\n\teach_pair do |${1:name}, ${2:val}|\\n\t\t${3}\\n\tend\\nsnippet eas-\\n\teach_slice(${1:2}) { |${2:group}| ${3} }\\nsnippet easd-\\n\teach_slice(${1:2}) do |${2:group}|\\n\t\t${3}\\n\tend\\nsnippet eav\\n\teach_value { |${1:val}| ${2} }\\nsnippet eavd\\n\teach_value do |${1:val}|\\n\t\t${2}\\n\tend\\nsnippet eawi\\n\teach_with_index { |${1:e}, ${2:i}| ${3} }\\nsnippet eawid\\n\teach_with_index do |${1:e},${2:i}|\\n\t\t${3}\\n\tend\\nsnippet reve\\n\treverse_each { |${1:e}| ${2} }\\nsnippet reved\\n\treverse_each do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet inj\\n\tinject(${1:init}) { |${2:mem}, ${3:var}| ${4} }\\nsnippet injd\\n\tinject(${1:init}) do |${2:mem}, ${3:var}|\\n\t\t${4}\\n\tend\\nsnippet map\\n\tmap { |${1:e}| ${2} }\\nsnippet mapd\\n\tmap do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet mapwi-\\n\tenum_with_index.map { |${1:e}, ${2:i}| ${3} }\\nsnippet sor\\n\tsort { |a, b| ${1} }\\nsnippet sorb\\n\tsort_by { |${1:e}| ${2} }\\nsnippet ran\\n\tsort_by { rand }\\nsnippet all\\n\tall? { |${1:e}| ${2} }\\nsnippet any\\n\tany? { |${1:e}| ${2} }\\nsnippet cl\\n\tclassify { |${1:e}| ${2} }\\nsnippet col\\n\tcollect { |${1:e}| ${2} }\\nsnippet cold\\n\tcollect do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet det\\n\tdetect { |${1:e}| ${2} }\\nsnippet detd\\n\tdetect do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet fet\\n\tfetch(${1:name}) { |${2:key}| ${3} }\\nsnippet fin\\n\tfind { |${1:e}| ${2} }\\nsnippet find\\n\tfind do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet fina\\n\tfind_all { |${1:e}| ${2} }\\nsnippet finad\\n\tfind_all do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet gre\\n\tgrep(${1:/pattern/}) { |${2:match}| ${3} }\\nsnippet sub\\n\t${1:g}sub(${2:/pattern/}) { |${3:match}| ${4} }\\nsnippet sca\\n\tscan(${1:/pattern/}) { |${2:match}| ${3} }\\nsnippet scad\\n\tscan(${1:/pattern/}) do |${2:match}|\\n\t\t${3}\\n\tend\\nsnippet max\\n\tmax { |a, b| ${1} }\\nsnippet min\\n\tmin { |a, b| ${1} }\\nsnippet par\\n\tpartition { |${1:e}| ${2} }\\nsnippet pard\\n\tpartition do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet rej\\n\treject { |${1:e}| ${2} }\\nsnippet rejd\\n\treject do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet sel\\n\tselect { |${1:e}| ${2} }\\nsnippet seld\\n\tselect do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet lam\\n\tlambda { |${1:args}| ${2} }\\nsnippet doo\\n\tdo\\n\t\t${1}\\n\tend\\nsnippet dov\\n\tdo |${1:variable}|\\n\t\t${2}\\n\tend\\nsnippet :\\n\t:${1:key} => ${2:\"value\"}${3}\\nsnippet ope\\n\topen(${1:\"path/or/url/or/pipe\"}, \"${2:w}\") { |${3:io}| ${4} }\\n# path_from_here()\\nsnippet fpath\\n\tFile.join(File.dirname(__FILE__), *%2[${1:rel path here}])${2}\\n# unix_filter {}\\nsnippet unif\\n\tARGF.each_line${1} do |${2:line}|\\n\t\t${3}\\n\tend\\n# option_parse {}\\nsnippet optp\\n\trequire \"optparse\"\\n\\n\toptions = {${1:default => \"args\"}}\\n\\n\tARGV.options do |opts|\\n\t\topts.banner = \"Usage: #{File.basename($PROGRAM_NAME)}\\nsnippet opt\\n\topts.on( \"-${1:o}\", \"--${2:long-option-name}\", ${3:String},\\n\t         \"${4:Option description.}\") do |${5:opt}|\\n\t\t${6}\\n\tend\\nsnippet tc\\n\trequire \"test/unit\"\\n\\n\trequire \"${1:library_file_name}\"\\n\\n\tclass Test${2:$1} < Test::Unit::TestCase\\n\t\tdef test_${3:case_name}\\n\t\t\t${4}\\n\t\tend\\n\tend\\nsnippet ts\\n\trequire \"test/unit\"\\n\\n\trequire \"tc_${1:test_case_file}\"\\n\trequire \"tc_${2:test_case_file}\"${3}\\nsnippet as\\n\tassert ${1:test}, \"${2:Failure message.}\"${3}\\nsnippet ase\\n\tassert_equal ${1:expected}, ${2:actual}${3}\\nsnippet asne\\n\tassert_not_equal ${1:unexpected}, ${2:actual}${3}\\nsnippet asid\\n\tassert_in_delta ${1:expected_float}, ${2:actual_float}, ${3:2 ** -20}${4}\\nsnippet asio\\n\tassert_instance_of ${1:ExpectedClass}, ${2:actual_instance}${3}\\nsnippet asko\\n\tassert_kind_of ${1:ExpectedKind}, ${2:actual_instance}${3}\\nsnippet asn\\n\tassert_nil ${1:instance}${2}\\nsnippet asnn\\n\tassert_not_nil ${1:instance}${2}\\nsnippet asm\\n\tassert_match /${1:expected_pattern}/, ${2:actual_string}${3}\\nsnippet asnm\\n\tassert_no_match /${1:unexpected_pattern}/, ${2:actual_string}${3}\\nsnippet aso\\n\tassert_operator ${1:left}, :${2:operator}, ${3:right}${4}\\nsnippet asr\\n\tassert_raise ${1:Exception} { ${2} }\\nsnippet asrd\\n\tassert_raise ${1:Exception} do\\n\t\t${2}\\n\tend\\nsnippet asnr\\n\tassert_nothing_raised ${1:Exception} { ${2} }\\nsnippet asnrd\\n\tassert_nothing_raised ${1:Exception} do\\n\t\t${2}\\n\tend\\nsnippet asrt\\n\tassert_respond_to ${1:object}, :${2:method}${3}\\nsnippet ass assert_same(..)\\n\tassert_same ${1:expected}, ${2:actual}${3}\\nsnippet ass assert_send(..)\\n\tassert_send [${1:object}, :${2:message}, ${3:args}]${4}\\nsnippet asns\\n\tassert_not_same ${1:unexpected}, ${2:actual}${3}\\nsnippet ast\\n\tassert_throws :${1:expected} { ${2} }\\nsnippet astd\\n\tassert_throws :${1:expected} do\\n\t\t${2}\\n\tend\\nsnippet asnt\\n\tassert_nothing_thrown { ${1} }\\nsnippet asntd\\n\tassert_nothing_thrown do\\n\t\t${1}\\n\tend\\nsnippet fl\\n\tflunk \"${1:Failure message.}\"${2}\\n# Benchmark.bmbm do .. end\\nsnippet bm-\\n\tTESTS = ${1:10_000}\\n\tBenchmark.bmbm do |results|\\n\t\t${2}\\n\tend\\nsnippet rep\\n\tresults.report(\"${1:name}:\") { TESTS.times { ${2} }}\\n# Marshal.dump(.., file)\\nsnippet Md\\n\tFile.open(${1:\"path/to/file.dump\"}, \"wb\") { |${2:file}| Marshal.dump(${3:obj}, $2) }${4}\\n# Mashal.load(obj)\\nsnippet Ml\\n\tFile.open(${1:\"path/to/file.dump\"}, \"rb\") { |${2:file}| Marshal.load($2) }${3}\\n# deep_copy(..)\\nsnippet deec\\n\tMarshal.load(Marshal.dump(${1:obj_to_copy}))${2}\\nsnippet Pn-\\n\tPStore.new(${1:\"file_name.pstore\"})${2}\\nsnippet tra\\n\ttransaction(${1:true}) { ${2} }\\n# xmlread(..)\\nsnippet xml-\\n\tREXML::Document.new(File.read(${1:\"path/to/file\"}))${2}\\n# xpath(..) { .. }\\nsnippet xpa\\n\telements.each(${1:\"//Xpath\"}) do |${2:node}|\\n\t\t${3}\\n\tend\\n# class_from_name()\\nsnippet clafn\\n\tsplit(\"::\").inject(Object) { |par, const| par.const_get(const) }\\n# singleton_class()\\nsnippet sinc\\n\tclass << self; self end\\nsnippet nam\\n\tnamespace :${1:`Filename()`} do\\n\t\t${2}\\n\tend\\nsnippet tas\\n\tdesc \"${1:Task description}\"\\n\ttask :${2:task_name => [:dependent, :tasks]} do\\n\t\t${3}\\n\tend\\n# block\\nsnippet b\\n\t{ |${1:var}| ${2} }\\nsnippet begin\\n\tbegin\\n\t\traise \\'A test exception.\\'\\n\trescue Exception => e\\n\t\tputs e.message\\n\t\tputs e.backtrace.inspect\\n\telse\\n\t\t# other exception\\n\tensure\\n\t\t# always executed\\n\tend\\n\\n#debugging\\nsnippet debug\\n\trequire \\'ruby-debug\\'; debugger; true;\\nsnippet pry\\n\trequire \\'pry\\'; binding.pry\\n\\n#############################################\\n# Rails snippets - for pure Ruby, see above #\\n#############################################\\nsnippet art\\n\tassert_redirected_to ${1::action => \"${2:index}\"}\\nsnippet artnp\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1}, ${4:@$2})\\nsnippet artnpp\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1})\\nsnippet artp\\n\tassert_redirected_to ${1:model}_path(${2:@$1})\\nsnippet artpp\\n\tassert_redirected_to ${1:model}s_path\\nsnippet asd\\n\tassert_difference \"${1:Model}.${2:count}\", $1 do\\n\t\t${3}\\n\tend\\nsnippet asnd\\n\tassert_no_difference \"${1:Model}.${2:count}\" do\\n\t\t${3}\\n\tend\\nsnippet asre\\n\tassert_response :${1:success}, @response.body${2}\\nsnippet asrj\\n\tassert_rjs :${1:replace}, \"${2:dom id}\"\\nsnippet ass assert_select(..)\\n\tassert_select \\'${1:path}\\', :${2:text} => \\'${3:inner_html\\' ${4:do}\\nsnippet bf\\n\tbefore_filter :${1:method}\\nsnippet bt\\n\tbelongs_to :${1:association}\\nsnippet crw\\n\tcattr_accessor :${1:attr_names}\\nsnippet defcreate\\n\tdef create\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new(params[:$1])\\n\\n\t\trespond_to do |wants|\\n\t\t\tif @$1.save\\n\t\t\t\tflash[:notice] = \\'$2 was successfully created.\\'\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\t\t\t\twants.xml  { render :xml => @$1, :status => :created, :location => @$1 }\\n\t\t\telse\\n\t\t\t\twants.html { render :action => \"new\" }\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\t\t\tend\\n\t\tend\\n\tend${3}\\nsnippet defdestroy\\n\tdef destroy\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\t\t@$1.destroy\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html { redirect_to($1s_url) }\\n\t\t\twants.xml  { head :ok }\\n\t\tend\\n\tend${3}\\nsnippet defedit\\n\tdef edit\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\tend\\nsnippet defindex\\n\tdef index\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.all\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html # index.html.erb\\n\t\t\twants.xml  { render :xml => @$1s }\\n\t\tend\\n\tend${3}\\nsnippet defnew\\n\tdef new\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html # new.html.erb\\n\t\t\twants.xml  { render :xml => @$1 }\\n\t\tend\\n\tend${3}\\nsnippet defshow\\n\tdef show\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html # show.html.erb\\n\t\t\twants.xml  { render :xml => @$1 }\\n\t\tend\\n\tend${3}\\nsnippet defupdate\\n\tdef update\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\n\t\trespond_to do |wants|\\n\t\t\tif @$1.update_attributes(params[:$1])\\n\t\t\t\tflash[:notice] = \\'$2 was successfully updated.\\'\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\t\t\t\twants.xml  { head :ok }\\n\t\t\telse\\n\t\t\t\twants.html { render :action => \"edit\" }\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\t\t\tend\\n\t\tend\\n\tend${3}\\nsnippet flash\\n\tflash[:${1:notice}] = \"${2}\"\\nsnippet habtm\\n\thas_and_belongs_to_many :${1:object}, :join_table => \"${2:table_name}\", :foreign_key => \"${3}_id\"${4}\\nsnippet hm\\n\thas_many :${1:object}\\nsnippet hmd\\n\thas_many :${1:other}s, :class_name => \"${2:$1}\", :foreign_key => \"${3:$1}_id\", :dependent => :destroy${4}\\nsnippet hmt\\n\thas_many :${1:object}, :through => :${2:object}\\nsnippet ho\\n\thas_one :${1:object}\\nsnippet i18\\n\tI18n.t(\\'${1:type.key}\\')${2}\\nsnippet ist\\n\t<%= image_submit_tag(\"${1:agree.png}\", :id => \"${2:id}\"${3} %>\\nsnippet log\\n\tRails.logger.${1:debug} ${2}\\nsnippet log2\\n\tRAILS_DEFAULT_LOGGER.${1:debug} ${2}\\nsnippet logd\\n\tlogger.debug { \"${1:message}\" }${2}\\nsnippet loge\\n\tlogger.error { \"${1:message}\" }${2}\\nsnippet logf\\n\tlogger.fatal { \"${1:message}\" }${2}\\nsnippet logi\\n\tlogger.info { \"${1:message}\" }${2}\\nsnippet logw\\n\tlogger.warn { \"${1:message}\" }${2}\\nsnippet mapc\\n\t${1:map}.${2:connect} \\'${3:controller/:action/:id}\\'\\nsnippet mapca\\n\t${1:map}.catch_all \"*${2:anything}\", :controller => \"${3:default}\", :action => \"${4:error}\"${5}\\nsnippet mapr\\n\t${1:map}.resource :${2:resource}\\nsnippet maprs\\n\t${1:map}.resources :${2:resource}\\nsnippet mapwo\\n\t${1:map}.with_options :${2:controller} => \\'${3:thing}\\' do |$3|\\n\t\t${4}\\n\tend\\nsnippet mbs\\n\tbefore_save :${1:method}\\nsnippet mcht\\n\tchange_table :${1:table_name} do |t|\\n\t\t${2}\\n\tend\\nsnippet mp\\n\tmap(&:${1:id})\\nsnippet mrw\\n\tmattr_accessor :${1:attr_names}\\nsnippet oa\\n\torder(\"${1:field}\")\\nsnippet od\\n\torder(\"${1:field} DESC\")\\nsnippet pa\\n\tparams[:${1:id}]${2}\\nsnippet ra\\n\trender :action => \"${1:action}\"\\nsnippet ral\\n\trender :action => \"${1:action}\", :layout => \"${2:layoutname}\"\\nsnippet rest\\n\trespond_to do |wants|\\n\t\twants.${1:html} { ${2} }\\n\tend\\nsnippet rf\\n\trender :file => \"${1:filepath}\"\\nsnippet rfu\\n\trender :file => \"${1:filepath}\", :use_full_path => ${2:false}\\nsnippet ri\\n\trender :inline => \"${1:<%= \\'hello\\' %>}\"\\nsnippet ril\\n\trender :inline => \"${1:<%= \\'hello\\' %>}\", :locals => { ${2::name} => \"${3:value}\"${4} }\\nsnippet rit\\n\trender :inline => \"${1:<%= \\'hello\\' %>}\", :type => ${2::rxml}\\nsnippet rjson\\n\trender :json => ${1:text to render}\\nsnippet rl\\n\trender :layout => \"${1:layoutname}\"\\nsnippet rn\\n\trender :nothing => ${1:true}\\nsnippet rns\\n\trender :nothing => ${1:true}, :status => ${2:401}\\nsnippet rp\\n\trender :partial => \"${1:item}\"\\nsnippet rpc\\n\trender :partial => \"${1:item}\", :collection => ${2:@$1s}\\nsnippet rpl\\n\trender :partial => \"${1:item}\", :locals => { :${2:$1} => ${3:@$1}\\nsnippet rpo\\n\trender :partial => \"${1:item}\", :object => ${2:@$1}\\nsnippet rps\\n\trender :partial => \"${1:item}\", :status => ${2:500}\\nsnippet rt\\n\trender :text => \"${1:text to render}\"\\nsnippet rtl\\n\trender :text => \"${1:text to render}\", :layout => \"${2:layoutname}\"\\nsnippet rtlt\\n\trender :text => \"${1:text to render}\", :layout => ${2:true}\\nsnippet rts\\n\trender :text => \"${1:text to render}\", :status => ${2:401}\\nsnippet ru\\n\trender :update do |${1:page}|\\n\t\t$1.${2}\\n\tend\\nsnippet rxml\\n\trender :xml => ${1:text to render}\\nsnippet sc\\n\tscope :${1:name}, :where(:@${2:field} => ${3:value})\\nsnippet sl\\n\tscope :${1:name}, lambda do |${2:value}|\\n\t\twhere(\"${3:field = ?}\", ${4:bind var})\\n\tend\\nsnippet sha1\\n\tDigest::SHA1.hexdigest(${1:string})\\nsnippet sweeper\\n\tclass ${1:ModelClassName}Sweeper < ActionController::Caching::Sweeper\\n\t\tobserve $1\\n\\n\t\tdef after_save(${2:model_class_name})\\n\t\t\texpire_cache($2)\\n\t\tend\\n\\n\t\tdef after_destroy($2)\\n\t\t\texpire_cache($2)\\n\t\tend\\n\\n\t\tdef expire_cache($2)\\n\t\t\texpire_page\\n\t\tend\\n\tend\\nsnippet tcb\\n\tt.boolean :${1:title}\\n\t${2}\\nsnippet tcbi\\n\tt.binary :${1:title}, :limit => ${2:2}.megabytes\\n\t${3}\\nsnippet tcd\\n\tt.decimal :${1:title}, :precision => ${2:10}, :scale => ${3:2}\\n\t${4}\\nsnippet tcda\\n\tt.date :${1:title}\\n\t${2}\\nsnippet tcdt\\n\tt.datetime :${1:title}\\n\t${2}\\nsnippet tcf\\n\tt.float :${1:title}\\n\t${2}\\nsnippet tch\\n\tt.change :${1:name}, :${2:string}, :${3:limit} => ${4:80}\\n\t${5}\\nsnippet tci\\n\tt.integer :${1:title}\\n\t${2}\\nsnippet tcl\\n\tt.integer :lock_version, :null => false, :default => 0\\n\t${1}\\nsnippet tcr\\n\tt.references :${1:taggable}, :polymorphic => { :default => \\'${2:Photo}\\' }\\n\t${3}\\nsnippet tcs\\n\tt.string :${1:title}\\n\t${2}\\nsnippet tct\\n\tt.text :${1:title}\\n\t${2}\\nsnippet tcti\\n\tt.time :${1:title}\\n\t${2}\\nsnippet tcts\\n\tt.timestamp :${1:title}\\n\t${2}\\nsnippet tctss\\n\tt.timestamps\\n\t${1}\\nsnippet va\\n\tvalidates_associated :${1:attribute}\\nsnippet vao\\n\tvalidates_acceptance_of :${1:terms}\\nsnippet vc\\n\tvalidates_confirmation_of :${1:attribute}\\nsnippet ve\\n\tvalidates_exclusion_of :${1:attribute}, :in => ${2:%w( mov avi )}\\nsnippet vf\\n\tvalidates_format_of :${1:attribute}, :with => /${2:regex}/\\nsnippet vi\\n\tvalidates_inclusion_of :${1:attribute}, :in => %w(${2: mov avi })\\nsnippet vl\\n\tvalidates_length_of :${1:attribute}, :within => ${2:3}..${3:20}\\nsnippet vn\\n\tvalidates_numericality_of :${1:attribute}\\nsnippet vpo\\n\tvalidates_presence_of :${1:attribute}\\nsnippet vu\\n\tvalidates_uniqueness_of :${1:attribute}\\nsnippet wants\\n\twants.${1:js|xml|html} { ${2} }\\nsnippet wc\\n\twhere(${1:\"conditions\"}${2:, bind_var})\\nsnippet wh\\n\twhere(${1:field} => ${2:value})\\nsnippet xdelete\\n\txhr :delete, :${1:destroy}, :id => ${2:1}${3}\\nsnippet xget\\n\txhr :get, :${1:show}, :id => ${2:1}${3}\\nsnippet xpost\\n\txhr :post, :${1:create}, :${2:object} => { ${3} }\\nsnippet xput\\n\txhr :put, :${1:update}, :id => ${2:1}, :${3:object} => { ${4} }${5}\\nsnippet test\\n\ttest \"should ${1:do something}\" do\\n\t\t${2}\\n\tend\\n#migrations\\nsnippet mac\\n\tadd_column :${1:table_name}, :${2:column_name}, :${3:data_type}\\nsnippet mrc\\n\tremove_column :${1:table_name}, :${2:column_name}\\nsnippet mrnc\\n\trename_column :${1:table_name}, :${2:old_column_name}, :${3:new_column_name}\\nsnippet mcc\\n\tchange_column :${1:table}, :${2:column}, :${3:type}\\nsnippet mccc\\n\tt.column :${1:title}, :${2:string}\\nsnippet mct\\n\tcreate_table :${1:table_name} do |t|\\n\t\tt.column :${2:name}, :${3:type}\\n\tend\\nsnippet migration\\n\tclass ${1:class_name} < ActiveRecord::Migration\\n\t\tdef self.up\\n\t\t\t${2}\\n\t\tend\\n\\n\t\tdef self.down\\n\t\tend\\n\tend\\n\\nsnippet trc\\n\tt.remove :${1:column}\\nsnippet tre\\n\tt.rename :${1:old_column_name}, :${2:new_column_name}\\n\t${3}\\nsnippet tref\\n\tt.references :${1:model}\\n\\n#rspec\\nsnippet it\\n\tit \"${1:spec_name}\" do\\n\t\t${2}\\n\tend\\nsnippet itp\\n\tit \"${1:spec_name}\"\\n\t${2}\\nsnippet desc\\n\tdescribe ${1:class_name} do\\n\t\t${2}\\n\tend\\nsnippet cont\\n\tcontext \"${1:message}\" do\\n\t\t${2}\\n\tend\\nsnippet bef\\n\tbefore :${1:each} do\\n\t\t${2}\\n\tend\\nsnippet aft\\n\tafter :${1:each} do\\n\t\t${2}\\n\tend\\n',t.scope=\"ruby\"});                (function() {\n                    ace.require([\"ace/snippets/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/rust.js",
    "content": "ace.define(\"ace/snippets/rust\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"rust\"});                (function() {\n                    ace.require([\"ace/snippets/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/sass.js",
    "content": "ace.define(\"ace/snippets/sass\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"sass\"});                (function() {\n                    ace.require([\"ace/snippets/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/scad.js",
    "content": "ace.define(\"ace/snippets/scad\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scad\"});                (function() {\n                    ace.require([\"ace/snippets/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/scala.js",
    "content": "ace.define(\"ace/snippets/scala\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scala\"});                (function() {\n                    ace.require([\"ace/snippets/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/scheme.js",
    "content": "ace.define(\"ace/snippets/scheme\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scheme\"});                (function() {\n                    ace.require([\"ace/snippets/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/scss.js",
    "content": "ace.define(\"ace/snippets/scss\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scss\"});                (function() {\n                    ace.require([\"ace/snippets/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/sh.js",
    "content": "ace.define(\"ace/snippets/sh\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Shebang. Executing bash via /usr/bin/env makes scripts more portable.\\nsnippet #!\\n\t#!/usr/bin/env bash\\n\t\\nsnippet if\\n\tif [[ ${1:condition} ]]; then\\n\t\t${2:#statements}\\n\tfi\\nsnippet elif\\n\telif [[ ${1:condition} ]]; then\\n\t\t${2:#statements}\\nsnippet for\\n\tfor (( ${2:i} = 0; $2 < ${1:count}; $2++ )); do\\n\t\t${3:#statements}\\n\tdone\\nsnippet fori\\n\tfor ${1:needle} in ${2:haystack} ; do\\n\t\t${3:#statements}\\n\tdone\\nsnippet wh\\n\twhile [[ ${1:condition} ]]; do\\n\t\t${2:#statements}\\n\tdone\\nsnippet until\\n\tuntil [[ ${1:condition} ]]; do\\n\t\t${2:#statements}\\n\tdone\\nsnippet case\\n\tcase ${1:word} in\\n\t\t${2:pattern})\\n\t\t\t${3};;\\n\tesac\\nsnippet go \\n\twhile getopts \\'${1:o}\\' ${2:opts} \\n\tdo \\n\t\tcase $$2 in\\n\t\t${3:o0})\\n\t\t\t${4:#staments};;\\n\t\tesac\\n\tdone\\n# Set SCRIPT_DIR variable to directory script is located.\\nsnippet sdir\\n\tSCRIPT_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\\n# getopt\\nsnippet getopt\\n\t__ScriptVersion=\"${1:version}\"\\n\\n\t#===  FUNCTION  ================================================================\\n\t#         NAME:  usage\\n\t#  DESCRIPTION:  Display usage information.\\n\t#===============================================================================\\n\tfunction usage ()\\n\t{\\n\t\t\tcat <<- EOT\\n\\n\t  Usage :  $${0:0} [options] [--] \\n\\n\t  Options: \\n\t  -h|help       Display this message\\n\t  -v|version    Display script version\\n\\n\tEOT\\n\t}    # ----------  end of function usage  ----------\\n\\n\t#-----------------------------------------------------------------------\\n\t#  Handle command line arguments\\n\t#-----------------------------------------------------------------------\\n\\n\twhile getopts \":hv\" opt\\n\tdo\\n\t  case $opt in\\n\\n\t\th|help     )  usage; exit 0   ;;\\n\\n\t\tv|version  )  echo \"$${0:0} -- Version $__ScriptVersion\"; exit 0   ;;\\n\\n\t\t\\\\? )  echo -e \"\\\\n  Option does not exist : $OPTARG\\\\n\"\\n\t\t\t  usage; exit 1   ;;\\n\\n\t  esac    # --- end of case ---\\n\tdone\\n\tshift $(($OPTIND-1))\\n\\n',t.scope=\"sh\"});                (function() {\n                    ace.require([\"ace/snippets/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/sjs.js",
    "content": "ace.define(\"ace/snippets/sjs\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"sjs\"});                (function() {\n                    ace.require([\"ace/snippets/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/slim.js",
    "content": "ace.define(\"ace/snippets/slim\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"slim\"});                (function() {\n                    ace.require([\"ace/snippets/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/smarty.js",
    "content": "ace.define(\"ace/snippets/smarty\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"smarty\"});                (function() {\n                    ace.require([\"ace/snippets/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/snippets.js",
    "content": "ace.define(\"ace/snippets/snippets\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# snippets for making snippets :)\\nsnippet snip\\n\tsnippet ${1:trigger}\\n\t\t${2}\\nsnippet msnip\\n\tsnippet ${1:trigger} ${2:description}\\n\t\t${3}\\nsnippet v\\n\t{VISUAL}\\n\",t.scope=\"snippets\"});                (function() {\n                    ace.require([\"ace/snippets/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/soy_template.js",
    "content": "ace.define(\"ace/snippets/soy_template\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"soy_template\"});                (function() {\n                    ace.require([\"ace/snippets/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/space.js",
    "content": "ace.define(\"ace/snippets/space\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"space\"});                (function() {\n                    ace.require([\"ace/snippets/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/sparql.js",
    "content": "ace.define(\"ace/snippets/sparql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/sql.js",
    "content": "ace.define(\"ace/snippets/sql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet tbl\\n\tcreate table ${1:table} (\\n\t\t${2:columns}\\n\t);\\nsnippet col\\n\t${1:name}\t${2:type}\t${3:default ''}\t${4:not null}\\nsnippet ccol\\n\t${1:name}\tvarchar2(${2:size})\t${3:default ''}\t${4:not null}\\nsnippet ncol\\n\t${1:name}\tnumber\t${3:default 0}\t${4:not null}\\nsnippet dcol\\n\t${1:name}\tdate\t${3:default sysdate}\t${4:not null}\\nsnippet ind\\n\tcreate index ${3:$1_$2} on ${1:table}(${2:column});\\nsnippet uind\\n\tcreate unique index ${1:name} on ${2:table}(${3:column});\\nsnippet tblcom\\n\tcomment on table ${1:table} is '${2:comment}';\\nsnippet colcom\\n\tcomment on column ${1:table}.${2:column} is '${3:comment}';\\nsnippet addcol\\n\talter table ${1:table} add (${2:column} ${3:type});\\nsnippet seq\\n\tcreate sequence ${1:name} start with ${2:1} increment by ${3:1} minvalue ${4:1};\\nsnippet s*\\n\tselect * from ${1:table}\\n\",t.scope=\"sql\"});                (function() {\n                    ace.require([\"ace/snippets/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/sqlserver.js",
    "content": "ace.define(\"ace/snippets/sqlserver\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# ISNULL\\nsnippet isnull\\n\tISNULL(${1:check_expression}, ${2:replacement_value})\\n# FORMAT\\nsnippet format\\n\tFORMAT(${1:value}, ${2:format})\\n# CAST\\nsnippet cast\\n\tCAST(${1:expression} AS ${2:data_type})\\n# CONVERT\\nsnippet convert\\n\tCONVERT(${1:data_type}, ${2:expression})\\n# DATEPART\\nsnippet datepart\\n\tDATEPART(${1:datepart}, ${2:date})\\n# DATEDIFF\\nsnippet datediff\\n\tDATEDIFF(${1:datepart}, ${2:startdate}, ${3:enddate})\\n# DATEADD\\nsnippet dateadd\\n\tDATEADD(${1:datepart}, ${2:number}, ${3:date})\\n# DATEFROMPARTS \\nsnippet datefromparts\\n\tDATEFROMPARTS(${1:year}, ${2:month}, ${3:day})\\n# OBJECT_DEFINITION\\nsnippet objectdef\\n\tSELECT OBJECT_DEFINITION(OBJECT_ID('${1:sys.server_permissions /*object name*/}'))\\n# STUFF XML\\nsnippet stuffxml\\n\tSTUFF((SELECT ', ' + ${1:ColumnName}\\n\t\tFROM ${2:TableName}\\n\t\tWHERE ${3:WhereClause}\\n\t\tFOR XML PATH('')), 1, 1, '') AS ${4:Alias}\\n\t${5:/*https://msdn.microsoft.com/en-us/library/ms188043.aspx*/}\\n# Create Procedure\\nsnippet createproc\\n\t-- =============================================\\n\t-- Author:\t\t${1:Author}\\n\t-- Create date: ${2:Date}\\n\t-- Description:\t${3:Description}\\n\t-- =============================================\\n\tCREATE PROCEDURE ${4:Procedure_Name}\\n\t\t${5:/*Add the parameters for the stored procedure here*/}\\n\tAS\\n\tBEGIN\\n\t\t-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.\\n\t\tSET NOCOUNT ON;\\n\t\t\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\t\t\\n\tEND\\n\tGO\\n# Create Scalar Function\\nsnippet createfn\\n\t-- =============================================\\n\t-- Author:\t\t${1:Author}\\n\t-- Create date: ${2:Date}\\n\t-- Description:\t${3:Description}\\n\t-- =============================================\\n\tCREATE FUNCTION ${4:Scalar_Function_Name}\\n\t\t-- Add the parameters for the function here\\n\tRETURNS ${5:Function_Data_Type}\\n\tAS\\n\tBEGIN\\n\t\tDECLARE @Result ${5:Function_Data_Type}\\n\t\t\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\t\t\\n\tEND\\n\tGO\",t.scope=\"sqlserver\"});                (function() {\n                    ace.require([\"ace/snippets/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/stylus.js",
    "content": "ace.define(\"ace/snippets/stylus\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"stylus\"});                (function() {\n                    ace.require([\"ace/snippets/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/svg.js",
    "content": "ace.define(\"ace/snippets/svg\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"svg\"});                (function() {\n                    ace.require([\"ace/snippets/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/swift.js",
    "content": "ace.define(\"ace/snippets/swift\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"swift\"});                (function() {\n                    ace.require([\"ace/snippets/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/tcl.js",
    "content": "ace.define(\"ace/snippets/tcl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# #!/usr/bin/env tclsh\\nsnippet #!\\n\t#!/usr/bin/env tclsh\\n\t\\n# Process\\nsnippet pro\\n\tproc ${1:function_name} {${2:args}} {\\n\t\t${3:#body ...}\\n\t}\\n#xif\\nsnippet xif\\n\t${1:expr}? ${2:true} : ${3:false}\\n# Conditional\\nsnippet if\\n\tif {${1}} {\\n\t\t${2:# body...}\\n\t}\\n# Conditional if..else\\nsnippet ife\\n\tif {${1}} {\\n\t\t${2:# body...}\\n\t} else {\\n\t\t${3:# else...}\\n\t}\\n# Conditional if..elsif..else\\nsnippet ifee\\n\tif {${1}} {\\n\t\t${2:# body...}\\n\t} elseif {${3}} {\\n\t\t${4:# elsif...}\\n\t} else {\\n\t\t${5:# else...}\\n\t}\\n# If catch then\\nsnippet ifc\\n\tif { [catch {${1:#do something...}} ${2:err}] } {\\n\t\t${3:# handle failure...}\\n\t}\\n# Catch\\nsnippet catch\\n\tcatch {${1}} ${2:err} ${3:options}\\n# While Loop\\nsnippet wh\\n\twhile {${1}} {\\n\t\t${2:# body...}\\n\t}\\n# For Loop\\nsnippet for\\n\tfor {set ${2:var} 0} {$$2 < ${1:count}} {${3:incr} $2} {\\n\t\t${4:# body...}\\n\t}\\n# Foreach Loop\\nsnippet fore\\n\tforeach ${1:x} {${2:#list}} {\\n\t\t${3:# body...}\\n\t}\\n# after ms script...\\nsnippet af\\n\tafter ${1:ms} ${2:#do something}\\n# after cancel id\\nsnippet afc\\n\tafter cancel ${1:id or script}\\n# after idle\\nsnippet afi\\n\tafter idle ${1:script}\\n# after info id\\nsnippet afin\\n\tafter info ${1:id}\\n# Expr\\nsnippet exp\\n\texpr {${1:#expression here}}\\n# Switch\\nsnippet sw\\n\tswitch ${1:var} {\\n\t\t${3:pattern 1} {\\n\t\t\t${4:#do something}\\n\t\t}\\n\t\tdefault {\\n\t\t\t${2:#do something}\\n\t\t}\\n\t}\\n# Case\\nsnippet ca\\n\t${1:pattern} {\\n\t\t${2:#do something}\\n\t}${3}\\n# Namespace eval\\nsnippet ns\\n\tnamespace eval ${1:path} {${2:#script...}}\\n# Namespace current\\nsnippet nsc\\n\tnamespace current\\n\",t.scope=\"tcl\"});                (function() {\n                    ace.require([\"ace/snippets/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/terraform.js",
    "content": "ace.define(\"ace/snippets/terraform\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"terraform\"});                (function() {\n                    ace.require([\"ace/snippets/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/tex.js",
    "content": "ace.define(\"ace/snippets/tex\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"#PREAMBLE\\n#newcommand\\nsnippet nc\\n\t\\\\newcommand{\\\\${1:cmd}}[${2:opt}]{${3:realcmd}}${4}\\n#usepackage\\nsnippet up\\n\t\\\\usepackage[${1:[options}]{${2:package}}\\n#newunicodechar\\nsnippet nuc\\n\t\\\\newunicodechar{${1}}{${2:\\\\ensuremath}${3:tex-substitute}}}\\n#DeclareMathOperator\\nsnippet dmo\\n\t\\\\DeclareMathOperator{${1}}{${2}}\\n\\n#DOCUMENT\\n# \\\\begin{}...\\\\end{}\\nsnippet begin\\n\t\\\\begin{${1:env}}\\n\t\t${2}\\n\t\\\\end{$1}\\n# Tabular\\nsnippet tab\\n\t\\\\begin{${1:tabular}}{${2:c}}\\n\t${3}\\n\t\\\\end{$1}\\nsnippet thm\\n\t\\\\begin[${1:author}]{${2:thm}}\\n\t${3}\\n\t\\\\end{$1}\\nsnippet center\\n\t\\\\begin{center}\\n\t\t${1}\\n\t\\\\end{center}\\n# Align(ed)\\nsnippet ali\\n\t\\\\begin{align${1:ed}}\\n\t\t${2}\\n\t\\\\end{align$1}\\n# Gather(ed)\\nsnippet gat\\n\t\\\\begin{gather${1:ed}}\\n\t\t${2}\\n\t\\\\end{gather$1}\\n# Equation\\nsnippet eq\\n\t\\\\begin{equation}\\n\t\t${1}\\n\t\\\\end{equation}\\n# Equation\\nsnippet eq*\\n\t\\\\begin{equation*}\\n\t\t${1}\\n\t\\\\end{equation*}\\n# Unnumbered Equation\\nsnippet \\\\\\n\t\\\\[\\n\t\t${1}\\n\t\\\\]\\n# Enumerate\\nsnippet enum\\n\t\\\\begin{enumerate}\\n\t\t\\\\item ${1}\\n\t\\\\end{enumerate}\\n# Itemize\\nsnippet itemize\\n\t\\\\begin{itemize}\\n\t\t\\\\item ${1}\\n\t\\\\end{itemize}\\n# Description\\nsnippet desc\\n\t\\\\begin{description}\\n\t\t\\\\item[${1}] ${2}\\n\t\\\\end{description}\\n# Matrix\\nsnippet mat\\n\t\\\\begin{${1:p/b/v/V/B/small}matrix}\\n\t\t${2}\\n\t\\\\end{$1matrix}\\n# Cases\\nsnippet cas\\n\t\\\\begin{cases}\\n\t\t${1:equation}, &\\\\text{ if }${2:case}\\\\\\\\\\n\t\t${3}\\n\t\\\\end{cases}\\n# Split\\nsnippet spl\\n\t\\\\begin{split}\\n\t\t${1}\\n\t\\\\end{split}\\n# Part\\nsnippet part\\n\t\\\\part{${1:part name}} % (fold)\\n\t\\\\label{prt:${2:$1}}\\n\t${3}\\n\t% part $2 (end)\\n# Chapter\\nsnippet cha\\n\t\\\\chapter{${1:chapter name}}\\n\t\\\\label{cha:${2:$1}}\\n\t${3}\\n# Section\\nsnippet sec\\n\t\\\\section{${1:section name}}\\n\t\\\\label{sec:${2:$1}}\\n\t${3}\\n# Sub Section\\nsnippet sub\\n\t\\\\subsection{${1:subsection name}}\\n\t\\\\label{sub:${2:$1}}\\n\t${3}\\n# Sub Sub Section\\nsnippet subs\\n\t\\\\subsubsection{${1:subsubsection name}}\\n\t\\\\label{ssub:${2:$1}}\\n\t${3}\\n# Paragraph\\nsnippet par\\n\t\\\\paragraph{${1:paragraph name}}\\n\t\\\\label{par:${2:$1}}\\n\t${3}\\n# Sub Paragraph\\nsnippet subp\\n\t\\\\subparagraph{${1:subparagraph name}}\\n\t\\\\label{subp:${2:$1}}\\n\t${3}\\n#References\\nsnippet itd\\n\t\\\\item[${1:description}] ${2:item}\\nsnippet figure\\n\t${1:Figure}~\\\\ref{${2:fig:}}${3}\\nsnippet table\\n\t${1:Table}~\\\\ref{${2:tab:}}${3}\\nsnippet listing\\n\t${1:Listing}~\\\\ref{${2:list}}${3}\\nsnippet section\\n\t${1:Section}~\\\\ref{${2:sec:}}${3}\\nsnippet page\\n\t${1:page}~\\\\pageref{${2}}${3}\\nsnippet index\\n\t\\\\index{${1:index}}${2}\\n#Citations\\nsnippet cite\\n\t\\\\cite[${1}]{${2}}${3}\\nsnippet fcite\\n\t\\\\footcite[${1}]{${2}}${3}\\n#Formating text: italic, bold, underline, small capital, emphase ..\\nsnippet it\\n\t\\\\textit{${1:text}}\\nsnippet bf\\n\t\\\\textbf{${1:text}}\\nsnippet under\\n\t\\\\underline{${1:text}}\\nsnippet emp\\n\t\\\\emph{${1:text}}\\nsnippet sc\\n\t\\\\textsc{${1:text}}\\n#Choosing font\\nsnippet sf\\n\t\\\\textsf{${1:text}}\\nsnippet rm\\n\t\\\\textrm{${1:text}}\\nsnippet tt\\n\t\\\\texttt{${1:text}}\\n#misc\\nsnippet ft\\n\t\\\\footnote{${1:text}}\\nsnippet fig\\n\t\\\\begin{figure}\\n\t\\\\begin{center}\\n\t    \\\\includegraphics[scale=${1}]{Figures/${2}}\\n\t\\\\end{center}\\n\t\\\\caption{${3}}\\n\t\\\\label{fig:${4}}\\n\t\\\\end{figure}\\nsnippet tikz\\n\t\\\\begin{figure}\\n\t\\\\begin{center}\\n\t\\\\begin{tikzpicture}[scale=${1:1}]\\n\t\t${2}\\n\t\\\\end{tikzpicture}\\n\t\\\\end{center}\\n\t\\\\caption{${3}}\\n\t\\\\label{fig:${4}}\\n\t\\\\end{figure}\\n#math\\nsnippet stackrel\\n\t\\\\stackrel{${1:above}}{${2:below}} ${3}\\nsnippet frac\\n\t\\\\frac{${1:num}}{${2:denom}}\\nsnippet sum\\n\t\\\\sum^{${1:n}}_{${2:i=1}}{${3}}\",t.scope=\"tex\"});                (function() {\n                    ace.require([\"ace/snippets/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/text.js",
    "content": "ace.define(\"ace/snippets/text\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"text\"});                (function() {\n                    ace.require([\"ace/snippets/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/textile.js",
    "content": "ace.define(\"ace/snippets/textile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Jekyll post header\\nsnippet header\\n\t---\\n\ttitle: ${1:title}\\n\tlayout: post\\n\tdate: ${2:date} ${3:hour:minute:second} -05:00\\n\t---\\n\\n# Image\\nsnippet img\\n\t!${1:url}(${2:title}):${3:link}!\\n\\n# Table\\nsnippet |\\n\t|${1}|${2}\\n\\n# Link\\nsnippet link\\n\t\"${1:link text}\":${2:url}\\n\\n# Acronym\\nsnippet (\\n\t(${1:Expand acronym})${2}\\n\\n# Footnote\\nsnippet fn\\n\t[${1:ref number}] ${3}\\n\\n\tfn$1. ${2:footnote}\\n\t\\n',t.scope=\"textile\"});                (function() {\n                    ace.require([\"ace/snippets/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/toml.js",
    "content": "ace.define(\"ace/snippets/toml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"toml\"});                (function() {\n                    ace.require([\"ace/snippets/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/tsx.js",
    "content": "ace.define(\"ace/snippets/tsx\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"tsx\"});                (function() {\n                    ace.require([\"ace/snippets/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/turtle.js",
    "content": "ace.define(\"ace/snippets/turtle\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/twig.js",
    "content": "ace.define(\"ace/snippets/twig\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"twig\"});                (function() {\n                    ace.require([\"ace/snippets/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/typescript.js",
    "content": "ace.define(\"ace/snippets/typescript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"typescript\"});                (function() {\n                    ace.require([\"ace/snippets/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/vala.js",
    "content": "ace.define(\"ace/snippets/vala\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippets=[{content:\"case ${1:condition}:\\n\t$0\\n\tbreak;\\n\",name:\"case\",scope:\"vala\",tabTrigger:\"case\"},{content:\"/**\\n * ${6}\\n */\\n${1:public} class ${2:MethodName}${3: : GLib.Object} {\\n\\n\t/**\\n\t * ${7}\\n\t */\\n\tpublic ${2}(${4}) {\\n\t\t${5}\\n\t}\\n\\n\t$0\\n}\",name:\"class\",scope:\"vala\",tabTrigger:\"class\"},{content:\"(${1}) => {\\n\t${0}\\n}\\n\",name:\"closure\",scope:\"vala\",tabTrigger:\"=>\"},{content:\"/*\\n * $0\\n */\",name:\"Comment (multiline)\",scope:\"vala\",tabTrigger:\"/*\"},{content:\"Console.WriteLine($1);\\n$0\",name:\"Console.WriteLine (writeline)\",scope:\"vala\",tabTrigger:\"writeline\"},{content:'[DBus(name = \"$0\")]',name:\"DBus annotation\",scope:\"vala\",tabTrigger:\"[DBus\"},{content:\"delegate ${1:void} ${2:DelegateName}($0);\",name:\"delegate\",scope:\"vala\",tabTrigger:\"delegate\"},{content:\"do {\\n\t$0\\n} while ($1);\\n\",name:\"do while\",scope:\"vala\",tabTrigger:\"dowhile\"},{content:\"/**\\n * $0\\n */\",name:\"DocBlock\",scope:\"vala\",tabTrigger:\"/**\"},{content:\"else if ($1) {\\n\t$0\\n}\\n\",name:\"else if (elseif)\",scope:\"vala\",tabTrigger:\"elseif\"},{content:\"else {\\n\t$0\\n}\",name:\"else\",scope:\"vala\",tabTrigger:\"else\"},{content:\"enum {$1:EnumName} {\\n\t$0\\n}\",name:\"enum\",scope:\"vala\",tabTrigger:\"enum\"},{content:\"public errordomain ${1:Error} {\\n\t$0\\n}\",name:\"error domain\",scope:\"vala\",tabTrigger:\"errordomain\"},{content:\"for ($1;$2;$3) {\\n\t$0\\n}\",name:\"for\",scope:\"vala\",tabTrigger:\"for\"},{content:\"foreach ($1 in $2) {\\n\t$0\\n}\",name:\"foreach\",scope:\"vala\",tabTrigger:\"foreach\"},{content:\"Gee.ArrayList<${1:G}>($0);\",name:\"Gee.ArrayList\",scope:\"vala\",tabTrigger:\"ArrayList\"},{content:\"Gee.HashMap<${1:K},${2:V}>($0);\",name:\"Gee.HashMap\",scope:\"vala\",tabTrigger:\"HashMap\"},{content:\"Gee.HashSet<${1:G}>($0);\",name:\"Gee.HashSet\",scope:\"vala\",tabTrigger:\"HashSet\"},{content:\"if ($1) {\\n\t$0\\n}\",name:\"if\",scope:\"vala\",tabTrigger:\"if\"},{content:\"interface ${1:InterfaceName}{$2: : SuperInterface} {\\n\t$0\\n}\",name:\"interface\",scope:\"vala\",tabTrigger:\"interface\"},{content:\"public static int main(string [] argv) {\\n\t${0}\\n\treturn 0;\\n}\",name:\"Main function\",scope:\"vala\",tabTrigger:\"main\"},{content:\"namespace $1 {\\n\t$0\\n}\\n\",name:\"namespace (ns)\",scope:\"vala\",tabTrigger:\"ns\"},{content:\"stdout.printf($0);\",name:\"printf\",scope:\"vala\",tabTrigger:\"printf\"},{content:\"${1:public} ${2:Type} ${3:Name} {\\n\tset {\\n\t\t$0\\n\t}\\n\tget {\\n\\n\t}\\n}\",name:\"property (prop)\",scope:\"vala\",tabTrigger:\"prop\"},{content:\"${1:public} ${2:Type} ${3:Name} {\\n\tget {\\n\t\t$0\\n\t}\\n}\",name:\"read-only property (roprop)\",scope:\"vala\",tabTrigger:\"roprop\"},{content:'@\"${1:\\\\$var}\"',name:\"String template (@)\",scope:\"vala\",tabTrigger:\"@\"},{content:\"struct ${1:StructName} {\\n\t$0\\n}\",name:\"struct\",scope:\"vala\",tabTrigger:\"struct\"},{content:\"switch ($1) {\\n\t$0\\n}\",name:\"switch\",scope:\"vala\",tabTrigger:\"switch\"},{content:\"try {\\n\t$2\\n} catch (${1:Error} e) {\\n\t$0\\n}\",name:\"try/catch\",scope:\"vala\",tabTrigger:\"try\"},{content:'\"\"\"$0\"\"\";',name:'Verbatim string (\"\"\")',scope:\"vala\",tabTrigger:\"verbatim\"},{content:\"while ($1) {\\n\t$0\\n}\",name:\"while\",scope:\"vala\",tabTrigger:\"while\"}],t.scope=\"\"});                (function() {\n                    ace.require([\"ace/snippets/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/vbscript.js",
    "content": "ace.define(\"ace/snippets/vbscript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"vbscript\"});                (function() {\n                    ace.require([\"ace/snippets/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/velocity.js",
    "content": "ace.define(\"ace/snippets/velocity\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# macro\\nsnippet #macro\\n\t#macro ( ${1:macroName} ${2:\\\\$var1, [\\\\$var2, ...]} )\\n\t\t${3:## macro code}\\n\t#end\\n# foreach\\nsnippet #foreach\\n\t#foreach ( ${1:\\\\$item} in ${2:\\\\$collection} )\\n\t\t${3:## foreach code}\\n\t#end\\n# if\\nsnippet #if\\n\t#if ( ${1:true} )\\n\t\t${0}\\n\t#end\\n# if ... else\\nsnippet #ife\\n\t#if ( ${1:true} )\\n\t\t${2}\\n\t#else\\n\t\t${0}\\n\t#end\\n#import\\nsnippet #import\\n\t#import ( \"${1:path/to/velocity/format}\" )\\n# set\\nsnippet #set\\n\t#set ( $${1:var} = ${0} )\\n',t.scope=\"velocity\",t.includeScopes=[\"html\",\"javascript\",\"css\"]});                (function() {\n                    ace.require([\"ace/snippets/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/verilog.js",
    "content": "ace.define(\"ace/snippets/verilog\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"verilog\"});                (function() {\n                    ace.require([\"ace/snippets/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/vhdl.js",
    "content": "ace.define(\"ace/snippets/vhdl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"vhdl\"});                (function() {\n                    ace.require([\"ace/snippets/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/visualforce.js",
    "content": "ace.define(\"ace/snippets/visualforce\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"visualforce\"});                (function() {\n                    ace.require([\"ace/snippets/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/wollok.js",
    "content": "ace.define(\"ace/snippets/wollok\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='##\\n## Basic Java packages and import\\nsnippet im\\n\timport\\nsnippet w.l\\n\twollok.lang\\nsnippet w.i\\n\twollok.lib\\n\\n## Class and object\\nsnippet cl\\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\\nsnippet obj\\n\tobject ${1:`Filename(\"\", \"untitled\")`} ${2:inherits Parent}${3}\\nsnippet te\\n\ttest ${1:`Filename(\"\", \"untitled\")`}\\n\\n##\\n## Enhancements\\nsnippet inh\\n\tinherits\\n\\n##\\n## Comments\\nsnippet /*\\n\t/*\\n\t * ${1}\\n\t */\\n\\n##\\n## Control Statements\\nsnippet el\\n\telse\\nsnippet if\\n\tif (${1}) ${2}\\n\\n##\\n## Create a Method\\nsnippet m\\n\tmethod ${1:method}(${2}) ${5}\\n\\n##  \\n## Tests\\nsnippet as\\n\tassert.equals(${1:expected}, ${2:actual})\\n\\n##\\n## Exceptions\\nsnippet ca\\n\tcatch ${1:e} : (${2:Exception} ) ${3}\\nsnippet thr\\n\tthrow\\nsnippet try\\n\ttry {\\n\t\t${3}\\n\t} catch ${1:e} : ${2:Exception} {\\n\t}\\n\\n##\\n## Javadocs\\nsnippet /**\\n\t/**\\n\t * ${1}\\n\t */\\n\\n##\\n## Print Methods\\nsnippet print\\n\tconsole.println(\"${1:Message}\")\\n\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\tmethod set${1:}(${2:}) {\\n\t\t$1 = $2\\n\t}\\nsnippet get\\n\tmethod get${1:}() {\\n\t\treturn ${1:};\\n\t}\\n\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\treturn',t.scope=\"wollok\"});                (function() {\n                    ace.require([\"ace/snippets/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/xml.js",
    "content": "ace.define(\"ace/snippets/xml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"xml\"});                (function() {\n                    ace.require([\"ace/snippets/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/xquery.js",
    "content": "ace.define(\"ace/snippets/xquery\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet for\\n\tfor $${1:item} in ${2:expr}\\nsnippet return\\n\treturn ${1:expr}\\nsnippet import\\n\timport module namespace ${1:ns} = \"${2:http://www.example.com/}\";\\nsnippet some\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet every\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet if\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\nsnippet switch\\n\tswitch(${1:\"foo\"})\\n\tcase ${2:\"foo\"}\\n\treturn ${3:true}\\n\tdefault return ${4:false}\\nsnippet try\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\nsnippet tumbling\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet sliding\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet let\\n\tlet $${1:varname} := ${2:expr}\\nsnippet group\\n\tgroup by $${1:varname} := ${2:expr}\\nsnippet order\\n\torder by ${1:expr} ${2:descending}\\nsnippet stable\\n\tstable order by ${1:expr}\\nsnippet count\\n\tcount $${1:varname}\\nsnippet ordered\\n\tordered { ${1:expr} }\\nsnippet unordered\\n\tunordered { ${1:expr} }\\nsnippet treat \\n\ttreat as ${1:expr}\\nsnippet castable\\n\tcastable as ${1:atomicType}\\nsnippet cast\\n\tcast as ${1:atomicType}\\nsnippet typeswitch\\n\ttypeswitch(${1:expr})\\n\tcase ${2:type}  return ${3:expr}\\n\tdefault return ${4:expr}\\nsnippet var\\n\tdeclare variable $${1:varname} := ${2:expr};\\nsnippet fn\\n\tdeclare function ${1:ns}:${2:name}(){\\n\t${3:expr}\\n\t};\\nsnippet module\\n\tmodule namespace ${1:ns} = \"${2:http://www.example.com}\";\\n',t.scope=\"xquery\"});                (function() {\n                    ace.require([\"ace/snippets/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/snippets/yaml.js",
    "content": "ace.define(\"ace/snippets/yaml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"yaml\"});                (function() {\n                    ace.require([\"ace/snippets/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-ambiance.js",
    "content": "ace.define(\"ace/theme/ambiance\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-ambiance\",t.cssText=\".ace-ambiance .ace_gutter {background-color: #3d3d3d;background-image: linear-gradient(left, #3D3D3D, #333);background-repeat: repeat-x;border-right: 1px solid #4d4d4d;text-shadow: 0px 1px 1px #4d4d4d;color: #222;}.ace-ambiance .ace_gutter-layer {background: repeat left top;}.ace-ambiance .ace_gutter-active-line {background-color: #3F3F3F;}.ace-ambiance .ace_fold-widget {text-align: center;}.ace-ambiance .ace_fold-widget:hover {color: #777;}.ace-ambiance .ace_fold-widget.ace_start,.ace-ambiance .ace_fold-widget.ace_end,.ace-ambiance .ace_fold-widget.ace_closed{background: none;border: none;box-shadow: none;}.ace-ambiance .ace_fold-widget.ace_start:after {content: '\\u25be'}.ace-ambiance .ace_fold-widget.ace_end:after {content: '\\u25b4'}.ace-ambiance .ace_fold-widget.ace_closed:after {content: '\\u2023'}.ace-ambiance .ace_print-margin {border-left: 1px dotted #2D2D2D;right: 0;background: #262626;}.ace-ambiance .ace_scroller {-webkit-box-shadow: inset 0 0 10px black;-moz-box-shadow: inset 0 0 10px black;-o-box-shadow: inset 0 0 10px black;box-shadow: inset 0 0 10px black;}.ace-ambiance {color: #E6E1DC;background-color: #202020;}.ace-ambiance .ace_cursor {border-left: 1px solid #7991E8;}.ace-ambiance .ace_overwrite-cursors .ace_cursor {border: 1px solid #FFE300;background: #766B13;}.ace-ambiance.normal-mode .ace_cursor-layer {z-index: 0;}.ace-ambiance .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20);}.ace-ambiance .ace_marker-layer .ace_selected-word {border-radius: 4px;border: 8px solid #3f475d;box-shadow: 0 0 4px black;}.ace-ambiance .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-ambiance .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25);}.ace-ambiance .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031);}.ace-ambiance .ace_invisible {color: #333;}.ace-ambiance .ace_paren {color: #24C2C7;}.ace-ambiance .ace_keyword {color: #cda869;}.ace-ambiance .ace_keyword.ace_operator {color: #fa8d6a;}.ace-ambiance .ace_punctuation.ace_operator {color: #fa8d6a;}.ace-ambiance .ace_identifier {}.ace-ambiance .ace-statement {color: #cda869;}.ace-ambiance .ace_constant {color: #CF7EA9;}.ace-ambiance .ace_constant.ace_language {color: #CF7EA9;}.ace-ambiance .ace_constant.ace_library {}.ace-ambiance .ace_constant.ace_numeric {color: #78CF8A;}.ace-ambiance .ace_invalid {text-decoration: underline;}.ace-ambiance .ace_invalid.ace_illegal {color:#F8F8F8;background-color: rgba(86, 45, 86, 0.75);}.ace-ambiance .ace_invalid,.ace-ambiance .ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1;}.ace-ambiance .ace_support {color: #9B859D;}.ace-ambiance .ace_support.ace_function {color: #DAD085;}.ace-ambiance .ace_function.ace_buildin {color: #9b859d;}.ace-ambiance .ace_string {color: #8f9d6a;}.ace-ambiance .ace_string.ace_regexp {color: #DAD085;}.ace-ambiance .ace_comment {font-style: italic;color: #555;}.ace-ambiance .ace_comment.ace_doc {}.ace-ambiance .ace_comment.ace_doc.ace_tag {color: #666;font-style: normal;}.ace-ambiance .ace_definition,.ace-ambiance .ace_type {color: #aac6e3;}.ace-ambiance .ace_variable {color: #9999cc;}.ace-ambiance .ace_variable.ace_language {color: #9b859d;}.ace-ambiance .ace_xml-pe {color: #494949;}.ace-ambiance .ace_gutter-layer,.ace-ambiance .ace_text-layer {background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\\\");}.ace-ambiance .ace_indent-guide {background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/ambiance\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-chaos.js",
    "content": "ace.define(\"ace/theme/chaos\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-chaos\",t.cssText=\".ace-chaos .ace_gutter {background: #141414;color: #595959;border-right: 1px solid #282828;}.ace-chaos .ace_gutter-cell.ace_warning {background-image: none;background: #FC0;border-left: none;padding-left: 0;color: #000;}.ace-chaos .ace_gutter-cell.ace_error {background-position: -6px center;background-image: none;background: #F10;border-left: none;padding-left: 0;color: #000;}.ace-chaos .ace_print-margin {border-left: 1px solid #555;right: 0;background: #1D1D1D;}.ace-chaos {background-color: #161616;color: #E6E1DC;}.ace-chaos .ace_cursor {border-left: 2px solid #FFFFFF;}.ace-chaos .ace_cursor.ace_overwrite {border-left: 0px;border-bottom: 1px solid #FFFFFF;}.ace-chaos .ace_marker-layer .ace_selection {background: #494836;}.ace-chaos .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-chaos .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #FCE94F;}.ace-chaos .ace_marker-layer .ace_active-line {background: #333;}.ace-chaos .ace_gutter-active-line {background-color: #222;}.ace-chaos .ace_invisible {color: #404040;}.ace-chaos .ace_keyword {color:#00698F;}.ace-chaos .ace_keyword.ace_operator {color:#FF308F;}.ace-chaos .ace_constant {color:#1EDAFB;}.ace-chaos .ace_constant.ace_language {color:#FDC251;}.ace-chaos .ace_constant.ace_library {color:#8DFF0A;}.ace-chaos .ace_constant.ace_numeric {color:#58C554;}.ace-chaos .ace_invalid {color:#FFFFFF;background-color:#990000;}.ace-chaos .ace_invalid.ace_deprecated {color:#FFFFFF;background-color:#990000;}.ace-chaos .ace_support {color: #999;}.ace-chaos .ace_support.ace_function {color:#00AEEF;}.ace-chaos .ace_function {color:#00AEEF;}.ace-chaos .ace_string {color:#58C554;}.ace-chaos .ace_comment {color:#555;font-style:italic;padding-bottom: 0px;}.ace-chaos .ace_variable {color:#997744;}.ace-chaos .ace_meta.ace_tag {color:#BE53E6;}.ace-chaos .ace_entity.ace_other.ace_attribute-name {color:#FFFF89;}.ace-chaos .ace_markup.ace_underline {text-decoration: underline;}.ace-chaos .ace_fold-widget {text-align: center;}.ace-chaos .ace_fold-widget:hover {color: #777;}.ace-chaos .ace_fold-widget.ace_start,.ace-chaos .ace_fold-widget.ace_end,.ace-chaos .ace_fold-widget.ace_closed{background: none;border: none;box-shadow: none;}.ace-chaos .ace_fold-widget.ace_start:after {content: '\\u25be'}.ace-chaos .ace_fold-widget.ace_end:after {content: '\\u25b4'}.ace-chaos .ace_fold-widget.ace_closed:after {content: '\\u2023'}.ace-chaos .ace_indent-guide {border-right:1px dotted #333;margin-right:-1px;}.ace-chaos .ace_fold { background: #222; border-radius: 3px; color: #7AF; border: none; }.ace-chaos .ace_fold:hover {background: #CCC; color: #000;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/chaos\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-chrome.js",
    "content": "ace.define(\"ace/theme/chrome\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-chrome\",t.cssText='.ace-chrome .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-chrome .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-chrome {background-color: #FFFFFF;color: black;}.ace-chrome .ace_cursor {color: black;}.ace-chrome .ace_invisible {color: rgb(191, 191, 191);}.ace-chrome .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-chrome .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-chrome .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-chrome .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-chrome .ace_fold {}.ace-chrome .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-chrome .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-chrome .ace_support.ace_type,.ace-chrome .ace_support.ace_class.ace-chrome .ace_support.ace_other {color: rgb(109, 121, 222);}.ace-chrome .ace_variable.ace_parameter {font-style:italic;color:#FD971F;}.ace-chrome .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-chrome .ace_comment {color: #236e24;}.ace-chrome .ace_comment.ace_doc {color: #236e24;}.ace-chrome .ace_comment.ace_doc.ace_tag {color: #236e24;}.ace-chrome .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-chrome .ace_variable {color: rgb(49, 132, 149);}.ace-chrome .ace_xml-pe {color: rgb(104, 104, 91);}.ace-chrome .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-chrome .ace_heading {color: rgb(12, 7, 255);}.ace-chrome .ace_list {color:rgb(185, 6, 144);}.ace-chrome .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-chrome .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-chrome .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-chrome .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-chrome .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-chrome .ace_gutter-active-line {background-color : #dcdcdc;}.ace-chrome .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-chrome .ace_storage,.ace-chrome .ace_keyword,.ace-chrome .ace_meta.ace_tag {color: rgb(147, 15, 128);}.ace-chrome .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-chrome .ace_string {color: #1A1AA6;}.ace-chrome .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-chrome .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/chrome\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-clouds.js",
    "content": "ace.define(\"ace/theme/clouds\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-clouds\",t.cssText='.ace-clouds .ace_gutter {background: #ebebeb;color: #333}.ace-clouds .ace_print-margin {width: 1px;background: #e8e8e8}.ace-clouds {background-color: #FFFFFF;color: #000000}.ace-clouds .ace_cursor {color: #000000}.ace-clouds .ace_marker-layer .ace_selection {background: #BDD5FC}.ace-clouds.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;}.ace-clouds .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-clouds .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-clouds .ace_marker-layer .ace_active-line {background: #FFFBD1}.ace-clouds .ace_gutter-active-line {background-color : #dcdcdc}.ace-clouds .ace_marker-layer .ace_selected-word {border: 1px solid #BDD5FC}.ace-clouds .ace_invisible {color: #BFBFBF}.ace-clouds .ace_keyword,.ace-clouds .ace_meta,.ace-clouds .ace_support.ace_constant.ace_property-value {color: #AF956F}.ace-clouds .ace_keyword.ace_operator {color: #484848}.ace-clouds .ace_keyword.ace_other.ace_unit {color: #96DC5F}.ace-clouds .ace_constant.ace_language {color: #39946A}.ace-clouds .ace_constant.ace_numeric {color: #46A609}.ace-clouds .ace_constant.ace_character.ace_entity {color: #BF78CC}.ace-clouds .ace_invalid {background-color: #FF002A}.ace-clouds .ace_fold {background-color: #AF956F;border-color: #000000}.ace-clouds .ace_storage,.ace-clouds .ace_support.ace_class,.ace-clouds .ace_support.ace_function,.ace-clouds .ace_support.ace_other,.ace-clouds .ace_support.ace_type {color: #C52727}.ace-clouds .ace_string {color: #5D90CD}.ace-clouds .ace_comment {color: #BCC8BA}.ace-clouds .ace_entity.ace_name.ace_tag,.ace-clouds .ace_entity.ace_other.ace_attribute-name {color: #606060}.ace-clouds .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/clouds\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-clouds_midnight.js",
    "content": "ace.define(\"ace/theme/clouds_midnight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-clouds-midnight\",t.cssText=\".ace-clouds-midnight .ace_gutter {background: #232323;color: #929292}.ace-clouds-midnight .ace_print-margin {width: 1px;background: #232323}.ace-clouds-midnight {background-color: #191919;color: #929292}.ace-clouds-midnight .ace_cursor {color: #7DA5DC}.ace-clouds-midnight .ace_marker-layer .ace_selection {background: #000000}.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #191919;}.ace-clouds-midnight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-clouds-midnight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-clouds-midnight .ace_marker-layer .ace_active-line {background: rgba(215, 215, 215, 0.031)}.ace-clouds-midnight .ace_gutter-active-line {background-color: rgba(215, 215, 215, 0.031)}.ace-clouds-midnight .ace_marker-layer .ace_selected-word {border: 1px solid #000000}.ace-clouds-midnight .ace_invisible {color: #666}.ace-clouds-midnight .ace_keyword,.ace-clouds-midnight .ace_meta,.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {color: #927C5D}.ace-clouds-midnight .ace_keyword.ace_operator {color: #4B4B4B}.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {color: #366F1A}.ace-clouds-midnight .ace_constant.ace_language {color: #39946A}.ace-clouds-midnight .ace_constant.ace_numeric {color: #46A609}.ace-clouds-midnight .ace_constant.ace_character.ace_entity {color: #A165AC}.ace-clouds-midnight .ace_invalid {color: #FFFFFF;background-color: #E92E2E}.ace-clouds-midnight .ace_fold {background-color: #927C5D;border-color: #929292}.ace-clouds-midnight .ace_storage,.ace-clouds-midnight .ace_support.ace_class,.ace-clouds-midnight .ace_support.ace_function,.ace-clouds-midnight .ace_support.ace_other,.ace-clouds-midnight .ace_support.ace_type {color: #E92E2E}.ace-clouds-midnight .ace_string {color: #5D90CD}.ace-clouds-midnight .ace_comment {color: #3C403B}.ace-clouds-midnight .ace_entity.ace_name.ace_tag,.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {color: #606060}.ace-clouds-midnight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/clouds_midnight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-cobalt.js",
    "content": "ace.define(\"ace/theme/cobalt\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-cobalt\",t.cssText=\".ace-cobalt .ace_gutter {background: #011e3a;color: rgb(128,145,160)}.ace-cobalt .ace_print-margin {width: 1px;background: #555555}.ace-cobalt {background-color: #002240;color: #FFFFFF}.ace-cobalt .ace_cursor {color: #FFFFFF}.ace-cobalt .ace_marker-layer .ace_selection {background: rgba(179, 101, 57, 0.75)}.ace-cobalt.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002240;}.ace-cobalt .ace_marker-layer .ace_step {background: rgb(127, 111, 19)}.ace-cobalt .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.15)}.ace-cobalt .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.35)}.ace-cobalt .ace_gutter-active-line {background-color: rgba(0, 0, 0, 0.35)}.ace-cobalt .ace_marker-layer .ace_selected-word {border: 1px solid rgba(179, 101, 57, 0.75)}.ace-cobalt .ace_invisible {color: rgba(255, 255, 255, 0.15)}.ace-cobalt .ace_keyword,.ace-cobalt .ace_meta {color: #FF9D00}.ace-cobalt .ace_constant,.ace-cobalt .ace_constant.ace_character,.ace-cobalt .ace_constant.ace_character.ace_escape,.ace-cobalt .ace_constant.ace_other {color: #FF628C}.ace-cobalt .ace_invalid {color: #F8F8F8;background-color: #800F00}.ace-cobalt .ace_support {color: #80FFBB}.ace-cobalt .ace_support.ace_constant {color: #EB939A}.ace-cobalt .ace_fold {background-color: #FF9D00;border-color: #FFFFFF}.ace-cobalt .ace_support.ace_function {color: #FFB054}.ace-cobalt .ace_storage {color: #FFEE80}.ace-cobalt .ace_entity {color: #FFDD00}.ace-cobalt .ace_string {color: #3AD900}.ace-cobalt .ace_string.ace_regexp {color: #80FFC2}.ace-cobalt .ace_comment {font-style: italic;color: #0088FF}.ace-cobalt .ace_heading,.ace-cobalt .ace_markup.ace_heading {color: #C8E4FD;background-color: #001221}.ace-cobalt .ace_list,.ace-cobalt .ace_markup.ace_list {background-color: #130D26}.ace-cobalt .ace_variable {color: #CCCCCC}.ace-cobalt .ace_variable.ace_language {color: #FF80E1}.ace-cobalt .ace_meta.ace_tag {color: #9EFFFF}.ace-cobalt .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/cobalt\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-crimson_editor.js",
    "content": "ace.define(\"ace/theme/crimson_editor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssText='.ace-crimson-editor .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-crimson-editor .ace_gutter-layer {width: 100%;text-align: right;}.ace-crimson-editor .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-crimson-editor {background-color: #FFFFFF;color: rgb(64, 64, 64);}.ace-crimson-editor .ace_cursor {color: black;}.ace-crimson-editor .ace_invisible {color: rgb(191, 191, 191);}.ace-crimson-editor .ace_identifier {color: black;}.ace-crimson-editor .ace_keyword {color: blue;}.ace-crimson-editor .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-crimson-editor .ace_constant.ace_language {color: rgb(255, 156, 0);}.ace-crimson-editor .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-crimson-editor .ace_invalid {text-decoration: line-through;color: rgb(224, 0, 0);}.ace-crimson-editor .ace_fold {}.ace-crimson-editor .ace_support.ace_function {color: rgb(192, 0, 0);}.ace-crimson-editor .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-crimson-editor .ace_support.ace_type,.ace-crimson-editor .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-crimson-editor .ace_keyword.ace_operator {color: rgb(49, 132, 149);}.ace-crimson-editor .ace_string {color: rgb(128, 0, 128);}.ace-crimson-editor .ace_comment {color: rgb(76, 136, 107);}.ace-crimson-editor .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-crimson-editor .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-crimson-editor .ace_constant.ace_numeric {color: rgb(0, 0, 64);}.ace-crimson-editor .ace_variable {color: rgb(0, 64, 128);}.ace-crimson-editor .ace_xml-pe {color: rgb(104, 104, 91);}.ace-crimson-editor .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-crimson-editor .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-crimson-editor .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-crimson-editor .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-crimson-editor .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254);}.ace-crimson-editor .ace_gutter-active-line {background-color : #dcdcdc;}.ace-crimson-editor .ace_meta.ace_tag {color:rgb(28, 2, 255);}.ace-crimson-editor .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-crimson-editor .ace_string.ace_regex {color: rgb(192, 0, 192);}.ace-crimson-editor .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.cssClass=\"ace-crimson-editor\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/crimson_editor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-dawn.js",
    "content": "ace.define(\"ace/theme/dawn\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-dawn\",t.cssText=\".ace-dawn .ace_gutter {background: #ebebeb;color: #333}.ace-dawn .ace_print-margin {width: 1px;background: #e8e8e8}.ace-dawn {background-color: #F9F9F9;color: #080808}.ace-dawn .ace_cursor {color: #000000}.ace-dawn .ace_marker-layer .ace_selection {background: rgba(39, 95, 255, 0.30)}.ace-dawn.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #F9F9F9;}.ace-dawn .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-dawn .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(75, 75, 126, 0.50)}.ace-dawn .ace_marker-layer .ace_active-line {background: rgba(36, 99, 180, 0.12)}.ace-dawn .ace_gutter-active-line {background-color : #dcdcdc}.ace-dawn .ace_marker-layer .ace_selected-word {border: 1px solid rgba(39, 95, 255, 0.30)}.ace-dawn .ace_invisible {color: rgba(75, 75, 126, 0.50)}.ace-dawn .ace_keyword,.ace-dawn .ace_meta {color: #794938}.ace-dawn .ace_constant,.ace-dawn .ace_constant.ace_character,.ace-dawn .ace_constant.ace_character.ace_escape,.ace-dawn .ace_constant.ace_other {color: #811F24}.ace-dawn .ace_invalid.ace_illegal {text-decoration: underline;font-style: italic;color: #F8F8F8;background-color: #B52A1D}.ace-dawn .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #B52A1D}.ace-dawn .ace_support {color: #691C97}.ace-dawn .ace_support.ace_constant {color: #B4371F}.ace-dawn .ace_fold {background-color: #794938;border-color: #080808}.ace-dawn .ace_list,.ace-dawn .ace_markup.ace_list,.ace-dawn .ace_support.ace_function {color: #693A17}.ace-dawn .ace_storage {font-style: italic;color: #A71D5D}.ace-dawn .ace_string {color: #0B6125}.ace-dawn .ace_string.ace_regexp {color: #CF5628}.ace-dawn .ace_comment {font-style: italic;color: #5A525F}.ace-dawn .ace_heading,.ace-dawn .ace_markup.ace_heading {color: #19356D}.ace-dawn .ace_variable {color: #234A97}.ace-dawn .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/dawn\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-dracula.js",
    "content": "ace.define(\"ace/theme/dracula\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-dracula\",t.cssText=\".ace-dracula .ace_gutter {background: #282a36;color: rgb(144,145,148)}.ace-dracula .ace_print-margin {width: 1px;background: #44475a}.ace-dracula {background-color: #282a36;color: #f8f8f2}.ace-dracula .ace_cursor {color: #f8f8f0}.ace-dracula .ace_marker-layer .ace_selection {background: #44475a}.ace-dracula.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #282a36;border-radius: 2px}.ace-dracula .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-dracula .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #a29709}.ace-dracula .ace_marker-layer .ace_active-line {background: #44475a}.ace-dracula .ace_gutter-active-line {background-color: #44475a}.ace-dracula .ace_marker-layer .ace_selected-word {box-shadow: 0px 0px 0px 1px #a29709;border-radius: 3px;}.ace-dracula .ace_fold {background-color: #50fa7b;border-color: #f8f8f2}.ace-dracula .ace_keyword {color: #ff79c6}.ace-dracula .ace_constant.ace_language {color: #bd93f9}.ace-dracula .ace_constant.ace_numeric {color: #bd93f9}.ace-dracula .ace_constant.ace_character {color: #bd93f9}.ace-dracula .ace_constant.ace_character.ace_escape {color: #ff79c6}.ace-dracula .ace_constant.ace_other {color: #bd93f9}.ace-dracula .ace_support.ace_function {color: #8be9fd}.ace-dracula .ace_support.ace_constant {color: #6be5fd}.ace-dracula .ace_support.ace_class {font-style: italic;color: #66d9ef}.ace-dracula .ace_support.ace_type {font-style: italic;color: #66d9ef}.ace-dracula .ace_storage {color: #ff79c6}.ace-dracula .ace_storage.ace_type {font-style: italic;color: #8be9fd}.ace-dracula .ace_invalid {color: #F8F8F0;background-color: #ff79c6}.ace-dracula .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #bd93f9}.ace-dracula .ace_string {color: #f1fa8c}.ace-dracula .ace_comment {color: #6272a4}.ace-dracula .ace_variable {color: #50fa7b}.ace-dracula .ace_variable.ace_parameter {font-style: italic;color: #ffb86c}.ace-dracula .ace_entity.ace_other.ace_attribute-name {color: #50fa7b}.ace-dracula .ace_entity.ace_name.ace_function {color: #50fa7b}.ace-dracula .ace_entity.ace_name.ace_tag {color: #ff79c6}.ace-dracula .ace_invisible {color: #626680;}.ace-dracula .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}\",t.$selectionColorConflict=!0;var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/dracula\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-dreamweaver.js",
    "content": "ace.define(\"ace/theme/dreamweaver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-dreamweaver\",t.cssText='.ace-dreamweaver .ace_gutter {background: #e8e8e8;color: #333;}.ace-dreamweaver .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-dreamweaver {background-color: #FFFFFF;color: black;}.ace-dreamweaver .ace_fold {background-color: #757AD8;}.ace-dreamweaver .ace_cursor {color: black;}.ace-dreamweaver .ace_invisible {color: rgb(191, 191, 191);}.ace-dreamweaver .ace_storage,.ace-dreamweaver .ace_keyword {color: blue;}.ace-dreamweaver .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-dreamweaver .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-dreamweaver .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-dreamweaver .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-dreamweaver .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-dreamweaver .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-dreamweaver .ace_support.ace_type,.ace-dreamweaver .ace_support.ace_class {color: #009;}.ace-dreamweaver .ace_support.ace_php_tag {color: #f00;}.ace-dreamweaver .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-dreamweaver .ace_string {color: #00F;}.ace-dreamweaver .ace_comment {color: rgb(76, 136, 107);}.ace-dreamweaver .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-dreamweaver .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-dreamweaver .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-dreamweaver .ace_variable {color: #06F}.ace-dreamweaver .ace_xml-pe {color: rgb(104, 104, 91);}.ace-dreamweaver .ace_entity.ace_name.ace_function {color: #00F;}.ace-dreamweaver .ace_heading {color: rgb(12, 7, 255);}.ace-dreamweaver .ace_list {color:rgb(185, 6, 144);}.ace-dreamweaver .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-dreamweaver .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-dreamweaver .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-dreamweaver .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-dreamweaver .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-dreamweaver .ace_gutter-active-line {background-color : #DCDCDC;}.ace-dreamweaver .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-dreamweaver .ace_meta.ace_tag {color:#009;}.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {color:#060;}.ace-dreamweaver .ace_meta.ace_tag.ace_form {color:#F90;}.ace-dreamweaver .ace_meta.ace_tag.ace_image {color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_script {color:#900;}.ace-dreamweaver .ace_meta.ace_tag.ace_style {color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_table {color:#099;}.ace-dreamweaver .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-dreamweaver .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/dreamweaver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-eclipse.js",
    "content": "ace.define(\"ace/theme/eclipse\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssText='.ace-eclipse .ace_gutter {background: #ebebeb;border-right: 1px solid rgb(159, 159, 159);color: rgb(136, 136, 136);}.ace-eclipse .ace_print-margin {width: 1px;background: #ebebeb;}.ace-eclipse {background-color: #FFFFFF;color: black;}.ace-eclipse .ace_fold {background-color: rgb(60, 76, 114);}.ace-eclipse .ace_cursor {color: black;}.ace-eclipse .ace_storage,.ace-eclipse .ace_keyword,.ace-eclipse .ace_variable {color: rgb(127, 0, 85);}.ace-eclipse .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-eclipse .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-eclipse .ace_function {color: rgb(60, 76, 114);}.ace-eclipse .ace_string {color: rgb(42, 0, 255);}.ace-eclipse .ace_comment {color: rgb(113, 150, 130);}.ace-eclipse .ace_comment.ace_doc {color: rgb(63, 95, 191);}.ace-eclipse .ace_comment.ace_doc.ace_tag {color: rgb(127, 159, 191);}.ace-eclipse .ace_constant.ace_numeric {color: darkblue;}.ace-eclipse .ace_tag {color: rgb(25, 118, 116);}.ace-eclipse .ace_type {color: rgb(127, 0, 127);}.ace-eclipse .ace_xml-pe {color: rgb(104, 104, 91);}.ace-eclipse .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-eclipse .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-eclipse .ace_meta.ace_tag {color:rgb(25, 118, 116);}.ace-eclipse .ace_invisible {color: #ddd;}.ace-eclipse .ace_entity.ace_other.ace_attribute-name {color:rgb(127, 0, 127);}.ace-eclipse .ace_marker-layer .ace_step {background: rgb(255, 255, 0);}.ace-eclipse .ace_active-line {background: rgb(232, 242, 254);}.ace-eclipse .ace_gutter-active-line {background-color : #DADADA;}.ace-eclipse .ace_marker-layer .ace_selected-word {border: 1px solid rgb(181, 213, 255);}.ace-eclipse .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.cssClass=\"ace-eclipse\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/eclipse\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-github.js",
    "content": "ace.define(\"ace/theme/github\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-github\",t.cssText='.ace-github .ace_gutter {background: #e8e8e8;color: #AAA;}.ace-github  {background: #fff;color: #000;}.ace-github .ace_keyword {font-weight: bold;}.ace-github .ace_string {color: #D14;}.ace-github .ace_variable.ace_class {color: teal;}.ace-github .ace_constant.ace_numeric {color: #099;}.ace-github .ace_constant.ace_buildin {color: #0086B3;}.ace-github .ace_support.ace_function {color: #0086B3;}.ace-github .ace_comment {color: #998;font-style: italic;}.ace-github .ace_variable.ace_language  {color: #0086B3;}.ace-github .ace_paren {font-weight: bold;}.ace-github .ace_boolean {font-weight: bold;}.ace-github .ace_string.ace_regexp {color: #009926;font-weight: normal;}.ace-github .ace_variable.ace_instance {color: teal;}.ace-github .ace_constant.ace_language {font-weight: bold;}.ace-github .ace_cursor {color: black;}.ace-github.ace_focus .ace_marker-layer .ace_active-line {background: rgb(255, 255, 204);}.ace-github .ace_marker-layer .ace_active-line {background: rgb(245, 245, 245);}.ace-github .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-github.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-github.ace_nobold .ace_line > span {font-weight: normal !important;}.ace-github .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-github .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-github .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-github .ace_gutter-active-line {background-color : rgba(0, 0, 0, 0.07);}.ace-github .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-github .ace_invisible {color: #BFBFBF}.ace-github .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-github .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/github\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-gob.js",
    "content": "ace.define(\"ace/theme/gob\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-gob\",t.cssText=\".ace-gob .ace_gutter {background: #0B1818;color: #03EE03}.ace-gob .ace_print-margin {width: 1px;background: #131313}.ace-gob {background-color: #0B0B0B;color: #00FF00}.ace-gob .ace_cursor {border-color: rgba(16, 248, 255, 0.90);background-color: rgba(16, 240, 248, 0.70);opacity: 0.4;}.ace-gob .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-gob.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #141414;}.ace-gob .ace_marker-layer .ace_step {background: rgb(16, 128, 0)}.ace-gob .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(64, 255, 255, 0.25)}.ace-gob .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.04)}.ace-gob .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.04)}.ace-gob .ace_marker-layer .ace_selected-word {border: 1px solid rgba(192, 240, 255, 0.20)}.ace-gob .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-gob .ace_keyword,.ace-gob .ace_meta {color: #10D8E8}.ace-gob .ace_constant,.ace-gob .ace_constant.ace_character,.ace-gob .ace_constant.ace_character.ace_escape,.ace-gob .ace_constant.ace_other,.ace-gob .ace_heading,.ace-gob .ace_markup.ace_heading,.ace-gob .ace_support.ace_constant {color: #10F0A0}.ace-gob .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-gob .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #20F8C0}.ace-gob .ace_support {color: #20E8B0}.ace-gob .ace_fold {background-color: #50B8B8;border-color: #70F8F8}.ace-gob .ace_support.ace_function {color: #00F800}.ace-gob .ace_list,.ace-gob .ace_markup.ace_list,.ace-gob .ace_storage {color: #10FF98}.ace-gob .ace_entity.ace_name.ace_function,.ace-gob .ace_meta.ace_tag,.ace-gob .ace_variable {color: #00F868}.ace-gob .ace_string {color: #10F060}.ace-gob .ace_string.ace_regexp {color: #20F090;}.ace-gob .ace_comment {font-style: italic;color: #00E060;}.ace-gob .ace_variable {color: #00F888;}.ace-gob .ace_xml-pe {color: #488858;}.ace-gob .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/gob\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-gruvbox.js",
    "content": "ace.define(\"ace/theme/gruvbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-gruvbox\",t.cssText='.ace-gruvbox .ace_gutter-active-line {background-color: #3C3836;}.ace-gruvbox {color: #EBDAB4;background-color: #1D2021;}.ace-gruvbox .ace_invisible {color: #504945;}.ace-gruvbox .ace_marker-layer .ace_selection {background: rgba(179, 101, 57, 0.75)}.ace-gruvbox.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002240;}.ace-gruvbox .ace_keyword {color: #8ec07c;}.ace-gruvbox .ace_comment {font-style: italic;color: #928375;}.ace-gruvbox .ace-statement {color: red;}.ace-gruvbox .ace_variable {color: #84A598;}.ace-gruvbox .ace_variable.ace_language {color: #D2879B;}.ace-gruvbox .ace_constant {color: #C2859A;}.ace-gruvbox .ace_constant.ace_language {color: #C2859A;}.ace-gruvbox .ace_constant.ace_numeric {color: #C2859A;}.ace-gruvbox .ace_string {color: #B8BA37;}.ace-gruvbox .ace_support {color: #F9BC41;}.ace-gruvbox .ace_support.ace_function {color: #F84B3C;}.ace-gruvbox .ace_storage {color: #8FBF7F;}.ace-gruvbox .ace_keyword.ace_operator {color: #EBDAB4;}.ace-gruvbox .ace_punctuation.ace_operator {color: yellow;}.ace-gruvbox .ace_marker-layer .ace_active-line {background: #3C3836;}.ace-gruvbox .ace_marker-layer .ace_selected-word {border-radius: 4px;border: 8px solid #3f475d;}.ace-gruvbox .ace_print-margin {width: 5px;background: #3C3836;}.ace-gruvbox .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/gruvbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-idle_fingers.js",
    "content": "ace.define(\"ace/theme/idle_fingers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-idle-fingers\",t.cssText=\".ace-idle-fingers .ace_gutter {background: #3b3b3b;color: rgb(153,153,153)}.ace-idle-fingers .ace_print-margin {width: 1px;background: #3b3b3b}.ace-idle-fingers {background-color: #323232;color: #FFFFFF}.ace-idle-fingers .ace_cursor {color: #91FF00}.ace-idle-fingers .ace_marker-layer .ace_selection {background: rgba(90, 100, 126, 0.88)}.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #323232;}.ace-idle-fingers .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-idle-fingers .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-idle-fingers .ace_marker-layer .ace_active-line {background: #353637}.ace-idle-fingers .ace_gutter-active-line {background-color: #353637}.ace-idle-fingers .ace_marker-layer .ace_selected-word {border: 1px solid rgba(90, 100, 126, 0.88)}.ace-idle-fingers .ace_invisible {color: #404040}.ace-idle-fingers .ace_keyword,.ace-idle-fingers .ace_meta {color: #CC7833}.ace-idle-fingers .ace_constant,.ace-idle-fingers .ace_constant.ace_character,.ace-idle-fingers .ace_constant.ace_character.ace_escape,.ace-idle-fingers .ace_constant.ace_other,.ace-idle-fingers .ace_support.ace_constant {color: #6C99BB}.ace-idle-fingers .ace_invalid {color: #FFFFFF;background-color: #FF0000}.ace-idle-fingers .ace_fold {background-color: #CC7833;border-color: #FFFFFF}.ace-idle-fingers .ace_support.ace_function {color: #B83426}.ace-idle-fingers .ace_variable.ace_parameter {font-style: italic}.ace-idle-fingers .ace_string {color: #A5C261}.ace-idle-fingers .ace_string.ace_regexp {color: #CCCC33}.ace-idle-fingers .ace_comment {font-style: italic;color: #BC9458}.ace-idle-fingers .ace_meta.ace_tag {color: #FFE5BB}.ace-idle-fingers .ace_entity.ace_name {color: #FFC66D}.ace-idle-fingers .ace_collab.ace_user1 {color: #323232;background-color: #FFF980}.ace-idle-fingers .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/idle_fingers\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-iplastic.js",
    "content": "ace.define(\"ace/theme/iplastic\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-iplastic\",t.cssText=\".ace-iplastic .ace_gutter {background: #dddddd;color: #666666}.ace-iplastic .ace_print-margin {width: 1px;background: #bbbbbb}.ace-iplastic {background-color: #eeeeee;color: #333333}.ace-iplastic .ace_cursor {color: #333}.ace-iplastic .ace_marker-layer .ace_selection {background: #BAD6FD;}.ace-iplastic.ace_multiselect .ace_selection.ace_start {border-radius: 4px}.ace-iplastic .ace_marker-layer .ace_step {background: #444444}.ace-iplastic .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E;background: #FFF799}.ace-iplastic .ace_marker-layer .ace_active-line {background: #e5e5e5}.ace-iplastic .ace_gutter-active-line {background-color: #eeeeee}.ace-iplastic .ace_marker-layer .ace_selected-word {border: 1px solid #555555;border-radius:4px}.ace-iplastic .ace_invisible {color: #999999}.ace-iplastic .ace_entity.ace_name.ace_tag,.ace-iplastic .ace_keyword,.ace-iplastic .ace_meta.ace_tag,.ace-iplastic .ace_storage {color: #0000FF}.ace-iplastic .ace_punctuation,.ace-iplastic .ace_punctuation.ace_tag {color: #000}.ace-iplastic .ace_constant {color: #333333;font-weight: 700}.ace-iplastic .ace_constant.ace_character,.ace-iplastic .ace_constant.ace_language,.ace-iplastic .ace_constant.ace_numeric,.ace-iplastic .ace_constant.ace_other {color: #0066FF;font-weight: 700}.ace-iplastic .ace_constant.ace_numeric{font-weight: 100}.ace-iplastic .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-iplastic .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-iplastic .ace_support.ace_constant,.ace-iplastic .ace_support.ace_function {color: #333333;font-weight: 700}.ace-iplastic .ace_fold {background-color: #464646;border-color: #F8F8F2}.ace-iplastic .ace_storage.ace_type,.ace-iplastic .ace_support.ace_class,.ace-iplastic .ace_support.ace_type {color: #3333fc;font-weight: 700}.ace-iplastic .ace_entity.ace_name.ace_function,.ace-iplastic .ace_entity.ace_other,.ace-iplastic .ace_entity.ace_other.ace_attribute-name,.ace-iplastic .ace_variable {color: #3366cc;font-style: italic}.ace-iplastic .ace_variable.ace_parameter {font-style: italic;color: #2469E0}.ace-iplastic .ace_string {color: #a55f03}.ace-iplastic .ace_comment {color: #777777;font-style: italic}.ace-iplastic .ace_fold-widget {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);}.ace-iplastic .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAABlJREFUeNpi+P//PwMzMzPzfwAAAAD//wMAGRsECSML/RIAAAAASUVORK5CYII=) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/iplastic\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-katzenmilch.js",
    "content": "ace.define(\"ace/theme/katzenmilch\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-katzenmilch\",t.cssText=\".ace-katzenmilch .ace_gutter,.ace-katzenmilch .ace_gutter {background: #e8e8e8;color: #333}.ace-katzenmilch .ace_print-margin {width: 1px;background: #e8e8e8}.ace-katzenmilch {background-color: #f3f2f3;color: rgba(15, 0, 9, 1.0)}.ace-katzenmilch .ace_cursor {border-left: 2px solid #100011}.ace-katzenmilch .ace_overwrite-cursors .ace_cursor {border-left: 0px;border-bottom: 1px solid #100011}.ace-katzenmilch .ace_marker-layer .ace_selection {background: rgba(100, 5, 208, 0.27)}.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #f3f2f3;}.ace-katzenmilch .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-katzenmilch .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(0, 0, 0, 0.33);}.ace-katzenmilch .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254)}.ace-katzenmilch .ace_gutter-active-line {background-color: rgb(232, 242, 254)}.ace-katzenmilch .ace_marker-layer .ace_selected-word {border: 1px solid rgba(100, 5, 208, 0.27)}.ace-katzenmilch .ace_invisible {color: #BFBFBF}.ace-katzenmilch .ace_fold {background-color: rgba(2, 95, 73, 0.97);border-color: rgba(15, 0, 9, 1.0)}.ace-katzenmilch .ace_keyword {color: #674Aa8;rbackground-color: rgba(163, 170, 216, 0.055)}.ace-katzenmilch .ace_constant.ace_language {color: #7D7e52;rbackground-color: rgba(189, 190, 130, 0.059)}.ace-katzenmilch .ace_constant.ace_numeric {color: rgba(79, 130, 123, 0.93);rbackground-color: rgba(119, 194, 187, 0.059)}.ace-katzenmilch .ace_constant.ace_character,.ace-katzenmilch .ace_constant.ace_other {color: rgba(2, 95, 105, 1.0);rbackground-color: rgba(127, 34, 153, 0.063)}.ace-katzenmilch .ace_support.ace_function {color: #9D7e62;rbackground-color: rgba(189, 190, 130, 0.039)}.ace-katzenmilch .ace_support.ace_class {color: rgba(239, 106, 167, 1.0);rbackground-color: rgba(239, 106, 167, 0.063)}.ace-katzenmilch .ace_storage {color: rgba(123, 92, 191, 1.0);rbackground-color: rgba(139, 93, 223, 0.051)}.ace-katzenmilch .ace_invalid {color: #DFDFD5;rbackground-color: #CC1B27}.ace-katzenmilch .ace_string {color: #5a5f9b;rbackground-color: rgba(170, 175, 219, 0.035)}.ace-katzenmilch .ace_comment {font-style: italic;color: rgba(64, 79, 80, 0.67);rbackground-color: rgba(95, 15, 255, 0.0078)}.ace-katzenmilch .ace_entity.ace_name.ace_function,.ace-katzenmilch .ace_variable {color: rgba(2, 95, 73, 0.97);rbackground-color: rgba(34, 255, 73, 0.12)}.ace-katzenmilch .ace_variable.ace_language {color: #316fcf;rbackground-color: rgba(58, 175, 255, 0.039)}.ace-katzenmilch .ace_variable.ace_parameter {font-style: italic;color: rgba(51, 150, 159, 0.87);rbackground-color: rgba(5, 214, 249, 0.043)}.ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {color: rgba(73, 70, 194, 0.93);rbackground-color: rgba(73, 134, 194, 0.035)}.ace-katzenmilch .ace_entity.ace_name.ace_tag {color: #3976a2;rbackground-color: rgba(73, 166, 210, 0.039)}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/katzenmilch\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-kr_theme.js",
    "content": "ace.define(\"ace/theme/kr_theme\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-kr-theme\",t.cssText=\".ace-kr-theme .ace_gutter {background: #1c1917;color: #FCFFE0}.ace-kr-theme .ace_print-margin {width: 1px;background: #1c1917}.ace-kr-theme {background-color: #0B0A09;color: #FCFFE0}.ace-kr-theme .ace_cursor {color: #FF9900}.ace-kr-theme .ace_marker-layer .ace_selection {background: rgba(170, 0, 255, 0.45)}.ace-kr-theme.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #0B0A09;}.ace-kr-theme .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-kr-theme .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 177, 111, 0.32)}.ace-kr-theme .ace_marker-layer .ace_active-line {background: #38403D}.ace-kr-theme .ace_gutter-active-line {background-color : #38403D}.ace-kr-theme .ace_marker-layer .ace_selected-word {border: 1px solid rgba(170, 0, 255, 0.45)}.ace-kr-theme .ace_invisible {color: rgba(255, 177, 111, 0.32)}.ace-kr-theme .ace_keyword,.ace-kr-theme .ace_meta {color: #949C8B}.ace-kr-theme .ace_constant,.ace-kr-theme .ace_constant.ace_character,.ace-kr-theme .ace_constant.ace_character.ace_escape,.ace-kr-theme .ace_constant.ace_other {color: rgba(210, 117, 24, 0.76)}.ace-kr-theme .ace_invalid {color: #F8F8F8;background-color: #A41300}.ace-kr-theme .ace_support {color: #9FC28A}.ace-kr-theme .ace_support.ace_constant {color: #C27E66}.ace-kr-theme .ace_fold {background-color: #949C8B;border-color: #FCFFE0}.ace-kr-theme .ace_support.ace_function {color: #85873A}.ace-kr-theme .ace_storage {color: #FFEE80}.ace-kr-theme .ace_string {color: rgba(164, 161, 181, 0.8)}.ace-kr-theme .ace_string.ace_regexp {color: rgba(125, 255, 192, 0.65)}.ace-kr-theme .ace_comment {font-style: italic;color: #706D5B}.ace-kr-theme .ace_variable {color: #D1A796}.ace-kr-theme .ace_list,.ace-kr-theme .ace_markup.ace_list {background-color: #0F0040}.ace-kr-theme .ace_variable.ace_language {color: #FF80E1}.ace-kr-theme .ace_meta.ace_tag {color: #BABD9C}.ace-kr-theme .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/kr_theme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-kuroir.js",
    "content": "ace.define(\"ace/theme/kuroir\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-kuroir\",t.cssText=\".ace-kuroir .ace_gutter {background: #e8e8e8;color: #333;}.ace-kuroir .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-kuroir {background-color: #E8E9E8;color: #363636;}.ace-kuroir .ace_cursor {color: #202020;}.ace-kuroir .ace_marker-layer .ace_selection {background: rgba(245, 170, 0, 0.57);}.ace-kuroir.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #E8E9E8;}.ace-kuroir .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-kuroir .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(0, 0, 0, 0.29);}.ace-kuroir .ace_marker-layer .ace_active-line {background: rgba(203, 220, 47, 0.22);}.ace-kuroir .ace_gutter-active-line {background-color: rgba(203, 220, 47, 0.22);}.ace-kuroir .ace_marker-layer .ace_selected-word {border: 1px solid rgba(245, 170, 0, 0.57);}.ace-kuroir .ace_invisible {color: #BFBFBF}.ace-kuroir .ace_fold {border-color: #363636;}.ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;background-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;font-style:italic;color:#FD1732;background-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;background-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);background-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;background-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/kuroir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-merbivore.js",
    "content": "ace.define(\"ace/theme/merbivore\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-merbivore\",t.cssText=\".ace-merbivore .ace_gutter {background: #202020;color: #E6E1DC}.ace-merbivore .ace_print-margin {width: 1px;background: #555651}.ace-merbivore {background-color: #161616;color: #E6E1DC}.ace-merbivore .ace_cursor {color: #FFFFFF}.ace-merbivore .ace_marker-layer .ace_selection {background: #454545}.ace-merbivore.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #161616;}.ace-merbivore .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-merbivore .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-merbivore .ace_marker-layer .ace_active-line {background: #333435}.ace-merbivore .ace_gutter-active-line {background-color: #333435}.ace-merbivore .ace_marker-layer .ace_selected-word {border: 1px solid #454545}.ace-merbivore .ace_invisible {color: #404040}.ace-merbivore .ace_entity.ace_name.ace_tag,.ace-merbivore .ace_keyword,.ace-merbivore .ace_meta,.ace-merbivore .ace_meta.ace_tag,.ace-merbivore .ace_storage,.ace-merbivore .ace_support.ace_function {color: #FC6F09}.ace-merbivore .ace_constant,.ace-merbivore .ace_constant.ace_character,.ace-merbivore .ace_constant.ace_character.ace_escape,.ace-merbivore .ace_constant.ace_other,.ace-merbivore .ace_support.ace_type {color: #1EDAFB}.ace-merbivore .ace_constant.ace_character.ace_escape {color: #519F50}.ace-merbivore .ace_constant.ace_language {color: #FDC251}.ace-merbivore .ace_constant.ace_library,.ace-merbivore .ace_string,.ace-merbivore .ace_support.ace_constant {color: #8DFF0A}.ace-merbivore .ace_constant.ace_numeric {color: #58C554}.ace-merbivore .ace_invalid {color: #FFFFFF;background-color: #990000}.ace-merbivore .ace_fold {background-color: #FC6F09;border-color: #E6E1DC}.ace-merbivore .ace_comment {font-style: italic;color: #AD2EA4}.ace-merbivore .ace_entity.ace_other.ace_attribute-name {color: #FFFF89}.ace-merbivore .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/merbivore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-merbivore_soft.js",
    "content": "ace.define(\"ace/theme/merbivore_soft\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-merbivore-soft\",t.cssText=\".ace-merbivore-soft .ace_gutter {background: #262424;color: #E6E1DC}.ace-merbivore-soft .ace_print-margin {width: 1px;background: #262424}.ace-merbivore-soft {background-color: #1C1C1C;color: #E6E1DC}.ace-merbivore-soft .ace_cursor {color: #FFFFFF}.ace-merbivore-soft .ace_marker-layer .ace_selection {background: #494949}.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1C1C1C;}.ace-merbivore-soft .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-merbivore-soft .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-merbivore-soft .ace_marker-layer .ace_active-line {background: #333435}.ace-merbivore-soft .ace_gutter-active-line {background-color: #333435}.ace-merbivore-soft .ace_marker-layer .ace_selected-word {border: 1px solid #494949}.ace-merbivore-soft .ace_invisible {color: #404040}.ace-merbivore-soft .ace_entity.ace_name.ace_tag,.ace-merbivore-soft .ace_keyword,.ace-merbivore-soft .ace_meta,.ace-merbivore-soft .ace_meta.ace_tag,.ace-merbivore-soft .ace_storage {color: #FC803A}.ace-merbivore-soft .ace_constant,.ace-merbivore-soft .ace_constant.ace_character,.ace-merbivore-soft .ace_constant.ace_character.ace_escape,.ace-merbivore-soft .ace_constant.ace_other,.ace-merbivore-soft .ace_support.ace_type {color: #68C1D8}.ace-merbivore-soft .ace_constant.ace_character.ace_escape {color: #B3E5B4}.ace-merbivore-soft .ace_constant.ace_language {color: #E1C582}.ace-merbivore-soft .ace_constant.ace_library,.ace-merbivore-soft .ace_string,.ace-merbivore-soft .ace_support.ace_constant {color: #8EC65F}.ace-merbivore-soft .ace_constant.ace_numeric {color: #7FC578}.ace-merbivore-soft .ace_invalid,.ace-merbivore-soft .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #FE3838}.ace-merbivore-soft .ace_fold {background-color: #FC803A;border-color: #E6E1DC}.ace-merbivore-soft .ace_comment,.ace-merbivore-soft .ace_meta {font-style: italic;color: #AC4BB8}.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {color: #EAF1A3}.ace-merbivore-soft .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/merbivore_soft\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-mono_industrial.js",
    "content": "ace.define(\"ace/theme/mono_industrial\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-mono-industrial\",t.cssText=\".ace-mono-industrial .ace_gutter {background: #1d2521;color: #C5C9C9}.ace-mono-industrial .ace_print-margin {width: 1px;background: #555651}.ace-mono-industrial {background-color: #222C28;color: #FFFFFF}.ace-mono-industrial .ace_cursor {color: #FFFFFF}.ace-mono-industrial .ace_marker-layer .ace_selection {background: rgba(145, 153, 148, 0.40)}.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #222C28;}.ace-mono-industrial .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-mono-industrial .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(102, 108, 104, 0.50)}.ace-mono-industrial .ace_marker-layer .ace_active-line {background: rgba(12, 13, 12, 0.25)}.ace-mono-industrial .ace_gutter-active-line {background-color: rgba(12, 13, 12, 0.25)}.ace-mono-industrial .ace_marker-layer .ace_selected-word {border: 1px solid rgba(145, 153, 148, 0.40)}.ace-mono-industrial .ace_invisible {color: rgba(102, 108, 104, 0.50)}.ace-mono-industrial .ace_string {background-color: #151C19;color: #FFFFFF}.ace-mono-industrial .ace_keyword,.ace-mono-industrial .ace_meta {color: #A39E64}.ace-mono-industrial .ace_constant,.ace-mono-industrial .ace_constant.ace_character,.ace-mono-industrial .ace_constant.ace_character.ace_escape,.ace-mono-industrial .ace_constant.ace_numeric,.ace-mono-industrial .ace_constant.ace_other {color: #E98800}.ace-mono-industrial .ace_entity.ace_name.ace_function,.ace-mono-industrial .ace_keyword.ace_operator,.ace-mono-industrial .ace_variable {color: #A8B3AB}.ace-mono-industrial .ace_invalid {color: #FFFFFF;background-color: rgba(153, 0, 0, 0.68)}.ace-mono-industrial .ace_support.ace_constant {color: #C87500}.ace-mono-industrial .ace_fold {background-color: #A8B3AB;border-color: #FFFFFF}.ace-mono-industrial .ace_support.ace_function {color: #588E60}.ace-mono-industrial .ace_entity.ace_name,.ace-mono-industrial .ace_support.ace_class,.ace-mono-industrial .ace_support.ace_type {color: #5778B6}.ace-mono-industrial .ace_storage {color: #C23B00}.ace-mono-industrial .ace_variable.ace_language,.ace-mono-industrial .ace_variable.ace_parameter {color: #648BD2}.ace-mono-industrial .ace_comment {color: #666C68;background-color: #151C19}.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {color: #909993}.ace-mono-industrial .ace_entity.ace_name.ace_tag {color: #A65EFF}.ace-mono-industrial .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/mono_industrial\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-monokai.js",
    "content": "ace.define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-monokai\",t.cssText=\".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/monokai\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-pastel_on_dark.js",
    "content": "ace.define(\"ace/theme/pastel_on_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-pastel-on-dark\",t.cssText=\".ace-pastel-on-dark .ace_gutter {background: #353030;color: #8F938F}.ace-pastel-on-dark .ace_print-margin {width: 1px;background: #353030}.ace-pastel-on-dark {background-color: #2C2828;color: #8F938F}.ace-pastel-on-dark .ace_cursor {color: #A7A7A7}.ace-pastel-on-dark .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #2C2828;}.ace-pastel-on-dark .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-pastel-on-dark .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-pastel-on-dark .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-pastel-on-dark .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-pastel-on-dark .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-pastel-on-dark .ace_keyword,.ace-pastel-on-dark .ace_meta {color: #757aD8}.ace-pastel-on-dark .ace_constant,.ace-pastel-on-dark .ace_constant.ace_character,.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,.ace-pastel-on-dark .ace_constant.ace_other {color: #4FB7C5}.ace-pastel-on-dark .ace_keyword.ace_operator {color: #797878}.ace-pastel-on-dark .ace_constant.ace_character {color: #AFA472}.ace-pastel-on-dark .ace_constant.ace_language {color: #DE8E30}.ace-pastel-on-dark .ace_constant.ace_numeric {color: #CCCCCC}.ace-pastel-on-dark .ace_invalid,.ace-pastel-on-dark .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-pastel-on-dark .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-pastel-on-dark .ace_fold {background-color: #757aD8;border-color: #8F938F}.ace-pastel-on-dark .ace_support.ace_function {color: #AEB2F8}.ace-pastel-on-dark .ace_string {color: #66A968}.ace-pastel-on-dark .ace_string.ace_regexp {color: #E9C062}.ace-pastel-on-dark .ace_comment {color: #A6C6FF}.ace-pastel-on-dark .ace_variable {color: #BEBF55}.ace-pastel-on-dark .ace_variable.ace_language {color: #C1C144}.ace-pastel-on-dark .ace_xml-pe {color: #494949}.ace-pastel-on-dark .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/pastel_on_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-solarized_dark.js",
    "content": "ace.define(\"ace/theme/solarized_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-solarized-dark\",t.cssText=\".ace-solarized-dark .ace_gutter {background: #01313f;color: #d0edf7}.ace-solarized-dark .ace_print-margin {width: 1px;background: #33555E}.ace-solarized-dark {background-color: #002B36;color: #93A1A1}.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,.ace-solarized-dark .ace_storage {color: #93A1A1}.ace-solarized-dark .ace_cursor,.ace-solarized-dark .ace_string.ace_regexp {color: #D30102}.ace-solarized-dark .ace_marker-layer .ace_active-line,.ace-solarized-dark .ace_marker-layer .ace_selection {background: rgba(255, 255, 255, 0.1)}.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002B36;}.ace-solarized-dark .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-solarized-dark .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_gutter-active-line {background-color: #0d3440}.ace-solarized-dark .ace_marker-layer .ace_selected-word {border: 1px solid #073642}.ace-solarized-dark .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_keyword,.ace-solarized-dark .ace_meta,.ace-solarized-dark .ace_support.ace_class,.ace-solarized-dark .ace_support.ace_type {color: #859900}.ace-solarized-dark .ace_constant.ace_character,.ace-solarized-dark .ace_constant.ace_other {color: #CB4B16}.ace-solarized-dark .ace_constant.ace_language {color: #B58900}.ace-solarized-dark .ace_constant.ace_numeric {color: #D33682}.ace-solarized-dark .ace_fold {background-color: #268BD2;border-color: #93A1A1}.ace-solarized-dark .ace_entity.ace_name.ace_function,.ace-solarized-dark .ace_entity.ace_name.ace_tag,.ace-solarized-dark .ace_support.ace_function,.ace-solarized-dark .ace_variable,.ace-solarized-dark .ace_variable.ace_language {color: #268BD2}.ace-solarized-dark .ace_string {color: #2AA198}.ace-solarized-dark .ace_comment {font-style: italic;color: #657B83}.ace-solarized-dark .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/solarized_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-solarized_light.js",
    "content": "ace.define(\"ace/theme/solarized_light\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-solarized-light\",t.cssText=\".ace-solarized-light .ace_gutter {background: #fbf1d3;color: #333}.ace-solarized-light .ace_print-margin {width: 1px;background: #e8e8e8}.ace-solarized-light {background-color: #FDF6E3;color: #586E75}.ace-solarized-light .ace_cursor {color: #000000}.ace-solarized-light .ace_marker-layer .ace_selection {background: rgba(7, 54, 67, 0.09)}.ace-solarized-light.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FDF6E3;}.ace-solarized-light .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-solarized-light .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_marker-layer .ace_active-line {background: #EEE8D5}.ace-solarized-light .ace_gutter-active-line {background-color : #EDE5C1}.ace-solarized-light .ace_marker-layer .ace_selected-word {border: 1px solid #7f9390}.ace-solarized-light .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_keyword,.ace-solarized-light .ace_meta,.ace-solarized-light .ace_support.ace_class,.ace-solarized-light .ace_support.ace_type {color: #859900}.ace-solarized-light .ace_constant.ace_character,.ace-solarized-light .ace_constant.ace_other {color: #CB4B16}.ace-solarized-light .ace_constant.ace_language {color: #B58900}.ace-solarized-light .ace_constant.ace_numeric {color: #D33682}.ace-solarized-light .ace_fold {background-color: #268BD2;border-color: #586E75}.ace-solarized-light .ace_entity.ace_name.ace_function,.ace-solarized-light .ace_entity.ace_name.ace_tag,.ace-solarized-light .ace_support.ace_function,.ace-solarized-light .ace_variable,.ace-solarized-light .ace_variable.ace_language {color: #268BD2}.ace-solarized-light .ace_storage {color: #073642}.ace-solarized-light .ace_string {color: #2AA198}.ace-solarized-light .ace_string.ace_regexp {color: #D30102}.ace-solarized-light .ace_comment,.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {color: #93A1A1}.ace-solarized-light .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/solarized_light\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-sqlserver.js",
    "content": "ace.define(\"ace/theme/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-sqlserver\",t.cssText='.ace-sqlserver .ace_gutter {background: #ebebeb;color: #333;overflow: hidden;}.ace-sqlserver .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-sqlserver {background-color: #FFFFFF;color: black;}.ace-sqlserver .ace_identifier {color: black;}.ace-sqlserver .ace_keyword {color: #0000FF;}.ace-sqlserver .ace_numeric {color: black;}.ace-sqlserver .ace_storage {color: #11B7BE;}.ace-sqlserver .ace_keyword.ace_operator,.ace-sqlserver .ace_lparen,.ace-sqlserver .ace_rparen,.ace-sqlserver .ace_punctuation {color: #808080;}.ace-sqlserver .ace_set.ace_statement {color: #0000FF;text-decoration: underline;}.ace-sqlserver .ace_cursor {color: black;}.ace-sqlserver .ace_invisible {color: rgb(191, 191, 191);}.ace-sqlserver .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-sqlserver .ace_constant.ace_language {color: #979797;}.ace-sqlserver .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-sqlserver .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-sqlserver .ace_support.ace_function {color: #FF00FF;}.ace-sqlserver .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-sqlserver .ace_class {color: #008080;}.ace-sqlserver .ace_support.ace_other {color: #6D79DE;}.ace-sqlserver .ace_variable.ace_parameter {font-style: italic;color: #FD971F;}.ace-sqlserver .ace_comment {color: #008000;}.ace-sqlserver .ace_constant.ace_numeric {color: black;}.ace-sqlserver .ace_variable {color: rgb(49, 132, 149);}.ace-sqlserver .ace_xml-pe {color: rgb(104, 104, 91);}.ace-sqlserver .ace_support.ace_storedprocedure {color: #800000;}.ace-sqlserver .ace_heading {color: rgb(12, 7, 255);}.ace-sqlserver .ace_list {color: rgb(185, 6, 144);}.ace-sqlserver .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-sqlserver .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-sqlserver .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-sqlserver .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-sqlserver .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-sqlserver .ace_gutter-active-line {background-color: #dcdcdc;}.ace-sqlserver .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-sqlserver .ace_meta.ace_tag {color: #0000FF;}.ace-sqlserver .ace_string.ace_regex {color: #FF0000;}.ace-sqlserver .ace_string {color: #FF0000;}.ace-sqlserver .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-sqlserver .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-terminal.js",
    "content": "ace.define(\"ace/theme/terminal\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-terminal-theme\",t.cssText=\".ace-terminal-theme .ace_gutter {background: #1a0005;color: steelblue}.ace-terminal-theme .ace_print-margin {width: 1px;background: #1a1a1a}.ace-terminal-theme {background-color: black;color: #DEDEDE}.ace-terminal-theme .ace_cursor {color: #9F9F9F}.ace-terminal-theme .ace_marker-layer .ace_selection {background: #424242}.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px black;}.ace-terminal-theme .ace_marker-layer .ace_step {background: rgb(0, 0, 0)}.ace-terminal-theme .ace_marker-layer .ace_bracket {background: #090;}.ace-terminal-theme .ace_marker-layer .ace_bracket-start {background: #090;}.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {margin: -1px 0 0 -1px;border: 1px solid #900}.ace-terminal-theme .ace_marker-layer .ace_active-line {background: #2A2A2A}.ace-terminal-theme .ace_gutter-active-line {background-color: #2A112A}.ace-terminal-theme .ace_marker-layer .ace_selected-word {border: 1px solid #424242}.ace-terminal-theme .ace_invisible {color: #343434}.ace-terminal-theme .ace_keyword,.ace-terminal-theme .ace_meta,.ace-terminal-theme .ace_storage,.ace-terminal-theme .ace_storage.ace_type,.ace-terminal-theme .ace_support.ace_type {color: tomato}.ace-terminal-theme .ace_keyword.ace_operator {color: deeppink}.ace-terminal-theme .ace_constant.ace_character,.ace-terminal-theme .ace_constant.ace_language,.ace-terminal-theme .ace_constant.ace_numeric,.ace-terminal-theme .ace_keyword.ace_other.ace_unit,.ace-terminal-theme .ace_support.ace_constant,.ace-terminal-theme .ace_variable.ace_parameter {color: #E78C45}.ace-terminal-theme .ace_constant.ace_other {color: gold}.ace-terminal-theme .ace_invalid {color: yellow;background-color: red}.ace-terminal-theme .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-terminal-theme .ace_fold {background-color: #7AA6DA;border-color: #DEDEDE}.ace-terminal-theme .ace_entity.ace_name.ace_function,.ace-terminal-theme .ace_support.ace_function,.ace-terminal-theme .ace_variable {color: #7AA6DA}.ace-terminal-theme .ace_support.ace_class,.ace-terminal-theme .ace_support.ace_type {color: #E7C547}.ace-terminal-theme .ace_heading,.ace-terminal-theme .ace_string {color: #B9CA4A}.ace-terminal-theme .ace_entity.ace_name.ace_tag,.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,.ace-terminal-theme .ace_meta.ace_tag,.ace-terminal-theme .ace_string.ace_regexp,.ace-terminal-theme .ace_variable {color: #D54E53}.ace-terminal-theme .ace_comment {color: orangered}.ace-terminal-theme .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/terminal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-textmate.js",
    "content": "ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.$id=\"ace/theme/textmate\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/textmate\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-tomorrow.js",
    "content": "ace.define(\"ace/theme/tomorrow\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-tomorrow\",t.cssText=\".ace-tomorrow .ace_gutter {background: #f6f6f6;color: #4D4D4C}.ace-tomorrow .ace_print-margin {width: 1px;background: #f6f6f6}.ace-tomorrow {background-color: #FFFFFF;color: #4D4D4C}.ace-tomorrow .ace_cursor {color: #AEAFAD}.ace-tomorrow .ace_marker-layer .ace_selection {background: #D6D6D6}.ace-tomorrow.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;}.ace-tomorrow .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-tomorrow .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #D1D1D1}.ace-tomorrow .ace_marker-layer .ace_active-line {background: #EFEFEF}.ace-tomorrow .ace_gutter-active-line {background-color : #dcdcdc}.ace-tomorrow .ace_marker-layer .ace_selected-word {border: 1px solid #D6D6D6}.ace-tomorrow .ace_invisible {color: #D1D1D1}.ace-tomorrow .ace_keyword,.ace-tomorrow .ace_meta,.ace-tomorrow .ace_storage,.ace-tomorrow .ace_storage.ace_type,.ace-tomorrow .ace_support.ace_type {color: #8959A8}.ace-tomorrow .ace_keyword.ace_operator {color: #3E999F}.ace-tomorrow .ace_constant.ace_character,.ace-tomorrow .ace_constant.ace_language,.ace-tomorrow .ace_constant.ace_numeric,.ace-tomorrow .ace_keyword.ace_other.ace_unit,.ace-tomorrow .ace_support.ace_constant,.ace-tomorrow .ace_variable.ace_parameter {color: #F5871F}.ace-tomorrow .ace_constant.ace_other {color: #666969}.ace-tomorrow .ace_invalid {color: #FFFFFF;background-color: #C82829}.ace-tomorrow .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #8959A8}.ace-tomorrow .ace_fold {background-color: #4271AE;border-color: #4D4D4C}.ace-tomorrow .ace_entity.ace_name.ace_function,.ace-tomorrow .ace_support.ace_function,.ace-tomorrow .ace_variable {color: #4271AE}.ace-tomorrow .ace_support.ace_class,.ace-tomorrow .ace_support.ace_type {color: #C99E00}.ace-tomorrow .ace_heading,.ace-tomorrow .ace_markup.ace_heading,.ace-tomorrow .ace_string {color: #718C00}.ace-tomorrow .ace_entity.ace_name.ace_tag,.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow .ace_meta.ace_tag,.ace-tomorrow .ace_string.ace_regexp,.ace-tomorrow .ace_variable {color: #C82829}.ace-tomorrow .ace_comment {color: #8E908C}.ace-tomorrow .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/tomorrow\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-tomorrow_night.js",
    "content": "ace.define(\"ace/theme/tomorrow_night\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night\",t.cssText=\".ace-tomorrow-night .ace_gutter {background: #25282c;color: #C5C8C6}.ace-tomorrow-night .ace_print-margin {width: 1px;background: #25282c}.ace-tomorrow-night {background-color: #1D1F21;color: #C5C8C6}.ace-tomorrow-night .ace_cursor {color: #AEAFAD}.ace-tomorrow-night .ace_marker-layer .ace_selection {background: #373B41}.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1D1F21;}.ace-tomorrow-night .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #4B4E55}.ace-tomorrow-night .ace_marker-layer .ace_active-line {background: #282A2E}.ace-tomorrow-night .ace_gutter-active-line {background-color: #282A2E}.ace-tomorrow-night .ace_marker-layer .ace_selected-word {border: 1px solid #373B41}.ace-tomorrow-night .ace_invisible {color: #4B4E55}.ace-tomorrow-night .ace_keyword,.ace-tomorrow-night .ace_meta,.ace-tomorrow-night .ace_storage,.ace-tomorrow-night .ace_storage.ace_type,.ace-tomorrow-night .ace_support.ace_type {color: #B294BB}.ace-tomorrow-night .ace_keyword.ace_operator {color: #8ABEB7}.ace-tomorrow-night .ace_constant.ace_character,.ace-tomorrow-night .ace_constant.ace_language,.ace-tomorrow-night .ace_constant.ace_numeric,.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night .ace_support.ace_constant,.ace-tomorrow-night .ace_variable.ace_parameter {color: #DE935F}.ace-tomorrow-night .ace_constant.ace_other {color: #CED1CF}.ace-tomorrow-night .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night .ace_fold {background-color: #81A2BE;border-color: #C5C8C6}.ace-tomorrow-night .ace_entity.ace_name.ace_function,.ace-tomorrow-night .ace_support.ace_function,.ace-tomorrow-night .ace_variable {color: #81A2BE}.ace-tomorrow-night .ace_support.ace_class,.ace-tomorrow-night .ace_support.ace_type {color: #F0C674}.ace-tomorrow-night .ace_heading,.ace-tomorrow-night .ace_markup.ace_heading,.ace-tomorrow-night .ace_string {color: #B5BD68}.ace-tomorrow-night .ace_entity.ace_name.ace_tag,.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night .ace_meta.ace_tag,.ace-tomorrow-night .ace_string.ace_regexp,.ace-tomorrow-night .ace_variable {color: #CC6666}.ace-tomorrow-night .ace_comment {color: #969896}.ace-tomorrow-night .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-tomorrow_night_blue.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_blue\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night-blue\",t.cssText=\".ace-tomorrow-night-blue .ace_gutter {background: #00204b;color: #7388b5}.ace-tomorrow-night-blue .ace_print-margin {width: 1px;background: #00204b}.ace-tomorrow-night-blue {background-color: #002451;color: #FFFFFF}.ace-tomorrow-night-blue .ace_constant.ace_other,.ace-tomorrow-night-blue .ace_cursor {color: #FFFFFF}.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {background: #003F8E}.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002451;}.ace-tomorrow-night-blue .ace_marker-layer .ace_step {background: rgb(127, 111, 19)}.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404F7D}.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {background: #00346E}.ace-tomorrow-night-blue .ace_gutter-active-line {background-color: #022040}.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {border: 1px solid #003F8E}.ace-tomorrow-night-blue .ace_invisible {color: #404F7D}.ace-tomorrow-night-blue .ace_keyword,.ace-tomorrow-night-blue .ace_meta,.ace-tomorrow-night-blue .ace_storage,.ace-tomorrow-night-blue .ace_storage.ace_type,.ace-tomorrow-night-blue .ace_support.ace_type {color: #EBBBFF}.ace-tomorrow-night-blue .ace_keyword.ace_operator {color: #99FFFF}.ace-tomorrow-night-blue .ace_constant.ace_character,.ace-tomorrow-night-blue .ace_constant.ace_language,.ace-tomorrow-night-blue .ace_constant.ace_numeric,.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-blue .ace_support.ace_constant,.ace-tomorrow-night-blue .ace_variable.ace_parameter {color: #FFC58F}.ace-tomorrow-night-blue .ace_invalid {color: #FFFFFF;background-color: #F99DA5}.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #EBBBFF}.ace-tomorrow-night-blue .ace_fold {background-color: #BBDAFF;border-color: #FFFFFF}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,.ace-tomorrow-night-blue .ace_support.ace_function,.ace-tomorrow-night-blue .ace_variable {color: #BBDAFF}.ace-tomorrow-night-blue .ace_support.ace_class,.ace-tomorrow-night-blue .ace_support.ace_type {color: #FFEEAD}.ace-tomorrow-night-blue .ace_heading,.ace-tomorrow-night-blue .ace_markup.ace_heading,.ace-tomorrow-night-blue .ace_string {color: #D1F1A9}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-blue .ace_meta.ace_tag,.ace-tomorrow-night-blue .ace_string.ace_regexp,.ace-tomorrow-night-blue .ace_variable {color: #FF9DA4}.ace-tomorrow-night-blue .ace_comment {color: #7285B7}.ace-tomorrow-night-blue .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night_blue\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-tomorrow_night_bright.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_bright\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night-bright\",t.cssText=\".ace-tomorrow-night-bright .ace_gutter {background: #1a1a1a;color: #DEDEDE}.ace-tomorrow-night-bright .ace_print-margin {width: 1px;background: #1a1a1a}.ace-tomorrow-night-bright {background-color: #000000;color: #DEDEDE}.ace-tomorrow-night-bright .ace_cursor {color: #9F9F9F}.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {background: #424242}.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #000000;}.ace-tomorrow-night-bright .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #888888}.ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {border: 1px solid rgb(110, 119, 0);border-bottom: 0;box-shadow: inset 0 -1px rgb(110, 119, 0);margin: -1px 0 0 -1px;background: rgba(255, 235, 0, 0.1)}.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {background: #2A2A2A}.ace-tomorrow-night-bright .ace_gutter-active-line {background-color: #2A2A2A}.ace-tomorrow-night-bright .ace_stack {background-color: rgb(66, 90, 44)}.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {border: 1px solid #888888}.ace-tomorrow-night-bright .ace_invisible {color: #343434}.ace-tomorrow-night-bright .ace_keyword,.ace-tomorrow-night-bright .ace_meta,.ace-tomorrow-night-bright .ace_storage,.ace-tomorrow-night-bright .ace_storage.ace_type,.ace-tomorrow-night-bright .ace_support.ace_type {color: #C397D8}.ace-tomorrow-night-bright .ace_keyword.ace_operator {color: #70C0B1}.ace-tomorrow-night-bright .ace_constant.ace_character,.ace-tomorrow-night-bright .ace_constant.ace_language,.ace-tomorrow-night-bright .ace_constant.ace_numeric,.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-bright .ace_support.ace_constant,.ace-tomorrow-night-bright .ace_variable.ace_parameter {color: #E78C45}.ace-tomorrow-night-bright .ace_constant.ace_other {color: #EEEEEE}.ace-tomorrow-night-bright .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night-bright .ace_fold {background-color: #7AA6DA;border-color: #DEDEDE}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,.ace-tomorrow-night-bright .ace_support.ace_function,.ace-tomorrow-night-bright .ace_variable {color: #7AA6DA}.ace-tomorrow-night-bright .ace_support.ace_class,.ace-tomorrow-night-bright .ace_support.ace_type {color: #E7C547}.ace-tomorrow-night-bright .ace_heading,.ace-tomorrow-night-bright .ace_markup.ace_heading,.ace-tomorrow-night-bright .ace_string {color: #B9CA4A}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-bright .ace_meta.ace_tag,.ace-tomorrow-night-bright .ace_string.ace_regexp,.ace-tomorrow-night-bright .ace_variable {color: #D54E53}.ace-tomorrow-night-bright .ace_comment {color: #969896}.ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {color: #C2C280}.ace-tomorrow-night-bright .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night_bright\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-tomorrow_night_eighties.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_eighties\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night-eighties\",t.cssText=\".ace-tomorrow-night-eighties .ace_gutter {background: #272727;color: #CCC}.ace-tomorrow-night-eighties .ace_print-margin {width: 1px;background: #272727}.ace-tomorrow-night-eighties {background-color: #2D2D2D;color: #CCCCCC}.ace-tomorrow-night-eighties .ace_constant.ace_other,.ace-tomorrow-night-eighties .ace_cursor {color: #CCCCCC}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {background: #515151}.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #2D2D2D;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #6A6A6A}.ace-tomorrow-night-bright .ace_stack {background: rgb(66, 90, 44)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {background: #393939}.ace-tomorrow-night-eighties .ace_gutter-active-line {background-color: #393939}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {border: 1px solid #515151}.ace-tomorrow-night-eighties .ace_invisible {color: #6A6A6A}.ace-tomorrow-night-eighties .ace_keyword,.ace-tomorrow-night-eighties .ace_meta,.ace-tomorrow-night-eighties .ace_storage,.ace-tomorrow-night-eighties .ace_storage.ace_type,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #CC99CC}.ace-tomorrow-night-eighties .ace_keyword.ace_operator {color: #66CCCC}.ace-tomorrow-night-eighties .ace_constant.ace_character,.ace-tomorrow-night-eighties .ace_constant.ace_language,.ace-tomorrow-night-eighties .ace_constant.ace_numeric,.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-eighties .ace_support.ace_constant,.ace-tomorrow-night-eighties .ace_variable.ace_parameter {color: #F99157}.ace-tomorrow-night-eighties .ace_invalid {color: #CDCDCD;background-color: #F2777A}.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {color: #CDCDCD;background-color: #CC99CC}.ace-tomorrow-night-eighties .ace_fold {background-color: #6699CC;border-color: #CCCCCC}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,.ace-tomorrow-night-eighties .ace_support.ace_function,.ace-tomorrow-night-eighties .ace_variable {color: #6699CC}.ace-tomorrow-night-eighties .ace_support.ace_class,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #FFCC66}.ace-tomorrow-night-eighties .ace_heading,.ace-tomorrow-night-eighties .ace_markup.ace_heading,.ace-tomorrow-night-eighties .ace_string {color: #99CC99}.ace-tomorrow-night-eighties .ace_comment {color: #999999}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-eighties .ace_meta.ace_tag,.ace-tomorrow-night-eighties .ace_variable {color: #F2777A}.ace-tomorrow-night-eighties .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night_eighties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-twilight.js",
    "content": "ace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-twilight\",t.cssText=\".ace-twilight .ace_gutter {background: #232323;color: #E2E2E2}.ace-twilight .ace_print-margin {width: 1px;background: #232323}.ace-twilight {background-color: #141414;color: #F8F8F8}.ace-twilight .ace_cursor {color: #A7A7A7}.ace-twilight .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-twilight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #141414;}.ace-twilight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-twilight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-twilight .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-twilight .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-twilight .ace_keyword,.ace-twilight .ace_meta {color: #CDA869}.ace-twilight .ace_constant,.ace-twilight .ace_constant.ace_character,.ace-twilight .ace_constant.ace_character.ace_escape,.ace-twilight .ace_constant.ace_other,.ace-twilight .ace_heading,.ace-twilight .ace_markup.ace_heading,.ace-twilight .ace_support.ace_constant {color: #CF6A4C}.ace-twilight .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-twilight .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-twilight .ace_support {color: #9B859D}.ace-twilight .ace_fold {background-color: #AC885B;border-color: #F8F8F8}.ace-twilight .ace_support.ace_function {color: #DAD085}.ace-twilight .ace_list,.ace-twilight .ace_markup.ace_list,.ace-twilight .ace_storage {color: #F9EE98}.ace-twilight .ace_entity.ace_name.ace_function,.ace-twilight .ace_meta.ace_tag,.ace-twilight .ace_variable {color: #AC885B}.ace-twilight .ace_string {color: #8F9D6A}.ace-twilight .ace_string.ace_regexp {color: #E9C062}.ace-twilight .ace_comment {font-style: italic;color: #5F5A60}.ace-twilight .ace_variable {color: #7587A6}.ace-twilight .ace_xml-pe {color: #494949}.ace-twilight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/twilight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-vibrant_ink.js",
    "content": "ace.define(\"ace/theme/vibrant_ink\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-vibrant-ink\",t.cssText=\".ace-vibrant-ink .ace_gutter {background: #1a1a1a;color: #BEBEBE}.ace-vibrant-ink .ace_print-margin {width: 1px;background: #1a1a1a}.ace-vibrant-ink {background-color: #0F0F0F;color: #FFFFFF}.ace-vibrant-ink .ace_cursor {color: #FFFFFF}.ace-vibrant-ink .ace_marker-layer .ace_selection {background: #6699CC}.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #0F0F0F;}.ace-vibrant-ink .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-vibrant-ink .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-vibrant-ink .ace_marker-layer .ace_active-line {background: #333333}.ace-vibrant-ink .ace_gutter-active-line {background-color: #333333}.ace-vibrant-ink .ace_marker-layer .ace_selected-word {border: 1px solid #6699CC}.ace-vibrant-ink .ace_invisible {color: #404040}.ace-vibrant-ink .ace_keyword,.ace-vibrant-ink .ace_meta {color: #FF6600}.ace-vibrant-ink .ace_constant,.ace-vibrant-ink .ace_constant.ace_character,.ace-vibrant-ink .ace_constant.ace_character.ace_escape,.ace-vibrant-ink .ace_constant.ace_other {color: #339999}.ace-vibrant-ink .ace_constant.ace_numeric {color: #99CC99}.ace-vibrant-ink .ace_invalid,.ace-vibrant-ink .ace_invalid.ace_deprecated {color: #CCFF33;background-color: #000000}.ace-vibrant-ink .ace_fold {background-color: #FFCC00;border-color: #FFFFFF}.ace-vibrant-ink .ace_entity.ace_name.ace_function,.ace-vibrant-ink .ace_support.ace_function,.ace-vibrant-ink .ace_variable {color: #FFCC00}.ace-vibrant-ink .ace_variable.ace_parameter {font-style: italic}.ace-vibrant-ink .ace_string {color: #66FF00}.ace-vibrant-ink .ace_string.ace_regexp {color: #44B4CC}.ace-vibrant-ink .ace_comment {color: #9933CC}.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {font-style: italic;color: #99CC99}.ace-vibrant-ink .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/vibrant_ink\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/theme-xcode.js",
    "content": "ace.define(\"ace/theme/xcode\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-xcode\",t.cssText=\".ace-xcode .ace_gutter {background: #e8e8e8;color: #333}.ace-xcode .ace_print-margin {width: 1px;background: #e8e8e8}.ace-xcode {background-color: #FFFFFF;color: #000000}.ace-xcode .ace_cursor {color: #000000}.ace-xcode .ace_marker-layer .ace_selection {background: #B5D5FF}.ace-xcode.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;}.ace-xcode .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-xcode .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-xcode .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_gutter-active-line {background-color: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_marker-layer .ace_selected-word {border: 1px solid #B5D5FF}.ace-xcode .ace_constant.ace_language,.ace-xcode .ace_keyword,.ace-xcode .ace_meta,.ace-xcode .ace_variable.ace_language {color: #C800A4}.ace-xcode .ace_invisible {color: #BFBFBF}.ace-xcode .ace_constant.ace_character,.ace-xcode .ace_constant.ace_other {color: #275A5E}.ace-xcode .ace_constant.ace_numeric {color: #3A00DC}.ace-xcode .ace_entity.ace_other.ace_attribute-name,.ace-xcode .ace_support.ace_constant,.ace-xcode .ace_support.ace_function {color: #450084}.ace-xcode .ace_fold {background-color: #C800A4;border-color: #000000}.ace-xcode .ace_entity.ace_name.ace_tag,.ace-xcode .ace_support.ace_class,.ace-xcode .ace_support.ace_type {color: #790EAD}.ace-xcode .ace_storage {color: #C900A4}.ace-xcode .ace_string {color: #DF0002}.ace-xcode .ace_comment {color: #008E00}.ace-xcode .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)});                (function() {\n                    ace.require([\"ace/theme/xcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/worker-coffee.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/coffee/coffee\",[],function(require,exports,module){function define(e){module.exports=e()}function _toArray(e){return Array.isArray(e)?e:Array.from(e)}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function _inherits(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function _toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}define.amd={};var _typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},_get=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(i===void 0){var s=Object.getPrototypeOf(t);return null===s?void 0:e(s,n,r)}if(\"value\"in i)return i.value;var o=i.get;return void 0===o?void 0:o.call(r)},_slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o=e[Symbol.iterator](),u;!(r=(u=o.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{!r&&o[\"return\"]&&o[\"return\"]()}finally{if(i)throw s}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),_createClass=function(){function e(e,t){for(var n=0,r;n<t.length;n++)r=t[n],r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();(function(root){var CoffeeScript=function(){function require(e){return require[e]}var _Mathabs=Math.abs,_StringfromCharCode=String.fromCharCode,_Mathfloor=Math.floor;return require[\"../../package.json\"]=function(){return{name:\"coffeescript\",description:\"Unfancy JavaScript\",keywords:[\"javascript\",\"language\",\"coffeescript\",\"compiler\"],author:\"Jeremy Ashkenas\",version:\"2.2.1\",license:\"MIT\",engines:{node:\">=6\"},directories:{lib:\"./lib/coffeescript\"},main:\"./lib/coffeescript/index\",browser:\"./lib/coffeescript/browser\",bin:{coffee:\"./bin/coffee\",cake:\"./bin/cake\"},files:[\"bin\",\"lib\",\"register.js\",\"repl.js\"],scripts:{test:\"node ./bin/cake test\",\"test-harmony\":\"node --harmony ./bin/cake test\"},homepage:\"http://coffeescript.org\",bugs:\"https://github.com/jashkenas/coffeescript/issues\",repository:{type:\"git\",url:\"git://github.com/jashkenas/coffeescript.git\"},devDependencies:{\"babel-core\":\"~6.26.0\",\"babel-preset-babili\":\"~0.1.4\",\"babel-preset-env\":\"~1.6.1\",\"babel-preset-minify\":\"^0.3.0\",codemirror:\"^5.32.0\",docco:\"~0.8.0\",\"highlight.js\":\"~9.12.0\",jison:\">=0.4.18\",\"markdown-it\":\"~8.4.0\",underscore:\"~1.8.3\",webpack:\"~3.10.0\"},dependencies:{}}}(),require[\"./helpers\"]=function(){var e={};return function(){var t,n,r,i,s,o,u,a;e.starts=function(e,t,n){return t===e.substr(n,t.length)},e.ends=function(e,t,n){var r;return r=t.length,t===e.substr(e.length-r-(n||0),r)},e.repeat=u=function(e,t){var n;for(n=\"\";0<t;)1&t&&(n+=e),t>>>=1,e+=e;return n},e.compact=function(e){var t,n,r,i;for(i=[],t=0,r=e.length;t<r;t++)n=e[t],n&&i.push(n);return i},e.count=function(e,t){var n,r;if(n=r=0,!t.length)return 1/0;for(;r=1+e.indexOf(t,r);)n++;return n},e.merge=function(e,t){return i(i({},e),t)},i=e.extend=function(e,t){var n,r;for(n in t)r=t[n],e[n]=r;return e},e.flatten=s=function(t){var n,r,i,o;for(r=[],i=0,o=t.length;i<o;i++)n=t[i],\"[object Array]\"===Object.prototype.toString.call(n)?r=r.concat(s(n)):r.push(n);return r},e.del=function(e,t){var n;return n=e[t],delete e[t],n},e.some=null==(o=Array.prototype.some)?function(e){var t,n,r,i;for(i=this,n=0,r=i.length;n<r;n++)if(t=i[n],e(t))return!0;return!1}:o,e.invertLiterate=function(e){var t,n,r,i,s,o,u,a,f;for(a=[],t=/^\\s*$/,r=/^[\\t ]/,u=/^(?:\\t?| {0,3})(?:[\\*\\-\\+]|[0-9]{1,9}\\.)[ \\t]/,i=!1,f=e.split(\"\\n\"),n=0,s=f.length;n<s;n++)o=f[n],t.test(o)?(i=!1,a.push(o)):i||u.test(o)?(i=!0,a.push(\"# \"+o)):!i&&r.test(o)?a.push(o):(i=!0,a.push(\"# \"+o));return a.join(\"\\n\")},n=function(e,t){return t?{first_line:e.first_line,first_column:e.first_column,last_line:t.last_line,last_column:t.last_column}:e},r=function(e){return e.first_line+\"x\"+e.first_column+\"-\"+e.last_line+\"x\"+e.last_column},e.addDataToNode=function(e,i,s){return function(o){var u,a,f,l,c,h;if(null!=(null==o?void 0:o.updateLocationDataIfMissing)&&null!=i&&o.updateLocationDataIfMissing(n(i,s)),!e.tokenComments)for(e.tokenComments={},l=e.parser.tokens,u=0,a=l.length;u<a;u++)if(c=l[u],!!c.comments)if(h=r(c[2]),null==e.tokenComments[h])e.tokenComments[h]=c.comments;else{var p;(p=e.tokenComments[h]).push.apply(p,_toConsumableArray(c.comments))}return null!=o.locationData&&(f=r(o.locationData),null!=e.tokenComments[f]&&t(e.tokenComments[f],o)),o}},e.attachCommentsToNode=t=function(e,t){var n;if(null!=e&&0!==e.length)return null==t.comments&&(t.comments=[]),(n=t.comments).push.apply(n,_toConsumableArray(e))},e.locationDataToString=function(e){var t;return\"2\"in e&&\"first_line\"in e[2]?t=e[2]:\"first_line\"in e&&(t=e),t?t.first_line+1+\":\"+(t.first_column+1)+\"-\"+(t.last_line+1+\":\"+(t.last_column+1)):\"No location data\"},e.baseFileName=function(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],r,i;return(i=n?/\\\\|\\//:/\\//,r=e.split(i),e=r[r.length-1],!(t&&0<=e.indexOf(\".\")))?e:(r=e.split(\".\"),r.pop(),\"coffee\"===r[r.length-1]&&1<r.length&&r.pop(),r.join(\".\"))},e.isCoffee=function(e){return/\\.((lit)?coffee|coffee\\.md)$/.test(e)},e.isLiterate=function(e){return/\\.(litcoffee|coffee\\.md)$/.test(e)},e.throwSyntaxError=function(e,t){var n;throw n=new SyntaxError(e),n.location=t,n.toString=a,n.stack=n.toString(),n},e.updateSyntaxError=function(e,t,n){return e.toString===a&&(e.code||(e.code=t),e.filename||(e.filename=n),e.stack=e.toString()),e},a=function(){var e,t,n,r,i,s,o,a,f,l,c,h,p,d;if(!this.code||!this.location)return Error.prototype.toString.call(this);var v=this.location;return o=v.first_line,s=v.first_column,f=v.last_line,a=v.last_column,null==f&&(f=o),null==a&&(a=s),i=this.filename||\"[stdin]\",e=this.code.split(\"\\n\")[o],d=s,r=o===f?a+1:e.length,l=e.slice(0,d).replace(/[^\\s]/g,\" \")+u(\"^\",r-d),\"undefined\"!=typeof process&&null!==process&&(n=(null==(c=process.stdout)?void 0:c.isTTY)&&(null==(h=process.env)||!h.NODE_DISABLE_COLORS)),(null==(p=this.colorful)?n:p)&&(t=function(e){return\"\u001b[1;31m\"+e+\"\u001b[0m\"},e=e.slice(0,d)+t(e.slice(d,r))+e.slice(r),l=t(l)),i+\":\"+(o+1)+\":\"+(s+1)+\": error: \"+this.message+\"\\n\"+e+\"\\n\"+l},e.nameWhitespaceCharacter=function(e){return\" \"===e?\"space\":\"\\n\"===e?\"newline\":\"\\r\"===e?\"carriage return\":\"\t\"===e?\"tab\":e}}.call(this),{exports:e}.exports}(),require[\"./rewriter\"]=function(){var e={};return function(){var t=[].indexOf,n=require(\"./helpers\"),r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N;for(N=n.throwSyntaxError,x=function(e,t){var n,r,i,s,o;if(e.comments){if(t.comments&&0!==t.comments.length){for(o=[],s=e.comments,r=0,i=s.length;r<i;r++)n=s[r],n.unshift?o.push(n):t.comments.push(n);t.comments=o.concat(t.comments)}else t.comments=e.comments;return delete e.comments}},b=function(e,t,n,r){var i;return i=[e,t],i.generated=!0,n&&(i.origin=n),r&&x(r,i),i},e.Rewriter=m=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"rewrite\",value:function(t){var n,r,i;return this.tokens=t,(\"undefined\"!=typeof process&&null!==process?null==(n=process.env)?void 0:n.DEBUG_TOKEN_STREAM:void 0)&&(process.env.DEBUG_REWRITTEN_TOKEN_STREAM&&console.log(\"Initial token stream:\"),console.log(function(){var e,t,n,r;for(n=this.tokens,r=[],e=0,t=n.length;e<t;e++)i=n[e],r.push(i[0]+\"/\"+i[1]+(i.comments?\"*\":\"\"));return r}.call(this).join(\" \"))),this.removeLeadingNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.normalizeLines(),this.tagPostfixConditionals(),this.addImplicitBracesAndParens(),this.addParensToChainedDoIife(),this.rescueStowawayComments(),this.addLocationDataToGeneratedTokens(),this.enforceValidCSXAttributes(),this.fixOutdentLocationData(),(\"undefined\"!=typeof process&&null!==process?null==(r=process.env)?void 0:r.DEBUG_REWRITTEN_TOKEN_STREAM:void 0)&&(process.env.DEBUG_TOKEN_STREAM&&console.log(\"Rewritten token stream:\"),console.log(function(){var e,t,n,r;for(n=this.tokens,r=[],e=0,t=n.length;e<t;e++)i=n[e],r.push(i[0]+\"/\"+i[1]+(i.comments?\"*\":\"\"));return r}.call(this).join(\" \"))),this.tokens}},{key:\"scanTokens\",value:function(t){var n,r,i;for(i=this.tokens,n=0;r=i[n];)n+=t.call(this,r,n,i);return!0}},{key:\"detectEnd\",value:function(n,r,i){var s=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{},o,u,l,c,h;for(h=this.tokens,o=0;c=h[n];){if(0===o&&r.call(this,c,n))return i.call(this,c,n);if((u=c[0],0<=t.call(f,u))?o+=1:(l=c[0],0<=t.call(a,l))&&(o-=1),0>o)return s.returnOnNegativeLevel?void 0:i.call(this,c,n);n+=1}return n-1}},{key:\"removeLeadingNewlines\",value:function(){var t,n,r,i,s,o,u,a,f;for(u=this.tokens,t=n=0,s=u.length;n<s;t=++n){var l=_slicedToArray(u[t],1);if(f=l[0],\"TERMINATOR\"!==f)break}if(0!==t){for(a=this.tokens.slice(0,t),r=0,o=a.length;r<o;r++)i=a[r],x(i,this.tokens[t]);return this.tokens.splice(0,t)}}},{key:\"closeOpenCalls\",value:function(){var t,n;return n=function(e){var t;return\")\"===(t=e[0])||\"CALL_END\"===t},t=function(e){return e[0]=\"CALL_END\"},this.scanTokens(function(e,r){return\"CALL_START\"===e[0]&&this.detectEnd(r+1,n,t),1})}},{key:\"closeOpenIndexes\",value:function(){var t,n;return n=function(e){var t;return\"]\"===(t=e[0])||\"INDEX_END\"===t},t=function(e){return e[0]=\"INDEX_END\"},this.scanTokens(function(e,r){return\"INDEX_START\"===e[0]&&this.detectEnd(r+1,n,t),1})}},{key:\"indexOfTag\",value:function(n){var r,i,s,o,u;r=0;for(var a=arguments.length,f=Array(1<a?a-1:0),l=1;l<a;l++)f[l-1]=arguments[l];for(i=s=0,o=f.length;0<=o?0<=s&&s<o:0>=s&&s>o;i=0<=o?++s:--s)if(null!=f[i]&&(\"string\"==typeof f[i]&&(f[i]=[f[i]]),u=this.tag(n+i+r),0>t.call(f[i],u)))return-1;return n+i+r-1}},{key:\"looksObjectish\",value:function(n){var r,i;return-1!==this.indexOfTag(n,\"@\",null,\":\")||-1!==this.indexOfTag(n,null,\":\")||(i=this.indexOfTag(n,f),-1!==i&&(r=null,this.detectEnd(i+1,function(e){var n;return n=e[0],0<=t.call(a,n)},function(e,t){return r=t}),\":\"===this.tag(r+1)))}},{key:\"findTagsBackwards\",value:function(n,r){var i,s,o,u,l,c,h;for(i=[];0<=n&&(i.length||(u=this.tag(n),0>t.call(r,u))&&((l=this.tag(n),0>t.call(f,l))||this.tokens[n].generated)&&(c=this.tag(n),0>t.call(v,c)));)(s=this.tag(n),0<=t.call(a,s))&&i.push(this.tag(n)),(o=this.tag(n),0<=t.call(f,o))&&i.length&&i.pop(),n-=1;return h=this.tag(n),0<=t.call(r,h)}},{key:\"addImplicitBracesAndParens\",value:function(){var n,r;return n=[],r=null,this.scanTokens(function(e,o,u){var d=this,m=_slicedToArray(e,1),g,y,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q;Q=m[0];var G=B=0<o?u[o-1]:[],Y=_slicedToArray(G,1);H=Y[0];var Z=D=o<u.length-1?u[o+1]:[],et=_slicedToArray(Z,1);if(_=et[0],X=function(){return n[n.length-1]},V=o,w=function(e){return o-V+e},k=function(e){var t;return null==e||null==(t=e[2])?void 0:t.ours},A=function(e){return k(e)&&\"{\"===(null==e?void 0:e[0])},L=function(e){return k(e)&&\"(\"===(null==e?void 0:e[0])},x=function(){return k(X())},T=function(){return L(X())},C=function(){return A(X())},N=function(){var e;return x()&&\"CONTROL\"===(null==(e=X())?void 0:e[0])},$=function(t){return n.push([\"(\",t,{ours:!0}]),u.splice(t,0,b(\"CALL_START\",\"(\",[\"\",\"implicit function call\",e[2]],B))},g=function(){return n.pop(),u.splice(o,0,b(\"CALL_END\",\")\",[\"\",\"end of input\",e[2]],B)),o+=1},J=function(t){var r=!(1<arguments.length&&void 0!==arguments[1])||arguments[1],i;return n.push([\"{\",t,{sameLine:!0,startsLine:r,ours:!0}]),i=new String(\"{\"),i.generated=!0,u.splice(t,0,b(\"{\",i,e,B))},y=function(t){return t=null==t?o:t,n.pop(),u.splice(t,0,b(\"}\",\"}\",e,B)),o+=1},E=function(e){var t;return t=null,d.detectEnd(e,function(e){return\"TERMINATOR\"===e[0]},function(e,n){return t=n},{returnOnNegativeLevel:!0}),null!=t&&d.looksObjectish(t+1)},(T()||C())&&0<=t.call(s,Q)||C()&&\":\"===H&&\"FOR\"===Q)return n.push([\"CONTROL\",o,{ours:!0}]),w(1);if(\"INDENT\"===Q&&x()){if(\"=>\"!==H&&\"->\"!==H&&\"[\"!==H&&\"(\"!==H&&\",\"!==H&&\"{\"!==H&&\"ELSE\"!==H&&\"=\"!==H)for(;T()||C()&&\":\"!==H;)T()?g():y();return N()&&n.pop(),n.push([Q,o]),w(1)}if(0<=t.call(f,Q))return n.push([Q,o]),w(1);if(0<=t.call(a,Q)){for(;x();)T()?g():C()?y():n.pop();r=n.pop()}if(S=function(){var n,r,i,s;return(i=d.findTagsBackwards(o,[\"FOR\"])&&d.findTagsBackwards(o,[\"FORIN\",\"FOROF\",\"FORFROM\"]),n=i||d.findTagsBackwards(o,[\"WHILE\",\"UNTIL\",\"LOOP\",\"LEADING_WHEN\"]),!!n)&&(r=!1,s=e[2].first_line,d.detectEnd(o,function(e){var n;return n=e[0],0<=t.call(v,n)},function(e,t){var n=u[t-1]||[],i=_slicedToArray(n,3),o;return H=i[0],o=i[2].first_line,r=s===o&&(\"->\"===H||\"=>\"===H)},{returnOnNegativeLevel:!0}),r)},(0<=t.call(h,Q)&&e.spaced||\"?\"===Q&&0<o&&!u[o-1].spaced)&&(0<=t.call(l,_)||\"...\"===_&&(j=this.tag(o+2),0<=t.call(l,j))&&!this.findTagsBackwards(o,[\"INDEX_START\",\"[\"])||0<=t.call(p,_)&&!D.spaced&&!D.newLine)&&!S())return\"?\"===Q&&(Q=e[0]=\"FUNC_EXIST\"),$(o+1),w(2);if(0<=t.call(h,Q)&&-1<this.indexOfTag(o+1,\"INDENT\")&&this.looksObjectish(o+2)&&!this.findTagsBackwards(o,[\"CLASS\",\"EXTENDS\",\"IF\",\"CATCH\",\"SWITCH\",\"LEADING_WHEN\",\"FOR\",\"WHILE\",\"UNTIL\"]))return $(o+1),n.push([\"INDENT\",o+2]),w(3);if(\":\"===Q){if(q=function(){var e;switch(!1){case e=this.tag(o-1),0>t.call(a,e):return r[1];case\"@\"!==this.tag(o-2):return o-2;default:return o-1}}.call(this),K=0>=q||(F=this.tag(q-1),0<=t.call(v,F))||u[q-1].newLine,X()){var tt=X(),nt=_slicedToArray(tt,2);if(W=nt[0],U=nt[1],(\"{\"===W||\"INDENT\"===W&&\"{\"===this.tag(U-1))&&(K||\",\"===this.tag(q-1)||\"{\"===this.tag(q-1)))return w(1)}return J(q,!!K),w(2)}if(0<=t.call(v,Q))for(O=n.length-1;0<=O&&(z=n[O],!!k(z));O+=-1)A(z)&&(z[2].sameLine=!1);if(M=\"OUTDENT\"===H||B.newLine,0<=t.call(c,Q)||0<=t.call(i,Q)&&M||(\"..\"===Q||\"...\"===Q)&&this.findTagsBackwards(o,[\"INDEX_START\"]))for(;x();){var rt=X(),it=_slicedToArray(rt,3);W=it[0],U=it[1];var st=it[2];if(R=st.sameLine,K=st.startsLine,T()&&\",\"!==H||\",\"===H&&\"TERMINATOR\"===Q&&null==_)g();else if(C()&&R&&\"TERMINATOR\"!==Q&&\":\"!==H&&(\"POST_IF\"!==Q&&\"FOR\"!==Q&&\"WHILE\"!==Q&&\"UNTIL\"!==Q||!K||!E(o+1)))y();else{if(!C()||\"TERMINATOR\"!==Q||\",\"===H||!!K&&!!this.looksObjectish(o+1))break;y()}}if(\",\"===Q&&!this.looksObjectish(o+1)&&C()&&\"FOROF\"!==(I=this.tag(o+2))&&\"FORIN\"!==I&&(\"TERMINATOR\"!==_||!this.looksObjectish(o+2)))for(P=\"OUTDENT\"===_?1:0;C();)y(o+P);return w(1)})}},{key:\"enforceValidCSXAttributes\",value:function(){return this.scanTokens(function(e,t,n){var r,i;return e.csxColon&&(r=n[t+1],\"STRING_START\"!==(i=r[0])&&\"STRING\"!==i&&\"(\"!==i&&N(\"expected wrapped or quoted JSX attribute\",r[2])),1})}},{key:\"rescueStowawayComments\",value:function(){var n,r,i;return n=function(e,t,n,r){return\"TERMINATOR\"!==n[t][0]&&n[r](b(\"TERMINATOR\",\"\\n\",n[t])),n[r](b(\"JS\",\"\",n[t],e))},i=function(e,r,i){var s,u,a,f,l,c,h;for(u=r;u!==i.length&&(l=i[u][0],0<=t.call(o,l));)u++;if(u===i.length||(c=i[u][0],0<=t.call(o,c)))return u=i.length-1,n(e,u,i,\"push\"),1;for(h=e.comments,a=0,f=h.length;a<f;a++)s=h[a],s.unshift=!0;return x(e,i[u]),1},r=function(e,r,i){var s,u,a;for(s=r;-1!==s&&(u=i[s][0],0<=t.call(o,u));)s--;return-1===s||(a=i[s][0],0<=t.call(o,a))?(n(e,0,i,\"unshift\"),3):(x(e,i[s]),1)},this.scanTokens(function(e,n,s){var u,a,f,l,c;if(!e.comments)return 1;if(c=1,f=e[0],0<=t.call(o,f)){for(u={comments:[]},a=e.comments.length-1;-1!==a;)!1===e.comments[a].newLine&&!1===e.comments[a].here&&(u.comments.unshift(e.comments[a]),e.comments.splice(a,1)),a--;0!==u.comments.length&&(c=r(u,n-1,s)),0!==e.comments.length&&i(e,n,s)}else{for(u={comments:[]},a=e.comments.length-1;-1!==a;)!e.comments[a].newLine||e.comments[a].unshift||\"JS\"===e[0]&&e.generated||(u.comments.unshift(e.comments[a]),e.comments.splice(a,1)),a--;0!==u.comments.length&&(c=i(u,n+1,s))}return 0===(null==(l=e.comments)?void 0:l.length)&&delete e.comments,c})}},{key:\"addLocationDataToGeneratedTokens\",value:function(){return this.scanTokens(function(e,t,n){var r,i,s,o,u,a;if(e[2])return 1;if(!e.generated&&!e.explicit)return 1;if(\"{\"===e[0]&&(s=null==(u=n[t+1])?void 0:u[2])){var f=s;i=f.first_line,r=f.first_column}else if(o=null==(a=n[t-1])?void 0:a[2]){var l=o;i=l.last_line,r=l.last_column}else i=r=0;return e[2]={first_line:i,first_column:r,last_line:i,last_column:r},1})}},{key:\"fixOutdentLocationData\",value:function(){return this.scanTokens(function(e,t,n){var r;return\"OUTDENT\"===e[0]||e.generated&&\"CALL_END\"===e[0]||e.generated&&\"}\"===e[0]?(r=n[t-1][2],e[2]={first_line:r.last_line,first_column:r.last_column,last_line:r.last_line,last_column:r.last_column},1):1})}},{key:\"addParensToChainedDoIife\",value:function(){var n,r,s;return r=function(e,t){return\"OUTDENT\"===this.tag(t-1)},n=function(e,n){var r;if(r=e[0],!(0>t.call(i,r)))return this.tokens.splice(s,0,b(\"(\",\"(\",this.tokens[s])),this.tokens.splice(n+1,0,b(\")\",\")\",this.tokens[n]))},s=null,this.scanTokens(function(e,t){var i,o;return\"do\"===e[1]?(s=t,i=t+1,\"PARAM_START\"===this.tag(t+1)&&(i=null,this.detectEnd(t+1,function(e,t){return\"PARAM_END\"===this.tag(t-1)},function(e,t){return i=t})),null==i||\"->\"!==(o=this.tag(i))&&\"=>\"!==o||\"INDENT\"!==this.tag(i+1))?1:(this.detectEnd(i+1,r,n),2):1})}},{key:\"normalizeLines\",value:function(){var n=this,r,s,o,a,f,l,c,h,p;return p=f=h=null,c=null,l=null,a=[],o=function(e,n){var r,s,o,a;return\";\"!==e[1]&&(r=e[0],0<=t.call(g,r))&&!(\"TERMINATOR\"===e[0]&&(s=this.tag(n+1),0<=t.call(u,s)))&&(\"ELSE\"!==e[0]||\"THEN\"===p&&!l&&!c)&&(\"CATCH\"!==(o=e[0])&&\"FINALLY\"!==o||\"->\"!==p&&\"=>\"!==p)||(a=e[0],0<=t.call(i,a))&&(this.tokens[n-1].newLine||\"OUTDENT\"===this.tokens[n-1][0])},r=function(e,t){return\"ELSE\"===e[0]&&\"THEN\"===p&&a.pop(),this.tokens.splice(\",\"===this.tag(t-1)?t-1:t,0,h)},s=function(e,t){var r,i,s;if(s=a.length,0<s){r=a.pop();var o=n.indentation(e[r]),u=_slicedToArray(o,2);return i=u[1],i[1]=2*s,e.splice(t,0,i),i[1]=2,e.splice(t+1,0,i),n.detectEnd(t+2,function(e){var t;return\"OUTDENT\"===(t=e[0])||\"TERMINATOR\"===t},function(t,n){if(\"OUTDENT\"===this.tag(n)&&\"OUTDENT\"===this.tag(n+1))return e.splice(n,2)}),t+2}return t},this.scanTokens(function(e,n,i){var d=_slicedToArray(e,1),v,m,g,b,w,E;if(E=d[0],v=(\"->\"===E||\"=>\"===E)&&this.findTagsBackwards(n,[\"IF\",\"WHILE\",\"FOR\",\"UNTIL\",\"SWITCH\",\"WHEN\",\"LEADING_WHEN\",\"[\",\"INDEX_START\"])&&!this.findTagsBackwards(n,[\"THEN\",\"..\",\"...\"]),\"TERMINATOR\"===E){if(\"ELSE\"===this.tag(n+1)&&\"OUTDENT\"!==this.tag(n-1))return i.splice.apply(i,[n,1].concat(_toConsumableArray(this.indentation()))),1;if(b=this.tag(n+1),0<=t.call(u,b))return i.splice(n,1),0}if(\"CATCH\"===E)for(m=g=1;2>=g;m=++g)if(\"OUTDENT\"===(w=this.tag(n+m))||\"TERMINATOR\"===w||\"FINALLY\"===w)return i.splice.apply(i,[n+m,0].concat(_toConsumableArray(this.indentation()))),2+m;if(\"->\"!==E&&\"=>\"!==E||!(\",\"===this.tag(n+1)||\".\"===this.tag(n+1)&&e.newLine)){if(0<=t.call(y,E)&&\"INDENT\"!==this.tag(n+1)&&(\"ELSE\"!==E||\"IF\"!==this.tag(n+1))&&!v){p=E;var T=this.indentation(i[n]),N=_slicedToArray(T,2);return f=N[0],h=N[1],\"THEN\"===p&&(f.fromThen=!0),\"THEN\"===E&&(c=this.findTagsBackwards(n,[\"LEADING_WHEN\"])&&\"IF\"===this.tag(n+1),l=this.findTagsBackwards(n,[\"IF\"])&&\"IF\"===this.tag(n+1)),\"THEN\"===E&&this.findTagsBackwards(n,[\"IF\"])&&a.push(n),\"ELSE\"===E&&\"OUTDENT\"!==this.tag(n-1)&&(n=s(i,n)),i.splice(n+1,0,f),this.detectEnd(n+2,o,r),\"THEN\"===E&&i.splice(n,1),1}return 1}var S=this.indentation(i[n]),x=_slicedToArray(S,2);return f=x[0],h=x[1],i.splice(n+1,0,f,h),1})}},{key:\"tagPostfixConditionals\",value:function(){var n,r,i;return i=null,r=function(e,n){var r=_slicedToArray(e,1),i,s;s=r[0];var o=_slicedToArray(this.tokens[n-1],1);return i=o[0],\"TERMINATOR\"===s||\"INDENT\"===s&&0>t.call(y,i)},n=function(e){if(\"INDENT\"!==e[0]||e.generated&&!e.fromThen)return i[0]=\"POST_\"+i[0]},this.scanTokens(function(e,t){return\"IF\"===e[0]?(i=e,this.detectEnd(t+1,r,n),1):1})}},{key:\"indentation\",value:function(t){var n,r;return n=[\"INDENT\",2],r=[\"OUTDENT\",2],t?(n.generated=r.generated=!0,n.origin=r.origin=t):n.explicit=r.explicit=!0,[n,r]}},{key:\"tag\",value:function(t){var n;return null==(n=this.tokens[t])?void 0:n[0]}}]),e}();return e.prototype.generate=b,e}.call(this),r=[[\"(\",\")\"],[\"[\",\"]\"],[\"{\",\"}\"],[\"INDENT\",\"OUTDENT\"],[\"CALL_START\",\"CALL_END\"],[\"PARAM_START\",\"PARAM_END\"],[\"INDEX_START\",\"INDEX_END\"],[\"STRING_START\",\"STRING_END\"],[\"REGEX_START\",\"REGEX_END\"]],e.INVERSES=d={},f=[],a=[],w=0,S=r.length;w<S;w++){var C=_slicedToArray(r[w],2);E=C[0],T=C[1],f.push(d[T]=E),a.push(d[E]=T)}u=[\"CATCH\",\"THEN\",\"ELSE\",\"FINALLY\"].concat(a),h=[\"IDENTIFIER\",\"PROPERTY\",\"SUPER\",\")\",\"CALL_END\",\"]\",\"INDEX_END\",\"@\",\"THIS\"],l=[\"IDENTIFIER\",\"CSX_TAG\",\"PROPERTY\",\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_START\",\"REGEX\",\"REGEX_START\",\"JS\",\"NEW\",\"PARAM_START\",\"CLASS\",\"IF\",\"TRY\",\"SWITCH\",\"THIS\",\"UNDEFINED\",\"NULL\",\"BOOL\",\"UNARY\",\"YIELD\",\"AWAIT\",\"UNARY_MATH\",\"SUPER\",\"THROW\",\"@\",\"->\",\"=>\",\"[\",\"(\",\"{\",\"--\",\"++\"],p=[\"+\",\"-\"],c=[\"POST_IF\",\"FOR\",\"WHILE\",\"UNTIL\",\"WHEN\",\"BY\",\"LOOP\",\"TERMINATOR\"],y=[\"ELSE\",\"->\",\"=>\",\"TRY\",\"FINALLY\",\"THEN\"],g=[\"TERMINATOR\",\"CATCH\",\"FINALLY\",\"ELSE\",\"OUTDENT\",\"LEADING_WHEN\"],v=[\"TERMINATOR\",\"INDENT\",\"OUTDENT\"],i=[\".\",\"?.\",\"::\",\"?::\"],s=[\"IF\",\"TRY\",\"FINALLY\",\"CATCH\",\"CLASS\",\"SWITCH\"],o=[\"(\",\")\",\"[\",\"]\",\"{\",\"}\",\".\",\"..\",\"...\",\",\",\"=\",\"++\",\"--\",\"?\",\"AS\",\"AWAIT\",\"CALL_START\",\"CALL_END\",\"DEFAULT\",\"ELSE\",\"EXTENDS\",\"EXPORT\",\"FORIN\",\"FOROF\",\"FORFROM\",\"IMPORT\",\"INDENT\",\"INDEX_SOAK\",\"LEADING_WHEN\",\"OUTDENT\",\"PARAM_END\",\"REGEX_START\",\"REGEX_END\",\"RETURN\",\"STRING_END\",\"THROW\",\"UNARY\",\"YIELD\"].concat(p.concat(c.concat(i.concat(s))))}.call(this),{exports:e}.exports}(),require[\"./lexer\"]=function(){var e={};return function(){var t=[].indexOf,n=[].slice,r=require(\"./rewriter\"),i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q,G,Y,Z,et,tt,nt,rt,it,st,ot,ut,at,ft,lt,ct,ht,pt,dt,vt,mt,gt,yt,bt,wt,Et,St,xt;K=r.Rewriter,O=r.INVERSES;var Tt=require(\"./helpers\");dt=Tt.count,St=Tt.starts,pt=Tt.compact,Et=Tt.repeat,vt=Tt.invertLiterate,wt=Tt.merge,ht=Tt.attachCommentsToNode,bt=Tt.locationDataToString,xt=Tt.throwSyntaxError,e.Lexer=B=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"tokenize\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r,i,s,o;for(this.literate=n.literate,this.indent=0,this.baseIndent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.indentLiteral=\"\",this.ends=[],this.tokens=[],this.seenFor=!1,this.seenImport=!1,this.seenExport=!1,this.importSpecifierList=!1,this.exportSpecifierList=!1,this.csxDepth=0,this.csxObjAttribute={},this.chunkLine=n.line||0,this.chunkColumn=n.column||0,t=this.clean(t),s=0;this.chunk=t.slice(s);){r=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.stringToken()||this.numberToken()||this.csxToken()||this.regexToken()||this.jsToken()||this.literalToken();var u=this.getLineAndColumnFromChunk(r),a=_slicedToArray(u,2);if(this.chunkLine=a[0],this.chunkColumn=a[1],s+=r,n.untilBalanced&&0===this.ends.length)return{tokens:this.tokens,index:s}}return this.closeIndentation(),(i=this.ends.pop())&&this.error(\"missing \"+i.tag,(null==(o=i.origin)?i:o)[2]),!1===n.rewrite?this.tokens:(new K).rewrite(this.tokens)}},{key:\"clean\",value:function(t){return t.charCodeAt(0)===i&&(t=t.slice(1)),t=t.replace(/\\r/g,\"\").replace(st,\"\"),ct.test(t)&&(t=\"\\n\"+t,this.chunkLine--),this.literate&&(t=vt(t)),t}},{key:\"identifierToken\",value:function(){var n,r,i,s,u,c,h,p,d,m,g,y,b,w,E,S,x,T,N,k,L,A,O,M,D,H,B,j;if(h=this.atCSXTag(),D=h?v:C,!(d=D.exec(this.chunk)))return 0;var F=d,I=_slicedToArray(F,3);if(p=I[0],u=I[1],r=I[2],c=u.length,m=void 0,\"own\"===u&&\"FOR\"===this.tag())return this.token(\"OWN\",u),u.length;if(\"from\"===u&&\"YIELD\"===this.tag())return this.token(\"FROM\",u),u.length;if(\"as\"===u&&this.seenImport){if(\"*\"===this.value())this.tokens[this.tokens.length-1][0]=\"IMPORT_ALL\";else if(b=this.value(!0),0<=t.call(l,b)){g=this.prev();var q=[\"IDENTIFIER\",this.value(!0)];g[0]=q[0],g[1]=q[1]}if(\"DEFAULT\"===(w=this.tag())||\"IMPORT_ALL\"===w||\"IDENTIFIER\"===w)return this.token(\"AS\",u),u.length}if(\"as\"===u&&this.seenExport){if(\"IDENTIFIER\"===(S=this.tag())||\"DEFAULT\"===S)return this.token(\"AS\",u),u.length;if(x=this.value(!0),0<=t.call(l,x)){g=this.prev();var R=[\"IDENTIFIER\",this.value(!0)];return g[0]=R[0],g[1]=R[1],this.token(\"AS\",u),u.length}}if(\"default\"!==u||!this.seenExport||\"EXPORT\"!==(T=this.tag())&&\"AS\"!==T){if(\"do\"===u&&(M=/^(\\s*super)(?!\\(\\))/.exec(this.chunk.slice(3)))){this.token(\"SUPER\",\"super\"),this.token(\"CALL_START\",\"(\"),this.token(\"CALL_END\",\")\");var U=M,z=_slicedToArray(U,2);return p=z[0],H=z[1],H.length+3}if(g=this.prev(),B=r||null!=g&&(\".\"===(N=g[0])||\"?.\"===N||\"::\"===N||\"?::\"===N||!g.spaced&&\"@\"===g[0])?\"PROPERTY\":\"IDENTIFIER\",\"IDENTIFIER\"===B&&(0<=t.call(_,u)||0<=t.call(l,u))&&!(this.exportSpecifierList&&0<=t.call(l,u))?(B=u.toUpperCase(),\"WHEN\"===B&&(k=this.tag(),0<=t.call(P,k))?B=\"LEADING_WHEN\":\"FOR\"===B?this.seenFor=!0:\"UNLESS\"===B?B=\"IF\":\"IMPORT\"===B?this.seenImport=!0:\"EXPORT\"===B?this.seenExport=!0:0<=t.call(ot,B)?B=\"UNARY\":0<=t.call($,B)&&(\"INSTANCEOF\"!==B&&this.seenFor?(B=\"FOR\"+B,this.seenFor=!1):(B=\"RELATION\",\"!\"===this.value()&&(m=this.tokens.pop(),u=\"!\"+u)))):\"IDENTIFIER\"===B&&this.seenFor&&\"from\"===u&&mt(g)?(B=\"FORFROM\",this.seenFor=!1):\"PROPERTY\"===B&&g&&(g.spaced&&(L=g[0],0<=t.call(o,L))&&/^[gs]et$/.test(g[1])&&1<this.tokens.length&&\".\"!==(A=this.tokens[this.tokens.length-2][0])&&\"?.\"!==A&&\"@\"!==A?this.error(\"'\"+g[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",g[2]):2<this.tokens.length&&(y=this.tokens[this.tokens.length-2],(\"@\"===(O=g[0])||\"THIS\"===O)&&y&&y.spaced&&/^[gs]et$/.test(y[1])&&\".\"!==(E=this.tokens[this.tokens.length-3][0])&&\"?.\"!==E&&\"@\"!==E&&this.error(\"'\"+y[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",y[2]))),\"IDENTIFIER\"===B&&0<=t.call(J,u)&&this.error(\"reserved word '\"+u+\"'\",{length:u.length}),\"PROPERTY\"===B||this.exportSpecifierList||(0<=t.call(a,u)&&(n=u,u=f[u]),B=function(){return\"!\"===u?\"UNARY\":\"==\"===u||\"!=\"===u?\"COMPARE\":\"true\"===u||\"false\"===u?\"BOOL\":\"break\"===u||\"continue\"===u||\"debugger\"===u?\"STATEMENT\":\"&&\"===u||\"||\"===u?u:B}()),j=this.token(B,u,0,c),n&&(j.origin=[B,n,j[2]]),m){var W=[m[2].first_line,m[2].first_column];j[2].first_line=W[0],j[2].first_column=W[1]}return r&&(i=p.lastIndexOf(h?\"=\":\":\"),s=this.token(\":\",\":\",i,r.length),h&&(s.csxColon=!0)),h&&\"IDENTIFIER\"===B&&\":\"!==g[0]&&this.token(\",\",\",\",0,0,j),p.length}return this.token(\"DEFAULT\",u),u.length}},{key:\"numberToken\",value:function(){var t,n,r,i,s,o;if(!(r=q.exec(this.chunk)))return 0;switch(i=r[0],n=i.length,!1){case!/^0[BOX]/.test(i):this.error(\"radix prefix in '\"+i+\"' must be lowercase\",{offset:1});break;case!/^(?!0x).*E/.test(i):this.error(\"exponential notation in '\"+i+\"' must be indicated with a lowercase 'e'\",{offset:i.indexOf(\"E\")});break;case!/^0\\d*[89]/.test(i):this.error(\"decimal literal '\"+i+\"' must not be prefixed with '0'\",{length:n});break;case!/^0\\d+/.test(i):this.error(\"octal literal '\"+i+\"' must be prefixed with '0o'\",{length:n})}return t=function(){switch(i.charAt(1)){case\"b\":return 2;case\"o\":return 8;case\"x\":return 16;default:return null}}(),s=null==t?parseFloat(i):parseInt(i.slice(2),t),o=Infinity===s?\"INFINITY\":\"NUMBER\",this.token(o,i,0,n),n}},{key:\"stringToken\",value:function(){var t=this,n=rt.exec(this.chunk)||[],r=_slicedToArray(n,1),i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b;if(v=r[0],!v)return 0;d=this.prev(),d&&\"from\"===this.value()&&(this.seenImport||this.seenExport)&&(d[0]=\"FROM\"),g=function(){return\"'\"===v?nt:'\"'===v?Z:\"'''\"===v?S:'\"\"\"'===v?w:void 0}(),f=3===v.length;var x=this.matchWithInterpolations(g,v);if(b=x.tokens,a=x.index,i=b.length-1,o=v.charAt(0),f){for(c=null,u=function(){var e,t,n;for(n=[],l=e=0,t=b.length;e<t;l=++e)y=b[l],\"NEOSTRING\"===y[0]&&n.push(y[1]);return n}().join(\"#{}\");p=E.exec(u);)s=p[1],(null===c||0<(m=s.length)&&m<c.length)&&(c=s);c&&(h=RegExp(\"\\\\n\"+c,\"g\")),this.mergeInterpolationTokens(b,{delimiter:o},function(e,n){return e=t.formatString(e,{delimiter:v}),h&&(e=e.replace(h,\"\\n\")),0===n&&(e=e.replace(D,\"\")),n===i&&(e=e.replace(it,\"\")),e})}else this.mergeInterpolationTokens(b,{delimiter:o},function(e,n){return e=t.formatString(e,{delimiter:v}),e=e.replace(G,function(t,r){return 0===n&&0===r||n===i&&r+t.length===e.length?\"\":\" \"}),e});return this.atCSXTag()&&this.token(\",\",\",\",0,0,this.prev),a}},{key:\"commentToken\",value:function(){var n=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,r,i,s,o,u,a,f,l,h,p,d;if(!(f=n.match(c)))return 0;var v=f,m=_slicedToArray(v,2);return r=m[0],u=m[1],o=null,h=/^\\s*\\n+\\s*#/.test(r),u?(l=b.exec(r),l&&this.error(\"block comments cannot contain \"+l[0],{offset:l.index,length:l[0].length}),n=n.replace(\"###\"+u+\"###\",\"\"),n=n.replace(/^\\n+/,\"\"),this.lineToken(n),s=u,0<=t.call(s,\"\\n\")&&(s=s.replace(RegExp(\"\\\\n\"+Et(\" \",this.indent),\"g\"),\"\\n\")),o=[s]):(s=r.replace(/^(\\n*)/,\"\"),s=s.replace(/^([ |\\t]*)#/gm,\"\"),o=s.split(\"\\n\")),i=function(){var e,t,n;for(n=[],a=e=0,t=o.length;e<t;a=++e)s=o[a],n.push({content:s,here:null!=u,newLine:h||0!==a});return n}(),d=this.prev(),d?ht(i,d):(i[0].newLine=!0,this.lineToken(this.chunk.slice(r.length)),p=this.makeToken(\"JS\",\"\"),p.generated=!0,p.comments=i,this.tokens.push(p),this.newlineToken(0)),r.length}},{key:\"jsToken\",value:function(){var t,n;return\"`\"===this.chunk.charAt(0)&&(t=N.exec(this.chunk)||M.exec(this.chunk))?(n=t[1].replace(/\\\\+(`|$)/g,function(e){return e.slice(-Math.ceil(e.length/2))}),this.token(\"JS\",n,0,t[0].length),t[0].length):0}},{key:\"regexToken\",value:function(){var n=this,r,i,s,u,a,f,l,c,h,p,d,v,m,g,y,b;switch(!1){case!(p=X.exec(this.chunk)):this.error(\"regular expressions cannot begin with \"+p[2],{offset:p.index+p[1].length});break;case!(p=this.matchWithInterpolations(x,\"///\")):var w=p;if(b=w.tokens,l=w.index,u=this.chunk.slice(0,l).match(/\\s+(#(?!{).*)/g),u)for(c=0,h=u.length;c<h;c++)s=u[c],this.commentToken(s);break;case!(p=z.exec(this.chunk)):var E=p,S=_slicedToArray(E,3);if(y=S[0],r=S[1],i=S[2],this.validateEscapes(r,{isRegex:!0,offsetInChunk:1}),l=y.length,v=this.prev(),v)if(v.spaced&&(m=v[0],0<=t.call(o,m))){if(!i||U.test(y))return 0}else if(g=v[0],0<=t.call(I,g))return 0;i||this.error(\"missing / (unclosed regex)\");break;default:return 0}var T=W.exec(this.chunk.slice(l)),N=_slicedToArray(T,1);switch(f=N[0],a=l+f.length,d=this.makeToken(\"REGEX\",null,0,a),!1){case!!lt.test(f):this.error(\"invalid regular expression flags \"+f,{offset:l,length:f.length});break;case!y&&1!==b.length:r=r?this.formatRegex(r,{flags:f,delimiter:\"/\"}):this.formatHeregex(b[0][1],{flags:f}),this.token(\"REGEX\",\"\"+this.makeDelimitedLiteral(r,{delimiter:\"/\"})+f,0,a,d);break;default:this.token(\"REGEX_START\",\"(\",0,0,d),this.token(\"IDENTIFIER\",\"RegExp\",0,0),this.token(\"CALL_START\",\"(\",0,0),this.mergeInterpolationTokens(b,{delimiter:'\"',\"double\":!0},function(e){return n.formatHeregex(e,{flags:f})}),f&&(this.token(\",\",\",\",l-1,0),this.token(\"STRING\",'\"'+f+'\"',l-1,f.length)),this.token(\")\",\")\",a-1,0),this.token(\"REGEX_END\",\")\",a-1,0)}return a}},{key:\"lineToken\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,n,r,i,s,o,u,a,f,l;if(!(s=F.exec(t)))return 0;if(i=s[0],f=this.prev(),n=null!=f&&\"\\\\\"===f[0],n&&this.seenFor||(this.seenFor=!1),this.importSpecifierList||(this.seenImport=!1),this.exportSpecifierList||(this.seenExport=!1),l=i.length-1-i.lastIndexOf(\"\\n\"),a=this.unfinished(),u=0<l?i.slice(-l):\"\",!/^(.?)\\1*$/.exec(u))return this.error(\"mixed indentation\",{offset:i.length}),i.length;if(o=Math.min(u.length,this.indentLiteral.length),u.slice(0,o)!==this.indentLiteral.slice(0,o))return this.error(\"indentation mismatch\",{offset:i.length}),i.length;if(l-this.indebt===this.indent)return a?this.suppressNewlines():this.newlineToken(0),i.length;if(l>this.indent){if(a)return this.indebt=l-this.indent,this.suppressNewlines(),i.length;if(!this.tokens.length)return this.baseIndent=this.indent=l,this.indentLiteral=u,i.length;r=l-this.indent+this.outdebt,this.token(\"INDENT\",r,i.length-l,l),this.indents.push(r),this.ends.push({tag:\"OUTDENT\"}),this.outdebt=this.indebt=0,this.indent=l,this.indentLiteral=u}else l<this.baseIndent?this.error(\"missing indentation\",{offset:i.length}):(this.indebt=0,this.outdentToken(this.indent-l,a,i.length));return i.length}},{key:\"outdentToken\",value:function(n,r,i){var s,o,u,a;for(s=this.indent-n;0<n;)u=this.indents[this.indents.length-1],u?this.outdebt&&n<=this.outdebt?(this.outdebt-=n,n=0):(o=this.indents.pop()+this.outdebt,i&&(a=this.chunk[i],0<=t.call(k,a))&&(s-=o-n,n=o),this.outdebt=0,this.pair(\"OUTDENT\"),this.token(\"OUTDENT\",n,0,i),n-=o):this.outdebt=n=0;return o&&(this.outdebt-=n),this.suppressSemicolons(),\"TERMINATOR\"===this.tag()||r||this.token(\"TERMINATOR\",\"\\n\",i,0),this.indent=s,this.indentLiteral=this.indentLiteral.slice(0,s),this}},{key:\"whitespaceToken\",value:function(){var t,n,r;return(t=ct.exec(this.chunk))||(n=\"\\n\"===this.chunk.charAt(0))?(r=this.prev(),r&&(r[t?\"spaced\":\"newLine\"]=!0),t?t[0].length:0):0}},{key:\"newlineToken\",value:function(t){return this.suppressSemicolons(),\"TERMINATOR\"!==this.tag()&&this.token(\"TERMINATOR\",\"\\n\",t,0),this}},{key:\"suppressNewlines\",value:function(){var t;return t=this.prev(),\"\\\\\"===t[1]&&(t.comments&&1<this.tokens.length&&ht(t.comments,this.tokens[this.tokens.length-2]),this.tokens.pop()),this}},{key:\"csxToken\",value:function(){var n=this,r,i,s,o,u,a,f,l,c,p,d,v,b,w;if(u=this.chunk[0],d=0<this.tokens.length?this.tokens[this.tokens.length-1][0]:\"\",\"<\"===u){if(l=g.exec(this.chunk.slice(1))||m.exec(this.chunk.slice(1)),!l||!(0<this.csxDepth||!(p=this.prev())||p.spaced||(v=p[0],0>t.call(h,v))))return 0;var E=l,S=_slicedToArray(E,3);return f=S[0],a=S[1],i=S[2],c=this.token(\"CSX_TAG\",a,1,a.length),this.token(\"CALL_START\",\"(\"),this.token(\"[\",\"[\"),this.ends.push({tag:\"/>\",origin:c,name:a}),this.csxDepth++,a.length+1}if(s=this.atCSXTag()){if(\"/>\"===this.chunk.slice(0,2))return this.pair(\"/>\"),this.token(\"]\",\"]\",0,2),this.token(\"CALL_END\",\")\",0,2),this.csxDepth--,2;if(\"{\"===u)return\":\"===d?(b=this.token(\"(\",\"(\"),this.csxObjAttribute[this.csxDepth]=!1):(b=this.token(\"{\",\"{\"),this.csxObjAttribute[this.csxDepth]=!0),this.ends.push({tag:\"}\",origin:b}),1;if(\">\"===u){this.pair(\"/>\"),c=this.token(\"]\",\"]\"),this.token(\",\",\",\");var x=this.matchWithInterpolations(A,\">\",\"</\",y);return w=x.tokens,o=x.index,this.mergeInterpolationTokens(w,{delimiter:'\"'},function(e){return n.formatString(e,{delimiter:\">\"})}),l=g.exec(this.chunk.slice(o))||m.exec(this.chunk.slice(o)),l&&l[1]===s.name||this.error(\"expected corresponding CSX closing tag for \"+s.name,s.origin[2]),r=o+s.name.length,\">\"!==this.chunk[r]&&this.error(\"missing closing > after tag name\",{offset:r,length:1}),this.token(\"CALL_END\",\")\",o,s.name.length+1),this.csxDepth--,r+1}return 0}return this.atCSXTag(1)?\"}\"===u?(this.pair(u),this.csxObjAttribute[this.csxDepth]?(this.token(\"}\",\"}\"),this.csxObjAttribute[this.csxDepth]=!1):this.token(\")\",\")\"),this.token(\",\",\",\"),1):0:0}},{key:\"atCSXTag\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,n,r,i;if(0===this.csxDepth)return!1;for(n=this.ends.length-1;\"OUTDENT\"===(null==(i=this.ends[n])?void 0:i.tag)||0<t--;)n--;return r=this.ends[n],\"/>\"===(null==r?void 0:r.tag)&&r}},{key:\"literalToken\",value:function(){var n,r,i,s,a,f,l,c,h,v,m,g,y;if(n=R.exec(this.chunk)){var b=n,w=_slicedToArray(b,1);y=w[0],u.test(y)&&this.tagParameters()}else y=this.chunk.charAt(0);if(m=y,s=this.prev(),s&&0<=t.call([\"=\"].concat(_toConsumableArray(d)),y)&&(v=!1,\"=\"!==y||\"||\"!==(a=s[1])&&\"&&\"!==a||s.spaced||(s[0]=\"COMPOUND_ASSIGN\",s[1]+=\"=\",s=this.tokens[this.tokens.length-2],v=!0),s&&\"PROPERTY\"!==s[0]&&(i=null==(f=s.origin)?s:f,r=gt(s[1],i[1]),r&&this.error(r,i[2])),v))return y.length;if(\"{\"===y&&this.seenImport?this.importSpecifierList=!0:this.importSpecifierList&&\"}\"===y?this.importSpecifierList=!1:\"{\"===y&&\"EXPORT\"===(null==s?void 0:s[0])?this.exportSpecifierList=!0:this.exportSpecifierList&&\"}\"===y&&(this.exportSpecifierList=!1),\";\"===y)(l=null==s?void 0:s[0],0<=t.call([\"=\"].concat(_toConsumableArray(at)),l))&&this.error(\"unexpected ;\"),this.seenFor=this.seenImport=this.seenExport=!1,m=\"TERMINATOR\";else if(\"*\"===y&&\"EXPORT\"===(null==s?void 0:s[0]))m=\"EXPORT_ALL\";else if(0<=t.call(j,y))m=\"MATH\";else if(0<=t.call(p,y))m=\"COMPARE\";else if(0<=t.call(d,y))m=\"COMPOUND_ASSIGN\";else if(0<=t.call(ot,y))m=\"UNARY\";else if(0<=t.call(ut,y))m=\"UNARY_MATH\";else if(0<=t.call(Q,y))m=\"SHIFT\";else if(\"?\"===y&&(null==s?void 0:s.spaced))m=\"BIN?\";else if(s)if(\"(\"===y&&!s.spaced&&(c=s[0],0<=t.call(o,c)))\"?\"===s[0]&&(s[0]=\"FUNC_EXIST\"),m=\"CALL_START\";else if(\"[\"===y&&((h=s[0],0<=t.call(L,h))&&!s.spaced||\"::\"===s[0]))switch(m=\"INDEX_START\",s[0]){case\"?\":s[0]=\"INDEX_SOAK\"}return g=this.makeToken(m,y),\"(\"===y||\"{\"===y||\"[\"===y?this.ends.push({tag:O[y],origin:g}):\")\"===y||\"}\"===y||\"]\"===y?this.pair(y):void 0,this.tokens.push(this.makeToken(m,y)),y.length}},{key:\"tagParameters\",value:function(){var t,n,r,i,s;if(\")\"!==this.tag())return this;for(r=[],s=this.tokens,t=s.length,n=s[--t],n[0]=\"PARAM_END\";i=s[--t];)switch(i[0]){case\")\":r.push(i);break;case\"(\":case\"CALL_START\":if(!r.length)return\"(\"===i[0]?(i[0]=\"PARAM_START\",this):(n[0]=\"CALL_END\",this);r.pop()}return this}},{key:\"closeIndentation\",value:function(){return this.outdentToken(this.indent)}},{key:\"matchWithInterpolations\",value:function(r,i,s,o){var u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L;if(null==s&&(s=i),null==o&&(o=/^#\\{/),L=[],S=i.length,this.chunk.slice(0,S)!==i)return null;for(C=this.chunk.slice(S);;){var A=r.exec(C),O=_slicedToArray(A,1);if(k=O[0],this.validateEscapes(k,{isRegex:\"/\"===i.charAt(0),offsetInChunk:S}),L.push(this.makeToken(\"NEOSTRING\",k,S)),C=C.slice(k.length),S+=k.length,!(w=o.exec(C)))break;var M=w,_=_slicedToArray(M,1);g=_[0],m=g.length-1;var D=this.getLineAndColumnFromChunk(S+m),P=_slicedToArray(D,2);b=P[0],p=P[1],N=C.slice(m);var H=(new e).tokenize(N,{line:b,column:p,untilBalanced:!0});if(E=H.tokens,v=H.index,v+=m,c=\"}\"===C[v-1],c){var B,j,F,I;B=E,j=_slicedToArray(B,1),x=j[0],B,F=n.call(E,-1),I=_slicedToArray(F,1),h=I[0],F,x[0]=x[1]=\"(\",h[0]=h[1]=\")\",h.origin=[\"\",\"end of interpolation\",h[2]]}\"TERMINATOR\"===(null==(T=E[1])?void 0:T[0])&&E.splice(1,1),c||(x=this.makeToken(\"(\",\"(\",S,0),h=this.makeToken(\")\",\")\",S+v,0),E=[x].concat(_toConsumableArray(E),[h])),L.push([\"TOKENS\",E]),C=C.slice(v),S+=v}return C.slice(0,s.length)!==s&&this.error(\"missing \"+s,{length:i.length}),u=L,a=_slicedToArray(u,1),d=a[0],u,f=n.call(L,-1),l=_slicedToArray(f,1),y=l[0],f,d[2].first_column-=i.length,\"\\n\"===y[1].substr(-1)?(y[2].last_line+=1,y[2].last_column=s.length-1):y[2].last_column+=s.length,0===y[1].length&&(y[2].last_column-=1),{tokens:L,index:S+s.length}}},{key:\"mergeInterpolationTokens\",value:function(t,r,i){var s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x;for(1<t.length&&(v=this.token(\"STRING_START\",\"(\",0,0)),u=this.tokens.length,a=f=0,h=t.length;f<h;a=++f){var T;w=t[a];var N=w,C=_slicedToArray(N,2);switch(b=C[0],x=C[1],b){case\"TOKENS\":if(2===x.length){if(!x[0].comments&&!x[1].comments)continue;for(m=0===this.csxDepth?this.makeToken(\"STRING\",\"''\"):this.makeToken(\"JS\",\"\"),m[2]=x[0][2],l=0,p=x.length;l<p;l++){var k;(S=x[l],!!S.comments)&&(null==m.comments&&(m.comments=[]),(k=m.comments).push.apply(k,_toConsumableArray(S.comments)))}x.splice(1,0,m)}d=x[0],E=x;break;case\"NEOSTRING\":if(s=i.call(this,w[1],a),0===s.length){if(0!==a)continue;o=this.tokens.length}2===a&&null!=o&&this.tokens.splice(o,2),w[0]=\"STRING\",w[1]=this.makeDelimitedLiteral(s,r),d=w,E=[w]}this.tokens.length>u&&(g=this.token(\"+\",\"+\"),g[2]={first_line:d[2].first_line,first_column:d[2].first_column,last_line:d[2].first_line,last_column:d[2].first_column}),(T=this.tokens).push.apply(T,_toConsumableArray(E))}if(v){var L=n.call(t,-1),A=_slicedToArray(L,1);return c=A[0],v.origin=[\"STRING\",null,{first_line:v[2].first_line,first_column:v[2].first_column,last_line:c[2].last_line,last_column:c[2].last_column}],v[2]=v.origin[2],y=this.token(\"STRING_END\",\")\"),y[2]={first_line:c[2].last_line,first_column:c[2].last_column,last_line:c[2].last_line,last_column:c[2].last_column}}}},{key:\"pair\",value:function(t){var r,i,s,o,u,a,f;if(u=this.ends,r=n.call(u,-1),i=_slicedToArray(r,1),o=i[0],r,t!==(f=null==o?void 0:o.tag)){var l,c;return\"OUTDENT\"!==f&&this.error(\"unmatched \"+t),a=this.indents,l=n.call(a,-1),c=_slicedToArray(l,1),s=c[0],l,this.outdentToken(s,!0),this.pair(t)}return this.ends.pop()}},{key:\"getLineAndColumnFromChunk\",value:function(t){var r,i,s,o,u;if(0===t)return[this.chunkLine,this.chunkColumn];if(u=t>=this.chunk.length?this.chunk:this.chunk.slice(0,+(t-1)+1||9e9),s=dt(u,\"\\n\"),r=this.chunkColumn,0<s){var a,f;o=u.split(\"\\n\"),a=n.call(o,-1),f=_slicedToArray(a,1),i=f[0],a,r=i.length}else r+=u.length;return[this.chunkLine+s,r]}},{key:\"makeToken\",value:function(t,n){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:n.length,s,o,u;o={};var a=this.getLineAndColumnFromChunk(r),f=_slicedToArray(a,2);o.first_line=f[0],o.first_column=f[1],s=0<i?i-1:0;var l=this.getLineAndColumnFromChunk(r+s),c=_slicedToArray(l,2);return o.last_line=c[0],o.last_column=c[1],u=[t,n,o],u}},{key:\"token\",value:function(e,t,n,r,i){var s;return s=this.makeToken(e,t,n,r),i&&(s.origin=i),this.tokens.push(s),s}},{key:\"tag\",value:function(){var t,r,i,s;return i=this.tokens,t=n.call(i,-1),r=_slicedToArray(t,1),s=r[0],t,null==s?void 0:s[0]}},{key:\"value\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0],r,i,s,o,u;return s=this.tokens,r=n.call(s,-1),i=_slicedToArray(r,1),u=i[0],r,t&&null!=(null==u?void 0:u.origin)?null==(o=u.origin)?void 0:o[1]:null==u?void 0:u[1]}},{key:\"prev\",value:function(){return this.tokens[this.tokens.length-1]}},{key:\"unfinished\",value:function(){var n;return H.test(this.chunk)||(n=this.tag(),0<=t.call(at,n))}},{key:\"formatString\",value:function(t,n){return this.replaceUnicodeCodePointEscapes(t.replace(tt,\"$1\"),n)}},{key:\"formatHeregex\",value:function(t,n){return this.formatRegex(t.replace(T,\"$1$2\"),wt(n,{delimiter:\"///\"}))}},{key:\"formatRegex\",value:function(t,n){return this.replaceUnicodeCodePointEscapes(t,n)}},{key:\"unicodeCodePointToUnicodeEscapes\",value:function(t){var n,r,i;return(i=function(e){var t;return t=e.toString(16),\"\\\\u\"+Et(\"0\",4-t.length)+t},65536>t)?i(t):(n=_Mathfloor((t-65536)/1024)+55296,r=(t-65536)%1024+56320,\"\"+i(n)+i(r))}},{key:\"replaceUnicodeCodePointEscapes\",value:function(n,r){var i=this,s;return s=null!=r.flags&&0>t.call(r.flags,\"u\"),n.replace(ft,function(e,t,n,o){var u;return t?t:(u=parseInt(n,16),1114111<u&&i.error(\"unicode code point escapes greater than \\\\u{10ffff} are not allowed\",{offset:o+r.delimiter.length,length:n.length+4}),s?i.unicodeCodePointToUnicodeEscapes(u):e)})}},{key:\"validateEscapes\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r,i,s,o,u,a,f,l,c,h;if(o=n.isRegex?V:et,u=o.exec(t),!!u)return u[0],r=u[1],f=u[2],i=u[3],h=u[4],c=u[5],a=f?\"octal escape sequences are not allowed\":\"invalid escape sequence\",s=\"\\\\\"+(f||i||h||c),this.error(a+\" \"+s,{offset:(null==(l=n.offsetInChunk)?0:l)+u.index+r.length,length:s.length})}},{key:\"makeDelimitedLiteral\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r;return\"\"===t&&\"/\"===n.delimiter&&(t=\"(?:)\"),r=RegExp(\"(\\\\\\\\\\\\\\\\)|(\\\\\\\\0(?=[1-7]))|\\\\\\\\?(\"+n.delimiter+\")|\\\\\\\\?(?:(\\\\n)|(\\\\r)|(\\\\u2028)|(\\\\u2029))|(\\\\\\\\.)\",\"g\"),t=t.replace(r,function(e,t,r,i,s,o,u,a,f){switch(!1){case!t:return n.double?t+t:t;case!r:return\"\\\\x00\";case!i:return\"\\\\\"+i;case!s:return\"\\\\n\";case!o:return\"\\\\r\";case!u:return\"\\\\u2028\";case!a:return\"\\\\u2029\";case!f:return n.double?\"\\\\\"+f:f}}),\"\"+n.delimiter+t+n.delimiter}},{key:\"suppressSemicolons\",value:function(){var n,r,i;for(i=[];\";\"===this.value();)this.tokens.pop(),(n=null==(r=this.prev())?void 0:r[0],0<=t.call([\"=\"].concat(_toConsumableArray(at)),n))?i.push(this.error(\"unexpected ;\")):i.push(void 0);return i}},{key:\"error\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r,i,s,o,u,a,f;return u=\"first_line\"in n?n:(r=this.getLineAndColumnFromChunk(null==(a=n.offset)?0:a),i=_slicedToArray(r,2),o=i[0],s=i[1],r,{first_line:o,first_column:s,last_column:s+(null==(f=n.length)?1:f)-1}),xt(t,u)}}]),e}(),gt=function(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:e;switch(!1){case 0>t.call([].concat(_toConsumableArray(_),_toConsumableArray(l)),e):return\"keyword '\"+n+\"' can't be assigned\";case 0>t.call(Y,e):return\"'\"+n+\"' can't be assigned\";case 0>t.call(J,e):return\"reserved word '\"+n+\"' can't be assigned\";default:return!1}},e.isUnassignable=gt,mt=function(e){var t;return\"IDENTIFIER\"===e[0]?(\"from\"===e[1]&&(e[1][0]=\"IDENTIFIER\",!0),!0):\"FOR\"!==e[0]&&\"{\"!==(t=e[1])&&\"[\"!==t&&\",\"!==t&&\":\"!==t},_=[\"true\",\"false\",\"null\",\"this\",\"new\",\"delete\",\"typeof\",\"in\",\"instanceof\",\"return\",\"throw\",\"break\",\"continue\",\"debugger\",\"yield\",\"await\",\"if\",\"else\",\"switch\",\"for\",\"while\",\"do\",\"try\",\"catch\",\"finally\",\"class\",\"extends\",\"super\",\"import\",\"export\",\"default\"],l=[\"undefined\",\"Infinity\",\"NaN\",\"then\",\"unless\",\"until\",\"loop\",\"of\",\"by\",\"when\"],f={and:\"&&\",or:\"||\",is:\"==\",isnt:\"!=\",not:\"!\",yes:\"true\",no:\"false\",on:\"true\",off:\"false\"},a=function(){var e;for(yt in e=[],f)e.push(yt);return e}(),l=l.concat(a),J=[\"case\",\"function\",\"var\",\"void\",\"with\",\"const\",\"let\",\"enum\",\"native\",\"implements\",\"interface\",\"package\",\"private\",\"protected\",\"public\",\"static\"],Y=[\"arguments\",\"eval\"],e.JS_FORBIDDEN=_.concat(J).concat(Y),i=65279,C=/^(?!\\d)((?:(?!\\s)[$\\w\\x7f-\\uffff])+)([^\\n\\S]*:(?!:))?/,g=/^(?![\\d<])((?:(?!\\s)[\\.\\-$\\w\\x7f-\\uffff])+)/,m=/^()>/,v=/^(?!\\d)((?:(?!\\s)[\\-$\\w\\x7f-\\uffff])+)([^\\S]*=(?!=))?/,q=/^0b[01]+|^0o[0-7]+|^0x[\\da-f]+|^\\d*\\.?\\d+(?:e[+-]?\\d+)?/i,R=/^(?:[-=]>|[-+*\\/%<>&|^!?=]=|>>>=?|([-+:])\\1|([&|<>*\\/%])\\2=?|\\?(\\.|::)|\\.{2,3})/,ct=/^[^\\n\\S]+/,c=/^\\s*###([^#][\\s\\S]*?)(?:###[^\\n\\S]*|###$)|^(?:\\s*#(?!##[^#]).*)+/,u=/^[-=]>/,F=/^(?:\\n[^\\n\\S]*)+/,M=/^`(?!``)((?:[^`\\\\]|\\\\[\\s\\S])*)`/,N=/^```((?:[^`\\\\]|\\\\[\\s\\S]|`(?!``))*)```/,rt=/^(?:'''|\"\"\"|'|\")/,nt=/^(?:[^\\\\']|\\\\[\\s\\S])*/,Z=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\\#(?!\\{))*/,S=/^(?:[^\\\\']|\\\\[\\s\\S]|'(?!''))*/,w=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\"(?!\"\")|\\#(?!\\{))*/,A=/^(?:[^\\{<])*/,y=/^(?:\\{|<(?!\\/))/,tt=/((?:\\\\\\\\)+)|\\\\[^\\S\\n]*\\n\\s*/g,G=/\\s*\\n\\s*/g,E=/\\n+([^\\n\\S]*)(?=\\S)/g,z=/^\\/(?!\\/)((?:[^[\\/\\n\\\\]|\\\\[^\\n]|\\[(?:\\\\[^\\n]|[^\\]\\n\\\\])*\\])*)(\\/)?/,W=/^\\w*/,lt=/^(?!.*(.).*\\1)[imguy]*$/,x=/^(?:[^\\\\\\/#\\s]|\\\\[\\s\\S]|\\/(?!\\/\\/)|\\#(?!\\{)|\\s+(?:#(?!\\{).*)?)*/,T=/((?:\\\\\\\\)+)|\\\\(\\s)|\\s+(?:#.*)?/g,X=/^(\\/|\\/{3}\\s*)(\\*)/,U=/^\\/=?\\s/,b=/\\*\\//,H=/^\\s*(?:,|\\??\\.(?![.\\d])|::)/,et=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7]|[1-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,V=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,ft=/(\\\\\\\\)|\\\\u\\{([\\da-fA-F]+)\\}/g,D=/^[^\\n\\S]*\\n/,it=/\\n[^\\n\\S]*$/,st=/\\s+$/,d=[\"-=\",\"+=\",\"/=\",\"*=\",\"%=\",\"||=\",\"&&=\",\"?=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"^=\",\"|=\",\"**=\",\"//=\",\"%%=\"],ot=[\"NEW\",\"TYPEOF\",\"DELETE\",\"DO\"],ut=[\"!\",\"~\"],Q=[\"<<\",\">>\",\">>>\"],p=[\"==\",\"!=\",\"<\",\">\",\"<=\",\">=\"],j=[\"*\",\"/\",\"%\",\"//\",\"%%\"],$=[\"IN\",\"OF\",\"INSTANCEOF\"],s=[\"TRUE\",\"FALSE\"],o=[\"IDENTIFIER\",\"PROPERTY\",\")\",\"]\",\"?\",\"@\",\"THIS\",\"SUPER\"],L=o.concat([\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_END\",\"REGEX\",\"REGEX_END\",\"BOOL\",\"NULL\",\"UNDEFINED\",\"}\",\"::\"]),h=[\"IDENTIFIER\",\")\",\"]\",\"NUMBER\"],I=L.concat([\"++\",\"--\"]),P=[\"INDENT\",\"OUTDENT\",\"TERMINATOR\"],k=[\")\",\"}\",\"]\"],at=[\"\\\\\",\".\",\"?.\",\"?::\",\"UNARY\",\"MATH\",\"UNARY_MATH\",\"+\",\"-\",\"**\",\"SHIFT\",\"RELATION\",\"COMPARE\",\"&\",\"^\",\"|\",\"&&\",\"||\",\"BIN?\",\"EXTENDS\"]}.call(this),{exports:e}.exports}(),require[\"./parser\"]=function(){var e={},t={exports:e},n=function(){function e(){this.yy={}}var t=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},n=[1,24],r=[1,56],i=[1,91],s=[1,92],o=[1,87],u=[1,93],a=[1,94],f=[1,89],l=[1,90],c=[1,64],h=[1,66],p=[1,67],d=[1,68],v=[1,69],m=[1,70],g=[1,72],y=[1,73],b=[1,58],w=[1,42],E=[1,36],S=[1,76],x=[1,77],T=[1,86],N=[1,54],C=[1,59],k=[1,60],L=[1,74],A=[1,75],O=[1,47],M=[1,55],_=[1,71],D=[1,81],P=[1,82],H=[1,83],B=[1,84],j=[1,53],F=[1,80],I=[1,38],q=[1,39],R=[1,40],U=[1,41],z=[1,43],W=[1,44],X=[1,95],V=[1,6,36,47,146],$=[1,6,35,36,47,69,70,93,127,135,146,149,157],J=[1,113],K=[1,114],Q=[1,115],G=[1,110],Y=[1,98],Z=[1,97],et=[1,96],tt=[1,99],nt=[1,100],rt=[1,101],it=[1,102],st=[1,103],ot=[1,104],ut=[1,105],at=[1,106],ft=[1,107],lt=[1,108],ct=[1,109],ht=[1,117],pt=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],dt=[2,196],vt=[1,123],mt=[1,128],gt=[1,124],yt=[1,125],bt=[1,126],wt=[1,129],Et=[1,122],St=[1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174],xt=[1,6,35,36,45,46,47,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Tt=[2,122],Nt=[2,126],Ct=[6,35,88,93],kt=[2,99],Lt=[1,141],At=[1,135],Ot=[1,140],Mt=[1,144],_t=[1,149],Dt=[1,147],Pt=[1,151],Ht=[1,155],Bt=[1,153],jt=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Ft=[2,119],It=[1,6,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],qt=[2,31],Rt=[1,183],Ut=[2,86],zt=[1,187],Wt=[1,193],Xt=[1,208],Vt=[1,203],$t=[1,212],Jt=[1,209],Kt=[1,214],Qt=[1,215],Gt=[1,217],Yt=[14,32,35,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Zt=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],en=[1,228],tn=[2,142],nn=[1,250],rn=[1,245],sn=[1,256],on=[1,6,35,36,45,46,47,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],un=[1,6,33,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,117,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],an=[1,6,35,36,45,46,47,52,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],fn=[1,286],ln=[45,46,126],cn=[1,297],hn=[1,296],pn=[6,35],dn=[2,97],vn=[1,303],mn=[6,35,36,88,93],gn=[6,35,36,61,70,88,93],yn=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],bn=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,184,185,186,187,188,189,190,191,192,193],wn=[2,347],En=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,185,186,187,188,189,190,191,192,193],Sn=[45,46,80,81,101,102,103,105,125,126],xn=[1,330],Tn=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174],Nn=[2,84],Cn=[1,346],kn=[1,348],Ln=[1,353],An=[1,355],On=[6,35,69,93],Mn=[2,221],_n=[2,222],Dn=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Pn=[1,369],Hn=[6,14,32,35,36,38,39,43,45,46,49,50,54,55,56,57,58,59,68,69,70,77,84,85,86,90,91,93,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Bn=[6,35,36,69,93],jn=[6,35,36,69,93,127],Fn=[1,6,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],In=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,157,174],qn=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,149,157,174],Rn=[2,273],Un=[164,165,166],zn=[93,164,165,166],Wn=[6,35,109],Xn=[1,393],Vn=[6,35,36,93,109],$n=[6,35,36,65,93,109],Jn=[1,399],Kn=[1,400],Qn=[6,35,36,61,65,70,80,81,93,109,126],Gn=[6,35,36,70,80,81,93,109,126],Yn=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,185,186,187,188,189,190,191,192,193],Zn=[2,339],er=[2,338],tr=[1,6,35,36,45,46,47,52,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],nr=[1,422],rr=[14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,83,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ir=[2,207],sr=[6,35,36],or=[2,98],ur=[1,431],ar=[1,432],fr=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,142,143,146,148,149,150,156,157,169,171,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],lr=[1,312],cr=[36,169,171],hr=[1,6,36,47,69,70,83,88,93,109,127,135,146,149,157,174],pr=[1,467],dr=[1,473],vr=[1,6,35,36,47,69,70,93,127,135,146,149,157,174],mr=[2,113],gr=[1,486],yr=[1,487],br=[6,35,36,69],wr=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,169,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Er=[1,6,35,36,47,69,70,93,127,135,146,149,157,169],Sr=[2,286],xr=[2,287],Tr=[2,302],Nr=[1,510],Cr=[1,511],kr=[6,35,36,109],Lr=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,157,174],Ar=[1,532],Or=[6,35,36,93,127],Mr=[6,35,36,93],_r=[1,6,35,36,47,69,70,83,88,93,109,127,135,142,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Dr=[35,93],Pr=[1,560],Hr=[1,561],Br=[1,567],jr=[1,568],Fr=[2,258],Ir=[2,261],qr=[2,274],Rr=[1,617],Ur=[1,618],zr=[2,288],Wr=[2,292],Xr=[2,289],Vr=[2,293],$r=[2,290],Jr=[2,291],Kr=[2,303],Qr=[2,304],Gr=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174],Yr=[2,294],Zr=[2,296],ei=[2,298],ti=[2,300],ni=[2,295],ri=[2,297],ii=[2,299],si=[2,301],oi={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Line:5,TERMINATOR:6,Expression:7,ExpressionLine:8,Statement:9,FuncDirective:10,YieldReturn:11,AwaitReturn:12,Return:13,STATEMENT:14,Import:15,Export:16,Value:17,Code:18,Operation:19,Assign:20,If:21,Try:22,While:23,For:24,Switch:25,Class:26,Throw:27,Yield:28,CodeLine:29,IfLine:30,OperationLine:31,YIELD:32,FROM:33,Block:34,INDENT:35,OUTDENT:36,Identifier:37,IDENTIFIER:38,CSX_TAG:39,Property:40,PROPERTY:41,AlphaNumeric:42,NUMBER:43,String:44,STRING:45,STRING_START:46,STRING_END:47,Regex:48,REGEX:49,REGEX_START:50,Invocation:51,REGEX_END:52,Literal:53,JS:54,UNDEFINED:55,NULL:56,BOOL:57,INFINITY:58,NAN:59,Assignable:60,\"=\":61,AssignObj:62,ObjAssignable:63,ObjRestValue:64,\":\":65,SimpleObjAssignable:66,ThisProperty:67,\"[\":68,\"]\":69,\"...\":70,ObjSpreadExpr:71,ObjSpreadIdentifier:72,Object:73,Parenthetical:74,Super:75,This:76,SUPER:77,Arguments:78,ObjSpreadAccessor:79,\".\":80,INDEX_START:81,IndexValue:82,INDEX_END:83,RETURN:84,AWAIT:85,PARAM_START:86,ParamList:87,PARAM_END:88,FuncGlyph:89,\"->\":90,\"=>\":91,OptComma:92,\",\":93,Param:94,ParamVar:95,Array:96,Splat:97,SimpleAssignable:98,Accessor:99,Range:100,\"?.\":101,\"::\":102,\"?::\":103,Index:104,INDEX_SOAK:105,Slice:106,\"{\":107,AssignList:108,\"}\":109,CLASS:110,EXTENDS:111,IMPORT:112,ImportDefaultSpecifier:113,ImportNamespaceSpecifier:114,ImportSpecifierList:115,ImportSpecifier:116,AS:117,DEFAULT:118,IMPORT_ALL:119,EXPORT:120,ExportSpecifierList:121,EXPORT_ALL:122,ExportSpecifier:123,OptFuncExist:124,FUNC_EXIST:125,CALL_START:126,CALL_END:127,ArgList:128,THIS:129,\"@\":130,Elisions:131,ArgElisionList:132,OptElisions:133,RangeDots:134,\"..\":135,Arg:136,ArgElision:137,Elision:138,SimpleArgs:139,TRY:140,Catch:141,FINALLY:142,CATCH:143,THROW:144,\"(\":145,\")\":146,WhileLineSource:147,WHILE:148,WHEN:149,UNTIL:150,WhileSource:151,Loop:152,LOOP:153,ForBody:154,ForLineBody:155,FOR:156,BY:157,ForStart:158,ForSource:159,ForLineSource:160,ForVariables:161,OWN:162,ForValue:163,FORIN:164,FOROF:165,FORFROM:166,SWITCH:167,Whens:168,ELSE:169,When:170,LEADING_WHEN:171,IfBlock:172,IF:173,POST_IF:174,IfBlockLine:175,UNARY:176,UNARY_MATH:177,\"-\":178,\"+\":179,\"--\":180,\"++\":181,\"?\":182,MATH:183,\"**\":184,SHIFT:185,COMPARE:186,\"&\":187,\"^\":188,\"|\":189,\"&&\":190,\"||\":191,\"BIN?\":192,RELATION:193,COMPOUND_ASSIGN:194,$accept:0,$end:1},terminals_:{2:\"error\",6:\"TERMINATOR\",14:\"STATEMENT\",32:\"YIELD\",33:\"FROM\",35:\"INDENT\",36:\"OUTDENT\",38:\"IDENTIFIER\",39:\"CSX_TAG\",41:\"PROPERTY\",43:\"NUMBER\",45:\"STRING\",46:\"STRING_START\",47:\"STRING_END\",49:\"REGEX\",50:\"REGEX_START\",52:\"REGEX_END\",54:\"JS\",55:\"UNDEFINED\",56:\"NULL\",57:\"BOOL\",58:\"INFINITY\",59:\"NAN\",61:\"=\",65:\":\",68:\"[\",69:\"]\",70:\"...\",77:\"SUPER\",80:\".\",81:\"INDEX_START\",83:\"INDEX_END\",84:\"RETURN\",85:\"AWAIT\",86:\"PARAM_START\",88:\"PARAM_END\",90:\"->\",91:\"=>\",93:\",\",101:\"?.\",102:\"::\",103:\"?::\",105:\"INDEX_SOAK\",107:\"{\",109:\"}\",110:\"CLASS\",111:\"EXTENDS\",112:\"IMPORT\",117:\"AS\",118:\"DEFAULT\",119:\"IMPORT_ALL\",120:\"EXPORT\",122:\"EXPORT_ALL\",125:\"FUNC_EXIST\",126:\"CALL_START\",127:\"CALL_END\",129:\"THIS\",130:\"@\",135:\"..\",140:\"TRY\",142:\"FINALLY\",143:\"CATCH\",144:\"THROW\",145:\"(\",146:\")\",148:\"WHILE\",149:\"WHEN\",150:\"UNTIL\",153:\"LOOP\",156:\"FOR\",157:\"BY\",162:\"OWN\",164:\"FORIN\",165:\"FOROF\",166:\"FORFROM\",167:\"SWITCH\",169:\"ELSE\",171:\"LEADING_WHEN\",173:\"IF\",174:\"POST_IF\",176:\"UNARY\",177:\"UNARY_MATH\",178:\"-\",179:\"+\",180:\"--\",181:\"++\",182:\"?\",183:\"MATH\",184:\"**\",185:\"SHIFT\",186:\"COMPARE\",187:\"&\",188:\"^\",189:\"|\",190:\"&&\",191:\"||\",192:\"BIN?\",193:\"RELATION\",194:\"COMPOUND_ASSIGN\"},productions_:[0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[5,1],[5,1],[10,1],[10,1],[9,1],[9,1],[9,1],[9,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[8,1],[8,1],[8,1],[28,1],[28,2],[28,3],[34,2],[34,3],[37,1],[37,1],[40,1],[42,1],[42,1],[44,1],[44,3],[48,1],[48,3],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[20,3],[20,4],[20,5],[62,1],[62,1],[62,3],[62,5],[62,3],[62,5],[66,1],[66,1],[66,1],[66,3],[63,1],[63,1],[64,2],[64,2],[64,2],[64,2],[71,1],[71,1],[71,1],[71,1],[71,1],[71,2],[71,2],[71,2],[72,2],[72,2],[79,2],[79,3],[13,2],[13,4],[13,1],[11,3],[11,2],[12,3],[12,2],[18,5],[18,2],[29,5],[29,2],[89,1],[89,1],[92,0],[92,1],[87,0],[87,1],[87,3],[87,4],[87,6],[94,1],[94,2],[94,2],[94,3],[94,1],[95,1],[95,1],[95,1],[95,1],[97,2],[97,2],[98,1],[98,2],[98,2],[98,1],[60,1],[60,1],[60,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[75,3],[75,4],[99,2],[99,2],[99,2],[99,2],[99,1],[99,1],[104,3],[104,2],[82,1],[82,1],[73,4],[108,0],[108,1],[108,3],[108,4],[108,6],[26,1],[26,2],[26,3],[26,4],[26,2],[26,3],[26,4],[26,5],[15,2],[15,4],[15,4],[15,5],[15,7],[15,6],[15,9],[115,1],[115,3],[115,4],[115,4],[115,6],[116,1],[116,3],[116,1],[116,3],[113,1],[114,3],[16,3],[16,5],[16,2],[16,4],[16,5],[16,6],[16,3],[16,5],[16,4],[16,7],[121,1],[121,3],[121,4],[121,4],[121,6],[123,1],[123,3],[123,3],[123,1],[123,3],[51,3],[51,3],[51,3],[124,0],[124,1],[78,2],[78,4],[76,1],[76,1],[67,2],[96,2],[96,3],[96,4],[134,1],[134,1],[100,5],[100,5],[106,3],[106,2],[106,3],[106,2],[106,2],[106,1],[128,1],[128,3],[128,4],[128,4],[128,6],[136,1],[136,1],[136,1],[136,1],[132,1],[132,3],[132,4],[132,4],[132,6],[137,1],[137,2],[133,1],[133,2],[131,1],[131,2],[138,1],[139,1],[139,1],[139,3],[139,3],[22,2],[22,3],[22,4],[22,5],[141,3],[141,3],[141,2],[27,2],[27,4],[74,3],[74,5],[147,2],[147,4],[147,2],[147,4],[151,2],[151,4],[151,4],[151,2],[151,4],[151,4],[23,2],[23,2],[23,2],[23,2],[23,1],[152,2],[152,2],[24,2],[24,2],[24,2],[24,2],[154,2],[154,4],[154,2],[155,4],[155,2],[158,2],[158,3],[163,1],[163,1],[163,1],[163,1],[161,1],[161,3],[159,2],[159,2],[159,4],[159,4],[159,4],[159,4],[159,4],[159,4],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,2],[159,4],[159,4],[160,2],[160,2],[160,4],[160,4],[160,4],[160,4],[160,4],[160,4],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,2],[160,4],[160,4],[25,5],[25,5],[25,7],[25,7],[25,4],[25,6],[168,1],[168,2],[170,3],[170,4],[172,3],[172,5],[21,1],[21,3],[21,3],[21,3],[175,3],[175,5],[30,1],[30,3],[30,3],[30,3],[31,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,5],[19,4]],performAction:function(e,t,n,r,i,s,o){var u=s.length-1;switch(i){case 1:return this.$=r.addDataToNode(r,o[u],o[u])(new r.Block);case 2:return this.$=s[u];case 3:this.$=r.addDataToNode(r,o[u],o[u])(r.Block.wrap([s[u]]));break;case 4:this.$=r.addDataToNode(r,o[u-2],o[u])(s[u-2].push(s[u]));break;case 5:this.$=s[u-1];break;case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 40:case 45:case 47:case 57:case 62:case 63:case 64:case 66:case 67:case 72:case 73:case 74:case 75:case 76:case 97:case 98:case 109:case 110:case 111:case 112:case 118:case 119:case 122:case 127:case 136:case 221:case 222:case 223:case 225:case 237:case 238:case 280:case 281:case 330:case 336:case 342:this.$=s[u];break;case 13:this.$=r.addDataToNode(r,o[u],o[u])(new r.StatementLiteral(s[u]));break;case 31:this.$=r.addDataToNode(r,o[u],o[u])(new r.Op(s[u],new r.Value(new r.Literal(\"\"))));break;case 32:case 346:case 347:case 348:case 351:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(s[u-1],s[u]));break;case 33:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Op(s[u-2].concat(s[u-1]),s[u]));break;case 34:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Block);break;case 35:case 83:case 137:this.$=r.addDataToNode(r,o[u-2],o[u])(s[u-1]);break;case 36:this.$=r.addDataToNode(r,o[u],o[u])(new r.IdentifierLiteral(s[u]));break;case 37:this.$=r.addDataToNode(r,o[u],o[u])(new r.CSXTag(s[u]));break;case 38:this.$=r.addDataToNode(r,o[u],o[u])(new r.PropertyName(s[u]));break;case 39:this.$=r.addDataToNode(r,o[u],o[u])(new r.NumberLiteral(s[u]));break;case 41:this.$=r.addDataToNode(r,o[u],o[u])(new r.StringLiteral(s[u]));break;case 42:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.StringWithInterpolations(s[u-1]));break;case 43:this.$=r.addDataToNode(r,o[u],o[u])(new r.RegexLiteral(s[u]));break;case 44:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.RegexWithInterpolations(s[u-1].args));break;case 46:this.$=r.addDataToNode(r,o[u],o[u])(new r.PassthroughLiteral(s[u]));break;case 48:this.$=r.addDataToNode(r,o[u],o[u])(new r.UndefinedLiteral(s[u]));break;case 49:this.$=r.addDataToNode(r,o[u],o[u])(new r.NullLiteral(s[u]));break;case 50:this.$=r.addDataToNode(r,o[u],o[u])(new r.BooleanLiteral(s[u]));break;case 51:this.$=r.addDataToNode(r,o[u],o[u])(new r.InfinityLiteral(s[u]));break;case 52:this.$=r.addDataToNode(r,o[u],o[u])(new r.NaNLiteral(s[u]));break;case 53:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Assign(s[u-2],s[u]));break;case 54:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Assign(s[u-3],s[u]));break;case 55:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Assign(s[u-4],s[u-1]));break;case 56:case 115:case 120:case 121:case 123:case 124:case 125:case 126:case 128:case 282:case 283:this.$=r.addDataToNode(r,o[u],o[u])(new r.Value(s[u]));break;case 58:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Assign(r.addDataToNode(r,o[u-2])(new r.Value(s[u-2])),s[u],\"object\",{operatorToken:r.addDataToNode(r,o[u-1])(new r.Literal(s[u-1]))}));break;case 59:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Assign(r.addDataToNode(r,o[u-4])(new r.Value(s[u-4])),s[u-1],\"object\",{operatorToken:r.addDataToNode(r,o[u-3])(new r.Literal(s[u-3]))}));break;case 60:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Assign(r.addDataToNode(r,o[u-2])(new r.Value(s[u-2])),s[u],null,{operatorToken:r.addDataToNode(r,o[u-1])(new r.Literal(s[u-1]))}));break;case 61:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Assign(r.addDataToNode(r,o[u-4])(new r.Value(s[u-4])),s[u-1],null,{operatorToken:r.addDataToNode(r,o[u-3])(new r.Literal(s[u-3]))}));break;case 65:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Value(new r.ComputedPropertyName(s[u-1])));break;case 68:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Splat(new r.Value(s[u-1])));break;case 69:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Splat(new r.Value(s[u])));break;case 70:case 113:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Splat(s[u-1]));break;case 71:case 114:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Splat(s[u]));break;case 77:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.SuperCall(r.addDataToNode(r,o[u-1])(new r.Super),s[u],!1,s[u-1]));break;case 78:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Call(new r.Value(s[u-1]),s[u]));break;case 79:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Call(s[u-1],s[u]));break;case 80:case 81:this.$=r.addDataToNode(r,o[u-1],o[u])((new r.Value(s[u-1])).add(s[u]));break;case 82:case 131:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Access(s[u]));break;case 84:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Return(s[u]));break;case 85:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Return(new r.Value(s[u-1])));break;case 86:this.$=r.addDataToNode(r,o[u],o[u])(new r.Return);break;case 87:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.YieldReturn(s[u]));break;case 88:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.YieldReturn);break;case 89:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.AwaitReturn(s[u]));break;case 90:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.AwaitReturn);break;case 91:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Code(s[u-3],s[u],s[u-1],r.addDataToNode(r,o[u-4])(new r.Literal(s[u-4]))));break;case 92:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Code([],s[u],s[u-1]));break;case 93:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Code(s[u-3],r.addDataToNode(r,o[u])(r.Block.wrap([s[u]])),s[u-1],r.addDataToNode(r,o[u-4])(new r.Literal(s[u-4]))));break;case 94:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Code([],r.addDataToNode(r,o[u])(r.Block.wrap([s[u]])),s[u-1]));break;case 95:case 96:this.$=r.addDataToNode(r,o[u],o[u])(new r.FuncGlyph(s[u]));break;case 99:case 142:case 232:this.$=r.addDataToNode(r,o[u],o[u])([]);break;case 100:case 143:case 162:case 183:case 216:case 230:case 234:case 284:this.$=r.addDataToNode(r,o[u],o[u])([s[u]]);break;case 101:case 144:case 163:case 184:case 217:case 226:this.$=r.addDataToNode(r,o[u-2],o[u])(s[u-2].concat(s[u]));break;case 102:case 145:case 164:case 185:case 218:this.$=r.addDataToNode(r,o[u-3],o[u])(s[u-3].concat(s[u]));break;case 103:case 146:case 166:case 187:case 220:this.$=r.addDataToNode(r,o[u-5],o[u])(s[u-5].concat(s[u-2]));break;case 104:this.$=r.addDataToNode(r,o[u],o[u])(new r.Param(s[u]));break;case 105:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Param(s[u-1],null,!0));break;case 106:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Param(s[u],null,!0));break;case 107:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Param(s[u-2],s[u]));break;case 108:case 224:this.$=r.addDataToNode(r,o[u],o[u])(new r.Expansion);break;case 116:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u-1].add(s[u]));break;case 117:this.$=r.addDataToNode(r,o[u-1],o[u])((new r.Value(s[u-1])).add(s[u]));break;case 129:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Super(r.addDataToNode(r,o[u])(new r.Access(s[u])),[],!1,s[u-2]));break;case 130:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Super(r.addDataToNode(r,o[u-1])(new r.Index(s[u-1])),[],!1,s[u-3]));break;case 132:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Access(s[u],\"soak\"));break;case 133:this.$=r.addDataToNode(r,o[u-1],o[u])([r.addDataToNode(r,o[u-1])(new r.Access(new r.PropertyName(\"prototype\"))),r.addDataToNode(r,o[u])(new r.Access(s[u]))]);break;case 134:this.$=r.addDataToNode(r,o[u-1],o[u])([r.addDataToNode(r,o[u-1])(new r.Access(new r.PropertyName(\"prototype\"),\"soak\")),r.addDataToNode(r,o[u])(new r.Access(s[u]))]);break;case 135:this.$=r.addDataToNode(r,o[u],o[u])(new r.Access(new r.PropertyName(\"prototype\")));break;case 138:this.$=r.addDataToNode(r,o[u-1],o[u])(r.extend(s[u],{soak:!0}));break;case 139:this.$=r.addDataToNode(r,o[u],o[u])(new r.Index(s[u]));break;case 140:this.$=r.addDataToNode(r,o[u],o[u])(new r.Slice(s[u]));break;case 141:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Obj(s[u-2],s[u-3].generated));break;case 147:this.$=r.addDataToNode(r,o[u],o[u])(new r.Class);break;case 148:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Class(null,null,s[u]));break;case 149:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Class(null,s[u]));break;case 150:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Class(null,s[u-1],s[u]));break;case 151:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Class(s[u]));break;case 152:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Class(s[u-1],null,s[u]));break;case 153:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Class(s[u-2],s[u]));break;case 154:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Class(s[u-3],s[u-1],s[u]));break;case 155:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.ImportDeclaration(null,s[u]));break;case 156:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.ImportDeclaration(new r.ImportClause(s[u-2],null),s[u]));break;case 157:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.ImportDeclaration(new r.ImportClause(null,s[u-2]),s[u]));break;case 158:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.ImportDeclaration(new r.ImportClause(null,new r.ImportSpecifierList([])),s[u]));break;case 159:this.$=r.addDataToNode(r,o[u-6],o[u])(new r.ImportDeclaration(new r.ImportClause(null,new r.ImportSpecifierList(s[u-4])),s[u]));break;case 160:this.$=r.addDataToNode(r,o[u-5],o[u])(new r.ImportDeclaration(new r.ImportClause(s[u-4],s[u-2]),s[u]));break;case 161:this.$=r.addDataToNode(r,o[u-8],o[u])(new r.ImportDeclaration(new r.ImportClause(s[u-7],new r.ImportSpecifierList(s[u-4])),s[u]));break;case 165:case 186:case 199:case 219:this.$=r.addDataToNode(r,o[u-3],o[u])(s[u-2]);break;case 167:this.$=r.addDataToNode(r,o[u],o[u])(new r.ImportSpecifier(s[u]));break;case 168:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ImportSpecifier(s[u-2],s[u]));break;case 169:this.$=r.addDataToNode(r,o[u],o[u])(new r.ImportSpecifier(new r.Literal(s[u])));break;case 170:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ImportSpecifier(new r.Literal(s[u-2]),s[u]));break;case 171:this.$=r.addDataToNode(r,o[u],o[u])(new r.ImportDefaultSpecifier(s[u]));break;case 172:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ImportNamespaceSpecifier(new r.Literal(s[u-2]),s[u]));break;case 173:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportNamedDeclaration(new r.ExportSpecifierList([])));break;case 174:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.ExportNamedDeclaration(new r.ExportSpecifierList(s[u-2])));break;case 175:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.ExportNamedDeclaration(s[u]));break;case 176:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.ExportNamedDeclaration(new r.Assign(s[u-2],s[u],null,{moduleDeclaration:\"export\"})));break;case 177:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.ExportNamedDeclaration(new r.Assign(s[u-3],s[u],null,{moduleDeclaration:\"export\"})));break;case 178:this.$=r.addDataToNode(r,o[u-5],o[u])(new r.ExportNamedDeclaration(new r.Assign(s[u-4],s[u-1],null,{moduleDeclaration:\"export\"})));break;case 179:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportDefaultDeclaration(s[u]));break;case 180:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.ExportDefaultDeclaration(new r.Value(s[u-1])));break;case 181:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.ExportAllDeclaration(new r.Literal(s[u-2]),s[u]));break;case 182:this.$=r.addDataToNode(r,o[u-6],o[u])(new r.ExportNamedDeclaration(new r.ExportSpecifierList(s[u-4]),s[u]));break;case 188:this.$=r.addDataToNode(r,o[u],o[u])(new r.ExportSpecifier(s[u]));break;case 189:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportSpecifier(s[u-2],s[u]));break;case 190:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportSpecifier(s[u-2],new r.Literal(s[u])));break;case 191:this.$=r.addDataToNode(r,o[u],o[u])(new r.ExportSpecifier(new r.Literal(s[u])));break;case 192:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.ExportSpecifier(new r.Literal(s[u-2]),s[u]));break;case 193:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.TaggedTemplateCall(s[u-2],s[u],s[u-1]));break;case 194:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Call(s[u-2],s[u],s[u-1]));break;case 195:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.SuperCall(r.addDataToNode(r,o[u-2])(new r.Super),s[u],s[u-1],s[u-2]));break;case 196:this.$=r.addDataToNode(r,o[u],o[u])(!1);break;case 197:this.$=r.addDataToNode(r,o[u],o[u])(!0);break;case 198:this.$=r.addDataToNode(r,o[u-1],o[u])([]);break;case 200:case 201:this.$=r.addDataToNode(r,o[u],o[u])(new r.Value(new r.ThisLiteral(s[u])));break;case 202:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Value(r.addDataToNode(r,o[u-1])(new r.ThisLiteral(s[u-1])),[r.addDataToNode(r,o[u])(new r.Access(s[u]))],\"this\"));break;case 203:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Arr([]));break;case 204:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Arr(s[u-1]));break;case 205:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Arr([].concat(s[u-2],s[u-1])));break;case 206:this.$=r.addDataToNode(r,o[u],o[u])(\"inclusive\");break;case 207:this.$=r.addDataToNode(r,o[u],o[u])(\"exclusive\");break;case 208:case 209:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Range(s[u-3],s[u-1],s[u-2]));break;case 210:case 212:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Range(s[u-2],s[u],s[u-1]));break;case 211:case 213:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Range(s[u-1],null,s[u]));break;case 214:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Range(null,s[u],s[u-1]));break;case 215:this.$=r.addDataToNode(r,o[u],o[u])(new r.Range(null,null,s[u]));break;case 227:this.$=r.addDataToNode(r,o[u-3],o[u])(s[u-3].concat(s[u-2],s[u]));break;case 228:this.$=r.addDataToNode(r,o[u-3],o[u])(s[u-2].concat(s[u-1]));break;case 229:this.$=r.addDataToNode(r,o[u-5],o[u])(s[u-5].concat(s[u-4],s[u-2],s[u-1]));break;case 231:case 235:case 331:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u-1].concat(s[u]));break;case 233:this.$=r.addDataToNode(r,o[u-1],o[u])([].concat(s[u]));break;case 236:this.$=r.addDataToNode(r,o[u],o[u])(new r.Elision);break;case 239:case 240:this.$=r.addDataToNode(r,o[u-2],o[u])([].concat(s[u-2],s[u]));break;case 241:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Try(s[u]));break;case 242:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Try(s[u-1],s[u][0],s[u][1]));break;case 243:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Try(s[u-2],null,null,s[u]));break;case 244:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Try(s[u-3],s[u-2][0],s[u-2][1],s[u]));break;case 245:this.$=r.addDataToNode(r,o[u-2],o[u])([s[u-1],s[u]]);break;case 246:this.$=r.addDataToNode(r,o[u-2],o[u])([r.addDataToNode(r,o[u-1])(new r.Value(s[u-1])),s[u]]);break;case 247:this.$=r.addDataToNode(r,o[u-1],o[u])([null,s[u]]);break;case 248:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Throw(s[u]));break;case 249:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Throw(new r.Value(s[u-1])));break;case 250:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Parens(s[u-1]));break;case 251:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Parens(s[u-2]));break;case 252:case 256:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.While(s[u]));break;case 253:case 257:case 258:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.While(s[u-2],{guard:s[u]}));break;case 254:case 259:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.While(s[u],{invert:!0}));break;case 255:case 260:case 261:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.While(s[u-2],{invert:!0,guard:s[u]}));break;case 262:case 263:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u-1].addBody(s[u]));break;case 264:case 265:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u].addBody(r.addDataToNode(r,o[u-1])(r.Block.wrap([s[u-1]]))));break;case 266:this.$=r.addDataToNode(r,o[u],o[u])(s[u]);break;case 267:this.$=r.addDataToNode(r,o[u-1],o[u])((new r.While(r.addDataToNode(r,o[u-1])(new r.BooleanLiteral(\"true\")))).addBody(s[u]));break;case 268:this.$=r.addDataToNode(r,o[u-1],o[u])((new r.While(r.addDataToNode(r,o[u-1])(new r.BooleanLiteral(\"true\")))).addBody(r.addDataToNode(r,o[u])(r.Block.wrap([s[u]]))));break;case 269:case 270:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.For(s[u-1],s[u]));break;case 271:case 272:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.For(s[u],s[u-1]));break;case 273:this.$=r.addDataToNode(r,o[u-1],o[u])({source:r.addDataToNode(r,o[u])(new r.Value(s[u]))});break;case 274:case 276:this.$=r.addDataToNode(r,o[u-3],o[u])({source:r.addDataToNode(r,o[u-2])(new r.Value(s[u-2])),step:s[u]});break;case 275:case 277:this.$=r.addDataToNode(r,o[u-1],o[u])(function(){return s[u].own=s[u-1].own,s[u].ownTag=s[u-1].ownTag,s[u].name=s[u-1][0],s[u].index=s[u-1][1],s[u]}());break;case 278:this.$=r.addDataToNode(r,o[u-1],o[u])(s[u]);break;case 279:this.$=r.addDataToNode(r,o[u-2],o[u])(function(){return s[u].own=!0,s[u].ownTag=r.addDataToNode(r,o[u-1])(new r.Literal(s[u-1])),s[u]}());break;case 285:this.$=r.addDataToNode(r,o[u-2],o[u])([s[u-2],s[u]]);break;case 286:case 305:this.$=r.addDataToNode(r,o[u-1],o[u])({source:s[u]});break;case 287:case 306:this.$=r.addDataToNode(r,o[u-1],o[u])({source:s[u],object:!0});break;case 288:case 289:case 307:case 308:this.$=r.addDataToNode(r,o[u-3],o[u])({source:s[u-2],guard:s[u]});break;case 290:case 291:case 309:case 310:this.$=r.addDataToNode(r,o[u-3],o[u])({source:s[u-2],guard:s[u],object:!0});break;case 292:case 293:case 311:case 312:this.$=r.addDataToNode(r,o[u-3],o[u])({source:s[u-2],step:s[u]});break;case 294:case 295:case 296:case 297:case 313:case 314:case 315:case 316:this.$=r.addDataToNode(r,o[u-5],o[u])({source:s[u-4],guard:s[u-2],step:s[u]});break;case 298:case 299:case 300:case 301:case 317:case 318:case 319:case 320:this.$=r.addDataToNode(r,o[u-5],o[u])({source:s[u-4],step:s[u-2],guard:s[u]});break;case 302:case 321:this.$=r.addDataToNode(r,o[u-1],o[u])({source:s[u],from:!0});break;case 303:case 304:case 322:case 323:this.$=r.addDataToNode(r,o[u-3],o[u])({source:s[u-2],guard:s[u],from:!0});break;case 324:case 325:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Switch(s[u-3],s[u-1]));break;case 326:case 327:this.$=r.addDataToNode(r,o[u-6],o[u])(new r.Switch(s[u-5],s[u-3],s[u-1]));break;case 328:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Switch(null,s[u-1]));break;case 329:this.$=r.addDataToNode(r,o[u-5],o[u])(new r.Switch(null,s[u-3],s[u-1]));break;case 332:this.$=r.addDataToNode(r,o[u-2],o[u])([[s[u-1],s[u]]]);break;case 333:this.$=r.addDataToNode(r,o[u-3],o[u])([[s[u-2],s[u-1]]]);break;case 334:case 340:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.If(s[u-1],s[u],{type:s[u-2]}));break;case 335:case 341:this.$=r.addDataToNode(r,o[u-4],o[u])(s[u-4].addElse(r.addDataToNode(r,o[u-2],o[u])(new r.If(s[u-1],s[u],{type:s[u-2]}))));break;case 337:case 343:this.$=r.addDataToNode(r,o[u-2],o[u])(s[u-2].addElse(s[u]));break;case 338:case 339:case 344:case 345:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.If(s[u],r.addDataToNode(r,o[u-2])(r.Block.wrap([s[u-2]])),{type:s[u-1],statement:!0}));break;case 349:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"-\",s[u]));break;case 350:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"+\",s[u]));break;case 352:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"--\",s[u]));break;case 353:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"++\",s[u]));break;case 354:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"--\",s[u-1],null,!0));break;case 355:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Op(\"++\",s[u-1],null,!0));break;case 356:this.$=r.addDataToNode(r,o[u-1],o[u])(new r.Existence(s[u-1]));break;case 357:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Op(\"+\",s[u-2],s[u]));break;case 358:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Op(\"-\",s[u-2],s[u]));break;case 359:case 360:case 361:case 362:case 363:case 364:case 365:case 366:case 367:case 368:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Op(s[u-1],s[u-2],s[u]));break;case 369:this.$=r.addDataToNode(r,o[u-2],o[u])(function(){return\"!\"===s[u-1].charAt(0)?(new r.Op(s[u-1].slice(1),s[u-2],s[u])).invert():new r.Op(s[u-1],s[u-2],s[u])}());break;case 370:this.$=r.addDataToNode(r,o[u-2],o[u])(new r.Assign(s[u-2],s[u],s[u-1]));break;case 371:this.$=r.addDataToNode(r,o[u-4],o[u])(new r.Assign(s[u-4],s[u-1],s[u-3]));break;case 372:this.$=r.addDataToNode(r,o[u-3],o[u])(new r.Assign(s[u-3],s[u],s[u-2]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{1:[3]},{1:[2,2],6:X},t(V,[2,3]),t($,[2,6],{151:111,154:112,158:116,148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,7]),t($,[2,8],{158:116,151:118,154:119,148:J,150:K,156:Q,174:ht}),t($,[2,9]),t(pt,[2,16],{124:120,99:121,104:127,45:dt,46:dt,126:dt,80:vt,81:mt,101:gt,102:yt,103:bt,105:wt,125:Et}),t(pt,[2,17],{104:127,99:130,80:vt,81:mt,101:gt,102:yt,103:bt,105:wt}),t(pt,[2,18]),t(pt,[2,19]),t(pt,[2,20]),t(pt,[2,21]),t(pt,[2,22]),t(pt,[2,23]),t(pt,[2,24]),t(pt,[2,25]),t(pt,[2,26]),t(pt,[2,27]),t($,[2,28]),t($,[2,29]),t($,[2,30]),t(St,[2,12]),t(St,[2,13]),t(St,[2,14]),t(St,[2,15]),t($,[2,10]),t($,[2,11]),t(xt,Tt,{61:[1,131]}),t(xt,[2,123]),t(xt,[2,124]),t(xt,[2,125]),t(xt,Nt),t(xt,[2,127]),t(xt,[2,128]),t(Ct,kt,{87:132,94:133,95:134,37:136,67:137,96:138,73:139,38:i,39:s,68:Lt,70:At,107:T,130:Ot}),{5:143,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,34:142,35:Mt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:145,8:146,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:150,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:156,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:157,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:158,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:[1,159],85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{17:161,18:162,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:163,67:79,68:g,73:62,74:31,75:35,76:34,77:y,86:Pt,89:152,90:S,91:x,96:61,98:160,100:32,107:T,129:L,130:A,145:_},{17:161,18:162,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:163,67:79,68:g,73:62,74:31,75:35,76:34,77:y,86:Pt,89:152,90:S,91:x,96:61,98:164,100:32,107:T,129:L,130:A,145:_},t(jt,Ft,{180:[1,165],181:[1,166],194:[1,167]}),t(pt,[2,336],{169:[1,168]}),{34:169,35:Mt},{34:170,35:Mt},{34:171,35:Mt},t(pt,[2,266]),{34:172,35:Mt},{34:173,35:Mt},{7:174,8:175,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:[1,176],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(It,[2,147],{53:30,74:31,100:32,51:33,76:34,75:35,96:61,73:62,42:63,48:65,37:78,67:79,44:88,89:152,17:161,18:162,60:163,34:177,98:179,35:Mt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,86:Pt,90:S,91:x,107:T,111:[1,178],129:L,130:A,145:_}),{7:180,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,181],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t([1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],qt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:n,32:_t,33:Rt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:[1,184],85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),t($,[2,342],{169:[1,185]}),t([1,6,36,47,69,70,93,127,135,146,148,149,150,156,157,174],Ut,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:186,14:n,32:_t,35:zt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),{37:192,38:i,39:s,44:188,45:u,46:a,107:[1,191],113:189,114:190,119:Wt},{26:195,37:196,38:i,39:s,107:[1,194],110:N,118:[1,197],122:[1,198]},t(jt,[2,120]),t(jt,[2,121]),t(xt,[2,45]),t(xt,[2,46]),t(xt,[2,47]),t(xt,[2,48]),t(xt,[2,49]),t(xt,[2,50]),t(xt,[2,51]),t(xt,[2,52]),{4:199,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,35:[1,200],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:201,8:202,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:Xt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,69:Vt,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:204,132:205,136:210,137:207,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{80:Kt,81:Qt,124:213,125:Et,126:dt},t(xt,[2,200]),t(xt,[2,201],{40:216,41:Gt}),t(Yt,[2,95]),t(Yt,[2,96]),t(Zt,[2,115]),t(Zt,[2,118]),{7:218,8:219,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:220,8:221,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:222,8:223,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:225,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,34:224,35:Mt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{37:230,38:i,39:s,67:231,68:g,73:233,96:232,100:226,107:T,130:Ot,161:227,162:en,163:229},{159:234,160:235,164:[1,236],165:[1,237],166:[1,238]},t([6,35,93,109],tn,{44:88,108:239,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,38:i,39:s,41:Gt,43:o,45:u,46:a,68:nn,70:rn,77:sn,107:T,129:L,130:A,145:_}),t(on,[2,39]),t(on,[2,40]),t(xt,[2,43]),{17:161,18:162,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:257,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:163,67:79,68:g,73:62,74:31,75:35,76:34,77:y,86:Pt,89:152,90:S,91:x,96:61,98:258,100:32,107:T,129:L,130:A,145:_},t(un,[2,36]),t(un,[2,37]),t(an,[2,41]),{4:259,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(V,[2,5],{7:4,8:5,9:6,10:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,11:27,12:28,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,5:260,14:n,32:r,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:w,86:E,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:F,176:I,177:q,178:R,179:U,180:z,181:W}),t(pt,[2,356]),{7:261,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:262,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:263,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:264,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:265,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:266,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:267,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:268,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:269,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:270,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:271,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:272,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:273,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:274,8:275,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(pt,[2,265]),t(pt,[2,270]),{7:220,8:276,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:222,8:277,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{37:230,38:i,39:s,67:231,68:g,73:233,96:232,100:278,107:T,130:Ot,161:227,162:en,163:229},{159:234,164:[1,279],165:[1,280],166:[1,281]},{7:282,8:283,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(pt,[2,264]),t(pt,[2,269]),{44:284,45:u,46:a,78:285,126:fn},t(Zt,[2,116]),t(ln,[2,197]),{40:287,41:Gt},{40:288,41:Gt},t(Zt,[2,135],{40:289,41:Gt}),{40:290,41:Gt},t(Zt,[2,136]),{7:292,8:294,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:cn,73:62,74:31,75:35,76:34,77:y,82:291,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,106:293,107:T,110:N,112:C,120:k,129:L,130:A,134:295,135:hn,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{81:mt,104:298,105:wt},t(Zt,[2,117]),{6:[1,300],7:299,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,301],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(pn,dn,{92:304,88:[1,302],93:vn}),t(mn,[2,100]),t(mn,[2,104],{61:[1,306],70:[1,305]}),t(mn,[2,108],{37:136,67:137,96:138,73:139,95:307,38:i,39:s,68:Lt,107:T,130:Ot}),t(gn,[2,109]),t(gn,[2,110]),t(gn,[2,111]),t(gn,[2,112]),{40:216,41:Gt},{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:Xt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,69:Vt,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:204,132:205,136:210,137:207,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(yn,[2,92]),t($,[2,94]),{4:311,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,36:[1,310],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(bn,wn,{151:111,154:112,158:116,182:et}),t($,[2,346]),{7:158,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{148:J,150:K,151:118,154:119,156:Q,158:116,174:ht},t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],qt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:n,32:_t,33:Rt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),t(En,[2,348],{151:111,154:112,158:116,182:et,184:nt}),t(Ct,kt,{94:133,95:134,37:136,67:137,96:138,73:139,87:313,38:i,39:s,68:Lt,70:At,107:T,130:Ot}),{34:142,35:Mt},{7:314,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{148:J,150:K,151:118,154:119,156:Q,158:116,174:[1,315]},{7:316,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(En,[2,349],{151:111,154:112,158:116,182:et,184:nt}),t(En,[2,350],{151:111,154:112,158:116,182:et,184:nt}),t(bn,[2,351],{151:111,154:112,158:116,182:et}),t($,[2,90],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:317,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:Ut,150:Ut,156:Ut,174:Ut,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),t(pt,[2,352],{45:Ft,46:Ft,80:Ft,81:Ft,101:Ft,102:Ft,103:Ft,105:Ft,125:Ft,126:Ft}),t(ln,dt,{124:120,99:121,104:127,80:vt,81:mt,101:gt,102:yt,103:bt,105:wt,125:Et}),{80:vt,81:mt,99:130,101:gt,102:yt,103:bt,104:127,105:wt},t(Sn,Tt),t(pt,[2,353],{45:Ft,46:Ft,80:Ft,81:Ft,101:Ft,102:Ft,103:Ft,105:Ft,125:Ft,126:Ft}),t(pt,[2,354]),t(pt,[2,355]),{6:[1,320],7:318,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,319],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{34:321,35:Mt,173:[1,322]},t(pt,[2,241],{141:323,142:[1,324],143:[1,325]}),t(pt,[2,262]),t(pt,[2,263]),t(pt,[2,271]),t(pt,[2,272]),{35:[1,326],148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[1,327]},{168:328,170:329,171:xn},t(pt,[2,148]),{7:331,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(It,[2,151],{34:332,35:Mt,45:Ft,46:Ft,80:Ft,81:Ft,101:Ft,102:Ft,103:Ft,105:Ft,125:Ft,126:Ft,111:[1,333]}),t(Tn,[2,248],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{73:334,107:T},t(Tn,[2,32],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:335,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t([1,6,36,47,69,70,93,127,135,146,149,157],[2,88],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:336,14:n,32:_t,35:zt,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:Ut,150:Ut,156:Ut,174:Ut,153:H,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),{34:337,35:Mt,173:[1,338]},t(St,Nn,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{73:339,107:T},t(St,[2,155]),{33:[1,340],93:[1,341]},{33:[1,342]},{35:Cn,37:347,38:i,39:s,109:[1,343],115:344,116:345,118:kn},t([33,93],[2,171]),{117:[1,349]},{35:Ln,37:354,38:i,39:s,109:[1,350],118:An,121:351,123:352},t(St,[2,175]),{61:[1,356]},{7:357,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,358],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{33:[1,359]},{6:X,146:[1,360]},{4:361,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(On,Mn,{151:111,154:112,158:116,134:362,70:[1,363],135:hn,148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(On,_n,{134:364,70:cn,135:hn}),t(Dn,[2,203]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,69:[1,365],70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,136:367,138:366,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t([6,35,69],dn,{133:368,92:370,93:Pn}),t(Hn,[2,234]),t(Bn,[2,225]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:Xt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:372,132:371,136:210,137:207,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Hn,[2,236]),t(Bn,[2,230]),t(jn,[2,223]),t(jn,[2,224],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:373,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,77:y,84:b,85:Dt,86:Pt,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W}),{78:374,126:fn},{40:375,41:Gt},{7:376,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Fn,[2,202]),t(Fn,[2,38]),{34:377,35:Mt,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{34:378,35:Mt},t(In,[2,256],{151:111,154:112,158:116,148:J,149:[1,379],150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:[2,252],149:[1,380]},t(In,[2,259],{151:111,154:112,158:116,148:J,149:[1,381],150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:[2,254],149:[1,382]},t(pt,[2,267]),t(qn,[2,268],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:Rn,157:[1,383]},t(Un,[2,278]),{37:230,38:i,39:s,67:231,68:Lt,73:233,96:232,107:T,130:Ot,161:384,163:229},t(Un,[2,284],{93:[1,385]}),t(zn,[2,280]),t(zn,[2,281]),t(zn,[2,282]),t(zn,[2,283]),t(pt,[2,275]),{35:[2,277]},{7:386,8:387,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:388,8:389,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:390,8:391,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Wn,dn,{92:392,93:Xn}),t(Vn,[2,143]),t(Vn,[2,56],{65:[1,394]}),t(Vn,[2,57]),t($n,[2,66],{78:397,79:398,61:[1,395],70:[1,396],80:Jn,81:Kn,126:fn}),t($n,[2,67]),{37:247,38:i,39:s,40:248,41:Gt,66:401,67:249,68:nn,71:402,72:251,73:252,74:253,75:254,76:255,77:sn,107:T,129:L,130:A,145:_},{70:[1,403],78:404,79:405,80:Jn,81:Kn,126:fn},t(Qn,[2,62]),t(Qn,[2,63]),t(Qn,[2,64]),{7:406,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Gn,[2,72]),t(Gn,[2,73]),t(Gn,[2,74]),t(Gn,[2,75]),t(Gn,[2,76]),{78:407,80:Kt,81:Qt,126:fn},t(Sn,Nt,{52:[1,408]}),t(Sn,Ft),{6:X,47:[1,409]},t(V,[2,4]),t(Yn,[2,357],{151:111,154:112,158:116,182:et,183:tt,184:nt}),t(Yn,[2,358],{151:111,154:112,158:116,182:et,183:tt,184:nt}),t(En,[2,359],{151:111,154:112,158:116,182:et,184:nt}),t(En,[2,360],{151:111,154:112,158:116,182:et,184:nt}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,185,186,187,188,189,190,191,192,193],[2,361],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192],[2,362],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,187,188,189,190,191,192],[2,363],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,188,189,190,191,192],[2,364],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,189,190,191,192],[2,365],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,190,191,192],[2,366],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,191,192],[2,367],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,192],[2,368],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,193:ct}),t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192,193],[2,369],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt}),t(qn,Zn,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,345]),{149:[1,410]},{149:[1,411]},t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Rn,{157:[1,412]}),{7:413,8:414,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:415,8:416,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:417,8:418,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(qn,er,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,344]),t(tr,[2,193]),t(tr,[2,194]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:nr,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,127:[1,419],128:420,129:L,130:A,136:421,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Zt,[2,131]),t(Zt,[2,132]),t(Zt,[2,133]),t(Zt,[2,134]),{83:[1,423]},{70:cn,83:[2,139],134:424,135:hn,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{83:[2,140]},{70:cn,134:425,135:hn},{7:426,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,83:[2,215],84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(rr,[2,206]),t(rr,ir),t(Zt,[2,138]),t(Tn,[2,53],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:427,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:428,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{89:429,90:S,91:x},t(sr,or,{95:134,37:136,67:137,96:138,73:139,94:430,38:i,39:s,68:Lt,70:At,107:T,130:Ot}),{6:ur,35:ar},t(mn,[2,105]),{7:433,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(mn,[2,106]),t(jn,Mn,{151:111,154:112,158:116,70:[1,434],148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(jn,_n),t(fr,[2,34]),{6:X,36:[1,435]},{7:436,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(pn,dn,{92:304,88:[1,437],93:vn}),t(bn,wn,{151:111,154:112,158:116,182:et}),{7:438,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{34:377,35:Mt,148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t($,[2,89],{151:111,154:112,158:116,148:Nn,150:Nn,156:Nn,174:Nn,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,[2,370],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:439,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:440,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(pt,[2,337]),{7:441,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(pt,[2,242],{142:[1,442]}),{34:443,35:Mt},{34:446,35:Mt,37:444,38:i,39:s,73:445,107:T},{168:447,170:329,171:xn},{168:448,170:329,171:xn},{36:[1,449],169:[1,450],170:451,171:xn},t(cr,[2,330]),{7:453,8:454,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,139:452,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(hr,[2,149],{151:111,154:112,158:116,34:455,35:Mt,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(pt,[2,152]),{7:456,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{36:[1,457]},t(Tn,[2,33],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,87],{151:111,154:112,158:116,148:Nn,150:Nn,156:Nn,174:Nn,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t($,[2,343]),{7:459,8:458,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{36:[1,460]},{44:461,45:u,46:a},{107:[1,463],114:462,119:Wt},{44:464,45:u,46:a},{33:[1,465]},t(Wn,dn,{92:466,93:pr}),t(Vn,[2,162]),{35:Cn,37:347,38:i,39:s,115:468,116:345,118:kn},t(Vn,[2,167],{117:[1,469]}),t(Vn,[2,169],{117:[1,470]}),{37:471,38:i,39:s},t(St,[2,173]),t(Wn,dn,{92:472,93:dr}),t(Vn,[2,183]),{35:Ln,37:354,38:i,39:s,118:An,121:474,123:352},t(Vn,[2,188],{117:[1,475]}),t(Vn,[2,191],{117:[1,476]}),{6:[1,478],7:477,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,479],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(vr,[2,179],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{73:480,107:T},{44:481,45:u,46:a},t(xt,[2,250]),{6:X,36:[1,482]},{7:483,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t([14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ir,{6:mr,35:mr,69:mr,93:mr}),{7:484,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Dn,[2,204]),t(Hn,[2,235]),t(Bn,[2,231]),{6:gr,35:yr,69:[1,485]},t(br,or,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,138:206,136:210,97:211,7:308,8:309,137:488,131:489,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,70:$t,77:y,84:b,85:Dt,86:E,90:S,91:x,93:Jt,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:F,176:I,177:q,178:R,179:U,180:z,181:W}),t(br,[2,232]),t(sr,dn,{92:370,133:490,93:Pn}),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,136:367,138:366,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(jn,[2,114],{151:111,154:112,158:116,148:J,150:K,156:Q,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(tr,[2,195]),t(xt,[2,129]),{83:[1,491],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(wr,[2,334]),t(Er,[2,340]),{7:492,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:493,8:494,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:495,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:496,8:497,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:498,8:499,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Un,[2,279]),{37:230,38:i,39:s,67:231,68:Lt,73:233,96:232,107:T,130:Ot,163:500},{35:Sr,148:J,149:[1,501],150:K,151:111,154:112,156:Q,157:[1,502],158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,305],149:[1,503],157:[1,504]},{35:xr,148:J,149:[1,505],150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,306],149:[1,506]},{35:Tr,148:J,149:[1,507],150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,321],149:[1,508]},{6:Nr,35:Cr,109:[1,509]},t(kr,or,{44:88,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,62:512,38:i,39:s,41:Gt,43:o,45:u,46:a,68:nn,70:rn,77:sn,107:T,129:L,130:A,145:_}),{7:513,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,514],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:515,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,35:[1,516],37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Vn,[2,68]),t(Gn,[2,78]),t(Gn,[2,80]),{40:517,41:Gt},{7:292,8:294,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:cn,73:62,74:31,75:35,76:34,77:y,82:518,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,106:293,107:T,110:N,112:C,120:k,129:L,130:A,134:295,135:hn,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Vn,[2,69],{78:397,79:398,80:Jn,81:Kn,126:fn}),t(Vn,[2,71],{78:404,79:405,80:Jn,81:Kn,126:fn}),t(Vn,[2,70]),t(Gn,[2,79]),t(Gn,[2,81]),{69:[1,519],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Gn,[2,77]),t(xt,[2,44]),t(an,[2,42]),{7:520,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:521,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:522,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,174],Sr,{151:111,154:112,158:116,149:[1,523],157:[1,524],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,525],157:[1,526]},t(Lr,xr,{151:111,154:112,158:116,149:[1,527],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,528]},t(Lr,Tr,{151:111,154:112,158:116,149:[1,529],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,530]},t(tr,[2,198]),t([6,35,127],dn,{92:531,93:Ar}),t(Or,[2,216]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:nr,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,128:533,129:L,130:A,136:421,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Zt,[2,137]),{7:534,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,83:[2,211],84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:535,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,83:[2,213],84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{83:[2,214],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Tn,[2,54],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{36:[1,536],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{5:538,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:r,34:537,35:Mt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:w,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(mn,[2,101]),{37:136,38:i,39:s,67:137,68:Lt,70:At,73:139,94:539,95:134,96:138,107:T,130:Ot},t(Mr,kt,{94:133,95:134,37:136,67:137,96:138,73:139,87:540,38:i,39:s,68:Lt,70:At,107:T,130:Ot}),t(mn,[2,107],{151:111,154:112,158:116,148:J,150:K,156:Q,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(jn,mr),t(fr,[2,35]),t(qn,Zn,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{89:541,90:S,91:x},t(qn,er,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{36:[1,542],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Tn,[2,372],{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{34:543,35:Mt,148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{34:544,35:Mt},t(pt,[2,243]),{34:545,35:Mt},{34:546,35:Mt},t(_r,[2,247]),{36:[1,547],169:[1,548],170:451,171:xn},{36:[1,549],169:[1,550],170:451,171:xn},t(pt,[2,328]),{34:551,35:Mt},t(cr,[2,331]),{34:552,35:Mt,93:[1,553]},t(Dr,[2,237],{151:111,154:112,158:116,148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Dr,[2,238]),t(pt,[2,150]),t(hr,[2,153],{151:111,154:112,158:116,34:554,35:Mt,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(pt,[2,249]),{34:555,35:Mt},{148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(St,[2,85]),t(St,[2,156]),{33:[1,556]},{35:Cn,37:347,38:i,39:s,115:557,116:345,118:kn},t(St,[2,157]),{44:558,45:u,46:a},{6:Pr,35:Hr,109:[1,559]},t(kr,or,{37:347,116:562,38:i,39:s,118:kn}),t(sr,dn,{92:563,93:pr}),{37:564,38:i,39:s},{37:565,38:i,39:s},{33:[2,172]},{6:Br,35:jr,109:[1,566]},t(kr,or,{37:354,123:569,38:i,39:s,118:An}),t(sr,dn,{92:570,93:dr}),{37:571,38:i,39:s,118:[1,572]},{37:573,38:i,39:s},t(vr,[2,176],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:574,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:575,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{36:[1,576]},t(St,[2,181]),{146:[1,577]},{69:[1,578],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{69:[1,579],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Dn,[2,205]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:372,136:210,137:580,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:Xt,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,93:Jt,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,131:372,132:581,136:210,137:207,138:206,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Bn,[2,226]),t(br,[2,233],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,138:366,136:367,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,70:$t,77:y,84:b,85:Dt,86:E,90:S,91:x,93:Jt,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:F,176:I,177:q,178:R,179:U,180:z,181:W}),{6:gr,35:yr,36:[1,582]},t(xt,[2,130]),t(qn,[2,257],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:Fr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,253]},t(qn,[2,260],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{35:Ir,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,255]},{35:qr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,276]},t(Un,[2,285]),{7:583,8:584,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:585,8:586,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:587,8:588,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:589,8:590,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:591,8:592,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:593,8:594,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:595,8:596,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:597,8:598,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Dn,[2,141]),{37:247,38:i,39:s,40:248,41:Gt,42:244,43:o,44:88,45:u,46:a,62:599,63:241,64:242,66:243,67:249,68:nn,70:rn,71:246,72:251,73:252,74:253,75:254,76:255,77:sn,107:T,129:L,130:A,145:_},t(Mr,tn,{44:88,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,108:600,38:i,39:s,41:Gt,43:o,45:u,46:a,68:nn,70:rn,77:sn,107:T,129:L,130:A,145:_}),t(Vn,[2,144]),t(Vn,[2,58],{151:111,154:112,158:116,148:J,150:K,156:Q,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:601,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Vn,[2,60],{151:111,154:112,158:116,148:J,150:K,156:Q,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:602,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Gn,[2,82]),{83:[1,603]},t(Qn,[2,65]),t(qn,Fr,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(qn,Ir,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(qn,qr,{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{7:604,8:605,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:606,8:607,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:608,8:609,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:610,8:611,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:612,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:613,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:614,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:615,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{6:Rr,35:Ur,127:[1,616]},t([6,35,36,127],or,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,136:619,14:n,32:_t,38:i,39:s,43:o,45:u,46:a,49:f,50:l,54:c,55:h,56:p,57:d,58:v,59:m,68:g,70:$t,77:y,84:b,85:Dt,86:E,90:S,91:x,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,148:D,150:P,153:H,156:B,167:j,173:F,176:I,177:q,178:R,179:U,180:z,181:W}),t(sr,dn,{92:620,93:Ar}),{83:[2,210],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{83:[2,212],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(pt,[2,55]),t(yn,[2,91]),t($,[2,93]),t(mn,[2,102]),t(sr,dn,{92:621,93:vn}),{34:537,35:Mt},t(pt,[2,371]),t(wr,[2,335]),t(pt,[2,244]),t(_r,[2,245]),t(_r,[2,246]),t(pt,[2,324]),{34:622,35:Mt},t(pt,[2,325]),{34:623,35:Mt},{36:[1,624]},t(cr,[2,332],{6:[1,625]}),{7:626,8:627,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(pt,[2,154]),t(Er,[2,341]),{44:628,45:u,46:a},t(Wn,dn,{92:629,93:pr}),t(St,[2,158]),{33:[1,630]},{37:347,38:i,39:s,116:631,118:kn},{35:Cn,37:347,38:i,39:s,115:632,116:345,118:kn},t(Vn,[2,163]),{6:Pr,35:Hr,36:[1,633]},t(Vn,[2,168]),t(Vn,[2,170]),t(St,[2,174],{33:[1,634]}),{37:354,38:i,39:s,118:An,123:635},{35:Ln,37:354,38:i,39:s,118:An,121:636,123:352},t(Vn,[2,184]),{6:Br,35:jr,36:[1,637]},t(Vn,[2,189]),t(Vn,[2,190]),t(Vn,[2,192]),t(vr,[2,177],{151:111,154:112,158:116,148:J,150:K,156:Q,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{36:[1,638],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(St,[2,180]),t(xt,[2,251]),t(xt,[2,208]),t(xt,[2,209]),t(Bn,[2,227]),t(sr,dn,{92:370,133:639,93:Pn}),t(Bn,[2,228]),{35:zr,148:J,150:K,151:111,154:112,156:Q,157:[1,640],158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,307],157:[1,641]},{35:Wr,148:J,149:[1,642],150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,311],149:[1,643]},{35:Xr,148:J,150:K,151:111,154:112,156:Q,157:[1,644],158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,308],157:[1,645]},{35:Vr,148:J,149:[1,646],150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,312],149:[1,647]},{35:$r,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,309]},{35:Jr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,310]},{35:Kr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,322]},{35:Qr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,323]},t(Vn,[2,145]),t(sr,dn,{92:648,93:Xn}),{36:[1,649],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{36:[1,650],148:J,150:K,151:111,154:112,156:Q,158:116,174:lr,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},t(Gn,[2,83]),t(Gr,zr,{151:111,154:112,158:116,157:[1,651],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{157:[1,652]},t(Lr,Wr,{151:111,154:112,158:116,149:[1,653],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,654]},t(Gr,Xr,{151:111,154:112,158:116,157:[1,655],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{157:[1,656]},t(Lr,Vr,{151:111,154:112,158:116,149:[1,657],178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{149:[1,658]},t(Tn,$r,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,Jr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,Kr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,Qr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(tr,[2,199]),{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,136:659,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:308,8:309,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,35:nr,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,70:$t,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,97:211,98:45,100:32,107:T,110:N,112:C,120:k,128:660,129:L,130:A,136:421,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},t(Or,[2,217]),{6:Rr,35:Ur,36:[1,661]},{6:ur,35:ar,36:[1,662]},{36:[1,663]},{36:[1,664]},t(pt,[2,329]),t(cr,[2,333]),t(Dr,[2,239],{151:111,154:112,158:116,148:J,150:K,156:Q,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Dr,[2,240]),t(St,[2,160]),{6:Pr,35:Hr,109:[1,665]},{44:666,45:u,46:a},t(Vn,[2,164]),t(sr,dn,{92:667,93:pr}),t(Vn,[2,165]),{44:668,45:u,46:a},t(Vn,[2,185]),t(sr,dn,{92:669,93:dr}),t(Vn,[2,186]),t(St,[2,178]),{6:gr,35:yr,36:[1,670]},{7:671,8:672,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:673,8:674,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:675,8:676,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:677,8:678,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:679,8:680,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:681,8:682,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:683,8:684,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{7:685,8:686,9:148,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:E,89:37,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:F,175:57,176:I,177:q,178:R,179:U,180:z,181:W},{6:Nr,35:Cr,36:[1,687]},t(Vn,[2,59]),t(Vn,[2,61]),{7:688,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:689,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:690,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:691,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:692,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:693,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:694,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},{7:695,9:154,13:23,14:n,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:_t,37:78,38:i,39:s,42:63,43:o,44:88,45:u,46:a,48:65,49:f,50:l,51:33,53:30,54:c,55:h,56:p,57:d,58:v,59:m,60:29,67:79,68:g,73:62,74:31,75:35,76:34,77:y,84:b,85:Dt,86:Pt,89:152,90:S,91:x,96:61,98:45,100:32,107:T,110:N,112:C,120:k,129:L,130:A,140:O,144:M,145:_,147:49,148:D,150:P,151:48,152:50,153:H,154:51,155:52,156:B,158:85,167:j,172:46,173:Ht,176:Bt,177:q,178:R,179:U,180:z,181:W},t(Or,[2,218]),t(sr,dn,{92:696,93:Ar}),t(Or,[2,219]),t(mn,[2,103]),t(pt,[2,326]),t(pt,[2,327]),{33:[1,697]},t(St,[2,159]),{6:Pr,35:Hr,36:[1,698]},t(St,[2,182]),{6:Br,35:jr,36:[1,699]},t(Bn,[2,229]),{35:Yr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,313]},{35:Zr,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,315]},{35:ei,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,317]},{35:ti,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,319]},{35:ni,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,314]},{35:ri,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,316]},{35:ii,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,318]},{35:si,148:J,150:K,151:111,154:112,156:Q,158:116,174:G,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct},{35:[2,320]},t(Vn,[2,146]),t(Tn,Yr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,Zr,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ei,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ti,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ni,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ri,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,ii,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),t(Tn,si,{151:111,154:112,158:116,178:Y,179:Z,182:et,183:tt,184:nt,185:rt,186:it,187:st,188:ot,189:ut,190:at,191:ft,192:lt,193:ct}),{6:Rr,35:Ur,36:[1,700]},{44:701,45:u,46:a},t(Vn,[2,166]),t(Vn,[2,187]),t(Or,[2,220]),t(St,[2,161])],defaultActions:{235:[2,277],293:[2,140],471:[2,172],494:[2,253],497:[2,255],499:[2,276],592:[2,309],594:[2,310],596:[2,322],598:[2,323],672:[2,313],674:[2,315],676:[2,317],678:[2,319],680:[2,314],682:[2,316],684:[2,318],686:[2,320]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],i=[],s=this.table,o=\"\",u=0,a=0,f=0,l=1,c=i.slice.call(arguments,1),h=Object.create(this.lexer),p={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(p.yy[d]=this.yy[d]);h.setInput(e,p.yy),p.yy.lexer=h,p.yy.parser=this,\"undefined\"==typeof h.yylloc&&(h.yylloc={});var v=h.yylloc;i.push(v);var m=h.options&&h.options.ranges;this.parseError=\"function\"==typeof p.yy.parseError?p.yy.parseError:Object.getPrototypeOf(this).parseError;var g=function(){var e;return e=h.lex()||l,\"number\"!=typeof e&&(e=t.symbols_[e]||e),e};for(var y={},b,w,E,S,x,T,N,C,k;;){if(E=n[n.length-1],this.defaultActions[E]?S=this.defaultActions[E]:((null===b||\"undefined\"==typeof b)&&(b=g()),S=s[E]&&s[E][b]),\"undefined\"==typeof S||!S.length||!S[0]){var L=\"\";for(T in k=[],s[E])this.terminals_[T]&&T>2&&k.push(\"'\"+this.terminals_[T]+\"'\");L=h.showPosition?\"Parse error on line \"+(u+1)+\":\\n\"+h.showPosition()+\"\\nExpecting \"+k.join(\", \")+\", got '\"+(this.terminals_[b]||b)+\"'\":\"Parse error on line \"+(u+1)+\": Unexpected \"+(b==l?\"end of input\":\"'\"+(this.terminals_[b]||b)+\"'\"),this.parseError(L,{text:h.match,token:this.terminals_[b]||b,line:h.yylineno,loc:v,expected:k})}if(S[0]instanceof Array&&1<S.length)throw new Error(\"Parse Error: multiple actions possible at state: \"+E+\", token: \"+b);switch(S[0]){case 1:n.push(b),r.push(h.yytext),i.push(h.yylloc),n.push(S[1]),b=null,w?(b=w,w=null):(a=h.yyleng,o=h.yytext,u=h.yylineno,v=h.yylloc,0<f&&f--);break;case 2:if(N=this.productions_[S[1]][1],y.$=r[r.length-N],y._$={first_line:i[i.length-(N||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(N||1)].first_column,last_column:i[i.length-1].last_column},m&&(y._$.range=[i[i.length-(N||1)].range[0],i[i.length-1].range[1]]),x=this.performAction.apply(y,[o,a,u,p.yy,S[1],r,i].concat(c)),\"undefined\"!=typeof x)return x;N&&(n=n.slice(0,2*-1*N),r=r.slice(0,-1*N),i=i.slice(0,-1*N)),n.push(this.productions_[S[1]][0]),r.push(y.$),i.push(y._$),C=s[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}};return e.prototype=oi,oi.Parser=e,new e}();return\"undefined\"!=typeof require&&\"undefined\"!=typeof e&&(e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(){},require.main===t&&e.main(process.argv.slice(1))),t.exports}(),require[\"./scope\"]=function(){var e={};return function(){var t=[].indexOf,n;e.Scope=n=function(){function e(t,n,r,i){_classCallCheck(this,e);var s,o;this.parent=t,this.expressions=n,this.method=r,this.referencedVars=i,this.variables=[{name:\"arguments\",type:\"arguments\"}],this.comments={},this.positions={},this.parent||(this.utilities={}),this.root=null==(s=null==(o=this.parent)?void 0:o.root)?this:s}return _createClass(e,[{key:\"add\",value:function(t,n,r){return this.shared&&!r?this.parent.add(t,n,r):Object.prototype.hasOwnProperty.call(this.positions,t)?this.variables[this.positions[t]].type=n:this.positions[t]=this.variables.push({name:t,type:n})-1}},{key:\"namedMethod\",value:function(){var t;return(null==(t=this.method)?void 0:t.name)||!this.parent?this.method:this.parent.namedMethod()}},{key:\"find\",value:function(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:\"var\";return!!this.check(t)||(this.add(t,n),!1)}},{key:\"parameter\",value:function(t){return this.shared&&this.parent.check(t,!0)?void 0:this.add(t,\"param\")}},{key:\"check\",value:function(t){var n;return!!(this.type(t)||(null==(n=this.parent)?void 0:n.check(t)))}},{key:\"temporary\",value:function(t,n){var r=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i,s,o,u,a,f;return r?(f=t.charCodeAt(0),s=122,i=s-f,u=f+n%(i+1),o=_StringfromCharCode(u),a=_Mathfloor(n/(i+1)),\"\"+o+(a||\"\")):\"\"+t+(n||\"\")}},{key:\"type\",value:function(t){var n,r,i,s;for(i=this.variables,n=0,r=i.length;n<r;n++)if(s=i[n],s.name===t)return s.type;return null}},{key:\"freeVariable\",value:function(n){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i,s,o;for(i=0;o=this.temporary(n,i,r.single),!!(this.check(o)||0<=t.call(this.root.referencedVars,o));)i++;return(null==(s=r.reserve)||s)&&this.add(o,\"var\",!0),o}},{key:\"assign\",value:function(t,n){return this.add(t,{value:n,assigned:!0},!0),this.hasAssignments=!0}},{key:\"hasDeclarations\",value:function(){return!!this.declaredVariables().length}},{key:\"declaredVariables\",value:function(){var t;return function(){var e,n,r,i;for(r=this.variables,i=[],e=0,n=r.length;e<n;e++)t=r[e],\"var\"===t.type&&i.push(t.name);return i}.call(this).sort()}},{key:\"assignedVariables\",value:function(){var t,n,r,i,s;for(r=this.variables,i=[],t=0,n=r.length;t<n;t++)s=r[t],s.type.assigned&&i.push(s.name+\" = \"+s.type.value);return i}}]),e}()}.call(this),{exports:e}.exports}(),require[\"./nodes\"]=function(){var e={};return function(){var t=[].indexOf,n=[].splice,r=[].slice,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q,G,Y,Z,et,tt,nt,rt,it,st,ot,ut,at,ft,lt,ct,ht,pt,dt,vt,mt,gt,yt,bt,wt,Et,St,xt,Tt,Nt,Ct,kt,Lt,At,Ot,Mt,_t,Dt,Pt,Ht,Bt,jt,Ft,It,qt,Rt,Ut,zt,Wt,Xt,Vt,$t,Jt,Kt,Qt,Gt,Yt,Zt,en,tn,nn,rn,sn,on,un,an;Error.stackTraceLimit=Infinity;var fn=require(\"./scope\");gt=fn.Scope;var ln=require(\"./lexer\");Qt=ln.isUnassignable,z=ln.JS_FORBIDDEN;var cn=require(\"./helpers\");qt=cn.compact,Wt=cn.flatten,zt=cn.extend,Yt=cn.merge,Rt=cn.del,rn=cn.starts,Ut=cn.ends,nn=cn.some,Ft=cn.addDataToNode,It=cn.attachCommentsToNode,Gt=cn.locationDataToString,sn=cn.throwSyntaxError,e.extend=zt,e.addDataToNode=Ft,Bt=function(){return!0},nt=function(){return!1},kt=function(){return this},tt=function(){return this.negated=!this.negated,this},e.CodeFragment=v=function(){function e(t,n){_classCallCheck(this,e);var r;this.code=\"\"+n,this.type=(null==t||null==(r=t.constructor)?void 0:r.name)||\"unknown\",this.locationData=null==t?void 0:t.locationData,this.comments=null==t?void 0:t.comments}return _createClass(e,[{key:\"toString\",value:function t(){return\"\"+this.code+(this.locationData?\": \"+Gt(this.locationData):\"\")}}]),e}(),Xt=function(e){var t;return function(){var n,r,i;for(i=[],n=0,r=e.length;n<r;n++)t=e[n],i.push(t.code);return i}().join(\"\")},e.Base=a=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"compile\",value:function(t,n){return Xt(this.compileToFragments(t,n))}},{key:\"compileWithoutComments\",value:function(t,n){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:\"compile\",i,s;return this.comments&&(this.ignoreTheseCommentsTemporarily=this.comments,delete this.comments),s=this.unwrapAll(),s.comments&&(s.ignoreTheseCommentsTemporarily=s.comments,delete s.comments),i=this[r](t,n),this.ignoreTheseCommentsTemporarily&&(this.comments=this.ignoreTheseCommentsTemporarily,delete this.ignoreTheseCommentsTemporarily),s.ignoreTheseCommentsTemporarily&&(s.comments=s.ignoreTheseCommentsTemporarily,delete s.ignoreTheseCommentsTemporarily),i}},{key:\"compileNodeWithoutComments\",value:function(t,n){return this.compileWithoutComments(t,n,\"compileNode\")}},{key:\"compileToFragments\",value:function(t,n){var r,i;return t=zt({},t),n&&(t.level=n),i=this.unfoldSoak(t)||this,i.tab=t.indent,r=t.level!==K&&i.isStatement(t)?i.compileClosure(t):i.compileNode(t),this.compileCommentFragments(t,i,r),r}},{key:\"compileToFragmentsWithoutComments\",value:function(t,n){return this.compileWithoutComments(t,n,\"compileToFragments\")}},{key:\"compileClosure\",value:function(t){var n,r,s,o,u,a,l,c;switch((o=this.jumps())&&o.error(\"cannot use a pure statement in an expression\"),t.sharedScope=!0,s=new d([],f.wrap([this])),n=[],this.contains(function(e){return e instanceof Tt})?s.bound=!0:((r=this.contains(Jt))||this.contains(Kt))&&(n=[new At],r?(u=\"apply\",n.push(new _(\"arguments\"))):u=\"call\",s=new Pt(s,[new i(new ct(u))])),a=(new h(s,n)).compileNode(t),!1){case!(s.isGenerator||(null==(l=s.base)?void 0:l.isGenerator)):a.unshift(this.makeCode(\"(yield* \")),a.push(this.makeCode(\")\"));break;case!(s.isAsync||(null==(c=s.base)?void 0:c.isAsync)):a.unshift(this.makeCode(\"(await \")),a.push(this.makeCode(\")\"))}return a}},{key:\"compileCommentFragments\",value:function(n,r,i){var s,o,u,a,f,l,c,h;if(!r.comments)return i;for(h=function(e){var t;return e.unshift?un(i,e):(0!==i.length&&(t=i[i.length-1],e.newLine&&\"\"!==t.code&&!/\\n\\s*$/.test(t.code)&&(e.code=\"\\n\"+e.code)),i.push(e))},c=r.comments,f=0,l=c.length;f<l;f++)(u=c[f],0>t.call(this.compiledComments,u))&&(this.compiledComments.push(u),a=u.here?(new O(u)).compileNode(n):(new Q(u)).compileNode(n),a.isHereComment&&!a.newLine||r.includeCommentFragments()?h(a):(0===i.length&&i.push(this.makeCode(\"\")),a.unshift?(null==(s=i[0]).precedingComments&&(s.precedingComments=[]),i[0].precedingComments.push(a)):(null==(o=i[i.length-1]).followingComments&&(o.followingComments=[]),i[i.length-1].followingComments.push(a))));return i}},{key:\"cache\",value:function(t,n,r){var i,s,u;return i=null==r?this.shouldCache():r(this),i?(s=new _(t.scope.freeVariable(\"ref\")),u=new o(s,this),n?[u.compileToFragments(t,n),[this.makeCode(s.value)]]:[u,s]):(s=n?this.compileToFragments(t,n):this,[s,s])}},{key:\"hoist\",value:function(){var t,n,r;return this.hoisted=!0,r=new M(this),t=this.compileNode,n=this.compileToFragments,this.compileNode=function(e){return r.update(t,e)},this.compileToFragments=function(e){return r.update(n,e)},r}},{key:\"cacheToCodeFragments\",value:function(t){return[Xt(t[0]),Xt(t[1])]}},{key:\"makeReturn\",value:function(t){var n;return n=this.unwrapAll(),t?new h(new G(t+\".push\"),[n]):new vt(n)}},{key:\"contains\",value:function(t){var n;return n=void 0,this.traverseChildren(!1,function(e){if(t(e))return n=e,!1}),n}},{key:\"lastNode\",value:function(t){return 0===t.length?null:t[t.length-1]}},{key:\"toString\",value:function r(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:\"\",t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.constructor.name,n;return n=\"\\n\"+e+t,this.soak&&(n+=\"?\"),this.eachChild(function(t){return n+=t.toString(e+Ct)}),n}},{key:\"eachChild\",value:function(t){var n,r,i,s,o,u,a,f;if(!this.children)return this;for(a=this.children,i=0,o=a.length;i<o;i++)if(n=a[i],this[n])for(f=Wt([this[n]]),s=0,u=f.length;s<u;s++)if(r=f[s],!1===t(r))return this;return this}},{key:\"traverseChildren\",value:function(t,n){return this.eachChild(function(e){var r;if(r=n(e),!1!==r)return e.traverseChildren(t,n)})}},{key:\"replaceInContext\",value:function(t,r){var i,s,o,u,a,f,l,c,h,p;if(!this.children)return!1;for(h=this.children,a=0,l=h.length;a<l;a++)if(i=h[a],o=this[i])if(Array.isArray(o))for(u=f=0,c=o.length;f<c;u=++f){if(s=o[u],t(s))return n.apply(o,[u,u-u+1].concat(p=r(s,this))),p,!0;if(s.replaceInContext(t,r))return!0}else{if(t(o))return this[i]=r(o,this),!0;if(o.replaceInContext(t,r))return!0}}},{key:\"invert\",value:function(){return new ut(\"!\",this)}},{key:\"unwrapAll\",value:function(){var t;for(t=this;t!==(t=t.unwrap());)continue;return t}},{key:\"updateLocationDataIfMissing\",value:function(t){return this.locationData&&!this.forceUpdateLocation?this:(delete this.forceUpdateLocation,this.locationData=t,this.eachChild(function(e){return e.updateLocationDataIfMissing(t)}))}},{key:\"error\",value:function(t){return sn(t,this.locationData)}},{key:\"makeCode\",value:function(t){return new v(this,t)}},{key:\"wrapInParentheses\",value:function(t){return[this.makeCode(\"(\")].concat(_toConsumableArray(t),[this.makeCode(\")\")])}},{key:\"wrapInBraces\",value:function(t){return[this.makeCode(\"{\")].concat(_toConsumableArray(t),[this.makeCode(\"}\")])}},{key:\"joinFragmentArrays\",value:function(t,n){var r,i,s,o,u;for(r=[],s=o=0,u=t.length;o<u;s=++o)i=t[s],s&&r.push(this.makeCode(n)),r=r.concat(i);return r}}]),e}();return e.prototype.children=[],e.prototype.isStatement=nt,e.prototype.compiledComments=[],e.prototype.includeCommentFragments=nt,e.prototype.jumps=nt,e.prototype.shouldCache=Bt,e.prototype.isChainable=nt,e.prototype.isAssignable=nt,e.prototype.isNumber=nt,e.prototype.unwrap=kt,e.prototype.unfoldSoak=nt,e.prototype.assigns=nt,e}.call(this),e.HoistTarget=M=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.source=e,n.options={},n.targetFragments={fragments:[]},n}return _inherits(t,e),_createClass(t,null,[{key:\"expand\",value:function(t){var r,i,s,o;for(i=s=t.length-1;0<=s;i=s+=-1)r=t[i],r.fragments&&(n.apply(t,[i,i-i+1].concat(o=this.expand(r.fragments))),o);return t}}]),_createClass(t,[{key:\"isStatement\",value:function(t){return this.source.isStatement(t)}},{key:\"update\",value:function(t,n){return this.targetFragments.fragments=t.call(this.source,Yt(n,this.options))}},{key:\"compileToFragments\",value:function(t,n){return this.options.indent=t.indent,this.options.level=null==n?t.level:n,[this.targetFragments]}},{key:\"compileNode\",value:function(t){return this.compileToFragments(t)}},{key:\"compileClosure\",value:function(t){return this.compileToFragments(t)}}]),t}(a),e.Block=f=function(){var e=function(e){function n(e){_classCallCheck(this,n);var t=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return t.expressions=qt(Wt(e||[])),t}return _inherits(n,e),_createClass(n,[{key:\"push\",value:function(t){return this.expressions.push(t),this}},{key:\"pop\",value:function(){return this.expressions.pop()}},{key:\"unshift\",value:function(t){return this.expressions.unshift(t),this}},{key:\"unwrap\",value:function(){return 1===this.expressions.length?this.expressions[0]:this}},{key:\"isEmpty\",value:function(){return!this.expressions.length}},{key:\"isStatement\",value:function(t){var n,r,i,s;for(s=this.expressions,r=0,i=s.length;r<i;r++)if(n=s[r],n.isStatement(t))return!0;return!1}},{key:\"jumps\",value:function(t){var n,r,i,s,o;for(o=this.expressions,r=0,s=o.length;r<s;r++)if(n=o[r],i=n.jumps(t))return i}},{key:\"makeReturn\",value:function(t){var n,r;for(r=this.expressions.length;r--;){n=this.expressions[r],this.expressions[r]=n.makeReturn(t),n instanceof vt&&!n.expression&&this.expressions.splice(r,1);break}return this}},{key:\"compileToFragments\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},r=arguments[1];return t.scope?_get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"compileToFragments\",this).call(this,t,r):this.compileRoot(t)}},{key:\"compileNode\",value:function(t){var i,s,o,u,a,f,l,c,h,p;for(this.tab=t.indent,p=t.level===K,s=[],h=this.expressions,u=a=0,l=h.length;a<l;u=++a){if(c=h[u],c.hoisted){c.compileToFragments(t);continue}if(c=c.unfoldSoak(t)||c,c instanceof n)s.push(c.compileNode(t));else if(p){if(c.front=!0,o=c.compileToFragments(t),!c.isStatement(t)){o=$t(o,this);var d=r.call(o,-1),v=_slicedToArray(d,1);f=v[0],\"\"===f.code||f.isComment||o.push(this.makeCode(\";\"))}s.push(o)}else s.push(c.compileToFragments(t,V))}return p?this.spaced?[].concat(this.joinFragmentArrays(s,\"\\n\\n\"),this.makeCode(\"\\n\")):this.joinFragmentArrays(s,\"\\n\"):(i=s.length?this.joinFragmentArrays(s,\", \"):[this.makeCode(\"void 0\")],1<s.length&&t.level>=V?this.wrapInParentheses(i):i)}},{key:\"compileRoot\",value:function(t){var n,r,i,s,o,u;for(t.indent=t.bare?\"\":Ct,t.level=K,this.spaced=!0,t.scope=new gt(null,this,null,null==(o=t.referencedVars)?[]:o),u=t.locals||[],r=0,i=u.length;r<i;r++)s=u[r],t.scope.parameter(s);return n=this.compileWithDeclarations(t),M.expand(n),n=this.compileComments(n),t.bare?n:[].concat(this.makeCode(\"(function() {\\n\"),n,this.makeCode(\"\\n}).call(this);\\n\"))}},{key:\"compileWithDeclarations\",value:function(t){var n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y;for(a=[],d=[],v=this.expressions,f=l=0,h=v.length;l<h&&(u=v[f],u=u.unwrap(),u instanceof G);f=++l);if(t=Yt(t,{level:K}),f){m=this.expressions.splice(f,9e9);var b=[this.spaced,!1];y=b[0],this.spaced=b[1];var w=[this.compileNode(t),y];a=w[0],this.spaced=w[1],this.expressions=m}d=this.compileNode(t);var E=t;if(g=E.scope,g.expressions===this)if(o=t.scope.hasDeclarations(),n=g.hasAssignments,o||n){if(f&&a.push(this.makeCode(\"\\n\")),a.push(this.makeCode(this.tab+\"var \")),o)for(i=g.declaredVariables(),s=c=0,p=i.length;c<p;s=++c){if(r=i[s],a.push(this.makeCode(r)),Object.prototype.hasOwnProperty.call(t.scope.comments,r)){var S;(S=a).push.apply(S,_toConsumableArray(t.scope.comments[r]))}s!==i.length-1&&a.push(this.makeCode(\", \"))}n&&(o&&a.push(this.makeCode(\",\\n\"+(this.tab+Ct))),a.push(this.makeCode(g.assignedVariables().join(\",\\n\"+(this.tab+Ct))))),a.push(this.makeCode(\";\\n\"+(this.spaced?\"\\n\":\"\")))}else a.length&&d.length&&a.push(this.makeCode(\"\\n\"));return a.concat(d)}},{key:\"compileComments\",value:function(n){var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k;for(u=f=0,h=n.length;f<h;u=++f){if(s=n[u],s.precedingComments){for(o=\"\",E=n.slice(0,u+1),l=E.length-1;0<=l;l+=-1){if(g=E[l],a=/^ {2,}/m.exec(g.code),a){o=a[0];break}if(0<=t.call(g.code,\"\\n\"))break}for(r=\"\\n\"+o+function(){var e,t,n,r;for(n=s.precedingComments,r=[],e=0,t=n.length;e<t;e++)i=n[e],i.isHereComment&&i.multiline?r.push(en(i.code,o,!1)):r.push(i.code);return r}().join(\"\\n\"+o).replace(/^(\\s*)$/gm,\"\"),S=n.slice(0,u+1),y=c=S.length-1;0<=c;y=c+=-1){if(g=S[y],v=g.code.lastIndexOf(\"\\n\"),-1===v)if(0===y)g.code=\"\\n\"+g.code,v=0;else{if(!g.isStringWithInterpolations||\"{\"!==g.code)continue;r=r.slice(1)+\"\\n\",v=1}delete s.precedingComments,g.code=g.code.slice(0,v)+r+g.code.slice(v);break}}if(s.followingComments){if(N=s.followingComments[0].trail,o=\"\",!N||1!==s.followingComments.length)for(m=!1,x=n.slice(u),b=0,p=x.length;b<p;b++)if(C=x[b],!m){if(!(0<=t.call(C.code,\"\\n\")))continue;m=!0}else{if(a=/^ {2,}/m.exec(C.code),a){o=a[0];break}if(0<=t.call(C.code,\"\\n\"))break}for(r=1===u&&/^\\s+$/.test(n[0].code)?\"\":N?\" \":\"\\n\"+o,r+=function(){var e,t,n,r;for(n=s.followingComments,r=[],t=0,e=n.length;t<e;t++)i=n[t],i.isHereComment&&i.multiline?r.push(en(i.code,o,!1)):r.push(i.code);return r}().join(\"\\n\"+o).replace(/^(\\s*)$/gm,\"\"),T=n.slice(u),k=w=0,d=T.length;w<d;k=++w){if(C=T[k],v=C.code.indexOf(\"\\n\"),-1===v)if(k===n.length-1)C.code+=\"\\n\",v=C.code.length;else{if(!C.isStringWithInterpolations||\"}\"!==C.code)continue;r+=\"\\n\",v=0}delete s.followingComments,\"\\n\"===C.code&&(r=r.replace(/^\\n/,\"\")),C.code=C.code.slice(0,v)+r+C.code.slice(v);break}}}return n}}],[{key:\"wrap\",value:function(t){return 1===t.length&&t[0]instanceof n?t[0]:new n(t)}}]),n}(a);return e.prototype.children=[\"expressions\"],e}.call(this),e.Literal=G=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.value=e,n}return _inherits(t,e),_createClass(t,[{key:\"assigns\",value:function(t){return t===this.value}},{key:\"compileNode\",value:function(){return[this.makeCode(this.value)]}},{key:\"toString\",value:function n(){return\" \"+(this.isStatement()?_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"toString\",this).call(this):this.constructor.name)+\": \"+this.value}}]),t}(a);return e.prototype.shouldCache=nt,e}.call(this),e.NumberLiteral=st=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G),e.InfinityLiteral=U=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(){return[this.makeCode(\"2e308\")]}}]),t}(st),e.NaNLiteral=rt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"NaN\"))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n;return n=[this.makeCode(\"0/0\")],t.level>=$?this.wrapInParentheses(n):n}}]),t}(st),e.StringLiteral=Et=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(){var n;return n=this.csx?[this.makeCode(this.unquote(!0,!0))]:_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this)}},{key:\"unquote\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0],n=1<arguments.length&&void 0!==arguments[1]&&arguments[1],r;return r=this.value.slice(1,-1),t&&(r=r.replace(/\\\\\"/g,'\"')),n&&(r=r.replace(/\\\\n/g,\"\\n\")),r}}]),t}(G),e.RegexLiteral=pt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G),e.PassthroughLiteral=lt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G),e.IdentifierLiteral=_=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"eachName\",value:function(t){return t(this)}}]),t}(G);return e.prototype.isAssignable=Bt,e}.call(this),e.CSXTag=c=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(_),e.PropertyName=ct=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G);return e.prototype.isAssignable=Bt,e}.call(this),e.ComputedPropertyName=m=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){return[this.makeCode(\"[\")].concat(_toConsumableArray(this.value.compileToFragments(t,V)),[this.makeCode(\"]\")])}}]),t}(ct),e.StatementLiteral=wt=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"jumps\",value:function(t){return\"break\"!==this.value||(null==t?void 0:t.loop)||(null==t?void 0:t.block)?\"continue\"!==this.value||null!=t&&t.loop?void 0:this:this}},{key:\"compileNode\",value:function(){return[this.makeCode(\"\"+this.tab+this.value+\";\")]}}]),t}(G);return e.prototype.isStatement=Bt,e.prototype.makeReturn=kt,e}.call(this),e.ThisLiteral=At=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"this\"))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r;return n=(null==(r=t.scope.method)?void 0:r.bound)?t.scope.method.context:this.value,[this.makeCode(n)]}}]),t}(G),e.UndefinedLiteral=Dt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"undefined\"))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){return[this.makeCode(t.level>=W?\"(void 0)\":\"void 0\")]}}]),t}(G),e.NullLiteral=it=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"null\"))}return _inherits(t,e),t}(G),e.BooleanLiteral=l=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(G),e.Return=vt=function(){var e=function(e){function n(e){_classCallCheck(this,n);var t=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return t.expression=e,t}return _inherits(n,e),_createClass(n,[{key:\"compileToFragments\",value:function(t,r){var i,s;return i=null==(s=this.expression)?void 0:s.makeReturn(),!i||i instanceof n?_get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"compileToFragments\",this).call(this,t,r):i.compileToFragments(t,r)}},{key:\"compileNode\",value:function(n){var r,i,s,o;if(r=[],this.expression)for(r=this.expression.compileToFragments(n,J),un(r,this.makeCode(this.tab+\"return \")),s=0,o=r.length;s<o;s++)if(i=r[s],i.isHereComment&&0<=t.call(i.code,\"\\n\"))i.code=en(i.code,this.tab);else{if(!i.isLineComment)break;i.code=\"\"+this.tab+i.code}else r.push(this.makeCode(this.tab+\"return\"));return r.push(this.makeCode(\";\")),r}}]),n}(a);return e.prototype.children=[\"expression\"],e.prototype.isStatement=Bt,e.prototype.makeReturn=kt,e.prototype.jumps=kt,e}.call(this),e.YieldReturn=jt=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(n){return null==n.scope.parent&&this.error(\"yield can only occur inside functions\"),_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,n)}}]),t}(vt),e.AwaitReturn=u=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(n){return null==n.scope.parent&&this.error(\"await can only occur inside functions\"),_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,n)}}]),t}(vt),e.Value=Pt=function(){var e=function(e){function t(e,n,r){var i=3<arguments.length&&void 0!==arguments[3]&&arguments[3];_classCallCheck(this,t);var s=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),o,u;if(!n&&e instanceof t){var a;return a=e,_possibleConstructorReturn(s,a)}if(e instanceof ft&&e.contains(function(e){return e instanceof wt})){var f;return f=e.unwrap(),_possibleConstructorReturn(s,f)}return s.base=e,s.properties=n||[],r&&(s[r]=!0),s.isDefaultValue=i,(null==(o=s.base)?void 0:o.comments)&&s.base instanceof At&&null!=(null==(u=s.properties[0])?void 0:u.name)&&Zt(s.base,s.properties[0].name),s}return _inherits(t,e),_createClass(t,[{key:\"add\",value:function(t){return this.properties=this.properties.concat(t),this.forceUpdateLocation=!0,this}},{key:\"hasProperties\",value:function(){return 0!==this.properties.length}},{key:\"bareLiteral\",value:function(t){return!this.properties.length&&this.base instanceof t}},{key:\"isArray\",value:function(){return this.bareLiteral(s)}},{key:\"isRange\",value:function(){return this.bareLiteral(ht)}},{key:\"shouldCache\",value:function(){return this.hasProperties()||this.base.shouldCache()}},{key:\"isAssignable\",value:function(){return this.hasProperties()||this.base.isAssignable()}},{key:\"isNumber\",value:function(){return this.bareLiteral(st)}},{key:\"isString\",value:function(){return this.bareLiteral(Et)}},{key:\"isRegex\",value:function(){return this.bareLiteral(pt)}},{key:\"isUndefined\",value:function(){return this.bareLiteral(Dt)}},{key:\"isNull\",value:function(){return this.bareLiteral(it)}},{key:\"isBoolean\",value:function(){return this.bareLiteral(l)}},{key:\"isAtomic\",value:function(){var t,n,r,i;for(i=this.properties.concat(this.base),t=0,n=i.length;t<n;t++)if(r=i[t],r.soak||r instanceof h)return!1;return!0}},{key:\"isNotCallable\",value:function(){return this.isNumber()||this.isString()||this.isRegex()||this.isArray()||this.isRange()||this.isSplice()||this.isObject()||this.isUndefined()||this.isNull()||this.isBoolean()}},{key:\"isStatement\",value:function(t){return!this.properties.length&&this.base.isStatement(t)}},{key:\"assigns\",value:function(t){return!this.properties.length&&this.base.assigns(t)}},{key:\"jumps\",value:function(t){return!this.properties.length&&this.base.jumps(t)}},{key:\"isObject\",value:function(t){return!this.properties.length&&this.base instanceof ot&&(!t||this.base.generated)}},{key:\"isElision\",value:function(){return this.base instanceof s&&this.base.hasElision()}},{key:\"isSplice\",value:function(){var t,n,i,s;return s=this.properties,t=r.call(s,-1),n=_slicedToArray(t,1),i=n[0],t,i instanceof yt}},{key:\"looksStatic\",value:function(t){var n;return(this.this||this.base instanceof At||this.base.value===t)&&1===this.properties.length&&\"prototype\"!==(null==(n=this.properties[0].name)?void 0:n.value)}},{key:\"unwrap\",value:function(){return this.properties.length?this:this.base}},{key:\"cacheReference\",value:function(n){var i,s,u,a,f,l,c;return(c=this.properties,i=r.call(c,-1),s=_slicedToArray(i,1),f=s[0],i,2>this.properties.length&&!this.base.shouldCache()&&(null==f||!f.shouldCache()))?[this,this]:(u=new t(this.base,this.properties.slice(0,-1)),u.shouldCache()&&(a=new _(n.scope.freeVariable(\"base\")),u=new t(new ft(new o(a,u)))),!f)?[u,a]:(f.shouldCache()&&(l=new _(n.scope.freeVariable(\"name\")),f=new R(new o(l,f.index)),l=new R(l)),[u.add(f),new t(a||u.base,[l||f])])}},{key:\"compileNode\",value:function(t){var n,r,i,s,o;for(this.base.front=this.front,o=this.properties,n=o.length&&null!=this.base.cached?this.base.cached:this.base.compileToFragments(t,o.length?W:null),o.length&&mt.test(Xt(n))&&n.push(this.makeCode(\".\")),r=0,i=o.length;r<i;r++){var u;s=o[r],(u=n).push.apply(u,_toConsumableArray(s.compileToFragments(t)))}return n}},{key:\"unfoldSoak\",value:function(n){var r=this;return null==this.unfoldedSoak?this.unfoldedSoak=function(){var e,i,s,u,a,f,l,c,h;if(s=r.base.unfoldSoak(n),s){var p;return(p=s.body.properties).push.apply(p,_toConsumableArray(r.properties)),s}for(c=r.properties,i=u=0,a=c.length;u<a;i=++u)if(f=c[i],!!f.soak)return f.soak=!1,e=new t(r.base,r.properties.slice(0,i)),h=new t(r.base,r.properties.slice(i)),e.shouldCache()&&(l=new _(n.scope.freeVariable(\"ref\")),e=new ft(new o(l,e)),h.base=l),new D(new b(e),h,{soak:!0});return!1}():this.unfoldedSoak}},{key:\"eachName\",value:function(t){return this.hasProperties()?t(this):this.base.isAssignable()?this.base.eachName(t):this.error(\"tried to assign to unassignable value\")}}]),t}(a);return e.prototype.children=[\"base\",\"properties\"],e}.call(this),e.HereComment=O=function(e){function n(e){var t=e.content,r=e.newLine,i=e.unshift;_classCallCheck(this,n);var s=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return s.content=t,s.newLine=r,s.unshift=i,s}return _inherits(n,e),_createClass(n,[{key:\"compileNode\",value:function(){var n,r,i,s,o,u,a,f,l;if(f=0<=t.call(this.content,\"\\n\"),r=/\\n\\s*[#|\\*]/.test(this.content),r&&(this.content=this.content.replace(/^([ \\t]*)#(?=\\s)/gm,\" *\")),f){for(s=\"\",l=this.content.split(\"\\n\"),i=0,u=l.length;i<u;i++)a=l[i],o=/^\\s*/.exec(a)[0],o.length>s.length&&(s=o);this.content=this.content.replace(RegExp(\"^(\"+o+\")\",\"gm\"),\"\")}return this.content=\"/*\"+this.content+(r?\" \":\"\")+\"*/\",n=this.makeCode(this.content),n.newLine=this.newLine,n.unshift=this.unshift,n.multiline=f,n.isComment=n.isHereComment=!0,n}}]),n}(a),e.LineComment=Q=function(e){function t(e){var n=e.content,r=e.newLine,i=e.unshift;_classCallCheck(this,t);var s=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return s.content=n,s.newLine=r,s.unshift=i,s}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(){var t;return t=this.makeCode(/^\\s*$/.test(this.content)?\"\":\"//\"+this.content),t.newLine=this.newLine,t.unshift=this.unshift,t.trail=!this.newLine&&!this.unshift,t.isComment=t.isLineComment=!0,t}}]),t}(a),e.Call=h=function(){var e=function(e){function t(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],r=arguments[2],i=arguments[3];_classCallCheck(this,t);var s=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),o;return s.variable=e,s.args=n,s.soak=r,s.token=i,s.isNew=!1,s.variable instanceof Pt&&s.variable.isNotCallable()&&s.variable.error(\"literal is not a function\"),s.csx=s.variable.base instanceof c,\"RegExp\"===(null==(o=s.variable.base)?void 0:o.value)&&0!==s.args.length&&Zt(s.variable,s.args[0]),s}return _inherits(t,e),_createClass(t,[{key:\"updateLocationDataIfMissing\",value:function(n){var r,i;return this.locationData&&this.needsUpdatedStartLocation&&(this.locationData.first_line=n.first_line,this.locationData.first_column=n.first_column,r=(null==(i=this.variable)?void 0:i.base)||this.variable,r.needsUpdatedStartLocation&&(this.variable.locationData.first_line=n.first_line,this.variable.locationData.first_column=n.first_column,r.updateLocationDataIfMissing(n)),delete this.needsUpdatedStartLocation),_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"updateLocationDataIfMissing\",this).call(this,n)}},{key:\"newInstance\",value:function(){var n,r;return n=(null==(r=this.variable)?void 0:r.base)||this.variable,n instanceof t&&!n.isNew?n.newInstance():this.isNew=!0,this.needsUpdatedStartLocation=!0,this}},{key:\"unfoldSoak\",value:function(n){var r,i,s,o,u,a,f,l;if(this.soak){if(this.variable instanceof xt)o=new G(this.variable.compile(n)),l=new Pt(o),null==this.variable.accessor&&this.variable.error(\"Unsupported reference to 'super'\");else{if(i=on(n,this,\"variable\"))return i;var c=(new Pt(this.variable)).cacheReference(n),h=_slicedToArray(c,2);o=h[0],l=h[1]}return l=new t(l,this.args),l.isNew=this.isNew,o=new G(\"typeof \"+o.compile(n)+' === \"function\"'),new D(o,new Pt(l),{soak:!0})}for(r=this,a=[];;){if(r.variable instanceof t){a.push(r),r=r.variable;continue}if(!(r.variable instanceof Pt))break;if(a.push(r),!((r=r.variable.base)instanceof t))break}for(f=a.reverse(),s=0,u=f.length;s<u;s++)r=f[s],i&&(r.variable instanceof t?r.variable=i:r.variable.base=i),i=on(n,r,\"variable\");return i}},{key:\"compileNode\",value:function(t){var n,r,s,o,u,a,f,l,c,h,p,v,m,g,y;if(this.csx)return this.compileCSX(t);if(null!=(p=this.variable)&&(p.front=this.front),f=[],y=(null==(v=this.variable)||null==(m=v.properties)?void 0:m[0])instanceof i,o=function(){var e,t,n,r;for(n=this.args||[],r=[],e=0,t=n.length;e<t;e++)s=n[e],s instanceof d&&r.push(s);return r}.call(this),0<o.length&&y&&!this.variable.base.cached){var b=this.variable.base.cache(t,W,function(){return!1}),w=_slicedToArray(b,1);a=w[0],this.variable.base.cached=a}for(g=this.args,u=c=0,h=g.length;c<h;u=++c){var E;s=g[u],u&&f.push(this.makeCode(\", \")),(E=f).push.apply(E,_toConsumableArray(s.compileToFragments(t,V)))}return l=[],this.isNew&&(this.variable instanceof xt&&this.variable.error(\"Unsupported reference to 'super'\"),l.push(this.makeCode(\"new \"))),(n=l).push.apply(n,_toConsumableArray(this.variable.compileToFragments(t,W))),(r=l).push.apply(r,[this.makeCode(\"(\")].concat(_toConsumableArray(f),[this.makeCode(\")\")])),l}},{key:\"compileCSX\",value:function(t){var n=_slicedToArray(this.args,2),r,i,o,u,a,f,l,c,h,p,d;if(u=n[0],a=n[1],u.base.csx=!0,null!=a&&(a.base.csx=!0),f=[this.makeCode(\"<\")],(r=f).push.apply(r,_toConsumableArray(d=this.variable.compileToFragments(t,W))),u.base instanceof s)for(p=u.base.objects,l=0,c=p.length;l<c;l++){var v;h=p[l],i=h.base,o=(null==i?void 0:i.properties)||[],(i instanceof ot||i instanceof _)&&(!(i instanceof ot)||i.generated||!(1<o.length)&&o[0]instanceof bt)||h.error('Unexpected token. Allowed CSX attributes are: id=\"val\", src={source}, {props...} or attribute.'),h.base instanceof ot&&(h.base.csx=!0),f.push(this.makeCode(\" \")),(v=f).push.apply(v,_toConsumableArray(h.compileToFragments(t,J)))}if(a){var m,g;f.push(this.makeCode(\">\")),(m=f).push.apply(m,_toConsumableArray(a.compileNode(t,V))),(g=f).push.apply(g,[this.makeCode(\"</\")].concat(_toConsumableArray(d),[this.makeCode(\">\")]))}else f.push(this.makeCode(\" />\"));return f}}]),t}(a);return e.prototype.children=[\"variable\",\"args\"],e}.call(this),e.SuperCall=Tt=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"isStatement\",value:function(t){var n;return(null==(n=this.expressions)?void 0:n.length)&&t.level===K}},{key:\"compileNode\",value:function(n){var r,i,s,o;if(null==(i=this.expressions)||!i.length)return _get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,n);if(o=new G(Xt(_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,n))),s=new f(this.expressions.slice()),n.level>K){var u=o.cache(n,null,Bt),a=_slicedToArray(u,2);o=a[0],r=a[1],s.push(r)}return s.unshift(o),s.compileToFragments(n,n.level===K?n.level:V)}}]),t}(h);return e.prototype.children=h.prototype.children.concat([\"expressions\"]),e}.call(this),e.Super=xt=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.accessor=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r,i,s,u,a,f,l;if(r=t.scope.namedMethod(),(null==r?void 0:r.isMethod)||this.error(\"cannot use super outside of an instance method\"),null==r.ctor&&null==this.accessor){var c=r;i=c.name,l=c.variable,(i.shouldCache()||i instanceof R&&i.index.isAssignable())&&(s=new _(t.scope.parent.freeVariable(\"name\")),i.index=new o(s,i.index)),this.accessor=null==s?i:new R(s)}return(null==(u=this.accessor)||null==(a=u.name)?void 0:a.comments)&&(f=this.accessor.name.comments,delete this.accessor.name.comments),n=(new Pt(new G(\"super\"),this.accessor?[this.accessor]:[])).compileToFragments(t),f&&It(f,this.accessor.name),n}}]),t}(a);return e.prototype.children=[\"accessor\"],e}.call(this),e.RegexWithInterpolations=dt=function(e){function t(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,new Pt(new _(\"RegExp\")),e,!1))}return _inherits(t,e),t}(h),e.TaggedTemplateCall=Lt=function(e){function t(e,n,r){return _classCallCheck(this,t),n instanceof Et&&(n=new St(f.wrap([new Pt(n)]))),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,[n],r))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){return this.variable.compileToFragments(t,W).concat(this.args[0].compileToFragments(t,V))}}]),t}(h),e.Extends=k=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.child=e,r.parent=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function(t){return(new h(new Pt(new G(an(\"extend\",t))),[this.child,this.parent])).compileToFragments(t)}}]),t}(a);return e.prototype.children=[\"child\",\"parent\"],e}.call(this),e.Access=i=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.name=e,r.soak=\"soak\"===n,r}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function(t){var n,r;return n=this.name.compileToFragments(t),r=this.name.unwrap(),r instanceof ct?[this.makeCode(\".\")].concat(_toConsumableArray(n)):[this.makeCode(\"[\")].concat(_toConsumableArray(n),[this.makeCode(\"]\")])}}]),t}(a);return e.prototype.children=[\"name\"],e.prototype.shouldCache=nt,e}.call(this),e.Index=R=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.index=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function(t){return[].concat(this.makeCode(\"[\"),this.index.compileToFragments(t,J),this.makeCode(\"]\"))}},{key:\"shouldCache\",value:function(){return this.index.shouldCache()}}]),t}(a);return e.prototype.children=[\"index\"],e}.call(this),e.Range=ht=function(){var e=function(e){function t(e,n,r){_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.from=e,i.to=n,i.exclusive=\"exclusive\"===r,i.equals=i.exclusive?\"\":\"=\",i}return _inherits(t,e),_createClass(t,[{key:\"compileVariables\",value:function(t){var n,r;t=Yt(t,{top:!0}),n=Rt(t,\"shouldCache\");var i=this.cacheToCodeFragments(this.from.cache(t,V,n)),s=_slicedToArray(i,2);this.fromC=s[0],this.fromVar=s[1];var o=this.cacheToCodeFragments(this.to.cache(t,V,n)),u=_slicedToArray(o,2);if(this.toC=u[0],this.toVar=u[1],r=Rt(t,\"step\")){var a=this.cacheToCodeFragments(r.cache(t,V,n)),f=_slicedToArray(a,2);this.step=f[0],this.stepVar=f[1]}return this.fromNum=this.from.isNumber()?+this.fromVar:null,this.toNum=this.to.isNumber()?+this.toVar:null,this.stepNum=(null==r?void 0:r.isNumber())?+this.stepVar:null}},{key:\"compileNode\",value:function(t){var n,r,i,s,o,u,a,f,l,c,h,p,d,v,m;if(this.fromVar||this.compileVariables(t),!t.index)return this.compileArray(t);a=null!=this.fromNum&&null!=this.toNum,o=Rt(t,\"index\"),u=Rt(t,\"name\"),c=u&&u!==o,m=a&&!c?\"var \"+o+\" = \"+this.fromC:o+\" = \"+this.fromC,this.toC!==this.toVar&&(m+=\", \"+this.toC),this.step!==this.stepVar&&(m+=\", \"+this.step),l=o+\" <\"+this.equals,s=o+\" >\"+this.equals;var g=[this.fromNum,this.toNum];return i=g[0],d=g[1],h=this.stepNum?this.stepNum+\" !== 0\":this.stepVar+\" !== 0\",r=a?null==this.step?i<=d?l+\" \"+d:s+\" \"+d:(f=i+\" <= \"+o+\" && \"+l+\" \"+d,v=i+\" >= \"+o+\" && \"+s+\" \"+d,i<=d?h+\" && \"+f:h+\" && \"+v):(f=this.fromVar+\" <= \"+o+\" && \"+l+\" \"+this.toVar,v=this.fromVar+\" >= \"+o+\" && \"+s+\" \"+this.toVar,h+\" && (\"+this.fromVar+\" <= \"+this.toVar+\" ? \"+f+\" : \"+v+\")\"),n=this.stepVar?this.stepVar+\" > 0\":this.fromVar+\" <= \"+this.toVar,p=this.stepVar?o+\" += \"+this.stepVar:a?c?i<=d?\"++\"+o:\"--\"+o:i<=d?o+\"++\":o+\"--\":c?n+\" ? ++\"+o+\" : --\"+o:n+\" ? \"+o+\"++ : \"+o+\"--\",c&&(m=u+\" = \"+m),c&&(p=u+\" = \"+p),[this.makeCode(m+\"; \"+r+\"; \"+p)]}},{key:\"compileArray\",value:function(t){var n,r,i,s,o,u,a,f,l,c,h,p,d;return(a=null!=this.fromNum&&null!=this.toNum,a&&20>=_Mathabs(this.fromNum-this.toNum))?(c=function(){for(var e=[],t=h=this.fromNum,n=this.toNum;h<=n?t<=n:t>=n;h<=n?t++:t--)e.push(t);return e}.apply(this),this.exclusive&&c.pop(),[this.makeCode(\"[\"+c.join(\", \")+\"]\")]):(u=this.tab+Ct,o=t.scope.freeVariable(\"i\",{single:!0,reserve:!1}),p=t.scope.freeVariable(\"results\",{reserve:!1}),l=\"\\n\"+u+\"var \"+p+\" = [];\",a?(t.index=o,r=Xt(this.compileNode(t))):(d=o+\" = \"+this.fromC+(this.toC===this.toVar?\"\":\", \"+this.toC),i=this.fromVar+\" <= \"+this.toVar,r=\"var \"+d+\"; \"+i+\" ? \"+o+\" <\"+this.equals+\" \"+this.toVar+\" : \"+o+\" >\"+this.equals+\" \"+this.toVar+\"; \"+i+\" ? \"+o+\"++ : \"+o+\"--\"),f=\"{ \"+p+\".push(\"+o+\"); }\\n\"+u+\"return \"+p+\";\\n\"+t.indent,s=function(e){return null==e?void 0:e.contains(Jt)},(s(this.from)||s(this.to))&&(n=\", arguments\"),[this.makeCode(\"(function() {\"+l+\"\\n\"+u+\"for (\"+r+\")\"+f+\"}).apply(this\"+(null==n?\"\":n)+\")\")])}}]),t}(a);return e.prototype.children=[\"from\",\"to\"],e}.call(this),e.Slice=yt=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.range=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n=this.range,r,i,s,o,u,a;return u=n.to,s=n.from,(null==s?void 0:s.shouldCache())&&(s=new Pt(new ft(s))),(null==u?void 0:u.shouldCache())&&(u=new Pt(new ft(u))),o=(null==s?void 0:s.compileToFragments(t,J))||[this.makeCode(\"0\")],u&&(r=u.compileToFragments(t,J),i=Xt(r),(this.range.exclusive||-1!=+i)&&(a=\", \"+(this.range.exclusive?i:u.isNumber()?\"\"+(+i+1):(r=u.compileToFragments(t,W),\"+\"+Xt(r)+\" + 1 || 9e9\")))),[this.makeCode(\".slice(\"+Xt(o)+(a||\"\")+\")\")]}}]),t}(a);return e.prototype.children=[\"range\"],e}.call(this),e.Obj=ot=function(){var e=function(e){function t(e){var n=1<arguments.length&&void 0!==arguments[1]&&arguments[1],r=2<arguments.length&&void 0!==arguments[2]&&arguments[2];_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.generated=n,i.lhs=r,i.objects=i.properties=e||[],i}return _inherits(t,e),_createClass(t,[{key:\"isAssignable\",value:function(){var t,n,r,i,s;for(s=this.properties,t=0,n=s.length;t<n;t++)if(i=s[t],r=Qt(i.unwrapAll().value),r&&i.error(r),i instanceof o&&\"object\"===i.context&&(i=i.value),!i.isAssignable())return!1;return!0}},{key:\"shouldCache\",value:function(){return!this.isAssignable()}},{key:\"hasSplat\",value:function(){var t,n,r,i;for(i=this.properties,t=0,n=i.length;t<n;t++)if(r=i[t],r instanceof bt)return!0;return!1}},{key:\"compileNode\",value:function(n){var r,i,u,a,f,l,c,h,p,d,v,g,y,b,w,E,S,x,T,N,C,k;if(x=this.properties,this.generated)for(l=0,g=x.length;l<g;l++)E=x[l],E instanceof Pt&&E.error(\"cannot have an implicit value in an implicit object\");if(this.hasSplat()&&!this.csx)return this.compileSpread(n);if(u=n.indent+=Ct,v=this.lastNode(this.properties),this.csx)return this.compileCSXAttributes(n);if(this.lhs)for(h=0,y=x.length;h<y;h++)if(S=x[h],S instanceof o){var L=S;k=L.value,C=k.unwrapAll(),C instanceof s||C instanceof t?C.lhs=!0:C instanceof o&&(C.nestedLhs=!0)}for(f=!0,N=this.properties,d=0,b=N.length;d<b;d++)S=N[d],S instanceof o&&\"object\"===S.context&&(f=!1);for(r=[],r.push(this.makeCode(f?\"\":\"\\n\")),i=T=0,w=x.length;T<w;i=++T){var A;if(S=x[i],c=i===x.length-1?\"\":f?\", \":S===v?\"\\n\":\",\\n\",a=f?\"\":u,p=S instanceof o&&\"object\"===S.context?S.variable:S instanceof o?(this.lhs?void 0:S.operatorToken.error(\"unexpected \"+S.operatorToken.value),S.variable):S,p instanceof Pt&&p.hasProperties()&&((\"object\"===S.context||!p.this)&&p.error(\"invalid object key\"),p=p.properties[0].name,S=new o(p,S,\"object\")),p===S)if(S.shouldCache()){var O=S.base.cache(n),M=_slicedToArray(O,2);p=M[0],k=M[1],p instanceof _&&(p=new ct(p.value)),S=new o(p,k,\"object\")}else if(p instanceof Pt&&p.base instanceof m)if(S.base.value.shouldCache()){var D=S.base.value.cache(n),P=_slicedToArray(D,2);p=P[0],k=P[1],p instanceof _&&(p=new m(p.value)),S=new o(p,k,\"object\")}else S=new o(p,S.base.value,\"object\");else\"function\"==typeof S.bareLiteral&&S.bareLiteral(_)||(S=new o(S,S,\"object\"));a&&r.push(this.makeCode(a)),(A=r).push.apply(A,_toConsumableArray(S.compileToFragments(n,K))),c&&r.push(this.makeCode(c))}return r.push(this.makeCode(f?\"\":\"\\n\"+this.tab)),r=this.wrapInBraces(r),this.front?this.wrapInParentheses(r):r}},{key:\"assigns\",value:function(t){var n,r,i,s;for(s=this.properties,n=0,r=s.length;n<r;n++)if(i=s[n],i.assigns(t))return!0;return!1}},{key:\"eachName\",value:function(t){var n,r,i,s,u;for(s=this.properties,u=[],n=0,r=s.length;n<r;n++)i=s[n],i instanceof o&&\"object\"===i.context&&(i=i.value),i=i.unwrapAll(),null==i.eachName?u.push(void 0):u.push(i.eachName(t));return u}},{key:\"compileSpread\",value:function(n){var r,i,s,o,u,a,f,l,c;for(f=this.properties,c=[],a=[],l=[],i=function(){if(a.length&&l.push(new t(a)),c.length){var e;(e=l).push.apply(e,_toConsumableArray(c))}return c=[],a=[]},s=0,o=f.length;s<o;s++)u=f[s],u instanceof bt?(c.push(new Pt(u.name)),i()):a.push(u);return i(),l[0]instanceof t||l.unshift(new t),r=new Pt(new G(an(\"_extends\",n))),(new h(r,l)).compileToFragments(n)}},{key:\"compileCSXAttributes\",value:function(t){var n,r,i,s,o,u,a;for(a=this.properties,n=[],r=i=0,o=a.length;i<o;r=++i){var f;u=a[r],u.csx=!0,s=r===a.length-1?\"\":\" \",u instanceof bt&&(u=new G(\"{\"+u.compile(t)+\"}\")),(f=n).push.apply(f,_toConsumableArray(u.compileToFragments(t,K))),n.push(this.makeCode(s))}return this.front?this.wrapInParentheses(n):n}}]),t}(a);return e.prototype.children=[\"properties\"],e}.call(this),e.Arr=s=function(){var e=function(e){function n(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1];_classCallCheck(this,n);var r=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.lhs=t,r.objects=e||[],r}return _inherits(n,e),_createClass(n,[{key:\"hasElision\",value:function(){var t,n,r,i;for(i=this.objects,t=0,n=i.length;t<n;t++)if(r=i[t],r instanceof g)return!0;return!1}},{key:\"isAssignable\",value:function(){var t,n,r,i,s;if(!this.objects.length)return!1;for(s=this.objects,t=n=0,r=s.length;n<r;t=++n){if(i=s[t],i instanceof bt&&t+1!==this.objects.length)return!1;if(!i.isAssignable()||!!i.isAtomic&&!i.isAtomic())return!1}return!0}},{key:\"shouldCache\",value:function(){return!this.isAssignable()}},{key:\"compileNode\",value:function(r){var i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k;if(!this.objects.length)return[this.makeCode(\"[]\")];for(r.indent+=Ct,a=function(e){return\",\"===Xt(e).trim()},x=!1,i=[],C=this.objects,E=h=0,v=C.length;h<v;E=++h)w=C[E],k=w.unwrapAll(),k.comments&&0===k.comments.filter(function(e){return!e.here}).length&&(k.includeCommentFragments=Bt),this.lhs&&(k instanceof n||k instanceof ot)&&(k.lhs=!0);for(s=function(){var e,t,n,i;for(n=this.objects,i=[],e=0,t=n.length;e<t;e++)w=n[e],i.push(w.compileToFragments(r,V));return i}.call(this),S=s.length,l=!1,c=p=0,m=s.length;p<m;c=++p){var L;for(f=s[c],d=0,g=f.length;d<g;d++)o=f[d],o.isHereComment?o.code=o.code.trim():0!==c&&!1===l&&Vt(o)&&(l=!0);0!==c&&x&&(!a(f)||c===S-1)&&i.push(this.makeCode(\", \")),x=x||!a(f),(L=i).push.apply(L,_toConsumableArray(f))}if(l||0<=t.call(Xt(i),\"\\n\")){for(u=T=0,y=i.length;T<y;u=++T)o=i[u],o.isHereComment?o.code=en(o.code,r.indent,!1)+\"\\n\"+r.indent:\", \"===o.code&&(null==o||!o.isElision)&&(o.code=\",\\n\"+r.indent);i.unshift(this.makeCode(\"[\\n\"+r.indent)),i.push(this.makeCode(\"\\n\"+this.tab+\"]\"))}else{for(N=0,b=i.length;N<b;N++)o=i[N],o.isHereComment&&(o.code+=\" \");i.unshift(this.makeCode(\"[\")),i.push(this.makeCode(\"]\"))}return i}},{key:\"assigns\",value:function(t){var n,r,i,s;for(s=this.objects,n=0,r=s.length;n<r;n++)if(i=s[n],i.assigns(t))return!0;return!1}},{key:\"eachName\",value:function(t){var n,r,i,s,o;for(s=this.objects,o=[],n=0,r=s.length;n<r;n++)i=s[n],i=i.unwrapAll(),o.push(i.eachName(t));return o}}]),n}(a);return e.prototype.children=[\"objects\"],e}.call(this),e.Class=p=function(){var e=function(e){function s(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:new f;_classCallCheck(this,s);var r=_possibleConstructorReturn(this,(s.__proto__||Object.getPrototypeOf(s)).call(this));return r.variable=e,r.parent=t,r.body=n,r}return _inherits(s,e),_createClass(s,[{key:\"compileNode\",value:function(t){var n,r,i;if(this.name=this.determineName(),n=this.walkBody(),this.parent instanceof Pt&&!this.parent.hasProperties()&&(i=this.parent.base.value),this.hasNameClash=null!=this.name&&this.name===i,r=this,n||this.hasNameClash?r=new y(r,n):null==this.name&&t.level===K&&(r=new ft(r)),this.boundMethods.length&&this.parent&&(null==this.variable&&(this.variable=new _(t.scope.freeVariable(\"_class\"))),null==this.variableRef)){var s=this.variable.cache(t),u=_slicedToArray(s,2);this.variable=u[0],this.variableRef=u[1]}this.variable&&(r=new o(this.variable,r,null,{moduleDeclaration:this.moduleDeclaration})),this.compileNode=this.compileClassDeclaration;try{return r.compileToFragments(t)}finally{delete this.compileNode}}},{key:\"compileClassDeclaration\",value:function(t){var n,r,i;if((this.externalCtor||this.boundMethods.length)&&null==this.ctor&&(this.ctor=this.makeDefaultConstructor()),null!=(n=this.ctor)&&(n.noReturn=!0),this.boundMethods.length&&this.proxyBoundMethods(),t.indent+=Ct,i=[],i.push(this.makeCode(\"class \")),this.name&&i.push(this.makeCode(this.name)),null!=(null==(r=this.variable)?void 0:r.comments)&&this.compileCommentFragments(t,this.variable,i),this.name&&i.push(this.makeCode(\" \")),this.parent){var s;(s=i).push.apply(s,[this.makeCode(\"extends \")].concat(_toConsumableArray(this.parent.compileToFragments(t)),[this.makeCode(\" \")]))}if(i.push(this.makeCode(\"{\")),!this.body.isEmpty()){var o;this.body.spaced=!0,i.push(this.makeCode(\"\\n\")),(o=i).push.apply(o,_toConsumableArray(this.body.compileToFragments(t,K))),i.push(this.makeCode(\"\\n\"+this.tab))}return i.push(this.makeCode(\"}\")),i}},{key:\"determineName\",value:function(){var n,s,o,u,a,f,l;return this.variable?(f=this.variable.properties,n=r.call(f,-1),s=_slicedToArray(n,1),l=s[0],n,a=l?l instanceof i&&l.name:this.variable.base,a instanceof _||a instanceof ct)?(u=a.value,l||(o=Qt(u),o&&this.variable.error(o)),0<=t.call(z,u)?\"_\"+u:u):null:null}},{key:\"walkBody\",value:function(){var t,r,i,s,o,u,a,l,c,h,p,v,m,g,y,b,w,E;for(this.ctor=null,this.boundMethods=[],i=null,l=[],o=this.body.expressions,a=0,w=o.slice(),h=0,v=w.length;h<v;h++)if(s=w[h],s instanceof Pt&&s.isObject(!0)){for(y=s.base.properties,u=[],r=0,E=0,b=function(){if(r>E)return u.push(new Pt(new ot(y.slice(E,r),!0)))};t=y[r];)(c=this.addInitializerExpression(t))&&(b(),u.push(c),l.push(c),E=r+1),r++;b(),n.apply(o,[a,a-a+1].concat(u)),u,a+=u.length}else(c=this.addInitializerExpression(s))&&(l.push(c),o[a]=c),a+=1;for(p=0,m=l.length;p<m;p++)g=l[p],g instanceof d&&(g.ctor?(this.ctor&&g.error(\"Cannot define more than one constructor in a class\"),this.ctor=g):g.isStatic&&g.bound?g.context=this.name:g.bound&&this.boundMethods.push(g));if(l.length!==o.length)return this.body.expressions=function(){var e,t,n;for(n=[],e=0,t=l.length;e<t;e++)s=l[e],n.push(s.hoist());return n}(),new f(o)}},{key:\"addInitializerExpression\",value:function(t){return t.unwrapAll()instanceof lt?t:this.validInitializerMethod(t)?this.addInitializerMethod(t):null}},{key:\"validInitializerMethod\",value:function(t){return t instanceof o&&t.value instanceof d&&(\"object\"===t.context&&!t.variable.hasProperties()||t.variable.looksStatic(this.name)&&(this.name||!t.value.bound))}},{key:\"addInitializerMethod\",value:function(t){var n,r,s;return s=t.variable,n=t.value,n.isMethod=!0,n.isStatic=s.looksStatic(this.name),n.isStatic?n.name=s.properties[0]:(r=s.base,n.name=new(r.shouldCache()?R:i)(r),n.name.updateLocationDataIfMissing(r.locationData),\"constructor\"===r.value&&(n.ctor=this.parent?\"derived\":\"base\"),n.bound&&n.ctor&&n.error(\"Cannot define a constructor as a bound (fat arrow) function\")),n}},{key:\"makeDefaultConstructor\",value:function(){var t,n,r;return r=this.addInitializerMethod(new o(new Pt(new ct(\"constructor\")),new d)),this.body.unshift(r),this.parent&&r.body.push(new Tt(new xt,[new bt(new _(\"arguments\"))])),this.externalCtor&&(n=new Pt(this.externalCtor,[new i(new ct(\"apply\"))]),t=[new At,new _(\"arguments\")],r.body.push(new h(n,t)),r.body.makeReturn()),r}},{key:\"proxyBoundMethods\",value:function(){var t,n;return this.ctor.thisAssignments=function(){var e,r,s,u;for(s=this.boundMethods,u=[],e=0,r=s.length;e<r;e++)t=s[e],this.parent&&(t.classVariable=this.variableRef),n=new Pt(new At,[t.name]),u.push(new o(n,new h(new Pt(n,[new i(new ct(\"bind\"))]),[new At])));return u}.call(this),null}}]),s}(a);return e.prototype.children=[\"variable\",\"parent\",\"body\"],e}.call(this),e.ExecutableClassBody=y=function(){var e=function(e){function t(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:new f;_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.class=e,r.body=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r,s,u,a,f,l,c,p,v,m,g;return(l=this.body.jumps())&&l.error(\"Class bodies cannot contain pure statements\"),(s=this.body.contains(Jt))&&s.error(\"Class bodies shouldn't reference arguments\"),p=[],r=[new At],g=new d(p,this.body),c=new ft(new h(new Pt(g,[new i(new ct(\"call\"))]),r)),this.body.spaced=!0,t.classScope=g.makeScope(t.scope),this.name=null==(m=this.class.name)?t.classScope.freeVariable(this.defaultClassVariableName):m,f=new _(this.name),u=this.walkBody(),this.setContext(),this.class.hasNameClash&&(v=new _(t.classScope.freeVariable(\"superClass\")),g.params.push(new at(v)),r.push(this.class.parent),this.class.parent=v),this.externalCtor&&(a=new _(t.classScope.freeVariable(\"ctor\",{reserve:!1})),this.class.externalCtor=a,this.externalCtor.variable.base=a),this.name===this.class.name?this.body.expressions.unshift(this.class):this.body.expressions.unshift(new o(new _(this.name),this.class)),(n=this.body.expressions).unshift.apply(n,_toConsumableArray(u)),this.body.push(f),c.compileToFragments(t)}},{key:\"walkBody\",value:function(){var t=this,n,r,i;for(n=[],i=0;(r=this.body.expressions[i])&&!!(r instanceof Pt&&r.isString());)if(r.hoisted)i++;else{var s;(s=n).push.apply(s,_toConsumableArray(this.body.expressions.splice(i,1)))}return this.traverseChildren(!1,function(e){var n,r,i,s,u,a;if(e instanceof p||e instanceof M)return!1;if(n=!0,e instanceof f){for(a=e.expressions,r=i=0,s=a.length;i<s;r=++i)u=a[r],u instanceof Pt&&u.isObject(!0)?(n=!1,e.expressions[r]=t.addProperties(u.base.properties)):u instanceof o&&u.variable.looksStatic(t.name)&&(u.value.isStatic=!0);e.expressions=Wt(e.expressions)}return n}),n}},{key:\"setContext\",value:function(){var t=this;return this.body.traverseChildren(!1,function(e){return e instanceof At?e.value=t.name:e instanceof d&&e.bound&&e.isStatic?e.context=t.name:void 0})}},{key:\"addProperties\",value:function(t){var n,r,s,u,a,f,l;return a=function(){var e,a,c;for(c=[],e=0,a=t.length;e<a;e++)n=t[e],l=n.variable,r=null==l?void 0:l.base,f=n.value,delete n.context,\"constructor\"===r.value?(f instanceof d&&r.error(\"constructors must be defined at the top level of a class body\"),n=this.externalCtor=new o(new Pt,f)):n.variable.this?n.value instanceof d&&(n.value.isStatic=!0):(s=new(r.shouldCache()?R:i)(r),u=new i(new ct(\"prototype\")),l=new Pt(new At,[u,s]),n.variable=l),c.push(n);return c}.call(this),qt(a)}}]),t}(a);return e.prototype.children=[\"class\",\"body\"],e.prototype.defaultClassVariableName=\"_Class\",e}.call(this),e.ModuleDeclaration=Y=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.clause=e,r.source=n,r.checkSource(),r}return _inherits(t,e),_createClass(t,[{key:\"checkSource\",value:function(){if(null!=this.source&&this.source instanceof St)return this.source.error(\"the name of the module to be imported from must be an uninterpolated string\")}},{key:\"checkScope\",value:function(t,n){if(0!==t.indent.length)return this.error(n+\" statements must be at top-level scope\")}}]),t}(a);return e.prototype.children=[\"clause\",\"source\"],e.prototype.isStatement=Bt,e.prototype.jumps=kt,e.prototype.makeReturn=kt,e}.call(this),e.ImportDeclaration=H=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r;if(this.checkScope(t,\"import\"),t.importedSymbols=[],n=[],n.push(this.makeCode(this.tab+\"import \")),null!=this.clause){var i;(i=n).push.apply(i,_toConsumableArray(this.clause.compileNode(t)))}return null!=(null==(r=this.source)?void 0:r.value)&&(null!==this.clause&&n.push(this.makeCode(\" from \")),n.push(this.makeCode(this.source.value))),n.push(this.makeCode(\";\")),n}}]),t}(Y),e.ImportClause=P=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.defaultBinding=e,r.namedImports=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n;if(n=[],null!=this.defaultBinding){var r;(r=n).push.apply(r,_toConsumableArray(this.defaultBinding.compileNode(t))),null!=this.namedImports&&n.push(this.makeCode(\", \"))}if(null!=this.namedImports){var i;(i=n).push.apply(i,_toConsumableArray(this.namedImports.compileNode(t)))}return n}}]),t}(a);return e.prototype.children=[\"defaultBinding\",\"namedImports\"],e}.call(this),e.ExportDeclaration=S=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r;return this.checkScope(t,\"export\"),n=[],n.push(this.makeCode(this.tab+\"export \")),this instanceof x&&n.push(this.makeCode(\"default \")),!(this instanceof x)&&(this.clause instanceof o||this.clause instanceof p)&&(this.clause instanceof p&&!this.clause.variable&&this.clause.error(\"anonymous classes cannot be exported\"),n.push(this.makeCode(\"var \")),this.clause.moduleDeclaration=\"export\"),n=null!=this.clause.body&&this.clause.body instanceof f?n.concat(this.clause.compileToFragments(t,K)):n.concat(this.clause.compileNode(t)),null!=(null==(r=this.source)?void 0:r.value)&&n.push(this.makeCode(\" from \"+this.source.value)),n.push(this.makeCode(\";\")),n}}]),t}(Y),e.ExportNamedDeclaration=T=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(S),e.ExportDefaultDeclaration=x=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(S),e.ExportAllDeclaration=E=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(S),e.ModuleSpecifierList=et=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.specifiers=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r,i,s,o,u,a;if(n=[],t.indent+=Ct,r=function(){var e,n,r,i;for(r=this.specifiers,i=[],e=0,n=r.length;e<n;e++)a=r[e],i.push(a.compileToFragments(t,V));return i}.call(this),0!==this.specifiers.length){for(n.push(this.makeCode(\"{\\n\"+t.indent)),s=o=0,u=r.length;o<u;s=++o){var f;i=r[s],s&&n.push(this.makeCode(\",\\n\"+t.indent)),(f=n).push.apply(f,_toConsumableArray(i))}n.push(this.makeCode(\"\\n}\"))}else n.push(this.makeCode(\"{}\"));return n}}]),t}(a);return e.prototype.children=[\"specifiers\"],e}.call(this),e.ImportSpecifierList=I=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(et),e.ExportSpecifierList=C=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(et),e.ModuleSpecifier=Z=function(){var e=function(e){function t(e,n,r){_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),s,o;if(i.original=e,i.alias=n,i.moduleDeclarationType=r,i.original.comments||(null==(s=i.alias)?void 0:s.comments)){if(i.comments=[],i.original.comments){var u;(u=i.comments).push.apply(u,_toConsumableArray(i.original.comments))}if(null==(o=i.alias)?void 0:o.comments){var a;(a=i.comments).push.apply(a,_toConsumableArray(i.alias.comments))}}return i.identifier=null==i.alias?i.original.value:i.alias.value,i}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n;return t.scope.find(this.identifier,this.moduleDeclarationType),n=[],n.push(this.makeCode(this.original.value)),null!=this.alias&&n.push(this.makeCode(\" as \"+this.alias.value)),n}}]),t}(a);return e.prototype.children=[\"original\",\"alias\"],e}.call(this),e.ImportSpecifier=F=function(e){function n(e,t){return _classCallCheck(this,n),_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e,t,\"import\"))}return _inherits(n,e),_createClass(n,[{key:\"compileNode\",value:function(r){var i;return(i=this.identifier,0<=t.call(r.importedSymbols,i))||r.scope.check(this.identifier)?this.error(\"'\"+this.identifier+\"' has already been declared\"):r.importedSymbols.push(this.identifier),_get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"compileNode\",this).call(this,r)}}]),n}(Z),e.ImportDefaultSpecifier=B=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(F),e.ImportNamespaceSpecifier=j=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),t}(F),e.ExportSpecifier=N=function(e){function t(e,n){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,\"export\"))}return _inherits(t,e),t}(Z),e.Assign=o=function(){var e=function(e){function r(e,t,n){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};_classCallCheck(this,r);var s=_possibleConstructorReturn(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return s.variable=e,s.value=t,s.context=n,s.param=i.param,s.subpattern=i.subpattern,s.operatorToken=i.operatorToken,s.moduleDeclaration=i.moduleDeclaration,s}return _inherits(r,e),_createClass(r,[{key:\"isStatement\",value:function(n){return(null==n?void 0:n.level)===K&&null!=this.context&&(this.moduleDeclaration||0<=t.call(this.context,\"?\"))}},{key:\"checkAssignability\",value:function(t,n){if(Object.prototype.hasOwnProperty.call(t.scope.positions,n.value)&&\"import\"===t.scope.variables[t.scope.positions[n.value]].type)return n.error(\"'\"+n.value+\"' is read-only\")}},{key:\"assigns\",value:function(t){return this[\"object\"===this.context?\"value\":\"variable\"].assigns(t)}},{key:\"unfoldSoak\",value:function(t){return on(t,this,\"variable\")}},{key:\"compileNode\",value:function(t){var r=this,i,s,o,u,a,f,l,c,h,v,m,g,y,b,w;if(u=this.variable instanceof Pt,u){if(this.variable.param=this.param,this.variable.isArray()||this.variable.isObject()){if(this.variable.base.lhs=!0,o=this.variable.contains(function(e){return e instanceof ot&&e.hasSplat()}),!this.variable.isAssignable()||this.variable.isArray()&&o)return this.compileDestructuring(t);if(this.variable.isObject()&&o&&(f=this.compileObjectDestruct(t)),f)return f}if(this.variable.isSplice())return this.compileSplice(t);if(\"||=\"===(h=this.context)||\"&&=\"===h||\"?=\"===h)return this.compileConditional(t);if(\"**=\"===(v=this.context)||\"//=\"===v||\"%%=\"===v)return this.compileSpecialMath(t)}if(this.context||(w=this.variable.unwrapAll(),!w.isAssignable()&&this.variable.error(\"'\"+this.variable.compile(t)+\"' can't be assigned\"),w.eachName(function(e){var n,i,s;if(\"function\"!=typeof e.hasProperties||!e.hasProperties())return(s=Qt(e.value),s&&e.error(s),r.checkAssignability(t,e),r.moduleDeclaration)?t.scope.add(e.value,r.moduleDeclaration):r.param?t.scope.add(e.value,\"alwaysDeclare\"===r.param?\"var\":\"param\"):(t.scope.find(e.value),e.comments&&!t.scope.comments[e.value]&&!(r.value instanceof p)&&e.comments.every(function(e){return e.here&&!e.multiline}))?(i=new _(e.value),i.comments=e.comments,n=[],r.compileCommentFragments(t,i,n),t.scope.comments[e.value]=n):void 0})),this.value instanceof d)if(this.value.isStatic)this.value.name=this.variable.properties[0];else if(2<=(null==(m=this.variable.properties)?void 0:m.length)){var E,S,x,T;g=this.variable.properties,E=g,S=_toArray(E),l=S.slice(0),E,x=n.call(l,-2),T=_slicedToArray(x,2),c=T[0],a=T[1],x,\"prototype\"===(null==(y=c.name)?void 0:y.value)&&(this.value.name=a)}return(this.csx&&(this.value.base.csxAttribute=!0),b=this.value.compileToFragments(t,V),s=this.variable.compileToFragments(t,V),\"object\"===this.context)?(this.variable.shouldCache()&&(s.unshift(this.makeCode(\"[\")),s.push(this.makeCode(\"]\"))),s.concat(this.makeCode(this.csx?\"=\":\": \"),b)):(i=s.concat(this.makeCode(\" \"+(this.context||\"=\")+\" \"),b),t.level>V||u&&this.variable.base instanceof ot&&!this.nestedLhs&&!0!==this.param?this.wrapInParentheses(i):i)}},{key:\"compileObjectDestruct\",value:function(t){var n,o,u,a,l,c,p,d,v,m,g,y;if(o=function(e){var n;if(e instanceof r){var i=e.variable.cache(t),s=_slicedToArray(i,2);return e.variable=s[0],n=s[1],n}return e},u=function(e){var n,i;return i=o(e),n=e instanceof r&&e.variable!==i,n||!i.isAssignable()?i:new G(\"'\"+i.compileWithoutComments(t)+\"'\")},v=function(n,a){var f,l,c,h,p,d,m,g,y,b,w;for(b=[],w=void 0,null==a.properties&&(a=new Pt(a)),l=c=0,h=n.length;c<h;l=++c)if(y=n[l],m=d=p=null,y instanceof r){if(\"function\"==typeof (f=y.value).isObject?f.isObject():void 0){if(\"object\"!==y.context)continue;p=y.value.base.properties}else if(y.value instanceof r&&y.value.variable.isObject()){p=y.value.variable.base.properties;var E=y.value.value.cache(t),S=_slicedToArray(E,2);y.value.value=S[0],m=S[1]}if(p){var x;d=new Pt(a.base,a.properties.concat([new i(o(y))])),m&&(d=new Pt(new ut(\"?\",d,m))),(x=b).push.apply(x,_toConsumableArray(v(p,d)))}}else y instanceof bt&&(null!=w&&y.error(\"multiple rest elements are disallowed in object destructuring\"),w=l,b.push({name:y.name.unwrapAll(),source:a,excludeProps:new s(function(){var e,t,r;for(r=[],e=0,t=n.length;e<t;e++)g=n[e],g!==y&&r.push(u(g));return r}())}));return null!=w&&n.splice(w,1),b},y=this.value.shouldCache()?new _(t.scope.freeVariable(\"ref\",{reserve:!1})):this.value.base,p=v(this.variable.base.properties,y),!(p&&0<p.length))return!1;var b=this.value.cache(t),w=_slicedToArray(b,2);for(this.value=w[0],g=w[1],d=new f([this]),a=0,l=p.length;a<l;a++)c=p[a],m=new h(new Pt(new G(an(\"objectWithoutKeys\",t))),[c.source,c.excludeProps]),d.push(new r(new Pt(c.name),m,null,{param:this.param?\"alwaysDeclare\":null}));return n=d.compileToFragments(t),t.level===K&&(n.shift(),n.pop()),n}},{key:\"compileDestructuring\",value:function(n){var o=this,u,a,f,l,c,p,d,v,m,y,b,E,S,x,T,N,C,k,L,A,O,M,D,P,H,B,j,F,I,q,U,z,W,X;if(U=n.level===K,z=this.value,O=this.variable.base.objects,M=O.length,0===M)return f=z.compileToFragments(n),n.level>=$?this.wrapInParentheses(f):f;var J=O,Q=_slicedToArray(J,1);return L=Q[0],1===M&&L instanceof w&&L.error(\"Destructuring assignment has no target\"),I=function(){var e,t,n;for(n=[],E=e=0,t=O.length;e<t;E=++e)L=O[E],L instanceof bt&&n.push(E);return n}(),v=function(){var e,t,n;for(n=[],E=e=0,t=O.length;e<t;E=++e)L=O[E],L instanceof w&&n.push(E);return n}(),q=[].concat(_toConsumableArray(I),_toConsumableArray(v)),1<q.length&&O[q.sort()[1]].error(\"multiple splats/expansions are disallowed in an assignment\"),N=0<(null==I?void 0:I.length),x=0<(null==v?void 0:v.length),T=this.variable.isObject(),S=this.variable.isArray(),W=z.compileToFragments(n,V),X=Xt(W),a=[],(!(z.unwrap()instanceof _)||this.variable.assigns(X))&&(P=n.scope.freeVariable(\"ref\"),a.push([this.makeCode(P+\" = \")].concat(_toConsumableArray(W))),W=[this.makeCode(P)],X=P),F=function(e){return function(t,r){var s=2<arguments.length&&void 0!==arguments[2]&&arguments[2],o,u;return o=[new _(t),new st(r)],s&&o.push(new st(s)),u=new Pt(new _(an(e,n)),[new i(new ct(\"call\"))]),new Pt(new h(u,o))}},l=F(\"slice\"),c=F(\"splice\"),b=function(e){var t,n,r;for(r=[],E=t=0,n=e.length;t<n;E=++t)L=e[E],L.base instanceof ot&&L.base.hasSplat()&&r.push(E);return r},y=function(e){var t,n,i;for(i=[],E=t=0,n=e.length;t<n;E=++t)L=e[E],L instanceof r&&\"object\"===L.context&&i.push(E);return i},A=function(e){var t,n;for(t=0,n=e.length;t<n;t++)if(L=e[t],!L.isAssignable())return!0;return!1},p=function(e){return b(e).length||y(e).length||A(e)||1===M},k=function(e,s,u){var f,c,h,p,d,v,m,y;for(v=b(e),m=[],E=h=0,p=e.length;h<p;E=++h)if(L=e[E],!(L instanceof g)){if(L instanceof r&&\"object\"===L.context){var w=L;if(c=w.variable.base,s=w.value,s instanceof r){var S=s;s=S.variable}c=s.this?s.properties[0].name:new ct(s.unwrap().value),f=c.unwrap()instanceof ct,y=new Pt(z,[new(f?i:R)(c)])}else s=function(){switch(!1){case!(L instanceof bt):return new Pt(L.name);case 0>t.call(v,E):return new Pt(L.base);default:return L}}(),y=function(){switch(!1){case!(L instanceof bt):return l(u,E);default:return new Pt(new G(u),[new R(new st(E))])}}();d=Qt(s.unwrap().value),d&&s.error(d),m.push(a.push((new r(s,y,null,{param:o.param,subpattern:!0})).compileToFragments(n,V)))}return m},u=function(e,t,i){var u;return t=new Pt(new s(e,!0)),u=i instanceof Pt?i:new Pt(new G(i)),a.push((new r(t,u,null,{param:o.param,subpattern:!0})).compileToFragments(n,V))},D=function(e,t,n){return p(e)?k(e,t,n):u(e,t,n)},q.length?(d=q[0],C=O.slice(0,d+(N?1:0)),j=O.slice(d+1),0!==C.length&&D(C,W,X),0!==j.length&&(H=function(){switch(!1){case!N:return c(O[d].unwrapAll().value,-1*j.length);case!x:return l(X,-1*j.length)}}(),p(j)&&(B=H,H=n.scope.freeVariable(\"ref\"),a.push([this.makeCode(H+\" = \")].concat(_toConsumableArray(B.compileToFragments(n,V))))),D(j,W,H))):D(O,W,X),U||this.subpattern||a.push(W),m=this.joinFragmentArrays(a,\", \"),n.level<V?m:this.wrapInParentheses(m)}},{key:\"compileConditional\",value:function(n){var i=this.variable.cacheReference(n),s=_slicedToArray(i,2),o,u,a;return u=s[0],a=s[1],u.properties.length||!(u.base instanceof G)||u.base instanceof At||n.scope.check(u.base.value)||this.variable.error('the variable \"'+u.base.value+\"\\\" can't be assigned with \"+this.context+\" because it has not been declared before\"),0<=t.call(this.context,\"?\")?(n.isExistentialEquals=!0,(new D(new b(u),a,{type:\"if\"})).addElse(new r(a,this.value,\"=\")).compileToFragments(n)):(o=(new ut(this.context.slice(0,-1),u,new r(a,this.value,\"=\"))).compileToFragments(n),n.level<=V?o:this.wrapInParentheses(o))}},{key:\"compileSpecialMath\",value:function(t){var n=this.variable.cacheReference(t),i=_slicedToArray(n,2),s,o;return s=i[0],o=i[1],(new r(s,new ut(this.context.slice(0,-1),o,this.value))).compileToFragments(t)}},{key:\"compileSplice\",value:function(t){var n=this.variable.properties.pop(),r=n.range,i,s,o,u,a,f,l,c,h,p;if(o=r.from,l=r.to,s=r.exclusive,c=this.variable.unwrapAll(),c.comments&&(Zt(c,this),delete this.variable.comments),f=this.variable.compile(t),o){var d=this.cacheToCodeFragments(o.cache(t,$)),v=_slicedToArray(d,2);u=v[0],a=v[1]}else u=a=\"0\";l?(null==o?void 0:o.isNumber())&&l.isNumber()?(l=l.compile(t)-a,!s&&(l+=1)):(l=l.compile(t,W)+\" - \"+a,!s&&(l+=\" + 1\")):l=\"9e9\";var m=this.value.cache(t,V),g=_slicedToArray(m,2);return h=g[0],p=g[1],i=[].concat(this.makeCode(an(\"splice\",t)+\".apply(\"+f+\", [\"+u+\", \"+l+\"].concat(\"),h,this.makeCode(\")), \"),p),t.level>K?this.wrapInParentheses(i):i}},{key:\"eachName\",value:function(t){return this.variable.unwrapAll().eachName(t)}}]),r}(a);return e.prototype.children=[\"variable\",\"value\"],e.prototype.isAssignable=Bt,e}.call(this),e.FuncGlyph=A=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.glyph=e,n}return _inherits(t,e),t}(a),e.Code=d=function(){var e=function(e){function n(e,t,r,i){_classCallCheck(this,n);var s=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),o;return s.funcGlyph=r,s.paramStart=i,s.params=e||[],s.body=t||new f,s.bound=\"=>\"===(null==(o=s.funcGlyph)?void 0:o.glyph),s.isGenerator=!1,s.isAsync=!1,s.isMethod=!1,s.body.traverseChildren(!1,function(e){if((e instanceof ut&&e.isYield()||e instanceof jt)&&(s.isGenerator=!0),(e instanceof ut&&e.isAwait()||e instanceof u)&&(s.isAsync=!0),s.isGenerator&&s.isAsync)return e.error(\"function can't contain both yield and await\")}),s}return _inherits(n,e),_createClass(n,[{key:\"isStatement\",value:function(){return this.isMethod}},{key:\"makeScope\",value:function(t){return new gt(t,this.body,this)}},{key:\"compileNode\",value:function(n){var r,i,u,a,f,l,c,p,d,v,m,g,y,b,E,S,x,T,N,C,k,L,A,O,M,P,H,B,j,F,I,q,R,U,X,V,$,J,K,Q,Y,Z,et;for(this.ctor&&(this.isAsync&&this.name.error(\"Class constructor may not be async\"),this.isGenerator&&this.name.error(\"Class constructor may not be a generator\")),this.bound&&((null==(F=n.scope.method)?void 0:F.bound)&&(this.context=n.scope.method.context),!this.context&&(this.context=\"this\")),n.scope=Rt(n,\"classScope\")||this.makeScope(n.scope),n.scope.shared=Rt(n,\"sharedScope\"),n.indent+=Ct,delete n.bare,delete n.isExistentialEquals,H=[],p=[],Y=null==(I=null==(q=this.thisAssignments)?void 0:q.slice())?[]:I,B=[],m=!1,v=!1,M=[],this.eachParamName(function(e,r,i,s){var u,a;if(0<=t.call(M,e)&&r.error(\"multiple parameters named '\"+e+\"'\"),M.push(e),r.this)return e=r.properties[0].name.value,0<=t.call(z,e)&&(e=\"_\"+e),a=new _(n.scope.freeVariable(e,{reserve:!1})),u=i.name instanceof ot&&s instanceof o&&\"=\"===s.operatorToken.value?new o(new _(e),a,\"object\"):a,i.renameParam(r,u),Y.push(new o(r,a))}),R=this.params,g=b=0,x=R.length;b<x;g=++b)O=R[g],O.splat||O instanceof w?(m?O.error(\"only one splat or expansion parameter is allowed per function definition\"):O instanceof w&&1===this.params.length&&O.error(\"an expansion parameter cannot be the only parameter in a function definition\"),m=!0,O.splat?(O.name instanceof s?(Q=n.scope.freeVariable(\"arg\"),H.push(j=new Pt(new _(Q))),p.push(new o(new Pt(O.name),j))):(H.push(j=O.asReference(n)),Q=Xt(j.compileNodeWithoutComments(n))),O.shouldCache()&&p.push(new o(new Pt(O.name),j))):(Q=n.scope.freeVariable(\"args\"),H.push(new Pt(new _(Q)))),n.scope.parameter(Q)):((O.shouldCache()||v)&&(O.assignedInBody=!0,v=!0,null==O.value?p.push(new o(new Pt(O.name),O.asReference(n),null,{param:\"alwaysDeclare\"})):(c=new ut(\"===\",O,new Dt),y=new o(new Pt(O.name),O.value),p.push(new D(c,y)))),m?(B.push(O),null!=O.value&&!O.shouldCache()&&(c=new ut(\"===\",O,new Dt),y=new o(new Pt(O.name),O.value),p.push(new D(c,y))),null!=(null==(U=O.name)?void 0:U.value)&&n.scope.add(O.name.value,\"var\",!0)):(j=O.shouldCache()?O.asReference(n):null==O.value||O.assignedInBody?O:new o(new Pt(O.name),O.value,null,{param:!0}),O.name instanceof s||O.name instanceof ot?(O.name.lhs=!0,O.name instanceof ot&&O.name.hasSplat()?(Q=n.scope.freeVariable(\"arg\"),n.scope.parameter(Q),j=new Pt(new _(Q)),p.push(new o(new Pt(O.name),j,null,{param:\"alwaysDeclare\"})),null!=O.value&&!O.assignedInBody&&(j=new o(j,O.value,null,{param:!0}))):!O.shouldCache()&&O.name.eachName(function(e){return n.scope.parameter(e.value)})):(P=null==O.value?j:O,n.scope.parameter(Xt(P.compileToFragmentsWithoutComments(n)))),H.push(j)));if(0!==B.length&&p.unshift(new o(new Pt(new s([new bt(new _(Q))].concat(_toConsumableArray(function(){var e,t,r;for(r=[],e=0,t=B.length;e<t;e++)O=B[e],r.push(O.asReference(n));return r}())))),new Pt(new _(Q)))),Z=this.body.isEmpty(),!this.expandCtorSuper(Y)){var tt;(tt=this.body.expressions).unshift.apply(tt,_toConsumableArray(Y))}for((r=this.body.expressions).unshift.apply(r,_toConsumableArray(p)),this.isMethod&&this.bound&&!this.isStatic&&this.classVariable&&(f=new Pt(new G(an(\"boundMethodCheck\",n))),this.body.expressions.unshift(new h(f,[new Pt(new At),this.classVariable]))),Z||this.noReturn||this.body.makeReturn(),this.bound&&this.isGenerator&&(et=this.body.contains(function(e){return e instanceof ut&&\"yield\"===e.operator}),(et||this).error(\"yield cannot occur inside bound (fat arrow) functions\")),L=[],this.isMethod&&this.isStatic&&L.push(\"static\"),this.isAsync&&L.push(\"async\"),this.isMethod||this.bound?this.isGenerator&&L.push(\"*\"):L.push(\"function\"+(this.isGenerator?\"*\":\"\")),K=[this.makeCode(\"(\")],null!=(null==(X=this.paramStart)?void 0:X.comments)&&this.compileCommentFragments(n,this.paramStart,K),g=E=0,T=H.length;E<T;g=++E){var nt;if(O=H[g],0!==g&&K.push(this.makeCode(\", \")),m&&g===H.length-1&&K.push(this.makeCode(\"...\")),J=n.scope.variables.length,(nt=K).push.apply(nt,_toConsumableArray(O.compileToFragments(n))),J!==n.scope.variables.length){var rt;d=n.scope.variables.splice(J),(rt=n.scope.parent.variables).push.apply(rt,_toConsumableArray(d))}}if(K.push(this.makeCode(\")\")),null!=(null==(V=this.funcGlyph)?void 0:V.comments)){for($=this.funcGlyph.comments,S=0,N=$.length;S<N;S++)l=$[S],l.unshift=!1;this.compileCommentFragments(n,this.funcGlyph,K)}if(this.body.isEmpty()||(a=this.body.compileWithDeclarations(n)),this.isMethod){var it=[n.scope,n.scope.parent];k=it[0],n.scope=it[1],A=this.name.compileToFragments(n),\".\"===A[0].code&&A.shift(),n.scope=k}if(u=this.joinFragmentArrays(function(){var e,t,n;for(n=[],t=0,e=L.length;t<e;t++)C=L[t],n.push(this.makeCode(C));return n}.call(this),\" \"),L.length&&A&&u.push(this.makeCode(\" \")),A){var st;(st=u).push.apply(st,_toConsumableArray(A))}if((i=u).push.apply(i,_toConsumableArray(K)),this.bound&&!this.isMethod&&u.push(this.makeCode(\" =>\")),u.push(this.makeCode(\" {\")),null==a?void 0:a.length){var at;(at=u).push.apply(at,[this.makeCode(\"\\n\")].concat(_toConsumableArray(a),[this.makeCode(\"\\n\"+this.tab)]))}return u.push(this.makeCode(\"}\")),this.isMethod?$t(u,this):this.front||n.level>=W?this.wrapInParentheses(u):u}},{key:\"eachParamName\",value:function(t){var n,r,i,s,o;for(s=this.params,o=[],n=0,r=s.length;n<r;n++)i=s[n],o.push(i.eachName(t));return o}},{key:\"traverseChildren\",value:function(t,r){if(t)return _get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"traverseChildren\",this).call(this,t,r)}},{key:\"replaceInContext\",value:function(t,r){return!!this.bound&&_get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"replaceInContext\",this).call(this,t,r)}},{key:\"expandCtorSuper\",value:function(t){var n=this,r,i,s,o;return!!this.ctor&&(this.eachSuperCall(f.wrap(this.params),function(e){return e.error(\"'super' is not allowed in constructor parameter defaults\")}),o=this.eachSuperCall(this.body,function(e){return\"base\"===n.ctor&&e.error(\"'super' is only allowed in derived class constructors\"),e.expressions=t}),r=t.length&&t.length!==(null==(s=this.thisAssignments)?void 0:s.length),\"derived\"===this.ctor&&!o&&r&&(i=t[0].variable,i.error(\"Can't use @params in derived class constructors without calling super\")),o)}},{key:\"eachSuperCall\",value:function(t,r){var i=this,s;return s=!1,t.traverseChildren(!0,function(e){var t;return e instanceof Tt?(!e.variable.accessor&&(t=e.args.filter(function(e){return!(e instanceof p)&&(!(e instanceof n)||e.bound)}),f.wrap(t).traverseChildren(!0,function(e){if(e.this)return e.error(\"Can't call super with @params in derived class constructors\")})),s=!0,r(e)):e instanceof At&&\"derived\"===i.ctor&&!s&&e.error(\"Can't reference 'this' before calling super in derived class constructors\"),!(e instanceof Tt)&&(!(e instanceof n)||e.bound)}),s}}]),n}(a);return e.prototype.children=[\"params\",\"body\"],e.prototype.jumps=nt,e}.call(this),e.Param=at=function(){var e=function(e){function n(e,t,r){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),s,o;return i.name=e,i.value=t,i.splat=r,s=Qt(i.name.unwrapAll().value),s&&i.name.error(s),i.name instanceof ot&&i.name.generated&&(o=i.name.objects[0].operatorToken,o.error(\"unexpected \"+o.value)),i}return _inherits(n,e),_createClass(n,[{key:\"compileToFragments\",value:function(t){return this.name.compileToFragments(t,V)}},{key:\"compileToFragmentsWithoutComments\",value:function(t){return this.name.compileToFragmentsWithoutComments(t,V)}},{key:\"asReference\",value:function(n){var r,i;return this.reference?this.reference:(i=this.name,i.this?(r=i.properties[0].name.value,0<=t.call(z,r)&&(r=\"_\"+r),i=new _(n.scope.freeVariable(r))):i.shouldCache()&&(i=new _(n.scope.freeVariable(\"arg\"))),i=new Pt(i),i.updateLocationDataIfMissing(this.locationData),this.reference=i)}},{key:\"shouldCache\",value:function(){return this.name.shouldCache()}},{key:\"eachName\",value:function(t){var n=this,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.name,i,s,u,a,f,l,c,h;if(i=function(e){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;return t(\"@\"+e.properties[0].name.value,e,n,r)},r instanceof G)return t(r.value,r,this);if(r instanceof Pt)return i(r);for(h=null==(c=r.objects)?[]:c,s=0,u=h.length;s<u;s++)l=h[s],a=l,l instanceof o&&null==l.context&&(l=l.variable),l instanceof o?(l=l.value instanceof o?l.value.variable:l.value,this.eachName(t,l.unwrap())):l instanceof bt?(f=l.name.unwrap(),t(f.value,f,this)):l instanceof Pt?l.isArray()||l.isObject()?this.eachName(t,l.base):l.this?i(l,a):t(l.base.value,l.base,this):l instanceof g?l:!(l instanceof w)&&l.error(\"illegal parameter \"+l.compile())}},{key:\"renameParam\",value:function(t,n){var r,i;return r=function(e){return e===t},i=function(e,t){var r;return t instanceof ot?(r=e,e.this&&(r=e.properties[0].name),e.this&&r.value===n.value?new Pt(n):new o(new Pt(r),n,\"object\")):n},this.replaceInContext(r,i)}}]),n}(a);return e.prototype.children=[\"name\",\"value\"],e}.call(this),e.Splat=bt=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name=e.compile?e:new G(e),n}return _inherits(t,e),_createClass(t,[{key:\"isAssignable\",value:function(){return this.name.isAssignable()&&(!this.name.isAtomic||this.name.isAtomic())}},{key:\"assigns\",value:function(t){return this.name.assigns(t)}},{key:\"compileNode\",value:function(t){return[this.makeCode(\"...\")].concat(_toConsumableArray(this.name.compileToFragments(t,$)))}},{key:\"unwrap\",value:function(){return this.name}}]),t}(a);return e.prototype.children=[\"name\"],e}.call(this),e.Expansion=w=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(){return this.error(\"Expansion must be used inside a destructuring assignment or parameter list\")}},{key:\"asReference\",value:function(){return this}},{key:\"eachName\",value:function(){}}]),t}(a);return e.prototype.shouldCache=nt,e}.call(this),e.Elision=g=function(){var e=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function(n,r){var i;return i=_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileToFragments\",this).call(this,n,r),i.isElision=!0,i}},{key:\"compileNode\",value:function(){return[this.makeCode(\", \")]}},{key:\"asReference\",value:function(){return this}},{key:\"eachName\",value:function(){}}]),t}(a);return e.prototype.isAssignable=Bt,e.prototype.shouldCache=nt,e}.call(this),e.While=Ht=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.condition=(null==n?void 0:n.invert)?e.invert():e,r.guard=null==n?void 0:n.guard,r}return _inherits(t,e),_createClass(t,[{key:\"makeReturn\",value:function(n){return n?_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"makeReturn\",this).call(this,n):(this.returns=!this.jumps(),this)}},{key:\"addBody\",value:function(t){return this.body=t,this}},{key:\"jumps\",value:function(){var t,n,r,i,s;if(t=this.body.expressions,!t.length)return!1;for(n=0,i=t.length;n<i;n++)if(s=t[n],r=s.jumps({loop:!0}))return r;return!1}},{key:\"compileNode\",value:function(t){var n,r,i,s;return t.indent+=Ct,s=\"\",r=this.body,r.isEmpty()?r=this.makeCode(\"\"):(this.returns&&(r.makeReturn(i=t.scope.freeVariable(\"results\")),s=\"\"+this.tab+i+\" = [];\\n\"),this.guard&&(1<r.expressions.length?r.expressions.unshift(new D((new ft(this.guard)).invert(),new wt(\"continue\"))):this.guard&&(r=f.wrap([new D(this.guard,r)]))),r=[].concat(this.makeCode(\"\\n\"),r.compileToFragments(t,K),this.makeCode(\"\\n\"+this.tab))),n=[].concat(this.makeCode(s+this.tab+\"while (\"),this.condition.compileToFragments(t,J),this.makeCode(\") {\"),r,this.makeCode(\"}\")),this.returns&&n.push(this.makeCode(\"\\n\"+this.tab+\"return \"+i+\";\")),n}}]),t}(a);return e.prototype.children=[\"condition\",\"guard\",\"body\"],e.prototype.isStatement=Bt,e}.call(this),e.Op=ut=function(){var e=function(e){function s(e,t,r,i){var o;_classCallCheck(this,s);var u=_possibleConstructorReturn(this,(s.__proto__||Object.getPrototypeOf(s)).call(this)),a;if(\"in\"===e){var f;return f=new q(t,r),_possibleConstructorReturn(u,f)}if(\"do\"===e){var l;return l=s.prototype.generateDo(t),_possibleConstructorReturn(u,l)}if(\"new\"===e){if((a=t.unwrap())instanceof h&&!a.do&&!a.isNew){var c;return c=a.newInstance(),_possibleConstructorReturn(u,c)}(t instanceof d&&t.bound||t.do)&&(t=new ft(t))}return u.operator=n[e]||e,u.first=t,u.second=r,u.flip=!!i,o=u,_possibleConstructorReturn(u,o)}return _inherits(s,e),_createClass(s,[{key:\"isNumber\",value:function(){var t;return this.isUnary()&&(\"+\"===(t=this.operator)||\"-\"===t)&&this.first instanceof Pt&&this.first.isNumber()}},{key:\"isAwait\",value:function(){return\"await\"===this.operator}},{key:\"isYield\",value:function(){var t;return\"yield\"===(t=this.operator)||\"yield*\"===t}},{key:\"isUnary\",value:function(){return!this.second}},{key:\"shouldCache\",value:function(){return!this.isNumber()}},{key:\"isChainable\",value:function(){var t;return\"<\"===(t=this.operator)||\">\"===t||\">=\"===t||\"<=\"===t||\"===\"===t||\"!==\"===t}},{key:\"invert\",value:function(){var t,n,i,o,u;if(this.isChainable()&&this.first.isChainable()){for(t=!0,n=this;n&&n.operator;)t&&(t=n.operator in r),n=n.first;if(!t)return(new ft(this)).invert();for(n=this;n&&n.operator;)n.invert=!n.invert,n.operator=r[n.operator],n=n.first;return this}return(o=r[this.operator])?(this.operator=o,this.first.unwrap()instanceof s&&this.first.invert(),this):this.second?(new ft(this)).invert():\"!\"===this.operator&&(i=this.first.unwrap())instanceof s&&(\"!\"===(u=i.operator)||\"in\"===u||\"instanceof\"===u)?i:new s(\"!\",this)}},{key:\"unfoldSoak\",value:function(t){var n;return(\"++\"===(n=this.operator)||\"--\"===n||\"delete\"===n)&&on(t,this,\"first\")}},{key:\"generateDo\",value:function(t){var n,r,i,s,u,a,f,l;for(a=[],r=t instanceof o&&(f=t.value.unwrap())instanceof d?f:t,l=r.params||[],i=0,s=l.length;i<s;i++)u=l[i],u.value?(a.push(u.value),delete u.value):a.push(u);return n=new h(t,a),n.do=!0,n}},{key:\"compileNode\",value:function(t){var n,r,i,s,o,u;if(r=this.isChainable()&&this.first.isChainable(),r||(this.first.front=this.front),\"delete\"===this.operator&&t.scope.check(this.first.unwrapAll().value)&&this.error(\"delete operand may not be argument or var\"),(\"--\"===(o=this.operator)||\"++\"===o)&&(s=Qt(this.first.unwrapAll().value),s&&this.first.error(s)),this.isYield()||this.isAwait())return this.compileContinuation(t);if(this.isUnary())return this.compileUnary(t);if(r)return this.compileChain(t);switch(this.operator){case\"?\":return this.compileExistence(t,this.second.isDefaultValue);case\"**\":return this.compilePower(t);case\"//\":return this.compileFloorDivision(t);case\"%%\":return this.compileModulo(t);default:return i=this.first.compileToFragments(t,$),u=this.second.compileToFragments(t,$),n=[].concat(i,this.makeCode(\" \"+this.operator+\" \"),u),t.level<=$?n:this.wrapInParentheses(n)}}},{key:\"compileChain\",value:function(t){var n=this.first.second.cache(t),r=_slicedToArray(n,2),i,s,o;return this.first.second=r[0],o=r[1],s=this.first.compileToFragments(t,$),i=s.concat(this.makeCode(\" \"+(this.invert?\"&&\":\"||\")+\" \"),o.compileToFragments(t),this.makeCode(\" \"+this.operator+\" \"),this.second.compileToFragments(t,$)),this.wrapInParentheses(i)}},{key:\"compileExistence\",value:function(t,n){var r,i;return this.first.shouldCache()?(i=new _(t.scope.freeVariable(\"ref\")),r=new ft(new o(i,this.first))):(r=this.first,i=r),(new D(new b(r,n),i,{type:\"if\"})).addElse(this.second).compileToFragments(t)}},{key:\"compileUnary\",value:function(t){var n,r,i;return(r=[],n=this.operator,r.push([this.makeCode(n)]),\"!\"===n&&this.first instanceof b)?(this.first.negated=!this.first.negated,this.first.compileToFragments(t)):t.level>=W?(new ft(this)).compileToFragments(t):(i=\"+\"===n||\"-\"===n,(\"new\"===n||\"typeof\"===n||\"delete\"===n||i&&this.first instanceof s&&this.first.operator===n)&&r.push([this.makeCode(\" \")]),(i&&this.first instanceof s||\"new\"===n&&this.first.isStatement(t))&&(this.first=new ft(this.first)),r.push(this.first.compileToFragments(t,$)),this.flip&&r.reverse(),this.joinFragmentArrays(r,\"\"))}},{key:\"compileContinuation\",value:function(n){var r,i,s,o;return i=[],r=this.operator,null==n.scope.parent&&this.error(this.operator+\" can only occur inside functions\"),(null==(s=n.scope.method)?void 0:s.bound)&&n.scope.method.isGenerator&&this.error(\"yield cannot occur inside bound (fat arrow) functions\"),0<=t.call(Object.keys(this.first),\"expression\")&&!(this.first instanceof Ot)?null!=this.first.expression&&i.push(this.first.expression.compileToFragments(n,$)):(n.level>=J&&i.push([this.makeCode(\"(\")]),i.push([this.makeCode(r)]),\"\"!==(null==(o=this.first.base)?void 0:o.value)&&i.push([this.makeCode(\" \")]),i.push(this.first.compileToFragments(n,$)),n.level>=J&&i.push([this.makeCode(\")\")])),this.joinFragmentArrays(i,\"\")}},{key:\"compilePower\",value:function(t){var n;return n=new Pt(new _(\"Math\"),[new i(new ct(\"pow\"))]),(new h(n,[this.first,this.second])).compileToFragments(t)}},{key:\"compileFloorDivision\",value:function(t){var n,r,o;return r=new Pt(new _(\"Math\"),[new i(new ct(\"floor\"))]),o=this.second.shouldCache()?new ft(this.second):this.second,n=new s(\"/\",this.first,o),(new h(r,[n])).compileToFragments(t)}},{key:\"compileModulo\",value:function(t){var n;return n=new Pt(new G(an(\"modulo\",t))),(new h(n,[this.first,this.second])).compileToFragments(t)}},{key:\"toString\",value:function u(e){return _get(s.prototype.__proto__||Object.getPrototypeOf(s.prototype),\"toString\",this).call(this,e,this.constructor.name+\" \"+this.operator)}}]),s}(a),n,r;return n={\"==\":\"===\",\"!=\":\"!==\",of:\"in\",yieldfrom:\"yield*\"},r={\"!==\":\"===\",\"===\":\"!==\"},e.prototype.children=[\"first\",\"second\"],e}.call(this),e.In=q=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.object=e,r.array=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,r,i,s,o;if(this.array instanceof Pt&&this.array.isArray()&&this.array.base.objects.length){for(o=this.array.base.objects,r=0,i=o.length;r<i;r++)if(s=o[r],s instanceof bt){n=!0;break}if(!n)return this.compileOrTest(t)}return this.compileLoopTest(t)}},{key:\"compileOrTest\",value:function(t){var n=this.object.cache(t,$),r=_slicedToArray(n,2),i,s,o,u,a,f,l,c,h,p;h=r[0],l=r[1];var d=this.negated?[\" !== \",\" && \"]:[\" === \",\" || \"],v=_slicedToArray(d,2);for(i=v[0],s=v[1],p=[],c=this.array.base.objects,o=a=0,f=c.length;a<f;o=++a)u=c[o],o&&p.push(this.makeCode(s)),p=p.concat(o?l:h,this.makeCode(i),u.compileToFragments(t,W));return t.level<$?p:this.wrapInParentheses(p)}},{key:\"compileLoopTest\",value:function(t){var n=this.object.cache(t,V),r=_slicedToArray(n,2),i,s,o;return(o=r[0],s=r[1],i=[].concat(this.makeCode(an(\"indexOf\",t)+\".call(\"),this.array.compileToFragments(t,V),this.makeCode(\", \"),s,this.makeCode(\") \"+(this.negated?\"< 0\":\">= 0\"))),Xt(o)===Xt(s))?i:(i=o.concat(this.makeCode(\", \"),i),t.level<V?i:this.wrapInParentheses(i))}},{key:\"toString\",value:function n(e){return _get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"toString\",this).call(this,e,this.constructor.name+(this.negated?\"!\":\"\"))}}]),t}(a);return e.prototype.children=[\"object\",\"array\"],e.prototype.invert=tt,e}.call(this),e.Try=Mt=function(){var e=function(e){function t(e,n,r,i){_classCallCheck(this,t);var s=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return s.attempt=e,s.errorVariable=n,s.recovery=r,s.ensure=i,s}return _inherits(t,e),_createClass(t,[{key:\"jumps\",value:function(t){var n;return this.attempt.jumps(t)||(null==(n=this.recovery)?void 0:n.jumps(t))}},{key:\"makeReturn\",value:function(t){return this.attempt&&(this.attempt=this.attempt.makeReturn(t)),this.recovery&&(this.recovery=this.recovery.makeReturn(t)),this}},{key:\"compileNode\",value:function(t){var n,r,i,s,u,a;return t.indent+=Ct,a=this.attempt.compileToFragments(t,K),n=this.recovery?(i=t.scope.freeVariable(\"error\",{reserve:!1}),u=new _(i),this.errorVariable?(s=Qt(this.errorVariable.unwrapAll().value),s?this.errorVariable.error(s):void 0,this.recovery.unshift(new o(this.errorVariable,u))):void 0,[].concat(this.makeCode(\" catch (\"),u.compileToFragments(t),this.makeCode(\") {\\n\"),this.recovery.compileToFragments(t,K),this.makeCode(\"\\n\"+this.tab+\"}\"))):this.ensure||this.recovery?[]:(i=t.scope.freeVariable(\"error\",{reserve:!1}),[this.makeCode(\" catch (\"+i+\") {}\")]),r=this.ensure?[].concat(this.makeCode(\" finally {\\n\"),this.ensure.compileToFragments(t,K),this.makeCode(\"\\n\"+this.tab+\"}\")):[],[].concat(this.makeCode(this.tab+\"try {\\n\"),a,this.makeCode(\"\\n\"+this.tab+\"}\"),n,r)}}]),t}(a);return e.prototype.children=[\"attempt\",\"recovery\",\"ensure\"],e.prototype.isStatement=Bt,e}.call(this),e.Throw=Ot=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.expression=e,n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n;return n=this.expression.compileToFragments(t,V),un(n,this.makeCode(\"throw \")),n.unshift(this.makeCode(this.tab)),n.push(this.makeCode(\";\")),n}}]),t}(a);return e.prototype.children=[\"expression\"],e.prototype.isStatement=Bt,e.prototype.jumps=nt,e.prototype.makeReturn=kt,e}.call(this),e.Existence=b=function(){var e=function(e){function n(e){var r=1<arguments.length&&void 0!==arguments[1]&&arguments[1];_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),s;return i.expression=e,i.comparisonTarget=r?\"undefined\":\"null\",s=[],i.expression.traverseChildren(!0,function(e){var n,r,i,o;if(e.comments){for(o=e.comments,r=0,i=o.length;r<i;r++)n=o[r],0>t.call(s,n)&&s.push(n);return delete e.comments}}),It(s,i),Zt(i.expression,i),i}return _inherits(n,e),_createClass(n,[{key:\"compileNode\",value:function(t){var n,r,i;if(this.expression.front=this.front,i=this.expression.compile(t,$),this.expression.unwrap()instanceof _&&!t.scope.check(i)){var s=this.negated?[\"===\",\"||\"]:[\"!==\",\"&&\"],o=_slicedToArray(s,2);n=o[0],r=o[1],i=\"typeof \"+i+\" \"+n+' \"undefined\"'+(\"undefined\"===this.comparisonTarget?\"\":\" \"+r+\" \"+i+\" \"+n+\" \"+this.comparisonTarget)}else n=\"null\"===this.comparisonTarget?this.negated?\"==\":\"!=\":this.negated?\"===\":\"!==\",i=i+\" \"+n+\" \"+this.comparisonTarget;return[this.makeCode(t.level<=X?i:\"(\"+i+\")\")]}}]),n}(a);return e.prototype.children=[\"expression\"],e.prototype.invert=tt,e}.call(this),e.Parens=ft=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.body=e,n}return _inherits(t,e),_createClass(t,[{key:\"unwrap\",value:function(){return this.body}},{key:\"shouldCache\",value:function(){return this.body.shouldCache()}},{key:\"compileNode\",value:function(t){var n,r,i,s,o;return(r=this.body.unwrap(),o=null==(s=r.comments)?void 0:s.some(function(e){return e.here&&!e.unshift&&!e.newLine}),r instanceof Pt&&r.isAtomic()&&!this.csxAttribute&&!o)?(r.front=this.front,r.compileToFragments(t)):(i=r.compileToFragments(t,J),n=t.level<$&&!o&&(r instanceof ut||r.unwrap()instanceof h||r instanceof L&&r.returns)&&(t.level<X||3>=i.length),this.csxAttribute?this.wrapInBraces(i):n?i:this.wrapInParentheses(i))}}]),t}(a);return e.prototype.children=[\"body\"],e}.call(this),e.StringWithInterpolations=St=function(){var e=function(e){function t(e){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.body=e,n}return _inherits(t,e),_createClass(t,[{key:\"unwrap\",value:function(){return this}},{key:\"shouldCache\",value:function(){return this.body.shouldCache()}},{key:\"compileNode\",value:function(n){var r,i,s,o,u,a,f,l,c;if(this.csxAttribute)return c=new ft(new t(this.body)),c.csxAttribute=!0,c.compileNode(n);for(o=this.body.unwrap(),s=[],l=[],o.traverseChildren(!1,function(e){var t,n,r,i,o,u;if(e instanceof Et){if(e.comments){var a;(a=l).push.apply(a,_toConsumableArray(e.comments)),delete e.comments}return s.push(e),!0}if(e instanceof ft){if(0!==l.length){for(n=0,i=l.length;n<i;n++)t=l[n],t.unshift=!0,t.newLine=!0;It(l,e)}return s.push(e),!1}if(e.comments){if(0===s.length||s[s.length-1]instanceof Et){var f;(f=l).push.apply(f,_toConsumableArray(e.comments))}else{for(u=e.comments,r=0,o=u.length;r<o;r++)t=u[r],t.unshift=!1,t.newLine=!0;It(e.comments,s[s.length-1])}delete e.comments}return!0}),u=[],this.csx||u.push(this.makeCode(\"`\")),a=0,f=s.length;a<f;a++)if(i=s[a],i instanceof Et){var h;i.value=i.unquote(!0,this.csx),this.csx||(i.value=i.value.replace(/(\\\\*)(`|\\$\\{)/g,function(e,t,n){return 0==t.length%2?t+\"\\\\\"+n:e})),(h=u).push.apply(h,_toConsumableArray(i.compileToFragments(n)))}else{var p;this.csx||u.push(this.makeCode(\"$\")),r=i.compileToFragments(n,J),(!this.isNestedTag(i)||r.some(function(e){return null!=e.comments}))&&(r=this.wrapInBraces(r),r[0].isStringWithInterpolations=!0,r[r.length-1].isStringWithInterpolations=!0),(p=u).push.apply(p,_toConsumableArray(r))}return this.csx||u.push(this.makeCode(\"`\")),u}},{key:\"isNestedTag\",value:function(t){var n,r,i;return r=null==(i=t.body)?void 0:i.expressions,n=null==r?void 0:r[0].unwrap(),this.csx&&r&&1===r.length&&n instanceof h&&n.csx}}]),t}(a);return e.prototype.children=[\"body\"],e}.call(this),e.For=L=function(){var e=function(e){function t(e,n){_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),i,s,o,u,a,l;if(r.source=n.source,r.guard=n.guard,r.step=n.step,r.name=n.name,r.index=n.index,r.body=f.wrap([e]),r.own=null!=n.own,r.object=null!=n.object,r.from=null!=n.from,r.from&&r.index&&r.index.error(\"cannot use index with for-from\"),r.own&&!r.object&&n.ownTag.error(\"cannot use own with for-\"+(r.from?\"from\":\"in\")),r.object){var c=[r.index,r.name];r.name=c[0],r.index=c[1]}for(((null==(u=r.index)?void 0:\"function\"==typeof u.isArray?u.isArray():void 0)||(null==(a=r.index)?void 0:\"function\"==typeof a.isObject?a.isObject():void 0))&&r.index.error(\"index cannot be a pattern matching expression\"),r.range=r.source instanceof Pt&&r.source.base instanceof ht&&!r.source.properties.length&&!r.from,r.pattern=r.name instanceof Pt,r.range&&r.index&&r.index.error(\"indexes do not apply to range loops\"),r.range&&r.pattern&&r.name.error(\"cannot pattern match over range loops\"),r.returns=!1,l=[\"source\",\"guard\",\"step\",\"name\",\"index\"],s=0,o=l.length;s<o;s++)(i=l[s],!!r[i])&&(r[i].traverseChildren(!0,function(e){var t,n,s,o;if(e.comments){for(o=e.comments,n=0,s=o.length;n<s;n++)t=o[n],t.newLine=t.unshift=!0;return Zt(e,r[i])}}),Zt(r[i],r));return r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function(t){var n,i,s,u,a,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,P,H,B,j,F,I,q,R;if(s=f.wrap([this.body]),A=s.expressions,n=r.call(A,-1),i=_slicedToArray(n,1),T=i[0],n,(null==T?void 0:T.jumps())instanceof vt&&(this.returns=!1),B=this.range?this.source.base:this.source,H=t.scope,this.pattern||(C=this.name&&this.name.compile(t,V)),w=this.index&&this.index.compile(t,V),C&&!this.pattern&&H.find(C),w&&!(this.index instanceof Pt)&&H.find(w),this.returns&&(P=H.freeVariable(\"results\")),this.from?this.pattern&&(E=H.freeVariable(\"x\",{single:!0})):E=this.object&&w||H.freeVariable(\"i\",{single:!0}),S=(this.range||this.from)&&C||w||E,x=S===E?\"\":S+\" = \",this.step&&!this.range){var U=this.cacheToCodeFragments(this.step.cache(t,V,tn)),z=_slicedToArray(U,2);j=z[0],I=z[1],this.step.isNumber()&&(F=+I)}return this.pattern&&(C=E),R=\"\",g=\"\",p=\"\",y=this.tab+Ct,this.range?v=B.compileToFragments(Yt(t,{index:E,name:C,step:this.step,shouldCache:tn})):(q=this.source.compile(t,V),(C||this.own)&&!(this.source.unwrap()instanceof _)&&(p+=\"\"+this.tab+(L=H.freeVariable(\"ref\"))+\" = \"+q+\";\\n\",q=L),C&&!this.pattern&&!this.from&&(k=C+\" = \"+q+\"[\"+S+\"]\"),!this.object&&!this.from&&(j!==I&&(p+=\"\"+this.tab+j+\";\\n\"),d=0>F,(!this.step||null==F||!d)&&(N=H.freeVariable(\"len\")),c=\"\"+x+E+\" = 0, \"+N+\" = \"+q+\".length\",h=\"\"+x+E+\" = \"+q+\".length - 1\",a=E+\" < \"+N,l=E+\" >= 0\",this.step?(null==F?(a=I+\" > 0 ? \"+a+\" : \"+l,c=\"(\"+I+\" > 0 ? (\"+c+\") : \"+h+\")\"):d&&(a=l,c=h),b=E+\" += \"+I):b=\"\"+(S===E?E+\"++\":\"++\"+E),v=[this.makeCode(c+\"; \"+a+\"; \"+x+b)])),this.returns&&(O=\"\"+this.tab+P+\" = [];\\n\",M=\"\\n\"+this.tab+\"return \"+P+\";\",s.makeReturn(P)),this.guard&&(1<s.expressions.length?s.expressions.unshift(new D((new ft(this.guard)).invert(),new wt(\"continue\"))):this.guard&&(s=f.wrap([new D(this.guard,s)]))),this.pattern&&s.expressions.unshift(new o(this.name,this.from?new _(S):new G(q+\"[\"+S+\"]\"))),k&&(R=\"\\n\"+y+k+\";\"),this.object?(v=[this.makeCode(S+\" in \"+q)],this.own&&(g=\"\\n\"+y+\"if (!\"+an(\"hasProp\",t)+\".call(\"+q+\", \"+S+\")) continue;\")):this.from&&(v=[this.makeCode(S+\" of \"+q)]),u=s.compileToFragments(Yt(t,{indent:y}),K),u&&0<u.length&&(u=[].concat(this.makeCode(\"\\n\"),u,this.makeCode(\"\\n\"))),m=[this.makeCode(p)],O&&m.push(this.makeCode(O)),m=m.concat(this.makeCode(this.tab),this.makeCode(\"for (\"),v,this.makeCode(\") {\"+g+R),u,this.makeCode(this.tab),this.makeCode(\"}\")),M&&m.push(this.makeCode(M)),m}}]),t}(Ht);return e.prototype.children=[\"body\",\"source\",\"guard\",\"step\"],e}.call(this),e.Switch=Nt=function(){var e=function(e){function t(e,n,r){_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.subject=e,i.cases=n,i.otherwise=r,i}return _inherits(t,e),_createClass(t,[{key:\"jumps\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{block:!0},n,r,i,s,o,u,a;for(u=this.cases,i=0,o=u.length;i<o;i++){var f=_slicedToArray(u[i],2);if(r=f[0],n=f[1],s=n.jumps(t))return s}return null==(a=this.otherwise)?void 0:a.jumps(t)}},{key:\"makeReturn\",value:function(t){var n,r,i,s,o;for(s=this.cases,n=0,r=s.length;n<r;n++)i=s[n],i[1].makeReturn(t);return t&&(this.otherwise||(this.otherwise=new f([new G(\"void 0\")]))),null!=(o=this.otherwise)&&o.makeReturn(t),this}},{key:\"compileNode\",value:function(t){var n,r,i,s,o,u,a,f,l,c,h,p,d,v,m;for(f=t.indent+Ct,l=t.indent=f+Ct,u=[].concat(this.makeCode(this.tab+\"switch (\"),this.subject?this.subject.compileToFragments(t,J):this.makeCode(\"false\"),this.makeCode(\") {\\n\")),v=this.cases,a=c=0,p=v.length;c<p;a=++c){var g=_slicedToArray(v[a],2);for(s=g[0],n=g[1],m=Wt([s]),h=0,d=m.length;h<d;h++)i=m[h],this.subject||(i=i.invert()),u=u.concat(this.makeCode(f+\"case \"),i.compileToFragments(t,J),this.makeCode(\":\\n\"));if(0<(r=n.compileToFragments(t,K)).length&&(u=u.concat(r,this.makeCode(\"\\n\"))),a===this.cases.length-1&&!this.otherwise)break;(o=this.lastNode(n.expressions),!(o instanceof vt||o instanceof Ot||o instanceof G&&o.jumps()&&\"debugger\"!==o.value))&&u.push(i.makeCode(l+\"break;\\n\"))}if(this.otherwise&&this.otherwise.expressions.length){var y;(y=u).push.apply(y,[this.makeCode(f+\"default:\\n\")].concat(_toConsumableArray(this.otherwise.compileToFragments(t,K)),[this.makeCode(\"\\n\")]))}return u.push(this.makeCode(this.tab+\"}\")),u}}]),t}(a);return e.prototype.children=[\"subject\",\"cases\",\"otherwise\"],e.prototype.isStatement=Bt,e}.call(this),e.If=D=function(){var e=function(e){function t(e,n){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};_classCallCheck(this,t);var i=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.body=n,i.condition=\"unless\"===r.type?e.invert():e,i.elseBody=null,i.isChain=!1,i.soak=r.soak,i.condition.comments&&Zt(i.condition,i),i}return _inherits(t,e),_createClass(t,[{key:\"bodyNode\",value:function(){var t;return null==(t=this.body)?void 0:t.unwrap()}},{key:\"elseBodyNode\",value:function(){var t;return null==(t=this.elseBody)?void 0:t.unwrap()}},{key:\"addElse\",value:function(n){return this.isChain?this.elseBodyNode().addElse(n):(this.isChain=n instanceof t,this.elseBody=this.ensureBlock(n),this.elseBody.updateLocationDataIfMissing(n.locationData)),this}},{key:\"isStatement\",value:function(t){var n;return(null==t?void 0:t.level)===K||this.bodyNode().isStatement(t)||(null==(n=this.elseBodyNode())?void 0:n.isStatement(t))}},{key:\"jumps\",value:function(t){var n;return this.body.jumps(t)||(null==(n=this.elseBody)?void 0:n.jumps(t))}},{key:\"compileNode\",value:function(t){return this.isStatement(t)?this.compileStatement(t):this.compileExpression(t)}},{key:\"makeReturn\",value:function(t){return t&&(this.elseBody||(this.elseBody=new f([new G(\"void 0\")]))),this.body&&(this.body=new f([this.body.makeReturn(t)])),this.elseBody&&(this.elseBody=new f([this.elseBody.makeReturn(t)])),this}},{key:\"ensureBlock\",value:function(t){return t instanceof f?t:new f([t])}},{key:\"compileStatement\",value:function(n){var r,i,s,o,u,a,f;return(s=Rt(n,\"chainChild\"),u=Rt(n,\"isExistentialEquals\"),u)?(new t(this.condition.invert(),this.elseBodyNode(),{type:\"if\"})).compileToFragments(n):(f=n.indent+Ct,o=this.condition.compileToFragments(n,J),i=this.ensureBlock(this.body).compileToFragments(Yt(n,{indent:f})),a=[].concat(this.makeCode(\"if (\"),o,this.makeCode(\") {\\n\"),i,this.makeCode(\"\\n\"+this.tab+\"}\")),s||a.unshift(this.makeCode(this.tab)),!this.elseBody)?a:(r=a.concat(this.makeCode(\" else \")),this.isChain?(n.chainChild=!0,r=r.concat(this.elseBody.unwrap().compileToFragments(n,K))):r=r.concat(this.makeCode(\"{\\n\"),this.elseBody.compileToFragments(Yt(n,{indent:f}),K),this.makeCode(\"\\n\"+this.tab+\"}\")),r)}},{key:\"compileExpression\",value:function(t){var n,r,i,s;return i=this.condition.compileToFragments(t,X),r=this.bodyNode().compileToFragments(t,V),n=this.elseBodyNode()?this.elseBodyNode().compileToFragments(t,V):[this.makeCode(\"void 0\")],s=i.concat(this.makeCode(\" ? \"),r,this.makeCode(\" : \"),n),t.level>=X?this.wrapInParentheses(s):s}},{key:\"unfoldSoak\",value:function(){return this.soak&&this}}]),t}(a);return e.prototype.children=[\"condition\",\"body\",\"elseBody\"],e}.call(this),_t={modulo:function(){return\"function(a, b) { return (+a % (b = +b) + b) % b; }\"},objectWithoutKeys:function(){return\"function(o, ks) { var res = {}; for (var k in o) ([].indexOf.call(ks, k) < 0 && {}.hasOwnProperty.call(o, k)) && (res[k] = o[k]); return res; }\"},boundMethodCheck:function(){return\"function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } }\"},_extends:function(){return\"Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }\"},hasProp:function(){return\"{}.hasOwnProperty\"},indexOf:function(){return\"[].indexOf\"},slice:function(){return\"[].slice\"},splice:function(){return\"[].splice\"}},K=1,J=2,V=3,X=4,$=5,W=6,Ct=\"  \",mt=/^[+-]?\\d+$/,an=function(e,t){var n,r;return r=t.scope.root,e in r.utilities?r.utilities[e]:(n=r.freeVariable(e),r.assign(n,_t[e](t)),r.utilities[e]=n)},en=function(e,t){var n=!(2<arguments.length&&void 0!==arguments[2])||arguments[2],r;return r=\"\\n\"===e[e.length-1],e=(n?t:\"\")+e.replace(/\\n/g,\"$&\"+t),e=e.replace(/\\s+$/,\"\"),r&&(e+=\"\\n\"),e},$t=function(e,t){var n,r,i,s;for(r=i=0,s=e.length;i<s;r=++i){if(n=e[r],!n.isHereComment){e.splice(r,0,t.makeCode(\"\"+t.tab));break}n.code=en(n.code,t.tab)}return e},Vt=function(e){var t,n,r,i;if(!e.comments)return!1;for(i=e.comments,n=0,r=i.length;n<r;n++)if(t=i[n],!1===t.here)return!0;return!1},Zt=function(e,t){if(null!=e&&e.comments)return It(e.comments,t),delete e.comments},un=function(e,t){var n,r,i,s,o;for(i=!1,r=s=0,o=e.length;s<o;r=++s)if(n=e[r],!n.isComment){e.splice(r,0,t),i=!0;break}return i||e.push(t),e},Jt=function(e){return e instanceof _&&\"arguments\"===e.value},Kt=function(e){return e instanceof At||e instanceof d&&e.bound},tn=function(e){return e.shouldCache()||(\"function\"==typeof e.isAssignable?e.isAssignable():void 0)},on=function(e,t,n){var r;if(r=t[n].unfoldSoak(e))return t[n]=r.body,r.body=new Pt(t),r}}.call(this),{exports:e}.exports}(),require[\"./sourcemap\"]=function(){var e={exports:{}};return function(){var t,n;t=function(){function e(t){_classCallCheck(this,e),this.line=t,this.columns=[]}return _createClass(e,[{key:\"add\",value:function(t,n){var r=_slicedToArray(n,2),i=r[0],s=r[1],o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return this.columns[t]&&o.noReplace?void 0:this.columns[t]={line:this.line,column:t,sourceLine:i,sourceColumn:s}}},{key:\"sourceLocation\",value:function(t){for(var n;!((n=this.columns[t])||0>=t);)t--;return n&&[n.sourceLine,n.sourceColumn]}}]),e}(),n=function(){var e=function(){function e(){_classCallCheck(this,e),this.lines=[]}return _createClass(e,[{key:\"add\",value:function(n,r){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},s=_slicedToArray(r,2),o,u,f,l;return f=s[0],u=s[1],l=(o=this.lines)[f]||(o[f]=new t(f)),l.add(u,n,i)}},{key:\"sourceLocation\",value:function(t){for(var n=_slicedToArray(t,2),r=n[0],i=n[1],s;!((s=this.lines[r])||0>=r);)r--;return s&&s.sourceLocation(i)}},{key:\"generate\",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b;for(b=0,o=0,a=0,u=0,d=!1,r=\"\",v=this.lines,h=i=0,f=v.length;i<f;h=++i)if(c=v[h],c)for(m=c.columns,s=0,l=m.length;s<l;s++)if(p=m[s],!!p){for(;b<p.line;)o=0,d=!1,r+=\";\",b++;d&&(r+=\",\",d=!1),r+=this.encodeVlq(p.column-o),o=p.column,r+=this.encodeVlq(0),r+=this.encodeVlq(p.sourceLine-a),a=p.sourceLine,r+=this.encodeVlq(p.sourceColumn-u),u=p.sourceColumn,d=!0}return g=t.sourceFiles?t.sourceFiles:t.filename?[t.filename]:[\"<anonymous>\"],y={version:3,file:t.generatedFile||\"\",sourceRoot:t.sourceRoot||\"\",sources:g,names:[],mappings:r},(t.sourceMap||t.inlineMap)&&(y.sourcesContent=[n]),y}},{key:\"encodeVlq\",value:function(t){var n,u,a,f;for(n=\"\",a=0>t?1:0,f=(_Mathabs(t)<<1)+a;f||!n;)u=f&s,f>>=i,f&&(u|=r),n+=this.encodeBase64(u);return n}},{key:\"encodeBase64\",value:function(t){return n[t]||function(){throw new Error(\"Cannot Base64 encode value: \"+t)}()}}]),e}(),n,r,i,s;return i=5,r=1<<i,s=r-1,n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",e}.call(this),e.exports=n}.call(this),e.exports}(),require[\"./coffeescript\"]=function(){var e={};return function(){var t=[].indexOf,n=require(\"./lexer\"),r,i,s,o,u,a,f,l,c,h,p,d,v,m,g;i=n.Lexer;var y=require(\"./parser\");d=y.parser,c=require(\"./helpers\"),s=require(\"./sourcemap\"),p=require(\"../../package.json\"),e.VERSION=p.version,e.FILE_EXTENSIONS=r=[\".coffee\",\".litcoffee\",\".coffee.md\"],e.helpers=c,o=function(e){switch(!1){case\"function\"!=typeof Buffer:return Buffer.from(e).toString(\"base64\");case\"function\"!=typeof btoa:return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(e,t){return _StringfromCharCode(\"0x\"+t)}));default:throw new Error(\"Unable to base64 encode inline sourcemap.\")}},g=function(e){return function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n;try{return r.call(this,e,t)}catch(r){throw(n=r,\"string\"!=typeof e)?n:c.updateSyntaxError(n,e,t.filename)}}},m={},v={},e.compile=a=g(function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n,r,i,a,f,l,p,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P;if(t=Object.assign({},t),p=t.sourceMap||t.inlineMap||null==t.filename,a=t.filename||\"<anonymous>\",u(a,e),null==m[a]&&(m[a]=[]),m[a].push(e),p&&(x=new s),O=h.tokenize(e,t),t.referencedVars=function(){var e,t,n;for(n=[],e=0,t=O.length;e<t;e++)A=O[e],\"IDENTIFIER\"===A[0]&&n.push(A[1]);return n}(),null==t.bare||!0!==t.bare)for(y=0,E=O.length;y<E;y++)if(A=O[y],\"IMPORT\"===(N=A[0])||\"EXPORT\"===N){t.bare=!0;break}for(l=d.parse(O).compileToFragments(t),r=0,t.header&&(r+=1),t.shiftLine&&(r+=1),n=0,w=\"\",b=0,S=l.length;b<S;b++)f=l[b],p&&(f.locationData&&!/^[;\\s]*$/.test(f.code)&&x.add([f.locationData.first_line,f.locationData.first_column],[r,n],{noReplace:!0}),T=c.count(f.code,\"\\n\"),r+=T,T?n=f.code.length-(f.code.lastIndexOf(\"\\n\")+1):n+=f.code.length),w+=f.code;if(t.header&&(g=\"Generated by CoffeeScript \"+this.VERSION,w=\"// \"+g+\"\\n\"+w),p&&(P=x.generate(t,e),null==v[a]&&(v[a]=[]),v[a].push(x)),t.transpile){if(\"object\"!==_typeof(t.transpile))throw new Error(\"The transpile option must be given an object with options to pass to Babel\");M=t.transpile.transpile,delete t.transpile.transpile,_=Object.assign({},t.transpile),P&&null==_.inputSourceMap&&(_.inputSourceMap=P),D=M(w,_),w=D.code,P&&D.map&&(P=D.map)}return t.inlineMap&&(i=o(JSON.stringify(P)),k=\"//# sourceMappingURL=data:application/json;base64,\"+i,L=\"//# sourceURL=\"+(null==(C=t.filename)?\"coffeescript\":C),w=w+\"\\n\"+k+\"\\n\"+L),t.sourceMap?{js:w,sourceMap:x,v3SourceMap:JSON.stringify(P,null,2)}:w}),e.tokens=g(function(e,t){return h.tokenize(e,t)}),e.nodes=g(function(e,t){return\"string\"==typeof e?d.parse(h.tokenize(e,t)):d.parse(e)}),e.run=e.eval=e.register=function(){throw new Error(\"require index.coffee, not this file\")},h=new i,d.lexer={lex:function(){var t,n;if(n=d.tokens[this.pos++],n){var r=n,i=_slicedToArray(r,3);t=i[0],this.yytext=i[1],this.yylloc=i[2],d.errorToken=n.origin||n,this.yylineno=this.yylloc.first_line}else t=\"\";return t},setInput:function(t){return d.tokens=t,this.pos=0},upcomingInput:function(){return\"\"}},d.yy=require(\"./nodes\"),d.yy.parseError=function(e,t){var n=t.token,r=d,i,s,o,u,a;u=r.errorToken,a=r.tokens;var f=u,l=_slicedToArray(f,3);return s=l[0],o=l[1],i=l[2],o=function(){switch(!1){case u!==a[a.length-1]:return\"end of input\";case\"INDENT\"!==s&&\"OUTDENT\"!==s:return\"indentation\";case\"IDENTIFIER\"!==s&&\"NUMBER\"!==s&&\"INFINITY\"!==s&&\"STRING\"!==s&&\"STRING_START\"!==s&&\"REGEX\"!==s&&\"REGEX_START\"!==s:return s.replace(/_START$/,\"\").toLowerCase();default:return c.nameWhitespaceCharacter(o)}}(),c.throwSyntaxError(\"unexpected \"+o,i)},f=function(e,t){var n,r,i,s,o,u,a,f,l,c,h,p;return s=void 0,i=\"\",e.isNative()?i=\"native\":(e.isEval()?(s=e.getScriptNameOrSourceURL(),!s&&(i=e.getEvalOrigin()+\", \")):s=e.getFileName(),s||(s=\"<anonymous>\"),f=e.getLineNumber(),r=e.getColumnNumber(),c=t(s,f,r),i=c?s+\":\"+c[0]+\":\"+c[1]:s+\":\"+f+\":\"+r),o=e.getFunctionName(),u=e.isConstructor(),a=!e.isToplevel()&&!u,a?(l=e.getMethodName(),p=e.getTypeName(),o?(h=n=\"\",p&&o.indexOf(p)&&(h=p+\".\"),l&&o.indexOf(\".\"+l)!==o.length-l.length-1&&(n=\" [as \"+l+\"]\"),\"\"+h+o+n+\" (\"+i+\")\"):p+\".\"+(l||\"<anonymous>\")+\" (\"+i+\")\"):u?\"new \"+(o||\"<anonymous>\")+\" (\"+i+\")\":o?o+\" (\"+i+\")\":i},l=function(e,n,i){var s,o,u,f,l,h;if(\"<anonymous>\"===e||(f=e.slice(e.lastIndexOf(\".\")),0<=t.call(r,f))){if(\"<anonymous>\"!==e&&null!=v[e])return v[e][v[e].length-1];if(null!=v[\"<anonymous>\"])for(l=v[\"<anonymous>\"],o=l.length-1;0<=o;o+=-1)if(u=l[o],h=u.sourceLocation([n-1,i-1]),null!=(null==h?void 0:h[0])&&null!=h[1])return u;return null==m[e]?null:(s=a(m[e][m[e].length-1],{filename:e,sourceMap:!0,literate:c.isLiterate(e)}),s.sourceMap)}return null},Error.prepareStackTrace=function(t,n){var r,i,s;return s=function(e,t,n){var r,i;return i=l(e,t,n),null!=i&&(r=i.sourceLocation([t-1,n-1])),null==r?null:[r[0]+1,r[1]+1]},i=function(){var t,i,o;for(o=[],t=0,i=n.length;t<i&&(r=n[t],r.getFunction()!==e.run);t++)o.push(\"    at \"+f(r,s));return o}(),t.toString()+\"\\n\"+i.join(\"\\n\")+\"\\n\"},u=function(e,t){var n,r,i,s;if(r=t.split(/$/m)[0],s=null==r?void 0:r.match(/^#!\\s*([^\\s]+\\s*)(.*)/),n=null==s||null==(i=s[2])?void 0:i.split(/\\s/).filter(function(e){return\"\"!==e}),1<(null==n?void 0:n.length))return console.error(\"The script to be run begins with a shebang line with more than one\\nargument. This script will fail on platforms such as Linux which only\\nallow a single argument.\"),console.error(\"The shebang line was: '\"+r+\"' in file '\"+e+\"'\"),console.error(\"The arguments were: \"+JSON.stringify(n))}}.call(this),{exports:e}.exports}(),require[\"./browser\"]=function(){var exports={},module={exports:exports};return function(){var indexOf=[].indexOf,CoffeeScript,compile,runScripts;CoffeeScript=require(\"./coffeescript\"),compile=CoffeeScript.compile,CoffeeScript.eval=function(code){var options=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return null==options.bare&&(options.bare=!0),eval(compile(code,options))},CoffeeScript.run=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.bare=!0,t.shiftLine=!0,Function(compile(e,t))()},module.exports=CoffeeScript,\"undefined\"==typeof window||null===window||(\"undefined\"!=typeof btoa&&null!==btoa&&\"undefined\"!=typeof JSON&&null!==JSON&&(compile=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.inlineMap=!0,CoffeeScript.compile(e,t)}),CoffeeScript.load=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},r=3<arguments.length&&void 0!==arguments[3]&&arguments[3],i;return n.sourceFiles=[e],i=window.ActiveXObject?new window.ActiveXObject(\"Microsoft.XMLHTTP\"):new window.XMLHttpRequest,i.open(\"GET\",e,!0),\"overrideMimeType\"in i&&i.overrideMimeType(\"text/plain\"),i.onreadystatechange=function(){var s,u;if(4===i.readyState){if(0!==(u=i.status)&&200!==u)throw new Error(\"Could not load \"+e);if(s=[i.responseText,n],!r){var f;(f=CoffeeScript).run.apply(f,_toConsumableArray(s))}if(t)return t(s)}},i.send(null)},runScripts=function(){var e,t,n,r,i,s,o,u,a,f;for(f=window.document.getElementsByTagName(\"script\"),t=[\"text/coffeescript\",\"text/literate-coffeescript\"],e=function(){var e,n,r,i;for(i=[],e=0,n=f.length;e<n;e++)u=f[e],(r=u.type,0<=indexOf.call(t,r))&&i.push(u);return i}(),i=0,n=function(){var r;if(r=e[i],r instanceof Array){var s;return(s=CoffeeScript).run.apply(s,_toConsumableArray(r)),i++,n()}},r=s=0,o=e.length;s<o;r=++s)a=e[r],function(r,i){var s,o;return s={literate:r.type===t[1]},o=r.src||r.getAttribute(\"data-src\"),o?(s.filename=o,CoffeeScript.load(o,function(t){return e[i]=t,n()},s,!0)):(s.filename=r.id&&\"\"!==r.id?r.id:\"coffeescript\"+(0===i?\"\":i),s.sourceFiles=[\"embedded\"],e[i]=[r.innerHTML,s])}(a,r);return n()},window.addEventListener?window.addEventListener(\"DOMContentLoaded\",runScripts,!1):window.attachEvent(\"onload\",runScripts))}.call(this),module.exports}(),require[\"./browser\"]}();\"function\"==typeof define&&define.amd?define(function(){return CoffeeScript}):root.CoffeeScript=CoffeeScript})(this)}),ace.define(\"ace/mode/coffee_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"../mode/coffee/coffee\");window.addEventListener=function(){};var o=t.Worker=function(e){i.call(this,e),this.setTimeout(250)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue(),t=[];try{s.compile(e)}catch(n){var r=n.location;r&&t.push({row:r.first_line,column:r.first_column,endRow:r.last_line,endColumn:r.last_column,text:n.message,type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),ace.define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/worker-css.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/css/csslint\",[],function(require,exports,module){function objectToString(e){return Object.prototype.toString.call(e)}function clone(e,t,n,r){function u(e,n){if(e===null)return null;if(n==0)return e;var a;if(typeof e!=\"object\")return e;if(util.isArray(e))a=[];else if(util.isRegExp(e))a=new RegExp(e.source,util.getRegExpFlags(e)),e.lastIndex&&(a.lastIndex=e.lastIndex);else if(util.isDate(e))a=new Date(e.getTime());else{if(o&&Buffer.isBuffer(e))return a=new Buffer(e.length),e.copy(a),a;typeof r==\"undefined\"?a=Object.create(Object.getPrototypeOf(e)):a=Object.create(r)}if(t){var f=i.indexOf(e);if(f!=-1)return s[f];i.push(e),s.push(a)}for(var l in e)a[l]=u(e[l],n-1);return a}var i=[],s=[],o=typeof Buffer!=\"undefined\";return typeof t==\"undefined\"&&(t=!0),typeof n==\"undefined\"&&(n=Infinity),u(e,n)}function Reporter(e,t){this.messages=[],this.stats=[],this.lines=e,this.ruleset=t}var parserlib={};(function(){function e(){this._listeners={}}function t(e){this._input=e.replace(/\\n\\r?/g,\"\\n\"),this._line=1,this._col=1,this._cursor=0}function n(e,t,n){this.col=n,this.line=t,this.message=e}function r(e,t,n,r){this.col=n,this.line=t,this.text=e,this.type=r}function i(e,n){this._reader=e?new t(e.toString()):null,this._token=null,this._tokenData=n,this._lt=[],this._ltIndex=0,this._ltIndexCache=[]}e.prototype={constructor:e,addListener:function(e,t){this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t)},fire:function(e){typeof e==\"string\"&&(e={type:e}),typeof e.target!=\"undefined\"&&(e.target=this);if(typeof e.type==\"undefined\")throw new Error(\"Event object missing 'type' property.\");if(this._listeners[e.type]){var t=this._listeners[e.type].concat();for(var n=0,r=t.length;n<r;n++)t[n].call(this,e)}},removeListener:function(e,t){if(this._listeners[e]){var n=this._listeners[e];for(var r=0,i=n.length;r<i;r++)if(n[r]===t){n.splice(r,1);break}}}},t.prototype={constructor:t,getCol:function(){return this._col},getLine:function(){return this._line},eof:function(){return this._cursor==this._input.length},peek:function(e){var t=null;return e=typeof e==\"undefined\"?1:e,this._cursor<this._input.length&&(t=this._input.charAt(this._cursor+e-1)),t},read:function(){var e=null;return this._cursor<this._input.length&&(this._input.charAt(this._cursor)==\"\\n\"?(this._line++,this._col=1):this._col++,e=this._input.charAt(this._cursor++)),e},mark:function(){this._bookmark={cursor:this._cursor,line:this._line,col:this._col}},reset:function(){this._bookmark&&(this._cursor=this._bookmark.cursor,this._line=this._bookmark.line,this._col=this._bookmark.col,delete this._bookmark)},readTo:function(e){var t=\"\",n;while(t.length<e.length||t.lastIndexOf(e)!=t.length-e.length){n=this.read();if(!n)throw new Error('Expected \"'+e+'\" at line '+this._line+\", col \"+this._col+\".\");t+=n}return t},readWhile:function(e){var t=\"\",n=this.read();while(n!==null&&e(n))t+=n,n=this.read();return t},readMatch:function(e){var t=this._input.substring(this._cursor),n=null;return typeof e==\"string\"?t.indexOf(e)===0&&(n=this.readCount(e.length)):e instanceof RegExp&&e.test(t)&&(n=this.readCount(RegExp.lastMatch.length)),n},readCount:function(e){var t=\"\";while(e--)t+=this.read();return t}},n.prototype=new Error,r.fromToken=function(e){return new r(e.value,e.startLine,e.startCol)},r.prototype={constructor:r,valueOf:function(){return this.text},toString:function(){return this.text}},i.createTokenData=function(e){var t=[],n={},r=e.concat([]),i=0,s=r.length+1;r.UNKNOWN=-1,r.unshift({name:\"EOF\"});for(;i<s;i++)t.push(r[i].name),r[r[i].name]=i,r[i].text&&(n[r[i].text]=i);return r.name=function(e){return t[e]},r.type=function(e){return n[e]},r},i.prototype={constructor:i,match:function(e,t){e instanceof Array||(e=[e]);var n=this.get(t),r=0,i=e.length;while(r<i)if(n==e[r++])return!0;return this.unget(),!1},mustMatch:function(e,t){var r;e instanceof Array||(e=[e]);if(!this.match.apply(this,arguments))throw r=this.LT(1),new n(\"Expected \"+this._tokenData[e[0]].name+\" at line \"+r.startLine+\", col \"+r.startCol+\".\",r.startLine,r.startCol)},advance:function(e,t){while(this.LA(0)!==0&&!this.match(e,t))this.get();return this.LA(0)},get:function(e){var t=this._tokenData,n=this._reader,r,i=0,s=t.length,o=!1,u,a;if(this._lt.length&&this._ltIndex>=0&&this._ltIndex<this._lt.length){i++,this._token=this._lt[this._ltIndex++],a=t[this._token.type];while(a.channel!==undefined&&e!==a.channel&&this._ltIndex<this._lt.length)this._token=this._lt[this._ltIndex++],a=t[this._token.type],i++;if((a.channel===undefined||e===a.channel)&&this._ltIndex<=this._lt.length)return this._ltIndexCache.push(i),this._token.type}return u=this._getToken(),u.type>-1&&!t[u.type].hide&&(u.channel=t[u.type].channel,this._token=u,this._lt.push(u),this._ltIndexCache.push(this._lt.length-this._ltIndex+i),this._lt.length>5&&this._lt.shift(),this._ltIndexCache.length>5&&this._ltIndexCache.shift(),this._ltIndex=this._lt.length),a=t[u.type],a&&(a.hide||a.channel!==undefined&&e!==a.channel)?this.get(e):u.type},LA:function(e){var t=e,n;if(e>0){if(e>5)throw new Error(\"Too much lookahead.\");while(t)n=this.get(),t--;while(t<e)this.unget(),t++}else if(e<0){if(!this._lt[this._ltIndex+e])throw new Error(\"Too much lookbehind.\");n=this._lt[this._ltIndex+e].type}else n=this._token.type;return n},LT:function(e){return this.LA(e),this._lt[this._ltIndex+e-1]},peek:function(){return this.LA(1)},token:function(){return this._token},tokenName:function(e){return e<0||e>this._tokenData.length?\"UNKNOWN_TOKEN\":this._tokenData[e].name},tokenType:function(e){return this._tokenData[e]||-1},unget:function(){if(!this._ltIndexCache.length)throw new Error(\"Too much lookahead.\");this._ltIndex-=this._ltIndexCache.pop(),this._token=this._lt[this._ltIndex-1]}},parserlib.util={StringReader:t,SyntaxError:n,SyntaxUnit:r,EventTarget:e,TokenStreamBase:i}})(),function(){function Combinator(e,t,n){SyntaxUnit.call(this,e,t,n,Parser.COMBINATOR_TYPE),this.type=\"unknown\",/^\\s+$/.test(e)?this.type=\"descendant\":e==\">\"?this.type=\"child\":e==\"+\"?this.type=\"adjacent-sibling\":e==\"~\"&&(this.type=\"sibling\")}function MediaFeature(e,t){SyntaxUnit.call(this,\"(\"+e+(t!==null?\":\"+t:\"\")+\")\",e.startLine,e.startCol,Parser.MEDIA_FEATURE_TYPE),this.name=e,this.value=t}function MediaQuery(e,t,n,r,i){SyntaxUnit.call(this,(e?e+\" \":\"\")+(t?t:\"\")+(t&&n.length>0?\" and \":\"\")+n.join(\" and \"),r,i,Parser.MEDIA_QUERY_TYPE),this.modifier=e,this.mediaType=t,this.features=n}function Parser(e){EventTarget.call(this),this.options=e||{},this._tokenStream=null}function PropertyName(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.PROPERTY_NAME_TYPE),this.hack=t}function PropertyValue(e,t,n){SyntaxUnit.call(this,e.join(\" \"),t,n,Parser.PROPERTY_VALUE_TYPE),this.parts=e}function PropertyValueIterator(e){this._i=0,this._parts=e.parts,this._marks=[],this.value=e}function PropertyValuePart(text,line,col){SyntaxUnit.call(this,text,line,col,Parser.PROPERTY_VALUE_PART_TYPE),this.type=\"unknown\";var temp;if(/^([+\\-]?[\\d\\.]+)([a-z]+)$/i.test(text)){this.type=\"dimension\",this.value=+RegExp.$1,this.units=RegExp.$2;switch(this.units.toLowerCase()){case\"em\":case\"rem\":case\"ex\":case\"px\":case\"cm\":case\"mm\":case\"in\":case\"pt\":case\"pc\":case\"ch\":case\"vh\":case\"vw\":case\"vmax\":case\"vmin\":this.type=\"length\";break;case\"deg\":case\"rad\":case\"grad\":this.type=\"angle\";break;case\"ms\":case\"s\":this.type=\"time\";break;case\"hz\":case\"khz\":this.type=\"frequency\";break;case\"dpi\":case\"dpcm\":this.type=\"resolution\"}}else/^([+\\-]?[\\d\\.]+)%$/i.test(text)?(this.type=\"percentage\",this.value=+RegExp.$1):/^([+\\-]?\\d+)$/i.test(text)?(this.type=\"integer\",this.value=+RegExp.$1):/^([+\\-]?[\\d\\.]+)$/i.test(text)?(this.type=\"number\",this.value=+RegExp.$1):/^#([a-f0-9]{3,6})/i.test(text)?(this.type=\"color\",temp=RegExp.$1,temp.length==3?(this.red=parseInt(temp.charAt(0)+temp.charAt(0),16),this.green=parseInt(temp.charAt(1)+temp.charAt(1),16),this.blue=parseInt(temp.charAt(2)+temp.charAt(2),16)):(this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16))):/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3):/^rgb\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1*255/100,this.green=+RegExp.$2*255/100,this.blue=+RegExp.$3*255/100):/^rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3,this.alpha=+RegExp.$4):/^rgba\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1*255/100,this.green=+RegExp.$2*255/100,this.blue=+RegExp.$3*255/100,this.alpha=+RegExp.$4):/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)?(this.type=\"color\",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100):/^hsla\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)?(this.type=\"color\",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100,this.alpha=+RegExp.$4):/^url\\([\"']?([^\\)\"']+)[\"']?\\)/i.test(text)?(this.type=\"uri\",this.uri=RegExp.$1):/^([^\\(]+)\\(/i.test(text)?(this.type=\"function\",this.name=RegExp.$1,this.value=text):/^[\"'][^\"']*[\"']/.test(text)?(this.type=\"string\",this.value=eval(text)):Colors[text.toLowerCase()]?(this.type=\"color\",temp=Colors[text.toLowerCase()].substring(1),this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16)):/^[\\,\\/]$/.test(text)?(this.type=\"operator\",this.value=text):/^[a-z\\-_\\u0080-\\uFFFF][a-z0-9\\-_\\u0080-\\uFFFF]*$/i.test(text)&&(this.type=\"identifier\",this.value=text)}function Selector(e,t,n){SyntaxUnit.call(this,e.join(\" \"),t,n,Parser.SELECTOR_TYPE),this.parts=e,this.specificity=Specificity.calculate(this)}function SelectorPart(e,t,n,r,i){SyntaxUnit.call(this,n,r,i,Parser.SELECTOR_PART_TYPE),this.elementName=e,this.modifiers=t}function SelectorSubPart(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.SELECTOR_SUB_PART_TYPE),this.type=t,this.args=[]}function Specificity(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function isHexDigit(e){return e!==null&&h.test(e)}function isDigit(e){return e!==null&&/\\d/.test(e)}function isWhitespace(e){return e!==null&&/\\s/.test(e)}function isNewLine(e){return e!==null&&nl.test(e)}function isNameStart(e){return e!==null&&/[a-z_\\u0080-\\uFFFF\\\\]/i.test(e)}function isNameChar(e){return e!==null&&(isNameStart(e)||/[0-9\\-\\\\]/.test(e))}function isIdentStart(e){return e!==null&&(isNameStart(e)||/\\-\\\\/.test(e))}function mix(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function TokenStream(e){TokenStreamBase.call(this,e,Tokens)}function ValidationError(e,t,n){this.col=n,this.line=t,this.message=e}var EventTarget=parserlib.util.EventTarget,TokenStreamBase=parserlib.util.TokenStreamBase,StringReader=parserlib.util.StringReader,SyntaxError=parserlib.util.SyntaxError,SyntaxUnit=parserlib.util.SyntaxUnit,Colors={aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgrey:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",grey:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgray:\"#d3d3d3\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\",activeBorder:\"Active window border.\",activecaption:\"Active window caption.\",appworkspace:\"Background color of multiple document interface.\",background:\"Desktop background.\",buttonface:\"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.\",buttonhighlight:\"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",buttonshadow:\"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",buttontext:\"Text on push buttons.\",captiontext:\"Text in caption, size box, and scrollbar arrow box.\",graytext:\"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.\",greytext:\"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.\",highlight:\"Item(s) selected in a control.\",highlighttext:\"Text of item(s) selected in a control.\",inactiveborder:\"Inactive window border.\",inactivecaption:\"Inactive window caption.\",inactivecaptiontext:\"Color of text in an inactive caption.\",infobackground:\"Background color for tooltip controls.\",infotext:\"Text color for tooltip controls.\",menu:\"Menu background.\",menutext:\"Text in menus.\",scrollbar:\"Scroll bar gray area.\",threeddarkshadow:\"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedface:\"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedhighlight:\"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedlightshadow:\"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedshadow:\"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",window:\"Window background.\",windowframe:\"Window frame.\",windowtext:\"Text in windows.\"};Combinator.prototype=new SyntaxUnit,Combinator.prototype.constructor=Combinator,MediaFeature.prototype=new SyntaxUnit,MediaFeature.prototype.constructor=MediaFeature,MediaQuery.prototype=new SyntaxUnit,MediaQuery.prototype.constructor=MediaQuery,Parser.DEFAULT_TYPE=0,Parser.COMBINATOR_TYPE=1,Parser.MEDIA_FEATURE_TYPE=2,Parser.MEDIA_QUERY_TYPE=3,Parser.PROPERTY_NAME_TYPE=4,Parser.PROPERTY_VALUE_TYPE=5,Parser.PROPERTY_VALUE_PART_TYPE=6,Parser.SELECTOR_TYPE=7,Parser.SELECTOR_PART_TYPE=8,Parser.SELECTOR_SUB_PART_TYPE=9,Parser.prototype=function(){var e=new EventTarget,t,n={constructor:Parser,DEFAULT_TYPE:0,COMBINATOR_TYPE:1,MEDIA_FEATURE_TYPE:2,MEDIA_QUERY_TYPE:3,PROPERTY_NAME_TYPE:4,PROPERTY_VALUE_TYPE:5,PROPERTY_VALUE_PART_TYPE:6,SELECTOR_TYPE:7,SELECTOR_PART_TYPE:8,SELECTOR_SUB_PART_TYPE:9,_stylesheet:function(){var e=this._tokenStream,t=null,n,r,i;this.fire(\"startstylesheet\"),this._charset(),this._skipCruft();while(e.peek()==Tokens.IMPORT_SYM)this._import(),this._skipCruft();while(e.peek()==Tokens.NAMESPACE_SYM)this._namespace(),this._skipCruft();i=e.peek();while(i>Tokens.EOF){try{switch(i){case Tokens.MEDIA_SYM:this._media(),this._skipCruft();break;case Tokens.PAGE_SYM:this._page(),this._skipCruft();break;case Tokens.FONT_FACE_SYM:this._font_face(),this._skipCruft();break;case Tokens.KEYFRAMES_SYM:this._keyframes(),this._skipCruft();break;case Tokens.VIEWPORT_SYM:this._viewport(),this._skipCruft();break;case Tokens.UNKNOWN_SYM:e.get();if(!!this.options.strict)throw new SyntaxError(\"Unknown @ rule.\",e.LT(0).startLine,e.LT(0).startCol);this.fire({type:\"error\",error:null,message:\"Unknown @ rule: \"+e.LT(0).value+\".\",line:e.LT(0).startLine,col:e.LT(0).startCol}),n=0;while(e.advance([Tokens.LBRACE,Tokens.RBRACE])==Tokens.LBRACE)n++;while(n)e.advance([Tokens.RBRACE]),n--;break;case Tokens.S:this._readWhitespace();break;default:if(!this._ruleset())switch(i){case Tokens.CHARSET_SYM:throw r=e.LT(1),this._charset(!1),new SyntaxError(\"@charset not allowed here.\",r.startLine,r.startCol);case Tokens.IMPORT_SYM:throw r=e.LT(1),this._import(!1),new SyntaxError(\"@import not allowed here.\",r.startLine,r.startCol);case Tokens.NAMESPACE_SYM:throw r=e.LT(1),this._namespace(!1),new SyntaxError(\"@namespace not allowed here.\",r.startLine,r.startCol);default:e.get(),this._unexpectedToken(e.token())}}}catch(s){if(!(s instanceof SyntaxError&&!this.options.strict))throw s;this.fire({type:\"error\",error:s,message:s.message,line:s.line,col:s.col})}i=e.peek()}i!=Tokens.EOF&&this._unexpectedToken(e.token()),this.fire(\"endstylesheet\")},_charset:function(e){var t=this._tokenStream,n,r,i,s;t.match(Tokens.CHARSET_SYM)&&(i=t.token().startLine,s=t.token().startCol,this._readWhitespace(),t.mustMatch(Tokens.STRING),r=t.token(),n=r.value,this._readWhitespace(),t.mustMatch(Tokens.SEMICOLON),e!==!1&&this.fire({type:\"charset\",charset:n,line:i,col:s}))},_import:function(e){var t=this._tokenStream,n,r,i,s=[];t.mustMatch(Tokens.IMPORT_SYM),i=t.token(),this._readWhitespace(),t.mustMatch([Tokens.STRING,Tokens.URI]),r=t.token().value.replace(/^(?:url\\()?[\"']?([^\"']+?)[\"']?\\)?$/,\"$1\"),this._readWhitespace(),s=this._media_query_list(),t.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),e!==!1&&this.fire({type:\"import\",uri:r,media:s,line:i.startLine,col:i.startCol})},_namespace:function(e){var t=this._tokenStream,n,r,i,s;t.mustMatch(Tokens.NAMESPACE_SYM),n=t.token().startLine,r=t.token().startCol,this._readWhitespace(),t.match(Tokens.IDENT)&&(i=t.token().value,this._readWhitespace()),t.mustMatch([Tokens.STRING,Tokens.URI]),s=t.token().value.replace(/(?:url\\()?[\"']([^\"']+)[\"']\\)?/,\"$1\"),this._readWhitespace(),t.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),e!==!1&&this.fire({type:\"namespace\",prefix:i,uri:s,line:n,col:r})},_media:function(){var e=this._tokenStream,t,n,r;e.mustMatch(Tokens.MEDIA_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),r=this._media_query_list(),e.mustMatch(Tokens.LBRACE),this._readWhitespace(),this.fire({type:\"startmedia\",media:r,line:t,col:n});for(;;)if(e.peek()==Tokens.PAGE_SYM)this._page();else if(e.peek()==Tokens.FONT_FACE_SYM)this._font_face();else if(e.peek()==Tokens.VIEWPORT_SYM)this._viewport();else if(!this._ruleset())break;e.mustMatch(Tokens.RBRACE),this._readWhitespace(),this.fire({type:\"endmedia\",media:r,line:t,col:n})},_media_query_list:function(){var e=this._tokenStream,t=[];this._readWhitespace(),(e.peek()==Tokens.IDENT||e.peek()==Tokens.LPAREN)&&t.push(this._media_query());while(e.match(Tokens.COMMA))this._readWhitespace(),t.push(this._media_query());return t},_media_query:function(){var e=this._tokenStream,t=null,n=null,r=null,i=[];e.match(Tokens.IDENT)&&(n=e.token().value.toLowerCase(),n!=\"only\"&&n!=\"not\"?(e.unget(),n=null):r=e.token()),this._readWhitespace(),e.peek()==Tokens.IDENT?(t=this._media_type(),r===null&&(r=e.token())):e.peek()==Tokens.LPAREN&&(r===null&&(r=e.LT(1)),i.push(this._media_expression()));if(t===null&&i.length===0)return null;this._readWhitespace();while(e.match(Tokens.IDENT))e.token().value.toLowerCase()!=\"and\"&&this._unexpectedToken(e.token()),this._readWhitespace(),i.push(this._media_expression());return new MediaQuery(n,t,i,r.startLine,r.startCol)},_media_type:function(){return this._media_feature()},_media_expression:function(){var e=this._tokenStream,t=null,n,r=null;return e.mustMatch(Tokens.LPAREN),this._readWhitespace(),t=this._media_feature(),this._readWhitespace(),e.match(Tokens.COLON)&&(this._readWhitespace(),n=e.LT(1),r=this._expression()),e.mustMatch(Tokens.RPAREN),this._readWhitespace(),new MediaFeature(t,r?new SyntaxUnit(r,n.startLine,n.startCol):null)},_media_feature:function(){var e=this._tokenStream;return e.mustMatch(Tokens.IDENT),SyntaxUnit.fromToken(e.token())},_page:function(){var e=this._tokenStream,t,n,r=null,i=null;e.mustMatch(Tokens.PAGE_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),e.match(Tokens.IDENT)&&(r=e.token().value,r.toLowerCase()===\"auto\"&&this._unexpectedToken(e.token())),e.peek()==Tokens.COLON&&(i=this._pseudo_page()),this._readWhitespace(),this.fire({type:\"startpage\",id:r,pseudo:i,line:t,col:n}),this._readDeclarations(!0,!0),this.fire({type:\"endpage\",id:r,pseudo:i,line:t,col:n})},_margin:function(){var e=this._tokenStream,t,n,r=this._margin_sym();return r?(t=e.token().startLine,n=e.token().startCol,this.fire({type:\"startpagemargin\",margin:r,line:t,col:n}),this._readDeclarations(!0),this.fire({type:\"endpagemargin\",margin:r,line:t,col:n}),!0):!1},_margin_sym:function(){var e=this._tokenStream;return e.match([Tokens.TOPLEFTCORNER_SYM,Tokens.TOPLEFT_SYM,Tokens.TOPCENTER_SYM,Tokens.TOPRIGHT_SYM,Tokens.TOPRIGHTCORNER_SYM,Tokens.BOTTOMLEFTCORNER_SYM,Tokens.BOTTOMLEFT_SYM,Tokens.BOTTOMCENTER_SYM,Tokens.BOTTOMRIGHT_SYM,Tokens.BOTTOMRIGHTCORNER_SYM,Tokens.LEFTTOP_SYM,Tokens.LEFTMIDDLE_SYM,Tokens.LEFTBOTTOM_SYM,Tokens.RIGHTTOP_SYM,Tokens.RIGHTMIDDLE_SYM,Tokens.RIGHTBOTTOM_SYM])?SyntaxUnit.fromToken(e.token()):null},_pseudo_page:function(){var e=this._tokenStream;return e.mustMatch(Tokens.COLON),e.mustMatch(Tokens.IDENT),e.token().value},_font_face:function(){var e=this._tokenStream,t,n;e.mustMatch(Tokens.FONT_FACE_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),this.fire({type:\"startfontface\",line:t,col:n}),this._readDeclarations(!0),this.fire({type:\"endfontface\",line:t,col:n})},_viewport:function(){var e=this._tokenStream,t,n;e.mustMatch(Tokens.VIEWPORT_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),this.fire({type:\"startviewport\",line:t,col:n}),this._readDeclarations(!0),this.fire({type:\"endviewport\",line:t,col:n})},_operator:function(e){var t=this._tokenStream,n=null;if(t.match([Tokens.SLASH,Tokens.COMMA])||e&&t.match([Tokens.PLUS,Tokens.STAR,Tokens.MINUS]))n=t.token(),this._readWhitespace();return n?PropertyValuePart.fromToken(n):null},_combinator:function(){var e=this._tokenStream,t=null,n;return e.match([Tokens.PLUS,Tokens.GREATER,Tokens.TILDE])&&(n=e.token(),t=new Combinator(n.value,n.startLine,n.startCol),this._readWhitespace()),t},_unary_operator:function(){var e=this._tokenStream;return e.match([Tokens.MINUS,Tokens.PLUS])?e.token().value:null},_property:function(){var e=this._tokenStream,t=null,n=null,r,i,s,o;return e.peek()==Tokens.STAR&&this.options.starHack&&(e.get(),i=e.token(),n=i.value,s=i.startLine,o=i.startCol),e.match(Tokens.IDENT)&&(i=e.token(),r=i.value,r.charAt(0)==\"_\"&&this.options.underscoreHack&&(n=\"_\",r=r.substring(1)),t=new PropertyName(r,n,s||i.startLine,o||i.startCol),this._readWhitespace()),t},_ruleset:function(){var e=this._tokenStream,t,n;try{n=this._selectors_group()}catch(r){if(r instanceof SyntaxError&&!this.options.strict){this.fire({type:\"error\",error:r,message:r.message,line:r.line,col:r.col}),t=e.advance([Tokens.RBRACE]);if(t!=Tokens.RBRACE)throw r;return!0}throw r}return n&&(this.fire({type:\"startrule\",selectors:n,line:n[0].line,col:n[0].col}),this._readDeclarations(!0),this.fire({type:\"endrule\",selectors:n,line:n[0].line,col:n[0].col})),n},_selectors_group:function(){var e=this._tokenStream,t=[],n;n=this._selector();if(n!==null){t.push(n);while(e.match(Tokens.COMMA))this._readWhitespace(),n=this._selector(),n!==null?t.push(n):this._unexpectedToken(e.LT(1))}return t.length?t:null},_selector:function(){var e=this._tokenStream,t=[],n=null,r=null,i=null;n=this._simple_selector_sequence();if(n===null)return null;t.push(n);do{r=this._combinator();if(r!==null)t.push(r),n=this._simple_selector_sequence(),n===null?this._unexpectedToken(e.LT(1)):t.push(n);else{if(!this._readWhitespace())break;i=new Combinator(e.token().value,e.token().startLine,e.token().startCol),r=this._combinator(),n=this._simple_selector_sequence(),n===null?r!==null&&this._unexpectedToken(e.LT(1)):(r!==null?t.push(r):t.push(i),t.push(n))}}while(!0);return new Selector(t,t[0].line,t[0].col)},_simple_selector_sequence:function(){var e=this._tokenStream,t=null,n=[],r=\"\",i=[function(){return e.match(Tokens.HASH)?new SelectorSubPart(e.token().value,\"id\",e.token().startLine,e.token().startCol):null},this._class,this._attrib,this._pseudo,this._negation],s=0,o=i.length,u=null,a=!1,f,l;f=e.LT(1).startLine,l=e.LT(1).startCol,t=this._type_selector(),t||(t=this._universal()),t!==null&&(r+=t);for(;;){if(e.peek()===Tokens.S)break;while(s<o&&u===null)u=i[s++].call(this);if(u===null){if(r===\"\")return null;break}s=0,n.push(u),r+=u.toString(),u=null}return r!==\"\"?new SelectorPart(t,n,r,f,l):null},_type_selector:function(){var e=this._tokenStream,t=this._namespace_prefix(),n=this._element_name();return n?(t&&(n.text=t+n.text,n.col-=t.length),n):(t&&(e.unget(),t.length>1&&e.unget()),null)},_class:function(){var e=this._tokenStream,t;return e.match(Tokens.DOT)?(e.mustMatch(Tokens.IDENT),t=e.token(),new SelectorSubPart(\".\"+t.value,\"class\",t.startLine,t.startCol-1)):null},_element_name:function(){var e=this._tokenStream,t;return e.match(Tokens.IDENT)?(t=e.token(),new SelectorSubPart(t.value,\"elementName\",t.startLine,t.startCol)):null},_namespace_prefix:function(){var e=this._tokenStream,t=\"\";if(e.LA(1)===Tokens.PIPE||e.LA(2)===Tokens.PIPE)e.match([Tokens.IDENT,Tokens.STAR])&&(t+=e.token().value),e.mustMatch(Tokens.PIPE),t+=\"|\";return t.length?t:null},_universal:function(){var e=this._tokenStream,t=\"\",n;return n=this._namespace_prefix(),n&&(t+=n),e.match(Tokens.STAR)&&(t+=\"*\"),t.length?t:null},_attrib:function(){var e=this._tokenStream,t=null,n,r;return e.match(Tokens.LBRACKET)?(r=e.token(),t=r.value,t+=this._readWhitespace(),n=this._namespace_prefix(),n&&(t+=n),e.mustMatch(Tokens.IDENT),t+=e.token().value,t+=this._readWhitespace(),e.match([Tokens.PREFIXMATCH,Tokens.SUFFIXMATCH,Tokens.SUBSTRINGMATCH,Tokens.EQUALS,Tokens.INCLUDES,Tokens.DASHMATCH])&&(t+=e.token().value,t+=this._readWhitespace(),e.mustMatch([Tokens.IDENT,Tokens.STRING]),t+=e.token().value,t+=this._readWhitespace()),e.mustMatch(Tokens.RBRACKET),new SelectorSubPart(t+\"]\",\"attribute\",r.startLine,r.startCol)):null},_pseudo:function(){var e=this._tokenStream,t=null,n=\":\",r,i;return e.match(Tokens.COLON)&&(e.match(Tokens.COLON)&&(n+=\":\"),e.match(Tokens.IDENT)?(t=e.token().value,r=e.token().startLine,i=e.token().startCol-n.length):e.peek()==Tokens.FUNCTION&&(r=e.LT(1).startLine,i=e.LT(1).startCol-n.length,t=this._functional_pseudo()),t&&(t=new SelectorSubPart(n+t,\"pseudo\",r,i))),t},_functional_pseudo:function(){var e=this._tokenStream,t=null;return e.match(Tokens.FUNCTION)&&(t=e.token().value,t+=this._readWhitespace(),t+=this._expression(),e.mustMatch(Tokens.RPAREN),t+=\")\"),t},_expression:function(){var e=this._tokenStream,t=\"\";while(e.match([Tokens.PLUS,Tokens.MINUS,Tokens.DIMENSION,Tokens.NUMBER,Tokens.STRING,Tokens.IDENT,Tokens.LENGTH,Tokens.FREQ,Tokens.ANGLE,Tokens.TIME,Tokens.RESOLUTION,Tokens.SLASH]))t+=e.token().value,t+=this._readWhitespace();return t.length?t:null},_negation:function(){var e=this._tokenStream,t,n,r=\"\",i,s=null;return e.match(Tokens.NOT)&&(r=e.token().value,t=e.token().startLine,n=e.token().startCol,r+=this._readWhitespace(),i=this._negation_arg(),r+=i,r+=this._readWhitespace(),e.match(Tokens.RPAREN),r+=e.token().value,s=new SelectorSubPart(r,\"not\",t,n),s.args.push(i)),s},_negation_arg:function(){var e=this._tokenStream,t=[this._type_selector,this._universal,function(){return e.match(Tokens.HASH)?new SelectorSubPart(e.token().value,\"id\",e.token().startLine,e.token().startCol):null},this._class,this._attrib,this._pseudo],n=null,r=0,i=t.length,s,o,u,a;o=e.LT(1).startLine,u=e.LT(1).startCol;while(r<i&&n===null)n=t[r].call(this),r++;return n===null&&this._unexpectedToken(e.LT(1)),n.type==\"elementName\"?a=new SelectorPart(n,[],n.toString(),o,u):a=new SelectorPart(null,[n],n.toString(),o,u),a},_declaration:function(){var e=this._tokenStream,t=null,n=null,r=null,i=null,s=null,o=\"\";t=this._property();if(t!==null){e.mustMatch(Tokens.COLON),this._readWhitespace(),n=this._expr(),(!n||n.length===0)&&this._unexpectedToken(e.LT(1)),r=this._prio(),o=t.toString();if(this.options.starHack&&t.hack==\"*\"||this.options.underscoreHack&&t.hack==\"_\")o=t.text;try{this._validateProperty(o,n)}catch(u){s=u}return this.fire({type:\"property\",property:t,value:n,important:r,line:t.line,col:t.col,invalid:s}),!0}return!1},_prio:function(){var e=this._tokenStream,t=e.match(Tokens.IMPORTANT_SYM);return this._readWhitespace(),t},_expr:function(e){var t=this._tokenStream,n=[],r=null,i=null;r=this._term(e);if(r!==null){n.push(r);do{i=this._operator(e),i&&n.push(i),r=this._term(e);if(r===null)break;n.push(r)}while(!0)}return n.length>0?new PropertyValue(n,n[0].line,n[0].col):null},_term:function(e){var t=this._tokenStream,n=null,r=null,i=null,s,o,u;return n=this._unary_operator(),n!==null&&(o=t.token().startLine,u=t.token().startCol),t.peek()==Tokens.IE_FUNCTION&&this.options.ieFilters?(r=this._ie_function(),n===null&&(o=t.token().startLine,u=t.token().startCol)):e&&t.match([Tokens.LPAREN,Tokens.LBRACE,Tokens.LBRACKET])?(s=t.token(),i=s.endChar,r=s.value+this._expr(e).text,n===null&&(o=t.token().startLine,u=t.token().startCol),t.mustMatch(Tokens.type(i)),r+=i,this._readWhitespace()):t.match([Tokens.NUMBER,Tokens.PERCENTAGE,Tokens.LENGTH,Tokens.ANGLE,Tokens.TIME,Tokens.FREQ,Tokens.STRING,Tokens.IDENT,Tokens.URI,Tokens.UNICODE_RANGE])?(r=t.token().value,n===null&&(o=t.token().startLine,u=t.token().startCol),this._readWhitespace()):(s=this._hexcolor(),s===null?(n===null&&(o=t.LT(1).startLine,u=t.LT(1).startCol),r===null&&(t.LA(3)==Tokens.EQUALS&&this.options.ieFilters?r=this._ie_function():r=this._function())):(r=s.value,n===null&&(o=s.startLine,u=s.startCol))),r!==null?new PropertyValuePart(n!==null?n+r:r,o,u):null},_function:function(){var e=this._tokenStream,t=null,n=null,r;if(e.match(Tokens.FUNCTION)){t=e.token().value,this._readWhitespace(),n=this._expr(!0),t+=n;if(this.options.ieFilters&&e.peek()==Tokens.EQUALS)do{this._readWhitespace()&&(t+=e.token().value),e.LA(0)==Tokens.COMMA&&(t+=e.token().value),e.match(Tokens.IDENT),t+=e.token().value,e.match(Tokens.EQUALS),t+=e.token().value,r=e.peek();while(r!=Tokens.COMMA&&r!=Tokens.S&&r!=Tokens.RPAREN)e.get(),t+=e.token().value,r=e.peek()}while(e.match([Tokens.COMMA,Tokens.S]));e.match(Tokens.RPAREN),t+=\")\",this._readWhitespace()}return t},_ie_function:function(){var e=this._tokenStream,t=null,n=null,r;if(e.match([Tokens.IE_FUNCTION,Tokens.FUNCTION])){t=e.token().value;do{this._readWhitespace()&&(t+=e.token().value),e.LA(0)==Tokens.COMMA&&(t+=e.token().value),e.match(Tokens.IDENT),t+=e.token().value,e.match(Tokens.EQUALS),t+=e.token().value,r=e.peek();while(r!=Tokens.COMMA&&r!=Tokens.S&&r!=Tokens.RPAREN)e.get(),t+=e.token().value,r=e.peek()}while(e.match([Tokens.COMMA,Tokens.S]));e.match(Tokens.RPAREN),t+=\")\",this._readWhitespace()}return t},_hexcolor:function(){var e=this._tokenStream,t=null,n;if(e.match(Tokens.HASH)){t=e.token(),n=t.value;if(!/#[a-f0-9]{3,6}/i.test(n))throw new SyntaxError(\"Expected a hex color but found '\"+n+\"' at line \"+t.startLine+\", col \"+t.startCol+\".\",t.startLine,t.startCol);this._readWhitespace()}return t},_keyframes:function(){var e=this._tokenStream,t,n,r,i=\"\";e.mustMatch(Tokens.KEYFRAMES_SYM),t=e.token(),/^@\\-([^\\-]+)\\-/.test(t.value)&&(i=RegExp.$1),this._readWhitespace(),r=this._keyframe_name(),this._readWhitespace(),e.mustMatch(Tokens.LBRACE),this.fire({type:\"startkeyframes\",name:r,prefix:i,line:t.startLine,col:t.startCol}),this._readWhitespace(),n=e.peek();while(n==Tokens.IDENT||n==Tokens.PERCENTAGE)this._keyframe_rule(),this._readWhitespace(),n=e.peek();this.fire({type:\"endkeyframes\",name:r,prefix:i,line:t.startLine,col:t.startCol}),this._readWhitespace(),e.mustMatch(Tokens.RBRACE)},_keyframe_name:function(){var e=this._tokenStream,t;return e.mustMatch([Tokens.IDENT,Tokens.STRING]),SyntaxUnit.fromToken(e.token())},_keyframe_rule:function(){var e=this._tokenStream,t,n=this._key_list();this.fire({type:\"startkeyframerule\",keys:n,line:n[0].line,col:n[0].col}),this._readDeclarations(!0),this.fire({type:\"endkeyframerule\",keys:n,line:n[0].line,col:n[0].col})},_key_list:function(){var e=this._tokenStream,t,n,r=[];r.push(this._key()),this._readWhitespace();while(e.match(Tokens.COMMA))this._readWhitespace(),r.push(this._key()),this._readWhitespace();return r},_key:function(){var e=this._tokenStream,t;if(e.match(Tokens.PERCENTAGE))return SyntaxUnit.fromToken(e.token());if(e.match(Tokens.IDENT)){t=e.token();if(/from|to/i.test(t.value))return SyntaxUnit.fromToken(t);e.unget()}this._unexpectedToken(e.LT(1))},_skipCruft:function(){while(this._tokenStream.match([Tokens.S,Tokens.CDO,Tokens.CDC]));},_readDeclarations:function(e,t){var n=this._tokenStream,r;this._readWhitespace(),e&&n.mustMatch(Tokens.LBRACE),this._readWhitespace();try{for(;;){if(!(n.match(Tokens.SEMICOLON)||t&&this._margin())){if(!this._declaration())break;if(!n.match(Tokens.SEMICOLON))break}this._readWhitespace()}n.mustMatch(Tokens.RBRACE),this._readWhitespace()}catch(i){if(!(i instanceof SyntaxError&&!this.options.strict))throw i;this.fire({type:\"error\",error:i,message:i.message,line:i.line,col:i.col}),r=n.advance([Tokens.SEMICOLON,Tokens.RBRACE]);if(r==Tokens.SEMICOLON)this._readDeclarations(!1,t);else if(r!=Tokens.RBRACE)throw i}},_readWhitespace:function(){var e=this._tokenStream,t=\"\";while(e.match(Tokens.S))t+=e.token().value;return t},_unexpectedToken:function(e){throw new SyntaxError(\"Unexpected token '\"+e.value+\"' at line \"+e.startLine+\", col \"+e.startCol+\".\",e.startLine,e.startCol)},_verifyEnd:function(){this._tokenStream.LA(1)!=Tokens.EOF&&this._unexpectedToken(this._tokenStream.LT(1))},_validateProperty:function(e,t){Validation.validate(e,t)},parse:function(e){this._tokenStream=new TokenStream(e,Tokens),this._stylesheet()},parseStyleSheet:function(e){return this.parse(e)},parseMediaQuery:function(e){this._tokenStream=new TokenStream(e,Tokens);var t=this._media_query();return this._verifyEnd(),t},parsePropertyValue:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._expr();return this._readWhitespace(),this._verifyEnd(),t},parseRule:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._ruleset();return this._readWhitespace(),this._verifyEnd(),t},parseSelector:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._selector();return this._readWhitespace(),this._verifyEnd(),t},parseStyleAttribute:function(e){e+=\"}\",this._tokenStream=new TokenStream(e,Tokens),this._readDeclarations()}};for(t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e}();var Properties={\"align-items\":\"flex-start | flex-end | center | baseline | stretch\",\"align-content\":\"flex-start | flex-end | center | space-between | space-around | stretch\",\"align-self\":\"auto | flex-start | flex-end | center | baseline | stretch\",\"-webkit-align-items\":\"flex-start | flex-end | center | baseline | stretch\",\"-webkit-align-content\":\"flex-start | flex-end | center | space-between | space-around | stretch\",\"-webkit-align-self\":\"auto | flex-start | flex-end | center | baseline | stretch\",\"alignment-adjust\":\"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>\",\"alignment-baseline\":\"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",animation:1,\"animation-delay\":{multi:\"<time>\",comma:!0},\"animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"animation-duration\":{multi:\"<time>\",comma:!0},\"animation-fill-mode\":{multi:\"none | forwards | backwards | both\",comma:!0},\"animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"animation-name\":{multi:\"none | <ident>\",comma:!0},\"animation-play-state\":{multi:\"running | paused\",comma:!0},\"animation-timing-function\":1,\"-moz-animation-delay\":{multi:\"<time>\",comma:!0},\"-moz-animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"-moz-animation-duration\":{multi:\"<time>\",comma:!0},\"-moz-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-moz-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-moz-animation-play-state\":{multi:\"running | paused\",comma:!0},\"-ms-animation-delay\":{multi:\"<time>\",comma:!0},\"-ms-animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"-ms-animation-duration\":{multi:\"<time>\",comma:!0},\"-ms-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-ms-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-ms-animation-play-state\":{multi:\"running | paused\",comma:!0},\"-webkit-animation-delay\":{multi:\"<time>\",comma:!0},\"-webkit-animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"-webkit-animation-duration\":{multi:\"<time>\",comma:!0},\"-webkit-animation-fill-mode\":{multi:\"none | forwards | backwards | both\",comma:!0},\"-webkit-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-webkit-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-webkit-animation-play-state\":{multi:\"running | paused\",comma:!0},\"-o-animation-delay\":{multi:\"<time>\",comma:!0},\"-o-animation-direction\":{multi:\"normal | reverse | alternate | alternate-reverse\",comma:!0},\"-o-animation-duration\":{multi:\"<time>\",comma:!0},\"-o-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-o-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-o-animation-play-state\":{multi:\"running | paused\",comma:!0},appearance:\"icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | none | inherit\",azimuth:function(e){var t=\"<angle> | leftwards | rightwards | inherit\",n=\"left-side | far-left | left | center-left | center | center-right | right | far-right | right-side\",r=!1,i=!1,s;ValidationTypes.isAny(e,t)||(ValidationTypes.isAny(e,\"behind\")&&(r=!0,i=!0),ValidationTypes.isAny(e,n)&&(i=!0,r||ValidationTypes.isAny(e,\"behind\")));if(e.hasNext())throw s=e.next(),i?new ValidationError(\"Expected end of value but found '\"+s+\"'.\",s.line,s.col):new ValidationError(\"Expected (<'azimuth'>) but found '\"+s+\"'.\",s.line,s.col)},\"backface-visibility\":\"visible | hidden\",background:1,\"background-attachment\":{multi:\"<attachment>\",comma:!0},\"background-clip\":{multi:\"<box>\",comma:!0},\"background-color\":\"<color> | inherit\",\"background-image\":{multi:\"<bg-image>\",comma:!0},\"background-origin\":{multi:\"<box>\",comma:!0},\"background-position\":{multi:\"<bg-position>\",comma:!0},\"background-repeat\":{multi:\"<repeat-style>\"},\"background-size\":{multi:\"<bg-size>\",comma:!0},\"baseline-shift\":\"baseline | sub | super | <percentage> | <length>\",behavior:1,binding:1,bleed:\"<length>\",\"bookmark-label\":\"<content> | <attr> | <string>\",\"bookmark-level\":\"none | <integer>\",\"bookmark-state\":\"open | closed\",\"bookmark-target\":\"none | <uri> | <attr>\",border:\"<border-width> || <border-style> || <color>\",\"border-bottom\":\"<border-width> || <border-style> || <color>\",\"border-bottom-color\":\"<color> | inherit\",\"border-bottom-left-radius\":\"<x-one-radius>\",\"border-bottom-right-radius\":\"<x-one-radius>\",\"border-bottom-style\":\"<border-style>\",\"border-bottom-width\":\"<border-width>\",\"border-collapse\":\"collapse | separate | inherit\",\"border-color\":{multi:\"<color> | inherit\",max:4},\"border-image\":1,\"border-image-outset\":{multi:\"<length> | <number>\",max:4},\"border-image-repeat\":{multi:\"stretch | repeat | round\",max:2},\"border-image-slice\":function(e){var t=!1,n=\"<number> | <percentage>\",r=!1,i=0,s=4,o;ValidationTypes.isAny(e,\"fill\")&&(r=!0,t=!0);while(e.hasNext()&&i<s){t=ValidationTypes.isAny(e,n);if(!t)break;i++}r?t=!0:ValidationTypes.isAny(e,\"fill\");if(e.hasNext())throw o=e.next(),t?new ValidationError(\"Expected end of value but found '\"+o+\"'.\",o.line,o.col):new ValidationError(\"Expected ([<number> | <percentage>]{1,4} && fill?) but found '\"+o+\"'.\",o.line,o.col)},\"border-image-source\":\"<image> | none\",\"border-image-width\":{multi:\"<length> | <percentage> | <number> | auto\",max:4},\"border-left\":\"<border-width> || <border-style> || <color>\",\"border-left-color\":\"<color> | inherit\",\"border-left-style\":\"<border-style>\",\"border-left-width\":\"<border-width>\",\"border-radius\":function(e){var t=!1,n=\"<length> | <percentage> | inherit\",r=!1,i=!1,s=0,o=8,u;while(e.hasNext()&&s<o){t=ValidationTypes.isAny(e,n);if(!t){if(!(e.peek()==\"/\"&&s>0&&!r))break;r=!0,o=s+5,e.next()}s++}if(e.hasNext())throw u=e.next(),t?new ValidationError(\"Expected end of value but found '\"+u+\"'.\",u.line,u.col):new ValidationError(\"Expected (<'border-radius'>) but found '\"+u+\"'.\",u.line,u.col)},\"border-right\":\"<border-width> || <border-style> || <color>\",\"border-right-color\":\"<color> | inherit\",\"border-right-style\":\"<border-style>\",\"border-right-width\":\"<border-width>\",\"border-spacing\":{multi:\"<length> | inherit\",max:2},\"border-style\":{multi:\"<border-style>\",max:4},\"border-top\":\"<border-width> || <border-style> || <color>\",\"border-top-color\":\"<color> | inherit\",\"border-top-left-radius\":\"<x-one-radius>\",\"border-top-right-radius\":\"<x-one-radius>\",\"border-top-style\":\"<border-style>\",\"border-top-width\":\"<border-width>\",\"border-width\":{multi:\"<border-width>\",max:4},bottom:\"<margin-width> | inherit\",\"-moz-box-align\":\"start | end | center | baseline | stretch\",\"-moz-box-decoration-break\":\"slice |clone\",\"-moz-box-direction\":\"normal | reverse | inherit\",\"-moz-box-flex\":\"<number>\",\"-moz-box-flex-group\":\"<integer>\",\"-moz-box-lines\":\"single | multiple\",\"-moz-box-ordinal-group\":\"<integer>\",\"-moz-box-orient\":\"horizontal | vertical | inline-axis | block-axis | inherit\",\"-moz-box-pack\":\"start | end | center | justify\",\"-webkit-box-align\":\"start | end | center | baseline | stretch\",\"-webkit-box-decoration-break\":\"slice |clone\",\"-webkit-box-direction\":\"normal | reverse | inherit\",\"-webkit-box-flex\":\"<number>\",\"-webkit-box-flex-group\":\"<integer>\",\"-webkit-box-lines\":\"single | multiple\",\"-webkit-box-ordinal-group\":\"<integer>\",\"-webkit-box-orient\":\"horizontal | vertical | inline-axis | block-axis | inherit\",\"-webkit-box-pack\":\"start | end | center | justify\",\"box-shadow\":function(e){var t=!1,n;if(!ValidationTypes.isAny(e,\"none\"))Validation.multiProperty(\"<shadow>\",e,!0,Infinity);else if(e.hasNext())throw n=e.next(),new ValidationError(\"Expected end of value but found '\"+n+\"'.\",n.line,n.col)},\"box-sizing\":\"content-box | border-box | inherit\",\"break-after\":\"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\"break-before\":\"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\"break-inside\":\"auto | avoid | avoid-page | avoid-column\",\"caption-side\":\"top | bottom | inherit\",clear:\"none | right | left | both | inherit\",clip:1,color:\"<color> | inherit\",\"color-profile\":1,\"column-count\":\"<integer> | auto\",\"column-fill\":\"auto | balance\",\"column-gap\":\"<length> | normal\",\"column-rule\":\"<border-width> || <border-style> || <color>\",\"column-rule-color\":\"<color>\",\"column-rule-style\":\"<border-style>\",\"column-rule-width\":\"<border-width>\",\"column-span\":\"none | all\",\"column-width\":\"<length> | auto\",columns:1,content:1,\"counter-increment\":1,\"counter-reset\":1,crop:\"<shape> | auto\",cue:\"cue-after | cue-before | inherit\",\"cue-after\":1,\"cue-before\":1,cursor:1,direction:\"ltr | rtl | inherit\",display:\"inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | none | inherit | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex\",\"dominant-baseline\":1,\"drop-initial-after-adjust\":\"central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>\",\"drop-initial-after-align\":\"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\"drop-initial-before-adjust\":\"before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>\",\"drop-initial-before-align\":\"caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\"drop-initial-size\":\"auto | line | <length> | <percentage>\",\"drop-initial-value\":\"initial | <integer>\",elevation:\"<angle> | below | level | above | higher | lower | inherit\",\"empty-cells\":\"show | hide | inherit\",filter:1,fit:\"fill | hidden | meet | slice\",\"fit-position\":1,flex:\"<flex>\",\"flex-basis\":\"<width>\",\"flex-direction\":\"row | row-reverse | column | column-reverse\",\"flex-flow\":\"<flex-direction> || <flex-wrap>\",\"flex-grow\":\"<number>\",\"flex-shrink\":\"<number>\",\"flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"-webkit-flex\":\"<flex>\",\"-webkit-flex-basis\":\"<width>\",\"-webkit-flex-direction\":\"row | row-reverse | column | column-reverse\",\"-webkit-flex-flow\":\"<flex-direction> || <flex-wrap>\",\"-webkit-flex-grow\":\"<number>\",\"-webkit-flex-shrink\":\"<number>\",\"-webkit-flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"-ms-flex\":\"<flex>\",\"-ms-flex-align\":\"start | end | center | stretch | baseline\",\"-ms-flex-direction\":\"row | row-reverse | column | column-reverse | inherit\",\"-ms-flex-order\":\"<number>\",\"-ms-flex-pack\":\"start | end | center | justify\",\"-ms-flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"float\":\"left | right | none | inherit\",\"float-offset\":1,font:1,\"font-family\":1,\"font-size\":\"<absolute-size> | <relative-size> | <length> | <percentage> | inherit\",\"font-size-adjust\":\"<number> | none | inherit\",\"font-stretch\":\"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit\",\"font-style\":\"normal | italic | oblique | inherit\",\"font-variant\":\"normal | small-caps | inherit\",\"font-weight\":\"normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit\",\"grid-cell-stacking\":\"columns | rows | layer\",\"grid-column\":1,\"grid-columns\":1,\"grid-column-align\":\"start | end | center | stretch\",\"grid-column-sizing\":1,\"grid-column-span\":\"<integer>\",\"grid-flow\":\"none | rows | columns\",\"grid-layer\":\"<integer>\",\"grid-row\":1,\"grid-rows\":1,\"grid-row-align\":\"start | end | center | stretch\",\"grid-row-span\":\"<integer>\",\"grid-row-sizing\":1,\"hanging-punctuation\":1,height:\"<margin-width> | <content-sizing> | inherit\",\"hyphenate-after\":\"<integer> | auto\",\"hyphenate-before\":\"<integer> | auto\",\"hyphenate-character\":\"<string> | auto\",\"hyphenate-lines\":\"no-limit | <integer>\",\"hyphenate-resource\":1,hyphens:\"none | manual | auto\",icon:1,\"image-orientation\":\"angle | auto\",\"image-rendering\":1,\"image-resolution\":1,\"inline-box-align\":\"initial | last | <integer>\",\"justify-content\":\"flex-start | flex-end | center | space-between | space-around\",\"-webkit-justify-content\":\"flex-start | flex-end | center | space-between | space-around\",left:\"<margin-width> | inherit\",\"letter-spacing\":\"<length> | normal | inherit\",\"line-height\":\"<number> | <length> | <percentage> | normal | inherit\",\"line-break\":\"auto | loose | normal | strict\",\"line-stacking\":1,\"line-stacking-ruby\":\"exclude-ruby | include-ruby\",\"line-stacking-shift\":\"consider-shifts | disregard-shifts\",\"line-stacking-strategy\":\"inline-line-height | block-line-height | max-height | grid-height\",\"list-style\":1,\"list-style-image\":\"<uri> | none | inherit\",\"list-style-position\":\"inside | outside | inherit\",\"list-style-type\":\"disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit\",margin:{multi:\"<margin-width> | inherit\",max:4},\"margin-bottom\":\"<margin-width> | inherit\",\"margin-left\":\"<margin-width> | inherit\",\"margin-right\":\"<margin-width> | inherit\",\"margin-top\":\"<margin-width> | inherit\",mark:1,\"mark-after\":1,\"mark-before\":1,marks:1,\"marquee-direction\":1,\"marquee-play-count\":1,\"marquee-speed\":1,\"marquee-style\":1,\"max-height\":\"<length> | <percentage> | <content-sizing> | none | inherit\",\"max-width\":\"<length> | <percentage> | <content-sizing> | none | inherit\",\"max-zoom\":\"<number> | <percentage> | auto\",\"min-height\":\"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\"min-width\":\"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\"min-zoom\":\"<number> | <percentage> | auto\",\"move-to\":1,\"nav-down\":1,\"nav-index\":1,\"nav-left\":1,\"nav-right\":1,\"nav-up\":1,opacity:\"<number> | inherit\",order:\"<integer>\",\"-webkit-order\":\"<integer>\",orphans:\"<integer> | inherit\",outline:1,\"outline-color\":\"<color> | invert | inherit\",\"outline-offset\":1,\"outline-style\":\"<border-style> | inherit\",\"outline-width\":\"<border-width> | inherit\",overflow:\"visible | hidden | scroll | auto | inherit\",\"overflow-style\":1,\"overflow-wrap\":\"normal | break-word\",\"overflow-x\":1,\"overflow-y\":1,padding:{multi:\"<padding-width> | inherit\",max:4},\"padding-bottom\":\"<padding-width> | inherit\",\"padding-left\":\"<padding-width> | inherit\",\"padding-right\":\"<padding-width> | inherit\",\"padding-top\":\"<padding-width> | inherit\",page:1,\"page-break-after\":\"auto | always | avoid | left | right | inherit\",\"page-break-before\":\"auto | always | avoid | left | right | inherit\",\"page-break-inside\":\"auto | avoid | inherit\",\"page-policy\":1,pause:1,\"pause-after\":1,\"pause-before\":1,perspective:1,\"perspective-origin\":1,phonemes:1,pitch:1,\"pitch-range\":1,\"play-during\":1,\"pointer-events\":\"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit\",position:\"static | relative | absolute | fixed | inherit\",\"presentation-level\":1,\"punctuation-trim\":1,quotes:1,\"rendering-intent\":1,resize:1,rest:1,\"rest-after\":1,\"rest-before\":1,richness:1,right:\"<margin-width> | inherit\",rotation:1,\"rotation-point\":1,\"ruby-align\":1,\"ruby-overhang\":1,\"ruby-position\":1,\"ruby-span\":1,size:1,speak:\"normal | none | spell-out | inherit\",\"speak-header\":\"once | always | inherit\",\"speak-numeral\":\"digits | continuous | inherit\",\"speak-punctuation\":\"code | none | inherit\",\"speech-rate\":1,src:1,stress:1,\"string-set\":1,\"table-layout\":\"auto | fixed | inherit\",\"tab-size\":\"<integer> | <length>\",target:1,\"target-name\":1,\"target-new\":1,\"target-position\":1,\"text-align\":\"left | right | center | justify | inherit\",\"text-align-last\":1,\"text-decoration\":1,\"text-emphasis\":1,\"text-height\":1,\"text-indent\":\"<length> | <percentage> | inherit\",\"text-justify\":\"auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida\",\"text-outline\":1,\"text-overflow\":1,\"text-rendering\":\"auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit\",\"text-shadow\":1,\"text-transform\":\"capitalize | uppercase | lowercase | none | inherit\",\"text-wrap\":\"normal | none | avoid\",top:\"<margin-width> | inherit\",\"-ms-touch-action\":\"auto | none | pan-x | pan-y\",\"touch-action\":\"auto | none | pan-x | pan-y\",transform:1,\"transform-origin\":1,\"transform-style\":1,transition:1,\"transition-delay\":1,\"transition-duration\":1,\"transition-property\":1,\"transition-timing-function\":1,\"unicode-bidi\":\"normal | embed | isolate | bidi-override | isolate-override | plaintext | inherit\",\"user-modify\":\"read-only | read-write | write-only | inherit\",\"user-select\":\"none | text | toggle | element | elements | all | inherit\",\"user-zoom\":\"zoom | fixed\",\"vertical-align\":\"auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>\",visibility:\"visible | hidden | collapse | inherit\",\"voice-balance\":1,\"voice-duration\":1,\"voice-family\":1,\"voice-pitch\":1,\"voice-pitch-range\":1,\"voice-rate\":1,\"voice-stress\":1,\"voice-volume\":1,volume:1,\"white-space\":\"normal | pre | nowrap | pre-wrap | pre-line | inherit | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap\",\"white-space-collapse\":1,widows:\"<integer> | inherit\",width:\"<length> | <percentage> | <content-sizing> | auto | inherit\",\"word-break\":\"normal | keep-all | break-all\",\"word-spacing\":\"<length> | normal | inherit\",\"word-wrap\":\"normal | break-word\",\"writing-mode\":\"horizontal-tb | vertical-rl | vertical-lr | lr-tb | rl-tb | tb-rl | bt-rl | tb-lr | bt-lr | lr-bt | rl-bt | lr | rl | tb | inherit\",\"z-index\":\"<integer> | auto | inherit\",zoom:\"<number> | <percentage> | normal\"};PropertyName.prototype=new SyntaxUnit,PropertyName.prototype.constructor=PropertyName,PropertyName.prototype.toString=function(){return(this.hack?this.hack:\"\")+this.text},PropertyValue.prototype=new SyntaxUnit,PropertyValue.prototype.constructor=PropertyValue,PropertyValueIterator.prototype.count=function(){return this._parts.length},PropertyValueIterator.prototype.isFirst=function(){return this._i===0},PropertyValueIterator.prototype.hasNext=function(){return this._i<this._parts.length},PropertyValueIterator.prototype.mark=function(){this._marks.push(this._i)},PropertyValueIterator.prototype.peek=function(e){return this.hasNext()?this._parts[this._i+(e||0)]:null},PropertyValueIterator.prototype.next=function(){return this.hasNext()?this._parts[this._i++]:null},PropertyValueIterator.prototype.previous=function(){return this._i>0?this._parts[--this._i]:null},PropertyValueIterator.prototype.restore=function(){this._marks.length&&(this._i=this._marks.pop())},PropertyValuePart.prototype=new SyntaxUnit,PropertyValuePart.prototype.constructor=PropertyValuePart,PropertyValuePart.fromToken=function(e){return new PropertyValuePart(e.value,e.startLine,e.startCol)};var Pseudos={\":first-letter\":1,\":first-line\":1,\":before\":1,\":after\":1};Pseudos.ELEMENT=1,Pseudos.CLASS=2,Pseudos.isElement=function(e){return e.indexOf(\"::\")===0||Pseudos[e.toLowerCase()]==Pseudos.ELEMENT},Selector.prototype=new SyntaxUnit,Selector.prototype.constructor=Selector,SelectorPart.prototype=new SyntaxUnit,SelectorPart.prototype.constructor=SelectorPart,SelectorSubPart.prototype=new SyntaxUnit,SelectorSubPart.prototype.constructor=SelectorSubPart,Specificity.prototype={constructor:Specificity,compare:function(e){var t=[\"a\",\"b\",\"c\",\"d\"],n,r;for(n=0,r=t.length;n<r;n++){if(this[t[n]]<e[t[n]])return-1;if(this[t[n]]>e[t[n]])return 1}return 0},valueOf:function(){return this.a*1e3+this.b*100+this.c*10+this.d},toString:function(){return this.a+\",\"+this.b+\",\"+this.c+\",\"+this.d}},Specificity.calculate=function(e){function u(e){var t,n,r,a,f=e.elementName?e.elementName.text:\"\",l;f&&f.charAt(f.length-1)!=\"*\"&&o++;for(t=0,r=e.modifiers.length;t<r;t++){l=e.modifiers[t];switch(l.type){case\"class\":case\"attribute\":s++;break;case\"id\":i++;break;case\"pseudo\":Pseudos.isElement(l.text)?o++:s++;break;case\"not\":for(n=0,a=l.args.length;n<a;n++)u(l.args[n])}}}var t,n,r,i=0,s=0,o=0;for(t=0,n=e.parts.length;t<n;t++)r=e.parts[t],r instanceof SelectorPart&&u(r);return new Specificity(0,i,s,o)};var h=/^[0-9a-fA-F]$/,nonascii=/^[\\u0080-\\uFFFF]$/,nl=/\\n|\\r\\n|\\r|\\f/;TokenStream.prototype=mix(new TokenStreamBase,{_getToken:function(e){var t,n=this._reader,r=null,i=n.getLine(),s=n.getCol();t=n.read();while(t){switch(t){case\"/\":n.peek()==\"*\"?r=this.commentToken(t,i,s):r=this.charToken(t,i,s);break;case\"|\":case\"~\":case\"^\":case\"$\":case\"*\":n.peek()==\"=\"?r=this.comparisonToken(t,i,s):r=this.charToken(t,i,s);break;case'\"':case\"'\":r=this.stringToken(t,i,s);break;case\"#\":isNameChar(n.peek())?r=this.hashToken(t,i,s):r=this.charToken(t,i,s);break;case\".\":isDigit(n.peek())?r=this.numberToken(t,i,s):r=this.charToken(t,i,s);break;case\"-\":n.peek()==\"-\"?r=this.htmlCommentEndToken(t,i,s):isNameStart(n.peek())?r=this.identOrFunctionToken(t,i,s):r=this.charToken(t,i,s);break;case\"!\":r=this.importantToken(t,i,s);break;case\"@\":r=this.atRuleToken(t,i,s);break;case\":\":r=this.notToken(t,i,s);break;case\"<\":r=this.htmlCommentStartToken(t,i,s);break;case\"U\":case\"u\":if(n.peek()==\"+\"){r=this.unicodeRangeToken(t,i,s);break};default:isDigit(t)?r=this.numberToken(t,i,s):isWhitespace(t)?r=this.whitespaceToken(t,i,s):isIdentStart(t)?r=this.identOrFunctionToken(t,i,s):r=this.charToken(t,i,s)}break}return!r&&t===null&&(r=this.createToken(Tokens.EOF,null,i,s)),r},createToken:function(e,t,n,r,i){var s=this._reader;return i=i||{},{value:t,type:e,channel:i.channel,endChar:i.endChar,hide:i.hide||!1,startLine:n,startCol:r,endLine:s.getLine(),endCol:s.getCol()}},atRuleToken:function(e,t,n){var r=e,i=this._reader,s=Tokens.CHAR,o=!1,u,a;i.mark(),u=this.readName(),r=e+u,s=Tokens.type(r.toLowerCase());if(s==Tokens.CHAR||s==Tokens.UNKNOWN)r.length>1?s=Tokens.UNKNOWN_SYM:(s=Tokens.CHAR,r=e,i.reset());return this.createToken(s,r,t,n)},charToken:function(e,t,n){var r=Tokens.type(e),i={};return r==-1?r=Tokens.CHAR:i.endChar=Tokens[r].endChar,this.createToken(r,e,t,n,i)},commentToken:function(e,t,n){var r=this._reader,i=this.readComment(e);return this.createToken(Tokens.COMMENT,i,t,n)},comparisonToken:function(e,t,n){var r=this._reader,i=e+r.read(),s=Tokens.type(i)||Tokens.CHAR;return this.createToken(s,i,t,n)},hashToken:function(e,t,n){var r=this._reader,i=this.readName(e);return this.createToken(Tokens.HASH,i,t,n)},htmlCommentStartToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(3),i==\"<!--\"?this.createToken(Tokens.CDO,i,t,n):(r.reset(),this.charToken(e,t,n))},htmlCommentEndToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(2),i==\"-->\"?this.createToken(Tokens.CDC,i,t,n):(r.reset(),this.charToken(e,t,n))},identOrFunctionToken:function(e,t,n){var r=this._reader,i=this.readName(e),s=Tokens.IDENT;return r.peek()==\"(\"?(i+=r.read(),i.toLowerCase()==\"url(\"?(s=Tokens.URI,i=this.readURI(i),i.toLowerCase()==\"url(\"&&(s=Tokens.FUNCTION)):s=Tokens.FUNCTION):r.peek()==\":\"&&i.toLowerCase()==\"progid\"&&(i+=r.readTo(\"(\"),s=Tokens.IE_FUNCTION),this.createToken(s,i,t,n)},importantToken:function(e,t,n){var r=this._reader,i=e,s=Tokens.CHAR,o,u;r.mark(),u=r.read();while(u){if(u==\"/\"){if(r.peek()!=\"*\")break;o=this.readComment(u);if(o===\"\")break}else{if(!isWhitespace(u)){if(/i/i.test(u)){o=r.readCount(8),/mportant/i.test(o)&&(i+=u+o,s=Tokens.IMPORTANT_SYM);break}break}i+=u+this.readWhitespace()}u=r.read()}return s==Tokens.CHAR?(r.reset(),this.charToken(e,t,n)):this.createToken(s,i,t,n)},notToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(4),i.toLowerCase()==\":not(\"?this.createToken(Tokens.NOT,i,t,n):(r.reset(),this.charToken(e,t,n))},numberToken:function(e,t,n){var r=this._reader,i=this.readNumber(e),s,o=Tokens.NUMBER,u=r.peek();return isIdentStart(u)?(s=this.readName(r.read()),i+=s,/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(s)?o=Tokens.LENGTH:/^deg|^rad$|^grad$/i.test(s)?o=Tokens.ANGLE:/^ms$|^s$/i.test(s)?o=Tokens.TIME:/^hz$|^khz$/i.test(s)?o=Tokens.FREQ:/^dpi$|^dpcm$/i.test(s)?o=Tokens.RESOLUTION:o=Tokens.DIMENSION):u==\"%\"&&(i+=r.read(),o=Tokens.PERCENTAGE),this.createToken(o,i,t,n)},stringToken:function(e,t,n){var r=e,i=e,s=this._reader,o=e,u=Tokens.STRING,a=s.read();while(a){i+=a;if(a==r&&o!=\"\\\\\")break;if(isNewLine(s.peek())&&a!=\"\\\\\"){u=Tokens.INVALID;break}o=a,a=s.read()}return a===null&&(u=Tokens.INVALID),this.createToken(u,i,t,n)},unicodeRangeToken:function(e,t,n){var r=this._reader,i=e,s,o=Tokens.CHAR;return r.peek()==\"+\"&&(r.mark(),i+=r.read(),i+=this.readUnicodeRangePart(!0),i.length==2?r.reset():(o=Tokens.UNICODE_RANGE,i.indexOf(\"?\")==-1&&r.peek()==\"-\"&&(r.mark(),s=r.read(),s+=this.readUnicodeRangePart(!1),s.length==1?r.reset():i+=s))),this.createToken(o,i,t,n)},whitespaceToken:function(e,t,n){var r=this._reader,i=e+this.readWhitespace();return this.createToken(Tokens.S,i,t,n)},readUnicodeRangePart:function(e){var t=this._reader,n=\"\",r=t.peek();while(isHexDigit(r)&&n.length<6)t.read(),n+=r,r=t.peek();if(e)while(r==\"?\"&&n.length<6)t.read(),n+=r,r=t.peek();return n},readWhitespace:function(){var e=this._reader,t=\"\",n=e.peek();while(isWhitespace(n))e.read(),t+=n,n=e.peek();return t},readNumber:function(e){var t=this._reader,n=e,r=e==\".\",i=t.peek();while(i){if(isDigit(i))n+=t.read();else{if(i!=\".\")break;if(r)break;r=!0,n+=t.read()}i=t.peek()}return n},readString:function(){var e=this._reader,t=e.read(),n=t,r=t,i=e.peek();while(i){i=e.read(),n+=i;if(i==t&&r!=\"\\\\\")break;if(isNewLine(e.peek())&&i!=\"\\\\\"){n=\"\";break}r=i,i=e.peek()}return i===null&&(n=\"\"),n},readURI:function(e){var t=this._reader,n=e,r=\"\",i=t.peek();t.mark();while(i&&isWhitespace(i))t.read(),i=t.peek();i==\"'\"||i=='\"'?r=this.readString():r=this.readURL(),i=t.peek();while(i&&isWhitespace(i))t.read(),i=t.peek();return r===\"\"||i!=\")\"?(n=e,t.reset()):n+=r+t.read(),n},readURL:function(){var e=this._reader,t=\"\",n=e.peek();while(/^[!#$%&\\\\*-~]$/.test(n))t+=e.read(),n=e.peek();return t},readName:function(e){var t=this._reader,n=e||\"\",r=t.peek();for(;;)if(r==\"\\\\\")n+=this.readEscape(t.read()),r=t.peek();else{if(!r||!isNameChar(r))break;n+=t.read(),r=t.peek()}return n},readEscape:function(e){var t=this._reader,n=e||\"\",r=0,i=t.peek();if(isHexDigit(i))do n+=t.read(),i=t.peek();while(i&&isHexDigit(i)&&++r<6);return n.length==3&&/\\s/.test(i)||n.length==7||n.length==1?t.read():i=\"\",n+i},readComment:function(e){var t=this._reader,n=e||\"\",r=t.read();if(r==\"*\"){while(r){n+=r;if(n.length>2&&r==\"*\"&&t.peek()==\"/\"){n+=t.read();break}r=t.read()}return n}return\"\"}});var Tokens=[{name:\"CDO\"},{name:\"CDC\"},{name:\"S\",whitespace:!0},{name:\"COMMENT\",comment:!0,hide:!0,channel:\"comment\"},{name:\"INCLUDES\",text:\"~=\"},{name:\"DASHMATCH\",text:\"|=\"},{name:\"PREFIXMATCH\",text:\"^=\"},{name:\"SUFFIXMATCH\",text:\"$=\"},{name:\"SUBSTRINGMATCH\",text:\"*=\"},{name:\"STRING\"},{name:\"IDENT\"},{name:\"HASH\"},{name:\"IMPORT_SYM\",text:\"@import\"},{name:\"PAGE_SYM\",text:\"@page\"},{name:\"MEDIA_SYM\",text:\"@media\"},{name:\"FONT_FACE_SYM\",text:\"@font-face\"},{name:\"CHARSET_SYM\",text:\"@charset\"},{name:\"NAMESPACE_SYM\",text:\"@namespace\"},{name:\"VIEWPORT_SYM\",text:[\"@viewport\",\"@-ms-viewport\"]},{name:\"UNKNOWN_SYM\"},{name:\"KEYFRAMES_SYM\",text:[\"@keyframes\",\"@-webkit-keyframes\",\"@-moz-keyframes\",\"@-o-keyframes\"]},{name:\"IMPORTANT_SYM\"},{name:\"LENGTH\"},{name:\"ANGLE\"},{name:\"TIME\"},{name:\"FREQ\"},{name:\"DIMENSION\"},{name:\"PERCENTAGE\"},{name:\"NUMBER\"},{name:\"URI\"},{name:\"FUNCTION\"},{name:\"UNICODE_RANGE\"},{name:\"INVALID\"},{name:\"PLUS\",text:\"+\"},{name:\"GREATER\",text:\">\"},{name:\"COMMA\",text:\",\"},{name:\"TILDE\",text:\"~\"},{name:\"NOT\"},{name:\"TOPLEFTCORNER_SYM\",text:\"@top-left-corner\"},{name:\"TOPLEFT_SYM\",text:\"@top-left\"},{name:\"TOPCENTER_SYM\",text:\"@top-center\"},{name:\"TOPRIGHT_SYM\",text:\"@top-right\"},{name:\"TOPRIGHTCORNER_SYM\",text:\"@top-right-corner\"},{name:\"BOTTOMLEFTCORNER_SYM\",text:\"@bottom-left-corner\"},{name:\"BOTTOMLEFT_SYM\",text:\"@bottom-left\"},{name:\"BOTTOMCENTER_SYM\",text:\"@bottom-center\"},{name:\"BOTTOMRIGHT_SYM\",text:\"@bottom-right\"},{name:\"BOTTOMRIGHTCORNER_SYM\",text:\"@bottom-right-corner\"},{name:\"LEFTTOP_SYM\",text:\"@left-top\"},{name:\"LEFTMIDDLE_SYM\",text:\"@left-middle\"},{name:\"LEFTBOTTOM_SYM\",text:\"@left-bottom\"},{name:\"RIGHTTOP_SYM\",text:\"@right-top\"},{name:\"RIGHTMIDDLE_SYM\",text:\"@right-middle\"},{name:\"RIGHTBOTTOM_SYM\",text:\"@right-bottom\"},{name:\"RESOLUTION\",state:\"media\"},{name:\"IE_FUNCTION\"},{name:\"CHAR\"},{name:\"PIPE\",text:\"|\"},{name:\"SLASH\",text:\"/\"},{name:\"MINUS\",text:\"-\"},{name:\"STAR\",text:\"*\"},{name:\"LBRACE\",endChar:\"}\",text:\"{\"},{name:\"RBRACE\",text:\"}\"},{name:\"LBRACKET\",endChar:\"]\",text:\"[\"},{name:\"RBRACKET\",text:\"]\"},{name:\"EQUALS\",text:\"=\"},{name:\"COLON\",text:\":\"},{name:\"SEMICOLON\",text:\";\"},{name:\"LPAREN\",endChar:\")\",text:\"(\"},{name:\"RPAREN\",text:\")\"},{name:\"DOT\",text:\".\"}];(function(){var e=[],t={};Tokens.UNKNOWN=-1,Tokens.unshift({name:\"EOF\"});for(var n=0,r=Tokens.length;n<r;n++){e.push(Tokens[n].name),Tokens[Tokens[n].name]=n;if(Tokens[n].text)if(Tokens[n].text instanceof Array)for(var i=0;i<Tokens[n].text.length;i++)t[Tokens[n].text[i]]=n;else t[Tokens[n].text]=n}Tokens.name=function(t){return e[t]},Tokens.type=function(e){return t[e]||-1}})();var Validation={validate:function(e,t){var n=e.toString().toLowerCase(),r=t.parts,i=new PropertyValueIterator(t),s=Properties[n],o,u,a,f,l,c,h,p,d,v,m;if(!s){if(n.indexOf(\"-\")!==0)throw new ValidationError(\"Unknown property '\"+e+\"'.\",e.line,e.col)}else typeof s!=\"number\"&&(typeof s==\"string\"?s.indexOf(\"||\")>-1?this.groupProperty(s,i):this.singleProperty(s,i,1):s.multi?this.multiProperty(s.multi,i,s.comma,s.max||Infinity):typeof s==\"function\"&&s(i))},singleProperty:function(e,t,n,r){var i=!1,s=t.value,o=0,u;while(t.hasNext()&&o<n){i=ValidationTypes.isAny(t,e);if(!i)break;o++}if(!i)throw t.hasNext()&&!t.isFirst()?(u=t.peek(),new ValidationError(\"Expected end of value but found '\"+u+\"'.\",u.line,u.col)):new ValidationError(\"Expected (\"+e+\") but found '\"+s+\"'.\",s.line,s.col);if(t.hasNext())throw u=t.next(),new ValidationError(\"Expected end of value but found '\"+u+\"'.\",u.line,u.col)},multiProperty:function(e,t,n,r){var i=!1,s=t.value,o=0,u=!1,a;while(t.hasNext()&&!i&&o<r){if(!ValidationTypes.isAny(t,e))break;o++;if(!t.hasNext())i=!0;else if(n){if(t.peek()!=\",\")break;a=t.next()}}if(!i)throw t.hasNext()&&!t.isFirst()?(a=t.peek(),new ValidationError(\"Expected end of value but found '\"+a+\"'.\",a.line,a.col)):(a=t.previous(),n&&a==\",\"?new ValidationError(\"Expected end of value but found '\"+a+\"'.\",a.line,a.col):new ValidationError(\"Expected (\"+e+\") but found '\"+s+\"'.\",s.line,s.col));if(t.hasNext())throw a=t.next(),new ValidationError(\"Expected end of value but found '\"+a+\"'.\",a.line,a.col)},groupProperty:function(e,t,n){var r=!1,i=t.value,s=e.split(\"||\").length,o={count:0},u=!1,a,f;while(t.hasNext()&&!r){a=ValidationTypes.isAnyOfGroup(t,e);if(!a)break;if(o[a])break;o[a]=1,o.count++,u=!0;if(o.count==s||!t.hasNext())r=!0}if(!r)throw u&&t.hasNext()?(f=t.peek(),new ValidationError(\"Expected end of value but found '\"+f+\"'.\",f.line,f.col)):new ValidationError(\"Expected (\"+e+\") but found '\"+i+\"'.\",i.line,i.col);if(t.hasNext())throw f=t.next(),new ValidationError(\"Expected end of value but found '\"+f+\"'.\",f.line,f.col)}};ValidationError.prototype=new Error;var ValidationTypes={isLiteral:function(e,t){var n=e.text.toString().toLowerCase(),r=t.split(\" | \"),i,s,o=!1;for(i=0,s=r.length;i<s&&!o;i++)n==r[i].toLowerCase()&&(o=!0);return o},isSimple:function(e){return!!this.simple[e]},isComplex:function(e){return!!this.complex[e]},isAny:function(e,t){var n=t.split(\" | \"),r,i,s=!1;for(r=0,i=n.length;r<i&&!s&&e.hasNext();r++)s=this.isType(e,n[r]);return s},isAnyOfGroup:function(e,t){var n=t.split(\" || \"),r,i,s=!1;for(r=0,i=n.length;r<i&&!s;r++)s=this.isType(e,n[r]);return s?n[r-1]:!1},isType:function(e,t){var n=e.peek(),r=!1;return t.charAt(0)!=\"<\"?(r=this.isLiteral(n,t),r&&e.next()):this.simple[t]?(r=this.simple[t](n),r&&e.next()):r=this.complex[t](e),r},simple:{\"<absolute-size>\":function(e){return ValidationTypes.isLiteral(e,\"xx-small | x-small | small | medium | large | x-large | xx-large\")},\"<attachment>\":function(e){return ValidationTypes.isLiteral(e,\"scroll | fixed | local\")},\"<attr>\":function(e){return e.type==\"function\"&&e.name==\"attr\"},\"<bg-image>\":function(e){return this[\"<image>\"](e)||this[\"<gradient>\"](e)||e==\"none\"},\"<gradient>\":function(e){return e.type==\"function\"&&/^(?:\\-(?:ms|moz|o|webkit)\\-)?(?:repeating\\-)?(?:radial\\-|linear\\-)?gradient/i.test(e)},\"<box>\":function(e){return ValidationTypes.isLiteral(e,\"padding-box | border-box | content-box\")},\"<content>\":function(e){return e.type==\"function\"&&e.name==\"content\"},\"<relative-size>\":function(e){return ValidationTypes.isLiteral(e,\"smaller | larger\")},\"<ident>\":function(e){return e.type==\"identifier\"},\"<length>\":function(e){return e.type==\"function\"&&/^(?:\\-(?:ms|moz|o|webkit)\\-)?calc/i.test(e)?!0:e.type==\"length\"||e.type==\"number\"||e.type==\"integer\"||e==\"0\"},\"<color>\":function(e){return e.type==\"color\"||e==\"transparent\"},\"<number>\":function(e){return e.type==\"number\"||this[\"<integer>\"](e)},\"<integer>\":function(e){return e.type==\"integer\"},\"<line>\":function(e){return e.type==\"integer\"},\"<angle>\":function(e){return e.type==\"angle\"},\"<uri>\":function(e){return e.type==\"uri\"},\"<image>\":function(e){return this[\"<uri>\"](e)},\"<percentage>\":function(e){return e.type==\"percentage\"||e==\"0\"},\"<border-width>\":function(e){return this[\"<length>\"](e)||ValidationTypes.isLiteral(e,\"thin | medium | thick\")},\"<border-style>\":function(e){return ValidationTypes.isLiteral(e,\"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset\")},\"<content-sizing>\":function(e){return ValidationTypes.isLiteral(e,\"fill-available | -moz-available | -webkit-fill-available | max-content | -moz-max-content | -webkit-max-content | min-content | -moz-min-content | -webkit-min-content | fit-content | -moz-fit-content | -webkit-fit-content\")},\"<margin-width>\":function(e){return this[\"<length>\"](e)||this[\"<percentage>\"](e)||ValidationTypes.isLiteral(e,\"auto\")},\"<padding-width>\":function(e){return this[\"<length>\"](e)||this[\"<percentage>\"](e)},\"<shape>\":function(e){return e.type==\"function\"&&(e.name==\"rect\"||e.name==\"inset-rect\")},\"<time>\":function(e){return e.type==\"time\"},\"<flex-grow>\":function(e){return this[\"<number>\"](e)},\"<flex-shrink>\":function(e){return this[\"<number>\"](e)},\"<width>\":function(e){return this[\"<margin-width>\"](e)},\"<flex-basis>\":function(e){return this[\"<width>\"](e)},\"<flex-direction>\":function(e){return ValidationTypes.isLiteral(e,\"row | row-reverse | column | column-reverse\")},\"<flex-wrap>\":function(e){return ValidationTypes.isLiteral(e,\"nowrap | wrap | wrap-reverse\")}},complex:{\"<bg-position>\":function(e){var t=this,n=!1,r=\"<percentage> | <length>\",i=\"left | right\",s=\"top | bottom\",o=0,u=function(){return e.hasNext()&&e.peek()!=\",\"};while(e.peek(o)&&e.peek(o)!=\",\")o++;return o<3?ValidationTypes.isAny(e,i+\" | center | \"+r)?(n=!0,ValidationTypes.isAny(e,s+\" | center | \"+r)):ValidationTypes.isAny(e,s)&&(n=!0,ValidationTypes.isAny(e,i+\" | center\")):ValidationTypes.isAny(e,i)?ValidationTypes.isAny(e,s)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,r)&&(ValidationTypes.isAny(e,s)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,\"center\")&&(n=!0)):ValidationTypes.isAny(e,s)?ValidationTypes.isAny(e,i)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,r)&&(ValidationTypes.isAny(e,i)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,\"center\")&&(n=!0)):ValidationTypes.isAny(e,\"center\")&&ValidationTypes.isAny(e,i+\" | \"+s)&&(n=!0,ValidationTypes.isAny(e,r)),n},\"<bg-size>\":function(e){var t=this,n=!1,r=\"<percentage> | <length> | auto\",i,s,o;return ValidationTypes.isAny(e,\"cover | contain\")?n=!0:ValidationTypes.isAny(e,r)&&(n=!0,ValidationTypes.isAny(e,r)),n},\"<repeat-style>\":function(e){var t=!1,n=\"repeat | space | round | no-repeat\",r;return e.hasNext()&&(r=e.next(),ValidationTypes.isLiteral(r,\"repeat-x | repeat-y\")?t=!0:ValidationTypes.isLiteral(r,n)&&(t=!0,e.hasNext()&&ValidationTypes.isLiteral(e.peek(),n)&&e.next())),t},\"<shadow>\":function(e){var t=!1,n=0,r=!1,i=!1,s;if(e.hasNext()){ValidationTypes.isAny(e,\"inset\")&&(r=!0),ValidationTypes.isAny(e,\"<color>\")&&(i=!0);while(ValidationTypes.isAny(e,\"<length>\")&&n<4)n++;e.hasNext()&&(i||ValidationTypes.isAny(e,\"<color>\"),r||ValidationTypes.isAny(e,\"inset\")),t=n>=2&&n<=4}return t},\"<x-one-radius>\":function(e){var t=!1,n=\"<length> | <percentage> | inherit\";return ValidationTypes.isAny(e,n)&&(t=!0,ValidationTypes.isAny(e,n)),t},\"<flex>\":function(e){var t,n=!1;ValidationTypes.isAny(e,\"none | inherit\")?n=!0:ValidationTypes.isType(e,\"<flex-grow>\")?e.peek()?ValidationTypes.isType(e,\"<flex-shrink>\")?e.peek()?n=ValidationTypes.isType(e,\"<flex-basis>\"):n=!0:ValidationTypes.isType(e,\"<flex-basis>\")&&(n=e.peek()===null):n=!0:ValidationTypes.isType(e,\"<flex-basis>\")&&(n=!0);if(!n)throw t=e.peek(),new ValidationError(\"Expected (none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]) but found '\"+e.value.text+\"'.\",t.line,t.col);return n}}};parserlib.css={Colors:Colors,Combinator:Combinator,Parser:Parser,PropertyName:PropertyName,PropertyValue:PropertyValue,PropertyValuePart:PropertyValuePart,MediaFeature:MediaFeature,MediaQuery:MediaQuery,Selector:Selector,SelectorPart:SelectorPart,SelectorSubPart:SelectorSubPart,Specificity:Specificity,TokenStream:TokenStream,Tokens:Tokens,ValidationError:ValidationError}}(),function(){for(var e in parserlib)exports[e]=parserlib[e]}();var util={isArray:function(e){return Array.isArray(e)||typeof e==\"object\"&&objectToString(e)===\"[object Array]\"},isDate:function(e){return typeof e==\"object\"&&objectToString(e)===\"[object Date]\"},isRegExp:function(e){return typeof e==\"object\"&&objectToString(e)===\"[object RegExp]\"},getRegExpFlags:function(e){var t=\"\";return e.global&&(t+=\"g\"),e.ignoreCase&&(t+=\"i\"),e.multiline&&(t+=\"m\"),t}};typeof module==\"object\"&&(module.exports=clone),clone.clonePrototype=function(e){if(e===null)return null;var t=function(){};return t.prototype=e,new t};var CSSLint=function(){function i(e,t){var r,i=e&&e.match(n),s=i&&i[1];return s&&(r={\"true\":2,\"\":1,\"false\":0,2:2,1:1,0:0},s.toLowerCase().split(\",\").forEach(function(e){var n=e.split(\":\"),i=n[0]||\"\",s=n[1]||\"\";t[i.trim()]=r[s.trim()]})),t}var e=[],t=[],n=/\\/\\*csslint([^\\*]*)\\*\\//,r=new parserlib.util.EventTarget;return r.version=\"@VERSION@\",r.addRule=function(t){e.push(t),e[t.id]=t},r.clearRules=function(){e=[]},r.getRules=function(){return[].concat(e).sort(function(e,t){return e.id>t.id?1:0})},r.getRuleset=function(){var t={},n=0,r=e.length;while(n<r)t[e[n++].id]=1;return t},r.addFormatter=function(e){t[e.id]=e},r.getFormatter=function(e){return t[e]},r.format=function(e,t,n,r){var i=this.getFormatter(n),s=null;return i&&(s=i.startFormat(),s+=i.formatResults(e,t,r||{}),s+=i.endFormat()),s},r.hasFormat=function(e){return t.hasOwnProperty(e)},r.verify=function(t,r){var s=0,o,u,a,f=new parserlib.css.Parser({starHack:!0,ieFilters:!0,underscoreHack:!0,strict:!1});u=t.replace(/\\n\\r?/g,\"$split$\").split(\"$split$\"),r||(r=this.getRuleset()),n.test(t)&&(r=clone(r),r=i(t,r)),o=new Reporter(u,r),r.errors=2;for(s in r)r.hasOwnProperty(s)&&r[s]&&e[s]&&e[s].init(f,o);try{f.parse(t)}catch(l){o.error(\"Fatal error, cannot continue: \"+l.message,l.line,l.col,{})}return a={messages:o.messages,stats:o.stats,ruleset:o.ruleset},a.messages.sort(function(e,t){return e.rollup&&!t.rollup?1:!e.rollup&&t.rollup?-1:e.line-t.line}),a},r}();Reporter.prototype={constructor:Reporter,error:function(e,t,n,r){this.messages.push({type:\"error\",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r||{}})},warn:function(e,t,n,r){this.report(e,t,n,r)},report:function(e,t,n,r){this.messages.push({type:this.ruleset[r.id]===2?\"error\":\"warning\",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r})},info:function(e,t,n,r){this.messages.push({type:\"info\",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r})},rollupError:function(e,t){this.messages.push({type:\"error\",rollup:!0,message:e,rule:t})},rollupWarn:function(e,t){this.messages.push({type:\"warning\",rollup:!0,message:e,rule:t})},stat:function(e,t){this.stats[e]=t}},CSSLint._Reporter=Reporter,CSSLint.Util={mix:function(e,t){var n;for(n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return n},indexOf:function(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},forEach:function(e,t){if(e.forEach)return e.forEach(t);for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)}},CSSLint.addRule({id:\"adjoining-classes\",name:\"Disallow adjoining classes\",desc:\"Don't use adjoining classes.\",browsers:\"IE6\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f,l,c;for(f=0;f<i.length;f++){s=i[f];for(l=0;l<s.parts.length;l++){o=s.parts[l];if(o.type===e.SELECTOR_PART_TYPE){a=0;for(c=0;c<o.modifiers.length;c++)u=o.modifiers[c],u.type===\"class\"&&a++,a>1&&t.report(\"Don't use adjoining classes.\",o.line,o.col,n)}}}})}}),CSSLint.addRule({id:\"box-model\",name:\"Beware of broken box size\",desc:\"Don't use width or height when using padding or border.\",browsers:\"All\",init:function(e,t){function u(){s={},o=!1}function a(){var e,u;if(!o){if(s.height)for(e in i)i.hasOwnProperty(e)&&s[e]&&(u=s[e].value,(e!==\"padding\"||u.parts.length!==2||u.parts[0].value!==0)&&t.report(\"Using height with \"+e+\" can sometimes make elements larger than you expect.\",s[e].line,s[e].col,n));if(s.width)for(e in r)r.hasOwnProperty(e)&&s[e]&&(u=s[e].value,(e!==\"padding\"||u.parts.length!==2||u.parts[1].value!==0)&&t.report(\"Using width with \"+e+\" can sometimes make elements larger than you expect.\",s[e].line,s[e].col,n))}}var n=this,r={border:1,\"border-left\":1,\"border-right\":1,padding:1,\"padding-left\":1,\"padding-right\":1},i={border:1,\"border-bottom\":1,\"border-top\":1,padding:1,\"padding-bottom\":1,\"padding-top\":1},s,o=!1;e.addListener(\"startrule\",u),e.addListener(\"startfontface\",u),e.addListener(\"startpage\",u),e.addListener(\"startpagemargin\",u),e.addListener(\"startkeyframerule\",u),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase();i[t]||r[t]?!/^0\\S*$/.test(e.value)&&(t!==\"border\"||e.value.toString()!==\"none\")&&(s[t]={line:e.property.line,col:e.property.col,value:e.value}):/^(width|height)/i.test(t)&&/^(length|percentage)/.test(e.value.parts[0].type)?s[t]=1:t===\"box-sizing\"&&(o=!0)}),e.addListener(\"endrule\",a),e.addListener(\"endfontface\",a),e.addListener(\"endpage\",a),e.addListener(\"endpagemargin\",a),e.addListener(\"endkeyframerule\",a)}}),CSSLint.addRule({id:\"box-sizing\",name:\"Disallow use of box-sizing\",desc:\"The box-sizing properties isn't supported in IE6 and IE7.\",browsers:\"IE6, IE7\",tags:[\"Compatibility\"],init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.property.text.toLowerCase();r===\"box-sizing\"&&t.report(\"The box-sizing property isn't supported in IE6 and IE7.\",e.line,e.col,n)})}}),CSSLint.addRule({id:\"bulletproof-font-face\",name:\"Use the bulletproof @font-face syntax\",desc:\"Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).\",browsers:\"All\",init:function(e,t){var n=this,r=!1,i=!0,s=!1,o,u;e.addListener(\"startfontface\",function(){r=!0}),e.addListener(\"property\",function(e){if(!r)return;var t=e.property.toString().toLowerCase(),n=e.value.toString();o=e.line,u=e.col;if(t===\"src\"){var a=/^\\s?url\\(['\"].+\\.eot\\?.*['\"]\\)\\s*format\\(['\"]embedded-opentype['\"]\\).*$/i;!n.match(a)&&i?(s=!0,i=!1):n.match(a)&&!i&&(s=!1)}}),e.addListener(\"endfontface\",function(){r=!1,s&&t.report(\"@font-face declaration doesn't follow the fontspring bulletproof syntax.\",o,u,n)})}}),CSSLint.addRule({id:\"compatible-vendor-prefixes\",name:\"Require compatible vendor prefixes\",desc:\"Include all compatible vendor prefixes to reach a wider range of users.\",browsers:\"All\",init:function(e,t){var n=this,r,i,s,o,u,a,f,l=!1,c=Array.prototype.push,h=[];r={animation:\"webkit moz\",\"animation-delay\":\"webkit moz\",\"animation-direction\":\"webkit moz\",\"animation-duration\":\"webkit moz\",\"animation-fill-mode\":\"webkit moz\",\"animation-iteration-count\":\"webkit moz\",\"animation-name\":\"webkit moz\",\"animation-play-state\":\"webkit moz\",\"animation-timing-function\":\"webkit moz\",appearance:\"webkit moz\",\"border-end\":\"webkit moz\",\"border-end-color\":\"webkit moz\",\"border-end-style\":\"webkit moz\",\"border-end-width\":\"webkit moz\",\"border-image\":\"webkit moz o\",\"border-radius\":\"webkit\",\"border-start\":\"webkit moz\",\"border-start-color\":\"webkit moz\",\"border-start-style\":\"webkit moz\",\"border-start-width\":\"webkit moz\",\"box-align\":\"webkit moz ms\",\"box-direction\":\"webkit moz ms\",\"box-flex\":\"webkit moz ms\",\"box-lines\":\"webkit ms\",\"box-ordinal-group\":\"webkit moz ms\",\"box-orient\":\"webkit moz ms\",\"box-pack\":\"webkit moz ms\",\"box-sizing\":\"webkit moz\",\"box-shadow\":\"webkit moz\",\"column-count\":\"webkit moz ms\",\"column-gap\":\"webkit moz ms\",\"column-rule\":\"webkit moz ms\",\"column-rule-color\":\"webkit moz ms\",\"column-rule-style\":\"webkit moz ms\",\"column-rule-width\":\"webkit moz ms\",\"column-width\":\"webkit moz ms\",hyphens:\"epub moz\",\"line-break\":\"webkit ms\",\"margin-end\":\"webkit moz\",\"margin-start\":\"webkit moz\",\"marquee-speed\":\"webkit wap\",\"marquee-style\":\"webkit wap\",\"padding-end\":\"webkit moz\",\"padding-start\":\"webkit moz\",\"tab-size\":\"moz o\",\"text-size-adjust\":\"webkit ms\",transform:\"webkit moz ms o\",\"transform-origin\":\"webkit moz ms o\",transition:\"webkit moz o\",\"transition-delay\":\"webkit moz o\",\"transition-duration\":\"webkit moz o\",\"transition-property\":\"webkit moz o\",\"transition-timing-function\":\"webkit moz o\",\"user-modify\":\"webkit moz\",\"user-select\":\"webkit moz ms\",\"word-break\":\"epub ms\",\"writing-mode\":\"epub ms\"};for(s in r)if(r.hasOwnProperty(s)){o=[],u=r[s].split(\" \");for(a=0,f=u.length;a<f;a++)o.push(\"-\"+u[a]+\"-\"+s);r[s]=o,c.apply(h,o)}e.addListener(\"startrule\",function(){i=[]}),e.addListener(\"startkeyframes\",function(e){l=e.prefix||!0}),e.addListener(\"endkeyframes\",function(){l=!1}),e.addListener(\"property\",function(e){var t=e.property;CSSLint.Util.indexOf(h,t.text)>-1&&(!l||typeof l!=\"string\"||t.text.indexOf(\"-\"+l+\"-\")!==0)&&i.push(t)}),e.addListener(\"endrule\",function(){if(!i.length)return;var e={},s,o,u,a,f,l,c,h,p,d;for(s=0,o=i.length;s<o;s++){u=i[s];for(a in r)r.hasOwnProperty(a)&&(f=r[a],CSSLint.Util.indexOf(f,u.text)>-1&&(e[a]||(e[a]={full:f.slice(0),actual:[],actualNodes:[]}),CSSLint.Util.indexOf(e[a].actual,u.text)===-1&&(e[a].actual.push(u.text),e[a].actualNodes.push(u))))}for(a in e)if(e.hasOwnProperty(a)){l=e[a],c=l.full,h=l.actual;if(c.length>h.length)for(s=0,o=c.length;s<o;s++)p=c[s],CSSLint.Util.indexOf(h,p)===-1&&(d=h.length===1?h[0]:h.length===2?h.join(\" and \"):h.join(\", \"),t.report(\"The property \"+p+\" is compatible with \"+d+\" and should be included as well.\",l.actualNodes[0].line,l.actualNodes[0].col,n))}})}}),CSSLint.addRule({id:\"display-property-grouping\",name:\"Require properties appropriate for display\",desc:\"Certain properties shouldn't be used with certain display property values.\",browsers:\"All\",init:function(e,t){function s(e,s,o){i[e]&&(typeof r[e]!=\"string\"||i[e].value.toLowerCase()!==r[e])&&t.report(o||e+\" can't be used with display: \"+s+\".\",i[e].line,i[e].col,n)}function o(){i={}}function u(){var e=i.display?i.display.value:null;if(e)switch(e){case\"inline\":s(\"height\",e),s(\"width\",e),s(\"margin\",e),s(\"margin-top\",e),s(\"margin-bottom\",e),s(\"float\",e,\"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).\");break;case\"block\":s(\"vertical-align\",e);break;case\"inline-block\":s(\"float\",e);break;default:e.indexOf(\"table-\")===0&&(s(\"margin\",e),s(\"margin-left\",e),s(\"margin-right\",e),s(\"margin-top\",e),s(\"margin-bottom\",e),s(\"float\",e))}}var n=this,r={display:1,\"float\":\"none\",height:1,width:1,margin:1,\"margin-left\":1,\"margin-right\":1,\"margin-bottom\":1,\"margin-top\":1,padding:1,\"padding-left\":1,\"padding-right\":1,\"padding-bottom\":1,\"padding-top\":1,\"vertical-align\":1},i;e.addListener(\"startrule\",o),e.addListener(\"startfontface\",o),e.addListener(\"startkeyframerule\",o),e.addListener(\"startpagemargin\",o),e.addListener(\"startpage\",o),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase();r[t]&&(i[t]={value:e.value.text,line:e.property.line,col:e.property.col})}),e.addListener(\"endrule\",u),e.addListener(\"endfontface\",u),e.addListener(\"endkeyframerule\",u),e.addListener(\"endpagemargin\",u),e.addListener(\"endpage\",u)}}),CSSLint.addRule({id:\"duplicate-background-images\",name:\"Disallow duplicate background images\",desc:\"Every background-image should be unique. Use a common class for e.g. sprites.\",browsers:\"All\",init:function(e,t){var n=this,r={};e.addListener(\"property\",function(e){var i=e.property.text,s=e.value,o,u;if(i.match(/background/i))for(o=0,u=s.parts.length;o<u;o++)s.parts[o].type===\"uri\"&&(typeof r[s.parts[o].uri]==\"undefined\"?r[s.parts[o].uri]=e:t.report(\"Background image '\"+s.parts[o].uri+\"' was used multiple times, first declared at line \"+r[s.parts[o].uri].line+\", col \"+r[s.parts[o].uri].col+\".\",e.line,e.col,n))})}}),CSSLint.addRule({id:\"duplicate-properties\",name:\"Disallow duplicate properties\",desc:\"Duplicate properties must appear one after the other.\",browsers:\"All\",init:function(e,t){function s(){r={}}var n=this,r,i;e.addListener(\"startrule\",s),e.addListener(\"startfontface\",s),e.addListener(\"startpage\",s),e.addListener(\"startpagemargin\",s),e.addListener(\"startkeyframerule\",s),e.addListener(\"property\",function(e){var s=e.property,o=s.text.toLowerCase();r[o]&&(i!==o||r[o]===e.value.text)&&t.report(\"Duplicate property '\"+e.property+\"' found.\",e.line,e.col,n),r[o]=e.value.text,i=o})}}),CSSLint.addRule({id:\"empty-rules\",name:\"Disallow empty rules\",desc:\"Rules without any properties specified should be removed.\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"startrule\",function(){r=0}),e.addListener(\"property\",function(){r++}),e.addListener(\"endrule\",function(e){var i=e.selectors;r===0&&t.report(\"Rule is empty.\",i[0].line,i[0].col,n)})}}),CSSLint.addRule({id:\"errors\",name:\"Parsing Errors\",desc:\"This rule looks for recoverable syntax errors.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"error\",function(e){t.error(e.message,e.line,e.col,n)})}}),CSSLint.addRule({id:\"fallback-colors\",name:\"Require fallback colors\",desc:\"For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.\",browsers:\"IE6,IE7,IE8\",init:function(e,t){function o(){s={},r=null}var n=this,r,i={color:1,background:1,\"border-color\":1,\"border-top-color\":1,\"border-right-color\":1,\"border-bottom-color\":1,\"border-left-color\":1,border:1,\"border-top\":1,\"border-right\":1,\"border-bottom\":1,\"border-left\":1,\"background-color\":1},s;e.addListener(\"startrule\",o),e.addListener(\"startfontface\",o),e.addListener(\"startpage\",o),e.addListener(\"startpagemargin\",o),e.addListener(\"startkeyframerule\",o),e.addListener(\"property\",function(e){var s=e.property,o=s.text.toLowerCase(),u=e.value.parts,a=0,f=\"\",l=u.length;if(i[o])while(a<l)u[a].type===\"color\"&&(\"alpha\"in u[a]||\"hue\"in u[a]?(/([^\\)]+)\\(/.test(u[a])&&(f=RegExp.$1.toUpperCase()),(!r||r.property.text.toLowerCase()!==o||r.colorType!==\"compat\")&&t.report(\"Fallback \"+o+\" (hex or RGB) should precede \"+f+\" \"+o+\".\",e.line,e.col,n)):e.colorType=\"compat\"),a++;r=e})}}),CSSLint.addRule({id:\"floats\",name:\"Disallow too many floats\",desc:\"This rule tests if the float property is used too many times\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"property\",function(e){e.property.text.toLowerCase()===\"float\"&&e.value.text.toLowerCase()!==\"none\"&&r++}),e.addListener(\"endstylesheet\",function(){t.stat(\"floats\",r),r>=10&&t.rollupWarn(\"Too many floats (\"+r+\"), you're probably using them for layout. Consider using a grid system instead.\",n)})}}),CSSLint.addRule({id:\"font-faces\",name:\"Don't use too many web fonts\",desc:\"Too many different web fonts in the same stylesheet.\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"startfontface\",function(){r++}),e.addListener(\"endstylesheet\",function(){r>5&&t.rollupWarn(\"Too many @font-face declarations (\"+r+\").\",n)})}}),CSSLint.addRule({id:\"font-sizes\",name:\"Disallow too many font sizes\",desc:\"Checks the number of font-size declarations.\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"property\",function(e){e.property.toString()===\"font-size\"&&r++}),e.addListener(\"endstylesheet\",function(){t.stat(\"font-sizes\",r),r>=10&&t.rollupWarn(\"Too many font-size declarations (\"+r+\"), abstraction needed.\",n)})}}),CSSLint.addRule({id:\"gradients\",name:\"Require all gradient definitions\",desc:\"When using a vendor-prefixed gradient, make sure to use them all.\",browsers:\"All\",init:function(e,t){var n=this,r;e.addListener(\"startrule\",function(){r={moz:0,webkit:0,oldWebkit:0,o:0}}),e.addListener(\"property\",function(e){/\\-(moz|o|webkit)(?:\\-(?:linear|radial))\\-gradient/i.test(e.value)?r[RegExp.$1]=1:/\\-webkit\\-gradient/i.test(e.value)&&(r.oldWebkit=1)}),e.addListener(\"endrule\",function(e){var i=[];r.moz||i.push(\"Firefox 3.6+\"),r.webkit||i.push(\"Webkit (Safari 5+, Chrome)\"),r.oldWebkit||i.push(\"Old Webkit (Safari 4+, Chrome)\"),r.o||i.push(\"Opera 11.1+\"),i.length&&i.length<4&&t.report(\"Missing vendor-prefixed CSS gradients for \"+i.join(\", \")+\".\",e.selectors[0].line,e.selectors[0].col,n)})}}),CSSLint.addRule({id:\"ids\",name:\"Disallow IDs in selectors\",desc:\"Selectors should not contain IDs.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f,l,c;for(f=0;f<i.length;f++){s=i[f],a=0;for(l=0;l<s.parts.length;l++){o=s.parts[l];if(o.type===e.SELECTOR_PART_TYPE)for(c=0;c<o.modifiers.length;c++)u=o.modifiers[c],u.type===\"id\"&&a++}a===1?t.report(\"Don't use IDs in selectors.\",s.line,s.col,n):a>1&&t.report(a+\" IDs in the selector, really?\",s.line,s.col,n)}})}}),CSSLint.addRule({id:\"import\",name:\"Disallow @import\",desc:\"Don't use @import, use <link> instead.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"import\",function(e){t.report(\"@import prevents parallel downloads, use <link> instead.\",e.line,e.col,n)})}}),CSSLint.addRule({id:\"important\",name:\"Disallow !important\",desc:\"Be careful when using !important declaration\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"property\",function(e){e.important===!0&&(r++,t.report(\"Use of !important\",e.line,e.col,n))}),e.addListener(\"endstylesheet\",function(){t.stat(\"important\",r),r>=10&&t.rollupWarn(\"Too many !important declarations (\"+r+\"), try to use less than 10 to avoid specificity issues.\",n)})}}),CSSLint.addRule({id:\"known-properties\",name:\"Require use of known properties\",desc:\"Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){e.invalid&&t.report(e.invalid.message,e.line,e.col,n)})}}),CSSLint.addRule({id:\"order-alphabetical\",name:\"Alphabetical order\",desc:\"Assure properties are in alphabetical order\",browsers:\"All\",init:function(e,t){var n=this,r,i=function(){r=[]};e.addListener(\"startrule\",i),e.addListener(\"startfontface\",i),e.addListener(\"startpage\",i),e.addListener(\"startpagemargin\",i),e.addListener(\"startkeyframerule\",i),e.addListener(\"property\",function(e){var t=e.property.text,n=t.toLowerCase().replace(/^-.*?-/,\"\");r.push(n)}),e.addListener(\"endrule\",function(e){var i=r.join(\",\"),s=r.sort().join(\",\");i!==s&&t.report(\"Rule doesn't have all its properties in alphabetical ordered.\",e.line,e.col,n)})}}),CSSLint.addRule({id:\"outline-none\",name:\"Disallow outline: none\",desc:\"Use of outline: none or outline: 0 should be limited to :focus rules.\",browsers:\"All\",tags:[\"Accessibility\"],init:function(e,t){function i(e){e.selectors?r={line:e.line,col:e.col,selectors:e.selectors,propCount:0,outline:!1}:r=null}function s(){r&&r.outline&&(r.selectors.toString().toLowerCase().indexOf(\":focus\")===-1?t.report(\"Outlines should only be modified using :focus.\",r.line,r.col,n):r.propCount===1&&t.report(\"Outlines shouldn't be hidden unless other visual changes are made.\",r.line,r.col,n))}var n=this,r;e.addListener(\"startrule\",i),e.addListener(\"startfontface\",i),e.addListener(\"startpage\",i),e.addListener(\"startpagemargin\",i),e.addListener(\"startkeyframerule\",i),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase(),n=e.value;r&&(r.propCount++,t===\"outline\"&&(n.toString()===\"none\"||n.toString()===\"0\")&&(r.outline=!0))}),e.addListener(\"endrule\",s),e.addListener(\"endfontface\",s),e.addListener(\"endpage\",s),e.addListener(\"endpagemargin\",s),e.addListener(\"endkeyframerule\",s)}}),CSSLint.addRule({id:\"overqualified-elements\",name:\"Disallow overqualified elements\",desc:\"Don't use classes or IDs with elements (a.foo or a#foo).\",browsers:\"All\",init:function(e,t){var n=this,r={};e.addListener(\"startrule\",function(i){var s=i.selectors,o,u,a,f,l,c;for(f=0;f<s.length;f++){o=s[f];for(l=0;l<o.parts.length;l++){u=o.parts[l];if(u.type===e.SELECTOR_PART_TYPE)for(c=0;c<u.modifiers.length;c++)a=u.modifiers[c],u.elementName&&a.type===\"id\"?t.report(\"Element (\"+u+\") is overqualified, just use \"+a+\" without element name.\",u.line,u.col,n):a.type===\"class\"&&(r[a]||(r[a]=[]),r[a].push({modifier:a,part:u}))}}}),e.addListener(\"endstylesheet\",function(){var e;for(e in r)r.hasOwnProperty(e)&&r[e].length===1&&r[e][0].part.elementName&&t.report(\"Element (\"+r[e][0].part+\") is overqualified, just use \"+r[e][0].modifier+\" without element name.\",r[e][0].part.line,r[e][0].part.col,n)})}}),CSSLint.addRule({id:\"qualified-headings\",name:\"Disallow qualified headings\",desc:\"Headings should not be qualified (namespaced).\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a;for(u=0;u<i.length;u++){s=i[u];for(a=0;a<s.parts.length;a++)o=s.parts[a],o.type===e.SELECTOR_PART_TYPE&&o.elementName&&/h[1-6]/.test(o.elementName.toString())&&a>0&&t.report(\"Heading (\"+o.elementName+\") should not be qualified.\",o.line,o.col,n)}})}}),CSSLint.addRule({id:\"regex-selectors\",name:\"Disallow selectors that look like regexs\",desc:\"Selectors that look like regular expressions are slow and should be avoided.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f,l;for(a=0;a<i.length;a++){s=i[a];for(f=0;f<s.parts.length;f++){o=s.parts[f];if(o.type===e.SELECTOR_PART_TYPE)for(l=0;l<o.modifiers.length;l++)u=o.modifiers[l],u.type===\"attribute\"&&/([\\~\\|\\^\\$\\*]=)/.test(u)&&t.report(\"Attribute selectors with \"+RegExp.$1+\" are slow!\",u.line,u.col,n)}}})}}),CSSLint.addRule({id:\"rules-count\",name:\"Rules Count\",desc:\"Track how many rules there are.\",browsers:\"All\",init:function(e,t){var n=0;e.addListener(\"startrule\",function(){n++}),e.addListener(\"endstylesheet\",function(){t.stat(\"rule-count\",n)})}}),CSSLint.addRule({id:\"selector-max-approaching\",name:\"Warn when approaching the 4095 selector limit for IE\",desc:\"Will warn when selector count is >= 3800 selectors.\",browsers:\"IE\",init:function(e,t){var n=this,r=0;e.addListener(\"startrule\",function(e){r+=e.selectors.length}),e.addListener(\"endstylesheet\",function(){r>=3800&&t.report(\"You have \"+r+\" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,n)})}}),CSSLint.addRule({id:\"selector-max\",name:\"Error when past the 4095 selector limit for IE\",desc:\"Will error when selector count is > 4095.\",browsers:\"IE\",init:function(e,t){var n=this,r=0;e.addListener(\"startrule\",function(e){r+=e.selectors.length}),e.addListener(\"endstylesheet\",function(){r>4095&&t.report(\"You have \"+r+\" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,n)})}}),CSSLint.addRule({id:\"selector-newline\",name:\"Disallow new-line characters in selectors\",desc:\"New-line characters in selectors are usually a forgotten comma and not a descendant combinator.\",browsers:\"All\",init:function(e,t){function r(e){var r,i,s,o,u,a,f,l,c,h,p,d=e.selectors;for(r=0,i=d.length;r<i;r++){s=d[r];for(o=0,a=s.parts.length;o<a;o++)for(u=o+1;u<a;u++)f=s.parts[o],l=s.parts[u],c=f.type,h=f.line,p=l.line,c===\"descendant\"&&p>h&&t.report(\"newline character found in selector (forgot a comma?)\",h,d[r].parts[0].col,n)}}var n=this;e.addListener(\"startrule\",r)}}),CSSLint.addRule({id:\"shorthand\",name:\"Require shorthand properties\",desc:\"Use shorthand properties where possible.\",browsers:\"All\",init:function(e,t){function f(){u={}}function l(e){var r,i,s,o;for(r in a)if(a.hasOwnProperty(r)){o=0;for(i=0,s=a[r].length;i<s;i++)o+=u[a[r][i]]?1:0;o===a[r].length&&t.report(\"The properties \"+a[r].join(\", \")+\" can be replaced by \"+r+\".\",e.line,e.col,n)}}var n=this,r,i,s,o={},u,a={margin:[\"margin-top\",\"margin-bottom\",\"margin-left\",\"margin-right\"],padding:[\"padding-top\",\"padding-bottom\",\"padding-left\",\"padding-right\"]};for(r in a)if(a.hasOwnProperty(r))for(i=0,s=a[r].length;i<s;i++)o[a[r][i]]=r;e.addListener(\"startrule\",f),e.addListener(\"startfontface\",f),e.addListener(\"property\",function(e){var t=e.property.toString().toLowerCase();o[t]&&(u[t]=1)}),e.addListener(\"endrule\",l),e.addListener(\"endfontface\",l)}}),CSSLint.addRule({id:\"star-property-hack\",name:\"Disallow properties with a star prefix\",desc:\"Checks for the star property hack (targets IE6/7)\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.property;r.hack===\"*\"&&t.report(\"Property with star prefix found.\",e.property.line,e.property.col,n)})}}),CSSLint.addRule({id:\"text-indent\",name:\"Disallow negative text-indent\",desc:\"Checks for text indent less than -99px\",browsers:\"All\",init:function(e,t){function s(){r=!1,i=\"inherit\"}function o(){r&&i!==\"ltr\"&&t.report(\"Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.\",r.line,r.col,n)}var n=this,r,i;e.addListener(\"startrule\",s),e.addListener(\"startfontface\",s),e.addListener(\"property\",function(e){var t=e.property.toString().toLowerCase(),n=e.value;t===\"text-indent\"&&n.parts[0].value<-99?r=e.property:t===\"direction\"&&n.toString()===\"ltr\"&&(i=\"ltr\")}),e.addListener(\"endrule\",o),e.addListener(\"endfontface\",o)}}),CSSLint.addRule({id:\"underscore-property-hack\",name:\"Disallow properties with an underscore prefix\",desc:\"Checks for the underscore property hack (targets IE6)\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.property;r.hack===\"_\"&&t.report(\"Property with underscore prefix found.\",e.property.line,e.property.col,n)})}}),CSSLint.addRule({id:\"unique-headings\",name:\"Headings should only be defined once\",desc:\"Headings should be defined only once.\",browsers:\"All\",init:function(e,t){var n=this,r={h1:0,h2:0,h3:0,h4:0,h5:0,h6:0};e.addListener(\"startrule\",function(e){var i=e.selectors,s,o,u,a,f;for(a=0;a<i.length;a++){s=i[a],o=s.parts[s.parts.length-1];if(o.elementName&&/(h[1-6])/i.test(o.elementName.toString())){for(f=0;f<o.modifiers.length;f++)if(o.modifiers[f].type===\"pseudo\"){u=!0;break}u||(r[RegExp.$1]++,r[RegExp.$1]>1&&t.report(\"Heading (\"+o.elementName+\") has already been defined.\",o.line,o.col,n))}}}),e.addListener(\"endstylesheet\",function(){var e,i=[];for(e in r)r.hasOwnProperty(e)&&r[e]>1&&i.push(r[e]+\" \"+e+\"s\");i.length&&t.rollupWarn(\"You have \"+i.join(\", \")+\" defined in this stylesheet.\",n)})}}),CSSLint.addRule({id:\"universal-selector\",name:\"Disallow universal selector\",desc:\"The universal selector (*) is known to be slow.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(e){var r=e.selectors,i,s,o;for(o=0;o<r.length;o++)i=r[o],s=i.parts[i.parts.length-1],s.elementName===\"*\"&&t.report(n.desc,s.line,s.col,n)})}}),CSSLint.addRule({id:\"unqualified-attributes\",name:\"Disallow unqualified attribute selectors\",desc:\"Unqualified attribute selectors are known to be slow.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f;for(a=0;a<i.length;a++){s=i[a],o=s.parts[s.parts.length-1];if(o.type===e.SELECTOR_PART_TYPE)for(f=0;f<o.modifiers.length;f++)u=o.modifiers[f],u.type===\"attribute\"&&(!o.elementName||o.elementName===\"*\")&&t.report(n.desc,o.line,o.col,n)}})}}),CSSLint.addRule({id:\"vendor-prefix\",name:\"Require standard property with vendor prefix\",desc:\"When using a vendor-prefixed property, make sure to include the standard one.\",browsers:\"All\",init:function(e,t){function o(){r={},i=1}function u(){var e,i,o,u,a,f=[];for(e in r)s[e]&&f.push({actual:e,needed:s[e]});for(i=0,o=f.length;i<o;i++)u=f[i].needed,a=f[i].actual,r[u]?r[u][0].pos<r[a][0].pos&&t.report(\"Standard property '\"+u+\"' should come after vendor-prefixed property '\"+a+\"'.\",r[a][0].name.line,r[a][0].name.col,n):t.report(\"Missing standard property '\"+u+\"' to go along with '\"+a+\"'.\",r[a][0].name.line,r[a][0].name.col,n)}var n=this,r,i,s={\"-webkit-border-radius\":\"border-radius\",\"-webkit-border-top-left-radius\":\"border-top-left-radius\",\"-webkit-border-top-right-radius\":\"border-top-right-radius\",\"-webkit-border-bottom-left-radius\":\"border-bottom-left-radius\",\"-webkit-border-bottom-right-radius\":\"border-bottom-right-radius\",\"-o-border-radius\":\"border-radius\",\"-o-border-top-left-radius\":\"border-top-left-radius\",\"-o-border-top-right-radius\":\"border-top-right-radius\",\"-o-border-bottom-left-radius\":\"border-bottom-left-radius\",\"-o-border-bottom-right-radius\":\"border-bottom-right-radius\",\"-moz-border-radius\":\"border-radius\",\"-moz-border-radius-topleft\":\"border-top-left-radius\",\"-moz-border-radius-topright\":\"border-top-right-radius\",\"-moz-border-radius-bottomleft\":\"border-bottom-left-radius\",\"-moz-border-radius-bottomright\":\"border-bottom-right-radius\",\"-moz-column-count\":\"column-count\",\"-webkit-column-count\":\"column-count\",\"-moz-column-gap\":\"column-gap\",\"-webkit-column-gap\":\"column-gap\",\"-moz-column-rule\":\"column-rule\",\"-webkit-column-rule\":\"column-rule\",\"-moz-column-rule-style\":\"column-rule-style\",\"-webkit-column-rule-style\":\"column-rule-style\",\"-moz-column-rule-color\":\"column-rule-color\",\"-webkit-column-rule-color\":\"column-rule-color\",\"-moz-column-rule-width\":\"column-rule-width\",\"-webkit-column-rule-width\":\"column-rule-width\",\"-moz-column-width\":\"column-width\",\"-webkit-column-width\":\"column-width\",\"-webkit-column-span\":\"column-span\",\"-webkit-columns\":\"columns\",\"-moz-box-shadow\":\"box-shadow\",\"-webkit-box-shadow\":\"box-shadow\",\"-moz-transform\":\"transform\",\"-webkit-transform\":\"transform\",\"-o-transform\":\"transform\",\"-ms-transform\":\"transform\",\"-moz-transform-origin\":\"transform-origin\",\"-webkit-transform-origin\":\"transform-origin\",\"-o-transform-origin\":\"transform-origin\",\"-ms-transform-origin\":\"transform-origin\",\"-moz-box-sizing\":\"box-sizing\",\"-webkit-box-sizing\":\"box-sizing\"};e.addListener(\"startrule\",o),e.addListener(\"startfontface\",o),e.addListener(\"startpage\",o),e.addListener(\"startpagemargin\",o),e.addListener(\"startkeyframerule\",o),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase();r[t]||(r[t]=[]),r[t].push({name:e.property,value:e.value,pos:i++})}),e.addListener(\"endrule\",u),e.addListener(\"endfontface\",u),e.addListener(\"endpage\",u),e.addListener(\"endpagemargin\",u),e.addListener(\"endkeyframerule\",u)}}),CSSLint.addRule({id:\"zero-units\",name:\"Disallow units for 0 values\",desc:\"You don't need to specify units when a value is 0.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.value.parts,i=0,s=r.length;while(i<s)(r[i].units||r[i].type===\"percentage\")&&r[i].value===0&&r[i].type!==\"time\"&&t.report(\"Values of 0 shouldn't have units specified.\",r[i].line,r[i].col,n),i++})}}),function(){var e=function(e){return!e||e.constructor!==String?\"\":e.replace(/[\\\"&><]/g,function(e){switch(e){case'\"':return\"&quot;\";case\"&\":return\"&amp;\";case\"<\":return\"&lt;\";case\">\":return\"&gt;\"}})};CSSLint.addFormatter({id:\"checkstyle-xml\",name:\"Checkstyle XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><checkstyle>'},endFormat:function(){return\"</checkstyle>\"},readError:function(t,n){return'<file name=\"'+e(t)+'\"><error line=\"0\" column=\"0\" severty=\"error\" message=\"'+e(n)+'\"></error></file>'},formatResults:function(t,n){var r=t.messages,i=[],s=function(e){return!!e&&\"name\"in e?\"net.csslint.\"+e.name.replace(/\\s/g,\"\"):\"\"};return r.length>0&&(i.push('<file name=\"'+n+'\">'),CSSLint.Util.forEach(r,function(t){t.rollup||i.push('<error line=\"'+t.line+'\" column=\"'+t.col+'\" severity=\"'+t.type+'\"'+' message=\"'+e(t.message)+'\" source=\"'+s(t.rule)+'\"/>')}),i.push(\"</file>\")),i.join(\"\")}})}(),CSSLint.addFormatter({id:\"compact\",name:\"Compact, 'porcelain' format\",startFormat:function(){return\"\"},endFormat:function(){return\"\"},formatResults:function(e,t,n){var r=e.messages,i=\"\";n=n||{};var s=function(e){return e.charAt(0).toUpperCase()+e.slice(1)};return r.length===0?n.quiet?\"\":t+\": Lint Free!\":(CSSLint.Util.forEach(r,function(e){e.rollup?i+=t+\": \"+s(e.type)+\" - \"+e.message+\"\\n\":i+=t+\": \"+\"line \"+e.line+\", col \"+e.col+\", \"+s(e.type)+\" - \"+e.message+\" (\"+e.rule.id+\")\\n\"}),i)}}),CSSLint.addFormatter({id:\"csslint-xml\",name:\"CSSLint XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><csslint>'},endFormat:function(){return\"</csslint>\"},formatResults:function(e,t){var n=e.messages,r=[],i=function(e){return!e||e.constructor!==String?\"\":e.replace(/\\\"/g,\"'\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};return n.length>0&&(r.push('<file name=\"'+t+'\">'),CSSLint.Util.forEach(n,function(e){e.rollup?r.push('<issue severity=\"'+e.type+'\" reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>'):r.push('<issue line=\"'+e.line+'\" char=\"'+e.col+'\" severity=\"'+e.type+'\"'+' reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>')}),r.push(\"</file>\")),r.join(\"\")}}),CSSLint.addFormatter({id:\"junit-xml\",name:\"JUNIT XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><testsuites>'},endFormat:function(){return\"</testsuites>\"},formatResults:function(e,t){var n=e.messages,r=[],i={error:0,failure:0},s=function(e){return!!e&&\"name\"in e?\"net.csslint.\"+e.name.replace(/\\s/g,\"\"):\"\"},o=function(e){return!e||e.constructor!==String?\"\":e.replace(/\\\"/g,\"'\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};return n.length>0&&(n.forEach(function(e){var t=e.type===\"warning\"?\"error\":e.type;e.rollup||(r.push('<testcase time=\"0\" name=\"'+s(e.rule)+'\">'),r.push(\"<\"+t+' message=\"'+o(e.message)+'\"><![CDATA['+e.line+\":\"+e.col+\":\"+o(e.evidence)+\"]]></\"+t+\">\"),r.push(\"</testcase>\"),i[t]+=1)}),r.unshift('<testsuite time=\"0\" tests=\"'+n.length+'\" skipped=\"0\" errors=\"'+i.error+'\" failures=\"'+i.failure+'\" package=\"net.csslint\" name=\"'+t+'\">'),r.push(\"</testsuite>\")),r.join(\"\")}}),CSSLint.addFormatter({id:\"lint-xml\",name:\"Lint XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><lint>'},endFormat:function(){return\"</lint>\"},formatResults:function(e,t){var n=e.messages,r=[],i=function(e){return!e||e.constructor!==String?\"\":e.replace(/\\\"/g,\"'\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};return n.length>0&&(r.push('<file name=\"'+t+'\">'),CSSLint.Util.forEach(n,function(e){e.rollup?r.push('<issue severity=\"'+e.type+'\" reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>'):r.push('<issue line=\"'+e.line+'\" char=\"'+e.col+'\" severity=\"'+e.type+'\"'+' reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>')}),r.push(\"</file>\")),r.join(\"\")}}),CSSLint.addFormatter({id:\"text\",name:\"Plain Text\",startFormat:function(){return\"\"},endFormat:function(){return\"\"},formatResults:function(e,t,n){var r=e.messages,i=\"\";n=n||{};if(r.length===0)return n.quiet?\"\":\"\\n\\ncsslint: No errors in \"+t+\".\";i=\"\\n\\ncsslint: There \",r.length===1?i+=\"is 1 problem\":i+=\"are \"+r.length+\" problems\",i+=\" in \"+t+\".\";var s=t.lastIndexOf(\"/\"),o=t;return s===-1&&(s=t.lastIndexOf(\"\\\\\")),s>-1&&(o=t.substring(s+1)),CSSLint.Util.forEach(r,function(e,t){i=i+\"\\n\\n\"+o,e.rollup?(i+=\"\\n\"+(t+1)+\": \"+e.type,i+=\"\\n\"+e.message):(i+=\"\\n\"+(t+1)+\": \"+e.type+\" at line \"+e.line+\", col \"+e.col,i+=\"\\n\"+e.message,i+=\"\\n\"+e.evidence)}),i}}),module.exports.CSSLint=CSSLint}),ace.define(\"ace/mode/css_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./css/csslint\").CSSLint,u=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.ruleset=null,this.setDisabledRules(\"ids|order-alphabetical\"),this.setInfoRules(\"adjoining-classes|qualified-headings|zero-units|gradients|import|outline-none|vendor-prefix\")};r.inherits(u,s),function(){this.setInfoRules=function(e){typeof e==\"string\"&&(e=e.split(\"|\")),this.infoRules=i.arrayToMap(e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.setDisabledRules=function(e){if(!e)this.ruleset=null;else{typeof e==\"string\"&&(e=e.split(\"|\"));var t={};o.getRules().forEach(function(e){t[e.id]=!0}),e.forEach(function(e){delete t[e]}),this.ruleset=t}this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return this.sender.emit(\"annotate\",[]);var t=this.infoRules,n=o.verify(e,this.ruleset);this.sender.emit(\"annotate\",n.messages.map(function(e){return{row:e.line-1,column:e.col-1,text:e.message,type:t[e.rule.id]?\"info\":e.type,rule:e.rule.name}}))}}.call(u.prototype)}),ace.define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/worker-html.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/html/saxparser\",[],function(e,t,n){n.exports=function r(t,n,i){function s(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(o)return o(u,!0);throw new Error(\"Cannot find module '\"+u+\"'\")}var l=n[u]={exports:{}};t[u][0].call(l.exports,function(e){var n=t[u][1][e];return s(n?n:e)},l,l.exports,r,t,n,i)}return n[u].exports}var o=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)s(i[u]);return s}({1:[function(e,t,n){function r(e){if(e.namespaceURI===\"http://www.w3.org/1999/xhtml\")return e.localName===\"applet\"||e.localName===\"caption\"||e.localName===\"marquee\"||e.localName===\"object\"||e.localName===\"table\"||e.localName===\"td\"||e.localName===\"th\";if(e.namespaceURI===\"http://www.w3.org/1998/Math/MathML\")return e.localName===\"mi\"||e.localName===\"mo\"||e.localName===\"mn\"||e.localName===\"ms\"||e.localName===\"mtext\"||e.localName===\"annotation-xml\";if(e.namespaceURI===\"http://www.w3.org/2000/svg\")return e.localName===\"foreignObject\"||e.localName===\"desc\"||e.localName===\"title\"}function i(e){return r(e)||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"ol\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"ul\"}function s(e){return e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"table\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"html\"}function o(e){return e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"tbody\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"tfoot\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"thead\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"html\"}function u(e){return e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"tr\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"html\"}function a(e){return r(e)||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"button\"}function f(e){return(e.namespaceURI!==\"http://www.w3.org/1999/xhtml\"||e.localName!==\"optgroup\")&&(e.namespaceURI!==\"http://www.w3.org/1999/xhtml\"||e.localName!==\"option\")}function l(){this.elements=[],this.rootNode=null,this.headElement=null,this.bodyElement=null}l.prototype._inScope=function(e,t){for(var n=this.elements.length-1;n>=0;n--){var r=this.elements[n];if(r.localName===e)return!0;if(t(r))return!1}},l.prototype.push=function(e){this.elements.push(e)},l.prototype.pushHtmlElement=function(e){this.rootNode=e.node,this.push(e)},l.prototype.pushHeadElement=function(e){this.headElement=e.node,this.push(e)},l.prototype.pushBodyElement=function(e){this.bodyElement=e.node,this.push(e)},l.prototype.pop=function(){return this.elements.pop()},l.prototype.remove=function(e){this.elements.splice(this.elements.indexOf(e),1)},l.prototype.popUntilPopped=function(e){var t;do t=this.pop();while(t.localName!=e)},l.prototype.popUntilTableScopeMarker=function(){while(!s(this.top))this.pop()},l.prototype.popUntilTableBodyScopeMarker=function(){while(!o(this.top))this.pop()},l.prototype.popUntilTableRowScopeMarker=function(){while(!u(this.top))this.pop()},l.prototype.item=function(e){return this.elements[e]},l.prototype.contains=function(e){return this.elements.indexOf(e)!==-1},l.prototype.inScope=function(e){return this._inScope(e,r)},l.prototype.inListItemScope=function(e){return this._inScope(e,i)},l.prototype.inTableScope=function(e){return this._inScope(e,s)},l.prototype.inButtonScope=function(e){return this._inScope(e,a)},l.prototype.inSelectScope=function(e){return this._inScope(e,f)},l.prototype.hasNumberedHeaderElementInScope=function(){for(var e=this.elements.length-1;e>=0;e--){var t=this.elements[e];if(t.isNumberedHeader())return!0;if(r(t))return!1}},l.prototype.furthestBlockForFormattingElement=function(e){var t=null;for(var n=this.elements.length-1;n>=0;n--){var r=this.elements[n];if(r.node===e)break;r.isSpecial()&&(t=r)}return t},l.prototype.findIndex=function(e){for(var t=this.elements.length-1;t>=0;t--)if(this.elements[t].localName==e)return t;return-1},l.prototype.remove_openElements_until=function(e){var t=!1,n;while(!t)n=this.elements.pop(),t=e(n);return n},Object.defineProperty(l.prototype,\"top\",{get:function(){return this.elements[this.elements.length-1]}}),Object.defineProperty(l.prototype,\"length\",{get:function(){return this.elements.length}}),n.ElementStack=l},{}],2:[function(e,t,n){function o(e){return e>=\"0\"&&e<=\"9\"||e>=\"a\"&&e<=\"z\"||e>=\"A\"&&e<=\"Z\"}function u(e){return e>=\"0\"&&e<=\"9\"||e>=\"a\"&&e<=\"f\"||e>=\"A\"&&e<=\"F\"}function a(e){return e>=\"0\"&&e<=\"9\"}var r=e(\"html5-entities\"),i=e(\"./InputStream\").InputStream,s={};Object.keys(r).forEach(function(e){for(var t=0;t<e.length;t++)s[e.substring(0,t+1)]=!0});var f={};f.consumeEntity=function(e,t,n){var f=\"\",l=\"\",c=e.char();if(c===i.EOF)return!1;l+=c;if(c==\"\t\"||c==\"\\n\"||c==\"\\x0b\"||c==\" \"||c==\"<\"||c==\"&\")return e.unget(l),!1;if(n===c)return e.unget(l),!1;if(c==\"#\"){c=e.shift(1);if(c===i.EOF)return t._parseError(\"expected-numeric-entity-but-got-eof\"),e.unget(l),!1;l+=c;var h=10,p=a;if(c==\"x\"||c==\"X\"){h=16,p=u,c=e.shift(1);if(c===i.EOF)return t._parseError(\"expected-numeric-entity-but-got-eof\"),e.unget(l),!1;l+=c}if(p(c)){var d=\"\";while(c!==i.EOF&&p(c))d+=c,c=e.char();d=parseInt(d,h);var v=this.replaceEntityNumbers(d);v&&(t._parseError(\"invalid-numeric-entity-replaced\"),d=v);if(d>65535&&d<=1114111){d-=65536;var m=((1047552&d)>>10)+55296,g=(1023&d)+56320;f=String.fromCharCode(m,g)}else f=String.fromCharCode(d);return c!==\";\"&&(t._parseError(\"numeric-entity-without-semicolon\"),e.unget(c)),f}return e.unget(l),t._parseError(\"expected-numeric-entity\"),!1}if(c>=\"a\"&&c<=\"z\"||c>=\"A\"&&c<=\"Z\"){var y=\"\";while(s[l]){r[l]&&(y=l);if(c==\";\")break;c=e.char();if(c===i.EOF)break;l+=c}return y?(f=r[y],c===\";\"||!n||!o(c)&&c!==\"=\"?(l.length>y.length&&e.unget(l.substring(y.length)),c!==\";\"&&t._parseError(\"named-entity-without-semicolon\"),f):(e.unget(l),!1)):(t._parseError(\"expected-named-entity\"),e.unget(l),!1)}},f.replaceEntityNumbers=function(e){switch(e){case 0:return 65533;case 19:return 16;case 128:return 8364;case 129:return 129;case 130:return 8218;case 131:return 402;case 132:return 8222;case 133:return 8230;case 134:return 8224;case 135:return 8225;case 136:return 710;case 137:return 8240;case 138:return 352;case 139:return 8249;case 140:return 338;case 141:return 141;case 142:return 381;case 143:return 143;case 144:return 144;case 145:return 8216;case 146:return 8217;case 147:return 8220;case 148:return 8221;case 149:return 8226;case 150:return 8211;case 151:return 8212;case 152:return 732;case 153:return 8482;case 154:return 353;case 155:return 8250;case 156:return 339;case 157:return 157;case 158:return 382;case 159:return 376;default:if(e>=55296&&e<=57343||e>1114111)return 65533;if(e>=1&&e<=8||e>=14&&e<=31||e>=127&&e<=159||e>=64976&&e<=65007||e==11||e==65534||e==131070||e==3145726||e==196607||e==262142||e==262143||e==327678||e==327679||e==393214||e==393215||e==458750||e==458751||e==524286||e==524287||e==589822||e==589823||e==655358||e==655359||e==720894||e==720895||e==786430||e==786431||e==851966||e==851967||e==917502||e==917503||e==983038||e==983039||e==1048574||e==1048575||e==1114110||e==1114111)return e}},n.EntityParser=f},{\"./InputStream\":3,\"html5-entities\":12}],3:[function(e,t,n){function r(){this.data=\"\",this.start=0,this.committed=0,this.eof=!1,this.lastLocation={line:0,column:0}}r.EOF=-1,r.DRAIN=-2,r.prototype={slice:function(){if(this.start>=this.data.length){if(!this.eof)throw r.DRAIN;return r.EOF}return this.data.slice(this.start,this.data.length)},\"char\":function(){if(!this.eof&&this.start>=this.data.length-1)throw r.DRAIN;if(this.start>=this.data.length)return r.EOF;var e=this.data[this.start++];return e===\"\\r\"&&(e=\"\\n\"),e},advance:function(e){this.start+=e;if(this.start>=this.data.length){if(!this.eof)throw r.DRAIN;return r.EOF}this.committed>this.data.length/2&&(this.lastLocation=this.location(),this.data=this.data.slice(this.committed),this.start=this.start-this.committed,this.committed=0)},matchWhile:function(e){if(this.eof&&this.start>=this.data.length)return\"\";var t=new RegExp(\"^\"+e+\"+\"),n=t.exec(this.slice());if(n){if(!this.eof&&n[0].length==this.data.length-this.start)throw r.DRAIN;return this.advance(n[0].length),n[0]}return\"\"},matchUntil:function(e){var t,n;n=this.slice();if(n===r.EOF)return\"\";if(t=(new RegExp(e+(this.eof?\"|$\":\"\"))).exec(n)){var i=this.data.slice(this.start,this.start+t.index);return this.advance(t.index),i.replace(/\\r/g,\"\\n\").replace(/\\n{2,}/g,\"\\n\")}throw r.DRAIN},append:function(e){this.data+=e},shift:function(e){if(!this.eof&&this.start+e>=this.data.length)throw r.DRAIN;if(this.eof&&this.start>=this.data.length)return r.EOF;var t=this.data.slice(this.start,this.start+e).toString();return this.advance(Math.min(e,this.data.length-this.start)),t},peek:function(e){if(!this.eof&&this.start+e>=this.data.length)throw r.DRAIN;return this.eof&&this.start>=this.data.length?r.EOF:this.data.slice(this.start,Math.min(this.start+e,this.data.length)).toString()},length:function(){return this.data.length-this.start-1},unget:function(e){if(e===r.EOF)return;this.start-=e.length},undo:function(){this.start=this.committed},commit:function(){this.committed=this.start},location:function(){var e=this.lastLocation.line,t=this.lastLocation.column,n=this.data.slice(0,this.committed),r=n.match(/\\n/g),i=r?e+r.length:e,s=r?n.length-n.lastIndexOf(\"\\n\")-1:t+n.length;return{line:i,column:s}}},n.InputStream=r},{}],4:[function(e,t,n){function i(e,t,n,r){this.localName=t,this.namespaceURI=e,this.attributes=n,this.node=r}function s(e,t){for(var n=0;n<e.attributes.length;n++)if(e.attributes[n].nodeName==t)return e.attributes[n].nodeValue;return null}var r={\"http://www.w3.org/1999/xhtml\":[\"address\",\"applet\",\"area\",\"article\",\"aside\",\"base\",\"basefont\",\"bgsound\",\"blockquote\",\"body\",\"br\",\"button\",\"caption\",\"center\",\"col\",\"colgroup\",\"dd\",\"details\",\"dir\",\"div\",\"dl\",\"dt\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"frame\",\"frameset\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"iframe\",\"img\",\"input\",\"isindex\",\"li\",\"link\",\"listing\",\"main\",\"marquee\",\"menu\",\"menuitem\",\"meta\",\"nav\",\"noembed\",\"noframes\",\"noscript\",\"object\",\"ol\",\"p\",\"param\",\"plaintext\",\"pre\",\"script\",\"section\",\"select\",\"source\",\"style\",\"summary\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"title\",\"tr\",\"track\",\"ul\",\"wbr\",\"xmp\"],\"http://www.w3.org/1998/Math/MathML\":[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\",\"annotation-xml\"],\"http://www.w3.org/2000/svg\":[\"foreignObject\",\"desc\",\"title\"]};i.prototype.isSpecial=function(){return this.namespaceURI in r&&r[this.namespaceURI].indexOf(this.localName)>-1},i.prototype.isFosterParenting=function(){return this.namespaceURI===\"http://www.w3.org/1999/xhtml\"?this.localName===\"table\"||this.localName===\"tbody\"||this.localName===\"tfoot\"||this.localName===\"thead\"||this.localName===\"tr\":!1},i.prototype.isNumberedHeader=function(){return this.namespaceURI===\"http://www.w3.org/1999/xhtml\"?this.localName===\"h1\"||this.localName===\"h2\"||this.localName===\"h3\"||this.localName===\"h4\"||this.localName===\"h5\"||this.localName===\"h6\":!1},i.prototype.isForeign=function(){return this.namespaceURI!=\"http://www.w3.org/1999/xhtml\"},i.prototype.isHtmlIntegrationPoint=function(){if(this.namespaceURI===\"http://www.w3.org/1998/Math/MathML\"){if(this.localName!==\"annotation-xml\")return!1;var e=s(this,\"encoding\");return e?(e=e.toLowerCase(),e===\"text/html\"||e===\"application/xhtml+xml\"):!1}return this.namespaceURI===\"http://www.w3.org/2000/svg\"?this.localName===\"foreignObject\"||this.localName===\"desc\"||this.localName===\"title\":!1},i.prototype.isMathMLTextIntegrationPoint=function(){return this.namespaceURI===\"http://www.w3.org/1998/Math/MathML\"?this.localName===\"mi\"||this.localName===\"mo\"||this.localName===\"mn\"||this.localName===\"ms\"||this.localName===\"mtext\":!1},n.StackItem=i},{}],5:[function(e,t,n){function s(e){return e===\" \"||e===\"\\n\"||e===\"\t\"||e===\"\\r\"||e===\"\\f\"}function o(e){return e>=\"A\"&&e<=\"Z\"||e>=\"a\"&&e<=\"z\"}function u(e){this._tokenHandler=e,this._state=u.DATA,this._inputStream=new r,this._currentToken=null,this._temporaryBuffer=\"\",this._additionalAllowedCharacter=\"\"}var r=e(\"./InputStream\").InputStream,i=e(\"./EntityParser\").EntityParser;u.prototype._parseError=function(e,t){this._tokenHandler.parseError(e,t)},u.prototype._emitToken=function(e){if(e.type===\"StartTag\")for(var t=1;t<e.data.length;t++)e.data[t].nodeName||e.data.splice(t--,1);else e.type===\"EndTag\"&&(e.selfClosing&&this._parseError(\"self-closing-flag-on-end-tag\"),e.data.length!==0&&this._parseError(\"attributes-in-end-tag\"));this._tokenHandler.processToken(e),e.type===\"StartTag\"&&e.selfClosing&&!this._tokenHandler.isSelfClosingFlagAcknowledged()&&this._parseError(\"non-void-element-with-trailing-solidus\",{name:e.name})},u.prototype._emitCurrentToken=function(){this._state=u.DATA,this._emitToken(this._currentToken)},u.prototype._currentAttribute=function(){return this._currentToken.data[this._currentToken.data.length-1]},u.prototype.setState=function(e){this._state=e},u.prototype.tokenize=function(e){function n(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"&\")t.setState(a);else if(n===\"<\")t.setState(j);else if(n===\"\\0\")t._emitToken({type:\"Characters\",data:n}),e.commit();else{var i=e.matchUntil(\"&|<|\\0\");t._emitToken({type:\"Characters\",data:n+i}),e.commit()}return!0}function a(e){var r=i.consumeEntity(e,t);return t.setState(n),t._emitToken({type:\"Characters\",data:r||\"&\"}),!0}function f(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"&\")t.setState(l);else if(n===\"<\")t.setState(d);else if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"&|<|\\0\");t._emitToken({type:\"Characters\",data:n+i}),e.commit()}return!0}function l(e){var n=i.consumeEntity(e,t);return t.setState(f),t._emitToken({type:\"Characters\",data:n||\"&\"}),!0}function c(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"<\")t.setState(g);else if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"<|\\0\");t._emitToken({type:\"Characters\",data:n+i})}return!0}function h(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"\\0\");t._emitToken({type:\"Characters\",data:n+i})}return!0}function p(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"<\")t.setState(w);else if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"<|\\0\");t._emitToken({type:\"Characters\",data:n+i})}return!0}function d(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(v)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(f)),!0}function v(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.setState(m)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(f)),!0}function m(e){var r=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),i=e.char();return s(i)&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(q)):i===\"/\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(K)):i===\">\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t._emitCurrentToken(),t.setState(n)):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(i),t.setState(f)),!0}function g(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(y)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(c)),!0}function y(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.setState(b)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(c)),!0}function b(e){var r=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),i=e.char();return s(i)&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(q)):i===\"/\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(K)):i===\">\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t._emitCurrentToken(),t.setState(n)):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(i),t.setState(c)),!0}function w(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(E)):n===\"!\"?(t._emitToken({type:\"Characters\",data:\"<!\"}),t.setState(x)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(p)),!0}function E(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.setState(S)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(p)),!0}function S(e){var n=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),r=e.char();return s(r)&&n?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(q)):r===\"/\"&&n?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(K)):r===\">\"&&n?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t._emitCurrentToken()):o(r)?(this._temporaryBuffer+=r,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(r),t.setState(p)),!0}function x(e){var n=e.char();return n===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(T)):(e.unget(n),t.setState(p)),!0}function T(e){var n=e.char();return n===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(k)):(e.unget(n),t.setState(p)),!0}function N(e){var i=e.char();if(i===r.EOF)e.unget(i),t.setState(n);else if(i===\"-\")t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(C);else if(i===\"<\")t.setState(L);else if(i===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var s=e.matchUntil(\"<|-|\\0\");t._emitToken({type:\"Characters\",data:i+s})}return!0}function C(e){var i=e.char();return i===r.EOF?(e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(k)):i===\"<\"?t.setState(L):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(N)):(t._emitToken({type:\"Characters\",data:i}),t.setState(N)),!0}function k(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"<\"?t.setState(L):i===\">\"?(t._emitToken({type:\"Characters\",data:\">\"}),t.setState(p)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(N)):(t._emitToken({type:\"Characters\",data:i}),t.setState(N)),!0}function L(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(A)):o(n)?(t._emitToken({type:\"Characters\",data:\"<\"+n}),this._temporaryBuffer=n,t.setState(M)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(N)),!0}function A(e){var n=e.char();return o(n)?(this._temporaryBuffer=n,t.setState(O)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(N)),!0}function O(e){var r=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),i=e.char();return s(i)&&r?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(q)):i===\"/\"&&r?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(K)):i===\">\"&&r?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(n),t._emitCurrentToken()):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(i),t.setState(N)),!0}function M(e){var n=e.char();return s(n)||n===\"/\"||n===\">\"?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer.toLowerCase()===\"script\"?t.setState(_):t.setState(N)):o(n)?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer+=n,e.commit()):(e.unget(n),t.setState(N)),!0}function _(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(D)):i===\"<\"?(t._emitToken({type:\"Characters\",data:\"<\"}),t.setState(H)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit()):(t._emitToken({type:\"Characters\",data:i}),e.commit()),!0}function D(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(P)):i===\"<\"?(t._emitToken({type:\"Characters\",data:\"<\"}),t.setState(H)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(_)):(t._emitToken({type:\"Characters\",data:i}),t.setState(_)),!0}function P(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),e.commit()):i===\"<\"?(t._emitToken({type:\"Characters\",data:\"<\"}),t.setState(H)):i===\">\"?(t._emitToken({type:\"Characters\",data:\">\"}),t.setState(p)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(_)):(t._emitToken({type:\"Characters\",data:i}),t.setState(_)),!0}function H(e){var n=e.char();return n===\"/\"?(t._emitToken({type:\"Characters\",data:\"/\"}),this._temporaryBuffer=\"\",t.setState(B)):(e.unget(n),t.setState(_)),!0}function B(e){var n=e.char();return s(n)||n===\"/\"||n===\">\"?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer.toLowerCase()===\"script\"?t.setState(N):t.setState(_)):o(n)?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer+=n,e.commit()):(e.unget(n),t.setState(_)),!0}function j(e){var i=e.char();return i===r.EOF?(t._parseError(\"bare-less-than-sign-at-eof\"),t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(i),t.setState(n)):o(i)?(t._currentToken={type:\"StartTag\",name:i.toLowerCase(),data:[]},t.setState(I)):i===\"!\"?t.setState(G):i===\"/\"?t.setState(F):i===\">\"?(t._parseError(\"expected-tag-name-but-got-right-bracket\"),t._emitToken({type:\"Characters\",data:\"<>\"}),t.setState(n)):i===\"?\"?(t._parseError(\"expected-tag-name-but-got-question-mark\"),e.unget(i),t.setState(Q)):(t._parseError(\"expected-tag-name\"),t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(i),t.setState(n)),!0}function F(e){var i=e.char();return i===r.EOF?(t._parseError(\"expected-closing-tag-but-got-eof\"),t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(i),t.setState(n)):o(i)?(t._currentToken={type:\"EndTag\",name:i.toLowerCase(),data:[]},t.setState(I)):i===\">\"?(t._parseError(\"expected-closing-tag-but-got-right-bracket\"),t.setState(n)):(t._parseError(\"expected-closing-tag-but-got-char\",{data:i}),e.unget(i),t.setState(Q)),!0}function I(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-tag-name\"),e.unget(i),t.setState(n)):s(i)?t.setState(q):o(i)?t._currentToken.name+=i.toLowerCase():i===\">\"?t._emitCurrentToken():i===\"/\"?t.setState(K):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.name+=\"\\ufffd\"):t._currentToken.name+=i,e.commit(),!0}function q(e){var i=e.char();if(i===r.EOF)t._parseError(\"expected-attribute-name-but-got-eof\"),e.unget(i),t.setState(n);else{if(s(i))return!0;o(i)?(t._currentToken.data.push({nodeName:i.toLowerCase(),nodeValue:\"\"}),t.setState(R)):i===\">\"?t._emitCurrentToken():i===\"/\"?t.setState(K):i===\"'\"||i==='\"'||i===\"=\"||i===\"<\"?(t._parseError(\"invalid-character-in-attribute-name\"),t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data.push({nodeName:\"\\ufffd\",nodeValue:\"\"})):(t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R))}return!0}function R(e){var i=e.char(),u=!0,a=!1;i===r.EOF?(t._parseError(\"eof-in-attribute-name\"),e.unget(i),t.setState(n),a=!0):i===\"=\"?t.setState(z):o(i)?(t._currentAttribute().nodeName+=i.toLowerCase(),u=!1):i===\">\"?a=!0:s(i)?t.setState(U):i===\"/\"?t.setState(K):i===\"'\"||i==='\"'?(t._parseError(\"invalid-character-in-attribute-name\"),t._currentAttribute().nodeName+=i,u=!1):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeName+=\"\\ufffd\"):(t._currentAttribute().nodeName+=i,u=!1);if(u){var f=t._currentToken.data,l=f[f.length-1];for(var c=f.length-2;c>=0;c--)if(l.nodeName===f[c].nodeName){t._parseError(\"duplicate-attribute\",{name:l.nodeName}),l.nodeName=null;break}a&&t._emitCurrentToken()}else e.commit();return!0}function U(e){var i=e.char();if(i===r.EOF)t._parseError(\"expected-end-of-tag-but-got-eof\"),e.unget(i),t.setState(n);else{if(s(i))return!0;i===\"=\"?t.setState(z):i===\">\"?t._emitCurrentToken():o(i)?(t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R)):i===\"/\"?t.setState(K):i===\"'\"||i==='\"'||i===\"<\"?(t._parseError(\"invalid-character-after-attribute-name\"),t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data.push({nodeName:\"\\ufffd\",nodeValue:\"\"})):(t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R))}return!0}function z(e){var i=e.char();if(i===r.EOF)t._parseError(\"expected-attribute-value-but-got-eof\"),e.unget(i),t.setState(n);else{if(s(i))return!0;i==='\"'?t.setState(W):i===\"&\"?(t.setState(V),e.unget(i)):i===\"'\"?t.setState(X):i===\">\"?(t._parseError(\"expected-attribute-value-but-got-right-bracket\"),t._emitCurrentToken()):i===\"=\"||i===\"<\"||i===\"`\"?(t._parseError(\"unexpected-character-in-unquoted-attribute-value\"),t._currentAttribute().nodeValue+=i,t.setState(V)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\"):(t._currentAttribute().nodeValue+=i,t.setState(V))}return!0}function W(e){var i=e.char();if(i===r.EOF)t._parseError(\"eof-in-attribute-value-double-quote\"),e.unget(i),t.setState(n);else if(i==='\"')t.setState(J);else if(i===\"&\")this._additionalAllowedCharacter='\"',t.setState($);else if(i===\"\\0\")t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\";else{var s=e.matchUntil('[\\0\"&]');i+=s,t._currentAttribute().nodeValue+=i}return!0}function X(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-attribute-value-single-quote\"),e.unget(i),t.setState(n)):i===\"'\"?t.setState(J):i===\"&\"?(this._additionalAllowedCharacter=\"'\",t.setState($)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\"):t._currentAttribute().nodeValue+=i+e.matchUntil(\"\\0|['&]\"),!0}function V(e){var i=e.char();if(i===r.EOF)t._parseError(\"eof-after-attribute-value\"),e.unget(i),t.setState(n);else if(s(i))t.setState(q);else if(i===\"&\")this._additionalAllowedCharacter=\">\",t.setState($);else if(i===\">\")t._emitCurrentToken();else if(i==='\"'||i===\"'\"||i===\"=\"||i===\"`\"||i===\"<\")t._parseError(\"unexpected-character-in-unquoted-attribute-value\"),t._currentAttribute().nodeValue+=i,e.commit();else if(i===\"\\0\")t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\";else{var o=e.matchUntil(\"\\0|[\t\\n\\x0b\\f \\r&<>\\\"'=`]\");o===r.EOF&&(t._parseError(\"eof-in-attribute-value-no-quotes\"),t._emitCurrentToken()),e.commit(),t._currentAttribute().nodeValue+=i+o}return!0}function $(e){var n=i.consumeEntity(e,t,this._additionalAllowedCharacter);return this._currentAttribute().nodeValue+=n||\"&\",this._additionalAllowedCharacter==='\"'?t.setState(W):this._additionalAllowedCharacter===\"'\"?t.setState(X):this._additionalAllowedCharacter===\">\"&&t.setState(V),!0}function J(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-after-attribute-value\"),e.unget(i),t.setState(n)):s(i)?t.setState(q):i===\">\"?(t.setState(n),t._emitCurrentToken()):i===\"/\"?t.setState(K):(t._parseError(\"unexpected-character-after-attribute-value\"),e.unget(i),t.setState(q)),!0}function K(e){var i=e.char();return i===r.EOF?(t._parseError(\"unexpected-eof-after-solidus-in-tag\"),e.unget(i),t.setState(n)):i===\">\"?(t._currentToken.selfClosing=!0,t.setState(n),t._emitCurrentToken()):(t._parseError(\"unexpected-character-after-solidus-in-tag\"),e.unget(i),t.setState(q)),!0}function Q(e){var r=e.matchUntil(\">\");return r=r.replace(/\\u0000/g,\"\\ufffd\"),e.char(),t._emitToken({type:\"Comment\",data:r}),t.setState(n),!0}function G(e){var n=e.shift(2);if(n===\"--\")t._currentToken={type:\"Comment\",data:\"\"},t.setState(Z);else{var i=e.shift(5);if(i===r.EOF||n===r.EOF)return t._parseError(\"expected-dashes-or-doctype\"),t.setState(Q),e.unget(n),!0;n+=i,n.toUpperCase()===\"DOCTYPE\"?(t._currentToken={type:\"Doctype\",name:\"\",publicId:null,systemId:null,forceQuirks:!1},t.setState(st)):t._tokenHandler.isCdataSectionAllowed()&&n===\"[CDATA[\"?t.setState(Y):(t._parseError(\"expected-dashes-or-doctype\"),e.unget(n),t.setState(Q))}return!0}function Y(e){var r=e.matchUntil(\"]]>\");return e.shift(3),r&&t._emitToken({type:\"Characters\",data:r}),t.setState(n),!0}function Z(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(et):i===\">\"?(t._parseError(\"incorrect-comment\"),t._emitToken(t._currentToken),t.setState(n)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"\\ufffd\"):(t._currentToken.data+=i,t.setState(tt)),!0}function et(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(rt):i===\">\"?(t._parseError(\"incorrect-comment\"),t._emitToken(t._currentToken),t.setState(n)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"\\ufffd\"):(t._currentToken.data+=\"-\"+i,t.setState(tt)),!0}function tt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(nt):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"\\ufffd\"):(t._currentToken.data+=i,e.commit()),!0}function nt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment-end-dash\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(rt):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"-\\ufffd\",t.setState(tt)):(t._currentToken.data+=\"-\"+i+e.matchUntil(\"\\0|-\"),e.char()),!0}function rt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment-double-dash\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\">\"?(t._emitToken(t._currentToken),t.setState(n)):i===\"!\"?(t._parseError(\"unexpected-bang-after-double-dash-in-comment\"),t.setState(it)):i===\"-\"?(t._parseError(\"unexpected-dash-after-double-dash-in-comment\"),t._currentToken.data+=i):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"--\\ufffd\",t.setState(tt)):(t._parseError(\"unexpected-char-in-comment\"),t._currentToken.data+=\"--\"+i,t.setState(tt)),!0}function it(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment-end-bang-state\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\">\"?(t._emitToken(t._currentToken),t.setState(n)):i===\"-\"?(t._currentToken.data+=\"--!\",t.setState(nt)):(t._currentToken.data+=\"--!\"+i,t.setState(tt)),!0}function st(e){var i=e.char();return i===r.EOF?(t._parseError(\"expected-doctype-name-but-got-eof\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(ot):(t._parseError(\"need-space-after-doctype\"),e.unget(i),t.setState(ot)),!0}function ot(e){var i=e.char();return i===r.EOF?(t._parseError(\"expected-doctype-name-but-got-eof\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)||(i===\">\"?(t._parseError(\"expected-doctype-name-but-got-right-bracket\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):(o(i)&&(i=i.toLowerCase()),t._currentToken.name=i,t.setState(ut))),!0}function ut(e){var i=e.char();return i===r.EOF?(t._currentToken.forceQuirks=!0,e.unget(i),t._parseError(\"eof-in-doctype-name\"),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(at):i===\">\"?(t.setState(n),t._emitCurrentToken()):(o(i)&&(i=i.toLowerCase()),t._currentToken.name+=i,e.commit()),!0}function at(e){var i=e.char();if(i===r.EOF)t._currentToken.forceQuirks=!0,e.unget(i),t._parseError(\"eof-in-doctype\"),t.setState(n),t._emitCurrentToken();else if(!s(i))if(i===\">\")t.setState(n),t._emitCurrentToken();else{if([\"p\",\"P\"].indexOf(i)>-1){var o=[[\"u\",\"U\"],[\"b\",\"B\"],[\"l\",\"L\"],[\"i\",\"I\"],[\"c\",\"C\"]],u=o.every(function(t){return i=e.char(),t.indexOf(i)>-1});if(u)return t.setState(ft),!0}else if([\"s\",\"S\"].indexOf(i)>-1){var o=[[\"y\",\"Y\"],[\"s\",\"S\"],[\"t\",\"T\"],[\"e\",\"E\"],[\"m\",\"M\"]],u=o.every(function(t){return i=e.char(),t.indexOf(i)>-1});if(u)return t.setState(vt),!0}e.unget(i),t._currentToken.forceQuirks=!0,i===r.EOF?(t._parseError(\"eof-in-doctype\"),e.unget(i),t.setState(n),t._emitCurrentToken()):(t._parseError(\"expected-space-or-right-bracket-in-doctype\",{data:i}),t.setState(wt))}return!0}function ft(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(lt):i===\"'\"||i==='\"'?(t._parseError(\"unexpected-char-in-doctype\"),e.unget(i),t.setState(lt)):(e.unget(i),t.setState(lt)),!0}function lt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)||(i==='\"'?(t._currentToken.publicId=\"\",t.setState(ct)):i===\"'\"?(t._currentToken.publicId=\"\",t.setState(ht)):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function ct(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):i==='\"'?t.setState(pt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):t._currentToken.publicId+=i,!0}function ht(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):i===\"'\"?t.setState(pt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):t._currentToken.publicId+=i,!0}function pt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)?t.setState(dt):i===\">\"?(t.setState(n),t._emitCurrentToken()):i==='\"'?(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.systemId=\"\",t.setState(gt)):i===\"'\"?(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.systemId=\"\",t.setState(yt)):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt)),!0}function dt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i===\">\"?(t._emitCurrentToken(),t.setState(n)):i==='\"'?(t._currentToken.systemId=\"\",t.setState(gt)):i===\"'\"?(t._currentToken.systemId=\"\",t.setState(yt)):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function vt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)?t.setState(mt):i===\"'\"||i==='\"'?(t._parseError(\"unexpected-char-in-doctype\"),e.unget(i),t.setState(mt)):(e.unget(i),t.setState(mt)),!0}function mt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i==='\"'?(t._currentToken.systemId=\"\",t.setState(gt)):i===\"'\"?(t._currentToken.systemId=\"\",t.setState(yt)):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function gt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):i==='\"'?t.setState(bt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):t._currentToken.systemId+=i,!0}function yt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):i===\"'\"?t.setState(bt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):t._currentToken.systemId+=i,!0}function bt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i===\">\"?(t._emitCurrentToken(),t.setState(n)):(t._parseError(\"unexpected-char-in-doctype\"),t.setState(wt))),!0}function wt(e){var i=e.char();return i===r.EOF?(e.unget(i),t._emitCurrentToken(),t.setState(n)):i===\">\"&&(t._emitCurrentToken(),t.setState(n)),!0}u.DATA=n,u.RCDATA=f,u.RAWTEXT=c,u.SCRIPT_DATA=p,u.PLAINTEXT=h,this._state=u.DATA,this._inputStream.append(e),this._tokenHandler.startTokenization(this),this._inputStream.eof=!0;var t=this;while(this._state.call(this,this._inputStream));},Object.defineProperty(u.prototype,\"lineNumber\",{get:function(){return this._inputStream.location().line}}),Object.defineProperty(u.prototype,\"columnNumber\",{get:function(){return this._inputStream.location().column}}),n.Tokenizer=u},{\"./EntityParser\":2,\"./InputStream\":3}],6:[function(e,t,n){function c(e){return e===\" \"||e===\"\\n\"||e===\"\t\"||e===\"\\r\"||e===\"\\f\"}function h(e){return c(e)||e===\"\\ufffd\"}function p(e){for(var t=0;t<e.length;t++){var n=e[t];if(!c(n))return!1}return!0}function d(e){for(var t=0;t<e.length;t++){var n=e[t];if(!h(n))return!1}return!0}function v(e,t){for(var n=0;n<e.attributes.length;n++){var r=e.attributes[n];if(r.nodeName===t)return r}return null}function m(e){this.characters=e,this.current=0,this.end=this.characters.length}function g(){this.tokenizer=null,this.errorHandler=null,this.scriptingEnabled=!1,this.document=null,this.head=null,this.form=null,this.openElements=new a,this.activeFormattingElements=[],this.insertionMode=null,this.insertionModeName=\"\",this.originalInsertionMode=\"\",this.inQuirksMode=!1,this.compatMode=\"no quirks\",this.framesetOk=!0,this.redirectAttachToFosterParent=!1,this.selfClosingFlagAcknowledged=!1,this.context=\"\",this.pendingTableCharacters=[],this.shouldSkipLeadingNewline=!1;var e=this,t=this.insertionModes={};t.base={end_tag_handlers:{\"-default\":\"endTagOther\"},start_tag_handlers:{\"-default\":\"startTagOther\"},processEOF:function(){e.generateImpliedEndTags(),e.openElements.length>2?e.parseError(\"expected-closing-tag-but-got-eof\"):e.openElements.length==2&&e.openElements.item(1).localName!=\"body\"?e.parseError(\"expected-closing-tag-but-got-eof\"):e.context&&e.openElements.length>1},processComment:function(t){e.insertComment(t,e.currentStackItem().node)},processDoctype:function(t,n,r,i){e.parseError(\"unexpected-doctype\")},processStartTag:function(e,t,n){if(this[this.start_tag_handlers[e]])this[this.start_tag_handlers[e]](e,t,n);else{if(!this[this.start_tag_handlers[\"-default\"]])throw new Error(\"No handler found for \"+e);this[this.start_tag_handlers[\"-default\"]](e,t,n)}},processEndTag:function(e){if(this[this.end_tag_handlers[e]])this[this.end_tag_handlers[e]](e);else{if(!this[this.end_tag_handlers[\"-default\"]])throw new Error(\"No handler found for \"+e);this[this.end_tag_handlers[\"-default\"]](e)}},startTagHtml:function(e,n){t.inBody.startTagHtml(e,n)}},t.initial=Object.create(t.base),t.initial.processEOF=function(){e.parseError(\"expected-doctype-but-got-eof\"),this.anythingElse(),e.insertionMode.processEOF()},t.initial.processComment=function(t){e.insertComment(t,e.document)},t.initial.processDoctype=function(t,n,r,i){function s(e){return n.toLowerCase().indexOf(e)===0}e.insertDoctype(t||\"\",n||\"\",r||\"\"),i||t!=\"html\"||n!=null&&([\"+//silmaril//dtd html pro v0r11 19970101//\",\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//\",\"-//as//dtd html 3.0 aswedit + extensions//\",\"-//ietf//dtd html 2.0 level 1//\",\"-//ietf//dtd html 2.0 level 2//\",\"-//ietf//dtd html 2.0 strict level 1//\",\"-//ietf//dtd html 2.0 strict level 2//\",\"-//ietf//dtd html 2.0 strict//\",\"-//ietf//dtd html 2.0//\",\"-//ietf//dtd html 2.1e//\",\"-//ietf//dtd html 3.0//\",\"-//ietf//dtd html 3.0//\",\"-//ietf//dtd html 3.2 final//\",\"-//ietf//dtd html 3.2//\",\"-//ietf//dtd html 3//\",\"-//ietf//dtd html level 0//\",\"-//ietf//dtd html level 0//\",\"-//ietf//dtd html level 1//\",\"-//ietf//dtd html level 1//\",\"-//ietf//dtd html level 2//\",\"-//ietf//dtd html level 2//\",\"-//ietf//dtd html level 3//\",\"-//ietf//dtd html level 3//\",\"-//ietf//dtd html strict level 0//\",\"-//ietf//dtd html strict level 0//\",\"-//ietf//dtd html strict level 1//\",\"-//ietf//dtd html strict level 1//\",\"-//ietf//dtd html strict level 2//\",\"-//ietf//dtd html strict level 2//\",\"-//ietf//dtd html strict level 3//\",\"-//ietf//dtd html strict level 3//\",\"-//ietf//dtd html strict//\",\"-//ietf//dtd html strict//\",\"-//ietf//dtd html strict//\",\"-//ietf//dtd html//\",\"-//ietf//dtd html//\",\"-//ietf//dtd html//\",\"-//metrius//dtd metrius presentational//\",\"-//microsoft//dtd internet explorer 2.0 html strict//\",\"-//microsoft//dtd internet explorer 2.0 html//\",\"-//microsoft//dtd internet explorer 2.0 tables//\",\"-//microsoft//dtd internet explorer 3.0 html strict//\",\"-//microsoft//dtd internet explorer 3.0 html//\",\"-//microsoft//dtd internet explorer 3.0 tables//\",\"-//netscape comm. corp.//dtd html//\",\"-//netscape comm. corp.//dtd strict html//\",\"-//o'reilly and associates//dtd html 2.0//\",\"-//o'reilly and associates//dtd html extended 1.0//\",\"-//spyglass//dtd html 2.0 extended//\",\"-//sq//dtd html 2.0 hotmetal + extensions//\",\"-//sun microsystems corp.//dtd hotjava html//\",\"-//sun microsystems corp.//dtd hotjava strict html//\",\"-//w3c//dtd html 3 1995-03-24//\",\"-//w3c//dtd html 3.2 draft//\",\"-//w3c//dtd html 3.2 final//\",\"-//w3c//dtd html 3.2//\",\"-//w3c//dtd html 3.2s draft//\",\"-//w3c//dtd html 4.0 frameset//\",\"-//w3c//dtd html 4.0 transitional//\",\"-//w3c//dtd html experimental 19960712//\",\"-//w3c//dtd html experimental 970421//\",\"-//w3c//dtd w3 html//\",\"-//w3o//dtd w3 html 3.0//\",\"-//webtechs//dtd mozilla html 2.0//\",\"-//webtechs//dtd mozilla html//\",\"html\"].some(s)||[\"-//w3o//dtd w3 html strict 3.0//en//\",\"-/w3c/dtd html 4.0 transitional/en\",\"html\"].indexOf(n.toLowerCase())>-1||r==null&&[\"-//w3c//dtd html 4.01 transitional//\",\"-//w3c//dtd html 4.01 frameset//\"].some(s))||r!=null&&r.toLowerCase()==\"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\"?(e.compatMode=\"quirks\",e.parseError(\"quirky-doctype\")):n!=null&&([\"-//w3c//dtd xhtml 1.0 transitional//\",\"-//w3c//dtd xhtml 1.0 frameset//\"].some(s)||r!=null&&[\"-//w3c//dtd html 4.01 transitional//\",\"-//w3c//dtd html 4.01 frameset//\"].indexOf(n.toLowerCase())>-1)?(e.compatMode=\"limited quirks\",e.parseError(\"almost-standards-doctype\")):n==\"-//W3C//DTD HTML 4.0//EN\"&&(r==null||r==\"http://www.w3.org/TR/REC-html40/strict.dtd\")||n==\"-//W3C//DTD HTML 4.01//EN\"&&(r==null||r==\"http://www.w3.org/TR/html4/strict.dtd\")||n==\"-//W3C//DTD XHTML 1.0 Strict//EN\"&&r==\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"||n==\"-//W3C//DTD XHTML 1.1//EN\"&&r==\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"||(r!=null&&r!=\"about:legacy-compat\"||n!=null)&&e.parseError(\"unknown-doctype\"),e.setInsertionMode(\"beforeHTML\")},t.initial.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;e.parseError(\"expected-doctype-but-got-chars\"),this.anythingElse(),e.insertionMode.processCharacters(t)},t.initial.processStartTag=function(t,n,r){e.parseError(\"expected-doctype-but-got-start-tag\",{name:t}),this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.initial.processEndTag=function(t){e.parseError(\"expected-doctype-but-got-end-tag\",{name:t}),this.anythingElse(),e.insertionMode.processEndTag(t)},t.initial.anythingElse=function(){e.compatMode=\"quirks\",e.setInsertionMode(\"beforeHTML\")},t.beforeHTML=Object.create(t.base),t.beforeHTML.start_tag_handlers={html:\"startTagHtml\",\"-default\":\"startTagOther\"},t.beforeHTML.processEOF=function(){this.anythingElse(),e.insertionMode.processEOF()},t.beforeHTML.processComment=function(t){e.insertComment(t,e.document)},t.beforeHTML.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.beforeHTML.startTagHtml=function(t,n,r){e.insertHtmlElement(n),e.setInsertionMode(\"beforeHead\")},t.beforeHTML.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.beforeHTML.processEndTag=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.beforeHTML.anythingElse=function(){e.insertHtmlElement(),e.setInsertionMode(\"beforeHead\")},t.afterAfterBody=Object.create(t.base),t.afterAfterBody.start_tag_handlers={html:\"startTagHtml\",\"-default\":\"startTagOther\"},t.afterAfterBody.processComment=function(t){e.insertComment(t,e.document)},t.afterAfterBody.processDoctype=function(e){t.inBody.processDoctype(e)},t.afterAfterBody.startTagHtml=function(e,n){t.inBody.startTagHtml(e,n)},t.afterAfterBody.startTagOther=function(t,n,r){e.parseError(\"unexpected-start-tag\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processStartTag(t,n,r)},t.afterAfterBody.endTagOther=function(t){e.parseError(\"unexpected-end-tag\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processEndTag(t)},t.afterAfterBody.processCharacters=function(n){if(!p(n.characters))return e.parseError(\"unexpected-char-after-body\"),e.setInsertionMode(\"inBody\"),e.insertionMode.processCharacters(n);t.inBody.processCharacters(n)},t.afterBody=Object.create(t.base),t.afterBody.end_tag_handlers={html:\"endTagHtml\",\"-default\":\"endTagOther\"},t.afterBody.processComment=function(t){e.insertComment(t,e.openElements.rootNode)},t.afterBody.processCharacters=function(n){if(!p(n.characters))return e.parseError(\"unexpected-char-after-body\"),e.setInsertionMode(\"inBody\"),e.insertionMode.processCharacters(n);t.inBody.processCharacters(n)},t.afterBody.processStartTag=function(t,n,r){e.parseError(\"unexpected-start-tag-after-body\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processStartTag(t,n,r)},t.afterBody.endTagHtml=function(t){e.context?e.parseError(\"end-html-in-innerhtml\"):e.setInsertionMode(\"afterAfterBody\")},t.afterBody.endTagOther=function(t){e.parseError(\"unexpected-end-tag-after-body\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processEndTag(t)},t.afterFrameset=Object.create(t.base),t.afterFrameset.start_tag_handlers={html:\"startTagHtml\",noframes:\"startTagNoframes\",\"-default\":\"startTagOther\"},t.afterFrameset.end_tag_handlers={html:\"endTagHtml\",\"-default\":\"endTagOther\"},t.afterFrameset.processCharacters=function(t){var n=t.takeRemaining(),r=\"\";for(var i=0;i<n.length;i++){var s=n[i];c(s)&&(r+=s)}r&&e.insertText(r),r.length<n.length&&e.parseError(\"expected-eof-but-got-char\")},t.afterFrameset.startTagNoframes=function(e,n){t.inHead.processStartTag(e,n)},t.afterFrameset.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-after-frameset\",{name:t})},t.afterFrameset.endTagHtml=function(t){e.setInsertionMode(\"afterAfterFrameset\")},t.afterFrameset.endTagOther=function(t){e.parseError(\"unexpected-end-tag-after-frameset\",{name:t})},t.beforeHead=Object.create(t.base),t.beforeHead.start_tag_handlers={html:\"startTagHtml\",head:\"startTagHead\",\"-default\":\"startTagOther\"},t.beforeHead.end_tag_handlers={html:\"endTagImplyHead\",head:\"endTagImplyHead\",body:\"endTagImplyHead\",br:\"endTagImplyHead\",\"-default\":\"endTagOther\"},t.beforeHead.processEOF=function(){this.startTagHead(\"head\",[]),e.insertionMode.processEOF()},t.beforeHead.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;this.startTagHead(\"head\",[]),e.insertionMode.processCharacters(t)},t.beforeHead.startTagHead=function(t,n){e.insertHeadElement(n),e.setInsertionMode(\"inHead\")},t.beforeHead.startTagOther=function(t,n,r){this.startTagHead(\"head\",[]),e.insertionMode.processStartTag(t,n,r)},t.beforeHead.endTagImplyHead=function(t){this.startTagHead(\"head\",[]),e.insertionMode.processEndTag(t)},t.beforeHead.endTagOther=function(t){e.parseError(\"end-tag-after-implied-root\",{name:t})},t.inHead=Object.create(t.base),t.inHead.start_tag_handlers={html:\"startTagHtml\",head:\"startTagHead\",title:\"startTagTitle\",script:\"startTagScript\",style:\"startTagNoFramesStyle\",noscript:\"startTagNoScript\",noframes:\"startTagNoFramesStyle\",base:\"startTagBaseBasefontBgsoundLink\",basefont:\"startTagBaseBasefontBgsoundLink\",bgsound:\"startTagBaseBasefontBgsoundLink\",link:\"startTagBaseBasefontBgsoundLink\",meta:\"startTagMeta\",\"-default\":\"startTagOther\"},t.inHead.end_tag_handlers={head:\"endTagHead\",html:\"endTagHtmlBodyBr\",body:\"endTagHtmlBodyBr\",br:\"endTagHtmlBodyBr\",\"-default\":\"endTagOther\"},t.inHead.processEOF=function(){var t=e.currentStackItem().localName;[\"title\",\"style\",\"script\"].indexOf(t)!=-1&&(e.parseError(\"expected-named-closing-tag-but-got-eof\",{name:t}),e.popElement()),this.anythingElse(),e.insertionMode.processEOF()},t.inHead.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.inHead.startTagHtml=function(e,n){t.inBody.processStartTag(e,n)},t.inHead.startTagHead=function(t,n){e.parseError(\"two-heads-are-not-better-than-one\")},t.inHead.startTagTitle=function(t,n){e.processGenericRCDATAStartTag(t,n)},t.inHead.startTagNoScript=function(t,n){if(e.scriptingEnabled)return e.processGenericRawTextStartTag(t,n);e.insertElement(t,n),e.setInsertionMode(\"inHeadNoscript\")},t.inHead.startTagNoFramesStyle=function(t,n){e.processGenericRawTextStartTag(t,n)},t.inHead.startTagScript=function(t,n){e.insertElement(t,n),e.tokenizer.setState(u.SCRIPT_DATA),e.originalInsertionMode=e.insertionModeName,e.setInsertionMode(\"text\")},t.inHead.startTagBaseBasefontBgsoundLink=function(t,n){e.insertSelfClosingElement(t,n)},t.inHead.startTagMeta=function(t,n){e.insertSelfClosingElement(t,n)},t.inHead.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.inHead.endTagHead=function(t){e.openElements.item(e.openElements.length-1).localName==\"head\"?e.openElements.pop():e.parseError(\"unexpected-end-tag\",{name:\"head\"}),e.setInsertionMode(\"afterHead\")},t.inHead.endTagHtmlBodyBr=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.inHead.endTagOther=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inHead.anythingElse=function(){this.endTagHead(\"head\")},t.afterHead=Object.create(t.base),t.afterHead.start_tag_handlers={html:\"startTagHtml\",head:\"startTagHead\",body:\"startTagBody\",frameset:\"startTagFrameset\",base:\"startTagFromHead\",link:\"startTagFromHead\",meta:\"startTagFromHead\",script:\"startTagFromHead\",style:\"startTagFromHead\",title:\"startTagFromHead\",\"-default\":\"startTagOther\"},t.afterHead.end_tag_handlers={body:\"endTagBodyHtmlBr\",html:\"endTagBodyHtmlBr\",br:\"endTagBodyHtmlBr\",\"-default\":\"endTagOther\"},t.afterHead.processEOF=function(){this.anythingElse(),e.insertionMode.processEOF()},t.afterHead.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.afterHead.startTagHtml=function(e,n){t.inBody.processStartTag(e,n)},t.afterHead.startTagBody=function(t,n){e.framesetOk=!1,e.insertBodyElement(n),e.setInsertionMode(\"inBody\")},t.afterHead.startTagFrameset=function(t,n){e.insertElement(t,n),e.setInsertionMode(\"inFrameset\")},t.afterHead.startTagFromHead=function(n,r,i){e.parseError(\"unexpected-start-tag-out-of-my-head\",{name:n}),e.openElements.push(e.head),t.inHead.processStartTag(n,r,i),e.openElements.remove(e.head)},t.afterHead.startTagHead=function(t,n,r){e.parseError(\"unexpected-start-tag\",{name:t})},t.afterHead.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.afterHead.endTagBodyHtmlBr=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.afterHead.endTagOther=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.afterHead.anythingElse=function(){e.insertBodyElement([]),e.setInsertionMode(\"inBody\"),e.framesetOk=!0},t.inBody=Object.create(t.base),t.inBody.start_tag_handlers={html:\"startTagHtml\",head:\"startTagMisplaced\",base:\"startTagProcessInHead\",basefont:\"startTagProcessInHead\",bgsound:\"startTagProcessInHead\",link:\"startTagProcessInHead\",meta:\"startTagProcessInHead\",noframes:\"startTagProcessInHead\",script:\"startTagProcessInHead\",style:\"startTagProcessInHead\",title:\"startTagProcessInHead\",body:\"startTagBody\",form:\"startTagForm\",plaintext:\"startTagPlaintext\",a:\"startTagA\",button:\"startTagButton\",xmp:\"startTagXmp\",table:\"startTagTable\",hr:\"startTagHr\",image:\"startTagImage\",input:\"startTagInput\",textarea:\"startTagTextarea\",select:\"startTagSelect\",isindex:\"startTagIsindex\",applet:\"startTagAppletMarqueeObject\",marquee:\"startTagAppletMarqueeObject\",object:\"startTagAppletMarqueeObject\",li:\"startTagListItem\",dd:\"startTagListItem\",dt:\"startTagListItem\",address:\"startTagCloseP\",article:\"startTagCloseP\",aside:\"startTagCloseP\",blockquote:\"startTagCloseP\",center:\"startTagCloseP\",details:\"startTagCloseP\",dir:\"startTagCloseP\",div:\"startTagCloseP\",dl:\"startTagCloseP\",fieldset:\"startTagCloseP\",figcaption:\"startTagCloseP\",figure:\"startTagCloseP\",footer:\"startTagCloseP\",header:\"startTagCloseP\",hgroup:\"startTagCloseP\",main:\"startTagCloseP\",menu:\"startTagCloseP\",nav:\"startTagCloseP\",ol:\"startTagCloseP\",p:\"startTagCloseP\",section:\"startTagCloseP\",summary:\"startTagCloseP\",ul:\"startTagCloseP\",listing:\"startTagPreListing\",pre:\"startTagPreListing\",b:\"startTagFormatting\",big:\"startTagFormatting\",code:\"startTagFormatting\",em:\"startTagFormatting\",font:\"startTagFormatting\",i:\"startTagFormatting\",s:\"startTagFormatting\",small:\"startTagFormatting\",strike:\"startTagFormatting\",strong:\"startTagFormatting\",tt:\"startTagFormatting\",u:\"startTagFormatting\",nobr:\"startTagNobr\",area:\"startTagVoidFormatting\",br:\"startTagVoidFormatting\",embed:\"startTagVoidFormatting\",img:\"startTagVoidFormatting\",keygen:\"startTagVoidFormatting\",wbr:\"startTagVoidFormatting\",param:\"startTagParamSourceTrack\",source:\"startTagParamSourceTrack\",track:\"startTagParamSourceTrack\",iframe:\"startTagIFrame\",noembed:\"startTagRawText\",noscript:\"startTagRawText\",h1:\"startTagHeading\",h2:\"startTagHeading\",h3:\"startTagHeading\",h4:\"startTagHeading\",h5:\"startTagHeading\",h6:\"startTagHeading\",caption:\"startTagMisplaced\",col:\"startTagMisplaced\",colgroup:\"startTagMisplaced\",frame:\"startTagMisplaced\",frameset:\"startTagFrameset\",tbody:\"startTagMisplaced\",td:\"startTagMisplaced\",tfoot:\"startTagMisplaced\",th:\"startTagMisplaced\",thead:\"startTagMisplaced\",tr:\"startTagMisplaced\",option:\"startTagOptionOptgroup\",optgroup:\"startTagOptionOptgroup\",math:\"startTagMath\",svg:\"startTagSVG\",rt:\"startTagRpRt\",rp:\"startTagRpRt\",\"-default\":\"startTagOther\"},t.inBody.end_tag_handlers={p:\"endTagP\",body:\"endTagBody\",html:\"endTagHtml\",address:\"endTagBlock\",article:\"endTagBlock\",aside:\"endTagBlock\",blockquote:\"endTagBlock\",button:\"endTagBlock\",center:\"endTagBlock\",details:\"endTagBlock\",dir:\"endTagBlock\",div:\"endTagBlock\",dl:\"endTagBlock\",fieldset:\"endTagBlock\",figcaption:\"endTagBlock\",figure:\"endTagBlock\",footer:\"endTagBlock\",header:\"endTagBlock\",hgroup:\"endTagBlock\",listing:\"endTagBlock\",main:\"endTagBlock\",menu:\"endTagBlock\",nav:\"endTagBlock\",ol:\"endTagBlock\",pre:\"endTagBlock\",section:\"endTagBlock\",summary:\"endTagBlock\",ul:\"endTagBlock\",form:\"endTagForm\",applet:\"endTagAppletMarqueeObject\",marquee:\"endTagAppletMarqueeObject\",object:\"endTagAppletMarqueeObject\",dd:\"endTagListItem\",dt:\"endTagListItem\",li:\"endTagListItem\",h1:\"endTagHeading\",h2:\"endTagHeading\",h3:\"endTagHeading\",h4:\"endTagHeading\",h5:\"endTagHeading\",h6:\"endTagHeading\",a:\"endTagFormatting\",b:\"endTagFormatting\",big:\"endTagFormatting\",code:\"endTagFormatting\",em:\"endTagFormatting\",font:\"endTagFormatting\",i:\"endTagFormatting\",nobr:\"endTagFormatting\",s:\"endTagFormatting\",small:\"endTagFormatting\",strike:\"endTagFormatting\",strong:\"endTagFormatting\",tt:\"endTagFormatting\",u:\"endTagFormatting\",br:\"endTagBr\",\"-default\":\"endTagOther\"},t.inBody.processCharacters=function(t){e.shouldSkipLeadingNewline&&(e.shouldSkipLeadingNewline=!1,t.skipAtMostOneLeadingNewline()),e.reconstructActiveFormattingElements();var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\"});if(!n)return;e.insertText(n),e.framesetOk&&!d(n)&&(e.framesetOk=!1)},t.inBody.startTagHtml=function(t,n){e.parseError(\"non-html-root\"),e.addAttributesToElement(e.openElements.rootNode,n)},t.inBody.startTagProcessInHead=function(e,n){t.inHead.processStartTag(e,n)},t.inBody.startTagBody=function(t,n){e.parseError(\"unexpected-start-tag\",{name:\"body\"}),e.openElements.length==1||e.openElements.item(1).localName!=\"body\"?r.ok(e.context):(e.framesetOk=!1,e.addAttributesToElement(e.openElements.bodyElement,n))},t.inBody.startTagFrameset=function(t,n){e.parseError(\"unexpected-start-tag\",{name:\"frameset\"});if(e.openElements.length==1||e.openElements.item(1).localName!=\"body\")r.ok(e.context);else if(e.framesetOk){e.detachFromParent(e.openElements.bodyElement);while(e.openElements.length>1)e.openElements.pop();e.insertElement(t,n),e.setInsertionMode(\"inFrameset\")}},t.inBody.startTagCloseP=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n)},t.inBody.startTagPreListing=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.framesetOk=!1,e.shouldSkipLeadingNewline=!0},t.inBody.startTagForm=function(t,n){e.form?e.parseError(\"unexpected-start-tag\",{name:t}):(e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.form=e.currentStackItem())},t.inBody.startTagRpRt=function(t,n){e.openElements.inScope(\"ruby\")&&(e.generateImpliedEndTags(),e.currentStackItem().localName!=\"ruby\"&&e.parseError(\"unexpected-start-tag\",{name:t})),e.insertElement(t,n)},t.inBody.startTagListItem=function(t,n){var r={li:[\"li\"],dd:[\"dd\",\"dt\"],dt:[\"dd\",\"dt\"]},i=r[t],s=e.openElements;for(var o=s.length-1;o>=0;o--){var u=s.item(o);if(i.indexOf(u.localName)!=-1){e.insertionMode.processEndTag(u.localName);break}if(u.isSpecial()&&u.localName!==\"p\"&&u.localName!==\"address\"&&u.localName!==\"div\")break}e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.framesetOk=!1},t.inBody.startTagPlaintext=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.tokenizer.setState(u.PLAINTEXT)},t.inBody.startTagHeading=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.currentStackItem().isNumberedHeader()&&(e.parseError(\"unexpected-start-tag\",{name:t}),e.popElement()),e.insertElement(t,n)},t.inBody.startTagA=function(t,n){var r=e.elementInActiveFormattingElements(\"a\");r&&(e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"a\",endName:\"a\"}),e.adoptionAgencyEndTag(\"a\"),e.openElements.contains(r)&&e.openElements.remove(r),e.removeElementFromActiveFormattingElements(r)),e.reconstructActiveFormattingElements(),e.insertFormattingElement(t,n)},t.inBody.startTagFormatting=function(t,n){e.reconstructActiveFormattingElements(),e.insertFormattingElement(t,n)},t.inBody.startTagNobr=function(t,n){e.reconstructActiveFormattingElements(),e.openElements.inScope(\"nobr\")&&(e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"nobr\",endName:\"nobr\"}),this.processEndTag(\"nobr\"),e.reconstructActiveFormattingElements()),e.insertFormattingElement(t,n)},t.inBody.startTagButton=function(t,n){e.openElements.inScope(\"button\")?(e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"button\",endName:\"button\"}),this.processEndTag(\"button\"),e.insertionMode.processStartTag(t,n)):(e.framesetOk=!1,e.reconstructActiveFormattingElements(),e.insertElement(t,n))},t.inBody.startTagAppletMarqueeObject=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n),e.activeFormattingElements.push(l),e.framesetOk=!1},t.inBody.endTagAppletMarqueeObject=function(t){e.openElements.inScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.popUntilPopped(t),e.clearActiveFormattingElements()):e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.startTagXmp=function(t,n){e.openElements.inButtonScope(\"p\")&&this.processEndTag(\"p\"),e.reconstructActiveFormattingElements(),e.processGenericRawTextStartTag(t,n),e.framesetOk=!1},t.inBody.startTagTable=function(t,n){e.compatMode!==\"quirks\"&&e.openElements.inButtonScope(\"p\")&&this.processEndTag(\"p\"),e.insertElement(t,n),e.setInsertionMode(\"inTable\"),e.framesetOk=!1},t.inBody.startTagVoidFormatting=function(t,n){e.reconstructActiveFormattingElements(),e.insertSelfClosingElement(t,n),e.framesetOk=!1},t.inBody.startTagParamSourceTrack=function(t,n){e.insertSelfClosingElement(t,n)},t.inBody.startTagHr=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertSelfClosingElement(t,n),e.framesetOk=!1},t.inBody.startTagImage=function(t,n){e.parseError(\"unexpected-start-tag-treated-as\",{originalName:\"image\",newName:\"img\"}),this.processStartTag(\"img\",n)},t.inBody.startTagInput=function(t,n){var r=e.framesetOk;this.startTagVoidFormatting(t,n);for(var i in n)if(n[i].nodeName==\"type\"){n[i].nodeValue.toLowerCase()==\"hidden\"&&(e.framesetOk=r);break}},t.inBody.startTagIsindex=function(t,n){e.parseError(\"deprecated-tag\",{name:\"isindex\"}),e.selfClosingFlagAcknowledged=!0;if(e.form)return;var r=[],i=[],s=\"This is a searchable index. Enter search keywords: \";for(var o in n)switch(n[o].nodeName){case\"action\":r.push({nodeName:\"action\",nodeValue:n[o].nodeValue});break;case\"prompt\":s=n[o].nodeValue;break;case\"name\":break;default:i.push({nodeName:n[o].nodeName,nodeValue:n[o].nodeValue})}i.push({nodeName:\"name\",nodeValue:\"isindex\"}),this.processStartTag(\"form\",r),this.processStartTag(\"hr\"),this.processStartTag(\"label\"),this.processCharacters(new m(s)),this.processStartTag(\"input\",i),this.processEndTag(\"label\"),this.processStartTag(\"hr\"),this.processEndTag(\"form\")},t.inBody.startTagTextarea=function(t,n){e.insertElement(t,n),e.tokenizer.setState(u.RCDATA),e.originalInsertionMode=e.insertionModeName,e.shouldSkipLeadingNewline=!0,e.framesetOk=!1,e.setInsertionMode(\"text\")},t.inBody.startTagIFrame=function(t,n){e.framesetOk=!1,this.startTagRawText(t,n)},t.inBody.startTagRawText=function(t,n){e.processGenericRawTextStartTag(t,n)},t.inBody.startTagSelect=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n),e.framesetOk=!1;var r=e.insertionModeName;r==\"inTable\"||r==\"inCaption\"||r==\"inColumnGroup\"||r==\"inTableBody\"||r==\"inRow\"||r==\"inCell\"?e.setInsertionMode(\"inSelectInTable\"):e.setInsertionMode(\"inSelect\")},t.inBody.startTagMisplaced=function(t,n){e.parseError(\"unexpected-start-tag-ignored\",{name:t})},t.inBody.endTagMisplaced=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.endTagBr=function(t){e.parseError(\"unexpected-end-tag-treated-as\",{originalName:\"br\",newName:\"br element\"}),e.reconstructActiveFormattingElements(),e.insertElement(t,[]),e.popElement()},t.inBody.startTagOptionOptgroup=function(t,n){e.currentStackItem().localName==\"option\"&&e.popElement(),e.reconstructActiveFormattingElements(),e.insertElement(t,n)},t.inBody.startTagOther=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n)},t.inBody.endTagOther=function(t){var n;for(var r=e.openElements.length-1;r>0;r--){n=e.openElements.item(r);if(n.localName==t){e.generateImpliedEndTags(t),e.currentStackItem().localName!=t&&e.parseError(\"unexpected-end-tag\",{name:t}),e.openElements.remove_openElements_until(function(e){return e===n});break}if(n.isSpecial()){e.parseError(\"unexpected-end-tag\",{name:t});break}}},t.inBody.startTagMath=function(t,n,r){e.reconstructActiveFormattingElements(),n=e.adjustMathMLAttributes(n),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,\"http://www.w3.org/1998/Math/MathML\",r)},t.inBody.startTagSVG=function(t,n,r){e.reconstructActiveFormattingElements(),n=e.adjustSVGAttributes(n),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,\"http://www.w3.org/2000/svg\",r)},t.inBody.endTagP=function(t){e.openElements.inButtonScope(\"p\")?(e.generateImpliedEndTags(\"p\"),e.currentStackItem().localName!=\"p\"&&e.parseError(\"unexpected-implied-end-tag\",{name:\"p\"}),e.openElements.popUntilPopped(t)):(e.parseError(\"unexpected-end-tag\",{name:\"p\"}),this.startTagCloseP(\"p\",[]),this.endTagP(\"p\"))},t.inBody.endTagBody=function(t){if(!e.openElements.inScope(\"body\")){e.parseError(\"unexpected-end-tag\",{name:t});return}e.currentStackItem().localName!=\"body\"&&e.parseError(\"expected-one-end-tag-but-got-another\",{expectedName:e.currentStackItem().localName,gotName:t}),e.setInsertionMode(\"afterBody\")},t.inBody.endTagHtml=function(t){if(!e.openElements.inScope(\"body\")){e.parseError(\"unexpected-end-tag\",{name:t});return}e.currentStackItem().localName!=\"body\"&&e.parseError(\"expected-one-end-tag-but-got-another\",{expectedName:e.currentStackItem().localName,gotName:t}),e.setInsertionMode(\"afterBody\"),e.insertionMode.processEndTag(t)},t.inBody.endTagBlock=function(t){e.openElements.inScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.popUntilPopped(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.endTagForm=function(t){var n=e.form;e.form=null,!n||!e.openElements.inScope(t)?e.parseError(\"unexpected-end-tag\",{name:t}):(e.generateImpliedEndTags(),e.currentStackItem()!=n&&e.parseError(\"end-tag-too-early-ignored\",{name:\"form\"}),e.openElements.remove(n))},t.inBody.endTagListItem=function(t){e.openElements.inListItemScope(t)?(e.generateImpliedEndTags(t),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.popUntilPopped(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.endTagHeading=function(t){if(!e.openElements.hasNumberedHeaderElementInScope()){e.parseError(\"unexpected-end-tag\",{name:t});return}e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.remove_openElements_until(function(e){return e.isNumberedHeader()})},t.inBody.endTagFormatting=function(t,n){e.adoptionAgencyEndTag(t)||this.endTagOther(t,n)},t.inCaption=Object.create(t.base),t.inCaption.start_tag_handlers={html:\"startTagHtml\",caption:\"startTagTableElement\",col:\"startTagTableElement\",colgroup:\"startTagTableElement\",tbody:\"startTagTableElement\",td:\"startTagTableElement\",tfoot:\"startTagTableElement\",thead:\"startTagTableElement\",tr:\"startTagTableElement\",\"-default\":\"startTagOther\"},t.inCaption.end_tag_handlers={caption:\"endTagCaption\",table:\"endTagTable\",body:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",tbody:\"endTagIgnore\",td:\"endTagIgnore\",tfood:\"endTagIgnore\",thead:\"endTagIgnore\",tr:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inCaption.processCharacters=function(e){t.inBody.processCharacters(e)},t.inCaption.startTagTableElement=function(t,n){e.parseError(\"unexpected-end-tag\",{name:t});var r=!e.openElements.inTableScope(\"caption\");e.insertionMode.processEndTag(\"caption\"),r||e.insertionMode.processStartTag(t,n)},t.inCaption.startTagOther=function(e,n,r){t.inBody.processStartTag(e,n,r)},t.inCaption.endTagCaption=function(t){e.openElements.inTableScope(\"caption\")?(e.generateImpliedEndTags(),e.currentStackItem().localName!=\"caption\"&&e.parseError(\"expected-one-end-tag-but-got-another\",{gotName:\"caption\",expectedName:e.currentStackItem().localName}),e.openElements.popUntilPopped(\"caption\"),e.clearActiveFormattingElements(),e.setInsertionMode(\"inTable\")):(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t}))},t.inCaption.endTagTable=function(t){e.parseError(\"unexpected-end-table-in-caption\");var n=!e.openElements.inTableScope(\"caption\");e.insertionMode.processEndTag(\"caption\"),n||e.insertionMode.processEndTag(t)},t.inCaption.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inCaption.endTagOther=function(e){t.inBody.processEndTag(e)},t.inCell=Object.create(t.base),t.inCell.start_tag_handlers={html:\"startTagHtml\",caption:\"startTagTableOther\",col:\"startTagTableOther\",colgroup:\"startTagTableOther\",tbody:\"startTagTableOther\",td:\"startTagTableOther\",tfoot:\"startTagTableOther\",th:\"startTagTableOther\",thead:\"startTagTableOther\",tr:\"startTagTableOther\",\"-default\":\"startTagOther\"},t.inCell.end_tag_handlers={td:\"endTagTableCell\",th:\"endTagTableCell\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",table:\"endTagImply\",tbody:\"endTagImply\",tfoot:\"endTagImply\",thead:\"endTagImply\",tr:\"endTagImply\",\"-default\":\"endTagOther\"},t.inCell.processCharacters=function(e){t.inBody.processCharacters(e)},t.inCell.startTagTableOther=function(t,n,r){e.openElements.inTableScope(\"td\")||e.openElements.inTableScope(\"th\")?(this.closeCell(),e.insertionMode.processStartTag(t,n,r)):e.parseError(\"unexpected-start-tag\",{name:t})},t.inCell.startTagOther=function(e,n,r){t.inBody.processStartTag(e,n,r)},t.inCell.endTagTableCell=function(t){e.openElements.inTableScope(t)?(e.generateImpliedEndTags(t),e.currentStackItem().localName!=t.toLowerCase()?(e.parseError(\"unexpected-cell-end-tag\",{name:t}),e.openElements.popUntilPopped(t)):e.popElement(),e.clearActiveFormattingElements(),e.setInsertionMode(\"inRow\")):e.parseError(\"unexpected-end-tag\",{name:t})},t.inCell.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inCell.endTagImply=function(t){e.openElements.inTableScope(t)?(this.closeCell(),e.insertionMode.processEndTag(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inCell.endTagOther=function(e){t.inBody.processEndTag(e)},t.inCell.closeCell=function(){e.openElements.inTableScope(\"td\")?this.endTagTableCell(\"td\"):e.openElements.inTableScope(\"th\")&&this.endTagTableCell(\"th\")},t.inColumnGroup=Object.create(t.base),t.inColumnGroup.start_tag_handlers={html:\"startTagHtml\",col:\"startTagCol\",\"-default\":\"startTagOther\"},t.inColumnGroup.end_tag_handlers={colgroup:\"endTagColgroup\",col:\"endTagCol\",\"-default\":\"endTagOther\"},t.inColumnGroup.ignoreEndTagColgroup=function(){return e.currentStackItem().localName==\"html\"},t.inColumnGroup.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;var r=this.ignoreEndTagColgroup();this.endTagColgroup(\"colgroup\"),r||e.insertionMode.processCharacters(t)},t.inColumnGroup.startTagCol=function(t,n){e.insertSelfClosingElement(t,n)},t.inColumnGroup.startTagOther=function(t,n,r){var i=this.ignoreEndTagColgroup();this.endTagColgroup(\"colgroup\"),i||e.insertionMode.processStartTag(t,n,r)},t.inColumnGroup.endTagColgroup=function(t){this.ignoreEndTagColgroup()?(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t})):(e.popElement(),e.setInsertionMode(\"inTable\"))},t.inColumnGroup.endTagCol=function(t){e.parseError(\"no-end-tag\",{name:\"col\"})},t.inColumnGroup.endTagOther=function(t){var n=this.ignoreEndTagColgroup();this.endTagColgroup(\"colgroup\"),n||e.insertionMode.processEndTag(t)},t.inForeignContent=Object.create(t.base),t.inForeignContent.processStartTag=function(t,n,r){if([\"b\",\"big\",\"blockquote\",\"body\",\"br\",\"center\",\"code\",\"dd\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"hr\",\"i\",\"img\",\"li\",\"listing\",\"menu\",\"meta\",\"nobr\",\"ol\",\"p\",\"pre\",\"ruby\",\"s\",\"small\",\"span\",\"strong\",\"strike\",\"sub\",\"sup\",\"table\",\"tt\",\"u\",\"ul\",\"var\"].indexOf(t)!=-1||t==\"font\"&&n.some(function(e){return[\"color\",\"face\",\"size\"].indexOf(e.nodeName)>=0})){e.parseError(\"unexpected-html-element-in-foreign-content\",{name:t});while(e.currentStackItem().isForeign()&&!e.currentStackItem().isHtmlIntegrationPoint()&&!e.currentStackItem().isMathMLTextIntegrationPoint())e.openElements.pop();e.insertionMode.processStartTag(t,n,r);return}e.currentStackItem().namespaceURI==\"http://www.w3.org/1998/Math/MathML\"&&(n=e.adjustMathMLAttributes(n)),e.currentStackItem().namespaceURI==\"http://www.w3.org/2000/svg\"&&(t=e.adjustSVGTagNameCase(t),n=e.adjustSVGAttributes(n)),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,e.currentStackItem().namespaceURI,r)},t.inForeignContent.processEndTag=function(t){var n=e.currentStackItem(),r=e.openElements.length-1;n.localName.toLowerCase()!=t&&e.parseError(\"unexpected-end-tag\",{name:t});for(;;){if(r===0)break;if(n.localName.toLowerCase()==t){while(e.openElements.pop()!=n);break}r-=1,n=e.openElements.item(r);if(n.isForeign())continue;e.insertionMode.processEndTag(t);break}},t.inForeignContent.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\\ufffd\"}),e.framesetOk&&!d(n)&&(e.framesetOk=!1),e.insertText(n)},t.inHeadNoscript=Object.create(t.base),t.inHeadNoscript.start_tag_handlers={html:\"startTagHtml\",basefont:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",bgsound:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",link:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",meta:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",noframes:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",style:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",head:\"startTagHeadNoscript\",noscript:\"startTagHeadNoscript\",\"-default\":\"startTagOther\"},t.inHeadNoscript.end_tag_handlers={noscript:\"endTagNoscript\",br:\"endTagBr\",\"-default\":\"endTagOther\"},t.inHeadNoscript.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;e.parseError(\"unexpected-char-in-frameset\"),this.anythingElse(),e.insertionMode.processCharacters(t)},t.inHeadNoscript.processComment=function(e){t.inHead.processComment(e)},t.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle=function(e,n){t.inHead.processStartTag(e,n)},t.inHeadNoscript.startTagHeadNoscript=function(t,n){e.parseError(\"unexpected-start-tag-in-frameset\",{name:t})},t.inHeadNoscript.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-in-frameset\",{name:t}),this.anythingElse(),e.insertionMode.processStartTag(t,n)},t.inHeadNoscript.endTagBr=function(t,n){e.parseError(\"unexpected-end-tag-in-frameset\",{name:t}),this.anythingElse(),e.insertionMode.processEndTag(t,n)},t.inHeadNoscript.endTagNoscript=function(t,n){e.popElement(),e.setInsertionMode(\"inHead\")},t.inHeadNoscript.endTagOther=function(t,n){e.parseError(\"unexpected-end-tag-in-frameset\",{name:t})},t.inHeadNoscript.anythingElse=function(){e.popElement(),e.setInsertionMode(\"inHead\")},t.inFrameset=Object.create(t.base),t.inFrameset.start_tag_handlers={html:\"startTagHtml\",frameset:\"startTagFrameset\",frame:\"startTagFrame\",noframes:\"startTagNoframes\",\"-default\":\"startTagOther\"},t.inFrameset.end_tag_handlers={frameset:\"endTagFrameset\",noframes:\"endTagNoframes\",\"-default\":\"endTagOther\"},t.inFrameset.processCharacters=function(t){e.parseError(\"unexpected-char-in-frameset\")},t.inFrameset.startTagFrameset=function(t,n){e.insertElement(t,n)},t.inFrameset.startTagFrame=function(t,n){e.insertSelfClosingElement(t,n)},t.inFrameset.startTagNoframes=function(e,n){t.inBody.processStartTag(e,n)},t.inFrameset.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-in-frameset\",{name:t})},t.inFrameset.endTagFrameset=function(t,n){e.currentStackItem().localName==\"html\"?e.parseError(\"unexpected-frameset-in-frameset-innerhtml\"):e.popElement(),!e.context&&e.currentStackItem().localName!=\"frameset\"&&e.setInsertionMode(\"afterFrameset\")},t.inFrameset.endTagNoframes=function(e){t.inBody.processEndTag(e)},t.inFrameset.endTagOther=function(t){e.parseError(\"unexpected-end-tag-in-frameset\",{name:t})},t.inTable=Object.create(t.base),t.inTable.start_tag_handlers={html:\"startTagHtml\",caption:\"startTagCaption\",colgroup:\"startTagColgroup\",col:\"startTagCol\",table:\"startTagTable\",tbody:\"startTagRowGroup\",tfoot:\"startTagRowGroup\",thead:\"startTagRowGroup\",td:\"startTagImplyTbody\",th:\"startTagImplyTbody\",tr:\"startTagImplyTbody\",style:\"startTagStyleScript\",script:\"startTagStyleScript\",input:\"startTagInput\",form:\"startTagForm\",\"-default\":\"startTagOther\"},t.inTable.end_tag_handlers={table:\"endTagTable\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",tbody:\"endTagIgnore\",td:\"endTagIgnore\",tfoot:\"endTagIgnore\",th:\"endTagIgnore\",thead:\"endTagIgnore\",tr:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inTable.processCharacters=function(n){if(e.currentStackItem().isFosterParenting()){var r=e.insertionModeName;e.setInsertionMode(\"inTableText\"),e.originalInsertionMode=r,e.insertionMode.processCharacters(n)}else e.redirectAttachToFosterParent=!0,t.inBody.processCharacters(n),e.redirectAttachToFosterParent=!1},t.inTable.startTagCaption=function(t,n){e.openElements.popUntilTableScopeMarker(),e.activeFormattingElements.push(l),e.insertElement(t,n),e.setInsertionMode(\"inCaption\")},t.inTable.startTagColgroup=function(t,n){e.openElements.popUntilTableScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inColumnGroup\")},t.inTable.startTagCol=function(t,n){this.startTagColgroup(\"colgroup\",[]),e.insertionMode.processStartTag(t,n)},t.inTable.startTagRowGroup=function(t,n){e.openElements.popUntilTableScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inTableBody\")},t.inTable.startTagImplyTbody=function(t,n){this.startTagRowGroup(\"tbody\",[]),e.insertionMode.processStartTag(t,n)},t.inTable.startTagTable=function(t,n){e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"table\",endName:\"table\"}),e.insertionMode.processEndTag(\"table\"),e.context||e.insertionMode.processStartTag(t,n)},t.inTable.startTagStyleScript=function(e,n){t.inHead.processStartTag(e,n)},t.inTable.startTagInput=function(t,n){for(var r in n)if(n[r].nodeName.toLowerCase()==\"type\"){if(n[r].nodeValue.toLowerCase()==\"hidden\"){e.parseError(\"unexpected-hidden-input-in-table\"),e.insertElement(t,n),e.openElements.pop();return}break}this.startTagOther(t,n)},t.inTable.startTagForm=function(t,n){e.parseError(\"unexpected-form-in-table\"),e.form||(e.insertElement(t,n),e.form=e.currentStackItem(),e.openElements.pop())},t.inTable.startTagOther=function(n,r,i){e.parseError(\"unexpected-start-tag-implies-table-voodoo\",{name:n}),e.redirectAttachToFosterParent=!0,t.inBody.processStartTag(n,r,i),e.redirectAttachToFosterParent=!1},t.inTable.endTagTable=function(t){e.openElements.inTableScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early-named\",{gotName:\"table\",expectedName:e.currentStackItem().localName}),e.openElements.popUntilPopped(\"table\"),e.resetInsertionMode()):(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t}))},t.inTable.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inTable.endTagOther=function(n){e.parseError(\"unexpected-end-tag-implies-table-voodoo\",{name:n}),e.redirectAttachToFosterParent=!0,t.inBody.processEndTag(n),e.redirectAttachToFosterParent=!1},t.inTableText=Object.create(t.base),t.inTableText.flushCharacters=function(){var t=e.pendingTableCharacters.join(\"\");p(t)?e.insertText(t):(e.redirectAttachToFosterParent=!0,e.reconstructActiveFormattingElements(),e.insertText(t),e.framesetOk=!1,e.redirectAttachToFosterParent=!1),e.pendingTableCharacters=[]},t.inTableText.processComment=function(t){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processComment(t)},t.inTableText.processEOF=function(t){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEOF()},t.inTableText.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\"});if(!n)return;e.pendingTableCharacters.push(n)},t.inTableText.processStartTag=function(t,n,r){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processStartTag(t,n,r)},t.inTableText.processEndTag=function(t,n){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEndTag(t,n)},t.inTableBody=Object.create(t.base),t.inTableBody.start_tag_handlers={html:\"startTagHtml\",tr:\"startTagTr\",td:\"startTagTableCell\",th:\"startTagTableCell\",caption:\"startTagTableOther\",col:\"startTagTableOther\",colgroup:\"startTagTableOther\",tbody:\"startTagTableOther\",tfoot:\"startTagTableOther\",thead:\"startTagTableOther\",\"-default\":\"startTagOther\"},t.inTableBody.end_tag_handlers={table:\"endTagTable\",tbody:\"endTagTableRowGroup\",tfoot:\"endTagTableRowGroup\",thead:\"endTagTableRowGroup\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",td:\"endTagIgnore\",th:\"endTagIgnore\",tr:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inTableBody.processCharacters=function(e){t.inTable.processCharacters(e)},t.inTableBody.startTagTr=function(t,n){e.openElements.popUntilTableBodyScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inRow\")},t.inTableBody.startTagTableCell=function(t,n){e.parseError(\"unexpected-cell-in-table-body\",{name:t}),this.startTagTr(\"tr\",[]),e.insertionMode.processStartTag(t,n)},t.inTableBody.startTagTableOther=function(t,n){e.openElements.inTableScope(\"tbody\")||e.openElements.inTableScope(\"thead\")||e.openElements.inTableScope(\"tfoot\")?(e.openElements.popUntilTableBodyScopeMarker(),this.endTagTableRowGroup(e.currentStackItem().localName),e.insertionMode.processStartTag(t,n)):e.parseError(\"unexpected-start-tag\",{name:t})},t.inTableBody.startTagOther=function(e,n){t.inTable.processStartTag(e,n)},t.inTableBody.endTagTableRowGroup=function(t){e.openElements.inTableScope(t)?(e.openElements.popUntilTableBodyScopeMarker(),e.popElement(),e.setInsertionMode(\"inTable\")):e.parseError(\"unexpected-end-tag-in-table-body\",{name:t})},t.inTableBody.endTagTable=function(t){e.openElements.inTableScope(\"tbody\")||e.openElements.inTableScope(\"thead\")||e.openElements.inTableScope(\"tfoot\")?(e.openElements.popUntilTableBodyScopeMarker(),this.endTagTableRowGroup(e.currentStackItem().localName),e.insertionMode.processEndTag(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inTableBody.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag-in-table-body\",{name:t})},t.inTableBody.endTagOther=function(e){t.inTable.processEndTag(e)},t.inSelect=Object.create(t.base),t.inSelect.start_tag_handlers={html:\"startTagHtml\",option:\"startTagOption\",optgroup:\"startTagOptgroup\",select:\"startTagSelect\",input:\"startTagInput\",keygen:\"startTagInput\",textarea:\"startTagInput\",script:\"startTagScript\",\"-default\":\"startTagOther\"},t.inSelect.end_tag_handlers={option:\"endTagOption\",optgroup:\"endTagOptgroup\",select:\"endTagSelect\",caption:\"endTagTableElements\",table:\"endTagTableElements\",tbody:\"endTagTableElements\",tfoot:\"endTagTableElements\",thead:\"endTagTableElements\",tr:\"endTagTableElements\",td:\"endTagTableElements\",th:\"endTagTableElements\",\"-default\":\"endTagOther\"},t.inSelect.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\"});if(!n)return;e.insertText(n)},t.inSelect.startTagOption=function(t,n){e.currentStackItem().localName==\"option\"&&e.popElement(),e.insertElement(t,n)},t.inSelect.startTagOptgroup=function(t,n){e.currentStackItem().localName==\"option\"&&e.popElement(),e.currentStackItem().localName==\"optgroup\"&&e.popElement(),e.insertElement(t,n)},t.inSelect.endTagOption=function(t){if(e.currentStackItem().localName!==\"option\"){e.parseError(\"unexpected-end-tag-in-select\",{name:t});return}e.popElement()},t.inSelect.endTagOptgroup=function(t){e.currentStackItem().localName==\"option\"&&e.openElements.item(e.openElements.length-2).localName==\"optgroup\"&&e.popElement(),e.currentStackItem().localName==\"optgroup\"?e.popElement():e.parseError(\"unexpected-end-tag-in-select\",{name:\"optgroup\"})},t.inSelect.startTagSelect=function(t){e.parseError(\"unexpected-select-in-select\"),this.endTagSelect(\"select\")},t.inSelect.endTagSelect=function(t){e.openElements.inTableScope(\"select\")?(e.openElements.popUntilPopped(\"select\"),e.resetInsertionMode()):e.parseError(\"unexpected-end-tag\",{name:t})},t.inSelect.startTagInput=function(t,n){e.parseError(\"unexpected-input-in-select\"),e.openElements.inSelectScope(\"select\")&&(this.endTagSelect(\"select\"),e.insertionMode.processStartTag(t,n))},t.inSelect.startTagScript=function(e,n){t.inHead.processStartTag(e,n)},t.inSelect.endTagTableElements=function(t){e.parseError(\"unexpected-end-tag-in-select\",{name:t}),e.openElements.inTableScope(t)&&(this.endTagSelect(\"select\"),e.insertionMode.processEndTag(t))},t.inSelect.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-in-select\",{name:t})},t.inSelect.endTagOther=function(t){e.parseError(\"unexpected-end-tag-in-select\",{name:t})},t.inSelectInTable=Object.create(t.base),t.inSelectInTable.start_tag_handlers={caption:\"startTagTable\",table:\"startTagTable\",tbody:\"startTagTable\",tfoot:\"startTagTable\",thead:\"startTagTable\",tr:\"startTagTable\",td:\"startTagTable\",th:\"startTagTable\",\"-default\":\"startTagOther\"},t.inSelectInTable.end_tag_handlers={caption:\"endTagTable\",table:\"endTagTable\",tbody:\"endTagTable\",tfoot:\"endTagTable\",thead:\"endTagTable\",tr:\"endTagTable\",td:\"endTagTable\",th:\"endTagTable\",\"-default\":\"endTagOther\"},t.inSelectInTable.processCharacters=function(e){t.inSelect.processCharacters(e)},t.inSelectInTable.startTagTable=function(t,n){e.parseError(\"unexpected-table-element-start-tag-in-select-in-table\",{name:t}),this.endTagOther(\"select\"),e.insertionMode.processStartTag(t,n)},t.inSelectInTable.startTagOther=function(e,n,r){t.inSelect.processStartTag(e,n,r)},t.inSelectInTable.endTagTable=function(t){e.parseError(\"unexpected-table-element-end-tag-in-select-in-table\",{name:t}),e.openElements.inTableScope(t)&&(this.endTagOther(\"select\"),e.insertionMode.processEndTag(t))},t.inSelectInTable.endTagOther=function(e){t.inSelect.processEndTag(e)},t.inRow=Object.create(t.base),t.inRow.start_tag_handlers={html:\"startTagHtml\",td:\"startTagTableCell\",th:\"startTagTableCell\",caption:\"startTagTableOther\",col:\"startTagTableOther\",colgroup:\"startTagTableOther\",tbody:\"startTagTableOther\",tfoot:\"startTagTableOther\",thead:\"startTagTableOther\",tr:\"startTagTableOther\",\"-default\":\"startTagOther\"},t.inRow.end_tag_handlers={tr:\"endTagTr\",table:\"endTagTable\",tbody:\"endTagTableRowGroup\",tfoot:\"endTagTableRowGroup\",thead:\"endTagTableRowGroup\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",td:\"endTagIgnore\",th:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inRow.processCharacters=function(e){t.inTable.processCharacters(e)},t.inRow.startTagTableCell=function(t,n){e.openElements.popUntilTableRowScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inCell\"),e.activeFormattingElements.push(l)},t.inRow.startTagTableOther=function(t,n){var r=this.ignoreEndTagTr();this.endTagTr(\"tr\"),r||e.insertionMode.processStartTag(t,n)},t.inRow.startTagOther=function(e,n,r){t.inTable.processStartTag(e,n,r)},t.inRow.endTagTr=function(t){this.ignoreEndTagTr()?(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t})):(e.openElements.popUntilTableRowScopeMarker(),e.popElement(),e.setInsertionMode(\"inTableBody\"))},t.inRow.endTagTable=function(t){var n=this.ignoreEndTagTr();this.endTagTr(\"tr\"),n||e.insertionMode.processEndTag(t)},t.inRow.endTagTableRowGroup=function(t){e.openElements.inTableScope(t)?(this.endTagTr(\"tr\"),e.insertionMode.processEndTag(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inRow.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag-in-table-row\",{name:t})},t.inRow.endTagOther=function(e){t.inTable.processEndTag(e)},t.inRow.ignoreEndTagTr=function(){return!e.openElements.inTableScope(\"tr\")},t.afterAfterFrameset=Object.create(t.base),t.afterAfterFrameset.start_tag_handlers={html:\"startTagHtml\",noframes:\"startTagNoFrames\",\"-default\":\"startTagOther\"},t.afterAfterFrameset.processEOF=function(){},t.afterAfterFrameset.processComment=function(t){e.insertComment(t,e.document)},t.afterAfterFrameset.processCharacters=function(t){var n=t.takeRemaining(),r=\"\";for(var i=0;i<n.length;i++){var s=n[i];c(s)&&(r+=s)}r&&(e.reconstructActiveFormattingElements(),e.insertText(r)),r.length<n.length&&e.parseError(\"expected-eof-but-got-char\")},t.afterAfterFrameset.startTagNoFrames=function(e,n){t.inHead.processStartTag(e,n)},t.afterAfterFrameset.startTagOther=function(t,n,r){e.parseError(\"expected-eof-but-got-start-tag\",{name:t})},t.afterAfterFrameset.processEndTag=function(t,n){e.parseError(\"expected-eof-but-got-end-tag\",{name:t})},t.text=Object.create(t.base),t.text.start_tag_handlers={\"-default\":\"startTagOther\"},t.text.end_tag_handlers={script:\"endTagScript\",\"-default\":\"endTagOther\"},t.text.processCharacters=function(t){e.shouldSkipLeadingNewline&&(e.shouldSkipLeadingNewline=!1,t.skipAtMostOneLeadingNewline());var n=t.takeRemaining();if(!n)return;e.insertText(n)},t.text.processEOF=function(){e.parseError(\"expected-named-closing-tag-but-got-eof\",{name:e.currentStackItem().localName}),e.openElements.pop(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEOF()},t.text.startTagOther=function(e){throw\"Tried to process start tag \"+e+\" in RCDATA/RAWTEXT mode\"},t.text.endTagScript=function(t){var n=e.openElements.pop();r.ok(n.localName==\"script\"),e.setInsertionMode(e.originalInsertionMode)},t.text.endTagOther=function(t){e.openElements.pop(),e.setInsertionMode(e.originalInsertionMode)}}function y(e,t){return e.replace(new RegExp(\"{[0-9a-z-]+}\",\"gi\"),function(e){return t[e.slice(1,-1)]||e})}var r=e(\"assert\"),i=e(\"./messages.json\"),s=e(\"./constants\"),o=e(\"events\").EventEmitter,u=e(\"./Tokenizer\").Tokenizer,a=e(\"./ElementStack\").ElementStack,f=e(\"./StackItem\").StackItem,l={};m.prototype.skipAtMostOneLeadingNewline=function(){this.characters[this.current]===\"\\n\"&&this.current++},m.prototype.skipLeadingWhitespace=function(){while(c(this.characters[this.current]))if(++this.current==this.end)return},m.prototype.skipLeadingNonWhitespace=function(){while(!c(this.characters[this.current]))if(++this.current==this.end)return},m.prototype.takeRemaining=function(){return this.characters.substring(this.current)},m.prototype.takeLeadingWhitespace=function(){var e=this.current;return this.skipLeadingWhitespace(),e===this.current?\"\":this.characters.substring(e,this.current-e)},Object.defineProperty(m.prototype,\"length\",{get:function(){return this.end-this.current}}),g.prototype.setInsertionMode=function(e){this.insertionMode=this.insertionModes[e],this.insertionModeName=e},g.prototype.adoptionAgencyEndTag=function(e){function i(e){return e===r}var t=8,n=3,r,s=0;while(s++<t){r=this.elementInActiveFormattingElements(e);if(!r||this.openElements.contains(r)&&!this.openElements.inScope(r.localName))return this.parseError(\"adoption-agency-1.1\",{name:e}),!1;if(!this.openElements.contains(r))return this.parseError(\"adoption-agency-1.2\",{name:e}),this.removeElementFromActiveFormattingElements(r),!0;this.openElements.inScope(r.localName)||this.parseError(\"adoption-agency-4.4\",{name:e}),r!=this.currentStackItem()&&this.parseError(\"adoption-agency-1.3\",{name:e});var o=this.openElements.furthestBlockForFormattingElement(r.node);if(!o)return this.openElements.remove_openElements_until(i),this.removeElementFromActiveFormattingElements(r),!0;var u=this.openElements.elements.indexOf(r),a=this.openElements.item(u-1),l=this.activeFormattingElements.indexOf(r),c=o,h=o,p=this.openElements.elements.indexOf(c),d=0;while(d++<n){p-=1,c=this.openElements.item(p);if(this.activeFormattingElements.indexOf(c)<0){this.openElements.elements.splice(p,1);continue}if(c==r)break;h==o&&(l=this.activeFormattingElements.indexOf(c)+1);var v=this.createElement(c.namespaceURI,c.localName,c.attributes),m=new f(c.namespaceURI,c.localName,c.attributes,v);this.activeFormattingElements[this.activeFormattingElements.indexOf(c)]=m,this.openElements.elements[this.openElements.elements.indexOf(c)]=m,c=m,this.detachFromParent(h.node),this.attachNode(h.node,c.node),h=c}this.detachFromParent(h.node),a.isFosterParenting()?this.insertIntoFosterParent(h.node):this.attachNode(h.node,a.node);var v=this.createElement(\"http://www.w3.org/1999/xhtml\",r.localName,r.attributes),g=new f(r.namespaceURI,r.localName,r.attributes,v);this.reparentChildren(o.node,v),this.attachNode(v,o.node),this.removeElementFromActiveFormattingElements(r),this.activeFormattingElements.splice(Math.min(l,this.activeFormattingElements.length),0,g),this.openElements.remove(r),this.openElements.elements.splice(this.openElements.elements.indexOf(o)+1,0,g)}return!0},g.prototype.start=function(){throw\"Not mplemented\"},g.prototype.startTokenization=function(e){this.tokenizer=e,this.compatMode=\"no quirks\",this.originalInsertionMode=\"initial\",this.framesetOk=!0,this.openElements=new a,this.activeFormattingElements=[],this.start();if(this.context){switch(this.context){case\"title\":case\"textarea\":this.tokenizer.setState(u.RCDATA);break;case\"style\":case\"xmp\":case\"iframe\":case\"noembed\":case\"noframes\":this.tokenizer.setState(u.RAWTEXT);break;case\"script\":this.tokenizer.setState(u.SCRIPT_DATA);break;case\"noscript\":this.scriptingEnabled&&this.tokenizer.setState(u.RAWTEXT);break;case\"plaintext\":this.tokenizer.setState(u.PLAINTEXT)}this.insertHtmlElement(),this.resetInsertionMode()}else this.setInsertionMode(\"initial\")},g.prototype.processToken=function(e){this.selfClosingFlagAcknowledged=!1;var t=this.openElements.top||null,n;!t||!t.isForeign()||t.isMathMLTextIntegrationPoint()&&(e.type==\"StartTag\"&&!(e.name in{mglyph:0,malignmark:0})||e.type===\"Characters\")||t.namespaceURI==\"http://www.w3.org/1998/Math/MathML\"&&t.localName==\"annotation-xml\"&&e.type==\"StartTag\"&&e.name==\"svg\"||t.isHtmlIntegrationPoint()&&e.type in{StartTag:0,Characters:0}||e.type==\"EOF\"?n=this.insertionMode:n=this.insertionModes.inForeignContent;switch(e.type){case\"Characters\":var r=new m(e.data);n.processCharacters(r);break;case\"Comment\":n.processComment(e.data);break;case\"StartTag\":n.processStartTag(e.name,e.data,e.selfClosing);break;case\"EndTag\":n.processEndTag(e.name);break;case\"Doctype\":n.processDoctype(e.name,e.publicId,e.systemId,e.forceQuirks);break;case\"EOF\":n.processEOF()}},g.prototype.isCdataSectionAllowed=function(){return this.openElements.length>0&&this.currentStackItem().isForeign()},g.prototype.isSelfClosingFlagAcknowledged=function(){return this.selfClosingFlagAcknowledged},g.prototype.createElement=function(e,t,n){throw new Error(\"Not implemented\")},g.prototype.attachNode=function(e,t){throw new Error(\"Not implemented\")},g.prototype.attachNodeToFosterParent=function(e,t,n){throw new Error(\"Not implemented\")},g.prototype.detachFromParent=function(e){throw new Error(\"Not implemented\")},g.prototype.addAttributesToElement=function(e,t){throw new Error(\"Not implemented\")},g.prototype.insertHtmlElement=function(e){var t=this.createElement(\"http://www.w3.org/1999/xhtml\",\"html\",e);return this.attachNode(t,this.document),this.openElements.pushHtmlElement(new f(\"http://www.w3.org/1999/xhtml\",\"html\",e,t)),t},g.prototype.insertHeadElement=function(e){var t=this.createElement(\"http://www.w3.org/1999/xhtml\",\"head\",e);return this.head=new f(\"http://www.w3.org/1999/xhtml\",\"head\",e,t),this.attachNode(t,this.openElements.top.node),this.openElements.pushHeadElement(this.head),t},g.prototype.insertBodyElement=function(e){var t=this.createElement(\"http://www.w3.org/1999/xhtml\",\"body\",e);return this.attachNode(t,this.openElements.top.node),this.openElements.pushBodyElement(new f(\"http://www.w3.org/1999/xhtml\",\"body\",e,t)),t},g.prototype.insertIntoFosterParent=function(e){var t=this.openElements.findIndex(\"table\"),n=this.openElements.item(t).node;if(t===0)return this.attachNode(e,n);this.attachNodeToFosterParent(e,n,this.openElements.item(t-1).node)},g.prototype.insertElement=function(e,t,n,r){n||(n=\"http://www.w3.org/1999/xhtml\");var i=this.createElement(n,e,t);this.shouldFosterParent()?this.insertIntoFosterParent(i):this.attachNode(i,this.openElements.top.node),r||this.openElements.push(new f(n,e,t,i))},g.prototype.insertFormattingElement=function(e,t){this.insertElement(e,t,\"http://www.w3.org/1999/xhtml\"),this.appendElementToActiveFormattingElements(this.currentStackItem())},g.prototype.insertSelfClosingElement=function(e,t){this.selfClosingFlagAcknowledged=!0,this.insertElement(e,t,\"http://www.w3.org/1999/xhtml\",!0)},g.prototype.insertForeignElement=function(e,t,n,r){r&&(this.selfClosingFlagAcknowledged=!0),this.insertElement(e,t,n,r)},g.prototype.insertComment=function(e,t){throw new Error(\"Not implemented\")},g.prototype.insertDoctype=function(e,t,n){throw new Error(\"Not implemented\")},g.prototype.insertText=function(e){throw new Error(\"Not implemented\")},g.prototype.currentStackItem=function(){return this.openElements.top},g.prototype.popElement=function(){return this.openElements.pop()},g.prototype.shouldFosterParent=function(){return this.redirectAttachToFosterParent&&this.currentStackItem().isFosterParenting()},g.prototype.generateImpliedEndTags=function(e){var t=this.openElements.top.localName;[\"dd\",\"dt\",\"li\",\"option\",\"optgroup\",\"p\",\"rp\",\"rt\"].indexOf(t)!=-1&&t!=e&&(this.popElement(),this.generateImpliedEndTags(e))},g.prototype.reconstructActiveFormattingElements=function(){if(this.activeFormattingElements.length===0)return;var e=this.activeFormattingElements.length-1,t=this.activeFormattingElements[e];if(t==l||this.openElements.contains(t))return;while(t!=l&&!this.openElements.contains(t)){e-=1,t=this.activeFormattingElements[e];if(!t)break}for(;;){e+=1,t=this.activeFormattingElements[e],this.insertElement(t.localName,t.attributes);var n=this.currentStackItem();this.activeFormattingElements[e]=n;if(n==this.activeFormattingElements[this.activeFormattingElements.length-1])break}},g.prototype.ensureNoahsArkCondition=function(e){var t=3;if(this.activeFormattingElements.length<t)return;var n=[],r=e.attributes.length;for(var i=this.activeFormattingElements.length-1;i>=0;i--){var s=this.activeFormattingElements[i];if(s===l)break;if(e.localName!==s.localName||e.namespaceURI!==s.namespaceURI)continue;if(s.attributes.length!=r)continue;n.push(s)}if(n.length<t)return;var o=[],u=e.attributes;for(var i=0;i<u.length;i++){var a=u[i];for(var f=0;f<n.length;f++){var s=n[f],c=v(s,a.nodeName);c&&c.nodeValue===a.nodeValue&&o.push(s)}if(o.length<t)return;n=o,o=[]}for(var i=t-1;i<n.length;i++)this.removeElementFromActiveFormattingElements(n[i])},g.prototype.appendElementToActiveFormattingElements=function(e){this.ensureNoahsArkCondition(e),this.activeFormattingElements.push(e)},g.prototype.removeElementFromActiveFormattingElements=function(e){var t=this.activeFormattingElements.indexOf(e);t>=0&&this.activeFormattingElements.splice(t,1)},g.prototype.elementInActiveFormattingElements=function(e){var t=this.activeFormattingElements;for(var n=t.length-1;n>=0;n--){if(t[n]==l)break;if(t[n].localName==e)return t[n]}return!1},g.prototype.clearActiveFormattingElements=function(){while(this.activeFormattingElements.length!==0&&this.activeFormattingElements.pop()!=l);},g.prototype.reparentChildren=function(e,t){throw new Error(\"Not implemented\")},g.prototype.setFragmentContext=function(e){this.context=e},g.prototype.parseError=function(e,t){if(!this.errorHandler)return;var n=y(i[e],t);this.errorHandler.error(n,this.tokenizer._inputStream.location(),e)},g.prototype.resetInsertionMode=function(){var e=!1,t=null;for(var n=this.openElements.length-1;n>=0;n--){t=this.openElements.item(n),n===0&&(r.ok(this.context),e=!0,t=new f(\"http://www.w3.org/1999/xhtml\",this.context,[],null));if(t.namespaceURI===\"http://www.w3.org/1999/xhtml\"){if(t.localName===\"select\")return this.setInsertionMode(\"inSelect\");if(t.localName===\"td\"||t.localName===\"th\")return this.setInsertionMode(\"inCell\");if(t.localName===\"tr\")return this.setInsertionMode(\"inRow\");if(t.localName===\"tbody\"||t.localName===\"thead\"||t.localName===\"tfoot\")return this.setInsertionMode(\"inTableBody\");if(t.localName===\"caption\")return this.setInsertionMode(\"inCaption\");if(t.localName===\"colgroup\")return this.setInsertionMode(\"inColumnGroup\");if(t.localName===\"table\")return this.setInsertionMode(\"inTable\");if(t.localName===\"head\"&&!e)return this.setInsertionMode(\"inHead\");if(t.localName===\"body\")return this.setInsertionMode(\"inBody\");if(t.localName===\"frameset\")return this.setInsertionMode(\"inFrameset\");if(t.localName===\"html\")return this.openElements.headElement?this.setInsertionMode(\"afterHead\"):this.setInsertionMode(\"beforeHead\")}if(e)return this.setInsertionMode(\"inBody\")}},g.prototype.processGenericRCDATAStartTag=function(e,t){this.insertElement(e,t),this.tokenizer.setState(u.RCDATA),this.originalInsertionMode=this.insertionModeName,this.setInsertionMode(\"text\")},g.prototype.processGenericRawTextStartTag=function(e,t){this.insertElement(e,t),this.tokenizer.setState(u.RAWTEXT),this.originalInsertionMode=this.insertionModeName,this.setInsertionMode(\"text\")},g.prototype.adjustMathMLAttributes=function(e){return e.forEach(function(e){e.namespaceURI=\"http://www.w3.org/1998/Math/MathML\",s.MATHMLAttributeMap[e.nodeName]&&(e.nodeName=s.MATHMLAttributeMap[e.nodeName])}),e},g.prototype.adjustSVGTagNameCase=function(e){return s.SVGTagMap[e]||e},g.prototype.adjustSVGAttributes=function(e){return e.forEach(function(e){e.namespaceURI=\"http://www.w3.org/2000/svg\",s.SVGAttributeMap[e.nodeName]&&(e.nodeName=s.SVGAttributeMap[e.nodeName])}),e},g.prototype.adjustForeignAttributes=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.ForeignAttributeMap[n.nodeName];r&&(n.nodeName=r.localName,n.prefix=r.prefix,n.namespaceURI=r.namespaceURI)}return e},n.TreeBuilder=g},{\"./ElementStack\":1,\"./StackItem\":4,\"./Tokenizer\":5,\"./constants\":7,\"./messages.json\":8,assert:13,events:16}],7:[function(e,t,n){n.SVGTagMap={altglyph:\"altGlyph\",altglyphdef:\"altGlyphDef\",altglyphitem:\"altGlyphItem\",animatecolor:\"animateColor\",animatemotion:\"animateMotion\",animatetransform:\"animateTransform\",clippath:\"clipPath\",feblend:\"feBlend\",fecolormatrix:\"feColorMatrix\",fecomponenttransfer:\"feComponentTransfer\",fecomposite:\"feComposite\",feconvolvematrix:\"feConvolveMatrix\",fediffuselighting:\"feDiffuseLighting\",fedisplacementmap:\"feDisplacementMap\",fedistantlight:\"feDistantLight\",feflood:\"feFlood\",fefunca:\"feFuncA\",fefuncb:\"feFuncB\",fefuncg:\"feFuncG\",fefuncr:\"feFuncR\",fegaussianblur:\"feGaussianBlur\",feimage:\"feImage\",femerge:\"feMerge\",femergenode:\"feMergeNode\",femorphology:\"feMorphology\",feoffset:\"feOffset\",fepointlight:\"fePointLight\",fespecularlighting:\"feSpecularLighting\",fespotlight:\"feSpotLight\",fetile:\"feTile\",feturbulence:\"feTurbulence\",foreignobject:\"foreignObject\",glyphref:\"glyphRef\",lineargradient:\"linearGradient\",radialgradient:\"radialGradient\",textpath:\"textPath\"},n.MATHMLAttributeMap={definitionurl:\"definitionURL\"},n.SVGAttributeMap={attributename:\"attributeName\",attributetype:\"attributeType\",basefrequency:\"baseFrequency\",baseprofile:\"baseProfile\",calcmode:\"calcMode\",clippathunits:\"clipPathUnits\",contentscripttype:\"contentScriptType\",contentstyletype:\"contentStyleType\",diffuseconstant:\"diffuseConstant\",edgemode:\"edgeMode\",externalresourcesrequired:\"externalResourcesRequired\",filterres:\"filterRes\",filterunits:\"filterUnits\",glyphref:\"glyphRef\",gradienttransform:\"gradientTransform\",gradientunits:\"gradientUnits\",kernelmatrix:\"kernelMatrix\",kernelunitlength:\"kernelUnitLength\",keypoints:\"keyPoints\",keysplines:\"keySplines\",keytimes:\"keyTimes\",lengthadjust:\"lengthAdjust\",limitingconeangle:\"limitingConeAngle\",markerheight:\"markerHeight\",markerunits:\"markerUnits\",markerwidth:\"markerWidth\",maskcontentunits:\"maskContentUnits\",maskunits:\"maskUnits\",numoctaves:\"numOctaves\",pathlength:\"pathLength\",patterncontentunits:\"patternContentUnits\",patterntransform:\"patternTransform\",patternunits:\"patternUnits\",pointsatx:\"pointsAtX\",pointsaty:\"pointsAtY\",pointsatz:\"pointsAtZ\",preservealpha:\"preserveAlpha\",preserveaspectratio:\"preserveAspectRatio\",primitiveunits:\"primitiveUnits\",refx:\"refX\",refy:\"refY\",repeatcount:\"repeatCount\",repeatdur:\"repeatDur\",requiredextensions:\"requiredExtensions\",requiredfeatures:\"requiredFeatures\",specularconstant:\"specularConstant\",specularexponent:\"specularExponent\",spreadmethod:\"spreadMethod\",startoffset:\"startOffset\",stddeviation:\"stdDeviation\",stitchtiles:\"stitchTiles\",surfacescale:\"surfaceScale\",systemlanguage:\"systemLanguage\",tablevalues:\"tableValues\",targetx:\"targetX\",targety:\"targetY\",textlength:\"textLength\",viewbox:\"viewBox\",viewtarget:\"viewTarget\",xchannelselector:\"xChannelSelector\",ychannelselector:\"yChannelSelector\",zoomandpan:\"zoomAndPan\"},n.ForeignAttributeMap={\"xlink:actuate\":{prefix:\"xlink\",localName:\"actuate\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:arcrole\":{prefix:\"xlink\",localName:\"arcrole\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:href\":{prefix:\"xlink\",localName:\"href\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:role\":{prefix:\"xlink\",localName:\"role\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:show\":{prefix:\"xlink\",localName:\"show\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:title\":{prefix:\"xlink\",localName:\"title\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:type\":{prefix:\"xlink\",localName:\"title\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xml:base\":{prefix:\"xml\",localName:\"base\",namespaceURI:\"http://www.w3.org/XML/1998/namespace\"},\"xml:lang\":{prefix:\"xml\",localName:\"lang\",namespaceURI:\"http://www.w3.org/XML/1998/namespace\"},\"xml:space\":{prefix:\"xml\",localName:\"space\",namespaceURI:\"http://www.w3.org/XML/1998/namespace\"},xmlns:{prefix:null,localName:\"xmlns\",namespaceURI:\"http://www.w3.org/2000/xmlns/\"},\"xmlns:xlink\":{prefix:\"xmlns\",localName:\"xlink\",namespaceURI:\"http://www.w3.org/2000/xmlns/\"}}},{}],8:[function(e,t,n){t.exports={\"null-character\":\"Null character in input stream, replaced with U+FFFD.\",\"invalid-codepoint\":\"Invalid codepoint in stream\",\"incorrectly-placed-solidus\":\"Solidus (/) incorrectly placed in tag.\",\"incorrect-cr-newline-entity\":\"Incorrect CR newline entity, replaced with LF.\",\"illegal-windows-1252-entity\":\"Entity used with illegal number (windows-1252 reference).\",\"cant-convert-numeric-entity\":\"Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).\",\"invalid-numeric-entity-replaced\":\"Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.\",\"numeric-entity-without-semicolon\":\"Numeric entity didn't end with ';'.\",\"expected-numeric-entity-but-got-eof\":\"Numeric entity expected. Got end of file instead.\",\"expected-numeric-entity\":\"Numeric entity expected but none found.\",\"named-entity-without-semicolon\":\"Named entity didn't end with ';'.\",\"expected-named-entity\":\"Named entity expected. Got none.\",\"attributes-in-end-tag\":\"End tag contains unexpected attributes.\",\"self-closing-flag-on-end-tag\":\"End tag contains unexpected self-closing flag.\",\"bare-less-than-sign-at-eof\":\"End of file after <.\",\"expected-tag-name-but-got-right-bracket\":\"Expected tag name. Got '>' instead.\",\"expected-tag-name-but-got-question-mark\":\"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)\",\"expected-tag-name\":\"Expected tag name. Got something else instead.\",\"expected-closing-tag-but-got-right-bracket\":\"Expected closing tag. Got '>' instead. Ignoring '</>'.\",\"expected-closing-tag-but-got-eof\":\"Expected closing tag. Unexpected end of file.\",\"expected-closing-tag-but-got-char\":\"Expected closing tag. Unexpected character '{data}' found.\",\"eof-in-tag-name\":\"Unexpected end of file in the tag name.\",\"expected-attribute-name-but-got-eof\":\"Unexpected end of file. Expected attribute name instead.\",\"eof-in-attribute-name\":\"Unexpected end of file in attribute name.\",\"invalid-character-in-attribute-name\":\"Invalid character in attribute name.\",\"duplicate-attribute\":\"Dropped duplicate attribute '{name}' on tag.\",\"expected-end-of-tag-but-got-eof\":\"Unexpected end of file. Expected = or end of tag.\",\"expected-attribute-value-but-got-eof\":\"Unexpected end of file. Expected attribute value.\",\"expected-attribute-value-but-got-right-bracket\":\"Expected attribute value. Got '>' instead.\",\"unexpected-character-in-unquoted-attribute-value\":\"Unexpected character in unquoted attribute\",\"invalid-character-after-attribute-name\":\"Unexpected character after attribute name.\",\"unexpected-character-after-attribute-value\":\"Unexpected character after attribute value.\",\"eof-in-attribute-value-double-quote\":'Unexpected end of file in attribute value (\").',\"eof-in-attribute-value-single-quote\":\"Unexpected end of file in attribute value (').\",\"eof-in-attribute-value-no-quotes\":\"Unexpected end of file in attribute value.\",\"eof-after-attribute-value\":\"Unexpected end of file after attribute value.\",\"unexpected-eof-after-solidus-in-tag\":\"Unexpected end of file in tag. Expected >.\",\"unexpected-character-after-solidus-in-tag\":\"Unexpected character after / in tag. Expected >.\",\"expected-dashes-or-doctype\":\"Expected '--' or 'DOCTYPE'. Not found.\",\"unexpected-bang-after-double-dash-in-comment\":\"Unexpected ! after -- in comment.\",\"incorrect-comment\":\"Incorrect comment.\",\"eof-in-comment\":\"Unexpected end of file in comment.\",\"eof-in-comment-end-dash\":\"Unexpected end of file in comment (-).\",\"unexpected-dash-after-double-dash-in-comment\":\"Unexpected '-' after '--' found in comment.\",\"eof-in-comment-double-dash\":\"Unexpected end of file in comment (--).\",\"eof-in-comment-end-bang-state\":\"Unexpected end of file in comment.\",\"unexpected-char-in-comment\":\"Unexpected character in comment found.\",\"need-space-after-doctype\":\"No space after literal string 'DOCTYPE'.\",\"expected-doctype-name-but-got-right-bracket\":\"Unexpected > character. Expected DOCTYPE name.\",\"expected-doctype-name-but-got-eof\":\"Unexpected end of file. Expected DOCTYPE name.\",\"eof-in-doctype-name\":\"Unexpected end of file in DOCTYPE name.\",\"eof-in-doctype\":\"Unexpected end of file in DOCTYPE.\",\"expected-space-or-right-bracket-in-doctype\":\"Expected space or '>'. Got '{data}'.\",\"unexpected-end-of-doctype\":\"Unexpected end of DOCTYPE.\",\"unexpected-char-in-doctype\":\"Unexpected character in DOCTYPE.\",\"eof-in-bogus-doctype\":\"Unexpected end of file in bogus doctype.\",\"eof-in-innerhtml\":\"Unexpected EOF in inner html mode.\",\"unexpected-doctype\":\"Unexpected DOCTYPE. Ignored.\",\"non-html-root\":\"html needs to be the first start tag.\",\"expected-doctype-but-got-eof\":\"Unexpected End of file. Expected DOCTYPE.\",\"unknown-doctype\":\"Erroneous DOCTYPE. Expected <!DOCTYPE html>.\",\"quirky-doctype\":\"Quirky doctype. Expected <!DOCTYPE html>.\",\"almost-standards-doctype\":\"Almost standards mode doctype. Expected <!DOCTYPE html>.\",\"obsolete-doctype\":\"Obsolete doctype. Expected <!DOCTYPE html>.\",\"expected-doctype-but-got-chars\":\"Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\"expected-doctype-but-got-start-tag\":\"Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\"expected-doctype-but-got-end-tag\":\"End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\"end-tag-after-implied-root\":\"Unexpected end tag ({name}) after the (implied) root element.\",\"expected-named-closing-tag-but-got-eof\":\"Unexpected end of file. Expected end tag ({name}).\",\"two-heads-are-not-better-than-one\":\"Unexpected start tag head in existing head. Ignored.\",\"unexpected-end-tag\":\"Unexpected end tag ({name}). Ignored.\",\"unexpected-implied-end-tag\":\"End tag {name} implied, but there were open elements.\",\"unexpected-start-tag-out-of-my-head\":\"Unexpected start tag ({name}) that can be in head. Moved.\",\"unexpected-start-tag\":\"Unexpected start tag ({name}).\",\"missing-end-tag\":\"Missing end tag ({name}).\",\"missing-end-tags\":\"Missing end tags ({name}).\",\"unexpected-start-tag-implies-end-tag\":\"Unexpected start tag ({startName}) implies end tag ({endName}).\",\"unexpected-start-tag-treated-as\":\"Unexpected start tag ({originalName}). Treated as {newName}.\",\"deprecated-tag\":\"Unexpected start tag {name}. Don't use it!\",\"unexpected-start-tag-ignored\":\"Unexpected start tag {name}. Ignored.\",\"expected-one-end-tag-but-got-another\":\"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).\",\"end-tag-too-early\":\"End tag ({name}) seen too early. Expected other end tag.\",\"end-tag-too-early-named\":\"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.\",\"end-tag-too-early-ignored\":\"End tag ({name}) seen too early. Ignored.\",\"adoption-agency-1.1\":\"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.\",\"adoption-agency-1.2\":\"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.\",\"adoption-agency-1.3\":\"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.\",\"adoption-agency-4.4\":\"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.\",\"unexpected-end-tag-treated-as\":\"Unexpected end tag ({originalName}). Treated as {newName}.\",\"no-end-tag\":\"This element ({name}) has no end tag.\",\"unexpected-implied-end-tag-in-table\":\"Unexpected implied end tag ({name}) in the table phase.\",\"unexpected-implied-end-tag-in-table-body\":\"Unexpected implied end tag ({name}) in the table body phase.\",\"unexpected-char-implies-table-voodoo\":\"Unexpected non-space characters in table context caused voodoo mode.\",\"unexpected-hidden-input-in-table\":\"Unexpected input with type hidden in table context.\",\"unexpected-form-in-table\":\"Unexpected form in table context.\",\"unexpected-start-tag-implies-table-voodoo\":\"Unexpected start tag ({name}) in table context caused voodoo mode.\",\"unexpected-end-tag-implies-table-voodoo\":\"Unexpected end tag ({name}) in table context caused voodoo mode.\",\"unexpected-cell-in-table-body\":\"Unexpected table cell start tag ({name}) in the table body phase.\",\"unexpected-cell-end-tag\":\"Got table cell end tag ({name}) while required end tags are missing.\",\"unexpected-end-tag-in-table-body\":\"Unexpected end tag ({name}) in the table body phase. Ignored.\",\"unexpected-implied-end-tag-in-table-row\":\"Unexpected implied end tag ({name}) in the table row phase.\",\"unexpected-end-tag-in-table-row\":\"Unexpected end tag ({name}) in the table row phase. Ignored.\",\"unexpected-select-in-select\":\"Unexpected select start tag in the select phase treated as select end tag.\",\"unexpected-input-in-select\":\"Unexpected input start tag in the select phase.\",\"unexpected-start-tag-in-select\":\"Unexpected start tag token ({name}) in the select phase. Ignored.\",\"unexpected-end-tag-in-select\":\"Unexpected end tag ({name}) in the select phase. Ignored.\",\"unexpected-table-element-start-tag-in-select-in-table\":\"Unexpected table element start tag ({name}) in the select in table phase.\",\"unexpected-table-element-end-tag-in-select-in-table\":\"Unexpected table element end tag ({name}) in the select in table phase.\",\"unexpected-char-after-body\":\"Unexpected non-space characters in the after body phase.\",\"unexpected-start-tag-after-body\":\"Unexpected start tag token ({name}) in the after body phase.\",\"unexpected-end-tag-after-body\":\"Unexpected end tag token ({name}) in the after body phase.\",\"unexpected-char-in-frameset\":\"Unepxected characters in the frameset phase. Characters ignored.\",\"unexpected-start-tag-in-frameset\":\"Unexpected start tag token ({name}) in the frameset phase. Ignored.\",\"unexpected-frameset-in-frameset-innerhtml\":\"Unexpected end tag token (frameset in the frameset phase (innerHTML).\",\"unexpected-end-tag-in-frameset\":\"Unexpected end tag token ({name}) in the frameset phase. Ignored.\",\"unexpected-char-after-frameset\":\"Unexpected non-space characters in the after frameset phase. Ignored.\",\"unexpected-start-tag-after-frameset\":\"Unexpected start tag ({name}) in the after frameset phase. Ignored.\",\"unexpected-end-tag-after-frameset\":\"Unexpected end tag ({name}) in the after frameset phase. Ignored.\",\"expected-eof-but-got-char\":\"Unexpected non-space characters. Expected end of file.\",\"expected-eof-but-got-start-tag\":\"Unexpected start tag ({name}). Expected end of file.\",\"expected-eof-but-got-end-tag\":\"Unexpected end tag ({name}). Expected end of file.\",\"unexpected-end-table-in-caption\":\"Unexpected end table tag in caption. Generates implied end caption.\",\"end-html-in-innerhtml\":\"Unexpected html end tag in inner html mode.\",\"eof-in-table\":\"Unexpected end of file. Expected table content.\",\"eof-in-script\":\"Unexpected end of file. Expected script content.\",\"non-void-element-with-trailing-solidus\":\"Trailing solidus not allowed on element {name}.\",\"unexpected-html-element-in-foreign-content\":'HTML start tag \"{name}\" in a foreign namespace context.',\"unexpected-start-tag-in-table\":\"Unexpected {name}. Expected table content.\"}},{}],9:[function(e,t,n){function o(){this.contentHandler=null,this._errorHandler=null,this._treeBuilder=new r,this._tokenizer=new i(this._treeBuilder),this._scriptingEnabled=!1}var r=e(\"./SAXTreeBuilder\").SAXTreeBuilder,i=e(\"../Tokenizer\").Tokenizer,s=e(\"./TreeParser\").TreeParser;o.prototype.parse=function(e){this._tokenizer.tokenize(e);var t=this._treeBuilder.document;t&&(new s(this.contentHandler)).parse(t)},o.prototype.parseFragment=function(e,t){this._treeBuilder.setFragmentContext(t),this._tokenizer.tokenize(e);var n=this._treeBuilder.getFragment();n&&(new s(this.contentHandler)).parse(n)},Object.defineProperty(o.prototype,\"scriptingEnabled\",{get:function(){return this._scriptingEnabled},set:function(e){this._scriptingEnabled=e,this._treeBuilder.scriptingEnabled=e}}),Object.defineProperty(o.prototype,\"errorHandler\",{get:function(){return this._errorHandler},set:function(e){this._errorHandler=e,this._treeBuilder.errorHandler=e}}),n.SAXParser=o},{\"../Tokenizer\":5,\"./SAXTreeBuilder\":10,\"./TreeParser\":11}],10:[function(e,t,n){function s(){i.call(this)}function o(e,t){for(var n=0;n<e.attributes.length;n++){var r=e.attributes[n];if(r.nodeName===t)return r.nodeValue}}function a(e){e?(this.columnNumber=e.columnNumber,this.lineNumber=e.lineNumber):(this.columnNumber=-1,this.lineNumber=-1),this.parentNode=null,this.nextSibling=null,this.firstChild=null}function f(e){a.call(this,e),this.lastChild=null,this._endLocator=null}function l(e){f.call(this,e),this.nodeType=u.DOCUMENT}function c(){f.call(this,new Locator),this.nodeType=u.DOCUMENT_FRAGMENT}function h(e,t,n,r,i,s){f.call(this,e),this.uri=t,this.localName=n,this.qName=r,this.attributes=i,this.prefixMappings=s,this.nodeType=u.ELEMENT}function p(e,t){a.call(this,e),this.data=t,this.nodeType=u.CHARACTERS}function d(e,t){a.call(this,e),this.data=t,this.nodeType=u.IGNORABLE_WHITESPACE}function v(e,t){a.call(this,e),this.data=t,this.nodeType=u.COMMENT}function m(e){f.call(this,e),this.nodeType=u.CDATA}function g(e){f.call(this),this.name=e,this.nodeType=u.ENTITY}function y(e){a.call(this),this.name=e,this.nodeType=u.SKIPPED_ENTITY}function b(e,t){a.call(this),this.target=e,this.data=t}function w(e,t,n){f.call(this),this.name=e,this.publicIdentifier=t,this.systemIdentifier=n,this.nodeType=u.DTD}var r=e(\"util\"),i=e(\"../TreeBuilder\").TreeBuilder;r.inherits(s,i),s.prototype.start=function(e){this.document=new l(this.tokenizer)},s.prototype.end=function(){this.document.endLocator=this.tokenizer},s.prototype.insertDoctype=function(e,t,n){var r=new w(this.tokenizer,e,t,n);r.endLocator=this.tokenizer,this.document.appendChild(r)},s.prototype.createElement=function(e,t,n){var r=new h(this.tokenizer,e,t,t,n||[]);return r},s.prototype.insertComment=function(e,t){t||(t=this.currentStackItem());var n=new v(this.tokenizer,e);t.appendChild(n)},s.prototype.appendCharacters=function(e,t){var n=new p(this.tokenizer,t);e.appendChild(n)},s.prototype.insertText=function(e){if(this.redirectAttachToFosterParent&&this.openElements.top.isFosterParenting()){var t=this.openElements.findIndex(\"table\"),n=this.openElements.item(t),r=n.node;if(t===0)return this.appendCharacters(r,e);var i=new p(this.tokenizer,e),s=r.parentNode;if(s){s.insertBetween(i,r.previousSibling,r);return}var o=this.openElements.item(t-1).node;o.appendChild(i);return}this.appendCharacters(this.currentStackItem().node,e)},s.prototype.attachNode=function(e,t){t.appendChild(e)},s.prototype.attachNodeToFosterParent=function(e,t,n){var r=t.parentNode;r?r.insertBetween(e,t.previousSibling,t):n.appendChild(e)},s.prototype.detachFromParent=function(e){e.detach()},s.prototype.reparentChildren=function(e,t){t.appendChildren(e.firstChild)},s.prototype.getFragment=function(){var e=new c;return this.reparentChildren(this.openElements.rootNode,e),e},s.prototype.addAttributesToElement=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];o(e,r.nodeName)||e.attributes.push(r)}};var u={CDATA:1,CHARACTERS:2,COMMENT:3,DOCUMENT:4,DOCUMENT_FRAGMENT:5,DTD:6,ELEMENT:7,ENTITY:8,IGNORABLE_WHITESPACE:9,PROCESSING_INSTRUCTION:10,SKIPPED_ENTITY:11};a.prototype.visit=function(e){throw new Error(\"Not Implemented\")},a.prototype.revisit=function(e){return},a.prototype.detach=function(){this.parentNode!==null&&(this.parentNode.removeChild(this),this.parentNode=null)},Object.defineProperty(a.prototype,\"previousSibling\",{get:function(){var e=null,t=this.parentNode.firstChild;for(;;){if(this==t)return e;e=t,t=t.nextSibling}}}),f.prototype=Object.create(a.prototype),f.prototype.insertBefore=function(e,t){if(!t)return this.appendChild(e);e.detach(),e.parentNode=this;if(this.firstChild==t)e.nextSibling=t,this.firstChild=e;else{var n=this.firstChild,r=this.firstChild.nextSibling;while(r!=t)n=r,r=r.nextSibling;n.nextSibling=e,e.nextSibling=r}return e},f.prototype.insertBetween=function(e,t,n){return n?(e.detach(),e.parentNode=this,e.nextSibling=n,t?t.nextSibling=e:firstChild=e,e):this.appendChild(e)},f.prototype.appendChild=function(e){return e.detach(),e.parentNode=this,this.firstChild?this.lastChild.nextSibling=e:this.firstChild=e,this.lastChild=e,e},f.prototype.appendChildren=function(e){var t=e.firstChild;if(!t)return;var n=e;this.firstChild?this.lastChild.nextSibling=t:this.firstChild=t,this.lastChild=n.lastChild;do t.parentNode=this;while(t=t.nextSibling);n.firstChild=null,n.lastChild=null},f.prototype.removeChild=function(e){if(this.firstChild==e)this.firstChild=e.nextSibling,this.lastChild==e&&(this.lastChild=null);else{var t=this.firstChild,n=this.firstChild.nextSibling;while(n!=e)t=n,n=n.nextSibling;t.nextSibling=e.nextSibling,this.lastChild==e&&(this.lastChild=t)}return e.parentNode=null,e},Object.defineProperty(f.prototype,\"endLocator\",{get:function(){return this._endLocator},set:function(e){this._endLocator={lineNumber:e.lineNumber,columnNumber:e.columnNumber}}}),l.prototype=Object.create(f.prototype),l.prototype.visit=function(e){e.startDocument(this)},l.prototype.revisit=function(e){e.endDocument(this.endLocator)},c.prototype=Object.create(f.prototype),c.prototype.visit=function(e){},h.prototype=Object.create(f.prototype),h.prototype.visit=function(e){if(this.prefixMappings)for(var t in prefixMappings){var n=prefixMappings[t];e.startPrefixMapping(n.getPrefix(),n.getUri(),this)}e.startElement(this.uri,this.localName,this.qName,this.attributes,this)},h.prototype.revisit=function(e){e.endElement(this.uri,this.localName,this.qName,this.endLocator);if(this.prefixMappings)for(var t in prefixMappings){var n=prefixMappings[t];e.endPrefixMapping(n.getPrefix(),this.endLocator)}},p.prototype=Object.create(a.prototype),p.prototype.visit=function(e){e.characters(this.data,0,this.data.length,this)},d.prototype=Object.create(a.prototype),d.prototype.visit=function(e){e.ignorableWhitespace(this.data,0,this.data.length,this)},v.prototype=Object.create(a.prototype),v.prototype.visit=function(e){e.comment(this.data,0,this.data.length,this)},m.prototype=Object.create(f.prototype),m.prototype.visit=function(e){e.startCDATA(this)},m.prototype.revisit=function(e){e.endCDATA(this.endLocator)},g.prototype=Object.create(f.prototype),g.prototype.visit=function(e){e.startEntity(this.name,this)},g.prototype.revisit=function(e){e.endEntity(this.name)},y.prototype=Object.create(a.prototype),y.prototype.visit=function(e){e.skippedEntity(this.name,this)},b.prototype=Object.create(a.prototype),b.prototype.visit=function(e){e.processingInstruction(this.target,this.data,this)},b.prototype.getNodeType=function(){return u.PROCESSING_INSTRUCTION},w.prototype=Object.create(f.prototype),w.prototype.visit=function(e){e.startDTD(this.name,this.publicIdentifier,this.systemIdentifier,this)},w.prototype.revisit=function(e){e.endDTD()},n.SAXTreeBuilder=s},{\"../TreeBuilder\":6,util:20}],11:[function(e,t,n){function r(e,t){this.contentHandler,this.lexicalHandler,this.locatorDelegate;if(!e)throw new IllegalArgumentException(\"contentHandler was null.\");this.contentHandler=e,t?this.lexicalHandler=t:this.lexicalHandler=new i}function i(){}r.prototype.parse=function(e){this.contentHandler.documentLocator=this;var t=e,n;for(;;){t.visit(this);if(n=t.firstChild){t=n;continue}for(;;){t.revisit(this);if(t==e)return;if(n=t.nextSibling){t=n;break}t=t.parentNode}}},r.prototype.characters=function(e,t,n,r){this.locatorDelegate=r,this.contentHandler.characters(e,t,n)},r.prototype.endDocument=function(e){this.locatorDelegate=e,this.contentHandler.endDocument()},r.prototype.endElement=function(e,t,n,r){this.locatorDelegate=r,this.contentHandler.endElement(e,t,n)},r.prototype.endPrefixMapping=function(e,t){this.locatorDelegate=t,this.contentHandler.endPrefixMapping(e)},r.prototype.ignorableWhitespace=function(e,t,n,r){this.locatorDelegate=r,this.contentHandler.ignorableWhitespace(e,t,n)},r.prototype.processingInstruction=function(e,t,n){this.locatorDelegate=n,this.contentHandler.processingInstruction(e,t)},r.prototype.skippedEntity=function(e,t){this.locatorDelegate=t,this.contentHandler.skippedEntity(e)},r.prototype.startDocument=function(e){this.locatorDelegate=e,this.contentHandler.startDocument()},r.prototype.startElement=function(e,t,n,r,i){this.locatorDelegate=i,this.contentHandler.startElement(e,t,n,r)},r.prototype.startPrefixMapping=function(e,t,n){this.locatorDelegate=n,this.contentHandler.startPrefixMapping(e,t)},r.prototype.comment=function(e,t,n,r){this.locatorDelegate=r,this.lexicalHandler.comment(e,t,n)},r.prototype.endCDATA=function(e){this.locatorDelegate=e,this.lexicalHandler.endCDATA()},r.prototype.endDTD=function(e){this.locatorDelegate=e,this.lexicalHandler.endDTD()},r.prototype.endEntity=function(e,t){this.locatorDelegate=t,this.lexicalHandler.endEntity(e)},r.prototype.startCDATA=function(e){this.locatorDelegate=e,this.lexicalHandler.startCDATA()},r.prototype.startDTD=function(e,t,n,r){this.locatorDelegate=r,this.lexicalHandler.startDTD(e,t,n)},r.prototype.startEntity=function(e,t){this.locatorDelegate=t,this.lexicalHandler.startEntity(e)},Object.defineProperty(r.prototype,\"columnNumber\",{get:function(){return this.locatorDelegate?this.locatorDelegate.columnNumber:-1}}),Object.defineProperty(r.prototype,\"lineNumber\",{get:function(){return this.locatorDelegate?this.locatorDelegate.lineNumber:-1}}),i.prototype.comment=function(){},i.prototype.endCDATA=function(){},i.prototype.endDTD=function(){},i.prototype.endEntity=function(){},i.prototype.startCDATA=function(){},i.prototype.startDTD=function(){},i.prototype.startEntity=function(){},n.TreeParser=r},{}],12:[function(e,t,n){t.exports={\"Aacute;\":\"\\u00c1\",Aacute:\"\\u00c1\",\"aacute;\":\"\\u00e1\",aacute:\"\\u00e1\",\"Abreve;\":\"\\u0102\",\"abreve;\":\"\\u0103\",\"ac;\":\"\\u223e\",\"acd;\":\"\\u223f\",\"acE;\":\"\\u223e\\u0333\",\"Acirc;\":\"\\u00c2\",Acirc:\"\\u00c2\",\"acirc;\":\"\\u00e2\",acirc:\"\\u00e2\",\"acute;\":\"\\u00b4\",acute:\"\\u00b4\",\"Acy;\":\"\\u0410\",\"acy;\":\"\\u0430\",\"AElig;\":\"\\u00c6\",AElig:\"\\u00c6\",\"aelig;\":\"\\u00e6\",aelig:\"\\u00e6\",\"af;\":\"\\u2061\",\"Afr;\":\"\\ud835\\udd04\",\"afr;\":\"\\ud835\\udd1e\",\"Agrave;\":\"\\u00c0\",Agrave:\"\\u00c0\",\"agrave;\":\"\\u00e0\",agrave:\"\\u00e0\",\"alefsym;\":\"\\u2135\",\"aleph;\":\"\\u2135\",\"Alpha;\":\"\\u0391\",\"alpha;\":\"\\u03b1\",\"Amacr;\":\"\\u0100\",\"amacr;\":\"\\u0101\",\"amalg;\":\"\\u2a3f\",\"amp;\":\"&\",amp:\"&\",\"AMP;\":\"&\",AMP:\"&\",\"andand;\":\"\\u2a55\",\"And;\":\"\\u2a53\",\"and;\":\"\\u2227\",\"andd;\":\"\\u2a5c\",\"andslope;\":\"\\u2a58\",\"andv;\":\"\\u2a5a\",\"ang;\":\"\\u2220\",\"ange;\":\"\\u29a4\",\"angle;\":\"\\u2220\",\"angmsdaa;\":\"\\u29a8\",\"angmsdab;\":\"\\u29a9\",\"angmsdac;\":\"\\u29aa\",\"angmsdad;\":\"\\u29ab\",\"angmsdae;\":\"\\u29ac\",\"angmsdaf;\":\"\\u29ad\",\"angmsdag;\":\"\\u29ae\",\"angmsdah;\":\"\\u29af\",\"angmsd;\":\"\\u2221\",\"angrt;\":\"\\u221f\",\"angrtvb;\":\"\\u22be\",\"angrtvbd;\":\"\\u299d\",\"angsph;\":\"\\u2222\",\"angst;\":\"\\u00c5\",\"angzarr;\":\"\\u237c\",\"Aogon;\":\"\\u0104\",\"aogon;\":\"\\u0105\",\"Aopf;\":\"\\ud835\\udd38\",\"aopf;\":\"\\ud835\\udd52\",\"apacir;\":\"\\u2a6f\",\"ap;\":\"\\u2248\",\"apE;\":\"\\u2a70\",\"ape;\":\"\\u224a\",\"apid;\":\"\\u224b\",\"apos;\":\"'\",\"ApplyFunction;\":\"\\u2061\",\"approx;\":\"\\u2248\",\"approxeq;\":\"\\u224a\",\"Aring;\":\"\\u00c5\",Aring:\"\\u00c5\",\"aring;\":\"\\u00e5\",aring:\"\\u00e5\",\"Ascr;\":\"\\ud835\\udc9c\",\"ascr;\":\"\\ud835\\udcb6\",\"Assign;\":\"\\u2254\",\"ast;\":\"*\",\"asymp;\":\"\\u2248\",\"asympeq;\":\"\\u224d\",\"Atilde;\":\"\\u00c3\",Atilde:\"\\u00c3\",\"atilde;\":\"\\u00e3\",atilde:\"\\u00e3\",\"Auml;\":\"\\u00c4\",Auml:\"\\u00c4\",\"auml;\":\"\\u00e4\",auml:\"\\u00e4\",\"awconint;\":\"\\u2233\",\"awint;\":\"\\u2a11\",\"backcong;\":\"\\u224c\",\"backepsilon;\":\"\\u03f6\",\"backprime;\":\"\\u2035\",\"backsim;\":\"\\u223d\",\"backsimeq;\":\"\\u22cd\",\"Backslash;\":\"\\u2216\",\"Barv;\":\"\\u2ae7\",\"barvee;\":\"\\u22bd\",\"barwed;\":\"\\u2305\",\"Barwed;\":\"\\u2306\",\"barwedge;\":\"\\u2305\",\"bbrk;\":\"\\u23b5\",\"bbrktbrk;\":\"\\u23b6\",\"bcong;\":\"\\u224c\",\"Bcy;\":\"\\u0411\",\"bcy;\":\"\\u0431\",\"bdquo;\":\"\\u201e\",\"becaus;\":\"\\u2235\",\"because;\":\"\\u2235\",\"Because;\":\"\\u2235\",\"bemptyv;\":\"\\u29b0\",\"bepsi;\":\"\\u03f6\",\"bernou;\":\"\\u212c\",\"Bernoullis;\":\"\\u212c\",\"Beta;\":\"\\u0392\",\"beta;\":\"\\u03b2\",\"beth;\":\"\\u2136\",\"between;\":\"\\u226c\",\"Bfr;\":\"\\ud835\\udd05\",\"bfr;\":\"\\ud835\\udd1f\",\"bigcap;\":\"\\u22c2\",\"bigcirc;\":\"\\u25ef\",\"bigcup;\":\"\\u22c3\",\"bigodot;\":\"\\u2a00\",\"bigoplus;\":\"\\u2a01\",\"bigotimes;\":\"\\u2a02\",\"bigsqcup;\":\"\\u2a06\",\"bigstar;\":\"\\u2605\",\"bigtriangledown;\":\"\\u25bd\",\"bigtriangleup;\":\"\\u25b3\",\"biguplus;\":\"\\u2a04\",\"bigvee;\":\"\\u22c1\",\"bigwedge;\":\"\\u22c0\",\"bkarow;\":\"\\u290d\",\"blacklozenge;\":\"\\u29eb\",\"blacksquare;\":\"\\u25aa\",\"blacktriangle;\":\"\\u25b4\",\"blacktriangledown;\":\"\\u25be\",\"blacktriangleleft;\":\"\\u25c2\",\"blacktriangleright;\":\"\\u25b8\",\"blank;\":\"\\u2423\",\"blk12;\":\"\\u2592\",\"blk14;\":\"\\u2591\",\"blk34;\":\"\\u2593\",\"block;\":\"\\u2588\",\"bne;\":\"=\\u20e5\",\"bnequiv;\":\"\\u2261\\u20e5\",\"bNot;\":\"\\u2aed\",\"bnot;\":\"\\u2310\",\"Bopf;\":\"\\ud835\\udd39\",\"bopf;\":\"\\ud835\\udd53\",\"bot;\":\"\\u22a5\",\"bottom;\":\"\\u22a5\",\"bowtie;\":\"\\u22c8\",\"boxbox;\":\"\\u29c9\",\"boxdl;\":\"\\u2510\",\"boxdL;\":\"\\u2555\",\"boxDl;\":\"\\u2556\",\"boxDL;\":\"\\u2557\",\"boxdr;\":\"\\u250c\",\"boxdR;\":\"\\u2552\",\"boxDr;\":\"\\u2553\",\"boxDR;\":\"\\u2554\",\"boxh;\":\"\\u2500\",\"boxH;\":\"\\u2550\",\"boxhd;\":\"\\u252c\",\"boxHd;\":\"\\u2564\",\"boxhD;\":\"\\u2565\",\"boxHD;\":\"\\u2566\",\"boxhu;\":\"\\u2534\",\"boxHu;\":\"\\u2567\",\"boxhU;\":\"\\u2568\",\"boxHU;\":\"\\u2569\",\"boxminus;\":\"\\u229f\",\"boxplus;\":\"\\u229e\",\"boxtimes;\":\"\\u22a0\",\"boxul;\":\"\\u2518\",\"boxuL;\":\"\\u255b\",\"boxUl;\":\"\\u255c\",\"boxUL;\":\"\\u255d\",\"boxur;\":\"\\u2514\",\"boxuR;\":\"\\u2558\",\"boxUr;\":\"\\u2559\",\"boxUR;\":\"\\u255a\",\"boxv;\":\"\\u2502\",\"boxV;\":\"\\u2551\",\"boxvh;\":\"\\u253c\",\"boxvH;\":\"\\u256a\",\"boxVh;\":\"\\u256b\",\"boxVH;\":\"\\u256c\",\"boxvl;\":\"\\u2524\",\"boxvL;\":\"\\u2561\",\"boxVl;\":\"\\u2562\",\"boxVL;\":\"\\u2563\",\"boxvr;\":\"\\u251c\",\"boxvR;\":\"\\u255e\",\"boxVr;\":\"\\u255f\",\"boxVR;\":\"\\u2560\",\"bprime;\":\"\\u2035\",\"breve;\":\"\\u02d8\",\"Breve;\":\"\\u02d8\",\"brvbar;\":\"\\u00a6\",brvbar:\"\\u00a6\",\"bscr;\":\"\\ud835\\udcb7\",\"Bscr;\":\"\\u212c\",\"bsemi;\":\"\\u204f\",\"bsim;\":\"\\u223d\",\"bsime;\":\"\\u22cd\",\"bsolb;\":\"\\u29c5\",\"bsol;\":\"\\\\\",\"bsolhsub;\":\"\\u27c8\",\"bull;\":\"\\u2022\",\"bullet;\":\"\\u2022\",\"bump;\":\"\\u224e\",\"bumpE;\":\"\\u2aae\",\"bumpe;\":\"\\u224f\",\"Bumpeq;\":\"\\u224e\",\"bumpeq;\":\"\\u224f\",\"Cacute;\":\"\\u0106\",\"cacute;\":\"\\u0107\",\"capand;\":\"\\u2a44\",\"capbrcup;\":\"\\u2a49\",\"capcap;\":\"\\u2a4b\",\"cap;\":\"\\u2229\",\"Cap;\":\"\\u22d2\",\"capcup;\":\"\\u2a47\",\"capdot;\":\"\\u2a40\",\"CapitalDifferentialD;\":\"\\u2145\",\"caps;\":\"\\u2229\\ufe00\",\"caret;\":\"\\u2041\",\"caron;\":\"\\u02c7\",\"Cayleys;\":\"\\u212d\",\"ccaps;\":\"\\u2a4d\",\"Ccaron;\":\"\\u010c\",\"ccaron;\":\"\\u010d\",\"Ccedil;\":\"\\u00c7\",Ccedil:\"\\u00c7\",\"ccedil;\":\"\\u00e7\",ccedil:\"\\u00e7\",\"Ccirc;\":\"\\u0108\",\"ccirc;\":\"\\u0109\",\"Cconint;\":\"\\u2230\",\"ccups;\":\"\\u2a4c\",\"ccupssm;\":\"\\u2a50\",\"Cdot;\":\"\\u010a\",\"cdot;\":\"\\u010b\",\"cedil;\":\"\\u00b8\",cedil:\"\\u00b8\",\"Cedilla;\":\"\\u00b8\",\"cemptyv;\":\"\\u29b2\",\"cent;\":\"\\u00a2\",cent:\"\\u00a2\",\"centerdot;\":\"\\u00b7\",\"CenterDot;\":\"\\u00b7\",\"cfr;\":\"\\ud835\\udd20\",\"Cfr;\":\"\\u212d\",\"CHcy;\":\"\\u0427\",\"chcy;\":\"\\u0447\",\"check;\":\"\\u2713\",\"checkmark;\":\"\\u2713\",\"Chi;\":\"\\u03a7\",\"chi;\":\"\\u03c7\",\"circ;\":\"\\u02c6\",\"circeq;\":\"\\u2257\",\"circlearrowleft;\":\"\\u21ba\",\"circlearrowright;\":\"\\u21bb\",\"circledast;\":\"\\u229b\",\"circledcirc;\":\"\\u229a\",\"circleddash;\":\"\\u229d\",\"CircleDot;\":\"\\u2299\",\"circledR;\":\"\\u00ae\",\"circledS;\":\"\\u24c8\",\"CircleMinus;\":\"\\u2296\",\"CirclePlus;\":\"\\u2295\",\"CircleTimes;\":\"\\u2297\",\"cir;\":\"\\u25cb\",\"cirE;\":\"\\u29c3\",\"cire;\":\"\\u2257\",\"cirfnint;\":\"\\u2a10\",\"cirmid;\":\"\\u2aef\",\"cirscir;\":\"\\u29c2\",\"ClockwiseContourIntegral;\":\"\\u2232\",\"CloseCurlyDoubleQuote;\":\"\\u201d\",\"CloseCurlyQuote;\":\"\\u2019\",\"clubs;\":\"\\u2663\",\"clubsuit;\":\"\\u2663\",\"colon;\":\":\",\"Colon;\":\"\\u2237\",\"Colone;\":\"\\u2a74\",\"colone;\":\"\\u2254\",\"coloneq;\":\"\\u2254\",\"comma;\":\",\",\"commat;\":\"@\",\"comp;\":\"\\u2201\",\"compfn;\":\"\\u2218\",\"complement;\":\"\\u2201\",\"complexes;\":\"\\u2102\",\"cong;\":\"\\u2245\",\"congdot;\":\"\\u2a6d\",\"Congruent;\":\"\\u2261\",\"conint;\":\"\\u222e\",\"Conint;\":\"\\u222f\",\"ContourIntegral;\":\"\\u222e\",\"copf;\":\"\\ud835\\udd54\",\"Copf;\":\"\\u2102\",\"coprod;\":\"\\u2210\",\"Coproduct;\":\"\\u2210\",\"copy;\":\"\\u00a9\",copy:\"\\u00a9\",\"COPY;\":\"\\u00a9\",COPY:\"\\u00a9\",\"copysr;\":\"\\u2117\",\"CounterClockwiseContourIntegral;\":\"\\u2233\",\"crarr;\":\"\\u21b5\",\"cross;\":\"\\u2717\",\"Cross;\":\"\\u2a2f\",\"Cscr;\":\"\\ud835\\udc9e\",\"cscr;\":\"\\ud835\\udcb8\",\"csub;\":\"\\u2acf\",\"csube;\":\"\\u2ad1\",\"csup;\":\"\\u2ad0\",\"csupe;\":\"\\u2ad2\",\"ctdot;\":\"\\u22ef\",\"cudarrl;\":\"\\u2938\",\"cudarrr;\":\"\\u2935\",\"cuepr;\":\"\\u22de\",\"cuesc;\":\"\\u22df\",\"cularr;\":\"\\u21b6\",\"cularrp;\":\"\\u293d\",\"cupbrcap;\":\"\\u2a48\",\"cupcap;\":\"\\u2a46\",\"CupCap;\":\"\\u224d\",\"cup;\":\"\\u222a\",\"Cup;\":\"\\u22d3\",\"cupcup;\":\"\\u2a4a\",\"cupdot;\":\"\\u228d\",\"cupor;\":\"\\u2a45\",\"cups;\":\"\\u222a\\ufe00\",\"curarr;\":\"\\u21b7\",\"curarrm;\":\"\\u293c\",\"curlyeqprec;\":\"\\u22de\",\"curlyeqsucc;\":\"\\u22df\",\"curlyvee;\":\"\\u22ce\",\"curlywedge;\":\"\\u22cf\",\"curren;\":\"\\u00a4\",curren:\"\\u00a4\",\"curvearrowleft;\":\"\\u21b6\",\"curvearrowright;\":\"\\u21b7\",\"cuvee;\":\"\\u22ce\",\"cuwed;\":\"\\u22cf\",\"cwconint;\":\"\\u2232\",\"cwint;\":\"\\u2231\",\"cylcty;\":\"\\u232d\",\"dagger;\":\"\\u2020\",\"Dagger;\":\"\\u2021\",\"daleth;\":\"\\u2138\",\"darr;\":\"\\u2193\",\"Darr;\":\"\\u21a1\",\"dArr;\":\"\\u21d3\",\"dash;\":\"\\u2010\",\"Dashv;\":\"\\u2ae4\",\"dashv;\":\"\\u22a3\",\"dbkarow;\":\"\\u290f\",\"dblac;\":\"\\u02dd\",\"Dcaron;\":\"\\u010e\",\"dcaron;\":\"\\u010f\",\"Dcy;\":\"\\u0414\",\"dcy;\":\"\\u0434\",\"ddagger;\":\"\\u2021\",\"ddarr;\":\"\\u21ca\",\"DD;\":\"\\u2145\",\"dd;\":\"\\u2146\",\"DDotrahd;\":\"\\u2911\",\"ddotseq;\":\"\\u2a77\",\"deg;\":\"\\u00b0\",deg:\"\\u00b0\",\"Del;\":\"\\u2207\",\"Delta;\":\"\\u0394\",\"delta;\":\"\\u03b4\",\"demptyv;\":\"\\u29b1\",\"dfisht;\":\"\\u297f\",\"Dfr;\":\"\\ud835\\udd07\",\"dfr;\":\"\\ud835\\udd21\",\"dHar;\":\"\\u2965\",\"dharl;\":\"\\u21c3\",\"dharr;\":\"\\u21c2\",\"DiacriticalAcute;\":\"\\u00b4\",\"DiacriticalDot;\":\"\\u02d9\",\"DiacriticalDoubleAcute;\":\"\\u02dd\",\"DiacriticalGrave;\":\"`\",\"DiacriticalTilde;\":\"\\u02dc\",\"diam;\":\"\\u22c4\",\"diamond;\":\"\\u22c4\",\"Diamond;\":\"\\u22c4\",\"diamondsuit;\":\"\\u2666\",\"diams;\":\"\\u2666\",\"die;\":\"\\u00a8\",\"DifferentialD;\":\"\\u2146\",\"digamma;\":\"\\u03dd\",\"disin;\":\"\\u22f2\",\"div;\":\"\\u00f7\",\"divide;\":\"\\u00f7\",divide:\"\\u00f7\",\"divideontimes;\":\"\\u22c7\",\"divonx;\":\"\\u22c7\",\"DJcy;\":\"\\u0402\",\"djcy;\":\"\\u0452\",\"dlcorn;\":\"\\u231e\",\"dlcrop;\":\"\\u230d\",\"dollar;\":\"$\",\"Dopf;\":\"\\ud835\\udd3b\",\"dopf;\":\"\\ud835\\udd55\",\"Dot;\":\"\\u00a8\",\"dot;\":\"\\u02d9\",\"DotDot;\":\"\\u20dc\",\"doteq;\":\"\\u2250\",\"doteqdot;\":\"\\u2251\",\"DotEqual;\":\"\\u2250\",\"dotminus;\":\"\\u2238\",\"dotplus;\":\"\\u2214\",\"dotsquare;\":\"\\u22a1\",\"doublebarwedge;\":\"\\u2306\",\"DoubleContourIntegral;\":\"\\u222f\",\"DoubleDot;\":\"\\u00a8\",\"DoubleDownArrow;\":\"\\u21d3\",\"DoubleLeftArrow;\":\"\\u21d0\",\"DoubleLeftRightArrow;\":\"\\u21d4\",\"DoubleLeftTee;\":\"\\u2ae4\",\"DoubleLongLeftArrow;\":\"\\u27f8\",\"DoubleLongLeftRightArrow;\":\"\\u27fa\",\"DoubleLongRightArrow;\":\"\\u27f9\",\"DoubleRightArrow;\":\"\\u21d2\",\"DoubleRightTee;\":\"\\u22a8\",\"DoubleUpArrow;\":\"\\u21d1\",\"DoubleUpDownArrow;\":\"\\u21d5\",\"DoubleVerticalBar;\":\"\\u2225\",\"DownArrowBar;\":\"\\u2913\",\"downarrow;\":\"\\u2193\",\"DownArrow;\":\"\\u2193\",\"Downarrow;\":\"\\u21d3\",\"DownArrowUpArrow;\":\"\\u21f5\",\"DownBreve;\":\"\\u0311\",\"downdownarrows;\":\"\\u21ca\",\"downharpoonleft;\":\"\\u21c3\",\"downharpoonright;\":\"\\u21c2\",\"DownLeftRightVector;\":\"\\u2950\",\"DownLeftTeeVector;\":\"\\u295e\",\"DownLeftVectorBar;\":\"\\u2956\",\"DownLeftVector;\":\"\\u21bd\",\"DownRightTeeVector;\":\"\\u295f\",\"DownRightVectorBar;\":\"\\u2957\",\"DownRightVector;\":\"\\u21c1\",\"DownTeeArrow;\":\"\\u21a7\",\"DownTee;\":\"\\u22a4\",\"drbkarow;\":\"\\u2910\",\"drcorn;\":\"\\u231f\",\"drcrop;\":\"\\u230c\",\"Dscr;\":\"\\ud835\\udc9f\",\"dscr;\":\"\\ud835\\udcb9\",\"DScy;\":\"\\u0405\",\"dscy;\":\"\\u0455\",\"dsol;\":\"\\u29f6\",\"Dstrok;\":\"\\u0110\",\"dstrok;\":\"\\u0111\",\"dtdot;\":\"\\u22f1\",\"dtri;\":\"\\u25bf\",\"dtrif;\":\"\\u25be\",\"duarr;\":\"\\u21f5\",\"duhar;\":\"\\u296f\",\"dwangle;\":\"\\u29a6\",\"DZcy;\":\"\\u040f\",\"dzcy;\":\"\\u045f\",\"dzigrarr;\":\"\\u27ff\",\"Eacute;\":\"\\u00c9\",Eacute:\"\\u00c9\",\"eacute;\":\"\\u00e9\",eacute:\"\\u00e9\",\"easter;\":\"\\u2a6e\",\"Ecaron;\":\"\\u011a\",\"ecaron;\":\"\\u011b\",\"Ecirc;\":\"\\u00ca\",Ecirc:\"\\u00ca\",\"ecirc;\":\"\\u00ea\",ecirc:\"\\u00ea\",\"ecir;\":\"\\u2256\",\"ecolon;\":\"\\u2255\",\"Ecy;\":\"\\u042d\",\"ecy;\":\"\\u044d\",\"eDDot;\":\"\\u2a77\",\"Edot;\":\"\\u0116\",\"edot;\":\"\\u0117\",\"eDot;\":\"\\u2251\",\"ee;\":\"\\u2147\",\"efDot;\":\"\\u2252\",\"Efr;\":\"\\ud835\\udd08\",\"efr;\":\"\\ud835\\udd22\",\"eg;\":\"\\u2a9a\",\"Egrave;\":\"\\u00c8\",Egrave:\"\\u00c8\",\"egrave;\":\"\\u00e8\",egrave:\"\\u00e8\",\"egs;\":\"\\u2a96\",\"egsdot;\":\"\\u2a98\",\"el;\":\"\\u2a99\",\"Element;\":\"\\u2208\",\"elinters;\":\"\\u23e7\",\"ell;\":\"\\u2113\",\"els;\":\"\\u2a95\",\"elsdot;\":\"\\u2a97\",\"Emacr;\":\"\\u0112\",\"emacr;\":\"\\u0113\",\"empty;\":\"\\u2205\",\"emptyset;\":\"\\u2205\",\"EmptySmallSquare;\":\"\\u25fb\",\"emptyv;\":\"\\u2205\",\"EmptyVerySmallSquare;\":\"\\u25ab\",\"emsp13;\":\"\\u2004\",\"emsp14;\":\"\\u2005\",\"emsp;\":\"\\u2003\",\"ENG;\":\"\\u014a\",\"eng;\":\"\\u014b\",\"ensp;\":\"\\u2002\",\"Eogon;\":\"\\u0118\",\"eogon;\":\"\\u0119\",\"Eopf;\":\"\\ud835\\udd3c\",\"eopf;\":\"\\ud835\\udd56\",\"epar;\":\"\\u22d5\",\"eparsl;\":\"\\u29e3\",\"eplus;\":\"\\u2a71\",\"epsi;\":\"\\u03b5\",\"Epsilon;\":\"\\u0395\",\"epsilon;\":\"\\u03b5\",\"epsiv;\":\"\\u03f5\",\"eqcirc;\":\"\\u2256\",\"eqcolon;\":\"\\u2255\",\"eqsim;\":\"\\u2242\",\"eqslantgtr;\":\"\\u2a96\",\"eqslantless;\":\"\\u2a95\",\"Equal;\":\"\\u2a75\",\"equals;\":\"=\",\"EqualTilde;\":\"\\u2242\",\"equest;\":\"\\u225f\",\"Equilibrium;\":\"\\u21cc\",\"equiv;\":\"\\u2261\",\"equivDD;\":\"\\u2a78\",\"eqvparsl;\":\"\\u29e5\",\"erarr;\":\"\\u2971\",\"erDot;\":\"\\u2253\",\"escr;\":\"\\u212f\",\"Escr;\":\"\\u2130\",\"esdot;\":\"\\u2250\",\"Esim;\":\"\\u2a73\",\"esim;\":\"\\u2242\",\"Eta;\":\"\\u0397\",\"eta;\":\"\\u03b7\",\"ETH;\":\"\\u00d0\",ETH:\"\\u00d0\",\"eth;\":\"\\u00f0\",eth:\"\\u00f0\",\"Euml;\":\"\\u00cb\",Euml:\"\\u00cb\",\"euml;\":\"\\u00eb\",euml:\"\\u00eb\",\"euro;\":\"\\u20ac\",\"excl;\":\"!\",\"exist;\":\"\\u2203\",\"Exists;\":\"\\u2203\",\"expectation;\":\"\\u2130\",\"exponentiale;\":\"\\u2147\",\"ExponentialE;\":\"\\u2147\",\"fallingdotseq;\":\"\\u2252\",\"Fcy;\":\"\\u0424\",\"fcy;\":\"\\u0444\",\"female;\":\"\\u2640\",\"ffilig;\":\"\\ufb03\",\"fflig;\":\"\\ufb00\",\"ffllig;\":\"\\ufb04\",\"Ffr;\":\"\\ud835\\udd09\",\"ffr;\":\"\\ud835\\udd23\",\"filig;\":\"\\ufb01\",\"FilledSmallSquare;\":\"\\u25fc\",\"FilledVerySmallSquare;\":\"\\u25aa\",\"fjlig;\":\"fj\",\"flat;\":\"\\u266d\",\"fllig;\":\"\\ufb02\",\"fltns;\":\"\\u25b1\",\"fnof;\":\"\\u0192\",\"Fopf;\":\"\\ud835\\udd3d\",\"fopf;\":\"\\ud835\\udd57\",\"forall;\":\"\\u2200\",\"ForAll;\":\"\\u2200\",\"fork;\":\"\\u22d4\",\"forkv;\":\"\\u2ad9\",\"Fouriertrf;\":\"\\u2131\",\"fpartint;\":\"\\u2a0d\",\"frac12;\":\"\\u00bd\",frac12:\"\\u00bd\",\"frac13;\":\"\\u2153\",\"frac14;\":\"\\u00bc\",frac14:\"\\u00bc\",\"frac15;\":\"\\u2155\",\"frac16;\":\"\\u2159\",\"frac18;\":\"\\u215b\",\"frac23;\":\"\\u2154\",\"frac25;\":\"\\u2156\",\"frac34;\":\"\\u00be\",frac34:\"\\u00be\",\"frac35;\":\"\\u2157\",\"frac38;\":\"\\u215c\",\"frac45;\":\"\\u2158\",\"frac56;\":\"\\u215a\",\"frac58;\":\"\\u215d\",\"frac78;\":\"\\u215e\",\"frasl;\":\"\\u2044\",\"frown;\":\"\\u2322\",\"fscr;\":\"\\ud835\\udcbb\",\"Fscr;\":\"\\u2131\",\"gacute;\":\"\\u01f5\",\"Gamma;\":\"\\u0393\",\"gamma;\":\"\\u03b3\",\"Gammad;\":\"\\u03dc\",\"gammad;\":\"\\u03dd\",\"gap;\":\"\\u2a86\",\"Gbreve;\":\"\\u011e\",\"gbreve;\":\"\\u011f\",\"Gcedil;\":\"\\u0122\",\"Gcirc;\":\"\\u011c\",\"gcirc;\":\"\\u011d\",\"Gcy;\":\"\\u0413\",\"gcy;\":\"\\u0433\",\"Gdot;\":\"\\u0120\",\"gdot;\":\"\\u0121\",\"ge;\":\"\\u2265\",\"gE;\":\"\\u2267\",\"gEl;\":\"\\u2a8c\",\"gel;\":\"\\u22db\",\"geq;\":\"\\u2265\",\"geqq;\":\"\\u2267\",\"geqslant;\":\"\\u2a7e\",\"gescc;\":\"\\u2aa9\",\"ges;\":\"\\u2a7e\",\"gesdot;\":\"\\u2a80\",\"gesdoto;\":\"\\u2a82\",\"gesdotol;\":\"\\u2a84\",\"gesl;\":\"\\u22db\\ufe00\",\"gesles;\":\"\\u2a94\",\"Gfr;\":\"\\ud835\\udd0a\",\"gfr;\":\"\\ud835\\udd24\",\"gg;\":\"\\u226b\",\"Gg;\":\"\\u22d9\",\"ggg;\":\"\\u22d9\",\"gimel;\":\"\\u2137\",\"GJcy;\":\"\\u0403\",\"gjcy;\":\"\\u0453\",\"gla;\":\"\\u2aa5\",\"gl;\":\"\\u2277\",\"glE;\":\"\\u2a92\",\"glj;\":\"\\u2aa4\",\"gnap;\":\"\\u2a8a\",\"gnapprox;\":\"\\u2a8a\",\"gne;\":\"\\u2a88\",\"gnE;\":\"\\u2269\",\"gneq;\":\"\\u2a88\",\"gneqq;\":\"\\u2269\",\"gnsim;\":\"\\u22e7\",\"Gopf;\":\"\\ud835\\udd3e\",\"gopf;\":\"\\ud835\\udd58\",\"grave;\":\"`\",\"GreaterEqual;\":\"\\u2265\",\"GreaterEqualLess;\":\"\\u22db\",\"GreaterFullEqual;\":\"\\u2267\",\"GreaterGreater;\":\"\\u2aa2\",\"GreaterLess;\":\"\\u2277\",\"GreaterSlantEqual;\":\"\\u2a7e\",\"GreaterTilde;\":\"\\u2273\",\"Gscr;\":\"\\ud835\\udca2\",\"gscr;\":\"\\u210a\",\"gsim;\":\"\\u2273\",\"gsime;\":\"\\u2a8e\",\"gsiml;\":\"\\u2a90\",\"gtcc;\":\"\\u2aa7\",\"gtcir;\":\"\\u2a7a\",\"gt;\":\">\",gt:\">\",\"GT;\":\">\",GT:\">\",\"Gt;\":\"\\u226b\",\"gtdot;\":\"\\u22d7\",\"gtlPar;\":\"\\u2995\",\"gtquest;\":\"\\u2a7c\",\"gtrapprox;\":\"\\u2a86\",\"gtrarr;\":\"\\u2978\",\"gtrdot;\":\"\\u22d7\",\"gtreqless;\":\"\\u22db\",\"gtreqqless;\":\"\\u2a8c\",\"gtrless;\":\"\\u2277\",\"gtrsim;\":\"\\u2273\",\"gvertneqq;\":\"\\u2269\\ufe00\",\"gvnE;\":\"\\u2269\\ufe00\",\"Hacek;\":\"\\u02c7\",\"hairsp;\":\"\\u200a\",\"half;\":\"\\u00bd\",\"hamilt;\":\"\\u210b\",\"HARDcy;\":\"\\u042a\",\"hardcy;\":\"\\u044a\",\"harrcir;\":\"\\u2948\",\"harr;\":\"\\u2194\",\"hArr;\":\"\\u21d4\",\"harrw;\":\"\\u21ad\",\"Hat;\":\"^\",\"hbar;\":\"\\u210f\",\"Hcirc;\":\"\\u0124\",\"hcirc;\":\"\\u0125\",\"hearts;\":\"\\u2665\",\"heartsuit;\":\"\\u2665\",\"hellip;\":\"\\u2026\",\"hercon;\":\"\\u22b9\",\"hfr;\":\"\\ud835\\udd25\",\"Hfr;\":\"\\u210c\",\"HilbertSpace;\":\"\\u210b\",\"hksearow;\":\"\\u2925\",\"hkswarow;\":\"\\u2926\",\"hoarr;\":\"\\u21ff\",\"homtht;\":\"\\u223b\",\"hookleftarrow;\":\"\\u21a9\",\"hookrightarrow;\":\"\\u21aa\",\"hopf;\":\"\\ud835\\udd59\",\"Hopf;\":\"\\u210d\",\"horbar;\":\"\\u2015\",\"HorizontalLine;\":\"\\u2500\",\"hscr;\":\"\\ud835\\udcbd\",\"Hscr;\":\"\\u210b\",\"hslash;\":\"\\u210f\",\"Hstrok;\":\"\\u0126\",\"hstrok;\":\"\\u0127\",\"HumpDownHump;\":\"\\u224e\",\"HumpEqual;\":\"\\u224f\",\"hybull;\":\"\\u2043\",\"hyphen;\":\"\\u2010\",\"Iacute;\":\"\\u00cd\",Iacute:\"\\u00cd\",\"iacute;\":\"\\u00ed\",iacute:\"\\u00ed\",\"ic;\":\"\\u2063\",\"Icirc;\":\"\\u00ce\",Icirc:\"\\u00ce\",\"icirc;\":\"\\u00ee\",icirc:\"\\u00ee\",\"Icy;\":\"\\u0418\",\"icy;\":\"\\u0438\",\"Idot;\":\"\\u0130\",\"IEcy;\":\"\\u0415\",\"iecy;\":\"\\u0435\",\"iexcl;\":\"\\u00a1\",iexcl:\"\\u00a1\",\"iff;\":\"\\u21d4\",\"ifr;\":\"\\ud835\\udd26\",\"Ifr;\":\"\\u2111\",\"Igrave;\":\"\\u00cc\",Igrave:\"\\u00cc\",\"igrave;\":\"\\u00ec\",igrave:\"\\u00ec\",\"ii;\":\"\\u2148\",\"iiiint;\":\"\\u2a0c\",\"iiint;\":\"\\u222d\",\"iinfin;\":\"\\u29dc\",\"iiota;\":\"\\u2129\",\"IJlig;\":\"\\u0132\",\"ijlig;\":\"\\u0133\",\"Imacr;\":\"\\u012a\",\"imacr;\":\"\\u012b\",\"image;\":\"\\u2111\",\"ImaginaryI;\":\"\\u2148\",\"imagline;\":\"\\u2110\",\"imagpart;\":\"\\u2111\",\"imath;\":\"\\u0131\",\"Im;\":\"\\u2111\",\"imof;\":\"\\u22b7\",\"imped;\":\"\\u01b5\",\"Implies;\":\"\\u21d2\",\"incare;\":\"\\u2105\",\"in;\":\"\\u2208\",\"infin;\":\"\\u221e\",\"infintie;\":\"\\u29dd\",\"inodot;\":\"\\u0131\",\"intcal;\":\"\\u22ba\",\"int;\":\"\\u222b\",\"Int;\":\"\\u222c\",\"integers;\":\"\\u2124\",\"Integral;\":\"\\u222b\",\"intercal;\":\"\\u22ba\",\"Intersection;\":\"\\u22c2\",\"intlarhk;\":\"\\u2a17\",\"intprod;\":\"\\u2a3c\",\"InvisibleComma;\":\"\\u2063\",\"InvisibleTimes;\":\"\\u2062\",\"IOcy;\":\"\\u0401\",\"iocy;\":\"\\u0451\",\"Iogon;\":\"\\u012e\",\"iogon;\":\"\\u012f\",\"Iopf;\":\"\\ud835\\udd40\",\"iopf;\":\"\\ud835\\udd5a\",\"Iota;\":\"\\u0399\",\"iota;\":\"\\u03b9\",\"iprod;\":\"\\u2a3c\",\"iquest;\":\"\\u00bf\",iquest:\"\\u00bf\",\"iscr;\":\"\\ud835\\udcbe\",\"Iscr;\":\"\\u2110\",\"isin;\":\"\\u2208\",\"isindot;\":\"\\u22f5\",\"isinE;\":\"\\u22f9\",\"isins;\":\"\\u22f4\",\"isinsv;\":\"\\u22f3\",\"isinv;\":\"\\u2208\",\"it;\":\"\\u2062\",\"Itilde;\":\"\\u0128\",\"itilde;\":\"\\u0129\",\"Iukcy;\":\"\\u0406\",\"iukcy;\":\"\\u0456\",\"Iuml;\":\"\\u00cf\",Iuml:\"\\u00cf\",\"iuml;\":\"\\u00ef\",iuml:\"\\u00ef\",\"Jcirc;\":\"\\u0134\",\"jcirc;\":\"\\u0135\",\"Jcy;\":\"\\u0419\",\"jcy;\":\"\\u0439\",\"Jfr;\":\"\\ud835\\udd0d\",\"jfr;\":\"\\ud835\\udd27\",\"jmath;\":\"\\u0237\",\"Jopf;\":\"\\ud835\\udd41\",\"jopf;\":\"\\ud835\\udd5b\",\"Jscr;\":\"\\ud835\\udca5\",\"jscr;\":\"\\ud835\\udcbf\",\"Jsercy;\":\"\\u0408\",\"jsercy;\":\"\\u0458\",\"Jukcy;\":\"\\u0404\",\"jukcy;\":\"\\u0454\",\"Kappa;\":\"\\u039a\",\"kappa;\":\"\\u03ba\",\"kappav;\":\"\\u03f0\",\"Kcedil;\":\"\\u0136\",\"kcedil;\":\"\\u0137\",\"Kcy;\":\"\\u041a\",\"kcy;\":\"\\u043a\",\"Kfr;\":\"\\ud835\\udd0e\",\"kfr;\":\"\\ud835\\udd28\",\"kgreen;\":\"\\u0138\",\"KHcy;\":\"\\u0425\",\"khcy;\":\"\\u0445\",\"KJcy;\":\"\\u040c\",\"kjcy;\":\"\\u045c\",\"Kopf;\":\"\\ud835\\udd42\",\"kopf;\":\"\\ud835\\udd5c\",\"Kscr;\":\"\\ud835\\udca6\",\"kscr;\":\"\\ud835\\udcc0\",\"lAarr;\":\"\\u21da\",\"Lacute;\":\"\\u0139\",\"lacute;\":\"\\u013a\",\"laemptyv;\":\"\\u29b4\",\"lagran;\":\"\\u2112\",\"Lambda;\":\"\\u039b\",\"lambda;\":\"\\u03bb\",\"lang;\":\"\\u27e8\",\"Lang;\":\"\\u27ea\",\"langd;\":\"\\u2991\",\"langle;\":\"\\u27e8\",\"lap;\":\"\\u2a85\",\"Laplacetrf;\":\"\\u2112\",\"laquo;\":\"\\u00ab\",laquo:\"\\u00ab\",\"larrb;\":\"\\u21e4\",\"larrbfs;\":\"\\u291f\",\"larr;\":\"\\u2190\",\"Larr;\":\"\\u219e\",\"lArr;\":\"\\u21d0\",\"larrfs;\":\"\\u291d\",\"larrhk;\":\"\\u21a9\",\"larrlp;\":\"\\u21ab\",\"larrpl;\":\"\\u2939\",\"larrsim;\":\"\\u2973\",\"larrtl;\":\"\\u21a2\",\"latail;\":\"\\u2919\",\"lAtail;\":\"\\u291b\",\"lat;\":\"\\u2aab\",\"late;\":\"\\u2aad\",\"lates;\":\"\\u2aad\\ufe00\",\"lbarr;\":\"\\u290c\",\"lBarr;\":\"\\u290e\",\"lbbrk;\":\"\\u2772\",\"lbrace;\":\"{\",\"lbrack;\":\"[\",\"lbrke;\":\"\\u298b\",\"lbrksld;\":\"\\u298f\",\"lbrkslu;\":\"\\u298d\",\"Lcaron;\":\"\\u013d\",\"lcaron;\":\"\\u013e\",\"Lcedil;\":\"\\u013b\",\"lcedil;\":\"\\u013c\",\"lceil;\":\"\\u2308\",\"lcub;\":\"{\",\"Lcy;\":\"\\u041b\",\"lcy;\":\"\\u043b\",\"ldca;\":\"\\u2936\",\"ldquo;\":\"\\u201c\",\"ldquor;\":\"\\u201e\",\"ldrdhar;\":\"\\u2967\",\"ldrushar;\":\"\\u294b\",\"ldsh;\":\"\\u21b2\",\"le;\":\"\\u2264\",\"lE;\":\"\\u2266\",\"LeftAngleBracket;\":\"\\u27e8\",\"LeftArrowBar;\":\"\\u21e4\",\"leftarrow;\":\"\\u2190\",\"LeftArrow;\":\"\\u2190\",\"Leftarrow;\":\"\\u21d0\",\"LeftArrowRightArrow;\":\"\\u21c6\",\"leftarrowtail;\":\"\\u21a2\",\"LeftCeiling;\":\"\\u2308\",\"LeftDoubleBracket;\":\"\\u27e6\",\"LeftDownTeeVector;\":\"\\u2961\",\"LeftDownVectorBar;\":\"\\u2959\",\"LeftDownVector;\":\"\\u21c3\",\"LeftFloor;\":\"\\u230a\",\"leftharpoondown;\":\"\\u21bd\",\"leftharpoonup;\":\"\\u21bc\",\"leftleftarrows;\":\"\\u21c7\",\"leftrightarrow;\":\"\\u2194\",\"LeftRightArrow;\":\"\\u2194\",\"Leftrightarrow;\":\"\\u21d4\",\"leftrightarrows;\":\"\\u21c6\",\"leftrightharpoons;\":\"\\u21cb\",\"leftrightsquigarrow;\":\"\\u21ad\",\"LeftRightVector;\":\"\\u294e\",\"LeftTeeArrow;\":\"\\u21a4\",\"LeftTee;\":\"\\u22a3\",\"LeftTeeVector;\":\"\\u295a\",\"leftthreetimes;\":\"\\u22cb\",\"LeftTriangleBar;\":\"\\u29cf\",\"LeftTriangle;\":\"\\u22b2\",\"LeftTriangleEqual;\":\"\\u22b4\",\"LeftUpDownVector;\":\"\\u2951\",\"LeftUpTeeVector;\":\"\\u2960\",\"LeftUpVectorBar;\":\"\\u2958\",\"LeftUpVector;\":\"\\u21bf\",\"LeftVectorBar;\":\"\\u2952\",\"LeftVector;\":\"\\u21bc\",\"lEg;\":\"\\u2a8b\",\"leg;\":\"\\u22da\",\"leq;\":\"\\u2264\",\"leqq;\":\"\\u2266\",\"leqslant;\":\"\\u2a7d\",\"lescc;\":\"\\u2aa8\",\"les;\":\"\\u2a7d\",\"lesdot;\":\"\\u2a7f\",\"lesdoto;\":\"\\u2a81\",\"lesdotor;\":\"\\u2a83\",\"lesg;\":\"\\u22da\\ufe00\",\"lesges;\":\"\\u2a93\",\"lessapprox;\":\"\\u2a85\",\"lessdot;\":\"\\u22d6\",\"lesseqgtr;\":\"\\u22da\",\"lesseqqgtr;\":\"\\u2a8b\",\"LessEqualGreater;\":\"\\u22da\",\"LessFullEqual;\":\"\\u2266\",\"LessGreater;\":\"\\u2276\",\"lessgtr;\":\"\\u2276\",\"LessLess;\":\"\\u2aa1\",\"lesssim;\":\"\\u2272\",\"LessSlantEqual;\":\"\\u2a7d\",\"LessTilde;\":\"\\u2272\",\"lfisht;\":\"\\u297c\",\"lfloor;\":\"\\u230a\",\"Lfr;\":\"\\ud835\\udd0f\",\"lfr;\":\"\\ud835\\udd29\",\"lg;\":\"\\u2276\",\"lgE;\":\"\\u2a91\",\"lHar;\":\"\\u2962\",\"lhard;\":\"\\u21bd\",\"lharu;\":\"\\u21bc\",\"lharul;\":\"\\u296a\",\"lhblk;\":\"\\u2584\",\"LJcy;\":\"\\u0409\",\"ljcy;\":\"\\u0459\",\"llarr;\":\"\\u21c7\",\"ll;\":\"\\u226a\",\"Ll;\":\"\\u22d8\",\"llcorner;\":\"\\u231e\",\"Lleftarrow;\":\"\\u21da\",\"llhard;\":\"\\u296b\",\"lltri;\":\"\\u25fa\",\"Lmidot;\":\"\\u013f\",\"lmidot;\":\"\\u0140\",\"lmoustache;\":\"\\u23b0\",\"lmoust;\":\"\\u23b0\",\"lnap;\":\"\\u2a89\",\"lnapprox;\":\"\\u2a89\",\"lne;\":\"\\u2a87\",\"lnE;\":\"\\u2268\",\"lneq;\":\"\\u2a87\",\"lneqq;\":\"\\u2268\",\"lnsim;\":\"\\u22e6\",\"loang;\":\"\\u27ec\",\"loarr;\":\"\\u21fd\",\"lobrk;\":\"\\u27e6\",\"longleftarrow;\":\"\\u27f5\",\"LongLeftArrow;\":\"\\u27f5\",\"Longleftarrow;\":\"\\u27f8\",\"longleftrightarrow;\":\"\\u27f7\",\"LongLeftRightArrow;\":\"\\u27f7\",\"Longleftrightarrow;\":\"\\u27fa\",\"longmapsto;\":\"\\u27fc\",\"longrightarrow;\":\"\\u27f6\",\"LongRightArrow;\":\"\\u27f6\",\"Longrightarrow;\":\"\\u27f9\",\"looparrowleft;\":\"\\u21ab\",\"looparrowright;\":\"\\u21ac\",\"lopar;\":\"\\u2985\",\"Lopf;\":\"\\ud835\\udd43\",\"lopf;\":\"\\ud835\\udd5d\",\"loplus;\":\"\\u2a2d\",\"lotimes;\":\"\\u2a34\",\"lowast;\":\"\\u2217\",\"lowbar;\":\"_\",\"LowerLeftArrow;\":\"\\u2199\",\"LowerRightArrow;\":\"\\u2198\",\"loz;\":\"\\u25ca\",\"lozenge;\":\"\\u25ca\",\"lozf;\":\"\\u29eb\",\"lpar;\":\"(\",\"lparlt;\":\"\\u2993\",\"lrarr;\":\"\\u21c6\",\"lrcorner;\":\"\\u231f\",\"lrhar;\":\"\\u21cb\",\"lrhard;\":\"\\u296d\",\"lrm;\":\"\\u200e\",\"lrtri;\":\"\\u22bf\",\"lsaquo;\":\"\\u2039\",\"lscr;\":\"\\ud835\\udcc1\",\"Lscr;\":\"\\u2112\",\"lsh;\":\"\\u21b0\",\"Lsh;\":\"\\u21b0\",\"lsim;\":\"\\u2272\",\"lsime;\":\"\\u2a8d\",\"lsimg;\":\"\\u2a8f\",\"lsqb;\":\"[\",\"lsquo;\":\"\\u2018\",\"lsquor;\":\"\\u201a\",\"Lstrok;\":\"\\u0141\",\"lstrok;\":\"\\u0142\",\"ltcc;\":\"\\u2aa6\",\"ltcir;\":\"\\u2a79\",\"lt;\":\"<\",lt:\"<\",\"LT;\":\"<\",LT:\"<\",\"Lt;\":\"\\u226a\",\"ltdot;\":\"\\u22d6\",\"lthree;\":\"\\u22cb\",\"ltimes;\":\"\\u22c9\",\"ltlarr;\":\"\\u2976\",\"ltquest;\":\"\\u2a7b\",\"ltri;\":\"\\u25c3\",\"ltrie;\":\"\\u22b4\",\"ltrif;\":\"\\u25c2\",\"ltrPar;\":\"\\u2996\",\"lurdshar;\":\"\\u294a\",\"luruhar;\":\"\\u2966\",\"lvertneqq;\":\"\\u2268\\ufe00\",\"lvnE;\":\"\\u2268\\ufe00\",\"macr;\":\"\\u00af\",macr:\"\\u00af\",\"male;\":\"\\u2642\",\"malt;\":\"\\u2720\",\"maltese;\":\"\\u2720\",\"Map;\":\"\\u2905\",\"map;\":\"\\u21a6\",\"mapsto;\":\"\\u21a6\",\"mapstodown;\":\"\\u21a7\",\"mapstoleft;\":\"\\u21a4\",\"mapstoup;\":\"\\u21a5\",\"marker;\":\"\\u25ae\",\"mcomma;\":\"\\u2a29\",\"Mcy;\":\"\\u041c\",\"mcy;\":\"\\u043c\",\"mdash;\":\"\\u2014\",\"mDDot;\":\"\\u223a\",\"measuredangle;\":\"\\u2221\",\"MediumSpace;\":\"\\u205f\",\"Mellintrf;\":\"\\u2133\",\"Mfr;\":\"\\ud835\\udd10\",\"mfr;\":\"\\ud835\\udd2a\",\"mho;\":\"\\u2127\",\"micro;\":\"\\u00b5\",micro:\"\\u00b5\",\"midast;\":\"*\",\"midcir;\":\"\\u2af0\",\"mid;\":\"\\u2223\",\"middot;\":\"\\u00b7\",middot:\"\\u00b7\",\"minusb;\":\"\\u229f\",\"minus;\":\"\\u2212\",\"minusd;\":\"\\u2238\",\"minusdu;\":\"\\u2a2a\",\"MinusPlus;\":\"\\u2213\",\"mlcp;\":\"\\u2adb\",\"mldr;\":\"\\u2026\",\"mnplus;\":\"\\u2213\",\"models;\":\"\\u22a7\",\"Mopf;\":\"\\ud835\\udd44\",\"mopf;\":\"\\ud835\\udd5e\",\"mp;\":\"\\u2213\",\"mscr;\":\"\\ud835\\udcc2\",\"Mscr;\":\"\\u2133\",\"mstpos;\":\"\\u223e\",\"Mu;\":\"\\u039c\",\"mu;\":\"\\u03bc\",\"multimap;\":\"\\u22b8\",\"mumap;\":\"\\u22b8\",\"nabla;\":\"\\u2207\",\"Nacute;\":\"\\u0143\",\"nacute;\":\"\\u0144\",\"nang;\":\"\\u2220\\u20d2\",\"nap;\":\"\\u2249\",\"napE;\":\"\\u2a70\\u0338\",\"napid;\":\"\\u224b\\u0338\",\"napos;\":\"\\u0149\",\"napprox;\":\"\\u2249\",\"natural;\":\"\\u266e\",\"naturals;\":\"\\u2115\",\"natur;\":\"\\u266e\",\"nbsp;\":\"\\u00a0\",nbsp:\"\\u00a0\",\"nbump;\":\"\\u224e\\u0338\",\"nbumpe;\":\"\\u224f\\u0338\",\"ncap;\":\"\\u2a43\",\"Ncaron;\":\"\\u0147\",\"ncaron;\":\"\\u0148\",\"Ncedil;\":\"\\u0145\",\"ncedil;\":\"\\u0146\",\"ncong;\":\"\\u2247\",\"ncongdot;\":\"\\u2a6d\\u0338\",\"ncup;\":\"\\u2a42\",\"Ncy;\":\"\\u041d\",\"ncy;\":\"\\u043d\",\"ndash;\":\"\\u2013\",\"nearhk;\":\"\\u2924\",\"nearr;\":\"\\u2197\",\"neArr;\":\"\\u21d7\",\"nearrow;\":\"\\u2197\",\"ne;\":\"\\u2260\",\"nedot;\":\"\\u2250\\u0338\",\"NegativeMediumSpace;\":\"\\u200b\",\"NegativeThickSpace;\":\"\\u200b\",\"NegativeThinSpace;\":\"\\u200b\",\"NegativeVeryThinSpace;\":\"\\u200b\",\"nequiv;\":\"\\u2262\",\"nesear;\":\"\\u2928\",\"nesim;\":\"\\u2242\\u0338\",\"NestedGreaterGreater;\":\"\\u226b\",\"NestedLessLess;\":\"\\u226a\",\"NewLine;\":\"\\n\",\"nexist;\":\"\\u2204\",\"nexists;\":\"\\u2204\",\"Nfr;\":\"\\ud835\\udd11\",\"nfr;\":\"\\ud835\\udd2b\",\"ngE;\":\"\\u2267\\u0338\",\"nge;\":\"\\u2271\",\"ngeq;\":\"\\u2271\",\"ngeqq;\":\"\\u2267\\u0338\",\"ngeqslant;\":\"\\u2a7e\\u0338\",\"nges;\":\"\\u2a7e\\u0338\",\"nGg;\":\"\\u22d9\\u0338\",\"ngsim;\":\"\\u2275\",\"nGt;\":\"\\u226b\\u20d2\",\"ngt;\":\"\\u226f\",\"ngtr;\":\"\\u226f\",\"nGtv;\":\"\\u226b\\u0338\",\"nharr;\":\"\\u21ae\",\"nhArr;\":\"\\u21ce\",\"nhpar;\":\"\\u2af2\",\"ni;\":\"\\u220b\",\"nis;\":\"\\u22fc\",\"nisd;\":\"\\u22fa\",\"niv;\":\"\\u220b\",\"NJcy;\":\"\\u040a\",\"njcy;\":\"\\u045a\",\"nlarr;\":\"\\u219a\",\"nlArr;\":\"\\u21cd\",\"nldr;\":\"\\u2025\",\"nlE;\":\"\\u2266\\u0338\",\"nle;\":\"\\u2270\",\"nleftarrow;\":\"\\u219a\",\"nLeftarrow;\":\"\\u21cd\",\"nleftrightarrow;\":\"\\u21ae\",\"nLeftrightarrow;\":\"\\u21ce\",\"nleq;\":\"\\u2270\",\"nleqq;\":\"\\u2266\\u0338\",\"nleqslant;\":\"\\u2a7d\\u0338\",\"nles;\":\"\\u2a7d\\u0338\",\"nless;\":\"\\u226e\",\"nLl;\":\"\\u22d8\\u0338\",\"nlsim;\":\"\\u2274\",\"nLt;\":\"\\u226a\\u20d2\",\"nlt;\":\"\\u226e\",\"nltri;\":\"\\u22ea\",\"nltrie;\":\"\\u22ec\",\"nLtv;\":\"\\u226a\\u0338\",\"nmid;\":\"\\u2224\",\"NoBreak;\":\"\\u2060\",\"NonBreakingSpace;\":\"\\u00a0\",\"nopf;\":\"\\ud835\\udd5f\",\"Nopf;\":\"\\u2115\",\"Not;\":\"\\u2aec\",\"not;\":\"\\u00ac\",not:\"\\u00ac\",\"NotCongruent;\":\"\\u2262\",\"NotCupCap;\":\"\\u226d\",\"NotDoubleVerticalBar;\":\"\\u2226\",\"NotElement;\":\"\\u2209\",\"NotEqual;\":\"\\u2260\",\"NotEqualTilde;\":\"\\u2242\\u0338\",\"NotExists;\":\"\\u2204\",\"NotGreater;\":\"\\u226f\",\"NotGreaterEqual;\":\"\\u2271\",\"NotGreaterFullEqual;\":\"\\u2267\\u0338\",\"NotGreaterGreater;\":\"\\u226b\\u0338\",\"NotGreaterLess;\":\"\\u2279\",\"NotGreaterSlantEqual;\":\"\\u2a7e\\u0338\",\"NotGreaterTilde;\":\"\\u2275\",\"NotHumpDownHump;\":\"\\u224e\\u0338\",\"NotHumpEqual;\":\"\\u224f\\u0338\",\"notin;\":\"\\u2209\",\"notindot;\":\"\\u22f5\\u0338\",\"notinE;\":\"\\u22f9\\u0338\",\"notinva;\":\"\\u2209\",\"notinvb;\":\"\\u22f7\",\"notinvc;\":\"\\u22f6\",\"NotLeftTriangleBar;\":\"\\u29cf\\u0338\",\"NotLeftTriangle;\":\"\\u22ea\",\"NotLeftTriangleEqual;\":\"\\u22ec\",\"NotLess;\":\"\\u226e\",\"NotLessEqual;\":\"\\u2270\",\"NotLessGreater;\":\"\\u2278\",\"NotLessLess;\":\"\\u226a\\u0338\",\"NotLessSlantEqual;\":\"\\u2a7d\\u0338\",\"NotLessTilde;\":\"\\u2274\",\"NotNestedGreaterGreater;\":\"\\u2aa2\\u0338\",\"NotNestedLessLess;\":\"\\u2aa1\\u0338\",\"notni;\":\"\\u220c\",\"notniva;\":\"\\u220c\",\"notnivb;\":\"\\u22fe\",\"notnivc;\":\"\\u22fd\",\"NotPrecedes;\":\"\\u2280\",\"NotPrecedesEqual;\":\"\\u2aaf\\u0338\",\"NotPrecedesSlantEqual;\":\"\\u22e0\",\"NotReverseElement;\":\"\\u220c\",\"NotRightTriangleBar;\":\"\\u29d0\\u0338\",\"NotRightTriangle;\":\"\\u22eb\",\"NotRightTriangleEqual;\":\"\\u22ed\",\"NotSquareSubset;\":\"\\u228f\\u0338\",\"NotSquareSubsetEqual;\":\"\\u22e2\",\"NotSquareSuperset;\":\"\\u2290\\u0338\",\"NotSquareSupersetEqual;\":\"\\u22e3\",\"NotSubset;\":\"\\u2282\\u20d2\",\"NotSubsetEqual;\":\"\\u2288\",\"NotSucceeds;\":\"\\u2281\",\"NotSucceedsEqual;\":\"\\u2ab0\\u0338\",\"NotSucceedsSlantEqual;\":\"\\u22e1\",\"NotSucceedsTilde;\":\"\\u227f\\u0338\",\"NotSuperset;\":\"\\u2283\\u20d2\",\"NotSupersetEqual;\":\"\\u2289\",\"NotTilde;\":\"\\u2241\",\"NotTildeEqual;\":\"\\u2244\",\"NotTildeFullEqual;\":\"\\u2247\",\"NotTildeTilde;\":\"\\u2249\",\"NotVerticalBar;\":\"\\u2224\",\"nparallel;\":\"\\u2226\",\"npar;\":\"\\u2226\",\"nparsl;\":\"\\u2afd\\u20e5\",\"npart;\":\"\\u2202\\u0338\",\"npolint;\":\"\\u2a14\",\"npr;\":\"\\u2280\",\"nprcue;\":\"\\u22e0\",\"nprec;\":\"\\u2280\",\"npreceq;\":\"\\u2aaf\\u0338\",\"npre;\":\"\\u2aaf\\u0338\",\"nrarrc;\":\"\\u2933\\u0338\",\"nrarr;\":\"\\u219b\",\"nrArr;\":\"\\u21cf\",\"nrarrw;\":\"\\u219d\\u0338\",\"nrightarrow;\":\"\\u219b\",\"nRightarrow;\":\"\\u21cf\",\"nrtri;\":\"\\u22eb\",\"nrtrie;\":\"\\u22ed\",\"nsc;\":\"\\u2281\",\"nsccue;\":\"\\u22e1\",\"nsce;\":\"\\u2ab0\\u0338\",\"Nscr;\":\"\\ud835\\udca9\",\"nscr;\":\"\\ud835\\udcc3\",\"nshortmid;\":\"\\u2224\",\"nshortparallel;\":\"\\u2226\",\"nsim;\":\"\\u2241\",\"nsime;\":\"\\u2244\",\"nsimeq;\":\"\\u2244\",\"nsmid;\":\"\\u2224\",\"nspar;\":\"\\u2226\",\"nsqsube;\":\"\\u22e2\",\"nsqsupe;\":\"\\u22e3\",\"nsub;\":\"\\u2284\",\"nsubE;\":\"\\u2ac5\\u0338\",\"nsube;\":\"\\u2288\",\"nsubset;\":\"\\u2282\\u20d2\",\"nsubseteq;\":\"\\u2288\",\"nsubseteqq;\":\"\\u2ac5\\u0338\",\"nsucc;\":\"\\u2281\",\"nsucceq;\":\"\\u2ab0\\u0338\",\"nsup;\":\"\\u2285\",\"nsupE;\":\"\\u2ac6\\u0338\",\"nsupe;\":\"\\u2289\",\"nsupset;\":\"\\u2283\\u20d2\",\"nsupseteq;\":\"\\u2289\",\"nsupseteqq;\":\"\\u2ac6\\u0338\",\"ntgl;\":\"\\u2279\",\"Ntilde;\":\"\\u00d1\",Ntilde:\"\\u00d1\",\"ntilde;\":\"\\u00f1\",ntilde:\"\\u00f1\",\"ntlg;\":\"\\u2278\",\"ntriangleleft;\":\"\\u22ea\",\"ntrianglelefteq;\":\"\\u22ec\",\"ntriangleright;\":\"\\u22eb\",\"ntrianglerighteq;\":\"\\u22ed\",\"Nu;\":\"\\u039d\",\"nu;\":\"\\u03bd\",\"num;\":\"#\",\"numero;\":\"\\u2116\",\"numsp;\":\"\\u2007\",\"nvap;\":\"\\u224d\\u20d2\",\"nvdash;\":\"\\u22ac\",\"nvDash;\":\"\\u22ad\",\"nVdash;\":\"\\u22ae\",\"nVDash;\":\"\\u22af\",\"nvge;\":\"\\u2265\\u20d2\",\"nvgt;\":\">\\u20d2\",\"nvHarr;\":\"\\u2904\",\"nvinfin;\":\"\\u29de\",\"nvlArr;\":\"\\u2902\",\"nvle;\":\"\\u2264\\u20d2\",\"nvlt;\":\"<\\u20d2\",\"nvltrie;\":\"\\u22b4\\u20d2\",\"nvrArr;\":\"\\u2903\",\"nvrtrie;\":\"\\u22b5\\u20d2\",\"nvsim;\":\"\\u223c\\u20d2\",\"nwarhk;\":\"\\u2923\",\"nwarr;\":\"\\u2196\",\"nwArr;\":\"\\u21d6\",\"nwarrow;\":\"\\u2196\",\"nwnear;\":\"\\u2927\",\"Oacute;\":\"\\u00d3\",Oacute:\"\\u00d3\",\"oacute;\":\"\\u00f3\",oacute:\"\\u00f3\",\"oast;\":\"\\u229b\",\"Ocirc;\":\"\\u00d4\",Ocirc:\"\\u00d4\",\"ocirc;\":\"\\u00f4\",ocirc:\"\\u00f4\",\"ocir;\":\"\\u229a\",\"Ocy;\":\"\\u041e\",\"ocy;\":\"\\u043e\",\"odash;\":\"\\u229d\",\"Odblac;\":\"\\u0150\",\"odblac;\":\"\\u0151\",\"odiv;\":\"\\u2a38\",\"odot;\":\"\\u2299\",\"odsold;\":\"\\u29bc\",\"OElig;\":\"\\u0152\",\"oelig;\":\"\\u0153\",\"ofcir;\":\"\\u29bf\",\"Ofr;\":\"\\ud835\\udd12\",\"ofr;\":\"\\ud835\\udd2c\",\"ogon;\":\"\\u02db\",\"Ograve;\":\"\\u00d2\",Ograve:\"\\u00d2\",\"ograve;\":\"\\u00f2\",ograve:\"\\u00f2\",\"ogt;\":\"\\u29c1\",\"ohbar;\":\"\\u29b5\",\"ohm;\":\"\\u03a9\",\"oint;\":\"\\u222e\",\"olarr;\":\"\\u21ba\",\"olcir;\":\"\\u29be\",\"olcross;\":\"\\u29bb\",\"oline;\":\"\\u203e\",\"olt;\":\"\\u29c0\",\"Omacr;\":\"\\u014c\",\"omacr;\":\"\\u014d\",\"Omega;\":\"\\u03a9\",\"omega;\":\"\\u03c9\",\"Omicron;\":\"\\u039f\",\"omicron;\":\"\\u03bf\",\"omid;\":\"\\u29b6\",\"ominus;\":\"\\u2296\",\"Oopf;\":\"\\ud835\\udd46\",\"oopf;\":\"\\ud835\\udd60\",\"opar;\":\"\\u29b7\",\"OpenCurlyDoubleQuote;\":\"\\u201c\",\"OpenCurlyQuote;\":\"\\u2018\",\"operp;\":\"\\u29b9\",\"oplus;\":\"\\u2295\",\"orarr;\":\"\\u21bb\",\"Or;\":\"\\u2a54\",\"or;\":\"\\u2228\",\"ord;\":\"\\u2a5d\",\"order;\":\"\\u2134\",\"orderof;\":\"\\u2134\",\"ordf;\":\"\\u00aa\",ordf:\"\\u00aa\",\"ordm;\":\"\\u00ba\",ordm:\"\\u00ba\",\"origof;\":\"\\u22b6\",\"oror;\":\"\\u2a56\",\"orslope;\":\"\\u2a57\",\"orv;\":\"\\u2a5b\",\"oS;\":\"\\u24c8\",\"Oscr;\":\"\\ud835\\udcaa\",\"oscr;\":\"\\u2134\",\"Oslash;\":\"\\u00d8\",Oslash:\"\\u00d8\",\"oslash;\":\"\\u00f8\",oslash:\"\\u00f8\",\"osol;\":\"\\u2298\",\"Otilde;\":\"\\u00d5\",Otilde:\"\\u00d5\",\"otilde;\":\"\\u00f5\",otilde:\"\\u00f5\",\"otimesas;\":\"\\u2a36\",\"Otimes;\":\"\\u2a37\",\"otimes;\":\"\\u2297\",\"Ouml;\":\"\\u00d6\",Ouml:\"\\u00d6\",\"ouml;\":\"\\u00f6\",ouml:\"\\u00f6\",\"ovbar;\":\"\\u233d\",\"OverBar;\":\"\\u203e\",\"OverBrace;\":\"\\u23de\",\"OverBracket;\":\"\\u23b4\",\"OverParenthesis;\":\"\\u23dc\",\"para;\":\"\\u00b6\",para:\"\\u00b6\",\"parallel;\":\"\\u2225\",\"par;\":\"\\u2225\",\"parsim;\":\"\\u2af3\",\"parsl;\":\"\\u2afd\",\"part;\":\"\\u2202\",\"PartialD;\":\"\\u2202\",\"Pcy;\":\"\\u041f\",\"pcy;\":\"\\u043f\",\"percnt;\":\"%\",\"period;\":\".\",\"permil;\":\"\\u2030\",\"perp;\":\"\\u22a5\",\"pertenk;\":\"\\u2031\",\"Pfr;\":\"\\ud835\\udd13\",\"pfr;\":\"\\ud835\\udd2d\",\"Phi;\":\"\\u03a6\",\"phi;\":\"\\u03c6\",\"phiv;\":\"\\u03d5\",\"phmmat;\":\"\\u2133\",\"phone;\":\"\\u260e\",\"Pi;\":\"\\u03a0\",\"pi;\":\"\\u03c0\",\"pitchfork;\":\"\\u22d4\",\"piv;\":\"\\u03d6\",\"planck;\":\"\\u210f\",\"planckh;\":\"\\u210e\",\"plankv;\":\"\\u210f\",\"plusacir;\":\"\\u2a23\",\"plusb;\":\"\\u229e\",\"pluscir;\":\"\\u2a22\",\"plus;\":\"+\",\"plusdo;\":\"\\u2214\",\"plusdu;\":\"\\u2a25\",\"pluse;\":\"\\u2a72\",\"PlusMinus;\":\"\\u00b1\",\"plusmn;\":\"\\u00b1\",plusmn:\"\\u00b1\",\"plussim;\":\"\\u2a26\",\"plustwo;\":\"\\u2a27\",\"pm;\":\"\\u00b1\",\"Poincareplane;\":\"\\u210c\",\"pointint;\":\"\\u2a15\",\"popf;\":\"\\ud835\\udd61\",\"Popf;\":\"\\u2119\",\"pound;\":\"\\u00a3\",pound:\"\\u00a3\",\"prap;\":\"\\u2ab7\",\"Pr;\":\"\\u2abb\",\"pr;\":\"\\u227a\",\"prcue;\":\"\\u227c\",\"precapprox;\":\"\\u2ab7\",\"prec;\":\"\\u227a\",\"preccurlyeq;\":\"\\u227c\",\"Precedes;\":\"\\u227a\",\"PrecedesEqual;\":\"\\u2aaf\",\"PrecedesSlantEqual;\":\"\\u227c\",\"PrecedesTilde;\":\"\\u227e\",\"preceq;\":\"\\u2aaf\",\"precnapprox;\":\"\\u2ab9\",\"precneqq;\":\"\\u2ab5\",\"precnsim;\":\"\\u22e8\",\"pre;\":\"\\u2aaf\",\"prE;\":\"\\u2ab3\",\"precsim;\":\"\\u227e\",\"prime;\":\"\\u2032\",\"Prime;\":\"\\u2033\",\"primes;\":\"\\u2119\",\"prnap;\":\"\\u2ab9\",\"prnE;\":\"\\u2ab5\",\"prnsim;\":\"\\u22e8\",\"prod;\":\"\\u220f\",\"Product;\":\"\\u220f\",\"profalar;\":\"\\u232e\",\"profline;\":\"\\u2312\",\"profsurf;\":\"\\u2313\",\"prop;\":\"\\u221d\",\"Proportional;\":\"\\u221d\",\"Proportion;\":\"\\u2237\",\"propto;\":\"\\u221d\",\"prsim;\":\"\\u227e\",\"prurel;\":\"\\u22b0\",\"Pscr;\":\"\\ud835\\udcab\",\"pscr;\":\"\\ud835\\udcc5\",\"Psi;\":\"\\u03a8\",\"psi;\":\"\\u03c8\",\"puncsp;\":\"\\u2008\",\"Qfr;\":\"\\ud835\\udd14\",\"qfr;\":\"\\ud835\\udd2e\",\"qint;\":\"\\u2a0c\",\"qopf;\":\"\\ud835\\udd62\",\"Qopf;\":\"\\u211a\",\"qprime;\":\"\\u2057\",\"Qscr;\":\"\\ud835\\udcac\",\"qscr;\":\"\\ud835\\udcc6\",\"quaternions;\":\"\\u210d\",\"quatint;\":\"\\u2a16\",\"quest;\":\"?\",\"questeq;\":\"\\u225f\",\"quot;\":'\"',quot:'\"',\"QUOT;\":'\"',QUOT:'\"',\"rAarr;\":\"\\u21db\",\"race;\":\"\\u223d\\u0331\",\"Racute;\":\"\\u0154\",\"racute;\":\"\\u0155\",\"radic;\":\"\\u221a\",\"raemptyv;\":\"\\u29b3\",\"rang;\":\"\\u27e9\",\"Rang;\":\"\\u27eb\",\"rangd;\":\"\\u2992\",\"range;\":\"\\u29a5\",\"rangle;\":\"\\u27e9\",\"raquo;\":\"\\u00bb\",raquo:\"\\u00bb\",\"rarrap;\":\"\\u2975\",\"rarrb;\":\"\\u21e5\",\"rarrbfs;\":\"\\u2920\",\"rarrc;\":\"\\u2933\",\"rarr;\":\"\\u2192\",\"Rarr;\":\"\\u21a0\",\"rArr;\":\"\\u21d2\",\"rarrfs;\":\"\\u291e\",\"rarrhk;\":\"\\u21aa\",\"rarrlp;\":\"\\u21ac\",\"rarrpl;\":\"\\u2945\",\"rarrsim;\":\"\\u2974\",\"Rarrtl;\":\"\\u2916\",\"rarrtl;\":\"\\u21a3\",\"rarrw;\":\"\\u219d\",\"ratail;\":\"\\u291a\",\"rAtail;\":\"\\u291c\",\"ratio;\":\"\\u2236\",\"rationals;\":\"\\u211a\",\"rbarr;\":\"\\u290d\",\"rBarr;\":\"\\u290f\",\"RBarr;\":\"\\u2910\",\"rbbrk;\":\"\\u2773\",\"rbrace;\":\"}\",\"rbrack;\":\"]\",\"rbrke;\":\"\\u298c\",\"rbrksld;\":\"\\u298e\",\"rbrkslu;\":\"\\u2990\",\"Rcaron;\":\"\\u0158\",\"rcaron;\":\"\\u0159\",\"Rcedil;\":\"\\u0156\",\"rcedil;\":\"\\u0157\",\"rceil;\":\"\\u2309\",\"rcub;\":\"}\",\"Rcy;\":\"\\u0420\",\"rcy;\":\"\\u0440\",\"rdca;\":\"\\u2937\",\"rdldhar;\":\"\\u2969\",\"rdquo;\":\"\\u201d\",\"rdquor;\":\"\\u201d\",\"rdsh;\":\"\\u21b3\",\"real;\":\"\\u211c\",\"realine;\":\"\\u211b\",\"realpart;\":\"\\u211c\",\"reals;\":\"\\u211d\",\"Re;\":\"\\u211c\",\"rect;\":\"\\u25ad\",\"reg;\":\"\\u00ae\",reg:\"\\u00ae\",\"REG;\":\"\\u00ae\",REG:\"\\u00ae\",\"ReverseElement;\":\"\\u220b\",\"ReverseEquilibrium;\":\"\\u21cb\",\"ReverseUpEquilibrium;\":\"\\u296f\",\"rfisht;\":\"\\u297d\",\"rfloor;\":\"\\u230b\",\"rfr;\":\"\\ud835\\udd2f\",\"Rfr;\":\"\\u211c\",\"rHar;\":\"\\u2964\",\"rhard;\":\"\\u21c1\",\"rharu;\":\"\\u21c0\",\"rharul;\":\"\\u296c\",\"Rho;\":\"\\u03a1\",\"rho;\":\"\\u03c1\",\"rhov;\":\"\\u03f1\",\"RightAngleBracket;\":\"\\u27e9\",\"RightArrowBar;\":\"\\u21e5\",\"rightarrow;\":\"\\u2192\",\"RightArrow;\":\"\\u2192\",\"Rightarrow;\":\"\\u21d2\",\"RightArrowLeftArrow;\":\"\\u21c4\",\"rightarrowtail;\":\"\\u21a3\",\"RightCeiling;\":\"\\u2309\",\"RightDoubleBracket;\":\"\\u27e7\",\"RightDownTeeVector;\":\"\\u295d\",\"RightDownVectorBar;\":\"\\u2955\",\"RightDownVector;\":\"\\u21c2\",\"RightFloor;\":\"\\u230b\",\"rightharpoondown;\":\"\\u21c1\",\"rightharpoonup;\":\"\\u21c0\",\"rightleftarrows;\":\"\\u21c4\",\"rightleftharpoons;\":\"\\u21cc\",\"rightrightarrows;\":\"\\u21c9\",\"rightsquigarrow;\":\"\\u219d\",\"RightTeeArrow;\":\"\\u21a6\",\"RightTee;\":\"\\u22a2\",\"RightTeeVector;\":\"\\u295b\",\"rightthreetimes;\":\"\\u22cc\",\"RightTriangleBar;\":\"\\u29d0\",\"RightTriangle;\":\"\\u22b3\",\"RightTriangleEqual;\":\"\\u22b5\",\"RightUpDownVector;\":\"\\u294f\",\"RightUpTeeVector;\":\"\\u295c\",\"RightUpVectorBar;\":\"\\u2954\",\"RightUpVector;\":\"\\u21be\",\"RightVectorBar;\":\"\\u2953\",\"RightVector;\":\"\\u21c0\",\"ring;\":\"\\u02da\",\"risingdotseq;\":\"\\u2253\",\"rlarr;\":\"\\u21c4\",\"rlhar;\":\"\\u21cc\",\"rlm;\":\"\\u200f\",\"rmoustache;\":\"\\u23b1\",\"rmoust;\":\"\\u23b1\",\"rnmid;\":\"\\u2aee\",\"roang;\":\"\\u27ed\",\"roarr;\":\"\\u21fe\",\"robrk;\":\"\\u27e7\",\"ropar;\":\"\\u2986\",\"ropf;\":\"\\ud835\\udd63\",\"Ropf;\":\"\\u211d\",\"roplus;\":\"\\u2a2e\",\"rotimes;\":\"\\u2a35\",\"RoundImplies;\":\"\\u2970\",\"rpar;\":\")\",\"rpargt;\":\"\\u2994\",\"rppolint;\":\"\\u2a12\",\"rrarr;\":\"\\u21c9\",\"Rrightarrow;\":\"\\u21db\",\"rsaquo;\":\"\\u203a\",\"rscr;\":\"\\ud835\\udcc7\",\"Rscr;\":\"\\u211b\",\"rsh;\":\"\\u21b1\",\"Rsh;\":\"\\u21b1\",\"rsqb;\":\"]\",\"rsquo;\":\"\\u2019\",\"rsquor;\":\"\\u2019\",\"rthree;\":\"\\u22cc\",\"rtimes;\":\"\\u22ca\",\"rtri;\":\"\\u25b9\",\"rtrie;\":\"\\u22b5\",\"rtrif;\":\"\\u25b8\",\"rtriltri;\":\"\\u29ce\",\"RuleDelayed;\":\"\\u29f4\",\"ruluhar;\":\"\\u2968\",\"rx;\":\"\\u211e\",\"Sacute;\":\"\\u015a\",\"sacute;\":\"\\u015b\",\"sbquo;\":\"\\u201a\",\"scap;\":\"\\u2ab8\",\"Scaron;\":\"\\u0160\",\"scaron;\":\"\\u0161\",\"Sc;\":\"\\u2abc\",\"sc;\":\"\\u227b\",\"sccue;\":\"\\u227d\",\"sce;\":\"\\u2ab0\",\"scE;\":\"\\u2ab4\",\"Scedil;\":\"\\u015e\",\"scedil;\":\"\\u015f\",\"Scirc;\":\"\\u015c\",\"scirc;\":\"\\u015d\",\"scnap;\":\"\\u2aba\",\"scnE;\":\"\\u2ab6\",\"scnsim;\":\"\\u22e9\",\"scpolint;\":\"\\u2a13\",\"scsim;\":\"\\u227f\",\"Scy;\":\"\\u0421\",\"scy;\":\"\\u0441\",\"sdotb;\":\"\\u22a1\",\"sdot;\":\"\\u22c5\",\"sdote;\":\"\\u2a66\",\"searhk;\":\"\\u2925\",\"searr;\":\"\\u2198\",\"seArr;\":\"\\u21d8\",\"searrow;\":\"\\u2198\",\"sect;\":\"\\u00a7\",sect:\"\\u00a7\",\"semi;\":\";\",\"seswar;\":\"\\u2929\",\"setminus;\":\"\\u2216\",\"setmn;\":\"\\u2216\",\"sext;\":\"\\u2736\",\"Sfr;\":\"\\ud835\\udd16\",\"sfr;\":\"\\ud835\\udd30\",\"sfrown;\":\"\\u2322\",\"sharp;\":\"\\u266f\",\"SHCHcy;\":\"\\u0429\",\"shchcy;\":\"\\u0449\",\"SHcy;\":\"\\u0428\",\"shcy;\":\"\\u0448\",\"ShortDownArrow;\":\"\\u2193\",\"ShortLeftArrow;\":\"\\u2190\",\"shortmid;\":\"\\u2223\",\"shortparallel;\":\"\\u2225\",\"ShortRightArrow;\":\"\\u2192\",\"ShortUpArrow;\":\"\\u2191\",\"shy;\":\"\\u00ad\",shy:\"\\u00ad\",\"Sigma;\":\"\\u03a3\",\"sigma;\":\"\\u03c3\",\"sigmaf;\":\"\\u03c2\",\"sigmav;\":\"\\u03c2\",\"sim;\":\"\\u223c\",\"simdot;\":\"\\u2a6a\",\"sime;\":\"\\u2243\",\"simeq;\":\"\\u2243\",\"simg;\":\"\\u2a9e\",\"simgE;\":\"\\u2aa0\",\"siml;\":\"\\u2a9d\",\"simlE;\":\"\\u2a9f\",\"simne;\":\"\\u2246\",\"simplus;\":\"\\u2a24\",\"simrarr;\":\"\\u2972\",\"slarr;\":\"\\u2190\",\"SmallCircle;\":\"\\u2218\",\"smallsetminus;\":\"\\u2216\",\"smashp;\":\"\\u2a33\",\"smeparsl;\":\"\\u29e4\",\"smid;\":\"\\u2223\",\"smile;\":\"\\u2323\",\"smt;\":\"\\u2aaa\",\"smte;\":\"\\u2aac\",\"smtes;\":\"\\u2aac\\ufe00\",\"SOFTcy;\":\"\\u042c\",\"softcy;\":\"\\u044c\",\"solbar;\":\"\\u233f\",\"solb;\":\"\\u29c4\",\"sol;\":\"/\",\"Sopf;\":\"\\ud835\\udd4a\",\"sopf;\":\"\\ud835\\udd64\",\"spades;\":\"\\u2660\",\"spadesuit;\":\"\\u2660\",\"spar;\":\"\\u2225\",\"sqcap;\":\"\\u2293\",\"sqcaps;\":\"\\u2293\\ufe00\",\"sqcup;\":\"\\u2294\",\"sqcups;\":\"\\u2294\\ufe00\",\"Sqrt;\":\"\\u221a\",\"sqsub;\":\"\\u228f\",\"sqsube;\":\"\\u2291\",\"sqsubset;\":\"\\u228f\",\"sqsubseteq;\":\"\\u2291\",\"sqsup;\":\"\\u2290\",\"sqsupe;\":\"\\u2292\",\"sqsupset;\":\"\\u2290\",\"sqsupseteq;\":\"\\u2292\",\"square;\":\"\\u25a1\",\"Square;\":\"\\u25a1\",\"SquareIntersection;\":\"\\u2293\",\"SquareSubset;\":\"\\u228f\",\"SquareSubsetEqual;\":\"\\u2291\",\"SquareSuperset;\":\"\\u2290\",\"SquareSupersetEqual;\":\"\\u2292\",\"SquareUnion;\":\"\\u2294\",\"squarf;\":\"\\u25aa\",\"squ;\":\"\\u25a1\",\"squf;\":\"\\u25aa\",\"srarr;\":\"\\u2192\",\"Sscr;\":\"\\ud835\\udcae\",\"sscr;\":\"\\ud835\\udcc8\",\"ssetmn;\":\"\\u2216\",\"ssmile;\":\"\\u2323\",\"sstarf;\":\"\\u22c6\",\"Star;\":\"\\u22c6\",\"star;\":\"\\u2606\",\"starf;\":\"\\u2605\",\"straightepsilon;\":\"\\u03f5\",\"straightphi;\":\"\\u03d5\",\"strns;\":\"\\u00af\",\"sub;\":\"\\u2282\",\"Sub;\":\"\\u22d0\",\"subdot;\":\"\\u2abd\",\"subE;\":\"\\u2ac5\",\"sube;\":\"\\u2286\",\"subedot;\":\"\\u2ac3\",\"submult;\":\"\\u2ac1\",\"subnE;\":\"\\u2acb\",\"subne;\":\"\\u228a\",\"subplus;\":\"\\u2abf\",\"subrarr;\":\"\\u2979\",\"subset;\":\"\\u2282\",\"Subset;\":\"\\u22d0\",\"subseteq;\":\"\\u2286\",\"subseteqq;\":\"\\u2ac5\",\"SubsetEqual;\":\"\\u2286\",\"subsetneq;\":\"\\u228a\",\"subsetneqq;\":\"\\u2acb\",\"subsim;\":\"\\u2ac7\",\"subsub;\":\"\\u2ad5\",\"subsup;\":\"\\u2ad3\",\"succapprox;\":\"\\u2ab8\",\"succ;\":\"\\u227b\",\"succcurlyeq;\":\"\\u227d\",\"Succeeds;\":\"\\u227b\",\"SucceedsEqual;\":\"\\u2ab0\",\"SucceedsSlantEqual;\":\"\\u227d\",\"SucceedsTilde;\":\"\\u227f\",\"succeq;\":\"\\u2ab0\",\"succnapprox;\":\"\\u2aba\",\"succneqq;\":\"\\u2ab6\",\"succnsim;\":\"\\u22e9\",\"succsim;\":\"\\u227f\",\"SuchThat;\":\"\\u220b\",\"sum;\":\"\\u2211\",\"Sum;\":\"\\u2211\",\"sung;\":\"\\u266a\",\"sup1;\":\"\\u00b9\",sup1:\"\\u00b9\",\"sup2;\":\"\\u00b2\",sup2:\"\\u00b2\",\"sup3;\":\"\\u00b3\",sup3:\"\\u00b3\",\"sup;\":\"\\u2283\",\"Sup;\":\"\\u22d1\",\"supdot;\":\"\\u2abe\",\"supdsub;\":\"\\u2ad8\",\"supE;\":\"\\u2ac6\",\"supe;\":\"\\u2287\",\"supedot;\":\"\\u2ac4\",\"Superset;\":\"\\u2283\",\"SupersetEqual;\":\"\\u2287\",\"suphsol;\":\"\\u27c9\",\"suphsub;\":\"\\u2ad7\",\"suplarr;\":\"\\u297b\",\"supmult;\":\"\\u2ac2\",\"supnE;\":\"\\u2acc\",\"supne;\":\"\\u228b\",\"supplus;\":\"\\u2ac0\",\"supset;\":\"\\u2283\",\"Supset;\":\"\\u22d1\",\"supseteq;\":\"\\u2287\",\"supseteqq;\":\"\\u2ac6\",\"supsetneq;\":\"\\u228b\",\"supsetneqq;\":\"\\u2acc\",\"supsim;\":\"\\u2ac8\",\"supsub;\":\"\\u2ad4\",\"supsup;\":\"\\u2ad6\",\"swarhk;\":\"\\u2926\",\"swarr;\":\"\\u2199\",\"swArr;\":\"\\u21d9\",\"swarrow;\":\"\\u2199\",\"swnwar;\":\"\\u292a\",\"szlig;\":\"\\u00df\",szlig:\"\\u00df\",\"Tab;\":\"\t\",\"target;\":\"\\u2316\",\"Tau;\":\"\\u03a4\",\"tau;\":\"\\u03c4\",\"tbrk;\":\"\\u23b4\",\"Tcaron;\":\"\\u0164\",\"tcaron;\":\"\\u0165\",\"Tcedil;\":\"\\u0162\",\"tcedil;\":\"\\u0163\",\"Tcy;\":\"\\u0422\",\"tcy;\":\"\\u0442\",\"tdot;\":\"\\u20db\",\"telrec;\":\"\\u2315\",\"Tfr;\":\"\\ud835\\udd17\",\"tfr;\":\"\\ud835\\udd31\",\"there4;\":\"\\u2234\",\"therefore;\":\"\\u2234\",\"Therefore;\":\"\\u2234\",\"Theta;\":\"\\u0398\",\"theta;\":\"\\u03b8\",\"thetasym;\":\"\\u03d1\",\"thetav;\":\"\\u03d1\",\"thickapprox;\":\"\\u2248\",\"thicksim;\":\"\\u223c\",\"ThickSpace;\":\"\\u205f\\u200a\",\"ThinSpace;\":\"\\u2009\",\"thinsp;\":\"\\u2009\",\"thkap;\":\"\\u2248\",\"thksim;\":\"\\u223c\",\"THORN;\":\"\\u00de\",THORN:\"\\u00de\",\"thorn;\":\"\\u00fe\",thorn:\"\\u00fe\",\"tilde;\":\"\\u02dc\",\"Tilde;\":\"\\u223c\",\"TildeEqual;\":\"\\u2243\",\"TildeFullEqual;\":\"\\u2245\",\"TildeTilde;\":\"\\u2248\",\"timesbar;\":\"\\u2a31\",\"timesb;\":\"\\u22a0\",\"times;\":\"\\u00d7\",times:\"\\u00d7\",\"timesd;\":\"\\u2a30\",\"tint;\":\"\\u222d\",\"toea;\":\"\\u2928\",\"topbot;\":\"\\u2336\",\"topcir;\":\"\\u2af1\",\"top;\":\"\\u22a4\",\"Topf;\":\"\\ud835\\udd4b\",\"topf;\":\"\\ud835\\udd65\",\"topfork;\":\"\\u2ada\",\"tosa;\":\"\\u2929\",\"tprime;\":\"\\u2034\",\"trade;\":\"\\u2122\",\"TRADE;\":\"\\u2122\",\"triangle;\":\"\\u25b5\",\"triangledown;\":\"\\u25bf\",\"triangleleft;\":\"\\u25c3\",\"trianglelefteq;\":\"\\u22b4\",\"triangleq;\":\"\\u225c\",\"triangleright;\":\"\\u25b9\",\"trianglerighteq;\":\"\\u22b5\",\"tridot;\":\"\\u25ec\",\"trie;\":\"\\u225c\",\"triminus;\":\"\\u2a3a\",\"TripleDot;\":\"\\u20db\",\"triplus;\":\"\\u2a39\",\"trisb;\":\"\\u29cd\",\"tritime;\":\"\\u2a3b\",\"trpezium;\":\"\\u23e2\",\"Tscr;\":\"\\ud835\\udcaf\",\"tscr;\":\"\\ud835\\udcc9\",\"TScy;\":\"\\u0426\",\"tscy;\":\"\\u0446\",\"TSHcy;\":\"\\u040b\",\"tshcy;\":\"\\u045b\",\"Tstrok;\":\"\\u0166\",\"tstrok;\":\"\\u0167\",\"twixt;\":\"\\u226c\",\"twoheadleftarrow;\":\"\\u219e\",\"twoheadrightarrow;\":\"\\u21a0\",\"Uacute;\":\"\\u00da\",Uacute:\"\\u00da\",\"uacute;\":\"\\u00fa\",uacute:\"\\u00fa\",\"uarr;\":\"\\u2191\",\"Uarr;\":\"\\u219f\",\"uArr;\":\"\\u21d1\",\"Uarrocir;\":\"\\u2949\",\"Ubrcy;\":\"\\u040e\",\"ubrcy;\":\"\\u045e\",\"Ubreve;\":\"\\u016c\",\"ubreve;\":\"\\u016d\",\"Ucirc;\":\"\\u00db\",Ucirc:\"\\u00db\",\"ucirc;\":\"\\u00fb\",ucirc:\"\\u00fb\",\"Ucy;\":\"\\u0423\",\"ucy;\":\"\\u0443\",\"udarr;\":\"\\u21c5\",\"Udblac;\":\"\\u0170\",\"udblac;\":\"\\u0171\",\"udhar;\":\"\\u296e\",\"ufisht;\":\"\\u297e\",\"Ufr;\":\"\\ud835\\udd18\",\"ufr;\":\"\\ud835\\udd32\",\"Ugrave;\":\"\\u00d9\",Ugrave:\"\\u00d9\",\"ugrave;\":\"\\u00f9\",ugrave:\"\\u00f9\",\"uHar;\":\"\\u2963\",\"uharl;\":\"\\u21bf\",\"uharr;\":\"\\u21be\",\"uhblk;\":\"\\u2580\",\"ulcorn;\":\"\\u231c\",\"ulcorner;\":\"\\u231c\",\"ulcrop;\":\"\\u230f\",\"ultri;\":\"\\u25f8\",\"Umacr;\":\"\\u016a\",\"umacr;\":\"\\u016b\",\"uml;\":\"\\u00a8\",uml:\"\\u00a8\",\"UnderBar;\":\"_\",\"UnderBrace;\":\"\\u23df\",\"UnderBracket;\":\"\\u23b5\",\"UnderParenthesis;\":\"\\u23dd\",\"Union;\":\"\\u22c3\",\"UnionPlus;\":\"\\u228e\",\"Uogon;\":\"\\u0172\",\"uogon;\":\"\\u0173\",\"Uopf;\":\"\\ud835\\udd4c\",\"uopf;\":\"\\ud835\\udd66\",\"UpArrowBar;\":\"\\u2912\",\"uparrow;\":\"\\u2191\",\"UpArrow;\":\"\\u2191\",\"Uparrow;\":\"\\u21d1\",\"UpArrowDownArrow;\":\"\\u21c5\",\"updownarrow;\":\"\\u2195\",\"UpDownArrow;\":\"\\u2195\",\"Updownarrow;\":\"\\u21d5\",\"UpEquilibrium;\":\"\\u296e\",\"upharpoonleft;\":\"\\u21bf\",\"upharpoonright;\":\"\\u21be\",\"uplus;\":\"\\u228e\",\"UpperLeftArrow;\":\"\\u2196\",\"UpperRightArrow;\":\"\\u2197\",\"upsi;\":\"\\u03c5\",\"Upsi;\":\"\\u03d2\",\"upsih;\":\"\\u03d2\",\"Upsilon;\":\"\\u03a5\",\"upsilon;\":\"\\u03c5\",\"UpTeeArrow;\":\"\\u21a5\",\"UpTee;\":\"\\u22a5\",\"upuparrows;\":\"\\u21c8\",\"urcorn;\":\"\\u231d\",\"urcorner;\":\"\\u231d\",\"urcrop;\":\"\\u230e\",\"Uring;\":\"\\u016e\",\"uring;\":\"\\u016f\",\"urtri;\":\"\\u25f9\",\"Uscr;\":\"\\ud835\\udcb0\",\"uscr;\":\"\\ud835\\udcca\",\"utdot;\":\"\\u22f0\",\"Utilde;\":\"\\u0168\",\"utilde;\":\"\\u0169\",\"utri;\":\"\\u25b5\",\"utrif;\":\"\\u25b4\",\"uuarr;\":\"\\u21c8\",\"Uuml;\":\"\\u00dc\",Uuml:\"\\u00dc\",\"uuml;\":\"\\u00fc\",uuml:\"\\u00fc\",\"uwangle;\":\"\\u29a7\",\"vangrt;\":\"\\u299c\",\"varepsilon;\":\"\\u03f5\",\"varkappa;\":\"\\u03f0\",\"varnothing;\":\"\\u2205\",\"varphi;\":\"\\u03d5\",\"varpi;\":\"\\u03d6\",\"varpropto;\":\"\\u221d\",\"varr;\":\"\\u2195\",\"vArr;\":\"\\u21d5\",\"varrho;\":\"\\u03f1\",\"varsigma;\":\"\\u03c2\",\"varsubsetneq;\":\"\\u228a\\ufe00\",\"varsubsetneqq;\":\"\\u2acb\\ufe00\",\"varsupsetneq;\":\"\\u228b\\ufe00\",\"varsupsetneqq;\":\"\\u2acc\\ufe00\",\"vartheta;\":\"\\u03d1\",\"vartriangleleft;\":\"\\u22b2\",\"vartriangleright;\":\"\\u22b3\",\"vBar;\":\"\\u2ae8\",\"Vbar;\":\"\\u2aeb\",\"vBarv;\":\"\\u2ae9\",\"Vcy;\":\"\\u0412\",\"vcy;\":\"\\u0432\",\"vdash;\":\"\\u22a2\",\"vDash;\":\"\\u22a8\",\"Vdash;\":\"\\u22a9\",\"VDash;\":\"\\u22ab\",\"Vdashl;\":\"\\u2ae6\",\"veebar;\":\"\\u22bb\",\"vee;\":\"\\u2228\",\"Vee;\":\"\\u22c1\",\"veeeq;\":\"\\u225a\",\"vellip;\":\"\\u22ee\",\"verbar;\":\"|\",\"Verbar;\":\"\\u2016\",\"vert;\":\"|\",\"Vert;\":\"\\u2016\",\"VerticalBar;\":\"\\u2223\",\"VerticalLine;\":\"|\",\"VerticalSeparator;\":\"\\u2758\",\"VerticalTilde;\":\"\\u2240\",\"VeryThinSpace;\":\"\\u200a\",\"Vfr;\":\"\\ud835\\udd19\",\"vfr;\":\"\\ud835\\udd33\",\"vltri;\":\"\\u22b2\",\"vnsub;\":\"\\u2282\\u20d2\",\"vnsup;\":\"\\u2283\\u20d2\",\"Vopf;\":\"\\ud835\\udd4d\",\"vopf;\":\"\\ud835\\udd67\",\"vprop;\":\"\\u221d\",\"vrtri;\":\"\\u22b3\",\"Vscr;\":\"\\ud835\\udcb1\",\"vscr;\":\"\\ud835\\udccb\",\"vsubnE;\":\"\\u2acb\\ufe00\",\"vsubne;\":\"\\u228a\\ufe00\",\"vsupnE;\":\"\\u2acc\\ufe00\",\"vsupne;\":\"\\u228b\\ufe00\",\"Vvdash;\":\"\\u22aa\",\"vzigzag;\":\"\\u299a\",\"Wcirc;\":\"\\u0174\",\"wcirc;\":\"\\u0175\",\"wedbar;\":\"\\u2a5f\",\"wedge;\":\"\\u2227\",\"Wedge;\":\"\\u22c0\",\"wedgeq;\":\"\\u2259\",\"weierp;\":\"\\u2118\",\"Wfr;\":\"\\ud835\\udd1a\",\"wfr;\":\"\\ud835\\udd34\",\"Wopf;\":\"\\ud835\\udd4e\",\"wopf;\":\"\\ud835\\udd68\",\"wp;\":\"\\u2118\",\"wr;\":\"\\u2240\",\"wreath;\":\"\\u2240\",\"Wscr;\":\"\\ud835\\udcb2\",\"wscr;\":\"\\ud835\\udccc\",\"xcap;\":\"\\u22c2\",\"xcirc;\":\"\\u25ef\",\"xcup;\":\"\\u22c3\",\"xdtri;\":\"\\u25bd\",\"Xfr;\":\"\\ud835\\udd1b\",\"xfr;\":\"\\ud835\\udd35\",\"xharr;\":\"\\u27f7\",\"xhArr;\":\"\\u27fa\",\"Xi;\":\"\\u039e\",\"xi;\":\"\\u03be\",\"xlarr;\":\"\\u27f5\",\"xlArr;\":\"\\u27f8\",\"xmap;\":\"\\u27fc\",\"xnis;\":\"\\u22fb\",\"xodot;\":\"\\u2a00\",\"Xopf;\":\"\\ud835\\udd4f\",\"xopf;\":\"\\ud835\\udd69\",\"xoplus;\":\"\\u2a01\",\"xotime;\":\"\\u2a02\",\"xrarr;\":\"\\u27f6\",\"xrArr;\":\"\\u27f9\",\"Xscr;\":\"\\ud835\\udcb3\",\"xscr;\":\"\\ud835\\udccd\",\"xsqcup;\":\"\\u2a06\",\"xuplus;\":\"\\u2a04\",\"xutri;\":\"\\u25b3\",\"xvee;\":\"\\u22c1\",\"xwedge;\":\"\\u22c0\",\"Yacute;\":\"\\u00dd\",Yacute:\"\\u00dd\",\"yacute;\":\"\\u00fd\",yacute:\"\\u00fd\",\"YAcy;\":\"\\u042f\",\"yacy;\":\"\\u044f\",\"Ycirc;\":\"\\u0176\",\"ycirc;\":\"\\u0177\",\"Ycy;\":\"\\u042b\",\"ycy;\":\"\\u044b\",\"yen;\":\"\\u00a5\",yen:\"\\u00a5\",\"Yfr;\":\"\\ud835\\udd1c\",\"yfr;\":\"\\ud835\\udd36\",\"YIcy;\":\"\\u0407\",\"yicy;\":\"\\u0457\",\"Yopf;\":\"\\ud835\\udd50\",\"yopf;\":\"\\ud835\\udd6a\",\"Yscr;\":\"\\ud835\\udcb4\",\"yscr;\":\"\\ud835\\udcce\",\"YUcy;\":\"\\u042e\",\"yucy;\":\"\\u044e\",\"yuml;\":\"\\u00ff\",yuml:\"\\u00ff\",\"Yuml;\":\"\\u0178\",\"Zacute;\":\"\\u0179\",\"zacute;\":\"\\u017a\",\"Zcaron;\":\"\\u017d\",\"zcaron;\":\"\\u017e\",\"Zcy;\":\"\\u0417\",\"zcy;\":\"\\u0437\",\"Zdot;\":\"\\u017b\",\"zdot;\":\"\\u017c\",\"zeetrf;\":\"\\u2128\",\"ZeroWidthSpace;\":\"\\u200b\",\"Zeta;\":\"\\u0396\",\"zeta;\":\"\\u03b6\",\"zfr;\":\"\\ud835\\udd37\",\"Zfr;\":\"\\u2128\",\"ZHcy;\":\"\\u0416\",\"zhcy;\":\"\\u0436\",\"zigrarr;\":\"\\u21dd\",\"zopf;\":\"\\ud835\\udd6b\",\"Zopf;\":\"\\u2124\",\"Zscr;\":\"\\ud835\\udcb5\",\"zscr;\":\"\\ud835\\udccf\",\"zwj;\":\"\\u200d\",\"zwnj;\":\"\\u200c\"}},{}],13:[function(e,t,n){function u(e,t){return r.isUndefined(t)?\"\"+t:r.isNumber(t)&&(isNaN(t)||!isFinite(t))?t.toString():r.isFunction(t)||r.isRegExp(t)?t.toString():t}function a(e,t){return r.isString(e)?e.length<t?e:e.slice(0,t):e}function f(e){return a(JSON.stringify(e.actual,u),128)+\" \"+e.operator+\" \"+a(JSON.stringify(e.expected,u),128)}function l(e,t,n,r,i){throw new o.AssertionError({message:n,actual:e,expected:t,operator:r,stackStartFunction:i})}function c(e,t){e||l(e,!0,t,\"==\",o.ok)}function h(e,t){if(e===t)return!0;if(r.isBuffer(e)&&r.isBuffer(t)){if(e.length!=t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}return r.isDate(e)&&r.isDate(t)?e.getTime()===t.getTime():r.isRegExp(e)&&r.isRegExp(t)?e.source===t.source&&e.global===t.global&&e.multiline===t.multiline&&e.lastIndex===t.lastIndex&&e.ignoreCase===t.ignoreCase:!r.isObject(e)&&!r.isObject(t)?e==t:d(e,t)}function p(e){return Object.prototype.toString.call(e)==\"[object Arguments]\"}function d(e,t){if(r.isNullOrUndefined(e)||r.isNullOrUndefined(t))return!1;if(e.prototype!==t.prototype)return!1;if(p(e))return p(t)?(e=i.call(e),t=i.call(t),h(e,t)):!1;try{var n=g(e),s=g(t),o,u}catch(a){return!1}if(n.length!=s.length)return!1;n.sort(),s.sort();for(u=n.length-1;u>=0;u--)if(n[u]!=s[u])return!1;for(u=n.length-1;u>=0;u--){o=n[u];if(!h(e[o],t[o]))return!1}return!0}function v(e,t){return!e||!t?!1:Object.prototype.toString.call(t)==\"[object RegExp]\"?t.test(e):e instanceof t?!0:t.call({},e)===!0?!0:!1}function m(e,t,n,i){var s;r.isString(n)&&(i=n,n=null);try{t()}catch(o){s=o}i=(n&&n.name?\" (\"+n.name+\").\":\".\")+(i?\" \"+i:\".\"),e&&!s&&l(s,n,\"Missing expected exception\"+i),!e&&v(s,n)&&l(s,n,\"Got unwanted exception\"+i);if(e&&s&&n&&!v(s,n)||!e&&s)throw s}var r=e(\"util/\"),i=Array.prototype.slice,s=Object.prototype.hasOwnProperty,o=t.exports=c;o.AssertionError=function(t){this.name=\"AssertionError\",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=f(this),this.generatedMessage=!0);var n=t.stackStartFunction||l;if(Error.captureStackTrace)Error.captureStackTrace(this,n);else{var r=new Error;if(r.stack){var i=r.stack,s=n.name,o=i.indexOf(\"\\n\"+s);if(o>=0){var u=i.indexOf(\"\\n\",o+1);i=i.substring(u+1)}this.stack=i}}},r.inherits(o.AssertionError,Error),o.fail=l,o.ok=c,o.equal=function(t,n,r){t!=n&&l(t,n,r,\"==\",o.equal)},o.notEqual=function(t,n,r){t==n&&l(t,n,r,\"!=\",o.notEqual)},o.deepEqual=function(t,n,r){h(t,n)||l(t,n,r,\"deepEqual\",o.deepEqual)},o.notDeepEqual=function(t,n,r){h(t,n)&&l(t,n,r,\"notDeepEqual\",o.notDeepEqual)},o.strictEqual=function(t,n,r){t!==n&&l(t,n,r,\"===\",o.strictEqual)},o.notStrictEqual=function(t,n,r){t===n&&l(t,n,r,\"!==\",o.notStrictEqual)},o.throws=function(e,t,n){m.apply(this,[!0].concat(i.call(arguments)))},o.doesNotThrow=function(e,t){m.apply(this,[!1].concat(i.call(arguments)))},o.ifError=function(e){if(e)throw e};var g=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}},{\"util/\":15}],14:[function(e,t,n){t.exports=function(t){return t&&typeof t==\"object\"&&typeof t.copy==\"function\"&&typeof t.fill==\"function\"&&typeof t.readUInt8==\"function\"}},{}],15:[function(e,t,n){(function(t,r){function u(e,t){var r={seen:[],stylize:f};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),y(t)?r.showHidden=t:t&&n._extend(r,t),T(r.showHidden)&&(r.showHidden=!1),T(r.depth)&&(r.depth=2),T(r.colors)&&(r.colors=!1),T(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=a),c(r,e,r.depth)}function a(e,t){var n=u.styles[t];return n?\"\u001b[\"+u.colors[n][0]+\"m\"+e+\"\u001b[\"+u.colors[n][1]+\"m\":e}function f(e,t){return e}function l(e){var t={};return e.forEach(function(e,n){t[e]=!0}),t}function c(e,t,r){if(e.customInspect&&t&&A(t.inspect)&&t.inspect!==n.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(r,e);return S(i)||(i=c(e,i,r)),i}var s=h(e,t);if(s)return s;var o=Object.keys(t),u=l(o);e.showHidden&&(o=Object.getOwnPropertyNames(t));if(L(t)&&(o.indexOf(\"message\")>=0||o.indexOf(\"description\")>=0))return p(t);if(o.length===0){if(A(t)){var a=t.name?\": \"+t.name:\"\";return e.stylize(\"[Function\"+a+\"]\",\"special\")}if(N(t))return e.stylize(RegExp.prototype.toString.call(t),\"regexp\");if(k(t))return e.stylize(Date.prototype.toString.call(t),\"date\");if(L(t))return p(t)}var f=\"\",y=!1,b=[\"{\",\"}\"];g(t)&&(y=!0,b=[\"[\",\"]\"]);if(A(t)){var w=t.name?\": \"+t.name:\"\";f=\" [Function\"+w+\"]\"}N(t)&&(f=\" \"+RegExp.prototype.toString.call(t)),k(t)&&(f=\" \"+Date.prototype.toUTCString.call(t)),L(t)&&(f=\" \"+p(t));if(o.length!==0||!!y&&t.length!=0){if(r<0)return N(t)?e.stylize(RegExp.prototype.toString.call(t),\"regexp\"):e.stylize(\"[Object]\",\"special\");e.seen.push(t);var E;return y?E=d(e,t,r,u,o):E=o.map(function(n){return v(e,t,r,u,n,y)}),e.seen.pop(),m(E,f,b)}return b[0]+f+b[1]}function h(e,t){if(T(t))return e.stylize(\"undefined\",\"undefined\");if(S(t)){var n=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(n,\"string\")}if(E(t))return e.stylize(\"\"+t,\"number\");if(y(t))return e.stylize(\"\"+t,\"boolean\");if(b(t))return e.stylize(\"null\",\"null\")}function p(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function d(e,t,n,r,i){var s=[];for(var o=0,u=t.length;o<u;++o)H(t,String(o))?s.push(v(e,t,n,r,String(o),!0)):s.push(\"\");return i.forEach(function(i){i.match(/^\\d+$/)||s.push(v(e,t,n,r,i,!0))}),s}function v(e,t,n,r,i,s){var o,u,a;a=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]},a.get?a.set?u=e.stylize(\"[Getter/Setter]\",\"special\"):u=e.stylize(\"[Getter]\",\"special\"):a.set&&(u=e.stylize(\"[Setter]\",\"special\")),H(r,i)||(o=\"[\"+i+\"]\"),u||(e.seen.indexOf(a.value)<0?(b(n)?u=c(e,a.value,null):u=c(e,a.value,n-1),u.indexOf(\"\\n\")>-1&&(s?u=u.split(\"\\n\").map(function(e){return\"  \"+e}).join(\"\\n\").substr(2):u=\"\\n\"+u.split(\"\\n\").map(function(e){return\"   \"+e}).join(\"\\n\"))):u=e.stylize(\"[Circular]\",\"special\"));if(T(o)){if(s&&i.match(/^\\d+$/))return u;o=JSON.stringify(\"\"+i),o.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,\"name\")):(o=o.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),o=e.stylize(o,\"string\"))}return o+\": \"+u}function m(e,t,n){var r=0,i=e.reduce(function(e,t){return r++,t.indexOf(\"\\n\")>=0&&r++,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1},0);return i>60?n[0]+(t===\"\"?\"\":t+\"\\n \")+\" \"+e.join(\",\\n  \")+\" \"+n[1]:n[0]+t+\" \"+e.join(\", \")+\" \"+n[1]}function g(e){return Array.isArray(e)}function y(e){return typeof e==\"boolean\"}function b(e){return e===null}function w(e){return e==null}function E(e){return typeof e==\"number\"}function S(e){return typeof e==\"string\"}function x(e){return typeof e==\"symbol\"}function T(e){return e===void 0}function N(e){return C(e)&&M(e)===\"[object RegExp]\"}function C(e){return typeof e==\"object\"&&e!==null}function k(e){return C(e)&&M(e)===\"[object Date]\"}function L(e){return C(e)&&(M(e)===\"[object Error]\"||e instanceof Error)}function A(e){return typeof e==\"function\"}function O(e){return e===null||typeof e==\"boolean\"||typeof e==\"number\"||typeof e==\"string\"||typeof e==\"symbol\"||typeof e==\"undefined\"}function M(e){return Object.prototype.toString.call(e)}function _(e){return e<10?\"0\"+e.toString(10):e.toString(10)}function P(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(\":\");return[e.getDate(),D[e.getMonth()],t].join(\" \")}function H(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var i=/%[sdj%]/g;n.format=function(e){if(!S(e)){var t=[];for(var n=0;n<arguments.length;n++)t.push(u(arguments[n]));return t.join(\" \")}var n=1,r=arguments,s=r.length,o=String(e).replace(i,function(e){if(e===\"%%\")return\"%\";if(n>=s)return e;switch(e){case\"%s\":return String(r[n++]);case\"%d\":return Number(r[n++]);case\"%j\":try{return JSON.stringify(r[n++])}catch(t){return\"[Circular]\"};default:return e}});for(var a=r[n];n<s;a=r[++n])b(a)||!C(a)?o+=\" \"+a:o+=\" \"+u(a);return o},n.deprecate=function(e,i){function o(){if(!s){if(t.throwDeprecation)throw new Error(i);t.traceDeprecation?console.trace(i):console.error(i),s=!0}return e.apply(this,arguments)}if(T(r.process))return function(){return n.deprecate(e,i).apply(this,arguments)};if(t.noDeprecation===!0)return e;var s=!1;return o};var s={},o;n.debuglog=function(e){T(o)&&(o=t.env.NODE_DEBUG||\"\"),e=e.toUpperCase();if(!s[e])if((new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\")).test(o)){var r=t.pid;s[e]=function(){var t=n.format.apply(n,arguments);console.error(\"%s %d: %s\",e,r,t)}}else s[e]=function(){};return s[e]},n.inspect=u,u.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},u.styles={special:\"cyan\",number:\"yellow\",\"boolean\":\"yellow\",\"undefined\":\"grey\",\"null\":\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},n.isArray=g,n.isBoolean=y,n.isNull=b,n.isNullOrUndefined=w,n.isNumber=E,n.isString=S,n.isSymbol=x,n.isUndefined=T,n.isRegExp=N,n.isObject=C,n.isDate=k,n.isError=L,n.isFunction=A,n.isPrimitive=O,n.isBuffer=e(\"./support/isBuffer\");var D=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];n.log=function(){console.log(\"%s - %s\",P(),n.format.apply(n,arguments))},n.inherits=e(\"inherits\"),n._extend=function(e,t){if(!t||!C(t))return e;var n=Object.keys(t),r=n.length;while(r--)e[n[r]]=t[n[r]];return e}}).call(this,e(\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\"),typeof self!=\"undefined\"?self:typeof window!=\"undefined\"?window:{})},{\"./support/isBuffer\":14,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,inherits:17}],16:[function(e,t,n){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||undefined}function i(e){return typeof e==\"function\"}function s(e){return typeof e==\"number\"}function o(e){return typeof e==\"object\"&&e!==null}function u(e){return e===void 0}t.exports=r,r.EventEmitter=r,r.prototype._events=undefined,r.prototype._maxListeners=undefined,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!s(e)||e<0||isNaN(e))throw TypeError(\"n must be a positive number\");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,n,r,s,a,f;this._events||(this._events={});if(e===\"error\")if(!this._events.error||o(this._events.error)&&!this._events.error.length)throw t=arguments[1],t instanceof Error?t:TypeError('Uncaught, unspecified \"error\" event.');n=this._events[e];if(u(n))return!1;if(i(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];n.apply(this,s)}else if(o(n)){r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];f=n.slice(),r=f.length;for(a=0;a<r;a++)f[a].apply(this,s)}return!0},r.prototype.addListener=function(e,t){var n;if(!i(t))throw TypeError(\"listener must be a function\");this._events||(this._events={}),this._events.newListener&&this.emit(\"newListener\",e,i(t.listener)?t.listener:t),this._events[e]?o(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t;if(o(this._events[e])&&!this._events[e].warned){var n;u(this._maxListeners)?n=r.defaultMaxListeners:n=this._maxListeners,n&&n>0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error(\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\",this._events[e].length),console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError(\"listener must be a function\");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError(\"listener must be a function\");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit(\"removeListener\",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit(\"removeListener\",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t===\"removeListener\")continue;this.removeAllListeners(t)}return this.removeAllListeners(\"removeListener\"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}],17:[function(e,t,n){typeof Object.create==\"function\"?t.exports=function(t,n){t.super_=n,t.prototype=Object.create(n.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,n){t.super_=n;var r=function(){};r.prototype=n.prototype,t.prototype=new r,t.prototype.constructor=t}},{}],18:[function(e,t,n){function i(){}var r=t.exports={};r.nextTick=function(){var e=typeof window!=\"undefined\"&&window.setImmediate,t=typeof window!=\"undefined\"&&window.postMessage&&window.addEventListener;if(e)return function(e){return window.setImmediate(e)};if(t){var n=[];return window.addEventListener(\"message\",function(e){var t=e.source;if((t===window||t===null)&&e.data===\"process-tick\"){e.stopPropagation();if(n.length>0){var r=n.shift();r()}}},!0),function(t){n.push(t),window.postMessage(\"process-tick\",\"*\")}}return function(t){setTimeout(t,0)}}(),r.title=\"browser\",r.browser=!0,r.env={},r.argv=[],r.on=i,r.once=i,r.off=i,r.emit=i,r.binding=function(e){throw new Error(\"process.binding is not supported\")},r.cwd=function(){return\"/\"},r.chdir=function(e){throw new Error(\"process.chdir is not supported\")}},{}],19:[function(e,t,n){t.exports=e(14)},{}],20:[function(e,t,n){t.exports=e(15)},{\"./support/isBuffer\":19,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,inherits:17}]},{},[9])(9)}),ace.define(\"ace/mode/html_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./html/saxparser\").SAXParser,u={\"expected-doctype-but-got-start-tag\":\"info\",\"expected-doctype-but-got-chars\":\"info\",\"non-html-root\":\"info\"},a=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.context=null};r.inherits(a,s),function(){this.setOptions=function(e){this.context=e.context},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return;var t=new o,n=[],r=function(){};t.contentHandler={startDocument:r,endDocument:r,startElement:r,endElement:r,characters:r},t.errorHandler={error:function(e,t,r){n.push({row:t.line,column:t.column,text:e,type:u[r]||\"error\"})}},this.context?t.parseFragment(e,this.context):t.parse(e),this.sender.emit(\"error\",n)}}.call(a.prototype)}),ace.define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/worker-javascript.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/javascript/jshint\",[],function(e,t,n){n.exports=function r(t,n,i){function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(s)return s(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return o(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var s=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)o(i[u]);return o(i[0])}({\"/node_modules/browserify/node_modules/events/events.js\":[function(e,t,n){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||undefined}function i(e){return typeof e==\"function\"}function s(e){return typeof e==\"number\"}function o(e){return typeof e==\"object\"&&e!==null}function u(e){return e===void 0}t.exports=r,r.EventEmitter=r,r.prototype._events=undefined,r.prototype._maxListeners=undefined,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!s(e)||e<0||isNaN(e))throw TypeError(\"n must be a positive number\");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,n,r,s,a,f;this._events||(this._events={});if(e===\"error\")if(!this._events.error||o(this._events.error)&&!this._events.error.length)throw t=arguments[1],t instanceof Error?t:TypeError('Uncaught, unspecified \"error\" event.');n=this._events[e];if(u(n))return!1;if(i(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];n.apply(this,s)}else if(o(n)){r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];f=n.slice(),r=f.length;for(a=0;a<r;a++)f[a].apply(this,s)}return!0},r.prototype.addListener=function(e,t){var n;if(!i(t))throw TypeError(\"listener must be a function\");this._events||(this._events={}),this._events.newListener&&this.emit(\"newListener\",e,i(t.listener)?t.listener:t),this._events[e]?o(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t;if(o(this._events[e])&&!this._events[e].warned){var n;u(this._maxListeners)?n=r.defaultMaxListeners:n=this._maxListeners,n&&n>0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error(\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\",this._events[e].length),typeof console.trace==\"function\"&&console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError(\"listener must be a function\");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError(\"listener must be a function\");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit(\"removeListener\",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit(\"removeListener\",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t===\"removeListener\")continue;this.removeAllListeners(t)}return this.removeAllListeners(\"removeListener\"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}],\"/node_modules/jshint/data/ascii-identifier-data.js\":[function(e,t,n){var r=[];for(var i=0;i<128;i++)r[i]=i===36||i>=65&&i<=90||i===95||i>=97&&i<=122;var s=[];for(var i=0;i<128;i++)s[i]=r[i]||i>=48&&i<=57;t.exports={asciiIdentifierStartTable:r,asciiIdentifierPartTable:s}},{}],\"/node_modules/jshint/lodash.js\":[function(e,t,n){(function(e){(function(){function $(e,t,n){var r=e.length,i=n?r:-1;while(n?i--:++i<r)if(t(e[i],i,e))return i;return-1}function J(e,t,n){if(t!==t)return G(e,n);var r=n-1,i=e.length;while(++r<i)if(e[r]===t)return r;return-1}function K(e){return typeof e==\"function\"||!1}function Q(e){return typeof e==\"string\"?e:e==null?\"\":e+\"\"}function G(e,t,n){var r=e.length,i=t+(n?0:-1);while(n?i--:++i<r){var s=e[i];if(s!==s)return i}return-1}function Y(e){return!!e&&typeof e==\"object\"}function Ct(){}function Lt(e,t){var n=-1,r=e.length;t||(t=Array(r));while(++n<r)t[n]=e[n];return t}function At(e,t){var n=-1,r=e.length;while(++n<r)if(t(e[n],n,e)===!1)break;return e}function Ot(e,t){var n=-1,r=e.length,i=-1,s=[];while(++n<r){var o=e[n];t(o,n,e)&&(s[++i]=o)}return s}function Mt(e,t){var n=-1,r=e.length,i=Array(r);while(++n<r)i[n]=t(e[n],n,e);return i}function _t(e){var t=-1,n=e.length,r=wt;while(++t<n){var i=e[t];i>r&&(r=i)}return r}function Dt(e,t){var n=-1,r=e.length;while(++n<r)if(t(e[n],n,e))return!0;return!1}function Pt(e,t,n){var i=rr(t);lt.apply(i,bn(t));var s=-1,o=i.length;while(++s<o){var u=i[s],a=e[u],f=n(a,t[u],u,e,t);if((f===f?f!==a:a===a)||a===r&&!(u in e))e[u]=f}return e}function Bt(e,t,n){n||(n={});var r=-1,i=t.length;while(++r<i){var s=t[r];n[s]=e[s]}return n}function jt(e,t,n){var i=typeof e;return i==\"function\"?t===r?e:on(e,t,n):e==null?lr:i==\"object\"?Jt(e):t===r?cr(e):Kt(e,t)}function Ft(e,t,n,i,s,u,a){var f;n&&(f=s?n(e,i,s):n(e));if(f!==r)return f;if(!Jn(e))return e;var l=Xn(e);if(l){f=wn(e);if(!t)return Lt(e,f)}else{var h=rt.call(e),p=h==c;if(!(h==d||h==o||p&&!s))return F[h]?Sn(e,h,t):s?e:{};f=En(p?{}:e);if(!t)return Ht(f,e)}u||(u=[]),a||(a=[]);var v=u.length;while(v--)if(u[v]==e)return a[v];return u.push(e),a.push(f),(l?At:zt)(e,function(r,i){f[i]=Ft(r,t,n,i,e,u,a)}),f}function qt(e,t){var n=[];return It(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function Ut(e,t){return Rt(e,t,ir)}function zt(e,t){return Rt(e,t,rr)}function Wt(e,t,n){if(e==null)return;n!==r&&n in On(e)&&(t=[n]);var i=-1,s=t.length;while(e!=null&&++i<s)var o=e=e[t[i]];return o}function Xt(e,t,n,r,i,s){if(e===t)return e!==0||1/e==1/t;var o=typeof e,u=typeof t;return o!=\"function\"&&o!=\"object\"&&u!=\"function\"&&u!=\"object\"||e==null||t==null?e!==e&&t!==t:Vt(e,t,Xt,n,r,i,s)}function Vt(e,t,n,r,i,s,a){var f=Xn(e),l=Xn(t),c=u,h=u;f||(c=rt.call(e),c==o?c=d:c!=d&&(f=Zn(e))),l||(h=rt.call(t),h==o?h=d:h!=d&&(l=Zn(t)));var p=c==d,v=h==d,m=c==h;if(m&&!f&&!p)return dn(e,t,c);if(!i){var g=p&&nt.call(e,\"__wrapped__\"),y=v&&nt.call(t,\"__wrapped__\");if(g||y)return n(g?e.value():e,y?t.value():t,r,i,s,a)}if(!m)return!1;s||(s=[]),a||(a=[]);var b=s.length;while(b--)if(s[b]==e)return a[b]==t;s.push(e),a.push(t);var w=(f?pn:vn)(e,t,n,r,i,s,a);return s.pop(),a.pop(),w}function $t(e,t,n,i,s){var o=-1,u=t.length,a=!s;while(++o<u)if(a&&i[o]?n[o]!==e[t[o]]:!(t[o]in e))return!1;o=-1;while(++o<u){var f=t[o],l=e[f],c=n[o];if(a&&i[o])var h=l!==r||f in e;else h=s?s(l,c,f):r,h===r&&(h=Xt(c,l,s,!0));if(!h)return!1}return!0}function Jt(e){var t=rr(e),n=t.length;if(!n)return fr(!0);if(n==1){var i=t[0],s=e[i];if(kn(s))return function(e){return e==null?!1:e[i]===s&&(s!==r||i in On(e))}}var o=Array(n),u=Array(n);while(n--)s=e[t[n]],o[n]=s,u[n]=kn(s);return function(e){return e!=null&&$t(On(e),t,o,u)}}function Kt(e,t){var n=Xn(e),i=Nn(e)&&kn(t),s=e+\"\";return e=Mn(e),function(o){if(o==null)return!1;var u=s;o=On(o);if((n||!i)&&!(u in o)){o=e.length==1?o:Wt(o,en(e,0,-1));if(o==null)return!1;u=Pn(e),o=On(o)}return o[u]===t?t!==r||u in o:Xt(t,o[u],null,!0)}}function Qt(e,t,n,i,s){if(!Jn(e))return e;var o=Cn(t.length)&&(Xn(t)||Zn(t));if(!o){var u=rr(t);lt.apply(u,bn(t))}return At(u||t,function(a,f){u&&(f=a,a=t[f]);if(Y(a))i||(i=[]),s||(s=[]),Gt(e,t,f,Qt,n,i,s);else{var l=e[f],c=n?n(l,a,f,e,t):r,h=c===r;h&&(c=a),(o||c!==r)&&(h||(c===c?c!==l:l===l))&&(e[f]=c)}}),e}function Gt(e,t,n,i,s,o,u){var a=o.length,f=t[n];while(a--)if(o[a]==f){e[n]=u[a];return}var l=e[n],c=s?s(l,f,n,e,t):r,h=c===r;h&&(c=f,Cn(f.length)&&(Xn(f)||Zn(f))?c=Xn(l)?l:yn(l)?Lt(l):[]:Gn(f)||Wn(f)?c=Wn(l)?er(l):Gn(l)?l:{}:h=!1),o.push(f),u.push(c);if(h)e[n]=i(c,f,s,o,u);else if(c===c?c!==l:l===l)e[n]=c}function Yt(e){return function(t){return t==null?r:t[e]}}function Zt(e){var t=e+\"\";return e=Mn(e),function(n){return Wt(n,e,t)}}function en(e,t,n){var i=-1,s=e.length;t=t==null?0:+t||0,t<0&&(t=-t>s?0:s+t),n=n===r||n>s?s:+n||0,n<0&&(n+=s),s=t>n?0:n-t>>>0,t>>>=0;var o=Array(s);while(++i<s)o[i]=e[i+t];return o}function tn(e,t){var n;return It(e,function(e,r,i){return n=t(e,r,i),!n}),!!n}function nn(e,t){var n=-1,r=t.length,i=Array(r);while(++n<r)i[n]=e[t[n]];return i}function rn(e,t,n){var r=0,i=e?e.length:r;if(typeof t==\"number\"&&t===t&&i<=xt){while(r<i){var s=r+i>>>1,o=e[s];(n?o<=t:o<t)?r=s+1:i=s}return i}return sn(e,t,lr,n)}function sn(e,t,n,i){t=n(t);var s=0,o=e?e.length:0,u=t!==t,a=t===r;while(s<o){var f=ut((s+o)/2),l=n(e[f]),c=l===l;if(u)var h=c||i;else a?h=c&&(i||l!==r):h=i?l<=t:l<t;h?s=f+1:o=f}return bt(o,St)}function on(e,t,n){if(typeof e!=\"function\")return lr;if(t===r)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,i){return e.call(t,n,r,i)};case 4:return function(n,r,i,s){return e.call(t,n,r,i,s)};case 5:return function(n,r,i,s,o){return e.call(t,n,r,i,s,o)}}return function(){return e.apply(t,arguments)}}function un(e){return ot.call(e,0)}function an(e){return Un(function(t,n){var r=-1,i=t==null?0:n.length,s=i>2&&n[i-2],o=i>2&&n[2],u=i>1&&n[i-1];typeof s==\"function\"?(s=on(s,u,5),i-=2):(s=typeof u==\"function\"?u:null,i-=s?1:0),o&&Tn(n[0],n[1],o)&&(s=i<3?null:s,i=1);while(++r<i){var a=n[r];a&&e(t,a,s)}return t})}function fn(e,t){return function(n,r){var i=n?yn(n):0;if(!Cn(i))return e(n,r);var s=t?i:-1,o=On(n);while(t?s--:++s<i)if(r(o[s],s,o)===!1)break;return n}}function ln(e){return function(t,n,r){var i=On(t),s=r(t),o=s.length,u=e?o:-1;while(e?u--:++u<o){var a=s[u];if(n(i[a],a,i)===!1)break}return t}}function cn(e){return function(t,n,r){return!t||!t.length?-1:(n=mn(n,r,3),$(t,n,e))}}function hn(e,t){return function(n,i,s){return typeof i==\"function\"&&s===r&&Xn(n)?e(n,i):t(n,on(i,s,3))}}function pn(e,t,n,i,s,o,u){var a=-1,f=e.length,l=t.length,c=!0;if(f!=l&&!(s&&l>f))return!1;while(c&&++a<f){var h=e[a],p=t[a];c=r,i&&(c=s?i(p,h,a):i(h,p,a));if(c===r)if(s){var d=l;while(d--){p=t[d],c=h&&h===p||n(h,p,i,s,o,u);if(c)break}}else c=h&&h===p||n(h,p,i,s,o,u)}return!!c}function dn(e,t,n){switch(n){case a:case f:return+e==+t;case l:return e.name==t.name&&e.message==t.message;case p:return e!=+e?t!=+t:e==0?1/e==1/t:e==+t;case v:case g:return e==t+\"\"}return!1}function vn(e,t,n,i,s,o,u){var a=rr(e),f=a.length,l=rr(t),c=l.length;if(f!=c&&!s)return!1;var h=s,p=-1;while(++p<f){var d=a[p],v=s?d in t:nt.call(t,d);if(v){var m=e[d],g=t[d];v=r,i&&(v=s?i(g,m,d):i(m,g,d)),v===r&&(v=m&&m===g||n(m,g,i,s,o,u))}if(!v)return!1;h||(h=d==\"constructor\")}if(!h){var y=e.constructor,b=t.constructor;if(y!=b&&\"constructor\"in e&&\"constructor\"in t&&!(typeof y==\"function\"&&y instanceof y&&typeof b==\"function\"&&b instanceof b))return!1}return!0}function mn(e,t,n){var r=Ct.callback||ar;return r=r===ar?jt:r,n?r(e,t,n):r}function gn(e,t,n){var r=Ct.indexOf||Dn;return r=r===Dn?J:r,e?r(e,t,n):r}function wn(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]==\"string\"&&nt.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}function En(e){var t=e.constructor;return typeof t==\"function\"&&t instanceof t||(t=Object),new t}function Sn(e,t,n){var r=e.constructor;switch(t){case b:return un(e);case a:case f:return new r(+e);case w:case E:case S:case x:case T:case N:case C:case k:case L:var i=e.buffer;return new r(n?un(i):i,e.byteOffset,e.length);case p:case g:return new r(e);case v:var s=new r(e.source,H.exec(e));s.lastIndex=e.lastIndex}return s}function xn(e,t){return e=+e,t=t==null?Nt:t,e>-1&&e%1==0&&e<t}function Tn(e,t,n){if(!Jn(n))return!1;var r=typeof t;if(r==\"number\")var i=yn(n),s=Cn(i)&&xn(t,i);else s=r==\"string\"&&t in n;if(s){var o=n[t];return e===e?e===o:o!==o}return!1}function Nn(e,t){var n=typeof e;if(n==\"string\"&&O.test(e)||n==\"number\")return!0;if(Xn(e))return!1;var r=!A.test(e);return r||t!=null&&e in On(t)}function Cn(e){return typeof e==\"number\"&&e>-1&&e%1==0&&e<=Nt}function kn(e){return e===e&&(e===0?1/e>0:!Jn(e))}function Ln(e){var t,n=Ct.support;if(!Y(e)||rt.call(e)!=d||!nt.call(e,\"constructor\")&&(t=e.constructor,typeof t==\"function\"&&!(t instanceof t)))return!1;var i;return Ut(e,function(e,t){i=t}),i===r||nt.call(e,i)}function An(e){var t=ir(e),n=t.length,r=n&&e.length,i=Ct.support,s=r&&Cn(r)&&(Xn(e)||i.nonEnumArgs&&Wn(e)),o=-1,u=[];while(++o<n){var a=t[o];(s&&xn(a,r)||nt.call(e,a))&&u.push(a)}return u}function On(e){return Jn(e)?e:Object(e)}function Mn(e){if(Xn(e))return e;var t=[];return Q(e).replace(M,function(e,n,r,i){t.push(r?i.replace(P,\"$1\"):n||e)}),t}function Dn(e,t,n){var r=e?e.length:0;if(!r)return-1;if(typeof n==\"number\")n=n<0?yt(r+n,0):n;else if(n){var i=rn(e,t),s=e[i];return(t===t?t===s:s!==s)?i:-1}return J(e,t,n||0)}function Pn(e){var t=e?e.length:0;return t?e[t-1]:r}function Hn(e,t,n){var r=e?e.length:0;return r?(n&&typeof n!=\"number\"&&Tn(e,t,n)&&(t=0,n=r),en(e,t,n)):[]}function Bn(e){var t=-1,n=(e&&e.length&&_t(Mt(e,yn)))>>>0,r=Array(n);while(++t<n)r[t]=Mt(e,Yt(t));return r}function In(e,t,n,r){var i=e?yn(e):0;return Cn(i)||(e=or(e),i=e.length),i?(typeof n!=\"number\"||r&&Tn(t,n,r)?n=0:n=n<0?yt(i+n,0):n||0,typeof e==\"string\"||!Xn(e)&&Yn(e)?n<i&&e.indexOf(t,n)>-1:gn(e,t,n)>-1):!1}function qn(e,t,n){var r=Xn(e)?Ot:qt;return t=mn(t,n,3),r(e,function(e,n,r){return!t(e,n,r)})}function Rn(e,t,n){var i=Xn(e)?Dt:tn;n&&Tn(e,t,n)&&(t=null);if(typeof t!=\"function\"||n!==r)t=mn(t,n,3);return i(e,t)}function Un(e,t){if(typeof e!=\"function\")throw new TypeError(s);return t=yt(t===r?e.length-1:+t||0,0),function(){var n=arguments,r=-1,i=yt(n.length-t,0),s=Array(i);while(++r<i)s[r]=n[t+r];switch(t){case 0:return e.call(this,s);case 1:return e.call(this,n[0],s);case 2:return e.call(this,n[0],n[1],s)}var o=Array(t+1);r=-1;while(++r<t)o[r]=n[r];return o[t]=s,e.apply(this,o)}}function zn(e,t,n,r){return t&&typeof t!=\"boolean\"&&Tn(e,t,n)?t=!1:typeof t==\"function\"&&(r=n,n=t,t=!1),n=typeof n==\"function\"&&on(n,r,1),Ft(e,t,n)}function Wn(e){var t=Y(e)?e.length:r;return Cn(t)&&rt.call(e)==o}function Vn(e){if(e==null)return!0;var t=yn(e);return Cn(t)&&(Xn(e)||Yn(e)||Wn(e)||Y(e)&&$n(e.splice))?!t:!rr(e).length}function Jn(e){var t=typeof e;return t==\"function\"||!!e&&t==\"object\"}function Kn(e){return e==null?!1:rt.call(e)==c?it.test(tt.call(e)):Y(e)&&B.test(e)}function Qn(e){return typeof e==\"number\"||Y(e)&&rt.call(e)==p}function Yn(e){return typeof e==\"string\"||Y(e)&&rt.call(e)==g}function Zn(e){return Y(e)&&Cn(e.length)&&!!j[rt.call(e)]}function er(e){return Bt(e,ir(e))}function nr(e,t){if(e==null)return!1;var n=nt.call(e,t);return!n&&!Nn(t)&&(t=Mn(t),e=t.length==1?e:Wt(e,en(t,0,-1)),t=Pn(t),n=e!=null&&nt.call(e,t)),n}function ir(e){if(e==null)return[];Jn(e)||(e=Object(e));var t=e.length;t=t&&Cn(t)&&(Xn(e)||kt.nonEnumArgs&&Wn(e))&&t||0;var n=e.constructor,r=-1,i=typeof n==\"function\"&&n.prototype===e,s=Array(t),o=t>0;while(++r<t)s[r]=r+\"\";for(var u in e)(!o||!xn(u,t))&&(u!=\"constructor\"||!i&&!!nt.call(e,u))&&s.push(u);return s}function or(e){return nn(e,rr(e))}function ur(e){return e=Q(e),e&&D.test(e)?e.replace(_,\"\\\\$&\"):e}function ar(e,t,n){return n&&Tn(e,t,n)&&(t=null),jt(e,t)}function fr(e){return function(){return e}}function lr(e){return e}function cr(e){return Nn(e)?Yt(e):Zt(e)}var r,i=\"3.7.0\",s=\"Expected a function\",o=\"[object Arguments]\",u=\"[object Array]\",a=\"[object Boolean]\",f=\"[object Date]\",l=\"[object Error]\",c=\"[object Function]\",h=\"[object Map]\",p=\"[object Number]\",d=\"[object Object]\",v=\"[object RegExp]\",m=\"[object Set]\",g=\"[object String]\",y=\"[object WeakMap]\",b=\"[object ArrayBuffer]\",w=\"[object Float32Array]\",E=\"[object Float64Array]\",S=\"[object Int8Array]\",x=\"[object Int16Array]\",T=\"[object Int32Array]\",N=\"[object Uint8Array]\",C=\"[object Uint8ClampedArray]\",k=\"[object Uint16Array]\",L=\"[object Uint32Array]\",A=/\\.|\\[(?:[^[\\]]+|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?)\\1\\]/,O=/^\\w*$/,M=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g,_=/[.*+?^${}()|[\\]\\/\\\\]/g,D=RegExp(_.source),P=/\\\\(\\\\)?/g,H=/\\w*$/,B=/^\\[object .+?Constructor\\]$/,j={};j[w]=j[E]=j[S]=j[x]=j[T]=j[N]=j[C]=j[k]=j[L]=!0,j[o]=j[u]=j[b]=j[a]=j[f]=j[l]=j[c]=j[h]=j[p]=j[d]=j[v]=j[m]=j[g]=j[y]=!1;var F={};F[o]=F[u]=F[b]=F[a]=F[f]=F[w]=F[E]=F[S]=F[x]=F[T]=F[p]=F[d]=F[v]=F[g]=F[N]=F[C]=F[k]=F[L]=!0,F[l]=F[c]=F[h]=F[m]=F[y]=!1;var I={\"function\":!0,object:!0},q=I[typeof n]&&n&&!n.nodeType&&n,R=I[typeof t]&&t&&!t.nodeType&&t,U=q&&R&&typeof e==\"object\"&&e&&e.Object&&e,z=I[typeof self]&&self&&self.Object&&self,W=I[typeof window]&&window&&window.Object&&window,X=R&&R.exports===q&&q,V=U||W!==(this&&this.window)&&W||z||this,Z=Array.prototype,et=Object.prototype,tt=Function.prototype.toString,nt=et.hasOwnProperty,rt=et.toString,it=RegExp(\"^\"+ur(rt).replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),st=Kn(st=V.ArrayBuffer)&&st,ot=Kn(ot=st&&(new st(0)).slice)&&ot,ut=Math.floor,at=Kn(at=Object.getOwnPropertySymbols)&&at,ft=Kn(ft=Object.getPrototypeOf)&&ft,lt=Z.push,ct=Kn(Object.preventExtensions=Object.preventExtensions)&&ct,ht=et.propertyIsEnumerable,pt=Kn(pt=V.Uint8Array)&&pt,dt=function(){try{var e=Kn(e=V.Float64Array)&&e,t=new e(new st(10),0,1)&&e}catch(n){}return t}(),vt=function(){var e={1:0},t=ct&&Kn(t=Object.assign)&&t;try{t(ct(e),\"xo\")}catch(n){}return!e[1]&&t}(),mt=Kn(mt=Array.isArray)&&mt,gt=Kn(gt=Object.keys)&&gt,yt=Math.max,bt=Math.min,wt=Number.NEGATIVE_INFINITY,Et=Math.pow(2,32)-1,St=Et-1,xt=Et>>>1,Tt=dt?dt.BYTES_PER_ELEMENT:0,Nt=Math.pow(2,53)-1,kt=Ct.support={};(function(e){var t=function(){this.x=e},n={0:e,length:e},r=[];t.prototype={valueOf:e,y:e};for(var i in new t)r.push(i);kt.funcDecomp=/\\bthis\\b/.test(function(){return this}),kt.funcNames=typeof Function.name==\"string\";try{kt.nonEnumArgs=!ht.call(arguments,1)}catch(s){kt.nonEnumArgs=!0}})(1,0);var Ht=vt||function(e,t){return t==null?e:Bt(t,bn(t),Bt(t,rr(t),e))},It=fn(zt),Rt=ln();ot||(un=!st||!pt?fr(null):function(e){var t=e.byteLength,n=dt?ut(t/Tt):0,r=n*Tt,i=new st(t);if(n){var s=new dt(i,0,n);s.set(new dt(e,0,n))}return t!=r&&(s=new pt(i,r),s.set(new pt(e,r))),i});var yn=Yt(\"length\"),bn=at?function(e){return at(On(e))}:fr([]),_n=cn(!0),jn=Un(Bn),Fn=hn(At,It),Xn=mt||function(e){return Y(e)&&Cn(e.length)&&rt.call(e)==u},$n=K(/x/)||pt&&!K(pt)?function(e){return rt.call(e)==c}:K,Gn=ft?function(e){if(!e||rt.call(e)!=d)return!1;var t=e.valueOf,n=Kn(t)&&(n=ft(t))&&ft(n);return n?e==n||ft(e)==n:Ln(e)}:Ln,tr=an(function(e,t,n){return n?Pt(e,t,n):Ht(e,t)}),rr=gt?function(e){if(e)var t=e.constructor,n=e.length;return typeof t==\"function\"&&t.prototype===e||typeof e!=\"function\"&&Cn(n)?An(e):Jn(e)?gt(e):[]}:An,sr=an(Qt);Ct.assign=tr,Ct.callback=ar,Ct.constant=fr,Ct.forEach=Fn,Ct.keys=rr,Ct.keysIn=ir,Ct.merge=sr,Ct.property=cr,Ct.reject=qn,Ct.restParam=Un,Ct.slice=Hn,Ct.toPlainObject=er,Ct.unzip=Bn,Ct.values=or,Ct.zip=jn,Ct.each=Fn,Ct.extend=tr,Ct.iteratee=ar,Ct.clone=zn,Ct.escapeRegExp=ur,Ct.findLastIndex=_n,Ct.has=nr,Ct.identity=lr,Ct.includes=In,Ct.indexOf=Dn,Ct.isArguments=Wn,Ct.isArray=Xn,Ct.isEmpty=Vn,Ct.isFunction=$n,Ct.isNative=Kn,Ct.isNumber=Qn,Ct.isObject=Jn,Ct.isPlainObject=Gn,Ct.isString=Yn,Ct.isTypedArray=Zn,Ct.last=Pn,Ct.some=Rn,Ct.any=Rn,Ct.contains=In,Ct.include=In,Ct.VERSION=i,q&&R?X?(R.exports=Ct)._=Ct:q._=Ct:V._=Ct}).call(this)}).call(this,typeof global!=\"undefined\"?global:typeof self!=\"undefined\"?self:typeof window!=\"undefined\"?window:{})},{}],\"/node_modules/jshint/src/jshint.js\":[function(e,t,n){var r=e(\"../lodash\"),i=e(\"events\"),s=e(\"./vars.js\"),o=e(\"./messages.js\"),u=e(\"./lex.js\").Lexer,a=e(\"./reg.js\"),f=e(\"./state.js\").state,l=e(\"./style.js\"),c=e(\"./options.js\"),h=e(\"./scope-manager.js\"),p=function(){\"use strict\";function k(e,t){return e=e.trim(),/^[+-]W\\d{3}$/g.test(e)?!0:c.validNames.indexOf(e)===-1&&t.type!==\"jslint\"&&!r.has(c.removed,e)?(q(\"E001\",t,e),!1):!0}function L(e){return Object.prototype.toString.call(e)===\"[object String]\"}function A(e,t){return e?!e.identifier||e.value!==t?!1:!0:!1}function O(e){if(!e.reserved)return!1;var t=e.meta;if(t&&t.isFutureReservedWord&&f.inES5()){if(!t.es5)return!1;if(t.strictOnly&&!f.option.strict&&!f.isStrict())return!1;if(e.isProperty)return!1}return!0}function M(e,t){return e.replace(/\\{([^{}]*)\\}/g,function(e,n){var r=t[n];return typeof r==\"string\"||typeof r==\"number\"?r:e})}function D(e,t){Object.keys(t).forEach(function(n){if(r.has(p.blacklist,n))return;e[n]=t[n]})}function P(){if(f.option.enforceall){for(var e in c.bool.enforcing)f.option[e]===undefined&&!c.noenforceall[e]&&(f.option[e]=!0);for(var t in c.bool.relaxing)f.option[t]===undefined&&(f.option[t]=!1)}}function H(){P(),!f.option.esversion&&!f.option.moz&&(f.option.es3?f.option.esversion=3:f.option.esnext?f.option.esversion=6:f.option.esversion=5),f.inES5()&&D(S,s.ecmaIdentifiers[5]),f.inES6()&&D(S,s.ecmaIdentifiers[6]),f.option.module&&(f.option.strict===!0&&(f.option.strict=\"global\"),f.inES6()||F(\"W134\",f.tokens.next,\"module\",6)),f.option.couch&&D(S,s.couch),f.option.qunit&&D(S,s.qunit),f.option.rhino&&D(S,s.rhino),f.option.shelljs&&(D(S,s.shelljs),D(S,s.node)),f.option.typed&&D(S,s.typed),f.option.phantom&&(D(S,s.phantom),f.option.strict===!0&&(f.option.strict=\"global\")),f.option.prototypejs&&D(S,s.prototypejs),f.option.node&&(D(S,s.node),D(S,s.typed),f.option.strict===!0&&(f.option.strict=\"global\")),f.option.devel&&D(S,s.devel),f.option.dojo&&D(S,s.dojo),f.option.browser&&(D(S,s.browser),D(S,s.typed)),f.option.browserify&&(D(S,s.browser),D(S,s.typed),D(S,s.browserify),f.option.strict===!0&&(f.option.strict=\"global\")),f.option.nonstandard&&D(S,s.nonstandard),f.option.jasmine&&D(S,s.jasmine),f.option.jquery&&D(S,s.jquery),f.option.mootools&&D(S,s.mootools),f.option.worker&&D(S,s.worker),f.option.wsh&&D(S,s.wsh),f.option.globalstrict&&f.option.strict!==!1&&(f.option.strict=\"global\"),f.option.yui&&D(S,s.yui),f.option.mocha&&D(S,s.mocha)}function B(e,t,n){var r=Math.floor(t/f.lines.length*100),i=o.errors[e].desc;throw{name:\"JSHintError\",line:t,character:n,message:i+\" (\"+r+\"% scanned).\",raw:i,code:e}}function j(){var e=f.ignoredLines;if(r.isEmpty(e))return;p.errors=r.reject(p.errors,function(t){return e[t.line]})}function F(e,t,n,r,i,s){var u,a,l,c;if(/^W\\d{3}$/.test(e)){if(f.ignored[e])return;c=o.warnings[e]}else/E\\d{3}/.test(e)?c=o.errors[e]:/I\\d{3}/.test(e)&&(c=o.info[e]);return t=t||f.tokens.next||{},t.id===\"(end)\"&&(t=f.tokens.curr),a=t.line||0,u=t.from||0,l={id:\"(error)\",raw:c.desc,code:c.code,evidence:f.lines[a-1]||\"\",line:a,character:u,scope:p.scope,a:n,b:r,c:i,d:s},l.reason=M(c.desc,l),p.errors.push(l),j(),p.errors.length>=f.option.maxerr&&B(\"E043\",a,u),l}function I(e,t,n,r,i,s,o){return F(e,{line:t,from:n},r,i,s,o)}function q(e,t,n,r,i,s){F(e,t,n,r,i,s)}function R(e,t,n,r,i,s,o){return q(e,{line:t,from:n},r,i,s,o)}function U(e,t){var n;return n={id:\"(internal)\",elem:e,value:t},p.internals.push(n),n}function z(){var e=f.tokens.next,t=e.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g)||[],i={};if(e.type===\"globals\"){t.forEach(function(n,r){n=n.split(\":\");var s=(n[0]||\"\").trim(),o=(n[1]||\"\").trim();if(s===\"-\"||!s.length){if(r>0&&r===t.length-1)return;q(\"E002\",e);return}s.charAt(0)===\"-\"?(s=s.slice(1),o=!1,p.blacklist[s]=s,delete S[s]):i[s]=o===\"true\"}),D(S,i);for(var s in i)r.has(i,s)&&(n[s]=e)}e.type===\"exported\"&&t.forEach(function(n,r){if(!n.length){if(r>0&&r===t.length-1)return;q(\"E002\",e);return}f.funct[\"(scope)\"].addExported(n)}),e.type===\"members\"&&(E=E||{},t.forEach(function(e){var t=e.charAt(0),n=e.charAt(e.length-1);t===n&&(t==='\"'||t===\"'\")&&(e=e.substr(1,e.length-2).replace('\\\\\"','\"')),E[e]=!1}));var o=[\"maxstatements\",\"maxparams\",\"maxdepth\",\"maxcomplexity\",\"maxerr\",\"maxlen\",\"indent\"];if(e.type===\"jshint\"||e.type===\"jslint\")t.forEach(function(t){t=t.split(\":\");var n=(t[0]||\"\").trim(),i=(t[1]||\"\").trim();if(!k(n,e))return;if(o.indexOf(n)>=0){if(i!==\"false\"){i=+i;if(typeof i!=\"number\"||!isFinite(i)||i<=0||Math.floor(i)!==i){q(\"E032\",e,t[1].trim());return}f.option[n]=i}else f.option[n]=n===\"indent\"?4:!1;return}if(n===\"validthis\"){if(f.funct[\"(global)\"])return void q(\"E009\");if(i!==\"true\"&&i!==\"false\")return void q(\"E002\",e);f.option.validthis=i===\"true\";return}if(n===\"quotmark\"){switch(i){case\"true\":case\"false\":f.option.quotmark=i===\"true\";break;case\"double\":case\"single\":f.option.quotmark=i;break;default:q(\"E002\",e)}return}if(n===\"shadow\"){switch(i){case\"true\":f.option.shadow=!0;break;case\"outer\":f.option.shadow=\"outer\";break;case\"false\":case\"inner\":f.option.shadow=\"inner\";break;default:q(\"E002\",e)}return}if(n===\"unused\"){switch(i){case\"true\":f.option.unused=!0;break;case\"false\":f.option.unused=!1;break;case\"vars\":case\"strict\":f.option.unused=i;break;default:q(\"E002\",e)}return}if(n===\"latedef\"){switch(i){case\"true\":f.option.latedef=!0;break;case\"false\":f.option.latedef=!1;break;case\"nofunc\":f.option.latedef=\"nofunc\";break;default:q(\"E002\",e)}return}if(n===\"ignore\"){switch(i){case\"line\":f.ignoredLines[e.line]=!0,j();break;default:q(\"E002\",e)}return}if(n===\"strict\"){switch(i){case\"true\":f.option.strict=!0;break;case\"false\":f.option.strict=!1;break;case\"func\":case\"global\":case\"implied\":f.option.strict=i;break;default:q(\"E002\",e)}return}n===\"module\"&&(zt(f.funct)||q(\"E055\",f.tokens.next,\"module\"));var s={es3:3,es5:5,esnext:6};if(r.has(s,n)){switch(i){case\"true\":f.option.moz=!1,f.option.esversion=s[n];break;case\"false\":f.option.moz||(f.option.esversion=5);break;default:q(\"E002\",e)}return}if(n===\"esversion\"){switch(i){case\"5\":f.inES5(!0)&&F(\"I003\");case\"3\":case\"6\":f.option.moz=!1,f.option.esversion=+i;break;case\"2015\":f.option.moz=!1,f.option.esversion=6;break;default:q(\"E002\",e)}zt(f.funct)||q(\"E055\",f.tokens.next,\"esversion\");return}var u=/^([+-])(W\\d{3})$/g.exec(n);if(u){f.ignored[u[2]]=u[1]===\"-\";return}var a;if(i===\"true\"||i===\"false\"){e.type===\"jslint\"?(a=c.renamed[n]||n,f.option[a]=i===\"true\",c.inverted[a]!==undefined&&(f.option[a]=!f.option[a])):f.option[n]=i===\"true\",n===\"newcap\"&&(f.option[\"(explicitNewcap)\"]=!0);return}q(\"E002\",e)}),H()}function W(e){var t=e||0,n=y.length,r;if(t<n)return y[t];while(n<=t)r=y[n],r||(r=y[n]=b.token()),n+=1;return!r&&f.tokens.next.id===\"(end)\"?f.tokens.next:r}function X(){var e=0,t;do t=W(e++);while(t.id===\"(endline)\");return t}function V(e,t){switch(f.tokens.curr.id){case\"(number)\":f.tokens.next.id===\".\"&&F(\"W005\",f.tokens.curr);break;case\"-\":(f.tokens.next.id===\"-\"||f.tokens.next.id===\"--\")&&F(\"W006\");break;case\"+\":(f.tokens.next.id===\"+\"||f.tokens.next.id===\"++\")&&F(\"W007\")}e&&f.tokens.next.id!==e&&(t?f.tokens.next.id===\"(end)\"?q(\"E019\",t,t.id):q(\"E020\",f.tokens.next,e,t.id,t.line,f.tokens.next.value):(f.tokens.next.type!==\"(identifier)\"||f.tokens.next.value!==e)&&F(\"W116\",f.tokens.next,e,f.tokens.next.value)),f.tokens.prev=f.tokens.curr,f.tokens.curr=f.tokens.next;for(;;){f.tokens.next=y.shift()||b.token(),f.tokens.next||B(\"E041\",f.tokens.curr.line);if(f.tokens.next.id===\"(end)\"||f.tokens.next.id===\"(error)\")return;f.tokens.next.check&&f.tokens.next.check();if(f.tokens.next.isSpecial)f.tokens.next.type===\"falls through\"?f.tokens.curr.caseFallsThrough=!0:z();else if(f.tokens.next.id!==\"(endline)\")break}}function $(e){return e.infix||!e.identifier&&!e.template&&!!e.led}function J(){var e=f.tokens.curr,t=f.tokens.next;return t.id===\";\"||t.id===\"}\"||t.id===\":\"?!0:$(t)===$(e)||e.id===\"yield\"&&f.inMoz()?e.line!==G(t):!1}function K(e){return!e.left&&e.arity!==\"unary\"}function Q(e,t){var n,i=!1,s=!1,o=!1;f.nameStack.push(),!t&&f.tokens.next.value===\"let\"&&W(0).value===\"(\"&&(f.inMoz()||F(\"W118\",f.tokens.next,\"let expressions\"),o=!0,f.funct[\"(scope)\"].stack(),V(\"let\"),V(\"(\"),f.tokens.prev.fud(),V(\")\")),f.tokens.next.id===\"(end)\"&&q(\"E006\",f.tokens.curr);var u=f.option.asi&&f.tokens.prev.line!==G(f.tokens.curr)&&r.contains([\"]\",\")\"],f.tokens.prev.id)&&r.contains([\"[\",\"(\"],f.tokens.curr.id);u&&F(\"W014\",f.tokens.curr,f.tokens.curr.id),V(),t&&(f.funct[\"(verb)\"]=f.tokens.curr.value,f.tokens.curr.beginsStmt=!0);if(t===!0&&f.tokens.curr.fud)n=f.tokens.curr.fud();else{f.tokens.curr.nud?n=f.tokens.curr.nud():q(\"E030\",f.tokens.curr,f.tokens.curr.id);while((e<f.tokens.next.lbp||f.tokens.next.type===\"(template)\")&&!J())i=f.tokens.curr.value===\"Array\",s=f.tokens.curr.value===\"Object\",n&&(n.value||n.first&&n.first.value)&&(n.value!==\"new\"||n.first&&n.first.value&&n.first.value===\".\")&&(i=!1,n.value!==f.tokens.curr.value&&(s=!1)),V(),i&&f.tokens.curr.id===\"(\"&&f.tokens.next.id===\")\"&&F(\"W009\",f.tokens.curr),s&&f.tokens.curr.id===\"(\"&&f.tokens.next.id===\")\"&&F(\"W010\",f.tokens.curr),n&&f.tokens.curr.led?n=f.tokens.curr.led(n):q(\"E033\",f.tokens.curr,f.tokens.curr.id)}return o&&f.funct[\"(scope)\"].unstack(),f.nameStack.pop(),n}function G(e){return e.startLine||e.line}function Y(e,t){e=e||f.tokens.curr,t=t||f.tokens.next,!f.option.laxbreak&&e.line!==G(t)&&F(\"W014\",t,t.value)}function Z(e){e=e||f.tokens.curr,e.line!==G(f.tokens.next)&&F(\"E022\",e,e.value)}function et(e,t){e.line!==G(t)&&(f.option.laxcomma||(tt.first&&(F(\"I001\"),tt.first=!1),F(\"W014\",e,t.value)))}function tt(e){e=e||{},e.peek?et(f.tokens.prev,f.tokens.curr):(et(f.tokens.curr,f.tokens.next),V(\",\"));if(f.tokens.next.identifier&&(!e.property||!f.inES5()))switch(f.tokens.next.value){case\"break\":case\"case\":case\"catch\":case\"continue\":case\"default\":case\"do\":case\"else\":case\"finally\":case\"for\":case\"if\":case\"in\":case\"instanceof\":case\"return\":case\"switch\":case\"throw\":case\"try\":case\"var\":case\"let\":case\"while\":case\"with\":return q(\"E024\",f.tokens.next,f.tokens.next.value),!1}if(f.tokens.next.type===\"(punctuator)\")switch(f.tokens.next.value){case\"}\":case\"]\":case\",\":if(e.allowTrailing)return!0;case\")\":return q(\"E024\",f.tokens.next,f.tokens.next.value),!1}return!0}function nt(e,t){var n=f.syntax[e];if(!n||typeof n!=\"object\")f.syntax[e]=n={id:e,lbp:t,value:e};return n}function rt(e){var t=nt(e,0);return t.delim=!0,t}function it(e,t){var n=rt(e);return n.identifier=n.reserved=!0,n.fud=t,n}function st(e,t){var n=it(e,t);return n.block=!0,n}function ot(e){var t=e.id.charAt(0);if(t>=\"a\"&&t<=\"z\"||t>=\"A\"&&t<=\"Z\")e.identifier=e.reserved=!0;return e}function ut(e,t){var n=nt(e,150);return ot(n),n.nud=typeof t==\"function\"?t:function(){this.arity=\"unary\",this.right=Q(150);if(this.id===\"++\"||this.id===\"--\")f.option.plusplus?F(\"W016\",this,this.id):this.right&&(!this.right.identifier||O(this.right))&&this.right.id!==\".\"&&this.right.id!==\"[\"&&F(\"W017\",this),this.right&&this.right.isMetaProperty?q(\"E031\",this):this.right&&this.right.identifier&&f.funct[\"(scope)\"].block.modify(this.right.value,this);return this},n}function at(e,t){var n=rt(e);return n.type=e,n.nud=t,n}function ft(e,t){var n=at(e,t);return n.identifier=!0,n.reserved=!0,n}function lt(e,t){var n=at(e,t&&t.nud||function(){return this});return t=t||{},t.isFutureReservedWord=!0,n.value=e,n.identifier=!0,n.reserved=!0,n.meta=t,n}function ct(e,t){return ft(e,function(){return typeof t==\"function\"&&t(this),this})}function ht(e,t,n,r){var i=nt(e,n);return ot(i),i.infix=!0,i.led=function(i){return r||Y(f.tokens.prev,f.tokens.curr),(e===\"in\"||e===\"instanceof\")&&i.id===\"!\"&&F(\"W018\",i,\"!\"),typeof t==\"function\"?t(i,this):(this.left=i,this.right=Q(n),this)},i}function pt(e){var t=nt(e,42);return t.led=function(e){return Y(f.tokens.prev,f.tokens.curr),this.left=e,this.right=Xt({type:\"arrow\",loneArg:e}),this},t}function dt(e,t){var n=nt(e,100);return n.led=function(e){Y(f.tokens.prev,f.tokens.curr),this.left=e;var n=this.right=Q(100);return A(e,\"NaN\")||A(n,\"NaN\")?F(\"W019\",this):t&&t.apply(this,[e,n]),(!e||!n)&&B(\"E041\",f.tokens.curr.line),e.id===\"!\"&&F(\"W018\",e,\"!\"),n.id===\"!\"&&F(\"W018\",n,\"!\"),this},n}function vt(e){return e&&(e.type===\"(number)\"&&+e.value===0||e.type===\"(string)\"&&e.value===\"\"||e.type===\"null\"&&!f.option.eqnull||e.type===\"true\"||e.type===\"false\"||e.type===\"undefined\")}function gt(e,t,n){var i;return n.option.notypeof?!1:!e||!t?!1:(i=n.inES6()?mt.es6:mt.es3,t.type===\"(identifier)\"&&t.value===\"typeof\"&&e.type===\"(string)\"?!r.contains(i,e.value):!1)}function yt(e,t){var n=!1;return e.type===\"this\"&&t.funct[\"(context)\"]===null?n=!0:e.type===\"(identifier)\"&&(t.option.node&&e.value===\"global\"?n=!0:t.option.browser&&(e.value===\"window\"||e.value===\"document\")&&(n=!0)),n}function bt(e){function n(e){if(typeof e!=\"object\")return;return e.right===\"prototype\"?e:n(e.left)}function r(e){while(!e.identifier&&typeof e.left==\"object\")e=e.left;if(e.identifier&&t.indexOf(e.value)>=0)return e.value}var t=[\"Array\",\"ArrayBuffer\",\"Boolean\",\"Collator\",\"DataView\",\"Date\",\"DateTimeFormat\",\"Error\",\"EvalError\",\"Float32Array\",\"Float64Array\",\"Function\",\"Infinity\",\"Intl\",\"Int16Array\",\"Int32Array\",\"Int8Array\",\"Iterator\",\"Number\",\"NumberFormat\",\"Object\",\"RangeError\",\"ReferenceError\",\"RegExp\",\"StopIteration\",\"String\",\"SyntaxError\",\"TypeError\",\"Uint16Array\",\"Uint32Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"URIError\"],i=n(e);if(i)return r(i)}function wt(e,t,n){var r=n&&n.allowDestructuring;t=t||e;if(f.option.freeze){var i=bt(e);i&&F(\"W121\",e,i)}return e.identifier&&!e.isMetaProperty&&f.funct[\"(scope)\"].block.reassign(e.value,e),e.id===\".\"?((!e.left||e.left.value===\"arguments\"&&!f.isStrict())&&F(\"E031\",t),f.nameStack.set(f.tokens.prev),!0):e.id===\"{\"||e.id===\"[\"?(r&&f.tokens.curr.left.destructAssign?f.tokens.curr.left.destructAssign.forEach(function(e){e.id&&f.funct[\"(scope)\"].block.modify(e.id,e.token)}):e.id===\"{\"||!e.left?F(\"E031\",t):e.left.value===\"arguments\"&&!f.isStrict()&&F(\"E031\",t),e.id===\"[\"&&f.nameStack.set(e.right),!0):e.isMetaProperty?(q(\"E031\",t),!0):e.identifier&&!O(e)?(f.funct[\"(scope)\"].labeltype(e.value)===\"exception\"&&F(\"W022\",e),f.nameStack.set(e),!0):(e===f.syntax[\"function\"]&&F(\"W023\",f.tokens.curr),!1)}function Et(e,t,n){var r=ht(e,typeof t==\"function\"?t:function(e,t){t.left=e;if(e&&wt(e,t,{allowDestructuring:!0}))return t.right=Q(10),t;q(\"E031\",t)},n);return r.exps=!0,r.assign=!0,r}function St(e,t,n){var r=nt(e,n);return ot(r),r.led=typeof t==\"function\"?t:function(e){return f.option.bitwise&&F(\"W016\",this,this.id),this.left=e,this.right=Q(n),this},r}function xt(e){return Et(e,function(e,t){f.option.bitwise&&F(\"W016\",t,t.id);if(e&&wt(e,t))return t.right=Q(10),t;q(\"E031\",t)},20)}function Tt(e){var t=nt(e,150);return t.led=function(e){return f.option.plusplus?F(\"W016\",this,this.id):(!e.identifier||O(e))&&e.id!==\".\"&&e.id!==\"[\"&&F(\"W017\",this),e.isMetaProperty?q(\"E031\",this):e&&e.identifier&&f.funct[\"(scope)\"].block.modify(e.value,e),this.left=e,this},t}function Nt(e,t,n){if(!f.tokens.next.identifier)return;n||V();var r=f.tokens.curr,i=f.tokens.curr.value;return O(r)?t&&f.inES5()?i:e&&i===\"undefined\"?i:(F(\"W024\",f.tokens.curr,f.tokens.curr.id),i):i}function Ct(e,t){var n=Nt(e,t,!1);if(n)return n;if(f.tokens.next.value===\"...\"){f.inES6(!0)||F(\"W119\",f.tokens.next,\"spread/rest operator\",\"6\"),V();if(pn(f.tokens.next,\"...\")){F(\"E024\",f.tokens.next,\"...\");while(pn(f.tokens.next,\"...\"))V()}if(!f.tokens.next.identifier){F(\"E024\",f.tokens.curr,\"...\");return}return Ct(e,t)}q(\"E030\",f.tokens.next,f.tokens.next.value),f.tokens.next.id!==\";\"&&V()}function kt(e){var t=0,n;if(f.tokens.next.id!==\";\"||e.inBracelessBlock)return;for(;;){do n=W(t),t+=1;while(n.id!==\"(end)\"&&n.id===\"(comment)\");if(n.reach)return;if(n.id!==\"(endline)\"){if(n.id===\"function\"){f.option.latedef===!0&&F(\"W026\",n);break}F(\"W027\",n,n.value,e.value);break}}}function Lt(){if(f.tokens.next.id!==\";\"){if(f.tokens.next.isUnclosed)return V();var e=G(f.tokens.next)===f.tokens.curr.line&&f.tokens.next.id!==\"(end)\",t=pn(f.tokens.next,\"}\");e&&!t?R(\"E058\",f.tokens.curr.line,f.tokens.curr.character):f.option.asi||(t&&!f.option.lastsemic||!e)&&I(\"W033\",f.tokens.curr.line,f.tokens.curr.character)}else V(\";\")}function At(){var e=g,t,n=f.tokens.next,r=!1;if(n.id===\";\"){V(\";\");return}var i=O(n);i&&n.meta&&n.meta.isFutureReservedWord&&W().id===\":\"&&(F(\"W024\",n,n.id),i=!1),n.identifier&&!i&&W().id===\":\"&&(V(),V(\":\"),r=!0,f.funct[\"(scope)\"].stack(),f.funct[\"(scope)\"].block.addBreakLabel(n.value,{token:f.tokens.curr}),!f.tokens.next.labelled&&f.tokens.next.value!==\"{\"&&F(\"W028\",f.tokens.next,n.value,f.tokens.next.value),f.tokens.next.label=n.value,n=f.tokens.next);if(n.id===\"{\"){var s=f.funct[\"(verb)\"]===\"case\"&&f.tokens.curr.value===\":\";_t(!0,!0,!1,!1,s);return}return t=Q(0,!0),t&&(!t.identifier||t.value!==\"function\")&&(t.type!==\"(punctuator)\"||!t.left||!t.left.identifier||t.left.value!==\"function\")&&!f.isStrict()&&f.option.strict===\"global\"&&F(\"E007\"),n.block||(!f.option.expr&&(!t||!t.exps)?F(\"W030\",f.tokens.curr):f.option.nonew&&t&&t.left&&t.id===\"(\"&&t.left.id===\"new\"&&F(\"W031\",n),Lt()),g=e,r&&f.funct[\"(scope)\"].unstack(),t}function Ot(){var e=[],t;while(!f.tokens.next.reach&&f.tokens.next.id!==\"(end)\")f.tokens.next.id===\";\"?(t=W(),(!t||t.id!==\"(\"&&t.id!==\"[\")&&F(\"W032\"),V(\";\")):e.push(At());return e}function Mt(){var e,t,n;while(f.tokens.next.id===\"(string)\"){t=W(0);if(t.id===\"(endline)\"){e=1;do n=W(e++);while(n.id===\"(endline)\");if(n.id===\";\")t=n;else{if(n.value===\"[\"||n.value===\".\")break;(!f.option.asi||n.value===\"(\")&&F(\"W033\",f.tokens.next)}}else{if(t.id===\".\"||t.id===\"[\")break;t.id!==\";\"&&F(\"W033\",t)}V();var r=f.tokens.curr.value;(f.directive[r]||r===\"use strict\"&&f.option.strict===\"implied\")&&F(\"W034\",f.tokens.curr,r),f.directive[r]=!0,t.id===\";\"&&V(\";\")}f.isStrict()&&(f.option[\"(explicitNewcap)\"]||(f.option.newcap=!0),f.option.undef=!0)}function _t(e,t,n,i,s){var o,u=m,a=g,l,c,h,p;m=e,c=f.tokens.next;var d=f.funct[\"(metrics)\"];d.nestedBlockDepth+=1,d.verifyMaxNestedBlockDepthPerFunction();if(f.tokens.next.id===\"{\"){V(\"{\"),f.funct[\"(scope)\"].stack(),h=f.tokens.curr.line;if(f.tokens.next.id!==\"}\"){g+=f.option.indent;while(!e&&f.tokens.next.from>g)g+=f.option.indent;if(n){l={};for(p in f.directive)r.has(f.directive,p)&&(l[p]=f.directive[p]);Mt(),f.option.strict&&f.funct[\"(context)\"][\"(global)\"]&&!l[\"use strict\"]&&!f.isStrict()&&F(\"E007\")}o=Ot(),d.statementCount+=o.length,g-=f.option.indent}V(\"}\",c),n&&(f.funct[\"(scope)\"].validateParams(),l&&(f.directive=l)),f.funct[\"(scope)\"].unstack(),g=a}else if(!e)if(n){f.funct[\"(scope)\"].stack(),l={},t&&!i&&!f.inMoz()&&q(\"W118\",f.tokens.curr,\"function closure expressions\");if(!t)for(p in f.directive)r.has(f.directive,p)&&(l[p]=f.directive[p]);Q(10),f.option.strict&&f.funct[\"(context)\"][\"(global)\"]&&!l[\"use strict\"]&&!f.isStrict()&&F(\"E007\"),f.funct[\"(scope)\"].unstack()}else q(\"E021\",f.tokens.next,\"{\",f.tokens.next.value);else f.funct[\"(noblockscopedvar)\"]=f.tokens.next.id!==\"for\",f.funct[\"(scope)\"].stack(),(!t||f.option.curly)&&F(\"W116\",f.tokens.next,\"{\",f.tokens.next.value),f.tokens.next.inBracelessBlock=!0,g+=f.option.indent,o=[At()],g-=f.option.indent,f.funct[\"(scope)\"].unstack(),delete f.funct[\"(noblockscopedvar)\"];switch(f.funct[\"(verb)\"]){case\"break\":case\"continue\":case\"return\":case\"throw\":if(s)break;default:f.funct[\"(verb)\"]=null}return m=u,e&&f.option.noempty&&(!o||o.length===0)&&F(\"W035\",f.tokens.prev),d.nestedBlockDepth-=1,o}function Dt(e){E&&typeof E[e]!=\"boolean\"&&F(\"W036\",f.tokens.curr,e),typeof w[e]==\"number\"?w[e]+=1:w[e]=1}function Bt(){var e={};e.exps=!0,f.funct[\"(comparray)\"].stack();var t=!1;return f.tokens.next.value!==\"for\"&&(t=!0,f.inMoz()||F(\"W116\",f.tokens.next,\"for\",f.tokens.next.value),f.funct[\"(comparray)\"].setState(\"use\"),e.right=Q(10)),V(\"for\"),f.tokens.next.value===\"each\"&&(V(\"each\"),f.inMoz()||F(\"W118\",f.tokens.curr,\"for each\")),V(\"(\"),f.funct[\"(comparray)\"].setState(\"define\"),e.left=Q(130),r.contains([\"in\",\"of\"],f.tokens.next.value)?V():q(\"E045\",f.tokens.curr),f.funct[\"(comparray)\"].setState(\"generate\"),Q(10),V(\")\"),f.tokens.next.value===\"if\"&&(V(\"if\"),V(\"(\"),f.funct[\"(comparray)\"].setState(\"filter\"),e.filter=Q(10),V(\")\")),t||(f.funct[\"(comparray)\"].setState(\"use\"),e.right=Q(10)),V(\"]\"),f.funct[\"(comparray)\"].unstack(),e}function jt(){return f.funct[\"(statement)\"]&&f.funct[\"(statement)\"].type===\"class\"||f.funct[\"(context)\"]&&f.funct[\"(context)\"][\"(verb)\"]===\"class\"}function Ft(e){return e.identifier||e.id===\"(string)\"||e.id===\"(number)\"}function It(e){var t,n=!0;return typeof e==\"object\"?t=e:(n=e,t=Nt(!1,!0,n)),t?typeof t==\"object\"&&(t.id===\"(string)\"||t.id===\"(identifier)\"?t=t.value:t.id===\"(number)\"&&(t=t.value.toString())):f.tokens.next.id===\"(string)\"?(t=f.tokens.next.value,n||V()):f.tokens.next.id===\"(number)\"&&(t=f.tokens.next.value.toString(),n||V()),t===\"hasOwnProperty\"&&F(\"W001\"),t}function qt(e){function h(e){f.funct[\"(scope)\"].addParam.apply(f.funct[\"(scope)\"],e)}var t,n=[],i,s=[],o,u=!1,a=!1,l=0,c=e&&e.loneArg;if(c&&c.identifier===!0)return f.funct[\"(scope)\"].addParam(c.value,c),{arity:1,params:[c.value]};t=f.tokens.next,(!e||!e.parsedOpening)&&V(\"(\");if(f.tokens.next.id===\")\"){V(\")\");return}for(;;){l++;var p=[];if(r.contains([\"{\",\"[\"],f.tokens.next.id)){s=Gt();for(o in s)o=s[o],o.id&&(n.push(o.id),p.push([o.id,o.token]))}else{pn(f.tokens.next,\"...\")&&(a=!0),i=Ct(!0);if(i)n.push(i),p.push([i,f.tokens.curr]);else while(!hn(f.tokens.next,[\",\",\")\"]))V()}u&&f.tokens.next.id!==\"=\"&&q(\"W138\",f.tokens.current),f.tokens.next.id===\"=\"&&(f.inES6()||F(\"W119\",f.tokens.next,\"default parameters\",\"6\"),V(\"=\"),u=!0,Q(10)),p.forEach(h);if(f.tokens.next.id!==\",\")return V(\")\",t),{arity:l,params:n};a&&F(\"W131\",f.tokens.next),tt()}}function Rt(e,t,n){var i={\"(name)\":e,\"(breakage)\":0,\"(loopage)\":0,\"(tokens)\":{},\"(properties)\":{},\"(catch)\":!1,\"(global)\":!1,\"(line)\":null,\"(character)\":null,\"(metrics)\":null,\"(statement)\":null,\"(context)\":null,\"(scope)\":null,\"(comparray)\":null,\"(generator)\":null,\"(arrow)\":null,\"(params)\":null};return t&&r.extend(i,{\"(line)\":t.line,\"(character)\":t.character,\"(metrics)\":Vt(t)}),r.extend(i,n),i[\"(context)\"]&&(i[\"(scope)\"]=i[\"(context)\"][\"(scope)\"],i[\"(comparray)\"]=i[\"(context)\"][\"(comparray)\"]),i}function Ut(e){return\"(scope)\"in e}function zt(e){return e[\"(global)\"]&&!e[\"(verb)\"]}function Wt(e){function i(){if(f.tokens.curr.template&&f.tokens.curr.tail&&f.tokens.curr.context===t)return!0;var e=f.tokens.next.template&&f.tokens.next.tail&&f.tokens.next.context===t;return e&&V(),e||f.tokens.next.isUnclosed}var t=this.context,n=this.noSubst,r=this.depth;if(!n)while(!i())!f.tokens.next.template||f.tokens.next.depth>r?Q(0):V();return{id:\"(template)\",type:\"(template)\",tag:e}}function Xt(e){var t,n,r,i,s,o,u,a,l=f.option,c=f.ignored;e&&(r=e.name,i=e.statement,s=e.classExprBinding,o=e.type===\"generator\",u=e.type===\"arrow\",a=e.ignoreLoopFunc),f.option=Object.create(f.option),f.ignored=Object.create(f.ignored),f.funct=Rt(r||f.nameStack.infer(),f.tokens.next,{\"(statement)\":i,\"(context)\":f.funct,\"(arrow)\":u,\"(generator)\":o}),t=f.funct,n=f.tokens.curr,n.funct=f.funct,v.push(f.funct),f.funct[\"(scope)\"].stack(\"functionouter\");var h=r||s;h&&f.funct[\"(scope)\"].block.add(h,s?\"class\":\"function\",f.tokens.curr,!1),f.funct[\"(scope)\"].stack(\"functionparams\");var p=qt(e);return p?(f.funct[\"(params)\"]=p.params,f.funct[\"(metrics)\"].arity=p.arity,f.funct[\"(metrics)\"].verifyMaxParametersPerFunction()):f.funct[\"(metrics)\"].arity=0,u&&(f.inES6(!0)||F(\"W119\",f.tokens.curr,\"arrow function syntax (=>)\",\"6\"),e.loneArg||V(\"=>\")),_t(!1,!0,!0,u),!f.option.noyield&&o&&f.funct[\"(generator)\"]!==\"yielded\"&&F(\"W124\",f.tokens.curr),f.funct[\"(metrics)\"].verifyMaxStatementsPerFunction(),f.funct[\"(metrics)\"].verifyMaxComplexityPerFunction(),f.funct[\"(unusedOption)\"]=f.option.unused,f.option=l,f.ignored=c,f.funct[\"(last)\"]=f.tokens.curr.line,f.funct[\"(lastcharacter)\"]=f.tokens.curr.character,f.funct[\"(scope)\"].unstack(),f.funct[\"(scope)\"].unstack(),f.funct=f.funct[\"(context)\"],!a&&!f.option.loopfunc&&f.funct[\"(loopage)\"]&&t[\"(isCapturing)\"]&&F(\"W083\",n),t}function Vt(e){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,arity:0,verifyMaxStatementsPerFunction:function(){f.option.maxstatements&&this.statementCount>f.option.maxstatements&&F(\"W071\",e,this.statementCount)},verifyMaxParametersPerFunction:function(){r.isNumber(f.option.maxparams)&&this.arity>f.option.maxparams&&F(\"W072\",e,this.arity)},verifyMaxNestedBlockDepthPerFunction:function(){f.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===f.option.maxdepth+1&&F(\"W073\",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var t=f.option.maxcomplexity,n=this.ComplexityCount;t&&n>t&&F(\"W074\",e,n)}}}function $t(){f.funct[\"(metrics)\"].ComplexityCount+=1}function Jt(e){var t,n;e&&(t=e.id,n=e.paren,t===\",\"&&(e=e.exprs[e.exprs.length-1])&&(t=e.id,n=n||e.paren));switch(t){case\"=\":case\"+=\":case\"-=\":case\"*=\":case\"%=\":case\"&=\":case\"|=\":case\"^=\":case\"/=\":!n&&!f.option.boss&&F(\"W084\")}}function Kt(e){if(f.inES5())for(var t in e)e[t]&&e[t].setterToken&&!e[t].getterToken&&F(\"W078\",e[t].setterToken)}function Qt(e,t){if(pn(f.tokens.next,\".\")){var n=f.tokens.curr.id;V(\".\");var r=Ct();return f.tokens.curr.isMetaProperty=!0,e!==r?q(\"E057\",f.tokens.prev,n,r):t(),f.tokens.curr}}function Gt(e){var t=e&&e.assignment;return f.inES6()||F(\"W104\",f.tokens.curr,t?\"destructuring assignment\":\"destructuring binding\",\"6\"),Yt(e)}function Yt(e){var t,n=[],r=e&&e.openingParsed,i=e&&e.assignment,s=i?{assignment:i}:null,o=r?f.tokens.curr:f.tokens.next,u=function(){var e;if(hn(f.tokens.next,[\"[\",\"{\"])){t=Yt(s);for(var r in t)r=t[r],n.push({id:r.id,token:r.token})}else if(pn(f.tokens.next,\",\"))n.push({id:null,token:f.tokens.curr});else{if(!pn(f.tokens.next,\"(\")){var o=pn(f.tokens.next,\"...\");if(i){var a=o?W(0):f.tokens.next;a.identifier||F(\"E030\",a,a.value);var l=Q(155);l&&(wt(l),l.identifier&&(e=l.value))}else e=Ct();return e&&n.push({id:e,token:f.tokens.curr}),o}V(\"(\"),u(),V(\")\")}return!1},a=function(){var e;pn(f.tokens.next,\"[\")?(V(\"[\"),Q(10),V(\"]\"),V(\":\"),u()):f.tokens.next.id===\"(string)\"||f.tokens.next.id===\"(number)\"?(V(),V(\":\"),u()):(e=Ct(),pn(f.tokens.next,\":\")?(V(\":\"),u()):e&&(i&&wt(f.tokens.curr),n.push({id:e,token:f.tokens.curr})))};if(pn(o,\"[\")){r||V(\"[\"),pn(f.tokens.next,\"]\")&&F(\"W137\",f.tokens.curr);var l=!1;while(!pn(f.tokens.next,\"]\"))u()&&!l&&pn(f.tokens.next,\",\")&&(F(\"W130\",f.tokens.next),l=!0),pn(f.tokens.next,\"=\")&&(pn(f.tokens.prev,\"...\")?V(\"]\"):V(\"=\"),f.tokens.next.id===\"undefined\"&&F(\"W080\",f.tokens.prev,f.tokens.prev.value),Q(10)),pn(f.tokens.next,\"]\")||V(\",\");V(\"]\")}else if(pn(o,\"{\")){r||V(\"{\"),pn(f.tokens.next,\"}\")&&F(\"W137\",f.tokens.curr);while(!pn(f.tokens.next,\"}\")){a(),pn(f.tokens.next,\"=\")&&(V(\"=\"),f.tokens.next.id===\"undefined\"&&F(\"W080\",f.tokens.prev,f.tokens.prev.value),Q(10));if(!pn(f.tokens.next,\"}\")){V(\",\");if(pn(f.tokens.next,\"}\"))break}}V(\"}\")}return n}function Zt(e,t){var n=t.first;if(!n)return;r.zip(e,Array.isArray(n)?n:[n]).forEach(function(e){var t=e[0],n=e[1];t&&n?t.first=n:t&&t.first&&!n&&F(\"W080\",t.first,t.first.value)})}function en(e,t,n){var i=n&&n.prefix,s=n&&n.inexport,o=e===\"let\",u=e===\"const\",a,l,c,h;f.inES6()||F(\"W104\",f.tokens.curr,e,\"6\"),o&&f.tokens.next.value===\"(\"?(f.inMoz()||F(\"W118\",f.tokens.next,\"let block\"),V(\"(\"),f.funct[\"(scope)\"].stack(),h=!0):f.funct[\"(noblockscopedvar)\"]&&q(\"E048\",f.tokens.curr,u?\"Const\":\"Let\"),t.first=[];for(;;){var p=[];r.contains([\"{\",\"[\"],f.tokens.next.value)?(a=Gt(),l=!1):(a=[{id:Ct(),token:f.tokens.curr}],l=!0),!i&&u&&f.tokens.next.id!==\"=\"&&F(\"E012\",f.tokens.curr,f.tokens.curr.value);for(var d in a)a.hasOwnProperty(d)&&(d=a[d],f.funct[\"(scope)\"].block.isGlobal()&&S[d.id]===!1&&F(\"W079\",d.token,d.id),d.id&&!f.funct[\"(noblockscopedvar)\"]&&(f.funct[\"(scope)\"].addlabel(d.id,{type:e,token:d.token}),p.push(d.token),l&&s&&f.funct[\"(scope)\"].setExported(d.token.value,d.token)));f.tokens.next.id===\"=\"&&(V(\"=\"),!i&&f.tokens.next.id===\"undefined\"&&F(\"W080\",f.tokens.prev,f.tokens.prev.value),!i&&W(0).id===\"=\"&&f.tokens.next.identifier&&F(\"W120\",f.tokens.next,f.tokens.next.value),c=Q(i?120:10),l?a[0].first=c:Zt(p,c)),t.first=t.first.concat(p);if(f.tokens.next.id!==\",\")break;tt()}return h&&(V(\")\"),_t(!0,!0),t.block=!0,f.funct[\"(scope)\"].unstack()),t}function sn(e){return f.inES6()||F(\"W104\",f.tokens.curr,\"class\",\"6\"),e?(this.name=Ct(),f.funct[\"(scope)\"].addlabel(this.name,{type:\"class\",token:f.tokens.curr})):f.tokens.next.identifier&&f.tokens.next.value!==\"extends\"?(this.name=Ct(),this.namedExpr=!0):this.name=f.nameStack.infer(),on(this),this}function on(e){var t=f.inClassBody;f.tokens.next.value===\"extends\"&&(V(\"extends\"),e.heritage=Q(10)),f.inClassBody=!0,V(\"{\"),e.body=un(e),V(\"}\"),f.inClassBody=t}function un(e){var t,n,r,i,s=Object.create(null),o=Object.create(null),u;for(var a=0;f.tokens.next.id!==\"}\";++a){t=f.tokens.next,n=!1,r=!1,i=null;if(t.id===\";\"){F(\"W032\"),V(\";\");continue}t.id===\"*\"&&(r=!0,V(\"*\"),t=f.tokens.next);if(t.id===\"[\")t=cn(),u=!0;else{if(!Ft(t)){F(\"W052\",f.tokens.next,f.tokens.next.value||f.tokens.next.type),V();continue}V(),u=!1;if(t.identifier&&t.value===\"static\"){pn(f.tokens.next,\"*\")&&(r=!0,V(\"*\"));if(Ft(f.tokens.next)||f.tokens.next.id===\"[\")u=f.tokens.next.id===\"[\",n=!0,t=f.tokens.next,f.tokens.next.id===\"[\"?t=cn():V()}t.identifier&&(t.value===\"get\"||t.value===\"set\")&&(Ft(f.tokens.next)||f.tokens.next.id===\"[\")&&(u=f.tokens.next.id===\"[\",i=t,t=f.tokens.next,f.tokens.next.id===\"[\"?t=cn():V())}if(!pn(f.tokens.next,\"(\")){q(\"E054\",f.tokens.next,f.tokens.next.value);while(f.tokens.next.id!==\"}\"&&!pn(f.tokens.next,\"(\"))V();f.tokens.next.value!==\"(\"&&Xt({statement:e})}u||(i?ln(i.value,n?o:s,t.value,t,!0,n):(t.value===\"constructor\"?f.nameStack.set(e):f.nameStack.set(t),fn(n?o:s,t.value,t,!0,n)));if(i&&t.value===\"constructor\"){var l=i.value===\"get\"?\"class getter method\":\"class setter method\";q(\"E049\",t,l,\"constructor\")}else t.value===\"prototype\"&&q(\"E049\",t,\"class method\",\"prototype\");It(t),Xt({statement:e,type:r?\"generator\":null,classExprBinding:e.namedExpr?e.name:null})}Kt(s)}function fn(e,t,n,r,i){var s=[\"key\",\"class method\",\"static class method\"];s=s[(r||!1)+(i||!1)],n.identifier&&(t=n.value),e[t]&&t!==\"__proto__\"?F(\"W075\",f.tokens.next,s,t):e[t]=Object.create(null),e[t].basic=!0,e[t].basictkn=n}function ln(e,t,n,r,i,s){var o=e===\"get\"?\"getterToken\":\"setterToken\",u=\"\";i?(s&&(u+=\"static \"),u+=e+\"ter method\"):u=\"key\",f.tokens.curr.accessorType=e,f.nameStack.set(r),t[n]?(t[n].basic||t[n][o])&&n!==\"__proto__\"&&F(\"W075\",f.tokens.next,u,n):t[n]=Object.create(null),t[n][o]=r}function cn(){V(\"[\"),f.inES6()||F(\"W119\",f.tokens.curr,\"computed property names\",\"6\");var e=Q(10);return V(\"]\"),e}function hn(e,t){return e.type===\"(punctuator)\"?r.contains(t,e.value):!1}function pn(e,t){return e.type===\"(punctuator)\"&&e.value===t}function dn(){var e=an();e.notJson?(!f.inES6()&&e.isDestAssign&&F(\"W104\",f.tokens.curr,\"destructuring assignment\",\"6\"),Ot()):(f.option.laxbreak=!0,f.jsonMode=!0,mn())}function mn(){function e(){var e={},t=f.tokens.next;V(\"{\");if(f.tokens.next.id!==\"}\")for(;;){if(f.tokens.next.id===\"(end)\")q(\"E026\",f.tokens.next,t.line);else{if(f.tokens.next.id===\"}\"){F(\"W094\",f.tokens.curr);break}f.tokens.next.id===\",\"?q(\"E028\",f.tokens.next):f.tokens.next.id!==\"(string)\"&&F(\"W095\",f.tokens.next,f.tokens.next.value)}e[f.tokens.next.value]===!0?F(\"W075\",f.tokens.next,\"key\",f.tokens.next.value):f.tokens.next.value===\"__proto__\"&&!f.option.proto||f.tokens.next.value===\"__iterator__\"&&!f.option.iterator?F(\"W096\",f.tokens.next,f.tokens.next.value):e[f.tokens.next.value]=!0,V(),V(\":\"),mn();if(f.tokens.next.id!==\",\")break;V(\",\")}V(\"}\")}function t(){var e=f.tokens.next;V(\"[\");if(f.tokens.next.id!==\"]\")for(;;){if(f.tokens.next.id===\"(end)\")q(\"E027\",f.tokens.next,e.line);else{if(f.tokens.next.id===\"]\"){F(\"W094\",f.tokens.curr);break}f.tokens.next.id===\",\"&&q(\"E028\",f.tokens.next)}mn();if(f.tokens.next.id!==\",\")break;V(\",\")}V(\"]\")}switch(f.tokens.next.id){case\"{\":e();break;case\"[\":t();break;case\"true\":case\"false\":case\"null\":case\"(number)\":case\"(string)\":V();break;case\"-\":V(\"-\"),V(\"(number)\");break;default:q(\"E003\",f.tokens.next)}}var e,t={\"<\":!0,\"<=\":!0,\"==\":!0,\"===\":!0,\"!==\":!0,\"!=\":!0,\">\":!0,\">=\":!0,\"+\":!0,\"-\":!0,\"*\":!0,\"/\":!0,\"%\":!0},n,d=[\"closure\",\"exception\",\"global\",\"label\",\"outer\",\"unused\",\"var\"],v,m,g,y,b,w,E,S,x,T,N=[],C=new i.EventEmitter,mt={};mt.legacy=[\"xml\",\"unknown\"],mt.es3=[\"undefined\",\"boolean\",\"number\",\"string\",\"function\",\"object\"],mt.es3=mt.es3.concat(mt.legacy),mt.es6=mt.es3.concat(\"symbol\"),at(\"(number)\",function(){return this}),at(\"(string)\",function(){return this}),f.syntax[\"(identifier)\"]={type:\"(identifier)\",lbp:0,identifier:!0,nud:function(){var e=this.value;return f.tokens.next.id===\"=>\"?this:(f.funct[\"(comparray)\"].check(e)||f.funct[\"(scope)\"].block.use(e,f.tokens.curr),this)},led:function(){q(\"E033\",f.tokens.next,f.tokens.next.value)}};var Pt={lbp:0,identifier:!1,template:!0};f.syntax[\"(template)\"]=r.extend({type:\"(template)\",nud:Wt,led:Wt,noSubst:!1},Pt),f.syntax[\"(template middle)\"]=r.extend({type:\"(template middle)\",middle:!0,noSubst:!1},Pt),f.syntax[\"(template tail)\"]=r.extend({type:\"(template tail)\",tail:!0,noSubst:!1},Pt),f.syntax[\"(no subst template)\"]=r.extend({type:\"(template)\",nud:Wt,led:Wt,noSubst:!0,tail:!0},Pt),at(\"(regexp)\",function(){return this}),rt(\"(endline)\"),rt(\"(begin)\"),rt(\"(end)\").reach=!0,rt(\"(error)\").reach=!0,rt(\"}\").reach=!0,rt(\")\"),rt(\"]\"),rt('\"').reach=!0,rt(\"'\").reach=!0,rt(\";\"),rt(\":\").reach=!0,rt(\"#\"),ft(\"else\"),ft(\"case\").reach=!0,ft(\"catch\"),ft(\"default\").reach=!0,ft(\"finally\"),ct(\"arguments\",function(e){f.isStrict()&&f.funct[\"(global)\"]&&F(\"E008\",e)}),ct(\"eval\"),ct(\"false\"),ct(\"Infinity\"),ct(\"null\"),ct(\"this\",function(e){f.isStrict()&&!jt()&&!f.option.validthis&&(f.funct[\"(statement)\"]&&f.funct[\"(name)\"].charAt(0)>\"Z\"||f.funct[\"(global)\"])&&F(\"W040\",e)}),ct(\"true\"),ct(\"undefined\"),Et(\"=\",\"assign\",20),Et(\"+=\",\"assignadd\",20),Et(\"-=\",\"assignsub\",20),Et(\"*=\",\"assignmult\",20),Et(\"/=\",\"assigndiv\",20).nud=function(){q(\"E014\")},Et(\"%=\",\"assignmod\",20),xt(\"&=\"),xt(\"|=\"),xt(\"^=\"),xt(\"<<=\"),xt(\">>=\"),xt(\">>>=\"),ht(\",\",function(e,t){var n;t.exprs=[e],f.option.nocomma&&F(\"W127\");if(!tt({peek:!0}))return t;for(;;){if(!(n=Q(10)))break;t.exprs.push(n);if(f.tokens.next.value!==\",\"||!tt())break}return t},10,!0),ht(\"?\",function(e,t){return $t(),t.left=e,t.right=Q(10),V(\":\"),t[\"else\"]=Q(10),t},30);var Ht=40;ht(\"||\",function(e,t){return $t(),t.left=e,t.right=Q(Ht),t},Ht),ht(\"&&\",\"and\",50),St(\"|\",\"bitor\",70),St(\"^\",\"bitxor\",80),St(\"&\",\"bitand\",90),dt(\"==\",function(e,t){var n=f.option.eqnull&&((e&&e.value)===\"null\"||(t&&t.value)===\"null\");switch(!0){case!n&&f.option.eqeqeq:this.from=this.character,F(\"W116\",this,\"===\",\"==\");break;case vt(e):F(\"W041\",this,\"===\",e.value);break;case vt(t):F(\"W041\",this,\"===\",t.value);break;case gt(t,e,f):F(\"W122\",this,t.value);break;case gt(e,t,f):F(\"W122\",this,e.value)}return this}),dt(\"===\",function(e,t){return gt(t,e,f)?F(\"W122\",this,t.value):gt(e,t,f)&&F(\"W122\",this,e.value),this}),dt(\"!=\",function(e,t){var n=f.option.eqnull&&((e&&e.value)===\"null\"||(t&&t.value)===\"null\");return!n&&f.option.eqeqeq?(this.from=this.character,F(\"W116\",this,\"!==\",\"!=\")):vt(e)?F(\"W041\",this,\"!==\",e.value):vt(t)?F(\"W041\",this,\"!==\",t.value):gt(t,e,f)?F(\"W122\",this,t.value):gt(e,t,f)&&F(\"W122\",this,e.value),this}),dt(\"!==\",function(e,t){return gt(t,e,f)?F(\"W122\",this,t.value):gt(e,t,f)&&F(\"W122\",this,e.value),this}),dt(\"<\"),dt(\">\"),dt(\"<=\"),dt(\">=\"),St(\"<<\",\"shiftleft\",120),St(\">>\",\"shiftright\",120),St(\">>>\",\"shiftrightunsigned\",120),ht(\"in\",\"in\",120),ht(\"instanceof\",\"instanceof\",120),ht(\"+\",function(e,t){var n;return t.left=e,t.right=n=Q(130),e&&n&&e.id===\"(string)\"&&n.id===\"(string)\"?(e.value+=n.value,e.character=n.character,!f.option.scripturl&&a.javascriptURL.test(e.value)&&F(\"W050\",e),e):t},130),ut(\"+\",\"num\"),ut(\"+++\",function(){return F(\"W007\"),this.arity=\"unary\",this.right=Q(150),this}),ht(\"+++\",function(e){return F(\"W007\"),this.left=e,this.right=Q(130),this},130),ht(\"-\",\"sub\",130),ut(\"-\",\"neg\"),ut(\"---\",function(){return F(\"W006\"),this.arity=\"unary\",this.right=Q(150),this}),ht(\"---\",function(e){return F(\"W006\"),this.left=e,this.right=Q(130),this},130),ht(\"*\",\"mult\",140),ht(\"/\",\"div\",140),ht(\"%\",\"mod\",140),Tt(\"++\"),ut(\"++\",\"preinc\"),f.syntax[\"++\"].exps=!0,Tt(\"--\"),ut(\"--\",\"predec\"),f.syntax[\"--\"].exps=!0,ut(\"delete\",function(){var e=Q(10);return e?(e.id!==\".\"&&e.id!==\"[\"&&F(\"W051\"),this.first=e,e.identifier&&!f.isStrict()&&(e.forgiveUndef=!0),this):this}).exps=!0,ut(\"~\",function(){return f.option.bitwise&&F(\"W016\",this,\"~\"),this.arity=\"unary\",this.right=Q(150),this}),ut(\"...\",function(){return f.inES6(!0)||F(\"W119\",this,\"spread/rest operator\",\"6\"),!f.tokens.next.identifier&&f.tokens.next.type!==\"(string)\"&&!hn(f.tokens.next,[\"[\",\"(\"])&&q(\"E030\",f.tokens.next,f.tokens.next.value),Q(150),this}),ut(\"!\",function(){return this.arity=\"unary\",this.right=Q(150),this.right||B(\"E041\",this.line||0),t[this.right.id]===!0&&F(\"W018\",this,\"!\"),this}),ut(\"typeof\",function(){var e=Q(150);return this.first=this.right=e,e||B(\"E041\",this.line||0,this.character||0),e.identifier&&(e.forgiveUndef=!0),this}),ut(\"new\",function(){var e=Qt(\"target\",function(){f.inES6(!0)||F(\"W119\",f.tokens.prev,\"new.target\",\"6\");var e,t=f.funct;while(t){e=!t[\"(global)\"];if(!t[\"(arrow)\"])break;t=t[\"(context)\"]}e||F(\"W136\",f.tokens.prev,\"new.target\")});if(e)return e;var t=Q(155),n;if(t&&t.id!==\"function\")if(t.identifier){t[\"new\"]=!0;switch(t.value){case\"Number\":case\"String\":case\"Boolean\":case\"Math\":case\"JSON\":F(\"W053\",f.tokens.prev,t.value);break;case\"Symbol\":f.inES6()&&F(\"W053\",f.tokens.prev,t.value);break;case\"Function\":f.option.evil||F(\"W054\");break;case\"Date\":case\"RegExp\":case\"this\":break;default:t.id!==\"function\"&&(n=t.value.substr(0,1),f.option.newcap&&(n<\"A\"||n>\"Z\")&&!f.funct[\"(scope)\"].isPredefined(t.value)&&F(\"W055\",f.tokens.curr))}}else t.id!==\".\"&&t.id!==\"[\"&&t.id!==\"(\"&&F(\"W056\",f.tokens.curr);else f.option.supernew||F(\"W057\",this);return f.tokens.next.id!==\"(\"&&!f.option.supernew&&F(\"W058\",f.tokens.curr,f.tokens.curr.value),this.first=this.right=t,this}),f.syntax[\"new\"].exps=!0,ut(\"void\").exps=!0,ht(\".\",function(e,t){var n=Ct(!1,!0);return typeof n==\"string\"&&Dt(n),t.left=e,t.right=n,n&&n===\"hasOwnProperty\"&&f.tokens.next.value===\"=\"&&F(\"W001\"),!e||e.value!==\"arguments\"||n!==\"callee\"&&n!==\"caller\"?!f.option.evil&&e&&e.value===\"document\"&&(n===\"write\"||n===\"writeln\")&&F(\"W060\",e):f.option.noarg?F(\"W059\",e,n):f.isStrict()&&q(\"E008\"),!f.option.evil&&(n===\"eval\"||n===\"execScript\")&&yt(e,f)&&F(\"W061\"),t},160,!0),ht(\"(\",function(e,t){f.option.immed&&e&&!e.immed&&e.id===\"function\"&&F(\"W062\");var n=0,r=[];e&&e.type===\"(identifier)\"&&e.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&\"Array Number String Boolean Date Object Error Symbol\".indexOf(e.value)===-1&&(e.value===\"Math\"?F(\"W063\",e):f.option.newcap&&F(\"W064\",e));if(f.tokens.next.id!==\")\")for(;;){r[r.length]=Q(10),n+=1;if(f.tokens.next.id!==\",\")break;tt()}return V(\")\"),typeof e==\"object\"&&(!f.inES5()&&e.value===\"parseInt\"&&n===1&&F(\"W065\",f.tokens.curr),f.option.evil||(e.value===\"eval\"||e.value===\"Function\"||e.value===\"execScript\"?(F(\"W061\",e),r[0]&&[0].id===\"(string)\"&&U(e,r[0].value)):!r[0]||r[0].id!==\"(string)\"||e.value!==\"setTimeout\"&&e.value!==\"setInterval\"?r[0]&&r[0].id===\"(string)\"&&e.value===\".\"&&e.left.value===\"window\"&&(e.right===\"setTimeout\"||e.right===\"setInterval\")&&(F(\"W066\",e),U(e,r[0].value)):(F(\"W066\",e),U(e,r[0].value))),!e.identifier&&e.id!==\".\"&&e.id!==\"[\"&&e.id!==\"=>\"&&e.id!==\"(\"&&e.id!==\"&&\"&&e.id!==\"||\"&&e.id!==\"?\"&&(!f.inES6()||!e[\"(name)\"])&&F(\"W067\",t)),t.left=e,t},155,!0).exps=!0,ut(\"(\",function(){var e=f.tokens.next,t,n=-1,r,i,s,o,u=1,a=f.tokens.curr,l=f.tokens.prev,c=!f.option.singleGroups;do e.value===\"(\"?u+=1:e.value===\")\"&&(u-=1),n+=1,t=e,e=W(n);while((u!==0||t.value!==\")\")&&e.value!==\";\"&&e.type!==\"(end)\");f.tokens.next.id===\"function\"&&(i=f.tokens.next.immed=!0);if(e.value===\"=>\")return Xt({type:\"arrow\",parsedOpening:!0});var h=[];if(f.tokens.next.id!==\")\")for(;;){h.push(Q(10));if(f.tokens.next.id!==\",\")break;f.option.nocomma&&F(\"W127\"),tt()}V(\")\",this),f.option.immed&&h[0]&&h[0].id===\"function\"&&f.tokens.next.id!==\"(\"&&f.tokens.next.id!==\".\"&&f.tokens.next.id!==\"[\"&&F(\"W068\",this);if(!h.length)return;return h.length>1?(r=Object.create(f.syntax[\",\"]),r.exprs=h,s=h[0],o=h[h.length-1],c||(c=l.assign||l.delim)):(r=s=o=h[0],c||(c=a.beginsStmt&&(r.id===\"{\"||i||Ut(r))||i&&(!J()||f.tokens.prev.id!==\"}\")||Ut(r)&&!J()||r.id===\"{\"&&l.id===\"=>\"||r.type===\"(number)\"&&pn(e,\".\")&&/^\\d+$/.test(r.value))),r&&(!c&&(s.left||s.right||r.exprs)&&(c=!K(l)&&s.lbp<=l.lbp||!J()&&o.lbp<f.tokens.next.lbp),c||F(\"W126\",a),r.paren=!0),r}),pt(\"=>\"),ht(\"[\",function(e,t){var n=Q(10),r;return n&&n.type===\"(string)\"&&(!f.option.evil&&(n.value===\"eval\"||n.value===\"execScript\")&&yt(e,f)&&F(\"W061\"),Dt(n.value),!f.option.sub&&a.identifier.test(n.value)&&(r=f.syntax[n.value],(!r||!O(r))&&F(\"W069\",f.tokens.prev,n.value))),V(\"]\",t),n&&n.value===\"hasOwnProperty\"&&f.tokens.next.value===\"=\"&&F(\"W001\"),t.left=e,t.right=n,t},160,!0),ut(\"[\",function(){var e=an();if(e.isCompArray)return!f.option.esnext&&!f.inMoz()&&F(\"W118\",f.tokens.curr,\"array comprehension\"),Bt();if(e.isDestAssign)return this.destructAssign=Gt({openingParsed:!0,assignment:!0}),this;var t=f.tokens.curr.line!==G(f.tokens.next);this.first=[],t&&(g+=f.option.indent,f.tokens.next.from===g+f.option.indent&&(g+=f.option.indent));while(f.tokens.next.id!==\"(end)\"){while(f.tokens.next.id===\",\"){if(!f.option.elision){if(!!f.inES5()){F(\"W128\");do V(\",\");while(f.tokens.next.id===\",\");continue}F(\"W070\")}V(\",\")}if(f.tokens.next.id===\"]\")break;this.first.push(Q(10));if(f.tokens.next.id!==\",\")break;tt({allowTrailing:!0});if(f.tokens.next.id===\"]\"&&!f.inES5()){F(\"W070\",f.tokens.curr);break}}return t&&(g-=f.option.indent),V(\"]\",this),this}),function(e){e.nud=function(){var e,t,n,r,i,s=!1,o,u=Object.create(null);e=f.tokens.curr.line!==G(f.tokens.next),e&&(g+=f.option.indent,f.tokens.next.from===g+f.option.indent&&(g+=f.option.indent));var a=an();if(a.isDestAssign)return this.destructAssign=Gt({openingParsed:!0,assignment:!0}),this;for(;;){if(f.tokens.next.id===\"}\")break;o=f.tokens.next.value;if(!f.tokens.next.identifier||X().id!==\",\"&&X().id!==\"}\")if(W().id===\":\"||o!==\"get\"&&o!==\"set\"){f.tokens.next.value===\"*\"&&f.tokens.next.type===\"(punctuator)\"?(f.inES6()||F(\"W104\",f.tokens.next,\"generator functions\",\"6\"),V(\"*\"),s=!0):s=!1;if(f.tokens.next.id===\"[\")n=cn(),f.nameStack.set(n);else{f.nameStack.set(f.tokens.next),n=It(),fn(u,n,f.tokens.next);if(typeof n!=\"string\")break}f.tokens.next.value===\"(\"?(f.inES6()||F(\"W104\",f.tokens.curr,\"concise methods\",\"6\"),Xt({type:s?\"generator\":null})):(V(\":\"),Q(10))}else V(o),f.inES5()||q(\"E034\"),n=It(),!n&&!f.inES6()&&q(\"E035\"),n&&ln(o,u,n,f.tokens.curr),i=f.tokens.next,t=Xt(),r=t[\"(params)\"],o===\"get\"&&n&&r?F(\"W076\",i,r[0],n):o===\"set\"&&n&&(!r||r.length!==1)&&F(\"W077\",i,n);else f.inES6()||F(\"W104\",f.tokens.next,\"object short notation\",\"6\"),n=It(!0),fn(u,n,f.tokens.next),Q(10);Dt(n);if(f.tokens.next.id!==\",\")break;tt({allowTrailing:!0,property:!0}),f.tokens.next.id===\",\"?F(\"W070\",f.tokens.curr):f.tokens.next.id===\"}\"&&!f.inES5()&&F(\"W070\",f.tokens.curr)}return e&&(g-=f.option.indent),V(\"}\",this),Kt(u),this},e.fud=function(){q(\"E036\",f.tokens.curr)}}(rt(\"{\"));var tn=it(\"const\",function(e){return en(\"const\",this,e)});tn.exps=!0;var nn=it(\"let\",function(e){return en(\"let\",this,e)});nn.exps=!0;var rn=it(\"var\",function(e){var t=e&&e.prefix,n=e&&e.inexport,i,o,u,a=e&&e.implied,l=!e||!e.ignore;this.first=[];for(;;){var c=[];r.contains([\"{\",\"[\"],f.tokens.next.value)?(i=Gt(),o=!1):(i=[{id:Ct(),token:f.tokens.curr}],o=!0),(!t||!a)&&l&&f.option.varstmt&&F(\"W132\",this),this.first=this.first.concat(c);for(var h in i)i.hasOwnProperty(h)&&(h=i[h],!a&&f.funct[\"(global)\"]&&(S[h.id]===!1?F(\"W079\",h.token,h.id):f.option.futurehostile===!1&&(!f.inES5()&&s.ecmaIdentifiers[5][h.id]===!1||!f.inES6()&&s.ecmaIdentifiers[6][h.id]===!1)&&F(\"W129\",h.token,h.id)),h.id&&(a===\"for\"?(f.funct[\"(scope)\"].has(h.id)||l&&F(\"W088\",h.token,h.id),f.funct[\"(scope)\"].block.use(h.id,h.token)):(f.funct[\"(scope)\"].addlabel(h.id,{type:\"var\",token:h.token}),o&&n&&f.funct[\"(scope)\"].setExported(h.id,h.token)),c.push(h.token)));f.tokens.next.id===\"=\"&&(f.nameStack.set(f.tokens.curr),V(\"=\"),!t&&l&&!f.funct[\"(loopage)\"]&&f.tokens.next.id===\"undefined\"&&F(\"W080\",f.tokens.prev,f.tokens.prev.value),W(0).id===\"=\"&&f.tokens.next.identifier&&(!t&&l&&!f.funct[\"(params)\"]||f.funct[\"(params)\"].indexOf(f.tokens.next.value)===-1)&&F(\"W120\",f.tokens.next,f.tokens.next.value),u=Q(t?120:10),o?i[0].first=u:Zt(c,u));if(f.tokens.next.id!==\",\")break;tt()}return this});rn.exps=!0,st(\"class\",function(){return sn.call(this,!0)}),st(\"function\",function(e){var t=e&&e.inexport,n=!1;f.tokens.next.value===\"*\"&&(V(\"*\"),f.inES6({strict:!0})?n=!0:F(\"W119\",f.tokens.curr,\"function*\",\"6\")),m&&F(\"W082\",f.tokens.curr);var r=Nt();return f.funct[\"(scope)\"].addlabel(r,{type:\"function\",token:f.tokens.curr}),r===undefined?F(\"W025\"):t&&f.funct[\"(scope)\"].setExported(r,f.tokens.prev),Xt({name:r,statement:this,type:n?\"generator\":null,ignoreLoopFunc:m}),f.tokens.next.id===\"(\"&&f.tokens.next.line===f.tokens.curr.line&&q(\"E039\"),this}),ut(\"function\",function(){var e=!1;f.tokens.next.value===\"*\"&&(f.inES6()||F(\"W119\",f.tokens.curr,\"function*\",\"6\"),V(\"*\"),e=!0);var t=Nt();return Xt({name:t,type:e?\"generator\":null}),this}),st(\"if\",function(){var e=f.tokens.next;$t(),f.condition=!0,V(\"(\");var t=Q(0);Jt(t);var n=null;f.option.forin&&f.forinifcheckneeded&&(f.forinifcheckneeded=!1,n=f.forinifchecks[f.forinifchecks.length-1],t.type===\"(punctuator)\"&&t.value===\"!\"?n.type=\"(negative)\":n.type=\"(positive)\"),V(\")\",e),f.condition=!1;var r=_t(!0,!0);return n&&n.type===\"(negative)\"&&r&&r[0]&&r[0].type===\"(identifier)\"&&r[0].value===\"continue\"&&(n.type=\"(negative-with-continue)\"),f.tokens.next.id===\"else\"&&(V(\"else\"),f.tokens.next.id===\"if\"||f.tokens.next.id===\"switch\"?At():_t(!0,!0)),this}),st(\"try\",function(){function t(){V(\"catch\"),V(\"(\"),f.funct[\"(scope)\"].stack(\"catchparams\");if(hn(f.tokens.next,[\"[\",\"{\"])){var e=Gt();r.each(e,function(e){e.id&&f.funct[\"(scope)\"].addParam(e.id,e,\"exception\")})}else f.tokens.next.type!==\"(identifier)\"?F(\"E030\",f.tokens.next,f.tokens.next.value):f.funct[\"(scope)\"].addParam(Ct(),f.tokens.curr,\"exception\");f.tokens.next.value===\"if\"&&(f.inMoz()||F(\"W118\",f.tokens.curr,\"catch filter\"),V(\"if\"),Q(0)),V(\")\"),_t(!1),f.funct[\"(scope)\"].unstack()}var e;_t(!0);while(f.tokens.next.id===\"catch\")$t(),e&&!f.inMoz()&&F(\"W118\",f.tokens.next,\"multiple catch blocks\"),t(),e=!0;if(f.tokens.next.id===\"finally\"){V(\"finally\"),_t(!0);return}return e||q(\"E021\",f.tokens.next,\"catch\",f.tokens.next.value),this}),st(\"while\",function(){var e=f.tokens.next;return f.funct[\"(breakage)\"]+=1,f.funct[\"(loopage)\"]+=1,$t(),V(\"(\"),Jt(Q(0)),V(\")\",e),_t(!0,!0),f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1,this}).labelled=!0,st(\"with\",function(){var e=f.tokens.next;return f.isStrict()?q(\"E010\",f.tokens.curr):f.option.withstmt||F(\"W085\",f.tokens.curr),V(\"(\"),Q(0),V(\")\",e),_t(!0,!0),this}),st(\"switch\",function(){var e=f.tokens.next,t=!1,n=!1;f.funct[\"(breakage)\"]+=1,V(\"(\"),Jt(Q(0)),V(\")\",e),e=f.tokens.next,V(\"{\"),f.tokens.next.from===g&&(n=!0),n||(g+=f.option.indent),this.cases=[];for(;;)switch(f.tokens.next.id){case\"case\":switch(f.funct[\"(verb)\"]){case\"yield\":case\"break\":case\"case\":case\"continue\":case\"return\":case\"switch\":case\"throw\":break;default:f.tokens.curr.caseFallsThrough||F(\"W086\",f.tokens.curr,\"case\")}V(\"case\"),this.cases.push(Q(0)),$t(),t=!0,V(\":\"),f.funct[\"(verb)\"]=\"case\";break;case\"default\":switch(f.funct[\"(verb)\"]){case\"yield\":case\"break\":case\"continue\":case\"return\":case\"throw\":break;default:this.cases.length&&(f.tokens.curr.caseFallsThrough||F(\"W086\",f.tokens.curr,\"default\"))}V(\"default\"),t=!0,V(\":\");break;case\"}\":n||(g-=f.option.indent),V(\"}\",e),f.funct[\"(breakage)\"]-=1,f.funct[\"(verb)\"]=undefined;return;case\"(end)\":q(\"E023\",f.tokens.next,\"}\");return;default:g+=f.option.indent;if(t)switch(f.tokens.curr.id){case\",\":q(\"E040\");return;case\":\":t=!1,Ot();break;default:q(\"E025\",f.tokens.curr);return}else{if(f.tokens.curr.id!==\":\"){q(\"E021\",f.tokens.next,\"case\",f.tokens.next.value);return}V(\":\"),q(\"E024\",f.tokens.curr,\":\"),Ot()}g-=f.option.indent}return this}).labelled=!0,it(\"debugger\",function(){return f.option.debug||F(\"W087\",this),this}).exps=!0,function(){var e=it(\"do\",function(){f.funct[\"(breakage)\"]+=1,f.funct[\"(loopage)\"]+=1,$t(),this.first=_t(!0,!0),V(\"while\");var e=f.tokens.next;return V(\"(\"),Jt(Q(0)),V(\")\",e),f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1,this});e.labelled=!0,e.exps=!0}(),st(\"for\",function(){var e,t=f.tokens.next,n=!1,i=null;t.value===\"each\"&&(i=t,V(\"each\"),f.inMoz()||F(\"W118\",f.tokens.curr,\"for each\")),$t(),V(\"(\");var s,o=0,u=[\"in\",\"of\"],a=0,l,c;hn(f.tokens.next,[\"{\",\"[\"])&&++a;do{s=W(o),++o,hn(s,[\"{\",\"[\"])?++a:hn(s,[\"}\",\"]\"])&&--a;if(a<0)break;a===0&&(!l&&pn(s,\",\")?l=s:!c&&pn(s,\"=\")&&(c=s))}while(a>0||!r.contains(u,s.value)&&s.value!==\";\"&&s.type!==\"(end)\");if(r.contains(u,s.value)){!f.inES6()&&s.value===\"of\"&&F(\"W104\",s,\"for of\",\"6\");var h=!c&&!l;c&&q(\"W133\",l,s.value,\"initializer is forbidden\"),l&&q(\"W133\",l,s.value,\"more than one ForBinding\"),f.tokens.next.id===\"var\"?(V(\"var\"),f.tokens.curr.fud({prefix:!0})):f.tokens.next.id===\"let\"||f.tokens.next.id===\"const\"?(V(f.tokens.next.id),n=!0,f.funct[\"(scope)\"].stack(),f.tokens.curr.fud({prefix:!0})):Object.create(rn).fud({prefix:!0,implied:\"for\",ignore:!h}),V(s.value),Q(20),V(\")\",t),s.value===\"in\"&&f.option.forin&&(f.forinifcheckneeded=!0,f.forinifchecks===undefined&&(f.forinifchecks=[]),f.forinifchecks.push({type:\"(none)\"})),f.funct[\"(breakage)\"]+=1,f.funct[\"(loopage)\"]+=1,e=_t(!0,!0);if(s.value===\"in\"&&f.option.forin){if(f.forinifchecks&&f.forinifchecks.length>0){var p=f.forinifchecks.pop();(e&&e.length>0&&(typeof e[0]!=\"object\"||e[0].value!==\"if\")||p.type===\"(positive)\"&&e.length>1||p.type===\"(negative)\")&&F(\"W089\",this)}f.forinifcheckneeded=!1}f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1}else{i&&q(\"E045\",i);if(f.tokens.next.id!==\";\")if(f.tokens.next.id===\"var\")V(\"var\"),f.tokens.curr.fud();else if(f.tokens.next.id===\"let\")V(\"let\"),n=!0,f.funct[\"(scope)\"].stack(),f.tokens.curr.fud();else for(;;){Q(0,\"for\");if(f.tokens.next.id!==\",\")break;l()}Z(f.tokens.curr),V(\";\"),f.funct[\"(loopage)\"]+=1,f.tokens.next.id!==\";\"&&Jt(Q(0)),Z(f.tokens.curr),V(\";\"),f.tokens.next.id===\";\"&&q(\"E021\",f.tokens.next,\")\",\";\");if(f.tokens.next.id!==\")\")for(;;){Q(0,\"for\");if(f.tokens.next.id!==\",\")break;l()}V(\")\",t),f.funct[\"(breakage)\"]+=1,_t(!0,!0),f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1}return n&&f.funct[\"(scope)\"].unstack(),this}).labelled=!0,it(\"break\",function(){var e=f.tokens.next.value;return f.option.asi||Z(this),f.tokens.next.id!==\";\"&&!f.tokens.next.reach&&f.tokens.curr.line===G(f.tokens.next)?(f.funct[\"(scope)\"].funct.hasBreakLabel(e)||F(\"W090\",f.tokens.next,e),this.first=f.tokens.next,V()):f.funct[\"(breakage)\"]===0&&F(\"W052\",f.tokens.next,this.value),kt(this),this}).exps=!0,it(\"continue\",function(){var e=f.tokens.next.value;return f.funct[\"(breakage)\"]===0&&F(\"W052\",f.tokens.next,this.value),f.funct[\"(loopage)\"]||F(\"W052\",f.tokens.next,this.value),f.option.asi||Z(this),f.tokens.next.id!==\";\"&&!f.tokens.next.reach&&f.tokens.curr.line===G(f.tokens.next)&&(f.funct[\"(scope)\"].funct.hasBreakLabel(e)||F(\"W090\",f.tokens.next,e),this.first=f.tokens.next,V()),kt(this),this}).exps=!0,it(\"return\",function(){return this.line===G(f.tokens.next)?f.tokens.next.id!==\";\"&&!f.tokens.next.reach&&(this.first=Q(0),this.first&&this.first.type===\"(punctuator)\"&&this.first.value===\"=\"&&!this.first.paren&&!f.option.boss&&I(\"W093\",this.first.line,this.first.character)):f.tokens.next.type===\"(punctuator)\"&&[\"[\",\"{\",\"+\",\"-\"].indexOf(f.tokens.next.value)>-1&&Z(this),kt(this),this}).exps=!0,function(e){e.exps=!0,e.lbp=25}(ut(\"yield\",function(){var e=f.tokens.prev;f.inES6(!0)&&!f.funct[\"(generator)\"]?(\"(catch)\"!==f.funct[\"(name)\"]||!f.funct[\"(context)\"][\"(generator)\"])&&q(\"E046\",f.tokens.curr,\"yield\"):f.inES6()||F(\"W104\",f.tokens.curr,\"yield\",\"6\"),f.funct[\"(generator)\"]=\"yielded\";var t=!1;f.tokens.next.value===\"*\"&&(t=!0,V(\"*\"));if(this.line===G(f.tokens.next)||!f.inMoz()){if(t||f.tokens.next.id!==\";\"&&!f.option.asi&&!f.tokens.next.reach&&f.tokens.next.nud)Y(f.tokens.curr,f.tokens.next),this.first=Q(10),this.first.type===\"(punctuator)\"&&this.first.value===\"=\"&&!this.first.paren&&!f.option.boss&&I(\"W093\",this.first.line,this.first.character);f.inMoz()&&f.tokens.next.id!==\")\"&&(e.lbp>30||!e.assign&&!J()||e.id===\"yield\")&&q(\"E050\",this)}else f.option.asi||Z(this);return this})),it(\"throw\",function(){return Z(this),this.first=Q(20),kt(this),this}).exps=!0,it(\"import\",function(){f.inES6()||F(\"W119\",f.tokens.curr,\"import\",\"6\");if(f.tokens.next.type===\"(string)\")return V(\"(string)\"),this;if(f.tokens.next.identifier){this.name=Ct(),f.funct[\"(scope)\"].addlabel(this.name,{type:\"const\",token:f.tokens.curr});if(f.tokens.next.value!==\",\")return V(\"from\"),V(\"(string)\"),this;V(\",\")}if(f.tokens.next.id===\"*\")V(\"*\"),V(\"as\"),f.tokens.next.identifier&&(this.name=Ct(),f.funct[\"(scope)\"].addlabel(this.name,{type:\"const\",token:f.tokens.curr}));else{V(\"{\");for(;;){if(f.tokens.next.value===\"}\"){V(\"}\");break}var e;f.tokens.next.type===\"default\"?(e=\"default\",V(\"default\")):e=Ct(),f.tokens.next.value===\"as\"&&(V(\"as\"),e=Ct()),f.funct[\"(scope)\"].addlabel(e,{type:\"const\",token:f.tokens.curr});if(f.tokens.next.value!==\",\"){if(f.tokens.next.value===\"}\"){V(\"}\");break}q(\"E024\",f.tokens.next,f.tokens.next.value);break}V(\",\")}}return V(\"from\"),V(\"(string)\"),this}).exps=!0,it(\"export\",function(){var e=!0,t,n;f.inES6()||(F(\"W119\",f.tokens.curr,\"export\",\"6\"),e=!1),f.funct[\"(scope)\"].block.isGlobal()||(q(\"E053\",f.tokens.curr),e=!1);if(f.tokens.next.value===\"*\")return V(\"*\"),V(\"from\"),V(\"(string)\"),this;if(f.tokens.next.type===\"default\"){f.nameStack.set(f.tokens.next),V(\"default\");var r=f.tokens.next.id;if(r===\"function\"||r===\"class\")this.block=!0;return t=W(),Q(10),n=t.value,this.block&&(f.funct[\"(scope)\"].addlabel(n,{type:r,token:t}),f.funct[\"(scope)\"].setExported(n,t)),this}if(f.tokens.next.value===\"{\"){V(\"{\");var i=[];for(;;){f.tokens.next.identifier||q(\"E030\",f.tokens.next,f.tokens.next.value),V(),i.push(f.tokens.curr),f.tokens.next.value===\"as\"&&(V(\"as\"),f.tokens.next.identifier||q(\"E030\",f.tokens.next,f.tokens.next.value),V());if(f.tokens.next.value!==\",\"){if(f.tokens.next.value===\"}\"){V(\"}\");break}q(\"E024\",f.tokens.next,f.tokens.next.value);break}V(\",\")}return f.tokens.next.value===\"from\"?(V(\"from\"),V(\"(string)\")):e&&i.forEach(function(e){f.funct[\"(scope)\"].setExported(e.value,e)}),this}if(f.tokens.next.id===\"var\")V(\"var\"),f.tokens.curr.fud({inexport:!0});else if(f.tokens.next.id===\"let\")V(\"let\"),f.tokens.curr.fud({inexport:!0});else if(f.tokens.next.id===\"const\")V(\"const\"),f.tokens.curr.fud({inexport:!0});else if(f.tokens.next.id===\"function\")this.block=!0,V(\"function\"),f.syntax[\"function\"].fud({inexport:!0});else if(f.tokens.next.id===\"class\"){this.block=!0,V(\"class\");var s=f.tokens.next;f.syntax[\"class\"].fud(),f.funct[\"(scope)\"].setExported(s.value,s)}else q(\"E024\",f.tokens.next,f.tokens.next.value);return this}).exps=!0,lt(\"abstract\"),lt(\"boolean\"),lt(\"byte\"),lt(\"char\"),lt(\"class\",{es5:!0,nud:sn}),lt(\"double\"),lt(\"enum\",{es5:!0}),lt(\"export\",{es5:!0}),lt(\"extends\",{es5:!0}),lt(\"final\"),lt(\"float\"),lt(\"goto\"),lt(\"implements\",{es5:!0,strictOnly:!0}),lt(\"import\",{es5:!0}),lt(\"int\"),lt(\"interface\",{es5:!0,strictOnly:!0}),lt(\"long\"),lt(\"native\"),lt(\"package\",{es5:!0,strictOnly:!0}),lt(\"private\",{es5:!0,strictOnly:!0}),lt(\"protected\",{es5:!0,strictOnly:!0}),lt(\"public\",{es5:!0,strictOnly:!0}),lt(\"short\"),lt(\"static\",{es5:!0,strictOnly:!0}),lt(\"super\",{es5:!0}),lt(\"synchronized\"),lt(\"transient\"),lt(\"volatile\");var an=function(){var e,t,n,r=-1,i=0,s={};hn(f.tokens.curr,[\"[\",\"{\"])&&(i+=1);do{n=r===-1?f.tokens.curr:e,e=r===-1?f.tokens.next:W(r),t=W(r+1),r+=1,hn(e,[\"[\",\"{\"])?i+=1:hn(e,[\"]\",\"}\"])&&(i-=1);if(i===1&&e.identifier&&e.value===\"for\"&&!pn(n,\".\")){s.isCompArray=!0,s.notJson=!0;break}if(i===0&&hn(e,[\"}\",\"]\"])){if(t.value===\"=\"){s.isDestAssign=!0,s.notJson=!0;break}if(t.value===\".\"){s.notJson=!0;break}}pn(e,\";\")&&(s.isBlock=!0,s.notJson=!0)}while(i>0&&e.id!==\"(end)\");return s},vn=function(){function i(e){var t=n.variables.filter(function(t){if(t.value===e)return t.undef=!1,e}).length;return t!==0}function s(e){var t=n.variables.filter(function(t){if(t.value===e&&!t.undef)return t.unused===!0&&(t.unused=!1),e}).length;return t===0}var e=function(){this.mode=\"use\",this.variables=[]},t=[],n;return{stack:function(){n=new e,t.push(n)},unstack:function(){n.variables.filter(function(e){e.unused&&F(\"W098\",e.token,e.raw_text||e.value),e.undef&&f.funct[\"(scope)\"].block.use(e.value,e.token)}),t.splice(-1,1),n=t[t.length-1]},setState:function(e){r.contains([\"use\",\"define\",\"generate\",\"filter\"],e)&&(n.mode=e)},check:function(e){if(!n)return;return n&&n.mode===\"use\"?(s(e)&&n.variables.push({funct:f.funct,token:f.tokens.curr,value:e,undef:!0,unused:!1}),!0):n&&n.mode===\"define\"?(i(e)||n.variables.push({funct:f.funct,token:f.tokens.curr,value:e,undef:!1,unused:!0}),!0):n&&n.mode===\"generate\"?(f.funct[\"(scope)\"].block.use(e,f.tokens.curr),!0):n&&n.mode===\"filter\"?(s(e)&&f.funct[\"(scope)\"].block.use(e,f.tokens.curr),!0):!1}}},gn=function(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")},yn=function(t,i,o){function U(e,t){if(!e)return;!Array.isArray(e)&&typeof e==\"object\"&&(e=Object.keys(e)),e.forEach(t)}var a,l,c,d,A,O,M={},P={};i=r.clone(i),f.reset(),i&&i.scope?p.scope=i.scope:(p.errors=[],p.undefs=[],p.internals=[],p.blacklist={},p.scope=\"(main)\"),S=Object.create(null),D(S,s.ecmaIdentifiers[3]),D(S,s.reservedVars),D(S,o||{}),n=Object.create(null);var j=Object.create(null);if(i){U(i.predef||null,function(e){var t,n;e[0]===\"-\"?(t=e.slice(1),p.blacklist[t]=t,delete S[t]):(n=Object.getOwnPropertyDescriptor(i.predef,e),S[e]=n?n.value:!1)}),U(i.exported||null,function(e){j[e]=!0}),delete i.predef,delete i.exported,O=Object.keys(i);for(c=0;c<O.length;c++)if(/^-W\\d{3}$/g.test(O[c]))P[O[c].slice(1)]=!0;else{var z=O[c];M[z]=i[z],(z===\"esversion\"&&i[z]===5||z===\"es5\"&&i[z])&&F(\"I003\"),O[c]===\"newcap\"&&i[z]===!1&&(M[\"(explicitNewcap)\"]=!0)}}f.option=M,f.ignored=P,f.option.indent=f.option.indent||4,f.option.maxerr=f.option.maxerr||50,g=1;var W=h(f,S,j,n);W.on(\"warning\",function(e){F.apply(null,[e.code,e.token].concat(e.data))}),W.on(\"error\",function(e){q.apply(null,[e.code,e.token].concat(e.data))}),f.funct=Rt(\"(global)\",null,{\"(global)\":!0,\"(scope)\":W,\"(comparray)\":vn(),\"(metrics)\":Vt(f.tokens.next)}),v=[f.funct],T=[],x=null,w={},E=null,m=!1,y=[];if(!L(t)&&!Array.isArray(t))return R(\"E004\",0),!1;e={get isJSON(){return f.jsonMode},getOption:function(e){return f.option[e]||null},getCache:function(e){return f.cache[e]},setCache:function(e,t){f.cache[e]=t},warn:function(e,t){I.apply(null,[e,t.line,t.char].concat(t.data))},on:function(e,t){e.split(\" \").forEach(function(e){C.on(e,t)}.bind(this))}},C.removeAllListeners(),(N||[]).forEach(function(t){t(e)}),f.tokens.prev=f.tokens.curr=f.tokens.next=f.syntax[\"(begin)\"],i&&i.ignoreDelimiters&&(Array.isArray(i.ignoreDelimiters)||(i.ignoreDelimiters=[i.ignoreDelimiters]),i.ignoreDelimiters.forEach(function(e){if(!e.start||!e.end)return;d=gn(e.start)+\"[\\\\s\\\\S]*?\"+gn(e.end),A=new RegExp(d,\"ig\"),t=t.replace(A,function(e){return e.replace(/./g,\" \")})})),b=new u(t),b.on(\"warning\",function(e){I.apply(null,[e.code,e.line,e.character].concat(e.data))}),b.on(\"error\",function(e){R.apply(null,[e.code,e.line,e.character].concat(e.data))}),b.on(\"fatal\",function(e){B(\"E041\",e.line,e.from)}),b.on(\"Identifier\",function(e){C.emit(\"Identifier\",e)}),b.on(\"String\",function(e){C.emit(\"String\",e)}),b.on(\"Number\",function(e){C.emit(\"Number\",e)}),b.start();for(var X in i)r.has(i,X)&&k(X,f.tokens.curr);H(),D(S,o||{}),tt.first=!0;try{V();switch(f.tokens.next.id){case\"{\":case\"[\":dn();break;default:Mt(),f.directive[\"use strict\"]&&f.option.strict!==\"global\"&&F(\"W097\",f.tokens.prev),Ot()}f.tokens.next.id!==\"(end)\"&&B(\"E041\",f.tokens.curr.line),f.funct[\"(scope)\"].unstack()}catch($){if(!$||$.name!==\"JSHintError\")throw $;var J=f.tokens.next||{};p.errors.push({scope:\"(main)\",raw:$.raw,code:$.code,reason:$.message,line:$.line||J.line,character:$.character||J.from},null)}if(p.scope===\"(main)\"){i=i||{};for(a=0;a<p.internals.length;a+=1)l=p.internals[a],i.scope=l.elem,yn(l.value,i,o)}return p.errors.length===0};return yn.addModule=function(e){N.push(e)},yn.addModule(l.register),yn.data=function(){var e={functions:[],options:f.option},t,n,r,i,s,o;yn.errors.length&&(e.errors=yn.errors),f.jsonMode&&(e.json=!0);var u=f.funct[\"(scope)\"].getImpliedGlobals();u.length>0&&(e.implieds=u),T.length>0&&(e.urls=T),o=f.funct[\"(scope)\"].getUsedOrDefinedGlobals(),o.length>0&&(e.globals=o);for(r=1;r<v.length;r+=1){n=v[r],t={};for(i=0;i<d.length;i+=1)t[d[i]]=[];for(i=0;i<d.length;i+=1)t[d[i]].length===0&&delete t[d[i]];t.name=n[\"(name)\"],t.param=n[\"(params)\"],t.line=n[\"(line)\"],t.character=n[\"(character)\"],t.last=n[\"(last)\"],t.lastcharacter=n[\"(lastcharacter)\"],t.metrics={complexity:n[\"(metrics)\"].ComplexityCount,parameters:n[\"(metrics)\"].arity,statements:n[\"(metrics)\"].statementCount},e.functions.push(t)}var a=f.funct[\"(scope)\"].getUnuseds();a.length>0&&(e.unused=a);for(s in w)if(typeof w[s]==\"number\"){e.member=w;break}return e},yn.jshint=yn,yn}();typeof n==\"object\"&&n&&(n.JSHINT=p)},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./lex.js\":\"/node_modules/jshint/src/lex.js\",\"./messages.js\":\"/node_modules/jshint/src/messages.js\",\"./options.js\":\"/node_modules/jshint/src/options.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./scope-manager.js\":\"/node_modules/jshint/src/scope-manager.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"./style.js\":\"/node_modules/jshint/src/style.js\",\"./vars.js\":\"/node_modules/jshint/src/vars.js\",events:\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/lex.js\":[function(e,t,n){\"use strict\";function h(){var e=[];return{push:function(t){e.push(t)},check:function(){for(var t=0;t<e.length;++t)e[t]();e.splice(0,e.length)}}}function p(e){var t=e;typeof t==\"string\"&&(t=t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\").split(\"\\n\")),t[0]&&t[0].substr(0,2)===\"#!\"&&(t[0].indexOf(\"node\")!==-1&&(o.option.node=!0),t[0]=\"\"),this.emitter=new i.EventEmitter,this.source=e,this.setLines(t),this.prereg=!0,this.line=0,this.char=1,this.from=1,this.input=\"\",this.inComment=!1,this.context=[],this.templateStarts=[];for(var n=0;n<o.option.indent;n+=1)o.tab+=\" \";this.ignoreLinterErrors=!1}var r=e(\"../lodash\"),i=e(\"events\"),s=e(\"./reg.js\"),o=e(\"./state.js\").state,u=e(\"../data/ascii-identifier-data.js\"),a=u.asciiIdentifierStartTable,f=u.asciiIdentifierPartTable,l={Identifier:1,Punctuator:2,NumericLiteral:3,StringLiteral:4,Comment:5,Keyword:6,NullLiteral:7,BooleanLiteral:8,RegExp:9,TemplateHead:10,TemplateMiddle:11,TemplateTail:12,NoSubstTemplate:13},c={Block:1,Template:2};p.prototype={_lines:[],inContext:function(e){return this.context.length>0&&this.context[this.context.length-1].type===e},pushContext:function(e){this.context.push({type:e})},popContext:function(){return this.context.pop()},isContext:function(e){return this.context.length>0&&this.context[this.context.length-1]===e},currentContext:function(){return this.context.length>0&&this.context[this.context.length-1]},getLines:function(){return this._lines=o.lines,this._lines},setLines:function(e){this._lines=e,o.lines=this._lines},peek:function(e){return this.input.charAt(e||0)},skip:function(e){e=e||1,this.char+=e,this.input=this.input.slice(e)},on:function(e,t){e.split(\" \").forEach(function(e){this.emitter.on(e,t)}.bind(this))},trigger:function(){this.emitter.emit.apply(this.emitter,Array.prototype.slice.call(arguments))},triggerAsync:function(e,t,n,r){n.push(function(){r()&&this.trigger(e,t)}.bind(this))},scanPunctuator:function(){var e=this.peek(),t,n,r;switch(e){case\".\":if(/^[0-9]$/.test(this.peek(1)))return null;if(this.peek(1)===\".\"&&this.peek(2)===\".\")return{type:l.Punctuator,value:\"...\"};case\"(\":case\")\":case\";\":case\",\":case\"[\":case\"]\":case\":\":case\"~\":case\"?\":return{type:l.Punctuator,value:e};case\"{\":return this.pushContext(c.Block),{type:l.Punctuator,value:e};case\"}\":return this.inContext(c.Block)&&this.popContext(),{type:l.Punctuator,value:e};case\"#\":return{type:l.Punctuator,value:e};case\"\":return null}return t=this.peek(1),n=this.peek(2),r=this.peek(3),e===\">\"&&t===\">\"&&n===\">\"&&r===\"=\"?{type:l.Punctuator,value:\">>>=\"}:e===\"=\"&&t===\"=\"&&n===\"=\"?{type:l.Punctuator,value:\"===\"}:e===\"!\"&&t===\"=\"&&n===\"=\"?{type:l.Punctuator,value:\"!==\"}:e===\">\"&&t===\">\"&&n===\">\"?{type:l.Punctuator,value:\">>>\"}:e===\"<\"&&t===\"<\"&&n===\"=\"?{type:l.Punctuator,value:\"<<=\"}:e===\">\"&&t===\">\"&&n===\"=\"?{type:l.Punctuator,value:\">>=\"}:e===\"=\"&&t===\">\"?{type:l.Punctuator,value:e+t}:e===t&&\"+-<>&|\".indexOf(e)>=0?{type:l.Punctuator,value:e+t}:\"<>=!+-*%&|^\".indexOf(e)>=0?t===\"=\"?{type:l.Punctuator,value:e+t}:{type:l.Punctuator,value:e}:e===\"/\"?t===\"=\"?{type:l.Punctuator,value:\"/=\"}:{type:l.Punctuator,value:\"/\"}:null},scanComments:function(){function u(e,t,n){var r=[\"jshint\",\"jslint\",\"members\",\"member\",\"globals\",\"global\",\"exported\"],i=!1,u=e+t,a=\"plain\";return n=n||{},n.isMultiline&&(u+=\"*/\"),t=t.replace(/\\n/g,\" \"),e===\"/*\"&&s.fallsThrough.test(t)&&(i=!0,a=\"falls through\"),r.forEach(function(n){if(i)return;if(e===\"//\"&&n!==\"jshint\")return;t.charAt(n.length)===\" \"&&t.substr(0,n.length)===n&&(i=!0,e+=n,t=t.substr(n.length)),!i&&t.charAt(0)===\" \"&&t.charAt(n.length+1)===\" \"&&t.substr(1,n.length)===n&&(i=!0,e=e+\" \"+n,t=t.substr(n.length+1));if(!i)return;switch(n){case\"member\":a=\"members\";break;case\"global\":a=\"globals\";break;default:var r=t.split(\":\").map(function(e){return e.replace(/^\\s+/,\"\").replace(/\\s+$/,\"\")});if(r.length===2)switch(r[0]){case\"ignore\":switch(r[1]){case\"start\":o.ignoringLinterErrors=!0,i=!1;break;case\"end\":o.ignoringLinterErrors=!1,i=!1}}a=n}}),{type:l.Comment,commentType:a,value:u,body:t,isSpecial:i,isMultiline:n.isMultiline||!1,isMalformed:n.isMalformed||!1}}var e=this.peek(),t=this.peek(1),n=this.input.substr(2),r=this.line,i=this.char,o=this;if(e===\"*\"&&t===\"/\")return this.trigger(\"error\",{code:\"E018\",line:r,character:i}),this.skip(2),null;if(e!==\"/\"||t!==\"*\"&&t!==\"/\")return null;if(t===\"/\")return this.skip(this.input.length),u(\"//\",n);var a=\"\";if(t===\"*\"){this.inComment=!0,this.skip(2);while(this.peek()!==\"*\"||this.peek(1)!==\"/\")if(this.peek()===\"\"){a+=\"\\n\";if(!this.nextLine())return this.trigger(\"error\",{code:\"E017\",line:r,character:i}),this.inComment=!1,u(\"/*\",a,{isMultiline:!0,isMalformed:!0})}else a+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,u(\"/*\",a,{isMultiline:!0})}},scanKeyword:function(){var e=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),t=[\"if\",\"in\",\"do\",\"var\",\"for\",\"new\",\"try\",\"let\",\"this\",\"else\",\"case\",\"void\",\"with\",\"enum\",\"while\",\"break\",\"catch\",\"throw\",\"const\",\"yield\",\"class\",\"super\",\"return\",\"typeof\",\"delete\",\"switch\",\"export\",\"import\",\"default\",\"finally\",\"extends\",\"function\",\"continue\",\"debugger\",\"instanceof\"];return e&&t.indexOf(e[0])>=0?{type:l.Keyword,value:e[0]}:null},scanIdentifier:function(){function i(e){return e>256}function s(e){return e>256}function o(e){return/^[0-9a-fA-F]$/.test(e)}function p(e){return e.replace(/\\\\u([0-9a-fA-F]{4})/g,function(e,t){return String.fromCharCode(parseInt(t,16))})}var e=\"\",t=0,n,r,u=function(){t+=1;if(this.peek(t)!==\"u\")return null;var e=this.peek(t+1),n=this.peek(t+2),r=this.peek(t+3),i=this.peek(t+4),u;return o(e)&&o(n)&&o(r)&&o(i)?(u=parseInt(e+n+r+i,16),f[u]||s(u)?(t+=5,\"\\\\u\"+e+n+r+i):null):null}.bind(this),c=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?a[n]?(t+=1,e):null:i(n)?(t+=1,e):null}.bind(this),h=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?f[n]?(t+=1,e):null:s(n)?(t+=1,e):null}.bind(this);r=c();if(r===null)return null;e=r;for(;;){r=h();if(r===null)break;e+=r}switch(e){case\"true\":case\"false\":n=l.BooleanLiteral;break;case\"null\":n=l.NullLiteral;break;default:n=l.Identifier}return{type:n,value:p(e),text:e,tokenLength:e.length}},scanNumericLiteral:function(){function f(e){return/^[0-9]$/.test(e)}function c(e){return/^[0-7]$/.test(e)}function h(e){return/^[01]$/.test(e)}function p(e){return/^[0-9a-fA-F]$/.test(e)}function d(e){return e===\"$\"||e===\"_\"||e===\"\\\\\"||e>=\"a\"&&e<=\"z\"||e>=\"A\"&&e<=\"Z\"}var e=0,t=\"\",n=this.input.length,r=this.peek(e),i,s=f,u=10,a=!1;if(r!==\".\"&&!f(r))return null;if(r!==\".\"){t=this.peek(e),e+=1,r=this.peek(e);if(t===\"0\"){if(r===\"x\"||r===\"X\")s=p,u=16,e+=1,t+=r;if(r===\"o\"||r===\"O\")s=c,u=8,o.inES6(!0)||this.trigger(\"warning\",{code:\"W119\",line:this.line,character:this.char,data:[\"Octal integer literal\",\"6\"]}),e+=1,t+=r;if(r===\"b\"||r===\"B\")s=h,u=2,o.inES6(!0)||this.trigger(\"warning\",{code:\"W119\",line:this.line,character:this.char,data:[\"Binary integer literal\",\"6\"]}),e+=1,t+=r;c(r)&&(s=c,u=8,a=!0,i=!1,e+=1,t+=r),!c(r)&&f(r)&&(e+=1,t+=r)}while(e<n){r=this.peek(e);if(a&&f(r))i=!0;else if(!s(r))break;t+=r,e+=1}if(s!==f){if(!a&&t.length<=2)return{type:l.NumericLiteral,value:t,isMalformed:!0};if(e<n){r=this.peek(e);if(d(r))return null}return{type:l.NumericLiteral,value:t,base:u,isLegacy:a,isMalformed:!1}}}if(r===\".\"){t+=r,e+=1;while(e<n){r=this.peek(e);if(!f(r))break;t+=r,e+=1}}if(r===\"e\"||r===\"E\"){t+=r,e+=1,r=this.peek(e);if(r===\"+\"||r===\"-\")t+=this.peek(e),e+=1;r=this.peek(e);if(!f(r))return null;t+=r,e+=1;while(e<n){r=this.peek(e);if(!f(r))break;t+=r,e+=1}}if(e<n){r=this.peek(e);if(d(r))return null}return{type:l.NumericLiteral,value:t,base:u,isMalformed:!isFinite(t)}},scanEscapeSequence:function(e){var t=!1,n=1;this.skip();var r=this.peek();switch(r){case\"'\":this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\'\"]},e,function(){return o.jsonMode});break;case\"b\":r=\"\\\\b\";break;case\"f\":r=\"\\\\f\";break;case\"n\":r=\"\\\\n\";break;case\"r\":r=\"\\\\r\";break;case\"t\":r=\"\\\\t\";break;case\"0\":r=\"\\\\0\";var i=parseInt(this.peek(1),10);this.triggerAsync(\"warning\",{code:\"W115\",line:this.line,character:this.char},e,function(){return i>=0&&i<=7&&o.isStrict()});break;case\"u\":var s=this.input.substr(1,4),u=parseInt(s,16);isNaN(u)&&this.trigger(\"warning\",{code:\"W052\",line:this.line,character:this.char,data:[\"u\"+s]}),r=String.fromCharCode(u),n=5;break;case\"v\":this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\v\"]},e,function(){return o.jsonMode}),r=\"\\x0b\";break;case\"x\":var a=parseInt(this.input.substr(1,2),16);this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\x-\"]},e,function(){return o.jsonMode}),r=String.fromCharCode(a),n=3;break;case\"\\\\\":r=\"\\\\\\\\\";break;case'\"':r='\\\\\"';break;case\"/\":break;case\"\":t=!0,r=\"\"}return{\"char\":r,jump:n,allowNewLine:t}},scanTemplateLiteral:function(e){var t,n=\"\",r,i=this.line,s=this.char,u=this.templateStarts.length;if(!o.inES6(!0))return null;if(this.peek()===\"`\")t=l.TemplateHead,this.templateStarts.push({line:this.line,\"char\":this.char}),u=this.templateStarts.length,this.skip(1),this.pushContext(c.Template);else{if(!this.inContext(c.Template)||this.peek()!==\"}\")return null;t=l.TemplateMiddle}while(this.peek()!==\"`\"){while((r=this.peek())===\"\"){n+=\"\\n\";if(!this.nextLine()){var a=this.templateStarts.pop();return this.trigger(\"error\",{code:\"E052\",line:a.line,character:a.char}),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!0,depth:u,context:this.popContext()}}}if(r===\"$\"&&this.peek(1)===\"{\")return n+=\"${\",this.skip(2),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!1,depth:u,context:this.currentContext()};if(r===\"\\\\\"){var f=this.scanEscapeSequence(e);n+=f.char,this.skip(f.jump)}else r!==\"`\"&&(n+=r,this.skip(1))}return t=t===l.TemplateHead?l.NoSubstTemplate:l.TemplateTail,this.skip(1),this.templateStarts.pop(),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!1,depth:u,context:this.popContext()}},scanStringLiteral:function(e){var t=this.peek();if(t!=='\"'&&t!==\"'\")return null;this.triggerAsync(\"warning\",{code:\"W108\",line:this.line,character:this.char},e,function(){return o.jsonMode&&t!=='\"'});var n=\"\",r=this.line,i=this.char,s=!1;this.skip();while(this.peek()!==t)if(this.peek()===\"\"){s?(s=!1,this.triggerAsync(\"warning\",{code:\"W043\",line:this.line,character:this.char},e,function(){return!o.option.multistr}),this.triggerAsync(\"warning\",{code:\"W042\",line:this.line,character:this.char},e,function(){return o.jsonMode&&o.option.multistr})):this.trigger(\"warning\",{code:\"W112\",line:this.line,character:this.char});if(!this.nextLine())return this.trigger(\"error\",{code:\"E029\",line:r,character:i}),{type:l.StringLiteral,value:n,startLine:r,startChar:i,isUnclosed:!0,quote:t}}else{s=!1;var u=this.peek(),a=1;u<\" \"&&this.trigger(\"warning\",{code:\"W113\",line:this.line,character:this.char,data:[\"<non-printable>\"]});if(u===\"\\\\\"){var f=this.scanEscapeSequence(e);u=f.char,a=f.jump,s=f.allowNewLine}n+=u,this.skip(a)}return this.skip(),{type:l.StringLiteral,value:n,startLine:r,startChar:i,isUnclosed:!1,quote:t}},scanRegExp:function(){var e=0,t=this.input.length,n=this.peek(),r=n,i=\"\",s=[],o=!1,u=!1,a,f=function(){n<\" \"&&(o=!0,this.trigger(\"warning\",{code:\"W048\",line:this.line,character:this.char})),n===\"<\"&&(o=!0,this.trigger(\"warning\",{code:\"W049\",line:this.line,character:this.char,data:[n]}))}.bind(this);if(!this.prereg||n!==\"/\")return null;e+=1,a=!1;while(e<t){n=this.peek(e),r+=n,i+=n;if(u){n===\"]\"&&(this.peek(e-1)!==\"\\\\\"||this.peek(e-2)===\"\\\\\")&&(u=!1),n===\"\\\\\"&&(e+=1,n=this.peek(e),i+=n,r+=n,f()),e+=1;continue}if(n===\"\\\\\"){e+=1,n=this.peek(e),i+=n,r+=n,f();if(n===\"/\"){e+=1;continue}if(n===\"[\"){e+=1;continue}}if(n===\"[\"){u=!0,e+=1;continue}if(n===\"/\"){i=i.substr(0,i.length-1),a=!0,e+=1;break}e+=1}if(!a)return this.trigger(\"error\",{code:\"E015\",line:this.line,character:this.from}),void this.trigger(\"fatal\",{line:this.line,from:this.from});while(e<t){n=this.peek(e);if(!/[gim]/.test(n))break;s.push(n),r+=n,e+=1}try{new RegExp(i,s.join(\"\"))}catch(c){o=!0,this.trigger(\"error\",{code:\"E016\",line:this.line,character:this.char,data:[c.message]})}return{type:l.RegExp,value:r,flags:s,isMalformed:o}},scanNonBreakingSpaces:function(){return o.option.nonbsp?this.input.search(/(\\u00A0)/):-1},scanUnsafeChars:function(){return this.input.search(s.unsafeChars)},next:function(e){this.from=this.char;var t;if(/\\s/.test(this.peek())){t=this.char;while(/\\s/.test(this.peek()))this.from+=1,this.skip()}var n=this.scanComments()||this.scanStringLiteral(e)||this.scanTemplateLiteral(e);return n?n:(n=this.scanRegExp()||this.scanPunctuator()||this.scanKeyword()||this.scanIdentifier()||this.scanNumericLiteral(),n?(this.skip(n.tokenLength||n.value.length),n):null)},nextLine:function(){var e;if(this.line>=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var t=this.input.trim(),n=function(){return r.some(arguments,function(e){return t.indexOf(e)===0})},i=function(){return r.some(arguments,function(e){return t.indexOf(e,t.length-e.length)!==-1})};this.ignoringLinterErrors===!0&&!n(\"/*\",\"//\")&&(!this.inComment||!i(\"*/\"))&&(this.input=\"\"),e=this.scanNonBreakingSpaces(),e>=0&&this.trigger(\"warning\",{code:\"W125\",line:this.line,character:e+1}),this.input=this.input.replace(/\\t/g,o.tab),e=this.scanUnsafeChars(),e>=0&&this.trigger(\"warning\",{code:\"W100\",line:this.line,character:e});if(!this.ignoringLinterErrors&&o.option.maxlen&&o.option.maxlen<this.input.length){var u=this.inComment||n.call(t,\"//\")||n.call(t,\"/*\"),a=!u||!s.maxlenException.test(t);a&&this.trigger(\"warning\",{code:\"W101\",line:this.line,character:this.input.length})}return!0},start:function(){this.nextLine()},token:function(){function n(e,t){if(!e.reserved)return!1;var n=e.meta;if(n&&n.isFutureReservedWord&&o.inES5()){if(!n.es5)return!1;if(n.strictOnly&&!o.option.strict&&!o.isStrict())return!1;if(t)return!1}return!0}var e=h(),t,i=function(t,i,s,u){var a;t!==\"(endline)\"&&t!==\"(end)\"&&(this.prereg=!1);if(t===\"(punctuator)\"){switch(i){case\".\":case\")\":case\"~\":case\"#\":case\"]\":case\"++\":case\"--\":this.prereg=!1;break;default:this.prereg=!0}a=Object.create(o.syntax[i]||o.syntax[\"(error)\"])}if(t===\"(identifier)\"){if(i===\"return\"||i===\"case\"||i===\"typeof\")this.prereg=!0;r.has(o.syntax,i)&&(a=Object.create(o.syntax[i]||o.syntax[\"(error)\"]),n(a,s&&t===\"(identifier)\")||(a=null))}return a||(a=Object.create(o.syntax[t])),a.identifier=t===\"(identifier)\",a.type=a.type||t,a.value=i,a.line=this.line,a.character=this.char,a.from=this.from,a.identifier&&u&&(a.raw_text=u.text||u.value),u&&u.startLine&&u.startLine!==this.line&&(a.startLine=u.startLine),u&&u.context&&(a.context=u.context),u&&u.depth&&(a.depth=u.depth),u&&u.isUnclosed&&(a.isUnclosed=u.isUnclosed),s&&a.identifier&&(a.isProperty=s),a.check=e.check,a}.bind(this);for(;;){if(!this.input.length)return this.nextLine()?i(\"(endline)\",\"\"):this.exhausted?null:(this.exhausted=!0,i(\"(end)\",\"\"));t=this.next(e);if(!t){this.input.length&&(this.trigger(\"error\",{code:\"E024\",line:this.line,character:this.char,data:[this.peek()]}),this.input=\"\");continue}switch(t.type){case l.StringLiteral:return this.triggerAsync(\"String\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value,quote:t.quote},e,function(){return!0}),i(\"(string)\",t.value,null,t);case l.TemplateHead:return this.trigger(\"TemplateHead\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(template)\",t.value,null,t);case l.TemplateMiddle:return this.trigger(\"TemplateMiddle\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(template middle)\",t.value,null,t);case l.TemplateTail:return this.trigger(\"TemplateTail\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(template tail)\",t.value,null,t);case l.NoSubstTemplate:return this.trigger(\"NoSubstTemplate\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(no subst template)\",t.value,null,t);case l.Identifier:this.triggerAsync(\"Identifier\",{line:this.line,\"char\":this.char,from:this.form,name:t.value,raw_name:t.text,isProperty:o.tokens.curr.id===\".\"},e,function(){return!0});case l.Keyword:case l.NullLiteral:case l.BooleanLiteral:return i(\"(identifier)\",t.value,o.tokens.curr.id===\".\",t);case l.NumericLiteral:return t.isMalformed&&this.trigger(\"warning\",{code:\"W045\",line:this.line,character:this.char,data:[t.value]}),this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"0x-\"]},e,function(){return t.base===16&&o.jsonMode}),this.triggerAsync(\"warning\",{code:\"W115\",line:this.line,character:this.char},e,function(){return o.isStrict()&&t.base===8&&t.isLegacy}),this.trigger(\"Number\",{line:this.line,\"char\":this.char,from:this.from,value:t.value,base:t.base,isMalformed:t.malformed}),i(\"(number)\",t.value);case l.RegExp:return i(\"(regexp)\",t.value);case l.Comment:o.tokens.curr.comment=!0;if(t.isSpecial)return{id:\"(comment)\",value:t.value,body:t.body,type:t.commentType,isSpecial:t.isSpecial,line:this.line,character:this.char,from:this.from};break;case\"\":break;default:return i(\"(punctuator)\",t.value)}}}},n.Lexer=p,n.Context=c},{\"../data/ascii-identifier-data.js\":\"/node_modules/jshint/data/ascii-identifier-data.js\",\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",events:\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/messages.js\":[function(e,t,n){\"use strict\";var r=e(\"../lodash\"),i={E001:\"Bad option: '{a}'.\",E002:\"Bad option value.\",E003:\"Expected a JSON value.\",E004:\"Input is neither a string nor an array of strings.\",E005:\"Input is empty.\",E006:\"Unexpected early end of program.\",E007:'Missing \"use strict\" statement.',E008:\"Strict violation.\",E009:\"Option 'validthis' can't be used in a global scope.\",E010:\"'with' is not allowed in strict mode.\",E011:\"'{a}' has already been declared.\",E012:\"const '{a}' is initialized to 'undefined'.\",E013:\"Attempting to override '{a}' which is a constant.\",E014:\"A regular expression literal can be confused with '/='.\",E015:\"Unclosed regular expression.\",E016:\"Invalid regular expression.\",E017:\"Unclosed comment.\",E018:\"Unbegun comment.\",E019:\"Unmatched '{a}'.\",E020:\"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.\",E021:\"Expected '{a}' and instead saw '{b}'.\",E022:\"Line breaking error '{a}'.\",E023:\"Missing '{a}'.\",E024:\"Unexpected '{a}'.\",E025:\"Missing ':' on a case clause.\",E026:\"Missing '}' to match '{' from line {a}.\",E027:\"Missing ']' to match '[' from line {a}.\",E028:\"Illegal comma.\",E029:\"Unclosed string.\",E030:\"Expected an identifier and instead saw '{a}'.\",E031:\"Bad assignment.\",E032:\"Expected a small integer or 'false' and instead saw '{a}'.\",E033:\"Expected an operator and instead saw '{a}'.\",E034:\"get/set are ES5 features.\",E035:\"Missing property name.\",E036:\"Expected to see a statement and instead saw a block.\",E037:null,E038:null,E039:\"Function declarations are not invocable. Wrap the whole function invocation in parens.\",E040:\"Each value should have its own case label.\",E041:\"Unrecoverable syntax error.\",E042:\"Stopping.\",E043:\"Too many errors.\",E044:null,E045:\"Invalid for each loop.\",E046:\"A yield statement shall be within a generator function (with syntax: `function*`)\",E047:null,E048:\"{a} declaration not directly within block.\",E049:\"A {a} cannot be named '{b}'.\",E050:\"Mozilla requires the yield expression to be parenthesized here.\",E051:null,E052:\"Unclosed template literal.\",E053:\"Export declaration must be in global scope.\",E054:\"Class properties must be methods. Expected '(' but instead saw '{a}'.\",E055:\"The '{a}' option cannot be set after any executable code.\",E056:\"'{a}' was used before it was declared, which is illegal for '{b}' variables.\",E057:\"Invalid meta property: '{a}.{b}'.\",E058:\"Missing semicolon.\"},s={W001:\"'hasOwnProperty' is a really bad name.\",W002:\"Value of '{a}' may be overwritten in IE 8 and earlier.\",W003:\"'{a}' was used before it was defined.\",W004:\"'{a}' is already defined.\",W005:\"A dot following a number can be confused with a decimal point.\",W006:\"Confusing minuses.\",W007:\"Confusing plusses.\",W008:\"A leading decimal point can be confused with a dot: '{a}'.\",W009:\"The array literal notation [] is preferable.\",W010:\"The object literal notation {} is preferable.\",W011:null,W012:null,W013:null,W014:\"Bad line breaking before '{a}'.\",W015:null,W016:\"Unexpected use of '{a}'.\",W017:\"Bad operand.\",W018:\"Confusing use of '{a}'.\",W019:\"Use the isNaN function to compare with NaN.\",W020:\"Read only.\",W021:\"Reassignment of '{a}', which is is a {b}. Use 'var' or 'let' to declare bindings that may change.\",W022:\"Do not assign to the exception parameter.\",W023:\"Expected an identifier in an assignment and instead saw a function invocation.\",W024:\"Expected an identifier and instead saw '{a}' (a reserved word).\",W025:\"Missing name in function declaration.\",W026:\"Inner functions should be listed at the top of the outer function.\",W027:\"Unreachable '{a}' after '{b}'.\",W028:\"Label '{a}' on {b} statement.\",W030:\"Expected an assignment or function call and instead saw an expression.\",W031:\"Do not use 'new' for side effects.\",W032:\"Unnecessary semicolon.\",W033:\"Missing semicolon.\",W034:'Unnecessary directive \"{a}\".',W035:\"Empty block.\",W036:\"Unexpected /*member '{a}'.\",W037:\"'{a}' is a statement label.\",W038:\"'{a}' used out of scope.\",W039:\"'{a}' is not allowed.\",W040:\"Possible strict violation.\",W041:\"Use '{a}' to compare with '{b}'.\",W042:\"Avoid EOL escaping.\",W043:\"Bad escaping of EOL. Use option multistr if needed.\",W044:\"Bad or unnecessary escaping.\",W045:\"Bad number '{a}'.\",W046:\"Don't use extra leading zeros '{a}'.\",W047:\"A trailing decimal point can be confused with a dot: '{a}'.\",W048:\"Unexpected control character in regular expression.\",W049:\"Unexpected escaped character '{a}' in regular expression.\",W050:\"JavaScript URL.\",W051:\"Variables should not be deleted.\",W052:\"Unexpected '{a}'.\",W053:\"Do not use {a} as a constructor.\",W054:\"The Function constructor is a form of eval.\",W055:\"A constructor name should start with an uppercase letter.\",W056:\"Bad constructor.\",W057:\"Weird construction. Is 'new' necessary?\",W058:\"Missing '()' invoking a constructor.\",W059:\"Avoid arguments.{a}.\",W060:\"document.write can be a form of eval.\",W061:\"eval can be harmful.\",W062:\"Wrap an immediate function invocation in parens to assist the reader in understanding that the expression is the result of a function, and not the function itself.\",W063:\"Math is not a function.\",W064:\"Missing 'new' prefix when invoking a constructor.\",W065:\"Missing radix parameter.\",W066:\"Implied eval. Consider passing a function instead of a string.\",W067:\"Bad invocation.\",W068:\"Wrapping non-IIFE function literals in parens is unnecessary.\",W069:\"['{a}'] is better written in dot notation.\",W070:\"Extra comma. (it breaks older versions of IE)\",W071:\"This function has too many statements. ({a})\",W072:\"This function has too many parameters. ({a})\",W073:\"Blocks are nested too deeply. ({a})\",W074:\"This function's cyclomatic complexity is too high. ({a})\",W075:\"Duplicate {a} '{b}'.\",W076:\"Unexpected parameter '{a}' in get {b} function.\",W077:\"Expected a single parameter in set {a} function.\",W078:\"Setter is defined without getter.\",W079:\"Redefinition of '{a}'.\",W080:\"It's not necessary to initialize '{a}' to 'undefined'.\",W081:null,W082:\"Function declarations should not be placed in blocks. Use a function expression or move the statement to the top of the outer function.\",W083:\"Don't make functions within a loop.\",W084:\"Assignment in conditional expression\",W085:\"Don't use 'with'.\",W086:\"Expected a 'break' statement before '{a}'.\",W087:\"Forgotten 'debugger' statement?\",W088:\"Creating global 'for' variable. Should be 'for (var {a} ...'.\",W089:\"The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.\",W090:\"'{a}' is not a statement label.\",W091:null,W093:\"Did you mean to return a conditional instead of an assignment?\",W094:\"Unexpected comma.\",W095:\"Expected a string and instead saw {a}.\",W096:\"The '{a}' key may produce unexpected results.\",W097:'Use the function form of \"use strict\".',W098:\"'{a}' is defined but never used.\",W099:null,W100:\"This character may get silently deleted by one or more browsers.\",W101:\"Line is too long.\",W102:null,W103:\"The '{a}' property is deprecated.\",W104:\"'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).\",W105:\"Unexpected {a} in '{b}'.\",W106:\"Identifier '{a}' is not in camel case.\",W107:\"Script URL.\",W108:\"Strings must use doublequote.\",W109:\"Strings must use singlequote.\",W110:\"Mixed double and single quotes.\",W112:\"Unclosed string.\",W113:\"Control character in string: {a}.\",W114:\"Avoid {a}.\",W115:\"Octal literals are not allowed in strict mode.\",W116:\"Expected '{a}' and instead saw '{b}'.\",W117:\"'{a}' is not defined.\",W118:\"'{a}' is only available in Mozilla JavaScript extensions (use moz option).\",W119:\"'{a}' is only available in ES{b} (use 'esversion: {b}').\",W120:\"You might be leaking a variable ({a}) here.\",W121:\"Extending prototype of native object: '{a}'.\",W122:\"Invalid typeof value '{a}'\",W123:\"'{a}' is already defined in outer scope.\",W124:\"A generator function shall contain a yield statement.\",W125:\"This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp\",W126:\"Unnecessary grouping operator.\",W127:\"Unexpected use of a comma operator.\",W128:\"Empty array elements require elision=true.\",W129:\"'{a}' is defined in a future version of JavaScript. Use a different variable name to avoid migration issues.\",W130:\"Invalid element after rest element.\",W131:\"Invalid parameter after rest parameter.\",W132:\"`var` declarations are forbidden. Use `let` or `const` instead.\",W133:\"Invalid for-{a} loop left-hand-side: {b}.\",W134:\"The '{a}' option is only available when linting ECMAScript {b} code.\",W135:\"{a} may not be supported by non-browser environments.\",W136:\"'{a}' must be in function scope.\",W137:\"Empty destructuring.\",W138:\"Regular parameters should not come after default parameters.\"},o={I001:\"Comma warnings can be turned off with 'laxcomma'.\",I002:null,I003:\"ES5 option is now set per default\"};n.errors={},n.warnings={},n.info={},r.each(i,function(e,t){n.errors[t]={code:t,desc:e}}),r.each(s,function(e,t){n.warnings[t]={code:t,desc:e}}),r.each(o,function(e,t){n.info[t]={code:t,desc:e}})},{\"../lodash\":\"/node_modules/jshint/lodash.js\"}],\"/node_modules/jshint/src/name-stack.js\":[function(e,t,n){\"use strict\";function r(){this._stack=[]}Object.defineProperty(r.prototype,\"length\",{get:function(){return this._stack.length}}),r.prototype.push=function(){this._stack.push(null)},r.prototype.pop=function(){this._stack.pop()},r.prototype.set=function(e){this._stack[this.length-1]=e},r.prototype.infer=function(){var e=this._stack[this.length-1],t=\"\",n;if(!e||e.type===\"class\")e=this._stack[this.length-2];return e?(n=e.type,n!==\"(string)\"&&n!==\"(number)\"&&n!==\"(identifier)\"&&n!==\"default\"?\"(expression)\":(e.accessorType&&(t=e.accessorType+\" \"),t+e.value)):\"(empty)\"},t.exports=r},{}],\"/node_modules/jshint/src/options.js\":[function(e,t,n){\"use strict\";n.bool={enforcing:{bitwise:!0,freeze:!0,camelcase:!0,curly:!0,eqeqeq:!0,futurehostile:!0,notypeof:!0,es3:!0,es5:!0,forin:!0,funcscope:!0,immed:!0,iterator:!0,newcap:!0,noarg:!0,nocomma:!0,noempty:!0,nonbsp:!0,nonew:!0,undef:!0,singleGroups:!1,varstmt:!1,enforceall:!1},relaxing:{asi:!0,multistr:!0,debug:!0,boss:!0,evil:!0,globalstrict:!0,plusplus:!0,proto:!0,scripturl:!0,sub:!0,supernew:!0,laxbreak:!0,laxcomma:!0,validthis:!0,withstmt:!0,moz:!0,noyield:!0,eqnull:!0,lastsemic:!0,loopfunc:!0,expr:!0,esnext:!0,elision:!0},environments:{mootools:!0,couch:!0,jasmine:!0,jquery:!0,node:!0,qunit:!0,rhino:!0,shelljs:!0,prototypejs:!0,yui:!0,mocha:!0,module:!0,wsh:!0,worker:!0,nonstandard:!0,browser:!0,browserify:!0,devel:!0,dojo:!0,typed:!0,phantom:!0},obsolete:{onecase:!0,regexp:!0,regexdash:!0}},n.val={maxlen:!1,indent:!1,maxerr:!1,predef:!1,globals:!1,quotmark:!1,scope:!1,maxstatements:!1,maxdepth:!1,maxparams:!1,maxcomplexity:!1,shadow:!1,strict:!0,unused:!0,latedef:!1,ignore:!1,ignoreDelimiters:!1,esversion:5},n.inverted={bitwise:!0,forin:!0,newcap:!0,plusplus:!0,regexp:!0,undef:!0,eqeqeq:!0,strict:!0},n.validNames=Object.keys(n.val).concat(Object.keys(n.bool.relaxing)).concat(Object.keys(n.bool.enforcing)).concat(Object.keys(n.bool.obsolete)).concat(Object.keys(n.bool.environments)),n.renamed={eqeq:\"eqeqeq\",windows:\"wsh\",sloppy:\"strict\"},n.removed={nomen:!0,onevar:!0,passfail:!0,white:!0,gcl:!0,smarttabs:!0,trailing:!0},n.noenforceall={varstmt:!0,strict:!0}},{}],\"/node_modules/jshint/src/reg.js\":[function(e,t,n){\"use strict\";n.unsafeString=/@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|&lt/i,n.unsafeChars=/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/,n.needEsc=/[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/,n.needEscGlobal=/[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,n.starSlash=/\\*\\//,n.identifier=/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/,n.javascriptURL=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i,n.fallsThrough=/^\\s*falls?\\sthrough\\s*$/,n.maxlenException=/^(?:(?:\\/\\/|\\/\\*|\\*) ?)?[^ ]+$/},{}],\"/node_modules/jshint/src/scope-manager.js\":[function(e,t,n){\"use strict\";var r=e(\"../lodash\"),i=e(\"events\"),s={},o=function(e,t,n,o){function f(e){u={\"(labels)\":Object.create(null),\"(usages)\":Object.create(null),\"(breakLabels)\":Object.create(null),\"(parent)\":u,\"(type)\":e,\"(params)\":e===\"functionparams\"||e===\"catchparams\"?[]:null},a.push(u)}function v(e,t){d.emit(\"warning\",{code:e,token:t,data:r.slice(arguments,2)})}function m(e,t){d.emit(\"warning\",{code:e,token:t,data:r.slice(arguments,2)})}function g(e){u[\"(usages)\"][e]||(u[\"(usages)\"][e]={\"(modified)\":[],\"(reassigned)\":[],\"(tokens)\":[]})}function w(){if(u[\"(type)\"]===\"functionparams\"){E();return}var e=u[\"(labels)\"];for(var t in e)e[t]&&e[t][\"(type)\"]!==\"exception\"&&e[t][\"(unused)\"]&&b(t,e[t][\"(token)\"],\"var\")}function E(){var t=u[\"(params)\"];if(!t)return;var n=t.pop(),r;while(n){var i=u[\"(labels)\"][n];r=y(e.funct[\"(unusedOption)\"]);if(n===\"undefined\")return;if(i[\"(unused)\"])b(n,i[\"(token)\"],\"param\",e.funct[\"(unusedOption)\"]);else if(r===\"last-param\")return;n=t.pop()}}function S(e){for(var t=a.length-1;t>=0;--t){var n=a[t][\"(labels)\"];if(n[e])return n}}function x(e){for(var t=a.length-1;t>=0;t--){var n=a[t];if(n[\"(usages)\"][e])return n[\"(usages)\"][e];if(n===l)break}return!1}function T(t,n){if(e.option.shadow!==\"outer\")return;var r=l[\"(type)\"]===\"global\",i=u[\"(type)\"]===\"functionparams\",s=!r;for(var o=0;o<a.length;o++){var f=a[o];!i&&a[o+1]===l&&(s=!1),s&&f[\"(labels)\"][t]&&v(\"W123\",n,t),f[\"(breakLabels)\"][t]&&v(\"W123\",n,t)}}function N(t,n,r){e.option.latedef&&(e.option.latedef===!0&&t===\"function\"||t!==\"function\")&&v(\"W003\",r,n)}var u,a=[];f(\"global\"),u[\"(predefined)\"]=t;var l=u,c=Object.create(null),h=Object.create(null),p=[],d=new i.EventEmitter,y=function(t){return t===undefined&&(t=e.option.unused),t===!0&&(t=\"last-param\"),t},b=function(e,t,n,r){var i=t.line,s=t.from,o=t.raw_text||e;r=y(r);var u={vars:[\"var\"],\"last-param\":[\"var\",\"param\"],strict:[\"var\",\"param\",\"last-param\"]};r&&u[r]&&u[r].indexOf(n)!==-1&&v(\"W098\",{line:i,from:s},o),(r||n===\"var\")&&p.push({name:e,line:i,character:s})},C={on:function(e,t){e.split(\" \").forEach(function(e){d.on(e,t)})},isPredefined:function(e){return!this.has(e)&&r.has(a[0][\"(predefined)\"],e)},stack:function(e){var t=u;f(e),!e&&t[\"(type)\"]===\"functionparams\"&&(u[\"(isFuncBody)\"]=!0,u[\"(context)\"]=l,l=u)},unstack:function(){var t=a.length>1?a[a.length-2]:null,n=u===l,i=u[\"(type)\"]===\"functionparams\",f=u[\"(type)\"]===\"functionouter\",p,d,g=u[\"(usages)\"],y=u[\"(labels)\"],E=Object.keys(g);g.__proto__&&E.indexOf(\"__proto__\")===-1&&E.push(\"__proto__\");for(p=0;p<E.length;p++){var S=E[p],x=g[S],T=y[S];if(T){var N=T[\"(type)\"];if(T[\"(useOutsideOfScope)\"]&&!e.option.funcscope){var C=x[\"(tokens)\"];if(C)for(d=0;d<C.length;d++)T[\"(function)\"]===C[d][\"(function)\"]&&m(\"W038\",C[d],S)}u[\"(labels)\"][S][\"(unused)\"]=!1;if(N===\"const\"&&x[\"(modified)\"])for(d=0;d<x[\"(modified)\"].length;d++)m(\"E013\",x[\"(modified)\"][d],S);if((N===\"function\"||N===\"class\")&&x[\"(reassigned)\"])for(d=0;d<x[\"(reassigned)\"].length;d++)m(\"W021\",x[\"(reassigned)\"][d],S,N);continue}f&&(e.funct[\"(isCapturing)\"]=!0);if(t)if(!t[\"(usages)\"][S])t[\"(usages)\"][S]=x,n&&(t[\"(usages)\"][S][\"(onlyUsedSubFunction)\"]=!0);else{var k=t[\"(usages)\"][S];k[\"(modified)\"]=k[\"(modified)\"].concat(x[\"(modified)\"]),k[\"(tokens)\"]=k[\"(tokens)\"].concat(x[\"(tokens)\"]),k[\"(reassigned)\"]=k[\"(reassigned)\"].concat(x[\"(reassigned)\"]),k[\"(onlyUsedSubFunction)\"]=!1}else if(typeof u[\"(predefined)\"][S]==\"boolean\"){delete o[S],c[S]=s;if(u[\"(predefined)\"][S]===!1&&x[\"(reassigned)\"])for(d=0;d<x[\"(reassigned)\"].length;d++)v(\"W020\",x[\"(reassigned)\"][d])}else if(x[\"(tokens)\"])for(d=0;d<x[\"(tokens)\"].length;d++){var L=x[\"(tokens)\"][d];L.forgiveUndef||(e.option.undef&&!L.ignoreUndef&&v(\"W117\",L,S),h[S]?h[S].line.push(L.line):h[S]={name:S,line:[L.line]})}}t||Object.keys(o).forEach(function(e){b(e,o[e],\"var\")});if(t&&!n&&!i&&!f){var A=Object.keys(y);for(p=0;p<A.length;p++){var O=A[p];!y[O][\"(blockscoped)\"]&&y[O][\"(type)\"]!==\"exception\"&&!this.funct.has(O,{excludeCurrent:!0})&&(t[\"(labels)\"][O]=y[O],l[\"(type)\"]!==\"global\"&&(t[\"(labels)\"][O][\"(useOutsideOfScope)\"]=!0),delete y[O])}}w(),a.pop(),n&&(l=a[r.findLastIndex(a,function(e){return e[\"(isFuncBody)\"]||e[\"(type)\"]===\"global\"})]),u=t},addParam:function(t,n,i){i=i||\"param\";if(i===\"exception\"){var s=this.funct.labeltype(t);s&&s!==\"exception\"&&(e.option.node||v(\"W002\",e.tokens.next,t))}r.has(u[\"(labels)\"],t)?u[\"(labels)\"][t].duplicated=!0:(T(t,n,i),u[\"(labels)\"][t]={\"(type)\":i,\"(token)\":n,\"(unused)\":!0},u[\"(params)\"].push(t));if(r.has(u[\"(usages)\"],t)){var o=u[\"(usages)\"][t];o[\"(onlyUsedSubFunction)\"]?N(i,t,n):v(\"E056\",n,t,i)}},validateParams:function(){if(l[\"(type)\"]===\"global\")return;var t=e.isStrict(),n=l[\"(parent)\"];if(!n[\"(params)\"])return;n[\"(params)\"].forEach(function(r){var i=n[\"(labels)\"][r];i&&i.duplicated&&(t?v(\"E011\",i[\"(token)\"],r):e.option.shadow!==!0&&v(\"W004\",i[\"(token)\"],r))})},getUsedOrDefinedGlobals:function(){var e=Object.keys(c);return c.__proto__===s&&e.indexOf(\"__proto__\")===-1&&e.push(\"__proto__\"),e},getImpliedGlobals:function(){var e=r.values(h),t=!1;return h.__proto__&&(t=e.some(function(e){return e.name===\"__proto__\"}),t||e.push(h.__proto__)),e},getUnuseds:function(){return p},has:function(e){return Boolean(S(e))},labeltype:function(e){var t=S(e);return t?t[e][\"(type)\"]:null},addExported:function(e){var t=a[0][\"(labels)\"];if(r.has(o,e))delete o[e];else if(r.has(t,e))t[e][\"(unused)\"]=!1;else{for(var i=1;i<a.length;i++){var s=a[i];if(!!s[\"(type)\"])break;if(r.has(s[\"(labels)\"],e)&&!s[\"(labels)\"][e][\"(blockscoped)\"]){s[\"(labels)\"][e][\"(unused)\"]=!1;return}}n[e]=!0}},setExported:function(e,t){this.block.use(e,t)},addlabel:function(t,i){var o=i.type,a=i.token,f=o===\"let\"||o===\"const\"||o===\"class\",h=(f?u:l)[\"(type)\"]===\"global\"&&r.has(n,t);T(t,a,o);if(f){var p=u[\"(labels)\"][t];!p&&u===l&&u[\"(type)\"]!==\"global\"&&(p=!!l[\"(parent)\"][\"(labels)\"][t]);if(!p&&u[\"(usages)\"][t]){var d=u[\"(usages)\"][t];d[\"(onlyUsedSubFunction)\"]?N(o,t,a):v(\"E056\",a,t,o)}p?v(\"E011\",a,t):e.option.shadow===\"outer\"&&C.funct.has(t)&&v(\"W004\",a,t),C.block.add(t,o,a,!h)}else{var m=C.funct.has(t);!m&&x(t)&&N(o,t,a),C.funct.has(t,{onlyBlockscoped:!0})?v(\"E011\",a,t):e.option.shadow!==!0&&m&&t!==\"__proto__\"&&l[\"(type)\"]!==\"global\"&&v(\"W004\",a,t),C.funct.add(t,o,a,!h),l[\"(type)\"]===\"global\"&&(c[t]=s)}},funct:{labeltype:function(e,t){var n=t&&t.onlyBlockscoped,r=t&&t.excludeParams,i=a.length-(t&&t.excludeCurrent?2:1);for(var s=i;s>=0;s--){var o=a[s];if(o[\"(labels)\"][e]&&(!n||o[\"(labels)\"][e][\"(blockscoped)\"]))return o[\"(labels)\"][e][\"(type)\"];var u=r?a[s-1]:o;if(u&&u[\"(type)\"]===\"functionparams\")return null}return null},hasBreakLabel:function(e){for(var t=a.length-1;t>=0;t--){var n=a[t];if(n[\"(breakLabels)\"][e])return!0;if(n[\"(type)\"]===\"functionparams\")return!1}return!1},has:function(e,t){return Boolean(this.labeltype(e,t))},add:function(e,t,n,r){u[\"(labels)\"][e]={\"(type)\":t,\"(token)\":n,\"(blockscoped)\":!1,\"(function)\":l,\"(unused)\":r}}},block:{isGlobal:function(){return u[\"(type)\"]===\"global\"},use:function(t,n){var r=l[\"(parent)\"];r&&r[\"(labels)\"][t]&&r[\"(labels)\"][t][\"(type)\"]===\"param\"&&(C.funct.has(t,{excludeParams:!0,onlyBlockscoped:!0})||(r[\"(labels)\"][t][\"(unused)\"]=!1)),n&&(e.ignored.W117||e.option.undef===!1)&&(n.ignoreUndef=!0),g(t),n&&(n[\"(function)\"]=l,u[\"(usages)\"][t][\"(tokens)\"].push(n))},reassign:function(e,t){this.modify(e,t),u[\"(usages)\"][e][\"(reassigned)\"].push(t)},modify:function(e,t){g(e),u[\"(usages)\"][e][\"(modified)\"].push(t)},add:function(e,t,n,r){u[\"(labels)\"][e]={\"(type)\":t,\"(token)\":n,\"(blockscoped)\":!0,\"(unused)\":r}},addBreakLabel:function(t,n){var r=n.token;C.funct.hasBreakLabel(t)?v(\"E011\",r,t):e.option.shadow===\"outer\"&&(C.funct.has(t)?v(\"W004\",r,t):T(t,r)),u[\"(breakLabels)\"][t]=r}}};return C};t.exports=o},{\"../lodash\":\"/node_modules/jshint/lodash.js\",events:\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/state.js\":[function(e,t,n){\"use strict\";var r=e(\"./name-stack.js\"),i={syntax:{},isStrict:function(){return this.directive[\"use strict\"]||this.inClassBody||this.option.module||this.option.strict===\"implied\"},inMoz:function(){return this.option.moz},inES6:function(){return this.option.moz||this.option.esversion>=6},inES5:function(e){return e?(!this.option.esversion||this.option.esversion===5)&&!this.option.moz:!this.option.esversion||this.option.esversion>=5||this.option.moz},reset:function(){this.tokens={prev:null,next:null,curr:null},this.option={},this.funct=null,this.ignored={},this.directive={},this.jsonMode=!1,this.jsonWarnings=[],this.lines=[],this.tab=\"\",this.cache={},this.ignoredLines={},this.forinifcheckneeded=!1,this.nameStack=new r,this.inClassBody=!1}};n.state=i},{\"./name-stack.js\":\"/node_modules/jshint/src/name-stack.js\"}],\"/node_modules/jshint/src/style.js\":[function(e,t,n){\"use strict\";n.register=function(e){e.on(\"Identifier\",function(n){if(e.getOption(\"proto\"))return;n.name===\"__proto__\"&&e.warn(\"W103\",{line:n.line,\"char\":n.char,data:[n.name,\"6\"]})}),e.on(\"Identifier\",function(n){if(e.getOption(\"iterator\"))return;n.name===\"__iterator__\"&&e.warn(\"W103\",{line:n.line,\"char\":n.char,data:[n.name]})}),e.on(\"Identifier\",function(n){if(!e.getOption(\"camelcase\"))return;n.name.replace(/^_+|_+$/g,\"\").indexOf(\"_\")>-1&&!n.name.match(/^[A-Z0-9_]*$/)&&e.warn(\"W106\",{line:n.line,\"char\":n.from,data:[n.name]})}),e.on(\"String\",function(n){var r=e.getOption(\"quotmark\"),i;if(!r)return;r===\"single\"&&n.quote!==\"'\"&&(i=\"W109\"),r===\"double\"&&n.quote!=='\"'&&(i=\"W108\"),r===!0&&(e.getCache(\"quotmark\")||e.setCache(\"quotmark\",n.quote),e.getCache(\"quotmark\")!==n.quote&&(i=\"W110\")),i&&e.warn(i,{line:n.line,\"char\":n.char})}),e.on(\"Number\",function(n){n.value.charAt(0)===\".\"&&e.warn(\"W008\",{line:n.line,\"char\":n.char,data:[n.value]}),n.value.substr(n.value.length-1)===\".\"&&e.warn(\"W047\",{line:n.line,\"char\":n.char,data:[n.value]}),/^00+/.test(n.value)&&e.warn(\"W046\",{line:n.line,\"char\":n.char,data:[n.value]})}),e.on(\"String\",function(n){var r=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;if(e.getOption(\"scripturl\"))return;r.test(n.value)&&e.warn(\"W107\",{line:n.line,\"char\":n.char})})}},{}],\"/node_modules/jshint/src/vars.js\":[function(e,t,n){\"use strict\";n.reservedVars={arguments:!1,NaN:!1},n.ecmaIdentifiers={3:{Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},5:{JSON:!1},6:{Map:!1,Promise:!1,Proxy:!1,Reflect:!1,Set:!1,Symbol:!1,WeakMap:!1,WeakSet:!1}},n.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CSS:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,Comment:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,Document:!1,document:!1,DocumentFragment:!1,Element:!1,ElementTimeControl:!1,Event:!1,event:!1,fetch:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,Intl:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,Notification:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,performance:!1,print:!1,Range:!1,requestAnimationFrame:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TimeEvent:!1,top:!1,URL:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},n.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},n.worker={importScripts:!0,postMessage:!0,self:!0,FileReaderSync:!0},n.nonstandard={escape:!1,unescape:!1},n.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},n.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,require:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},n.browserify={__filename:!1,__dirname:!1,global:!1,module:!1,require:!1,Buffer:!0,exports:!0,process:!0},n.phantom={phantom:!0,require:!0,WebPage:!0,console:!0,exports:!0},n.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,\"throws\":!1},n.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},n.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},n.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},n.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},n.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},n.jquery={$:!1,jQuery:!1},n.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},n.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},n.yui={YUI:!1,Y:!1,YUI_config:!1},n.mocha={mocha:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,context:!1,xcontext:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1,suiteSetup:!1,suiteTeardown:!1},n.jasmine={jasmine:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1,beforeAll:!1,afterAll:!1,fail:!1,fdescribe:!1,fit:!1,pending:!1}},{}]},{},[\"/node_modules/jshint/src/jshint.js\"])}),ace.define(\"ace/mode/javascript_worker\",[],function(require,exports,module){\"use strict\";function startRegex(e){return RegExp(\"^(\"+e.join(\"|\")+\")\")}var oop=require(\"../lib/oop\"),Mirror=require(\"../worker/mirror\").Mirror,lint=require(\"./javascript/jshint\").JSHINT,disabledWarningsRe=startRegex([\"Bad for in variable '(.+)'.\",'Missing \"use strict\"']),errorsRe=startRegex([\"Unexpected\",\"Expected \",\"Confusing (plus|minus)\",\"\\\\{a\\\\} unterminated regular expression\",\"Unclosed \",\"Unmatched \",\"Unbegun comment\",\"Bad invocation\",\"Missing space after\",\"Missing operator at\"]),infoRe=startRegex([\"Expected an assignment\",\"Bad escapement of EOL\",\"Unexpected comma\",\"Unexpected space\",\"Missing radix parameter.\",\"A leading decimal point can\",\"\\\\['{a}'\\\\] is better written in dot notation.\",\"'{a}' used out of scope\"]),JavaScriptWorker=exports.JavaScriptWorker=function(e){Mirror.call(this,e),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(e){this.options=e||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(e){oop.mixin(this.options,e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval(\"throw 0;\"+str)}catch(e){if(e===0)return!0}return!1},this.onUpdate=function(){var e=this.doc.getValue();e=e.replace(/^#!.*\\n/,\"\\n\");if(!e)return this.sender.emit(\"annotate\",[]);var t=[],n=this.isValidJS(e)?\"warning\":\"error\";lint(e,this.options,this.options.globals);var r=lint.errors,i=!1;for(var s=0;s<r.length;s++){var o=r[s];if(!o)continue;var u=o.raw,a=\"warning\";if(u==\"Missing semicolon.\"){var f=o.evidence.substr(o.character);f=f.charAt(f.search(/\\S/)),n==\"error\"&&f&&/[\\w\\d{(['\"]/.test(f)?(o.reason='Missing \";\" before statement',a=\"error\"):a=\"info\"}else{if(disabledWarningsRe.test(u))continue;infoRe.test(u)?a=\"info\":errorsRe.test(u)?(i=!0,a=n):u==\"'{a}' is not defined.\"?a=\"warning\":u==\"'{a}' is defined but never used.\"&&(a=\"info\")}t.push({row:o.line-1,column:o.character-1,text:o.reason,type:a,raw:u}),i}this.sender.emit(\"annotate\",t)}}.call(JavaScriptWorker.prototype)}),ace.define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/worker-json.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/json/json_parse\",[],function(e,t,n){\"use strict\";var r,i,s={'\"':'\"',\"\\\\\":\"\\\\\",\"/\":\"/\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\t\"},o,u=function(e){throw{name:\"SyntaxError\",message:e,at:r,text:o}},a=function(e){return e&&e!==i&&u(\"Expected '\"+e+\"' instead of '\"+i+\"'\"),i=o.charAt(r),r+=1,i},f=function(){var e,t=\"\";i===\"-\"&&(t=\"-\",a(\"-\"));while(i>=\"0\"&&i<=\"9\")t+=i,a();if(i===\".\"){t+=\".\";while(a()&&i>=\"0\"&&i<=\"9\")t+=i}if(i===\"e\"||i===\"E\"){t+=i,a();if(i===\"-\"||i===\"+\")t+=i,a();while(i>=\"0\"&&i<=\"9\")t+=i,a()}e=+t;if(!isNaN(e))return e;u(\"Bad number\")},l=function(){var e,t,n=\"\",r;if(i==='\"')while(a()){if(i==='\"')return a(),n;if(i===\"\\\\\"){a();if(i===\"u\"){r=0;for(t=0;t<4;t+=1){e=parseInt(a(),16);if(!isFinite(e))break;r=r*16+e}n+=String.fromCharCode(r)}else{if(typeof s[i]!=\"string\")break;n+=s[i]}}else{if(i==\"\\n\"||i==\"\\r\")break;n+=i}}u(\"Bad string\")},c=function(){while(i&&i<=\" \")a()},h=function(){switch(i){case\"t\":return a(\"t\"),a(\"r\"),a(\"u\"),a(\"e\"),!0;case\"f\":return a(\"f\"),a(\"a\"),a(\"l\"),a(\"s\"),a(\"e\"),!1;case\"n\":return a(\"n\"),a(\"u\"),a(\"l\"),a(\"l\"),null}u(\"Unexpected '\"+i+\"'\")},p,d=function(){var e=[];if(i===\"[\"){a(\"[\"),c();if(i===\"]\")return a(\"]\"),e;while(i){e.push(p()),c();if(i===\"]\")return a(\"]\"),e;a(\",\"),c()}}u(\"Bad array\")},v=function(){var e,t={};if(i===\"{\"){a(\"{\"),c();if(i===\"}\")return a(\"}\"),t;while(i){e=l(),c(),a(\":\"),Object.hasOwnProperty.call(t,e)&&u('Duplicate key \"'+e+'\"'),t[e]=p(),c();if(i===\"}\")return a(\"}\"),t;a(\",\"),c()}}u(\"Bad object\")};return p=function(){c();switch(i){case\"{\":return v();case\"[\":return d();case'\"':return l();case\"-\":return f();default:return i>=\"0\"&&i<=\"9\"?f():h()}},function(e,t){var n;return o=e,r=0,i=\" \",n=p(),c(),i&&u(\"Syntax error\"),typeof t==\"function\"?function s(e,n){var r,i,o=e[n];if(o&&typeof o==\"object\")for(r in o)Object.hasOwnProperty.call(o,r)&&(i=s(o,r),i!==undefined?o[r]=i:delete o[r]);return t.call(e,n,o)}({\"\":n},\"\"):n}}),ace.define(\"ace/mode/json_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"./json/json_parse\"),o=t.JsonWorker=function(e){i.call(this,e),this.setTimeout(200)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue(),t=[];try{e&&s(e)}catch(n){var r=this.doc.indexToPosition(n.at-1);t.push({row:r.row,column:r.column,text:n.message,type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),ace.define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/worker-lua.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/lua/luaparse\",[],function(e,t,n){(function(e,n,r){r(t)})(this,\"luaparse\",function(e){\"use strict\";function m(e){if(mt){var t=vt.pop();t.complete(),n.locations&&(e.loc=t.loc),n.ranges&&(e.range=t.range)}return e}function w(e,t,n){for(var r=0,i=e.length;r<i;r++)if(e[r][t]===n)return r;return-1}function E(e){var t=g.call(arguments,1);return e=e.replace(/%(\\d)/g,function(e,n){return\"\"+t[n-1]||\"\"}),e}function S(){var e=g.call(arguments),t={},n,r;for(var i=0,s=e.length;i<s;i++){n=e[i];for(r in n)n.hasOwnProperty(r)&&(t[r]=n[r])}return t}function x(e){var t=E.apply(null,g.call(arguments,1)),n,r;throw\"undefined\"!=typeof e.line?(r=e.range[0]-e.lineStart,n=new SyntaxError(E(\"[%1:%2] %3\",e.line,r,t)),n.line=e.line,n.index=e.range[0],n.column=r):(r=C-D+1,n=new SyntaxError(E(\"[%1:%2] %3\",_,r,t)),n.index=C,n.line=_,n.column=r),n}function T(e,t){x(t,d.expectedToken,e,t.value)}function N(e,t){\"undefined\"==typeof t&&(t=A.value);if(\"undefined\"!=typeof e.type){var n;switch(e.type){case o:n=\"string\";break;case u:n=\"keyword\";break;case a:n=\"identifier\";break;case f:n=\"number\";break;case l:n=\"symbol\";break;case c:n=\"boolean\";break;case h:return x(e,d.unexpected,\"symbol\",\"nil\",t)}return x(e,d.unexpected,n,e.value,t)}return x(e,d.unexpected,\"symbol\",e,t)}function P(){H();while(45===t.charCodeAt(C)&&45===t.charCodeAt(C+1))X(),H();if(C>=r)return{type:s,value:\"<eof>\",line:_,lineStart:D,range:[C,C]};var e=t.charCodeAt(C),n=t.charCodeAt(C+1);M=C;if(et(e))return B();switch(e){case 39:case 34:return I();case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return R();case 46:if(Y(n))return R();if(46===n)return 46===t.charCodeAt(C+2)?F():j(\"..\");return j(\".\");case 61:if(61===n)return j(\"==\");return j(\"=\");case 62:if(61===n)return j(\">=\");return j(\">\");case 60:if(61===n)return j(\"<=\");return j(\"<\");case 126:if(61===n)return j(\"~=\");return j(\"~\");case 58:if(58===n)return j(\"::\");return j(\":\");case 91:if(91===n||61===n)return q();return j(\"[\");case 42:case 47:case 94:case 37:case 44:case 123:case 125:case 93:case 40:case 41:case 59:case 35:case 45:case 43:case 38:case 124:return j(t.charAt(C))}return N(t.charAt(C))}function H(){while(C<r){var e=t.charCodeAt(C);if(Q(e))C++;else{if(!G(e))break;_++,D=++C}}}function B(){var e,n;while(tt(t.charCodeAt(++C)));return e=t.slice(M,C),nt(e)?n=u:\"true\"===e||\"false\"===e?(n=c,e=\"true\"===e):\"nil\"===e?(n=h,e=null):n=a,{type:n,value:e,line:_,lineStart:D,range:[M,C]}}function j(e){return C+=e.length,{type:l,value:e,line:_,lineStart:D,range:[M,C]}}function F(){return C+=3,{type:p,value:\"...\",line:_,lineStart:D,range:[M,C]}}function I(){var e=t.charCodeAt(C++),n=C,i=\"\",s;while(C<r){s=t.charCodeAt(C++);if(e===s)break;if(92===s)i+=t.slice(n,C-1)+W(),n=C;else if(C>=r||G(s))i+=t.slice(n,C-1),x({},d.unfinishedString,i+String.fromCharCode(s))}return i+=t.slice(n,C-1),{type:o,value:i,line:_,lineStart:D,range:[M,C]}}function q(){var e=V();return!1===e&&x(k,d.expected,\"[\",k.value),{type:o,value:e,line:_,lineStart:D,range:[M,C]}}function R(){var e=t.charAt(C),n=t.charAt(C+1),r=\"0\"===e&&\"xX\".indexOf(n||null)>=0?U():z();return{type:f,value:r,line:_,lineStart:D,range:[M,C]}}function U(){var e=0,n=1,r=1,i,s,o,u;u=C+=2,Z(t.charCodeAt(C))||x({},d.malformedNumber,t.slice(M,C));while(Z(t.charCodeAt(C)))C++;i=parseInt(t.slice(u,C),16);if(\".\"===t.charAt(C)){s=++C;while(Z(t.charCodeAt(C)))C++;e=t.slice(s,C),e=s===C?0:parseInt(e,16)/Math.pow(16,C-s)}if(\"pP\".indexOf(t.charAt(C)||null)>=0){C++,\"+-\".indexOf(t.charAt(C)||null)>=0&&(r=\"+\"===t.charAt(C++)?1:-1),o=C,Y(t.charCodeAt(C))||x({},d.malformedNumber,t.slice(M,C));while(Y(t.charCodeAt(C)))C++;n=t.slice(o,C),n=Math.pow(2,n*r)}return(i+e)*n}function z(){while(Y(t.charCodeAt(C)))C++;if(\".\"===t.charAt(C)){C++;while(Y(t.charCodeAt(C)))C++}if(\"eE\".indexOf(t.charAt(C)||null)>=0){C++,\"+-\".indexOf(t.charAt(C)||null)>=0&&C++,Y(t.charCodeAt(C))||x({},d.malformedNumber,t.slice(M,C));while(Y(t.charCodeAt(C)))C++}return parseFloat(t.slice(M,C))}function W(){var e=C;switch(t.charAt(C)){case\"n\":return C++,\"\\n\";case\"r\":return C++,\"\\r\";case\"t\":return C++,\"\t\";case\"v\":return C++,\"\\x0b\";case\"b\":return C++,\"\\b\";case\"f\":return C++,\"\\f\";case\"z\":return C++,H(),\"\";case\"x\":if(Z(t.charCodeAt(C+1))&&Z(t.charCodeAt(C+2)))return C+=3,\"\\\\\"+t.slice(e,C);return\"\\\\\"+t.charAt(C++);default:if(Y(t.charCodeAt(C))){while(Y(t.charCodeAt(++C)));return\"\\\\\"+t.slice(e,C)}return t.charAt(C++)}}function X(){M=C,C+=2;var e=t.charAt(C),i=\"\",s=!1,o=C,u=D,a=_;\"[\"===e&&(i=V(),!1===i?i=e:s=!0);if(!s){while(C<r){if(G(t.charCodeAt(C)))break;C++}n.comments&&(i=t.slice(o,C))}if(n.comments){var f=v.comment(i,t.slice(M,C));n.locations&&(f.loc={start:{line:a,column:M-u},end:{line:_,column:C-D}}),n.ranges&&(f.range=[M,C]),O.push(f)}}function V(){var e=0,n=\"\",i=!1,s,o;C++;while(\"=\"===t.charAt(C+e))e++;if(\"[\"!==t.charAt(C+e))return!1;C+=e+1,G(t.charCodeAt(C))&&(_++,D=C++),o=C;while(C<r){s=t.charAt(C++),G(s.charCodeAt(0))&&(_++,D=C);if(\"]\"===s){i=!0;for(var u=0;u<e;u++)\"=\"!==t.charAt(C+u)&&(i=!1);\"]\"!==t.charAt(C+e)&&(i=!1)}if(i)break}return n+=t.slice(o,C-1),C+=e+1,n}function $(){L=k,k=A,A=P()}function J(e){return e===k.value?($(),!0):!1}function K(e){e===k.value?$():x(k,d.expected,e,k.value)}function Q(e){return 9===e||32===e||11===e||12===e}function G(e){return 10===e||13===e}function Y(e){return e>=48&&e<=57}function Z(e){return e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70}function et(e){return e>=65&&e<=90||e>=97&&e<=122||95===e}function tt(e){return e>=65&&e<=90||e>=97&&e<=122||95===e||e>=48&&e<=57}function nt(e){switch(e.length){case 2:return\"do\"===e||\"if\"===e||\"in\"===e||\"or\"===e;case 3:return\"and\"===e||\"end\"===e||\"for\"===e||\"not\"===e;case 4:return\"else\"===e||\"goto\"===e||\"then\"===e;case 5:return\"break\"===e||\"local\"===e||\"until\"===e||\"while\"===e;case 6:return\"elseif\"===e||\"repeat\"===e||\"return\"===e;case 8:return\"function\"===e}return!1}function rt(e){return l===e.type?\"#-~\".indexOf(e.value)>=0:u===e.type?\"not\"===e.value:!1}function it(e){switch(e.type){case\"CallExpression\":case\"TableCallExpression\":case\"StringCallExpression\":return!0}return!1}function st(e){if(s===e.type)return!0;if(u!==e.type)return!1;switch(e.value){case\"else\":case\"elseif\":case\"end\":case\"until\":return!0;default:return!1}}function ft(){ot.push(Array.apply(null,ot[ut++]))}function lt(){ot.pop(),ut--}function ct(e){if(-1!==b(ot[ut],e))return;ot[ut].push(e)}function ht(e){ct(e.name),pt(e,!0)}function pt(e,t){!t&&-1===w(at,\"name\",e.name)&&at.push(e),e.isLocal=t}function dt(e){return-1!==b(ot[ut],e)}function gt(){return new yt(k)}function yt(e){n.locations&&(this.loc={start:{line:e.line,column:e.range[0]-e.lineStart},end:{line:0,column:0}}),n.ranges&&(this.range=[e.range[0],0])}function bt(){mt&&vt.push(gt())}function wt(e){mt&&vt.push(e)}function Et(){$(),bt();var e=St();return s!==k.type&&N(k),mt&&!e.length&&(L=k),m(v.chunk(e))}function St(e){var t=[],r;n.scope&&ft();while(!st(k)){if(\"return\"===k.value){t.push(xt());break}r=xt(),r&&t.push(r)}return n.scope&&lt(),t}function xt(){bt();if(u===k.type)switch(k.value){case\"local\":return $(),Dt();case\"if\":return $(),Mt();case\"return\":return $(),Ot();case\"function\":$();var e=jt();return Bt(e);case\"while\":return $(),Lt();case\"for\":return $(),_t();case\"repeat\":return $(),At();case\"break\":return $(),Nt();case\"do\":return $(),kt();case\"goto\":return $(),Ct()}if(l===k.type&&J(\"::\"))return Tt();mt&&vt.pop();if(J(\";\"))return;return Pt()}function Tt(){var e=k.value,t=Ht();return n.scope&&(ct(\"::\"+e+\"::\"),pt(t,!0)),K(\"::\"),m(v.labelStatement(t))}function Nt(){return m(v.breakStatement())}function Ct(){var e=k.value,t=Ht();return n.scope&&(t.isLabel=dt(\"::\"+e+\"::\")),m(v.gotoStatement(t))}function kt(){var e=St();return K(\"end\"),m(v.doStatement(e))}function Lt(){var e=qt();K(\"do\");var t=St();return K(\"end\"),m(v.whileStatement(e,t))}function At(){var e=St();K(\"until\");var t=qt();return m(v.repeatStatement(t,e))}function Ot(){var e=[];if(\"end\"!==k.value){var t=It();null!=t&&e.push(t);while(J(\",\"))t=qt(),e.push(t);J(\";\")}return m(v.returnStatement(e))}function Mt(){var e=[],t,n,r;mt&&(r=vt[vt.length-1],vt.push(r)),t=qt(),K(\"then\"),n=St(),e.push(m(v.ifClause(t,n))),mt&&(r=gt());while(J(\"elseif\"))wt(r),t=qt(),K(\"then\"),n=St(),e.push(m(v.elseifClause(t,n))),mt&&(r=gt());return J(\"else\")&&(mt&&(r=new yt(L),vt.push(r)),n=St(),e.push(m(v.elseClause(n)))),K(\"end\"),m(v.ifStatement(e))}function _t(){var e=Ht(),t;n.scope&&ht(e);if(J(\"=\")){var r=qt();K(\",\");var i=qt(),s=J(\",\")?qt():null;return K(\"do\"),t=St(),K(\"end\"),m(v.forNumericStatement(e,r,i,s,t))}var o=[e];while(J(\",\"))e=Ht(),n.scope&&ht(e),o.push(e);K(\"in\");var u=[];do{var a=qt();u.push(a)}while(J(\",\"));return K(\"do\"),t=St(),K(\"end\"),m(v.forGenericStatement(o,u,t))}function Dt(){var e;if(a===k.type){var t=[],r=[];do e=Ht(),t.push(e);while(J(\",\"));if(J(\"=\"))do{var i=qt();r.push(i)}while(J(\",\"));if(n.scope)for(var s=0,o=t.length;s<o;s++)ht(t[s]);return m(v.localStatement(t,r))}if(J(\"function\"))return e=Ht(),n.scope&&ht(e),Bt(e,!0);T(\"<name>\",k)}function Pt(){var e=k,t,n;mt&&(n=gt()),t=zt();if(null==t)return N(k);if(\",=\".indexOf(k.value)>=0){var r=[t],i=[],s;while(J(\",\"))s=zt(),null==s&&T(\"<expression>\",k),r.push(s);K(\"=\");do s=qt(),i.push(s);while(J(\",\"));return wt(n),m(v.assignmentStatement(r,i))}return it(t)?(wt(n),m(v.callStatement(t))):N(e)}function Ht(){bt();var e=k.value;return a!==k.type&&T(\"<name>\",k),$(),m(v.identifier(e))}function Bt(e,t){var r=[];K(\"(\");if(!J(\")\"))for(;;)if(a===k.type){var i=Ht();n.scope&&ht(i),r.push(i);if(J(\",\"))continue;if(J(\")\"))break}else{if(p===k.type){r.push(Xt()),K(\")\");break}T(\"<name> or '...'\",k)}var s=St();return K(\"end\"),t=t||!1,m(v.functionStatement(e,r,t,s))}function jt(){var e,t,r;mt&&(r=gt()),e=Ht(),n.scope&&pt(e,!1);while(J(\".\"))wt(r),t=Ht(),n.scope&&pt(t,!1),e=m(v.memberExpression(e,\".\",t));return J(\":\")&&(wt(r),t=Ht(),n.scope&&pt(t,!1),e=m(v.memberExpression(e,\":\",t))),e}function Ft(){var e=[],t,n;for(;;){bt();if(l===k.type&&J(\"[\"))t=qt(),K(\"]\"),K(\"=\"),n=qt(),e.push(m(v.tableKey(t,n)));else if(a===k.type)t=qt(),J(\"=\")?(n=qt(),e.push(m(v.tableKeyString(t,n)))):e.push(m(v.tableValue(t)));else{if(null==(n=It())){vt.pop();break}e.push(m(v.tableValue(n)))}if(\",;\".indexOf(k.value)>=0){$();continue}if(\"}\"===k.value)break}return K(\"}\"),m(v.tableConstructorExpression(e))}function It(){var e=Ut(0);return e}function qt(){var e=It();if(null!=e)return e;T(\"<expression>\",k)}function Rt(e){var t=e.charCodeAt(0),n=e.length;if(1===n)switch(t){case 94:return 10;case 42:case 47:case 37:return 7;case 43:case 45:return 6;case 60:case 62:return 3;case 38:case 124:return 7}else if(2===n)switch(t){case 46:return 5;case 60:case 62:case 61:case 126:return 3;case 111:return 1}else if(97===t&&\"and\"===e)return 2;return 0}function Ut(e){var t=k.value,n,r;mt&&(r=gt());if(rt(k)){bt(),$();var i=Ut(8);i==null&&T(\"<expression>\",k),n=m(v.unaryExpression(t,i))}null==n&&(n=Xt(),null==n&&(n=zt()));if(null==n)return null;var s;for(;;){t=k.value,s=l===k.type||u===k.type?Rt(t):0;if(s===0||s<=e)break;(\"^\"===t||\"..\"===t)&&s--,$();var o=Ut(s);null==o&&T(\"<expression>\",k),mt&&vt.push(r),n=m(v.binaryExpression(t,n,o))}return n}function zt(){var e,t,r,i;mt&&(r=gt());if(a===k.type)t=k.value,e=Ht(),n.scope&&pt(e,i=dt(t));else{if(!J(\"(\"))return null;e=qt(),K(\")\"),n.scope&&(i=e.isLocal)}var s,u;for(;;)if(l===k.type)switch(k.value){case\"[\":wt(r),$(),s=qt(),e=m(v.indexExpression(e,s)),K(\"]\");break;case\".\":wt(r),$(),u=Ht(),n.scope&&pt(u,i),e=m(v.memberExpression(e,\".\",u));break;case\":\":wt(r),$(),u=Ht(),n.scope&&pt(u,i),e=m(v.memberExpression(e,\":\",u)),wt(r),e=Wt(e);break;case\"(\":case\"{\":wt(r),e=Wt(e);break;default:return e}else{if(o!==k.type)break;wt(r),e=Wt(e)}return e}function Wt(e){if(l===k.type)switch(k.value){case\"(\":$();var t=[],n=It();null!=n&&t.push(n);while(J(\",\"))n=qt(),t.push(n);return K(\")\"),m(v.callExpression(e,t));case\"{\":bt(),$();var r=Ft();return m(v.tableCallExpression(e,r))}else if(o===k.type)return m(v.stringCallExpression(e,Xt()));T(\"function arguments\",k)}function Xt(){var e=o|f|c|h|p,n=k.value,r=k.type,i;mt&&(i=gt());if(r&e){wt(i);var s=t.slice(k.range[0],k.range[1]);return $(),m(v.literal(r,n,s))}if(u===r&&\"function\"===n)return wt(i),$(),Bt(null);if(J(\"{\"))return wt(i),Ft()}function Vt(s,o){return\"undefined\"==typeof o&&\"object\"==typeof s&&(o=s,s=undefined),o||(o={}),t=s||\"\",n=S(i,o),C=0,_=1,D=0,r=t.length,ot=[[]],ut=0,at=[],vt=[],n.comments&&(O=[]),n.wait?e:Jt()}function $t(n){return t+=String(n),r=t.length,e}function Jt(e){\"undefined\"!=typeof e&&$t(e),r=t.length,mt=n.locations||n.ranges,A=P();var i=Et();n.comments&&(i.comments=O),n.scope&&(i.globals=at);if(vt.length>0)throw new Error(\"Location tracking failed. This is most likely a bug in luaparse\");return i}e.version=\"0.1.4\";var t,n,r,i=e.defaultOptions={wait:!1,comments:!0,scope:!1,locations:!1,ranges:!1},s=1,o=2,u=4,a=8,f=16,l=32,c=64,h=128,p=256;e.tokenTypes={EOF:s,StringLiteral:o,Keyword:u,Identifier:a,NumericLiteral:f,Punctuator:l,BooleanLiteral:c,NilLiteral:h,VarargLiteral:p};var d=e.errors={unexpected:\"Unexpected %1 '%2' near '%3'\",expected:\"'%1' expected near '%2'\",expectedToken:\"%1 expected near '%2'\",unfinishedString:\"unfinished string near '%1'\",malformedNumber:\"malformed number near '%1'\"},v=e.ast={labelStatement:function(e){return{type:\"LabelStatement\",label:e}},breakStatement:function(){return{type:\"BreakStatement\"}},gotoStatement:function(e){return{type:\"GotoStatement\",label:e}},returnStatement:function(e){return{type:\"ReturnStatement\",arguments:e}},ifStatement:function(e){return{type:\"IfStatement\",clauses:e}},ifClause:function(e,t){return{type:\"IfClause\",condition:e,body:t}},elseifClause:function(e,t){return{type:\"ElseifClause\",condition:e,body:t}},elseClause:function(e){return{type:\"ElseClause\",body:e}},whileStatement:function(e,t){return{type:\"WhileStatement\",condition:e,body:t}},doStatement:function(e){return{type:\"DoStatement\",body:e}},repeatStatement:function(e,t){return{type:\"RepeatStatement\",condition:e,body:t}},localStatement:function(e,t){return{type:\"LocalStatement\",variables:e,init:t}},assignmentStatement:function(e,t){return{type:\"AssignmentStatement\",variables:e,init:t}},callStatement:function(e){return{type:\"CallStatement\",expression:e}},functionStatement:function(e,t,n,r){return{type:\"FunctionDeclaration\",identifier:e,isLocal:n,parameters:t,body:r}},forNumericStatement:function(e,t,n,r,i){return{type:\"ForNumericStatement\",variable:e,start:t,end:n,step:r,body:i}},forGenericStatement:function(e,t,n){return{type:\"ForGenericStatement\",variables:e,iterators:t,body:n}},chunk:function(e){return{type:\"Chunk\",body:e}},identifier:function(e){return{type:\"Identifier\",name:e}},literal:function(e,t,n){return e=e===o?\"StringLiteral\":e===f?\"NumericLiteral\":e===c?\"BooleanLiteral\":e===h?\"NilLiteral\":\"VarargLiteral\",{type:e,value:t,raw:n}},tableKey:function(e,t){return{type:\"TableKey\",key:e,value:t}},tableKeyString:function(e,t){return{type:\"TableKeyString\",key:e,value:t}},tableValue:function(e){return{type:\"TableValue\",value:e}},tableConstructorExpression:function(e){return{type:\"TableConstructorExpression\",fields:e}},binaryExpression:function(e,t,n){var r=\"and\"===e||\"or\"===e?\"LogicalExpression\":\"BinaryExpression\";return{type:r,operator:e,left:t,right:n}},unaryExpression:function(e,t){return{type:\"UnaryExpression\",operator:e,argument:t}},memberExpression:function(e,t,n){return{type:\"MemberExpression\",indexer:t,identifier:n,base:e}},indexExpression:function(e,t){return{type:\"IndexExpression\",base:e,index:t}},callExpression:function(e,t){return{type:\"CallExpression\",base:e,arguments:t}},tableCallExpression:function(e,t){return{type:\"TableCallExpression\",base:e,arguments:t}},stringCallExpression:function(e,t){return{type:\"StringCallExpression\",base:e,argument:t}},comment:function(e,t){return{type:\"Comment\",value:e,raw:t}}},g=Array.prototype.slice,y=Object.prototype.toString,b=function(t,n){for(var r=0,i=t.length;r<i;r++)if(t[r]===n)return r;return-1},C,k,L,A,O,M,_,D;e.lex=P;var ot,ut,at,vt=[],mt;yt.prototype.complete=function(){n.locations&&(this.loc.end.line=L.line,this.loc.end.column=L.range[1]-L.lineStart),n.ranges&&(this.range[1]=L.range[1])},e.parse=Vt,e.write=$t,e.end=Jt})}),ace.define(\"ace/mode/lua_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"../mode/lua/luaparse\"),o=t.Worker=function(e){i.call(this,e),this.setTimeout(500)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue(),t=[];try{s.parse(e)}catch(n){n instanceof SyntaxError&&t.push({row:n.line-1,column:n.column,text:n.message,type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),ace.define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/worker-php.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/php/php\",[],function(e,t,n){var r={Constants:{}};r.Constants.T_INCLUDE=257,r.Constants.T_INCLUDE_ONCE=258,r.Constants.T_EVAL=259,r.Constants.T_REQUIRE=260,r.Constants.T_REQUIRE_ONCE=261,r.Constants.T_LOGICAL_OR=262,r.Constants.T_LOGICAL_XOR=263,r.Constants.T_LOGICAL_AND=264,r.Constants.T_PRINT=265,r.Constants.T_YIELD=266,r.Constants.T_DOUBLE_ARROW=267,r.Constants.T_YIELD_FROM=268,r.Constants.T_PLUS_EQUAL=269,r.Constants.T_MINUS_EQUAL=270,r.Constants.T_MUL_EQUAL=271,r.Constants.T_DIV_EQUAL=272,r.Constants.T_CONCAT_EQUAL=273,r.Constants.T_MOD_EQUAL=274,r.Constants.T_AND_EQUAL=275,r.Constants.T_OR_EQUAL=276,r.Constants.T_XOR_EQUAL=277,r.Constants.T_SL_EQUAL=278,r.Constants.T_SR_EQUAL=279,r.Constants.T_POW_EQUAL=280,r.Constants.T_COALESCE=281,r.Constants.T_BOOLEAN_OR=282,r.Constants.T_BOOLEAN_AND=283,r.Constants.T_IS_EQUAL=284,r.Constants.T_IS_NOT_EQUAL=285,r.Constants.T_IS_IDENTICAL=286,r.Constants.T_IS_NOT_IDENTICAL=287,r.Constants.T_SPACESHIP=288,r.Constants.T_IS_SMALLER_OR_EQUAL=289,r.Constants.T_IS_GREATER_OR_EQUAL=290,r.Constants.T_SL=291,r.Constants.T_SR=292,r.Constants.T_INSTANCEOF=293,r.Constants.T_INC=294,r.Constants.T_DEC=295,r.Constants.T_INT_CAST=296,r.Constants.T_DOUBLE_CAST=297,r.Constants.T_STRING_CAST=298,r.Constants.T_ARRAY_CAST=299,r.Constants.T_OBJECT_CAST=300,r.Constants.T_BOOL_CAST=301,r.Constants.T_UNSET_CAST=302,r.Constants.T_POW=303,r.Constants.T_NEW=304,r.Constants.T_CLONE=305,r.Constants.T_EXIT=306,r.Constants.T_IF=307,r.Constants.T_ELSEIF=308,r.Constants.T_ELSE=309,r.Constants.T_ENDIF=310,r.Constants.T_LNUMBER=311,r.Constants.T_DNUMBER=312,r.Constants.T_STRING=313,r.Constants.T_STRING_VARNAME=314,r.Constants.T_VARIABLE=315,r.Constants.T_NUM_STRING=316,r.Constants.T_INLINE_HTML=317,r.Constants.T_CHARACTER=318,r.Constants.T_BAD_CHARACTER=319,r.Constants.T_ENCAPSED_AND_WHITESPACE=320,r.Constants.T_CONSTANT_ENCAPSED_STRING=321,r.Constants.T_ECHO=322,r.Constants.T_DO=323,r.Constants.T_WHILE=324,r.Constants.T_ENDWHILE=325,r.Constants.T_FOR=326,r.Constants.T_ENDFOR=327,r.Constants.T_FOREACH=328,r.Constants.T_ENDFOREACH=329,r.Constants.T_DECLARE=330,r.Constants.T_ENDDECLARE=331,r.Constants.T_AS=332,r.Constants.T_SWITCH=333,r.Constants.T_ENDSWITCH=334,r.Constants.T_CASE=335,r.Constants.T_DEFAULT=336,r.Constants.T_BREAK=337,r.Constants.T_CONTINUE=338,r.Constants.T_GOTO=339,r.Constants.T_FUNCTION=340,r.Constants.T_CONST=341,r.Constants.T_RETURN=342,r.Constants.T_TRY=343,r.Constants.T_CATCH=344,r.Constants.T_FINALLY=345,r.Constants.T_THROW=346,r.Constants.T_USE=347,r.Constants.T_INSTEADOF=348,r.Constants.T_GLOBAL=349,r.Constants.T_STATIC=350,r.Constants.T_ABSTRACT=351,r.Constants.T_FINAL=352,r.Constants.T_PRIVATE=353,r.Constants.T_PROTECTED=354,r.Constants.T_PUBLIC=355,r.Constants.T_VAR=356,r.Constants.T_UNSET=357,r.Constants.T_ISSET=358,r.Constants.T_EMPTY=359,r.Constants.T_HALT_COMPILER=360,r.Constants.T_CLASS=361,r.Constants.T_TRAIT=362,r.Constants.T_INTERFACE=363,r.Constants.T_EXTENDS=364,r.Constants.T_IMPLEMENTS=365,r.Constants.T_OBJECT_OPERATOR=366,r.Constants.T_LIST=367,r.Constants.T_ARRAY=368,r.Constants.T_CALLABLE=369,r.Constants.T_CLASS_C=370,r.Constants.T_TRAIT_C=371,r.Constants.T_METHOD_C=372,r.Constants.T_FUNC_C=373,r.Constants.T_LINE=374,r.Constants.T_FILE=375,r.Constants.T_COMMENT=376,r.Constants.T_DOC_COMMENT=377,r.Constants.T_OPEN_TAG=378,r.Constants.T_OPEN_TAG_WITH_ECHO=379,r.Constants.T_CLOSE_TAG=380,r.Constants.T_WHITESPACE=381,r.Constants.T_START_HEREDOC=382,r.Constants.T_END_HEREDOC=383,r.Constants.T_DOLLAR_OPEN_CURLY_BRACES=384,r.Constants.T_CURLY_OPEN=385,r.Constants.T_PAAMAYIM_NEKUDOTAYIM=386,r.Constants.T_NAMESPACE=387,r.Constants.T_NS_C=388,r.Constants.T_DIR=389,r.Constants.T_NS_SEPARATOR=390,r.Constants.T_ELLIPSIS=391,r.Lexer=function(e,t){var n,i,s=[\"INITIAL\"],o=0,u=function(e){s[o]=e},a=function(e){s[++o]=e},f=function(){--o},l=t===undefined||/^(on|true|1)$/i.test(t.short_open_tag),c=l?/^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|<\\?|\\<script language\\=('|\")?php('|\")?\\>)/i:/^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|\\<script language\\=('|\")?php('|\")?\\>)/i,h=l?/[^<]*(?:<(?!\\?|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i:/[^<]*(?:<(?!\\?=|\\?php[ \\t\\r\\n]|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i,p=\"[a-zA-Z_\\\\x7f-\\\\uffff][a-zA-Z0-9_\\\\x7f-\\\\uffff]*\",d=function(e){return\"[^\"+e+\"\\\\\\\\${]*(?:(?:\\\\\\\\[\\\\s\\\\S]|\\\\$(?!\\\\{|[a-zA-Z_\\\\x7f-\\\\uffff])|\\\\{(?!\\\\$))[^\"+e+\"\\\\\\\\${]*)*\"},v=[{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p+\"(?=\\\\[)\"),func:function(){a(\"VAR_OFFSET\")}},{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p+\"(?=->\"+p+\")\"),func:function(){a(\"LOOKING_FOR_PROPERTY\")}},{value:r.Constants.T_DOLLAR_OPEN_CURLY_BRACES,re:new RegExp(\"^\\\\$\\\\{(?=\"+p+\"[\\\\[}])\"),func:function(){a(\"LOOKING_FOR_VARNAME\")}},{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p)},{value:r.Constants.T_DOLLAR_OPEN_CURLY_BRACES,re:/^\\$\\{/,func:function(){a(\"IN_SCRIPTING\")}},{value:r.Constants.T_CURLY_OPEN,re:/^\\{(?=\\$)/,func:function(){a(\"IN_SCRIPTING\")}}],m={INITIAL:[{value:r.Constants.T_OPEN_TAG_WITH_ECHO,re:/^<\\?=/i,func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_OPEN_TAG,re:c,func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_INLINE_HTML,re:h}],IN_SCRIPTING:[{value:r.Constants.T_WHITESPACE,re:/^[ \\n\\r\\t]+/},{value:r.Constants.T_ABSTRACT,re:/^abstract\\b/i},{value:r.Constants.T_LOGICAL_AND,re:/^and\\b/i},{value:r.Constants.T_ARRAY,re:/^array\\b/i},{value:r.Constants.T_AS,re:/^as\\b/i},{value:r.Constants.T_BREAK,re:/^break\\b/i},{value:r.Constants.T_CALLABLE,re:/^callable\\b/i},{value:r.Constants.T_CASE,re:/^case\\b/i},{value:r.Constants.T_CATCH,re:/^catch\\b/i},{value:r.Constants.T_CLASS,re:/^class\\b/i},{value:r.Constants.T_CLONE,re:/^clone\\b/i},{value:r.Constants.T_CONST,re:/^const\\b/i},{value:r.Constants.T_CONTINUE,re:/^continue\\b/i},{value:r.Constants.T_DECLARE,re:/^declare\\b/i},{value:r.Constants.T_DEFAULT,re:/^default\\b/i},{value:r.Constants.T_DO,re:/^do\\b/i},{value:r.Constants.T_ECHO,re:/^echo\\b/i},{value:r.Constants.T_ELSE,re:/^else\\b/i},{value:r.Constants.T_ELSEIF,re:/^elseif\\b/i},{value:r.Constants.T_ENDDECLARE,re:/^enddeclare\\b/i},{value:r.Constants.T_ENDFOR,re:/^endfor\\b/i},{value:r.Constants.T_ENDFOREACH,re:/^endforeach\\b/i},{value:r.Constants.T_ENDIF,re:/^endif\\b/i},{value:r.Constants.T_ENDSWITCH,re:/^endswitch\\b/i},{value:r.Constants.T_ENDWHILE,re:/^endwhile\\b/i},{value:r.Constants.T_EMPTY,re:/^empty\\b/i},{value:r.Constants.T_EVAL,re:/^eval\\b/i},{value:r.Constants.T_EXIT,re:/^(?:exit|die)\\b/i},{value:r.Constants.T_EXTENDS,re:/^extends\\b/i},{value:r.Constants.T_FINAL,re:/^final\\b/i},{value:r.Constants.T_FINALLY,re:/^finally\\b/i},{value:r.Constants.T_FOR,re:/^for\\b/i},{value:r.Constants.T_FOREACH,re:/^foreach\\b/i},{value:r.Constants.T_FUNCTION,re:/^function\\b/i},{value:r.Constants.T_GLOBAL,re:/^global\\b/i},{value:r.Constants.T_GOTO,re:/^goto\\b/i},{value:r.Constants.T_IF,re:/^if\\b/i},{value:r.Constants.T_IMPLEMENTS,re:/^implements\\b/i},{value:r.Constants.T_INCLUDE,re:/^include\\b/i},{value:r.Constants.T_INCLUDE_ONCE,re:/^include_once\\b/i},{value:r.Constants.T_INSTANCEOF,re:/^instanceof\\b/i},{value:r.Constants.T_INSTEADOF,re:/^insteadof\\b/i},{value:r.Constants.T_INTERFACE,re:/^interface\\b/i},{value:r.Constants.T_ISSET,re:/^isset\\b/i},{value:r.Constants.T_LIST,re:/^list\\b/i},{value:r.Constants.T_NAMESPACE,re:/^namespace\\b/i},{value:r.Constants.T_NEW,re:/^new\\b/i},{value:r.Constants.T_LOGICAL_OR,re:/^or\\b/i},{value:r.Constants.T_PRINT,re:/^print\\b/i},{value:r.Constants.T_PRIVATE,re:/^private\\b/i},{value:r.Constants.T_PROTECTED,re:/^protected\\b/i},{value:r.Constants.T_PUBLIC,re:/^public\\b/i},{value:r.Constants.T_REQUIRE,re:/^require\\b/i},{value:r.Constants.T_REQUIRE_ONCE,re:/^require_once\\b/i},{value:r.Constants.T_STATIC,re:/^static\\b/i},{value:r.Constants.T_SWITCH,re:/^switch\\b/i},{value:r.Constants.T_THROW,re:/^throw\\b/i},{value:r.Constants.T_TRAIT,re:/^trait\\b/i},{value:r.Constants.T_TRY,re:/^try\\b/i},{value:r.Constants.T_UNSET,re:/^unset\\b/i},{value:r.Constants.T_USE,re:/^use\\b/i},{value:r.Constants.T_VAR,re:/^var\\b/i},{value:r.Constants.T_WHILE,re:/^while\\b/i},{value:r.Constants.T_LOGICAL_XOR,re:/^xor\\b/i},{value:r.Constants.T_YIELD_FROM,re:/^yield\\s+from\\b/i},{value:r.Constants.T_YIELD,re:/^yield\\b/i},{value:r.Constants.T_RETURN,re:/^return\\b/i},{value:r.Constants.T_METHOD_C,re:/^__METHOD__\\b/i},{value:r.Constants.T_LINE,re:/^__LINE__\\b/i},{value:r.Constants.T_FILE,re:/^__FILE__\\b/i},{value:r.Constants.T_FUNC_C,re:/^__FUNCTION__\\b/i},{value:r.Constants.T_NS_C,re:/^__NAMESPACE__\\b/i},{value:r.Constants.T_TRAIT_C,re:/^__TRAIT__\\b/i},{value:r.Constants.T_DIR,re:/^__DIR__\\b/i},{value:r.Constants.T_CLASS_C,re:/^__CLASS__\\b/i},{value:r.Constants.T_AND_EQUAL,re:/^&=/},{value:r.Constants.T_ARRAY_CAST,re:/^\\([ \\t]*array[ \\t]*\\)/i},{value:r.Constants.T_BOOL_CAST,re:/^\\([ \\t]*(?:bool|boolean)[ \\t]*\\)/i},{value:r.Constants.T_DOUBLE_CAST,re:/^\\([ \\t]*(?:real|float|double)[ \\t]*\\)/i},{value:r.Constants.T_INT_CAST,re:/^\\([ \\t]*(?:int|integer)[ \\t]*\\)/i},{value:r.Constants.T_OBJECT_CAST,re:/^\\([ \\t]*object[ \\t]*\\)/i},{value:r.Constants.T_STRING_CAST,re:/^\\([ \\t]*(?:binary|string)[ \\t]*\\)/i},{value:r.Constants.T_UNSET_CAST,re:/^\\([ \\t]*unset[ \\t]*\\)/i},{value:r.Constants.T_BOOLEAN_AND,re:/^&&/},{value:r.Constants.T_BOOLEAN_OR,re:/^\\|\\|/},{value:r.Constants.T_CLOSE_TAG,re:/^(?:\\?>|<\\/script>)(\\r\\n|\\r|\\n)?/i,func:function(){u(\"INITIAL\")}},{value:r.Constants.T_DOUBLE_ARROW,re:/^=>/},{value:r.Constants.T_PAAMAYIM_NEKUDOTAYIM,re:/^::/},{value:r.Constants.T_INC,re:/^\\+\\+/},{value:r.Constants.T_DEC,re:/^--/},{value:r.Constants.T_CONCAT_EQUAL,re:/^\\.=/},{value:r.Constants.T_DIV_EQUAL,re:/^\\/=/},{value:r.Constants.T_XOR_EQUAL,re:/^\\^=/},{value:r.Constants.T_MUL_EQUAL,re:/^\\*=/},{value:r.Constants.T_MOD_EQUAL,re:/^%=/},{value:r.Constants.T_SL_EQUAL,re:/^<<=/},{value:r.Constants.T_START_HEREDOC,re:new RegExp(\"^[bB]?<<<[ \\\\t]*'(\"+p+\")'(?:\\\\r\\\\n|\\\\r|\\\\n)\"),func:function(e){n=e[1],u(\"NOWDOC\")}},{value:r.Constants.T_START_HEREDOC,re:new RegExp('^[bB]?<<<[ \\\\t]*(\"?)('+p+\")\\\\1(?:\\\\r\\\\n|\\\\r|\\\\n)\"),func:function(e){n=e[2],i=!0,u(\"HEREDOC\")}},{value:r.Constants.T_SL,re:/^<</},{value:r.Constants.T_SPACESHIP,re:/^<=>/},{value:r.Constants.T_IS_SMALLER_OR_EQUAL,re:/^<=/},{value:r.Constants.T_SR_EQUAL,re:/^>>=/},{value:r.Constants.T_SR,re:/^>>/},{value:r.Constants.T_IS_GREATER_OR_EQUAL,re:/^>=/},{value:r.Constants.T_OR_EQUAL,re:/^\\|=/},{value:r.Constants.T_PLUS_EQUAL,re:/^\\+=/},{value:r.Constants.T_MINUS_EQUAL,re:/^-=/},{value:r.Constants.T_OBJECT_OPERATOR,re:new RegExp(\"^->(?=[ \\n\\r\t]*\"+p+\")\"),func:function(){a(\"LOOKING_FOR_PROPERTY\")}},{value:r.Constants.T_OBJECT_OPERATOR,re:/^->/i},{value:r.Constants.T_ELLIPSIS,re:/^\\.\\.\\./},{value:r.Constants.T_POW_EQUAL,re:/^\\*\\*=/},{value:r.Constants.T_POW,re:/^\\*\\*/},{value:r.Constants.T_COALESCE,re:/^\\?\\?/},{value:r.Constants.T_COMMENT,re:/^\\/\\*([\\S\\s]*?)(?:\\*\\/|$)/},{value:r.Constants.T_COMMENT,re:/^(?:\\/\\/|#)[^\\r\\n?]*(?:\\?(?!>)[^\\r\\n?]*)*(?:\\r\\n|\\r|\\n)?/},{value:r.Constants.T_IS_IDENTICAL,re:/^===/},{value:r.Constants.T_IS_EQUAL,re:/^==/},{value:r.Constants.T_IS_NOT_IDENTICAL,re:/^!==/},{value:r.Constants.T_IS_NOT_EQUAL,re:/^(!=|<>)/},{value:r.Constants.T_DNUMBER,re:/^(?:[0-9]+\\.[0-9]*|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?/},{value:r.Constants.T_DNUMBER,re:/^[0-9]+[eE][+-]?[0-9]+/},{value:r.Constants.T_LNUMBER,re:/^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i},{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p)},{value:r.Constants.T_CONSTANT_ENCAPSED_STRING,re:/^[bB]?'[^'\\\\]*(?:\\\\[\\s\\S][^'\\\\]*)*'/},{value:r.Constants.T_CONSTANT_ENCAPSED_STRING,re:new RegExp('^[bB]?\"'+d('\"')+'\"')},{value:-1,re:/^[bB]?\"/,func:function(){u(\"DOUBLE_QUOTES\")}},{value:-1,re:/^`/,func:function(){u(\"BACKTICKS\")}},{value:r.Constants.T_NS_SEPARATOR,re:/^\\\\/},{value:r.Constants.T_STRING,re:/^[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{value:-1,re:/^\\{/,func:function(){a(\"IN_SCRIPTING\")}},{value:-1,re:/^\\}/,func:function(){o>0&&f()}},{value:-1,re:/^[\\[\\];:?()!.,><=+-/*|&@^%\"'$~]/}],DOUBLE_QUOTES:v.concat([{value:-1,re:/^\"/,func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_ENCAPSED_AND_WHITESPACE,re:new RegExp(\"^\"+d('\"'))}]),BACKTICKS:v.concat([{value:-1,re:/^`/,func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_ENCAPSED_AND_WHITESPACE,re:new RegExp(\"^\"+d(\"`\"))}]),VAR_OFFSET:[{value:-1,re:/^\\]/,func:function(){f()}},{value:r.Constants.T_NUM_STRING,re:/^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i},{value:r.Constants.T_VARIABLE,re:new RegExp(\"^\\\\$\"+p)},{value:r.Constants.T_STRING,re:new RegExp(\"^\"+p)},{value:-1,re:/^[;:,.\\[()|^&+-/*=%!~$<>?@{}\"`]/}],LOOKING_FOR_PROPERTY:[{value:r.Constants.T_OBJECT_OPERATOR,re:/^->/},{value:r.Constants.T_STRING,re:new RegExp(\"^\"+p),func:function(){f()}},{value:r.Constants.T_WHITESPACE,re:/^[ \\n\\r\\t]+/}],LOOKING_FOR_VARNAME:[{value:r.Constants.T_STRING_VARNAME,re:new RegExp(\"^\"+p+\"(?=[\\\\[}])\"),func:function(){u(\"IN_SCRIPTING\")}}],NOWDOC:[{value:r.Constants.T_END_HEREDOC,matchFunc:function(e){var t=new RegExp(\"^\"+n+\"(?=;?[\\\\r\\\\n])\");return e.match(t)?[e.substr(0,n.length)]:null},func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_ENCAPSED_AND_WHITESPACE,matchFunc:function(e){var t=new RegExp(\"[\\\\r\\\\n]\"+n+\"(?=;?[\\\\r\\\\n])\"),r=t.exec(e),i=r?r.index+1:e.length;return[e.substring(0,i)]}}],HEREDOC:v.concat([{value:r.Constants.T_END_HEREDOC,matchFunc:function(e){if(!i)return null;var t=new RegExp(\"^\"+n+\"(?=;?[\\\\r\\\\n])\");return e.match(t)?[e.substr(0,n.length)]:null},func:function(){u(\"IN_SCRIPTING\")}},{value:r.Constants.T_ENCAPSED_AND_WHITESPACE,matchFunc:function(e){var t=e.length,r=new RegExp(\"^\"+d(\"\")),s=r.exec(e);return s&&(t=s[0].length),r=new RegExp(\"([\\\\r\\\\n])\"+n+\"(?=;?[\\\\r\\\\n])\"),s=r.exec(e.substring(0,t)),s?(t=s.index+1,i=!0):i=!1,t==0?null:[e.substring(0,t)]}}])},g=[],y=1,b=!0;if(e===null)return g;typeof e!=\"string\"&&(e=e.toString());while(e.length>0&&b===!0){var w=s[o],E=m[w];b=E.some(function(t){var n=t.matchFunc!==undefined?t.matchFunc(e):e.match(t.re);if(n!==null){if(n[0].length==0)throw new Error(\"empty match\");t.func!==undefined&&t.func(n);if(t.value===-1)g.push(n[0]);else{var r=n[0];g.push([parseInt(t.value,10),r,y]),y+=r.split(\"\\n\").length-1}return e=e.substring(n[0].length),!0}return!1})}return g},r.Parser=function(e,t){var n=this.yybase,i=this.yydefault,s=this.yycheck,o=this.yyaction,u=this.yylen,a=this.yygbase,f=this.yygcheck,l=this.yyp,c=this.yygoto,h=this.yylhs,p=this.terminals,d=this.translate,v=this.yygdefault;this.pos=-1,this.line=1,this.tokenMap=this.createTokenMap(),this.dropTokens={},this.dropTokens[r.Constants.T_WHITESPACE]=1,this.dropTokens[r.Constants.T_OPEN_TAG]=1;var m=[];e.forEach(function(e,t){typeof e==\"object\"&&e[0]===r.Constants.T_OPEN_TAG_WITH_ECHO?(m.push([r.Constants.T_OPEN_TAG,e[1],e[2]]),m.push([r.Constants.T_ECHO,e[1],e[2]])):m.push(e)}),this.tokens=m;var g=this.TOKEN_NONE;this.startAttributes={startLine:1},this.endAttributes={};var y=[this.startAttributes],b=0,w=[b];this.yyastk=[],this.stackPos=0;var E,S;for(;;){if(n[b]===0)E=i[b];else{g===this.TOKEN_NONE&&(S=this.getNextToken(),g=S>=0&&S<this.TOKEN_MAP_SIZE?d[S]:this.TOKEN_INVALID,y[this.stackPos]=this.startAttributes);if(((E=n[b]+g)>=0&&E<this.YYLAST&&s[E]===g||b<this.YY2TBLSTATE&&(E=n[b+this.YYNLSTATES]+g)>=0&&E<this.YYLAST&&s[E]===g)&&(E=o[E])!==this.YYDEFAULT)if(E>0){++this.stackPos,w[this.stackPos]=b=E,this.yyastk[this.stackPos]=this.tokenValue,y[this.stackPos]=this.startAttributes,g=this.TOKEN_NONE;if(E<this.YYNLSTATES)continue;E-=this.YYNLSTATES}else E=-E;else E=i[b]}for(;;){if(E===0)return this.yyval;if(E===this.YYUNEXPECTED){if(t!==!0){var T=[];for(var N=0;N<this.TOKEN_MAP_SIZE;++N)if((E=n[b]+N)>=0&&E<this.YYLAST&&s[E]==N||b<this.YY2TBLSTATE&&(E=n[b+this.YYNLSTATES]+N)&&E<this.YYLAST&&s[E]==N)if(o[E]!=this.YYUNEXPECTED){if(T.length==4){T=[];break}T.push(this.terminals[N])}var C=\"\";throw T.length&&(C=\", expecting \"+T.join(\" or \")),new r.ParseError(\"syntax error, unexpected \"+p[g]+C,this.startAttributes.startLine)}return this.startAttributes.startLine}for(var x in this.endAttributes)y[this.stackPos-u[E]][x]=this.endAttributes[x];this.stackPos-=u[E],E=h[E],(l=a[E]+w[this.stackPos])>=0&&l<this.YYGLAST&&f[l]===E?b=c[l]:b=v[E],++this.stackPos,w[this.stackPos]=b,this.yyastk[this.stackPos]=this.yyval,y[this.stackPos]=this.startAttributes;if(b<this.YYNLSTATES)break;E=b-this.YYNLSTATES}}},r.ParseError=function(e,t){this.message=e,this.line=t},r.Parser.prototype.getNextToken=function(){this.startAttributes={},this.endAttributes={};var e,t;while(this.tokens[++this.pos]!==undefined){e=this.tokens[this.pos];if(typeof e==\"string\")return this.startAttributes.startLine=this.line,this.endAttributes.endLine=this.line,'b\"'===e?(this.tokenValue='b\"','\"'.charCodeAt(0)):(this.tokenValue=e,e.charCodeAt(0));this.line+=(t=e[1].match(/\\n/g))===null?0:t.length;if(r.Constants.T_COMMENT===e[0])Array.isArray(this.startAttributes.comments)||(this.startAttributes.comments=[]),this.startAttributes.comments.push({type:\"comment\",comment:e[1],line:e[2]});else if(r.Constants.T_DOC_COMMENT===e[0])this.startAttributes.comments.push(new PHPParser_Comment_Doc(e[1],e[2]));else if(this.dropTokens[e[0]]===undefined)return this.tokenValue=e[1],this.startAttributes.startLine=e[2],this.endAttributes.endLine=this.line,this.tokenMap[e[0]]}return this.startAttributes.startLine=this.line,0},r.Parser.prototype.tokenName=function(e){var t=[\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_YIELD\",\"T_DOUBLE_ARROW\",\"T_YIELD_FROM\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_POW_EQUAL\",\"T_COALESCE\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_SPACESHIP\",\"T_IS_SMALLER_OR_EQUAL\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"T_INSTANCEOF\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"T_POW\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_CHARACTER\",\"T_BAD_CHARACTER\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_FINALLY\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_DOUBLE_ARROW\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_COMMENT\",\"T_DOC_COMMENT\",\"T_OPEN_TAG\",\"T_OPEN_TAG_WITH_ECHO\",\"T_CLOSE_TAG\",\"T_WHITESPACE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\",\"T_ELLIPSIS\"],n=\"UNKNOWN\";return t.some(function(t){return r.Constants[t]===e?(n=t,!0):!1}),n},r.Parser.prototype.createTokenMap=function(){var e={},t,n;for(n=256;n<1e3;++n)r.Constants.T_OPEN_TAG_WITH_ECHO===n?e[n]=r.Constants.T_ECHO:r.Constants.T_CLOSE_TAG===n?e[n]=59:\"UNKNOWN\"!==(t=this.tokenName(n))&&(e[n]=this[t]);return e},r.Parser.prototype.TOKEN_NONE=-1,r.Parser.prototype.TOKEN_INVALID=157,r.Parser.prototype.TOKEN_MAP_SIZE=392,r.Parser.prototype.YYLAST=889,r.Parser.prototype.YY2TBLSTATE=337,r.Parser.prototype.YYGLAST=410,r.Parser.prototype.YYNLSTATES=564,r.Parser.prototype.YYUNEXPECTED=32767,r.Parser.prototype.YYDEFAULT=-32766,r.Parser.prototype.YYERRTOK=256,r.Parser.prototype.T_INCLUDE=257,r.Parser.prototype.T_INCLUDE_ONCE=258,r.Parser.prototype.T_EVAL=259,r.Parser.prototype.T_REQUIRE=260,r.Parser.prototype.T_REQUIRE_ONCE=261,r.Parser.prototype.T_LOGICAL_OR=262,r.Parser.prototype.T_LOGICAL_XOR=263,r.Parser.prototype.T_LOGICAL_AND=264,r.Parser.prototype.T_PRINT=265,r.Parser.prototype.T_YIELD=266,r.Parser.prototype.T_DOUBLE_ARROW=267,r.Parser.prototype.T_YIELD_FROM=268,r.Parser.prototype.T_PLUS_EQUAL=269,r.Parser.prototype.T_MINUS_EQUAL=270,r.Parser.prototype.T_MUL_EQUAL=271,r.Parser.prototype.T_DIV_EQUAL=272,r.Parser.prototype.T_CONCAT_EQUAL=273,r.Parser.prototype.T_MOD_EQUAL=274,r.Parser.prototype.T_AND_EQUAL=275,r.Parser.prototype.T_OR_EQUAL=276,r.Parser.prototype.T_XOR_EQUAL=277,r.Parser.prototype.T_SL_EQUAL=278,r.Parser.prototype.T_SR_EQUAL=279,r.Parser.prototype.T_POW_EQUAL=280,r.Parser.prototype.T_COALESCE=281,r.Parser.prototype.T_BOOLEAN_OR=282,r.Parser.prototype.T_BOOLEAN_AND=283,r.Parser.prototype.T_IS_EQUAL=284,r.Parser.prototype.T_IS_NOT_EQUAL=285,r.Parser.prototype.T_IS_IDENTICAL=286,r.Parser.prototype.T_IS_NOT_IDENTICAL=287,r.Parser.prototype.T_SPACESHIP=288,r.Parser.prototype.T_IS_SMALLER_OR_EQUAL=289,r.Parser.prototype.T_IS_GREATER_OR_EQUAL=290,r.Parser.prototype.T_SL=291,r.Parser.prototype.T_SR=292,r.Parser.prototype.T_INSTANCEOF=293,r.Parser.prototype.T_INC=294,r.Parser.prototype.T_DEC=295,r.Parser.prototype.T_INT_CAST=296,r.Parser.prototype.T_DOUBLE_CAST=297,r.Parser.prototype.T_STRING_CAST=298,r.Parser.prototype.T_ARRAY_CAST=299,r.Parser.prototype.T_OBJECT_CAST=300,r.Parser.prototype.T_BOOL_CAST=301,r.Parser.prototype.T_UNSET_CAST=302,r.Parser.prototype.T_POW=303,r.Parser.prototype.T_NEW=304,r.Parser.prototype.T_CLONE=305,r.Parser.prototype.T_EXIT=306,r.Parser.prototype.T_IF=307,r.Parser.prototype.T_ELSEIF=308,r.Parser.prototype.T_ELSE=309,r.Parser.prototype.T_ENDIF=310,r.Parser.prototype.T_LNUMBER=311,r.Parser.prototype.T_DNUMBER=312,r.Parser.prototype.T_STRING=313,r.Parser.prototype.T_STRING_VARNAME=314,r.Parser.prototype.T_VARIABLE=315,r.Parser.prototype.T_NUM_STRING=316,r.Parser.prototype.T_INLINE_HTML=317,r.Parser.prototype.T_CHARACTER=318,r.Parser.prototype.T_BAD_CHARACTER=319,r.Parser.prototype.T_ENCAPSED_AND_WHITESPACE=320,r.Parser.prototype.T_CONSTANT_ENCAPSED_STRING=321,r.Parser.prototype.T_ECHO=322,r.Parser.prototype.T_DO=323,r.Parser.prototype.T_WHILE=324,r.Parser.prototype.T_ENDWHILE=325,r.Parser.prototype.T_FOR=326,r.Parser.prototype.T_ENDFOR=327,r.Parser.prototype.T_FOREACH=328,r.Parser.prototype.T_ENDFOREACH=329,r.Parser.prototype.T_DECLARE=330,r.Parser.prototype.T_ENDDECLARE=331,r.Parser.prototype.T_AS=332,r.Parser.prototype.T_SWITCH=333,r.Parser.prototype.T_ENDSWITCH=334,r.Parser.prototype.T_CASE=335,r.Parser.prototype.T_DEFAULT=336,r.Parser.prototype.T_BREAK=337,r.Parser.prototype.T_CONTINUE=338,r.Parser.prototype.T_GOTO=339,r.Parser.prototype.T_FUNCTION=340,r.Parser.prototype.T_CONST=341,r.Parser.prototype.T_RETURN=342,r.Parser.prototype.T_TRY=343,r.Parser.prototype.T_CATCH=344,r.Parser.prototype.T_FINALLY=345,r.Parser.prototype.T_THROW=346,r.Parser.prototype.T_USE=347,r.Parser.prototype.T_INSTEADOF=348,r.Parser.prototype.T_GLOBAL=349,r.Parser.prototype.T_STATIC=350,r.Parser.prototype.T_ABSTRACT=351,r.Parser.prototype.T_FINAL=352,r.Parser.prototype.T_PRIVATE=353,r.Parser.prototype.T_PROTECTED=354,r.Parser.prototype.T_PUBLIC=355,r.Parser.prototype.T_VAR=356,r.Parser.prototype.T_UNSET=357,r.Parser.prototype.T_ISSET=358,r.Parser.prototype.T_EMPTY=359,r.Parser.prototype.T_HALT_COMPILER=360,r.Parser.prototype.T_CLASS=361,r.Parser.prototype.T_TRAIT=362,r.Parser.prototype.T_INTERFACE=363,r.Parser.prototype.T_EXTENDS=364,r.Parser.prototype.T_IMPLEMENTS=365,r.Parser.prototype.T_OBJECT_OPERATOR=366,r.Parser.prototype.T_LIST=367,r.Parser.prototype.T_ARRAY=368,r.Parser.prototype.T_CALLABLE=369,r.Parser.prototype.T_CLASS_C=370,r.Parser.prototype.T_TRAIT_C=371,r.Parser.prototype.T_METHOD_C=372,r.Parser.prototype.T_FUNC_C=373,r.Parser.prototype.T_LINE=374,r.Parser.prototype.T_FILE=375,r.Parser.prototype.T_COMMENT=376,r.Parser.prototype.T_DOC_COMMENT=377,r.Parser.prototype.T_OPEN_TAG=378,r.Parser.prototype.T_OPEN_TAG_WITH_ECHO=379,r.Parser.prototype.T_CLOSE_TAG=380,r.Parser.prototype.T_WHITESPACE=381,r.Parser.prototype.T_START_HEREDOC=382,r.Parser.prototype.T_END_HEREDOC=383,r.Parser.prototype.T_DOLLAR_OPEN_CURLY_BRACES=384,r.Parser.prototype.T_CURLY_OPEN=385,r.Parser.prototype.T_PAAMAYIM_NEKUDOTAYIM=386,r.Parser.prototype.T_NAMESPACE=387,r.Parser.prototype.T_NS_C=388,r.Parser.prototype.T_DIR=389,r.Parser.prototype.T_NS_SEPARATOR=390,r.Parser.prototype.T_ELLIPSIS=391,r.Parser.prototype.terminals=[\"$EOF\",\"error\",\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"','\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_YIELD\",\"T_DOUBLE_ARROW\",\"T_YIELD_FROM\",\"'='\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_POW_EQUAL\",\"'?'\",\"':'\",\"T_COALESCE\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"'|'\",\"'^'\",\"'&'\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_SPACESHIP\",\"'<'\",\"T_IS_SMALLER_OR_EQUAL\",\"'>'\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"'+'\",\"'-'\",\"'.'\",\"'*'\",\"'/'\",\"'%'\",\"'!'\",\"T_INSTANCEOF\",\"'~'\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"'@'\",\"T_POW\",\"'['\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_FINALLY\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\",\"T_ELLIPSIS\",\"';'\",\"'{'\",\"'}'\",\"'('\",\"')'\",\"'`'\",\"']'\",\"'\\\"'\",\"'$'\",\"???\"],r.Parser.prototype.translate=[0,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,53,155,157,156,52,35,157,151,152,50,47,7,48,49,51,157,157,157,157,157,157,157,157,157,157,29,148,41,15,43,28,65,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,67,157,154,34,157,153,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,149,33,150,55,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,1,2,3,4,5,6,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,30,31,32,36,37,38,39,40,42,44,45,46,54,56,57,58,59,60,61,62,63,64,66,68,69,70,71,72,73,74,75,76,77,78,79,80,81,157,157,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,157,157,157,157,157,157,138,139,140,141,142,143,144,145,146,147],r.Parser.prototype.yyaction=[569,570,571,572,573,215,574,575,576,612,613,0,27,99,100,101,102,103,104,105,106,107,108,109,110,-32766,-32766,-32766,95,96,97,24,240,226,-267,-32766,-32766,-32766,-32766,-32766,-32766,530,344,114,98,-32766,286,-32766,-32766,-32766,-32766,-32766,577,870,872,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,224,-32766,714,578,579,580,581,582,583,584,-32766,264,644,840,841,842,839,838,837,585,586,587,588,589,590,591,592,593,594,595,615,616,617,618,619,607,608,609,610,611,596,597,598,599,600,601,602,638,639,640,641,642,643,603,604,605,606,636,627,625,626,622,623,116,614,620,621,628,629,631,630,632,633,42,43,381,44,45,624,635,634,-214,46,47,289,48,-32767,-32767,-32767,-32767,90,91,92,93,94,267,241,22,840,841,842,839,838,837,832,-32766,-32766,-32766,306,1e3,1e3,1037,120,966,436,-423,244,797,49,50,660,661,272,362,51,-32766,52,219,220,53,54,55,56,57,58,59,60,1016,22,238,61,351,945,-32766,-32766,-32766,967,968,646,705,1e3,28,-456,125,966,-32766,-32766,-32766,715,398,399,216,1e3,-32766,339,-32766,-32766,-32766,-32766,25,222,980,552,355,378,-32766,-423,-32766,-32766,-32766,121,65,1045,408,1047,1046,274,274,131,244,-423,394,395,358,519,945,537,-423,111,-426,398,399,130,972,973,974,975,969,970,243,128,-422,-421,1013,409,976,971,353,791,792,7,-162,63,124,255,701,256,274,382,-122,-122,-122,-4,715,383,646,1042,-421,704,274,-219,33,17,384,-122,385,-122,386,-122,387,-122,369,388,-122,-122,-122,34,35,389,352,520,36,390,353,702,62,112,818,287,288,391,392,-422,-421,-161,350,393,40,38,690,735,396,397,361,22,122,-422,-421,-32766,-32766,-32766,791,792,-422,-421,-425,1e3,-456,-421,-238,966,409,41,382,353,717,535,-122,-32766,383,-32766,-32766,-421,704,21,813,33,17,384,-421,385,-466,386,224,387,-467,273,388,367,945,-458,34,35,389,352,345,36,390,248,247,62,254,715,287,288,391,392,399,-32766,-32766,-32766,393,295,1e3,652,735,396,397,117,115,113,814,119,72,73,74,-162,764,65,240,541,370,518,274,118,270,92,93,94,242,717,535,-4,26,1e3,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,547,240,713,715,382,276,-32766,-32766,126,945,383,-161,938,98,704,225,659,33,17,384,346,385,274,386,728,387,221,120,388,505,506,540,34,35,389,715,-238,36,390,1017,223,62,494,18,287,288,127,297,376,6,98,798,393,274,660,661,490,491,-466,39,-466,514,-467,539,-467,16,458,-458,315,791,792,829,553,382,817,563,653,538,765,383,449,751,535,704,448,435,33,17,384,430,385,646,386,359,387,357,647,388,673,429,1040,34,35,389,715,382,36,390,941,492,62,383,503,287,288,704,434,440,33,17,384,393,385,-32766,386,445,387,495,509,388,10,529,542,34,35,389,715,515,36,390,499,500,62,214,-80,287,288,452,269,736,717,535,488,393,356,266,979,265,730,982,722,358,338,493,548,0,294,737,0,3,0,309,0,0,382,0,0,271,0,0,383,0,717,535,704,227,0,33,17,384,9,385,0,386,0,387,-382,0,388,0,0,325,34,35,389,715,382,36,390,321,341,62,383,340,287,288,704,22,320,33,17,384,393,385,442,386,337,387,562,1e3,388,32,31,966,34,35,389,823,657,36,390,656,821,62,703,711,287,288,561,822,825,717,535,695,393,747,749,693,759,758,752,767,945,824,706,700,712,699,698,658,0,263,262,559,558,382,556,554,551,398,399,383,550,717,535,704,546,545,33,17,384,543,385,536,386,71,387,933,932,388,30,65,731,34,35,389,274,724,36,390,830,734,62,663,662,287,288,-32766,-32766,-32766,733,732,934,393,665,664,756,555,691,1041,1001,994,1006,1011,1014,757,1043,-32766,654,-32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767,655,1044,717,535,-446,926,348,343,268,237,236,235,234,218,217,132,129,-426,-425,-424,123,20,23,70,69,29,37,64,68,66,67,-448,0,15,19,250,910,296,-217,467,484,909,472,528,913,11,964,955,-215,525,379,375,373,371,14,13,12,-214,0,-393,0,1005,1039,992,993,963,0,981],r.Parser.prototype.yycheck=[2,3,4,5,6,13,8,9,10,11,12,0,15,16,17,18,19,20,21,22,23,24,25,26,27,8,9,10,50,51,52,7,54,7,79,8,9,10,8,9,10,77,7,13,66,28,7,30,31,32,33,34,54,56,57,28,8,30,31,32,33,34,35,35,109,1,68,69,70,71,72,73,74,118,7,77,112,113,114,115,116,117,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,7,129,130,131,132,133,134,135,136,137,2,3,4,5,6,143,144,145,152,11,12,7,14,41,42,43,44,45,46,47,48,49,109,7,67,112,113,114,115,116,117,118,8,9,10,79,79,79,82,147,83,82,67,28,152,47,48,102,103,7,7,53,28,55,56,57,58,59,60,61,62,63,64,65,1,67,68,69,70,112,8,9,10,75,76,77,148,79,13,7,67,83,8,9,10,1,129,130,13,79,28,146,30,31,32,33,140,141,139,29,102,7,28,128,30,31,32,149,151,77,112,79,80,156,156,15,28,142,120,121,146,77,112,149,149,15,151,129,130,15,132,133,134,135,136,137,138,15,67,67,77,143,144,145,146,130,131,7,7,151,15,153,148,155,156,71,72,73,74,0,1,77,77,150,67,81,156,152,84,85,86,87,88,89,90,91,92,93,29,95,96,97,98,99,100,101,102,143,104,105,146,148,108,15,150,111,112,113,114,128,128,7,7,119,67,67,122,123,124,125,7,67,149,142,142,8,9,10,130,131,149,149,151,79,152,128,7,83,143,7,71,146,148,149,150,28,77,30,31,142,81,7,148,84,85,86,149,88,7,90,35,92,7,33,95,7,112,7,99,100,101,102,103,104,105,128,128,108,109,1,111,112,113,114,130,8,9,10,119,142,79,122,123,124,125,15,149,149,148,29,8,9,10,152,29,151,54,29,149,79,156,15,143,47,48,49,29,148,149,150,28,79,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,29,54,29,1,71,67,8,9,29,112,77,152,152,66,81,35,148,84,85,86,123,88,156,90,35,92,35,147,95,72,73,29,99,100,101,1,152,104,105,152,35,108,72,73,111,112,97,98,102,103,66,152,119,156,102,103,106,107,152,67,154,74,152,29,154,152,128,152,78,130,131,148,149,71,148,149,148,149,148,77,77,148,149,81,77,77,84,85,86,77,88,77,90,77,92,77,77,95,77,77,77,99,100,101,1,71,104,105,79,79,108,77,79,111,112,81,79,82,84,85,86,119,88,82,90,86,92,87,96,95,94,89,29,99,100,101,1,91,104,105,93,96,108,94,94,111,112,94,110,123,148,149,109,119,102,127,139,126,147,139,150,146,149,154,29,-1,142,123,-1,142,-1,146,-1,-1,71,-1,-1,126,-1,-1,77,-1,148,149,81,35,-1,84,85,86,142,88,-1,90,-1,92,142,-1,95,-1,-1,146,99,100,101,1,71,104,105,146,146,108,77,146,111,112,81,67,146,84,85,86,119,88,146,90,149,92,148,79,95,148,148,83,99,100,101,148,148,104,105,148,148,108,148,148,111,112,148,148,148,148,149,148,119,148,148,148,148,148,148,148,112,148,148,148,148,148,148,148,-1,149,149,149,149,71,149,149,149,129,130,77,149,148,149,81,149,149,84,85,86,149,88,149,90,149,92,150,150,95,151,151,150,99,100,101,156,150,104,105,150,150,108,150,150,111,112,8,9,10,150,150,150,119,150,150,150,150,150,150,150,150,150,150,150,150,150,28,150,30,31,32,33,34,35,36,37,38,39,40,150,150,148,149,151,153,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,-1,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,-1,153,-1,154,154,154,154,154,-1,155],r.Parser.prototype.yybase=[0,220,295,94,180,560,-2,-2,-2,-2,-36,473,574,606,574,505,404,675,675,675,28,351,462,462,462,461,396,476,451,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,401,64,201,568,704,713,708,702,714,520,706,705,211,650,651,450,652,653,654,655,709,480,703,712,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,48,30,469,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,160,160,160,343,210,208,198,17,233,27,780,780,780,780,780,108,108,108,108,621,621,93,280,280,280,280,280,280,280,280,280,280,280,632,641,642,643,392,392,151,151,151,151,368,-45,146,224,224,95,410,491,733,199,199,111,207,-22,-22,-22,81,506,92,92,233,233,273,233,423,423,423,221,221,221,221,221,110,221,221,221,617,512,168,516,647,397,503,656,274,381,377,538,535,337,523,337,421,441,428,525,337,337,285,401,394,378,567,474,339,564,140,179,409,399,384,594,561,711,330,710,358,149,378,378,378,370,593,548,355,-8,646,484,277,417,386,645,635,230,634,276,331,356,565,485,485,485,485,485,485,460,485,483,691,691,478,501,460,696,460,485,691,460,460,502,485,522,522,483,508,499,691,691,499,478,460,571,551,514,482,413,413,514,460,413,501,413,11,697,699,444,700,695,698,676,694,493,615,497,515,684,683,693,479,489,620,692,549,592,487,246,314,498,463,689,523,486,455,455,455,463,687,455,455,455,455,455,455,455,455,732,24,495,510,591,590,589,406,588,496,524,422,599,488,549,549,649,727,673,490,682,716,690,555,119,271,681,648,543,492,534,680,598,246,715,494,672,549,671,455,674,701,730,731,688,728,722,152,526,587,178,729,659,596,595,554,725,707,721,720,178,576,511,717,518,677,504,678,613,258,657,686,584,724,723,726,583,582,609,608,250,236,685,442,458,517,581,500,628,604,679,580,579,623,619,718,521,486,519,509,507,513,600,618,719,206,578,586,573,481,572,631,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,134,-2,-2,-2,0,0,0,0,-2,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,-3,418,418,-3,418,418,418,418,418,418,-22,-22,-22,-22,221,221,221,221,221,221,221,221,221,221,221,221,221,221,49,49,49,49,-22,-22,221,221,221,221,221,49,221,221,221,92,221,92,92,337,337,0,0,0,0,0,485,92,0,0,0,0,0,0,485,485,485,0,0,0,0,0,485,0,0,0,337,92,0,420,420,178,420,420,0,0,0,485,485,0,508,0,0,0,0,691,0,0,0,0,0,455,119,682,0,39,0,0,0,0,0,490,39,26,0,26,0,0,455,455,455,0,490,490,0,0,67,490,0,0,0,67,35,0,35,0,0,0,178],r.Parser.prototype.yydefault=[3,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,468,468,468,32767,32767,32767,32767,285,460,285,285,32767,419,419,419,419,419,419,419,460,32767,32767,32767,32767,32767,364,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,465,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,347,348,350,351,284,420,237,464,283,116,246,239,191,282,223,119,312,365,314,363,367,313,290,294,295,296,297,298,299,300,301,302,303,304,305,288,289,366,344,343,342,310,311,287,315,317,287,316,333,334,331,332,335,336,337,338,339,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,269,269,269,269,324,325,229,229,229,229,32767,270,32767,229,32767,32767,32767,32767,32767,32767,32767,413,341,319,320,318,32767,392,32767,394,307,309,387,291,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,389,421,421,32767,32767,32767,381,32767,159,210,212,397,32767,32767,32767,32767,32767,329,32767,32767,32767,32767,32767,32767,474,32767,32767,32767,32767,32767,421,32767,32767,32767,321,322,323,32767,32767,32767,421,421,32767,32767,421,32767,421,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,163,32767,32767,395,395,32767,32767,163,390,163,32767,32767,163,163,176,32767,174,174,32767,32767,178,32767,435,178,32767,163,196,196,373,165,231,231,373,163,231,32767,231,32767,32767,32767,82,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,383,32767,32767,32767,401,32767,414,433,381,32767,327,328,330,32767,423,352,353,354,355,356,357,358,360,32767,461,386,32767,32767,32767,32767,32767,32767,84,108,245,32767,473,84,384,32767,473,32767,32767,32767,32767,32767,32767,286,32767,32767,32767,84,32767,84,32767,32767,457,32767,32767,421,385,32767,326,398,439,32767,32767,422,32767,32767,218,84,32767,177,32767,32767,32767,32767,32767,32767,401,32767,32767,179,32767,32767,421,32767,32767,32767,32767,32767,281,32767,32767,32767,32767,32767,421,32767,32767,32767,32767,222,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,82,60,32767,263,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,121,121,3,3,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,248,154,248,204,248,248,207,196,196,255],r.Parser.prototype.yygoto=[163,163,135,135,135,146,148,179,164,161,145,161,161,161,162,162,162,162,162,162,162,145,157,158,159,160,176,174,177,410,411,299,412,415,416,417,418,419,420,421,422,857,136,137,138,139,140,141,142,143,144,147,173,175,178,195,198,199,201,202,204,205,206,207,208,209,210,211,212,213,232,233,251,252,253,316,317,318,462,180,181,182,183,184,185,186,187,188,189,190,191,192,193,149,194,150,165,166,167,196,168,151,152,153,169,154,197,133,170,155,171,172,156,521,200,257,246,464,432,687,649,278,481,482,527,200,437,437,437,766,5,746,650,557,437,426,775,770,428,431,444,465,466,468,483,279,651,336,450,453,437,560,485,487,508,511,763,516,517,777,524,762,526,532,773,534,480,480,965,965,965,965,965,965,965,965,965,965,965,965,413,413,413,413,413,413,413,413,413,413,413,413,413,413,942,502,478,496,512,456,298,437,437,451,471,437,437,674,437,229,456,230,231,463,828,533,681,438,513,826,461,475,460,414,414,414,414,414,414,414,414,414,414,414,414,414,414,301,674,674,443,454,1033,1033,1034,1034,425,531,425,708,750,800,457,372,1033,943,1034,1026,300,1018,497,8,313,904,796,944,996,785,789,1007,285,670,1036,329,307,310,804,668,544,332,935,940,366,807,678,477,377,754,844,0,667,667,675,675,675,677,0,666,323,498,328,312,312,258,259,283,459,261,322,284,326,486,280,281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,790,790,790,790,946,0,946,790,790,1004,790,1004,0,0,0,0,836,0,1015,1015,0,0,0,0,0,0,0,0,0,0,0,744,744,744,720,744,0,739,745,721,780,780,1023,0,0,1002,0,0,0,0,0,0,0,0,0,0,0,0,806,0,806,0,0,0,0,1008,1009],r.Parser.prototype.yygcheck=[23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,52,45,112,112,80,8,10,10,64,55,55,55,45,8,8,8,10,92,10,11,10,8,10,10,10,38,38,38,38,38,38,62,62,12,62,28,8,8,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,70,70,70,70,70,70,70,70,70,70,70,70,70,70,113,113,113,113,113,113,113,113,113,113,113,113,113,113,76,56,35,35,56,69,56,8,8,8,8,8,8,19,8,60,69,60,60,7,7,7,25,8,7,7,2,2,8,115,115,115,115,115,115,115,115,115,115,115,115,115,115,53,19,19,53,53,123,123,124,124,109,5,109,44,29,78,114,53,123,76,124,122,41,120,43,53,42,96,74,76,76,72,75,117,14,21,123,18,9,13,79,20,66,17,102,104,58,81,22,59,100,63,94,-1,19,19,19,19,19,19,-1,19,45,45,45,45,45,45,45,45,45,45,45,45,45,45,64,64,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,52,52,52,52,52,-1,52,52,52,80,52,80,-1,-1,-1,-1,92,-1,80,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,52,52,52,52,52,-1,52,52,52,69,69,69,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,80,-1,-1,-1,-1,80,80],r.Parser.prototype.yygbase=[0,0,-317,0,0,237,0,210,-136,4,118,130,144,-10,16,0,0,-59,10,-47,-9,7,-77,-20,0,209,0,0,-388,234,0,0,0,0,0,165,0,0,103,0,0,225,44,45,235,84,0,0,0,0,0,0,109,-115,0,-113,-179,0,-78,-81,-347,0,-122,-80,-249,0,-19,0,0,169,-48,0,26,0,22,24,-99,0,230,-13,114,-79,0,0,0,0,0,0,0,0,0,0,120,0,-90,0,23,0,0,0,-89,0,-67,0,-69,0,0,0,0,8,0,0,-140,-34,229,9,0,21,0,0,218,0,233,-3,-1,0],r.Parser.prototype.yygdefault=[-32768,380,565,2,566,637,645,504,400,433,748,688,689,303,342,401,302,330,324,676,669,671,679,134,333,682,1,684,439,716,291,692,292,507,694,446,696,697,427,304,305,447,311,479,707,203,308,709,290,710,719,335,293,510,489,469,501,402,363,476,228,455,473,753,277,761,549,769,772,403,404,470,784,368,794,788,960,319,799,805,991,808,811,349,331,327,815,816,4,820,522,523,835,239,843,856,347,923,925,441,374,936,360,334,939,995,354,405,364,952,260,282,245,406,423,249,407,365,998,314,1019,424,1027,1035,275,474],r.Parser.prototype.yylhs=[0,1,3,3,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,8,8,9,4,4,4,4,4,4,4,4,4,4,4,14,14,15,15,15,15,17,17,13,13,18,18,19,19,20,20,21,21,16,16,22,24,24,25,26,26,28,27,27,27,27,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,10,10,48,48,51,51,50,49,49,42,42,53,53,54,54,11,12,12,12,57,57,57,58,58,61,61,59,59,62,62,36,36,44,44,47,47,47,46,46,63,37,37,37,37,64,64,65,65,66,66,34,34,30,30,67,32,32,68,31,31,33,33,43,43,43,43,55,55,71,71,72,72,74,74,75,75,75,73,73,56,56,76,76,77,77,78,78,78,39,39,79,40,40,81,81,60,60,82,82,82,82,87,87,88,88,89,89,89,89,89,90,91,91,86,86,83,83,85,85,93,93,92,92,92,92,92,92,84,84,94,94,41,41,35,35,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,101,95,95,100,100,103,103,104,105,105,105,109,109,52,52,52,96,96,107,107,97,97,99,99,99,102,102,113,113,70,115,115,115,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,38,38,111,111,111,106,106,106,116,116,116,116,116,116,45,45,45,80,80,80,118,110,110,110,110,110,110,108,108,108,117,117,117,117,69,119,119,120,120,120,120,120,114,121,121,122,122,122,122,122,112,112,112,112,124,123,123,123,123,123,123,123,125,125,125],r.Parser.prototype.yylen=[1,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,3,5,4,3,4,2,3,1,1,7,8,6,7,3,1,3,1,3,1,1,3,1,2,1,2,3,1,3,3,1,3,2,0,1,1,1,1,1,3,7,10,5,7,9,5,3,3,3,3,3,3,1,2,5,7,9,5,6,3,3,2,2,1,1,1,0,2,1,3,8,0,4,1,3,0,1,0,1,10,7,6,5,1,2,2,0,2,0,2,0,2,1,3,1,4,1,4,1,1,4,1,3,3,3,4,4,5,0,2,4,3,1,1,1,4,0,2,5,0,2,6,0,2,0,3,1,2,1,1,1,0,1,3,4,6,1,2,1,1,1,0,1,0,2,2,3,1,3,1,2,2,3,1,1,3,1,1,3,2,0,3,4,9,3,1,3,0,2,4,5,4,4,4,3,1,1,1,3,1,1,0,1,1,2,1,1,1,1,1,1,1,3,1,3,3,1,0,1,1,3,3,3,4,1,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,5,4,3,4,4,2,2,4,2,2,2,2,2,2,2,2,2,2,2,1,3,2,1,2,4,2,10,11,7,3,2,0,4,1,3,2,2,2,4,1,1,1,2,3,1,1,1,1,0,3,0,1,1,0,1,1,3,3,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,3,3,0,1,1,3,1,1,3,1,1,4,4,4,1,4,1,1,3,1,4,2,3,1,4,4,3,3,3,1,3,1,1,3,1,1,4,3,1,1,1,3,3,0,1,3,1,3,1,4,2,0,2,2,1,2,1,1,4,3,3,3,6,3,1,1,1],t.PHP=r}),ace.define(\"ace/mode/php_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"./php/php\").PHP,o=t.PhpWorker=function(e){i.call(this,e),this.setTimeout(500)};r.inherits(o,i),function(){this.setOptions=function(e){this.inlinePhp=e&&e.inline},this.onUpdate=function(){var e=this.doc.getValue(),t=[];this.inlinePhp&&(e=\"<?\"+e+\"?>\");var n=s.Lexer(e,{short_open_tag:1});try{new s.Parser(n)}catch(r){t.push({row:r.line-1,column:null,text:r.message.charAt(0).toUpperCase()+r.message.substring(1),type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),ace.define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/worker-xml.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/xml/sax\",[],function(e,t,n){function d(){}function v(e,t,n,r,i){function s(e){if(e>65535){e-=65536;var t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function o(e){var t=e.slice(1,-1);return t in n?n[t]:t.charAt(0)===\"#\"?s(parseInt(t.substr(1).replace(\"x\",\"0x\"))):(i.error(\"entity not found:\"+e),e)}function u(t){var n=e.substring(v,t).replace(/&#?\\w+;/g,o);h&&a(v),r.characters(n,0,t-v),v=t}function a(t,n){while(t>=l&&(n=c.exec(e)))f=n.index,l=f+n[0].length,h.lineNumber++;h.columnNumber=t-f+1}var f=0,l=0,c=/.+(?:\\r\\n?|\\n)|.*$/g,h=r.locator,p=[{currentNSMap:t}],d={},v=0;for(;;){var E=e.indexOf(\"<\",v);if(E<0){if(!e.substr(v).match(/^\\s*$/)){var N=r.document,C=N.createTextNode(e.substr(v));N.appendChild(C),r.currentElement=C}return}E>v&&u(E);switch(e.charAt(E+1)){case\"/\":var k=e.indexOf(\">\",E+3),L=e.substring(E+2,k),A;if(!(p.length>1)){i.fatalError(\"end tag name not found for: \"+L);break}A=p.pop();var O=A.localNSMap;A.tagName!=L&&i.fatalError(\"end tag name: \"+L+\" does not match the current start tagName: \"+A.tagName),r.endElement(A.uri,A.localName,L);if(O)for(var M in O)r.endPrefixMapping(M);k++;break;case\"?\":h&&a(E),k=x(e,E,r);break;case\"!\":h&&a(E),k=S(e,E,r,i);break;default:try{h&&a(E);var _=new T,k=g(e,E,_,o,i),D=_.length;if(D&&h){var P=m(h,{});for(var E=0;E<D;E++){var H=_[E];a(H.offset),H.offset=m(h,{})}m(P,h)}!_.closed&&w(e,k,_.tagName,d)&&(_.closed=!0,n.nbsp||i.warning(\"unclosed xml attribute\")),y(_,r,p),_.uri===\"http://www.w3.org/1999/xhtml\"&&!_.closed?k=b(e,k,_.tagName,o,r):k++}catch(B){i.error(\"element parse error: \"+B),k=-1}}k<0?u(E+1):v=k}}function m(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function g(e,t,n,r,i){var s,d,v=++t,m=o;for(;;){var g=e.charAt(v);switch(g){case\"=\":if(m===u)s=e.slice(t,v),m=f;else{if(m!==a)throw new Error(\"attribute equal must after attrName\");m=f}break;case\"'\":case'\"':if(m===f){t=v+1,v=e.indexOf(g,t);if(!(v>0))throw new Error(\"attribute value no end '\"+g+\"' match\");d=e.slice(t,v).replace(/&#?\\w+;/g,r),n.add(s,d,t-1),m=c}else{if(m!=l)throw new Error('attribute value must after \"=\"');d=e.slice(t,v).replace(/&#?\\w+;/g,r),n.add(s,d,t),i.warning('attribute \"'+s+'\" missed start quot('+g+\")!!\"),t=v+1,m=c}break;case\"/\":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:m=p,n.closed=!0;case l:case u:case a:break;default:throw new Error(\"attribute invalid close char('/')\")}break;case\"\":i.error(\"unexpected end of input\");case\">\":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:break;case l:case u:d=e.slice(t,v),d.slice(-1)===\"/\"&&(n.closed=!0,d=d.slice(0,-1));case a:m===a&&(d=s),m==l?(i.warning('attribute \"'+d+'\" missed quot(\")!!'),n.add(s,d.replace(/&#?\\w+;/g,r),t)):(i.warning('attribute \"'+d+'\" missed value!! \"'+d+'\" instead!!'),n.add(d,d,t));break;case f:throw new Error(\"attribute value missed!!\")}return v;case\"\\u0080\":g=\" \";default:if(g<=\" \")switch(m){case o:n.setTagName(e.slice(t,v)),m=h;break;case u:s=e.slice(t,v),m=a;break;case l:var d=e.slice(t,v).replace(/&#?\\w+;/g,r);i.warning('attribute \"'+d+'\" missed quot(\")!!'),n.add(s,d,t);case c:m=h}else switch(m){case a:i.warning('attribute \"'+s+'\" missed value!! \"'+s+'\" instead!!'),n.add(s,s,t),t=v,m=u;break;case c:i.warning('attribute space is required\"'+s+'\"!!');case h:m=u,t=v;break;case f:m=l,t=v;break;case p:throw new Error(\"elements closed character '/' and '>' must be connected to\")}}v++}}function y(e,t,n){var r=e.tagName,i=null,s=n[n.length-1].currentNSMap,o=e.length;while(o--){var u=e[o],a=u.qName,f=u.value,l=a.indexOf(\":\");if(l>0)var c=u.prefix=a.slice(0,l),h=a.slice(l+1),p=c===\"xmlns\"&&h;else h=a,c=null,p=a===\"xmlns\"&&\"\";u.localName=h,p!==!1&&(i==null&&(i={},E(s,s={})),s[p]=i[p]=f,u.uri=\"http://www.w3.org/2000/xmlns/\",t.startPrefixMapping(p,f))}var o=e.length;while(o--){u=e[o];var c=u.prefix;c&&(c===\"xml\"&&(u.uri=\"http://www.w3.org/XML/1998/namespace\"),c!==\"xmlns\"&&(u.uri=s[c]))}var l=r.indexOf(\":\");l>0?(c=e.prefix=r.slice(0,l),h=e.localName=r.slice(l+1)):(c=null,h=e.localName=r);var d=e.uri=s[c||\"\"];t.startElement(d,h,r,e);if(e.closed){t.endElement(d,h,r);if(i)for(c in i)t.endPrefixMapping(c)}else e.currentNSMap=s,e.localNSMap=i,n.push(e)}function b(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var s=e.indexOf(\"</\"+n+\">\",t),o=e.substring(t+1,s);if(/[&<]/.test(o))return/^script$/i.test(n)?(i.characters(o,0,o.length),s):(o=o.replace(/&#?\\w+;/g,r),i.characters(o,0,o.length),s)}return t+1}function w(e,t,n,r){var i=r[n];return i==null&&(i=r[n]=e.lastIndexOf(\"</\"+n+\">\")),i<t}function E(e,t){for(var n in e)t[n]=e[n]}function S(e,t,n,r){var i=e.charAt(t+2);switch(i){case\"-\":if(e.charAt(t+3)===\"-\"){var s=e.indexOf(\"-->\",t+4);return s>t?(n.comment(e,t+4,s-t-4),s+3):(r.error(\"Unclosed comment\"),-1)}return-1;default:if(e.substr(t+3,6)==\"CDATA[\"){var s=e.indexOf(\"]]>\",t+9);return n.startCDATA(),n.characters(e,t+9,s-t-9),n.endCDATA(),s+3}var o=C(e,t),u=o.length;if(u>1&&/!doctype/i.test(o[0][0])){var a=o[1][0],f=u>3&&/^public$/i.test(o[2][0])&&o[3][0],l=u>4&&o[4][0],c=o[u-1];return n.startDTD(a,f&&f.replace(/^(['\"])(.*?)\\1$/,\"$2\"),l&&l.replace(/^(['\"])(.*?)\\1$/,\"$2\")),n.endDTD(),c.index+c[0].length}}return-1}function x(e,t,n){var r=e.indexOf(\"?>\",t);if(r){var i=e.substring(t,r).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);if(i){var s=i[0].length;return n.processingInstruction(i[1],i[2]),r+2}return-1}return-1}function T(e){}function N(e,t){return e.__proto__=t,e}function C(e,t){var n,r=[],i=/'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;i.lastIndex=t,i.exec(e);while(n=i.exec(e)){r.push(n);if(n[1])return r}}var r=/[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/,i=new RegExp(\"[\\\\-\\\\.0-9\"+r.source.slice(1,-1)+\"\\u00b7\\u0300-\\u036f\\\\ux203F-\\u2040]\"),s=new RegExp(\"^\"+r.source+i.source+\"*(?::\"+r.source+i.source+\"*)?$\"),o=0,u=1,a=2,f=3,l=4,c=5,h=6,p=7;return d.prototype={parse:function(e,t,n){var r=this.domBuilder;r.startDocument(),E(t,t={}),v(e,t,n,r,this.errorHandler),r.endDocument()}},T.prototype={setTagName:function(e){if(!s.test(e))throw new Error(\"invalid tagName:\"+e);this.tagName=e},add:function(e,t,n){if(!s.test(e))throw new Error(\"invalid attribute:\"+e);this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getOffset:function(e){return this[e].offset},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},N({},N.prototype)instanceof N||(N=function(e,t){function n(){}n.prototype=t,n=new n;for(t in e)n[t]=e[t];return n}),d}),ace.define(\"ace/mode/xml/dom\",[],function(e,t,n){function r(e,t){for(var n in e)t[n]=e[n]}function i(e,t){var n=function(){},i=e.prototype;if(Object.create){var s=Object.create(t.prototype);i.__proto__=s}i instanceof t||(n.prototype=t.prototype,n=new n,r(i,n),e.prototype=i=n),i.constructor!=e&&(typeof e!=\"function\"&&console.error(\"unknown Class:\"+e),i.constructor=e)}function B(e,t){if(t instanceof Error)var n=t;else n=this,Error.call(this,w[e]),this.message=w[e],Error.captureStackTrace&&Error.captureStackTrace(this,B);return n.code=e,t&&(this.message=this.message+\": \"+t),n}function j(){}function F(e,t){this._node=e,this._refresh=t,I(this)}function I(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!=t){var n=e._refresh(e._node);gt(e,\"length\",n.length),r(n,e),e._inc=t}}function q(){}function R(e,t){var n=e.length;while(n--)if(e[n]===t)return n}function U(e,t,n,r){r?t[R(t,r)]=n:t[t.length++]=n;if(e){n.ownerElement=e;var i=e.ownerDocument;i&&(r&&Q(i,e,r),K(i,e,n))}}function z(e,t,n){var r=R(t,n);if(!(r>=0))throw new B(L,new Error);var i=t.length-1;while(r<i)t[r]=t[++r];t.length=i;if(e){var s=e.ownerDocument;s&&(Q(s,e,n),n.ownerElement=null)}}function W(e){this._features={};if(e)for(var t in e)this._features=e[t]}function X(){}function V(e){return e==\"<\"&&\"&lt;\"||e==\">\"&&\"&gt;\"||e==\"&\"&&\"&amp;\"||e=='\"'&&\"&quot;\"||\"&#\"+e.charCodeAt()+\";\"}function $(e,t){if(t(e))return!0;if(e=e.firstChild)do if($(e,t))return!0;while(e=e.nextSibling)}function J(){}function K(e,t,n){e&&e._inc++;var r=n.namespaceURI;r==\"http://www.w3.org/2000/xmlns/\"&&(t._nsMap[n.prefix?n.localName:\"\"]=n.value)}function Q(e,t,n,r){e&&e._inc++;var i=n.namespaceURI;i==\"http://www.w3.org/2000/xmlns/\"&&delete t._nsMap[n.prefix?n.localName:\"\"]}function G(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{var i=t.firstChild,s=0;while(i)r[s++]=i,i=i.nextSibling;r.length=s}}}function Y(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,G(e.ownerDocument,e),t}function Z(e,t,n){var r=t.parentNode;r&&r.removeChild(t);if(t.nodeType===g){var i=t.firstChild;if(i==null)return t;var s=t.lastChild}else i=s=t;var o=n?n.previousSibling:e.lastChild;i.previousSibling=o,s.nextSibling=n,o?o.nextSibling=i:e.firstChild=i,n==null?e.lastChild=s:n.previousSibling=s;do i.parentNode=e;while(i!==s&&(i=i.nextSibling));return G(e.ownerDocument||e,e),t.nodeType==g&&(t.firstChild=t.lastChild=null),t}function et(e,t){var n=t.parentNode;if(n){var r=e.lastChild;n.removeChild(t);var r=e.lastChild}var r=e.lastChild;return t.parentNode=e,t.previousSibling=r,t.nextSibling=null,r?r.nextSibling=t:e.firstChild=t,e.lastChild=t,G(e.ownerDocument,e,t),t}function tt(){this._nsMap={}}function nt(){}function rt(){}function it(){}function st(){}function ot(){}function ut(){}function at(){}function ft(){}function lt(){}function ct(){}function ht(){}function pt(){}function dt(e,t){switch(e.nodeType){case u:var n=e.attributes,r=n.length,i=e.firstChild,o=e.tagName,h=s===e.namespaceURI;t.push(\"<\",o);for(var y=0;y<r;y++)dt(n.item(y),t);if(i||h&&!/^(?:meta|link|img|br|hr|input|button)$/i.test(o)){t.push(\">\");if(h&&/^script$/i.test(o))i&&t.push(i.data);else while(i)dt(i,t),i=i.nextSibling;t.push(\"</\",o,\">\")}else t.push(\"/>\");return;case v:case g:var i=e.firstChild;while(i)dt(i,t),i=i.nextSibling;return;case a:return t.push(\" \",e.name,'=\"',e.value.replace(/[<&\"]/g,V),'\"');case f:return t.push(e.data.replace(/[<&]/g,V));case l:return t.push(\"<![CDATA[\",e.data,\"]]>\");case d:return t.push(\"<!--\",e.data,\"-->\");case m:var b=e.publicId,w=e.systemId;t.push(\"<!DOCTYPE \",e.name);if(b)t.push(' PUBLIC \"',b),w&&w!=\".\"&&t.push('\" \"',w),t.push('\">');else if(w&&w!=\".\")t.push(' SYSTEM \"',w,'\">');else{var E=e.internalSubset;E&&t.push(\" [\",E,\"]\"),t.push(\">\")}return;case p:return t.push(\"<?\",e.target,\" \",e.data,\"?>\");case c:return t.push(\"&\",e.nodeName,\";\");default:t.push(\"??\",e.nodeName)}}function vt(e,t,n){var r;switch(t.nodeType){case u:r=t.cloneNode(!1),r.ownerDocument=e;case g:break;case a:n=!0}r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null;if(n){var i=t.firstChild;while(i)r.appendChild(vt(e,i,n)),i=i.nextSibling}return r}function mt(e,t,n){var r=new t.constructor;for(var i in t){var s=t[i];typeof s!=\"object\"&&s!=r[i]&&(r[i]=s)}t.childNodes&&(r.childNodes=new j),r.ownerDocument=e;switch(r.nodeType){case u:var o=t.attributes,f=r.attributes=new q,l=o.length;f._ownerElement=r;for(var c=0;c<l;c++)r.setAttributeNode(mt(e,o.item(c),!0));break;case a:n=!0}if(n){var h=t.firstChild;while(h)r.appendChild(mt(e,h,n)),h=h.nextSibling}return r}function gt(e,t,n){e[t]=n}function yt(e){switch(e.nodeType){case 1:case 11:var t=[];e=e.firstChild;while(e)e.nodeType!==7&&e.nodeType!==8&&t.push(yt(e)),e=e.nextSibling;return t.join(\"\");default:return e.nodeValue}}var s=\"http://www.w3.org/1999/xhtml\",o={},u=o.ELEMENT_NODE=1,a=o.ATTRIBUTE_NODE=2,f=o.TEXT_NODE=3,l=o.CDATA_SECTION_NODE=4,c=o.ENTITY_REFERENCE_NODE=5,h=o.ENTITY_NODE=6,p=o.PROCESSING_INSTRUCTION_NODE=7,d=o.COMMENT_NODE=8,v=o.DOCUMENT_NODE=9,m=o.DOCUMENT_TYPE_NODE=10,g=o.DOCUMENT_FRAGMENT_NODE=11,y=o.NOTATION_NODE=12,b={},w={},E=b.INDEX_SIZE_ERR=(w[1]=\"Index size error\",1),S=b.DOMSTRING_SIZE_ERR=(w[2]=\"DOMString size error\",2),x=b.HIERARCHY_REQUEST_ERR=(w[3]=\"Hierarchy request error\",3),T=b.WRONG_DOCUMENT_ERR=(w[4]=\"Wrong document\",4),N=b.INVALID_CHARACTER_ERR=(w[5]=\"Invalid character\",5),C=b.NO_DATA_ALLOWED_ERR=(w[6]=\"No data allowed\",6),k=b.NO_MODIFICATION_ALLOWED_ERR=(w[7]=\"No modification allowed\",7),L=b.NOT_FOUND_ERR=(w[8]=\"Not found\",8),A=b.NOT_SUPPORTED_ERR=(w[9]=\"Not supported\",9),O=b.INUSE_ATTRIBUTE_ERR=(w[10]=\"Attribute in use\",10),M=b.INVALID_STATE_ERR=(w[11]=\"Invalid state\",11),_=b.SYNTAX_ERR=(w[12]=\"Syntax error\",12),D=b.INVALID_MODIFICATION_ERR=(w[13]=\"Invalid modification\",13),P=b.NAMESPACE_ERR=(w[14]=\"Invalid namespace\",14),H=b.INVALID_ACCESS_ERR=(w[15]=\"Invalid access\",15);B.prototype=Error.prototype,r(b,B),j.prototype={length:0,item:function(e){return this[e]||null}},F.prototype.item=function(e){return I(this),this[e]},i(F,j),q.prototype={length:0,item:j.prototype.item,getNamedItem:function(e){var t=this.length;while(t--){var n=this[t];if(n.nodeName==e)return n}},setNamedItem:function(e){var t=e.ownerElement;if(t&&t!=this._ownerElement)throw new B(O);var n=this.getNamedItem(e.nodeName);return U(this._ownerElement,this,e,n),n},setNamedItemNS:function(e){var t=e.ownerElement,n;if(t&&t!=this._ownerElement)throw new B(O);return n=this.getNamedItemNS(e.namespaceURI,e.localName),U(this._ownerElement,this,e,n),n},removeNamedItem:function(e){var t=this.getNamedItem(e);return z(this._ownerElement,this,t),t},removeNamedItemNS:function(e,t){var n=this.getNamedItemNS(e,t);return z(this._ownerElement,this,n),n},getNamedItemNS:function(e,t){var n=this.length;while(n--){var r=this[n];if(r.localName==t&&r.namespaceURI==e)return r}return null}},W.prototype={hasFeature:function(e,t){var n=this._features[e.toLowerCase()];return n&&(!t||t in n)?!0:!1},createDocument:function(e,t,n){var r=new J;r.implementation=this,r.childNodes=new j,r.doctype=n,n&&r.appendChild(n);if(t){var i=r.createElementNS(e,t);r.appendChild(i)}return r},createDocumentType:function(e,t,n){var r=new ut;return r.name=e,r.nodeName=e,r.publicId=t,r.systemId=n,r}},X.prototype={firstChild:null,lastChild:null,previousSibling:null,nextSibling:null,attributes:null,parentNode:null,childNodes:null,ownerDocument:null,nodeValue:null,namespaceURI:null,prefix:null,localName:null,insertBefore:function(e,t){return Z(this,e,t)},replaceChild:function(e,t){this.insertBefore(e,t),t&&this.removeChild(t)},removeChild:function(e){return Y(this,e)},appendChild:function(e){return this.insertBefore(e,null)},hasChildNodes:function(){return this.firstChild!=null},cloneNode:function(e){return mt(this.ownerDocument||this,this,e)},normalize:function(){var e=this.firstChild;while(e){var t=e.nextSibling;t&&t.nodeType==f&&e.nodeType==f?(this.removeChild(t),e.appendData(t.data)):(e.normalize(),e=t)}},isSupported:function(e,t){return this.ownerDocument.implementation.hasFeature(e,t)},hasAttributes:function(){return this.attributes.length>0},lookupPrefix:function(e){var t=this;while(t){var n=t._nsMap;if(n)for(var r in n)if(n[r]==e)return r;t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){var t=this;while(t){var n=t._nsMap;if(n&&e in n)return n[e];t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){var t=this.lookupPrefix(e);return t==null}},r(o,X),r(o,X.prototype),J.prototype={nodeName:\"#document\",nodeType:v,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==g){var n=e.firstChild;while(n){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return this.documentElement==null&&e.nodeType==1&&(this.documentElement=e),Z(this,e,t),e.ownerDocument=this,e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),Y(this,e)},importNode:function(e,t){return vt(this,e,t)},getElementById:function(e){var t=null;return $(this.documentElement,function(n){if(n.nodeType==1&&n.getAttribute(\"id\")==e)return t=n,!0}),t},createElement:function(e){var t=new tt;t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.childNodes=new j;var n=t.attributes=new q;return n._ownerElement=t,t},createDocumentFragment:function(){var e=new ct;return e.ownerDocument=this,e.childNodes=new j,e},createTextNode:function(e){var t=new it;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new st;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ot;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new ht;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new nt;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new lt;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new tt,r=t.split(\":\"),i=n.attributes=new q;return n.childNodes=new j,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,i._ownerElement=n,n},createAttributeNS:function(e,t){var n=new nt,r=t.split(\":\");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},i(J,X),tt.prototype={nodeType:u,hasAttribute:function(e){return this.getAttributeNode(e)!=null},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||\"\"},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=\"\"+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===g?this.insertBefore(e,null):et(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return this.getAttributeNodeNS(e,t)!=null},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||\"\"},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=\"\"+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new F(this,function(t){var n=[];return $(t,function(r){r!==t&&r.nodeType==u&&(e===\"*\"||r.tagName==e)&&n.push(r)}),n})},getElementsByTagNameNS:function(e,t){return new F(this,function(n){var r=[];return $(n,function(i){i!==n&&i.nodeType===u&&(e===\"*\"||i.namespaceURI===e)&&(t===\"*\"||i.localName==t)&&r.push(i)}),r})}},J.prototype.getElementsByTagName=tt.prototype.getElementsByTagName,J.prototype.getElementsByTagNameNS=tt.prototype.getElementsByTagNameNS,i(tt,X),nt.prototype.nodeType=a,i(nt,X),rt.prototype={data:\"\",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(w[3])},deleteData:function(e,t){this.replaceData(e,t,\"\")},replaceData:function(e,t,n){var r=this.data.substring(0,e),i=this.data.substring(e+t);n=r+n+i,this.nodeValue=this.data=n,this.length=n.length}},i(rt,X),it.prototype={nodeName:\"#text\",nodeType:f,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},i(it,rt),st.prototype={nodeName:\"#comment\",nodeType:d},i(st,rt),ot.prototype={nodeName:\"#cdata-section\",nodeType:l},i(ot,rt),ut.prototype.nodeType=m,i(ut,X),at.prototype.nodeType=y,i(at,X),ft.prototype.nodeType=h,i(ft,X),lt.prototype.nodeType=c,i(lt,X),ct.prototype.nodeName=\"#document-fragment\",ct.prototype.nodeType=g,i(ct,X),ht.prototype.nodeType=p,i(ht,X),pt.prototype.serializeToString=function(e){var t=[];return dt(e,t),t.join(\"\")},X.prototype.toString=function(){return pt.prototype.serializeToString(this)};try{Object.defineProperty&&(Object.defineProperty(F.prototype,\"length\",{get:function(){return I(this),this.$$length}}),Object.defineProperty(X.prototype,\"textContent\",{get:function(){return yt(this)},set:function(e){switch(this.nodeType){case 1:case 11:while(this.firstChild)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=value,this.nodeValue=e}}}),gt=function(e,t,n){e[\"$$\"+t]=n})}catch(bt){}return W}),ace.define(\"ace/mode/xml/dom-parser\",[],function(e,t,n){\"use strict\";function s(e){this.options=e||{locator:{}}}function o(e,t,n){function s(t){var s=e[t];if(!s)if(i)s=e.length==2?function(n){e(t,n)}:e;else{var o=arguments.length;while(--o)if(s=e[arguments[o]])break}r[t]=s&&function(e){s(e+f(n),e,n)}||function(){}}if(!e){if(t instanceof u)return t;e=t}var r={},i=e instanceof Function;return n=n||{},s(\"warning\",\"warn\"),s(\"error\",\"warn\",\"warning\"),s(\"fatalError\",\"warn\",\"warning\",\"error\"),r}function u(){this.cdata=!1}function a(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function f(e){if(e)return\"\\n@\"+(e.systemId||\"\")+\"#[line:\"+e.lineNumber+\",col:\"+e.columnNumber+\"]\"}function l(e,t,n){return typeof e==\"string\"?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+\"\":e}function c(e,t){e.currentElement?e.currentElement.appendChild(t):e.document.appendChild(t)}var r=e(\"./sax\"),i=e(\"./dom\");return s.prototype.parseFromString=function(e,t){var n=this.options,i=new r,s=n.domBuilder||new u,a=n.errorHandler,f=n.locator,l=n.xmlns||{},c={lt:\"<\",gt:\">\",amp:\"&\",quot:'\"',apos:\"'\"};return f&&s.setDocumentLocator(f),i.errorHandler=o(a,s,f),i.domBuilder=n.domBuilder||s,/\\/x?html?$/.test(t)&&(c.nbsp=\"\\u00a0\",c.copy=\"\\u00a9\",l[\"\"]=\"http://www.w3.org/1999/xhtml\"),e?i.parse(e,l,c):i.errorHandler.error(\"invalid document source\"),s.document},u.prototype={startDocument:function(){this.document=(new i).createDocument(null,null,null),this.locator&&(this.document.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.document,s=i.createElementNS(e,n||t),o=r.length;c(this,s),this.currentElement=s,this.locator&&a(this.locator,s);for(var u=0;u<o;u++){var e=r.getURI(u),f=r.getValue(u),n=r.getQName(u),l=i.createAttributeNS(e,n);l.getOffset&&a(l.getOffset(1),l),l.value=l.nodeValue=f,s.setAttributeNode(l)}},endElement:function(e,t,n){var r=this.currentElement,i=r.tagName;this.currentElement=r.parentNode},startPrefixMapping:function(e,t){},endPrefixMapping:function(e){},processingInstruction:function(e,t){var n=this.document.createProcessingInstruction(e,t);this.locator&&a(this.locator,n),c(this,n)},ignorableWhitespace:function(e,t,n){},characters:function(e,t,n){e=l.apply(this,arguments);if(this.currentElement&&e){if(this.cdata){var r=this.document.createCDATASection(e);this.currentElement.appendChild(r)}else{var r=this.document.createTextNode(e);this.currentElement.appendChild(r)}this.locator&&a(this.locator,r)}},skippedEntity:function(e){},endDocument:function(){this.document.normalize()},setDocumentLocator:function(e){if(this.locator=e)e.lineNumber=0},comment:function(e,t,n){e=l.apply(this,arguments);var r=this.document.createComment(e);this.locator&&a(this.locator,r),c(this,r)},startCDATA:function(){this.cdata=!0},endCDATA:function(){this.cdata=!1},startDTD:function(e,t,n){var r=this.document.implementation;if(r&&r.createDocumentType){var i=r.createDocumentType(e,t,n);this.locator&&a(this.locator,i),c(this,i)}},warning:function(e){console.warn(e,f(this.locator))},error:function(e){console.error(e,f(this.locator))},fatalError:function(e){throw console.error(e,f(this.locator)),e}},\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(e){u.prototype[e]=function(){return null}}),{DOMParser:s}}),ace.define(\"ace/mode/xml_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./xml/dom-parser\").DOMParser,u=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.context=null};r.inherits(u,s),function(){this.setOptions=function(e){this.context=e.context},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return;var t=new o,n=[];t.options.errorHandler={fatalError:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"error\"})},error:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"error\"})},warning:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"warning\"})}},t.parseFromString(e),this.sender.emit(\"error\",n)}}.call(u.prototype)}),ace.define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-min-noconflict/worker-xquery.js",
    "content": "\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/xquery/xqlint\",[],function(e,t,n){n.exports=function r(t,n,i){function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(s)return s(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return o(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var s=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)o(i[u]);return o(i[0])}({\"/node_modules/xqlint/lib/compiler/errors.js\":[function(e,t,n){\"use strict\";var r=function(e,t,n,r,i){if(!t)throw new Error(i+\" code is missing.\");if(!n)throw new Error(i+\" message is missing.\");if(!r)throw new Error(i+\" position is missing.\");e.getCode=function(){return t},e.getMessage=function(){return n},e.getPos=function(){return r}},i={},s={};i.prototype=new Error,s.prototype=new Error,n.StaticError=i.prototype.constructor=function(e,t,n){r(this,e,t,n,\"Error\")},n.StaticWarning=s.prototype.constructor=function(e,t,n){r(this,e,t,n,\"Warning\")}},{}],\"/node_modules/xqlint/lib/compiler/handlers.js\":[function(e,t,n){\"use strict\";var r=e(\"../tree_ops\").TreeOps,i=e(\"./errors\"),s=i.StaticWarning;n.ModuleDecl=function(e,t,n){var i=\"\";return{NCName:function(e){i=r.flatten(e)},URILiteral:function(s){s=r.flatten(s),s=s.substring(1,s.length-1),e.apply(function(){t.moduleNamespace=s,t.addNamespace(s,i,n.pos,\"moduleDecl\")})}}},n.ModuleImport=function(e,t,n){var i=\"\",s;return{NCName:function(e){i=r.flatten(e)},URILiteral:function(o){if(s!==undefined)return;o=r.flatten(o),o=o.substring(1,o.length-1),s=o,e.apply(function(){t.importModule(o,i,n.pos)})}}},n.SchemaImport=function(e,t,n){var i=\"\",s;return{SchemaPrefix:function(t){var n=function(){this.NCName=function(e){i=r.flatten(e)}};e.visitChildren(t,new n)},URILiteral:function(o){if(s!==undefined)return;o=r.flatten(o),o=o.substring(1,o.length-1),s=o,e.apply(function(){t.addNamespace(o,i,n.pos,\"schema\")})}}},n.DefaultNamespaceDecl=function(e,t,n){var i=!1,o=\"\";return{TOKEN:function(e){i=i?!0:e.value===\"function\"},URILiteral:function(u){o=r.flatten(u),o=o.substring(1,o.length-1),i?t.defaultFunctionNamespace=o:(e.apply(function(){throw new s(\"W06\",\"Avoid default element namespace declarations.\",n.pos)}),t.defaultElementNamespace=o)}}},n.NamespaceDecl=function(e,t,n){var i=\"\";return{NCName:function(e){i=r.flatten(e)},URILiteral:function(s){s=r.flatten(s),s=s.substring(1,s.length-1),e.apply(function(){t.addNamespace(s,i,n.pos,\"declare\")})}}},n.VarHandler=function(e,t,n){var i=function(i){var s=r.flatten(i);e.apply(function(){var e=t.resolveQName(s,i.pos);t.addVariable(e,n.name,i.pos)})};return{ExprSingle:function(){return!0},VarValue:function(){return!0},VarDefaultValue:function(){return!0},VarName:i,EQName:i}},n.VarRefHandler=function(e,t,n){return{VarName:function(i){var s=r.flatten(i);e.apply(function(){var e=t.resolveQName(s,n.pos);e.uri!==\"\"&&(t.root.namespaces[e.uri].used=!0),t.addVarRef(e,i.pos)})}}}},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\"}],\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\":[function(e,t,n){\"use strict\";n.getSchemaBuiltinTypes=function(){var e=\"http://www.w3.org/2001/XMLSchema\",t={};return t[e]={variables:{},functions:{}},t[e].functions[e+\"#string#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"string\",arity:1,eqname:{uri:e,name:\"string\"}},t[e].functions[e+\"#boolean#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"boolean\",arity:1,eqname:{uri:e,name:\"boolean\"}},t[e].functions[e+\"#decimal#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"decimal\",arity:1,eqname:{uri:e,name:\"decimal\"}},t[e].functions[e+\"#float#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"float\",arity:1,eqname:{uri:e,name:\"float\"}},t[e].functions[e+\"#double#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"double\",arity:1,eqname:{uri:e,name:\"double\"}},t[e].functions[e+\"#duration#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"duration\",arity:1,eqname:{uri:e,name:\"duration\"}},t[e].functions[e+\"#dateTime#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"dateTime\",arity:1,eqname:{uri:e,name:\"dateTime\"}},t[e].functions[e+\"#time#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"time\",arity:1,eqname:{uri:e,name:\"time\"}},t[e].functions[e+\"#date#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"date\",arity:1,eqname:{uri:e,name:\"date\"}},t[e].functions[e+\"#gYearMonth#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gYearMonth\",arity:1,eqname:{uri:e,name:\"gYearMonth\"}},t[e].functions[e+\"#gYear#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gYear\",arity:1,eqname:{uri:e,name:\"gYear\"}},t[e].functions[e+\"#gMonthDay#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gMonthDay\",arity:1,eqname:{uri:e,name:\"gMonthDay\"}},t[e].functions[e+\"#gDay#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gDay\",arity:1,eqname:{uri:e,name:\"gDay\"}},t[e].functions[e+\"#gMonth#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gMonth\",arity:1,eqname:{uri:e,name:\"gMonth\"}},t[e].functions[e+\"#hexBinary#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"hexBinary\",arity:1,eqname:{uri:e,name:\"hexBinary\"}},t[e].functions[e+\"#base64Binary#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"base64Binary\",arity:1,eqname:{uri:e,name:\"base64Binary\"}},t[e].functions[e+\"#anyURI#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"anyURI\",arity:1,eqname:{uri:e,name:\"anyURI\"}},t[e].functions[e+\"#QName#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"QName\",arity:1,eqname:{uri:e,name:\"QName\"}},t[e].functions[e+\"#normalizedString#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"normalizedString\",arity:1,eqname:{uri:e,name:\"normalizedString\"}},t[e].functions[e+\"#token#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"token\",arity:1,eqname:{uri:e,name:\"token\"}},t[e].functions[e+\"#language#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"language\",arity:1,eqname:{uri:e,name:\"language\"}},t[e].functions[e+\"#NMTOKEN#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"NMTOKEN\",arity:1,eqname:{uri:e,name:\"NMTOKEN\"}},t[e].functions[e+\"#Name#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"Name\",arity:1,eqname:{uri:e,name:\"Name\"}},t[e].functions[e+\"#NCName#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"NCName\",arity:1,eqname:{uri:e,name:\"NCName\"}},t[e].functions[e+\"#ID#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"ID\",arity:1,eqname:{uri:e,name:\"ID\"}},t[e].functions[e+\"#IDREF#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"IDREF\",arity:1,eqname:{uri:e,name:\"IDREF\"}},t[e].functions[e+\"#ENTITY#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"ENTITY\",arity:1,eqname:{uri:e,name:\"ENTITY\"}},t[e].functions[e+\"#integer#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"integer\",arity:1,eqname:{uri:e,name:\"integer\"}},t[e].functions[e+\"#nonPositiveInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"nonPositiveInteger\",arity:1,eqname:{uri:e,name:\"nonPositiveInteger\"}},t[e].functions[e+\"#negativeInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"negativeInteger\",arity:1,eqname:{uri:e,name:\"negativeInteger\"}},t[e].functions[e+\"#long#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"long\",arity:1,eqname:{uri:e,name:\"long\"}},t[e].functions[e+\"#int#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"int\",arity:1,eqname:{uri:e,name:\"int\"}},t[e].functions[e+\"#short#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"short\",arity:1,eqname:{uri:e,name:\"short\"}},t[e].functions[e+\"#byte#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"byte\",arity:1,eqname:{uri:e,name:\"byte\"}},t[e].functions[e+\"#nonNegativeInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"nonNegativeInteger\",arity:1,eqname:{uri:e,name:\"nonNegativeInteger\"}},t[e].functions[e+\"#unsignedLong#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedLong\",arity:1,eqname:{uri:e,name:\"unsignedLong\"}},t[e].functions[e+\"#unsignedInt#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedInt\",arity:1,eqname:{uri:e,name:\"unsignedInt\"}},t[e].functions[e+\"#unsignedShort#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedShort\",arity:1,eqname:{uri:e,name:\"unsignedShort\"}},t[e].functions[e+\"#unsignedByte#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedByte\",arity:1,eqname:{uri:e,name:\"unsignedByte\"}},t[e].functions[e+\"#positiveInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"positiveInteger\",arity:1,eqname:{uri:e,name:\"positiveInteger\"}},t[e].functions[e+\"#yearMonthDuration#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"yearMonthDuration\",arity:1,eqname:{uri:e,name:\"yearMonthDuration\"}},t[e].functions[e+\"#dayTimeDuration#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"dayTimeDuration\",arity:1,eqname:{uri:e,name:\"dayTimeDuration\"}},t[e].functions[e+\"#untypedAtomic#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"untypedAtomic\",arity:1,eqname:{uri:e,name:\"untypedAtomic\"}},t}},{}],\"/node_modules/xqlint/lib/compiler/static_context.js\":[function(e,t,n){n.StaticContext=function(t,n){\"use strict\";var r=e(\"../tree_ops\").TreeOps,i=e(\"./errors\"),s=i.StaticError,o=i.StaticWarning,u=e(\"./schema_built-in_types\").getSchemaBuiltinTypes,a={sl:0,sc:0,el:0,ec:0},f={},l=function(e){return e.uri+\"#\"+e.name},c=function(e,t){return l(e)+\"#\"+t};t||(f[\"http://jsoniq.org/functions\"]={prefixes:[\"jn\"],pos:a,type:\"module\",override:!0},f[\"http://www.28msec.com/modules/collections\"]={prefixes:[\"db\"],pos:a,type:\"module\",override:!0},f[\"http://www.28msec.com/modules/store\"]={prefixes:[\"store\"],pos:a,type:\"module\",override:!0},f[\"http://jsoniq.org/function-library\"]={prefixes:[\"libjn\"],pos:a,type:\"module\",override:!0},f[\"http://www.w3.org/2005/xpath-functions\"]={prefixes:[\"fn\"],pos:a,type:\"module\",override:!0},f[\"http://www.w3.org/2005/xquery-local-functions\"]={prefixes:[\"local\"],pos:a,type:\"declare\",override:!0},f[\"http://www.w3.org/2001/XMLSchema-instance\"]={prefixes:[\"xsi\"],pos:a,type:\"declare\"},f[\"http://www.w3.org/2001/XMLSchema\"]={prefixes:[\"xs\"],pos:a,type:\"declare\"},f[\"http://www.w3.org/XML/1998/namespace\"]={prefixes:[\"xml\"],pos:a,type:\"declare\"},f[\"http://zorba.io/annotations\"]={prefixes:[\"an\"],pos:a,type:\"declare\",override:!0},f[\"http://www.28msec.com/annotations/rest\"]={prefixes:[\"rest\"],pos:a,type:\"declare\",override:!0},f[\"http://www.w3.org/2005/xqt-errors\"]={prefixes:[\"err\"],pos:a,type:\"declare\",override:!0},f[\"http://zorba.io/errors\"]={prefixes:[\"zerr\"],pos:a,type:\"declare\",override:!0});var h={parent:t,children:[],pos:n,setModuleResolver:function(e){return this.root.moduleResolver=e,this},setModules:function(e){if(this!==this.root)throw new Error(\"setModules() not invoked from the root static context.\");this.moduleResolver=function(t){return e[t]};var t=this;return Object.keys(this.namespaces).forEach(function(e){var n=t.namespaces[e];if(n.type===\"module\"){var i=t.moduleResolver(e);i.variables&&r.concat(t.variables,i.variables),i.functions&&r.concat(t.functions,i.functions)}}),this},setModulesFromXQDoc:function(e){if(this!==this.root)throw new Error(\"setModulesFromXQDoc() not invoked from the root static context.\");var t={};Object.keys(e).forEach(function(n){var r=e[n],i={},s={};r.functions.forEach(function(e){s[n+\"#\"+e.name+\"#\"+e.arity]={params:[],annotations:[],name:e.name,arity:e.arity,eqname:{uri:n,name:e.name}},e.parameters.forEach(function(t){s[n+\"#\"+e.name+\"#\"+e.arity].params.push(\"$\"+t.name)})}),r.variables.forEach(function(e){var t=e.name.substring(e.name.indexOf(\":\")+1);i[n+\"#\"+t]={type:\"VarDecl\",annotations:[],eqname:{uri:n,name:t}}}),t[n]={variables:i,functions:s}}),this.root.moduleResolver=function(e){return t[e]};var n=this;return Object.keys(this.namespaces).forEach(function(e){var t=n.namespaces[e];if(t.type===\"module\"){var i=n.moduleResolver(e);i.variables&&r.concat(n.variables,i.variables),i.functions&&r.concat(n.functions,i.functions)}}),this},moduleNamespace:\"\",description:\"\",defaultFunctionNamespace:\"http://www.w3.org/2005/xpath-functions\",defaultFunctionNamespaces:[\"http://www.28msec.com/modules/collections\",\"http://www.28msec.com/modules/store\",\"http://jsoniq.org/functions\",\"http://jsoniq.org/function-library\",\"http://www.w3.org/2001/XMLSchema\"],defaultElementNamespace:\"\",namespaces:f,availableModuleNamespaces:[],importModule:function(e,t,n){if(this!==this.root)throw new Error(\"Function not invoked from the root static context.\");this.addNamespace(e,t,n,\"module\");if(this.moduleResolver)try{var i=this.moduleResolver(e,[]);i.variables&&r.concat(this.variables,i.variables),i.functions&&r.concat(this.functions,i.functions)}catch(o){throw new s(\"XQST0059\",'module \"'+e+'\" not found',n)}return this},getAvailableModuleNamespaces:function(){return this.root.availableModuleNamespaces},getPrefixesByNamespace:function(e){return this.root.namespaces[e].prefixes},addNamespace:function(e,t,n,r){if(t===\"\"&&r===\"module\")throw new o(\"W01\",\"Avoid this type of import. Use import module namespace instead\",n);if(e===\"\")throw new s(\"XQST0088\",\"empty target namespace in module import or module declaration\",n);var i=this.getNamespace(e);if(i&&i.type===r&&r!==\"declare\"&&!i.override)throw new s(\"XQST0047\",'\"'+e+'\": duplicate target namespace',n);i=this.getNamespaceByPrefix(t);if(i&&!i.override)throw new s(\"XQST0033\",'\"'+t+'\": namespace prefix already bound to \"'+i.uri+'\"',n);i=this.namespaces[e];var u=[t];i&&(u=u.concat(this.namespaces[e].prefixes)),this.namespaces[e]={prefixes:u,pos:n,type:r};if(i)throw new o(\"W02\",'\"'+e+'\" already bound to the \"'+i.prefixes.join(\", \")+'\" prefix',n)},getNamespaces:function(){return this.root.namespaces},getNamespace:function(e){var t=this;while(t){var n=t.namespaces[e];if(n)return n;t=t.parent}},getNamespaceByPrefix:function(e){var t=[],n=function(n){var i=r.namespaces[n];i.prefixes.indexOf(e)!==-1&&(i.uri=n,t.push(i))},r=this;while(r)Object.keys(r.namespaces).forEach(n),r=r.parent;var i;return t.forEach(function(e){e.type===\"moduleDecl\"&&(i=e)}),i?i:t[0]},resolveQName:function(e,t){var n={uri:\"\",prefix:\"\",name:\"\"},r;if(e.substring(0,2)===\"Q{\")r=e.indexOf(\"}\"),n.uri=e.substring(2,r),n.name=e.substring(r+1);else{r=e.indexOf(\":\"),n.prefix=e.substring(0,r);var i=this.getNamespaceByPrefix(n.prefix);if(!i&&n.prefix!==\"\"&&[\"fn\",\"jn\"].indexOf(n.prefix)===-1)throw new s(\"XPST0081\",'\"'+n.prefix+'\": can not expand prefix of lexical QName to namespace URI',t);i&&(n.uri=i.uri),n.name=e.substring(r+1)}return n},variables:{},varRefs:{},functionCalls:{},addVariable:function(e,t,n){if(t===\"VarDecl\"&&this.moduleNamespace!==\"\"&&this.moduleNamespace!==e.uri&&e.uri!==\"\")throw new s(\"XQST0048\",'\"'+e.prefix+\":\"+e.name+'\": Qname not library namespace',n);var r=l(e);if(t===\"VarDecl\"&&this.variables[r])throw new s(\"XQST0049\",'\"'+e.name+'\": duplicate variable declaration',n);return this.variables[r]={type:t,pos:n,qname:e,annotations:{}},this},getVariables:function(){var e={},t=this,n=function(n){e[n]||(e[n]=t.variables[n])};while(t)Object.keys(t.variables).forEach(n),t=t.parent;return e},getVariable:function(e){var t=l(e),n=this;while(n){if(n.variables[t])return n.variables[t];n=n.parent}},addVarRef:function(e,t){var n=this.getVariable(e);if(!n&&(e.uri===\"\"||this.root.moduleResolver))throw new s(\"XPST0008\",'\"'+e.name+'\": undeclared variable',t);var r=l(e);this.varRefs[r]=!0},addFunctionCall:function(e,t,n){var r=this.getFunction(e,t);if(!(!!r||e.uri!==\"http://www.w3.org/2005/xquery-local-functions\"&&!this.root.moduleResolver||(e.uri===\"http://www.w3.org/2005/xpath-functions\"||e.uri===\"\"&&this.root.defaultFunctionNamespaces.concat(this.root.defaultFunctionNamespace).indexOf(\"http://www.w3.org/2005/xpath-functions\")!==-1)&&e.name===\"concat\")&&!r)throw new s(\"XPST0008\",'\"'+e.name+\"#\"+t+'\": undeclared function',n);var i=c(e,t);this.functionCalls[i]=!0},functions:u()[\"http://www.w3.org/2001/XMLSchema\"].functions,getFunctions:function(){return this.root.functions},getFunction:function(e,t){var n=c(e,t),r;if(e.uri===\"\"){var i=this;return this.root.defaultFunctionNamespaces.concat([this.root.defaultFunctionNamespace]).forEach(function(n){if(!!r)return!1;r=i.getFunction({uri:n,prefix:e.prefix,name:e.name},t)}),r}return this.root.functions[n]},addFunction:function(e,t,n){if(this!==this.root)throw new Error(\"addFunction() not invoked from the root static context.\");var r=n.length;if(this.moduleNamespace===\"\"||this.moduleNamespace===e.uri||e.uri===\"\"&&this.defaultFunctionNamespace===this.moduleNamespace){var i=c(e,r);if(this.functions[i])throw new s(\"XQST0034\",'\"'+e.name+'\": duplicate function declaration',t);return this.functions[i]={pos:t,params:n},this}throw new s(\"XQST0048\",'\"'+e.prefix+\":\"+e.name+'\": Qname not library namespace',t)}};return h.root=t?t.root:h,h}},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./schema_built-in_types\":\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\"}],\"/node_modules/xqlint/lib/compiler/translator.js\":[function(e,t,n){n.Translator=function(t,n){\"use strict\";var r=e(\"./errors\"),i=r.StaticError,s=r.StaticWarning,o=e(\"../tree_ops\").TreeOps,u=e(\"./static_context\").StaticContext,a=e(\"./handlers\"),f=function(e,t){var n=[];return t.length===0?e:(e.children.forEach(function(e){e.name===t[0]&&t.length>1?n=f(e,t.slice(1)):e.name===t[0]&&n.push(e)}),n)},l=[];this.apply=function(e){try{e()}catch(t){if(t instanceof i)c(t);else{if(!(t instanceof s))throw t;h(t.getCode(),t.getMessage(),t.getPos())}}};var c=function(e){l.push({pos:e.getPos(),type:\"error\",level:\"error\",message:\"[\"+e.getCode()+\"] \"+e.getMessage()})},h=function(e,t,n){l.push({pos:n,type:\"warning\",level:\"warning\",message:\"[\"+e+\"] \"+t})};this.getMarkers=function(){return l};var p=this;t.pos=n.pos;var d=t,v=function(e){d=new u(d,e),d.parent.children.push(d)},m=function(e){e!==undefined&&(d.pos.el=e.el,d.pos.ec=e.ec),Object.keys(d.varRefs).forEach(function(e){d.variables[e]||(d.parent.varRefs[e]=!0)}),Object.keys(d.variables).forEach(function(e){!d.varRefs[e]&&d.variables[e].type!==\"GroupingVariable\"&&d.variables[e].type!==\"CatchVar\"&&h(\"W03\",'Unused variable \"$'+d.variables[e].qname.name+'\"',d.variables[e].pos)}),d=d.parent};this.visitOnly=function(e,t){e.children.forEach(function(e){t.indexOf(e.name)!==-1&&p.visit(e)})},this.getFirstChild=function(e,t){var n;return e.children.forEach(function(e){e.name===t&&n===undefined&&(n=e)}),n},this.XQuery=function(e){t.description=e.comment?e.comment.description:undefined},this.ModuleDecl=function(e){return this.visitChildren(e,a.ModuleDecl(p,t,e)),!0},this.Prolog=function(e){return this.visitOnly(e,[\"DefaultNamespaceDecl\",\"Setter\",\"NamespaceDecl\",\"Import\"]),n.index.forEach(function(e){if(e.name===\"VarDecl\")e.children.forEach(function(n){n.name===\"VarName\"&&p.apply(function(){var r=o.flatten(n),i=t.resolveQName(r,n.pos);t.addVariable(i,e.name,n.pos)})});else if(e.name===\"FunctionDecl\"){var n,r,i=[];e.children.forEach(function(e){e.name===\"EQName\"?(n=e,r=e.pos):e.name===\"ParamList\"&&e.children.forEach(function(e){e.name===\"Param\"&&i.push(o.flatten(e))})}),p.apply(function(){n=o.flatten(n),n=t.resolveQName(n,r),t.addFunction(n,r,i)})}}),this.visitOnly(e,[\"ContextItemDecl\",\"AnnotatedDecl\",\"OptionDecl\"]),!0},this.ModuleImport=function(e){return this.visitChildren(e,a.ModuleImport(p,t,e)),!0},this.SchemaImport=function(e){return this.visitChildren(e,a.SchemaImport(p,t,e)),!0},this.DefaultNamespaceDecl=function(e){return this.visitChildren(e,a.DefaultNamespaceDecl(p,t,e)),!0},this.NamespaceDecl=function(e){return this.visitChildren(e,a.NamespaceDecl(p,t,e)),!0};var g={};this.AnnotatedDecl=function(e){return g={},this.visitChildren(e,a.NamespaceDecl(p,t,e)),!0},this.CompatibilityAnnotation=function(){return g[\"http://www.w3.org/2012/xquery#updating\"]=[],!0},this.Annotation=function(e){return this.visitChildren(e,{EQName:function(e){var t=o.flatten(e);p.apply(function(){var n=d.resolveQName(t,e.pos);g[n.uri+\"#\"+n.name]=[]})}}),!0},this.VarDecl=function(e){try{var n=p.getFirstChild(e,\"VarName\"),r=o.flatten(n),i=d.resolveQName(r,n.pos),s=t.getVariable(i);if(s){s.annotations=g,s.description=e.getParent.comment?e.getParent.comment.description:undefined,s.type=o.flatten(f(e,[\"TypeDeclaration\"])[0]).substring(2).trim();var u=s.type.substring(s.type.length-1);u===\"?\"?(s.occurrence=0,s.type=s.type.substring(0,s.type.length-1)):u===\"*\"?(s.occurrence=-1,s.type=s.type.substring(0,s.type.length-1)):u===\"+\"?(s.occurrence=2,s.type=s.type.substring(0,s.type.length-1)):s.occurrence=1}}catch(a){}return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),!0},this.FunctionDecl=function(e){var t=g[\"http://www.w3.org/2012/xquery#updating\"]!==undefined,n=f(e,[\"ReturnType\"])[0],r=f(e,[\"EQName\"])[0];!n&&!t&&h(\"W05\",\"Untyped return value\",r.pos);var i=!1;return e.children.forEach(function(e){if(e.name===\"TOKEN\"&&e.value===\"external\")return i=!0,!1}),i||(v(e.pos),this.visitChildren(e),m()),!0},this.VarRef=function(e){return this.visitChildren(e,a.VarRefHandler(p,d,e)),!0},this.Param=function(e){var t=f(e,[\"TypeDeclaration\"])[0];return t||h(\"W05\",\"Untyped function parameter\",e.pos),this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.InlineFunctionExpr=function(e){return v(e.pos),this.visitChildren(e),m(),!0};var y=[],b=function(e){v(e.pos),y.push(0),p.visitChildren(e);for(var t=1;t<=y[y.length-1];t++)m(e.pos);y.pop(),m()};this.StatementsAndOptionalExpr=function(e){return b(e),!0},this.StatementsAndExpr=function(e){return b(e),!0},this.BlockStatement=function(e){return b(e),!0},this.VarDeclStatement=function(e){v(e.pos),y[y.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e))};var w=[];this.FLWORExpr=this.FLWORStatement=function(e){v(e.pos),w.push(0),this.visitChildren(e);for(var t=1;t<=w[w.length-1];t++)m(e.pos);return w.pop(),m(),!0},this.ForBinding=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.LetBinding=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.GroupingSpec=function(e){var t=!1;e.children.forEach(function(e){if(e.value===\":=\")return t=!0,!1});if(t){var n=e.children[0];return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(n,a.VarHandler(p,d,n)),!0}},this.TumblingWindowClause=function(e){return this.visitOnly(e,[\"ExprSingle\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),this.visitOnly(e,[\"WindowStartCondition\",\"WindowEndCondition\"]),!0},this.WindowVars=function(e){return v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.SlidingWindowClause=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),this.visitOnly(e,[\"WindowStartCondition\",\"WindowEndCondition\"]),!0},this.PositionalVar=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.PositionalVar=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.CurrentItem=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.PreviousItem=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.NextItem=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.CountClause=function(e){return v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.CaseClause=function(e){return v(e.pos),this.visitChildren(e,a.VarHandler(p,d,e)),this.visitOnly(e,[\"ExprSingle\"]),m(),!0};var E=[];this.TransformExpr=function(e){v(e.pos),E.push(0),this.visitChildren(e);for(var t=1;t<=E[E.length-1];t++)m(e.pos);return E.pop(),m(),!0},this.TransformSpec=function(e){return this.visitOnly(e,[\"ExprSingle\"]),v(e.pos),E[E.length-1]+=1,this.visitChildren(e,a.VarHandler(p,d,e)),!0};var S=[];this.QuantifiedExpr=function(e){v(e.pos),S.push(0),this.visitChildren(e);for(var t=1;t<=S[S.length-1];t++)m(e.pos);return S.pop(),m(),!0},this.QuantifiedVarDecl=function(e){return this.visitOnly(e,[\"ExprSingle\"]),v(e.pos),S[S.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.FunctionCall=function(e){this.visitOnly(e,[\"ArgumentList\"]);var t=p.getFirstChild(e,\"EQName\"),n=o.flatten(t),r=f(e,[\"ArgumentList\",\"Argument\"]).length;return p.apply(function(){var i=d.resolveQName(n,e.pos);try{i.uri!==\"\"&&(d.root.namespaces[i.uri].used=!0)}catch(s){}d.addFunctionCall(i,r,t.pos)}),!0},this.TryClause=function(e){return v(e.pos),this.visitChildren(e),m(),!0},this.CatchClause=function(e){v(e.pos);var t=\"err\",n=\"http://www.w3.org/2005/xqt-errors\",r={sl:0,sc:0,el:0,ec:0};return d.addVariable({prefix:t,uri:n,name:\"code\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"description\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"value\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"module\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"line-number\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"column-number\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"additional\"},\"CatchVar\",r),this.visitChildren(e),m(),!0},this.Pragma=function(e){var n=o.flatten(f(e,[\"EQName\"])[0]);n=t.resolveQName(n,e);var r=o.flatten(f(e,[\"PragmaContents\"])[0]);if(n.name===\"xqlint\"&&n.uri===\"http://xqlint.io\"){v(e.pos);var i=r.match(/[a-zA-Z]+\\(([^)]+)\\)/g);return i.forEach(function(t){var n=t.substring(0,t.indexOf(\"(\")),r=t.substring(0,t.length-1).substring(t.indexOf(\"(\")+1).split(\",\").map(function(e){return e.trim()});n===\"varrefs\"&&r.forEach(function(t){var n=d.resolveQName(t.substring(1),e.pos);n.uri!==\"\"&&(d.root.namespaces[n.uri].used=!0),d.addVarRef(n,e.pos)})}),this.visitChildren(e),m(),!0}},this.visit=function(e){var t=e.name,n=!1;typeof this[t]==\"function\"&&(n=this[t](e)===!0),n||this.visitChildren(e)},this.visitChildren=function(e,t){for(var n=0;n<e.children.length;n++){var r=e.children[n];t!==undefined&&typeof t[r.name]==\"function\"?t[r.name](r):this.visit(r)}},this.visit(n),Object.keys(t.variables).forEach(function(e){!t.varRefs[e]&&(t.variables[e].annotations[\"http://www.w3.org/2005/xpath-functions#private\"]||t.moduleNamespace===\"\")&&t.variables[e].pos&&h(\"W03\",'Unused variable \"'+t.variables[e].qname.name+'\"',t.variables[e].pos)}),Object.keys(t.namespaces).forEach(function(e){var n=t.namespaces[e];n.used===undefined&&!n.override&&n.type===\"module\"&&h(\"W04\",'Unused module \"'+e+'\"',n.pos)})}},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./handlers\":\"/node_modules/xqlint/lib/compiler/handlers.js\",\"./static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\"}],\"/node_modules/xqlint/lib/completion/completer.js\":[function(e,t,n){\"use strict\";function s(e,t,n){n=n||i;var r=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;r.push(e[s])}return r.reverse().join(\"\")}function o(e,t){var n=0,r=e.length-1,i=Math.floor((r+n)/2);while(r>n&&i>=0&&e[i].indexOf(t)!==0)t<e[i]?r=i-1:t>e[i]&&(n=i+1),i=Math.floor((r+n)/2);while(i>0&&e[i-1].indexOf(t)===0)i--;return i>=0?i:0}var r=e(\"../tree_ops\").TreeOps,i=/[a-zA-Z_0-9\\$]/,u=/[a-zA-Z_0-9\\/\\.:\\-#]/,a=\"-._A-Za-z0-9:\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02ff\\u0300-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd\",f=\"[\"+a+\"]\",l=\"[\"+a+\"\\\\$]\",c=new RegExp(f),h=new RegExp(l),p={LetBinding:\"Let binding\",Param:\"Function parameter\",QuantifiedExpr:\"Quantified expression binding\",VarDeclStatement:\"Local variable\",ForBinding:\"For binding\",TumblingWindowClause:\"Tumbling window binding\",WindowVars:\"Window variable\",SlidingWindowClause:\"Sliding window binding\",PositionalVar:\"Positional variable\",CurrentItem:\"Current item\",PreviousItem:\"Previous item\",NextItem:\"Next item\",CountClause:\"Count binding\",GroupingVariable:\"Grouping variable\",VarDecl:\"Module variable\"},d=function(e,t){t.sort();var n=o(t,e),r=[];for(var i=n;i<t.length&&t[i].indexOf(e)===0;i++)r.push(t[i]);return r},v=function(e,t,n){var r=e.indexOf(\":\");if(r===-1){var i=[],s=n.getNamespaces();Object.keys(s).forEach(function(e){(s[e].type===\"module\"||e===\"http://www.w3.org/2005/xquery-local-functions\")&&i.push(s[e].prefixes[0])});var o=d(e,i),u=function(e){return{name:e+\":\",value:e+\":\",meta:\"prefix\"}};return o.map(u)}return[]},m=function(e,t,n){var r=[],i={},s=n.getFunctions(),o=\"\",u=\"\",a=e,f=e.indexOf(\":\"),l=!1;if(f!==-1){u=e.substring(0,f),a=e.substring(f+1);var h=n.getNamespaceByPrefix(u);h&&(o=n.getNamespaceByPrefix(u).uri)}else l=!0,o=n.root.defaultFunctionNamespace;Object.keys(s).forEach(function(e){var t=s[e],u=e.substring(0,e.indexOf(\"#\")),a=e.substring(e.indexOf(\"#\")+1);a=a.substring(0,a.indexOf(\"#\"));if(u!==o)return;l||(a=n.getNamespaces()[u].prefixes[0]+\":\"+a),a+=\"(\";var f=a;f+=t.params.map(function(e,t){return\"${\"+(t+1)+\":\\\\\"+e.split(\" \")[0]+\"}\"}).join(\", \"),a+=t.params.join(\", \"),a+=\")\",f+=\")\",r.push(a),i[a]=f});var p=d(e,r),v=function(e){return{name:e,value:e,meta:\"function\",priority:4,identifierRegex:c,snippet:i[e]}};return p.map(v)},g=function(e,t,n){var r=\"\",i=\"\",s=e.indexOf(\":\");s!==-1&&(i=e.substring(0,s),r=n.getNamespaceByPrefix(i).uri);var o=n.getVariables(),u=[],a={};Object.keys(o).forEach(function(e){var t=e.indexOf(\"#\"),r=e.substring(0,t),i=e.substring(t+1);r!==\"\"?(u.push(n.getPrefixesByNamespace(r)[0]+\":\"+i),a[n.getPrefixesByNamespace(r)[0]+\":\"+i]=o[e].type):(u.push(i),a[i]=o[e].type)});var f=d(e,u),l=function(e){return{name:\"$\"+e,value:\"$\"+e,meta:p[a[e]],priority:4,identifierRegex:h}};return f.map(l)},y=function(e,t,n){var r=s(e,t.col,c),i=e.substring(0,t.col-(r.length===0?0:r.length)),o=i[i.length-1]===\"$\";return o?g(r,t,n):r!==\"\"?m(r,t,n).concat(v(r,t,n)):g(r,t,n).concat(m(r,t,n)).concat(v(r,t,n))},b=function(e,t,n){var r=s(e,t.col,u),i=d(r,n.getAvailableModuleNamespaces()),o=function(e){return{name:e,value:e,meta:\"module\",priority:4,identifierRegex:u}};return i.map(o)};n.complete=function(e,t,n,i){var s=e.split(\"\\n\")[i.line],o=r.findNode(t,i),u=r.findNode(n,i);return u=u?u:n,o&&o.name===\"URILiteral\"&&o.getParent&&o.getParent.name===\"ModuleImport\"?b(s,i,u):y(s,i,u)}},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\"}],\"/node_modules/xqlint/lib/formatter/style_checker.js\":[function(e,t,n){n.StyleChecker=function(e,t){\"use strict\";var n=\"    \",r=[];this.getMarkers=function(){return r},this.WS=function(e){var t=e.value.split(\"\\n\");return t.forEach(function(i,s){var o=s===0,u=s===t.length-1;/\\r$/.test(i)&&r.push({pos:{sl:e.pos.sl+s,el:e.pos.sl+s,sc:i.length-1,ec:i.length},type:\"warning\",level:\"warning\",message:\"[SW01] Detected CRLF\"});var a=i.match(/\\t+/);a!==null&&r.push({pos:{sl:e.pos.sl+s,el:e.pos.sl+s,sc:a.index,ec:a.index+a[0].length},type:\"warning\",level:\"warning\",message:\"[SW02] Tabs detected\"});if(!o&&u){a=i.match(/^\\ +/);if(a!==null){var f=a[0].length%n.length;f!==0&&r.push({pos:{sl:e.pos.sl+s,el:e.pos.sl+s,sc:a.index,ec:a.index+a[0].length},type:\"warning\",level:\"warning\",message:\"[SW03] Unexcepted indentation of \"+a[0].length})}}}),!0},this.visit=function(e,t){var n=e.name,r=!1;typeof this[n]==\"function\"&&(r=this[n](e,t)===!0),r||this.visitChildren(e)},this.visitChildren=function(e,t){for(var n=0;n<e.children.length;n++){var r=e.children[n];t!==undefined&&typeof t[r.name]==\"function\"?t[r.name](r):this.visit(r)}},t.split(\"\\n\").forEach(function(e,t){var n=e.match(/\\ +$/);n&&r.push({pos:{sl:t,el:t,sc:n.index,ec:n.index+n[0].length},type:\"warning\",level:\"warning\",message:\"[SW04] Trailing whitespace\"})}),this.visit(e)}},{}],\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(e,t,n){var r=n.JSONiqTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 80:f(80);break;case 94:f(94);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 143:f(143);break;case 150:f(150);break;case 163:f(163);break;case 183:f(183);break;case 189:f(189);break;case 214:f(214);break;case 224:f(224);break;case 225:f(225);break;case 241:f(241);break;case 242:f(242);break;case 251:f(251);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 17:f(17);break;case 68:f(68);break;case 71:f(71);break;case 72:f(72);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 91:f(91);break;case 92:f(92);break;case 101:f(101);break;case 103:f(103);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 111:f(111);break;case 116:f(116);break;case 117:f(117);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 127:f(127);break;case 129:f(129);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 151:f(151);break;case 157:f(157);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 168:f(168);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 180:f(180);break;case 182:f(182);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 216:f(216);break;case 217:f(217);break;case 218:f(218);break;case 222:f(222);break;case 227:f(227);break;case 233:f(233);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 248:f(248);break;case 252:f(252);break;case 254:f(254);break;case 258:f(258);break;case 264:f(264);break;case 268:f(268);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 260:f(260);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 28:f(28);break;case 68:f(68);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 92:f(92);break;case 103:f(103);break;case 107:f(107);break;case 111:f(111);break;case 116:f(116);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 218:f(218);break;case 222:f(222);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 264:f(264);break;case 268:f(268);break;case 71:f(71);break;case 72:f(72);break;case 80:f(80);break;case 91:f(91);break;case 94:f(94);break;case 101:f(101);break;case 106:f(106);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 117:f(117);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 127:f(127);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 143:f(143);break;case 150:f(150);break;case 151:f(151);break;case 157:f(157);break;case 163:f(163);break;case 168:f(168);break;case 180:f(180);break;case 182:f(182);break;case 183:f(183);break;case 189:f(189);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 214:f(214);break;case 216:f(216);break;case 217:f(217);break;case 224:f(224);break;case 225:f(225);break;case 227:f(227);break;case 233:f(233);break;case 241:f(241);break;case 242:f(242);break;case 248:f(248);break;case 251:f(251);break;case 254:f(254);break;case 258:f(258);break;case 260:f(260);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=30)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 58:f(58);break;case 57:f(57);break;case 59:f(59);break;case 43:f(43);break;case 45:f(45);break;case 44:f(44);break;case 37:f(37);break;case 41:f(41);break;case 277:f(277);break;case 274:f(274);break;case 42:f(42);break;case 46:f(46);break;case 52:f(52);break;case 65:f(65);break;case 66:f(66);break;case 49:f(49);break;case 51:f(51);break;case 56:f(56);break;case 54:f(54);break;case 36:f(36);break;case 276:f(276);break;case 40:f(40);break;case 5:f(5);break;case 4:f(4);break;case 6:f(6);break;case 15:f(15);break;case 16:f(16);break;case 18:f(18);break;case 19:f(19);break;case 20:f(20);break;case 8:f(8);break;case 9:f(9);break;case 7:f(7);break;case 35:f(35);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 61:f(61);break;case 53:f(53);break;case 29:f(29);break;case 60:f(60);break;case 37:f(37);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 25:f(25);break;case 9:f(9);break;case 10:f(10);break;case 58:f(58);break;case 57:f(57);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;default:f(35)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 23:f(23);break;case 27:f(27);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 22:f(22);break;case 26:f(26);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 14:f(14);break;case 67:f(67);break;default:f(35)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 12:f(12);break;case 50:f(50);break;default:f(35)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 13:f(13);break;case 62:f(62);break;case 63:f(63);break;default:f(35)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 11:f(11);break;case 38:f(38);break;case 39:f(39);break;default:f(35)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 55:f(55);break;case 44:f(44);break;case 32:f(32);break;default:f(35)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(6);switch(y){case 33:f(33);break;case 34:f(34);break;case 55:f(55);break;case 44:f(44);break;default:f(35)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(5);switch(y){case 3:f(3);break;case 2:f(2);break;case 1:f(1);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 21:f(21);break;case 31:f(31);break;case 23:f(23);break;case 24:f(24);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<279;i+=32){var s=i,o=(i>>5)*2066+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,37,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37,37,37,37,37,37,37,37,37,37,37,37,31,31,37,37,37,37,37,37,37,66,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,37,31,37,31,31,37],r.INITIAL=[1,2,49155,57348,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,17408,19288,17439,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19074,36169,17439,36866,17466,36890,36866,22314,19105,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22182,19288,19121,36866,17466,18345,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19273,19552,19304,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19332,17423,19363,36866,17466,17537,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,18614,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19391,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19427,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36154,19288,19457,36866,17466,17740,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22780,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22375,22197,18469,36866,17466,36890,36866,21991,24018,22987,17556,17575,22288,17486,17509,17525,18373,21331,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,19485,19501,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19537,22390,19568,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19596,19611,19457,36866,17466,36890,36866,18246,19627,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22242,20553,19457,36866,17466,36890,36866,18648,30477,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36472,19288,19457,36866,17466,17809,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,21770,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19643,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19672,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20538,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,17975,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22345,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19726,19742,21529,24035,23112,26225,23511,27749,27397,24035,34360,24035,24036,23114,35166,23114,23114,19758,23511,35247,23511,23511,28447,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,19821,23511,23511,23511,23511,23512,19441,36539,24035,24035,24035,24035,19846,19869,23114,23114,23114,28618,32187,19892,23511,23511,23511,34585,20402,36647,24035,24035,24036,23114,33757,23114,23114,23029,20271,23511,27070,23511,23511,30562,24035,24035,29274,26576,23114,23114,31118,23036,29695,23511,23511,32431,23634,30821,24035,23110,19913,23114,23467,31261,23261,34299,19932,24035,32609,19965,35389,19984,27689,19830,29391,29337,20041,22643,35619,33728,20062,20121,20166,35100,26145,20211,23008,19876,20208,20227,25670,20132,26578,27685,20141,20243,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36094,19288,19457,36866,17466,21724,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22735,19552,20287,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22750,19288,21529,24035,23112,28056,23511,29483,28756,24035,24035,24035,24036,23114,23114,23114,23114,20327,23511,23511,23511,23511,31156,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,20371,23511,23511,23511,23511,27443,20395,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,29457,29700,23511,23511,23511,23511,33444,20402,24035,24035,24035,24036,23114,23114,23114,23114,28350,20421,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,20447,20475,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20523,22257,20569,20783,21715,17603,20699,20837,20614,20630,21149,20670,21405,17486,17509,17525,18373,19179,20695,20716,20732,20755,19194,18042,21641,20592,20779,20598,21412,17470,17591,20896,17468,17619,20799,20700,21031,20744,20699,20828,18075,21259,20581,20853,18048,20868,20884,17756,17784,17800,17825,17854,21171,21200,20931,20947,21378,20955,20971,18086,20645,21002,20986,18178,17960,18012,18381,18064,29176,21044,21438,21018,21122,21393,21060,21844,21094,20654,17493,18150,18166,18214,25967,20763,21799,21110,21830,21138,21246,21301,18336,18361,21165,21187,20812,21216,21232,21287,21317,18553,21347,21363,21428,21454,21271,21483,21499,21515,21575,21467,18712,21591,21633,21078,18189,18198,20679,21657,21701,21074,21687,21740,21756,21786,21815,21860,21876,21892,21946,21962,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36457,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,36813,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,21981,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,22151,22007,18884,17900,17922,17944,18178,17960,18012,18381,18064,27898,17884,18890,17906,17928,22042,25022,18130,36931,36963,17493,18150,18166,22070,22112,25026,18134,36935,18262,18278,18294,18320,18336,18361,22142,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36109,19288,18469,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22167,19288,19457,36866,17466,17768,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22227,36487,22273,36866,17466,36890,36866,19316,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18749,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,22304,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19580,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22330,19089,19457,36866,17466,18721,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22765,19347,19457,36866,17466,36890,36866,18114,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34541,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,22540,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29908,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22561,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,23837,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22584,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36442,19288,21605,24035,23112,28137,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,31568,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22690,19288,19457,36866,17466,36890,36866,21991,27584,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,22659,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22360,19552,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22675,22811,19457,36866,17466,36890,36866,19133,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22827,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36064,19288,22865,22881,32031,22897,22913,22956,29939,24035,24035,24035,23003,23114,23114,23114,23024,22420,23511,23511,23511,23052,29116,23073,29268,24035,25563,26915,23106,23131,23114,23114,23159,23181,23197,23248,23511,23511,23282,23305,22493,32364,24035,33472,30138,26325,31770,33508,27345,33667,23114,23321,23473,23351,35793,36576,23511,23375,22500,24145,24035,29197,20192,24533,23440,23114,19017,23459,22839,23489,23510,23511,33563,23528,32076,25389,24035,26576,23561,23583,23114,32683,22516,23622,23655,23511,23634,35456,37144,23110,23683,34153,20499,32513,25824,23705,24035,24035,23111,23114,19874,27078,33263,19830,24035,23112,19872,27741,23266,24036,23114,30243,20507,32241,20150,31862,27464,35108,23727,23007,35895,34953,26578,27685,20141,24569,31691,19787,33967,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36427,19552,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,27027,26576,23114,23114,23114,31471,23756,22468,23511,23511,23511,34687,23772,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,23788,24035,24035,24035,21559,23828,23114,23114,23114,25086,22839,23853,23511,23511,23511,23876,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,31761,23909,23953,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36049,19288,21605,30825,23112,23987,23511,24003,31001,27617,24034,24035,24036,24052,24089,23114,23114,22420,24109,24168,23511,23511,29116,24188,27609,20017,29516,24035,26576,24222,19968,23114,24252,33811,22468,24270,33587,23511,24320,27443,22493,24035,24035,24035,24035,24339,23113,23114,23114,23114,28128,28618,29700,23511,23511,23511,28276,34564,20402,24035,24035,32929,24036,23114,23114,23114,24357,23029,22839,23511,23511,23511,24377,25645,24035,34112,24035,26576,23114,26643,23114,32683,22516,23511,25638,23511,23711,24035,24395,27809,23114,24414,20499,24432,30917,23628,24035,30680,23111,23114,30233,27078,25748,24452,24035,23112,19872,27741,23266,24036,23114,24475,19829,26577,26597,26154,24519,24556,24596,23007,20046,20132,26578,24634,20141,24569,31691,24679,24727,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36412,19288,21605,19943,34861,32618,26027,29483,32016,32050,36233,24776,35574,24801,24819,32671,31289,22420,24868,24886,20087,26849,29116,19803,24035,24035,24035,36228,26576,23114,23114,23114,24981,33811,22468,23511,23511,23511,29028,27443,22493,24923,27965,24035,24035,32797,24946,23443,23114,23114,29636,24997,22849,28252,23511,23511,23511,25042,25110,24035,24035,34085,24036,25133,23114,23114,25152,23029,22839,25169,23511,36764,23511,25645,30403,24035,25186,26576,31806,24093,25212,32683,22516,32713,26245,34293,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,32406,23111,23114,28676,30944,27689,25234,24035,23112,19872,37063,23266,24036,23114,30243,20379,26100,29218,20211,30105,25257,25284,23007,20046,20132,26578,27685,20141,24569,24834,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36034,19288,21671,25314,25072,25330,25346,25362,29939,29951,35288,29984,23812,27216,25405,25424,30456,22584,26292,25461,25480,31592,29116,25516,34963,25545,27007,25579,33937,25614,25661,25686,34872,25702,25718,25734,25769,25795,25811,25840,22493,26533,25856,24035,25876,30763,27481,25909,23114,28987,25936,25954,29700,25983,23511,31412,26043,26063,22568,29241,29592,26116,31216,35383,26170,34783,26194,26221,22839,26241,26261,22477,26283,26308,27306,31035,24655,26576,29854,33386,26341,32683,22516,32153,30926,26361,19996,26381,35463,26397,26424,34646,26478,35605,31386,26494,35567,31964,22940,23689,25218,30309,32289,19830,33605,23112,32109,27733,27084,24496,35886,35221,26525,36602,26549,26558,26574,26594,26613,26629,26666,26700,26578,27685,23740,24285,31691,26733,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36397,19552,18991,25887,28117,32618,26776,29483,29939,26802,24035,24035,24036,28664,23114,23114,23114,22420,30297,23511,23511,23511,29116,19803,24035,24035,24035,25559,26576,23114,23114,23114,30525,33811,22468,23511,23511,23511,28725,27443,22493,24035,24035,27249,24035,24035,23113,23114,23114,26827,23114,28618,29700,23511,23511,26845,23511,34564,20402,24035,24035,26979,24036,23114,23114,23114,24974,23029,22839,23511,23511,23511,26865,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,33305,24035,25598,23114,19874,34253,27689,19830,24035,23112,19872,27741,23266,24036,23114,26886,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,26931,24569,26439,26947,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36019,19288,26995,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,27043,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,27061,23511,23511,23511,23511,23512,24694,24035,24035,29978,24035,24035,23113,23114,33114,23114,23114,30010,29700,23511,35913,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,27155,26576,23114,23114,30447,23036,29695,23511,23511,30935,20099,24152,25529,27100,34461,27121,22625,29156,26009,27137,30422,31903,31655,28870,27171,32439,31731,19830,27232,22612,27265,26786,25494,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,20342,27288,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,27322,27339,28020,27361,27382,29939,24035,24035,32581,24036,23114,23114,23114,27425,22420,23511,23511,23511,27442,28306,19803,24035,24035,24035,24035,26710,23114,23114,23114,23114,32261,22468,23511,23511,23511,23511,35719,24694,29510,24035,24035,24035,24035,26717,23114,23114,23114,23114,28618,32217,23511,23511,23511,23511,34585,20402,24035,24035,24035,27459,23114,23114,23114,36252,23029,20271,23511,23511,23511,28840,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,27480,34483,28401,29761,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36382,19288,21605,27497,27517,28504,28898,27569,29939,29401,27600,27323,27633,19025,27662,23114,27705,22420,20483,27721,23511,27765,28306,19803,23540,24035,24610,27781,27805,26650,23114,28573,32990,25920,22468,26870,23511,26684,34262,34737,25057,34622,24035,24035,23971,24206,27825,27847,23114,23114,27865,27885,35766,27914,23511,23511,32766,32844,27934,28795,26909,27955,26092,27988,25445,28005,28036,28052,21965,23511,32196,19897,28072,28102,36534,21541,23801,28153,28180,28197,28221,23036,32695,28251,28268,28292,23667,34825,23930,24580,28322,28344,31627,28366,25996,23628,24035,24035,23111,23114,19874,27078,27689,35625,33477,33359,27674,28393,33992,24036,23114,30243,19829,28417,28433,28463,23008,19876,20208,23007,20046,20132,28489,28520,20141,24569,31691,19787,28550,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,28589,24035,24035,24035,24035,28608,23114,23114,23114,23114,28618,20431,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36004,19288,28634,31951,28565,28702,28718,28741,32544,20175,28792,32086,20105,28811,29059,29862,28856,22420,28886,30354,23359,28922,28306,28952,23888,26320,36506,24035,29331,28968,36609,23114,29003,31661,27061,30649,27366,23511,29023,27918,24694,24035,24035,23893,33094,30867,23113,23114,23114,29044,34184,30010,29700,23511,23511,29081,29102,34585,20402,27789,24035,24035,24036,23114,29132,23114,23114,23029,20271,23511,29153,23511,23511,30562,30174,24035,24035,27409,25438,23114,23114,29172,36668,31332,23511,23511,29192,30144,24035,23110,30203,23114,23467,31544,23261,23628,24035,22545,23111,23114,29213,27078,27689,29234,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,29257,23008,19876,20208,28768,29290,29320,34776,29353,20141,22435,29378,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36367,19288,21605,34616,19006,32618,31497,31507,36216,20184,24035,34393,29424,34668,23114,34900,29447,22420,30360,23511,37089,29473,28306,19803,29499,24398,24035,24035,26576,31799,29532,29550,23114,33811,22468,32298,29571,31184,23511,23512,37127,36628,29589,24035,24135,24035,23113,29608,23114,27831,29634,28618,29652,30037,23511,24172,29671,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,29555,29690,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,29719,24035,23110,29738,23114,23467,34035,29756,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,29777,34364,28181,30243,29799,31920,27272,27185,23008,31126,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29828,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35989,19552,19687,35139,28649,29878,29894,29924,29939,23224,23085,31969,24036,35173,24752,24803,23114,22420,31190,30318,24870,23511,28306,29967,23967,24035,24035,24035,26576,3e4,23114,23114,23114,33811,22468,30026,23511,23511,23511,23512,26078,24035,24035,24035,30053,37137,30071,23114,23114,33368,25136,28618,30723,23511,23511,37096,31356,34585,20402,30092,30127,30160,24036,35740,30219,24960,30259,23029,20271,34042,30285,30342,30376,23289,30055,30400,30419,30438,32640,33532,33514,30472,18792,26267,24323,23057,30493,23639,20008,30196,33188,30517,20075,23511,30541,23628,30578,33928,28776,30594,19874,30610,30637,19830,30677,27646,19872,25779,23266,23232,35016,30243,30696,29812,30712,30746,27206,30779,30807,23007,33395,20132,26578,27685,31703,22928,31691,19787,31079,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36352,19288,23335,30841,26131,30888,30904,30986,29939,24035,24704,31017,20025,23114,26178,31051,31095,22420,23511,22524,31142,31172,28534,31206,35497,25196,24035,28592,24503,23114,31239,31285,23114,31305,31321,31355,31372,31407,23511,30556,24694,24035,27501,19805,24035,24035,23113,23114,31428,24066,23114,28618,29700,23511,31837,18809,23511,34585,31448,24035,24035,24035,23090,23114,23114,23114,23114,31619,35038,23511,23511,23511,23511,33714,24035,33085,24035,29431,23114,31467,23114,23143,31487,23511,31523,23511,35195,36783,24035,30111,23567,23114,23467,31543,31560,23628,24035,24035,23111,23114,19874,30953,31584,34508,24035,31608,26345,37055,23266,31643,31677,31719,31747,31786,31822,26898,23008,19876,31859,23007,20046,20132,26578,27685,20141,24569,31691,31878,31936,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35974,19288,21605,27972,35663,31985,29655,32001,36715,24785,25893,23545,31912,19853,19916,25938,24540,22420,31843,29674,29573,32735,28936,19803,24035,24035,32047,24035,26576,23114,23114,27544,23114,33811,22468,23511,23511,32161,23511,23512,32066,24035,33313,24035,24035,24035,23113,27426,32102,23114,23114,28618,32125,23511,32144,23511,23511,33569,20402,24035,27045,24035,24036,23114,23114,28328,23114,30076,32177,23511,23511,30384,23511,30562,24035,24035,24035,26576,23114,23114,23114,23595,32212,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,22635,25753,32233,32257,32277,19829,26577,26597,20211,23008,19876,32322,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,32352,35285,32380,34196,33016,30661,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,32404,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,32422,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,30269,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,19949,24035,23111,32455,19874,31269,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36337,19552,19209,21617,26509,32475,32491,32529,29939,24035,32578,25241,32597,23114,32634,29007,32656,22420,23511,32729,26365,32751,28306,32788,32882,24035,24035,32813,36727,23114,33182,23114,27553,33235,32829,23511,32706,23511,28906,28377,26962,32881,32904,32898,32920,24035,32953,23114,32977,26408,23114,28164,33006,23511,33039,35774,23511,32306,20402,33076,30872,24035,24036,25408,33110,28979,23114,23029,20271,35835,33130,33054,23511,30562,33148,24035,24035,33167,23114,23114,33775,23036,20459,23511,23511,25464,24646,24035,24035,22446,23114,23114,25627,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,31391,33204,33220,33251,33287,26577,26597,20211,33329,19876,33345,23007,20046,20132,26578,27685,28473,22599,31691,33411,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35959,19288,21907,27243,29843,32618,33427,31507,29939,33460,34090,24035,24036,33493,24416,33530,23114,22420,33548,24379,33585,23511,28306,19803,33603,24202,24035,24035,25593,33749,28205,23114,23114,32388,22468,33853,33060,23511,23511,31339,33621,24035,24035,34397,24618,30757,33663,23114,23114,33683,35684,28618,26678,23511,23511,32506,33699,34585,20402,24035,32562,26973,24036,23114,23114,33377,33773,23029,20271,23511,23511,30621,23511,23860,24035,33791,21553,26576,36558,23114,33809,23036,32857,26047,23511,33827,23634,24035,24035,23110,23114,23114,31252,23511,33845,23628,24035,24459,23111,23114,33869,27078,30791,29783,24035,24742,19872,33895,23266,26462,19710,33879,33919,26577,26597,24123,24930,21930,20208,30501,33953,25268,20252,33983,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36322,19552,23390,33634,35154,34008,34024,34058,35544,34106,34128,26811,33151,34144,34169,34212,23114,34228,34244,34278,34315,23511,34331,34347,34380,34413,24035,24663,26576,34429,34453,34477,29534,33811,22468,34499,34524,34557,25170,34580,35436,23937,34601,24035,24341,26453,23113,34638,34662,23114,24236,28618,34684,34703,34729,23511,35352,34753,34799,24035,34815,32558,34848,34888,35814,34923,23165,29137,23606,30326,30730,34939,33023,30562,36848,34979,24035,24847,34996,23114,23114,35032,29695,35054,23511,23511,35091,33296,35124,24296,28235,24361,36276,32772,35067,35189,27301,30855,24852,22452,35211,35237,35316,25500,35270,23405,24304,35304,29362,24036,23114,35332,19829,26577,26597,20211,23008,19876,20208,35368,28823,23920,32336,35405,20141,24569,31691,35421,35479,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35944,22795,21605,33647,35877,35513,30962,35529,34073,35557,24035,24035,20405,31107,23114,23114,23114,35590,34713,23511,23511,23511,35641,19803,29408,32937,25298,24035,35657,23115,27849,24760,35679,26205,22468,23511,35700,24907,24901,35075,31893,34980,24035,24035,24035,24035,23113,35009,23114,23114,23114,28618,35716,30970,23511,23511,23511,34585,23215,24035,24035,24035,24036,35735,23114,23114,23114,27105,35756,35790,23511,23511,23511,35254,35446,24035,24035,31223,35809,23114,23114,23036,36825,35830,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,31031,20355,19872,33903,23266,24036,23114,28686,19829,26577,26597,20211,23008,23424,20208,24711,31065,24486,26578,27685,20141,19773,35851,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36307,19288,21605,35494,19702,32618,33437,31507,29939,25117,24035,27939,24036,27869,23114,26829,23114,22420,23494,23511,33132,23511,28306,19803,24035,34832,24035,24035,26576,23114,25153,23114,23114,33811,22468,23511,23511,35911,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35929,19288,21605,25860,23112,36185,23511,36201,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,26748,24035,24035,24035,24035,24035,36249,23114,23114,23114,23114,28618,28835,23511,23511,23511,23511,34585,20402,24035,27151,24035,26760,23114,27989,23114,23114,36268,20271,23511,24436,23511,29703,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36292,19288,21605,36503,21922,32618,34534,31507,36522,24035,33793,24035,35864,23114,23114,36555,23417,22420,23511,23511,36574,26020,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,36592,24035,24035,36625,24035,24035,23113,23114,32961,23114,23114,29618,29700,23511,29086,23511,23511,34585,20402,36644,24035,24035,24036,29740,23114,23114,23114,29065,36663,31527,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,31451,23112,36684,23511,36700,29939,24035,24035,24035,30185,23114,23114,23114,27526,22420,23511,23511,23511,32865,28306,19803,36743,24035,27017,24035,26576,27535,23114,31432,23114,33811,22468,33271,23511,32128,23511,23512,24694,24035,27196,24035,24035,24035,23113,32459,23114,23114,23114,28618,29700,33829,36762,23511,23511,34585,20402,24035,36746,24035,29722,23114,23114,34437,23114,34907,20271,23511,23511,18801,23511,23206,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,36837,24035,24035,33739,23114,23114,25094,23511,23261,23628,24035,36780,23111,24073,19874,27078,35344,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22720,19288,36799,36866,17466,36890,36864,21991,22211,22987,17556,17575,22288,17486,17509,17525,18373,17631,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22705,19288,19457,36866,17466,36890,36866,19375,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36124,19288,36951,36866,17466,36890,36866,21991,22404,22987,17556,17575,22288,17486,17509,17525,18373,18567,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36979,36995,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18027,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,21529,24035,23112,23033,23511,31507,25377,24035,24035,24035,24036,23114,23114,23114,23114,37040,23511,23511,23511,23511,28086,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,37079,23511,23511,23511,23511,23512,34766,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,37112,37160,18469,36866,17466,36890,36866,17656,37174,22987,17556,17575,22288,17486,17509,17525,18373,18537,22984,17553,17572,22285,18780,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,53264,18,49172,57366,24,8192,28,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,0,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,127011,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,3002368,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2576384,2215936,2215936,2215936,2416640,2424832,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2543616,2215936,2215936,2215936,2215936,2215936,2629632,2215936,2617344,2215936,2215936,2215936,2215936,2215936,2215936,2691072,2215936,2707456,2215936,2715648,2215936,2723840,2764800,2215936,2215936,2797568,2215936,2822144,2215936,2215936,2854912,2215936,2215936,2215936,2912256,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,180224,0,0,2174976,0,0,2170880,2617344,2170880,2170880,2170880,2170880,2170880,2170880,2691072,2170880,2707456,2170880,2715648,2170880,2723840,2764800,2170880,2170880,2797568,2170880,2170880,2797568,2170880,2822144,2170880,2170880,2854912,2170880,2170880,2170880,2912256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2609152,2215936,2215936,2215936,2215936,2215936,2215936,2654208,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,184599,280,0,2174976,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,544,0,546,0,0,2179072,0,0,0,552,0,0,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2158592,2158592,2232320,2232320,0,2240512,2240512,0,0,0,644,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2711552,2170880,2170880,2170880,2170880,2170880,2760704,2768896,2789376,2813952,2170880,2170880,2170880,2875392,2904064,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,167936,0,0,0,0,2174976,0,0,2215936,2215936,2514944,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2592768,2215936,2215936,2215936,2215936,2215936,2215936,2215936,32768,0,0,0,0,0,2174976,32768,0,2633728,2215936,2215936,2215936,2215936,2215936,2215936,2711552,2215936,2215936,2215936,2215936,2215936,2760704,2768896,2789376,2813952,2215936,2215936,2215936,2875392,2904064,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,65819,2215936,2215936,3031040,2215936,3055616,2215936,2215936,2215936,2215936,3092480,2215936,2215936,3125248,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2170880,2170880,2494464,2170880,2170880,0,0,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2641920,2170880,2170880,2170880,2699264,2170880,2727936,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3026944,2170880,2170880,3063808,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,2379776,2215936,2523136,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2596864,2215936,2621440,2215936,2215936,2641920,2215936,2215936,0,0,0,0,0,0,2179072,548,0,0,0,0,287,2170880,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2215936,2215936,2699264,2215936,2727936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2879488,2215936,2916352,2215936,2215936,0,0,0,0,188416,0,2179072,0,0,0,0,0,287,2170880,0,2171019,2171019,2171019,2400395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3031179,2171019,3055755,2171019,2171019,2215936,3133440,2215936,2215936,2215936,3162112,2215936,2215936,3182592,3186688,2215936,0,0,0,0,0,0,0,0,0,0,2171019,2171019,2171019,2171019,2171019,2171019,2523275,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2597003,2171019,2621579,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,4337664,28,2170880,2170880,2170880,2629632,2170880,2170880,2170880,2170880,2719744,2744320,2170880,2170880,2170880,2834432,2838528,2170880,2908160,2170880,2170880,2936832,2215936,2215936,2215936,2215936,2719744,2744320,2215936,2215936,2215936,2834432,2838528,2215936,2908160,2215936,2215936,2936832,2215936,2215936,2985984,2215936,2994176,2215936,2215936,3014656,2215936,3059712,3076096,3088384,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2445312,2215936,2465792,2473984,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171019,2171019,2494603,2171019,2171019,2215936,2215936,2215936,3215360,0,0,0,0,0,0,0,0,0,0,0,0,0,2379776,2170880,2170880,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3016168,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,124,124,0,128,128,2170880,2170880,2170880,3215360,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2535424,2539520,2170880,2170880,2588672,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,0,2387968,2392064,2170880,2170880,2433024,2170880,2170880,2170880,3170304,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,2215936,2215936,2215936,2535424,2539520,2215936,2215936,2588672,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,136,0,2215936,2215936,2920448,2215936,2215936,2215936,2990080,2215936,2215936,2215936,2215936,3051520,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3108864,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3026944,2215936,2215936,3063808,2215936,2215936,3112960,2215936,2215936,2215936,3170304,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2537049,2539520,2170880,2170880,2588672,2170880,2170880,2170880,1508,2170880,2170880,2170880,1512,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2686976,2748416,2170880,2170880,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3121152,2170880,2170880,3145728,3158016,3166208,2170880,2420736,2428928,2170880,2478080,2170880,2170880,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2646016,2670592,0,0,3145728,3158016,3166208,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,0,2170880,2215936,2215936,2580480,2215936,2605056,2637824,2215936,2215936,2686976,2748416,2215936,2215936,2215936,2924544,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,286,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2387968,2392064,2170880,2170880,2433024,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,1625,2170880,2170880,2580480,2170880,2605056,2637824,2170880,647,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2686976,0,0,2748416,2170880,2170880,0,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,0,0,28,28,2170880,3141632,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2170880,2420736,2428928,2752512,2756608,0,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2170880,3141632,2170880,2170880,2490368,2215936,2490368,2215936,2215936,2215936,2547712,2555904,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,245760,0,3129344,2170880,2170880,2490368,2170880,2170880,2170880,0,0,2547712,2555904,2170880,2170880,2170880,0,0,0,0,0,0,0,0,0,2220032,0,0,45056,0,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2158592,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1482,97,97,97,97,97,97,97,1354,97,97,97,97,97,97,97,97,1148,97,97,97,97,97,97,97,2584576,2170880,2170880,1512,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2170880,2850816,2170880,2170880,2170880,3022848,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,287,2170880,2215936,3022848,2170880,2441216,2170880,2527232,0,0,2170880,2600960,2170880,0,2850816,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2596864,2170880,2621440,2170880,2170880,2641920,2170880,2170880,2170880,3022848,2170880,2519040,2170880,2170880,2170880,2170880,2170880,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2170880,2170880,2170880,2514944,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2519040,0,2024,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,2024,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,2170880,2215936,2650112,2965504,2215936,0,0,2170880,2650112,2965504,2170880,2551808,2170880,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,141,45,45,67,67,67,67,67,224,67,67,238,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,0,2551808,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2977792,2977792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53264,18,49172,57366,24,8192,29,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,49172,0,0,0,24,24,24,0,28,28,28,28,102432,127,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,0,0,0,2220032,110630,0,0,0,114730,106539,136,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,4256099,4256099,24,24,0,28,28,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,0,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,2170880,2547712,2555904,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2215936,2215936,543,543,545,545,0,0,2179072,0,550,551,551,0,287,2171166,2171166,18,0,0,0,0,0,0,0,0,2220032,0,0,645,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,149,2584576,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2519040,0,0,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,0,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,53264,18,49172,57366,24,155648,28,102432,155648,155687,114730,106539,0,0,155648,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,0,0,2220032,0,94208,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,208896,18,278528,24,24,0,28,28,53264,18,159765,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,0,28,139394,28,28,102432,131,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,32768,53264,0,18,18,24,24,0,28,28,0,546,0,0,2183168,0,0,552,832,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2170880,2170880,2170880,2170880,2654208,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,1084,0,1088,0,1092,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,937,0,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,644,0,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,826,0,828,0,0,2183168,0,0,830,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2170880,2170880,2633728,2170880,2170880,2170880,2170880,2170880,2170880,2711552,2170880,2170880,2170880,2170880,2170880,2760704,53264,18,49172,57366,24,8192,28,172066,172032,110630,172066,106539,0,0,172032,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,102432,0,98304,0,0,2220032,110630,0,0,0,0,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,45056,0,0,0,53264,18,49172,57366,25,8192,30,102432,0,110630,114730,106539,0,0,176219,53264,18,18,49172,0,57366,0,124,124,124,0,128,128,128,128,102432,128,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,546,0,0,2183168,0,65536,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2646016,2670592,2752512,2756608,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,65536,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,143,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,67,1824,67,1826,67,67,67,67,17,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,120,121,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,67,67,37139,37139,24853,24853,0,0,2179072,548,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,45,45,2033,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,0,369,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,978,0,546,70179,0,2183168,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1013,67,67,67,67,67,67,67,67,67,67,473,67,67,67,67,483,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,97,97,1359,97,97,97,67,67,1584,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,1659,45,45,45,45,45,45,45,45,45,1667,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,45,1668,45,45,45,45,67,67,1694,67,67,67,67,67,67,67,67,67,67,67,67,67,774,67,67,1713,97,97,97,97,97,97,97,0,97,97,1723,97,97,97,97,0,45,45,45,45,45,45,1538,45,45,45,45,45,1559,45,45,1561,45,45,45,45,45,45,45,687,45,45,45,45,45,45,45,45,448,45,45,45,45,45,45,67,67,67,67,1771,1772,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,97,67,67,67,67,67,1821,67,67,67,67,67,67,1827,67,67,67,0,0,0,0,0,0,97,97,1614,97,97,97,97,97,603,97,97,605,97,97,608,97,97,97,97,0,1532,45,45,45,45,45,45,45,45,45,45,450,45,45,45,45,67,67,97,97,97,97,97,97,0,0,1839,97,97,97,97,0,0,97,97,97,97,97,45,45,45,45,45,45,45,67,67,67,67,67,67,67,97,1883,97,1885,97,0,1888,0,97,97,0,97,97,1848,97,97,97,97,1852,45,45,45,45,45,45,45,384,391,45,45,45,45,45,45,45,385,45,45,45,45,45,45,45,45,1237,45,45,45,45,45,45,67,0,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,1951,45,45,45,45,45,45,45,45,67,67,67,67,1963,97,2023,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,1994,67,1995,67,67,67,67,67,67,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,0,0,0,0,2220032,110630,0,0,0,114730,106539,137,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2793472,2805760,2170880,2830336,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,67,67,37139,37139,24853,24853,0,0,281,549,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,2031,2032,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1769,67,0,546,70179,549,549,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,1858,45,641,0,0,0,0,41606,926,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,456,67,0,0,0,1313,0,0,0,1096,1319,0,0,0,0,97,97,97,97,97,97,97,97,1110,97,97,97,97,67,67,67,67,1301,1476,0,0,0,0,1307,1478,0,0,0,0,0,0,0,0,97,97,97,97,1486,97,1487,97,1313,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,67,67,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,97,45,1853,45,1855,45,45,45,45,53264,18,49172,57366,26,8192,31,102432,0,110630,114730,106539,0,0,225368,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,18,49172,163840,57366,0,24,24,229376,0,28,28,28,229376,102432,0,0,0,0,2220167,110630,0,0,0,114730,106539,0,2171019,2171019,2171019,2171019,2592907,2171019,2171019,2171019,2171019,2633867,2171019,2171019,2171019,2171019,2171019,2171019,2654347,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3117195,2171019,2171019,2171019,2171019,2240641,0,0,0,0,0,0,0,0,368,0,140,2171019,2171019,2171019,2416779,2424971,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2617483,2171019,2171019,2642059,2171019,2171019,2171019,2699403,2171019,2728075,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3215499,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2171019,2822283,2171019,2171019,2855051,2171019,2171019,2171019,2912395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3002507,2171019,2171019,2215936,2215936,2494464,2215936,2215936,2215936,2171166,2171166,2416926,2425118,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2576670,2171166,2617630,2171166,2171166,2171166,2171166,2171166,2171166,2691358,2171166,2707742,2171166,2715934,2171166,2724126,2765086,2171166,2171166,2797854,2171166,2822430,2171166,2171166,2855198,2171166,2171166,2171166,2912542,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2793758,2806046,2171166,2830622,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3109150,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2543902,2171166,2171166,2171166,2171166,2171166,2629918,2793611,2805899,2171019,2830475,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,0,546,0,0,2183168,0,0,552,0,2171166,2171166,2171166,2400542,2171166,2171166,2171166,0,2171166,2171166,2171166,0,2171166,2920734,2171166,2171166,2171166,2990366,2171166,2171166,2171166,2171166,3117342,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,0,53264,0,18,18,4329472,2232445,0,2240641,4337664,2711691,2171019,2171019,2171019,2171019,2171019,2760843,2769035,2789515,2814091,2171019,2171019,2171019,2875531,2904203,2171019,2171019,3092619,2171019,2171019,3125387,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3199115,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2793472,2805760,2215936,2830336,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2494464,2170880,2170880,2171166,2171166,2634014,2171166,2171166,2171166,2171166,2171166,2171166,2711838,2171166,2171166,2171166,2171166,2171166,2760990,2769182,2789662,2814238,2171166,2171166,2171166,2875678,2904350,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3199262,2171166,0,0,0,0,0,0,0,0,0,2379915,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2445451,2171019,2465931,2474123,2171019,2171019,3113099,2171019,2171019,3133579,2171019,2171019,2171019,3162251,2171019,2171019,3182731,3186827,2171019,2379776,2879627,2171019,2916491,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3027083,2171019,2171019,3063947,2699550,2171166,2728222,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2879774,2171166,2916638,2171166,2171166,2171166,2171166,2171166,2609438,2171166,2171166,2171166,2171166,2171166,2171166,2654494,2171166,2171166,2171166,2171166,2171166,2445598,2171166,2466078,2474270,2171166,2171166,2171166,2171166,2171166,2171166,2523422,2171019,2437259,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2543755,2171019,2171019,2171019,2584715,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2908299,2171019,2171019,2936971,2171019,2171019,2986123,2171019,2994315,2171019,2171019,3014795,2171019,3059851,3076235,3088523,2171166,2171166,2986270,2171166,2994462,2171166,2171166,3014942,2171166,3059998,3076382,3088670,2171166,2171166,2171166,2171166,2171166,2171166,3027230,2171166,2171166,3064094,2171166,2171166,3113246,2171166,2171166,3133726,2506891,2171019,2171019,2171019,2535563,2539659,2171019,2171019,2588811,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2691211,2171019,2707595,2171019,2715787,2171019,2723979,2764939,2171019,2171019,2797707,2215936,2215936,3170304,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2453790,2457886,2171166,2171166,2171166,2486558,2171166,2171166,2507038,2171166,2171166,2171166,2535710,2539806,2171166,2171166,2588958,2171166,2171166,2171166,2171166,2515230,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2593054,2171166,2171166,2171166,2171166,3051806,2171166,2171166,2171166,2171166,2171166,2171166,3170590,0,2388107,2392203,2171019,2171019,2433163,2171019,2461835,2171019,2171019,2171019,2510987,2171019,2171019,2171019,2171019,2580619,2171019,2605195,2637963,2171019,2171019,2171019,2920587,2171019,2171019,2171019,2990219,2171019,2171019,2171019,2171019,3051659,2171019,2171019,2171019,2453643,2457739,2171019,2171019,2171019,2171019,2171019,2171019,2515083,2171019,2171019,2171019,2171019,2646155,2670731,2752651,2756747,2846859,2961547,2171019,2998411,2171019,3010699,2171019,2171019,2687115,2748555,2171019,2171019,2171019,2924683,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3121291,2171019,2171019,2171019,3170443,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,3145867,3158155,3166347,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,553,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2388254,2392350,2171166,2171166,2433310,2171166,2461982,2171166,2171166,2171166,2511134,2171166,2171166,0,2171166,2171166,2580766,2171166,2605342,2638110,2171166,2171166,2171166,2171166,3031326,2171166,3055902,2171166,2171166,2171166,2171166,3092766,2171166,2171166,3125534,2171166,2171166,2171166,3162398,2171166,2171166,3182878,3186974,2171166,0,0,0,2171019,2171019,2171019,2171019,3109003,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2171166,2687262,0,0,2748702,2171166,2171166,0,2171166,2924830,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2597150,2171166,2621726,2171166,2171166,2642206,2171166,2171166,2171166,2171166,3121438,2171166,2171166,3146014,3158302,3166494,2171019,2420875,2429067,2171019,2478219,2171019,2171019,2171019,2171019,2547851,2556043,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3129483,2215936,2171019,3141771,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2171166,2421022,2429214,2171166,2478366,2171166,2171166,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2646302,2670878,0,0,0,0,37,110630,0,0,0,114730,106539,0,45,45,45,45,45,1405,1406,45,45,45,45,1409,45,45,45,45,45,1415,45,45,45,45,45,45,45,45,45,45,1238,45,45,45,45,67,2752798,2756894,0,2847006,2961694,2171166,2998558,2171166,3010846,2171166,2171166,2171166,3141918,2171019,2171019,2490507,3129344,2171166,2171166,2490654,2171166,2171166,2171166,0,0,2547998,2556190,2171166,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,167,45,45,45,45,185,187,45,45,198,45,45,0,2171166,2171166,2171166,2171166,2171166,2171166,3129630,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2576523,2171019,2171019,2171019,2171019,2171019,2609291,2171019,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2171166,2171166,2494750,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,147,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,3002654,2171166,2171166,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2175257,0,0,2584862,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2171166,2171019,2441355,2171019,2527371,2171019,2601099,2171019,2850955,2171019,2171019,2171019,3022987,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,69632,287,2170880,2215936,3022848,2171166,2441502,2171166,2527518,0,0,2171166,2601246,2171166,0,2851102,2171166,2171166,2171166,2171166,2720030,2744606,2171166,2171166,2171166,2834718,2838814,2171166,2908446,2171166,2171166,2937118,3023134,2171019,2519179,2171019,2171019,2171019,2171019,2171019,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,3215646,0,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2486411,2171019,2171019,2171019,2629771,2171019,2171019,2171019,2171019,2719883,2744459,2171019,2171019,2171019,2834571,2838667,2171019,2519326,0,0,2171166,2171166,0,2171166,2171166,2171166,2396299,2171019,2171019,2171019,2171019,3018891,2396160,2215936,2215936,2215936,2215936,3018752,2396446,0,0,2171166,2171166,2171166,2171166,3019038,2171019,2650251,2965643,2171019,2215936,2650112,2965504,2215936,0,0,2171166,2650398,2965790,2171166,2551947,2171019,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,144,45,45,67,67,67,67,67,228,67,67,67,67,67,67,67,67,67,1929,97,97,97,97,0,0,0,2552094,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2977931,2977792,2978078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,1321,97,131072,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,28,28,0,140,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2584576,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,140,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3002368,2170880,2170880,2215936,2215936,2494464,2215936,2215936,2215936,2215936,2215936,2215936,3215360,544,0,0,0,544,0,546,0,0,0,546,0,0,2183168,0,0,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,0,2170880,2170880,2170880,0,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,552,0,0,0,552,0,287,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,644,0,2215936,2215936,3170304,544,0,546,0,552,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,140,0,0,53264,18,49172,57366,24,8192,28,102432,249856,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,151640,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640,53264,18,49172,57366,24,8192,28,102432,253952,110630,114730,106539,0,0,32856,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,192512,53264,18,18,49172,0,57366,0,2232445,184320,2232445,0,2240641,2240641,184320,2240641,102432,0,0,0,221184,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3108864,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,0,0,0,45056,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,127,127,53264,18,49172,258071,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,204800,53264,18,49172,57366,24,27,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,33,0,33,33,33,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,0,0,0,0,0,0,0,0,0,0,139,2170880,2170880,2170880,2416640,67,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,0,0,97,97,0,97,97,97,45,2030,45,45,45,45,67,1573,67,67,67,67,67,67,67,67,67,67,67,1699,67,67,67,67,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,97,97,97,1355,97,97,97,1358,97,97,97,641,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,45,1187,45,45,45,45,45,0,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,592,97,97,97,97,97,97,97,97,97,97,1531,45,45,45,45,45,45,45,45,45,45,45,45,1680,45,45,45,641,0,924,0,925,41606,0,0,0,0,45,45,45,45,45,45,1186,45,45,45,45,45,45,67,67,37139,37139,24853,24853,0,70179,282,0,0,65820,65820,369,287,97,0,0,97,97,0,97,2028,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1767,67,67,67,0,0,0,0,0,0,1612,97,97,97,97,97,97,0,1785,97,97,97,97,97,97,0,0,97,97,97,97,1790,97,0,0,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,241664,2387968,2392064,2170880,2170880,2433024,53264,19,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,274432,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,270336,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,1134711,53264,18,49172,57366,24,8192,28,102432,0,1126440,1126440,1126440,0,0,1126400,53264,18,49172,57366,24,8192,28,102432,36,110630,114730,106539,0,0,217088,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,94,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,96,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,24666,53264,18,18,49172,0,57366,0,24,24,24,126,28,28,28,28,102432,53264,122,123,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,2170880,2170880,4256099,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1319,0,0,0,0,97,97,97,97,97,97,97,1109,97,97,97,97,1113,132,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,146,150,45,45,45,45,45,175,45,180,45,186,45,189,45,45,203,67,256,67,67,270,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,293,297,97,97,97,97,97,322,97,327,97,333,97,0,0,97,2026,0,2027,97,97,45,45,45,45,45,45,67,67,67,1685,67,67,67,67,67,67,67,1690,67,336,97,97,350,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,2424832,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2617344,2170880,45,439,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,525,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,97,622,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,1527,369,648,45,45,45,45,45,45,45,45,45,659,45,45,45,45,408,45,45,45,45,45,45,45,45,45,45,45,1239,45,45,45,67,729,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,762,67,746,67,67,67,67,67,67,67,67,67,759,67,67,67,67,0,0,0,1477,0,1086,0,0,0,1479,0,1090,67,67,796,67,67,799,67,67,67,67,67,67,67,67,67,67,67,67,1291,67,67,67,811,67,67,67,67,67,816,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,833,97,97,97,97,97,97,97,97,1380,0,0,0,45,45,45,45,45,1185,45,45,45,45,45,45,45,386,45,45,45,45,45,45,45,45,1810,45,45,45,45,45,45,67,97,97,844,97,97,97,97,97,97,97,97,97,857,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,45,45,97,97,97,894,97,97,897,97,97,97,97,97,97,97,97,97,0,0,0,1382,45,45,45,97,909,97,97,97,97,97,914,97,97,97,97,97,97,97,923,67,67,1079,67,67,67,67,67,37689,1085,25403,1089,66365,1093,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,148,1114,97,97,97,97,97,97,1122,97,97,97,97,97,97,97,97,97,606,97,97,97,97,97,97,97,97,97,97,1173,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,145,45,45,67,67,67,67,67,1762,67,67,67,1766,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,1934,67,67,1255,67,67,67,67,67,67,67,67,67,67,67,67,67,1035,67,67,67,67,67,67,1297,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,97,1327,97,97,97,97,97,97,97,97,97,97,97,97,33344,97,97,97,1335,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,97,97,1377,97,97,97,97,97,97,0,1179,0,45,45,45,45,670,45,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,67,67,1438,67,67,1442,67,67,67,67,67,67,67,67,67,67,67,67,1592,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,0,0,1305,0,0,0,0,0,1311,0,0,0,1317,0,0,0,0,0,0,0,97,97,1322,97,97,1491,97,97,1495,97,97,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,1551,45,1553,45,1504,97,97,97,97,97,97,97,97,97,97,1513,97,97,97,97,0,45,45,45,45,1536,45,45,45,45,1540,45,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,67,67,67,1700,67,67,67,97,1648,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,1541,0,97,97,97,97,0,1940,0,97,97,97,97,97,97,45,45,2011,45,45,45,2015,67,67,2017,67,67,67,2021,97,67,67,812,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,97,97,910,97,97,97,97,97,97,97,97,97,97,97,923,0,0,0,45,45,45,45,1184,45,45,45,45,1188,45,45,45,45,1414,45,45,45,1417,45,1419,45,45,45,45,45,443,45,45,45,45,45,45,453,45,45,67,67,67,67,1244,67,67,67,67,1248,67,67,67,67,67,67,67,0,37139,24853,0,0,0,282,41098,65820,97,1324,97,97,97,97,1328,97,97,97,97,97,97,97,97,97,0,0,930,45,45,45,45,97,97,97,97,1378,97,97,97,97,0,1179,0,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,45,975,45,45,45,45,67,67,1923,67,1925,67,67,1927,67,97,97,97,97,97,0,0,97,97,97,97,1985,45,45,45,45,45,45,1560,45,45,45,45,45,45,45,45,45,946,45,45,950,45,45,45,0,97,97,97,1939,0,0,0,97,1943,97,97,1945,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,990,45,45,45,67,257,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,337,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,370,2170880,2170880,2170880,2416640,401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,459,461,67,67,67,67,67,67,67,67,475,67,480,67,67,67,67,67,67,1054,67,67,67,67,67,67,67,67,67,67,1698,67,67,67,67,67,484,67,67,487,67,67,67,67,67,67,67,67,67,67,67,67,67,1459,67,67,97,556,558,97,97,97,97,97,97,97,97,572,97,577,97,97,0,0,1896,97,97,97,97,97,97,1903,45,45,45,45,983,45,45,45,45,988,45,45,45,45,45,45,1195,45,45,45,45,45,45,45,45,45,45,1549,45,45,45,45,45,581,97,97,584,97,97,97,97,97,97,97,97,97,97,97,97,97,1153,97,97,369,0,45,45,45,45,45,45,45,45,45,45,45,662,45,45,45,684,45,45,45,45,45,45,45,45,45,45,45,45,1004,45,45,45,67,67,67,749,67,67,67,67,67,67,67,67,67,761,67,67,67,67,67,67,1068,67,67,67,1071,67,67,67,67,1076,794,795,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,544,97,97,97,97,847,97,97,97,97,97,97,97,97,97,859,97,0,0,2025,97,20480,97,97,2029,45,45,45,45,45,45,67,67,67,1575,67,67,67,67,67,67,67,67,67,1775,67,67,67,97,97,97,97,892,893,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1515,97,993,994,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,992,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,67,1607,67,67,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,97,97,596,97,45,1556,1557,45,45,45,45,45,45,45,45,45,45,45,45,45,45,696,45,1596,1597,67,67,67,67,67,67,67,67,67,67,67,67,67,67,499,67,97,97,97,1621,97,97,97,97,97,97,97,97,97,97,97,97,97,1346,97,97,97,97,1740,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,45,45,67,97,97,97,97,97,97,1836,0,97,97,97,97,97,0,0,97,97,97,1984,97,45,45,45,45,45,45,1808,45,45,45,45,45,45,45,45,67,739,67,67,67,67,67,744,45,45,1909,45,45,45,45,45,45,45,67,1917,67,1918,67,67,67,67,67,67,1247,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,1922,67,67,67,67,67,67,67,97,1930,97,1931,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,1576,67,67,67,67,1580,67,67,0,97,97,1938,97,0,0,0,97,97,97,97,97,97,45,45,45,699,45,45,45,704,45,45,45,45,45,45,45,45,987,45,45,45,45,45,45,45,67,67,97,97,97,97,0,0,97,97,97,2006,97,97,97,97,0,45,1533,45,45,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,722,723,45,45,45,45,45,45,2045,67,67,67,2047,0,0,97,97,97,2051,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,409,45,45,45,45,45,45,45,45,45,1957,45,67,67,67,67,67,1836,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,45,67,67,67,1761,67,67,67,1764,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,45,45,420,45,45,422,45,45,425,45,45,45,45,45,45,45,387,45,45,45,45,397,45,45,45,67,460,67,67,67,67,67,67,67,67,67,67,67,67,67,67,515,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,97,0,2039,97,97,97,97,97,45,45,45,45,1426,45,45,45,67,67,67,67,67,67,67,67,67,1689,67,67,67,97,557,97,97,97,97,97,97,97,97,97,97,97,97,97,97,612,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,896,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,97,45,939,45,45,45,45,943,45,45,45,45,45,45,45,45,45,45,1916,67,67,67,67,67,45,67,67,67,67,67,67,67,1015,67,67,67,67,1019,67,67,67,67,67,67,1271,67,67,67,67,67,67,1277,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,67,67,67,804,67,67,67,67,67,1077,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2543616,2170880,2170880,2170880,2170880,2170880,2629632,1169,97,1171,97,97,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,936,45,45,67,67,214,67,220,67,67,233,67,243,67,248,67,67,67,67,67,67,1298,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,1617,97,0,0,0,45,45,45,1183,45,45,45,45,45,45,45,45,45,393,45,45,45,45,45,45,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,1281,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,776,1323,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,907,45,1412,45,45,45,45,45,45,45,1418,45,45,45,45,45,45,686,45,45,45,690,45,45,695,45,45,67,67,67,67,67,1465,67,67,67,67,67,67,67,67,67,67,67,97,97,97,1712,97,97,97,97,1741,97,97,97,45,45,45,45,45,45,45,45,45,426,45,45,45,45,45,45,67,67,67,1924,67,67,67,67,67,97,97,97,97,97,0,0,97,97,1983,97,97,45,45,1987,45,1988,45,0,97,97,97,97,0,0,0,1942,97,97,97,97,97,45,45,45,700,45,45,45,45,45,45,45,45,45,45,711,45,45,153,45,45,166,45,176,45,181,45,45,188,191,196,45,204,255,258,263,67,271,67,67,0,37139,24853,0,0,0,282,41098,65820,97,97,97,294,97,300,97,97,313,97,323,97,328,97,97,335,338,343,97,351,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,41098,0,140,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,45,1411,67,67,486,67,67,67,67,67,67,67,67,67,67,67,67,67,1251,67,67,501,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,67,67,67,67,1443,67,67,67,67,67,67,67,67,67,67,1263,67,67,67,67,67,97,97,583,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1526,97,598,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,0,97,97,1796,97,97,97,97,97,97,97,45,45,45,45,45,1744,45,45,45,369,0,651,45,653,45,654,45,656,45,45,45,660,45,45,45,45,1558,45,45,45,45,45,45,45,45,1566,45,45,681,45,683,45,45,45,45,45,45,45,45,691,692,694,45,45,45,716,45,45,45,45,45,45,45,45,45,45,45,45,709,45,45,712,45,714,45,45,45,718,45,45,45,45,45,45,45,726,45,45,45,733,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,747,67,67,67,67,67,67,67,67,67,760,67,67,67,0,0,0,0,0,0,97,1613,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,67,764,67,67,67,67,768,67,770,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,1977,67,778,779,781,67,67,67,67,67,67,788,789,67,67,792,793,67,67,67,813,67,67,67,67,67,67,67,67,67,824,37689,544,25403,546,70179,0,0,66365,66365,552,0,836,97,838,97,839,97,841,97,97,97,845,97,97,97,97,97,97,97,97,97,858,97,97,0,1728,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,1802,45,97,97,862,97,97,97,97,866,97,868,97,97,97,97,97,97,0,0,97,97,1788,97,97,97,0,0,97,97,876,877,879,97,97,97,97,97,97,886,887,97,97,890,891,97,97,97,97,97,97,97,899,97,97,97,903,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,1646,97,97,97,97,911,97,97,97,97,97,97,97,97,97,922,923,45,955,45,957,45,45,45,45,45,45,45,45,45,45,45,45,195,45,45,45,45,45,981,982,45,45,45,45,45,45,989,45,45,45,45,45,170,45,45,45,45,45,45,45,45,45,45,411,45,45,45,45,45,67,1023,67,67,67,67,67,67,1031,67,1033,67,67,67,67,67,67,67,817,819,67,67,67,67,67,37689,544,67,1065,67,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,1078,67,67,1081,1082,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2437406,2171166,2171166,97,1115,97,1117,97,97,97,97,97,97,1125,97,1127,97,97,97,0,97,97,97,0,97,97,97,97,1644,97,97,97,0,97,97,97,0,97,97,1642,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,97,316,97,97,97,97,97,97,97,97,97,1159,97,97,97,97,97,97,97,97,97,97,97,97,97,1502,97,97,97,97,97,1172,97,97,1175,1176,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,935,45,45,45,1233,45,45,45,1236,45,45,45,45,45,45,45,67,67,67,67,67,67,1873,67,67,45,45,1218,45,45,45,1223,45,45,45,45,45,45,45,1230,45,45,67,67,215,219,222,67,230,67,67,244,246,249,67,67,67,67,67,67,1882,97,97,97,97,0,0,0,97,97,97,97,97,97,45,1904,45,1905,45,67,67,67,67,67,1258,67,1260,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,67,67,67,1283,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,67,818,67,67,67,67,67,67,37689,544,67,67,1295,67,67,67,67,67,67,67,67,0,0,0,0,0,0,2174976,0,0,97,97,97,1326,97,97,97,97,97,97,97,97,97,97,97,97,97,1514,97,97,97,97,97,1338,97,1340,97,97,97,97,97,97,97,97,97,97,97,1500,97,97,1503,97,1363,97,97,97,97,97,97,97,1370,97,97,97,97,97,97,97,563,97,97,97,97,97,97,578,97,1375,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,685,45,45,45,45,45,45,45,45,45,45,45,1003,45,45,45,45,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1778,97,97,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,609,97,97,97,45,1542,45,45,45,45,45,45,45,1548,45,45,45,45,45,1554,45,1570,1571,45,67,67,67,67,67,67,1578,67,67,67,67,67,67,67,1055,67,67,67,67,67,1061,67,67,1582,67,67,67,67,67,67,67,1588,67,67,67,67,67,1594,67,67,67,67,67,97,2038,0,97,97,97,97,97,2044,45,45,45,995,45,45,45,45,1e3,45,45,45,45,45,45,45,1809,45,1811,45,45,45,45,45,67,1610,1611,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,1618,1647,1649,97,97,97,1652,97,1654,1655,97,0,45,45,45,1658,45,45,67,67,216,67,67,67,67,234,67,67,67,67,252,254,1845,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,945,45,947,45,45,45,45,45,67,67,67,67,67,1881,97,97,97,97,97,0,0,0,97,97,97,97,97,1902,45,45,45,45,45,45,1908,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1921,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,0,97,1937,97,97,1940,0,0,97,97,97,97,97,97,1947,1948,1949,45,45,45,1952,45,1954,45,45,45,45,1959,1960,1961,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,67,67,67,757,67,67,67,67,67,67,1964,67,1966,67,67,67,67,1971,1972,1973,97,0,0,0,97,97,1104,97,97,97,97,97,97,97,97,97,97,884,97,97,97,889,97,97,1978,97,0,0,1981,97,97,97,97,45,45,45,45,45,45,736,45,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,45,67,67,67,67,0,2049,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,933,45,45,45,45,1234,45,45,45,45,45,45,45,45,45,45,67,97,97,288,97,97,97,97,97,97,317,97,97,97,97,97,97,0,0,97,1787,97,97,97,97,0,0,45,45,378,45,45,45,45,45,390,45,45,45,45,45,45,45,424,45,45,45,431,433,45,45,45,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,67,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,97,97,632,97,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,97,97,855,97,97,97,97,67,97,97,97,97,97,97,1837,0,97,97,97,97,97,0,0,0,1897,97,97,97,97,97,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,97,2010,45,45,45,45,45,45,2016,67,67,67,67,67,67,2022,45,2046,67,67,67,0,0,2050,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,932,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,45,45,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,701,702,45,45,705,706,45,45,45,45,45,45,703,45,45,45,45,45,45,45,45,45,719,45,45,45,45,45,725,45,45,45,369,649,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1216,25403,546,70179,0,0,66365,66365,552,834,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,97,1799,97,97,45,45,45,1569,45,45,45,1572,67,67,67,67,67,67,67,67,67,67,67,0,0,0,1306,0,67,67,67,1598,67,67,67,67,67,67,67,67,1606,67,67,1609,97,97,97,1650,97,97,1653,97,97,97,0,45,45,1657,45,45,45,1206,45,45,45,45,45,45,45,45,45,45,45,45,1421,45,45,45,1703,67,67,67,67,67,67,67,67,67,67,97,97,1711,97,97,0,1895,0,97,97,97,97,97,97,45,45,45,45,45,958,45,960,45,45,45,45,45,45,45,45,1913,45,45,1915,67,67,67,67,67,67,67,466,67,67,67,67,67,67,481,67,45,1749,45,45,45,45,45,45,45,45,1755,45,45,45,45,45,173,45,45,45,45,45,45,45,45,45,45,974,45,45,45,45,45,67,67,67,67,67,1773,67,67,67,67,67,67,67,97,97,97,97,1886,0,0,0,97,97,67,2035,2036,67,67,97,0,0,97,2041,2042,97,97,45,45,45,45,1662,45,45,45,45,45,45,45,45,45,45,45,1397,45,45,45,45,151,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,437,205,45,67,67,67,218,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,67,97,97,97,97,298,97,97,97,97,97,97,97,97,97,97,97,870,97,97,97,97,97,97,97,97,352,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,365,0,41098,0,140,45,45,45,45,45,1427,45,45,67,67,67,67,67,67,67,1435,520,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1037,617,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,923,45,1232,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,1919,67,1759,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1021,45,154,45,162,45,45,45,45,45,45,45,45,45,45,45,45,964,45,45,45,206,45,67,67,67,67,221,67,229,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,67,67,755,67,67,67,67,67,67,67,67,785,67,67,67,67,67,67,67,67,802,67,67,67,807,67,67,67,97,97,97,97,353,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,366,0,0,0,140,2170880,2170880,2170880,2416640,402,45,45,45,45,45,45,45,410,45,45,45,45,45,45,45,674,45,45,45,45,45,45,45,45,389,45,394,45,45,398,45,45,45,45,441,45,45,45,45,45,447,45,45,45,454,45,45,67,67,67,67,67,67,67,67,67,67,67,1768,67,67,67,67,67,488,67,67,67,67,67,67,67,496,67,67,67,67,67,67,67,1774,67,67,67,67,67,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,97,97,67,67,523,67,67,527,67,67,67,67,67,533,67,67,67,540,97,97,97,585,97,97,97,97,97,97,97,593,97,97,97,97,97,97,1784,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,0,0,18,18,24,24,0,28,28,97,97,620,97,97,624,97,97,97,97,97,630,97,97,97,637,713,45,45,45,45,45,45,721,45,45,45,45,45,45,45,45,1197,45,45,45,45,45,45,45,45,730,732,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1581,67,45,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,67,775,67,67,67,67,1066,67,67,67,67,67,67,67,67,67,67,67,67,479,67,67,67,67,67,67,1080,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,287,0,0,0,287,0,2379776,2170880,2170880,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,97,920,97,97,0,0,0,0,45,1181,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,45,1219,45,45,45,45,45,45,1226,45,45,45,45,45,45,959,45,45,45,45,45,45,45,45,45,184,45,45,45,45,202,45,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1266,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1279,67,67,67,67,67,272,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,67,1286,67,67,67,67,67,67,67,67,67,1293,67,67,67,1296,67,67,67,67,67,67,67,0,0,0,0,0,281,94,0,0,97,97,97,1366,97,97,97,97,97,97,97,97,97,1373,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,0,97,1376,97,97,97,97,97,97,97,0,0,0,45,45,1384,45,45,67,208,67,67,67,67,67,67,237,67,67,67,67,67,67,67,1069,1070,67,67,67,67,67,67,67,0,37140,24854,0,0,0,0,41098,65821,45,1423,45,45,45,45,45,45,67,67,1431,67,67,67,67,67,67,67,1083,37689,0,25403,0,66365,0,0,0,1436,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1830,67,1452,1453,67,67,67,67,1456,67,67,67,67,67,67,67,67,67,771,67,67,67,67,67,67,1461,67,67,67,1464,67,1466,67,67,67,67,67,67,1470,67,67,67,67,67,67,1587,67,67,67,67,67,67,67,67,1595,1489,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1129,97,1505,1506,97,97,97,97,1510,97,97,97,97,97,97,97,97,97,1163,1164,97,97,97,97,97,1516,97,97,97,1519,97,1521,97,97,97,97,97,97,1525,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,67,67,67,1600,67,67,67,67,67,67,67,67,67,67,67,1301,0,0,0,1307,97,97,1620,97,97,97,97,97,97,97,1627,97,97,97,97,97,97,913,97,97,97,97,919,97,97,97,0,97,97,97,1781,97,97,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,1792,1860,45,1862,1863,45,1865,45,67,67,67,67,67,67,67,67,1875,67,1877,1878,67,1880,67,97,97,97,97,97,1887,0,1889,97,97,18,0,139621,0,0,0,0,0,0,364,237568,0,367,0,97,1893,0,0,0,97,1898,1899,97,1901,97,45,45,45,45,45,2014,45,67,67,67,67,67,2020,67,97,1989,45,1990,45,45,45,67,67,67,67,67,67,1996,67,1997,67,67,67,67,67,273,67,0,37139,24853,0,0,0,0,41098,65820,67,67,97,97,97,97,0,0,97,97,2005,0,97,2007,97,97,18,0,139621,0,0,0,642,0,133,364,0,0,367,41606,0,97,97,2056,2057,0,2059,45,67,0,97,45,67,0,97,45,45,67,209,67,67,67,223,67,67,67,67,67,67,67,67,67,786,67,67,67,791,67,67,45,45,940,45,45,45,45,45,45,45,45,45,45,45,45,45,45,727,45,45,67,67,67,67,67,67,67,67,1016,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,142,45,45,67,210,67,67,67,225,67,67,239,67,67,67,250,67,67,67,67,67,464,67,67,67,67,67,476,67,67,67,67,67,67,67,1709,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,1843,0,67,259,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,289,97,97,97,303,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,97,339,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,0,358,0,0,0,0,0,0,41098,0,140,45,45,45,45,45,1953,45,1955,45,45,45,67,67,67,67,67,67,67,1687,1688,67,67,67,67,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1203,45,458,67,67,67,67,67,67,67,67,67,470,477,67,67,67,67,67,67,67,1970,97,97,97,1974,0,0,0,97,1103,97,97,97,97,97,97,97,97,97,97,97,1372,97,97,97,97,67,522,67,67,67,67,67,67,67,67,67,67,67,536,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,1701,67,555,97,97,97,97,97,97,97,97,97,567,574,97,97,97,97,97,301,97,309,97,97,97,97,97,97,97,97,97,900,97,97,97,905,97,97,97,619,97,97,97,97,97,97,97,97,97,97,97,633,97,97,18,0,139621,0,0,362,0,0,0,364,0,0,367,41606,369,649,45,45,45,45,45,45,45,45,45,45,45,45,663,664,67,67,67,67,750,751,67,67,67,67,758,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,67,1057,1058,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,67,67,67,67,67,67,512,67,67,67,97,97,97,97,895,97,97,97,97,97,97,97,97,97,97,97,902,97,97,97,97,67,67,1051,67,67,67,67,67,67,67,67,67,67,67,1062,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1302,0,0,0,1308,97,97,97,97,1145,97,97,97,97,97,97,97,97,97,97,97,1139,97,97,97,97,1156,97,97,97,97,97,97,1161,97,97,97,97,97,1166,97,97,18,640,139621,0,641,0,0,0,0,364,0,0,367,41606,67,67,67,67,1257,67,67,67,67,67,67,67,67,67,67,67,0,0,1305,0,0,97,97,1337,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1630,97,67,1474,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,2380062,2171166,2171166,97,1529,97,97,0,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,45,45,67,67,67,67,1707,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1891,1739,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,1198,45,1200,45,45,45,45,97,97,1894,0,0,97,97,97,97,97,97,45,45,45,45,45,672,45,45,45,45,45,45,45,45,45,45,45,1420,45,45,45,45,67,67,1965,67,1967,67,67,67,97,97,97,97,0,1976,0,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,97,97,1979,0,0,97,1982,97,97,97,1986,45,45,45,45,45,735,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,1770,67,67,2e3,97,97,97,2002,0,97,97,97,0,97,97,97,97,97,97,1798,97,97,97,45,45,45,2034,67,67,67,67,97,0,0,2040,97,97,97,97,45,45,45,45,1752,45,45,45,1753,1754,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,675,45,45,45,45,45,45,438,45,45,45,45,45,445,45,45,45,45,45,45,45,45,67,1430,67,67,67,67,67,67,67,67,67,524,67,67,67,67,67,531,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1096,97,97,97,621,97,97,97,97,97,628,97,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,665,45,45,45,45,45,45,45,45,45,676,45,45,45,45,45,942,45,45,45,45,45,45,45,45,45,45,707,708,45,45,45,45,763,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,809,810,67,67,67,67,783,67,67,67,67,67,67,67,67,67,67,67,0,1303,0,0,0,97,861,97,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,45,45,956,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,67,67,67,67,1027,67,67,67,67,1032,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1097,1064,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,67,1098,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,331,97,97,97,97,1158,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,1309,0,0,0,1315,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1374,97,45,45,1543,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1240,67,67,1583,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1252,67,97,97,97,1635,97,97,97,0,97,97,97,97,97,97,97,97,1800,97,45,45,45,97,97,1793,97,97,97,97,97,97,97,97,97,97,45,45,45,1743,45,45,45,1746,45,0,97,97,97,97,97,1851,97,45,45,45,45,1856,45,45,45,45,1864,45,45,67,67,1869,67,67,67,67,1874,67,0,97,97,45,67,2058,97,45,67,0,97,45,67,0,97,45,45,67,211,67,67,67,67,67,67,240,67,67,67,67,67,67,67,1444,67,67,67,67,67,67,67,67,67,509,67,67,67,67,67,67,67,67,67,268,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,290,97,97,97,305,97,97,319,97,97,97,330,97,97,18,640,139621,0,641,0,0,0,0,364,0,643,367,41606,97,97,348,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,45,45,380,45,45,45,45,45,45,395,45,45,45,400,369,0,45,45,45,45,45,45,45,45,658,45,45,45,45,45,972,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,745,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,67,67,37689,1086,25403,1090,66365,1094,0,0,97,843,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,1121,97,97,97,97,1126,97,97,97,97,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1400,45,67,67,67,1011,67,67,67,67,67,67,67,67,67,67,67,0,1304,0,0,0,1190,45,45,1193,1194,45,45,45,45,45,1199,45,1201,45,45,45,45,1911,45,45,45,45,45,67,67,67,67,67,67,67,1579,67,67,67,67,45,1205,45,45,45,45,45,45,45,45,1211,45,45,45,45,45,984,45,45,45,45,45,45,45,45,45,45,45,1550,45,45,45,45,45,1217,45,45,45,45,45,45,1225,45,45,45,45,1229,45,45,45,1388,45,45,45,45,45,45,1396,45,45,45,45,45,444,45,45,45,45,45,45,45,45,45,67,67,1574,67,67,67,67,67,67,67,67,67,67,1590,67,67,67,67,67,1254,67,67,67,67,67,1259,67,1261,67,67,67,67,1265,67,67,67,67,67,67,1708,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,0,0,67,67,67,67,1285,67,67,67,67,1289,67,67,67,67,67,67,67,67,37689,1087,25403,1091,66365,1095,0,0,97,97,97,97,1339,97,1341,97,97,97,97,1345,97,97,97,97,97,561,97,97,97,97,97,573,97,97,97,97,97,97,1717,97,0,97,97,97,97,97,97,97,591,97,97,97,97,97,97,97,97,97,1329,97,97,97,97,97,97,97,97,97,97,1351,97,97,97,97,97,97,1357,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,568,97,97,97,97,97,97,97,1365,97,97,97,97,1369,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1399,45,45,45,1413,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1669,45,1422,45,45,1425,45,45,1428,45,1429,67,67,67,67,67,67,67,67,1468,67,67,67,67,67,67,67,67,529,67,67,67,67,67,67,539,67,67,1475,67,0,0,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,97,97,1530,97,0,45,45,1534,45,45,45,45,45,45,45,45,1956,45,45,67,67,67,67,67,67,67,67,67,1599,67,67,1601,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,67,1632,97,1634,0,97,97,97,1640,97,97,97,1643,97,97,1645,97,97,97,97,97,912,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,1660,1661,45,45,45,45,1665,1666,45,45,45,45,45,1670,1692,1693,67,67,67,67,67,1697,67,67,67,67,67,67,67,1702,97,97,1714,1715,97,97,97,97,0,1721,1722,97,97,97,97,97,97,1353,97,97,97,97,97,97,97,97,1362,1726,97,0,0,97,97,97,0,97,97,97,1734,97,97,97,97,97,848,849,97,97,97,97,856,97,97,97,97,97,354,0,53264,0,18,18,24,24,0,28,28,45,45,1750,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1681,45,0,1846,97,97,97,97,97,97,45,45,1854,45,45,45,45,1859,67,67,67,1879,67,67,97,97,1884,97,97,0,0,0,97,97,97,1105,97,97,97,97,97,97,97,97,97,97,1344,97,97,97,1347,97,1892,97,0,0,0,97,97,97,1900,97,97,45,45,45,45,45,997,45,45,45,45,45,45,45,45,45,45,1002,45,45,1005,1006,45,67,67,67,67,67,1926,67,67,1928,97,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,1737,97,0,97,97,97,97,0,0,0,97,97,1944,97,97,1946,45,45,45,1544,45,45,45,45,45,45,45,45,45,45,45,45,190,45,45,45,152,155,45,163,45,45,177,179,182,45,45,45,193,197,45,45,45,1672,45,45,45,45,45,1677,45,1679,45,45,45,45,996,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,67,260,264,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,295,299,302,97,310,97,97,324,326,329,97,97,97,0,97,97,1639,0,1641,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,97,97,97,1523,97,97,97,97,97,97,97,97,1719,97,97,97,97,97,97,97,97,1720,97,97,97,97,97,97,97,312,97,97,97,97,97,97,97,97,1123,97,97,97,97,97,97,97,340,344,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,373,375,419,45,45,45,45,45,45,45,45,45,428,45,45,435,45,45,45,1751,45,45,45,45,45,45,45,45,45,45,45,45,1410,45,45,45,67,67,67,505,67,67,67,67,67,67,67,67,67,514,67,67,67,67,67,67,1969,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,0,97,2064,2065,0,2066,45,521,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,465,67,67,67,474,67,67,67,67,67,67,67,1467,67,67,67,67,67,67,67,67,67,97,97,97,97,97,1933,0,97,97,97,602,97,97,97,97,97,97,97,97,97,611,97,97,18,640,139621,358,641,0,0,0,0,364,0,0,367,0,618,97,97,97,97,97,97,97,97,97,97,631,97,97,97,97,97,881,97,97,97,97,97,97,97,97,97,97,569,97,97,97,97,97,369,0,45,652,45,45,45,45,45,657,45,45,45,45,45,45,1235,45,45,45,45,45,45,45,45,67,67,67,1432,67,67,67,67,67,67,67,766,67,67,67,67,67,67,67,67,773,67,67,67,0,1305,0,1311,0,1317,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,97,0,97,97,97,1724,97,97,97,777,67,67,782,67,67,67,67,67,67,67,67,67,67,67,67,535,67,67,67,67,67,67,67,814,67,67,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,0,97,837,97,97,97,97,97,97,1496,97,97,97,97,97,97,97,97,97,97,918,97,97,97,97,0,842,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1168,97,97,97,97,864,97,97,97,97,97,97,97,97,871,97,97,97,0,1637,97,97,0,97,97,97,97,97,97,97,97,97,97,1801,45,45,97,875,97,97,880,97,97,97,97,97,97,97,97,97,97,97,1151,1152,97,97,97,67,67,67,1040,67,67,67,67,67,67,67,67,67,67,67,67,790,67,67,67,1180,0,649,45,45,45,45,45,45,45,45,45,45,45,45,45,200,45,45,67,67,67,1454,67,67,67,67,67,67,67,67,67,67,67,67,806,67,67,67,0,0,0,1481,0,1094,0,0,97,1483,97,97,97,97,97,97,304,97,97,318,97,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,97,97,1332,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,1633,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,1381,0,0,45,45,45,45,97,97,1727,0,97,97,97,0,97,97,97,97,97,97,97,97,626,97,97,97,97,97,97,636,45,45,1760,67,67,67,67,67,67,67,1765,67,67,67,67,67,67,67,1299,67,67,67,0,0,0,0,0,0,97,97,97,97,1616,97,97,1803,45,45,45,45,1807,45,45,45,45,45,1813,45,45,45,67,67,1684,67,67,67,67,67,67,67,67,67,67,67,822,67,67,37689,544,67,67,1818,67,67,67,67,1822,67,67,67,67,67,1828,67,67,67,67,67,97,0,0,97,97,97,97,97,45,45,45,2012,2013,45,45,67,67,67,2018,2019,67,67,97,67,97,97,97,1833,97,97,0,0,97,97,1840,97,97,0,0,97,97,97,0,97,97,1733,97,1735,97,97,97,0,97,97,97,1849,97,97,97,45,45,45,45,45,1857,45,45,45,1910,45,1912,45,45,1914,45,67,67,67,67,67,67,67,67,67,67,1017,67,67,1020,67,45,1861,45,45,45,45,45,67,67,67,67,67,1872,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,67,1446,67,67,67,67,67,1876,67,67,67,67,67,97,97,97,97,97,0,0,0,1890,97,97,97,97,97,1134,97,97,97,97,97,97,97,97,97,97,570,97,97,97,97,580,1935,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1906,45,67,67,67,67,2048,0,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,931,45,45,45,45,45,45,1674,45,1676,45,45,45,45,45,45,45,446,45,45,45,45,45,45,45,67,67,67,67,1871,67,67,67,67,0,97,97,45,67,0,97,2060,2061,0,2063,45,67,0,97,45,45,156,45,45,45,45,45,45,45,45,45,192,45,45,45,45,1673,45,45,45,45,45,45,45,45,45,45,45,429,45,45,45,45,67,67,67,269,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,349,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,374,45,45,67,67,213,217,67,67,67,67,67,242,67,247,67,253,45,45,698,45,45,45,45,45,45,45,45,45,45,45,45,45,399,45,45,0,0,0,0,925,41606,0,929,0,0,45,45,45,45,45,45,1391,45,45,1395,45,45,45,45,45,45,423,45,45,45,45,45,45,45,436,45,67,67,67,67,1041,67,1043,67,67,67,67,67,67,67,67,67,67,1776,67,67,97,97,97,1099,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,888,97,97,97,1131,97,97,97,97,1135,97,1137,97,97,97,97,97,97,97,1497,97,97,97,97,97,97,97,97,97,883,97,97,97,97,97,97,1310,0,0,0,1316,0,0,0,0,1100,0,0,0,97,97,97,97,97,1107,97,97,97,97,97,97,97,97,1343,97,97,97,97,97,97,1348,0,0,1317,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,1112,97,45,1804,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1868,67,1870,67,67,67,67,67,1817,67,67,1819,67,67,67,67,67,67,67,67,67,67,67,67,823,67,37689,544,67,97,1832,97,97,1834,97,0,0,97,97,97,97,97,0,0,97,97,97,0,1732,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,97,1177,0,0,925,0,0,0,0,97,97,97,97,0,0,1941,97,97,97,97,97,97,45,45,45,1991,1992,45,67,67,67,67,67,67,67,67,67,1998,134,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,941,45,45,944,45,45,45,45,45,45,952,45,45,207,67,67,67,67,67,226,67,67,67,67,67,67,67,67,67,820,67,67,67,67,37689,544,369,650,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1682,25403,546,70179,0,0,66365,66365,552,835,97,97,97,97,97,97,97,1522,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,1725,67,67,67,1695,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,1036,67,67,67,265,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,296,97,97,97,97,314,97,97,97,97,332,334,97,97,97,97,97,1146,1147,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,97,97,345,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,372,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,1213,45,45,45,45,404,406,45,45,45,45,45,45,45,45,45,45,45,45,45,434,45,45,45,440,45,45,45,45,45,45,45,45,451,452,45,45,45,67,1683,67,67,67,1686,67,67,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,490,492,67,67,67,67,67,67,67,67,67,67,67,1447,67,67,1450,67,67,67,67,67,526,67,67,67,67,67,67,67,67,537,538,67,67,67,67,67,506,67,67,508,67,67,511,67,67,67,67,0,1476,0,0,0,0,0,1478,0,0,0,0,0,0,0,0,97,97,1484,97,97,97,97,97,97,865,97,97,97,97,97,97,97,97,97,97,1499,97,97,97,97,97,97,97,97,97,587,589,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,97,97,97,97,623,97,97,97,97,97,97,97,97,634,635,97,97,97,97,97,1160,97,97,97,97,97,97,97,97,97,97,97,1628,97,97,97,97,369,0,45,45,45,45,45,655,45,45,45,45,45,45,45,45,999,45,1001,45,45,45,45,45,45,45,45,715,45,45,45,720,45,45,45,45,45,45,45,45,728,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,840,97,97,97,97,97,1174,97,97,97,97,0,0,925,0,0,0,0,0,0,0,1100,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,97,938,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,680,45,968,45,970,45,973,45,45,45,45,45,45,45,45,45,45,962,45,45,45,45,45,979,45,45,45,45,45,985,45,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,688,45,45,45,45,45,45,45,1007,1008,67,67,67,67,67,1014,67,67,67,67,67,67,67,67,67,1045,67,67,67,67,67,67,67,1038,67,67,67,67,67,67,1044,67,1046,67,1049,67,67,67,67,67,67,800,67,67,67,67,67,67,808,67,67,0,0,0,1102,97,97,97,97,97,1108,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,97,1371,97,97,97,97,97,97,97,97,1132,97,97,97,97,97,97,1138,97,1140,97,1143,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,45,1191,45,45,45,45,45,1196,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,991,45,67,67,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,1048,67,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,97,1386,45,1387,45,45,45,45,45,45,45,45,45,45,45,45,45,455,45,457,45,45,1424,45,45,45,45,45,67,67,67,67,1433,67,1434,67,67,67,67,67,767,67,67,67,67,67,67,67,67,67,67,67,1591,67,1593,67,67,45,45,1805,45,45,45,45,45,45,45,45,45,1814,45,45,1816,67,67,67,67,1820,67,67,67,67,67,67,67,67,67,1829,67,67,67,67,67,815,67,67,67,67,821,67,67,67,37689,544,67,1831,97,97,97,97,1835,0,0,97,97,97,97,97,0,0,97,97,97,1731,97,97,97,97,97,97,97,97,97,853,97,97,97,97,97,97,0,97,97,97,97,1850,97,97,45,45,45,45,45,45,45,45,1547,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,961,45,45,45,45,965,45,967,1907,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1920,0,1936,97,97,97,0,0,0,97,97,97,97,97,97,45,45,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,67,67,97,97,97,97,0,0,28672,97,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,2054,97,97,291,97,97,97,97,97,97,320,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,97,12288,0,925,926,1179,0,45,377,45,45,45,381,45,45,392,45,45,396,45,45,45,45,971,45,45,45,45,45,45,45,45,45,45,45,45,1756,45,45,45,67,67,67,67,463,67,67,67,467,67,67,478,67,67,482,67,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,1472,67,502,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1460,67,97,97,97,97,560,97,97,97,564,97,97,575,97,97,579,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,930,97,599,97,97,97,97,97,97,97,97,97,97,97,97,97,97,872,97,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1758,0,362,0,0,925,41606,0,0,0,0,45,45,934,45,45,45,164,168,174,178,45,45,45,45,45,194,45,45,45,165,45,45,45,45,45,45,45,45,45,199,45,45,45,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,67,1060,67,67,67,67,67,67,1052,1053,67,67,67,67,67,67,67,67,67,67,1063,97,1157,97,97,97,97,97,97,97,97,97,97,97,97,1167,97,97,97,97,97,1379,97,97,97,0,0,0,45,1383,45,45,45,1806,45,45,45,45,45,45,1812,45,45,45,45,67,67,67,67,67,1577,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,1282,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1471,67,45,1402,45,45,45,45,45,45,45,45,45,45,45,45,45,45,417,45,67,1462,67,67,67,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,1517,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1128,97,97,97,97,1636,97,97,97,0,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,1705,67,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,1842,0,0,1779,97,97,97,1782,97,0,0,97,97,97,97,97,97,0,0,97,97,97,1789,97,97,0,0,0,97,1847,97,97,97,97,97,45,45,45,45,45,45,45,45,1675,45,45,45,45,45,45,45,45,737,738,67,740,67,741,67,743,67,67,67,67,67,67,1968,67,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,2062,97,45,67,0,97,45,67,67,97,97,2001,97,0,0,2004,97,97,0,97,97,97,97,1797,97,97,97,97,97,45,45,45,67,261,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,292,97,97,97,97,311,315,321,325,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,97,97,1330,97,97,1333,1334,97,341,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,363,364,0,367,41098,369,140,45,45,45,45,1221,45,45,45,45,45,45,45,45,45,45,45,413,45,45,416,45,376,45,45,45,45,382,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,45,45,403,45,45,45,45,45,45,45,45,45,45,414,45,45,45,418,67,67,67,462,67,67,67,67,468,67,67,67,67,67,67,67,67,1602,67,1604,67,67,67,67,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,500,67,67,67,67,67,1067,67,67,67,67,67,1072,67,67,67,67,67,67,274,0,37139,24853,0,0,0,0,41098,65820,67,67,504,67,67,67,67,67,67,67,510,67,67,67,517,519,541,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,554,97,97,97,559,97,97,97,97,565,97,97,97,97,97,97,97,1718,0,97,97,97,97,97,97,97,898,97,97,97,97,97,97,906,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,597,97,97,97,97,97,1520,97,97,97,97,97,97,97,97,97,97,0,45,1656,45,45,45,97,97,601,97,97,97,97,97,97,97,607,97,97,97,614,616,638,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,369,0,45,45,45,45,45,45,45,45,45,45,661,45,45,45,407,45,45,45,45,45,45,45,45,45,45,45,45,45,1815,45,67,45,667,45,45,45,45,45,45,45,45,45,45,678,45,45,45,421,45,45,45,45,45,45,45,45,45,45,45,45,976,977,45,45,45,682,45,45,45,45,45,45,45,45,45,45,693,45,45,697,67,67,748,67,67,67,67,754,67,67,67,67,67,67,67,67,67,1274,67,67,67,67,67,67,67,67,765,67,67,67,67,769,67,67,67,67,67,67,67,67,67,1589,67,67,67,67,67,67,67,67,780,67,67,784,67,67,67,67,67,67,67,67,67,67,67,1777,67,97,97,97,97,97,97,846,97,97,97,97,852,97,97,97,97,97,97,97,1742,45,45,45,45,45,45,45,1747,97,97,97,863,97,97,97,97,867,97,97,97,97,97,97,97,308,97,97,97,97,97,97,97,97,97,97,12288,1178,925,0,1179,0,97,97,97,878,97,97,882,97,97,97,97,97,97,97,97,97,97,12288,0,925,0,1179,0,908,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,0,954,45,45,45,45,45,45,45,45,45,45,963,45,45,966,45,45,157,45,45,171,45,45,45,45,45,45,45,45,45,45,948,45,45,45,45,45,1022,67,67,1026,67,67,67,1030,67,67,67,67,67,67,67,67,67,1603,1605,67,67,67,1608,67,67,67,1039,67,67,1042,67,67,67,67,67,67,67,67,67,67,471,67,67,67,67,67,0,1100,0,97,97,97,97,97,97,97,97,97,97,97,97,97,904,97,97,97,97,1116,97,97,1120,97,97,97,1124,97,97,97,97,97,97,562,97,97,97,571,97,97,97,97,97,97,97,97,97,1133,97,97,1136,97,97,97,97,97,97,97,97,915,917,97,97,97,97,97,0,97,1170,97,97,97,97,97,97,97,97,0,0,925,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,45,1993,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,1278,67,0,0,0,45,45,1182,45,45,45,45,45,45,45,45,45,1189,1204,45,45,45,1207,45,45,1209,45,1210,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,45,689,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,236,67,67,67,67,67,67,67,801,67,67,67,805,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,1249,67,67,67,67,67,67,507,67,67,67,67,67,67,67,67,67,67,1300,0,0,0,0,0,1267,67,67,1269,67,1270,67,67,67,67,67,67,67,67,67,1280,97,1349,97,1350,97,97,97,97,97,97,97,97,97,1360,97,97,97,0,1980,97,97,97,97,97,45,45,45,45,45,45,673,45,45,45,45,677,45,45,45,45,1401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,953,67,1437,67,1440,67,67,67,67,1445,67,67,67,1448,67,67,67,67,67,67,1029,67,67,67,67,67,67,67,67,67,67,1825,67,67,67,67,67,1473,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,1320,0,834,97,97,97,97,1490,97,1493,97,97,97,97,1498,97,97,97,1501,97,97,97,0,97,1638,97,0,97,97,97,97,97,97,97,97,916,97,97,97,97,97,97,0,1528,97,97,97,0,45,45,45,1535,45,45,45,45,45,45,45,1867,67,67,67,67,67,67,67,67,67,97,97,97,97,1932,0,0,1555,45,45,45,45,45,45,45,45,45,45,45,45,45,1567,45,45,158,45,45,172,45,45,45,183,45,45,45,45,201,45,45,67,212,67,67,67,67,231,235,241,245,67,67,67,67,67,67,493,67,67,67,67,67,67,67,67,67,67,472,67,67,67,67,67,97,97,97,97,1651,97,97,97,97,97,0,45,45,45,45,45,45,45,1539,45,45,45,67,1704,67,1706,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,1841,97,0,1844,97,97,97,97,1716,97,97,97,0,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1385,1748,45,45,45,45,45,45,45,45,45,45,45,45,45,1757,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,97,97,1780,97,97,97,0,0,1786,97,97,97,97,97,0,0,97,97,1730,0,97,97,97,97,97,1736,97,1738,67,97,97,97,97,97,97,0,1838,97,97,97,97,97,0,0,97,1729,97,0,97,97,97,97,97,97,97,97,1162,97,97,97,1165,97,97,97,45,1950,45,45,45,45,45,45,45,45,1958,67,67,67,1962,67,67,67,67,67,1246,67,67,67,67,67,67,67,67,67,67,67,97,1710,97,97,97,1999,67,97,97,97,97,0,2003,97,97,97,0,97,97,2008,2009,45,67,67,67,67,0,0,97,97,97,97,45,2052,67,2053,0,0,0,0,925,41606,0,0,930,0,45,45,45,45,45,45,1392,45,1394,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,45,1563,1565,45,45,45,1568,0,97,2055,45,67,0,97,45,67,0,97,45,67,28672,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,679,45,45,67,67,266,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,346,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,362,0,364,0,367,41098,369,140,371,45,45,45,379,45,45,45,388,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,449,45,45,45,45,45,67,67,542,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,97,97,97,97,1622,97,97,97,97,97,97,97,1629,97,97,0,1794,1795,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1745,45,45,97,639,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,45,731,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,251,67,67,67,67,67,798,67,67,67,67,67,67,67,67,67,67,67,67,1073,67,67,67,860,97,97,97,97,97,97,97,97,97,97,97,97,97,97,873,0,0,1101,97,97,97,97,97,97,97,97,97,97,97,97,97,921,97,0,67,67,67,67,1245,67,67,67,67,67,67,67,67,67,67,67,67,1250,67,67,1253,0,0,1312,0,0,0,1318,0,0,0,0,0,0,97,97,97,97,1106,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,97,1155,97,97,1325,97,97,97,97,97,97,97,97,97,97,97,97,97,1141,97,97,67,67,1439,67,1441,67,67,67,67,67,67,67,67,67,67,67,67,1264,67,67,67,97,97,1492,97,1494,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,97,67,67,67,2037,67,97,0,0,97,97,97,2043,97,45,45,45,442,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,232,67,67,67,67,67,67,67,67,1823,67,67,67,67,67,67,67,67,97,97,97,97,1975,0,0,97,874,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1142,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,65,86,117,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,63,84,115,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,61,82,113,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,59,80,111,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,57,78,109,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,55,76,107,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,53,74,105,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,51,72,103,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,49,70,101,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,47,68,99,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,45,67,97,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,213085,53264,18,49172,57366,24,8192,28,102432,0,0,0,44,0,0,32863,53264,18,49172,57366,24,8192,28,102432,0,41,41,41,0,0,1138688,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,89,53264,18,18,49172,0,57366,0,24,24,24,0,127,127,127,127,102432,67,262,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,342,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,360,0,0,364,0,367,41098,369,140,45,45,45,45,717,45,45,45,45,45,45,45,45,45,45,45,412,45,45,45,45,45,67,1009,67,67,67,67,67,67,67,67,67,67,67,67,67,1292,67,67,1294,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,1615,97,97,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,66,87,118,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,64,85,116,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,62,83,114,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,60,81,112,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,58,79,110,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,56,77,108,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,54,75,106,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,52,73,104,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,50,71,102,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,48,69,100,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,46,67,98,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,233472,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,69724,53264,18,18,49172,0,57366,262144,24,24,24,0,28,28,28,28,102432,45,45,161,45,45,45,45,45,45,45,45,45,45,45,45,45,710,45,45,28,139621,359,0,0,0,364,0,367,41098,369,140,45,45,45,45,1389,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,45,67,503,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1449,67,67,97,600,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1154,97,0,0,0,0,925,41606,927,0,0,0,45,45,45,45,45,45,1866,67,67,67,67,67,67,67,67,67,67,772,67,67,67,67,67,45,45,969,45,45,45,45,45,45,45,45,45,45,45,45,45,951,45,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,45,0,0,0,1314,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1488,67,67,267,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,347,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,361,0,0,364,0,367,41098,369,140,45,45,45,45,734,45,45,45,67,67,67,67,67,742,67,67,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,1214,45,45,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1361,97,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,45,45,0,0,0,0,2220032,0,0,1130496,0,0,0,0,2170880,2171020,2170880,2170880,18,0,0,131072,0,0,0,90112,0,2220032,0,0,0,0,0,0,0,0,97,97,97,1485,97,97,97,97,0,45,45,45,45,45,1537,45,45,45,45,45,1390,45,1393,45,45,45,45,1398,45,45,45,2170880,2171167,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,0,0,0,0,0,2183168,0,0,0,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2721252,2744320,2170880,2170880,2170880,2834432,2840040,2170880,2908160,2170880,2170880,2936832,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3014656,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,0,0,0,0,2220032,0,0,0,1142784,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3215360,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,543,0,545,0,0,2183168,0,0,831,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,2170880,2170880,3092480,2170880,2170880,3125248,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,0,0,0,67,67,37139,37139,24853,24853,0,0,0,0,0,65820,65820,0,287,97,97,97,97,97,1783,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,1791,0,0,546,70179,0,0,0,0,552,0,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,97,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,0,0,147456,0,0,0,0,925,41606,0,928,0,0,45,45,45,45,45,45,998,45,45,45,45,45,45,45,45,45,1562,45,1564,45,45,45,45,0,2158592,2158592,0,0,0,0,2232320,2232320,2232320,0,2240512,2240512,2240512,2240512,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640],r.EXPECTED=[291,300,304,341,315,309,305,295,319,323,327,329,296,333,337,339,342,346,350,294,356,360,312,367,352,371,363,375,379,383,387,391,395,726,399,405,518,684,405,405,405,405,808,405,405,405,512,405,405,405,431,405,405,406,405,405,404,405,405,405,405,405,405,405,908,631,410,415,405,414,419,608,405,429,602,405,435,443,405,441,641,478,405,447,451,450,456,643,461,460,762,679,465,469,741,473,477,482,486,492,932,931,523,498,504,720,405,510,596,405,516,941,580,522,929,527,590,589,897,939,534,538,547,551,555,559,563,567,571,969,575,708,690,689,579,584,634,405,594,731,405,600,882,405,606,895,786,452,612,405,615,620,876,624,628,638,647,651,655,659,663,667,676,683,688,695,694,791,405,699,437,405,706,714,405,712,825,870,405,718,724,769,768,823,730,735,745,751,422,755,759,425,766,902,810,587,775,888,887,405,773,992,405,779,962,405,785,781,986,790,795,797,506,500,499,801,805,814,820,829,833,837,841,845,849,853,857,861,616,865,869,868,488,405,874,816,405,880,738,405,886,892,543,405,901,906,913,912,918,494,541,922,926,936,945,949,953,957,530,966,973,960,702,701,405,979,981,405,985,747,405,990,998,914,405,996,1004,672,975,974,1014,1002,1008,670,1012,405,405,405,405,405,401,1018,1022,1026,1106,1071,1111,1111,1111,1082,1145,1030,1101,1034,1038,1106,1106,1106,1106,1046,1206,1052,1106,1072,1111,1111,1042,1134,1065,1111,1112,1056,1160,1207,1062,1204,1208,1069,1106,1106,1106,1076,1111,1207,1161,1122,1205,1064,1094,1106,1106,1107,1111,1111,1111,1078,1086,1207,1092,1098,1046,1058,1106,1106,1110,1111,1111,1116,1120,1161,1126,1202,1104,1106,1145,1146,1129,1138,1088,1151,1048,1157,1153,1132,1141,1165,1107,1111,1172,1179,1109,1183,1175,1143,1147,1187,1108,1191,1195,1144,1199,1168,1212,1216,1220,1224,1228,1232,1236,1557,1247,1241,1241,1038,1434,1241,1241,1241,1241,1254,1275,1617,1241,1280,1287,1241,1241,1241,1287,1241,2114,1291,1241,1243,1241,2049,1824,2094,2095,1520,1309,1241,1241,1302,1241,1321,1311,1241,1241,1313,1778,1325,1336,1241,1241,1325,1330,1353,1241,1241,1695,1354,1241,1241,1241,1294,1686,1331,1241,1696,1368,1241,1338,1370,1241,1392,1399,1364,2017,1406,2016,1405,1716,1406,1407,1422,1417,1421,1241,1241,1241,1349,1426,1241,1774,1756,1241,1773,1241,1241,1345,1964,1812,1432,1241,1241,1345,1993,1459,1241,1241,1241,1395,1848,1767,1465,1241,1241,1394,1847,1242,1477,1241,1241,1428,1241,1445,1492,1241,1241,1438,1241,1499,1241,1241,1241,1455,1241,1818,1448,1241,1250,1241,2026,1623,1449,1241,1612,1616,1241,1614,1241,1257,1241,1241,1985,1292,1586,1512,1241,1517,2050,1526,1674,1519,1524,1647,2051,1532,1537,1551,1544,1550,1555,1561,1571,1578,1584,1590,1591,1653,1595,1602,1606,1610,1634,1628,1640,1633,1645,1241,1241,1241,1469,1241,1970,1651,1241,1270,1241,1241,1819,1449,1241,1293,1664,1241,1241,1481,1485,1574,1672,1241,1241,1513,1317,1487,1684,1241,1241,1533,1299,1694,1241,1241,1295,1241,1241,1241,1546,1700,1241,1241,1707,1241,1713,1241,1849,1715,1241,1720,1241,1276,1267,1241,1241,2107,1657,1864,1241,1881,1241,1326,1292,1241,1685,1358,1724,1338,1241,1363,1362,1342,1340,1361,1339,1833,1372,1360,1833,1833,1342,1343,1835,1341,1731,1738,1344,1241,1745,1241,1379,1241,1241,2092,1241,1388,1761,1754,1241,1386,1241,1400,1760,1241,1241,1241,1598,1734,1241,1241,1241,1635,1645,1241,1780,1766,1241,1241,1332,1771,1241,1241,1629,2079,1241,1242,1784,1241,1241,1680,1639,2063,1790,1241,1241,1741,1241,1241,1800,1241,1241,1762,1473,1241,1806,1241,1241,1786,1240,1709,1241,1241,1241,1668,1811,1241,1940,1241,1401,1974,1241,1408,1413,1382,1241,1816,1241,1241,1802,2086,1811,1241,1817,1945,1823,2095,2095,2047,2094,2046,2080,1241,1409,1312,1376,2096,2048,1241,1241,1807,1241,1241,1241,2035,1241,1241,1828,1241,2057,2061,1241,1241,1843,1241,2059,1241,1241,1241,1690,1847,1241,1241,1241,1703,2102,1848,1241,1241,1853,1292,1848,1241,2016,1857,1241,2002,1868,1241,1436,1241,1241,1271,1305,1241,1874,1241,1241,1884,2037,1892,1241,1890,1241,1461,1241,1241,1795,1241,1241,1891,1241,1878,1241,1888,1241,1888,1905,1896,2087,1912,1903,1241,1911,1906,1916,1905,2027,1863,1925,2088,1859,1861,1922,1927,1931,1935,1494,1241,1241,1918,1907,1939,1917,1944,1949,1241,1241,1451,1955,1241,1241,1241,1796,1727,2061,1241,1241,1899,1241,1660,1968,1241,1241,1951,1678,1978,1241,1241,1241,1839,1241,1241,1984,1982,1241,1488,1241,1241,1624,1450,1989,1241,1241,1241,1870,1995,1292,1241,1241,1958,1261,1241,1996,1241,1241,1241,2039,2008,1241,1241,1750,2e3,1241,1256,2001,1960,1241,1564,1241,1504,1241,1241,1442,1241,1241,1564,1528,1263,1241,1508,1241,1241,1468,1498,2006,1540,2015,1539,2014,1748,2013,1539,1831,2014,2012,1500,1567,2022,2021,1241,1580,1241,1241,2033,2037,1791,2045,2031,1241,1621,1241,1641,2044,1241,1241,1241,2093,1241,1241,2055,1241,1241,2067,1241,1283,1241,1241,1241,2101,2071,1241,1241,1241,2073,1848,2040,1241,1241,1241,2077,1241,1241,2106,1241,1241,2084,1241,2111,1241,1241,1381,1380,1241,1241,1241,2100,1241,2129,2118,2122,2126,2197,2133,3010,2825,2145,2698,2156,2226,2160,2161,2165,2174,2293,2194,2630,2201,2203,2152,3019,2226,2263,2209,2213,2218,2269,2292,2269,2269,2184,2226,2238,2148,2151,3017,2245,2214,2269,2269,2185,2226,2292,2269,2291,2269,2269,2269,2292,2205,3019,2226,2226,2160,2160,2160,2261,2160,2160,2160,2262,2276,2160,2160,2277,2216,2283,2216,2269,2269,2268,2269,2267,2269,2269,2269,2271,2568,2292,2269,2293,2269,2182,2190,2269,2186,2226,2226,2226,2226,2227,2160,2160,2160,2160,2263,2160,2275,2277,2282,2215,2217,2269,2269,2291,2269,2269,2293,2291,2269,2220,2269,2295,2294,2269,2269,2305,2233,2262,2278,2218,2269,2234,2226,2226,2228,2160,2160,2160,2289,2220,2294,2294,2269,2269,2304,2269,2160,2160,2287,2269,2269,2305,2269,2269,2312,2269,2269,2225,2226,2160,2287,2289,2219,2304,2295,2314,2234,2226,2314,2269,2226,2226,2160,2288,2219,2222,2304,2296,2269,2224,2160,2160,2269,2302,2294,2314,2224,2226,2288,2220,2294,2269,2290,2269,2269,2293,2269,2269,2269,2269,2270,2221,2313,2225,2227,2160,2300,2269,2225,2261,2309,2234,2229,2223,2318,2318,2318,2328,2336,2340,2344,2350,2637,2712,2358,2362,2372,2135,2378,2398,2135,2135,2135,2135,2136,2417,2241,2135,2378,2135,2135,2980,2984,2135,3006,2135,2135,2135,2945,2931,2425,2400,2135,2135,2135,2954,2135,2481,2433,2135,2135,2988,2824,2135,2135,2482,2434,2135,2135,2440,2445,2452,2135,2135,2998,3002,2961,2441,2446,2453,2463,2974,2135,2135,2135,2140,2642,2709,2459,2470,2465,2135,2135,3005,2135,2135,2987,2823,2458,2469,2464,2975,2135,2135,2135,2353,2488,2447,2324,2974,2135,2409,2459,2448,2135,2961,2487,2446,2476,2323,2973,2135,2135,2135,2354,2476,2974,2135,2135,2135,2957,2135,2135,2960,2135,2135,2135,2363,2409,2459,2474,2465,2487,2571,2973,2135,2135,2168,2973,2135,2135,2135,2959,2135,2135,2135,2506,2135,2957,2488,2170,2135,2135,2135,2960,2135,2818,2493,2135,2135,3033,2135,2135,2135,2934,2819,2494,2135,2135,2135,2976,2780,2499,2135,2135,2135,3e3,2968,2135,2935,2135,2135,2135,2364,2507,2135,2135,2934,2135,2135,2780,2492,2507,2135,2135,2506,2780,2135,2135,2782,2780,2135,2782,2135,2783,2374,2514,2135,2135,2135,3007,2530,2974,2135,2135,2135,3008,2135,2135,2134,2135,2526,2531,2975,2135,2135,3042,2581,2575,2956,2135,2135,2135,2394,2135,2508,2535,2840,2844,2495,2135,2135,2136,2684,2537,2842,2846,2135,2136,2561,2581,2551,2536,2841,2845,2975,3043,2582,2843,2555,2135,3040,3044,2538,2844,2975,2135,2135,2253,2644,2672,2542,2554,2135,2135,2346,2873,2551,2555,2135,2135,2135,2381,2559,2565,2538,2553,2135,2560,2914,2576,2590,2135,2135,2135,2408,2136,2596,2624,2135,2135,2135,2409,2135,2618,2597,3008,2135,2135,2380,2956,2601,2135,2135,2135,2410,2620,2624,2135,2136,2383,2135,2135,2783,2623,2135,2135,2393,2888,2136,2621,3008,2135,2618,2618,2622,2135,2135,2405,2414,2619,2384,2624,2135,2136,2950,2135,2138,2135,2139,2135,2604,2623,2135,2140,2878,2665,2957,2622,2135,2135,2428,2762,2606,2612,2135,2135,2501,2586,2604,3038,2135,2604,3036,2387,2958,2386,2135,2141,2135,2421,2387,2385,2135,2385,2384,2384,2135,2386,2628,2384,2135,2135,2501,2596,2591,2135,2135,2135,2400,2135,2634,2135,2135,2559,2580,2575,2648,2135,2135,2135,2429,2649,2135,2135,2135,2435,2654,2658,2135,2135,2135,2436,2649,2178,2659,2135,2135,2595,2601,2669,2677,2135,2135,2616,2957,2879,2665,2691,2135,2363,2367,2900,2878,2664,2690,2975,2877,2643,2670,2974,2671,2975,2135,2135,2619,2608,2669,2673,2135,2135,2653,2177,2672,2135,2135,2135,2486,2168,2251,2255,2695,2974,2709,2135,2135,2135,2487,2169,2399,2716,2975,2135,2363,2770,2776,2640,2717,2135,2135,2729,2135,2135,2641,2718,2135,2135,2135,2505,2135,2640,2257,2974,2135,2727,2975,2135,2365,2332,2895,2957,2135,2959,2135,2365,2749,2754,2959,2958,2958,2135,2380,2793,2799,2135,2735,2738,2135,2381,2135,2135,2940,2974,2135,2744,2135,2135,2739,2519,2976,2745,2135,2135,2135,2509,2755,2135,2135,2135,2510,2772,2778,2135,2135,2740,2520,2135,2771,2777,2135,2135,2759,2750,2792,2798,2135,2135,2781,2392,2779,2135,2135,2135,2521,2135,2679,2248,2135,2135,2681,2480,2135,2135,2786,3e3,2135,2679,2683,2135,2135,2416,2135,2135,2135,2525,2135,2730,2135,2135,2135,2560,2581,2135,2805,2135,2135,2804,2962,2832,2974,2135,2382,2135,2135,2958,2135,2135,2960,2135,2829,2833,2975,2961,2965,2969,2973,2968,2972,2135,2135,2135,2641,2135,2515,2966,2970,2851,2478,2135,2135,2808,2135,2809,2135,2135,2135,2722,2852,2479,2135,2135,2815,2135,2135,2766,2853,2480,2135,2857,2479,2135,2388,2723,2135,2364,2331,2894,2858,2480,2135,2135,2850,2478,2135,2135,2135,2806,2864,2135,2399,2256,2974,2865,2135,2135,2862,2135,2135,2135,2685,2807,2865,2135,2135,2807,2863,2135,2135,2135,2686,2884,2807,2135,2809,2807,2135,2135,2807,2806,2705,2810,2808,2700,2869,2702,2702,2702,2704,2883,2135,2135,2135,2730,2884,2135,2135,2135,2731,2321,2546,2135,2135,2876,2255,2889,2322,2547,2135,2401,2135,2135,2135,2949,2367,2893,2544,2973,2906,2973,2135,2135,2877,2663,2368,2901,2907,2974,2366,2899,2905,2972,2920,2974,2135,2135,2911,2900,2920,2363,2913,2918,2465,2941,2975,2135,2135,2924,2928,2974,2945,2931,2135,2135,2135,2765,2136,2955,2135,2135,2939,2931,2380,2135,2135,2380,2135,2135,2135,2780,2507,2137,2135,2137,2135,2139,2135,2806,2810,2135,2135,2135,2992,2135,2135,2962,2966,2970,2974,2135,2135,2787,3014,2135,2521,2993,2135,2135,2135,2803,2135,2135,2135,2618,2607,2997,3001,2135,2135,2963,2967,2971,2975,2135,2135,2791,2797,2135,3009,2999,3003,2787,3001,2135,2135,2964,2968,2785,2999,3003,2135,2135,2135,2804,2785,2999,3004,2135,2135,2135,2807,2135,2135,3023,2135,2135,2135,2811,2135,2135,3027,2135,2135,2135,2837,2968,3028,2135,2135,2135,2875,2135,2784,3029,2135,2408,2457,2446,0,14,0,-2120220672,1610612736,-2074083328,-2002780160,-2111830528,1073872896,1342177280,1075807216,4096,16384,2048,8192,0,8192,0,0,0,0,1,0,0,0,2,0,-2145386496,8388608,1073741824,0,2147483648,2147483648,2097152,2097152,2097152,536870912,0,0,134217728,33554432,1536,268435456,268435456,268435456,268435456,128,256,32,0,65536,131072,524288,16777216,268435456,2147483648,1572864,1835008,640,32768,65536,262144,1048576,2097152,196608,196800,196608,196608,0,131072,131072,131072,196608,196624,196608,196624,196608,196608,128,4096,16384,16384,2048,0,4,0,0,2147483648,2097152,0,1024,32,32,0,65536,1572864,1048576,32768,32768,32768,32768,196608,196608,196608,64,64,196608,196608,131072,131072,131072,131072,268435456,268435456,64,196736,196608,196608,196608,131072,196608,196608,16384,4,4,4,2,32,32,65536,1048576,12582912,1073741824,0,0,2,8,16,96,2048,32768,0,0,131072,268435456,268435456,268435456,256,256,196608,196672,196608,196608,196608,196608,4,0,256,256,256,256,32,32,32768,32,32,32,32,32768,268435456,268435456,268435456,196608,196608,196608,196624,196608,196608,196608,16,16,16,268435456,196608,64,64,64,196608,196608,196608,196672,268435456,64,64,196608,196608,16,196608,196608,196608,268435456,64,196608,131072,262144,4194304,25165824,33554432,134217728,268435456,268435456,196608,262152,8,256,512,3072,16384,200,-1073741816,8392713,40,8392718,520,807404072,40,520,100663304,0,0,-540651761,-540651761,257589048,0,262144,0,0,3,8,256,0,4,6,4100,8388612,0,0,0,3,4,8,256,512,1024,0,2097152,0,0,-537854471,-537854471,0,100663296,0,0,1,2,0,0,0,16384,0,0,0,96,14336,0,0,0,7,8,234881024,0,0,0,8,0,0,0,0,262144,0,0,16,64,384,512,0,1,1,0,12582912,0,0,0,0,33554432,67108864,-606084144,-606084144,-606084138,0,0,28,32,768,1966080,-608174080,0,0,0,14,35056,16,64,896,24576,98304,98304,131072,262144,524288,1048576,4194304,25165824,1048576,62914560,134217728,-805306368,0,384,512,16384,65536,131072,262144,29360128,33554432,134217728,268435456,1073741824,2147483648,262144,524288,1048576,29360128,33554432,524288,1048576,16777216,33554432,134217728,268435456,1073741824,0,0,0,123856,1966080,0,64,384,16384,65536,131072,16384,65536,524288,268435456,2147483648,0,0,524288,2147483648,0,0,1,16,0,256,524288,0,0,0,25,96,128,-537854471,0,0,0,32,7404800,-545259520,0,0,0,60,0,249,64768,1048576,6291456,6291456,25165824,100663296,402653184,1073741824,96,128,1280,2048,4096,57344,6291456,57344,6291456,8388608,16777216,33554432,201326592,1342177280,2147483648,0,57344,6291456,8388608,100663296,134217728,2147483648,0,0,0,1,8,16,64,128,64,128,256,1024,131072,131072,131072,262144,524288,16777216,57344,6291456,8388608,67108864,134217728,64,256,1024,2048,4096,57344,64,256,0,24576,32768,6291456,67108864,134217728,0,1,64,256,24576,32768,4194304,32768,4194304,67108864,0,0,64,256,0,0,24576,32768,0,16384,4194304,67108864,64,16384,0,0,1,64,256,16384,4194304,67108864,0,0,0,16384,0,16384,16384,0,-470447874,-470447874,-470447874,0,0,128,0,0,8,96,2048,32768,262144,8388608,35056,1376256,-471859200,0,0,14,16,224,2048,32768,2097152,4194304,8388608,-486539264,0,96,128,2048,32768,262144,2097152,262144,2097152,8388608,33554432,536870912,1073741824,2147483648,0,1610612736,2147483648,0,0,1,524288,1048576,12582912,0,0,0,151311,264503296,2097152,8388608,33554432,1610612736,2147483648,262144,8388608,33554432,536870912,67108864,4194304,0,4194304,0,4194304,4194304,0,0,524288,8388608,536870912,1073741824,2147483648,1,4097,8388609,96,2048,32768,1073741824,2147483648,0,96,2048,2147483648,0,0,96,2048,0,0,1,12582912,0,0,0,0,1641895695,1641895695,0,0,0,249,7404800,15,87808,1835008,1639972864,0,768,5120,16384,65536,1835008,1835008,12582912,16777216,1610612736,0,3,4,8,768,4096,65536,0,0,256,512,786432,8,256,512,4096,16384,1835008,16384,1835008,12582912,1610612736,0,0,0,256,0,0,0,4,8,16,32,1,2,8,256,16384,524288,16384,524288,1048576,12582912,1610612736,0,0,0,8388608,0,0,0,524288,4194304,0,0,0,8388608,-548662288,-548662288,-548662288,0,0,256,16384,65536,520093696,-1073741824,0,0,0,16777216,0,16,32,960,4096,4980736,520093696,1073741824,0,32,896,4096,57344,1048576,6291456,8388608,16777216,100663296,134217728,268435456,2147483648,0,512,786432,4194304,33554432,134217728,268435456,0,786432,4194304,134217728,268435456,0,524288,4194304,268435456,0,0,0,0,0,4194304,4194304,-540651761,0,0,0,2,4,8,16,96,128,264503296,-805306368,0,0,0,8,256,512,19456,131072,3072,16384,131072,262144,8388608,16777216,512,1024,2048,16384,131072,262144,131072,262144,8388608,33554432,201326592,268435456,0,3,4,256,1024,2048,57344,16384,131072,8388608,33554432,134217728,268435456,0,3,256,1024,16384,131072,33554432,134217728,1073741824,2147483648,0,0,256,524288,2147483648,0,3,256,33554432,134217728,1073741824,0,1,2,33554432,1,2,134217728,1073741824,0,1,2,134217728,0,0,0,64,0,0,0,16,32,896,4096,786432,4194304,16777216,33554432,201326592,268435456,1073741824,2147483648,0,0,0,15,0,4980736,4980736,4980736,70460,70460,3478332,0,0,1008,4984832,520093696,60,4864,65536,0,0,0,12,16,32,256,512,4096,65536,0,0,0,67108864,0,0,0,12,0,256,512,65536,0,0,1024,512,131072,131072,4,16,32,65536,0,4,16,32,0,0,0,4,16,0,0,16384,67108864,0,0,1,24,96,128,256,1024],r.TOKEN=[\"(0)\",\"JSONChar\",\"JSONCharRef\",\"JSONPredefinedCharRef\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$$'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(e,t,n){var r=n.XQueryTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 77:f(77);break;case 91:f(91);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 140:f(140);break;case 147:f(147);break;case 160:f(160);break;case 180:f(180);break;case 186:f(186);break;case 211:f(211);break;case 221:f(221);break;case 222:f(222);break;case 238:f(238);break;case 239:f(239);break;case 248:f(248);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 14:f(14);break;case 65:f(65);break;case 68:f(68);break;case 69:f(69);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 88:f(88);break;case 89:f(89);break;case 98:f(98);break;case 100:f(100);break;case 103:f(103);break;case 104:f(104);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 113:f(113);break;case 114:f(114);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 148:f(148);break;case 154:f(154);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 165:f(165);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 177:f(177);break;case 179:f(179);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 213:f(213);break;case 214:f(214);break;case 215:f(215);break;case 219:f(219);break;case 224:f(224);break;case 230:f(230);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 245:f(245);break;case 249:f(249);break;case 251:f(251);break;case 255:f(255);break;case 261:f(261);break;case 265:f(265);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 257:f(257);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 26:f(26);break;case 65:f(65);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 89:f(89);break;case 100:f(100);break;case 104:f(104);break;case 108:f(108);break;case 113:f(113);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 126:f(126);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 215:f(215);break;case 219:f(219);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 249:f(249);break;case 261:f(261);break;case 265:f(265);break;case 68:f(68);break;case 69:f(69);break;case 77:f(77);break;case 88:f(88);break;case 91:f(91);break;case 98:f(98);break;case 103:f(103);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 114:f(114);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 124:f(124);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 140:f(140);break;case 147:f(147);break;case 148:f(148);break;case 154:f(154);break;case 160:f(160);break;case 165:f(165);break;case 177:f(177);break;case 179:f(179);break;case 180:f(180);break;case 186:f(186);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 211:f(211);break;case 213:f(213);break;case 214:f(214);break;case 221:f(221);break;case 222:f(222);break;case 224:f(224);break;case 230:f(230);break;case 238:f(238);break;case 239:f(239);break;case 245:f(245);break;case 248:f(248);break;case 251:f(251);break;case 255:f(255);break;case 257:f(257);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=28)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 55:f(55);break;case 54:f(54);break;case 56:f(56);break;case 40:f(40);break;case 42:f(42);break;case 41:f(41);break;case 35:f(35);break;case 38:f(38);break;case 274:f(274);break;case 271:f(271);break;case 39:f(39);break;case 43:f(43);break;case 49:f(49);break;case 62:f(62);break;case 63:f(63);break;case 46:f(46);break;case 48:f(48);break;case 53:f(53);break;case 51:f(51);break;case 34:f(34);break;case 273:f(273);break;case 2:f(2);break;case 1:f(1);break;case 3:f(3);break;case 12:f(12);break;case 13:f(13);break;case 15:f(15);break;case 16:f(16);break;case 17:f(17);break;case 5:f(5);break;case 6:f(6);break;case 4:f(4);break;case 33:f(33);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 58:f(58);break;case 50:f(50);break;case 27:f(27);break;case 57:f(57);break;case 35:f(35);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 23:f(23);break;case 6:f(6);break;case 7:f(7);break;case 55:f(55);break;case 54:f(54);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;default:f(33)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 20:f(20);break;case 25:f(25);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 19:f(19);break;case 24:f(24);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 11:f(11);break;case 64:f(64);break;default:f(33)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 9:f(9);break;case 47:f(47);break;default:f(33)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 10:f(10);break;case 59:f(59);break;case 60:f(60);break;default:f(33)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 8:f(8);break;case 36:f(36);break;case 37:f(37);break;default:f(33)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 52:f(52);break;case 41:f(41);break;case 30:f(30);break;default:f(33)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(5);switch(y){case 31:f(31);break;case 32:f(32);break;case 52:f(52);break;case 41:f(41);break;default:f(33)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(6);switch(y){case 18:f(18);break;case 29:f(29);break;case 19:f(19);break;case 21:f(21);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 18:f(18);break;case 29:f(29);break;case 20:f(20);break;case 22:f(22);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<276;i+=32){var s=i,o=(i>>5)*2062+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,35,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35,35,35,35,35,35,35,35,35,35,35,35,31,31,35,35,35,35,35,35,35,65,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,35,31,35,31,31,35],r.INITIAL=[1,2,36867,45060,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22908,18836,17152,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18579,21711,17152,19008,19233,20367,19008,28684,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20116,18836,18637,19008,19233,21267,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18763,18778,18794,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18821,22923,18906,19008,19233,17431,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18937,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19054,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,18953,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21843,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21696,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22429,20131,18720,19008,19233,20367,19008,17173,23559,36437,17330,17349,18921,17189,17208,17281,20355,18087,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,21242,19111,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19024,18836,18609,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19081,22444,18987,19008,19233,20367,19008,19065,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21992,22007,18987,19008,19233,20367,19008,18690,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22414,18836,18987,19008,19233,30651,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19138,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19280,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,19172,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21783,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19218,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21651,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19249,19265,19307,18888,27857,30536,24401,31444,23357,18888,19351,18888,18890,27211,19370,27211,27211,19392,24401,31911,24401,24401,25467,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,17994,24060,18888,18888,18888,18890,19468,27211,27211,27211,27211,19484,35367,19520,24401,24401,24401,19628,18888,29855,18888,18888,23086,27211,19538,27211,27211,30756,24012,24401,19560,24401,24401,26750,18888,18888,19327,27855,27211,27211,19580,17590,24017,24401,24401,19600,25665,18888,18888,28518,27211,27212,24016,19620,19868,28435,25722,18889,19644,27211,32888,35852,19868,31018,19694,19376,19717,22215,19735,22098,19751,35203,19776,19797,19817,19840,25783,31738,24135,19701,19856,31015,23516,31008,28311,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21768,18836,19307,18888,27857,27904,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,19888,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22399,18836,19918,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21666,18836,19307,18888,27857,27525,24401,29183,21467,18888,18888,18888,18890,27211,27211,27211,27211,19946,24401,24401,24401,24401,32382,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19998,24401,24401,24401,24401,31500,18467,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,20021,24401,24401,24401,24401,24401,34271,18888,18888,18888,18888,23086,27211,27211,27211,27211,32926,29908,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,20050,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20101,19039,20191,20412,20903,17569,20309,20872,25633,20623,20505,20218,20242,17189,17208,17281,20355,20265,20306,20328,20383,22490,20796,20619,21354,20654,20410,20956,21232,20765,17421,20535,17192,18127,22459,20312,25531,22470,20309,20428,18964,20466,20491,21342,21070,20521,20682,17714,18326,17543,17559,17585,22497,20559,19504,20279,20575,20290,20475,20604,20639,20226,20670,17661,21190,17703,21176,17730,19494,20698,20711,22480,21046,21116,18971,21130,20727,20755,17675,17753,17832,17590,25518,20394,20781,20831,20202,20847,21401,17292,17934,17979,18549,20863,20588,25542,20888,20919,18072,18117,20935,20972,21032,21062,21086,18239,21102,18563,21146,21162,21206,18351,20949,20902,18340,21222,21258,21283,18360,20249,17405,21295,21311,21327,20739,20343,21370,21386,21417,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21977,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,21452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,21504,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,36501,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,28674,21946,17617,36473,18223,17237,17477,19152,17860,17892,17675,17753,17832,21575,21534,17481,19156,17864,18731,17918,36551,17292,17934,21560,30628,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21798,18836,21612,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21636,18836,18987,19008,19233,17902,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21753,19096,21903,19008,19233,20367,19008,19291,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17379,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,21931,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18280,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21962,18594,18987,19008,19233,22043,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21681,21858,18987,19008,19233,20367,19008,21544,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,32319,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,22231,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,31678,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,33588,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,35019,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22248,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22324,18836,22059,18888,27857,30501,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,34365,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22354,18836,18987,19008,19233,20367,19008,17173,27086,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,19930,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22309,22513,18987,19008,19233,20367,19008,19122,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,22544,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22608,18836,22988,23004,27585,23020,23036,23067,22087,18888,18888,18888,23083,27211,27211,27211,23102,22121,24401,24401,24401,23122,31386,26154,19674,18888,28119,28232,19424,23705,27211,27211,23142,23173,23189,23212,24401,24401,23246,34427,31693,23262,18888,23290,23308,27783,27620,23327,35263,35107,33383,23346,18193,23393,32748,23968,24401,23414,35153,23463,18888,33913,23442,23482,27211,27211,23532,23552,21431,23575,24401,24401,23604,26095,23635,23657,18888,33482,23685,33251,27211,22187,18851,23721,35536,24401,18887,23750,32641,27211,23769,23787,20080,33012,24384,25659,18888,18889,27211,27211,19719,23889,23803,31018,18890,27211,31833,19406,19447,23086,23330,19828,28224,31826,23823,26917,34978,23850,26493,25782,23878,23914,23516,31008,22105,19419,27963,19659,29781,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22623,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,28909,25783,27211,27211,27211,34048,23933,22164,24401,24401,24401,28409,23949,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,26583,18888,18888,18888,35585,23984,27211,27211,27211,24005,22201,24033,24401,24401,24401,24052,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,26496,24076,24126,24151,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22638,18836,22059,19678,27857,24185,24401,24201,24217,26592,18888,18888,18890,24252,24268,27211,27211,22121,24287,24303,24401,24401,30613,19781,35432,36007,32649,18888,25783,24322,28966,23771,27211,35072,22164,24358,32106,26829,24400,31500,31693,18888,18888,18888,24801,18890,27211,27211,27211,27211,24418,19484,24401,24401,24401,24401,20167,31181,18888,18888,18888,27833,23086,27211,27211,33540,27211,30756,21431,24401,24401,22972,24401,26095,18888,36131,18888,27855,27211,24440,27211,22187,22968,24401,24459,24401,31699,28454,18888,34528,34570,35779,24478,24402,24494,25659,18888,36228,27211,27211,24515,30981,23734,31018,18890,27211,31833,19406,19447,23086,23330,24538,31017,27856,31741,30059,23377,24563,19837,25782,19760,31015,23516,25374,22105,19419,29793,24579,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22653,18836,22059,25756,19982,34097,23196,29183,24614,24110,23641,24673,26103,24697,24443,24713,28558,22121,24748,24462,24764,23398,30613,18888,18888,18888,18888,24798,25783,27211,27211,27211,34232,35072,22164,24401,24401,24401,33302,31500,22559,24106,24232,18888,18888,34970,24817,30411,27211,27211,32484,19484,29750,35127,24401,24401,19872,31181,24852,18888,18888,24871,29221,27211,27211,32072,27211,30756,34441,24401,24401,31571,24401,26095,33141,27802,27011,27855,25295,25607,24888,22187,22968,19195,34593,24906,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,33663,27211,27211,24924,24947,23588,31018,18890,27211,31833,22135,19447,23086,23330,19828,30904,31042,24972,19840,25e3,31738,30898,25782,19760,31015,23516,31008,22105,19419,25016,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22668,18836,25041,25057,31320,25073,25089,25105,22087,34796,24236,36138,34870,34125,25121,23106,35497,22248,36613,25137,30671,27365,30613,25153,26447,25199,25233,22574,23274,25249,25265,25281,25318,25344,25360,25400,25428,25452,26731,25504,31693,23669,25558,27407,25575,28599,25934,25599,27211,28180,27304,25623,25839,25649,24401,34820,25681,25698,22586,27775,30190,25745,25778,25799,25817,28995,33569,30756,21518,33443,25837,25855,25893,26095,31254,26677,30136,27855,25930,25950,27211,22187,22968,25966,25986,24401,23428,27763,36330,26959,26002,26029,26045,26085,26119,26170,26203,26222,26239,30527,26372,26274,28404,31018,33757,27211,34262,26316,36729,26345,26366,35337,31017,26388,26407,30954,26350,33861,26434,26463,26479,26512,23516,33189,26531,26547,27963,31293,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22683,18836,26568,26181,26608,34097,26643,29183,22087,26669,18888,18888,18890,26693,27211,27211,27211,22121,26720,24401,24401,24401,30613,18888,18888,18888,18888,26774,25783,27211,27211,27211,26619,35072,22164,24401,24401,24401,21596,31500,31693,18888,18888,33978,18888,18890,27211,27211,25801,27211,27211,19484,24401,24401,24401,26792,24401,31181,18888,18888,18888,35464,23086,27211,27211,27211,26809,30756,21431,24401,24401,24401,26828,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,31948,18889,35707,27211,19719,26845,19868,31018,18890,27211,31833,19406,19447,23086,23330,26905,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,24984,31088,19419,26945,27651,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22698,18836,26999,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23051,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,27033,24401,24401,24401,24401,24036,31693,18888,18888,27056,18888,18890,27211,27211,30320,27211,27211,27075,24401,24401,29032,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,33986,27855,27211,27211,27102,17590,24017,24401,24401,27123,27144,36254,27162,27210,27228,28500,18187,34842,33426,27244,35980,27277,27302,27320,36048,34013,20999,31882,21478,27895,27356,30287,27381,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,26329,30087,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,27406,27423,27445,35294,27461,22087,18888,18888,30140,18890,27211,27211,27989,27211,22121,24401,24401,25682,24401,18866,18888,18888,18888,18888,18888,34042,27211,27211,27211,27211,29700,22164,24401,24401,24401,24401,27128,31693,27477,18888,18888,18888,18890,27194,27211,27211,27211,27211,19484,35299,24401,24401,24401,24401,19628,18888,18888,18888,27059,23086,27211,27211,27211,33366,30756,24012,24401,24401,24401,35044,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,20815,27211,30818,19960,33969,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22713,18836,22059,27496,27516,27541,35231,27557,22087,29662,26292,23292,27573,24836,27601,27211,27636,22121,35544,27686,24401,27721,18866,18888,27799,18888,27818,22071,27853,32260,27211,26013,27873,27920,22164,29419,24401,29946,33413,26742,27751,26881,18888,18888,27261,36776,27936,27211,27211,27211,27988,28005,28031,28052,24401,24401,28069,28088,28135,25488,28152,26069,28167,27211,28340,24657,28196,30756,31523,24401,28212,34176,36174,24956,28248,28266,28290,21488,33077,28327,28356,17590,20986,23126,28391,28425,28102,28451,28470,28490,28516,28534,20034,33728,25868,25659,18888,18889,27211,27211,19719,23889,19868,30241,28274,28553,28574,19406,28590,23086,23330,19828,19452,28615,28660,26147,25783,31738,19837,25782,19760,29613,35958,29276,22105,19419,27963,23157,28700,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,22528,18888,18888,18888,18888,18890,27333,27211,27211,27211,27211,19484,30853,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22728,18836,28747,28782,28817,28841,28857,28880,28896,24161,28943,32011,36261,27340,28961,29492,28982,29011,24522,29027,25436,29048,23051,27500,29090,29110,30713,18888,23512,29130,25183,27211,29155,28927,27033,29173,23230,24401,29199,35373,31693,18888,18888,25583,32629,29218,27211,27211,31461,30692,29237,27075,24401,24401,24401,29262,29302,19628,18888,34329,18888,18888,23086,27211,29329,27211,27211,30756,24012,35933,24401,24401,24401,27705,31612,18888,18888,29346,29374,27211,35650,17590,21436,29393,24401,25970,18887,33895,18888,27211,32528,27212,24016,32769,19868,25659,18888,26889,27211,27211,29412,23889,24371,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31768,19840,25783,31738,19837,29435,29508,31102,29550,29606,22105,30300,29462,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22743,18836,22059,29629,29473,34097,33285,29183,29651,27254,18888,29678,33329,32535,27211,29694,29716,22121,19202,24401,32742,29741,18866,26776,33921,28474,18888,18888,25783,29766,27211,29809,27211,35072,22164,35825,24401,29828,24401,24036,36769,25217,18888,18888,29848,18890,27211,29871,27211,26258,27211,29894,24401,29929,24401,36587,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,29725,29962,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18473,18888,18888,19584,27211,27212,24016,29982,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19902,19447,32052,19544,19828,29998,30097,30031,19840,25783,30047,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,30075,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22758,18836,30121,30156,30206,30257,30273,30336,22087,35624,32837,25762,18890,29878,34934,26812,27211,22121,24931,23223,29202,24401,18866,34373,30352,18888,18888,18888,23447,24828,27211,27211,27211,35072,30370,35052,24401,24401,24401,24036,29523,18888,18888,27146,18888,31308,30386,27211,27211,30405,30558,19484,30427,24401,24401,29938,35686,19628,28766,30447,34506,35614,23086,28731,30482,30517,30552,30756,24012,20156,30574,30598,30667,26283,33464,28945,27670,30687,32915,33504,25328,17590,23963,20450,33837,21016,32397,26300,30708,30729,27885,30748,21588,36373,30779,26653,24628,33220,32514,30806,31835,25412,25906,26515,18890,28825,31833,26133,19447,28304,31730,23834,26057,30869,30885,32181,30920,30942,32797,25782,30970,31015,23516,31008,30997,31034,27963,19659,29450,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22773,18836,31058,31074,32463,31125,31141,31197,22087,18888,29534,35471,36738,27211,24342,31213,24424,22121,24401,20175,31229,31917,27736,31245,34334,27175,18888,29094,27286,27211,31278,31336,27211,31355,31371,24401,31402,31418,24401,31437,31693,18888,31619,32841,18888,18890,27211,27211,31460,31477,27211,19484,24401,24401,31497,36581,24401,33020,18888,18888,18888,18888,30007,27211,27211,27211,27211,31516,32310,24401,24401,24401,24401,31539,18888,28762,18888,24651,35740,27211,27211,28644,31565,35796,24401,24401,19318,32188,18888,24334,28366,27212,29966,29832,19868,25659,18888,18889,27211,27211,19719,31587,19868,31635,32435,33693,30105,31663,20005,31715,31757,31784,31812,30015,31851,31878,25783,31898,19837,25782,19760,31015,23516,31008,22105,19419,27963,31933,30221,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22788,18836,22059,25729,30466,31968,24306,31984,32e3,32807,35160,27017,29590,34941,19801,29377,33700,22121,27040,30431,29396,28864,29565,18888,18888,18888,32027,18888,25783,27211,27211,23698,27211,35072,22164,24401,24401,30845,24401,24036,32045,18888,26929,18888,18888,18890,27211,31481,32068,27211,27211,32088,24401,33058,32122,24401,24401,33736,18888,18888,33162,18888,23086,27211,27211,29484,27211,28375,32144,24401,24401,33831,24401,26750,18888,18888,18888,27855,27211,27211,27211,36704,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,33107,22171,33224,24271,32169,31017,27856,31741,19840,25783,31738,30234,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,32204,32232,32252,32677,33295,29074,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23619,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,32276,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,32299,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,33886,18889,36065,27211,19719,35326,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22803,18836,32335,31647,34666,32351,32367,32417,22087,18888,32433,19335,32451,27211,32479,27107,32500,22121,24401,32551,20085,32572,18866,22287,23753,18888,18888,32602,32665,27211,32693,27211,26972,32713,32729,24401,32764,24401,25877,32785,34768,18888,27390,32823,24594,24855,32857,24890,32878,32904,27211,32942,32977,24401,33e3,29313,24401,30790,26206,27666,33904,18888,23086,36353,27211,33036,27211,30756,24012,32153,24401,33056,24401,35861,18888,18888,30354,27972,27211,27211,33800,17590,20145,24401,24401,34638,20811,18888,18888,33074,27211,27212,36167,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,34616,24169,33093,33123,33157,27856,31741,23862,26552,34302,19837,25782,19760,31015,23516,31008,33178,19973,27963,23497,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22818,18836,33205,28113,33240,34097,33275,29183,22087,33318,35438,18888,18890,33345,26391,33382,27211,22121,33399,28072,33442,24401,18866,22232,18888,33459,18888,18888,33480,33498,25175,27211,27211,26704,22164,24775,35239,24401,24401,25914,29580,18888,18888,31109,25211,33520,33539,27211,27211,33556,36284,19484,33585,24401,24401,33604,32556,19628,18888,18888,31262,33658,23086,27211,27211,33679,27211,30756,24012,24401,24401,33716,24401,26854,27480,18888,33752,27855,33259,34701,27211,17590,32102,24782,23807,24401,18887,18888,18888,27211,27211,27212,33773,36105,19868,25659,18888,23368,27211,29157,19719,23889,34454,29286,18890,33794,25302,33816,19447,34079,33853,31862,31017,27856,31741,33877,28920,33937,19837,30461,34002,22276,36041,34029,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22833,18836,34064,32616,34113,34141,34157,34192,34208,32216,36013,31549,31952,34224,34248,34287,29330,34350,34389,34413,34481,26793,18866,26187,29635,22293,18888,36654,25783,34522,34544,34566,25821,35072,22164,34586,34609,34632,19604,24036,36644,36674,24681,18888,32401,34654,31339,34682,34698,27211,34717,34753,28053,34812,34836,24401,33619,19628,34858,32236,34906,24598,33523,27612,34890,34922,24732,29246,36717,33634,34465,32984,34168,26750,34957,18888,18888,34994,35010,27211,33040,17590,29913,35035,24401,36304,25482,30171,35883,35068,35088,26627,20441,31173,35123,35143,35176,24640,30492,29358,19719,35192,35219,25384,28801,35255,35279,32586,34496,23086,23330,29061,31017,27856,31741,19840,25783,31738,24547,25164,35315,31796,35353,34316,22105,19419,27963,24091,28630,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22848,18836,22059,34782,34088,35389,21008,35405,35421,35454,18888,18888,23466,35487,27211,27211,27211,35513,31154,24401,24401,24401,35560,18888,26863,36664,35601,24872,25783,30389,23536,26250,35647,35666,22164,19522,19564,30582,35682,27697,35575,29114,18888,18888,18888,18890,27211,35702,27211,27211,27211,35723,24401,35527,24401,24401,24401,19628,30184,18888,18888,18888,23086,35739,27211,27211,27211,29139,22938,24401,24401,24401,24401,23898,35756,18888,18888,25025,35778,27211,27211,17590,20064,35795,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,23917,18890,34550,31833,22262,19447,23086,23330,26418,31017,27856,31741,19840,25783,35812,19837,27187,35841,33135,23516,31008,22105,22148,28712,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22863,18836,22059,35877,28723,34097,31164,29183,22087,26758,18888,22592,18890,23989,27211,29812,27211,22121,33778,24401,31421,24401,18866,18888,18888,26872,18888,18888,25783,27211,30732,27211,27211,35072,22164,24401,24908,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22878,18836,22059,27837,27857,35899,24401,35915,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31602,18888,18888,18888,18888,26223,27211,27211,27211,27211,27211,19484,35931,24401,24401,24401,24401,19628,18888,28136,18888,18888,35949,27211,32862,27211,32697,30756,24012,24401,32283,24401,32128,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22893,18836,22059,35974,34882,34097,33960,29183,35996,18888,23311,18888,36029,27211,27211,36064,36081,22121,24401,24401,36104,33950,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,36121,18888,25559,18888,18888,18890,27211,27211,30313,27211,27211,36154,24401,24401,34397,24401,24401,19628,28250,18888,18888,18888,23086,30926,27211,27211,27211,26983,24012,33642,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,19354,27857,36190,24401,36206,22087,18888,18888,18888,18007,27211,27211,27211,24724,22121,24401,24401,24401,30827,18866,18888,36222,18888,28795,18888,25783,35100,27211,27429,27211,35072,22164,30836,24401,24499,24401,24036,31693,18888,36244,18888,18888,18890,27211,36088,27211,27211,27211,19484,24401,28036,24401,24401,24401,19628,18888,18888,35631,18888,35762,27211,27211,36277,27211,34730,24012,24401,24401,36300,24401,36320,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,25712,18888,18888,36346,27211,27212,19184,24402,19868,25659,32029,18889,27211,33359,19719,23889,36369,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22384,18836,36389,19008,19233,20367,36434,17173,17595,36437,17330,17349,18921,17189,17208,17281,20355,36453,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22369,18836,18987,19008,19233,20367,19008,21737,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21813,18836,36489,19008,19233,20367,19008,17173,17737,36437,17330,17349,18921,17189,17208,17281,20355,17768,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20543,22022,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,36517,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,19307,18888,27857,30756,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,36567,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,36603,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,36629,36690,18720,19008,19233,20367,19008,17454,17595,36437,17330,17349,18921,17189,17208,17281,20355,17223,17308,17327,17346,18918,36754,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,0,94242,0,118820,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2482176,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,27,27,27,2207744,2404352,2412544,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3104768,2605056,2207744,2207744,2207744,2207744,2207744,2207744,2678784,2207744,2695168,2207744,2703360,2207744,2711552,2752512,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,0,2158592,2158592,3170304,3174400,2158592,0,139,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2158592,2158592,2158592,2863104,2891776,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2785280,2207744,2809856,2207744,2207744,2842624,2207744,2207744,2207744,2899968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2473984,2207744,2207744,2494464,2207744,2207744,2207744,2523136,2158592,2404352,2412544,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2605056,2158592,2158592,2158592,2158592,2158592,2158592,2678784,2158592,2695168,2158592,2703360,2158592,2711552,2752512,2158592,2158592,2785280,2158592,2158592,2785280,2158592,2809856,2158592,2158592,2842624,2158592,2158592,2158592,2899968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,18,0,0,0,0,0,0,0,2211840,0,0,641,0,2158592,0,0,0,0,0,0,0,0,2211840,0,0,32768,0,2158592,0,2158592,2158592,2158592,2383872,2158592,2158592,2158592,2158592,3006464,2383872,2207744,2207744,2207744,2207744,2158877,2158877,2158877,2158877,0,0,0,2158877,2572573,2158877,2158877,0,2207744,2207744,2596864,2207744,2207744,2207744,2207744,2207744,2207744,2641920,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,167936,0,0,2162688,0,0,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,0,0,2146304,2146304,2224128,2224128,2232320,2232320,2232320,641,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2531328,2158592,2158592,2158592,2158592,2158592,2617344,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,2158592,2502656,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2158592,2158592,2158592,2158592,2158592,2699264,2158592,2158592,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2207744,2863104,2891776,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3018752,2207744,3043328,2207744,2207744,2207744,2207744,3080192,2207744,2207744,3112960,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,172310,279,0,2162688,0,0,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2158592,2158592,2158592,2404352,2412544,2158592,2510848,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2584576,2158592,2609152,2158592,2158592,2629632,2158592,2158592,2158592,2686976,2158592,2715648,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2158592,2158592,3170304,3174400,2158592,2367488,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,0,2207744,2207744,2207744,2433024,2207744,2453504,2461696,2207744,2207744,2207744,2207744,2207744,2207744,2510848,2207744,2207744,2207744,2207744,2207744,2531328,2207744,2207744,2207744,2207744,2207744,2617344,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,1508,2715648,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2867200,2207744,2904064,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2580480,2207744,2207744,2207744,2207744,2621440,2207744,2207744,2207744,3149824,2207744,2207744,3170304,3174400,2207744,0,0,0,0,0,0,0,0,0,0,138,2158592,2158592,2158592,2404352,2412544,2707456,2732032,2207744,2207744,2207744,2822144,2826240,2207744,2895872,2207744,2207744,2924544,2207744,2207744,2973696,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,285,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3186688,2158592,2207744,2207744,2158592,2158592,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2158592,0,0,2535424,2543616,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2990080,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2572288,2981888,2207744,2207744,3002368,2207744,3047424,3063808,3076096,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3203072,2708960,2732032,2158592,2158592,2158592,2822144,2827748,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2981888,2158592,2158592,3002368,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2981888,2158592,2158592,3003876,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,20480,0,0,0,0,0,2162688,20480,0,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2908160,2527232,2207744,2207744,2576384,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2908160,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,286,2158592,2158592,0,0,2158592,2158592,2158592,2158592,2633728,2658304,0,0,2740224,2744320,0,2834432,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,0,0,29315,0,0,0,0,45,45,45,45,45,933,45,45,45,45,442,45,45,45,45,45,45,45,45,45,67,67,2494464,2158592,2158592,2158592,2524757,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,1504,2158592,2498560,2158592,2158592,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,2736128,2158592,2158592,0,2158592,2912256,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3108864,2158592,2158592,3133440,3145728,3153920,2375680,2379776,2207744,2207744,2420736,2207744,2449408,2207744,2207744,2207744,2498560,2207744,2207744,2207744,2207744,2568192,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,551,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,2020,2158592,2592768,2625536,2207744,2207744,2674688,2736128,2207744,2207744,2207744,2912256,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,542,0,544,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,641,0,0,0,0,0,0,2367488,2158592,2498560,2158592,2158592,1621,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,1608,97,97,97,97,97,97,97,97,97,97,1107,97,97,1110,97,97,3133440,3145728,3153920,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3014656,2158592,2158592,3051520,2158592,2158592,3100672,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2416640,2207744,2465792,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2633728,2658304,2740224,2744320,2834432,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,32768,0,0,0,0,0,0,2367488,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2158592,2158592,2478080,2158592,2158592,2158592,2535424,2543616,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3117056,2207744,2207744,2478080,2207744,2207744,2207744,2207744,2699264,2207744,2207744,2207744,2207744,2207744,2748416,2756608,2777088,2801664,2207744,2207744,2158877,2158877,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,0,0,2535709,2543901,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2990365,2158877,2158877,2158730,2158730,2158730,2158730,2158730,2572426,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158592,2158592,2478080,2207744,2207744,2990080,2207744,2207744,2158592,2158592,2482176,2158592,2158592,0,0,0,2158592,2158592,2158592,0,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,3010560,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158592,2428928,2158592,2514944,0,0,2158592,2588672,2158592,0,2838528,2158592,2158592,2158592,3010560,2158592,2506752,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,0,29315,922,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,1539,45,3006464,2383872,0,2020,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,2207744,0,0,2158592,2637824,2953216,2158592,2539520,2158592,2539520,2207744,0,0,2539520,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,0,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2965504,2965504,2965504,0,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2474269,2158877,2158877,0,0,2158877,2158877,2158877,2158877,2634013,2658589,0,0,2740509,2744605,0,2834717,40976,18,36884,45078,24,28,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,36884,0,0,0,24,24,24,27,27,27,27,90143,0,0,86016,0,0,2211840,102439,0,0,0,98347,0,2158592,2158592,2158592,2158592,2158592,3158016,0,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,0,94242,0,0,0,2211840,102439,0,0,106538,98347,135,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2158592,2158592,2158592,2596864,2158592,2158592,2158592,2158592,2158592,2158592,2641920,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2494464,2158592,2158592,2158592,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,0,27,27,0,2158592,2498560,2158592,2158592,0,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2494464,2158592,2158592,2158592,3006464,2383872,0,0,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,40976,18,36884,45078,24,27,147488,94242,147456,147488,106538,98347,0,0,147456,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,81920,0,94242,0,0,0,2211840,0,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2428928,2158592,2514944,2158592,2588672,2158592,2838528,2158592,2158592,40976,18,151573,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,1487,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,0,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,130,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,3096576,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,644,2207744,2207744,2207744,3186688,2207744,0,1080,0,1084,0,1088,0,0,0,0,0,0,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2531466,2158730,2158730,2158730,2158730,2158730,2617482,0,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2158592,2818048,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,159779,159744,102439,159779,98347,0,0,159744,40976,18,18,36884,0,45078,0,2224253,172032,2224253,2232448,2232448,172032,2232448,90143,0,0,2170880,0,0,550,829,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,124,124,127,127,127,40976,18,36884,45078,25,29,90143,94242,0,102439,106538,98347,0,0,163931,40976,18,18,36884,0,45078,249856,24,24,24,27,27,27,27,90143,0,0,2170880,0,0,827,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,4243810,4243810,24,24,27,27,27,2207744,0,0,0,0,0,0,2166784,0,0,0,0,57344,286,2158592,2158592,2158592,2158592,2707456,2732032,2158592,2158592,2158592,2822144,2826240,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,53248,0,0,0,0,0,97,97,97,97,97,1613,97,97,97,97,97,97,1495,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,2207744,0,0,0,0,0,0,2166784,546,0,0,0,0,286,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,17,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,120,121,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,2170880,0,53248,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,196608,18,266240,24,24,27,27,27,0,94242,0,0,0,38,102439,0,0,106538,98347,0,45,45,45,45,45,45,45,1535,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,424,45,45,45,45,45,45,45,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,199,45,45,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1766,67,67,67,1767,67,24850,24850,12564,12564,0,0,2166784,546,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,743,57889,0,2170880,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1856,45,1858,1859,67,67,67,1009,67,67,67,67,67,67,67,67,67,67,67,1021,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,0,2367773,2158877,2158877,2158877,2158877,2158877,2158877,2699549,2158877,2158877,2158877,2158877,2158877,2748701,2756893,2777373,2801949,97,1115,97,97,97,97,97,97,97,97,97,97,97,97,97,97,857,97,67,67,67,67,67,1258,67,67,67,67,67,67,67,67,67,67,67,1826,67,97,97,97,97,97,97,1338,97,97,97,97,97,97,97,97,97,97,97,97,97,870,97,97,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1579,67,67,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,97,904,905,97,97,97,97,1620,97,97,97,97,97,97,97,97,97,97,97,0,921,0,0,0,0,0,0,45,1679,67,67,67,1682,67,67,67,67,67,67,67,67,67,1690,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,189,45,45,45,1748,45,45,45,1749,1750,45,45,45,45,45,45,45,45,67,67,67,67,1959,67,67,67,67,1768,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,1791,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1802,67,1817,67,67,67,67,67,67,1823,67,67,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,1848,45,45,45,45,45,45,45,45,45,45,45,659,45,45,45,45,45,45,45,1863,67,67,67,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,1878,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,67,67,67,67,97,97,97,97,0,0,0,1973,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1165,97,1167,67,24850,24850,12564,12564,0,0,2166784,0,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,1789,97,0,94242,0,0,0,2211840,102439,0,0,106538,98347,136,2158592,2158592,2158592,2158592,2158592,3158016,229376,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,67,24850,24850,12564,12564,0,0,280,547,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,1788,97,97,0,97,2024,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,235,67,67,67,67,67,57889,547,547,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,1799,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1092,0,0,0,0,0,97,97,97,97,1612,97,97,97,97,1616,97,1297,1472,0,0,0,0,1303,1474,0,0,0,0,1309,1476,0,0,0,0,97,97,97,1481,97,97,97,97,97,97,1488,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,97,607,97,97,97,97,40976,18,36884,45078,26,30,90143,94242,0,102439,106538,98347,0,0,213080,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,143448,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,0,0,0,97,97,97,97,1482,97,1483,97,97,97,97,97,97,1326,97,97,1329,1330,97,97,97,97,97,97,1159,1160,97,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,0,94242,0,0,0,2211974,102439,0,0,106538,98347,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2474122,2158730,2158730,2494602,2158730,2158730,2158730,2809994,2158730,2158730,2842762,2158730,2158730,2158730,2900106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3014794,2158730,2158730,3051658,2158730,2158730,3100810,2158730,2158730,2158730,2158730,3096714,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,2207744,541,541,543,543,0,0,2166784,0,548,549,549,0,286,2158877,2158877,2158877,2863389,2892061,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3186973,2158877,0,0,0,0,0,0,0,0,2367626,2158877,2404637,2412829,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2564381,2158877,2158877,2605341,2158877,2158877,2158877,2158877,2158877,2158877,2679069,2158877,2695453,2158877,2703645,2158877,2711837,2752797,2158877,0,2158877,2158877,2158877,2384010,2158730,2158730,2158730,2158730,3006602,2383872,2207744,2207744,2207744,2207744,2207744,2207744,3096576,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,0,2158877,2785565,2158877,2810141,2158877,2158877,2842909,2158877,2158877,2158877,2900253,2158877,2158877,2158877,2158877,2158877,2531613,2158877,2158877,2158877,2158877,2158877,2617629,2158877,2158877,2158877,2158877,2158730,2818186,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3105053,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,0,0,0,0,0,97,97,97,1611,97,97,97,97,97,97,97,1496,97,97,1499,97,97,97,97,97,2441354,2445450,2158730,2158730,2158730,2158730,2158730,2158730,2502794,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2433162,2158730,2453642,2461834,2158730,2158730,2158730,2158730,2158730,2158730,2580618,2158730,2158730,2158730,2158730,2621578,2158730,2158730,2158730,2158730,2158730,2158730,2699402,2158730,2158730,2158730,2158730,2678922,2158730,2695306,2158730,2703498,2158730,2711690,2752650,2158730,2158730,2785418,2158730,2158730,2158730,3113098,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3186826,2158730,2207744,2207744,2207744,2207744,2781184,2793472,2207744,2818048,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,541,0,543,2158877,2502941,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2580765,2158877,2158877,2158877,2158877,2621725,2158877,3019037,2158877,3043613,2158877,2158877,2158877,2158877,3080477,2158877,2158877,3113245,2158877,2158877,2158877,2158877,0,2158877,2908445,2158877,2158877,2158877,2978077,2158877,2158877,2158877,2158877,3039517,2158877,2158730,2510986,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2584714,2158730,2609290,2158730,2158730,2629770,2158730,2158730,2158730,2388106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2605194,2158730,2158730,2158730,2158730,2687114,2158730,2715786,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2867338,2158730,2904202,2158730,2158730,2158730,2642058,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2781322,2793610,2158730,3121290,2158730,2158730,2158730,3149962,2158730,2158730,3170442,3174538,2158730,2367488,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2441216,2445312,2207744,2207744,2207744,2207744,2207744,2207744,2502656,2158877,2433309,2158877,2453789,2461981,2158877,2158877,2158877,2158877,2158877,2158877,2511133,2158877,2158877,2158877,2158877,2584861,2158877,2609437,2158877,2158877,2629917,2158877,2158877,2158877,2687261,2158877,2715933,2158877,2158730,2158730,2973834,2158730,2982026,2158730,2158730,3002506,2158730,3047562,3063946,3076234,2158730,2158730,2158730,2158730,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158877,2507037,0,0,2158877,2158730,2158730,2158730,3203210,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2564096,2207744,2207744,2207744,2707741,2732317,2158877,2158877,2158877,2822429,2826525,2158877,2896157,2158877,2158877,2924829,2158877,2158877,2973981,2158877,18,0,0,0,0,0,0,0,2211840,0,0,642,0,2158592,0,45,1529,45,45,45,45,45,45,45,45,45,45,45,45,45,1755,45,67,67,2982173,2158877,2158877,3002653,2158877,3047709,3064093,3076381,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3203357,2523274,2527370,2158730,2158730,2576522,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2908298,2494749,2158877,2158877,2158877,2523421,2527517,2158877,2158877,2576669,2158877,2158877,2158877,2158877,2158877,2158877,0,40976,0,18,18,4321280,2224253,2232448,4329472,2232448,2158730,2498698,2158730,2158730,2158730,2158730,2568330,2158730,2592906,2625674,2158730,2158730,2674826,2736266,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2158730,2912394,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3109002,2158730,2158730,3133578,3145866,3154058,2375680,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375965,2380061,2158877,2158877,2421021,2158877,2449693,2158877,2158877,2158877,3117341,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3104906,2158730,2158730,2158730,2158730,2158730,2158730,2158877,2498845,2158877,2158877,0,2158877,2158877,2568477,2158877,2593053,2625821,2158877,2158877,2674973,0,0,0,0,97,97,1480,97,97,97,97,97,1485,97,97,97,0,97,97,1729,97,1731,97,97,97,97,97,97,97,311,97,97,97,97,97,97,97,97,1520,97,97,1523,97,97,1526,97,2736413,2158877,2158877,0,2158877,2912541,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3109149,2158877,2158877,3014941,2158877,2158877,3051805,2158877,2158877,3100957,2158877,2158877,3121437,2158877,2158877,2158877,3150109,3133725,3146013,3154205,2158730,2408586,2416778,2158730,2465930,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3018890,2158730,3043466,2158730,2158730,2158730,2158730,3080330,2633866,2658442,2740362,2744458,2834570,2949258,2158730,2986122,2158730,2998410,2158730,2158730,2158730,3129482,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158877,2408733,2416925,2158877,2466077,2158877,2158877,3170589,3174685,2158877,0,0,0,2158730,2158730,2158730,2158730,2158730,2424970,2158730,2158730,2158730,2158730,2707594,2732170,2158730,2158730,2158730,2822282,2826378,2158730,2896010,2158730,2158730,2924682,2949405,2158877,2986269,2158877,2998557,2158877,2158877,2158877,3129629,2158730,2158730,2478218,2158730,2158730,2158730,2535562,2543754,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3117194,2207744,2207744,2478080,2207744,2207744,2207744,2207744,3014656,2207744,2207744,3051520,2207744,2207744,3100672,2207744,2207744,3121152,2207744,2207744,2207744,2207744,2207744,2584576,2207744,2609152,2207744,2207744,2629632,2207744,2207744,2207744,2686976,2207744,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158877,2158877,2478365,0,2158877,2158877,2158877,2158877,2158877,2158877,2158730,2158730,2482314,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,823,0,825,2158730,2158730,2158730,2990218,2158730,2158730,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,135,0,2207744,2207744,2990080,2207744,2207744,2158877,2158877,2482461,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,2158877,2158730,2429066,2158730,2515082,2158730,2588810,2158730,2838666,2158730,2158730,2158730,3010698,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158877,2429213,2158877,2515229,0,0,2158877,2588957,2158877,0,2838813,2158877,2158877,2158877,3010845,2158730,2506890,2158730,2158730,2158730,2748554,2756746,2777226,2801802,2158730,2158730,2158730,2863242,2891914,2158730,2158730,2158730,2158730,2158730,2158730,2564234,2158730,2158730,2158730,2158730,2158730,2597002,2158730,2158730,2158730,3006464,2384157,0,0,2158877,2158877,2158877,2158877,3006749,2158730,2637962,2953354,2158730,2207744,2637824,2953216,2207744,0,0,2158877,2638109,2953501,2158877,2539658,2158730,2539520,2207744,0,0,2539805,2158877,2158730,2158730,2158730,2977930,2158730,2158730,2158730,2158730,3039370,2158730,2158730,2158730,2158730,2158730,2158730,3158154,2207744,0,2158877,2158730,2207744,0,2158877,2158730,2207744,0,2158877,2965642,2965504,2965789,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,97,1484,97,97,97,97,2158592,18,0,122880,0,0,0,77824,0,2211840,0,0,0,0,2158592,0,356,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,45,1751,45,45,45,45,45,45,45,67,67,1427,67,67,67,67,67,1432,67,67,67,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,122880,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,1322,550,0,286,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,4329472,27,27,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,542,0,0,0,542,0,544,0,0,0,544,0,550,0,0,0,0,0,97,97,1610,97,97,97,97,97,97,97,97,898,97,97,97,97,97,97,97,0,94242,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,94242,237568,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,192512,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,94,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,96,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,12378,40976,18,18,36884,0,45078,0,24,24,24,126,126,126,126,90143,0,0,2170880,0,0,0,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,20480,40976,0,18,18,24,24,27,27,27,40976,18,36884,45078,24,27,90143,94242,241664,102439,106538,98347,0,0,20568,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,200797,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,0,0,44,0,0,20575,40976,18,36884,45078,24,27,90143,94242,0,41,41,41,0,0,1126400,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,89,40976,18,18,36884,0,45078,0,24,24,24,27,131201,27,27,90143,0,0,2170880,0,0,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,208896,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,0,0,0,0,0,0,2367488,32768,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2433024,2158592,2453504,2461696,2158592,2158592,2158592,2158592,2158592,2158592,2510848,2158592,2158592,2158592,2158592,40976,18,36884,245783,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,221184,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,180224,40976,18,18,36884,155648,45078,0,24,24,217088,27,27,27,217088,90143,0,0,2170880,0,0,828,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,233472,0,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,718,45,45,45,45,45,45,45,45,45,727,131427,0,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,45,1808,45,45,45,45,67,67,67,67,67,67,67,97,97,0,0,97,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,0,0,97,97,97,97,97,97,1787,0,97,97,0,97,97,97,45,45,45,45,2029,45,67,67,67,67,2033,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,97,45,1798,45,45,1800,45,45,0,1472,0,0,0,0,0,1474,0,0,0,0,0,1476,0,0,0,0,1315,0,0,0,0,97,97,97,97,1320,97,97,0,0,97,97,97,97,1786,97,0,0,97,97,0,1790,1527,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,663,67,24850,24850,12564,12564,0,57889,281,0,0,53531,53531,367,286,97,97,0,0,97,97,97,1785,97,97,0,0,97,97,0,97,97,1979,97,97,45,45,1983,45,1984,45,45,45,45,45,652,45,45,45,45,45,45,45,45,45,45,690,45,45,694,45,45,40976,19,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,262144,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,46,67,98,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,45,67,97,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,258048,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,1122423,40976,18,36884,45078,24,27,90143,94242,0,1114152,1114152,1114152,0,0,1114112,40976,18,36884,45078,24,27,90143,94242,37,102439,106538,98347,0,0,204800,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,57436,40976,18,36884,45078,24,27,33,33,0,33,33,33,0,0,0,40976,18,18,36884,0,45078,0,124,124,124,127,127,127,127,90143,0,0,2170880,0,0,550,0,2158877,2158877,2158877,2388253,2158877,2158877,2158877,2158877,2158877,2781469,2793757,2158877,2818333,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2867485,2158877,2904349,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3096861,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2441501,2445597,2158877,2158877,2158877,2158877,2158877,40976,122,123,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,936,2158592,4243810,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,935,45,45,45,715,45,45,45,45,45,45,45,723,45,45,45,45,45,1182,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,45,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,47,68,99,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,48,69,100,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,49,70,101,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,50,71,102,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,51,72,103,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,52,73,104,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,53,74,105,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,54,75,106,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,55,76,107,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,56,77,108,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,57,78,109,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,58,79,110,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,59,80,111,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,60,81,112,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,61,82,113,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,62,83,114,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,63,84,115,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,64,85,116,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,65,86,117,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,66,87,118,40976,18,36884,45078,24,27,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,0,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1314,0,0,0,0,0,0,97,97,97,97,97,1321,97,18,131427,0,0,0,0,0,0,362,0,0,365,0,367,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1360,97,97,131,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,145,149,45,45,45,45,45,174,45,179,45,185,45,188,45,45,202,67,255,67,67,269,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,292,296,97,97,97,97,97,321,97,326,97,332,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,646,335,97,97,349,97,97,0,40976,0,18,18,24,24,27,27,27,437,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,523,67,67,67,67,67,67,67,67,67,67,67,67,511,67,67,67,97,97,97,620,97,97,97,97,97,97,97,97,97,97,97,97,97,1501,1502,97,793,67,67,796,67,67,67,67,67,67,67,67,67,67,808,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,2052,67,67,67,67,813,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,830,97,97,97,97,97,97,97,97,97,315,97,97,97,97,97,97,841,97,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,589,97,97,97,97,97,97,97,97,97,867,97,97,97,97,97,97,97,891,97,97,894,97,97,97,97,97,97,97,97,97,97,906,45,937,45,45,940,45,45,45,45,45,45,948,45,45,45,45,45,734,735,67,737,67,738,67,740,67,67,67,45,967,45,45,45,45,45,45,45,45,45,45,45,45,45,45,435,45,45,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,67,67,67,67,67,25398,1081,13112,1085,54074,1089,0,0,0,0,0,0,363,0,28809,0,139,45,45,45,45,45,45,1674,45,45,45,45,45,45,45,45,67,1913,67,1914,67,67,67,1918,67,67,97,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,630,97,97,97,97,97,1169,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,45,1534,45,45,45,45,45,1538,45,45,45,45,1233,45,45,45,45,45,45,67,67,67,67,67,67,67,67,742,67,45,45,1191,45,45,45,45,45,45,45,45,45,45,45,45,45,454,67,67,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,1251,67,0,0,97,97,97,97,45,45,67,67,2050,0,97,97,45,45,45,732,45,45,67,67,67,67,67,67,67,67,67,67,67,67,97,97,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,772,67,67,67,1293,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,368,2158592,2158592,2158592,2404352,2412544,1323,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,1737,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,1373,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,647,45,45,1387,45,45,1391,45,45,45,45,45,45,45,45,45,45,410,45,45,45,45,45,1400,45,45,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,941,45,943,45,45,45,45,45,45,951,45,67,1438,67,67,67,67,67,67,67,67,67,67,1447,67,67,67,67,67,67,782,67,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,97,1491,97,97,97,97,97,97,97,97,97,97,1500,97,97,97,0,97,97,97,97,97,97,97,97,97,97,1736,97,45,45,1541,45,45,45,45,45,45,45,45,45,45,45,45,45,677,45,45,67,1581,67,67,67,67,67,67,67,67,67,67,67,67,67,67,791,792,67,67,67,67,1598,67,1600,67,67,67,67,67,67,67,67,1472,97,97,97,1727,97,97,97,97,97,97,97,97,97,97,97,97,97,1513,97,97,67,67,97,1879,97,1881,97,0,1884,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,1842,97,97,67,67,67,67,67,97,97,97,97,1928,0,0,0,97,97,97,97,97,97,45,45,45,45,45,1903,45,45,45,67,67,67,67,97,97,97,97,1971,0,0,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1381,45,45,45,45,1976,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1747,809,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,97,907,97,97,97,97,97,97,97,97,97,97,97,638,0,0,0,0,1478,97,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,67,67,67,67,1244,67,67,67,67,67,67,67,67,67,67,67,477,67,67,67,67,67,67,1294,67,67,67,67,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1324,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,0,1374,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,945,45,45,45,45,45,45,45,45,1908,45,45,1910,45,67,67,67,67,67,67,67,67,1919,67,0,0,97,97,97,97,45,2048,67,2049,0,0,97,2051,45,45,45,939,45,45,45,45,45,45,45,45,45,45,45,45,397,45,45,45,1921,67,67,1923,67,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1947,45,1935,0,0,0,97,1939,97,97,1941,97,45,45,45,45,45,45,382,389,45,45,45,45,45,45,45,45,1810,45,45,1812,67,67,67,67,67,256,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,336,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,45,371,373,45,45,45,955,45,45,45,45,45,45,45,45,45,45,45,45,413,45,45,45,457,459,67,67,67,67,67,67,67,67,473,67,478,67,67,482,67,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,97,1828,97,554,556,97,97,97,97,97,97,97,97,570,97,575,97,97,579,97,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,330,97,97,67,746,67,67,67,67,67,67,67,67,67,758,67,67,67,67,67,67,67,1575,67,67,67,67,67,67,67,67,493,67,67,67,67,67,67,67,97,97,844,97,97,97,97,97,97,97,97,97,856,97,97,97,0,97,97,97,97,97,97,97,97,1735,97,97,97,0,97,97,97,97,97,97,97,1642,97,1644,97,97,890,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,67,67,67,67,1065,1066,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,67,67,67,496,67,67,97,97,1505,97,97,97,97,97,97,97,97,97,97,97,97,97,593,97,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,1617,97,97,1635,0,1637,97,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,67,67,1704,67,67,67,67,97,97,97,97,97,97,97,97,97,565,572,97,97,97,97,97,97,97,97,1832,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,1946,45,45,67,67,67,67,67,97,1926,97,1927,97,0,0,0,97,97,1934,2043,0,0,97,97,97,2047,45,45,67,67,0,1832,97,97,45,45,45,981,45,45,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,131427,0,0,0,0,362,0,365,28809,367,139,45,45,372,45,45,45,45,1661,1662,45,45,45,45,45,1666,45,45,45,45,45,1673,45,1675,45,45,45,45,45,45,45,67,1426,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,67,67,45,418,45,45,420,45,45,423,45,45,45,45,45,45,45,45,959,45,45,962,45,45,45,45,458,67,67,67,67,67,67,67,67,67,67,67,67,67,67,483,67,67,67,67,504,67,67,506,67,67,509,67,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,555,97,97,97,97,97,97,97,97,97,97,97,97,97,97,580,97,97,97,97,601,97,97,603,97,97,606,97,97,97,97,97,97,848,97,97,97,97,97,97,97,97,97,1498,97,97,97,97,97,97,45,45,714,45,45,45,45,45,45,45,45,45,45,45,45,45,989,990,45,67,67,67,67,67,1011,67,67,67,67,1015,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,467,67,67,67,67,67,67,67,45,45,1179,45,45,45,45,45,45,45,45,45,45,45,45,45,1003,1004,67,1217,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,728,67,1461,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,97,1516,97,97,97,97,97,97,97,97,97,97,97,97,97,97,871,97,67,67,67,1705,67,67,67,97,97,97,97,97,97,97,97,97,567,97,97,97,97,97,97,97,97,97,97,1715,97,97,97,97,97,97,97,97,97,0,0,0,45,45,1380,45,45,45,45,45,67,67,97,97,97,97,97,0,0,0,97,1887,97,97,0,0,97,97,97,0,97,97,97,97,97,2006,45,45,1907,45,45,45,45,45,67,67,67,67,67,67,67,67,67,1920,67,97,0,2035,97,97,97,97,97,45,45,45,45,67,67,67,1428,67,67,67,67,67,67,1435,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,146,45,152,45,45,165,45,175,45,180,45,45,187,190,195,45,203,254,257,262,67,270,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,293,97,299,97,97,312,97,322,97,327,97,97,334,337,342,97,350,97,97,0,40976,0,18,18,24,24,27,27,27,67,484,67,67,67,67,67,67,67,67,67,67,67,67,67,499,97,581,97,97,97,97,97,97,97,97,97,97,97,97,97,596,648,45,650,45,651,45,653,45,45,45,657,45,45,45,45,45,45,1954,67,67,67,1958,67,67,67,67,67,67,67,768,67,67,67,67,67,67,67,67,769,67,67,67,67,67,67,67,680,45,45,45,45,45,45,45,45,688,689,691,45,45,45,45,45,983,45,45,45,45,45,45,45,45,45,45,947,45,45,45,45,952,45,45,698,699,45,45,702,703,45,45,45,45,45,45,45,711,744,67,67,67,67,67,67,67,67,67,757,67,67,67,67,761,67,67,67,67,765,67,767,67,67,67,67,67,67,67,67,775,776,778,67,67,67,67,67,67,785,786,67,67,789,790,67,67,67,67,67,67,1442,67,67,67,67,67,67,67,67,67,97,97,97,1775,97,97,97,67,67,67,67,67,798,67,67,67,802,67,67,67,67,67,67,67,67,1465,67,67,1468,67,67,1471,67,67,810,67,67,67,67,67,67,67,67,67,821,25398,542,13112,544,57889,0,0,54074,54074,550,0,833,97,835,97,836,97,838,97,97,0,0,97,97,97,2002,97,97,97,97,97,45,45,45,45,45,1740,45,45,45,1744,45,45,45,97,842,97,97,97,97,97,97,97,97,97,855,97,97,97,97,0,1717,1718,97,97,97,97,97,1722,97,0,0,859,97,97,97,97,863,97,865,97,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,873,874,876,97,97,97,97,97,97,883,884,97,97,887,888,97,18,131427,0,0,0,0,0,0,362,225280,0,365,0,367,0,45,45,45,1531,45,45,45,45,45,45,45,45,45,45,45,1199,45,45,45,45,45,97,97,908,97,97,97,97,97,97,97,97,97,919,638,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2425117,2158877,2158877,2158877,2158877,2158877,2158877,2597149,2158877,2158877,2158877,2158877,2158877,2158877,2642205,2158877,2158877,2158877,2158877,2158877,3158301,0,2375818,2379914,2158730,2158730,2420874,2158730,2449546,2158730,2158730,953,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,965,978,45,45,45,45,45,45,985,45,45,45,45,45,45,45,45,971,45,45,45,45,45,45,45,67,67,67,67,67,1027,67,1029,67,67,67,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,1077,1078,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,366,0,139,2158730,2158730,2158730,2404490,2412682,1113,97,97,97,97,97,97,1121,97,1123,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1540,1155,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,1168,97,97,1171,1172,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,1533,45,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,183,45,45,45,45,201,45,45,45,1219,45,45,45,45,45,45,45,1226,45,45,45,45,45,168,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1046,67,67,1254,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,806,807,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,1351,97,97,97,1354,97,97,97,1359,97,97,97,0,97,97,97,97,1640,97,97,97,97,97,97,97,897,97,97,97,902,97,97,97,97,97,97,97,97,1366,97,97,97,97,97,97,97,1371,97,97,97,0,97,97,97,1730,97,97,97,97,97,97,97,97,915,97,97,97,97,0,360,0,67,67,67,1440,67,67,67,67,67,67,67,67,67,67,67,67,1017,67,1019,67,67,67,67,67,1453,67,67,67,67,67,67,67,67,67,67,1459,97,97,97,1493,97,97,97,97,97,97,97,97,97,97,97,97,97,1525,97,97,97,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,1514,67,67,67,67,1584,67,67,67,67,67,1590,67,67,67,67,67,67,67,783,67,67,67,788,67,67,67,67,67,67,67,67,67,1599,1601,67,67,67,1604,67,1606,1607,67,1472,0,1474,0,1476,0,97,97,97,97,97,97,1614,97,97,97,97,45,45,1850,45,45,45,45,1855,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,1229,97,1618,97,97,97,97,97,97,97,1625,97,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,447,45,45,45,45,45,67,67,1633,97,97,0,97,97,97,97,97,97,97,97,1643,1645,97,97,0,0,97,97,1784,97,97,97,0,0,97,97,0,97,1894,1895,97,1897,97,45,45,45,45,45,45,45,45,45,656,45,45,45,45,45,45,97,1648,97,1650,1651,97,0,45,45,45,1654,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,658,45,45,45,45,664,45,45,1659,45,45,45,45,45,45,45,45,45,45,45,45,45,1187,45,45,1669,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1005,67,67,1681,67,67,67,67,67,67,67,1686,67,67,67,67,67,67,67,784,67,67,67,67,67,67,67,67,1055,67,67,67,67,1060,67,67,97,97,1713,97,0,97,97,97,97,97,97,97,97,97,0,0,0,1378,45,45,45,45,45,45,45,408,45,45,45,45,45,45,45,45,1547,45,1549,45,45,45,45,45,97,97,1780,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,2027,2028,45,45,67,67,2031,2032,67,45,45,1804,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1917,67,67,67,67,67,67,67,1819,67,67,67,67,67,67,67,67,97,97,97,1708,97,97,97,97,97,45,45,1862,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,67,1877,97,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,1839,0,0,97,97,97,97,1936,0,0,97,97,97,97,97,97,1943,1944,1945,45,45,45,45,670,45,45,45,45,674,45,45,45,45,678,45,1948,45,1950,45,45,45,45,1955,1956,1957,67,67,67,1960,67,1962,67,67,67,67,1967,1968,1969,97,0,0,0,97,97,1974,97,0,1936,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1906,0,1977,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,1746,45,45,45,45,2011,67,67,2013,67,67,67,2017,97,97,0,0,2021,97,8192,97,97,2025,45,45,45,45,45,45,67,67,67,67,67,1916,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,140,45,45,45,1180,45,45,45,45,1184,45,45,45,45,45,45,45,387,45,392,45,45,396,45,45,399,45,45,67,207,67,67,67,67,67,67,236,67,67,67,67,67,67,67,800,67,67,67,67,67,67,67,67,67,1603,67,67,67,67,67,0,97,97,287,97,97,97,97,97,97,316,97,97,97,97,97,97,0,45,45,45,45,45,45,45,1656,1657,45,376,45,45,45,45,45,388,45,45,45,45,45,45,45,45,1406,45,45,45,45,45,45,45,67,67,67,67,462,67,67,67,67,67,474,67,67,67,67,67,67,67,817,67,67,67,67,25398,542,13112,544,97,97,97,97,559,97,97,97,97,97,571,97,97,97,97,97,97,896,97,97,97,900,97,97,97,97,97,97,912,914,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,45,391,45,45,45,45,45,45,45,45,713,45,45,45,45,45,45,45,45,45,45,45,45,45,45,662,45,1140,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,636,67,67,1283,67,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,1363,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,889,97,97,97,1714,0,97,97,97,97,97,97,97,97,97,0,0,926,45,45,45,45,45,45,45,45,672,45,45,45,45,45,45,45,45,686,45,45,45,45,45,45,45,45,944,45,45,45,45,45,45,45,45,1676,45,45,45,45,45,45,67,97,97,97,1833,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1902,45,45,45,45,45,957,45,45,45,45,961,45,963,45,45,45,67,97,2034,0,97,97,97,97,97,2040,45,45,45,2042,67,67,67,67,67,67,1574,67,67,67,67,67,1578,67,67,67,67,67,67,799,67,67,67,804,67,67,67,67,67,67,67,1298,0,0,0,1304,0,0,0,1310,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,1414,45,45,45,45,45,45,45,45,45,45,428,45,45,45,45,45,57889,0,0,54074,54074,550,831,97,97,97,97,97,97,97,97,97,568,97,97,97,97,578,97,45,45,968,45,45,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,67,67,67,67,67,25398,1082,13112,1086,54074,1090,0,0,0,0,0,0,364,0,0,0,139,2158592,2158592,2158592,2404352,2412544,67,67,67,67,1464,67,67,67,67,67,67,67,67,67,67,67,510,67,67,67,67,97,97,97,97,1519,97,97,97,97,97,97,97,97,97,97,97,918,97,0,0,0,0,1528,45,45,45,45,45,45,45,45,45,45,45,45,45,45,976,45,1554,45,45,45,45,45,45,45,45,1562,45,45,1565,45,45,45,45,683,45,45,45,687,45,45,692,45,45,45,45,45,1953,45,67,67,67,67,67,67,67,67,67,1014,67,67,67,67,67,67,1568,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,1594,97,97,1649,97,97,97,0,45,45,1653,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,45,45,1670,45,1672,45,45,45,45,45,45,45,45,45,45,67,736,67,67,67,67,67,741,67,67,67,1680,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,67,1692,67,67,67,67,67,67,67,1697,67,1699,67,67,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,468,475,67,67,67,67,67,67,1769,67,67,67,67,67,67,67,97,97,97,97,97,97,97,624,97,97,97,97,97,97,634,97,97,1792,97,97,97,97,97,97,97,45,45,45,45,45,45,45,958,45,45,45,45,45,45,964,45,150,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,977,204,45,67,67,67,217,67,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,67,67,67,67,271,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,351,97,0,40976,0,18,18,24,24,27,27,27,45,45,938,45,45,45,45,45,45,45,45,45,45,45,45,45,1398,45,45,45,153,45,161,45,45,45,45,45,45,45,45,45,45,45,45,660,661,45,45,205,45,67,67,67,67,220,67,228,67,67,67,67,67,67,67,0,0,0,0,0,280,94,0,0,67,67,67,67,67,272,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,352,97,0,40976,0,18,18,24,24,27,27,27,45,439,45,45,45,45,45,445,45,45,45,452,45,45,67,67,212,216,67,67,67,67,67,241,67,246,67,252,67,67,486,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,1245,67,67,67,67,67,67,67,67,1013,67,67,1016,67,67,67,67,67,521,67,67,525,67,67,67,67,67,531,67,67,67,538,67,0,0,2046,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,1418,45,45,1421,97,97,583,97,97,97,97,97,97,97,591,97,97,97,97,97,97,913,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,1384,97,618,97,97,622,97,97,97,97,97,628,97,97,97,635,97,18,131427,0,0,0,639,0,132,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,932,45,45,45,45,45,1544,45,45,45,45,45,1550,45,45,45,45,45,1194,45,1196,45,45,45,45,45,45,45,45,999,45,45,45,45,45,67,67,45,45,667,45,45,45,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,696,45,45,45,701,45,45,45,45,45,45,45,45,710,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,194,45,45,45,729,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,805,67,67,67,67,67,67,67,1587,67,1589,67,67,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,0,0,0,0,0,0,2162968,0,0,67,67,67,67,67,814,816,67,67,67,67,67,25398,542,13112,544,67,67,1008,67,67,67,67,67,67,67,67,67,67,67,1020,67,0,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,45,67,67,67,67,1429,67,1430,67,67,67,67,67,1062,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,1076,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,97,97,97,97,1102,97,97,97,97,97,97,97,97,97,97,97,1124,97,1126,97,97,1114,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1112,97,97,1156,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,97,97,1170,97,97,97,97,0,921,0,0,0,0,0,0,45,45,45,45,1532,45,45,45,45,1536,45,45,45,45,45,172,45,45,45,45,45,45,45,45,45,45,706,45,45,709,45,45,1177,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,1204,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,45,45,1232,45,45,45,45,45,45,45,67,1237,67,67,67,67,67,67,1053,1054,67,67,67,67,67,67,1061,67,67,1282,67,67,67,67,67,67,67,67,67,1289,67,67,67,1292,97,97,97,97,1339,97,97,97,97,97,97,1344,97,97,97,97,45,1849,45,1851,45,45,45,45,45,45,45,45,721,45,45,45,45,45,726,45,1385,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1188,45,45,1401,1402,45,45,45,45,1405,45,45,45,45,45,45,45,45,1752,45,45,45,45,45,67,67,1410,45,45,45,1413,45,1415,45,45,45,45,45,45,1419,45,45,45,45,1806,45,45,45,45,45,45,67,67,67,67,67,67,67,97,97,2019,0,97,67,67,67,1452,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,1259,67,67,67,67,67,67,1264,67,67,1460,67,1462,67,67,67,67,67,67,1466,67,67,67,67,67,67,67,67,1588,67,67,67,67,67,67,67,0,1300,0,0,0,1306,0,0,0,97,97,97,1506,97,97,97,97,97,97,97,97,1512,97,97,97,0,1728,97,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,1515,97,1517,97,97,97,97,97,97,1521,97,97,97,97,97,97,0,45,1652,45,45,45,1655,45,45,45,45,45,1542,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,1553,45,45,45,1556,45,45,45,45,45,45,45,45,45,45,45,45,45,693,45,45,45,67,67,67,67,1572,67,67,67,67,1576,67,67,67,67,67,67,67,67,1602,67,67,1605,67,67,67,0,67,1582,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1580,67,67,1596,67,67,67,67,67,67,67,67,67,67,67,67,67,0,542,0,544,67,67,67,67,1759,67,67,67,67,67,67,67,67,67,67,67,533,67,67,67,67,67,67,67,1770,67,67,67,67,67,97,97,97,97,97,97,1777,97,97,97,1793,97,97,97,97,97,45,45,45,45,45,45,45,998,45,45,1001,1002,45,45,67,67,45,1861,45,67,67,67,67,67,67,67,67,1871,67,1873,1874,67,0,97,45,67,0,97,45,67,16384,97,45,67,97,0,0,0,1473,0,1082,0,0,0,1475,0,1086,0,0,0,1477,1876,67,97,97,97,97,97,1883,0,1885,97,97,97,1889,0,0,0,286,0,0,0,286,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,126,126,126,2053,0,2055,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,2039,97,45,45,45,45,67,67,67,67,67,226,67,67,67,67,67,67,67,67,1246,67,67,1249,1250,67,67,67,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,141,45,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,1186,45,45,1189,45,45,155,45,45,45,45,45,45,45,45,45,191,45,45,45,45,700,45,45,45,45,45,45,45,45,45,45,45,1753,45,45,45,67,67,45,45,67,208,67,67,67,222,67,67,67,67,67,67,67,67,67,1764,67,67,67,67,67,67,67,258,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,288,97,97,97,302,97,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,338,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,370,45,45,45,45,716,45,45,45,45,45,722,45,45,45,45,45,45,1912,67,67,67,67,67,67,67,67,67,819,67,67,25398,542,13112,544,45,403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1409,45,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,67,771,67,67,67,67,520,67,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,1271,67,67,67,1274,67,67,67,1279,67,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,553,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,97,1138,97,97,97,97,617,97,97,97,97,97,97,97,97,97,97,97,631,97,97,97,0,1834,97,97,97,97,97,0,0,0,97,97,97,97,97,353,0,40976,0,18,18,24,24,27,27,27,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,682,45,45,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,67,67,747,748,67,67,67,67,755,67,67,67,67,67,67,67,0,0,0,1302,0,0,0,1308,0,67,794,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1701,67,97,97,97,845,846,97,97,97,97,853,97,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,97,892,97,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,45,992,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,1239,67,67,67,1063,67,67,67,67,67,1068,67,67,67,67,67,67,67,0,0,1301,0,0,0,1307,0,0,97,1141,97,97,97,97,97,97,97,97,97,97,97,1152,97,97,0,0,97,97,2001,0,97,2003,97,97,97,45,45,45,1739,45,45,45,1742,45,45,45,45,45,97,97,97,97,1157,97,97,97,97,97,1162,97,97,97,97,97,97,1145,97,97,97,97,97,1151,97,97,97,1253,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,539,45,1423,45,45,67,67,67,67,67,67,67,1431,67,67,67,67,67,67,67,1695,67,67,67,67,67,1700,67,1702,67,67,1439,67,67,67,67,67,67,67,67,67,67,67,67,67,514,67,67,97,97,1492,97,97,97,97,97,97,97,97,97,97,97,97,97,611,97,97,1703,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,852,97,97,97,97,97,97,45,1949,45,1951,45,45,45,67,67,67,67,67,67,67,1961,67,0,97,45,67,0,97,2060,2061,0,2062,45,67,97,0,0,2036,97,97,97,97,45,45,45,45,67,67,67,67,67,223,67,67,237,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,507,67,67,67,67,67,67,67,1963,67,67,67,97,97,97,97,0,1972,0,97,97,97,1975,0,921,29315,0,0,0,0,45,45,45,931,45,45,45,45,45,407,45,45,45,45,45,45,45,45,45,417,45,45,1989,67,67,67,67,67,67,67,67,67,67,67,1996,97,18,131427,0,0,360,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,930,45,45,45,45,45,45,444,45,45,45,45,45,45,45,67,67,97,97,1998,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,1985,45,1986,45,45,45,156,45,45,170,45,45,45,45,45,45,45,45,45,45,675,45,45,45,45,679,131427,0,358,0,0,362,0,365,28809,367,139,45,45,45,45,45,381,45,45,45,45,45,45,45,45,45,400,45,45,419,45,45,45,45,45,45,45,45,45,45,45,45,436,67,67,67,67,67,505,67,67,67,67,67,67,67,67,67,67,820,67,25398,542,13112,544,67,67,522,67,67,67,67,67,529,67,67,67,67,67,67,67,0,1299,0,0,0,1305,0,0,0,97,97,619,97,97,97,97,97,626,97,97,97,97,97,97,97,1105,97,97,97,97,1109,97,97,97,67,67,67,67,749,67,67,67,67,67,67,67,67,67,760,67,0,97,45,67,2058,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,2041,67,67,67,67,67,780,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,97,97,97,878,97,97,97,97,97,97,97,97,97,97,97,97,97,1629,97,0,45,979,45,45,45,45,984,45,45,45,45,45,45,45,45,45,1198,45,45,45,45,45,45,67,1023,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,470,67,67,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1094,0,0,0,1092,1315,0,0,0,0,97,97,97,97,97,97,97,97,97,1486,97,1489,97,97,97,1117,97,97,97,97,1122,97,97,97,97,97,97,97,1146,97,97,97,97,97,97,97,97,881,97,97,97,886,97,97,97,1311,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1615,97,97,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,97,1847,97,45,45,45,45,1852,45,45,45,45,45,45,45,1235,45,45,45,67,67,67,67,67,1868,67,67,67,1872,67,67,67,67,67,97,97,97,97,1882,0,0,0,97,97,97,97,0,1891,67,67,67,67,67,97,97,97,97,97,1929,0,0,97,97,97,97,97,97,45,1900,45,1901,45,45,45,1905,45,67,2054,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,2037,2038,97,97,45,45,45,45,67,67,67,67,1867,67,67,67,67,67,67,67,67,67,1774,97,97,97,97,97,97,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,142,45,45,45,1412,45,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,157,45,45,171,45,45,45,182,45,45,45,45,200,45,45,45,1543,45,45,45,45,45,45,45,45,1551,45,45,45,45,1181,45,45,45,45,45,45,45,45,45,45,45,1211,45,45,45,1214,45,45,45,67,209,67,67,67,224,67,67,238,67,67,67,249,67,0,97,2056,2057,0,2059,45,67,0,97,45,67,97,0,0,1937,97,97,97,97,97,97,45,45,45,45,45,45,1741,45,45,45,45,45,45,67,67,67,267,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,289,97,97,97,304,97,97,318,97,97,97,329,97,97,0,0,97,1783,97,97,97,97,0,0,97,97,0,97,97,97,45,2026,45,45,45,45,67,2030,67,67,67,67,67,67,1041,67,67,67,67,67,67,67,67,67,1044,67,67,67,67,67,67,97,97,347,97,97,97,0,40976,0,18,18,24,24,27,27,27,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1420,45,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,840,67,1007,67,67,67,67,67,67,67,67,67,67,67,67,67,67,759,67,67,67,67,67,67,67,1052,67,67,67,67,67,67,67,67,67,67,1031,67,67,67,67,67,97,97,97,1101,97,97,97,97,97,97,97,97,97,97,97,97,592,97,97,97,1190,45,45,45,45,45,1195,45,1197,45,45,45,45,1201,45,45,45,45,1952,45,45,67,67,67,67,67,67,67,67,67,67,67,67,250,67,67,67,1255,67,1257,67,67,67,67,1261,67,67,67,67,67,67,67,67,1685,67,67,67,67,67,67,67,0,24851,12565,0,0,0,0,28809,53532,67,67,1267,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,0,0,0,0,0,0,2162688,0,0,1281,67,67,67,67,1285,67,67,67,67,67,67,67,67,67,67,1070,67,67,67,67,67,1335,97,1337,97,97,97,97,1341,97,97,97,97,97,97,97,97,882,97,97,97,97,97,97,97,1347,97,97,97,97,97,97,1353,97,97,97,97,97,97,1361,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,0,544,0,550,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2158592,2990080,2158592,2158592,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,53530,97,97,97,1365,97,97,97,97,97,97,97,97,97,97,97,97,608,97,97,97,45,45,1424,45,1425,67,67,67,67,67,67,67,67,67,67,67,1058,67,67,67,67,45,1555,45,45,1557,45,45,45,45,45,45,45,45,45,45,45,707,45,45,45,45,67,67,1570,67,67,67,67,67,67,67,67,67,67,67,67,67,773,67,67,1595,67,67,1597,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,139,2158592,2158592,2158592,2404352,2412544,97,97,97,1636,97,97,97,1639,97,97,1641,97,97,97,97,97,97,1173,0,921,0,0,0,0,0,0,45,67,67,67,1693,67,67,67,67,67,67,67,1698,67,67,67,67,67,67,67,1773,67,97,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,880,97,97,97,97,97,97,97,97,1106,97,97,97,97,97,97,97,1860,45,45,67,67,1865,67,67,67,67,1870,67,67,67,67,1875,67,67,97,97,1880,97,97,0,0,0,97,97,1888,97,0,0,0,1938,97,97,97,97,97,45,45,45,45,45,45,1854,45,45,45,45,45,45,45,1909,45,45,1911,67,67,67,67,67,67,67,67,67,67,1248,67,67,67,67,67,67,1922,67,67,1924,97,97,97,97,97,0,0,0,97,97,97,97,97,1898,45,45,45,45,45,45,1904,45,45,67,67,67,67,97,97,97,97,0,0,16384,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,1724,2008,2009,45,45,67,67,67,2014,2015,67,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,45,2022,0,2023,97,97,45,45,45,45,45,45,67,67,67,67,67,67,1869,67,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,147,151,154,45,162,45,45,176,178,181,45,45,45,192,196,45,45,45,45,2012,67,67,67,67,67,67,2018,97,0,0,97,1978,97,97,97,1982,45,45,45,45,45,45,45,45,45,972,973,45,45,45,45,45,67,259,263,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,294,298,301,97,309,97,97,323,325,328,97,97,97,97,97,560,97,97,97,569,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,339,343,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,67,67,503,67,67,67,67,67,67,67,67,67,512,67,67,519,97,97,600,97,97,97,97,97,97,97,97,97,609,97,97,616,45,649,45,45,45,45,45,654,45,45,45,45,45,45,45,45,1393,45,45,45,45,45,45,45,45,1209,45,45,45,45,45,45,45,67,763,67,67,67,67,67,67,67,67,770,67,67,67,774,67,0,2045,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,994,45,45,45,45,45,45,45,45,45,45,67,67,213,67,219,67,67,232,67,242,67,247,67,67,67,779,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,67,811,67,67,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,834,97,97,97,97,97,839,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,645,97,97,861,97,97,97,97,97,97,97,97,868,97,97,97,872,97,97,877,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,97,97,97,97,909,97,97,97,97,97,97,97,97,97,0,0,0,18,18,24,24,27,27,27,1036,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,1033,67,67,67,97,97,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,0,67,67,67,1295,67,67,67,0,0,0,0,0,0,0,0,0,97,1317,97,97,97,97,97,97,1375,97,97,97,0,0,0,45,1379,45,45,45,45,45,45,422,45,45,45,429,431,45,45,45,45,0,1090,0,0,97,1479,97,97,97,97,97,97,97,97,97,97,1357,97,97,97,97,97,97,97,97,97,1716,97,97,97,97,97,97,97,97,97,1723,0,921,29315,0,0,0,0,45,929,45,45,45,45,45,45,45,1392,45,45,45,45,45,45,45,45,45,960,45,45,45,45,45,45,97,97,97,1738,45,45,45,45,45,45,45,1743,45,45,45,45,166,45,45,45,45,184,186,45,45,197,45,45,97,1779,0,0,97,97,97,97,97,97,0,0,97,97,0,97,18,131427,0,638,0,0,0,0,362,0,640,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,1537,45,45,45,45,45,1803,45,45,45,45,45,1809,45,45,45,67,67,67,1814,67,67,67,67,67,67,1821,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,0,0,67,67,67,1818,67,67,67,67,67,1824,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,1890,0,1829,97,97,0,0,97,97,1836,97,97,0,0,0,97,97,97,97,1981,45,45,45,45,45,45,45,45,45,1987,1845,97,97,97,45,45,45,45,45,1853,45,45,45,1857,45,45,45,67,1864,67,1866,67,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,1710,1711,67,67,97,97,97,97,97,0,0,0,1886,97,97,97,0,0,97,97,97,97,1838,0,0,0,97,1843,97,0,1893,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1745,45,45,67,67,67,67,67,97,97,97,97,97,0,0,1931,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,67,2044,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1660,45,45,45,45,45,45,45,45,45,45,45,45,453,45,455,67,67,67,67,268,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,348,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,359,0,0,362,0,365,28809,367,139,45,45,45,45,45,421,45,45,45,45,45,45,45,434,45,45,695,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1667,45,0,921,29315,0,925,0,0,45,45,45,45,45,45,45,45,45,1811,45,67,67,67,67,67,67,1037,67,1039,67,67,67,67,67,67,67,67,67,67,67,67,1277,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1095,0,0,0,1096,97,97,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,97,1131,97,1133,97,97,97,97,97,97,97,97,97,97,1370,97,97,97,97,97,1312,0,0,0,0,1096,0,0,0,97,97,97,97,97,97,97,1327,97,97,97,97,97,1332,97,97,97,1830,97,0,0,97,97,97,97,97,0,0,0,97,97,97,1896,97,97,45,45,45,45,45,45,45,45,45,1548,45,45,45,45,45,45,133,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,380,45,45,45,45,45,45,45,45,45,45,401,45,45,158,45,45,45,45,45,45,45,45,45,45,45,45,45,1200,45,45,45,45,206,67,67,67,67,67,225,67,67,67,67,67,67,67,67,754,67,67,67,67,67,67,67,57889,0,0,54074,54074,550,832,97,97,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,67,67,67,67,67,25398,1083,13112,1087,54074,1091,0,0,0,0,0,0,1316,0,831,97,97,97,97,97,97,97,1174,921,0,1175,0,0,0,0,45,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,148,67,67,264,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,295,97,97,97,97,313,97,97,97,97,331,333,97,18,131427,356,638,0,0,0,0,362,0,0,365,0,367,0,45,45,1530,45,45,45,45,45,45,45,45,45,45,45,45,988,45,45,45,97,344,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,402,404,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1756,67,438,45,45,45,45,45,45,45,45,449,450,45,45,45,67,67,214,218,221,67,229,67,67,243,245,248,67,67,67,67,67,488,490,67,67,67,67,67,67,67,67,67,67,67,1071,67,1073,67,67,67,67,67,524,67,67,67,67,67,67,67,67,535,536,67,67,67,67,67,67,1683,1684,67,67,67,67,1688,1689,67,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,97,97,97,585,587,97,97,97,97,97,97,97,97,97,97,97,1163,97,97,97,97,97,97,97,621,97,97,97,97,97,97,97,97,632,633,97,97,0,0,1782,97,97,97,97,97,0,0,97,97,0,97,712,45,45,45,717,45,45,45,45,45,45,45,45,725,45,45,45,163,167,173,177,45,45,45,45,45,193,45,45,45,45,982,45,45,45,45,45,45,987,45,45,45,45,45,1558,45,1560,45,45,45,45,45,45,45,45,704,705,45,45,45,45,45,45,45,45,731,45,45,45,67,67,67,67,67,739,67,67,67,67,67,67,273,0,24850,12564,0,0,0,0,28809,53531,67,67,67,764,67,67,67,67,67,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,812,67,67,67,67,818,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,97,97,97,97,837,97,97,97,97,97,602,97,97,97,97,97,97,97,97,97,97,1137,97,97,97,97,97,97,97,97,97,862,97,97,97,97,97,97,97,97,97,97,97,1627,97,97,97,0,97,97,97,97,910,97,97,97,97,916,97,97,97,0,0,0,97,97,1940,97,97,1942,45,45,45,45,45,45,385,45,45,45,45,395,45,45,45,45,966,45,969,45,45,45,45,45,45,45,45,45,45,975,45,45,45,406,45,45,45,45,45,45,45,45,45,45,45,45,974,45,45,45,67,67,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,67,67,1040,67,1042,67,1045,67,67,67,67,67,67,67,97,1706,97,97,97,1709,97,97,97,67,67,67,67,1051,67,67,67,67,67,1057,67,67,67,67,67,67,67,1443,67,67,1446,67,67,67,67,67,67,67,1297,0,0,0,1303,0,0,0,1309,67,67,67,67,1079,25398,0,13112,0,54074,0,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,1098,97,97,97,97,97,1104,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,1128,97,97,97,97,97,97,1134,97,1136,97,1139,97,97,97,97,97,97,1622,97,97,97,97,97,97,97,97,0,921,0,0,0,1176,0,646,45,67,67,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,67,97,1348,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1127,97,67,1569,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1448,1449,67,1816,67,67,67,67,67,67,67,67,67,1825,67,67,1827,97,97,0,1781,97,97,97,97,97,97,0,0,97,97,0,97,97,97,1831,0,0,97,97,97,97,97,0,0,0,97,97,97,1980,97,45,45,45,45,45,45,45,45,45,45,1395,45,45,45,45,45,97,1846,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,45,45,2010,45,67,67,67,67,67,2016,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,2007,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,143,45,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,67,1813,67,67,1815,45,45,67,210,67,67,67,67,67,67,239,67,67,67,67,67,67,67,1454,67,67,67,67,67,67,67,67,67,1445,67,67,67,67,67,67,97,97,290,97,97,97,97,97,97,319,97,97,97,97,97,97,303,97,97,317,97,97,97,97,97,97,305,97,97,97,97,97,97,97,97,97,899,97,97,97,97,97,97,375,45,45,45,379,45,45,390,45,45,394,45,45,45,45,45,443,45,45,45,45,45,45,45,45,67,67,67,67,67,461,67,67,67,465,67,67,476,67,67,480,67,67,67,67,67,67,1694,67,67,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,500,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,97,97,97,558,97,97,97,562,97,97,573,97,97,577,97,97,97,97,97,895,97,97,97,97,97,97,903,97,97,97,0,97,97,1638,97,97,97,97,97,97,97,97,1646,597,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1334,45,681,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1396,45,45,1399,45,45,730,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1434,67,67,67,67,67,67,750,67,67,67,67,67,67,67,67,67,67,1456,67,67,67,67,67,45,45,993,45,45,45,45,45,45,45,45,45,45,45,67,67,1238,67,67,1006,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1280,1048,1049,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,67,1286,67,67,67,67,67,67,67,1291,67,97,97,1100,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,920,97,97,1142,1143,97,97,97,97,97,97,97,97,97,97,1153,97,97,97,97,97,1158,97,97,97,1161,97,97,97,97,1166,97,97,97,97,97,1325,97,97,97,97,97,97,97,97,97,97,1328,97,97,97,97,97,97,97,45,1218,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,67,67,67,67,67,1269,67,67,67,67,67,67,67,67,1278,67,67,67,67,67,67,1761,67,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,97,97,1349,97,97,97,97,97,97,97,97,1358,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,0,921,0,0,926,0,0,0,45,45,1411,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1754,45,45,67,67,1301,0,1307,0,1313,97,97,97,97,97,97,97,97,97,97,97,21054,97,97,97,97,67,1757,67,67,67,1760,67,67,67,67,67,67,67,67,67,67,1467,67,67,67,67,67,1778,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,67,67,67,67,67,1820,67,1822,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1933,97,1892,97,97,97,97,97,97,1899,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,673,45,45,45,45,45,45,45,67,67,67,67,67,1925,97,97,97,97,0,0,0,97,97,97,97,97,623,97,97,97,97,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,1796,97,45,45,45,45,45,45,45,970,45,45,45,45,45,45,45,45,1417,45,45,45,45,45,45,45,67,1964,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,97,97,1721,97,97,0,0,1997,97,0,0,2e3,97,97,0,97,97,97,97,97,45,45,45,45,733,45,67,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,144,45,45,45,1805,45,1807,45,45,45,45,45,67,67,67,67,67,67,231,67,67,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,45,45,67,211,67,67,67,67,230,234,240,244,67,67,67,67,67,67,464,67,67,67,67,67,67,479,67,67,67,260,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,291,97,97,97,97,310,314,320,324,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,1355,97,97,97,97,97,97,1362,340,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,360,0,362,0,365,28809,367,139,369,45,45,45,374,67,67,460,67,67,67,67,466,67,67,67,67,67,67,67,67,801,67,67,67,67,67,67,67,67,67,487,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,67,1772,67,67,97,97,97,97,97,97,97,0,921,922,1175,0,0,0,0,45,67,502,67,67,67,67,67,67,67,508,67,67,67,515,517,67,67,67,67,67,97,97,97,97,97,0,0,0,1932,97,97,0,1999,97,97,97,0,97,97,2004,2005,97,45,45,45,45,1193,45,45,45,45,45,45,45,45,45,45,45,676,45,45,45,45,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,552,97,97,97,97,97,1377,0,0,45,45,45,45,45,45,45,45,655,45,45,45,45,45,45,45,97,97,557,97,97,97,97,563,97,97,97,97,97,97,97,97,1135,97,97,97,97,97,97,97,97,97,584,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,911,97,97,97,97,97,97,97,638,0,0,0,0,1315,0,0,0,0,97,97,97,1319,97,97,97,0,97,97,97,97,97,97,1733,97,97,97,97,97,97,1340,97,97,97,1343,97,97,1345,97,1346,97,599,97,97,97,97,97,97,97,605,97,97,97,612,614,97,97,97,97,97,1794,97,97,97,45,45,45,45,45,45,45,1207,45,45,45,45,45,45,1213,45,45,745,67,67,67,67,751,67,67,67,67,67,67,67,67,67,67,1577,67,67,67,67,67,762,67,67,67,67,766,67,67,67,67,67,67,67,67,67,67,1765,67,67,67,67,67,777,67,67,781,67,67,67,67,67,67,67,67,67,67,67,67,1592,1593,67,67,97,843,97,97,97,97,849,97,97,97,97,97,97,97,97,97,1510,97,97,97,97,97,97,97,860,97,97,97,97,864,97,97,97,97,97,97,97,97,97,1797,45,45,45,45,1801,45,97,875,97,97,879,97,97,97,97,97,97,97,97,97,97,97,1522,97,97,97,97,97,991,45,45,45,45,996,45,45,45,45,45,45,45,45,67,67,215,67,67,67,67,233,67,67,67,67,251,253,1022,67,67,67,1026,67,67,67,67,67,67,67,67,67,67,1035,67,67,1038,67,67,67,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,67,1064,67,67,67,1067,67,67,67,67,1072,67,67,67,67,67,67,1296,0,0,0,0,0,0,0,0,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,1096,0,921,29315,0,0,0,0,928,45,45,45,45,45,934,45,45,45,164,45,45,45,45,45,45,45,45,45,198,45,45,45,378,45,45,45,45,45,45,393,45,45,45,398,45,97,97,1116,97,97,97,1120,97,97,97,97,97,97,97,97,97,1147,1148,97,97,97,97,97,97,97,1129,97,97,1132,97,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,0,45,1178,45,45,45,45,45,45,45,45,45,1185,45,45,45,45,441,45,45,45,45,45,45,451,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,1260,67,67,67,1263,67,67,1265,1203,45,45,1205,45,1206,45,45,45,45,45,45,45,45,45,1216,67,1266,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,492,67,67,67,67,67,67,67,67,67,471,67,67,67,67,481,67,45,1386,45,1389,45,45,45,45,1394,45,45,45,1397,45,45,45,45,995,45,997,45,45,45,45,45,45,45,67,67,67,67,1915,67,67,67,67,67,1422,45,45,45,67,67,67,67,67,67,67,67,67,1433,67,1436,67,67,67,67,1441,67,67,67,1444,67,67,67,67,67,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,97,1494,97,97,97,1497,97,97,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,67,1571,67,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,67,67,1583,67,67,67,67,67,67,67,67,1591,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,97,1634,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1125,97,97,97,1647,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,1183,45,45,45,45,45,45,45,45,45,409,45,45,45,45,45,45,1658,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1668,1712,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,1835,97,97,97,97,0,0,0,97,97,1844,97,97,1726,0,97,97,97,97,97,1732,97,1734,97,97,97,97,97,300,97,308,97,97,97,97,97,97,97,97,866,97,97,97,97,97,97,97,67,67,67,1758,67,67,67,1762,67,67,67,67,67,67,67,67,1043,67,67,67,67,67,67,67,67,67,67,67,67,1771,67,67,67,97,97,97,97,97,1776,97,97,97,97,297,97,97,97,97,97,97,97,97,97,97,97,1108,97,97,97,97,67,67,67,1966,97,97,97,1970,0,0,0,97,97,97,97,0,97,97,97,1720,97,97,97,97,97,0,0,97,97,97,1837,97,0,1840,1841,97,97,97,1988,45,67,67,67,67,67,67,67,67,67,1994,1995,67,97,97,97,97,97,1103,97,97,97,97,97,97,97,97,97,97,917,97,97,0,0,0,67,67,265,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,345,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,361,362,0,365,28809,367,139,45,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,411,45,45,414,45,45,45,45,377,45,45,45,386,45,45,45,45,45,45,45,45,45,1223,45,45,45,45,45,45,45,45,45,426,45,45,433,45,45,45,67,67,67,67,67,463,67,67,67,472,67,67,67,67,67,67,67,527,67,67,67,67,67,67,537,67,540,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,564,97,97,97,97,97,97,97,637,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,927,45,45,45,45,45,45,45,45,45,1234,45,45,45,45,67,67,67,67,1240,45,697,45,45,45,45,45,45,45,45,45,45,708,45,45,45,45,1221,45,45,45,45,1225,45,45,45,45,45,45,384,45,45,45,45,45,45,45,45,45,1210,45,45,45,45,45,45,67,67,795,67,67,67,67,67,67,67,67,67,67,67,67,67,1470,67,67,67,67,67,67,67,815,67,67,67,67,67,67,25398,542,13112,544,97,97,97,893,97,97,97,97,97,97,97,97,97,97,97,97,1164,97,97,97,67,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,1687,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,1097,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1450,45,45,1388,45,1390,45,45,45,45,45,45,45,45,45,45,45,1236,67,67,67,67,67,1437,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1472,1490,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1503,67,67,67,67,67,97,97,97,97,97,0,1930,0,97,97,97,97,97,847,97,97,97,97,97,97,97,97,97,858,67,67,1965,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,1719,97,97,97,97,97,97,0,0,0,45,45,45,45,1382,45,1383,45,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,1563,45,45,45,45,45,67,261,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,341,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,1099,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1333,97,1230,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1992,67,1993,67,67,67,97,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,1665,45,45,45,45,45,131427,357,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,684,45,45,45,45,45,45,45,45,45,45,412,45,45,45,416,45,45,45,440,45,45,45,45,45,45,45,45,45,45,45,67,67,1990,67,1991,67,67,67,67,67,67,67,97,97,1707,97,97,97,97,97,97,501,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,67,67,67,526,67,67,67,67,67,67,67,67,67,67,1030,67,1032,67,67,67,67,598,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1632,0,921,29315,923,0,0,0,45,45,45,45,45,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,425,45,45,45,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1093,0,0,0,0,0,97,1609,97,97,97,97,97,97,97,97,97,1369,97,97,97,1372,97,97,67,67,266,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,346,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,665,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1677,45,45,45,45,67,45,45,954,45,956,45,45,45,45,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,448,45,45,45,45,67,456,67,67,67,67,67,1270,67,67,67,67,67,67,67,67,67,67,1069,67,67,67,67,67,67,97,97,97,1350,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,97,97,97,97,97,1376,0,0,0,45,45,45,45,45,45,45,45,1559,1561,45,45,45,1564,45,1566,1567,45,67,67,67,67,67,1573,67,67,67,67,67,67,67,67,67,67,1247,67,67,67,67,67,1252,97,1725,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1628,97,1630,0,0,94242,0,0,0,2211840,0,1118208,0,0,0,0,2158592,2158731,2158592,2158592,2158592,3117056,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3018752,2158592,3043328,2158592,2158592,2158592,2158592,3080192,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158878,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2605056,2158592,2158592,2207744,0,542,0,544,0,0,2166784,0,0,0,550,0,0,2158592,2158592,2686976,2158592,2715648,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2867200,2158592,2904064,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,0,2211840,0,0,1130496,0,0,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,139,0,0,0,139,0,2367488,2207744,0,0,0,0,176128,0,2166784,0,0,0,0,0,286,2158592,2158592,3170304,3174400,2158592,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,1508,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,2158592,2158592,2158592,2158592,3158016,67,24850,24850,12564,12564,0,0,0,0,0,53531,53531,0,286,97,97,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,1154,57889,0,0,0,0,550,0,97,97,97,97,97,97,97,97,97,561,97,97,97,97,97,97,576,97,97,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,0,0,139264,0,921,29315,0,0,926,0,45,45,45,45,45,45,45,45,45,719,720,45,45,45,45,45,45,45,45,685,45,45,45,45,45,45,45,45,45,942,45,45,946,45,45,45,950,45,45,0,2146304,2146304,0,0,0,0,2224128,2224128,2224128,2232320,2232320,2232320,2232320,0,0,1301,0,0,0,0,0,1307,0,0,0,0,0,1313,0,0,0,0,0,0,0,97,97,1318,97,97,97,97,97,97,1795,97,97,45,45,45,45,45,45,45,446,45,45,45,45,45,45,67,67,2158592,2146304,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,924,0,0,45,45,45,45,45,45,45,45,45,1e3,45,45,45,45,67,67],r.EXPECTED=[290,300,304,353,296,309,305,319,315,324,328,352,354,334,338,330,320,345,349,293,358,362,341,366,312,370,374,378,382,386,390,394,398,737,402,634,439,604,634,634,634,634,408,634,634,634,404,634,634,634,457,634,634,963,634,634,413,634,634,634,634,634,634,634,663,418,422,903,902,426,431,548,634,437,521,919,443,615,409,449,455,624,731,751,634,461,465,672,470,469,474,481,485,477,489,493,629,542,497,505,603,602,991,648,510,804,634,515,958,526,525,530,768,634,546,552,711,710,593,558,562,618,566,570,574,578,582,586,590,608,612,660,822,821,634,622,596,444,628,533,724,633,640,653,647,652,536,1008,451,450,445,657,670,676,685,689,693,697,701,704,707,715,719,798,815,634,723,762,996,634,728,969,730,735,908,634,741,679,889,511,747,634,750,755,499,666,499,501,759,772,776,780,634,787,784,797,802,809,808,427,814,1006,517,634,519,853,634,813,850,793,634,819,826,833,832,837,843,847,857,861,863,867,871,875,879,883,643,887,539,980,979,634,893,944,634,900,896,634,907,933,506,912,917,828,433,636,635,554,961,923,930,927,937,941,634,634,634,974,948,952,985,913,968,967,743,634,973,839,634,978,599,634,984,989,765,444,995,1e3,634,1003,790,955,1012,681,634,634,634,634,634,414,1016,1020,1024,1085,1027,1090,1090,1046,1080,1137,1108,1215,1049,1032,1039,1085,1085,1085,1085,1058,1062,1068,1085,1086,1090,1090,1091,1072,1064,1107,1090,1090,1090,1118,1123,1138,1078,1074,1084,1085,1085,1085,1087,1090,1062,1052,1060,1114,1062,1104,1085,1085,1090,1090,1028,1122,1063,1128,1139,1127,1158,1085,1085,1151,1090,1090,1090,1095,1090,1132,1073,1136,1143,1061,1150,1085,1155,1098,1101,1146,1162,1169,1101,1185,1151,1090,1110,1173,1054,1087,1109,1177,1165,1089,1204,1184,1107,1189,1193,1088,1197,1180,1201,1208,1042,1212,1219,1223,1227,1231,1235,1245,1777,1527,1686,1686,1238,1686,1254,1686,1686,1686,1294,1669,1686,1686,1686,1322,1625,1534,1268,1624,1275,1281,1443,1292,1300,1686,1686,1686,1350,1826,1306,1686,1686,1240,2032,1317,1321,1686,1686,1253,1686,1326,1686,1686,1686,1418,1709,1446,1686,1686,1686,1492,1686,1295,1447,1686,1686,1258,1686,1736,1686,1686,1520,1355,1686,1288,1348,1361,1686,1359,1686,1364,1498,1368,1302,1362,1381,1389,1395,1486,1686,1371,1377,1370,1686,1375,1382,1384,1402,1408,1385,1383,1619,1413,1423,1428,1433,1686,1686,1270,1686,1338,1686,1440,1686,1686,1686,1499,1465,1686,1686,1686,1639,1473,1884,1686,1686,1293,1864,1686,1686,1296,1321,1483,1686,1686,1686,1646,1686,1748,1496,1686,1418,1675,1686,1418,1702,1686,1418,1981,1686,1429,1409,1427,1504,1692,1686,1686,1313,1448,1651,1508,1686,1686,1340,1686,1903,1686,1686,1435,1513,1686,1283,1287,1519,1686,1524,1363,1568,1938,1539,1566,1579,1479,1533,1538,1553,1544,1552,1557,1563,1574,1557,1583,1589,1590,1759,1594,1603,1607,1611,1686,1436,1514,1686,1434,1656,1686,1434,1680,1686,1453,1686,1686,1686,1559,1617,1686,1770,1418,1623,1769,1629,1686,1515,1335,1686,1285,1686,1671,1921,1650,1686,1686,1344,1308,1666,1686,1686,1686,1659,1685,1686,1686,1686,1686,1241,1686,1686,1844,1691,1686,1630,1977,1970,1362,1686,1686,1686,1693,1698,1686,1686,1686,1697,1686,1764,1715,1686,1634,1638,1686,1599,1585,1686,1271,1686,1269,1686,1721,1686,1686,1354,1686,1801,1686,1799,1686,1640,1686,1686,1461,1686,1686,1732,1686,1944,1686,1740,1686,1746,1415,1396,1686,1598,1547,1417,1597,1416,1577,1546,1397,1577,1547,1548,1570,1398,1753,1686,1652,1509,1686,1686,1686,1757,1686,1419,1686,1763,1418,1768,1781,1686,1686,1686,1705,1686,2048,1792,1686,1686,1686,1735,1686,1797,1686,1686,1404,1686,1639,1815,1686,1686,1418,2017,1820,1686,1686,1803,1686,1686,1686,1736,1489,1686,1686,1825,1338,1260,1263,1686,1686,1785,1686,1686,1728,1686,1686,1749,1497,1830,1830,1262,1248,1261,1329,1260,1264,1329,1248,1249,1259,1540,1849,1842,1686,1686,1835,1686,1686,1816,1686,1686,1831,1882,1848,1686,1686,1686,1774,2071,1854,1686,1686,1469,1884,1686,1821,1859,1686,1686,1350,1883,1686,1686,1686,1781,1391,1875,1686,1686,1613,1644,1686,1686,1889,1686,1686,1662,1884,1686,1885,1890,1686,1686,1686,1894,1686,1686,1678,1686,1907,1686,1686,1529,1914,1686,1838,1686,1686,1881,1686,1686,1872,1876,1836,1919,1686,1837,1692,1910,1686,1925,1928,1742,1686,1811,1811,1930,1810,1929,1935,1928,1900,1942,1867,1868,1931,1035,1788,1948,1952,1956,1960,1964,1686,1976,1686,1686,1686,2065,1686,1992,2037,1686,1686,1998,2009,1972,2002,1686,1686,1686,2077,1300,2023,1686,1686,1686,1807,2031,1686,1686,1686,1860,1500,2032,1686,1686,1686,2083,1686,2036,1686,1277,1276,2042,1877,1686,1686,2041,1686,1686,2027,2037,2012,1686,2012,1855,1850,1686,2046,1686,1686,2054,1996,1686,1897,1309,2059,2052,1686,2058,1686,1686,2081,1686,1717,1477,1686,1331,1686,1686,1687,1686,1860,1681,1686,1686,1686,1966,1724,1686,1686,1686,1984,2015,1686,1686,1686,1988,1686,2063,1686,1686,1686,2005,1686,1727,1686,1686,1711,1457,2069,1686,1686,1686,2019,2075,1686,1686,1915,1686,1686,1793,1874,1686,1686,1491,1362,1449,1686,1686,1460,2098,2087,2091,2095,2184,2102,2113,2780,2117,2134,2142,2281,2146,2146,2146,2304,2296,2181,2639,2591,2872,2592,2873,2313,2195,2200,2281,2146,2273,2226,2204,2152,2219,2276,2167,2177,2276,2235,2276,2276,2230,2281,2276,2296,2276,2293,2276,2276,2276,2276,2234,2276,2311,2314,2210,2199,2217,2222,2276,2276,2276,2240,2276,2294,2276,2276,2173,2276,2198,2281,2281,2281,2281,2282,2146,2146,2146,2146,2205,2146,2204,2248,2276,2235,2276,2297,2276,2276,2276,2277,2256,2281,2283,2146,2146,2146,2275,2276,2295,2276,2276,2293,2146,2304,2264,2269,2221,2276,2276,2276,2293,2295,2276,2276,2276,2295,2263,2205,2268,2220,2172,2276,2276,2276,2296,2276,2276,2296,2294,2276,2276,2278,2281,2281,2280,2281,2281,2281,2283,2206,2223,2276,2276,2279,2281,2281,2146,2273,2276,2276,2281,2281,2281,2276,2292,2276,2298,2225,2276,2298,2169,2224,2292,2298,2171,2229,2281,2281,2171,2236,2281,2281,2281,2146,2275,2225,2292,2299,2276,2229,2281,2146,2276,2290,2297,2283,2146,2146,2274,2224,2227,2298,2225,2297,2276,2230,2170,2230,2282,2146,2147,2151,2156,2288,2276,2230,2303,2308,2236,2284,2228,2318,2318,2318,2326,2335,2339,2343,2349,2416,2693,2357,2592,2109,2592,2592,2162,2943,2823,2646,2592,2361,2592,2122,2592,2592,2122,2470,2592,2592,2592,2109,2107,2592,2592,2592,2123,2592,2592,2592,2125,2592,2413,2592,2592,2592,2127,2592,2592,2414,2592,2592,2592,2130,2952,2592,2594,2592,2592,2212,2609,2252,2592,2592,2592,2446,2434,2592,2592,2592,2212,2446,2450,2456,2431,2435,2592,2592,2243,2478,2448,2439,2946,2592,2592,2592,2368,2809,2813,2450,2441,2212,2812,2449,2440,2947,2592,2592,2592,2345,2451,2457,2948,2592,2124,2592,2592,2650,2823,2449,2455,2946,2592,2128,2592,2592,2649,2952,2592,2810,2448,2461,2991,2467,2592,2592,2329,2817,2474,2990,2466,2592,2592,2373,2447,2992,2469,2592,2592,2592,2373,2447,2477,2468,2592,2592,2353,2469,2592,2495,2592,2592,2415,2483,2592,2415,2496,2592,2592,2352,2592,2592,2352,2352,2469,2592,2592,2363,2331,2494,2592,2592,2592,2375,2592,2375,2415,2504,2592,2592,2367,2372,2503,2592,2592,2592,2389,2418,2415,2592,2592,2373,2592,2592,2592,2593,2732,2417,2415,2592,2417,2520,2592,2592,2592,2390,2521,2521,2592,2592,2592,2401,2599,2585,2526,2531,2120,2592,2212,2426,2450,2463,2948,2592,2592,2592,2213,2389,2527,2532,2121,2542,2551,2105,2592,2213,2592,2592,2592,2558,2538,2544,2553,2557,2537,2543,2552,2421,2572,2576,2546,2543,2547,2592,2592,2373,2615,2575,2545,2105,2592,2244,2479,2592,2129,2592,2592,2628,2690,2469,2562,2566,2592,2592,2592,2415,2928,2934,2401,2570,2574,2564,2572,2585,2590,2592,2592,2585,2965,2592,2592,2592,2445,2251,2592,2592,2592,2474,2592,2609,2892,2592,2362,2592,2592,2138,2851,2159,2592,2592,2592,2509,2888,2892,2592,2592,2592,2490,2418,2891,2592,2592,2376,2592,2592,2374,2592,2889,2388,2592,2373,2373,2890,2592,2592,2387,2592,2887,2505,2892,2592,2373,2610,2388,2592,2592,2376,2373,2592,2887,2891,2592,2374,2592,2592,2608,2159,2614,2620,2592,2592,2394,2594,2887,2399,2592,2887,2397,2508,2374,2507,2592,2375,2592,2592,2592,2595,2508,2506,2592,2506,2505,2505,2592,2507,2637,2505,2592,2592,2401,2661,2592,2643,2592,2592,2417,2592,2655,2592,2592,2592,2510,2414,2656,2592,2592,2592,2516,2592,2593,2660,2665,2880,2592,2592,2592,2522,2767,2666,2881,2592,2592,2420,2571,2696,2592,2592,2592,2580,2572,2686,2632,2698,2592,2383,2514,2592,2163,2932,2465,2685,2631,2697,2592,2388,2592,2592,2212,2604,2671,2632,2678,2592,2401,2405,2409,2592,2592,2592,2679,2592,2592,2592,2592,2108,2677,2591,2592,2592,2592,2419,2592,2683,2187,2191,2469,2671,2189,2467,2592,2401,2629,2633,2702,2468,2592,2592,2421,2536,2703,2469,2592,2592,2422,2573,2593,2672,2467,2592,2402,2406,2592,2402,2979,2592,2592,2626,2673,2467,2592,2446,2259,2947,2592,2377,2709,2592,2592,2522,2862,2713,2468,2592,2592,2581,2572,2562,2374,2374,2592,2376,2721,2724,2592,2592,2624,2373,2731,2592,2592,2592,2626,2732,2592,2592,2592,2755,2656,2726,2736,2741,2592,2486,2593,2381,2592,2727,2737,2742,2715,2747,2753,2592,2498,2469,2873,2743,2592,2592,2592,2791,2759,2763,2592,2592,2627,2704,2592,2592,2522,2789,2593,2761,2753,2592,2498,2863,2592,2592,2767,2592,2592,2592,2792,2789,2592,2592,2592,2803,2126,2592,2592,2592,2811,2122,2592,2592,2592,2834,2777,2592,2592,2592,2848,2936,2591,2489,2797,2592,2592,2670,2631,2490,2798,2592,2592,2592,2963,2807,2592,2592,2592,2965,2838,2592,2592,2592,2975,2330,2818,2829,2592,2498,2939,2592,2498,2592,2791,2331,2819,2830,2592,2592,2592,2982,2834,2817,2828,2106,2592,2592,2592,2405,2405,2817,2828,2592,2592,2415,2849,2842,2592,2522,2773,2592,2522,2868,2592,2580,2600,2586,2137,2850,2843,2592,2592,2855,2937,2844,2592,2592,2592,2987,2936,2591,2592,2592,2684,2630,2592,2856,2938,2592,2592,2860,2939,2592,2592,2872,2592,2861,2591,2592,2592,2887,2616,2592,2867,2592,2592,2708,2592,2498,2469,2498,2497,2785,2773,2499,2783,2770,2877,2877,2877,2772,2592,2592,2345,2885,2592,2592,2592,2715,2762,2515,2896,2592,2592,2715,2917,2516,2897,2592,2592,2592,2901,2906,2911,2592,2592,2956,2960,2715,2902,2907,2912,2593,2916,2920,2820,2922,2822,2592,2592,2715,2927,2921,2821,2106,2592,2592,2974,2408,2321,2821,2106,2592,2592,2983,2592,2593,2404,2408,2592,2592,2717,2749,2716,2928,2322,2822,2593,2926,2919,2820,2934,2823,2592,2592,2592,2651,2824,2592,2592,2592,2130,2952,2592,2592,2592,2592,2964,2592,2592,2716,2748,2592,2969,2592,2592,2716,2918,2368,2970,2592,2592,2592,2403,2407,2592,2592,2787,2211,2404,2409,2592,2592,2802,2837,2987,2592,2592,2592,2809,2427,2592,2793,2592,2592,2809,2447,1073741824,2147483648,539754496,542375936,402653184,554434560,571736064,545521856,268451840,335544320,268693630,512,2048,256,1024,0,1024,0,1073741824,2147483648,0,0,0,8388608,0,0,1073741824,1073741824,0,2147483648,537133056,4194304,1048576,268435456,-1073741824,0,0,0,1048576,0,0,0,1572864,0,0,0,4194304,0,134217728,16777216,0,0,32,64,98304,0,33554432,8388608,192,67108864,67108864,67108864,67108864,16,32,4,0,8192,196608,196608,229376,80,4096,524288,8388608,0,0,32,128,256,24576,24600,24576,24576,2,24576,24576,24576,24584,24592,24576,24578,24576,24578,24576,24576,16,512,2048,2048,256,4096,32768,1048576,4194304,67108864,134217728,268435456,262144,134217728,0,128,128,64,16384,16384,16384,67108864,32,32,4,4,4096,262144,134217728,0,0,0,2,0,8192,131072,131072,4096,4096,4096,4096,24576,24576,24576,8,8,24576,24576,16384,16384,16384,24576,24584,24576,24576,24576,16384,24576,536870912,262144,0,0,32,2048,8192,4,4096,4096,4096,786432,8388608,16777216,0,128,16384,16384,16384,32768,65536,2097152,32,32,32,32,4,4,4,4,4,4096,67108864,67108864,67108864,24576,24576,24576,24576,0,16384,16384,16384,16384,67108864,67108864,8,67108864,24576,8,8,8,24576,24576,24576,24578,24576,24576,24576,2,2,2,16384,67108864,67108864,67108864,32,67108864,8,8,24576,2048,2147483648,536870912,262144,262144,262144,67108864,8,24576,16384,32768,1048576,4194304,25165824,67108864,24576,32770,2,4,112,512,98304,524288,50,402653186,1049090,1049091,10,66,100925514,10,66,12582914,0,0,-1678194207,-1678194207,-1041543218,0,32768,0,0,32,65536,268435456,1,1,513,1048577,0,12582912,0,0,0,4,1792,0,0,0,7,29360128,0,0,0,8,0,0,0,12,1,1,0,0,-604102721,-604102721,4194304,8388608,0,0,0,31,925600,997981306,997981306,997981306,0,0,2048,8388608,0,0,1,2,4,32,64,512,8192,0,0,0,245760,997720064,0,0,0,32,0,0,0,3,12,16,32,8,112,3072,12288,16384,32768,65536,131072,7864320,16777216,973078528,0,0,65536,131072,3670016,4194304,16777216,33554432,2,8,48,2048,8192,16384,32768,65536,131072,524288,131072,524288,3145728,4194304,16777216,33554432,65536,131072,2097152,4194304,16777216,33554432,134217728,268435456,536870912,0,0,0,1024,0,8,48,2048,8192,65536,33554432,268435456,536870912,65536,268435456,536870912,0,0,32768,0,0,126,623104,65011712,0,32,65536,536870912,0,0,65536,524288,0,32,65536,0,0,0,2048,0,0,0,15482,245760,-604102721,0,0,0,18913,33062912,925600,-605028352,0,0,0,65536,31,8096,131072,786432,3145728,3145728,12582912,50331648,134217728,268435456,160,256,512,7168,131072,786432,131072,786432,1048576,2097152,12582912,16777216,268435456,1073741824,2147483648,12582912,16777216,33554432,268435456,1073741824,2147483648,3,12,16,160,256,7168,786432,1048576,12582912,16777216,268435456,1073741824,0,8,16,32,128,256,512,7168,786432,1048576,2097152,0,1,2,8,16,7168,786432,1048576,8388608,16777216,16777216,1073741824,0,0,0,0,1,0,0,8,32,128,256,7168,8,32,0,3072,0,8,32,3072,4096,524288,8,32,0,0,3072,4096,0,2048,524288,8388608,8,2048,0,0,1,12,256,4096,32768,262144,1048576,4194304,67108864,0,2048,0,2048,2048,1073741824,-58805985,-58805985,-58805985,0,0,262144,0,0,32,4194304,16777216,134217728,4382,172032,-58982400,0,0,2,28,256,4096,8192,8192,32768,131072,262144,524288,1,2,12,256,4096,0,0,4194304,67108864,134217728,805306368,1073741824,0,0,1,2,12,16,256,4096,1048576,67108864,134217728,268435456,0,512,1048576,4194304,201326592,1879048192,0,0,12,256,4096,134217728,268435456,536870912,12,256,268435456,536870912,0,12,256,0,0,1,32,64,512,0,0,205236961,205236961,0,0,0,1,96,640,1,10976,229376,204996608,0,640,2048,8192,229376,1572864,1572864,2097152,201326592,0,0,0,64,512,2048,229376,1572864,201326592,1572864,201326592,0,0,1,4382,0,1,32,2048,65536,131072,1572864,201326592,131072,1572864,134217728,0,0,524288,524288,0,0,0,-68582786,-68582786,-68582786,0,0,2097152,524288,0,524288,0,0,65536,131072,1572864,0,0,2,4,0,0,65011712,-134217728,0,0,0,0,2,4,120,512,-268435456,0,0,0,2,8,48,64,2048,8192,98304,524288,2097152,4194304,25165824,33554432,134217728,268435456,2147483648,0,0,25165824,33554432,134217728,1879048192,2147483648,0,0,4,112,512,622592,65011712,134217728,-268435456,16777216,33554432,134217728,1610612736,0,0,0,64,98304,524288,4194304,16777216,33554432,0,98304,524288,16777216,33554432,0,65536,524288,33554432,536870912,1073741824,0,65536,524288,536870912,1073741824,0,0,65536,524288,536870912,0,524288,0,524288,524288,1048576,2086666240,2147483648,0,-1678194207,0,0,0,8,32,2048,524288,8388608,0,0,33062912,436207616,2147483648,0,0,32,64,2432,16384,32768,32768,524288,3145728,4194304,25165824,25165824,167772160,268435456,2147483648,0,32,64,384,2048,16384,32768,1048576,2097152,4194304,25165824,32,64,128,256,2048,16384,2048,16384,1048576,4194304,16777216,33554432,134217728,536870912,1073741824,0,0,2048,16384,4194304,16777216,33554432,134217728,805306368,0,0,16777216,134217728,268435456,2147483648,0,622592,622592,622592,8807,8807,434791,0,0,16777216,0,0,0,7,608,8192,0,0,0,3,4,96,512,32,64,8192,0,0,16777216,134217728,0,0,2,4,8192,16384,65536,2097152,33554432,268435456],r.TOKEN=[\"(0)\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"QuotChar\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(e,t,n){\"use strict\";var r=e(\"./JSONiqTokenizer\").JSONiqTokenizer,i=e(\"./lexer\").Lexer,s=\"NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"JSONPredefinedCharRef\",token:\"constant.language.escape\"},{name:\"JSONCharRef\",token:\"constant.language.escape\"},{name:\"JSONChar\",token:\"string\"}]};n.JSONiqLexer=function(){return new i(r,d)}},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(e,t,n){\"use strict\";var r=function(e){var t=e;this.tokens=[],this.reset=function(){t=t,this.tokens=[]},this.startNonterminal=function(){},this.endNonterminal=function(){},this.terminal=function(e,n,r){this.tokens.push({name:e,value:t.substring(n,r)})},this.whitespace=function(e,n){this.tokens.push({name:\"WS\",value:t.substring(e,n)})}};n.Lexer=function(e,t){this.tokens=[],this.getLineTokens=function(n,i){i=i===\"start\"||!i?'[\"start\"]':i;var s=JSON.parse(i),o=new r(n),u=new e(n,o),a=[];for(;;){var f=s[s.length-1];try{o.tokens=[],u[\"parse_\"+f]();var l=null;o.tokens.length>1&&o.tokens[0].name===\"WS\"&&(a.push({type:\"text\",value:o.tokens[0].value}),o.tokens.splice(0,1));var c=o.tokens[0],h=t[f];for(var p=0;p<h.length;p++){var d=t[f][p];if(typeof d.name==\"function\"&&d.name(c)||d.name===c.name){l=d;break}}if(c.name===\"EOF\")break;if(c.value===\"\")throw\"Encountered empty string lexical rule.\";a.push({type:l===null?\"text\":typeof l.token==\"function\"?l.token(c.value):l.token,value:c.value}),l&&l.next&&l.next(s)}catch(v){if(v instanceof u.ParseException){var m=0;for(var g=0;g<a.length;g++)m+=a[g].value.length;return a.push({type:\"text\",value:n.substring(m)}),{tokens:a,state:JSON.stringify([\"start\"])}}throw v}}return{tokens:a,state:JSON.stringify(s)}}}},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(e,t,n){\"use strict\";var r=e(\"./XQueryTokenizer\").XQueryTokenizer,i=e(\"./lexer\").Lexer,s=\"after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotChar\",token:\"string\"}]};n.XQueryLexer=function(){return new i(r,d)}},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\":[function(e,t,n){n.JSONParseTreeHandler=function(e){\"use strict\";function f(e){return{name:e,children:[],getParent:null,pos:{sl:0,sc:0,el:0,ec:0}}}function l(e){var t=f(e);r===null?(r=t,r.index=[],i=t):(t.getParent=i,i.children.push(t),i=i.children[i.children.length-1])}function c(){if(i.children.length>0){var e=i.children[0],s=null;for(var o=i.children.length-1;o>=0;o--){s=i.children[o];if(s.pos.el!==0||s.pos.ec!==0)break}i.pos.sl=e.pos.sl,i.pos.sc=e.pos.sc,i.pos.el=s.pos.el,i.pos.ec=s.pos.ec}i.name===\"FunctionName\"&&(i.name=\"EQName\"),i.name===\"EQName\"&&i.value===undefined&&(i.value=i.children[0].value,i.children.pop()),t.indexOf(i.name)!==-1&&r.index.push(i),i.getParent!==null&&(i=i.getParent);if(i.children.length>0){var u=i.children[i.children.length-1];u.children.length===1&&n.indexOf(u.name)!==-1&&(i.children[i.children.length-1]=u.children[0])}}function h(e,t,n){var r=n-o;i.value=s.substring(0,r),s=s.substring(r),o=n;var f=a,l=u,c=f+i.value.split(\"\\n\").length-1,h=i.value.lastIndexOf(\"\\n\"),p=h===-1?l+i.value.length:i.value.substring(h+1).length;a=c,u=p,i.pos.sl=f,i.pos.sc=l,i.pos.el=c,i.pos.ec=p}var t=[\"VarDecl\",\"FunctionDecl\"],n=[\"OrExpr\",\"AndExpr\",\"ComparisonExpr\",\"StringConcatExpr\",\"RangeExpr\",\"AdditiveExpr\",\"MultiplicativeExpr\",\"UnionExpr\",\"IntersectExceptExpr\",\"InstanceofExpr\",\"TreatExpr\",\"CastableExpr\",\"CastExpr\",\"UnaryExpr\",\"ValueExpr\",\"FTContainsExpr\",\"SimpleMapExpr\",\"PathExpr\",\"RelativePathExpr\",\"PostfixExpr\",\"StepExpr\"],r=null,i=null,s=e,o=0,u=0,a=0;this.closeParseTree=function(){while(i.getParent!==null)c();c()},this.peek=function(){return i},this.getParseTree=function(){return r},this.reset=function(){},this.startNonterminal=function(e,t){l(e,t)},this.endNonterminal=function(){c()},this.terminal=function(e,t,n){e=e.substring(0,1)===\"'\"&&e.substring(e.length-1)===\"'\"?\"TOKEN\":e,l(e,t),h(i,t,n),c()},this.whitespace=function(e,t){var n=\"WS\";l(n,e),h(i,e,t),c()}}},{}],\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\":[function(e,t,n){var r=n.JSONiqParser=function i(e,t){function r(e,t){ic=t,ac=e,fc=e.length,s(0,0,0)}function s(e,t,n){Xl=t,Vl=t,$l=e,Jl=t,Kl=n,Ql=0,cc=n,ec=-1,sc={},ic.reset(ac)}function o(){ic.startNonterminal(\"Module\",Vl);switch($l){case 170:ql(168);break;default:Wl=$l}(Wl==64682||Wl==137898)&&u(),Il(277);switch($l){case 185:ql(146);break;default:Wl=$l}switch(Wl){case 95929:jl(),a();break;default:jl(),Za()}ic.endNonterminal(\"Module\",Vl)}function u(){ic.startNonterminal(\"VersionDecl\",Vl),Pl(170),Il(120);switch($l){case 126:Pl(126),Il(17),Pl(11);break;default:Pl(269),Il(17),Pl(11),Il(113),$l==126&&(Pl(126),Il(17),Pl(11))}Il(29),jl(),c(),ic.endNonterminal(\"VersionDecl\",Vl)}function a(){ic.startNonterminal(\"LibraryModule\",Vl),f(),Il(142),jl(),l(),ic.endNonterminal(\"LibraryModule\",Vl)}function f(){ic.startNonterminal(\"ModuleDecl\",Vl),Pl(185),Il(64),Pl(187),Il(239),jl(),Ga(),Il(30),Pl(61),Il(15),Pl(7),Il(29),jl(),c(),ic.endNonterminal(\"ModuleDecl\",Vl)}function l(){ic.startNonterminal(\"Prolog\",Vl);for(;;){Il(277);switch($l){case 109:ql(206);break;case 155:ql(169);break;default:Wl=$l}if(Wl!=43117&&Wl!=44141&&Wl!=50797&&Wl!=53869&&Wl!=54893&&Wl!=56429&&Wl!=73325&&Wl!=94875&&Wl!=95853&&Wl!=106093&&Wl!=115821&&Wl!=117403)break;switch($l){case 109:ql(200);break;default:Wl=$l}if(Wl==56429){Wl=uc(0,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{_(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(0,Vl,Wl)}}switch(Wl){case-1:jl(),M();break;case 95853:jl(),O();break;case 155:jl(),C();break;case 73325:jl(),D();break;default:jl(),h()}Il(29),jl(),c()}for(;;){Il(277);switch($l){case 109:ql(201);break;default:Wl=$l}if(Wl!=17005&&Wl!=49261&&Wl!=52333&&Wl!=75373&&Wl!=80493&&Wl!=83565&&Wl!=104045&&Wl!=134765&&Wl!=137325)break;switch($l){case 109:ql(197);break;default:Wl=$l}switch(Wl){case 52333:jl(),R();break;case 104045:jl(),Q();break;default:jl(),P()}Il(29),jl(),c()}ic.endNonterminal(\"Prolog\",Vl)}function c(){ic.startNonterminal(\"Separator\",Vl),Pl(54),ic.endNonterminal(\"Separator\",Vl)}function h(){ic.startNonterminal(\"Setter\",Vl);switch($l){case 109:ql(194);break;default:Wl=$l}if(Wl==56429){Wl=uc(1,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{v(),Wl=-2}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),w(),Wl=-6}catch(f){Wl=-9}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(1,Vl,Wl)}}switch(Wl){case 44141:p();break;case-2:d();break;case 43117:m();break;case 50797:g();break;case 106093:y();break;case-6:b();break;case 115821:Io();break;case 53869:E();break;default:T()}ic.endNonterminal(\"Setter\",Vl)}function p(){ic.startNonterminal(\"BoundarySpaceDecl\",Vl),Pl(109),Il(36),Pl(86),Il(137);switch($l){case 218:Pl(218);break;default:Pl(246)}ic.endNonterminal(\"BoundarySpaceDecl\",Vl)}function d(){ic.startNonterminal(\"DefaultCollationDecl\",Vl),Pl(109),Il(49),Pl(110),Il(41),Pl(95),Il(15),Pl(7),ic.endNonterminal(\"DefaultCollationDecl\",Vl)}function v(){Hl(109),Il(49),Hl(110),Il(41),Hl(95),Il(15),Hl(7)}function m(){ic.startNonterminal(\"BaseURIDecl\",Vl),Pl(109),Il(35),Pl(84),Il(15),Pl(7),ic.endNonterminal(\"BaseURIDecl\",Vl)}function g(){ic.startNonterminal(\"ConstructionDecl\",Vl),Pl(109),Il(44),Pl(99),Il(137);switch($l){case 246:Pl(246);break;default:Pl(218)}ic.endNonterminal(\"ConstructionDecl\",Vl)}function y(){ic.startNonterminal(\"OrderingModeDecl\",Vl),Pl(109),Il(71),Pl(207),Il(135);switch($l){case 206:Pl(206);break;default:Pl(262)}ic.endNonterminal(\"OrderingModeDecl\",Vl)}function b(){ic.startNonterminal(\"EmptyOrderDecl\",Vl),Pl(109),Il(49),Pl(110),Il(70),Pl(205),Il(52),Pl(124),Il(125);switch($l){case 149:Pl(149);break;default:Pl(176)}ic.endNonterminal(\"EmptyOrderDecl\",Vl)}function w(){Hl(109),Il(49),Hl(110),Il(70),Hl(205),Il(52),Hl(124),Il(125);switch($l){case 149:Hl(149);break;default:Hl(176)}}function E(){ic.startNonterminal(\"CopyNamespacesDecl\",Vl),Pl(109),Il(47),Pl(105),Il(132),jl(),S(),Il(25),Pl(42),Il(127),jl(),x(),ic.endNonterminal(\"CopyNamespacesDecl\",Vl)}function S(){ic.startNonterminal(\"PreserveMode\",Vl);switch($l){case 218:Pl(218);break;default:Pl(193)}ic.endNonterminal(\"PreserveMode\",Vl)}function x(){ic.startNonterminal(\"InheritMode\",Vl);switch($l){case 159:Pl(159);break;default:Pl(192)}ic.endNonterminal(\"InheritMode\",Vl)}function T(){ic.startNonterminal(\"DecimalFormatDecl\",Vl),Pl(109),Il(118);switch($l){case 107:Pl(107),Il(245),jl(),$a();break;default:Pl(110),Il(48),Pl(107)}for(;;){Il(203);if($l==54)break;jl(),N(),Il(30),Pl(61),Il(17),Pl(11)}ic.endNonterminal(\"DecimalFormatDecl\",Vl)}function N(){ic.startNonterminal(\"DFPropertyName\",Vl);switch($l){case 108:Pl(108);break;case 151:Pl(151);break;case 158:Pl(158);break;case 182:Pl(182);break;case 68:Pl(68);break;case 213:Pl(213);break;case 212:Pl(212);break;case 280:Pl(280);break;case 117:Pl(117);break;default:Pl(211)}ic.endNonterminal(\"DFPropertyName\",Vl)}function C(){ic.startNonterminal(\"Import\",Vl);switch($l){case 155:ql(130);break;default:Wl=$l}switch(Wl){case 117403:k();break;default:A()}ic.endNonterminal(\"Import\",Vl)}function k(){ic.startNonterminal(\"SchemaImport\",Vl),Pl(155),Il(76),Pl(229),Il(141),$l!=7&&(jl(),L()),Il(15),Pl(7),Il(112);if($l==82){Pl(82),Il(15),Pl(7);for(;;){Il(107);if($l!=42)break;Pl(42),Il(15),Pl(7)}}ic.endNonterminal(\"SchemaImport\",Vl)}function L(){ic.startNonterminal(\"SchemaPrefix\",Vl);switch($l){case 187:Pl(187),Il(239),jl(),Ga(),Il(30),Pl(61);break;default:Pl(110),Il(50),Pl(122),Il(64),Pl(187)}ic.endNonterminal(\"SchemaPrefix\",Vl)}function A(){ic.startNonterminal(\"ModuleImport\",Vl),Pl(155),Il(63),Pl(185),Il(93),$l==187&&(Pl(187),Il(239),jl(),Ga(),Il(30),Pl(61)),Il(15),Pl(7),Il(112);if($l==82){Pl(82),Il(15),Pl(7);for(;;){Il(107);if($l!=42)break;Pl(42),Il(15),Pl(7)}}ic.endNonterminal(\"ModuleImport\",Vl)}function O(){ic.startNonterminal(\"NamespaceDecl\",Vl),Pl(109),Il(64),Pl(187),Il(239),jl(),Ga(),Il(30),Pl(61),Il(15),Pl(7),ic.endNonterminal(\"NamespaceDecl\",Vl)}function M(){ic.startNonterminal(\"DefaultNamespaceDecl\",Vl),Pl(109),Il(49),Pl(110),Il(119);switch($l){case 122:Pl(122);break;default:Pl(147)}Il(64),Pl(187),Il(15),Pl(7),ic.endNonterminal(\"DefaultNamespaceDecl\",Vl)}function _(){Hl(109),Il(49),Hl(110),Il(119);switch($l){case 122:Hl(122);break;default:Hl(147)}Il(64),Hl(187),Il(15),Hl(7)}function D(){ic.startNonterminal(\"FTOptionDecl\",Vl),Pl(109),Il(55),Pl(143),Il(84),jl(),Qu(),ic.endNonterminal(\"FTOptionDecl\",Vl)}function P(){ic.startNonterminal(\"AnnotatedDecl\",Vl),Pl(109);for(;;){Il(192);if($l!=33&&$l!=263)break;switch($l){case 263:jl(),H();break;default:jl(),B()}}switch($l){case 268:jl(),F();break;case 147:jl(),_l();break;case 96:jl(),Ca();break;case 157:jl(),Ha();break;default:jl(),Ba()}ic.endNonterminal(\"AnnotatedDecl\",Vl)}function H(){ic.startNonterminal(\"CompatibilityAnnotation\",Vl),Pl(263),ic.endNonterminal(\"CompatibilityAnnotation\",Vl)}function B(){ic.startNonterminal(\"Annotation\",Vl),Pl(33),Il(245),jl(),$a(),Il(193);if($l==35){Pl(35),Il(190),jl(),di();for(;;){Il(105);if($l!=42)break;Pl(42),Il(190),jl(),di()}Pl(38)}ic.endNonterminal(\"Annotation\",Vl)}function j(){Hl(33),Il(245),Ja(),Il(193);if($l==35){Hl(35),Il(190),vi();for(;;){Il(105);if($l!=42)break;Hl(42),Il(190),vi()}Hl(38)}}function F(){ic.startNonterminal(\"VarDecl\",Vl),Pl(268),Il(21),Pl(31),Il(245),jl(),Ti(),Il(157),$l==80&&(jl(),Cs()),Il(110);switch($l){case 53:Pl(53),Il(266),jl(),I();break;default:Pl(134),Il(108),$l==53&&(Pl(53),Il(266),jl(),q())}ic.endNonterminal(\"VarDecl\",Vl)}function I(){ic.startNonterminal(\"VarValue\",Vl),Wf(),ic.endNonterminal(\"VarValue\",Vl)}function q(){ic.startNonterminal(\"VarDefaultValue\",Vl),Wf(),ic.endNonterminal(\"VarDefaultValue\",Vl)}function R(){ic.startNonterminal(\"ContextItemDecl\",Vl),Pl(109),Il(46),Pl(102),Il(58),Pl(167),Il(157),$l==80&&(Pl(80),Il(253),jl(),_s()),Il(110);switch($l){case 53:Pl(53),Il(266),jl(),I();break;default:Pl(134),Il(108),$l==53&&(Pl(53),Il(266),jl(),q())}ic.endNonterminal(\"ContextItemDecl\",Vl)}function U(){ic.startNonterminal(\"ParamList\",Vl),W();for(;;){Il(105);if($l!=42)break;Pl(42),Il(21),jl(),W()}ic.endNonterminal(\"ParamList\",Vl)}function z(){X();for(;;){Il(105);if($l!=42)break;Hl(42),Il(21),X()}}function W(){ic.startNonterminal(\"Param\",Vl),Pl(31),Il(245),jl(),$a(),Il(153),$l==80&&(jl(),Cs()),ic.endNonterminal(\"Param\",Vl)}function X(){Hl(31),Il(245),Ja(),Il(153),$l==80&&ks()}function V(){ic.startNonterminal(\"FunctionBody\",Vl),J(),ic.endNonterminal(\"FunctionBody\",Vl)}function $(){K()}function J(){ic.startNonterminal(\"EnclosedExpr\",Vl),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"EnclosedExpr\",Vl)}function K(){Hl(281),Il(266),Y(),Hl(287)}function Q(){ic.startNonterminal(\"OptionDecl\",Vl),Pl(109),Il(69),Pl(203),Il(245),jl(),$a(),Il(17),Pl(11),ic.endNonterminal(\"OptionDecl\",Vl)}function G(){ic.startNonterminal(\"Expr\",Vl),Wf();for(;;){if($l!=42)break;Pl(42),Il(266),jl(),Wf()}ic.endNonterminal(\"Expr\",Vl)}function Y(){Xf();for(;;){if($l!=42)break;Hl(42),Il(266),Xf()}}function Z(){ic.startNonterminal(\"FLWORExpr\",Vl),tt();for(;;){Il(195);if($l==224)break;jl(),rt()}jl(),rn(),ic.endNonterminal(\"FLWORExpr\",Vl)}function et(){nt();for(;;){Il(195);if($l==224)break;it()}sn()}function tt(){ic.startNonterminal(\"InitialClause\",Vl);switch($l){case 139:ql(151);break;default:Wl=$l}switch(Wl){case 16011:st();break;case 177:vt();break;default:bt()}ic.endNonterminal(\"InitialClause\",Vl)}function nt(){switch($l){case 139:ql(151);break;default:Wl=$l}switch(Wl){case 16011:ot();break;case 177:mt();break;default:wt()}}function rt(){ic.startNonterminal(\"IntermediateClause\",Vl);switch($l){case 139:case 177:tt();break;case 272:It();break;case 150:Rt();break;case 106:jt();break;default:Kt()}ic.endNonterminal(\"IntermediateClause\",Vl)}function it(){switch($l){case 139:case 177:nt();break;case 272:qt();break;case 150:Ut();break;case 106:Ft();break;default:Qt()}}function st(){ic.startNonterminal(\"ForClause\",Vl),Pl(139),Il(21),jl(),ut();for(;;){if($l!=42)break;Pl(42),Il(21),jl(),ut()}ic.endNonterminal(\"ForClause\",Vl)}function ot(){Hl(139),Il(21),at();for(;;){if($l!=42)break;Hl(42),Il(21),at()}}function ut(){ic.startNonterminal(\"ForBinding\",Vl),Pl(31),Il(245),jl(),Ti(),Il(182),$l==80&&(jl(),Cs()),Il(173),$l==73&&(jl(),ft()),Il(160),$l==82&&(jl(),ct()),Il(126),$l==232&&(jl(),pt()),Il(56),Pl(156),Il(266),jl(),Wf(),ic.endNonterminal(\"ForBinding\",Vl)}function at(){Hl(31),Il(245),Ni(),Il(182),$l==80&&ks(),Il(173),$l==73&&lt(),Il(160),$l==82&&ht(),Il(126),$l==232&&dt(),Il(56),Hl(156),Il(266),Xf()}function ft(){ic.startNonterminal(\"AllowingEmpty\",Vl),Pl(73),Il(52),Pl(124),ic.endNonterminal(\"AllowingEmpty\",Vl)}function lt(){Hl(73),Il(52),Hl(124)}function ct(){ic.startNonterminal(\"PositionalVar\",Vl),Pl(82),Il(21),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"PositionalVar\",Vl)}function ht(){Hl(82),Il(21),Hl(31),Il(245),Ni()}function pt(){ic.startNonterminal(\"FTScoreVar\",Vl),Pl(232),Il(21),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"FTScoreVar\",Vl)}function dt(){Hl(232),Il(21),Hl(31),Il(245),Ni()}function vt(){ic.startNonterminal(\"LetClause\",Vl),Pl(177),Il(100),jl(),gt();for(;;){if($l!=42)break;Pl(42),Il(100),jl(),gt()}ic.endNonterminal(\"LetClause\",Vl)}function mt(){Hl(177),Il(100),yt();for(;;){if($l!=42)break;Hl(42),Il(100),yt()}}function gt(){ic.startNonterminal(\"LetBinding\",Vl);switch($l){case 31:Pl(31),Il(245),jl(),Ti(),Il(109),$l==80&&(jl(),Cs());break;default:pt()}Il(28),Pl(53),Il(266),jl(),Wf(),ic.endNonterminal(\"LetBinding\",Vl)}function yt(){switch($l){case 31:Hl(31),Il(245),Ni(),Il(109),$l==80&&ks();break;default:dt()}Il(28),Hl(53),Il(266),Xf()}function bt(){ic.startNonterminal(\"WindowClause\",Vl),Pl(139),Il(139);switch($l){case 257:jl(),Et();break;default:jl(),xt()}ic.endNonterminal(\"WindowClause\",Vl)}function wt(){Hl(139),Il(139);switch($l){case 257:St();break;default:Tt()}}function Et(){ic.startNonterminal(\"TumblingWindowClause\",Vl),Pl(257),Il(88),Pl(275),Il(21),Pl(31),Il(245),jl(),Ti(),Il(114),$l==80&&(jl(),Cs()),Il(56),Pl(156),Il(266),jl(),Wf(),jl(),Nt();if($l==127||$l==202)jl(),kt();ic.endNonterminal(\"TumblingWindowClause\",Vl)}function St(){Hl(257),Il(88),Hl(275),Il(21),Hl(31),Il(245),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il(266),Xf(),Ct(),($l==127||$l==202)&&Lt()}function xt(){ic.startNonterminal(\"SlidingWindowClause\",Vl),Pl(239),Il(88),Pl(275),Il(21),Pl(31),Il(245),jl(),Ti(),Il(114),$l==80&&(jl(),Cs()),Il(56),Pl(156),Il(266),jl(),Wf(),jl(),Nt(),jl(),kt(),ic.endNonterminal(\"SlidingWindowClause\",Vl)}function Tt(){Hl(239),Il(88),Hl(275),Il(21),Hl(31),Il(245),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il(266),Xf(),Ct(),Lt()}function Nt(){ic.startNonterminal(\"WindowStartCondition\",Vl),Pl(242),Il(181),jl(),At(),Il(86),Pl(271),Il(266),jl(),Wf(),ic.endNonterminal(\"WindowStartCondition\",Vl)}function Ct(){Hl(242),Il(181),Ot(),Il(86),Hl(271),Il(266),Xf()}function kt(){ic.startNonterminal(\"WindowEndCondition\",Vl),$l==202&&Pl(202),Il(53),Pl(127),Il(181),jl(),At(),Il(86),Pl(271),Il(266),jl(),Wf(),ic.endNonterminal(\"WindowEndCondition\",Vl)}function Lt(){$l==202&&Hl(202),Il(53),Hl(127),Il(181),Ot(),Il(86),Hl(271),Il(266),Xf()}function At(){ic.startNonterminal(\"WindowVars\",Vl),$l==31&&(Pl(31),Il(245),jl(),Mt()),Il(174),$l==82&&(jl(),ct()),Il(163),$l==219&&(Pl(219),Il(21),Pl(31),Il(245),jl(),Dt()),Il(131),$l==190&&(Pl(190),Il(21),Pl(31),Il(245),jl(),Ht()),ic.endNonterminal(\"WindowVars\",Vl)}function Ot(){$l==31&&(Hl(31),Il(245),_t()),Il(174),$l==82&&ht(),Il(163),$l==219&&(Hl(219),Il(21),Hl(31),Il(245),Pt()),Il(131),$l==190&&(Hl(190),Il(21),Hl(31),Il(245),Bt())}function Mt(){ic.startNonterminal(\"CurrentItem\",Vl),$a(),ic.endNonterminal(\"CurrentItem\",Vl)}function _t(){Ja()}function Dt(){ic.startNonterminal(\"PreviousItem\",Vl),$a(),ic.endNonterminal(\"PreviousItem\",Vl)}function Pt(){Ja()}function Ht(){ic.startNonterminal(\"NextItem\",Vl),$a(),ic.endNonterminal(\"NextItem\",Vl)}function Bt(){Ja()}function jt(){ic.startNonterminal(\"CountClause\",Vl),Pl(106),Il(21),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"CountClause\",Vl)}function Ft(){Hl(106),Il(21),Hl(31),Il(245),Ni()}function It(){ic.startNonterminal(\"WhereClause\",Vl),Pl(272),Il(266),jl(),Wf(),ic.endNonterminal(\"WhereClause\",Vl)}function qt(){Hl(272),Il(266),Xf()}function Rt(){ic.startNonterminal(\"GroupByClause\",Vl),Pl(150),Il(37),Pl(88),Il(266),jl(),zt(),ic.endNonterminal(\"GroupByClause\",Vl)}function Ut(){Hl(150),Il(37),Hl(88),Il(266),Wt()}function zt(){ic.startNonterminal(\"GroupingSpecList\",Vl),Xt();for(;;){Il(198);if($l!=42)break;Pl(42),Il(266),jl(),Xt()}ic.endNonterminal(\"GroupingSpecList\",Vl)}function Wt(){Vt();for(;;){Il(198);if($l!=42)break;Hl(42),Il(266),Vt()}}function Xt(){ic.startNonterminal(\"GroupingSpec\",Vl);switch($l){case 31:ql(245);break;default:Wl=$l}if(Wl==3103||Wl==36383||Wl==37407||Wl==37919||Wl==38431||Wl==38943||Wl==39967||Wl==40479||Wl==40991||Wl==41503||Wl==42015||Wl==42527||Wl==43039||Wl==43551||Wl==44063||Wl==44575||Wl==45599||Wl==46111||Wl==46623||Wl==47135||Wl==48159||Wl==48671||Wl==49695||Wl==50207||Wl==50719||Wl==52255||Wl==52767||Wl==53279||Wl==53791||Wl==54303||Wl==54815||Wl==55839||Wl==56351||Wl==56863||Wl==57375||Wl==57887||Wl==58399||Wl==60959||Wl==61471||Wl==61983||Wl==62495||Wl==63007||Wl==63519||Wl==64031||Wl==64543||Wl==65055||Wl==66079||Wl==66591||Wl==67615||Wl==68127||Wl==68639||Wl==69151||Wl==69663||Wl==70175||Wl==70687||Wl==71199||Wl==72735||Wl==73247||Wl==75295||Wl==75807||Wl==76831||Wl==77855||Wl==78367||Wl==78879||Wl==79391||Wl==79903||Wl==80415||Wl==82463||Wl==82975||Wl==83487||Wl==83999||Wl==84511||Wl==85023||Wl==85535||Wl==86047||Wl==86559||Wl==87071||Wl==88607||Wl==89119||Wl==89631||Wl==90655||Wl==91679||Wl==92703||Wl==93727||Wl==94239||Wl==94751||Wl==95775||Wl==96287||Wl==96799||Wl==99359||Wl==99871||Wl==100895||Wl==101407||Wl==103455||Wl==103967||Wl==104479||Wl==104991||Wl==105503||Wl==106015||Wl==107551||Wl==110623||Wl==111135||Wl==112671||Wl==113695||Wl==114207||Wl==114719||Wl==115231||Wl==115743||Wl==116767||Wl==117279||Wl==117791||Wl==118303||Wl==118815||Wl==119327||Wl==119839||Wl==122399||Wl==122911||Wl==123423||Wl==123935||Wl==125471||Wl==126495||Wl==127007||Wl==127519||Wl==129567||Wl==130079||Wl==130591||Wl==131103||Wl==131615||Wl==132127||Wl==132639||Wl==133151||Wl==134175||Wl==134687||Wl==136223||Wl==136735||Wl==137247||Wl==137759||Wl==139295||Wl==139807||Wl==141343){Wl=uc(2,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Jt(),Il(205);if($l==53||$l==80)$l==80&&ks(),Il(28),Hl(53),Il(266),Xf();$l==95&&(Hl(95),Il(15),Hl(7)),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(2,Vl,Wl)}}switch(Wl){case-1:$t(),Il(205);if($l==53||$l==80)$l==80&&(jl(),Cs()),Il(28),Pl(53),Il(266),jl(),Wf();$l==95&&(Pl(95),Il(15),Pl(7));break;default:Wf()}ic.endNonterminal(\"GroupingSpec\",Vl)}function Vt(){switch($l){case 31:ql(245);break;default:Wl=$l}if(Wl==3103||Wl==36383||Wl==37407||Wl==37919||Wl==38431||Wl==38943||Wl==39967||Wl==40479||Wl==40991||Wl==41503||Wl==42015||Wl==42527||Wl==43039||Wl==43551||Wl==44063||Wl==44575||Wl==45599||Wl==46111||Wl==46623||Wl==47135||Wl==48159||Wl==48671||Wl==49695||Wl==50207||Wl==50719||Wl==52255||Wl==52767||Wl==53279||Wl==53791||Wl==54303||Wl==54815||Wl==55839||Wl==56351||Wl==56863||Wl==57375||Wl==57887||Wl==58399||Wl==60959||Wl==61471||Wl==61983||Wl==62495||Wl==63007||Wl==63519||Wl==64031||Wl==64543||Wl==65055||Wl==66079||Wl==66591||Wl==67615||Wl==68127||Wl==68639||Wl==69151||Wl==69663||Wl==70175||Wl==70687||Wl==71199||Wl==72735||Wl==73247||Wl==75295||Wl==75807||Wl==76831||Wl==77855||Wl==78367||Wl==78879||Wl==79391||Wl==79903||Wl==80415||Wl==82463||Wl==82975||Wl==83487||Wl==83999||Wl==84511||Wl==85023||Wl==85535||Wl==86047||Wl==86559||Wl==87071||Wl==88607||Wl==89119||Wl==89631||Wl==90655||Wl==91679||Wl==92703||Wl==93727||Wl==94239||Wl==94751||Wl==95775||Wl==96287||Wl==96799||Wl==99359||Wl==99871||Wl==100895||Wl==101407||Wl==103455||Wl==103967||Wl==104479||Wl==104991||Wl==105503||Wl==106015||Wl==107551||Wl==110623||Wl==111135||Wl==112671||Wl==113695||Wl==114207||Wl==114719||Wl==115231||Wl==115743||Wl==116767||Wl==117279||Wl==117791||Wl==118303||Wl==118815||Wl==119327||Wl==119839||Wl==122399||Wl==122911||Wl==123423||Wl==123935||Wl==125471||Wl==126495||Wl==127007||Wl==127519||Wl==129567||Wl==130079||Wl==130591||Wl==131103||Wl==131615||Wl==132127||Wl==132639||Wl==133151||Wl==134175||Wl==134687||Wl==136223||Wl==136735||Wl==137247||Wl==137759||Wl==139295||Wl==139807||Wl==141343){Wl=uc(2,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Jt(),Il(205);if($l==53||$l==80)$l==80&&ks(),Il(28),Hl(53),Il(266),Xf();$l==95&&(Hl(95),Il(15),Hl(7)),oc(2,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(2,t,-2)}}}switch(Wl){case-1:Jt(),Il(205);if($l==53||$l==80)$l==80&&ks(),Il(28),Hl(53),Il(266),Xf();$l==95&&(Hl(95),Il(15),Hl(7));break;case-3:break;default:Xf()}}function $t(){ic.startNonterminal(\"GroupingVariable\",Vl),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"GroupingVariable\",Vl)}function Jt(){Hl(31),Il(245),Ni()}function Kt(){ic.startNonterminal(\"OrderByClause\",Vl);switch($l){case 205:Pl(205),Il(37),Pl(88);break;default:Pl(241),Il(70),Pl(205),Il(37),Pl(88)}Il(266),jl(),Gt(),ic.endNonterminal(\"OrderByClause\",Vl)}function Qt(){switch($l){case 205:Hl(205),Il(37),Hl(88);break;default:Hl(241),Il(70),Hl(205),Il(37),Hl(88)}Il(266),Yt()}function Gt(){ic.startNonterminal(\"OrderSpecList\",Vl),Zt();for(;;){Il(198);if($l!=42)break;Pl(42),Il(266),jl(),Zt()}ic.endNonterminal(\"OrderSpecList\",Vl)}function Yt(){en();for(;;){Il(198);if($l!=42)break;Hl(42),Il(266),en()}}function Zt(){ic.startNonterminal(\"OrderSpec\",Vl),Wf(),jl(),tn(),ic.endNonterminal(\"OrderSpec\",Vl)}function en(){Xf(),nn()}function tn(){ic.startNonterminal(\"OrderModifier\",Vl);if($l==81||$l==114)switch($l){case 81:Pl(81);break;default:Pl(114)}Il(202);if($l==124){Pl(124),Il(125);switch($l){case 149:Pl(149);break;default:Pl(176)}}Il(199),$l==95&&(Pl(95),Il(15),Pl(7)),ic.endNonterminal(\"OrderModifier\",Vl)}function nn(){if($l==81||$l==114)switch($l){case 81:Hl(81);break;default:Hl(114)}Il(202);if($l==124){Hl(124),Il(125);switch($l){case 149:Hl(149);break;default:Hl(176)}}Il(199),$l==95&&(Hl(95),Il(15),Hl(7))}function rn(){ic.startNonterminal(\"ReturnClause\",Vl),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"ReturnClause\",Vl)}function sn(){Hl(224),Il(266),Xf()}function on(){ic.startNonterminal(\"QuantifiedExpr\",Vl);switch($l){case 240:Pl(240);break;default:Pl(130)}Il(21),jl(),an();for(;;){if($l!=42)break;Pl(42),Il(21),jl(),an()}Pl(228),Il(266),jl(),Wf(),ic.endNonterminal(\"QuantifiedExpr\",Vl)}function un(){switch($l){case 240:Hl(240);break;default:Hl(130)}Il(21),fn();for(;;){if($l!=42)break;Hl(42),Il(21),fn()}Hl(228),Il(266),Xf()}function an(){ic.startNonterminal(\"QuantifiedVarDecl\",Vl),Pl(31),Il(245),jl(),Ti(),Il(114),$l==80&&(jl(),Cs()),Il(56),Pl(156),Il(266),jl(),Wf(),ic.endNonterminal(\"QuantifiedVarDecl\",Vl)}function fn(){Hl(31),Il(245),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il(266),Xf()}function ln(){ic.startNonterminal(\"SwitchExpr\",Vl),Pl(248),Il(22),Pl(35),Il(266),jl(),G(),Pl(38);for(;;){Il(38),jl(),hn();if($l!=89)break}Pl(110),Il(73),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"SwitchExpr\",Vl)}function cn(){Hl(248),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),pn();if($l!=89)break}Hl(110),Il(73),Hl(224),Il(266),Xf()}function hn(){ic.startNonterminal(\"SwitchCaseClause\",Vl);for(;;){Pl(89),Il(266),jl(),dn();if($l!=89)break}Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"SwitchCaseClause\",Vl)}function pn(){for(;;){Hl(89),Il(266),vn();if($l!=89)break}Hl(224),Il(266),Xf()}function dn(){ic.startNonterminal(\"SwitchCaseOperand\",Vl),Wf(),ic.endNonterminal(\"SwitchCaseOperand\",Vl)}function vn(){Xf()}function mn(){ic.startNonterminal(\"TypeswitchExpr\",Vl),Pl(259),Il(22),Pl(35),Il(266),jl(),G(),Pl(38);for(;;){Il(38),jl(),yn();if($l!=89)break}Pl(110),Il(99),$l==31&&(Pl(31),Il(245),jl(),Ti()),Il(73),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"TypeswitchExpr\",Vl)}function gn(){Hl(259),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),bn();if($l!=89)break}Hl(110),Il(99),$l==31&&(Hl(31),Il(245),Ni()),Il(73),Hl(224),Il(266),Xf()}function yn(){ic.startNonterminal(\"CaseClause\",Vl),Pl(89),Il(257),$l==31&&(Pl(31),Il(245),jl(),Ti(),Il(33),Pl(80)),Il(253),jl(),wn(),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"CaseClause\",Vl)}function bn(){Hl(89),Il(257),$l==31&&(Hl(31),Il(245),Ni(),Il(33),Hl(80)),Il(253),En(),Hl(224),Il(266),Xf()}function wn(){ic.startNonterminal(\"SequenceTypeUnion\",Vl),Ls();for(;;){Il(138);if($l!=284)break;Pl(284),Il(253),jl(),Ls()}ic.endNonterminal(\"SequenceTypeUnion\",Vl)}function En(){As();for(;;){Il(138);if($l!=284)break;Hl(284),Il(253),As()}}function Sn(){ic.startNonterminal(\"IfExpr\",Vl),Pl(154),Il(22),Pl(35),Il(266),jl(),G(),Pl(38),Il(80),Pl(250),Il(266),jl(),Wf(),Pl(123),Il(266),jl(),Wf(),ic.endNonterminal(\"IfExpr\",Vl)}function xn(){Hl(154),Il(22),Hl(35),Il(266),Y(),Hl(38),Il(80),Hl(250),Il(266),Xf(),Hl(123),Il(266),Xf()}function Tn(){ic.startNonterminal(\"TryCatchExpr\",Vl),Cn();for(;;){Il(39),jl(),On(),Il(207);if($l!=92)break}ic.endNonterminal(\"TryCatchExpr\",Vl)}function Nn(){kn();for(;;){Il(39),Mn(),Il(207);if($l!=92)break}}function Cn(){ic.startNonterminal(\"TryClause\",Vl),Pl(256),Il(90),Pl(281),Il(266),jl(),Ln(),Pl(287),ic.endNonterminal(\"TryClause\",Vl)}function kn(){Hl(256),Il(90),Hl(281),Il(266),An(),Hl(287)}function Ln(){ic.startNonterminal(\"TryTargetExpr\",Vl),G(),ic.endNonterminal(\"TryTargetExpr\",Vl)}function An(){Y()}function On(){ic.startNonterminal(\"CatchClause\",Vl),Pl(92),Il(248),jl(),_n(),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"CatchClause\",Vl)}function Mn(){Hl(92),Il(248),Dn(),Hl(281),Il(266),Y(),Hl(287)}function _n(){ic.startNonterminal(\"CatchErrorList\",Vl),Yr();for(;;){Il(140);if($l!=284)break;Pl(284),Il(248),jl(),Yr()}ic.endNonterminal(\"CatchErrorList\",Vl)}function Dn(){Zr();for(;;){Il(140);if($l!=284)break;Hl(284),Il(248),Zr()}}function Pn(){ic.startNonterminal(\"OrExpr\",Vl),Bn();for(;;){if($l!=204)break;Pl(204),Il(266),jl(),Bn()}ic.endNonterminal(\"OrExpr\",Vl)}function Hn(){jn();for(;;){if($l!=204)break;Hl(204),Il(266),jn()}}function Bn(){ic.startNonterminal(\"AndExpr\",Vl),Fn();for(;;){if($l!=76)break;Pl(76),Il(266),jl(),Fn()}ic.endNonterminal(\"AndExpr\",Vl)}function jn(){In();for(;;){if($l!=76)break;Hl(76),Il(266),In()}}function Fn(){ic.startNonterminal(\"NotExpr\",Vl),$l==196&&Pl(196),Il(265),jl(),qn(),ic.endNonterminal(\"NotExpr\",Vl)}function In(){$l==196&&Hl(196),Il(265),Rn()}function qn(){ic.startNonterminal(\"ComparisonExpr\",Vl),Un();if($l==27||$l==55||$l==58||$l==59||$l==61||$l==62||$l==63||$l==64||$l==129||$l==148||$l==152||$l==166||$l==175||$l==181||$l==189){switch($l){case 129:case 148:case 152:case 175:case 181:case 189:jl(),yr();break;case 58:case 64:case 166:jl(),wr();break;default:jl(),mr()}Il(265),jl(),Un()}ic.endNonterminal(\"ComparisonExpr\",Vl)}function Rn(){zn();if($l==27||$l==55||$l==58||$l==59||$l==61||$l==62||$l==63||$l==64||$l==129||$l==148||$l==152||$l==166||$l==175||$l==181||$l==189){switch($l){case 129:case 148:case 152:case 175:case 181:case 189:br();break;case 58:case 64:case 166:Er();break;default:gr()}Il(265),zn()}}function Un(){ic.startNonterminal(\"FTContainsExpr\",Vl),Wn(),$l==100&&(Pl(100),Il(79),Pl(249),Il(177),jl(),ou(),$l==277&&(jl(),Ta())),ic.endNonterminal(\"FTContainsExpr\",Vl)}function zn(){Xn(),$l==100&&(Hl(100),Il(79),Hl(249),Il(177),uu(),$l==277&&Na())}function Wn(){ic.startNonterminal(\"StringConcatExpr\",Vl),Vn();for(;;){if($l!=285)break;Pl(285),Il(265),jl(),Vn()}ic.endNonterminal(\"StringConcatExpr\",Vl)}function Xn(){$n();for(;;){if($l!=285)break;Hl(285),Il(265),$n()}}function Vn(){ic.startNonterminal(\"RangeExpr\",Vl),Jn(),$l==253&&(Pl(253),Il(265),jl(),Jn()),ic.endNonterminal(\"RangeExpr\",Vl)}function $n(){Kn(),$l==253&&(Hl(253),Il(265),Kn())}function Jn(){ic.startNonterminal(\"AdditiveExpr\",Vl),Qn();for(;;){if($l!=41&&$l!=43)break;switch($l){case 41:Pl(41);break;default:Pl(43)}Il(265),jl(),Qn()}ic.endNonterminal(\"AdditiveExpr\",Vl)}function Kn(){Gn();for(;;){if($l!=41&&$l!=43)break;switch($l){case 41:Hl(41);break;default:Hl(43)}Il(265),Gn()}}function Qn(){ic.startNonterminal(\"MultiplicativeExpr\",Vl),Yn();for(;;){if($l!=39&&$l!=119&&$l!=153&&$l!=183)break;switch($l){case 39:Pl(39);break;case 119:Pl(119);break;case 153:Pl(153);break;default:Pl(183)}Il(265),jl(),Yn()}ic.endNonterminal(\"MultiplicativeExpr\",Vl)}function Gn(){Zn();for(;;){if($l!=39&&$l!=119&&$l!=153&&$l!=183)break;switch($l){case 39:Hl(39);break;case 119:Hl(119);break;case 153:Hl(153);break;default:Hl(183)}Il(265),Zn()}}function Yn(){ic.startNonterminal(\"UnionExpr\",Vl),er();for(;;){if($l!=260&&$l!=284)break;switch($l){case 260:Pl(260);break;default:Pl(284)}Il(265),jl(),er()}ic.endNonterminal(\"UnionExpr\",Vl)}function Zn(){tr();for(;;){if($l!=260&&$l!=284)break;switch($l){case 260:Hl(260);break;default:Hl(284)}Il(265),tr()}}function er(){ic.startNonterminal(\"IntersectExceptExpr\",Vl),nr();for(;;){Il(221);if($l!=132&&$l!=164)break;switch($l){case 164:Pl(164);break;default:Pl(132)}Il(265),jl(),nr()}ic.endNonterminal(\"IntersectExceptExpr\",Vl)}function tr(){rr();for(;;){Il(221);if($l!=132&&$l!=164)break;switch($l){case 164:Hl(164);break;default:Hl(132)}Il(265),rr()}}function nr(){ic.startNonterminal(\"InstanceofExpr\",Vl),ir(),Il(222),$l==162&&(Pl(162),Il(67),Pl(200),Il(253),jl(),Ls()),ic.endNonterminal(\"InstanceofExpr\",Vl)}function rr(){sr(),Il(222),$l==162&&(Hl(162),Il(67),Hl(200),Il(253),As())}function ir(){ic.startNonterminal(\"TreatExpr\",Vl),or(),Il(223),$l==254&&(Pl(254),Il(33),Pl(80),Il(253),jl(),Ls()),ic.endNonterminal(\"TreatExpr\",Vl)}function sr(){ur(),Il(223),$l==254&&(Hl(254),Il(33),Hl(80),Il(253),As())}function or(){ic.startNonterminal(\"CastableExpr\",Vl),ar(),Il(224),$l==91&&(Pl(91),Il(33),Pl(80),Il(245),jl(),Ts()),ic.endNonterminal(\"CastableExpr\",Vl)}function ur(){fr(),Il(224),$l==91&&(Hl(91),Il(33),Hl(80),Il(245),Ns())}function ar(){ic.startNonterminal(\"CastExpr\",Vl),lr(),Il(226),$l==90&&(Pl(90),Il(33),Pl(80),Il(245),jl(),Ts()),ic.endNonterminal(\"CastExpr\",Vl)}function fr(){cr(),Il(226),$l==90&&(Hl(90),Il(33),Hl(80),Il(245),Ns())}function lr(){ic.startNonterminal(\"UnaryExpr\",Vl);for(;;){Il(265);if($l!=41&&$l!=43)break;switch($l){case 43:Pl(43);break;default:Pl(41)}}jl(),hr(),ic.endNonterminal(\"UnaryExpr\",Vl)}function cr(){for(;;){Il(265);if($l!=41&&$l!=43)break;switch($l){case 43:Hl(43);break;default:Hl(41)}}pr()}function hr(){ic.startNonterminal(\"ValueExpr\",Vl);switch($l){case 266:ql(188);break;default:Wl=$l}switch(Wl){case 89354:case 125706:case 132362:case 144138:Sr();break;case 36:Cr();break;default:dr()}ic.endNonterminal(\"ValueExpr\",Vl)}function pr(){switch($l){case 266:ql(188);break;default:Wl=$l}switch(Wl){case 89354:case 125706:case 132362:case 144138:xr();break;case 36:kr();break;default:vr()}}function dr(){ic.startNonterminal(\"SimpleMapExpr\",Vl),Or();for(;;){if($l!=26)break;Pl(26),Il(262),jl(),Or()}ic.endNonterminal(\"SimpleMapExpr\",Vl)}function vr(){Mr();for(;;){if($l!=26)break;Hl(26),Il(262),Mr()}}function mr(){ic.startNonterminal(\"GeneralComp\",Vl);switch($l){case 61:Pl(61);break;case 27:Pl(27);break;case 55:Pl(55);break;case 59:Pl(59);break;case 62:Pl(62);break;default:Pl(63)}ic.endNonterminal(\"GeneralComp\",Vl)}function gr(){switch($l){case 61:Hl(61);break;case 27:Hl(27);break;case 55:Hl(55);break;case 59:Hl(59);break;case 62:Hl(62);break;default:Hl(63)}}function yr(){ic.startNonterminal(\"ValueComp\",Vl);switch($l){case 129:Pl(129);break;case 189:Pl(189);break;case 181:Pl(181);break;case 175:Pl(175);break;case 152:Pl(152);break;default:Pl(148)}ic.endNonterminal(\"ValueComp\",Vl)}function br(){switch($l){case 129:Hl(129);break;case 189:Hl(189);break;case 181:Hl(181);break;case 175:Hl(175);break;case 152:Hl(152);break;default:Hl(148)}}function wr(){ic.startNonterminal(\"NodeComp\",Vl);switch($l){case 166:Pl(166);break;case 58:Pl(58);break;default:Pl(64)}ic.endNonterminal(\"NodeComp\",Vl)}function Er(){switch($l){case 166:Hl(166);break;case 58:Hl(58);break;default:Hl(64)}}function Sr(){ic.startNonterminal(\"ValidateExpr\",Vl),Pl(266),Il(175);if($l!=281)switch($l){case 258:Pl(258),Il(245),jl(),Ao();break;default:jl(),Tr()}Il(90),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"ValidateExpr\",Vl)}function xr(){Hl(266),Il(175);if($l!=281)switch($l){case 258:Hl(258),Il(245),Oo();break;default:Nr()}Il(90),Hl(281),Il(266),Y(),Hl(287)}function Tr(){ic.startNonterminal(\"ValidationMode\",Vl);switch($l){case 174:Pl(174);break;default:Pl(245)}ic.endNonterminal(\"ValidationMode\",Vl)}function Nr(){switch($l){case 174:Hl(174);break;default:Hl(245)}}function Cr(){ic.startNonterminal(\"ExtensionExpr\",Vl);for(;;){jl(),Lr(),Il(104);if($l!=36)break}Pl(281),Il(274),$l!=287&&(jl(),G()),Pl(287),ic.endNonterminal(\"ExtensionExpr\",Vl)}function kr(){for(;;){Ar(),Il(104);if($l!=36)break}Hl(281),Il(274),$l!=287&&Y(),Hl(287)}function Lr(){ic.startNonterminal(\"Pragma\",Vl),Pl(36),Rl(242),$l==21&&Pl(21),$a(),Rl(10),$l==21&&(Pl(21),Rl(0),Pl(1)),Rl(5),Pl(30),ic.endNonterminal(\"Pragma\",Vl)}function Ar(){Hl(36),Rl(242),$l==21&&Hl(21),Ja(),Rl(10),$l==21&&(Hl(21),Rl(0),Hl(1)),Rl(5),Hl(30)}function Or(){ic.startNonterminal(\"PathExpr\",Vl);switch($l){case 47:Pl(47),Il(288);switch($l){case 25:case 26:case 27:case 38:case 39:case 41:case 42:case 43:case 50:case 54:case 58:case 59:case 61:case 62:case 63:case 64:case 70:case 88:case 100:case 209:case 237:case 252:case 279:case 284:case 285:case 286:case 287:break;default:jl(),_r()}break;case 48:Pl(48),Il(259),jl(),_r();break;default:_r()}ic.endNonterminal(\"PathExpr\",Vl)}function Mr(){switch($l){case 47:Hl(47),Il(288);switch($l){case 25:case 26:case 27:case 38:case 39:case 41:case 42:case 43:case 50:case 54:case 58:case 59:case 61:case 62:case 63:case 64:case 70:case 88:case 100:case 209:case 237:case 252:case 279:case 284:case 285:case 286:case 287:break;default:Dr()}break;case 48:Hl(48),Il(259),Dr();break;default:Dr()}}function _r(){ic.startNonterminal(\"RelativePathExpr\",Vl),ei();for(;;){switch($l){case 26:ql(264);break;default:Wl=$l}if(Wl!=25&&Wl!=27&&Wl!=38&&Wl!=39&&Wl!=41&&Wl!=42&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=50&&Wl!=54&&Wl!=55&&Wl!=58&&Wl!=59&&Wl!=61&&Wl!=62&&Wl!=63&&Wl!=64&&Wl!=70&&Wl!=71&&Wl!=76&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=85&&Wl!=88&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=95&&Wl!=100&&Wl!=106&&Wl!=110&&Wl!=114&&Wl!=119&&Wl!=123&&Wl!=124&&Wl!=127&&Wl!=129&&Wl!=132&&Wl!=139&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=162&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=175&&Wl!=177&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=189&&Wl!=202&&Wl!=204&&Wl!=205&&Wl!=209&&Wl!=224&&Wl!=228&&Wl!=237&&Wl!=241&&Wl!=242&&Wl!=252&&Wl!=253&&Wl!=254&&Wl!=260&&Wl!=272&&Wl!=276&&Wl!=279&&Wl!=284&&Wl!=285&&Wl!=286&&Wl!=287&&Wl!=2586&&Wl!=23578&&Wl!=24090&&Wl!=24602&&Wl!=34330){Wl=uc(3,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{switch($l){case 47:Hl(47);break;case 48:Hl(48);break;default:Hl(26)}Il(263),Hr(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(3,Vl,Wl)}}if(Wl!=-1&&Wl!=47&&Wl!=48&&Wl!=2586&&Wl!=23578&&Wl!=34330)break;switch($l){case 47:Pl(47);break;case 48:Pl(48);break;default:Pl(26)}Il(263),jl(),Pr()}ic.endNonterminal(\"RelativePathExpr\",Vl)}function Dr(){ti();for(;;){switch($l){case 26:ql(264);break;default:Wl=$l}if(Wl!=25&&Wl!=27&&Wl!=38&&Wl!=39&&Wl!=41&&Wl!=42&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=50&&Wl!=54&&Wl!=55&&Wl!=58&&Wl!=59&&Wl!=61&&Wl!=62&&Wl!=63&&Wl!=64&&Wl!=70&&Wl!=71&&Wl!=76&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=85&&Wl!=88&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=95&&Wl!=100&&Wl!=106&&Wl!=110&&Wl!=114&&Wl!=119&&Wl!=123&&Wl!=124&&Wl!=127&&Wl!=129&&Wl!=132&&Wl!=139&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=162&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=175&&Wl!=177&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=189&&Wl!=202&&Wl!=204&&Wl!=205&&Wl!=209&&Wl!=224&&Wl!=228&&Wl!=237&&Wl!=241&&Wl!=242&&Wl!=252&&Wl!=253&&Wl!=254&&Wl!=260&&Wl!=272&&Wl!=276&&Wl!=279&&Wl!=284&&Wl!=285&&Wl!=286&&Wl!=287&&Wl!=2586&&Wl!=23578&&Wl!=24090&&Wl!=24602&&Wl!=34330){Wl=uc(3,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{switch($l){case 47:Hl(47);break;case 48:Hl(48);break;default:Hl(26)}Il(263),Hr(),oc(3,t,-1);continue}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(3,t,-2);break}}}if(Wl!=-1&&Wl!=47&&Wl!=48&&Wl!=2586&&Wl!=23578&&Wl!=34330)break;switch($l){case 47:Hl(47);break;case 48:Hl(48);break;default:Hl(26)}Il(263),Hr()}}function Pr(){ic.startNonterminal(\"StepExpr\",Vl);switch($l){case 83:ql(287);break;case 122:ql(286);break;case 187:case 220:ql(284);break;case 135:case 197:case 255:ql(236);break;case 97:case 120:case 206:case 249:case 262:ql(238);break;case 79:case 125:case 154:case 167:case 169:case 247:case 248:case 259:ql(229);break;case 74:case 75:case 94:case 112:case 113:case 137:case 138:case 210:case 216:case 217:case 234:ql(237);break;case 6:case 71:case 73:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 114:case 119:case 121:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 139:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 188:case 189:case 194:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 230:case 231:case 232:case 233:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(233);break;default:Wl=$l}if(Wl==12935||Wl==12997||Wl==13055||Wl==13447||Wl==13509||Wl==13567||Wl==13959||Wl==14021||Wl==14079||Wl==19591||Wl==19653||Wl==19711||Wl==20103||Wl==20165||Wl==20223||Wl==21127||Wl==21189||Wl==21247||Wl==21639||Wl==21701||Wl==21759||Wl==22151||Wl==22213||Wl==22271||Wl==24199||Wl==24261||Wl==24319||Wl==24711||Wl==24773||Wl==24831||Wl==25735||Wl==25797||Wl==25855||Wl==27783||Wl==27845||Wl==27903||Wl==28295||Wl==28357||Wl==28415||Wl==29831||Wl==29893||Wl==29951||Wl==30343||Wl==30405||Wl==30463||Wl==31367||Wl==31429||Wl==31487||Wl==31879||Wl==31941||Wl==31999||Wl==32391||Wl==32453||Wl==32511||Wl==32903||Wl==32965||Wl==33023||Wl==35463||Wl==35525||Wl==35583||Wl==35975||Wl==36037||Wl==36095||Wl==36435||Wl==36474||Wl==36487||Wl==36539||Wl==36549||Wl==36572||Wl==36607||Wl==38995||Wl==39034||Wl==39047||Wl==39099||Wl==39109||Wl==39132||Wl==39167||Wl==41043||Wl==41082||Wl==41095||Wl==41147||Wl==41157||Wl==41180||Wl==41215||Wl==41555||Wl==41594||Wl==41607||Wl==41659||Wl==41669||Wl==41692||Wl==41727||Wl==42067||Wl==42106||Wl==42119||Wl==42171||Wl==42181||Wl==42204||Wl==42239||Wl==43603||Wl==43642||Wl==43655||Wl==43707||Wl==43717||Wl==43740||Wl==43775||Wl==45191||Wl==45253||Wl==45311||Wl==45651||Wl==45690||Wl==45703||Wl==45755||Wl==45765||Wl==45788||Wl==45823||Wl==46163||Wl==46202||Wl==46215||Wl==46267||Wl==46277||Wl==46300||Wl==46335||Wl==46675||Wl==46714||Wl==46727||Wl==46779||Wl==46789||Wl==46812||Wl==46847||Wl==48723||Wl==48762||Wl==48775||Wl==48827||Wl==48837||Wl==48860||Wl==48895||Wl==51335||Wl==51397||Wl==51455||Wl==54355||Wl==54394||Wl==54407||Wl==54459||Wl==54469||Wl==54492||Wl==54527||Wl==56403||Wl==56442||Wl==56455||Wl==56507||Wl==56517||Wl==56540||Wl==56575||Wl==58451||Wl==58490||Wl==58503||Wl==58555||Wl==58565||Wl==58588||Wl==58623||Wl==61011||Wl==61050||Wl==61063||Wl==61115||Wl==61125||Wl==61148||Wl==61183||Wl==63059||Wl==63098||Wl==63111||Wl==63163||Wl==63173||Wl==63196||Wl==63231||Wl==63571||Wl==63610||Wl==63623||Wl==63675||Wl==63685||Wl==63708||Wl==63743||Wl==65107||Wl==65146||Wl==65159||Wl==65211||Wl==65221||Wl==65244||Wl==65279||Wl==66131||Wl==66170||Wl==66183||Wl==66235||Wl==66245||Wl==66268||Wl==66303||Wl==67667||Wl==67706||Wl==67719||Wl==67771||Wl==67781||Wl==67804||Wl==67839||Wl==71251||Wl==71290||Wl==71303||Wl==71355||Wl==71365||Wl==71388||Wl==71423||Wl==75859||Wl==75898||Wl==75911||Wl==75963||Wl==75973||Wl==75996||Wl==76031||Wl==76883||Wl==76922||Wl==76935||Wl==76987||Wl==76997||Wl==77020||Wl==77055||Wl==77907||Wl==77946||Wl==77959||Wl==78011||Wl==78021||Wl==78044||Wl==78079||Wl==78419||Wl==78458||Wl==78471||Wl==78523||Wl==78533||Wl==78556||Wl==78591||Wl==83027||Wl==83066||Wl==83079||Wl==83131||Wl==83141||Wl==83164||Wl==83199||Wl==84051||Wl==84090||Wl==84103||Wl==84155||Wl==84165||Wl==84188||Wl==84223||Wl==84563||Wl==84602||Wl==84615||Wl==84667||Wl==84677||Wl==84700||Wl==84735||Wl==85075||Wl==85114||Wl==85127||Wl==85179||Wl==85189||Wl==85212||Wl==85247||Wl==89683||Wl==89722||Wl==89735||Wl==89787||Wl==89797||Wl==89820||Wl==89855||Wl==90707||Wl==90746||Wl==90759||Wl==90811||Wl==90821||Wl==90844||Wl==90879||Wl==92755||Wl==92794||Wl==92807||Wl==92859||Wl==92869||Wl==92892||Wl==92927||Wl==93779||Wl==93818||Wl==93831||Wl==93883||Wl==93893||Wl==93916||Wl==93951||Wl==94291||Wl==94330||Wl==94343||Wl==94395||Wl==94405||Wl==94428||Wl==94463||Wl==96851||Wl==96890||Wl==96903||Wl==96955||Wl==96965||Wl==96988||Wl==97023||Wl==103507||Wl==103546||Wl==103559||Wl==103611||Wl==103621||Wl==103644||Wl==103679||Wl==104531||Wl==104570||Wl==104583||Wl==104635||Wl==104645||Wl==104668||Wl==104703||Wl==105043||Wl==105082||Wl==105095||Wl==105147||Wl==105157||Wl==105180||Wl==105215||Wl==107143||Wl==107205||Wl==107263||Wl==114771||Wl==114810||Wl==114823||Wl==114875||Wl==114885||Wl==114908||Wl==114943||Wl==116819||Wl==116858||Wl==116871||Wl==116923||Wl==116933||Wl==116956||Wl==116991||Wl==121479||Wl==121541||Wl==121599||Wl==123475||Wl==123514||Wl==123527||Wl==123579||Wl==123589||Wl==123612||Wl==123647||Wl==123987||Wl==124026||Wl==124039||Wl==124091||Wl==124101||Wl==124124||Wl==124159||Wl==129159||Wl==129221||Wl==129279||Wl==129619||Wl==129658||Wl==129671||Wl==129723||Wl==129733||Wl==129756||Wl==129791||Wl==130131||Wl==130170||Wl==130183||Wl==130235||Wl==130245||Wl==130268||Wl==130303||Wl==133203||Wl==133242||Wl==133255||Wl==133307||Wl==133317||Wl==133340||Wl==133375||Wl==139347||Wl==139386||Wl==139399||Wl==139451||Wl==139461||Wl==139484||Wl==139519||Wl==141395||Wl==141434||Wl==141447||Wl==141499||Wl==141509||Wl==141532||Wl==141567||Wl==142983||Wl==143045||Wl==143103||Wl==145543||Wl==145605||Wl==145663||Wl==146055||Wl==146117||Wl==146175||Wl==146567||Wl==146629||Wl==146687||Wl==147079||Wl==147141||Wl==147199){Wl=uc(4,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ti(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(4,Vl,Wl)}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 33:case 35:case 55:case 56:case 60:case 69:case 281:case 283:case 3155:case 3194:case 9915:case 9948:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14995:case 14996:case 14998:case 15e3:case 15001:case 15002:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15016:case 15017:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15036:case 15037:case 15042:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15078:case 15079:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15095:case 15096:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15107:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18055:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18067:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18117:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18175:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:case 23175:case 23237:case 23295:case 37459:case 37498:case 37563:case 37596:case 37971:case 38010:case 38075:case 38108:case 38483:case 38522:case 38587:case 38620:case 40019:case 40058:case 40123:case 40156:case 40531:case 40570:case 42579:case 42618:case 42683:case 42716:case 43091:case 43130:case 43195:case 43228:case 44115:case 44154:case 44219:case 44252:case 44627:case 44666:case 44731:case 44764:case 47187:case 47226:case 47291:case 47324:case 48211:case 48250:case 48315:case 48348:case 49747:case 49786:case 49851:case 49884:case 50259:case 50298:case 50363:case 50396:case 50771:case 50810:case 50875:case 50908:case 52307:case 52346:case 52411:case 52444:case 52819:case 52858:case 52923:case 52956:case 53331:case 53370:case 53435:case 53468:case 53843:case 53882:case 53947:case 53980:case 54867:case 54906:case 54971:case 55004:case 55891:case 55930:case 55995:case 56028:case 56915:case 56954:case 57019:case 57052:case 57427:case 57466:case 57531:case 57564:case 57939:case 57978:case 58043:case 58076:case 61523:case 61562:case 61627:case 61660:case 62035:case 62074:case 62139:case 62172:case 62547:case 62586:case 62651:case 62684:case 64083:case 64122:case 64187:case 64220:case 64595:case 64634:case 64699:case 64732:case 66643:case 66682:case 66747:case 66780:case 68179:case 68218:case 68283:case 68316:case 68691:case 68730:case 68795:case 68828:case 69203:case 69242:case 69307:case 69340:case 69715:case 69754:case 69819:case 69852:case 70227:case 70266:case 70331:case 70364:case 70739:case 70778:case 70843:case 70876:case 72787:case 72826:case 72891:case 72924:case 73299:case 73338:case 73403:case 73436:case 75347:case 75386:case 75451:case 75484:case 78931:case 78970:case 79035:case 79068:case 79443:case 79482:case 79547:case 79580:case 79955:case 79994:case 80059:case 80092:case 80467:case 80506:case 80571:case 80604:case 82515:case 82554:case 82619:case 82652:case 83539:case 83578:case 83643:case 83676:case 85587:case 85626:case 85691:case 85724:case 86099:case 86138:case 86203:case 86236:case 86611:case 86650:case 87123:case 87162:case 87227:case 87260:case 88659:case 88698:case 88763:case 88796:case 89171:case 89210:case 89275:case 89308:case 91731:case 91770:case 91835:case 91868:case 94803:case 94842:case 94907:case 94940:case 95827:case 95866:case 95931:case 95964:case 96339:case 96378:case 96443:case 96476:case 99411:case 99450:case 99515:case 99548:case 99923:case 99962:case 100027:case 100060:case 100947:case 100986:case 101051:case 101084:case 101459:case 101498:case 101563:case 101596:case 104019:case 104058:case 104123:case 104156:case 105555:case 105594:case 105659:case 105692:case 106067:case 106106:case 106171:case 106204:case 107603:case 107642:case 107707:case 107740:case 110675:case 110714:case 110779:case 110812:case 111187:case 111226:case 111291:case 111324:case 112723:case 112762:case 112827:case 112860:case 113747:case 113786:case 113851:case 113884:case 114259:case 114298:case 114363:case 114396:case 115283:case 115322:case 115387:case 115420:case 115795:case 115834:case 115899:case 115932:case 117331:case 117370:case 117435:case 117468:case 117843:case 117882:case 117947:case 117980:case 118355:case 118394:case 118459:case 118492:case 118867:case 118906:case 118971:case 119004:case 119379:case 119418:case 119483:case 119516:case 119891:case 119930:case 119995:case 120028:case 122451:case 122490:case 122555:case 122588:case 122963:case 123002:case 123067:case 123100:case 125523:case 125562:case 125627:case 125660:case 126547:case 126586:case 127059:case 127098:case 127163:case 127196:case 127571:case 127610:case 127675:case 127708:case 130643:case 130682:case 130747:case 130780:case 131155:case 131194:case 131259:case 131292:case 131667:case 131706:case 131771:case 131804:case 132179:case 132218:case 132283:case 132316:case 132691:case 132730:case 132795:case 132828:case 134227:case 134266:case 134331:case 134364:case 134739:case 134778:case 134843:case 134876:case 136275:case 136314:case 136379:case 136412:case 136787:case 136826:case 136891:case 136924:case 137299:case 137338:case 137403:case 137436:case 137811:case 137850:case 137915:case 137948:case 139859:case 139898:case 139963:case 139996:case 143955:case 143969:case 143992:case 143994:case 144059:case 144078:case 144092:case 144121:case 144134:ei();break;default:Br()}ic.endNonterminal(\"StepExpr\",Vl)}function Hr(){switch($l){case 83:ql(287);break;case 122:ql(286);break;case 187:case 220:ql(284);break;case 135:case 197:case 255:ql(236);break;case 97:case 120:case 206:case 249:case 262:ql(238);break;case 79:case 125:case 154:case 167:case 169:case 247:case 248:case 259:ql(229);break;case 74:case 75:case 94:case 112:case 113:case 137:case 138:case 210:case 216:case 217:case 234:ql(237);break;case 6:case 71:case 73:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 114:case 119:case 121:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 139:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 188:case 189:case 194:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 230:case 231:case 232:case 233:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(233);break;default:Wl=$l}if(Wl==12935||Wl==12997||Wl==13055||Wl==13447||Wl==13509||Wl==13567||Wl==13959||Wl==14021||Wl==14079||Wl==19591||Wl==19653||Wl==19711||Wl==20103||Wl==20165||Wl==20223||Wl==21127||Wl==21189||Wl==21247||Wl==21639||Wl==21701||Wl==21759||Wl==22151||Wl==22213||Wl==22271||Wl==24199||Wl==24261||Wl==24319||Wl==24711||Wl==24773||Wl==24831||Wl==25735||Wl==25797||Wl==25855||Wl==27783||Wl==27845||Wl==27903||Wl==28295||Wl==28357||Wl==28415||Wl==29831||Wl==29893||Wl==29951||Wl==30343||Wl==30405||Wl==30463||Wl==31367||Wl==31429||Wl==31487||Wl==31879||Wl==31941||Wl==31999||Wl==32391||Wl==32453||Wl==32511||Wl==32903||Wl==32965||Wl==33023||Wl==35463||Wl==35525||Wl==35583||Wl==35975||Wl==36037||Wl==36095||Wl==36435||Wl==36474||Wl==36487||Wl==36539||Wl==36549||Wl==36572||Wl==36607||Wl==38995||Wl==39034||Wl==39047||Wl==39099||Wl==39109||Wl==39132||Wl==39167||Wl==41043||Wl==41082||Wl==41095||Wl==41147||Wl==41157||Wl==41180||Wl==41215||Wl==41555||Wl==41594||Wl==41607||Wl==41659||Wl==41669||Wl==41692||Wl==41727||Wl==42067||Wl==42106||Wl==42119||Wl==42171||Wl==42181||Wl==42204||Wl==42239||Wl==43603||Wl==43642||Wl==43655||Wl==43707||Wl==43717||Wl==43740||Wl==43775||Wl==45191||Wl==45253||Wl==45311||Wl==45651||Wl==45690||Wl==45703||Wl==45755||Wl==45765||Wl==45788||Wl==45823||Wl==46163||Wl==46202||Wl==46215||Wl==46267||Wl==46277||Wl==46300||Wl==46335||Wl==46675||Wl==46714||Wl==46727||Wl==46779||Wl==46789||Wl==46812||Wl==46847||Wl==48723||Wl==48762||Wl==48775||Wl==48827||Wl==48837||Wl==48860||Wl==48895||Wl==51335||Wl==51397||Wl==51455||Wl==54355||Wl==54394||Wl==54407||Wl==54459||Wl==54469||Wl==54492||Wl==54527||Wl==56403||Wl==56442||Wl==56455||Wl==56507||Wl==56517||Wl==56540||Wl==56575||Wl==58451||Wl==58490||Wl==58503||Wl==58555||Wl==58565||Wl==58588||Wl==58623||Wl==61011||Wl==61050||Wl==61063||Wl==61115||Wl==61125||Wl==61148||Wl==61183||Wl==63059||Wl==63098||Wl==63111||Wl==63163||Wl==63173||Wl==63196||Wl==63231||Wl==63571||Wl==63610||Wl==63623||Wl==63675||Wl==63685||Wl==63708||Wl==63743||Wl==65107||Wl==65146||Wl==65159||Wl==65211||Wl==65221||Wl==65244||Wl==65279||Wl==66131||Wl==66170||Wl==66183||Wl==66235||Wl==66245||Wl==66268||Wl==66303||Wl==67667||Wl==67706||Wl==67719||Wl==67771||Wl==67781||Wl==67804||Wl==67839||Wl==71251||Wl==71290||Wl==71303||Wl==71355||Wl==71365||Wl==71388||Wl==71423||Wl==75859||Wl==75898||Wl==75911||Wl==75963||Wl==75973||Wl==75996||Wl==76031||Wl==76883||Wl==76922||Wl==76935||Wl==76987||Wl==76997||Wl==77020||Wl==77055||Wl==77907||Wl==77946||Wl==77959||Wl==78011||Wl==78021||Wl==78044||Wl==78079||Wl==78419||Wl==78458||Wl==78471||Wl==78523||Wl==78533||Wl==78556||Wl==78591||Wl==83027||Wl==83066||Wl==83079||Wl==83131||Wl==83141||Wl==83164||Wl==83199||Wl==84051||Wl==84090||Wl==84103||Wl==84155||Wl==84165||Wl==84188||Wl==84223||Wl==84563||Wl==84602||Wl==84615||Wl==84667||Wl==84677||Wl==84700||Wl==84735||Wl==85075||Wl==85114||Wl==85127||Wl==85179||Wl==85189||Wl==85212||Wl==85247||Wl==89683||Wl==89722||Wl==89735||Wl==89787||Wl==89797||Wl==89820||Wl==89855||Wl==90707||Wl==90746||Wl==90759||Wl==90811||Wl==90821||Wl==90844||Wl==90879||Wl==92755||Wl==92794||Wl==92807||Wl==92859||Wl==92869||Wl==92892||Wl==92927||Wl==93779||Wl==93818||Wl==93831||Wl==93883||Wl==93893||Wl==93916||Wl==93951||Wl==94291||Wl==94330||Wl==94343||Wl==94395||Wl==94405||Wl==94428||Wl==94463||Wl==96851||Wl==96890||Wl==96903||Wl==96955||Wl==96965||Wl==96988||Wl==97023||Wl==103507||Wl==103546||Wl==103559||Wl==103611||Wl==103621||Wl==103644||Wl==103679||Wl==104531||Wl==104570||Wl==104583||Wl==104635||Wl==104645||Wl==104668||Wl==104703||Wl==105043||Wl==105082||Wl==105095||Wl==105147||Wl==105157||Wl==105180||Wl==105215||Wl==107143||Wl==107205||Wl==107263||Wl==114771||Wl==114810||Wl==114823||Wl==114875||Wl==114885||Wl==114908||Wl==114943||Wl==116819||Wl==116858||Wl==116871||Wl==116923||Wl==116933||Wl==116956||Wl==116991||Wl==121479||Wl==121541||Wl==121599||Wl==123475||Wl==123514||Wl==123527||Wl==123579||Wl==123589||Wl==123612||Wl==123647||Wl==123987||Wl==124026||Wl==124039||Wl==124091||Wl==124101||Wl==124124||Wl==124159||Wl==129159||Wl==129221||Wl==129279||Wl==129619||Wl==129658||Wl==129671||Wl==129723||Wl==129733||Wl==129756||Wl==129791||Wl==130131||Wl==130170||Wl==130183||Wl==130235||Wl==130245||Wl==130268||Wl==130303||Wl==133203||Wl==133242||Wl==133255||Wl==133307||Wl==133317||Wl==133340||Wl==133375||Wl==139347||Wl==139386||Wl==139399||Wl==139451||Wl==139461||Wl==139484||Wl==139519||Wl==141395||Wl==141434||Wl==141447||Wl==141499||Wl==141509||Wl==141532||Wl==141567||Wl==142983||Wl==143045||Wl==143103||Wl==145543||Wl==145605||Wl==145663||Wl==146055||Wl==146117||Wl==146175||Wl==146567||Wl==146629||Wl==146687||Wl==147079||Wl==147141||Wl==147199){Wl=uc(4,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ti(),oc(4,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(4,t,-2)}}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 33:case 35:case 55:case 56:case 60:case 69:case 281:case 283:case 3155:case 3194:case 9915:case 9948:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14995:case 14996:case 14998:case 15e3:case 15001:case 15002:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15016:case 15017:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15036:case 15037:case 15042:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15078:case 15079:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15095:case 15096:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15107:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18055:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18067:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18117:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18175:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:case 23175:case 23237:case 23295:case 37459:case 37498:case 37563:case 37596:case 37971:case 38010:case 38075:case 38108:case 38483:case 38522:case 38587:case 38620:case 40019:case 40058:case 40123:case 40156:case 40531:case 40570:case 42579:case 42618:case 42683:case 42716:case 43091:case 43130:case 43195:case 43228:case 44115:case 44154:case 44219:case 44252:case 44627:case 44666:case 44731:case 44764:case 47187:case 47226:case 47291:case 47324:case 48211:case 48250:case 48315:case 48348:case 49747:case 49786:case 49851:case 49884:case 50259:case 50298:case 50363:case 50396:case 50771:case 50810:case 50875:case 50908:case 52307:case 52346:case 52411:case 52444:case 52819:case 52858:case 52923:case 52956:case 53331:case 53370:case 53435:case 53468:case 53843:case 53882:case 53947:case 53980:case 54867:case 54906:case 54971:case 55004:case 55891:case 55930:case 55995:case 56028:case 56915:case 56954:case 57019:case 57052:case 57427:case 57466:case 57531:case 57564:case 57939:case 57978:case 58043:case 58076:case 61523:case 61562:case 61627:case 61660:case 62035:case 62074:case 62139:case 62172:case 62547:case 62586:case 62651:case 62684:case 64083:case 64122:case 64187:case 64220:case 64595:case 64634:case 64699:case 64732:case 66643:case 66682:case 66747:case 66780:case 68179:case 68218:case 68283:case 68316:case 68691:case 68730:case 68795:case 68828:case 69203:case 69242:case 69307:case 69340:case 69715:case 69754:case 69819:case 69852:case 70227:case 70266:case 70331:case 70364:case 70739:case 70778:case 70843:case 70876:case 72787:case 72826:case 72891:case 72924:case 73299:case 73338:case 73403:case 73436:case 75347:case 75386:case 75451:case 75484:case 78931:case 78970:case 79035:case 79068:case 79443:case 79482:case 79547:case 79580:case 79955:case 79994:case 80059:case 80092:case 80467:case 80506:case 80571:case 80604:case 82515:case 82554:case 82619:case 82652:case 83539:case 83578:case 83643:case 83676:case 85587:case 85626:case 85691:case 85724:case 86099:case 86138:case 86203:case 86236:case 86611:case 86650:case 87123:case 87162:case 87227:case 87260:case 88659:case 88698:case 88763:case 88796:case 89171:case 89210:case 89275:case 89308:case 91731:case 91770:case 91835:case 91868:case 94803:case 94842:case 94907:case 94940:case 95827:case 95866:case 95931:case 95964:case 96339:case 96378:case 96443:case 96476:case 99411:case 99450:case 99515:case 99548:case 99923:case 99962:case 100027:case 100060:case 100947:case 100986:case 101051:case 101084:case 101459:case 101498:case 101563:case 101596:case 104019:case 104058:case 104123:case 104156:case 105555:case 105594:case 105659:case 105692:case 106067:case 106106:case 106171:case 106204:case 107603:case 107642:case 107707:case 107740:case 110675:case 110714:case 110779:case 110812:case 111187:case 111226:case 111291:case 111324:case 112723:case 112762:case 112827:case 112860:case 113747:case 113786:case 113851:case 113884:case 114259:case 114298:case 114363:case 114396:case 115283:case 115322:case 115387:case 115420:case 115795:case 115834:case 115899:case 115932:case 117331:case 117370:case 117435:case 117468:case 117843:case 117882:case 117947:case 117980:case 118355:case 118394:case 118459:case 118492:case 118867:case 118906:case 118971:case 119004:case 119379:case 119418:case 119483:case 119516:case 119891:case 119930:case 119995:case 120028:case 122451:case 122490:case 122555:case 122588:case 122963:case 123002:case 123067:case 123100:case 125523:case 125562:case 125627:case 125660:case 126547:case 126586:case 127059:case 127098:case 127163:case 127196:case 127571:case 127610:case 127675:case 127708:case 130643:case 130682:case 130747:case 130780:case 131155:case 131194:case 131259:case 131292:case 131667:case 131706:case 131771:case 131804:case 132179:case 132218:case 132283:case 132316:case 132691:case 132730:case 132795:case 132828:case 134227:case 134266:case 134331:case 134364:case 134739:case 134778:case 134843:case 134876:case 136275:case 136314:case 136379:case 136412:case 136787:case 136826:case 136891:case 136924:case 137299:case 137338:case 137403:case 137436:case 137811:case 137850:case 137915:case 137948:case 139859:case 139898:case 139963:case 139996:case 143955:case 143969:case 143992:case 143994:case 144059:case 144078:case 144092:case 144121:case 144134:ti();break;case-3:break;default:jr()}}function Br(){ic.startNonterminal(\"AxisStep\",Vl);switch($l){case 74:case 75:case 210:case 216:case 217:ql(231);break;default:Wl=$l}switch(Wl){case 46:case 26698:case 26699:case 26834:case 26840:case 26841:Wr();break;default:Fr()}Il(227),jl(),li(),ic.endNonterminal(\"AxisStep\",Vl)}function jr(){switch($l){case 74:case 75:case 210:case 216:case 217:ql(231);break;default:Wl=$l}switch(Wl){case 46:case 26698:case 26699:case 26834:case 26840:case 26841:Xr();break;default:Ir()}Il(227),ci()}function Fr(){ic.startNonterminal(\"ForwardStep\",Vl);switch($l){case 83:ql(235);break;case 94:case 112:case 113:case 137:case 138:case 234:ql(231);break;default:Wl=$l}switch(Wl){case 26707:case 26718:case 26736:case 26737:case 26761:case 26762:case 26858:qr(),Il(248),jl(),Qr();break;default:Ur()}ic.endNonterminal(\"ForwardStep\",Vl)}function Ir(){switch($l){case 83:ql(235);break;case 94:case 112:case 113:case 137:case 138:case 234:ql(231);break;default:Wl=$l}switch(Wl){case 26707:case 26718:case 26736:case 26737:case 26761:case 26762:case 26858:Rr(),Il(248),Gr();break;default:zr()}}function qr(){ic.startNonterminal(\"ForwardAxis\",Vl);switch($l){case 94:Pl(94),Il(27),Pl(52);break;case 112:Pl(112),Il(27),Pl(52);break;case 83:Pl(83),Il(27),Pl(52);break;case 234:Pl(234),Il(27),Pl(52);break;case 113:Pl(113),Il(27),Pl(52);break;case 138:Pl(138),Il(27),Pl(52);break;default:Pl(137),Il(27),Pl(52)}ic.endNonterminal(\"ForwardAxis\",Vl)}function Rr(){switch($l){case 94:Hl(94),Il(27),Hl(52);break;case 112:Hl(112),Il(27),Hl(52);break;case 83:Hl(83),Il(27),Hl(52);break;case 234:Hl(234),Il(27),Hl(52);break;case 113:Hl(113),Il(27),Hl(52);break;case 138:Hl(138),Il(27),Hl(52);break;default:Hl(137),Il(27),Hl(52)}}function Ur(){ic.startNonterminal(\"AbbrevForwardStep\",Vl),$l==67&&Pl(67),Il(248),jl(),Qr(),ic.endNonterminal(\"AbbrevForwardStep\",Vl)}function zr(){$l==67&&Hl(67),Il(248),Gr()}function Wr(){ic.startNonterminal(\"ReverseStep\",Vl);switch($l){case 46:Jr();break;default:Vr(),Il(248),jl(),Qr()}ic.endNonterminal(\"ReverseStep\",Vl)}function Xr(){switch($l){case 46:Kr();break;default:$r(),Il(248),Gr()}}function Vr(){ic.startNonterminal(\"ReverseAxis\",Vl);switch($l){case 210:Pl(210),Il(27),Pl(52);break;case 74:Pl(74),Il(27),Pl(52);break;case 217:Pl(217),Il(27),Pl(52);break;case 216:Pl(216),Il(27),Pl(52);break;default:Pl(75),Il(27),Pl(52)}ic.endNonterminal(\"ReverseAxis\",Vl)}function $r(){switch($l){case 210:Hl(210),Il(27),Hl(52);break;case 74:Hl(74),Il(27),Hl(52);break;case 217:Hl(217),Il(27),Hl(52);break;case 216:Hl(216),Il(27),Hl(52);break;default:Hl(75),Il(27),Hl(52)}}function Jr(){ic.startNonterminal(\"AbbrevReverseStep\",Vl),Pl(46),ic.endNonterminal(\"AbbrevReverseStep\",Vl)}function Kr(){Hl(46)}function Qr(){ic.startNonterminal(\"NodeTest\",Vl);switch($l){case 83:case 97:case 121:case 122:case 188:case 194:case 220:case 230:case 231:case 249:ql(230);break;default:Wl=$l}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:Vs();break;default:Yr()}ic.endNonterminal(\"NodeTest\",Vl)}function Gr(){switch($l){case 83:case 97:case 121:case 122:case 188:case 194:case 220:case 230:case 231:case 249:ql(230);break;default:Wl=$l}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:$s();break;default:Zr()}}function Yr(){ic.startNonterminal(\"NameTest\",Vl);switch($l){case 5:Pl(5);break;default:$a()}ic.endNonterminal(\"NameTest\",Vl)}function Zr(){switch($l){case 5:Hl(5);break;default:Ja()}}function ei(){ic.startNonterminal(\"PostfixExpr\",Vl),yl();for(;;){Il(234);if($l!=35&&$l!=45&&$l!=69)break;switch($l){case 69:ql(272);break;default:Wl=$l}if(Wl==35397){Wl=uc(5,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{pi(),Wl=-1}catch(a){Wl=-4}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(5,Vl,Wl)}}switch(Wl){case 35:jl(),ai();break;case 45:jl(),ni();break;case-4:jl(),ii();break;case 35909:jl(),oi();break;default:jl(),hi()}}ic.endNonterminal(\"PostfixExpr\",Vl)}function ti(){bl();for(;;){Il(234);if($l!=35&&$l!=45&&$l!=69)break;switch($l){case 69:ql(272);break;default:Wl=$l}if(Wl==35397){Wl=uc(5,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{pi(),oc(5,t,-1),Wl=-6}catch(a){Wl=-4,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(5,t,-4)}}}switch(Wl){case 35:fi();break;case 45:ri();break;case-4:si();break;case 35909:ui();break;case-6:break;default:pi()}}}function ni(){ic.startNonterminal(\"ObjectLookup\",Vl),Pl(45),Il(250);switch($l){case 11:Pl(11);break;case 35:jl(),Ci();break;case 31:jl(),Si();break;case 32:jl(),Li();break;default:jl(),Ga()}ic.endNonterminal(\"ObjectLookup\",Vl)}function ri(){Hl(45),Il(250);switch($l){case 11:Hl(11);break;case 35:ki();break;case 31:xi();break;case 32:Ai();break;default:Ya()}}function ii(){ic.startNonterminal(\"ArrayLookup\",Vl),Pl(69),Il(31),Pl(69),Il(266),jl(),G(),Pl(70),Il(32),Pl(70),ic.endNonterminal(\"ArrayLookup\",Vl)}function si(){Hl(69),Il(31),Hl(69),Il(266),Y(),Hl(70),Il(32),Hl(70)}function oi(){ic.startNonterminal(\"ArrayUnboxing\",Vl),Pl(69),Il(32),Pl(70),ic.endNonterminal(\"ArrayUnboxing\",Vl)}function ui(){Hl(69),Il(32),Hl(70)}function ai(){ic.startNonterminal(\"ArgumentList\",Vl),Pl(35),Il(279);if($l!=38){jl(),Bi();for(;;){Il(105);if($l!=42)break;Pl(42),Il(271),jl(),Bi()}}Pl(38),ic.endNonterminal(\"ArgumentList\",Vl)}function fi(){Hl(35),Il(279);if($l!=38){ji();for(;;){Il(105);if($l!=42)break;Hl(42),Il(271),ji()}}Hl(38)}function li(){ic.startNonterminal(\"PredicateList\",Vl);for(;;){Il(227);if($l!=69)break;jl(),hi()}ic.endNonterminal(\"PredicateList\",Vl)}function ci(){for(;;){Il(227);if($l!=69)break;pi()}}function hi(){ic.startNonterminal(\"Predicate\",Vl),Pl(69),Il(266),jl(),G(),Pl(70),ic.endNonterminal(\"Predicate\",Vl)}function pi(){Hl(69),Il(266),Y(),Hl(70)}function di(){ic.startNonterminal(\"Literal\",Vl);switch($l){case 11:Pl(11);break;case 135:case 255:mi();break;case 197:yi();break;default:wi()}ic.endNonterminal(\"Literal\",Vl)}function vi(){switch($l){case 11:Hl(11);break;case 135:case 255:gi();break;case 197:bi();break;default:Ei()}}function mi(){ic.startNonterminal(\"BooleanLiteral\",Vl);switch($l){case 255:Pl(255);break;default:Pl(135)}ic.endNonterminal(\"BooleanLiteral\",Vl)}function gi(){switch($l){case 255:Hl(255);break;default:Hl(135)}}function yi(){ic.startNonterminal(\"NullLiteral\",Vl),Pl(197),ic.endNonterminal(\"NullLiteral\",Vl)}function bi(){Hl(197)}function wi(){ic.startNonterminal(\"NumericLiteral\",Vl);switch($l){case 8:Pl(8);break;case 9:Pl(9);break;default:Pl(10)}ic.endNonterminal(\"NumericLiteral\",Vl)}function Ei(){switch($l){case 8:Hl(8);break;case 9:Hl(9);break;default:Hl(10)}}function Si(){ic.startNonterminal(\"VarRef\",Vl),Pl(31),Il(245),jl(),Ti(),ic.endNonterminal(\"VarRef\",Vl)}function xi(){Hl(31),Il(245),Ni()}function Ti(){ic.startNonterminal(\"VarName\",Vl),$a(),ic.endNonterminal(\"VarName\",Vl)}function Ni(){Ja()}function Ci(){ic.startNonterminal(\"ParenthesizedExpr\",Vl),Pl(35),Il(269),$l!=38&&(jl(),G()),Pl(38),ic.endNonterminal(\"ParenthesizedExpr\",Vl)}function ki(){Hl(35),Il(269),$l!=38&&Y(),Hl(38)}function Li(){ic.startNonterminal(\"ContextItemExpr\",Vl),Pl(32),ic.endNonterminal(\"ContextItemExpr\",Vl)}function Ai(){Hl(32)}function Oi(){ic.startNonterminal(\"OrderedExpr\",Vl),Pl(206),Il(90),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"OrderedExpr\",Vl)}function Mi(){Hl(206),Il(90),Hl(281),Il(266),Y(),Hl(287)}function _i(){ic.startNonterminal(\"UnorderedExpr\",Vl),Pl(262),Il(90),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"UnorderedExpr\",Vl)}function Di(){Hl(262),Il(90),Hl(281),Il(266),Y(),Hl(287)}function Pi(){ic.startNonterminal(\"FunctionCall\",Vl),Ka(),Il(22),jl(),ai(),ic.endNonterminal(\"FunctionCall\",Vl)}function Hi(){Qa(),Il(22),fi()}function Bi(){ic.startNonterminal(\"Argument\",Vl);switch($l){case 65:Fi();break;default:Wf()}ic.endNonterminal(\"Argument\",Vl)}function ji(){switch($l){case 65:Ii();break;default:Xf()}}function Fi(){ic.startNonterminal(\"ArgumentPlaceholder\",Vl),Pl(65),ic.endNonterminal(\"ArgumentPlaceholder\",Vl)}function Ii(){Hl(65)}function qi(){ic.startNonterminal(\"Constructor\",Vl);switch($l){case 55:case 56:case 60:Ui();break;default:os()}ic.endNonterminal(\"Constructor\",Vl)}function Ri(){switch($l){case 55:case 56:case 60:zi();break;default:us()}}function Ui(){ic.startNonterminal(\"DirectConstructor\",Vl);switch($l){case 55:Wi();break;case 56:ns();break;default:is()}ic.endNonterminal(\"DirectConstructor\",Vl)}function zi(){switch($l){case 55:Xi();break;case 56:rs();break;default:ss()}}function Wi(){ic.startNonterminal(\"DirElemConstructor\",Vl),Pl(55),Rl(4),Pl(20),Vi();switch($l){case 49:Pl(49);break;default:Pl(62);for(;;){Rl(196);if($l==57)break;es()}Pl(57),Rl(4),Pl(20),Rl(12),$l==21&&Pl(21),Rl(8),Pl(62)}ic.endNonterminal(\"DirElemConstructor\",Vl)}function Xi(){Hl(55),Rl(4),Hl(20),$i();switch($l){case 49:Hl(49);break;default:Hl(62);for(;;){Rl(196);if($l==57)break;ts()}Hl(57),Rl(4),Hl(20),Rl(12),$l==21&&Hl(21),Rl(8),Hl(62)}}function Vi(){ic.startNonterminal(\"DirAttributeList\",Vl);for(;;){Rl(19);if($l!=21)break;Pl(21),Rl(94),$l==20&&(Pl(20),Rl(11),$l==21&&Pl(21),Rl(7),Pl(61),Rl(18),$l==21&&Pl(21),Ji())}ic.endNonterminal(\"DirAttributeList\",Vl)}function $i(){for(;;){Rl(19);if($l!=21)break;Hl(21),Rl(94),$l==20&&(Hl(20),Rl(11),$l==21&&Hl(21),Rl(7),Hl(61),Rl(18),$l==21&&Hl(21),Ki())}}function Ji(){ic.startNonterminal(\"DirAttributeValue\",Vl),Rl(14);switch($l){case 28:Pl(28);for(;;){Rl(185);if($l==28)break;switch($l){case 13:Pl(13);break;default:Qi()}}Pl(28);break;default:Pl(34);for(;;){Rl(186);if($l==34)break;switch($l){case 14:Pl(14);break;default:Yi()}}Pl(34)}ic.endNonterminal(\"DirAttributeValue\",Vl)}function Ki(){Rl(14);switch($l){case 28:Hl(28);for(;;){Rl(185);if($l==28)break;switch($l){case 13:Hl(13);break;default:Gi()}}Hl(28);break;default:Hl(34);for(;;){Rl(186);if($l==34)break;switch($l){case 14:Hl(14);break;default:Zi()}}Hl(34)}}function Qi(){ic.startNonterminal(\"QuotAttrValueContent\",Vl);switch($l){case 16:Pl(16);break;default:il()}ic.endNonterminal(\"QuotAttrValueContent\",Vl)}function Gi(){switch($l){case 16:Hl(16);break;default:sl()}}function Yi(){ic.startNonterminal(\"AposAttrValueContent\",Vl);switch($l){case 17:Pl(17);break;default:il()}ic.endNonterminal(\"AposAttrValueContent\",Vl)}function Zi(){switch($l){case 17:Hl(17);break;default:sl()}}function es(){ic.startNonterminal(\"DirElemContent\",Vl);switch($l){case 55:case 56:case 60:Ui();break;case 4:Pl(4);break;case 15:Pl(15);break;default:il()}ic.endNonterminal(\"DirElemContent\",Vl)}function ts(){switch($l){case 55:case 56:case 60:zi();break;case 4:Hl(4);break;case 15:Hl(15);break;default:sl()}}function ns(){ic.startNonterminal(\"DirCommentConstructor\",Vl),Pl(56),Rl(1),Pl(2),Rl(6),Pl(44),ic.endNonterminal(\"DirCommentConstructor\",Vl)}function rs(){Hl(56),Rl(1),Hl(2),Rl(6),Hl(44)}function is(){ic.startNonterminal(\"DirPIConstructor\",Vl),Pl(60),Rl(3),Pl(18),Rl(13),$l==21&&(Pl(21),Rl(2),Pl(3)),Rl(9),Pl(66),ic.endNonterminal(\"DirPIConstructor\",Vl)}function ss(){Hl(60),Rl(3),Hl(18),Rl(13),$l==21&&(Hl(21),Rl(2),Hl(3)),Rl(9),Hl(66)}function os(){ic.startNonterminal(\"ComputedConstructor\",Vl);switch($l){case 120:al();break;case 122:as();break;case 83:ll();break;case 187:ls();break;case 249:ml();break;case 97:dl();break;default:hl()}ic.endNonterminal(\"ComputedConstructor\",Vl)}function us(){switch($l){case 120:fl();break;case 122:fs();break;case 83:cl();break;case 187:cs();break;case 249:gl();break;case 97:vl();break;default:pl()}}function as(){ic.startNonterminal(\"CompElemConstructor\",Vl),Pl(122),Il(249);switch($l){case 281:Pl(281),Il(266),jl(),G(),Pl(287);break;default:jl(),$a()}Il(90),Pl(281),Il(280),$l!=287&&(jl(),ol()),Pl(287),ic.endNonterminal(\"CompElemConstructor\",Vl)}function fs(){Hl(122),Il(249);switch($l){case 281:Hl(281),Il(266),Y(),Hl(287);break;default:Ja()}Il(90),Hl(281),Il(280),$l!=287&&ul(),Hl(287)}function ls(){ic.startNonterminal(\"CompNamespaceConstructor\",Vl),Pl(187),Il(241);switch($l){case 281:Pl(281),Il(266),jl(),ds(),Pl(287);break;default:jl(),hs()}Il(90),Pl(281),Il(266),jl(),ms(),Pl(287),ic.endNonterminal(\"CompNamespaceConstructor\",Vl)}function cs(){Hl(187),Il(241);switch($l){case 281:Hl(281),Il(266),vs(),Hl(287);break;default:ps()}Il(90),Hl(281),Il(266),gs(),Hl(287)}function hs(){ic.startNonterminal(\"Prefix\",Vl),Ga(),ic.endNonterminal(\"Prefix\",Vl)}function ps(){Ya()}function ds(){ic.startNonterminal(\"PrefixExpr\",Vl),G(),ic.endNonterminal(\"PrefixExpr\",Vl)}function vs(){Y()}function ms(){ic.startNonterminal(\"URIExpr\",Vl),G(),ic.endNonterminal(\"URIExpr\",Vl)}function gs(){Y()}function ys(){ic.startNonterminal(\"FunctionItemExpr\",Vl);switch($l){case 147:ql(95);break;default:Wl=$l}switch(Wl){case 33:case 18067:Ss();break;default:ws()}ic.endNonterminal(\"FunctionItemExpr\",Vl)}function bs(){switch($l){case 147:ql(95);break;default:Wl=$l}switch(Wl){case 33:case 18067:xs();break;default:Es()}}function ws(){ic.startNonterminal(\"NamedFunctionRef\",Vl),$a(),Il(20),Pl(29),Il(16),Pl(8),ic.endNonterminal(\"NamedFunctionRef\",Vl)}function Es(){Ja(),Il(20),Hl(29),Il(16),Hl(8)}function Ss(){ic.startNonterminal(\"InlineFunctionExpr\",Vl);for(;;){Il(101);if($l!=33)break;jl(),B()}Pl(147),Il(22),Pl(35),Il(98),$l==31&&(jl(),U()),Pl(38),Il(115),$l==80&&(Pl(80),Il(253),jl(),Ls()),Il(90),jl(),V(),ic.endNonterminal(\"InlineFunctionExpr\",Vl)}function xs(){for(;;){Il(101);if($l!=33)break;j()}Hl(147),Il(22),Hl(35),Il(98),$l==31&&z(),Hl(38),Il(115),$l==80&&(Hl(80),Il(253),As()),Il(90),$()}function Ts(){ic.startNonterminal(\"SingleType\",Vl),ko(),Il(225),$l==65&&Pl(65),ic.endNonterminal(\"SingleType\",Vl)}function Ns(){Lo(),Il(225),$l==65&&Hl(65)}function Cs(){ic.startNonterminal(\"TypeDeclaration\",Vl),Pl(80),Il(253),jl(),Ls(),ic.endNonterminal(\"TypeDeclaration\",Vl)}function ks(){Hl(80),Il(253),As()}function Ls(){ic.startNonterminal(\"SequenceType\",Vl);switch($l){case 35:ql(258);break;case 125:ql(232);break;default:Wl=$l}switch(Wl){case 18045:case 19491:$l==125&&Pl(125),Il(22),Pl(35),Il(23),Pl(38);break;default:_s(),Il(228);switch($l){case 40:case 41:case 65:jl(),Os();break;default:}}ic.endNonterminal(\"SequenceType\",Vl)}function As(){switch($l){case 35:ql(258);break;case 125:ql(232);break;default:Wl=$l}switch(Wl){case 18045:case 19491:$l==125&&Hl(125),Il(22),Hl(35),Il(23),Hl(38);break;default:Ds(),Il(228);switch($l){case 40:case 41:case 65:Ms();break;default:}}}function Os(){ic.startNonterminal(\"OccurrenceIndicator\",Vl);switch($l){case 65:Pl(65);break;case 40:Pl(40);break;default:Pl(41)}ic.endNonterminal(\"OccurrenceIndicator\",Vl)}function Ms(){switch($l){case 65:Hl(65);break;case 40:Hl(40);break;default:Hl(41)}}function _s(){ic.startNonterminal(\"ItemType\",Vl);switch($l){case 79:case 83:case 97:case 121:case 122:case 147:case 167:case 169:case 188:case 194:case 198:case 220:case 230:case 231:case 247:case 249:ql(232);break;default:Wl=$l}if(Wl==12879||Wl==12969||Wl==12998||Wl==13047||Wl==13903||Wl==13993||Wl==14022||Wl==14071||Wl==19535||Wl==19625||Wl==19654||Wl==19703||Wl==20047||Wl==20137||Wl==20166||Wl==20215||Wl==20559||Wl==20649||Wl==20678||Wl==20727||Wl==21071||Wl==21161||Wl==21190||Wl==21239||Wl==21583||Wl==21673||Wl==21702||Wl==21751||Wl==22095||Wl==22185||Wl==22214||Wl==22263||Wl==25679||Wl==25769||Wl==25798||Wl==25847||Wl==27215||Wl==27305||Wl==27334||Wl==27383||Wl==27727||Wl==27817||Wl==27846||Wl==27895||Wl==28239||Wl==28329||Wl==28358||Wl==28407||Wl==29775||Wl==29865||Wl==29894||Wl==29943||Wl==30287||Wl==30377||Wl==30406||Wl==30455||Wl==31311||Wl==31401||Wl==31430||Wl==31479||Wl==31823||Wl==31913||Wl==31942||Wl==31991||Wl==32335||Wl==32425||Wl==32454||Wl==32503||Wl==32847||Wl==32937||Wl==32966||Wl==33015||Wl==33359||Wl==33449||Wl==33478||Wl==33527||Wl==35919||Wl==36009||Wl==36038||Wl==36087||Wl==36431||Wl==36521||Wl==36550||Wl==36599||Wl==37455||Wl==37545||Wl==37574||Wl==37623||Wl==38991||Wl==39081||Wl==39110||Wl==39159||Wl==41039||Wl==41129||Wl==41158||Wl==41207||Wl==41551||Wl==41641||Wl==41670||Wl==41719||Wl==42063||Wl==42153||Wl==42182||Wl==42231||Wl==43599||Wl==43689||Wl==43718||Wl==43767||Wl==45647||Wl==45737||Wl==45766||Wl==45815||Wl==48719||Wl==48809||Wl==48838||Wl==48887||Wl==51279||Wl==51369||Wl==51398||Wl==51447||Wl==54351||Wl==54441||Wl==54470||Wl==54519||Wl==56399||Wl==56489||Wl==56518||Wl==56567||Wl==58447||Wl==58537||Wl==58566||Wl==58615||Wl==61007||Wl==61097||Wl==61126||Wl==61175||Wl==63055||Wl==63145||Wl==63174||Wl==63223||Wl==63567||Wl==63657||Wl==63686||Wl==63735||Wl==65103||Wl==65193||Wl==65222||Wl==65271||Wl==66127||Wl==66217||Wl==66246||Wl==66295||Wl==67663||Wl==67753||Wl==67782||Wl==67831||Wl==68687||Wl==68777||Wl==68806||Wl==68855||Wl==71247||Wl==71337||Wl==71366||Wl==71415||Wl==75855||Wl==75945||Wl==75974||Wl==76023||Wl==76879||Wl==76969||Wl==76998||Wl==77047||Wl==77903||Wl==77993||Wl==78022||Wl==78071||Wl==78415||Wl==78505||Wl==78534||Wl==78583||Wl==79951||Wl==80041||Wl==80070||Wl==80119||Wl==83023||Wl==83113||Wl==83142||Wl==83191||Wl==84047||Wl==84137||Wl==84166||Wl==84215||Wl==84559||Wl==84649||Wl==84678||Wl==84727||Wl==85071||Wl==85161||Wl==85190||Wl==85239||Wl==89679||Wl==89769||Wl==89798||Wl==89847||Wl==90703||Wl==90793||Wl==90822||Wl==90871||Wl==92751||Wl==92841||Wl==92870||Wl==92919||Wl==93775||Wl==93865||Wl==93894||Wl==93943||Wl==94287||Wl==94377||Wl==94406||Wl==94455||Wl==96847||Wl==96937||Wl==96966||Wl==97015||Wl==103503||Wl==103593||Wl==103622||Wl==103671||Wl==104527||Wl==104617||Wl==104646||Wl==104695||Wl==105039||Wl==105129||Wl==105158||Wl==105207||Wl==107087||Wl==107177||Wl==107206||Wl==107255||Wl==114767||Wl==114857||Wl==114886||Wl==114935||Wl==116815||Wl==116905||Wl==116934||Wl==116983||Wl==118863||Wl==118953||Wl==118982||Wl==119031||Wl==121423||Wl==121513||Wl==121542||Wl==121591||Wl==123471||Wl==123561||Wl==123590||Wl==123639||Wl==123983||Wl==124073||Wl==124102||Wl==124151||Wl==129103||Wl==129193||Wl==129222||Wl==129271||Wl==129615||Wl==129705||Wl==129734||Wl==129783||Wl==133199||Wl==133289||Wl==133318||Wl==133367||Wl==139343||Wl==139433||Wl==139462||Wl==139511||Wl==141391||Wl==141481||Wl==141510||Wl==141559||Wl==142927||Wl==143017||Wl==143046||Wl==143095||Wl==143951||Wl==144041||Wl==144070||Wl==144119||Wl==145487||Wl==145577||Wl==145606||Wl==145655||Wl==145999||Wl==146089||Wl==146118||Wl==146167||Wl==146511||Wl==146601||Wl==146630||Wl==146679||Wl==147023||Wl==147113||Wl==147142||Wl==147191){Wl=uc(6,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xs(),Wl=-4}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hs(),Wl=-6}catch(f){Wl=-7}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(6,Vl,Wl)}}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:Vs();break;case 18087:Pl(167),Il(22),Pl(35),Il(23),Pl(38);break;case 33:case 18067:Mo();break;case 35:jo();break;case-6:case 17999:case 18089:case 18118:Ps();break;case-7:case 18167:Bs();break;default:Ws()}ic.endNonterminal(\"ItemType\",Vl)}function Ds(){switch($l){case 79:case 83:case 97:case 121:case 122:case 147:case 167:case 169:case 188:case 194:case 198:case 220:case 230:case 231:case 247:case 249:ql(232);break;default:Wl=$l}if(Wl==12879||Wl==12969||Wl==12998||Wl==13047||Wl==13903||Wl==13993||Wl==14022||Wl==14071||Wl==19535||Wl==19625||Wl==19654||Wl==19703||Wl==20047||Wl==20137||Wl==20166||Wl==20215||Wl==20559||Wl==20649||Wl==20678||Wl==20727||Wl==21071||Wl==21161||Wl==21190||Wl==21239||Wl==21583||Wl==21673||Wl==21702||Wl==21751||Wl==22095||Wl==22185||Wl==22214||Wl==22263||Wl==25679||Wl==25769||Wl==25798||Wl==25847||Wl==27215||Wl==27305||Wl==27334||Wl==27383||Wl==27727||Wl==27817||Wl==27846||Wl==27895||Wl==28239||Wl==28329||Wl==28358||Wl==28407||Wl==29775||Wl==29865||Wl==29894||Wl==29943||Wl==30287||Wl==30377||Wl==30406||Wl==30455||Wl==31311||Wl==31401||Wl==31430||Wl==31479||Wl==31823||Wl==31913||Wl==31942||Wl==31991||Wl==32335||Wl==32425||Wl==32454||Wl==32503||Wl==32847||Wl==32937||Wl==32966||Wl==33015||Wl==33359||Wl==33449||Wl==33478||Wl==33527||Wl==35919||Wl==36009||Wl==36038||Wl==36087||Wl==36431||Wl==36521||Wl==36550||Wl==36599||Wl==37455||Wl==37545||Wl==37574||Wl==37623||Wl==38991||Wl==39081||Wl==39110||Wl==39159||Wl==41039||Wl==41129||Wl==41158||Wl==41207||Wl==41551||Wl==41641||Wl==41670||Wl==41719||Wl==42063||Wl==42153||Wl==42182||Wl==42231||Wl==43599||Wl==43689||Wl==43718||Wl==43767||Wl==45647||Wl==45737||Wl==45766||Wl==45815||Wl==48719||Wl==48809||Wl==48838||Wl==48887||Wl==51279||Wl==51369||Wl==51398||Wl==51447||Wl==54351||Wl==54441||Wl==54470||Wl==54519||Wl==56399||Wl==56489||Wl==56518||Wl==56567||Wl==58447||Wl==58537||Wl==58566||Wl==58615||Wl==61007||Wl==61097||Wl==61126||Wl==61175||Wl==63055||Wl==63145||Wl==63174||Wl==63223||Wl==63567||Wl==63657||Wl==63686||Wl==63735||Wl==65103||Wl==65193||Wl==65222||Wl==65271||Wl==66127||Wl==66217||Wl==66246||Wl==66295||Wl==67663||Wl==67753||Wl==67782||Wl==67831||Wl==68687||Wl==68777||Wl==68806||Wl==68855||Wl==71247||Wl==71337||Wl==71366||Wl==71415||Wl==75855||Wl==75945||Wl==75974||Wl==76023||Wl==76879||Wl==76969||Wl==76998||Wl==77047||Wl==77903||Wl==77993||Wl==78022||Wl==78071||Wl==78415||Wl==78505||Wl==78534||Wl==78583||Wl==79951||Wl==80041||Wl==80070||Wl==80119||Wl==83023||Wl==83113||Wl==83142||Wl==83191||Wl==84047||Wl==84137||Wl==84166||Wl==84215||Wl==84559||Wl==84649||Wl==84678||Wl==84727||Wl==85071||Wl==85161||Wl==85190||Wl==85239||Wl==89679||Wl==89769||Wl==89798||Wl==89847||Wl==90703||Wl==90793||Wl==90822||Wl==90871||Wl==92751||Wl==92841||Wl==92870||Wl==92919||Wl==93775||Wl==93865||Wl==93894||Wl==93943||Wl==94287||Wl==94377||Wl==94406||Wl==94455||Wl==96847||Wl==96937||Wl==96966||Wl==97015||Wl==103503||Wl==103593||Wl==103622||Wl==103671||Wl==104527||Wl==104617||Wl==104646||Wl==104695||Wl==105039||Wl==105129||Wl==105158||Wl==105207||Wl==107087||Wl==107177||Wl==107206||Wl==107255||Wl==114767||Wl==114857||Wl==114886||Wl==114935||Wl==116815||Wl==116905||Wl==116934||Wl==116983||Wl==118863||Wl==118953||Wl==118982||Wl==119031||Wl==121423||Wl==121513||Wl==121542||Wl==121591||Wl==123471||Wl==123561||Wl==123590||Wl==123639||Wl==123983||Wl==124073||Wl==124102||Wl==124151||Wl==129103||Wl==129193||Wl==129222||Wl==129271||Wl==129615||Wl==129705||Wl==129734||Wl==129783||Wl==133199||Wl==133289||Wl==133318||Wl==133367||Wl==139343||Wl==139433||Wl==139462||Wl==139511||Wl==141391||Wl==141481||Wl==141510||Wl==141559||Wl==142927||Wl==143017||Wl==143046||Wl==143095||Wl==143951||Wl==144041||Wl==144070||Wl==144119||Wl==145487||Wl==145577||Wl==145606||Wl==145655||Wl==145999||Wl==146089||Wl==146118||Wl==146167||Wl==146511||Wl==146601||Wl==146630||Wl==146679||Wl==147023||Wl==147113||Wl==147142||Wl==147191){Wl=uc(6,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xs(),oc(6,t,-4),Wl=-8}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hs(),oc(6,t,-6),Wl=-8}catch(f){Wl=-7,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(6,t,-7)}}}}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:$s();break;case 18087:Hl(167),Il(22),Hl(35),Il(23),Hl(38);break;case 33:case 18067:_o();break;case 35:Fo();break;case-6:case 17999:case 18089:case 18118:Hs();break;case-7:case 18167:js();break;case-8:break;default:Xs()}}function Ps(){ic.startNonterminal(\"JSONTest\",Vl);switch($l){case 169:Fs();break;case 198:qs();break;default:Us()}ic.endNonterminal(\"JSONTest\",Vl)}function Hs(){switch($l){case 169:Is();break;case 198:Rs();break;default:zs()}}function Bs(){ic.startNonterminal(\"StructuredItemTest\",Vl),Pl(247),Il(232),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"StructuredItemTest\",Vl)}function js(){Hl(247),Il(232),$l==35&&(Hl(35),Il(23),Hl(38))}function Fs(){ic.startNonterminal(\"JSONItemTest\",Vl),Pl(169),Il(232),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"JSONItemTest\",Vl)}function Is(){Hl(169),Il(232),$l==35&&(Hl(35),Il(23),Hl(38))}function qs(){ic.startNonterminal(\"JSONObjectTest\",Vl),Pl(198),Il(232),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"JSONObjectTest\",Vl)}function Rs(){Hl(198),Il(232),$l==35&&(Hl(35),Il(23),Hl(38))}function Us(){ic.startNonterminal(\"JSONArrayTest\",Vl),Pl(79),Il(232),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"JSONArrayTest\",Vl)}function zs(){Hl(79),Il(232),$l==35&&(Hl(35),Il(23),Hl(38))}function Ws(){ic.startNonterminal(\"AtomicOrUnionType\",Vl),$a(),ic.endNonterminal(\"AtomicOrUnionType\",Vl)}function Xs(){Ja()}function Vs(){ic.startNonterminal(\"KindTest\",Vl);switch($l){case 121:Qs();break;case 122:vo();break;case 83:oo();break;case 231:bo();break;case 230:lo();break;case 220:io();break;case 97:eo();break;case 249:Ys();break;case 188:no();break;default:Js()}ic.endNonterminal(\"KindTest\",Vl)}function $s(){switch($l){case 121:Gs();break;case 122:mo();break;case 83:uo();break;case 231:wo();break;case 230:co();break;case 220:so();break;case 97:to();break;case 249:Zs();break;case 188:ro();break;default:Ks()}}function Js(){ic.startNonterminal(\"AnyKindTest\",Vl),Pl(194),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"AnyKindTest\",Vl)}function Ks(){Hl(194),Il(22),Hl(35),Il(23),Hl(38)}function Qs(){ic.startNonterminal(\"DocumentTest\",Vl),Pl(121),Il(22),Pl(35),Il(154);if($l!=38)switch($l){case 122:jl(),vo();break;default:jl(),bo()}Il(23),Pl(38),ic.endNonterminal(\"DocumentTest\",Vl)}function Gs(){Hl(121),Il(22),Hl(35),Il(154);if($l!=38)switch($l){case 122:mo();break;default:wo()}Il(23),Hl(38)}function Ys(){ic.startNonterminal(\"TextTest\",Vl),Pl(249),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"TextTest\",Vl)}function Zs(){Hl(249),Il(22),Hl(35),Il(23),Hl(38)}function eo(){ic.startNonterminal(\"CommentTest\",Vl),Pl(97),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"CommentTest\",Vl)}function to(){Hl(97),Il(22),Hl(35),Il(23),Hl(38)}function no(){ic.startNonterminal(\"NamespaceNodeTest\",Vl),Pl(188),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"NamespaceNodeTest\",Vl)}function ro(){Hl(188),Il(22),Hl(35),Il(23),Hl(38)}function io(){ic.startNonterminal(\"PITest\",Vl),Pl(220),Il(22),Pl(35),Il(243);if($l!=38)switch($l){case 11:Pl(11);break;default:jl(),Ga()}Il(23),Pl(38),ic.endNonterminal(\"PITest\",Vl)}function so(){Hl(220),Il(22),Hl(35),Il(243);if($l!=38)switch($l){case 11:Hl(11);break;default:Ya()}Il(23),Hl(38)}function oo(){ic.startNonterminal(\"AttributeTest\",Vl),Pl(83),Il(22),Pl(35),Il(254),$l!=38&&(jl(),ao(),Il(105),$l==42&&(Pl(42),Il(245),jl(),Ao())),Il(23),Pl(38),ic.endNonterminal(\"AttributeTest\",Vl)}function uo(){Hl(83),Il(22),Hl(35),Il(254),$l!=38&&(fo(),Il(105),$l==42&&(Hl(42),Il(245),Oo())),Il(23),Hl(38)}function ao(){ic.startNonterminal(\"AttribNameOrWildcard\",Vl);switch($l){case 39:Pl(39);break;default:xo()}ic.endNonterminal(\"AttribNameOrWildcard\",Vl)}function fo(){switch($l){case 39:Hl(39);break;default:To()}}function lo(){ic.startNonterminal(\"SchemaAttributeTest\",Vl),Pl(230),Il(22),Pl(35),Il(245),jl(),ho(),Il(23),Pl(38),ic.endNonterminal(\"SchemaAttributeTest\",Vl)}function co(){Hl(230),Il(22),Hl(35),Il(245),po(),Il(23),Hl(38)}function ho(){ic.startNonterminal(\"AttributeDeclaration\",Vl),xo(),ic.endNonterminal(\"AttributeDeclaration\",Vl)}function po(){To()}function vo(){ic.startNonterminal(\"ElementTest\",Vl),Pl(122),Il(22),Pl(35),Il(254),$l!=38&&(jl(),go(),Il(105),$l==42&&(Pl(42),Il(245),jl(),Ao(),Il(106),$l==65&&Pl(65))),Il(23),Pl(38),ic.endNonterminal(\"ElementTest\",Vl)}function mo(){Hl(122),Il(22),Hl(35),Il(254),$l!=38&&(yo(),Il(105),$l==42&&(Hl(42),Il(245),Oo(),Il(106),$l==65&&Hl(65))),Il(23),Hl(38)}function go(){ic.startNonterminal(\"ElementNameOrWildcard\",Vl);switch($l){case 39:Pl(39);break;default:No()}ic.endNonterminal(\"ElementNameOrWildcard\",Vl)}function yo(){switch($l){case 39:Hl(39);break;default:Co()}}function bo(){ic.startNonterminal(\"SchemaElementTest\",Vl),Pl(231),Il(22),Pl(35),Il(245),jl(),Eo(),Il(23),Pl(38),ic.endNonterminal(\"SchemaElementTest\",Vl)}function wo(){Hl(231),Il(22),Hl(35),Il(245),So(),Il(23),Hl(38)}function Eo(){ic.startNonterminal(\"ElementDeclaration\",Vl),No(),ic.endNonterminal(\"ElementDeclaration\",Vl)}function So(){Co()}function xo(){ic.startNonterminal(\"AttributeName\",Vl),$a(),ic.endNonterminal(\"AttributeName\",Vl)}function To(){Ja()}function No(){ic.startNonterminal(\"ElementName\",Vl),$a(),ic.endNonterminal(\"ElementName\",Vl)}function Co(){Ja()}function ko(){ic.startNonterminal(\"SimpleTypeName\",Vl),Ao(),ic.endNonterminal(\"SimpleTypeName\",Vl)}function Lo(){Oo()}function Ao(){ic.startNonterminal(\"TypeName\",Vl),$a(),ic.endNonterminal(\"TypeName\",Vl)}function Oo(){Ja()}function Mo(){ic.startNonterminal(\"FunctionTest\",Vl);for(;;){Il(101);if($l!=33)break;jl(),B()}switch($l){case 147:ql(22);break;default:Wl=$l}Wl=uc(7,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Po(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(7,Vl,Wl)}switch(Wl){case-1:jl(),Do();break;default:jl(),Ho()}ic.endNonterminal(\"FunctionTest\",Vl)}function _o(){for(;;){Il(101);if($l!=33)break;j()}switch($l){case 147:ql(22);break;default:Wl=$l}Wl=uc(7,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Po(),oc(7,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(7,t,-2)}}switch(Wl){case-1:Po();break;case-3:break;default:Bo()}}function Do(){ic.startNonterminal(\"AnyFunctionTest\",Vl),Pl(147),Il(22),Pl(35),Il(24),Pl(39),Il(23),Pl(38),ic.endNonterminal(\"AnyFunctionTest\",Vl)}function Po(){Hl(147),Il(22),Hl(35),Il(24),Hl(39),Il(23),Hl(38)}function Ho(){ic.startNonterminal(\"TypedFunctionTest\",Vl),Pl(147),Il(22),Pl(35),Il(258);if($l!=38){jl(),Ls();for(;;){Il(105);if($l!=42)break;Pl(42),Il(253),jl(),Ls()}}Pl(38),Il(33),Pl(80),Il(253),jl(),Ls(),ic.endNonterminal(\"TypedFunctionTest\",Vl)}function Bo(){Hl(147),Il(22),Hl(35),Il(258);if($l!=38){As();for(;;){Il(105);if($l!=42)break;Hl(42),Il(253),As()}}Hl(38),Il(33),Hl(80),Il(253),As()}function jo(){ic.startNonterminal(\"ParenthesizedItemType\",Vl),Pl(35),Il(253),jl(),_s(),Il(23),Pl(38),ic.endNonterminal(\"ParenthesizedItemType\",Vl)}function Fo(){Hl(35),Il(253),Ds(),Il(23),Hl(38)}function Io(){ic.startNonterminal(\"RevalidationDecl\",Vl),Pl(109),Il(75),Pl(226),Il(162);switch($l){case 245:Pl(245);break;case 174:Pl(174);break;default:Pl(238)}ic.endNonterminal(\"RevalidationDecl\",Vl)}function qo(){ic.startNonterminal(\"InsertExprTargetChoice\",Vl);switch($l){case 71:Pl(71);break;case 85:Pl(85);break;default:if($l==80){Pl(80),Il(123);switch($l){case 136:Pl(136);break;default:Pl(173)}}Il(57),Pl(165)}ic.endNonterminal(\"InsertExprTargetChoice\",Vl)}function Ro(){switch($l){case 71:Hl(71);break;case 85:Hl(85);break;default:if($l==80){Hl(80),Il(123);switch($l){case 136:Hl(136);break;default:Hl(173)}}Il(57),Hl(165)}}function Uo(){ic.startNonterminal(\"InsertExpr\",Vl),Pl(161),Il(133);switch($l){case 194:Pl(194);break;default:Pl(195)}Il(266),jl(),Qo(),jl(),qo(),Il(266),jl(),Yo(),ic.endNonterminal(\"InsertExpr\",Vl)}function zo(){Hl(161),Il(133);switch($l){case 194:Hl(194);break;default:Hl(195)}Il(266),Go(),Ro(),Il(266),Zo()}function Wo(){ic.startNonterminal(\"DeleteExpr\",Vl),Pl(111),Il(133);switch($l){case 194:Pl(194);break;default:Pl(195)}Il(266),jl(),Yo(),ic.endNonterminal(\"DeleteExpr\",Vl)}function Xo(){Hl(111),Il(133);switch($l){case 194:Hl(194);break;default:Hl(195)}Il(266),Zo()}function Vo(){ic.startNonterminal(\"ReplaceExpr\",Vl),Pl(223),Il(134),$l==267&&(Pl(267),Il(67),Pl(200)),Il(65),Pl(194),Il(266),jl(),Yo(),Pl(276),Il(266),jl(),Wf(),ic.endNonterminal(\"ReplaceExpr\",Vl)}function $o(){Hl(223),Il(134),$l==267&&(Hl(267),Il(67),Hl(200)),Il(65),Hl(194),Il(266),Zo(),Hl(276),Il(266),Xf()}function Jo(){ic.startNonterminal(\"RenameExpr\",Vl),Pl(222),Il(65),Pl(194),Il(266),jl(),Yo(),Pl(80),Il(266),jl(),eu(),ic.endNonterminal(\"RenameExpr\",Vl)}function Ko(){Hl(222),Il(65),Hl(194),Il(266),Zo(),Hl(80),Il(266),tu()}function Qo(){ic.startNonterminal(\"SourceExpr\",Vl),Wf(),ic.endNonterminal(\"SourceExpr\",Vl)}function Go(){Xf()}function Yo(){ic.startNonterminal(\"TargetExpr\",Vl),Wf(),ic.endNonterminal(\"TargetExpr\",Vl)}function Zo(){Xf()}function eu(){ic.startNonterminal(\"NewNameExpr\",Vl),Wf(),ic.endNonterminal(\"NewNameExpr\",Vl)}function tu(){Xf()}function nu(){ic.startNonterminal(\"TransformExpr\",Vl),Pl(104),Il(21),jl(),iu();for(;;){if($l!=42)break;Pl(42),Il(21),jl(),iu()}Pl(184),Il(266),jl(),Wf(),Pl(224),Il(266),jl(),Wf(),ic.endNonterminal(\"TransformExpr\",Vl)}function ru(){Hl(104),Il(21),su();for(;;){if($l!=42)break;Hl(42),Il(21),su()}Hl(184),Il(266),Xf(),Hl(224),Il(266),Xf()}function iu(){ic.startNonterminal(\"TransformSpec\",Vl),Pl(31),Il(245),jl(),Ti(),Il(28),Pl(53),Il(266),jl(),Wf(),ic.endNonterminal(\"TransformSpec\",Vl)}function su(){Hl(31),Il(245),Ni(),Il(28),Hl(53),Il(266),Xf()}function ou(){ic.startNonterminal(\"FTSelection\",Vl),lu();for(;;){Il(211);switch($l){case 82:ql(161);break;default:Wl=$l}if(Wl!=116&&Wl!=118&&Wl!=128&&Wl!=206&&Wl!=227&&Wl!=275&&Wl!=65106&&Wl!=123986)break;jl(),Pu()}ic.endNonterminal(\"FTSelection\",Vl)}function uu(){cu();for(;;){Il(211);switch($l){case 82:ql(161);break;default:Wl=$l}if(Wl!=116&&Wl!=118&&Wl!=128&&Wl!=206&&Wl!=227&&Wl!=275&&Wl!=65106&&Wl!=123986)break;Hu()}}function au(){ic.startNonterminal(\"FTWeight\",Vl),Pl(270),Il(90),Pl(281),Il(266),jl(),G(),Pl(287),ic.endNonterminal(\"FTWeight\",Vl)}function fu(){Hl(270),Il(90),Hl(281),Il(266),Y(),Hl(287)}function lu(){ic.startNonterminal(\"FTOr\",Vl),hu();for(;;){if($l!=146)break;Pl(146),Il(177),jl(),hu()}ic.endNonterminal(\"FTOr\",Vl)}function cu(){pu();for(;;){if($l!=146)break;Hl(146),Il(177),pu()}}function hu(){ic.startNonterminal(\"FTAnd\",Vl),du();for(;;){if($l!=144)break;Pl(144),Il(177),jl(),du()}ic.endNonterminal(\"FTAnd\",Vl)}function pu(){vu();for(;;){if($l!=144)break;Hl(144),Il(177),vu()}}function du(){ic.startNonterminal(\"FTMildNot\",Vl),mu();for(;;){Il(212);if($l!=196)break;Pl(196),Il(56),Pl(156),Il(177),jl(),mu()}ic.endNonterminal(\"FTMildNot\",Vl)}function vu(){gu();for(;;){Il(212);if($l!=196)break;Hl(196),Il(56),Hl(156),Il(177),gu()}}function mu(){ic.startNonterminal(\"FTUnaryNot\",Vl),$l==145&&Pl(145),Il(164),jl(),yu(),ic.endNonterminal(\"FTUnaryNot\",Vl)}function gu(){$l==145&&Hl(145),Il(164),bu()}function yu(){ic.startNonterminal(\"FTPrimaryWithOptions\",Vl),wu(),Il(213),$l==265&&(jl(),Qu()),$l==270&&(jl(),au()),ic.endNonterminal(\"FTPrimaryWithOptions\",Vl)}function bu(){Eu(),Il(213),$l==265&&Gu(),$l==270&&fu()}function wu(){ic.startNonterminal(\"FTPrimary\",Vl);switch($l){case 35:Pl(35),Il(177),jl(),ou(),Pl(38);break;case 36:Cu();break;default:Su(),Il(214),$l==199&&(jl(),Ou())}ic.endNonterminal(\"FTPrimary\",Vl)}function Eu(){switch($l){case 35:Hl(35),Il(177),uu(),Hl(38);break;case 36:ku();break;default:xu(),Il(214),$l==199&&Mu()}}function Su(){ic.startNonterminal(\"FTWords\",Vl),Tu(),Il(220);if($l==72||$l==77||$l==214)jl(),Lu();ic.endNonterminal(\"FTWords\",Vl)}function xu(){Nu(),Il(220),($l==72||$l==77||$l==214)&&Au()}function Tu(){ic.startNonterminal(\"FTWordsValue\",Vl);switch($l){case 11:Pl(11);break;default:Pl(281),Il(266),jl(),G(),Pl(287)}ic.endNonterminal(\"FTWordsValue\",Vl)}function Nu(){switch($l){case 11:Hl(11);break;default:Hl(281),Il(266),Y(),Hl(287)}}function Cu(){ic.startNonterminal(\"FTExtensionSelection\",Vl);for(;;){jl(),Lr(),Il(104);if($l!=36)break}Pl(281),Il(184),$l!=287&&(jl(),ou()),Pl(287),ic.endNonterminal(\"FTExtensionSelection\",Vl)}function ku(){for(;;){Ar(),Il(104);if($l!=36)break}Hl(281),Il(184),$l!=287&&uu(),Hl(287)}function Lu(){ic.startNonterminal(\"FTAnyallOption\",Vl);switch($l){case 77:Pl(77),Il(217),$l==278&&Pl(278);break;case 72:Pl(72),Il(218),$l==279&&Pl(279);break;default:Pl(214)}ic.endNonterminal(\"FTAnyallOption\",Vl)}function Au(){switch($l){case 77:Hl(77),Il(217),$l==278&&Hl(278);break;case 72:Hl(72),Il(218),$l==279&&Hl(279);break;default:Hl(214)}}function Ou(){ic.startNonterminal(\"FTTimes\",Vl),Pl(199),Il(159),jl(),_u(),Pl(252),ic.endNonterminal(\"FTTimes\",Vl)}function Mu(){Hl(199),Il(159),Du(),Hl(252)}function _u(){ic.startNonterminal(\"FTRange\",Vl);switch($l){case 131:Pl(131),Il(265),jl(),Jn();break;case 82:Pl(82),Il(129);switch($l){case 176:Pl(176),Il(265),jl(),Jn();break;default:Pl(186),Il(265),jl(),Jn()}break;default:Pl(142),Il(265),jl(),Jn(),Pl(253),Il(265),jl(),Jn()}ic.endNonterminal(\"FTRange\",Vl)}function Du(){switch($l){case 131:Hl(131),Il(265),Kn();break;case 82:Hl(82),Il(129);switch($l){case 176:Hl(176),Il(265),Kn();break;default:Hl(186),Il(265),Kn()}break;default:Hl(142),Il(265),Kn(),Hl(253),Il(265),Kn()}}function Pu(){ic.startNonterminal(\"FTPosFilter\",Vl);switch($l){case 206:Bu();break;case 275:Fu();break;case 118:qu();break;case 116:case 227:Wu();break;default:Ju()}ic.endNonterminal(\"FTPosFilter\",Vl)}function Hu(){switch($l){case 206:ju();break;case 275:Iu();break;case 118:Ru();break;case 116:case 227:Xu();break;default:Ku()}}function Bu(){ic.startNonterminal(\"FTOrder\",Vl),Pl(206),ic.endNonterminal(\"FTOrder\",Vl)}function ju(){Hl(206)}function Fu(){ic.startNonterminal(\"FTWindow\",Vl),Pl(275),Il(265),jl(),Jn(),jl(),Uu(),ic.endNonterminal(\"FTWindow\",Vl)}function Iu(){Hl(275),Il(265),Kn(),zu()}function qu(){ic.startNonterminal(\"FTDistance\",Vl),Pl(118),Il(159),jl(),_u(),jl(),Uu(),ic.endNonterminal(\"FTDistance\",Vl)}function Ru(){Hl(118),Il(159),Du(),zu()}function Uu(){ic.startNonterminal(\"FTUnit\",Vl);switch($l){case 279:Pl(279);break;case 237:Pl(237);break;default:Pl(209)}ic.endNonterminal(\"FTUnit\",Vl)}function zu(){switch($l){case 279:Hl(279);break;case 237:Hl(237);break;default:Hl(209)}}function Wu(){ic.startNonterminal(\"FTScope\",Vl);switch($l){case 227:Pl(227);break;default:Pl(116)}Il(136),jl(),Vu(),ic.endNonterminal(\"FTScope\",Vl)}function Xu(){switch($l){case 227:Hl(227);break;default:Hl(116)}Il(136),$u()}function Vu(){ic.startNonterminal(\"FTBigUnit\",Vl);switch($l){case 236:Pl(236);break;default:Pl(208)}ic.endNonterminal(\"FTBigUnit\",Vl)}function $u(){switch($l){case 236:Hl(236);break;default:Hl(208)}}function Ju(){ic.startNonterminal(\"FTContent\",Vl);switch($l){case 82:Pl(82),Il(121);switch($l){case 242:Pl(242);break;default:Pl(127)}break;default:Pl(128),Il(45),Pl(101)}ic.endNonterminal(\"FTContent\",Vl)}function Ku(){switch($l){case 82:Hl(82),Il(121);switch($l){case 242:Hl(242);break;default:Hl(127)}break;default:Hl(128),Il(45),Hl(101)}}function Qu(){ic.startNonterminal(\"FTMatchOptions\",Vl);for(;;){Pl(265),Il(204),jl(),Yu(),Il(213);if($l!=265)break}ic.endNonterminal(\"FTMatchOptions\",Vl)}function Gu(){for(;;){Hl(265),Il(204),Zu(),Il(213);if($l!=265)break}}function Yu(){ic.startNonterminal(\"FTMatchOption\",Vl);switch($l){case 191:ql(176);break;default:Wl=$l}switch(Wl){case 172:ya();break;case 274:case 140479:wa();break;case 251:case 128703:oa();break;case 243:case 124607:ia();break;case 115:na();break;case 244:case 125119:ha();break;case 203:Sa();break;default:ea()}ic.endNonterminal(\"FTMatchOption\",Vl)}function Zu(){switch($l){case 191:ql(176);break;default:Wl=$l}switch(Wl){case 172:ba();break;case 274:case 140479:Ea();break;case 251:case 128703:ua();break;case 243:case 124607:sa();break;case 115:ra();break;case 244:case 125119:pa();break;case 203:xa();break;default:ta()}}function ea(){ic.startNonterminal(\"FTCaseOption\",Vl);switch($l){case 89:Pl(89),Il(128);switch($l){case 160:Pl(160);break;default:Pl(235)}break;case 180:Pl(180);break;default:Pl(264)}ic.endNonterminal(\"FTCaseOption\",Vl)}function ta(){switch($l){case 89:Hl(89),Il(128);switch($l){case 160:Hl(160);break;default:Hl(235)}break;case 180:Hl(180);break;default:Hl(264)}}function na(){ic.startNonterminal(\"FTDiacriticsOption\",Vl),Pl(115),Il(128);switch($l){case 160:Pl(160);break;default:Pl(235)}ic.endNonterminal(\"FTDiacriticsOption\",Vl)}function ra(){Hl(115),Il(128);switch($l){case 160:Hl(160);break;default:Hl(235)}}function ia(){ic.startNonterminal(\"FTStemOption\",Vl);switch($l){case 243:Pl(243);break;default:Pl(191),Il(77),Pl(243)}ic.endNonterminal(\"FTStemOption\",Vl)}function sa(){switch($l){case 243:Hl(243);break;default:Hl(191),Il(77),Hl(243)}}function oa(){ic.startNonterminal(\"FTThesaurusOption\",Vl);switch($l){case 251:Pl(251),Il(152);switch($l){case 82:jl(),aa();break;case 110:Pl(110);break;default:Pl(35),Il(116);switch($l){case 82:jl(),aa();break;default:Pl(110)}for(;;){Il(105);if($l!=42)break;Pl(42),Il(34),jl(),aa()}Pl(38)}break;default:Pl(191),Il(81),Pl(251)}ic.endNonterminal(\"FTThesaurusOption\",Vl)}function ua(){switch($l){case 251:Hl(251),Il(152);switch($l){case 82:fa();break;case 110:Hl(110);break;default:Hl(35),Il(116);switch($l){case 82:fa();break;default:Hl(110)}for(;;){Il(105);if($l!=42)break;Hl(42),Il(34),fa()}Hl(38)}break;default:Hl(191),Il(81),Hl(251)}}function aa(){ic.startNonterminal(\"FTThesaurusID\",Vl),Pl(82),Il(15),Pl(7),Il(219),$l==221&&(Pl(221),Il(17),Pl(11)),Il(215);switch($l){case 82:ql(183);break;default:Wl=$l}if(Wl==131||Wl==142||Wl==90194||Wl==95314)jl(),la(),Il(61),Pl(178);ic.endNonterminal(\"FTThesaurusID\",Vl)}function fa(){Hl(82),Il(15),Hl(7),Il(219),$l==221&&(Hl(221),Il(17),Hl(11)),Il(215);switch($l){case 82:ql(183);break;default:Wl=$l}if(Wl==131||Wl==142||Wl==90194||Wl==95314)ca(),Il(61),Hl(178)}function la(){ic.startNonterminal(\"FTLiteralRange\",Vl);switch($l){case 131:Pl(131),Il(16),Pl(8);break;case 82:Pl(82),Il(129);switch($l){case 176:Pl(176),Il(16),Pl(8);break;default:Pl(186),Il(16),Pl(8)}break;default:Pl(142),Il(16),Pl(8),Il(82),Pl(253),Il(16),Pl(8)}ic.endNonterminal(\"FTLiteralRange\",Vl)}function ca(){switch($l){case 131:Hl(131),Il(16),Hl(8);break;case 82:Hl(82),Il(129);switch($l){case 176:Hl(176),Il(16),Hl(8);break;default:Hl(186),Il(16),Hl(8)}break;default:Hl(142),Il(16),Hl(8),Il(82),Hl(253),Il(16),Hl(8)}}function ha(){ic.startNonterminal(\"FTStopWordOption\",Vl);switch($l){case 244:Pl(244),Il(89),Pl(279),Il(152);switch($l){case 110:Pl(110);for(;;){Il(216);if($l!=132&&$l!=260)break;jl(),ma()}break;default:jl(),da();for(;;){Il(216);if($l!=132&&$l!=260)break;jl(),ma()}}break;default:Pl(191),Il(78),Pl(244),Il(89),Pl(279)}ic.endNonterminal(\"FTStopWordOption\",Vl)}function pa(){switch($l){case 244:Hl(244),Il(89),Hl(279),Il(152);switch($l){case 110:Hl(110);for(;;){Il(216);if($l!=132&&$l!=260)break;ga()}break;default:va();for(;;){Il(216);if($l!=132&&$l!=260)break;ga()}}break;default:Hl(191),Il(78),Hl(244),Il(89),Hl(279)}}function da(){ic.startNonterminal(\"FTStopWords\",Vl);switch($l){case 82:Pl(82),Il(15),Pl(7);break;default:Pl(35),Il(17),Pl(11);for(;;){Il(105);if($l!=42)break;Pl(42),Il(17),Pl(11)}Pl(38)}ic.endNonterminal(\"FTStopWords\",Vl)}function va(){switch($l){case 82:Hl(82),Il(15),Hl(7);break;default:Hl(35),Il(17),Hl(11);for(;;){Il(105);if($l!=42)break;Hl(42),Il(17),Hl(11)}Hl(38)}}function ma(){ic.startNonterminal(\"FTStopWordsInclExcl\",Vl);switch($l){case 260:Pl(260);break;default:Pl(132)}Il(103),jl(),da(),ic.endNonterminal(\"FTStopWordsInclExcl\",Vl)}function ga(){switch($l){case 260:Hl(260);break;default:Hl(132)}Il(103),va()}function ya(){ic.startNonterminal(\"FTLanguageOption\",Vl),Pl(172),Il(17),Pl(11),ic.endNonterminal(\"FTLanguageOption\",Vl)}function ba(){Hl(172),Il(17),Hl(11)}function wa(){ic.startNonterminal(\"FTWildCardOption\",Vl);switch($l){case 274:Pl(274);break;default:Pl(191),Il(87),Pl(274)}ic.endNonterminal(\"FTWildCardOption\",Vl)}function Ea(){switch($l){case 274:Hl(274);break;default:Hl(191),Il(87),Hl(274)}}function Sa(){ic.startNonterminal(\"FTExtensionOption\",Vl),Pl(203),Il(245),jl(),$a(),Il(17),Pl(11),ic.endNonterminal(\"FTExtensionOption\",Vl)}function xa(){Hl(203),Il(245),Ja(),Il(17),Hl(11)}function Ta(){ic.startNonterminal(\"FTIgnoreOption\",Vl),Pl(277),Il(45),Pl(101),Il(265),jl(),Yn(),ic.endNonterminal(\"FTIgnoreOption\",Vl)}function Na(){Hl(277),Il(45),Hl(101),Il(265),Zn()}function Ca(){ic.startNonterminal(\"CollectionDecl\",Vl),Pl(96),Il(245),jl(),$a(),Il(111),$l==80&&(jl(),ka()),ic.endNonterminal(\"CollectionDecl\",Vl)}function ka(){ic.startNonterminal(\"CollectionTypeDecl\",Vl),Pl(80),Il(253),jl(),_s(),Il(171),$l!=54&&(jl(),Os()),ic.endNonterminal(\"CollectionTypeDecl\",Vl)}function La(){ic.startNonterminal(\"IndexName\",Vl),$a(),ic.endNonterminal(\"IndexName\",Vl)}function Aa(){ic.startNonterminal(\"IndexDomainExpr\",Vl),Or(),ic.endNonterminal(\"IndexDomainExpr\",Vl)}function Oa(){ic.startNonterminal(\"IndexKeySpec\",Vl),Ma(),$l==80&&(jl(),_a()),Il(156),$l==95&&(jl(),Pa()),ic.endNonterminal(\"IndexKeySpec\",Vl)}function Ma(){ic.startNonterminal(\"IndexKeyExpr\",Vl),Or(),ic.endNonterminal(\"IndexKeyExpr\",Vl)}function _a(){ic.startNonterminal(\"IndexKeyTypeDecl\",Vl),Pl(80),Il(245),jl(),Da(),Il(189);if($l==40||$l==41||$l==65)jl(),Os();ic.endNonterminal(\"IndexKeyTypeDecl\",Vl)}function Da(){ic.startNonterminal(\"AtomicType\",Vl),$a(),ic.endNonterminal(\"AtomicType\",Vl)}function Pa(){ic.startNonterminal(\"IndexKeyCollation\",Vl),Pl(95),Il(15),Pl(7),ic.endNonterminal(\"IndexKeyCollation\",Vl)}function Ha(){ic.startNonterminal(\"IndexDecl\",Vl),Pl(157),Il(245),jl(),La(),Il(68),Pl(201),Il(66),Pl(195),Il(262),jl(),Aa(),Pl(88),Il(262),jl(),Oa();for(;;){Il(107);if($l!=42)break;Pl(42),Il(262),jl(),Oa()}ic.endNonterminal(\"IndexDecl\",Vl)}function Ba(){ic.startNonterminal(\"ICDecl\",Vl),Pl(163),Il(43),Pl(98),Il(245),jl(),$a(),Il(124);switch($l){case 201:jl(),ja();break;default:jl(),Ra()}ic.endNonterminal(\"ICDecl\",Vl)}function ja(){ic.startNonterminal(\"ICCollection\",Vl),Pl(201),Il(42),Pl(96),Il(245),jl(),$a(),Il(150);switch($l){case 31:jl(),Fa();break;case 194:jl(),Ia();break;default:jl(),qa()}ic.endNonterminal(\"ICCollection\",Vl)}function Fa(){ic.startNonterminal(\"ICCollSequence\",Vl),Si(),Il(40),Pl(93),Il(266),jl(),Wf(),ic.endNonterminal(\"ICCollSequence\",Vl)}function Ia(){ic.startNonterminal(\"ICCollSequenceUnique\",Vl),Pl(194),Il(21),jl(),Si(),Il(40),Pl(93),Il(83),Pl(261),Il(60),Pl(171),Il(262),jl(),Or(),ic.endNonterminal(\"ICCollSequenceUnique\",Vl)}function qa(){ic.startNonterminal(\"ICCollNode\",Vl),Pl(140),Il(65),Pl(194),Il(21),jl(),Si(),Il(40),Pl(93),Il(266),jl(),Wf(),ic.endNonterminal(\"ICCollNode\",Vl)}function Ra(){ic.startNonterminal(\"ICForeignKey\",Vl),Pl(141),Il(60),Pl(171),Il(54),jl(),Ua(),jl(),za(),ic.endNonterminal(\"ICForeignKey\",Vl)}function Ua(){ic.startNonterminal(\"ICForeignKeySource\",Vl),Pl(142),Il(42),jl(),Wa(),ic.endNonterminal(\"ICForeignKeySource\",Vl)}function za(){ic.startNonterminal(\"ICForeignKeyTarget\",Vl),Pl(253),Il(42),jl(),Wa(),ic.endNonterminal(\"ICForeignKeyTarget\",Vl)}function Wa(){ic.startNonterminal(\"ICForeignKeyValues\",Vl),Pl(96),Il(245),jl(),$a(),Il(65),Pl(194),Il(21),jl(),Si(),Il(60),Pl(171),Il(262),jl(),Or(),ic.endNonterminal(\"ICForeignKeyValues\",Vl)}function Xa(){Hl(37);for(;;){Rl(92);if($l==51)break;switch($l){case 24:Hl(24);break;default:Xa()}}Hl(51)}function Va(){switch($l){case 22:Hl(22);break;default:Xa()}}function $a(){ic.startNonterminal(\"EQName\",Vl),Rl(240);switch($l){case 83:Pl(83);break;case 97:Pl(97);break;case 121:Pl(121);break;case 122:Pl(122);break;case 125:Pl(125);break;case 147:Pl(147);break;case 154:Pl(154);break;case 167:Pl(167);break;case 188:Pl(188);break;case 194:Pl(194);break;case 220:Pl(220);break;case 230:Pl(230);break;case 231:Pl(231);break;case 248:Pl(248);break;case 249:Pl(249);break;case 259:Pl(259);break;case 79:Pl(79);break;case 169:Pl(169);break;case 247:Pl(247);break;default:Ka()}ic.endNonterminal(\"EQName\",Vl)}function Ja(){Rl(240);switch($l){case 83:Hl(83);break;case 97:Hl(97);break;case 121:Hl(121);break;case 122:Hl(122);break;case 125:Hl(125);break;case 147:Hl(147);break;case 154:Hl(154);break;case 167:Hl(167);break;case 188:Hl(188);break;case 194:Hl(194);break;case 220:Hl(220);break;case 230:Hl(230);break;case 231:Hl(231);break;case 248:Hl(248);break;case 249:Hl(249);break;case 259:Hl(259);break;case 79:Hl(79);break;case 169:Hl(169);break;case 247:Hl(247);break;default:Qa()}}function Ka(){ic.startNonterminal(\"FunctionName\",Vl);switch($l){case 6:Pl(6);break;case 71:Pl(71);break;case 74:Pl(74);break;case 75:Pl(75);break;case 76:Pl(76);break;case 80:Pl(80);break;case 81:Pl(81);break;case 85:Pl(85);break;case 89:Pl(89);break;case 90:Pl(90);break;case 91:Pl(91);break;case 94:Pl(94);break;case 95:Pl(95);break;case 104:Pl(104);break;case 106:Pl(106);break;case 109:Pl(109);break;case 110:Pl(110);break;case 111:Pl(111);break;case 112:Pl(112);break;case 113:Pl(113);break;case 114:Pl(114);break;case 119:Pl(119);break;case 120:Pl(120);break;case 123:Pl(123);break;case 124:Pl(124);break;case 127:Pl(127);break;case 129:Pl(129);break;case 130:Pl(130);break;case 132:Pl(132);break;case 136:Pl(136);break;case 137:Pl(137);break;case 138:Pl(138);break;case 139:Pl(139);break;case 148:Pl(148);break;case 150:Pl(150);break;case 152:Pl(152);break;case 153:Pl(153);break;case 155:Pl(155);break;case 161:Pl(161);break;case 162:Pl(162);break;case 164:Pl(164);break;case 165:Pl(165);break;case 166:Pl(166);break;case 173:Pl(173);break;case 175:Pl(175);break;case 177:Pl(177);break;case 181:Pl(181);break;case 183:Pl(183);break;case 184:Pl(184);break;case 185:Pl(185);break;case 187:Pl(187);break;case 189:Pl(189);break;case 202:Pl(202);break;case 204:Pl(204);break;case 205:Pl(205);break;case 206:Pl(206);break;case 210:Pl(210);break;case 216:Pl(216);break;case 217:Pl(217);break;case 222:Pl(222);break;case 223:Pl(223);break;case 224:Pl(224);break;case 228:Pl(228);break;case 234:Pl(234);break;case 240:Pl(240);break;case 241:Pl(241);break;case 242:Pl(242);break;case 253:Pl(253);break;case 254:Pl(254);break;case 256:Pl(256);break;case 260:Pl(260);break;case 262:Pl(262);break;case 266:Pl(266);break;case 272:Pl(272);break;case 276:Pl(276);break;case 170:Pl(170);break;case 73:Pl(73);break;case 82:Pl(82);break;case 84:Pl(84);break;case 86:Pl(86);break;case 87:Pl(87);break;case 92:Pl(92);break;case 99:Pl(99);break;case 102:Pl(102);break;case 103:Pl(103);break;case 105:Pl(105);break;case 107:Pl(107);break;case 126:Pl(126);break;case 133:Pl(133);break;case 134:Pl(134);break;case 143:Pl(143);break;case 156:Pl(156);break;case 157:Pl(157);break;case 163:Pl(163);break;case 174:Pl(174);break;case 195:Pl(195);break;case 203:Pl(203);break;case 207:Pl(207);break;case 226:Pl(226);break;case 229:Pl(229);break;case 232:Pl(232);break;case 239:Pl(239);break;case 245:Pl(245);break;case 257:Pl(257);break;case 258:Pl(258);break;case 263:Pl(263);break;case 267:Pl(267);break;case 268:Pl(268);break;case 269:Pl(269);break;case 273:Pl(273);break;case 98:Pl(98);break;case 179:Pl(179);break;case 225:Pl(225);break;case 78:Pl(78);break;case 135:Pl(135);break;case 142:Pl(142);break;case 197:Pl(197);break;case 168:Pl(168);break;case 198:Pl(198);break;case 233:Pl(233);break;default:Pl(255)}ic.endNonterminal(\"FunctionName\",Vl)}function Qa(){switch($l){case 6:Hl(6);break;case 71:Hl(71);break;case 74:Hl(74);break;case 75:Hl(75);break;case 76:Hl(76);break;case 80:Hl(80);break;case 81:Hl(81);break;case 85:Hl(85);break;case 89:Hl(89);break;case 90:Hl(90);break;case 91:Hl(91);break;case 94:Hl(94);break;case 95:Hl(95);break;case 104:Hl(104);break;case 106:Hl(106);break;case 109:Hl(109);break;case 110:Hl(110);break;case 111:Hl(111);break;case 112:Hl(112);break;case 113:Hl(113);break;case 114:Hl(114);break;case 119:Hl(119);break;case 120:Hl(120);break;case 123:Hl(123);break;case 124:Hl(124);break;case 127:Hl(127);break;case 129:Hl(129);break;case 130:Hl(130);break;case 132:Hl(132);break;case 136:Hl(136);break;case 137:Hl(137);break;case 138:Hl(138);break;case 139:Hl(139);break;case 148:Hl(148);break;case 150:Hl(150);break;case 152:Hl(152);break;case 153:Hl(153);break;case 155:Hl(155);break;case 161:Hl(161);break;case 162:Hl(162);break;case 164:Hl(164);break;case 165:Hl(165);break;case 166:Hl(166);break;case 173:Hl(173);break;case 175:Hl(175);break;case 177:Hl(177);break;case 181:Hl(181);break;case 183:Hl(183);break;case 184:Hl(184);break;case 185:Hl(185);break;case 187:Hl(187);break;case 189:Hl(189);break;case 202:Hl(202);break;case 204:Hl(204);break;case 205:Hl(205);break;case 206:Hl(206);break;case 210:Hl(210);break;case 216:Hl(216);break;case 217:Hl(217);break;case 222:Hl(222);break;case 223:Hl(223);break;case 224:Hl(224);break;case 228:Hl(228);break;case 234:Hl(234);break;case 240:Hl(240);break;case 241:Hl(241);break;case 242:Hl(242);break;case 253:Hl(253);break;case 254:Hl(254);break;case 256:Hl(256);break;case 260:Hl(260);break;case 262:Hl(262);break;case 266:Hl(266);break;case 272:Hl(272);break;case 276:Hl(276);break;case 170:Hl(170);break;case 73:Hl(73);break;case 82:Hl(82);break;case 84:Hl(84);break;case 86:Hl(86);break;case 87:Hl(87);break;case 92:Hl(92);break;case 99:Hl(99);break;case 102:Hl(102);break;case 103:Hl(103);break;case 105:Hl(105);break;case 107:Hl(107);break;case 126:Hl(126);break;case 133:Hl(133);break;case 134:Hl(134);break;case 143:Hl(143);break;case 156:Hl(156);break;case 157:Hl(157);break;case 163:Hl(163);break;case 174:Hl(174);break;case 195:Hl(195);break;case 203:Hl(203);break;case 207:Hl(207);break;case 226:Hl(226);break;case 229:Hl(229);break;case 232:Hl(232);break;case 239:Hl(239);break;case 245:Hl(245);break;case 257:Hl(257);break;case 258:Hl(258);break;case 263:Hl(263);break;case 267:Hl(267);break;case 268:Hl(268);break;case 269:Hl(269);break;case 273:Hl(273);break;case 98:Hl(98);break;case 179:Hl(179);break;case 225:Hl(225);break;case 78:Hl(78);break;case 135:Hl(135);break;case 142:Hl(142);break;case 197:Hl(197);break;case 168:Hl(168);break;case 198:Hl(198);break;case 233:Hl(233);break;default:Hl(255)}}function Ga(){ic.startNonterminal(\"NCName\",Vl);switch($l){case 19:Pl(19);break;case 71:Pl(71);break;case 76:Pl(76);break;case 80:Pl(80);break;case 81:Pl(81);break;case 85:Pl(85);break;case 89:Pl(89);break;case 90:Pl(90);break;case 91:Pl(91);break;case 95:Pl(95);break;case 106:Pl(106);break;case 110:Pl(110);break;case 114:Pl(114);break;case 119:Pl(119);break;case 123:Pl(123);break;case 124:Pl(124);break;case 127:Pl(127);break;case 129:Pl(129);break;case 132:Pl(132);break;case 139:Pl(139);break;case 148:Pl(148);break;case 150:Pl(150);break;case 152:Pl(152);break;case 153:Pl(153);break;case 162:Pl(162);break;case 164:Pl(164);break;case 165:Pl(165);break;case 166:Pl(166);break;case 175:Pl(175);break;case 177:Pl(177);break;case 181:Pl(181);break;case 183:Pl(183);break;case 184:Pl(184);break;case 189:Pl(189);break;case 202:Pl(202);break;case 204:Pl(204);break;case 205:Pl(205);break;case 224:Pl(224);break;case 228:Pl(228);break;case 241:Pl(241);break;case 242:Pl(242);break;case 253:Pl(253);break;case 254:Pl(254);break;case 260:Pl(260);break;case 272:Pl(272);break;case 276:Pl(276);break;case 74:Pl(74);break;case 75:Pl(75);break;case 83:Pl(83);break;case 94:Pl(94);break;case 97:Pl(97);break;case 104:Pl(104);break;case 109:Pl(109);break;case 111:Pl(111);break;case 112:Pl(112);break;case 113:Pl(113);break;case 120:Pl(120);break;case 121:Pl(121);break;case 122:Pl(122);break;case 125:Pl(125);break;case 130:Pl(130);break;case 136:Pl(136);break;case 137:Pl(137);break;case 138:Pl(138);break;case 147:Pl(147);break;case 154:Pl(154);break;case 155:Pl(155);break;case 161:Pl(161);break;case 167:Pl(167);break;case 173:Pl(173);break;case 185:Pl(185);break;case 187:Pl(187);break;case 188:Pl(188);break;case 194:Pl(194);break;case 206:Pl(206);break;case 210:Pl(210);break;case 216:Pl(216);break;case 217:Pl(217);break;case 220:Pl(220);break;case 222:Pl(222);break;case 223:Pl(223);break;case 230:Pl(230);break;case 231:Pl(231);break;case 234:Pl(234);break;case 240:Pl(240);break;case 248:Pl(248);break;case 249:Pl(249);break;case 256:Pl(256);break;case 259:Pl(259);break;case 262:Pl(262);break;case 266:Pl(266);break;case 268:Pl(268);break;case 170:Pl(170);break;case 73:Pl(73);break;case 82:Pl(82);break;case 84:Pl(84);break;case 86:Pl(86);break;case 87:Pl(87);break;case 92:Pl(92);break;case 99:Pl(99);break;case 102:Pl(102);break;case 103:Pl(103);break;case 105:Pl(105);break;case 107:Pl(107);break;case 126:Pl(126);break;case 133:Pl(133);break;case 134:Pl(134);break;case 143:Pl(143);break;case 156:Pl(156);break;case 157:Pl(157);break;case 163:Pl(163);break;case 174:Pl(174);break;case 195:Pl(195);break;case 203:Pl(203);break;case 207:Pl(207);break;case 226:Pl(226);break;case 229:Pl(229);break;case 232:Pl(232);break;case 239:Pl(239);break;case 245:Pl(245);break;case 257:Pl(257);break;case 258:Pl(258);break;case 263:Pl(263);break;case 267:Pl(267);break;case 269:Pl(269);break;case 273:Pl(273);break;case 98:Pl(98);break;case 179:Pl(179);break;case 225:Pl(225);break;case 78:Pl(78);break;case 135:Pl(135);break;case 142:Pl(142);break;case 197:Pl(197);break;case 168:Pl(168);break;case 198:Pl(198);break;case 233:Pl(233);break;default:Pl(255)}ic.endNonterminal(\"NCName\",Vl)}function Ya(){switch($l){case 19:Hl(19);break;case 71:Hl(71);break;case 76:Hl(76);break;case 80:Hl(80);break;case 81:Hl(81);break;case 85:Hl(85);break;case 89:Hl(89);break;case 90:Hl(90);break;case 91:Hl(91);break;case 95:Hl(95);break;case 106:Hl(106);break;case 110:Hl(110);break;case 114:Hl(114);break;case 119:Hl(119);break;case 123:Hl(123);break;case 124:Hl(124);break;case 127:Hl(127);break;case 129:Hl(129);break;case 132:Hl(132);break;case 139:Hl(139);break;case 148:Hl(148);break;case 150:Hl(150);break;case 152:Hl(152);break;case 153:Hl(153);break;case 162:Hl(162);break;case 164:Hl(164);break;case 165:Hl(165);break;case 166:Hl(166);break;case 175:Hl(175);break;case 177:Hl(177);break;case 181:Hl(181);break;case 183:Hl(183);break;case 184:Hl(184);break;case 189:Hl(189);break;case 202:Hl(202);break;case 204:Hl(204);break;case 205:Hl(205);break;case 224:Hl(224);break;case 228:Hl(228);break;case 241:Hl(241);break;case 242:Hl(242);break;case 253:Hl(253);break;case 254:Hl(254);break;case 260:Hl(260);break;case 272:Hl(272);break;case 276:Hl(276);break;case 74:Hl(74);break;case 75:Hl(75);break;case 83:Hl(83);break;case 94:Hl(94);break;case 97:Hl(97);break;case 104:Hl(104);break;case 109:Hl(109);break;case 111:Hl(111);break;case 112:Hl(112);break;case 113:Hl(113);break;case 120:Hl(120);break;case 121:Hl(121);break;case 122:Hl(122);break;case 125:Hl(125);break;case 130:Hl(130);break;case 136:Hl(136);break;case 137:Hl(137);break;case 138:Hl(138);break;case 147:Hl(147);break;case 154:Hl(154);break;case 155:Hl(155);break;case 161:Hl(161);break;case 167:Hl(167);break;case 173:Hl(173);break;case 185:Hl(185);break;case 187:Hl(187);break;case 188:Hl(188);break;case 194:Hl(194);break;case 206:Hl(206);break;case 210:Hl(210);break;case 216:Hl(216);break;case 217:Hl(217);break;case 220:Hl(220);break;case 222:Hl(222);break;case 223:Hl(223);break;case 230:Hl(230);break;case 231:Hl(231);break;case 234:Hl(234);break;case 240:Hl(240);break;case 248:Hl(248);break;case 249:Hl(249);break;case 256:Hl(256);break;case 259:Hl(259);break;case 262:Hl(262);break;case 266:Hl(266);break;case 268:Hl(268);break;case 170:Hl(170);break;case 73:Hl(73);break;case 82:Hl(82);break;case 84:Hl(84);break;case 86:Hl(86);break;case 87:Hl(87);break;case 92:Hl(92);break;case 99:Hl(99);break;case 102:Hl(102);break;case 103:Hl(103);break;case 105:Hl(105);break;case 107:Hl(107);break;case 126:Hl(126);break;case 133:Hl(133);break;case 134:Hl(134);break;case 143:Hl(143);break;case 156:Hl(156);break;case 157:Hl(157);break;case 163:Hl(163);break;case 174:Hl(174);break;case 195:Hl(195);break;case 203:Hl(203);break;case 207:Hl(207);break;case 226:Hl(226);break;case 229:Hl(229);break;case 232:Hl(232);break;case 239:Hl(239);break;case 245:Hl(245);break;case 257:Hl(257);break;case 258:Hl(258);break;case 263:Hl(263);break;case 267:Hl(267);break;case 269:Hl(269);break;case 273:Hl(273);break;case 98:Hl(98);break;case 179:Hl(179);break;case 225:Hl(225);break;case 78:Hl(78);break;case 135:Hl(135);break;case 142:Hl(142);break;case 197:Hl(197);break;case 168:Hl(168);break;case 198:Hl(198);break;case 233:Hl(233);break;default:Hl(255)}}function Za(){ic.startNonterminal(\"MainModule\",Vl),l(),jl(),ef(),ic.endNonterminal(\"MainModule\",Vl)}function ef(){ic.startNonterminal(\"Program\",Vl),of(),ic.endNonterminal(\"Program\",Vl)}function tf(){ic.startNonterminal(\"Statements\",Vl);for(;;){Il(283);switch($l){case 35:ql(269);break;case 36:Ul(242);break;case 47:ql(285);break;case 48:ql(259);break;case 55:Ul(4);break;case 56:Ul(1);break;case 60:Ul(3);break;case 69:ql(272);break;case 78:ql(268);break;case 133:ql(147);break;case 139:ql(179);break;case 161:ql(275);break;case 177:ql(166);break;case 187:ql(246);break;case 220:ql(244);break;case 223:ql(170);break;case 266:ql(188);break;case 281:ql(282);break;case 283:ql(273);break;case 31:case 33:ql(245);break;case 83:case 122:ql(252);break;case 87:case 103:ql(145);break;case 97:case 249:ql(97);break;case 111:case 222:ql(260);break;case 41:case 43:case 196:ql(265);break;case 135:case 197:case 255:ql(210);break;case 104:case 130:case 240:case 268:ql(143);break;case 120:case 206:case 256:case 262:ql(148);break;case 8:case 9:case 10:case 11:case 32:ql(209);break;case 79:case 121:case 125:case 167:case 169:case 188:case 194:case 230:case 231:case 247:ql(20);break;case 6:case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl!=25&&Wl!=54&&Wl!=287&&Wl!=12808&&Wl!=12809&&Wl!=12810&&Wl!=12811&&Wl!=12832&&Wl!=12847&&Wl!=12935&&Wl!=12997&&Wl!=13055&&Wl!=16140&&Wl!=21512&&Wl!=21513&&Wl!=21514&&Wl!=21515&&Wl!=21536&&Wl!=21551&&Wl!=21639&&Wl!=21701&&Wl!=21759&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=146952&&Wl!=146953&&Wl!=146954&&Wl!=146955&&Wl!=146976&&Wl!=146991&&Wl!=147079&&Wl!=147141&&Wl!=147199){Wl=uc(8,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ff(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(8,Vl,Wl)}}if(Wl!=-1&&Wl!=54&&Wl!=16140&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333)break;jl(),af()}ic.endNonterminal(\"Statements\",Vl)}function nf(){for(;;){Il(283);switch($l){case 35:ql(269);break;case 36:Ul(242);break;case 47:ql(285);break;case 48:ql(259);break;case 55:Ul(4);break;case 56:Ul(1);break;case 60:Ul(3);break;case 69:ql(272);break;case 78:ql(268);break;case 133:ql(147);break;case 139:ql(179);break;case 161:ql(275);break;case 177:ql(166);break;case 187:ql(246);break;case 220:ql(244);break;case 223:ql(170);break;case 266:ql(188);break;case 281:ql(282);break;case 283:ql(273);break;case 31:case 33:ql(245);break;case 83:case 122:ql(252);break;case 87:case 103:ql(145);break;case 97:case 249:ql(97);break;case 111:case 222:ql(260);break;case 41:case 43:case 196:ql(265);break;case 135:case 197:case 255:ql(210);break;case 104:case 130:case 240:case 268:ql(143);break;case 120:case 206:case 256:case 262:ql(148);break;case 8:case 9:case 10:case 11:case 32:ql(209);break;case 79:case 121:case 125:case 167:case 169:case 188:case 194:case 230:case 231:case 247:ql(20);break;case 6:case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl!=25&&Wl!=54&&Wl!=287&&Wl!=12808&&Wl!=12809&&Wl!=12810&&Wl!=12811&&Wl!=12832&&Wl!=12847&&Wl!=12935&&Wl!=12997&&Wl!=13055&&Wl!=16140&&Wl!=21512&&Wl!=21513&&Wl!=21514&&Wl!=21515&&Wl!=21536&&Wl!=21551&&Wl!=21639&&Wl!=21701&&Wl!=21759&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=146952&&Wl!=146953&&Wl!=146954&&Wl!=146955&&Wl!=146976&&Wl!=146991&&Wl!=147079&&Wl!=147141&&Wl!=147199){Wl=uc(8,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ff(),oc(8,t,-1);continue}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(8,t,-2);break}}}if(Wl!=-1&&Wl!=54&&Wl!=16140&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333)break;ff()}}function rf(){ic.startNonterminal(\"StatementsAndExpr\",Vl),tf(),jl(),G(),ic.endNonterminal(\"StatementsAndExpr\",Vl)}function sf(){nf(),Y()}function of(){ic.startNonterminal(\"StatementsAndOptionalExpr\",Vl),tf(),$l!=25&&$l!=287&&(jl(),G()),ic.endNonterminal(\"StatementsAndOptionalExpr\",Vl)}function uf(){nf(),$l!=25&&$l!=287&&Y()}function af(){ic.startNonterminal(\"Statement\",Vl);switch($l){case 133:ql(147);break;case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 268:ql(143);break;case 281:ql(282);break;case 31:case 33:ql(245);break;case 87:case 103:ql(145);break;case 154:case 248:case 259:case 273:ql(95);break;default:Wl=$l}if(Wl!=6&&Wl!=8&&Wl!=9&&Wl!=10&&Wl!=11&&Wl!=32&&Wl!=35&&Wl!=36&&Wl!=41&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=54&&Wl!=55&&Wl!=56&&Wl!=60&&Wl!=69&&Wl!=71&&Wl!=73&&Wl!=74&&Wl!=75&&Wl!=76&&Wl!=78&&Wl!=79&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=83&&Wl!=84&&Wl!=85&&Wl!=86&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=92&&Wl!=94&&Wl!=95&&Wl!=97&&Wl!=98&&Wl!=99&&Wl!=102&&Wl!=104&&Wl!=105&&Wl!=106&&Wl!=107&&Wl!=109&&Wl!=110&&Wl!=111&&Wl!=112&&Wl!=113&&Wl!=114&&Wl!=119&&Wl!=120&&Wl!=121&&Wl!=122&&Wl!=123&&Wl!=124&&Wl!=125&&Wl!=126&&Wl!=127&&Wl!=129&&Wl!=130&&Wl!=132&&Wl!=134&&Wl!=135&&Wl!=136&&Wl!=137&&Wl!=138&&Wl!=142&&Wl!=143&&Wl!=147&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=155&&Wl!=156&&Wl!=157&&Wl!=161&&Wl!=162&&Wl!=163&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=167&&Wl!=168&&Wl!=169&&Wl!=170&&Wl!=173&&Wl!=174&&Wl!=175&&Wl!=179&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=185&&Wl!=187&&Wl!=188&&Wl!=189&&Wl!=194&&Wl!=195&&Wl!=196&&Wl!=197&&Wl!=198&&Wl!=202&&Wl!=203&&Wl!=204&&Wl!=205&&Wl!=206&&Wl!=207&&Wl!=210&&Wl!=216&&Wl!=217&&Wl!=220&&Wl!=222&&Wl!=223&&Wl!=224&&Wl!=225&&Wl!=226&&Wl!=228&&Wl!=229&&Wl!=230&&Wl!=231&&Wl!=232&&Wl!=233&&Wl!=234&&Wl!=239&&Wl!=240&&Wl!=241&&Wl!=242&&Wl!=245&&Wl!=247&&Wl!=249&&Wl!=253&&Wl!=254&&Wl!=255&&Wl!=257&&Wl!=258&&Wl!=260&&Wl!=262&&Wl!=263&&Wl!=266&&Wl!=267&&Wl!=269&&Wl!=272&&Wl!=276&&Wl!=283&&Wl!=10009&&Wl!=14935&&Wl!=14951&&Wl!=14981&&Wl!=14987&&Wl!=15002&&Wl!=15025&&Wl!=15096&&Wl!=15104&&Wl!=15107&&Wl!=15116&&Wl!=15121&&Wl!=16011&&Wl!=16049&&Wl!=16140&&Wl!=18007&&Wl!=18023&&Wl!=18053&&Wl!=18059&&Wl!=18074&&Wl!=18097&&Wl!=18168&&Wl!=18176&&Wl!=18179&&Wl!=18188&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=118961&&Wl!=122507&&Wl!=131723&&Wl!=144128&&Wl!=147225){Wl=uc(9,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{cf(),Wl=-1}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),pf(),Wl=-2}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),vf(),Wl=-3}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),If(),Wl=-12}catch(c){Wl=-13}}}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(9,Vl,Wl)}}switch(Wl){case-2:hf();break;case-3:df();break;case 91735:mf();break;case 91751:yf();break;case 115333:wf();break;case 16011:case 16049:case 118961:case 122507:case 131723:Sf();break;case 18074:Cf();break;case 18168:Lf();break;case 144128:_f();break;case 18179:Pf();break;case-12:case 16140:Ff();break;case-13:qf();break;case 54:Uf();break;default:lf()}ic.endNonterminal(\"Statement\",Vl)}function ff(){switch($l){case 133:ql(147);break;case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 268:ql(143);break;case 281:ql(282);break;case 31:case 33:ql(245);break;case 87:case 103:ql(145);break;case 154:case 248:case 259:case 273:ql(95);break;default:Wl=$l}if(Wl!=6&&Wl!=8&&Wl!=9&&Wl!=10&&Wl!=11&&Wl!=32&&Wl!=35&&Wl!=36&&Wl!=41&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=54&&Wl!=55&&Wl!=56&&Wl!=60&&Wl!=69&&Wl!=71&&Wl!=73&&Wl!=74&&Wl!=75&&Wl!=76&&Wl!=78&&Wl!=79&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=83&&Wl!=84&&Wl!=85&&Wl!=86&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=92&&Wl!=94&&Wl!=95&&Wl!=97&&Wl!=98&&Wl!=99&&Wl!=102&&Wl!=104&&Wl!=105&&Wl!=106&&Wl!=107&&Wl!=109&&Wl!=110&&Wl!=111&&Wl!=112&&Wl!=113&&Wl!=114&&Wl!=119&&Wl!=120&&Wl!=121&&Wl!=122&&Wl!=123&&Wl!=124&&Wl!=125&&Wl!=126&&Wl!=127&&Wl!=129&&Wl!=130&&Wl!=132&&Wl!=134&&Wl!=135&&Wl!=136&&Wl!=137&&Wl!=138&&Wl!=142&&Wl!=143&&Wl!=147&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=155&&Wl!=156&&Wl!=157&&Wl!=161&&Wl!=162&&Wl!=163&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=167&&Wl!=168&&Wl!=169&&Wl!=170&&Wl!=173&&Wl!=174&&Wl!=175&&Wl!=179&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=185&&Wl!=187&&Wl!=188&&Wl!=189&&Wl!=194&&Wl!=195&&Wl!=196&&Wl!=197&&Wl!=198&&Wl!=202&&Wl!=203&&Wl!=204&&Wl!=205&&Wl!=206&&Wl!=207&&Wl!=210&&Wl!=216&&Wl!=217&&Wl!=220&&Wl!=222&&Wl!=223&&Wl!=224&&Wl!=225&&Wl!=226&&Wl!=228&&Wl!=229&&Wl!=230&&Wl!=231&&Wl!=232&&Wl!=233&&Wl!=234&&Wl!=239&&Wl!=240&&Wl!=241&&Wl!=242&&Wl!=245&&Wl!=247&&Wl!=249&&Wl!=253&&Wl!=254&&Wl!=255&&Wl!=257&&Wl!=258&&Wl!=260&&Wl!=262&&Wl!=263&&Wl!=266&&Wl!=267&&Wl!=269&&Wl!=272&&Wl!=276&&Wl!=283&&Wl!=10009&&Wl!=14935&&Wl!=14951&&Wl!=14981&&Wl!=14987&&Wl!=15002&&Wl!=15025&&Wl!=15096&&Wl!=15104&&Wl!=15107&&Wl!=15116&&Wl!=15121&&Wl!=16011&&Wl!=16049&&Wl!=16140&&Wl!=18007&&Wl!=18023&&Wl!=18053&&Wl!=18059&&Wl!=18074&&Wl!=18097&&Wl!=18168&&Wl!=18176&&Wl!=18179&&Wl!=18188&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=118961&&Wl!=122507&&Wl!=131723&&Wl!=144128&&Wl!=147225){Wl=uc(9,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{cf(),oc(9,t,-1),Wl=-15}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),pf(),oc(9,t,-2),Wl=-15}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),vf(),oc(9,t,-3),Wl=-15}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),If(),oc(9,t,-12),Wl=-15}catch(c){Wl=-13,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(9,t,-13)}}}}}}switch(Wl){case-2:pf();break;case-3:vf();break;case 91735:gf();break;case 91751:bf();break;case 115333:Ef();break;case 16011:case 16049:case 118961:case 122507:case 131723:xf();break;case 18074:kf();break;case 18168:Af();break;case 144128:Df();break;case 18179:Hf();break;case-12:case 16140:If();break;case-13:Rf();break;case 54:zf();break;case-15:break;default:cf()}}function lf(){ic.startNonterminal(\"ApplyStatement\",Vl),Vf(),Pl(54),ic.endNonterminal(\"ApplyStatement\",Vl)}function cf(){$f(),Hl(54)}function hf(){ic.startNonterminal(\"AssignStatement\",Vl),Pl(31),Il(245),jl(),Ti(),Il(28),Pl(53),Il(266),jl(),Wf(),Pl(54),ic.endNonterminal(\"AssignStatement\",Vl)}function pf(){Hl(31),Il(245),Ni(),Il(28),Hl(53),Il(266),Xf(),Hl(54)}function df(){ic.startNonterminal(\"BlockStatement\",Vl),Pl(281),Il(270),jl(),af(),Il(280),jl(),tf(),Pl(287),ic.endNonterminal(\"BlockStatement\",Vl)}function vf(){Hl(281),Il(270),ff(),Il(280),nf(),Hl(287)}function mf(){ic.startNonterminal(\"BreakStatement\",Vl),Pl(87),Il(62),Pl(179),Il(29),Pl(54),ic.endNonterminal(\"BreakStatement\",Vl)}function gf(){Hl(87),Il(62),Hl(179),Il(29),Hl(54)}function yf(){ic.startNonterminal(\"ContinueStatement\",Vl),Pl(103),Il(62),Pl(179),Il(29),Pl(54),ic.endNonterminal(\"ContinueStatement\",Vl)}function bf(){Hl(103),Il(62),Hl(179),Il(29),Hl(54)}function wf(){ic.startNonterminal(\"ExitStatement\",Vl),Pl(133),Il(74),Pl(225),Il(266),jl(),Wf(),Pl(54),ic.endNonterminal(\"ExitStatement\",Vl)}function Ef(){Hl(133),Il(74),Hl(225),Il(266),Xf(),Hl(54)}function Sf(){ic.startNonterminal(\"FLWORStatement\",Vl),tt();for(;;){Il(195);if($l==224)break;jl(),rt()}jl(),Tf(),ic.endNonterminal(\"FLWORStatement\",Vl)}function xf(){nt();for(;;){Il(195);if($l==224)break;it()}Nf()}function Tf(){ic.startNonterminal(\"ReturnStatement\",Vl),Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"ReturnStatement\",Vl)}function Nf(){Hl(224),Il(270),ff()}function Cf(){ic.startNonterminal(\"IfStatement\",Vl),Pl(154),Il(22),Pl(35),Il(266),jl(),G(),Pl(38),Il(80),Pl(250),Il(270),jl(),af(),Il(51),Pl(123),Il(270),jl(),af(),ic.endNonterminal(\"IfStatement\",Vl)}function kf(){Hl(154),Il(22),Hl(35),Il(266),Y(),Hl(38),Il(80),Hl(250),Il(270),ff(),Il(51),Hl(123),Il(270),ff()}function Lf(){ic.startNonterminal(\"SwitchStatement\",Vl),Pl(248),Il(22),Pl(35),Il(266),jl(),G(),Pl(38);for(;;){Il(38),jl(),Of(),Il(117);if($l!=89)break}Pl(110),Il(73),Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"SwitchStatement\",Vl)}function Af(){Hl(248),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),Mf(),Il(117);if($l!=89)break}Hl(110),Il(73),Hl(224),Il(270),ff()}function Of(){ic.startNonterminal(\"SwitchCaseStatement\",Vl);for(;;){Pl(89),Il(266),jl(),dn();if($l!=89)break}Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"SwitchCaseStatement\",Vl)}function Mf(){for(;;){Hl(89),Il(266),vn();if($l!=89)break}Hl(224),Il(270),ff()}function _f(){ic.startNonterminal(\"TryCatchStatement\",Vl),Pl(256),Il(90),jl(),df();for(;;){Il(39),Pl(92),Il(248),jl(),_n(),jl(),df(),Il(283);switch($l){case 92:ql(255);break;default:Wl=$l}if(Wl!=2652&&Wl!=3164&&Wl!=36444&&Wl!=37468&&Wl!=37980&&Wl!=38492&&Wl!=39004&&Wl!=40028&&Wl!=40540&&Wl!=41052&&Wl!=41564&&Wl!=42076&&Wl!=42588&&Wl!=43100&&Wl!=43612&&Wl!=44124&&Wl!=44636&&Wl!=45660&&Wl!=46172&&Wl!=46684&&Wl!=47196&&Wl!=48220&&Wl!=48732&&Wl!=49756&&Wl!=50268&&Wl!=50780&&Wl!=52316&&Wl!=52828&&Wl!=53340&&Wl!=53852&&Wl!=54364&&Wl!=54876&&Wl!=55900&&Wl!=56412&&Wl!=56924&&Wl!=57436&&Wl!=57948&&Wl!=58460&&Wl!=61020&&Wl!=61532&&Wl!=62044&&Wl!=62556&&Wl!=63068&&Wl!=63580&&Wl!=64092&&Wl!=64604&&Wl!=65116&&Wl!=66140&&Wl!=66652&&Wl!=67676&&Wl!=68188&&Wl!=68700&&Wl!=69212&&Wl!=69724&&Wl!=70236&&Wl!=70748&&Wl!=71260&&Wl!=72796&&Wl!=73308&&Wl!=75356&&Wl!=75868&&Wl!=76892&&Wl!=77916&&Wl!=78428&&Wl!=78940&&Wl!=79452&&Wl!=79964&&Wl!=80476&&Wl!=82524&&Wl!=83036&&Wl!=83548&&Wl!=84060&&Wl!=84572&&Wl!=85084&&Wl!=85596&&Wl!=86108&&Wl!=86620&&Wl!=87132&&Wl!=88668&&Wl!=89180&&Wl!=89692&&Wl!=90716&&Wl!=91740&&Wl!=92764&&Wl!=93788&&Wl!=94300&&Wl!=94812&&Wl!=95836&&Wl!=96348&&Wl!=96860&&Wl!=99420&&Wl!=99932&&Wl!=100956&&Wl!=101468&&Wl!=103516&&Wl!=104028&&Wl!=104540&&Wl!=105052&&Wl!=105564&&Wl!=106076&&Wl!=107612&&Wl!=110684&&Wl!=111196&&Wl!=112732&&Wl!=113756&&Wl!=114268&&Wl!=114780&&Wl!=115292&&Wl!=115804&&Wl!=116828&&Wl!=117340&&Wl!=117852&&Wl!=118364&&Wl!=118876&&Wl!=119388&&Wl!=119900&&Wl!=122460&&Wl!=122972&&Wl!=123484&&Wl!=123996&&Wl!=125532&&Wl!=126556&&Wl!=127068&&Wl!=127580&&Wl!=129628&&Wl!=130140&&Wl!=130652&&Wl!=131164&&Wl!=131676&&Wl!=132188&&Wl!=132700&&Wl!=133212&&Wl!=134236&&Wl!=134748&&Wl!=136284&&Wl!=136796&&Wl!=137308&&Wl!=137820&&Wl!=139356&&Wl!=139868&&Wl!=141404)break}ic.endNonterminal(\"TryCatchStatement\",Vl)}function Df(){Hl(256),Il(90),vf();for(;;){Il(39),Hl(92),Il(248),Dn(),vf(),Il(283);switch($l){case 92:ql(255);break;default:Wl=$l}if(Wl!=2652&&Wl!=3164&&Wl!=36444&&Wl!=37468&&Wl!=37980&&Wl!=38492&&Wl!=39004&&Wl!=40028&&Wl!=40540&&Wl!=41052&&Wl!=41564&&Wl!=42076&&Wl!=42588&&Wl!=43100&&Wl!=43612&&Wl!=44124&&Wl!=44636&&Wl!=45660&&Wl!=46172&&Wl!=46684&&Wl!=47196&&Wl!=48220&&Wl!=48732&&Wl!=49756&&Wl!=50268&&Wl!=50780&&Wl!=52316&&Wl!=52828&&Wl!=53340&&Wl!=53852&&Wl!=54364&&Wl!=54876&&Wl!=55900&&Wl!=56412&&Wl!=56924&&Wl!=57436&&Wl!=57948&&Wl!=58460&&Wl!=61020&&Wl!=61532&&Wl!=62044&&Wl!=62556&&Wl!=63068&&Wl!=63580&&Wl!=64092&&Wl!=64604&&Wl!=65116&&Wl!=66140&&Wl!=66652&&Wl!=67676&&Wl!=68188&&Wl!=68700&&Wl!=69212&&Wl!=69724&&Wl!=70236&&Wl!=70748&&Wl!=71260&&Wl!=72796&&Wl!=73308&&Wl!=75356&&Wl!=75868&&Wl!=76892&&Wl!=77916&&Wl!=78428&&Wl!=78940&&Wl!=79452&&Wl!=79964&&Wl!=80476&&Wl!=82524&&Wl!=83036&&Wl!=83548&&Wl!=84060&&Wl!=84572&&Wl!=85084&&Wl!=85596&&Wl!=86108&&Wl!=86620&&Wl!=87132&&Wl!=88668&&Wl!=89180&&Wl!=89692&&Wl!=90716&&Wl!=91740&&Wl!=92764&&Wl!=93788&&Wl!=94300&&Wl!=94812&&Wl!=95836&&Wl!=96348&&Wl!=96860&&Wl!=99420&&Wl!=99932&&Wl!=100956&&Wl!=101468&&Wl!=103516&&Wl!=104028&&Wl!=104540&&Wl!=105052&&Wl!=105564&&Wl!=106076&&Wl!=107612&&Wl!=110684&&Wl!=111196&&Wl!=112732&&Wl!=113756&&Wl!=114268&&Wl!=114780&&Wl!=115292&&Wl!=115804&&Wl!=116828&&Wl!=117340&&Wl!=117852&&Wl!=118364&&Wl!=118876&&Wl!=119388&&Wl!=119900&&Wl!=122460&&Wl!=122972&&Wl!=123484&&Wl!=123996&&Wl!=125532&&Wl!=126556&&Wl!=127068&&Wl!=127580&&Wl!=129628&&Wl!=130140&&Wl!=130652&&Wl!=131164&&Wl!=131676&&Wl!=132188&&Wl!=132700&&Wl!=133212&&Wl!=134236&&Wl!=134748&&Wl!=136284&&Wl!=136796&&Wl!=137308&&Wl!=137820&&Wl!=139356&&Wl!=139868&&Wl!=141404)break}}function Pf(){ic.startNonterminal(\"TypeswitchStatement\",Vl),Pl(259),Il(22),Pl(35),Il(266),jl(),G(),Pl(38);for(;;){Il(38),jl(),Bf(),Il(117);if($l!=89)break}Pl(110),Il(99),$l==31&&(Pl(31),Il(245),jl(),Ti()),Il(73),Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"TypeswitchStatement\",Vl)}function Hf(){Hl(259),Il(22),Hl(35),Il(266),Y(),Hl(38);for(;;){Il(38),jf(),Il(117);if($l!=89)break}Hl(110),Il(99),$l==31&&(Hl(31),Il(245),Ni()),Il(73),Hl(224),Il(270),ff()}function Bf(){ic.startNonterminal(\"CaseStatement\",Vl),Pl(89),Il(257),$l==31&&(Pl(31),Il(245),jl(),Ti(),Il(33),Pl(80)),Il(253),jl(),Ls(),Il(73),Pl(224),Il(270),jl(),af(),ic.endNonterminal(\"CaseStatement\",Vl)}function jf(){Hl(89),Il(257),$l==31&&(Hl(31),Il(245),Ni(),Il(33),Hl(80)),Il(253),As(),Il(73),Hl(224),Il(270),ff()}function Ff(){ic.startNonterminal(\"VarDeclStatement\",Vl);for(;;){Il(102);if($l!=33)break;jl(),B()}Pl(268),Il(21),Pl(31),Il(245),jl(),Ti(),Il(172),$l==80&&(jl(),Cs()),Il(155),$l==53&&(Pl(53),Il(266),jl(),Wf());for(;;){if($l!=42)break;Pl(42),Il(21),Pl(31),Il(245),jl(),Ti(),Il(172),$l==80&&(jl(),Cs()),Il(155),$l==53&&(Pl(53),Il(266),jl(),Wf())}Pl(54),ic.endNonterminal(\"VarDeclStatement\",Vl)}function If(){for(;;){Il(102);if($l!=33)break;j()}Hl(268),Il(21),Hl(31),Il(245),Ni(),Il(172),$l==80&&ks(),Il(155),$l==53&&(Hl(53),Il(266),Xf());for(;;){if($l!=42)break;Hl(42),Il(21),Hl(31),Il(245),Ni(),Il(172),$l==80&&ks(),Il(155),$l==53&&(Hl(53),Il(266),Xf())}Hl(54)}function qf(){ic.startNonterminal(\"WhileStatement\",Vl),Pl(273),Il(22),Pl(35),Il(266),jl(),G(),Pl(38),Il(270),jl(),af(),ic.endNonterminal(\"WhileStatement\",Vl)}function Rf(){Hl(273),Il(22),Hl(35),Il(266),Y(),Hl(38),Il(270),ff()}function Uf(){ic.startNonterminal(\"VoidStatement\",Vl),Pl(54),ic.endNonterminal(\"VoidStatement\",Vl)}function zf(){Hl(54)}function Wf(){ic.startNonterminal(\"ExprSingle\",Vl);switch($l){case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 154:case 248:case 259:ql(95);break;default:Wl=$l}switch(Wl){case 16011:case 16049:case 118961:case 122507:case 131723:Z();break;case 18074:Sn();break;case 18168:ln();break;case 144128:Tn();break;case 18179:mn();break;default:Vf()}ic.endNonterminal(\"ExprSingle\",Vl)}function Xf(){switch($l){case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 154:case 248:case 259:ql(95);break;default:Wl=$l}switch(Wl){case 16011:case 16049:case 118961:case 122507:case 131723:et();break;case 18074:xn();break;case 18168:cn();break;case 144128:Nn();break;case 18179:gn();break;default:$f()}}function Vf(){ic.startNonterminal(\"ExprSimple\",Vl);switch($l){case 78:ql(268);break;case 161:ql(275);break;case 223:ql(170);break;case 111:case 222:ql(260);break;case 104:case 130:case 240:ql(143);break;default:Wl=$l}if(Wl==17998||Wl==18031||Wl==18081||Wl==18142||Wl==99439||Wl==99489||Wl==99550||Wl==99951||Wl==100001||Wl==136927){Wl=uc(10,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hn(),Wl=-2}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),zo(),Wl=-3}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Xo(),Wl=-4}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ko(),Wl=-5}catch(c){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),$o(),Wl=-6}catch(h){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Kf(),Wl=-8}catch(p){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Gf(),Wl=-9}catch(d){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Zf(),Wl=-10}catch(v){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),tl(),Wl=-11}catch(m){Wl=-12}}}}}}}}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(10,Vl,Wl)}}switch(Wl){case 16002:case 16112:on();break;case-3:Uo();break;case-4:Wo();break;case-5:Jo();break;case-6:case 99551:Vo();break;case 15976:nu();break;case-8:case 3183:case 4207:case 4719:case 5231:case 5743:case 15983:case 16495:case 17007:case 28271:case 28783:case 30831:case 35439:case 36463:case 37487:case 37999:case 38511:case 39023:case 40047:case 40559:case 41071:case 41583:case 42095:case 42607:case 43119:case 43631:case 44143:case 44655:case 45679:case 46191:case 46703:case 47215:case 48239:case 48751:case 49775:case 50287:case 50799:case 52335:case 52847:case 53359:case 53871:case 54383:case 54895:case 55919:case 56431:case 56943:case 57455:case 57967:case 58479:case 61039:case 61551:case 62063:case 62575:case 63087:case 63599:case 64111:case 64623:case 65135:case 66159:case 66671:case 67695:case 68207:case 68719:case 69231:case 69743:case 70255:case 70767:case 71279:case 72815:case 73327:case 75375:case 75887:case 76911:case 77935:case 78447:case 78959:case 79471:case 79983:case 80495:case 82543:case 83055:case 83567:case 84079:case 84591:case 85103:case 85615:case 86127:case 86639:case 87151:case 88687:case 89199:case 89711:case 90735:case 91759:case 92783:case 93807:case 94319:case 94831:case 95855:case 96367:case 96879:case 100975:case 101487:case 103535:case 104047:case 104559:case 105071:case 105583:case 106095:case 107631:case 110703:case 111215:case 112751:case 113775:case 114287:case 114799:case 115311:case 115823:case 116847:case 117359:case 117871:case 118383:case 118895:case 119407:case 119919:case 122479:case 122991:case 123503:case 124015:case 125551:case 126575:case 127087:case 127599:case 129647:case 130159:case 130671:case 131183:case 131695:case 132207:case 132719:case 133231:case 134255:case 134767:case 136303:case 136815:case 137327:case 137839:case 139375:case 139887:case 141423:case 143983:case 145007:Jf();break;case-9:case 3233:case 4257:case 4769:case 5281:case 5793:case 9889:case 16033:case 16545:case 17057:case 18593:case 21153:case 22177:case 24225:case 24737:case 28321:case 28833:case 30881:case 35489:case 36513:case 37537:case 38049:case 38561:case 39073:case 40097:case 40609:case 41121:case 41633:case 42145:case 42657:case 43169:case 43681:case 44193:case 44705:case 45729:case 46241:case 46753:case 47265:case 48289:case 48801:case 49825:case 50337:case 50849:case 52385:case 52897:case 53409:case 53921:case 54433:case 54945:case 55969:case 56481:case 56993:case 57505:case 58017:case 58529:case 61089:case 61601:case 62113:case 62625:case 63137:case 63649:case 64161:case 64673:case 65185:case 66209:case 66721:case 67745:case 68257:case 68769:case 69281:case 69793:case 70305:case 70817:case 71329:case 72865:case 73377:case 75425:case 75937:case 76961:case 77985:case 78497:case 79009:case 79521:case 80033:case 80545:case 82593:case 83105:case 83617:case 84129:case 84641:case 85153:case 85665:case 86177:case 86689:case 87201:case 88737:case 89249:case 89761:case 90785:case 91809:case 92833:case 93857:case 94369:case 94881:case 95905:case 96417:case 96929:case 100513:case 101025:case 101537:case 103585:case 104097:case 104609:case 105121:case 105633:case 106145:case 107681:case 110753:case 111265:case 112801:case 113825:case 114337:case 114849:case 115361:case 115873:case 116897:case 117409:case 117921:case 118433:case 118945:case 119457:case 119969:case 122529:case 123041:case 123553:case 124065:case 125601:case 126625:case 127137:case 127649:case 129697:case 130209:case 130721:case 131233:case 131745:case 132257:case 132769:case 133281:case 134305:case 134817:case 136353:case 136865:case 137377:case 137889:case 139425:case 139937:case 141473:case 144033:case 145057:Qf();break;case-10:case 3294:case 4318:case 4830:case 5342:case 5854:case 16094:case 16606:case 17118:case 28382:case 28894:case 30942:case 35550:case 36574:case 37598:case 38110:case 38622:case 39134:case 40158:case 40670:case 41182:case 41694:case 42206:case 42718:case 43230:case 43742:case 44254:case 44766:case 45790:case 46302:case 46814:case 47326:case 48350:case 48862:case 49886:case 50398:case 50910:case 52446:case 52958:case 53470:case 53982:case 54494:case 55006:case 56030:case 56542:case 57054:case 57566:case 58078:case 58590:case 61150:case 61662:case 62174:case 62686:case 63198:case 63710:case 64222:case 64734:case 65246:case 66270:case 66782:case 67806:case 68318:case 68830:case 69342:case 69854:case 70366:case 70878:case 71390:case 72926:case 73438:case 75486:case 75998:case 77022:case 78046:case 78558:case 79070:case 79582:case 80094:case 80606:case 82654:case 83166:case 83678:case 84190:case 84702:case 85214:case 85726:case 86238:case 86750:case 87262:case 88798:case 89310:case 89822:case 90846:case 91870:case 92894:case 93918:case 94430:case 94942:case 95966:case 96478:case 96990:case 100062:case 101086:case 101598:case 103646:case 104158:case 104670:case 105182:case 105694:case 106206:case 107742:case 110814:case 111326:case 112862:case 113886:case 114398:case 114910:case 115422:case 115934:case 116958:case 117470:case 117982:case 118494:case 119006:case 119518:case 120030:case 122590:case 123102:case 123614:case 124126:case 125662:case 126686:case 127198:case 127710:case 129758:case 130270:case 130782:case 131294:case 131806:case 132318:case 132830:case 133342:case 134366:case 134878:case 136414:case 136926:case 137438:case 137950:case 139486:case 139998:case 141534:case 144094:case 145118:Yf();break;case-11:el();break;case-12:case 3150:case 4174:case 4686:case 5198:case 5710:case 15950:case 16462:case 16974:case 18510:case 21070:case 22094:case 24142:case 24654:case 28238:case 28750:case 30798:case 35406:case 36430:case 37454:case 37966:case 38478:case 38990:case 40014:case 40526:case 41038:case 41550:case 42062:case 42574:case 43086:case 43598:case 44110:case 44622:case 45646:case 46158:case 46670:case 47182:case 48206:case 48718:case 49742:case 50254:case 50766:case 52302:case 52814:case 53326:case 53838:case 54350:case 54862:case 55886:case 56398:case 56910:case 57422:case 57934:case 58446:case 61006:case 61518:case 62030:case 62542:case 63054:case 63566:case 64078:case 64590:case 65102:case 66126:case 66638:case 67662:case 68174:case 68686:case 69198:case 69710:case 70222:case 70734:case 71246:case 72782:case 73294:case 75342:case 75854:case 76878:case 77902:case 78414:case 78926:case 79438:case 79950:case 80462:case 82510:case 83022:case 83534:case 84046:case 84558:case 85070:case 85582:case 86094:case 86606:case 87118:case 88654:case 89166:case 89678:case 90702:case 91726:case 92750:case 93774:case 94286:case 94798:case 95822:case 96334:case 96846:case 99406:case 99918:case 100430:case 100942:case 101454:case 103502:case 104014:case 104526:case 105038:case 105550:case 106062:case 107598:case 110670:case 111182:case 112718:case 113742:case 114254:case 114766:case 115278:case 115790:case 116814:case 117326:case 117838:case 118350:case 118862:case 119374:case 119886:case 122446:case 122958:case 123470:case 123982:case 125518:case 126542:case 127054:case 127566:case 129614:case 130126:case 130638:case 131150:case 131662:case 132174:case 132686:case 133198:case 134222:case 134734:case 136270:case 136782:case 137294:case 137806:case 139342:case 139854:case 141390:case 143950:case 144974:nl();break;default:Pn()}ic.endNonterminal(\"ExprSimple\",Vl)}function $f(){switch($l){case 78:ql(268);break;case 161:ql(275);break;case 223:ql(170);break;case 111:case 222:ql(260);break;case 104:case 130:case 240:ql(143);break;default:Wl=$l}if(Wl==17998||Wl==18031||Wl==18081||Wl==18142||Wl==99439||Wl==99489||Wl==99550||Wl==99951||Wl==100001||Wl==136927){Wl=uc(10,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hn(),oc(10,t,-2),Wl=-13}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),zo(),oc(10,t,-3),Wl=-13}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Xo(),oc(10,t,-4),Wl=-13}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ko(),oc(10,t,-5),Wl=-13}catch(c){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),$o(),oc(10,t,-6),Wl=-13}catch(h){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Kf(),oc(10,t,-8),Wl=-13}catch(p){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Gf(),oc(10,t,-9),Wl=-13}catch(d){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Zf(),oc(10,t,-10),Wl=-13}catch(v){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),tl(),oc(10,t,-11),Wl=-13}catch(m){Wl=-12,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(10,t,-12)}}}}}}}}}}}switch(Wl){case 16002:case 16112:un();break;case-3:zo();break;case-4:Xo();break;case-5:Ko();break;case-6:case 99551:$o();break;case 15976:ru();break;case-8:case 3183:case 4207:case 4719:case 5231:case 5743:case 15983:case 16495:case 17007:case 28271:case 28783:case 30831:case 35439:case 36463:case 37487:case 37999:case 38511:case 39023:case 40047:case 40559:case 41071:case 41583:case 42095:case 42607:case 43119:case 43631:case 44143:case 44655:case 45679:case 46191:case 46703:case 47215:case 48239:case 48751:case 49775:case 50287:case 50799:case 52335:case 52847:case 53359:case 53871:case 54383:case 54895:case 55919:case 56431:case 56943:case 57455:case 57967:case 58479:case 61039:case 61551:case 62063:case 62575:case 63087:case 63599:case 64111:case 64623:case 65135:case 66159:case 66671:case 67695:case 68207:case 68719:case 69231:case 69743:case 70255:case 70767:case 71279:case 72815:case 73327:case 75375:case 75887:case 76911:case 77935:case 78447:case 78959:case 79471:case 79983:case 80495:case 82543:case 83055:case 83567:case 84079:case 84591:case 85103:case 85615:case 86127:case 86639:case 87151:case 88687:case 89199:case 89711:case 90735:case 91759:case 92783:case 93807:case 94319:case 94831:case 95855:case 96367:case 96879:case 100975:case 101487:case 103535:case 104047:case 104559:case 105071:case 105583:case 106095:case 107631:case 110703:case 111215:case 112751:case 113775:case 114287:case 114799:case 115311:case 115823:case 116847:case 117359:case 117871:case 118383:case 118895:case 119407:case 119919:case 122479:case 122991:case 123503:case 124015:case 125551:case 126575:case 127087:case 127599:case 129647:case 130159:case 130671:case 131183:case 131695:case 132207:case 132719:case 133231:case 134255:case 134767:case 136303:case 136815:case 137327:case 137839:case 139375:case 139887:case 141423:case 143983:case 145007:Kf();break;case-9:case 3233:case 4257:case 4769:case 5281:case 5793:case 9889:case 16033:case 16545:case 17057:case 18593:case 21153:case 22177:case 24225:case 24737:case 28321:case 28833:case 30881:case 35489:case 36513:case 37537:case 38049:case 38561:case 39073:case 40097:case 40609:case 41121:case 41633:case 42145:case 42657:case 43169:case 43681:case 44193:case 44705:case 45729:case 46241:case 46753:case 47265:case 48289:case 48801:case 49825:case 50337:case 50849:case 52385:case 52897:case 53409:case 53921:case 54433:case 54945:case 55969:case 56481:case 56993:case 57505:case 58017:case 58529:case 61089:case 61601:case 62113:case 62625:case 63137:case 63649:case 64161:case 64673:case 65185:case 66209:case 66721:case 67745:case 68257:case 68769:case 69281:case 69793:case 70305:case 70817:case 71329:case 72865:case 73377:case 75425:case 75937:case 76961:case 77985:case 78497:case 79009:case 79521:case 80033:case 80545:case 82593:case 83105:case 83617:case 84129:case 84641:case 85153:case 85665:case 86177:case 86689:case 87201:case 88737:case 89249:case 89761:case 90785:case 91809:case 92833:case 93857:case 94369:case 94881:case 95905:case 96417:case 96929:case 100513:case 101025:case 101537:case 103585:case 104097:case 104609:case 105121:case 105633:case 106145:case 107681:case 110753:case 111265:case 112801:case 113825:case 114337:case 114849:case 115361:case 115873:case 116897:case 117409:case 117921:case 118433:case 118945:case 119457:case 119969:case 122529:case 123041:case 123553:case 124065:case 125601:case 126625:case 127137:case 127649:case 129697:case 130209:case 130721:case 131233:case 131745:case 132257:case 132769:case 133281:case 134305:case 134817:case 136353:case 136865:case 137377:case 137889:case 139425:case 139937:case 141473:case 144033:case 145057:Gf();break;case-10:case 3294:case 4318:case 4830:case 5342:case 5854:case 16094:case 16606:case 17118:case 28382:case 28894:case 30942:case 35550:case 36574:case 37598:case 38110:case 38622:case 39134:case 40158:case 40670:case 41182:case 41694:case 42206:case 42718:case 43230:case 43742:case 44254:case 44766:case 45790:case 46302:case 46814:case 47326:case 48350:case 48862:case 49886:case 50398:case 50910:case 52446:case 52958:case 53470:case 53982:case 54494:case 55006:case 56030:case 56542:case 57054:case 57566:case 58078:case 58590:case 61150:case 61662:case 62174:case 62686:case 63198:case 63710:case 64222:case 64734:case 65246:case 66270:case 66782:case 67806:case 68318:case 68830:case 69342:case 69854:case 70366:case 70878:case 71390:case 72926:case 73438:case 75486:case 75998:case 77022:case 78046:case 78558:case 79070:case 79582:case 80094:case 80606:case 82654:case 83166:case 83678:case 84190:case 84702:case 85214:case 85726:case 86238:case 86750:case 87262:case 88798:case 89310:case 89822:case 90846:case 91870:case 92894:case 93918:case 94430:case 94942:case 95966:case 96478:case 96990:case 100062:case 101086:case 101598:case 103646:case 104158:case 104670:case 105182:case 105694:case 106206:case 107742:case 110814:case 111326:case 112862:case 113886:case 114398:case 114910:case 115422:case 115934:case 116958:case 117470:case 117982:case 118494:case 119006:case 119518:case 120030:case 122590:case 123102:case 123614:case 124126:case 125662:case 126686:case 127198:case 127710:case 129758:case 130270:case 130782:case 131294:case 131806:case 132318:case 132830:case 133342:case 134366:case 134878:case 136414:case 136926:case 137438:case 137950:case 139486:case 139998:case 141534:case 144094:case 145118:Zf();break;case-11:tl();break;case-12:case 3150:case 4174:case 4686:case 5198:case 5710:case 15950:case 16462:case 16974:case 18510:case 21070:case 22094:case 24142:case 24654:case 28238:case 28750:case 30798:case 35406:case 36430:case 37454:case 37966:case 38478:case 38990:case 40014:case 40526:case 41038:case 41550:case 42062:case 42574:case 43086:case 43598:case 44110:case 44622:case 45646:case 46158:case 46670:case 47182:case 48206:case 48718:case 49742:case 50254:case 50766:case 52302:case 52814:case 53326:case 53838:case 54350:case 54862:case 55886:case 56398:case 56910:case 57422:case 57934:case 58446:case 61006:case 61518:case 62030:case 62542:case 63054:case 63566:case 64078:case 64590:case 65102:case 66126:case 66638:case 67662:case 68174:case 68686:case 69198:case 69710:case 70222:case 70734:case 71246:case 72782:case 73294:case 75342:case 75854:case 76878:case 77902:case 78414:case 78926:case 79438:case 79950:case 80462:case 82510:case 83022:case 83534:case 84046:case 84558:case 85070:case 85582:case 86094:case 86606:case 87118:case 88654:case 89166:case 89678:case 90702:case 91726:case 92750:case 93774:case 94286:case 94798:case 95822:case 96334:case 96846:case 99406:case 99918:case 100430:case 100942:case 101454:case 103502:case 104014:case 104526:case 105038:case 105550:case 106062:case 107598:case 110670:case 111182:case 112718:case 113742:case 114254:case 114766:case 115278:case 115790:case 116814:case 117326:case 117838:case 118350:case 118862:case 119374:case 119886:case 122446:case 122958:case 123470:case 123982:case 125518:case 126542:case 127054:case 127566:case 129614:case 130126:case 130638:case 131150:case 131662:case 132174:case 132686:case 133198:case 134222:case 134734:case 136270:case 136782:case 137294:case 137806:case 139342:case 139854:case 141390:case 143950:case 144974:rl();break;case-13:break;default:Hn()}}function Jf(){ic.startNonterminal(\"JSONDeleteExpr\",Vl),Pl(111),Il(259);switch($l){case 168:ql(260);break;default:Wl=$l}if(Wl==18088){Wl=uc(11,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(11,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(259),jl(),ei(),ic.endNonterminal(\"JSONDeleteExpr\",Vl)}function Kf(){Hl(111),Il(259);switch($l){case 168:ql(260);break;default:Wl=$l}if(Wl==18088){Wl=uc(11,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),oc(11,t,-1)}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(11,t,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(259),ti()}function Qf(){ic.startNonterminal(\"JSONInsertExpr\",Vl);switch($l){case 161:ql(267);break;default:Wl=$l}if(Wl!=9889){Wl=uc(12,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(161),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(13,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(266),Xf(),Hl(165),Il(266),Xf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(266),Xf(),oc(14,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,f,-2)}Wl=-2}}Wl==-1&&(Hl(82),Il(72),Hl(215),Il(266),Xf()),Wl=-1}catch(g){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(12,Vl,Wl)}}switch(Wl){case-1:Pl(161),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),Wl=-1}catch(m){Wl=-2}Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(266),jl(),Wf(),Pl(165),Il(266),jl(),Wf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(266),Xf(),Wl=-1}catch(m){Wl=-2}Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,Vl,Wl)}}Wl==-1&&(Pl(82),Il(72),Pl(215),Il(266),jl(),Wf());break;default:Pl(161),Il(267);switch($l){case 168:ql(281);break;default:Wl=$l}if(Wl==18088){Wl=uc(15,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),Wl=-1}catch(m){Wl=-2}Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(15,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==9896||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(267),jl(),Tl(),Pl(165),Il(266),jl(),Wf()}ic.endNonterminal(\"JSONInsertExpr\",Vl)}function Gf(){switch($l){case 161:ql(267);break;default:Wl=$l}if(Wl!=9889){Wl=uc(12,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(161),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(13,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(266),Xf(),Hl(165),Il(266),Xf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(266),Xf(),oc(14,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,f,-2)}Wl=-2}}Wl==-1&&(Hl(82),Il(72),Hl(215),Il(266),Xf()),oc(12,t,-1),Wl=-3}catch(g){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(12,t,-2)}}}switch(Wl){case-1:Hl(161),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(13,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(266),Xf(),Hl(165),Il(266),Xf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(266),Xf(),oc(14,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,f,-2)}Wl=-2}}Wl==-1&&(Hl(82),Il(72),Hl(215),Il(266),Xf());break;case-3:break;default:Hl(161),Il(267);switch($l){case 168:ql(281);break;default:Wl=$l}if(Wl==18088){Wl=uc(15,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(15,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(15,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==9896||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(267),Nl(),Hl(165),Il(266),Xf()}}function Yf(){ic.startNonterminal(\"JSONRenameExpr\",Vl),Pl(222),Il(259);switch($l){case 168:ql(260);break;default:Wl=$l}if(Wl==18088){Wl=uc(16,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(16,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(259),jl(),ei(),Pl(80),Il(266),jl(),Wf(),ic.endNonterminal(\"JSONRenameExpr\",Vl)}function Zf(){Hl(222),Il(259);switch($l){case 168:ql(260);break;default:Wl=$l}if(Wl==18088){Wl=uc(16,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),oc(16,t,-1)}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(16,t,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(259),ti(),Hl(80),Il(266),Xf()}function el(){ic.startNonterminal(\"JSONReplaceExpr\",Vl),Pl(223),Il(85),Pl(267),Il(67),Pl(200),Il(59),Pl(168),Il(259),jl(),ei(),Pl(276),Il(266),jl(),Wf(),ic.endNonterminal(\"JSONReplaceExpr\",Vl)}function tl(){Hl(223),Il(85),Hl(267),Il(67),Hl(200),Il(59),Hl(168),Il(259),ti(),Hl(276),Il(266),Xf()}function nl(){ic.startNonterminal(\"JSONAppendExpr\",Vl),Pl(78),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(17,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(17,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(266),jl(),Wf(),Pl(165),Il(266),jl(),Wf(),ic.endNonterminal(\"JSONAppendExpr\",Vl)}function rl(){Hl(78),Il(266);switch($l){case 168:ql(268);break;default:Wl=$l}if(Wl==18088){Wl=uc(17,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),oc(17,t,-1)}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(17,t,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(266),Xf(),Hl(165),Il(266),Xf()}function il(){ic.startNonterminal(\"CommonContent\",Vl);switch($l){case 12:Pl(12);break;case 23:Pl(23);break;case 282:Pl(282);break;case 288:Pl(288);break;default:Ol()}ic.endNonterminal(\"CommonContent\",Vl)}function sl(){switch($l){case 12:Hl(12);break;case 23:Hl(23);break;case 282:Hl(282);break;case 288:Hl(288);break;default:Ml()}}function ol(){ic.startNonterminal(\"ContentExpr\",Vl),rf(),ic.endNonterminal(\"ContentExpr\",Vl)}function ul(){sf()}function al(){ic.startNonterminal(\"CompDocConstructor\",Vl),Pl(120),Il(90),jl(),Ol(),ic.endNonterminal(\"CompDocConstructor\",Vl)}function fl(){Hl(120),Il(90),Ml()}function ll(){ic.startNonterminal(\"CompAttrConstructor\",Vl),Pl(83),Il(249);switch($l){case 281:Pl(281),Il(266),jl(),G(),Pl(287);break;default:jl(),$a()}Il(90);switch($l){case 281:ql(280);break;default:Wl=$l}if(Wl==147225){Wl=uc(18,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(18,Vl,Wl)}}switch(Wl){case-1:Pl(281),Il(91),Pl(287);break;default:jl(),Ol()}ic.endNonterminal(\"CompAttrConstructor\",Vl)}function cl(){Hl(83),Il(249);switch($l){case 281:Hl(281),Il(266),Y(),Hl(287);break;default:Ja()}Il(90);switch($l){case 281:ql(280);break;default:Wl=$l}if(Wl==147225){Wl=uc(18,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),oc(18,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(18,t,-2)}}}switch(Wl){case-1:Hl(281),Il(91),Hl(287);break;case-3:break;default:Ml()}}function hl(){ic.startNonterminal(\"CompPIConstructor\",Vl),Pl(220),Il(241);switch($l){case 281:Pl(281),Il(266),jl(),G(),Pl(287);break;default:jl(),Ga()}Il(90);switch($l){case 281:ql(280);break;default:Wl=$l}if(Wl==147225){Wl=uc(19,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(19,Vl,Wl)}}switch(Wl){case-1:Pl(281),Il(91),Pl(287);break;default:jl(),Ol()}ic.endNonterminal(\"CompPIConstructor\",Vl)}function pl(){Hl(220),Il(241);switch($l){case 281:Hl(281),Il(266),Y(),Hl(287);break;default:Ya()}Il(90);switch($l){case 281:ql(280);break;default:Wl=$l}if(Wl==147225){Wl=uc(19,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),oc(19,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(19,t,-2)}}}switch(Wl){case-1:Hl(281),Il(91),Hl(287);break;case-3:break;default:Ml()}}function dl(){ic.startNonterminal(\"CompCommentConstructor\",Vl),Pl(97),Il(90),jl(),Ol(),ic.endNonterminal(\"CompCommentConstructor\",Vl)}function vl(){Hl(97),Il(90),Ml()}function ml(){ic.startNonterminal(\"CompTextConstructor\",Vl),Pl(249),Il(90),jl(),Ol(),ic.endNonterminal(\"CompTextConstructor\",Vl)}function gl(){Hl(249),Il(90),Ml()}function yl(){ic.startNonterminal(\"PrimaryExpr\",Vl);switch($l){case 187:ql(246);break;case 220:ql(244);break;case 281:ql(282);break;case 83:case 122:ql(252);break;case 97:case 249:ql(97);break;case 120:case 206:case 262:ql(148);break;case 135:case 197:case 255:ql(236);break;case 6:case 71:case 73:case 74:case 75:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 137:case 138:case 139:case 142:case 143:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl==3353||Wl==4377||Wl==4889||Wl==5401||Wl==5913||Wl==16153||Wl==16665||Wl==17177||Wl==18055||Wl==18117||Wl==18175||Wl==18201||Wl==18713||Wl==21273||Wl==22297||Wl==24345||Wl==24857||Wl==28441||Wl==28953||Wl==31001||Wl==35609||Wl==36633||Wl==37657||Wl==38169||Wl==38681||Wl==39193||Wl==40217||Wl==40729||Wl==41241||Wl==41753||Wl==42265||Wl==42777||Wl==43289||Wl==43801||Wl==44313||Wl==44825||Wl==45849||Wl==46361||Wl==46873||Wl==47385||Wl==48409||Wl==48921||Wl==49945||Wl==50457||Wl==50969||Wl==52505||Wl==53017||Wl==53529||Wl==54041||Wl==54553||Wl==55065||Wl==56089||Wl==56601||Wl==57113||Wl==57625||Wl==58137||Wl==58649||Wl==61209||Wl==61721||Wl==62233||Wl==62745||Wl==63257||Wl==63769||Wl==64281||Wl==64793||Wl==65305||Wl==66329||Wl==66841||Wl==67865||Wl==68377||Wl==68889||Wl==69401||Wl==69913||Wl==70425||Wl==70937||Wl==71449||Wl==72985||Wl==73497||Wl==75545||Wl==76057||Wl==77081||Wl==78105||Wl==78617||Wl==79129||Wl==79641||Wl==80153||Wl==80665||Wl==82713||Wl==83225||Wl==83737||Wl==84249||Wl==84761||Wl==85273||Wl==85785||Wl==86297||Wl==86809||Wl==87321||Wl==88857||Wl==89369||Wl==89881||Wl==90905||Wl==91929||Wl==92953||Wl==93977||Wl==94489||Wl==95001||Wl==96025||Wl==96537||Wl==97049||Wl==99609||Wl==100121||Wl==100633||Wl==101145||Wl==101657||Wl==103705||Wl==104217||Wl==104729||Wl==105241||Wl==105753||Wl==106265||Wl==107801||Wl==110873||Wl==111385||Wl==112921||Wl==113945||Wl==114457||Wl==114969||Wl==115481||Wl==115993||Wl==117017||Wl==117529||Wl==118041||Wl==118553||Wl==119065||Wl==119577||Wl==120089||Wl==122649||Wl==123161||Wl==123673||Wl==124185||Wl==125721||Wl==126745||Wl==127257||Wl==127769||Wl==129817||Wl==130329||Wl==130841||Wl==131353||Wl==131865||Wl==132377||Wl==132889||Wl==133401||Wl==134425||Wl==134937||Wl==136473||Wl==136985||Wl==137497||Wl==138009||Wl==139545||Wl==140057||Wl==141593||Wl==144153||Wl==145177||Wl==147225){Wl=uc(20,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{vi(),Wl=-1}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hi(),Wl=-5}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ml(),Wl=-10}catch(l){Wl=-11}}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(20,Vl,Wl)}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 12935:case 12997:case 13055:case 13447:case 13509:case 13567:case 13959:case 14021:case 14079:case 19591:case 19653:case 19711:case 20103:case 20165:case 20223:case 21127:case 21189:case 21247:case 21639:case 21701:case 21759:case 22151:case 22213:case 22271:case 23175:case 23237:case 23295:case 24199:case 24261:case 24319:case 24711:case 24773:case 24831:case 25735:case 25797:case 25855:case 27783:case 27845:case 27903:case 28295:case 28357:case 28415:case 29831:case 29893:case 29951:case 30343:case 30405:case 30463:case 31367:case 31429:case 31487:case 31879:case 31941:case 31999:case 32391:case 32453:case 32511:case 32903:case 32965:case 33023:case 35463:case 35525:case 35583:case 35975:case 36037:case 36095:case 36487:case 36549:case 36607:case 39047:case 39109:case 39167:case 41095:case 41157:case 41215:case 41607:case 41669:case 41727:case 42119:case 42181:case 42239:case 43655:case 43717:case 43775:case 45191:case 45253:case 45311:case 45703:case 45765:case 45823:case 46215:case 46277:case 46335:case 46727:case 46789:case 46847:case 48775:case 48837:case 48895:case 51335:case 51397:case 51455:case 54407:case 54469:case 54527:case 56455:case 56517:case 56575:case 58503:case 58565:case 58623:case 61063:case 61125:case 61183:case 63111:case 63173:case 63231:case 63623:case 63685:case 63743:case 65159:case 65221:case 65279:case 66183:case 66245:case 66303:case 67719:case 67781:case 67839:case 71303:case 71365:case 71423:case 75911:case 75973:case 76031:case 76935:case 76997:case 77055:case 77959:case 78021:case 78079:case 78471:case 78533:case 78591:case 83079:case 83141:case 83199:case 84103:case 84165:case 84223:case 84615:case 84677:case 84735:case 85127:case 85189:case 85247:case 89735:case 89797:case 89855:case 90759:case 90821:case 90879:case 92807:case 92869:case 92927:case 93831:case 93893:case 93951:case 94343:case 94405:case 94463:case 96903:case 96965:case 97023:case 103559:case 103621:case 103679:case 104583:case 104645:case 104703:case 105095:case 105157:case 105215:case 107143:case 107205:case 107263:case 114823:case 114885:case 114943:case 116871:case 116933:case 116991:case 121479:case 121541:case 121599:case 123527:case 123589:case 123647:case 124039:case 124101:case 124159:case 129159:case 129221:case 129279:case 129671:case 129733:case 129791:case 130183:case 130245:case 130303:case 133255:case 133317:case 133375:case 139399:case 139461:case 139519:case 141447:case 141509:case 141567:case 142983:case 143045:case 143103:case 145543:case 145605:case 145663:case 146055:case 146117:case 146175:case 146567:case 146629:case 146687:case 147079:case 147141:case 147199:di();break;case 31:Si();break;case 35:Ci();break;case 32:Li();break;case-5:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:Pi();break;case 144078:Oi();break;case 144134:_i();break;case 33:case 79:case 121:case 125:case 147:case 154:case 167:case 169:case 188:case 194:case 230:case 231:case 247:case 248:case 259:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14970:case 14971:case 14972:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14996:case 14998:case 15e3:case 15001:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15016:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15037:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:ys();break;case-10:case 27929:Ol();break;case-11:case 10009:Sl();break;case 69:Ll();break;case 283:wl();break;default:qi()}ic.endNonterminal(\"PrimaryExpr\",Vl)}function bl(){switch($l){case 187:ql(246);break;case 220:ql(244);break;case 281:ql(282);break;case 83:case 122:ql(252);break;case 97:case 249:ql(97);break;case 120:case 206:case 262:ql(148);break;case 135:case 197:case 255:ql(236);break;case 6:case 71:case 73:case 74:case 75:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 137:case 138:case 139:case 142:case 143:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl==3353||Wl==4377||Wl==4889||Wl==5401||Wl==5913||Wl==16153||Wl==16665||Wl==17177||Wl==18055||Wl==18117||Wl==18175||Wl==18201||Wl==18713||Wl==21273||Wl==22297||Wl==24345||Wl==24857||Wl==28441||Wl==28953||Wl==31001||Wl==35609||Wl==36633||Wl==37657||Wl==38169||Wl==38681||Wl==39193||Wl==40217||Wl==40729||Wl==41241||Wl==41753||Wl==42265||Wl==42777||Wl==43289||Wl==43801||Wl==44313||Wl==44825||Wl==45849||Wl==46361||Wl==46873||Wl==47385||Wl==48409||Wl==48921||Wl==49945||Wl==50457||Wl==50969||Wl==52505||Wl==53017||Wl==53529||Wl==54041||Wl==54553||Wl==55065||Wl==56089||Wl==56601||Wl==57113||Wl==57625||Wl==58137||Wl==58649||Wl==61209||Wl==61721||Wl==62233||Wl==62745||Wl==63257||Wl==63769||Wl==64281||Wl==64793||Wl==65305||Wl==66329||Wl==66841||Wl==67865||Wl==68377||Wl==68889||Wl==69401||Wl==69913||Wl==70425||Wl==70937||Wl==71449||Wl==72985||Wl==73497||Wl==75545||Wl==76057||Wl==77081||Wl==78105||Wl==78617||Wl==79129||Wl==79641||Wl==80153||Wl==80665||Wl==82713||Wl==83225||Wl==83737||Wl==84249||Wl==84761||Wl==85273||Wl==85785||Wl==86297||Wl==86809||Wl==87321||Wl==88857||Wl==89369||Wl==89881||Wl==90905||Wl==91929||Wl==92953||Wl==93977||Wl==94489||Wl==95001||Wl==96025||Wl==96537||Wl==97049||Wl==99609||Wl==100121||Wl==100633||Wl==101145||Wl==101657||Wl==103705||Wl==104217||Wl==104729||Wl==105241||Wl==105753||Wl==106265||Wl==107801||Wl==110873||Wl==111385||Wl==112921||Wl==113945||Wl==114457||Wl==114969||Wl==115481||Wl==115993||Wl==117017||Wl==117529||Wl==118041||Wl==118553||Wl==119065||Wl==119577||Wl==120089||Wl==122649||Wl==123161||Wl==123673||Wl==124185||Wl==125721||Wl==126745||Wl==127257||Wl==127769||Wl==129817||Wl==130329||Wl==130841||Wl==131353||Wl==131865||Wl==132377||Wl==132889||Wl==133401||Wl==134425||Wl==134937||Wl==136473||Wl==136985||Wl==137497||Wl==138009||Wl==139545||Wl==140057||Wl==141593||Wl==144153||Wl==145177||Wl==147225){Wl=uc(20,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{vi(),oc(20,t,-1),Wl=-14}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hi(),oc(20,t,-5),Wl=-14}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ml(),oc(20,t,-10),Wl=-14}catch(l){Wl=-11,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(20,t,-11)}}}}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 12935:case 12997:case 13055:case 13447:case 13509:case 13567:case 13959:case 14021:case 14079:case 19591:case 19653:case 19711:case 20103:case 20165:case 20223:case 21127:case 21189:case 21247:case 21639:case 21701:case 21759:case 22151:case 22213:case 22271:case 23175:case 23237:case 23295:case 24199:case 24261:case 24319:case 24711:case 24773:case 24831:case 25735:case 25797:case 25855:case 27783:case 27845:case 27903:case 28295:case 28357:case 28415:case 29831:case 29893:case 29951:case 30343:case 30405:case 30463:case 31367:case 31429:case 31487:case 31879:case 31941:case 31999:case 32391:case 32453:case 32511:case 32903:case 32965:case 33023:case 35463:case 35525:case 35583:case 35975:case 36037:case 36095:case 36487:case 36549:case 36607:case 39047:case 39109:case 39167:case 41095:case 41157:case 41215:case 41607:case 41669:case 41727:case 42119:case 42181:case 42239:case 43655:case 43717:case 43775:case 45191:case 45253:case 45311:case 45703:case 45765:case 45823:case 46215:case 46277:case 46335:case 46727:case 46789:case 46847:case 48775:case 48837:case 48895:case 51335:case 51397:case 51455:case 54407:case 54469:case 54527:case 56455:case 56517:case 56575:case 58503:case 58565:case 58623:case 61063:case 61125:case 61183:case 63111:case 63173:case 63231:case 63623:case 63685:case 63743:case 65159:case 65221:case 65279:case 66183:case 66245:case 66303:case 67719:case 67781:case 67839:case 71303:case 71365:case 71423:case 75911:case 75973:case 76031:case 76935:case 76997:case 77055:case 77959:case 78021:case 78079:case 78471:case 78533:case 78591:case 83079:case 83141:case 83199:case 84103:case 84165:case 84223:case 84615:case 84677:case 84735:case 85127:case 85189:case 85247:case 89735:case 89797:case 89855:case 90759:case 90821:case 90879:case 92807:case 92869:case 92927:case 93831:case 93893:case 93951:case 94343:case 94405:case 94463:case 96903:case 96965:case 97023:case 103559:case 103621:case 103679:case 104583:case 104645:case 104703:case 105095:case 105157:case 105215:case 107143:case 107205:case 107263:case 114823:case 114885:case 114943:case 116871:case 116933:case 116991:case 121479:case 121541:case 121599:case 123527:case 123589:case 123647:case 124039:case 124101:case 124159:case 129159:case 129221:case 129279:case 129671:case 129733:case 129791:case 130183:case 130245:case 130303:case 133255:case 133317:case 133375:case 139399:case 139461:case 139519:case 141447:case 141509:case 141567:case 142983:case 143045:case 143103:case 145543:case 145605:case 145663:case 146055:case 146117:case 146175:case 146567:case 146629:case 146687:case 147079:case 147141:case 147199:vi();break;case 31:xi();break;case 35:ki();break;case 32:Ai();break;case-5:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:Hi();break;case 144078:Mi();break;case 144134:Di();break;case 33:case 79:case 121:case 125:case 147:case 154:case 167:case 169:case 188:case 194:case 230:case 231:case 247:case 248:case 259:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14970:case 14971:case 14972:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14996:case 14998:case 15e3:case 15001:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15016:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15037:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:bs();break;case-10:case 27929:Ml();break;case-11:case 10009:xl();break;case 69:Al();break;case 283:El();break;case-14:break;default:Ri()}}function wl(){ic.startNonterminal(\"JSONSimpleObjectUnion\",Vl),Pl(283),Il(273),$l!=286&&(jl(),G()),Pl(286),ic.endNonterminal(\"JSONSimpleObjectUnion\",Vl)}function El(){Hl(283),Il(273),$l!=286&&Y(),Hl(286)}function Sl(){ic.startNonterminal(\"ObjectConstructor\",Vl),Pl(281),Il(276),$l!=287&&(jl(),Tl()),Pl(287),ic.endNonterminal(\"ObjectConstructor\",Vl)}function xl(){Hl(281),Il(276),$l!=287&&Nl(),Hl(287)}function Tl(){ic.startNonterminal(\"PairConstructorList\",Vl),Cl();for(;;){if($l!=42)break;Pl(42),Il(267),jl(),Cl()}ic.endNonterminal(\"PairConstructorList\",Vl)}function Nl(){kl();for(;;){if($l!=42)break;Hl(42),Il(267),kl()}}function Cl(){ic.startNonterminal(\"PairConstructor\",Vl);switch($l){case 78:ql(278);break;case 139:ql(187);break;case 161:ql(281);break;case 177:ql(178);break;case 187:ql(251);break;case 220:ql(247);break;case 223:ql(180);break;case 266:ql(191);break;case 83:case 122:ql(256);break;case 97:case 249:ql(149);break;case 111:case 222:ql(261);break;case 104:case 130:case 240:ql(165);break;case 135:case 197:case 255:ql(208);break;case 120:case 206:case 256:case 262:ql(167);break;case 121:case 125:case 167:case 188:case 194:case 230:case 231:ql(96);break;case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 133:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 268:case 269:case 272:case 273:case 276:ql(144);break;default:Wl=$l}if(Wl==25735||Wl==25797||Wl==25855){Wl=uc(21,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xf(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(21,Vl,Wl)}}switch(Wl){case-2:case 19:case 25671:case 25673:case 25674:case 25675:case 25676:case 25678:case 25680:case 25681:case 25682:case 25683:case 25684:case 25685:case 25686:case 25687:case 25689:case 25690:case 25691:case 25692:case 25694:case 25695:case 25697:case 25698:case 25699:case 25702:case 25703:case 25704:case 25705:case 25706:case 25707:case 25709:case 25710:case 25711:case 25712:case 25713:case 25714:case 25719:case 25720:case 25721:case 25722:case 25723:case 25724:case 25725:case 25726:case 25727:case 25729:case 25730:case 25732:case 25733:case 25734:case 25736:case 25737:case 25738:case 25739:case 25742:case 25743:case 25747:case 25748:case 25750:case 25752:case 25753:case 25754:case 25755:case 25756:case 25757:case 25761:case 25762:case 25763:case 25764:case 25765:case 25766:case 25767:case 25768:case 25770:case 25773:case 25774:case 25775:case 25777:case 25779:case 25781:case 25783:case 25784:case 25785:case 25787:case 25788:case 25789:case 25794:case 25795:case 25798:case 25802:case 25803:case 25804:case 25805:case 25806:case 25807:case 25810:case 25816:case 25817:case 25820:case 25822:case 25823:case 25824:case 25825:case 25826:case 25828:case 25829:case 25830:case 25831:case 25832:case 25833:case 25834:case 25839:case 25840:case 25841:case 25842:case 25845:case 25848:case 25849:case 25853:case 25854:case 25856:case 25857:case 25858:case 25859:case 25860:case 25862:case 25863:case 25866:case 25867:case 25868:case 25869:case 25872:case 25873:case 25876:Ga();break;default:Wf()}Il(26),Pl(50),Il(266),jl(),Wf(),ic.endNonterminal(\"PairConstructor\",Vl)}function kl(){switch($l){case 78:ql(278);break;case 139:ql(187);break;case 161:ql(281);break;case 177:ql(178);break;case 187:ql(251);break;case 220:ql(247);break;case 223:ql(180);break;case 266:ql(191);break;case 83:case 122:ql(256);break;case 97:case 249:ql(149);break;case 111:case 222:ql(261);break;case 104:case 130:case 240:ql(165);break;case 135:case 197:case 255:ql(208);break;case 120:case 206:case 256:case 262:ql(167);break;case 121:case 125:case 167:case 188:case 194:case 230:case 231:ql(96);break;case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 133:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 268:case 269:case 272:case 273:case 276:ql(144);break;default:Wl=$l}if(Wl==25735||Wl==25797||Wl==25855){Wl=uc(21,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xf(),oc(21,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(21,t,-2)}}}switch(Wl){case-2:case 19:case 25671:case 25673:case 25674:case 25675:case 25676:case 25678:case 25680:case 25681:case 25682:case 25683:case 25684:case 25685:case 25686:case 25687:case 25689:case 25690:case 25691:case 25692:case 25694:case 25695:case 25697:case 25698:case 25699:case 25702:case 25703:case 25704:case 25705:case 25706:case 25707:case 25709:case 25710:case 25711:case 25712:case 25713:case 25714:case 25719:case 25720:case 25721:case 25722:case 25723:case 25724:case 25725:case 25726:case 25727:case 25729:case 25730:case 25732:case 25733:case 25734:case 25736:case 25737:case 25738:case 25739:case 25742:case 25743:case 25747:case 25748:case 25750:case 25752:case 25753:case 25754:case 25755:case 25756:case 25757:case 25761:case 25762:case 25763:case 25764:case 25765:case 25766:case 25767:case 25768:case 25770:case 25773:case 25774:case 25775:case 25777:case 25779:case 25781:case 25783:case 25784:case 25785:case 25787:case 25788:case 25789:case 25794:case 25795:case 25798:case 25802:case 25803:case 25804:case 25805:case 25806:case 25807:case 25810:case 25816:case 25817:case 25820:case 25822:case 25823:case 25824:case 25825:case 25826:case 25828:case 25829:case 25830:case 25831:case 25832:case 25833:case 25834:case 25839:case 25840:case 25841:case 25842:case 25845:case 25848:case 25849:case 25853:case 25854:case 25856:case 25857:case 25858:case 25859:case 25860:case 25862:case 25863:case 25866:case 25867:case 25868:case 25869:case 25872:case 25873:case 25876:Ya();break;case-3:break;default:Xf()}Il(26),Hl(50),Il(266),Xf()}function Ll(){ic.startNonterminal(\"ArrayConstructor\",Vl),Pl(69),Il(272),$l!=70&&(jl(),G()),Pl(70),ic.endNonterminal(\"ArrayConstructor\",Vl)}function Al(){Hl(69),Il(272),$l!=70&&Y(),Hl(70)}function Ol(){ic.startNonterminal(\"BlockExpr\",Vl),Pl(281),Il(280),jl(),of(),Pl(287),ic.endNonterminal(\"BlockExpr\",Vl)}function Ml(){Hl(281),Il(280),uf(),Hl(287)}function _l(){ic.startNonterminal(\"FunctionDecl\",Vl),Pl(147),Il(245),jl(),$a(),Il(22),Pl(35),Il(98),$l==31&&(jl(),U()),Pl(38),Il(158),$l==80&&(jl(),Dl()),Il(122);switch($l){case 281:Pl(281),Il(280),jl(),of(),Pl(287);break;default:Pl(134)}ic.endNonterminal(\"FunctionDecl\",Vl)}function Dl(){ic.startNonterminal(\"ReturnType\",Vl),Pl(80),Il(253),jl(),Ls(),ic.endNonterminal(\"ReturnType\",Vl)}function Pl(e){$l==e?(jl(),ic.terminal(i.TOKEN[$l],Jl,Kl>fc?fc:Kl),Xl=Jl,Vl=Kl,$l=Ql,$l!=0&&(Jl=Gl,Kl=Yl,Ql=0)):zl(Jl,Kl,0,$l,e)}function Hl(e){$l==e?(Xl=Jl,Vl=Kl,$l=Ql,$l!=0&&(Jl=Gl,Kl=Yl,Ql=0)):zl(Jl,Kl,0,$l,e)}function Bl(e){var t=Xl,n=Vl,r=$l,i=Jl,s=Kl;$l=e,Jl=lc,Kl=cc,Ql=0,Va(),Xl=t,Vl=n,$l=r,$l!=0&&(Jl=i,Kl=s)}function jl(){Vl!=Jl&&(ic.whitespace(Vl,Jl),Vl=Jl)}function Fl(e){var t;for(;;){t=hc(e);if(t!=22){if(t!=37)break;Bl(t)}}return t}function Il(e){$l==0&&($l=Fl(e),Jl=lc,Kl=cc)}function ql(e){Ql==0&&(Ql=Fl(e),Gl=lc,Yl=cc),Wl=Ql<<9|$l}function Rl(e){$l==0&&($l=hc(e),Jl=lc,Kl=cc)}function Ul(e){Ql==0&&(Ql=hc(e),Gl=lc,Yl=cc),Wl=Ql<<9|$l}function zl(e,t,r,i,s){throw t>=ec&&(Zl=e,ec=t,tc=r,nc=i,rc=s),new n.ParseException(Zl,ec,tc,nc,rc)}function oc(e,t,n){sc[(t<<5)+e]=n}function uc(e,t){var n=sc[(t<<5)+e];return typeof n!=\"undefined\"?n:0}function hc(e){var t=!1;lc=cc;var n=cc,r=i.INITIAL[e],s=0;for(var o=r&8191;o!=0;){var u,a=n<fc?ac.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<fc?ac.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<13)+o-1;o=i.TRANSITION[(p&31)+i.TRANSITION[p>>5]],o>8191&&(r=o,o&=8191,cc=n)}r>>=13;if(r==0){cc=n-1;var f=cc<fc?ac.charCodeAt(cc):0;return f>=56320&&f<57344&&--cc,zl(lc,cc,s,-1,-1)}if(t)for(var d=r>>9;d>0;--d){--cc;var f=cc<fc?ac.charCodeAt(cc):0;f>=56320&&f<57344&&--cc}else cc-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return ac},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=ac.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+ac.substring(e.getBegin(),Math.min(ac.length,e.getBegin()+64))+\"...\"},this.parse_XQuery=function(){ic.startNonterminal(\"XQuery\",Vl),Il(277),jl(),o(),Pl(25),ic.endNonterminal(\"XQuery\",Vl)};var Wl,Xl,Vl,$l,Jl,Kl,Ql,Gl,Yl,Zl,ec,tc,nc,rc,ic,sc,ac,fc,lc,cc};r.getTokenSet=function(e){var t=[],n=e<0?-e:r.INITIAL[e]&8191;for(var i=0;i<289;i+=32){var s=i,o=(i>>5)*4235+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&15)+r.EXPECTED[a>>4]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[71,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,40,30,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,40,40],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,355,371,387,423,423,423,415,339,331,339,331,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,440,440,440,440,440,440,440,324,339,339,339,339,339,339,339,339,401,423,423,424,422,423,423,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,338,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,71,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,30,30,30,30,30,30,30,30,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,40,30,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,40,40,40,40,40,40,40,40,40,40,40,40,30,30,40,40,40,40,40,40,40,70,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,40,30,40,30,30,40],r.INITIAL=[1,24578,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289],r.TRANSITION=[32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,18432,18508,18512,18508,18508,18471,18503,18452,18508,18544,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22565,22594,54694,22641,32640,25253,32640,22707,32640,32640,18907,32640,40804,19219,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22757,32640,23442,32640,20728,22822,22912,62853,22949,23023,32640,25253,37379,72986,32640,32640,18907,32640,23058,40482,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,23090,32640,70756,57235,23625,57174,23143,53889,57205,23194,32640,44590,57237,72986,32640,32640,18907,32640,23058,18925,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,22132,19073,46732,23294,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,23361,32640,61740,23437,23807,23824,22912,35136,23474,23607,32640,25253,32640,72986,32640,32640,18907,32640,40461,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,57592,32640,53140,23657,43708,23704,23789,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,39259,23856,32640,32640,23893,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,73053,22069,23965,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,24031,32640,23861,32640,22776,24082,22912,56240,24206,24329,32640,25253,32640,24379,32640,32640,18907,32640,23058,57529,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,24415,24449,24453,24440,24534,24485,24515,24566,24596,24628,32640,32105,32640,72986,32640,32640,18907,32640,23058,21807,31154,45903,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,24678,32640,61740,24746,48361,53140,24789,24808,24825,24857,32640,27397,32640,72986,32640,32640,18907,32640,23058,21807,31154,45563,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,24907,32640,61740,32640,32640,52064,24984,25013,61799,25045,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,25095,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,54034,25151,25188,25171,25235,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,25302,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,25340,32640,61740,24702,35413,25353,25385,25402,58363,25449,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,25499,32640,61740,32640,32640,53140,25538,25575,25558,25622,32640,25253,32640,72986,32640,32640,49347,54782,64809,35297,64457,32024,25672,25724,32640,25308,42746,72012,48724,25775,59604,63895,70062,53329,26051,44572,32640,32640,53365,69246,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,36217,25878,32640,32640,25912,56403,72012,72012,47453,69896,25776,64787,25947,25982,26472,26016,26050,68602,32640,32640,21278,65491,41507,72012,47768,59999,36922,55439,25983,53287,66001,26051,68608,32640,35129,65495,72012,26084,25776,26132,25983,66375,26051,26181,26227,36550,62167,71378,26264,56947,53286,26299,56814,66968,50229,37146,26336,26407,64681,37193,26609,67516,26450,26504,26590,60773,47253,26654,26722,26771,49912,26461,51539,26820,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,29428,26976,69042,27027,27107,32640,25253,32640,27176,32640,32640,18907,32640,35800,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,27212,32640,18617,32640,32640,53140,27264,27332,41428,27379,32640,25253,32640,27446,36386,32640,18907,32640,23058,40482,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,27496,32640,61740,32640,32640,45704,22912,32640,27545,27614,32640,25253,32640,27679,32640,32640,49347,54782,51035,35297,32640,32024,32640,27715,32640,25308,72012,72012,48724,25776,59604,25983,61672,26051,26051,49853,32640,32640,70980,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,40010,32640,32640,25692,32640,68393,72012,72012,27753,25776,25776,39830,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,27795,25776,60349,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,27836,32640,26232,27985,34535,60068,27930,27958,60099,28032,32640,32366,32640,72986,32640,32640,73079,29194,30273,28620,31154,44986,32640,18612,18649,18757,18789,18959,32755,28084,30249,28403,29274,28141,28173,28885,36451,32640,24875,69179,19041,62458,19134,40819,21681,28259,30189,28317,28376,29214,30382,28201,30288,28732,66570,19251,21244,41014,19334,19366,19398,28435,28285,28497,28109,28529,28561,28593,28652,28684,28716,19661,19735,19811,19878,19910,19942,28764,21709,32781,28826,28935,28991,29023,29361,30055,20090,20138,20211,20265,29171,28465,29246,28344,29334,29302,29393,20579,20709,20774,29460,29082,29111,29139,29492,29611,20949,21030,29555,29643,29675,28857,29707,21310,29804,29832,29864,29896,29992,30024,30105,30173,28959,30221,29583,29053,28794,28227,30320,30352,29523,30414,30442,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,30485,32640,61740,55714,40332,67370,30532,30549,30500,30596,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,25063,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,62487,66570,19251,64424,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,30661,19661,19735,19811,19878,19910,19942,30758,30851,33683,30826,30858,20058,19907,21927,19969,20090,20138,20211,20265,30890,63521,30967,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,32640,31025,31042,31089,31121,32640,25253,32640,72986,41921,32640,18907,32640,23058,19161,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31186,32640,61740,32640,32640,53140,31304,31321,61422,31368,32640,25253,32640,72986,38336,32640,18907,32640,23058,19597,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31436,32640,22917,32640,32640,53140,31488,31505,63455,31552,32640,25253,32640,72986,23911,32640,18907,32640,23058,20233,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,31603,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31688,32640,61740,27887,32640,57839,22912,31734,24347,31775,32640,25253,32640,31840,32640,32640,18907,32640,57508,20515,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22912,32640,62571,27379,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,46497,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,52315,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32497,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,20179,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,31980,32640,32640,49347,54782,64809,51195,32640,32024,32640,31979,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,25682,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,32640,32640,65491,72012,72012,51277,25776,46932,39842,25983,53287,26051,26051,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,69771,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,41903,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,32012,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,57111,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,27513,32056,32087,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,31793,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32154,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32191,32640,61740,32640,32640,53140,32266,32219,32317,32348,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,32398,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,32449,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22912,32640,32640,32541,32640,25253,32640,72986,32640,32640,18907,32640,23058,40482,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32639,61740,32640,32640,53140,32606,32625,66147,32673,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,32724,21452,21374,21431,32813,21618,21650,32920,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22912,32640,32640,27379,32640,25253,32640,72986,32640,32640,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,33014,72814,65242,23329,65262,33049,33078,33110,33141,72172,33868,38406,33224,33302,35892,33415,33497,33529,33657,32640,70241,33715,23262,70547,65483,72012,56115,31942,25776,33771,25983,62395,26051,60426,53e3,43338,33820,20169,33900,28052,33936,72012,34004,34096,25776,69679,34153,25983,34209,34305,26051,34381,34413,59316,60982,34567,18580,43988,66280,56105,34613,34671,54769,57995,34763,50540,69616,34835,44365,69116,72659,27683,51215,45101,34941,55781,57901,25776,68182,34981,25983,35037,38017,43551,35100,35168,46148,32692,38542,69316,67857,54357,35200,37506,35270,39191,36089,32640,37090,24260,50683,56669,60278,35348,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,43929,35445,35530,35582,50980,66874,47849,48295,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,35651,72814,32640,32640,53140,35689,35718,35750,35781,32640,25253,32640,32640,32640,32640,42703,63159,35832,71490,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,53e3,32640,32640,71083,54414,54421,64131,72012,55872,25809,25776,60149,25844,25983,63179,26051,26051,34327,34467,32640,32640,25692,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,43098,32640,35952,27144,30726,72012,63213,63138,25776,69714,35989,25983,42068,36035,26051,36069,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,20456,36134,36191,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,64516,72814,48426,59530,63767,36272,36304,36336,36367,32640,36432,25203,32640,32640,41660,37716,55922,36483,36530,48415,59494,31702,18855,62820,64973,39682,72012,36599,25776,18725,36659,69934,36699,26051,52493,36750,23246,55732,34581,32640,18679,55301,36783,36820,35485,36918,36954,37494,37030,64702,65892,37178,34467,32640,37225,65319,32640,68393,72012,37261,33962,25776,37316,55427,25983,39119,39566,26051,49047,43098,37375,42559,23999,65491,72012,48479,51277,25776,37411,39842,45287,53287,26051,67220,70527,32640,37538,37571,37131,46827,23541,55996,67894,53288,53572,47622,37618,25915,66600,37659,46843,32872,37796,37836,46302,47046,68392,23524,65621,25983,37889,41315,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,37927,37988,38060,47849,36159,34716,26535,44815,38151,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,20106,72814,32509,23162,53140,38224,38253,38285,38316,32640,25253,32640,32640,60657,39330,34441,50711,54836,51195,33270,38384,46719,22206,33192,38438,72385,38511,38616,40937,20657,38673,38705,39528,38892,38940,32640,47380,49323,32640,70823,64131,72012,32968,25809,25776,45195,25844,25983,46666,26051,26051,58683,38996,32640,59450,25692,27180,22361,39052,64136,40912,42209,25776,39090,66443,25983,39151,60300,26051,39223,32640,32640,36102,70444,72012,71366,65683,25776,39291,39362,35619,34803,26051,43538,70527,72942,37229,65495,39402,46827,39434,39492,52767,39560,39598,39731,22659,32640,64131,71378,25776,29955,53286,26051,46302,19837,68392,68106,33972,25983,39769,58918,26609,71375,56493,39511,67952,33375,70146,67746,39807,39877,27300,39932,39984,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,22609,72814,27464,30794,40060,40119,40148,40180,40211,40263,40295,40364,40412,40514,40546,40606,40667,40699,40731,40783,20976,40854,40994,52527,25308,41046,39699,41078,46357,49141,41137,44544,41236,41286,41368,47192,41460,41554,41610,40087,41703,41735,41816,41872,41968,42030,42100,42250,42282,42373,42458,42490,42522,42554,42591,31571,42679,24113,42735,42778,42826,42887,59586,42933,43014,20677,52796,43080,37857,50773,19009,50153,72778,68055,66201,43130,61992,43205,43285,43380,36003,43457,50341,43583,43639,62580,43704,43740,65764,46827,43772,55996,43804,43857,43893,43961,72604,44020,44104,67022,44136,44196,44228,44289,44397,41399,46788,44452,69369,44513,44648,70208,20438,68896,51376,63626,44257,54317,44622,67433,55113,55250,49487,51457,67801,44680,44712,34716,38736,44788,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,54076,72814,67462,71804,46979,44874,44903,44935,44966,65157,25253,32640,32640,45018,45029,45061,36627,47904,71490,70229,49986,32640,30141,65148,45093,45133,72012,45175,25776,67154,25983,61672,45240,26051,53e3,32640,32640,25682,32640,30614,64131,72012,62187,25809,25776,34052,25844,25983,58051,26051,26051,68586,34467,32640,32640,25692,49974,68393,36788,72012,33962,51715,25776,55427,25983,45283,39566,26051,45319,43098,32640,32640,22533,65491,72012,65748,51277,25776,40635,39842,48131,53287,26051,72059,70527,32640,32640,65495,72012,46827,25776,55996,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,26195,32640,30913,33383,31947,68516,43425,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,38767,44815,45355,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,72990,32640,53140,45461,45480,45512,45543,32640,25253,25880,32640,32640,32640,49347,54782,64809,65216,32640,32024,32640,29772,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,26944,43348,64131,72012,72012,45595,25776,25776,45631,25983,25984,26051,26051,26018,58552,32640,45666,62963,32640,45736,45143,72012,33962,47777,25776,55427,45634,25983,39566,62106,26051,66507,32640,61374,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,45776,65495,72012,45833,25776,43236,25983,48970,26051,35378,19759,45883,40885,45935,34121,45988,46059,68691,46114,46509,48784,46180,46232,52911,56583,46294,61320,46334,46389,52972,46541,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,57068,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,37061,32640,46592,32640,23927,23933,35920,72528,46641,71255,46698,32640,41638,46765,32640,32640,25308,72012,32982,31942,25812,62010,25983,52465,26051,62071,44572,32640,32640,32640,32640,46875,64131,72012,72012,46928,25776,25777,25844,25983,25846,26051,26051,48238,66922,32640,32640,32640,58432,34888,72012,72012,24139,25776,25776,64186,25983,25983,64365,26051,26051,68602,32640,31139,32640,65491,72012,59125,47768,25776,23575,39842,25983,43409,26051,51585,68608,32640,40326,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,23989,59115,71381,31947,25983,51580,26788,46560,61892,58181,67203,61301,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,48851,72814,23672,46964,47011,47078,47108,47140,47171,32640,41336,32640,50620,20998,40574,47224,47285,49169,47359,32640,35316,31404,32640,22498,71540,47426,22395,47485,41998,47553,68243,35005,43487,49590,47654,45801,22675,32476,32285,47707,67491,67589,47739,47809,47521,53771,47881,39370,54202,70106,63727,47936,58552,32640,49793,48007,32640,65551,71979,37586,48049,48729,71596,33444,48130,48163,50320,48235,48270,34864,70560,48327,48393,48458,72887,48523,38468,37956,42313,48632,55501,51516,36886,48664,48761,48816,50855,27414,41840,48883,63268,48941,45429,49017,55015,49079,32640,22725,23734,49111,51113,69533,55593,49224,46302,49298,68392,71381,31947,25983,51580,58698,26609,49388,58232,70503,49450,42622,70146,67746,49519,60834,49912,26461,39900,47849,56608,49551,26535,44815,49622,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,69860,72814,32640,32640,53140,22912,46609,49741,49772,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,57444,31942,38479,62010,25983,49825,26051,53559,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,59709,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,61385,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,55063,32640,32640,32640,32640,51342,72012,72012,34031,25776,25776,21586,25983,25983,37804,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,52831,72814,72305,49953,50018,50050,50069,50101,50132,70815,25253,24050,32640,72261,50206,50261,50293,50389,50456,50572,49266,32159,46476,50609,46896,49653,37284,50652,61556,51136,34792,50743,43516,41182,50834,50887,32640,37764,32640,32640,39657,23757,50924,50956,53683,55377,51012,52437,51082,71275,51168,51247,58552,31456,32640,51318,32640,68393,71632,34909,33962,25776,51408,55427,25983,51489,51571,26051,51617,51676,60646,71309,32640,65491,66269,72012,47768,51714,36922,67551,25983,53287,50411,26051,51682,70346,19987,51747,72012,24952,25776,68123,51821,47327,51856,50424,31808,72723,44072,71378,24163,55203,53286,67732,46302,62840,68392,67136,45208,51824,51580,51892,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,49192,51996,52096,48579,26535,57041,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32641,72814,32640,52167,20380,52202,52231,52263,52294,52373,25253,38352,32640,52375,52359,29926,52407,61167,51195,57599,32024,25590,52525,32640,52559,51778,52613,52685,43173,52736,25950,43825,49580,44319,53632,52043,52828,32640,32640,32640,58759,38563,72012,52863,54749,25776,52943,55231,25984,38908,53056,26018,58552,53105,32640,22853,53172,39020,53205,55838,69472,53239,53488,67539,53276,33788,39566,53320,63643,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,53361,32640,72366,71378,53397,57660,53286,53431,46302,32640,68392,71381,47833,35238,66390,37193,26609,71375,60465,43860,63958,50482,38641,53073,53467,53538,49912,26461,39900,47849,36159,48078,53604,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,53715,36751,53803,53858,53921,53950,53982,54013,68341,65423,54066,22337,73196,54108,54140,54172,54234,54389,39321,25417,42341,50174,54455,44050,56059,66616,54504,54555,45851,57679,42130,56789,64232,60925,56829,19692,32640,54689,69055,20609,57455,72012,54726,52653,25776,54814,63908,25984,61227,36498,26018,58552,32640,47394,24383,68318,72870,72012,54868,18707,25776,69705,54929,25983,71927,54995,26051,43915,55047,31632,29738,32574,55095,55145,55282,55174,55347,55409,55471,55533,55625,55661,26850,67349,33333,55693,55764,55813,55904,55954,45409,55563,59673,58326,64010,31239,37627,56028,56147,63574,71739,56202,48600,52021,33017,44420,56272,51439,56304,26558,56379,49469,56435,56525,55629,58860,53658,56557,38796,56640,56760,53746,56861,56918,47849,36159,34716,35068,57014,26905,57100,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,57143,60501,46140,53140,57269,57298,57330,57361,57393,21867,57487,53826,57561,73137,57631,57725,57757,57818,64532,33845,25743,28903,32640,30718,48491,57871,57933,57965,50507,34177,46420,65902,58083,44572,34502,27347,47675,69192,32417,27057,58115,45744,58167,58213,58473,58264,36980,26375,58296,44349,69977,37742,31057,58358,32640,35957,68393,49673,58395,33962,23558,65824,55427,66456,46015,39566,60313,47611,68602,32640,47038,58431,65491,72012,72012,58464,25776,27804,58505,25983,57693,26051,26051,58542,33253,32640,51913,22383,49691,64312,64327,50524,46027,71028,38028,53132,32640,21514,49356,67641,68454,61634,65986,49249,32640,68392,71381,31947,25983,51580,39737,67971,58592,35498,68821,42982,65031,58624,58730,58791,58892,49912,26461,39900,47849,36159,34716,60897,62262,58971,59003,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,53024,32640,59046,59088,59157,59186,59218,59249,26690,25253,32640,62512,59314,32640,21399,45956,59348,59428,60204,32024,59282,59482,59526,27721,62325,42794,59562,37343,41105,59653,46262,57786,56728,42158,59014,59705,59741,32640,32640,64131,27582,72012,25809,51286,25776,25844,68525,25984,26051,69412,26018,38086,59766,53173,30453,31873,68393,59807,72012,38182,56458,25776,67880,68261,25983,39566,61247,26051,68602,40380,32640,32640,65491,72012,59857,47966,60005,45599,39842,71940,53287,26051,59892,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,71116,32640,59931,71378,25776,29955,53286,26051,56227,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,36718,59969,24280,60037,60131,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25253,54423,32640,20742,60181,32843,60251,67710,54291,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,29420,32640,32640,32640,64131,72012,72012,60345,25776,25776,60381,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,53207,72012,47768,27763,36922,39842,71874,53287,26051,60418,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,70720,71381,60458,35226,48985,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,36240,60497,23383,53140,60533,60561,60593,60624,23405,25467,22160,33169,60689,60747,60715,60805,60866,60957,32640,36400,61023,26995,32640,33355,55315,59825,61082,65831,61145,47313,61199,61279,67236,61352,32640,30073,61417,71794,61454,22979,61508,38584,61544,61588,56170,61624,61666,64623,61704,26051,48694,58552,65333,72472,61736,61772,61831,56082,61881,64292,46200,55981,63076,32888,56329,36998,50357,58842,68602,61924,31336,31217,32949,61962,72012,54897,52135,36922,43253,54949,53287,62059,62103,54635,69791,32640,71552,72012,20633,25776,66700,25983,70631,26051,43048,60991,32640,27575,38860,26267,35612,71431,26052,46302,39252,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,59396,61050,48909,62138,49921,43861,50802,44756,26873,47849,36159,34716,33560,62235,62294,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,69266,62427,62544,62612,62644,62673,62705,62736,31256,49878,31910,32640,62790,62885,62917,44164,69556,51644,62949,62995,45696,32640,19278,63027,63108,63211,63245,54342,53506,63300,61672,63378,63410,44572,63450,21770,63487,58560,32640,57422,68884,61512,63553,47513,61592,63606,63675,29960,51050,63717,37895,63759,18562,21217,40028,32560,63799,59860,58135,43158,25776,63843,70614,25983,63875,63940,26051,63990,64042,64442,21262,32640,64117,58399,38848,47768,24174,64168,39842,56347,53287,26051,64218,68608,27898,31520,65495,64264,51931,42855,67656,26365,64359,39180,64397,32640,22880,64131,71378,25776,29955,53286,26051,56886,32234,41489,41766,51964,60386,51580,64489,54657,64564,34064,72128,35550,42184,64655,39628,49921,43861,62758,40962,68714,54610,64734,36847,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,25270,32640,23111,32122,64856,64887,64919,64950,31389,65005,27232,34519,65063,65120,65088,61113,65189,65294,65365,65397,32640,65455,65527,65583,65653,65730,65796,42647,52704,58025,65863,65934,65966,66033,64072,66099,26683,30564,66131,66179,66246,41522,66312,64765,26100,66344,66422,62027,63346,66488,48098,66539,38119,40439,30690,24714,66648,46809,22991,67082,66680,47975,66732,66764,58510,66819,66851,26304,66906,66954,31272,32640,67e3,67054,67114,21544,34639,21568,67186,67268,67325,67402,54264,43607,48017,34273,42426,67583,30935,67621,41784,67688,48203,67778,64824,41671,20315,24236,67833,44481,37470,67926,59378,68003,32640,68087,68155,34696,68214,39952,68293,68373,68425,68486,66787,35862,33375,70146,67746,49921,43861,49912,58817,68777,68557,68640,68746,58655,44815,68853,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,64085,32640,48353,53140,68928,68957,68989,69020,32640,27125,27632,30788,27143,32640,31656,64595,69087,69148,32640,32024,32640,69224,32640,49895,69298,39058,69348,25776,49418,25983,70024,69401,45323,46448,24757,70970,32640,27865,31743,52581,61849,69444,69504,54523,54583,69588,33465,69648,59899,33588,69746,58552,69823,32640,32640,69855,38964,72012,72012,65611,69892,25776,72113,69928,25983,39566,69966,26051,41254,35657,32640,32640,61476,72012,72012,62354,25776,36922,70009,25983,26418,26051,26051,34349,32640,18845,26622,72012,27075,25776,39460,70056,67293,70094,41204,31858,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,45386,70138,70178,58860,33375,70146,67746,49921,43861,49912,26461,46082,68666,70273,34716,26535,44842,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,22217,68030,66060,33739,70331,54472,70378,70409,32640,25253,32640,32640,32640,32640,19302,70476,56692,51195,59775,43315,32640,32640,27647,25308,37113,62203,70592,53244,62010,70663,47583,56714,33625,44572,32640,32640,28e3,32640,29763,64131,55855,72012,25809,51949,25776,25844,56967,25984,26051,33611,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,50577,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,25506,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,70701,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,59056,32640,70752,70788,70855,70884,70916,70947,32640,25253,32640,32640,32640,32640,41578,49709,71012,71060,32640,32024,32640,32640,71115,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,38108,32640,24932,72012,72012,52641,25776,25776,71858,25983,25983,43032,26051,26051,68602,32640,71148,32640,65491,51789,34949,47768,56478,42901,39842,71181,63325,63418,36037,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32154,32640,72814,32640,32640,53140,22912,36567,70299,34240,32640,25640,43672,32640,22790,58939,37441,71228,41160,51195,32640,22183,71515,71307,32640,25308,72012,71341,31942,35465,71413,36667,59621,26051,71463,42401,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,41936,32640,68393,66214,72012,71584,38192,25776,42053,70669,25983,39566,39775,26051,68602,35405,32640,32640,65491,71628,72012,48552,25776,36922,26149,25983,53287,71664,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,22912,36567,70299,37690,32640,25253,66067,32640,32640,32640,71710,26739,42964,71771,20325,32024,32640,32640,32640,27283,72012,59937,31942,25776,52893,25983,56982,26051,51860,44572,23321,32640,32640,37539,32640,38825,72013,72012,71836,53399,25776,71906,39845,25984,71678,53435,26018,58552,30134,32640,32640,32640,68393,71972,72012,63054,52123,25776,62376,48188,25983,24297,36872,26051,68602,32640,32640,33904,65491,72012,72011,47768,42218,36922,39842,71196,53287,26051,72045,68608,32640,48843,65495,72012,51360,25776,65698,25983,53288,26051,45251,32640,34258,23504,63811,25776,68806,63685,26051,46302,23041,68392,72091,44738,54963,34731,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,31905,32640,72814,32640,32640,53140,72160,36567,70299,34240,32640,25253,32640,32640,32640,32640,49347,54782,64809,51195,32640,32024,32640,32640,32640,25308,72012,72012,31942,25776,62010,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,72268,72234,40231,72204,72300,72337,72417,72449,32640,25253,71149,72986,32640,32640,22011,19703,24646,21807,31154,19779,32640,18612,18649,18757,18789,18959,21985,22069,72504,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,70431,53140,72560,72589,60219,72636,32640,25253,32640,72986,50892,50890,18907,32640,40751,21807,31154,19779,32640,18612,18649,18757,18789,18959,22037,22069,18821,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61930,32640,32640,19846,72691,72708,30629,72755,32640,25253,32640,72810,59270,52170,18907,32640,23058,21807,31154,19779,32640,18612,18649,18757,18789,18959,22311,22069,72846,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,21310,21452,21374,21431,21484,21618,21650,21741,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,22530,32640,61740,32640,32640,53140,22912,32640,32640,72919,32640,25253,32640,32640,32640,32640,49347,54782,64809,35297,32640,32024,32640,32640,32640,25308,72012,72012,48724,25776,59604,25983,61672,26051,26051,44572,32640,32640,32640,32640,32640,64131,72012,72012,25809,25776,25776,25844,25983,25984,26051,26051,26018,58552,32640,32640,32640,32640,68393,72012,72012,33962,25776,25776,55427,25983,25983,39566,26051,26051,68602,32640,32640,32640,65491,72012,72012,47768,25776,36922,39842,25983,53287,26051,26051,68608,32640,32640,65495,72012,51360,25776,65698,25983,53288,26051,37187,32640,32640,64131,71378,25776,29955,53286,26051,46302,32640,68392,71381,31947,25983,51580,37193,26609,71375,60465,43860,58860,33375,70146,67746,49921,43861,49912,26461,39900,47849,36159,34716,26535,44815,26905,26933,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,34485,32640,23212,23229,52327,72974,32640,32640,32640,72986,32640,32640,18907,32640,23058,21807,31154,43659,32640,18612,18649,18757,18789,18959,21985,22069,72504,22057,18887,18787,18957,18991,36451,32640,24875,69179,19041,62458,19134,40819,21341,19073,46732,21342,19074,46733,19106,19193,40822,19438,66570,19251,21244,41014,19334,19366,19398,19470,19502,19538,25119,19498,19534,19570,19359,19629,19422,19661,19735,19811,19878,19910,19942,20019,30851,30993,20026,30858,20058,19907,21927,19969,20090,20138,20211,20265,20357,63521,20412,63518,20488,20547,20291,20579,20709,20774,20821,20870,20853,20885,20789,20917,20949,21030,21062,21094,21084,21126,21186,73022,21452,21374,21431,73111,21618,21650,73169,21802,23057,21839,21899,21959,22101,21154,22249,22281,22427,22459,22487,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,32640,1,24578,3,0,0,0,0,0,0,0,180523,180523,180523,180523,0,188716,188716,188716,180523,180523,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,0,188716,180523,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,139264,147456,188716,188716,188716,188716,188716,188716,188716,188716,188716,131072,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,188716,367,188716,180523,188716,188716,1,24578,3,0,0,4366336,0,0,0,180523,188716,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2289,0,2290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2368,2369,0,0,2371,0,0,0,0,2376,0,0,0,0,0,0,0,0,0,0,0,4276224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,307,0,0,5767168,0,0,0,4857856,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,5414912,5447680,0,0,5562368,5636096,5685248,0,5750784,5873664,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,1877,521,521,521,521,521,521,521,521,521,1889,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,59821,57886,59823,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,58853,57909,57909,58857,57909,57909,57909,57909,57909,57909,57909,57909,58871,0,0,5636096,5873664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5873664,0,0,0,0,0,0,0,5480448,4358144,4358144,4358144,4358144,4857856,4874240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5259264,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5414912,4358144,5447680,4358144,5464064,4358144,5480448,5562368,4358144,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,977,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,3144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1262,0,0,0,0,0,0,0,0,0,0,0,0,0,5873664,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,0,1140,0,0,1145,0,4857856,4874240,0,0,4923392,5562368,4358144,4358144,4358144,5636096,4358144,5685248,4358144,4358144,5750784,4358144,4358144,4358144,4358144,4358144,5873664,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6275072,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4923392,4358144,4358144,4358144,4358144,4358144,0,4923392,0,0,0,0,4366336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2755,0,0,0,0,0,0,0,0,0,0,0,0,2766,0,0,0,0,0,0,4825088,0,0,5177344,0,0,0,0,5701632,0,0,0,0,0,0,0,0,0,0,5808128,0,0,0,0,4792320,4833280,0,0,5701632,0,5242880,0,0,0,0,0,0,0,5341184,0,0,0,0,0,0,0,0,0,0,0,0,5627904,5652480,0,5701632,0,0,0,0,0,0,0,4358144,4358144,4358144,4825088,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5177344,4358144,4358144,4358144,4358144,4358144,5242880,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5341184,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5627904,5652480,4358144,5701632,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,483328,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,4358144,4358144,4358144,4358144,4358144,4358144,5341184,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5627904,5652480,4358144,5701632,4358144,4358144,5808128,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,1051,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,0,0,6422528,0,0,0,0,0,0,0,0,0,0,0,5619712,0,0,0,0,0,0,0,5726208,5758976,0,0,5791744,0,0,0,0,0,0,0,1151,1278,0,0,0,0,0,0,1285,0,0,0,0,0,0,0,1290,0,0,0,0,0,0,0,0,521,521,521,521,521,848,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,0,6479872,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4931584,4939776,4358144,4358144,4358144,4358144,4358144,4358144,5054464,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5210112,4358144,4358144,4358144,4358144,5292032,4358144,4358144,4358144,4358144,5365760,4358144,4358144,4358144,5455872,4358144,4358144,4358144,4358144,4358144,5554176,5570560,5578752,5619712,5668864,4358144,4358144,4358144,5791744,5816320,4358144,5857280,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6119424,4358144,6168576,4358144,4358144,4358144,4358144,6242304,4358144,6291456,4358144,6316032,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6463488,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4931584,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,6463488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4931584,4939776,0,0,0,0,0,0,5054464,0,0,0,0,0,0,0,0,5210112,0,0,0,0,5292032,0,0,0,0,5365760,0,0,0,5455872,0,0,0,0,0,5554176,5570560,5578752,5619712,5668864,0,5578752,5619712,5668864,0,0,0,5791744,5816320,0,5857280,0,0,0,0,0,0,0,0,0,0,0,0,0,6119424,0,6168576,0,0,0,0,0,6242304,0,6291456,0,6316032,0,6291456,0,6316032,0,0,0,0,0,0,0,0,0,6463488,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4931584,4939776,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,491520,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,5578752,5619712,5668864,4358144,4358144,4358144,5791744,5816320,4358144,5857280,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6119424,4358144,6168576,4358144,4358144,4358144,4358144,4358144,6242304,4956160,4964352,0,0,0,0,0,0,0,0,0,0,5218304,0,0,0,0,5799936,0,5881856,0,0,0,0,0,0,0,0,0,6373376,6389760,0,0,0,0,0,1758,0,0,1761,0,1763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,977,0,0,0,0,0,0,0,0,0,0,0,6488064,6103040,0,0,0,0,0,6184960,5316608,0,0,5644288,0,0,0,0,0,0,0,0,0,0,6217728,0,0,0,0,0,0,0,0,0,3384,0,0,0,3388,0,0,0,0,0,3394,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,0,0,5390336,5308416,5488640,0,0,5070848,5431296,0,6430720,0,0,5160960,0,0,0,0,0,0,0,0,0,0,0,4784128,0,0,0,0,0,0,0,0,3623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2359296,417,417,0,0,0,0,0,0,0,0,0,6283264,6332416,0,0,0,5881856,0,5382144,0,0,0,0,0,0,6266880,4784128,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4915200,4358144,4956160,4972544,4358144,4358144,4358144,4358144,4358144,4358144,5070848,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5218304,4358144,5267456,4358144,4358144,5308416,5316608,4358144,4358144,4358144,5431296,4358144,5488640,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5799936,4358144,4358144,5881856,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6103040,4358144,4358144,4358144,6184960,4358144,4358144,6283264,4358144,4358144,6332416,4358144,4358144,4358144,6389760,4358144,4358144,6430720,6438912,4358144,4358144,4358144,6266880,6488064,0,0,0,6266880,6488064,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3149,0,0,0,0,3154,0,0,0,0,0,0,0,0,0,0,0,4358144,6430720,6438912,0,0,0,0,0,0,4784128,0,0,0,4849664,0,0,0,0,0,4915200,0,4956160,4972544,0,0,0,0,0,0,5070848,0,0,0,0,0,0,0,5218304,0,0,6103040,0,0,0,6184960,0,0,0,6283264,0,0,6332416,0,0,0,6389760,0,0,6430720,6438912,4784128,4358144,4358144,4358144,4849664,4358144,4358144,4358144,4358144,4358144,4915200,0,5660672,5718016,0,5865472,0,0,6037504,0,0,6078464,0,0,6340608,0,6455296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,325,326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5472256,0,0,0,6209536,0,0,0,0,6176768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4898816,0,5709824,0,0,0,0,0,1790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,0,0,2348,0,0,0,0,0,0,0,0,5283840,0,0,0,0,5251072,0,6414336,5832704,0,5955584,0,0,4358144,4358144,4841472,4358144,4358144,4358144,4898816,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,368640,0,0,0,0,0,0,4857856,4874240,0,0,4923392,4358144,5111808,4358144,4358144,4358144,4358144,4358144,5283840,4358144,4358144,4358144,4358144,5472256,5521408,4358144,4358144,4358144,5595136,5709824,5718016,4358144,5824512,5865472,4358144,4358144,5922816,4358144,4358144,6021120,4358144,6037504,4358144,4358144,6078464,6111232,4358144,6176768,6209536,4358144,6234112,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,3408,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1172,0,0,0,0,0,0,0,0,0,4358144,6078464,6111232,4358144,6176768,6209536,6234112,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,0,0,0,340,0,0,0,0,0,0,0,0,0,0,0,0,0,388,0,139264,147456,0,0,0,0,0,6037504,0,0,6078464,6111232,0,6176768,6209536,0,6234112,0,0,0,0,0,0,0,0,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,0,0,3773,0,3627,3775,0,0,3778,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,4024,521,4026,521,521,4028,521,57886,57886,57886,57886,57886,57886,57886,0,6021120,0,6037504,0,0,6078464,6111232,0,6176768,6209536,0,6234112,0,0,0,0,0,0,0,4358144,4358144,4841472,4358144,4358144,4358144,4898816,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,499712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,4358144,4358144,4358144,4358144,4358144,4358144,5111808,4358144,4358144,4358144,4358144,4358144,5283840,4358144,4358144,4358144,4358144,5472256,5521408,4358144,4358144,4358144,4358144,5595136,5709824,5718016,4358144,5824512,5865472,4358144,4358144,5922816,0,5029888,5038080,0,0,5103616,5201920,0,0,0,0,0,0,0,0,0,0,0,0,0,6406144,5357568,0,5505024,0,0,0,0,0,5890048,0,0,0,0,0,521,521,521,521,521,521,521,521,521,1873,521,521,521,521,521,521,521,521,1884,521,521,521,521,521,521,521,521,521,3216,521,521,521,521,0,0,57886,57886,57886,57886,57886,60569,57886,60570,57886,57886,57886,57886,57886,57886,57886,57886,57886,58842,57886,57886,57886,57886,50657,58754,977,57909,57909,58854,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59962,59963,57909,57909,57909,57909,57909,57909,59970,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,6160384,0,5095424,5349376,0,5275648,0,0,0,0,0,0,0,0,0,0,0,5947392,0,0,0,0,0,0,0,0,0,0,0,0,0,301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0,0,0,0,0,6471680,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4997120,4358144,4358144,5038080,4358144,4358144,4358144,5095424,5103616,4358144,4358144,5201920,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5890048,4358144,4358144,4358144,6029312,4358144,4358144,4358144,4358144,6160384,4358144,4358144,4358144,4358144,5890048,4358144,4358144,4358144,6029312,4358144,4358144,4358144,4358144,6160384,4358144,4358144,4358144,4358144,4358144,4358144,6406144,0,0,0,0,0,0,0,0,4997120,0,0,5038080,0,0,0,0,6406144,0,0,0,0,0,0,0,0,4997120,0,0,5038080,0,0,0,5095424,5103616,0,0,5201920,0,0,0,0,0,0,0,0,0,0,0,5890048,0,0,0,6029312,0,0,0,0,6160384,0,0,0,0,0,0,0,6406144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4997120,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6406144,4358144,4358144,4358144,0,0,0,4890624,0,0,0,0,0,0,0,0,0,5898240,5963776,0,0,6193152,0,0,5406720,6397952,5300224,5234688,5423104,0,0,0,0,5988352,0,0,6135808,6307840,0,5996544,4800512,0,6356992,0,0,0,5496832,0,0,0,0,0,5611520,0,0,0,0,0,0,0,1187,0,0,1190,1191,0,0,0,0,1195,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,782,0,0,0,0,0,0,0,786,0,0,0,0,0,0,0,0,0,0,0,0,801,4947968,5021696,5529600,0,0,5169152,0,0,0,4800512,4808704,4358144,4358144,4890624,4358144,4947968,4358144,4358144,4358144,5046272,4358144,4358144,4358144,4358144,5185536,4358144,5234688,5300224,4358144,4358144,5406720,5529600,4358144,4358144,4358144,5898240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6307840,4358144,4358144,6356992,6381568,6397952,4800512,4808704,0,0,4890624,0,4947968,0,0,0,5046272,0,0,0,0,5185536,0,5234688,5300224,0,0,5406720,5529600,0,0,0,0,5898240,0,0,0,0,0,0,0,0,6307840,0,0,6356992,6381568,6397952,4800512,4808704,0,0,4890624,0,0,6356992,6381568,6397952,4800512,4808704,4358144,4358144,4890624,4358144,4947968,4358144,4358144,4358144,5046272,4358144,4358144,4358144,4358144,5185536,4358144,5234688,5300224,4358144,4358144,5406720,5529600,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4907008,0,5079040,6094848,0,0,0,4358144,4907008,4358144,5079040,4358144,5226496,4358144,5742592,4358144,4358144,4358144,6094848,0,4907008,0,5079040,0,5226496,5898240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6307840,4358144,4358144,6356992,6381568,6397952,5021696,4358144,4358144,5021696,0,0,0,4980736,0,0,0,0,0,5373952,5734400,6045696,0,0,0,0,0,2306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2290,0,0,0,0,0,0,0,6152192,0,0,0,6316032,0,0,0,0,5816320,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2778,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2803,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6258688,6447104,0,0,6127616,0,6348800,5906432,0,5537792,3627,0,0,0,0,5939200,0,0,5677056,6365184,4866048,0,6070272,5545984,5152768,0,0,6144e3,4358144,4866048,4882432,4358144,0,0,0,0,0,4825088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5177344,0,0,0,0,0,0,0,0,0,5324800,5373952,5537792,5545984,5586944,5734400,5971968,0,6045696,0,6070272,0,0,0,0,6348800,0,4866048,4882432,0,4980736,0,0,0,0,0,0,0,0,521,831,521,521,521,521,521,521,521,521,521,521,521,877,521,521,521,521,895,521,521,57886,57886,58249,0,5324800,5373952,5537792,5545984,5586944,5734400,5971968,0,6045696,0,6070272,0,0,0,0,6348800,4358144,4866048,4882432,4358144,4980736,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5324800,5373952,5537792,5545984,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,6348800,0,4866048,4882432,0,4980736,0,0,0,0,5537792,5545984,5586944,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,4358144,6348800,4358144,6144e3,0,6144e3,0,4988928,5005312,0,0,0,0,5775360,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,3441,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3454,521,521,521,0,0,0,0,0,0,57886,57886,60242,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60250,57886,57886,57886,57886,57886,57886,57886,57886,57886,60293,57886,57886,57886,60296,60297,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59917,57909,57909,57909,57909,57909,57909,57909,5693440,0,6496256,5144576,5136384,0,5914624,4358144,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,0,0,5005312,0,0,0,512e4,5136384,0,0,0,0,0,0,0,0,0,0,6324224,0,0,5005312,0,0,0,512e4,5136384,0,0,0,0,0,0,0,0,0,0,6324224,4358144,0,0,900,900,900,4825988,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,5178244,900,900,900,900,900,5219204,900,5268356,900,900,5309316,5317508,900,900,900,5432196,900,5489540,900,900,900,900,900,900,900,900,900,5800836,900,900,5882756,900,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,5914624,5914624,0,0,0,0,0,5513216,5783552,0,3627,0,0,0,0,0,0,1759,0,0,0,0,0,0,0,0,0,0,0,0,1772,0,1774,0,0,0,1778,0,0,0,1782,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,0,5013504,0,0,6053888,0,0,0,0,6012928,4358144,4358144,5013504,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6053888,4358144,4358144,0,0,5013504,0,0,0,0,0,0,685,0,0,0,0,0,0,692,367,367,367,0,0,0,0,0,0,0,0,0,0,0,705,0,0,0,0,0,0,0,0,6053888,0,0,0,0,0,5013504,0,0,0,0,0,0,0,0,0,6053888,0,0,0,4358144,4358144,5013504,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5799936,4358144,4358144,5881856,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6103040,4358144,4358144,4358144,6184960,4358144,4358144,4358144,6283264,4358144,4358144,6332416,4358144,4358144,4358144,4358144,4358144,6053888,4358144,4358144,4358144,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,5193728,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,901,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,0,0,0,0,0,0,0,5414912,0,5447680,0,5464064,0,5480448,5562368,0,0,0,5636096,0,5685248,0,0,5750784,0,0,0,0,0,5873664,0,0,0,0,0,0,0,0,0,5193728,0,0,0,0,0,0,0,0,0,0,0,0,0,5193728,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,5193728,4358144,0,1959,0,0,0,4825088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5177344,0,0,0,0,0,0,715,0,717,0,0,0,0,0,0,0,0,0,0,0,0,0,732,0,0,0,0,0,0,0,0,0,1189,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,1250,1252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,362,0,0,0,0,0,0,367,0,295,0,0,5742592,0,0,0,6094848,0,0,4907008,0,5079040,0,5226496,0,5742592,0,0,0,6094848,0,4358144,4907008,4358144,5079040,4358144,5226496,4358144,5742592,4358144,4358144,4358144,6094848,4358144,5062656,0,0,0,4358144,5062656,4358144,4358144,4358144,4358144,4358144,0,5062656,0,0,0,0,0,6225920,0,5062656,0,0,0,0,0,6225920,4358144,5062656,4358144,4358144,4358144,0,900,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,0,0,0,0,0,0,746,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,762,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,2396,521,521,521,521,2400,521,521,521,521,521,521,521,521,521,521,521,3199,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1390,521,521,1394,521,521,521,521,521,1401,521,521,4358144,4358144,4358144,6225920,0,0,0,4816896,4358144,4358144,4358144,4358144,6086656,4816896,0,0,0,0,6086656,4816896,0,0,0,0,6086656,4816896,4358144,4358144,4358144,4358144,6086656,5087232,0,5931008,4358144,5332992,5980160,4358144,0,5332992,5980160,0,0,5332992,5980160,0,4358144,5332992,5980160,4358144,5439488,5128192,4358144,5128192,0,5128192,0,5128192,4358144,4358144,0,0,4358144,4358144,0,0,4358144,6004736,6004736,6004736,6004736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,0,0,0,0,0,0,0,0,1294,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2816,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,221645,221645,221645,461,461,461,461,461,461,461,461,461,461,461,461,461,221645,461,221645,221645,221645,461,221645,221645,221645,221645,221645,221645,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,327,328,329,330,0,0,0,0,0,0,0,0,0,0,221645,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1769,0,0,0,0,0,0,0,0,0,0,1780,0,0,0,0,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3414,0,0,0,0,3418,0,0,0,0,3423,0,0,0,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,237568,301,0,305,237568,0,0,0,0,0,0,0,0,0,0,0,0,0,302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,788,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,305,0,0,0,0,0,0,0,0,0,0,0,0,305,0,0,0,0,0,0,305,237982,147456,0,0,0,305,0,0,0,0,0,2334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2349,0,0,0,0,0,0,0,3406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3420,3421,0,0,0,0,3426,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,516096,0,0,0,0,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,0,305,0,0,0,0,0,521,521,521,521,521,521,1870,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2453,521,521,521,2456,521,521,521,521,521,2461,521,305,1,24578,3,0,0,4366336,0,0,0,0,0,65536,302,0,4268032,98304,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3626,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4210978,24578,3,0,0,296,0,0,0,0,296,0,0,0,0,0,0,0,0,0,245760,0,0,0,0,0,0,0,0,0,0,0,399,0,0,0,0,0,0,0,0,0,0,0,399,0,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,245760,0,0,0,0,245760,0,245760,0,245760,0,0,0,0,0,0,0,0,0,0,0,0,0,326,400,0,0,0,0,0,0,0,0,0,326,0,0,0,0,0,0,0,0,4210978,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212992,0,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1257,0,0,0,0,0,0,0,0,0,0,0,0,0,1270,0,0,2059,0,0,0,4825088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5177344,0,0,0,0,0,0,0,1730,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,311,310,0,0,0,310,310,311,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,262144,0,0,0,0,0,0,0,0,0,0,350,0,0,0,0,0,0,0,0,351,0,0,0,0,0,0,0,0,0,0,0,0,657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,673,674,0,0,0,0,0,0,262144,262144,262144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,301,0,0,0,262144,0,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,262731,0,262731,0,0,0,0,0,521,521,521,521,521,3439,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3670,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60591,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59853,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60298,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,262731,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245760,245760,245760,245760,245760,245760,245760,0,0,0,0,0,0,0,0,0,0,278528,278528,0,0,131072,278528,0,0,0,278528,0,0,0,0,278528,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,333,0,0,0,0,0,0,0,0,0,0,0,333,384,0,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,0,278528,0,0,0,0,0,521,521,521,521,3438,521,521,521,521,3442,521,521,521,521,521,521,521,3448,521,521,521,521,521,521,521,521,521,1901,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1921,521,521,278528,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,262144,0,0,0,0,0,0,262144,262144,0,0,0,0,0,0,0,0,0,0,0,262144,262144,0,262144,0,0,0,139264,147456,262144,0,0,0,0,0,0,0,0,415,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,302,0,0,0,1,24578,3,0,0,4366336,0,0,0,0,0,301,631,0,4268032,305,634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,532480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,754,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,1506,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,3624,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2810,2811,0,0,0,0,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,286720,302,0,306,286720,0,0,0,0,0,0,0,0,0,0,0,0,0,722,0,0,0,0,0,0,0,0,0,733,0,0,0,0,733,0,739,0,0,0,0,0,306,0,0,0,0,0,0,0,0,0,0,0,0,306,0,0,0,0,0,0,306,139264,287138,0,0,0,306,0,0,0,0,0,2386,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2402,521,2404,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59830,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60836,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60274,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,0,306,0,0,0,0,0,521,521,521,3437,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3449,521,521,521,521,521,521,521,521,521,3464,521,3466,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,61250,57909,57909,61252,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,59994,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,306,1,24578,3,0,0,4366336,0,0,0,0,0,301,66168,0,4268032,305,98939,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,0,0,0,122880,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2352,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,303,303,303,0,0,303,303,295215,303,303,303,303,303,303,303,303,303,295215,373,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,368,303,0,295215,303,303,303,303,295285,295215,295215,295215,295215,295215,295215,303,303,303,303,303,303,295285,295215,295215,295215,303,303,303,295285,139264,147456,295215,295215,303,303,295215,303,303,131072,303,303,303,303,295215,303,303,303,303,295215,303,295215,295215,295215,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,295215,295215,295215,295215,295215,295215,303,303,303,295215,303,303,303,303,303,303,303,303,303,303,303,303,303,295215,303,295215,295215,295215,295215,295215,295215,295215,303,0,303,0,303,303,303,295215,303,303,303,295215,295215,303,295215,303,295215,295215,295215,295215,295215,295215,295215,295215,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295285,295215,295215,295215,295215,295215,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4358144,4359045,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319488,0,0,0,0,0,0,0,0,0,352256,0,352256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2373,0,0,0,0,0,0,0,0,0,0,0,0,319488,0,0,0,0,0,0,319488,319488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1743,0,0,0,0,0,0,0,1751,1752,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,319488,0,0,0,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,0,0,0,0,319488,0,0,0,0,0,0,0,0,0,0,319488,0,0,0,0,0,0,0,0,0,319488,0,0,0,0,319488,0,319488,319488,319488,0,24578,3,0,0,4366336,253952,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5627904,0,0,0,0,0,0,0,0,0,0,0,0,0,4284416,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,327680,0,0,0,0,0,0,0,0,521,2389,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3219,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,60571,57886,57886,57886,57886,57886,57886,60579,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,327680,327680,327680,0,0,0,0,0,0,0,0,0,0,327680,327680,327680,327680,335872,327680,327680,327680,335872,327680,327680,327680,327680,327680,327680,0,0,0,0,0,0,0,0,0,49716,0,0,0,0,0,327680,49716,327680,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5627904,0,0,0,0,0,0,196608,0,0,0,106496,0,0,4284416,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,49152,977,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,6463488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4931584,4939776,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,344064,344064,344064,0,0,0,0,0,0,0,0,0,0,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,727,0,0,0,0,0,0,0,0,0,0,0,0,0,344064,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,356,357,358,359,0,0,0,0,0,0,0,0,0,367,0,295,0,0,0,0,0,4276224,1245,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352256,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,352256,0,0,0,0,0,0,131072,0,352256,352256,0,0,352256,0,0,352256,0,352256,0,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1197,0,367,367,0,1200,0,0,0,0,0,0,0,0,352256,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,0,0,0,0,0,0,0,0,706,0,0,1,291,3,0,0,0,297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3398,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,360448,360448,360448,0,0,0,0,0,0,0,0,0,0,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1226,0,0,0,0,0,0,0,0,0,0,0,0,0,360448,1,0,3,155941,155941,295,0,629,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1212,0,0,0,0,1217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4276224,1245,0,0,0,0,0,0,0,0,0,0,0,0,1259,0,0,0,0,0,0,0,0,0,0,0,0,0,1221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1188,0,58796,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59402,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58826,57886,57886,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59502,57886,0,2281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,739,0,0,0,2357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3428,0,57909,59926,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58906,57909,57909,59952,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57936,60009,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,60035,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60937,521,3212,521,521,521,521,521,521,521,521,521,521,521,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59387,59388,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60604,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60320,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,60702,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,3612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,369,0,0,0,57886,57886,60830,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60853,57886,57886,57936,57936,57936,57936,60914,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60057,57936,57936,57936,57936,61027,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,61045,57909,57909,57909,57909,57909,57909,57909,57909,57909,60634,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59493,57909,57909,57909,57909,57909,57909,57909,57909,57886,61048,57909,57909,57909,57909,57909,57909,57909,57909,57909,61056,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,60378,57936,57936,57936,57886,57886,57886,57886,61156,57886,57886,57886,57886,61157,61158,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,59997,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,61175,57909,57909,57909,57909,61176,61177,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61194,57936,0,0,0,0,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,61078,61079,57936,57936,57936,57936,61083,61084,57936,57936,57936,57936,57936,61088,57936,57936,57936,57936,57936,57936,57936,57936,57936,61195,61196,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,3177,521,521,521,521,521,521,3184,521,3186,521,521,521,57936,57936,57936,57936,57936,61270,57936,57936,57936,57936,57936,57936,61276,57936,57936,57936,61280,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,1791,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,672,0,0,0,0,0,0,0,3947,521,521,521,521,521,521,521,521,521,521,521,521,521,521,61306,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58312,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61322,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61338,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,3759,521,57886,61105,57886,0,0,0,0,0,0,0,0,0,0,0,57886,61439,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,61452,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,61465,57936,57936,57936,57936,57936,57936,57936,57936,57936,60413,57936,57936,57936,57936,57936,57936,60421,57936,57936,57936,57936,57936,60426,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,4077,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,0,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,521,57886,57909,57936,521,57886,57909,57936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1829,0,0,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,376832,376832,376832,0,0,0,0,0,0,0,0,0,0,0,0,0,1254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1268,1269,0,0,0,0,0,419,419,419,419,590,590,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,0,419,0,0,0,0,0,521,1866,521,521,521,521,521,521,1872,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,57886,57886,57886,57886,60568,57886,57886,57886,57886,57886,57886,60575,57886,60577,57886,57886,419,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,696,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2817,0,0,0,4268773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2380,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,307,0,0,0,0,0,0,0,0,0,0,0,0,721,0,0,0,0,0,0,0,0,731,0,637,731,0,735,736,637,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,393678,393678,393678,0,0,0,0,0,0,0,0,0,0,0,0,0,1309,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,4025,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,0,0,0,393678,0,393678,393678,393678,0,393678,393678,393678,393678,393678,393678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,425984,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,3176,521,521,521,521,521,3181,521,521,521,521,521,521,521,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,475136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,374,0,0,375,0,0,0,0,0,327,375,330,374,0,0,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,57887,521,57887,521,521,57887,521,521,57910,57887,521,521,57887,57887,57887,57910,0,0,0,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,0,420,0,0,0,0,0,521,3435,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1916,521,521,521,521,521,521,420,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,304,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,723,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,741,420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2791,0,0,1239,0,0,0,741,1246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,1322,521,521,521,521,521,521,521,2468,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60276,57886,57886,57886,57886,57886,57886,57886,57886,521,521,521,2468,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60305,57886,57886,0,0,0,2963,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417792,308,309,0,0,0,0,0,0,1815,0,0,0,0,0,0,0,0,1821,0,1823,0,0,0,0,0,0,0,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3127,0,0,0,0,3132,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,309,0,417792,417792,0,0,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,418101,417792,417792,418100,418101,417792,417792,418100,417792,418100,417792,0,0,0,0,0,0,0,0,417792,0,0,0,417792,0,0,0,0,0,0,0,0,0,0,0,309,309,309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1802,0,0,0,0,0,0,0,0,0,0,0,0,0,417792,1,24578,3,0,0,4366964,0,0,0,0,0,301,302,311296,4268032,305,306,0,434176,0,0,0,0,0,0,0,0,0,0,0,0,1846,0,0,0,0,0,0,0,0,0,0,0,0,0,1859,0,0,1860,0,0,900,900,5415812,900,5448580,900,5464964,900,5481348,5563268,900,900,900,5636996,900,5686148,900,900,5751684,900,900,900,900,900,5874564,900,900,900,900,900,900,900,900,900,6464388,0,0,0,0,976,976,976,976,976,976,976,976,976,976,976,4932560,4940752,976,976,976,976,976,4359044,4858756,4875140,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5260164,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5415812,4359044,5448580,4359044,5464964,4359044,5481348,5563268,4359044,4359044,4359044,5636996,4359044,5686148,4359044,4359044,5751684,4359044,4359044,4359044,4359044,4359044,5874564,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6275972,4359044,4359044,4359044,4359044,4359044,4359044,5342084,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5628804,5653380,4359044,5702532,4359044,4359044,5809028,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4907008,0,5079040,6094848,0,0,0,4358144,4907008,4358144,5079040,4358144,5226496,4358144,5742592,4358144,4358144,4358144,6094848,900,4907908,900,5079940,900,5227396,900,5243780,900,900,900,900,900,900,900,5342084,900,900,900,900,900,900,900,900,900,900,900,900,5628804,5653380,900,5702532,900,900,900,900,900,900,5211012,900,900,900,900,5292932,900,900,900,900,5366660,900,900,900,5456772,900,900,900,900,900,5555076,5571460,5579652,5620612,5669764,900,0,0,976,976,976,4826064,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,5178320,976,976,976,976,976,5112784,976,976,976,976,976,5284816,976,976,976,976,5473232,5522384,976,976,976,976,5596112,5710800,5718992,976,5825488,5866448,976,976,5923792,976,5243856,976,976,976,976,976,976,976,5342160,976,976,976,976,976,976,976,976,976,976,976,976,5628880,5653456,976,5702608,976,976,976,976,976,976,976,5260240,976,976,976,976,976,976,976,976,5415888,976,5448656,976,5465040,976,5481424,5563344,976,976,976,5637072,976,5686224,976,976,5751760,976,4358144,4358144,4358144,4358144,4358144,6463488,0,0,0,0,900,900,900,900,900,900,900,900,900,900,900,4932484,4940676,900,900,900,900,900,900,5055364,900,900,5112708,900,900,900,900,900,5284740,900,900,900,900,5473156,5522308,900,900,900,900,5596036,5710724,5718916,900,5825412,5866372,900,900,5923716,900,900,6022020,900,900,900,5792644,5817220,900,5858180,900,900,900,900,900,900,900,900,900,900,900,900,900,6120324,900,6169476,900,900,900,900,900,6243204,900,6292356,900,6316932,976,5055440,976,976,976,976,976,976,976,976,5211088,976,976,976,976,5293008,976,976,976,976,5366736,976,976,976,5456848,976,976,976,976,976,5555152,5571536,5579728,5620688,5669840,976,976,976,5792720,5817296,976,5858256,976,976,976,976,976,976,976,976,976,976,976,976,976,6120400,976,6169552,976,976,976,976,976,6243280,976,6292432,976,6317008,976,976,976,976,976,976,976,976,976,6464464,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4932484,4940676,4359044,4359044,4359044,4359044,4359044,4358144,4358144,4358144,4358144,4358144,4358144,0,900,900,900,900,900,900,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,4923392,4359044,5055364,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5211012,4359044,4359044,4359044,4359044,5292932,4359044,4359044,4359044,4359044,5366660,4359044,4359044,4359044,5456772,4359044,4359044,4359044,4359044,4359044,5555076,5571460,5579652,5620612,5669764,4359044,4359044,4359044,5792644,5817220,4359044,5858180,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6120324,4359044,6169476,4359044,4359044,4359044,4359044,4359044,6243204,4359044,6292356,4359044,6316932,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6464388,4358144,4358144,4358144,4358144,4358144,900,900,900,900,900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4931584,0,0,0,0,0,0,0,4358144,6430720,6438912,0,0,0,0,0,0,4785028,900,900,900,4850564,900,900,900,900,900,4916100,900,4957060,4973444,900,900,900,900,900,900,5071748,900,900,5194628,900,900,900,900,900,900,900,900,976,976,976,976,976,5194704,976,976,976,976,976,976,976,976,4359044,4359044,4359044,4359044,4359044,5194628,4359044,0,0,4785104,976,976,976,4850640,976,976,976,976,976,4916176,976,4957136,4973520,976,976,976,976,976,976,5071824,976,976,976,976,976,976,976,5219280,976,976,6357968,6382544,6398928,4801412,4809604,4359044,4359044,4891524,4359044,4948868,4359044,4359044,4359044,5047172,4359044,4359044,4359044,4359044,5186436,4359044,5235588,5301124,4359044,4359044,5407620,5530500,4359044,4359044,4359044,4359044,4359044,4923392,4358144,4358144,4358144,4358144,4358144,900,4924292,900,900,900,900,4366336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1255,0,0,0,0,0,0,0,0,0,1264,0,0,0,0,0,0,0,5268432,976,976,5309392,5317584,976,976,976,5432272,976,5489616,976,976,976,976,976,976,976,976,976,5800912,976,976,5882832,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,976,6104016,976,976,976,6185936,976,976,976,6284240,976,976,6333392,976,976,976,6390736,976,976,6431696,6439888,4785028,4359044,4359044,4359044,4850564,4359044,4359044,4359044,4359044,4359044,4916100,4359044,4957060,4973444,4359044,4359044,4359044,4359044,4359044,4359044,5071748,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5219204,4359044,5268356,4359044,4359044,5309316,5317508,4359044,4359044,4359044,5432196,4359044,5489540,4359044,4359044,4359044,4359044,4359044,6054788,4359044,4359044,4359044,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,5193728,4358144,4358144,4358144,4358144,4358144,4358144,4358144,900,900,900,5096324,5104516,900,900,5202820,900,900,900,900,900,900,900,900,900,900,900,5890948,900,900,900,6030212,900,900,900,900,6161284,900,900,900,900,6407044,976,976,976,976,976,976,976,976,4998096,976,976,5039056,976,976,976,5096400,5104592,976,976,5202896,976,976,976,976,976,976,976,5891024,976,976,976,6030288,976,976,976,976,6161360,976,976,976,976,976,976,976,6407120,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4998020,4359044,4358144,6078464,6111232,4358144,6176768,6209536,6234112,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,900,900,4842372,900,900,900,4899716,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,975,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,6300624,976,976,976,976,976,976,976,976,976,976,976,5809028,6038404,900,900,6079364,6112132,900,6177668,6210436,900,6235012,900,900,900,900,900,900,900,0,0,976,976,4842448,976,976,976,4899792,976,976,976,976,976,976,5874640,976,976,976,976,976,976,976,976,976,976,976,6276048,976,976,976,976,976,976,976,976,976,0,900,4359044,4359044,4359044,4359044,4359044,4359044,5112708,4359044,4359044,4359044,4359044,4359044,5284740,4359044,4359044,4359044,4359044,5473156,5522308,4359044,4359044,4359044,4359044,5596036,5710724,5718916,4359044,5825412,5866372,4359044,4359044,5923716,976,6022096,976,6038480,976,976,6079440,6112208,976,6177744,6210512,976,6235088,976,976,976,976,976,976,976,4359044,4359044,4842372,4359044,4359044,4359044,4899716,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5800836,4359044,4359044,5882756,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6103940,4359044,4359044,4359044,6185860,4359044,4359044,4359044,6284164,4359044,4359044,6333316,4359044,4359044,6022020,4359044,6038404,4359044,4359044,6079364,6112132,4359044,6177668,6210436,4359044,6235012,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4358144,4358144,4358144,900,900,900,0,0,0,0,0,0,0,1760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,0,419,0,4358144,4358144,4358144,5890048,4358144,4358144,4358144,6029312,4358144,4358144,4358144,4358144,6160384,4358144,4358144,4358144,4358144,4358144,4358144,6406144,900,900,900,900,900,900,900,900,4998020,900,900,5038980,4359044,5038980,4359044,4359044,4359044,5096324,5104516,4359044,4359044,5202820,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5890948,4359044,4359044,4359044,6030212,4359044,4359044,4359044,4359044,6161284,4359044,4359044,4359044,6226820,0,0,0,4816896,4358144,4358144,4358144,4358144,6086656,4817796,900,900,900,900,6087556,4817872,976,976,976,976,6087632,4817796,4359044,4359044,4359044,4359044,6087556,5087232,4358144,4358144,4358144,5898240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6307840,4358144,4358144,6356992,6381568,6397952,4801412,4809604,900,900,4891524,900,4948868,900,900,900,5047172,900,900,900,900,900,6054788,900,900,900,976,976,5014480,976,976,976,976,976,976,976,976,976,6054864,976,976,976,4359044,4359044,5014404,4359044,4359044,4359044,4359044,4359044,4359044,6407044,4358144,4358144,4358144,900,900,900,4890624,0,0,0,0,0,0,0,0,0,5898240,5963776,0,0,6193152,0,0,5406720,6397952,5186436,900,5235588,5301124,900,900,5407620,5530500,900,900,900,900,5899140,900,900,900,900,900,900,900,900,6308740,900,900,6357892,6382468,6398852,4801488,4809680,976,976,4891600,976,4948944,976,976,976,5047248,976,976,976,976,5186512,976,5235664,5301200,976,976,5407696,5530576,976,976,976,976,5899216,976,976,976,976,976,976,976,976,6308816,5899140,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6308740,4359044,4359044,6357892,6382468,6398852,5021696,4358144,4358144,5022596,900,900,0,4980736,0,0,0,0,0,5373952,5734400,6045696,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2785,0,2786,0,0,0,0,0,0,0,0,1843,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1263,0,0,0,0,0,0,0,0,4980736,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5324800,5373952,5537792,5545984,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,6348800,900,4866948,4883332,900,4981636,900,900,900,900,5325700,5374852,5538692,5546884,5587844,5735300,5972868,900,6046596,900,6071172,900,900,900,900,6349700,976,4867024,4883408,976,4981712,976,976,976,976,976,976,976,976,5325776,5374928,5538768,5546960,5587920,5735376,5972944,976,6046672,976,6071248,976,976,976,976,6349776,4359044,4866948,4883332,4359044,4981636,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5325700,5374852,5538692,5546884,5587844,5735300,5972868,4359044,6046596,4359044,6071172,4359044,4359044,4359044,4359044,6349700,4358144,6144e3,900,6144900,0,4988928,5005312,0,0,0,0,5775360,0,0,0,3627,0,0,0,0,0,655,0,0,521,521,521,521,521,845,521,521,861,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59499,57909,57909,57909,57886,5693440,0,6496256,5144576,5136384,0,5914624,4358144,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,900,900,5006212,900,900,900,5120900,5137284,900,900,900,900,900,900,900,900,900,900,6325124,976,976,5006288,976,976,976,5120976,5137360,976,976,976,976,976,976,976,976,976,976,6325200,4359044,4359044,4359044,6390660,4359044,4359044,6431620,6439812,4358144,4358144,4358144,6266880,6488064,900,900,900,6267780,6488964,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1767,0,0,0,0,0,1773,0,0,0,0,0,0,0,0,0,0,0,4359044,5006212,4359044,4359044,4359044,5120900,5137284,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6325124,5914624,5915524,0,0,0,0,0,5513216,5783552,0,3627,0,0,0,0,0,0,2285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1265,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,6300548,900,900,900,900,900,900,900,900,900,900,900,0,5013504,0,0,6053888,0,0,0,0,6012928,4358144,4358144,5013504,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6053888,4358144,4358144,900,900,5014404,900,900,900,900,6275972,900,900,900,900,900,900,900,900,900,0,0,977,976,976,976,976,976,4858832,4875216,976,976,976,976,976,976,976,976,976,976,0,0,0,0,900,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,6300548,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4358144,4358144,900,5743492,900,900,900,6095748,900,976,4907984,976,5080016,976,5227472,976,5743568,976,976,976,6095824,976,4359044,4907908,4359044,5079940,4359044,5227396,4359044,5743492,4359044,4359044,4359044,6095748,4359044,5062656,0,0,0,4358144,5062656,4358144,4358144,4358144,4358144,4358144,900,5063556,900,900,900,900,900,6226820,976,5063632,976,976,976,976,976,6226896,4359044,5063556,4359044,4359044,4359044,4825988,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,4359044,5178244,4359044,4359044,4359044,4359044,4359044,5243780,4359044,0,5931008,4358144,5332992,5980160,4358144,900,5333892,5981060,900,976,5333968,5981136,976,4359044,5333892,5981060,4359044,5439488,5128192,4358144,5129092,900,5129168,976,5129092,4359044,4358144,900,976,4359044,4358144,900,976,4359044,6004736,6005636,6005712,6005636,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2345,0,0,0,0,0,2351,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450560,0,0,0,0,0,0,450560,0,0,450560,0,450560,450560,450560,450560,450560,450560,0,0,0,0,131072,0,0,0,0,0,0,450560,0,0,0,450560,0,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1824,0,0,0,0,0,0,1729,0,0,0,0,0,0,450560,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2359296,0,2359296,0,0,0,2359296,0,2359296,2359296,2359296,2359296,2359296,2359296,4358144,6291456,4358144,6316032,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6463488,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,302,0,0,306,0,0,0,0,0,0,2335,0,0,0,0,0,2339,0,0,0,0,0,0,0,2343,2344,0,0,0,0,0,2350,0,0,0,0,0,0,1302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,2836,521,521,521,521,2840,521,521,4358144,6430720,6438912,901,0,0,0,901,0,4784128,0,0,0,4849664,0,0,0,0,0,4915200,0,4956160,4972544,0,0,0,0,0,0,5070848,0,0,0,0,0,744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,327,0,0,374,374,404,977,0,4784128,0,0,0,4849664,0,0,0,0,0,4915200,0,4956160,4972544,0,0,0,0,0,0,5070848,0,0,0,0,0,0,0,5218304,0,5267456,0,0,5308416,5316608,0,0,0,5431296,0,5488640,0,0,0,0,0,0,0,0,0,5799936,0,0,5881856,0,0,0,0,0,0,0,0,4358144,6078464,6111232,4358144,6176768,6209536,6234112,4358144,4358144,4358144,4358144,4358144,4358144,4358144,901,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,3653,521,521,521,521,521,521,521,521,521,521,521,3218,521,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60573,57886,60576,57886,57886,57886,6037504,0,0,6078464,6111232,0,6176768,6209536,0,6234112,0,0,0,0,0,0,0,977,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,0,0,6103040,0,0,0,6184960,0,0,0,6283264,0,0,6332416,0,0,0,6389760,0,0,6430720,6438912,0,0,0,0,0,0,0,0,459186,0,0,0,0,0,0,0,0,0,0,0,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,459215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459340,459215,459372,459215,459215,459372,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2777,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5480448,0,0,0,0,0,0,0,0,0,0,5840896,5849088,0,1,24578,3,0,0,0,0,507904,0,0,0,507904,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507904,0,0,0,0,0,2796,0,0,0,0,0,0,0,0,0,0,0,2804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3385,3386,0,0,0,0,3391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2779,0,0,0,0,0,0,0,0,0,0,2789,0,0,0,2793,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2781,0,0,2784,0,0,0,0,2788,0,0,0,0,0,507904,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,442368,0,0,0,0,0,0,0,0,0,0,0,658,0,0,661,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1225,0,0,0,0,0,0,0,1233,0,0,0,0,0,0,1,24578,3,0,0,0,0,0,516096,0,0,0,516096,0,0,0,0,0,0,516096,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,2288,0,0,0,0,0,0,0,0,0,2297,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,516560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3152,0,0,0,0,0,0,0,0,0,0,0,0,0,516560,1,24578,0,0,0,4366336,0,0,548864,0,0,301,302,0,4268032,305,306,409600,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,2340,0,0,0,0,0,0,0,0,2347,0,0,0,0,0,0,2354,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,5914624,5914624,0,0,0,0,0,5513216,5783552,0,40960,0,0,0,0,0,0,2747,0,2749,0,0,2752,0,0,0,0,0,0,2757,0,0,0,2760,2761,0,0,0,0,0,0,0,0,521,521,521,521,521,521,855,521,521,521,521,521,874,521,521,521,521,892,521,521,521,57886,57886,57886,1,24578,4227364,0,0,0,0,0,0,298,0,0,0,298,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1227,0,0,0,0,0,0,0,0,0,0,0,0,0,540672,0,0,540672,0,0,0,540672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1857,0,0,0,0,0,0,0,0,1,24578,4227364,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,499712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2370,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,24578,3,155941,295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,636,0,0,0,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,0,0,0,0,742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,57887,57887,57887,57887,57887,57887,57887,57910,57910,57887,57887,57937,57887,57887,57887,57887,57887,57887,57887,57937,57937,57887,57887,57887,57887,57937,57937,57887,521,57887,57887,57887,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4399797,4399797,4399797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,358,0,0,399,0,0,0,0,0,139264,147456,399,410,0,423,410,1,24578,3,155942,295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1236,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,573440,0,573440,573440,573440,0,573440,573440,573440,573440,573440,573440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3628,0,0,0,3631,0,0,0,0,0,0,0,0,3639,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,573440,573440,573440,0,0,0,0,0,0,0,0,0,0,0,0,0,1819,1820,0,1822,0,0,0,0,0,0,0,0,0,0,0,0,0,1836,0,0,0,0,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4399798,311296,4399798,0,0,0,311296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4276224,0,0,0,0,0,0,0,0,0,0,0,0,0,1260,0,0,0,0,0,0,0,0,0,0,0,0,0,1847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1738,0,5300224,5234688,5423104,0,0,0,0,5988352,0,0,6135808,6307840,0,5996544,4800512,0,6356992,3627,0,0,5496832,0,0,0,0,0,5611520,0,0,0,0,0,0,0,1792,0,0,0,0,0,0,0,0,0,1801,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1818,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,326,326,376,0,0,0,0,0,0,0,0,0,0,1,24578,3,0,0,4366336,0,0,0,0,0,630,302,0,4268032,633,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2806,0,0,0,0,0,0,0,0,2814,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,581632,0,0,0,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,340,581632,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3172,0,521,521,521,521,521,521,521,521,521,521,521,3183,521,521,3187,521,521,6258688,6447104,0,0,6127616,0,6348800,5906432,0,5537792,3774,0,0,0,0,5939200,0,0,5677056,6365184,4866048,0,6070272,5545984,5152768,0,0,6144e3,4358144,4866048,4882432,4358144,4358144,4358144,0,901,900,900,900,900,900,4858756,4875140,900,900,900,900,900,900,900,900,900,900,900,900,900,5260164,900,900,900,900,900,900,900,900,6103940,900,900,900,6185860,900,900,900,6284164,900,900,6333316,900,900,900,6390660,900,900,6431620,6439812,0,0,0,0,5537792,5545984,5586944,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,4358144,6348800,4358144,6144e3,0,6144e3,0,4988928,5005312,0,0,0,0,5775360,0,0,0,3869,0,0,0,0,0,787,0,0,521,521,521,521,521,847,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60869,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59939,57909,57909,57909,57909,57909,57909,57909,57909,59946,57909,59948,57909,59951,57909,57909,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,5914624,5914624,0,0,0,0,0,5513216,5783552,0,3869,0,0,0,0,0,0,2822,0,0,0,0,0,0,0,0,0,2830,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,1938,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1387,521,521,521,521,521,521,521,521,521,521,521,521,521,0,310,311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3638,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,310,0,451,465,465,465,478,478,478,478,478,478,478,478,478,499,478,478,478,478,517,478,478,478,517,478,478,478,478,478,478,522,57888,522,57888,522,522,57888,522,522,57911,57888,522,522,57888,57888,57888,57911,57888,57888,57888,57888,57888,57888,57888,57911,57911,57888,57888,57938,57888,57888,57888,57888,57888,57888,57888,57938,57938,57888,57888,57888,57888,57938,57938,57888,522,57888,57888,57888,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,638,0,0,641,642,0,0,0,0,0,0,745,0,0,0,0,0,0,751,0,0,0,0,0,0,0,0,761,0,0,0,0,0,0,0,0,0,1279,0,0,0,0,1284,0,0,0,0,0,0,0,0,0,0,0,0,1292,0,0,0,0,0,0,0,0,743,0,0,0,0,638,0,0,0,0,0,0,0,0,0,0,758,0,0,0,0,764,0,0,768,0,0,0,0,0,0,3115,0,0,0,0,0,0,0,0,0,3121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1166,0,0,0,0,0,0,0,0,0,1175,0,1177,1178,0,0,0,0,0,0,0,776,0,0,0,0,780,0,0,0,0,0,0,0,784,0,0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,3114,0,0,0,0,0,3118,0,0,0,0,0,0,0,3124,3125,3126,0,0,0,0,0,0,0,0,0,0,1306,0,0,0,1310,0,0,0,0,1313,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61024,57886,57886,0,824,825,0,0,0,0,780,521,521,834,838,521,521,850,521,521,521,866,521,871,521,879,521,882,521,521,896,521,57886,57886,57886,57886,57886,57886,59898,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,59913,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59448,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59461,57909,57909,57909,57909,57909,57909,57909,58253,58257,57886,57886,58269,57886,57886,57886,58285,57886,58290,57886,58298,57886,58301,57886,57886,58315,57886,0,57909,57909,57909,58329,58333,57909,57909,58345,57909,57909,57909,58361,57909,58366,57909,58374,57909,58377,57909,57909,58391,57909,0,0,0,0,58290,57936,57936,57936,58404,58408,57936,57936,58420,57936,57936,57936,58436,57936,58441,57936,58449,57936,0,0,0,0,521,521,521,521,521,4172,521,57886,57886,57886,57886,57886,61522,57886,57886,57909,57909,57909,57909,57909,61528,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59544,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59557,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59545,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59014,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58452,57936,57936,58466,57936,834,838,1128,882,521,521,0,58257,58253,58478,58301,57886,57886,155941,1138,0,0,1141,0,0,1146,0,0,0,0,0,0,0,0,6103040,0,0,0,6184960,0,0,0,6283264,0,0,6332416,0,0,0,6389760,0,0,6430720,6438912,977,0,0,0,0,0,1210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1231,0,0,0,0,0,0,0,0,377,0,362,0,0,0,0,0,0,0,0,0,362,0,0,0,0,139264,147456,0,0,0,0,0,57886,58831,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59964,57909,57909,57909,57909,59969,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,1753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1777,0,0,0,0,0,0,0,0,1188,0,0,0,0,0,0,0,0,0,0,0,367,367,1199,0,0,0,0,0,0,0,0,0,688,0,0,0,0,367,367,367,0,0,697,0,0,0,0,0,0,0,704,0,0,0,0,0,0,0,1813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2815,0,0,1861,0,0,0,0,521,521,521,521,521,521,521,521,521,521,1874,521,521,521,521,521,521,521,521,521,1887,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61044,57886,57886,57886,57909,57909,57909,57909,57909,521,521,521,521,521,1929,521,521,1932,521,521,521,521,521,521,521,521,521,521,1945,521,521,521,521,521,521,1951,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59828,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59380,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,61166,57909,57909,57909,61169,57909,57909,57909,57909,521,58754,1960,57886,57886,57886,57886,57886,59311,57886,57886,57886,57886,57886,59317,57886,57886,57886,57886,57886,57886,57886,57886,57886,59330,57886,57886,57886,57886,57886,57886,57886,57886,57886,60835,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60845,57886,57886,57886,57886,57886,57886,57886,57886,57886,60854,57886,50657,2060,57909,57909,57909,57909,57909,59411,57909,57909,57909,57909,57909,59417,57909,57909,57909,57909,57909,57909,57909,57909,57909,59430,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58890,57909,57909,57909,58893,57909,57909,57909,57909,57909,57909,57909,58900,57909,57909,58904,57909,57909,57909,57909,57909,57909,57909,57909,59472,57909,57909,59475,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59489,57909,57909,57909,57909,57909,57909,59495,57909,57909,57909,57909,57909,57909,57886,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3151,0,0,0,3155,0,3157,0,0,0,0,0,0,0,0,57936,57936,57936,57936,57936,59507,57936,57936,57936,57936,57936,59513,57936,57936,57936,57936,57936,57936,57936,57936,57936,59526,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59579,57936,57936,57936,57936,57936,57936,59587,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,3105,0,0,0,0,0,0,57936,57936,59568,57936,57936,59571,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59585,57936,57936,57936,57936,57936,57936,59591,57936,57936,57936,57936,57936,57936,521,2256,521,521,521,57886,59605,57886,57886,57886,2265,0,2266,0,0,0,0,2268,0,2269,0,0,0,0,0,0,0,0,0,2275,0,0,0,0,0,0,791,0,521,521,521,521,521,521,521,521,859,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,2265,0,2266,0,0,0,0,2268,0,2269,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212992,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1737,1738,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417792,0,0,0,0,417792,0,0,0,0,0,309,0,309,0,0,0,0,2331,0,2333,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1826,0,1828,0,0,0,0,0,0,0,1835,0,0,521,2464,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59829,57886,57886,59832,57886,57886,57886,57886,57886,57886,57886,57886,60265,57886,57886,57886,57886,60268,57886,57886,60270,57886,60271,57886,57886,57886,57886,57886,57886,57886,57886,57886,60280,57886,57886,60284,59840,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59860,57886,57886,57886,57886,57886,57886,57886,57886,57886,61032,57886,57886,57886,57886,57886,57886,61038,57886,61040,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61089,57936,57936,57936,57909,57909,57909,57909,59929,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59949,57909,57909,57909,57909,57909,57909,57909,57909,58886,57909,58888,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,60375,57936,60376,57936,57936,57936,57936,57936,57936,57936,57936,57936,60012,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60032,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60070,57936,57936,57936,2405,521,521,521,521,59836,57886,57886,57886,57886,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,2399,521,521,521,521,521,521,521,521,521,521,521,2446,521,521,521,521,521,521,521,2452,521,521,521,521,521,521,2457,521,521,521,521,521,521,521,521,521,521,521,521,2847,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2889,521,521,521,521,521,521,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,60315,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60323,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58924,57909,57909,58928,57909,57909,57909,57909,57909,58935,57909,57909,57909,58942,57909,0,57886,57936,57936,57936,57936,60359,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60370,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,60380,57936,0,0,0,0,521,521,521,4170,4171,521,521,57886,57886,57886,61520,61521,57886,57886,57886,57909,57909,57909,61526,61527,57909,57909,57909,57936,57936,57936,61532,57936,57936,60435,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,301,305,0,0,0,0,3104,0,0,0,3108,0,0,0,0,0,0,3142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,262731,0,0,0,0,0,0,0,0,3113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3123,0,0,0,0,0,0,0,0,0,0,0,0,3136,57909,60627,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60636,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60644,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61057,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61062,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,60676,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60685,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60693,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,0,0,0,0,0,0,0,0,0,0,0,0,0,1192,1193,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,57936,57936,57936,57936,57936,57936,57936,60915,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60933,57936,60935,57936,57936,57936,57936,57936,57936,57936,57936,57936,60703,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,2748,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352256,0,352256,352256,0,0,0,0,521,3948,521,3950,521,521,521,521,521,521,521,521,521,521,521,57886,61307,57886,61309,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58807,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59347,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61165,57909,57909,57909,57909,57909,57909,57909,61170,57909,57909,57909,57909,61323,57909,61325,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,61339,57936,61341,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,3859,521,61204,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,4012,0,0,0,4015,0,0,521,521,521,521,4020,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,61377,57886,57886,57886,57886,57886,57909,60861,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60352,57909,57909,57909,57909,57909,57909,0,0,0,312,313,314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2765,0,0,0,0,0,0,426,0,131072,0,0,0,426,0,0,0,0,0,426,452,0,0,0,452,452,452,452,452,452,452,452,452,452,452,452,452,516,452,516,516,516,452,516,516,516,516,516,516,523,57889,523,57889,523,523,57889,523,523,57912,57889,523,523,57889,57889,57889,57912,57889,57889,57889,57889,57889,57889,57889,57912,57912,57889,57889,57939,57889,57889,57889,57889,57889,57889,57889,57939,57939,57889,57889,57889,57889,57939,57939,57889,614,57889,57966,57966,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,385024,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,57909,57909,58370,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58445,57936,57936,57936,57936,57936,57936,57936,57936,57936,61199,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,820,780,0,0,0,0,0,0,754,0,0,754,0,0,0,0,0,754,754,0,0,815,0,0,0,0,0,0,0,0,0,754,0,0,0,0,0,0,2770,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2379,0,0,0,0,0,57909,57909,57909,57909,57909,57909,60312,57909,57909,57909,57909,60316,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60345,57909,57909,57909,57909,60349,57909,57909,57909,60354,57909,57909,57909,57909,60381,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60432,57936,57936,57936,57936,57936,60436,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,301,305,0,0,0,0,0,0,0,0,0,0,0,0,3387,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2807,0,0,0,0,0,2812,0,0,0,0,0,57886,61381,57886,61383,57886,57886,61385,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,61395,57909,61397,57909,57909,61399,57909,57909,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57936,61409,57936,61411,57936,57936,61413,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2271,0,0,0,0,0,0,0,0,0,350,351,352,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,319,319,427,428,131072,435,428,436,427,435,436,0,315,436,448,453,466,466,466,479,479,479,479,479,479,479,479,479,479,501,501,501,514,514,515,515,501,515,515,515,501,515,515,515,515,515,515,524,57890,524,57890,524,524,57890,524,524,57913,57890,524,524,57890,57890,57890,57913,57890,57890,57890,57890,57890,57890,57890,57913,57913,57890,57890,57940,57890,57890,57890,57890,57890,57890,57890,57940,57940,57890,57890,57890,57890,57940,57940,57890,615,57965,57965,57965,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,401408,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1198,367,367,0,0,1201,0,0,0,1204,0,1206,0,679,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5242880,0,0,0,0,0,5603328,0,0,0,0,0,0,0,0,0,0,0,0,57909,57909,57909,57909,57909,58378,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59553,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58453,57936,57936,57936,57936,521,521,521,883,521,521,0,57886,57886,57886,58302,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,3411,0,0,0,3415,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,57886,521,57886,521,521,57886,521,521,57909,57886,521,521,57886,57886,57886,57909,521,521,521,58754,901,57886,57886,58758,57886,57886,58762,57886,57886,57886,57886,57886,57886,57886,57886,58776,57886,58781,57886,57886,58785,57886,57886,58788,57886,57886,57886,57886,57886,57886,58279,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,58322,57909,57909,57909,57909,57909,57909,58355,57909,57909,57909,58876,57909,57909,58880,57909,57909,58883,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58902,57909,57909,57909,57909,57909,57909,57909,57936,58951,57936,57936,57936,57936,57936,57936,57936,57936,58965,57936,58970,57936,57936,58974,57936,57936,58977,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,3861,0,0,0,3863,0,0,0,0,0,0,3627,3870,0,1723,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,385,521,521,521,1927,1928,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2433,521,521,521,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59320,57886,57886,57886,57886,57886,57886,57886,57886,57886,59332,57886,57886,57886,57886,57886,57886,57886,57909,57909,61494,57909,61495,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,61502,57936,61503,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60018,57936,60020,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60396,57936,57936,57936,57936,57936,57936,57936,60401,57936,57936,57936,57936,57936,57886,57886,59370,59371,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59420,57909,57909,57909,57909,57909,57909,57909,57909,57909,59432,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59446,57909,57909,57909,59450,57909,57909,59455,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59990,57936,57936,57936,57936,57936,57936,57936,59998,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,59470,59471,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,643,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3447,521,521,521,521,521,521,521,521,521,1341,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3200,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,61016,57886,57886,57886,61019,57886,57886,57886,57886,57886,57886,57886,57886,57886,59566,59567,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3162,0,0,521,2437,521,521,521,521,521,521,521,521,521,521,521,521,521,2450,521,521,521,521,521,2454,2455,521,521,521,521,521,521,521,521,521,1374,521,1376,521,521,521,521,521,521,521,1389,521,521,521,521,521,521,521,521,521,521,521,1404,57886,57886,57886,57886,59869,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59882,57886,57886,57886,57886,57886,59886,59887,59888,57886,57886,57886,57886,57886,57886,57886,58800,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58822,57886,57886,57886,57886,0,0,0,2744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114688,0,0,57886,57886,57886,60288,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,0,0,0,826,0,0,521,521,521,521,521,849,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,60863,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60875,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59447,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60672,3137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1837,0,0,0,3166,0,0,3169,0,0,0,0,0,0,0,3173,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2451,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3379,0,0,0,0,0,0,0,3383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3422,0,0,0,0,0,0,3429,521,3458,3459,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60827,57886,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,640,0,0,0,0,0,0,0,695,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,883,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,2267,0,1142,0,0,0,0,2270,0,1147,0,0,0,0,0,0,0,0,0,0,1795,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,57909,60884,57909,60886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,6e4,57936,57936,57936,57936,57936,57936,57936,60911,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60926,57936,60928,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60045,60046,57936,57936,57936,57936,57936,57936,60053,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61072,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59595,57936,57936,57936,1881,521,4010,0,4011,0,0,0,0,0,0,0,521,4018,521,4019,521,521,521,4023,521,521,521,521,521,521,521,57886,61375,57886,61376,57886,57886,57886,57886,57886,57886,60264,57886,57886,57886,57886,57886,57886,57886,60269,57886,57886,57886,57886,57886,57886,57886,60275,57886,57886,57886,57886,57886,57886,57886,60283,57886,61380,57886,57886,57886,57886,57886,57886,57886,57886,57909,61389,57909,61390,57909,57909,57909,61394,57909,57909,57909,57909,57909,57909,57909,57909,57936,61403,57936,61404,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60388,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,3376,0,0,61408,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,1710,0,0,0,0,0,0,1717,0,0,0,0,0,0,0,0,0,0,0,0,0,2338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2294,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,4213,57886,57886,57886,61559,57909,57909,57909,61561,57936,57936,57936,61563,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,521,521,521,521,521,521,0,2471,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59858,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,376,0,131072,0,0,0,376,0,0,438,444,0,376,454,467,467,467,480,480,480,480,480,480,480,480,480,480,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,525,57891,525,57891,525,525,57891,525,525,57914,57891,525,525,57891,57891,57891,57914,57891,57891,57891,57891,57891,57891,57891,57914,57914,57891,57891,57941,57891,57891,57891,57891,57891,57891,57891,57941,57941,57891,57891,57891,57891,57941,57941,57891,525,57891,57891,57891,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229376,0,491520,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1180,1181,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,719,0,0,0,0,0,0,0,0,0,729,0,0,0,0,0,0,0,0,0,738,0,0,1166,0,1298,0,0,0,0,0,0,0,0,0,1284,0,0,0,1312,1180,0,0,0,0,0,0,0,0,521,521,1321,521,521,521,0,0,0,0,0,0,57886,60241,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58814,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,521,521,521,521,521,1371,521,521,1373,521,521,521,521,1378,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1403,521,521,521,521,521,521,521,521,3196,521,521,521,521,521,521,521,521,521,521,521,3203,521,521,521,521,521,521,521,521,521,521,521,1902,521,521,521,521,521,521,521,521,1913,521,521,521,521,521,521,521,521,521,521,521,1935,521,521,521,1941,521,521,521,521,521,521,521,521,521,1950,521,521,521,521,1956,521,521,521,521,58754,901,57886,57886,58759,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58786,57886,57886,57886,57886,57886,57886,57886,57886,57886,61247,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61263,57909,57909,57936,57909,57909,57909,57909,58881,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58896,57909,57909,57909,57909,57909,57909,57909,58905,57909,57909,58907,57909,57909,57909,57909,58912,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58937,57909,57909,57909,57909,0,58812,57936,57936,58948,57936,0,0,0,0,521,521,4169,521,521,521,4173,57886,57886,61519,57886,57886,57886,61523,57886,57909,57909,61525,57909,57909,57909,61529,57909,57936,57936,61531,57936,0,0,0,0,4168,521,521,521,521,521,521,61518,57886,57886,57886,57886,57886,57886,57886,61524,57909,57909,57909,57909,57909,57909,57909,61530,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61274,57936,57936,57936,57936,57936,57936,57936,521,57886,0,3938,0,0,3941,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1883,521,521,521,521,521,521,521,521,521,2876,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,60819,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57936,57936,57936,57936,57936,57936,57936,58999,57936,57936,59001,57936,57936,57936,57936,59007,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59519,57936,57936,57936,57936,57936,57936,57936,57936,57936,59530,57936,57936,57936,57936,57936,59032,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,0,0,0,0,1712,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2410,521,521,521,2259,57886,57886,57886,57886,59608,2265,0,2266,0,0,0,0,2268,0,2269,0,0,0,0,0,2272,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2408,521,521,521,521,521,521,521,521,2416,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1397,521,521,521,521,521,57886,59893,57886,59895,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,59916,57909,57909,57909,57909,59920,57909,57909,57909,57909,57909,57909,57909,57909,59958,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59971,57909,57909,57909,57909,57909,59975,59976,59977,57909,57909,57909,57909,57909,57909,59982,57909,59984,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,59999,57936,57936,57936,57936,60003,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60683,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,3369,521,57886,60716,57886,0,0,0,0,0,57936,57936,57936,57936,57936,60065,57936,60067,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,2739,2266,0,2740,2269,0,0,0,0,0,0,3622,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,415,415,0,0,0,0,0,60285,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,0,0,0,1156,1157,1158,1159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,791,0,0,0,0,0,0,0,791,0,0,57909,57909,57909,60310,57909,60311,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59460,57909,57909,57909,57909,57909,59467,57909,521,521,3191,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3204,521,521,521,521,521,521,521,3210,57886,57886,57886,60582,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60596,57886,57886,57886,57886,57886,57886,57886,57886,60606,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,57909,57909,57909,60617,57909,57909,57909,57909,57909,57909,60624,57909,57886,60602,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2962,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61182,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58975,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58990,57909,57909,57909,57909,60651,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60680,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60694,57936,57936,57936,57936,57936,57936,57936,57936,57936,61273,57936,61275,57936,57936,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,1878,1879,521,521,521,521,1886,521,521,521,521,521,521,521,521,1337,521,1342,521,521,1346,521,521,1349,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1380,521,521,521,521,521,521,521,521,521,521,1396,521,521,521,521,521,57936,57936,57936,57936,57936,60700,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,3768,0,0,0,0,57909,61073,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60030,57936,57936,57936,57936,57936,0,521,521,521,521,521,521,3953,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,61312,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2557,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59466,57909,57909,57909,57909,57909,57909,57909,57909,61328,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,61344,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,61382,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,61396,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,61080,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61090,57936,57936,57936,57936,61410,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,2265,1706,2266,0,0,0,0,2268,1713,2269,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2353,0,0,330,0,0,0,0,0,0,375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,330,0,139264,147456,0,0,0,0,0,0,0,1842,0,0,1845,0,0,0,0,0,0,1851,1852,0,0,0,0,0,0,0,0,0,0,0,1845,0,0,0,0,0,131072,0,0,0,0,0,329,0,0,0,0,455,468,468,468,481,481,481,481,492,494,481,481,492,481,503,503,503,503,518,503,503,503,518,503,503,503,503,503,503,526,57892,526,57892,526,526,57892,526,526,57915,57892,526,526,57892,57892,57892,57915,57892,57892,57892,57892,57892,57892,57892,57915,57915,57892,57892,57942,57892,57892,57892,57892,57892,57892,57892,57942,57942,57892,57892,57892,57892,57942,57942,57892,526,57892,57892,57892,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2310144,0,0,0,0,0,0,0,2310144,2310144,0,0,0,0,0,0,0,0,2310144,0,0,0,0,0,651,652,0,0,0,0,0,0,0,0,0,0,663,664,0,0,0,0,0,0,0,0,0,0,0,676,677,678,0,0,0,682,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,0,0,700,701,0,0,0,0,0,707,0,0,0,0,0,3141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450560,450560,0,0,0,0,0,711,0,713,0,0,0,0,0,0,720,0,0,0,724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,742,0,0,0,0,0,0,0,0,0,0,752,0,0,0,0,0,0,759,0,0,0,765,766,0,0,0,0,0,0,0,2308,0,0,0,0,2313,2314,0,0,2316,2317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,270336,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,301,0,0,305,0,0,4857856,4874240,0,0,4923392,0,0,0,775,0,777,0,0,0,0,0,0,0,0,0,0,0,0,0,0,789,0,794,0,797,0,0,0,0,0,0,777,0,789,0,803,0,0,0,0,797,809,0,0,0,0,0,809,809,812,0,0,0,777,0,0,0,0,0,821,0,0,0,0,0,0,806,0,0,806,0,0,0,0,0,806,806,0,0,0,0,786,0,0,0,0,0,0,822,782,0,0,0,0,0,775,0,0,0,821,521,521,835,521,841,521,521,856,521,521,867,521,872,521,521,881,884,889,521,897,521,57886,57886,57886,57886,57886,57886,60291,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,58254,57886,58260,57886,57886,58275,57886,57886,58286,57886,58291,57886,57886,58300,58303,58308,57886,58316,57886,0,57909,57909,57909,58330,57909,58336,57909,57909,58351,57909,57909,58362,57909,58367,57909,57909,58376,58379,58384,57909,58392,57909,0,0,0,0,58291,57936,57936,57936,58405,57936,58411,57936,57936,58426,57936,57936,58437,57936,58442,57936,57936,58451,58454,58459,57936,58467,57936,835,521,521,1129,889,521,0,57886,58254,57886,58479,58308,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,2326528,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,1153,0,0,0,0,0,0,0,0,0,1163,0,0,0,0,0,0,0,1170,0,0,0,0,0,0,0,0,0,0,0,1051,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6299648,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,1209,0,0,0,0,0,0,0,0,1218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1235,0,0,1187,0,0,0,0,0,3434,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3451,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,59827,57886,57886,57886,57886,59831,57886,57886,57886,57886,57886,57886,57886,57886,58801,57886,57886,57886,57886,57886,57886,57886,58810,57886,57886,58812,57886,57886,57886,57886,58817,57886,57886,57886,57886,57886,57886,57886,57886,57886,61388,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61402,57936,57936,57936,57936,57936,57936,0,0,0,0,742,0,0,0,0,0,0,0,0,0,0,0,0,1258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5857280,0,6463488,4939776,0,0,5455872,0,0,0,0,0,0,0,0,6062080,6463488,0,5398528,0,521,521,521,521,1328,521,521,521,521,521,521,1343,521,521,521,1348,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1365,521,1407,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58767,57886,57886,57886,57886,57886,57886,58782,57886,57886,57886,58787,57886,57886,57886,57886,57886,57886,57886,58839,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,58855,57909,57909,57909,57909,57909,57909,57909,57909,57909,58869,57909,57909,57909,58877,57909,57909,57909,58882,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58899,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,58419,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59003,57936,59005,57936,57936,57936,57936,57936,57936,57936,59018,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60704,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,57936,57936,57936,57936,57936,57936,58956,57936,57936,57936,57936,57936,57936,58971,57936,57936,57936,58976,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,2741,0,57936,58993,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59009,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59025,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61101,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,690,691,0,367,367,367,0,0,0,0,0,0,0,0,0,703,0,0,0,0,0,57936,57936,57936,59036,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,0,0,0,0,1712,0,0,0,0,1719,0,1721,0,0,0,0,0,3621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3632,0,0,0,3635,3636,0,0,0,0,0,0,393678,0,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,393678,0,393678,393678,0,1754,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1770,0,0,0,0,0,1776,0,0,1779,0,1781,0,0,0,0,0,0,3642,0,3644,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2854,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1943,1944,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,1787,1788,0,0,0,0,0,0,0,0,1797,1798,0,0,0,0,0,0,1804,0,0,1806,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,888,521,521,521,521,57886,57886,57886,1810,1811,1812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1830,1831,0,1832,1833,0,0,0,0,0,0,1186,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,810,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3395,0,0,3397,0,0,0,0,0,0,0,0,1863,1721,1721,1865,521,1867,521,1868,1869,521,1871,521,521,521,1875,521,521,521,521,521,521,521,521,521,1888,521,521,521,521,1892,521,521,521,521,1896,521,1898,521,521,521,521,521,521,521,521,521,521,1908,1909,1911,521,521,521,521,521,521,521,1919,1920,521,1922,521,521,521,521,521,521,521,521,3667,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60611,57886,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60622,57909,60625,521,1925,1926,521,521,521,521,521,521,521,1934,521,1936,521,1939,521,521,521,521,521,1946,521,521,1948,521,521,521,521,521,521,521,521,521,3197,3198,521,521,521,521,3201,521,521,521,521,521,521,521,521,521,521,3206,521,521,521,3209,521,521,58754,0,59307,57886,59309,57886,59310,57886,59312,57886,59314,57886,57886,57886,59318,57886,57886,57886,57886,57886,57886,57886,57886,57886,59331,57886,57886,57886,57886,59335,57886,1,24578,3,155941,156275,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,483328,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2341,0,0,0,0,0,0,0,0,0,0,0,0,0,57886,57886,57886,59339,57886,59341,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59351,59352,59354,57886,57886,57886,57886,57886,57886,57886,59362,59363,57886,59365,57886,57886,57886,57886,57886,58799,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58829,59368,59369,57886,57886,57886,57886,57886,57886,57886,59377,57886,59379,57886,59382,57886,57886,57886,57886,57886,59390,57886,57886,59392,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2558,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60371,57909,57909,57909,57936,57936,57936,57936,57936,57936,60377,57936,57936,57936,57936,50657,0,59407,57909,59409,57909,59410,57909,59412,57909,59414,57909,57909,57909,59418,57909,57909,57909,57909,57909,57909,57909,57909,57909,59431,57909,57909,57909,57909,59435,57909,57909,57909,57909,57909,57909,57909,58916,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,521,1335,521,521,521,521,58774,57886,57886,57886,57886,57886,1138,0,0,1709,0,0,0,0,1716,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,3882,521,3884,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,59847,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60277,57886,57886,57886,57886,57886,57886,57886,57909,57909,59439,57909,59441,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59451,59452,59454,57909,57909,57909,57909,57909,57909,57909,59462,59463,57909,59465,57909,57909,59468,59469,57909,57909,57909,57909,57909,57909,57909,59477,57909,59479,57909,59482,57909,57909,57909,57909,57909,59490,57909,57909,59492,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57886,57886,57886,57886,60290,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60299,57886,57886,57886,60302,57886,57886,57886,57886,57886,57886,0,0,0,0,0,0,1214,0,0,0,0,0,0,0,0,1223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1238,59503,57936,59505,57936,59506,57936,59508,57936,59510,57936,57936,57936,59514,57936,57936,57936,57936,57936,57936,57936,57936,57936,59527,57936,57936,57936,57936,59531,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,0,1707,0,0,0,0,1714,0,0,0,0,0,0,0,0,3170,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,3182,521,3185,521,521,521,521,59535,57936,59537,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59547,59548,59550,57936,57936,57936,57936,57936,57936,57936,59558,59559,57936,57936,59561,57936,57936,59564,59565,57936,57936,57936,57936,57936,57936,57936,59573,57936,59575,57936,59578,57936,57936,57936,57936,57936,59586,57936,57936,59588,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,1926,521,2258,521,57886,59369,57886,59607,57886,2265,0,2266,0,0,0,0,2268,0,2269,0,0,0,0,0,0,0,0,0,0,2276,0,0,2279,2280,0,0,0,2284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2790,0,0,0,0,2303,0,0,0,0,2307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2323,0,0,0,0,2327,0,0,0,0,0,3873,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,58803,57886,57886,57886,57886,58808,57886,57886,57886,57886,57886,57886,57886,57886,57886,58816,57886,57886,57886,58823,58825,57886,57886,57886,0,2356,0,0,0,0,0,0,0,0,2365,0,0,0,0,0,0,0,0,0,0,0,0,2375,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,875,521,521,521,521,521,521,521,57886,57886,57886,2412,521,2414,521,521,521,521,521,521,521,2420,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1357,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2441,2442,521,521,521,521,521,521,2449,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1383,521,521,521,521,521,521,521,521,521,521,521,1400,521,521,521,2463,521,521,2466,2467,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59833,57886,59835,57886,57886,57886,57886,57886,57886,60585,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60599,57886,57886,57886,57886,57886,59843,57886,59845,57886,57886,57886,57886,57886,57886,57886,59851,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60300,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57886,57886,57886,57886,59896,57886,57886,59899,59900,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59922,57909,57909,57909,57909,57909,57909,58388,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,3862,0,0,3865,0,0,0,0,3627,0,0,59924,57909,57909,57909,57909,57909,57909,59932,57909,59934,57909,57909,57909,57909,57909,57909,57909,59940,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,59991,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60707,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,60007,57936,57936,57936,57936,57936,57936,60015,57936,60017,57936,57936,57936,57936,57936,57936,57936,60023,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,2739,2266,0,2740,2269,0,0,0,521,2868,521,521,521,521,2872,521,521,521,2877,521,521,521,521,521,521,521,521,2885,521,521,521,521,521,521,521,2890,521,521,521,521,521,521,0,0,0,0,57886,57886,59820,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58811,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60259,57886,60261,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60278,57886,57886,57886,57886,60282,57886,57886,57886,57886,57886,60605,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60319,57909,57909,57909,57909,57909,60324,57909,57909,57909,57909,57909,57909,57909,57886,57886,60287,57886,57886,57886,57886,57886,57886,57886,57886,60295,57886,57886,57886,57886,57886,57886,57886,57886,60301,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,0,0,0,1185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,0,1732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1856,0,0,0,0,0,0,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,60314,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60326,57909,60328,57909,57909,57909,57909,57909,57909,57909,57909,60365,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61082,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,60362,57909,57909,57909,57909,57909,57909,57909,57909,60368,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,60379,57936,57936,57936,57936,57936,57936,57936,57936,58959,57936,57936,57936,57936,57936,57936,57936,57936,57936,58978,57936,57936,57936,57936,57936,57936,57936,57936,57936,58988,57936,57936,57936,57936,57936,57936,57936,57936,57936,58960,58967,57936,57936,57936,57936,57936,57936,57936,57936,58980,57936,58982,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60417,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60424,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60410,57936,57936,57936,57936,60414,57936,57936,57936,60419,57936,57936,57936,57936,57936,57936,57936,57936,60427,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,3103,0,0,3106,3107,0,0,3110,3111,60433,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,301,305,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278528,0,0,0,0,0,0,3167,3168,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3189,60580,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60593,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60600,57909,57909,57909,60629,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60642,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58925,57909,57909,57909,57909,57909,58933,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57909,57909,60649,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60678,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60691,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60044,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,57886,3937,0,3939,0,0,0,0,0,3627,3943,0,3945,57936,57936,57936,60698,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,2368,521,521,521,521,521,521,521,521,521,521,521,2398,521,521,2401,521,521,521,521,521,521,2409,521,521,3403,0,0,0,0,3405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3419,0,0,0,0,3424,3425,0,3427,0,0,0,0,0,1197,0,0,0,0,0,0,0,0,0,1286,0,0,0,0,1314,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3452,521,521,521,521,3430,0,0,0,3433,521,521,521,521,521,521,3440,521,521,521,521,521,3444,521,521,521,521,521,521,521,3450,521,521,521,521,521,3456,60828,57886,57886,57886,57886,57886,57886,57886,60834,57886,57886,57886,57886,57886,60840,57886,57886,60843,57886,57886,57886,57886,57886,57886,57886,57886,60850,60852,57886,57886,57886,57886,57886,57886,58282,58284,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,58327,57909,57909,57909,57909,57909,57909,58358,58360,57909,60856,57886,60858,60859,57886,57909,57909,57909,57909,57909,57909,60866,57909,57909,57909,57909,57909,60870,57909,57909,57909,57909,57909,57909,57909,60876,57909,57909,57909,57909,57909,60882,57909,57909,60885,57909,57909,57909,57909,57909,57909,57909,57909,60892,60894,57909,57909,57909,57909,60898,57909,60900,60901,57909,57936,57936,57936,57936,57936,57936,60908,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61200,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,3866,3867,0,3627,0,3871,57936,57936,60912,57936,57936,57936,57936,57936,57936,57936,60918,57936,57936,57936,57936,57936,60924,57936,57936,60927,57936,57936,57936,57936,57936,57936,57936,57936,60934,60936,57936,57936,57936,57936,57936,57936,57936,57936,59e3,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59020,57936,57936,57936,57936,57936,59028,57936,57936,57936,57936,57936,57936,57936,57936,59542,57936,57936,57936,59546,57936,57936,59551,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60048,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60940,57936,60942,60943,57936,521,521,3602,57886,57886,60949,0,0,0,0,0,0,3611,0,0,3614,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,3649,3650,521,521,521,521,3654,3655,521,521,521,521,521,3659,521,521,521,521,3662,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,61018,57886,57886,57886,57886,57886,57886,57886,61023,57886,57886,57886,57886,57886,57886,60833,57886,57886,57886,57886,57886,57886,57886,57886,60841,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60855,57909,57909,57909,57909,57909,57909,61052,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61063,57909,57909,57909,57909,57909,57909,57909,57909,61071,57909,57909,57909,57909,57909,57909,58914,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58930,57909,57909,57909,57909,57909,57909,58941,57909,0,57886,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,303104,0,0,0,0,0,0,0,0,0,0,0,57886,57886,61240,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,61256,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,61076,57936,57936,57936,57936,57936,57936,57936,61081,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61092,57886,57886,57886,61440,57886,61442,57886,57886,57886,57886,61447,61448,61449,61450,57909,57909,57909,61453,57909,61455,57909,57909,57909,57909,61460,61461,61462,61463,57936,57936,57936,61466,57936,61468,57936,57936,57936,57936,61473,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,61031,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,61392,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,61406,57936,57936,57936,61535,57936,0,0,0,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,0,0,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,0,0,521,521,521,521,4198,521,57886,57886,57886,57886,61546,57886,57909,57909,57909,57909,61550,57909,57936,57936,57936,57936,61554,57936,0,371,371,0,429,131072,371,429,429,332,371,429,0,0,429,449,429,0,0,0,429,488,488,488,493,488,488,488,493,488,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,527,57893,527,57893,527,527,57893,527,527,57916,57893,527,527,57893,57893,57893,57916,57893,57893,57893,57893,57893,57893,57893,57916,57916,57893,57893,57943,57893,57893,57893,57893,57893,57893,57893,57943,57943,57893,57893,57893,57893,57943,57943,57893,527,57893,57893,57893,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,4399798,0,0,0,0,0,0,0,0,0,0,0,0,773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,773,0,0,0,521,828,521,521,521,521,521,521,860,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,58246,1295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,2839,521,521,521,521,521,521,1326,521,521,521,521,521,1338,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2430,521,521,521,521,521,521,521,521,521,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,58765,57886,57886,57886,57886,57886,58777,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59381,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61041,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57936,57936,57936,57936,58954,57936,57936,57936,57936,57936,58966,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,3375,0,0,0,57909,57909,57909,59954,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60355,57909,57909,57909,57936,57936,57936,60037,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59026,57936,57936,57936,0,0,4212,521,521,521,61558,57886,57886,57886,61560,57909,57909,57909,61562,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,521,521,521,521,521,521,521,521,3793,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60607,57886,57886,60610,57886,57886,60613,0,0,60614,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60637,60638,57909,57909,57909,57909,60641,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60647,0,0,0,430,131072,0,430,430,0,0,430,439,0,430,0,430,469,469,469,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,528,57894,528,57894,528,528,57894,528,528,57917,57894,528,528,57894,57894,57894,57917,57894,57894,57894,57894,57894,57894,57894,57917,57917,57894,57894,57944,57894,57894,57894,57894,57894,57894,57894,57944,57944,57894,57894,57894,57894,57944,57944,57894,528,57894,57894,57894,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,367,0,0,0,0,0,0,0,0,0,0,0,521,58754,1961,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,2561,0,50657,2061,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59950,57909,57909,2302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2326,0,0,0,0,0,1213,0,1215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,0,420,0,0,0,0,0,2385,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1949,521,521,521,521,521,521,521,0,3138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3158,0,0,0,0,0,0,0,0,1731,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1747,0,0,1750,0,0,521,521,521,3213,521,521,521,521,521,521,521,521,521,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58868,57909,0,0,3404,0,0,0,0,0,3407,0,3409,0,0,3412,0,0,0,0,0,3417,0,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,4399797,4399797,0,0,0,0,0,0,0,0,0,0,521,521,521,521,3460,521,521,521,521,521,521,521,521,3468,521,521,3471,521,521,521,60818,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58296,57886,57886,57886,57886,58314,57886,57886,0,57909,57909,58325,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,60857,57886,57886,57886,60860,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60877,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59959,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,60664,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,57909,60887,57909,57909,57909,57909,57909,57909,57909,57909,57909,60896,57909,57909,60899,57909,57909,57909,60902,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,4089,521,57886,57886,57886,60938,57936,57936,60941,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,3615,0,0,0,0,0,0,0,393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3159,3160,0,0,0,0,0,521,521,521,521,3663,521,3665,521,521,521,521,521,521,521,521,521,521,57886,57886,61017,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59850,57886,57886,57886,57886,57886,57886,57886,57886,59857,57886,59859,57886,59862,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61029,57886,57886,57886,57886,57886,57886,57886,57886,61035,57886,61037,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,61046,57909,57909,57909,57909,57909,57909,57909,58917,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58934,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,58949,57936,61093,57936,61095,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,3791,521,521,521,521,521,521,521,521,3797,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58804,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58819,57886,57886,57886,57886,57886,57886,61153,57886,57886,57886,57886,57886,57886,57886,57886,57886,61159,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61172,57909,57909,57909,57909,57909,57909,58915,57909,57909,58922,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58936,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,521,1336,521,521,521,521,58775,57886,57886,57886,57886,57886,1138,0,0,0,0,1711,0,0,0,0,1718,0,0,0,0,0,0,1247,1248,0,0,0,0,0,0,0,0,0,0,0,1155,1154,0,0,0,0,0,0,0,0,0,0,0,2799,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,0,0,0,0,0,0,0,3637,0,0,57936,57936,57936,57936,57936,61197,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3782,0,0,521,521,521,521,0,0,0,0,683,684,0,0,0,0,689,0,0,0,367,367,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,530,57896,530,57896,530,530,57896,530,530,57919,57896,530,530,57896,57896,57896,57919,57886,58258,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58317,0,57909,57909,57909,57909,58334,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59481,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57936,57936,57936,57936,58468,521,839,521,521,521,898,0,58258,57886,57886,57886,57886,58317,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,1219,1220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6299648,0,0,0,0,0,0,0,0,0,0,0,5808128,0,0,0,1211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1230,0,0,0,0,0,0,0,0,0,521,521,521,3647,521,521,521,521,521,521,521,3652,521,521,521,521,521,521,521,521,521,521,521,2421,521,521,521,2424,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2895,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60842,57886,60844,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,1839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1853,0,0,0,0,0,0,0,0,0,0,0,0,1307,1308,0,0,1154,0,0,0,0,0,0,0,0,0,0,0,521,1319,521,521,521,1958,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2962,0,0,386,0,0,0,0,0,0,0,0,0,0,0,0,0,401,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,412,0,0,0,0,0,0,412,139264,147456,0,0,0,421,0,333,0,0,0,0,0,0,0,0,0,0,0,0,333,0,0,0,0,0,0,0,0,333,0,0,139264,147456,0,0,0,0,0,0,0,2773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3634,0,0,0,0,0,0,424,424,0,0,131072,424,0,0,0,424,0,440,0,0,424,334,470,470,470,483,483,483,483,483,483,483,483,483,483,504,512,512,512,512,519,512,512,512,519,512,512,512,512,512,512,529,57895,529,57895,529,529,57895,529,529,57918,57895,529,529,57895,57895,57895,57918,57895,57895,57895,57895,57895,57895,57895,57918,57918,57895,57895,57945,57895,57895,57895,57895,57895,57895,57895,57945,57945,57895,57895,57895,57895,57945,57945,57895,529,57895,57895,57895,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1734,0,0,0,0,0,0,0,0,1741,0,0,1744,1745,1746,0,1748,1749,0,0,0,822,0,0,0,0,0,0,0,521,521,521,521,842,521,851,521,521,521,521,521,521,521,521,521,521,521,521,521,899,57886,57886,57886,57886,57886,57886,61244,57886,57886,57886,61248,57886,57909,57909,57909,57909,57909,57909,61254,57909,57909,57909,57909,57909,57909,61260,57909,57909,57909,61264,57909,57936,57886,57886,58261,57886,58270,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58318,0,57909,57909,57909,57909,57909,58337,57909,58346,57909,57909,57909,57909,57909,57909,57909,57909,57909,58887,58889,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60661,57909,57936,57936,57936,57936,57936,57936,57936,57936,60669,57936,57936,57936,57936,57936,57936,57936,58469,521,521,521,521,1130,899,0,57886,57886,57886,57886,58480,58318,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,1764,1765,1766,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2319,2320,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,1331,521,521,521,521,521,521,521,521,521,1350,521,521,521,521,521,521,521,521,521,1360,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,59825,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59837,57886,57886,521,1408,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58770,57886,57886,57886,57886,57886,57886,57886,57886,57886,58789,57886,57886,57886,57886,57886,57886,59342,59343,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59360,57886,57886,57886,57886,57886,59367,57886,57886,58833,57886,57886,57886,57886,57886,58840,57886,57886,57886,58847,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58865,57909,57909,57909,57909,57909,57909,57909,58919,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60042,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,3370,57886,57886,60717,0,0,0,0,0,57936,57936,57936,59037,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1796,0,0,0,0,0,0,0,1803,0,1805,0,0,0,1807,0,739,0,0,0,0,1838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1850,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1836,1924,521,521,521,521,521,521,521,521,1933,521,521,521,521,521,521,1942,521,521,521,521,521,521,521,521,521,521,1952,1954,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59861,57886,57886,57886,57886,57886,57886,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59328,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61033,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59428,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,58397,57936,57936,57936,57936,57936,57936,58430,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59572,57936,57936,57936,57936,57936,57936,59581,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59592,59594,57936,57936,57936,57936,521,521,521,0,0,2472,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59885,57886,57886,57886,57886,59889,57886,57886,57886,2329,0,0,0,0,0,0,0,0,2337,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3128,0,0,0,0,0,0,0,0,521,521,2465,521,521,521,0,0,0,0,57886,57886,57886,57886,57886,57886,59824,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59836,57886,57886,57886,57886,57886,57886,61492,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61500,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59583,59584,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,2255,521,59925,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60358,59953,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59972,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59935,57909,59937,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60660,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60671,57936,60008,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59598,521,521,60036,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60055,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,4132,0,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,0,0,0,2769,0,0,2772,0,0,0,0,0,0,2776,0,0,0,0,0,0,0,0,0,0,0,2787,0,0,0,0,0,0,0,394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319488,319488,0,0,0,0,0,0,2795,0,0,0,0,2797,0,0,0,0,0,0,0,2801,2802,0,0,2805,0,0,2808,0,0,0,0,0,0,0,0,0,0,1161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,2818,0,0,0,0,0,0,0,0,0,0,0,0,0,2828,0,0,0,0,521,2832,521,521,521,521,521,521,521,521,521,521,521,2878,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1356,521,521,521,1359,521,521,521,521,521,521,521,521,521,521,521,521,521,2873,521,521,521,521,521,521,2880,521,521,521,521,521,521,521,521,521,521,2888,521,521,521,2891,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60253,57886,57886,57886,57886,57886,57886,57886,61493,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61501,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60921,57936,60923,57936,57936,57936,57936,57936,57936,57936,60930,57936,57936,60932,57936,57936,57936,57936,57936,0,0,57909,60308,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60331,57936,57936,60407,57936,57936,57936,57936,57936,57936,57936,60415,57936,57936,57936,57936,57936,57936,60422,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60431,57936,57936,57936,57936,57936,57936,57936,57936,59574,57936,57936,57936,59580,57936,57936,57936,57936,57936,57936,57936,57936,57936,59590,57936,57936,57936,57936,59596,57936,57936,521,521,521,0,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59864,57886,57886,57886,57936,60434,57936,57936,57936,57936,57936,57936,3094,521,521,521,521,60441,57886,57886,57886,57886,0,0,0,0,3102,0,0,0,0,0,0,0,0,0,521,521,3646,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3658,521,521,521,3112,0,0,0,0,0,0,0,3116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3130,3131,0,0,0,0,0,0,0,3143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,333,334,335,0,0,0,0,0,3211,521,521,521,521,521,521,521,3215,521,521,521,521,521,0,0,57886,57886,57886,60567,57886,57886,57886,57886,57886,60572,57886,57886,57886,57886,57886,57886,57886,57886,61246,57886,57886,57886,61249,57909,57909,57909,57909,61253,57909,57909,57909,57909,57909,57909,57909,57909,57909,61262,57909,57909,57909,61265,60601,57886,60603,57886,57886,57886,57886,57886,57886,57886,57886,60608,57886,57886,57886,57886,57886,0,0,57909,57909,57909,60616,57909,57909,57909,57909,57909,60621,57909,57909,57909,57909,57909,57909,57909,57909,60654,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61086,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,60650,57909,60652,57909,57909,57909,57909,57909,57909,57909,57909,60657,57909,57909,57909,57909,57909,57936,57936,57936,60665,57936,57936,57936,57936,57936,60670,57936,57936,57936,57936,57936,57936,57936,57936,60041,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60054,57936,57936,57936,57936,57936,60058,60059,60060,57936,60696,57936,57936,57936,60699,57936,60701,57936,57936,57936,57936,57936,57936,57936,57936,60706,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,3374,0,0,3377,3378,521,521,521,521,521,521,3462,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,60822,57886,57886,57886,57886,60826,57886,57886,57886,57886,57886,58835,57886,57886,57886,57886,57886,57886,58846,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58862,57909,57909,57909,57909,57909,57909,57909,57909,57909,58394,0,0,0,0,57886,57936,57936,57936,57936,57936,58412,57936,58421,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,4085,521,4087,521,521,521,57886,57886,57886,57936,57936,57936,57936,57936,57936,57936,60916,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60931,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,3608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1194,0,1196,0,0,367,367,0,0,0,0,0,0,0,0,0,0,0,0,0,3619,3620,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3633,0,0,0,0,0,0,0,0,1793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,60825,57886,57886,57886,57886,521,521,3787,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3798,521,521,521,521,521,57886,57886,57886,57886,57886,57886,61149,57886,57886,57886,57886,57886,58836,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,58861,57909,57909,57909,58870,57909,57936,57936,57936,57936,57936,57936,57936,61198,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,3777,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,4022,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,61379,0,521,521,521,521,521,521,521,521,3955,521,3957,3958,521,3960,521,57886,57886,57886,57886,57886,57886,57886,57886,61314,57886,61316,61317,57886,61319,57886,61321,61488,57886,61489,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,61496,57909,61497,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,61504,57936,61505,57936,57936,57936,57936,57936,57936,57936,57936,57936,58961,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59019,57936,57936,59023,57936,57936,57936,57936,57936,59030,0,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,4224,61569,61570,61571,521,521,521,521,521,521,521,1332,1339,521,521,521,521,521,521,521,521,1352,521,1354,521,521,521,521,521,521,521,521,521,521,521,521,2422,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,57886,60566,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58307,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57896,57896,57896,57896,57896,57896,57896,57919,57919,57896,57896,57946,57896,57896,57896,57896,57896,57896,57896,57946,57946,57896,57896,57896,57896,57946,57946,57896,530,57896,57896,57896,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2312,0,0,0,2315,0,0,0,0,0,2321,0,0,0,0,0,0,0,0,0,0,57909,58909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,1706,0,0,0,1712,1713,0,0,0,0,0,0,0,0,687,0,0,0,0,0,367,367,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1253,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,339,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,1162,0,0,0,0,0,0,405,0,0,0,0,0,0,0,0,0,0,0,0,405,0,0,0,0,0,0,0,383,0,139264,147456,0,405,0,0,405,0,0,0,431,131072,0,431,431,0,0,431,0,445,431,0,431,471,471,471,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,531,57897,531,57897,531,531,57897,531,531,57920,57897,531,531,57897,57897,57897,57920,57897,57897,57897,57897,57897,57897,57897,57920,57920,57897,57897,57947,57897,57897,57897,57897,57897,57897,57897,57947,57947,57897,57897,57897,57897,57947,57947,57897,531,57897,57897,57897,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2775,0,0,0,0,0,2780,0,2782,2783,0,0,0,0,0,0,0,0,0,0,0,1157,0,0,0,0,0,0,0,1159,0,0,0,0,0,0,1266,0,0,0,0,1271,654,0,0,0,0,0,0,0,0,0,0,654,0,654,0,0,0,0,813,0,0,0,654,0,0,0,0,0,0,0,0,0,521,3645,521,521,521,3648,521,521,521,521,521,521,521,521,521,3656,521,521,521,521,521,521,521,0,0,0,0,733,654,0,0,521,829,521,521,521,844,521,521,521,521,521,521,521,521,521,521,885,521,521,521,521,57886,57886,58247,57886,57886,57886,58263,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58304,57886,57886,57886,57886,0,57909,57909,58323,57909,57909,57909,58339,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59987,57909,57909,57909,57936,57936,57936,57936,57936,57936,59996,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60391,57936,60393,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60022,57936,57936,57936,57936,57936,57936,57936,57936,60029,57936,60031,57936,60034,57936,57936,57909,57909,57909,57909,57909,58380,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,58398,57936,57936,57936,58414,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60390,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60710,57936,521,521,521,57886,57886,57886,0,0,0,0,0,58455,57936,57936,57936,57936,521,521,521,885,521,521,0,57886,57886,57886,58304,57886,57886,293,1138,0,0,1142,0,0,1147,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3888,521,57886,57886,57886,57886,57886,57886,57886,57886,58841,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60639,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59965,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,1154,1155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3133,0,0,0,0,0,0,1155,0,0,0,0,0,0,1280,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,760,0,0,763,0,0,767,0,0,0,0,521,521,521,58754,901,57886,58757,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58771,58778,57886,57886,57886,57886,57886,57886,57886,57886,58791,57886,58793,57886,57886,57886,57886,57886,60831,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60849,57886,60851,57886,57886,57886,57886,57886,57886,58278,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,58354,57909,57909,58908,57909,58910,57909,57909,57909,57909,57909,57909,57909,58923,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58938,57909,57909,57909,0,57886,57936,58946,57936,57936,57936,57936,57936,57936,57936,57936,60068,57936,57936,60071,60072,57936,2404,521,2731,521,521,59835,57886,60080,57886,57886,2739,2266,0,2740,2269,0,0,0,0,0,0,4014,0,4016,0,521,521,521,521,521,4021,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,61378,57886,57936,59033,57936,57936,57936,521,1332,521,1389,521,521,58771,57886,57886,58828,57886,57886,1138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3146,0,0,0,0,0,0,0,0,0,0,3156,0,0,0,0,3161,0,0,0,3163,0,1724,1725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2342912,0,0,0,521,521,521,521,521,521,1930,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1957,521,58754,1961,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59321,59322,57886,57886,57886,57886,59329,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,61391,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,61405,57936,57936,50657,2061,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59421,59422,57909,57909,57909,57909,59429,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,741,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59520,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,59473,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59501,57909,57886,57886,57886,57886,57886,60832,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60847,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58843,57886,57886,57886,50657,58754,977,57909,58852,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58866,58873,57936,57936,57936,57936,57936,59540,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59560,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,2800,0,0,0,0,0,0,0,0,0,2809,0,0,0,0,0,0,0,0,0,57936,57936,57936,59569,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59597,57936,521,521,521,0,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59359,57886,57886,57886,57886,57886,57886,57886,0,2330,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2346,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,2397,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61162,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59866,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59878,57886,57886,57886,57886,57886,57886,57886,59884,57886,57886,57886,57886,57886,57886,57886,59890,57886,57886,57886,57886,57886,61030,57886,57886,57886,57886,57886,57886,57886,57886,61036,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,61393,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,61407,57909,57909,57909,57909,59955,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59967,57909,57909,57909,57909,57909,57909,57909,59973,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60366,57909,57909,57909,60369,57909,57909,57909,57909,57909,57909,57936,60373,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,4083,521,521,521,521,521,521,521,521,57886,57886,57886,57909,57909,59979,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60430,57936,57936,57936,57936,57936,57936,57936,57936,60038,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60050,57936,57936,57936,57936,57936,57936,57936,60056,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,1149,0,0,57936,57936,60062,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3109,0,0,60258,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59865,3164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,3180,521,521,521,521,521,521,3188,521,521,521,521,521,521,521,1333,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2858,521,521,521,521,521,521,521,521,521,521,57909,57909,60628,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61070,57909,57909,57936,57936,57936,60677,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59027,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61099,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3171,0,0,0,521,3175,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,2472,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59349,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61039,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57886,57886,57886,57886,61441,57886,61443,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,61454,57909,61456,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,3607,0,3609,0,0,0,3613,0,0,0,0,0,0,0,0,0,0,1733,0,0,0,1736,0,0,1739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,335872,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,335872,0,0,61467,57936,61469,57936,57936,57936,57936,0,0,0,0,0,0,0,4134,521,521,521,521,521,521,521,521,521,521,521,61485,57886,57886,57886,57886,57886,57886,57886,59846,57886,59848,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60273,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,388,340,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2351104,0,0,0,0,0,131072,0,0,0,0,0,0,441,0,0,0,456,472,472,472,456,456,456,456,456,456,456,456,456,456,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,532,57898,532,57898,532,532,57898,532,532,57921,57898,532,532,57898,57898,57898,57921,57898,57898,57898,57898,57898,57898,57898,57921,57921,57898,57898,57948,57898,57898,57898,57898,57898,57898,57898,57948,57948,57898,57898,57898,57898,57948,57948,57898,532,57898,57898,57898,1,24578,3,155941,156275,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212992,0,0,0,0,0,212992,212992,212992,212992,212992,655,0,0,0,0,0,0,0,0,0,0,655,0,655,0,0,0,0,0,0,0,0,655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57886,57886,57886,58264,57886,57886,58280,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,58340,57909,57909,58356,57909,57909,57909,57909,57909,57909,57909,59444,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59464,57909,57909,57909,57909,57909,57909,57909,57909,57909,58921,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,0,0,0,0,1712,0,0,0,0,0,0,0,1722,0,1241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1293,0,0,0,0,0,1299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1315,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1890,521,521,521,521,521,521,521,521,1372,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1391,521,521,521,521,521,1399,521,521,521,521,521,521,0,0,0,0,57886,59819,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59357,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58772,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58848,50657,58754,977,58851,57909,57909,57909,57909,57909,58858,57909,57909,57909,57909,58864,57909,57909,57909,58830,57886,57886,57886,57886,57886,58838,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58867,57909,57909,57909,57909,57909,57909,60631,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60645,57909,57909,57909,57909,57909,57909,57909,57909,59985,57909,57909,59988,59989,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60005,57936,0,0,1755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,338,339,0,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59323,57886,57886,57886,57886,57886,57886,57886,57886,57886,59334,57886,57886,57886,57886,57886,58837,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61058,57909,57909,57909,57909,57909,57909,57909,57909,61064,57909,61066,57909,57909,57909,57909,57909,57909,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59423,57909,57909,57909,57909,57909,57909,57909,57909,57909,59434,57909,57909,57909,57909,57909,57909,57909,57909,61178,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61191,57936,57936,57936,57936,57936,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,1705,0,0,0,0,1712,0,0,0,0,0,0,0,0,349,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,57936,57936,57936,57936,57936,57936,57936,59541,57936,57936,57936,57936,57936,57936,57936,57936,59552,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61279,57936,57936,521,57886,0,0,0,3940,0,0,0,0,3627,0,0,0,0,0,2282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2298,2299,0,0,0,0,0,0,0,3382,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,0,0,0,2355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2328,521,2413,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2866,57886,57886,57886,57886,59844,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58824,57886,57886,57886,57886,57909,57909,57909,59928,57909,57909,57909,57909,59933,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60011,57936,57936,57936,57936,60016,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58985,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,3380,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4284416,0,0,57886,60829,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59366,57886,57936,57936,57936,60913,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59562,57936,57936,57936,0,521,521,521,521,3951,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,61310,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59875,57886,57886,57886,57886,59880,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,58859,57909,57909,57909,58863,57909,57909,58874,57909,57909,57909,57909,61326,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,61342,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59004,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60689,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61508,0,0,0,0,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,521,1333,521,521,1698,521,58772,57886,57886,57886,59047,57886,1138,0,0,1708,0,0,0,0,1715,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,3883,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,59344,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59364,57886,57886,57886,341,342,343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,341,295,0,0,0,0,0,4013,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,4027,521,521,4029,57886,57886,57886,57886,57886,57886,57886,57886,59376,57886,57886,57886,57886,57886,57886,59385,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59396,59398,57886,57886,57886,57886,0,0,0,389,390,392,342,0,0,0,0,0,0,341,0,0,0,0,341,0,0,0,342,0,0,0,0,0,0,0,0,0,639,748,749,750,0,0,0,0,0,756,757,0,0,0,0,0,0,0,0,769,770,0,772,0,0,0,389,0,0,0,0,0,0,342,0,0,0,389,0,0,0,0,0,342,389,0,0,0,139264,147456,0,0,0,422,0,0,0,0,0,245760,0,0,0,245760,0,0,245760,245760,245760,0,0,0,0,0,245760,0,245760,245760,0,0,0,245760,245760,0,0,245760,0,0,0,0,131072,0,0,0,341,0,0,0,446,0,341,0,473,473,473,473,489,489,489,489,489,489,489,489,489,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,533,57899,533,57899,533,533,57899,533,533,57922,57899,533,533,57899,57899,57899,57922,57899,57899,57899,57899,57899,57899,57899,57922,57922,57899,57935,57949,57935,57935,57935,57935,57935,57935,57935,57949,57949,57935,57935,57935,57935,57949,57949,57935,533,57899,57899,57899,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,344064,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,344064,0,0,0,710,0,0,0,0,0,0,0,718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,331,332,0,0,0,0,0,0,0,0,802,0,660,0,779,0,0,0,0,0,779,802,0,802,800,0,0,0,814,0,0,0,656,817,0,779,0,0,0,0,0,823,0,0,0,0,783,656,827,0,521,830,521,521,521,846,521,521,862,521,521,521,521,876,521,521,521,521,894,521,521,57886,57886,58248,57886,57886,57886,58265,57886,57886,58281,57886,57886,57886,57886,58295,57886,57886,57886,57886,58313,57886,57886,0,57909,57909,58324,57909,57909,57909,58341,57909,57909,58357,57909,57909,57909,57909,57909,57909,57909,59476,57909,57909,57909,57909,57909,57909,59485,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59496,59498,57909,57909,57909,57909,57886,57909,57909,58371,57909,57909,57909,57909,58389,57909,57909,0,0,0,0,57886,57936,57936,58399,57936,57936,57936,58416,57936,57936,58432,57936,57936,57936,57936,58446,57936,57936,57936,57936,57936,57936,57936,57936,60412,57936,57936,60416,57936,57936,57936,57936,57936,57936,57936,57936,57936,60425,57936,57936,57936,60428,60429,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,1143,0,0,1148,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,3881,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,58802,57886,57886,57886,58806,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2962,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60623,57909,57936,57936,58464,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,301,0,0,305,0,0,0,0,0,0,0,0,1816,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,740,0,0,0,0,1274,0,0,0,0,0,0,0,0,0,0,0,0,1286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,540,57906,540,57906,540,540,57906,540,540,57929,57906,540,540,57906,57906,57906,57929,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58773,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59348,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59361,57886,57886,57886,57886,57886,57886,57886,58797,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58821,57886,57886,57886,57886,57886,57886,59374,57886,57886,57886,57886,57886,57886,57886,57886,59386,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59397,57886,57886,57886,57886,57886,57886,57886,61444,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61457,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,521,3095,521,521,521,57886,60442,57886,57886,57886,0,0,3100,3101,0,0,0,0,0,0,0,0,0,0,3627,0,3776,0,0,0,0,3780,0,0,0,0,0,0,0,0,3783,0,521,521,521,3785,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,221645,221645,221645,221645,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59316,57886,57886,57886,57886,57886,57886,57886,57886,59327,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59345,57886,57886,57886,57886,57886,57886,57886,57886,59356,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59876,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59416,57909,57909,57909,57909,57909,57909,57909,57909,59427,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,58429,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,2440,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2459,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60252,57886,57886,57886,57886,57886,60257,59892,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,59910,57909,59912,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60340,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61060,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59981,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,59993,57936,59995,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60686,60687,57936,57936,57936,57936,60690,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60064,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2274,0,0,0,0,0,0,0,2820,0,0,0,0,2823,0,0,0,0,0,0,0,0,0,2831,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3961,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61320,57886,521,2842,521,521,2845,2846,521,521,521,521,521,2851,521,2853,521,521,521,521,2857,521,521,521,521,521,521,521,521,521,2863,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60251,57886,57886,60254,60255,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60878,57909,57909,57909,57909,57909,57909,57909,57909,57909,59445,57909,57909,57909,57909,57909,57909,57909,57909,59456,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61336,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61352,57936,521,521,521,521,521,2871,521,521,521,521,521,521,2879,521,521,521,521,521,2884,521,521,521,521,521,521,521,521,521,521,521,521,521,1904,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1353,1355,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,60260,57886,60262,57886,57886,57886,57886,60266,57886,57886,57886,57886,57886,57886,57886,57886,57886,60272,57886,57886,57886,57886,57886,57886,57886,57886,57886,60281,57886,57886,57886,57886,57886,59373,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59401,57886,57886,57886,57886,57886,60289,57886,57886,57886,57886,57886,60294,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60330,57909,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60318,57909,57909,60321,60322,57909,57909,57909,57909,57909,60327,57909,60329,57909,57909,57909,57909,57909,57909,57909,60336,57909,57909,57909,57909,57909,57909,57909,60342,57909,57909,57909,57909,57909,57909,57909,60350,57909,57909,57909,57909,57909,57909,60357,57909,57909,57909,60333,57909,57909,57909,57909,57909,57909,57909,57909,57909,60339,57909,57909,57909,57909,57909,57909,57909,57909,57909,60348,57909,57909,57909,57909,57909,57909,60356,57909,57909,57909,57909,57909,57909,57909,60632,57909,57909,60635,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60646,57909,57909,57909,57909,57909,57909,57909,60889,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,60906,57936,57936,57936,57936,60910,57909,57909,57909,60361,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61192,57936,57936,57936,57936,57936,57936,57936,60383,57936,57936,60386,60387,57936,57936,57936,57936,57936,60392,57936,60394,57936,57936,57936,57936,60398,57936,57936,57936,57936,57936,57936,57936,57936,57936,60404,0,0,3139,0,0,0,0,0,0,0,3145,0,3147,0,0,0,3150,0,0,3153,0,0,0,0,0,0,0,0,0,0,0,0,450560,450560,0,0,450560,450560,450560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1799,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,3165,0,0,0,0,0,0,0,0,0,0,0,0,0,3174,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2882,521,521,521,521,521,521,521,521,521,521,521,521,521,2892,521,521,521,521,521,3192,521,521,3195,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3205,521,521,521,521,521,521,521,521,2443,521,521,521,521,2448,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1906,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1940,521,521,521,521,521,521,1947,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3214,521,521,3217,521,521,3220,0,0,60565,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58302,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57886,57886,57886,60583,57886,57886,60586,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60597,57886,57886,57886,57886,57886,57886,57886,59871,57886,57886,57886,57886,57886,59877,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2962,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,3431,0,0,521,521,3436,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3453,521,3455,521,521,521,521,521,521,521,1334,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1358,521,521,521,521,521,521,521,521,521,2419,521,521,521,521,521,521,521,521,2426,521,2428,521,2431,521,521,521,521,521,521,521,521,521,2444,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1392,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3461,521,521,3463,521,521,521,521,521,521,521,521,521,521,521,57886,57886,60820,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59378,57886,57886,57886,59384,57886,57886,57886,57886,57886,57886,57886,57886,57886,59394,57886,57886,57886,57886,59400,57886,57886,57909,57909,57909,57909,57909,57909,60888,57909,57909,60890,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,60904,57936,57936,57936,57936,57936,57936,57936,521,3601,521,57886,60948,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,306,0,0,0,0,0,0,306,0,0,0,0,0,521,521,521,521,521,3664,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,61020,61021,57886,57886,57886,57886,61025,61026,57909,57909,61049,61050,57909,57909,57909,57909,61054,61055,57909,57909,57909,57909,57909,61059,57909,57909,57909,57909,57909,57909,57909,57909,61065,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59960,57909,57909,57909,57909,57909,59966,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60341,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60353,57909,57909,57909,57909,57909,57936,57936,61094,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,3764,0,0,0,0,0,0,0,0,521,521,521,521,521,521,2394,521,521,521,521,521,521,521,521,521,521,521,2406,521,521,521,521,521,521,521,521,521,521,521,521,3792,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59849,57886,57886,57886,57886,57886,57886,59854,57886,59856,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60267,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61163,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57886,61154,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61173,57886,57886,57886,57886,61242,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61258,57909,57909,57909,57909,57909,57909,57909,57936,57936,61075,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61087,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,4137,521,4138,521,521,521,57886,57886,57886,57886,57886,57886,0,521,521,3949,521,521,521,521,3954,521,521,521,521,3959,521,521,57886,57886,61308,57886,57886,57886,57886,61313,57886,57886,57886,57886,61318,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60873,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,58418,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58969,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59012,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59029,57936,57909,57909,61324,57909,57909,57909,57909,61329,57909,57909,57909,57909,61334,57909,57909,57909,57936,57936,61340,57936,57936,57936,57936,61345,57936,57936,57936,57936,61350,57936,57936,57936,57936,57936,57936,57936,57936,57936,58962,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58986,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,3606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1740,0,0,0,0,0,0,0,0,0,0,0,0,0,57886,57886,57886,57886,61384,57886,57886,61386,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61398,57909,57909,61400,57909,57936,57936,57936,57936,57936,57936,57936,3600,521,521,60947,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3617,3618,0,0,57936,57936,57936,57936,61412,57936,57936,61414,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60872,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59449,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58932,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,61533,57936,57936,57936,0,0,0,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,0,0,521,4195,521,521,521,521,57886,61543,57886,57886,57886,57886,57909,61547,57909,57909,57909,57909,57936,61551,57936,57936,57936,57936,0,0,0,521,521,4196,4197,521,521,57886,57886,61544,61545,57886,57886,57909,57909,61548,61549,57909,57909,57936,57936,61552,61553,57936,57936,0,57886,57909,57936,4232,61577,61578,61579,521,57886,57909,57936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1261,0,0,0,0,0,0,0,0,0,0,0,0,0,344,345,346,347,348,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,0,0,0,0,245760,245760,245760,245760,245760,245760,0,0,0,0,0,0,0,245760,245760,245760,0,0,0,0,139264,147456,245760,245760,0,0,245760,0,0,0,245760,245760,0,0,0,0,0,0,245760,0,0,0,0,0,0,245760,0,0,245760,0,0,245760,0,0,245760,0,245760,245760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,737,0,0,0,348,347,131072,346,347,347,348,346,347,0,346,347,450,457,474,474,474,485,485,485,491,485,485,491,491,485,491,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,534,57900,534,57900,534,534,57900,534,534,57923,57900,534,534,57900,57900,57900,57923,57900,57900,57900,57900,57900,57900,57900,57923,57923,57900,57900,57950,57900,57900,57900,57900,57900,57900,57900,57950,57950,57900,57900,57900,57900,57950,57950,57900,534,57900,57900,57900,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,639,0,0,0,0,644,645,646,647,648,649,650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,665,666,0,668,669,0,0,0,0,0,675,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1881,521,521,521,521,521,521,521,521,521,521,1375,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1914,521,521,521,521,521,521,521,521,521,521,709,0,0,712,0,714,0,716,0,0,0,0,0,0,0,0,0,726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,499712,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,301,0,302,305,0,306,4857856,4874240,0,0,4923392,0,0,0,0,757,0,0,778,0,0,0,0,0,0,0,0,0,785,0,0,0,0,0,796,0,0,685,0,0,0,757,0,0,0,0,0,278528,278528,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1176,0,0,0,0,0,685,816,816,0,0,0,0,0,521,521,836,840,843,521,852,521,521,521,868,870,873,521,521,521,886,890,521,521,521,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60871,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58892,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60372,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58255,58259,58262,57886,58271,57886,57886,57886,58287,58289,58292,57886,57886,57886,58305,58309,57886,57886,57886,0,57909,57909,57909,58331,58335,58338,57909,58347,57909,57909,57909,58363,58365,58368,57909,57909,57909,58381,58385,57909,57909,57909,0,0,0,0,58396,57936,57936,57936,58406,58410,58413,57936,58422,57936,57936,57936,58438,58440,58443,57936,57936,57936,57936,57936,57936,57936,57936,57936,58963,57936,57936,57936,57936,58973,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58989,57936,58456,58460,57936,57936,57936,836,1127,521,886,890,1131,0,58476,58255,57886,58305,58309,58481,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,540672,0,0,1366,521,521,1370,521,521,521,521,521,521,521,521,521,521,521,1381,521,521,1388,521,521,521,521,521,521,521,521,521,521,1402,521,521,521,0,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,60248,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60256,57886,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58795,57886,57886,57886,58798,57886,57886,57886,57886,57886,57886,57886,58805,57886,57886,58809,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58820,57886,57886,58827,57886,57886,57886,57886,57886,59897,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59918,57909,57909,59921,57909,57909,57909,57909,57909,57909,57909,58885,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58898,57909,57909,57909,57909,58903,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59480,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57936,57936,58994,57936,57936,58998,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59010,57936,57936,59017,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59031,521,1894,521,521,521,521,521,521,521,521,521,521,1903,521,521,521,1907,521,521,1912,521,521,521,521,521,521,521,521,521,521,521,521,2447,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2458,521,521,521,521,521,58754,0,57886,59308,57886,57886,57886,57886,57886,57886,57886,59315,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61164,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59337,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59346,57886,57886,57886,59350,57886,57886,59355,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61160,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,61168,57909,57909,57909,57909,57909,50657,0,57909,59408,57909,57909,57909,57909,57909,57909,57909,59415,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59437,57936,59504,57936,57936,57936,57936,57936,57936,57936,59511,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59533,57936,57936,57936,57936,57936,57936,57936,57936,60681,57936,57936,60684,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60695,57936,0,0,0,0,2305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352256,352256,352256,352256,521,521,521,2438,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2865,521,2794,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2381,2894,521,521,0,0,0,2896,0,1961,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59393,57886,57886,57886,57886,57886,57886,57886,57886,0,2061,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59974,57909,57909,57909,57909,57936,57936,57936,57936,57936,60437,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1727,0,0,0,0,0,0,521,521,521,521,3789,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,61146,57886,57886,57886,57886,57886,57886,57886,61151,57886,61239,57886,57886,57886,57886,57886,61245,57886,57886,57886,57886,57909,57909,57909,61251,57909,57909,57909,57909,61255,57909,57909,57909,57909,57909,61261,57909,57909,57909,57909,57936,0,0,4166,0,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59577,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,3766,0,0,0,0,0,3769,57936,57936,61267,57936,57936,57936,57936,61271,57936,57936,57936,57936,57936,61277,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1880,521,521,521,521,521,521,521,521,521,1891,521,0,521,521,521,521,521,3952,521,521,521,3956,521,521,521,521,521,57886,57886,57886,57886,57886,61311,57886,57886,57886,61315,57886,57886,57886,57886,57886,57886,57886,57886,61387,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61401,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60043,57936,57936,57936,57936,57936,60049,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,57909,57909,57909,57909,57909,61327,57909,57909,57909,61331,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,61343,57936,57936,57936,61347,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61102,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,728,0,788,0,0,0,0,0,0,0,0,788,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,4228,61573,61574,61575,521,57886,57909,57936,521,57886,57909,57936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,391,0,0,0,395,391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,363,364,365,366,0,0,367,0,295,0,0,349,0,407,0,0,0,0,0,0,0,0,0,0,407,0,0,0,0,0,0,407,0,349,0,139264,147456,0,0,0,0,0,0,0,3643,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2887,521,521,521,521,521,521,521,521,521,0,0,0,0,131072,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,535,57901,535,57901,535,535,57901,535,535,57924,57901,535,535,57901,57901,57901,57924,57901,57901,57901,57901,57901,57901,57901,57924,57924,57901,57901,57951,57901,57901,57901,57901,57901,57901,57901,57951,57951,57901,57901,57901,57901,57951,57951,57901,616,57901,57967,57967,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2351104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1228,0,0,0,0,0,0,0,0,1237,0,0,0,672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2300,0,57909,57909,58372,57909,57909,57909,57909,58390,57909,57909,0,0,0,0,57886,57936,57936,58400,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58447,57936,57936,57936,57936,57936,57936,57936,57936,60917,57936,57936,57936,57936,57936,57936,57936,57936,60925,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,3864,0,0,0,0,0,3627,0,0,57936,57936,58465,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,2311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2325,0,0,0,0,1242,0,0,0,0,0,0,0,0,0,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,1203,1161,0,0,0,0,0,0,1273,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,318,0,0,0,521,521,521,58754,901,57886,57886,57886,58760,57886,57886,57886,57886,57886,57886,57886,57886,57886,58774,57886,57886,57886,57886,58784,57886,57886,57886,57886,57886,57886,57886,57886,57886,59873,59874,57886,57886,57886,57886,57886,57886,59881,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58929,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57909,57909,57909,58879,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58895,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60656,57909,57909,60659,57909,57909,60662,60663,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,1756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,337,0,0,0,1785,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1800,0,0,0,0,0,0,0,1243,0,0,0,0,0,0,0,0,2286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1173,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,2418,521,521,521,521,521,521,2423,521,2425,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1379,521,521,521,521,521,521,521,1393,521,521,521,521,521,521,521,521,1405,521,521,2869,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2435,2436,57936,57936,57936,57936,57936,57936,60411,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59529,57936,57936,57936,57936,57936,57936,0,0,0,3432,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1398,521,521,521,521,521,0,3872,0,0,0,0,0,521,3875,521,521,3877,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,61234,57886,57886,61236,57886,57886,57886,57886,57886,60263,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60279,57886,57886,57886,57886,57886,61266,57936,57936,61268,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,3944,0,0,0,0,0,417792,0,417792,0,0,0,0,309,0,0,0,0,0,417792,0,417792,0,0,0,0,139264,147456,417792,0,0,0,417792,0,0,0,0,417792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417792,0,0,417792,0,0,417792,0,417792,418100,3946,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59383,57886,57886,57886,57886,57886,57886,59391,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,787,0,0,0,0,0,0,0,0,0,0,787,0,787,0,0,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0,1160,0,0,0,0,1165,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,460,0,0,0,0,0,0,0,0,0,0,2335231,2335197,2335231,2335231,57886,57886,57886,58266,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,58342,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60891,57909,60893,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60019,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60025,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,58754,1962,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,2557,2962,0,0,50657,2062,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61068,57909,57909,57909,57909,57936,57936,57936,60408,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59021,57936,57936,57936,57936,57936,57936,57936,57886,61028,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,345,0,0,0,0,0,352,350,131072,0,350,350,352,0,350,0,0,350,352,350,0,0,0,350,350,350,350,350,350,350,350,498,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,536,57902,536,57902,536,536,57902,536,536,57925,57902,536,536,57902,57902,57902,57925,57902,57902,57902,57902,57902,57902,57902,57925,57925,57902,57902,57952,57902,57902,57902,57902,57902,57902,57902,57952,57952,57902,57902,57902,57902,57952,57952,57902,536,57902,57902,57902,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2751,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,791,0,0,0,0,0,0,0,0,0,0,0,674,0,0,0,0,0,0,673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,798,799,0,0,0,0,0,0,0,521,521,837,521,521,521,853,857,521,521,521,521,521,878,880,521,521,891,521,521,521,57886,57886,58250,0,751,0,0,804,0,0,0,0,0,804,0,657,0,0,0,0,0,0,0,0,0,0,0,0,819,0,0,0,0,0,0,0,521,521,521,521,521,521,3879,521,521,521,521,521,521,3885,521,521,521,521,57886,57886,57886,57886,57886,57886,61238,58256,57886,57886,57886,58272,58276,57886,57886,57886,57886,57886,58297,58299,57886,57886,58310,57886,57886,57886,0,57909,57909,58326,58332,57909,57909,57909,58348,58352,57909,57909,57909,57909,57909,57909,57909,57909,61330,57909,61332,61333,57909,61335,57909,61337,57936,57936,57936,57936,57936,57936,57936,57936,61346,57936,61348,61349,57936,61351,57936,61353,57909,57909,58373,58375,57909,57909,58386,57909,57909,57909,0,0,0,0,57886,57936,57936,58401,58407,57936,57936,57936,58423,58427,57936,57936,57936,57936,57936,58448,58450,57936,0,4165,0,4167,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,521,1695,521,1697,521,521,59044,57886,57886,59046,57886,57886,1138,0,0,0,0,0,0,0,0,0,0,0,1720,0,0,57936,58461,57936,57936,57936,837,521,880,521,891,521,0,57886,58256,58299,57886,58310,57886,155941,1138,0,301,0,0,305,0,0,0,0,0,0,0,0,2309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3396,0,0,0,0,0,0,0,1208,0,0,0,0,0,0,0,0,0,0,0,0,0,1222,0,1224,0,0,0,0,1229,0,0,0,0,1234,0,0,0,0,0,0,0,3874,521,521,521,521,3878,521,521,521,521,521,521,521,521,521,3887,521,521,61233,57886,57886,57886,57886,61237,57886,1406,521,521,58754,901,57886,57886,57886,57886,58761,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58792,58794,57886,57886,57886,57886,58273,58277,58283,57886,58288,57886,57886,57886,57886,57886,58306,57886,57886,57886,57886,0,57909,57909,58328,57909,57909,57909,57909,58349,58353,58359,57909,58364,57886,58832,57886,57886,57886,57886,57886,57886,57886,57886,58844,58845,57886,57886,50657,58754,977,57909,57909,57909,57909,58856,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,58415,57936,57936,58431,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,57909,58913,57909,57909,57909,57909,57909,57909,57909,58927,57909,57909,57909,57909,57909,57909,57909,57909,58939,58940,57909,57909,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59512,57936,57936,57936,57936,57936,57936,57936,57936,59523,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60021,57936,57936,57936,57936,57936,57936,60026,57936,60028,57936,57936,57936,57936,57936,57936,57936,57936,58950,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58981,58983,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61202,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,3781,0,0,0,0,0,0,521,521,521,521,57936,59034,59035,57936,57936,521,521,1696,521,521,1699,57886,57886,59045,57886,57886,59048,1138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2774,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,730,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1789,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507904,507904,507904,507904,0,1773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1855,0,0,0,0,0,0,0,0,0,0,2825,0,0,0,0,0,0,0,0,521,521,521,521,521,521,2837,521,521,521,521,521,521,521,521,521,1895,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1955,521,521,521,58754,0,57886,57886,57886,57886,57886,57886,57886,59313,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58813,57886,58815,57886,57886,57886,57886,57886,57886,57886,58828,57886,57886,57886,59338,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59399,57886,57886,57886,50657,0,57909,57909,57909,57909,57909,57909,57909,59413,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,60909,57936,57936,57909,59438,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59509,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59534,0,0,0,2332,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,0,0,0,0,0,2358,0,2360,2361,2362,0,2364,0,0,0,0,0,0,0,0,0,0,2372,0,0,0,0,2377,2378,0,0,0,0,0,0,0,49716,49716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,327680,327680,327680,327680,2382,0,0,0,0,0,0,0,2388,521,521,521,521,521,521,2395,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1905,521,521,521,521,521,521,521,521,521,521,521,1918,521,521,521,521,521,521,521,521,521,2439,521,521,521,521,521,2445,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3801,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,2745,2746,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2359296,367,0,0,0,521,521,2843,521,521,521,521,521,2848,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2864,521,521,521,0,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,60247,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59487,59488,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57936,57936,57936,57936,57936,60384,57936,57936,57936,57936,57936,60389,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59016,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60405,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60033,57936,57936,57936,57936,57936,57936,61269,57936,57936,57936,57936,57936,57936,57936,57936,57936,61278,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3446,521,521,521,521,521,521,521,521,521,521,521,521,1937,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1385,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57936,61534,57936,57936,4192,0,4194,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,4193,0,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,0,4211,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,521,57886,57886,57909,57909,57936,57936,521,57886,57909,57936,521,521,521,521,521,521,521,1335,521,521,521,521,1345,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1361,521,521,521,0,0,0,0,0,0,57886,57886,57886,57886,57886,57886,57886,60246,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,59911,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58926,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,0,0,0,0,370,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,378,0,0,0,0,370,0,0,0,0,0,4358144,4358144,4358144,4825088,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5177344,4358144,4358144,4358144,0,0,0,0,0,0,302,0,0,0,302,0,0,306,0,0,0,306,0,0,0,4931584,0,0,0,0,0,0,0,0,747,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,771,0,387,0,353,0,0,0,0,0,396,397,0,398,0,0,0,0,0,0,0,0,0,0,0,398,0,0,403,0,0,0,0,0,0,0,557056,557056,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3129,0,0,0,0,0,0,0,370,378,406,0,0,0,370,0,0,353,0,0,0,370,0,409,411,0,370,398,0,0,370,378,0,139264,147456,398,409,0,0,409,0,0,0,432,131072,0,432,432,0,0,432,0,411,432,0,458,0,0,0,486,486,486,486,486,486,486,486,486,486,508,508,508,508,520,508,508,508,520,508,508,508,508,508,508,537,57903,537,57903,537,537,57903,537,537,57926,57903,537,537,57903,57903,57903,57926,57903,57903,57903,57903,57903,57903,57903,57926,57926,57903,57903,57953,57903,57903,57903,57903,57903,57903,57903,57953,57953,57903,57903,57903,57903,57953,57953,57903,617,57903,57968,57968,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,636,0,0,0,0,0,0,0,0,0,0,4017,521,521,521,521,521,521,521,521,521,521,521,521,521,521,61374,57886,57886,57886,57886,57886,57886,0,0,774,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,793,0,0,0,0,0,0,0,774,0,0,0,0,0,1276,0,0,0,0,0,0,0,0,0,0,0,0,0,1288,0,0,0,0,0,0,0,0,0,0,0,0,3625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,305,0,0,0,0,0,0,305,0,0,0,0,0,0,0,793,0,0,0,0,0,0,0,0,0,0,0,687,0,0,0,774,0,0,0,0,793,0,0,0,0,0,0,0,793,0,0,0,0,774,0,793,0,521,832,521,521,521,521,521,521,863,865,521,521,521,521,521,521,521,521,521,521,521,57886,57886,58251,1151,0,0,0,0,0,0,0,0,0,0,0,0,1164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,0,0,1207,1296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1290,1316,1317,0,1290,521,521,521,521,521,521,0,0,0,0,57886,57886,57886,57886,59822,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,59907,57909,57909,57909,57909,57909,57909,57909,59915,57909,57909,57909,57909,57909,57909,57909,57909,57909,521,1325,521,521,521,1329,521,521,1340,521,521,1344,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1363,521,521,521,0,2895,0,0,0,0,57886,57886,57886,57886,57886,57886,60245,57886,57886,57886,57886,60249,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58294,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59483,57909,57909,57909,57909,57909,57909,59491,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,521,1367,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2893,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,58764,57886,57886,57886,58768,57886,57886,58779,57886,57886,58783,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60588,60589,57886,57886,57886,57886,60592,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60598,57886,57886,57886,57909,57909,58878,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58897,57909,57909,57909,58901,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60367,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59515,57936,57936,57936,57936,59521,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59532,57936,57936,57936,57936,57936,57936,58953,57936,57936,57936,58957,57936,57936,58968,57936,57936,58972,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58991,57936,57936,57936,58995,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60399,57936,57936,57936,57936,57936,57936,57936,0,0,0,1726,1727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,516560,516560,516560,516560,0,1786,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1808,0,0,0,0,0,5111808,0,0,0,0,0,5283840,0,0,0,0,5472256,5521408,0,0,0,0,5595136,5709824,5718016,0,5824512,5865472,0,0,5922816,0,0,6021120,0,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59324,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60837,57886,60839,57886,57886,57886,57886,57886,57886,57886,60846,57886,57886,60848,57886,57886,57886,57886,57886,57886,57886,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59424,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61181,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60047,57936,57936,57936,57936,60052,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57909,57909,57909,57909,57909,59442,59443,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,60907,57936,57936,57936,57936,57936,57936,57936,59538,59539,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59556,57936,57936,57936,57936,57936,57936,59563,57936,57936,521,521,521,59324,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,318,0,0,0,0,0,2384,0,0,2387,0,521,521,2390,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,60823,57886,57886,57886,57886,57886,57886,57886,59867,59868,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59879,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59891,57909,57909,57909,57909,57909,59956,59957,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59968,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58891,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59457,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59980,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,59992,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,3868,3627,0,0,57936,57936,57936,57936,57936,60039,60040,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60051,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60705,57936,57936,60708,57936,57936,60711,3368,521,521,60715,57886,57886,0,0,0,0,0,57936,57936,57936,60063,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,2732,2733,57886,57886,57886,60081,60082,0,0,1710,0,0,1717,0,0,0,0,0,1728,1729,0,0,0,0,0,1735,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,360,361,0,0,0,0,0,0,0,367,0,295,0,0,0,0,2821,0,0,0,0,0,0,0,0,0,2827,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2460,521,2462,57886,60286,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59919,57909,57909,57909,57909,57936,60406,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60418,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59011,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,3194,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3207,521,521,521,521,521,521,0,0,0,0,59818,57886,57886,57886,57886,57886,57886,57886,59826,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60590,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,60615,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60648,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60002,57936,57936,57936,57936,57936,60697,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,6152192,0,0,0,6316032,0,196608,0,0,5816320,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2754,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57936,57936,57936,57936,57936,61097,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,3760,57886,57886,61106,3763,0,0,0,0,3767,0,0,0,0,0,0,315,316,317,318,319,320,321,322,323,324,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1167,0,0,0,0,1171,0,0,1174,0,0,0,0,0,0,0,521,521,521,3788,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,61147,57886,57886,57886,61150,57886,57886,57886,57886,58274,57886,57886,57886,57886,57886,58293,57886,57886,57886,57886,58311,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,57909,58350,57909,57909,57909,57909,57909,57909,57909,57909,57909,59478,57909,57909,57909,59484,57909,57909,57909,57909,57909,57909,57909,57909,57909,59494,57909,57909,57909,57909,59500,57909,57909,57886,57886,57886,57886,61241,57886,61243,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61257,57909,61259,57909,57909,57909,57909,57909,57909,57936,61074,57936,57936,57936,61077,57936,57936,57936,57936,57936,57936,57936,57936,57936,61085,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59516,57936,57936,57936,57936,57936,57936,57936,57936,57936,59528,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61470,57936,57936,57936,0,4130,0,0,0,0,0,521,521,4135,521,4136,521,521,521,521,521,521,521,57886,57886,61486,57886,61487,57886,57886,57886,57886,59340,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59353,57886,57886,57886,59358,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,57909,57909,57909,57909,57909,59914,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60709,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,358,0,0,0,475,475,475,0,0,0,0,0,0,0,0,0,0,509,509,513,513,513,513,509,513,513,513,509,513,513,513,513,513,513,538,57904,538,57904,538,538,57904,538,538,57927,57904,538,538,57904,57904,57904,57927,57904,57904,57904,57904,57904,57904,57904,57927,57927,57904,57904,57954,57904,57904,57904,57904,57904,57904,57904,57954,57954,57904,57904,57904,57904,57954,57954,57904,618,57904,57969,57969,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,637,0,0,0,0,0,0,0,0,0,1305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1288,0,521,521,1320,521,1323,0,680,681,0,0,0,0,0,0,0,0,0,0,0,367,367,367,0,0,0,0,0,0,0,0,702,0,0,0,0,0,0,0,521,521,521,3876,521,521,521,521,3880,521,521,521,521,521,3886,521,521,521,57886,57886,57886,61235,57886,57886,57886,658,0,637,0,0,0,0,0,0,781,0,0,0,0,0,0,0,0,0,0,790,0,795,0,0,0,0,0,0,637,0,0,781,521,833,521,521,521,521,854,858,864,521,869,521,521,521,521,521,887,521,521,521,521,57886,57886,58252,0,790,0,795,0,781,0,807,0,0,0,0,807,0,0,0,0,0,637,0,0,0,0,0,0,0,0,781,0,0,0,0,0,0,1277,0,1162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,670,0,0,0,0,0,0,0,0,57909,57909,57909,57909,57909,58382,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,58403,57936,57936,57936,57936,58424,58428,58434,57936,58439,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,0,1142,0,0,1147,0,0,0,0,0,0,0,311,0,0,0,0,0,310,0,310,311,0,310,310,311,0,0,0,0,0,0,0,0,0,0,0,310,408,311,0,0,0,0,0,0,311,413,0,0,139264,147456,0,0,0,0,0,58457,57936,57936,57936,57936,521,521,521,887,521,521,0,57886,57886,57886,58306,57886,57886,155941,1138,0,301,0,0,305,0,0,0,0,0,0,0,0,2336,0,0,0,0,1806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2292,2293,0,2295,2296,0,0,0,0,0,0,0,0,0,1152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1169,0,0,0,0,0,0,0,0,0,0,0,1179,0,0,0,1183,1184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,1202,0,0,0,0,0,0,0,686,0,0,0,0,0,0,367,367,367,0,0,0,0,0,699,0,0,0,0,0,0,0,0,708,0,0,1243,0,0,0,0,0,0,1251,0,0,0,0,0,1256,0,0,0,0,0,0,0,0,0,0,0,1267,0,0,0,0,0,0,1301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,0,0,1275,0,0,1152,0,0,0,1281,0,1283,0,0,0,0,0,0,0,0,0,1291,0,0,0,0,0,0,0,0,521,521,521,521,521,2393,521,521,521,521,521,521,521,521,521,521,521,2405,521,521,521,521,521,521,0,1297,1256,0,1281,1300,0,1303,0,0,0,1183,0,0,0,0,1311,0,0,0,0,0,1311,0,0,1202,1311,1318,521,521,521,521,521,521,0,0,0,2473,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61043,57886,57886,57886,57886,57909,57909,57909,57909,57909,1324,521,521,521,521,1330,521,521,521,521,521,521,521,521,521,521,1351,521,521,521,521,521,521,521,521,521,521,521,521,1364,521,521,521,0,2895,0,0,0,0,57886,57886,57886,60243,57886,60244,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,521,521,1369,521,521,521,521,521,521,521,521,521,1377,521,521,521,1384,1386,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2881,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3202,521,521,521,521,521,521,521,521,521,521,521,521,3208,521,521,521,521,1409,58754,901,58756,57886,57886,57886,57886,57886,58763,57886,57886,57886,57886,58769,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58790,57886,57886,57886,57886,57886,57886,59870,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58818,57886,57886,57886,57886,57886,57886,57909,57909,57909,58911,57909,57909,57909,58918,58920,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58943,0,58944,58945,57936,57936,57936,57936,57936,57936,57936,57936,57936,59543,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58984,57936,57936,57936,58987,57936,57936,57936,57936,57936,57936,57936,58952,57936,57936,57936,57936,58958,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58979,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58992,57936,57936,57936,57936,58997,57936,57936,57936,57936,57936,59002,57936,57936,57936,59006,57936,57936,57936,59013,59015,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60922,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60395,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59038,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,1138,0,0,0,1710,0,0,0,0,1717,0,0,0,0,0,0,362,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,734,0,0,0,0,0,0,0,0,0,0,1757,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1775,0,0,0,0,0,0,0,1783,1784,0,0,0,0,1840,1841,0,0,0,1844,0,0,0,0,0,1849,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,581632,0,0,0,0,0,0,0,0,0,0,0,581632,0,581632,581632,0,1862,0,1864,1840,521,521,521,521,521,521,521,521,521,521,521,1876,521,521,521,521,1882,521,521,521,521,521,521,521,521,521,521,2850,521,2852,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2427,521,521,521,521,521,521,521,521,521,521,521,521,1893,521,521,521,521,1897,521,521,521,521,521,521,521,521,521,521,521,521,1910,521,521,521,1915,521,521,521,521,521,521,521,521,521,2849,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2429,521,521,521,521,521,521,521,521,521,521,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59319,57886,57886,57886,57886,59325,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59336,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59419,57909,57909,57909,57909,59425,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59436,57909,57909,57909,57909,57909,57909,60653,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61091,57936,57909,57909,57909,59440,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59453,57909,57909,57909,59458,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59936,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59942,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,59536,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59549,57936,57936,57936,59554,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,2730,521,521,521,57886,60079,57886,57886,57886,0,0,0,0,0,0,0,0,2257,521,521,59604,57886,59606,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2277,2278,0,0,0,0,0,5210112,0,5365760,0,5554176,5570560,5578752,0,5668864,0,0,5791744,0,0,0,0,0,0,0,0,0,0,6201344,6242304,6250496,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,3443,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1382,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,0,0,2383,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2403,521,521,2407,521,521,521,2411,57886,57886,59842,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59852,57886,57886,57886,59855,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60609,57886,57886,57886,57886,0,0,57909,57909,57909,57909,57909,60618,57909,60619,57909,57909,57909,57909,57909,57886,57886,59894,57886,57886,57886,57886,57886,57886,57886,0,0,2561,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59923,57909,57909,59927,57909,57909,57909,59931,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59941,57909,57909,57909,59944,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61180,57909,57909,57909,57909,57936,57936,57936,57936,57936,61186,57936,57936,57936,61190,57936,57936,57936,57936,57936,59978,57909,57909,57909,57909,57909,59983,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60006,57936,57936,60010,57936,57936,57936,60014,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60024,57936,57936,57936,60027,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,4076,0,4078,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,60061,57936,57936,57936,57936,57936,60066,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2273,0,0,0,0,0,0,0,0,2743,0,0,0,0,0,0,0,0,0,0,2753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3629,0,0,0,0,0,0,0,0,0,0,0,0,0,2819,0,0,0,0,0,0,0,0,0,0,2826,0,0,0,0,0,0,521,521,2833,521,521,521,521,521,521,521,521,521,521,3465,3467,521,521,521,3470,521,3472,3473,521,57886,57886,57886,57886,57886,57886,60824,57886,57886,57886,57886,57886,2841,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2856,521,521,521,521,2859,521,521,2861,521,2862,521,521,521,521,521,521,0,0,2472,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59834,57886,57886,59838,57886,521,521,521,521,2870,521,521,2874,521,521,521,521,521,521,521,521,521,2883,521,521,521,2886,521,521,521,521,521,521,521,521,521,521,3669,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,58860,57909,57909,57909,57909,57909,58872,0,0,57909,57909,60309,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60317,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61183,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60420,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59008,57936,57936,57936,57936,57936,57936,57936,59022,57936,57936,57936,57936,57936,57936,57936,57909,60332,57909,57909,57909,57909,60335,57909,57909,60337,57909,60338,57909,57909,57909,57909,57909,57909,57909,57909,57909,60347,57909,57909,60351,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60655,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,60666,57936,57936,57936,57936,57936,57936,60673,57909,57909,60360,57909,57909,57909,60363,60364,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,60374,57936,57936,57936,57936,57936,57936,57936,57936,521,521,3096,521,521,57886,57886,60443,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450560,450560,0,0,0,0,0,0,0,0,0,0,0,0,139264,147456,0,0,450560,0,0,57936,57936,57936,60382,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60397,57936,57936,57936,57936,60400,57936,57936,60402,57936,60403,57936,57936,57936,57936,57936,57936,57936,57936,61272,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,3942,3627,0,0,0,0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,371,0,0,0,379,381,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1885,521,521,521,521,521,521,521,521,521,3794,521,521,521,3795,3796,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2559,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60325,57909,57909,57909,57909,57909,57909,3190,521,521,521,3193,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1917,521,521,521,521,521,57886,60581,57886,57886,57886,60584,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60594,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60838,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2561,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60630,57909,57909,57909,60633,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60643,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,58417,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60920,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,57886,0,0,0,0,0,0,0,0,3627,0,0,0,60674,57936,57936,57936,57936,60679,57936,57936,57936,60682,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60692,57936,57936,57936,57936,57936,57936,57936,57936,57936,4072,4073,0,0,0,0,0,4079,4080,4081,521,521,521,4084,521,4086,521,521,521,521,61435,61436,61437,3457,521,521,521,521,521,521,521,521,521,521,521,521,521,3469,521,521,521,521,521,57886,57886,57886,60821,57886,57886,57886,57886,57886,57886,57886,57886,57886,60587,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60595,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,2560,0,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60640,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60883,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60897,57909,57909,57909,57909,57909,57936,57936,57936,60905,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61201,57936,57936,521,521,57886,57886,0,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3784,521,521,521,57936,60939,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,3610,0,0,0,0,0,0,0,3616,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,377,0,0,0,0,0,0,0,0,2824,2782,0,0,0,0,0,2829,0,0,0,521,521,521,521,521,521,521,2838,521,521,521,521,521,0,0,0,3640,3641,0,0,0,0,521,521,521,521,521,521,521,521,521,3651,521,521,521,521,521,521,521,521,521,521,521,521,521,3671,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60612,57886,0,0,57909,57909,57909,57909,57909,57909,57909,57909,60620,57909,57909,57909,57909,521,3661,521,521,521,521,521,3666,521,3668,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,61022,57886,57886,57886,57886,57886,57886,57886,60292,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60303,57886,57886,57886,57886,57886,0,2962,0,0,57909,57909,57909,57909,61051,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61061,57909,57909,57909,57909,57909,57909,61067,57909,61069,57909,57909,57909,57909,57909,57909,57909,58884,57909,57909,57909,57909,57909,57909,57909,57909,57909,58894,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59938,57909,57909,57909,57909,57909,57909,59943,57909,59945,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,61096,57936,61098,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,3765,0,0,0,0,0,0,0,0,2363,0,0,0,0,0,0,0,0,0,0,0,0,0,2374,0,0,0,0,0,0,0,0,0,656,0,0,659,660,0,0,0,0,0,0,0,0,0,0,671,0,0,0,0,0,0,0,0,0,3770,0,0,0,0,0,0,0,3627,0,0,0,0,0,3779,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3786,521,521,521,3790,521,521,521,521,521,521,521,521,521,521,521,521,521,3799,521,521,521,57886,57886,57886,57886,57886,61148,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,60867,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60880,57909,57909,61152,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61161,57886,57886,57886,57886,57909,57909,57909,57909,57909,61167,57909,57909,57909,61171,57909,57909,57909,57909,57909,57909,57909,61053,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59459,57909,57909,57909,57909,57909,57909,57909,57909,61438,57886,57886,57886,57886,57886,57886,57886,57886,61446,57886,57909,57909,57909,61451,57909,57909,57909,57909,57909,57909,57909,57909,61459,57909,57936,57936,57936,61464,57936,57936,57936,57936,57936,57936,57936,57936,57936,59576,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57936,57936,57936,57936,57936,61472,57936,0,0,0,0,4131,0,4133,521,521,521,521,521,521,521,521,521,4139,4140,521,57886,57886,57886,57886,57886,57886,57886,57886,61445,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61458,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60919,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60929,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,4088,521,521,57886,57886,57886,57886,57886,57886,61490,61491,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,61498,61499,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,61506,61507,57936,57936,57936,57936,57936,57936,57936,57936,61415,0,0,4074,4075,0,0,0,521,521,521,4082,521,521,521,521,521,521,521,521,4090,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,60865,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61184,57936,57936,57936,57936,57936,57936,57936,61189,57936,57936,57936,57936,57936,57936,0,0,521,521,521,521,57886,57886,57886,57886,57909,57909,57909,57909,57936,57936,57936,57936,0,521,4220,57886,61565,57909,61566,57936,61567,521,57886,57909,57936,521,521,521,521,521,521,521,1899,1900,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3800,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,425,425,0,0,131072,425,0,0,0,425,0,0,447,0,425,0,476,476,476,0,0,361,361,361,495,361,361,361,361,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,539,57905,539,57905,539,539,57905,539,539,57928,57905,539,539,57905,57905,57905,57928,57905,57905,57905,57905,57905,57905,57905,57928,57928,57905,57905,57955,57905,57905,57905,57905,57905,57905,57905,57955,57955,57905,57905,57905,57905,57955,57955,57905,539,57905,57905,57905,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,376832,0,376832,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1854,0,0,0,0,0,0,0,0,0,0,0,57909,58369,57909,57909,57909,57909,58387,57909,57909,57909,0,0,0,0,58293,57936,57936,57936,57936,57936,57936,57936,58425,57936,57936,57936,57936,57936,58444,57936,57936,57936,57936,57936,57936,57936,57936,57936,60069,57936,57936,57936,57936,2729,521,521,521,521,60078,57886,57886,57886,57886,2739,2266,0,2740,2269,0,0,2742,57936,58462,57936,57936,57936,521,521,521,521,892,521,0,57886,57886,57886,57886,58311,57886,155941,1138,0,1139,0,0,1144,0,0,0,0,0,1150,0,0,0,0,0,5341184,0,5652480,0,0,0,0,4759552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1827,0,0,0,0,0,0,0,1834,0,0,0,0,0,0,1244,0,0,0,0,1249,0,0,0,1253,0,0,0,0,0,0,0,1253,0,0,0,0,0,0,0,0,0,0,0,466944,0,0,0,0,0,0,0,0,1825,0,0,0,0,0,0,0,0,0,0,0,0,353,354,355,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,521,521,521,1327,521,521,521,1336,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2895,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60574,57886,57886,60578,57886,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,58766,57886,57886,57886,58775,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,61034,57886,57886,57886,57886,57886,57886,57886,57886,61042,57886,57886,57886,57886,57886,57886,57909,57909,57909,61047,57909,57936,57936,57936,57936,57936,58955,57936,57936,57936,58964,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59555,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,521,521,1931,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1953,521,521,521,521,521,521,0,2470,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59839,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59333,57886,57886,57886,57886,57886,57909,57909,57909,57909,60864,57909,57909,57909,57909,60868,57909,57909,57909,57909,57909,57909,57909,60874,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,58402,57936,57936,57936,57936,57936,57936,58433,58435,57936,57936,57936,57936,57936,57936,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59433,57909,57909,57909,57909,57909,57909,57909,57909,57909,59986,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60001,57936,57936,60004,57936,57936,57909,57909,57909,57909,57909,59474,57909,57909,57909,57909,57909,57909,57909,57909,59486,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59497,57909,57909,57909,57909,57909,57886,57886,57886,57886,59372,57886,57886,59375,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59389,57886,57886,57886,57886,57886,57886,59395,57886,57886,57886,57886,57886,57886,57886,57886,59872,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,60304,57886,57886,57886,0,2962,0,0,57936,57936,57936,57936,59570,57936,57936,57936,57936,57936,57936,57936,57936,59582,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59593,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,293,1138,0,0,0,0,0,0,0,0,0,0,0,0,3119,0,3120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3135,0,0,0,0,2283,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2301,0,0,0,0,2359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,336,0,0,0,0,57886,59841,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59863,57886,57886,57886,57909,57909,57909,57909,57909,59930,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,58947,57936,57936,57936,57936,57936,57936,60013,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59589,57936,57936,57936,57936,57936,57936,57936,57936,521,521,0,0,57909,57909,57909,57909,57909,57909,57909,60313,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,58931,57909,57909,57909,57909,57909,57909,57909,57909,0,57886,57936,57936,57936,57936,60626,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,1259,57886,57936,57936,57936,57936,57936,60675,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59524,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57886,57886,57886,61155,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,61174,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,61193,57936,57936,57936,57936,57936,57936,57936,57936,61100,57936,57936,57936,57936,57936,57936,521,521,521,57886,57886,57886,0,0,0,0,0,0,0,0,0,0,0,1162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,0,0,0,0,0,0,0,1205,0,0,57936,57936,57936,57936,61471,57936,57936,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57909,57909,57886,57886,57936,57886,57886,57886,57886,57886,57886,57886,57936,57936,57886,57886,57886,57886,57936,57936,57886,521,57886,57886,57886,372,372,0,0,131072,372,0,0,0,372,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57906,57906,57906,57906,57906,57906,57906,57929,57929,57906,57906,57956,57906,57906,57906,57906,57906,57906,57906,57956,57956,57906,57906,57906,57906,57956,57956,57906,540,57906,57906,57906,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2334720,0,2334720,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,2834,2835,521,521,521,521,521,521,521,521,57886,57886,57886,58267,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,58343,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,61179,57909,57909,57909,57909,57909,57909,57936,57936,57936,57936,57936,57936,61187,57936,57936,57936,57936,57936,57936,57936,57936,521,521,521,521,521,57886,57886,57886,57886,57886,301,305,0,0,0,0,0,0,0,0,0,0,0,0,1282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2758,2759,0,0,2762,0,2764,0,0,0,0,0,521,521,521,58754,901,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58780,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,57909,59909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60658,57909,57909,57909,57909,57936,57936,57936,57936,57936,60667,57936,60668,57936,57936,57936,57936,58875,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59947,57909,57909,57909,57909,57909,0,0,0,3771,0,3772,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,3657,521,521,521,521,521,521,0,0,0,363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,0,245760,0,0,0,363,0,0,0,0,0,0,0,0,0,0,363,0,364,0,0,0,0,363,0,0,0,139264,147456,0,0,0,0,0,0,653,654,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1858,0,0,0,0,0,0,0,0,0,433,131072,0,433,433,0,0,433,0,364,433,0,459,0,0,0,487,487,490,490,490,490,496,497,490,490,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,541,57907,541,57907,541,541,57907,541,541,57930,57907,541,541,57907,57907,57907,57930,57907,57907,57907,57907,57907,57907,57907,57930,57930,57907,57907,57957,57907,57907,57907,57907,57907,57907,57907,57957,57957,57907,57907,57907,57907,57957,57957,57907,619,57907,57970,57970,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1239,1806,0,0,0,0,1246,1246,0,0,57909,57909,57909,57909,57909,58383,57909,57909,57909,57909,0,0,0,0,57886,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60688,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58458,57936,57936,57936,57936,521,521,521,888,521,521,0,57886,57886,57886,58307,57886,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,1794,0,0,0,0,0,0,0,0,0,0,0,0,0,1806,0,0,0,0,0,0,0,0,1272,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3402,2768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2318336,57909,57909,57909,57909,57909,60334,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60344,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57886,57886,57886,58268,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,57909,57909,57909,57909,57909,57909,58344,57909,57909,57909,57909,57909,57909,57909,57909,57909,58393,0,0,0,0,57886,57936,57936,57936,57936,58409,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59517,59518,57936,57936,57936,57936,59525,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,1240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2792,0,521,1368,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1395,521,521,521,521,521,521,521,521,2875,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,58834,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,50657,58754,977,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60895,57909,57909,57909,57909,57909,57909,57909,57936,60903,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,58996,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59024,57936,57936,57936,57936,57936,521,521,521,521,521,521,0,57886,57886,57886,57886,57886,57886,155941,1138,0,301,0,0,305,0,0,0,0,0,0,0,0,1216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1232,0,0,0,0,0,0,0,0,1304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,521,521,521,521,3178,521,3179,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2469,0,0,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59883,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,521,521,521,2844,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2434,521,521,57936,57936,57936,57936,57936,57936,60385,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,59522,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,0,0,0,640,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,893,521,521,521,57886,57886,57886,57886,57886,57909,57909,60862,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60879,57909,60881,57909,57936,58463,57936,57936,57936,1126,521,521,521,893,521,0,57886,58477,57886,57886,58312,57886,155941,1138,0,0,0,0,0,0,0,0,0,0,0,0,1817,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,402,0,0,0,0,0,0,0,0,331,521,58754,0,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,59326,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,0,57909,59908,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60343,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,50657,0,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59426,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,59961,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,60346,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,521,521,521,521,2415,521,2417,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2432,521,521,521,521,521,521,2867,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1923,57936,57936,57936,57936,60409,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,60423,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,57936,3660,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,57886,0,0,0,2562,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57909,57936,57936,57936,61185,57936,57936,57936,61188,57936,57936,57936,57936,57936,57936,57936,0,0,0,0,131072,0,0,0,0,0,0,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2310144,0,0,2310144,0,0,0,0,0,0,0,2310144,0,2310144,0,0,0,0,0,0,2310144,2310560,2310560,0,2310144,0,0,2310144,0,0,0,0,0,0,2310144,0,0,0,0,0,0,0,0,0,0,2310144,0,0,0,0,0,0,2310144,0,0,0,0,0,0,654,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2310144,0,367,0,0,0,0,0,0,0,2310560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,380,0,383,0,0,0,0,0,0,2310144,0,0,0,2310144,0,0,0,0,0,2310144,0,0,2310144,0,0,2310144,0,2310144,2310144,0,2310144,0,2310144,2310144,0,0,0,0,0,521,521,521,521,521,521,521,521,521,521,521,521,521,3445,521,521,521,521,521,521,521,521,521,521,521,521,521,1347,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,1362,521,521,2310144,0,0,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310733,2310144,2310733,2310144,2310144,2310733,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2310,0,0,0,0,0,0,0,0,2318,0,0,0,0,0,2322,0,0,2324,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,521,521,521,839,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,898,57886,57886,57886,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,460,2335197,2335197,2335197,460,460,460,460,460,460,460,460,460,460,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,2335231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3392,0,0,0,0,0,0,0,0,0,3399,3400,0,3401,0,2335231,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2763,0,0,0,0,0,2767,0,0,0,0,417,0,0,0,0,0,0,0,0,0,0,2359296,0,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3416,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2359296,1,24578,3,0,0,4366336,0,0,0,0,0,301,302,0,4268032,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2798,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2813,0,0,0,0,2367488,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,295,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,976,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,521,521,521,2391,2392,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,2855,521,521,521,521,521,521,521,2860,521,521,521,521,521,521,521,521,0,1,24578,3,155941,155941,295,0,0,0,0,0,301,302,0,0,305,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3134,0,0,212992,0,0,0,0,0,4366336,0,0,0,0,0,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,382,0,0,6258688,6447104,0,0,6127616,0,6348800,5906432,0,5537792,0,0,0,0,0,5939200,0,0,5677056,6365184,4866048,0,6070272,5545984,5152768,0,0,6144e3,4358144,4866048,4882432,4358144,4358144,4358144,0,1411,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,900,900,900,5537792,5545984,5586944,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,4358144,6348800,4358144,6144e3,0,6144e3,0,4988928,5005312,0,0,0,0,5775360,0,0,0,0,0,0,0,750,808,0,0,0,750,0,0,811,692,0,0,0,816,0,0,0,818,0,0,0,685,692,0,0,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,5914624,5914624,0,0,0,0,0,5513216,5783552,0,0,0,0,0,0,656,0,779,0,0,0,0,0,0,0,783,0,0,0,0,792,0,0,0,0,0,800,0,783,0,0],r.EXPECTED=[166,182,211,1104,242,1452,1467,273,289,712,1117,319,349,333,365,381,397,413,195,1866,2240,2243,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,429,445,461,477,2088,226,493,2075,939,621,523,543,1716,559,575,591,607,1422,650,666,1822,697,1565,634,728,738,754,796,812,828,844,860,876,892,908,924,955,2180,985,681,2211,1015,1044,1028,1060,1090,1133,1320,1149,1165,1551,1181,1197,1213,1229,1259,1904,1365,1375,999,969,1762,1289,1305,1336,1351,1488,1391,1407,1504,1623,1520,1536,1581,1273,1610,1639,1655,1671,2118,2149,1687,1703,1437,507,1732,1748,1778,1074,780,1809,1838,1854,1890,1920,1936,1952,1968,1984,2e3,2016,2032,2061,257,2104,303,2045,767,1793,1594,2134,1243,2165,2196,2227,2234,1874,1479,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,2234,536,2259,2263,2271,2271,2271,2265,2269,2271,2272,2276,2279,2286,2282,2290,2294,2298,2302,2306,2310,2381,2790,2790,4003,4941,2790,2791,2314,3074,2982,2790,2790,2790,2687,2790,5013,2790,2790,2790,2790,2790,2790,2790,2827,2790,2571,3537,4080,2436,2320,2443,2466,2326,2336,2790,2790,2790,2343,2790,2790,2349,3841,2707,2790,2734,2759,2790,2790,2790,2790,4756,2738,2790,2790,2790,2790,4767,2321,2390,2466,2466,2466,2466,2355,2361,2790,2790,2790,2790,2790,2371,4535,2790,2696,4816,2790,2790,2790,2697,4817,2790,2790,2790,4822,4790,2790,2790,3017,3842,2448,2790,2790,3537,4079,4079,4079,4079,4079,4099,2436,2436,2436,2436,2436,2387,2321,2321,2321,2321,2321,2459,2466,2466,2466,2466,2466,2332,2401,2790,2790,2762,4873,2790,2790,2790,2790,2820,4885,2790,2790,2790,2790,3243,4891,3542,4079,4079,4079,4097,2436,2436,2436,2436,2458,2321,2321,2321,2331,2466,2466,2426,2790,2790,3074,4076,4079,4079,2396,2436,2482,2321,2321,2464,2466,2466,2411,2790,2790,4535,2790,4077,4079,4079,2480,2436,2436,2457,2321,2321,2420,2467,2428,2834,3536,4079,2434,2436,2441,2321,2465,2332,2447,4095,4081,2437,2376,2466,2452,4078,2436,2321,2466,4335,4081,2456,2463,2422,4080,2482,2463,2471,4098,2483,2331,2478,2329,2487,2491,2474,2495,2498,2508,2512,2519,2519,2519,2515,2525,2519,2521,2529,2536,2532,2540,2544,2548,2552,2556,2560,4697,2790,2790,2790,4729,2790,4591,2584,2858,2790,2790,2790,3364,2591,2790,3610,2603,2609,2613,2617,2621,2625,2628,2632,2636,4053,2702,2790,2790,2790,2790,3877,2642,2648,2892,4432,2646,2915,2367,2654,3828,2813,2790,2652,3406,2659,2664,2790,2790,2790,2790,2790,2671,4434,2580,4063,2790,2676,2680,2790,2790,2790,3867,2684,2790,2790,2790,3868,2685,2750,2790,2790,2790,2790,2756,2760,2790,2790,2790,2790,2790,2880,2666,2790,2790,2777,4228,3359,2851,4232,4238,2790,4246,4420,4253,3266,4258,4264,3443,2790,4721,2782,2790,2790,2790,3228,3232,2790,2790,2790,2790,4105,2790,2790,2790,2790,2790,2790,3903,3876,2788,4641,2790,2790,2790,3307,2790,2790,2790,4640,2818,2790,2790,3306,2795,2935,2812,2790,2790,2744,2790,3875,3239,2817,2790,4088,2790,2790,2824,2790,3502,2818,2790,3007,2790,3959,3750,2960,2745,3748,2790,4626,2790,4622,2667,2940,2842,3754,2902,4615,2840,3753,3753,3753,4616,2838,4624,4624,3006,3753,2841,2903,2719,3291,3292,3752,2941,2998,3e3,2847,2790,2790,2790,2790,2790,3322,3326,2790,2790,2790,3241,4802,2775,4735,2782,2790,2790,2790,4802,3231,2790,2790,2790,2771,4780,3110,4601,2790,3607,2790,3763,3555,2886,2973,2790,3980,2790,3666,2790,4542,2416,2884,2890,2896,2907,4569,2911,2790,2919,5035,2790,2913,2925,2790,4599,2686,2790,3665,2790,4541,3125,4330,4429,2929,2934,2939,3953,2790,2790,4197,3440,2790,2790,2790,2790,4592,3426,2790,2790,2790,2790,2790,4860,2951,2790,3324,2790,2790,3609,3761,2790,4016,2955,2741,2842,2790,4742,2959,2790,2790,4535,2790,2790,4096,4079,4079,4079,4079,2435,2436,2436,2436,2436,2437,2980,2790,2790,2790,2790,2802,2989,2790,2790,2790,2790,2801,2988,2790,2790,2790,4818,4810,3928,2790,3608,3761,2316,2993,3004,2790,3011,3032,2790,2790,2790,4503,3015,2790,2790,2790,2790,3011,3032,2790,2790,2790,2790,2790,3026,4920,2790,2790,2790,2790,3025,4919,2790,2790,2790,2790,2790,4355,3755,4359,2790,2790,3354,3059,4366,4372,4240,2834,4504,3016,2790,2790,3635,3927,3023,3031,4541,3436,3037,3854,3044,2790,2790,3451,3049,2790,2790,3024,3043,2790,2790,2801,3048,2790,2790,3053,3064,3031,4492,3071,2975,3079,2790,3470,3088,2790,3421,3079,2790,2801,3098,2790,4152,3102,3109,2574,3114,3122,2790,4585,3124,2790,3129,2790,4584,3123,2790,4154,3033,3133,4950,3518,3142,4948,4952,3148,2790,4155,3156,3188,3160,3150,4950,3167,3186,3174,3174,3174,3180,3184,3192,3192,3196,3200,3175,3209,3433,3213,3176,3861,3217,3221,4494,3225,3236,3247,2790,2790,2790,2790,3914,2790,2790,3253,3263,3403,3170,3479,3270,3274,3278,3282,3285,3285,3286,2790,2790,3913,2790,3549,3337,3848,3342,3290,3496,2655,3296,3300,3311,3318,4953,3330,4637,2790,3320,2790,2790,3659,2790,2790,3336,2790,2790,4722,2770,2790,2790,2790,2790,4722,2770,2790,2790,2790,2790,2790,4190,3341,3484,3460,3144,3346,3363,3369,2976,3375,2790,2790,2790,3383,3388,2790,2790,2790,3472,2790,2790,2790,4413,2790,4305,3786,4825,2790,2790,2364,2790,3482,3486,2790,3416,3420,2790,4591,3425,2790,2790,2790,2790,2672,3430,2790,2790,2790,3769,2790,2790,2790,2790,3471,3736,2790,2790,2790,2790,3776,2790,3469,2790,2790,2790,2790,4198,3468,2790,2790,2790,2790,4198,3468,2790,2790,2790,2790,2921,3506,2790,2790,2790,4591,3513,2790,2790,2790,3724,2660,2790,4124,3542,3476,3490,3494,3634,3500,2790,2921,3506,2790,2790,2790,2790,3512,3517,3522,2833,3204,2790,3527,2790,2790,2790,4249,2790,2790,2790,3526,2790,2790,2790,3821,2761,2790,2790,2790,2790,4347,2686,2790,2790,2790,2790,4351,2790,4248,2790,2790,2790,3531,3517,3412,2790,2790,4987,2790,2790,2563,2790,2790,2790,4094,4079,4079,4079,4079,2435,2436,2436,2436,2397,2321,2321,2321,2321,2321,2464,2466,2466,2466,2466,2393,2405,2790,2790,2833,2790,4987,2790,2790,4422,2790,2790,4126,4322,3032,2790,4987,2790,3390,4989,2790,2605,2730,2790,3541,3547,4788,3547,2566,2566,2566,4894,4014,4014,4014,4788,2832,3553,2315,4875,2567,4015,4896,2830,2899,3559,3560,3564,2790,2790,2790,2790,2790,3615,3614,2790,2790,4465,3917,2585,3619,3625,3737,4266,4915,3629,3649,4306,3633,3639,3647,3653,2790,2790,4691,3658,2790,4464,3916,2790,3663,2722,3670,3674,4193,4196,2790,3690,2790,2790,2790,2382,3694,2790,2790,2790,2383,3695,2790,2790,2790,2339,3143,2790,2790,2790,4517,2790,2965,4474,4719,4065,4703,2578,3699,3704,2790,2790,3118,2790,2790,2790,4999,2790,4869,4984,5004,2752,2790,2790,3118,2790,4317,3723,2790,2790,2790,2790,4391,3711,2790,2790,2790,2790,3716,3847,2790,2790,3259,2790,2790,2790,2790,2790,3258,2783,2790,2790,2790,2790,3258,2783,3791,2725,2790,3795,2790,2790,3803,2790,2790,3810,2790,2790,2638,2790,4782,3202,2716,3818,2790,3795,2790,4584,3812,2790,2351,2790,2790,3811,2790,3825,3838,2790,2790,4988,2790,3725,4875,2790,2414,2790,3535,4942,2790,2430,2790,4323,4014,3846,3205,3847,4039,2790,2713,2790,3852,3683,3067,3104,2790,3685,4305,3685,3915,3915,3105,3683,3683,3683,3066,3331,3105,3332,3331,3332,3684,3256,2790,2790,3371,3735,2790,2790,2790,2790,3421,3742,2790,2790,2790,2790,2790,3741,2790,2790,2790,2790,3746,2790,3759,2703,3621,4113,3881,3885,3889,3893,3894,3898,3902,2790,2790,3162,2790,2790,3643,2983,4501,4562,3907,3765,4282,3921,2790,4554,4022,2790,3925,3932,4556,3936,2790,4242,3941,2790,2855,2784,3943,4375,4402,2862,2866,2870,2874,2874,2875,2879,2819,3325,2790,2778,2790,4182,4960,4187,2504,5007,4203,4207,4211,4215,4219,4222,4224,2790,2790,4077,4079,4079,4079,4079,4079,2396,2436,2436,2436,2436,2436,2375,2321,2321,2321,2322,2466,2466,2466,2466,2466,2332,2357,2380,2790,2790,2790,2790,2790,2790,2790,2790,3204,2790,2790,2790,2790,2790,2790,2790,2790,3163,2790,2790,2746,3858,4848,4930,3872,3642,4579,2727,4118,2315,3764,3947,3951,2790,2790,3814,3957,2790,2790,2790,3967,3350,2984,2729,3978,3548,3984,3961,2790,2790,3813,3988,2790,2790,2790,2790,3686,4027,2790,2790,2790,2790,3257,4051,2790,3074,2790,2790,4299,3993,2790,4007,2790,2984,2790,3568,3575,4260,3583,3587,3591,3594,3597,3600,3601,3605,2790,2790,2790,4750,2964,2790,2790,2790,2790,2969,2761,2790,2790,2790,2790,4743,2790,4834,2790,3348,4604,4013,4070,4311,4020,2790,2790,2790,4026,2790,2790,2790,2790,3578,4964,2790,2790,2790,2790,4969,2790,2790,2790,2790,3579,2790,4031,2790,4037,2790,4043,2789,4333,4571,4021,2790,2790,4362,2790,2790,2790,2790,3968,4183,2790,2790,4271,3972,4033,2790,2790,4832,2790,2796,2790,4360,3993,2790,2790,2790,2790,4049,2790,2790,2790,2790,4361,2761,4510,4241,4057,4254,4773,4069,4439,2790,2790,4976,2790,2790,2790,4457,2761,2790,2790,4485,3989,2790,2790,4456,4074,3731,4836,4254,4085,4092,3707,2790,4060,2790,2790,4060,4147,4132,4140,4134,4843,2501,4130,4921,4921,4921,4291,4135,4132,4132,4132,4139,4922,4135,4144,4922,4923,4133,4159,4169,4171,4166,4163,4175,4178,2790,2790,2790,2800,2790,2746,3958,4087,2818,2790,3314,2806,2790,3502,2818,2790,2790,4270,3039,4275,2790,2790,2790,4279,3358,2850,4286,4295,2790,3397,3607,4303,4310,2790,2790,4965,4315,2790,2790,2790,3378,4321,2790,2790,2790,3379,2790,2790,3472,2790,2790,2790,2345,3847,2790,2790,3471,3736,2790,4603,2790,4305,2790,4812,4327,4339,2790,2790,3352,3356,2996,4343,3937,4297,4995,4476,2843,2790,3025,4927,2790,2790,4934,2406,2599,4938,5023,4946,2790,2790,2790,2790,4957,4381,4359,2790,2790,2790,3806,4389,2790,2790,2790,2790,3963,4396,2790,2790,2790,2946,2790,2790,2790,3712,2947,2790,2790,2790,4234,3973,2790,2790,2790,3962,4395,2790,2790,2790,2790,3962,4395,3755,4359,2790,3056,3060,4368,3960,4535,4377,2790,2790,2790,2808,4400,2790,2790,2790,2790,4406,2790,2790,2790,2790,2790,2790,2790,4708,2790,2790,2790,2790,2790,2790,2790,2790,2790,3152,3203,2790,2790,2790,2790,2790,3963,4411,2790,2790,2790,2807,4407,4446,2790,4417,2942,4426,3654,3761,2790,2790,3720,2790,2790,2790,2790,2790,3729,2790,4472,2790,2586,3787,3138,2790,4862,4438,2790,2790,2807,4451,2790,2790,2790,4443,2790,2790,2790,4450,4689,3400,2942,4455,4536,4484,2790,4461,2790,2790,4469,2790,2790,4480,2790,2790,3779,4523,4489,4498,3654,4483,2790,4508,2790,5040,4002,2790,4514,2790,2790,4521,4525,4529,4540,4384,4590,4385,2790,4514,2790,4547,4551,2790,3997,4560,4566,3999,4575,3995,4009,4009,4009,4583,4589,4001,4001,4596,3680,4608,4879,4613,4620,4609,4877,2407,3782,4792,4793,2790,2790,2790,2790,2790,2790,2790,3018,4630,4634,4645,4649,4653,4657,4661,4665,4669,4672,4676,4679,4683,2790,2790,2790,3017,4695,4542,4761,4701,4577,4906,4707,4712,4716,4727,2790,3832,2594,3075,4733,3830,4739,2790,2790,2790,3019,4842,2597,4900,4904,4853,4912,2790,2790,2790,2790,2790,3027,4747,4754,4760,4765,4771,4777,4786,4797,4801,2790,2790,2790,2790,4807,2790,2790,3876,4543,4150,2930,2766,2790,2790,2790,2790,2790,4723,2790,2790,2790,2691,2790,2790,2790,3094,2695,2701,2790,2790,2790,2790,3508,2790,4840,2406,4847,4803,4111,4852,4857,4914,2790,2790,2790,2790,2696,4866,2790,2790,3910,2790,2790,4686,4531,4887,3772,3082,3706,2790,4289,2790,3974,3915,4973,2790,4980,4984,5018,4907,4994,2790,2790,2801,4830,2790,2790,2790,5e3,2790,3091,2790,2790,4103,4533,4109,3084,2790,4117,4908,2790,3303,2790,4122,3249,2790,4999,2790,2790,4828,2790,2790,3571,2790,5011,5017,5022,2790,2790,3799,2790,3384,3389,2790,2790,5029,3394,2790,2790,2790,2790,4881,2790,3543,3449,3410,3116,5028,2790,3798,2790,2790,5027,3365,3864,2790,4990,2790,4045,2790,2710,2790,3447,4603,3455,3459,3700,3677,2790,2790,3464,2790,2790,2790,2790,2790,4199,5033,3136,2790,4383,5039,2587,3834,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2790,2578,2790,2790,2790,2790,2790,2790,2790,2790,6090,6563,5044,5057,5054,6594,6596,6596,6596,6591,5074,6595,6596,6596,6596,6596,5087,5061,5074,6596,6596,5067,5062,6596,5078,5084,5080,5066,6594,6163,5071,5091,5094,5094,5094,5095,5099,5099,5103,5107,5114,5111,5118,5122,5134,5137,5129,5130,5127,5125,5141,5145,6561,6446,5234,5173,5635,5635,5635,5219,5598,5503,5251,5251,5251,5251,5252,5196,5267,6248,5502,5251,5251,5196,5196,5196,5266,5202,5212,5632,5635,5050,6519,6509,5635,6818,5635,5635,5146,5150,6535,5218,5635,5635,5147,5154,5196,5267,5268,5502,5213,5214,5232,5214,5631,5635,5146,5151,5635,5155,5619,6297,5635,6532,6536,5244,5250,5251,5251,5251,5295,5631,5633,5635,5635,5635,5049,6518,5502,5502,5293,5251,5251,5226,5196,5196,6247,5270,5502,5502,5502,5504,5268,5502,5214,5633,5282,5635,5635,5635,5273,6084,5196,5267,5271,5635,5166,5635,5635,5749,5219,5251,5296,5196,5196,5306,5635,5196,5265,5269,5273,5635,5635,5165,5635,6247,5268,5502,5502,5502,5502,5251,5502,5251,5251,5251,5186,5193,5272,5635,5635,6261,5635,5298,5635,5635,6262,5502,5502,5294,5251,5251,5251,5296,5251,5251,5264,5196,5196,5196,5196,5265,5196,5197,5635,6245,5269,5293,5296,5306,6246,6247,5502,5502,5502,5292,5251,5251,5196,6255,6247,5270,5292,5251,5264,5197,5198,5302,5297,5312,5312,5304,5635,5179,5635,5643,5168,5635,6860,5329,5590,5333,5336,5339,5343,5362,5419,5347,5351,5404,5419,5419,5419,5419,5368,5384,5393,5355,5359,5418,5367,5372,5346,5420,5381,5390,5397,5377,5386,5419,5376,5401,5416,5424,5428,5430,5430,5434,5436,5440,5473,5444,5446,5365,5407,5450,5454,5458,5466,5464,5466,5462,5470,5477,5635,5181,6353,5635,5219,5635,5635,5219,5635,7266,5635,5904,5635,6256,6080,5635,6853,5635,5635,5169,5672,6820,5635,5635,5635,5275,5635,5635,7112,6346,7172,5635,5220,7282,5635,5273,5642,5635,5635,6879,5246,5891,5635,5635,5182,6258,5523,6083,6080,5977,6569,5635,6877,6875,6150,5527,5530,5531,5535,5538,5542,5547,5545,5551,5553,5554,5558,5561,5569,5562,5566,5562,5572,5574,5578,5635,6820,6222,5635,5975,5635,5635,6702,6210,5614,5635,5635,5189,5635,5635,6773,5656,5635,5635,5635,5307,5668,5635,5635,5635,5315,6779,5662,5666,5635,5635,5635,5582,5675,5635,5635,5635,5320,5679,6567,5635,5683,5691,5698,5706,5734,5699,5707,6568,5635,5635,5635,5491,6736,5694,5700,5708,5162,5635,5635,5635,5513,7310,6318,5664,5635,5635,5635,5277,5746,5635,5712,5635,5274,5273,5635,5274,6223,5635,5275,5635,6695,5635,5635,6694,5823,6568,5635,5322,5635,5635,5910,5635,5635,5635,6618,5236,5635,5717,6739,6745,5731,6568,5635,5324,5635,6335,5811,5635,5635,5635,5675,5701,5732,5635,5635,5318,5635,5635,6736,6740,6744,5730,5734,5635,5635,5635,5514,5768,5701,5775,6568,5776,5635,5635,5635,5615,5747,7254,5635,5635,5512,6989,5208,6448,5733,5635,5635,5635,5625,5788,7253,5635,5635,5635,5635,5159,5797,5635,5635,5635,5638,6319,5635,5635,5635,5640,6027,5799,5635,5635,5635,5646,5650,6805,5635,5635,5635,5655,5805,5798,5635,5635,5635,5636,5515,5803,6804,6568,5635,5496,5048,5635,5219,6618,5635,5635,5635,6260,5635,5583,5635,5635,5819,6695,5635,5635,5635,5724,5819,5635,5821,5819,5635,5635,6934,6878,5756,5815,5829,5635,5508,5204,5664,5842,5846,5854,5858,5862,5866,5866,5868,5870,5870,5870,5870,5874,5874,5874,5874,5877,5879,5635,5635,5635,5738,7116,5885,5635,6258,6080,5635,5899,5917,5635,5635,5594,5635,5324,5635,5635,6618,5635,6618,5635,5582,5635,5635,5819,5921,5635,5635,5487,7303,5485,5635,6834,5635,5635,5612,5635,6832,5932,5635,5635,5635,7178,5635,6696,5635,5937,5325,5635,5635,5635,5761,5969,5635,5635,5635,5804,5984,5635,5635,5635,5819,5635,5850,6339,5992,5606,5635,5635,5635,6696,5635,5938,5635,6256,6930,6081,6015,5635,5635,5635,5895,6016,5635,5635,5635,5902,5640,5999,6005,6011,6261,5635,6095,5635,5635,6088,6289,6037,6042,5635,5635,5635,7255,5635,5635,6027,6032,6038,6043,5635,5635,6256,5635,6082,5635,5820,5635,5820,5635,5635,5821,6261,6335,6695,5635,5635,6692,6568,5923,7028,6032,6058,6033,6059,5635,5635,5635,5908,7128,7132,6613,5635,5635,5635,5923,5517,6786,6790,5635,6564,5635,5635,5635,5907,6260,6318,5635,5635,5635,7259,6072,6033,6064,5635,5635,7027,6032,6063,6564,5635,5635,6260,6261,5636,6988,7255,5678,5635,6082,5635,5821,5945,5412,5635,5635,5635,7285,5635,5635,6257,6081,6261,5635,5635,5635,5221,6071,6711,6064,5635,5635,6838,5635,5589,6617,6072,6712,6065,5635,5635,6844,5635,5635,6851,6568,6070,6710,6063,6564,5943,6983,5635,5635,5635,7286,5635,5756,5635,5635,5635,5943,6260,6094,5635,5635,5635,7332,5720,5635,6821,6073,6109,5635,5635,5635,5956,5635,6099,6107,6066,6256,6081,6337,5635,5635,6852,5635,5320,5635,6075,6079,5635,5635,5635,5958,5635,6820,7158,6077,5635,5635,5635,7346,5635,6131,6821,6074,6076,5635,5635,6820,6708,6127,5635,5635,7156,5634,5905,5635,5228,6053,5274,6116,6079,5635,6981,6142,7156,5822,5635,7157,6118,5635,5635,6115,6078,5635,5635,6114,6078,5635,5635,6115,6078,5635,5674,5285,5674,6117,5635,5635,5636,5635,5635,5635,6221,6118,5635,5635,6116,6139,6079,5635,6139,7083,5674,6617,7134,5635,7134,5635,7134,5635,6616,6614,5635,5635,6878,5764,6744,6449,5734,5635,5287,6614,6614,6614,7253,5635,5674,5635,5635,5512,5516,5635,6392,6392,5635,5636,5642,6257,5635,6085,7286,5635,5635,5635,6481,6485,5733,6255,6840,6147,5635,5635,6940,6946,7286,6617,6879,6154,6160,6167,6156,6171,6175,6179,6183,6184,6189,6189,6185,6193,6193,6193,6193,6196,7276,5635,5583,5635,5635,5582,6208,5635,5635,6214,6197,5278,6228,5635,5635,6975,5635,5635,7001,5769,5797,5308,5635,6961,5635,5635,7001,5770,6236,5635,5980,6254,5635,5635,5636,5945,5412,5951,5635,5635,6252,5635,5635,5635,6053,5635,6255,6086,6855,6868,5635,6399,5635,6614,5635,5635,6273,5635,5635,5638,5964,6676,5635,5635,5636,6988,6994,5635,5678,5635,6081,5635,5819,5972,5635,5635,5635,6082,6085,5635,6281,5635,5635,5640,6573,6802,5206,6295,5635,5635,7007,7016,7041,5635,7144,6290,6803,5207,5207,6296,5635,5635,5635,6084,6291,5771,6995,5635,5635,7034,5635,5635,7152,5635,5635,7253,5635,5635,6954,5657,5635,7252,6400,5635,6670,5635,6259,6209,5635,5639,6347,5635,5635,5635,6088,6309,6301,6325,6329,5635,6310,6302,6326,6079,5635,6982,5907,5635,6258,6081,6311,6801,6327,5635,5635,7257,6960,6255,6086,6856,6869,5635,5635,5640,7027,6400,5635,6735,7277,6693,5635,6671,5635,5635,5320,6310,6323,6327,6324,6328,5635,5635,5635,6089,5149,5153,6086,6866,6567,5635,5635,7287,6616,5635,6879,7278,5582,5635,6769,6564,5635,7252,6400,5288,6079,6695,6669,5635,5635,6201,5635,6344,5635,5635,5674,5805,6351,6357,5635,5635,5676,5635,6820,7179,6366,6329,5635,5260,5635,5635,5635,6122,6399,5635,5635,6671,5635,6259,6365,7255,5635,6021,5635,5635,5315,5167,5635,5635,5635,6247,6247,6619,5635,5635,5635,6255,6086,5635,6620,5635,5635,5635,6256,5219,5635,5635,6619,5904,5748,6771,6620,6618,5635,7096,6618,6618,6618,6770,5901,5511,6370,5635,5635,7333,5721,5635,7255,7154,5635,5635,7349,5518,7319,6209,6384,5635,6372,5985,6719,6390,6396,6404,6408,6411,6413,6417,6418,6418,6422,6424,6425,6429,6429,6429,6429,6430,6429,5635,5635,5755,5635,5635,5635,5888,5635,6604,7326,5635,5635,5635,6616,5635,6692,5635,5824,6457,6568,5635,6852,5635,6948,5635,6949,6455,5635,5635,5635,6261,6260,5635,6462,6456,5635,5637,5640,6675,7115,5635,6467,5635,5658,6453,5635,6463,5635,5635,5635,6262,7328,5635,5635,5635,6267,5277,6615,5635,5635,5755,5818,5635,6819,5635,5635,6494,6473,5635,6477,5635,5638,6346,5635,5635,7275,5635,5635,7287,5635,5635,5635,6480,5635,6498,6507,6513,6518,6508,6514,5635,5635,6523,5635,5635,5635,6315,5635,6540,5635,5635,5783,5635,5635,6554,5635,5635,5635,6339,5635,6263,6549,6503,5635,6547,5176,6553,5635,5635,5635,6334,5635,6558,7327,5635,5635,5784,5635,6578,5153,5635,5635,5635,6439,6088,6574,6579,5154,5635,5635,6583,5635,5635,5894,5810,5635,5635,5581,5635,5635,5635,5725,6054,5637,5635,5635,5900,5635,5635,5635,5904,5635,6088,6588,5153,5635,5638,6826,7252,6088,5148,5152,5635,5640,7087,6772,6084,6772,6084,5275,5635,6694,5904,6338,5277,6693,5635,5825,5635,6821,6600,5635,5640,7334,5907,5635,5635,6822,6224,5635,5644,5648,6102,5635,6821,6223,5635,5635,5635,6479,6762,5824,5635,5321,5635,5647,7054,7038,5635,7255,5637,5635,5654,5635,5635,5222,7284,5635,5635,5276,5635,5277,6695,6337,6260,5635,5635,5635,5256,6220,5154,5635,5635,5635,6399,5638,6692,5635,5635,5923,6072,5638,7024,6610,5635,5674,6141,5635,5635,6854,5635,5635,6878,5693,5699,7255,6216,6771,5635,5677,5635,5635,5635,5587,5911,6624,5628,6630,6638,6641,6645,6648,6656,6656,6656,6656,6651,6652,6652,6652,6660,6660,6660,6660,6662,6666,5635,5635,5635,6566,6048,5635,5622,5635,5686,5838,5635,5686,6053,5635,5635,5635,5985,5635,5589,6694,5939,6617,5912,6686,5635,5635,5944,5411,6052,6691,5635,5635,6756,6701,5635,5635,5635,6567,6125,6772,5635,5635,5987,5635,5635,6723,6729,7278,6695,6734,5635,5635,5991,5605,6749,5635,5635,5635,6615,5635,5635,5635,5645,5649,5635,6480,6763,6750,5635,6764,5607,5635,5635,5635,5835,5635,6717,5635,5635,6026,6031,5608,5635,6730,6143,6483,6487,6568,5635,5635,6486,5734,5635,5635,6133,6881,5635,5635,6133,7095,5635,5635,5635,6816,6204,6203,5635,5635,6134,6772,5909,5635,5635,5635,6620,5635,5597,6879,6795,5635,5635,5635,6685,6480,6484,6488,5635,5635,6616,6615,5635,5635,6204,6202,5274,6126,5635,5635,6220,6224,7347,6777,5635,5635,6230,5635,5635,6230,6485,5733,5635,5635,6054,5204,5635,7269,6772,5635,5687,5952,5635,5713,5635,5635,5276,6615,5635,6277,5635,5635,6619,6809,5734,5635,5635,6246,6247,6247,6247,6247,5270,5502,7114,5635,7254,5635,5674,5805,5798,6276,5748,5635,5635,6255,6247,6247,6247,5269,5502,5502,5835,6053,5635,5635,6318,6568,5635,7347,7114,5635,5635,6819,5321,5635,6845,5635,5635,5635,6716,5635,6974,5635,5635,6333,5635,6256,5317,6285,5635,5635,6966,5635,5635,6965,5635,5635,6257,5635,6961,6053,5635,5635,6967,5635,6255,5589,6617,5635,5753,5635,5635,5323,5635,6113,5634,5904,5635,6256,6961,6053,6255,6965,6965,6965,5635,6967,6965,5635,6965,5635,6258,6967,6965,7286,6269,5741,5741,5741,6053,6849,5635,5635,5635,6754,5635,7342,6334,5635,5780,6568,5635,5492,6542,6492,5635,5635,5635,6307,6311,6324,6936,6083,6873,5319,6886,6892,6890,6896,6900,6900,6902,6908,6906,6906,6908,6916,6915,6912,6920,6921,6921,6921,6921,6925,6928,5208,5635,5635,6855,6526,6380,5635,5635,6340,5993,6565,5635,5635,6617,5635,5635,5635,6706,5635,6239,5635,5635,6364,7154,5635,6242,5635,5635,5637,5965,5635,6953,5635,5635,6376,5635,5635,6958,5635,5635,6443,5589,7258,5635,5635,5635,6760,5635,6971,5635,6979,6987,6993,6329,5635,5832,6260,6680,6878,5791,6543,5635,5836,5635,5635,6284,5635,5635,6567,5635,6616,5635,5635,6469,6482,6999,5635,5639,5635,5635,5635,6461,5725,5635,5635,5635,6768,7012,7040,5635,5635,6547,6501,7041,5635,5635,5635,6769,5635,7008,7017,7042,5635,5848,5748,6255,5483,5635,5635,6245,6247,5635,7021,5933,6053,5904,6935,6879,5792,5644,5648,7055,7046,5645,7052,7056,7047,5646,7053,7057,7048,5724,5635,5635,5635,6783,6486,5734,5820,5635,5904,6935,6879,5748,6879,5793,5635,6566,5635,5757,5635,5635,5724,5756,5635,5277,5635,5635,5635,7176,7094,7061,7048,5635,5635,6548,6502,5649,6103,7067,7048,5635,7061,6564,5635,5635,6568,5635,5646,5650,7066,7124,5635,7065,7123,5635,5635,6584,5635,5635,6987,7154,5635,5881,5635,5635,6365,5635,6878,5318,6615,5635,5899,5962,5635,5602,5635,5635,5188,5635,7077,5635,5635,5635,6794,5647,7076,7069,5635,5900,6053,5726,5646,7075,7068,5635,5635,6879,5635,5635,5635,6799,6809,5635,7176,7081,5635,5901,7114,6434,5635,5635,7176,7089,5635,5902,5511,6435,5635,5635,5757,5274,5635,6088,7088,5635,5902,5635,5635,5635,6800,5635,6088,7154,5635,5903,5635,5906,6616,6614,5820,5904,6880,5635,5908,5635,5635,5924,7029,6033,5640,7178,5635,5635,6614,5635,5635,6088,7093,5635,5908,6605,7327,7177,7095,5635,5901,5902,5635,5640,6218,5821,6880,5635,5635,6615,6616,5635,5635,6259,5635,5635,6259,5635,5903,5635,5635,5635,5745,5640,7178,6772,5238,5635,7100,6880,5635,5913,6687,5635,6700,5635,5635,6135,5635,5635,6681,5635,5635,6820,7094,5635,5928,5635,5635,5608,6878,5635,7100,6881,5635,7115,5635,5635,7254,7106,5635,5635,5635,6821,6073,6820,7275,5635,5635,5635,6820,6309,6133,7095,6880,5635,5943,5410,5949,5635,5635,5635,7252,5635,5635,7120,5635,5635,7273,7120,6878,5635,5635,6693,5635,5635,5635,7274,5635,5635,6695,5635,5635,5819,5809,5635,7138,5635,6963,5905,6209,5635,6961,5635,5979,6253,5635,5635,7002,6744,5798,5240,5635,6021,5499,7109,5673,5635,7142,5635,6962,6021,6964,6625,6022,7174,7271,7149,7162,7166,7170,7183,7187,7191,7194,7202,7197,7198,7206,7208,7212,7218,7217,7213,7222,7232,7232,7225,7231,7227,7236,7240,5635,5985,5837,5635,5723,5635,5635,6602,6606,7128,7132,5904,5635,5910,5481,7100,7241,5635,5635,6695,5824,6360,5635,5635,5635,6853,6259,6079,5635,6529,7245,7247,7251,5635,5986,5635,5635,5763,6743,5702,5776,5635,7263,5635,5635,6725,5492,7283,7255,5635,5635,6737,5769,7291,5635,7292,5635,5997,6003,6009,6015,5635,7296,7130,5635,5998,6004,6010,5907,5903,5635,5635,6737,6741,5635,6086,5641,5635,5635,5635,7100,5635,5635,6738,6742,6879,5635,7114,5635,7252,5635,5635,6853,6855,5635,6020,5635,5635,5635,7254,5635,6337,5635,5635,6770,5635,6772,5635,6086,6084,5635,5635,6259,5635,7301,6386,5635,5635,5635,6878,5635,5512,7309,6633,5635,6047,5635,5635,5635,7256,7310,6634,5635,5635,5635,6882,5635,7307,7311,6338,6853,5320,5635,5640,7334,5722,5635,5635,6821,6126,5635,5635,6021,6772,7128,7132,5258,5635,5635,5635,6966,5642,5635,5635,7101,5635,6850,5635,6336,5635,6260,5635,6261,7102,5985,6334,5635,5635,5644,7073,7315,7319,6338,5635,6080,5906,5903,7316,6788,5635,5635,6772,5635,6084,7095,5635,5635,5686,5635,7317,6789,5635,5635,6813,5635,7318,6790,6770,6769,5635,5635,6619,5635,6769,6820,5635,5635,6881,7115,5635,6852,6855,5635,5635,5635,6845,5635,6718,6694,5635,5635,5635,6942,6786,6790,5635,5635,5635,6967,5635,5635,6786,6790,6770,6769,7254,5635,7101,5635,7297,7132,5258,7113,5635,5635,6819,5635,5635,5635,5166,6379,5048,5635,5635,6821,6074,6078,5635,5635,5635,5978,7350,5519,7320,5635,6081,5678,6626,7319,5635,5635,5635,7006,7348,5517,6786,6617,5635,6772,6771,5635,6084,6303,6488,5635,7324,5906,5903,5635,6085,5641,5635,6084,6352,5635,5635,5635,6231,5047,5635,5635,5635,7033,5635,7348,7335,5903,5635,6879,5635,6851,5678,5909,6855,6864,5635,7340,5635,5635,6829,5635,6087,5635,6881,5635,6852,6819,6850,5635,5635,6261,7332,7336,5635,5635,5635,7145,5635,6232,5635,5635,6833,5635,5274,5635,5635,5635,7177,0,0,1075838976,2097152,16384,0,0,0,62,64,4194560,4196352,270532608,2097152,2097152,268435456,4194432,541065216,541065216,541065216,541065216,4194304,4194304,4196352,-1606418432,-1606418432,541065216,541065216,4194304,4198144,541065216,541065216,-2143289344,-2143289344,8425488,4194304,4194304,4194304,541065216,37748736,4194304,541065216,4194304,4194304,4194432,37748736,-1606418432,742391808,239075328,775946240,171966464,171966464,171966464,171966464,239075328,171966464,775946240,239075328,239075328,775946240,775946240,775946240,4718592,64,4718592,2097216,4720640,4194400,4194368,-2142763008,541589504,4194368,541589504,541589504,541065280,4194368,4194368,541065312,541065280,-2143289280,4194368,-2143285440,-1605890240,-2142761152,-2109731008,-1606414528,-2143285440,-2143285440,-2143285440,-1605890240,-1606414528,-1606414528,-2143285440,-2143285408,-2143285440,-2143285440,-2142761152,776470528,-1908404416,775946304,775946304,-1908404416,2,4,8,16,512,1024,16777216,33554432,402653184,0,0,0,-1979711488,0,8192,8392704,0,2147483648,16777216,0,0,1536,32768,0,0,128,196608,0,16384,1536,1792,8192,16384,131072,131072,0,0,64,1536,32768,96,96,0,0,2147483648,16,0,0,1536,64,524352,524352,524352,524352,0,524288,64,64,262144,1048576,4194304,16777216,33554432,67108864,134217728,536870912,0,128,128,128,128,2048,1536,1024,0,0,0,15,208,15360,96,96,0,64,64,16392,64,1048576,128,128,0,256,8192,0,8192,0,33554432,0,1024,1024,0,0,2147483648,65536,32,96,96,96,96,64,0,8388608,4096,0,0,8192,2097152,2147483648,96,524352,524352,524352,524288,524288,524288,64,64,64,0,0,0,8,0,0,0,11,64,64,128,2048,0,4096,0,0,131072,128,64,64,64,96,96,96,524352,524352,524288,64,524288,64,64,96,524352,0,0,0,18,33554432,64,96,524352,524288,0,64,0,2097152,0,0,4,16,0,0,16,8388608,0,0,4096,536870912,1073741824,0,4,32,32,4,1073872896,32,40,96,160,1056,262176,1048608,2097184,32,32,32,524320,32,1073872896,40,262176,1120,96,4195360,6291488,2097184,2097184,4194336,4194336,536870944,32,32,40,262176,32,32,40,262184,1120,96,6292512,4195360,56,262184,40,262184,40,0,4,262184,40,40,40,40,4195104,6292512,4196128,32,262184,34,34,40,48,42,32,32,327155712,34,1056,1056,32,96,32,32,41,262184,32,64,512,2048,16384,67108864,42,1056,4194336,32,32,32,32,56,2098208,42,4457568,-326784344,-322851160,-322851160,-322698144,-322698144,-322698144,-322698144,-322695456,-322695456,-322695456,-322695456,-322597152,-320598176,-322597152,-322597144,-321548576,-320598168,-321548568,-322597144,32,0,96,32,42,224,40,262176,42,106,293601323,293601323,293863467,293699627,293617707,293716011,297896507,293964347,293702267,297896507,293702203,293702203,293702203,293702203,293964347,297896507,297896507,-322597144,-322588952,-321548568,-322588952,-37744981,-322597144,-321548568,-37482773,0,131072,1048576,2097152,0,0,-1744830464,0,-1744830464,0,318767104,0,0,0,48,0,1,285212672,0,0,2048,64,64,64,64,32,96,0,32,64,65536,0,0,1,2,12,16,64,128,1024,2048,4096,0,2,65536,262656,5242880,-1842937664,201330721,201330721,-2111369023,-2111369023,-2111369023,-2111369023,-2111369023,-2111369023,-2111360575,-2111369023,-2111369023,-1977151295,-1977151293,-1910042431,-1893265183,-2111368509,-1893265183,-1893265183,-1893265183,-1893265183,-2111368509,-1893265183,-1893265183,-553689472,-553656704,-553689472,-553689472,-553656704,-553656704,-553656704,-553656704,-553656704,-553656704,-553656672,-553656672,-553656672,-553656672,-553656672,-553656670,-553656608,-553656672,-553656664,-553656664,-553656672,-553656670,-553656672,-553656672,-536912159,-553656671,-536879391,-536879391,-536879391,0,0,2048,4194304,0,0,0,262656,0,0,0,536870912,1073741824,458880,2097152,-1845493760,0,0,4096,2097152,0,0,1,4096,201326592,805306368,-1073741824,0,0,0,24576,471424,0,-2113929216,0,0,0,220,-1912602624,18874368,463488,0,0,9216,0,0,16384,8192,8192,32768,2048,2048,2048,2048,0,0,0,0,1,0,0,0,2,0,0,0,3,4,16,224,256,512,32768,0,104e4,15728640,-570425344,0,0,0,254,4194304,16777216,33554432,268435456,536870912,2147483648,0,0,-570425344,32505856,2097152,301989888,0,0,0,512,0,0,0,256,12288,0,167772160,234881024,0,0,16384,32768,50331648,0,128,512,7168,16384,32768,196608,16384,196608,786432,1048576,2097152,4194304,8388608,33554432,2097152,4194304,8388608,503316480,1073741824,2147483648,0,4096,201326592,0,0,0,167772160,234881024,128,1024,4096,8192,0,0,8192,268435456,0,0,4194304,8388608,234881024,268435456,1073741824,2147483648,0,0,1048576,4194304,33554432,268435456,268435456,268435456,268435456,0,128,131072,2097152,0,0,0,520,0,201326592,0,0,0,1073741824,0,0,0,134217728,128,512,3072,16384,32768,3072,16384,131072,524288,1048576,4194304,16777216,33554432,201326592,268435456,1073741824,2147483648,1048576,4194304,268435456,536870912,131072,0,0,131072,0,131072,2097152,0,0,16384,2097152,0,0,2097152,4194304,134217728,2147483648,0,0,0,512,3072,131072,524288,1048576,131072,524288,4194304,2147483648,0,0,0,16384,16384,18432,0,0,0,2048,0,0,4096,1048576,0,0,67108864,1073741824,2147483648,0,0,29696,0,0,32768,50331648,268435456,2147483648,0,0,1,1,18952,1024,0,65,1024,0,4096,32768,0,1024,18952,65,268436480,2101248,524288,1024,19017,-1744550912,8388624,8388624,8388624,-1739308032,-1739308032,-1739308032,-1739308032,-1736162288,-1736162288,-1736162288,-1736162288,-7868466,-7868466,-7868466,-7868466,-7868450,-7868450,-7868450,0,0,0,1610612736,1024,0,2101248,0,0,262144,65536,262144,262144,0,0,2048,131072,524288,585,0,0,0,8192,0,0,0,4096,0,0,0,32,0,0,0,44,64576,0,1024,278528,-1744830464,5521408,-1744830464,0,0,2,12,64,0,1040,8667136,-1744830464,-67108864,0,0,0,9728,0,2014,0,0,0,13312,0,1,4,8,32,64,16384,67108864,134217728,268435456,2147483648,0,0,520,1024,0,0,2,16,0,278528,0,0,2,67108864,16384,0,5242880,2147483648,0,0,327680,0,0,328192,0,0,0,118,577408,22020096,1040,0,0,0,16384,0,67108864,1998,518144,8388608,50331648,201326592,805306368,0,2,204,768,1024,10240,1024,10240,16384,32768,458752,8388608,458752,8388608,50331648,67108864,134217728,805306368,134217728,805306368,1073741824,2147483648,0,220,0,0,0,32768,33554436,2,12,192,768,1024,1024,2048,8192,16384,32768,458752,32768,458752,50331648,67108864,134217728,134217728,805306368,1073741824,0,0,208,0,0,0,34816,67108864,268435456,0,0,0,65536,458752,50331648,67108864,805306368,1073741824,458752,50331648,67108864,536870912,1073741824,0,0,4,8,64,128,512,2048,196608,262144,33554432,536870912,0,0,0,262144,0,0,0,64,0,0,2,4,8,262144,0,1048576,4194304,0,0,4,8,128,512,1024,32768,65536,131072,2048,196608,262144,50331648,536870912,1073741824,1,4,8,512,2048,131072,33554432,536870912,0,0,4,8,512,2048,8192,32768,8388608,0,524288,262144,0,0,4,64,128,8388608,0,512,2048,131072,536870912,0,0,4194304,8192,2097152,268435456,2147483648,16,33554432,-2147418112,537395200,537395200,0,4196352,537427968,4196352,0,537395200,4196352,4196352,276901888,8540160,-1606418432,32768,537395200,4196352,1082130432,51380242,51380242,51380242,22022147,22349827,22349827,22349827,22366219,22349843,22349827,22349827,22366219,22349827,55576594,55576594,55576594,55576594,1062785014,324012114,55576594,55576594,55576594,1062785014,1062785014,1062785014,1062785014,0,0,0,329728,557056,0,0,0,393216,0,0,17825792,33554432,0,0,0,462976,3,22020096,0,0,4,134217728,0,0,8,16,512,402653184,0,0,346112,19,0,0,8,64,0,0,0,82,301989888,0,0,393232,0,0,393240,0,0,524288,524288,524288,524288,0,577408,22020096,1040187392,0,0,0,524288,0,0,0,16,0,0,0,6,16384,32768,268435456,0,268435456,0,1048576,16777216,33554432,0,0,524288,1048576,2097152,0,80,268435456,0,0,524288,536870912,0,112,128,256,3584,16384,32768,134217728,805306368,0,0,0,1007232,256,1536,2048,16384,32768,262144,0,4,16,32,64,128,256,1536,0,16,33554432,0,0,1048576,4194304,2147483648,1536,16384,32768,524288,4194304,33554432,134217728,536870912,0,0,0,32768,0,0,0,1048576,0,0,0,1998,518144,1,0,0,65536,262144,0,0,256,1536,32768,524288,0,0,4194304,134217728,536870912,0,0,1114112,1073741824,16,64,1536,32768,524288,4194304,67174400,33554432,1073741824,0,67174400,0,0,16384,1073741824,0,0,2097152,0,1572864,0,1073741824,16384,0,4194304,0,8,0,131072,0,131072,0,8,131072,131072,134217728,4096,0,8,0,8,131072,4194304,-2146430976,131072,134217736,16908320,547389524,547389524,555909216,555909216,555909216,555909216,564297840,564297844,564297844,564297844,564297844,564297844,564297844,1001055742,1001056254,1001055742,1001055742,1001056254,1001056254,1001056254,1001056254,1001056254,1001055742,1,0,67108864,1073741824,0,84,2129920,8388608,536870912,0,96,2260992,0,0,2097152,4194304,8388608,134217728,268435456,1280,2809856,58720256,939524096,0,0,0,1052672,0,254,1792,2809856,58720256,939524096,0,939524096,0,0,12,16,32768,2097152,8388608,536870912,0,163840,0,0,12,32,64,1024,2048,57344,262144,50331648,268435456,1073741824,2147483648,0,52,0,0,20,64,62,64,128,1280,8192,16384,131072,524288,58720256,24576,163840,524288,2097152,58720256,402653184,58720256,402653184,536870912,0,0,64,128,1792,24576,163840,4,16,8388608,0,0,2113536,0,0,3735552,0,0,8388608,8388608,4096,4096,4096,4096,0,48,25165824,0,0,0,1572864,0,6,56,128,1792,8192,524288,58720256,402653184,0,0,32,128,256,262144,262144,1048576,1073741824,0,0,0,2147483648,0,0,0,-2147483646,4,24,32,128,1792,1280,8192,524288,16777216,33554432,0,262144,33554432,134217728,0,8,16,1024,16777216,4194432,3145728,541065216,-2143289344,4194304,4194304,4194304,4194304,16,402653184,0,0,32,128,256,2048,262144,524288,4,16384,65536,67108864,0,0,0,131072,0,0,0,1024,0,0,32768,8192,0,2048,0,32,8192,3670016,2048,8192,196608,1048576,0,0,34816,9216,4096,4096,29696,29712,29712,29840,29712,29712,29840,536900624,4224144,144384,-754647956,-754647956,-754647956,-754647956,144384,144384,144384,144384,-754647940,-754647940,-754647940,-754647940,-754516884,-754647956,-754516884,-754516884,-754516884,0,0,8388608,1073741824,0,0,67108864,12,16384,0,65536,29824,0,0,0,3670016,44,64576,319029248,-1073741824,0,0,60,0,0,0,4194304,0,0,0,2014,0,319160320,0,0,0,5242880,0,4,8,256,512,2048,8192,16384,458752,50331648,0,524288,3145728,0,0,16384,8,0,28672,0,0,32,524288,0,16,0,128,0,12288,131072,0,0,128,512,3072,4096,16384,32768,131072,524288,1048576,2097152,4194304,262144,318767104,-1073741824,0,0,0,28,0,0,60,64576,28,32,64,1024,2048,61440,262144,318767104,24576,0,0,0,8388608,0,0,0,104e4,67108864,16384,0,65536,262144,1048576,0,8,64,2048,4096,8192,65536,131072,1048576,0,0,128,536870912,4194304,131072,0,0,64,2048,16384,32768,524288,1048576,4194304,134217728,2147483648,32768,262144,50331648,268435456,0,32768,8388608,0,0,16777216,16777216,0,0,0,4,8,16,2,67108864,0,65536,201326592,2147483648,0,0,1998,59238400,-67108864,0,524288,1048576,0,0,64,256,32768,50331648,268435456,0,0,1,256,0,0,0,16777216,0,0,256,0,8192,0,256,262144,2113536,2097152,135790592,0,256,8192,2097152,0,2147483648,0,32768,2097152,0,2147483648,5242880,0,0,0,128,0,0,0,208,131073,0,0,131073,0,135790592,131073,4,0,131073,393233,1610612736,1610612736,1610612736,393241,393241,393241,393241,805707793,805707793,1879449617,805708049,1879449617,1879449617,1879449617,1879449617,-483948553,-475559945,-475559945,-483948553,-483948553,-475559945,-483948553,-475559945,-483948553,-475559945,-475559945,-475559945,-475559945,-475559945,-215504905,-475559945,-207116297,-207116297,0,0,72,0,4096,4194304,32768,0,0,256,401424,805306368,0,0,112,25165824,0,1879048192,0,0,116,0,0,401680,0,0,0,32505856,7,19367920,-503316480,0,0,0,33554432,0,0,33554432,268435456,0,0,0,19376112,-234881024,0,0,50331648,268435456,0,27764720,-234881024,0,0,512,2048,0,0,1,2,4,32,524288,1048576,524288,1048576,33554432,67108864,134217728,805306368,0,24,0,0,512,3072,16384,0,7,16,480,1536,32768,1536,32768,65536,2490368,32768,65536,10878976,16777216,33554432,0,9728,268435456,0,0,67108866,12,64,128,512,1024,2048,0,16,393216,0,0,393216,2097152,16777216,33554432,536870912,-1073741824,0,0,10485760,16777216,33554432,1073741824,2147483648,0,16,224,256,1536,32768,65536,393216,10485760,16777216,131072,262144,2097152,16777216,32768,131072,262144,2097152,8388608,16777216,0,0,4,16,224,512,32768,131072,2097152,16777216,192,32768,0,0,512,4096,4,16,192,32768,8388608,0,16,64,128,8388608,0,0,1024,0,4,0,0,0,3145728,0,4,128,0,0,268435456,2,0,0,65536,0,0,0,65,0,64,128,8388608,16777216,1073741824,0,0,512,2048,32768,262144,524288,8388608,0,0,512,131072,524288,8388608,33554432,2147483648,33554432,33554432,0,2,4,112,128,-2113929216,100663296,100663296,2,4,524288,134217728,0,0,8,512,2048,196608,33554436,0,0,33554436,4224,4224,0,65536,100663296,4224,65536,65536,262144,33554432,0,2,4,16,64,128,256,0,4224,65536,16777216,262400,65536,4224,-1072627712,805306384,-1342177264,-1342177264,-1070006272,-1069989376,-1069989376,-1069989376,-258932720,-258932720,-258932720,-258932720,-1069989360,-1065795072,-1061600768,-1069989376,-225378288,-258932720,-258932720,-258932720,-225378288,1260767,1260767,34815199,1260767,1260767,1260767,1260767,34815199,1260767,34815199,34815199,34815199,1260767,1260767,169032927,1242774751,-1978450721,169032927,-1978450721,-1978450721,-1978450721,169032927,169032927,169032927,169032927,-225231649,-1173144353,-225231649,-225231649,-91013921,0,0,0,67108864,0,3751936,0,0,528,7946240,12140544,0,0,0,134217728,0,0,0,7,27756528,-503316480,0,0,9502720,1610612736,0,0,486539264,0,0,2048,32768,0,0,64,128,0,0,536870912,0,0,208,15360,1245184,0,0,0,268435456,0,0,0,15,9633792,0,0,0,32,512,2048,262144,0,3670016,0,0,1040,1040,1,2,12,80,128,7168,8192,196608,16,64,128,3072,4096,8192,65536,131072,0,0,32,262144,524288,33554432,134217728,0,0,0,2,8,64,128,1024,4096,0,0,262144,0,4096,4194304,1,1,1,0,0,2,8,16,64],r.TOKEN=[\"(0)\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSection\",\"Wildcard\",\"EQName\",\"URILiteral\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"StringLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"PITarget\",\"NCName\",\"QName\",\"S\",\"S\",\"CharRef\",\"CommentContents\",\"EOF\",\"'!'\",\"'!='\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$'\",\"'$$'\",\"'%'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"')'\",\"'*'\",\"'*'\",\"'+'\",\"','\",\"'-'\",\"'-->'\",\"'.'\",\"'..'\",\"'/'\",\"'//'\",\"'/>'\",\"':'\",\"':)'\",\"'::'\",\"':='\",\"';'\",\"'<'\",\"'<!--'\",\"'</'\",\"'<<'\",\"'<='\",\"'<?'\",\"'='\",\"'>'\",\"'>='\",\"'>>'\",\"'?'\",\"'?>'\",\"'@'\",\"'NaN'\",\"'['\",\"']'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'false'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'jsoniq'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'null'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'select'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'true'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'{|'\",\"'|'\",\"'||'\",\"'|}'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/parsers/XQueryParser.js\":[function(e,t,n){var r=n.XQueryParser=function i(e,t){function r(e,t){Vl=t,Ql=e,Gl=e.length,s(0,0,0)}function s(e,t,n){Dl=t,Pl=t,Hl=e,Bl=t,jl=n,Fl=0,Zl=n,Ul=-1,$l={},Vl.reset(Ql)}function o(){Vl.startNonterminal(\"Module\",Pl);switch(Hl){case 274:Ll(198);break;default:_l=Hl}(_l==64274||_l==134930)&&u(),kl(274);switch(Hl){case 182:Ll(193);break;default:_l=Hl}switch(_l){case 94390:Nl(),a();break;default:Nl(),Ra()}Vl.endNonterminal(\"Module\",Pl)}function u(){Vl.startNonterminal(\"VersionDecl\",Pl),Sl(274),kl(116);switch(Hl){case 125:Sl(125),kl(17),Sl(11);break;default:Sl(263),kl(17),Sl(11),kl(109),Hl==125&&(Sl(125),kl(17),Sl(11))}kl(28),Nl(),c(),Vl.endNonterminal(\"VersionDecl\",Pl)}function a(){Vl.startNonterminal(\"LibraryModule\",Pl),f(),kl(138),Nl(),l(),Vl.endNonterminal(\"LibraryModule\",Pl)}function f(){Vl.startNonterminal(\"ModuleDecl\",Pl),Sl(182),kl(61),Sl(184),kl(248),Nl(),Ia(),kl(29),Sl(60),kl(15),Sl(7),kl(28),Nl(),c(),Vl.endNonterminal(\"ModuleDecl\",Pl)}function l(){Vl.startNonterminal(\"Prolog\",Pl);for(;;){kl(274);switch(Hl){case 108:Ll(213);break;case 153:Ll(201);break;default:_l=Hl}if(_l!=42604&&_l!=43628&&_l!=50284&&_l!=53356&&_l!=54380&&_l!=55916&&_l!=72300&&_l!=93337&&_l!=94316&&_l!=104044&&_l!=113772&&_l!=115353)break;switch(Hl){case 108:Ll(178);break;default:_l=Hl}if(_l==55916){_l=Kl(0,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{_(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(0,Pl,_l)}}switch(_l){case-1:Nl(),M();break;case 94316:Nl(),O();break;case 153:Nl(),C();break;case 72300:Nl(),D();break;default:Nl(),h()}kl(28),Nl(),c()}for(;;){kl(274);switch(Hl){case 108:Ll(210);break;default:_l=Hl}if(_l!=16492&&_l!=48748&&_l!=51820&&_l!=74348&&_l!=79468&&_l!=82540&&_l!=101996&&_l!=131692&&_l!=134252)break;switch(Hl){case 108:Ll(175);break;default:_l=Hl}switch(_l){case 51820:Nl(),R();break;case 101996:Nl(),Q();break;default:Nl(),P()}kl(28),Nl(),c()}Vl.endNonterminal(\"Prolog\",Pl)}function c(){Vl.startNonterminal(\"Separator\",Pl),Sl(53),Vl.endNonterminal(\"Separator\",Pl)}function h(){Vl.startNonterminal(\"Setter\",Pl);switch(Hl){case 108:Ll(172);break;default:_l=Hl}if(_l==55916){_l=Kl(1,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{v(),_l=-2}catch(a){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),w(),_l=-6}catch(f){_l=-9}}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(1,Pl,_l)}}switch(_l){case 43628:p();break;case-2:d();break;case 42604:m();break;case 50284:g();break;case 104044:y();break;case-6:b();break;case 113772:ko();break;case 53356:E();break;default:T()}Vl.endNonterminal(\"Setter\",Pl)}function p(){Vl.startNonterminal(\"BoundarySpaceDecl\",Pl),Sl(108),kl(33),Sl(85),kl(133);switch(Hl){case 214:Sl(214);break;default:Sl(241)}Vl.endNonterminal(\"BoundarySpaceDecl\",Pl)}function d(){Vl.startNonterminal(\"DefaultCollationDecl\",Pl),Sl(108),kl(46),Sl(109),kl(38),Sl(94),kl(15),Sl(7),Vl.endNonterminal(\"DefaultCollationDecl\",Pl)}function v(){xl(108),kl(46),xl(109),kl(38),xl(94),kl(15),xl(7)}function m(){Vl.startNonterminal(\"BaseURIDecl\",Pl),Sl(108),kl(32),Sl(83),kl(15),Sl(7),Vl.endNonterminal(\"BaseURIDecl\",Pl)}function g(){Vl.startNonterminal(\"ConstructionDecl\",Pl),Sl(108),kl(41),Sl(98),kl(133);switch(Hl){case 241:Sl(241);break;default:Sl(214)}Vl.endNonterminal(\"ConstructionDecl\",Pl)}function y(){Vl.startNonterminal(\"OrderingModeDecl\",Pl),Sl(108),kl(68),Sl(203),kl(131);switch(Hl){case 202:Sl(202);break;default:Sl(256)}Vl.endNonterminal(\"OrderingModeDecl\",Pl)}function b(){Vl.startNonterminal(\"EmptyOrderDecl\",Pl),Sl(108),kl(46),Sl(109),kl(67),Sl(201),kl(49),Sl(123),kl(121);switch(Hl){case 147:Sl(147);break;default:Sl(173)}Vl.endNonterminal(\"EmptyOrderDecl\",Pl)}function w(){xl(108),kl(46),xl(109),kl(67),xl(201),kl(49),xl(123),kl(121);switch(Hl){case 147:xl(147);break;default:xl(173)}}function E(){Vl.startNonterminal(\"CopyNamespacesDecl\",Pl),Sl(108),kl(44),Sl(104),kl(128),Nl(),S(),kl(25),Sl(41),kl(123),Nl(),x(),Vl.endNonterminal(\"CopyNamespacesDecl\",Pl)}function S(){Vl.startNonterminal(\"PreserveMode\",Pl);switch(Hl){case 214:Sl(214);break;default:Sl(190)}Vl.endNonterminal(\"PreserveMode\",Pl)}function x(){Vl.startNonterminal(\"InheritMode\",Pl);switch(Hl){case 157:Sl(157);break;default:Sl(189)}Vl.endNonterminal(\"InheritMode\",Pl)}function T(){Vl.startNonterminal(\"DecimalFormatDecl\",Pl),Sl(108),kl(114);switch(Hl){case 106:Sl(106),kl(254),Nl(),Ha();break;default:Sl(109),kl(45),Sl(106)}for(;;){kl(180);if(Hl==53)break;Nl(),N(),kl(29),Sl(60),kl(17),Sl(11)}Vl.endNonterminal(\"DecimalFormatDecl\",Pl)}function N(){Vl.startNonterminal(\"DFPropertyName\",Pl);switch(Hl){case 107:Sl(107);break;case 149:Sl(149);break;case 156:Sl(156);break;case 179:Sl(179);break;case 67:Sl(67);break;case 209:Sl(209);break;case 208:Sl(208);break;case 275:Sl(275);break;case 116:Sl(116);break;default:Sl(207)}Vl.endNonterminal(\"DFPropertyName\",Pl)}function C(){Vl.startNonterminal(\"Import\",Pl);switch(Hl){case 153:Ll(126);break;default:_l=Hl}switch(_l){case 115353:k();break;default:A()}Vl.endNonterminal(\"Import\",Pl)}function k(){Vl.startNonterminal(\"SchemaImport\",Pl),Sl(153),kl(73),Sl(225),kl(137),Hl!=7&&(Nl(),L()),kl(15),Sl(7),kl(108);if(Hl==81){Sl(81),kl(15),Sl(7);for(;;){kl(103);if(Hl!=41)break;Sl(41),kl(15),Sl(7)}}Vl.endNonterminal(\"SchemaImport\",Pl)}function L(){Vl.startNonterminal(\"SchemaPrefix\",Pl);switch(Hl){case 184:Sl(184),kl(248),Nl(),Ia(),kl(29),Sl(60);break;default:Sl(109),kl(47),Sl(121),kl(61),Sl(184)}Vl.endNonterminal(\"SchemaPrefix\",Pl)}function A(){Vl.startNonterminal(\"ModuleImport\",Pl),Sl(153),kl(60),Sl(182),kl(90),Hl==184&&(Sl(184),kl(248),Nl(),Ia(),kl(29),Sl(60)),kl(15),Sl(7),kl(108);if(Hl==81){Sl(81),kl(15),Sl(7);for(;;){kl(103);if(Hl!=41)break;Sl(41),kl(15),Sl(7)}}Vl.endNonterminal(\"ModuleImport\",Pl)}function O(){Vl.startNonterminal(\"NamespaceDecl\",Pl),Sl(108),kl(61),Sl(184),kl(248),Nl(),Ia(),kl(29),Sl(60),kl(15),Sl(7),Vl.endNonterminal(\"NamespaceDecl\",Pl)}function M(){Vl.startNonterminal(\"DefaultNamespaceDecl\",Pl),Sl(108),kl(46),Sl(109),kl(115);switch(Hl){case 121:Sl(121);break;default:Sl(145)}kl(61),Sl(184),kl(15),Sl(7),Vl.endNonterminal(\"DefaultNamespaceDecl\",Pl)}function _(){xl(108),kl(46),xl(109),kl(115);switch(Hl){case 121:xl(121);break;default:xl(145)}kl(61),xl(184),kl(15),xl(7)}function D(){Vl.startNonterminal(\"FTOptionDecl\",Pl),Sl(108),kl(52),Sl(141),kl(81),Nl(),Fu(),Vl.endNonterminal(\"FTOptionDecl\",Pl)}function P(){Vl.startNonterminal(\"AnnotatedDecl\",Pl),Sl(108);for(;;){kl(170);if(Hl!=32&&Hl!=257)break;switch(Hl){case 257:Nl(),H();break;default:Nl(),B()}}switch(Hl){case 262:Nl(),F();break;case 145:Nl(),wl();break;case 95:Nl(),da();break;case 155:Nl(),xa();break;default:Nl(),Ta()}Vl.endNonterminal(\"AnnotatedDecl\",Pl)}function H(){Vl.startNonterminal(\"CompatibilityAnnotation\",Pl),Sl(257),Vl.endNonterminal(\"CompatibilityAnnotation\",Pl)}function B(){Vl.startNonterminal(\"Annotation\",Pl),Sl(32),kl(254),Nl(),Ha(),kl(171);if(Hl==34){Sl(34),kl(154),Nl(),oi();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(154),Nl(),oi()}Sl(37)}Vl.endNonterminal(\"Annotation\",Pl)}function j(){xl(32),kl(254),Ba(),kl(171);if(Hl==34){xl(34),kl(154),ui();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(154),ui()}xl(37)}}function F(){Vl.startNonterminal(\"VarDecl\",Pl),Sl(262),kl(21),Sl(31),kl(254),Nl(),hi(),kl(147),Hl==79&&(Nl(),ds()),kl(106);switch(Hl){case 52:Sl(52),kl(266),Nl(),I();break;default:Sl(133),kl(104),Hl==52&&(Sl(52),kl(266),Nl(),q())}Vl.endNonterminal(\"VarDecl\",Pl)}function I(){Vl.startNonterminal(\"VarValue\",Pl),_f(),Vl.endNonterminal(\"VarValue\",Pl)}function q(){Vl.startNonterminal(\"VarDefaultValue\",Pl),_f(),Vl.endNonterminal(\"VarDefaultValue\",Pl)}function R(){Vl.startNonterminal(\"ContextItemDecl\",Pl),Sl(108),kl(43),Sl(101),kl(55),Sl(165),kl(147),Hl==79&&(Sl(79),kl(259),Nl(),ws()),kl(106);switch(Hl){case 52:Sl(52),kl(266),Nl(),I();break;default:Sl(133),kl(104),Hl==52&&(Sl(52),kl(266),Nl(),q())}Vl.endNonterminal(\"ContextItemDecl\",Pl)}function U(){Vl.startNonterminal(\"ParamList\",Pl),W();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(21),Nl(),W()}Vl.endNonterminal(\"ParamList\",Pl)}function z(){X();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(21),X()}}function W(){Vl.startNonterminal(\"Param\",Pl),Sl(31),kl(254),Nl(),Ha(),kl(143),Hl==79&&(Nl(),ds()),Vl.endNonterminal(\"Param\",Pl)}function X(){xl(31),kl(254),Ba(),kl(143),Hl==79&&vs()}function V(){Vl.startNonterminal(\"FunctionBody\",Pl),J(),Vl.endNonterminal(\"FunctionBody\",Pl)}function $(){K()}function J(){Vl.startNonterminal(\"EnclosedExpr\",Pl),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"EnclosedExpr\",Pl)}function K(){xl(276),kl(266),Y(),xl(282)}function Q(){Vl.startNonterminal(\"OptionDecl\",Pl),Sl(108),kl(66),Sl(199),kl(254),Nl(),Ha(),kl(17),Sl(11),Vl.endNonterminal(\"OptionDecl\",Pl)}function G(){Vl.startNonterminal(\"Expr\",Pl),_f();for(;;){if(Hl!=41)break;Sl(41),kl(266),Nl(),_f()}Vl.endNonterminal(\"Expr\",Pl)}function Y(){Df();for(;;){if(Hl!=41)break;xl(41),kl(266),Df()}}function Z(){Vl.startNonterminal(\"FLWORExpr\",Pl),tt();for(;;){kl(173);if(Hl==220)break;Nl(),rt()}Nl(),rn(),Vl.endNonterminal(\"FLWORExpr\",Pl)}function et(){nt();for(;;){kl(173);if(Hl==220)break;it()}sn()}function tt(){Vl.startNonterminal(\"InitialClause\",Pl);switch(Hl){case 137:Ll(141);break;default:_l=Hl}switch(_l){case 16009:st();break;case 174:vt();break;default:bt()}Vl.endNonterminal(\"InitialClause\",Pl)}function nt(){switch(Hl){case 137:Ll(141);break;default:_l=Hl}switch(_l){case 16009:ot();break;case 174:mt();break;default:wt()}}function rt(){Vl.startNonterminal(\"IntermediateClause\",Pl);switch(Hl){case 137:case 174:tt();break;case 266:It();break;case 148:Rt();break;case 105:jt();break;default:Kt()}Vl.endNonterminal(\"IntermediateClause\",Pl)}function it(){switch(Hl){case 137:case 174:nt();break;case 266:qt();break;case 148:Ut();break;case 105:Ft();break;default:Qt()}}function st(){Vl.startNonterminal(\"ForClause\",Pl),Sl(137),kl(21),Nl(),ut();for(;;){if(Hl!=41)break;Sl(41),kl(21),Nl(),ut()}Vl.endNonterminal(\"ForClause\",Pl)}function ot(){xl(137),kl(21),at();for(;;){if(Hl!=41)break;xl(41),kl(21),at()}}function ut(){Vl.startNonterminal(\"ForBinding\",Pl),Sl(31),kl(254),Nl(),hi(),kl(164),Hl==79&&(Nl(),ds()),kl(158),Hl==72&&(Nl(),ft()),kl(150),Hl==81&&(Nl(),ct()),kl(122),Hl==228&&(Nl(),pt()),kl(53),Sl(154),kl(266),Nl(),_f(),Vl.endNonterminal(\"ForBinding\",Pl)}function at(){xl(31),kl(254),pi(),kl(164),Hl==79&&vs(),kl(158),Hl==72&&lt(),kl(150),Hl==81&&ht(),kl(122),Hl==228&&dt(),kl(53),xl(154),kl(266),Df()}function ft(){Vl.startNonterminal(\"AllowingEmpty\",Pl),Sl(72),kl(49),Sl(123),Vl.endNonterminal(\"AllowingEmpty\",Pl)}function lt(){xl(72),kl(49),xl(123)}function ct(){Vl.startNonterminal(\"PositionalVar\",Pl),Sl(81),kl(21),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"PositionalVar\",Pl)}function ht(){xl(81),kl(21),xl(31),kl(254),pi()}function pt(){Vl.startNonterminal(\"FTScoreVar\",Pl),Sl(228),kl(21),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"FTScoreVar\",Pl)}function dt(){xl(228),kl(21),xl(31),kl(254),pi()}function vt(){Vl.startNonterminal(\"LetClause\",Pl),Sl(174),kl(96),Nl(),gt();for(;;){if(Hl!=41)break;Sl(41),kl(96),Nl(),gt()}Vl.endNonterminal(\"LetClause\",Pl)}function mt(){xl(174),kl(96),yt();for(;;){if(Hl!=41)break;xl(41),kl(96),yt()}}function gt(){Vl.startNonterminal(\"LetBinding\",Pl);switch(Hl){case 31:Sl(31),kl(254),Nl(),hi(),kl(105),Hl==79&&(Nl(),ds());break;default:pt()}kl(27),Sl(52),kl(266),Nl(),_f(),Vl.endNonterminal(\"LetBinding\",Pl)}function yt(){switch(Hl){case 31:xl(31),kl(254),pi(),kl(105),Hl==79&&vs();break;default:dt()}kl(27),xl(52),kl(266),Df()}function bt(){Vl.startNonterminal(\"WindowClause\",Pl),Sl(137),kl(135);switch(Hl){case 251:Nl(),Et();break;default:Nl(),xt()}Vl.endNonterminal(\"WindowClause\",Pl)}function wt(){xl(137),kl(135);switch(Hl){case 251:St();break;default:Tt()}}function Et(){Vl.startNonterminal(\"TumblingWindowClause\",Pl),Sl(251),kl(85),Sl(269),kl(21),Sl(31),kl(254),Nl(),hi(),kl(110),Hl==79&&(Nl(),ds()),kl(53),Sl(154),kl(266),Nl(),_f(),Nl(),Nt();if(Hl==126||Hl==198)Nl(),kt();Vl.endNonterminal(\"TumblingWindowClause\",Pl)}function St(){xl(251),kl(85),xl(269),kl(21),xl(31),kl(254),pi(),kl(110),Hl==79&&vs(),kl(53),xl(154),kl(266),Df(),Ct(),(Hl==126||Hl==198)&&Lt()}function xt(){Vl.startNonterminal(\"SlidingWindowClause\",Pl),Sl(234),kl(85),Sl(269),kl(21),Sl(31),kl(254),Nl(),hi(),kl(110),Hl==79&&(Nl(),ds()),kl(53),Sl(154),kl(266),Nl(),_f(),Nl(),Nt(),Nl(),kt(),Vl.endNonterminal(\"SlidingWindowClause\",Pl)}function Tt(){xl(234),kl(85),xl(269),kl(21),xl(31),kl(254),pi(),kl(110),Hl==79&&vs(),kl(53),xl(154),kl(266),Df(),Ct(),Lt()}function Nt(){Vl.startNonterminal(\"WindowStartCondition\",Pl),Sl(237),kl(163),Nl(),At(),kl(83),Sl(265),kl(266),Nl(),_f(),Vl.endNonterminal(\"WindowStartCondition\",Pl)}function Ct(){xl(237),kl(163),Ot(),kl(83),xl(265),kl(266),Df()}function kt(){Vl.startNonterminal(\"WindowEndCondition\",Pl),Hl==198&&Sl(198),kl(50),Sl(126),kl(163),Nl(),At(),kl(83),Sl(265),kl(266),Nl(),_f(),Vl.endNonterminal(\"WindowEndCondition\",Pl)}function Lt(){Hl==198&&xl(198),kl(50),xl(126),kl(163),Ot(),kl(83),xl(265),kl(266),Df()}function At(){Vl.startNonterminal(\"WindowVars\",Pl),Hl==31&&(Sl(31),kl(254),Nl(),Mt()),kl(159),Hl==81&&(Nl(),ct()),kl(153),Hl==215&&(Sl(215),kl(21),Sl(31),kl(254),Nl(),Dt()),kl(127),Hl==187&&(Sl(187),kl(21),Sl(31),kl(254),Nl(),Ht()),Vl.endNonterminal(\"WindowVars\",Pl)}function Ot(){Hl==31&&(xl(31),kl(254),_t()),kl(159),Hl==81&&ht(),kl(153),Hl==215&&(xl(215),kl(21),xl(31),kl(254),Pt()),kl(127),Hl==187&&(xl(187),kl(21),xl(31),kl(254),Bt())}function Mt(){Vl.startNonterminal(\"CurrentItem\",Pl),Ha(),Vl.endNonterminal(\"CurrentItem\",Pl)}function _t(){Ba()}function Dt(){Vl.startNonterminal(\"PreviousItem\",Pl),Ha(),Vl.endNonterminal(\"PreviousItem\",Pl)}function Pt(){Ba()}function Ht(){Vl.startNonterminal(\"NextItem\",Pl),Ha(),Vl.endNonterminal(\"NextItem\",Pl)}function Bt(){Ba()}function jt(){Vl.startNonterminal(\"CountClause\",Pl),Sl(105),kl(21),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"CountClause\",Pl)}function Ft(){xl(105),kl(21),xl(31),kl(254),pi()}function It(){Vl.startNonterminal(\"WhereClause\",Pl),Sl(266),kl(266),Nl(),_f(),Vl.endNonterminal(\"WhereClause\",Pl)}function qt(){xl(266),kl(266),Df()}function Rt(){Vl.startNonterminal(\"GroupByClause\",Pl),Sl(148),kl(34),Sl(87),kl(266),Nl(),zt(),Vl.endNonterminal(\"GroupByClause\",Pl)}function Ut(){xl(148),kl(34),xl(87),kl(266),Wt()}function zt(){Vl.startNonterminal(\"GroupingSpecList\",Pl),Xt();for(;;){kl(176);if(Hl!=41)break;Sl(41),kl(266),Nl(),Xt()}Vl.endNonterminal(\"GroupingSpecList\",Pl)}function Wt(){Vt();for(;;){kl(176);if(Hl!=41)break;xl(41),kl(266),Vt()}}function Xt(){Vl.startNonterminal(\"GroupingSpec\",Pl);switch(Hl){case 31:Ll(254);break;default:_l=Hl}if(_l==3103||_l==35871||_l==36895||_l==37407||_l==37919||_l==38431||_l==39455||_l==39967||_l==40479||_l==40991||_l==41503||_l==42015||_l==42527||_l==43039||_l==43551||_l==44063||_l==45087||_l==45599||_l==46111||_l==46623||_l==47647||_l==48159||_l==49183||_l==49695||_l==50207||_l==51743||_l==52255||_l==52767||_l==53279||_l==53791||_l==54303||_l==55327||_l==55839||_l==56351||_l==56863||_l==57375||_l==57887||_l==60447||_l==60959||_l==61471||_l==61983||_l==62495||_l==63007||_l==63519||_l==64031||_l==64543||_l==65567||_l==66079||_l==67103||_l==67615||_l==68127||_l==68639||_l==69151||_l==69663||_l==70175||_l==72223||_l==74271||_l==74783||_l==75807||_l==76831||_l==77343||_l==77855||_l==78367||_l==78879||_l==79391||_l==81439||_l==81951||_l==82463||_l==82975||_l==83487||_l==83999||_l==84511||_l==85023||_l==85535||_l==87071||_l==87583||_l==88095||_l==89119||_l==90143||_l==91167||_l==92191||_l==92703||_l==93215||_l==94239||_l==94751||_l==95263||_l==97823||_l==98335||_l==99359||_l==101407||_l==101919||_l==102431||_l==102943||_l==103455||_l==103967||_l==105503||_l==108575||_l==109087||_l==110623||_l==111647||_l==112159||_l==112671||_l==113183||_l==113695||_l==114719||_l==115231||_l==115743||_l==116255||_l==116767||_l==117279||_l==119839||_l==120351||_l==120863||_l==121375||_l==122911||_l==123935||_l==124447||_l==124959||_l==127007||_l==127519||_l==128031||_l==128543||_l==129055||_l==129567||_l==130079||_l==131103||_l==131615||_l==133151||_l==133663||_l==134175||_l==134687||_l==136223||_l==136735||_l==138271||_l==140319){_l=Kl(2,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Jt(),kl(182);if(Hl==52||Hl==79)Hl==79&&vs(),kl(27),xl(52),kl(266),Df();Hl==94&&(xl(94),kl(15),xl(7)),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(2,Pl,_l)}}switch(_l){case-1:$t(),kl(182);if(Hl==52||Hl==79)Hl==79&&(Nl(),ds()),kl(27),Sl(52),kl(266),Nl(),_f();Hl==94&&(Sl(94),kl(15),Sl(7));break;default:_f()}Vl.endNonterminal(\"GroupingSpec\",Pl)}function Vt(){switch(Hl){case 31:Ll(254);break;default:_l=Hl}if(_l==3103||_l==35871||_l==36895||_l==37407||_l==37919||_l==38431||_l==39455||_l==39967||_l==40479||_l==40991||_l==41503||_l==42015||_l==42527||_l==43039||_l==43551||_l==44063||_l==45087||_l==45599||_l==46111||_l==46623||_l==47647||_l==48159||_l==49183||_l==49695||_l==50207||_l==51743||_l==52255||_l==52767||_l==53279||_l==53791||_l==54303||_l==55327||_l==55839||_l==56351||_l==56863||_l==57375||_l==57887||_l==60447||_l==60959||_l==61471||_l==61983||_l==62495||_l==63007||_l==63519||_l==64031||_l==64543||_l==65567||_l==66079||_l==67103||_l==67615||_l==68127||_l==68639||_l==69151||_l==69663||_l==70175||_l==72223||_l==74271||_l==74783||_l==75807||_l==76831||_l==77343||_l==77855||_l==78367||_l==78879||_l==79391||_l==81439||_l==81951||_l==82463||_l==82975||_l==83487||_l==83999||_l==84511||_l==85023||_l==85535||_l==87071||_l==87583||_l==88095||_l==89119||_l==90143||_l==91167||_l==92191||_l==92703||_l==93215||_l==94239||_l==94751||_l==95263||_l==97823||_l==98335||_l==99359||_l==101407||_l==101919||_l==102431||_l==102943||_l==103455||_l==103967||_l==105503||_l==108575||_l==109087||_l==110623||_l==111647||_l==112159||_l==112671||_l==113183||_l==113695||_l==114719||_l==115231||_l==115743||_l==116255||_l==116767||_l==117279||_l==119839||_l==120351||_l==120863||_l==121375||_l==122911||_l==123935||_l==124447||_l==124959||_l==127007||_l==127519||_l==128031||_l==128543||_l==129055||_l==129567||_l==130079||_l==131103||_l==131615||_l==133151||_l==133663||_l==134175||_l==134687||_l==136223||_l==136735||_l==138271||_l==140319){_l=Kl(2,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Jt(),kl(182);if(Hl==52||Hl==79)Hl==79&&vs(),kl(27),xl(52),kl(266),Df();Hl==94&&(xl(94),kl(15),xl(7)),Jl(2,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(2,t,-2)}}}switch(_l){case-1:Jt(),kl(182);if(Hl==52||Hl==79)Hl==79&&vs(),kl(27),xl(52),kl(266),Df();Hl==94&&(xl(94),kl(15),xl(7));break;case-3:break;default:Df()}}function $t(){Vl.startNonterminal(\"GroupingVariable\",Pl),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"GroupingVariable\",Pl)}function Jt(){xl(31),kl(254),pi()}function Kt(){Vl.startNonterminal(\"OrderByClause\",Pl);switch(Hl){case 201:Sl(201),kl(34),Sl(87);break;default:Sl(236),kl(67),Sl(201),kl(34),Sl(87)}kl(266),Nl(),Gt(),Vl.endNonterminal(\"OrderByClause\",Pl)}function Qt(){switch(Hl){case 201:xl(201),kl(34),xl(87);break;default:xl(236),kl(67),xl(201),kl(34),xl(87)}kl(266),Yt()}function Gt(){Vl.startNonterminal(\"OrderSpecList\",Pl),Zt();for(;;){kl(176);if(Hl!=41)break;Sl(41),kl(266),Nl(),Zt()}Vl.endNonterminal(\"OrderSpecList\",Pl)}function Yt(){en();for(;;){kl(176);if(Hl!=41)break;xl(41),kl(266),en()}}function Zt(){Vl.startNonterminal(\"OrderSpec\",Pl),_f(),Nl(),tn(),Vl.endNonterminal(\"OrderSpec\",Pl)}function en(){Df(),nn()}function tn(){Vl.startNonterminal(\"OrderModifier\",Pl);if(Hl==80||Hl==113)switch(Hl){case 80:Sl(80);break;default:Sl(113)}kl(179);if(Hl==123){Sl(123),kl(121);switch(Hl){case 147:Sl(147);break;default:Sl(173)}}kl(177),Hl==94&&(Sl(94),kl(15),Sl(7)),Vl.endNonterminal(\"OrderModifier\",Pl)}function nn(){if(Hl==80||Hl==113)switch(Hl){case 80:xl(80);break;default:xl(113)}kl(179);if(Hl==123){xl(123),kl(121);switch(Hl){case 147:xl(147);break;default:xl(173)}}kl(177),Hl==94&&(xl(94),kl(15),xl(7))}function rn(){Vl.startNonterminal(\"ReturnClause\",Pl),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"ReturnClause\",Pl)}function sn(){xl(220),kl(266),Df()}function on(){Vl.startNonterminal(\"QuantifiedExpr\",Pl);switch(Hl){case 235:Sl(235);break;default:Sl(129)}kl(21),Nl(),an();for(;;){if(Hl!=41)break;Sl(41),kl(21),Nl(),an()}Sl(224),kl(266),Nl(),_f(),Vl.endNonterminal(\"QuantifiedExpr\",Pl)}function un(){switch(Hl){case 235:xl(235);break;default:xl(129)}kl(21),fn();for(;;){if(Hl!=41)break;xl(41),kl(21),fn()}xl(224),kl(266),Df()}function an(){Vl.startNonterminal(\"QuantifiedVarDecl\",Pl),Sl(31),kl(254),Nl(),hi(),kl(110),Hl==79&&(Nl(),ds()),kl(53),Sl(154),kl(266),Nl(),_f(),Vl.endNonterminal(\"QuantifiedVarDecl\",Pl)}function fn(){xl(31),kl(254),pi(),kl(110),Hl==79&&vs(),kl(53),xl(154),kl(266),Df()}function ln(){Vl.startNonterminal(\"SwitchExpr\",Pl),Sl(243),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),hn();if(Hl!=88)break}Sl(109),kl(70),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"SwitchExpr\",Pl)}function cn(){xl(243),kl(22),xl(34),kl(266),Y(),xl(37);for(;;){kl(35),pn();if(Hl!=88)break}xl(109),kl(70),xl(220),kl(266),Df()}function hn(){Vl.startNonterminal(\"SwitchCaseClause\",Pl);for(;;){Sl(88),kl(266),Nl(),dn();if(Hl!=88)break}Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"SwitchCaseClause\",Pl)}function pn(){for(;;){xl(88),kl(266),vn();if(Hl!=88)break}xl(220),kl(266),Df()}function dn(){Vl.startNonterminal(\"SwitchCaseOperand\",Pl),_f(),Vl.endNonterminal(\"SwitchCaseOperand\",Pl)}function vn(){Df()}function mn(){Vl.startNonterminal(\"TypeswitchExpr\",Pl),Sl(253),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),yn();if(Hl!=88)break}Sl(109),kl(95),Hl==31&&(Sl(31),kl(254),Nl(),hi()),kl(70),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"TypeswitchExpr\",Pl)}function gn(){xl(253),kl(22),xl(34),kl(266),Y(),xl(37);for(;;){kl(35),bn();if(Hl!=88)break}xl(109),kl(95),Hl==31&&(xl(31),kl(254),pi()),kl(70),xl(220),kl(266),Df()}function yn(){Vl.startNonterminal(\"CaseClause\",Pl),Sl(88),kl(261),Hl==31&&(Sl(31),kl(254),Nl(),hi(),kl(30),Sl(79)),kl(259),Nl(),wn(),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"CaseClause\",Pl)}function bn(){xl(88),kl(261),Hl==31&&(xl(31),kl(254),pi(),kl(30),xl(79)),kl(259),En(),xl(220),kl(266),Df()}function wn(){Vl.startNonterminal(\"SequenceTypeUnion\",Pl),ms();for(;;){kl(134);if(Hl!=279)break;Sl(279),kl(259),Nl(),ms()}Vl.endNonterminal(\"SequenceTypeUnion\",Pl)}function En(){gs();for(;;){kl(134);if(Hl!=279)break;xl(279),kl(259),gs()}}function Sn(){Vl.startNonterminal(\"IfExpr\",Pl),Sl(152),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37),kl(77),Sl(245),kl(266),Nl(),_f(),Sl(122),kl(266),Nl(),_f(),Vl.endNonterminal(\"IfExpr\",Pl)}function xn(){xl(152),kl(22),xl(34),kl(266),Y(),xl(37),kl(77),xl(245),kl(266),Df(),xl(122),kl(266),Df()}function Tn(){Vl.startNonterminal(\"TryCatchExpr\",Pl),Cn();for(;;){kl(36),Nl(),On(),kl(183);if(Hl!=91)break}Vl.endNonterminal(\"TryCatchExpr\",Pl)}function Nn(){kn();for(;;){kl(36),Mn(),kl(183);if(Hl!=91)break}}function Cn(){Vl.startNonterminal(\"TryClause\",Pl),Sl(250),kl(87),Sl(276),kl(266),Nl(),Ln(),Sl(282),Vl.endNonterminal(\"TryClause\",Pl)}function kn(){xl(250),kl(87),xl(276),kl(266),An(),xl(282)}function Ln(){Vl.startNonterminal(\"TryTargetExpr\",Pl),G(),Vl.endNonterminal(\"TryTargetExpr\",Pl)}function An(){Y()}function On(){Vl.startNonterminal(\"CatchClause\",Pl),Sl(91),kl(256),Nl(),_n(),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"CatchClause\",Pl)}function Mn(){xl(91),kl(256),Dn(),xl(276),kl(266),Y(),xl(282)}function _n(){Vl.startNonterminal(\"CatchErrorList\",Pl),Qr();for(;;){kl(136);if(Hl!=279)break;Sl(279),kl(256),Nl(),Qr()}Vl.endNonterminal(\"CatchErrorList\",Pl)}function Dn(){Gr();for(;;){kl(136);if(Hl!=279)break;xl(279),kl(256),Gr()}}function Pn(){Vl.startNonterminal(\"OrExpr\",Pl),Bn();for(;;){if(Hl!=200)break;Sl(200),kl(266),Nl(),Bn()}Vl.endNonterminal(\"OrExpr\",Pl)}function Hn(){jn();for(;;){if(Hl!=200)break;xl(200),kl(266),jn()}}function Bn(){Vl.startNonterminal(\"AndExpr\",Pl),Fn();for(;;){if(Hl!=75)break;Sl(75),kl(266),Nl(),Fn()}Vl.endNonterminal(\"AndExpr\",Pl)}function jn(){In();for(;;){if(Hl!=75)break;xl(75),kl(266),In()}}function Fn(){Vl.startNonterminal(\"ComparisonExpr\",Pl),qn();if(Hl==27||Hl==54||Hl==57||Hl==58||Hl==60||Hl==61||Hl==62||Hl==63||Hl==128||Hl==146||Hl==150||Hl==164||Hl==172||Hl==178||Hl==186){switch(Hl){case 128:case 146:case 150:case 172:case 178:case 186:Nl(),mr();break;case 57:case 63:case 164:Nl(),yr();break;default:Nl(),dr()}kl(266),Nl(),qn()}Vl.endNonterminal(\"ComparisonExpr\",Pl)}function In(){Rn();if(Hl==27||Hl==54||Hl==57||Hl==58||Hl==60||Hl==61||Hl==62||Hl==63||Hl==128||Hl==146||Hl==150||Hl==164||Hl==172||Hl==178||Hl==186){switch(Hl){case 128:case 146:case 150:case 172:case 178:case 186:gr();break;case 57:case 63:case 164:br();break;default:vr()}kl(266),Rn()}}function qn(){Vl.startNonterminal(\"FTContainsExpr\",Pl),Un(),Hl==99&&(Sl(99),kl(76),Sl(244),kl(162),Nl(),Jo(),Hl==271&&(Nl(),ha())),Vl.endNonterminal(\"FTContainsExpr\",Pl)}function Rn(){zn(),Hl==99&&(xl(99),kl(76),xl(244),kl(162),Ko(),Hl==271&&pa())}function Un(){Vl.startNonterminal(\"StringConcatExpr\",Pl),Wn();for(;;){if(Hl!=280)break;Sl(280),kl(266),Nl(),Wn()}Vl.endNonterminal(\"StringConcatExpr\",Pl)}function zn(){Xn();for(;;){if(Hl!=280)break;xl(280),kl(266),Xn()}}function Wn(){Vl.startNonterminal(\"RangeExpr\",Pl),Vn(),Hl==248&&(Sl(248),kl(266),Nl(),Vn()),Vl.endNonterminal(\"RangeExpr\",Pl)}function Xn(){$n(),Hl==248&&(xl(248),kl(266),$n())}function Vn(){Vl.startNonterminal(\"AdditiveExpr\",Pl),Jn();for(;;){if(Hl!=40&&Hl!=42)break;switch(Hl){case 40:Sl(40);break;default:Sl(42)}kl(266),Nl(),Jn()}Vl.endNonterminal(\"AdditiveExpr\",Pl)}function $n(){Kn();for(;;){if(Hl!=40&&Hl!=42)break;switch(Hl){case 40:xl(40);break;default:xl(42)}kl(266),Kn()}}function Jn(){Vl.startNonterminal(\"MultiplicativeExpr\",Pl),Qn();for(;;){if(Hl!=38&&Hl!=118&&Hl!=151&&Hl!=180)break;switch(Hl){case 38:Sl(38);break;case 118:Sl(118);break;case 151:Sl(151);break;default:Sl(180)}kl(266),Nl(),Qn()}Vl.endNonterminal(\"MultiplicativeExpr\",Pl)}function Kn(){Gn();for(;;){if(Hl!=38&&Hl!=118&&Hl!=151&&Hl!=180)break;switch(Hl){case 38:xl(38);break;case 118:xl(118);break;case 151:xl(151);break;default:xl(180)}kl(266),Gn()}}function Qn(){Vl.startNonterminal(\"UnionExpr\",Pl),Yn();for(;;){if(Hl!=254&&Hl!=279)break;switch(Hl){case 254:Sl(254);break;default:Sl(279)}kl(266),Nl(),Yn()}Vl.endNonterminal(\"UnionExpr\",Pl)}function Gn(){Zn();for(;;){if(Hl!=254&&Hl!=279)break;switch(Hl){case 254:xl(254);break;default:xl(279)}kl(266),Zn()}}function Yn(){Vl.startNonterminal(\"IntersectExceptExpr\",Pl),er();for(;;){kl(222);if(Hl!=131&&Hl!=162)break;switch(Hl){case 162:Sl(162);break;default:Sl(131)}kl(266),Nl(),er()}Vl.endNonterminal(\"IntersectExceptExpr\",Pl)}function Zn(){tr();for(;;){kl(222);if(Hl!=131&&Hl!=162)break;switch(Hl){case 162:xl(162);break;default:xl(131)}kl(266),tr()}}function er(){Vl.startNonterminal(\"InstanceofExpr\",Pl),nr(),kl(223),Hl==160&&(Sl(160),kl(64),Sl(196),kl(259),Nl(),ms()),Vl.endNonterminal(\"InstanceofExpr\",Pl)}function tr(){rr(),kl(223),Hl==160&&(xl(160),kl(64),xl(196),kl(259),gs())}function nr(){Vl.startNonterminal(\"TreatExpr\",Pl),ir(),kl(224),Hl==249&&(Sl(249),kl(30),Sl(79),kl(259),Nl(),ms()),Vl.endNonterminal(\"TreatExpr\",Pl)}function rr(){sr(),kl(224),Hl==249&&(xl(249),kl(30),xl(79),kl(259),gs())}function ir(){Vl.startNonterminal(\"CastableExpr\",Pl),or(),kl(225),Hl==90&&(Sl(90),kl(30),Sl(79),kl(254),Nl(),hs()),Vl.endNonterminal(\"CastableExpr\",Pl)}function sr(){ur(),kl(225),Hl==90&&(xl(90),kl(30),xl(79),kl(254),ps())}function or(){Vl.startNonterminal(\"CastExpr\",Pl),ar(),kl(227),Hl==89&&(Sl(89),kl(30),Sl(79),kl(254),Nl(),hs()),Vl.endNonterminal(\"CastExpr\",Pl)}function ur(){fr(),kl(227),Hl==89&&(xl(89),kl(30),xl(79),kl(254),ps())}function ar(){Vl.startNonterminal(\"UnaryExpr\",Pl);for(;;){kl(266);if(Hl!=40&&Hl!=42)break;switch(Hl){case 42:Sl(42);break;default:Sl(40)}}Nl(),lr(),Vl.endNonterminal(\"UnaryExpr\",Pl)}function fr(){for(;;){kl(266);if(Hl!=40&&Hl!=42)break;switch(Hl){case 42:xl(42);break;default:xl(40)}}cr()}function lr(){Vl.startNonterminal(\"ValueExpr\",Pl);switch(Hl){case 260:Ll(247);break;default:_l=Hl}switch(_l){case 87812:case 123140:case 129284:case 141572:wr();break;case 35:Tr();break;default:hr()}Vl.endNonterminal(\"ValueExpr\",Pl)}function cr(){switch(Hl){case 260:Ll(247);break;default:_l=Hl}switch(_l){case 87812:case 123140:case 129284:case 141572:Er();break;case 35:Nr();break;default:pr()}}function hr(){Vl.startNonterminal(\"SimpleMapExpr\",Pl),Lr();for(;;){if(Hl!=26)break;Sl(26),kl(265),Nl(),Lr()}Vl.endNonterminal(\"SimpleMapExpr\",Pl)}function pr(){Ar();for(;;){if(Hl!=26)break;xl(26),kl(265),Ar()}}function dr(){Vl.startNonterminal(\"GeneralComp\",Pl);switch(Hl){case 60:Sl(60);break;case 27:Sl(27);break;case 54:Sl(54);break;case 58:Sl(58);break;case 61:Sl(61);break;default:Sl(62)}Vl.endNonterminal(\"GeneralComp\",Pl)}function vr(){switch(Hl){case 60:xl(60);break;case 27:xl(27);break;case 54:xl(54);break;case 58:xl(58);break;case 61:xl(61);break;default:xl(62)}}function mr(){Vl.startNonterminal(\"ValueComp\",Pl);switch(Hl){case 128:Sl(128);break;case 186:Sl(186);break;case 178:Sl(178);break;case 172:Sl(172);break;case 150:Sl(150);break;default:Sl(146)}Vl.endNonterminal(\"ValueComp\",Pl)}function gr(){switch(Hl){case 128:xl(128);break;case 186:xl(186);break;case 178:xl(178);break;case 172:xl(172);break;case 150:xl(150);break;default:xl(146)}}function yr(){Vl.startNonterminal(\"NodeComp\",Pl);switch(Hl){case 164:Sl(164);break;case 57:Sl(57);break;default:Sl(63)}Vl.endNonterminal(\"NodeComp\",Pl)}function br(){switch(Hl){case 164:xl(164);break;case 57:xl(57);break;default:xl(63)}}function wr(){Vl.startNonterminal(\"ValidateExpr\",Pl),Sl(260),kl(160);if(Hl!=276)switch(Hl){case 252:Sl(252),kl(254),Nl(),go();break;default:Nl(),Sr()}kl(87),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"ValidateExpr\",Pl)}function Er(){xl(260),kl(160);if(Hl!=276)switch(Hl){case 252:xl(252),kl(254),yo();break;default:xr()}kl(87),xl(276),kl(266),Y(),xl(282)}function Sr(){Vl.startNonterminal(\"ValidationMode\",Pl);switch(Hl){case 171:Sl(171);break;default:Sl(240)}Vl.endNonterminal(\"ValidationMode\",Pl)}function xr(){switch(Hl){case 171:xl(171);break;default:xl(240)}}function Tr(){Vl.startNonterminal(\"ExtensionExpr\",Pl);for(;;){Nl(),Cr(),kl(100);if(Hl!=35)break}Sl(276),kl(273),Hl!=282&&(Nl(),G()),Sl(282),Vl.endNonterminal(\"ExtensionExpr\",Pl)}function Nr(){for(;;){kr(),kl(100);if(Hl!=35)break}xl(276),kl(273),Hl!=282&&Y(),xl(282)}function Cr(){Vl.startNonterminal(\"Pragma\",Pl),Sl(35),Al(251),Hl==21&&Sl(21),Ha(),Al(10),Hl==21&&(Sl(21),Al(0),Sl(1)),Al(5),Sl(30),Vl.endNonterminal(\"Pragma\",Pl)}function kr(){xl(35),Al(251),Hl==21&&xl(21),Ba(),Al(10),Hl==21&&(xl(21),Al(0),xl(1)),Al(5),xl(30)}function Lr(){Vl.startNonterminal(\"PathExpr\",Pl);switch(Hl){case 46:Sl(46),kl(285);switch(Hl){case 25:case 26:case 27:case 37:case 38:case 40:case 41:case 42:case 49:case 53:case 57:case 58:case 60:case 61:case 62:case 63:case 69:case 87:case 99:case 205:case 232:case 247:case 273:case 279:case 280:case 281:case 282:break;default:Nl(),Or()}break;case 47:Sl(47),kl(264),Nl(),Or();break;default:Or()}Vl.endNonterminal(\"PathExpr\",Pl)}function Ar(){switch(Hl){case 46:xl(46),kl(285);switch(Hl){case 25:case 26:case 27:case 37:case 38:case 40:case 41:case 42:case 49:case 53:case 57:case 58:case 60:case 61:case 62:case 63:case 69:case 87:case 99:case 205:case 232:case 247:case 273:case 279:case 280:case 281:case 282:break;default:Mr()}break;case 47:xl(47),kl(264),Mr();break;default:Mr()}}function Or(){Vl.startNonterminal(\"RelativePathExpr\",Pl),_r();for(;;){switch(Hl){case 26:Ll(265);break;default:_l=Hl}if(_l!=25&&_l!=27&&_l!=37&&_l!=38&&_l!=40&&_l!=41&&_l!=42&&_l!=46&&_l!=47&&_l!=49&&_l!=53&&_l!=54&&_l!=57&&_l!=58&&_l!=60&&_l!=61&&_l!=62&&_l!=63&&_l!=69&&_l!=70&&_l!=75&&_l!=79&&_l!=80&&_l!=81&&_l!=84&&_l!=87&&_l!=88&&_l!=89&&_l!=90&&_l!=94&&_l!=99&&_l!=105&&_l!=109&&_l!=113&&_l!=118&&_l!=122&&_l!=123&&_l!=126&&_l!=128&&_l!=131&&_l!=137&&_l!=146&&_l!=148&&_l!=150&&_l!=151&&_l!=160&&_l!=162&&_l!=163&&_l!=164&&_l!=172&&_l!=174&&_l!=178&&_l!=180&&_l!=181&&_l!=186&&_l!=198&&_l!=200&&_l!=201&&_l!=205&&_l!=220&&_l!=224&&_l!=232&&_l!=236&&_l!=237&&_l!=247&&_l!=248&&_l!=249&&_l!=254&&_l!=266&&_l!=270&&_l!=273&&_l!=279&&_l!=280&&_l!=281&&_l!=282&&_l!=23578&&_l!=24090){_l=Kl(3,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{switch(Hl){case 46:xl(46);break;case 47:xl(47);break;default:xl(26)}kl(264),Dr(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(3,Pl,_l)}}if(_l!=-1&&_l!=46&&_l!=47)break;switch(Hl){case 46:Sl(46);break;case 47:Sl(47);break;default:Sl(26)}kl(264),Nl(),_r()}Vl.endNonterminal(\"RelativePathExpr\",Pl)}function Mr(){Dr();for(;;){switch(Hl){case 26:Ll(265);break;default:_l=Hl}if(_l!=25&&_l!=27&&_l!=37&&_l!=38&&_l!=40&&_l!=41&&_l!=42&&_l!=46&&_l!=47&&_l!=49&&_l!=53&&_l!=54&&_l!=57&&_l!=58&&_l!=60&&_l!=61&&_l!=62&&_l!=63&&_l!=69&&_l!=70&&_l!=75&&_l!=79&&_l!=80&&_l!=81&&_l!=84&&_l!=87&&_l!=88&&_l!=89&&_l!=90&&_l!=94&&_l!=99&&_l!=105&&_l!=109&&_l!=113&&_l!=118&&_l!=122&&_l!=123&&_l!=126&&_l!=128&&_l!=131&&_l!=137&&_l!=146&&_l!=148&&_l!=150&&_l!=151&&_l!=160&&_l!=162&&_l!=163&&_l!=164&&_l!=172&&_l!=174&&_l!=178&&_l!=180&&_l!=181&&_l!=186&&_l!=198&&_l!=200&&_l!=201&&_l!=205&&_l!=220&&_l!=224&&_l!=232&&_l!=236&&_l!=237&&_l!=247&&_l!=248&&_l!=249&&_l!=254&&_l!=266&&_l!=270&&_l!=273&&_l!=279&&_l!=280&&_l!=281&&_l!=282&&_l!=23578&&_l!=24090){_l=Kl(3,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{switch(Hl){case 46:xl(46);break;case 47:xl(47);break;default:xl(26)}kl(264),Dr(),Jl(3,t,-1);continue}catch(a){Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(3,t,-2);break}}}if(_l!=-1&&_l!=46&&_l!=47)break;switch(Hl){case 46:xl(46);break;case 47:xl(47);break;default:xl(26)}kl(264),Dr()}}function _r(){Vl.startNonterminal(\"StepExpr\",Pl);switch(Hl){case 82:Ll(284);break;case 121:Ll(282);break;case 184:case 216:Ll(281);break;case 96:case 119:case 202:case 244:case 256:Ll(246);break;case 78:case 124:case 152:case 165:case 167:case 242:case 243:case 253:Ll(239);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(245);break;case 6:case 70:case 72:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 137:case 141:case 145:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(243);break;default:_l=Hl}if(_l==35922||_l==35961||_l==36024||_l==36056||_l==38482||_l==38521||_l==38584||_l==38616||_l==40530||_l==40569||_l==40632||_l==40664||_l==41042||_l==41081||_l==41144||_l==41176||_l==41554||_l==41593||_l==41656||_l==41688||_l==43090||_l==43129||_l==43192||_l==43224||_l==45138||_l==45177||_l==45240||_l==45272||_l==45650||_l==45689||_l==45752||_l==45784||_l==46162||_l==46201||_l==46264||_l==46296||_l==48210||_l==48249||_l==48312||_l==48344||_l==53842||_l==53881||_l==53944||_l==53976||_l==55890||_l==55929||_l==55992||_l==56024||_l==57938||_l==57977||_l==58040||_l==58072||_l==60498||_l==60537||_l==60600||_l==60632||_l==62546||_l==62585||_l==62648||_l==62680||_l==63058||_l==63097||_l==63160||_l==63192||_l==64594||_l==64633||_l==64696||_l==64728||_l==65618||_l==65657||_l==65720||_l==65752||_l==67154||_l==67193||_l==67256||_l==67288||_l==70226||_l==70265||_l==70328||_l==70360||_l==74834||_l==74873||_l==74936||_l==74968||_l==75858||_l==75897||_l==75960||_l==75992||_l==76882||_l==76921||_l==76984||_l==77016||_l==77394||_l==77433||_l==77496||_l==77528||_l==82002||_l==82041||_l==82104||_l==82136||_l==83026||_l==83065||_l==83128||_l==83160||_l==83538||_l==83577||_l==83640||_l==83672||_l==84050||_l==84089||_l==84152||_l==84184||_l==88146||_l==88185||_l==88248||_l==88280||_l==89170||_l==89209||_l==89272||_l==89304||_l==91218||_l==91257||_l==91320||_l==91352||_l==92242||_l==92281||_l==92344||_l==92376||_l==92754||_l==92793||_l==92856||_l==92888||_l==95314||_l==95353||_l==95416||_l==95448||_l==101458||_l==101497||_l==101560||_l==101592||_l==102482||_l==102521||_l==102584||_l==102616||_l==102994||_l==103033||_l==103096||_l==103128||_l==112722||_l==112761||_l==112824||_l==112856||_l==114770||_l==114809||_l==114872||_l==114904||_l==120914||_l==120953||_l==121016||_l==121048||_l==121426||_l==121465||_l==121528||_l==121560||_l==127058||_l==127097||_l==127160||_l==127192||_l==127570||_l==127609||_l==127672||_l==127704||_l==130130||_l==130169||_l==130232||_l==130264||_l==136274||_l==136313||_l==136376||_l==136408||_l==138322||_l==138361||_l==138424||_l==138456){_l=Kl(4,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Zr(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(4,Pl,_l)}}switch(_l){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 34:case 44:case 54:case 55:case 59:case 68:case 276:case 278:case 3154:case 3193:case 9912:case 9944:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14993:case 14994:case 14996:case 14998:case 14999:case 15e3:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15033:case 15034:case 15039:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15074:case 15075:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15090:case 15091:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15101:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17553:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:case 36946:case 36985:case 37048:case 37080:case 37458:case 37497:case 37560:case 37592:case 37970:case 38009:case 38072:case 38104:case 39506:case 39545:case 39608:case 39640:case 40018:case 40057:case 42066:case 42105:case 42168:case 42200:case 42578:case 42617:case 42680:case 42712:case 43602:case 43641:case 43704:case 43736:case 44114:case 44153:case 44216:case 44248:case 46674:case 46713:case 46776:case 46808:case 47698:case 47737:case 47800:case 47832:case 49234:case 49273:case 49336:case 49368:case 49746:case 49785:case 49848:case 49880:case 50258:case 50297:case 50360:case 50392:case 51794:case 51833:case 51896:case 51928:case 52306:case 52345:case 52408:case 52440:case 52818:case 52857:case 52920:case 52952:case 53330:case 53369:case 53432:case 53464:case 54354:case 54393:case 54456:case 54488:case 55378:case 55417:case 55480:case 55512:case 56402:case 56441:case 56504:case 56536:case 56914:case 56953:case 57016:case 57048:case 57426:case 57465:case 57528:case 57560:case 61010:case 61049:case 61112:case 61144:case 61522:case 61561:case 61624:case 61656:case 62034:case 62073:case 62136:case 62168:case 63570:case 63609:case 63672:case 63704:case 64082:case 64121:case 64184:case 64216:case 66130:case 66169:case 66232:case 66264:case 67666:case 67705:case 67768:case 67800:case 68178:case 68217:case 68280:case 68312:case 68690:case 68729:case 68792:case 68824:case 69202:case 69241:case 69304:case 69336:case 69714:case 69753:case 69816:case 69848:case 72274:case 72313:case 72376:case 72408:case 74322:case 74361:case 74424:case 74456:case 77906:case 77945:case 78008:case 78040:case 78418:case 78457:case 78520:case 78552:case 78930:case 78969:case 79032:case 79064:case 79442:case 79481:case 79544:case 79576:case 81490:case 81529:case 81592:case 81624:case 82514:case 82553:case 82616:case 82648:case 84562:case 84601:case 84664:case 84696:case 85074:case 85113:case 85176:case 85208:case 85586:case 85625:case 87122:case 87161:case 87224:case 87256:case 87634:case 87673:case 87736:case 87768:case 90194:case 90233:case 90296:case 90328:case 93266:case 93305:case 93368:case 93400:case 94290:case 94329:case 94392:case 94424:case 94802:case 94841:case 94904:case 94936:case 97874:case 97913:case 97976:case 98008:case 98386:case 98425:case 98488:case 98520:case 99410:case 99449:case 99512:case 99544:case 101970:case 102009:case 102072:case 102104:case 103506:case 103545:case 103608:case 103640:case 104018:case 104057:case 104120:case 104152:case 105554:case 105593:case 105656:case 105688:case 108626:case 108665:case 108728:case 108760:case 109138:case 109177:case 109240:case 109272:case 110674:case 110713:case 110776:case 110808:case 111698:case 111737:case 111800:case 111832:case 112210:case 112249:case 112312:case 112344:case 113234:case 113273:case 113336:case 113368:case 113746:case 113785:case 113848:case 113880:case 115282:case 115321:case 115384:case 115416:case 115794:case 115833:case 115896:case 115928:case 116306:case 116345:case 116408:case 116440:case 116818:case 116857:case 116920:case 116952:case 117330:case 117369:case 117432:case 117464:case 119890:case 119929:case 119992:case 120024:case 120402:case 120441:case 120504:case 120536:case 122962:case 123001:case 123064:case 123096:case 123986:case 124025:case 124498:case 124537:case 124600:case 124632:case 125010:case 125049:case 125112:case 125144:case 128082:case 128121:case 128184:case 128216:case 128594:case 128633:case 128696:case 128728:case 129106:case 129145:case 129208:case 129240:case 129618:case 129657:case 129720:case 129752:case 131154:case 131193:case 131256:case 131288:case 131666:case 131705:case 131768:case 131800:case 133202:case 133241:case 133304:case 133336:case 133714:case 133753:case 133816:case 133848:case 134226:case 134265:case 134328:case 134360:case 134738:case 134777:case 134840:case 134872:case 136786:case 136825:case 136888:case 136920:case 140370:case 140409:case 140472:case 140504:case 141394:case 141408:case 141431:case 141433:case 141496:case 141514:case 141528:case 141556:case 141568:Yr();break;default:Pr()}Vl.endNonterminal(\"StepExpr\",Pl)}function Dr(){switch(Hl){case 82:Ll(284);break;case 121:Ll(282);break;case 184:case 216:Ll(281);break;case 96:case 119:case 202:case 244:case 256:Ll(246);break;case 78:case 124:case 152:case 165:case 167:case 242:case 243:case 253:Ll(239);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(245);break;case 6:case 70:case 72:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 137:case 141:case 145:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(243);break;default:_l=Hl}if(_l==35922||_l==35961||_l==36024||_l==36056||_l==38482||_l==38521||_l==38584||_l==38616||_l==40530||_l==40569||_l==40632||_l==40664||_l==41042||_l==41081||_l==41144||_l==41176||_l==41554||_l==41593||_l==41656||_l==41688||_l==43090||_l==43129||_l==43192||_l==43224||_l==45138||_l==45177||_l==45240||_l==45272||_l==45650||_l==45689||_l==45752||_l==45784||_l==46162||_l==46201||_l==46264||_l==46296||_l==48210||_l==48249||_l==48312||_l==48344||_l==53842||_l==53881||_l==53944||_l==53976||_l==55890||_l==55929||_l==55992||_l==56024||_l==57938||_l==57977||_l==58040||_l==58072||_l==60498||_l==60537||_l==60600||_l==60632||_l==62546||_l==62585||_l==62648||_l==62680||_l==63058||_l==63097||_l==63160||_l==63192||_l==64594||_l==64633||_l==64696||_l==64728||_l==65618||_l==65657||_l==65720||_l==65752||_l==67154||_l==67193||_l==67256||_l==67288||_l==70226||_l==70265||_l==70328||_l==70360||_l==74834||_l==74873||_l==74936||_l==74968||_l==75858||_l==75897||_l==75960||_l==75992||_l==76882||_l==76921||_l==76984||_l==77016||_l==77394||_l==77433||_l==77496||_l==77528||_l==82002||_l==82041||_l==82104||_l==82136||_l==83026||_l==83065||_l==83128||_l==83160||_l==83538||_l==83577||_l==83640||_l==83672||_l==84050||_l==84089||_l==84152||_l==84184||_l==88146||_l==88185||_l==88248||_l==88280||_l==89170||_l==89209||_l==89272||_l==89304||_l==91218||_l==91257||_l==91320||_l==91352||_l==92242||_l==92281||_l==92344||_l==92376||_l==92754||_l==92793||_l==92856||_l==92888||_l==95314||_l==95353||_l==95416||_l==95448||_l==101458||_l==101497||_l==101560||_l==101592||_l==102482||_l==102521||_l==102584||_l==102616||_l==102994||_l==103033||_l==103096||_l==103128||_l==112722||_l==112761||_l==112824||_l==112856||_l==114770||_l==114809||_l==114872||_l==114904||_l==120914||_l==120953||_l==121016||_l==121048||_l==121426||_l==121465||_l==121528||_l==121560||_l==127058||_l==127097||_l==127160||_l==127192||_l==127570||_l==127609||_l==127672||_l==127704||_l==130130||_l==130169||_l==130232||_l==130264||_l==136274||_l==136313||_l==136376||_l==136408||_l==138322||_l==138361||_l==138424||_l==138456){_l=Kl(4,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Zr(),Jl(4,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(4,t,-2)}}}switch(_l){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 34:case 44:case 54:case 55:case 59:case 68:case 276:case 278:case 3154:case 3193:case 9912:case 9944:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14993:case 14994:case 14996:case 14998:case 14999:case 15e3:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15033:case 15034:case 15039:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15074:case 15075:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15090:case 15091:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15101:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17553:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:case 36946:case 36985:case 37048:case 37080:case 37458:case 37497:case 37560:case 37592:case 37970:case 38009:case 38072:case 38104:case 39506:case 39545:case 39608:case 39640:case 40018:case 40057:case 42066:case 42105:case 42168:case 42200:case 42578:case 42617:case 42680:case 42712:case 43602:case 43641:case 43704:case 43736:case 44114:case 44153:case 44216:case 44248:case 46674:case 46713:case 46776:case 46808:case 47698:case 47737:case 47800:case 47832:case 49234:case 49273:case 49336:case 49368:case 49746:case 49785:case 49848:case 49880:case 50258:case 50297:case 50360:case 50392:case 51794:case 51833:case 51896:case 51928:case 52306:case 52345:case 52408:case 52440:case 52818:case 52857:case 52920:case 52952:case 53330:case 53369:case 53432:case 53464:case 54354:case 54393:case 54456:case 54488:case 55378:case 55417:case 55480:case 55512:case 56402:case 56441:case 56504:case 56536:case 56914:case 56953:case 57016:case 57048:case 57426:case 57465:case 57528:case 57560:case 61010:case 61049:case 61112:case 61144:case 61522:case 61561:case 61624:case 61656:case 62034:case 62073:case 62136:case 62168:case 63570:case 63609:case 63672:case 63704:case 64082:case 64121:case 64184:case 64216:case 66130:case 66169:case 66232:case 66264:case 67666:case 67705:case 67768:case 67800:case 68178:case 68217:case 68280:case 68312:case 68690:case 68729:case 68792:case 68824:case 69202:case 69241:case 69304:case 69336:case 69714:case 69753:case 69816:case 69848:case 72274:case 72313:case 72376:case 72408:case 74322:case 74361:case 74424:case 74456:case 77906:case 77945:case 78008:case 78040:case 78418:case 78457:case 78520:case 78552:case 78930:case 78969:case 79032:case 79064:case 79442:case 79481:case 79544:case 79576:case 81490:case 81529:case 81592:case 81624:case 82514:case 82553:case 82616:case 82648:case 84562:case 84601:case 84664:case 84696:case 85074:case 85113:case 85176:case 85208:case 85586:case 85625:case 87122:case 87161:case 87224:case 87256:case 87634:case 87673:case 87736:case 87768:case 90194:case 90233:case 90296:case 90328:case 93266:case 93305:case 93368:case 93400:case 94290:case 94329:case 94392:case 94424:case 94802:case 94841:case 94904:case 94936:case 97874:case 97913:case 97976:case 98008:case 98386:case 98425:case 98488:case 98520:case 99410:case 99449:case 99512:case 99544:case 101970:case 102009:case 102072:case 102104:case 103506:case 103545:case 103608:case 103640:case 104018:case 104057:case 104120:case 104152:case 105554:case 105593:case 105656:case 105688:case 108626:case 108665:case 108728:case 108760:case 109138:case 109177:case 109240:case 109272:case 110674:case 110713:case 110776:case 110808:case 111698:case 111737:case 111800:case 111832:case 112210:case 112249:case 112312:case 112344:case 113234:case 113273:case 113336:case 113368:case 113746:case 113785:case 113848:case 113880:case 115282:case 115321:case 115384:case 115416:case 115794:case 115833:case 115896:case 115928:case 116306:case 116345:case 116408:case 116440:case 116818:case 116857:case 116920:case 116952:case 117330:case 117369:case 117432:case 117464:case 119890:case 119929:case 119992:case 120024:case 120402:case 120441:case 120504:case 120536:case 122962:case 123001:case 123064:case 123096:case 123986:case 124025:case 124498:case 124537:case 124600:case 124632:case 125010:case 125049:case 125112:case 125144:case 128082:case 128121:case 128184:case 128216:case 128594:case 128633:case 128696:case 128728:case 129106:case 129145:case 129208:case 129240:case 129618:case 129657:case 129720:case 129752:case 131154:case 131193:case 131256:case 131288:case 131666:case 131705:case 131768:case 131800:case 133202:case 133241:case 133304:case 133336:case 133714:case 133753:case 133816:case 133848:case 134226:case 134265:case 134328:case 134360:case 134738:case 134777:case 134840:case 134872:case 136786:case 136825:case 136888:case 136920:case 140370:case 140409:case 140472:case 140504:case 141394:case 141408:case 141431:case 141433:case 141496:case 141514:case 141528:case 141556:case 141568:Zr();break;case-3:break;default:Hr()}}function Pr(){Vl.startNonterminal(\"AxisStep\",Pl);switch(Hl){case 73:case 74:case 206:case 212:case 213:Ll(241);break;default:_l=Hl}switch(_l){case 45:case 26185:case 26186:case 26318:case 26324:case 26325:Ur();break;default:Br()}kl(237),Nl(),ni(),Vl.endNonterminal(\"AxisStep\",Pl)}function Hr(){switch(Hl){case 73:case 74:case 206:case 212:case 213:Ll(241);break;default:_l=Hl}switch(_l){case 45:case 26185:case 26186:case 26318:case 26324:case 26325:zr();break;default:jr()}kl(237),ri()}function Br(){Vl.startNonterminal(\"ForwardStep\",Pl);switch(Hl){case 82:Ll(244);break;case 93:case 111:case 112:case 135:case 136:case 229:Ll(241);break;default:_l=Hl}switch(_l){case 26194:case 26205:case 26223:case 26224:case 26247:case 26248:case 26341:Fr(),kl(256),Nl(),Jr();break;default:qr()}Vl.endNonterminal(\"ForwardStep\",Pl)}function jr(){switch(Hl){case 82:Ll(244);break;case 93:case 111:case 112:case 135:case 136:case 229:Ll(241);break;default:_l=Hl}switch(_l){case 26194:case 26205:case 26223:case 26224:case 26247:case 26248:case 26341:Ir(),kl(256),Kr();break;default:Rr()}}function Fr(){Vl.startNonterminal(\"ForwardAxis\",Pl);switch(Hl){case 93:Sl(93),kl(26),Sl(51);break;case 111:Sl(111),kl(26),Sl(51);break;case 82:Sl(82),kl(26),Sl(51);break;case 229:Sl(229),kl(26),Sl(51);break;case 112:Sl(112),kl(26),Sl(51);break;case 136:Sl(136),kl(26),Sl(51);break;default:Sl(135),kl(26),Sl(51)}Vl.endNonterminal(\"ForwardAxis\",Pl)}function Ir(){switch(Hl){case 93:xl(93),kl(26),xl(51);break;case 111:xl(111),kl(26),xl(51);break;case 82:xl(82),kl(26),xl(51);break;case 229:xl(229),kl(26),xl(51);break;case 112:xl(112),kl(26),xl(51);break;case 136:xl(136),kl(26),xl(51);break;default:xl(135),kl(26),xl(51)}}function qr(){Vl.startNonterminal(\"AbbrevForwardStep\",Pl),Hl==66&&Sl(66),kl(256),Nl(),Jr(),Vl.endNonterminal(\"AbbrevForwardStep\",Pl)}function Rr(){Hl==66&&xl(66),kl(256),Kr()}function Ur(){Vl.startNonterminal(\"ReverseStep\",Pl);switch(Hl){case 45:Vr();break;default:Wr(),kl(256),Nl(),Jr()}Vl.endNonterminal(\"ReverseStep\",Pl)}function zr(){switch(Hl){case 45:$r();break;default:Xr(),kl(256),Kr()}}function Wr(){Vl.startNonterminal(\"ReverseAxis\",Pl);switch(Hl){case 206:Sl(206),kl(26),Sl(51);break;case 73:Sl(73),kl(26),Sl(51);break;case 213:Sl(213),kl(26),Sl(51);break;case 212:Sl(212),kl(26),Sl(51);break;default:Sl(74),kl(26),Sl(51)}Vl.endNonterminal(\"ReverseAxis\",Pl)}function Xr(){switch(Hl){case 206:xl(206),kl(26),xl(51);break;case 73:xl(73),kl(26),xl(51);break;case 213:xl(213),kl(26),xl(51);break;case 212:xl(212),kl(26),xl(51);break;default:xl(74),kl(26),xl(51)}}function Vr(){Vl.startNonterminal(\"AbbrevReverseStep\",Pl),Sl(45),Vl.endNonterminal(\"AbbrevReverseStep\",Pl)}function $r(){xl(45)}function Jr(){Vl.startNonterminal(\"NodeTest\",Pl);switch(Hl){case 82:case 96:case 120:case 121:case 185:case 191:case 216:case 226:case 227:case 244:Ll(240);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Ps();break;default:Qr()}Vl.endNonterminal(\"NodeTest\",Pl)}function Kr(){switch(Hl){case 82:case 96:case 120:case 121:case 185:case 191:case 216:case 226:case 227:case 244:Ll(240);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Hs();break;default:Gr()}}function Qr(){Vl.startNonterminal(\"NameTest\",Pl);switch(Hl){case 5:Sl(5);break;default:Ha()}Vl.endNonterminal(\"NameTest\",Pl)}function Gr(){switch(Hl){case 5:xl(5);break;default:Ba()}}function Yr(){Vl.startNonterminal(\"PostfixExpr\",Pl),ol();for(;;){kl(240);if(Hl!=34&&Hl!=68)break;switch(Hl){case 68:Nl(),ii();break;default:Nl(),ei()}}Vl.endNonterminal(\"PostfixExpr\",Pl)}function Zr(){ul();for(;;){kl(240);if(Hl!=34&&Hl!=68)break;switch(Hl){case 68:si();break;default:ti()}}}function ei(){Vl.startNonterminal(\"ArgumentList\",Pl),Sl(34),kl(275);if(Hl!=37){Nl(),Ti();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(270),Nl(),Ti()}}Sl(37),Vl.endNonterminal(\"ArgumentList\",Pl)}function ti(){xl(34),kl(275);if(Hl!=37){Ni();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(270),Ni()}}xl(37)}function ni(){Vl.startNonterminal(\"PredicateList\",Pl);for(;;){kl(237);if(Hl!=68)break;Nl(),ii()}Vl.endNonterminal(\"PredicateList\",Pl)}function ri(){for(;;){kl(237);if(Hl!=68)break;si()}}function ii(){Vl.startNonterminal(\"Predicate\",Pl),Sl(68),kl(266),Nl(),G(),Sl(69),Vl.endNonterminal(\"Predicate\",Pl)}function si(){xl(68),kl(266),Y(),xl(69)}function oi(){Vl.startNonterminal(\"Literal\",Pl);switch(Hl){case 11:Sl(11);break;default:ai()}Vl.endNonterminal(\"Literal\",Pl)}function ui(){switch(Hl){case 11:xl(11);break;default:fi()}}function ai(){Vl.startNonterminal(\"NumericLiteral\",Pl);switch(Hl){case 8:Sl(8);break;case 9:Sl(9);break;default:Sl(10)}Vl.endNonterminal(\"NumericLiteral\",Pl)}function fi(){switch(Hl){case 8:xl(8);break;case 9:xl(9);break;default:xl(10)}}function li(){Vl.startNonterminal(\"VarRef\",Pl),Sl(31),kl(254),Nl(),hi(),Vl.endNonterminal(\"VarRef\",Pl)}function ci(){xl(31),kl(254),pi()}function hi(){Vl.startNonterminal(\"VarName\",Pl),Ha(),Vl.endNonterminal(\"VarName\",Pl)}function pi(){Ba()}function di(){Vl.startNonterminal(\"ParenthesizedExpr\",Pl),Sl(34),kl(268),Hl!=37&&(Nl(),G()),Sl(37),Vl.endNonterminal(\"ParenthesizedExpr\",Pl)}function vi(){xl(34),kl(268),Hl!=37&&Y(),xl(37)}function mi(){Vl.startNonterminal(\"ContextItemExpr\",Pl),Sl(44),Vl.endNonterminal(\"ContextItemExpr\",Pl)}function gi(){xl(44)}function yi(){Vl.startNonterminal(\"OrderedExpr\",Pl),Sl(202),kl(87),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"OrderedExpr\",Pl)}function bi(){xl(202),kl(87),xl(276),kl(266),Y(),xl(282)}function wi(){Vl.startNonterminal(\"UnorderedExpr\",Pl),Sl(256),kl(87),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"UnorderedExpr\",Pl)}function Ei(){xl(256),kl(87),xl(276),kl(266),Y(),xl(282)}function Si(){Vl.startNonterminal(\"FunctionCall\",Pl),ja(),kl(22),Nl(),ei(),Vl.endNonterminal(\"FunctionCall\",Pl)}function xi(){Fa(),kl(22),ti()}function Ti(){Vl.startNonterminal(\"Argument\",Pl);switch(Hl){case 64:Ci();break;default:_f()}Vl.endNonterminal(\"Argument\",Pl)}function Ni(){switch(Hl){case 64:ki();break;default:Df()}}function Ci(){Vl.startNonterminal(\"ArgumentPlaceholder\",Pl),Sl(64),Vl.endNonterminal(\"ArgumentPlaceholder\",Pl)}function ki(){xl(64)}function Li(){Vl.startNonterminal(\"Constructor\",Pl);switch(Hl){case 54:case 55:case 59:Oi();break;default:Ji()}Vl.endNonterminal(\"Constructor\",Pl)}function Ai(){switch(Hl){case 54:case 55:case 59:Mi();break;default:Ki()}}function Oi(){Vl.startNonterminal(\"DirectConstructor\",Pl);switch(Hl){case 54:_i();break;case 55:Wi();break;default:Vi()}Vl.endNonterminal(\"DirectConstructor\",Pl)}function Mi(){switch(Hl){case 54:Di();break;case 55:Xi();break;default:$i()}}function _i(){Vl.startNonterminal(\"DirElemConstructor\",Pl),Sl(54),Al(4),Sl(20),Pi();switch(Hl){case 48:Sl(48);break;default:Sl(61);for(;;){Al(174);if(Hl==56)break;Ui()}Sl(56),Al(4),Sl(20),Al(12),Hl==21&&Sl(21),Al(8),Sl(61)}Vl.endNonterminal(\"DirElemConstructor\",Pl)}function Di(){xl(54),Al(4),xl(20),Hi();switch(Hl){case 48:xl(48);break;default:xl(61);for(;;){Al(174);if(Hl==56)break;zi()}xl(56),Al(4),xl(20),Al(12),Hl==21&&xl(21),Al(8),xl(61)}}function Pi(){Vl.startNonterminal(\"DirAttributeList\",Pl);for(;;){Al(19);if(Hl!=21)break;Sl(21),Al(91),Hl==20&&(Sl(20),Al(11),Hl==21&&Sl(21),Al(7),Sl(60),Al(18),Hl==21&&Sl(21),Bi())}Vl.endNonterminal(\"DirAttributeList\",Pl)}function Hi(){for(;;){Al(19);if(Hl!=21)break;xl(21),Al(91),Hl==20&&(xl(20),Al(11),Hl==21&&xl(21),Al(7),xl(60),Al(18),Hl==21&&xl(21),ji())}}function Bi(){Vl.startNonterminal(\"DirAttributeValue\",Pl),Al(14);switch(Hl){case 28:Sl(28);for(;;){Al(167);if(Hl==28)break;switch(Hl){case 13:Sl(13);break;default:Fi()}}Sl(28);break;default:Sl(33);for(;;){Al(168);if(Hl==33)break;switch(Hl){case 14:Sl(14);break;default:qi()}}Sl(33)}Vl.endNonterminal(\"DirAttributeValue\",Pl)}function ji(){Al(14);switch(Hl){case 28:xl(28);for(;;){Al(167);if(Hl==28)break;switch(Hl){case 13:xl(13);break;default:Ii()}}xl(28);break;default:xl(33);for(;;){Al(168);if(Hl==33)break;switch(Hl){case 14:xl(14);break;default:Ri()}}xl(33)}}function Fi(){Vl.startNonterminal(\"QuotAttrValueContent\",Pl);switch(Hl){case 16:Sl(16);break;default:Vf()}Vl.endNonterminal(\"QuotAttrValueContent\",Pl)}function Ii(){switch(Hl){case 16:xl(16);break;default:$f()}}function qi(){Vl.startNonterminal(\"AposAttrValueContent\",Pl);switch(Hl){case 17:Sl(17);break;default:Vf()}Vl.endNonterminal(\"AposAttrValueContent\",Pl)}function Ri(){switch(Hl){case 17:xl(17);break;default:$f()}}function Ui(){Vl.startNonterminal(\"DirElemContent\",Pl);switch(Hl){case 54:case 55:case 59:Oi();break;case 4:Sl(4);break;case 15:Sl(15);break;default:Vf()}Vl.endNonterminal(\"DirElemContent\",Pl)}function zi(){switch(Hl){case 54:case 55:case 59:Mi();break;case 4:xl(4);break;case 15:xl(15);break;default:$f()}}function Wi(){Vl.startNonterminal(\"DirCommentConstructor\",Pl),Sl(55),Al(1),Sl(2),Al(6),Sl(43),Vl.endNonterminal(\"DirCommentConstructor\",Pl)}function Xi(){xl(55),Al(1),xl(2),Al(6),xl(43)}function Vi(){Vl.startNonterminal(\"DirPIConstructor\",Pl),Sl(59),Al(3),Sl(18),Al(13),Hl==21&&(Sl(21),Al(2),Sl(3)),Al(9),Sl(65),Vl.endNonterminal(\"DirPIConstructor\",Pl)}function $i(){xl(59),Al(3),xl(18),Al(13),Hl==21&&(xl(21),Al(2),xl(3)),Al(9),xl(65)}function Ji(){Vl.startNonterminal(\"ComputedConstructor\",Pl);switch(Hl){case 119:Qf();break;case 121:Qi();break;case 82:Yf();break;case 184:Yi();break;case 244:il();break;case 96:nl();break;default:el()}Vl.endNonterminal(\"ComputedConstructor\",Pl)}function Ki(){switch(Hl){case 119:Gf();break;case 121:Gi();break;case 82:Zf();break;case 184:Zi();break;case 244:sl();break;case 96:rl();break;default:tl()}}function Qi(){Vl.startNonterminal(\"CompElemConstructor\",Pl),Sl(121),kl(257);switch(Hl){case 276:Sl(276),kl(266),Nl(),G(),Sl(282);break;default:Nl(),Ha()}kl(87),Sl(276),kl(276),Hl!=282&&(Nl(),Jf()),Sl(282),Vl.endNonterminal(\"CompElemConstructor\",Pl)}function Gi(){xl(121),kl(257);switch(Hl){case 276:xl(276),kl(266),Y(),xl(282);break;default:Ba()}kl(87),xl(276),kl(276),Hl!=282&&Kf(),xl(282)}function Yi(){Vl.startNonterminal(\"CompNamespaceConstructor\",Pl),Sl(184),kl(250);switch(Hl){case 276:Sl(276),kl(266),Nl(),ns(),Sl(282);break;default:Nl(),es()}kl(87),Sl(276),kl(266),Nl(),is(),Sl(282),Vl.endNonterminal(\"CompNamespaceConstructor\",Pl)}function Zi(){xl(184),kl(250);switch(Hl){case 276:xl(276),kl(266),rs(),xl(282);break;default:ts()}kl(87),xl(276),kl(266),ss(),xl(282)}function es(){Vl.startNonterminal(\"Prefix\",Pl),Ia(),Vl.endNonterminal(\"Prefix\",Pl)}function ts(){qa()}function ns(){Vl.startNonterminal(\"PrefixExpr\",Pl),G(),Vl.endNonterminal(\"PrefixExpr\",Pl)}function rs(){Y()}function is(){Vl.startNonterminal(\"URIExpr\",Pl),G(),Vl.endNonterminal(\"URIExpr\",Pl)}function ss(){Y()}function os(){Vl.startNonterminal(\"FunctionItemExpr\",Pl);switch(Hl){case 145:Ll(92);break;default:_l=Hl}switch(_l){case 32:case 17553:ls();break;default:as()}Vl.endNonterminal(\"FunctionItemExpr\",Pl)}function us(){switch(Hl){case 145:Ll(92);break;default:_l=Hl}switch(_l){case 32:case 17553:cs();break;default:fs()}}function as(){Vl.startNonterminal(\"NamedFunctionRef\",Pl),Ha(),kl(20),Sl(29),kl(16),Sl(8),Vl.endNonterminal(\"NamedFunctionRef\",Pl)}function fs(){Ba(),kl(20),xl(29),kl(16),xl(8)}function ls(){Vl.startNonterminal(\"InlineFunctionExpr\",Pl);for(;;){kl(97);if(Hl!=32)break;Nl(),B()}Sl(145),kl(22),Sl(34),kl(94),Hl==31&&(Nl(),U()),Sl(37),kl(111),Hl==79&&(Sl(79),kl(259),Nl(),ms()),kl(87),Nl(),V(),Vl.endNonterminal(\"InlineFunctionExpr\",Pl)}function cs(){for(;;){kl(97);if(Hl!=32)break;j()}xl(145),kl(22),xl(34),kl(94),Hl==31&&z(),xl(37),kl(111),Hl==79&&(xl(79),kl(259),gs()),kl(87),$()}function hs(){Vl.startNonterminal(\"SingleType\",Pl),vo(),kl(226),Hl==64&&Sl(64),Vl.endNonterminal(\"SingleType\",Pl)}function ps(){mo(),kl(226),Hl==64&&xl(64)}function ds(){Vl.startNonterminal(\"TypeDeclaration\",Pl),Sl(79),kl(259),Nl(),ms(),Vl.endNonterminal(\"TypeDeclaration\",Pl)}function vs(){xl(79),kl(259),gs()}function ms(){Vl.startNonterminal(\"SequenceType\",Pl);switch(Hl){case 124:Ll(242);break;default:_l=Hl}switch(_l){case 17532:Sl(124),kl(22),Sl(34),kl(23),Sl(37);break;default:ws(),kl(238);switch(Hl){case 39:case 40:case 64:Nl(),ys();break;default:}}Vl.endNonterminal(\"SequenceType\",Pl)}function gs(){switch(Hl){case 124:Ll(242);break;default:_l=Hl}switch(_l){case 17532:xl(124),kl(22),xl(34),kl(23),xl(37);break;default:Es(),kl(238);switch(Hl){case 39:case 40:case 64:bs();break;default:}}}function ys(){Vl.startNonterminal(\"OccurrenceIndicator\",Pl);switch(Hl){case 64:Sl(64);break;case 39:Sl(39);break;default:Sl(40)}Vl.endNonterminal(\"OccurrenceIndicator\",Pl)}function bs(){switch(Hl){case 64:xl(64);break;case 39:xl(39);break;default:xl(40)}}function ws(){Vl.startNonterminal(\"ItemType\",Pl);switch(Hl){case 78:case 82:case 96:case 120:case 121:case 145:case 165:case 167:case 185:case 191:case 194:case 216:case 226:case 227:case 242:case 244:Ll(242);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Ps();break;case 17573:Sl(165),kl(22),Sl(34),kl(23),Sl(37);break;case 32:case 17553:bo();break;case 34:No();break;case 17486:case 17575:case 17602:Ss();break;case 17650:Ts();break;default:_s()}Vl.endNonterminal(\"ItemType\",Pl)}function Es(){switch(Hl){case 78:case 82:case 96:case 120:case 121:case 145:case 165:case 167:case 185:case 191:case 194:case 216:case 226:case 227:case 242:case 244:Ll(242);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Hs();break;case 17573:xl(165),kl(22),xl(34),kl(23),xl(37);break;case 32:case 17553:wo();break;case 34:Co();break;case 17486:case 17575:case 17602:xs();break;case 17650:Ns();break;default:Ds()}}function Ss(){Vl.startNonterminal(\"JSONTest\",Pl);switch(Hl){case 167:Cs();break;case 194:Ls();break;default:Os()}Vl.endNonterminal(\"JSONTest\",Pl)}function xs(){switch(Hl){case 167:ks();break;case 194:As();break;default:Ms()}}function Ts(){Vl.startNonterminal(\"StructuredItemTest\",Pl),Sl(242),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"StructuredItemTest\",Pl)}function Ns(){xl(242),kl(22),xl(34),kl(23),xl(37)}function Cs(){Vl.startNonterminal(\"JSONItemTest\",Pl),Sl(167),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"JSONItemTest\",Pl)}function ks(){xl(167),kl(22),xl(34),kl(23),xl(37)}function Ls(){Vl.startNonterminal(\"JSONObjectTest\",Pl),Sl(194),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"JSONObjectTest\",Pl)}function As(){xl(194),kl(22),xl(34),kl(23),xl(37)}function Os(){Vl.startNonterminal(\"JSONArrayTest\",Pl),Sl(78),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"JSONArrayTest\",Pl)}function Ms(){xl(78),kl(22),xl(34),kl(23),xl(37)}function _s(){Vl.startNonterminal(\"AtomicOrUnionType\",Pl),Ha(),Vl.endNonterminal(\"AtomicOrUnionType\",Pl)}function Ds(){Ba()}function Ps(){Vl.startNonterminal(\"KindTest\",Pl);switch(Hl){case 120:Fs();break;case 121:no();break;case 82:Js();break;case 227:oo();break;case 226:Ys();break;case 216:Vs();break;case 96:Us();break;case 244:qs();break;case 185:Ws();break;default:Bs()}Vl.endNonterminal(\"KindTest\",Pl)}function Hs(){switch(Hl){case 120:Is();break;case 121:ro();break;case 82:Ks();break;case 227:uo();break;case 226:Zs();break;case 216:$s();break;case 96:zs();break;case 244:Rs();break;case 185:Xs();break;default:js()}}function Bs(){Vl.startNonterminal(\"AnyKindTest\",Pl),Sl(191),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"AnyKindTest\",Pl)}function js(){xl(191),kl(22),xl(34),kl(23),xl(37)}function Fs(){Vl.startNonterminal(\"DocumentTest\",Pl),Sl(120),kl(22),Sl(34),kl(144);if(Hl!=37)switch(Hl){case 121:Nl(),no();break;default:Nl(),oo()}kl(23),Sl(37),Vl.endNonterminal(\"DocumentTest\",Pl)}function Is(){xl(120),kl(22),xl(34),kl(144);if(Hl!=37)switch(Hl){case 121:ro();break;default:uo()}kl(23),xl(37)}function qs(){Vl.startNonterminal(\"TextTest\",Pl),Sl(244),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"TextTest\",Pl)}function Rs(){xl(244),kl(22),xl(34),kl(23),xl(37)}function Us(){Vl.startNonterminal(\"CommentTest\",Pl),Sl(96),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"CommentTest\",Pl)}function zs(){xl(96),kl(22),xl(34),kl(23),xl(37)}function Ws(){Vl.startNonterminal(\"NamespaceNodeTest\",Pl),Sl(185),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"NamespaceNodeTest\",Pl)}function Xs(){xl(185),kl(22),xl(34),kl(23),xl(37)}function Vs(){Vl.startNonterminal(\"PITest\",Pl),Sl(216),kl(22),Sl(34),kl(252);if(Hl!=37)switch(Hl){case 11:Sl(11);break;default:Nl(),Ia()}kl(23),Sl(37),Vl.endNonterminal(\"PITest\",Pl)}function $s(){xl(216),kl(22),xl(34),kl(252);if(Hl!=37)switch(Hl){case 11:xl(11);break;default:qa()}kl(23),xl(37)}function Js(){Vl.startNonterminal(\"AttributeTest\",Pl),Sl(82),kl(22),Sl(34),kl(260),Hl!=37&&(Nl(),Qs(),kl(101),Hl==41&&(Sl(41),kl(254),Nl(),go())),kl(23),Sl(37),Vl.endNonterminal(\"AttributeTest\",Pl)}function Ks(){xl(82),kl(22),xl(34),kl(260),Hl!=37&&(Gs(),kl(101),Hl==41&&(xl(41),kl(254),yo())),kl(23),xl(37)}function Qs(){Vl.startNonterminal(\"AttribNameOrWildcard\",Pl);switch(Hl){case 38:Sl(38);break;default:lo()}Vl.endNonterminal(\"AttribNameOrWildcard\",Pl)}function Gs(){switch(Hl){case 38:xl(38);break;default:co()}}function Ys(){Vl.startNonterminal(\"SchemaAttributeTest\",Pl),Sl(226),kl(22),Sl(34),kl(254),Nl(),eo(),kl(23),Sl(37),Vl.endNonterminal(\"SchemaAttributeTest\",Pl)}function Zs(){xl(226),kl(22),xl(34),kl(254),to(),kl(23),xl(37)}function eo(){Vl.startNonterminal(\"AttributeDeclaration\",Pl),lo(),Vl.endNonterminal(\"AttributeDeclaration\",Pl)}function to(){co()}function no(){Vl.startNonterminal(\"ElementTest\",Pl),Sl(121),kl(22),Sl(34),kl(260),Hl!=37&&(Nl(),io(),kl(101),Hl==41&&(Sl(41),kl(254),Nl(),go(),kl(102),Hl==64&&Sl(64))),kl(23),Sl(37),Vl.endNonterminal(\"ElementTest\",Pl)}function ro(){xl(121),kl(22),xl(34),kl(260),Hl!=37&&(so(),kl(101),Hl==41&&(xl(41),kl(254),yo(),kl(102),Hl==64&&xl(64))),kl(23),xl(37)}function io(){Vl.startNonterminal(\"ElementNameOrWildcard\",Pl);switch(Hl){case 38:Sl(38);break;default:ho()}Vl.endNonterminal(\"ElementNameOrWildcard\",Pl)}function so(){switch(Hl){case 38:xl(38);break;default:po()}}function oo(){Vl.startNonterminal(\"SchemaElementTest\",Pl),Sl(227),kl(22),Sl(34),kl(254),Nl(),ao(),kl(23),Sl(37),Vl.endNonterminal(\"SchemaElementTest\",Pl)}function uo(){xl(227),kl(22),xl(34),kl(254),fo(),kl(23),xl(37)}function ao(){Vl.startNonterminal(\"ElementDeclaration\",Pl),ho(),Vl.endNonterminal(\"ElementDeclaration\",Pl)}function fo(){po()}function lo(){Vl.startNonterminal(\"AttributeName\",Pl),Ha(),Vl.endNonterminal(\"AttributeName\",Pl)}function co(){Ba()}function ho(){Vl.startNonterminal(\"ElementName\",Pl),Ha(),Vl.endNonterminal(\"ElementName\",Pl)}function po(){Ba()}function vo(){Vl.startNonterminal(\"SimpleTypeName\",Pl),go(),Vl.endNonterminal(\"SimpleTypeName\",Pl)}function mo(){yo()}function go(){Vl.startNonterminal(\"TypeName\",Pl),Ha(),Vl.endNonterminal(\"TypeName\",Pl)}function yo(){Ba()}function bo(){Vl.startNonterminal(\"FunctionTest\",Pl);for(;;){kl(97);if(Hl!=32)break;Nl(),B()}switch(Hl){case 145:Ll(22);break;default:_l=Hl}_l=Kl(5,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{So(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(5,Pl,_l)}switch(_l){case-1:Nl(),Eo();break;default:Nl(),xo()}Vl.endNonterminal(\"FunctionTest\",Pl)}function wo(){for(;;){kl(97);if(Hl!=32)break;j()}switch(Hl){case 145:Ll(22);break;default:_l=Hl}_l=Kl(5,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{So(),Jl(5,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(5,t,-2)}}switch(_l){case-1:So();break;case-3:break;default:To()}}function Eo(){Vl.startNonterminal(\"AnyFunctionTest\",Pl),Sl(145),kl(22),Sl(34),kl(24),Sl(38),kl(23),Sl(37),Vl.endNonterminal(\"AnyFunctionTest\",Pl)}function So(){xl(145),kl(22),xl(34),kl(24),xl(38),kl(23),xl(37)}function xo(){Vl.startNonterminal(\"TypedFunctionTest\",Pl),Sl(145),kl(22),Sl(34),kl(262);if(Hl!=37){Nl(),ms();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(259),Nl(),ms()}}Sl(37),kl(30),Sl(79),kl(259),Nl(),ms(),Vl.endNonterminal(\"TypedFunctionTest\",Pl)}function To(){xl(145),kl(22),xl(34),kl(262);if(Hl!=37){gs();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(259),gs()}}xl(37),kl(30),xl(79),kl(259),gs()}function No(){Vl.startNonterminal(\"ParenthesizedItemType\",Pl),Sl(34),kl(259),Nl(),ws(),kl(23),Sl(37),Vl.endNonterminal(\"ParenthesizedItemType\",Pl)}function Co(){xl(34),kl(259),Es(),kl(23),xl(37)}function ko(){Vl.startNonterminal(\"RevalidationDecl\",Pl),Sl(108),kl(72),Sl(222),kl(152);switch(Hl){case 240:Sl(240);break;case 171:Sl(171);break;default:Sl(233)}Vl.endNonterminal(\"RevalidationDecl\",Pl)}function Lo(){Vl.startNonterminal(\"InsertExprTargetChoice\",Pl);switch(Hl){case 70:Sl(70);break;case 84:Sl(84);break;default:if(Hl==79){Sl(79),kl(119);switch(Hl){case 134:Sl(134);break;default:Sl(170)}}kl(54),Sl(163)}Vl.endNonterminal(\"InsertExprTargetChoice\",Pl)}function Ao(){switch(Hl){case 70:xl(70);break;case 84:xl(84);break;default:if(Hl==79){xl(79),kl(119);switch(Hl){case 134:xl(134);break;default:xl(170)}}kl(54),xl(163)}}function Oo(){Vl.startNonterminal(\"InsertExpr\",Pl),Sl(159),kl(129);switch(Hl){case 191:Sl(191);break;default:Sl(192)}kl(266),Nl(),Fo(),Nl(),Lo(),kl(266),Nl(),qo(),Vl.endNonterminal(\"InsertExpr\",Pl)}function Mo(){xl(159),kl(129);switch(Hl){case 191:xl(191);break;default:xl(192)}kl(266),Io(),Ao(),kl(266),Ro()}function _o(){Vl.startNonterminal(\"DeleteExpr\",Pl),Sl(110),kl(129);switch(Hl){case 191:Sl(191);break;default:Sl(192)}kl(266),Nl(),qo(),Vl.endNonterminal(\"DeleteExpr\",Pl)}function Do(){xl(110),kl(129);switch(Hl){case 191:xl(191);break;default:xl(192)}kl(266),Ro()}function Po(){Vl.startNonterminal(\"ReplaceExpr\",Pl),Sl(219),kl(130),Hl==261&&(Sl(261),kl(64),Sl(196)),kl(62),Sl(191),kl(266),Nl(),qo(),Sl(270),kl(266),Nl(),_f(),Vl.endNonterminal(\"ReplaceExpr\",Pl)}function Ho(){xl(219),kl(130),Hl==261&&(xl(261),kl(64),xl(196)),kl(62),xl(191),kl(266),Ro(),xl(270),kl(266),Df()}function Bo(){Vl.startNonterminal(\"RenameExpr\",Pl),Sl(218),kl(62),Sl(191),kl(266),Nl(),qo(),Sl(79),kl(266),Nl(),Uo(),Vl.endNonterminal(\"RenameExpr\",Pl)}function jo(){xl(218),kl(62),xl(191),kl(266),Ro(),xl(79),kl(266),zo()}function Fo(){Vl.startNonterminal(\"SourceExpr\",Pl),_f(),Vl.endNonterminal(\"SourceExpr\",Pl)}function Io(){Df()}function qo(){Vl.startNonterminal(\"TargetExpr\",Pl),_f(),Vl.endNonterminal(\"TargetExpr\",Pl)}function Ro(){Df()}function Uo(){Vl.startNonterminal(\"NewNameExpr\",Pl),_f(),Vl.endNonterminal(\"NewNameExpr\",Pl)}function zo(){Df()}function Wo(){Vl.startNonterminal(\"TransformExpr\",Pl),Sl(103),kl(21),Nl(),Vo();for(;;){if(Hl!=41)break;Sl(41),kl(21),Nl(),Vo()}Sl(181),kl(266),Nl(),_f(),Sl(220),kl(266),Nl(),_f(),Vl.endNonterminal(\"TransformExpr\",Pl)}function Xo(){xl(103),kl(21),$o();for(;;){if(Hl!=41)break;xl(41),kl(21),$o()}xl(181),kl(266),Df(),xl(220),kl(266),Df()}function Vo(){Vl.startNonterminal(\"TransformSpec\",Pl),Sl(31),kl(254),Nl(),hi(),kl(27),Sl(52),kl(266),Nl(),_f(),Vl.endNonterminal(\"TransformSpec\",Pl)}function $o(){xl(31),kl(254),pi(),kl(27),xl(52),kl(266),Df()}function Jo(){Vl.startNonterminal(\"FTSelection\",Pl),Yo();for(;;){kl(211);switch(Hl){case 81:Ll(151);break;default:_l=Hl}if(_l!=115&&_l!=117&&_l!=127&&_l!=202&&_l!=223&&_l!=269&&_l!=64593&&_l!=121425)break;Nl(),Su()}Vl.endNonterminal(\"FTSelection\",Pl)}function Ko(){Zo();for(;;){kl(211);switch(Hl){case 81:Ll(151);break;default:_l=Hl}if(_l!=115&&_l!=117&&_l!=127&&_l!=202&&_l!=223&&_l!=269&&_l!=64593&&_l!=121425)break;xu()}}function Qo(){Vl.startNonterminal(\"FTWeight\",Pl),Sl(264),kl(87),Sl(276),kl(266),Nl(),G(),Sl(282),Vl.endNonterminal(\"FTWeight\",Pl)}function Go(){xl(264),kl(87),xl(276),kl(266),Y(),xl(282)}function Yo(){Vl.startNonterminal(\"FTOr\",Pl),eu();for(;;){if(Hl!=144)break;Sl(144),kl(162),Nl(),eu()}Vl.endNonterminal(\"FTOr\",Pl)}function Zo(){tu();for(;;){if(Hl!=144)break;xl(144),kl(162),tu()}}function eu(){Vl.startNonterminal(\"FTAnd\",Pl),nu();for(;;){if(Hl!=142)break;Sl(142),kl(162),Nl(),nu()}Vl.endNonterminal(\"FTAnd\",Pl)}function tu(){ru();for(;;){if(Hl!=142)break;xl(142),kl(162),ru()}}function nu(){Vl.startNonterminal(\"FTMildNot\",Pl),iu();for(;;){kl(212);if(Hl!=193)break;Sl(193),kl(53),Sl(154),kl(162),Nl(),iu()}Vl.endNonterminal(\"FTMildNot\",Pl)}function ru(){su();for(;;){kl(212);if(Hl!=193)break;xl(193),kl(53),xl(154),kl(162),su()}}function iu(){Vl.startNonterminal(\"FTUnaryNot\",Pl),Hl==143&&Sl(143),kl(155),Nl(),ou(),Vl.endNonterminal(\"FTUnaryNot\",Pl)}function su(){Hl==143&&xl(143),kl(155),uu()}function ou(){Vl.startNonterminal(\"FTPrimaryWithOptions\",Pl),au(),kl(214),Hl==259&&(Nl(),Fu()),Hl==264&&(Nl(),Qo()),Vl.endNonterminal(\"FTPrimaryWithOptions\",Pl)}function uu(){fu(),kl(214),Hl==259&&Iu(),Hl==264&&Go()}function au(){Vl.startNonterminal(\"FTPrimary\",Pl);switch(Hl){case 34:Sl(34),kl(162),Nl(),Jo(),Sl(37);break;case 35:du();break;default:lu(),kl(215),Hl==195&&(Nl(),yu())}Vl.endNonterminal(\"FTPrimary\",Pl)}function fu(){switch(Hl){case 34:xl(34),kl(162),Ko(),xl(37);break;case 35:vu();break;default:cu(),kl(215),Hl==195&&bu()}}function lu(){Vl.startNonterminal(\"FTWords\",Pl),hu(),kl(221);if(Hl==71||Hl==76||Hl==210)Nl(),mu();Vl.endNonterminal(\"FTWords\",Pl)}function cu(){pu(),kl(221),(Hl==71||Hl==76||Hl==210)&&gu()}function hu(){Vl.startNonterminal(\"FTWordsValue\",Pl);switch(Hl){case 11:Sl(11);break;default:Sl(276),kl(266),Nl(),G(),Sl(282)}Vl.endNonterminal(\"FTWordsValue\",Pl)}function pu(){switch(Hl){case 11:xl(11);break;default:xl(276),kl(266),Y(),xl(282)}}function du(){Vl.startNonterminal(\"FTExtensionSelection\",Pl);for(;;){Nl(),Cr(),kl(100);if(Hl!=35)break}Sl(276),kl(166),Hl!=282&&(Nl(),Jo()),Sl(282),Vl.endNonterminal(\"FTExtensionSelection\",Pl)}function vu(){for(;;){kr(),kl(100);if(Hl!=35)break}xl(276),kl(166),Hl!=282&&Ko(),xl(282)}function mu(){Vl.startNonterminal(\"FTAnyallOption\",Pl);switch(Hl){case 76:Sl(76),kl(218),Hl==272&&Sl(272);break;case 71:Sl(71),kl(219),Hl==273&&Sl(273);break;default:Sl(210)}Vl.endNonterminal(\"FTAnyallOption\",Pl)}function gu(){switch(Hl){case 76:xl(76),kl(218),Hl==272&&xl(272);break;case 71:xl(71),kl(219),Hl==273&&xl(273);break;default:xl(210)}}function yu(){Vl.startNonterminal(\"FTTimes\",Pl),Sl(195),kl(149),Nl(),wu(),Sl(247),Vl.endNonterminal(\"FTTimes\",Pl)}function bu(){xl(195),kl(149),Eu(),xl(247)}function wu(){Vl.startNonterminal(\"FTRange\",Pl);switch(Hl){case 130:Sl(130),kl(266),Nl(),Vn();break;case 81:Sl(81),kl(125);switch(Hl){case 173:Sl(173),kl(266),Nl(),Vn();break;default:Sl(183),kl(266),Nl(),Vn()}break;default:Sl(140),kl(266),Nl(),Vn(),Sl(248),kl(266),Nl(),Vn()}Vl.endNonterminal(\"FTRange\",Pl)}function Eu(){switch(Hl){case 130:xl(130),kl(266),$n();break;case 81:xl(81),kl(125);switch(Hl){case 173:xl(173),kl(266),$n();break;default:xl(183),kl(266),$n()}break;default:xl(140),kl(266),$n(),xl(248),kl(266),$n()}}function Su(){Vl.startNonterminal(\"FTPosFilter\",Pl);switch(Hl){case 202:Tu();break;case 269:Cu();break;case 117:Lu();break;case 115:case 223:_u();break;default:Bu()}Vl.endNonterminal(\"FTPosFilter\",Pl)}function xu(){switch(Hl){case 202:Nu();break;case 269:ku();break;case 117:Au();break;case 115:case 223:Du();break;default:ju()}}function Tu(){Vl.startNonterminal(\"FTOrder\",Pl),Sl(202),Vl.endNonterminal(\"FTOrder\",Pl)}function Nu(){xl(202)}function Cu(){Vl.startNonterminal(\"FTWindow\",Pl),Sl(269),kl(266),Nl(),Vn(),Nl(),Ou(),Vl.endNonterminal(\"FTWindow\",Pl)}function ku(){xl(269),kl(266),$n(),Mu()}function Lu(){Vl.startNonterminal(\"FTDistance\",Pl),Sl(117),kl(149),Nl(),wu(),Nl(),Ou(),Vl.endNonterminal(\"FTDistance\",Pl)}function Au(){xl(117),kl(149),Eu(),Mu()}function Ou(){Vl.startNonterminal(\"FTUnit\",Pl);switch(Hl){case 273:Sl(273);break;case 232:Sl(232);break;default:Sl(205)}Vl.endNonterminal(\"FTUnit\",Pl)}function Mu(){switch(Hl){case 273:xl(273);break;case 232:xl(232);break;default:xl(205)}}function _u(){Vl.startNonterminal(\"FTScope\",Pl);switch(Hl){case 223:Sl(223);break;default:Sl(115)}kl(132),Nl(),Pu(),Vl.endNonterminal(\"FTScope\",Pl)}function Du(){switch(Hl){case 223:xl(223);break;default:xl(115)}kl(132),Hu()}function Pu(){Vl.startNonterminal(\"FTBigUnit\",Pl);switch(Hl){case 231:Sl(231);break;default:Sl(204)}Vl.endNonterminal(\"FTBigUnit\",Pl)}function Hu(){switch(Hl){case 231:xl(231);break;default:xl(204)}}function Bu(){Vl.startNonterminal(\"FTContent\",Pl);switch(Hl){case 81:Sl(81),kl(117);switch(Hl){case 237:Sl(237);break;default:Sl(126)}break;default:Sl(127),kl(42),Sl(100)}Vl.endNonterminal(\"FTContent\",Pl)}function ju(){switch(Hl){case 81:xl(81),kl(117);switch(Hl){case 237:xl(237);break;default:xl(126)}break;default:xl(127),kl(42),xl(100)}}function Fu(){Vl.startNonterminal(\"FTMatchOptions\",Pl);for(;;){Sl(259),kl(181),Nl(),qu(),kl(214);if(Hl!=259)break}Vl.endNonterminal(\"FTMatchOptions\",Pl)}function Iu(){for(;;){xl(259),kl(181),Ru(),kl(214);if(Hl!=259)break}}function qu(){Vl.startNonterminal(\"FTMatchOption\",Pl);switch(Hl){case 188:Ll(161);break;default:_l=Hl}switch(_l){case 169:oa();break;case 268:case 137404:aa();break;case 246:case 126140:Ju();break;case 238:case 122044:Vu();break;case 114:Wu();break;case 239:case 122556:ea();break;case 199:la();break;default:Uu()}Vl.endNonterminal(\"FTMatchOption\",Pl)}function Ru(){switch(Hl){case 188:Ll(161);break;default:_l=Hl}switch(_l){case 169:ua();break;case 268:case 137404:fa();break;case 246:case 126140:Ku();break;case 238:case 122044:$u();break;case 114:Xu();break;case 239:case 122556:ta();break;case 199:ca();break;default:zu()}}function Uu(){Vl.startNonterminal(\"FTCaseOption\",Pl);switch(Hl){case 88:Sl(88),kl(124);switch(Hl){case 158:Sl(158);break;default:Sl(230)}break;case 177:Sl(177);break;default:Sl(258)}Vl.endNonterminal(\"FTCaseOption\",Pl)}function zu(){switch(Hl){case 88:xl(88),kl(124);switch(Hl){case 158:xl(158);break;default:xl(230)}break;case 177:xl(177);break;default:xl(258)}}function Wu(){Vl.startNonterminal(\"FTDiacriticsOption\",Pl),Sl(114),kl(124);switch(Hl){case 158:Sl(158);break;default:Sl(230)}Vl.endNonterminal(\"FTDiacriticsOption\",Pl)}function Xu(){xl(114),kl(124);switch(Hl){case 158:xl(158);break;default:xl(230)}}function Vu(){Vl.startNonterminal(\"FTStemOption\",Pl);switch(Hl){case 238:Sl(238);break;default:Sl(188),kl(74),Sl(238)}Vl.endNonterminal(\"FTStemOption\",Pl)}function $u(){switch(Hl){case 238:xl(238);break;default:xl(188),kl(74),xl(238)}}function Ju(){Vl.startNonterminal(\"FTThesaurusOption\",Pl);switch(Hl){case 246:Sl(246),kl(142);switch(Hl){case 81:Nl(),Qu();break;case 109:Sl(109);break;default:Sl(34),kl(112);switch(Hl){case 81:Nl(),Qu();break;default:Sl(109)}for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(31),Nl(),Qu()}Sl(37)}break;default:Sl(188),kl(78),Sl(246)}Vl.endNonterminal(\"FTThesaurusOption\",Pl)}function Ku(){switch(Hl){case 246:xl(246),kl(142);switch(Hl){case 81:Gu();break;case 109:xl(109);break;default:xl(34),kl(112);switch(Hl){case 81:Gu();break;default:xl(109)}for(;;){kl(101);if(Hl!=41)break;xl(41),kl(31),Gu()}xl(37)}break;default:xl(188),kl(78),xl(246)}}function Qu(){Vl.startNonterminal(\"FTThesaurusID\",Pl),Sl(81),kl(15),Sl(7),kl(220),Hl==217&&(Sl(217),kl(17),Sl(11)),kl(216);switch(Hl){case 81:Ll(165);break;default:_l=Hl}if(_l==130||_l==140||_l==88657||_l==93777)Nl(),Yu(),kl(58),Sl(175);Vl.endNonterminal(\"FTThesaurusID\",Pl)}function Gu(){xl(81),kl(15),xl(7),kl(220),Hl==217&&(xl(217),kl(17),xl(11)),kl(216);switch(Hl){case 81:Ll(165);break;default:_l=Hl}if(_l==130||_l==140||_l==88657||_l==93777)Zu(),kl(58),xl(175)}function Yu(){Vl.startNonterminal(\"FTLiteralRange\",Pl);switch(Hl){case 130:Sl(130),kl(16),Sl(8);break;case 81:Sl(81),kl(125);switch(Hl){case 173:Sl(173),kl(16),Sl(8);break;default:Sl(183),kl(16),Sl(8)}break;default:Sl(140),kl(16),Sl(8),kl(79),Sl(248),kl(16),Sl(8)}Vl.endNonterminal(\"FTLiteralRange\",Pl)}function Zu(){switch(Hl){case 130:xl(130),kl(16),xl(8);break;case 81:xl(81),kl(125);switch(Hl){case 173:xl(173),kl(16),xl(8);break;default:xl(183),kl(16),xl(8)}break;default:xl(140),kl(16),xl(8),kl(79),xl(248),kl(16),xl(8)}}function ea(){Vl.startNonterminal(\"FTStopWordOption\",Pl);switch(Hl){case 239:Sl(239),kl(86),Sl(273),kl(142);switch(Hl){case 109:Sl(109);for(;;){kl(217);if(Hl!=131&&Hl!=254)break;Nl(),ia()}break;default:Nl(),na();for(;;){kl(217);if(Hl!=131&&Hl!=254)break;Nl(),ia()}}break;default:Sl(188),kl(75),Sl(239),kl(86),Sl(273)}Vl.endNonterminal(\"FTStopWordOption\",Pl)}function ta(){switch(Hl){case 239:xl(239),kl(86),xl(273),kl(142);switch(Hl){case 109:xl(109);for(;;){kl(217);if(Hl!=131&&Hl!=254)break;sa()}break;default:ra();for(;;){kl(217);if(Hl!=131&&Hl!=254)break;sa()}}break;default:xl(188),kl(75),xl(239),kl(86),xl(273)}}function na(){Vl.startNonterminal(\"FTStopWords\",Pl);switch(Hl){case 81:Sl(81),kl(15),Sl(7);break;default:Sl(34),kl(17),Sl(11);for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(17),Sl(11)}Sl(37)}Vl.endNonterminal(\"FTStopWords\",Pl)}function ra(){switch(Hl){case 81:xl(81),kl(15),xl(7);break;default:xl(34),kl(17),xl(11);for(;;){kl(101);if(Hl!=41)break;xl(41),kl(17),xl(11)}xl(37)}}function ia(){Vl.startNonterminal(\"FTStopWordsInclExcl\",Pl);switch(Hl){case 254:Sl(254);break;default:Sl(131)}kl(99),Nl(),na(),Vl.endNonterminal(\"FTStopWordsInclExcl\",Pl)}function sa(){switch(Hl){case 254:xl(254);break;default:xl(131)}kl(99),ra()}function oa(){Vl.startNonterminal(\"FTLanguageOption\",Pl),Sl(169),kl(17),Sl(11),Vl.endNonterminal(\"FTLanguageOption\",Pl)}function ua(){xl(169),kl(17),xl(11)}function aa(){Vl.startNonterminal(\"FTWildCardOption\",Pl);switch(Hl){case 268:Sl(268);break;default:Sl(188),kl(84),Sl(268)}Vl.endNonterminal(\"FTWildCardOption\",Pl)}function fa(){switch(Hl){case 268:xl(268);break;default:xl(188),kl(84),xl(268)}}function la(){Vl.startNonterminal(\"FTExtensionOption\",Pl),Sl(199),kl(254),Nl(),Ha(),kl(17),Sl(11),Vl.endNonterminal(\"FTExtensionOption\",Pl)}function ca(){xl(199),kl(254),Ba(),kl(17),xl(11)}function ha(){Vl.startNonterminal(\"FTIgnoreOption\",Pl),Sl(271),kl(42),Sl(100),kl(266),Nl(),Qn(),Vl.endNonterminal(\"FTIgnoreOption\",Pl)}function pa(){xl(271),kl(42),xl(100),kl(266),Gn()}function da(){Vl.startNonterminal(\"CollectionDecl\",Pl),Sl(95),kl(254),Nl(),Ha(),kl(107),Hl==79&&(Nl(),va()),Vl.endNonterminal(\"CollectionDecl\",Pl)}function va(){Vl.startNonterminal(\"CollectionTypeDecl\",Pl),Sl(79),kl(259),Nl(),ws(),kl(156),Hl!=53&&(Nl(),ys()),Vl.endNonterminal(\"CollectionTypeDecl\",Pl)}function ma(){Vl.startNonterminal(\"IndexName\",Pl),Ha(),Vl.endNonterminal(\"IndexName\",Pl)}function ga(){Vl.startNonterminal(\"IndexDomainExpr\",Pl),Lr(),Vl.endNonterminal(\"IndexDomainExpr\",Pl)}function ya(){Vl.startNonterminal(\"IndexKeySpec\",Pl),ba(),Hl==79&&(Nl(),wa()),kl(146),Hl==94&&(Nl(),Sa()),Vl.endNonterminal(\"IndexKeySpec\",Pl)}function ba(){Vl.startNonterminal(\"IndexKeyExpr\",Pl),Lr(),Vl.endNonterminal(\"IndexKeyExpr\",Pl)}function wa(){Vl.startNonterminal(\"IndexKeyTypeDecl\",Pl),Sl(79),kl(254),Nl(),Ea(),kl(169);if(Hl==39||Hl==40||Hl==64)Nl(),ys();Vl.endNonterminal(\"IndexKeyTypeDecl\",Pl)}function Ea(){Vl.startNonterminal(\"AtomicType\",Pl),Ha(),Vl.endNonterminal(\"AtomicType\",Pl)}function Sa(){Vl.startNonterminal(\"IndexKeyCollation\",Pl),Sl(94),kl(15),Sl(7),Vl.endNonterminal(\"IndexKeyCollation\",Pl)}function xa(){Vl.startNonterminal(\"IndexDecl\",Pl),Sl(155),kl(254),Nl(),ma(),kl(65),Sl(197),kl(63),Sl(192),kl(265),Nl(),ga(),Sl(87),kl(265),Nl(),ya();for(;;){kl(103);if(Hl!=41)break;Sl(41),kl(265),Nl(),ya()}Vl.endNonterminal(\"IndexDecl\",Pl)}function Ta(){Vl.startNonterminal(\"ICDecl\",Pl),Sl(161),kl(40),Sl(97),kl(254),Nl(),Ha(),kl(120);switch(Hl){case 197:Nl(),Na();break;default:Nl(),Aa()}Vl.endNonterminal(\"ICDecl\",Pl)}function Na(){Vl.startNonterminal(\"ICCollection\",Pl),Sl(197),kl(39),Sl(95),kl(254),Nl(),Ha(),kl(140);switch(Hl){case 31:Nl(),Ca();break;case 191:Nl(),ka();break;default:Nl(),La()}Vl.endNonterminal(\"ICCollection\",Pl)}function Ca(){Vl.startNonterminal(\"ICCollSequence\",Pl),li(),kl(37),Sl(92),kl(266),Nl(),_f(),Vl.endNonterminal(\"ICCollSequence\",Pl)}function ka(){Vl.startNonterminal(\"ICCollSequenceUnique\",Pl),Sl(191),kl(21),Nl(),li(),kl(37),Sl(92),kl(80),Sl(255),kl(57),Sl(168),kl(265),Nl(),Lr(),Vl.endNonterminal(\"ICCollSequenceUnique\",Pl)}function La(){Vl.startNonterminal(\"ICCollNode\",Pl),Sl(138),kl(62),Sl(191),kl(21),Nl(),li(),kl(37),Sl(92),kl(266),Nl(),_f(),Vl.endNonterminal(\"ICCollNode\",Pl)}function Aa(){Vl.startNonterminal(\"ICForeignKey\",Pl),Sl(139),kl(57),Sl(168),kl(51),Nl(),Oa(),Nl(),Ma(),Vl.endNonterminal(\"ICForeignKey\",Pl)}function Oa(){Vl.startNonterminal(\"ICForeignKeySource\",Pl),Sl(140),kl(39),Nl(),_a(),Vl.endNonterminal(\"ICForeignKeySource\",Pl)}function Ma(){Vl.startNonterminal(\"ICForeignKeyTarget\",Pl),Sl(248),kl(39),Nl(),_a(),Vl.endNonterminal(\"ICForeignKeyTarget\",Pl)}function _a(){Vl.startNonterminal(\"ICForeignKeyValues\",Pl),Sl(95),kl(254),Nl(),Ha(),kl(62),Sl(191),kl(21),Nl(),li(),kl(57),Sl(168),kl(265),Nl(),Lr(),Vl.endNonterminal(\"ICForeignKeyValues\",Pl)}function Da(){xl(36);for(;;){Al(89);if(Hl==50)break;switch(Hl){case 24:xl(24);break;default:Da()}}xl(50)}function Pa(){switch(Hl){case 22:xl(22);break;default:Da()}}function Ha(){Vl.startNonterminal(\"EQName\",Pl),Al(249);switch(Hl){case 82:Sl(82);break;case 96:Sl(96);break;case 120:Sl(120);break;case 121:Sl(121);break;case 124:Sl(124);break;case 145:Sl(145);break;case 152:Sl(152);break;case 165:Sl(165);break;case 185:Sl(185);break;case 191:Sl(191);break;case 216:Sl(216);break;case 226:Sl(226);break;case 227:Sl(227);break;case 243:Sl(243);break;case 244:Sl(244);break;case 253:Sl(253);break;case 78:Sl(78);break;case 167:Sl(167);break;case 242:Sl(242);break;default:ja()}Vl.endNonterminal(\"EQName\",Pl)}function Ba(){Al(249);switch(Hl){case 82:xl(82);break;case 96:xl(96);break;case 120:xl(120);break;case 121:xl(121);break;case 124:xl(124);break;case 145:xl(145);break;case 152:xl(152);break;case 165:xl(165);break;case 185:xl(185);break;case 191:xl(191);break;case 216:xl(216);break;case 226:xl(226);break;case 227:xl(227);break;case 243:xl(243);break;case 244:xl(244);break;case 253:xl(253);break;case 78:xl(78);break;case 167:xl(167);break;case 242:xl(242);break;default:Fa()}}function ja(){Vl.startNonterminal(\"FunctionName\",Pl);switch(Hl){case 6:Sl(6);break;case 70:Sl(70);break;case 73:Sl(73);break;case 74:Sl(74);break;case 75:Sl(75);break;case 79:Sl(79);break;case 80:Sl(80);break;case 84:Sl(84);break;case 88:Sl(88);break;case 89:Sl(89);break;case 90:Sl(90);break;case 93:Sl(93);break;case 94:Sl(94);break;case 103:Sl(103);break;case 105:Sl(105);break;case 108:Sl(108);break;case 109:Sl(109);break;case 110:Sl(110);break;case 111:Sl(111);break;case 112:Sl(112);break;case 113:Sl(113);break;case 118:Sl(118);break;case 119:Sl(119);break;case 122:Sl(122);break;case 123:Sl(123);break;case 126:Sl(126);break;case 128:Sl(128);break;case 129:Sl(129);break;case 131:Sl(131);break;case 134:Sl(134);break;case 135:Sl(135);break;case 136:Sl(136);break;case 137:Sl(137);break;case 146:Sl(146);break;case 148:Sl(148);break;case 150:Sl(150);break;case 151:Sl(151);break;case 153:Sl(153);break;case 159:Sl(159);break;case 160:Sl(160);break;case 162:Sl(162);break;case 163:Sl(163);break;case 164:Sl(164);break;case 170:Sl(170);break;case 172:Sl(172);break;case 174:Sl(174);break;case 178:Sl(178);break;case 180:Sl(180);break;case 181:Sl(181);break;case 182:Sl(182);break;case 184:Sl(184);break;case 186:Sl(186);break;case 198:Sl(198);break;case 200:Sl(200);break;case 201:Sl(201);break;case 202:Sl(202);break;case 206:Sl(206);break;case 212:Sl(212);break;case 213:Sl(213);break;case 218:Sl(218);break;case 219:Sl(219);break;case 220:Sl(220);break;case 224:Sl(224);break;case 229:Sl(229);break;case 235:Sl(235);break;case 236:Sl(236);break;case 237:Sl(237);break;case 248:Sl(248);break;case 249:Sl(249);break;case 250:Sl(250);break;case 254:Sl(254);break;case 256:Sl(256);break;case 260:Sl(260);break;case 266:Sl(266);break;case 270:Sl(270);break;case 274:Sl(274);break;case 72:Sl(72);break;case 81:Sl(81);break;case 83:Sl(83);break;case 85:Sl(85);break;case 86:Sl(86);break;case 91:Sl(91);break;case 98:Sl(98);break;case 101:Sl(101);break;case 102:Sl(102);break;case 104:Sl(104);break;case 106:Sl(106);break;case 125:Sl(125);break;case 132:Sl(132);break;case 133:Sl(133);break;case 141:Sl(141);break;case 154:Sl(154);break;case 155:Sl(155);break;case 161:Sl(161);break;case 171:Sl(171);break;case 192:Sl(192);break;case 199:Sl(199);break;case 203:Sl(203);break;case 222:Sl(222);break;case 225:Sl(225);break;case 228:Sl(228);break;case 234:Sl(234);break;case 240:Sl(240);break;case 251:Sl(251);break;case 252:Sl(252);break;case 257:Sl(257);break;case 261:Sl(261);break;case 262:Sl(262);break;case 263:Sl(263);break;case 267:Sl(267);break;case 97:Sl(97);break;case 176:Sl(176);break;case 221:Sl(221);break;case 77:Sl(77);break;case 166:Sl(166);break;default:Sl(194)}Vl.endNonterminal(\"FunctionName\",Pl)}function Fa(){switch(Hl){case 6:xl(6);break;case 70:xl(70);break;case 73:xl(73);break;case 74:xl(74);break;case 75:xl(75);break;case 79:xl(79);break;case 80:xl(80);break;case 84:xl(84);break;case 88:xl(88);break;case 89:xl(89);break;case 90:xl(90);break;case 93:xl(93);break;case 94:xl(94);break;case 103:xl(103);break;case 105:xl(105);break;case 108:xl(108);break;case 109:xl(109);break;case 110:xl(110);break;case 111:xl(111);break;case 112:xl(112);break;case 113:xl(113);break;case 118:xl(118);break;case 119:xl(119);break;case 122:xl(122);break;case 123:xl(123);break;case 126:xl(126);break;case 128:xl(128);break;case 129:xl(129);break;case 131:xl(131);break;case 134:xl(134);break;case 135:xl(135);break;case 136:xl(136);break;case 137:xl(137);break;case 146:xl(146);break;case 148:xl(148);break;case 150:xl(150);break;case 151:xl(151);break;case 153:xl(153);break;case 159:xl(159);break;case 160:xl(160);break;case 162:xl(162);break;case 163:xl(163);break;case 164:xl(164);break;case 170:xl(170);break;case 172:xl(172);break;case 174:xl(174);break;case 178:xl(178);break;case 180:xl(180);break;case 181:xl(181);break;case 182:xl(182);break;case 184:xl(184);break;case 186:xl(186);break;case 198:xl(198);break;case 200:xl(200);break;case 201:xl(201);break;case 202:xl(202);break;case 206:xl(206);break;case 212:xl(212);break;case 213:xl(213);break;case 218:xl(218);break;case 219:xl(219);break;case 220:xl(220);break;case 224:xl(224);break;case 229:xl(229);break;case 235:xl(235);break;case 236:xl(236);break;case 237:xl(237);break;case 248:xl(248);break;case 249:xl(249);break;case 250:xl(250);break;case 254:xl(254);break;case 256:xl(256);break;case 260:xl(260);break;case 266:xl(266);break;case 270:xl(270);break;case 274:xl(274);break;case 72:xl(72);break;case 81:xl(81);break;case 83:xl(83);break;case 85:xl(85);break;case 86:xl(86);break;case 91:xl(91);break;case 98:xl(98);break;case 101:xl(101);break;case 102:xl(102);break;case 104:xl(104);break;case 106:xl(106);break;case 125:xl(125);break;case 132:xl(132);break;case 133:xl(133);break;case 141:xl(141);break;case 154:xl(154);break;case 155:xl(155);break;case 161:xl(161);break;case 171:xl(171);break;case 192:xl(192);break;case 199:xl(199);break;case 203:xl(203);break;case 222:xl(222);break;case 225:xl(225);break;case 228:xl(228);break;case 234:xl(234);break;case 240:xl(240);break;case 251:xl(251);break;case 252:xl(252);break;case 257:xl(257);break;case 261:xl(261);break;case 262:xl(262);break;case 263:xl(263);break;case 267:xl(267);break;case 97:xl(97);break;case 176:xl(176);break;case 221:xl(221);break;case 77:xl(77);break;case 166:xl(166);break;default:xl(194)}}function Ia(){Vl.startNonterminal(\"NCName\",Pl);switch(Hl){case 19:Sl(19);break;case 70:Sl(70);break;case 75:Sl(75);break;case 79:Sl(79);break;case 80:Sl(80);break;case 84:Sl(84);break;case 88:Sl(88);break;case 89:Sl(89);break;case 90:Sl(90);break;case 94:Sl(94);break;case 105:Sl(105);break;case 109:Sl(109);break;case 113:Sl(113);break;case 118:Sl(118);break;case 122:Sl(122);break;case 123:Sl(123);break;case 126:Sl(126);break;case 128:Sl(128);break;case 131:Sl(131);break;case 137:Sl(137);break;case 146:Sl(146);break;case 148:Sl(148);break;case 150:Sl(150);break;case 151:Sl(151);break;case 160:Sl(160);break;case 162:Sl(162);break;case 163:Sl(163);break;case 164:Sl(164);break;case 172:Sl(172);break;case 174:Sl(174);break;case 178:Sl(178);break;case 180:Sl(180);break;case 181:Sl(181);break;case 186:Sl(186);break;case 198:Sl(198);break;case 200:Sl(200);break;case 201:Sl(201);break;case 220:Sl(220);break;case 224:Sl(224);break;case 236:Sl(236);break;case 237:Sl(237);break;case 248:Sl(248);break;case 249:Sl(249);break;case 254:Sl(254);break;case 266:Sl(266);break;case 270:Sl(270);break;case 73:Sl(73);break;case 74:Sl(74);break;case 82:Sl(82);break;case 93:Sl(93);break;case 96:Sl(96);break;case 103:Sl(103);break;case 108:Sl(108);break;case 110:Sl(110);break;case 111:Sl(111);break;case 112:Sl(112);break;case 119:Sl(119);break;case 120:Sl(120);break;case 121:Sl(121);break;case 124:Sl(124);break;case 129:Sl(129);break;case 134:Sl(134);break;case 135:Sl(135);break;case 136:Sl(136);break;case 145:Sl(145);break;case 152:Sl(152);break;case 153:Sl(153);break;case 159:Sl(159);break;case 165:Sl(165);break;case 170:Sl(170);break;case 182:Sl(182);break;case 184:Sl(184);break;case 185:Sl(185);break;case 191:Sl(191);break;case 202:Sl(202);break;case 206:Sl(206);break;case 212:Sl(212);break;case 213:Sl(213);break;case 216:Sl(216);break;case 218:Sl(218);break;case 219:Sl(219);break;case 226:Sl(226);break;case 227:Sl(227);break;case 229:Sl(229);break;case 235:Sl(235);break;case 243:Sl(243);break;case 244:Sl(244);break;case 250:Sl(250);break;case 253:Sl(253);break;case 256:Sl(256);break;case 260:Sl(260);break;case 262:Sl(262);break;case 274:Sl(274);break;case 72:Sl(72);break;case 81:Sl(81);break;case 83:Sl(83);break;case 85:Sl(85);break;case 86:Sl(86);break;case 91:Sl(91);break;case 98:Sl(98);break;case 101:Sl(101);break;case 102:Sl(102);break;case 104:Sl(104);break;case 106:Sl(106);break;case 125:Sl(125);break;case 132:Sl(132);break;case 133:Sl(133);break;case 141:Sl(141);break;case 154:Sl(154);break;case 155:Sl(155);break;case 161:Sl(161);break;case 171:Sl(171);break;case 192:Sl(192);break;case 199:Sl(199);break;case 203:Sl(203);break;case 222:Sl(222);break;case 225:Sl(225);break;case 228:Sl(228);break;case 234:Sl(234);break;case 240:Sl(240);break;case 251:Sl(251);break;case 252:Sl(252);break;case 257:Sl(257);break;case 261:Sl(261);break;case 263:Sl(263);break;case 267:Sl(267);break;case 97:Sl(97);break;case 176:Sl(176);break;case 221:Sl(221);break;case 77:Sl(77);break;case 166:Sl(166);break;default:Sl(194)}Vl.endNonterminal(\"NCName\",Pl)}function qa(){switch(Hl){case 19:xl(19);break;case 70:xl(70);break;case 75:xl(75);break;case 79:xl(79);break;case 80:xl(80);break;case 84:xl(84);break;case 88:xl(88);break;case 89:xl(89);break;case 90:xl(90);break;case 94:xl(94);break;case 105:xl(105);break;case 109:xl(109);break;case 113:xl(113);break;case 118:xl(118);break;case 122:xl(122);break;case 123:xl(123);break;case 126:xl(126);break;case 128:xl(128);break;case 131:xl(131);break;case 137:xl(137);break;case 146:xl(146);break;case 148:xl(148);break;case 150:xl(150);break;case 151:xl(151);break;case 160:xl(160);break;case 162:xl(162);break;case 163:xl(163);break;case 164:xl(164);break;case 172:xl(172);break;case 174:xl(174);break;case 178:xl(178);break;case 180:xl(180);break;case 181:xl(181);break;case 186:xl(186);break;case 198:xl(198);break;case 200:xl(200);break;case 201:xl(201);break;case 220:xl(220);break;case 224:xl(224);break;case 236:xl(236);break;case 237:xl(237);break;case 248:xl(248);break;case 249:xl(249);break;case 254:xl(254);break;case 266:xl(266);break;case 270:xl(270);break;case 73:xl(73);break;case 74:xl(74);break;case 82:xl(82);break;case 93:xl(93);break;case 96:xl(96);break;case 103:xl(103);break;case 108:xl(108);break;case 110:xl(110);break;case 111:xl(111);break;case 112:xl(112);break;case 119:xl(119);break;case 120:xl(120);break;case 121:xl(121);break;case 124:xl(124);break;case 129:xl(129);break;case 134:xl(134);break;case 135:xl(135);break;case 136:xl(136);break;case 145:xl(145);break;case 152:xl(152);break;case 153:xl(153);break;case 159:xl(159);break;case 165:xl(165);break;case 170:xl(170);break;case 182:xl(182);break;case 184:xl(184);break;case 185:xl(185);break;case 191:xl(191);break;case 202:xl(202);break;case 206:xl(206);break;case 212:xl(212);break;case 213:xl(213);break;case 216:xl(216);break;case 218:xl(218);break;case 219:xl(219);break;case 226:xl(226);break;case 227:xl(227);break;case 229:xl(229);break;case 235:xl(235);break;case 243:xl(243);break;case 244:xl(244);break;case 250:xl(250);break;case 253:xl(253);break;case 256:xl(256);break;case 260:xl(260);break;case 262:xl(262);break;case 274:xl(274);break;case 72:xl(72);break;case 81:xl(81);break;case 83:xl(83);break;case 85:xl(85);break;case 86:xl(86);break;case 91:xl(91);break;case 98:xl(98);break;case 101:xl(101);break;case 102:xl(102);break;case 104:xl(104);break;case 106:xl(106);break;case 125:xl(125);break;case 132:xl(132);break;case 133:xl(133);break;case 141:xl(141);break;case 154:xl(154);break;case 155:xl(155);break;case 161:xl(161);break;case 171:xl(171);break;case 192:xl(192);break;case 199:xl(199);break;case 203:xl(203);break;case 222:xl(222);break;case 225:xl(225);break;case 228:xl(228);break;case 234:xl(234);break;case 240:xl(240);break;case 251:xl(251);break;case 252:xl(252);break;case 257:xl(257);break;case 261:xl(261);break;case 263:xl(263);break;case 267:xl(267);break;case 97:xl(97);break;case 176:xl(176);break;case 221:xl(221);break;case 77:xl(77);break;case 166:xl(166);break;default:xl(194)}}function Ra(){Vl.startNonterminal(\"MainModule\",Pl),l(),Nl(),Ua(),Vl.endNonterminal(\"MainModule\",Pl)}function Ua(){Vl.startNonterminal(\"Program\",Pl),$a(),Vl.endNonterminal(\"Program\",Pl)}function za(){Vl.startNonterminal(\"Statements\",Pl);for(;;){kl(277);switch(Hl){case 34:Ll(268);break;case 35:Ol(251);break;case 46:Ll(283);break;case 47:Ll(264);break;case 54:Ol(4);break;case 55:Ol(1);break;case 59:Ol(3);break;case 66:Ll(256);break;case 68:Ll(271);break;case 77:Ll(199);break;case 82:Ll(280);break;case 121:Ll(279);break;case 132:Ll(202);break;case 137:Ll(207);break;case 174:Ll(204);break;case 218:Ll(205);break;case 219:Ll(206);break;case 260:Ll(209);break;case 276:Ll(276);break;case 278:Ll(272);break;case 5:case 45:Ll(185);break;case 31:case 32:Ll(254);break;case 40:case 42:Ll(266);break;case 86:case 102:Ll(200);break;case 110:case 159:Ll(208);break;case 184:case 216:Ll(267);break;case 103:case 129:case 235:case 262:Ll(196);break;case 8:case 9:case 10:case 11:case 44:Ll(191);break;case 78:case 124:case 165:case 167:case 242:Ll(190);break;case 96:case 119:case 202:case 244:case 250:case 256:Ll(203);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(197);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 104:case 105:case 106:case 108:case 109:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 131:case 133:case 134:case 141:case 145:case 146:case 148:case 150:case 151:case 152:case 153:case 154:case 155:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 236:case 237:case 240:case 243:case 248:case 249:case 251:case 252:case 253:case 254:case 257:case 261:case 263:case 266:case 267:case 270:case 274:Ll(194);break;default:_l=Hl}if(_l!=25&&_l!=53&&_l!=282&&_l!=12805&&_l!=12806&&_l!=12808&&_l!=12809&&_l!=12810&&_l!=12811&&_l!=12844&&_l!=12845&&_l!=12846&&_l!=12870&&_l!=12872&&_l!=12873&&_l!=12874&&_l!=12875&&_l!=12877&&_l!=12878&&_l!=12879&&_l!=12880&&_l!=12881&&_l!=12882&&_l!=12883&&_l!=12884&&_l!=12885&&_l!=12886&&_l!=12888&&_l!=12889&&_l!=12890&&_l!=12891&&_l!=12893&&_l!=12894&&_l!=12896&&_l!=12897&&_l!=12898&&_l!=12901&&_l!=12902&&_l!=12903&&_l!=12904&&_l!=12905&&_l!=12906&&_l!=12908&&_l!=12909&&_l!=12910&&_l!=12911&&_l!=12912&&_l!=12913&&_l!=12918&&_l!=12919&&_l!=12920&&_l!=12921&&_l!=12922&&_l!=12923&&_l!=12924&&_l!=12925&&_l!=12926&&_l!=12928&&_l!=12929&&_l!=12931&&_l!=12932&&_l!=12933&&_l!=12934&&_l!=12935&&_l!=12936&&_l!=12937&&_l!=12941&&_l!=12945&&_l!=12946&&_l!=12948&&_l!=12950&&_l!=12951&&_l!=12952&&_l!=12953&&_l!=12954&&_l!=12955&&_l!=12959&&_l!=12960&&_l!=12961&&_l!=12962&&_l!=12963&&_l!=12964&&_l!=12965&&_l!=12966&&_l!=12967&&_l!=12970&&_l!=12971&&_l!=12972&&_l!=12974&&_l!=12976&&_l!=12978&&_l!=12980&&_l!=12981&&_l!=12982&&_l!=12984&&_l!=12985&&_l!=12986&&_l!=12991&&_l!=12992&&_l!=12994&&_l!=12998&&_l!=12999&&_l!=13e3&&_l!=13001&&_l!=13002&&_l!=13003&&_l!=13006&&_l!=13012&&_l!=13013&&_l!=13016&&_l!=13018&&_l!=13019&&_l!=13020&&_l!=13021&&_l!=13022&&_l!=13024&&_l!=13025&&_l!=13026&&_l!=13027&&_l!=13028&&_l!=13029&&_l!=13034&&_l!=13035&&_l!=13036&&_l!=13037&&_l!=13040&&_l!=13042&&_l!=13043&&_l!=13044&&_l!=13048&&_l!=13049&&_l!=13050&&_l!=13051&&_l!=13052&&_l!=13053&&_l!=13054&&_l!=13056&&_l!=13057&&_l!=13060&&_l!=13061&&_l!=13062&&_l!=13063&&_l!=13066&&_l!=13067&&_l!=13070&&_l!=13074&&_l!=16134&&_l!=20997&&_l!=20998&&_l!=21e3&&_l!=21001&&_l!=21002&&_l!=21003&&_l!=21036&&_l!=21037&&_l!=21038&&_l!=21062&&_l!=21064&&_l!=21065&&_l!=21066&&_l!=21067&&_l!=21069&&_l!=21070&&_l!=21071&&_l!=21072&&_l!=21073&&_l!=21074&&_l!=21075&&_l!=21076&&_l!=21077&&_l!=21078&&_l!=21080&&_l!=21081&&_l!=21082&&_l!=21083&&_l!=21085&&_l!=21086&&_l!=21088&&_l!=21089&&_l!=21090&&_l!=21093&&_l!=21094&&_l!=21095&&_l!=21096&&_l!=21097&&_l!=21098&&_l!=21100&&_l!=21101&&_l!=21102&&_l!=21103&&_l!=21104&&_l!=21105&&_l!=21110&&_l!=21111&&_l!=21112&&_l!=21113&&_l!=21114&&_l!=21115&&_l!=21116&&_l!=21117&&_l!=21118&&_l!=21120&&_l!=21121&&_l!=21123&&_l!=21124&&_l!=21125&&_l!=21126&&_l!=21127&&_l!=21128&&_l!=21129&&_l!=21133&&_l!=21137&&_l!=21138&&_l!=21140&&_l!=21142&&_l!=21143&&_l!=21144&&_l!=21145&&_l!=21146&&_l!=21147&&_l!=21151&&_l!=21152&&_l!=21153&&_l!=21154&&_l!=21155&&_l!=21156&&_l!=21157&&_l!=21158&&_l!=21159&&_l!=21162&&_l!=21163&&_l!=21164&&_l!=21166&&_l!=21168&&_l!=21170&&_l!=21172&&_l!=21173&&_l!=21174&&_l!=21176&&_l!=21177&&_l!=21178&&_l!=21183&&_l!=21184&&_l!=21186&&_l!=21190&&_l!=21191&&_l!=21192&&_l!=21193&&_l!=21194&&_l!=21195&&_l!=21198&&_l!=21204&&_l!=21205&&_l!=21208&&_l!=21210&&_l!=21211&&_l!=21212&&_l!=21213&&_l!=21214&&_l!=21216&&_l!=21217&&_l!=21218&&_l!=21219&&_l!=21220&&_l!=21221&&_l!=21226&&_l!=21227&&_l!=21228&&_l!=21229&&_l!=21232&&_l!=21234&&_l!=21235&&_l!=21236&&_l!=21240&&_l!=21241&&_l!=21242&&_l!=21243&&_l!=21244&&_l!=21245&&_l!=21246&&_l!=21248&&_l!=21249&&_l!=21252&&_l!=21253&&_l!=21254&&_l!=21255&&_l!=21258&&_l!=21259&&_l!=21262&&_l!=21266&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284&&_l!=144389&&_l!=144390&&_l!=144392&&_l!=144393&&_l!=144394&&_l!=144395&&_l!=144428&&_l!=144429&&_l!=144430&&_l!=144454&&_l!=144456&&_l!=144457&&_l!=144458&&_l!=144459&&_l!=144461&&_l!=144462&&_l!=144463&&_l!=144464&&_l!=144465&&_l!=144466&&_l!=144467&&_l!=144468&&_l!=144469&&_l!=144470&&_l!=144472&&_l!=144473&&_l!=144474&&_l!=144475&&_l!=144477&&_l!=144478&&_l!=144480&&_l!=144481&&_l!=144482&&_l!=144485&&_l!=144486&&_l!=144487&&_l!=144488&&_l!=144489&&_l!=144490&&_l!=144492&&_l!=144493&&_l!=144494&&_l!=144495&&_l!=144496&&_l!=144497&&_l!=144502&&_l!=144503&&_l!=144504&&_l!=144505&&_l!=144506&&_l!=144507&&_l!=144508&&_l!=144509&&_l!=144510&&_l!=144512&&_l!=144513&&_l!=144515&&_l!=144516&&_l!=144517&&_l!=144518&&_l!=144519&&_l!=144520&&_l!=144521&&_l!=144525&&_l!=144529&&_l!=144530&&_l!=144532&&_l!=144534&&_l!=144535&&_l!=144536&&_l!=144537&&_l!=144538&&_l!=144539&&_l!=144543&&_l!=144544&&_l!=144545&&_l!=144546&&_l!=144547&&_l!=144548&&_l!=144549&&_l!=144550&&_l!=144551&&_l!=144554&&_l!=144555&&_l!=144556&&_l!=144558&&_l!=144560&&_l!=144562&&_l!=144564&&_l!=144565&&_l!=144566&&_l!=144568&&_l!=144569&&_l!=144570&&_l!=144575&&_l!=144576&&_l!=144578&&_l!=144582&&_l!=144583&&_l!=144584&&_l!=144585&&_l!=144586&&_l!=144587&&_l!=144590&&_l!=144596&&_l!=144597&&_l!=144600&&_l!=144602&&_l!=144603&&_l!=144604&&_l!=144605&&_l!=144606&&_l!=144608&&_l!=144609&&_l!=144610&&_l!=144611&&_l!=144612&&_l!=144613&&_l!=144618&&_l!=144619&&_l!=144620&&_l!=144621&&_l!=144624&&_l!=144626&&_l!=144627&&_l!=144628&&_l!=144632&&_l!=144633&&_l!=144634&&_l!=144635&&_l!=144636&&_l!=144637&&_l!=144638&&_l!=144640&&_l!=144641&&_l!=144644&&_l!=144645&&_l!=144646&&_l!=144647&&_l!=144650&&_l!=144651&&_l!=144654&&_l!=144658){_l=Kl(6,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Qa(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(6,Pl,_l)}}if(_l!=-1&&_l!=53&&_l!=16134&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284)break;Nl(),Ka()}Vl.endNonterminal(\"Statements\",Pl)}function Wa(){for(;;){kl(277);switch(Hl){case 34:Ll(268);break;case 35:Ol(251);break;case 46:Ll(283);break;case 47:Ll(264);break;case 54:Ol(4);break;case 55:Ol(1);break;case 59:Ol(3);break;case 66:Ll(256);break;case 68:Ll(271);break;case 77:Ll(199);break;case 82:Ll(280);break;case 121:Ll(279);break;case 132:Ll(202);break;case 137:Ll(207);break;case 174:Ll(204);break;case 218:Ll(205);break;case 219:Ll(206);break;case 260:Ll(209);break;case 276:Ll(276);break;case 278:Ll(272);break;case 5:case 45:Ll(185);break;case 31:case 32:Ll(254);break;case 40:case 42:Ll(266);break;case 86:case 102:Ll(200);break;case 110:case 159:Ll(208);break;case 184:case 216:Ll(267);break;case 103:case 129:case 235:case 262:Ll(196);break;case 8:case 9:case 10:case 11:case 44:Ll(191);break;case 78:case 124:case 165:case 167:case 242:Ll(190);break;case 96:case 119:case 202:case 244:case 250:case 256:Ll(203);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(197);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 104:case 105:case 106:case 108:case 109:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 131:case 133:case 134:case 141:case 145:case 146:case 148:case 150:case 151:case 152:case 153:case 154:case 155:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 236:case 237:case 240:case 243:case 248:case 249:case 251:case 252:case 253:case 254:case 257:case 261:case 263:case 266:case 267:case 270:case 274:Ll(194);break;default:_l=Hl}if(_l!=25&&_l!=53&&_l!=282&&_l!=12805&&_l!=12806&&_l!=12808&&_l!=12809&&_l!=12810&&_l!=12811&&_l!=12844&&_l!=12845&&_l!=12846&&_l!=12870&&_l!=12872&&_l!=12873&&_l!=12874&&_l!=12875&&_l!=12877&&_l!=12878&&_l!=12879&&_l!=12880&&_l!=12881&&_l!=12882&&_l!=12883&&_l!=12884&&_l!=12885&&_l!=12886&&_l!=12888&&_l!=12889&&_l!=12890&&_l!=12891&&_l!=12893&&_l!=12894&&_l!=12896&&_l!=12897&&_l!=12898&&_l!=12901&&_l!=12902&&_l!=12903&&_l!=12904&&_l!=12905&&_l!=12906&&_l!=12908&&_l!=12909&&_l!=12910&&_l!=12911&&_l!=12912&&_l!=12913&&_l!=12918&&_l!=12919&&_l!=12920&&_l!=12921&&_l!=12922&&_l!=12923&&_l!=12924&&_l!=12925&&_l!=12926&&_l!=12928&&_l!=12929&&_l!=12931&&_l!=12932&&_l!=12933&&_l!=12934&&_l!=12935&&_l!=12936&&_l!=12937&&_l!=12941&&_l!=12945&&_l!=12946&&_l!=12948&&_l!=12950&&_l!=12951&&_l!=12952&&_l!=12953&&_l!=12954&&_l!=12955&&_l!=12959&&_l!=12960&&_l!=12961&&_l!=12962&&_l!=12963&&_l!=12964&&_l!=12965&&_l!=12966&&_l!=12967&&_l!=12970&&_l!=12971&&_l!=12972&&_l!=12974&&_l!=12976&&_l!=12978&&_l!=12980&&_l!=12981&&_l!=12982&&_l!=12984&&_l!=12985&&_l!=12986&&_l!=12991&&_l!=12992&&_l!=12994&&_l!=12998&&_l!=12999&&_l!=13e3&&_l!=13001&&_l!=13002&&_l!=13003&&_l!=13006&&_l!=13012&&_l!=13013&&_l!=13016&&_l!=13018&&_l!=13019&&_l!=13020&&_l!=13021&&_l!=13022&&_l!=13024&&_l!=13025&&_l!=13026&&_l!=13027&&_l!=13028&&_l!=13029&&_l!=13034&&_l!=13035&&_l!=13036&&_l!=13037&&_l!=13040&&_l!=13042&&_l!=13043&&_l!=13044&&_l!=13048&&_l!=13049&&_l!=13050&&_l!=13051&&_l!=13052&&_l!=13053&&_l!=13054&&_l!=13056&&_l!=13057&&_l!=13060&&_l!=13061&&_l!=13062&&_l!=13063&&_l!=13066&&_l!=13067&&_l!=13070&&_l!=13074&&_l!=16134&&_l!=20997&&_l!=20998&&_l!=21e3&&_l!=21001&&_l!=21002&&_l!=21003&&_l!=21036&&_l!=21037&&_l!=21038&&_l!=21062&&_l!=21064&&_l!=21065&&_l!=21066&&_l!=21067&&_l!=21069&&_l!=21070&&_l!=21071&&_l!=21072&&_l!=21073&&_l!=21074&&_l!=21075&&_l!=21076&&_l!=21077&&_l!=21078&&_l!=21080&&_l!=21081&&_l!=21082&&_l!=21083&&_l!=21085&&_l!=21086&&_l!=21088&&_l!=21089&&_l!=21090&&_l!=21093&&_l!=21094&&_l!=21095&&_l!=21096&&_l!=21097&&_l!=21098&&_l!=21100&&_l!=21101&&_l!=21102&&_l!=21103&&_l!=21104&&_l!=21105&&_l!=21110&&_l!=21111&&_l!=21112&&_l!=21113&&_l!=21114&&_l!=21115&&_l!=21116&&_l!=21117&&_l!=21118&&_l!=21120&&_l!=21121&&_l!=21123&&_l!=21124&&_l!=21125&&_l!=21126&&_l!=21127&&_l!=21128&&_l!=21129&&_l!=21133&&_l!=21137&&_l!=21138&&_l!=21140&&_l!=21142&&_l!=21143&&_l!=21144&&_l!=21145&&_l!=21146&&_l!=21147&&_l!=21151&&_l!=21152&&_l!=21153&&_l!=21154&&_l!=21155&&_l!=21156&&_l!=21157&&_l!=21158&&_l!=21159&&_l!=21162&&_l!=21163&&_l!=21164&&_l!=21166&&_l!=21168&&_l!=21170&&_l!=21172&&_l!=21173&&_l!=21174&&_l!=21176&&_l!=21177&&_l!=21178&&_l!=21183&&_l!=21184&&_l!=21186&&_l!=21190&&_l!=21191&&_l!=21192&&_l!=21193&&_l!=21194&&_l!=21195&&_l!=21198&&_l!=21204&&_l!=21205&&_l!=21208&&_l!=21210&&_l!=21211&&_l!=21212&&_l!=21213&&_l!=21214&&_l!=21216&&_l!=21217&&_l!=21218&&_l!=21219&&_l!=21220&&_l!=21221&&_l!=21226&&_l!=21227&&_l!=21228&&_l!=21229&&_l!=21232&&_l!=21234&&_l!=21235&&_l!=21236&&_l!=21240&&_l!=21241&&_l!=21242&&_l!=21243&&_l!=21244&&_l!=21245&&_l!=21246&&_l!=21248&&_l!=21249&&_l!=21252&&_l!=21253&&_l!=21254&&_l!=21255&&_l!=21258&&_l!=21259&&_l!=21262&&_l!=21266&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284&&_l!=144389&&_l!=144390&&_l!=144392&&_l!=144393&&_l!=144394&&_l!=144395&&_l!=144428&&_l!=144429&&_l!=144430&&_l!=144454&&_l!=144456&&_l!=144457&&_l!=144458&&_l!=144459&&_l!=144461&&_l!=144462&&_l!=144463&&_l!=144464&&_l!=144465&&_l!=144466&&_l!=144467&&_l!=144468&&_l!=144469&&_l!=144470&&_l!=144472&&_l!=144473&&_l!=144474&&_l!=144475&&_l!=144477&&_l!=144478&&_l!=144480&&_l!=144481&&_l!=144482&&_l!=144485&&_l!=144486&&_l!=144487&&_l!=144488&&_l!=144489&&_l!=144490&&_l!=144492&&_l!=144493&&_l!=144494&&_l!=144495&&_l!=144496&&_l!=144497&&_l!=144502&&_l!=144503&&_l!=144504&&_l!=144505&&_l!=144506&&_l!=144507&&_l!=144508&&_l!=144509&&_l!=144510&&_l!=144512&&_l!=144513&&_l!=144515&&_l!=144516&&_l!=144517&&_l!=144518&&_l!=144519&&_l!=144520&&_l!=144521&&_l!=144525&&_l!=144529&&_l!=144530&&_l!=144532&&_l!=144534&&_l!=144535&&_l!=144536&&_l!=144537&&_l!=144538&&_l!=144539&&_l!=144543&&_l!=144544&&_l!=144545&&_l!=144546&&_l!=144547&&_l!=144548&&_l!=144549&&_l!=144550&&_l!=144551&&_l!=144554&&_l!=144555&&_l!=144556&&_l!=144558&&_l!=144560&&_l!=144562&&_l!=144564&&_l!=144565&&_l!=144566&&_l!=144568&&_l!=144569&&_l!=144570&&_l!=144575&&_l!=144576&&_l!=144578&&_l!=144582&&_l!=144583&&_l!=144584&&_l!=144585&&_l!=144586&&_l!=144587&&_l!=144590&&_l!=144596&&_l!=144597&&_l!=144600&&_l!=144602&&_l!=144603&&_l!=144604&&_l!=144605&&_l!=144606&&_l!=144608&&_l!=144609&&_l!=144610&&_l!=144611&&_l!=144612&&_l!=144613&&_l!=144618&&_l!=144619&&_l!=144620&&_l!=144621&&_l!=144624&&_l!=144626&&_l!=144627&&_l!=144628&&_l!=144632&&_l!=144633&&_l!=144634&&_l!=144635&&_l!=144636&&_l!=144637&&_l!=144638&&_l!=144640&&_l!=144641&&_l!=144644&&_l!=144645&&_l!=144646&&_l!=144647&&_l!=144650&&_l!=144651&&_l!=144654&&_l!=144658){_l=Kl(6,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Qa(),Jl(6,t,-1);continue}catch(a){Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(6,t,-2);break}}}if(_l!=-1&&_l!=53&&_l!=16134&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284)break;Qa()}}function Xa(){Vl.startNonterminal(\"StatementsAndExpr\",Pl),za(),Nl(),G(),Vl.endNonterminal(\"StatementsAndExpr\",Pl)}function Va(){Wa(),Y()}function $a(){Vl.startNonterminal(\"StatementsAndOptionalExpr\",Pl),za(),Hl!=25&&Hl!=282&&(Nl(),G()),Vl.endNonterminal(\"StatementsAndOptionalExpr\",Pl)}function Ja(){Wa(),Hl!=25&&Hl!=282&&Y()}function Ka(){Vl.startNonterminal(\"Statement\",Pl);switch(Hl){case 132:Ll(188);break;case 137:Ll(195);break;case 174:Ll(192);break;case 250:Ll(189);break;case 262:Ll(186);break;case 276:Ll(276);break;case 31:case 32:Ll(254);break;case 86:case 102:Ll(187);break;case 152:case 243:case 253:case 267:Ll(184);break;default:_l=Hl}if(_l==2836||_l==3103||_l==3104||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17675||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27412||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==35871||_l==35872||_l==36116||_l==36895||_l==36896||_l==37140||_l==37407||_l==37408||_l==37652||_l==37919||_l==37920||_l==38164||_l==38431||_l==38432||_l==38676||_l==39455||_l==39456||_l==39700||_l==39967||_l==39968||_l==40212||_l==40479||_l==40480||_l==40724||_l==40991||_l==40992||_l==41236||_l==41503||_l==41504||_l==41748||_l==42015||_l==42016||_l==42260||_l==42527||_l==42528||_l==42772||_l==43039||_l==43040||_l==43284||_l==43551||_l==43552||_l==43796||_l==44063||_l==44064||_l==44308||_l==45087||_l==45088||_l==45332||_l==45599||_l==45600||_l==45844||_l==46111||_l==46112||_l==46356||_l==46623||_l==46624||_l==46868||_l==47647||_l==47648||_l==47892||_l==48159||_l==48160||_l==48404||_l==49183||_l==49184||_l==49428||_l==49695||_l==49696||_l==49940||_l==50207||_l==50208||_l==50452||_l==51743||_l==51744||_l==51988||_l==52255||_l==52256||_l==52500||_l==52767||_l==52768||_l==53012||_l==53279||_l==53280||_l==53524||_l==53791||_l==53792||_l==54036||_l==54303||_l==54304||_l==54548||_l==55327||_l==55328||_l==55572||_l==55839||_l==55840||_l==56084||_l==56351||_l==56352||_l==56596||_l==56863||_l==56864||_l==57108||_l==57375||_l==57376||_l==57620||_l==57887||_l==57888||_l==58132||_l==60447||_l==60448||_l==60692||_l==60959||_l==60960||_l==61204||_l==61471||_l==61472||_l==61716||_l==61983||_l==61984||_l==62228||_l==62495||_l==62496||_l==62740||_l==63007||_l==63008||_l==63252||_l==63519||_l==63520||_l==63764||_l==64031||_l==64032||_l==64276||_l==64543||_l==64544||_l==64788||_l==65567||_l==65568||_l==65812||_l==66079||_l==66080||_l==66324||_l==67103||_l==67104||_l==67348||_l==67615||_l==67616||_l==67860||_l==68127||_l==68128||_l==68372||_l==68639||_l==68640||_l==68884||_l==69151||_l==69152||_l==69396||_l==69663||_l==69664||_l==69908||_l==70175||_l==70176||_l==70420||_l==72223||_l==72224||_l==72468||_l==74271||_l==74272||_l==74516||_l==74783||_l==74784||_l==75028||_l==75807||_l==75808||_l==76052||_l==76831||_l==76832||_l==77076||_l==77343||_l==77344||_l==77588||_l==77855||_l==77856||_l==78100||_l==78367||_l==78368||_l==78612||_l==78879||_l==78880||_l==79124||_l==79391||_l==79392||_l==79636||_l==81439||_l==81440||_l==81684||_l==81951||_l==81952||_l==82196||_l==82463||_l==82464||_l==82708||_l==82975||_l==82976||_l==83220||_l==83487||_l==83488||_l==83732||_l==83999||_l==84e3||_l==84244||_l==84511||_l==84512||_l==84756||_l==85023||_l==85024||_l==85268||_l==85535||_l==85536||_l==85780||_l==87071||_l==87072||_l==87316||_l==87583||_l==87584||_l==87828||_l==88095||_l==88096||_l==88340||_l==89119||_l==89120||_l==89364||_l==90143||_l==90144||_l==90388||_l==91167||_l==91168||_l==91412||_l==92191||_l==92192||_l==92436||_l==92703||_l==92704||_l==92948||_l==93215||_l==93216||_l==93460||_l==94239||_l==94240||_l==94484||_l==94751||_l==94752||_l==94996||_l==95263||_l==95264||_l==95508||_l==97823||_l==97824||_l==98068||_l==98335||_l==98336||_l==98580||_l==99359||_l==99360||_l==99604||_l==101407||_l==101408||_l==101652||_l==101919||_l==101920||_l==102164||_l==102431||_l==102432||_l==102676||_l==102943||_l==102944||_l==103188||_l==103455||_l==103456||_l==103700||_l==103967||_l==103968||_l==104212||_l==105503||_l==105504||_l==105748||_l==108575||_l==108576||_l==108820||_l==109087||_l==109088||_l==109332||_l==110623||_l==110624||_l==110868||_l==111647||_l==111648||_l==111892||_l==112159||_l==112160||_l==112404||_l==112671||_l==112672||_l==112916||_l==113183||_l==113184||_l==113428||_l==113695||_l==113696||_l==113940||_l==114719||_l==114720||_l==114964||_l==115231||_l==115232||_l==115476||_l==115743||_l==115744||_l==115988||_l==116255||_l==116256||_l==116500||_l==116767||_l==116768||_l==117012||_l==117279||_l==117280||_l==117524||_l==119839||_l==119840||_l==120084||_l==120351||_l==120352||_l==120596||_l==120863||_l==120864||_l==121108||_l==121375||_l==121376||_l==121620||_l==122911||_l==122912||_l==123156||_l==123935||_l==123936||_l==124180||_l==124447||_l==124448||_l==124692||_l==124959||_l==124960||_l==125204||_l==127007||_l==127008||_l==127252||_l==127519||_l==127520||_l==127764||_l==128031||_l==128032||_l==128276||_l==128543||_l==128544||_l==128788||_l==129055||_l==129056||_l==129300||_l==129567||_l==129568||_l==129812||_l==130079||_l==130080||_l==130324||_l==131103||_l==131104||_l==131348||_l==131615||_l==131616||_l==131860||_l==133151||_l==133152||_l==133396||_l==133663||_l==133664||_l==133908||_l==134175||_l==134176||_l==134420||_l==134687||_l==134688||_l==134932||_l==136223||_l==136224||_l==136468||_l==136735||_l==136736||_l==136980||_l==138271||_l==138272||_l==138516||_l==140319||_l==140320||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(7,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ya(),_l=-1}catch(a){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),ef(),_l=-2}catch(f){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),nf(),_l=-3}catch(l){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),kf(),_l=-12}catch(c){_l=-13}}}}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(7,Pl,_l)}}switch(_l){case-2:Za();break;case-3:tf();break;case 90198:rf();break;case 90214:of();break;case 113284:af();break;case 16009:case 16046:case 116910:case 119945:case 128649:lf();break;case 17560:df();break;case 17651:mf();break;case 141562:wf();break;case 17661:Sf();break;case-12:case 16134:Cf();break;case-13:Lf();break;case 53:Of();break;default:Ga()}Vl.endNonterminal(\"Statement\",Pl)}function Qa(){switch(Hl){case 132:Ll(188);break;case 137:Ll(195);break;case 174:Ll(192);break;case 250:Ll(189);break;case 262:Ll(186);break;case 276:Ll(276);break;case 31:case 32:Ll(254);break;case 86:case 102:Ll(187);break;case 152:case 243:case 253:case 267:Ll(184);break;default:_l=Hl}if(_l==2836||_l==3103||_l==3104||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17675||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27412||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==35871||_l==35872||_l==36116||_l==36895||_l==36896||_l==37140||_l==37407||_l==37408||_l==37652||_l==37919||_l==37920||_l==38164||_l==38431||_l==38432||_l==38676||_l==39455||_l==39456||_l==39700||_l==39967||_l==39968||_l==40212||_l==40479||_l==40480||_l==40724||_l==40991||_l==40992||_l==41236||_l==41503||_l==41504||_l==41748||_l==42015||_l==42016||_l==42260||_l==42527||_l==42528||_l==42772||_l==43039||_l==43040||_l==43284||_l==43551||_l==43552||_l==43796||_l==44063||_l==44064||_l==44308||_l==45087||_l==45088||_l==45332||_l==45599||_l==45600||_l==45844||_l==46111||_l==46112||_l==46356||_l==46623||_l==46624||_l==46868||_l==47647||_l==47648||_l==47892||_l==48159||_l==48160||_l==48404||_l==49183||_l==49184||_l==49428||_l==49695||_l==49696||_l==49940||_l==50207||_l==50208||_l==50452||_l==51743||_l==51744||_l==51988||_l==52255||_l==52256||_l==52500||_l==52767||_l==52768||_l==53012||_l==53279||_l==53280||_l==53524||_l==53791||_l==53792||_l==54036||_l==54303||_l==54304||_l==54548||_l==55327||_l==55328||_l==55572||_l==55839||_l==55840||_l==56084||_l==56351||_l==56352||_l==56596||_l==56863||_l==56864||_l==57108||_l==57375||_l==57376||_l==57620||_l==57887||_l==57888||_l==58132||_l==60447||_l==60448||_l==60692||_l==60959||_l==60960||_l==61204||_l==61471||_l==61472||_l==61716||_l==61983||_l==61984||_l==62228||_l==62495||_l==62496||_l==62740||_l==63007||_l==63008||_l==63252||_l==63519||_l==63520||_l==63764||_l==64031||_l==64032||_l==64276||_l==64543||_l==64544||_l==64788||_l==65567||_l==65568||_l==65812||_l==66079||_l==66080||_l==66324||_l==67103||_l==67104||_l==67348||_l==67615||_l==67616||_l==67860||_l==68127||_l==68128||_l==68372||_l==68639||_l==68640||_l==68884||_l==69151||_l==69152||_l==69396||_l==69663||_l==69664||_l==69908||_l==70175||_l==70176||_l==70420||_l==72223||_l==72224||_l==72468||_l==74271||_l==74272||_l==74516||_l==74783||_l==74784||_l==75028||_l==75807||_l==75808||_l==76052||_l==76831||_l==76832||_l==77076||_l==77343||_l==77344||_l==77588||_l==77855||_l==77856||_l==78100||_l==78367||_l==78368||_l==78612||_l==78879||_l==78880||_l==79124||_l==79391||_l==79392||_l==79636||_l==81439||_l==81440||_l==81684||_l==81951||_l==81952||_l==82196||_l==82463||_l==82464||_l==82708||_l==82975||_l==82976||_l==83220||_l==83487||_l==83488||_l==83732||_l==83999||_l==84e3||_l==84244||_l==84511||_l==84512||_l==84756||_l==85023||_l==85024||_l==85268||_l==85535||_l==85536||_l==85780||_l==87071||_l==87072||_l==87316||_l==87583||_l==87584||_l==87828||_l==88095||_l==88096||_l==88340||_l==89119||_l==89120||_l==89364||_l==90143||_l==90144||_l==90388||_l==91167||_l==91168||_l==91412||_l==92191||_l==92192||_l==92436||_l==92703||_l==92704||_l==92948||_l==93215||_l==93216||_l==93460||_l==94239||_l==94240||_l==94484||_l==94751||_l==94752||_l==94996||_l==95263||_l==95264||_l==95508||_l==97823||_l==97824||_l==98068||_l==98335||_l==98336||_l==98580||_l==99359||_l==99360||_l==99604||_l==101407||_l==101408||_l==101652||_l==101919||_l==101920||_l==102164||_l==102431||_l==102432||_l==102676||_l==102943||_l==102944||_l==103188||_l==103455||_l==103456||_l==103700||_l==103967||_l==103968||_l==104212||_l==105503||_l==105504||_l==105748||_l==108575||_l==108576||_l==108820||_l==109087||_l==109088||_l==109332||_l==110623||_l==110624||_l==110868||_l==111647||_l==111648||_l==111892||_l==112159||_l==112160||_l==112404||_l==112671||_l==112672||_l==112916||_l==113183||_l==113184||_l==113428||_l==113695||_l==113696||_l==113940||_l==114719||_l==114720||_l==114964||_l==115231||_l==115232||_l==115476||_l==115743||_l==115744||_l==115988||_l==116255||_l==116256||_l==116500||_l==116767||_l==116768||_l==117012||_l==117279||_l==117280||_l==117524||_l==119839||_l==119840||_l==120084||_l==120351||_l==120352||_l==120596||_l==120863||_l==120864||_l==121108||_l==121375||_l==121376||_l==121620||_l==122911||_l==122912||_l==123156||_l==123935||_l==123936||_l==124180||_l==124447||_l==124448||_l==124692||_l==124959||_l==124960||_l==125204||_l==127007||_l==127008||_l==127252||_l==127519||_l==127520||_l==127764||_l==128031||_l==128032||_l==128276||_l==128543||_l==128544||_l==128788||_l==129055||_l==129056||_l==129300||_l==129567||_l==129568||_l==129812||_l==130079||_l==130080||_l==130324||_l==131103||_l==131104||_l==131348||_l==131615||_l==131616||_l==131860||_l==133151||_l==133152||_l==133396||_l==133663||_l==133664||_l==133908||_l==134175||_l==134176||_l==134420||_l==134687||_l==134688||_l==134932||_l==136223||_l==136224||_l==136468||_l==136735||_l==136736||_l==136980||_l==138271||_l==138272||_l==138516||_l==140319||_l==140320||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(7,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ya(),Jl(7,t,-1),_l=-15}catch(a){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),ef(),Jl(7,t,-2),_l=-15}catch(f){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),nf(),Jl(7,t,-3),_l=-15}catch(l){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),kf(),Jl(7,t,-12),_l=-15}catch(c){_l=-13,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(7,t,-13)}}}}}}switch(_l){case-2:ef();break;case-3:nf();break;case 90198:sf();break;case 90214:uf();break;case 113284:ff();break;case 16009:case 16046:case 116910:case 119945:case 128649:cf();break;case 17560:vf();break;case 17651:gf();break;case 141562:Ef();break;case 17661:xf();break;case-12:case 16134:kf();break;case-13:Af();break;case 53:Mf();break;case-15:break;default:Ya()}}function Ga(){Vl.startNonterminal(\"ApplyStatement\",Pl),Pf(),Sl(53),Vl.endNonterminal(\"ApplyStatement\",Pl)}function Ya(){Hf(),xl(53)}function Za(){Vl.startNonterminal(\"AssignStatement\",Pl),Sl(31),kl(254),Nl(),hi(),kl(27),Sl(52),kl(266),Nl(),_f(),Sl(53),Vl.endNonterminal(\"AssignStatement\",Pl)}function ef(){xl(31),kl(254),pi(),kl(27),xl(52),kl(266),Df(),xl(53)}function tf(){Vl.startNonterminal(\"BlockStatement\",Pl),Sl(276),kl(276),Nl(),za(),Sl(282),Vl.endNonterminal(\"BlockStatement\",Pl)}function nf(){xl(276),kl(276),Wa(),xl(282)}function rf(){Vl.startNonterminal(\"BreakStatement\",Pl),Sl(86),kl(59),Sl(176),kl(28),Sl(53),Vl.endNonterminal(\"BreakStatement\",Pl)}function sf(){xl(86),kl(59),xl(176),kl(28),xl(53)}function of(){Vl.startNonterminal(\"ContinueStatement\",Pl),Sl(102),kl(59),Sl(176),kl(28),Sl(53),Vl.endNonterminal(\"ContinueStatement\",Pl)}function uf(){xl(102),kl(59),xl(176),kl(28),xl(53)}function af(){Vl.startNonterminal(\"ExitStatement\",Pl),Sl(132),kl(71),Sl(221),kl(266),Nl(),_f(),Sl(53),Vl.endNonterminal(\"ExitStatement\",Pl)}function ff(){xl(132),kl(71),xl(221),kl(266),Df(),xl(53)}function lf(){Vl.startNonterminal(\"FLWORStatement\",Pl),tt();for(;;){kl(173);if(Hl==220)break;Nl(),rt()}Nl(),hf(),Vl.endNonterminal(\"FLWORStatement\",Pl)}function cf(){nt();for(;;){kl(173);if(Hl==220)break;it()}pf()}function hf(){Vl.startNonterminal(\"ReturnStatement\",Pl),Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"ReturnStatement\",Pl)}function pf(){xl(220),kl(269),Qa()}function df(){Vl.startNonterminal(\"IfStatement\",Pl),Sl(152),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37),kl(77),Sl(245),kl(269),Nl(),Ka(),kl(48),Sl(122),kl(269),Nl(),Ka(),Vl.endNonterminal(\"IfStatement\",Pl)}function vf(){xl(152),kl(22),xl(34),kl(266),Y(),xl(37),kl(77),xl(245),kl(269),Qa(),kl(48),xl(122),kl(269),Qa()}function mf(){Vl.startNonterminal(\"SwitchStatement\",Pl),Sl(243),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),yf(),kl(113);if(Hl!=88)break}Sl(109),kl(70),Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"SwitchStatement\",Pl)}function gf(){xl(243),kl(22),xl(34),kl(266),Y(),xl(37);for(;;){kl(35),bf(),kl(113);if(Hl!=88)break}xl(109),kl(70),xl(220),kl(269),Qa()}function yf(){Vl.startNonterminal(\"SwitchCaseStatement\",Pl);for(;;){Sl(88),kl(266),Nl(),dn();if(Hl!=88)break}Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"SwitchCaseStatement\",Pl)}function bf(){for(;;){xl(88),kl(266),vn();if(Hl!=88)break}xl(220),kl(269),Qa()}function wf(){Vl.startNonterminal(\"TryCatchStatement\",Pl),Sl(250),kl(87),Nl(),tf();for(;;){kl(36),Sl(91),kl(256),Nl(),_n(),Nl(),tf(),kl(277);switch(Hl){case 91:Ll(278);break;default:_l=Hl}if(_l==38491||_l==45659||_l==46171||_l==60507||_l==65627||_l==67163||_l==74843||_l==76891||_l==77403||_l==82011||_l==83035||_l==84059||_l==88155||_l==91227||_l==92251||_l==95323||_l==102491||_l==127067||_l==127579||_l==130139){_l=Kl(8,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{kl(36),xl(91),kl(256),Dn(),nf(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(8,Pl,_l)}}if(_l!=-1&&_l!=2651&&_l!=3163&&_l!=35931&&_l!=36955&&_l!=37467&&_l!=37979&&_l!=39515&&_l!=40027&&_l!=40539&&_l!=41051&&_l!=41563&&_l!=42075&&_l!=42587&&_l!=43099&&_l!=43611&&_l!=44123&&_l!=45147&&_l!=46683&&_l!=47707&&_l!=48219&&_l!=49243&&_l!=49755&&_l!=50267&&_l!=51803&&_l!=52315&&_l!=52827&&_l!=53339&&_l!=53851&&_l!=54363&&_l!=55387&&_l!=55899&&_l!=56411&&_l!=56923&&_l!=57435&&_l!=57947&&_l!=61019&&_l!=61531&&_l!=62043&&_l!=62555&&_l!=63067&&_l!=63579&&_l!=64091&&_l!=64603&&_l!=66139&&_l!=67675&&_l!=68187&&_l!=68699&&_l!=69211&&_l!=69723&&_l!=70235&&_l!=72283&&_l!=74331&&_l!=75867&&_l!=77915&&_l!=78427&&_l!=78939&&_l!=79451&&_l!=81499&&_l!=82523&&_l!=83547&&_l!=84571&&_l!=85083&&_l!=85595&&_l!=87131&&_l!=87643&&_l!=89179&&_l!=90203&&_l!=92763&&_l!=93275&&_l!=94299&&_l!=94811&&_l!=97883&&_l!=98395&&_l!=99419&&_l!=101467&&_l!=101979&&_l!=103003&&_l!=103515&&_l!=104027&&_l!=105563&&_l!=108635&&_l!=109147&&_l!=110683&&_l!=111707&&_l!=112219&&_l!=112731&&_l!=113243&&_l!=113755&&_l!=114779&&_l!=115291&&_l!=115803&&_l!=116315&&_l!=116827&&_l!=117339&&_l!=119899&&_l!=120411&&_l!=120923&&_l!=121435&&_l!=122971&&_l!=123995&&_l!=124507&&_l!=125019&&_l!=128091&&_l!=128603&&_l!=129115&&_l!=129627&&_l!=131163&&_l!=131675&&_l!=133211&&_l!=133723&&_l!=134235&&_l!=134747&&_l!=136283&&_l!=136795&&_l!=138331&&_l!=140379)break}Vl.endNonterminal(\"TryCatchStatement\",Pl)}function Ef(){xl(250),kl(87),nf(),kl(36),xl(91),kl(256),Dn(),nf();for(;;){kl(277);switch(Hl){case 91:Ll(278);break;default:_l=Hl}if(_l==38491||_l==45659||_l==46171||_l==60507||_l==65627||_l==67163||_l==74843||_l==76891||_l==77403||_l==82011||_l==83035||_l==84059||_l==88155||_l==91227||_l==92251||_l==95323||_l==102491||_l==127067||_l==127579||_l==130139){_l=Kl(8,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{kl(36),xl(91),kl(256),Dn(),nf(),Jl(8,t,-1);continue}catch(a){Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(8,t,-2);break}}}if(_l!=-1&&_l!=2651&&_l!=3163&&_l!=35931&&_l!=36955&&_l!=37467&&_l!=37979&&_l!=39515&&_l!=40027&&_l!=40539&&_l!=41051&&_l!=41563&&_l!=42075&&_l!=42587&&_l!=43099&&_l!=43611&&_l!=44123&&_l!=45147&&_l!=46683&&_l!=47707&&_l!=48219&&_l!=49243&&_l!=49755&&_l!=50267&&_l!=51803&&_l!=52315&&_l!=52827&&_l!=53339&&_l!=53851&&_l!=54363&&_l!=55387&&_l!=55899&&_l!=56411&&_l!=56923&&_l!=57435&&_l!=57947&&_l!=61019&&_l!=61531&&_l!=62043&&_l!=62555&&_l!=63067&&_l!=63579&&_l!=64091&&_l!=64603&&_l!=66139&&_l!=67675&&_l!=68187&&_l!=68699&&_l!=69211&&_l!=69723&&_l!=70235&&_l!=72283&&_l!=74331&&_l!=75867&&_l!=77915&&_l!=78427&&_l!=78939&&_l!=79451&&_l!=81499&&_l!=82523&&_l!=83547&&_l!=84571&&_l!=85083&&_l!=85595&&_l!=87131&&_l!=87643&&_l!=89179&&_l!=90203&&_l!=92763&&_l!=93275&&_l!=94299&&_l!=94811&&_l!=97883&&_l!=98395&&_l!=99419&&_l!=101467&&_l!=101979&&_l!=103003&&_l!=103515&&_l!=104027&&_l!=105563&&_l!=108635&&_l!=109147&&_l!=110683&&_l!=111707&&_l!=112219&&_l!=112731&&_l!=113243&&_l!=113755&&_l!=114779&&_l!=115291&&_l!=115803&&_l!=116315&&_l!=116827&&_l!=117339&&_l!=119899&&_l!=120411&&_l!=120923&&_l!=121435&&_l!=122971&&_l!=123995&&_l!=124507&&_l!=125019&&_l!=128091&&_l!=128603&&_l!=129115&&_l!=129627&&_l!=131163&&_l!=131675&&_l!=133211&&_l!=133723&&_l!=134235&&_l!=134747&&_l!=136283&&_l!=136795&&_l!=138331&&_l!=140379)break;kl(36),xl(91),kl(256),Dn(),nf()}}function Sf(){Vl.startNonterminal(\"TypeswitchStatement\",Pl),Sl(253),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),Tf(),kl(113);if(Hl!=88)break}Sl(109),kl(95),Hl==31&&(Sl(31),kl(254),Nl(),hi()),kl(70),Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"TypeswitchStatement\",Pl)}function xf(){xl(253),kl(22),xl(34),kl(266),Y(),xl(37);for(;;){kl(35),Nf(),kl(113);if(Hl!=88)break}xl(109),kl(95),Hl==31&&(xl(31),kl(254),pi()),kl(70),xl(220),kl(269),Qa()}function Tf(){Vl.startNonterminal(\"CaseStatement\",Pl),Sl(88),kl(261),Hl==31&&(Sl(31),kl(254),Nl(),hi(),kl(30),Sl(79)),kl(259),Nl(),ms(),kl(70),Sl(220),kl(269),Nl(),Ka(),Vl.endNonterminal(\"CaseStatement\",Pl)}function Nf(){xl(88),kl(261),Hl==31&&(xl(31),kl(254),pi(),kl(30),xl(79)),kl(259),gs(),kl(70),xl(220),kl(269),Qa()}function Cf(){Vl.startNonterminal(\"VarDeclStatement\",Pl);for(;;){kl(98);if(Hl!=32)break;Nl(),B()}Sl(262),kl(21),Sl(31),kl(254),Nl(),hi(),kl(157),Hl==79&&(Nl(),ds()),kl(145),Hl==52&&(Sl(52),kl(266),Nl(),_f());for(;;){if(Hl!=41)break;Sl(41),kl(21),Sl(31),kl(254),Nl(),hi(),kl(157),Hl==79&&(Nl(),ds()),kl(145),Hl==52&&(Sl(52),kl(266),Nl(),_f())}Sl(53),Vl.endNonterminal(\"VarDeclStatement\",Pl)}function kf(){for(;;){kl(98);if(Hl!=32)break;j()}xl(262),kl(21),xl(31),kl(254),pi(),kl(157),Hl==79&&vs(),kl(145),Hl==52&&(xl(52),kl(266),Df());for(;;){if(Hl!=41)break;xl(41),kl(21),xl(31),kl(254),pi(),kl(157),Hl==79&&vs(),kl(145),Hl==52&&(xl(52),kl(266),Df())}xl(53)}function Lf(){Vl.startNonterminal(\"WhileStatement\",Pl),Sl(267),kl(22),Sl(34),kl(266),Nl(),G(),Sl(37),kl(269),Nl(),Ka(),Vl.endNonterminal(\"WhileStatement\",Pl)}function Af(){xl(267),kl(22),xl(34),kl(266),Y(),xl(37),kl(269),Qa()}function Of(){Vl.startNonterminal(\"VoidStatement\",Pl),Sl(53),Vl.endNonterminal(\"VoidStatement\",Pl)}function Mf(){xl(53)}function _f(){Vl.startNonterminal(\"ExprSingle\",Pl);switch(Hl){case 137:Ll(235);break;case 174:Ll(232);break;case 250:Ll(231);break;case 152:case 243:case 253:Ll(228);break;default:_l=Hl}switch(_l){case 16009:case 16046:case 116910:case 119945:case 128649:Z();break;case 17560:Sn();break;case 17651:ln();break;case 141562:Tn();break;case 17661:mn();break;default:Pf()}Vl.endNonterminal(\"ExprSingle\",Pl)}function Df(){switch(Hl){case 137:Ll(235);break;case 174:Ll(232);break;case 250:Ll(231);break;case 152:case 243:case 253:Ll(228);break;default:_l=Hl}switch(_l){case 16009:case 16046:case 116910:case 119945:case 128649:et();break;case 17560:xn();break;case 17651:cn();break;case 141562:Nn();break;case 17661:gn();break;default:Hf()}}function Pf(){Vl.startNonterminal(\"ExprSimple\",Pl);switch(Hl){case 77:Ll(230);break;case 218:Ll(233);break;case 219:Ll(234);break;case 110:case 159:Ll(236);break;case 103:case 129:case 235:Ll(229);break;default:_l=Hl}if(_l==133851){_l=Kl(9,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ho(),_l=-6}catch(a){_l=-11}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(9,Pl,_l)}}switch(_l){case 16001:case 16107:on();break;case 97951:case 98463:Oo();break;case 97902:case 98414:_o();break;case 98010:Bo();break;case-6:case 98011:Po();break;case 15975:Wo();break;case 85102:Bf();break;case 85151:Ff();break;case 85210:qf();break;case-11:Uf();break;case 85069:Wf();break;default:Pn()}Vl.endNonterminal(\"ExprSimple\",Pl)}function Hf(){switch(Hl){case 77:Ll(230);break;case 218:Ll(233);break;case 219:Ll(234);break;case 110:case 159:Ll(236);break;case 103:case 129:case 235:Ll(229);break;default:_l=Hl}if(_l==133851){_l=Kl(9,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ho(),Jl(9,t,-6),_l=-13}catch(a){_l=-11,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(9,t,-11)}}}switch(_l){case 16001:case 16107:un();break;case 97951:case 98463:Mo();break;case 97902:case 98414:Do();break;case 98010:jo();break;case-6:case 98011:Ho();break;case 15975:Xo();break;case 85102:jf();break;case 85151:If();break;case 85210:Rf();break;case-11:zf();break;case 85069:Xf();break;case-13:break;default:Hn()}}function Bf(){Vl.startNonterminal(\"JSONDeleteExpr\",Pl),Sl(110),kl(56),Sl(166),kl(263),Nl(),Yr(),Vl.endNonterminal(\"JSONDeleteExpr\",Pl)}function jf(){xl(110),kl(56),xl(166),kl(263),Zr()}function Ff(){Vl.startNonterminal(\"JSONInsertExpr\",Pl);switch(Hl){case 159:Ll(56);break;default:_l=Hl}_l=Kl(10,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(159),kl(56),xl(166),kl(266),Df(),xl(163),kl(266),Df();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(266),Df(),Jl(11,f,-1)}catch(m){Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,f,-2)}_l=-2}}_l==-1&&(xl(81),kl(69),xl(211),kl(266),Df()),_l=-1}catch(g){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(10,Pl,_l)}switch(_l){case-1:Sl(159),kl(56),Sl(166),kl(266),Nl(),_f(),Sl(163),kl(266),Nl(),_f();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(266),Df(),_l=-1}catch(m){_l=-2}Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,Pl,_l)}}_l==-1&&(Sl(81),kl(69),Sl(211),kl(266),Nl(),_f());break;default:Sl(159),kl(56),Sl(166),kl(266),Nl(),hl(),Sl(163),kl(266),Nl(),_f()}Vl.endNonterminal(\"JSONInsertExpr\",Pl)}function If(){switch(Hl){case 159:Ll(56);break;default:_l=Hl}_l=Kl(10,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(159),kl(56),xl(166),kl(266),Df(),xl(163),kl(266),Df();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(266),Df(),Jl(11,f,-1)}catch(m){Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,f,-2)}_l=-2}}_l==-1&&(xl(81),kl(69),xl(211),kl(266),Df()),Jl(10,t,-1),_l=-3}catch(g){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(10,t,-2)}}switch(_l){case-1:xl(159),kl(56),xl(166),kl(266),Df(),xl(163),kl(266),Df();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(266),Df(),Jl(11,f,-1)}catch(m){Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,f,-2)}_l=-2}}_l==-1&&(xl(81),kl(69),xl(211),kl(266),Df());break;case-3:break;default:xl(159),kl(56),xl(166),kl(266),pl(),xl(163),kl(266),Df()}}function qf(){Vl.startNonterminal(\"JSONRenameExpr\",Pl),Sl(218),kl(56),Sl(166),kl(263),Nl(),Yr(),Sl(79),kl(266),Nl(),_f(),Vl.endNonterminal(\"JSONRenameExpr\",Pl)}function Rf(){xl(218),kl(56),xl(166),kl(263),Zr(),xl(79),kl(266),Df()}function Uf(){Vl.startNonterminal(\"JSONReplaceExpr\",Pl),Sl(219),kl(82),Sl(261),kl(64),Sl(196),kl(56),Sl(166),kl(263),Nl(),Yr(),Sl(270),kl(266),Nl(),_f(),Vl.endNonterminal(\"JSONReplaceExpr\",Pl)}function zf(){xl(219),kl(82),xl(261),kl(64),xl(196),kl(56),xl(166),kl(263),Zr(),xl(270),kl(266),Df()}function Wf(){Vl.startNonterminal(\"JSONAppendExpr\",Pl),Sl(77),kl(56),Sl(166),kl(266),Nl(),_f(),Sl(163),kl(266),Nl(),_f(),Vl.endNonterminal(\"JSONAppendExpr\",Pl)}function Xf(){xl(77),kl(56),xl(166),kl(266),Df(),xl(163),kl(266),Df()}function Vf(){Vl.startNonterminal(\"CommonContent\",Pl);switch(Hl){case 12:Sl(12);break;case 23:Sl(23);break;case 277:Sl(277);break;case 283:Sl(283);break;default:yl()}Vl.endNonterminal(\"CommonContent\",Pl)}function $f(){switch(Hl){case 12:xl(12);break;case 23:xl(23);break;case 277:xl(277);break;case 283:xl(283);break;default:bl()}}function Jf(){Vl.startNonterminal(\"ContentExpr\",Pl),Xa(),Vl.endNonterminal(\"ContentExpr\",Pl)}function Kf(){Va()}function Qf(){Vl.startNonterminal(\"CompDocConstructor\",Pl),Sl(119),kl(87),Nl(),yl(),Vl.endNonterminal(\"CompDocConstructor\",Pl)}function Gf(){xl(119),kl(87),bl()}function Yf(){Vl.startNonterminal(\"CompAttrConstructor\",Pl),Sl(82),kl(257);switch(Hl){case 276:Sl(276),kl(266),Nl(),G(),Sl(282);break;default:Nl(),Ha()}kl(87);switch(Hl){case 276:Ll(276);break;default:_l=Hl}if(_l==144660){_l=Kl(12,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(12,Pl,_l)}}switch(_l){case-1:Sl(276),kl(88),Sl(282);break;default:Nl(),yl()}Vl.endNonterminal(\"CompAttrConstructor\",Pl)}function Zf(){xl(82),kl(257);switch(Hl){case 276:xl(276),kl(266),Y(),xl(282);break;default:Ba()}kl(87);switch(Hl){case 276:Ll(276);break;default:_l=Hl}if(_l==144660){_l=Kl(12,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),Jl(12,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(12,t,-2)}}}switch(_l){case-1:xl(276),kl(88),xl(282);break;case-3:break;default:bl()}}function el(){Vl.startNonterminal(\"CompPIConstructor\",Pl),Sl(216),kl(250);switch(Hl){case 276:Sl(276),kl(266),Nl(),G(),Sl(282);break;default:Nl(),Ia()}kl(87);switch(Hl){case 276:Ll(276);break;default:_l=Hl}if(_l==144660){_l=Kl(13,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(13,Pl,_l)}}switch(_l){case-1:Sl(276),kl(88),Sl(282);break;default:Nl(),yl()}Vl.endNonterminal(\"CompPIConstructor\",Pl)}function tl(){xl(216),kl(250);switch(Hl){case 276:xl(276),kl(266),Y(),xl(282);break;default:qa()}kl(87);switch(Hl){case 276:Ll(276);break;default:_l=Hl}if(_l==144660){_l=Kl(13,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),Jl(13,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(13,t,-2)}}}switch(_l){case-1:xl(276),kl(88),xl(282);break;case-3:break;default:bl()}}function nl(){Vl.startNonterminal(\"CompCommentConstructor\",Pl),Sl(96),kl(87),Nl(),yl(),Vl.endNonterminal(\"CompCommentConstructor\",Pl)}function rl(){xl(96),kl(87),bl()}function il(){Vl.startNonterminal(\"CompTextConstructor\",Pl),Sl(244),kl(87),Nl(),yl(),Vl.endNonterminal(\"CompTextConstructor\",Pl)}function sl(){xl(244),kl(87),bl()}function ol(){Vl.startNonterminal(\"PrimaryExpr\",Pl);switch(Hl){case 184:Ll(255);break;case 216:Ll(253);break;case 276:Ll(276);break;case 82:case 121:Ll(258);break;case 96:case 244:Ll(93);break;case 119:case 202:case 256:Ll(139);break;case 6:case 70:case 72:case 73:case 74:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 93:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 111:case 112:case 113:case 118:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 141:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 186:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 206:case 212:case 213:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 228:case 229:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(92);break;default:_l=Hl}if(_l==2836||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==36116||_l==37140||_l==37652||_l==38164||_l==38676||_l==39700||_l==40212||_l==40724||_l==41236||_l==41748||_l==42260||_l==42772||_l==43284||_l==43796||_l==44308||_l==45332||_l==45844||_l==46356||_l==46868||_l==47892||_l==48404||_l==49428||_l==49940||_l==50452||_l==51988||_l==52500||_l==53012||_l==53524||_l==54036||_l==54548||_l==55572||_l==56084||_l==56596||_l==57108||_l==57620||_l==58132||_l==60692||_l==61204||_l==61716||_l==62228||_l==62740||_l==63252||_l==63764||_l==64276||_l==64788||_l==65812||_l==66324||_l==67348||_l==67860||_l==68372||_l==68884||_l==69396||_l==69908||_l==70420||_l==72468||_l==74516||_l==75028||_l==76052||_l==77076||_l==77588||_l==78100||_l==78612||_l==79124||_l==79636||_l==81684||_l==82196||_l==82708||_l==83220||_l==83732||_l==84244||_l==84756||_l==85268||_l==85780||_l==87316||_l==87828||_l==88340||_l==89364||_l==90388||_l==91412||_l==92436||_l==92948||_l==93460||_l==94484||_l==94996||_l==95508||_l==98068||_l==98580||_l==99604||_l==101652||_l==102164||_l==102676||_l==103188||_l==103700||_l==104212||_l==105748||_l==108820||_l==109332||_l==110868||_l==111892||_l==112404||_l==112916||_l==113428||_l==113940||_l==114964||_l==115476||_l==115988||_l==116500||_l==117012||_l==117524||_l==120084||_l==120596||_l==121108||_l==121620||_l==123156||_l==124180||_l==124692||_l==125204||_l==127252||_l==127764||_l==128276||_l==128788||_l==129300||_l==129812||_l==130324||_l==131348||_l==131860||_l==133396||_l==133908||_l==134420||_l==134932||_l==136468||_l==136980||_l==138516||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(14,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{bl(),_l=-10}catch(a){_l=-11}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(14,Pl,_l)}}switch(_l){case 8:case 9:case 10:case 11:oi();break;case 31:li();break;case 34:di();break;case 44:mi();break;case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:Si();break;case 141514:yi();break;case 141568:wi();break;case 32:case 78:case 120:case 124:case 145:case 152:case 165:case 167:case 185:case 191:case 226:case 227:case 242:case 243:case 253:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14969:case 14970:case 14971:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14994:case 14996:case 14998:case 14999:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15014:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15034:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:os();break;case-10:case 27412:yl();break;case-11:ll();break;case 68:ml();break;case 278:al();break;default:Li()}Vl.endNonterminal(\"PrimaryExpr\",Pl)}function ul(){switch(Hl){case 184:Ll(255);break;case 216:Ll(253);break;case 276:Ll(276);break;case 82:case 121:Ll(258);break;case 96:case 244:Ll(93);break;case 119:case 202:case 256:Ll(139);break;case 6:case 70:case 72:case 73:case 74:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 93:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 111:case 112:case 113:case 118:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 141:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 186:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 206:case 212:case 213:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 228:case 229:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(92);break;default:_l=Hl}if(_l==2836||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==36116||_l==37140||_l==37652||_l==38164||_l==38676||_l==39700||_l==40212||_l==40724||_l==41236||_l==41748||_l==42260||_l==42772||_l==43284||_l==43796||_l==44308||_l==45332||_l==45844||_l==46356||_l==46868||_l==47892||_l==48404||_l==49428||_l==49940||_l==50452||_l==51988||_l==52500||_l==53012||_l==53524||_l==54036||_l==54548||_l==55572||_l==56084||_l==56596||_l==57108||_l==57620||_l==58132||_l==60692||_l==61204||_l==61716||_l==62228||_l==62740||_l==63252||_l==63764||_l==64276||_l==64788||_l==65812||_l==66324||_l==67348||_l==67860||_l==68372||_l==68884||_l==69396||_l==69908||_l==70420||_l==72468||_l==74516||_l==75028||_l==76052||_l==77076||_l==77588||_l==78100||_l==78612||_l==79124||_l==79636||_l==81684||_l==82196||_l==82708||_l==83220||_l==83732||_l==84244||_l==84756||_l==85268||_l==85780||_l==87316||_l==87828||_l==88340||_l==89364||_l==90388||_l==91412||_l==92436||_l==92948||_l==93460||_l==94484||_l==94996||_l==95508||_l==98068||_l==98580||_l==99604||_l==101652||_l==102164||_l==102676||_l==103188||_l==103700||_l==104212||_l==105748||_l==108820||_l==109332||_l==110868||_l==111892||_l==112404||_l==112916||_l==113428||_l==113940||_l==114964||_l==115476||_l==115988||_l==116500||_l==117012||_l==117524||_l==120084||_l==120596||_l==121108||_l==121620||_l==123156||_l==124180||_l==124692||_l==125204||_l==127252||_l==127764||_l==128276||_l==128788||_l==129300||_l==129812||_l==130324||_l==131348||_l==131860||_l==133396||_l==133908||_l==134420||_l==134932||_l==136468||_l==136980||_l==138516||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(14,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{bl(),Jl(14,t,-10),_l=-14}catch(a){_l=-11,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(14,t,-11)}}}switch(_l){case 8:case 9:case 10:case 11:ui();break;case 31:ci();break;case 34:vi();break;case 44:gi();break;case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:xi();break;case 141514:bi();break;case 141568:Ei();break;case 32:case 78:case 120:case 124:case 145:case 152:case 165:case 167:case 185:case 191:case 226:case 227:case 242:case 243:case 253:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14969:case 14970:case 14971:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14994:case 14996:case 14998:case 14999:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15014:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15034:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:us();break;case-10:case 27412:bl();break;case-11:cl();break;case 68:gl();break;case 278:fl();break;case-14:break;default:Ai()}}function al(){Vl.startNonterminal(\"JSONSimpleObjectUnion\",Pl),Sl(278),kl(272),Hl!=281&&(Nl(),G()),Sl(281),Vl.endNonterminal(\"JSONSimpleObjectUnion\",Pl)}function fl(){xl(278),kl(272),Hl!=281&&Y(),xl(281)}function ll(){Vl.startNonterminal(\"ObjectConstructor\",Pl),Sl(276),kl(273),Hl!=282&&(Nl(),hl()),Sl(282),Vl.endNonterminal(\"ObjectConstructor\",Pl)}function cl(){xl(276),kl(273),Hl!=282&&pl(),xl(282)}function hl(){Vl.startNonterminal(\"PairConstructorList\",Pl),dl();for(;;){if(Hl!=41)break;Sl(41),kl(266),Nl(),dl()}Vl.endNonterminal(\"PairConstructorList\",Pl)}function pl(){vl();for(;;){if(Hl!=41)break;xl(41),kl(266),vl()}}function dl(){Vl.startNonterminal(\"PairConstructor\",Pl),_f(),Sl(49),kl(266),Nl(),_f(),Vl.endNonterminal(\"PairConstructor\",Pl)}function vl(){Df(),xl(49),kl(266),Df()}function ml(){Vl.startNonterminal(\"ArrayConstructor\",Pl),Sl(68),kl(271),Hl!=69&&(Nl(),G()),Sl(69),Vl.endNonterminal(\"ArrayConstructor\",Pl)}function gl(){xl(68),kl(271),Hl!=69&&Y(),xl(69)}function yl(){Vl.startNonterminal(\"BlockExpr\",Pl),Sl(276),kl(276),Nl(),$a(),Sl(282),Vl.endNonterminal(\"BlockExpr\",Pl)}function bl(){xl(276),kl(276),Ja(),xl(282)}function wl(){Vl.startNonterminal(\"FunctionDecl\",Pl),Sl(145),kl(254),Nl(),Ha(),kl(22),Sl(34),kl(94),Hl==31&&(Nl(),U()),Sl(37),kl(148),Hl==79&&(Nl(),El()),kl(118);switch(Hl){case 276:Sl(276),kl(276),Nl(),$a(),Sl(282);break;default:Sl(133)}Vl.endNonterminal(\"FunctionDecl\",Pl)}function El(){Vl.startNonterminal(\"ReturnType\",Pl),Sl(79),kl(259),Nl(),ms(),Vl.endNonterminal(\"ReturnType\",Pl)}function Sl(e){Hl==e?(Nl(),Vl.terminal(i.TOKEN[Hl],Bl,jl>Gl?Gl:jl),Dl=Bl,Pl=jl,Hl=Fl,Hl!=0&&(Bl=Il,jl=ql,Fl=0)):Ml(Bl,jl,0,Hl,e)}function xl(e){Hl==e?(Dl=Bl,Pl=jl,Hl=Fl,Hl!=0&&(Bl=Il,jl=ql,Fl=0)):Ml(Bl,jl,0,Hl,e)}function Tl(e){var t=Dl,n=Pl,r=Hl,i=Bl,s=jl;Hl=e,Bl=Yl,jl=Zl,Fl=0,Pa(),Dl=t,Pl=n,Hl=r,Hl!=0&&(Bl=i,jl=s)}function Nl(){Pl!=Bl&&(Vl.whitespace(Pl,Bl),Pl=Bl)}function Cl(e){var t;for(;;){t=ec(e);if(t!=22){if(t!=36)break;Tl(t)}}return t}function kl(e){Hl==0&&(Hl=Cl(e),Bl=Yl,jl=Zl)}function Ll(e){Fl==0&&(Fl=Cl(e),Il=Yl,ql=Zl),_l=Fl<<9|Hl}function Al(e){Hl==0&&(Hl=ec(e),Bl=Yl,jl=Zl)}function Ol(e){Fl==0&&(Fl=ec(e),Il=Yl,ql=Zl),_l=Fl<<9|Hl}function Ml(e,t,r,i,s){throw t>=Ul&&(Rl=e,Ul=t,zl=r,Wl=i,Xl=s),new n.ParseException(Rl,Ul,zl,Wl,Xl)}function Jl(e,t,n){$l[(t<<4)+e]=n}function Kl(e,t){var n=$l[(t<<4)+e];return typeof n!=\"undefined\"?n:0}function ec(e){var t=!1;Yl=Zl;var n=Zl,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<Gl?Ql.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<Gl?Ql.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,Zl=n)}r>>=12;if(r==0){Zl=n-1;var f=Zl<Gl?Ql.charCodeAt(Zl):0;return f>=56320&&f<57344&&--Zl,Ml(Yl,Zl,s,-1,-1)}if(t)for(var d=r>>9;d>0;--d){--Zl;var f=Zl<Gl?Ql.charCodeAt(Zl):0;f>=56320&&f<57344&&--Zl}else Zl-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return Ql},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=Ql.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+Ql.substring(e.getBegin(),Math.min(Ql.length,e.getBegin()+64))+\"...\"},this.parse_XQuery=function(){Vl.startNonterminal(\"XQuery\",Pl),kl(274),Nl(),o(),Sl(25),Vl.endNonterminal(\"XQuery\",Pl)};var _l,Dl,Pl,Hl,Bl,jl,Fl,Il,ql,Rl,Ul,zl,Wl,Xl,Vl,$l,Ql,Gl,Yl,Zl};r.getTokenSet=function(e){var t=[],n=e<0?-e:r.INITIAL[e]&4095;for(var i=0;i<284;i+=32){var s=i,o=(i>>5)*3612+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&15)+r.EXPECTED[a>>4]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[70,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,38,30,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,38,38],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,355,371,387,423,423,423,415,339,331,339,331,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,440,440,440,440,440,440,440,324,339,339,339,339,339,339,339,339,401,423,423,424,422,423,423,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,338,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,70,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,30,30,30,30,30,30,30,30,30,30,30,30,38,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,38,30,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,38,38,38,38,38,38,38,38,38,38,38,38,30,30,38,38,38,38,38,38,38,69,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,38,30,38,30,30,38],r.INITIAL=[1,12290,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286],r.TRANSITION=[38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25307,18176,18180,18180,18180,18210,18180,18180,18180,18180,18222,18180,18180,18180,18180,18198,18180,18182,18238,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,38623,20771,20784,20796,20808,43870,38625,20832,38672,38672,38672,43215,38672,38672,50505,28718,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19553,19028,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,22954,20869,38672,38672,38672,37958,38672,38672,36976,20909,20888,38672,38672,38672,38672,39926,20282,20925,20958,38672,38672,38672,43215,38672,38672,25928,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,20997,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,21013,21118,38672,38672,38672,24651,38672,38672,44696,38672,42922,38824,21095,21058,21048,21080,21111,48022,20832,38672,38672,38672,43215,21139,38672,25530,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,21157,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,18776,18792,20360,18810,18830,18835,19257,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38666,38672,38672,38672,21880,38671,38672,36460,38672,21173,38661,21224,38672,21231,38672,42738,42750,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,21247,38672,38672,38672,28875,38672,38672,21266,38672,38672,21288,21300,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,31059,38672,38672,38672,38672,38672,38672,24860,21316,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,18988,50434,18503,18525,21353,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,24749,21390,38672,38672,38672,23220,38672,38672,49687,45814,21411,38672,38672,38672,38672,41859,18366,21448,21478,38672,38672,38672,43215,38672,38672,50505,21515,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,46185,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,21462,21573,21537,21537,21537,21580,21532,21537,21542,21615,21558,21644,21596,21609,21631,21657,21669,21681,20832,38672,38672,38672,21337,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,21697,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,30462,38672,38672,38672,22025,23251,38672,22249,23257,42922,30462,38672,21719,21725,21741,21766,21750,21795,38672,38672,38672,46035,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,30475,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,24785,38672,38672,38672,30470,38672,38672,38672,37115,50393,21856,21832,21850,21834,21872,21896,21908,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,21924,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,37301,25812,27394,21985,22003,21985,22017,27392,21987,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,42072,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,20981,38672,38672,38672,30470,24643,38672,48413,22054,26165,22041,22070,22074,22074,22090,20979,48442,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,22114,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,47221,22137,22155,22137,22169,47219,22139,22193,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,22230,38672,22247,38672,29641,22265,42072,33771,38672,38672,38672,38672,26929,22475,35267,22475,22475,36544,42277,22411,22411,33858,26727,37227,26727,26727,35540,39463,38672,38672,38672,38672,38672,38672,18609,24891,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,21432,38031,38672,38672,38672,38672,38672,22291,38672,26931,22311,22475,22475,22475,22475,33849,22352,22411,35447,22411,22411,33324,22381,26727,45449,26727,26727,32918,33802,38672,38672,38672,38672,30028,38672,38672,22475,36607,22475,22475,28015,33854,22411,22410,22411,22411,27851,26727,45441,26727,26727,22521,33795,38672,38672,22807,38672,38672,28255,22475,22475,38505,29442,22411,22411,34626,26485,26727,26727,26860,26998,22647,38672,38672,22428,26931,48359,22475,42142,32794,22411,28347,37402,26727,22521,32486,38672,18915,38672,22451,22474,36860,37042,22411,22492,22517,22520,26312,34036,26929,42625,42144,35207,26975,22537,26310,35759,22589,36765,22624,22640,22663,22685,22706,39617,42139,28345,26456,39814,47009,22727,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,23092,42922,38672,38672,38672,38672,38672,31140,31152,22751,38672,38672,38672,43215,38672,38672,26131,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,27937,27268,22230,38672,38672,38672,29641,38672,40144,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,36544,22411,22411,22411,33858,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,18609,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,22803,38672,38672,38672,22886,38672,38672,38672,38672,42922,36439,22823,22844,22866,22878,36438,22828,20832,38672,38672,38672,43215,38672,38672,50505,41329,38672,22902,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,22923,38672,38672,38672,30470,38672,38672,38672,23115,42922,38672,38672,38672,38672,38672,26339,22940,22970,38672,38672,38672,43215,38672,38672,23007,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,47631,27268,22230,38672,38672,38672,29641,38672,48650,23029,38672,38672,38672,38672,26929,22475,22475,22475,22475,36544,22411,22411,22411,33858,26727,26727,26727,26727,30990,42723,23085,38672,38672,38672,38672,38672,23048,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,23072,23108,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,46833,22411,22411,22411,22411,22411,47864,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,43252,33854,22411,22411,22411,22411,48185,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,18878,38672,38672,38672,35592,32963,38672,38672,23153,42922,37950,35335,23190,23196,23212,38672,41919,23236,23274,38672,38672,45078,23291,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,25157,23483,23350,24209,23309,45351,38672,18269,42564,28228,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19821,23376,23336,23369,23392,24203,23434,23465,24172,23726,19833,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,18729,23481,23642,24581,23499,23504,24048,23353,23520,23933,23353,24164,23917,24518,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,23536,23854,23815,23561,23577,23632,24450,24255,23689,23658,23674,23716,23742,24268,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,23773,23804,23842,24040,23870,23886,23449,23700,23902,23320,23949,23992,43796,19722,19792,19745,19771,19808,19113,19859,19875,24027,23545,23592,24064,24137,24459,24094,24110,23407,20069,47383,20010,46515,35979,20039,20679,24126,24567,24482,24153,24188,23616,24225,20191,20207,20223,20259,20298,20337,24284,24078,24374,24300,24330,24314,23418,20424,20452,20468,24361,23826,23606,24390,24419,20532,24435,24475,24498,24628,20608,23750,23928,24403,20644,23757,24508,20660,20054,24345,20695,24537,24597,24613,24552,23788,24240,23964,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,39906,38672,38672,38672,30470,24672,38672,38672,24667,26611,24688,24695,24695,24695,24711,26910,24735,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,24765,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,20739,24828,48943,18855,18871,18894,40258,24858,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19087,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,24876,24922,24938,19905,19631,19046,24954,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,24970,18446,19976,19994,19525,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,21250,35576,24999,24999,24999,35584,31668,31680,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,25271,38672,38672,38672,38672,18953,18958,18794,35998,19418,19887,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,50381,27744,38672,38672,38672,30470,38672,38672,38672,38672,42922,40452,25015,25015,25015,25023,27746,40454,20832,25047,38672,38672,43215,38672,38672,50505,38672,38672,25065,38672,38672,38672,38672,18953,18958,18794,35998,19418,20310,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,50286,50295,38672,38672,38672,23056,38672,38672,38672,38672,42922,44048,25088,25088,25088,25096,46630,44050,25120,38672,38672,38672,43215,38672,38672,50505,38672,38672,18699,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,25136,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,25152,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25173,38672,38672,38672,38672,30470,25218,38672,38672,21395,32346,38672,38672,38672,25210,25237,21393,25221,25256,38672,38672,38672,43215,38672,38672,50505,22214,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19206,20349,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,38672,38672,38672,38672,38672,41563,25293,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,34976,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,25437,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,30057,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,25455,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,40102,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,49130,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,33754,33854,22411,22411,22411,22411,31454,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25482,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25500,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38220,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,25563,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,28464,25582,25594,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,21426,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25610,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,44752,25631,25649,25671,25683,44753,25633,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,35735,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,25717,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,38672,38672,38672,38672,38672,38672,24860,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,31997,38672,25754,25760,25776,23293,41839,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,25800,20452,20468,20484,20497,50424,20500,20516,25828,20548,20592,20589,50171,25844,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,25049,38672,38672,38672,22098,25865,25896,25377,25881,25913,30410,30418,25964,25978,25990,26006,26018,25344,45647,38672,26034,48091,26052,33210,26086,26116,26153,26223,35321,26181,25701,26211,26248,26264,43583,44602,26280,26296,26329,38672,38672,38672,30176,26355,38925,41958,22850,24803,38672,44654,30480,22475,22475,22475,36601,25393,22411,22411,43601,22690,26727,26727,26727,39641,30990,39463,38672,43148,28319,38672,29724,26374,19326,38672,38672,32428,40296,38574,45608,22475,22475,26394,26439,26475,26509,22411,37859,28780,26529,38451,26727,26727,43300,45056,22573,30349,25414,26545,38672,26563,38672,40287,48411,38672,26599,35364,28653,26627,31403,45616,49789,33849,44356,22411,30609,28411,41138,33324,35718,26727,47625,44193,29223,41749,42781,38094,28940,38672,21816,21032,26644,38672,47420,26664,22475,41307,22336,31195,39296,22411,22411,26685,31454,47988,26726,26727,30787,32911,36940,26744,38697,46064,38672,26779,26799,26821,22787,22475,23131,26837,37515,22411,36778,26853,26876,26727,33519,46887,26926,38672,38672,26931,37355,35081,26947,38899,38878,26969,48550,26727,26994,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,38555,27014,22600,47761,48246,27057,27076,27094,27113,28343,26456,27133,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,27153,38672,38672,22098,38672,38672,38672,38672,39378,27172,38672,27196,27202,27218,27234,27246,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,27262,42259,26453,27284,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,46100,48405,27326,25277,38672,38672,28258,22475,22475,22475,37137,27346,22411,22411,22411,22411,39760,37334,26727,26727,26727,26727,27410,32919,30349,25414,38672,38672,38672,38672,38672,48411,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,41804,38672,38672,27435,38672,38672,33108,38672,49441,22475,22475,22475,38002,42895,22411,22411,22411,22411,27454,27481,26727,26727,26727,43058,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,46997,37168,35831,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,27504,38672,38672,22098,38672,27541,38672,27559,23976,27578,27586,27602,27617,27629,27645,27657,25344,38672,38672,27676,44992,38672,22924,38672,38672,38672,38672,38672,38672,27673,50511,27692,47251,26513,26453,41246,27710,25375,29768,38672,38672,32334,38672,27740,38672,27762,27784,38672,25948,27789,27805,27821,22475,22475,27840,27878,22411,22411,22690,27915,27931,26727,26727,30990,39463,44557,38672,38672,44934,38672,38225,48405,33126,27953,38672,38672,27694,47073,35424,37245,22475,35786,48497,47338,42686,30280,22411,37334,37394,27977,27995,43743,26727,32919,30349,25414,38672,38672,24003,38672,30096,48411,38672,38672,26931,22475,22475,22475,28013,28031,33849,22411,22411,22411,28053,28070,33324,26727,26727,26727,28092,28109,32918,41804,28131,38672,38672,49206,38672,28149,38672,22475,22475,22475,22780,33754,33854,22411,22411,42031,22411,31454,26727,26727,26727,28171,22521,33795,38672,38672,31346,38672,46687,21493,22475,28191,22475,23131,22411,30274,22411,36778,26727,35228,26727,31599,28213,38672,38672,38672,28250,28274,47411,42142,28296,31494,28347,36728,31954,22521,26313,38672,38672,28317,27136,22475,28335,22411,36897,26977,26727,22564,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,28363,28379,28427,28480,28257,28343,26456,28257,28345,26459,33538,36362,36357,28504,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,24521,38672,38672,22098,38672,28530,45484,38672,46575,28549,28557,28573,28587,28595,28611,28623,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,19750,26547,38672,26546,19755,28639,42141,48492,27360,44280,27268,25375,29257,27180,28679,29641,21703,38672,25730,38672,38083,42329,28697,28734,27137,27824,36531,43498,28750,22608,46434,28774,46408,28796,28814,28833,26727,28849,39463,38672,38672,38672,25738,38672,29761,48405,38672,38672,38672,19698,28258,22475,22475,22475,27023,35786,22411,22411,22411,22411,28891,37334,26727,26727,26727,26727,28912,43066,28929,28956,38672,38672,33876,38672,28992,48411,38672,38672,29009,29030,27032,22475,22475,22669,33849,29109,45393,22411,22411,32729,33324,29133,37067,26727,26727,34717,32918,41804,38672,38672,38672,38672,38672,29157,38672,29181,22475,22475,29202,33754,43112,22411,22411,32083,22411,34472,29222,26727,26727,29239,22521,33795,38672,29256,29273,38672,29294,28255,32383,27117,29315,23131,44876,34578,42252,36778,44915,26727,29337,26998,46887,21810,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,29370,38672,27136,22475,29387,22411,41041,26977,26727,43751,26312,34036,26929,22475,42144,22411,29411,29240,26310,35759,22476,22411,26978,48196,29430,26953,38544,39617,34809,33567,37775,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38673,29464,38672,22098,22435,29483,38672,29506,26195,29530,29540,29556,29570,29582,29598,29610,25344,38672,29626,25072,29668,50094,29711,40102,40331,29748,21064,29784,29812,29843,29873,29903,29919,29957,26423,29973,30010,25375,30044,30091,38782,30112,30134,26137,30161,38672,38672,26583,38672,26929,39099,30212,36878,44806,30228,43650,28758,46842,30244,46765,30296,30317,30336,30384,39463,20089,31354,30434,38799,41183,30450,30496,38672,30542,30564,29278,30580,39823,30631,28663,42103,30647,30685,30712,30766,30811,30837,34161,30878,30901,34681,30930,30980,31006,31022,25414,31049,38672,18321,49090,31075,31094,31128,34195,32584,46802,31168,22475,33645,42347,31190,47486,31211,22411,47598,49959,31232,32841,31257,26727,39569,42011,31278,31335,49499,35851,39273,31370,43966,34186,21188,33468,37601,29186,31389,31426,42239,40895,22411,31442,31481,31454,31519,31539,30795,31561,31595,33795,38672,48757,39401,38672,30196,28255,39519,43549,31615,23131,34822,47675,31635,36778,22546,47769,31572,26998,46887,39201,31656,18290,31696,31734,31750,31772,31808,31845,31869,31903,37385,31919,31970,26378,18593,32021,48908,39526,44237,32042,32063,32099,48723,41712,26312,41270,26929,22475,32144,22411,32167,44894,26310,32185,46276,40692,44326,31465,20435,32208,32228,32248,32274,32295,32319,32362,32399,32415,28257,28345,26459,32457,32473,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,32509,38672,22098,32530,32548,43771,30190,32600,32630,38672,32616,32654,32662,32678,32690,25344,38672,38672,48277,43215,38672,38672,38672,38672,29732,38672,38672,32706,29731,26036,33631,42208,32724,38438,44280,27268,25375,21272,38672,38672,31985,38672,38672,38672,26576,32745,36837,38672,26929,32766,22475,22475,22475,32810,32857,22411,22411,22690,27419,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,48405,38672,38672,40108,38672,28258,22475,22475,22475,42113,35786,22411,22411,22411,22411,32877,37334,26727,26727,26727,26728,26727,32919,30349,25414,38672,38672,38672,38672,38672,48411,32026,38672,26931,22475,22475,46869,22475,22475,33849,22411,22411,39678,22411,22411,33324,26727,26727,41099,26727,26727,32918,41804,38672,38672,38672,38672,38672,30118,38672,22475,22475,22475,42121,33754,33854,22411,22411,48685,22411,31454,26727,26727,26727,46758,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,23131,22411,22411,22411,36778,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,36404,38672,38672,38672,44299,22475,42143,31823,22411,32169,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,27097,32897,36362,47020,32935,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,25031,38672,38672,43445,32979,32987,33003,33009,33025,33041,33053,25344,38672,38672,38672,43215,38672,38672,29467,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,33069,38672,38672,38672,29641,38672,38672,38672,33103,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,33124,38672,18284,28258,22475,22475,22475,22475,40837,22411,22411,22411,22411,22411,34394,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,33142,38672,33163,42808,38672,42803,38566,22475,22475,37994,22475,22475,33849,22411,22411,47479,22411,22411,33324,26727,26727,31312,26727,26727,41720,33181,38672,38672,34958,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,34949,49071,38672,28255,22475,22475,29048,29442,22411,22411,43834,26485,26727,26727,49882,26998,33184,33200,40222,33234,22991,22475,33277,33313,50063,43479,33349,26727,33377,32128,26313,33405,26648,22985,33423,33443,35387,48797,34523,33492,40922,33514,26312,34036,46959,32375,33535,33554,33575,35236,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,28488,33591,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,32005,38672,38672,33617,38672,38672,38672,30064,38672,30073,38672,30064,33661,30069,38721,42958,22411,33692,33700,33716,25375,38672,38672,25941,29641,33732,20082,38672,38672,38672,38672,38672,26929,22475,22475,22475,33752,25393,22411,22411,23137,22690,26727,26727,26727,49362,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,25615,38672,33770,28258,22475,22475,22475,22475,40491,22411,22411,22411,22411,22411,40736,26727,26727,26727,26727,26727,33787,33803,33407,38672,38672,38672,38672,38672,38672,38672,38672,33819,48351,22475,22475,22475,22475,33849,46363,22411,22411,22411,22411,33324,48523,26727,26727,26727,26727,32918,33802,38672,38672,48282,38672,38672,38672,38672,22475,22475,22475,22475,33840,33854,22411,22411,22411,28403,27851,26727,26727,26727,43360,22521,33795,38672,38672,42813,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,33874,21141,27136,22475,42143,22411,22411,26977,26727,22520,33892,34036,21208,22475,46215,22411,33914,26727,33935,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,42795,38672,22098,25439,25194,32493,40646,40656,38304,38312,33959,33974,33986,34002,34014,25344,38672,38672,38672,49261,33079,38672,38672,23275,34030,34052,38672,34078,34127,34177,34211,38408,34239,34258,29354,34285,25375,38672,38672,36069,29641,38672,34301,38672,38672,38672,34327,24011,26929,47957,34366,22475,34410,34439,34460,34488,32881,44853,22711,39788,26727,49664,34508,39463,38672,28969,45656,28681,19706,18253,38672,26070,26232,47650,46594,28258,42618,22475,45107,34547,44588,22411,34575,22411,34594,34618,34642,27997,26727,35481,34668,34697,32919,33803,38672,38672,38672,44387,34733,34759,38672,38672,38672,26931,34796,22475,22475,22475,34845,34862,31216,22411,22411,37262,22411,34878,31262,26727,26727,28913,26727,34894,33802,38672,34931,35005,30145,35033,35049,30548,35079,26669,35097,35117,35142,44418,22411,35167,35192,43624,31718,26727,43013,39321,47169,35252,30750,31033,38672,35289,35307,35357,32192,22475,35380,35403,34559,22411,35440,35463,30821,35479,35497,35530,35556,35608,38672,38672,24906,47811,35630,37839,28037,35670,48379,27078,35705,48704,22521,26313,33898,38672,35734,27136,22475,42143,22411,22411,26977,26727,22520,28514,35751,26929,35782,35802,36916,32303,49941,26310,49171,22476,22411,26978,48196,35867,35883,35899,35915,42139,28345,26456,28257,28343,26456,35951,36348,35941,33538,36362,36357,34905,35967,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,33252,38672,22098,38672,38672,38672,38672,42922,38672,20573,33260,46302,45557,36019,36031,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,34780,22475,25393,22411,22411,36047,22690,26727,26727,36130,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,20243,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,36066,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,45849,38672,38672,38672,38672,38672,38672,38672,38672,26931,36085,22475,22475,22475,22475,33849,36106,22411,22411,22411,22411,33324,36126,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,19729,38672,22098,38672,39473,38672,44217,36146,36184,36196,36212,36218,36234,36250,36262,25344,38672,36278,38672,43215,38672,25421,18575,38672,27438,38672,38672,46139,36299,48111,34141,26409,36335,39145,44169,36378,36420,36455,38672,29371,36476,38672,27543,38672,36498,35844,31373,34743,36516,40527,36565,29321,36586,36623,36646,22411,36676,29093,36714,29346,28817,43388,36750,36802,37724,36836,38672,38672,38672,26061,38672,38672,38672,38672,38672,28258,36853,42951,22475,36876,38513,34492,36894,36913,40984,22411,43282,35514,28798,26727,43717,26727,36932,33803,38672,38672,36956,38672,38672,18909,32575,38672,38672,26931,22475,22475,41976,35273,36992,33849,22411,22411,45307,44424,37025,33324,26727,26727,40875,39885,37058,32918,33802,34967,38672,38672,32750,38672,38672,38672,22475,38401,22475,22475,28015,33854,34444,22411,22411,22411,27851,26727,37091,26727,26727,22521,33795,37110,34940,38672,46173,45770,29014,37131,22475,22475,37153,29988,22411,22411,37195,37219,26727,26727,36392,46887,38346,38672,39265,26931,22475,37243,42142,22411,37261,28347,26727,37278,22521,26313,38672,37296,38672,27136,22475,37317,22411,48861,26977,26727,48595,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,35925,29395,39608,37350,37371,26459,33538,37783,48331,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,41939,38672,22098,38672,25566,38672,38672,29887,39046,39054,37418,37432,37440,37456,37468,25500,38672,37493,38672,43215,38672,28533,38672,38672,27562,38672,38672,37494,37484,23258,20853,42141,37510,47612,44280,27268,25375,38672,29490,38672,29641,38672,37531,37550,38672,38672,38672,37570,27517,39732,22475,40520,37590,25393,37627,22412,37898,37646,31523,26727,48530,31241,31792,37683,37699,24812,38672,37723,38672,38672,38672,38672,38672,38672,38672,28258,37740,22475,37799,22475,35786,45030,31853,36110,22411,22411,37334,31545,34712,40790,26727,26727,32919,33803,38672,21024,48965,38672,38672,33943,28155,37816,38672,26931,46335,37834,22475,27041,22475,34377,49011,37855,22411,33297,22411,27890,39339,37875,26727,27899,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,48203,38672,38672,38672,26931,29057,22475,42142,32786,22411,28347,22555,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,37895,26977,49110,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,37914,31619,41895,26978,37938,37974,41757,45432,39617,42139,28345,26456,28257,28343,26456,28257,36549,37075,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,25240,38672,24719,38672,46651,38018,25104,38054,38118,38157,38142,38161,38126,38177,38189,25344,38672,45759,49561,49547,38205,49199,38672,38241,38259,34062,38289,38328,38371,38273,38387,38424,38467,39556,38529,27268,25375,40213,38672,38672,38590,21779,38672,38614,38641,21123,43234,38689,38713,41522,39725,26628,22475,25393,38737,22411,29117,22690,32232,31319,26727,38753,34652,38772,35341,38672,38798,38815,38672,38672,40618,38672,38672,38672,38840,33601,40485,22475,38858,22475,35786,47683,38876,40856,22411,22411,37334,32114,26727,42187,26727,26727,32919,33803,38672,38672,38672,38672,24776,38672,36500,33087,26755,48300,22475,22475,22475,46796,41600,49410,22411,22411,22411,38894,29994,47730,26727,26727,26727,46465,44085,32918,33802,38915,38949,38972,38992,38672,39015,39031,44824,39070,29039,39086,28015,33854,39115,39131,22365,39171,27851,40395,48234,48581,49654,22521,39190,33147,39225,26763,39254,38337,41515,31410,48668,36570,39289,44624,49920,36050,39312,46490,26727,39337,39355,46887,39394,38672,20942,22766,22475,39417,21499,22411,39448,25398,26727,39489,22521,47568,38672,38672,46680,45512,39505,42143,39542,32076,39585,39633,39657,35567,35614,26929,29075,42144,39674,26975,39694,26310,35759,35126,47451,29414,27465,39712,39748,39776,39804,46246,41657,47873,28257,28343,26456,28257,28345,26459,39839,39865,36357,34905,30398,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,39901,22098,38672,30368,39922,38672,45211,39942,39950,39966,39980,39988,40004,40016,25344,35063,40032,40048,40074,25784,40124,38672,40160,20023,50351,40199,40238,40274,40312,49237,40347,40363,36660,40411,40427,25375,38672,40443,18661,36161,37534,38672,18669,43864,38672,38672,44690,26929,22475,37009,40470,40507,25393,22411,40543,31503,45950,26727,47993,40578,40601,30990,39463,38672,44715,38672,38672,40617,29165,40634,41441,21201,19353,22907,40672,45368,47429,22475,22475,40708,37034,28896,40724,22411,47891,41633,40762,35506,40782,26727,47175,32919,22394,40806,38672,38654,32566,38672,38672,38672,38672,48740,26931,22475,38860,22475,40833,22475,33849,22411,41060,22411,40853,22411,33324,26727,38756,26727,40872,26727,32918,33802,38672,38672,20973,45998,38672,38672,38672,22475,22475,22475,22475,22458,40891,22411,22411,22411,22411,40911,26727,26727,26727,26727,22501,33795,23174,18332,38672,38672,38672,40938,22475,40962,22475,40684,22411,40981,22411,31782,26727,49841,26727,26998,28442,38672,38672,38672,26931,41e3,41019,42142,41039,41057,28347,41076,41095,22521,44039,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,34915,34036,27330,41115,29084,41137,35817,26727,27724,35759,41154,41218,41701,41262,41286,47258,44155,39617,42139,28345,26456,28257,28343,26456,28257,28345,28115,33538,27862,36357,34905,46290,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,26904,22098,38672,38672,41323,22275,41345,40139,38672,26358,41381,41394,41410,41422,25344,38672,38672,45842,43215,38672,38672,38672,41438,50256,38672,22231,41440,45848,38672,34773,41457,34829,39879,41487,27268,25375,38102,38672,38672,29641,38672,41538,41554,33261,38672,38672,36430,26929,41579,35101,34846,45533,41616,41649,40556,45401,41673,41736,41773,26727,41789,40746,42656,41831,38672,41855,41875,32532,32708,46542,38672,38672,38672,38672,28258,22475,22475,41594,22475,35786,22411,22411,22411,41893,22411,37334,26727,26727,37094,26727,26727,32919,27373,41911,29299,38672,38672,38672,41935,25466,38672,41955,26931,22475,41121,41974,22475,22475,34152,22411,46370,41992,22411,22411,30778,26727,31887,42009,26727,26727,32918,33802,38243,38672,38672,38672,38672,38672,38672,22475,22475,48461,22475,28015,42027,22411,22411,42047,22411,37764,26727,26727,48819,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,22208,38672,18340,22475,22475,42142,22411,22411,28347,26727,26727,28175,42067,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,30944,42088,42137,42160,42180,48196,42203,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,31078,38672,38672,32435,32438,32441,42224,25897,46967,28280,42275,42293,31579,27268,42319,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,46624,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,41023,22411,22411,22411,22411,22411,42864,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,42345,42143,29941,22411,26977,42363,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,44743,22177,38672,38672,27385,38672,45876,42383,22121,42412,42425,42433,42449,42461,25344,38672,32955,42527,43215,18706,42477,42499,33244,42519,38672,42543,40174,42559,42580,42605,42641,42672,40377,42708,42766,25375,38672,38672,38672,42829,42880,42911,43973,27961,38672,38672,23013,42938,22475,42974,41003,39432,42995,32861,22411,36698,35176,43029,43292,26727,43049,43082,43138,38672,38672,38672,25328,43172,43191,38672,43210,28234,38672,43231,48341,22475,43250,22475,22325,43268,47118,39174,22411,22411,43316,43332,43358,40585,26727,37280,43376,43410,33803,38672,38672,41815,45184,39238,30360,38672,43434,50186,43461,43495,48777,43514,43538,22475,43573,43599,31640,43617,43640,22411,43666,43692,49367,43710,43733,26727,47922,33802,43767,38672,38672,43787,43812,38672,43850,50024,43886,43557,22475,28015,33854,43908,34242,22411,22411,27851,46470,43935,44079,26727,39658,43953,38672,43989,21331,38672,38672,33824,22475,22475,49385,34223,22411,22411,22411,44011,26727,26727,26727,44027,46887,19958,38672,38672,50007,22475,22475,28197,22411,22411,44066,26727,26727,44101,26313,20872,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26890,47793,44124,44140,44185,44209,20435,28340,26976,33389,44233,44253,44277,44296,28343,26456,28257,28345,26459,44315,44342,38482,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,18636,22098,44386,29857,38069,44372,44403,44440,44464,44480,44494,44510,44526,44538,25344,44554,46908,38672,40088,38672,38672,41365,38672,43156,26783,26781,47212,47203,34311,44573,42979,44618,41232,44280,27268,44640,44676,38672,44712,29827,28456,38672,38672,38672,44731,44769,38672,40058,44785,40965,44822,22475,44840,44869,48063,22411,22690,39155,44892,44910,26727,30990,39463,38672,44931,38672,44950,44971,38672,38672,38672,38672,38672,44987,28258,45008,41301,22475,22475,37611,28054,22411,45028,22411,22411,45046,30301,30320,26727,26727,28093,30742,33803,38672,38672,45072,32638,30075,38672,46548,37818,38672,42396,22475,22475,47037,45094,33476,49452,22411,22411,49585,32047,36630,35654,26727,26727,39696,33919,26493,44108,45157,32514,38672,49604,38672,38672,38672,45200,22475,22475,43892,45227,28015,33854,22411,41993,40562,22411,27851,26727,26727,32834,45248,22521,33795,38672,22295,45267,19361,38672,28255,36090,22475,45286,43473,42051,22411,45304,43005,43694,26727,49877,26998,46887,38672,50299,46144,45323,22475,22475,42142,22411,22411,28347,26727,26727,49054,26313,45345,36168,40817,45367,22475,45384,22411,30669,26977,26727,45417,45465,36482,45500,45528,32279,22411,44261,26727,45549,35759,34423,35689,37179,48196,20435,28340,26976,27310,33427,47309,26456,32258,46222,29141,45599,45573,45589,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,42503,22098,38672,38672,19843,38672,45632,29682,29695,45672,45688,45703,45719,45731,25344,25697,36820,25484,43215,48936,33218,45747,38933,25691,45794,45830,45905,45865,45892,45921,30595,45937,41471,45980,45966,25375,45996,46014,46030,34093,38672,38672,46051,24794,46090,46124,46160,46201,46238,46262,46318,46334,46351,46386,26710,46424,30615,39597,40389,46450,46486,30259,41502,46506,46564,38672,46591,46610,46646,38672,45270,33165,46667,46703,46719,46781,46818,46866,45012,35786,47344,42692,28076,22411,34531,37334,42303,43342,43676,26727,37661,41688,46885,38672,46904,39209,44660,46924,28976,46946,38672,30957,20847,49903,46983,47036,22475,47053,33288,31829,47089,22411,22411,47105,35219,43394,47140,26727,26727,47156,32918,33802,47191,38672,41877,37707,38672,50210,38598,47237,45288,47274,47290,28015,43827,47306,47325,28394,29934,30696,36786,37667,47360,43033,22521,43418,47376,50112,38672,38355,49147,28255,47399,22475,22475,47445,47467,34602,22411,47502,47526,50046,26727,47556,46887,36283,49516,38672,48840,29206,44799,47584,47703,30662,30727,45251,31880,34269,39367,47647,38672,49567,38494,40946,47666,47699,47719,39849,48630,47746,32945,47785,47809,47827,47850,47889,47907,48880,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,49752,49772,47949,47973,48009,48038,49034,30862,33538,36362,36357,47933,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,48079,38672,38672,48107,38672,19671,30510,30518,48127,30518,30526,48143,48155,25344,38672,38672,38672,44955,38672,29647,38672,38672,38672,38672,29652,46888,38672,38672,45329,35643,48171,30851,45141,48219,48262,38672,38672,38672,29641,38672,38672,50200,50208,38672,38672,38672,48298,33458,22475,22475,22475,48316,48375,22411,22411,28301,37203,26727,26727,26727,30914,41169,48395,38672,34989,34103,38672,38672,38672,48429,38672,34985,36969,28258,49732,31174,47066,48458,46734,22411,37326,35682,48477,41625,48513,26727,48546,48566,33498,48611,32919,33803,38672,32557,38672,48646,38672,38672,38672,19786,38672,26931,22475,48666,22475,22475,22475,32777,22411,48684,22411,22411,22411,31945,26727,48701,26727,26727,26727,32918,33361,38672,45778,38672,38672,38672,38672,41194,35417,22475,22475,22475,28015,42844,22411,22411,22411,22411,27851,48720,26727,26727,26727,22521,33795,48739,38672,38672,48756,38672,35766,48773,22475,22475,45119,48793,22411,42164,43122,48813,26727,43937,26998,46887,48835,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,43522,42144,48856,26975,48877,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,20436,32151,30885,28257,28345,26459,33538,22735,48896,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,48924,48962,36314,45181,38672,50538,38672,45169,48959,38038,34111,48981,48993,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,27525,42141,49009,31292,44280,27268,25375,38672,36812,40252,29641,38672,38672,38672,38672,43194,38672,38672,26929,45232,22475,37800,22475,25393,49027,22411,46850,22690,27979,26727,26727,49050,30990,39463,38672,38672,38672,38672,38672,38672,49070,38672,38672,49087,38672,28258,22475,49810,22475,22475,35786,22411,22411,34386,22411,22411,37334,26727,26727,49106,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,49126,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,49146,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,49163,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,49187,38672,21516,38672,20816,49222,49253,38672,49277,49291,49304,49320,49332,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,31934,32212,26453,47540,49348,25375,38672,38672,38672,29641,38672,38672,38672,43175,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,35291,38672,38672,38672,36319,22475,22475,22475,22475,22475,31707,22411,22411,22411,22411,22411,45130,26727,26727,26727,26727,26727,32918,33802,38672,38842,38672,38672,38672,38672,38672,22475,22475,49383,22475,49401,33854,22411,42856,22411,47124,27851,26727,41079,26727,26727,49426,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25610,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,41202,49468,49480,25344,38672,38672,38672,43215,49496,38672,49515,38672,38672,46071,46074,38672,49532,28993,37922,42141,49583,32824,44280,27268,25375,38672,38672,46108,29641,46524,46533,49601,38672,38672,38672,38672,26929,22475,22475,49620,37001,25393,22411,29448,22411,49639,26727,26727,48625,36734,30990,43097,49680,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,49703,38672,38672,26931,22475,22475,49727,22475,22475,48053,22411,22411,49748,22411,22411,46748,26727,26727,49768,26727,26727,32918,33802,20903,38672,38672,38672,38672,38672,38672,22475,49788,22475,22475,28015,33854,26700,22411,22411,22411,27851,42367,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,38672,38672,38672,38672,44448,27298,33333,25344,45477,38672,38672,43215,38672,38672,49711,38672,38672,38672,49707,38672,38672,27156,49805,37753,37630,26453,49986,49826,25375,38672,20236,38672,29641,38672,38672,38672,38672,38672,38672,28133,26929,22475,22475,22475,47834,25393,22411,22411,22411,49862,26727,26727,26727,37879,30990,39463,38672,45808,38672,38672,38672,38672,38672,38672,29514,38672,38672,28258,49898,22475,31756,22475,35786,22411,49919,22411,36688,22411,37334,40766,26727,26727,49936,26727,32919,33803,38672,25655,38672,38672,38672,38672,38672,38672,38672,26931,22475,37984,22475,22475,22475,35151,22411,46398,22411,22411,22411,43919,26727,31302,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38999,38672,22475,22475,26805,22475,49623,33854,22411,22411,49957,22411,49975,26727,26727,47510,26727,49846,33795,38672,38672,18612,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,30025,38672,38672,50002,26931,50023,22475,27060,22411,22411,28347,50040,26727,22521,26313,38672,40323,38672,27136,29066,42143,22411,50062,26977,27488,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,25323,38672,38672,38672,38672,22098,38672,38672,38672,38672,42922,41360,38672,38672,38672,44448,27298,33333,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,25375,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,25393,22411,22411,22411,22690,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,34339,19585,19583,40183,33676,50079,27766,27768,50110,33673,34350,50128,50140,20832,38672,38672,38672,43215,38672,38672,25515,38672,38672,38672,38672,38672,38672,38672,18953,20613,18794,19200,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,18475,50434,18503,18525,50156,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,20273,38672,42922,31104,31112,50226,50240,50248,42483,50272,20832,38672,38672,38672,43215,38672,38672,50505,38672,38672,38672,25547,38672,38672,25544,18953,18958,18794,35998,18531,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19406,50434,18503,18525,18547,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,42589,38672,38672,38672,38672,24842,35017,50315,50319,50335,50343,43995,50367,20832,38672,38672,38672,43215,38672,38672,25359,38672,38672,23171,38672,38672,38672,23167,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,29641,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,19075,50434,18503,18525,50409,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,20424,20452,20468,20484,20497,50424,20500,20516,20532,20548,20592,20589,50171,20608,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,20939,38672,38672,38672,38672,30470,38672,38672,38672,38672,42922,38672,38672,38672,38672,38672,38672,24860,25344,38672,38672,38672,43215,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28256,42141,22411,26453,44280,27268,22230,38672,38672,38672,29641,38672,38672,38672,38672,38672,38672,38672,26929,22475,22475,22475,22475,36544,22411,22411,22411,33858,26727,26727,26727,26727,30990,39463,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,28258,22475,22475,22475,22475,35786,22411,22411,22411,22411,22411,37334,26727,26727,26727,26727,26727,32919,33803,38672,38672,38672,38672,38672,38672,38672,38672,38672,26931,22475,22475,22475,22475,22475,33849,22411,22411,22411,22411,22411,33324,26727,26727,26727,26727,26727,32918,33802,38672,38672,38672,38672,38672,38672,38672,22475,22475,22475,22475,28015,33854,22411,22411,22411,22411,27851,26727,26727,26727,26727,22521,33795,38672,38672,38672,38672,38672,28255,22475,22475,22475,29442,22411,22411,22411,26485,26727,26727,26727,26998,46887,38672,38672,38672,26931,22475,22475,42142,22411,22411,28347,26727,26727,22521,26313,38672,38672,38672,27136,22475,42143,22411,22411,26977,26727,22520,26312,34036,26929,22475,42144,22411,26975,26727,26310,35759,22476,22411,26978,48196,20435,28340,26976,39617,42139,28345,26456,28257,28343,26456,28257,28345,26459,33538,36362,36357,34905,28863,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38956,38672,38672,29796,50456,50460,50460,50482,38955,50476,50498,38672,38672,38672,38672,38672,38672,50505,38672,38672,38672,38672,38672,38672,38672,18953,18958,18794,35998,19418,35990,45351,38672,18269,42564,38672,38672,40144,38672,23032,18306,18356,18382,18387,18403,18422,18462,20670,18475,50434,18503,18525,50156,19412,50440,18509,36003,19232,20563,38672,46930,18591,38672,38672,37574,18609,18628,33736,18652,18685,18722,18753,18745,18769,18406,25849,18792,20360,18810,18830,18835,19138,18794,20364,18814,18794,18839,19540,19955,37554,48943,18855,18871,18894,40258,38672,38976,18931,18947,18974,19016,19062,19169,19103,19129,20726,19934,19154,19185,19222,19248,20726,19934,19154,19185,19222,19273,19e3,30964,19299,19315,28712,19342,25187,19377,19393,19434,19464,19495,19569,19608,24938,19905,19631,19046,19601,24931,19898,19624,19039,19647,19687,43796,19722,19792,19745,19771,19808,19113,19859,19875,19921,18446,19976,19994,24983,18444,19974,19992,20321,18562,47383,20010,46515,35979,20039,20679,20105,20160,20116,20132,20159,20115,20176,19479,20207,20223,20259,20298,20337,20380,20402,21368,20386,20408,21374,19283,50527,20452,20468,20484,20497,50424,20500,20516,26100,20548,20592,20589,50171,18953,19547,18794,18487,20629,20143,19945,20660,18437,21954,20695,20711,21969,19448,21939,20755,19510,19659,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,38672,94505,94505,90408,90408,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,94505,1,12290,94505,94505,94505,94505,94505,94505,94505,94505,94505,0,94505,90408,94505,94505,94505,94505,94505,94505,94505,94505,94505,364,94505,90408,94505,94505,94505,94505,94505,94505,94505,69632,73728,94505,94505,94505,94505,94505,65536,94505,3,0,0,2183168,0,0,0,90408,94505,298,299,0,2134016,302,303,0,0,0,0,0,1636,0,0,0,0,0,0,0,0,0,1645,0,0,2732032,0,0,0,0,0,0,0,0,0,0,2904064,2908160,0,0,0,0,0,1699,0,0,0,0,0,0,0,0,0,0,0,2963,0,0,0,0,0,2424832,0,0,0,0,0,0,0,0,0,0,0,0,2625536,0,0,0,0,0,2045,0,0,0,0,2049,0,0,0,0,0,0,0,2711,0,0,0,0,0,0,0,0,0,2976,0,534,534,534,534,534,2699264,2715648,0,0,2772992,2805760,2830336,0,2863104,2920448,0,0,0,0,0,0,0,303,303,303,303,0,303,303,303,303,0,2805760,2920448,0,0,0,0,0,2920448,0,0,0,0,0,0,0,2732032,0,2179072,2179072,2179072,2179072,2424832,2433024,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3125248,2625536,2179072,2179072,2179072,2179072,2179072,2179072,2699264,2179072,2715648,2179072,2723840,2179072,2732032,2772992,2179072,2125824,2125824,2125824,2125824,2125824,2592768,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2551808,2125824,2125824,2125824,2125824,2125824,2637824,2125824,2179072,2179072,2805760,2179072,2830336,2179072,2179072,2863104,2179072,2179072,2179072,2179072,2920448,2179072,2179072,2179072,0,0,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,0,2502656,0,0,3010560,0,0,0,0,2990080,2179072,2179072,2699264,2125824,2715648,2125824,2723840,2125824,2732032,2772992,2125824,2125824,2125824,2805760,2125824,2830336,2125824,2125824,2863104,2125824,2125824,2125824,2125824,2920448,2863104,2125824,2125824,2125824,2125824,2920448,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,1142784,0,2179072,2125824,2125824,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,975,2125824,0,0,0,0,0,0,2510848,2514944,0,0,2547712,2596864,0,0,0,0,0,0,735,0,0,0,0,735,0,741,0,0,0,2789376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3137,0,0,2142208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2733,0,2662400,0,2813952,0,0,0,0,2375680,0,0,0,0,0,0,0,0,0,350,351,352,0,0,0,0,2584576,0,0,0,0,2838528,0,0,2838528,0,0,0,0,0,0,0,0,1122,0,0,0,0,0,0,0,0,0,0,1186,0,0,0,0,0,0,0,2891776,0,0,0,0,0,2392064,2412544,0,0,2838528,0,0,0,0,0,0,262144,0,0,0,0,0,0,0,0,0,0,706,0,0,0,0,0,0,0,0,2179072,2179072,2179072,2408448,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,0,2126724,2126724,2617344,2179072,2179072,2179072,2179072,2179072,2179072,2662400,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2584576,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2801664,2813952,2179072,2838528,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,1798,2125824,2125824,2125824,2408448,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2662400,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2801664,2813952,2125824,2838528,2125824,2813952,2125824,2838528,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3125248,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,2822144,0,0,2883584,0,0,0,0,0,0,0,0,0,0,3080192,3100672,3104768,0,0,0,0,3186688,0,0,0,0,0,0,0,0,0,0,305,306,0,0,0,0,0,0,2797568,0,0,0,0,0,0,0,2850816,2867200,0,0,2883584,0,0,0,0,0,2072,0,0,0,0,0,0,0,0,0,0,0,3134,0,0,0,0,2465792,0,0,2719744,0,0,0,0,0,0,0,0,0,0,3014656,3207168,0,2691072,0,0,3215360,0,0,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2179072,2179072,2179072,2179072,2179072,2461696,2465792,2179072,2179072,2179072,2179072,2179072,2179072,2523136,2179072,2179072,2179072,0,1342,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,2473984,2478080,2179072,2179072,2179072,2179072,2179072,2179072,2600960,2179072,2179072,2179072,2179072,2641920,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,1047,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3035136,2125824,2125824,3072e3,2125824,2125824,2125824,3121152,2125824,2125824,3141632,2125824,2125824,2125824,3170304,2179072,2179072,2719744,2179072,2179072,2179072,2179072,2179072,2768896,2777088,2781184,2797568,2822144,2179072,2179072,2179072,0,900,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,298,0,299,0,302,0,303,0,0,0,2473984,2478080,2179072,3063808,2179072,2179072,2179072,2179072,3100672,2179072,2179072,3133440,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2551808,2179072,2179072,2179072,2179072,2179072,2637824,2179072,2179072,2179072,2179072,3207168,2179072,0,0,0,0,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,2125824,2125824,2125824,2408448,2125824,2125824,2125824,2719744,2125824,2125824,2125824,2125824,2125824,2768896,2777088,2781184,2797568,2822144,2125824,2125824,2125824,2883584,2179072,2912256,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3039232,2125824,2912256,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3039232,2125824,2125824,0,2125824,2126799,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,245760,0,0,2179072,2125824,2125824,3063808,2125824,2125824,2125824,2125824,2125824,3100672,2125824,2125824,3133440,2125824,2125824,2125824,2125824,2125824,2125824,0,2179072,2125824,2125824,2457600,2179072,2179072,2179072,2179072,2457600,2125824,2125824,2125824,3207168,2125824,0,0,0,0,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,1894,2125824,2125824,2125824,2408448,2125824,2125824,2125824,2125824,2125824,3207168,2125824,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,0,2486272,0,0,0,0,0,2678784,2854912,3006464,0,2924544,0,0,0,0,0,0,0,0,0,3162112,3170304,0,0,3219456,3035136,0,0,0,0,0,3072e3,2650112,0,0,2809856,0,0,0,0,0,0,0,1650,0,0,0,0,0,0,1654,0,2686976,2736128,0,0,2531328,2707456,0,3190784,0,0,2576384,0,0,0,0,0,0,0,1688,0,0,0,0,0,0,0,0,0,2742,0,0,0,0,0,0,0,3121152,3141632,0,0,0,2924544,0,2682880,0,0,0,0,0,0,3112960,2387968,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2453504,2179072,2473984,2482176,2179072,2179072,2179072,0,901,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,0,2179072,2125824,2125824,2179072,2179072,2179072,2531328,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2605056,2179072,2629632,2179072,2179072,2179072,2179072,2179072,2125824,2527232,2125824,2125824,2125824,2125824,2125824,3092480,2125824,2527232,2125824,2650112,2179072,2179072,2179072,2707456,2179072,2736128,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2887680,2179072,2125824,2125824,2125824,2125824,2441216,0,0,0,0,0,0,0,0,0,2932736,2179072,2924544,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3035136,2179072,2179072,3072e3,2179072,2125824,2658304,2973696,2125824,2125824,2658304,2973696,2125824,2711552,256e4,2179072,256e4,2125824,256e4,2125824,2125824,2125824,2125824,2125824,3223552,975,0,2125824,2125824,2416640,2125824,2125824,2125824,2445312,2125824,2125824,2125824,2125824,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,1047,0,0,2179072,2125824,2125824,2179072,3121152,2179072,2179072,3141632,2179072,2179072,2179072,3170304,2179072,2179072,3190784,3194880,2179072,0,0,0,0,0,0,1134592,0,0,0,0,0,0,0,0,0,0,1134592,2125824,2125824,3190784,3194880,2125824,0,0,0,0,0,0,2387968,2125824,2125824,2125824,2420736,2125824,2125824,2125824,2125824,2125824,2453504,2125824,2707456,2125824,2736128,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2887680,2125824,2125824,2924544,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3141632,2125824,2125824,2125824,3170304,2125824,2125824,3190784,3194880,2125824,2179072,2125824,2125824,2179072,2125824,2125824,2179072,2125824,2125824,2985984,2985984,2985984,0,0,0,0,0,0,0,69632,73728,0,419,419,0,0,65536,419,2179072,3112960,3219456,2125824,2125824,3112960,3219456,2125824,2125824,3112960,3219456,0,0,0,0,0,0,0,1701,0,0,0,0,0,0,0,0,0,1624,0,0,0,0,0,0,0,3022848,0,0,3145728,0,3203072,0,0,0,0,0,0,0,0,0,0,335,336,0,0,0,0,0,0,0,0,3067904,0,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0,0,0,2445312,0,2842624,0,0,0,2637824,0,0,0,0,2621440,0,0,0,0,0,2100,0,0,0,0,0,0,0,0,0,0,0,2727936,0,0,0,3084288,3182592,2899968,0,2961408,0,0,2179072,2179072,2416640,2179072,2179072,2179072,2445312,2179072,2179072,2179072,0,901,2126724,2126724,2126724,2126724,2126724,2425732,2433924,2126724,2126724,2126724,2126724,2458574,2126798,2126798,2126798,2126798,2183168,0,0,0,0,0,0,0,396,0,0,0,0,0,396,0,0,2179072,2179072,2179072,2727936,2752512,2179072,2179072,2179072,2842624,2846720,2179072,2895872,2916352,2179072,2179072,2945024,2179072,2179072,2994176,2179072,3002368,2179072,2179072,3022848,2179072,3067904,3084288,3096576,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,237568,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2605056,2125824,2629632,2125824,2125824,2650112,2125824,2125824,2125824,2707456,2125824,2736128,2125824,2125824,2125824,2125824,2179072,2179072,2179072,3223552,0,0,2125824,2125824,2416640,2125824,2125824,2125824,2445312,2125824,2125824,2125824,2125824,2125824,2600960,2125824,2125824,2125824,2125824,2641920,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3010560,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2940,0,2637824,2125824,2125824,2125824,2125824,2727936,2752512,2125824,2125824,2125824,2125824,2842624,2846720,2125824,2895872,2916352,2125824,2125824,2125824,2125824,2945024,2125824,2125824,2994176,2125824,3002368,2125824,2125824,3022848,2125824,3067904,3084288,2125824,3096576,2125824,2125824,0,0,0,2928640,0,0,0,3059712,0,2543616,2666496,0,2633728,0,0,0,0,0,0,766,767,0,0,0,754,0,0,774,0,2179072,2179072,2179072,2494464,2179072,2179072,2514944,2179072,2179072,2179072,2543616,2547712,2179072,2179072,2596864,2179072,2126724,2126724,2126724,2126724,2126724,2593668,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126798,0,0,0,0,0,0,2510848,2514944,0,0,2547712,2596864,0,0,0,0,0,0,1164,0,0,0,0,0,0,0,0,0,0,1564,0,1566,0,0,0,2179072,2179072,3059712,2179072,2179072,2179072,2179072,2179072,2179072,3178496,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2928640,2125824,2125824,2125824,2998272,2125824,2125824,2125824,2125824,3059712,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3178496,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3010560,2125824,2125824,2125824,2125824,2125824,2502656,2125824,2125824,2125824,2494464,2125824,2125824,2514944,2125824,2125824,2125824,2543616,2547712,2125824,2125824,2596864,2125824,2125824,2125824,2125824,2125824,3059712,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3178496,2179072,2125824,2125824,2179072,2126724,2126724,2126798,2126798,2441216,0,0,0,0,0,0,0,0,0,2932736,2965504,0,0,3076096,0,0,2695168,3174400,2646016,2613248,2703360,0,0,0,0,2977792,0,0,3047424,3129344,0,2981888,2396160,0,3153920,0,0,0,2740224,0,0,0,0,0,0,1106,0,0,0,0,0,0,0,0,0,334,0,0,0,0,0,0,0,0,2793472,0,0,0,0,0,2469888,2506752,2756608,0,0,2580480,0,0,0,0,0,0,1146880,0,1146880,0,0,0,0,0,0,0,302,302,302,302,0,302,302,302,302,0,2396160,2400256,2179072,2179072,2441216,2179072,2469888,2179072,2179072,2179072,2519040,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,241664,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3223552,2179072,2125824,2125824,2179072,2179072,2125824,2125824,2125824,2588672,2179072,2613248,2646016,2179072,2179072,2695168,2756608,2179072,2179072,2179072,2932736,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,245760,2125824,2125824,2125824,2125824,2125824,2125824,2584576,2125824,2125824,2125824,2125824,2125824,2617344,2125824,2125824,2125824,2125824,2125824,2125824,2662400,2179072,2179072,2179072,3129344,2179072,2179072,3153920,3166208,3174400,2396160,2400256,2125824,2125824,2441216,2125824,2469888,2125824,2125824,2125824,2519040,2125824,2125824,2125824,2125824,2125824,2519040,2125824,2125824,2125824,2125824,2588672,2125824,2613248,2646016,2125824,2125824,2695168,2756608,2125824,2125824,2125824,2125824,2932736,2125824,0,3108864,3198976,0,0,3043328,0,3149824,2936832,0,2760704,3132,0,0,0,0,534,534,534,534,534,534,534,534,534,534,534,3503,2953216,0,0,2826240,3158016,2428928,0,3018752,2764800,2572288,0,0,3051520,2179072,2428928,2437120,2179072,2486272,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2654208,2678784,2760704,2764800,2854912,2969600,2179072,3006464,2179072,3018752,2179072,2179072,2179072,3149824,2125824,2428928,2437120,2125824,2486272,2125824,2125824,2125824,2125824,2125824,2654208,2678784,2760704,2764800,2785280,2854912,2969600,2125824,3006464,2125824,3018752,2125824,2125824,2125824,2125824,3149824,2179072,3051520,2125824,3051520,2125824,3051520,0,2490368,2498560,0,0,0,0,2875392,0,0,0,3132,0,0,2834432,0,3227648,2568192,2564096,0,2940928,2179072,2179072,2498560,2179072,2179072,2179072,2555904,2564096,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3137536,2125824,2125824,2125824,2125824,2457600,2125824,2125824,2125824,2125824,2183168,0,0,0,0,0,0,0,333,0,0,0,0,0,333,0,0,2125824,3137536,2125824,2125824,2498560,2125824,2125824,2125824,2555904,2564096,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3132,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,2126725,2125824,2125824,2125824,2502656,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3010560,2179072,2179072,2125824,2125824,2502656,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3010560,2179072,2179072,2126724,2126724,2503556,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2592768,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3117056,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2928640,2179072,2179072,2179072,2998272,2179072,2179072,3031040,0,0,0,2179072,2449408,2179072,2535424,2179072,2609152,2179072,2859008,2179072,2179072,2179072,3031040,2125824,2449408,2125824,2535424,2125824,2609152,2125824,2859008,2125824,2125824,2125824,3031040,2125824,2125824,2449408,2125824,2125824,2125824,2125824,2461696,2465792,2125824,2125824,2125824,2125824,2125824,2125824,2523136,2125824,2125824,2125824,298,0,0,0,298,0,299,0,0,0,299,0,302,2125824,2125824,2125824,3026944,2404352,2125824,2125824,2125824,2125824,3026944,2539520,0,2949120,2179072,2658304,2973696,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,452,452,111044,452,452,452,452,452,452,452,452,452,452,111044,111044,111044,111044,111044,111044,111044,111044,111044,111044,452,111044,111044,111044,111044,111044,0,0,0,0,0,0,0,0,0,360,0,0,0,0,0,360,3,0,0,2183168,0,0,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,2124,0,0,0,0,0,534,534,534,534,534,847,534,534,861,534,534,0,302,118784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3127,0,0,0,302,0,0,0,302,119197,73728,0,0,0,0,0,65536,0,0,0,0,0,2403,0,0,0,0,0,0,0,0,0,0,302,302,0,0,0,0,302,302,302,302,302,302,0,0,0,0,0,302,0,302,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2966,0,3,0,0,2183168,0,0,0,0,0,33396,299,0,2134016,49784,303,0,0,0,0,0,2428,0,0,0,0,0,0,0,0,0,0,0,172032,0,0,0,0,0,0,0,0,0,298,0,0,0,302,0,0,0,2424832,2433024,0,0,2457600,2105631,12290,3,0,0,293,0,0,0,0,293,0,0,0,0,0,0,0,2024,0,0,0,0,0,0,0,0,0,2455,0,0,0,0,0,0,0,0,0,0,122880,122880,122880,122880,122880,122880,122880,122880,122880,0,0,122880,0,0,0,0,0,0,0,0,0,0,0,785,0,790,0,793,0,0,0,122880,0,122880,122880,122880,0,0,0,0,0,122880,0,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,0,0,122880,0,0,0,0,0,0,0,0,122880,0,0,0,0,0,0,0,0,0,0,0,0,1216,0,0,0,0,147456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3148,0,0,0,0,1067,1071,0,0,1075,1079,0,2424832,2433024,0,0,2457600,0,0,0,131072,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,2479,2437,0,0,0,0,0,2484,0,0,0,0,0,0,1675,0,0,0,0,0,0,0,0,0,0,3260,0,0,534,534,534,131072,0,0,131072,131072,0,0,0,0,0,0,0,131072,0,0,131072,0,0,131072,0,0,0,0,0,135168,135168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225708,0,0,0,135168,0,0,135168,0,0,0,0,0,0,0,0,0,0,0,1096,0,0,0,0,0,0,0,135168,0,135168,135168,135168,135168,135168,135168,0,135168,135168,135168,135168,135168,135168,0,0,0,0,0,135168,0,135168,1,12290,3,0,0,2183168,0,0,0,0,0,629,630,0,2134016,633,634,0,0,0,0,0,2725,0,0,0,0,0,0,0,0,0,0,0,2200245,2200245,2200245,0,0,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,1434,2125824,2125824,2125824,2125824,2932736,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3129344,2125824,2125824,3153920,3166208,3174400,2506752,2506752,2506752,0,303,139264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,266240,0,0,0,0,0,303,0,0,0,303,69632,139681,0,0,0,0,0,65536,0,0,0,0,0,2738,0,0,0,0,0,0,0,0,0,0,0,2013,0,0,0,0,303,303,303,303,303,303,0,0,0,0,0,303,0,303,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,0,300,3,0,0,2183168,0,0,0,0,0,298,33399,0,2134016,302,49787,0,0,0,0,0,2763,534,534,534,534,534,534,534,534,534,534,556,556,3020,556,556,556,61440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,360,300,300,300,143660,370,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,143660,300,300,143660,300,300,300,143730,300,300,300,143730,69632,73728,300,300,143660,300,300,65536,300,300,0,0,300,300,143660,300,300,300,300,300,300,300,300,300,365,300,0,143660,300,300,300,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,143660,300,300,143660,300,300,300,300,300,300,300,300,300,300,300,143730,300,300,300,300,300,300,300,300,143660,143660,143660,143660,143660,143660,143660,143660,143660,300,300,300,300,300,300,300,300,143660,300,143660,143660,143660,143660,300,143660,143660,143660,143660,143660,143660,300,0,300,0,300,300,300,143660,300,143660,143660,143660,143660,143660,143730,143660,143730,143730,143730,143730,143730,143730,143660,143660,143660,143660,143660,143660,143660,143660,1,12290,0,0,0,0,2200245,2200245,0,0,0,0,0,0,0,0,0,0,0,1153,1154,0,0,0,0,0,0,155648,155648,0,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,0,0,0,0,155648,0,0,0,0,0,155648,155648,0,155648,155648,0,12290,0,0,0,0,155648,0,155648,0,0,0,0,0,155648,0,0,0,0,0,0,1148,0,0,0,0,0,0,0,0,1157,3,0,0,2183168,126976,0,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,2934,0,0,0,0,0,0,0,0,0,0,0,2446,0,0,0,0,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,163840,159744,159744,159744,159744,0,0,159744,0,0,0,0,0,0,0,0,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,163840,159744,159744,159744,159744,159744,0,0,0,0,0,0,0,0,0,364,0,0,0,0,131072,131072,25155,0,0,0,159744,0,0,0,25155,25155,25155,159744,25155,25155,25155,25155,25155,25155,25155,159744,159744,159744,159744,25155,159744,25155,1,12290,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,24576,975,2125824,2125824,2125824,2125824,3092480,0,0,0,2404352,2179072,2179072,2179072,2179072,3026944,2404352,2125824,2125824,2125824,2125824,2592768,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2449408,0,2535424,2125824,2609152,2125824,2859008,2125824,2125824,2125824,3031040,2125824,2527232,0,0,0,2179072,2527232,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,1,12290,167936,167936,167936,0,0,167936,0,0,0,0,0,0,0,0,167936,167936,167936,167936,167936,167936,167936,167936,0,0,0,0,0,0,0,0,0,364,0,0,0,0,155648,0,172032,172032,0,172032,0,0,172032,172032,0,172032,0,0,0,0,172032,172032,0,0,0,0,0,0,0,0,0,0,172032,0,0,0,172032,172032,0,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,0,0,0,0,0,0,0,0,0,364,0,292,0,0,0,0,1,288,3,0,0,0,294,0,0,0,0,0,0,0,0,0,0,348,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,1,0,176128,176128,176128,0,0,176128,0,0,0,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,176128,0,0,0,0,0,0,0,0,0,364,0,292,0,0,0,347,3,78114,78114,292,0,627,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,2946,0,0,0,0,0,0,0,0,0,0,0,245760,0,0,0,0,78114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,672,0,1102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155648,0,0,0,0,1146,0,0,0,0,1151,0,0,0,0,0,0,0,346,0,404,0,0,0,0,0,404,0,0,0,2098,0,0,0,0,0,0,0,0,0,0,0,0,0,2717,0,0,534,2135,534,534,534,534,534,534,534,534,534,534,534,2147,534,534,534,534,534,534,1775,534,534,534,1780,534,534,534,534,534,534,534,2545,534,534,534,534,534,534,0,2549,2220,556,556,556,556,556,556,556,556,556,556,556,2232,556,556,556,556,556,556,2590,556,556,556,556,556,556,2598,556,556,2307,580,580,580,580,580,580,580,580,580,580,580,2319,580,580,580,0,0,0,2006,0,1069,0,0,0,2008,0,1073,0,2573,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1396,0,0,2955,0,0,0,2959,0,0,0,0,0,0,0,0,0,0,371,0,0,372,0,0,0,534,3150,534,534,534,3153,534,534,534,534,534,534,534,534,534,534,2547,534,534,534,0,0,3161,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,556,556,556,556,580,3206,580,580,580,3209,580,580,580,580,580,580,580,580,2679,580,580,580,534,580,556,534,580,580,3217,580,580,580,580,580,580,580,580,580,580,580,580,580,534,580,556,534,580,580,3309,580,580,580,580,3310,3311,580,580,580,580,580,580,580,580,2875,580,580,580,580,580,580,580,580,3071,580,580,580,580,580,580,580,580,3233,580,580,580,580,534,580,556,1993,534,534,534,1997,556,556,556,2001,534,534,534,3339,534,534,534,534,534,534,3345,534,534,534,534,556,3407,556,3409,556,556,556,556,556,556,556,556,1373,556,556,556,556,556,556,556,3364,556,580,580,580,580,580,580,3370,580,580,580,580,580,580,3376,580,580,580,3380,580,534,556,580,0,0,0,0,0,0,0,0,0,2925,0,0,0,0,0,3132,0,0,0,0,3391,534,534,534,534,534,534,534,534,534,534,534,2198,534,2200,534,534,534,534,534,534,3406,556,556,556,556,556,556,556,556,556,556,556,556,26009,1341,975,580,556,556,556,556,3422,580,580,580,580,580,580,580,580,580,580,580,1449,580,580,580,580,580,580,580,3522,580,580,580,580,580,580,580,580,580,0,0,0,534,534,534,534,3585,534,556,556,3,78114,78114,292,0,0,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,2973,0,0,2975,0,0,534,534,2980,534,534,534,534,534,534,2532,534,534,534,534,534,534,534,534,534,534,2793,534,534,534,534,534,0,0,0,304,0,0,0,0,0,0,0,0,0,0,0,0,0,2732,0,0,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,0,192965,0,1,12290,192965,192965,192965,0,0,192965,0,0,0,0,0,0,0,0,0,0,0,1201,0,0,0,0,0,0,0,0,192965,192965,192965,192965,192965,192965,192965,192965,192965,192965,0,192965,192965,192965,192965,192965,0,0,0,0,0,0,0,0,0,364,0,304,0,0,0,0,0,0,0,0,196608,0,0,0,0,0,0,0,0,0,0,0,0,1582,0,0,0,301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,727,406,406,406,406,406,406,0,0,0,0,0,406,0,406,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,118784,298,3,78114,78114,292,0,0,0,0,0,298,299,0,301,302,303,0,0,0,0,0,3142,0,0,0,0,0,0,0,0,0,0,0,2978,534,534,534,534,0,0,0,0,733,406,0,0,0,0,0,0,0,0,0,0,0,1240,0,0,0,1244,0,0,1175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2871296,0,0,1171,1171,0,0,0,1175,1650,0,0,0,0,0,0,0,0,0,364,0,253952,0,0,0,0,580,580,580,1540,2005,0,0,0,0,1546,2007,0,0,0,0,1552,0,0,0,1558,0,0,0,0,0,0,0,0,0,0,405,0,0,0,0,0,2009,0,0,0,0,1558,2011,0,0,0,0,0,0,0,0,0,0,406,0,0,0,0,0,534,534,534,534,2549,0,556,556,556,556,556,556,556,556,556,556,1410,556,556,556,556,556,0,306,0,306,0,0,0,0,0,0,0,0,0,306,0,0,0,0,0,0,1155072,0,0,0,0,0,0,0,0,0,0,0,0,0,2705,0,0,0,0,0,204800,204800,0,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,205106,204800,204800,205105,205106,204800,205105,205105,204800,204800,0,0,0,0,0,0,0,0,0,364,299,0,0,0,0,0,3,0,0,2183794,0,0,0,0,0,298,299,151552,2134016,302,303,0,0,0,0,0,155648,155648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,655,212992,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,757,0,151552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,286720,2179072,2179072,2179072,2179072,2179072,2126724,2126724,2126724,2126724,2126724,0,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3036110,2126798,2126798,3072974,2126798,2126798,2126798,3122126,2700164,2126724,2716548,2126724,2724740,2126724,2732932,2773892,2126724,2126724,2126724,2806660,2126724,2831236,2126724,2126724,973,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2864004,2126724,2126724,2126724,2126724,2921348,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2626436,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3117956,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,0,0,975,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3224526,2179072,2126798,2126724,2179072,2179072,2126724,2126724,2126798,2126798,0,2486272,0,0,0,0,0,2678784,2854912,3006464,2126798,2126798,2126798,2626510,2126798,2126798,2126798,2126798,2126798,2126798,2700238,2126798,2716622,2126798,2724814,2126798,2126798,2126798,2126798,2126798,2454478,2126798,2474958,2483150,2126798,2126798,2126798,2126798,2126798,2126798,2532302,2733006,2773966,2126798,2126798,2126798,2806734,2126798,2831310,2126798,2126798,2864078,2126798,2126798,2126798,2126798,2921422,2126724,2409348,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2814852,2126724,2839428,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3126148,2126724,2126724,2126724,2126724,2126798,2126798,2585550,2126798,2126798,2126798,2126798,2126798,2618318,2126798,2126798,2126798,2126798,2126798,2126798,2663374,2179072,2179072,2179072,3207168,2179072,0,0,0,0,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2552708,2126724,2126724,2126724,2126724,2126724,2638724,2126724,2126724,2720644,2126724,2126724,2126724,2126724,2126724,2769796,2777988,2782084,2798468,2823044,2126724,2126724,2126724,2884484,2126724,2913156,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3040132,2126724,2126724,2126724,2728836,2753412,2126724,2126724,2126724,2126724,2843524,2847620,2126724,2896772,2917252,2126724,2126724,2126724,2126724,3150724,2126798,2429902,2438094,2126798,2487246,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2929614,2126798,2126798,2126798,2999246,2126798,3064708,2126724,2126724,2126724,2126724,2126724,3101572,2126724,2126724,3134340,2126724,2126724,2126724,2126724,2126724,2126724,2585476,2126724,2126724,2126724,2126724,2126724,2618244,2126724,2126724,2126724,2126798,2720718,2126798,2126798,2126798,2126798,2126798,2769870,2778062,2782158,2798542,2823118,2126798,2126798,2126798,2884558,2126798,2913230,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3040206,2126798,2126798,2126798,2126798,2126798,2601934,2126798,2126798,2126798,2126798,2642894,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2606030,2126798,2630606,2126798,2126798,2651086,2126798,2126798,2126798,3064782,2126798,2126798,2126798,2126798,2126798,3101646,2126798,2126798,3134414,2126798,2126798,2126798,2126798,2126798,2126798,0,2179072,2126798,2126724,2457600,2179072,2179072,2179072,2179072,2458500,2126798,2126798,2126798,3208142,2126798,2179072,2126798,2126724,2179072,2179072,2179072,2179072,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3011460,2126724,2126724,2126724,2126798,2126798,2503630,0,0,0,0,2388868,2126724,2126724,2126724,2421636,2126724,2126724,2126724,2126724,2126724,2454404,2126724,2126724,2126724,3027844,2405326,2126798,2126798,2126798,2126798,3027918,2539520,0,2949120,2179072,2658304,2973696,2474884,2483076,2126724,2126724,2126724,2126724,2126724,2126724,2532228,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2601860,2126724,2126724,2126724,2126724,2642820,2126724,2126724,2126724,2126724,2126724,2655108,2679684,2761604,2765700,2786180,2855812,2970500,2126724,3007364,2126724,3019652,2605956,2126724,2630532,2126724,2126724,2651012,2126724,2126724,2126724,2708356,2126724,2737028,2126724,2126724,2126724,2126724,2462596,2466692,2126724,2126724,2126724,2126724,2126724,2126724,2524036,2126724,2126724,2126724,2126724,3036036,2126724,2126724,3072900,2126724,2126724,2126724,3122052,2126724,2126724,3142532,2126724,2126724,2126724,3171204,2126724,2126724,3191684,3195780,2126724,0,0,0,0,0,0,2388942,2126798,2126798,2126798,2421710,2708430,2126798,2737102,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2888654,2126798,2126798,2925518,2126798,2126798,2126798,2126798,2179072,2126798,2126724,2179072,2179072,2179072,2179072,2126724,2126724,2126724,2126724,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2802638,2814926,2126798,2839502,2126798,2126798,2126798,3142606,2126798,2126798,2126798,3171278,2126798,2126798,3191758,3195854,2126798,2179072,2126798,2126724,2179072,2126724,2126798,2179072,2126724,2126798,2179072,2126724,2126798,2985984,2986884,2986958,0,0,0,0,0,0,0,69632,73728,315,316,316,421,422,65536,429,2179072,3112960,3219456,2126724,2126724,3113860,3220356,2126798,2126798,3113934,3220430,0,0,0,0,0,0,0,2046,0,0,0,0,0,0,0,0,0,1238,0,0,0,0,0,0,2179072,2179072,2179072,3223552,0,0,2126724,2126724,2417540,2126724,2126724,2126724,2446212,2126724,2126724,2126724,2126724,2888580,2126724,2126724,2925444,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,0,0,2126798,2126798,2126798,2409422,2126798,2126798,2945924,2126724,2126724,2995076,2126724,3003268,2126724,2126724,3023748,2126724,3068804,3085188,2126724,3097476,2126724,2126724,2126724,2519940,2126724,2126724,2126724,2126724,2589572,2126724,2614148,2646916,2126724,2126724,2696068,2757508,2638798,2126798,2126798,2126798,2126798,2728910,2753486,2126798,2126798,2126798,2126798,2843598,2847694,2126798,2896846,2917326,2126798,2126798,2945998,2126798,2126798,2995150,2126798,3003342,2126798,2126798,3023822,2126798,3068878,3085262,2126798,3097550,2179072,2179072,3059712,2179072,2179072,2179072,2179072,2179072,2179072,3178496,2126724,2126724,2126724,2126724,2126724,2126724,3224452,0,0,2126798,2126798,2417614,2126798,2126798,2126798,2446286,2126798,2126724,2126724,3060612,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3179396,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3126222,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3118030,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2495438,2126798,2126798,2515918,2126798,2126798,2126798,2544590,2548686,2126798,2126798,2597838,2126798,2126798,2126798,2126798,2425806,2433998,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,0,0,0,2179072,2126798,2126724,2126798,2126798,2126798,3060686,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3179470,2179072,2126798,2126724,2179072,2126724,2659204,2974596,2126724,2126798,2659278,2974670,2126798,2711552,256e4,2179072,2560900,2126724,2560974,2126798,2126798,2126798,2126798,2462670,2466766,2126798,2126798,2126798,2126798,2126798,2126798,2524110,2126798,2126798,2126798,2126798,0,0,0,0,0,0,0,0,0,0,2473984,2478080,2179072,2179072,2179072,3129344,2179072,2179072,3153920,3166208,3174400,2397060,2401156,2126724,2126724,2442116,2126724,2470788,3154820,3167108,3175300,2397134,2401230,2126798,2126798,2442190,2126798,2470862,2126798,2126798,2126798,2520014,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3130318,2126798,2126798,3154894,3167182,3175374,2506752,2507726,2507652,2126798,2126798,2589646,2126798,2614222,2646990,2126798,2126798,2696142,2757582,2126798,2126798,2126798,2126798,2933710,2126798,2126798,2126798,2126798,2593742,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2449408,0,2535424,2179072,3006464,2179072,3018752,2179072,2179072,2179072,3149824,2126724,2429828,2438020,2126724,2487172,2126724,2126724,2126724,2126724,2933636,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,3130244,2126724,2126724,2126798,2126798,2655182,2679758,2761678,2765774,2786254,2855886,2970574,2126798,3007438,2126798,3019726,2126798,2126798,2126798,2126798,0,2502656,0,0,3010560,0,0,0,0,2990080,2179072,2179072,2126798,3150798,2179072,3051520,2126724,3052420,2126798,3052494,0,2490368,2498560,0,0,0,0,2875392,2179072,2179072,2179072,2555904,2564096,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3137536,2126724,2126724,2126724,3208068,2126724,0,0,0,0,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2552782,2126798,2126798,2126798,2126798,2126798,2126724,2499460,2126724,2126724,2126724,2556804,2564996,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2929540,2126724,2126724,2126724,2999172,2126724,2126724,2126724,3138436,2126798,2126798,2499534,2126798,2126798,2126798,2556878,2565070,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,2126798,3011534,2126798,2126798,2126798,0,0,0,0,0,0,0,0,0,0,0,0,0,322,323,0,2126724,2450308,2126724,2536324,2126724,2610052,2126724,2859908,2126724,2126724,2126724,3031940,2126724,2126798,2450382,2126798,2126798,2126798,2126798,3093454,0,0,0,2404352,2179072,2179072,2179072,2179072,3026944,2405252,2126724,2126724,2495364,2126724,2126724,2515844,2126724,2126724,2126724,2544516,2548612,2126724,2126724,2597764,2126724,2126724,2126724,2663300,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2126724,2802564,2536398,2126798,2610126,2126798,2859982,2126798,2126798,2126798,3032014,2126798,2527232,0,0,0,2179072,2527232,2179072,2179072,2179072,2179072,2179072,2126724,2528132,2126724,2126724,2126724,2126724,2126724,3093380,2126798,2528206,2126798,2126798,2126798,2126798,3138510,2940928,2941828,2941902,0,0,0,0,0,2748416,2879488,0,0,0,0,0,172032,0,172032,0,0,0,0,0,0,0,0,0,364,0,0,122880,122880,0,0,0,221184,221184,0,0,0,0,0,0,0,0,0,221184,221184,0,0,221184,221184,221184,0,0,0,0,0,0,221184,0,0,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,0,0,0,0,0,0,0,0,0,364,338,292,0,0,0,0,0,0,221184,0,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,139264,299,0,0,2142208,0,0,0,98304,0,0,0,53248,0,0,0,0,0,0,0,2061,2062,0,0,0,0,0,0,0,0,159744,0,0,0,0,0,0,0,0,1198,0,0,0,0,0,0,0,0,1212,0,0,0,0,0,0,0,0,1578,0,0,0,577536,0,0,1583,0,0,0,302,0,303,0,0,0,303,0,0,0,2461696,0,0,0,0,0,0,1159168,416,416,0,0,0,0,0,416,0,0,98304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12290,2179072,3121152,2179072,2179072,3141632,2179072,2179072,2179072,3170304,2179072,2179072,3190784,3194880,2179072,901,0,0,0,0,0,229376,0,0,0,0,0,0,0,0,1666,0,0,0,0,0,2958,0,0,0,0,2962,0,0,0,0,2967,0,0,901,0,2387968,2125824,2125824,2125824,2420736,2125824,2125824,2125824,2125824,2125824,2453504,2125824,2473984,2482176,2125824,2125824,2125824,2125824,2125824,2125824,2531328,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3190784,3194880,2125824,975,0,0,0,975,0,2387968,2125824,2125824,2125824,2420736,2179072,2179072,2179072,3223552,901,0,2125824,2125824,2416640,2125824,2125824,2125824,2445312,2125824,2125824,2125824,2125824,2125824,3223552,0,0,2125824,2125824,2416640,2125824,2125824,2125824,2445312,2125824,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,225734,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,0,0,0,0,0,0,0,0,0,379,0,0,0,0,0,0,0,217088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,307,308,0,0,0,114688,0,241664,258048,0,0,0,0,0,0,0,0,0,0,676,677,678,0,0,0,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,254407,0,0,0,0,0,0,0,0,0,386,0,0,0,0,0,386,0,0,0,2183168,0,0,270336,0,0,298,299,0,2134016,302,303,200704,0,0,180224,0,0,0,0,0,0,0,0,2424832,2433024,0,0,2457600,20480,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2126724,2126724,2126724,2126724,2126724,1,12290,2113825,0,0,0,0,0,0,295,0,0,0,295,0,0,0,0,0,0,2387968,0,0,0,0,0,0,0,0,0,0,330,381,383,0,0,0,0,0,266240,0,0,0,0,0,0,0,0,0,0,0,266240,0,0,0,0,0,0,0,0,0,0,1,12290,0,0,266240,0,0,0,0,0,0,0,0,0,0,0,0,0,338,339,340,2113825,0,0,2183168,0,0,0,0,0,298,299,0,2134016,302,303,0,0,0,0,0,237568,0,0,0,0,0,0,0,0,0,0,0,1657,0,0,0,0,274432,274432,274432,274432,274432,274432,0,0,0,0,0,274432,0,274432,1,12290,3,0,0,0,0,0,0,0,90408,90408,90408,90408,0,94505,1,12290,3,78114,292,0,0,0,0,0,0,0,0,0,0,0,0,1611,0,0,0,3,78114,78114,292,0,0,0,0,0,298,299,0,0,302,303,0,0,0,0,0,2134016,0,0,0,0,0,0,0,0,0,1163264,78114,1066,0,0,0,0,0,0,0,0,0,0,0,0,0,0,308,307,534,534,534,1341,901,556,556,556,556,556,556,556,556,556,556,556,580,580,3062,580,580,2009,0,0,0,0,0,2011,0,0,0,0,0,0,0,0,0,0,722,0,0,0,0,0,0,2954,0,0,0,0,0,0,0,0,0,0,0,0,0,0,330,0,0,1650,0,0,0,0,0,0,0,0,2089,0,0,0,0,0,0,0,2086,0,0,0,0,0,2092,0,0,290,1066,0,0,0,0,0,0,0,0,0,0,0,0,0,0,680,681,3,78114,78449,292,0,0,0,0,0,298,299,0,0,302,303,0,0,0,0,0,2134016,0,0,0,0,0,0,0,0,1138688,0,0,0,0,0,2134016,0,0,0,0,0,0,0,739,0,0,0,0,0,0,1150976,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1192,0,0,0,0,0,0,0,0,0,0,0,0,0,385,337,0,581,557,557,557,557,557,557,557,581,581,581,534,581,581,581,581,581,581,581,557,557,534,557,581,557,581,1,12290,1,12290,3,78115,292,0,0,0,0,0,0,0,0,0,0,0,0,1680,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,1,12290,282624,282624,282624,0,0,282624,0,0,0,0,0,0,0,0,0,0,0,2027,0,0,0,0,0,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,0,282624,282624,282624,282624,282624,0,0,0,0,0,0,0,0,0,637,0,0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,3047424,3129344,0,2981888,2396160,0,3153920,3132,0,0,2740224,0,0,0,0,0,0,1181,1183,0,0,0,0,0,0,0,0,0,1608,1609,1610,0,0,0,0,0,0,0,286720,286720,0,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,0,0,0,0,0,0,0,0,0,705,0,0,0,709,0,0,0,3108864,3198976,0,0,3043328,0,3149824,2936832,0,2760704,3252,0,0,0,0,0,0,0,69632,73728,167936,0,0,0,0,65536,0,0,0,0,3329,0,0,2834432,0,3227648,2568192,2564096,0,2940928,2179072,2179072,2498560,3329,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,0,2125824,2125824,0,0,0,308,0,0,0,0,0,307,0,307,308,0,307,307,0,0,0,307,307,308,308,0,0,0,0,0,0,307,407,308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,783,0,0,0,308,412,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,2134016,0,0,0,0,0,0,57344,0,0,0,0,0,0,1120,0,0,0,0,0,0,0,0,0,0,1239,0,0,0,0,0,456,456,456,482,482,456,482,482,482,482,482,482,482,507,482,482,482,482,482,482,482,482,482,482,482,482,482,482,527,482,482,482,482,482,535,558,535,558,535,535,558,535,582,558,558,558,558,558,558,558,582,582,582,535,582,582,582,582,582,582,582,558,558,535,558,582,558,582,1,12290,0,667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,769,0,697,0,0,0,0,0,0,0,704,0,0,0,0,0,0,0,0,1639,0,0,0,0,0,0,0,0,1660,1661,0,1663,0,0,0,0,0,729,0,0,0,0,0,0,0,0,0,0,0,740,0,0,0,0,0,0,2834432,0,3227648,2568192,2564096,0,2940928,2179072,2179072,2498560,0,0,0,638,0,0,0,0,0,0,0,0,0,0,755,0,0,0,0,0,2134749,0,0,0,0,0,0,0,0,0,0,0,1169,734,0,0,0,0,0,0,761,0,0,765,0,0,0,0,772,0,0,0,0,0,0,0,69632,73728,172032,0,0,0,0,65536,0,0,0,641,0,0,0,0,0,0,804,0,0,0,780,0,0,0,0,0,327,0,69632,73728,0,0,0,0,0,65536,0,0,0,821,776,0,0,0,0,0,825,826,776,776,0,0,0,0,0,0,0,780,0,0,0,0,0,0,0,0,1677,0,1679,0,0,0,0,0,0,776,729,776,0,534,534,836,840,534,534,534,534,534,534,866,534,871,534,878,534,881,534,534,895,534,534,556,556,556,909,913,1018,580,1025,580,1028,580,580,1042,580,580,0,0,0,840,987,913,836,1052,881,534,534,909,1057,954,556,556,0,983,1062,1028,580,580,534,534,556,556,580,580,0,0,0,0,0,0,0,0,0,0,0,78114,1066,0,0,1068,1072,0,0,1076,1080,0,0,0,0,0,0,0,406,406,406,406,0,406,406,406,406,0,0,1144,0,0,0,0,0,0,0,0,0,0,0,0,0,508,515,515,0,0,0,1634,0,0,0,0,0,0,0,0,0,0,0,0,0,3126,0,0,1769,534,534,1772,534,534,534,534,534,534,534,534,534,534,1784,534,534,534,534,534,884,534,534,534,534,534,556,556,903,556,556,0,580,580,580,984,580,990,580,580,1003,580,580,1014,580,534,534,534,534,1789,534,534,534,534,534,534,534,1341,1799,556,556,0,580,580,580,580,580,580,580,580,580,580,580,580,580,0,0,0,0,534,534,556,556,556,1806,556,556,556,556,556,1812,556,556,556,556,556,556,0,0,580,580,580,580,580,580,580,580,580,2370,580,580,580,580,580,580,556,556,556,1825,556,556,556,556,556,556,556,556,556,556,556,556,955,556,556,556,1885,556,556,556,556,556,556,556,26009,1895,580,580,580,580,580,1902,2017,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,2042,0,0,0,0,0,0,0,0,0,2051,0,0,0,0,0,0,1196,0,0,0,0,0,0,0,0,0,0,1223,0,0,0,0,0,2109,2110,0,0,2112,0,0,0,2110,0,0,2117,0,0,0,0,0,0,0,69632,73728,221184,0,0,0,0,65536,0,2150,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1313,0,0,0,2464,0,0,0,0,0,0,0,0,0,0,0,0,0,3135,0,0,534,534,534,534,2502,534,534,534,534,534,534,534,534,534,534,534,534,2510,534,534,534,2601,556,556,556,556,556,556,556,556,556,556,556,556,556,2611,556,556,556,556,556,2563,556,556,556,556,556,556,556,556,556,556,1388,556,556,556,556,1393,556,556,556,556,2632,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1967,0,0,0,2698,0,0,0,0,0,0,2703,0,0,0,0,0,0,0,2115,0,0,0,0,0,0,0,0,0,2729,0,0,0,0,0,0,2749,2750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,789,0,0,0,0,0,0,0,2762,0,534,534,534,534,534,534,534,534,534,534,534,2521,534,534,534,534,534,2773,534,534,2777,534,534,534,534,534,534,534,534,534,534,2786,556,2820,556,556,2824,556,556,556,556,556,556,556,556,556,556,2833,580,580,580,2869,580,580,2873,580,580,580,580,580,580,580,580,580,580,2899,580,580,580,580,580,580,2882,580,580,580,580,580,580,580,580,580,580,580,2890,580,580,534,534,556,556,580,580,0,0,0,0,0,3324,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,221184,0,221184,0,0,0,0,2931,0,0,0,0,0,0,0,0,0,0,0,0,0,534,534,534,534,534,534,3010,534,534,534,534,534,534,534,534,556,556,556,556,556,556,3412,556,556,556,556,556,556,3051,556,556,556,556,556,556,556,556,556,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3091,580,3093,580,580,580,580,580,580,580,580,580,534,580,556,534,534,556,556,580,3132,3387,0,3389,0,534,3392,534,3394,534,534,534,534,534,534,534,534,1777,534,534,534,534,534,534,534,534,2157,534,534,534,534,534,534,534,534,2182,534,534,534,534,2187,534,534,534,534,3448,534,534,534,534,534,534,534,534,534,534,556,556,556,556,556,3023,556,3461,556,556,556,556,556,556,556,556,556,556,556,580,580,580,580,3064,580,3475,580,580,580,580,580,580,580,580,580,580,580,0,0,0,0,3561,534,0,3490,0,3492,534,534,534,534,534,534,534,534,534,534,534,534,534,2794,534,534,0,0,3533,0,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1281,309,310,311,0,0,0,0,0,0,0,0,0,0,0,0,0,640,0,0,0,0,420,0,0,0,0,443,0,0,0,0,0,0,0,0,0,1109,0,1111,1112,0,0,0,0,0,0,443,443,420,443,443,443,443,443,443,443,443,443,443,443,443,443,526,443,526,526,526,443,526,526,526,526,443,536,559,536,559,536,536,559,536,583,559,559,559,559,559,559,559,583,583,583,536,583,583,583,583,583,583,583,559,559,609,614,583,614,620,1,12290,534,534,874,534,534,534,534,534,534,534,534,556,556,556,556,556,0,580,580,580,580,580,580,1021,580,580,580,580,580,580,580,580,0,0,0,534,580,556,556,556,556,556,556,556,580,580,580,534,580,580,580,580,0,0,0,0,0,0,0,0,0,0,3445,534,0,0,0,1657,0,0,0,0,0,0,0,0,0,0,0,0,0,3262,534,534,1785,534,534,534,534,534,534,534,534,534,534,534,1341,0,556,556,0,580,580,580,580,580,580,580,580,580,1006,580,580,580,0,0,1544,0,0,0,0,0,1550,0,0,0,0,0,0,347,0,0,0,0,0,0,0,0,0,0,167936,167936,167936,167936,167936,167936,167936,167936,580,580,1970,580,580,580,580,580,1977,580,580,580,580,580,580,580,1444,580,580,580,580,580,1456,580,580,0,0,2425,0,0,0,0,0,0,0,0,0,0,0,0,0,654,0,0,2612,556,556,556,556,0,2615,0,0,0,0,580,580,580,580,580,534,556,580,0,3382,0,0,3385,0,0,0,580,2621,580,580,580,580,2625,580,580,580,580,580,580,580,580,580,580,3221,580,580,580,580,580,0,0,0,312,313,314,315,316,317,318,319,320,321,0,0,0,0,0,0,1249,0,0,0,0,0,0,534,534,534,534,534,850,534,534,534,534,534,0,312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1172,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0,0,0,655,0,0,422,430,421,430,0,312,430,444,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,478,483,483,494,483,483,483,483,483,483,483,483,509,509,522,522,523,523,523,523,523,523,523,523,523,523,523,509,523,523,523,523,523,537,560,537,560,537,537,560,537,584,560,560,560,560,560,560,560,584,584,584,606,584,584,584,584,584,584,607,608,608,606,608,607,608,607,1,12290,0,0,811,0,0,0,0,0,0,0,0,0,0,0,0,0,679,0,0,0,695,0,0,0,534,534,534,534,534,534,534,534,534,534,534,534,1720,534,534,882,534,534,556,556,955,556,556,0,580,580,1029,580,580,534,534,556,556,580,580,0,0,0,3322,0,0,3325,0,0,0,0,1161,0,0,0,0,0,0,0,0,0,0,0,0,0,249856,0,0,0,0,0,0,0,1193,0,0,0,0,0,0,0,0,0,0,0,0,0,1134592,0,0,0,0,0,1206,0,0,0,0,0,0,0,0,0,0,0,0,0,1218,0,0,534,534,1254,534,1257,534,534,534,534,534,534,534,534,1271,534,1276,534,534,1280,534,534,1283,534,534,534,534,534,534,534,534,534,534,534,534,534,1294,534,534,534,534,534,1341,901,556,556,1345,556,556,1349,556,556,556,556,556,0,0,0,0,0,0,580,580,580,580,580,0,3580,0,534,534,534,534,534,534,556,556,556,556,556,1363,556,1368,556,556,1372,556,556,1375,556,556,556,556,556,0,2296,0,0,580,580,580,580,580,580,580,2355,580,580,580,580,2360,580,580,580,580,1437,580,580,1441,580,580,580,580,580,580,580,580,1455,580,1460,580,580,1464,580,580,1467,580,580,580,580,580,580,580,580,580,580,0,0,188416,534,580,556,1669,0,0,0,0,0,0,1676,0,0,0,0,0,0,0,0,0,1199,1200,0,0,0,0,0,580,1923,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1459,580,580,1936,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1919,580,534,2176,534,534,534,534,534,534,534,534,534,534,534,534,534,534,0,0,534,534,534,534,2192,2193,534,534,534,534,534,534,534,534,534,534,556,556,556,556,3022,556,2262,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1819,556,556,556,2278,2279,2280,556,556,556,556,556,556,556,556,556,556,1846,556,556,556,1851,556,2349,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1985,580,580,580,2365,2366,2367,580,580,580,580,580,580,580,580,580,580,0,3558,0,3560,534,534,0,2399,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1243,0,0,0,0,0,2465,2466,0,0,0,0,0,0,0,0,0,0,0,2090,0,0,0,0,580,580,580,2663,580,580,580,580,580,580,580,580,580,580,580,580,534,580,556,3105,534,534,534,534,534,2790,534,534,534,534,534,534,534,534,534,534,556,3019,556,556,556,556,2917,0,0,0,0,0,2923,0,0,0,0,0,0,0,2927,0,0,0,0,0,2200246,0,0,0,0,0,0,0,0,0,0,0,1617,0,0,0,0,0,0,0,0,2972,0,0,0,0,0,0,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2987,534,534,534,534,534,534,534,534,534,534,899,556,556,556,556,556,556,556,556,556,3027,556,556,556,556,556,556,556,556,556,556,556,1432,26009,1341,975,580,0,3139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1597,0,534,534,534,534,3175,534,534,534,534,556,556,556,556,556,556,556,556,556,556,556,556,556,556,580,580,580,580,580,580,580,580,580,3438,0,3439,0,0,0,0,0,0,0,534,3446,534,3447,534,534,534,3451,534,534,534,534,534,534,534,556,3459,556,556,556,556,556,2589,556,556,2593,556,556,556,556,556,556,556,2606,556,556,556,556,556,556,556,556,2269,556,556,556,556,556,556,556,3460,556,556,556,3464,556,556,556,556,556,556,556,556,580,3473,580,0,0,2920,0,0,0,0,0,0,0,0,0,2926,0,0,0,0,0,1147,0,1149,0,0,0,0,0,0,0,0,534,557,534,557,534,534,557,534,3474,580,580,580,3478,580,580,580,580,580,580,580,580,0,0,0,534,534,3583,3584,534,534,556,556,3596,556,556,556,3598,580,580,580,3600,0,534,534,556,556,580,580,0,0,0,0,3244,0,0,0,0,0,323,323,373,0,0,0,0,0,0,0,0,0,0,0,0,0,725,0,0,0,0,373,0,432,438,0,445,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,484,484,495,484,484,484,484,484,484,484,484,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,538,561,538,561,538,538,561,538,585,561,561,561,561,561,561,561,585,585,585,538,585,585,585,585,585,585,585,561,561,538,561,585,561,585,1,12290,787,0,0,0,0,534,534,534,534,534,534,534,534,859,534,534,534,534,534,534,2139,534,534,2142,534,534,534,534,534,534,534,1760,1761,1762,534,534,1765,1766,534,534,1114,1115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1613,0,1100,0,1231,0,0,0,0,0,1115,0,0,0,0,0,1214,0,0,0,0,0,3088384,0,0,0,0,0,0,0,0,0,0,0,752,0,0,0,0,0,0,1246,1114,0,0,0,0,0,0,0,0,0,534,534,1255,534,534,534,1341,901,556,556,1346,556,556,556,556,556,556,556,556,1389,556,556,556,556,556,556,556,556,1397,556,556,556,1401,556,556,556,556,556,556,556,556,556,556,1880,556,556,556,556,556,580,1438,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1934,580,580,580,1465,580,580,580,580,580,580,580,580,580,580,580,580,580,1491,580,580,1478,580,580,580,580,580,580,580,1487,580,580,1489,580,580,580,1493,1517,580,580,580,580,580,0,534,580,556,534,534,534,534,534,556,580,534,556,580,534,556,580,534,556,580,0,0,0,0,0,0,0,69632,73728,0,135168,135168,0,0,65536,135168,556,556,556,556,1872,556,556,556,556,556,556,556,556,556,556,556,1832,556,556,556,556,1968,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2362,580,580,2004,0,2005,0,0,0,0,0,2007,0,0,0,0,0,0,0,2418,0,0,0,0,0,2422,0,0,2009,0,0,0,0,0,2011,0,0,0,0,0,2014,0,0,0,0,0,0,1576,0,0,0,0,0,0,0,0,0,0,2077,0,0,0,0,0,2067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,827,2121,0,0,0,0,0,0,0,0,0,0,534,534,534,534,534,534,534,534,2770,534,534,534,534,2137,534,534,534,534,2141,534,534,534,534,534,534,534,534,2518,534,534,534,534,534,534,534,534,2803,534,534,534,534,534,534,534,534,2989,534,534,534,534,534,534,534,534,3165,534,534,534,534,534,534,534,534,3270,534,534,534,534,534,534,534,534,3280,556,556,556,556,556,556,556,1426,556,556,556,556,26009,1341,975,580,556,556,2222,556,556,556,556,2226,556,556,556,556,556,556,556,556,1405,556,556,556,556,556,556,556,580,580,2309,580,580,580,580,2313,580,580,580,580,580,580,580,580,580,3527,580,580,580,0,3531,0,0,2462,0,0,0,0,0,2467,0,0,0,0,0,0,0,0,0,1640,0,0,0,0,0,0,534,534,534,2489,2490,534,534,534,534,534,534,534,534,534,534,534,534,2522,534,534,534,534,534,534,2529,534,534,534,534,534,534,534,534,534,534,534,534,534,2993,534,534,2620,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2376,2660,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3316,2707,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1100,0,0,0,0,2724,0,0,0,0,0,0,0,0,0,0,0,0,1686,0,0,0,0,0,0,0,2752,0,0,0,0,0,0,0,0,0,0,0,0,2028,0,0,0,534,534,534,534,534,2800,534,534,534,534,534,534,534,534,534,534,1307,534,534,534,534,534,2891,580,580,580,580,580,580,580,2897,580,580,580,580,580,580,580,1471,580,580,580,580,580,580,580,580,1045,580,0,0,0,534,580,556,3128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1128,534,534,534,534,534,3176,534,534,534,556,556,556,556,556,556,556,3511,556,3513,556,556,556,556,580,556,556,3297,556,556,580,580,580,580,580,580,580,580,580,580,580,3374,580,580,3132,0,0,0,0,534,534,534,534,534,534,3397,534,534,534,534,0,0,556,556,556,556,556,556,556,556,556,556,1392,556,556,556,556,556,325,326,327,0,0,0,0,0,0,0,0,0,0,0,0,0,741,0,0,0,0,0,324,372,327,371,0,0,0,0,0,0,0,0,0,0,1110,0,0,0,0,0,324,0,0,371,371,401,0,327,0,0,0,0,0,0,0,0,0,1678,0,0,0,0,0,0,0,0,0,326,0,0,0,446,459,459,459,459,459,459,459,459,472,459,459,459,459,459,459,459,459,459,459,459,459,485,485,459,485,485,500,502,485,485,500,485,511,511,511,511,511,511,511,511,511,511,511,511,511,511,528,511,511,511,511,511,539,562,539,562,539,539,562,539,586,562,562,562,562,562,562,562,586,586,586,539,586,586,586,586,586,586,586,562,562,539,562,586,562,586,1,12290,0,651,652,0,0,0,0,0,0,0,0,0,0,663,664,0,0,0,0,364,364,0,0,0,0,0,0,0,0,0,0,0,723,0,0,0,0,0,0,0,0,0,682,0,0,0,0,0,0,0,0,0,0,364,364,364,0,0,0,0,0,355,0,0,466,466,466,466,466,466,466,466,471,466,466,466,466,466,466,466,466,466,466,466,471,0,713,0,0,0,0,0,0,720,0,0,0,724,0,0,0,0,0,0,1621,0,0,0,0,0,0,0,0,0,0,769,0,0,0,0,0,0,0,0,0,762,763,0,0,0,0,0,771,0,773,0,0,0,0,0,0,1637,0,0,0,0,0,0,0,0,0,0,1095,0,0,0,0,0,0,0,0,0,790,793,0,0,0,793,793,790,0,0,0,0,0,0,0,106496,0,106496,0,0,0,0,106496,106496,0,0,0,773,0,785,0,802,0,0,0,0,793,0,700,0,0,0,0,364,364,0,0,0,0,0,0,0,0,0,1141,0,810,0,0,0,0,0,810,810,813,0,0,0,773,0,0,0,0,0,375,0,0,0,0,367,0,384,0,350,0,0,0,0,822,0,0,0,0,0,0,0,0,0,771,0,0,0,0,0,385,0,69632,73728,0,0,0,0,0,65536,0,0,822,802,822,0,534,534,837,534,843,534,534,856,534,534,867,534,872,534,534,880,883,888,534,896,534,534,556,556,556,910,556,556,556,556,556,2604,2605,556,556,556,556,556,556,556,556,556,3189,556,556,556,556,556,556,916,556,556,929,556,556,940,556,945,556,556,953,956,961,556,969,1019,580,580,1027,1030,1035,580,1043,580,580,0,0,0,534,580,556,556,556,556,556,2825,556,556,556,556,556,556,556,556,556,556,2284,556,556,556,556,556,837,534,1053,888,534,910,556,1058,961,556,0,984,580,1063,1035,580,0,2919,0,0,0,0,0,0,0,0,0,0,0,0,0,2458,0,0,0,0,1087,0,0,0,0,0,0,0,0,0,1097,0,0,0,0,0,0,1659,0,0,0,0,0,0,0,0,0,0,751,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2032,0,0,0,0,0,1104,0,0,0,0,0,0,0,0,0,0,0,0,2078,0,0,0,1129,0,0,0,364,364,0,0,0,0,0,0,0,0,0,0,0,2471,0,0,0,0,0,1143,0,0,0,0,0,0,0,0,1152,0,0,0,0,0,0,0,2442,0,0,0,0,0,0,0,2450,1121,0,0,0,0,0,0,0,0,0,0,0,0,0,1189,0,0,0,0,364,364,0,0,0,0,0,0,0,1139,0,0,0,0,0,328,0,0,0,0,0,0,0,0,0,0,0,2757,2758,0,0,0,534,1282,534,534,534,534,534,534,534,534,534,534,534,534,534,1297,1337,534,534,1341,901,556,556,556,556,556,556,556,556,556,556,1354,556,556,1419,556,556,556,556,556,556,1429,556,556,26009,1341,975,580,580,580,580,1523,580,0,534,580,556,534,534,534,534,534,556,556,556,556,556,2837,556,556,556,556,556,556,556,556,556,556,1862,1863,556,556,556,556,1461,580,580,580,1466,580,580,580,580,580,580,580,580,580,580,580,1915,580,580,580,580,580,580,1481,580,580,580,580,580,580,580,580,580,580,580,580,580,1933,580,580,580,1495,580,580,580,580,580,580,580,580,580,580,1511,580,580,580,0,2005,0,0,0,0,0,2007,0,0,0,0,0,0,0,2074,0,0,0,0,0,0,0,0,342,0,0,0,0,0,0,0,580,580,580,1521,580,580,0,534,580,556,534,534,534,534,534,556,580,534,556,580,3610,3611,3612,534,556,580,0,0,0,0,0,0,307,442,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,0,0,1585,0,0,1588,1589,1590,0,1592,1593,0,0,0,0,1598,1631,1632,0,0,0,0,0,0,0,0,1641,1642,0,0,0,0,0,0,0,155648,0,0,0,0,0,0,0,0,0,364,0,0,0,0,0,0,0,0,0,0,0,0,1212,534,534,534,0,0,0,0,1648,0,0,1650,0,0,0,0,1652,1653,0,0,0,0,0,441,0,0,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,552,575,552,575,552,552,575,552,0,0,1671,1672,1673,1674,0,0,0,0,0,0,0,0,0,0,0,2483,0,0,0,0,0,1683,0,0,1686,0,0,0,0,0,1690,0,0,0,1694,1695,1706,1566,1566,1708,534,1710,534,1711,1712,534,1714,534,534,534,1718,534,534,534,534,534,886,534,534,534,534,534,556,556,908,556,556,556,556,556,2254,556,556,556,556,556,556,556,556,556,556,1431,556,26009,1341,975,1435,534,534,1739,534,1741,534,534,534,534,534,534,534,534,1749,1750,1752,534,1786,534,534,534,534,534,534,534,534,534,1797,1341,0,1802,556,556,556,556,556,3041,556,556,556,556,556,556,556,556,556,556,3200,556,556,556,556,556,556,1804,556,1805,556,1807,556,1809,556,556,556,1813,556,556,556,556,556,0,0,0,0,0,0,580,580,2618,580,580,556,556,556,556,1826,556,556,556,556,1830,556,556,556,556,1834,556,556,556,556,556,3055,556,556,556,556,556,580,580,580,3063,580,580,580,580,1724,1915,1819,534,534,534,534,556,556,556,556,580,580,580,580,0,0,2692,0,0,1836,556,556,556,556,556,556,556,556,1844,1845,1847,556,556,556,556,556,0,2297,0,0,580,580,580,580,580,580,580,2667,580,580,580,580,580,580,580,580,580,2653,580,580,580,580,2657,580,556,556,556,1855,1856,1857,556,556,1860,1861,556,556,556,556,556,556,0,0,580,580,580,2862,580,580,580,580,556,1869,556,556,556,1873,556,556,556,556,556,556,556,1882,556,556,0,580,580,580,580,580,580,580,1002,580,580,580,580,580,580,3555,3556,580,580,0,0,3559,0,534,534,1903,580,1905,580,580,580,1909,580,580,580,580,580,580,580,580,580,580,3528,580,580,0,0,0,1922,580,580,580,580,1926,580,580,580,580,1930,580,1932,580,580,580,580,580,1524,0,1270,1454,1362,534,534,534,534,534,556,1952,1953,580,580,1956,1957,580,580,580,580,580,580,580,1965,580,580,534,534,556,556,580,580,3321,0,0,0,3323,0,0,0,0,0,0,2114,0,0,0,0,0,0,0,0,0,0,2605056,0,0,0,0,2887680,580,1969,580,580,580,580,580,580,580,1978,580,580,580,580,580,580,0,534,580,556,534,534,534,534,534,556,580,580,580,1989,534,580,556,1766,534,1995,534,1861,556,1999,556,1957,580,2003,580,0,2005,0,0,0,0,0,2007,0,0,0,0,0,0,0,2702,0,0,0,0,0,0,0,2706,0,2018,0,0,2021,2022,0,0,0,2026,0,0,0,0,0,0,0,414,414,0,0,0,0,0,414,0,0,0,2069,0,0,0,0,0,0,0,0,0,0,0,0,0,742,0,0,0,1650,0,0,0,0,0,0,0,2088,0,0,0,0,0,0,0,451,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,1147348,2095,0,2097,0,0,0,0,0,0,0,0,2106,0,0,0,0,0,0,0,184725,184925,184925,184925,0,184925,184925,184925,184925,184925,184925,0,0,0,0,0,184925,0,184925,1,12290,534,534,534,2153,534,2155,534,534,534,534,534,534,534,534,534,534,1746,534,534,534,534,534,534,2204,2205,534,534,0,0,0,0,556,556,556,556,556,556,556,556,556,2558,556,556,556,556,2238,556,2240,556,556,556,556,556,556,556,556,556,556,556,2231,556,556,556,556,556,2291,2292,556,556,0,0,0,0,580,580,580,580,580,580,580,1506,580,580,580,580,580,1513,580,580,580,580,2325,580,2327,580,580,580,580,580,580,580,580,580,580,580,2318,580,580,580,580,580,2378,2379,580,580,2145,2317,2230,534,2385,534,534,556,2389,556,556,0,580,580,580,580,580,580,997,580,580,580,580,580,580,2328,580,2330,580,580,580,580,580,580,580,2342,580,580,580,580,580,580,580,580,580,1474,580,580,580,580,580,580,580,2393,580,580,2005,0,2007,0,2009,0,2011,0,0,0,0,0,0,0,2727,0,0,0,0,0,0,0,0,0,1579,0,0,0,0,0,0,0,2437,2438,0,0,0,0,0,0,0,0,0,0,0,0,0,1089,0,0,534,2526,534,534,534,2531,534,534,534,534,534,534,534,2538,534,534,534,534,534,534,2169,534,534,534,534,534,534,534,534,534,534,2782,534,534,2785,534,534,534,534,534,534,534,2543,534,534,534,534,534,534,534,534,0,2549,556,556,2587,556,556,556,556,2591,556,556,556,2596,556,556,556,556,556,0,2615,0,0,0,0,580,580,580,580,580,534,556,580,0,0,0,0,0,0,0,3386,556,556,556,2603,556,556,556,556,556,556,556,556,2609,556,556,556,556,556,556,3042,556,3044,556,556,556,556,556,556,556,1404,556,556,1411,556,556,556,556,556,580,580,580,2623,580,580,580,580,580,580,580,580,580,580,580,580,1451,580,580,580,580,580,580,2635,580,2637,580,580,580,580,580,580,580,580,580,580,1914,580,580,580,580,580,580,580,2662,580,580,580,580,580,580,580,2669,580,580,580,580,580,580,2895,580,580,580,580,580,580,580,580,580,1046,0,0,0,534,580,556,580,580,580,2675,580,580,580,580,580,580,580,580,534,580,556,534,2913,556,2915,580,534,534,534,2798,534,534,534,534,534,534,534,534,534,534,534,534,534,3348,534,556,556,556,556,556,2846,556,556,556,556,556,556,556,556,556,556,556,2245,556,556,556,556,0,2943,2944,0,2945,0,2947,0,0,0,0,2949,0,0,0,0,0,0,0,225883,225883,225883,225883,225734,225883,225883,225883,225883,225883,225883,225734,225734,225734,225734,225734,225899,225734,225899,1,12290,2968,2969,0,2971,0,0,2974,0,0,0,2977,534,534,534,534,534,0,0,0,0,556,2214,556,556,556,556,556,0,0,0,0,0,0,580,2617,580,580,580,534,2984,534,534,534,534,534,2988,534,534,534,534,534,534,534,2994,534,534,534,534,534,3e3,534,534,534,534,534,534,534,534,534,534,1763,534,534,534,534,534,3009,3011,534,534,534,3014,534,3016,3017,534,556,556,556,556,556,556,0,0,580,2861,580,580,580,580,580,580,0,1267,1451,1359,534,534,534,1530,534,556,3024,556,556,556,556,556,3028,556,556,556,556,556,556,556,3034,556,556,556,556,556,3185,556,556,556,556,556,556,556,556,556,556,2229,556,556,2233,556,556,556,556,556,556,3040,556,556,3043,556,556,556,556,556,556,556,556,1829,556,556,556,556,556,556,556,3050,3052,556,556,556,556,3056,556,3058,3059,556,580,580,580,580,580,580,3083,580,580,580,580,580,580,580,580,580,2331,580,580,580,580,2335,580,580,3066,580,580,580,580,580,3070,580,580,580,580,580,580,580,3076,580,3092,3094,580,580,580,580,3098,580,3100,3101,580,534,580,556,534,534,534,534,534,887,534,534,534,534,534,556,556,556,556,556,0,0,0,2299,580,580,580,580,580,580,580,3084,580,3086,580,580,580,580,580,580,3106,556,3108,580,3110,0,0,0,0,0,0,3116,0,0,3119,0,0,0,0,364,364,0,0,0,0,0,1096,0,0,0,0,0,0,0,286720,0,0,0,0,0,0,0,0,0,643,0,0,0,0,0,0,0,0,0,3140,3141,0,0,0,0,0,0,0,0,0,0,0,0,2107,0,0,0,556,556,556,556,3184,556,556,556,556,556,556,556,556,556,556,556,2272,556,556,556,556,556,556,556,3195,556,556,556,556,556,556,556,556,3203,556,556,556,556,556,556,3197,556,556,556,556,556,556,556,556,556,2594,556,556,556,556,556,556,556,556,556,580,580,580,3208,580,580,580,580,580,580,580,3213,580,580,580,580,1907,580,580,580,580,580,580,580,580,1918,580,580,580,580,580,3096,580,580,3099,580,580,580,534,580,556,534,534,534,534,534,534,3278,534,534,556,556,556,556,556,556,556,556,556,556,556,3515,556,556,580,556,3296,556,556,556,580,580,580,580,580,580,580,580,580,580,580,580,3214,3326,3327,0,3132,0,3331,0,0,0,0,0,0,0,534,534,534,2766,534,534,534,534,534,2771,534,534,534,3405,556,556,556,556,556,556,556,556,556,556,556,556,960,556,556,556,556,556,3420,556,580,580,580,580,580,580,580,580,580,580,580,580,1452,580,580,580,580,580,3436,580,0,0,0,0,0,0,0,0,0,0,534,534,534,534,534,534,534,534,534,534,3502,534,534,534,534,534,3450,534,534,534,534,534,534,534,534,556,556,556,3281,556,556,556,3284,556,556,556,3463,556,556,556,556,556,556,556,556,556,580,580,580,580,580,580,3302,580,580,580,580,580,580,580,3477,580,580,580,580,580,580,580,580,580,3486,3487,0,0,0,0,364,364,0,0,0,0,1137,1095,0,0,0,0,0,0,0,69632,73728,266240,0,0,0,0,65536,0,0,0,0,0,3493,3494,3495,534,534,534,3498,534,3500,534,534,534,534,534,534,534,3269,534,534,534,534,534,534,534,534,534,2781,534,534,534,534,534,534,534,3505,3506,3507,556,556,556,3510,556,3512,556,556,556,556,3517,3518,3519,3520,580,580,580,3523,580,3525,580,580,580,580,3530,0,0,0,0,0,0,1687,0,0,0,0,0,0,0,0,0,0,783,0,0,0,0,0,0,0,0,0,0,0,3562,534,534,534,3566,556,556,3568,556,556,556,3572,556,580,580,3574,580,580,580,3578,580,0,0,0,534,534,534,534,534,534,556,556,580,580,0,3111,0,0,0,0,0,0,0,0,0,0,398,0,0,0,0,0,0,0,0,328,329,0,0,0,0,0,0,0,0,0,0,0,0,2409,0,0,0,0,368,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1629,0,0,0,0,368,0,0,0,376,378,0,0,0,0,0,0,0,0,2025,0,0,0,0,0,0,0,0,2047,0,0,0,0,0,0,0,0,2087,0,0,0,0,0,0,0,0,2127,0,0,534,534,534,534,534,0,0,411,0,0,0,411,69632,73728,0,368,368,0,423,65536,368,0,0,368,423,492,496,492,492,501,492,492,492,501,492,423,423,329,423,0,0,423,423,0,0,0,0,0,0,0,0,0,2048,0,0,0,0,0,0,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,540,563,540,563,540,540,563,540,587,563,563,563,563,563,563,563,587,587,587,540,587,587,587,587,587,587,587,563,563,540,563,587,563,587,1,12290,0,769,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1644,0,556,556,556,556,933,556,556,556,556,556,556,556,556,556,556,556,2285,556,2287,556,556,0,0,1207,0,1096,0,0,0,0,0,0,0,0,0,0,0,0,2447,0,0,0,534,534,534,534,1260,534,534,534,534,534,1272,534,534,534,534,534,0,0,0,2212,556,556,556,556,556,556,556,3029,556,556,556,556,556,556,556,556,3030,556,556,556,556,556,556,556,534,534,534,1341,901,556,556,556,556,556,556,556,556,1352,556,556,0,580,580,580,580,580,580,998,580,580,580,580,580,580,2650,580,580,580,580,580,580,580,580,580,2315,580,2317,580,580,580,580,556,556,556,1364,556,556,556,556,556,556,556,556,556,556,556,556,1378,1380,556,556,556,556,556,1871,556,556,556,556,556,556,556,556,556,556,556,556,1413,556,556,1417,534,534,534,534,534,3567,556,556,556,556,556,556,556,3573,580,580,580,580,580,2677,580,580,580,580,580,580,534,580,556,534,534,534,534,556,556,556,556,580,534,3597,556,556,556,3599,580,580,580,0,534,534,556,556,580,580,0,0,0,3243,0,0,0,0,0,0,0,657,0,0,0,0,0,0,0,0,306,306,306,0,0,0,0,0,424,424,0,424,433,0,424,424,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,486,486,460,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,541,564,541,564,541,541,564,541,588,564,564,564,564,564,564,564,588,588,588,541,588,588,588,588,588,588,588,564,564,541,564,588,564,588,1,12290,78114,1066,0,0,1069,1073,0,0,1077,1081,0,0,0,0,0,0,0,703,0,0,0,0,0,0,0,0,0,2104,0,0,0,0,0,0,0,0,0,0,1194,0,0,0,0,0,0,0,0,0,0,0,0,2472,0,0,0,0,1670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1667,0,0,0,0,0,2044,0,0,0,0,0,0,0,0,0,0,0,0,2704,0,0,0,0,2068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1681,1682,2392,580,580,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2928,0,0,0,2932,0,0,0,0,0,2938,0,0,0,0,0,0,0,719,0,0,0,0,0,0,0,0,0,721,0,0,0,0,0,0,2953,0,0,2956,0,0,0,0,0,2961,0,0,0,0,0,0,0,748,0,0,0,0,0,0,0,0,333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1204,2995,534,534,534,534,534,534,534,534,534,3004,534,534,534,534,534,0,0,2211,0,556,556,556,556,556,556,556,2268,556,556,556,556,2273,556,556,556,534,534,534,3012,534,534,3015,534,534,534,3018,556,556,556,556,556,0,0,0,0,580,580,580,580,580,580,580,556,556,534,556,580,556,580,1,12290,556,556,556,556,3054,556,556,3057,556,556,556,3060,580,580,580,580,0,0,0,0,0,0,0,0,2396,0,0,0,3077,580,580,580,580,580,580,580,580,580,580,3087,580,580,580,580,0,0,0,0,0,0,3442,0,3444,0,534,534,0,3120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2015,0,0,534,534,3151,534,534,534,534,534,534,534,534,534,534,534,534,534,3458,556,556,534,534,534,534,3163,534,534,534,534,534,534,534,3168,534,3170,534,534,534,534,534,1261,534,534,534,1270,534,534,534,534,534,534,534,2493,534,534,534,534,534,534,534,534,534,2196,534,534,534,534,534,534,556,556,556,580,580,3207,580,580,580,580,580,580,580,580,580,580,1962,580,580,580,580,580,580,3227,580,580,580,580,580,580,580,580,580,580,580,534,580,556,2912,534,2914,556,2916,3275,534,534,534,534,534,534,534,556,556,556,556,556,556,556,556,580,580,580,556,556,3287,556,556,556,556,556,556,556,556,556,3293,556,556,556,556,556,556,3466,556,556,556,556,556,556,580,580,580,580,580,580,580,580,580,580,3306,3587,3588,556,556,580,580,3591,3592,580,580,0,0,0,534,534,534,534,534,534,534,534,534,1716,534,534,534,0,683,684,0,0,0,0,689,0,0,0,364,364,364,0,0,0,0,0,534,830,534,534,534,534,534,534,860,534,534,534,534,534,534,2180,2181,534,534,534,534,534,534,2188,534,0,751,0,0,0,0,0,751,751,0,0,816,0,0,0,0,0,0,0,1134592,0,0,0,0,0,0,1134592,0,0,0,0,970,556,0,580,580,580,580,988,580,580,580,580,580,580,580,580,1044,580,0,0,0,841,988,914,534,534,534,534,897,556,556,556,556,970,0,580,580,580,580,1044,0,0,0,1145,0,0,0,0,0,0,0,0,0,0,0,0,0,2408448,0,0,534,1318,534,534,534,534,534,534,534,534,534,534,534,534,534,534,0,2549,1696,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1190,580,580,1988,580,534,580,556,534,534,534,534,556,556,556,556,580,580,580,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2122,0,0,0,0,0,0,0,0,534,534,534,534,534,2768,534,2769,534,534,2540,534,534,534,534,534,534,534,534,534,534,534,534,534,0,0,0,0,556,556,556,556,556,556,556,556,556,556,556,556,0,0,975,580,0,3129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2053,0,3235,534,3237,556,3239,580,0,0,0,0,0,0,0,0,0,0,0,3124,3125,0,0,0,556,556,556,3298,556,580,580,580,580,580,580,580,580,580,580,580,2359,580,580,580,580,3317,580,534,534,556,556,580,580,0,0,0,0,0,0,0,0,0,2076,0,0,0,0,0,0,461,461,479,487,487,479,487,487,487,487,487,487,487,487,512,520,520,520,520,520,520,520,520,520,520,520,520,520,520,529,520,520,520,520,520,542,565,542,565,542,542,565,542,589,565,565,565,565,565,565,565,589,589,589,542,589,589,589,589,589,589,589,565,565,542,565,589,565,589,1,12290,0,0,760,0,0,764,0,0,0,0,0,0,0,0,0,0,0,3132,0,0,0,0,0,778,0,0,0,0,0,0,0,782,0,0,0,0,0,0,0,779,0,0,0,0,788,0,0,0,0,0,0,800,0,0,0,0,0,0,805,0,0,0,782,0,0,0,0,364,364,0,0,0,1136,0,0,0,0,0,0,0,1606,0,0,0,0,0,0,0,0,553,576,553,576,553,553,576,553,0,805,0,0,0,0,0,805,805,0,0,0,0,782,0,0,0,0,0,534,831,534,534,534,846,534,534,534,534,534,0,2210,0,0,556,556,556,556,556,556,556,1893,26009,0,1898,580,1900,580,1901,580,0,0,0,0,823,778,0,0,823,0,0,0,0,0,0,0,0,2468,0,0,0,0,0,0,0,0,2022,0,2116,0,0,0,0,0,0,0,0,0,823,534,534,534,534,844,534,852,534,534,534,534,0,0,556,556,556,556,556,2815,556,2816,556,556,917,556,925,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2583,556,971,556,0,580,580,580,580,580,991,580,999,580,580,580,580,580,580,3097,580,580,580,580,580,534,580,556,534,534,534,534,1054,898,556,556,556,1059,971,0,580,580,580,1064,1045,0,1159,0,0,0,0,0,0,0,1167,0,0,0,0,0,0,0,789,0,0,0,0,0,0,770,0,0,0,1219,0,0,0,0,0,0,0,0,1224,0,0,0,0,0,0,0,1134592,0,364,0,0,0,1134592,0,0,0,1134592,1134592,0,0,1134592,0,0,1134592,0,1134592,534,534,1284,534,534,534,534,534,534,534,1292,534,534,534,534,534,0,2209,0,0,556,556,556,556,556,556,556,1842,556,556,556,556,556,556,556,556,26009,1896,580,580,580,580,580,580,534,534,534,1321,534,534,1325,534,534,534,534,534,1331,534,534,534,534,534,534,534,3342,534,3344,534,534,534,534,534,556,1338,534,534,1341,901,556,556,556,556,556,556,556,556,556,556,556,2568,556,556,556,556,556,1357,556,556,556,556,556,556,556,556,556,1376,556,556,556,556,556,0,2615,0,0,0,0,580,580,580,2619,580,556,556,556,1384,556,556,556,556,556,556,556,556,556,556,556,556,1816,1817,556,556,580,580,580,1522,580,580,0,534,580,556,534,534,534,534,534,556,556,556,556,556,3196,556,3198,556,556,556,556,556,556,556,556,1878,1879,556,556,556,556,556,556,534,534,534,534,1773,534,534,534,534,534,534,1781,534,534,534,534,0,0,556,556,556,2813,556,556,556,556,556,2818,556,556,1823,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2842,556,556,556,1853,556,556,556,556,1859,556,556,556,556,556,556,556,556,2840,556,556,556,556,556,556,556,1868,556,556,556,556,556,556,1876,556,556,556,556,556,556,556,556,2850,556,556,556,556,556,556,556,556,1886,1888,556,556,556,556,556,26009,0,580,580,580,580,580,580,0,1525,1526,1527,534,534,1529,534,534,556,580,580,580,1955,580,580,580,580,580,580,580,580,1964,580,580,580,580,580,1940,1941,1943,580,580,580,580,580,580,580,1951,580,580,580,1972,580,580,580,580,580,580,580,580,580,1982,1984,580,580,580,580,1925,580,580,580,580,580,580,580,580,580,580,580,2372,580,2374,580,580,0,0,0,2057,0,0,0,0,0,2063,0,0,0,0,0,0,0,1089,0,0,0,0,1241,1242,0,0,0,0,0,0,2071,0,0,0,0,0,0,0,0,2079,0,0,0,0,0,534,833,534,534,534,534,534,534,534,534,534,1306,534,534,534,534,534,534,2134,534,534,534,534,534,534,534,534,534,534,534,2146,534,534,534,534,534,534,534,3453,534,534,534,534,534,556,556,556,556,556,556,2826,556,556,556,556,556,556,556,556,556,949,556,556,556,556,967,556,2189,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1314,2203,534,534,534,534,0,0,0,0,556,556,556,556,556,556,2219,2290,556,556,556,556,0,0,0,0,580,580,580,580,580,580,2306,2377,580,580,580,580,2146,2318,2231,534,534,534,534,556,556,556,556,580,580,580,580,0,534,534,556,556,580,580,0,0,0,0,0,0,3246,0,0,0,0,0,2413,2414,0,0,2417,0,2419,0,0,0,0,0,0,0,0,2712,0,0,0,0,0,0,0,0,2728,0,0,0,0,0,0,0,0,2429,0,0,0,0,0,0,0,0,2406,0,0,0,0,0,0,0,0,2454,0,0,0,0,0,0,0,0,1587,0,0,0,0,0,0,0,1595,1596,0,0,0,2424,0,0,2427,0,0,0,0,0,0,2431,0,0,0,0,0,0,0,1159168,0,1159168,0,0,0,0,1159168,1159168,0,0,0,2452,0,0,0,0,0,0,0,2456,2457,0,0,2460,0,0,2463,0,0,0,0,0,0,0,0,0,0,2473,0,0,0,0,0,639,0,0,0,0,644,645,646,647,648,649,534,2487,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,3008,534,534,534,2515,534,534,534,534,534,534,534,534,534,534,534,534,1293,534,534,534,534,2527,534,534,534,534,534,534,2534,534,534,534,534,534,534,534,534,3343,534,534,534,534,534,534,556,534,534,2541,534,534,534,2544,534,534,534,534,534,534,534,0,0,0,0,556,556,556,556,2217,556,556,556,2574,556,556,556,556,556,556,2579,556,556,556,556,556,556,556,1427,1428,556,556,556,26009,1341,975,580,2585,556,556,556,556,556,556,2592,556,556,556,556,556,556,2599,556,556,556,556,556,3290,556,556,556,556,3291,3292,556,556,556,556,556,0,0,2298,0,580,580,580,580,580,580,580,2886,580,580,580,580,580,580,580,580,580,3312,580,580,580,580,580,580,2673,580,580,580,2676,580,580,580,580,580,580,580,2681,2682,2683,534,534,534,534,534,1289,534,534,534,534,534,534,534,534,534,534,534,2185,534,534,534,534,2720,2721,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2080,0,0,0,2736,0,0,0,0,0,0,0,0,0,0,2746,0,0,0,0,0,667,0,0,0,0,0,729,0,780,0,0,0,0,0,305,0,0,0,0,0,0,0,0,0,0,0,1565,0,0,0,0,0,0,2751,0,0,0,2753,0,0,0,0,0,0,0,0,0,0,2109,534,534,534,534,534,2787,2788,534,534,534,534,2791,534,534,534,534,534,534,534,534,534,556,556,3178,556,556,556,556,2796,534,534,534,2799,534,2801,534,534,534,534,534,534,2805,534,534,534,534,534,534,2492,534,534,534,534,534,534,534,534,534,1745,534,534,534,534,534,534,2834,2835,556,556,556,556,2838,556,556,556,556,556,556,556,556,556,2257,556,556,556,556,556,556,556,2844,556,556,556,2847,556,2849,556,556,556,556,556,556,556,2854,580,2867,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1949,580,580,580,2883,2884,580,580,580,580,2887,580,580,580,580,580,580,580,1928,580,580,580,580,580,580,580,580,1912,1913,580,580,580,580,1920,580,580,580,580,2893,580,580,580,2896,580,2898,580,580,580,580,580,580,1190,534,580,556,534,534,534,534,534,556,580,2903,580,580,580,580,580,580,534,580,556,534,534,556,556,580,580,0,0,3242,0,0,0,0,0,0,0,0,225734,225734,225734,225734,225734,225734,225734,225734,0,0,0,0,0,0,0,0,0,366,0,0,0,0,0,0,580,2918,0,0,2921,2922,0,0,0,0,0,0,0,0,0,0,0,3132,0,0,3255,0,534,534,534,534,2986,534,534,534,534,534,534,534,2992,534,534,534,534,534,534,891,534,534,534,534,556,556,556,556,556,0,0,0,0,580,580,2302,580,580,580,580,556,556,556,3026,556,556,556,556,556,556,556,3032,556,556,556,556,556,556,1841,556,556,556,556,556,556,556,556,556,3357,556,3359,556,556,556,556,580,580,580,580,3068,580,580,580,580,580,580,580,3074,580,580,580,580,580,2311,580,580,2314,580,580,580,580,580,580,2322,3138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1191,3247,0,0,0,0,0,0,0,0,0,0,3132,0,0,0,0,0,0,0,0,0,534,534,534,534,2767,534,534,534,534,534,534,534,534,3265,534,534,534,534,534,534,534,534,534,534,534,534,1341,0,556,556,534,534,3276,534,534,534,534,534,556,556,556,556,556,556,3283,556,556,556,556,556,3299,580,580,580,580,580,580,580,3304,580,580,580,580,580,3479,580,3481,580,580,3483,580,580,0,0,0,0,0,0,1210,0,0,0,0,0,0,0,0,0,0,2421,0,0,0,0,0,3132,0,0,0,0,534,534,534,534,534,534,534,534,3399,534,3401,3402,534,3404,534,556,556,556,556,556,556,556,556,3414,556,3416,3417,556,3419,556,3421,580,580,580,580,580,580,580,580,3430,580,3432,3433,580,3435,580,3437,0,0,0,0,0,0,0,0,0,0,534,534,534,534,534,534,534,3499,534,3501,534,534,580,580,580,3553,580,3554,580,580,580,580,0,0,0,0,534,534,534,534,534,534,3538,534,3539,534,534,534,3604,3605,3606,534,556,580,534,556,580,534,556,580,0,0,0,0,0,0,0,3211264,0,0,0,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,0,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3117056,2125824,2125824,2125824,2125824,590,566,566,566,566,566,566,566,590,590,590,543,590,590,590,590,590,590,590,566,566,543,566,590,566,590,1,12290,556,556,1398,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2853,556,0,0,730,0,0,0,0,0,0,0,0,0,0,0,0,0,1126,1127,0,534,534,534,534,2138,534,534,534,534,534,534,534,534,534,534,534,534,2784,534,534,534,556,556,556,2223,556,556,556,556,556,556,556,556,556,556,556,556,1849,556,556,556,580,580,580,2310,580,580,580,580,580,580,580,580,580,580,580,580,1490,580,580,580,402,0,0,0,0,380,0,69632,73728,0,0,0,0,425,65536,0,0,0,0,364,364,1133,0,0,0,0,0,0,0,0,0,0,3133,0,0,0,3136,0,425,425,0,425,0,439,425,425,462,462,462,469,462,462,462,462,462,462,462,462,469,462,462,462,462,462,462,462,462,476,462,488,488,462,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,531,544,567,544,567,544,544,567,544,591,567,567,567,567,567,567,567,591,591,591,544,591,591,591,591,591,591,591,567,567,544,567,591,567,591,1,12290,0,0,0,653,654,0,0,0,0,0,0,0,0,0,0,0,0,2939,0,0,2941,0,0,0,654,0,654,0,0,0,0,814,0,0,0,654,0,0,0,0,374,0,0,0,0,0,0,0,0,0,0,0,534,2130,534,534,534,556,919,556,556,556,556,556,556,556,556,556,556,957,556,556,556,556,556,556,3545,556,3546,556,556,556,556,580,580,580,580,580,580,0,0,0,534,534,534,534,534,534,556,556,534,534,884,534,534,556,556,957,556,556,0,580,580,1031,580,580,580,580,580,2907,580,580,534,580,556,534,534,556,556,580,580,0,0,0,0,0,0,0,3117,0,0,0,290,1066,0,0,1069,1073,0,0,1077,1081,0,0,0,0,0,0,0,1094,0,0,0,0,0,0,0,0,0,192965,192965,192965,192965,192965,192965,192965,192965,0,0,0,1088,1089,0,0,0,0,0,0,0,0,0,0,0,0,131072,131072,0,0,0,1130,0,0,364,364,0,0,0,0,0,0,0,0,0,0,0,3132,0,3254,0,0,1089,1088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2093,0,1088,0,0,0,0,0,0,0,0,0,0,0,0,534,1253,534,534,534,534,534,1303,534,534,1305,534,534,534,1309,534,534,534,0,901,556,556,556,556,556,556,556,556,556,556,556,556,3549,580,580,580,534,534,534,534,1287,534,534,534,534,534,534,534,534,534,534,534,534,2804,534,534,2807,534,534,1320,534,534,534,534,534,534,534,534,534,534,534,1334,534,534,534,534,534,1323,534,534,534,534,534,534,534,534,534,534,534,2509,534,534,534,534,534,534,534,1341,901,556,1344,556,556,556,556,556,556,556,556,556,2283,556,556,556,556,556,556,556,556,1358,1365,556,556,556,556,556,556,556,556,556,1379,556,556,0,580,580,580,985,989,992,580,1e3,580,580,580,1015,1017,556,556,556,1399,556,556,556,556,556,556,556,1412,556,556,556,556,556,556,1858,556,556,556,556,556,556,556,556,556,1402,556,556,556,556,556,556,556,1416,556,1436,580,580,580,580,580,580,580,580,580,580,580,1450,1457,580,580,580,580,580,3069,580,580,580,580,580,580,580,580,580,580,1510,580,580,580,580,580,580,1518,580,580,580,580,0,1266,1450,1358,534,534,1320,534,534,556,556,556,556,556,3354,556,556,556,556,556,556,3360,556,556,556,556,556,556,2615,0,580,580,580,580,580,580,580,580,580,2626,580,580,580,580,580,580,556,1412,556,556,580,580,1504,580,580,1066,0,0,0,0,0,0,0,1107,0,0,0,0,0,0,0,0,658,0,0,661,0,0,0,0,1570,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1228,1721,1722,534,534,534,534,1729,534,534,534,534,534,534,534,534,534,556,3177,556,556,556,3180,556,534,1770,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1311,534,556,556,1824,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3204,556,556,556,1838,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3294,556,580,1987,580,580,534,580,556,534,534,534,534,556,556,556,556,580,580,580,580,0,0,0,0,2694,2029,0,2030,0,0,0,0,0,0,0,0,0,2039,0,0,0,0,0,0,1700,0,0,0,0,0,0,0,0,0,298,0,0,0,0,0,0,534,534,2190,534,534,534,534,534,2195,534,534,534,534,534,534,534,1326,534,534,534,534,534,534,534,534,1291,534,534,534,534,534,534,534,556,2276,556,556,556,556,556,556,2282,556,556,556,556,556,556,556,1810,556,556,556,556,556,556,556,556,3188,556,556,556,556,556,556,556,580,2363,580,580,580,580,580,580,2369,580,580,580,580,580,580,580,2329,580,580,580,580,580,580,580,580,580,3557,0,0,0,0,534,534,580,580,2634,580,580,580,580,580,580,580,580,580,580,580,580,580,1948,580,580,0,0,0,0,2699,0,0,0,0,0,0,0,0,0,0,0,0,163840,0,0,0,534,534,534,534,534,2778,534,534,534,534,534,534,534,534,534,534,1779,534,534,534,534,534,534,2809,534,534,0,0,556,556,556,556,556,556,556,556,2817,556,556,556,556,556,3465,556,3467,556,556,3469,556,556,580,580,580,580,580,580,580,580,580,580,3373,580,3375,580,556,556,556,2858,556,556,0,0,580,580,580,580,580,580,580,580,1445,580,580,580,1454,580,580,580,2866,580,580,580,580,580,580,2874,580,580,580,580,580,580,580,580,1473,580,580,580,580,580,580,580,534,2996,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1767,1768,3036,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2275,580,3078,580,580,580,580,580,580,580,580,580,580,580,580,580,580,1966,580,0,0,0,0,3130,0,0,0,0,0,0,0,0,0,0,0,0,167936,0,0,0,534,534,3174,534,534,534,534,534,534,556,556,556,556,556,556,556,1828,556,556,556,556,556,556,556,556,26009,0,580,580,580,580,580,580,0,0,0,0,3535,534,534,534,534,534,534,534,534,534,534,534,534,2991,534,534,534,3542,556,556,556,556,556,556,556,556,556,556,556,556,3550,580,580,580,580,580,3082,580,580,3085,580,580,580,580,580,580,580,1911,580,580,580,580,580,580,580,580,580,3072,580,580,580,580,580,580,463,463,463,447,447,463,447,447,447,447,447,447,447,447,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,545,568,545,568,545,545,568,545,592,568,568,568,568,568,568,568,592,592,592,545,592,592,592,592,592,592,592,568,568,545,568,592,568,592,1,12290,0,0,0,655,0,655,0,0,0,0,0,0,0,0,655,0,0,0,0,0,0,0,0,0,0,0,556,920,556,556,934,556,556,556,556,556,556,556,556,556,556,556,2841,556,556,556,556,0,0,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,1155,0,0,0,0,0,1177,0,0,0,0,0,0,0,0,0,0,0,0,0,2461696,0,0,0,0,0,1232,0,0,0,0,0,0,0,0,0,0,0,0,0,2801664,0,0,534,534,534,534,1322,534,534,534,534,534,1329,534,534,534,534,534,534,534,2505,534,2507,534,534,534,534,534,534,534,1793,534,534,534,534,1341,0,556,556,556,556,1359,556,556,556,556,556,556,556,556,556,556,556,556,556,965,556,556,556,556,556,1421,556,556,556,556,556,556,556,556,26009,1341,975,580,580,580,580,1974,1975,580,580,580,580,580,580,580,580,580,580,2641,580,580,580,2644,580,556,556,1534,556,580,580,580,1538,580,1066,0,1542,0,0,0,1548,0,0,0,1554,0,0,0,1560,0,0,0,0,0,0,0,0,0,2444,0,0,0,2448,0,0,1599,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1569,534,534,1723,534,534,534,534,534,534,534,534,534,1734,534,534,534,534,534,534,892,534,534,534,534,556,556,556,556,556,0,0,2298,0,0,0,580,580,580,580,580,580,3480,580,580,580,580,580,580,0,0,0,534,3582,534,534,534,534,556,3586,1754,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1316,0,2096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2108,0,534,534,534,534,2154,534,534,534,534,534,534,534,534,534,534,534,534,3006,534,534,534,556,556,556,2239,556,556,556,556,556,556,556,556,556,556,556,556,1864,556,556,1867,580,580,580,2326,580,580,580,580,580,580,580,580,580,580,580,580,1512,580,580,580,556,556,3194,556,556,556,556,556,556,556,556,556,556,556,556,556,1414,556,556,0,0,3328,3132,0,0,0,0,0,0,0,0,0,534,534,534,534,534,851,534,534,534,534,534,580,580,3379,580,580,534,556,580,0,0,0,3384,0,0,0,0,0,0,306,204800,0,0,0,0,0,0,0,0,0,364,298,0,0,0,0,0,3132,0,0,0,0,534,534,534,534,3395,534,534,534,534,534,534,534,2156,534,2158,534,534,534,534,534,534,534,2170,534,534,534,534,534,534,534,534,534,2546,534,534,534,534,0,2549,387,389,339,0,0,0,0,0,0,338,0,0,339,0,0,0,0,0,0,2023,0,0,0,0,0,0,0,0,0,0,359,0,0,0,0,0,0,0,0,386,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,393,394,0,395,0,0,0,0,0,395,0,0,0,0,0,1209,0,0,0,0,1214,0,0,0,0,0,0,0,2405,0,0,0,0,0,0,0,0,0,1094,0,0,0,0,1099,0,0,0,338,0,0,440,0,0,464,464,464,464,464,464,464,464,546,569,546,569,546,546,569,546,475,464,464,464,493,470,493,493,493,493,493,493,493,493,464,464,470,464,464,464,464,464,464,464,464,464,464,464,474,474,464,475,464,464,464,593,569,569,569,569,569,569,569,593,593,593,546,593,593,593,593,593,593,593,569,569,546,569,593,569,593,1,12290,0,0,0,699,0,0,0,0,0,0,0,0,708,0,710,0,0,0,0,431,0,0,0,0,0,0,0,0,0,0,0,0,1643,0,0,0,0,743,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2411,0,0,759,0,0,0,0,0,0,0,0,0,0,0,656,0,775,0,0,0,0,0,824,0,0,0,0,0,0,779,656,0,0,796,0,0,0,0,699,0,0,0,0,0,0,799,0,0,0,0,434,0,0,331,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,796,779,0,0,801,0,660,0,775,0,0,0,0,0,0,0,0,2755,0,0,0,0,0,0,0,0,2937,0,0,0,0,0,0,0,0,2741,0,0,0,2745,0,2747,0,0,0,775,801,0,801,796,0,0,0,815,0,0,0,656,818,828,0,0,0,0,534,832,534,534,534,848,534,534,862,534,534,534,534,534,534,2504,534,534,534,534,534,534,534,534,534,898,534,556,556,556,556,556,534,534,875,534,534,534,534,893,534,534,534,556,556,904,556,556,0,580,580,976,580,580,580,580,580,580,1007,580,580,580,580,580,1908,580,580,580,580,580,580,580,580,580,1921,556,921,556,556,935,556,556,556,556,948,556,556,556,556,966,556,556,556,556,580,580,580,580,580,580,0,3594,0,534,534,534,534,534,534,534,534,534,3156,534,534,534,534,534,534,534,2802,534,534,534,534,534,534,534,534,534,1795,534,534,1341,1800,556,556,580,1022,580,580,580,580,1040,580,580,580,0,0,0,534,580,556,556,556,556,580,580,580,580,580,580,3428,580,580,580,580,580,534,556,580,3381,0,3383,0,0,0,0,0,0,0,2126,0,0,0,534,534,534,534,534,534,534,534,534,534,1717,534,534,0,0,1131,0,364,364,0,1134,0,0,0,0,0,0,0,0,0,2481,0,0,0,0,0,0,0,1174,0,0,0,0,0,0,1091,0,0,0,0,0,0,0,0,111044,111044,111044,111044,111044,111044,111044,111044,1,12290,1093,0,0,0,0,0,0,1197,0,0,0,0,1202,0,0,0,0,0,0,2033,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,324,0,0,0,0,1131,0,0,1237,0,0,0,0,0,0,0,0,0,2713,0,0,0,0,0,0,1216,0,0,0,0,1248,0,0,0,0,0,0,0,534,534,534,841,534,534,534,534,534,534,534,556,556,1360,556,556,556,556,556,556,556,556,556,556,556,556,1382,580,580,1497,580,580,580,580,580,580,580,580,580,580,580,580,580,2334,580,580,556,1533,556,556,580,580,1537,580,580,1066,0,0,0,0,0,0,0,1121,0,0,1124,1125,0,0,0,0,1584,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1614,0,0,0,1602,0,0,1605,0,1607,0,0,0,0,0,0,0,0,122880,0,122880,122880,122880,122880,122880,0,0,1697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2423,0,534,1755,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2162,534,556,1822,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3049,556,556,556,556,2265,556,556,556,556,556,556,556,556,556,556,556,3031,556,556,556,556,0,0,0,0,2402,0,2404,0,0,2407,0,0,0,0,0,0,0,1165,0,0,0,0,0,0,0,0,0,750,0,0,0,0,0,0,2412,0,0,0,2415,2416,0,0,0,0,0,0,0,0,0,0,0,106496,0,0,0,0,0,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,0,2912256,0,3207168,0,0,0,0,2440,0,2441,0,0,0,0,0,0,0,0,0,0,2470,0,0,0,0,0,2461,0,0,0,0,0,0,0,0,2469,0,0,0,0,0,2475,0,0,0,0,2478,0,0,0,0,0,0,0,0,0,2486,0,0,0,0,435,0,0,447,463,463,463,463,463,463,463,463,463,473,463,463,463,463,463,463,534,2500,2501,534,534,534,534,534,2506,534,2508,534,534,534,534,2512,2525,534,534,534,534,534,534,2533,534,534,534,534,2537,534,534,534,534,534,534,1262,534,534,534,534,534,534,1277,534,534,556,556,556,2561,556,556,2564,2565,556,556,556,556,556,2570,556,2572,556,556,556,556,2576,556,556,556,556,556,556,556,556,2582,556,556,0,580,580,977,580,580,580,993,580,580,580,580,580,580,1443,580,580,580,1447,580,580,1458,580,580,556,556,2602,556,556,556,556,556,556,556,556,556,556,556,556,556,1833,556,556,2685,534,534,556,2687,556,556,580,2689,580,580,0,0,0,0,0,0,0,2936,0,0,0,0,0,0,0,0,0,2036,0,0,0,0,0,0,0,0,2708,0,0,0,0,0,0,0,2714,2715,2716,0,0,0,0,0,0,2060,0,0,0,0,0,2064,0,0,2066,0,2735,0,2737,0,0,0,2740,0,0,2743,0,0,0,0,0,0,0,2960,0,0,0,0,0,0,0,0,0,2430,0,0,0,0,0,2435,534,534,2810,534,0,0,2811,556,556,556,556,556,556,556,556,556,2566,556,556,556,556,556,556,556,2856,556,556,2859,556,0,0,2860,580,580,580,580,580,580,580,2651,580,580,580,580,580,580,2658,580,580,2892,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2321,580,2902,580,580,2905,580,580,2908,580,2909,2910,2911,534,534,556,556,580,580,0,0,0,0,0,3115,0,0,0,0,0,0,0,69632,73728,0,0,0,420,0,65536,0,2929,2930,0,0,0,0,2935,0,0,0,0,0,0,0,0,0,0,2730,0,0,0,0,0,534,534,2997,534,2999,534,534,534,534,534,534,3005,534,534,3007,534,534,534,534,534,1324,534,534,534,534,534,534,534,534,1335,1336,556,3037,556,3039,556,556,556,556,556,556,556,3046,556,556,3048,556,556,556,556,580,580,580,580,580,1066,0,0,0,0,0,0,0,377,0,380,0,0,0,380,0,0,580,580,3079,580,3081,580,580,580,580,580,580,580,3088,580,580,3090,534,534,534,534,534,3164,534,534,534,534,534,534,534,3169,534,534,534,534,534,534,2779,534,534,534,534,534,534,534,534,534,534,3167,534,534,534,534,534,3181,3182,556,556,556,556,3186,3187,556,556,556,556,556,3191,556,556,0,580,580,978,580,580,580,995,580,580,1009,580,580,580,580,580,2353,2354,580,580,580,580,580,580,2361,580,580,556,556,556,580,580,580,580,580,580,580,3210,3211,580,580,580,580,580,1442,580,580,580,580,1448,580,580,580,580,580,580,3524,580,3526,580,580,580,580,0,0,0,0,0,0,0,0,0,0,534,534,3215,3216,580,580,580,580,580,3220,580,580,580,580,580,580,580,580,1507,580,580,580,580,580,580,580,3226,580,580,580,580,580,580,580,580,580,580,580,580,534,580,556,2684,556,556,556,3288,556,556,556,556,556,556,556,556,556,556,556,556,2258,556,556,556,3307,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2347,2348,3132,0,0,0,0,534,534,3393,534,534,534,534,3398,534,534,534,534,534,534,1290,534,534,534,534,534,534,534,534,534,1267,534,534,534,534,534,534,534,3403,534,534,556,556,3408,556,556,556,556,3413,556,556,556,556,556,556,1874,556,556,556,556,556,1881,556,556,556,3418,556,556,556,580,580,3424,580,580,580,580,3429,580,580,580,580,580,1468,580,580,580,580,580,580,580,1476,580,580,3434,580,580,580,0,0,0,0,0,3441,0,0,0,0,534,534,534,534,3497,534,534,534,534,534,534,534,534,1731,534,534,534,534,1735,534,534,534,3563,3564,534,534,556,556,556,3569,3570,556,556,556,580,580,580,580,580,580,580,580,580,3212,580,580,580,3575,3576,580,580,580,0,0,0,534,534,534,534,534,534,556,556,0,580,580,979,580,580,580,580,580,580,580,580,580,580,2358,580,580,580,580,580,341,342,343,344,345,0,0,0,0,0,0,0,0,0,0,0,0,221184,0,0,0,0,0,0,390,0,0,0,0,0,0,0,0,0,0,0,0,302,0,0,0,344,344,345,344,0,343,344,448,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,480,489,489,497,489,499,489,489,499,499,489,499,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,547,570,547,570,547,547,570,547,594,570,570,570,570,570,570,570,594,594,594,547,594,594,594,594,594,594,594,570,570,547,570,594,570,594,1,12290,650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,665,666,0,668,669,0,0,0,0,0,675,0,0,0,0,0,0,0,1220,1250,1251,0,1220,0,534,534,534,0,0,0,685,0,0,0,0,0,0,692,364,364,364,0,0,0,0,0,687,0,0,0,0,0,364,364,364,0,0,0,0,0,734,0,0,0,0,0,0,0,0,0,0,0,1691,0,0,0,0,712,0,714,0,716,0,0,0,0,0,0,0,0,0,726,0,0,0,0,436,0,0,0,0,0,0,0,0,0,0,0,0,2138112,0,0,0,0,0,0,639,745,746,747,0,0,0,0,0,753,754,0,0,0,0,0,748,0,0,803,0,0,0,0,0,0,0,0,1134592,0,0,1134592,0,0,0,0,0,685,0,0,665,0,685,0,797,668,716,0,685,798,0,0,0,0,0,1090,1091,1092,1093,0,0,0,0,0,0,0,0,2948,0,0,0,0,0,2951,0,0,0,754,0,0,0,0,0,0,0,0,747,807,808,0,0,0,0,0,1119,0,0,0,0,0,0,0,0,0,0,0,3055616,0,0,0,3133440,0,0,0,0,747,0,0,812,692,0,0,0,817,0,0,0,0,0,0,2073,0,2075,0,0,0,0,0,0,0,0,1702,0,0,1703,0,0,1704,0,819,0,0,0,685,692,0,0,685,817,817,0,0,0,0,0,0,0,3131,0,0,0,0,0,0,0,0,749,0,0,0,0,0,0,756,870,873,534,534,534,885,889,534,534,534,534,556,556,556,911,915,918,556,926,556,556,556,941,943,946,556,556,556,958,962,556,556,0,580,580,980,986,580,580,580,580,1004,580,580,580,580,580,1469,580,580,580,580,580,580,580,580,580,580,2627,580,580,2630,2631,580,1020,580,580,580,1032,1036,580,580,580,580,0,0,0,1048,1049,1050,838,534,885,889,1055,911,556,958,962,1060,0,985,580,1032,1036,1065,1101,0,0,0,0,1105,0,0,1108,0,0,0,0,0,0,0,0,249856,249856,249856,249856,249856,249856,249856,249856,1,12290,1298,534,534,1302,534,534,534,534,534,534,534,534,534,534,1312,534,534,534,534,534,1727,534,534,534,534,534,534,534,534,534,534,1796,534,1341,0,556,556,534,1319,534,534,534,534,534,534,534,534,534,534,1332,534,534,534,534,534,534,1304,534,534,534,534,534,534,534,534,534,1266,1273,534,534,534,534,534,556,1383,556,556,556,556,556,556,556,1390,556,556,1394,556,556,556,556,556,1385,556,556,556,556,556,556,556,556,556,556,2595,556,556,556,556,556,580,580,580,1482,580,580,1486,580,580,580,580,580,580,580,580,580,1929,580,580,580,580,580,580,580,1496,580,580,1503,580,580,580,580,580,580,580,580,580,580,1516,1615,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1655,0,0,0,1647,0,1649,0,0,0,1651,0,741,0,0,0,0,0,0,330,0,0,0,0,0,0,0,330,0,0,69632,73728,0,418,418,0,0,65536,418,0,0,0,534,1709,534,534,534,534,534,534,1715,534,534,534,534,0,0,556,2812,556,556,556,556,556,556,556,556,3356,556,556,556,556,556,556,556,534,534,1787,534,534,534,534,534,534,534,534,534,1341,0,556,1803,556,556,556,556,1839,556,556,556,1843,556,556,1848,556,556,556,556,556,556,1892,556,26009,0,580,580,580,580,580,580,0,1269,1453,1361,534,534,534,534,534,556,580,580,580,1906,580,580,580,580,580,580,580,580,580,580,580,580,1917,580,580,580,1935,580,580,580,1939,580,580,1944,580,580,580,580,580,580,580,580,1945,580,580,580,580,580,580,580,0,0,2010,0,1077,0,0,0,2012,0,1081,0,0,0,0,0,0,0,3144,0,0,0,0,0,0,3147,0,534,534,534,2177,534,534,534,534,534,534,534,534,534,534,534,534,1341,1800,556,556,556,556,2263,556,556,556,556,556,556,556,556,556,556,556,556,556,1850,556,556,580,580,2350,580,580,580,580,580,580,580,580,580,580,580,580,580,2346,580,580,0,2550,0,1800,556,556,556,556,556,556,556,556,556,556,556,556,2569,556,2571,556,556,2613,556,556,556,0,0,0,2616,0,1896,580,580,580,580,580,580,3219,580,580,580,580,580,580,580,580,3225,0,0,2761,0,0,0,534,2765,534,534,534,534,534,534,534,534,534,3166,534,534,534,534,534,3171,534,534,2789,534,534,534,534,534,534,534,534,534,534,534,534,534,1295,534,534,556,556,2836,556,556,556,556,556,556,556,556,556,556,556,556,556,1865,556,556,534,534,2985,534,534,534,534,534,534,534,534,534,534,534,534,534,1310,534,534,534,534,534,2998,534,534,534,534,534,534,534,534,534,534,534,534,1341,1801,556,556,556,3025,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3205,556,556,3038,556,556,556,556,556,556,556,556,556,556,556,556,556,2247,556,556,580,580,3067,580,580,580,580,580,580,580,580,580,580,580,580,580,2643,580,580,580,580,580,3080,580,580,580,580,580,580,580,580,580,580,580,580,2345,580,580,580,534,534,534,534,534,3267,534,534,534,534,534,534,534,534,534,534,2159,534,534,534,534,2163,3285,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2289,3336,534,534,534,534,3340,534,534,534,534,534,3346,534,534,534,556,556,556,556,580,580,580,580,580,1066,0,0,0,1545,0,0,0,0,0,1620,0,0,1623,0,1625,0,0,0,0,0,0,0,2480,0,0,0,0,0,0,0,0,555,578,555,578,555,555,578,555,556,556,3351,556,556,556,556,3355,556,556,556,556,556,3361,556,556,0,580,580,981,580,580,580,580,580,580,1010,1012,580,580,580,580,1029,580,580,580,580,580,0,0,0,534,580,556,3377,580,580,580,580,534,556,580,0,0,0,0,0,0,0,0,0,3251,0,3132,3253,0,0,3256,3132,0,0,0,0,534,534,534,534,534,3396,534,534,534,3400,534,534,534,534,534,1742,534,534,534,534,534,534,534,534,534,534,2536,534,534,534,534,534,388,0,0,0,392,388,0,0,0,0,0,0,0,0,0,0,0,233472,0,0,0,0,0,0,0,404,0,346,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,437,0,0,0,0,0,0,0,0,0,0,0,636,0,0,0,0,515,515,515,515,0,0,0,0,0,0,0,0,0,515,515,515,515,515,515,515,515,548,571,548,571,548,548,571,548,595,571,571,571,571,571,571,571,595,595,595,548,595,595,595,595,595,595,595,571,571,610,615,595,615,621,1,12290,0,0,744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1668,534,534,876,534,534,534,534,894,534,534,534,556,556,905,556,556,0,580,580,982,580,580,580,580,1001,1005,1011,580,1016,580,580,1023,580,580,580,580,1041,580,580,580,0,0,0,534,580,556,556,556,556,580,580,580,580,580,1066,0,0,1544,0,0,0,0,0,0,2764,534,534,534,534,534,534,534,534,534,1268,534,534,534,534,534,534,0,0,0,0,1162,0,0,0,0,0,0,0,0,0,0,1173,0,0,0,1178,0,0,0,0,1094,0,0,0,0,0,0,0,0,274432,274432,274432,0,274432,274432,274432,274432,1256,534,534,534,534,534,534,534,534,1269,534,534,534,534,1279,534,534,534,534,534,1757,534,534,534,534,534,534,534,534,534,534,2197,534,534,534,534,534,534,534,534,1341,901,556,556,556,1347,556,556,556,556,556,556,556,1877,556,556,556,556,556,556,556,556,26009,0,580,1899,580,580,580,580,556,556,1361,556,556,556,556,1371,556,556,556,556,556,556,556,556,3468,556,556,3470,556,580,580,580,556,556,556,556,1422,556,556,556,556,556,556,556,26009,1341,975,580,580,580,580,1990,1991,1992,534,1994,534,534,556,1998,556,556,580,580,580,3367,580,580,580,580,3371,580,580,580,580,580,580,3232,580,580,580,580,580,580,534,580,556,2384,534,534,534,2388,556,556,556,580,580,1439,580,580,580,580,580,580,580,580,580,1453,580,580,580,580,580,2381,2382,2383,534,534,534,534,556,556,556,556,3410,556,556,556,556,556,556,556,580,1463,580,580,580,580,580,580,580,580,580,580,580,580,580,1477,580,580,1498,580,580,580,580,580,580,580,580,580,580,580,1514,580,580,580,580,2005,0,2007,0,2009,0,2011,0,0,0,0,0,0,0,2034,2035,0,2037,2038,0,0,0,0,0,0,0,1555,0,0,0,1561,0,0,0,0,0,0,0,0,0,286720,286720,0,286720,286720,1,12290,0,0,0,1586,0,0,0,0,0,0,0,0,0,0,0,0,303,0,0,0,0,1600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2434,0,556,1852,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3363,0,1556,0,0,0,0,0,1562,0,0,0,0,0,0,0,0,305,204800,204800,0,205105,204800,1,12290,0,0,0,2070,0,0,0,0,0,0,0,0,0,0,0,0,337,0,0,0,0,0,2111,0,0,0,0,0,0,0,0,0,0,0,0,0,1188,0,0,534,2165,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2173,534,2250,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2584,2337,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2375,580,2211,0,0,0,556,556,556,556,556,556,556,556,556,556,556,556,2597,556,556,556,556,556,556,2588,556,556,556,556,556,556,556,556,556,556,556,556,2831,556,556,556,534,3107,556,3109,580,0,0,0,0,0,0,0,0,0,0,0,0,2138112,1170,0,0,0,0,0,3132,3330,0,0,3332,0,0,0,0,0,534,3335,534,534,534,534,534,1774,534,534,534,1778,534,534,534,534,534,534,534,1776,534,534,534,534,534,534,534,534,534,2535,534,534,534,534,534,534,534,3337,534,534,534,534,534,534,534,534,534,534,534,534,534,556,556,556,556,556,556,556,556,3350,556,556,3352,556,556,556,556,556,556,556,556,556,556,556,556,2852,556,556,556,556,556,580,3366,580,580,3368,580,580,580,580,580,580,580,580,580,1946,580,580,580,580,580,580,3132,0,3388,0,3390,534,534,534,534,534,534,534,534,534,534,534,556,556,902,556,556,0,0,0,783,0,783,0,0,0,0,0,0,0,0,783,0,0,0,0,556,556,556,556,556,556,556,556,2557,556,556,556,556,556,556,2848,556,556,556,556,556,556,556,556,556,947,556,556,556,556,556,556,556,922,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1381,556,556,972,0,580,580,580,580,580,580,996,580,580,580,580,580,580,1910,580,580,580,580,1916,580,580,580,580,78114,1066,0,0,1070,1074,0,0,1078,1082,0,0,0,0,0,0,0,1222,0,0,0,0,1225,0,1181,0,534,3162,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2201,534,580,580,580,3218,580,580,580,580,580,580,580,580,580,580,580,580,2629,580,580,580,347,347,349,347,0,0,347,347,0,0,0,0,348,0,0,0,0,0,0,2125,0,0,2128,0,534,534,2131,534,534,0,0,0,347,347,349,347,347,347,347,347,347,506,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,549,572,549,572,549,549,572,549,596,572,572,572,572,572,572,572,596,596,596,549,596,596,596,596,596,596,596,572,572,549,572,596,572,596,1,12290,0,0,0,715,0,717,0,0,0,0,0,0,0,0,0,0,0,1147348,0,0,0,0,0,0,0,732,0,0,0,0,0,0,0,0,0,0,0,0,353,354,355,356,758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,673,674,0,0,0,0,0,0,0,794,795,0,0,0,0,795,0,0,0,0,0,795,0,0,794,809,0,803,0,657,0,0,0,0,0,0,0,0,0,0,0,0,3117056,0,0,0,0,820,0,0,0,0,0,0,795,0,0,0,0,0,0,0,0,1159168,364,0,0,0,0,0,0,0,0,0,0,795,534,534,839,534,534,534,534,857,534,534,534,534,534,534,1728,534,534,534,534,534,534,534,534,534,534,3272,534,534,534,3273,3274,534,534,877,879,534,534,890,534,534,534,534,556,556,906,912,556,556,556,556,580,580,580,580,580,1066,0,1543,0,0,0,1549,556,556,556,930,556,556,556,556,556,950,952,556,556,963,556,556,556,556,556,1840,556,556,556,556,556,556,556,556,556,556,1831,556,556,556,556,1835,580,1024,1026,580,580,1037,580,580,580,580,0,0,0,534,580,556,556,556,556,580,580,580,580,580,1066,1540,0,0,0,1546,0,0,0,0,0,131072,0,131072,131072,131072,131072,0,131072,131072,131072,131072,131072,131072,0,0,0,0,0,131072,0,131072,1,12290,839,879,534,890,534,912,952,556,963,556,0,986,1026,580,1037,580,580,580,580,2005,0,2007,0,2009,0,2011,0,0,2397,0,0,0,0,0,330,331,332,0,0,0,0,0,0,0,0,0,2083,0,0,0,0,0,0,0,0,0,0,0,0,2731,0,0,0,0,0,0,1132,364,364,0,0,1135,0,0,0,1138,0,1140,0,0,0,0,556,556,556,556,556,556,556,2556,556,556,556,556,556,556,2577,556,556,556,556,556,556,556,556,556,26009,1897,580,580,580,580,580,580,1142,0,0,0,0,0,0,0,0,0,0,0,0,0,1156,0,0,0,0,556,556,556,556,556,556,2555,556,556,556,556,2559,1158,0,0,0,0,1163,0,0,0,0,1168,0,0,0,0,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,1247,0,0,0,0,0,0,0,1168,534,534,534,534,534,534,1743,534,534,534,534,534,534,534,534,534,897,534,556,556,556,556,914,534,534,534,1286,1288,534,534,534,534,534,534,534,534,534,534,534,556,556,907,556,556,534,534,534,1341,901,556,556,556,556,1348,556,556,556,556,556,556,0,2298,580,580,580,580,580,580,580,580,2640,580,580,580,580,580,580,2645,580,580,580,1440,580,580,580,580,580,580,580,580,580,580,580,580,2670,2671,580,580,1494,580,580,580,580,580,580,580,1508,580,580,580,580,580,580,580,2678,580,580,580,580,534,580,556,534,534,534,1996,556,556,556,2e3,580,580,1519,1520,580,580,580,0,534,580,556,534,1528,534,534,1531,556,556,556,556,580,580,580,580,580,1066,1541,0,0,0,1547,0,0,0,0,556,556,556,2553,556,2554,556,556,556,556,556,556,0,0,580,580,580,580,2863,580,580,580,1532,556,556,1535,580,1536,580,580,1539,1066,0,0,0,0,0,0,0,1577,0,0,0,0,0,0,0,0,0,770,0,0,0,0,0,0,0,0,1617,0,0,0,0,0,0,0,0,0,0,0,0,0,1203,0,0,0,0,1633,0,0,0,0,0,0,0,0,0,0,0,0,0,1217,0,0,0,0,0,0,1658,0,0,0,0,0,0,0,0,0,0,0,364,364,364,0,0,0,0,1698,0,0,0,0,0,0,0,0,0,0,0,0,0,1226,0,0,534,1738,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2207,2549,534,534,534,1788,534,534,534,534,1794,534,534,534,1341,0,556,556,556,556,556,1891,556,556,26009,1896,580,580,580,580,580,580,1470,1472,580,580,580,580,580,580,580,580,1960,580,580,1963,580,580,580,580,556,556,1870,556,556,556,1875,556,556,556,556,556,556,556,556,1884,556,556,556,556,1890,556,556,556,26009,0,580,580,580,580,580,580,1927,580,580,580,580,1931,580,580,580,580,580,1904,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2672,580,580,580,1971,580,580,580,580,580,580,580,580,1980,580,580,580,580,580,1504,580,580,580,580,580,580,580,580,580,580,2316,580,580,2320,580,580,1986,580,580,580,534,580,556,534,534,534,534,556,556,556,556,580,580,580,580,0,0,0,2693,0,0,0,0,0,2099,0,2101,2102,2103,0,2105,0,0,0,0,0,0,0,69632,73728,0,0,0,0,424,65536,0,0,0,0,2123,0,0,0,0,0,0,0,2129,534,534,534,534,0,2211,556,556,556,556,556,556,556,556,556,556,3045,556,556,556,556,556,534,534,2136,534,534,534,534,534,534,534,534,534,534,534,534,534,1333,534,534,534,534,534,2166,534,2168,534,2171,534,534,534,534,534,534,534,534,534,3271,534,534,534,534,534,534,534,534,534,534,2178,534,534,534,534,534,2184,534,534,534,534,534,534,534,2792,534,534,534,534,534,534,534,534,534,2519,534,534,534,534,534,534,534,534,534,534,2206,0,0,0,0,2213,556,556,556,556,556,556,939,556,944,556,951,556,954,556,556,968,556,2221,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1415,556,556,556,2251,556,2253,556,2256,556,556,556,556,556,556,556,556,556,2607,556,556,556,2610,556,556,556,556,556,2264,556,556,556,556,556,2270,556,556,556,556,556,556,1369,556,556,556,1374,556,556,556,556,556,556,556,556,556,2293,0,0,0,0,2300,580,580,580,580,580,580,1942,580,580,580,1947,580,580,580,580,580,580,2308,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2880,580,580,580,2338,580,2340,580,2343,580,580,580,580,580,580,580,580,580,1961,580,580,580,580,580,580,580,580,580,2351,580,580,580,580,580,2357,580,580,580,580,580,580,1958,1959,580,580,580,580,580,580,580,580,580,3234,580,580,580,534,580,556,0,0,2400,2401,0,0,0,0,0,0,0,0,0,0,0,0,399,0,0,0,2436,0,0,2439,0,0,0,0,2443,0,0,0,0,0,0,0,0,2818048,2846720,0,2916352,0,0,3002368,0,0,0,2451,0,0,0,0,0,0,0,0,0,0,0,2459,0,0,0,0,556,556,2552,556,556,556,556,556,556,556,556,556,2851,556,556,556,556,556,556,0,0,0,2477,0,0,0,0,0,0,0,0,0,2485,0,0,0,0,0,1195,0,0,0,0,0,0,0,0,0,0,0,111044,0,0,0,0,534,534,534,534,534,2503,534,534,534,534,534,534,534,534,534,534,2520,534,534,534,534,534,556,556,556,556,2562,556,556,556,556,556,2567,556,556,556,556,556,0,0,0,0,580,580,580,580,2304,580,580,580,2633,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2901,580,534,534,534,2686,556,556,556,2688,580,580,580,2690,2691,0,0,0,0,0,0,2453,0,0,0,0,0,0,0,0,0,0,1185,0,0,0,0,0,0,0,0,2709,0,2710,0,0,0,0,0,0,0,0,0,0,0,1159168,0,0,0,0,2855,556,556,556,556,556,0,0,580,580,580,580,580,2864,580,2865,580,580,2904,580,580,580,580,580,534,580,556,534,534,556,556,580,580,0,0,0,3113,0,0,0,0,0,0,0,0,254407,254407,254407,254407,254407,254407,254407,254407,1,12290,556,556,556,3053,556,556,556,556,556,556,556,580,3061,580,580,580,580,580,2649,580,580,580,580,580,580,580,580,580,580,2371,580,580,580,580,580,580,580,580,580,3095,580,580,580,580,580,580,580,534,580,556,534,534,2386,2387,556,556,2390,2391,534,534,3338,534,534,534,534,534,534,534,534,534,3347,534,534,3349,556,556,556,556,3353,556,556,556,556,556,556,556,556,556,3362,556,556,556,556,580,580,580,580,580,3427,580,580,580,3431,580,580,580,580,1031,580,580,580,580,580,0,0,0,534,580,556,556,556,3365,580,580,580,580,3369,580,580,580,580,580,580,580,580,2356,580,580,580,580,580,580,580,580,3378,580,580,580,534,556,580,0,0,0,0,0,0,0,0,402,0,0,0,0,0,0,0,534,534,534,3449,534,534,534,534,534,534,534,534,534,556,556,556,3179,556,556,556,556,556,3462,556,556,556,556,556,556,556,556,556,556,580,580,580,3300,580,580,580,3303,580,580,580,580,580,3476,580,580,580,580,580,580,580,580,580,580,0,0,0,534,580,556,0,0,3491,0,534,534,534,534,534,534,534,534,534,534,534,534,3158,534,534,534,534,534,3565,534,556,556,556,556,556,3571,556,556,580,580,580,580,580,580,580,580,580,3372,580,580,580,580,580,580,3577,580,580,3579,0,3581,534,534,534,534,534,534,556,556,556,556,556,2224,556,556,2227,556,556,556,556,556,556,2235,400,0,0,0,0,0,367,375,403,0,0,0,0,0,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2054,408,410,0,0,367,375,0,69632,73728,0,0,0,0,426,65536,0,0,0,0,556,2551,556,556,556,556,556,556,556,556,556,556,2271,556,556,556,556,556,426,426,0,426,0,410,426,449,0,0,0,0,0,0,0,0,534,556,534,556,534,534,556,534,367,0,0,395,0,0,0,0,0,350,0,0,367,0,0,395,0,408,0,490,490,0,490,490,490,490,490,490,490,490,516,516,516,516,449,449,449,449,524,449,449,525,449,516,530,516,516,516,530,516,516,516,516,532,550,573,550,573,550,550,573,550,597,573,573,573,573,573,573,573,597,597,597,550,597,597,597,597,597,597,597,573,573,611,616,597,616,622,1,12290,0,0,636,0,0,0,0,0,0,0,0,0,0,0,0,0,1567,1568,0,789,0,0,0,0,534,834,534,534,534,534,534,534,863,865,534,534,534,534,534,1790,1792,534,534,534,534,534,1341,0,556,556,0,580,580,580,983,987,580,580,580,580,580,580,1013,580,556,556,556,556,936,938,556,556,556,556,556,556,556,556,556,556,2829,556,556,2832,556,556,78114,1066,0,0,0,0,0,0,0,0,0,0,0,1083,0,0,0,0,0,1234,0,0,0,0,0,0,0,0,0,0,0,2050,0,0,0,0,1085,0,0,0,0,0,0,0,0,0,0,0,0,1098,0,0,0,0,0,1235,0,0,0,0,0,0,0,0,0,0,0,122880,0,0,0,0,0,0,1116,0,0,0,0,0,0,0,0,0,0,0,0,0,1581,1582,0,0,0,0,1085,1208,0,0,0,0,0,0,1215,0,0,0,0,0,0,347,348,349,0,0,0,0,0,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,0,0,0,1220,0,0,0,0,0,0,0,0,0,0,1220,1229,534,534,534,1259,534,534,534,1263,534,534,1274,534,534,1278,534,534,534,534,534,534,3001,534,534,534,534,534,534,534,534,534,1327,534,534,534,534,534,534,534,1299,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2497,534,534,534,534,1341,901,556,556,556,556,556,556,556,1351,556,556,556,556,556,1423,556,556,556,1430,556,556,26009,1341,975,580,1355,556,556,1366,556,556,1370,556,556,556,556,556,556,556,556,556,2828,556,556,556,556,556,556,1462,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3315,580,1479,580,580,580,1483,580,580,580,580,580,580,580,580,580,580,580,2877,580,580,580,580,0,1571,1572,0,0,0,0,0,0,0,0,0,0,0,0,0,1612,0,0,0,0,0,0,1603,0,0,0,0,0,0,0,0,0,0,0,364,364,364,0,696,0,1616,0,1618,0,0,0,1622,0,0,0,1626,0,0,0,1630,0,0,0,0,1572,0,0,0,0,0,0,0,0,0,0,0,364,364,364,695,0,534,534,534,1724,534,534,534,534,534,534,534,534,534,534,534,534,1782,1783,534,534,556,1837,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1818,556,556,556,556,1889,556,556,556,556,26009,0,580,580,580,580,580,580,1976,580,580,580,580,580,1981,580,580,580,0,0,0,2031,0,2032,0,0,0,0,0,0,0,0,0,0,0,2200246,151552,2200246,0,0,2175,534,534,534,534,534,534,534,534,534,534,534,2186,534,534,534,534,534,534,1758,534,534,534,534,1764,534,534,534,534,0,0,556,556,556,556,2814,556,556,556,556,556,0,0,0,0,580,2301,580,580,580,580,580,1038,580,580,580,580,0,0,0,534,580,556,580,580,2394,2395,0,1544,0,1550,0,1556,0,1562,0,0,0,0,0,0,374,0,0,0,0,0,0,0,359,0,0,0,0,0,0,0,0,0,0,0,0,0,2052,0,0,2476,0,0,0,0,0,0,0,0,0,2482,0,0,0,0,0,0,0,69632,73728,0,0,0,345,344,65536,343,534,534,534,534,2530,534,534,534,534,534,534,534,534,534,534,534,1275,534,534,534,534,580,2661,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3075,580,580,0,0,2722,0,0,0,0,0,0,0,0,0,0,0,0,0,1665,0,0,534,2797,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2511,534,556,556,2845,556,556,556,556,556,556,556,556,556,556,556,556,556,2259,556,556,0,0,2970,0,0,0,0,0,0,0,0,534,534,534,534,534,534,855,534,534,534,534,0,0,0,0,3122,3123,0,0,0,0,0,0,0,0,0,0,0,2424832,2433024,0,0,2457600,3149,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,1737,3172,534,534,534,534,534,534,534,534,556,556,556,556,556,556,556,2242,556,556,556,556,556,556,556,556,1406,556,556,556,556,556,556,556,580,580,580,3229,580,580,580,580,580,580,580,580,580,534,580,556,556,556,556,580,580,580,580,3426,580,580,580,580,580,580,580,2639,580,580,580,580,580,580,580,580,580,2344,580,580,580,580,580,580,534,3236,556,3238,580,3240,3241,0,0,0,0,3245,0,0,0,0,0,0,640,0,0,0,0,0,0,0,0,0,323,397,0,0,0,323,0,0,0,3258,0,0,0,0,0,0,0,0,3261,0,534,534,534,534,534,534,534,3154,3155,534,534,534,534,3159,3160,3263,534,534,534,3266,534,534,534,534,534,534,534,534,534,534,534,1330,534,534,534,534,580,580,3318,534,3319,556,3320,580,0,0,0,0,0,0,0,0,543,566,543,566,543,543,566,543,556,556,3543,556,3544,556,556,556,556,556,556,556,556,580,580,3551,580,3552,580,580,580,580,580,580,580,580,0,0,0,0,534,534,3536,534,3537,534,534,534,534,534,534,534,1730,534,534,534,534,534,534,534,534,534,2183,534,534,534,534,534,534,409,355,0,0,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,638,0,0,641,642,0,0,0,0,0,0,0,0,1591,0,0,1594,0,0,0,0,466,477,466,0,0,466,0,0,0,0,0,0,0,0,517,517,521,521,521,521,466,466,466,466,466,466,466,471,466,521,517,521,521,517,521,521,521,521,533,551,574,551,574,551,551,574,551,598,574,574,574,574,574,574,574,598,598,598,551,598,598,598,598,598,598,598,574,574,612,617,598,617,623,1,12290,0,0,731,0,0,0,637,731,0,737,738,637,0,0,0,0,0,0,656,0,0,659,660,0,0,0,0,0,0,0,2754,0,0,0,0,0,0,0,0,0,2420,0,0,0,0,0,0,777,0,0,0,0,0,0,0,0,0,0,786,0,791,0,0,0,0,0,1575,0,0,0,0,0,0,0,0,0,0,303,303,0,0,0,0,0,0,0,0,791,0,0,0,0,0,0,791,0,0,0,0,0,0,672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016,0,0,0,0,806,0,0,0,0,0,637,0,0,0,0,0,0,0,69632,73728,0,0,0,349,347,65536,0,0,0,0,777,0,0,0,0,0,0,0,777,777,0,637,0,0,0,786,0,791,0,777,0,806,0,0,0,658,0,777,791,829,0,534,835,534,534,534,534,854,858,864,534,869,556,556,927,931,937,556,942,556,556,556,556,556,959,556,556,556,556,556,1424,556,556,556,556,556,556,26009,1341,975,580,534,534,886,534,534,556,556,959,556,556,0,580,580,1033,580,580,580,580,1033,580,580,580,580,580,0,0,0,534,580,556,0,1086,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2449,0,0,0,0,1103,0,0,0,0,0,0,0,0,0,0,0,1113,0,0,0,1117,1118,0,0,0,0,0,0,0,0,0,0,0,364,364,208896,0,0,0,0,0,0,1179,0,1182,0,0,0,0,0,1187,0,0,0,0,0,0,2726,0,0,0,0,0,0,0,0,0,0,784,0,0,0,0,0,0,0,0,1205,0,0,1086,0,0,0,1211,0,1213,0,0,0,0,0,0,0,1638,0,0,0,0,0,0,0,0,0,1123,0,0,0,0,0,0,0,0,0,1221,0,0,0,0,0,0,0,0,0,0,1227,0,0,0,0,654,0,0,0,0,0,0,0,0,0,0,0,0,2964,2965,0,0,1230,1187,0,1211,1233,0,1236,0,0,0,0,0,1117,0,0,0,0,0,0,2739,0,0,0,0,2744,0,0,0,0,0,0,299,0,0,0,303,2424832,2433024,0,0,2457600,0,1245,0,0,0,0,0,1245,0,0,1136,1245,0,1252,534,534,534,534,534,534,3279,534,556,556,556,556,556,556,556,556,556,556,3514,556,556,556,580,534,534,1258,534,534,534,534,1264,534,534,534,534,534,534,534,534,534,3455,534,534,3457,556,556,556,534,534,1285,534,534,534,534,534,534,534,534,534,534,1296,534,534,534,534,534,534,3341,534,534,534,534,534,534,534,534,556,580,3607,3608,3609,534,556,580,534,556,580,0,0,0,0,0,0,333,0,0,333,0,0,333,0,0,0,534,534,1301,534,534,534,534,534,534,534,534,1308,534,534,534,1315,1317,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2149,534,1339,534,1341,901,1343,556,556,556,556,556,1350,556,556,556,556,556,556,2225,556,556,556,556,556,556,556,556,556,2244,556,556,556,556,2248,556,1356,556,556,556,556,556,556,556,556,556,556,1377,556,556,556,556,556,556,2241,556,2243,556,556,556,556,556,556,556,1425,556,556,556,556,556,26009,1341,975,580,556,556,556,556,1400,556,556,556,1407,1409,556,556,556,556,556,556,1386,556,556,556,556,556,556,556,1395,556,1480,580,580,580,580,1485,580,580,580,580,580,580,580,580,1492,580,580,580,580,2352,580,580,580,580,580,580,580,580,580,580,580,2628,580,580,580,580,580,580,1499,1501,580,580,580,580,580,580,580,580,580,580,580,580,2878,580,580,2881,1550,0,0,0,1556,0,0,0,1562,0,0,0,0,0,0,0,0,2957312,0,0,0,0,0,0,0,0,1150,0,0,0,0,0,0,0,0,1166,0,0,0,0,0,0,0,0,1179,0,0,0,0,0,0,0,0,0,0,0,0,2094,0,0,0,1573,1574,0,0,0,0,0,1580,0,0,0,0,0,0,0,69632,73728,0,0,0,373,0,65536,0,0,0,1601,0,0,0,0,0,0,0,0,0,0,0,0,0,1677,0,0,0,0,0,0,1619,0,0,0,0,0,0,0,1627,1628,0,0,0,0,0,1604,0,0,0,0,0,0,0,0,0,0,0,254407,0,0,0,0,0,0,0,0,1635,0,0,0,0,0,0,0,0,0,0,0,382,0,0,0,386,0,0,0,1685,0,0,0,0,0,1689,0,0,1692,0,0,0,0,0,0,3143,0,0,0,0,0,0,0,0,0,0,2756,0,0,2759,0,0,0,0,0,0,1689,0,0,0,0,0,0,0,0,0,0,1705,0,1707,1681,534,534,534,534,534,534,534,534,534,534,534,1719,534,534,534,534,534,1791,534,534,534,534,534,534,1341,0,556,556,556,556,556,2295,0,0,0,580,580,580,580,580,580,580,2666,580,580,580,580,580,580,580,580,580,1446,580,580,580,580,580,580,534,534,534,1725,534,534,534,534,534,534,534,534,534,534,1736,534,534,534,534,534,2179,534,534,534,534,534,534,534,534,534,534,2143,534,2145,534,534,534,534,534,534,1740,534,534,534,534,534,534,534,534,534,534,1751,534,534,534,534,534,2207,0,0,0,556,556,556,556,556,556,556,1403,556,556,556,556,556,556,556,556,1408,556,556,556,556,556,556,556,534,534,1756,534,534,534,534,534,534,534,534,534,534,534,534,534,2172,534,534,2002,580,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,696,0,0,2019,2020,0,0,0,0,0,0,0,0,0,0,0,0,662,0,0,0,2055,2056,0,0,2058,2059,0,0,0,0,0,0,0,0,0,0,0,2617344,0,0,0,0,2081,0,0,0,0,2084,2085,0,0,0,0,0,2091,0,0,0,0,0,0,3259,0,0,0,0,0,0,534,534,534,534,534,849,534,534,534,534,534,534,534,2152,534,534,534,534,534,534,534,534,534,534,2161,534,534,534,534,534,534,3452,534,3454,534,534,3456,534,556,556,556,556,3509,556,556,556,556,556,556,556,556,556,580,580,580,580,580,580,0,0,0,3595,534,534,2164,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2174,534,534,534,2191,534,534,534,2194,534,534,534,534,2199,534,534,534,534,534,534,1759,534,534,534,534,534,534,534,534,534,1732,534,534,534,534,534,534,556,2237,556,556,556,556,556,556,556,556,556,556,2246,556,556,2249,556,556,2277,556,556,556,556,2281,556,556,556,556,2286,556,556,556,556,556,1808,556,556,556,556,556,556,556,556,556,556,2608,556,556,556,556,556,580,2324,580,580,580,580,580,580,580,580,580,580,2333,580,580,2336,580,580,2364,580,580,580,580,2368,580,580,580,580,2373,580,580,580,580,580,2665,580,580,580,580,580,580,580,580,580,580,1979,580,580,580,580,580,2398,0,0,0,0,0,0,0,0,0,0,2408,0,0,0,0,0,0,687,0,0,0,770,0,0,0,0,789,0,0,0,0,0,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,176128,534,534,2488,534,534,534,534,534,534,534,534,534,534,2496,534,534,534,534,534,882,534,534,534,534,534,556,556,556,556,556,3411,556,556,556,3415,556,556,534,534,2514,534,534,2516,534,2517,534,534,534,534,534,534,534,2524,534,534,2528,534,534,534,534,534,534,534,534,534,534,534,534,2539,556,556,2560,556,556,556,556,556,556,556,556,556,556,556,556,556,3472,580,580,556,556,556,2575,556,556,556,2578,556,556,2580,556,2581,556,556,556,556,556,1827,556,556,556,556,556,556,556,556,556,556,1814,556,556,556,556,1820,580,2646,580,2647,580,580,580,580,580,580,580,580,2655,580,580,2659,0,2696,2697,0,0,2700,2701,0,0,0,0,0,0,0,0,0,0,3178496,2670592,0,2744320,0,0,2772,534,2775,534,534,534,534,2780,534,534,534,2783,534,534,534,534,534,534,534,3002,3003,534,534,534,534,534,534,534,534,2494,534,534,534,534,534,534,534,534,1744,534,534,534,1748,534,534,1753,2808,534,534,534,0,0,556,556,556,556,556,556,556,556,556,556,3358,556,556,556,556,556,2819,556,2822,556,556,556,556,2827,556,556,556,2830,556,556,556,556,556,556,2255,556,556,556,556,556,556,556,556,556,2228,556,2230,556,556,556,556,556,556,2857,556,556,556,0,0,580,580,580,580,580,580,580,580,2652,580,580,580,580,580,580,580,580,580,2868,580,2871,580,580,580,580,2876,580,580,580,2879,580,580,580,580,1034,580,580,580,580,580,0,0,0,534,580,556,580,580,580,580,2906,580,580,580,534,580,556,534,534,556,556,580,580,0,0,3112,0,3114,0,0,0,3118,0,0,534,534,534,534,3013,534,534,534,534,534,556,556,556,3021,556,556,556,556,556,2266,2267,556,556,556,556,556,556,2274,556,556,0,580,580,580,580,580,580,994,580,580,1008,580,580,580,580,580,2341,580,580,580,580,580,580,580,580,580,580,0,0,733,534,580,556,0,0,3121,0,0,0,0,0,0,0,0,0,0,0,0,0,1693,0,0,534,3173,534,534,534,534,534,534,534,556,556,556,556,556,556,556,2839,556,556,556,556,556,556,556,556,1811,556,556,556,556,556,556,556,556,556,3183,556,556,556,556,556,556,556,556,556,556,556,556,556,3033,556,556,556,556,3193,556,556,556,556,556,556,3199,556,3201,556,556,556,556,556,0,0,0,0,580,580,580,2303,580,2305,580,580,580,3228,580,3230,580,580,580,580,580,580,580,580,534,580,556,556,556,556,580,3423,580,3425,580,580,580,580,580,580,580,580,580,2888,580,580,580,580,580,580,0,0,0,3248,0,0,0,0,0,0,0,3132,0,0,0,0,0,0,0,0,0,3334,534,534,0,3257,0,0,0,0,0,0,0,0,0,0,0,534,534,534,534,2982,534,534,3264,534,534,534,3268,534,534,534,534,534,534,534,534,534,1328,534,534,534,534,534,534,534,534,534,534,3277,534,534,534,556,556,556,556,556,3282,556,556,556,556,556,2294,0,0,0,580,580,580,580,580,580,580,580,3482,580,580,3484,580,0,0,0,556,3286,556,556,556,556,556,556,556,556,556,556,556,556,556,556,1883,556,3295,556,556,556,556,580,580,580,580,580,3301,580,580,580,3305,580,580,580,580,2380,534,580,556,534,534,534,534,556,556,556,556,580,580,580,580,0,534,3601,556,3602,580,3603,3489,0,0,0,534,534,534,3496,534,534,534,534,534,534,534,534,1265,534,534,534,534,534,534,534,3504,556,556,556,3508,556,556,556,556,556,556,556,556,3516,556,580,580,580,580,2624,580,580,580,580,580,580,580,580,580,580,580,1475,580,580,580,580,580,580,3521,580,580,580,580,580,580,580,580,3529,580,0,0,0,0,0,0,122880,122880,122880,122880,122880,0,122880,0,2105631,12290,0,3532,0,3534,534,534,534,534,534,534,534,534,534,3540,3541,534,534,534,534,534,2208,0,0,0,556,556,556,556,556,556,556,1387,556,556,556,1391,556,556,556,556,556,357,358,0,0,0,0,0,0,0,364,0,292,0,0,0,0,0,0,688,0,0,0,0,364,364,364,0,0,0,0,0,391,0,0,0,0,0,0,0,0,0,0,0,0,722,0,735,654,467,467,481,0,0,481,358,358,358,503,358,358,358,358,467,467,599,575,575,575,575,575,575,575,599,599,599,552,599,599,599,599,599,599,599,575,575,552,575,599,575,599,1,12290,556,556,928,556,556,556,556,556,556,556,556,556,556,964,556,556,556,556,556,2294,2615,0,0,0,0,580,580,580,580,580,534,556,580,0,0,0,0,0,0,0,0,2924,0,0,0,0,0,0,534,534,534,891,534,556,556,556,964,556,0,580,580,580,1038,580,580,580,580,2636,580,2638,580,580,580,580,2642,580,580,580,580,0,0,0,3440,0,0,0,3443,0,0,534,534,78114,1066,0,0,0,0,0,0,0,0,0,0,0,0,1084,0,0,0,0,670,0,0,0,0,0,0,0,0,0,0,0,0,2432,0,0,0,1184,0,0,0,0,0,0,0,0,0,0,0,0,534,534,534,2132,2133,534,534,1340,1341,901,556,556,556,556,556,556,556,556,556,1353,556,556,556,556,580,3590,580,580,580,580,0,0,0,534,534,534,534,534,534,1713,534,534,534,534,534,534,534,2140,534,534,534,534,534,534,534,534,534,2990,534,534,534,534,534,534,556,556,1362,556,556,556,556,556,556,556,556,556,556,556,556,556,3047,556,556,556,0,1551,0,0,0,1557,0,0,0,1563,0,0,0,0,0,0,0,1650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172032,0,1656,0,0,0,0,0,0,0,0,1662,0,1664,0,0,0,0,0,0,172032,172032,172032,172032,172032,172032,172032,172032,1,12290,534,534,1771,534,534,534,534,534,534,534,534,534,534,534,534,534,2523,534,534,556,556,1854,556,556,556,556,556,556,556,556,556,556,556,1866,556,556,556,556,932,556,556,556,556,556,556,556,556,556,556,556,1815,556,556,556,556,556,1887,556,556,556,556,556,556,26009,0,580,580,580,580,580,580,2312,580,580,580,580,580,580,580,580,580,1488,580,580,580,580,580,580,580,580,580,1924,580,580,580,580,580,580,580,580,580,580,580,580,3073,580,580,580,580,580,1937,580,580,580,580,580,580,580,580,580,580,580,1950,580,580,580,580,2648,580,580,580,580,580,580,580,580,2656,580,580,580,580,580,3231,580,580,580,580,580,580,580,534,580,556,580,580,580,1973,580,580,580,580,580,580,580,580,580,1983,580,580,580,580,1484,580,580,580,580,580,580,580,580,580,580,580,3222,580,580,580,580,0,0,0,2043,0,0,0,0,0,0,0,0,0,0,0,0,733,1171,0,0,534,2151,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2795,534,2236,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2600,2323,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3089,580,580,580,580,2622,580,580,580,580,580,580,580,580,580,580,580,580,580,3224,580,580,2695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2120,2734,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2719,534,2774,534,2776,534,534,534,534,534,534,534,534,534,534,534,534,2160,534,534,534,556,2821,556,2823,556,556,556,556,556,556,556,556,556,556,556,556,3190,556,556,556,580,580,580,2870,580,2872,580,580,580,580,580,580,580,580,580,580,2654,580,580,580,580,580,0,0,0,0,2933,0,0,0,0,0,0,0,0,0,0,0,534,534,534,2981,534,556,556,556,556,3289,556,556,556,556,556,556,556,556,556,556,556,3202,556,556,556,556,580,3308,580,580,580,580,580,580,580,580,580,580,580,580,580,580,3314,580,580,556,556,3589,556,580,580,580,580,3593,580,0,0,0,534,534,534,3152,534,534,534,534,534,534,534,3157,534,534,534,0,0,359,0,0,0,0,0,0,364,0,292,0,0,0,0,0,0,702,0,0,0,0,0,0,0,0,0,0,2600960,0,0,2768896,2777088,2781184,0,0,369,0,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,2040,2041,0,600,576,576,576,576,576,576,576,600,600,600,553,600,600,600,600,600,600,600,576,576,553,576,600,576,600,1,12290,556,923,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2234,556,556,556,556,556,1367,556,556,556,556,556,556,556,556,556,556,556,3547,3548,556,556,580,580,580,580,580,1500,580,580,580,580,580,580,580,580,580,580,580,580,580,3102,3103,3104,534,1646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2748,0,0,1684,0,0,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,580,580,580,1938,580,580,580,580,580,580,580,580,580,580,580,580,3223,580,580,580,0,0,0,2723,0,0,0,0,0,0,0,0,0,0,0,0,734,0,0,0,2942,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2760,0,0,0,0,3249,0,3250,0,0,0,0,3132,0,0,0,0,0,0,0,3333,0,534,534,534,0,0,0,360,361,362,363,0,0,364,0,292,0,0,0,0,0,0,718,0,0,0,0,0,0,0,0,0,0,2445,0,0,0,0,0,0,361,0,360,0,0,0,69632,73728,0,0,0,0,427,65536,0,0,0,0,685,534,534,838,842,845,534,853,534,534,534,868,427,427,0,427,0,361,427,450,0,0,0,0,0,0,0,0,690,691,0,364,364,364,0,0,0,0,0,491,491,0,498,498,498,498,504,505,498,498,518,518,518,518,450,450,450,450,450,450,450,450,450,518,518,518,518,518,518,518,518,554,577,554,577,554,554,577,554,601,577,577,577,577,577,577,577,601,601,601,554,601,601,601,601,601,601,601,577,577,613,618,601,618,624,1,12290,534,534,887,534,534,556,556,960,556,556,0,580,580,1034,580,580,580,580,1502,580,580,580,580,580,580,580,580,580,580,580,2332,580,580,580,580,534,2513,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2806,534,534,534,534,2542,534,534,534,534,534,534,534,534,534,534,0,0,0,0,556,556,556,2216,556,2218,556,580,2674,580,580,580,580,580,580,580,580,580,580,534,580,556,534,534,534,534,534,2491,534,534,534,534,2495,534,534,534,534,534,0,0,0,0,556,556,2215,556,556,556,556,602,578,578,578,578,578,578,578,602,602,602,555,602,602,602,602,602,602,602,578,578,555,578,602,578,602,1,12290,0,0,698,0,0,0,0,0,0,0,0,0,0,0,0,0,2410,0,0,728,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2952,0,0,0,728,0,784,0,0,0,0,0,0,0,0,784,0,0,0,0,686,0,0,0,0,0,0,364,364,364,0,0,0,0,0,671,0,0,0,0,0,0,0,0,0,0,0,3145,3146,0,0,0,556,924,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2260,2261,0,0,1176,0,0,0,0,0,0,0,0,0,0,0,0,0,2433,0,0,534,1300,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2548,0,0,1418,556,556,556,556,556,556,556,556,556,556,556,26009,1341,975,580,580,580,580,2664,580,580,580,580,2668,580,580,580,580,580,580,1505,580,580,1509,580,580,580,580,580,1515,0,0,1553,0,0,0,1559,0,0,0,0,0,0,0,0,0,299,0,0,0,0,0,0,0,0,0,2082,0,0,0,0,0,0,0,0,0,0,0,0,736,0,0,0,0,0,0,0,534,534,534,534,2167,534,534,534,534,534,534,534,534,534,534,534,1733,534,534,534,534,556,556,556,2252,556,556,556,556,556,556,556,556,556,556,556,556,3471,580,580,580,580,580,580,2339,580,580,580,580,580,580,580,580,580,580,580,580,3485,0,0,3488,2499,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2202,0,0,0,0,736,534,534,534,534,534,534,534,534,534,534,534,1747,534,534,534,534,1051,534,534,892,534,1056,556,556,965,556,0,1061,580,580,1039,580,580,580,580,2885,580,580,580,580,580,580,580,580,580,580,580,2680,534,580,556,534,556,556,1420,556,556,556,556,556,556,556,556,556,26009,1341,975,580,580,580,580,2894,580,580,580,580,580,580,580,580,580,580,580,2900,580,580,580,580,534,534,534,534,1726,534,534,534,534,534,534,534,534,534,534,534,2144,534,534,2148,534,1821,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2843,580,580,1954,580,580,580,580,580,580,580,580,580,580,580,580,580,3313,580,580,580,580,556,2586,556,556,556,556,556,556,556,556,556,556,556,556,556,556,2288,556,556,556,556,556,2614,0,0,0,0,0,0,580,580,580,580,580,1039,580,580,580,580,0,0,0,534,580,556,0,0,0,0,2957,0,0,0,0,0,0,0,0,0,0,0,534,2979,534,534,534,2983,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,2498,3065,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,2889,580,580,580,580,580,3192,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,3035,1134592,0,1134592,0,0,0,1134592,1135007,1135007,0,0,0,0,0,1135007,0,0,0,0,700,701,0,0,0,0,0,707,0,0,0,711,0,1134592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2718,0,0,1134592,1134592,0,0,0,0,1135196,1135196,1135196,1135196,1134592,1135196,1135196,1135196,1135196,1135196,1135196,0,1134592,1134592,1134592,1134592,1135196,1134592,1135196,1,12290,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,0,2125824,2125824,2125824,2125824,3137536,2940928,2940928,2940928,0,0,0,0,0,2748416,2879488,0,0,0,0,0,2113,0,0,0,2113,0,0,2118,2119,0,0,0,0,0,1180,0,0,0,1184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2474,0,1147348,1147348,1147348,451,451,1147348,451,451,451,451,451,451,451,451,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,1147399,0,0,0,0,0,0,0,0,768,0,0,0,0,0,0,0,451,0,0,0,0,0,1147348,1147348,1147348,1147399,1147399,1147348,1147399,1147399,1,12290,3,0,0,0,0,0,253952,0,0,0,253952,0,0,0,0,0,0,0,0,0,0,0,0,0,2950,0,0,0,0,1159168,0,1159168,1159168,0,1159168,1159168,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,0,0,0,0,0,0,0,0,781,0,0,0,0,0,792,0,0,1159168,0,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1,12290,3,0,0,0,0,249856,0,0,0,249856,0,0,0,0,0,0,0,69632,73728,163840,0,0,0,0,65536,0,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,974,2125824,2125824,2125824,2125824,3149824,2125824,2428928,2437120,2125824,2486272,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2625536,2125824,2125824,2125824,2125824,2125824,2125824,2699264,2125824,2715648,2125824,2723840,2125824,0,106496,106496,0,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,0,0,106496,0,0,106496,106496,106496,106496,106496,106496,106496,106496,106496,0,0,0,0,0,0,0,0,0,0,0,2183168,0,0,0,0,0,0,0,0,2134016,0,0,0,0,0,0,0,0,0,0,0,695,0,0,0,0,0,3108864,3198976,0,0,3043328,0,3149824,2936832,0,2760704,0,0,0,0,0,0,0,69632,73728,0,369,369,0,0,65536,369],r.EXPECTED=[127,143,342,950,172,201,188,217,769,963,247,263,279,295,311,327,1395,373,1083,374,374,374,374,374,374,374,374,374,419,391,407,466,435,589,1682,909,574,156,1220,451,495,511,527,543,559,634,1096,678,694,755,649,785,801,817,833,849,865,881,897,937,979,995,1023,1039,1055,479,1112,1128,1473,1144,1160,1206,1236,357,662,1266,709,1282,1292,1308,1324,1339,1355,1411,1427,1443,618,1459,724,1489,604,1518,1528,231,1070,1544,1560,1576,1592,1622,1250,1638,1654,1606,921,1670,739,1698,1714,1820,1190,1730,1746,1502,1758,1774,1790,1806,1175,1850,1860,1836,1009,1370,1876,1385,375,1892,1896,1903,1903,1903,1898,1902,1903,1910,1907,1914,1918,1922,1926,1929,1933,1937,1941,1945,4040,4040,4040,4106,4040,4040,2020,2279,4040,1949,4040,4040,4040,2429,2379,4040,4040,4040,4040,2438,4040,4040,3112,2651,3443,2444,1955,1984,1994,1998,4040,4040,4040,4040,4040,2017,2042,4040,4040,4040,2024,2285,2030,2034,4040,4040,4040,4040,4040,2041,4040,4040,3002,2285,2285,2285,2285,2285,2111,1988,1988,1988,1988,1988,1990,1955,1955,1955,1955,1955,2101,3099,1988,1988,1988,1988,1988,2120,1955,1955,1955,1955,1955,2046,2055,4040,4040,2212,2349,4040,4040,4040,4137,3441,4040,4040,4040,4040,3531,4040,2745,1988,1988,1988,2066,1955,1955,1955,1957,2073,4040,4040,2473,3002,2285,2285,2026,1988,1988,3101,1955,1955,1956,2072,4040,2471,4040,2284,2285,3098,1988,1988,2078,1955,2068,2129,2446,3554,2285,2112,1988,2120,1955,2083,2281,2286,1988,2067,2089,2095,2113,2049,2107,3097,2114,2079,3096,3100,2079,3096,2114,2051,2118,2126,2135,2139,2143,2156,2160,2170,2170,2170,2163,2167,2170,2173,2177,2181,2185,2189,2193,2197,2201,2205,2209,2216,4040,4040,4040,2131,4040,4040,4040,2220,4040,2226,4040,2283,2287,1988,1954,2122,2098,1961,4040,4040,4040,1970,4040,2474,1980,4040,2321,3139,4040,2440,3145,4427,2277,3219,2796,3151,3505,3155,4040,3263,3161,2906,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4040,4041,2255,2259,2262,2266,2270,2274,3465,2291,4040,4040,4040,4040,3213,2296,2312,2303,2396,2240,2243,2309,2316,2320,2649,4006,4040,2726,2326,3670,4040,4040,4040,4040,2231,3466,4040,4040,4040,3429,2237,4040,2618,3123,2249,2253,3877,2348,4040,4040,4013,2355,4040,2359,4040,4040,4040,4040,3173,2321,2227,2367,3192,4040,4040,2459,4040,4040,3192,4040,4040,4348,2989,2882,2918,3129,2349,4040,3014,2311,2670,2331,3577,4417,2336,2379,4040,4040,2549,2340,4040,4040,4040,2984,4040,4040,4040,4040,3591,2979,4040,4040,4040,3390,4180,4419,3131,4040,3190,3194,4040,2950,2989,2918,3210,4040,2469,2788,3212,4040,4005,3283,3279,4282,4040,3281,4226,4226,2601,4283,3283,3283,1966,3282,3279,1966,4227,3283,4191,2462,2478,4040,4040,4040,4040,2588,2522,4040,4040,4040,2007,2858,2484,3025,2492,2495,2498,2502,2503,2507,2511,2515,4040,2521,4040,4040,2526,4040,3968,2913,2541,2545,3867,2553,2563,2574,2578,4040,3387,3385,4040,2582,4040,3458,2587,4040,3120,4040,4040,4040,3174,2074,2409,2537,2432,4040,4040,4040,2536,2416,4040,2373,2377,4040,4040,4040,4040,4255,2378,4040,4040,4040,4040,4256,2379,4040,2838,3503,4040,4040,4040,4040,2839,3504,3974,3509,4040,4040,3730,3536,4040,3349,2906,4040,3326,2556,3181,3383,3394,3403,4040,4397,4040,3553,3551,3545,4040,2668,2912,3478,3399,2548,2592,3456,3471,2600,4040,4040,4040,4242,4040,3147,4040,3818,4040,4037,3923,3990,3561,4003,4040,2655,4039,4040,4040,4040,3167,4040,4040,4040,3331,3171,4040,4040,4040,4040,3632,3179,4040,2638,2611,2615,4040,2388,2622,4040,4040,4040,4040,2389,2349,4040,4040,4040,2397,2390,4040,4040,4040,3141,4040,4040,3846,4040,4040,2630,2517,4070,2637,2412,2989,4040,4040,4040,4040,2344,4040,4040,4040,4040,4040,3269,2989,2380,3207,4040,3463,4040,4040,4040,3861,3470,4040,4040,4040,3475,4040,3482,4040,4040,2631,3905,4040,4040,4040,4040,2631,3905,2424,3909,4040,2152,2595,3785,3915,2631,4365,2642,4040,4040,4040,4040,4085,2646,4040,4040,4040,4040,4085,2646,4040,4040,2464,4040,4040,2285,2285,2285,2285,2025,1988,1988,1988,1988,1988,2120,3610,3833,4040,4040,4040,4365,2656,4040,4040,4040,2660,2665,3980,2516,3196,2674,2678,3830,2685,4040,4040,3830,2685,4040,4040,2299,2690,4040,3184,3458,2004,3969,3197,3312,3251,2696,4040,2037,2690,4040,3251,2696,4040,2702,2709,3195,4e3,2713,2717,4040,2715,4040,2679,2723,4040,2730,2734,2739,3644,4040,2705,2583,3646,2583,2749,2753,2704,3203,2944,2566,2570,2956,2945,3843,2568,2568,2761,3815,3641,2765,3607,2769,2773,2775,2779,2783,2787,4040,4040,4040,3316,4040,4040,3564,2792,3570,2800,2804,2808,2810,2814,2818,2821,2823,2824,4040,4040,3315,4040,3428,2828,3896,3248,2833,2843,2434,2453,3918,2849,2907,2853,4040,2150,2148,4040,4040,4040,4040,2405,2349,4040,4040,4040,4040,2405,2349,4040,4040,4040,4040,2362,3442,4040,4040,4040,4040,2363,3773,3950,4040,4040,4040,2857,4040,2559,2968,3853,2862,2937,4379,2869,3988,3295,4040,2873,4040,4040,4040,3554,2285,2285,2285,2285,1987,1988,1988,1988,1989,1955,1955,1955,1955,1956,2103,4040,4040,4040,2472,4040,2109,2285,2285,2285,2113,3527,2877,4040,4040,4040,2886,2890,4040,4040,4040,4040,2980,4040,3336,2829,3897,2895,2899,4040,2911,2917,4040,4040,2922,4040,4040,4040,4040,2844,2923,4040,4040,2626,4289,4040,3453,3038,4353,4386,3183,4040,4040,4041,4370,4040,4040,2845,2924,4040,4040,4040,4040,4040,2990,4040,2558,2928,4420,2935,4040,2943,2949,4040,2970,2954,4040,4040,4040,4040,3855,2960,4040,4040,4040,4040,3855,2960,4040,4040,4040,4040,3389,4040,2966,3897,2974,2327,4275,4040,3590,2978,4040,3535,3379,3488,3521,3230,4040,4040,3540,4040,4040,4040,3439,4040,4040,4040,4364,4040,4040,4040,4040,4040,4040,4040,4040,4378,4040,4040,4040,2605,4040,4040,2245,4040,4040,3459,4040,4040,4038,3923,4040,2013,3616,2411,4040,3631,2988,4040,4040,3631,2988,4040,4040,4040,2994,4040,4040,2350,4262,2381,3617,4040,4040,4346,4040,4040,3e3,4040,4040,4346,4040,2350,4208,3615,2881,4040,2795,3174,3112,3180,3024,3111,3180,3180,3933,3014,3113,3113,3006,3181,3014,3013,3014,3175,4047,3018,3029,3053,4040,4040,4040,4040,3634,4040,4221,4040,3650,4040,4040,4040,4040,2631,3651,4040,4040,4040,4040,3648,4287,4291,4040,4010,4017,4303,4022,2632,3182,4040,4032,4040,1950,4012,4040,2865,4045,4051,3043,3047,4064,3061,3065,3069,3073,3077,3081,3105,3084,4040,4040,3633,4040,4040,3443,2444,4040,4040,4040,2450,4040,4040,4040,4349,4040,4040,3014,3276,2487,2961,2691,4276,3109,1976,3117,3127,3289,3135,3305,4040,3324,3322,4040,4040,3734,3779,3739,3744,3969,4040,3748,3754,3761,3943,3887,3765,4057,4040,2488,2962,2692,3163,3224,3188,3412,4040,4040,2085,3201,4040,4040,4040,4040,2343,3217,3223,3228,4040,4040,4040,3234,4040,4040,4040,4040,4040,3238,4040,4040,4040,4040,3422,4040,2529,2686,4354,3245,4040,4040,4040,4342,4040,4040,4040,4040,1972,4040,4040,4040,4040,4040,3255,4040,4040,4040,3423,3952,2686,4355,3261,4040,4040,3267,4040,4040,4040,1974,4040,4040,4040,3273,4040,4220,3981,2680,4356,3895,4040,3287,4040,4040,3293,4040,4040,2062,4040,4220,3953,3299,2146,4040,3303,4040,2607,4040,4040,2061,4040,4248,3309,3894,3498,4040,4360,4040,4040,4040,4369,4040,4374,3056,4383,3622,4040,4040,4390,4040,4040,4424,2742,4040,2633,4040,3056,4040,3039,3157,4040,4040,4040,4040,4040,4040,4040,2455,4325,4040,4040,4040,4040,4040,4040,4040,3320,4040,3330,3911,3335,3629,3588,4213,3943,3587,4213,4213,4040,3341,3589,3589,3628,4214,3341,3340,3341,3630,4040,4040,4040,4040,4040,4040,4040,4040,3836,2349,3347,4040,3354,3001,4080,4404,3358,3362,3366,3369,3373,3373,3377,4040,4040,3835,4091,3410,4040,4040,3416,4040,4040,3420,3427,4040,3433,4040,4331,3447,4040,4040,3797,4040,3795,4040,4040,4345,4040,2350,1964,4040,2879,4040,3397,4040,2904,4040,3350,3488,4040,3486,2535,3492,3496,4040,4040,4040,3502,4040,4040,4040,4127,4028,2010,4131,4141,4145,4149,4153,4157,4161,4165,4169,4173,4134,4377,4293,2534,3516,4040,4040,4040,2839,3504,4040,4040,4040,4040,2931,3442,4040,3450,4040,2902,4040,3799,4363,3520,4196,3525,3406,2349,2757,2305,2996,4393,4347,3544,4040,3549,4040,4040,3549,4040,4040,3558,2756,2305,4077,4395,3960,4040,3568,4040,3823,2349,4040,3997,3750,3574,3884,3961,4269,4040,4270,4040,3581,3944,3585,3595,3931,3600,2001,3930,3604,3604,4211,3614,3932,3621,3626,3662,3638,3655,3656,3660,3667,3674,3678,3682,3685,4040,4040,4040,3840,2596,3740,3850,2668,2332,3343,4040,3859,4040,4040,4040,2233,3865,2891,3735,2465,2351,3690,3698,3874,3702,3705,3709,3713,3717,3721,3725,3729,4040,2423,2421,3241,3772,4040,4040,2939,3777,3783,3789,3793,4136,2698,3342,2633,2425,3803,4040,4040,3808,2349,4040,4040,4186,3812,4040,4040,4040,3009,3822,3827,4040,3871,2532,4318,3881,4040,3891,3773,4040,4040,4040,4040,3901,4040,4040,4040,4040,4040,2385,4040,4040,4040,4040,3014,4040,2394,4040,2401,2379,4035,3922,4040,4040,2292,3927,4040,4040,4040,4040,3937,4040,4040,4040,4040,2091,3941,3948,4040,3957,3757,3966,2835,3112,4040,4040,2222,3979,4040,4040,2719,3973,2632,3183,3021,4040,4055,4040,4061,2419,4040,3023,4068,4074,4084,4112,4089,4095,3596,4100,4308,4099,4104,4110,4099,4113,4119,3257,4117,4123,4040,4040,4040,4040,4177,4184,2836,3686,4190,3693,4195,4200,4410,4205,4218,4040,3090,2735,4225,3093,4231,4040,4040,4040,3631,4235,2661,4040,2681,4429,2369,4040,4239,4040,4040,4040,4040,3804,4246,4040,4040,4040,4252,4040,4040,4040,2631,4260,4266,4040,4040,4040,4025,4185,2837,2686,2480,4274,4040,4280,4040,4040,4040,4040,4201,3978,4018,4303,3768,4040,3050,4040,4040,3985,4040,4040,3994,4040,4322,4385,4329,4040,4040,4040,4040,4335,4040,4040,4040,4040,3663,4339,4040,4040,4297,4040,3057,3087,4301,3962,3032,4040,4040,4040,4040,2624,4307,4040,4040,4040,4040,2624,4312,4315,4040,2322,3436,2837,2058,4040,4040,3035,4040,4401,4408,3694,4040,4040,3512,4040,2631,4414,4040,3511,4558,4433,6024,6027,4439,4466,4468,4468,4446,4455,4467,4468,4468,4468,4468,4468,4468,4473,4468,4468,4463,4457,4459,4479,4477,4483,4468,4469,4493,4496,4506,4510,4524,4519,4511,4500,4502,4502,4518,4519,4498,4515,4523,4528,4532,4536,4539,4547,4546,4543,4551,4554,4556,4566,5097,4574,6086,5003,5101,5101,5101,4593,4599,4602,4602,4602,4602,4608,4640,4568,4622,4628,5101,4434,5101,5099,5101,6713,5101,6256,5101,5101,4584,5992,5101,5101,4729,5101,5473,6277,5101,5007,4602,5693,4609,5696,5699,5699,5699,5699,4601,4602,5699,4602,4619,4621,4623,4627,6087,5101,4434,6165,6164,5101,5101,6380,6242,5096,5101,4576,5101,6463,5101,5101,5635,4488,5366,6275,5101,4581,5101,4590,5411,5123,5123,5123,5697,5699,4603,4621,4621,4622,4627,4627,4628,5101,4583,5448,6513,5474,5101,5008,5101,5101,4602,4632,5123,5699,4602,4602,4602,5704,5121,4602,4621,4627,5101,4583,6563,5101,4584,6017,5101,5101,5699,5701,4602,4602,4602,4632,4640,5705,5101,5101,5101,4734,5700,4602,4602,4602,5705,4643,5701,5101,5101,4824,5651,4602,4650,5101,5101,4824,6512,5010,5695,5123,5123,5698,5690,4602,4608,5696,5700,5703,5101,4602,5101,5101,5121,5123,5123,5123,5699,5699,5699,5702,5123,5698,5699,5702,4602,4602,5704,4607,4602,5705,5123,5697,5704,5101,5101,4816,4822,5699,4602,5704,5695,5698,5702,5694,5701,4651,4652,4650,5101,4592,5101,5101,5815,5567,5101,5101,5106,6519,6761,6550,6560,4662,4695,4656,4660,4693,4666,4673,4670,4680,4684,4691,4693,4693,4693,4693,4694,4676,4699,4693,4703,4708,4714,4704,4726,4740,4744,4687,4751,4753,4748,4787,4789,4789,4791,4757,4759,4761,4763,4776,4776,4770,4767,4774,4717,4675,4710,4780,4784,4795,4797,4801,4805,4809,5101,4592,6198,6202,4990,5007,5230,6461,5101,6373,5101,5101,4824,6698,4831,5101,5101,5101,4736,5108,5108,5101,5101,4826,6485,5490,5979,4838,5101,4720,4985,5101,4720,5101,5101,4853,5311,4857,5333,4876,4902,4906,4906,4906,4906,4908,4915,4917,4912,4921,4925,4928,4931,4934,4939,4938,4943,4944,4959,4949,4948,4953,4956,4963,5101,5107,5101,4892,5101,5007,5101,5101,5695,5123,5123,5123,5123,5696,5699,5988,5101,5101,5101,4825,5300,5101,5608,5101,4811,5449,6426,4969,5101,5101,4988,6219,5101,5018,4987,5101,5101,4860,5101,5101,4995,5015,5101,6412,5034,5101,5101,5101,4893,6751,6138,5101,5101,5101,4894,6729,5101,5101,5101,4965,5055,5068,5081,5086,5091,5076,5095,5101,4824,5933,5929,5376,5087,4434,5101,5101,5101,4979,5008,6409,5996,5101,5999,5151,5987,5376,5101,4826,6502,6738,6204,5101,6730,5101,5101,4891,5101,4570,5101,5115,5127,5074,4442,5096,5101,5101,5101,4975,5538,5411,5986,5281,5101,4840,5628,5355,5382,4434,4736,5101,4973,5101,5101,5101,4840,5687,5132,5075,5140,5890,5072,5076,5141,6462,4888,5101,5101,4895,5101,5343,5073,6582,4451,5101,4894,5101,5101,6416,5101,5101,5101,6191,5101,5415,5892,5074,6583,5096,5101,5101,4898,5999,5411,5280,5101,5101,4974,4978,5134,5157,5101,5101,5007,5101,5132,5075,5159,5101,4897,5101,5871,4980,5101,5949,5135,5159,5101,4976,5101,5101,5010,5101,5101,5169,4434,5101,5101,5009,5101,5101,5101,4613,4614,4975,5101,4614,5101,5411,4978,6164,6391,5101,4977,6380,5395,5376,5188,4872,5243,5197,5197,5194,5197,5199,5203,5205,5207,5209,5209,5209,5213,5213,5213,5213,5214,5213,5213,5215,5219,5221,5101,5101,5101,5036,5101,5059,5063,5372,5101,5101,5101,6378,6010,5101,4978,6569,5101,4980,5101,5417,5101,5101,5101,5891,5074,5240,5101,5351,6463,5247,5101,5101,5257,5101,5101,5101,5068,5263,6448,5875,5101,4981,5101,5101,5876,6281,5416,5275,4435,5874,5101,4990,6089,5406,5410,5101,5265,5407,5285,5101,5101,5297,6402,5101,5101,5304,5309,5101,5101,5101,5057,5371,5101,5101,5101,5059,5330,4833,5427,5101,5010,4978,5101,5415,5358,5101,5101,5101,5100,5883,5359,5101,5101,5102,6015,4893,5258,5101,5342,5432,5101,5348,5101,5024,6570,5977,5382,4434,5101,5101,5102,6113,5726,5101,6379,5101,5101,5101,5102,5101,5101,6462,5101,4561,5876,5101,6422,6426,5381,6381,6423,6427,5382,5101,5031,5101,5101,4866,4885,4811,5438,6425,5399,6381,5479,5101,5101,5101,5104,5106,5060,5064,5101,5035,5101,5101,5051,5101,5350,5101,5879,4896,5431,5101,5101,5101,5106,5101,4975,5471,5101,5101,5101,5107,6430,5101,5101,5101,5108,4890,6429,6381,5101,5101,5102,6446,5479,5101,5101,5453,5269,5410,5101,4614,5101,5101,6380,5153,5101,5101,5732,5268,5470,5101,5101,5102,6697,5459,5468,6381,5101,5041,5046,5045,5478,5101,5101,5453,4614,5101,5101,5101,5111,6088,5350,5877,5413,5538,5101,5101,5047,5047,5047,5461,5101,6088,6119,5106,5267,5271,5101,5047,6213,5101,5101,5404,4990,5404,5408,5404,4990,5404,5962,5423,5961,5101,6084,5423,5233,6104,5101,4990,5232,5230,5101,5232,4989,5232,5232,5232,5231,6488,5101,5101,5101,5168,5876,5722,5483,4434,5099,5101,5101,6498,6279,5487,5101,4886,6166,5489,5856,5494,5500,5498,5504,5504,5504,5504,5506,5513,5510,5517,5519,5519,5519,5521,5519,5525,5525,5525,5525,5527,6280,5415,5319,5672,5101,5005,6438,5101,5101,5103,5101,5101,5101,6361,6199,5571,5101,5101,5101,5176,5626,6498,5551,5101,6442,5561,5101,5814,5566,5575,5101,5101,5101,5181,6167,5004,6438,5101,5102,6092,6381,5580,5101,5101,5004,6127,5600,5863,5606,5862,5605,5101,5101,5235,5101,5101,5101,5424,5102,6128,5601,5864,5607,5101,5101,5101,5224,5101,6167,5101,5006,6440,5101,5569,5101,5102,6180,5148,5101,5101,5996,5101,6283,5464,5101,5101,5101,5228,5101,5620,5101,5101,5101,5232,5176,5626,6753,5665,5101,5101,5632,5321,4434,5101,5102,6362,6200,5027,5562,5101,5570,5101,5101,5223,5746,5463,5101,5101,5101,5266,4989,5621,5101,5101,5101,5278,6754,5666,5101,5101,5265,5407,6755,5376,5101,5101,4990,5101,5612,5415,5320,6393,5101,5101,5176,5639,5646,4577,5568,5410,5640,5664,5101,5101,5101,5293,5175,5639,5663,5376,5659,5376,5101,5101,5101,4980,5657,5676,5101,5101,5288,5037,5658,5101,5101,5101,5411,5123,5098,5101,5423,5101,5102,6471,6477,5098,5101,5424,5101,5101,5426,5098,5424,5101,5102,6558,5101,5101,5101,6393,5101,5426,5424,5568,5424,5233,5101,5101,5102,6562,5101,5104,5101,5101,5101,4974,6215,5710,4879,5101,6496,5376,5101,5105,5101,5424,5424,5099,5101,5105,5101,5101,5101,5720,4722,5730,5742,5751,5757,5766,5764,5767,5755,5761,5771,5774,5776,5778,5790,5782,5785,5789,5790,5791,5796,5795,5801,5797,5806,5101,5108,4976,5101,5110,6702,5101,5111,6707,5101,5123,5123,5123,5698,5699,5699,5700,4602,5801,5802,5801,5801,4998,5101,5098,5101,5101,5425,5101,5101,5812,5819,5557,5101,5145,5281,5101,4844,5876,4852,5595,5101,4888,5101,5950,5136,4434,5101,4615,5101,5101,5823,5848,5941,5101,5101,5363,5101,5472,5373,5101,5101,5386,5101,5860,4888,5868,5887,5011,5011,5101,5101,5414,5101,6528,5376,5101,5101,5414,6347,5545,5908,6527,4732,5904,6529,5101,5101,5423,5101,5101,5100,5942,5101,5101,5101,5426,5101,5101,5101,5479,5912,5924,5101,5101,5423,5163,5158,5101,5101,5101,4989,5101,5350,5929,5376,5101,5101,5454,5270,6215,5393,5374,5101,5168,5173,5101,5101,5101,5021,5109,5101,5411,5101,5853,5101,6347,5101,5100,5101,5102,5947,5925,5101,5101,5530,4980,4811,5650,5954,5376,4812,5959,5955,5101,5184,5539,6436,5879,5098,5102,5538,5101,6166,5101,5102,5447,5442,4585,5993,5101,5101,5538,6089,5099,4592,5101,5101,5546,5903,4584,5993,5101,5101,5649,5940,5102,4586,5994,5101,5231,4887,5101,4974,5100,5101,5101,6712,5101,5101,4584,5995,5101,5101,5706,5898,4585,5995,5101,5101,5808,5101,5106,5101,5413,6346,5102,6004,5101,5101,5833,5840,6392,5107,5412,5876,4894,5152,5101,5035,5576,5101,5101,5106,6016,5101,5101,5837,5841,5101,5101,5338,5101,6015,5101,5101,5101,5547,5412,5101,5101,5101,5612,5101,6161,5101,5101,5101,5679,5101,5101,6367,5101,5101,5842,6096,5101,6282,5101,4486,6021,6046,6045,6046,6046,6043,6046,6050,6054,6058,6062,6071,6066,6070,6071,6071,6075,6075,6075,6075,6078,6082,5101,5101,5842,6097,5103,5234,5101,5101,5880,5305,5101,5101,5047,5101,5101,6102,5109,6108,5101,5236,5101,5101,5325,5101,6117,5101,6123,5101,5249,6209,6202,5101,6493,5101,5101,5897,5101,5101,6142,6181,5096,5843,6097,5101,5101,5966,5101,5101,5996,5101,5101,5101,5876,5103,6174,5101,5101,5416,5421,5101,5101,5251,6200,6204,5101,5101,5101,5949,6147,6152,6e3,4980,4980,4980,5101,5292,4635,5101,5299,5101,5101,5058,5062,5371,6361,5737,5101,5101,5975,4848,5988,6137,5101,5101,5101,5882,5102,5734,5738,5101,5317,6462,5349,6382,5101,6160,6159,5101,6173,5101,5101,5999,5101,5101,6667,5106,4894,6247,4978,5101,5101,6004,5101,6361,6199,6203,5101,5101,5101,5896,6382,6382,5101,5101,6111,5418,5101,5101,6668,4893,6186,5101,6769,5879,5101,5101,5529,6188,5101,5101,6126,5599,5102,6197,6201,6205,5419,6182,4434,5101,5101,6089,5252,6201,6205,5585,5101,5101,5101,6007,6455,4450,5101,5101,6133,5101,5101,5101,5695,6454,4449,4434,5101,5350,5101,5878,5101,6280,4886,4988,6229,5101,5101,6162,4614,5101,6378,4434,5101,5375,5101,4562,6229,5101,4978,6214,6161,4980,5101,5101,6162,5101,5101,5101,5655,5640,6234,5101,5101,5101,6089,5101,6258,4434,6240,5101,6258,4434,5101,5404,5962,5101,5102,5437,6424,6235,5101,5101,5568,5410,5101,5101,6236,5101,6165,5101,5101,5101,6259,5101,5101,6164,5101,5101,5101,5648,5849,5942,5101,6260,5101,6165,5101,5405,5409,5101,5057,5268,5409,5101,5101,5102,6742,5253,5101,5101,5101,6260,5101,5101,6259,5101,6167,6258,5101,5101,5101,6112,6259,5101,6259,6165,4847,5987,5376,5568,6497,6259,5568,6497,6168,6257,6257,6261,6251,6254,6254,5101,5101,5101,6169,5118,5101,5916,5101,5414,5538,5101,5101,5918,4896,5553,4884,5037,6272,6287,6305,6299,6305,6303,6299,6309,6293,6290,6295,6322,6313,6327,6316,6319,6323,6332,6331,6339,6339,6340,6339,6339,6339,6336,6344,5101,5101,5101,6178,5224,5747,5376,5101,5101,5415,5101,5101,6351,4893,4893,4882,5230,5001,5101,6372,5101,5101,6214,4980,5101,6357,5969,5101,5417,5419,6353,6366,4434,5101,6371,6390,6397,6401,5101,5418,4636,5647,6434,5101,5101,5101,6192,5943,5101,5008,5101,4978,5101,4979,5101,5416,5101,6351,4893,5419,6352,4894,6268,6367,5002,5101,5101,6279,5641,5101,5101,5290,5101,6452,5101,5101,5101,6223,5101,6470,6459,6480,6475,6479,6205,5101,5423,5407,5101,5057,5061,5390,6481,5101,5101,5101,6228,5589,5588,5587,5101,5436,5442,6428,5402,5101,5101,5102,6143,6182,5106,5745,6520,5101,5455,5409,5101,5057,5061,5370,6267,5101,5410,5101,5535,5101,5101,5177,5640,5423,5999,5101,5101,6360,5736,6738,6204,5101,5101,6378,5101,5224,5077,5101,5008,6265,5555,5101,5415,5070,5082,5622,5101,5101,6278,6165,5233,5101,5377,6377,6386,5103,5101,5679,5101,5538,5101,5101,5101,5534,5538,4826,5935,6737,6204,4827,5936,6535,6204,6191,6191,5101,5101,6378,6393,5232,5101,5036,5101,5543,5259,5326,6190,5101,5101,5101,6278,5443,6506,4434,5101,5568,6236,5101,5101,5568,5101,5102,6511,5134,6507,5164,4451,5101,5101,6392,5101,6165,5101,6192,6192,6192,5101,5101,6378,6392,5101,5101,6517,5376,5101,5583,5101,5101,5101,6011,6524,5101,6278,5101,5101,5101,5037,6155,5101,5101,5101,6382,6533,6549,5101,5101,5101,6379,6393,5101,6544,6381,5101,5593,5101,5101,5229,5634,5101,6676,6549,5101,5616,6230,5101,5351,5877,4895,5411,5432,5101,5101,5101,5031,5101,6675,6548,5101,5101,5101,6391,5101,6539,5426,5101,5101,5417,5920,4896,5101,5648,6722,5416,6462,5101,5562,5101,6554,6381,5101,5680,5101,5101,6381,5101,5101,5101,5101,4583,5101,6540,5425,5101,5426,5101,5101,6709,5417,4895,5102,4595,5101,5101,6406,5101,4594,5403,6540,5101,5714,5003,4991,6090,6568,5101,5101,6464,4988,5101,6091,6381,5101,5842,5037,5998,5996,5996,5413,4893,5101,5101,5101,6419,5101,6091,5101,5101,6492,6491,5101,6091,5101,4895,4561,4896,5101,5101,6090,6089,4896,5101,5101,6494,6256,4559,5101,5101,6090,5101,5101,6090,4561,6089,4561,5101,6089,4560,5537,6089,5101,5537,6574,6752,4888,4577,5716,5997,6579,5101,5844,5037,5101,5101,5101,6196,5101,6462,6465,6463,4869,5826,5829,6587,4489,4646,6598,6591,6597,6593,6605,6602,6607,6611,6613,6617,6619,6628,6625,6632,6621,6635,6639,6640,6644,6647,6654,6653,6651,6658,6661,6665,5101,6574,6723,5101,5876,6281,5670,5418,5421,5101,5101,5101,6469,5107,5101,4975,5101,4976,6672,5101,5101,5101,6682,6494,5101,5101,5101,6695,6680,5313,6686,5101,5877,5684,4434,6246,5101,5101,6163,5101,5101,5101,6692,5101,5101,6495,5101,5101,6703,5101,5101,5101,6713,5101,5101,6718,6717,4834,6722,5101,5418,5422,5101,6727,6734,5101,5881,5357,5337,6746,5101,5101,5101,6495,6378,5101,6222,6745,5101,5889,5128,5074,4442,6224,6747,5101,5877,5615,5671,5876,5101,5879,5101,5899,6230,5101,5101,6089,5101,5101,4892,5101,5412,5002,6734,5101,5101,6711,5101,5101,5253,5101,5877,5877,5877,5101,5101,5101,6771,5101,5101,6575,5642,4635,5411,6089,5101,4889,5258,5101,5252,4561,5101,5101,6090,5252,4561,5876,5876,5101,5101,5101,5914,6353,6148,5106,4974,5101,5101,5972,5101,4989,5101,6165,5425,5101,6688,5107,5101,6111,5724,6759,5725,4561,5101,5101,5983,5994,5101,5190,5879,5101,5101,5101,5344,5376,5106,5101,5101,5413,6463,5879,5102,6775,6767,5101,5101,5997,5101,5101,5101,4811,4583,6765,5101,5101,5101,5101,6098,5420,5101,5998,5101,5101,5101,4818,5109,5101,5413,5537,5101,5101,6165,5101,6111,6564,5101,5998,5101,6769,5101,5101,6132,6137,5101,6098,5101,5101,6033,6031,6039,5105,5101,5109,5101,4863,5101,6776,5101,5101,5101,6035,4434,5101,6161,5536,5101,5036,5102,5101,5101,6088,5101,5101,5412,6089,1048576,1073741824,0,0,0,-872415232,4194560,4196352,270532608,2097152,4194304,117440512,134217728,4194304,16777216,4194432,3145728,16777216,134217728,536870912,1073741824,0,541065216,541065216,-2143289344,-2143289344,4194304,4194304,4196352,-2143289344,4194304,4194432,37748736,541065216,-2143289344,4194304,4194304,4194304,4194304,37748736,4194304,4194304,4198144,4196352,8540160,4194304,4194304,4194304,4196352,276901888,4194304,4194304,8425488,4194304,1,0,1024,1024,0,1024,742391808,239075328,-1405091840,742391808,742391808,775946240,239075328,171966464,775946240,171966464,171966464,171966464,171966464,-1405091840,775946240,775946240,-1405091840,-1371537408,775946240,775946240,775946240,171966464,239075328,239075328,171966464,775946240,-1371537408,775946240,775946240,-1371537408,239075328,775946240,775946240,775946240,775946240,4718592,64,4718592,2097216,4720640,541589504,4194368,541589504,4194400,4194368,541065280,4194368,-2143289280,4194368,-2143285440,-2143285408,-2143285408,-2109730976,-2143285408,-2143285408,-2143285408,-2143285408,776470528,-2143285408,-2109730976,775946336,775946304,776470528,775946304,-1908404384,2,4,8,262144,0,0,0,2147483648,8,262144,262144,1048576,0,128,4096,0,4194304,128,128,0,1048576,0,0,1536,1792,0,0,1,2,4,128,2097152,8192,8392704,0,0,1,4,8,262144,536870912,64,64,32,96,96,96,96,128,1536,524288,96,64,524288,524288,1536,1024,0,0,0,29,96,1048576,128,128,128,128,2048,2048,2048,2048,2048,2048,0,96,524288,96,64,0,0,128,1024,524288,64,64,96,96,524288,524288,4100,1024,100680704,96,524288,64,96,524288,64,80,528,524304,1048592,2097168,268435472,16,16,2,536936448,16,262160,16,536936448,16,17,17,20,16,48,16,16,20,560,24,560,48,2097680,3145744,1048592,1048592,2097168,16,1049104,2228784,2097168,2097168,16,16,16,16,20,48,48,3146256,2097680,1048592,16,16,16,28,0,2097552,3146256,16,16,16,21,16,16,28,16,0,16,0,-2046820352,0,0,2,2,2,2098064,17,21,266240,1048576,67108864,2147483648,0,0,64,65536,1048576,0,16,16,163577856,17,528,528,16,528,-161430188,-161429676,-161429676,-161430188,-161429680,-161430188,-161430188,-161429680,-161429676,-161349072,-161429675,-161349072,-161349072,-161349072,-161349072,-161347728,-161347728,-161347728,-161347728,-161298572,-160774288,-160299084,-161298572,-161298576,-160299088,-161298576,-160774284,-160774284,-161298572,-161298572,-161298572,-161298572,112,21,53,146804757,146812949,146862101,146863389,-161429676,-160905388,-161429676,-161429676,-161429676,-161429676,-161429675,-161349072,146863421,148960541,146863389,146863389,148960541,146863421,148960541,148960541,-161429740,-161429676,-160905388,-161298572,-161298572,-18860267,-160774284,-18729163,0,0,1,6,8,16,262144,0,0,1,8,0,24,0,0,1,14,16,32,1024,32768,100663296,-1073741824,0,0,0,150528,131072,16777216,0,0,1,102,1,32768,131328,131072,524288,2097152,8388608,16777216,164096,0,0,0,1007,0,1073741825,2147483648,2147483648,1073741824,8,0,0,58368,0,0,65536,1048576,4096,1048576,512,512,9476,134218240,0,1073741824,2621440,1073741824,2147483648,2147483648,0,0,66048,0,0,0,67108864,0,0,0,16384,0,0,0,8,0,0,0,9,4456448,8,16777216,1073774592,1226014816,100665360,100665360,100665360,100665360,-2046818288,1091799136,1091799136,1091803360,1091799136,1091799136,-2044196848,1091799136,1091799136,1091799136,1091799136,1091799136,1158908e3,1158908001,1192462432,1192462448,1192462448,1192462448,1192462448,1200851056,1091799393,1200851056,1200851056,1091799393,1200851056,1200851056,1200851056,1192462448,1870638912,1870638912,1870655296,1870638912,1870655296,1870655296,1870655296,1870655296,1870655296,1870655312,1870655316,1870655316,1870655316,1870655317,1870655348,1870655316,1870655316,1870655312,1870655312,1879027568,1879043952,1870655316,1870655316,1870655316,1870638928,1879043952,1879043956,0,0,1,12288,0,229440,1048576,1224736768,100663296,0,0,0,1024,0,0,8192,0,0,0,576,0,231488,1090519040,0,0,0,2048,0,0,134217728,0,1157627904,1191182336,0,0,131584,268435456,49152,0,0,0,134217728,0,0,0,16,0,0,0,13,0,9437184,231744,0,0,235712,0,0,131328,0,0,131072,32768,0,0,134217728,0,52e4,7864320,1862270976,0,0,0,4096,0,0,0,1862270976,1862270976,1862270976,0,16252928,0,0,0,8192,64,98304,1048576,150994944,83886080,117440512,0,0,2,4,16,32,256,1024,8192,33554432,0,0,64,256,3584,8192,16384,65536,262144,524288,1048576,2097152,4194304,2147483648,8192,98304,393216,524288,1048576,1048576,2097152,4194304,251658240,536870912,8192,16384,98304,393216,251658240,536870912,1073741824,0,0,2097152,0,0,0,0,1,0,0,0,2,0,0,0,3,240,0,83886080,117440512,64,0,2,0,0,524288,524288,524288,524288,256,1536,2048,8192,16384,256,1536,8192,65536,262144,524288,2097152,67108864,4194304,16777216,100663296,134217728,536870912,524288,2097152,134217728,268435456,536870912,1073741824,0,0,524288,2097152,0,0,1048576,2097152,67108864,1073741824,0,0,1536,65536,262144,524288,33554432,0,1024,65536,262144,2097152,2097152,1073741824,0,0,2,8,16,32,0,8192,4096,0,0,605503,1066401792,9476,512,0,32,384,8192,4194312,4194312,541065224,4194312,4194312,4194312,4194312,4194344,-869654016,-869654016,4203820,-869654016,-869654016,-869654016,-869654016,1279402504,1279402504,1279402504,1279402504,2143549415,2143549415,2143549415,2143549415,2143549423,2143549423,2143549423,2143549423,2143549423,2143549423,0,0,2,16384,32768,260,512,0,0,0,65536,0,0,0,384,8192,0,32,512,0,1050624,262144,512,1275208192,139264,1275068416,0,0,4,128,1024,2048,16384,262144,8,4194304,0,0,0,82432,0,40,0,0,4,256,1024,98304,131072,16777216,268435456,0,0,300,4203520,0,0,2097152,1073741824,2147483648,0,0,520,4333568,1275068416,0,0,4194304,1024,0,4096,8192,0,0,0,520,520,0,0,0,164096,999,29619200,2113929216,0,0,0,1007,1007,1007,0,0,8,124160,32,512,0,2048,524288,0,536870912,0,139264,0,0,0,139264,0,40,0,2621440,0,0,2147483648,1610612736,0,0,0,229376,0,40,0,524288,2097152,1073741824,44,0,0,0,262144,0,0,16384,229376,4194304,25165824,100663296,402653184,1610612736,0,110,110,110,0,0,8388608,8388608,8192,33554432,67108864,134217728,1073741824,0,2147483648,0,0,0,12545,25165824,33554432,67108864,402653184,536870912,0,104,104,104,8192,33554432,134217728,0,0,8388608,134217728,1073741824,0,229376,25165824,33554432,402653184,536870912,0,0,256,1024,65536,16777216,268435456,0,0,0,524288,0,0,0,64,0,0,0,128,0,0,0,256,0,0,0,300,524288,2097152,2147483648,0,0,1,6,32,64,256,512,256,1024,4096,8192,65536,2,4,32,64,256,1024,0,2,4,256,1024,65536,4,64,256,1024,0,0,8,8388608,0,98304,131072,25165824,268435456,536870912,0,0,8388608,4096,0,0,8,8,8,0,2048,524288,67108864,536870912,32,4100,67108864,0,32768,0,32768,0,1049088,0,134348800,270532608,0,1049088,1049088,8192,1049088,12845065,12845065,12845065,12845065,147193865,5505537,5591557,5587465,5587457,5587457,147202057,5587457,5587457,5591557,5587457,13894153,13894153,13894153,13894153,81003049,13894153,-1881791493,-1881791493,-1881791493,-1881791493,0,0,8,33554432,262144,0,33554432,1024,0,4,0,0,0,867647,1,5505024,0,0,15,16,32,192,86528,9,0,0,16,8192,0,0,23,0,75497472,0,0,0,1048576,5505024,-1887436800,0,0,0,2097152,268435456,0,0,4096,8192,67108864,0,0,262144,4194304,8388608,0,0,33554432,8192,0,0,288,8388608,0,0,0,81920,0,0,24,282624,64,896,8192,131072,262144,1048576,16777216,33554432,-1946157056,0,0,0,2621440,0,131072,0,32,0,0,2048,3145728,0,16384,65536,0,0,268435456,32,64,384,512,5120,8192,0,64,0,2048,1048576,0,0,32,64,384,8192,131072,0,0,32768,134217728,0,0,8,32,64,1024,2048,0,2,8,32,384,8192,131072,33554432,131072,1048576,33554432,134217728,2147483648,0,0,2048,524288,536870912,0,1073741824,0,131072,33554432,2147483648,0,0,33554432,1073741824,0,32,0,524288,0,0,67108864,64,64,0,96,96,0,524288,524288,524288,64,64,64,64,96,96,96,0,0,0,28,0,8396800,4194304,134217728,2048,134217728,0,0,32,1,0,8396800,0,0,32,64,128,1024,2048,262144,0,16384,0,2,4,64,128,3840,16384,19922944,2080374784,0,16384,16384,16777216,16384,32768,1048576,2097152,4194304,16777216,524288,268567040,16384,2113544,68489237,72618005,68423701,68423701,68423701,68489237,68423701,-2079059883,-2079059947,68423701,85200917,68423701,68423701,68423701,68423701,68423765,-2079059883,68425749,68423703,69488664,85200919,69488664,69488664,69488664,69488664,70537244,70537245,70537245,70537245,70537309,70537245,-2076946339,-2076946403,70537245,-2076946339,70537245,70537245,70537245,70537245,70539293,-2022351745,-2022351745,-2022351617,-2022351745,-2022351617,-2022351617,-2022351617,-2022351617,-2022351617,-2022351617,-2022351745,-2022351617,-2022351617,0,0,40,67108864,331776,83886080,0,0,59,140224,5505024,5242880,-2080374784,-2080374784,268288,29,0,284672,0,0,68157440,137363456,0,66,66,0,63,64,351232,63,192,351232,7340032,-2030043136,0,0,0,4194304,1,1024,32,64,256,32768,65536,512,131072,268435456,0,0,134348800,134348800,16,4096,262144,1048576,4194304,8388608,16777216,33554432,5242880,0,7,0,0,142606336,0,-872415232,0,0,0,131072,0,0,0,999,259072,4194304,25165824,0,20480,0,0,64,256,1536,8192,16384,0,12,3145728,0,0,0,3145728,64,3072,20480,65536,262144,32,192,3072,20480,4,1048576,0,0,128,131072,0,134218752,0,0,128,134217728,5242880,0,6,0,0,16384,65536,7340032,50331648,32,192,1024,2048,4096,8192,65536,32768,65536,4194304,16777216,2147483648,0,0,1,4,0,0,256,1536,65536,65536,2097152,4194304,50331648,2147483648,32,192,1024,65536,268435456,0,0,32768,4194304,16777216,0,0,184549376,0,0,243269632,0,0,32768,131072,131072,0,32768,32768,1,2,4,2097152,16777216,134217728,268435456,1073741824,2147483648,128,2097152,4194304,50331648,0,0,0,8388608,0,0,0,768,2,4,50331648,0,0,536870912,9216,0,0,0,49152,2,4,128,50331648,0,0,4096,4194304,268435456,0,0,1075838976,2097152,2097152,268435456,4194432,268435968,268435968,1073743872,268435968,0,128,6144,0,229376,128,268435968,268436032,256,256,536871168,256,256,256,256,257,256,384,-1879046336,-1879046334,1073744256,-1879046334,-1879046326,-1879046334,-1879046334,-1879046326,-1879046326,-1845491902,-1878784182,268444480,268444480,268436288,268436288,268436288,268436288,268436289,268444480,268444480,268444480,268444480,2100318149,2100318149,2100318149,2100318149,2100326341,2100326341,2100318149,2100326341,2100326341,0,0,256,2048,2048,0,0,0,4,8,262144,134217728,1,1024,0,4096,0,64,1856,2147483648,0,0,256,65536,2432,0,1864,0,1,2,16,32,64,0,301989888,0,262144,131072,0,0,832,8192,0,1,2,56,64,896,0,1,4036,19939328,2080374784,2080374784,0,0,0,16252928,1,16,32,128,512,2304,0,8,0,512,301989888,0,0,262144,524288,134217728,536870912,0,24576,0,0,0,33554432,0,0,0,32768,0,0,2097152,134217728,0,32768,196608,0,0,0,1,128,512,2048,524288,268435456,536870912,0,33554432,262144,8192,0,0,256,8388608,0,0,1,4,128,3584,16384,3145728,16777216,67108864,134217728,805306368,1073741824,0,0,1024,2048,16384,3145728,0,8192,0,8192,0,536870912,524288,536870912,1073741824,0,1,2,112,128,3072,2048,3145728,16777216,536870912,1073741824,0,0,2097152,16777216,1073741824,0,0,0,8192,8192,8192,9216,33554432,32768,33554432,0,0,262144,0,16777216,0,16777216,16777216,16777216,16777216,0,0,2097152,16777216,0,0,16777216,268500992,4243456,0,0,512,65536,0,4096,4096,0,4096,4096,4096,4096,0,0,0,32,0,0,0,41,0,4243456,4096,12289,1073754113,12289,12289,1124073472,12289,12289,1098920193,1098920193,1124073488,1124073472,1124073472,1258292224,1124073472,1124073474,1124073472,1124073472,1124073472,1124073472,1124073472,1392574464,1124073472,12289,1124085761,1124085761,1124085761,1124085761,1132474625,1098920209,1132474625,1132474625,1098920209,1132474625,1132474625,1132474625,1132474625,1400975617,1124085777,1124085761,1124085761,1258304513,2132360255,2132360255,2132622399,2132360255,2132622399,2132622399,2140749119,2141011263,2132622399,2132622399,2132622399,2132622399,2132360255,2141011263,2141011263,0,0,512,131072,0,128,131072,1024,134217728,0,0,0,50331648,1073741824,0,1,4,64,128,3584,318767104,0,0,0,268435456,0,12289,0,0,0,159383552,25165824,0,0,0,536870912,0,0,0,24576,58720256,0,0,12305,13313,0,0,0,1073741824,0,0,0,12561,0,78081,327155712,0,0,0,1275068416,0,605247,1058013184,1073741824,1073741824,8388608,0,0,503616,7864320,867391,1058013184,1073741824,0,1,6,96,384,512,1024,4096,8192,16384,229376,25165824,33554432,268435456,536870912,0,867647,1066401792,0,0,0,512,1048576,0,0,9,8388608,12288,0,0,0,512,2760704,77824,0,0,0,1024,2048,3145728,2048,77824,524288,1048576,0,0,0,512,0,1048576,0,1,30,32,1024,2048,1024,2048,339968,524288,1048576,16777216,100663296,134217728,805306368,1073741824,1024,2048,12288,65536,0,65536,0,0,19947520,0,0,0,16777216,0,0,0,5,1024,2048,12288,327680,524288,33554432,134217728,536870912,1073741824,14,16,1024,4096,8192,229376,0,2,16384,4194304,2147483648,0,0,0,8,0,65536,262144,7340032,50331648,67108864,2147483648,4096,65536,262144,524288,1048576,33554432,256,0,256,0,256,1,12,1024,134217728,262144,134217728,536870912,0,0,268435456,1,4,8,134217728,4,8,536870912,0,2,16,64,128,0,0,262144,536870912,0,0,1073741824,32768,0,8,32,512,4096,9437184,0,0,1048576,2097152,4194304,67108864,134217728,0,1024,137363456,66,25165824,26214400,92274688,92274688,25165952,92274688,25165824,25165824,92274688,25165824,25165824,92274688,92274688,92274720,92274688,25165824,92274688,93323264,25165890,100721664,100721664,25165890,100721928,100721928,100787464,100853e3,100721928,100721928,125977600,125977600,125977600,125977600,127026176,125977600,125846528,125846528,125846560,125846528,125846528,125846528,126895104,125846528,125977600,127026176,125977600,125977600,127026176,127026176,281843,281843,1330419,281843,1330419,281843,1330419,1330419,281843,281843,281843,5524723,39079155,72633587,5524723,5524723,5524723,5524723,93605107,72633587,72633587,92556531,93605107,127290611,127290611,97799411,127290611,131484915,0,0,1536,2147483648,0,0,17408,33554432,0,1,12,1024,262144,0,58624,0,0,1536,0,189696,0,0,0,1792,2147483648,0,148480,50331648,0,1,14,1024,4096,65536,524288,240,19456,262144,0,0,19456,262144,0,4194304,0,0,1024,2097152,0,0,0,150528,0,0,0,512,4096,8192,131072,0,57344,0,0,0,2048,100663296,0,0,256,0,65536,524288,1048576,33554432,67108864,2,48,64,128,3072,16384,262144,0,0,32,4096,8192,131072,1048576,8388608,33554432,134217728,2048,262144,0,0,2048,268435456,16,64,128,262144,0,0,32768,65536,131072,0,1,2,16,64,0],r.TOKEN=[\"(0)\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSection\",\"Wildcard\",\"EQName\",\"URILiteral\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"StringLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"PITarget\",\"NCName\",\"QName\",\"S\",\"S\",\"CharRef\",\"CommentContents\",\"EOF\",\"'!'\",\"'!='\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$'\",\"'%'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"')'\",\"'*'\",\"'*'\",\"'+'\",\"','\",\"'-'\",\"'-->'\",\"'.'\",\"'..'\",\"'/'\",\"'//'\",\"'/>'\",\"':'\",\"':)'\",\"'::'\",\"':='\",\"';'\",\"'<'\",\"'<!--'\",\"'</'\",\"'<<'\",\"'<='\",\"'<?'\",\"'='\",\"'>'\",\"'>='\",\"'>>'\",\"'?'\",\"'?>'\",\"'@'\",\"'NaN'\",\"'['\",\"']'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'{|'\",\"'|'\",\"'||'\",\"'|}'\",\"'}'\",\"'}}'\"]},{}],\"/node_modules/xqlint/lib/tree_ops.js\":[function(e,t,n){\"use strict\";n.TreeOps={flatten:function(e){var t=this,n=\"\";if(!e)throw new Error(\"Invalid node found\");return e.value===undefined?e.children.forEach(function(e){n+=t.flatten(e)}):n+=e.value,n},concat:function(e,t,n){var r=n?{}:e;n&&Object.keys(e).forEach(function(t){r[t]=e[t]});var i=Object.keys(t);return i.forEach(function(e){r[e]=t[e]}),r},removeParentPtr:function(e){e.getParent!==undefined&&delete e.getParent;for(var t in e.children){var n=e.children[t];this.removeParentPtr(n)}},inRange:function(e,t,n){if(e&&e.sl<=t.line&&t.line<=e.el){if(e.sl<t.line&&t.line<e.el)return!0;if(e.sl===t.line&&t.line<e.el)return e.sc<=t.col;if(e.sl===t.line&&e.el===t.line)return e.sc<=t.col&&t.col<=e.ec+(n?1:0);if(e.sl<t.line&&e.el===t.line)return t.col<=e.ec+(n?1:0)}},findNode:function(e,t){if(!e)return;var n=e.pos;if(this.inRange(n,t)===!0){for(var r in e.children){var i=e.children[r],s=this.findNode(i,t);if(s!==undefined)return s}return e}return},astAsXML:function(e,t){var n=\"\";t=t?t:\"\",e.value&&(n+=t+\"<\"+e.name+\">\"+e.value+\"</\"+e.name+\">\\n\"),n+=t+\"<\"+e.name+\">\\n\";var r=this;return e.children.forEach(function(e){n+=r.astAsXML(e,t+\"  \")}),n+=t+\"</\"+e.name+\">\\n\",n}}},{}],\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\":[function(e,t,n){\"use strict\";n.parseComment=function(e){e=e.trim();var t=e.substring(0,3)===\"(:~\";if(t){var n=e.split(\"\\n\"),r={description:\"\"};return n.forEach(function(e,t){t===0&&(e=e.substring(3)),e=e.trim(),e[0]===\":\"&&(e=e.substring(1)),e=e.trim(),r.description+=\" \"+e}),r.description=r.description.trim(),r.description=r.description.substring(0,r.description.length-2).trim(),r}}},{}],\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\":[function(e,t,n){var r=e(\"lodash\"),i=e(\"./parse_comment\").parseComment;n.XQDoc=function(e){\"use strict\";var t={};this.getDoc=function(){return t},this.WS=function(e){e.value.trim().substring(0,3)===\"(:~\"&&(e.getParent.comment=i(e.value))},this.AnnotatedDecl=function(e){this.visitChildren(e),e.comment=e.getParent.comment,e.getParent.comment=undefined},this.XQuery=function(e){this.visitChildren(e)},this.getXQDoc=function(e){var t={moduleNamespace:e.moduleNamespace,description:e.description,variables:[],functions:[]};return r.forEach(e.variables,function(e){var n=r.cloneDeep(e.qname);n.annotations=e.annotations,n.description=e.description,n.type=e.type,n.occurrence=e.occurrence,t.variables.push(n)}),r.forEach(e.functions,function(e,n){if(n.substring(0,\"http://www.w3.org/2001/XMLSchema#\".length)===\"http://www.w3.org/2001/XMLSchema#\")return;var r=n.split(\"#\");t.functions.push({name:r[0],uri:r[1],params:e.params})}),t},this.visit=function(e){var t=e.name,n=!1;typeof this[t]==\"function\"&&(n=this[t](e)===!0),n||this.visitChildren(e)},this.visitChildren=function(e,t){for(var n=0;n<e.children.length;n++){var r=e.children[n];t!==undefined&&typeof t[r.name]==\"function\"?t[r.name](r):this.visit(r)}},this.visit(e)}},{\"./parse_comment\":\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\",lodash:\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/lib/xqlint.js\":[function(e,t,n){\"use strict\";var r=e(\"lodash\"),i=e(\"./parsers/JSONiqParser\").JSONiqParser,s=e(\"./parsers/XQueryParser\").XQueryParser,o=e(\"./parsers/JSONParseTreeHandler\").JSONParseTreeHandler,u=e(\"./compiler/translator\").Translator,a=e(\"./formatter/style_checker\").StyleChecker,f=e(\"./xqdoc/xqdoc\").XQDoc,l=e(\"../lib/completion/completer\"),c=e(\"./tree_ops\").TreeOps,h=n.createStaticContext=function(){var t=e(\"./compiler/static_context\").StaticContext;return new t},p=function(e,t,n){var r=e.substring(0,t),i=e.substring(0,n),s=r.split(\"\\n\").length,o=t-r.lastIndexOf(\"\\n\"),u=i.split(\"\\n\").length,a=n-i.lastIndexOf(\"\\n\"),f={sl:s-1,sc:o-1,el:u-1,ec:a-1};return f};n.JSONiqLexer=e(\"./lexers/jsoniq_lexer\").JSONiqLexer,n.XQueryLexer=e(\"./lexers/xquery_lexer\").XQueryLexer,n.XQLint=function(e,t){r.defaults&&(t=r.defaults(t?t:{},{styleCheck:!1}));var n,d,v=t.staticContext?t.staticContext:h();this.getAST=function(){return n},this.printAST=function(){return c.astAsXML(n,\"  \")},this.getXQDoc=function(){return d.getXQDoc(v)};var m=[];this.getMarkers=function(){return m},this.getMarkers=function(e){var t=[];return m.forEach(function(n){(n.type===e||e===undefined)&&t.push(n)}),t},this.getErrors=function(){return this.getMarkers(\"error\")},this.getWarnings=function(){return this.getMarkers(\"warning\")},this.getCompletions=function(t){return l.complete(e,n,v,t)};var g=!1;this.hasSyntaxError=function(){return g};var y=t.fileName?t.fileName:\"\",b=y.substring(y.length-\".jq\".length).indexOf(\".jq\")!==-1&&e.indexOf(\"xquery version\")!==0||e.indexOf(\"jsoniq version\")===0,w=new o(e),E=b?new i(e,w):new s(e,w);try{E.parse_XQuery()}catch(S){if(!(S instanceof E.ParseException))throw S;g=!0,w.closeParseTree();var x=p(e,S.getBegin(),S.getEnd()),T=E.getErrorMessage(S);x.sc===x.ec&&x.ec++,m.push({pos:x,type:\"error\",level:\"error\",message:T})}n=w.getParseTree(),t.styleCheck&&(m=m.concat((new a(n,e)).getMarkers())),d=new f(n);var N=new u(v,n);m=m.concat(N.getMarkers())}},{\"../lib/completion/completer\":\"/node_modules/xqlint/lib/completion/completer.js\",\"./compiler/static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\",\"./compiler/translator\":\"/node_modules/xqlint/lib/compiler/translator.js\",\"./formatter/style_checker\":\"/node_modules/xqlint/lib/formatter/style_checker.js\",\"./lexers/jsoniq_lexer\":\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\",\"./lexers/xquery_lexer\":\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\",\"./parsers/JSONParseTreeHandler\":\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\",\"./parsers/JSONiqParser\":\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\",\"./parsers/XQueryParser\":\"/node_modules/xqlint/lib/parsers/XQueryParser.js\",\"./tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./xqdoc/xqdoc\":\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\",lodash:\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/node_modules/lodash/index.js\":[function(e,t,n){(function(e){(function(){function Ht(e,t){if(e!==t){var n=e===null,i=e===r,s=e===e,o=t===null,u=t===r,a=t===t;if(e>t&&!o||!s||n&&!u&&a||i&&a)return 1;if(e<t&&!n||!a||o&&!i&&s||u&&s)return-1}return 0}function Bt(e,t,n){var r=e.length,i=n?r:-1;while(n?i--:++i<r)if(t(e[i],i,e))return i;return-1}function jt(e,t,n){if(t!==t)return Jt(e,n);var r=n-1,i=e.length;while(++r<i)if(e[r]===t)return r;return-1}function Ft(e){return typeof e==\"function\"||!1}function It(e){return e==null?\"\":e+\"\"}function qt(e,t){var n=-1,r=e.length;while(++n<r&&t.indexOf(e.charAt(n))>-1);return n}function Rt(e,t){var n=e.length;while(n--&&t.indexOf(e.charAt(n))>-1);return n}function Ut(e,t){return Ht(e.criteria,t.criteria)||e.index-t.index}function zt(e,t,n){var r=-1,i=e.criteria,s=t.criteria,o=i.length,u=n.length;while(++r<o){var a=Ht(i[r],s[r]);if(a){if(r>=u)return a;var f=n[r];return a*(f===\"asc\"||f===!0?1:-1)}}return e.index-t.index}function Wt(e){return St[e]}function Xt(e){return xt[e]}function Vt(e,t,n){return t?e=Ct[e]:n&&(e=kt[e]),\"\\\\\"+e}function $t(e){return\"\\\\\"+kt[e]}function Jt(e,t,n){var r=e.length,i=t+(n?0:-1);while(n?i--:++i<r){var s=e[i];if(s!==s)return i}return-1}function Kt(e){return!!e&&typeof e==\"object\"}function Qt(e){return e<=160&&e>=9&&e<=13||e==32||e==160||e==5760||e==6158||e>=8192&&(e<=8202||e==8232||e==8233||e==8239||e==8287||e==12288||e==65279)}function Gt(e,t){var n=-1,r=e.length,i=-1,s=[];while(++n<r)e[n]===t&&(e[n]=S,s[++i]=n);return s}function Yt(e,t){var n,r=-1,i=e.length,s=-1,o=[];while(++r<i){var u=e[r],a=t?t(u,r,e):u;if(!r||n!==a)n=a,o[++s]=u}return o}function Zt(e){var t=-1,n=e.length;while(++t<n&&Qt(e.charCodeAt(t)));return t}function en(e){var t=e.length;while(t--&&Qt(e.charCodeAt(t)));return t}function tn(e){return Tt[e]}function nn(e){function Hn(e){if(Kt(e)&&!mu(e)&&!(e instanceof In)){if(e instanceof jn)return e;if(Mt.call(e,\"__chain__\")&&Mt.call(e,\"__wrapped__\"))return gs(e)}return new jn(e)}function Bn(){}function jn(e,t,n){this.__wrapped__=e,this.__actions__=n||[],this.__chain__=!!t}function In(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Ln,this.__views__=[]}function qn(){var e=new In(this.__wrapped__);return e.__actions__=Yn(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Yn(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Yn(this.__views__),e}function Rn(){if(this.__filtered__){var e=new In(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e}function Un(){var e=this.__wrapped__.value(),t=this.__dir__,n=mu(e),r=t<0,i=n?e.length:0,s=Ki(0,i,this.__views__),o=s.start,u=s.end,a=u-o,f=r?u:o-1,l=this.__iteratees__,c=l.length,h=0,p=xn(a,this.__takeCount__);if(!n||i<y||i==a&&p==a)return ii(r&&n?e.reverse():e,this.__actions__);var d=[];e:while(a--&&h<p){f+=t;var v=-1,m=e[f];while(++v<c){var g=l[v],E=g.iteratee,S=g.type,x=E(m);if(S==w)m=x;else if(!x){if(S==b)continue e;break e}}d[h++]=m}return d}function zn(){this.__data__={}}function Wn(e){return this.has(e)&&delete this.__data__[e]}function Xn(e){return e==\"__proto__\"?r:this.__data__[e]}function Vn(e){return e!=\"__proto__\"&&Mt.call(this.__data__,e)}function $n(e,t){return e!=\"__proto__\"&&(this.__data__[e]=t),this}function Jn(e){var t=e?e.length:0;this.data={hash:gn(null),set:new cn};while(t--)this.push(e[t])}function Kn(e,t){var n=e.data,r=typeof t==\"string\"||Nu(t)?n.set.has(t):n.hash[t];return r?0:-1}function Qn(e){var t=this.data;typeof e==\"string\"||Nu(e)?t.set.add(e):t.hash[e]=!0}function Gn(e,n){var r=-1,i=e.length,s=-1,o=n.length,u=t(i+o);while(++r<i)u[r]=e[r];while(++s<o)u[r++]=n[s];return u}function Yn(e,n){var r=-1,i=e.length;n||(n=t(i));while(++r<i)n[r]=e[r];return n}function Zn(e,t){var n=-1,r=e.length;while(++n<r)if(t(e[n],n,e)===!1)break;return e}function er(e,t){var n=e.length;while(n--)if(t(e[n],n,e)===!1)break;return e}function tr(e,t){var n=-1,r=e.length;while(++n<r)if(!t(e[n],n,e))return!1;return!0}function nr(e,t,n,r){var i=-1,s=e.length,o=r,u=o;while(++i<s){var a=e[i],f=+t(a);n(f,o)&&(o=f,u=a)}return u}function rr(e,t){var n=-1,r=e.length,i=-1,s=[];while(++n<r){var o=e[n];t(o,n,e)&&(s[++i]=o)}return s}function ir(e,n){var r=-1,i=e.length,s=t(i);while(++r<i)s[r]=n(e[r],r,e);return s}function sr(e,t){var n=-1,r=t.length,i=e.length;while(++n<r)e[i+n]=t[n];return e}function or(e,t,n,r){var i=-1,s=e.length;r&&s&&(n=e[++i]);while(++i<s)n=t(n,e[i],i,e);return n}function ur(e,t,n,r){var i=e.length;r&&i&&(n=e[--i]);while(i--)n=t(n,e[i],i,e);return n}function ar(e,t){var n=-1,r=e.length;while(++n<r)if(t(e[n],n,e))return!0;return!1}function fr(e,t){var n=e.length,r=0;while(n--)r+=+t(e[n])||0;return r}function lr(e,t){return e===r?t:e}function cr(e,t,n,i){return e===r||!Mt.call(i,n)?t:e}function hr(e,t,n){var i=-1,s=ta(t),o=s.length;while(++i<o){var u=s[i],a=e[u],f=n(a,t[u],u,e,t);if((f===f?f!==a:a===a)||a===r&&!(u in e))e[u]=f}return e}function pr(e,t){return t==null?e:vr(t,ta(t),e)}function dr(e,n){var i=-1,s=e==null,o=!s&&es(e),u=o?e.length:0,a=n.length,f=t(a);while(++i<a){var l=n[i];o?f[i]=ts(l,u)?e[l]:r:f[i]=s?r:e[l]}return f}function vr(e,t,n){n||(n={});var r=-1,i=t.length;while(++r<i){var s=t[r];n[s]=e[s]}return n}function mr(e,t,n){var i=typeof e;return i==\"function\"?t===r?e:ui(e,t,n):e==null?qa:i==\"object\"?qr(e):t===r?Ja(e):Rr(e,t)}function gr(e,t,n,i,s,o,u){var a;n&&(a=s?n(e,i,s):n(e));if(a!==r)return a;if(!Nu(e))return e;var f=mu(e);if(f){a=Qi(e);if(!t)return Yn(e,a)}else{var l=Dt.call(e),c=l==L;if(!(l==M||l==x||c&&!s))return Et[l]?Yi(e,l,t):s?e:{};a=Gi(c?{}:e);if(!t)return pr(a,e)}o||(o=[]),u||(u=[]);var h=o.length;while(h--)if(o[h]==e)return u[h];return o.push(e),u.push(a),(f?Zn:_r)(e,function(r,i){a[i]=gr(r,t,n,i,e,o,u)}),a}function br(e,t,n){if(typeof e!=\"function\")throw new Ct(E);return hn(function(){e.apply(r,n)},t)}function wr(e,t){var n=e?e.length:0,r=[];if(!n)return r;var i=-1,s=Xi(),o=s==jt,u=o&&t.length>=y?mi(t):null,a=t.length;u&&(s=Kn,o=!1,t=u);e:while(++i<n){var f=e[i];if(o&&f===f){var l=a;while(l--)if(t[l]===f)continue e;r.push(f)}else s(t,f,0)<0&&r.push(f)}return r}function xr(e,t){var n=!0;return Er(e,function(e,r,i){return n=!!t(e,r,i),n}),n}function Tr(e,t,n,r){var i=r,s=i;return Er(e,function(e,o,u){var a=+t(e,o,u);if(n(a,i)||a===r&&a===s)i=a,s=e}),s}function Nr(e,t,n,i){var s=e.length;n=n==null?0:+n||0,n<0&&(n=-n>s?0:s+n),i=i===r||i>s?s:+i||0,i<0&&(i+=s),s=n>i?0:i>>>0,n>>>=0;while(n<s)e[n++]=t;return e}function Cr(e,t){var n=[];return Er(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function kr(e,t,n,r){var i;return n(e,function(e,n,s){if(t(e,n,s))return i=r?n:e,!1}),i}function Lr(e,t,n,r){r||(r=[]);var i=-1,s=e.length;while(++i<s){var o=e[i];Kt(o)&&es(o)&&(n||mu(o)||vu(o))?t?Lr(o,t,n,r):sr(r,o):n||(r[r.length]=o)}return r}function Mr(e,t){return Ar(e,t,na)}function _r(e,t){return Ar(e,t,ta)}function Dr(e,t){return Or(e,t,ta)}function Pr(e,t){var n=-1,r=t.length,i=-1,s=[];while(++n<r){var o=t[n];Tu(e[o])&&(s[++i]=o)}return s}function Hr(e,t,n){if(e==null)return;n!==r&&n in vs(e)&&(t=[n]);var i=0,s=t.length;while(e!=null&&i<s)e=e[t[i++]];return i&&i==s?e:r}function Br(e,t,n,r,i,s){return e===t?!0:e==null||t==null||!Nu(e)&&!Kt(t)?e!==e&&t!==t:jr(e,t,Br,n,r,i,s)}function jr(e,t,n,r,i,s,o){var u=mu(e),a=mu(t),f=T,l=T;u||(f=Dt.call(e),f==x?f=M:f!=M&&(u=Pu(e))),a||(l=Dt.call(t),l==x?l=M:l!=M&&(a=Pu(t)));var c=f==M,h=l==M,p=f==l;if(p&&!u&&!c)return qi(e,t,f);if(!i){var d=c&&Mt.call(e,\"__wrapped__\"),v=h&&Mt.call(t,\"__wrapped__\");if(d||v)return n(d?e.value():e,v?t.value():t,r,i,s,o)}if(!p)return!1;s||(s=[]),o||(o=[]);var m=s.length;while(m--)if(s[m]==e)return o[m]==t;s.push(e),o.push(t);var g=(u?Ii:Ri)(e,t,n,r,i,s,o);return s.pop(),o.pop(),g}function Fr(e,t,n){var i=t.length,s=i,o=!n;if(e==null)return!s;e=vs(e);while(i--){var u=t[i];if(o&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}while(++i<s){u=t[i];var a=u[0],f=e[a],l=u[1];if(o&&u[2]){if(f===r&&!(a in e))return!1}else{var c=n?n(f,l,a):r;if(c===r?!Br(l,f,n,!0):!c)return!1}}return!0}function Ir(e,n){var r=-1,i=es(e)?t(e.length):[];return Er(e,function(e,t,s){i[++r]=n(e,t,s)}),i}function qr(e){var t=$i(e);if(t.length==1&&t[0][2]){var n=t[0][0],i=t[0][1];return function(e){return e==null?!1:e[n]===i&&(i!==r||n in vs(e))}}return function(e){return Fr(e,t)}}function Rr(e,t){var n=mu(e),i=rs(e)&&os(t),s=e+\"\";return e=ms(e),function(o){if(o==null)return!1;var u=s;o=vs(o);if((n||!i)&&!(u in o)){o=e.length==1?o:Hr(o,Qr(e,0,-1));if(o==null)return!1;u=Ps(e),o=vs(o)}return o[u]===t?t!==r||u in o:Br(t,o[u],r,!0)}}function Ur(e,t,n,i,s){if(!Nu(e))return e;var o=es(t)&&(mu(t)||Pu(t)),u=o?r:ta(t);return Zn(u||t,function(a,f){u&&(f=a,a=t[f]);if(Kt(a))i||(i=[]),s||(s=[]),zr(e,t,f,Ur,n,i,s);else{var l=e[f],c=n?n(l,a,f,e,t):r,h=c===r;h&&(c=a),(c!==r||o&&!(f in e))&&(h||(c===c?c!==l:l===l))&&(e[f]=c)}}),e}function zr(e,t,n,i,s,o,u){var a=o.length,f=t[n];while(a--)if(o[a]==f){e[n]=u[a];return}var l=e[n],c=s?s(l,f,n,e,t):r,h=c===r;h&&(c=f,es(f)&&(mu(f)||Pu(f))?c=mu(l)?l:es(l)?Yn(l):[]:Mu(f)||vu(f)?c=vu(l)?Iu(l):Mu(l)?l:{}:h=!1),o.push(f),u.push(c);if(h)e[n]=i(c,f,s,o,u);else if(c===c?c!==l:l===l)e[n]=c}function Wr(e){return function(t){return t==null?r:t[e]}}function Xr(e){var t=e+\"\";return e=ms(e),function(n){return Hr(n,e,t)}}function Vr(e,t){var n=e?t.length:0;while(n--){var r=t[n];if(r!=i&&ts(r)){var i=r;pn.call(e,r,1)}}return e}function $r(e,t){return e+yn(Cn()*(t-e+1))}function Jr(e,t,n,r,i){return i(e,function(e,i,s){n=r?(r=!1,e):t(n,e,i,s)}),n}function Qr(e,n,i){var s=-1,o=e.length;n=n==null?0:+n||0,n<0&&(n=-n>o?0:o+n),i=i===r||i>o?o:+i||0,i<0&&(i+=o),o=n>i?0:i-n>>>0,n>>>=0;var u=t(o);while(++s<o)u[s]=e[s+n];return u}function Gr(e,t){var n;return Er(e,function(e,r,i){return n=t(e,r,i),!n}),!!n}function Yr(e,t){var n=e.length;e.sort(t);while(n--)e[n]=e[n].value;return e}function Zr(e,t,n){var r=Ui(),i=-1;t=ir(t,function(e){return r(e)});var s=Ir(e,function(e){var n=ir(t,function(t){return t(e)});return{criteria:n,index:++i,value:e}});return Yr(s,function(e,t){return zt(e,t,n)})}function ei(e,t){var n=0;return Er(e,function(e,r,i){n+=+t(e,r,i)||0}),n}function ti(e,t){var n=-1,r=Xi(),i=e.length,s=r==jt,o=s&&i>=y,u=o?mi():null,a=[];u?(r=Kn,s=!1):(o=!1,u=t?[]:a);e:while(++n<i){var f=e[n],l=t?t(f,n,e):f;if(s&&f===f){var c=u.length;while(c--)if(u[c]===l)continue e;t&&u.push(l),a.push(f)}else r(u,l,0)<0&&((t||o)&&u.push(l),a.push(f))}return a}function ni(e,n){var r=-1,i=n.length,s=t(i);while(++r<i)s[r]=e[n[r]];return s}function ri(e,t,n,r){var i=e.length,s=r?i:-1;while((r?s--:++s<i)&&t(e[s],s,e));return n?Qr(e,r?0:s,r?s+1:i):Qr(e,r?s+1:0,r?i:s)}function ii(e,t){var n=e;n instanceof In&&(n=n.value());var r=-1,i=t.length;while(++r<i){var s=t[r];n=s.func.apply(s.thisArg,sr([n],s.args))}return n}function si(e,t,n){var r=0,i=e?e.length:r;if(typeof t==\"number\"&&t===t&&i<=Mn){while(r<i){var s=r+i>>>1,o=e[s];(n?o<=t:o<t)&&o!==null?r=s+1:i=s}return i}return oi(e,t,qa,n)}function oi(e,t,n,i){t=n(t);var s=0,o=e?e.length:0,u=t!==t,a=t===null,f=t===r;while(s<o){var l=yn((s+o)/2),c=n(e[l]),h=c!==r,p=c===c;if(u)var d=p||i;else a?d=p&&h&&(i||c!=null):f?d=p&&(i||h):c==null?d=!1:d=i?c<=t:c<t;d?s=l+1:o=l}return xn(o,On)}function ui(e,t,n){if(typeof e!=\"function\")return qa;if(t===r)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,i){return e.call(t,n,r,i)};case 4:return function(n,r,i,s){return e.call(t,n,r,i,s)};case 5:return function(n,r,i,s,o){return e.call(t,n,r,i,s,o)}}return function(){return e.apply(t,arguments)}}function ai(e){var t=new on(e.byteLength),n=new dn(t);return n.set(new dn(e)),t}function fi(e,n,r){var i=r.length,s=-1,o=Sn(e.length-i,0),u=-1,a=n.length,f=t(a+o);while(++u<a)f[u]=n[u];while(++s<i)f[r[s]]=e[s];while(o--)f[u++]=e[s++];return f}function li(e,n,r){var i=-1,s=r.length,o=-1,u=Sn(e.length-s,0),a=-1,f=n.length,l=t(u+f);while(++o<u)l[o]=e[o];var c=o;while(++a<f)l[c+a]=n[a];while(++i<s)l[c+r[i]]=e[o++];return l}function ci(e,t){return function(n,r,i){var s=t?t():{};r=Ui(r,i,3);if(mu(n)){var o=-1,u=n.length;while(++o<u){var a=n[o];e(s,a,r(a,o,n),n)}}else Er(n,function(t,n,i){e(s,t,r(t,n,i),i)});return s}}function hi(e){return uu(function(t,n){var i=-1,s=t==null?0:n.length,o=s>2?n[s-2]:r,u=s>2?n[2]:r,a=s>1?n[s-1]:r;typeof o==\"function\"?(o=ui(o,a,5),s-=2):(o=typeof a==\"function\"?a:r,s-=o?1:0),u&&ns(n[0],n[1],u)&&(o=s<3?r:o,s=1);while(++i<s){var f=n[i];f&&e(t,f,o)}return t})}function pi(e,t){return function(n,r){var i=n?Vi(n):0;if(!ss(i))return e(n,r);var s=t?i:-1,o=vs(n);while(t?s--:++s<i)if(r(o[s],s,o)===!1)break;return n}}function di(e){return function(t,n,r){var i=vs(t),s=r(t),o=s.length,u=e?o:-1;while(e?u--:++u<o){var a=s[u];if(n(i[a],a,i)===!1)break}return t}}function vi(e,t){function r(){var i=this&&this!==Pt&&this instanceof r?n:e;return i.apply(t,arguments)}var n=yi(e);return r}function mi(e){return gn&&cn?new Jn(e):null}function gi(e){return function(t){var n=-1,r=Ba(ga(t)),i=r.length,s=\"\";while(++n<i)s=e(s,r[n],n);return s}}function yi(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=yr(e.prototype),r=e.apply(n,t);return Nu(r)?r:n}}function bi(e){function t(n,i,s){s&&ns(n,i,s)&&(i=r);var o=Fi(n,e,r,r,r,r,r,i);return o.placeholder=t.placeholder,o}return t}function wi(e,t){return uu(function(n){var i=n[0];return i==null?i:(n.push(t),e.apply(r,n))})}function Ei(e,t){return function(n,i,s){s&&ns(n,i,s)&&(i=r),i=Ui(i,s,3);if(i.length==1){n=mu(n)?n:ds(n);var o=nr(n,i,e,t);if(!n.length||o!==t)return o}return Tr(n,i,e,t)}}function Si(e,t){return function(n,i,s){i=Ui(i,s,3);if(mu(n)){var o=Bt(n,i,t);return o>-1?n[o]:r}return kr(n,i,e)}}function xi(e){return function(t,n,r){return!t||!t.length?-1:(n=Ui(n,r,3),Bt(t,n,e))}}function Ti(e){return function(t,n,r){return n=Ui(n,r,3),kr(t,n,e,!0)}}function Ni(e){return function(){var n,i=arguments.length,s=e?i:-1,o=0,u=t(i);while(e?s--:++s<i){var f=u[o++]=arguments[s];if(typeof f!=\"function\")throw new Ct(E);!n&&jn.prototype.thru&&Wi(f)==\"wrapper\"&&(n=new jn([],!0))}s=n?-1:i;while(++s<i){f=u[s];var c=Wi(f),d=c==\"wrapper\"?zi(f):r;d&&is(d[0])&&d[1]==(h|a|l|p)&&!d[4].length&&d[9]==1?n=n[Wi(d[0])].apply(n,d[3]):n=f.length==1&&is(f)?n[c]():n.thru(f)}return function(){var e=arguments,t=e[0];if(n&&e.length==1&&mu(t)&&t.length>=y)return n.plant(t).value();var r=0,s=i?u[r].apply(this,e):t;while(++r<i)s=u[r].call(this,s);return s}}}function Ci(e,t){return function(n,i,s){return typeof i==\"function\"&&s===r&&mu(n)?e(n,i):t(n,ui(i,s,3))}}function ki(e){return function(t,n,i){if(typeof n!=\"function\"||i!==r)n=ui(n,i,3);return e(t,n,na)}}function Li(e){return function(t,n,i){if(typeof n!=\"function\"||i!==r)n=ui(n,i,3);return e(t,n)}}function Ai(e){return function(t,n,r){var i={};return n=Ui(n,r,3),_r(t,function(t,r,s){var o=n(t,r,s);r=e?o:r,t=e?t:o,i[r]=t}),i}}function Oi(e){return function(t,n,r){return t=It(t),(e?t:\"\")+Pi(t,n,r)+(e?\"\":t)}}function Mi(e){var t=uu(function(n,i){var s=Gt(i,t.placeholder);return Fi(n,e,r,i,s)});return t}function _i(e,t){return function(n,i,s,o){var u=arguments.length<3;return typeof i==\"function\"&&o===r&&mu(n)?e(n,i,s,u):Jr(n,Ui(i,o,4),s,u,t)}}function Di(e,n,i,p,d,v,m,g,y,b){function k(){var u=arguments.length,a=u,f=t(u);while(a--)f[a]=arguments[a];p&&(f=fi(f,p,d)),v&&(f=li(f,v,m));if(x||N){var h=k.placeholder,L=Gt(f,h);u-=L.length;if(u<b){var A=g?Yn(g):r,O=Sn(b-u,0),M=x?L:r,_=x?r:L,D=x?f:r,P=x?r:f;n|=x?l:c,n&=~(x?c:l),T||(n&=~(s|o));var H=[e,n,i,D,M,P,_,A,y,O],B=Di.apply(r,H);return is(e)&&hs(B,H),B.placeholder=h,B}}var j=E?i:this,F=S?j[e]:e;return g&&(f=cs(f,g)),w&&y<f.length&&(f.length=y),this&&this!==Pt&&this instanceof k&&(F=C||yi(e)),F.apply(j,f)}var w=n&h,E=n&s,S=n&o,x=n&a,T=n&u,N=n&f,C=S?r:yi(e);return k}function Pi(e,t,n){var r=e.length;t=+t;if(r>=t||!wn(t))return\"\";var i=t-r;return n=n==null?\" \":n+\"\",Ca(n,mn(i/n.length)).slice(0,i)}function Hi(e,n,r,i){function a(){var n=-1,s=arguments.length,f=-1,l=i.length,c=t(l+s);while(++f<l)c[f]=i[f];while(s--)c[f++]=arguments[++n];var h=this&&this!==Pt&&this instanceof a?u:e;return h.apply(o?r:this,c)}var o=n&s,u=yi(e);return a}function Bi(e){var t=H[e];return function(e,n){return n=n===r?0:+n||0,n?(n=fn(10,n),t(e*n)/n):t(e)}}function ji(e){return function(t,n,r,i){var s=Ui(r);return r==null&&s===mr?si(t,n,e):oi(t,n,s(r,i,1),e)}}function Fi(e,t,n,i,u,a,f,h){var p=t&o;if(!p&&typeof e!=\"function\")throw new Ct(E);var d=i?i.length:0;d||(t&=~(l|c),i=u=r),d-=u?u.length:0;if(t&c){var v=i,m=u;i=u=r}var g=p?r:zi(e),y=[e,t,n,i,u,v,m,a,f,h];g&&(us(y,g),t=y[1],h=y[9]),y[9]=h==null?p?0:e.length:Sn(h-d,0)||0;if(t==s)var b=vi(y[0],y[2]);else t!=l&&t!=(s|l)||!!y[4].length?b=Di.apply(r,y):b=Hi.apply(r,y);var w=g?Kr:hs;return w(b,y)}function Ii(e,t,n,i,s,o,u){var a=-1,f=e.length,l=t.length;if(f!=l&&!(s&&l>f))return!1;while(++a<f){var c=e[a],h=t[a],p=i?i(s?h:c,s?c:h,a):r;if(p!==r){if(p)continue;return!1}if(s){if(!ar(t,function(e){return c===e||n(c,e,i,s,o,u)}))return!1}else if(c!==h&&!n(c,h,i,s,o,u))return!1}return!0}function qi(e,t,n){switch(n){case N:case C:return+e==+t;case k:return e.name==t.name&&e.message==t.message;case O:return e!=+e?t!=+t:e==+t;case _:case P:return e==t+\"\"}return!1}function Ri(e,t,n,i,s,o,u){var a=ta(e),f=a.length,l=ta(t),c=l.length;if(f!=c&&!s)return!1;var h=f;while(h--){var p=a[h];if(!(s?p in t:Mt.call(t,p)))return!1}var d=s;while(++h<f){p=a[h];var v=e[p],m=t[p],g=i?i(s?m:v,s?v:m,p):r;if(g===r?!n(v,m,i,s,o,u):!g)return!1;d||(d=p==\"constructor\")}if(!d){var y=e.constructor,b=t.constructor;if(y!=b&&\"constructor\"in e&&\"constructor\"in t&&!(typeof y==\"function\"&&y instanceof y&&typeof b==\"function\"&&b instanceof b))return!1}return!0}function Ui(e,t,n){var r=Hn.callback||Fa;return r=r===Fa?mr:r,n?r(e,t,n):r}function Wi(e){var t=e.name,n=Pn[t],r=n?n.length:0;while(r--){var i=n[r],s=i.func;if(s==null||s==e)return i.name}return t}function Xi(e,t,n){var r=Hn.indexOf||Ms;return r=r===Ms?jt:r,e?r(e,t,n):r}function $i(e){var t=oa(e),n=t.length;while(n--)t[n][2]=os(t[n][1]);return t}function Ji(e,t){var n=e==null?r:e[t];return Lu(n)?n:r}function Ki(e,t,n){var r=-1,i=n.length;while(++r<i){var s=n[r],o=s.size;switch(s.type){case\"drop\":e+=o;break;case\"dropRight\":t-=o;break;case\"take\":t=xn(t,e+o);break;case\"takeRight\":e=Sn(e,t-o)}}return{start:e,end:t}}function Qi(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]==\"string\"&&Mt.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}function Gi(e){var t=e.constructor;return typeof t==\"function\"&&t instanceof t||(t=xt),new t}function Yi(e,t,n){var r=e.constructor;switch(t){case B:return ai(e);case N:case C:return new r(+e);case j:case F:case I:case q:case R:case U:case z:case W:case X:var i=e.buffer;return new r(n?ai(i):i,e.byteOffset,e.length);case O:case P:return new r(e);case _:var s=new r(e.source,lt.exec(e));s.lastIndex=e.lastIndex}return s}function Zi(e,t,n){e!=null&&!rs(t,e)&&(t=ms(t),e=t.length==1?e:Hr(e,Qr(t,0,-1)),t=Ps(t));var i=e==null?e:e[t];return i==null?r:i.apply(e,n)}function es(e){return e!=null&&ss(Vi(e))}function ts(e,t){return e=typeof e==\"number\"||pt.test(e)?+e:-1,t=t==null?_n:t,e>-1&&e%1==0&&e<t}function ns(e,t,n){if(!Nu(n))return!1;var r=typeof t;if(r==\"number\"?es(n)&&ts(t,n.length):r==\"string\"&&t in n){var i=n[t];return e===e?e===i:i!==i}return!1}function rs(e,t){var n=typeof e;if(n==\"string\"&&rt.test(e)||n==\"number\")return!0;if(mu(e))return!1;var r=!nt.test(e);return r||t!=null&&e in vs(t)}function is(e){var t=Wi(e);if(t in In.prototype){var n=Hn[t];if(e===n)return!0;var r=zi(n);return!!r&&e===r[0]}return!1}function ss(e){return typeof e==\"number\"&&e>-1&&e%1==0&&e<=_n}function os(e){return e===e&&!Nu(e)}function us(e,t){var n=e[1],r=t[1],i=n|r,o=i<h,f=r==h&&n==a||r==h&&n==p&&e[7].length<=t[8]||r==(h|p)&&n==a;if(!o&&!f)return e;r&s&&(e[2]=t[2],i|=n&s?0:u);var l=t[3];if(l){var c=e[3];e[3]=c?fi(c,l,t[4]):Yn(l),e[4]=c?Gt(e[3],S):Yn(t[4])}return l=t[5],l&&(c=e[5],e[5]=c?li(c,l,t[6]):Yn(l),e[6]=c?Gt(e[5],S):Yn(t[6])),l=t[7],l&&(e[7]=Yn(l)),r&h&&(e[8]=e[8]==null?t[8]:xn(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=i,e}function as(e,t){return e===r?t:qu(e,t,as)}function fs(e,t){e=vs(e);var n=-1,r=t.length,i={};while(++n<r){var s=t[n];s in e&&(i[s]=e[s])}return i}function ls(e,t){var n={};return Mr(e,function(e,r,i){t(e,r,i)&&(n[r]=e)}),n}function cs(e,t){var n=e.length,i=xn(t.length,n),s=Yn(e);while(i--){var o=t[i];e[i]=ts(o,n)?s[o]:r}return e}function ps(e){var t=na(e),n=t.length,r=n&&e.length,i=!!r&&ss(r)&&(mu(e)||vu(e)),s=-1,o=[];while(++s<n){var u=t[s];(i&&ts(u,r)||Mt.call(e,u))&&o.push(u)}return o}function ds(e){return e==null?[]:es(e)?Nu(e)?e:xt(e):ca(e)}function vs(e){return Nu(e)?e:xt(e)}function ms(e){if(mu(e))return e;var t=[];return It(e).replace(it,function(e,n,r,i){t.push(r?i.replace(at,\"$1\"):n||e)}),t}function gs(e){return e instanceof In?e.clone():new jn(e.__wrapped__,e.__chain__,Yn(e.__actions__))}function ys(e,n,r){(r?ns(e,n,r):n==null)?n=1:n=Sn(yn(n)||1,1);var i=0,s=e?e.length:0,o=-1,u=t(mn(s/n));while(i<s)u[++o]=Qr(e,i,i+=n);return u}function bs(e){var t=-1,n=e?e.length:0,r=-1,i=[];while(++t<n){var s=e[t];s&&(i[++r]=s)}return i}function Es(e,t,n){var r=e?e.length:0;if(!r)return[];if(n?ns(e,t,n):t==null)t=1;return Qr(e,t<0?0:t)}function Ss(e,t,n){var r=e?e.length:0;if(!r)return[];if(n?ns(e,t,n):t==null)t=1;return t=r-(+t||0),Qr(e,0,t<0?0:t)}function xs(e,t,n){return e&&e.length?ri(e,Ui(t,n,3),!0,!0):[]}function Ts(e,t,n){return e&&e.length?ri(e,Ui(t,n,3),!0):[]}function Ns(e,t,n,r){var i=e?e.length:0;return i?(n&&typeof n!=\"number\"&&ns(e,t,n)&&(n=0,r=i),Nr(e,t,n,r)):[]}function Ls(e){return e?e[0]:r}function As(e,t,n){var r=e?e.length:0;return n&&ns(e,t,n)&&(t=!1),r?Lr(e,t):[]}function Os(e){var t=e?e.length:0;return t?Lr(e,!0):[]}function Ms(e,t,n){var r=e?e.length:0;if(!r)return-1;if(typeof n==\"number\")n=n<0?Sn(r+n,0):n;else if(n){var i=si(e,t);return i<r&&(t===t?t===e[i]:e[i]!==e[i])?i:-1}return jt(e,t,n||0)}function _s(e){return Ss(e,1)}function Ps(e){var t=e?e.length:0;return t?e[t-1]:r}function Hs(e,t,n){var r=e?e.length:0;if(!r)return-1;var i=r;if(typeof n==\"number\")i=(n<0?Sn(r+n,0):xn(n||0,r-1))+1;else if(n){i=si(e,t,!0)-1;var s=e[i];return(t===t?t===s:s!==s)?i:-1}if(t!==t)return Jt(e,i,!0);while(i--)if(e[i]===t)return i;return-1}function Bs(){var e=arguments,t=e[0];if(!t||!t.length)return t;var n=0,r=Xi(),i=e.length;while(++n<i){var s=0,o=e[n];while((s=r(t,o,s))>-1)pn.call(t,s,1)}return t}function Fs(e,t,n){var r=[];if(!e||!e.length)return r;var i=-1,s=[],o=e.length;t=Ui(t,n,3);while(++i<o){var u=e[i];t(u,i,e)&&(r.push(u),s.push(i))}return Vr(e,s),r}function Is(e){return Es(e,1)}function qs(e,t,n){var r=e?e.length:0;return r?(n&&typeof n!=\"number\"&&ns(e,t,n)&&(t=0,n=r),Qr(e,t,n)):[]}function zs(e,t,n){var r=e?e.length:0;if(!r)return[];if(n?ns(e,t,n):t==null)t=1;return Qr(e,0,t<0?0:t)}function Ws(e,t,n){var r=e?e.length:0;if(!r)return[];if(n?ns(e,t,n):t==null)t=1;return t=r-(+t||0),Qr(e,t<0?0:t)}function Xs(e,t,n){return e&&e.length?ri(e,Ui(t,n,3),!1,!0):[]}function Vs(e,t,n){return e&&e.length?ri(e,Ui(t,n,3)):[]}function Js(e,t,n,i){var s=e?e.length:0;if(!s)return[];t!=null&&typeof t!=\"boolean\"&&(i=n,n=ns(e,t,i)?r:t,t=!1);var o=Ui();if(n!=null||o!==mr)n=o(n,i,3);return t&&Xi()==jt?Yt(e,n):ti(e,n)}function Ks(e){if(!e||!e.length)return[];var n=-1,r=0;e=rr(e,function(e){if(es(e))return r=Sn(e.length,r),!0});var i=t(r);while(++n<r)i[n]=ir(e,Wr(n));return i}function Qs(e,t,n){var i=e?e.length:0;if(!i)return[];var s=Ks(e);return t==null?s:(t=ui(t,n,4),ir(s,function(e){return or(e,t,r,!0)}))}function Ys(){var e=-1,t=arguments.length;while(++e<t){var n=arguments[e];if(es(n))var r=r?sr(wr(r,n),wr(n,r)):n}return r?ti(r):[]}function eo(e,t){var n=-1,r=e?e.length:0,i={};r&&!t&&!mu(e[0])&&(t=[]);while(++n<r){var s=e[n];t?i[s]=t[n]:s&&(i[s[0]]=s[1])}return i}function no(e){var t=Hn(e);return t.__chain__=!0,t}function ro(e,t,n){return t.call(n,e),e}function io(e,t,n){return t.call(n,e)}function so(){return no(this)}function oo(){return new jn(this.value(),this.__chain__)}function ao(e){var t,n=this;while(n instanceof Bn){var r=gs(n);t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t}function fo(){var e=this.__wrapped__,t=function(e){return n&&n.__dir__<0?e:e.reverse()};if(e instanceof In){var n=e;return this.__actions__.length&&(n=new In(this)),n=n.reverse(),n.__actions__.push({func:io,args:[t],thisArg:r}),new jn(n,this.__chain__)}return this.thru(t)}function lo(){return this.value()+\"\"}function co(){return ii(this.__wrapped__,this.__actions__)}function vo(e,t,n){var i=mu(e)?tr:xr;n&&ns(e,t,n)&&(t=r);if(typeof t!=\"function\"||n!==r)t=Ui(t,n,3);return i(e,t)}function mo(e,t,n){var r=mu(e)?rr:Cr;return t=Ui(t,n,3),r(e,t)}function bo(e,t){return go(e,qr(t))}function xo(e,t,n,r){var i=e?Vi(e):0;return ss(i)||(e=ca(e),i=e.length),typeof n!=\"number\"||r&&ns(t,n,r)?n=0:n=n<0?Sn(i+n,0):n||0,typeof e==\"string\"||!mu(e)&&Du(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&Xi(e,t,n)>-1}function Co(e,t,n){var r=mu(e)?ir:Ir;return t=Ui(t,n,3),r(e,t)}function Lo(e,t){return Co(e,Ja(t))}function Mo(e,t,n){var r=mu(e)?rr:Cr;return t=Ui(t,n,3),r(e,function(e,n,r){return!t(e,n,r)})}function _o(e,t,n){if(n?ns(e,t,n):t==null){e=ds(e);var i=e.length;return i>0?e[$r(0,i-1)]:r}var s=-1,o=Fu(e),i=o.length,u=i-1;t=xn(t<0?0:+t||0,i);while(++s<t){var a=$r(s,u),f=o[a];o[a]=o[s],o[s]=f}return o.length=t,o}function Do(e){return _o(e,Ln)}function Po(e){var t=e?Vi(e):0;return ss(t)?t:ta(e).length}function Ho(e,t,n){var i=mu(e)?ar:Gr;n&&ns(e,t,n)&&(t=r);if(typeof t!=\"function\"||n!==r)t=Ui(t,n,3);return i(e,t)}function Bo(e,t,n){if(e==null)return[];n&&ns(e,t,n)&&(t=r);var i=-1;t=Ui(t,n,3);var s=Ir(e,function(e,n,r){return{criteria:t(e,n,r),index:++i,value:e}});return Yr(s,Ut)}function Fo(e,t,n,i){return e==null?[]:(i&&ns(t,n,i)&&(n=r),mu(t)||(t=t==null?[]:[t]),mu(n)||(n=n==null?[]:[n]),Zr(e,t,n))}function Io(e,t){return mo(e,qr(t))}function Ro(e,t){if(typeof t!=\"function\"){if(typeof e!=\"function\")throw new Ct(E);var n=e;e=t,t=n}return e=wn(e=+e)?e:0,function(){if(--e<1)return t.apply(this,arguments)}}function Uo(e,t,n){return n&&ns(e,t,n)&&(t=r),t=e&&t==null?e.length:Sn(+t||0,0),Fi(e,h,r,r,r,r,t)}function zo(e,t){var n;if(typeof t!=\"function\"){if(typeof e!=\"function\")throw new Ct(E);var i=e;e=t,t=i}return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=r),n}}function Ko(e,t,n){function v(){f&&un(f),s&&un(s),c=0,s=f=l=r}function m(t,n){n&&un(n),s=f=l=r,t&&(c=qo(),o=e.apply(a,i),!f&&!s&&(i=a=r))}function g(){var e=t-(qo()-u);e<=0||e>t?m(l,s):f=hn(g,e)}function y(){m(p,f)}function b(){i=arguments,u=qo(),a=this,l=p&&(f||!d);if(h===!1)var n=d&&!f;else{!s&&!d&&(c=u);var v=h-(u-c),m=v<=0||v>h;m?(s&&(s=un(s)),c=u,o=e.apply(a,i)):s||(s=hn(y,v))}return m&&f?f=un(f):!f&&t!==h&&(f=hn(g,t)),n&&(m=!0,o=e.apply(a,i)),m&&!f&&!s&&(i=a=r),o}var i,s,o,u,a,f,l,c=0,h=!1,p=!0;if(typeof e!=\"function\")throw new Ct(E);t=t<0?0:+t||0;if(n===!0){var d=!0;p=!1}else Nu(n)&&(d=!!n.leading,h=\"maxWait\"in n&&Sn(+n.maxWait||0,t),p=\"trailing\"in n?!!n.trailing:p);return b.cancel=v,b}function eu(e,t){if(typeof e!=\"function\"||t&&typeof t!=\"function\")throw new Ct(E);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],s=n.cache;if(s.has(i))return s.get(i);var o=e.apply(this,r);return n.cache=s.set(i,o),o};return n.cache=new eu.Cache,n}function nu(e){if(typeof e!=\"function\")throw new Ct(E);return function(){return!e.apply(this,arguments)}}function ru(e){return zo(2,e)}function uu(e,n){if(typeof e!=\"function\")throw new Ct(E);return n=Sn(n===r?e.length-1:+n||0,0),function(){var r=arguments,i=-1,s=Sn(r.length-n,0),o=t(s);while(++i<s)o[i]=r[n+i];switch(n){case 0:return e.call(this,o);case 1:return e.call(this,r[0],o);case 2:return e.call(this,r[0],r[1],o)}var u=t(n+1);i=-1;while(++i<n)u[i]=r[i];return u[n]=o,e.apply(this,u)}}function au(e){if(typeof e!=\"function\")throw new Ct(E);return function(t){return e.apply(this,t)}}function fu(e,t,n){var r=!0,i=!0;if(typeof e!=\"function\")throw new Ct(E);return n===!1?r=!1:Nu(n)&&(r=\"leading\"in n?!!n.leading:r,i=\"trailing\"in n?!!n.trailing:i),Ko(e,t,{leading:r,maxWait:+t,trailing:i})}function lu(e,t){return t=t==null?qa:t,Fi(t,l,r,[e],[])}function cu(e,t,n,r){return t&&typeof t!=\"boolean\"&&ns(e,t,n)?t=!1:typeof t==\"function\"&&(r=n,n=t,t=!1),typeof n==\"function\"?gr(e,t,ui(n,r,1)):gr(e,t)}function hu(e,t,n){return typeof t==\"function\"?gr(e,!0,ui(t,n,1)):gr(e,!0)}function pu(e,t){return e>t}function du(e,t){return e>=t}function vu(e){return Kt(e)&&es(e)&&Mt.call(e,\"callee\")&&!ln.call(e,\"callee\")}function gu(e){return e===!0||e===!1||Kt(e)&&Dt.call(e)==N}function yu(e){return Kt(e)&&Dt.call(e)==C}function bu(e){return!!e&&e.nodeType===1&&Kt(e)&&!Mu(e)}function wu(e){return e==null?!0:es(e)&&(mu(e)||Du(e)||vu(e)||Kt(e)&&Tu(e.splice))?!e.length:!ta(e).length}function Eu(e,t,n,i){n=typeof n==\"function\"?ui(n,i,3):r;var s=n?n(e,t):r;return s===r?Br(e,t,n):!!s}function Su(e){return Kt(e)&&typeof e.message==\"string\"&&Dt.call(e)==k}function xu(e){return typeof e==\"number\"&&wn(e)}function Tu(e){return Nu(e)&&Dt.call(e)==L}function Nu(e){var t=typeof e;return!!e&&(t==\"object\"||t==\"function\")}function Cu(e,t,n,i){return n=typeof n==\"function\"?ui(n,i,3):r,Fr(e,$i(t),n)}function ku(e){return Ou(e)&&e!=+e}function Lu(e){return e==null?!1:Tu(e)?sn.test(Ot.call(e)):Kt(e)&&ht.test(e)}function Au(e){return e===null}function Ou(e){return typeof e==\"number\"||Kt(e)&&Dt.call(e)==O}function Mu(e){var t;if(!Kt(e)||Dt.call(e)!=M||!!vu(e)||!Mt.call(e,\"constructor\")&&(t=e.constructor,typeof t==\"function\"&&!(t instanceof t)))return!1;var n;return Mr(e,function(e,t){n=t}),n===r||Mt.call(e,n)}function _u(e){return Nu(e)&&Dt.call(e)==_}function Du(e){return typeof e==\"string\"||Kt(e)&&Dt.call(e)==P}function Pu(e){return Kt(e)&&ss(e.length)&&!!wt[Dt.call(e)]}function Hu(e){return e===r}function Bu(e,t){return e<t}function ju(e,t){return e<=t}function Fu(e){var t=e?Vi(e):0;return ss(t)?t?Yn(e):[]:ca(e)}function Iu(e){return vr(e,na(e))}function Uu(e,t,n){var i=yr(e);return n&&ns(e,t,n)&&(t=r),t?pr(i,t):i}function Gu(e){return Pr(e,na(e))}function Yu(e,t,n){var i=e==null?r:Hr(e,ms(t),t+\"\");return i===r?n:i}function Zu(e,t){if(e==null)return!1;var n=Mt.call(e,t);if(!n&&!rs(t)){t=ms(t),e=t.length==1?e:Hr(e,Qr(t,0,-1));if(e==null)return!1;t=Ps(t),n=Mt.call(e,t)}return n||ss(e.length)&&ts(t,e.length)&&(mu(e)||vu(e))}function ea(e,t,n){n&&ns(e,t,n)&&(t=r);var i=-1,s=ta(e),o=s.length,u={};while(++i<o){var a=s[i],f=e[a];t?Mt.call(u,f)?u[f].push(a):u[f]=[a]:u[f]=a}return u}function na(e){if(e==null)return[];Nu(e)||(e=xt(e));var n=e.length;n=n&&ss(n)&&(mu(e)||vu(e))&&n||0;var r=e.constructor,i=-1,s=typeof r==\"function\"&&r.prototype===e,o=t(n),u=n>0;while(++i<n)o[i]=i+\"\";for(var a in e)(!u||!ts(a,n))&&(a!=\"constructor\"||!s&&!!Mt.call(e,a))&&o.push(a);return o}function oa(e){e=vs(e);var n=-1,r=ta(e),i=r.length,s=t(i);while(++n<i){var o=r[n];s[n]=[o,e[o]]}return s}function aa(e,t,n){var i=e==null?r:e[t];return i===r&&(e!=null&&!rs(t,e)&&(t=ms(t),e=t.length==1?e:Hr(e,Qr(t,0,-1)),i=e==null?r:e[Ps(t)]),i=i===r?n:i),Tu(i)?i.call(e):i}function fa(e,t,n){if(e==null)return e;var r=t+\"\";t=e[r]!=null||rs(t,e)?[r]:ms(t);var i=-1,s=t.length,o=s-1,u=e;while(u!=null&&++i<s){var a=t[i];Nu(u)&&(i==o?u[a]=n:u[a]==null&&(u[a]=ts(t[i+1])?[]:{})),u=u[a]}return e}function la(e,t,n,i){var s=mu(e)||Pu(e);t=Ui(t,i,4);if(n==null)if(s||Nu(e)){var o=e.constructor;s?n=mu(e)?new o:[]:n=yr(Tu(o)?o.prototype:r)}else n={};return(s?Zn:_r)(e,function(e,r,i){return t(n,e,r,i)}),n}function ca(e){return ni(e,ta(e))}function ha(e){return ni(e,na(e))}function pa(e,t,n){return t=+t||0,n===r?(n=t,t=0):n=+n||0,e>=xn(t,n)&&e<Sn(t,n)}function da(e,t,n){n&&ns(e,t,n)&&(t=n=r);var i=e==null,s=t==null;n==null&&(s&&typeof e==\"boolean\"?(n=e,e=1):typeof t==\"boolean\"&&(n=t,s=!0)),i&&s&&(t=1,s=!1),e=+e||0,s?(t=e,e=0):t=+t||0;if(n||e%1||t%1){var o=Cn();return xn(e+o*(t-e+an(\"1e-\"+((o+\"\").length-1))),t)}return $r(e,t)}function ma(e){return e=It(e),e&&e.charAt(0).toUpperCase()+e.slice(1)}function ga(e){return e=It(e),e&&e.replace(dt,Wt).replace(ut,\"\")}function ya(e,t,n){e=It(e),t+=\"\";var i=e.length;return n=n===r?i:xn(n<0?0:+n||0,i),n-=t.length,n>=0&&e.indexOf(t,n)==n}function ba(e){return e=It(e),e&&Y.test(e)?e.replace(Q,Xt):e}function wa(e){return e=It(e),e&&ot.test(e)?e.replace(st,Vt):e||\"(?:)\"}function Sa(e,t,n){e=It(e),t=+t;var r=e.length;if(r>=t||!wn(t))return e;var i=(t-r)/2,s=yn(i),o=mn(i);return n=Pi(\"\",o,n),n.slice(0,s)+e+n}function Na(e,t,n){return(n?ns(e,t,n):t==null)?t=0:t&&(t=+t),e=Ma(e),Nn(e,t||(ct.test(e)?16:10))}function Ca(e,t){var n=\"\";e=It(e),t=+t;if(t<1||!e||!wn(t))return n;do t%2&&(n+=e),t=yn(t/2),e+=e;while(t);return n}function Aa(e,t,n){return e=It(e),n=n==null?0:xn(n<0?0:+n||0,e.length),e.lastIndexOf(t,n)==n}function Oa(e,t,n){var i=Hn.templateSettings;n&&ns(e,t,n)&&(t=n=r),e=It(e),t=hr(pr({},n||t),i,cr);var s=hr(pr({},t.imports),i.imports,cr),o=ta(s),u=ni(s,o),a,f,l=0,c=t.interpolate||vt,h=\"__p += '\",p=Tt((t.escape||vt).source+\"|\"+c.source+\"|\"+(c===tt?ft:vt).source+\"|\"+(t.evaluate||vt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(\"sourceURL\"in t?t.sourceURL:\"lodash.templateSources[\"+ ++bt+\"]\")+\"\\n\";e.replace(p,function(t,n,r,i,s,o){return r||(r=i),h+=e.slice(l,o).replace(mt,$t),n&&(a=!0,h+=\"' +\\n__e(\"+n+\") +\\n'\"),s&&(f=!0,h+=\"';\\n\"+s+\";\\n__p += '\"),r&&(h+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=o+t.length,t}),h+=\"';\\n\";var v=t.variable;v||(h=\"with (obj) {\\n\"+h+\"\\n}\\n\"),h=(f?h.replace(V,\"\"):h).replace($,\"$1\").replace(J,\"$1;\"),h=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(a?\", __e = _.escape\":\"\")+(f?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var m=ja(function(){return D(o,d+\"return \"+h).apply(r,u)});m.source=h;if(Su(m))throw m;return m}function Ma(e,t,n){var r=e;return e=It(e),e?(n?ns(r,t,n):t==null)?e.slice(Zt(e),en(e)+1):(t+=\"\",e.slice(qt(e,t),Rt(e,t)+1)):e}function _a(e,t,n){var r=e;return e=It(e),e?(n?ns(r,t,n):t==null)?e.slice(Zt(e)):e.slice(qt(e,t+\"\")):e}function Da(e,t,n){var r=e;return e=It(e),e?(n?ns(r,t,n):t==null)?e.slice(0,en(e)+1):e.slice(0,Rt(e,t+\"\")+1):e}function Pa(e,t,n){n&&ns(e,t,n)&&(t=r);var i=d,s=v;if(t!=null)if(Nu(t)){var o=\"separator\"in t?t.separator:o;i=\"length\"in t?+t.length||0:i,s=\"omission\"in t?It(t.omission):s}else i=+t||0;e=It(e);if(i>=e.length)return e;var u=i-s.length;if(u<1)return s;var a=e.slice(0,u);if(o==null)return a+s;if(_u(o)){if(e.slice(u).search(o)){var f,l,c=e.slice(0,u);o.global||(o=Tt(o.source,(lt.exec(o)||\"\")+\"g\")),o.lastIndex=0;while(f=o.exec(c))l=f.index;a=a.slice(0,l==null?u:l)}}else if(e.indexOf(o,u)!=u){var h=a.lastIndexOf(o);h>-1&&(a=a.slice(0,h))}return a+s}function Ha(e){return e=It(e),e&&G.test(e)?e.replace(K,tn):e}function Ba(e,t,n){return n&&ns(e,t,n)&&(t=r),e=It(e),e.match(t||gt)||[]}function Fa(e,t,n){return n&&ns(e,t,n)&&(t=r),Kt(e)?Ra(e):mr(e,t)}function Ia(e){return function(){return e}}function qa(e){return e}function Ra(e){return qr(gr(e,!0))}function Ua(e,t){return Rr(e,gr(t,!0))}function Xa(e,t,n){if(n==null){var i=Nu(t),s=i?ta(t):r,o=s&&s.length?Pr(t,s):r;if(o?!o.length:!i)o=!1,n=t,t=e,e=this}o||(o=Pr(t,ta(t)));var u=!0,a=-1,f=Tu(e),l=o.length;n===!1?u=!1:Nu(n)&&\"chain\"in n&&(u=n.chain);while(++a<l){var c=o[a],h=t[c];e[c]=h,f&&(e.prototype[c]=function(t){return function(){var n=this.__chain__;if(u||n){var r=e(this.__wrapped__),i=r.__actions__=Yn(this.__actions__);return i.push({func:t,args:arguments,thisArg:e}),r.__chain__=n,r}return t.apply(e,sr([this.value()],arguments))}}(h))}return e}function Va(){return Pt._=Qt,this}function $a(){}function Ja(e){return rs(e)?Wr(e):Xr(e)}function Ka(e){return function(t){return Hr(e,ms(t),t+\"\")}}function Qa(e,n,i){i&&ns(e,n,i)&&(n=i=r),e=+e||0,i=i==null?1:+i||0,n==null?(n=e,e=0):n=+n||0;var s=-1,o=Sn(mn((n-e)/(i||1)),0),u=t(o);while(++s<o)u[s]=e,e+=i;return u}function Ga(e,n,r){e=yn(e);if(e<1||!wn(e))return[];var i=-1,s=t(xn(e,An));n=ui(n,r,1);while(++i<e)i<An?s[i]=n(i):n(i);return s}function Ya(e){var t=++_t;return It(e)+t}function Za(e,t){return(+e||0)+(+t||0)}function of(e,t,n){return n&&ns(e,t,n)&&(t=r),t=Ui(t,n,3),t.length==1?fr(mu(e)?e:ds(e),t):ei(e,t)}e=e?rn.defaults(Pt.Object(),e,rn.pick(Pt,yt)):Pt;var t=e.Array,n=e.Date,A=e.Error,D=e.Function,H=e.Math,St=e.Number,xt=e.Object,Tt=e.RegExp,Nt=e.String,Ct=e.TypeError,kt=t.prototype,Lt=xt.prototype,At=Nt.prototype,Ot=D.prototype.toString,Mt=Lt.hasOwnProperty,_t=0,Dt=Lt.toString,Qt=Pt._,sn=Tt(\"^\"+Ot.call(Mt).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),on=e.ArrayBuffer,un=e.clearTimeout,an=e.parseFloat,fn=H.pow,ln=Lt.propertyIsEnumerable,cn=Ji(e,\"Set\"),hn=e.setTimeout,pn=kt.splice,dn=e.Uint8Array,vn=Ji(e,\"WeakMap\"),mn=H.ceil,gn=Ji(xt,\"create\"),yn=H.floor,bn=Ji(t,\"isArray\"),wn=e.isFinite,En=Ji(xt,\"keys\"),Sn=H.max,xn=H.min,Tn=Ji(n,\"now\"),Nn=e.parseInt,Cn=H.random,kn=St.NEGATIVE_INFINITY,Ln=St.POSITIVE_INFINITY,An=4294967295,On=An-1,Mn=An>>>1,_n=9007199254740991,Dn=vn&&new vn,Pn={},Fn=Hn.support={};Hn.templateSettings={escape:Z,evaluate:et,interpolate:tt,variable:\"\",imports:{_:Hn}};var yr=function(){function e(){}return function(t){if(Nu(t)){e.prototype=t;var n=new e;e.prototype=r}return n||{}}}(),Er=pi(_r),Sr=pi(Dr,!0),Ar=di(),Or=di(!0),Kr=Dn?function(e,t){return Dn.set(e,t),e}:qa,zi=Dn?function(e){return Dn.get(e)}:$a,Vi=Wr(\"length\"),hs=function(){var e=0,t=0;return function(n,r){var i=qo(),s=g-(i-t);t=i;if(s>0){if(++e>=m)return n}else e=0;return Kr(n,r)}}(),ws=uu(function(e,t){return Kt(e)&&es(e)?wr(e,Lr(t,!1,!0)):[]}),Cs=xi(),ks=xi(!0),Ds=uu(function(e){var n=e.length,r=n,i=t(c),s=Xi(),o=s==jt,u=[];while(r--){var a=e[r]=es(a=e[r])?a:[];i[r]=o&&a.length>=120?mi(r&&a):null}var f=e[0],l=-1,c=f?f.length:0,h=i[0];e:while(++l<c){a=f[l];if((h?Kn(h,a):s(u,a,0))<0){var r=n;while(--r){var p=i[r];if((p?Kn(p,a):s(e[r],a,0))<0)continue e}h&&h.push(a),u.push(a)}}return u}),js=uu(function(e,t){t=Lr(t);var n=dr(e,t);return Vr(e,t.sort(Ht)),n}),Rs=ji(),Us=ji(!0),$s=uu(function(e){return ti(Lr(e,!1,!0))}),Gs=uu(function(e,t){return es(e)?wr(e,t):[]}),Zs=uu(Ks),to=uu(function(e){var t=e.length,n=t>2?e[t-2]:r,i=t>1?e[t-1]:r;return t>2&&typeof n==\"function\"?t-=2:(n=t>1&&typeof i==\"function\"?(--t,i):r,i=r),e.length=t,Qs(e,n,i)}),uo=uu(function(e){return e=Lr(e),this.thru(function(t){return Gn(mu(t)?t:[vs(t)],e)})}),ho=uu(function(e,t){return dr(e,Lr(t))}),po=ci(function(e,t,n){Mt.call(e,n)?++e[n]:e[n]=1}),go=Si(Er),yo=Si(Sr,!0),wo=Ci(Zn,Er),Eo=Ci(er,Sr),So=ci(function(e,t,n){Mt.call(e,n)?e[n].push(t):e[n]=[t]}),To=ci(function(e,t,n){e[n]=t}),No=uu(function(e,n,i){var s=-1,o=typeof n==\"function\",u=rs(n),a=es(e)?t(e.length):[];return Er(e,function(e){var t=o?n:u&&e!=null?e[n]:r;a[++s]=t?t.apply(e,i):Zi(e,n,i)}),a}),ko=ci(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Ao=_i(or,Er),Oo=_i(ur,Sr),jo=uu(function(e,t){if(e==null)return[];var n=t[2];return n&&ns(t[0],t[1],n)&&(t.length=1),Zr(e,Lr(t),[])}),qo=Tn||function(){return(new n).getTime()},Wo=uu(function(e,t,n){var r=s;if(n.length){var i=Gt(n,Wo.placeholder);r|=l}return Fi(e,r,t,n,i)}),Xo=uu(function(e,t){t=t.length?Lr(t):Gu(e);var n=-1,r=t.length;while(++n<r){var i=t[n];e[i]=Fi(e[i],s,e)}return e}),Vo=uu(function(e,t,n){var r=s|o;if(n.length){var i=Gt(n,Vo.placeholder);r|=l}return Fi(t,r,e,n,i)}),$o=bi(a),Jo=bi(f),Qo=uu(function(e,t){return br(e,1,t)}),Go=uu(function(e,t,n){return br(e,t,n)}),Yo=Ni(),Zo=Ni(!0),tu=uu(function(e,t){t=Lr(t);if(typeof e!=\"function\"||!tr(t,Ft))throw new Ct(E);var n=t.length;return uu(function(r){var i=xn(r.length,n);while(i--)r[i]=t[i](r[i]);return e.apply(this,r)})}),iu=Mi(l),su=Mi(c),ou=uu(function(e,t){return Fi(e,p,r,r,r,Lr(t))}),mu=bn||function(e){return Kt(e)&&ss(e.length)&&Dt.call(e)==T},qu=hi(Ur),Ru=hi(function(e,t,n){return n?hr(e,t,n):pr(e,t)}),zu=wi(Ru,lr),Wu=wi(qu,as),Xu=Ti(_r),Vu=Ti(Dr),$u=ki(Ar),Ju=ki(Or),Ku=Li(_r),Qu=Li(Dr),ta=En?function(e){var t=e==null?r:e.constructor;return typeof t==\"function\"&&t.prototype===e||typeof e!=\"function\"&&es(e)?ps(e):Nu(e)?En(e):[]}:ps,ra=Ai(!0),ia=Ai(),sa=uu(function(e,t){if(e==null)return{};if(typeof t[0]!=\"function\"){var t=ir(Lr(t),Nt);return fs(e,wr(na(e),t))}var n=ui(t[0],t[1],3);return ls(e,function(e,t,r){return!n(e,t,r)})}),ua=uu(function(e,t){return e==null?{}:typeof t[0]==\"function\"?ls(e,ui(t[0],t[1],3)):fs(e,Lr(t))}),va=gi(function(e,t,n){return t=t.toLowerCase(),e+(n?t.charAt(0).toUpperCase()+t.slice(1):t)}),Ea=gi(function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()}),xa=Oi(),Ta=Oi(!0),ka=gi(function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}),La=gi(function(e,t,n){return e+(n?\" \":\"\")+(t.charAt(0).toUpperCase()+t.slice(1))}),ja=uu(function(e,t){try{return e.apply(r,t)}catch(n){return Su(n)?n:new A(n)}}),za=uu(function(e,t){return function(n){return Zi(n,e,t)}}),Wa=uu(function(e,t){return function(n){return Zi(e,n,t)}}),ef=Bi(\"ceil\"),tf=Bi(\"floor\"),nf=Ei(pu,kn),rf=Ei(Bu,Ln),sf=Bi(\"round\");return Hn.prototype=Bn.prototype,jn.prototype=yr(Bn.prototype),jn.prototype.constructor=jn,In.prototype=yr(Bn.prototype),In.prototype.constructor=In,zn.prototype[\"delete\"]=Wn,zn.prototype.get=Xn,zn.prototype.has=Vn,zn.prototype.set=$n,Jn.prototype.push=Qn,eu.Cache=zn,Hn.after=Ro,Hn.ary=Uo,Hn.assign=Ru,Hn.at=ho,Hn.before=zo,Hn.bind=Wo,Hn.bindAll=Xo,Hn.bindKey=Vo,Hn.callback=Fa,Hn.chain=no,Hn.chunk=ys,Hn.compact=bs,Hn.constant=Ia,Hn.countBy=po,Hn.create=Uu,Hn.curry=$o,Hn.curryRight=Jo,Hn.debounce=Ko,Hn.defaults=zu,Hn.defaultsDeep=Wu,Hn.defer=Qo,Hn.delay=Go,Hn.difference=ws,Hn.drop=Es,Hn.dropRight=Ss,Hn.dropRightWhile=xs,Hn.dropWhile=Ts,Hn.fill=Ns,Hn.filter=mo,Hn.flatten=As,Hn.flattenDeep=Os,Hn.flow=Yo,Hn.flowRight=Zo,Hn.forEach=wo,Hn.forEachRight=Eo,Hn.forIn=$u,Hn.forInRight=Ju,Hn.forOwn=Ku,Hn.forOwnRight=Qu,Hn.functions=Gu,Hn.groupBy=So,Hn.indexBy=To,Hn.initial=_s,Hn.intersection=Ds,Hn.invert=ea,Hn.invoke=No,Hn.keys=ta,Hn.keysIn=na,Hn.map=Co,Hn.mapKeys=ra,Hn.mapValues=ia,Hn.matches=Ra,Hn.matchesProperty=Ua,Hn.memoize=eu,Hn.merge=qu,Hn.method=za,Hn.methodOf=Wa,Hn.mixin=Xa,Hn.modArgs=tu,Hn.negate=nu,Hn.omit=sa,Hn.once=ru,Hn.pairs=oa,Hn.partial=iu,Hn.partialRight=su,Hn.partition=ko,Hn.pick=ua,Hn.pluck=Lo,Hn.property=Ja,Hn.propertyOf=Ka,Hn.pull=Bs,Hn.pullAt=js,Hn.range=Qa,Hn.rearg=ou,Hn.reject=Mo,Hn.remove=Fs,Hn.rest=Is,Hn.restParam=uu,Hn.set=fa,Hn.shuffle=Do,Hn.slice=qs,Hn.sortBy=Bo,Hn.sortByAll=jo,Hn.sortByOrder=Fo,Hn.spread=au,Hn.take=zs,Hn.takeRight=Ws,Hn.takeRightWhile=Xs,Hn.takeWhile=Vs,Hn.tap=ro,Hn.throttle=fu,Hn.thru=io,Hn.times=Ga,Hn.toArray=Fu,Hn.toPlainObject=Iu,Hn.transform=la,Hn.union=$s,Hn.uniq=Js,Hn.unzip=Ks,Hn.unzipWith=Qs,Hn.values=ca,Hn.valuesIn=ha,Hn.where=Io,Hn.without=Gs,Hn.wrap=lu,Hn.xor=Ys,Hn.zip=Zs,Hn.zipObject=eo,Hn.zipWith=to,Hn.backflow=Zo,Hn.collect=Co,Hn.compose=Zo,Hn.each=wo,Hn.eachRight=Eo,Hn.extend=Ru,Hn.iteratee=Fa,Hn.methods=Gu,Hn.object=eo,Hn.select=mo,Hn.tail=Is,Hn.unique=Js,Xa(Hn,Hn),Hn.add=Za,Hn.attempt=ja,Hn.camelCase=va,Hn.capitalize=ma,Hn.ceil=ef,Hn.clone=cu,Hn.cloneDeep=hu,Hn.deburr=ga,Hn.endsWith=ya,Hn.escape=ba,Hn.escapeRegExp=wa,Hn.every=vo,Hn.find=go,Hn.findIndex=Cs,Hn.findKey=Xu,Hn.findLast=yo,Hn.findLastIndex=ks,Hn.findLastKey=Vu,Hn.findWhere=bo,Hn.first=Ls,Hn.floor=tf,Hn.get=Yu,Hn.gt=pu,Hn.gte=du,Hn.has=Zu,Hn.identity=qa,Hn.includes=xo,Hn.indexOf=Ms,Hn.inRange=pa,Hn.isArguments=vu,Hn.isArray=mu,Hn.isBoolean=gu,Hn.isDate=yu,Hn.isElement=bu,Hn.isEmpty=wu,Hn.isEqual=Eu,Hn.isError=Su,Hn.isFinite=xu,Hn.isFunction=Tu,Hn.isMatch=Cu,Hn.isNaN=ku,Hn.isNative=Lu,Hn.isNull=Au,Hn.isNumber=Ou,Hn.isObject=Nu,Hn.isPlainObject=Mu,Hn.isRegExp=_u,Hn.isString=Du,Hn.isTypedArray=Pu,Hn.isUndefined=Hu,Hn.kebabCase=Ea,Hn.last=Ps,Hn.lastIndexOf=Hs,Hn.lt=Bu,Hn.lte=ju,Hn.max=nf,Hn.min=rf,Hn.noConflict=Va,Hn.noop=$a,Hn.now=qo,Hn.pad=Sa,Hn.padLeft=xa,Hn.padRight=Ta,Hn.parseInt=Na,Hn.random=da,Hn.reduce=Ao,Hn.reduceRight=Oo,Hn.repeat=Ca,Hn.result=aa,Hn.round=sf,Hn.runInContext=nn,Hn.size=Po,Hn.snakeCase=ka,Hn.some=Ho,Hn.sortedIndex=Rs,Hn.sortedLastIndex=Us,Hn.startCase=La,Hn.startsWith=Aa,Hn.sum=of,Hn.template=Oa,Hn.trim=Ma,Hn.trimLeft=_a,Hn.trimRight=Da,Hn.trunc=Pa,Hn.unescape=Ha,Hn.uniqueId=Ya,Hn.words=Ba,Hn.all=vo,Hn.any=Ho,Hn.contains=xo,Hn.eq=Eu,Hn.detect=go,Hn.foldl=Ao,Hn.foldr=Oo,Hn.head=Ls,Hn.include=xo,Hn.inject=Ao,Xa(Hn,function(){var e={};return _r(Hn,function(t,n){Hn.prototype[n]||(e[n]=t)}),e}(),!1),Hn.sample=_o,Hn.prototype.sample=function(e){return!this.__chain__&&e==null?_o(this.value()):this.thru(function(t){return _o(t,e)})},Hn.VERSION=i,Zn([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(e){Hn[e].placeholder=Hn}),Zn([\"drop\",\"take\"],function(e,t){In.prototype[e]=function(n){var r=this.__filtered__;if(r&&!t)return new In(this);n=n==null?1:Sn(yn(n)||0,0);var i=this.clone();return r?i.__takeCount__=xn(i.__takeCount__,n):i.__views__.push({size:n,type:e+(i.__dir__<0?\"Right\":\"\")}),i},In.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}}),Zn([\"filter\",\"map\",\"takeWhile\"],function(e,t){var n=t+1,r=n!=w;In.prototype[e]=function(e,t){var i=this.clone();return i.__iteratees__.push({iteratee:Ui(e,t,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),Zn([\"first\",\"last\"],function(e,t){var n=\"take\"+(t?\"Right\":\"\");In.prototype[e]=function(){return this[n](1).value()[0]}}),Zn([\"initial\",\"rest\"],function(e,t){var n=\"drop\"+(t?\"\":\"Right\");In.prototype[e]=function(){return this.__filtered__?new In(this):this[n](1)}}),Zn([\"pluck\",\"where\"],function(e,t){var n=t?\"filter\":\"map\",r=t?qr:Ja;In.prototype[e]=function(e){return this[n](r(e))}}),In.prototype.compact=function(){return this.filter(qa)},In.prototype.reject=function(e,t){return e=Ui(e,t,1),this.filter(function(t){return!e(t)})},In.prototype.slice=function(e,t){e=e==null?0:+e||0;var n=this;return n.__filtered__&&(e>0||t<0)?new In(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==r&&(t=+t||0,n=t<0?n.dropRight(-t):n.take(t-e)),n)},In.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},In.prototype.toArray=function(){return this.take(Ln)},_r(In.prototype,function(e,t){var n=/^(?:filter|map|reject)|While$/.test(t),i=/^(?:first|last)$/.test(t),s=Hn[i?\"take\"+(t==\"last\"?\"Right\":\"\"):t];if(!s)return;Hn.prototype[t]=function(){var t=i?[1]:arguments,o=this.__chain__,u=this.__wrapped__,a=!!this.__actions__.length,f=u instanceof In,l=t[0],c=f||mu(u);c&&n&&typeof l==\"function\"&&l.length!=1&&(f=c=!1);var h=function(e){return i&&o?s(e,1)[0]:s.apply(r,sr([e],t))},p={func:io,args:[h],thisArg:r},d=f&&!a;if(i&&!o)return d?(u=u.clone(),u.__actions__.push(p),e.call(u)):s.call(r,this.value())[0];if(!i&&c){u=d?u:new In(this);var v=e.apply(u,t);return v.__actions__.push(p),new jn(v,o)}return this.thru(h)}}),Zn([\"join\",\"pop\",\"push\",\"replace\",\"shift\",\"sort\",\"splice\",\"split\",\"unshift\"],function(e){var t=(/^(?:replace|split)$/.test(e)?At:kt)[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",r=/^(?:join|pop|replace|shift)$/.test(e);Hn.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?t.apply(this.value(),e):this[n](function(n){return t.apply(n,e)})}}),_r(In.prototype,function(e,t){var n=Hn[t];if(n){var r=n.name,i=Pn[r]||(Pn[r]=[]);i.push({name:t,func:n})}}),Pn[Di(r,o).name]=[{name:\"wrapper\",func:r}],In.prototype.clone=qn,In.prototype.reverse=Rn,In.prototype.value=Un,Hn.prototype.chain=so,Hn.prototype.commit=oo,Hn.prototype.concat=uo,Hn.prototype.plant=ao,Hn.prototype.reverse=fo,Hn.prototype.toString=lo,Hn.prototype.run=Hn.prototype.toJSON=Hn.prototype.valueOf=Hn.prototype.value=co,Hn.prototype.collect=Hn.prototype.map,Hn.prototype.head=Hn.prototype.first,Hn.prototype.select=Hn.prototype.filter,Hn.prototype.tail=Hn.prototype.rest,Hn}var r,i=\"3.10.1\",s=1,o=2,u=4,a=8,f=16,l=32,c=64,h=128,p=256,d=30,v=\"...\",m=150,g=16,y=200,b=1,w=2,E=\"Expected a function\",S=\"__lodash_placeholder__\",x=\"[object Arguments]\",T=\"[object Array]\",N=\"[object Boolean]\",C=\"[object Date]\",k=\"[object Error]\",L=\"[object Function]\",A=\"[object Map]\",O=\"[object Number]\",M=\"[object Object]\",_=\"[object RegExp]\",D=\"[object Set]\",P=\"[object String]\",H=\"[object WeakMap]\",B=\"[object ArrayBuffer]\",j=\"[object Float32Array]\",F=\"[object Float64Array]\",I=\"[object Int8Array]\",q=\"[object Int16Array]\",R=\"[object Int32Array]\",U=\"[object Uint8Array]\",z=\"[object Uint8ClampedArray]\",W=\"[object Uint16Array]\",X=\"[object Uint32Array]\",V=/\\b__p \\+= '';/g,$=/\\b(__p \\+=) '' \\+/g,J=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,K=/&(?:amp|lt|gt|quot|#39|#96);/g,Q=/[&<>\"'`]/g,G=RegExp(K.source),Y=RegExp(Q.source),Z=/<%-([\\s\\S]+?)%>/g,et=/<%([\\s\\S]+?)%>/g,tt=/<%=([\\s\\S]+?)%>/g,nt=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,rt=/^\\w*$/,it=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g,st=/^[:!,]|[\\\\^$.*+?()[\\]{}|\\/]|(^[0-9a-fA-Fnrtuvx])|([\\n\\r\\u2028\\u2029])/g,ot=RegExp(st.source),ut=/[\\u0300-\\u036f\\ufe20-\\ufe23]/g,at=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,ct=/^0[xX]/,ht=/^\\[object .+?Constructor\\]$/,pt=/^\\d+$/,dt=/[\\xc0-\\xd6\\xd8-\\xde\\xdf-\\xf6\\xf8-\\xff]/g,vt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,gt=function(){var e=\"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",t=\"[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]+\";return RegExp(e+\"+(?=\"+e+t+\")|\"+e+\"?\"+t+\"|\"+e+\"+|[0-9]+\",\"g\")}(),yt=[\"Array\",\"ArrayBuffer\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Math\",\"Number\",\"Object\",\"RegExp\",\"Set\",\"String\",\"_\",\"clearTimeout\",\"isFinite\",\"parseFloat\",\"parseInt\",\"setTimeout\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\"],bt=-1,wt={};wt[j]=wt[F]=wt[I]=wt[q]=wt[R]=wt[U]=wt[z]=wt[W]=wt[X]=!0,wt[x]=wt[T]=wt[B]=wt[N]=wt[C]=wt[k]=wt[L]=wt[A]=wt[O]=wt[M]=wt[_]=wt[D]=wt[P]=wt[H]=!1;var Et={};Et[x]=Et[T]=Et[B]=Et[N]=Et[C]=Et[j]=Et[F]=Et[I]=Et[q]=Et[R]=Et[O]=Et[M]=Et[_]=Et[P]=Et[U]=Et[z]=Et[W]=Et[X]=!0,Et[k]=Et[L]=Et[A]=Et[D]=Et[H]=!1;var St={\"\\u00c0\":\"A\",\"\\u00c1\":\"A\",\"\\u00c2\":\"A\",\"\\u00c3\":\"A\",\"\\u00c4\":\"A\",\"\\u00c5\":\"A\",\"\\u00e0\":\"a\",\"\\u00e1\":\"a\",\"\\u00e2\":\"a\",\"\\u00e3\":\"a\",\"\\u00e4\":\"a\",\"\\u00e5\":\"a\",\"\\u00c7\":\"C\",\"\\u00e7\":\"c\",\"\\u00d0\":\"D\",\"\\u00f0\":\"d\",\"\\u00c8\":\"E\",\"\\u00c9\":\"E\",\"\\u00ca\":\"E\",\"\\u00cb\":\"E\",\"\\u00e8\":\"e\",\"\\u00e9\":\"e\",\"\\u00ea\":\"e\",\"\\u00eb\":\"e\",\"\\u00cc\":\"I\",\"\\u00cd\":\"I\",\"\\u00ce\":\"I\",\"\\u00cf\":\"I\",\"\\u00ec\":\"i\",\"\\u00ed\":\"i\",\"\\u00ee\":\"i\",\"\\u00ef\":\"i\",\"\\u00d1\":\"N\",\"\\u00f1\":\"n\",\"\\u00d2\":\"O\",\"\\u00d3\":\"O\",\"\\u00d4\":\"O\",\"\\u00d5\":\"O\",\"\\u00d6\":\"O\",\"\\u00d8\":\"O\",\"\\u00f2\":\"o\",\"\\u00f3\":\"o\",\"\\u00f4\":\"o\",\"\\u00f5\":\"o\",\"\\u00f6\":\"o\",\"\\u00f8\":\"o\",\"\\u00d9\":\"U\",\"\\u00da\":\"U\",\"\\u00db\":\"U\",\"\\u00dc\":\"U\",\"\\u00f9\":\"u\",\"\\u00fa\":\"u\",\"\\u00fb\":\"u\",\"\\u00fc\":\"u\",\"\\u00dd\":\"Y\",\"\\u00fd\":\"y\",\"\\u00ff\":\"y\",\"\\u00c6\":\"Ae\",\"\\u00e6\":\"ae\",\"\\u00de\":\"Th\",\"\\u00fe\":\"th\",\"\\u00df\":\"ss\"},xt={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"`\":\"&#96;\"},Tt={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\",\"&#96;\":\"`\"},Nt={\"function\":!0,object:!0},Ct={0:\"x30\",1:\"x31\",2:\"x32\",3:\"x33\",4:\"x34\",5:\"x35\",6:\"x36\",7:\"x37\",8:\"x38\",9:\"x39\",A:\"x41\",B:\"x42\",C:\"x43\",D:\"x44\",E:\"x45\",F:\"x46\",a:\"x61\",b:\"x62\",c:\"x63\",d:\"x64\",e:\"x65\",f:\"x66\",n:\"x6e\",r:\"x72\",t:\"x74\",u:\"x75\",v:\"x76\",x:\"x78\"},kt={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},Lt=Nt[typeof n]&&n&&!n.nodeType&&n,At=Nt[typeof t]&&t&&!t.nodeType&&t,Ot=Lt&&At&&typeof e==\"object\"&&e&&e.Object&&e,Mt=Nt[typeof self]&&self&&self.Object&&self,_t=Nt[typeof window]&&window&&window.Object&&window,Dt=At&&At.exports===Lt&&Lt,Pt=Ot||_t!==(this&&this.window)&&_t||Mt||this,rn=nn();typeof define==\"function\"&&typeof define.amd==\"object\"&&define.amd?(Pt._=rn,ace.define(function(){return rn})):Lt&&At?Dt?(At.exports=rn)._=rn:Lt._=rn:Pt._=rn}).call(this)}).call(this,typeof global!=\"undefined\"?global:typeof self!=\"undefined\"?self:typeof window!=\"undefined\"?window:{})},{}]},{},[\"/node_modules/xqlint/lib/xqlint.js\"])}),ace.define(\"ace/mode/xquery_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"./xquery/xqlint\"),o=s.XQLint,u=function(e){return function(t){var n=e,r=n[t],i={},s={};return r.functions.forEach(function(e){s[t+\"#\"+e.name+\"#\"+e.arity]={params:[]},e.parameters.forEach(function(n){s[t+\"#\"+e.name+\"#\"+e.arity].params.push(\"$\"+n.name)})}),r.variables.forEach(function(e){var n=e.name.substring(e.name.indexOf(\":\")+1);i[t+\"#\"+n]={type:\"VarDecl\",annotations:[]}}),{variables:i,functions:s}}},a=t.XQueryWorker=function(e){i.call(this,e),this.setTimeout(200);var t=this;this.sender.on(\"complete\",function(e){if(t.xqlint){var n={line:e.data.pos.row,col:e.data.pos.column},r=t.xqlint.getCompletions(n);t.sender.emit(\"complete\",r)}}),this.sender.on(\"setAvailableModuleNamespaces\",function(e){t.availableModuleNamespaces=e.data}),this.sender.on(\"setFileName\",function(e){t.fileName=e.data}),this.sender.on(\"setModuleResolver\",function(e){t.moduleResolver=u(e.data)})};r.inherits(a,i),function(){this.onUpdate=function(){this.sender.emit(\"start\");var e=this.doc.getValue(),t=s.createStaticContext();this.moduleResolver&&t.setModuleResolver(this.moduleResolver),this.availableModuleNamespaces&&(t.availableModuleNamespaces=this.availableModuleNamespaces);var n={styleCheck:this.styleCheck,staticContext:t,fileName:this.fileName};this.xqlint=new o(e,n),this.sender.emit(\"markers\",this.xqlint.getMarkers())}}.call(a.prototype)}),ace.define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ace.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n    return;\n\n\nvar define = function(module, deps, payload) {\n    if (typeof module !== \"string\") {\n        if (define.original)\n            define.original.apply(this, arguments);\n        else {\n            console.error(\"dropping module because define wasn\\'t a string.\");\n            console.trace();\n        }\n        return;\n    }\n    if (arguments.length == 2)\n        payload = deps;\n    if (!define.modules[module]) {\n        define.payloads[module] = payload;\n        define.modules[module] = null;\n    }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n    if (typeof module === \"string\") {\n        var payload = lookup(parentId, module);\n        if (payload != undefined) {\n            callback && callback();\n            return payload;\n        }\n    } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n        var params = [];\n        for (var i = 0, l = module.length; i < l; ++i) {\n            var dep = lookup(parentId, module[i]);\n            if (dep == undefined && require.original)\n                return;\n            params.push(dep);\n        }\n        return callback && callback.apply(null, params) || true;\n    }\n};\n\nvar require = function(module, callback) {\n    var packagedModule = _require(\"\", module, callback);\n    if (packagedModule == undefined && require.original)\n        return require.original.apply(this, arguments);\n    return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = base + \"/\" + moduleName;\n\n        while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n    moduleName = normalizeModule(parentId, moduleName);\n\n    var module = define.modules[moduleName];\n    if (!module) {\n        module = define.payloads[moduleName];\n        if (typeof module === 'function') {\n            var exports = {};\n            var mod = {\n                id: moduleName,\n                uri: '',\n                exports: exports,\n                packaged: true\n            };\n\n            var req = function(module, callback) {\n                return _require(moduleName, module, callback);\n            };\n\n            var returnValue = module(req, exports, mod);\n            exports = returnValue || mod.exports;\n            define.modules[moduleName] = exports;\n            delete define.payloads[moduleName];\n        }\n        module = define.modules[moduleName] = exports || module;\n    }\n    return module;\n};\n\nfunction exportAce(ns) {\n    var root = global;\n    if (ns) {\n        if (!global[ns])\n            global[ns] = {};\n        root = global[ns];\n    }\n\n    if (!root.define || !root.define.packaged) {\n        define.original = root.define;\n        root.define = define;\n        root.define.packaged = true;\n    }\n\n    if (!root.require || !root.require.packaged) {\n        require.original = root.require;\n        root.require = require;\n        root.require.packaged = true;\n    }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\n    var real = {\n            exec: RegExp.prototype.exec,\n            test: RegExp.prototype.test,\n            match: String.prototype.match,\n            replace: String.prototype.replace,\n            split: String.prototype.split\n        },\n        compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n        compliantLastIndexIncrement = function () {\n            var x = /^/g;\n            real.test.call(x, \"\");\n            return !x.lastIndex;\n        }();\n\n    if (compliantLastIndexIncrement && compliantExecNpcg)\n        return;\n    RegExp.prototype.exec = function (str) {\n        var match = real.exec.apply(this, arguments),\n            name, r2;\n        if ( typeof(str) == 'string' && match) {\n            if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n                r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n                real.replace.call(str.slice(match.index), r2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined)\n                            match[i] = undefined;\n                    }\n                });\n            }\n            if (this._xregexp && this._xregexp.captureNames) {\n                for (var i = 1; i < match.length; i++) {\n                    name = this._xregexp.captureNames[i - 1];\n                    if (name)\n                       match[name] = match[i];\n                }\n            }\n            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n        }\n        return match;\n    };\n    if (!compliantLastIndexIncrement) {\n        RegExp.prototype.test = function (str) {\n            var match = real.exec.call(this, str);\n            if (match && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n            return !!match;\n        };\n    }\n\n    function getNativeFlags (regex) {\n        return (regex.global     ? \"g\" : \"\") +\n               (regex.ignoreCase ? \"i\" : \"\") +\n               (regex.multiline  ? \"m\" : \"\") +\n               (regex.extended   ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n               (regex.sticky     ? \"y\" : \"\");\n    }\n\n    function indexOf (array, item, from) {\n        if (Array.prototype.indexOf) // Use the native array method if available\n            return array.indexOf(item, from);\n        for (var i = from || 0; i < array.length; i++) {\n            if (array[i] === item)\n                return i;\n        }\n        return -1;\n    }\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./regexp\");\nrequire(\"./es5-shim\");\nif (typeof Element != \"undefined\" && !Element.prototype.remove) {\n    Object.defineProperty(Element.prototype, \"remove\", {\n        enumerable: false,\n        writable: true,\n        configurable: true,\n        value: function() { this.parentNode && this.parentNode.removeChild(this); }\n    });\n}\n\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nexports.OS = {\n    LINUX: \"LINUX\",\n    MAC: \"MAC\",\n    WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n    if (exports.isMac) {\n        return exports.OS.MAC;\n    } else if (exports.isLinux) {\n        return exports.OS.LINUX;\n    } else {\n        return exports.OS.WINDOWS;\n    }\n};\nif (typeof navigator != \"object\")\n    return;\n\nvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\nvar ua = navigator.userAgent;\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n    (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\n    ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n    : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n    \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isIPad = ua.indexOf(\"iPad\") >= 0;\n\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\nexports.isMobile = exports.isIPad || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"./useragent\"); \nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.buildDom = function buildDom(arr, parent, refs) {\n    if (typeof arr == \"string\" && arr) {\n        var txt = document.createTextNode(arr);\n        if (parent)\n            parent.appendChild(txt);\n        return txt;\n    }\n    \n    if (!Array.isArray(arr))\n        return arr;\n    if (typeof arr[0] != \"string\" || !arr[0]) {\n        var els = [];\n        for (var i = 0; i < arr.length; i++) {\n            var ch = buildDom(arr[i], parent, refs);\n            ch && els.push(ch);\n        }\n        return els;\n    }\n    \n    var el = document.createElement(arr[0]);\n    var options = arr[1];\n    var childIndex = 1;\n    if (options && typeof options == \"object\" && !Array.isArray(options))\n        childIndex = 2;\n    for (var i = childIndex; i < arr.length; i++)\n        buildDom(arr[i], el, refs);\n    if (childIndex == 2) {\n        Object.keys(options).forEach(function(n) {\n            var val = options[n];\n            if (n === \"class\") {\n                el.className = Array.isArray(val) ? val.join(\" \") : val;\n            } else if (typeof val == \"function\" || n == \"value\") {\n                el[n] = val;\n            } else if (n === \"ref\") {\n                if (refs) refs[val] = el;\n            } else if (val != null) {\n                el.setAttribute(n, val);\n            }\n        });\n    }\n    if (parent)\n        parent.appendChild(el);\n    return el;\n};\n\nexports.getDocumentHead = function(doc) {\n    if (!doc)\n        doc = document;\n    return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n    return document.createElementNS ?\n           document.createElementNS(ns || XHTML_NS, tag) :\n           document.createElement(tag);\n};\n\nexports.removeChildren = function(element) {\n    element.innerHTML = \"\";\n};\n\nexports.createTextNode = function(textContent, element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createTextNode(textContent);\n};\n\nexports.createFragment = function(element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createDocumentFragment();\n};\n\nexports.hasCssClass = function(el, name) {\n    var classes = (el.className + \"\").split(/\\s+/g);\n    return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n    if (!exports.hasCssClass(el, name)) {\n        el.className += \" \" + name;\n    }\n};\nexports.removeCssClass = function(el, name) {\n    var classes = el.className.split(/\\s+/g);\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        classes.splice(index, 1);\n    }\n    el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n    var classes = el.className.split(/\\s+/g), add = true;\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        add = false;\n        classes.splice(index, 1);\n    }\n    if (add)\n        classes.push(name);\n\n    el.className = classes.join(\" \");\n    return add;\n};\nexports.setCssClass = function(node, className, include) {\n    if (include) {\n        exports.addCssClass(node, className);\n    } else {\n        exports.removeCssClass(node, className);\n    }\n};\n\nexports.hasCssString = function(id, doc) {\n    var index = 0, sheets;\n    doc = doc || document;\n    if ((sheets = doc.querySelectorAll(\"style\"))) {\n        while (index < sheets.length)\n            if (sheets[index++].id === id)\n                return true;\n    }\n};\n\nexports.importCssString = function importCssString(cssText, id, target) {\n    var container = target;\n    if (!target || !target.getRootNode) {\n        container = document;\n    } else {\n        container = target.getRootNode();\n        if (!container || container == target)\n            container = document;\n    }\n    \n    var doc = container.ownerDocument || container;\n    if (id && exports.hasCssString(id, container))\n        return null;\n    \n    if (id)\n        cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n    \n    var style = exports.createElement(\"style\");\n    style.appendChild(doc.createTextNode(cssText));\n    if (id)\n        style.id = id;\n\n    if (container == doc)\n        container = exports.getDocumentHead(doc);\n    container.insertBefore(style, container.firstChild);\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n    exports.buildDom([\"link\", {rel: \"stylesheet\", href: uri}], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function(document) {\n    var inner = exports.createElement(\"ace_inner\");\n    inner.style.width = \"100%\";\n    inner.style.minWidth = \"0px\";\n    inner.style.height = \"200px\";\n    inner.style.display = \"block\";\n\n    var outer = exports.createElement(\"ace_outer\");\n    var style = outer.style;\n\n    style.position = \"absolute\";\n    style.left = \"-10000px\";\n    style.overflow = \"hidden\";\n    style.width = \"200px\";\n    style.minWidth = \"0px\";\n    style.height = \"150px\";\n    style.display = \"block\";\n\n    outer.appendChild(inner);\n\n    var body = document.documentElement;\n    body.appendChild(outer);\n\n    var noScrollbar = inner.offsetWidth;\n\n    style.overflow = \"scroll\";\n    var withScrollbar = inner.offsetWidth;\n\n    if (noScrollbar == withScrollbar) {\n        withScrollbar = outer.clientWidth;\n    }\n\n    body.removeChild(outer);\n\n    return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n    exports.importCssString = function() {};\n}\n\nexports.computedStyle = function(element, style) {\n    return window.getComputedStyle(element, \"\") || {};\n};\n\nexports.setStyle = function(styles, property, value) {\n    if (styles[property] !== value) {\n        styles[property] = value;\n    }\n};\n\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n    ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n    : true;\n\nif (typeof document !== \"undefined\") {\n    var div = document.createElement(\"div\");\n    if (exports.HI_DPI && div.style.transform  !== undefined)\n        exports.HAS_CSS_TRANSFORMS = true;\n    if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n        exports.HAS_CSS_ANIMATION = true;\n    div = null;\n}\n\nif (exports.HAS_CSS_TRANSFORMS) {\n    exports.translate = function(element, tx, ty) {\n        element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) +\"px)\";\n    };\n} else {\n    exports.translate = function(element, tx, ty) {\n        element.style.top = Math.round(ty) + \"px\";\n        element.style.left = Math.round(tx) + \"px\";\n    };\n}\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./oop\");\nvar Keys = (function() {\n    var ret = {\n        MODIFIER_KEYS: {\n            16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\n        },\n\n        KEY_MODS: {\n            \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n            \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\n        },\n\n        FUNCTION_KEYS : {\n            8  : \"Backspace\",\n            9  : \"Tab\",\n            13 : \"Return\",\n            19 : \"Pause\",\n            27 : \"Esc\",\n            32 : \"Space\",\n            33 : \"PageUp\",\n            34 : \"PageDown\",\n            35 : \"End\",\n            36 : \"Home\",\n            37 : \"Left\",\n            38 : \"Up\",\n            39 : \"Right\",\n            40 : \"Down\",\n            44 : \"Print\",\n            45 : \"Insert\",\n            46 : \"Delete\",\n            96 : \"Numpad0\",\n            97 : \"Numpad1\",\n            98 : \"Numpad2\",\n            99 : \"Numpad3\",\n            100: \"Numpad4\",\n            101: \"Numpad5\",\n            102: \"Numpad6\",\n            103: \"Numpad7\",\n            104: \"Numpad8\",\n            105: \"Numpad9\",\n            '-13': \"NumpadEnter\",\n            112: \"F1\",\n            113: \"F2\",\n            114: \"F3\",\n            115: \"F4\",\n            116: \"F5\",\n            117: \"F6\",\n            118: \"F7\",\n            119: \"F8\",\n            120: \"F9\",\n            121: \"F10\",\n            122: \"F11\",\n            123: \"F12\",\n            144: \"Numlock\",\n            145: \"Scrolllock\"\n        },\n\n        PRINTABLE_KEYS: {\n           32: ' ',  48: '0',  49: '1',  50: '2',  51: '3',  52: '4', 53:  '5',\n           54: '6',  55: '7',  56: '8',  57: '9',  59: ';',  61: '=', 65:  'a',\n           66: 'b',  67: 'c',  68: 'd',  69: 'e',  70: 'f',  71: 'g', 72:  'h',\n           73: 'i',  74: 'j',  75: 'k',  76: 'l',  77: 'm',  78: 'n', 79:  'o',\n           80: 'p',  81: 'q',  82: 'r',  83: 's',  84: 't',  85: 'u', 86:  'v',\n           87: 'w',  88: 'x',  89: 'y',  90: 'z', 107: '+', 109: '-', 110: '.',\n          186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n          219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n        }\n    };\n    var name, i;\n    for (i in ret.FUNCTION_KEYS) {\n        name = ret.FUNCTION_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n    for (i in ret.PRINTABLE_KEYS) {\n        name = ret.PRINTABLE_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n    oop.mixin(ret, ret.MODIFIER_KEYS);\n    oop.mixin(ret, ret.PRINTABLE_KEYS);\n    oop.mixin(ret, ret.FUNCTION_KEYS);\n    ret.enter = ret[\"return\"];\n    ret.escape = ret.esc;\n    ret.del = ret[\"delete\"];\n    ret[173] = '-';\n    \n    (function() {\n        var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n        for (var i = Math.pow(2, mods.length); i--;) {            \n            ret.KEY_MODS[i] = mods.filter(function(x) {\n                return i & ret.KEY_MODS[x];\n            }).join(\"-\") + \"-\";\n        }\n    })();\n\n    ret.KEY_MODS[0] = \"\";\n    ret.KEY_MODS[-1] = \"input-\";\n\n    return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n    var keyString = Keys[keyCode];\n    if (typeof keyString != \"string\")\n        keyString = String.fromCharCode(keyCode);\n    return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nexports.addListener = function(elem, type, callback) {\n    if (elem.addEventListener) {\n        return elem.addEventListener(type, callback, false);\n    }\n    if (elem.attachEvent) {\n        var wrapper = function() {\n            callback.call(elem, window.event);\n        };\n        callback._wrapper = wrapper;\n        elem.attachEvent(\"on\" + type, wrapper);\n    }\n};\n\nexports.removeListener = function(elem, type, callback) {\n    if (elem.removeEventListener) {\n        return elem.removeEventListener(type, callback, false);\n    }\n    if (elem.detachEvent) {\n        elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n    }\n};\nexports.stopEvent = function(e) {\n    exports.stopPropagation(e);\n    exports.preventDefault(e);\n    return false;\n};\n\nexports.stopPropagation = function(e) {\n    if (e.stopPropagation)\n        e.stopPropagation();\n    else\n        e.cancelBubble = true;\n};\n\nexports.preventDefault = function(e) {\n    if (e.preventDefault)\n        e.preventDefault();\n    else\n        e.returnValue = false;\n};\nexports.getButton = function(e) {\n    if (e.type == \"dblclick\")\n        return 0;\n    if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n        return 2;\n    if (e.preventDefault) {\n        return e.button;\n    }\n    else {\n        return {1:0, 2:2, 4:1}[e.button];\n    }\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n    function onMouseUp(e) {\n        eventHandler && eventHandler(e);\n        releaseCaptureHandler && releaseCaptureHandler(e);\n\n        exports.removeListener(document, \"mousemove\", eventHandler, true);\n        exports.removeListener(document, \"mouseup\", onMouseUp, true);\n        exports.removeListener(document, \"dragstart\", onMouseUp, true);\n    }\n\n    exports.addListener(document, \"mousemove\", eventHandler, true);\n    exports.addListener(document, \"mouseup\", onMouseUp, true);\n    exports.addListener(document, \"dragstart\", onMouseUp, true);\n    \n    return onMouseUp;\n};\n\nexports.addTouchMoveListener = function (el, callback) {\n    var startx, starty;\n    exports.addListener(el, \"touchstart\", function (e) {\n        var touches = e.touches;\n        var touchObj = touches[0];\n        startx = touchObj.clientX;\n        starty = touchObj.clientY;\n    });\n    exports.addListener(el, \"touchmove\", function (e) {\n        var touches = e.touches;\n        if (touches.length > 1) return;\n        \n        var touchObj = touches[0];\n\n        e.wheelX = startx - touchObj.clientX;\n        e.wheelY = starty - touchObj.clientY;\n\n        startx = touchObj.clientX;\n        starty = touchObj.clientY;\n\n        callback(e);\n    });\n};\n\nexports.addMouseWheelListener = function(el, callback) {\n    if (\"onmousewheel\" in el) {\n        exports.addListener(el, \"mousewheel\", function(e) {\n            var factor = 8;\n            if (e.wheelDeltaX !== undefined) {\n                e.wheelX = -e.wheelDeltaX / factor;\n                e.wheelY = -e.wheelDeltaY / factor;\n            } else {\n                e.wheelX = 0;\n                e.wheelY = -e.wheelDelta / factor;\n            }\n            callback(e);\n        });\n    } else if (\"onwheel\" in el) {\n        exports.addListener(el, \"wheel\",  function(e) {\n            var factor = 0.35;\n            switch (e.deltaMode) {\n                case e.DOM_DELTA_PIXEL:\n                    e.wheelX = e.deltaX * factor || 0;\n                    e.wheelY = e.deltaY * factor || 0;\n                    break;\n                case e.DOM_DELTA_LINE:\n                case e.DOM_DELTA_PAGE:\n                    e.wheelX = (e.deltaX || 0) * 5;\n                    e.wheelY = (e.deltaY || 0) * 5;\n                    break;\n            }\n            \n            callback(e);\n        });\n    } else {\n        exports.addListener(el, \"DOMMouseScroll\", function(e) {\n            if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n                e.wheelX = (e.detail || 0) * 5;\n                e.wheelY = 0;\n            } else {\n                e.wheelX = 0;\n                e.wheelY = (e.detail || 0) * 5;\n            }\n            callback(e);\n        });\n    }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\n    var clicks = 0;\n    var startX, startY, timer; \n    var eventNames = {\n        2: \"dblclick\",\n        3: \"tripleclick\",\n        4: \"quadclick\"\n    };\n\n    function onMousedown(e) {\n        if (exports.getButton(e) !== 0) {\n            clicks = 0;\n        } else if (e.detail > 1) {\n            clicks++;\n            if (clicks > 4)\n                clicks = 1;\n        } else {\n            clicks = 1;\n        }\n        if (useragent.isIE) {\n            var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n            if (!timer || isNewClick)\n                clicks = 1;\n            if (timer)\n                clearTimeout(timer);\n            timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n            if (clicks == 1) {\n                startX = e.clientX;\n                startY = e.clientY;\n            }\n        }\n        \n        e._clicks = clicks;\n\n        eventHandler[callbackName](\"mousedown\", e);\n\n        if (clicks > 4)\n            clicks = 0;\n        else if (clicks > 1)\n            return eventHandler[callbackName](eventNames[clicks], e);\n    }\n    function onDblclick(e) {\n        clicks = 2;\n        if (timer)\n            clearTimeout(timer);\n        timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n        eventHandler[callbackName](\"mousedown\", e);\n        eventHandler[callbackName](eventNames[clicks], e);\n    }\n    if (!Array.isArray(elements))\n        elements = [elements];\n    elements.forEach(function(el) {\n        exports.addListener(el, \"mousedown\", onMousedown);\n        if (useragent.isOldIE)\n            exports.addListener(el, \"dblclick\", onDblclick);\n    });\n};\n\nvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\n    ? function(e) {\n        return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n    }\n    : function(e) {\n        return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n    };\n\nexports.getModifierString = function(e) {\n    return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n    var hashId = getModifierHash(e);\n\n    if (!useragent.isMac && pressedKeys) {\n        if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n            hashId |= 8;\n        if (pressedKeys.altGr) {\n            if ((3 & hashId) != 3)\n                pressedKeys.altGr = 0;\n            else\n                return;\n        }\n        if (keyCode === 18 || keyCode === 17) {\n            var location = \"location\" in e ? e.location : e.keyLocation;\n            if (keyCode === 17 && location === 1) {\n                if (pressedKeys[keyCode] == 1)\n                    ts = e.timeStamp;\n            } else if (keyCode === 18 && hashId === 3 && location === 2) {\n                var dt = e.timeStamp - ts;\n                if (dt < 50)\n                    pressedKeys.altGr = true;\n            }\n        }\n    }\n    \n    if (keyCode in keys.MODIFIER_KEYS) {\n        keyCode = -1;\n    }\n    if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\n        keyCode = -1;\n    }\n    \n    if (!hashId && keyCode === 13) {\n        var location = \"location\" in e ? e.location : e.keyLocation;\n        if (location === 3) {\n            callback(e, hashId, -keyCode);\n            if (e.defaultPrevented)\n                return;\n        }\n    }\n    \n    if (useragent.isChromeOS && hashId & 8) {\n        callback(e, hashId, keyCode);\n        if (e.defaultPrevented)\n            return;\n        else\n            hashId &= ~8;\n    }\n    if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n        return false;\n    }\n    \n    return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback) {\n    var addListener = exports.addListener;\n    if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n        var lastKeyDownKeyCode = null;\n        addListener(el, \"keydown\", function(e) {\n            lastKeyDownKeyCode = e.keyCode;\n        });\n        addListener(el, \"keypress\", function(e) {\n            return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n        });\n    } else {\n        var lastDefaultPrevented = null;\n\n        addListener(el, \"keydown\", function(e) {\n            pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n            var result = normalizeCommandKeys(callback, e, e.keyCode);\n            lastDefaultPrevented = e.defaultPrevented;\n            return result;\n        });\n\n        addListener(el, \"keypress\", function(e) {\n            if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n                exports.stopEvent(e);\n                lastDefaultPrevented = null;\n            }\n        });\n\n        addListener(el, \"keyup\", function(e) {\n            pressedKeys[e.keyCode] = null;\n        });\n\n        if (!pressedKeys) {\n            resetPressedKeys();\n            addListener(window, \"focus\", resetPressedKeys);\n        }\n    }\n};\nfunction resetPressedKeys() {\n    pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n    var postMessageId = 1;\n    exports.nextTick = function(callback, win) {\n        win = win || window;\n        var messageName = \"zero-timeout-message-\" + (postMessageId++);\n        \n        var listener = function(e) {\n            if (e.data == messageName) {\n                exports.stopPropagation(e);\n                exports.removeListener(win, \"message\", listener);\n                callback();\n            }\n        };\n        \n        exports.addListener(win, \"message\", listener);\n        win.postMessage(messageName, \"*\");\n    };\n}\n\nexports.$idleBlocked = false;\nexports.onIdle = function(cb, timeout) {\n    return setTimeout(function handler() {\n        if (!exports.$idleBlocked) {\n            cb();\n        } else {\n            setTimeout(handler, 100);\n        }\n    }, timeout);\n};\n\nexports.$idleBlockId = null;\nexports.blockIdle = function(delay) {\n    if (exports.$idleBlockId)\n        clearTimeout(exports.$idleBlockId);\n        \n    exports.$idleBlocked = true;\n    exports.$idleBlockId = setTimeout(function() {\n        exports.$idleBlocked = false;\n    }, delay || 100);\n};\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n    || window.mozRequestAnimationFrame\n    || window.webkitRequestAnimationFrame\n    || window.msRequestAnimationFrame\n    || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n    exports.nextFrame = exports.nextFrame.bind(window);\nelse\n    exports.nextFrame = function(callback) {\n        setTimeout(callback, 17);\n    };\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE =  useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\n\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\n\nvar TextInput = function(parentNode, host) {\n    var text = dom.createElement(\"textarea\");\n    text.className = \"ace_text-input\";\n\n    text.setAttribute(\"wrap\", \"off\");\n    text.setAttribute(\"autocorrect\", \"off\");\n    text.setAttribute(\"autocapitalize\", \"off\");\n    text.setAttribute(\"spellcheck\", false);\n\n    text.style.opacity = \"0\";\n    parentNode.insertBefore(text, parentNode.firstChild);\n\n    var copied = false;\n    var pasted = false;\n    var inComposition = false;\n    var sendingText = false;\n    var tempStyle = '';\n    var isSelectionEmpty = true;\n    var copyWithEmptySelection = false;\n    \n    if (!useragent.isMobile)\n        text.style.fontSize = \"1px\";\n\n    var commandMode = false;\n    var ignoreFocusEvents = false;\n    \n    var lastValue = \"\";\n    var lastSelectionStart = 0;\n    var lastSelectionEnd = 0;\n    try { var isFocused = document.activeElement === text; } catch(e) {}\n    \n    event.addListener(text, \"blur\", function(e) {\n        if (ignoreFocusEvents) return;\n        host.onBlur(e);\n        isFocused = false;\n    });\n    event.addListener(text, \"focus\", function(e) {\n        if (ignoreFocusEvents) return;\n        isFocused = true;\n        if (useragent.isEdge) {\n            try {\n                if (!document.hasFocus())\n                    return;\n            } catch(e) {}\n        }\n        host.onFocus(e);\n        if (useragent.isEdge)\n            setTimeout(resetSelection);\n        else\n            resetSelection();\n    });\n    this.$focusScroll = false;\n    this.focus = function() {\n        if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n            return text.focus({ preventScroll: true });\n\n        var top = text.style.top;\n        text.style.position = \"fixed\";\n        text.style.top = \"0px\";\n        try {\n            var isTransformed = text.getBoundingClientRect().top != 0;\n        } catch(e) {\n            return;\n        }\n        var ancestors = [];\n        if (isTransformed) {\n            var t = text.parentElement;\n            while (t && t.nodeType == 1) {\n                ancestors.push(t);\n                t.setAttribute(\"ace_nocontext\", true);\n                if (!t.parentElement && t.getRootNode)\n                    t = t.getRootNode().host;\n                else\n                    t = t.parentElement;\n            }\n        }\n        text.focus({ preventScroll: true });\n        if (isTransformed) {\n            ancestors.forEach(function(p) {\n                p.removeAttribute(\"ace_nocontext\");\n            });\n        }\n        setTimeout(function() {\n            text.style.position = \"\";\n            if (text.style.top == \"0px\")\n                text.style.top = top;\n        }, 0);\n    };\n    this.blur = function() {\n        text.blur();\n    };\n    this.isFocused = function() {\n        return isFocused;\n    };\n    \n    host.on(\"beforeEndOperation\", function() {\n        if (host.curOp && host.curOp.command.name == \"insertstring\")\n            return;\n        if (inComposition) {\n            lastValue = text.value = \"\";\n            onCompositionEnd();\n        }\n        resetSelection();\n    });\n    \n    var resetSelection = isIOS\n    ? function(value) {\n        if (!isFocused || (copied && !value)) return;\n        if (!value) \n            value = \"\";\n        var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n        if (newValue != text.value)\n            text.value = lastValue = newValue;\n        \n        var selectionStart = 4;\n        var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n\n        if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n            text.setSelectionRange(selectionStart, selectionEnd);\n        }\n        lastSelectionStart = selectionStart;\n        lastSelectionEnd = selectionEnd;\n    }\n    : function() {\n        if (inComposition || sendingText)\n            return;\n        if (!isFocused && !afterContextMenu)\n            return;\n        inComposition = true;\n        \n        var selection = host.selection;\n        var range = selection.getRange();\n        var row = selection.cursor.row;\n        var selectionStart = range.start.column;\n        var selectionEnd = range.end.column;\n        var line = host.session.getLine(row);\n\n        if (range.start.row != row) {\n            var prevLine = host.session.getLine(row - 1);\n            selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n            selectionEnd += prevLine.length + 1;\n            line = prevLine + \"\\n\" + line;\n        }\n        else if (range.end.row != row) {\n            var nextLine = host.session.getLine(row + 1);\n            selectionEnd = range.end.row > row  + 1 ? nextLine.length : selectionEnd;\n            selectionEnd += line.length + 1;\n            line = line + \"\\n\" + nextLine;\n        }\n\n        if (line.length > MAX_LINE_LENGTH) {\n            if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n                line = line.slice(0, MAX_LINE_LENGTH);\n            } else {\n                line = \"\\n\";\n                selectionStart = 0;\n                selectionEnd = 1;\n            }\n        }\n\n        var newValue = line + \"\\n\\n\";\n        if (newValue != lastValue) {\n            text.value = lastValue = newValue;\n            lastSelectionStart = lastSelectionEnd = newValue.length;\n        }\n        if (afterContextMenu) {\n            lastSelectionStart = text.selectionStart;\n            lastSelectionEnd = text.selectionEnd;\n        }\n        if (\n            lastSelectionEnd != selectionEnd \n            || lastSelectionStart != selectionStart \n            || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n        ) {\n            try {\n                text.setSelectionRange(selectionStart, selectionEnd);\n                lastSelectionStart = selectionStart;\n                lastSelectionEnd = selectionEnd;\n            } catch(e){}\n        }\n        inComposition = false;\n    };\n\n    if (isFocused)\n        host.onFocus();\n\n\n    var isAllSelected = function(text) {\n        return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n            && text.value === lastValue && lastValue\n            && text.selectionEnd !== lastSelectionEnd;\n    };\n\n    var onSelect = function(e) {\n        if (inComposition)\n            return;\n        if (copied) {\n            copied = false;\n        } else if (isAllSelected(text)) {\n            host.selectAll();\n            resetSelection();\n        }\n    };\n\n    var inputHandler = null;\n    this.setInputHandler = function(cb) {inputHandler = cb;};\n    this.getInputHandler = function() {return inputHandler;};\n    var afterContextMenu = false;\n    \n    var sendText = function(value, fromInput) {\n        if (afterContextMenu)\n            afterContextMenu = false;\n        if (pasted) {\n            resetSelection();\n            if (value)\n                host.onPaste(value);\n            pasted = false;\n            return \"\";\n        } else {\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n        \n            var extendLeft = lastSelectionStart;\n            var extendRight = lastValue.length - lastSelectionEnd;\n            \n            var inserted = value;\n            var restoreStart = value.length - selectionStart;\n            var restoreEnd = value.length - selectionEnd;\n        \n            var i = 0;\n            while (extendLeft > 0 && lastValue[i] == value[i]) {\n                i++;\n                extendLeft--;\n            }\n            inserted = inserted.slice(i);\n            i = 1;\n            while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1  && lastValue[lastValue.length - i] == value[value.length - i]) {\n                i++;\n                extendRight--;\n            }\n            restoreStart -= i-1;\n            restoreEnd -= i-1;\n            inserted = inserted.slice(0, inserted.length - i+1);\n            if (!fromInput && restoreStart == inserted.length && !extendLeft && !extendRight && !restoreEnd)\n                return \"\";\n            \n            sendingText = true;\n            if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n                host.onTextInput(inserted);\n            } else {\n                host.onTextInput(inserted, {\n                    extendLeft: extendLeft,\n                    extendRight: extendRight,\n                    restoreStart: restoreStart,\n                    restoreEnd: restoreEnd\n                });\n            }\n            sendingText = false;\n            \n            lastValue = value;\n            lastSelectionStart = selectionStart;\n            lastSelectionEnd = selectionEnd;\n            return inserted;\n        }\n    };\n    var onInput = function(e) {\n        if (inComposition)\n            return onCompositionUpdate();\n        var data = text.value;\n        var inserted = sendText(data, true);\n        if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted))\n            resetSelection();\n    };\n    \n    var handleClipboardData = function(e, data, forceIEMime) {\n        var clipboardData = e.clipboardData || window.clipboardData;\n        if (!clipboardData || BROKEN_SETDATA)\n            return;\n        var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n        try {\n            if (data) {\n                return clipboardData.setData(mime, data) !== false;\n            } else {\n                return clipboardData.getData(mime);\n            }\n        } catch(e) {\n            if (!forceIEMime)\n                return handleClipboardData(e, data, true);\n        }\n    };\n\n    var doCopy = function(e, isCut) {\n        var data = host.getCopyText();\n        if (!data)\n            return event.preventDefault(e);\n\n        if (handleClipboardData(e, data)) {\n            if (isIOS) {\n                resetSelection(data);\n                copied = data;\n                setTimeout(function () {\n                    copied = false;\n                }, 10);\n            }\n            isCut ? host.onCut() : host.onCopy();\n            event.preventDefault(e);\n        } else {\n            copied = true;\n            text.value = data;\n            text.select();\n            setTimeout(function(){\n                copied = false;\n                resetSelection();\n                isCut ? host.onCut() : host.onCopy();\n            });\n        }\n    };\n    \n    var onCut = function(e) {\n        doCopy(e, true);\n    };\n    \n    var onCopy = function(e) {\n        doCopy(e, false);\n    };\n    \n    var onPaste = function(e) {\n        var data = handleClipboardData(e);\n        if (typeof data == \"string\") {\n            if (data)\n                host.onPaste(data, e);\n            if (useragent.isIE)\n                setTimeout(resetSelection);\n            event.preventDefault(e);\n        }\n        else {\n            text.value = \"\";\n            pasted = true;\n        }\n    };\n\n    event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n    event.addListener(text, \"select\", onSelect);\n    event.addListener(text, \"input\", onInput);\n\n    event.addListener(text, \"cut\", onCut);\n    event.addListener(text, \"copy\", onCopy);\n    event.addListener(text, \"paste\", onPaste);\n    if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n        event.addListener(parentNode, \"keydown\", function(e) {\n            if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n                return;\n\n            switch (e.keyCode) {\n                case 67:\n                    onCopy(e);\n                    break;\n                case 86:\n                    onPaste(e);\n                    break;\n                case 88:\n                    onCut(e);\n                    break;\n            }\n        });\n    }\n    var onCompositionStart = function(e) {\n        if (inComposition || !host.onCompositionStart || host.$readOnly) \n            return;\n        \n        inComposition = {};\n\n        if (commandMode)\n            return;\n        \n        setTimeout(onCompositionUpdate, 0);\n        host.on(\"mousedown\", cancelComposition);\n        \n        var range = host.getSelectionRange();\n        range.end.row = range.start.row;\n        range.end.column = range.start.column;\n        inComposition.markerRange = range;\n        inComposition.selectionStart = lastSelectionStart;\n        host.onCompositionStart(inComposition);\n        \n        if (inComposition.useTextareaForIME) {\n            text.value = \"\";\n            lastValue = \"\";\n            lastSelectionStart = 0;\n            lastSelectionEnd = 0;\n        }\n        else {\n            if (text.msGetInputContext)\n                inComposition.context = text.msGetInputContext();\n            if (text.getInputContext)\n                inComposition.context = text.getInputContext();\n        }\n    };\n\n    var onCompositionUpdate = function() {\n        if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n            return;\n        if (commandMode)\n            return cancelComposition();\n        \n        if (inComposition.useTextareaForIME) {\n            host.onCompositionUpdate(text.value);\n        }\n        else {\n            var data = text.value;\n            sendText(data);\n            if (inComposition.markerRange) {\n                if (inComposition.context) {\n                    inComposition.markerRange.start.column = inComposition.selectionStart\n                        = inComposition.context.compositionStartOffset;\n                }\n                inComposition.markerRange.end.column = inComposition.markerRange.start.column\n                    + lastSelectionEnd - inComposition.selectionStart;\n            }\n        }\n    };\n\n    var onCompositionEnd = function(e) {\n        if (!host.onCompositionEnd || host.$readOnly) return;\n        inComposition = false;\n        host.onCompositionEnd();\n        host.off(\"mousedown\", cancelComposition);\n        if (e) onInput();\n    };\n    \n\n    function cancelComposition() {\n        ignoreFocusEvents = true;\n        text.blur();\n        text.focus();\n        ignoreFocusEvents = false;\n    }\n\n    var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n    \n    function onKeyup(e) {\n        if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n            if (!inComposition)\n                lastValue = text.value;\n            lastSelectionStart = lastSelectionEnd = -1;\n            resetSelection();\n        }\n        syncComposition();\n    }\n\n    event.addListener(text, \"compositionstart\", onCompositionStart);\n    event.addListener(text, \"compositionupdate\", onCompositionUpdate);\n    event.addListener(text, \"keyup\", onKeyup);\n    event.addListener(text, \"keydown\", syncComposition);\n    event.addListener(text, \"compositionend\", onCompositionEnd);\n\n    this.getElement = function() {\n        return text;\n    };\n    this.setCommandMode = function(value) {\n       commandMode = value;\n       text.readOnly = false;\n    };\n    \n    this.setReadOnly = function(readOnly) {\n        if (!commandMode)\n            text.readOnly = readOnly;\n    };\n\n    this.setCopyWithEmptySelection = function(value) {\n        copyWithEmptySelection = value;\n    };\n\n    this.onContextMenu = function(e) {\n        afterContextMenu = true;\n        resetSelection();\n        host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n        this.moveToMouse(e, true);\n    };\n    \n    this.moveToMouse = function(e, bringToFront) {\n        if (!tempStyle)\n            tempStyle = text.style.cssText;\n        text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n            + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n            + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n\n        var rect = host.container.getBoundingClientRect();\n        var style = dom.computedStyle(host.container);\n        var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n        var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n        var maxTop = rect.bottom - top - text.clientHeight -2;\n        var move = function(e) {\n            text.style.left = e.clientX - left - 2 + \"px\";\n            text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n        }; \n        move(e);\n\n        if (e.type != \"mousedown\")\n            return;\n\n        if (host.renderer.$keepTextAreaAtCursor)\n            host.renderer.$keepTextAreaAtCursor = null;\n\n        clearTimeout(closeTimeout);\n        if (useragent.isWin)\n            event.capture(host.container, move, onContextMenuClose);\n    };\n\n    this.onContextMenuClose = onContextMenuClose;\n    var closeTimeout;\n    function onContextMenuClose() {\n        clearTimeout(closeTimeout);\n        closeTimeout = setTimeout(function () {\n            if (tempStyle) {\n                text.style.cssText = tempStyle;\n                tempStyle = '';\n            }\n            if (host.renderer.$keepTextAreaAtCursor == null) {\n                host.renderer.$keepTextAreaAtCursor = true;\n                host.renderer.$moveTextAreaToCursor();\n            }\n        }, 0);\n    }\n\n    var onContextMenu = function(e) {\n        host.textInput.onContextMenu(e);\n        onContextMenuClose();\n    };\n    event.addListener(text, \"mouseup\", onContextMenu);\n    event.addListener(text, \"mousedown\", function(e) {\n        e.preventDefault();\n        onContextMenuClose();\n    });\n    event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n    event.addListener(text, \"contextmenu\", onContextMenu);\n    \n    if (isIOS)\n        addIosSelectionHandler(parentNode, host, text);\n\n    function addIosSelectionHandler(parentNode, host, text) {\n        var typingResetTimeout = null;\n        var typing = false;\n \n        text.addEventListener(\"keydown\", function (e) {\n            if (typingResetTimeout) clearTimeout(typingResetTimeout);\n            typing = true;\n        }, true);\n\n        text.addEventListener(\"keyup\", function (e) {\n            typingResetTimeout = setTimeout(function () {\n                typing = false;\n            }, 100);\n        }, true);\n        var detectArrowKeys = function(e) {\n            if (document.activeElement !== text) return;\n            if (typing || inComposition) return;\n\n            if (copied) {\n                return;\n            }\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n            \n            var key = null;\n            var modifier = 0;\n            console.log(selectionStart, selectionEnd);\n            if (selectionStart == 0) {\n                key = KEYS.up;\n            } else if (selectionStart == 1) {\n                key = KEYS.home;\n            } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n                key = KEYS.end;\n            } else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n                key = KEYS.left;\n                modifier = MODS.option;\n            } else if (\n                selectionStart < lastSelectionStart\n                || (\n                    selectionStart == lastSelectionStart \n                    && lastSelectionEnd != lastSelectionStart\n                    && selectionStart == selectionEnd\n                )\n            ) {\n                key = KEYS.left;\n            } else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n                key = KEYS.down;\n            } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n                key = KEYS.right;\n                modifier = MODS.option;\n            } else if (\n                selectionEnd > lastSelectionEnd\n                || (\n                    selectionEnd == lastSelectionEnd \n                    && lastSelectionEnd != lastSelectionStart\n                    && selectionStart == selectionEnd\n                )\n            ) {\n                key = KEYS.right;\n            }\n            \n            if (selectionStart !== selectionEnd)\n                modifier |= MODS.shift;\n\n            if (key) {\n                host.onCommandKey(null, modifier, key);\n                lastSelectionStart = selectionStart;\n                lastSelectionEnd = selectionEnd;\n                resetSelection(\"\");\n            }\n        };\n        document.addEventListener(\"selectionchange\", detectArrowKeys);\n        host.on(\"destroy\", function() {\n            document.removeEventListener(\"selectionchange\", detectArrowKeys);\n        });\n    }\n\n};\n\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n    mouseHandler.$clickSelection = null;\n\n    var editor = mouseHandler.editor;\n    editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n    editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n    editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n\n    var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n        \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n    exports.forEach(function(x) {\n        mouseHandler[x] = this[x];\n    }, this);\n\n    mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n    mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n    this.onMouseDown = function(ev) {\n        var inSelection = ev.inSelection();\n        var pos = ev.getDocumentPosition();\n        this.mousedownEvent = ev;\n        var editor = this.editor;\n\n        var button = ev.getButton();\n        if (button !== 0) {\n            var selectionRange = editor.getSelectionRange();\n            var selectionEmpty = selectionRange.isEmpty();\n            if (selectionEmpty || button == 1)\n                editor.selection.moveToPosition(pos);\n            if (button == 2) {\n                editor.textInput.onContextMenu(ev.domEvent);\n                if (!useragent.isMozilla)\n                    ev.preventDefault();\n            }\n            return;\n        }\n\n        this.mousedownEvent.time = Date.now();\n        if (inSelection && !editor.isFocused()) {\n            editor.focus();\n            if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n                this.setState(\"focusWait\");\n                this.captureMouse(ev);\n                return;\n            }\n        }\n\n        this.captureMouse(ev);\n        this.startSelect(pos, ev.domEvent._clicks > 1);\n        return ev.preventDefault();\n    };\n\n    this.startSelect = function(pos, waitForClickSelection) {\n        pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var editor = this.editor;\n        if (!this.mousedownEvent) return;\n        if (this.mousedownEvent.getShiftKey())\n            editor.selection.selectToPosition(pos);\n        else if (!waitForClickSelection)\n            editor.selection.moveToPosition(pos);\n        if (!waitForClickSelection)\n            this.select();\n        if (editor.renderer.scroller.setCapture) {\n            editor.renderer.scroller.setCapture();\n        }\n        editor.setStyle(\"ace_selecting\");\n        this.setState(\"select\");\n    };\n\n    this.select = function() {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        if (this.$clickSelection) {\n            var cmp = this.$clickSelection.comparePoint(cursor);\n\n            if (cmp == -1) {\n                anchor = this.$clickSelection.end;\n            } else if (cmp == 1) {\n                anchor = this.$clickSelection.start;\n            } else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n\n    this.extendSelectionBy = function(unitName) {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var range = editor.selection[unitName](cursor.row, cursor.column);\n        if (this.$clickSelection) {\n            var cmpStart = this.$clickSelection.comparePoint(range.start);\n            var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n            if (cmpStart == -1 && cmpEnd <= 0) {\n                anchor = this.$clickSelection.end;\n                if (range.end.row != cursor.row || range.end.column != cursor.column)\n                    cursor = range.start;\n            } else if (cmpEnd == 1 && cmpStart >= 0) {\n                anchor = this.$clickSelection.start;\n                if (range.start.row != cursor.row || range.start.column != cursor.column)\n                    cursor = range.end;\n            } else if (cmpStart == -1 && cmpEnd == 1) {\n                cursor = range.end;\n                anchor = range.start;\n            } else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n\n    this.selectEnd =\n    this.selectAllEnd =\n    this.selectByWordsEnd =\n    this.selectByLinesEnd = function() {\n        this.$clickSelection = null;\n        this.editor.unsetStyle(\"ace_selecting\");\n        if (this.editor.renderer.scroller.releaseCapture) {\n            this.editor.renderer.scroller.releaseCapture();\n        }\n    };\n\n    this.focusWait = function() {\n        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n        var time = Date.now();\n\n        if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n            this.startSelect(this.mousedownEvent.getDocumentPosition());\n    };\n\n    this.onDoubleClick = function(ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        var session = editor.session;\n\n        var range = session.getBracketRange(pos);\n        if (range) {\n            if (range.isEmpty()) {\n                range.start.column--;\n                range.end.column++;\n            }\n            this.setState(\"select\");\n        } else {\n            range = editor.selection.getWordRange(pos.row, pos.column);\n            this.setState(\"selectByWords\");\n        }\n        this.$clickSelection = range;\n        this.select();\n    };\n\n    this.onTripleClick = function(ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n\n        this.setState(\"selectByLines\");\n        var range = editor.getSelectionRange();\n        if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n            this.$clickSelection = editor.selection.getLineRange(range.start.row);\n            this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n        } else {\n            this.$clickSelection = editor.selection.getLineRange(pos.row);\n        }\n        this.select();\n    };\n\n    this.onQuadClick = function(ev) {\n        var editor = this.editor;\n\n        editor.selectAll();\n        this.$clickSelection = editor.getSelectionRange();\n        this.setState(\"selectAll\");\n    };\n\n    this.onMouseWheel = function(ev) {\n        if (ev.getAccelKey())\n            return;\n        if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n            ev.wheelX = ev.wheelY;\n            ev.wheelY = 0;\n        }\n        \n        var editor = this.editor;\n        \n        if (!this.$lastScroll)\n            this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n        \n        var prevScroll = this.$lastScroll;\n        var t = ev.domEvent.timeStamp;\n        var dt = t - prevScroll.t;\n        var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n        var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n        if (dt < SCROLL_COOLDOWN_T) {\n            vx = (vx + prevScroll.vx) / 2;\n            vy = (vy + prevScroll.vy) / 2;\n        }\n        \n        var direction = Math.abs(vx / vy);\n        \n        var canScroll = false;\n        if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n            canScroll = true;\n        if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n            canScroll = true;\n            \n        if (canScroll) {\n            prevScroll.allowed = t;\n        } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n            var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n                && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n            if (isSlower) {\n                canScroll = true;\n                prevScroll.allowed = t;\n            }\n            else {\n                prevScroll.allowed = 0;\n            }\n        }\n        \n        prevScroll.t = t;\n        prevScroll.vx = vx;\n        prevScroll.vy = vy;\n\n        if (canScroll) {\n            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n            return ev.stop();\n        }\n    };\n    \n    this.onTouchMove = function(ev) {\n        this.editor._emit(\"mousewheel\", ev);\n    };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n    if (range.start.row == range.end.row)\n        var cmp = 2 * cursor.column - range.start.column - range.end.column;\n    else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n        var cmp = cursor.column - 4;\n    else\n        var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n    if (cmp < 0)\n        return {cursor: range.start, anchor: range.end};\n    else\n        return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n    this.isOpen = false;\n    this.$element = null;\n    this.$parentNode = parentNode;\n}\n\n(function() {\n    this.$init = function() {\n        this.$element = dom.createElement(\"div\");\n        this.$element.className = \"ace_tooltip\";\n        this.$element.style.display = \"none\";\n        this.$parentNode.appendChild(this.$element);\n        return this.$element;\n    };\n    this.getElement = function() {\n        return this.$element || this.$init();\n    };\n    this.setText = function(text) {\n        this.getElement().textContent = text;\n    };\n    this.setHtml = function(html) {\n        this.getElement().innerHTML = html;\n    };\n    this.setPosition = function(x, y) {\n        this.getElement().style.left = x + \"px\";\n        this.getElement().style.top = y + \"px\";\n    };\n    this.setClassName = function(className) {\n        dom.addCssClass(this.getElement(), className);\n    };\n    this.show = function(text, x, y) {\n        if (text != null)\n            this.setText(text);\n        if (x != null && y != null)\n            this.setPosition(x, y);\n        if (!this.isOpen) {\n            this.getElement().style.display = \"block\";\n            this.isOpen = true;\n        }\n    };\n\n    this.hide = function() {\n        if (this.isOpen) {\n            this.getElement().style.display = \"none\";\n            this.isOpen = false;\n        }\n    };\n    this.getHeight = function() {\n        return this.getElement().offsetHeight;\n    };\n    this.getWidth = function() {\n        return this.getElement().offsetWidth;\n    };\n    \n    this.destroy = function() {\n        this.isOpen = false;\n        if (this.$element && this.$element.parentNode) {\n            this.$element.parentNode.removeChild(this.$element);\n        }\n    };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var gutter = editor.renderer.$gutterLayer;\n    var tooltip = new GutterTooltip(editor.container);\n\n    mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n        if (!editor.isFocused() || e.getButton() != 0)\n            return;\n        var gutterRegion = gutter.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\")\n            return;\n\n        var row = e.getDocumentPosition().row;\n        var selection = editor.session.selection;\n\n        if (e.getShiftKey())\n            selection.selectTo(row, 0);\n        else {\n            if (e.domEvent.detail == 2) {\n                editor.selectAll();\n                return e.preventDefault();\n            }\n            mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n        }\n        mouseHandler.setState(\"selectByLines\");\n        mouseHandler.captureMouse(e);\n        return e.preventDefault();\n    });\n\n\n    var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n    function showTooltip() {\n        var row = mouseEvent.getDocumentPosition().row;\n        var annotation = gutter.$annotations[row];\n        if (!annotation)\n            return hideTooltip();\n\n        var maxRow = editor.session.getLength();\n        if (row == maxRow) {\n            var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n            var pos = mouseEvent.$pos;\n            if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n                return hideTooltip();\n        }\n\n        if (tooltipAnnotation == annotation)\n            return;\n        tooltipAnnotation = annotation.text.join(\"<br/>\");\n\n        tooltip.setHtml(tooltipAnnotation);\n        tooltip.show();\n        editor._signal(\"showGutterTooltip\", tooltip);\n        editor.on(\"mousewheel\", hideTooltip);\n\n        if (mouseHandler.$tooltipFollowsMouse) {\n            moveTooltip(mouseEvent);\n        } else {\n            var gutterElement = mouseEvent.domEvent.target;\n            var rect = gutterElement.getBoundingClientRect();\n            var style = tooltip.getElement().style;\n            style.left = rect.right + \"px\";\n            style.top = rect.bottom + \"px\";\n        }\n    }\n\n    function hideTooltip() {\n        if (tooltipTimeout)\n            tooltipTimeout = clearTimeout(tooltipTimeout);\n        if (tooltipAnnotation) {\n            tooltip.hide();\n            tooltipAnnotation = null;\n            editor._signal(\"hideGutterTooltip\", tooltip);\n            editor.removeEventListener(\"mousewheel\", hideTooltip);\n        }\n    }\n\n    function moveTooltip(e) {\n        tooltip.setPosition(e.x, e.y);\n    }\n\n    mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n        var target = e.domEvent.target || e.domEvent.srcElement;\n        if (dom.hasCssClass(target, \"ace_fold-widget\"))\n            return hideTooltip();\n\n        if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n            moveTooltip(e);\n\n        mouseEvent = e;\n        if (tooltipTimeout)\n            return;\n        tooltipTimeout = setTimeout(function() {\n            tooltipTimeout = null;\n            if (mouseEvent && !mouseHandler.isMousePressed)\n                showTooltip();\n            else\n                hideTooltip();\n        }, 50);\n    });\n\n    event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n        mouseEvent = null;\n        if (!tooltipAnnotation || tooltipTimeout)\n            return;\n\n        tooltipTimeout = setTimeout(function() {\n            tooltipTimeout = null;\n            hideTooltip();\n        }, 50);\n    });\n    \n    editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n    Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n    this.setPosition = function(x, y) {\n        var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n        var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n        var width = this.getWidth();\n        var height = this.getHeight();\n        x += 15;\n        y += 15;\n        if (x + width > windowWidth) {\n            x -= (x + width) - windowWidth;\n        }\n        if (y + height > windowHeight) {\n            y -= 20 + height;\n        }\n        Tooltip.prototype.setPosition.call(this, x, y);\n    };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n    this.domEvent = domEvent;\n    this.editor = editor;\n    \n    this.x = this.clientX = domEvent.clientX;\n    this.y = this.clientY = domEvent.clientY;\n\n    this.$pos = null;\n    this.$inSelection = null;\n    \n    this.propagationStopped = false;\n    this.defaultPrevented = false;\n};\n\n(function() {  \n    \n    this.stopPropagation = function() {\n        event.stopPropagation(this.domEvent);\n        this.propagationStopped = true;\n    };\n    \n    this.preventDefault = function() {\n        event.preventDefault(this.domEvent);\n        this.defaultPrevented = true;\n    };\n    \n    this.stop = function() {\n        this.stopPropagation();\n        this.preventDefault();\n    };\n    this.getDocumentPosition = function() {\n        if (this.$pos)\n            return this.$pos;\n        \n        this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n        return this.$pos;\n    };\n    this.inSelection = function() {\n        if (this.$inSelection !== null)\n            return this.$inSelection;\n            \n        var editor = this.editor;\n        \n\n        var selectionRange = editor.getSelectionRange();\n        if (selectionRange.isEmpty())\n            this.$inSelection = false;\n        else {\n            var pos = this.getDocumentPosition();\n            this.$inSelection = selectionRange.contains(pos.row, pos.column);\n        }\n\n        return this.$inSelection;\n    };\n    this.getButton = function() {\n        return event.getButton(this.domEvent);\n    };\n    this.getShiftKey = function() {\n        return this.domEvent.shiftKey;\n    };\n    \n    this.getAccelKey = useragent.isMac\n        ? function() { return this.domEvent.metaKey; }\n        : function() { return this.domEvent.ctrlKey; };\n    \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n    var editor = mouseHandler.editor;\n\n    var blankImage = dom.createElement(\"img\");\n    blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n    if (useragent.isOpera)\n        blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n    var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n     exports.forEach(function(x) {\n         mouseHandler[x] = this[x];\n    }, this);\n    editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n    var mouseTarget = editor.container;\n    var dragSelectionMarker, x, y;\n    var timerId, range;\n    var dragCursor, counter = 0;\n    var dragOperation;\n    var isInternal;\n    var autoScrollStartTime;\n    var cursorMovedTime;\n    var cursorPointOnCaretMoved;\n\n    this.onDragStart = function(e) {\n        if (this.cancelDrag || !mouseTarget.draggable) {\n            var self = this;\n            setTimeout(function(){\n                self.startSelect();\n                self.captureMouse(e);\n            }, 0);\n            return e.preventDefault();\n        }\n        range = editor.getSelectionRange();\n\n        var dataTransfer = e.dataTransfer;\n        dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n        if (useragent.isOpera) {\n            editor.container.appendChild(blankImage);\n            blankImage.scrollTop = 0;\n        }\n        dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n        if (useragent.isOpera) {\n            editor.container.removeChild(blankImage);\n        }\n        dataTransfer.clearData();\n        dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n        isInternal = true;\n        this.setState(\"drag\");\n    };\n\n    this.onDragEnd = function(e) {\n        mouseTarget.draggable = false;\n        isInternal = false;\n        this.setState(null);\n        if (!editor.getReadOnly()) {\n            var dropEffect = e.dataTransfer.dropEffect;\n            if (!dragOperation && dropEffect == \"move\")\n                editor.session.remove(editor.getSelectionRange());\n            editor.renderer.$cursorLayer.setBlinking(true);\n        }\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n    };\n\n    this.onDragEnter = function(e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker)\n            addDragMarker();\n        counter++;\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n\n    this.onDragOver = function(e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker) {\n            addDragMarker();\n            counter++;\n        }\n        if (onMouseMoveTimer !== null)\n            onMouseMoveTimer = null;\n\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n\n    this.onDragLeave = function(e) {\n        counter--;\n        if (counter <= 0 && dragSelectionMarker) {\n            clearDragMarker();\n            dragOperation = null;\n            return event.preventDefault(e);\n        }\n    };\n\n    this.onDrop = function(e) {\n        if (!dragCursor)\n            return;\n        var dataTransfer = e.dataTransfer;\n        if (isInternal) {\n            switch (dragOperation) {\n                case \"move\":\n                    if (range.contains(dragCursor.row, dragCursor.column)) {\n                        range = {\n                            start: dragCursor,\n                            end: dragCursor\n                        };\n                    } else {\n                        range = editor.moveText(range, dragCursor);\n                    }\n                    break;\n                case \"copy\":\n                    range = editor.moveText(range, dragCursor, true);\n                    break;\n            }\n        } else {\n            var dropData = dataTransfer.getData('Text');\n            range = {\n                start: dragCursor,\n                end: editor.session.insert(dragCursor, dropData)\n            };\n            editor.focus();\n            dragOperation = null;\n        }\n        clearDragMarker();\n        return event.preventDefault(e);\n    };\n\n    event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n    event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n    function scrollCursorIntoView(cursor, prevCursor) {\n        var now = Date.now();\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        var hMovement = !prevCursor || cursor.column != prevCursor.column;\n        if (!cursorMovedTime || vMovement || hMovement) {\n            editor.moveCursorToPosition(cursor);\n            cursorMovedTime = now;\n            cursorPointOnCaretMoved = {x: x, y: y};\n        } else {\n            var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n            if (distance > SCROLL_CURSOR_HYSTERESIS) {\n                cursorMovedTime = null;\n            } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n                editor.renderer.scrollCursorIntoView();\n                cursorMovedTime = null;\n            }\n        }\n    }\n\n    function autoScroll(cursor, prevCursor) {\n        var now = Date.now();\n        var lineHeight = editor.renderer.layerConfig.lineHeight;\n        var characterWidth = editor.renderer.layerConfig.characterWidth;\n        var editorRect = editor.renderer.scroller.getBoundingClientRect();\n        var offsets = {\n           x: {\n               left: x - editorRect.left,\n               right: editorRect.right - x\n           },\n           y: {\n               top: y - editorRect.top,\n               bottom: editorRect.bottom - y\n           }\n        };\n        var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n        var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n        var scrollCursor = {row: cursor.row, column: cursor.column};\n        if (nearestXOffset / characterWidth <= 2) {\n            scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n        }\n        if (nearestYOffset / lineHeight <= 1) {\n            scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n        }\n        var vScroll = cursor.row != scrollCursor.row;\n        var hScroll = cursor.column != scrollCursor.column;\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        if (vScroll || (hScroll && !vMovement)) {\n            if (!autoScrollStartTime)\n                autoScrollStartTime = now;\n            else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n                editor.renderer.scrollCursorIntoView(scrollCursor);\n        } else {\n            autoScrollStartTime = null;\n        }\n    }\n\n    function onDragInterval() {\n        var prevCursor = dragCursor;\n        dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n        scrollCursorIntoView(dragCursor, prevCursor);\n        autoScroll(dragCursor, prevCursor);\n    }\n\n    function addDragMarker() {\n        range = editor.selection.toOrientedRange();\n        dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n        editor.clearSelection();\n        if (editor.isFocused())\n            editor.renderer.$cursorLayer.setBlinking(false);\n        clearInterval(timerId);\n        onDragInterval();\n        timerId = setInterval(onDragInterval, 20);\n        counter = 0;\n        event.addListener(document, \"mousemove\", onMouseMove);\n    }\n\n    function clearDragMarker() {\n        clearInterval(timerId);\n        editor.session.removeMarker(dragSelectionMarker);\n        dragSelectionMarker = null;\n        editor.selection.fromOrientedRange(range);\n        if (editor.isFocused() && !isInternal)\n            editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n        range = null;\n        dragCursor = null;\n        counter = 0;\n        autoScrollStartTime = null;\n        cursorMovedTime = null;\n        event.removeListener(document, \"mousemove\", onMouseMove);\n    }\n    var onMouseMoveTimer = null;\n    function onMouseMove() {\n        if (onMouseMoveTimer == null) {\n            onMouseMoveTimer = setTimeout(function() {\n                if (onMouseMoveTimer != null && dragSelectionMarker)\n                    clearDragMarker();\n            }, 20);\n        }\n    }\n\n    function canAccept(dataTransfer) {\n        var types = dataTransfer.types;\n        return !types || Array.prototype.some.call(types, function(type) {\n            return type == 'text/plain' || type == 'Text';\n        });\n    }\n\n    function getDropEffect(e) {\n        var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n        var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n        var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n        var effectAllowed = \"uninitialized\";\n        try {\n            effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n        } catch (e) {}\n        var dropEffect = \"none\";\n\n        if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        else if (moveAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"move\";\n        else if (copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n\n        return dropEffect;\n    }\n}\n\n(function() {\n\n    this.dragWait = function() {\n        var interval = Date.now() - this.mousedownEvent.time;\n        if (interval > this.editor.getDragDelay())\n            this.startDrag();\n    };\n\n    this.dragWaitEnd = function() {\n        var target = this.editor.container;\n        target.draggable = false;\n        this.startSelect(this.mousedownEvent.getDocumentPosition());\n        this.selectEnd();\n    };\n\n    this.dragReadyEnd = function(e) {\n        this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n        this.dragWaitEnd();\n    };\n\n    this.startDrag = function(){\n        this.cancelDrag = false;\n        var editor = this.editor;\n        var target = editor.container;\n        target.draggable = true;\n        editor.renderer.$cursorLayer.setBlinking(false);\n        editor.setStyle(\"ace_dragging\");\n        var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n        editor.renderer.setCursorStyle(cursorStyle);\n        this.setState(\"dragReady\");\n    };\n\n    this.onMouseDrag = function(e) {\n        var target = this.editor.container;\n        if (useragent.isIE && this.state == \"dragReady\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 3)\n                target.dragDrop();\n        }\n        if (this.state === \"dragWait\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 0) {\n                target.draggable = false;\n                this.startSelect(this.mousedownEvent.getDocumentPosition());\n            }\n        }\n    };\n\n    this.onMouseDown = function(e) {\n        if (!this.$dragEnabled)\n            return;\n        this.mousedownEvent = e;\n        var editor = this.editor;\n\n        var inSelection = e.inSelection();\n        var button = e.getButton();\n        var clickCount = e.domEvent.detail || 1;\n        if (clickCount === 1 && button === 0 && inSelection) {\n            if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n                return;\n            this.mousedownEvent.time = Date.now();\n            var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n            if (\"unselectable\" in eventTarget)\n                eventTarget.unselectable = \"on\";\n            if (editor.getDragDelay()) {\n                if (useragent.isWebKit) {\n                    this.cancelDrag = true;\n                    var mouseTarget = editor.container;\n                    mouseTarget.draggable = true;\n                }\n                this.setState(\"dragWait\");\n            } else {\n                this.startDrag();\n            }\n            this.captureMouse(e, this.onMouseDrag.bind(this));\n            e.defaultPrevented = true;\n        }\n    };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./dom\");\n\nexports.get = function (url, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(xhr.responseText);\n        }\n    };\n    xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n    var head = dom.getDocumentHead();\n    var s = document.createElement('script');\n\n    s.src = path;\n    head.appendChild(s);\n\n    s.onload = s.onreadystatechange = function(_, isAbort) {\n        if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n            s = s.onload = s.onreadystatechange = null;\n            if (!isAbort)\n                callback();\n        }\n    };\n};\nexports.qualifyURL = function(url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"no use strict\";\n\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\n\nvar optionsProvider = {\n    setOptions: function(optList) {\n        Object.keys(optList).forEach(function(key) {\n            this.setOption(key, optList[key]);\n        }, this);\n    },\n    getOptions: function(optionNames) {\n        var result = {};\n        if (!optionNames) {\n            var options = this.$options;\n            optionNames = Object.keys(options).filter(function(key) {\n                return !options[key].hidden;\n            });\n        } else if (!Array.isArray(optionNames)) {\n            result = optionNames;\n            optionNames = Object.keys(result);\n        }\n        optionNames.forEach(function(key) {\n            result[key] = this.getOption(key);\n        }, this);\n        return result;\n    },\n    setOption: function(name, value) {\n        if (this[\"$\" + name] === value)\n            return;\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n\n        if (!opt.handlesSet)\n            this[\"$\" + name] = value;\n        if (opt && opt.set)\n            opt.set.call(this, value);\n    },\n    getOption: function(name) {\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n        return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n    }\n};\n\nfunction warn(message) {\n    if (typeof console != \"undefined\" && console.warn)\n        console.warn.apply(console, arguments);\n}\n\nfunction reportError(msg, data) {\n    var e = new Error(msg);\n    e.data = data;\n    if (typeof console == \"object\" && console.error)\n        console.error(e);\n    setTimeout(function() { throw e; });\n}\n\nvar AppConfig = function() {\n    this.$defaultOptions = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    this.defineOptions = function(obj, path, options) {\n        if (!obj.$options)\n            this.$defaultOptions[path] = obj.$options = {};\n\n        Object.keys(options).forEach(function(key) {\n            var opt = options[key];\n            if (typeof opt == \"string\")\n                opt = {forwardTo: opt};\n\n            opt.name || (opt.name = key);\n            obj.$options[opt.name] = opt;\n            if (\"initialValue\" in opt)\n                obj[\"$\" + opt.name] = opt.initialValue;\n        });\n        oop.implement(obj, optionsProvider);\n\n        return this;\n    };\n\n    this.resetOptions = function(obj) {\n        Object.keys(obj.$options).forEach(function(key) {\n            var opt = obj.$options[key];\n            if (\"value\" in opt)\n                obj.setOption(key, opt.value);\n        });\n    };\n\n    this.setDefaultValue = function(path, name, value) {\n        var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n        if (opts[name]) {\n            if (opts.forwardTo)\n                this.setDefaultValue(opts.forwardTo, name, value);\n            else\n                opts[name].value = value;\n        }\n    };\n\n    this.setDefaultValues = function(path, optionHash) {\n        Object.keys(optionHash).forEach(function(key) {\n            this.setDefaultValue(path, key, optionHash[key]);\n        }, this);\n    };\n    \n    this.warn = warn;\n    this.reportError = reportError;\n    \n}).call(AppConfig.prototype);\n\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"], function(require, exports, module) {\n\"no use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar net = require(\"./lib/net\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\n\nmodule.exports = exports = new AppConfig();\n\nvar global = (function() {\n    return this || typeof window != \"undefined\" && window;\n})();\n\nvar options = {\n    packaged: false,\n    workerPath: null,\n    modePath: null,\n    themePath: null,\n    basePath: \"\",\n    suffix: \".js\",\n    $moduleUrls: {},\n    loadWorkerFromBlob: true\n};\n\nexports.get = function(key) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n\n    return options[key];\n};\n\nexports.set = function(key, value) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n\n    options[key] = value;\n};\n\nexports.all = function() {\n    return lang.copyObject(options);\n};\n\nexports.$modes = {};\nexports.moduleUrl = function(name, component) {\n    if (options.$moduleUrls[name])\n        return options.$moduleUrls[name];\n\n    var parts = name.split(\"/\");\n    component = component || parts[parts.length - 2] || \"\";\n    var sep = component == \"snippets\" ? \"/\" : \"-\";\n    var base = parts[parts.length - 1];\n    if (component == \"worker\" && sep == \"-\") {\n        var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n        base = base.replace(re, \"\");\n    }\n\n    if ((!base || base == component) && parts.length > 1)\n        base = parts[parts.length - 2];\n    var path = options[component + \"Path\"];\n    if (path == null) {\n        path = options.basePath;\n    } else if (sep == \"/\") {\n        component = sep = \"\";\n    }\n    if (path && path.slice(-1) != \"/\")\n        path += \"/\";\n    return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n    return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n    var module, moduleType;\n    if (Array.isArray(moduleName)) {\n        moduleType = moduleName[0];\n        moduleName = moduleName[1];\n    }\n\n    try {\n        module = require(moduleName);\n    } catch (e) {}\n    if (module && !exports.$loading[moduleName])\n        return onLoad && onLoad(module);\n\n    if (!exports.$loading[moduleName])\n        exports.$loading[moduleName] = [];\n\n    exports.$loading[moduleName].push(onLoad);\n\n    if (exports.$loading[moduleName].length > 1)\n        return;\n\n    var afterLoad = function() {\n        require([moduleName], function(module) {\n            exports._emit(\"load.module\", {name: moduleName, module: module});\n            var listeners = exports.$loading[moduleName];\n            exports.$loading[moduleName] = null;\n            listeners.forEach(function(onLoad) {\n                onLoad && onLoad(module);\n            });\n        });\n    };\n\n    if (!exports.get(\"packaged\"))\n        return afterLoad();\n    \n    net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n    reportErrorIfPathIsNotConfigured();\n};\n\nvar reportErrorIfPathIsNotConfigured = function() {\n    if (\n        !options.basePath && !options.workerPath \n        && !options.modePath && !options.themePath\n        && !Object.keys(options.$moduleUrls).length\n    ) {\n        console.error(\n            \"Unable to infer path to ace from script src,\",\n            \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\n            \"or with webpack use ace/webpack-resolver\"\n        );\n        reportErrorIfPathIsNotConfigured = function() {};\n    }\n};\ninit(true);function init(packaged) {\n\n    if (!global || !global.document)\n        return;\n    \n    options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged);\n\n    var scriptOptions = {};\n    var scriptUrl = \"\";\n    var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n    var currentDocument = currentScript && currentScript.ownerDocument || document;\n    \n    var scripts = currentDocument.getElementsByTagName(\"script\");\n    for (var i=0; i<scripts.length; i++) {\n        var script = scripts[i];\n\n        var src = script.src || script.getAttribute(\"src\");\n        if (!src)\n            continue;\n\n        var attributes = script.attributes;\n        for (var j=0, l=attributes.length; j < l; j++) {\n            var attr = attributes[j];\n            if (attr.name.indexOf(\"data-ace-\") === 0) {\n                scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n            }\n        }\n\n        var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n        if (m)\n            scriptUrl = m[1];\n    }\n\n    if (scriptUrl) {\n        scriptOptions.base = scriptOptions.base || scriptUrl;\n        scriptOptions.packaged = true;\n    }\n\n    scriptOptions.basePath = scriptOptions.base;\n    scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n    scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n    scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n    delete scriptOptions.base;\n\n    for (var key in scriptOptions)\n        if (typeof scriptOptions[key] !== \"undefined\")\n            exports.set(key, scriptOptions[key]);\n}\n\nexports.init = init;\n\nfunction deHyphenate(str) {\n    return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar config = require(\"../config\");\n\nvar MouseHandler = function(editor) {\n    var _self = this;\n    this.editor = editor;\n\n    new DefaultHandlers(this);\n    new DefaultGutterHandler(this);\n    new DragdropHandler(this);\n\n    var focusEditor = function(e) {\n        var windowBlurred = !document.hasFocus || !document.hasFocus()\n            || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n        if (windowBlurred)\n            window.focus();\n        editor.focus();\n    };\n\n    var mouseTarget = editor.renderer.getMouseEventTarget();\n    event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n    event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n    event.addMultiMouseDownListener([\n        mouseTarget,\n        editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n        editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n        editor.textInput && editor.textInput.getElement()\n    ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n    event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n    event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n\n    var gutterEl = editor.renderer.$gutter;\n    event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n    event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n    event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n    event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n\n    event.addListener(mouseTarget, \"mousedown\", focusEditor);\n    event.addListener(gutterEl, \"mousedown\", focusEditor);\n    if (useragent.isIE && editor.renderer.scrollBarV) {\n        event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n        event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n    }\n\n    editor.on(\"mousemove\", function(e){\n        if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n            return;\n\n        var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n        var range = editor.session.selection.getRange();\n        var renderer = editor.renderer;\n\n        if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n            renderer.setCursorStyle(\"default\");\n        } else {\n            renderer.setCursorStyle(\"\");\n        }\n    });\n};\n\n(function() {\n    this.onMouseEvent = function(name, e) {\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n\n    this.onMouseMove = function(name, e) {\n        var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n        if (!listeners || !listeners.length)\n            return;\n\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n\n    this.onMouseWheel = function(name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n\n        this.editor._emit(name, mouseEvent);\n    };\n    \n    this.onTouchMove = function (name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = 1;//this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n        this.editor._emit(name, mouseEvent);\n    };\n\n    this.setState = function(state) {\n        this.state = state;\n    };\n\n    this.captureMouse = function(ev, mouseMoveHandler) {\n        this.x = ev.x;\n        this.y = ev.y;\n\n        this.isMousePressed = true;\n        var editor = this.editor;\n        var renderer = this.editor.renderer;\n        if (renderer.$keepTextAreaAtCursor)\n            renderer.$keepTextAreaAtCursor = null;\n\n        var self = this;\n        var onMouseMove = function(e) {\n            if (!e) return;\n            if (useragent.isWebKit && !e.which && self.releaseMouse)\n                return self.releaseMouse();\n\n            self.x = e.clientX;\n            self.y = e.clientY;\n            mouseMoveHandler && mouseMoveHandler(e);\n            self.mouseEvent = new MouseEvent(e, self.editor);\n            self.$mouseMoved = true;\n        };\n\n        var onCaptureEnd = function(e) {\n            editor.off(\"beforeEndOperation\", onOperationEnd);\n            clearInterval(timerId);\n            onCaptureInterval();\n            self[self.state + \"End\"] && self[self.state + \"End\"](e);\n            self.state = \"\";\n            if (renderer.$keepTextAreaAtCursor == null) {\n                renderer.$keepTextAreaAtCursor = true;\n                renderer.$moveTextAreaToCursor();\n            }\n            self.isMousePressed = false;\n            self.$onCaptureMouseMove = self.releaseMouse = null;\n            e && self.onMouseEvent(\"mouseup\", e);\n            editor.endOperation();\n        };\n\n        var onCaptureInterval = function() {\n            self[self.state] && self[self.state]();\n            self.$mouseMoved = false;\n        };\n\n        if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n            return setTimeout(function() {onCaptureEnd(ev);});\n        }\n\n        var onOperationEnd = function(e) {\n            if (!self.releaseMouse) return;\n            if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n                self[self.state + \"End\"] && self[self.state + \"End\"]();\n                self.state = \"\";\n                self.releaseMouse();\n            }\n        };\n\n        editor.on(\"beforeEndOperation\", onOperationEnd);\n        editor.startOperation({command: {name: \"mouse\"}});\n\n        self.$onCaptureMouseMove = onMouseMove;\n        self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n        var timerId = setInterval(onCaptureInterval, 20);\n    };\n    this.releaseMouse = null;\n    this.cancelContextMenu = function() {\n        var stop = function(e) {\n            if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n                return;\n            this.editor.off(\"nativecontextmenu\", stop);\n            if (e && e.domEvent)\n                event.stopEvent(e.domEvent);\n        }.bind(this);\n        setTimeout(stop, 10);\n        this.editor.on(\"nativecontextmenu\", stop);\n    };\n}).call(MouseHandler.prototype);\n\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n    scrollSpeed: {initialValue: 2},\n    dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},\n    dragEnabled: {initialValue: true},\n    focusTimeout: {initialValue: 0},\n    tooltipFollowsMouse: {initialValue: true}\n});\n\n\nexports.MouseHandler = MouseHandler;\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\n\nfunction FoldHandler(editor) {\n\n    editor.on(\"click\", function(e) {\n        var position = e.getDocumentPosition();\n        var session = editor.session;\n        var fold = session.getFoldAt(position.row, position.column, 1);\n        if (fold) {\n            if (e.getAccelKey())\n                session.removeFold(fold);\n            else\n                session.expandFold(fold);\n\n            e.stop();\n        }\n        \n        var target = e.domEvent && e.domEvent.target;\n        if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n            if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n                session.setOption(\"wrap\", true);\n                editor.renderer.scrollCursorIntoView();\n            }\n        }\n    });\n\n    editor.on(\"gutterclick\", function(e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            if (session.foldWidgets && session.foldWidgets[row])\n                editor.session.onFoldWidgetClick(row, e);\n            if (!editor.isFocused())\n                editor.focus();\n            e.stop();\n        }\n    });\n\n    editor.on(\"gutterdblclick\", function(e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            var data = session.getParentFoldRangeData(row, true);\n            var range = data.range || data.firstRange;\n\n            if (range) {\n                row = range.start.row;\n                var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n                if (fold) {\n                    session.removeFold(fold);\n                } else {\n                    session.addFold(\"...\", range);\n                    editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});\n                }\n            }\n            e.stop();\n        }\n    });\n}\n\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil  = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\n\nvar KeyBinding = function(editor) {\n    this.$editor = editor;\n    this.$data = {editor: editor};\n    this.$handlers = [];\n    this.setDefaultHandler(editor.commands);\n};\n\n(function() {\n    this.setDefaultHandler = function(kb) {\n        this.removeKeyboardHandler(this.$defaultHandler);\n        this.$defaultHandler = kb;\n        this.addKeyboardHandler(kb, 0);\n    };\n\n    this.setKeyboardHandler = function(kb) {\n        var h = this.$handlers;\n        if (h[h.length - 1] == kb)\n            return;\n\n        while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n            this.removeKeyboardHandler(h[h.length - 1]);\n\n        this.addKeyboardHandler(kb, 1);\n    };\n\n    this.addKeyboardHandler = function(kb, pos) {\n        if (!kb)\n            return;\n        if (typeof kb == \"function\" && !kb.handleKeyboard)\n            kb.handleKeyboard = kb;\n        var i = this.$handlers.indexOf(kb);\n        if (i != -1)\n            this.$handlers.splice(i, 1);\n\n        if (pos == undefined)\n            this.$handlers.push(kb);\n        else\n            this.$handlers.splice(pos, 0, kb);\n\n        if (i == -1 && kb.attach)\n            kb.attach(this.$editor);\n    };\n\n    this.removeKeyboardHandler = function(kb) {\n        var i = this.$handlers.indexOf(kb);\n        if (i == -1)\n            return false;\n        this.$handlers.splice(i, 1);\n        kb.detach && kb.detach(this.$editor);\n        return true;\n    };\n\n    this.getKeyboardHandler = function() {\n        return this.$handlers[this.$handlers.length - 1];\n    };\n    \n    this.getStatusText = function() {\n        var data = this.$data;\n        var editor = data.editor;\n        return this.$handlers.map(function(h) {\n            return h.getStatusText && h.getStatusText(editor, data) || \"\";\n        }).filter(Boolean).join(\" \");\n    };\n\n    this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\n        var toExecute;\n        var success = false;\n        var commands = this.$editor.commands;\n\n        for (var i = this.$handlers.length; i--;) {\n            toExecute = this.$handlers[i].handleKeyboard(\n                this.$data, hashId, keyString, keyCode, e\n            );\n            if (!toExecute || !toExecute.command)\n                continue;\n            if (toExecute.command == \"null\") {\n                success = true;\n            } else {\n                success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n            }\n            if (success && e && hashId != -1 && \n                toExecute.passEvent != true && toExecute.command.passEvent != true\n            ) {\n                event.stopEvent(e);\n            }\n            if (success)\n                break;\n        }\n        \n        if (!success && hashId == -1) {\n            toExecute = {command: \"insertstring\"};\n            success = commands.exec(\"insertstring\", this.$editor, keyString);\n        }\n        \n        if (success && this.$editor._signal)\n            this.$editor._signal(\"keyboardActivity\", toExecute);\n        \n        return success;\n    };\n\n    this.onCommandKey = function(e, hashId, keyCode) {\n        var keyString = keyUtil.keyCodeToString(keyCode);\n        this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n    };\n\n    this.onTextInput = function(text) {\n        this.$callKeyboardHandlers(-1, text);\n    };\n\n}).call(KeyBinding.prototype);\n\nexports.KeyBinding = KeyBinding;\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false,  hasUBAT_B = false,  hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\n\nvar impTab_LTR = [\t[\t0,\t\t3,\t\t0,\t\t1,\t\t0,\t\t0,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t1,\t\t2,\t\t2,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t0x11,\t\t2,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t1,\t\t0\t],\t[\t0,\t\t3,\t\t0x15,\t\t0x15,\t\t4,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t2,\t\t0\t]\n];\n\nvar impTab_RTL = [\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t1,\t\t0\t],\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t1,\t\t3,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t0x21,\t\t3,\t\t1,\t\t1\t]\n];\n\nvar LTR = 0, RTL = 1;\n\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\n\nvar UnicodeTBL00 = [\nBN,BN,BN,BN,BN,BN,BN,BN,BN,S,B,S,WS,B,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,B,B,B,S,\nWS,ON,ON,ET,ET,ET,ON,ON,ON,ON,ON,ES,CS,ES,CS,CS,\nEN,EN,EN,EN,EN,EN,EN,EN,EN,EN,CS,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,BN,\nBN,BN,BN,BN,BN,B,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nCS,ON,ET,ET,ET,ET,ON,ON,ON,ON,L,ON,ON,BN,ON,ON,\nET,ET,EN,EN,ON,L,ON,ON,ON,EN,L,ON,ON,ON,ON,ON\n];\n\nvar UnicodeTBL20 = [\nWS,WS,WS,WS,WS,WS,WS,WS,WS,WS,WS,BN,BN,BN,L,R\t,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,WS,B,LRE,RLE,PDF,LRO,RLO,CS,\nET,ET,ET,ET,ET,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,CS,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,WS\n];\n\nfunction _computeLevels(chars, levels, len, charTypes) {\n\tvar impTab = dir ? impTab_RTL : impTab_LTR\n\t\t, prevState = null, newClass = null, newLevel = null, newState = 0\n\t\t, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n\n\tif (!charTypes) {\n\t\tfor (i = 0, charTypes = []; i < len; i++) {\n\t\t\tcharTypes[i] = _getCharacterType(chars[i]);\n\t\t}\n\t}\n\thiLevel = dir;\n\tlastArabic = false;\n\thasUBAT_AL = false;\n\thasUBAT_B = false;\n\thasUBAT_S = false;\n\tfor (ix = 0; ix < len; ix++){\n\t\tprevState = newState;\n\t\tclasses[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n\t\tnewState = impTab[prevState][newClass];\n\t\taction = newState & 0xF0;\n\t\tnewState &= 0x0F;\n\t\tlevels[ix] = newLevel = impTab[newState][5];\n\t\tif (action > 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\t\t\t\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\t\t\t\t\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\t\t\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\t\n\tif (hi == 0) {\t\t\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\t\t\t\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\t\t\n\treturn ON;\t\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\t\t\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = []; \n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) \n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\t\t\t\t\n\tif (chars[0] === '\\u202B')\n\t\tlevels[0] = exports.RLE;\n\t\t\t\t\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\t\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = function(session) {\n    this.session = session;\n    this.bidiMap = {};\n    this.currentRow = null;\n    this.bidiUtil = bidiUtil;\n    this.charWidths = [];\n    this.EOL = \"\\xAC\";\n    this.showInvisibles = true;\n    this.isRtlDir = false;\n    this.$isRtl = false;\n    this.line = \"\";\n    this.wrapIndent = 0;\n    this.EOF = \"\\xB6\";\n    this.RLE = \"\\u202B\";\n    this.contentWidth = 0;\n    this.fontMetrics = null;\n    this.rtlLineOffset = 0;\n    this.wrapOffset = 0;\n    this.isMoveLeftOperation = false;\n    this.seenBidi = bidiRE.test(session.getValue());\n};\n\n(function() {\n    this.isBidiRow = function(screenRow, docRow, splitIndex) {\n        if (!this.seenBidi)\n            return false;\n        if (screenRow !== this.currentRow) {\n            this.currentRow = screenRow;\n            this.updateRowLine(docRow, splitIndex);\n            this.updateBidiMap();\n        }\n        return this.bidiMap.bidiLevels;\n    };\n\n    this.onChange = function(delta) {\n        if (!this.seenBidi) {\n            if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n                this.seenBidi = true;\n                this.currentRow = null;\n            }\n        } \n        else {\n            this.currentRow = null;\n        }\n    };\n\n    this.getDocumentRow = function() {\n        var docRow = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            if (index >= 0)\n                docRow = this.session.$docRowCache[index];\n        }\n\n        return docRow;\n    };\n\n    this.getSplitIndex = function() {\n        var splitIndex = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            while (this.currentRow - splitIndex > 0) {\n                currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n                if (currentIndex !== prevIndex)\n                    break;\n\n                prevIndex = currentIndex;\n                splitIndex++;\n            }\n        } else {\n            splitIndex = this.currentRow;\n        }\n\n        return splitIndex;\n    };\n\n    this.updateRowLine = function(docRow, splitIndex) {\n        if (docRow === undefined)\n            docRow = this.getDocumentRow();\n            \n        var isLastRow = (docRow === this.session.getLength() - 1),\n            endOfLine = isLastRow ? this.EOF : this.EOL;\n\n        this.wrapIndent = 0;\n        this.line = this.session.getLine(docRow);\n        this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n        if (this.session.$useWrapMode) {\n            var splits = this.session.$wrapData[docRow];\n            if (splits) {\n                if (splitIndex === undefined)\n                    splitIndex = this.getSplitIndex();\n\n                if(splitIndex > 0 && splits.length) {\n                    this.wrapIndent = splits.indent;\n                    this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n                    this.line = (splitIndex < splits.length) ?\n                        this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n                            this.line.substring(splits[splits.length - 1]);\n                } else {\n                    this.line = this.line.substring(0, splits[splitIndex]);\n                }\n            }\n            if (splitIndex == splits.length)\n                this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n        } else {\n            this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n        }\n        var session = this.session, shift = 0, size;\n        this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n            if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n                size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n                shift += size - 1;\n                return lang.stringRepeat(bidiUtil.DOT, size);\n            }\n            return ch;\n        });\n\n        if (this.isRtlDir) {\n            this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n            this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n        }\n    };\n    \n    this.updateBidiMap = function() {\n        var textCharTypes = [];\n        if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n             this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n        } else {\n            this.bidiMap = {};\n        }\n    };\n    this.markAsDirty = function() {\n        this.currentRow = null;\n    };\n    this.updateCharacterWidths = function(fontMetrics) {\n        if (this.characterWidth === fontMetrics.$characterSize.width)\n            return;\n\n        this.fontMetrics = fontMetrics;\n        var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n        var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n        this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n        this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n        this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n        this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n\n        this.currentRow = null;\n    };\n\n    this.setShowInvisibles = function(showInvisibles) {\n        this.showInvisibles = showInvisibles;\n        this.currentRow = null;\n    };\n\n    this.setEolChar = function(eolChar) {\n        this.EOL = eolChar; \n    };\n\n    this.setContentWidth = function(width) {\n        this.contentWidth = width;\n    };\n\n    this.isRtlLine = function(row) {\n        if (this.$isRtl) return true;\n        if (row != undefined)\n            return (this.session.getLine(row).charAt(0) == this.RLE);\n        else\n            return this.isRtlDir; \n    };\n\n    this.setRtlDirection = function(editor, isRtlDir) {\n        var cursor = editor.getCursorPosition(); \n        for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n            if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n                editor.session.doc.removeInLine(row, 0, 1);\n            else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n                editor.session.doc.insert({column: 0, row: row}, editor.session.$bidiHandler.RLE);\n        }\n    };\n    this.getPosLeft = function(col) {\n        col -= this.wrapIndent;\n        var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n        var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n        var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap),\n            levels = this.bidiMap.bidiLevels, left = 0;\n\n        if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n            visualIdx++;\n            \n        for (var i = 0; i < visualIdx; i++) {\n            left += this.charWidths[levels[i]];\n        }\n\n        if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n            left += this.charWidths[levels[visualIdx]];\n\n        if (this.wrapIndent)\n            left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n        if (this.isRtlDir)\n            left += this.rtlLineOffset;\n\n        return left;\n    };\n    this.getSelections = function(startCol, endCol) {\n        var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0,\n            selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n                isSelected = false, isSelectedPrev = false, selectionStart = 0;\n            \n        if (this.wrapIndent)\n            offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n        for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n            logIdx = map.logicalFromVisual[visIdx];\n            level = levels[visIdx];\n            isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n            if (isSelected && !isSelectedPrev) {\n                selectionStart = offset;\n            } else if (!isSelected && isSelectedPrev) {\n                selections.push({left: selectionStart, width: offset - selectionStart});\n            }\n            offset += this.charWidths[level];\n            isSelectedPrev = isSelected;\n        }\n\n        if (isSelected && (visIdx === levels.length)) {\n            selections.push({left: selectionStart, width: offset - selectionStart});\n        }\n\n        if(this.isRtlDir) {\n            for (var i = 0; i < selections.length; i++) {\n                selections[i].left += this.rtlLineOffset;\n            }\n        }\n        return selections;\n    };\n    this.offsetToCol = function(posX) {\n        if(this.isRtlDir)\n            posX -= this.rtlLineOffset;\n\n        var logicalIdx = 0, posX = Math.max(posX, 0),\n            offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n                charWidth = this.charWidths[levels[visualIdx]];\n\n        if (this.wrapIndent)\n           posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n    \n        while(posX > offset + charWidth/2) {\n            offset += charWidth;\n            if(visualIdx === levels.length - 1) {\n                charWidth = 0;\n                break;\n            }\n            charWidth = this.charWidths[levels[++visualIdx]];\n        }\n    \n        if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n            if(posX < offset)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n        } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n            logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n                    : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n        } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n                || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n            logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n        } else {\n            if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n        }\n\n        if (logicalIdx === 0 && this.isRtlDir)\n            logicalIdx++;\n\n        return (logicalIdx + this.wrapIndent);\n    };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = function(session) {\n    this.session = session;\n    this.doc = session.getDocument();\n\n    this.clearSelection();\n    this.cursor = this.lead = this.doc.createAnchor(0, 0);\n    this.anchor = this.doc.createAnchor(0, 0);\n    this.$silent = false;\n\n    var self = this;\n    this.cursor.on(\"change\", function(e) {\n        self.$cursorChanged = true;\n        if (!self.$silent)\n            self._emit(\"changeCursor\");\n        if (!self.$isEmpty && !self.$silent)\n            self._emit(\"changeSelection\");\n        if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n            self.$desiredColumn = null;\n    });\n\n    this.anchor.on(\"change\", function() {\n        self.$anchorChanged = true;\n        if (!self.$isEmpty && !self.$silent)\n            self._emit(\"changeSelection\");\n    });\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.isEmpty = function() {\n        return this.$isEmpty || (\n            this.anchor.row == this.lead.row &&\n            this.anchor.column == this.lead.column\n        );\n    };\n    this.isMultiLine = function() {\n        return !this.$isEmpty && this.anchor.row != this.cursor.row;\n    };\n    this.getCursor = function() {\n        return this.lead.getPosition();\n    };\n    this.setSelectionAnchor = function(row, column) {\n        this.$isEmpty = false;\n        this.anchor.setPosition(row, column);\n    };\n    this.getAnchor = \n    this.getSelectionAnchor = function() {\n        if (this.$isEmpty)\n            return this.getSelectionLead();\n        \n        return this.anchor.getPosition();\n    };\n    this.getSelectionLead = function() {\n        return this.lead.getPosition();\n    };\n    this.isBackwards = function() {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n    };\n    this.getRange = function() {\n        var anchor = this.anchor;\n        var lead = this.lead;\n\n        if (this.$isEmpty)\n            return Range.fromPoints(lead, lead);\n\n        return this.isBackwards()\n            ? Range.fromPoints(lead, anchor)\n            : Range.fromPoints(anchor, lead);\n    };\n    this.clearSelection = function() {\n        if (!this.$isEmpty) {\n            this.$isEmpty = true;\n            this._emit(\"changeSelection\");\n        }\n    };\n    this.selectAll = function() {\n        this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n    };\n    this.setRange =\n    this.setSelectionRange = function(range, reverse) {\n        var start = reverse ? range.end : range.start;\n        var end = reverse ? range.start : range.end;\n        this.$setSelection(start.row, start.column, end.row, end.column);\n    };\n\n    this.$setSelection = function(anchorRow, anchorColumn, cursorRow, cursorColumn) {\n        var wasEmpty = this.$isEmpty;\n        var wasMultiselect = this.inMultiSelectMode;\n        this.$silent = true;\n        this.$cursorChanged = this.$anchorChanged = false;\n        this.anchor.setPosition(anchorRow, anchorColumn);\n        this.cursor.setPosition(cursorRow, cursorColumn);\n        this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n        this.$silent = false;\n        if (this.$cursorChanged)\n            this._emit(\"changeCursor\");\n        if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n            this._emit(\"changeSelection\");\n    };\n\n    this.$moveSelection = function(mover) {\n        var lead = this.lead;\n        if (this.$isEmpty)\n            this.setSelectionAnchor(lead.row, lead.column);\n\n        mover.call(this);\n    };\n    this.selectTo = function(row, column) {\n        this.$moveSelection(function() {\n            this.moveCursorTo(row, column);\n        });\n    };\n    this.selectToPosition = function(pos) {\n        this.$moveSelection(function() {\n            this.moveCursorToPosition(pos);\n        });\n    };\n    this.moveTo = function(row, column) {\n        this.clearSelection();\n        this.moveCursorTo(row, column);\n    };\n    this.moveToPosition = function(pos) {\n        this.clearSelection();\n        this.moveCursorToPosition(pos);\n    };\n    this.selectUp = function() {\n        this.$moveSelection(this.moveCursorUp);\n    };\n    this.selectDown = function() {\n        this.$moveSelection(this.moveCursorDown);\n    };\n    this.selectRight = function() {\n        this.$moveSelection(this.moveCursorRight);\n    };\n    this.selectLeft = function() {\n        this.$moveSelection(this.moveCursorLeft);\n    };\n    this.selectLineStart = function() {\n        this.$moveSelection(this.moveCursorLineStart);\n    };\n    this.selectLineEnd = function() {\n        this.$moveSelection(this.moveCursorLineEnd);\n    };\n    this.selectFileEnd = function() {\n        this.$moveSelection(this.moveCursorFileEnd);\n    };\n    this.selectFileStart = function() {\n        this.$moveSelection(this.moveCursorFileStart);\n    };\n    this.selectWordRight = function() {\n        this.$moveSelection(this.moveCursorWordRight);\n    };\n    this.selectWordLeft = function() {\n        this.$moveSelection(this.moveCursorWordLeft);\n    };\n    this.getWordRange = function(row, column) {\n        if (typeof column == \"undefined\") {\n            var cursor = row || this.lead;\n            row = cursor.row;\n            column = cursor.column;\n        }\n        return this.session.getWordRange(row, column);\n    };\n    this.selectWord = function() {\n        this.setSelectionRange(this.getWordRange());\n    };\n    this.selectAWord = function() {\n        var cursor = this.getCursor();\n        var range = this.session.getAWordRange(cursor.row, cursor.column);\n        this.setSelectionRange(range);\n    };\n\n    this.getLineRange = function(row, excludeLastChar) {\n        var rowStart = typeof row == \"number\" ? row : this.lead.row;\n        var rowEnd;\n\n        var foldLine = this.session.getFoldLine(rowStart);\n        if (foldLine) {\n            rowStart = foldLine.start.row;\n            rowEnd = foldLine.end.row;\n        } else {\n            rowEnd = rowStart;\n        }\n        if (excludeLastChar === true)\n            return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n        else\n            return new Range(rowStart, 0, rowEnd + 1, 0);\n    };\n    this.selectLine = function() {\n        this.setSelectionRange(this.getLineRange());\n    };\n    this.moveCursorUp = function() {\n        this.moveCursorBy(-1, 0);\n    };\n    this.moveCursorDown = function() {\n        this.moveCursorBy(1, 0);\n    };\n    this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n        var start = cursor.column;\n        var end = cursor.column + tabSize;\n\n        if (direction < 0) {\n            start = cursor.column - tabSize;\n            end = cursor.column;\n        }\n        return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n    };\n    this.moveCursorLeft = function() {\n        var cursor = this.lead.getPosition(),\n            fold;\n\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n        } else if (cursor.column === 0) {\n            if (cursor.row > 0) {\n                this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, -tabSize);\n            } else {\n                this.moveCursorBy(0, -1);\n            }\n        }\n    };\n    this.moveCursorRight = function() {\n        var cursor = this.lead.getPosition(),\n            fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n        }\n        else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n            if (this.lead.row < this.doc.getLength() - 1) {\n                this.moveCursorTo(this.lead.row + 1, 0);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            var cursor = this.lead;\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, tabSize);\n            } else {\n                this.moveCursorBy(0, 1);\n            }\n        }\n    };\n    this.moveCursorLineStart = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var screenRow = this.session.documentToScreenRow(row, column);\n        var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n        var beforeCursor = this.session.getDisplayLine(\n            row, null, firstColumnPosition.row,\n            firstColumnPosition.column\n        );\n\n        var leadingSpace = beforeCursor.match(/^\\s*/);\n        if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n            firstColumnPosition.column += leadingSpace[0].length;\n        this.moveCursorToPosition(firstColumnPosition);\n    };\n    this.moveCursorLineEnd = function() {\n        var lead = this.lead;\n        var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n        if (this.lead.column == lineEnd.column) {\n            var line = this.session.getLine(lineEnd.row);\n            if (lineEnd.column == line.length) {\n                var textEnd = line.search(/\\s+$/);\n                if (textEnd > 0)\n                    lineEnd.column = textEnd;\n            }\n        }\n\n        this.moveCursorTo(lineEnd.row, lineEnd.column);\n    };\n    this.moveCursorFileEnd = function() {\n        var row = this.doc.getLength() - 1;\n        var column = this.doc.getLine(row).length;\n        this.moveCursorTo(row, column);\n    };\n    this.moveCursorFileStart = function() {\n        this.moveCursorTo(0, 0);\n    };\n    this.moveCursorLongWordRight = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n            return;\n        }\n        if (this.session.nonTokenRe.exec(rightOfCursor)) {\n            column += this.session.nonTokenRe.lastIndex;\n            this.session.nonTokenRe.lastIndex = 0;\n            rightOfCursor = line.substring(column);\n        }\n        if (column >= line.length) {\n            this.moveCursorTo(row, line.length);\n            this.moveCursorRight();\n            if (row < this.doc.getLength() - 1)\n                this.moveCursorWordRight();\n            return;\n        }\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            column += this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n\n        this.moveCursorTo(row, column);\n    };\n    this.moveCursorLongWordLeft = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n            return;\n        }\n\n        var str = this.session.getFoldStringAt(row, column, -1);\n        if (str == null) {\n            str = this.doc.getLine(row).substring(0, column);\n        }\n\n        var leftOfCursor = lang.stringReverse(str);\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        if (this.session.nonTokenRe.exec(leftOfCursor)) {\n            column -= this.session.nonTokenRe.lastIndex;\n            leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n            this.session.nonTokenRe.lastIndex = 0;\n        }\n        if (column <= 0) {\n            this.moveCursorTo(row, 0);\n            this.moveCursorLeft();\n            if (row > 0)\n                this.moveCursorWordLeft();\n            return;\n        }\n        if (this.session.tokenRe.exec(leftOfCursor)) {\n            column -= this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n\n        this.moveCursorTo(row, column);\n    };\n\n    this.$shortWordEndIndex = function(rightOfCursor) {\n        var index = 0, ch;\n        var whitespaceRe = /\\s/;\n        var tokenRe = this.session.tokenRe;\n\n        tokenRe.lastIndex = 0;\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            index = this.session.tokenRe.lastIndex;\n        } else {\n            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                index ++;\n\n            if (index < 1) {\n                tokenRe.lastIndex = 0;\n                 while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n                    tokenRe.lastIndex = 0;\n                    index ++;\n                    if (whitespaceRe.test(ch)) {\n                        if (index > 2) {\n                            index--;\n                            break;\n                        } else {\n                            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                                index ++;\n                            if (index > 2)\n                                break;\n                        }\n                    }\n                }\n            }\n        }\n        tokenRe.lastIndex = 0;\n\n        return index;\n    };\n\n    this.moveCursorShortWordRight = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold)\n            return this.moveCursorTo(fold.end.row, fold.end.column);\n\n        if (column == line.length) {\n            var l = this.doc.getLength();\n            do {\n                row++;\n                rightOfCursor = this.doc.getLine(row);\n            } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n            if (!/^\\s+/.test(rightOfCursor))\n                rightOfCursor = \"\";\n            column = 0;\n        }\n\n        var index = this.$shortWordEndIndex(rightOfCursor);\n\n        this.moveCursorTo(row, column + index);\n    };\n\n    this.moveCursorShortWordLeft = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1))\n            return this.moveCursorTo(fold.start.row, fold.start.column);\n\n        var line = this.session.getLine(row).substring(0, column);\n        if (column === 0) {\n            do {\n                row--;\n                line = this.doc.getLine(row);\n            } while (row > 0 && /^\\s*$/.test(line));\n\n            column = line.length;\n            if (!/\\s+$/.test(line))\n                line = \"\";\n        }\n\n        var leftOfCursor = lang.stringReverse(line);\n        var index = this.$shortWordEndIndex(leftOfCursor);\n\n        return this.moveCursorTo(row, column - index);\n    };\n\n    this.moveCursorWordRight = function() {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordRight();\n        else\n            this.moveCursorShortWordRight();\n    };\n\n    this.moveCursorWordLeft = function() {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordLeft();\n        else\n            this.moveCursorShortWordLeft();\n    };\n    this.moveCursorBy = function(rows, chars) {\n        var screenPos = this.session.documentToScreenPosition(\n            this.lead.row,\n            this.lead.column\n        );\n\n        var offsetX;\n\n        if (chars === 0) {\n            if (rows !== 0) {\n                if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n                    offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n                    screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n                } else {\n                    offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n                }\n            }\n\n            if (this.$desiredColumn)\n                screenPos.column = this.$desiredColumn;\n            else\n                this.$desiredColumn = screenPos.column;\n        }\n\n        var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n        \n        if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n            if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n                if (docPos.row > 0 || rows > 0)\n                    docPos.row++;\n            }\n        }\n        this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n    };\n    this.moveCursorToPosition = function(position) {\n        this.moveCursorTo(position.row, position.column);\n    };\n    this.moveCursorTo = function(row, column, keepDesiredColumn) {\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            row = fold.start.row;\n            column = fold.start.column;\n        }\n\n        this.$keepDesiredColumnOnChange = true;\n        var line = this.session.getLine(row);\n        if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n            if (this.lead.row == row && this.lead.column == column + 1)\n                column = column - 1;\n            else\n                column = column + 1;\n        }\n        this.lead.setPosition(row, column);\n        this.$keepDesiredColumnOnChange = false;\n\n        if (!keepDesiredColumn)\n            this.$desiredColumn = null;\n    };\n    this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n        var pos = this.session.screenToDocumentPosition(row, column);\n        this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n    };\n    this.detach = function() {\n        this.lead.detach();\n        this.anchor.detach();\n        this.session = this.doc = null;\n    };\n\n    this.fromOrientedRange = function(range) {\n        this.setSelectionRange(range, range.cursor == range.start);\n        this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n    };\n\n    this.toOrientedRange = function(range) {\n        var r = this.getRange();\n        if (range) {\n            range.start.column = r.start.column;\n            range.start.row = r.start.row;\n            range.end.column = r.end.column;\n            range.end.row = r.end.row;\n        } else {\n            range = r;\n        }\n\n        range.cursor = this.isBackwards() ? range.start : range.end;\n        range.desiredColumn = this.$desiredColumn;\n        return range;\n    };\n    this.getRangeOfMovements = function(func) {\n        var start = this.getCursor();\n        try {\n            func(this);\n            var end = this.getCursor();\n            return Range.fromPoints(start, end);\n        } catch(e) {\n            return Range.fromPoints(start, start);\n        } finally {\n            this.moveCursorToPosition(start);\n        }\n    };\n\n    this.toJSON = function() {\n        if (this.rangeCount) {\n            var data = this.ranges.map(function(r) {\n                var r1 = r.clone();\n                r1.isBackwards = r.cursor == r.start;\n                return r1;\n            });\n        } else {\n            var data = this.getRange();\n            data.isBackwards = this.isBackwards();\n        }\n        return data;\n    };\n\n    this.fromJSON = function(data) {\n        if (data.start == undefined) {\n            if (this.rangeList) {\n                this.toSingleRange(data[0]);\n                for (var i = data.length; i--; ) {\n                    var r = Range.fromPoints(data[i].start, data[i].end);\n                    if (data[i].isBackwards)\n                        r.cursor = r.start;\n                    this.addRange(r, true);\n                }\n                return;\n            } else {\n                data = data[0];\n            }\n        }\n        if (this.rangeList)\n            this.toSingleRange(data);\n        this.setSelectionRange(data, data.isBackwards);\n    };\n\n    this.isEqual = function(data) {\n        if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n            return false;\n        if (!data.length || !this.ranges)\n            return this.getRange().isEqual(data);\n\n        for (var i = this.ranges.length; i--; ) {\n            if (!this.ranges[i].isEqual(data[i]))\n                return false;\n        }\n        return true;\n    };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n    this.states = rules;\n\n    this.regExps = {};\n    this.matchMappings = {};\n    for (var key in this.states) {\n        var state = this.states[key];\n        var ruleRegExps = [];\n        var matchTotal = 0;\n        var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n        var flag = \"g\";\n\n        var splitterRurles = [];\n        for (var i = 0; i < state.length; i++) {\n            var rule = state[i];\n            if (rule.defaultToken)\n                mapping.defaultToken = rule.defaultToken;\n            if (rule.caseInsensitive)\n                flag = \"gi\";\n            if (rule.regex == null)\n                continue;\n\n            if (rule.regex instanceof RegExp)\n                rule.regex = rule.regex.toString().slice(1, -1);\n            var adjustedregex = rule.regex;\n            var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n            if (Array.isArray(rule.token)) {\n                if (rule.token.length == 1 || matchcount == 1) {\n                    rule.token = rule.token[0];\n                } else if (matchcount - 1 != rule.token.length) {\n                    this.reportError(\"number of classes and regexp groups doesn't match\", { \n                        rule: rule,\n                        groupCount: matchcount - 1\n                    });\n                    rule.token = rule.token[0];\n                } else {\n                    rule.tokenArray = rule.token;\n                    rule.token = null;\n                    rule.onMatch = this.$arrayTokens;\n                }\n            } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n                if (matchcount > 1)\n                    rule.onMatch = this.$applyToken;\n                else\n                    rule.onMatch = rule.token;\n            }\n\n            if (matchcount > 1) {\n                if (/\\\\\\d/.test(rule.regex)) {\n                    adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n                        return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n                    });\n                } else {\n                    matchcount = 1;\n                    adjustedregex = this.removeCapturingGroups(rule.regex);\n                }\n                if (!rule.splitRegex && typeof rule.token != \"string\")\n                    splitterRurles.push(rule); // flag will be known only at the very end\n            }\n\n            mapping[matchTotal] = i;\n            matchTotal += matchcount;\n\n            ruleRegExps.push(adjustedregex);\n            if (!rule.onMatch)\n                rule.onMatch = null;\n        }\n        \n        if (!ruleRegExps.length) {\n            mapping[0] = 0;\n            ruleRegExps.push(\"$\");\n        }\n        \n        splitterRurles.forEach(function(rule) {\n            rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n        }, this);\n\n        this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n    }\n};\n\n(function() {\n    this.$setMaxTokenCount = function(m) {\n        MAX_TOKEN_COUNT = m | 0;\n    };\n    \n    this.$applyToken = function(str) {\n        var values = this.splitRegex.exec(str).slice(1);\n        var types = this.token.apply(this, values);\n        if (typeof types === \"string\")\n            return [{type: types, value: str}];\n\n        var tokens = [];\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i]\n                };\n        }\n        return tokens;\n    };\n\n    this.$arrayTokens = function(str) {\n        if (!str)\n            return [];\n        var values = this.splitRegex.exec(str);\n        if (!values)\n            return \"text\";\n        var tokens = [];\n        var types = this.tokenArray;\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i + 1])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i + 1]\n                };\n        }\n        return tokens;\n    };\n\n    this.removeCapturingGroups = function(src) {\n        var r = src.replace(\n            /\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!]|(\\()/g,\n            function(x, y) {return y ? \"(?:\" : x;}\n        );\n        return r;\n    };\n\n    this.createSplitterRegexp = function(src, flag) {\n        if (src.indexOf(\"(?=\") != -1) {\n            var stack = 0;\n            var inChClass = false;\n            var lastCapture = {};\n            src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n                m, esc, parenOpen, parenClose, square, index\n            ) {\n                if (inChClass) {\n                    inChClass = square != \"]\";\n                } else if (square) {\n                    inChClass = true;\n                } else if (parenClose) {\n                    if (stack == lastCapture.stack) {\n                        lastCapture.end = index+1;\n                        lastCapture.stack = -1;\n                    }\n                    stack--;\n                } else if (parenOpen) {\n                    stack++;\n                    if (parenOpen.length != 1) {\n                        lastCapture.stack = stack;\n                        lastCapture.start = index;\n                    }\n                }\n                return m;\n            });\n\n            if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n                src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n        }\n        if (src.charAt(0) != \"^\") src = \"^\" + src;\n        if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n        \n        return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n    };\n    this.getLineTokens = function(line, startState) {\n        if (startState && typeof startState != \"string\") {\n            var stack = startState.slice(0);\n            startState = stack[0];\n            if (startState === \"#tmp\") {\n                stack.shift();\n                startState = stack.shift();\n            }\n        } else\n            var stack = [];\n\n        var currentState = startState || \"start\";\n        var state = this.states[currentState];\n        if (!state) {\n            currentState = \"start\";\n            state = this.states[currentState];\n        }\n        var mapping = this.matchMappings[currentState];\n        var re = this.regExps[currentState];\n        re.lastIndex = 0;\n\n        var match, tokens = [];\n        var lastIndex = 0;\n        var matchAttempts = 0;\n\n        var token = {type: null, value: \"\"};\n\n        while (match = re.exec(line)) {\n            var type = mapping.defaultToken;\n            var rule = null;\n            var value = match[0];\n            var index = re.lastIndex;\n\n            if (index - value.length > lastIndex) {\n                var skipped = line.substring(lastIndex, index - value.length);\n                if (token.type == type) {\n                    token.value += skipped;\n                } else {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: type, value: skipped};\n                }\n            }\n\n            for (var i = 0; i < match.length-2; i++) {\n                if (match[i + 1] === undefined)\n                    continue;\n\n                rule = state[mapping[i]];\n\n                if (rule.onMatch)\n                    type = rule.onMatch(value, currentState, stack, line);\n                else\n                    type = rule.token;\n\n                if (rule.next) {\n                    if (typeof rule.next == \"string\") {\n                        currentState = rule.next;\n                    } else {\n                        currentState = rule.next(currentState, stack);\n                    }\n                    \n                    state = this.states[currentState];\n                    if (!state) {\n                        this.reportError(\"state doesn't exist\", currentState);\n                        currentState = \"start\";\n                        state = this.states[currentState];\n                    }\n                    mapping = this.matchMappings[currentState];\n                    lastIndex = index;\n                    re = this.regExps[currentState];\n                    re.lastIndex = index;\n                }\n                if (rule.consumeLineEnd)\n                    lastIndex = index;\n                break;\n            }\n\n            if (value) {\n                if (typeof type === \"string\") {\n                    if ((!rule || rule.merge !== false) && token.type === type) {\n                        token.value += value;\n                    } else {\n                        if (token.type)\n                            tokens.push(token);\n                        token = {type: type, value: value};\n                    }\n                } else if (type) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: null, value: \"\"};\n                    for (var i = 0; i < type.length; i++)\n                        tokens.push(type[i]);\n                }\n            }\n\n            if (lastIndex == line.length)\n                break;\n\n            lastIndex = index;\n\n            if (matchAttempts++ > MAX_TOKEN_COUNT) {\n                if (matchAttempts > 2 * line.length) {\n                    this.reportError(\"infinite loop with in ace tokenizer\", {\n                        startState: startState,\n                        line: line\n                    });\n                }\n                while (lastIndex < line.length) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {\n                        value: line.substring(lastIndex, lastIndex += 2000),\n                        type: \"overflow\"\n                    };\n                }\n                currentState = \"start\";\n                stack = [];\n                break;\n            }\n        }\n\n        if (token.type)\n            tokens.push(token);\n        \n        if (stack.length > 1) {\n            if (stack[0] !== currentState)\n                stack.unshift(\"#tmp\", currentState);\n        }\n        return {\n            tokens : tokens,\n            state : stack.length ? stack : currentState\n        };\n    };\n    \n    this.reportError = config.reportError;\n    \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"empty_line\",\n            regex : '^$'\n        }, {\n            defaultToken : \"text\"\n        }]\n    };\n};\n\n(function() {\n\n    this.addRules = function(rules, prefix) {\n        if (!prefix) {\n            for (var key in rules)\n                this.$rules[key] = rules[key];\n            return;\n        }\n        for (var key in rules) {\n            var state = rules[key];\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                if (rule.next || rule.onMatch) {\n                    if (typeof rule.next == \"string\") {\n                        if (rule.next.indexOf(prefix) !== 0)\n                            rule.next = prefix + rule.next;\n                    }\n                    if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n                        rule.nextState = prefix + rule.nextState;\n                }\n            }\n            this.$rules[prefix + key] = state;\n        }\n    };\n\n    this.getRules = function() {\n        return this.$rules;\n    };\n\n    this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n        var embedRules = typeof HighlightRules == \"function\"\n            ? new HighlightRules().getRules()\n            : HighlightRules;\n        if (states) {\n            for (var i = 0; i < states.length; i++)\n                states[i] = prefix + states[i];\n        } else {\n            states = [];\n            for (var key in embedRules)\n                states.push(prefix + key);\n        }\n\n        this.addRules(embedRules, prefix);\n\n        if (escapeRules) {\n            var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n            for (var i = 0; i < states.length; i++)\n                addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n        }\n\n        if (!this.$embeds)\n            this.$embeds = [];\n        this.$embeds.push(prefix);\n    };\n\n    this.getEmbeds = function() {\n        return this.$embeds;\n    };\n\n    var pushState = function(currentState, stack) {\n        if (currentState != \"start\" || stack.length)\n            stack.unshift(this.nextState, currentState);\n        return this.nextState;\n    };\n    var popState = function(currentState, stack) {\n        stack.shift();\n        return stack.shift() || \"start\";\n    };\n\n    this.normalizeRules = function() {\n        var id = 0;\n        var rules = this.$rules;\n        function processState(key) {\n            var state = rules[key];\n            state.processed = true;\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                var toInsert = null;\n                if (Array.isArray(rule)) {\n                    toInsert = rule;\n                    rule = {};\n                }\n                if (!rule.regex && rule.start) {\n                    rule.regex = rule.start;\n                    if (!rule.next)\n                        rule.next = [];\n                    rule.next.push({\n                        defaultToken: rule.token\n                    }, {\n                        token: rule.token + \".end\",\n                        regex: rule.end || rule.start,\n                        next: \"pop\"\n                    });\n                    rule.token = rule.token + \".start\";\n                    rule.push = true;\n                }\n                var next = rule.next || rule.push;\n                if (next && Array.isArray(next)) {\n                    var stateName = rule.stateName;\n                    if (!stateName)  {\n                        stateName = rule.token;\n                        if (typeof stateName != \"string\")\n                            stateName = stateName[0] || \"\";\n                        if (rules[stateName])\n                            stateName += id++;\n                    }\n                    rules[stateName] = next;\n                    rule.next = stateName;\n                    processState(stateName);\n                } else if (next == \"pop\") {\n                    rule.next = popState;\n                }\n\n                if (rule.push) {\n                    rule.nextState = rule.next || rule.push;\n                    rule.next = pushState;\n                    delete rule.push;\n                }\n\n                if (rule.rules) {\n                    for (var r in rule.rules) {\n                        if (rules[r]) {\n                            if (rules[r].push)\n                                rules[r].push.apply(rules[r], rule.rules[r]);\n                        } else {\n                            rules[r] = rule.rules[r];\n                        }\n                    }\n                }\n                var includeName = typeof rule == \"string\" ? rule : rule.include;\n                if (includeName) {\n                    if (Array.isArray(includeName))\n                        toInsert = includeName.map(function(x) { return rules[x]; });\n                    else\n                        toInsert = rules[includeName];\n                }\n\n                if (toInsert) {\n                    var args = [i, 1].concat(toInsert);\n                    if (rule.noEscape)\n                        args = args.filter(function(x) {return !x.next;});\n                    state.splice.apply(state, args);\n                    i--;\n                }\n                \n                if (rule.keywordMap) {\n                    rule.token = this.createKeywordMapper(\n                        rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n                    );\n                    delete rule.defaultToken;\n                }\n            }\n        }\n        Object.keys(rules).forEach(processState, this);\n    };\n\n    this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n        var keywords = Object.create(null);\n        Object.keys(map).forEach(function(className) {\n            var a = map[className];\n            if (ignoreCase)\n                a = a.toLowerCase();\n            var list = a.split(splitChar || \"|\");\n            for (var i = list.length; i--; )\n                keywords[list[i]] = className;\n        });\n        if (Object.getPrototypeOf(keywords)) {\n            keywords.__proto__ = null;\n        }\n        this.$keywordList = Object.keys(keywords);\n        map = null;\n        return ignoreCase\n            ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n            : function(value) {return keywords[value] || defaultToken; };\n    };\n\n    this.getKeywords = function() {\n        return this.$keywords;\n    };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n   this.$behaviours = {};\n};\n\n(function () {\n\n    this.add = function (name, action, callback) {\n        switch (undefined) {\n          case this.$behaviours:\n              this.$behaviours = {};\n          case this.$behaviours[name]:\n              this.$behaviours[name] = {};\n        }\n        this.$behaviours[name][action] = callback;\n    };\n    \n    this.addBehaviours = function (behaviours) {\n        for (var key in behaviours) {\n            for (var action in behaviours[key]) {\n                this.add(key, action, behaviours[key][action]);\n            }\n        }\n    };\n    \n    this.remove = function (name) {\n        if (this.$behaviours && this.$behaviours[name]) {\n            delete this.$behaviours[name];\n        }\n    };\n    \n    this.inherit = function (mode, filter) {\n        if (typeof mode === \"function\") {\n            var behaviours = new mode().getBehaviours(filter);\n        } else {\n            var behaviours = mode.getBehaviours(filter);\n        }\n        this.addBehaviours(behaviours);\n    };\n    \n    this.getBehaviours = function (filter) {\n        if (!filter) {\n            return this.$behaviours;\n        } else {\n            var ret = {};\n            for (var i = 0; i < filter.length; i++) {\n                if (this.$behaviours[filter[i]]) {\n                    ret[filter[i]] = this.$behaviours[filter[i]];\n                }\n            }\n            return ret;\n        }\n    };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n    this.$session = session;\n    this.$row = initialRow;\n    this.$rowTokens = session.getTokens(initialRow);\n\n    var token = session.getTokenAt(initialRow, initialColumn);\n    this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n    this.stepBackward = function() {\n        this.$tokenIndex -= 1;\n        \n        while (this.$tokenIndex < 0) {\n            this.$row -= 1;\n            if (this.$row < 0) {\n                this.$row = 0;\n                return null;\n            }\n                \n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = this.$rowTokens.length - 1;\n        }\n            \n        return this.$rowTokens[this.$tokenIndex];\n    };   \n    this.stepForward = function() {\n        this.$tokenIndex += 1;\n        var rowCount;\n        while (this.$tokenIndex >= this.$rowTokens.length) {\n            this.$row += 1;\n            if (!rowCount)\n                rowCount = this.$session.getLength();\n            if (this.$row >= rowCount) {\n                this.$row = rowCount - 1;\n                return null;\n            }\n\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = 0;\n        }\n            \n        return this.$rowTokens[this.$tokenIndex];\n    };      \n    this.getCurrentToken = function () {\n        return this.$rowTokens[this.$tokenIndex];\n    };      \n    this.getCurrentTokenRow = function () {\n        return this.$row;\n    };     \n    this.getCurrentTokenColumn = function() {\n        var rowTokens = this.$rowTokens;\n        var tokenIndex = this.$tokenIndex;\n        var column = rowTokens[tokenIndex].start;\n        if (column !== undefined)\n            return column;\n            \n        column = 0;\n        while (tokenIndex > 0) {\n            tokenIndex -= 1;\n            column += rowTokens[tokenIndex].value.length;\n        }\n        \n        return column;  \n    };\n    this.getCurrentTokenPosition = function() {\n        return {row: this.$row, column: this.getCurrentTokenColumn()};\n    };\n    this.getCurrentTokenRange = function() {\n        var token = this.$rowTokens[this.$tokenIndex];\n        var column = this.getCurrentTokenColumn();\n        return new Range(this.$row, column, this.$row, column + token.value.length);\n    };\n    \n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = {rangeCount: editor.multiSelect.rangeCount};\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n                0,\n                selection.start.column + 1,\n                rowDiff,\n                selection.end.column + (rowDiff ? 0 : 1)\n            ]\n    };\n};\n\nvar CstyleBehaviour = function(options) {\n    this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                } else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n                if (!openBracePos)\n                     return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            } else if (closing) {\n                var next_indent = this.$getIndent(line);\n            } else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        } else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n\n    this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            } else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n\n    this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n        if (text.length == 1 && quotes[text]) {\n            if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) \n                return;\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            } else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column-1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                \n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                \n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                \n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                    if (pair && /string\\.end/.test(rightToken.type))\n                        pair = false;\n                } else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(leftChar);\n                    if (isWordBefore || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1,1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n};\n\n    \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isMaybeInsertedClosing(cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar wordChars = [48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2];\n\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n    str.push(code += wordChars[i]);\n    if (wordChars[i + 1])\n        str.push(45, code += wordChars[i + 1]);\n}\n\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar config = require(\"../config\");\n\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n    this.$defaultBehaviour = new CstyleBehaviour();\n\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n\n    this.getTokenizer = function() {\n        if (!this.$tokenizer) {\n            this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n            this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n        }\n        return this.$tokenizer;\n    };\n\n    this.lineCommentStart = \"\";\n    this.blockComment = \"\";\n\n    this.toggleCommentLines = function(state, session, startRow, endRow) {\n        var doc = session.doc;\n\n        var ignoreBlankLines = true;\n        var shouldRemove = true;\n        var minIndent = Infinity;\n        var tabSize = session.getTabSize();\n        var insertAtTabStop = false;\n\n        if (!this.lineCommentStart) {\n            if (!this.blockComment)\n                return false;\n            var lineCommentStart = this.blockComment.start;\n            var lineCommentEnd = this.blockComment.end;\n            var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n            var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n            var comment = function(line, i) {\n                if (testRemove(line, i))\n                    return;\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n                    doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n                }\n            };\n\n            var uncomment = function(line, i) {\n                var m;\n                if (m = line.match(regexpEnd))\n                    doc.removeInLine(i, line.length - m[0].length, line.length);\n                if (m = line.match(regexpStart))\n                    doc.removeInLine(i, m[1].length, m[0].length);\n            };\n\n            var testRemove = function(line, row) {\n                if (regexpStart.test(line))\n                    return true;\n                var tokens = session.getTokens(row);\n                for (var i = 0; i < tokens.length; i++) {\n                    if (tokens[i].type === \"comment\")\n                        return true;\n                }\n            };\n        } else {\n            if (Array.isArray(this.lineCommentStart)) {\n                var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n                var lineCommentStart = this.lineCommentStart[0];\n            } else {\n                var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n                var lineCommentStart = this.lineCommentStart;\n            }\n            regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n            \n            insertAtTabStop = session.getUseSoftTabs();\n\n            var uncomment = function(line, i) {\n                var m = line.match(regexpStart);\n                if (!m) return;\n                var start = m[1].length, end = m[0].length;\n                if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n                    end--;\n                doc.removeInLine(i, start, end);\n            };\n            var commentWithSpace = lineCommentStart + \" \";\n            var comment = function(line, i) {\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    if (shouldInsertSpace(line, minIndent, minIndent))\n                        doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n                    else\n                        doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n                }\n            };\n            var testRemove = function(line, i) {\n                return regexpStart.test(line);\n            };\n            \n            var shouldInsertSpace = function(line, before, after) {\n                var spaces = 0;\n                while (before-- && line.charAt(before) == \" \")\n                    spaces++;\n                if (spaces % tabSize != 0)\n                    return false;\n                var spaces = 0;\n                while (line.charAt(after++) == \" \")\n                    spaces++;\n                if (tabSize > 2)\n                    return spaces % tabSize != tabSize - 1;\n                else\n                    return spaces % tabSize == 0;\n            };\n        }\n\n        function iter(fun) {\n            for (var i = startRow; i <= endRow; i++)\n                fun(doc.getLine(i), i);\n        }\n\n\n        var minEmptyLength = Infinity;\n        iter(function(line, i) {\n            var indent = line.search(/\\S/);\n            if (indent !== -1) {\n                if (indent < minIndent)\n                    minIndent = indent;\n                if (shouldRemove && !testRemove(line, i))\n                    shouldRemove = false;\n            } else if (minEmptyLength > line.length) {\n                minEmptyLength = line.length;\n            }\n        });\n\n        if (minIndent == Infinity) {\n            minIndent = minEmptyLength;\n            ignoreBlankLines = false;\n            shouldRemove = false;\n        }\n\n        if (insertAtTabStop && minIndent % tabSize != 0)\n            minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n        iter(shouldRemove ? uncomment : comment);\n    };\n\n    this.toggleBlockComment = function(state, session, range, cursor) {\n        var comment = this.blockComment;\n        if (!comment)\n            return;\n        if (!comment.start && comment[0])\n            comment = comment[0];\n\n        var iterator = new TokenIterator(session, cursor.row, cursor.column);\n        var token = iterator.getCurrentToken();\n\n        var sel = session.selection;\n        var initialRange = session.selection.toOrientedRange();\n        var startRow, colDiff;\n\n        if (token && /comment/.test(token.type)) {\n            var startRange, endRange;\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.start);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    startRange = new Range(row, column, row, column + comment.start.length);\n                    break;\n                }\n                token = iterator.stepBackward();\n            }\n\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.end);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    endRange = new Range(row, column, row, column + comment.end.length);\n                    break;\n                }\n                token = iterator.stepForward();\n            }\n            if (endRange)\n                session.remove(endRange);\n            if (startRange) {\n                session.remove(startRange);\n                startRow = startRange.start.row;\n                colDiff = -comment.start.length;\n            }\n        } else {\n            colDiff = comment.start.length;\n            startRow = range.start.row;\n            session.insert(range.end, comment.end);\n            session.insert(range.start, comment.start);\n        }\n        if (initialRange.start.row == startRow)\n            initialRange.start.column += colDiff;\n        if (initialRange.end.row == startRow)\n            initialRange.end.column += colDiff;\n        session.selection.fromOrientedRange(initialRange);\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.createModeDelegates = function (mapping) {\n        this.$embeds = [];\n        this.$modes = {};\n        for (var i in mapping) {\n            if (mapping[i]) {\n                var Mode = mapping[i];\n                var id = Mode.prototype.$id;\n                var mode = config.$modes[id];\n                if (!mode)\n                    config.$modes[id] = mode = new Mode();\n                if (!config.$modes[i])\n                    config.$modes[i] = mode;\n                this.$embeds.push(i);\n                this.$modes[i] = mode;\n            }\n        }\n\n        var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n            \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n        for (var i = 0; i < delegations.length; i++) {\n            (function(scope) {\n              var functionName = delegations[i];\n              var defaultHandler = scope[functionName];\n              scope[delegations[i]] = function() {\n                  return this.$delegator(functionName, arguments, defaultHandler);\n              };\n            }(this));\n        }\n    };\n\n    this.$delegator = function(method, args, defaultHandler) {\n        var state = args[0] || \"start\";\n        if (typeof state != \"string\") {\n            if (Array.isArray(state[2])) {\n                var language = state[2][state[2].length - 1];\n                var mode = this.$modes[language];\n                if (mode)\n                    return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n            }\n            state = state[0] || \"start\";\n        }\n            \n        for (var i = 0; i < this.$embeds.length; i++) {\n            if (!this.$modes[this.$embeds[i]]) continue;\n\n            var split = state.split(this.$embeds[i]);\n            if (!split[0] && split[1]) {\n                args[0] = split[1];\n                var mode = this.$modes[this.$embeds[i]];\n                return mode[method].apply(mode, args);\n            }\n        }\n        var ret = defaultHandler.apply(this, args);\n        return defaultHandler ? ret : undefined;\n    };\n\n    this.transformAction = function(state, action, editor, session, param) {\n        if (this.$behaviour) {\n            var behaviours = this.$behaviour.getBehaviours();\n            for (var key in behaviours) {\n                if (behaviours[key][action]) {\n                    var ret = behaviours[key][action].apply(this, arguments);\n                    if (ret) {\n                        return ret;\n                    }\n                }\n            }\n        }\n    };\n    \n    this.getKeywords = function(append) {\n        if (!this.completionKeywords) {\n            var rules = this.$tokenizer.rules;\n            var completionKeywords = [];\n            for (var rule in rules) {\n                var ruleItr = rules[rule];\n                for (var r = 0, l = ruleItr.length; r < l; r++) {\n                    if (typeof ruleItr[r].token === \"string\") {\n                        if (/keyword|support|storage/.test(ruleItr[r].token))\n                            completionKeywords.push(ruleItr[r].regex);\n                    }\n                    else if (typeof ruleItr[r].token === \"object\") {\n                        for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {    \n                            if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n                                var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n                                completionKeywords.push(rule.substr(1, rule.length - 2));\n                            }\n                        }\n                    }\n                }\n            }\n            this.completionKeywords = completionKeywords;\n        }\n        if (!append)\n            return this.$keywordList;\n        return completionKeywords.concat(this.$keywordList || []);\n    };\n    \n    this.$createKeywordList = function() {\n        if (!this.$highlightRules)\n            this.getTokenizer();\n        return this.$keywordList = this.$highlightRules.$keywordList || [];\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var keywords = this.$keywordList || this.$createKeywordList();\n        return keywords.map(function(word) {\n            return {\n                name: word,\n                value: word,\n                score: 0,\n                meta: \"keyword\"\n            };\n        });\n    };\n\n    this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n    this.running = false;\n    this.lines = [];\n    this.states = [];\n    this.currentLine = 0;\n    this.tokenizer = tokenizer;\n\n    var self = this;\n\n    this.$worker = function() {\n        if (!self.running) { return; }\n\n        var workerStart = new Date();\n        var currentLine = self.currentLine;\n        var endLine = -1;\n        var doc = self.doc;\n\n        var startLine = currentLine;\n        while (self.lines[currentLine])\n            currentLine++;\n        \n        var len = doc.getLength();\n        var processedLines = 0;\n        self.running = false;\n        while (currentLine < len) {\n            self.$tokenizeRow(currentLine);\n            endLine = currentLine;\n            do {\n                currentLine++;\n            } while (self.lines[currentLine]);\n            processedLines ++;\n            if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n                self.running = setTimeout(self.$worker, 20);\n                break;\n            }\n        }\n        self.currentLine = currentLine;\n        \n        if (endLine == -1)\n            endLine = currentLine;\n        \n        if (startLine <= endLine)\n            self.fireUpdateEvent(startLine, endLine);\n    };\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n    this.setTokenizer = function(tokenizer) {\n        this.tokenizer = tokenizer;\n        this.lines = [];\n        this.states = [];\n\n        this.start(0);\n    };\n    this.setDocument = function(doc) {\n        this.doc = doc;\n        this.lines = [];\n        this.states = [];\n\n        this.stop();\n    };\n    this.fireUpdateEvent = function(firstRow, lastRow) {\n        var data = {\n            first: firstRow,\n            last: lastRow\n        };\n        this._signal(\"update\", {data: data});\n    };\n    this.start = function(startRow) {\n        this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n        this.lines.splice(this.currentLine, this.lines.length);\n        this.states.splice(this.currentLine, this.states.length);\n\n        this.stop();\n        this.running = setTimeout(this.$worker, 700);\n    };\n    \n    this.scheduleStart = function() {\n        if (!this.running)\n            this.running = setTimeout(this.$worker, 700);\n    };\n\n    this.$updateOnChange = function(delta) {\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n\n        if (len === 0) {\n            this.lines[startRow] = null;\n        } else if (delta.action == \"remove\") {\n            this.lines.splice(startRow, len + 1, null);\n            this.states.splice(startRow, len + 1, null);\n        } else {\n            var args = Array(len + 1);\n            args.unshift(startRow, 1);\n            this.lines.splice.apply(this.lines, args);\n            this.states.splice.apply(this.states, args);\n        }\n\n        this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n        this.stop();\n    };\n    this.stop = function() {\n        if (this.running)\n            clearTimeout(this.running);\n        this.running = false;\n    };\n    this.getTokens = function(row) {\n        return this.lines[row] || this.$tokenizeRow(row);\n    };\n    this.getState = function(row) {\n        if (this.currentLine == row)\n            this.$tokenizeRow(row);\n        return this.states[row] || \"start\";\n    };\n\n    this.$tokenizeRow = function(row) {\n        var line = this.doc.getLine(row);\n        var state = this.states[row - 1];\n\n        var data = this.tokenizer.getLineTokens(line, state, row);\n\n        if (this.states[row] + \"\" !== data.state + \"\") {\n            this.states[row] = data.state;\n            this.lines[row + 1] = null;\n            if (this.currentLine > row + 1)\n                this.currentLine = row + 1;\n        } else if (this.currentLine == row) {\n            this.currentLine = row + 1;\n        }\n\n        return this.lines[row] = data.tokens;\n    };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n    this.setRegexp(regExp);\n    this.clazz = clazz;\n    this.type = type || \"text\";\n};\n\n(function() {\n    this.MAX_RANGES = 500;\n    \n    this.setRegexp = function(regExp) {\n        if (this.regExp+\"\" == regExp+\"\")\n            return;\n        this.regExp = regExp;\n        this.cache = [];\n    };\n\n    this.update = function(html, markerLayer, session, config) {\n        if (!this.regExp)\n            return;\n        var start = config.firstRow, end = config.lastRow;\n\n        for (var i = start; i <= end; i++) {\n            var ranges = this.cache[i];\n            if (ranges == null) {\n                ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n                if (ranges.length > this.MAX_RANGES)\n                    ranges = ranges.slice(0, this.MAX_RANGES);\n                ranges = ranges.map(function(match) {\n                    return new Range(i, match.offset, i, match.offset + match.length);\n                });\n                this.cache[i] = ranges.length ? ranges : \"\";\n            }\n\n            for (var j = ranges.length; j --; ) {\n                markerLayer.drawSingleLineMarker(\n                    html, ranges[j].toScreenRange(session), this.clazz, config);\n            }\n        }\n    };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n    this.foldData = foldData;\n    if (Array.isArray(folds)) {\n        this.folds = folds;\n    } else {\n        folds = this.folds = [ folds ];\n    }\n\n    var last = folds[folds.length - 1];\n    this.range = new Range(folds[0].start.row, folds[0].start.column,\n                           last.end.row, last.end.column);\n    this.start = this.range.start;\n    this.end   = this.range.end;\n\n    this.folds.forEach(function(fold) {\n        fold.setFoldLine(this);\n    }, this);\n}\n\n(function() {\n    this.shiftRow = function(shift) {\n        this.start.row += shift;\n        this.end.row += shift;\n        this.folds.forEach(function(fold) {\n            fold.start.row += shift;\n            fold.end.row += shift;\n        });\n    };\n\n    this.addFold = function(fold) {\n        if (fold.sameRow) {\n            if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n                throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n            }\n            this.folds.push(fold);\n            this.folds.sort(function(a, b) {\n                return -a.range.compareEnd(b.start.row, b.start.column);\n            });\n            if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n                this.end.row = fold.end.row;\n                this.end.column =  fold.end.column;\n            } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n                this.start.row = fold.start.row;\n                this.start.column = fold.start.column;\n            }\n        } else if (fold.start.row == this.end.row) {\n            this.folds.push(fold);\n            this.end.row = fold.end.row;\n            this.end.column = fold.end.column;\n        } else if (fold.end.row == this.start.row) {\n            this.folds.unshift(fold);\n            this.start.row = fold.start.row;\n            this.start.column = fold.start.column;\n        } else {\n            throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n        }\n        fold.foldLine = this;\n    };\n\n    this.containsRow = function(row) {\n        return row >= this.start.row && row <= this.end.row;\n    };\n\n    this.walk = function(callback, endRow, endColumn) {\n        var lastEnd = 0,\n            folds = this.folds,\n            fold,\n            cmp, stop, isNewRow = true;\n\n        if (endRow == null) {\n            endRow = this.end.row;\n            endColumn = this.end.column;\n        }\n\n        for (var i = 0; i < folds.length; i++) {\n            fold = folds[i];\n\n            cmp = fold.range.compareStart(endRow, endColumn);\n            if (cmp == -1) {\n                callback(null, endRow, endColumn, lastEnd, isNewRow);\n                return;\n            }\n\n            stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n            stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n            if (stop || cmp === 0) {\n                return;\n            }\n            isNewRow = !fold.sameRow;\n            lastEnd = fold.end.column;\n        }\n        callback(null, endRow, endColumn, lastEnd, isNewRow);\n    };\n\n    this.getNextFoldTo = function(row, column) {\n        var fold, cmp;\n        for (var i = 0; i < this.folds.length; i++) {\n            fold = this.folds[i];\n            cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                return {\n                    fold: fold,\n                    kind: \"after\"\n                };\n            } else if (cmp === 0) {\n                return {\n                    fold: fold,\n                    kind: \"inside\"\n                };\n            }\n        }\n        return null;\n    };\n\n    this.addRemoveChars = function(row, column, len) {\n        var ret = this.getNextFoldTo(row, column),\n            fold, folds;\n        if (ret) {\n            fold = ret.fold;\n            if (ret.kind == \"inside\"\n                && fold.start.column != column\n                && fold.start.row != row)\n            {\n                window.console && window.console.log(row, column, fold);\n            } else if (fold.start.row == row) {\n                folds = this.folds;\n                var i = folds.indexOf(fold);\n                if (i === 0) {\n                    this.start.column += len;\n                }\n                for (i; i < folds.length; i++) {\n                    fold = folds[i];\n                    fold.start.column += len;\n                    if (!fold.sameRow) {\n                        return;\n                    }\n                    fold.end.column += len;\n                }\n                this.end.column += len;\n            }\n        }\n    };\n\n    this.split = function(row, column) {\n        var pos = this.getNextFoldTo(row, column);\n        \n        if (!pos || pos.kind == \"inside\")\n            return null;\n            \n        var fold = pos.fold;\n        var folds = this.folds;\n        var foldData = this.foldData;\n        \n        var i = folds.indexOf(fold);\n        var foldBefore = folds[i - 1];\n        this.end.row = foldBefore.end.row;\n        this.end.column = foldBefore.end.column;\n        folds = folds.splice(i, folds.length - i);\n\n        var newFoldLine = new FoldLine(foldData, folds);\n        foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n        return newFoldLine;\n    };\n\n    this.merge = function(foldLineNext) {\n        var folds = foldLineNext.folds;\n        for (var i = 0; i < folds.length; i++) {\n            this.addFold(folds[i]);\n        }\n        var foldData = this.foldData;\n        foldData.splice(foldData.indexOf(foldLineNext), 1);\n    };\n\n    this.toString = function() {\n        var ret = [this.range.toString() + \": [\" ];\n\n        this.folds.forEach(function(fold) {\n            ret.push(\"  \" + fold.toString());\n        });\n        ret.push(\"]\");\n        return ret.join(\"\\n\");\n    };\n\n    this.idxToPosition = function(idx) {\n        var lastFoldEndColumn = 0;\n\n        for (var i = 0; i < this.folds.length; i++) {\n            var fold = this.folds[i];\n\n            idx -= fold.start.column - lastFoldEndColumn;\n            if (idx < 0) {\n                return {\n                    row: fold.start.row,\n                    column: fold.start.column + idx\n                };\n            }\n\n            idx -= fold.placeholder.length;\n            if (idx < 0) {\n                return fold.start;\n            }\n\n            lastFoldEndColumn = fold.end.column;\n        }\n\n        return {\n            row: this.end.row,\n            column: this.end.column + idx\n        };\n    };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n    this.ranges = [];\n};\n\n(function() {\n    this.comparePoints = comparePoints;\n\n    this.pointIndex = function(pos, excludeEdges, startIndex) {\n        var list = this.ranges;\n\n        for (var i = startIndex || 0; i < list.length; i++) {\n            var range = list[i];\n            var cmpEnd = comparePoints(pos, range.end);\n            if (cmpEnd > 0)\n                continue;\n            var cmpStart = comparePoints(pos, range.start);\n            if (cmpEnd === 0)\n                return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n            if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n                return i;\n\n            return -i-1;\n        }\n        return -i - 1;\n    };\n\n    this.add = function(range) {\n        var excludeEdges = !range.isEmpty();\n        var startIndex = this.pointIndex(range.start, excludeEdges);\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n\n        var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        else\n            endIndex++;\n        return this.ranges.splice(startIndex, endIndex - startIndex, range);\n    };\n\n    this.addList = function(list) {\n        var removed = [];\n        for (var i = list.length; i--; ) {\n            removed.push.apply(removed, this.add(list[i]));\n        }\n        return removed;\n    };\n\n    this.substractPoint = function(pos) {\n        var i = this.pointIndex(pos);\n\n        if (i >= 0)\n            return this.ranges.splice(i, 1);\n    };\n    this.merge = function() {\n        var removed = [];\n        var list = this.ranges;\n        \n        list = list.sort(function(a, b) {\n            return comparePoints(a.start, b.start);\n        });\n        \n        var next = list[0], range;\n        for (var i = 1; i < list.length; i++) {\n            range = next;\n            next = list[i];\n            var cmp = comparePoints(range.end, next.start);\n            if (cmp < 0)\n                continue;\n\n            if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n                continue;\n\n            if (comparePoints(range.end, next.end) < 0) {\n                range.end.row = next.end.row;\n                range.end.column = next.end.column;\n            }\n\n            list.splice(i, 1);\n            removed.push(next);\n            next = range;\n            i--;\n        }\n        \n        this.ranges = list;\n\n        return removed;\n    };\n\n    this.contains = function(row, column) {\n        return this.pointIndex({row: row, column: column}) >= 0;\n    };\n\n    this.containsPoint = function(pos) {\n        return this.pointIndex(pos) >= 0;\n    };\n\n    this.rangeAtPoint = function(pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges[i];\n    };\n\n\n    this.clipRows = function(startRow, endRow) {\n        var list = this.ranges;\n        if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n            return [];\n\n        var startIndex = this.pointIndex({row: startRow, column: 0});\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n\n        var clipped = [];\n        for (var i = startIndex; i < endIndex; i++) {\n            clipped.push(list[i]);\n        }\n        return clipped;\n    };\n\n    this.removeAll = function() {\n        return this.ranges.splice(0, this.ranges.length);\n    };\n\n    this.attach = function(session) {\n        if (this.session)\n            this.detach();\n\n        this.session = session;\n        this.onChange = this.$onChange.bind(this);\n\n        this.session.on('change', this.onChange);\n    };\n\n    this.detach = function() {\n        if (!this.session)\n            return;\n        this.session.removeListener('change', this.onChange);\n        this.session = null;\n    };\n\n    this.$onChange = function(delta) {\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var ranges = this.ranges;\n        for (var i = 0, n = ranges.length; i < n; i++) {\n            var r = ranges[i];\n            if (r.end.row >= startRow)\n                break;\n        }\n        \n        if (delta.action == \"insert\") {\n            var lineDif = endRow - startRow;\n            var colDiff = -start.column + end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                if (r.start.row > startRow)\n                    break;\n    \n                if (r.start.row == startRow && r.start.column >= start.column) {\n                    if (r.start.column == start.column && this.$insertRight) {\n                    } else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                if (r.end.row == startRow && r.end.column >= start.column) {\n                    if (r.end.column == start.column && this.$insertRight) {\n                        continue;\n                    }\n                    if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n                        if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n                            r.end.column -= colDiff;\n                    }\n                    r.end.column += colDiff;\n                    r.end.row += lineDif;\n                }\n            }\n        } else {\n            var lineDif = startRow - endRow;\n            var colDiff = start.column - end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                \n                if (r.start.row > endRow)\n                    break;\n                    \n                if (r.end.row < endRow\n                    && (\n                        startRow < r.end.row \n                        || startRow == r.end.row && start.column < r.end.column\n                    )\n                ) {\n                    r.end.row = startRow;\n                    r.end.column = start.column;\n                }\n                else if (r.end.row == endRow) {\n                    if (r.end.column <= end.column) {\n                        if (lineDif || r.end.column > start.column) {\n                            r.end.column = start.column;\n                            r.end.row = start.row;\n                        }\n                    }\n                    else {\n                        r.end.column += colDiff;\n                        r.end.row += lineDif;\n                    }\n                }\n                else if (r.end.row > endRow) {\n                    r.end.row += lineDif;\n                }\n                \n                if (r.start.row < endRow\n                    && (\n                        startRow < r.start.row \n                        || startRow == r.start.row && start.column < r.start.column\n                    )\n                ) {\n                    r.start.row = startRow;\n                    r.start.column = start.column;\n                }\n                else if (r.start.row == endRow) {\n                    if (r.start.column <= end.column) {\n                        if (lineDif || r.start.column > start.column) {\n                            r.start.column = start.column;\n                            r.start.row = start.row;\n                        }\n                    }\n                    else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                else if (r.start.row > endRow) {\n                    r.start.row += lineDif;\n                }\n            }\n        }\n\n        if (lineDif != 0 && i < n) {\n            for (; i < n; i++) {\n                var r = ranges[i];\n                r.start.row += lineDif;\n                r.end.row += lineDif;\n            }\n        }\n    };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n    this.foldLine = null;\n    this.placeholder = placeholder;\n    this.range = range;\n    this.start = range.start;\n    this.end = range.end;\n\n    this.sameRow = range.start.row == range.end.row;\n    this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n    this.toString = function() {\n        return '\"' + this.placeholder + '\" ' + this.range.toString();\n    };\n\n    this.setFoldLine = function(foldLine) {\n        this.foldLine = foldLine;\n        this.subFolds.forEach(function(fold) {\n            fold.setFoldLine(foldLine);\n        });\n    };\n\n    this.clone = function() {\n        var range = this.range.clone();\n        var fold = new Fold(range, this.placeholder);\n        this.subFolds.forEach(function(subFold) {\n            fold.subFolds.push(subFold.clone());\n        });\n        fold.collapseChildren = this.collapseChildren;\n        return fold;\n    };\n\n    this.addSubFold = function(fold) {\n        if (this.range.isEqual(fold))\n            return;\n\n        if (!this.range.containsRange(fold))\n            throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n        consumeRange(fold, this.start);\n\n        var row = fold.start.row, column = fold.start.column;\n        for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n            cmp = this.subFolds[i].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterStart = this.subFolds[i];\n\n        if (cmp == 0)\n            return afterStart.addSubFold(fold);\n        var row = fold.range.end.row, column = fold.range.end.column;\n        for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n            cmp = this.subFolds[j].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterEnd = this.subFolds[j];\n\n        if (cmp == 0)\n            throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n        var consumedFolds = this.subFolds.splice(i, j - i, fold);\n        fold.setFoldLine(this.foldLine);\n\n        return fold;\n    };\n    \n    this.restoreRange = function(range) {\n        return restoreRange(range, this.start);\n    };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n    point.row -= anchor.row;\n    if (point.row == 0)\n        point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n    consumePoint(range.start, anchor);\n    consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n    if (point.row == 0)\n        point.column += anchor.column;\n    point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n    restorePoint(range.start, anchor);\n    restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n    this.getFoldAt = function(row, column, side) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n\n        var folds = foldLine.folds;\n        for (var i = 0; i < folds.length; i++) {\n            var fold = folds[i];\n            if (fold.range.contains(row, column)) {\n                if (side == 1 && fold.range.isEnd(row, column)) {\n                    continue;\n                } else if (side == -1 && fold.range.isStart(row, column)) {\n                    continue;\n                }\n                return fold;\n            }\n        }\n    };\n    this.getFoldsInRange = function(range) {\n        var start = range.start;\n        var end = range.end;\n        var foldLines = this.$foldData;\n        var foundFolds = [];\n\n        start.column += 1;\n        end.column -= 1;\n\n        for (var i = 0; i < foldLines.length; i++) {\n            var cmp = foldLines[i].range.compareRange(range);\n            if (cmp == 2) {\n                continue;\n            }\n            else if (cmp == -2) {\n                break;\n            }\n\n            var folds = foldLines[i].folds;\n            for (var j = 0; j < folds.length; j++) {\n                var fold = folds[j];\n                cmp = fold.range.compareRange(range);\n                if (cmp == -2) {\n                    break;\n                } else if (cmp == 2) {\n                    continue;\n                } else\n                if (cmp == 42) {\n                    break;\n                }\n                foundFolds.push(fold);\n            }\n        }\n        start.column -= 1;\n        end.column += 1;\n\n        return foundFolds;\n    };\n\n    this.getFoldsInRangeList = function(ranges) {\n        if (Array.isArray(ranges)) {\n            var folds = [];\n            ranges.forEach(function(range) {\n                folds = folds.concat(this.getFoldsInRange(range));\n            }, this);\n        } else {\n            var folds = this.getFoldsInRange(ranges);\n        }\n        return folds;\n    };\n    this.getAllFolds = function() {\n        var folds = [];\n        var foldLines = this.$foldData;\n        \n        for (var i = 0; i < foldLines.length; i++)\n            for (var j = 0; j < foldLines[i].folds.length; j++)\n                folds.push(foldLines[i].folds[j]);\n\n        return folds;\n    };\n    this.getFoldStringAt = function(row, column, trim, foldLine) {\n        foldLine = foldLine || this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n\n        var lastFold = {\n            end: { column: 0 }\n        };\n        var str, fold;\n        for (var i = 0; i < foldLine.folds.length; i++) {\n            fold = foldLine.folds[i];\n            var cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                str = this\n                    .getLine(fold.start.row)\n                    .substring(lastFold.end.column, fold.start.column);\n                break;\n            }\n            else if (cmp === 0) {\n                return null;\n            }\n            lastFold = fold;\n        }\n        if (!str)\n            str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n        if (trim == -1)\n            return str.substring(0, column - lastFold.end.column);\n        else if (trim == 1)\n            return str.substring(column - lastFold.end.column);\n        else\n            return str;\n    };\n\n    this.getFoldLine = function(docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n                return foldLine;\n            } else if (foldLine.end.row > docRow) {\n                return null;\n            }\n        }\n        return null;\n    };\n    this.getNextFoldLine = function(docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n        }\n        return null;\n    };\n\n    this.getFoldedRowCount = function(first, last) {\n        var foldData = this.$foldData, rowCount = last-first+1;\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i],\n                end = foldLine.end.row,\n                start = foldLine.start.row;\n            if (end >= last) {\n                if (start < last) {\n                    if (start >= first)\n                        rowCount -= last-start;\n                    else\n                        rowCount = 0; // in one fold\n                }\n                break;\n            } else if (end >= first){\n                if (start >= first) // fold inside range\n                    rowCount -=  end-start;\n                else\n                    rowCount -=  end-first+1;\n            }\n        }\n        return rowCount;\n    };\n\n    this.$addFoldLine = function(foldLine) {\n        this.$foldData.push(foldLine);\n        this.$foldData.sort(function(a, b) {\n            return a.start.row - b.start.row;\n        });\n        return foldLine;\n    };\n    this.addFold = function(placeholder, range) {\n        var foldData = this.$foldData;\n        var added = false;\n        var fold;\n        \n        if (placeholder instanceof Fold)\n            fold = placeholder;\n        else {\n            fold = new Fold(range, placeholder);\n            fold.collapseChildren = range.collapseChildren;\n        }\n        this.$clipRangeToDocument(fold.range);\n\n        var startRow = fold.start.row;\n        var startColumn = fold.start.column;\n        var endRow = fold.end.row;\n        var endColumn = fold.end.column;\n        if (!(startRow < endRow || \n            startRow == endRow && startColumn <= endColumn - 2))\n            throw new Error(\"The range has to be at least 2 characters width\");\n\n        var startFold = this.getFoldAt(startRow, startColumn, 1);\n        var endFold = this.getFoldAt(endRow, endColumn, -1);\n        if (startFold && endFold == startFold)\n            return startFold.addSubFold(fold);\n\n        if (startFold && !startFold.range.isStart(startRow, startColumn))\n            this.removeFold(startFold);\n        \n        if (endFold && !endFold.range.isEnd(endRow, endColumn))\n            this.removeFold(endFold);\n        var folds = this.getFoldsInRange(fold.range);\n        if (folds.length > 0) {\n            this.removeFolds(folds);\n            folds.forEach(function(subFold) {\n                fold.addSubFold(subFold);\n            });\n        }\n\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (endRow == foldLine.start.row) {\n                foldLine.addFold(fold);\n                added = true;\n                break;\n            } else if (startRow == foldLine.end.row) {\n                foldLine.addFold(fold);\n                added = true;\n                if (!fold.sameRow) {\n                    var foldLineNext = foldData[i + 1];\n                    if (foldLineNext && foldLineNext.start.row == endRow) {\n                        foldLine.merge(foldLineNext);\n                        break;\n                    }\n                }\n                break;\n            } else if (endRow <= foldLine.start.row) {\n                break;\n            }\n        }\n\n        if (!added)\n            foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n        if (this.$useWrapMode)\n            this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n        else\n            this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n        return fold;\n    };\n\n    this.addFolds = function(folds) {\n        folds.forEach(function(fold) {\n            this.addFold(fold);\n        }, this);\n    };\n\n    this.removeFold = function(fold) {\n        var foldLine = fold.foldLine;\n        var startRow = foldLine.start.row;\n        var endRow = foldLine.end.row;\n\n        var foldLines = this.$foldData;\n        var folds = foldLine.folds;\n        if (folds.length == 1) {\n            foldLines.splice(foldLines.indexOf(foldLine), 1);\n        } else\n        if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n            folds.pop();\n            foldLine.end.row = folds[folds.length - 1].end.row;\n            foldLine.end.column = folds[folds.length - 1].end.column;\n        } else\n        if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n            folds.shift();\n            foldLine.start.row = folds[0].start.row;\n            foldLine.start.column = folds[0].start.column;\n        } else\n        if (fold.sameRow) {\n            folds.splice(folds.indexOf(fold), 1);\n        } else\n        {\n            var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n            folds = newFoldLine.folds;\n            folds.shift();\n            newFoldLine.start.row = folds[0].start.row;\n            newFoldLine.start.column = folds[0].start.column;\n        }\n\n        if (!this.$updating) {\n            if (this.$useWrapMode)\n                this.$updateWrapData(startRow, endRow);\n            else\n                this.$updateRowLengthCache(startRow, endRow);\n        }\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n    };\n\n    this.removeFolds = function(folds) {\n        var cloneFolds = [];\n        for (var i = 0; i < folds.length; i++) {\n            cloneFolds.push(folds[i]);\n        }\n\n        cloneFolds.forEach(function(fold) {\n            this.removeFold(fold);\n        }, this);\n        this.$modified = true;\n    };\n\n    this.expandFold = function(fold) {\n        this.removeFold(fold);\n        fold.subFolds.forEach(function(subFold) {\n            fold.restoreRange(subFold);\n            this.addFold(subFold);\n        }, this);\n        if (fold.collapseChildren > 0) {\n            this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n        }\n        fold.subFolds = [];\n    };\n\n    this.expandFolds = function(folds) {\n        folds.forEach(function(fold) {\n            this.expandFold(fold);\n        }, this);\n    };\n\n    this.unfold = function(location, expandInner) {\n        var range, folds;\n        if (location == null) {\n            range = new Range(0, 0, this.getLength(), 0);\n            expandInner = true;\n        } else if (typeof location == \"number\")\n            range = new Range(location, 0, location, this.getLine(location).length);\n        else if (\"row\" in location)\n            range = Range.fromPoints(location, location);\n        else\n            range = location;\n        \n        folds = this.getFoldsInRangeList(range);\n        if (expandInner) {\n            this.removeFolds(folds);\n        } else {\n            var subFolds = folds;\n            while (subFolds.length) {\n                this.expandFolds(subFolds);\n                subFolds = this.getFoldsInRangeList(range);\n            }\n        }\n        if (folds.length)\n            return folds;\n    };\n    this.isRowFolded = function(docRow, startFoldRow) {\n        return !!this.getFoldLine(docRow, startFoldRow);\n    };\n\n    this.getRowFoldEnd = function(docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.end.row : docRow;\n    };\n\n    this.getRowFoldStart = function(docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.start.row : docRow;\n    };\n\n    this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n        if (startRow == null)\n            startRow = foldLine.start.row;\n        if (startColumn == null)\n            startColumn = 0;\n        if (endRow == null)\n            endRow = foldLine.end.row;\n        if (endColumn == null)\n            endColumn = this.getLine(endRow).length;\n        var doc = this.doc;\n        var textLine = \"\";\n\n        foldLine.walk(function(placeholder, row, column, lastColumn) {\n            if (row < startRow)\n                return;\n            if (row == startRow) {\n                if (column < startColumn)\n                    return;\n                lastColumn = Math.max(startColumn, lastColumn);\n            }\n\n            if (placeholder != null) {\n                textLine += placeholder;\n            } else {\n                textLine += doc.getLine(row).substring(lastColumn, column);\n            }\n        }, endRow, endColumn);\n        return textLine;\n    };\n\n    this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n        var foldLine = this.getFoldLine(row);\n\n        if (!foldLine) {\n            var line;\n            line = this.doc.getLine(row);\n            return line.substring(startColumn || 0, endColumn || line.length);\n        } else {\n            return this.getFoldDisplayLine(\n                foldLine, row, endColumn, startRow, startColumn);\n        }\n    };\n\n    this.$cloneFoldData = function() {\n        var fd = [];\n        fd = this.$foldData.map(function(foldLine) {\n            var folds = foldLine.folds.map(function(fold) {\n                return fold.clone();\n            });\n            return new FoldLine(fd, folds);\n        });\n\n        return fd;\n    };\n\n    this.toggleFold = function(tryToUnfold) {\n        var selection = this.selection;\n        var range = selection.getRange();\n        var fold;\n        var bracketPos;\n\n        if (range.isEmpty()) {\n            var cursor = range.start;\n            fold = this.getFoldAt(cursor.row, cursor.column);\n\n            if (fold) {\n                this.expandFold(fold);\n                return;\n            } else if (bracketPos = this.findMatchingBracket(cursor)) {\n                if (range.comparePoint(bracketPos) == 1) {\n                    range.end = bracketPos;\n                } else {\n                    range.start = bracketPos;\n                    range.start.column++;\n                    range.end.column--;\n                }\n            } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n                if (range.comparePoint(bracketPos) == 1)\n                    range.end = bracketPos;\n                else\n                    range.start = bracketPos;\n\n                range.start.column++;\n            } else {\n                range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n            }\n        } else {\n            var folds = this.getFoldsInRange(range);\n            if (tryToUnfold && folds.length) {\n                this.expandFolds(folds);\n                return;\n            } else if (folds.length == 1 ) {\n                fold = folds[0];\n            }\n        }\n\n        if (!fold)\n            fold = this.getFoldAt(range.start.row, range.start.column);\n\n        if (fold && fold.range.toString() == range.toString()) {\n            this.expandFold(fold);\n            return;\n        }\n\n        var placeholder = \"...\";\n        if (!range.isMultiLine()) {\n            placeholder = this.getTextRange(range);\n            if (placeholder.length < 4)\n                return;\n            placeholder = placeholder.trim().substring(0, 2) + \"..\";\n        }\n\n        this.addFold(placeholder, range);\n    };\n\n    this.getCommentFoldRange = function(row, column, dir) {\n        var iterator = new TokenIterator(this, row, column);\n        var token = iterator.getCurrentToken();\n        var type = token.type;\n        if (token && /^comment|string/.test(type)) {\n            type = type.match(/comment|string/)[0];\n            if (type == \"comment\")\n                type += \"|doc-start\";\n            var re = new RegExp(type);\n            var range = new Range();\n            if (dir != 1) {\n                do {\n                    token = iterator.stepBackward();\n                } while (token && re.test(token.type));\n                iterator.stepForward();\n            }\n            \n            range.start.row = iterator.getCurrentTokenRow();\n            range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n            iterator = new TokenIterator(this, row, column);\n            \n            if (dir != -1) {\n                var lastRow = -1;\n                do {\n                    token = iterator.stepForward();\n                    if (lastRow == -1) {\n                        var state = this.getState(iterator.$row);\n                        if (!re.test(state))\n                            lastRow = iterator.$row;\n                    } else if (iterator.$row > lastRow) {\n                        break;\n                    }\n                } while (token && re.test(token.type));\n                token = iterator.stepBackward();\n            } else\n                token = iterator.getCurrentToken();\n\n            range.end.row = iterator.getCurrentTokenRow();\n            range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n            return range;\n        }\n    };\n\n    this.foldAll = function(startRow, endRow, depth) {\n        if (depth == undefined)\n            depth = 100000; // JSON.stringify doesn't hanle Infinity\n        var foldWidgets = this.foldWidgets;\n        if (!foldWidgets)\n            return; // mode doesn't support folding\n        endRow = endRow || this.getLength();\n        startRow = startRow || 0;\n        for (var row = startRow; row < endRow; row++) {\n            if (foldWidgets[row] == null)\n                foldWidgets[row] = this.getFoldWidget(row);\n            if (foldWidgets[row] != \"start\")\n                continue;\n\n            var range = this.getFoldWidgetRange(row);\n            if (range && range.isMultiLine()\n                && range.end.row <= endRow\n                && range.start.row >= startRow\n            ) {\n                row = range.end.row;\n                try {\n                    var fold = this.addFold(\"...\", range);\n                    if (fold)\n                        fold.collapseChildren = depth;\n                } catch(e) {}\n            }\n        }\n    };\n    this.$foldStyles = {\n        \"manual\": 1,\n        \"markbegin\": 1,\n        \"markbeginend\": 1\n    };\n    this.$foldStyle = \"markbegin\";\n    this.setFoldStyle = function(style) {\n        if (!this.$foldStyles[style])\n            throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n        \n        if (this.$foldStyle == style)\n            return;\n\n        this.$foldStyle = style;\n        \n        if (style == \"manual\")\n            this.unfold();\n        var mode = this.$foldMode;\n        this.$setFolding(null);\n        this.$setFolding(mode);\n    };\n\n    this.$setFolding = function(foldMode) {\n        if (this.$foldMode == foldMode)\n            return;\n            \n        this.$foldMode = foldMode;\n        \n        this.off('change', this.$updateFoldWidgets);\n        this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n        this._signal(\"changeAnnotation\");\n        \n        if (!foldMode || this.$foldStyle == \"manual\") {\n            this.foldWidgets = null;\n            return;\n        }\n        \n        this.foldWidgets = [];\n        this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n        this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n        \n        this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n        this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n        this.on('change', this.$updateFoldWidgets);\n        this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n    };\n\n    this.getParentFoldRangeData = function (row, ignoreCurrent) {\n        var fw = this.foldWidgets;\n        if (!fw || (ignoreCurrent && fw[row]))\n            return {};\n\n        var i = row - 1, firstRange;\n        while (i >= 0) {\n            var c = fw[i];\n            if (c == null)\n                c = fw[i] = this.getFoldWidget(i);\n\n            if (c == \"start\") {\n                var range = this.getFoldWidgetRange(i);\n                if (!firstRange)\n                    firstRange = range;\n                if (range && range.end.row >= row)\n                    break;\n            }\n            i--;\n        }\n\n        return {\n            range: i !== -1 && range,\n            firstRange: firstRange\n        };\n    };\n\n    this.onFoldWidgetClick = function(row, e) {\n        e = e.domEvent;\n        var options = {\n            children: e.shiftKey,\n            all: e.ctrlKey || e.metaKey,\n            siblings: e.altKey\n        };\n        \n        var range = this.$toggleFoldWidget(row, options);\n        if (!range) {\n            var el = (e.target || e.srcElement);\n            if (el && /ace_fold-widget/.test(el.className))\n                el.className += \" ace_invalid\";\n        }\n    };\n    \n    this.$toggleFoldWidget = function(row, options) {\n        if (!this.getFoldWidget)\n            return;\n        var type = this.getFoldWidget(row);\n        var line = this.getLine(row);\n\n        var dir = type === \"end\" ? -1 : 1;\n        var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n        if (fold) {\n            if (options.children || options.all)\n                this.removeFold(fold);\n            else\n                this.expandFold(fold);\n            return fold;\n        }\n\n        var range = this.getFoldWidgetRange(row, true);\n        if (range && !range.isMultiLine()) {\n            fold = this.getFoldAt(range.start.row, range.start.column, 1);\n            if (fold && range.isEqual(fold.range)) {\n                this.removeFold(fold);\n                return fold;\n            }\n        }\n        \n        if (options.siblings) {\n            var data = this.getParentFoldRangeData(row);\n            if (data.range) {\n                var startRow = data.range.start.row + 1;\n                var endRow = data.range.end.row;\n            }\n            this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n        } else if (options.children) {\n            endRow = range ? range.end.row : this.getLength();\n            this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n        } else if (range) {\n            if (options.all) \n                range.collapseChildren = 10000;\n            this.addFold(\"...\", range);\n        }\n        \n        return range;\n    };\n    \n    \n    \n    this.toggleFoldWidget = function(toggleParent) {\n        var row = this.selection.getCursor().row;\n        row = this.getRowFoldStart(row);\n        var range = this.$toggleFoldWidget(row, {});\n        \n        if (range)\n            return;\n        var data = this.getParentFoldRangeData(row, true);\n        range = data.range || data.firstRange;\n        \n        if (range) {\n            row = range.start.row;\n            var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n            if (fold) {\n                this.removeFold(fold);\n            } else {\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n\n    this.updateFoldWidgets = function(delta) {\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n\n        if (len === 0) {\n            this.foldWidgets[firstRow] = null;\n        } else if (delta.action == 'remove') {\n            this.foldWidgets.splice(firstRow, len + 1, null);\n        } else {\n            var args = Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.foldWidgets.splice.apply(this.foldWidgets, args);\n        }\n    };\n    this.tokenizerUpdateFoldWidgets = function(e) {\n        var rows = e.data;\n        if (rows.first != rows.last) {\n            if (this.foldWidgets.length > rows.first)\n                this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n        }\n    };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n    this.findMatchingBracket = function(position, chr) {\n        if (position.column == 0) return null;\n\n        var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n        if (charBeforeCursor == \"\") return null;\n\n        var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match)\n            return null;\n\n        if (match[1])\n            return this.$findClosingBracket(match[1], position);\n        else\n            return this.$findOpeningBracket(match[2], position);\n    };\n    \n    this.getBracketRange = function(pos) {\n        var line = this.getLine(pos.row);\n        var before = true, range;\n\n        var chr = line.charAt(pos.column-1);\n        var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match) {\n            chr = line.charAt(pos.column);\n            pos = {row: pos.row, column: pos.column + 1};\n            match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n            before = false;\n        }\n        if (!match)\n            return null;\n\n        if (match[1]) {\n            var bracketPos = this.$findClosingBracket(match[1], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(pos, bracketPos);\n            if (!before) {\n                range.end.column++;\n                range.start.column--;\n            }\n            range.cursor = range.end;\n        } else {\n            var bracketPos = this.$findOpeningBracket(match[2], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(bracketPos, pos);\n            if (!before) {\n                range.start.column++;\n                range.end.column--;\n            }\n            range.cursor = range.start;\n        }\n        \n        return range;\n    };\n\n    this.$brackets = {\n        \")\": \"(\",\n        \"(\": \")\",\n        \"]\": \"[\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"}\": \"{\",\n        \"<\": \">\",\n        \">\": \"<\"\n    };\n\n    this.$findOpeningBracket = function(bracket, position, typeRe) {\n        var openBracket = this.$brackets[bracket];\n        var depth = 1;\n\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        \n         if (!typeRe){\n            typeRe = new RegExp(\n                \"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n                    .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n                + \")+\"\n            );\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n        var value = token.value;\n        \n        while (true) {\n        \n            while (valueIndex >= 0) {\n                var chr = value.charAt(valueIndex);\n                if (chr == openBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return {row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn()};\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex -= 1;\n            }\n            do {\n                token = iterator.stepBackward();\n            } while (token && !typeRe.test(token.type));\n\n            if (token == null)\n                break;\n                \n            value = token.value;\n            valueIndex = value.length - 1;\n        }\n        \n        return null;\n    };\n\n    this.$findClosingBracket = function(bracket, position, typeRe) {\n        var closingBracket = this.$brackets[bracket];\n        var depth = 1;\n\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n\n        if (!typeRe){\n            typeRe = new RegExp(\n                \"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n                    .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n                + \")+\"\n            );\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n        while (true) {\n\n            var value = token.value;\n            var valueLength = value.length;\n            while (valueIndex < valueLength) {\n                var chr = value.charAt(valueIndex);\n                if (chr == closingBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return {row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn()};\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex += 1;\n            }\n            do {\n                token = iterator.stepForward();\n            } while (token && !typeRe.test(token.type));\n\n            if (token == null)\n                break;\n\n            valueIndex = 0;\n        }\n        \n        return null;\n    };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n    this.$breakpoints = [];\n    this.$decorations = [];\n    this.$frontMarkers = {};\n    this.$backMarkers = {};\n    this.$markerId = 1;\n    this.$undoSelect = true;\n\n    this.$foldData = [];\n    this.id = \"session\" + (++EditSession.$uid);\n    this.$foldData.toString = function() {\n        return this.join(\"\\n\");\n    };\n    this.on(\"changeFold\", this.onChangeFold.bind(this));\n    this.$onChange = this.onChange.bind(this);\n\n    if (typeof text != \"object\" || !text.getLine)\n        text = new Document(text);\n\n    this.setDocument(text);\n    this.selection = new Selection(this);\n    this.$bidiHandler = new BidiHandler(this);\n\n    config.resetOptions(this);\n    this.setMode(mode);\n    config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setDocument = function(doc) {\n        if (this.doc)\n            this.doc.removeListener(\"change\", this.$onChange);\n\n        this.doc = doc;\n        doc.on(\"change\", this.$onChange);\n\n        if (this.bgTokenizer)\n            this.bgTokenizer.setDocument(this.getDocument());\n\n        this.resetCaches();\n    };\n    this.getDocument = function() {\n        return this.doc;\n    };\n    this.$resetRowCache = function(docRow) {\n        if (!docRow) {\n            this.$docRowCache = [];\n            this.$screenRowCache = [];\n            return;\n        }\n        var l = this.$docRowCache.length;\n        var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n        if (l > i) {\n            this.$docRowCache.splice(i, l);\n            this.$screenRowCache.splice(i, l);\n        }\n    };\n\n    this.$getRowCacheIndex = function(cacheArray, val) {\n        var low = 0;\n        var hi = cacheArray.length - 1;\n\n        while (low <= hi) {\n            var mid = (low + hi) >> 1;\n            var c = cacheArray[mid];\n\n            if (val > c)\n                low = mid + 1;\n            else if (val < c)\n                hi = mid - 1;\n            else\n                return mid;\n        }\n\n        return low -1;\n    };\n\n    this.resetCaches = function() {\n        this.$modified = true;\n        this.$wrapData = [];\n        this.$rowLengthCache = [];\n        this.$resetRowCache(0);\n        if (this.bgTokenizer)\n            this.bgTokenizer.start(0);\n    };\n\n    this.onChangeFold = function(e) {\n        var fold = e.data;\n        this.$resetRowCache(fold.start.row);\n    };\n\n    this.onChange = function(delta) {\n        this.$modified = true;\n        this.$bidiHandler.onChange(delta);\n        this.$resetRowCache(delta.start.row);\n\n        var removedFolds = this.$updateInternalDataOnChange(delta);\n        if (!this.$fromUndo && this.$undoManager) {\n            if (removedFolds && removedFolds.length) {\n                this.$undoManager.add({\n                    action: \"removeFolds\",\n                    folds:  removedFolds\n                }, this.mergeUndoDeltas);\n                this.mergeUndoDeltas = true;\n            }\n            this.$undoManager.add(delta, this.mergeUndoDeltas);\n            this.mergeUndoDeltas = true;\n            \n            this.$informUndoManager.schedule();\n        }\n\n        this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n        this._signal(\"change\", delta);\n    };\n    this.setValue = function(text) {\n        this.doc.setValue(text);\n        this.selection.moveTo(0, 0);\n\n        this.$resetRowCache(0);\n        this.setUndoManager(this.$undoManager);\n        this.getUndoManager().reset();\n    };\n    this.getValue =\n    this.toString = function() {\n        return this.doc.getValue();\n    };\n    this.getSelection = function() {\n        return this.selection;\n    };\n    this.getState = function(row) {\n        return this.bgTokenizer.getState(row);\n    };\n    this.getTokens = function(row) {\n        return this.bgTokenizer.getTokens(row);\n    };\n    this.getTokenAt = function(row, column) {\n        var tokens = this.bgTokenizer.getTokens(row);\n        var token, c = 0;\n        if (column == null) {\n            var i = tokens.length - 1;\n            c = this.getLine(row).length;\n        } else {\n            for (var i = 0; i < tokens.length; i++) {\n                c += tokens[i].value.length;\n                if (c >= column)\n                    break;\n            }\n        }\n        token = tokens[i];\n        if (!token)\n            return null;\n        token.index = i;\n        token.start = c - token.value.length;\n        return token;\n    };\n    this.setUndoManager = function(undoManager) {\n        this.$undoManager = undoManager;\n        \n        if (this.$informUndoManager)\n            this.$informUndoManager.cancel();\n        \n        if (undoManager) {\n            var self = this;\n            undoManager.addSession(this);\n            this.$syncInformUndoManager = function() {\n                self.$informUndoManager.cancel();\n                self.mergeUndoDeltas = false;\n            };\n            this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n        } else {\n            this.$syncInformUndoManager = function() {};\n        }\n    };\n    this.markUndoGroup = function() {\n        if (this.$syncInformUndoManager)\n            this.$syncInformUndoManager();\n    };\n    \n    this.$defaultUndoManager = {\n        undo: function() {},\n        redo: function() {},\n        reset: function() {},\n        add: function() {},\n        addSelection: function() {},\n        startNewGroup: function() {},\n        addSession: function() {}\n    };\n    this.getUndoManager = function() {\n        return this.$undoManager || this.$defaultUndoManager;\n    };\n    this.getTabString = function() {\n        if (this.getUseSoftTabs()) {\n            return lang.stringRepeat(\" \", this.getTabSize());\n        } else {\n            return \"\\t\";\n        }\n    };\n    this.setUseSoftTabs = function(val) {\n        this.setOption(\"useSoftTabs\", val);\n    };\n    this.getUseSoftTabs = function() {\n        return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n    };\n    this.setTabSize = function(tabSize) {\n        this.setOption(\"tabSize\", tabSize);\n    };\n    this.getTabSize = function() {\n        return this.$tabSize;\n    };\n    this.isTabStop = function(position) {\n        return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n    };\n    this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n        this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n    };\n    this.getNavigateWithinSoftTabs = function() {\n        return this.$navigateWithinSoftTabs;\n    };\n\n    this.$overwrite = false;\n    this.setOverwrite = function(overwrite) {\n        this.setOption(\"overwrite\", overwrite);\n    };\n    this.getOverwrite = function() {\n        return this.$overwrite;\n    };\n    this.toggleOverwrite = function() {\n        this.setOverwrite(!this.$overwrite);\n    };\n    this.addGutterDecoration = function(row, className) {\n        if (!this.$decorations[row])\n            this.$decorations[row] = \"\";\n        this.$decorations[row] += \" \" + className;\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.removeGutterDecoration = function(row, className) {\n        this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.getBreakpoints = function() {\n        return this.$breakpoints;\n    };\n    this.setBreakpoints = function(rows) {\n        this.$breakpoints = [];\n        for (var i=0; i<rows.length; i++) {\n            this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n        }\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.clearBreakpoints = function() {\n        this.$breakpoints = [];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.setBreakpoint = function(row, className) {\n        if (className === undefined)\n            className = \"ace_breakpoint\";\n        if (className)\n            this.$breakpoints[row] = className;\n        else\n            delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.clearBreakpoint = function(row) {\n        delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.addMarker = function(range, clazz, type, inFront) {\n        var id = this.$markerId++;\n\n        var marker = {\n            range : range,\n            type : type || \"line\",\n            renderer: typeof type == \"function\" ? type : null,\n            clazz : clazz,\n            inFront: !!inFront,\n            id: id\n        };\n\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        } else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n\n        return id;\n    };\n    this.addDynamicMarker = function(marker, inFront) {\n        if (!marker.update)\n            return;\n        var id = this.$markerId++;\n        marker.id = id;\n        marker.inFront = !!inFront;\n\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        } else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n\n        return marker;\n    };\n    this.removeMarker = function(markerId) {\n        var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n        if (!marker)\n            return;\n\n        var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n        delete (markers[markerId]);\n        this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n    };\n    this.getMarkers = function(inFront) {\n        return inFront ? this.$frontMarkers : this.$backMarkers;\n    };\n\n    this.highlight = function(re) {\n        if (!this.$searchHighlight) {\n            var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n            this.$searchHighlight = this.addDynamicMarker(highlight);\n        }\n        this.$searchHighlight.setRegexp(re);\n    };\n    this.highlightLines = function(startRow, endRow, clazz, inFront) {\n        if (typeof endRow != \"number\") {\n            clazz = endRow;\n            endRow = startRow;\n        }\n        if (!clazz)\n            clazz = \"ace_step\";\n\n        var range = new Range(startRow, 0, endRow, Infinity);\n        range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n        return range;\n    };\n    this.setAnnotations = function(annotations) {\n        this.$annotations = annotations;\n        this._signal(\"changeAnnotation\", {});\n    };\n    this.getAnnotations = function() {\n        return this.$annotations || [];\n    };\n    this.clearAnnotations = function() {\n        this.setAnnotations([]);\n    };\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r?\\n)/m);\n        if (match) {\n            this.$autoNewLine = match[1];\n        } else {\n            this.$autoNewLine = \"\\n\";\n        }\n    };\n    this.getWordRange = function(row, column) {\n        var line = this.getLine(row);\n\n        var inToken = false;\n        if (column > 0)\n            inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n        if (!inToken)\n            inToken = !!line.charAt(column).match(this.tokenRe);\n\n        if (inToken)\n            var re = this.tokenRe;\n        else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n            var re = /\\s/;\n        else\n            var re = this.nonTokenRe;\n\n        var start = column;\n        if (start > 0) {\n            do {\n                start--;\n            }\n            while (start >= 0 && line.charAt(start).match(re));\n            start++;\n        }\n\n        var end = column;\n        while (end < line.length && line.charAt(end).match(re)) {\n            end++;\n        }\n\n        return new Range(row, start, row, end);\n    };\n    this.getAWordRange = function(row, column) {\n        var wordRange = this.getWordRange(row, column);\n        var line = this.getLine(wordRange.end.row);\n\n        while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n            wordRange.end.column += 1;\n        }\n        return wordRange;\n    };\n    this.setNewLineMode = function(newLineMode) {\n        this.doc.setNewLineMode(newLineMode);\n    };\n    this.getNewLineMode = function() {\n        return this.doc.getNewLineMode();\n    };\n    this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n    this.getUseWorker = function() { return this.$useWorker; };\n    this.onReloadTokenizer = function(e) {\n        var rows = e.data;\n        this.bgTokenizer.start(rows.first);\n        this._signal(\"tokenizerUpdate\", e);\n    };\n\n    this.$modes = config.$modes;\n    this.$mode = null;\n    this.$modeId = null;\n    this.setMode = function(mode, cb) {\n        if (mode && typeof mode === \"object\") {\n            if (mode.getTokenizer)\n                return this.$onChangeMode(mode);\n            var options = mode;\n            var path = options.path;\n        } else {\n            path = mode || \"ace/mode/text\";\n        }\n        if (!this.$modes[\"ace/mode/text\"])\n            this.$modes[\"ace/mode/text\"] = new TextMode();\n\n        if (this.$modes[path] && !options) {\n            this.$onChangeMode(this.$modes[path]);\n            cb && cb();\n            return;\n        }\n        this.$modeId = path;\n        config.loadModule([\"mode\", path], function(m) {\n            if (this.$modeId !== path)\n                return cb && cb();\n            if (this.$modes[path] && !options) {\n                this.$onChangeMode(this.$modes[path]);\n            } else if (m && m.Mode) {\n                m = new m.Mode(options);\n                if (!options) {\n                    this.$modes[path] = m;\n                    m.$id = path;\n                }\n                this.$onChangeMode(m);\n            }\n            cb && cb();\n        }.bind(this));\n        if (!this.$mode)\n            this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n    };\n\n    this.$onChangeMode = function(mode, $isPlaceholder) {\n        if (!$isPlaceholder)\n            this.$modeId = mode.$id;\n        if (this.$mode === mode) \n            return;\n\n        this.$mode = mode;\n\n        this.$stopWorker();\n\n        if (this.$useWorker)\n            this.$startWorker();\n\n        var tokenizer = mode.getTokenizer();\n\n        if(tokenizer.addEventListener !== undefined) {\n            var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n            tokenizer.addEventListener(\"update\", onReloadTokenizer);\n        }\n\n        if (!this.bgTokenizer) {\n            this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n            var _self = this;\n            this.bgTokenizer.addEventListener(\"update\", function(e) {\n                _self._signal(\"tokenizerUpdate\", e);\n            });\n        } else {\n            this.bgTokenizer.setTokenizer(tokenizer);\n        }\n\n        this.bgTokenizer.setDocument(this.getDocument());\n\n        this.tokenRe = mode.tokenRe;\n        this.nonTokenRe = mode.nonTokenRe;\n\n        \n        if (!$isPlaceholder) {\n            if (mode.attachToSession)\n                mode.attachToSession(this);\n            this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n            this.$setFolding(mode.foldingRules);\n            this.bgTokenizer.start(0);\n            this._emit(\"changeMode\");\n        }\n    };\n\n    this.$stopWorker = function() {\n        if (this.$worker) {\n            this.$worker.terminate();\n            this.$worker = null;\n        }\n    };\n\n    this.$startWorker = function() {\n        try {\n            this.$worker = this.$mode.createWorker(this);\n        } catch (e) {\n            config.warn(\"Could not load worker\", e);\n            this.$worker = null;\n        }\n    };\n    this.getMode = function() {\n        return this.$mode;\n    };\n\n    this.$scrollTop = 0;\n    this.setScrollTop = function(scrollTop) {\n        if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n            return;\n\n        this.$scrollTop = scrollTop;\n        this._signal(\"changeScrollTop\", scrollTop);\n    };\n    this.getScrollTop = function() {\n        return this.$scrollTop;\n    };\n\n    this.$scrollLeft = 0;\n    this.setScrollLeft = function(scrollLeft) {\n        if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n            return;\n\n        this.$scrollLeft = scrollLeft;\n        this._signal(\"changeScrollLeft\", scrollLeft);\n    };\n    this.getScrollLeft = function() {\n        return this.$scrollLeft;\n    };\n    this.getScreenWidth = function() {\n        this.$computeWidth();\n        if (this.lineWidgets) \n            return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n        return this.screenWidth;\n    };\n    \n    this.getLineWidgetMaxWidth = function() {\n        if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n        var width = 0;\n        this.lineWidgets.forEach(function(w) {\n            if (w && w.screenWidth > width)\n                width = w.screenWidth;\n        });\n        return this.lineWidgetWidth = width;\n    };\n\n    this.$computeWidth = function(force) {\n        if (this.$modified || force) {\n            this.$modified = false;\n\n            if (this.$useWrapMode)\n                return this.screenWidth = this.$wrapLimit;\n\n            var lines = this.doc.getAllLines();\n            var cache = this.$rowLengthCache;\n            var longestScreenLine = 0;\n            var foldIndex = 0;\n            var foldLine = this.$foldData[foldIndex];\n            var foldStart = foldLine ? foldLine.start.row : Infinity;\n            var len = lines.length;\n\n            for (var i = 0; i < len; i++) {\n                if (i > foldStart) {\n                    i = foldLine.end.row + 1;\n                    if (i >= len)\n                        break;\n                    foldLine = this.$foldData[foldIndex++];\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n\n                if (cache[i] == null)\n                    cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n                if (cache[i] > longestScreenLine)\n                    longestScreenLine = cache[i];\n            }\n            this.screenWidth = longestScreenLine;\n        }\n    };\n    this.getLine = function(row) {\n        return this.doc.getLine(row);\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.doc.getLines(firstRow, lastRow);\n    };\n    this.getLength = function() {\n        return this.doc.getLength();\n    };\n    this.getTextRange = function(range) {\n        return this.doc.getTextRange(range || this.selection.getRange());\n    };\n    this.insert = function(position, text) {\n        return this.doc.insert(position, text);\n    };\n    this.remove = function(range) {\n        return this.doc.remove(range);\n    };\n    this.removeFullLines = function(firstRow, lastRow){\n        return this.doc.removeFullLines(firstRow, lastRow);\n    };\n    this.undoChanges = function(deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n\n        this.$fromUndo = true;\n        for (var i = deltas.length - 1; i != -1; i--) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.revertDelta(delta);\n            } else if (delta.folds) {\n                this.addFolds(delta.folds);\n            }\n        }\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionBefore)\n                this.selection.fromJSON(deltas.selectionBefore);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, true));\n        }\n        this.$fromUndo = false;\n    };\n    this.redoChanges = function(deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n\n        this.$fromUndo = true;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.applyDelta(delta);\n            }\n        }\n\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionAfter)\n                this.selection.fromJSON(deltas.selectionAfter);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, false));\n        }\n        this.$fromUndo = false;\n    };\n    this.setUndoSelect = function(enable) {\n        this.$undoSelect = enable;\n    };\n\n    this.$getUndoSelection = function(deltas, isUndo) {\n        function isInsert(delta) {\n            return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n        }\n\n        var range, point;\n        var lastDeltaIsInsert;\n\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (!delta.start) continue; // skip folds\n            if (!range) {\n                if (isInsert(delta)) {\n                    range = Range.fromPoints(delta.start, delta.end);\n                    lastDeltaIsInsert = true;\n                } else {\n                    range = Range.fromPoints(delta.start, delta.start);\n                    lastDeltaIsInsert = false;\n                }\n                continue;\n            }\n            \n            if (isInsert(delta)) {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range.setStart(point);\n                }\n                point = delta.end;\n                if (range.compare(point.row, point.column) == 1) {\n                    range.setEnd(point);\n                }\n                lastDeltaIsInsert = true;\n            } else {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n                lastDeltaIsInsert = false;\n            }\n        }\n        return range;\n    };\n    this.replace = function(range, text) {\n        return this.doc.replace(range, text);\n    };\n    this.moveText = function(fromRange, toPosition, copy) {\n        var text = this.getTextRange(fromRange);\n        var folds = this.getFoldsInRange(fromRange);\n\n        var toRange = Range.fromPoints(toPosition, toPosition);\n        if (!copy) {\n            this.remove(fromRange);\n            var rowDiff = fromRange.start.row - fromRange.end.row;\n            var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n            if (collDiff) {\n                if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n                    toRange.start.column += collDiff;\n                if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n                    toRange.end.column += collDiff;\n            }\n            if (rowDiff && toRange.start.row >= fromRange.end.row) {\n                toRange.start.row += rowDiff;\n                toRange.end.row += rowDiff;\n            }\n        }\n\n        toRange.end = this.insert(toRange.start, text);\n        if (folds.length) {\n            var oldStart = fromRange.start;\n            var newStart = toRange.start;\n            var rowDiff = newStart.row - oldStart.row;\n            var collDiff = newStart.column - oldStart.column;\n            this.addFolds(folds.map(function(x) {\n                x = x.clone();\n                if (x.start.row == oldStart.row)\n                    x.start.column += collDiff;\n                if (x.end.row == oldStart.row)\n                    x.end.column += collDiff;\n                x.start.row += rowDiff;\n                x.end.row += rowDiff;\n                return x;\n            }));\n        }\n\n        return toRange;\n    };\n    this.indentRows = function(startRow, endRow, indentString) {\n        indentString = indentString.replace(/\\t/g, this.getTabString());\n        for (var row=startRow; row<=endRow; row++)\n            this.doc.insertInLine({row: row, column: 0}, indentString);\n    };\n    this.outdentRows = function (range) {\n        var rowRange = range.collapseRows();\n        var deleteRange = new Range(0, 0, 0, 0);\n        var size = this.getTabSize();\n\n        for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n            var line = this.getLine(i);\n\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            for (var j = 0; j < size; ++j)\n                if (line.charAt(j) != ' ')\n                    break;\n            if (j < size && line.charAt(j) == '\\t') {\n                deleteRange.start.column = j;\n                deleteRange.end.column = j + 1;\n            } else {\n                deleteRange.start.column = 0;\n                deleteRange.end.column = j;\n            }\n            this.remove(deleteRange);\n        }\n    };\n\n    this.$moveLines = function(firstRow, lastRow, dir) {\n        firstRow = this.getRowFoldStart(firstRow);\n        lastRow = this.getRowFoldEnd(lastRow);\n        if (dir < 0) {\n            var row = this.getRowFoldStart(firstRow + dir);\n            if (row < 0) return 0;\n            var diff = row-firstRow;\n        } else if (dir > 0) {\n            var row = this.getRowFoldEnd(lastRow + dir);\n            if (row > this.doc.getLength()-1) return 0;\n            var diff = row-lastRow;\n        } else {\n            firstRow = this.$clipRowToDocument(firstRow);\n            lastRow = this.$clipRowToDocument(lastRow);\n            var diff = lastRow - firstRow + 1;\n        }\n\n        var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n        var folds = this.getFoldsInRange(range).map(function(x){\n            x = x.clone();\n            x.start.row += diff;\n            x.end.row += diff;\n            return x;\n        });\n        \n        var lines = dir == 0\n            ? this.doc.getLines(firstRow, lastRow)\n            : this.doc.removeFullLines(firstRow, lastRow);\n        this.doc.insertFullLines(firstRow+diff, lines);\n        folds.length && this.addFolds(folds);\n        return diff;\n    };\n    this.moveLinesUp = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, -1);\n    };\n    this.moveLinesDown = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 1);\n    };\n    this.duplicateLines = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 0);\n    };\n\n\n    this.$clipRowToDocument = function(row) {\n        return Math.max(0, Math.min(row, this.doc.getLength()-1));\n    };\n\n    this.$clipColumnToRow = function(row, column) {\n        if (column < 0)\n            return 0;\n        return Math.min(this.doc.getLine(row).length, column);\n    };\n\n\n    this.$clipPositionToDocument = function(row, column) {\n        column = Math.max(0, column);\n\n        if (row < 0) {\n            row = 0;\n            column = 0;\n        } else {\n            var len = this.doc.getLength();\n            if (row >= len) {\n                row = len - 1;\n                column = this.doc.getLine(len-1).length;\n            } else {\n                column = Math.min(this.doc.getLine(row).length, column);\n            }\n        }\n\n        return {\n            row: row,\n            column: column\n        };\n    };\n\n    this.$clipRangeToDocument = function(range) {\n        if (range.start.row < 0) {\n            range.start.row = 0;\n            range.start.column = 0;\n        } else {\n            range.start.column = this.$clipColumnToRow(\n                range.start.row,\n                range.start.column\n            );\n        }\n\n        var len = this.doc.getLength() - 1;\n        if (range.end.row > len) {\n            range.end.row = len;\n            range.end.column = this.doc.getLine(len).length;\n        } else {\n            range.end.column = this.$clipColumnToRow(\n                range.end.row,\n                range.end.column\n            );\n        }\n        return range;\n    };\n    this.$wrapLimit = 80;\n    this.$useWrapMode = false;\n    this.$wrapLimitRange = {\n        min : null,\n        max : null\n    };\n    this.setUseWrapMode = function(useWrapMode) {\n        if (useWrapMode != this.$useWrapMode) {\n            this.$useWrapMode = useWrapMode;\n            this.$modified = true;\n            this.$resetRowCache(0);\n            if (useWrapMode) {\n                var len = this.getLength();\n                this.$wrapData = Array(len);\n                this.$updateWrapData(0, len - 1);\n            }\n\n            this._signal(\"changeWrapMode\");\n        }\n    };\n    this.getUseWrapMode = function() {\n        return this.$useWrapMode;\n    };\n    this.setWrapLimitRange = function(min, max) {\n        if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n            this.$wrapLimitRange = { min: min, max: max };\n            this.$modified = true;\n            this.$bidiHandler.markAsDirty();\n            if (this.$useWrapMode)\n                this._signal(\"changeWrapMode\");\n        }\n    };\n    this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n        var limits = this.$wrapLimitRange;\n        if (limits.max < 0)\n            limits = {min: $printMargin, max: $printMargin};\n        var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n        if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n            this.$wrapLimit = wrapLimit;\n            this.$modified = true;\n            if (this.$useWrapMode) {\n                this.$updateWrapData(0, this.getLength() - 1);\n                this.$resetRowCache(0);\n                this._signal(\"changeWrapLimit\");\n            }\n            return true;\n        }\n        return false;\n    };\n\n    this.$constrainWrapLimit = function(wrapLimit, min, max) {\n        if (min)\n            wrapLimit = Math.max(min, wrapLimit);\n\n        if (max)\n            wrapLimit = Math.min(max, wrapLimit);\n\n        return wrapLimit;\n    };\n    this.getWrapLimit = function() {\n        return this.$wrapLimit;\n    };\n    this.setWrapLimit = function (limit) {\n        this.setWrapLimitRange(limit, limit);\n    };\n    this.getWrapLimitRange = function() {\n        return {\n            min : this.$wrapLimitRange.min,\n            max : this.$wrapLimitRange.max\n        };\n    };\n\n    this.$updateInternalDataOnChange = function(delta) {\n        var useWrapMode = this.$useWrapMode;\n        var action = delta.action;\n        var start = delta.start;\n        var end = delta.end;\n        var firstRow = start.row;\n        var lastRow = end.row;\n        var len = lastRow - firstRow;\n        var removedFolds = null;\n        \n        this.$updating = true;\n        if (len != 0) {\n            if (action === \"remove\") {\n                this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n                var foldLines = this.$foldData;\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n\n                var foldLine = this.getFoldLine(end.row);\n                var idx = 0;\n                if (foldLine) {\n                    foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n                    foldLine.shiftRow(-len);\n\n                    var foldLineBefore = this.getFoldLine(firstRow);\n                    if (foldLineBefore && foldLineBefore !== foldLine) {\n                        foldLineBefore.merge(foldLine);\n                        foldLine = foldLineBefore;\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= end.row) {\n                        foldLine.shiftRow(-len);\n                    }\n                }\n\n                lastRow = firstRow;\n            } else {\n                var args = Array(len);\n                args.unshift(firstRow, 0);\n                var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n                arr.splice.apply(arr, args);\n                var foldLines = this.$foldData;\n                var foldLine = this.getFoldLine(firstRow);\n                var idx = 0;\n                if (foldLine) {\n                    var cmp = foldLine.range.compareInside(start.row, start.column);\n                    if (cmp == 0) {\n                        foldLine = foldLine.split(start.row, start.column);\n                        if (foldLine) {\n                            foldLine.shiftRow(len);\n                            foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n                        }\n                    } else\n                    if (cmp == -1) {\n                        foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n                        foldLine.shiftRow(len);\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= firstRow) {\n                        foldLine.shiftRow(len);\n                    }\n                }\n            }\n        } else {\n            len = Math.abs(delta.start.column - delta.end.column);\n            if (action === \"remove\") {\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n\n                len = -len;\n            }\n            var foldLine = this.getFoldLine(firstRow);\n            if (foldLine) {\n                foldLine.addRemoveChars(firstRow, start.column, len);\n            }\n        }\n\n        if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n            console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n        }\n        this.$updating = false;\n\n        if (useWrapMode)\n            this.$updateWrapData(firstRow, lastRow);\n        else\n            this.$updateRowLengthCache(firstRow, lastRow);\n\n        return removedFolds;\n    };\n\n    this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n        this.$rowLengthCache[firstRow] = null;\n        this.$rowLengthCache[lastRow] = null;\n    };\n\n    this.$updateWrapData = function(firstRow, lastRow) {\n        var lines = this.doc.getAllLines();\n        var tabSize = this.getTabSize();\n        var wrapData = this.$wrapData;\n        var wrapLimit = this.$wrapLimit;\n        var tokens;\n        var foldLine;\n\n        var row = firstRow;\n        lastRow = Math.min(lastRow, lines.length - 1);\n        while (row <= lastRow) {\n            foldLine = this.getFoldLine(row, foldLine);\n            if (!foldLine) {\n                tokens = this.$getDisplayTokens(lines[row]);\n                wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row ++;\n            } else {\n                tokens = [];\n                foldLine.walk(function(placeholder, row, column, lastColumn) {\n                        var walkTokens;\n                        if (placeholder != null) {\n                            walkTokens = this.$getDisplayTokens(\n                                            placeholder, tokens.length);\n                            walkTokens[0] = PLACEHOLDER_START;\n                            for (var i = 1; i < walkTokens.length; i++) {\n                                walkTokens[i] = PLACEHOLDER_BODY;\n                            }\n                        } else {\n                            walkTokens = this.$getDisplayTokens(\n                                lines[row].substring(lastColumn, column),\n                                tokens.length);\n                        }\n                        tokens = tokens.concat(walkTokens);\n                    }.bind(this),\n                    foldLine.end.row,\n                    lines[foldLine.end.row].length + 1\n                );\n\n                wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row = foldLine.end.row + 1;\n            }\n        }\n    };\n    var CHAR = 1,\n        CHAR_EXT = 2,\n        PLACEHOLDER_START = 3,\n        PLACEHOLDER_BODY =  4,\n        PUNCTUATION = 9,\n        SPACE = 10,\n        TAB = 11,\n        TAB_SPACE = 12;\n\n\n    this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n        if (tokens.length == 0) {\n            return [];\n        }\n\n        var splits = [];\n        var displayLength = tokens.length;\n        var lastSplit = 0, lastDocSplit = 0;\n\n        var isCode = this.$wrapAsCode;\n\n        var indentedSoftWrap = this.$indentedSoftWrap;\n        var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n            || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n        function getWrapIndent() {\n            var indentation = 0;\n            if (maxIndent === 0)\n                return indentation;\n            if (indentedSoftWrap) {\n                for (var i = 0; i < tokens.length; i++) {\n                    var token = tokens[i];\n                    if (token == SPACE)\n                        indentation += 1;\n                    else if (token == TAB)\n                        indentation += tabSize;\n                    else if (token == TAB_SPACE)\n                        continue;\n                    else\n                        break;\n                }\n            }\n            if (isCode && indentedSoftWrap !== false)\n                indentation += tabSize;\n            return Math.min(indentation, maxIndent);\n        }\n        function addSplit(screenPos) {\n            var len = screenPos - lastSplit;\n            for (var i = lastSplit; i < screenPos; i++) {\n                var ch = tokens[i];\n                if (ch === 12 || ch === 2) len -= 1;\n            }\n\n            if (!splits.length) {\n                indent = getWrapIndent();\n                splits.indent = indent;\n            }\n            lastDocSplit += len;\n            splits.push(lastDocSplit);\n            lastSplit = screenPos;\n        }\n        var indent = 0;\n        while (displayLength - lastSplit > wrapLimit - indent) {\n            var split = lastSplit + wrapLimit - indent;\n            if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n                addSplit(split);\n                continue;\n            }\n            if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n                for (split; split != lastSplit - 1; split--) {\n                    if (tokens[split] == PLACEHOLDER_START) {\n                        break;\n                    }\n                }\n                if (split > lastSplit) {\n                    addSplit(split);\n                    continue;\n                }\n                split = lastSplit + wrapLimit;\n                for (split; split < tokens.length; split++) {\n                    if (tokens[split] != PLACEHOLDER_BODY) {\n                        break;\n                    }\n                }\n                if (split == tokens.length) {\n                    break;  // Breaks the while-loop.\n                }\n                addSplit(split);\n                continue;\n            }\n            var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n            while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                split --;\n            }\n            if (isCode) {\n                while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                    split --;\n                }\n                while (split > minSplit && tokens[split] == PUNCTUATION) {\n                    split --;\n                }\n            } else {\n                while (split > minSplit && tokens[split] < SPACE) {\n                    split --;\n                }\n            }\n            if (split > minSplit) {\n                addSplit(++split);\n                continue;\n            }\n            split = lastSplit + wrapLimit;\n            if (tokens[split] == CHAR_EXT)\n                split--;\n            addSplit(split - indent);\n        }\n        return splits;\n    };\n    this.$getDisplayTokens = function(str, offset) {\n        var arr = [];\n        var tabSize;\n        offset = offset || 0;\n\n        for (var i = 0; i < str.length; i++) {\n            var c = str.charCodeAt(i);\n            if (c == 9) {\n                tabSize = this.getScreenTabSize(arr.length + offset);\n                arr.push(TAB);\n                for (var n = 1; n < tabSize; n++) {\n                    arr.push(TAB_SPACE);\n                }\n            }\n            else if (c == 32) {\n                arr.push(SPACE);\n            } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n                arr.push(PUNCTUATION);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                arr.push(CHAR, CHAR_EXT);\n            } else {\n                arr.push(CHAR);\n            }\n        }\n        return arr;\n    };\n    this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n        if (maxScreenColumn == 0)\n            return [0, 0];\n        if (maxScreenColumn == null)\n            maxScreenColumn = Infinity;\n        screenColumn = screenColumn || 0;\n\n        var c, column;\n        for (column = 0; column < str.length; column++) {\n            c = str.charCodeAt(column);\n            if (c == 9) {\n                screenColumn += this.getScreenTabSize(screenColumn);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                screenColumn += 2;\n            } else {\n                screenColumn += 1;\n            }\n            if (screenColumn > maxScreenColumn) {\n                break;\n            }\n        }\n\n        return [screenColumn, column];\n    };\n\n    this.lineWidgets = null;\n    this.getRowLength = function(row) {\n        if (this.lineWidgets)\n            var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else \n            h = 0;\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1 + h;\n        } else {\n            return this.$wrapData[row].length + 1 + h;\n        }\n    };\n    this.getRowLineCount = function(row) {\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1;\n        } else {\n            return this.$wrapData[row].length + 1;\n        }\n    };\n\n    this.getRowWrapIndent = function(screenRow) {\n        if (this.$useWrapMode) {\n            var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n            var splits = this.$wrapData[pos.row];\n            return splits.length && splits[0] < pos.column ? splits.indent : 0;\n        } else {\n            return 0;\n        }\n    };\n    this.getScreenLastRowColumn = function(screenRow) {\n        var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n        return this.documentToScreenColumn(pos.row, pos.column);\n    };\n    this.getDocumentLastRowColumn = function(docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.getScreenLastRowColumn(screenRow);\n    };\n    this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n    };\n    this.getRowSplitData = function(row) {\n        if (!this.$useWrapMode) {\n            return undefined;\n        } else {\n            return this.$wrapData[row];\n        }\n    };\n    this.getScreenTabSize = function(screenColumn) {\n        return this.$tabSize - screenColumn % this.$tabSize;\n    };\n\n\n    this.screenToDocumentRow = function(screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).row;\n    };\n\n\n    this.screenToDocumentColumn = function(screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).column;\n    };\n    this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n        if (screenRow < 0)\n            return {row: 0, column: 0};\n\n        var line;\n        var docRow = 0;\n        var docColumn = 0;\n        var column;\n        var row = 0;\n        var rowLength = 0;\n\n        var rowCache = this.$screenRowCache;\n        var i = this.$getRowCacheIndex(rowCache, screenRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var docRow = this.$docRowCache[i];\n            var doCache = screenRow > rowCache[l - 1];\n        } else {\n            var doCache = !l;\n        }\n\n        var maxRow = this.getLength() - 1;\n        var foldLine = this.getNextFoldLine(docRow);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (row <= screenRow) {\n            rowLength = this.getRowLength(docRow);\n            if (row + rowLength > screenRow || docRow >= maxRow) {\n                break;\n            } else {\n                row += rowLength;\n                docRow++;\n                if (docRow > foldStart) {\n                    docRow = foldLine.end.row+1;\n                    foldLine = this.getNextFoldLine(docRow, foldLine);\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n            }\n\n            if (doCache) {\n                this.$docRowCache.push(docRow);\n                this.$screenRowCache.push(row);\n            }\n        }\n\n        if (foldLine && foldLine.start.row <= docRow) {\n            line = this.getFoldDisplayLine(foldLine);\n            docRow = foldLine.start.row;\n        } else if (row + rowLength <= screenRow || docRow > maxRow) {\n            return {\n                row: maxRow,\n                column: this.getLine(maxRow).length\n            };\n        } else {\n            line = this.getLine(docRow);\n            foldLine = null;\n        }\n        var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n        if (this.$useWrapMode) {\n            var splits = this.$wrapData[docRow];\n            if (splits) {\n                column = splits[splitIndex];\n                if(splitIndex > 0 && splits.length) {\n                    wrapIndent = splits.indent;\n                    docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n                    line = line.substring(docColumn);\n                }\n            }\n        }\n\n        if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n            screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n        docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n        if (this.$useWrapMode && docColumn >= column)\n            docColumn = column - 1;\n\n        if (foldLine)\n            return foldLine.idxToPosition(docColumn);\n\n        return {row: docRow, column: docColumn};\n    };\n    this.documentToScreenPosition = function(docRow, docColumn) {\n        if (typeof docColumn === \"undefined\")\n            var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n        else\n            pos = this.$clipPositionToDocument(docRow, docColumn);\n\n        docRow = pos.row;\n        docColumn = pos.column;\n\n        var screenRow = 0;\n        var foldStartRow = null;\n        var fold = null;\n        fold = this.getFoldAt(docRow, docColumn, 1);\n        if (fold) {\n            docRow = fold.start.row;\n            docColumn = fold.start.column;\n        }\n\n        var rowEnd, row = 0;\n\n\n        var rowCache = this.$docRowCache;\n        var i = this.$getRowCacheIndex(rowCache, docRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var screenRow = this.$screenRowCache[i];\n            var doCache = docRow > rowCache[l - 1];\n        } else {\n            var doCache = !l;\n        }\n\n        var foldLine = this.getNextFoldLine(row);\n        var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n        while (row < docRow) {\n            if (row >= foldStart) {\n                rowEnd = foldLine.end.row + 1;\n                if (rowEnd > docRow)\n                    break;\n                foldLine = this.getNextFoldLine(rowEnd, foldLine);\n                foldStart = foldLine ?foldLine.start.row :Infinity;\n            }\n            else {\n                rowEnd = row + 1;\n            }\n\n            screenRow += this.getRowLength(row);\n            row = rowEnd;\n\n            if (doCache) {\n                this.$docRowCache.push(row);\n                this.$screenRowCache.push(screenRow);\n            }\n        }\n        var textLine = \"\";\n        if (foldLine && row >= foldStart) {\n            textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n            foldStartRow = foldLine.start.row;\n        } else {\n            textLine = this.getLine(docRow).substring(0, docColumn);\n            foldStartRow = docRow;\n        }\n        var wrapIndent = 0;\n        if (this.$useWrapMode) {\n            var wrapRow = this.$wrapData[foldStartRow];\n            if (wrapRow) {\n                var screenRowOffset = 0;\n                while (textLine.length >= wrapRow[screenRowOffset]) {\n                    screenRow ++;\n                    screenRowOffset++;\n                }\n                textLine = textLine.substring(\n                    wrapRow[screenRowOffset - 1] || 0, textLine.length\n                );\n                wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n            }\n        }\n\n        return {\n            row: screenRow,\n            column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n        };\n    };\n    this.documentToScreenColumn = function(row, docColumn) {\n        return this.documentToScreenPosition(row, docColumn).column;\n    };\n    this.documentToScreenRow = function(docRow, docColumn) {\n        return this.documentToScreenPosition(docRow, docColumn).row;\n    };\n    this.getScreenLength = function() {\n        var screenRows = 0;\n        var fold = null;\n        if (!this.$useWrapMode) {\n            screenRows = this.getLength();\n            var foldData = this.$foldData;\n            for (var i = 0; i < foldData.length; i++) {\n                fold = foldData[i];\n                screenRows -= fold.end.row - fold.start.row;\n            }\n        } else {\n            var lastRow = this.$wrapData.length;\n            var row = 0, i = 0;\n            var fold = this.$foldData[i++];\n            var foldStart = fold ? fold.start.row :Infinity;\n\n            while (row < lastRow) {\n                var splits = this.$wrapData[row];\n                screenRows += splits ? splits.length + 1 : 1;\n                row ++;\n                if (row > foldStart) {\n                    row = fold.end.row+1;\n                    fold = this.$foldData[i++];\n                    foldStart = fold ?fold.start.row :Infinity;\n                }\n            }\n        }\n        if (this.lineWidgets)\n            screenRows += this.$getWidgetScreenLength();\n\n        return screenRows;\n    };\n    this.$setFontMetrics = function(fm) {\n        if (!this.$enableVarChar) return;\n        this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n            if (maxScreenColumn === 0)\n                return [0, 0];\n            if (!maxScreenColumn)\n                maxScreenColumn = Infinity;\n            screenColumn = screenColumn || 0;\n            \n            var c, column;\n            for (column = 0; column < str.length; column++) {\n                c = str.charAt(column);\n                if (c === \"\\t\") {\n                    screenColumn += this.getScreenTabSize(screenColumn);\n                } else {\n                    screenColumn += fm.getCharacterWidth(c);\n                }\n                if (screenColumn > maxScreenColumn) {\n                    break;\n                }\n            }\n            \n            return [screenColumn, column];\n        };\n    };\n    \n    this.destroy = function() {\n        if (this.bgTokenizer) {\n            this.bgTokenizer.setDocument(null);\n            this.bgTokenizer = null;\n        }\n        this.$stopWorker();\n    };\n\n    this.isFullWidth = isFullWidth;\n    function isFullWidth(c) {\n        if (c < 0x1100)\n            return false;\n        return c >= 0x1100 && c <= 0x115F ||\n               c >= 0x11A3 && c <= 0x11A7 ||\n               c >= 0x11FA && c <= 0x11FF ||\n               c >= 0x2329 && c <= 0x232A ||\n               c >= 0x2E80 && c <= 0x2E99 ||\n               c >= 0x2E9B && c <= 0x2EF3 ||\n               c >= 0x2F00 && c <= 0x2FD5 ||\n               c >= 0x2FF0 && c <= 0x2FFB ||\n               c >= 0x3000 && c <= 0x303E ||\n               c >= 0x3041 && c <= 0x3096 ||\n               c >= 0x3099 && c <= 0x30FF ||\n               c >= 0x3105 && c <= 0x312D ||\n               c >= 0x3131 && c <= 0x318E ||\n               c >= 0x3190 && c <= 0x31BA ||\n               c >= 0x31C0 && c <= 0x31E3 ||\n               c >= 0x31F0 && c <= 0x321E ||\n               c >= 0x3220 && c <= 0x3247 ||\n               c >= 0x3250 && c <= 0x32FE ||\n               c >= 0x3300 && c <= 0x4DBF ||\n               c >= 0x4E00 && c <= 0xA48C ||\n               c >= 0xA490 && c <= 0xA4C6 ||\n               c >= 0xA960 && c <= 0xA97C ||\n               c >= 0xAC00 && c <= 0xD7A3 ||\n               c >= 0xD7B0 && c <= 0xD7C6 ||\n               c >= 0xD7CB && c <= 0xD7FB ||\n               c >= 0xF900 && c <= 0xFAFF ||\n               c >= 0xFE10 && c <= 0xFE19 ||\n               c >= 0xFE30 && c <= 0xFE52 ||\n               c >= 0xFE54 && c <= 0xFE66 ||\n               c >= 0xFE68 && c <= 0xFE6B ||\n               c >= 0xFF01 && c <= 0xFF60 ||\n               c >= 0xFFE0 && c <= 0xFFE6;\n    }\n\n}).call(EditSession.prototype);\n\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n    wrap: {\n        set: function(value) {\n            if (!value || value == \"off\")\n                value = false;\n            else if (value == \"free\")\n                value = true;\n            else if (value == \"printMargin\")\n                value = -1;\n            else if (typeof value == \"string\")\n                value = parseInt(value, 10) || false;\n\n            if (this.$wrap == value)\n                return;\n            this.$wrap = value;\n            if (!value) {\n                this.setUseWrapMode(false);\n            } else {\n                var col = typeof value == \"number\" ? value : null;\n                this.setWrapLimitRange(col, col);\n                this.setUseWrapMode(true);\n            }\n        },\n        get: function() {\n            if (this.getUseWrapMode()) {\n                if (this.$wrap == -1)\n                    return \"printMargin\";\n                if (!this.getWrapLimitRange().min)\n                    return \"free\";\n                return this.$wrap;\n            }\n            return \"off\";\n        },\n        handlesSet: true\n    },    \n    wrapMethod: {\n        set: function(val) {\n            val = val == \"auto\"\n                ? this.$mode.type != \"text\"\n                : val != \"text\";\n            if (val != this.$wrapAsCode) {\n                this.$wrapAsCode = val;\n                if (this.$useWrapMode) {\n                    this.$useWrapMode = false;\n                    this.setUseWrapMode(true);\n                }\n            }\n        },\n        initialValue: \"auto\"\n    },\n    indentedSoftWrap: {\n        set: function() {\n            if (this.$useWrapMode) {\n                this.$useWrapMode = false;\n                this.setUseWrapMode(true);\n            }\n        },\n        initialValue: true \n    },\n    firstLineNumber: {\n        set: function() {this._signal(\"changeBreakpoint\");},\n        initialValue: 1\n    },\n    useWorker: {\n        set: function(useWorker) {\n            this.$useWorker = useWorker;\n\n            this.$stopWorker();\n            if (useWorker)\n                this.$startWorker();\n        },\n        initialValue: true\n    },\n    useSoftTabs: {initialValue: true},\n    tabSize: {\n        set: function(tabSize) {\n            tabSize = parseInt(tabSize);\n            if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n\n            this.$modified = true;\n            this.$rowLengthCache = [];\n            this.$tabSize = tabSize;\n            this._signal(\"changeTabSize\");\n        },\n        initialValue: 4,\n        handlesSet: true\n    },\n    navigateWithinSoftTabs: {initialValue: false},\n    foldStyle: {\n        set: function(val) {this.setFoldStyle(val);},\n        handlesSet: true\n    },\n    overwrite: {\n        set: function(val) {this._signal(\"changeOverwrite\");},\n        initialValue: false\n    },\n    newLineMode: {\n        set: function(val) {this.doc.setNewLineMode(val);},\n        get: function() {return this.doc.getNewLineMode();},\n        handlesSet: true\n    },\n    mode: {\n        set: function(val) { this.setMode(val); },\n        get: function() { return this.$modeId; },\n        handlesSet: true\n    }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar Search = function() {\n    this.$options = {};\n};\n\n(function() {\n    this.set = function(options) {\n        oop.mixin(this.$options, options);\n        return this;\n    };\n    this.getOptions = function() {\n        return lang.copyObject(this.$options);\n    };\n    this.setOptions = function(options) {\n        this.$options = options;\n    };\n    this.find = function(session) {\n        var options = this.$options;\n        var iterator = this.$matchIterator(session, options);\n        if (!iterator)\n            return false;\n\n        var firstRange = null;\n        iterator.forEach(function(sr, sc, er, ec) {\n            firstRange = new Range(sr, sc, er, ec);\n            if (sc == ec && options.start && options.start.start\n                && options.skipCurrent != false && firstRange.isEqual(options.start)\n            ) {\n                firstRange = null;\n                return false;\n            }\n            \n            return true;\n        });\n\n        return firstRange;\n    };\n    this.findAll = function(session) {\n        var options = this.$options;\n        if (!options.needle)\n            return [];\n        this.$assembleRegExp(options);\n\n        var range = options.range;\n        var lines = range\n            ? session.getLines(range.start.row, range.end.row)\n            : session.doc.getAllLines();\n\n        var ranges = [];\n        var re = options.re;\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var maxRow = lines.length - len;\n            var prevRange;\n            outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n                for (var j = 0; j < len; j++)\n                    if (lines[row + j].search(re[j]) == -1)\n                        continue outer;\n                \n                var startLine = lines[row];\n                var line = lines[row + len - 1];\n                var startIndex = startLine.length - startLine.match(re[0])[0].length;\n                var endIndex = line.match(re[len - 1])[0].length;\n                \n                if (prevRange && prevRange.end.row === row &&\n                    prevRange.end.column > startIndex\n                ) {\n                    continue;\n                }\n                ranges.push(prevRange = new Range(\n                    row, startIndex, row + len - 1, endIndex\n                ));\n                if (len > 2)\n                    row = row + len - 2;\n            }\n        } else {\n            for (var i = 0; i < lines.length; i++) {\n                var matches = lang.getMatchOffsets(lines[i], re);\n                for (var j = 0; j < matches.length; j++) {\n                    var match = matches[j];\n                    ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n                }\n            }\n        }\n\n        if (range) {\n            var startColumn = range.start.column;\n            var endColumn = range.start.column;\n            var i = 0, j = ranges.length - 1;\n            while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n                i++;\n\n            while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n                j--;\n            \n            ranges = ranges.slice(i, j + 1);\n            for (i = 0, j = ranges.length; i < j; i++) {\n                ranges[i].start.row += range.start.row;\n                ranges[i].end.row += range.start.row;\n            }\n        }\n\n        return ranges;\n    };\n    this.replace = function(input, replacement) {\n        var options = this.$options;\n\n        var re = this.$assembleRegExp(options);\n        if (options.$isMultiLine)\n            return replacement;\n\n        if (!re)\n            return;\n\n        var match = re.exec(input);\n        if (!match || match[0].length != input.length)\n            return null;\n        \n        replacement = input.replace(re, replacement);\n        if (options.preserveCase) {\n            replacement = replacement.split(\"\");\n            for (var i = Math.min(input.length, input.length); i--; ) {\n                var ch = input[i];\n                if (ch && ch.toLowerCase() != ch)\n                    replacement[i] = replacement[i].toUpperCase();\n                else\n                    replacement[i] = replacement[i].toLowerCase();\n            }\n            replacement = replacement.join(\"\");\n        }\n        \n        return replacement;\n    };\n\n    this.$assembleRegExp = function(options, $disableFakeMultiline) {\n        if (options.needle instanceof RegExp)\n            return options.re = options.needle;\n\n        var needle = options.needle;\n\n        if (!options.needle)\n            return options.re = false;\n\n        if (!options.regExp)\n            needle = lang.escapeRegExp(needle);\n\n        if (options.wholeWord)\n            needle = addWordBoundary(needle, options);\n\n        var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n        options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n        if (options.$isMultiLine)\n            return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n        try {\n            var re = new RegExp(needle, modifier);\n        } catch(e) {\n            re = false;\n        }\n        return options.re = re;\n    };\n\n    this.$assembleMultilineRegExp = function(needle, modifier) {\n        var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n        var re = [];\n        for (var i = 0; i < parts.length; i++) try {\n            re.push(new RegExp(parts[i], modifier));\n        } catch(e) {\n            return false;\n        }\n        return re;\n    };\n\n    this.$matchIterator = function(session, options) {\n        var re = this.$assembleRegExp(options);\n        if (!re)\n            return false;\n        var backwards = options.backwards == true;\n        var skipCurrent = options.skipCurrent != false;\n\n        var range = options.range;\n        var start = options.start;\n        if (!start)\n            start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n         \n        if (start.start)\n            start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n        var firstRow = range ? range.start.row : 0;\n        var lastRow = range ? range.end.row : session.getLength() - 1;\n        \n        if (backwards) {\n            var forEach = function(callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row--; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n            };\n        }\n        else {\n            var forEach = function(callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row = row + 1; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n            };\n        }\n        \n        if (options.$isMultiLine) {\n            var len = re.length;\n            var forEachInLine = function(row, offset, callback) {\n                var startRow = backwards ? row - len + 1 : row;\n                if (startRow < 0) return;\n                var line = session.getLine(startRow);\n                var startIndex = line.search(re[0]);\n                if (!backwards && startIndex < offset || startIndex === -1) return;\n                for (var i = 1; i < len; i++) {\n                    line = session.getLine(startRow + i);\n                    if (line.search(re[i]) == -1)\n                        return;\n                }\n                var endIndex = line.match(re[len - 1])[0].length;\n                if (backwards && endIndex > offset) return;\n                if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n                    return true;\n            };\n        }\n        else if (backwards) {\n            var forEachInLine = function(row, endIndex, callback) {\n                var line = session.getLine(row);\n                var matches = [];\n                var m, last = 0;\n                re.lastIndex = 0;\n                while((m = re.exec(line))) {\n                    var length = m[0].length;\n                    last = m.index;\n                    if (!length) {\n                        if (last >= line.length) break;\n                        re.lastIndex = last += 1;\n                    }\n                    if (m.index + length > endIndex)\n                        break;\n                    matches.push(m.index, length);\n                }\n                for (var i = matches.length - 1; i >= 0; i -= 2) {\n                    var column = matches[i - 1];\n                    var length = matches[i];\n                    if (callback(row, column, row, column + length))\n                        return true;\n                }\n            };\n        }\n        else {\n            var forEachInLine = function(row, startIndex, callback) {\n                var line = session.getLine(row);\n                var last;\n                var m;\n                re.lastIndex = startIndex;\n                while((m = re.exec(line))) {\n                    var length = m[0].length;\n                    last = m.index;\n                    if (callback(row, last, row,last + length))\n                        return true;\n                    if (!length) {\n                        re.lastIndex = last += 1;\n                        if (last >= line.length) return false;\n                    }\n                }\n            };\n        }\n        return {forEach: forEach};\n    };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n    function wordBoundary(c) {\n        if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n        return \"\";\n    }\n    return wordBoundary(needle[0]) + needle\n        + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n    this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n    this.commands = {};\n    this.commandKeyBinding = {};\n    this.addCommands(config);\n    this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n    HashHandler.call(this, config, platform);\n    this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n    \n\n    this.addCommand = function(command) {\n        if (this.commands[command.name])\n            this.removeCommand(command);\n\n        this.commands[command.name] = command;\n\n        if (command.bindKey)\n            this._buildKeyHash(command);\n    };\n\n    this.removeCommand = function(command, keepCommand) {\n        var name = command && (typeof command === 'string' ? command : command.name);\n        command = this.commands[name];\n        if (!keepCommand)\n            delete this.commands[name];\n        var ckb = this.commandKeyBinding;\n        for (var keyId in ckb) {\n            var cmdGroup = ckb[keyId];\n            if (cmdGroup == command) {\n                delete ckb[keyId];\n            } else if (Array.isArray(cmdGroup)) {\n                var i = cmdGroup.indexOf(command);\n                if (i != -1) {\n                    cmdGroup.splice(i, 1);\n                    if (cmdGroup.length == 1)\n                        ckb[keyId] = cmdGroup[0];\n                }\n            }\n        }\n    };\n\n    this.bindKey = function(key, command, position) {\n        if (typeof key == \"object\" && key) {\n            if (position == undefined)\n                position = key.position;\n            key = key[this.platform];\n        }\n        if (!key)\n            return;\n        if (typeof command == \"function\")\n            return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n        \n        key.split(\"|\").forEach(function(keyPart) {\n            var chain = \"\";\n            if (keyPart.indexOf(\" \") != -1) {\n                var parts = keyPart.split(/\\s+/);\n                keyPart = parts.pop();\n                parts.forEach(function(keyPart) {\n                    var binding = this.parseKeys(keyPart);\n                    var id = KEY_MODS[binding.hashId] + binding.key;\n                    chain += (chain ? \" \" : \"\") + id;\n                    this._addCommandToBinding(chain, \"chainKeys\");\n                }, this);\n                chain += \" \";\n            }\n            var binding = this.parseKeys(keyPart);\n            var id = KEY_MODS[binding.hashId] + binding.key;\n            this._addCommandToBinding(chain + id, command, position);\n        }, this);\n    };\n    \n    function getPosition(command) {\n        return typeof command == \"object\" && command.bindKey\n            && command.bindKey.position \n            || (command.isDefault ? -100 : 0);\n    }\n    this._addCommandToBinding = function(keyId, command, position) {\n        var ckb = this.commandKeyBinding, i;\n        if (!command) {\n            delete ckb[keyId];\n        } else if (!ckb[keyId] || this.$singleCommand) {\n            ckb[keyId] = command;\n        } else {\n            if (!Array.isArray(ckb[keyId])) {\n                ckb[keyId] = [ckb[keyId]];\n            } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n                ckb[keyId].splice(i, 1);\n            }\n            \n            if (typeof position != \"number\") {\n                position = getPosition(command);\n            }\n\n            var commands = ckb[keyId];\n            for (i = 0; i < commands.length; i++) {\n                var other = commands[i];\n                var otherPos = getPosition(other);\n                if (otherPos > position)\n                    break;\n            }\n            commands.splice(i, 0, command);\n        }\n    };\n\n    this.addCommands = function(commands) {\n        commands && Object.keys(commands).forEach(function(name) {\n            var command = commands[name];\n            if (!command)\n                return;\n            \n            if (typeof command === \"string\")\n                return this.bindKey(command, name);\n\n            if (typeof command === \"function\")\n                command = { exec: command };\n\n            if (typeof command !== \"object\")\n                return;\n\n            if (!command.name)\n                command.name = name;\n\n            this.addCommand(command);\n        }, this);\n    };\n\n    this.removeCommands = function(commands) {\n        Object.keys(commands).forEach(function(name) {\n            this.removeCommand(commands[name]);\n        }, this);\n    };\n\n    this.bindKeys = function(keyList) {\n        Object.keys(keyList).forEach(function(key) {\n            this.bindKey(key, keyList[key]);\n        }, this);\n    };\n\n    this._buildKeyHash = function(command) {\n        this.bindKey(command.bindKey, command);\n    };\n    this.parseKeys = function(keys) {\n        var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n        var key = parts.pop();\n\n        var keyCode = keyUtil[key];\n        if (keyUtil.FUNCTION_KEYS[keyCode])\n            key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n        else if (!parts.length)\n            return {key: key, hashId: -1};\n        else if (parts.length == 1 && parts[0] == \"shift\")\n            return {key: key.toUpperCase(), hashId: -1};\n\n        var hashId = 0;\n        for (var i = parts.length; i--;) {\n            var modifier = keyUtil.KEY_MODS[parts[i]];\n            if (modifier == null) {\n                if (typeof console != \"undefined\")\n                    console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n                return false;\n            }\n            hashId |= modifier;\n        }\n        return {key: key, hashId: hashId};\n    };\n\n    this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n        var key = KEY_MODS[hashId] + keyString;\n        return this.commandKeyBinding[key];\n    };\n\n    this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n        if (keyCode < 0) return;\n        var key = KEY_MODS[hashId] + keyString;\n        var command = this.commandKeyBinding[key];\n        if (data.$keyChain) {\n            data.$keyChain += \" \" + key;\n            command = this.commandKeyBinding[data.$keyChain] || command;\n        }\n        \n        if (command) {\n            if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n                data.$keyChain = data.$keyChain || key;\n                return {command: \"null\"};\n            }\n        }\n        \n        if (data.$keyChain) {\n            if ((!hashId || hashId == 4) && keyString.length == 1)\n                data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n            else if (hashId == -1 || keyCode > 0)\n                data.$keyChain = \"\"; // reset keyChain\n        }\n        return {command: command};\n    };\n    \n    this.getStatusText = function(editor, data) {\n        return data.$keyChain || \"\";\n    };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n    MultiHashHandler.call(this, commands, platform);\n    this.byName = this.commands;\n    this.setDefaultHandler(\"exec\", function(e) {\n        return e.command.exec(e.editor, e.args || {});\n    });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.exec = function(command, editor, args) {\n        if (Array.isArray(command)) {\n            for (var i = command.length; i--; ) {\n                if (this.exec(command[i], editor, args)) return true;\n            }\n            return false;\n        }\n\n        if (typeof command === \"string\")\n            command = this.commands[command];\n\n        if (!command)\n            return false;\n\n        if (editor && editor.$readOnly && !command.readOnly)\n            return false;\n\n        if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n            return false;\n\n        var e = {editor: editor, command: command, args: args};\n        e.returnValue = this._emit(\"exec\", e);\n        this._signal(\"afterExec\", e);\n\n        return e.returnValue === false ? false : true;\n    };\n\n    this.toggleRecording = function(editor) {\n        if (this.$inReplay)\n            return;\n\n        editor && editor._emit(\"changeStatus\");\n        if (this.recording) {\n            this.macro.pop();\n            this.removeEventListener(\"exec\", this.$addCommandToMacro);\n\n            if (!this.macro.length)\n                this.macro = this.oldMacro;\n\n            return this.recording = false;\n        }\n        if (!this.$addCommandToMacro) {\n            this.$addCommandToMacro = function(e) {\n                this.macro.push([e.command, e.args]);\n            }.bind(this);\n        }\n\n        this.oldMacro = this.macro;\n        this.macro = [];\n        this.on(\"exec\", this.$addCommandToMacro);\n        return this.recording = true;\n    };\n\n    this.replay = function(editor) {\n        if (this.$inReplay || !this.macro)\n            return;\n\n        if (this.recording)\n            return this.toggleRecording(editor);\n\n        try {\n            this.$inReplay = true;\n            this.macro.forEach(function(x) {\n                if (typeof x == \"string\")\n                    this.exec(x, editor);\n                else\n                    this.exec(x[0], editor, x[1]);\n            }, this);\n        } finally {\n            this.$inReplay = false;\n        }\n    };\n\n    this.trimMacro = function(m) {\n        return m.map(function(x){\n            if (typeof x[0] != \"string\")\n                x[0] = x[0].name;\n            if (!x[1])\n                x = x[0];\n            return x;\n        });\n    };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n    return {win: win, mac: mac};\n}\nexports.commands = [{\n    name: \"showSettingsMenu\",\n    bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/settings_menu\", function(module) {\n            module.init(editor);\n            editor.showSettingsMenu();\n        });\n    },\n    readOnly: true\n}, {\n    name: \"goToNextError\",\n    bindKey: bindKey(\"Alt-E\", \"F4\"),\n    exec: function(editor) {\n        config.loadModule(\"./ext/error_marker\", function(module) {\n            module.showErrorMarker(editor, 1);\n        });\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"goToPreviousError\",\n    bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n    exec: function(editor) {\n        config.loadModule(\"./ext/error_marker\", function(module) {\n            module.showErrorMarker(editor, -1);\n        });\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"selectall\",\n    bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n    exec: function(editor) { editor.selectAll(); },\n    readOnly: true\n}, {\n    name: \"centerselection\",\n    bindKey: bindKey(null, \"Ctrl-L\"),\n    exec: function(editor) { editor.centerSelection(); },\n    readOnly: true\n}, {\n    name: \"gotoline\",\n    bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n    exec: function(editor, line) {\n        if (typeof line !== \"number\")\n            line = parseInt(prompt(\"Enter line number:\"), 10);\n        if (!isNaN(line)) {\n            editor.gotoLine(line);\n        }\n    },\n    readOnly: true\n}, {\n    name: \"fold\",\n    bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n    exec: function(editor) { editor.session.toggleFold(false); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"unfold\",\n    bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n    exec: function(editor) { editor.session.toggleFold(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"toggleFoldWidget\",\n    bindKey: bindKey(\"F2\", \"F2\"),\n    exec: function(editor) { editor.session.toggleFoldWidget(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"toggleParentFoldWidget\",\n    bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n    exec: function(editor) { editor.session.toggleFoldWidget(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"foldall\",\n    bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n    exec: function(editor) { editor.session.foldAll(); },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"foldOther\",\n    bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n    exec: function(editor) { \n        editor.session.foldAll();\n        editor.session.unfold(editor.selection.getAllRanges());\n    },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"unfoldall\",\n    bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n    exec: function(editor) { editor.session.unfold(); },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"findnext\",\n    bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n    exec: function(editor) { editor.findNext(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"findprevious\",\n    bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n    exec: function(editor) { editor.findPrevious(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"selectOrFindNext\",\n    bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        else\n            editor.findNext(); \n    },\n    readOnly: true\n}, {\n    name: \"selectOrFindPrevious\",\n    bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n    exec: function(editor) { \n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        else\n            editor.findPrevious();\n    },\n    readOnly: true\n}, {\n    name: \"find\",\n    bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n    },\n    readOnly: true\n}, {\n    name: \"overwrite\",\n    bindKey: \"Insert\",\n    exec: function(editor) { editor.toggleOverwrite(); },\n    readOnly: true\n}, {\n    name: \"selecttostart\",\n    bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n    exec: function(editor) { editor.getSelection().selectFileStart(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"gotostart\",\n    bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n    exec: function(editor) { editor.navigateFileStart(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"selectup\",\n    bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n    exec: function(editor) { editor.getSelection().selectUp(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"golineup\",\n    bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n    exec: function(editor, args) { editor.navigateUp(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttoend\",\n    bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n    exec: function(editor) { editor.getSelection().selectFileEnd(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"gotoend\",\n    bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n    exec: function(editor) { editor.navigateFileEnd(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"selectdown\",\n    bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n    exec: function(editor) { editor.getSelection().selectDown(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"golinedown\",\n    bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n    exec: function(editor, args) { editor.navigateDown(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectwordleft\",\n    bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n    exec: function(editor) { editor.getSelection().selectWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotowordleft\",\n    bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n    exec: function(editor) { editor.navigateWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttolinestart\",\n    bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n    exec: function(editor) { editor.getSelection().selectLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotolinestart\",\n    bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n    exec: function(editor) { editor.navigateLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectleft\",\n    bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n    exec: function(editor) { editor.getSelection().selectLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotoleft\",\n    bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n    exec: function(editor, args) { editor.navigateLeft(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectwordright\",\n    bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n    exec: function(editor) { editor.getSelection().selectWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotowordright\",\n    bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n    exec: function(editor) { editor.navigateWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttolineend\",\n    bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n    exec: function(editor) { editor.getSelection().selectLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotolineend\",\n    bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n    exec: function(editor) { editor.navigateLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectright\",\n    bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n    exec: function(editor) { editor.getSelection().selectRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotoright\",\n    bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n    exec: function(editor, args) { editor.navigateRight(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectpagedown\",\n    bindKey: \"Shift-PageDown\",\n    exec: function(editor) { editor.selectPageDown(); },\n    readOnly: true\n}, {\n    name: \"pagedown\",\n    bindKey: bindKey(null, \"Option-PageDown\"),\n    exec: function(editor) { editor.scrollPageDown(); },\n    readOnly: true\n}, {\n    name: \"gotopagedown\",\n    bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n    exec: function(editor) { editor.gotoPageDown(); },\n    readOnly: true\n}, {\n    name: \"selectpageup\",\n    bindKey: \"Shift-PageUp\",\n    exec: function(editor) { editor.selectPageUp(); },\n    readOnly: true\n}, {\n    name: \"pageup\",\n    bindKey: bindKey(null, \"Option-PageUp\"),\n    exec: function(editor) { editor.scrollPageUp(); },\n    readOnly: true\n}, {\n    name: \"gotopageup\",\n    bindKey: \"PageUp\",\n    exec: function(editor) { editor.gotoPageUp(); },\n    readOnly: true\n}, {\n    name: \"scrollup\",\n    bindKey: bindKey(\"Ctrl-Up\", null),\n    exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n    readOnly: true\n}, {\n    name: \"scrolldown\",\n    bindKey: bindKey(\"Ctrl-Down\", null),\n    exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n    readOnly: true\n}, {\n    name: \"selectlinestart\",\n    bindKey: \"Shift-Home\",\n    exec: function(editor) { editor.getSelection().selectLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectlineend\",\n    bindKey: \"Shift-End\",\n    exec: function(editor) { editor.getSelection().selectLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"togglerecording\",\n    bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n    exec: function(editor) { editor.commands.toggleRecording(editor); },\n    readOnly: true\n}, {\n    name: \"replaymacro\",\n    bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n    exec: function(editor) { editor.commands.replay(editor); },\n    readOnly: true\n}, {\n    name: \"jumptomatching\",\n    bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n    exec: function(editor) { editor.jumpToMatching(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"selecttomatching\",\n    bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n    exec: function(editor) { editor.jumpToMatching(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"expandToMatching\",\n    bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n    exec: function(editor) { editor.jumpToMatching(true, true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"passKeysToBrowser\",\n    bindKey: bindKey(null, null),\n    exec: function() {},\n    passEvent: true,\n    readOnly: true\n}, {\n    name: \"copy\",\n    exec: function(editor) {\n    },\n    readOnly: true\n},\n{\n    name: \"cut\",\n    exec: function(editor) {\n        var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n        var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n        editor._emit(\"cut\", range);\n\n        if (!range.isEmpty())\n            editor.session.remove(range);\n        editor.clearSelection();\n    },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"paste\",\n    exec: function(editor, args) {\n        editor.$handlePaste(args);\n    },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removeline\",\n    bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n    exec: function(editor) { editor.removeLines(); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEachLine\"\n}, {\n    name: \"duplicateSelection\",\n    bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n    exec: function(editor) { editor.duplicateSelection(); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"sortlines\",\n    bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n    exec: function(editor) { editor.sortLines(); },\n    scrollIntoView: \"selection\",\n    multiSelectAction: \"forEachLine\"\n}, {\n    name: \"togglecomment\",\n    bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n    exec: function(editor) { editor.toggleCommentLines(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"toggleBlockComment\",\n    bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n    exec: function(editor) { editor.toggleBlockComment(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"modifyNumberUp\",\n    bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n    exec: function(editor) { editor.modifyNumber(1); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"modifyNumberDown\",\n    bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n    exec: function(editor) { editor.modifyNumber(-1); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"replace\",\n    bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n    }\n}, {\n    name: \"undo\",\n    bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n    exec: function(editor) { editor.undo(); }\n}, {\n    name: \"redo\",\n    bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n    exec: function(editor) { editor.redo(); }\n}, {\n    name: \"copylinesup\",\n    bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n    exec: function(editor) { editor.copyLinesUp(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"movelinesup\",\n    bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n    exec: function(editor) { editor.moveLinesUp(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"copylinesdown\",\n    bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n    exec: function(editor) { editor.copyLinesDown(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"movelinesdown\",\n    bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n    exec: function(editor) { editor.moveLinesDown(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"del\",\n    bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n    exec: function(editor) { editor.remove(\"right\"); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"backspace\",\n    bindKey: bindKey(\n        \"Shift-Backspace|Backspace\",\n        \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n    ),\n    exec: function(editor) { editor.remove(\"left\"); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"cut_or_delete\",\n    bindKey: bindKey(\"Shift-Delete\", null),\n    exec: function(editor) { \n        if (editor.selection.isEmpty()) {\n            editor.remove(\"left\");\n        } else {\n            return false;\n        }\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolinestart\",\n    bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n    exec: function(editor) { editor.removeToLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolineend\",\n    bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n    exec: function(editor) { editor.removeToLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolinestarthard\",\n    bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n        range.start.column = 0;\n        editor.session.remove(range);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolineendhard\",\n    bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n        range.end.column = Number.MAX_VALUE;\n        editor.session.remove(range);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removewordleft\",\n    bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n    exec: function(editor) { editor.removeWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removewordright\",\n    bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n    exec: function(editor) { editor.removeWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"outdent\",\n    bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n    exec: function(editor) { editor.blockOutdent(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"indent\",\n    bindKey: bindKey(\"Tab\", \"Tab\"),\n    exec: function(editor) { editor.indent(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"blockoutdent\",\n    bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n    exec: function(editor) { editor.blockOutdent(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"blockindent\",\n    bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n    exec: function(editor) { editor.blockIndent(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"insertstring\",\n    exec: function(editor, str) { editor.insert(str); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"inserttext\",\n    exec: function(editor, args) {\n        editor.insert(lang.stringRepeat(args.text  || \"\", args.times || 1));\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"splitline\",\n    bindKey: bindKey(null, \"Ctrl-O\"),\n    exec: function(editor) { editor.splitLine(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"transposeletters\",\n    bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n    exec: function(editor) { editor.transposeLetters(); },\n    multiSelectAction: function(editor) {editor.transposeSelections(1); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"touppercase\",\n    bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n    exec: function(editor) { editor.toUpperCase(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"tolowercase\",\n    bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n    exec: function(editor) { editor.toLowerCase(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"expandtoline\",\n    bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n\n        range.start.column = range.end.column = 0;\n        range.end.row++;\n        editor.selection.setRange(range, false);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"joinlines\",\n    bindKey: bindKey(null, null),\n    exec: function(editor) {\n        var isBackwards = editor.selection.isBackwards();\n        var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n        var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n        var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n        var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n        var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n        var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n        for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n            var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n            if (curLine.length !== 0) {\n                curLine = \" \" + curLine;\n            }\n            insertLine += curLine;\n        }\n\n        if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n            insertLine += editor.session.doc.getNewLineCharacter();\n        }\n\n        editor.clearSelection();\n        editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n        if (selectedCount > 0) {\n            editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n            editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n        } else {\n            firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n            editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n        }\n    },\n    multiSelectAction: \"forEach\",\n    readOnly: true\n}, {\n    name: \"invertSelection\",\n    bindKey: bindKey(null, null),\n    exec: function(editor) {\n        var endRow = editor.session.doc.getLength() - 1;\n        var endCol = editor.session.doc.getLine(endRow).length;\n        var ranges = editor.selection.rangeList.ranges;\n        var newRanges = [];\n        if (ranges.length < 1) {\n            ranges = [editor.selection.getRange()];\n        }\n\n        for (var i = 0; i < ranges.length; i++) {\n            if (i == (ranges.length - 1)) {\n                if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n                    newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n                }\n            }\n\n            if (i === 0) {\n                if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n                    newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n                }\n            } else {\n                newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n            }\n        }\n\n        editor.exitMultiSelectMode();\n        editor.clearSelection();\n\n        for(var i = 0; i < newRanges.length; i++) {\n            editor.selection.addRange(newRanges[i], false);\n        }\n    },\n    readOnly: true,\n    scrollIntoView: \"none\"\n}];\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nmodule.exports = { lineMode: false };\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\n\nvar clipboard = require(\"./clipboard\");\nvar Editor = function(renderer, session, options) {\n    var container = renderer.getContainerElement();\n    this.container = container;\n    this.renderer = renderer;\n    this.id = \"editor\" + (++Editor.$uid);\n\n    this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n    if (typeof document == \"object\") {\n        this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n        this.renderer.textarea = this.textInput.getElement();\n        this.$mouseHandler = new MouseHandler(this);\n        new FoldHandler(this);\n    }\n\n    this.keyBinding = new KeyBinding(this);\n\n    this.$search = new Search().set({\n        wrap: true\n    });\n\n    this.$historyTracker = this.$historyTracker.bind(this);\n    this.commands.on(\"exec\", this.$historyTracker);\n\n    this.$initOperationListeners();\n    \n    this._$emitInputEvent = lang.delayedCall(function() {\n        this._signal(\"input\", {});\n        if (this.session && this.session.bgTokenizer)\n            this.session.bgTokenizer.scheduleStart();\n    }.bind(this));\n    \n    this.on(\"change\", function(_, _self) {\n        _self._$emitInputEvent.schedule(31);\n    });\n\n    this.setSession(session || options && options.session || new EditSession(\"\"));\n    config.resetOptions(this);\n    if (options)\n        this.setOptions(options);\n    config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$initOperationListeners = function() {\n        this.commands.on(\"exec\", this.startOperation.bind(this), true);\n        this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n        this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n        this.on(\"change\", function() {\n            if (!this.curOp) {\n                this.startOperation();\n                this.curOp.selectionBefore = this.$lastSel;\n            }\n            this.curOp.docChanged = true;\n        }.bind(this), true);\n        \n        this.on(\"changeSelection\", function() {\n            if (!this.curOp) {\n                this.startOperation();\n                this.curOp.selectionBefore = this.$lastSel;\n            }\n            this.curOp.selectionChanged = true;\n        }.bind(this), true);\n    };\n\n    this.curOp = null;\n    this.prevOp = {};\n    this.startOperation = function(commandEvent) {\n        if (this.curOp) {\n            if (!commandEvent || this.curOp.command)\n                return;\n            this.prevOp = this.curOp;\n        }\n        if (!commandEvent) {\n            this.previousCommand = null;\n            commandEvent = {};\n        }\n\n        this.$opResetTimer.schedule();\n        this.curOp = this.session.curOp = {\n            command: commandEvent.command || {},\n            args: commandEvent.args,\n            scrollTop: this.renderer.scrollTop\n        };\n        this.curOp.selectionBefore = this.selection.toJSON();\n    };\n\n    this.endOperation = function(e) {\n        if (this.curOp) {\n            if (e && e.returnValue === false)\n                return (this.curOp = null);\n            if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n                return;\n            this._signal(\"beforeEndOperation\");\n            if (!this.curOp) return;\n            var command = this.curOp.command;\n            var scrollIntoView = command && command.scrollIntoView;\n            if (scrollIntoView) {\n                switch (scrollIntoView) {\n                    case \"center-animate\":\n                        scrollIntoView = \"animate\";\n                    case \"center\":\n                        this.renderer.scrollCursorIntoView(null, 0.5);\n                        break;\n                    case \"animate\":\n                    case \"cursor\":\n                        this.renderer.scrollCursorIntoView();\n                        break;\n                    case \"selectionPart\":\n                        var range = this.selection.getRange();\n                        var config = this.renderer.layerConfig;\n                        if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n                            this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n                        }\n                        break;\n                    default:\n                        break;\n                }\n                if (scrollIntoView == \"animate\")\n                    this.renderer.animateScrolling(this.curOp.scrollTop);\n            }\n            var sel = this.selection.toJSON();\n            this.curOp.selectionAfter = sel;\n            this.$lastSel = this.selection.toJSON();\n            this.session.getUndoManager().addSelection(sel);\n            this.prevOp = this.curOp;\n            this.curOp = null;\n        }\n    };\n    this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n    this.$historyTracker = function(e) {\n        if (!this.$mergeUndoDeltas)\n            return;\n\n        var prev = this.prevOp;\n        var mergeableCommands = this.$mergeableCommands;\n        var shouldMerge = prev.command && (e.command.name == prev.command.name);\n        if (e.command.name == \"insertstring\") {\n            var text = e.args;\n            if (this.mergeNextCommand === undefined)\n                this.mergeNextCommand = true;\n\n            shouldMerge = shouldMerge\n                && this.mergeNextCommand // previous command allows to coalesce with\n                && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n            this.mergeNextCommand = true;\n        } else {\n            shouldMerge = shouldMerge\n                && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n        }\n\n        if (\n            this.$mergeUndoDeltas != \"always\"\n            && Date.now() - this.sequenceStartTime > 2000\n        ) {\n            shouldMerge = false; // the sequence is too long\n        }\n\n        if (shouldMerge)\n            this.session.mergeUndoDeltas = true;\n        else if (mergeableCommands.indexOf(e.command.name) !== -1)\n            this.sequenceStartTime = Date.now();\n    };\n    this.setKeyboardHandler = function(keyboardHandler, cb) {\n        if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n            this.$keybindingId = keyboardHandler;\n            var _self = this;\n            config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n                if (_self.$keybindingId == keyboardHandler)\n                    _self.keyBinding.setKeyboardHandler(module && module.handler);\n                cb && cb();\n            });\n        } else {\n            this.$keybindingId = null;\n            this.keyBinding.setKeyboardHandler(keyboardHandler);\n            cb && cb();\n        }\n    };\n    this.getKeyboardHandler = function() {\n        return this.keyBinding.getKeyboardHandler();\n    };\n    this.setSession = function(session) {\n        if (this.session == session)\n            return;\n        if (this.curOp) this.endOperation();\n        this.curOp = {};\n\n        var oldSession = this.session;\n        if (oldSession) {\n            this.session.off(\"change\", this.$onDocumentChange);\n            this.session.off(\"changeMode\", this.$onChangeMode);\n            this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n            this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.session.off(\"changeFold\", this.$onChangeFold);\n            this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.session.off(\"changeOverwrite\", this.$onCursorChange);\n            this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n            this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n            var selection = this.session.getSelection();\n            selection.off(\"changeCursor\", this.$onCursorChange);\n            selection.off(\"changeSelection\", this.$onSelectionChange);\n        }\n\n        this.session = session;\n        if (session) {\n            this.$onDocumentChange = this.onDocumentChange.bind(this);\n            session.on(\"change\", this.$onDocumentChange);\n            this.renderer.setSession(session);\n    \n            this.$onChangeMode = this.onChangeMode.bind(this);\n            session.on(\"changeMode\", this.$onChangeMode);\n    \n            this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n            session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n    \n            this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n            session.on(\"changeTabSize\", this.$onChangeTabSize);\n    \n            this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n            session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n    \n            this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n            session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n    \n            this.$onChangeFold = this.onChangeFold.bind(this);\n            session.on(\"changeFold\", this.$onChangeFold);\n    \n            this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n            this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n    \n            this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n            this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n    \n            this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n            this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n    \n            this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n            this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n    \n            this.$onCursorChange = this.onCursorChange.bind(this);\n            this.session.on(\"changeOverwrite\", this.$onCursorChange);\n    \n            this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n            this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n    \n            this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n            this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n    \n            this.selection = session.getSelection();\n            this.selection.on(\"changeCursor\", this.$onCursorChange);\n    \n            this.$onSelectionChange = this.onSelectionChange.bind(this);\n            this.selection.on(\"changeSelection\", this.$onSelectionChange);\n    \n            this.onChangeMode();\n    \n            this.onCursorChange();\n    \n            this.onScrollTopChange();\n            this.onScrollLeftChange();\n            this.onSelectionChange();\n            this.onChangeFrontMarker();\n            this.onChangeBackMarker();\n            this.onChangeBreakpoint();\n            this.onChangeAnnotation();\n            this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n            this.renderer.updateFull();\n        } else {\n            this.selection = null;\n            this.renderer.setSession(session);\n        }\n\n        this._signal(\"changeSession\", {\n            session: session,\n            oldSession: oldSession\n        });\n        \n        this.curOp = null;\n        \n        oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n        session && session._signal(\"changeEditor\", {editor: this});\n        \n        if (session && session.bgTokenizer)\n            session.bgTokenizer.scheduleStart();\n    };\n    this.getSession = function() {\n        return this.session;\n    };\n    this.setValue = function(val, cursorPos) {\n        this.session.doc.setValue(val);\n\n        if (!cursorPos)\n            this.selectAll();\n        else if (cursorPos == 1)\n            this.navigateFileEnd();\n        else if (cursorPos == -1)\n            this.navigateFileStart();\n\n        return val;\n    };\n    this.getValue = function() {\n        return this.session.getValue();\n    };\n    this.getSelection = function() {\n        return this.selection;\n    };\n    this.resize = function(force) {\n        this.renderer.onResize(force);\n    };\n    this.setTheme = function(theme, cb) {\n        this.renderer.setTheme(theme, cb);\n    };\n    this.getTheme = function() {\n        return this.renderer.getTheme();\n    };\n    this.setStyle = function(style) {\n        this.renderer.setStyle(style);\n    };\n    this.unsetStyle = function(style) {\n        this.renderer.unsetStyle(style);\n    };\n    this.getFontSize = function () {\n        return this.getOption(\"fontSize\") ||\n           dom.computedStyle(this.container).fontSize;\n    };\n    this.setFontSize = function(size) {\n        this.setOption(\"fontSize\", size);\n    };\n\n    this.$highlightBrackets = function() {\n        if (this.session.$bracketHighlight) {\n            this.session.removeMarker(this.session.$bracketHighlight);\n            this.session.$bracketHighlight = null;\n        }\n\n        if (this.$highlightPending) {\n            return;\n        }\n        var self = this;\n        this.$highlightPending = true;\n        setTimeout(function() {\n            self.$highlightPending = false;\n            var session = self.session;\n            if (!session || !session.bgTokenizer) return;\n            var pos = session.findMatchingBracket(self.getCursorPosition());\n            if (pos) {\n                var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n            } else if (session.$mode.getMatching) {\n                var range = session.$mode.getMatching(self.session);\n            }\n            if (range)\n                session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n        }, 50);\n    };\n    this.$highlightTags = function() {\n        if (this.$highlightTagPending)\n            return;\n        var self = this;\n        this.$highlightTagPending = true;\n        setTimeout(function() {\n            self.$highlightTagPending = false;\n            \n            var session = self.session;\n            if (!session || !session.bgTokenizer) return;\n            \n            var pos = self.getCursorPosition();\n            var iterator = new TokenIterator(self.session, pos.row, pos.column);\n            var token = iterator.getCurrentToken();\n            \n            if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n                return;\n            }\n            \n            if (token.type.indexOf(\"tag-open\") != -1) {\n                token = iterator.stepForward();\n                if (!token)\n                    return;\n            }\n            \n            var tag = token.value;\n            var depth = 0;\n            var prevToken = iterator.stepBackward();\n            \n            if (prevToken.value == '<'){\n                do {\n                    prevToken = token;\n                    token = iterator.stepForward();\n                    \n                    if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                        if (prevToken.value === '<'){\n                            depth++;\n                        } else if (prevToken.value === '</'){\n                            depth--;\n                        }\n                    }\n                    \n                } while (token && depth >= 0);\n            } else {\n                do {\n                    token = prevToken;\n                    prevToken = iterator.stepBackward();\n                    \n                    if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                        } else if (prevToken.value === '</') {\n                            depth--;\n                        }\n                    }\n                } while (prevToken && depth <= 0);\n                iterator.stepForward();\n            }\n            \n            if (!token) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n                return;\n            }\n            \n            var row = iterator.getCurrentTokenRow();\n            var column = iterator.getCurrentTokenColumn();\n            var range = new Range(row, column, row, column+token.value.length);\n            var sbm = session.$backMarkers[session.$tagHighlight];\n            if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n            }\n            \n            if (!session.$tagHighlight)\n                session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n        }, 50);\n    };\n    this.focus = function() {\n        var _self = this;\n        setTimeout(function() {\n            if (!_self.isFocused())\n                _self.textInput.focus();\n        });\n        this.textInput.focus();\n    };\n    this.isFocused = function() {\n        return this.textInput.isFocused();\n    };\n    this.blur = function() {\n        this.textInput.blur();\n    };\n    this.onFocus = function(e) {\n        if (this.$isFocused)\n            return;\n        this.$isFocused = true;\n        this.renderer.showCursor();\n        this.renderer.visualizeFocus();\n        this._emit(\"focus\", e);\n    };\n    this.onBlur = function(e) {\n        if (!this.$isFocused)\n            return;\n        this.$isFocused = false;\n        this.renderer.hideCursor();\n        this.renderer.visualizeBlur();\n        this._emit(\"blur\", e);\n    };\n\n    this.$cursorChange = function() {\n        this.renderer.updateCursor();\n    };\n    this.onDocumentChange = function(delta) {\n        var wrap = this.session.$useWrapMode;\n        var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n        this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n        this._signal(\"change\", delta);\n        this.$cursorChange();\n        this.$updateHighlightActiveLine();\n    };\n\n    this.onTokenizerUpdate = function(e) {\n        var rows = e.data;\n        this.renderer.updateLines(rows.first, rows.last);\n    };\n\n\n    this.onScrollTopChange = function() {\n        this.renderer.scrollToY(this.session.getScrollTop());\n    };\n\n    this.onScrollLeftChange = function() {\n        this.renderer.scrollToX(this.session.getScrollLeft());\n    };\n    this.onCursorChange = function() {\n        this.$cursorChange();\n\n        this.$highlightBrackets();\n        this.$highlightTags();\n        this.$updateHighlightActiveLine();\n        this._signal(\"changeSelection\");\n    };\n\n    this.$updateHighlightActiveLine = function() {\n        var session = this.getSession();\n\n        var highlight;\n        if (this.$highlightActiveLine) {\n            if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n                highlight = this.getCursorPosition();\n            if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n                highlight = false;\n            if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n                highlight = false;\n        }\n\n        if (session.$highlightLineMarker && !highlight) {\n            session.removeMarker(session.$highlightLineMarker.id);\n            session.$highlightLineMarker = null;\n        } else if (!session.$highlightLineMarker && highlight) {\n            var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n            range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n            session.$highlightLineMarker = range;\n        } else if (highlight) {\n            session.$highlightLineMarker.start.row = highlight.row;\n            session.$highlightLineMarker.end.row = highlight.row;\n            session.$highlightLineMarker.start.column = highlight.column;\n            session._signal(\"changeBackMarker\");\n        }\n    };\n\n    this.onSelectionChange = function(e) {\n        var session = this.session;\n\n        if (session.$selectionMarker) {\n            session.removeMarker(session.$selectionMarker);\n        }\n        session.$selectionMarker = null;\n\n        if (!this.selection.isEmpty()) {\n            var range = this.selection.getRange();\n            var style = this.getSelectionStyle();\n            session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n        } else {\n            this.$updateHighlightActiveLine();\n        }\n\n        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n        this.session.highlight(re);\n\n        this._signal(\"changeSelection\");\n    };\n\n    this.$getSelectionHighLightRegexp = function() {\n        var session = this.session;\n\n        var selection = this.getSelectionRange();\n        if (selection.isEmpty() || selection.isMultiLine())\n            return;\n\n        var startColumn = selection.start.column;\n        var endColumn = selection.end.column;\n        var line = session.getLine(selection.start.row);\n        \n        var needle = line.substring(startColumn, endColumn);\n        if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n            return;\n\n        var re = this.$search.$assembleRegExp({\n            wholeWord: true,\n            caseSensitive: true,\n            needle: needle\n        });\n        \n        var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n        if (!re.test(wordWithBoundary))\n            return;\n        \n        return re;\n    };\n\n\n    this.onChangeFrontMarker = function() {\n        this.renderer.updateFrontMarkers();\n    };\n\n    this.onChangeBackMarker = function() {\n        this.renderer.updateBackMarkers();\n    };\n\n\n    this.onChangeBreakpoint = function() {\n        this.renderer.updateBreakpoints();\n    };\n\n    this.onChangeAnnotation = function() {\n        this.renderer.setAnnotations(this.session.getAnnotations());\n    };\n\n\n    this.onChangeMode = function(e) {\n        this.renderer.updateText();\n        this._emit(\"changeMode\", e);\n    };\n\n\n    this.onChangeWrapLimit = function() {\n        this.renderer.updateFull();\n    };\n\n    this.onChangeWrapMode = function() {\n        this.renderer.onResize(true);\n    };\n\n\n    this.onChangeFold = function() {\n        this.$updateHighlightActiveLine();\n        this.renderer.updateFull();\n    };\n    this.getSelectedText = function() {\n        return this.session.getTextRange(this.getSelectionRange());\n    };\n    this.getCopyText = function() {\n        var text = this.getSelectedText();\n        var nl = this.session.doc.getNewLineCharacter();\n        var copyLine= false;\n        if (!text && this.$copyWithEmptySelection) {\n            copyLine = true;\n            var ranges = this.selection.getAllRanges();\n            for (var i = 0; i < ranges.length; i++) {\n                var range = ranges[i];\n                if (i && ranges[i - 1].start.row == range.start.row)\n                    continue;\n                text += this.session.getLine(range.start.row) + nl;\n            }\n        }\n        var e = {text: text};\n        this._signal(\"copy\", e);\n        clipboard.lineMode = copyLine ? e.text : \"\";\n        return e.text;\n    };\n    this.onCopy = function() {\n        this.commands.exec(\"copy\", this);\n    };\n    this.onCut = function() {\n        this.commands.exec(\"cut\", this);\n    };\n    this.onPaste = function(text, event) {\n        var e = {text: text, event: event};\n        this.commands.exec(\"paste\", this, e);\n    };\n    \n    this.$handlePaste = function(e) {\n        if (typeof e == \"string\") \n            e = {text: e};\n        this._signal(\"paste\", e);\n        var text = e.text;\n\n        var lineMode = text == clipboard.lineMode;\n        var session = this.session;\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n            if (lineMode)\n                session.insert({ row: this.selection.lead.row, column: 0 }, text);\n            else\n                this.insert(text);\n        } else if (lineMode) {\n            this.selection.rangeList.ranges.forEach(function(range) {\n                session.insert({ row: range.start.row, column: 0 }, text);\n            });\n        } else {\n            var lines = text.split(/\\r\\n|\\r|\\n/);\n            var ranges = this.selection.rangeList.ranges;\n    \n            if (lines.length > ranges.length || lines.length < 2 || !lines[1])\n                return this.commands.exec(\"insertstring\", this, text);\n    \n            for (var i = ranges.length; i--;) {\n                var range = ranges[i];\n                if (!range.isEmpty())\n                    session.remove(range);\n    \n                session.insert(range.start, lines[i]);\n            }\n        }\n    };\n\n    this.execCommand = function(command, args) {\n        return this.commands.exec(command, this, args);\n    };\n    this.insert = function(text, pasted) {\n        var session = this.session;\n        var mode = session.getMode();\n        var cursor = this.getCursorPosition();\n\n        if (this.getBehavioursEnabled() && !pasted) {\n            var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n            if (transform) {\n                if (text !== transform.text) {\n                    if (!this.inVirtualSelectionMode) {\n                        this.session.mergeUndoDeltas = false;\n                        this.mergeNextCommand = false;\n                    }\n                }\n                text = transform.text;\n\n            }\n        }\n        \n        if (text == \"\\t\")\n            text = this.session.getTabString();\n        if (!this.selection.isEmpty()) {\n            var range = this.getSelectionRange();\n            cursor = this.session.remove(range);\n            this.clearSelection();\n        }\n        else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n            var range = new Range.fromPoints(cursor, cursor);\n            range.end.column += text.length;\n            this.session.remove(range);\n        }\n\n        if (text == \"\\n\" || text == \"\\r\\n\") {\n            var line = session.getLine(cursor.row);\n            if (cursor.column > line.search(/\\S|$/)) {\n                var d = line.substr(cursor.column).search(/\\S|$/);\n                session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n            }\n        }\n        this.clearSelection();\n\n        var start = cursor.column;\n        var lineState = session.getState(cursor.row);\n        var line = session.getLine(cursor.row);\n        var shouldOutdent = mode.checkOutdent(lineState, line, text);\n        var end = session.insert(cursor, text);\n\n        if (transform && transform.selection) {\n            if (transform.selection.length == 2) { // Transform relative to the current column\n                this.selection.setSelectionRange(\n                    new Range(cursor.row, start + transform.selection[0],\n                              cursor.row, start + transform.selection[1]));\n            } else { // Transform relative to the current row.\n                this.selection.setSelectionRange(\n                    new Range(cursor.row + transform.selection[0],\n                              transform.selection[1],\n                              cursor.row + transform.selection[2],\n                              transform.selection[3]));\n            }\n        }\n\n        if (session.getDocument().isNewLine(text)) {\n            var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n            session.insert({row: cursor.row+1, column: 0}, lineIndent);\n        }\n        if (shouldOutdent)\n            mode.autoOutdent(lineState, session, cursor.row);\n    };\n\n    this.onTextInput = function(text, composition) {\n        if (!composition)\n            return this.keyBinding.onTextInput(text);\n        \n        this.startOperation({command: { name: \"insertstring\" }});\n        var applyComposition = this.applyComposition.bind(this, text, composition);\n        if (this.selection.rangeCount)\n            this.forEachSelection(applyComposition);\n        else\n            applyComposition();\n        this.endOperation();\n    };\n    \n    this.applyComposition = function(text, composition) {\n        if (composition.extendLeft || composition.extendRight) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.extendLeft;\n            r.end.column += composition.extendRight;\n            this.selection.setRange(r);\n            if (!text && !r.isEmpty())\n                this.remove();\n        }\n        if (text || !this.selection.isEmpty())\n            this.insert(text, true);\n        if (composition.restoreStart || composition.restoreEnd) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.restoreStart;\n            r.end.column -= composition.restoreEnd;\n            this.selection.setRange(r);\n        }\n    };\n\n    this.onCommandKey = function(e, hashId, keyCode) {\n        this.keyBinding.onCommandKey(e, hashId, keyCode);\n    };\n    this.setOverwrite = function(overwrite) {\n        this.session.setOverwrite(overwrite);\n    };\n    this.getOverwrite = function() {\n        return this.session.getOverwrite();\n    };\n    this.toggleOverwrite = function() {\n        this.session.toggleOverwrite();\n    };\n    this.setScrollSpeed = function(speed) {\n        this.setOption(\"scrollSpeed\", speed);\n    };\n    this.getScrollSpeed = function() {\n        return this.getOption(\"scrollSpeed\");\n    };\n    this.setDragDelay = function(dragDelay) {\n        this.setOption(\"dragDelay\", dragDelay);\n    };\n    this.getDragDelay = function() {\n        return this.getOption(\"dragDelay\");\n    };\n    this.setSelectionStyle = function(val) {\n        this.setOption(\"selectionStyle\", val);\n    };\n    this.getSelectionStyle = function() {\n        return this.getOption(\"selectionStyle\");\n    };\n    this.setHighlightActiveLine = function(shouldHighlight) {\n        this.setOption(\"highlightActiveLine\", shouldHighlight);\n    };\n    this.getHighlightActiveLine = function() {\n        return this.getOption(\"highlightActiveLine\");\n    };\n    this.setHighlightGutterLine = function(shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n\n    this.getHighlightGutterLine = function() {\n        return this.getOption(\"highlightGutterLine\");\n    };\n    this.setHighlightSelectedWord = function(shouldHighlight) {\n        this.setOption(\"highlightSelectedWord\", shouldHighlight);\n    };\n    this.getHighlightSelectedWord = function() {\n        return this.$highlightSelectedWord;\n    };\n\n    this.setAnimatedScroll = function(shouldAnimate){\n        this.renderer.setAnimatedScroll(shouldAnimate);\n    };\n\n    this.getAnimatedScroll = function(){\n        return this.renderer.getAnimatedScroll();\n    };\n    this.setShowInvisibles = function(showInvisibles) {\n        this.renderer.setShowInvisibles(showInvisibles);\n    };\n    this.getShowInvisibles = function() {\n        return this.renderer.getShowInvisibles();\n    };\n\n    this.setDisplayIndentGuides = function(display) {\n        this.renderer.setDisplayIndentGuides(display);\n    };\n\n    this.getDisplayIndentGuides = function() {\n        return this.renderer.getDisplayIndentGuides();\n    };\n    this.setShowPrintMargin = function(showPrintMargin) {\n        this.renderer.setShowPrintMargin(showPrintMargin);\n    };\n    this.getShowPrintMargin = function() {\n        return this.renderer.getShowPrintMargin();\n    };\n    this.setPrintMarginColumn = function(showPrintMargin) {\n        this.renderer.setPrintMarginColumn(showPrintMargin);\n    };\n    this.getPrintMarginColumn = function() {\n        return this.renderer.getPrintMarginColumn();\n    };\n    this.setReadOnly = function(readOnly) {\n        this.setOption(\"readOnly\", readOnly);\n    };\n    this.getReadOnly = function() {\n        return this.getOption(\"readOnly\");\n    };\n    this.setBehavioursEnabled = function (enabled) {\n        this.setOption(\"behavioursEnabled\", enabled);\n    };\n    this.getBehavioursEnabled = function () {\n        return this.getOption(\"behavioursEnabled\");\n    };\n    this.setWrapBehavioursEnabled = function (enabled) {\n        this.setOption(\"wrapBehavioursEnabled\", enabled);\n    };\n    this.getWrapBehavioursEnabled = function () {\n        return this.getOption(\"wrapBehavioursEnabled\");\n    };\n    this.setShowFoldWidgets = function(show) {\n        this.setOption(\"showFoldWidgets\", show);\n\n    };\n    this.getShowFoldWidgets = function() {\n        return this.getOption(\"showFoldWidgets\");\n    };\n\n    this.setFadeFoldWidgets = function(fade) {\n        this.setOption(\"fadeFoldWidgets\", fade);\n    };\n\n    this.getFadeFoldWidgets = function() {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n    this.remove = function(dir) {\n        if (this.selection.isEmpty()){\n            if (dir == \"left\")\n                this.selection.selectLeft();\n            else\n                this.selection.selectRight();\n        }\n\n        var range = this.getSelectionRange();\n        if (this.getBehavioursEnabled()) {\n            var session = this.session;\n            var state = session.getState(range.start.row);\n            var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n            if (range.end.column === 0) {\n                var text = session.getTextRange(range);\n                if (text[text.length - 1] == \"\\n\") {\n                    var line = session.getLine(range.end.row);\n                    if (/^\\s+$/.test(line)) {\n                        range.end.column = line.length;\n                    }\n                }\n            }\n            if (new_range)\n                range = new_range;\n        }\n\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    this.removeWordRight = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectWordRight();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeWordLeft = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectWordLeft();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeToLineStart = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectLineStart();\n        if (this.selection.isEmpty())\n            this.selection.selectLeft();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeToLineEnd = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectLineEnd();\n\n        var range = this.getSelectionRange();\n        if (range.start.column == range.end.column && range.start.row == range.end.row) {\n            range.end.column = 0;\n            range.end.row++;\n        }\n\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    this.splitLine = function() {\n        if (!this.selection.isEmpty()) {\n            this.session.remove(this.getSelectionRange());\n            this.clearSelection();\n        }\n\n        var cursor = this.getCursorPosition();\n        this.insert(\"\\n\");\n        this.moveCursorToPosition(cursor);\n    };\n    this.transposeLetters = function() {\n        if (!this.selection.isEmpty()) {\n            return;\n        }\n\n        var cursor = this.getCursorPosition();\n        var column = cursor.column;\n        if (column === 0)\n            return;\n\n        var line = this.session.getLine(cursor.row);\n        var swap, range;\n        if (column < line.length) {\n            swap = line.charAt(column) + line.charAt(column-1);\n            range = new Range(cursor.row, column-1, cursor.row, column+1);\n        }\n        else {\n            swap = line.charAt(column-1) + line.charAt(column-2);\n            range = new Range(cursor.row, column-2, cursor.row, column);\n        }\n        this.session.replace(range, swap);\n        this.session.selection.moveToPosition(range.end);\n    };\n    this.toLowerCase = function() {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toLowerCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    this.toUpperCase = function() {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toUpperCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    this.indent = function() {\n        var session = this.session;\n        var range = this.getSelectionRange();\n\n        if (range.start.row < range.end.row) {\n            var rows = this.$getSelectedRows();\n            session.indentRows(rows.first, rows.last, \"\\t\");\n            return;\n        } else if (range.start.column < range.end.column) {\n            var text = session.getTextRange(range);\n            if (!/^\\s+$/.test(text)) {\n                var rows = this.$getSelectedRows();\n                session.indentRows(rows.first, rows.last, \"\\t\");\n                return;\n            }\n        }\n        \n        var line = session.getLine(range.start.row);\n        var position = range.start;\n        var size = session.getTabSize();\n        var column = session.documentToScreenColumn(position.row, position.column);\n\n        if (this.session.getUseSoftTabs()) {\n            var count = (size - column % size);\n            var indentString = lang.stringRepeat(\" \", count);\n        } else {\n            var count = column % size;\n            while (line[range.start.column - 1] == \" \" && count) {\n                range.start.column--;\n                count--;\n            }\n            this.selection.setSelectionRange(range);\n            indentString = \"\\t\";\n        }\n        return this.insert(indentString);\n    };\n    this.blockIndent = function() {\n        var rows = this.$getSelectedRows();\n        this.session.indentRows(rows.first, rows.last, \"\\t\");\n    };\n    this.blockOutdent = function() {\n        var selection = this.session.getSelection();\n        this.session.outdentRows(selection.getRange());\n    };\n    this.sortLines = function() {\n        var rows = this.$getSelectedRows();\n        var session = this.session;\n\n        var lines = [];\n        for (var i = rows.first; i <= rows.last; i++)\n            lines.push(session.getLine(i));\n\n        lines.sort(function(a, b) {\n            if (a.toLowerCase() < b.toLowerCase()) return -1;\n            if (a.toLowerCase() > b.toLowerCase()) return 1;\n            return 0;\n        });\n\n        var deleteRange = new Range(0, 0, 0, 0);\n        for (var i = rows.first; i <= rows.last; i++) {\n            var line = session.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            deleteRange.end.column = line.length;\n            session.replace(deleteRange, lines[i-rows.first]);\n        }\n    };\n    this.toggleCommentLines = function() {\n        var state = this.session.getState(this.getCursorPosition().row);\n        var rows = this.$getSelectedRows();\n        this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n    };\n\n    this.toggleBlockComment = function() {\n        var cursor = this.getCursorPosition();\n        var state = this.session.getState(cursor.row);\n        var range = this.getSelectionRange();\n        this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n    };\n    this.getNumberAt = function(row, column) {\n        var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n        _numberRx.lastIndex = 0;\n\n        var s = this.session.getLine(row);\n        while (_numberRx.lastIndex < column) {\n            var m = _numberRx.exec(s);\n            if(m.index <= column && m.index+m[0].length >= column){\n                var number = {\n                    value: m[0],\n                    start: m.index,\n                    end: m.index+m[0].length\n                };\n                return number;\n            }\n        }\n        return null;\n    };\n    this.modifyNumber = function(amount) {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        var charRange = new Range(row, column-1, row, column);\n\n        var c = this.session.getTextRange(charRange);\n        if (!isNaN(parseFloat(c)) && isFinite(c)) {\n            var nr = this.getNumberAt(row, column);\n            if (nr) {\n                var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n                var decimals = nr.start + nr.value.length - fp;\n\n                var t = parseFloat(nr.value);\n                t *= Math.pow(10, decimals);\n\n\n                if(fp !== nr.end && column < fp){\n                    amount *= Math.pow(10, nr.end - column - 1);\n                } else {\n                    amount *= Math.pow(10, nr.end - column);\n                }\n\n                t += amount;\n                t /= Math.pow(10, decimals);\n                var nnr = t.toFixed(decimals);\n                var replaceRange = new Range(row, nr.start, row, nr.end);\n                this.session.replace(replaceRange, nnr);\n                this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n            }\n        } else {\n            this.toggleWord();\n        }\n    };\n\n    this.$toggleWordPairs = [\n        [\"first\", \"last\"],\n        [\"true\", \"false\"],\n        [\"yes\", \"no\"],\n        [\"width\", \"height\"],\n        [\"top\", \"bottom\"],\n        [\"right\", \"left\"],\n        [\"on\", \"off\"],\n        [\"x\", \"y\"],\n        [\"get\", \"set\"],\n        [\"max\", \"min\"],\n        [\"horizontal\", \"vertical\"],\n        [\"show\", \"hide\"],\n        [\"add\", \"remove\"],\n        [\"up\", \"down\"],\n        [\"before\", \"after\"],\n        [\"even\", \"odd\"],\n        [\"inside\", \"outside\"],\n        [\"next\", \"previous\"],\n        [\"increase\", \"decrease\"],\n        [\"attach\", \"detach\"],\n        [\"&&\", \"||\"],\n        [\"==\", \"!=\"]\n    ];\n\n    this.toggleWord = function () {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        this.selection.selectWord();\n        var currentState = this.getSelectedText();\n        var currWordStart = this.selection.getWordRange().start.column;\n        var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n        var delta = column - currWordStart - 1;\n        if (delta < 0) delta = 0;\n        var curLength = 0, itLength = 0;\n        var that = this;\n        if (currentState.match(/[A-Za-z0-9_]+/)) {\n            wordParts.forEach(function (item, i) {\n                itLength = curLength + item.length;\n                if (delta >= curLength && delta <= itLength) {\n                    currentState = item;\n                    that.selection.clearSelection();\n                    that.moveCursorTo(row, curLength + currWordStart);\n                    that.selection.selectTo(row, itLength + currWordStart);\n                }\n                curLength = itLength;\n            });\n        }\n\n        var wordPairs = this.$toggleWordPairs;\n        var reg;\n        for (var i = 0; i < wordPairs.length; i++) {\n            var item = wordPairs[i];\n            for (var j = 0; j <= 1; j++) {\n                var negate = +!j;\n                var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n                if (firstCondition) {\n                    var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n                    if (secondCondition) {\n                        reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n                            var res = item[negate];\n                            if (result.toUpperCase() == result) {\n                                res = res.toUpperCase();\n                            } else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n                                res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n                            }\n                            return res;\n                        });\n                        this.insert(reg);\n                        reg = \"\";\n                    }\n                }\n            }\n        }\n    };\n    this.removeLines = function() {\n        var rows = this.$getSelectedRows();\n        this.session.removeFullLines(rows.first, rows.last);\n        this.clearSelection();\n    };\n\n    this.duplicateSelection = function() {\n        var sel = this.selection;\n        var doc = this.session;\n        var range = sel.getRange();\n        var reverse = sel.isBackwards();\n        if (range.isEmpty()) {\n            var row = range.start.row;\n            doc.duplicateLines(row, row);\n        } else {\n            var point = reverse ? range.start : range.end;\n            var endPoint = doc.insert(point, doc.getTextRange(range), false);\n            range.start = point;\n            range.end = endPoint;\n\n            sel.setSelectionRange(range, reverse);\n        }\n    };\n    this.moveLinesDown = function() {\n        this.$moveLines(1, false);\n    };\n    this.moveLinesUp = function() {\n        this.$moveLines(-1, false);\n    };\n    this.moveText = function(range, toPosition, copy) {\n        return this.session.moveText(range, toPosition, copy);\n    };\n    this.copyLinesUp = function() {\n        this.$moveLines(-1, true);\n    };\n    this.copyLinesDown = function() {\n        this.$moveLines(1, true);\n    };\n    this.$moveLines = function(dir, copy) {\n        var rows, moved;\n        var selection = this.selection;\n        if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n            var range = selection.toOrientedRange();\n            rows = this.$getSelectedRows(range);\n            moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n            if (copy && dir == -1) moved = 0;\n            range.moveBy(moved, 0);\n            selection.fromOrientedRange(range);\n        } else {\n            var ranges = selection.rangeList.ranges;\n            selection.rangeList.detach(this.session);\n            this.inVirtualSelectionMode = true;\n            \n            var diff = 0;\n            var totalDiff = 0;\n            var l = ranges.length;\n            for (var i = 0; i < l; i++) {\n                var rangeIndex = i;\n                ranges[i].moveBy(diff, 0);\n                rows = this.$getSelectedRows(ranges[i]);\n                var first = rows.first;\n                var last = rows.last;\n                while (++i < l) {\n                    if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n                    var subRows = this.$getSelectedRows(ranges[i]);\n                    if (copy && subRows.first != last)\n                        break;\n                    else if (!copy && subRows.first > last + 1)\n                        break;\n                    last = subRows.last;\n                }\n                i--;\n                diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n                if (copy && dir == -1) rangeIndex = i + 1;\n                while (rangeIndex <= i) {\n                    ranges[rangeIndex].moveBy(diff, 0);\n                    rangeIndex++;\n                }\n                if (!copy) diff = 0;\n                totalDiff += diff;\n            }\n            \n            selection.fromOrientedRange(selection.ranges[0]);\n            selection.rangeList.attach(this.session);\n            this.inVirtualSelectionMode = false;\n        }\n    };\n    this.$getSelectedRows = function(range) {\n        range = (range || this.getSelectionRange()).collapseRows();\n\n        return {\n            first: this.session.getRowFoldStart(range.start.row),\n            last: this.session.getRowFoldEnd(range.end.row)\n        };\n    };\n\n    this.onCompositionStart = function(compositionState) {\n        this.renderer.showComposition(compositionState);\n    };\n\n    this.onCompositionUpdate = function(text) {\n        this.renderer.setCompositionText(text);\n    };\n\n    this.onCompositionEnd = function() {\n        this.renderer.hideComposition();\n    };\n    this.getFirstVisibleRow = function() {\n        return this.renderer.getFirstVisibleRow();\n    };\n    this.getLastVisibleRow = function() {\n        return this.renderer.getLastVisibleRow();\n    };\n    this.isRowVisible = function(row) {\n        return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n    };\n    this.isRowFullyVisible = function(row) {\n        return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n    };\n    this.$getVisibleRowCount = function() {\n        return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n    };\n\n    this.$moveByPage = function(dir, select) {\n        var renderer = this.renderer;\n        var config = this.renderer.layerConfig;\n        var rows = dir * Math.floor(config.height / config.lineHeight);\n\n        if (select === true) {\n            this.selection.$moveSelection(function(){\n                this.moveCursorBy(rows, 0);\n            });\n        } else if (select === false) {\n            this.selection.moveCursorBy(rows, 0);\n            this.selection.clearSelection();\n        }\n\n        var scrollTop = renderer.scrollTop;\n\n        renderer.scrollBy(0, rows * config.lineHeight);\n        if (select != null)\n            renderer.scrollCursorIntoView(null, 0.5);\n\n        renderer.animateScrolling(scrollTop);\n    };\n    this.selectPageDown = function() {\n        this.$moveByPage(1, true);\n    };\n    this.selectPageUp = function() {\n        this.$moveByPage(-1, true);\n    };\n    this.gotoPageDown = function() {\n       this.$moveByPage(1, false);\n    };\n    this.gotoPageUp = function() {\n        this.$moveByPage(-1, false);\n    };\n    this.scrollPageDown = function() {\n        this.$moveByPage(1);\n    };\n    this.scrollPageUp = function() {\n        this.$moveByPage(-1);\n    };\n    this.scrollToRow = function(row) {\n        this.renderer.scrollToRow(row);\n    };\n    this.scrollToLine = function(line, center, animate, callback) {\n        this.renderer.scrollToLine(line, center, animate, callback);\n    };\n    this.centerSelection = function() {\n        var range = this.getSelectionRange();\n        var pos = {\n            row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n            column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n        };\n        this.renderer.alignCursor(pos, 0.5);\n    };\n    this.getCursorPosition = function() {\n        return this.selection.getCursor();\n    };\n    this.getCursorPositionScreen = function() {\n        return this.session.documentToScreenPosition(this.getCursorPosition());\n    };\n    this.getSelectionRange = function() {\n        return this.selection.getRange();\n    };\n    this.selectAll = function() {\n        this.selection.selectAll();\n    };\n    this.clearSelection = function() {\n        this.selection.clearSelection();\n    };\n    this.moveCursorTo = function(row, column) {\n        this.selection.moveCursorTo(row, column);\n    };\n    this.moveCursorToPosition = function(pos) {\n        this.selection.moveCursorToPosition(pos);\n    };\n    this.jumpToMatching = function(select, expand) {\n        var cursor = this.getCursorPosition();\n        var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n        var prevToken = iterator.getCurrentToken();\n        var token = prevToken || iterator.stepForward();\n\n        if (!token) return;\n        var matchType;\n        var found = false;\n        var depth = {};\n        var i = cursor.column - token.start;\n        var bracketType;\n        var brackets = {\n            \")\": \"(\",\n            \"(\": \"(\",\n            \"]\": \"[\",\n            \"[\": \"[\",\n            \"{\": \"{\",\n            \"}\": \"{\"\n        };\n        \n        do {\n            if (token.value.match(/[{}()\\[\\]]/g)) {\n                for (; i < token.value.length && !found; i++) {\n                    if (!brackets[token.value[i]]) {\n                        continue;\n                    }\n\n                    bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n                    if (isNaN(depth[bracketType])) {\n                        depth[bracketType] = 0;\n                    }\n\n                    switch (token.value[i]) {\n                        case '(':\n                        case '[':\n                        case '{':\n                            depth[bracketType]++;\n                            break;\n                        case ')':\n                        case ']':\n                        case '}':\n                            depth[bracketType]--;\n\n                            if (depth[bracketType] === -1) {\n                                matchType = 'bracket';\n                                found = true;\n                            }\n                        break;\n                    }\n                }\n            }\n            else if (token.type.indexOf('tag-name') !== -1) {\n                if (isNaN(depth[token.value])) {\n                    depth[token.value] = 0;\n                }\n                \n                if (prevToken.value === '<') {\n                    depth[token.value]++;\n                }\n                else if (prevToken.value === '</') {\n                    depth[token.value]--;\n                }\n                \n                if (depth[token.value] === -1) {\n                    matchType = 'tag';\n                    found = true;\n                }\n            }\n\n            if (!found) {\n                prevToken = token;\n                token = iterator.stepForward();\n                i = 0;\n            }\n        } while (token && !found);\n        if (!matchType)\n            return;\n\n        var range, pos;\n        if (matchType === 'bracket') {\n            range = this.session.getBracketRange(cursor);\n            if (!range) {\n                range = new Range(\n                    iterator.getCurrentTokenRow(),\n                    iterator.getCurrentTokenColumn() + i - 1,\n                    iterator.getCurrentTokenRow(),\n                    iterator.getCurrentTokenColumn() + i - 1\n                );\n                pos = range.start;\n                if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\n                    range = this.session.getBracketRange(pos);\n            }\n        }\n        else if (matchType === 'tag') {\n            if (token && token.type.indexOf('tag-name') !== -1) \n                var tag = token.value;\n            else\n                return;\n\n            range = new Range(\n                iterator.getCurrentTokenRow(),\n                iterator.getCurrentTokenColumn() - 2,\n                iterator.getCurrentTokenRow(),\n                iterator.getCurrentTokenColumn() - 2\n            );\n            if (range.compare(cursor.row, cursor.column) === 0) {\n                found = false;\n                do {\n                    token = prevToken;\n                    prevToken = iterator.stepBackward();\n                    \n                    if (prevToken) {\n                        if (prevToken.type.indexOf('tag-close') !== -1) {\n                            range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n                        }\n\n                        if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                            if (prevToken.value === '<') {\n                                depth[tag]++;\n                            }\n                            else if (prevToken.value === '</') {\n                                depth[tag]--;\n                            }\n                            \n                            if (depth[tag] === 0)\n                                found = true;\n                        }\n                    }\n                } while (prevToken && !found);\n            }\n            if (token && token.type.indexOf('tag-name')) {\n                pos = range.start;\n                if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\n                    pos = range.end;\n            }\n        }\n\n        pos = range && range.cursor || pos;\n        if (pos) {\n            if (select) {\n                if (range && expand) {\n                    this.selection.setRange(range);\n                } else if (range && range.isEqual(this.getSelectionRange())) {\n                    this.clearSelection();\n                } else {\n                    this.selection.selectTo(pos.row, pos.column);\n                }\n            } else {\n                this.selection.moveTo(pos.row, pos.column);\n            }\n        }\n    };\n    this.gotoLine = function(lineNumber, column, animate) {\n        this.selection.clearSelection();\n        this.session.unfold({row: lineNumber - 1, column: column || 0});\n        this.exitMultiSelectMode && this.exitMultiSelectMode();\n        this.moveCursorTo(lineNumber - 1, column || 0);\n\n        if (!this.isRowFullyVisible(lineNumber - 1))\n            this.scrollToLine(lineNumber - 1, true, animate);\n    };\n    this.navigateTo = function(row, column) {\n        this.selection.moveTo(row, column);\n    };\n    this.navigateUp = function(times) {\n        if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n            var selectionStart = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionStart);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(-times || -1, 0);\n    };\n    this.navigateDown = function(times) {\n        if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n            var selectionEnd = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionEnd);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(times || 1, 0);\n    };\n    this.navigateLeft = function(times) {\n        if (!this.selection.isEmpty()) {\n            var selectionStart = this.getSelectionRange().start;\n            this.moveCursorToPosition(selectionStart);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorLeft();\n            }\n        }\n        this.clearSelection();\n    };\n    this.navigateRight = function(times) {\n        if (!this.selection.isEmpty()) {\n            var selectionEnd = this.getSelectionRange().end;\n            this.moveCursorToPosition(selectionEnd);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorRight();\n            }\n        }\n        this.clearSelection();\n    };\n    this.navigateLineStart = function() {\n        this.selection.moveCursorLineStart();\n        this.clearSelection();\n    };\n    this.navigateLineEnd = function() {\n        this.selection.moveCursorLineEnd();\n        this.clearSelection();\n    };\n    this.navigateFileEnd = function() {\n        this.selection.moveCursorFileEnd();\n        this.clearSelection();\n    };\n    this.navigateFileStart = function() {\n        this.selection.moveCursorFileStart();\n        this.clearSelection();\n    };\n    this.navigateWordRight = function() {\n        this.selection.moveCursorWordRight();\n        this.clearSelection();\n    };\n    this.navigateWordLeft = function() {\n        this.selection.moveCursorWordLeft();\n        this.clearSelection();\n    };\n    this.replace = function(replacement, options) {\n        if (options)\n            this.$search.set(options);\n\n        var range = this.$search.find(this.session);\n        var replaced = 0;\n        if (!range)\n            return replaced;\n\n        if (this.$tryReplace(range, replacement)) {\n            replaced = 1;\n        }\n\n        this.selection.setSelectionRange(range);\n        this.renderer.scrollSelectionIntoView(range.start, range.end);\n\n        return replaced;\n    };\n    this.replaceAll = function(replacement, options) {\n        if (options) {\n            this.$search.set(options);\n        }\n\n        var ranges = this.$search.findAll(this.session);\n        var replaced = 0;\n        if (!ranges.length)\n            return replaced;\n\n        var selection = this.getSelectionRange();\n        this.selection.moveTo(0, 0);\n\n        for (var i = ranges.length - 1; i >= 0; --i) {\n            if(this.$tryReplace(ranges[i], replacement)) {\n                replaced++;\n            }\n        }\n\n        this.selection.setSelectionRange(selection);\n\n        return replaced;\n    };\n\n    this.$tryReplace = function(range, replacement) {\n        var input = this.session.getTextRange(range);\n        replacement = this.$search.replace(input, replacement);\n        if (replacement !== null) {\n            range.end = this.session.replace(range, replacement);\n            return range;\n        } else {\n            return null;\n        }\n    };\n    this.getLastSearchOptions = function() {\n        return this.$search.getOptions();\n    };\n    this.find = function(needle, options, animate) {\n        if (!options)\n            options = {};\n\n        if (typeof needle == \"string\" || needle instanceof RegExp)\n            options.needle = needle;\n        else if (typeof needle == \"object\")\n            oop.mixin(options, needle);\n\n        var range = this.selection.getRange();\n        if (options.needle == null) {\n            needle = this.session.getTextRange(range)\n                || this.$search.$options.needle;\n            if (!needle) {\n                range = this.session.getWordRange(range.start.row, range.start.column);\n                needle = this.session.getTextRange(range);\n            }\n            this.$search.set({needle: needle});\n        }\n\n        this.$search.set(options);\n        if (!options.start)\n            this.$search.set({start: range});\n\n        var newRange = this.$search.find(this.session);\n        if (options.preventScroll)\n            return newRange;\n        if (newRange) {\n            this.revealRange(newRange, animate);\n            return newRange;\n        }\n        if (options.backwards)\n            range.start = range.end;\n        else\n            range.end = range.start;\n        this.selection.setRange(range);\n    };\n    this.findNext = function(options, animate) {\n        this.find({skipCurrent: true, backwards: false}, options, animate);\n    };\n    this.findPrevious = function(options, animate) {\n        this.find(options, {skipCurrent: true, backwards: true}, animate);\n    };\n\n    this.revealRange = function(range, animate) {\n        this.session.unfold(range);\n        this.selection.setSelectionRange(range);\n\n        var scrollTop = this.renderer.scrollTop;\n        this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n        if (animate !== false)\n            this.renderer.animateScrolling(scrollTop);\n    };\n    this.undo = function() {\n        this.session.getUndoManager().undo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    this.redo = function() {\n        this.session.getUndoManager().redo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    this.destroy = function() {\n        this.renderer.destroy();\n        this._signal(\"destroy\", this);\n        if (this.session) {\n            this.session.destroy();\n        }\n    };\n    this.setAutoScrollEditorIntoView = function(enable) {\n        if (!enable)\n            return;\n        var rect;\n        var self = this;\n        var shouldScroll = false;\n        if (!this.$scrollAnchor)\n            this.$scrollAnchor = document.createElement(\"div\");\n        var scrollAnchor = this.$scrollAnchor;\n        scrollAnchor.style.cssText = \"position:absolute\";\n        this.container.insertBefore(scrollAnchor, this.container.firstChild);\n        var onChangeSelection = this.on(\"changeSelection\", function() {\n            shouldScroll = true;\n        });\n        var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n            if (shouldScroll)\n                rect = self.renderer.container.getBoundingClientRect();\n        });\n        var onAfterRender = this.renderer.on(\"afterRender\", function() {\n            if (shouldScroll && rect && (self.isFocused()\n                || self.searchBox && self.searchBox.isFocused())\n            ) {\n                var renderer = self.renderer;\n                var pos = renderer.$cursorLayer.$pixelPos;\n                var config = renderer.layerConfig;\n                var top = pos.top - config.offset;\n                if (pos.top >= 0 && top + rect.top < 0) {\n                    shouldScroll = true;\n                } else if (pos.top < config.height &&\n                    pos.top + rect.top + config.lineHeight > window.innerHeight) {\n                    shouldScroll = false;\n                } else {\n                    shouldScroll = null;\n                }\n                if (shouldScroll != null) {\n                    scrollAnchor.style.top = top + \"px\";\n                    scrollAnchor.style.left = pos.left + \"px\";\n                    scrollAnchor.style.height = config.lineHeight + \"px\";\n                    scrollAnchor.scrollIntoView(shouldScroll);\n                }\n                shouldScroll = rect = null;\n            }\n        });\n        this.setAutoScrollEditorIntoView = function(enable) {\n            if (enable)\n                return;\n            delete this.setAutoScrollEditorIntoView;\n            this.off(\"changeSelection\", onChangeSelection);\n            this.renderer.off(\"afterRender\", onAfterRender);\n            this.renderer.off(\"beforeRender\", onBeforeRender);\n        };\n    };\n\n\n    this.$resetCursorStyle = function() {\n        var style = this.$cursorStyle || \"ace\";\n        var cursorLayer = this.renderer.$cursorLayer;\n        if (!cursorLayer)\n            return;\n        cursorLayer.setSmoothBlinking(/smooth/.test(style));\n        cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n        dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n    };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    selectionStyle: {\n        set: function(style) {\n            this.onSelectionChange();\n            this._signal(\"changeSelectionStyle\", {data: style});\n        },\n        initialValue: \"line\"\n    },\n    highlightActiveLine: {\n        set: function() {this.$updateHighlightActiveLine();},\n        initialValue: true\n    },\n    highlightSelectedWord: {\n        set: function(shouldHighlight) {this.$onSelectionChange();},\n        initialValue: true\n    },\n    readOnly: {\n        set: function(readOnly) {\n            this.textInput.setReadOnly(readOnly);\n            this.$resetCursorStyle(); \n        },\n        initialValue: false\n    },\n    copyWithEmptySelection: {\n        set: function(value) {\n            this.textInput.setCopyWithEmptySelection(value);\n        },\n        initialValue: false\n    },\n    cursorStyle: {\n        set: function(val) { this.$resetCursorStyle(); },\n        values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n        initialValue: \"ace\"\n    },\n    mergeUndoDeltas: {\n        values: [false, true, \"always\"],\n        initialValue: true\n    },\n    behavioursEnabled: {initialValue: true},\n    wrapBehavioursEnabled: {initialValue: true},\n    autoScrollEditorIntoView: {\n        set: function(val) {this.setAutoScrollEditorIntoView(val);}\n    },\n    keyboardHandler: {\n        set: function(val) { this.setKeyboardHandler(val); },\n        get: function() { return this.$keybindingId; },\n        handlesSet: true\n    },\n    value: {\n        set: function(val) { this.session.setValue(val); },\n        get: function() { return this.getValue(); },\n        handlesSet: true,\n        hidden: true\n    },\n    session: {\n        set: function(val) { this.setSession(val); },\n        get: function() { return this.session; },\n        handlesSet: true,\n        hidden: true\n    },\n    \n    showLineNumbers: {\n        set: function(show) {\n            this.renderer.$gutterLayer.setShowLineNumbers(show);\n            this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n            if (show && this.$relativeLineNumbers)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        },\n        initialValue: true\n    },\n    relativeLineNumbers: {\n        set: function(value) {\n            if (this.$showLineNumbers && value)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        }\n    },\n\n    hScrollBarAlwaysVisible: \"renderer\",\n    vScrollBarAlwaysVisible: \"renderer\",\n    highlightGutterLine: \"renderer\",\n    animatedScroll: \"renderer\",\n    showInvisibles: \"renderer\",\n    showPrintMargin: \"renderer\",\n    printMarginColumn: \"renderer\",\n    printMargin: \"renderer\",\n    fadeFoldWidgets: \"renderer\",\n    showFoldWidgets: \"renderer\",\n    displayIndentGuides: \"renderer\",\n    showGutter: \"renderer\",\n    fontSize: \"renderer\",\n    fontFamily: \"renderer\",\n    maxLines: \"renderer\",\n    minLines: \"renderer\",\n    scrollPastEnd: \"renderer\",\n    fixedWidthGutter: \"renderer\",\n    theme: \"renderer\",\n    hasCssTransforms: \"renderer\",\n    maxPixelHeight: \"renderer\",\n    useTextareaForIME: \"renderer\",\n\n    scrollSpeed: \"$mouseHandler\",\n    dragDelay: \"$mouseHandler\",\n    dragEnabled: \"$mouseHandler\",\n    focusTimeout: \"$mouseHandler\",\n    tooltipFollowsMouse: \"$mouseHandler\",\n\n    firstLineNumber: \"session\",\n    overwrite: \"session\",\n    newLineMode: \"session\",\n    useWorker: \"session\",\n    useSoftTabs: \"session\",\n    navigateWithinSoftTabs: \"session\",\n    tabSize: \"session\",\n    wrap: \"session\",\n    indentedSoftWrap: \"session\",\n    foldStyle: \"session\",\n    mode: \"session\"\n});\n\n\nvar relativeNumberRenderer = {\n    getText: function(session, row) {\n        return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n    },\n    getWidth: function(session, lastLineNumber, config) {\n        return Math.max(\n            lastLineNumber.toString().length,\n            (config.lastRow + 1).toString().length,\n            2\n        ) * config.characterWidth;\n    },\n    update: function(e, editor) {\n        editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n    },\n    attach: function(editor) {\n        editor.renderer.$gutterLayer.$renderer = this;\n        editor.on(\"changeSelection\", this.update);\n        this.update(null, editor);\n    },\n    detach: function(editor) {\n        if (editor.renderer.$gutterLayer.$renderer == this)\n            editor.renderer.$gutterLayer.$renderer = null;\n        editor.off(\"changeSelection\", this.update);\n        this.update(null, editor);\n    }\n};\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n    this.$maxRev = 0;\n    this.$fromUndo = false;\n    this.reset();\n};\n\n(function() {\n    \n    this.addSession = function(session) {\n        this.$session = session;\n    };\n    this.add = function(delta, allowMerge, session) {\n        if (this.$fromUndo) return;\n        if (delta == this.$lastDelta) return;\n        if (allowMerge === false || !this.lastDeltas) {\n            this.lastDeltas = [];\n            this.$undoStack.push(this.lastDeltas);\n            delta.id = this.$rev = ++this.$maxRev;\n        }\n        if (delta.action == \"remove\" || delta.action == \"insert\")\n            this.$lastDelta = delta;\n        this.lastDeltas.push(delta);\n    };\n    \n    this.addSelection = function(selection, rev) {\n        this.selections.push({\n            value: selection,\n            rev: rev || this.$rev\n        });\n    };\n    \n    this.startNewGroup = function() {\n        this.lastDeltas = null;\n        return this.$rev;\n    };\n    \n    this.markIgnored = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        var stack = this.$undoStack;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id <= from)\n                break;\n            if (delta.id < to)\n                delta.ignore = true;\n        }\n        this.lastDeltas = null;\n    };\n    \n    this.getSelection = function(rev, after) {\n        var stack = this.selections;\n        for (var i = stack.length; i--;) {\n            var selection = stack[i];\n            if (selection.rev < rev) {\n                if (after)\n                    selection = stack[i + 1];\n                return selection;\n            }\n        }\n    };\n    \n    this.getRevision = function() {\n        return this.$rev;\n    };\n    \n    this.getDeltas = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        var stack = this.$undoStack;\n        var end = null, start = 0;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id < to && !end)\n                end = i+1;\n            if (delta.id <= from) {\n                start = i + 1;\n                break;\n            }\n        }\n        return stack.slice(start, end);\n    };\n    \n    this.getChangedRanges = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        \n    };\n    \n    this.getChangedLines = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        \n    };\n    this.undo = function(session, dontSelect) {\n        this.lastDeltas = null;\n        var stack = this.$undoStack;\n        \n        if (!rearrangeUndoStack(stack, stack.length))\n            return;\n        \n        if (!session)\n            session = this.$session;\n        \n        if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n            this.$redoStack = [];\n        \n        this.$fromUndo = true;\n        \n        var deltaSet = stack.pop();\n        var undoSelectionRange = null;\n        if (deltaSet && deltaSet.length) {\n            undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n            this.$redoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        \n        this.$fromUndo = false;\n\n        return undoSelectionRange;\n    };\n    this.redo = function(session, dontSelect) {\n        this.lastDeltas = null;\n        \n        if (!session)\n            session = this.$session;\n        \n        this.$fromUndo = true;\n        if (this.$redoStackBaseRev != this.$rev) {\n            var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n            rebaseRedoStack(this.$redoStack, diff);\n            this.$redoStackBaseRev = this.$rev;\n            this.$redoStack.forEach(function(x) {\n                x[0].id = ++this.$maxRev;\n            }, this);\n        }\n        var deltaSet = this.$redoStack.pop();\n        var redoSelectionRange = null;\n        \n        if (deltaSet) {\n            redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n            this.$undoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        this.$fromUndo = false;\n        \n        return redoSelectionRange;\n    };\n    \n    this.$syncRev = function() {\n        var stack = this.$undoStack;\n        var nextDelta = stack[stack.length - 1];\n        var id = nextDelta && nextDelta[0].id || 0;\n        this.$redoStackBaseRev = id;\n        this.$rev = id;\n    };\n    this.reset = function() {\n        this.lastDeltas = null;\n        this.$lastDelta = null;\n        this.$undoStack = [];\n        this.$redoStack = [];\n        this.$rev = 0;\n        this.mark = 0;\n        this.$redoStackBaseRev = this.$rev;\n        this.selections = [];\n    };\n    this.canUndo = function() {\n        return this.$undoStack.length > 0;\n    };\n    this.canRedo = function() {\n        return this.$redoStack.length > 0;\n    };\n    this.bookmark = function(rev) {\n        if (rev == undefined)\n            rev = this.$rev;\n        this.mark = rev;\n    };\n    this.isAtBookmark = function() {\n        return this.$rev === this.mark;\n    };\n    \n    this.toJSON = function() {\n        \n    };\n    \n    this.fromJSON = function() {\n        \n    };\n    \n    this.hasUndo = this.canUndo;\n    this.hasRedo = this.canRedo;\n    this.isClean = this.isAtBookmark;\n    this.markClean = this.bookmark;\n    \n    this.$prettyPrint = function(delta) {\n        if (delta) return stringifyDelta(delta);\n        return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n    };\n}).call(UndoManager.prototype);\n\nfunction rearrangeUndoStack(stack, pos) {\n    for (var i = pos; i--; ) {\n        var deltaSet = stack[i];\n        if (deltaSet && !deltaSet[0].ignore) {\n            while(i < pos - 1) {\n                var swapped = swapGroups(stack[i], stack[i + 1]);\n                stack[i] = swapped[0];\n                stack[i + 1] = swapped[1];\n                i++;\n            }\n            return true;\n        }\n    }\n}\n\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\n\nfunction $updateMarkers(delta) {\n    var isInsert = delta.action == \"insert\";\n    var start = delta.start;\n    var end = delta.end;\n    var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n    var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n    if (isInsert) end = start;\n\n    for (var i in this.marks) {\n        var point = this.marks[i];\n        var cmp = comparePoints(point, start);\n        if (cmp < 0) {\n            continue; // delta starts after the range\n        }\n        if (cmp === 0) {\n            if (isInsert) {\n                if (point.bias == 1) {\n                    cmp = 1;\n                }\n                else {\n                    point.bias == -1;\n                    continue;\n                }\n            }\n        }\n        var cmp2 = isInsert ? cmp : comparePoints(point, end);\n        if (cmp2 > 0) {\n            point.row += rowShift;\n            point.column += point.row == end.row ? colShift : 0;\n            continue;\n        }\n        if (!isInsert && cmp2 <= 0) {\n            point.row = start.row;\n            point.column = start.column;\n            if (cmp2 === 0)\n                point.bias = 1;\n        }\n    }\n}\n\n\n\nfunction clonePos(pos) {\n    return {row: pos.row,column: pos.column};\n}\nfunction cloneDelta(d) {\n    return {\n        start: clonePos(d.start),\n        end: clonePos(d.end),\n        action: d.action,\n        lines: d.lines.slice()\n    };\n}\nfunction stringifyDelta(d) {\n    d = d || this;\n    if (Array.isArray(d)) {\n        return d.map(stringifyDelta).join(\"\\n\");\n    }\n    var type = \"\";\n    if (d.action) {\n        type = d.action == \"insert\" ? \"+\" : \"-\";\n        type += \"[\" + d.lines + \"]\";\n    } else if (d.value) {\n        if (Array.isArray(d.value)) {\n            type = d.value.map(stringifyRange).join(\"\\n\");\n        } else {\n            type = stringifyRange(d.value);\n        }\n    }\n    if (d.start) {\n        type += stringifyRange(d);\n    }\n    if (d.id || d.rev) {\n        type += \"\\t(\" + (d.id || d.rev) + \")\";\n    }\n    return type;\n}\nfunction stringifyRange(r) {\n    return r.start.row + \":\" + r.start.column \n        + \"=>\" + r.end.row + \":\" + r.end.column;\n}\n\nfunction swap(d1, d2) {\n    var i1 = d1.action == \"insert\";\n    var i2 = d2.action == \"insert\";\n    \n    if (i1 && i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        } else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        } else {\n            return null;\n        }\n    } else if (i1 && !i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        } else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        } else {\n            return null;\n        }\n    } else if (!i1 && i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        } else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        } else {\n            return null;\n        }\n    } else if (!i1 && !i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        } else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        } else {\n            return null;\n        }\n    }\n    return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n    for (var i = ds1.length; i--; ) {\n        for (var j = 0; j < ds2.length; j++) {\n            if (!swap(ds1[i], ds2[j])) {\n                while (i < ds1.length) {\n                    while (j--) {\n                        swap(ds2[j], ds1[i]);\n                    }\n                    j = ds2.length;\n                    i++;\n                }                \n                return [ds1, ds2];\n            }\n        }\n    }\n    ds1.selectionBefore = ds2.selectionBefore = \n    ds1.selectionAfter = ds2.selectionAfter = null;\n    return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n    var i1 = d1.action == \"insert\";\n    var i2 = c1.action == \"insert\";\n    \n    if (i1 && i2) {\n        if (cmp(d1.start, c1.start) < 0) {\n            shift(c1, d1, 1);\n        } else {\n            shift(d1, c1, 1);\n        }\n    } else if (i1 && !i2) {\n        if (cmp(d1.start, c1.end) >= 0) {\n            shift(d1, c1, -1);\n        } else if (cmp(d1.start, c1.start) <= 0) {\n            shift(c1, d1, +1);\n        } else {\n            shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n            shift(c1, d1, +1);\n        }\n    } else if (!i1 && i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        } else if (cmp(c1.start, d1.start) <= 0) {\n            shift(d1, c1, +1);\n        } else {\n            shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n            shift(d1, c1, +1);\n        }\n    } else if (!i1 && !i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        } else if (cmp(c1.end, d1.start) <= 0) {\n            shift(d1, c1, -1);\n        } else {\n            var before, after;\n            if (cmp(d1.start, c1.start) < 0) {\n                before = d1;\n                d1 = splitDelta(d1, c1.start);\n            }\n            if (cmp(d1.end, c1.end) > 0) {\n                after = splitDelta(d1, c1.end);\n            }\n\n            shiftPos(c1.end, d1.start, d1.end, -1);\n            if (after && !before) {\n                d1.lines = after.lines;\n                d1.start = after.start;\n                d1.end = after.end;\n                after = d1;\n            }\n\n            return [c1, before, after].filter(Boolean);\n        }\n    }\n    return [c1, d1];\n}\n    \nfunction shift(d1, d2, dir) {\n    shiftPos(d1.start, d2.start, d2.end, dir);\n    shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n    if (pos.row == (dir == 1 ? start : end).row) {\n        pos.column += dir * (end.column - start.column);\n    }\n    pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n    var lines = c.lines;\n    var end = c.end;\n    c.end = clonePos(pos);    \n    var rowsBefore = c.end.row - c.start.row;\n    var otherLines = lines.splice(rowsBefore, lines.length);\n    \n    var col = rowsBefore ? pos.column : pos.column - c.start.column;\n    lines.push(otherLines[0].substring(0, col));\n    otherLines[0] = otherLines[0].substr(col)   ; \n    var rest = {\n        start: clonePos(pos),\n        end: end,\n        lines: otherLines,\n        action: c.action\n    };\n    return rest;\n}\n\nfunction moveDeltasByOne(redoStack, d) {\n    d = cloneDelta(d);\n    for (var j = redoStack.length; j--;) {\n        var deltaSet = redoStack[j];\n        for (var i = 0; i < deltaSet.length; i++) {\n            var x = deltaSet[i];\n            var xformed = xform(x, d);\n            d = xformed[0];\n            if (xformed.length != 2) {\n                if (xformed[2]) {\n                    deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n                    i++;\n                } else if (!xformed[1]) {\n                    deltaSet.splice(i, 1);\n                    i--;\n                }\n            }\n        }\n        if (!deltaSet.length) {\n            redoStack.splice(j, 1); \n        }\n    }\n    return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n    for (var i = 0; i < deltaSets.length; i++) {\n        var deltas = deltaSets[i];\n        for (var j = 0; j < deltas.length; j++) {\n            moveDeltasByOne(redoStack, deltas[j]);\n        }\n    }\n}\n\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Lines = function(element, canvasHeight) {\n    this.element = element;\n    this.canvasHeight = canvasHeight || 500000;\n    this.element.style.height = (this.canvasHeight * 2) + \"px\";\n    \n    this.cells = [];\n    this.cellCache = [];\n    this.$offsetCoefficient = 0;\n};\n\n(function() {\n    \n    this.moveContainer = function(config) {\n        dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n    };    \n    \n    this.pageChanged = function(oldConfig, newConfig) {\n        return (\n            Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n            Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)\n        );\n    };\n    \n    this.computeLineTop = function(row, config, session) {\n        var screenTop = config.firstRowScreen * config.lineHeight;\n        var screenPage = Math.floor(screenTop / this.canvasHeight);\n        var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n        return lineTop - (screenPage * this.canvasHeight);\n    };\n    \n    this.computeLineHeight = function(row, config, session) {\n        return config.lineHeight * session.getRowLength(row);\n    };\n    \n    this.getLength = function() {\n        return this.cells.length;\n    };\n    \n    this.get = function(index) {\n        return this.cells[index];\n    };\n    \n    this.shift = function() {\n        this.$cacheCell(this.cells.shift());\n    };\n    \n    this.pop = function() {\n        this.$cacheCell(this.cells.pop());\n    };\n    \n    this.push = function(cell) {\n        if (Array.isArray(cell)) {\n            this.cells.push.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i=0; i<cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            this.element.appendChild(fragment);\n         } else {\n            this.cells.push(cell);\n            this.element.appendChild(cell.element);\n         }\n    };\n    \n    this.unshift = function(cell) {\n        if (Array.isArray(cell)) {\n            this.cells.unshift.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i=0; i<cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            if (this.element.firstChild)\n                this.element.insertBefore(fragment, this.element.firstChild);\n            else\n                this.element.appendChild(fragment);\n         } else {\n            this.cells.unshift(cell);\n            this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n         }\n    };\n    \n    this.last = function() {\n        if (this.cells.length)\n            return this.cells[this.cells.length-1];\n        else\n            return null;\n    };\n    \n    this.$cacheCell = function(cell) {\n        if (!cell)\n            return;\n            \n        cell.element.remove();\n        this.cellCache.push(cell);\n    };\n    \n    this.createCell = function(row, config, session, initElement) {\n        var cell = this.cellCache.pop();\n        if (!cell) {\n            var element = dom.createElement(\"div\");\n            if (initElement)\n                initElement(element);\n            \n            this.element.appendChild(element);\n            \n            cell = {\n                element: element,\n                text: \"\",\n                row: row\n            };\n        }\n        cell.row = row;\n        \n        return cell;\n    };\n    \n}).call(Lines.prototype);\n\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\n\nvar Gutter = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_gutter-layer\";\n    parentEl.appendChild(this.element);\n    this.setShowFoldWidgets(this.$showFoldWidgets);\n    \n    this.gutterWidth = 0;\n\n    this.$annotations = [];\n    this.$updateAnnotations = this.$updateAnnotations.bind(this);\n    \n    this.$lines = new Lines(this.element);\n    this.$lines.$offsetCoefficient = 1;\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.setSession = function(session) {\n        if (this.session)\n            this.session.removeEventListener(\"change\", this.$updateAnnotations);\n        this.session = session;\n        if (session)\n            session.on(\"change\", this.$updateAnnotations);\n    };\n\n    this.addGutterDecoration = function(row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n        this.session.addGutterDecoration(row, className);\n    };\n\n    this.removeGutterDecoration = function(row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n        this.session.removeGutterDecoration(row, className);\n    };\n\n    this.setAnnotations = function(annotations) {\n        this.$annotations = [];\n        for (var i = 0; i < annotations.length; i++) {\n            var annotation = annotations[i];\n            var row = annotation.row;\n            var rowInfo = this.$annotations[row];\n            if (!rowInfo)\n                rowInfo = this.$annotations[row] = {text: []};\n           \n            var annoText = annotation.text;\n            annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n            if (rowInfo.text.indexOf(annoText) === -1)\n                rowInfo.text.push(annoText);\n\n            var type = annotation.type;\n            if (type == \"error\")\n                rowInfo.className = \" ace_error\";\n            else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n                rowInfo.className = \" ace_warning\";\n            else if (type == \"info\" && (!rowInfo.className))\n                rowInfo.className = \" ace_info\";\n        }\n    };\n\n    this.$updateAnnotations = function (delta) {\n        if (!this.$annotations.length)\n            return;\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n        } else if (delta.action == 'remove') {\n            this.$annotations.splice(firstRow, len + 1, null);\n        } else {\n            var args = new Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.$annotations.splice.apply(this.$annotations, args);\n        }\n    };\n\n    this.update = function(config) {\n        this.config = config;\n        \n        var session = this.session;\n        var firstRow = config.firstRow;\n        var lastRow = Math.min(config.lastRow + config.gutterOffset,  // needed to compensate for hor scollbar\n            session.getLength() - 1);\n            \n        this.oldLastRow = lastRow;\n        this.config = config;\n        \n        this.$lines.moveContainer(config);\n        this.$updateCursorRow();\n            \n        var fold = session.getNextFoldLine(firstRow);\n        var foldStart = fold ? fold.start.row : Infinity;\n\n        var cell = null;\n        var index = -1;\n        var row = firstRow;\n        \n        while (true) {\n            if (row > foldStart) {\n                row = fold.end.row + 1;\n                fold = session.getNextFoldLine(row, fold);\n                foldStart = fold ? fold.start.row : Infinity;\n            }\n            if (row > lastRow) {\n                while (this.$lines.getLength() > index + 1)\n                    this.$lines.pop();\n                    \n                break;\n            }\n\n            cell = this.$lines.get(++index);\n            if (cell) {\n                cell.row = row;\n            } else {\n                cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n                this.$lines.push(cell);\n            }\n\n            this.$renderCell(cell, config, fold, row);\n            row++;\n        }\n        \n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n    };\n\n    this.$updateGutterWidth = function(config) {\n        var session = this.session;\n        \n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        \n        var firstLineNumber = session.$firstLineNumber;\n        var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n        \n        if (this.$fixedWidth || session.$useWrapMode)\n            lastLineText = session.getLength() + firstLineNumber - 1;\n\n        var gutterWidth = gutterRenderer \n            ? gutterRenderer.getWidth(session, lastLineText, config)\n            : lastLineText.toString().length * config.characterWidth;\n        \n        var padding = this.$padding || this.$computePadding();\n        gutterWidth += padding.left + padding.right;\n        if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n            this.gutterWidth = gutterWidth;\n            this.element.parentNode.style.width = \n            this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n            this._signal(\"changeGutterWidth\", gutterWidth);\n        }\n    };\n    \n    this.$updateCursorRow = function() {\n        if (!this.$highlightGutterLine)\n            return;\n            \n        var position = this.session.selection.getCursor();\n        if (this.$cursorRow === position.row)\n            return;\n        \n        this.$cursorRow = position.row;\n    };\n    \n    this.updateLineHighlight = function() {\n        if (!this.$highlightGutterLine)\n            return;\n        var row = this.session.selection.cursor.row;\n        this.$cursorRow = row;\n\n        if (this.$cursorCell && this.$cursorCell.row == row)\n            return;\n        if (this.$cursorCell)\n            this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n        var cells = this.$lines.cells;\n        this.$cursorCell = null;\n        for (var i = 0; i < cells.length; i++) {\n            var cell = cells[i];\n            if (cell.row >= this.$cursorRow) {\n                if (cell.row > this.$cursorRow) {\n                    var fold = this.session.getFoldLine(this.$cursorRow);\n                    if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n                        cell = cells[i - 1];\n                    else\n                        break;\n                }\n                cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n                this.$cursorCell = cell;\n                break;\n            }\n        }\n    };\n    \n    this.scrollLines = function(config) {\n        var oldConfig = this.config;\n        this.config = config;\n        \n        this.$updateCursorRow();\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n        \n        this.$lines.moveContainer(config);\n\n        var lastRow = Math.min(config.lastRow + config.gutterOffset,  // needed to compensate for hor scollbar\n            this.session.getLength() - 1);\n        var oldLastRow = this.oldLastRow;\n        this.oldLastRow = lastRow;\n        \n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n                this.$lines.shift();\n\n        if (oldLastRow > lastRow)\n            for (var row=this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row>0; row--)\n                this.$lines.pop();\n\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n\n        if (lastRow > oldLastRow) {\n            this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n        }\n        \n        this.updateLineHighlight();\n        \n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n    };\n\n    this.$renderLines = function(config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n\n            var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n            this.$renderCell(cell, config, foldLine, row);\n            fragment.push(cell);\n\n            row++;\n        }\n        return fragment;\n    };\n    \n    this.$renderCell = function(cell, config, fold, row) {\n        var element = cell.element;\n        \n        var session = this.session;\n        \n        var textNode = element.childNodes[0];\n        var foldWidget = element.childNodes[1];\n\n        var firstLineNumber = session.$firstLineNumber;\n        \n        var breakpoints = session.$breakpoints;\n        var decorations = session.$decorations;\n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n        var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n        \n        var className = \"ace_gutter-cell \";\n        if (this.$highlightGutterLine) {\n            if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart &&  this.$cursorRow <= fold.end.row)) {\n                className += \"ace_gutter-active-line \";\n                if (this.$cursorCell != cell) {\n                    if (this.$cursorCell)\n                        this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n                    this.$cursorCell = cell;\n                }\n            }\n        }\n        \n        if (breakpoints[row])\n            className += breakpoints[row];\n        if (decorations[row])\n            className += decorations[row];\n        if (this.$annotations[row])\n            className += this.$annotations[row].className;\n        if (element.className != className)\n            element.className = className;\n\n        if (foldWidgets) {\n            var c = foldWidgets[row];\n            if (c == null)\n                c = foldWidgets[row] = session.getFoldWidget(row);\n        }\n\n        if (c) {\n            var className = \"ace_fold-widget ace_\" + c;\n            if (c == \"start\" && row == foldStart && row < fold.end.row)\n                className += \" ace_closed\";\n            else\n                className += \" ace_open\";\n            if (foldWidget.className != className)\n                foldWidget.className = className;\n\n            var foldHeight = config.lineHeight + \"px\";\n            dom.setStyle(foldWidget.style, \"height\", foldHeight);\n            dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n        } else {\n            if (foldWidget) {\n                dom.setStyle(foldWidget.style, \"display\", \"none\");\n            }\n        }\n        \n        var text = (gutterRenderer\n            ? gutterRenderer.getText(session, row)\n            : row + firstLineNumber).toString();\n            \n        if (text !== textNode.data) {\n            textNode.data = text;\n        }\n        \n        dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n        dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n        \n        cell.text = text;\n        return cell;\n    };\n\n    this.$fixedWidth = false;\n    \n    this.$highlightGutterLine = true;\n    this.$renderer = \"\";\n    this.setHighlightGutterLine = function(highlightGutterLine) {\n        this.$highlightGutterLine = highlightGutterLine;\n    };\n    \n    this.$showLineNumbers = true;\n    this.$renderer = \"\";\n    this.setShowLineNumbers = function(show) {\n        this.$renderer = !show && {\n            getWidth: function() {return 0;},\n            getText: function() {return \"\";}\n        };\n    };\n    \n    this.getShowLineNumbers = function() {\n        return this.$showLineNumbers;\n    };\n    \n    this.$showFoldWidgets = true;\n    this.setShowFoldWidgets = function(show) {\n        if (show)\n            dom.addCssClass(this.element, \"ace_folding-enabled\");\n        else\n            dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n        this.$showFoldWidgets = show;\n        this.$padding = null;\n    };\n    \n    this.getShowFoldWidgets = function() {\n        return this.$showFoldWidgets;\n    };\n\n    this.$computePadding = function() {\n        if (!this.element.firstChild)\n            return {left: 0, right: 0};\n        var style = dom.computedStyle(this.element.firstChild);\n        this.$padding = {};\n        this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n            + (parseInt(style.paddingLeft) || 0) + 1;\n        this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n            + (parseInt(style.paddingRight) || 0);\n        return this.$padding;\n    };\n\n    this.getRegion = function(point) {\n        var padding = this.$padding || this.$computePadding();\n        var rect = this.element.getBoundingClientRect();\n        if (point.x < padding.left + rect.left)\n            return \"markers\";\n        if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n            return \"foldWidgets\";\n    };\n\n}).call(Gutter.prototype);\n\nfunction onCreateCell(element) {\n    var textNode = document.createTextNode('');\n    element.appendChild(textNode);\n    \n    var foldWidget = dom.createElement(\"span\");\n    element.appendChild(foldWidget);\n    \n    return element;\n}\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_marker-layer\";\n    parentEl.appendChild(this.element);\n};\n\n(function() {\n\n    this.$padding = 0;\n\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n    };\n    this.setSession = function(session) {\n        this.session = session;\n    };\n    \n    this.setMarkers = function(markers) {\n        this.markers = markers;\n    };\n    \n    this.elt = function(className, css) {\n        var x = this.i != -1 && this.element.childNodes[this.i];\n        if (!x) {\n            x = document.createElement(\"div\");\n            this.element.appendChild(x);\n            this.i = -1;\n        } else {\n            this.i++;\n        }\n        x.style.cssText = css;\n        x.className = className;\n    };\n\n    this.update = function(config) {\n        if (!config) return;\n\n        this.config = config;\n\n        this.i = 0;\n        var html;\n        for (var key in this.markers) {\n            var marker = this.markers[key];\n\n            if (!marker.range) {\n                marker.update(html, this, this.session, config);\n                continue;\n            }\n\n            var range = marker.range.clipRows(config.firstRow, config.lastRow);\n            if (range.isEmpty()) continue;\n\n            range = range.toScreenRange(this.session);\n            if (marker.renderer) {\n                var top = this.$getTop(range.start.row, config);\n                var left = this.$padding + range.start.column * config.characterWidth;\n                marker.renderer(html, range, left, top, config);\n            } else if (marker.type == \"fullLine\") {\n                this.drawFullLineMarker(html, range, marker.clazz, config);\n            } else if (marker.type == \"screenLine\") {\n                this.drawScreenLineMarker(html, range, marker.clazz, config);\n            } else if (range.isMultiLine()) {\n                if (marker.type == \"text\")\n                    this.drawTextMarker(html, range, marker.clazz, config);\n                else\n                    this.drawMultiLineMarker(html, range, marker.clazz, config);\n            } else {\n                this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n            }\n        }\n        if (this.i !=-1) {\n            while (this.i < this.element.childElementCount)\n                this.element.removeChild(this.element.lastChild);\n        }\n    };\n\n    this.$getTop = function(row, layerConfig) {\n        return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n    };\n\n    function getBorderClass(tl, tr, br, bl) {\n        return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n    }\n    this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n        var session = this.session;\n        var start = range.start.row;\n        var end = range.end.row;\n        var row = start;\n        var prev = 0; \n        var curr = 0;\n        var next = session.getScreenLastRowColumn(row);\n        var lineRange = new Range(row, range.start.column, row, curr);\n        for (; row <= end; row++) {\n            lineRange.start.row = lineRange.end.row = row;\n            lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n            lineRange.end.column = next;\n            prev = curr;\n            curr = next;\n            next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n            this.drawSingleLineMarker(stringBuilder, lineRange, \n                clazz + (row == start  ? \" ace_start\" : \"\") + \" ace_br\"\n                    + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\n                layerConfig, row == end ? 0 : 1, extraStyle);\n        }\n    };\n    this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var padding = this.$padding;\n        var height = config.lineHeight;\n        var top = this.$getTop(range.start.row, config);\n        var left = padding + range.start.column * config.characterWidth;\n        extraStyle = extraStyle || \"\";\n\n        if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n           var range1 = range.clone();\n           range1.end.row = range1.start.row;\n           range1.end.column = this.session.getLine(range1.start.row).length;\n           this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n        } else {\n            this.elt(\n                clazz + \" ace_br1 ace_start\",\n                \"height:\"+ height+ \"px;\"+ \"right:0;\"+ \"top:\"+top+ \"px;left:\"+ left+ \"px;\" + (extraStyle || \"\")\n            );\n        }\n        if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n           var range1 = range.clone();\n           range1.start.row = range1.end.row;\n           range1.start.column = 0;\n           this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n        } else {\n            top = this.$getTop(range.end.row, config);\n            var width = range.end.column * config.characterWidth;\n\n            this.elt(\n                clazz + \" ace_br12\",\n                \"height:\"+ height+ \"px;\"+\n                \"width:\"+ width+ \"px;\"+\n                \"top:\"+ top+ \"px;\"+\n                \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n            );\n        }\n        height = (range.end.row - range.start.row - 1) * config.lineHeight;\n        if (height <= 0)\n            return;\n        top = this.$getTop(range.start.row + 1, config);\n        \n        var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n        this.elt(\n            clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"),\n            \"height:\"+ height+ \"px;\"+\n            \"right:0;\"+\n            \"top:\"+ top+ \"px;\"+\n            \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n        );\n    };\n    this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        if (this.session.$bidiHandler.isBidiRow(range.start.row))\n            return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n        var height = config.lineHeight;\n        var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n        var top = this.$getTop(range.start.row, config);\n        var left = this.$padding + range.start.column * config.characterWidth;\n\n        this.elt(\n            clazz,\n            \"height:\"+ height+ \"px;\"+\n            \"width:\"+ width+ \"px;\"+\n            \"top:\"+ top+ \"px;\"+\n            \"left:\"+ left+ \"px;\"+ (extraStyle || \"\")\n        );\n    };\n    this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n        var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n        selections.forEach(function(selection) {\n            this.elt(\n                clazz,\n                \"height:\" + height + \"px;\" +\n                \"width:\" + selection.width + (extraLength || 0) + \"px;\" +\n                \"top:\" + top + \"px;\" +\n                \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\")\n            );\n        }, this);\n    };\n\n    this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        if (range.start.row != range.end.row)\n            height += this.$getTop(range.end.row, config) - top;\n\n        this.elt(\n            clazz,\n            \"height:\"+ height+ \"px;\"+\n            \"top:\"+ top+ \"px;\"+\n            \"left:0;right:0;\"+ (extraStyle || \"\")\n        );\n    };\n    \n    this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n\n        this.elt(\n            clazz,\n            \"height:\"+ height+ \"px;\"+\n            \"top:\"+ top+ \"px;\"+\n            \"left:0;right:0;\"+ (extraStyle || \"\")\n        );\n    };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n    this.dom = dom; \n    this.element = this.dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_text-layer\";\n    parentEl.appendChild(this.element);\n    this.$updateEolChar = this.$updateEolChar.bind(this);\n    this.$lines = new Lines(this.element);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.EOF_CHAR = \"\\xB6\";\n    this.EOL_CHAR_LF = \"\\xAC\";\n    this.EOL_CHAR_CRLF = \"\\xa4\";\n    this.EOL_CHAR = this.EOL_CHAR_LF;\n    this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n    this.SPACE_CHAR = \"\\xB7\";\n    this.$padding = 0;\n    this.MAX_LINE_LENGTH = 10000;\n\n    this.$updateEolChar = function() {\n        var doc = this.session.doc;\n        var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n        var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n        if (this.EOL_CHAR != EOL_CHAR) {\n            this.EOL_CHAR = EOL_CHAR;\n            return true;\n        }\n    };\n\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n        this.element.style.margin = \"0 \" + padding + \"px\";\n    };\n\n    this.getLineHeight = function() {\n        return this.$fontMetrics.$characterSize.height || 0;\n    };\n\n    this.getCharacterWidth = function() {\n        return this.$fontMetrics.$characterSize.width || 0;\n    };\n    \n    this.$setFontMetrics = function(measure) {\n        this.$fontMetrics = measure;\n        this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n            this._signal(\"changeCharacterSize\", e);\n        }.bind(this));\n        this.$pollSizeChanges();\n    };\n\n    this.checkForSizeChanges = function() {\n        this.$fontMetrics.checkForSizeChanges();\n    };\n    this.$pollSizeChanges = function() {\n        return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n    };\n    this.setSession = function(session) {\n        this.session = session;\n        if (session)\n            this.$computeTabString();\n    };\n\n    this.showInvisibles = false;\n    this.setShowInvisibles = function(showInvisibles) {\n        if (this.showInvisibles == showInvisibles)\n            return false;\n\n        this.showInvisibles = showInvisibles;\n        this.$computeTabString();\n        return true;\n    };\n\n    this.displayIndentGuides = true;\n    this.setDisplayIndentGuides = function(display) {\n        if (this.displayIndentGuides == display)\n            return false;\n\n        this.displayIndentGuides = display;\n        this.$computeTabString();\n        return true;\n    };\n\n    this.$tabStrings = [];\n    this.onChangeTabSize =\n    this.$computeTabString = function() {\n        var tabSize = this.session.getTabSize();\n        this.tabSize = tabSize;\n        var tabStr = this.$tabStrings = [0];\n        for (var i = 1; i < tabSize + 1; i++) {\n            if (this.showInvisibles) {\n                var span = this.dom.createElement(\"span\");\n                span.className = \"ace_invisible ace_invisible_tab\";\n                span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n                tabStr.push(span);\n            } else {\n                tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n            }\n        }\n        if (this.displayIndentGuides) {\n            this.$indentGuideRe =  /\\s\\S| \\t|\\t |\\s$/;\n            var className = \"ace_indent-guide\";\n            var spaceClass = \"\";\n            var tabClass = \"\";\n            if (this.showInvisibles) {\n                className += \" ace_invisible\";\n                spaceClass = \" ace_invisible_space\";\n                tabClass = \" ace_invisible_tab\";\n                var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n                var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n            } else {\n                var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n                var tabContent = spaceContent;\n            }\n\n            var span = this.dom.createElement(\"span\");\n            span.className = className + spaceClass;\n            span.textContent = spaceContent;\n            this.$tabStrings[\" \"] = span;\n            \n            var span = this.dom.createElement(\"span\");\n            span.className = className + tabClass;\n            span.textContent = tabContent;\n            this.$tabStrings[\"\\t\"] = span;\n        }\n    };\n\n    this.updateLines = function(config, firstRow, lastRow) {\n        if (this.config.lastRow != config.lastRow ||\n            this.config.firstRow != config.firstRow) {\n            return this.update(config);\n        }\n        \n        this.config = config;\n\n        var first = Math.max(firstRow, config.firstRow);\n        var last = Math.min(lastRow, config.lastRow);\n\n        var lineElements = this.element.childNodes;\n        var lineElementsIdx = 0;\n\n        for (var row = config.firstRow; row < first; row++) {\n            var foldLine = this.session.getFoldLine(row);\n            if (foldLine) {\n                if (foldLine.containsRow(first)) {\n                    first = foldLine.start.row;\n                    break;\n                } else {\n                    row = foldLine.end.row;\n                }\n            }\n            lineElementsIdx ++;\n        }\n\n        var heightChanged = false;\n        var row = first;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row :Infinity;\n            }\n            if (row > last)\n                break;\n\n            var lineElement = lineElements[lineElementsIdx++];\n            if (lineElement) {\n                this.dom.removeChildren(lineElement);\n                this.$renderLine(\n                    lineElement, row, row == foldStart ? foldLine : false\n                );\n                var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n                if (lineElement.style.height != height) {\n                    heightChanged = true;\n                    lineElement.style.height = height;\n                }\n            }\n            row++;\n        }\n        if (heightChanged) {\n            while (lineElementsIdx < this.$lines.cells.length) {\n                var cell = this.$lines.cells[lineElementsIdx++];\n                cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n            }\n        }\n    };\n\n    this.scrollLines = function(config) {\n        var oldConfig = this.config;\n        this.config = config;\n\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n            \n        this.$lines.moveContainer(config);\n        \n        var lastRow = config.lastRow;\n        var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n\n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n\n        if (!oldConfig || oldConfig.lastRow < config.firstRow)\n            return this.update(config);\n\n        if (config.lastRow < oldConfig.firstRow)\n            return this.update(config);\n\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n                this.$lines.shift();\n\n        if (oldConfig.lastRow > config.lastRow)\n            for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n                this.$lines.pop();\n\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n\n        if (config.lastRow > oldConfig.lastRow) {\n            this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n        }\n    };\n\n    this.$renderLinesFragment = function(config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n\n            var line = this.$lines.createCell(row, config, this.session);\n            \n            var lineEl = line.element;\n            this.dom.removeChildren(lineEl);\n            dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n            dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n            this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n\n            if (this.$useLineGroups()) {\n                lineEl.className = \"ace_line_group\";\n            } else {\n                lineEl.className = \"ace_line\";\n            }\n            fragment.push(line);\n\n            row++;\n        }\n        return fragment;\n    };\n\n    this.update = function(config) {\n        this.$lines.moveContainer(config);\n        \n        this.config = config;\n\n        var firstRow = config.firstRow;\n        var lastRow = config.lastRow;\n\n        var lines = this.$lines;\n        while (lines.getLength())\n            lines.pop();\n            \n        lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n    };\n\n    this.$textToken = {\n        \"text\": true,\n        \"rparen\": true,\n        \"lparen\": true\n    };\n\n    this.$renderToken = function(parent, screenColumn, token, value) {\n        var self = this;\n        var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n        \n        var valueFragment = this.dom.createFragment(this.element);\n\n        var m;\n        var i = 0;\n        while (m = re.exec(value)) {\n            var tab = m[1];\n            var simpleSpace = m[2];\n            var controlCharacter = m[3];\n            var cjkSpace = m[4];\n            var cjk = m[5];\n            \n            if (!self.showInvisibles && simpleSpace)\n                continue;\n\n            var before = i != m.index ? value.slice(i, m.index) : \"\";\n\n            i = m.index + m[0].length;\n            \n            if (before) {\n                valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n            }\n                \n            if (tab) {\n                var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n                valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n                screenColumn += tabSize - 1;\n            } else if (simpleSpace) {\n                if (self.showInvisibles) {\n                    var span = this.dom.createElement(\"span\");\n                    span.className = \"ace_invisible ace_invisible_space\";\n                    span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n                    valueFragment.appendChild(span);\n                } else {\n                    valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\n                }\n            } else if (controlCharacter) {\n                var span = this.dom.createElement(\"span\");\n                span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n                span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n                valueFragment.appendChild(span);\n            } else if (cjkSpace) {\n                var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\n                screenColumn += 1;\n                \n                var span = this.dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n                span.textContent = self.showInvisibles ? self.SPACE_CHAR : \"\";\n                valueFragment.appendChild(span);\n            } else if (cjk) {\n                screenColumn += 1;\n                var span = dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = \"ace_cjk\";\n                span.textContent = cjk;\n                valueFragment.appendChild(span);\n            }\n        }\n        \n        valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n\n        if (!this.$textToken[token.type]) {\n            var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n            var span = this.dom.createElement(\"span\");\n            if (token.type == \"fold\")\n                span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n                \n            span.className = classes;\n            span.appendChild(valueFragment);\n            \n            parent.appendChild(span);\n        }\n        else {\n            parent.appendChild(valueFragment);\n        }\n        \n        return screenColumn + value.length;\n    };\n\n    this.renderIndentGuide = function(parent, value, max) {\n        var cols = value.search(this.$indentGuideRe);\n        if (cols <= 0 || cols >= max)\n            return value;\n        if (value[0] == \" \") {\n            cols -= cols % this.tabSize;\n            var count = cols/this.tabSize;\n            for (var i=0; i<count; i++) {\n                parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n            }\n            return value.substr(cols);\n        } else if (value[0] == \"\\t\") {\n            for (var i=0; i<cols; i++) {\n                parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n            }\n            return value.substr(cols);\n        }\n        return value;\n    };\n\n    this.$createLineElement = function(parent) {\n        var lineEl = this.dom.createElement(\"div\");\n        lineEl.className = \"ace_line\";\n        lineEl.style.height = this.config.lineHeight + \"px\";\n        \n        return lineEl;\n    };\n\n    this.$renderWrappedLine = function(parent, tokens, splits) {\n        var chars = 0;\n        var split = 0;\n        var splitChars = splits[0];\n        var screenColumn = 0;\n\n        var lineEl = this.$createLineElement();\n        parent.appendChild(lineEl);\n        \n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                chars = value.length;\n                value = this.renderIndentGuide(lineEl, value, splitChars);\n                if (!value)\n                    continue;\n                chars -= value.length;\n            }\n\n            if (chars + value.length < splitChars) {\n                screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n                chars += value.length;\n            } else {\n                while (chars + value.length >= splitChars) {\n                    screenColumn = this.$renderToken(\n                        lineEl, screenColumn,\n                        token, value.substring(0, splitChars - chars)\n                    );\n                    value = value.substring(splitChars - chars);\n                    chars = splitChars;\n\n                    lineEl = this.$createLineElement();\n                    parent.appendChild(lineEl);\n\n                    lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n\n                    split ++;\n                    screenColumn = 0;\n                    splitChars = splits[split] || Number.MAX_VALUE;\n                }\n                if (value.length != 0) {\n                    chars += value.length;\n                    screenColumn = this.$renderToken(\n                        lineEl, screenColumn, token, value\n                    );\n                }\n            }\n        }\n    };\n\n    this.$renderSimpleLine = function(parent, tokens) {\n        var screenColumn = 0;\n        var token = tokens[0];\n        var value = token.value;\n        if (this.displayIndentGuides)\n            value = this.renderIndentGuide(parent, value);\n        if (value)\n            screenColumn = this.$renderToken(parent, screenColumn, token, value);\n        for (var i = 1; i < tokens.length; i++) {\n            token = tokens[i];\n            value = token.value;\n            if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n                return this.$renderOverflowMessage(parent, screenColumn, token, value);\n            screenColumn = this.$renderToken(parent, screenColumn, token, value);\n        }\n    };\n    \n    this.$renderOverflowMessage = function(parent, screenColumn, token, value) {\n        this.$renderToken(parent, screenColumn, token,\n            value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n            \n        var overflowEl = this.dom.createElement(\"span\");\n        overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n        overflowEl.style.position = \"absolute\";\n        overflowEl.style.right = \"0\";\n        overflowEl.textContent = \"<click to see more...>\";\n        \n        parent.appendChild(overflowEl);        \n    };\n    this.$renderLine = function(parent, row, foldLine) {\n        if (!foldLine && foldLine != false)\n            foldLine = this.session.getFoldLine(row);\n\n        if (foldLine)\n            var tokens = this.$getFoldLineTokens(row, foldLine);\n        else\n            var tokens = this.session.getTokens(row);\n\n        var lastLineEl = parent;\n        if (tokens.length) {\n            var splits = this.session.getRowSplitData(row);\n            if (splits && splits.length) {\n                this.$renderWrappedLine(parent, tokens, splits);\n                var lastLineEl = parent.lastChild;\n            } else {\n                var lastLineEl = parent;\n                if (this.$useLineGroups()) {\n                    lastLineEl = this.$createLineElement();\n                    parent.appendChild(lastLineEl);\n                }\n                this.$renderSimpleLine(lastLineEl, tokens);\n            }\n        } else if (this.$useLineGroups()) {\n            lastLineEl = this.$createLineElement();\n            parent.appendChild(lastLineEl);\n        }\n\n        if (this.showInvisibles && lastLineEl) {\n            if (foldLine)\n                row = foldLine.end.row;\n\n            var invisibleEl = this.dom.createElement(\"span\");\n            invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n            invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n            \n            lastLineEl.appendChild(invisibleEl);\n        }\n    };\n\n    this.$getFoldLineTokens = function(row, foldLine) {\n        var session = this.session;\n        var renderTokens = [];\n\n        function addTokens(tokens, from, to) {\n            var idx = 0, col = 0;\n            while ((col + tokens[idx].value.length) < from) {\n                col += tokens[idx].value.length;\n                idx++;\n\n                if (idx == tokens.length)\n                    return;\n            }\n            if (col != from) {\n                var value = tokens[idx].value.substring(from - col);\n                if (value.length > (to - from))\n                    value = value.substring(0, to - from);\n\n                renderTokens.push({\n                    type: tokens[idx].type,\n                    value: value\n                });\n\n                col = from + value.length;\n                idx += 1;\n            }\n\n            while (col < to && idx < tokens.length) {\n                var value = tokens[idx].value;\n                if (value.length + col > to) {\n                    renderTokens.push({\n                        type: tokens[idx].type,\n                        value: value.substring(0, to - col)\n                    });\n                } else\n                    renderTokens.push(tokens[idx]);\n                col += value.length;\n                idx += 1;\n            }\n        }\n\n        var tokens = session.getTokens(row);\n        foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n            if (placeholder != null) {\n                renderTokens.push({\n                    type: \"fold\",\n                    value: placeholder\n                });\n            } else {\n                if (isNewRow)\n                    tokens = session.getTokens(row);\n\n                if (tokens.length)\n                    addTokens(tokens, lastColumn, column);\n            }\n        }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n        return renderTokens;\n    };\n\n    this.$useLineGroups = function() {\n        return this.session.getUseWrapMode();\n    };\n\n    this.destroy = function() {};\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Cursor = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_cursor-layer\";\n    parentEl.appendChild(this.element);\n    \n    this.isVisible = false;\n    this.isBlinking = true;\n    this.blinkInterval = 1000;\n    this.smoothBlinking = false;\n\n    this.cursors = [];\n    this.cursor = this.addCursor();\n    dom.addCssClass(this.element, \"ace_hidden-cursors\");\n    this.$updateCursors = this.$updateOpacity.bind(this);\n};\n\n(function() {\n    \n    this.$updateOpacity = function(val) {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--; )\n            dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n    };\n\n    this.$startCssAnimation = function() {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--; )\n            cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n\n        setTimeout(function() {\n            dom.addCssClass(this.element, \"ace_animate-blinking\");\n        }.bind(this));\n    };\n    \n    this.$stopCssAnimation = function() {\n        dom.removeCssClass(this.element, \"ace_animate-blinking\");\n    };\n\n    this.$padding = 0;\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n    };\n\n    this.setSession = function(session) {\n        this.session = session;\n    };\n\n    this.setBlinking = function(blinking) {\n        if (blinking != this.isBlinking) {\n            this.isBlinking = blinking;\n            this.restartTimer();\n        }\n    };\n\n    this.setBlinkInterval = function(blinkInterval) {\n        if (blinkInterval != this.blinkInterval) {\n            this.blinkInterval = blinkInterval;\n            this.restartTimer();\n        }\n    };\n\n    this.setSmoothBlinking = function(smoothBlinking) {\n        if (smoothBlinking != this.smoothBlinking) {\n            this.smoothBlinking = smoothBlinking;\n            dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n            this.$updateCursors(true);\n            this.restartTimer();\n        }\n    };\n\n    this.addCursor = function() {\n        var el = dom.createElement(\"div\");\n        el.className = \"ace_cursor\";\n        this.element.appendChild(el);\n        this.cursors.push(el);\n        return el;\n    };\n\n    this.removeCursor = function() {\n        if (this.cursors.length > 1) {\n            var el = this.cursors.pop();\n            el.parentNode.removeChild(el);\n            return el;\n        }\n    };\n\n    this.hideCursor = function() {\n        this.isVisible = false;\n        dom.addCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n\n    this.showCursor = function() {\n        this.isVisible = true;\n        dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n\n    this.restartTimer = function() {\n        var update = this.$updateCursors;\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n        this.$stopCssAnimation();\n\n        if (this.smoothBlinking) {\n            dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n        }\n        \n        update(true);\n\n        if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n            this.$stopCssAnimation();\n            return;\n        }\n\n        if (this.smoothBlinking) {\n            setTimeout(function(){\n                dom.addCssClass(this.element, \"ace_smooth-blinking\");\n            }.bind(this));\n        }\n        \n        if (dom.HAS_CSS_ANIMATION) {\n            this.$startCssAnimation();\n        } else {\n            var blink = function(){\n                this.timeoutId = setTimeout(function() {\n                    update(false);\n                }, 0.6 * this.blinkInterval);\n            }.bind(this);\n    \n            this.intervalId = setInterval(function() {\n                update(true);\n                blink();\n            }, this.blinkInterval);\n            blink();\n        }\n    };\n\n    this.getPixelPosition = function(position, onScreen) {\n        if (!this.config || !this.session)\n            return {left : 0, top : 0};\n\n        if (!position)\n            position = this.session.selection.getCursor();\n        var pos = this.session.documentToScreenPosition(position);\n        var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n            ? this.session.$bidiHandler.getPosLeft(pos.column)\n            : pos.column * this.config.characterWidth);\n\n        var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n            this.config.lineHeight;\n\n        return {left : cursorLeft, top : cursorTop};\n    };\n\n    this.isCursorInView = function(pixelPos, config) {\n        return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n    };\n\n    this.update = function(config) {\n        this.config = config;\n\n        var selections = this.session.$selectionMarkers;\n        var i = 0, cursorIndex = 0;\n\n        if (selections === undefined || selections.length === 0){\n            selections = [{cursor: null}];\n        }\n\n        for (var i = 0, n = selections.length; i < n; i++) {\n            var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n            if ((pixelPos.top > config.height + config.offset ||\n                 pixelPos.top < 0) && i > 1) {\n                continue;\n            }\n\n            var element = this.cursors[cursorIndex++] || this.addCursor();\n            var style = element.style;\n            \n            if (!this.drawCursor) {\n                if (!this.isCursorInView(pixelPos, config)) {\n                    dom.setStyle(style, \"display\", \"none\");\n                } else {\n                    dom.setStyle(style, \"display\", \"block\");\n                    dom.translate(element, pixelPos.left, pixelPos.top);\n                    dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n                    dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n                }\n            } else {\n                this.drawCursor(element, pixelPos, config, selections[i], this.session);\n            }\n        }\n        while (this.cursors.length > cursorIndex)\n            this.removeCursor();\n\n        var overwrite = this.session.getOverwrite();\n        this.$setOverwrite(overwrite);\n        this.$pixelPos = pixelPos;\n        this.restartTimer();\n    };\n    \n    this.drawCursor = null;\n\n    this.$setOverwrite = function(overwrite) {\n        if (overwrite != this.overwrite) {\n            this.overwrite = overwrite;\n            if (overwrite)\n                dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n            else\n                dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n        }\n    };\n\n    this.destroy = function() {\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n    };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n    this.inner = dom.createElement(\"div\");\n    this.inner.className = \"ace_scrollbar-inner\";\n    this.element.appendChild(this.inner);\n\n    parent.appendChild(this.element);\n\n    this.setVisible(false);\n    this.skipEvent = false;\n\n    event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n    event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n\n    this.setVisible = function(isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollTop = 0;\n    this.scrollHeight = 0;\n    renderer.$scrollbarWidth = \n    this.width = dom.scrollbarWidth(parent.ownerDocument);\n    this.inner.style.width =\n    this.element.style.width = (this.width || 15) + 5 + \"px\";\n    this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n    this.classSuffix = '-v';\n    this.onScroll = function() {\n        if (!this.skipEvent) {\n            this.scrollTop = this.element.scrollTop;\n            if (this.coeff != 1) {\n                var h = this.element.clientHeight / this.scrollHeight;\n                this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n            }\n            this._emit(\"scroll\", {data: this.scrollTop});\n        }\n        this.skipEvent = false;\n    };\n    this.getWidth = function() {\n        return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n    };\n    this.setHeight = function(height) {\n        this.element.style.height = height + \"px\";\n    };\n    this.setInnerHeight = \n    this.setScrollHeight = function(height) {\n        this.scrollHeight = height;\n        if (height > MAX_SCROLL_H) {\n            this.coeff = MAX_SCROLL_H / height;\n            height = MAX_SCROLL_H;\n        } else if (this.coeff != 1) {\n            this.coeff = 1;\n        }\n        this.inner.style.height = height + \"px\";\n    };\n    this.setScrollTop = function(scrollTop) {\n        if (this.scrollTop != scrollTop) {\n            this.skipEvent = true;\n            this.scrollTop = scrollTop;\n            this.element.scrollTop = scrollTop * this.coeff;\n        }\n    };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollLeft = 0;\n    this.height = renderer.$scrollbarWidth;\n    this.inner.style.height =\n    this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n    this.classSuffix = '-h';\n    this.onScroll = function() {\n        if (!this.skipEvent) {\n            this.scrollLeft = this.element.scrollLeft;\n            this._emit(\"scroll\", {data: this.scrollLeft});\n        }\n        this.skipEvent = false;\n    };\n    this.getHeight = function() {\n        return this.isVisible ? this.height : 0;\n    };\n    this.setWidth = function(width) {\n        this.element.style.width = width + \"px\";\n    };\n    this.setInnerWidth = function(width) {\n        this.inner.style.width = width + \"px\";\n    };\n    this.setScrollWidth = function(width) {\n        this.inner.style.width = width + \"px\";\n    };\n    this.setScrollLeft = function(scrollLeft) {\n        if (this.scrollLeft != scrollLeft) {\n            this.skipEvent = true;\n            this.scrollLeft = this.element.scrollLeft = scrollLeft;\n        }\n    };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n    this.onRender = onRender;\n    this.pending = false;\n    this.changes = 0;\n    this.$recursionLimit = 2;\n    this.window = win || window;\n    var _self = this;\n    this._flush = function(ts) {\n        _self.pending = false;\n        var changes = _self.changes;\n\n        if (changes) {\n            event.blockIdle(100);\n            _self.changes = 0;\n            _self.onRender(changes);\n        }\n        \n        if (_self.changes) {\n            if (_self.$recursionLimit-- < 0) return;\n            _self.schedule();\n        } else {\n            _self.$recursionLimit = 2;\n        }\n    };\n};\n\n(function() {\n\n    this.schedule = function(change) {\n        this.changes = this.changes | change;\n        if (this.changes && !this.pending) {\n            event.nextFrame(this._flush);\n            this.pending = true;\n        }\n    };\n\n    this.clear = function(change) {\n        var changes = this.changes;\n        this.changes = 0;\n        return changes;\n    };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 256;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n    this.el = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.el.style, true);\n    \n    this.$main = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$main.style);\n    \n    this.$measureNode = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$measureNode.style);\n    \n    \n    this.el.appendChild(this.$main);\n    this.el.appendChild(this.$measureNode);\n    parentEl.appendChild(this.el);\n    \n    this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n    \n    this.$characterSize = {width: 0, height: 0};\n    \n    \n    if (USE_OBSERVER)\n        this.$addObserver();\n    else\n        this.checkForSizeChanges();\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n        \n    this.$characterSize = {width: 0, height: 0};\n    \n    this.$setMeasureNodeStyles = function(style, isRoot) {\n        style.width = style.height = \"auto\";\n        style.left = style.top = \"0px\";\n        style.visibility = \"hidden\";\n        style.position = \"absolute\";\n        style.whiteSpace = \"pre\";\n\n        if (useragent.isIE < 8) {\n            style[\"font-family\"] = \"inherit\";\n        } else {\n            style.font = \"inherit\";\n        }\n        style.overflow = isRoot ? \"hidden\" : \"visible\";\n    };\n\n    this.checkForSizeChanges = function(size) {\n        if (size === undefined)\n            size = this.$measureSizes();\n        if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n            this.$measureNode.style.fontWeight = \"bold\";\n            var boldSize = this.$measureSizes();\n            this.$measureNode.style.fontWeight = \"\";\n            this.$characterSize = size;\n            this.charSizes = Object.create(null);\n            this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n            this._emit(\"changeCharacterSize\", {data: size});\n        }\n    };\n    \n    this.$addObserver = function() {\n        var self = this;\n        this.$observer = new window.ResizeObserver(function(e) {\n            var rect = e[0].contentRect;\n            self.checkForSizeChanges({\n                height: rect.height,\n                width: rect.width / CHAR_COUNT\n            });\n        });\n        this.$observer.observe(this.$measureNode);\n    };\n\n    this.$pollSizeChanges = function() {\n        if (this.$pollSizeChangesTimer || this.$observer)\n            return this.$pollSizeChangesTimer;\n        var self = this;\n        \n        return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n            self.checkForSizeChanges();\n            event.onIdle(cb, 500);\n        }, 500);\n    };\n    \n    this.setPolling = function(val) {\n        if (val) {\n            this.$pollSizeChanges();\n        } else if (this.$pollSizeChangesTimer) {\n            clearInterval(this.$pollSizeChangesTimer);\n            this.$pollSizeChangesTimer = 0;\n        }\n    };\n\n    this.$measureSizes = function(node) {\n        var size = {\n            height: (node || this.$measureNode).clientHeight,\n            width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n        };\n        if (size.width === 0 || size.height === 0)\n            return null;\n        return size;\n    };\n\n    this.$measureCharWidth = function(ch) {\n        this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n        var rect = this.$main.getBoundingClientRect();\n        return rect.width / CHAR_COUNT;\n    };\n    \n    this.getCharacterWidth = function(ch) {\n        var w = this.charSizes[ch];\n        if (w === undefined) {\n            w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n        }\n        return w;\n    };\n\n    this.destroy = function() {\n        clearInterval(this.$pollSizeChangesTimer);\n        if (this.$observer)\n            this.$observer.disconnect();\n        if (this.el && this.el.parentNode)\n            this.el.parentNode.removeChild(this.el);\n    };\n\n    \n    this.$getZoom = function getZoom(element) {\n        if (!element) return 1;\n        return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n    };\n    this.$initTransformMeasureNodes = function() {\n        var t = function(t, l) {\n            return [\"div\", {\n                style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n            }];\n        };\n        this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n    };\n    this.transformCoordinates = function(clientPos, elPos) {\n        if (clientPos) {\n            var zoom = this.$getZoom(this.el);\n            clientPos = mul(1 / zoom, clientPos);\n        }\n        function solve(l1, l2, r) {\n            var det = l1[1] * l2[0] - l1[0] * l2[1];\n            return [\n                (-l2[1] * r[0] + l2[0] * r[1]) / det,\n                (+l1[1] * r[0] - l1[0] * r[1]) / det\n            ];\n        }\n        function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n        function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n        function mul(a, b) { return [a * b[0], a * b[1]]; }\n\n        if (!this.els)\n            this.$initTransformMeasureNodes();\n        \n        function p(el) {\n            var r = el.getBoundingClientRect();\n            return [r.left, r.top];\n        }\n\n        var a = p(this.els[0]);\n        var b = p(this.els[1]);\n        var c = p(this.els[2]);\n        var d = p(this.els[3]);\n\n        var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n\n        var m1 = mul(1 + h[0], sub(b, a));\n        var m2 = mul(1 + h[1], sub(c, a));\n        \n        if (elPos) {\n            var x = elPos;\n            var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n            var ut = add(mul(x[0], m1), mul(x[1], m2));\n            return  add(mul(1 / k / L, ut), a);\n        }\n        var u = sub(clientPos, a);\n        var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n        return mul(L, f);\n    };\n    \n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \"\\\n.ace_br1 {border-top-left-radius    : 3px;}\\\n.ace_br2 {border-top-right-radius   : 3px;}\\\n.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}\\\n.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}\\\n.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\\n.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\\n.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\\n.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\ncontain: style size layout;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncontain: style size layout;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\ncontain: strict;\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ncontain: strict;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: transparent;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\n}\\\n.ace_composition_placeholder { color: transparent }\\\n.ace_composition_marker { \\\nborder-bottom: 1px solid;\\\nposition: absolute;\\\nborder-radius: 0;\\\nmargin-top: 1px;\\\n}\\\n[ace_nocontext=true] {\\\ntransform: none!important;\\\nfilter: none!important;\\\nperspective: none!important;\\\nclip-path: none!important;\\\nmask : none!important;\\\ncontain: none!important;\\\nperspective: none!important;\\\nmix-blend-mode: initial!important;\\\nz-index: auto;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\nheight: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\nposition: absolute;\\\nheight: 1000000px;\\\nwidth: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\\ncontain: style size layout;\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_hidpi .ace_text-layer,\\\n.ace_hidpi .ace_gutter-layer,\\\n.ace_hidpi .ace_content,\\\n.ace_hidpi .ace_gutter {\\\ncontain: strict;\\\nwill-change: transform;\\\n}\\\n.ace_hidpi .ace_text-layer > .ace_line, \\\n.ace_hidpi .ace_text-layer > .ace_line_group {\\\ncontain: strict;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_animate-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: step-end;\\\nanimation-name: blink-ace-animate;\\\nanimation-iteration-count: infinite;\\\n}\\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: ease-in-out;\\\nanimation-name: blink-ace-animate-smooth;\\\n}\\\n@keyframes blink-ace-animate {\\\nfrom, to { opacity: 1; }\\\n60% { opacity: 0; }\\\n}\\\n@keyframes blink-ace-animate-smooth {\\\nfrom, to { opacity: 1; }\\\n45% { opacity: 1; }\\\n60% { opacity: 0; }\\\n85% { opacity: 0; }\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block;   \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_inline_button {\\\nborder: 1px solid lightgray;\\\ndisplay: inline-block;\\\nmargin: -1px 8px;\\\npadding: 0 5px;\\\npointer-events: auto;\\\ncursor: pointer;\\\n}\\\n.ace_inline_button:hover {\\\nborder-color: gray;\\\nbackground: rgba(200,200,200,0.2);\\\ndisplay: inline-block;\\\npointer-events: auto;\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n\";\n\nvar useragent = require(\"./lib/useragent\");\nvar HIDE_TEXTAREA = useragent.isIE;\n\ndom.importCssString(editorCss, \"ace_editor.css\");\n\nvar VirtualRenderer = function(container, theme) {\n    var _self = this;\n\n    this.container = container || dom.createElement(\"div\");\n\n    dom.addCssClass(this.container, \"ace_editor\");\n    if (dom.HI_DPI) dom.addCssClass(this.container, \"ace_hidpi\");\n\n    this.setTheme(theme);\n\n    this.$gutter = dom.createElement(\"div\");\n    this.$gutter.className = \"ace_gutter\";\n    this.container.appendChild(this.$gutter);\n    this.$gutter.setAttribute(\"aria-hidden\", true);\n\n    this.scroller = dom.createElement(\"div\");\n    this.scroller.className = \"ace_scroller\";\n    \n    this.container.appendChild(this.scroller);\n\n    this.content = dom.createElement(\"div\");\n    this.content.className = \"ace_content\";\n    this.scroller.appendChild(this.content);\n\n    this.$gutterLayer = new GutterLayer(this.$gutter);\n    this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n    this.$markerBack = new MarkerLayer(this.content);\n\n    var textLayer = this.$textLayer = new TextLayer(this.content);\n    this.canvas = textLayer.element;\n\n    this.$markerFront = new MarkerLayer(this.content);\n\n    this.$cursorLayer = new CursorLayer(this.content);\n    this.$horizScroll = false;\n    this.$vScroll = false;\n\n    this.scrollBar = \n    this.scrollBarV = new VScrollBar(this.container, this);\n    this.scrollBarH = new HScrollBar(this.container, this);\n    this.scrollBarV.addEventListener(\"scroll\", function(e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n    });\n    this.scrollBarH.addEventListener(\"scroll\", function(e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n    });\n\n    this.scrollTop = 0;\n    this.scrollLeft = 0;\n\n    this.cursorPos = {\n        row : 0,\n        column : 0\n    };\n\n    this.$fontMetrics = new FontMetrics(this.container);\n    this.$textLayer.$setFontMetrics(this.$fontMetrics);\n    this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\n        _self.updateCharacterSize();\n        _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n        _self._signal(\"changeCharacterSize\", e);\n    });\n\n    this.$size = {\n        width: 0,\n        height: 0,\n        scrollerHeight: 0,\n        scrollerWidth: 0,\n        $dirty: true\n    };\n\n    this.layerConfig = {\n        width : 1,\n        padding : 0,\n        firstRow : 0,\n        firstRowScreen: 0,\n        lastRow : 0,\n        lineHeight : 0,\n        characterWidth : 0,\n        minHeight : 1,\n        maxHeight : 1,\n        offset : 0,\n        height : 1,\n        gutterOffset: 1\n    };\n    \n    this.scrollMargin = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        v: 0,\n        h: 0\n    };\n    \n    this.margin = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        v: 0,\n        h: 0\n    };\n    \n    this.$keepTextAreaAtCursor = !useragent.isIOS;\n\n    this.$loop = new RenderLoop(\n        this.$renderChanges.bind(this),\n        this.container.ownerDocument.defaultView\n    );\n    this.$loop.schedule(this.CHANGE_FULL);\n\n    this.updateCharacterSize();\n    this.setPadding(4);\n    config.resetOptions(this);\n    config._emit(\"renderer\", this);\n};\n\n(function() {\n\n    this.CHANGE_CURSOR = 1;\n    this.CHANGE_MARKER = 2;\n    this.CHANGE_GUTTER = 4;\n    this.CHANGE_SCROLL = 8;\n    this.CHANGE_LINES = 16;\n    this.CHANGE_TEXT = 32;\n    this.CHANGE_SIZE = 64;\n    this.CHANGE_MARKER_BACK = 128;\n    this.CHANGE_MARKER_FRONT = 256;\n    this.CHANGE_FULL = 512;\n    this.CHANGE_H_SCROLL = 1024;\n\n    oop.implement(this, EventEmitter);\n\n    this.updateCharacterSize = function() {\n        if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n            this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n            this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n        }\n\n        this.layerConfig.characterWidth =\n        this.characterWidth = this.$textLayer.getCharacterWidth();\n        this.layerConfig.lineHeight =\n        this.lineHeight = this.$textLayer.getLineHeight();\n        this.$updatePrintMargin();\n    };\n    this.setSession = function(session) {\n        if (this.session)\n            this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n            \n        this.session = session;\n        if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n            session.setScrollTop(-this.scrollMargin.top);\n\n        this.$cursorLayer.setSession(session);\n        this.$markerBack.setSession(session);\n        this.$markerFront.setSession(session);\n        this.$gutterLayer.setSession(session);\n        this.$textLayer.setSession(session);\n        if (!session)\n            return;\n        \n        this.$loop.schedule(this.CHANGE_FULL);\n        this.session.$setFontMetrics(this.$fontMetrics);\n        this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n        \n        this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n        this.onChangeNewLineMode();\n        this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n    };\n    this.updateLines = function(firstRow, lastRow, force) {\n        if (lastRow === undefined)\n            lastRow = Infinity;\n\n        if (!this.$changedLines) {\n            this.$changedLines = {\n                firstRow: firstRow,\n                lastRow: lastRow\n            };\n        }\n        else {\n            if (this.$changedLines.firstRow > firstRow)\n                this.$changedLines.firstRow = firstRow;\n\n            if (this.$changedLines.lastRow < lastRow)\n                this.$changedLines.lastRow = lastRow;\n        }\n        if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n            if (force)\n                this.$changedLines.lastRow = this.layerConfig.lastRow;\n            else\n                return;\n        }\n        if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n            return;\n        this.$loop.schedule(this.CHANGE_LINES);\n    };\n\n    this.onChangeNewLineMode = function() {\n        this.$loop.schedule(this.CHANGE_TEXT);\n        this.$textLayer.$updateEolChar();\n        this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n    };\n    \n    this.onChangeTabSize = function() {\n        this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n        this.$textLayer.onChangeTabSize();\n    };\n    this.updateText = function() {\n        this.$loop.schedule(this.CHANGE_TEXT);\n    };\n    this.updateFull = function(force) {\n        if (force)\n            this.$renderChanges(this.CHANGE_FULL, true);\n        else\n            this.$loop.schedule(this.CHANGE_FULL);\n    };\n    this.updateFontSize = function() {\n        this.$textLayer.checkForSizeChanges();\n    };\n\n    this.$changes = 0;\n    this.$updateSizeAsync = function() {\n        if (this.$loop.pending)\n            this.$size.$dirty = true;\n        else\n            this.onResize();\n    };\n    this.onResize = function(force, gutterWidth, width, height) {\n        if (this.resizing > 2)\n            return;\n        else if (this.resizing > 0)\n            this.resizing++;\n        else\n            this.resizing = force ? 1 : 0;\n        var el = this.container;\n        if (!height)\n            height = el.clientHeight || el.scrollHeight;\n        if (!width)\n            width = el.clientWidth || el.scrollWidth;\n        var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n        \n        if (!this.$size.scrollerHeight || (!width && !height))\n            return this.resizing = 0;\n\n        if (force)\n            this.$gutterLayer.$padding = null;\n\n        if (force)\n            this.$renderChanges(changes | this.$changes, true);\n        else\n            this.$loop.schedule(changes | this.$changes);\n\n        if (this.resizing)\n            this.resizing = 0;\n        this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n    };\n    \n    this.$updateCachedSize = function(force, gutterWidth, width, height) {\n        height -= (this.$extraHeight || 0);\n        var changes = 0;\n        var size = this.$size;\n        var oldSize = {\n            width: size.width,\n            height: size.height,\n            scrollerHeight: size.scrollerHeight,\n            scrollerWidth: size.scrollerWidth\n        };\n        if (height && (force || size.height != height)) {\n            size.height = height;\n            changes |= this.CHANGE_SIZE;\n\n            size.scrollerHeight = size.height;\n            if (this.$horizScroll)\n                size.scrollerHeight -= this.scrollBarH.getHeight();\n            this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n            changes = changes | this.CHANGE_SCROLL;\n        }\n\n        if (width && (force || size.width != width)) {\n            changes |= this.CHANGE_SIZE;\n            size.width = width;\n            \n            if (gutterWidth == null)\n                gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n            \n            this.gutterWidth = gutterWidth;\n            \n            dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n            dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n            size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n            dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n            \n            var right = this.scrollBarV.getWidth() + \"px\";\n            dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n\n            if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n                changes |= this.CHANGE_FULL;\n            }\n        }\n        \n        size.$dirty = !width || !height;\n\n        if (changes)\n            this._signal(\"resize\", oldSize);\n\n        return changes;\n    };\n\n    this.onGutterResize = function(width) {\n        var gutterWidth = this.$showGutter ? width : 0;\n        if (gutterWidth != this.gutterWidth)\n            this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n        if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        } else if (this.$size.$dirty) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        } else {\n            this.$computeLayerConfig();\n        }\n    };\n    this.adjustWrapLimit = function() {\n        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n        var limit = Math.floor(availableWidth / this.characterWidth);\n        return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n    };\n    this.setAnimatedScroll = function(shouldAnimate){\n        this.setOption(\"animatedScroll\", shouldAnimate);\n    };\n    this.getAnimatedScroll = function() {\n        return this.$animatedScroll;\n    };\n    this.setShowInvisibles = function(showInvisibles) {\n        this.setOption(\"showInvisibles\", showInvisibles);\n        this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n    };\n    this.getShowInvisibles = function() {\n        return this.getOption(\"showInvisibles\");\n    };\n    this.getDisplayIndentGuides = function() {\n        return this.getOption(\"displayIndentGuides\");\n    };\n\n    this.setDisplayIndentGuides = function(display) {\n        this.setOption(\"displayIndentGuides\", display);\n    };\n    this.setShowPrintMargin = function(showPrintMargin) {\n        this.setOption(\"showPrintMargin\", showPrintMargin);\n    };\n    this.getShowPrintMargin = function() {\n        return this.getOption(\"showPrintMargin\");\n    };\n    this.setPrintMarginColumn = function(showPrintMargin) {\n        this.setOption(\"printMarginColumn\", showPrintMargin);\n    };\n    this.getPrintMarginColumn = function() {\n        return this.getOption(\"printMarginColumn\");\n    };\n    this.getShowGutter = function(){\n        return this.getOption(\"showGutter\");\n    };\n    this.setShowGutter = function(show){\n        return this.setOption(\"showGutter\", show);\n    };\n\n    this.getFadeFoldWidgets = function(){\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n\n    this.setFadeFoldWidgets = function(show) {\n        this.setOption(\"fadeFoldWidgets\", show);\n    };\n\n    this.setHighlightGutterLine = function(shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n\n    this.getHighlightGutterLine = function() {\n        return this.getOption(\"highlightGutterLine\");\n    };\n\n    this.$updatePrintMargin = function() {\n        if (!this.$showPrintMargin && !this.$printMarginEl)\n            return;\n\n        if (!this.$printMarginEl) {\n            var containerEl = dom.createElement(\"div\");\n            containerEl.className = \"ace_layer ace_print-margin-layer\";\n            this.$printMarginEl = dom.createElement(\"div\");\n            this.$printMarginEl.className = \"ace_print-margin\";\n            containerEl.appendChild(this.$printMarginEl);\n            this.content.insertBefore(containerEl, this.content.firstChild);\n        }\n\n        var style = this.$printMarginEl.style;\n        style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n        style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n        \n        if (this.session && this.session.$wrap == -1)\n            this.adjustWrapLimit();\n    };\n    this.getContainerElement = function() {\n        return this.container;\n    };\n    this.getMouseEventTarget = function() {\n        return this.scroller;\n    };\n    this.getTextAreaContainer = function() {\n        return this.container;\n    };\n    this.$moveTextAreaToCursor = function() {\n        var style = this.textarea.style;\n        if (!this.$keepTextAreaAtCursor) {\n            dom.translate(this.textarea, -100, 0);\n            return;\n        }\n        var pixelPos = this.$cursorLayer.$pixelPos;\n        if (!pixelPos)\n            return;\n        var composition = this.$composition;\n        if (composition && composition.markerRange)\n            pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n        \n        var config = this.layerConfig;\n        var posTop = pixelPos.top;\n        var posLeft = pixelPos.left;\n        posTop -= config.offset;\n\n        var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n        if (posTop < 0 || posTop > config.height - h) {\n            dom.translate(this.textarea, 0, 0);\n            return;\n        }\n\n        var w = 1;\n        if (!composition) {\n            posTop += this.lineHeight;\n        }\n        else {\n            if (composition.useTextareaForIME) {\n                var val = this.textarea.value;\n                w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n                h += 2;\n            }\n            else {\n                posTop += this.lineHeight + 2;\n            }\n        }\n        \n        posLeft -= this.scrollLeft;\n        if (posLeft > this.$size.scrollerWidth - w)\n            posLeft = this.$size.scrollerWidth - w;\n\n        posLeft += this.gutterWidth + this.margin.left;\n\n        dom.setStyle(style, \"height\", h + \"px\");\n        dom.setStyle(style, \"width\", w + \"px\");\n        dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, this.$size.height - h));\n    };\n    this.getFirstVisibleRow = function() {\n        return this.layerConfig.firstRow;\n    };\n    this.getFirstFullyVisibleRow = function() {\n        return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n    };\n    this.getLastFullyVisibleRow = function() {\n        var config = this.layerConfig;\n        var lastRow = config.lastRow;\n        var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n        if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n            return lastRow - 1;\n        return lastRow;\n    };\n    this.getLastVisibleRow = function() {\n        return this.layerConfig.lastRow;\n    };\n\n    this.$padding = null;\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n        this.$textLayer.setPadding(padding);\n        this.$cursorLayer.setPadding(padding);\n        this.$markerFront.setPadding(padding);\n        this.$markerBack.setPadding(padding);\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.$updatePrintMargin();\n    };\n    \n    this.setScrollMargin = function(top, bottom, left, right) {\n        var sm = this.scrollMargin;\n        sm.top = top|0;\n        sm.bottom = bottom|0;\n        sm.right = right|0;\n        sm.left = left|0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        if (sm.top && this.scrollTop <= 0 && this.session)\n            this.session.setScrollTop(-sm.top);\n        this.updateFull();\n    };\n    \n    this.setMargin = function(top, bottom, left, right) {\n        var sm = this.margin;\n        sm.top = top|0;\n        sm.bottom = bottom|0;\n        sm.right = right|0;\n        sm.left = left|0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n        this.updateFull();\n    };\n    this.getHScrollBarAlwaysVisible = function() {\n        return this.$hScrollBarAlwaysVisible;\n    };\n    this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n        this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    this.getVScrollBarAlwaysVisible = function() {\n        return this.$vScrollBarAlwaysVisible;\n    };\n    this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n        this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n    };\n\n    this.$updateScrollBarV = function() {\n        var scrollHeight = this.layerConfig.maxHeight;\n        var scrollerHeight = this.$size.scrollerHeight;\n        if (!this.$maxLines && this.$scrollPastEnd) {\n            scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n            if (this.scrollTop > scrollHeight - scrollerHeight) {\n                scrollHeight = this.scrollTop + scrollerHeight;\n                this.scrollBarV.scrollTop = null;\n            }\n        }\n        this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n        this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n    };\n    this.$updateScrollBarH = function() {\n        this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n        this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n    };\n    \n    this.$frozen = false;\n    this.freeze = function() {\n        this.$frozen = true;\n    };\n    \n    this.unfreeze = function() {\n        this.$frozen = false;\n    };\n\n    this.$renderChanges = function(changes, force) {\n        if (this.$changes) {\n            changes |= this.$changes;\n            this.$changes = 0;\n        }\n        if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n            this.$changes |= changes;\n            return; \n        } \n        if (this.$size.$dirty) {\n            this.$changes |= changes;\n            return this.onResize(true);\n        }\n        if (!this.lineHeight) {\n            this.$textLayer.checkForSizeChanges();\n        }\n        \n        this._signal(\"beforeRender\");\n        \n        if (this.session && this.session.$bidiHandler)\n            this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n        var config = this.layerConfig;\n        if (changes & this.CHANGE_FULL ||\n            changes & this.CHANGE_SIZE ||\n            changes & this.CHANGE_TEXT ||\n            changes & this.CHANGE_LINES ||\n            changes & this.CHANGE_SCROLL ||\n            changes & this.CHANGE_H_SCROLL\n        ) {\n            changes |= this.$computeLayerConfig() | this.$loop.clear();\n            if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n                var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n                if (st > 0) {\n                    this.scrollTop = st;\n                    changes = changes | this.CHANGE_SCROLL;\n                    changes |= this.$computeLayerConfig() | this.$loop.clear();\n                }\n            }\n            config = this.layerConfig;\n            this.$updateScrollBarV();\n            if (changes & this.CHANGE_H_SCROLL)\n                this.$updateScrollBarH();\n            \n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            \n            var width = config.width + 2 * this.$padding + \"px\";\n            var height = config.minHeight + \"px\";\n            \n            dom.setStyle(this.content.style, \"width\", width);\n            dom.setStyle(this.content.style, \"height\", height);\n        }\n        if (changes & this.CHANGE_H_SCROLL) {\n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n        }\n        if (changes & this.CHANGE_FULL) {\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\");\n            return;\n        }\n        if (changes & this.CHANGE_SCROLL) {\n            if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n                this.$textLayer.update(config);\n            else\n                this.$textLayer.scrollLines(config);\n\n            if (this.$showGutter) {\n                if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n                    this.$gutterLayer.update(config);\n                else\n                    this.$gutterLayer.scrollLines(config);\n            }\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\");\n            return;\n        }\n\n        if (changes & this.CHANGE_TEXT) {\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_LINES) {\n            if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_CURSOR) {\n            if (this.$highlightGutterLine)\n                this.$gutterLayer.updateLineHighlight(config);\n        }\n\n        if (changes & this.CHANGE_CURSOR) {\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n        }\n\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n            this.$markerFront.update(config);\n        }\n\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n            this.$markerBack.update(config);\n        }\n\n        this._signal(\"afterRender\");\n    };\n\n    \n    this.$autosize = function() {\n        var height = this.session.getScreenLength() * this.lineHeight;\n        var maxHeight = this.$maxLines * this.lineHeight;\n        var desiredHeight = Math.min(maxHeight, \n            Math.max((this.$minLines || 1) * this.lineHeight, height)\n        ) + this.scrollMargin.v + (this.$extraHeight || 0);\n        if (this.$horizScroll)\n            desiredHeight += this.scrollBarH.getHeight();\n        if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n            desiredHeight = this.$maxPixelHeight;\n        \n        var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n        var vScroll = !hideScrollbars && height > maxHeight;\n        \n        if (desiredHeight != this.desiredHeight ||\n            this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n            if (vScroll != this.$vScroll) {\n                this.$vScroll = vScroll;\n                this.scrollBarV.setVisible(vScroll);\n            }\n            \n            var w = this.container.clientWidth;\n            this.container.style.height = desiredHeight + \"px\";\n            this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n            this.desiredHeight = desiredHeight;\n            \n            this._signal(\"autosize\");\n        }\n    };\n    \n    this.$computeLayerConfig = function() {\n        var session = this.session;\n        var size = this.$size;\n        \n        var hideScrollbars = size.height <= 2 * this.lineHeight;\n        var screenLines = this.session.getScreenLength();\n        var maxHeight = screenLines * this.lineHeight;\n\n        var longestLine = this.$getLongestLine();\n        \n        var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n            size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n        var hScrollChanged = this.$horizScroll !== horizScroll;\n        if (hScrollChanged) {\n            this.$horizScroll = horizScroll;\n            this.scrollBarH.setVisible(horizScroll);\n        }\n        var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n        if (this.$maxLines && this.lineHeight > 1)\n            this.$autosize();\n\n        var minHeight = size.scrollerHeight + this.lineHeight;\n        \n        var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n            ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n            : 0;\n        maxHeight += scrollPastEnd;\n        \n        var sm = this.scrollMargin;\n        this.session.setScrollTop(Math.max(-sm.top,\n            Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n        this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n            longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n        \n        var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n            size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n        var vScrollChanged = vScrollBefore !== vScroll;\n        if (vScrollChanged) {\n            this.$vScroll = vScroll;\n            this.scrollBarV.setVisible(vScroll);\n        }\n\n        var offset = this.scrollTop % this.lineHeight;\n        var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n        var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n        var lastRow = firstRow + lineCount;\n        var firstRowScreen, firstRowHeight;\n        var lineHeight = this.lineHeight;\n        firstRow = session.screenToDocumentRow(firstRow, 0);\n        var foldLine = session.getFoldLine(firstRow);\n        if (foldLine) {\n            firstRow = foldLine.start.row;\n        }\n\n        firstRowScreen = session.documentToScreenRow(firstRow, 0);\n        firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n        lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n        minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n                                                firstRowHeight;\n\n        offset = this.scrollTop - firstRowScreen * lineHeight;\n\n        var changes = 0;\n        if (this.layerConfig.width != longestLine || hScrollChanged) \n            changes = this.CHANGE_H_SCROLL;\n        if (hScrollChanged || vScrollChanged) {\n            changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n            this._signal(\"scrollbarVisibilityChanged\");\n            if (vScrollChanged)\n                longestLine = this.$getLongestLine();\n        }\n        \n        this.layerConfig = {\n            width : longestLine,\n            padding : this.$padding,\n            firstRow : firstRow,\n            firstRowScreen: firstRowScreen,\n            lastRow : lastRow,\n            lineHeight : lineHeight,\n            characterWidth : this.characterWidth,\n            minHeight : minHeight,\n            maxHeight : maxHeight,\n            offset : offset,\n            gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n            height : this.$size.scrollerHeight\n        };\n\n        if (this.session.$bidiHandler)\n            this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n\n        return changes;\n    };\n\n    this.$updateLines = function() {\n        if (!this.$changedLines) return;\n        var firstRow = this.$changedLines.firstRow;\n        var lastRow = this.$changedLines.lastRow;\n        this.$changedLines = null;\n\n        var layerConfig = this.layerConfig;\n\n        if (firstRow > layerConfig.lastRow + 1) { return; }\n        if (lastRow < layerConfig.firstRow) { return; }\n        if (lastRow === Infinity) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(layerConfig);\n            this.$textLayer.update(layerConfig);\n            return;\n        }\n        this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n        return true;\n    };\n\n    this.$getLongestLine = function() {\n        var charCount = this.session.getScreenWidth();\n        if (this.showInvisibles && !this.session.$useWrapMode)\n            charCount += 1;\n            \n        if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n            charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n\n        return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n    };\n    this.updateFrontMarkers = function() {\n        this.$markerFront.setMarkers(this.session.getMarkers(true));\n        this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n    };\n    this.updateBackMarkers = function() {\n        this.$markerBack.setMarkers(this.session.getMarkers());\n        this.$loop.schedule(this.CHANGE_MARKER_BACK);\n    };\n    this.addGutterDecoration = function(row, className){\n        this.$gutterLayer.addGutterDecoration(row, className);\n    };\n    this.removeGutterDecoration = function(row, className){\n        this.$gutterLayer.removeGutterDecoration(row, className);\n    };\n    this.updateBreakpoints = function(rows) {\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    this.setAnnotations = function(annotations) {\n        this.$gutterLayer.setAnnotations(annotations);\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    this.updateCursor = function() {\n        this.$loop.schedule(this.CHANGE_CURSOR);\n    };\n    this.hideCursor = function() {\n        this.$cursorLayer.hideCursor();\n    };\n    this.showCursor = function() {\n        this.$cursorLayer.showCursor();\n    };\n\n    this.scrollSelectionIntoView = function(anchor, lead, offset) {\n        this.scrollCursorIntoView(anchor, offset);\n        this.scrollCursorIntoView(lead, offset);\n    };\n    this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n        if (this.$size.scrollerHeight === 0)\n            return;\n\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n        var left = pos.left;\n        var top = pos.top;\n        \n        var topMargin = $viewMargin && $viewMargin.top || 0;\n        var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n        \n        var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n        \n        if (scrollTop + topMargin > top) {\n            if (offset && scrollTop + topMargin > top + this.lineHeight)\n                top -= offset * this.$size.scrollerHeight;\n            if (top === 0)\n                top = -this.scrollMargin.top;\n            this.session.setScrollTop(top);\n        } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n            if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top -  this.lineHeight)\n                top += offset * this.$size.scrollerHeight;\n            this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n        }\n\n        var scrollLeft = this.scrollLeft;\n\n        if (scrollLeft > left) {\n            if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n                left = -this.scrollMargin.left;\n            this.session.setScrollLeft(left);\n        } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n            this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n        } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n            this.session.setScrollLeft(0);\n        }\n    };\n    this.getScrollTop = function() {\n        return this.session.getScrollTop();\n    };\n    this.getScrollLeft = function() {\n        return this.session.getScrollLeft();\n    };\n    this.getScrollTopRow = function() {\n        return this.scrollTop / this.lineHeight;\n    };\n    this.getScrollBottomRow = function() {\n        return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n    };\n    this.scrollToRow = function(row) {\n        this.session.setScrollTop(row * this.lineHeight);\n    };\n\n    this.alignCursor = function(cursor, alignment) {\n        if (typeof cursor == \"number\")\n            cursor = {row: cursor, column: 0};\n\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var h = this.$size.scrollerHeight - this.lineHeight;\n        var offset = pos.top - h * (alignment || 0);\n\n        this.session.setScrollTop(offset);\n        return offset;\n    };\n\n    this.STEPS = 8;\n    this.$calcSteps = function(fromValue, toValue){\n        var i = 0;\n        var l = this.STEPS;\n        var steps = [];\n\n        var func  = function(t, x_min, dx) {\n            return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n        };\n\n        for (i = 0; i < l; ++i)\n            steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n        return steps;\n    };\n    this.scrollToLine = function(line, center, animate, callback) {\n        var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n        var offset = pos.top;\n        if (center)\n            offset -= this.$size.scrollerHeight / 2;\n\n        var initialScroll = this.scrollTop;\n        this.session.setScrollTop(offset);\n        if (animate !== false)\n            this.animateScrolling(initialScroll, callback);\n    };\n\n    this.animateScrolling = function(fromValue, callback) {\n        var toValue = this.scrollTop;\n        if (!this.$animatedScroll)\n            return;\n        var _self = this;\n        \n        if (fromValue == toValue)\n            return;\n        \n        if (this.$scrollAnimation) {\n            var oldSteps = this.$scrollAnimation.steps;\n            if (oldSteps.length) {\n                fromValue = oldSteps[0];\n                if (fromValue == toValue)\n                    return;\n            }\n        }\n        \n        var steps = _self.$calcSteps(fromValue, toValue);\n        this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n        clearInterval(this.$timer);\n\n        _self.session.setScrollTop(steps.shift());\n        _self.session.$scrollTop = toValue;\n        this.$timer = setInterval(function() {\n            if (steps.length) {\n                _self.session.setScrollTop(steps.shift());\n                _self.session.$scrollTop = toValue;\n            } else if (toValue != null) {\n                _self.session.$scrollTop = -1;\n                _self.session.setScrollTop(toValue);\n                toValue = null;\n            } else {\n                _self.$timer = clearInterval(_self.$timer);\n                _self.$scrollAnimation = null;\n                callback && callback();\n            }\n        }, 10);\n    };\n    this.scrollToY = function(scrollTop) {\n        if (this.scrollTop !== scrollTop) {\n            this.$loop.schedule(this.CHANGE_SCROLL);\n            this.scrollTop = scrollTop;\n        }\n    };\n    this.scrollToX = function(scrollLeft) {\n        if (this.scrollLeft !== scrollLeft)\n            this.scrollLeft = scrollLeft;\n        this.$loop.schedule(this.CHANGE_H_SCROLL);\n    };\n    this.scrollTo = function(x, y) {\n        this.session.setScrollTop(y);\n        this.session.setScrollLeft(y);\n    };\n    this.scrollBy = function(deltaX, deltaY) {\n        deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n        deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n    };\n    this.isScrollableBy = function(deltaX, deltaY) {\n        if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n           return true;\n        if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n            - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n           return true;\n        if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n            return true;\n        if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n            - this.layerConfig.width < -1 + this.scrollMargin.right)\n           return true;\n    };\n\n    this.pixelToScreenCoordinates = function(x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = {top:0, left: 0};\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        } else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n        \n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n        return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX:  offsetX};\n    };\n\n    this.screenToTextCoordinates = function(x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = {top:0, left: 0};\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        } else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n\n        return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n    };\n    this.textToScreenCoordinates = function(row, column) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n        var pos = this.session.documentToScreenPosition(row, column);\n\n        var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n             ? this.session.$bidiHandler.getPosLeft(pos.column)\n             : Math.round(pos.column * this.characterWidth));\n        \n        var y = pos.row * this.lineHeight;\n\n        return {\n            pageX: canvasPos.left + x - this.scrollLeft,\n            pageY: canvasPos.top + y - this.scrollTop\n        };\n    };\n    this.visualizeFocus = function() {\n        dom.addCssClass(this.container, \"ace_focus\");\n    };\n    this.visualizeBlur = function() {\n        dom.removeCssClass(this.container, \"ace_focus\");\n    };\n    this.showComposition = function(composition) {\n        this.$composition = composition;\n        if (!composition.cssText) {\n            composition.cssText = this.textarea.style.cssText;\n            composition.keepTextAreaAtCursor = this.$keepTextAreaAtCursor;\n        }\n        composition.useTextareaForIME = this.$useTextareaForIME;\n        \n        if (this.$useTextareaForIME) {\n            this.$keepTextAreaAtCursor = true;\n            dom.addCssClass(this.textarea, \"ace_composition\");\n            this.textarea.style.cssText = \"\";\n            this.$moveTextAreaToCursor();\n            this.$cursorLayer.element.style.display = \"none\";\n        }\n        else {            \n            composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n        }\n    };\n    this.setCompositionText = function(text) {\n        var cursor = this.session.selection.cursor;\n        this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n        this.$moveTextAreaToCursor();\n    };\n    this.hideComposition = function() {\n        if (!this.$composition)\n            return;\n        \n        if (this.$composition.markerId)\n            this.session.removeMarker(this.$composition.markerId);\n\n        dom.removeCssClass(this.textarea, \"ace_composition\");\n        this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\n        this.textarea.style.cssText = this.$composition.cssText;\n        this.$composition = null;\n        this.$cursorLayer.element.style.display = \"\";\n    };\n    \n    this.addToken = function(text, type, row, column) {\n        var session = this.session;\n        session.bgTokenizer.lines[row] = null;\n        var newToken = {type: type, value: text};\n        var tokens = session.getTokens(row);\n        if (column == null) {\n            tokens.push(newToken);\n        } else {\n            var l = 0;\n            for (var i =0; i < tokens.length; i++) {\n                var token = tokens[i];\n                l += token.value.length;\n                if (column <= l) {\n                    var diff = token.value.length - (l - column);\n                    var before = token.value.slice(0, diff);\n                    var after = token.value.slice(diff);\n    \n                    tokens.splice(i, 1, {type: token.type, value: before},  newToken,  {type: token.type, value: after});\n                    break;\n                }\n            }\n        }\n        this.updateLines(row, row);\n    };\n    this.setTheme = function(theme, cb) {\n        var _self = this;\n        this.$themeId = theme;\n        _self._dispatchEvent('themeChange',{theme:theme});\n\n        if (!theme || typeof theme == \"string\") {\n            var moduleName = theme || this.$options.theme.initialValue;\n            config.loadModule([\"theme\", moduleName], afterLoad);\n        } else {\n            afterLoad(theme);\n        }\n\n        function afterLoad(module) {\n            if (_self.$themeId != theme)\n                return cb && cb();\n            if (!module || !module.cssClass)\n                throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n            if (module.$id)\n                _self.$themeId = module.$id;\n            dom.importCssString(\n                module.cssText,\n                module.cssClass,\n                _self.container\n            );\n\n            if (_self.theme)\n                dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n            var padding = \"padding\" in module ? module.padding \n                : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n            if (_self.$padding && padding != _self.$padding)\n                _self.setPadding(padding);\n            _self.$theme = module.cssClass;\n\n            _self.theme = module;\n            dom.addCssClass(_self.container, module.cssClass);\n            dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n            if (_self.$size) {\n                _self.$size.width = 0;\n                _self.$updateSizeAsync();\n            }\n\n            _self._dispatchEvent('themeLoaded', {theme:module});\n            cb && cb();\n        }\n    };\n    this.getTheme = function() {\n        return this.$themeId;\n    };\n    this.setStyle = function(style, include) {\n        dom.setCssClass(this.container, style, include !== false);\n    };\n    this.unsetStyle = function(style) {\n        dom.removeCssClass(this.container, style);\n    };\n    \n    this.setCursorStyle = function(style) {\n        dom.setStyle(this.scroller.style, \"cursor\", style);\n    };\n    this.setMouseCursor = function(cursorStyle) {\n        dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n    };\n    \n    this.attachToShadowRoot = function() {\n        dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n    };\n    this.destroy = function() {\n        this.$fontMetrics.destroy();\n        this.$cursorLayer.destroy();\n    };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n    animatedScroll: {initialValue: false},\n    showInvisibles: {\n        set: function(value) {\n            if (this.$textLayer.setShowInvisibles(value))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: false\n    },\n    showPrintMargin: {\n        set: function() { this.$updatePrintMargin(); },\n        initialValue: true\n    },\n    printMarginColumn: {\n        set: function() { this.$updatePrintMargin(); },\n        initialValue: 80\n    },\n    printMargin: {\n        set: function(val) {\n            if (typeof val == \"number\")\n                this.$printMarginColumn = val;\n            this.$showPrintMargin = !!val;\n            this.$updatePrintMargin();\n        },\n        get: function() {\n            return this.$showPrintMargin && this.$printMarginColumn; \n        }\n    },\n    showGutter: {\n        set: function(show){\n            this.$gutter.style.display = show ? \"block\" : \"none\";\n            this.$loop.schedule(this.CHANGE_FULL);\n            this.onGutterResize();\n        },\n        initialValue: true\n    },\n    fadeFoldWidgets: {\n        set: function(show) {\n            dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n        },\n        initialValue: false\n    },\n    showFoldWidgets: {\n        set: function(show) {\n            this.$gutterLayer.setShowFoldWidgets(show);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    displayIndentGuides: {\n        set: function(show) {\n            if (this.$textLayer.setDisplayIndentGuides(show))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: true\n    },\n    highlightGutterLine: {\n        set: function(shouldHighlight) {\n            this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    hScrollBarAlwaysVisible: {\n        set: function(val) {\n            if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    vScrollBarAlwaysVisible: {\n        set: function(val) {\n            if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    fontSize: {\n        set: function(size) {\n            if (typeof size == \"number\")\n                size = size + \"px\";\n            this.container.style.fontSize = size;\n            this.updateFontSize();\n        },\n        initialValue: 12\n    },\n    fontFamily: {\n        set: function(name) {\n            this.container.style.fontFamily = name;\n            this.updateFontSize();\n        }\n    },\n    maxLines: {\n        set: function(val) {\n            this.updateFull();\n        }\n    },\n    minLines: {\n        set: function(val) {\n            if (!(this.$minLines < 0x1ffffffffffff))\n                this.$minLines = 0;\n            this.updateFull();\n        }\n    },\n    maxPixelHeight: {\n        set: function(val) {\n            this.updateFull();\n        },\n        initialValue: 0\n    },\n    scrollPastEnd: {\n        set: function(val) {\n            val = +val || 0;\n            if (this.$scrollPastEnd == val)\n                return;\n            this.$scrollPastEnd = val;\n            this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: 0,\n        handlesSet: true\n    },\n    fixedWidthGutter: {\n        set: function(val) {\n            this.$gutterLayer.$fixedWidth = !!val;\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        }\n    },\n    theme: {\n        set: function(val) { this.setTheme(val); },\n        get: function() { return this.$themeId || this.theme; },\n        initialValue: \"./theme/textmate\",\n        handlesSet: true\n    },\n    hasCssTransforms: {\n    },\n    useTextareaForIME: {\n        initialValue: !useragent.isMobile && !useragent.isIE\n    }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n    var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n    try {\n        return new Blob([script], {\"type\": \"application/javascript\"});\n    } catch (e) { // Backwards-compatibility\n        var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n        var blobBuilder = new BlobBuilder();\n        blobBuilder.append(script);\n        return blobBuilder.getBlob(\"application/javascript\");\n    }\n}\n\nfunction createWorker(workerUrl) {\n    if (typeof Worker == \"undefined\")\n        return { postMessage: function() {}, terminate: function() {} };\n    if (config.get(\"loadWorkerFromBlob\")) {\n        var blob = $workerBlob(workerUrl);\n        var URL = window.URL || window.webkitURL;\n        var blobURL = URL.createObjectURL(blob);\n        return new Worker(blobURL);\n    }\n    return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n    if (!worker.postMessage)\n        worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n    this.$worker = worker;\n    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.onMessage = this.onMessage.bind(this);\n\n    this.callbackId = 1;\n    this.callbacks = {};\n\n    this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n        if (require.nameToUrl && !require.toUrl)\n            require.toUrl = require.nameToUrl;\n\n        if (config.get(\"packaged\") || !require.toUrl) {\n            workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n        } else {\n            var normalizePath = this.$normalizePath;\n            workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n            var tlns = {};\n            topLevelNamespaces.forEach(function(ns) {\n                tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n            });\n        }\n\n        this.$worker = createWorker(workerUrl);\n        if (importScripts) {\n            this.send(\"importScripts\", importScripts);\n        }\n        this.$worker.postMessage({\n            init : true,\n            tlns : tlns,\n            module : mod,\n            classname : classname\n        });\n        return this.$worker;\n    };\n\n    this.onMessage = function(e) {\n        var msg = e.data;\n        switch (msg.type) {\n            case \"event\":\n                this._signal(msg.name, {data: msg.data});\n                break;\n            case \"call\":\n                var callback = this.callbacks[msg.id];\n                if (callback) {\n                    callback(msg.data);\n                    delete this.callbacks[msg.id];\n                }\n                break;\n            case \"error\":\n                this.reportError(msg.data);\n                break;\n            case \"log\":\n                window.console && console.log && console.log.apply(console, msg.data);\n                break;\n        }\n    };\n    \n    this.reportError = function(err) {\n        window.console && console.error && console.error(err);\n    };\n\n    this.$normalizePath = function(path) {\n        return net.qualifyURL(path);\n    };\n\n    this.terminate = function() {\n        this._signal(\"terminate\", {});\n        this.deltaQueue = null;\n        this.$worker.terminate();\n        this.$worker = null;\n        if (this.$doc)\n            this.$doc.off(\"change\", this.changeListener);\n        this.$doc = null;\n    };\n\n    this.send = function(cmd, args) {\n        this.$worker.postMessage({command: cmd, args: args});\n    };\n\n    this.call = function(cmd, args, callback) {\n        if (callback) {\n            var id = this.callbackId++;\n            this.callbacks[id] = callback;\n            args.push(id);\n        }\n        this.send(cmd, args);\n    };\n\n    this.emit = function(event, data) {\n        try {\n            if (data.data && data.data.err)\n                data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n            this.$worker.postMessage({event: event, data: {data: data.data}});\n        }\n        catch(ex) {\n            console.error(ex.stack);\n        }\n    };\n\n    this.attachToDocument = function(doc) {\n        if (this.$doc)\n            this.terminate();\n\n        this.$doc = doc;\n        this.call(\"setValue\", [doc.getValue()]);\n        doc.on(\"change\", this.changeListener);\n    };\n\n    this.changeListener = function(delta) {\n        if (!this.deltaQueue) {\n            this.deltaQueue = [];\n            setTimeout(this.$sendDeltaQueue, 0);\n        }\n        if (delta.action == \"insert\")\n            this.deltaQueue.push(delta.start, delta.lines);\n        else\n            this.deltaQueue.push(delta.start, delta.end);\n    };\n\n    this.$sendDeltaQueue = function() {\n        var q = this.deltaQueue;\n        if (!q) return;\n        this.deltaQueue = null;\n        if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n            this.call(\"setValue\", [this.$doc.getValue()]);\n        } else\n            this.emit(\"change\", {data: q});\n    };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n    var main = null;\n    var emitSync = false;\n    var sender = Object.create(EventEmitter);\n\n    var messageBuffer = [];\n    var workerClient = new WorkerClient({\n        messageBuffer: messageBuffer,\n        terminate: function() {},\n        postMessage: function(e) {\n            messageBuffer.push(e);\n            if (!main) return;\n            if (emitSync)\n                setTimeout(processNext);\n            else\n                processNext();\n        }\n    });\n\n    workerClient.setEmitSync = function(val) { emitSync = val; };\n\n    var processNext = function() {\n        var msg = messageBuffer.shift();\n        if (msg.command)\n            main[msg.command].apply(main, msg.args);\n        else if (msg.event)\n            sender._signal(msg.event, msg.data);\n    };\n\n    sender.postMessage = function(msg) {\n        workerClient.onMessage({data: msg});\n    };\n    sender.callback = function(data, callbackId) {\n        this.postMessage({type: \"call\", id: callbackId, data: data});\n    };\n    sender.emit = function(name, data) {\n        this.postMessage({type: \"event\", name: name, data: data});\n    };\n\n    config.loadModule([\"worker\", mod], function(Main) {\n        main = new Main[classname](sender);\n        while (messageBuffer.length)\n            processNext();\n    });\n\n    return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n    var _self = this;\n    this.length = length;\n    this.session = session;\n    this.doc = session.getDocument();\n    this.mainClass = mainClass;\n    this.othersClass = othersClass;\n    this.$onUpdate = this.onUpdate.bind(this);\n    this.doc.on(\"change\", this.$onUpdate);\n    this.$others = others;\n    \n    this.$onCursorChange = function() {\n        setTimeout(function() {\n            _self.onCursorChange();\n        });\n    };\n    \n    this.$pos = pos;\n    var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n    this.$undoStackDepth = undoStack.length;\n    this.setup();\n\n    session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setup = function() {\n        var _self = this;\n        var doc = this.doc;\n        var session = this.session;\n        \n        this.selectionBefore = session.selection.toJSON();\n        if (session.selection.inMultiSelectMode)\n            session.selection.toSingleRange();\n\n        this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n        var pos = this.pos;\n        pos.$insertRight = true;\n        pos.detach();\n        pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n        this.others = [];\n        this.$others.forEach(function(other) {\n            var anchor = doc.createAnchor(other.row, other.column);\n            anchor.$insertRight = true;\n            anchor.detach();\n            _self.others.push(anchor);\n        });\n        session.setUndoSelect(false);\n    };\n    this.showOtherMarkers = function() {\n        if (this.othersActive) return;\n        var session = this.session;\n        var _self = this;\n        this.othersActive = true;\n        this.others.forEach(function(anchor) {\n            anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n        });\n    };\n    this.hideOtherMarkers = function() {\n        if (!this.othersActive) return;\n        this.othersActive = false;\n        for (var i = 0; i < this.others.length; i++) {\n            this.session.removeMarker(this.others[i].markerId);\n        }\n    };\n    this.onUpdate = function(delta) {\n        if (this.$updating)\n            return this.updateAnchors(delta);\n            \n        var range = delta;\n        if (range.start.row !== range.end.row) return;\n        if (range.start.row !== this.pos.row) return;\n        this.$updating = true;\n        var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n        var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n        var distanceFromStart = range.start.column - this.pos.column;\n        \n        this.updateAnchors(delta);\n        \n        if (inMainRange)\n            this.length += lengthDiff;\n\n        if (inMainRange && !this.session.$fromUndo) {\n            if (delta.action === 'insert') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n                    this.doc.insertMergedLines(newPos, delta.lines);\n                }\n            } else if (delta.action === 'remove') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n                    this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n                }\n            }\n        }\n        \n        this.$updating = false;\n        this.updateMarkers();\n    };\n    \n    this.updateAnchors = function(delta) {\n        this.pos.onChange(delta);\n        for (var i = this.others.length; i--;)\n            this.others[i].onChange(delta);\n        this.updateMarkers();\n    };\n    \n    this.updateMarkers = function() {\n        if (this.$updating)\n            return;\n        var _self = this;\n        var session = this.session;\n        var updateMarker = function(pos, className) {\n            session.removeMarker(pos.markerId);\n            pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n        };\n        updateMarker(this.pos, this.mainClass);\n        for (var i = this.others.length; i--;)\n            updateMarker(this.others[i], this.othersClass);\n    };\n\n    this.onCursorChange = function(event) {\n        if (this.$updating || !this.session) return;\n        var pos = this.session.selection.getCursor();\n        if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n            this.showOtherMarkers();\n            this._emit(\"cursorEnter\", event);\n        } else {\n            this.hideOtherMarkers();\n            this._emit(\"cursorLeave\", event);\n        }\n    };    \n    this.detach = function() {\n        this.session.removeMarker(this.pos && this.pos.markerId);\n        this.hideOtherMarkers();\n        this.doc.removeEventListener(\"change\", this.$onUpdate);\n        this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n        this.session.setUndoSelect(true);\n        this.session = null;\n    };\n    this.cancel = function() {\n        if (this.$undoStackDepth === -1)\n            return;\n        var undoManager = this.session.getUndoManager();\n        var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n        for (var i = 0; i < undosRequired; i++) {\n            undoManager.undo(this.session, true);\n        }\n        if (this.selectionBefore)\n            this.session.selection.fromJSON(this.selectionBefore);\n    };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n    var ev = e.domEvent;\n    var alt = ev.altKey;\n    var shift = ev.shiftKey;\n    var ctrl = ev.ctrlKey;\n    var accel = e.getAccelKey();\n    var button = e.getButton();\n    \n    if (ctrl && useragent.isMac)\n        button = ev.button;\n\n    if (e.editor.inMultiSelectMode && button == 2) {\n        e.editor.textInput.onContextMenu(e.domEvent);\n        return;\n    }\n    \n    if (!ctrl && !alt && !accel) {\n        if (button === 0 && e.editor.inMultiSelectMode)\n            e.editor.exitMultiSelectMode();\n        return;\n    }\n    \n    if (button !== 0)\n        return;\n\n    var editor = e.editor;\n    var selection = editor.selection;\n    var isMultiSelect = editor.inMultiSelectMode;\n    var pos = e.getDocumentPosition();\n    var cursor = selection.getCursor();\n    var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n    var mouseX = e.x, mouseY = e.y;\n    var onMouseSelection = function(e) {\n        mouseX = e.clientX;\n        mouseY = e.clientY;\n    };\n    \n    var session = editor.session;\n    var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n    var screenCursor = screenAnchor;\n    \n    var selectionMode;\n    if (editor.$mouseHandler.$enableJumpToDef) {\n        if (ctrl && alt || accel && alt)\n            selectionMode = shift ? \"block\" : \"add\";\n        else if (alt && editor.$blockSelectEnabled)\n            selectionMode = \"block\";\n    } else {\n        if (accel && !alt) {\n            selectionMode = \"add\";\n            if (!isMultiSelect && shift)\n                return;\n        } else if (alt && editor.$blockSelectEnabled) {\n            selectionMode = \"block\";\n        }\n    }\n    \n    if (selectionMode && useragent.isMac && ev.ctrlKey) {\n        editor.$mouseHandler.cancelContextMenu();\n    }\n\n    if (selectionMode == \"add\") {\n        if (!isMultiSelect && inSelection)\n            return; // dragging\n\n        if (!isMultiSelect) {\n            var range = selection.toOrientedRange();\n            editor.addSelectionMarker(range);\n        }\n\n        var oldRange = selection.rangeList.rangeAtPoint(pos);\n        \n        editor.inVirtualSelectionMode = true;\n        \n        if (shift) {\n            oldRange = null;\n            range = selection.ranges[0] || range;\n            editor.removeSelectionMarker(range);\n        }\n        editor.once(\"mouseup\", function() {\n            var tmpSel = selection.toOrientedRange();\n\n            if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n                selection.substractPoint(tmpSel.cursor);\n            else {\n                if (shift) {\n                    selection.substractPoint(range.cursor);\n                } else if (range) {\n                    editor.removeSelectionMarker(range);\n                    selection.addRange(range);\n                }\n                selection.addRange(tmpSel);\n            }\n            editor.inVirtualSelectionMode = false;\n        });\n\n    } else if (selectionMode == \"block\") {\n        e.stop();\n        editor.inVirtualSelectionMode = true;        \n        var initialRange;\n        var rectSel = [];\n        var blockSelect = function() {\n            var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n            var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n            if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n                return;\n            screenCursor = newCursor;\n            \n            editor.selection.moveToPosition(cursor);\n            editor.renderer.scrollCursorIntoView();\n\n            editor.removeSelectionMarkers(rectSel);\n            rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n            if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n                rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n            rectSel.forEach(editor.addSelectionMarker, editor);\n            editor.updateSelectionMarkers();\n        };\n        if (isMultiSelect && !accel) {\n            selection.toSingleRange();\n        } else if (!isMultiSelect && accel) {\n            initialRange = selection.toOrientedRange();\n            editor.addSelectionMarker(initialRange);\n        }\n        \n        if (shift)\n            screenAnchor = session.documentToScreenPosition(selection.lead);            \n        else\n            selection.moveToPosition(pos);\n        \n        screenCursor = {row: -1, column: -1};\n\n        var onMouseSelectionEnd = function(e) {\n            blockSelect();\n            clearInterval(timerId);\n            editor.removeSelectionMarkers(rectSel);\n            if (!rectSel.length)\n                rectSel = [selection.toOrientedRange()];\n            if (initialRange) {\n                editor.removeSelectionMarker(initialRange);\n                selection.toSingleRange(initialRange);\n            }\n            for (var i = 0; i < rectSel.length; i++)\n                selection.addRange(rectSel[i]);\n            editor.inVirtualSelectionMode = false;\n            editor.$mouseHandler.$clickSelection = null;\n        };\n\n        var onSelectionInterval = blockSelect;\n\n        event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n        var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n        return e.preventDefault();\n    }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module) {\nexports.defaultCommands = [{\n    name: \"addCursorAbove\",\n    exec: function(editor) { editor.selectMoreLines(-1); },\n    bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorBelow\",\n    exec: function(editor) { editor.selectMoreLines(1); },\n    bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorAboveSkipCurrent\",\n    exec: function(editor) { editor.selectMoreLines(-1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorBelowSkipCurrent\",\n    exec: function(editor) { editor.selectMoreLines(1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectMoreBefore\",\n    exec: function(editor) { editor.selectMore(-1); },\n    bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectMoreAfter\",\n    exec: function(editor) { editor.selectMore(1); },\n    bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectNextBefore\",\n    exec: function(editor) { editor.selectMore(-1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectNextAfter\",\n    exec: function(editor) { editor.selectMore(1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"splitIntoLines\",\n    exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n    bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n    readOnly: true\n}, {\n    name: \"alignCursors\",\n    exec: function(editor) { editor.alignCursors(); },\n    bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"findAll\",\n    exec: function(editor) { editor.findAll(); },\n    bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}];\nexports.multiSelectCommands = [{\n    name: \"singleSelection\",\n    bindKey: \"esc\",\n    exec: function(editor) { editor.exitMultiSelectMode(); },\n    scrollIntoView: \"cursor\",\n    readOnly: true,\n    isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n    search.$options.wrap = true;\n    search.$options.needle = needle;\n    search.$options.backwards = dir == -1;\n    return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function() {\n    this.getSelectionMarkers = function() {\n        return this.$selectionMarkers;\n    };\n}).call(EditSession.prototype);\n(function() {\n    this.ranges = null;\n    this.rangeList = null;\n    this.addRange = function(range, $blockChangeEvents) {\n        if (!range)\n            return;\n\n        if (!this.inMultiSelectMode && this.rangeCount === 0) {\n            var oldRange = this.toOrientedRange();\n            this.rangeList.add(oldRange);\n            this.rangeList.add(range);\n            if (this.rangeList.ranges.length != 2) {\n                this.rangeList.removeAll();\n                return $blockChangeEvents || this.fromOrientedRange(range);\n            }\n            this.rangeList.removeAll();\n            this.rangeList.add(oldRange);\n            this.$onAddRange(oldRange);\n        }\n\n        if (!range.cursor)\n            range.cursor = range.end;\n\n        var removed = this.rangeList.add(range);\n\n        this.$onAddRange(range);\n\n        if (removed.length)\n            this.$onRemoveRange(removed);\n\n        if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n            this._signal(\"multiSelect\");\n            this.inMultiSelectMode = true;\n            this.session.$undoSelect = false;\n            this.rangeList.attach(this.session);\n        }\n\n        return $blockChangeEvents || this.fromOrientedRange(range);\n    };\n\n    this.toSingleRange = function(range) {\n        range = range || this.ranges[0];\n        var removed = this.rangeList.removeAll();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n\n        range && this.fromOrientedRange(range);\n    };\n    this.substractPoint = function(pos) {\n        var removed = this.rangeList.substractPoint(pos);\n        if (removed) {\n            this.$onRemoveRange(removed);\n            return removed[0];\n        }\n    };\n    this.mergeOverlappingRanges = function() {\n        var removed = this.rangeList.merge();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n    };\n\n    this.$onAddRange = function(range) {\n        this.rangeCount = this.rangeList.ranges.length;\n        this.ranges.unshift(range);\n        this._signal(\"addRange\", {range: range});\n    };\n\n    this.$onRemoveRange = function(removed) {\n        this.rangeCount = this.rangeList.ranges.length;\n        if (this.rangeCount == 1 && this.inMultiSelectMode) {\n            var lastRange = this.rangeList.ranges.pop();\n            removed.push(lastRange);\n            this.rangeCount = 0;\n        }\n\n        for (var i = removed.length; i--; ) {\n            var index = this.ranges.indexOf(removed[i]);\n            this.ranges.splice(index, 1);\n        }\n\n        this._signal(\"removeRange\", {ranges: removed});\n\n        if (this.rangeCount === 0 && this.inMultiSelectMode) {\n            this.inMultiSelectMode = false;\n            this._signal(\"singleSelect\");\n            this.session.$undoSelect = true;\n            this.rangeList.detach(this.session);\n        }\n\n        lastRange = lastRange || this.ranges[0];\n        if (lastRange && !lastRange.isEqual(this.getRange()))\n            this.fromOrientedRange(lastRange);\n    };\n    this.$initRangeList = function() {\n        if (this.rangeList)\n            return;\n\n        this.rangeList = new RangeList();\n        this.ranges = [];\n        this.rangeCount = 0;\n    };\n    this.getAllRanges = function() {\n        return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n    };\n\n    this.splitIntoLines = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        } else {\n            var range = this.getRange();\n            var isBackwards = this.isBackwards();\n            var startRow = range.start.row;\n            var endRow = range.end.row;\n            if (startRow == endRow) {\n                if (isBackwards)\n                    var start = range.end, end = range.start;\n                else\n                    var start = range.start, end = range.end;\n                \n                this.addRange(Range.fromPoints(end, end));\n                this.addRange(Range.fromPoints(start, start));\n                return;\n            }\n\n            var rectSel = [];\n            var r = this.getLineRange(startRow, true);\n            r.start.column = range.start.column;\n            rectSel.push(r);\n\n            for (var i = startRow + 1; i < endRow; i++)\n                rectSel.push(this.getLineRange(i, true));\n\n            r = this.getLineRange(endRow, true);\n            r.end.column = range.end.column;\n            rectSel.push(r);\n\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n    this.toggleBlockSelection = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        } else {\n            var cursor = this.session.documentToScreenPosition(this.cursor);\n            var anchor = this.session.documentToScreenPosition(this.anchor);\n\n            var rectSel = this.rectangularRangeBlock(cursor, anchor);\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n    this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n        var rectSel = [];\n\n        var xBackwards = screenCursor.column < screenAnchor.column;\n        if (xBackwards) {\n            var startColumn = screenCursor.column;\n            var endColumn = screenAnchor.column;\n            var startOffsetX = screenCursor.offsetX;\n            var endOffsetX = screenAnchor.offsetX;\n        } else {\n            var startColumn = screenAnchor.column;\n            var endColumn = screenCursor.column;\n            var startOffsetX = screenAnchor.offsetX;\n            var endOffsetX = screenCursor.offsetX;\n        }\n\n        var yBackwards = screenCursor.row < screenAnchor.row;\n        if (yBackwards) {\n            var startRow = screenCursor.row;\n            var endRow = screenAnchor.row;\n        } else {\n            var startRow = screenAnchor.row;\n            var endRow = screenCursor.row;\n        }\n\n        if (startColumn < 0)\n            startColumn = 0;\n        if (startRow < 0)\n            startRow = 0;\n\n        if (startRow == endRow)\n            includeEmptyLines = true;\n\n        var docEnd;\n        for (var row = startRow; row <= endRow; row++) {\n            var range = Range.fromPoints(\n                this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n                this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n            );\n            if (range.isEmpty()) {\n                if (docEnd && isSamePoint(range.end, docEnd))\n                    break;\n                docEnd = range.end;\n            }\n            range.cursor = xBackwards ? range.start : range.end;\n            rectSel.push(range);\n        }\n\n        if (yBackwards)\n            rectSel.reverse();\n\n        if (!includeEmptyLines) {\n            var end = rectSel.length - 1;\n            while (rectSel[end].isEmpty() && end > 0)\n                end--;\n            if (end > 0) {\n                var start = 0;\n                while (rectSel[start].isEmpty())\n                    start++;\n            }\n            for (var i = end; i >= start; i--) {\n                if (rectSel[i].isEmpty())\n                    rectSel.splice(i, 1);\n            }\n        }\n\n        return rectSel;\n    };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.updateSelectionMarkers = function() {\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.addSelectionMarker = function(orientedRange) {\n        if (!orientedRange.cursor)\n            orientedRange.cursor = orientedRange.end;\n\n        var style = this.getSelectionStyle();\n        orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n        this.session.$selectionMarkers.push(orientedRange);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n        return orientedRange;\n    };\n    this.removeSelectionMarker = function(range) {\n        if (!range.marker)\n            return;\n        this.session.removeMarker(range.marker);\n        var index = this.session.$selectionMarkers.indexOf(range);\n        if (index != -1)\n            this.session.$selectionMarkers.splice(index, 1);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n    };\n\n    this.removeSelectionMarkers = function(ranges) {\n        var markerList = this.session.$selectionMarkers;\n        for (var i = ranges.length; i--; ) {\n            var range = ranges[i];\n            if (!range.marker)\n                continue;\n            this.session.removeMarker(range.marker);\n            var index = markerList.indexOf(range);\n            if (index != -1)\n                markerList.splice(index, 1);\n        }\n        this.session.selectionMarkerCount = markerList.length;\n    };\n\n    this.$onAddRange = function(e) {\n        this.addSelectionMarker(e.range);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onRemoveRange = function(e) {\n        this.removeSelectionMarkers(e.ranges);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onMultiSelect = function(e) {\n        if (this.inMultiSelectMode)\n            return;\n        this.inMultiSelectMode = true;\n\n        this.setStyle(\"ace_multiselect\");\n        this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n        this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onSingleSelect = function(e) {\n        if (this.session.multiSelect.inVirtualMode)\n            return;\n        this.inMultiSelectMode = false;\n\n        this.unsetStyle(\"ace_multiselect\");\n        this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n        this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n        this._emit(\"changeSelection\");\n    };\n\n    this.$onMultiSelectExec = function(e) {\n        var command = e.command;\n        var editor = e.editor;\n        if (!editor.multiSelect)\n            return;\n        if (!command.multiSelectAction) {\n            var result = command.exec(editor, e.args || {});\n            editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n            editor.multiSelect.mergeOverlappingRanges();\n        } else if (command.multiSelectAction == \"forEach\") {\n            result = editor.forEachSelection(command, e.args);\n        } else if (command.multiSelectAction == \"forEachLine\") {\n            result = editor.forEachSelection(command, e.args, true);\n        } else if (command.multiSelectAction == \"single\") {\n            editor.exitMultiSelectMode();\n            result = command.exec(editor, e.args || {});\n        } else {\n            result = command.multiSelectAction(editor, e.args || {});\n        }\n        return result;\n    }; \n    this.forEachSelection = function(cmd, args, options) {\n        if (this.inVirtualSelectionMode)\n            return;\n        var keepOrder = options && options.keepOrder;\n        var $byLines = options == true || options && options.$byLines;\n        var session = this.session;\n        var selection = this.selection;\n        var rangeList = selection.rangeList;\n        var ranges = (keepOrder ? selection : rangeList).ranges;\n        var result;\n        \n        if (!ranges.length)\n            return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n        \n        var reg = selection._eventRegistry;\n        selection._eventRegistry = {};\n\n        var tmpSel = new Selection(session);\n        this.inVirtualSelectionMode = true;\n        for (var i = ranges.length; i--;) {\n            if ($byLines) {\n                while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n                    i--;\n            }\n            tmpSel.fromOrientedRange(ranges[i]);\n            tmpSel.index = i;\n            this.selection = session.selection = tmpSel;\n            var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n            if (!result && cmdResult !== undefined)\n                result = cmdResult;\n            tmpSel.toOrientedRange(ranges[i]);\n        }\n        tmpSel.detach();\n\n        this.selection = session.selection = selection;\n        this.inVirtualSelectionMode = false;\n        selection._eventRegistry = reg;\n        selection.mergeOverlappingRanges();\n        if (selection.ranges[0])\n            selection.fromOrientedRange(selection.ranges[0]);\n        \n        var anim = this.renderer.$scrollAnimation;\n        this.onCursorChange();\n        this.onSelectionChange();\n        if (anim && anim.from == anim.to)\n            this.renderer.animateScrolling(anim.from);\n        \n        return result;\n    };\n    this.exitMultiSelectMode = function() {\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n            return;\n        this.multiSelect.toSingleRange();\n    };\n\n    this.getSelectedText = function() {\n        var text = \"\";\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var ranges = this.multiSelect.rangeList.ranges;\n            var buf = [];\n            for (var i = 0; i < ranges.length; i++) {\n                buf.push(this.session.getTextRange(ranges[i]));\n            }\n            var nl = this.session.getDocument().getNewLineCharacter();\n            text = buf.join(nl);\n            if (text.length == (buf.length - 1) * nl.length)\n                text = \"\";\n        } else if (!this.selection.isEmpty()) {\n            text = this.session.getTextRange(this.getSelectionRange());\n        }\n        return text;\n    };\n    \n    this.$checkMultiselectChange = function(e, anchor) {\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var range = this.multiSelect.ranges[0];\n            if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n                return;\n            var pos = anchor == this.multiSelect.anchor\n                ? range.cursor == range.start ? range.end : range.start\n                : range.cursor;\n            if (pos.row != anchor.row \n                || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n                this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n            else\n                this.multiSelect.mergeOverlappingRanges();\n        }\n    };\n    this.findAll = function(needle, options, additive) {\n        options = options || {};\n        options.needle = needle || options.needle;\n        if (options.needle == undefined) {\n            var range = this.selection.isEmpty()\n                ? this.selection.getWordRange()\n                : this.selection.getRange();\n            options.needle = this.session.getTextRange(range);\n        }    \n        this.$search.set(options);\n        \n        var ranges = this.$search.findAll(this.session);\n        if (!ranges.length)\n            return 0;\n\n        var selection = this.multiSelect;\n\n        if (!additive)\n            selection.toSingleRange(ranges[0]);\n\n        for (var i = ranges.length; i--; )\n            selection.addRange(ranges[i], true);\n        if (range && selection.rangeList.rangeAtPoint(range.start))\n            selection.addRange(range, true);\n        \n        return ranges.length;\n    };\n    this.selectMoreLines = function(dir, skip) {\n        var range = this.selection.toOrientedRange();\n        var isBackwards = range.cursor == range.end;\n\n        var screenLead = this.session.documentToScreenPosition(range.cursor);\n        if (this.selection.$desiredColumn)\n            screenLead.column = this.selection.$desiredColumn;\n\n        var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n        if (!range.isEmpty()) {\n            var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n            var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n        } else {\n            var anchor = lead;\n        }\n\n        if (isBackwards) {\n            var newRange = Range.fromPoints(lead, anchor);\n            newRange.cursor = newRange.start;\n        } else {\n            var newRange = Range.fromPoints(anchor, lead);\n            newRange.cursor = newRange.end;\n        }\n\n        newRange.desiredColumn = screenLead.column;\n        if (!this.selection.inMultiSelectMode) {\n            this.selection.addRange(range);\n        } else {\n            if (skip)\n                var toRemove = range.cursor;\n        }\n\n        this.selection.addRange(newRange);\n        if (toRemove)\n            this.selection.substractPoint(toRemove);\n    };\n    this.transposeSelections = function(dir) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var all = sel.ranges;\n\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            if (range.isEmpty()) {\n                var tmp = session.getWordRange(range.start.row, range.start.column);\n                range.start.row = tmp.start.row;\n                range.start.column = tmp.start.column;\n                range.end.row = tmp.end.row;\n                range.end.column = tmp.end.column;\n            }\n        }\n        sel.mergeOverlappingRanges();\n\n        var words = [];\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            words.unshift(session.getTextRange(range));\n        }\n\n        if (dir < 0)\n            words.unshift(words.pop());\n        else\n            words.push(words.shift());\n\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            var tmp = range.clone();\n            session.replace(range, words[i]);\n            range.start.row = tmp.start.row;\n            range.start.column = tmp.start.column;\n        }\n        sel.fromOrientedRange(sel.ranges[0]);\n    };\n    this.selectMore = function(dir, skip, stopAtFirst) {\n        var session = this.session;\n        var sel = session.multiSelect;\n\n        var range = sel.toOrientedRange();\n        if (range.isEmpty()) {\n            range = session.getWordRange(range.start.row, range.start.column);\n            range.cursor = dir == -1 ? range.start : range.end;\n            this.multiSelect.addRange(range);\n            if (stopAtFirst)\n                return;\n        }\n        var needle = session.getTextRange(range);\n\n        var newRange = find(session, needle, dir);\n        if (newRange) {\n            newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n            this.session.unfold(newRange);\n            this.multiSelect.addRange(newRange);\n            this.renderer.scrollCursorIntoView(null, 0.5);\n        }\n        if (skip)\n            this.multiSelect.substractPoint(range.cursor);\n    };\n    this.alignCursors = function() {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var ranges = sel.ranges;\n        var row = -1;\n        var sameRowRanges = ranges.filter(function(r) {\n            if (r.cursor.row == row)\n                return true;\n            row = r.cursor.row;\n        });\n        \n        if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n            var range = this.selection.getRange();\n            var fr = range.start.row, lr = range.end.row;\n            var guessRange = fr == lr;\n            if (guessRange) {\n                var max = this.session.getLength();\n                var line;\n                do {\n                    line = this.session.getLine(lr);\n                } while (/[=:]/.test(line) && ++lr < max);\n                do {\n                    line = this.session.getLine(fr);\n                } while (/[=:]/.test(line) && --fr > 0);\n                \n                if (fr < 0) fr = 0;\n                if (lr >= max) lr = max - 1;\n            }\n            var lines = this.session.removeFullLines(fr, lr);\n            lines = this.$reAlignText(lines, guessRange);\n            this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n            if (!guessRange) {\n                range.start.column = 0;\n                range.end.column = lines[lines.length - 1].length;\n            }\n            this.selection.setRange(range);\n        } else {\n            sameRowRanges.forEach(function(r) {\n                sel.substractPoint(r.cursor);\n            });\n\n            var maxCol = 0;\n            var minSpace = Infinity;\n            var spaceOffsets = ranges.map(function(r) {\n                var p = r.cursor;\n                var line = session.getLine(p.row);\n                var spaceOffset = line.substr(p.column).search(/\\S/g);\n                if (spaceOffset == -1)\n                    spaceOffset = 0;\n\n                if (p.column > maxCol)\n                    maxCol = p.column;\n                if (spaceOffset < minSpace)\n                    minSpace = spaceOffset;\n                return spaceOffset;\n            });\n            ranges.forEach(function(r, i) {\n                var p = r.cursor;\n                var l = maxCol - p.column;\n                var d = spaceOffsets[i] - minSpace;\n                if (l > d)\n                    session.insert(p, lang.stringRepeat(\" \", l - d));\n                else\n                    session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n                r.start.column = r.end.column = maxCol;\n                r.start.row = r.end.row = p.row;\n                r.cursor = r.end;\n            });\n            sel.fromOrientedRange(ranges[0]);\n            this.renderer.updateCursor();\n            this.renderer.updateBackMarkers();\n        }\n    };\n\n    this.$reAlignText = function(lines, forceLeft) {\n        var isLeftAligned = true, isRightAligned = true;\n        var startW, textW, endW;\n\n        return lines.map(function(line) {\n            var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n            if (!m)\n                return [line];\n\n            if (startW == null) {\n                startW = m[1].length;\n                textW = m[2].length;\n                endW = m[3].length;\n                return m;\n            }\n\n            if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n                isRightAligned = false;\n            if (startW != m[1].length)\n                isLeftAligned = false;\n\n            if (startW > m[1].length)\n                startW = m[1].length;\n            if (textW < m[2].length)\n                textW = m[2].length;\n            if (endW > m[3].length)\n                endW = m[3].length;\n\n            return m;\n        }).map(forceLeft ? alignLeft :\n            isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n        function spaces(n) {\n            return lang.stringRepeat(\" \", n);\n        }\n\n        function alignLeft(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(textW - m[2].length + endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function alignRight(m) {\n            return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function unAlign(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n    };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n    var session = e.session;\n    if (session && !session.multiSelect) {\n        session.$selectionMarkers = [];\n        session.selection.$initRangeList();\n        session.multiSelect = session.selection;\n    }\n    this.multiSelect = session && session.multiSelect;\n\n    var oldSession = e.oldSession;\n    if (oldSession) {\n        oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n        oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n        oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n        oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n        oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n        oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n    }\n\n    if (session) {\n        session.multiSelect.on(\"addRange\", this.$onAddRange);\n        session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n        session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n        session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n        session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n        session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n    }\n\n    if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n        if (session.selection.inMultiSelectMode)\n            this.$onMultiSelect();\n        else\n            this.$onSingleSelect();\n    }\n};\nfunction MultiSelect(editor) {\n    if (editor.$multiselectOnSessionChange)\n        return;\n    editor.$onAddRange = editor.$onAddRange.bind(editor);\n    editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n    editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n    editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n    editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n    editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n    editor.$multiselectOnSessionChange(editor);\n    editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n    editor.on(\"mousedown\", onMouseDown);\n    editor.commands.addCommands(commands.defaultCommands);\n\n    addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n    var el = editor.textInput.getElement();\n    var altCursor = false;\n    event.addListener(el, \"keydown\", function(e) {\n        var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n        if (editor.$blockSelectEnabled && altDown) {\n            if (!altCursor) {\n                editor.renderer.setMouseCursor(\"crosshair\");\n                altCursor = true;\n            }\n        } else if (altCursor) {\n            reset();\n        }\n    });\n\n    event.addListener(el, \"keyup\", reset);\n    event.addListener(el, \"blur\", reset);\n    function reset(e) {\n        if (altCursor) {\n            editor.renderer.setMouseCursor(\"\");\n            altCursor = false;\n        }\n    }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    enableMultiselect: {\n        set: function(val) {\n            MultiSelect(this);\n            if (val) {\n                this.on(\"changeSession\", this.$multiselectOnSessionChange);\n                this.on(\"mousedown\", onMouseDown);\n            } else {\n                this.off(\"changeSession\", this.$multiselectOnSessionChange);\n                this.off(\"mousedown\", onMouseDown);\n            }\n        },\n        value: true\n    },\n    enableBlockSelect: {\n        set: function(val) {\n            this.$blockSelectEnabled = val;\n        },\n        value: true\n    }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n    this.foldingStartMarker = null;\n    this.foldingStopMarker = null;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.foldingStartMarker.test(line))\n            return \"start\";\n        if (foldStyle == \"markbeginend\"\n                && this.foldingStopMarker\n                && this.foldingStopMarker.test(line))\n            return \"end\";\n        return \"\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        return null;\n    };\n\n    this.indentationBlock = function(session, row, column) {\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1)\n            return;\n\n        var startColumn = column || line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            var level = session.getLine(row).search(re);\n\n            if (level == -1)\n                continue;\n\n            if (level <= startLevel)\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n    this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n        var start = {row: row, column: column + 1};\n        var end = session.$findClosingBracket(bracket, start, typeRe);\n        if (!end)\n            return;\n\n        var fw = session.foldWidgets[end.row];\n        if (fw == null)\n            fw = session.getFoldWidget(end.row);\n\n        if (fw == \"start\" && end.row > start.row) {\n            end.row --;\n            end.column = session.getLine(end.row).length;\n        }\n        return Range.fromPoints(start, end);\n    };\n\n    this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n        var end = {row: row, column: column};\n        var start = session.$findOpeningBracket(bracket, end);\n\n        if (!start)\n            return;\n\n        start.column++;\n        end.column--;\n\n        return  Range.fromPoints(start, end);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\n\n\nfunction LineWidgets(session) {\n    this.session = session;\n    this.session.widgetManager = this;\n    this.session.getRowLength = this.getRowLength;\n    this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n    this.updateOnChange = this.updateOnChange.bind(this);\n    this.renderWidgets = this.renderWidgets.bind(this);\n    this.measureWidgets = this.measureWidgets.bind(this);\n    this.session._changedWidgets = [];\n    this.$onChangeEditor = this.$onChangeEditor.bind(this);\n    \n    this.session.on(\"change\", this.updateOnChange);\n    this.session.on(\"changeFold\", this.updateOnFold);\n    this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n    this.getRowLength = function(row) {\n        var h;\n        if (this.lineWidgets)\n            h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else \n            h = 0;\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1 + h;\n        } else {\n            return this.$wrapData[row].length + 1 + h;\n        }\n    };\n\n    this.$getWidgetScreenLength = function() {\n        var screenRows = 0;\n        this.lineWidgets.forEach(function(w){\n            if (w && w.rowCount && !w.hidden)\n                screenRows += w.rowCount;\n        });\n        return screenRows;\n    };    \n    \n    this.$onChangeEditor = function(e) {\n        this.attach(e.editor);\n    };\n    \n    this.attach = function(editor) {\n        if (editor  && editor.widgetManager && editor.widgetManager != this)\n            editor.widgetManager.detach();\n\n        if (this.editor == editor)\n            return;\n\n        this.detach();\n        this.editor = editor;\n        \n        if (editor) {\n            editor.widgetManager = this;\n            editor.renderer.on(\"beforeRender\", this.measureWidgets);\n            editor.renderer.on(\"afterRender\", this.renderWidgets);\n        }\n    };\n    this.detach = function(e) {\n        var editor = this.editor;\n        if (!editor)\n            return;\n        \n        this.editor = null;\n        editor.widgetManager = null;\n        \n        editor.renderer.off(\"beforeRender\", this.measureWidgets);\n        editor.renderer.off(\"afterRender\", this.renderWidgets);\n        var lineWidgets = this.session.lineWidgets;\n        lineWidgets && lineWidgets.forEach(function(w) {\n            if (w && w.el && w.el.parentNode) {\n                w._inDocument = false;\n                w.el.parentNode.removeChild(w.el);\n            }\n        });\n    };\n\n    this.updateOnFold = function(e, session) {\n        var lineWidgets = session.lineWidgets;\n        if (!lineWidgets || !e.action)\n            return;\n        var fold = e.data;\n        var start = fold.start.row;\n        var end = fold.end.row;\n        var hide = e.action == \"add\";\n        for (var i = start + 1; i < end; i++) {\n            if (lineWidgets[i])\n                lineWidgets[i].hidden = hide;\n        }\n        if (lineWidgets[end]) {\n            if (hide) {\n                if (!lineWidgets[start])\n                    lineWidgets[start] = lineWidgets[end];\n                else\n                    lineWidgets[end].hidden = hide;\n            } else {\n                if (lineWidgets[start] == lineWidgets[end])\n                    lineWidgets[start] = undefined;\n                lineWidgets[end].hidden = hide;\n            }\n        }\n    };\n    \n    this.updateOnChange = function(delta) {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets) return;\n        \n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n\n        if (len === 0) {\n        } else if (delta.action == 'remove') {\n            var removed = lineWidgets.splice(startRow + 1, len);\n            removed.forEach(function(w) {\n                w && this.removeLineWidget(w);\n            }, this);\n            this.$updateRows();\n        } else {\n            var args = new Array(len);\n            args.unshift(startRow, 0);\n            lineWidgets.splice.apply(lineWidgets, args);\n            this.$updateRows();\n        }\n    };\n    \n    this.$updateRows = function() {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets) return;\n        var noWidgets = true;\n        lineWidgets.forEach(function(w, i) {\n            if (w) {\n                noWidgets = false;\n                w.row = i;\n                while (w.$oldWidget) {\n                    w.$oldWidget.row = i;\n                    w = w.$oldWidget;\n                }\n            }\n        });\n        if (noWidgets)\n            this.session.lineWidgets = null;\n    };\n\n    this.addLineWidget = function(w) {\n        if (!this.session.lineWidgets)\n            this.session.lineWidgets = new Array(this.session.getLength());\n        \n        var old = this.session.lineWidgets[w.row];\n        if (old) {\n            w.$oldWidget = old;\n            if (old.el && old.el.parentNode) {\n                old.el.parentNode.removeChild(old.el);\n                old._inDocument = false;\n            }\n        }\n            \n        this.session.lineWidgets[w.row] = w;\n        \n        w.session = this.session;\n        \n        var renderer = this.editor.renderer;\n        if (w.html && !w.el) {\n            w.el = dom.createElement(\"div\");\n            w.el.innerHTML = w.html;\n        }\n        if (w.el) {\n            dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n            w.el.style.position = \"absolute\";\n            w.el.style.zIndex = 5;\n            renderer.container.appendChild(w.el);\n            w._inDocument = true;\n        }\n        \n        if (!w.coverGutter) {\n            w.el.style.zIndex = 3;\n        }\n        if (w.pixelHeight == null) {\n            w.pixelHeight = w.el.offsetHeight;\n        }\n        if (w.rowCount == null) {\n            w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n        }\n        \n        var fold = this.session.getFoldAt(w.row, 0);\n        w.$fold = fold;\n        if (fold) {\n            var lineWidgets = this.session.lineWidgets;\n            if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n                lineWidgets[fold.start.row] = w;\n            else\n                w.hidden = true;\n        }\n            \n        this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n        \n        this.$updateRows();\n        this.renderWidgets(null, renderer);\n        this.onWidgetChanged(w);\n        return w;\n    };\n    \n    this.removeLineWidget = function(w) {\n        w._inDocument = false;\n        w.session = null;\n        if (w.el && w.el.parentNode)\n            w.el.parentNode.removeChild(w.el);\n        if (w.editor && w.editor.destroy) try {\n            w.editor.destroy();\n        } catch(e){}\n        if (this.session.lineWidgets) {\n            var w1 = this.session.lineWidgets[w.row];\n            if (w1 == w) {\n                this.session.lineWidgets[w.row] = w.$oldWidget;\n                if (w.$oldWidget)\n                    this.onWidgetChanged(w.$oldWidget);\n            } else {\n                while (w1) {\n                    if (w1.$oldWidget == w) {\n                        w1.$oldWidget = w.$oldWidget;\n                        break;\n                    }\n                    w1 = w1.$oldWidget;\n                }\n            }\n        }\n        this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n        this.$updateRows();\n    };\n    \n    this.getWidgetsAtRow = function(row) {\n        var lineWidgets = this.session.lineWidgets;\n        var w = lineWidgets && lineWidgets[row];\n        var list = [];\n        while (w) {\n            list.push(w);\n            w = w.$oldWidget;\n        }\n        return list;\n    };\n    \n    this.onWidgetChanged = function(w) {\n        this.session._changedWidgets.push(w);\n        this.editor && this.editor.renderer.updateFull();\n    };\n    \n    this.measureWidgets = function(e, renderer) {\n        var changedWidgets = this.session._changedWidgets;\n        var config = renderer.layerConfig;\n        \n        if (!changedWidgets || !changedWidgets.length) return;\n        var min = Infinity;\n        for (var i = 0; i < changedWidgets.length; i++) {\n            var w = changedWidgets[i];\n            if (!w || !w.el) continue;\n            if (w.session != this.session) continue;\n            if (!w._inDocument) {\n                if (this.session.lineWidgets[w.row] != w)\n                    continue;\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            \n            w.h = w.el.offsetHeight;\n            \n            if (!w.fixedWidth) {\n                w.w = w.el.offsetWidth;\n                w.screenWidth = Math.ceil(w.w / config.characterWidth);\n            }\n            \n            var rowCount = w.h / config.lineHeight;\n            if (w.coverLine) {\n                rowCount -= this.session.getRowLineCount(w.row);\n                if (rowCount < 0)\n                    rowCount = 0;\n            }\n            if (w.rowCount != rowCount) {\n                w.rowCount = rowCount;\n                if (w.row < min)\n                    min = w.row;\n            }\n        }\n        if (min != Infinity) {\n            this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n            this.session.lineWidgetWidth = null;\n        }\n        this.session._changedWidgets = [];\n    };\n    \n    this.renderWidgets = function(e, renderer) {\n        var config = renderer.layerConfig;\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var first = Math.min(this.firstRow, config.firstRow);\n        var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n        \n        while (first > 0 && !lineWidgets[first])\n            first--;\n        \n        this.firstRow = config.firstRow;\n        this.lastRow = config.lastRow;\n\n        renderer.$cursorLayer.config = config;\n        for (var i = first; i <= last; i++) {\n            var w = lineWidgets[i];\n            if (!w || !w.el) continue;\n            if (w.hidden) {\n                w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n                continue;\n            }\n            if (!w._inDocument) {\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n            if (!w.coverLine)\n                top += config.lineHeight * this.session.getRowLineCount(w.row);\n            w.el.style.top = top - config.offset + \"px\";\n            \n            var left = w.coverGutter ? 0 : renderer.gutterWidth;\n            if (!w.fixedWidth)\n                left -= renderer.scrollLeft;\n            w.el.style.left = left + \"px\";\n            \n            if (w.fullWidth && w.screenWidth) {\n                w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n            }\n            \n            if (w.fixedWidth) {\n                w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n            } else {\n                w.el.style.right = \"\";\n            }\n        }\n    };\n    \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n    var first = 0;\n    var last = array.length - 1;\n\n    while (first <= last) {\n        var mid = (first + last) >> 1;\n        var c = comparator(needle, array[mid]);\n        if (c > 0)\n            first = mid + 1;\n        else if (c < 0)\n            last = mid - 1;\n        else\n            return mid;\n    }\n    return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n    var annotations = session.getAnnotations().sort(Range.comparePoints);\n    if (!annotations.length)\n        return;\n    \n    var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n    if (i < 0)\n        i = -i - 1;\n    \n    if (i >= annotations.length)\n        i = dir > 0 ? 0 : annotations.length - 1;\n    else if (i === 0 && dir < 0)\n        i = annotations.length - 1;\n    \n    var annotation = annotations[i];\n    if (!annotation || !dir)\n        return;\n\n    if (annotation.row === row) {\n        do {\n            annotation = annotations[i += dir];\n        } while (annotation && annotation.row === row);\n        if (!annotation)\n            return annotations.slice();\n    }\n    \n    \n    var matched = [];\n    row = annotation.row;\n    do {\n        matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n        annotation = annotations[i += dir];\n    } while (annotation && annotation.row == row);\n    return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n    var session = editor.session;\n    if (!session.widgetManager) {\n        session.widgetManager = new LineWidgets(session);\n        session.widgetManager.attach(editor);\n    }\n    \n    var pos = editor.getCursorPosition();\n    var row = pos.row;\n    var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n        return w.type == \"errorMarker\";\n    })[0];\n    if (oldWidget) {\n        oldWidget.destroy();\n    } else {\n        row -= dir;\n    }\n    var annotations = findAnnotations(session, row, dir);\n    var gutterAnno;\n    if (annotations) {\n        var annotation = annotations[0];\n        pos.column = (annotation.pos && typeof annotation.column != \"number\"\n            ? annotation.pos.sc\n            : annotation.column) || 0;\n        pos.row = annotation.row;\n        gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n    } else if (oldWidget) {\n        return;\n    } else {\n        gutterAnno = {\n            text: [\"Looks good!\"],\n            className: \"ace_ok\"\n        };\n    }\n    editor.session.unfold(pos.row);\n    editor.selection.moveToPosition(pos);\n    \n    var w = {\n        row: pos.row, \n        fixedWidth: true,\n        coverGutter: true,\n        el: dom.createElement(\"div\"),\n        type: \"errorMarker\"\n    };\n    var el = w.el.appendChild(dom.createElement(\"div\"));\n    var arrow = w.el.appendChild(dom.createElement(\"div\"));\n    arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n    \n    var left = editor.renderer.$cursorLayer\n        .getPixelPosition(pos).left;\n    arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n    \n    w.el.className = \"error_widget_wrapper\";\n    el.className = \"error_widget \" + gutterAnno.className;\n    el.innerHTML = gutterAnno.text.join(\"<br>\");\n    \n    el.appendChild(dom.createElement(\"div\"));\n    \n    var kb = function(_, hashId, keyString) {\n        if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n            w.destroy();\n            return {command: \"null\"};\n        }\n    };\n    \n    w.destroy = function() {\n        if (editor.$mouseHandler.isMousePressed)\n            return;\n        editor.keyBinding.removeKeyboardHandler(kb);\n        session.widgetManager.removeLineWidget(w);\n        editor.off(\"changeSelection\", w.destroy);\n        editor.off(\"changeSession\", w.destroy);\n        editor.off(\"mouseup\", w.destroy);\n        editor.off(\"change\", w.destroy);\n    };\n    \n    editor.keyBinding.addKeyboardHandler(kb);\n    editor.on(\"changeSelection\", w.destroy);\n    editor.on(\"changeSession\", w.destroy);\n    editor.on(\"mouseup\", w.destroy);\n    editor.on(\"change\", w.destroy);\n    \n    editor.session.widgetManager.addLineWidget(w);\n    \n    w.el.onmousedown = editor.focus.bind(editor);\n    \n    editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n    .error_widget_wrapper {\\\n        background: inherit;\\\n        color: inherit;\\\n        border:none\\\n    }\\\n    .error_widget {\\\n        border-top: solid 2px;\\\n        border-bottom: solid 2px;\\\n        margin: 5px 0;\\\n        padding: 10px 40px;\\\n        white-space: pre-wrap;\\\n    }\\\n    .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n        border-color: #ff5a5a\\\n    }\\\n    .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n        border-color: #F1D817\\\n    }\\\n    .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n        border-color: #5a5a5a\\\n    }\\\n    .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n        border-color: #5aaa5a\\\n    }\\\n    .error_widget_arrow {\\\n        position: absolute;\\\n        border: solid 5px;\\\n        border-top-color: transparent!important;\\\n        border-right-color: transparent!important;\\\n        border-left-color: transparent!important;\\\n        top: -5px;\\\n    }\\\n\", \"\");\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\n\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\n\nexports.config = require(\"./config\");\nexports.require = require;\n\nif (typeof define === \"function\")\n    exports.define = define;\nexports.edit = function(el, options) {\n    if (typeof el == \"string\") {\n        var _id = el;\n        el = document.getElementById(_id);\n        if (!el)\n            throw new Error(\"ace.edit can't find div #\" + _id);\n    }\n\n    if (el && el.env && el.env.editor instanceof Editor)\n        return el.env.editor;\n\n    var value = \"\";\n    if (el && /input|textarea/i.test(el.tagName)) {\n        var oldNode = el;\n        value = oldNode.value;\n        el = dom.createElement(\"pre\");\n        oldNode.parentNode.replaceChild(el, oldNode);\n    } else if (el) {\n        value = el.textContent;\n        el.innerHTML = \"\";\n    }\n\n    var doc = exports.createEditSession(value);\n\n    var editor = new Editor(new Renderer(el), doc, options);\n\n    var env = {\n        document: doc,\n        editor: editor,\n        onResize: editor.resize.bind(editor, null)\n    };\n    if (oldNode) env.textarea = oldNode;\n    event.addListener(window, \"resize\", env.onResize);\n    editor.on(\"destroy\", function() {\n        event.removeListener(window, \"resize\", env.onResize);\n        env.editor.container.env = null; // prevent memory leak on old ie\n    });\n    editor.container.env = editor.env = env;\n    return editor;\n};\nexports.createEditSession = function(text, mode) {\n    var doc = new EditSession(text, mode);\n    doc.setUndoManager(new UndoManager());\n    return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = \"1.4.3\";\n});            (function() {\n                ace.require([\"ace/ace\"], function(a) {\n                    if (a) {\n                        a.config.init(true);\n                        a.define = ace.define;\n                    }\n                    if (!window.ace)\n                        window.ace = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        window.ace[key] = a[key];\n                    window.ace[\"default\"] = window.ace;\n                    if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                        module.exports = window.ace;\n                    }\n                });\n            })();\n        "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-beautify.js",
    "content": "ace.define(\"ace/ext/beautify\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nexports.singletonTags = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"html\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"];\nexports.blockTags = [\"article\", \"aside\", \"blockquote\", \"body\", \"div\", \"dl\", \"fieldset\", \"footer\", \"form\", \"head\", \"header\", \"html\", \"nav\", \"ol\", \"p\", \"script\", \"section\", \"style\", \"table\", \"tbody\", \"tfoot\", \"thead\", \"ul\"];\n\nexports.beautify = function(session) {\n    var iterator = new TokenIterator(session, 0, 0);\n    var token = iterator.getCurrentToken();\n    var tabString = session.getTabString();\n    var singletonTags = exports.singletonTags;\n    var blockTags = exports.blockTags;\n    var nextToken;\n    var breakBefore = false;\n    var spaceBefore = false;\n    var spaceAfter = false;\n    var code = \"\";\n    var value = \"\";\n    var tagName = \"\";\n    var depth = 0;\n    var lastDepth = 0;\n    var lastIndent = 0;\n    var indent = 0;\n    var unindent = 0;\n    var roundDepth = 0;\n    var curlyDepth = 0;\n    var row;\n    var curRow = 0;\n    var rowsToAdd = 0;\n    var rowTokens = [];\n    var abort = false;\n    var i;\n    var indentNextLine = false;\n    var inTag = false;\n    var inCSS = false;\n    var inBlock = false;\n    var levels = {0: 0};\n    var parents = [];\n\n    var trimNext = function() {\n        if (nextToken && nextToken.value && nextToken.type !== 'string.regexp')\n            nextToken.value = nextToken.value.trim();\n    };\n\n    var trimLine = function() {\n        code = code.replace(/ +$/, \"\");\n    };\n\n    var trimCode = function() {\n        code = code.trimRight();\n        breakBefore = false;\n    };\n\n    while (token !== null) {\n        curRow = iterator.getCurrentTokenRow();\n        rowTokens = iterator.$rowTokens;\n        nextToken = iterator.stepForward();\n\n        if (typeof token !== \"undefined\") {\n            value = token.value;\n            unindent = 0;\n            inCSS = (tagName === \"style\" || session.$modeId === \"ace/mode/css\");\n            if (is(token, \"tag-open\")) {\n                inTag = true;\n                if (nextToken)\n                    inBlock = (blockTags.indexOf(nextToken.value) !== -1);\n                if (value === \"</\") {\n                    if (inBlock && !breakBefore && rowsToAdd < 1)\n                        rowsToAdd++;\n\n                    if (inCSS)\n                        rowsToAdd = 1;\n\n                    unindent = 1;\n                    inBlock = false;\n                }\n            } else if (is(token, \"tag-close\")) {\n                inTag = false;\n            } else if (is(token, \"comment.start\")) {\n                inBlock = true;\n            } else if (is(token, \"comment.end\")) {\n                inBlock = false;\n            }\n            if (!inTag && !rowsToAdd && token.type === \"paren.rparen\" && token.value.substr(0, 1) === \"}\") {\n                rowsToAdd++;\n            }\n            if (curRow !== row) {\n                rowsToAdd = curRow;\n\n                if (row)\n                    rowsToAdd -= row;\n            }\n\n            if (rowsToAdd) {\n                trimCode();\n                for (; rowsToAdd > 0; rowsToAdd--)\n                    code += \"\\n\";\n\n                breakBefore = true;\n                if (!is(token, \"comment\") && !token.type.match(/^(comment|string)$/))\n                   value = value.trimLeft();\n            }\n\n            if (value) {\n                if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|foreach|while|switch)$/)) {\n                    parents[depth] = value;\n\n                    trimNext();\n                    spaceAfter = true;\n                    if (value.match(/^(else|elseif)$/)) {\n                        if (code.match(/\\}[\\s]*$/)) {\n                            trimCode();\n                            spaceBefore = true;\n                        }\n                    }\n                } else if (token.type === \"paren.lparen\") {\n                    trimNext();\n                    if (value.substr(-1) === \"{\") {\n                        spaceAfter = true;\n                        indentNextLine = false;\n\n                        if(!inTag)\n                            rowsToAdd = 1;\n                    }\n                    if (value.substr(0, 1) === \"{\") {\n                        spaceBefore = true;\n                        if (code.substr(-1) !== '[' && code.trimRight().substr(-1) === '[') {\n                            trimCode();\n                            spaceBefore = false;\n                        } else if (code.trimRight().substr(-1) === ')') {\n                            trimCode();\n                        } else {\n                            trimLine();\n                        }\n                    }\n                } else if (token.type === \"paren.rparen\") {\n                    unindent = 1;\n                    if (value.substr(0, 1) === \"}\") {\n                        if (parents[depth-1] === 'case')\n                            unindent++;\n\n                        if (code.trimRight().substr(-1) === '{') {\n                            trimCode();\n                        } else {\n                            spaceBefore = true;\n\n                            if (inCSS)\n                                rowsToAdd+=2;\n                        }\n                    }\n                    if (value.substr(0, 1) === \"]\") {\n                        if (code.substr(-1) !== '}' && code.trimRight().substr(-1) === '}') {\n                            spaceBefore = false;\n                            indent++;\n                            trimCode();\n                        }\n                    }\n                    if (value.substr(0, 1) === \")\") {\n                        if (code.substr(-1) !== '(' && code.trimRight().substr(-1) === '(') {\n                            spaceBefore = false;\n                            indent++;\n                            trimCode();\n                        }\n                    }\n\n                    trimLine();\n                } else if ((token.type === \"keyword.operator\" || token.type === \"keyword\") && value.match(/^(=|==|===|!=|!==|&&|\\|\\||and|or|xor|\\+=|.=|>|>=|<|<=|=>)$/)) {\n                    trimCode();\n                    trimNext();\n                    spaceBefore = true;\n                    spaceAfter = true;\n                } else if (token.type === \"punctuation.operator\" && value === ';') {\n                    trimCode();\n                    trimNext();\n                    spaceAfter = true;\n\n                    if (inCSS)\n                        rowsToAdd++;\n                } else if (token.type === \"punctuation.operator\" && value.match(/^(:|,)$/)) {\n                    trimCode();\n                    trimNext();\n                    if (value.match(/^(,)$/) && curlyDepth>0 && roundDepth===0) {\n                        rowsToAdd++;\n                    } else {\n                        spaceAfter = true;\n                        breakBefore = false;\n                    }\n                } else if (token.type === \"support.php_tag\" && value === \"?>\" && !breakBefore) {\n                    trimCode();\n                    spaceBefore = true;\n                } else if (is(token, \"attribute-name\") && code.substr(-1).match(/^\\s$/)) {\n                    spaceBefore = true;\n                } else if (is(token, \"attribute-equals\")) {\n                    trimLine();\n                    trimNext();\n                } else if (is(token, \"tag-close\")) {\n                    trimLine();\n                    if(value === \"/>\")\n                        spaceBefore = true;\n                }\n                if (breakBefore && !(token.type.match(/^(comment)$/) && !value.substr(0, 1).match(/^[/#]$/)) && !(token.type.match(/^(string)$/) && !value.substr(0, 1).match(/^['\"]$/))) {\n\n                    indent = lastIndent;\n\n                    if(depth > lastDepth) {\n                        indent++;\n\n                        for (i=depth; i > lastDepth; i--)\n                            levels[i] = indent;\n                    } else if(depth < lastDepth)\n                        indent = levels[depth];\n\n                    lastDepth = depth;\n                    lastIndent = indent;\n\n                    if(unindent)\n                        indent -= unindent;\n\n                    if (indentNextLine && !roundDepth) {\n                        indent++;\n                        indentNextLine = false;\n                    }\n\n                    for (i = 0; i < indent; i++)\n                        code += tabString;\n                }\n\n\n                if (token.type === \"keyword\" && value.match(/^(case|default)$/)) {\n                    parents[depth] = value;\n                    depth++;\n                }\n\n\n                if (token.type === \"keyword\" && value.match(/^(break)$/)) {\n                    if(parents[depth-1] && parents[depth-1].match(/^(case|default)$/)) {\n                        depth--;\n                    }\n                }\n                if (token.type === \"paren.lparen\") {\n                    roundDepth += (value.match(/\\(/g) || []).length;\n                    curlyDepth += (value.match(/\\{/g) || []).length;\n                    depth += value.length;\n                }\n\n                if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|while)$/)) {\n                    indentNextLine = true;\n                    roundDepth = 0;\n                } else if (!roundDepth && value.trim() && token.type !== \"comment\")\n                    indentNextLine = false;\n\n                if (token.type === \"paren.rparen\") {\n                    roundDepth -= (value.match(/\\)/g) || []).length;\n                    curlyDepth -= (value.match(/\\}/g) || []).length;\n\n                    for (i = 0; i < value.length; i++) {\n                        depth--;\n                        if(value.substr(i, 1)==='}' && parents[depth]==='case') {\n                            depth--;\n                        }\n                    }\n                }\n                if (spaceBefore && !breakBefore) {\n                    trimLine();\n                    if (code.substr(-1) !== \"\\n\")\n                        code += \" \";\n                }\n\n                code += value;\n\n                if (spaceAfter)\n                    code += \" \";\n\n                breakBefore = false;\n                spaceBefore = false;\n                spaceAfter = false;\n                if ((is(token, \"tag-close\") && (inBlock || blockTags.indexOf(tagName) !== -1)) || (is(token, \"doctype\") && value === \">\")) {\n                    if (inBlock && nextToken && nextToken.value === \"</\")\n                        rowsToAdd = -1;\n                    else\n                        rowsToAdd = 1;\n                }\n                if (is(token, \"tag-open\") && value === \"</\") {\n                    depth--;\n                } else if (is(token, \"tag-open\") && value === \"<\" && singletonTags.indexOf(nextToken.value) === -1) {\n                    depth++;\n                } else if (is(token, \"tag-name\")) {\n                    tagName = value;\n                } else if (is(token, \"tag-close\") && value === \"/>\" && singletonTags.indexOf(tagName) === -1){\n                    depth--;\n                }\n\n                row = curRow;\n            }\n        }\n\n        token = nextToken;\n    }\n\n    code = code.trim();\n    session.doc.setValue(code);\n};\n\nexports.commands = [{\n    name: \"beautify\",\n    exec: function(editor) {\n        exports.beautify(editor.session);\n    },\n    bindKey: \"Ctrl-Shift-B\"\n}];\n\n});                (function() {\n                    ace.require([\"ace/ext/beautify\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-elastic_tabstops_lite.js",
    "content": "ace.define(\"ace/ext/elastic_tabstops_lite\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar ElasticTabstopsLite = function(editor) {\n    this.$editor = editor;\n    var self = this;\n    var changedRows = [];\n    var recordChanges = false;\n    this.onAfterExec = function() {\n        recordChanges = false;\n        self.processRows(changedRows);\n        changedRows = [];\n    };\n    this.onExec = function() {\n        recordChanges = true;\n    };\n    this.onChange = function(delta) {\n        if (recordChanges) {\n            if (changedRows.indexOf(delta.start.row) == -1)\n                changedRows.push(delta.start.row);\n            if (delta.end.row != delta.start.row)\n                changedRows.push(delta.end.row);\n        }\n    };\n};\n\n(function() {\n    this.processRows = function(rows) {\n        this.$inChange = true;\n        var checkedRows = [];\n\n        for (var r = 0, rowCount = rows.length; r < rowCount; r++) {\n            var row = rows[r];\n\n            if (checkedRows.indexOf(row) > -1)\n                continue;\n\n            var cellWidthObj = this.$findCellWidthsForBlock(row);\n            var cellWidths = this.$setBlockCellWidthsToMax(cellWidthObj.cellWidths);\n            var rowIndex = cellWidthObj.firstRow;\n\n            for (var w = 0, l = cellWidths.length; w < l; w++) {\n                var widths = cellWidths[w];\n                checkedRows.push(rowIndex);\n                this.$adjustRow(rowIndex, widths);\n                rowIndex++;\n            }\n        }\n        this.$inChange = false;\n    };\n\n    this.$findCellWidthsForBlock = function(row) {\n        var cellWidths = [], widths;\n        var rowIter = row;\n        while (rowIter >= 0) {\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n\n            cellWidths.unshift(widths);\n            rowIter--;\n        }\n        var firstRow = rowIter + 1;\n        rowIter = row;\n        var numRows = this.$editor.session.getLength();\n\n        while (rowIter < numRows - 1) {\n            rowIter++;\n\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n\n            cellWidths.push(widths);\n        }\n\n        return { cellWidths: cellWidths, firstRow: firstRow };\n    };\n\n    this.$cellWidthsForRow = function(row) {\n        var selectionColumns = this.$selectionColumnsForRow(row);\n\n        var tabs = [-1].concat(this.$tabsForRow(row));\n        var widths = tabs.map(function(el) { return 0; } ).slice(1);\n        var line = this.$editor.session.getLine(row);\n\n        for (var i = 0, len = tabs.length - 1; i < len; i++) {\n            var leftEdge = tabs[i]+1;\n            var rightEdge = tabs[i+1];\n\n            var rightmostSelection = this.$rightmostSelectionInCell(selectionColumns, rightEdge);\n            var cell = line.substring(leftEdge, rightEdge);\n            widths[i] = Math.max(cell.replace(/\\s+$/g,'').length, rightmostSelection - leftEdge);\n        }\n\n        return widths;\n    };\n\n    this.$selectionColumnsForRow = function(row) {\n        var selections = [], cursor = this.$editor.getCursorPosition();\n        if (this.$editor.session.getSelection().isEmpty()) {\n            if (row == cursor.row)\n                selections.push(cursor.column);\n        }\n\n        return selections;\n    };\n\n    this.$setBlockCellWidthsToMax = function(cellWidths) {\n        var startingNewBlock = true, blockStartRow, blockEndRow, maxWidth;\n        var columnInfo = this.$izip_longest(cellWidths);\n\n        for (var c = 0, l = columnInfo.length; c < l; c++) {\n            var column = columnInfo[c];\n            if (!column.push) {\n                console.error(column);\n                continue;\n            }\n            column.push(NaN);\n\n            for (var r = 0, s = column.length; r < s; r++) {\n                var width = column[r];\n                if (startingNewBlock) {\n                    blockStartRow = r;\n                    maxWidth = 0;\n                    startingNewBlock = false;\n                }\n                if (isNaN(width)) {\n                    blockEndRow = r;\n\n                    for (var j = blockStartRow; j < blockEndRow; j++) {\n                        cellWidths[j][c] = maxWidth;\n                    }\n                    startingNewBlock = true;\n                }\n\n                maxWidth = Math.max(maxWidth, width);\n            }\n        }\n\n        return cellWidths;\n    };\n\n    this.$rightmostSelectionInCell = function(selectionColumns, cellRightEdge) {\n        var rightmost = 0;\n\n        if (selectionColumns.length) {\n            var lengths = [];\n            for (var s = 0, length = selectionColumns.length; s < length; s++) {\n                if (selectionColumns[s] <= cellRightEdge)\n                    lengths.push(s);\n                else\n                    lengths.push(0);\n            }\n            rightmost = Math.max.apply(Math, lengths);\n        }\n\n        return rightmost;\n    };\n\n    this.$tabsForRow = function(row) {\n        var rowTabs = [], line = this.$editor.session.getLine(row),\n            re = /\\t/g, match;\n\n        while ((match = re.exec(line)) != null) {\n            rowTabs.push(match.index);\n        }\n\n        return rowTabs;\n    };\n\n    this.$adjustRow = function(row, widths) {\n        var rowTabs = this.$tabsForRow(row);\n\n        if (rowTabs.length == 0)\n            return;\n\n        var bias = 0, location = -1;\n        var expandedSet = this.$izip(widths, rowTabs);\n\n        for (var i = 0, l = expandedSet.length; i < l; i++) {\n            var w = expandedSet[i][0], it = expandedSet[i][1];\n            location += 1 + w;\n            it += bias;\n            var difference = location - it;\n\n            if (difference == 0)\n                continue;\n\n            var partialLine = this.$editor.session.getLine(row).substr(0, it );\n            var strippedPartialLine = partialLine.replace(/\\s*$/g, \"\");\n            var ispaces = partialLine.length - strippedPartialLine.length;\n\n            if (difference > 0) {\n                this.$editor.session.getDocument().insertInLine({row: row, column: it + 1}, Array(difference + 1).join(\" \") + \"\\t\");\n                this.$editor.session.getDocument().removeInLine(row, it, it + 1);\n\n                bias += difference;\n            }\n\n            if (difference < 0 && ispaces >= -difference) {\n                this.$editor.session.getDocument().removeInLine(row, it + difference, it);\n                bias += difference;\n            }\n        }\n    };\n    this.$izip_longest = function(iterables) {\n        if (!iterables[0])\n            return [];\n        var longest = iterables[0].length;\n        var iterablesLength = iterables.length;\n\n        for (var i = 1; i < iterablesLength; i++) {\n            var iLength = iterables[i].length;\n            if (iLength > longest)\n                longest = iLength;\n        }\n\n        var expandedSet = [];\n\n        for (var l = 0; l < longest; l++) {\n            var set = [];\n            for (var i = 0; i < iterablesLength; i++) {\n                if (iterables[i][l] === \"\")\n                    set.push(NaN);\n                else\n                    set.push(iterables[i][l]);\n            }\n\n            expandedSet.push(set);\n        }\n\n\n        return expandedSet;\n    };\n    this.$izip = function(widths, tabs) {\n        var size = widths.length >= tabs.length ? tabs.length : widths.length;\n\n        var expandedSet = [];\n        for (var i = 0; i < size; i++) {\n            var set = [ widths[i], tabs[i] ];\n            expandedSet.push(set);\n        }\n        return expandedSet;\n    };\n\n}).call(ElasticTabstopsLite.prototype);\n\nexports.ElasticTabstopsLite = ElasticTabstopsLite;\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    useElasticTabstops: {\n        set: function(val) {\n            if (val) {\n                if (!this.elasticTabstops)\n                    this.elasticTabstops = new ElasticTabstopsLite(this);\n                this.commands.on(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.on(\"exec\", this.elasticTabstops.onExec);\n                this.on(\"change\", this.elasticTabstops.onChange);\n            } else if (this.elasticTabstops) {\n                this.commands.removeListener(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.removeListener(\"exec\", this.elasticTabstops.onExec);\n                this.removeListener(\"change\", this.elasticTabstops.onChange);\n            }\n        }\n    }\n});\n\n});                (function() {\n                    ace.require([\"ace/ext/elastic_tabstops_lite\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-emmet.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    \n    this.getTokenizer = function() {\n        function TabstopToken(str, _, stack) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str) && !stack.inFormatString)\n                return [{tabstopId: parseInt(str, 10)}];\n            return [{text: str}];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                {regex: /:/, onMatch: function(val, state, stack) {\n                    if (stack.length && stack[0].expectIf) {\n                        stack[0].expectIf = false;\n                        stack[0].elseBranch = stack[0];\n                        return [stack[0]];\n                    }\n                    return \":\";\n                }},\n                {regex: /\\\\./, onMatch: function(val, state, stack) {\n                    var ch = val[1];\n                    if (ch == \"}\" && stack.length) {\n                        val = ch;\n                    }else if (\"`$\\\\\".indexOf(ch) != -1) {\n                        val = ch;\n                    } else if (stack.inFormatString) {\n                        if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\n\";\n                        else if (\"ulULE\".indexOf(ch) != -1) {\n                            val = {changeCase: ch, local: ch > \"a\"};\n                        }\n                    }\n\n                    return [val];\n                }},\n                {regex: /}/, onMatch: function(val, state, stack) {\n                    return [stack.length ? stack.shift() : val];\n                }},\n                {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n                {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n                    var t = TabstopToken(str.substr(1), state, stack);\n                    stack.unshift(t[0]);\n                    return t;\n                }, next: \"snippetVar\"},\n                {regex: /\\n/, token: \"newline\", merge: false}\n            ],\n            snippetVar: [\n                {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n                    stack[0].choices = val.slice(1, -1).split(\",\");\n                }, next: \"start\"},\n                {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n                 onMatch: function(val, state, stack) {\n                    var ts = stack[0];\n                    ts.fmtString = val;\n\n                    val = this.splitRegex.exec(val);\n                    ts.guard = val[1];\n                    ts.fmt = val[2];\n                    ts.flag = val[3];\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n                    stack[0].code = val.splice(1, -1);\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n                    if (stack[0])\n                        stack[0].expectIf = true;\n                }, next: \"start\"},\n                {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n            ],\n            formatString: [\n                {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n                {regex: \"\", onMatch: function(val, state, stack) {\n                    stack.inFormatString = true;\n                }, next: \"start\"}\n            ]\n        });\n        SnippetManager.prototype.getTokenizer = function() {\n            return SnippetManager.$tokenizer;\n        };\n        return SnippetManager.$tokenizer;\n    };\n\n    this.tokenizeTmSnippet = function(str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n            return x.value || x;\n        });\n    };\n\n    this.$getDefaultValue = function(editor, name) {\n        if (/^[A-Z]\\d+$/.test(name)) {\n            var i = name.substr(1);\n            return (this.variables[name[0] + \"__\"] || {})[i];\n        }\n        if (/^\\d+$/.test(name)) {\n            return (this.variables.__ || {})[name];\n        }\n        name = name.replace(/^TM_/, \"\");\n\n        if (!editor)\n            return;\n        var s = editor.session;\n        switch(name) {\n            case \"CURRENT_WORD\":\n                var r = s.getWordRange();\n            case \"SELECTION\":\n            case \"SELECTED_TEXT\":\n                return s.getTextRange(r);\n            case \"CURRENT_LINE\":\n                return s.getLine(editor.getCursorPosition().row);\n            case \"PREV_LINE\": // not possible in textmate\n                return s.getLine(editor.getCursorPosition().row - 1);\n            case \"LINE_INDEX\":\n                return editor.getCursorPosition().column;\n            case \"LINE_NUMBER\":\n                return editor.getCursorPosition().row + 1;\n            case \"SOFT_TABS\":\n                return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n            case \"TAB_SIZE\":\n                return s.getTabSize();\n            case \"FILENAME\":\n            case \"FILEPATH\":\n                return \"\";\n            case \"FULLNAME\":\n                return \"Ace\";\n        }\n    };\n    this.variables = {};\n    this.getVariableValue = function(editor, varName) {\n        if (this.variables.hasOwnProperty(varName))\n            return this.variables[varName](editor, varName) || \"\";\n        return this.$getDefaultValue(editor, varName) || \"\";\n    };\n    this.tmStrFormat = function(str, ch, editor) {\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n        var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n        var _self = this;\n        var formatted = str.replace(re, function() {\n            _self.variables.__ = arguments;\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i  = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    } else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                } else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                } else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            return fmtParts.join(\"\");\n        });\n        this.variables.__ = null;\n        return formatted;\n    };\n\n    this.resolveVariables = function(snippet, editor) {\n        var result = [];\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n            } else if (typeof ch != \"object\") {\n                continue;\n            } else if (ch.skip) {\n                gotoNext(ch);\n            } else if (ch.processed < i) {\n                continue;\n            } else if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text);\n                if (value && ch.fmtString)\n                    value = this.tmStrFormat(value, ch);\n                ch.processed = i;\n                if (ch.expectIf == null) {\n                    if (value) {\n                        result.push(value);\n                        gotoNext(ch);\n                    }\n                } else {\n                    if (value) {\n                        ch.skip = ch.elseBranch;\n                    } else\n                        gotoNext(ch);\n                }\n            } else if (ch.tabstopId != null) {\n                result.push(ch);\n            } else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n\n    this.insertSnippetForSelection = function(editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        \n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function(x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function(p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function(t) {return typeof t === \"object\";});\n            if (isNested && !ts.value) {\n                ts.value = value;\n            } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function(ts) {ts.length = 0;});\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || {tabstopId: p.tabstopId};\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p)\n                    expanding[id] = null;\n                continue;\n            }\n            \n            var ts = tabstops[id];\n            var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n            arg.unshift(i + 1, Math.max(0, i1 - i));\n            arg.push(p);\n            expanding[id] = p;\n            tokens.splice.apply(tokens, arg);\n\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function(t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1){\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                } else\n                    column += t.length;\n                text += t;\n            } else {\n                if (!t.start)\n                    t.start = {row: row, column: column};\n                else\n                    t.end = {row: row, column: column};\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    \n    this.insertSnippet = function(editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        \n        editor.forEachSelection(function() {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, {keepOrder: true});\n        \n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n\n    this.$getScope = function(editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        \n        return scope;\n    };\n\n    this.getActiveScopes = function(editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n\n    this.expandWithTab = function(editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function() {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, {keepOrder: true});\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    \n    this.expandSnippetForSelection = function(editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row,\n            cursor.column - snippet.replaceBefore.length,\n            cursor.column + snippet.replaceAfter.length\n        );\n\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n\n    this.findMatchingSnippet = function(snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        \n        if (!snippets) \n            snippets = [];\n        \n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            } else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            \n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            \n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n\n        if (snippets && snippets.content)\n            addSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(addSnippet);\n        \n        this._signal(\"registerSnippets\", {scope: scope});\n    };\n    this.unregister = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope||scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope||scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function(str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                } catch (e) {}\n            } if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            } else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                } else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                } else {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function(name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function() {\n    this.attach = function(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function() {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n\n    this.onChange = function(delta) {\n        var changeRange = delta;\n        var isRemove = delta.action[0] == \"r\";\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n        var colDiff = end.column - start.column;\n\n        if (isRemove) {\n            lineDif = -lineDif;\n            colDiff = -colDiff;\n        }\n        if (!this.$inChange && isRemove) {\n            var ts = this.selectedTabstop;\n            var changedOutside = ts && !ts.some(function(r) {\n                return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n            });\n            if (changedOutside)\n                return this.detach();\n        }\n        var ranges = this.ranges;\n        for (var i = 0; i < ranges.length; i++) {\n            var r = ranges[i];\n            if (r.end.row < start.row)\n                continue;\n\n            if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n                this.removeRange(r);\n                i--;\n                continue;\n            }\n\n            if (r.start.row == startRow && r.start.column > start.column)\n                r.start.column += colDiff;\n            if (r.end.row == startRow && r.end.column >= start.column)\n                r.end.column += colDiff;\n            if (r.start.row >= startRow)\n                r.start.row += lineDif;\n            if (r.end.row >= startRow)\n                r.end.row += lineDif;\n\n            if (comparePoints(r.start, r.end) > 0)\n                this.removeRange(r);\n        }\n        if (!ranges.length)\n            this.detach();\n    };\n    this.updateLinkedFields = function() {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = ts.length; i--;) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function(e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function() {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = this.ranges.length; i--;) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function() {\n        this.detach();\n    };\n    this.tabNext = function(dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function(index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        \n        this.selectedTabstop = ts;\n        if (!this.editor.inVirtualSelectionMode) {        \n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(ts.firstNonLinked.clone());\n            for (var i = ts.length; i--;) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n            if (sel.ranges[0])\n                sel.addRange(sel.ranges[0].clone());\n        } else {\n            this.editor.selection.setRange(ts.firstNonLinked);\n        }\n        \n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.addTabstops = function(tabstops, start, end) {\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function(ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n                \n            for (var i = ts.length; i--;) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                } else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n        }, this);\n        \n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n\n    this.addTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            if  (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function(range) {\n        var i = range.tabstop.indexOf(range);\n        range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        this.ranges.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function(ed) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n                return;\n            }\n\n            ed.tabstopManager.tabNext(1);\n        },\n        \"Shift-Tab\": function(ed) {\n            ed.tabstopManager.tabNext(-1);\n        },\n        \"Esc\": function(ed) {\n            ed.tabstopManager.detach();\n        },\n        \"Return\": function(ed) {\n            return false;\n        }\n    });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n    this.pos.row = row;\n    this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n    this.$insertRight = $insertRight;\n    this.pos = pos; \n    this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n    -moz-box-sizing: border-box;\\\n    box-sizing: border-box;\\\n    background: rgba(194, 193, 208, 0.09);\\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\\n    position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.insertSnippet = function(content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function(options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"resources\",\"resources\",\"tabStops\",\"resources\",\"utils\",\"actions\",\"ace/config\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\nvar HashHandler = require(\"ace/keyboard/hash_handler\").HashHandler;\nvar Editor = require(\"ace/editor\").Editor;\nvar snippetManager = require(\"ace/snippets\").snippetManager;\nvar Range = require(\"ace/range\").Range;\nvar emmet, emmetPath;\nfunction AceEmmetEditor() {}\n\nAceEmmetEditor.prototype = {\n    setupContext: function(editor) {\n        this.ace = editor;\n        this.indentation = editor.session.getTabString();\n        if (!emmet)\n            emmet = window.emmet;\n        var resources = emmet.resources || emmet.require(\"resources\");\n        resources.setVariable(\"indentation\", this.indentation);\n        this.$syntax = null;\n        this.$syntax = this.getSyntax();\n    },\n    getSelectionRange: function() {\n        var range = this.ace.getSelectionRange();\n        var doc = this.ace.session.doc;\n        return {\n            start: doc.positionToIndex(range.start),\n            end: doc.positionToIndex(range.end)\n        };\n    },\n    createSelection: function(start, end) {\n        var doc = this.ace.session.doc;\n        this.ace.selection.setRange({\n            start: doc.indexToPosition(start),\n            end: doc.indexToPosition(end)\n        });\n    },\n    getCurrentLineRange: function() {\n        var ace = this.ace;\n        var row = ace.getCursorPosition().row;\n        var lineLength = ace.session.getLine(row).length;\n        var index = ace.session.doc.positionToIndex({row: row, column: 0});\n        return {\n            start: index,\n            end: index + lineLength\n        };\n    },\n    getCaretPos: function(){\n        var pos = this.ace.getCursorPosition();\n        return this.ace.session.doc.positionToIndex(pos);\n    },\n    setCaretPos: function(index){\n        var pos = this.ace.session.doc.indexToPosition(index);\n        this.ace.selection.moveToPosition(pos);\n    },\n    getCurrentLine: function() {\n        var row = this.ace.getCursorPosition().row;\n        return this.ace.session.getLine(row);\n    },\n    replaceContent: function(value, start, end, noIndent) {\n        if (end == null)\n            end = start == null ? this.getContent().length : start;\n        if (start == null)\n            start = 0;        \n        \n        var editor = this.ace;\n        var doc = editor.session.doc;\n        var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end));\n        editor.session.remove(range);\n        \n        range.end = range.start;\n        \n        value = this.$updateTabstops(value);\n        snippetManager.insertSnippet(editor, value);\n    },\n    getContent: function(){\n        return this.ace.getValue();\n    },\n    getSyntax: function() {\n        if (this.$syntax)\n            return this.$syntax;\n        var syntax = this.ace.session.$modeId.split(\"/\").pop();\n        if (syntax == \"html\" || syntax == \"php\") {\n            var cursor = this.ace.getCursorPosition();\n            var state = this.ace.session.getState(cursor.row);\n            if (typeof state != \"string\")\n                state = state[0];\n            if (state) {\n                state = state.split(\"-\");\n                if (state.length > 1)\n                    syntax = state[0];\n                else if (syntax == \"php\")\n                    syntax = \"html\";\n            }\n        }\n        return syntax;\n    },\n    getProfileName: function() {\n        var resources = emmet.resources || emmet.require(\"resources\");\n        switch (this.getSyntax()) {\n          case \"css\": return \"css\";\n          case \"xml\":\n          case \"xsl\":\n            return \"xml\";\n          case \"html\":\n            var profile = resources.getVariable(\"profile\");\n            if (!profile)\n                profile = this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i) != -1 ? \"xhtml\": \"html\";\n            return profile;\n          default:\n            var mode = this.ace.session.$mode;\n            return mode.emmetConfig && mode.emmetConfig.profile || \"xhtml\";\n        }\n    },\n    prompt: function(title) {\n        return prompt(title);\n    },\n    getSelection: function() {\n        return this.ace.session.getTextRange();\n    },\n    getFilePath: function() {\n        return \"\";\n    },\n    $updateTabstops: function(value) {\n        var base = 1000;\n        var zeroBase = 0;\n        var lastZero = null;\n        var ts = emmet.tabStops || emmet.require('tabStops');\n        var resources = emmet.resources || emmet.require(\"resources\");\n        var settings = resources.getVocabulary(\"user\");\n        var tabstopOptions = {\n            tabstop: function(data) {\n                var group = parseInt(data.group, 10);\n                var isZero = group === 0;\n                if (isZero)\n                    group = ++zeroBase;\n                else\n                    group += base;\n\n                var placeholder = data.placeholder;\n                if (placeholder) {\n                    placeholder = ts.processText(placeholder, tabstopOptions);\n                }\n\n                var result = '${' + group + (placeholder ? ':' + placeholder : '') + '}';\n\n                if (isZero) {\n                    lastZero = [data.start, result];\n                }\n\n                return result;\n            },\n            escape: function(ch) {\n                if (ch == '$') return '\\\\$';\n                if (ch == '\\\\') return '\\\\\\\\';\n                return ch;\n            }\n        };\n\n        value = ts.processText(value, tabstopOptions);\n\n        if (settings.variables['insert_final_tabstop'] && !/\\$\\{0\\}$/.test(value)) {\n            value += '${0}';\n        } else if (lastZero) {\n            var common = emmet.utils ? emmet.utils.common : emmet.require('utils');\n            value = common.replaceSubstring(value, '${0}', lastZero[0], lastZero[1]);\n        }\n        \n        return value;\n    }\n};\n\n\nvar keymap = {\n    expand_abbreviation: {\"mac\": \"ctrl+alt+e\", \"win\": \"alt+e\"},\n    match_pair_outward: {\"mac\": \"ctrl+d\", \"win\": \"ctrl+,\"},\n    match_pair_inward: {\"mac\": \"ctrl+j\", \"win\": \"ctrl+shift+0\"},\n    matching_pair: {\"mac\": \"ctrl+alt+j\", \"win\": \"alt+j\"},\n    next_edit_point: \"alt+right\",\n    prev_edit_point: \"alt+left\",\n    toggle_comment: {\"mac\": \"command+/\", \"win\": \"ctrl+/\"},\n    split_join_tag: {\"mac\": \"shift+command+'\", \"win\": \"shift+ctrl+`\"},\n    remove_tag: {\"mac\": \"command+'\", \"win\": \"shift+ctrl+;\"},\n    evaluate_math_expression: {\"mac\": \"shift+command+y\", \"win\": \"shift+ctrl+y\"},\n    increment_number_by_1: \"ctrl+up\",\n    decrement_number_by_1: \"ctrl+down\",\n    increment_number_by_01: \"alt+up\",\n    decrement_number_by_01: \"alt+down\",\n    increment_number_by_10: {\"mac\": \"alt+command+up\", \"win\": \"shift+alt+up\"},\n    decrement_number_by_10: {\"mac\": \"alt+command+down\", \"win\": \"shift+alt+down\"},\n    select_next_item: {\"mac\": \"shift+command+.\", \"win\": \"shift+ctrl+.\"},\n    select_previous_item: {\"mac\": \"shift+command+,\", \"win\": \"shift+ctrl+,\"},\n    reflect_css_value: {\"mac\": \"shift+command+r\", \"win\": \"shift+ctrl+r\"},\n\n    encode_decode_data_url: {\"mac\": \"shift+ctrl+d\", \"win\": \"ctrl+'\"},\n    expand_abbreviation_with_tab: \"Tab\",\n    wrap_with_abbreviation: {\"mac\": \"shift+ctrl+a\", \"win\": \"shift+ctrl+a\"}\n};\n\nvar editorProxy = new AceEmmetEditor();\nexports.commands = new HashHandler();\nexports.runEmmetCommand = function runEmmetCommand(editor) {\n    try {\n        editorProxy.setupContext(editor);\n        var actions = emmet.actions || emmet.require(\"actions\");\n    \n        if (this.action == \"expand_abbreviation_with_tab\") {\n            if (!editor.selection.isEmpty())\n                return false;\n            var pos = editor.selection.lead;\n            var token = editor.session.getTokenAt(pos.row, pos.column);\n            if (token && /\\btag\\b/.test(token.type))\n                return false;\n        }\n        \n        if (this.action == \"wrap_with_abbreviation\") {\n            return setTimeout(function() {\n                actions.run(\"wrap_with_abbreviation\", editorProxy);\n            }, 0);\n        }\n        \n        var result = actions.run(this.action, editorProxy);\n    } catch(e) {\n        if (!emmet) {\n            exports.load(runEmmetCommand.bind(this, editor));\n            return true;\n        }\n        editor._signal(\"changeStatus\", typeof e == \"string\" ? e : e.message);\n        console.log(e);\n        result = false;\n    }\n    return result;\n};\n\nfor (var command in keymap) {\n    exports.commands.addCommand({\n        name: \"emmet:\" + command,\n        action: command,\n        bindKey: keymap[command],\n        exec: exports.runEmmetCommand,\n        multiSelectAction: \"forEach\"\n    });\n}\n\nexports.updateCommands = function(editor, enabled) {\n    if (enabled) {\n        editor.keyBinding.addKeyboardHandler(exports.commands);\n    } else {\n        editor.keyBinding.removeKeyboardHandler(exports.commands);\n    }\n};\n\nexports.isSupportedMode = function(mode) {\n    if (!mode) return false;\n    if (mode.emmetConfig) return true;\n    var id = mode.$id || mode;\n    return /css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(id);\n};\n\nexports.isAvailable = function(editor, command) {\n    if (/(evaluate_math_expression|expand_abbreviation)$/.test(command))\n        return true;\n    var mode = editor.session.$mode;\n    var isSupported = exports.isSupportedMode(mode);\n    if (isSupported && mode.$modes) {\n        try {\n            editorProxy.setupContext(editor);\n            if (/js|php/.test(editorProxy.getSyntax()))\n                isSupported = false;\n        } catch(e) {}\n    }\n    return isSupported;\n};\n\nvar onChangeMode = function(e, target) {\n    var editor = target;\n    if (!editor)\n        return;\n    var enabled = exports.isSupportedMode(editor.session.$mode);\n    if (e.enableEmmet === false)\n        enabled = false;\n    if (enabled)\n        exports.load();\n    exports.updateCommands(editor, enabled);\n};\n\nexports.load = function(cb) {\n    if (typeof emmetPath == \"string\") {\n        require(\"ace/config\").loadModule(emmetPath, function() {\n            emmetPath = null;\n            cb && cb();\n        });\n    }\n};\n\nexports.AceEmmetEditor = AceEmmetEditor;\nrequire(\"ace/config\").defineOptions(Editor.prototype, \"editor\", {\n    enableEmmet: {\n        set: function(val) {\n            this[val ? \"on\" : \"removeListener\"](\"changeMode\", onChangeMode);\n            onChangeMode({enableEmmet: !!val}, this);\n        },\n        value: true\n    }\n});\n\nexports.setCore = function(e) {\n    if (typeof e == \"string\")\n       emmetPath = e;\n    else\n       emmet = e;\n};\n});                (function() {\n                    ace.require([\"ace/ext/emmet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-error_marker.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/ext/error_marker\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-keybinding_menu.js",
    "content": "ace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = \"#ace_settingsmenu, #kbshortcutmenu {\\\nbackground-color: #F7F7F7;\\\ncolor: black;\\\nbox-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\\npadding: 1em 0.5em 2em 1em;\\\noverflow: auto;\\\nposition: absolute;\\\nmargin: 0;\\\nbottom: 0;\\\nright: 0;\\\ntop: 0;\\\nz-index: 9991;\\\ncursor: default;\\\n}\\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\\nbox-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\\nbackground-color: rgba(255, 255, 255, 0.6);\\\ncolor: black;\\\n}\\\n.ace_optionsMenuEntry:hover {\\\nbackground-color: rgba(100, 100, 100, 0.1);\\\ntransition: all 0.3s\\\n}\\\n.ace_closeButton {\\\nbackground: rgba(245, 146, 146, 0.5);\\\nborder: 1px solid #F48A8A;\\\nborder-radius: 50%;\\\npadding: 7px;\\\nposition: absolute;\\\nright: -8px;\\\ntop: -8px;\\\nz-index: 100000;\\\n}\\\n.ace_closeButton{\\\nbackground: rgba(245, 146, 146, 0.9);\\\n}\\\n.ace_optionsMenuKey {\\\ncolor: darkslateblue;\\\nfont-weight: bold;\\\n}\\\n.ace_optionsMenuCommand {\\\ncolor: darkcyan;\\\nfont-weight: normal;\\\n}\\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\\nvertical-align: middle;\\\n}\\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\\nbackground: #e7e7e7;\\\nbox-shadow: 1px 0px 2px 0px #adadad inset;\\\nborder-color: #adadad;\\\n}\\\n.ace_optionsMenuEntry button {\\\nbackground: white;\\\nborder: 1px solid lightgray;\\\nmargin: 0px;\\\n}\\\n.ace_optionsMenuEntry button:hover{\\\nbackground: #f0f0f0;\\\n}\";\ndom.importCssString(cssText);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {\n    top = top ? 'top: ' + top + ';' : '';\n    bottom = bottom ? 'bottom: ' + bottom + ';' : '';\n    right = right ? 'right: ' + right + ';' : '';\n    left = left ? 'left: ' + left + ';' : '';\n\n    var closer = document.createElement('div');\n    var contentContainer = document.createElement('div');\n\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            closer.click();\n        }\n    }\n\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        'background-color: rgba(0, 0, 0, 0.3);';\n    closer.addEventListener('click', function() {\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        editor.focus();\n        closer = null;\n    });\n    document.addEventListener('keydown', documentEscListener);\n\n    contentContainer.style.cssText = top + right + bottom + left;\n    contentContainer.addEventListener('click', function(e) {\n        e.stopPropagation();\n    });\n\n    var wrapper = dom.createElement(\"div\");\n    wrapper.style.position = \"relative\";\n    \n    var closeButton = dom.createElement(\"div\");\n    closeButton.className = \"ace_closeButton\";\n    closeButton.addEventListener('click', function() {\n        closer.click();\n    });\n    \n    wrapper.appendChild(closeButton);\n    contentContainer.appendChild(wrapper);\n    \n    contentContainer.appendChild(contentElement);\n    closer.appendChild(contentContainer);\n    document.body.appendChild(closer);\n    editor.blur();\n};\n\n});\n\nace.define(\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\nvar keys = require(\"../../lib/keys\");\nmodule.exports.getEditorKeybordShortcuts = function(editor) {\n    var KEY_MODS = keys.KEY_MODS;\n    var keybindings = [];\n    var commandMap = {};\n    editor.keyBinding.$handlers.forEach(function(handler) {\n        var ckb = handler.commandKeyBinding;\n        for (var i in ckb) {\n            var key = i.replace(/(^|-)\\w/g, function(x) { return x.toUpperCase(); });\n            var commands = ckb[i];\n            if (!Array.isArray(commands))\n                commands = [commands];\n            commands.forEach(function(command) {\n                if (typeof command != \"string\")\n                    command  = command.name;\n                if (commandMap[command]) {\n                    commandMap[command].key += \"|\" + key;\n                } else {\n                    commandMap[command] = {key: key, command: command};\n                    keybindings.push(commandMap[command]);\n                }         \n            });\n        }\n    });\n    return keybindings;\n};\n\n});\n\nace.define(\"ace/ext/keybinding_menu\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/ext/menu_tools/overlay_page\",\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\"], function(require, exports, module) {\n    \"use strict\";\n    var Editor = require(\"ace/editor\").Editor;\n    function showKeyboardShortcuts (editor) {\n        if(!document.getElementById('kbshortcutmenu')) {\n            var overlayPage = require('./menu_tools/overlay_page').overlayPage;\n            var getEditorKeybordShortcuts = require('./menu_tools/get_editor_keyboard_shortcuts').getEditorKeybordShortcuts;\n            var kb = getEditorKeybordShortcuts(editor);\n            var el = document.createElement('div');\n            var commands = kb.reduce(function(previous, current) {\n                return previous + '<div class=\"ace_optionsMenuEntry\"><span class=\"ace_optionsMenuCommand\">' \n                    + current.command + '</span> : '\n                    + '<span class=\"ace_optionsMenuKey\">' + current.key + '</span></div>';\n            }, '');\n\n            el.id = 'kbshortcutmenu';\n            el.innerHTML = '<h1>Keyboard Shortcuts</h1>' + commands + '</div>';\n            overlayPage(editor, el, '0', '0', '0', null);\n        }\n    }\n    module.exports.init = function(editor) {\n        Editor.prototype.showKeyboardShortcuts = function() {\n            showKeyboardShortcuts(this);\n        };\n        editor.commands.addCommands([{\n            name: \"showKeyboardShortcuts\",\n            bindKey: {win: \"Ctrl-Alt-h\", mac: \"Command-Alt-h\"},\n            exec: function(editor, line) {\n                editor.showKeyboardShortcuts();\n            }\n        }]);\n    };\n\n});                (function() {\n                    ace.require([\"ace/ext/keybinding_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-language_tools.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    \n    this.getTokenizer = function() {\n        function TabstopToken(str, _, stack) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str) && !stack.inFormatString)\n                return [{tabstopId: parseInt(str, 10)}];\n            return [{text: str}];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                {regex: /:/, onMatch: function(val, state, stack) {\n                    if (stack.length && stack[0].expectIf) {\n                        stack[0].expectIf = false;\n                        stack[0].elseBranch = stack[0];\n                        return [stack[0]];\n                    }\n                    return \":\";\n                }},\n                {regex: /\\\\./, onMatch: function(val, state, stack) {\n                    var ch = val[1];\n                    if (ch == \"}\" && stack.length) {\n                        val = ch;\n                    }else if (\"`$\\\\\".indexOf(ch) != -1) {\n                        val = ch;\n                    } else if (stack.inFormatString) {\n                        if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\n\";\n                        else if (\"ulULE\".indexOf(ch) != -1) {\n                            val = {changeCase: ch, local: ch > \"a\"};\n                        }\n                    }\n\n                    return [val];\n                }},\n                {regex: /}/, onMatch: function(val, state, stack) {\n                    return [stack.length ? stack.shift() : val];\n                }},\n                {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n                {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n                    var t = TabstopToken(str.substr(1), state, stack);\n                    stack.unshift(t[0]);\n                    return t;\n                }, next: \"snippetVar\"},\n                {regex: /\\n/, token: \"newline\", merge: false}\n            ],\n            snippetVar: [\n                {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n                    stack[0].choices = val.slice(1, -1).split(\",\");\n                }, next: \"start\"},\n                {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n                 onMatch: function(val, state, stack) {\n                    var ts = stack[0];\n                    ts.fmtString = val;\n\n                    val = this.splitRegex.exec(val);\n                    ts.guard = val[1];\n                    ts.fmt = val[2];\n                    ts.flag = val[3];\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n                    stack[0].code = val.splice(1, -1);\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n                    if (stack[0])\n                        stack[0].expectIf = true;\n                }, next: \"start\"},\n                {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n            ],\n            formatString: [\n                {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n                {regex: \"\", onMatch: function(val, state, stack) {\n                    stack.inFormatString = true;\n                }, next: \"start\"}\n            ]\n        });\n        SnippetManager.prototype.getTokenizer = function() {\n            return SnippetManager.$tokenizer;\n        };\n        return SnippetManager.$tokenizer;\n    };\n\n    this.tokenizeTmSnippet = function(str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n            return x.value || x;\n        });\n    };\n\n    this.$getDefaultValue = function(editor, name) {\n        if (/^[A-Z]\\d+$/.test(name)) {\n            var i = name.substr(1);\n            return (this.variables[name[0] + \"__\"] || {})[i];\n        }\n        if (/^\\d+$/.test(name)) {\n            return (this.variables.__ || {})[name];\n        }\n        name = name.replace(/^TM_/, \"\");\n\n        if (!editor)\n            return;\n        var s = editor.session;\n        switch(name) {\n            case \"CURRENT_WORD\":\n                var r = s.getWordRange();\n            case \"SELECTION\":\n            case \"SELECTED_TEXT\":\n                return s.getTextRange(r);\n            case \"CURRENT_LINE\":\n                return s.getLine(editor.getCursorPosition().row);\n            case \"PREV_LINE\": // not possible in textmate\n                return s.getLine(editor.getCursorPosition().row - 1);\n            case \"LINE_INDEX\":\n                return editor.getCursorPosition().column;\n            case \"LINE_NUMBER\":\n                return editor.getCursorPosition().row + 1;\n            case \"SOFT_TABS\":\n                return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n            case \"TAB_SIZE\":\n                return s.getTabSize();\n            case \"FILENAME\":\n            case \"FILEPATH\":\n                return \"\";\n            case \"FULLNAME\":\n                return \"Ace\";\n        }\n    };\n    this.variables = {};\n    this.getVariableValue = function(editor, varName) {\n        if (this.variables.hasOwnProperty(varName))\n            return this.variables[varName](editor, varName) || \"\";\n        return this.$getDefaultValue(editor, varName) || \"\";\n    };\n    this.tmStrFormat = function(str, ch, editor) {\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n        var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n        var _self = this;\n        var formatted = str.replace(re, function() {\n            _self.variables.__ = arguments;\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i  = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    } else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                } else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                } else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            return fmtParts.join(\"\");\n        });\n        this.variables.__ = null;\n        return formatted;\n    };\n\n    this.resolveVariables = function(snippet, editor) {\n        var result = [];\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n            } else if (typeof ch != \"object\") {\n                continue;\n            } else if (ch.skip) {\n                gotoNext(ch);\n            } else if (ch.processed < i) {\n                continue;\n            } else if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text);\n                if (value && ch.fmtString)\n                    value = this.tmStrFormat(value, ch);\n                ch.processed = i;\n                if (ch.expectIf == null) {\n                    if (value) {\n                        result.push(value);\n                        gotoNext(ch);\n                    }\n                } else {\n                    if (value) {\n                        ch.skip = ch.elseBranch;\n                    } else\n                        gotoNext(ch);\n                }\n            } else if (ch.tabstopId != null) {\n                result.push(ch);\n            } else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n\n    this.insertSnippetForSelection = function(editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        \n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function(x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function(p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function(t) {return typeof t === \"object\";});\n            if (isNested && !ts.value) {\n                ts.value = value;\n            } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function(ts) {ts.length = 0;});\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || {tabstopId: p.tabstopId};\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p)\n                    expanding[id] = null;\n                continue;\n            }\n            \n            var ts = tabstops[id];\n            var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n            arg.unshift(i + 1, Math.max(0, i1 - i));\n            arg.push(p);\n            expanding[id] = p;\n            tokens.splice.apply(tokens, arg);\n\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function(t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1){\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                } else\n                    column += t.length;\n                text += t;\n            } else {\n                if (!t.start)\n                    t.start = {row: row, column: column};\n                else\n                    t.end = {row: row, column: column};\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    \n    this.insertSnippet = function(editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        \n        editor.forEachSelection(function() {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, {keepOrder: true});\n        \n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n\n    this.$getScope = function(editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        \n        return scope;\n    };\n\n    this.getActiveScopes = function(editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n\n    this.expandWithTab = function(editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function() {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, {keepOrder: true});\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    \n    this.expandSnippetForSelection = function(editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row,\n            cursor.column - snippet.replaceBefore.length,\n            cursor.column + snippet.replaceAfter.length\n        );\n\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n\n    this.findMatchingSnippet = function(snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        \n        if (!snippets) \n            snippets = [];\n        \n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            } else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            \n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            \n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n\n        if (snippets && snippets.content)\n            addSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(addSnippet);\n        \n        this._signal(\"registerSnippets\", {scope: scope});\n    };\n    this.unregister = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope||scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope||scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function(str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                } catch (e) {}\n            } if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            } else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                } else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                } else {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function(name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function() {\n    this.attach = function(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function() {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n\n    this.onChange = function(delta) {\n        var changeRange = delta;\n        var isRemove = delta.action[0] == \"r\";\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n        var colDiff = end.column - start.column;\n\n        if (isRemove) {\n            lineDif = -lineDif;\n            colDiff = -colDiff;\n        }\n        if (!this.$inChange && isRemove) {\n            var ts = this.selectedTabstop;\n            var changedOutside = ts && !ts.some(function(r) {\n                return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n            });\n            if (changedOutside)\n                return this.detach();\n        }\n        var ranges = this.ranges;\n        for (var i = 0; i < ranges.length; i++) {\n            var r = ranges[i];\n            if (r.end.row < start.row)\n                continue;\n\n            if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n                this.removeRange(r);\n                i--;\n                continue;\n            }\n\n            if (r.start.row == startRow && r.start.column > start.column)\n                r.start.column += colDiff;\n            if (r.end.row == startRow && r.end.column >= start.column)\n                r.end.column += colDiff;\n            if (r.start.row >= startRow)\n                r.start.row += lineDif;\n            if (r.end.row >= startRow)\n                r.end.row += lineDif;\n\n            if (comparePoints(r.start, r.end) > 0)\n                this.removeRange(r);\n        }\n        if (!ranges.length)\n            this.detach();\n    };\n    this.updateLinkedFields = function() {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = ts.length; i--;) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function(e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function() {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = this.ranges.length; i--;) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function() {\n        this.detach();\n    };\n    this.tabNext = function(dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function(index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        \n        this.selectedTabstop = ts;\n        if (!this.editor.inVirtualSelectionMode) {        \n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(ts.firstNonLinked.clone());\n            for (var i = ts.length; i--;) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n            if (sel.ranges[0])\n                sel.addRange(sel.ranges[0].clone());\n        } else {\n            this.editor.selection.setRange(ts.firstNonLinked);\n        }\n        \n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.addTabstops = function(tabstops, start, end) {\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function(ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n                \n            for (var i = ts.length; i--;) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                } else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n        }, this);\n        \n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n\n    this.addTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            if  (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function(range) {\n        var i = range.tabstop.indexOf(range);\n        range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        this.ranges.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function(ed) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n                return;\n            }\n\n            ed.tabstopManager.tabNext(1);\n        },\n        \"Shift-Tab\": function(ed) {\n            ed.tabstopManager.tabNext(-1);\n        },\n        \"Esc\": function(ed) {\n            ed.tabstopManager.detach();\n        },\n        \"Return\": function(ed) {\n            return false;\n        }\n    });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n    this.pos.row = row;\n    this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n    this.$insertRight = $insertRight;\n    this.pos = pos; \n    this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n    -moz-box-sizing: border-box;\\\n    box-sizing: border-box;\\\n    background: rgba(194, 193, 208, 0.09);\\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\\n    position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.insertSnippet = function(content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function(options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\n\nvar $singleLineEditor = function(el) {\n    var renderer = new Renderer(el);\n\n    renderer.$maxLines = 4;\n\n    var editor = new Editor(renderer);\n\n    editor.setHighlightActiveLine(false);\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n\n    editor.$mouseHandler.$focusTimeout = 0;\n    editor.$highlightTagPending = true;\n\n    return editor;\n};\n\nvar AcePopup = function(parentNode) {\n    var el = dom.createElement(\"div\");\n    var popup = new $singleLineEditor(el);\n\n    if (parentNode)\n        parentNode.appendChild(el);\n    el.style.display = \"none\";\n    popup.renderer.content.style.cursor = \"default\";\n    popup.renderer.setStyle(\"ace_autocomplete\");\n\n    popup.setOption(\"displayIndentGuides\", false);\n    popup.setOption(\"dragDelay\", 150);\n\n    var noop = function(){};\n\n    popup.focus = noop;\n    popup.$isFocused = true;\n\n    popup.renderer.$cursorLayer.restartTimer = noop;\n    popup.renderer.$cursorLayer.element.style.opacity = 0;\n\n    popup.renderer.$maxLines = 8;\n    popup.renderer.$keepTextAreaAtCursor = false;\n\n    popup.setHighlightActiveLine(false);\n    popup.session.highlight(\"\");\n    popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n\n    popup.on(\"mousedown\", function(e) {\n        var pos = e.getDocumentPosition();\n        popup.selection.moveToPosition(pos);\n        selectionMarker.start.row = selectionMarker.end.row = pos.row;\n        e.stop();\n    });\n\n    var lastMouseEvent;\n    var hoverMarker = new Range(-1,0,-1,Infinity);\n    var selectionMarker = new Range(-1,0,-1,Infinity);\n    selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n    popup.setSelectOnHover = function(val) {\n        if (!val) {\n            hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n        } else if (hoverMarker.id) {\n            popup.session.removeMarker(hoverMarker.id);\n            hoverMarker.id = null;\n        }\n    };\n    popup.setSelectOnHover(false);\n    popup.on(\"mousemove\", function(e) {\n        if (!lastMouseEvent) {\n            lastMouseEvent = e;\n            return;\n        }\n        if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n            return;\n        }\n        lastMouseEvent = e;\n        lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n        var row = lastMouseEvent.getDocumentPosition().row;\n        if (hoverMarker.start.row != row) {\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row);\n        }\n    });\n    popup.renderer.on(\"beforeRender\", function() {\n        if (lastMouseEvent && hoverMarker.start.row != -1) {\n            lastMouseEvent.$pos = null;\n            var row = lastMouseEvent.getDocumentPosition().row;\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row, true);\n        }\n    });\n    popup.renderer.on(\"afterRender\", function() {\n        var row = popup.getRow();\n        var t = popup.renderer.$textLayer;\n        var selected = t.element.childNodes[row - t.config.firstRow];\n        if (selected !== t.selectedNode && t.selectedNode)\n            dom.removeCssClass(t.selectedNode, \"ace_selected\");\n        t.selectedNode = selected;\n        if (selected)\n            dom.addCssClass(selected, \"ace_selected\");\n    });\n    var hideHoverMarker = function() { setHoverMarker(-1); };\n    var setHoverMarker = function(row, suppressRedraw) {\n        if (row !== hoverMarker.start.row) {\n            hoverMarker.start.row = hoverMarker.end.row = row;\n            if (!suppressRedraw)\n                popup.session._emit(\"changeBackMarker\");\n            popup._emit(\"changeHoverMarker\");\n        }\n    };\n    popup.getHoveredRow = function() {\n        return hoverMarker.start.row;\n    };\n\n    event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n    popup.on(\"hide\", hideHoverMarker);\n    popup.on(\"changeSelection\", hideHoverMarker);\n\n    popup.session.doc.getLength = function() {\n        return popup.data.length;\n    };\n    popup.session.doc.getLine = function(i) {\n        var data = popup.data[i];\n        if (typeof data == \"string\")\n            return data;\n        return (data && data.value) || \"\";\n    };\n\n    var bgTokenizer = popup.session.bgTokenizer;\n    bgTokenizer.$tokenizeRow = function(row) {\n        var data = popup.data[row];\n        var tokens = [];\n        if (!data)\n            return tokens;\n        if (typeof data == \"string\")\n            data = {value: data};\n        var caption = data.caption || data.value || data.name;\n\n        function addToken(value, className) {\n            value && tokens.push({\n                type: (data.className || \"\") + (className || \"\"), \n                value: value\n            });\n        }\n        \n        var lower = caption.toLowerCase();\n        var filterText = (popup.filterText || \"\").toLowerCase();\n        var lastIndex = 0;\n        var lastI = 0;\n        for (var i = 0; i <= filterText.length; i++) {\n            if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n                var sub = filterText.slice(lastI, i);\n                lastI = i;\n                var index = lower.indexOf(sub, lastIndex);\n                if (index == -1) continue;\n                addToken(caption.slice(lastIndex, index), \"\");\n                lastIndex = index + sub.length;\n                addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n            }\n        }\n        addToken(caption.slice(lastIndex, caption.length), \"\");\n        \n        if (data.meta)\n            tokens.push({type: \"completion-meta\", value: data.meta});\n\n        return tokens;\n    };\n    bgTokenizer.$updateOnChange = noop;\n    bgTokenizer.start = noop;\n\n    popup.session.$computeWidth = function() {\n        return this.screenWidth = 0;\n    };\n    popup.isOpen = false;\n    popup.isTopdown = false;\n    popup.autoSelect = true;\n    popup.filterText = \"\";\n\n    popup.data = [];\n    popup.setData = function(list, filterText) {\n        popup.filterText = filterText || \"\";\n        popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n        popup.data = list || [];\n        popup.setRow(0);\n    };\n    popup.getData = function(row) {\n        return popup.data[row];\n    };\n\n    popup.getRow = function() {\n        return selectionMarker.start.row;\n    };\n    popup.setRow = function(line) {\n        line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n        if (selectionMarker.start.row != line) {\n            popup.selection.clearSelection();\n            selectionMarker.start.row = selectionMarker.end.row = line || 0;\n            popup.session._emit(\"changeBackMarker\");\n            popup.moveCursorTo(line || 0, 0);\n            if (popup.isOpen)\n                popup._signal(\"select\");\n        }\n    };\n\n    popup.on(\"changeSelection\", function() {\n        if (popup.isOpen)\n            popup.setRow(popup.selection.lead.row);\n        popup.renderer.scrollCursorIntoView();\n    });\n\n    popup.hide = function() {\n        this.container.style.display = \"none\";\n        this._signal(\"hide\");\n        popup.isOpen = false;\n    };\n    popup.show = function(pos, lineHeight, topdownOnly) {\n        var el = this.container;\n        var screenHeight = window.innerHeight;\n        var screenWidth = window.innerWidth;\n        var renderer = this.renderer;\n        var maxH = renderer.$maxLines * lineHeight * 1.4;\n        var top = pos.top + this.$borderSize;\n        var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n        if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n            renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n            el.style.top = \"\";\n            el.style.bottom = screenHeight - top + \"px\";\n            popup.isTopdown = false;\n        } else {\n            top += lineHeight;\n            renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n            el.style.top = top + \"px\";\n            el.style.bottom = \"\";\n            popup.isTopdown = true;\n        }\n\n        el.style.display = \"\";\n\n        var left = pos.left;\n        if (left + el.offsetWidth > screenWidth)\n            left = screenWidth - el.offsetWidth;\n\n        el.style.left = left + \"px\";\n\n        this._signal(\"show\");\n        lastMouseEvent = null;\n        popup.isOpen = true;\n    };\n\n    popup.getTextLeftOffset = function() {\n        return this.$borderSize + this.renderer.$padding + this.$imageSize;\n    };\n\n    popup.$imageSize = 0;\n    popup.$borderSize = 1;\n\n    return popup;\n};\n\ndom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n    background-color: #CAD6FA;\\\n    z-index: 1;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n    background-color: #3a674e;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n    border: 1px solid #abbffe;\\\n    margin-top: -1px;\\\n    background: rgba(233,233,253,0.4);\\\n    position: absolute;\\\n    z-index: 2;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\\n    border: 1px solid rgba(109, 150, 13, 0.8);\\\n    background: rgba(58, 103, 78, 0.62);\\\n}\\\n.ace_completion-meta {\\\n    opacity: 0.5;\\\n    margin: 0.9em;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n    color: #2d69c7;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n    color: #93ca12;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n    width: 300px;\\\n    z-index: 200000;\\\n    border: 1px lightgray solid;\\\n    position: fixed;\\\n    box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n    line-height: 1.4;\\\n    background: #fefefe;\\\n    color: #111;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete {\\\n    border: 1px #484747 solid;\\\n    box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\\n    line-height: 1.4;\\\n    background: #25282c;\\\n    color: #c1c1c1;\\\n}\", \"autocompletion.css\");\n\nexports.AcePopup = AcePopup;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.parForEach = function(array, fn, callback) {\n    var completed = 0;\n    var arLength = array.length;\n    if (arLength === 0)\n        callback();\n    for (var i = 0; i < arLength; i++) {\n        fn(array[i], function(result, err) {\n            completed++;\n            if (completed === arLength)\n                callback(result, err);\n        });\n    }\n};\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;\n\nexports.retrievePrecedingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos-1; i >= 0; i--) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf.reverse().join(\"\");\n};\n\nexports.retrieveFollowingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos; i < text.length; i++) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf;\n};\n\nexports.getCompletionPrefix = function (editor) {\n    var pos = editor.getCursorPosition();\n    var line = editor.session.getLine(pos.row);\n    var prefix;\n    editor.completers.forEach(function(completer) {\n        if (completer.identifierRegexps) {\n            completer.identifierRegexps.forEach(function(identifierRegex) {\n                if (!prefix && identifierRegex)\n                    prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n            }.bind(this));\n        }\n    }.bind(this));\n    return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\"], function(require, exports, module) {\n\"use strict\";\n\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\n\nvar Autocomplete = function() {\n    this.autoInsert = false;\n    this.autoSelect = true;\n    this.exactMatch = false;\n    this.gatherCompletionsId = 0;\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys(this.commands);\n\n    this.blurListener = this.blurListener.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.mousedownListener = this.mousedownListener.bind(this);\n    this.mousewheelListener = this.mousewheelListener.bind(this);\n\n    this.changeTimer = lang.delayedCall(function() {\n        this.updateCompletions(true);\n    }.bind(this));\n\n    this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n\n(function() {\n\n    this.$init = function() {\n        this.popup = new AcePopup(document.body || document.documentElement);\n        this.popup.on(\"click\", function(e) {\n            this.insertMatch();\n            e.stop();\n        }.bind(this));\n        this.popup.focus = this.editor.focus.bind(this.editor);\n        this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n        return this.popup;\n    };\n\n    this.getPopup = function() {\n        return this.popup || this.$init();\n    };\n\n    this.openPopup = function(editor, prefix, keepPopupPosition) {\n        if (!this.popup)\n            this.$init();\n\n        this.popup.autoSelect = this.autoSelect;\n\n        this.popup.setData(this.completions.filtered, this.completions.filterText);\n\n        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        \n        var renderer = editor.renderer;\n        this.popup.setRow(this.autoSelect ? 0 : -1);\n        if (!keepPopupPosition) {\n            this.popup.setTheme(editor.getTheme());\n            this.popup.setFontSize(editor.getFontSize());\n\n            var lineHeight = renderer.layerConfig.lineHeight;\n\n            var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n            pos.left -= this.popup.getTextLeftOffset();\n\n            var rect = editor.container.getBoundingClientRect();\n            pos.top += rect.top - renderer.layerConfig.offset;\n            pos.left += rect.left - editor.renderer.scrollLeft;\n            pos.left += renderer.gutterWidth;\n\n            this.popup.show(pos, lineHeight);\n        } else if (keepPopupPosition && !prefix) {\n            this.detach();\n        }\n    };\n\n    this.detach = function() {\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.off(\"changeSelection\", this.changeListener);\n        this.editor.off(\"blur\", this.blurListener);\n        this.editor.off(\"mousedown\", this.mousedownListener);\n        this.editor.off(\"mousewheel\", this.mousewheelListener);\n        this.changeTimer.cancel();\n        this.hideDocTooltip();\n\n        this.gatherCompletionsId += 1;\n        if (this.popup && this.popup.isOpen)\n            this.popup.hide();\n\n        if (this.base)\n            this.base.detach();\n        this.activated = false;\n        this.completions = this.base = null;\n    };\n\n    this.changeListener = function(e) {\n        var cursor = this.editor.selection.lead;\n        if (cursor.row != this.base.row || cursor.column < this.base.column) {\n            this.detach();\n        }\n        if (this.activated)\n            this.changeTimer.schedule();\n        else\n            this.detach();\n    };\n\n    this.blurListener = function(e) {\n        var el = document.activeElement;\n        var text = this.editor.textInput.getElement();\n        var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n        var container = this.popup && this.popup.container;\n        if (el != text && el.parentNode != container && !fromTooltip\n            && el != this.tooltipNode && e.relatedTarget != text\n        ) {\n            this.detach();\n        }\n    };\n\n    this.mousedownListener = function(e) {\n        this.detach();\n    };\n\n    this.mousewheelListener = function(e) {\n        this.detach();\n    };\n\n    this.goTo = function(where) {\n        var row = this.popup.getRow();\n        var max = this.popup.session.getLength() - 1;\n\n        switch(where) {\n            case \"up\": row = row <= 0 ? max : row - 1; break;\n            case \"down\": row = row >= max ? -1 : row + 1; break;\n            case \"start\": row = 0; break;\n            case \"end\": row = max; break;\n        }\n\n        this.popup.setRow(row);\n    };\n\n    this.insertMatch = function(data, options) {\n        if (!data)\n            data = this.popup.getData(this.popup.getRow());\n        if (!data)\n            return false;\n\n        if (data.completer && data.completer.insertMatch) {\n            data.completer.insertMatch(this.editor, data);\n        } else {\n            if (this.completions.filterText) {\n                var ranges = this.editor.selection.getAllRanges();\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= this.completions.filterText.length;\n                    this.editor.session.remove(range);\n                }\n            }\n            if (data.snippet)\n                snippetManager.insertSnippet(this.editor, data.snippet);\n            else\n                this.editor.execCommand(\"insertstring\", data.value || data);\n        }\n        this.detach();\n    };\n\n\n    this.commands = {\n        \"Up\": function(editor) { editor.completer.goTo(\"up\"); },\n        \"Down\": function(editor) { editor.completer.goTo(\"down\"); },\n        \"Ctrl-Up|Ctrl-Home\": function(editor) { editor.completer.goTo(\"start\"); },\n        \"Ctrl-Down|Ctrl-End\": function(editor) { editor.completer.goTo(\"end\"); },\n\n        \"Esc\": function(editor) { editor.completer.detach(); },\n        \"Return\": function(editor) { return editor.completer.insertMatch(); },\n        \"Shift-Return\": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); },\n        \"Tab\": function(editor) {\n            var result = editor.completer.insertMatch();\n            if (!result && !editor.tabstopManager)\n                editor.completer.goTo(\"down\");\n            else\n                return result;\n        },\n\n        \"PageUp\": function(editor) { editor.completer.popup.gotoPageUp(); },\n        \"PageDown\": function(editor) { editor.completer.popup.gotoPageDown(); }\n    };\n\n    this.gatherCompletions = function(editor, callback) {\n        var session = editor.getSession();\n        var pos = editor.getCursorPosition();\n\n        var prefix = util.getCompletionPrefix(editor);\n\n        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n        this.base.$insertRight = true;\n\n        var matches = [];\n        var total = editor.completers.length;\n        editor.completers.forEach(function(completer, i) {\n            completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n                if (!err && results)\n                    matches = matches.concat(results);\n                callback(null, {\n                    prefix: util.getCompletionPrefix(editor),\n                    matches: matches,\n                    finished: (--total === 0)\n                });\n            });\n        });\n        return true;\n    };\n\n    this.showPopup = function(editor) {\n        if (this.editor)\n            this.detach();\n\n        this.activated = true;\n\n        this.editor = editor;\n        if (editor.completer != this) {\n            if (editor.completer)\n                editor.completer.detach();\n            editor.completer = this;\n        }\n\n        editor.on(\"changeSelection\", this.changeListener);\n        editor.on(\"blur\", this.blurListener);\n        editor.on(\"mousedown\", this.mousedownListener);\n        editor.on(\"mousewheel\", this.mousewheelListener);\n\n        this.updateCompletions();\n    };\n\n    this.updateCompletions = function(keepPopupPosition) {\n        if (keepPopupPosition && this.base && this.completions) {\n            var pos = this.editor.getCursorPosition();\n            var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n            if (prefix == this.completions.filterText)\n                return;\n            this.completions.setFilter(prefix);\n            if (!this.completions.filtered.length)\n                return this.detach();\n            if (this.completions.filtered.length == 1\n            && this.completions.filtered[0].value == prefix\n            && !this.completions.filtered[0].snippet)\n                return this.detach();\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            return;\n        }\n        var _id = this.gatherCompletionsId;\n        this.gatherCompletions(this.editor, function(err, results) {\n            var detachIfFinished = function() {\n                if (!results.finished) return;\n                return this.detach();\n            }.bind(this);\n\n            var prefix = results.prefix;\n            var matches = results && results.matches;\n\n            if (!matches || !matches.length)\n                return detachIfFinished();\n            if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n                return;\n\n            this.completions = new FilteredList(matches);\n\n            if (this.exactMatch)\n                this.completions.exactMatch = true;\n\n            this.completions.setFilter(prefix);\n            var filtered = this.completions.filtered;\n            if (!filtered.length)\n                return detachIfFinished();\n            if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n                return detachIfFinished();\n            if (this.autoInsert && filtered.length == 1 && results.finished)\n                return this.insertMatch(filtered[0]);\n\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n        }.bind(this));\n    };\n\n    this.cancelContextMenu = function() {\n        this.editor.$mouseHandler.cancelContextMenu();\n    };\n\n    this.updateDocTooltip = function() {\n        var popup = this.popup;\n        var all = popup.data;\n        var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n        var doc = null;\n        if (!selected || !this.editor || !this.popup.isOpen)\n            return this.hideDocTooltip();\n        this.editor.completers.some(function(completer) {\n            if (completer.getDocTooltip)\n                doc = completer.getDocTooltip(selected);\n            return doc;\n        });\n        if (!doc)\n            doc = selected;\n\n        if (typeof doc == \"string\")\n            doc = {docText: doc};\n        if (!doc || !(doc.docHTML || doc.docText))\n            return this.hideDocTooltip();\n        this.showDocTooltip(doc);\n    };\n\n    this.showDocTooltip = function(item) {\n        if (!this.tooltipNode) {\n            this.tooltipNode = dom.createElement(\"div\");\n            this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n            this.tooltipNode.style.margin = 0;\n            this.tooltipNode.style.pointerEvents = \"auto\";\n            this.tooltipNode.tabIndex = -1;\n            this.tooltipNode.onblur = this.blurListener.bind(this);\n            this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n        }\n\n        var tooltipNode = this.tooltipNode;\n        if (item.docHTML) {\n            tooltipNode.innerHTML = item.docHTML;\n        } else if (item.docText) {\n            tooltipNode.textContent = item.docText;\n        }\n\n        if (!tooltipNode.parentNode)\n            document.body.appendChild(tooltipNode);\n        var popup = this.popup;\n        var rect = popup.container.getBoundingClientRect();\n        tooltipNode.style.top = popup.container.style.top;\n        tooltipNode.style.bottom = popup.container.style.bottom;\n\n        tooltipNode.style.display = \"block\";\n        if (window.innerWidth - rect.right < 320) {\n            if (rect.left < 320) {\n                if(popup.isTopdown) {\n                    tooltipNode.style.top = rect.bottom + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                } else {\n                    tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                }\n            } else {\n                tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n                tooltipNode.style.left = \"\";\n            }\n        } else {\n            tooltipNode.style.left = (rect.right + 1) + \"px\";\n            tooltipNode.style.right = \"\";\n        }\n    };\n\n    this.hideDocTooltip = function() {\n        this.tooltipTimer.cancel();\n        if (!this.tooltipNode) return;\n        var el = this.tooltipNode;\n        if (!this.editor.isFocused() && document.activeElement == el)\n            this.editor.focus();\n        this.tooltipNode = null;\n        if (el.parentNode)\n            el.parentNode.removeChild(el);\n    };\n    \n    this.onTooltipClick = function(e) {\n        var a = e.target;\n        while (a && a != this.tooltipNode) {\n            if (a.nodeName == \"A\" && a.href) {\n                a.rel = \"noreferrer\";\n                a.target = \"_blank\";\n                break;\n            }\n            a = a.parentNode;\n        }\n    };\n\n}).call(Autocomplete.prototype);\n\nAutocomplete.startCommand = {\n    name: \"startAutocomplete\",\n    exec: function(editor) {\n        if (!editor.completer)\n            editor.completer = new Autocomplete();\n        editor.completer.autoInsert = false;\n        editor.completer.autoSelect = true;\n        editor.completer.showPopup(editor);\n        editor.completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\n\nvar FilteredList = function(array, filterText) {\n    this.all = array;\n    this.filtered = array;\n    this.filterText = filterText || \"\";\n    this.exactMatch = false;\n};\n(function(){\n    this.setFilter = function(str) {\n        if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n            var matches = this.filtered;\n        else\n            var matches = this.all;\n\n        this.filterText = str;\n        matches = this.filterCompletions(matches, this.filterText);\n        matches = matches.sort(function(a, b) {\n            return b.exactMatch - a.exactMatch || b.$score - a.$score \n                || (a.caption || a.value) < (b.caption || b.value);\n        });\n        var prev = null;\n        matches = matches.filter(function(item){\n            var caption = item.snippet || item.caption || item.value;\n            if (caption === prev) return false;\n            prev = caption;\n            return true;\n        });\n\n        this.filtered = matches;\n    };\n    this.filterCompletions = function(items, needle) {\n        var results = [];\n        var upper = needle.toUpperCase();\n        var lower = needle.toLowerCase();\n        loop: for (var i = 0, item; item = items[i]; i++) {\n            var caption = item.caption || item.value || item.snippet;\n            if (!caption) continue;\n            var lastIndex = -1;\n            var matchMask = 0;\n            var penalty = 0;\n            var index, distance;\n\n            if (this.exactMatch) {\n                if (needle !== caption.substr(0, needle.length))\n                    continue loop;\n            } else {\n                var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n                if (fullMatchIndex > -1) {\n                    penalty = fullMatchIndex;\n                } else {\n                    for (var j = 0; j < needle.length; j++) {\n                        var i1 = caption.indexOf(lower[j], lastIndex + 1);\n                        var i2 = caption.indexOf(upper[j], lastIndex + 1);\n                        index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n                        if (index < 0)\n                            continue loop;\n                        distance = index - lastIndex - 1;\n                        if (distance > 0) {\n                            if (lastIndex === -1)\n                                penalty += 10;\n                            penalty += distance;\n                            matchMask = matchMask | (1 << j);\n                        }\n                        lastIndex = index;\n                    }\n                }\n            }\n            item.matchMask = matchMask;\n            item.exactMatch = penalty ? 0 : 1;\n            item.$score = (item.score || 0) - penalty;\n            results.push(item);\n        }\n        return results;\n    };\n}).call(FilteredList.prototype);\n\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n    var Range = require(\"../range\").Range;\n    \n    var splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n\n    function getWordIndex(doc, pos) {\n        var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));\n        return textBefore.split(splitRegex).length - 1;\n    }\n    function wordDistance(doc, pos) {\n        var prefixPos = getWordIndex(doc, pos);\n        var words = doc.getValue().split(splitRegex);\n        var wordScores = Object.create(null);\n        \n        var currentWord = words[prefixPos];\n\n        words.forEach(function(word, idx) {\n            if (!word || word === currentWord) return;\n\n            var distance = Math.abs(prefixPos - idx);\n            var score = words.length - distance;\n            if (wordScores[word]) {\n                wordScores[word] = Math.max(score, wordScores[word]);\n            } else {\n                wordScores[word] = score;\n            }\n        });\n        return wordScores;\n    }\n\n    exports.getCompletions = function(editor, session, pos, prefix, callback) {\n        var wordScore = wordDistance(session, pos);\n        var wordList = Object.keys(wordScore);\n        callback(null, wordList.map(function(word) {\n            return {\n                caption: word,\n                value: word,\n                score: wordScore[word],\n                meta: \"local\"\n            };\n        }));\n    };\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\n\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        if (session.$mode.completer) {\n            return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n        }\n        var state = editor.session.getState(pos.row);\n        var completions = session.$mode.getCompletions(state, session, pos, prefix);\n        callback(null, completions);\n    }\n};\n\nvar snippetCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        var scopes = [];\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n            scopes.push('html-tag');\n        else\n            scopes = snippetManager.getActiveScopes(editor);\n\n        var snippetMap = snippetManager.snippetMap;\n        var completions = [];\n        scopes.forEach(function(scope) {\n            var snippets = snippetMap[scope] || [];\n            for (var i = snippets.length; i--;) {\n                var s = snippets[i];\n                var caption = s.name || s.tabTrigger;\n                if (!caption)\n                    continue;\n                completions.push({\n                    caption: caption,\n                    snippet: s.content,\n                    meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n                    type: \"snippet\"\n                });\n            }\n        }, this);\n        callback(null, completions);\n    },\n    getDocTooltip: function(item) {\n        if (item.type == \"snippet\" && !item.docHTML) {\n            item.docHTML = [\n                \"<b>\", lang.escapeHTML(item.caption), \"</b>\", \"<hr></hr>\",\n                lang.escapeHTML(item.snippet)\n            ].join(\"\");\n        }\n    }\n};\n\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function(val) {\n    completers.length = 0;\n    if (val) completers.push.apply(completers, val);\n};\nexports.addCompleter = function(completer) {\n    completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\n\nvar expandSnippet = {\n    name: \"expandSnippet\",\n    exec: function(editor) {\n        return snippetManager.expandWithTab(editor);\n    },\n    bindKey: \"Tab\"\n};\n\nvar onChangeMode = function(e, editor) {\n    loadSnippetsForMode(editor.session.$mode);\n};\n\nvar loadSnippetsForMode = function(mode) {\n    var id = mode.$id;\n    if (!snippetManager.files)\n        snippetManager.files = {};\n    loadSnippetFile(id);\n    if (mode.modes)\n        mode.modes.forEach(loadSnippetsForMode);\n};\n\nvar loadSnippetFile = function(id) {\n    if (!id || snippetManager.files[id])\n        return;\n    var snippetFilePath = id.replace(\"mode\", \"snippets\");\n    snippetManager.files[id] = {};\n    config.loadModule(snippetFilePath, function(m) {\n        if (m) {\n            snippetManager.files[id] = m;\n            if (!m.snippets && m.snippetText)\n                m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n            snippetManager.register(m.snippets || [], m.scope);\n            if (m.includeScopes) {\n                snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n                m.includeScopes.forEach(function(x) {\n                    loadSnippetFile(\"ace/mode/\" + x);\n                });\n            }\n        }\n    });\n};\n\nvar doLiveAutocomplete = function(e) {\n    var editor = e.editor;\n    var hasCompleter = editor.completer && editor.completer.activated;\n    if (e.command.name === \"backspace\") {\n        if (hasCompleter && !util.getCompletionPrefix(editor))\n            editor.completer.detach();\n    }\n    else if (e.command.name === \"insertstring\") {\n        var prefix = util.getCompletionPrefix(editor);\n        if (prefix && !hasCompleter) {\n            if (!editor.completer) {\n                editor.completer = new Autocomplete();\n            }\n            editor.completer.autoInsert = false;\n            editor.completer.showPopup(editor);\n        }\n    }\n};\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableBasicAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                this.commands.addCommand(Autocomplete.startCommand);\n            } else {\n                this.commands.removeCommand(Autocomplete.startCommand);\n            }\n        },\n        value: false\n    },\n    enableLiveAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                this.commands.on('afterExec', doLiveAutocomplete);\n            } else {\n                this.commands.removeListener('afterExec', doLiveAutocomplete);\n            }\n        },\n        value: false\n    },\n    enableSnippets: {\n        set: function(val) {\n            if (val) {\n                this.commands.addCommand(expandSnippet);\n                this.on(\"changeMode\", onChangeMode);\n                onChangeMode(null, this);\n            } else {\n                this.commands.removeCommand(expandSnippet);\n                this.off(\"changeMode\", onChangeMode);\n            }\n        },\n        value: false\n    }\n});\n});                (function() {\n                    ace.require([\"ace/ext/language_tools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-linking.js",
    "content": "ace.define(\"ace/ext/linking\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\nvar Editor = require(\"ace/editor\").Editor;\n\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableLinking: {\n        set: function(val) {\n            if (val) {\n                this.on(\"click\", onClick);\n                this.on(\"mousemove\", onMouseMove);\n            } else {\n                this.off(\"click\", onClick);\n                this.off(\"mousemove\", onMouseMove);\n            }\n        },\n        value: false\n    }\n});\n\nexports.previousLinkingHover = false;\n\nfunction onMouseMove(e) {\n    var editor = e.editor;\n    var ctrl = e.getAccelKey();\n\n    if (ctrl) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var session = editor.session;\n        var token = session.getTokenAt(docPos.row, docPos.column);\n\n        if (exports.previousLinkingHover && exports.previousLinkingHover != token) {\n            editor._emit(\"linkHoverOut\");\n        }\n        editor._emit(\"linkHover\", {position: docPos, token: token});\n        exports.previousLinkingHover = token;\n    } else if (exports.previousLinkingHover) {\n        editor._emit(\"linkHoverOut\");\n        exports.previousLinkingHover = false;\n    }\n}\n\nfunction onClick(e) {\n    var ctrl = e.getAccelKey();\n    var button = e.getButton();\n\n    if (button == 0 && ctrl) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var session = editor.session;\n        var token = session.getTokenAt(docPos.row, docPos.column);\n\n        editor._emit(\"linkClick\", {position: docPos, token: token});\n    }\n}\n\n});                (function() {\n                    ace.require([\"ace/ext/linking\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-modelist.js",
    "content": "ace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\n\nvar Mode = function(name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function(a, b){\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    } else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n\n    this.extRe = new RegExp(re, \"gi\");\n};\n\nMode.prototype.supportsFile = function(filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP:        [\"abap\"],\n    ABC:         [\"abc\"],\n    ActionScript:[\"as\"],\n    ADA:         [\"ada|adb\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    AsciiDoc:    [\"asciidoc|adoc\"],\n    ASL:         [\"dsl|asl\"],\n    Assembly_x86:[\"asm|a\"],\n    AutoHotKey:  [\"ahk\"],\n    Apex:        [\"apex|cls|trigger|tgr\"],\n    BatchFile:   [\"bat|cmd\"],\n    Bro:         [\"bro\"],\n    C_Cpp:       [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search:    [\"c9search_results\"],\n    Cirru:       [\"cirru|cr\"],\n    Clojure:     [\"clj|cljs\"],\n    Cobol:       [\"CBL|COB\"],\n    coffee:      [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion:  [\"cfm\"],\n    CSharp:      [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS:         [\"css\"],\n    Curly:       [\"curly\"],\n    D:           [\"d|di\"],\n    Dart:        [\"dart\"],\n    Diff:        [\"diff|patch\"],\n    Dockerfile:  [\"^Dockerfile\"],\n    Dot:         [\"dot\"],\n    Drools:      [\"drl\"],\n    Edifact:     [\"edi\"],\n    Eiffel:      [\"e|ge\"],\n    EJS:         [\"ejs\"],\n    Elixir:      [\"ex|exs\"],\n    Elm:         [\"elm\"],\n    Erlang:      [\"erl|hrl\"],\n    Forth:       [\"frt|fs|ldr|fth|4th\"],\n    Fortran:     [\"f|f90\"],\n    FSharp:      [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL:         [\"fsl\"],\n    FTL:         [\"ftl\"],\n    Gcode:       [\"gcode\"],\n    Gherkin:     [\"feature\"],\n    Gitignore:   [\"^.gitignore\"],\n    Glsl:        [\"glsl|frag|vert\"],\n    Gobstones:   [\"gbs\"],\n    golang:      [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy:      [\"groovy\"],\n    HAML:        [\"haml\"],\n    Handlebars:  [\"hbs|handlebars|tpl|mustache\"],\n    Haskell:     [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe:        [\"hx\"],\n    Hjson:       [\"hjson\"],\n    HTML:        [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby:   [\"erb|rhtml|html.erb\"],\n    INI:         [\"ini|conf|cfg|prefs\"],\n    Io:          [\"io\"],\n    Jack:        [\"jack\"],\n    Jade:        [\"jade|pug\"],\n    Java:        [\"java\"],\n    JavaScript:  [\"js|jsm|jsx\"],\n    JSON:        [\"json\"],\n    JSONiq:      [\"jq\"],\n    JSP:         [\"jsp\"],\n    JSSM:        [\"jssm|jssm_state\"],\n    JSX:         [\"jsx\"],\n    Julia:       [\"jl\"],\n    Kotlin:      [\"kt|kts\"],\n    LaTeX:       [\"tex|latex|ltx|bib\"],\n    LESS:        [\"less\"],\n    Liquid:      [\"liquid\"],\n    Lisp:        [\"lisp\"],\n    LiveScript:  [\"ls\"],\n    LogiQL:      [\"logic|lql\"],\n    LSL:         [\"lsl\"],\n    Lua:         [\"lua\"],\n    LuaPage:     [\"lp\"],\n    Lucene:      [\"lucene\"],\n    Makefile:    [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown:    [\"md|markdown\"],\n    Mask:        [\"mask\"],\n    MATLAB:      [\"matlab\"],\n    Maze:        [\"mz\"],\n    MEL:         [\"mel\"],\n    MIXAL:       [\"mixal\"],\n    MUSHCode:    [\"mc|mush\"],\n    MySQL:       [\"mysql\"],\n    Nix:         [\"nix\"],\n    NSIS:        [\"nsi|nsh\"],\n    ObjectiveC:  [\"m|mm\"],\n    OCaml:       [\"ml|mli\"],\n    Pascal:      [\"pas|p\"],\n    Perl:        [\"pl|pm\"],\n    Perl6:       [\"p6|pl6|pm6\"],\n    pgSQL:       [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP:         [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Puppet:      [\"epp|pp\"],\n    Pig:         [\"pig\"],\n    Powershell:  [\"ps1\"],\n    Praat:       [\"praat|praatscript|psc|proc\"],\n    Prolog:      [\"plg|prolog\"],\n    Properties:  [\"properties\"],\n    Protobuf:    [\"proto\"],\n    Python:      [\"py\"],\n    R:           [\"r\"],\n    Razor:       [\"cshtml|asp\"],\n    RDoc:        [\"Rd\"],\n    Red:         [\"red|reds\"],\n    RHTML:       [\"Rhtml\"],\n    RST:         [\"rst\"],\n    Ruby:        [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust:        [\"rs\"],\n    SASS:        [\"sass\"],\n    SCAD:        [\"scad\"],\n    Scala:       [\"scala\"],\n    Scheme:      [\"scm|sm|rkt|oak|scheme\"],\n    SCSS:        [\"scss\"],\n    SH:          [\"sh|bash|^.bashrc\"],\n    SJS:         [\"sjs\"],\n    Slim:        [\"slim|skim\"],\n    Smarty:      [\"smarty|tpl\"],\n    snippets:    [\"snippets\"],\n    Soy_Template:[\"soy\"],\n    Space:       [\"space\"],\n    SQL:         [\"sql\"],\n    SQLServer:   [\"sqlserver\"],\n    Stylus:      [\"styl|stylus\"],\n    SVG:         [\"svg\"],\n    Swift:       [\"swift\"],\n    Tcl:         [\"tcl\"],\n    Terraform:   [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex:         [\"tex\"],\n    Text:        [\"txt\"],\n    Textile:     [\"textile\"],\n    Toml:        [\"toml\"],\n    TSX:         [\"tsx\"],\n    Twig:        [\"latte|twig|swig\"],\n    Typescript:  [\"ts|typescript|str\"],\n    Vala:        [\"vala\"],\n    VBScript:    [\"vbs|vb\"],\n    Velocity:    [\"vm\"],\n    Verilog:     [\"v|vh|sv|svh\"],\n    VHDL:        [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok:      [\"wlk|wpgm|wtest\"],\n    XML:         [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery:      [\"xq\"],\n    YAML:        [\"yaml|yml\"],\n    Django:      [\"html\"]\n};\n\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\n\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/modelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-options.js",
    "content": "ace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = \"#ace_settingsmenu, #kbshortcutmenu {\\\nbackground-color: #F7F7F7;\\\ncolor: black;\\\nbox-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\\npadding: 1em 0.5em 2em 1em;\\\noverflow: auto;\\\nposition: absolute;\\\nmargin: 0;\\\nbottom: 0;\\\nright: 0;\\\ntop: 0;\\\nz-index: 9991;\\\ncursor: default;\\\n}\\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\\nbox-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\\nbackground-color: rgba(255, 255, 255, 0.6);\\\ncolor: black;\\\n}\\\n.ace_optionsMenuEntry:hover {\\\nbackground-color: rgba(100, 100, 100, 0.1);\\\ntransition: all 0.3s\\\n}\\\n.ace_closeButton {\\\nbackground: rgba(245, 146, 146, 0.5);\\\nborder: 1px solid #F48A8A;\\\nborder-radius: 50%;\\\npadding: 7px;\\\nposition: absolute;\\\nright: -8px;\\\ntop: -8px;\\\nz-index: 100000;\\\n}\\\n.ace_closeButton{\\\nbackground: rgba(245, 146, 146, 0.9);\\\n}\\\n.ace_optionsMenuKey {\\\ncolor: darkslateblue;\\\nfont-weight: bold;\\\n}\\\n.ace_optionsMenuCommand {\\\ncolor: darkcyan;\\\nfont-weight: normal;\\\n}\\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\\nvertical-align: middle;\\\n}\\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\\nbackground: #e7e7e7;\\\nbox-shadow: 1px 0px 2px 0px #adadad inset;\\\nborder-color: #adadad;\\\n}\\\n.ace_optionsMenuEntry button {\\\nbackground: white;\\\nborder: 1px solid lightgray;\\\nmargin: 0px;\\\n}\\\n.ace_optionsMenuEntry button:hover{\\\nbackground: #f0f0f0;\\\n}\";\ndom.importCssString(cssText);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {\n    top = top ? 'top: ' + top + ';' : '';\n    bottom = bottom ? 'bottom: ' + bottom + ';' : '';\n    right = right ? 'right: ' + right + ';' : '';\n    left = left ? 'left: ' + left + ';' : '';\n\n    var closer = document.createElement('div');\n    var contentContainer = document.createElement('div');\n\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            closer.click();\n        }\n    }\n\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        'background-color: rgba(0, 0, 0, 0.3);';\n    closer.addEventListener('click', function() {\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        editor.focus();\n        closer = null;\n    });\n    document.addEventListener('keydown', documentEscListener);\n\n    contentContainer.style.cssText = top + right + bottom + left;\n    contentContainer.addEventListener('click', function(e) {\n        e.stopPropagation();\n    });\n\n    var wrapper = dom.createElement(\"div\");\n    wrapper.style.position = \"relative\";\n    \n    var closeButton = dom.createElement(\"div\");\n    closeButton.className = \"ace_closeButton\";\n    closeButton.addEventListener('click', function() {\n        closer.click();\n    });\n    \n    wrapper.appendChild(closeButton);\n    contentContainer.appendChild(wrapper);\n    \n    contentContainer.appendChild(contentElement);\n    closer.appendChild(contentContainer);\n    document.body.appendChild(closer);\n    editor.blur();\n};\n\n});\n\nace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\n\nvar Mode = function(name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function(a, b){\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    } else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n\n    this.extRe = new RegExp(re, \"gi\");\n};\n\nMode.prototype.supportsFile = function(filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP:        [\"abap\"],\n    ABC:         [\"abc\"],\n    ActionScript:[\"as\"],\n    ADA:         [\"ada|adb\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    AsciiDoc:    [\"asciidoc|adoc\"],\n    ASL:         [\"dsl|asl\"],\n    Assembly_x86:[\"asm|a\"],\n    AutoHotKey:  [\"ahk\"],\n    Apex:        [\"apex|cls|trigger|tgr\"],\n    BatchFile:   [\"bat|cmd\"],\n    Bro:         [\"bro\"],\n    C_Cpp:       [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search:    [\"c9search_results\"],\n    Cirru:       [\"cirru|cr\"],\n    Clojure:     [\"clj|cljs\"],\n    Cobol:       [\"CBL|COB\"],\n    coffee:      [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion:  [\"cfm\"],\n    CSharp:      [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS:         [\"css\"],\n    Curly:       [\"curly\"],\n    D:           [\"d|di\"],\n    Dart:        [\"dart\"],\n    Diff:        [\"diff|patch\"],\n    Dockerfile:  [\"^Dockerfile\"],\n    Dot:         [\"dot\"],\n    Drools:      [\"drl\"],\n    Edifact:     [\"edi\"],\n    Eiffel:      [\"e|ge\"],\n    EJS:         [\"ejs\"],\n    Elixir:      [\"ex|exs\"],\n    Elm:         [\"elm\"],\n    Erlang:      [\"erl|hrl\"],\n    Forth:       [\"frt|fs|ldr|fth|4th\"],\n    Fortran:     [\"f|f90\"],\n    FSharp:      [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL:         [\"fsl\"],\n    FTL:         [\"ftl\"],\n    Gcode:       [\"gcode\"],\n    Gherkin:     [\"feature\"],\n    Gitignore:   [\"^.gitignore\"],\n    Glsl:        [\"glsl|frag|vert\"],\n    Gobstones:   [\"gbs\"],\n    golang:      [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy:      [\"groovy\"],\n    HAML:        [\"haml\"],\n    Handlebars:  [\"hbs|handlebars|tpl|mustache\"],\n    Haskell:     [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe:        [\"hx\"],\n    Hjson:       [\"hjson\"],\n    HTML:        [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby:   [\"erb|rhtml|html.erb\"],\n    INI:         [\"ini|conf|cfg|prefs\"],\n    Io:          [\"io\"],\n    Jack:        [\"jack\"],\n    Jade:        [\"jade|pug\"],\n    Java:        [\"java\"],\n    JavaScript:  [\"js|jsm|jsx\"],\n    JSON:        [\"json\"],\n    JSONiq:      [\"jq\"],\n    JSP:         [\"jsp\"],\n    JSSM:        [\"jssm|jssm_state\"],\n    JSX:         [\"jsx\"],\n    Julia:       [\"jl\"],\n    Kotlin:      [\"kt|kts\"],\n    LaTeX:       [\"tex|latex|ltx|bib\"],\n    LESS:        [\"less\"],\n    Liquid:      [\"liquid\"],\n    Lisp:        [\"lisp\"],\n    LiveScript:  [\"ls\"],\n    LogiQL:      [\"logic|lql\"],\n    LSL:         [\"lsl\"],\n    Lua:         [\"lua\"],\n    LuaPage:     [\"lp\"],\n    Lucene:      [\"lucene\"],\n    Makefile:    [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown:    [\"md|markdown\"],\n    Mask:        [\"mask\"],\n    MATLAB:      [\"matlab\"],\n    Maze:        [\"mz\"],\n    MEL:         [\"mel\"],\n    MIXAL:       [\"mixal\"],\n    MUSHCode:    [\"mc|mush\"],\n    MySQL:       [\"mysql\"],\n    Nix:         [\"nix\"],\n    NSIS:        [\"nsi|nsh\"],\n    ObjectiveC:  [\"m|mm\"],\n    OCaml:       [\"ml|mli\"],\n    Pascal:      [\"pas|p\"],\n    Perl:        [\"pl|pm\"],\n    Perl6:       [\"p6|pl6|pm6\"],\n    pgSQL:       [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP:         [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Puppet:      [\"epp|pp\"],\n    Pig:         [\"pig\"],\n    Powershell:  [\"ps1\"],\n    Praat:       [\"praat|praatscript|psc|proc\"],\n    Prolog:      [\"plg|prolog\"],\n    Properties:  [\"properties\"],\n    Protobuf:    [\"proto\"],\n    Python:      [\"py\"],\n    R:           [\"r\"],\n    Razor:       [\"cshtml|asp\"],\n    RDoc:        [\"Rd\"],\n    Red:         [\"red|reds\"],\n    RHTML:       [\"Rhtml\"],\n    RST:         [\"rst\"],\n    Ruby:        [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust:        [\"rs\"],\n    SASS:        [\"sass\"],\n    SCAD:        [\"scad\"],\n    Scala:       [\"scala\"],\n    Scheme:      [\"scm|sm|rkt|oak|scheme\"],\n    SCSS:        [\"scss\"],\n    SH:          [\"sh|bash|^.bashrc\"],\n    SJS:         [\"sjs\"],\n    Slim:        [\"slim|skim\"],\n    Smarty:      [\"smarty|tpl\"],\n    snippets:    [\"snippets\"],\n    Soy_Template:[\"soy\"],\n    Space:       [\"space\"],\n    SQL:         [\"sql\"],\n    SQLServer:   [\"sqlserver\"],\n    Stylus:      [\"styl|stylus\"],\n    SVG:         [\"svg\"],\n    Swift:       [\"swift\"],\n    Tcl:         [\"tcl\"],\n    Terraform:   [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex:         [\"tex\"],\n    Text:        [\"txt\"],\n    Textile:     [\"textile\"],\n    Toml:        [\"toml\"],\n    TSX:         [\"tsx\"],\n    Twig:        [\"latte|twig|swig\"],\n    Typescript:  [\"ts|typescript|str\"],\n    Vala:        [\"vala\"],\n    VBScript:    [\"vbs|vb\"],\n    Velocity:    [\"vm\"],\n    Verilog:     [\"v|vh|sv|svh\"],\n    VHDL:        [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok:      [\"wlk|wpgm|wtest\"],\n    XML:         [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery:      [\"xq\"],\n    YAML:        [\"yaml|yml\"],\n    Django:      [\"html\"]\n};\n\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\n\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n\nace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar themeData = [\n    [\"Chrome\"         ],\n    [\"Clouds\"         ],\n    [\"Crimson Editor\" ],\n    [\"Dawn\"           ],\n    [\"Dreamweaver\"    ],\n    [\"Eclipse\"        ],\n    [\"GitHub\"         ],\n    [\"IPlastic\"       ],\n    [\"Solarized Light\"],\n    [\"TextMate\"       ],\n    [\"Tomorrow\"       ],\n    [\"XCode\"          ],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\"           ,\"sqlserver\"               , \"light\"],\n    [\"Ambiance\"             ,\"ambiance\"                ,  \"dark\"],\n    [\"Chaos\"                ,\"chaos\"                   ,  \"dark\"],\n    [\"Clouds Midnight\"      ,\"clouds_midnight\"         ,  \"dark\"],\n    [\"Dracula\"              ,\"\"                        ,  \"dark\"],\n    [\"Cobalt\"               ,\"cobalt\"                  ,  \"dark\"],\n    [\"Gruvbox\"              ,\"gruvbox\"                 ,  \"dark\"],\n    [\"Green on Black\"       ,\"gob\"                     ,  \"dark\"],\n    [\"idle Fingers\"         ,\"idle_fingers\"            ,  \"dark\"],\n    [\"krTheme\"              ,\"kr_theme\"                ,  \"dark\"],\n    [\"Merbivore\"            ,\"merbivore\"               ,  \"dark\"],\n    [\"Merbivore Soft\"       ,\"merbivore_soft\"          ,  \"dark\"],\n    [\"Mono Industrial\"      ,\"mono_industrial\"         ,  \"dark\"],\n    [\"Monokai\"              ,\"monokai\"                 ,  \"dark\"],\n    [\"Pastel on dark\"       ,\"pastel_on_dark\"          ,  \"dark\"],\n    [\"Solarized Dark\"       ,\"solarized_dark\"          ,  \"dark\"],\n    [\"Terminal\"             ,\"terminal\"                ,  \"dark\"],\n    [\"Tomorrow Night\"       ,\"tomorrow_night\"          ,  \"dark\"],\n    [\"Tomorrow Night Blue\"  ,\"tomorrow_night_blue\"     ,  \"dark\"],\n    [\"Tomorrow Night Bright\",\"tomorrow_night_bright\"   ,  \"dark\"],\n    [\"Tomorrow Night 80s\"   ,\"tomorrow_night_eighties\" ,  \"dark\"],\n    [\"Twilight\"             ,\"twilight\"                ,  \"dark\"],\n    [\"Vibrant Ink\"          ,\"vibrant_ink\"             ,  \"dark\"]\n];\n\n\nexports.themesByName = {};\nexports.themes = themeData.map(function(data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});\n\nace.define(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"], function(require, exports, module) {\n\"use strict\";\nvar overlayPage = require('./menu_tools/overlay_page').overlayPage;\n\n \nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar buildDom = dom.buildDom;\n\nvar modelist = require(\"./modelist\");\nvar themelist = require(\"./themelist\");\n\nvar themes = { Bright: [], Dark: [] };\nthemelist.themes.forEach(function(x) {\n    themes[x.isDark ? \"Dark\" : \"Bright\"].push({ caption: x.caption, value: x.theme });\n});\n\nvar modes = modelist.modes.map(function(x){ \n    return { caption: x.caption, value: x.mode }; \n});\n\n\nvar optionGroups = {\n    Main: {\n        Mode: {\n            path: \"mode\",\n            type: \"select\",\n            items: modes\n        },\n        Theme: {\n            path: \"theme\",\n            type: \"select\",\n            items: themes\n        },\n        \"Keybinding\": {\n            type: \"buttonBar\",\n            path: \"keyboardHandler\",\n            items: [\n                { caption : \"Ace\", value : null },\n                { caption : \"Vim\", value : \"ace/keyboard/vim\" },\n                { caption : \"Emacs\", value : \"ace/keyboard/emacs\" },\n                { caption : \"Sublime\", value : \"ace/keyboard/sublime\" }\n            ]\n        },\n        \"Font Size\": {\n            path: \"fontSize\",\n            type: \"number\",\n            defaultValue: 12,\n            defaults: [\n                {caption: \"12px\", value: 12},\n                {caption: \"24px\", value: 24}\n            ]\n        },\n        \"Soft Wrap\": {\n            type: \"buttonBar\",\n            path: \"wrap\",\n            items: [\n               { caption : \"Off\",  value : \"off\" },\n               { caption : \"View\", value : \"free\" },\n               { caption : \"margin\", value : \"printMargin\" },\n               { caption : \"40\",   value : \"40\" }\n            ]\n        },\n        \"Cursor Style\": {\n            path: \"cursorStyle\",\n            items: [\n               { caption : \"Ace\",    value : \"ace\" },\n               { caption : \"Slim\",   value : \"slim\" },\n               { caption : \"Smooth\", value : \"smooth\" },\n               { caption : \"Smooth And Slim\", value : \"smooth slim\" },\n               { caption : \"Wide\",   value : \"wide\" }\n            ]\n        },\n        \"Folding\": {\n            path: \"foldStyle\",\n            items: [\n                { caption : \"Manual\", value : \"manual\" },\n                { caption : \"Mark begin\", value : \"markbegin\" },\n                { caption : \"Mark begin and end\", value : \"markbeginend\" }\n            ]\n        },\n        \"Soft Tabs\": [{\n            path: \"useSoftTabs\"\n        }, {\n            path: \"tabSize\",\n            type: \"number\",\n            values: [2, 3, 4, 8, 16]\n        }],\n        \"Overscroll\": {\n            type: \"buttonBar\",\n            path: \"scrollPastEnd\",\n            items: [\n               { caption : \"None\",  value : 0 },\n               { caption : \"Half\",   value : 0.5 },\n               { caption : \"Full\",   value : 1 }\n            ]\n        }\n    },\n    More: {\n        \"Atomic soft tabs\": {\n            path: \"navigateWithinSoftTabs\"\n        },\n        \"Enable Behaviours\": {\n            path: \"behavioursEnabled\"\n        },\n        \"Full Line Selection\": {\n            type: \"checkbox\",\n            values: \"text|line\",\n            path: \"selectionStyle\"\n        },\n        \"Highlight Active Line\": {\n            path: \"highlightActiveLine\"\n        },\n        \"Show Invisibles\": {\n            path: \"showInvisibles\"\n        },\n        \"Show Indent Guides\": {\n            path: \"displayIndentGuides\"\n        },\n        \"Persistent Scrollbar\": [{\n            path: \"hScrollBarAlwaysVisible\"\n        }, {\n            path: \"vScrollBarAlwaysVisible\"\n        }],\n        \"Animate scrolling\": {\n            path: \"animatedScroll\"\n        },\n        \"Show Gutter\": {\n            path: \"showGutter\"\n        },\n        \"Show Line Numbers\": {\n            path: \"showLineNumbers\"\n        },\n        \"Relative Line Numbers\": {\n            path: \"relativeLineNumbers\"\n        },\n        \"Fixed Gutter Width\": {\n            path: \"fixedWidthGutter\"\n        },\n        \"Show Print Margin\": [{\n            path: \"showPrintMargin\"\n        }, {\n            type: \"number\",\n            path: \"printMarginColumn\"\n        }],\n        \"Indented Soft Wrap\": {\n            path: \"indentedSoftWrap\"\n        },\n        \"Highlight selected word\": {\n            path: \"highlightSelectedWord\"\n        },\n        \"Fade Fold Widgets\": {\n            path: \"fadeFoldWidgets\"\n        },\n        \"Use textarea for IME\": {\n            path: \"useTextareaForIME\"\n        },\n        \"Merge Undo Deltas\": {\n            path: \"mergeUndoDeltas\",\n            items: [\n               { caption : \"Always\",  value : \"always\" },\n               { caption : \"Never\",   value : \"false\" },\n               { caption : \"Timed\",   value : \"true\" }\n            ]\n        },\n        \"Elastic Tabstops\": {\n            path: \"useElasticTabstops\"\n        },\n        \"Incremental Search\": {\n            path: \"useIncrementalSearch\"\n        },\n        \"Read-only\": {\n            path: \"readOnly\"\n        },\n        \"Copy without selection\": {\n            path: \"copyWithEmptySelection\"\n        },\n        \"Live Autocompletion\": {\n            path: \"enableLiveAutocompletion\"\n        }\n    }\n};\n\n\nvar OptionPanel = function(editor, element) {\n    this.editor = editor;\n    this.container = element || document.createElement(\"div\");\n    this.groups = [];\n    this.options = {};\n};\n\n(function() {\n    \n    oop.implement(this, EventEmitter);\n    \n    this.add = function(config) {\n        if (config.Main)\n            oop.mixin(optionGroups.Main, config.Main);\n        if (config.More)\n            oop.mixin(optionGroups.More, config.More);\n    };\n    \n    this.render = function() {\n        this.container.innerHTML = \"\";\n        buildDom([\"table\", {id: \"controls\"}, \n            this.renderOptionGroup(optionGroups.Main),\n            [\"tr\", null, [\"td\", {colspan: 2},\n                [\"table\", {id: \"more-controls\"}, \n                    this.renderOptionGroup(optionGroups.More)\n                ]\n            ]]\n        ], this.container);\n    };\n    \n    this.renderOptionGroup = function(group) {\n        return Object.keys(group).map(function(key, i) {\n            var item = group[key];\n            if (!item.position)\n                item.position = i / 10000;\n            if (!item.label)\n                item.label = key;\n            return item;\n        }).sort(function(a, b) {\n            return a.position - b.position;\n        }).map(function(item) {\n            return this.renderOption(item.label, item);\n        }, this);\n    };\n    \n    this.renderOptionControl = function(key, option) {\n        var self = this;\n        if (Array.isArray(option)) {\n            return option.map(function(x) {\n                return self.renderOptionControl(key, x);\n            });\n        }\n        var control;\n        \n        var value = self.getOption(option);\n        \n        if (option.values && option.type != \"checkbox\") {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            option.items = option.values.map(function(v) {\n                return { value: v, name: v };\n            });\n        }\n        \n        if (option.type == \"buttonBar\") {\n            control = [\"div\", option.items.map(function(item) {\n                return [\"button\", { \n                    value: item.value, \n                    ace_selected_button: value == item.value, \n                    onclick: function() {\n                        self.setOption(option, item.value);\n                        var nodes = this.parentNode.querySelectorAll(\"[ace_selected_button]\");\n                        for (var i = 0; i < nodes.length; i++) {\n                            nodes[i].removeAttribute(\"ace_selected_button\");\n                        }\n                        this.setAttribute(\"ace_selected_button\", true);\n                    } \n                }, item.desc || item.caption || item.name];\n            })];\n        } else if (option.type == \"number\") {\n            control = [\"input\", {type: \"number\", value: value || option.defaultValue, style:\"width:3em\", oninput: function() {\n                self.setOption(option, parseInt(this.value));\n            }}];\n            if (option.defaults) {\n                control = [control, option.defaults.map(function(item) {\n                    return [\"button\", {onclick: function() {\n                        var input = this.parentNode.firstChild;\n                        input.value = item.value;\n                        input.oninput();\n                    }}, item.caption];\n                })];\n            }\n        } else if (option.items) {\n            var buildItems = function(items) {\n                return items.map(function(item) {\n                    return [\"option\", { value: item.value || item.name }, item.desc || item.caption || item.name];\n                });\n            };\n            \n            var items = Array.isArray(option.items) \n                ? buildItems(option.items)\n                : Object.keys(option.items).map(function(key) {\n                    return [\"optgroup\", {\"label\": key}, buildItems(option.items[key])];\n                });\n            control = [\"select\", { id: key, value: value, onchange: function() {\n                self.setOption(option, this.value);\n            } }, items];\n        } else {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            if (option.values) value = value == option.values[1];\n            control = [\"input\", { type: \"checkbox\", id: key, checked: value || null, onchange: function() {\n                var value = this.checked;\n                if (option.values) value = option.values[value ? 1 : 0];\n                self.setOption(option, value);\n            }}];\n            if (option.type == \"checkedNumber\") {\n                control = [control, []];\n            }\n        }\n        return control;\n    };\n    \n    this.renderOption = function(key, option) {\n        if (option.path && !option.onchange && !this.editor.$options[option.path])\n            return;\n        this.options[option.path] = option;\n        var safeKey = \"-\" + option.path;\n        var control = this.renderOptionControl(safeKey, option);\n        return [\"tr\", {class: \"ace_optionsMenuEntry\"}, [\"td\",\n            [\"label\", {for: safeKey}, key]\n        ], [\"td\", control]];\n    };\n    \n    this.setOption = function(option, value) {\n        if (typeof option == \"string\")\n            option = this.options[option];\n        if (value == \"false\") value = false;\n        if (value == \"true\") value = true;\n        if (value == \"null\") value = null;\n        if (value == \"undefined\") value = undefined;\n        if (typeof value == \"string\" && parseFloat(value).toString() == value)\n            value = parseFloat(value);\n        if (option.onchange)\n            option.onchange(value);\n        else if (option.path)\n            this.editor.setOption(option.path, value);\n        this._signal(\"setOption\", {name: option.path, value: value});\n    };\n    \n    this.getOption = function(option) {\n        if (option.getValue)\n            return option.getValue();\n        return this.editor.getOption(option.path);\n    };\n    \n}).call(OptionPanel.prototype);\n\nexports.OptionPanel = OptionPanel;\n\n});                (function() {\n                    ace.require([\"ace/ext/options\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-rtl.js",
    "content": "ace.define(\"ace/ext/rtl\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"ace/lib/dom\");\nvar lang = require(\"ace/lib/lang\");\n\nvar commands = [{\n    name: \"leftToRight\",\n    bindKey: { win: \"Ctrl-Alt-Shift-L\", mac: \"Command-Alt-Shift-L\" },\n    exec: function(editor) {\n        editor.session.$bidiHandler.setRtlDirection(editor, false);\n    },\n    readOnly: true\n}, {\n    name: \"rightToLeft\",\n    bindKey: { win: \"Ctrl-Alt-Shift-R\",  mac: \"Command-Alt-Shift-R\" },\n    exec: function(editor) {\n        editor.session.$bidiHandler.setRtlDirection(editor, true);\n    },\n    readOnly: true\n}];\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    rtlText: {\n        set: function(val) {\n            if (val) {\n                this.on(\"change\", onChange);\n                this.on(\"changeSelection\", onChangeSelection);\n                this.renderer.on(\"afterRender\", updateLineDirection);\n                this.commands.on(\"exec\", onCommandEmitted);\n                this.commands.addCommands(commands);\n            } else {\n                this.off(\"change\", onChange);\n                this.off(\"changeSelection\", onChangeSelection);\n                this.renderer.off(\"afterRender\", updateLineDirection);\n                this.commands.off(\"exec\", onCommandEmitted);\n                this.commands.removeCommands(commands);\n                clearTextLayer(this.renderer);\n            }\n            this.renderer.updateFull();\n        }\n    },\n    rtl: {\n        set: function(val) {\n            this.session.$bidiHandler.$isRtl = val;\n            if (val) {\n                this.setOption(\"rtlText\", false);\n                this.renderer.on(\"afterRender\", updateLineDirection);\n                this.session.$bidiHandler.seenBidi = true;\n            } else {\n                this.renderer.off(\"afterRender\", updateLineDirection);\n                clearTextLayer(this.renderer);\n            }\n            this.renderer.updateFull();\n        }\n    }\n});\nfunction onChangeSelection(e, editor) {\n    var lead = editor.getSelection().lead;\n    if (editor.session.$bidiHandler.isRtlLine(lead.row)) {\n        if (lead.column === 0) {\n            if (editor.session.$bidiHandler.isMoveLeftOperation && lead.row > 0) {\n                editor.getSelection().moveCursorTo(lead.row - 1, editor.session.getLine(lead.row - 1).length);\n            } else {\n                if (editor.getSelection().isEmpty())\n                    lead.column += 1;\n                else\n                    lead.setPosition(lead.row, lead.column + 1);\n            }\n        }\n    }\n}\n\nfunction onCommandEmitted(commadEvent) {\n    commadEvent.editor.session.$bidiHandler.isMoveLeftOperation = /gotoleft|selectleft|backspace|removewordleft/.test(commadEvent.command.name);\n}\nfunction onChange(delta, editor) {\n    var session = editor.session;\n    session.$bidiHandler.currentRow = null;\n    if (session.$bidiHandler.isRtlLine(delta.start.row) && delta.action === 'insert' && delta.lines.length > 1) {\n        for (var row = delta.start.row; row < delta.end.row; row++) {\n            if (session.getLine(row + 1).charAt(0) !== session.$bidiHandler.RLE)\n                session.doc.$lines[row + 1] = session.$bidiHandler.RLE + session.getLine(row + 1);\n        }\n    }\n}\n\nfunction updateLineDirection(e, renderer) {\n    var session = renderer.session;\n    var $bidiHandler = session.$bidiHandler;\n    var cells = renderer.$textLayer.$lines.cells;\n    var width = renderer.layerConfig.width - renderer.layerConfig.padding + \"px\";\n    cells.forEach(function(cell) {\n        var style = cell.element.style;\n        if ($bidiHandler && $bidiHandler.isRtlLine(cell.row)) {\n            style.direction = \"rtl\";\n            style.textAlign = \"right\";\n            style.width = width;\n        } else {\n            style.direction = \"\";\n            style.textAlign = \"\";\n            style.width = \"\";\n        }\n    });\n}\n\nfunction clearTextLayer(renderer) {\n    var lines = renderer.$textLayer.$lines;\n    lines.cells.forEach(clear);\n    lines.cellCache.forEach(clear);\n    function clear(cell) {\n        var style = cell.element.style;\n        style.direction = style.textAlign = style.width = \"\";\n    }\n}\n\n});                (function() {\n                    ace.require([\"ace/ext/rtl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-searchbox.js",
    "content": "ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar searchboxCss = \"\\\n.ace_search {\\\nbackground-color: #ddd;\\\ncolor: #666;\\\nborder: 1px solid #cbcbcb;\\\nborder-top: 0 none;\\\noverflow: hidden;\\\nmargin: 0;\\\npadding: 4px 6px 0 4px;\\\nposition: absolute;\\\ntop: 0;\\\nz-index: 99;\\\nwhite-space: normal;\\\n}\\\n.ace_search.left {\\\nborder-left: 0 none;\\\nborder-radius: 0px 0px 5px 0px;\\\nleft: 0;\\\n}\\\n.ace_search.right {\\\nborder-radius: 0px 0px 0px 5px;\\\nborder-right: 0 none;\\\nright: 0;\\\n}\\\n.ace_search_form, .ace_replace_form {\\\nmargin: 0 20px 4px 0;\\\noverflow: hidden;\\\nline-height: 1.9;\\\n}\\\n.ace_replace_form {\\\nmargin-right: 0;\\\n}\\\n.ace_search_form.ace_nomatch {\\\noutline: 1px solid red;\\\n}\\\n.ace_search_field {\\\nborder-radius: 3px 0 0 3px;\\\nbackground-color: white;\\\ncolor: black;\\\nborder: 1px solid #cbcbcb;\\\nborder-right: 0 none;\\\noutline: 0;\\\npadding: 0;\\\nfont-size: inherit;\\\nmargin: 0;\\\nline-height: inherit;\\\npadding: 0 6px;\\\nmin-width: 17em;\\\nvertical-align: top;\\\nmin-height: 1.8em;\\\nbox-sizing: content-box;\\\n}\\\n.ace_searchbtn {\\\nborder: 1px solid #cbcbcb;\\\nline-height: inherit;\\\ndisplay: inline-block;\\\npadding: 0 6px;\\\nbackground: #fff;\\\nborder-right: 0 none;\\\nborder-left: 1px solid #dcdcdc;\\\ncursor: pointer;\\\nmargin: 0;\\\nposition: relative;\\\ncolor: #666;\\\n}\\\n.ace_searchbtn:last-child {\\\nborder-radius: 0 3px 3px 0;\\\nborder-right: 1px solid #cbcbcb;\\\n}\\\n.ace_searchbtn:disabled {\\\nbackground: none;\\\ncursor: default;\\\n}\\\n.ace_searchbtn:hover {\\\nbackground-color: #eef1f6;\\\n}\\\n.ace_searchbtn.prev, .ace_searchbtn.next {\\\npadding: 0px 0.7em\\\n}\\\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\\\ncontent: \\\"\\\";\\\nborder: solid 2px #888;\\\nwidth: 0.5em;\\\nheight: 0.5em;\\\nborder-width:  2px 0 0 2px;\\\ndisplay:inline-block;\\\ntransform: rotate(-45deg);\\\n}\\\n.ace_searchbtn.next:after {\\\nborder-width: 0 2px 2px 0 ;\\\n}\\\n.ace_searchbtn_close {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\nborder-radius: 50%;\\\nborder: 0 none;\\\ncolor: #656565;\\\ncursor: pointer;\\\nfont: 16px/16px Arial;\\\npadding: 0;\\\nheight: 14px;\\\nwidth: 14px;\\\ntop: 9px;\\\nright: 7px;\\\nposition: absolute;\\\n}\\\n.ace_searchbtn_close:hover {\\\nbackground-color: #656565;\\\nbackground-position: 50% 100%;\\\ncolor: white;\\\n}\\\n.ace_button {\\\nmargin-left: 2px;\\\ncursor: pointer;\\\n-webkit-user-select: none;\\\n-moz-user-select: none;\\\n-o-user-select: none;\\\n-ms-user-select: none;\\\nuser-select: none;\\\noverflow: hidden;\\\nopacity: 0.7;\\\nborder: 1px solid rgba(100,100,100,0.23);\\\npadding: 1px;\\\nbox-sizing:    border-box!important;\\\ncolor: black;\\\n}\\\n.ace_button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_button.checked {\\\nborder-color: #3399ff;\\\nopacity:1;\\\n}\\\n.ace_search_options{\\\nmargin-bottom: 3px;\\\ntext-align: right;\\\n-webkit-user-select: none;\\\n-moz-user-select: none;\\\n-o-user-select: none;\\\n-ms-user-select: none;\\\nuser-select: none;\\\nclear: both;\\\n}\\\n.ace_search_counter {\\\nfloat: left;\\\nfont-family: arial;\\\npadding: 0 8px;\\\n}\";\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar keyUtil = require(\"../lib/keys\");\n\nvar MAX_COUNT = 999;\n\ndom.importCssString(searchboxCss, \"ace_searchbox\");\n\nvar SearchBox = function(editor, range, showReplaceForm) {\n    var div = dom.createElement(\"div\");\n    dom.buildDom([\"div\", {class:\"ace_search right\"},\n        [\"span\", {action: \"hide\", class: \"ace_searchbtn_close\"}],\n        [\"div\", {class: \"ace_search_form\"},\n            [\"input\", {class: \"ace_search_field\", placeholder: \"Search for\", spellcheck: \"false\"}],\n            [\"span\", {action: \"findPrev\", class: \"ace_searchbtn prev\"}, \"\\u200b\"],\n            [\"span\", {action: \"findNext\", class: \"ace_searchbtn next\"}, \"\\u200b\"],\n            [\"span\", {action: \"findAll\", class: \"ace_searchbtn\", title: \"Alt-Enter\"}, \"All\"]\n        ],\n        [\"div\", {class: \"ace_replace_form\"},\n            [\"input\", {class: \"ace_search_field\", placeholder: \"Replace with\", spellcheck: \"false\"}],\n            [\"span\", {action: \"replaceAndFindNext\", class: \"ace_searchbtn\"}, \"Replace\"],\n            [\"span\", {action: \"replaceAll\", class: \"ace_searchbtn\"}, \"All\"]\n        ],\n        [\"div\", {class: \"ace_search_options\"},\n            [\"span\", {action: \"toggleReplace\", class: \"ace_button\", title: \"Toggle Replace mode\",\n                style: \"float:left;margin-top:-2px;padding:0 5px;\"}, \"+\"],\n            [\"span\", {class: \"ace_search_counter\"}],\n            [\"span\", {action: \"toggleRegexpMode\", class: \"ace_button\", title: \"RegExp Search\"}, \".*\"],\n            [\"span\", {action: \"toggleCaseSensitive\", class: \"ace_button\", title: \"CaseSensitive Search\"}, \"Aa\"],\n            [\"span\", {action: \"toggleWholeWords\", class: \"ace_button\", title: \"Whole Word Search\"}, \"\\\\b\"],\n            [\"span\", {action: \"searchInSelection\", class: \"ace_button\", title: \"Search In Selection\"}, \"S\"]\n        ]\n    ], div);\n    this.element = div.firstChild;\n    \n    this.setSession = this.setSession.bind(this);\n\n    this.$init();\n    this.setEditor(editor);\n    dom.importCssString(searchboxCss, \"ace_searchbox\", editor.container);\n};\n\n(function() {\n    this.setEditor = function(editor) {\n        editor.searchBox = this;\n        editor.renderer.scroller.appendChild(this.element);\n        this.editor = editor;\n    };\n    \n    this.setSession = function(e) {\n        this.searchRange = null;\n        this.$syncOptions(true);\n    };\n\n    this.$initElements = function(sb) {\n        this.searchBox = sb.querySelector(\".ace_search_form\");\n        this.replaceBox = sb.querySelector(\".ace_replace_form\");\n        this.searchOption = sb.querySelector(\"[action=searchInSelection]\");\n        this.replaceOption = sb.querySelector(\"[action=toggleReplace]\");\n        this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\n        this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\n        this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\n        this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\n        this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\n        this.searchCounter = sb.querySelector(\".ace_search_counter\");\n    };\n    \n    this.$init = function() {\n        var sb = this.element;\n        \n        this.$initElements(sb);\n        \n        var _this = this;\n        event.addListener(sb, \"mousedown\", function(e) {\n            setTimeout(function(){\n                _this.activeInput.focus();\n            }, 0);\n            event.stopPropagation(e);\n        });\n        event.addListener(sb, \"click\", function(e) {\n            var t = e.target || e.srcElement;\n            var action = t.getAttribute(\"action\");\n            if (action && _this[action])\n                _this[action]();\n            else if (_this.$searchBarKb.commands[action])\n                _this.$searchBarKb.commands[action].exec(_this);\n            event.stopPropagation(e);\n        });\n\n        event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\n            var keyString = keyUtil.keyCodeToString(keyCode);\n            var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\n            if (command && command.exec) {\n                command.exec(_this);\n                event.stopEvent(e);\n            }\n        });\n\n        this.$onChange = lang.delayedCall(function() {\n            _this.find(false, false);\n        });\n\n        event.addListener(this.searchInput, \"input\", function() {\n            _this.$onChange.schedule(20);\n        });\n        event.addListener(this.searchInput, \"focus\", function() {\n            _this.activeInput = _this.searchInput;\n            _this.searchInput.value && _this.highlight();\n        });\n        event.addListener(this.replaceInput, \"focus\", function() {\n            _this.activeInput = _this.replaceInput;\n            _this.searchInput.value && _this.highlight();\n        });\n    };\n    this.$closeSearchBarKb = new HashHandler([{\n        bindKey: \"Esc\",\n        name: \"closeSearchBar\",\n        exec: function(editor) {\n            editor.searchBox.hide();\n        }\n    }]);\n    this.$searchBarKb = new HashHandler();\n    this.$searchBarKb.bindKeys({\n        \"Ctrl-f|Command-f\": function(sb) {\n            var isReplace = sb.isReplace = !sb.isReplace;\n            sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\n            sb.replaceOption.checked = false;\n            sb.$syncOptions();\n            sb.searchInput.focus();\n        },\n        \"Ctrl-H|Command-Option-F\": function(sb) {\n            if (sb.editor.getReadOnly())\n                return;\n            sb.replaceOption.checked = true;\n            sb.$syncOptions();\n            sb.replaceInput.focus();\n        },\n        \"Ctrl-G|Command-G\": function(sb) {\n            sb.findNext();\n        },\n        \"Ctrl-Shift-G|Command-Shift-G\": function(sb) {\n            sb.findPrev();\n        },\n        \"esc\": function(sb) {\n            setTimeout(function() { sb.hide();});\n        },\n        \"Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findNext();\n        },\n        \"Shift-Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findPrev();\n        },\n        \"Alt-Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replaceAll();\n            sb.findAll();\n        },\n        \"Tab\": function(sb) {\n            (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\n        }\n    });\n\n    this.$searchBarKb.addCommands([{\n        name: \"toggleRegexpMode\",\n        bindKey: {win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"},\n        exec: function(sb) {\n            sb.regExpOption.checked = !sb.regExpOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleCaseSensitive\",\n        bindKey: {win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"},\n        exec: function(sb) {\n            sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleWholeWords\",\n        bindKey: {win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"},\n        exec: function(sb) {\n            sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleReplace\",\n        exec: function(sb) {\n            sb.replaceOption.checked = !sb.replaceOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"searchInSelection\",\n        exec: function(sb) {\n            sb.searchOption.checked = !sb.searchRange;\n            sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());\n            sb.$syncOptions();\n        }\n    }]);\n    \n    this.setSearchRange = function(range) {\n        this.searchRange = range;\n        if (range) {\n            this.searchRangeMarker = this.editor.session.addMarker(range, \"ace_active-line\");\n        } else if (this.searchRangeMarker) {\n            this.editor.session.removeMarker(this.searchRangeMarker);\n            this.searchRangeMarker = null;\n        }\n    };\n\n    this.$syncOptions = function(preventScroll) {\n        dom.setCssClass(this.replaceOption, \"checked\", this.searchRange);\n        dom.setCssClass(this.searchOption, \"checked\", this.searchOption.checked);\n        this.replaceOption.textContent = this.replaceOption.checked ? \"-\" : \"+\";\n        dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\n        dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\n        dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\n        var readOnly = this.editor.getReadOnly();\n        this.replaceOption.style.display = readOnly ? \"none\" : \"\";\n        this.replaceBox.style.display = this.replaceOption.checked && !readOnly ? \"\" : \"none\";\n        this.find(false, false, preventScroll);\n    };\n\n    this.highlight = function(re) {\n        this.editor.session.highlight(re || this.editor.$search.$options.re);\n        this.editor.renderer.updateBackMarkers();\n    };\n    this.find = function(skipCurrent, backwards, preventScroll) {\n        var range = this.editor.find(this.searchInput.value, {\n            skipCurrent: skipCurrent,\n            backwards: backwards,\n            wrap: true,\n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked,\n            preventScroll: preventScroll,\n            range: this.searchRange\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.updateCounter();\n    };\n    this.updateCounter = function() {\n        var editor = this.editor;\n        var regex = editor.$search.$options.re;\n        var all = 0;\n        var before = 0;\n        if (regex) {\n            var value = this.searchRange\n                ? editor.session.getTextRange(this.searchRange)\n                : editor.getValue();\n            \n            var offset = editor.session.doc.positionToIndex(editor.selection.anchor);\n            if (this.searchRange)\n                offset -= editor.session.doc.positionToIndex(this.searchRange.start);\n                \n            var last = regex.lastIndex = 0;\n            var m;\n            while ((m = regex.exec(value))) {\n                all++;\n                last = m.index;\n                if (last <= offset)\n                    before++;\n                if (all > MAX_COUNT)\n                    break;\n                if (!m[0]) {\n                    regex.lastIndex = last += 1;\n                    if (last >= value.length)\n                        break;\n                }\n            }\n        }\n        this.searchCounter.textContent = before + \" of \" + (all > MAX_COUNT ? MAX_COUNT + \"+\" : all);\n    };\n    this.findNext = function() {\n        this.find(true, false);\n    };\n    this.findPrev = function() {\n        this.find(true, true);\n    };\n    this.findAll = function(){\n        var range = this.editor.findAll(this.searchInput.value, {            \n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.hide();\n    };\n    this.replace = function() {\n        if (!this.editor.getReadOnly())\n            this.editor.replace(this.replaceInput.value);\n    };    \n    this.replaceAndFindNext = function() {\n        if (!this.editor.getReadOnly()) {\n            this.editor.replace(this.replaceInput.value);\n            this.findNext();\n        }\n    };\n    this.replaceAll = function() {\n        if (!this.editor.getReadOnly())\n            this.editor.replaceAll(this.replaceInput.value);\n    };\n\n    this.hide = function() {\n        this.active = false;\n        this.setSearchRange(null);\n        this.editor.off(\"changeSession\", this.setSession);\n        \n        this.element.style.display = \"none\";\n        this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\n        this.editor.focus();\n    };\n    this.show = function(value, isReplace) {\n        this.active = true;\n        this.editor.on(\"changeSession\", this.setSession);\n        this.element.style.display = \"\";\n        this.replaceOption.checked = isReplace;\n        \n        if (value)\n            this.searchInput.value = value;\n        \n        this.searchInput.focus();\n        this.searchInput.select();\n\n        this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\n        \n        this.$syncOptions(true);\n    };\n\n    this.isFocused = function() {\n        var el = document.activeElement;\n        return el == this.searchInput || el == this.replaceInput;\n    };\n}).call(SearchBox.prototype);\n\nexports.SearchBox = SearchBox;\n\nexports.Search = function(editor, isReplace) {\n    var sb = editor.searchBox || new SearchBox(editor);\n    sb.show(editor.session.getTextRange(), isReplace);\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/searchbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-settings_menu.js",
    "content": "ace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = \"#ace_settingsmenu, #kbshortcutmenu {\\\nbackground-color: #F7F7F7;\\\ncolor: black;\\\nbox-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\\npadding: 1em 0.5em 2em 1em;\\\noverflow: auto;\\\nposition: absolute;\\\nmargin: 0;\\\nbottom: 0;\\\nright: 0;\\\ntop: 0;\\\nz-index: 9991;\\\ncursor: default;\\\n}\\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\\nbox-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\\nbackground-color: rgba(255, 255, 255, 0.6);\\\ncolor: black;\\\n}\\\n.ace_optionsMenuEntry:hover {\\\nbackground-color: rgba(100, 100, 100, 0.1);\\\ntransition: all 0.3s\\\n}\\\n.ace_closeButton {\\\nbackground: rgba(245, 146, 146, 0.5);\\\nborder: 1px solid #F48A8A;\\\nborder-radius: 50%;\\\npadding: 7px;\\\nposition: absolute;\\\nright: -8px;\\\ntop: -8px;\\\nz-index: 100000;\\\n}\\\n.ace_closeButton{\\\nbackground: rgba(245, 146, 146, 0.9);\\\n}\\\n.ace_optionsMenuKey {\\\ncolor: darkslateblue;\\\nfont-weight: bold;\\\n}\\\n.ace_optionsMenuCommand {\\\ncolor: darkcyan;\\\nfont-weight: normal;\\\n}\\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\\nvertical-align: middle;\\\n}\\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\\nbackground: #e7e7e7;\\\nbox-shadow: 1px 0px 2px 0px #adadad inset;\\\nborder-color: #adadad;\\\n}\\\n.ace_optionsMenuEntry button {\\\nbackground: white;\\\nborder: 1px solid lightgray;\\\nmargin: 0px;\\\n}\\\n.ace_optionsMenuEntry button:hover{\\\nbackground: #f0f0f0;\\\n}\";\ndom.importCssString(cssText);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {\n    top = top ? 'top: ' + top + ';' : '';\n    bottom = bottom ? 'bottom: ' + bottom + ';' : '';\n    right = right ? 'right: ' + right + ';' : '';\n    left = left ? 'left: ' + left + ';' : '';\n\n    var closer = document.createElement('div');\n    var contentContainer = document.createElement('div');\n\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            closer.click();\n        }\n    }\n\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        'background-color: rgba(0, 0, 0, 0.3);';\n    closer.addEventListener('click', function() {\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        editor.focus();\n        closer = null;\n    });\n    document.addEventListener('keydown', documentEscListener);\n\n    contentContainer.style.cssText = top + right + bottom + left;\n    contentContainer.addEventListener('click', function(e) {\n        e.stopPropagation();\n    });\n\n    var wrapper = dom.createElement(\"div\");\n    wrapper.style.position = \"relative\";\n    \n    var closeButton = dom.createElement(\"div\");\n    closeButton.className = \"ace_closeButton\";\n    closeButton.addEventListener('click', function() {\n        closer.click();\n    });\n    \n    wrapper.appendChild(closeButton);\n    contentContainer.appendChild(wrapper);\n    \n    contentContainer.appendChild(contentElement);\n    closer.appendChild(contentContainer);\n    document.body.appendChild(closer);\n    editor.blur();\n};\n\n});\n\nace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\n\nvar Mode = function(name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function(a, b){\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    } else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n\n    this.extRe = new RegExp(re, \"gi\");\n};\n\nMode.prototype.supportsFile = function(filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP:        [\"abap\"],\n    ABC:         [\"abc\"],\n    ActionScript:[\"as\"],\n    ADA:         [\"ada|adb\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    AsciiDoc:    [\"asciidoc|adoc\"],\n    ASL:         [\"dsl|asl\"],\n    Assembly_x86:[\"asm|a\"],\n    AutoHotKey:  [\"ahk\"],\n    Apex:        [\"apex|cls|trigger|tgr\"],\n    BatchFile:   [\"bat|cmd\"],\n    Bro:         [\"bro\"],\n    C_Cpp:       [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search:    [\"c9search_results\"],\n    Cirru:       [\"cirru|cr\"],\n    Clojure:     [\"clj|cljs\"],\n    Cobol:       [\"CBL|COB\"],\n    coffee:      [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion:  [\"cfm\"],\n    CSharp:      [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS:         [\"css\"],\n    Curly:       [\"curly\"],\n    D:           [\"d|di\"],\n    Dart:        [\"dart\"],\n    Diff:        [\"diff|patch\"],\n    Dockerfile:  [\"^Dockerfile\"],\n    Dot:         [\"dot\"],\n    Drools:      [\"drl\"],\n    Edifact:     [\"edi\"],\n    Eiffel:      [\"e|ge\"],\n    EJS:         [\"ejs\"],\n    Elixir:      [\"ex|exs\"],\n    Elm:         [\"elm\"],\n    Erlang:      [\"erl|hrl\"],\n    Forth:       [\"frt|fs|ldr|fth|4th\"],\n    Fortran:     [\"f|f90\"],\n    FSharp:      [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL:         [\"fsl\"],\n    FTL:         [\"ftl\"],\n    Gcode:       [\"gcode\"],\n    Gherkin:     [\"feature\"],\n    Gitignore:   [\"^.gitignore\"],\n    Glsl:        [\"glsl|frag|vert\"],\n    Gobstones:   [\"gbs\"],\n    golang:      [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy:      [\"groovy\"],\n    HAML:        [\"haml\"],\n    Handlebars:  [\"hbs|handlebars|tpl|mustache\"],\n    Haskell:     [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe:        [\"hx\"],\n    Hjson:       [\"hjson\"],\n    HTML:        [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby:   [\"erb|rhtml|html.erb\"],\n    INI:         [\"ini|conf|cfg|prefs\"],\n    Io:          [\"io\"],\n    Jack:        [\"jack\"],\n    Jade:        [\"jade|pug\"],\n    Java:        [\"java\"],\n    JavaScript:  [\"js|jsm|jsx\"],\n    JSON:        [\"json\"],\n    JSONiq:      [\"jq\"],\n    JSP:         [\"jsp\"],\n    JSSM:        [\"jssm|jssm_state\"],\n    JSX:         [\"jsx\"],\n    Julia:       [\"jl\"],\n    Kotlin:      [\"kt|kts\"],\n    LaTeX:       [\"tex|latex|ltx|bib\"],\n    LESS:        [\"less\"],\n    Liquid:      [\"liquid\"],\n    Lisp:        [\"lisp\"],\n    LiveScript:  [\"ls\"],\n    LogiQL:      [\"logic|lql\"],\n    LSL:         [\"lsl\"],\n    Lua:         [\"lua\"],\n    LuaPage:     [\"lp\"],\n    Lucene:      [\"lucene\"],\n    Makefile:    [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown:    [\"md|markdown\"],\n    Mask:        [\"mask\"],\n    MATLAB:      [\"matlab\"],\n    Maze:        [\"mz\"],\n    MEL:         [\"mel\"],\n    MIXAL:       [\"mixal\"],\n    MUSHCode:    [\"mc|mush\"],\n    MySQL:       [\"mysql\"],\n    Nix:         [\"nix\"],\n    NSIS:        [\"nsi|nsh\"],\n    ObjectiveC:  [\"m|mm\"],\n    OCaml:       [\"ml|mli\"],\n    Pascal:      [\"pas|p\"],\n    Perl:        [\"pl|pm\"],\n    Perl6:       [\"p6|pl6|pm6\"],\n    pgSQL:       [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP:         [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Puppet:      [\"epp|pp\"],\n    Pig:         [\"pig\"],\n    Powershell:  [\"ps1\"],\n    Praat:       [\"praat|praatscript|psc|proc\"],\n    Prolog:      [\"plg|prolog\"],\n    Properties:  [\"properties\"],\n    Protobuf:    [\"proto\"],\n    Python:      [\"py\"],\n    R:           [\"r\"],\n    Razor:       [\"cshtml|asp\"],\n    RDoc:        [\"Rd\"],\n    Red:         [\"red|reds\"],\n    RHTML:       [\"Rhtml\"],\n    RST:         [\"rst\"],\n    Ruby:        [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust:        [\"rs\"],\n    SASS:        [\"sass\"],\n    SCAD:        [\"scad\"],\n    Scala:       [\"scala\"],\n    Scheme:      [\"scm|sm|rkt|oak|scheme\"],\n    SCSS:        [\"scss\"],\n    SH:          [\"sh|bash|^.bashrc\"],\n    SJS:         [\"sjs\"],\n    Slim:        [\"slim|skim\"],\n    Smarty:      [\"smarty|tpl\"],\n    snippets:    [\"snippets\"],\n    Soy_Template:[\"soy\"],\n    Space:       [\"space\"],\n    SQL:         [\"sql\"],\n    SQLServer:   [\"sqlserver\"],\n    Stylus:      [\"styl|stylus\"],\n    SVG:         [\"svg\"],\n    Swift:       [\"swift\"],\n    Tcl:         [\"tcl\"],\n    Terraform:   [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex:         [\"tex\"],\n    Text:        [\"txt\"],\n    Textile:     [\"textile\"],\n    Toml:        [\"toml\"],\n    TSX:         [\"tsx\"],\n    Twig:        [\"latte|twig|swig\"],\n    Typescript:  [\"ts|typescript|str\"],\n    Vala:        [\"vala\"],\n    VBScript:    [\"vbs|vb\"],\n    Velocity:    [\"vm\"],\n    Verilog:     [\"v|vh|sv|svh\"],\n    VHDL:        [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok:      [\"wlk|wpgm|wtest\"],\n    XML:         [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery:      [\"xq\"],\n    YAML:        [\"yaml|yml\"],\n    Django:      [\"html\"]\n};\n\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\n\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n\nace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar themeData = [\n    [\"Chrome\"         ],\n    [\"Clouds\"         ],\n    [\"Crimson Editor\" ],\n    [\"Dawn\"           ],\n    [\"Dreamweaver\"    ],\n    [\"Eclipse\"        ],\n    [\"GitHub\"         ],\n    [\"IPlastic\"       ],\n    [\"Solarized Light\"],\n    [\"TextMate\"       ],\n    [\"Tomorrow\"       ],\n    [\"XCode\"          ],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\"           ,\"sqlserver\"               , \"light\"],\n    [\"Ambiance\"             ,\"ambiance\"                ,  \"dark\"],\n    [\"Chaos\"                ,\"chaos\"                   ,  \"dark\"],\n    [\"Clouds Midnight\"      ,\"clouds_midnight\"         ,  \"dark\"],\n    [\"Dracula\"              ,\"\"                        ,  \"dark\"],\n    [\"Cobalt\"               ,\"cobalt\"                  ,  \"dark\"],\n    [\"Gruvbox\"              ,\"gruvbox\"                 ,  \"dark\"],\n    [\"Green on Black\"       ,\"gob\"                     ,  \"dark\"],\n    [\"idle Fingers\"         ,\"idle_fingers\"            ,  \"dark\"],\n    [\"krTheme\"              ,\"kr_theme\"                ,  \"dark\"],\n    [\"Merbivore\"            ,\"merbivore\"               ,  \"dark\"],\n    [\"Merbivore Soft\"       ,\"merbivore_soft\"          ,  \"dark\"],\n    [\"Mono Industrial\"      ,\"mono_industrial\"         ,  \"dark\"],\n    [\"Monokai\"              ,\"monokai\"                 ,  \"dark\"],\n    [\"Pastel on dark\"       ,\"pastel_on_dark\"          ,  \"dark\"],\n    [\"Solarized Dark\"       ,\"solarized_dark\"          ,  \"dark\"],\n    [\"Terminal\"             ,\"terminal\"                ,  \"dark\"],\n    [\"Tomorrow Night\"       ,\"tomorrow_night\"          ,  \"dark\"],\n    [\"Tomorrow Night Blue\"  ,\"tomorrow_night_blue\"     ,  \"dark\"],\n    [\"Tomorrow Night Bright\",\"tomorrow_night_bright\"   ,  \"dark\"],\n    [\"Tomorrow Night 80s\"   ,\"tomorrow_night_eighties\" ,  \"dark\"],\n    [\"Twilight\"             ,\"twilight\"                ,  \"dark\"],\n    [\"Vibrant Ink\"          ,\"vibrant_ink\"             ,  \"dark\"]\n];\n\n\nexports.themesByName = {};\nexports.themes = themeData.map(function(data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});\n\nace.define(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"], function(require, exports, module) {\n\"use strict\";\nvar overlayPage = require('./menu_tools/overlay_page').overlayPage;\n\n \nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar buildDom = dom.buildDom;\n\nvar modelist = require(\"./modelist\");\nvar themelist = require(\"./themelist\");\n\nvar themes = { Bright: [], Dark: [] };\nthemelist.themes.forEach(function(x) {\n    themes[x.isDark ? \"Dark\" : \"Bright\"].push({ caption: x.caption, value: x.theme });\n});\n\nvar modes = modelist.modes.map(function(x){ \n    return { caption: x.caption, value: x.mode }; \n});\n\n\nvar optionGroups = {\n    Main: {\n        Mode: {\n            path: \"mode\",\n            type: \"select\",\n            items: modes\n        },\n        Theme: {\n            path: \"theme\",\n            type: \"select\",\n            items: themes\n        },\n        \"Keybinding\": {\n            type: \"buttonBar\",\n            path: \"keyboardHandler\",\n            items: [\n                { caption : \"Ace\", value : null },\n                { caption : \"Vim\", value : \"ace/keyboard/vim\" },\n                { caption : \"Emacs\", value : \"ace/keyboard/emacs\" },\n                { caption : \"Sublime\", value : \"ace/keyboard/sublime\" }\n            ]\n        },\n        \"Font Size\": {\n            path: \"fontSize\",\n            type: \"number\",\n            defaultValue: 12,\n            defaults: [\n                {caption: \"12px\", value: 12},\n                {caption: \"24px\", value: 24}\n            ]\n        },\n        \"Soft Wrap\": {\n            type: \"buttonBar\",\n            path: \"wrap\",\n            items: [\n               { caption : \"Off\",  value : \"off\" },\n               { caption : \"View\", value : \"free\" },\n               { caption : \"margin\", value : \"printMargin\" },\n               { caption : \"40\",   value : \"40\" }\n            ]\n        },\n        \"Cursor Style\": {\n            path: \"cursorStyle\",\n            items: [\n               { caption : \"Ace\",    value : \"ace\" },\n               { caption : \"Slim\",   value : \"slim\" },\n               { caption : \"Smooth\", value : \"smooth\" },\n               { caption : \"Smooth And Slim\", value : \"smooth slim\" },\n               { caption : \"Wide\",   value : \"wide\" }\n            ]\n        },\n        \"Folding\": {\n            path: \"foldStyle\",\n            items: [\n                { caption : \"Manual\", value : \"manual\" },\n                { caption : \"Mark begin\", value : \"markbegin\" },\n                { caption : \"Mark begin and end\", value : \"markbeginend\" }\n            ]\n        },\n        \"Soft Tabs\": [{\n            path: \"useSoftTabs\"\n        }, {\n            path: \"tabSize\",\n            type: \"number\",\n            values: [2, 3, 4, 8, 16]\n        }],\n        \"Overscroll\": {\n            type: \"buttonBar\",\n            path: \"scrollPastEnd\",\n            items: [\n               { caption : \"None\",  value : 0 },\n               { caption : \"Half\",   value : 0.5 },\n               { caption : \"Full\",   value : 1 }\n            ]\n        }\n    },\n    More: {\n        \"Atomic soft tabs\": {\n            path: \"navigateWithinSoftTabs\"\n        },\n        \"Enable Behaviours\": {\n            path: \"behavioursEnabled\"\n        },\n        \"Full Line Selection\": {\n            type: \"checkbox\",\n            values: \"text|line\",\n            path: \"selectionStyle\"\n        },\n        \"Highlight Active Line\": {\n            path: \"highlightActiveLine\"\n        },\n        \"Show Invisibles\": {\n            path: \"showInvisibles\"\n        },\n        \"Show Indent Guides\": {\n            path: \"displayIndentGuides\"\n        },\n        \"Persistent Scrollbar\": [{\n            path: \"hScrollBarAlwaysVisible\"\n        }, {\n            path: \"vScrollBarAlwaysVisible\"\n        }],\n        \"Animate scrolling\": {\n            path: \"animatedScroll\"\n        },\n        \"Show Gutter\": {\n            path: \"showGutter\"\n        },\n        \"Show Line Numbers\": {\n            path: \"showLineNumbers\"\n        },\n        \"Relative Line Numbers\": {\n            path: \"relativeLineNumbers\"\n        },\n        \"Fixed Gutter Width\": {\n            path: \"fixedWidthGutter\"\n        },\n        \"Show Print Margin\": [{\n            path: \"showPrintMargin\"\n        }, {\n            type: \"number\",\n            path: \"printMarginColumn\"\n        }],\n        \"Indented Soft Wrap\": {\n            path: \"indentedSoftWrap\"\n        },\n        \"Highlight selected word\": {\n            path: \"highlightSelectedWord\"\n        },\n        \"Fade Fold Widgets\": {\n            path: \"fadeFoldWidgets\"\n        },\n        \"Use textarea for IME\": {\n            path: \"useTextareaForIME\"\n        },\n        \"Merge Undo Deltas\": {\n            path: \"mergeUndoDeltas\",\n            items: [\n               { caption : \"Always\",  value : \"always\" },\n               { caption : \"Never\",   value : \"false\" },\n               { caption : \"Timed\",   value : \"true\" }\n            ]\n        },\n        \"Elastic Tabstops\": {\n            path: \"useElasticTabstops\"\n        },\n        \"Incremental Search\": {\n            path: \"useIncrementalSearch\"\n        },\n        \"Read-only\": {\n            path: \"readOnly\"\n        },\n        \"Copy without selection\": {\n            path: \"copyWithEmptySelection\"\n        },\n        \"Live Autocompletion\": {\n            path: \"enableLiveAutocompletion\"\n        }\n    }\n};\n\n\nvar OptionPanel = function(editor, element) {\n    this.editor = editor;\n    this.container = element || document.createElement(\"div\");\n    this.groups = [];\n    this.options = {};\n};\n\n(function() {\n    \n    oop.implement(this, EventEmitter);\n    \n    this.add = function(config) {\n        if (config.Main)\n            oop.mixin(optionGroups.Main, config.Main);\n        if (config.More)\n            oop.mixin(optionGroups.More, config.More);\n    };\n    \n    this.render = function() {\n        this.container.innerHTML = \"\";\n        buildDom([\"table\", {id: \"controls\"}, \n            this.renderOptionGroup(optionGroups.Main),\n            [\"tr\", null, [\"td\", {colspan: 2},\n                [\"table\", {id: \"more-controls\"}, \n                    this.renderOptionGroup(optionGroups.More)\n                ]\n            ]]\n        ], this.container);\n    };\n    \n    this.renderOptionGroup = function(group) {\n        return Object.keys(group).map(function(key, i) {\n            var item = group[key];\n            if (!item.position)\n                item.position = i / 10000;\n            if (!item.label)\n                item.label = key;\n            return item;\n        }).sort(function(a, b) {\n            return a.position - b.position;\n        }).map(function(item) {\n            return this.renderOption(item.label, item);\n        }, this);\n    };\n    \n    this.renderOptionControl = function(key, option) {\n        var self = this;\n        if (Array.isArray(option)) {\n            return option.map(function(x) {\n                return self.renderOptionControl(key, x);\n            });\n        }\n        var control;\n        \n        var value = self.getOption(option);\n        \n        if (option.values && option.type != \"checkbox\") {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            option.items = option.values.map(function(v) {\n                return { value: v, name: v };\n            });\n        }\n        \n        if (option.type == \"buttonBar\") {\n            control = [\"div\", option.items.map(function(item) {\n                return [\"button\", { \n                    value: item.value, \n                    ace_selected_button: value == item.value, \n                    onclick: function() {\n                        self.setOption(option, item.value);\n                        var nodes = this.parentNode.querySelectorAll(\"[ace_selected_button]\");\n                        for (var i = 0; i < nodes.length; i++) {\n                            nodes[i].removeAttribute(\"ace_selected_button\");\n                        }\n                        this.setAttribute(\"ace_selected_button\", true);\n                    } \n                }, item.desc || item.caption || item.name];\n            })];\n        } else if (option.type == \"number\") {\n            control = [\"input\", {type: \"number\", value: value || option.defaultValue, style:\"width:3em\", oninput: function() {\n                self.setOption(option, parseInt(this.value));\n            }}];\n            if (option.defaults) {\n                control = [control, option.defaults.map(function(item) {\n                    return [\"button\", {onclick: function() {\n                        var input = this.parentNode.firstChild;\n                        input.value = item.value;\n                        input.oninput();\n                    }}, item.caption];\n                })];\n            }\n        } else if (option.items) {\n            var buildItems = function(items) {\n                return items.map(function(item) {\n                    return [\"option\", { value: item.value || item.name }, item.desc || item.caption || item.name];\n                });\n            };\n            \n            var items = Array.isArray(option.items) \n                ? buildItems(option.items)\n                : Object.keys(option.items).map(function(key) {\n                    return [\"optgroup\", {\"label\": key}, buildItems(option.items[key])];\n                });\n            control = [\"select\", { id: key, value: value, onchange: function() {\n                self.setOption(option, this.value);\n            } }, items];\n        } else {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            if (option.values) value = value == option.values[1];\n            control = [\"input\", { type: \"checkbox\", id: key, checked: value || null, onchange: function() {\n                var value = this.checked;\n                if (option.values) value = option.values[value ? 1 : 0];\n                self.setOption(option, value);\n            }}];\n            if (option.type == \"checkedNumber\") {\n                control = [control, []];\n            }\n        }\n        return control;\n    };\n    \n    this.renderOption = function(key, option) {\n        if (option.path && !option.onchange && !this.editor.$options[option.path])\n            return;\n        this.options[option.path] = option;\n        var safeKey = \"-\" + option.path;\n        var control = this.renderOptionControl(safeKey, option);\n        return [\"tr\", {class: \"ace_optionsMenuEntry\"}, [\"td\",\n            [\"label\", {for: safeKey}, key]\n        ], [\"td\", control]];\n    };\n    \n    this.setOption = function(option, value) {\n        if (typeof option == \"string\")\n            option = this.options[option];\n        if (value == \"false\") value = false;\n        if (value == \"true\") value = true;\n        if (value == \"null\") value = null;\n        if (value == \"undefined\") value = undefined;\n        if (typeof value == \"string\" && parseFloat(value).toString() == value)\n            value = parseFloat(value);\n        if (option.onchange)\n            option.onchange(value);\n        else if (option.path)\n            this.editor.setOption(option.path, value);\n        this._signal(\"setOption\", {name: option.path, value: value});\n    };\n    \n    this.getOption = function(option) {\n        if (option.getValue)\n            return option.getValue();\n        return this.editor.getOption(option.path);\n    };\n    \n}).call(OptionPanel.prototype);\n\nexports.OptionPanel = OptionPanel;\n\n});\n\nace.define(\"ace/ext/settings_menu\",[\"require\",\"exports\",\"module\",\"ace/ext/options\",\"ace/ext/menu_tools/overlay_page\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar OptionPanel = require(\"ace/ext/options\").OptionPanel;\nvar overlayPage = require('./menu_tools/overlay_page').overlayPage;\nfunction showSettingsMenu(editor) {\n    if (!document.getElementById('ace_settingsmenu')) {\n        var options = new OptionPanel(editor);\n        options.render();\n        options.container.id = \"ace_settingsmenu\";\n        overlayPage(editor, options.container, '0', '0', '0');\n        options.container.querySelector(\"select,input,button,checkbox\").focus();\n    }\n}\nmodule.exports.init = function(editor) {\n    var Editor = require(\"ace/editor\").Editor;\n    Editor.prototype.showSettingsMenu = function() {\n        showSettingsMenu(this);\n    };\n};\n});                (function() {\n                    ace.require([\"ace/ext/settings_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-spellcheck.js",
    "content": "ace.define(\"ace/ext/spellcheck\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\nvar event = require(\"../lib/event\");\n\nexports.contextMenuHandler = function(e){\n    var host = e.target;\n    var text = host.textInput.getElement();\n    if (!host.selection.isEmpty())\n        return;\n    var c = host.getCursorPosition();\n    var r = host.session.getWordRange(c.row, c.column);\n    var w = host.session.getTextRange(r);\n\n    host.session.tokenRe.lastIndex = 0;\n    if (!host.session.tokenRe.test(w))\n        return;\n    var PLACEHOLDER = \"\\x01\\x01\";\n    var value = w + \" \" + PLACEHOLDER;\n    text.value = value;\n    text.setSelectionRange(w.length, w.length + 1);\n    text.setSelectionRange(0, 0);\n    text.setSelectionRange(0, w.length);\n\n    var afterKeydown = false;\n    event.addListener(text, \"keydown\", function onKeydown() {\n        event.removeListener(text, \"keydown\", onKeydown);\n        afterKeydown = true;\n    });\n\n    host.textInput.setInputHandler(function(newVal) {\n        console.log(newVal , value, text.selectionStart, text.selectionEnd);\n        if (newVal == value)\n            return '';\n        if (newVal.lastIndexOf(value, 0) === 0)\n            return newVal.slice(value.length);\n        if (newVal.substr(text.selectionEnd) == value)\n            return newVal.slice(0, -value.length);\n        if (newVal.slice(-2) == PLACEHOLDER) {\n            var val = newVal.slice(0, -2);\n            if (val.slice(-1) == \" \") {\n                if (afterKeydown)\n                    return val.substring(0, text.selectionEnd);\n                val = val.slice(0, -1);\n                host.session.replace(r, val);\n                return \"\";\n            }\n        }\n\n        return newVal;\n    });\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    spellcheck: {\n        set: function(val) {\n            var text = this.textInput.getElement();\n            text.spellcheck = !!val;\n            if (!val)\n                this.removeListener(\"nativecontextmenu\", exports.contextMenuHandler);\n            else\n                this.on(\"nativecontextmenu\", exports.contextMenuHandler);\n        },\n        value: true\n    }\n});\n\n});                (function() {\n                    ace.require([\"ace/ext/spellcheck\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-split.js",
    "content": "ace.define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Editor = require(\"./editor\").Editor;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = require(\"./edit_session\").EditSession;\n\n\nvar Split = function(container, theme, splits) {\n    this.BELOW = 1;\n    this.BESIDE = 0;\n\n    this.$container = container;\n    this.$theme = theme;\n    this.$splits = 0;\n    this.$editorCSS = \"\";\n    this.$editors = [];\n    this.$orientation = this.BESIDE;\n\n    this.setSplits(splits || 1);\n    this.$cEditor = this.$editors[0];\n\n\n    this.on(\"focus\", function(editor) {\n        this.$cEditor = editor;\n    }.bind(this));\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$createEditor = function() {\n        var el = document.createElement(\"div\");\n        el.className = this.$editorCSS;\n        el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n        this.$container.appendChild(el);\n        var editor = new Editor(new Renderer(el, this.$theme));\n\n        editor.on(\"focus\", function() {\n            this._emit(\"focus\", editor);\n        }.bind(this));\n\n        this.$editors.push(editor);\n        editor.setFontSize(this.$fontSize);\n        return editor;\n    };\n\n    this.setSplits = function(splits) {\n        var editor;\n        if (splits < 1) {\n            throw \"The number of splits have to be > 0!\";\n        }\n\n        if (splits == this.$splits) {\n            return;\n        } else if (splits > this.$splits) {\n            while (this.$splits < this.$editors.length && this.$splits < splits) {\n                editor = this.$editors[this.$splits];\n                this.$container.appendChild(editor.container);\n                editor.setFontSize(this.$fontSize);\n                this.$splits ++;\n            }\n            while (this.$splits < splits) {\n                this.$createEditor();\n                this.$splits ++;\n            }\n        } else {\n            while (this.$splits > splits) {\n                editor = this.$editors[this.$splits - 1];\n                this.$container.removeChild(editor.container);\n                this.$splits --;\n            }\n        }\n        this.resize();\n    };\n    this.getSplits = function() {\n        return this.$splits;\n    };\n    this.getEditor = function(idx) {\n        return this.$editors[idx];\n    };\n    this.getCurrentEditor = function() {\n        return this.$cEditor;\n    };\n    this.focus = function() {\n        this.$cEditor.focus();\n    };\n    this.blur = function() {\n        this.$cEditor.blur();\n    };\n    this.setTheme = function(theme) {\n        this.$editors.forEach(function(editor) {\n            editor.setTheme(theme);\n        });\n    };\n    this.setKeyboardHandler = function(keybinding) {\n        this.$editors.forEach(function(editor) {\n            editor.setKeyboardHandler(keybinding);\n        });\n    };\n    this.forEach = function(callback, scope) {\n        this.$editors.forEach(callback, scope);\n    };\n\n\n    this.$fontSize = \"\";\n    this.setFontSize = function(size) {\n        this.$fontSize = size;\n        this.forEach(function(editor) {\n           editor.setFontSize(size);\n        });\n    };\n\n    this.$cloneSession = function(session) {\n        var s = new EditSession(session.getDocument(), session.getMode());\n\n        var undoManager = session.getUndoManager();\n        s.setUndoManager(undoManager);\n        s.setTabSize(session.getTabSize());\n        s.setUseSoftTabs(session.getUseSoftTabs());\n        s.setOverwrite(session.getOverwrite());\n        s.setBreakpoints(session.getBreakpoints());\n        s.setUseWrapMode(session.getUseWrapMode());\n        s.setUseWorker(session.getUseWorker());\n        s.setWrapLimitRange(session.$wrapLimitRange.min,\n                            session.$wrapLimitRange.max);\n        s.$foldData = session.$cloneFoldData();\n\n        return s;\n    };\n    this.setSession = function(session, idx) {\n        var editor;\n        if (idx == null) {\n            editor = this.$cEditor;\n        } else {\n            editor = this.$editors[idx];\n        }\n        var isUsed = this.$editors.some(function(editor) {\n           return editor.session === session;\n        });\n\n        if (isUsed) {\n            session = this.$cloneSession(session);\n        }\n        editor.setSession(session);\n        return session;\n    };\n    this.getOrientation = function() {\n        return this.$orientation;\n    };\n    this.setOrientation = function(orientation) {\n        if (this.$orientation == orientation) {\n            return;\n        }\n        this.$orientation = orientation;\n        this.resize();\n    };\n    this.resize = function() {\n        var width = this.$container.clientWidth;\n        var height = this.$container.clientHeight;\n        var editor;\n\n        if (this.$orientation == this.BESIDE) {\n            var editorWidth = width / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = editorWidth + \"px\";\n                editor.container.style.top = \"0px\";\n                editor.container.style.left = i * editorWidth + \"px\";\n                editor.container.style.height = height + \"px\";\n                editor.resize();\n            }\n        } else {\n            var editorHeight = height / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = width + \"px\";\n                editor.container.style.top = i * editorHeight + \"px\";\n                editor.container.style.left = \"0px\";\n                editor.container.style.height = editorHeight + \"px\";\n                editor.resize();\n            }\n        }\n    };\n\n}).call(Split.prototype);\n\nexports.Split = Split;\n});\n\nace.define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"], function(require, exports, module) {\n\"use strict\";\nmodule.exports = require(\"../split\");\n\n});                (function() {\n                    ace.require([\"ace/ext/split\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-static_highlight.js",
    "content": "ace.define(\"ace/ext/static_highlight\",[\"require\",\"exports\",\"module\",\"ace/edit_session\",\"ace/layer/text\",\"ace/config\",\"ace/lib/dom\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar TextLayer = require(\"../layer/text\").Text;\nvar baseStyles = \".ace_static_highlight {\\\nfont-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;\\\nfont-size: 12px;\\\nwhite-space: pre-wrap\\\n}\\\n.ace_static_highlight .ace_gutter {\\\nwidth: 2em;\\\ntext-align: right;\\\npadding: 0 3px 0 0;\\\nmargin-right: 3px;\\\ncontain: none;\\\n}\\\n.ace_static_highlight.ace_show_gutter .ace_line {\\\npadding-left: 2.6em;\\\n}\\\n.ace_static_highlight .ace_line { position: relative; }\\\n.ace_static_highlight .ace_gutter-cell {\\\n-moz-user-select: -moz-none;\\\n-khtml-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\nposition: absolute;\\\n}\\\n.ace_static_highlight .ace_gutter-cell:before {\\\ncontent: counter(ace_line, decimal);\\\ncounter-increment: ace_line;\\\n}\\\n.ace_static_highlight {\\\ncounter-reset: ace_line;\\\n}\\\n\";\nvar config = require(\"../config\");\nvar dom = require(\"../lib/dom\");\nvar escapeHTML = require(\"../lib/lang\").escapeHTML;\n\nfunction Element(type) {\n    this.type = type;\n    this.style = {};\n    this.textContent = \"\";\n}\nElement.prototype.cloneNode = function() {\n    return this;\n};\nElement.prototype.appendChild = function(child) {\n    this.textContent += child.toString();\n};\nElement.prototype.toString = function() {\n    var stringBuilder = [];\n    if (this.type != \"fragment\") {\n        stringBuilder.push(\"<\", this.type);\n        if (this.className)\n            stringBuilder.push(\" class='\", this.className, \"'\");\n        var styleStr = [];\n        for (var key in this.style) {\n            styleStr.push(key, \":\", this.style[key]);\n        }\n        if (styleStr.length)\n            stringBuilder.push(\" style='\", styleStr.join(\"\"), \"'\");\n        stringBuilder.push(\">\");\n    }\n\n    if (this.textContent) {\n        stringBuilder.push(this.textContent);\n    }\n\n    if (this.type != \"fragment\") {\n        stringBuilder.push(\"</\", this.type, \">\");\n    }\n    \n    return stringBuilder.join(\"\");\n};\n\n\nvar simpleDom = {\n    createTextNode: function(textContent, element) {\n        return escapeHTML(textContent);\n    },\n    createElement: function(type) {\n        return new Element(type);\n    },\n    createFragment: function() {\n        return new Element(\"fragment\");\n    }\n};\n\nvar SimpleTextLayer = function() {\n    this.config = {};\n    this.dom = simpleDom;\n};\nSimpleTextLayer.prototype = TextLayer.prototype;\n\nvar highlight = function(el, opts, callback) {\n    var m = el.className.match(/lang-(\\w+)/);\n    var mode = opts.mode || m && (\"ace/mode/\" + m[1]);\n    if (!mode)\n        return false;\n    var theme = opts.theme || \"ace/theme/textmate\";\n    \n    var data = \"\";\n    var nodes = [];\n\n    if (el.firstElementChild) {\n        var textLen = 0;\n        for (var i = 0; i < el.childNodes.length; i++) {\n            var ch = el.childNodes[i];\n            if (ch.nodeType == 3) {\n                textLen += ch.data.length;\n                data += ch.data;\n            } else {\n                nodes.push(textLen, ch);\n            }\n        }\n    } else {\n        data = el.textContent;\n        if (opts.trim)\n            data = data.trim();\n    }\n    \n    highlight.render(data, mode, theme, opts.firstLineNumber, !opts.showGutter, function (highlighted) {\n        dom.importCssString(highlighted.css, \"ace_highlight\");\n        el.innerHTML = highlighted.html;\n        var container = el.firstChild.firstChild;\n        for (var i = 0; i < nodes.length; i += 2) {\n            var pos = highlighted.session.doc.indexToPosition(nodes[i]);\n            var node = nodes[i + 1];\n            var lineEl = container.children[pos.row];\n            lineEl && lineEl.appendChild(node);\n        }\n        callback && callback();\n    });\n};\nhighlight.render = function(input, mode, theme, lineStart, disableGutter, callback) {\n    var waiting = 1;\n    var modeCache = EditSession.prototype.$modes;\n    if (typeof theme == \"string\") {\n        waiting++;\n        config.loadModule(['theme', theme], function(m) {\n            theme = m;\n            --waiting || done();\n        });\n    }\n    var modeOptions;\n    if (mode && typeof mode === \"object\" && !mode.getTokenizer) {\n        modeOptions = mode;\n        mode = modeOptions.path;\n    }\n    if (typeof mode == \"string\") {\n        waiting++;\n        config.loadModule(['mode', mode], function(m) {\n            if (!modeCache[mode] || modeOptions)\n                modeCache[mode] = new m.Mode(modeOptions);\n            mode = modeCache[mode];\n            --waiting || done();\n        });\n    }\n    function done() {\n        var result = highlight.renderSync(input, mode, theme, lineStart, disableGutter);\n        return callback ? callback(result) : result;\n    }\n    return --waiting || done();\n};\nhighlight.renderSync = function(input, mode, theme, lineStart, disableGutter) {\n    lineStart = parseInt(lineStart || 1, 10);\n\n    var session = new EditSession(\"\");\n    session.setUseWorker(false);\n    session.setMode(mode);\n\n    var textLayer = new SimpleTextLayer();\n    textLayer.setSession(session);\n    Object.keys(textLayer.$tabStrings).forEach(function(k) {\n        if (typeof textLayer.$tabStrings[k] == \"string\") {\n            var el = simpleDom.createFragment();\n            el.textContent = textLayer.$tabStrings[k];\n            textLayer.$tabStrings[k] = el;\n        }\n    });\n\n    session.setValue(input);\n    var length =  session.getLength();\n    \n    var outerEl = simpleDom.createElement(\"div\");\n    outerEl.className = theme.cssClass;\n    \n    var innerEl = simpleDom.createElement(\"div\");\n    innerEl.className = \"ace_static_highlight\" + (disableGutter ? \"\" : \" ace_show_gutter\");\n    innerEl.style[\"counter-reset\"] = \"ace_line \" + (lineStart - 1);\n\n    for (var ix = 0; ix < length; ix++) {\n        var lineEl = simpleDom.createElement(\"div\");\n        lineEl.className = \"ace_line\";\n        \n        if (!disableGutter) {\n            var gutterEl = simpleDom.createElement(\"span\");\n            gutterEl.className =\"ace_gutter ace_gutter-cell\";\n            gutterEl.textContent = \"\";\n            lineEl.appendChild(gutterEl);\n        }\n        textLayer.$renderLine(lineEl, ix, false);\n        lineEl.textContent += \"\\n\";\n        innerEl.appendChild(lineEl);\n    }\n    outerEl.appendChild(innerEl);\n\n    return {\n        css: baseStyles + theme.cssText,\n        html: outerEl.toString(),\n        session: session\n    };\n};\n\nmodule.exports = highlight;\nmodule.exports.highlight = highlight;\n});                (function() {\n                    ace.require([\"ace/ext/static_highlight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-statusbar.js",
    "content": "ace.define(\"ace/ext/statusbar\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"ace/lib/dom\");\nvar lang = require(\"ace/lib/lang\");\n\nvar StatusBar = function(editor, parentNode) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_status-indicator\";\n    this.element.style.cssText = \"display: inline-block;\";\n    parentNode.appendChild(this.element);\n\n    var statusUpdate = lang.delayedCall(function(){\n        this.updateStatus(editor);\n    }.bind(this)).schedule.bind(null, 100);\n    \n    editor.on(\"changeStatus\", statusUpdate);\n    editor.on(\"changeSelection\", statusUpdate);\n    editor.on(\"keyboardActivity\", statusUpdate);\n};\n\n(function(){\n    this.updateStatus = function(editor) {\n        var status = [];\n        function add(str, separator) {\n            str && status.push(str, separator || \"|\");\n        }\n\n        add(editor.keyBinding.getStatusText(editor));\n        if (editor.commands.recording)\n            add(\"REC\");\n        \n        var sel = editor.selection;\n        var c = sel.lead;\n        \n        if (!sel.isEmpty()) {\n            var r = editor.getSelectionRange();\n            add(\"(\" + (r.end.row - r.start.row) + \":\"  +(r.end.column - r.start.column) + \")\", \" \");\n        }\n        add(c.row + \":\" + c.column, \" \");        \n        if (sel.rangeCount)\n            add(\"[\" + sel.rangeCount + \"]\", \" \");\n        status.pop();\n        this.element.textContent = status.join(\"\");\n    };\n}).call(StatusBar.prototype);\n\nexports.StatusBar = StatusBar;\n\n});                (function() {\n                    ace.require([\"ace/ext/statusbar\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-textarea.js",
    "content": "ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\nace.define(\"ace/ext/textarea\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/net\",\"ace/ace\",\"ace/theme/textmate\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar UA = require(\"../lib/useragent\");\nvar net = require(\"../lib/net\");\nvar ace = require(\"../ace\");\n\nrequire(\"../theme/textmate\");\n\nmodule.exports = exports = ace;\nvar getCSSProperty = function(element, container, property) {\n    var ret = element.style[property];\n\n    if (!ret) {\n        if (window.getComputedStyle) {\n            ret = window.getComputedStyle(element, '').getPropertyValue(property);\n        } else {\n            ret = element.currentStyle[property];\n        }\n    }\n\n    if (!ret || ret == 'auto' || ret == 'intrinsic') {\n        ret = container.style[property];\n    }\n    return ret;\n};\n\nfunction applyStyles(elm, styles) {\n    for (var style in styles) {\n        elm.style[style] = styles[style];\n    }\n}\n\nfunction setupContainer(element, getValue) {\n    if (element.type != 'textarea') {\n        throw new Error(\"Textarea required!\");\n    }\n\n    var parentNode = element.parentNode;\n    var container = document.createElement('div');\n    var resizeEvent = function() {\n        var style = 'position:relative;';\n        [\n            'margin-top', 'margin-left', 'margin-right', 'margin-bottom'\n        ].forEach(function(item) {\n            style += item + ':' +\n                        getCSSProperty(element, container, item) + ';';\n        });\n        var width = getCSSProperty(element, container, 'width') || (element.clientWidth + \"px\");\n        var height = getCSSProperty(element, container, 'height')  || (element.clientHeight + \"px\");\n        style += 'height:' + height + ';width:' + width + ';';\n        style += 'display:inline-block;';\n        container.setAttribute('style', style);\n    };\n    event.addListener(window, 'resize', resizeEvent);\n    resizeEvent();\n    parentNode.insertBefore(container, element.nextSibling);\n    while (parentNode !== document) {\n        if (parentNode.tagName.toUpperCase() === 'FORM') {\n            var oldSumit = parentNode.onsubmit;\n            parentNode.onsubmit = function(evt) {\n                element.value = getValue();\n                if (oldSumit) {\n                    oldSumit.call(this, evt);\n                }\n            };\n            break;\n        }\n        parentNode = parentNode.parentNode;\n    }\n    return container;\n}\n\nexports.transformTextarea = function(element, options) {\n    var isFocused = element.autofocus || document.activeElement == element;\n    var session;\n    var container = setupContainer(element, function() {\n        return session.getValue();\n    });\n    element.style.display = 'none';\n    container.style.background = 'white';\n    var editorDiv = document.createElement(\"div\");\n    applyStyles(editorDiv, {\n        top: \"0px\",\n        left: \"0px\",\n        right: \"0px\",\n        bottom: \"0px\",\n        border: \"1px solid gray\",\n        position: \"absolute\"\n    });\n    container.appendChild(editorDiv);\n\n    var settingOpener = document.createElement(\"div\");\n    applyStyles(settingOpener, {\n        position: \"absolute\",\n        right: \"0px\",\n        bottom: \"0px\",\n        cursor: \"nw-resize\",\n        border: \"solid 9px\",\n        borderColor: \"lightblue gray gray #ceade6\",\n        zIndex: 101\n    });\n\n    var settingDiv = document.createElement(\"div\");\n    var settingDivStyles = {\n        top: \"0px\",\n        left: \"20%\",\n        right: \"0px\",\n        bottom: \"0px\",\n        position: \"absolute\",\n        padding: \"5px\",\n        zIndex: 100,\n        color: \"white\",\n        display: \"none\",\n        overflow: \"auto\",\n        fontSize: \"14px\",\n        boxShadow: \"-5px 2px 3px gray\"\n    };\n    if (!UA.isOldIE) {\n        settingDivStyles.backgroundColor = \"rgba(0, 0, 0, 0.6)\";\n    } else {\n        settingDivStyles.backgroundColor = \"#333\";\n    }\n\n    applyStyles(settingDiv, settingDivStyles);\n    container.appendChild(settingDiv);\n\n    options = options || exports.defaultOptions;\n    var editor = ace.edit(editorDiv);\n    session = editor.getSession();\n\n    session.setValue(element.value || element.innerHTML);\n    if (isFocused)\n        editor.focus();\n    container.appendChild(settingOpener);\n    setupApi(editor, editorDiv, settingDiv, ace, options);\n    setupSettingPanel(settingDiv, settingOpener, editor);\n\n    var state = \"\";\n    event.addListener(settingOpener, \"mousemove\", function(e) {\n        var rect = this.getBoundingClientRect();\n        var x = e.clientX - rect.left, y = e.clientY - rect.top;\n        if (x + y < (rect.width + rect.height)/2) {\n            this.style.cursor = \"pointer\";\n            state = \"toggle\";\n        } else {\n            state = \"resize\";\n            this.style.cursor = \"nw-resize\";\n        }\n    });\n\n    event.addListener(settingOpener, \"mousedown\", function(e) {\n        e.preventDefault();\n        if (state == \"toggle\") {\n            editor.setDisplaySettings();\n            return;\n        }\n        container.style.zIndex = 100000;\n        var rect = container.getBoundingClientRect();\n        var startX = rect.width  + rect.left - e.clientX;\n        var startY = rect.height  + rect.top - e.clientY;\n        event.capture(settingOpener, function(e) {\n            container.style.width = e.clientX - rect.left + startX + \"px\";\n            container.style.height = e.clientY - rect.top + startY + \"px\";\n            editor.resize();\n        }, function() {});\n    });\n\n    return editor;\n};\n\nfunction load(url, module, callback) {\n    net.loadScript(url, function() {\n        require([module], callback);\n    });\n}\n\nfunction setupApi(editor, editorDiv, settingDiv, ace, options) {\n    var session = editor.getSession();\n    var renderer = editor.renderer;\n\n    function toBool(value) {\n        return value === \"true\" || value == true;\n    }\n\n    editor.setDisplaySettings = function(display) {\n        if (display == null)\n            display = settingDiv.style.display == \"none\";\n        if (display) {\n            settingDiv.style.display = \"block\";\n            settingDiv.hideButton.focus();\n            editor.on(\"focus\", function onFocus() {\n                editor.removeListener(\"focus\", onFocus);\n                settingDiv.style.display = \"none\";\n            });\n        } else {\n            editor.focus();\n        }\n    };\n\n    editor.$setOption = editor.setOption;\n    editor.$getOption = editor.getOption;\n    editor.setOption = function(key, value) {\n        switch (key) {\n            case \"mode\":\n                editor.$setOption(\"mode\", \"ace/mode/\" + value);\n            break;\n            case \"theme\":\n                editor.$setOption(\"theme\", \"ace/theme/\" + value);\n            break;\n            case \"keybindings\":\n                switch (value) {\n                    case \"vim\":\n                        editor.setKeyboardHandler(\"ace/keyboard/vim\");\n                        break;\n                    case \"emacs\":\n                        editor.setKeyboardHandler(\"ace/keyboard/emacs\");\n                        break;\n                    default:\n                        editor.setKeyboardHandler(null);\n                }\n            break;\n\n            case \"wrap\":\n            case \"fontSize\":\n                editor.$setOption(key, value);\n            break;\n            \n            default:\n                editor.$setOption(key, toBool(value));\n        }\n    };\n\n    editor.getOption = function(key) {\n        switch (key) {\n            case \"mode\":\n                return editor.$getOption(\"mode\").substr(\"ace/mode/\".length);\n            break;\n\n            case \"theme\":\n                return editor.$getOption(\"theme\").substr(\"ace/theme/\".length);\n            break;\n\n            case \"keybindings\":\n                var value = editor.getKeyboardHandler();\n                switch (value && value.$id) {\n                    case \"ace/keyboard/vim\":\n                        return \"vim\";\n                    case \"ace/keyboard/emacs\":\n                        return \"emacs\";\n                    default:\n                        return \"ace\";\n                }\n            break;\n\n            default:\n                return editor.$getOption(key);\n        }\n    };\n\n    editor.setOptions(options);\n    return editor;\n}\n\nfunction setupSettingPanel(settingDiv, settingOpener, editor) {\n    var BOOL = null;\n\n    var desc = {\n        mode:            \"Mode:\",\n        wrap:            \"Soft Wrap:\",\n        theme:           \"Theme:\",\n        fontSize:        \"Font Size:\",\n        showGutter:      \"Display Gutter:\",\n        keybindings:     \"Keyboard\",\n        showPrintMargin: \"Show Print Margin:\",\n        useSoftTabs:     \"Use Soft Tabs:\",\n        showInvisibles:  \"Show Invisibles\"\n    };\n\n    var optionValues = {\n        mode: {\n            text:       \"Plain\",\n            javascript: \"JavaScript\",\n            xml:        \"XML\",\n            html:       \"HTML\",\n            css:        \"CSS\",\n            scss:       \"SCSS\",\n            python:     \"Python\",\n            php:        \"PHP\",\n            java:       \"Java\",\n            ruby:       \"Ruby\",\n            c_cpp:      \"C/C++\",\n            coffee:     \"CoffeeScript\",\n            json:       \"json\",\n            perl:       \"Perl\",\n            clojure:    \"Clojure\",\n            ocaml:      \"OCaml\",\n            csharp:     \"C#\",\n            haxe:       \"haXe\",\n            svg:        \"SVG\",\n            textile:    \"Textile\",\n            groovy:     \"Groovy\",\n            liquid:     \"Liquid\",\n            Scala:      \"Scala\"\n        },\n        theme: {\n            clouds:           \"Clouds\",\n            clouds_midnight:  \"Clouds Midnight\",\n            cobalt:           \"Cobalt\",\n            crimson_editor:   \"Crimson Editor\",\n            dawn:             \"Dawn\",\n            gob:              \"Green on Black\",\n            eclipse:          \"Eclipse\",\n            idle_fingers:     \"Idle Fingers\",\n            kr_theme:         \"Kr Theme\",\n            merbivore:        \"Merbivore\",\n            merbivore_soft:   \"Merbivore Soft\",\n            mono_industrial:  \"Mono Industrial\",\n            monokai:          \"Monokai\",\n            pastel_on_dark:   \"Pastel On Dark\",\n            solarized_dark:   \"Solarized Dark\",\n            solarized_light:  \"Solarized Light\",\n            textmate:         \"Textmate\",\n            twilight:         \"Twilight\",\n            vibrant_ink:      \"Vibrant Ink\"\n        },\n        showGutter: BOOL,\n        fontSize: {\n            \"10px\": \"10px\",\n            \"11px\": \"11px\",\n            \"12px\": \"12px\",\n            \"14px\": \"14px\",\n            \"16px\": \"16px\"\n        },\n        wrap: {\n            off:    \"Off\",\n            40:     \"40\",\n            80:     \"80\",\n            free:   \"Free\"\n        },\n        keybindings: {\n            ace: \"ace\",\n            vim: \"vim\",\n            emacs: \"emacs\"\n        },\n        showPrintMargin:    BOOL,\n        useSoftTabs:        BOOL,\n        showInvisibles:     BOOL\n    };\n\n    var table = [];\n    table.push(\"<table><tr><th>Setting</th><th>Value</th></tr>\");\n\n    function renderOption(builder, option, obj, cValue) {\n        if (!obj) {\n            builder.push(\n                \"<input type='checkbox' title='\", option, \"' \",\n                    cValue + \"\" == \"true\" ? \"checked='true'\" : \"\",\n               \"'></input>\"\n            );\n            return;\n        }\n        builder.push(\"<select title='\" + option + \"'>\");\n        for (var value in obj) {\n            builder.push(\"<option value='\" + value + \"' \");\n\n            if (cValue == value) {\n                builder.push(\" selected \");\n            }\n\n            builder.push(\">\",\n                obj[value],\n                \"</option>\");\n        }\n        builder.push(\"</select>\");\n    }\n\n    for (var option in exports.defaultOptions) {\n        table.push(\"<tr><td>\", desc[option], \"</td>\");\n        table.push(\"<td>\");\n        renderOption(table, option, optionValues[option], editor.getOption(option));\n        table.push(\"</td></tr>\");\n    }\n    table.push(\"</table>\");\n    settingDiv.innerHTML = table.join(\"\");\n\n    var onChange = function(e) {\n        var select = e.currentTarget;\n        editor.setOption(select.title, select.value);\n    };\n    var onClick = function(e) {\n        var cb = e.currentTarget;\n        editor.setOption(cb.title, cb.checked);\n    };\n    var selects = settingDiv.getElementsByTagName(\"select\");\n    for (var i = 0; i < selects.length; i++)\n        selects[i].onchange = onChange;\n    var cbs = settingDiv.getElementsByTagName(\"input\");\n    for (var i = 0; i < cbs.length; i++)\n        cbs[i].onclick = onClick;\n\n\n    var button = document.createElement(\"input\");\n    button.type = \"button\";\n    button.value = \"Hide\";\n    event.addListener(button, \"click\", function() {\n        editor.setDisplaySettings(false);\n    });\n    settingDiv.appendChild(button);\n    settingDiv.hideButton = button;\n}\nexports.defaultOptions = {\n    mode:               \"javascript\",\n    theme:              \"textmate\",\n    wrap:               \"off\",\n    fontSize:           \"12px\",\n    showGutter:         \"false\",\n    keybindings:        \"ace\",\n    showPrintMargin:    \"false\",\n    useSoftTabs:        \"true\",\n    showInvisibles:     \"false\"\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/textarea\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-themelist.js",
    "content": "ace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar themeData = [\n    [\"Chrome\"         ],\n    [\"Clouds\"         ],\n    [\"Crimson Editor\" ],\n    [\"Dawn\"           ],\n    [\"Dreamweaver\"    ],\n    [\"Eclipse\"        ],\n    [\"GitHub\"         ],\n    [\"IPlastic\"       ],\n    [\"Solarized Light\"],\n    [\"TextMate\"       ],\n    [\"Tomorrow\"       ],\n    [\"XCode\"          ],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\"           ,\"sqlserver\"               , \"light\"],\n    [\"Ambiance\"             ,\"ambiance\"                ,  \"dark\"],\n    [\"Chaos\"                ,\"chaos\"                   ,  \"dark\"],\n    [\"Clouds Midnight\"      ,\"clouds_midnight\"         ,  \"dark\"],\n    [\"Dracula\"              ,\"\"                        ,  \"dark\"],\n    [\"Cobalt\"               ,\"cobalt\"                  ,  \"dark\"],\n    [\"Gruvbox\"              ,\"gruvbox\"                 ,  \"dark\"],\n    [\"Green on Black\"       ,\"gob\"                     ,  \"dark\"],\n    [\"idle Fingers\"         ,\"idle_fingers\"            ,  \"dark\"],\n    [\"krTheme\"              ,\"kr_theme\"                ,  \"dark\"],\n    [\"Merbivore\"            ,\"merbivore\"               ,  \"dark\"],\n    [\"Merbivore Soft\"       ,\"merbivore_soft\"          ,  \"dark\"],\n    [\"Mono Industrial\"      ,\"mono_industrial\"         ,  \"dark\"],\n    [\"Monokai\"              ,\"monokai\"                 ,  \"dark\"],\n    [\"Pastel on dark\"       ,\"pastel_on_dark\"          ,  \"dark\"],\n    [\"Solarized Dark\"       ,\"solarized_dark\"          ,  \"dark\"],\n    [\"Terminal\"             ,\"terminal\"                ,  \"dark\"],\n    [\"Tomorrow Night\"       ,\"tomorrow_night\"          ,  \"dark\"],\n    [\"Tomorrow Night Blue\"  ,\"tomorrow_night_blue\"     ,  \"dark\"],\n    [\"Tomorrow Night Bright\",\"tomorrow_night_bright\"   ,  \"dark\"],\n    [\"Tomorrow Night 80s\"   ,\"tomorrow_night_eighties\" ,  \"dark\"],\n    [\"Twilight\"             ,\"twilight\"                ,  \"dark\"],\n    [\"Vibrant Ink\"          ,\"vibrant_ink\"             ,  \"dark\"]\n];\n\n\nexports.themesByName = {};\nexports.themes = themeData.map(function(data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});                (function() {\n                    ace.require([\"ace/ext/themelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/ext-whitespace.js",
    "content": "ace.define(\"ace/ext/whitespace\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nexports.$detectIndentation = function(lines, fallback) {\n    var stats = [];\n    var changes = [];\n    var tabIndents = 0;\n    var prevSpaces = 0;\n    var max = Math.min(lines.length, 1000);\n    for (var i = 0; i < max; i++) {\n        var line = lines[i];\n        if (!/^\\s*[^*+\\-\\s]/.test(line))\n            continue;\n\n        if (line[0] == \"\\t\") {\n            tabIndents++;\n            prevSpaces = -Number.MAX_VALUE;\n        } else {\n            var spaces = line.match(/^ */)[0].length;\n            if (spaces && line[spaces] != \"\\t\") {\n                var diff = spaces - prevSpaces;\n                if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff))\n                    changes[diff] = (changes[diff] || 0) + 1;\n    \n                stats[spaces] = (stats[spaces] || 0) + 1;\n            }\n            prevSpaces = spaces;\n        }\n        while (i < max && line[line.length - 1] == \"\\\\\")\n            line = lines[i++];\n    }\n    \n    function getScore(indent) {\n        var score = 0;\n        for (var i = indent; i < stats.length; i += indent)\n            score += stats[i] || 0;\n        return score;\n    }\n\n    var changesTotal = changes.reduce(function(a,b){return a+b;}, 0);\n\n    var first = {score: 0, length: 0};\n    var spaceIndents = 0;\n    for (var i = 1; i < 12; i++) {\n        var score = getScore(i);\n        if (i == 1) {\n            spaceIndents = score;\n            score = stats[1] ? 0.9 : 0.8;\n            if (!stats.length)\n                score = 0;\n        } else\n            score /= spaceIndents;\n\n        if (changes[i])\n            score += changes[i] / changesTotal;\n\n        if (score > first.score)\n            first = {score: score, length: i};\n    }\n\n    if (first.score && first.score > 1.4)\n        var tabLength = first.length;\n\n    if (tabIndents > spaceIndents + 1) {\n        if (tabLength == 1 || spaceIndents < tabIndents / 4 || first.score < 1.8)\n            tabLength = undefined;\n        return {ch: \"\\t\", length: tabLength};\n    }\n    if (spaceIndents > tabIndents + 1)\n        return {ch: \" \", length: tabLength};\n};\n\nexports.detectIndentation = function(session) {\n    var lines = session.getLines(0, 1000);\n    var indent = exports.$detectIndentation(lines) || {};\n\n    if (indent.ch)\n        session.setUseSoftTabs(indent.ch == \" \");\n\n    if (indent.length)\n        session.setTabSize(indent.length);\n    return indent;\n};\nexports.trimTrailingSpace = function(session, options) {\n    var doc = session.getDocument();\n    var lines = doc.getAllLines();\n    \n    var min = options && options.trimEmpty ? -1 : 0;\n    var cursors = [], ci = -1;\n    if (options && options.keepCursorPosition) {\n        if (session.selection.rangeCount) {\n            session.selection.rangeList.ranges.forEach(function(x, i, ranges) {\n               var next = ranges[i + 1];\n               if (next && next.cursor.row == x.cursor.row)\n                  return;\n              cursors.push(x.cursor);\n            });\n        } else {\n            cursors.push(session.selection.getCursor());\n        }\n        ci = 0;\n    }\n    var cursorRow = cursors[ci] && cursors[ci].row;\n\n    for (var i = 0, l=lines.length; i < l; i++) {\n        var line = lines[i];\n        var index = line.search(/\\s+$/);\n\n        if (i == cursorRow) {\n            if (index < cursors[ci].column && index > min)\n               index = cursors[ci].column;\n            ci++;\n            cursorRow = cursors[ci] ? cursors[ci].row : -1;\n        }\n\n        if (index > min)\n            doc.removeInLine(i, index, line.length);\n    }\n};\n\nexports.convertIndentation = function(session, ch, len) {\n    var oldCh = session.getTabString()[0];\n    var oldLen = session.getTabSize();\n    if (!len) len = oldLen;\n    if (!ch) ch = oldCh;\n\n    var tab = ch == \"\\t\" ? ch: lang.stringRepeat(ch, len);\n\n    var doc = session.doc;\n    var lines = doc.getAllLines();\n\n    var cache = {};\n    var spaceCache = {};\n    for (var i = 0, l=lines.length; i < l; i++) {\n        var line = lines[i];\n        var match = line.match(/^\\s*/)[0];\n        if (match) {\n            var w = session.$getStringScreenWidth(match)[0];\n            var tabCount = Math.floor(w/oldLen);\n            var reminder = w%oldLen;\n            var toInsert = cache[tabCount] || (cache[tabCount] = lang.stringRepeat(tab, tabCount));\n            toInsert += spaceCache[reminder] || (spaceCache[reminder] = lang.stringRepeat(\" \", reminder));\n\n            if (toInsert != match) {\n                doc.removeInLine(i, 0, match.length);\n                doc.insertInLine({row: i, column: 0}, toInsert);\n            }\n        }\n    }\n    session.setTabSize(len);\n    session.setUseSoftTabs(ch == \" \");\n};\n\nexports.$parseStringArg = function(text) {\n    var indent = {};\n    if (/t/.test(text))\n        indent.ch = \"\\t\";\n    else if (/s/.test(text))\n        indent.ch = \" \";\n    var m = text.match(/\\d+/);\n    if (m)\n        indent.length = parseInt(m[0], 10);\n    return indent;\n};\n\nexports.$parseArg = function(arg) {\n    if (!arg)\n        return {};\n    if (typeof arg == \"string\")\n        return exports.$parseStringArg(arg);\n    if (typeof arg.text == \"string\")\n        return exports.$parseStringArg(arg.text);\n    return arg;\n};\n\nexports.commands = [{\n    name: \"detectIndentation\",\n    exec: function(editor) {\n        exports.detectIndentation(editor.session);\n    }\n}, {\n    name: \"trimTrailingSpace\",\n    exec: function(editor, args) {\n        exports.trimTrailingSpace(editor.session, args);\n    }\n}, {\n    name: \"convertIndentation\",\n    exec: function(editor, arg) {\n        var indent = exports.$parseArg(arg);\n        exports.convertIndentation(editor.session, indent.ch, indent.length);\n    }\n}, {\n    name: \"setIndentation\",\n    exec: function(editor, arg) {\n        var indent = exports.$parseArg(arg);\n        indent.length && editor.session.setTabSize(indent.length);\n        indent.ch && editor.session.setUseSoftTabs(indent.ch == \" \");\n    }\n}];\n\n});                (function() {\n                    ace.require([\"ace/ext/whitespace\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/keybinding-emacs.js",
    "content": "ace.define(\"ace/occur\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/edit_session\",\"ace/search_highlight\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nfunction Occur() {}\n\noop.inherits(Occur, Search);\n\n(function() {\n    this.enter = function(editor, options) {\n        if (!options.needle) return false;\n        var pos = editor.getCursorPosition();\n        this.displayOccurContent(editor, options);\n        var translatedPos = this.originalToOccurPosition(editor.session, pos);\n        editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n    this.exit = function(editor, options) {\n        var pos = options.translatePosition && editor.getCursorPosition();\n        var translatedPos = pos && this.occurToOriginalPosition(editor.session, pos);\n        this.displayOriginalContent(editor);\n        if (translatedPos)\n            editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n\n    this.highlight = function(sess, regexp) {\n        var hl = sess.$occurHighlight = sess.$occurHighlight || sess.addDynamicMarker(\n                new SearchHighlight(null, \"ace_occur-highlight\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n\n    this.displayOccurContent = function(editor, options) {\n        this.$originalSession = editor.session;\n        var found = this.matchingLines(editor.session, options);\n        var lines = found.map(function(foundLine) { return foundLine.content; });\n        var occurSession = new EditSession(lines.join('\\n'));\n        occurSession.$occur = this;\n        occurSession.$occurMatchingLines = found;\n        editor.setSession(occurSession);\n        this.$useEmacsStyleLineStart = this.$originalSession.$useEmacsStyleLineStart;\n        occurSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n        this.highlight(occurSession, options.re);\n        occurSession._emit('changeBackMarker');\n    };\n\n    this.displayOriginalContent = function(editor) {\n        editor.setSession(this.$originalSession);\n        this.$originalSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n    };\n    this.originalToOccurPosition = function(session, pos) {\n        var lines = session.$occurMatchingLines;\n        var nullPos = {row: 0, column: 0};\n        if (!lines) return nullPos;\n        for (var i = 0; i < lines.length; i++) {\n            if (lines[i].row === pos.row)\n                return {row: i, column: pos.column};\n        }\n        return nullPos;\n    };\n    this.occurToOriginalPosition = function(session, pos) {\n        var lines = session.$occurMatchingLines;\n        if (!lines || !lines[pos.row])\n            return pos;\n        return {row: lines[pos.row].row, column: pos.column};\n    };\n\n    this.matchingLines = function(session, options) {\n        options = oop.mixin({}, options);\n        if (!session || !options.needle) return [];\n        var search = new Search();\n        search.set(options);\n        return search.findAll(session).reduce(function(lines, range) {\n            var row = range.start.row;\n            var last = lines[lines.length-1];\n            return last && last.row === row ?\n                lines :\n                lines.concat({row: row, content: session.getLine(row)});\n        }, []);\n    };\n\n}).call(Occur.prototype);\n\nvar dom = require('./lib/dom');\ndom.importCssString(\".ace_occur-highlight {\\n\\\n    border-radius: 4px;\\n\\\n    background-color: rgba(87, 255, 8, 0.25);\\n\\\n    position: absolute;\\n\\\n    z-index: 4;\\n\\\n    box-sizing: border-box;\\n\\\n    box-shadow: 0 0 4px rgb(91, 255, 50);\\n\\\n}\\n\\\n.ace_dark .ace_occur-highlight {\\n\\\n    background-color: rgb(80, 140, 85);\\n\\\n    box-shadow: 0 0 4px rgb(60, 120, 70);\\n\\\n}\\n\", \"incremental-occur-highlighting\");\n\nexports.Occur = Occur;\n\n});\n\nace.define(\"ace/commands/occur_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/occur\",\"ace/keyboard/hash_handler\",\"ace/lib/oop\"], function(require, exports, module) {\n\nvar config = require(\"../config\"),\n    Occur = require(\"../occur\").Occur;\nvar occurStartCommand = {\n    name: \"occur\",\n    exec: function(editor, options) {\n        var alreadyInOccur = !!editor.session.$occur;\n        var occurSessionActive = new Occur().enter(editor, options);\n        if (occurSessionActive && !alreadyInOccur)\n            OccurKeyboardHandler.installIn(editor);\n    },\n    readOnly: true\n};\n\nvar occurCommands = [{\n    name: \"occurexit\",\n    bindKey: 'esc|Ctrl-G',\n    exec: function(editor) {\n        var occur = editor.session.$occur;\n        if (!occur) return;\n        occur.exit(editor, {});\n        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);\n    },\n    readOnly: true\n}, {\n    name: \"occuraccept\",\n    bindKey: 'enter',\n    exec: function(editor) {\n        var occur = editor.session.$occur;\n        if (!occur) return;\n        occur.exit(editor, {translatePosition: true});\n        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);\n    },\n    readOnly: true\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar oop = require(\"../lib/oop\");\n\n\nfunction OccurKeyboardHandler() {}\n\noop.inherits(OccurKeyboardHandler, HashHandler);\n\n(function() {\n\n    this.isOccurHandler = true;\n\n    this.attach = function(editor) {\n        HashHandler.call(this, occurCommands, editor.commands.platform);\n        this.$editor = editor;\n    };\n\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function(data, hashId, key, keyCode) {\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        return (cmd && cmd.command) ? cmd : undefined;\n    };\n\n}).call(OccurKeyboardHandler.prototype);\n\nOccurKeyboardHandler.installIn = function(editor) {\n    var handler = new this();\n    editor.keyBinding.addKeyboardHandler(handler);\n    editor.commands.addCommands(occurCommands);\n};\n\nOccurKeyboardHandler.uninstallFrom = function(editor) {\n    editor.commands.removeCommands(occurCommands);\n    var handler = editor.getKeyboardHandler();\n    if (handler.isOccurHandler)\n        editor.keyBinding.removeKeyboardHandler(handler);\n};\n\nexports.occurStartCommand = occurStartCommand;\n\n});\n\nace.define(\"ace/commands/incremental_search_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/commands/occur_commands\"], function(require, exports, module) {\n\nvar config = require(\"../config\");\nvar oop = require(\"../lib/oop\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar occurStartCommand = require(\"./occur_commands\").occurStartCommand;\nexports.iSearchStartCommands = [{\n    name: \"iSearch\",\n    bindKey: {win: \"Ctrl-F\", mac: \"Command-F\"},\n    exec: function(editor, options) {\n        config.loadModule([\"core\", \"ace/incremental_search\"], function(e) {\n            var iSearch = e.iSearch = e.iSearch || new e.IncrementalSearch();\n            iSearch.activate(editor, options.backwards);\n            if (options.jumpToFirstMatch) iSearch.next(options);\n        });\n    },\n    readOnly: true\n}, {\n    name: \"iSearchBackwards\",\n    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {backwards: true}); },\n    readOnly: true\n}, {\n    name: \"iSearchAndGo\",\n    bindKey: {win: \"Ctrl-K\", mac: \"Command-G\"},\n    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {jumpToFirstMatch: true, useCurrentOrPrevSearch: true}); },\n    readOnly: true\n}, {\n    name: \"iSearchBackwardsAndGo\",\n    bindKey: {win: \"Ctrl-Shift-K\", mac: \"Command-Shift-G\"},\n    exec: function(editor) { editor.execCommand('iSearch', {jumpToFirstMatch: true, backwards: true, useCurrentOrPrevSearch: true}); },\n    readOnly: true\n}];\nexports.iSearchCommands = [{\n    name: \"restartSearch\",\n    bindKey: {win: \"Ctrl-F\", mac: \"Command-F\"},\n    exec: function(iSearch) {\n        iSearch.cancelSearch(true);\n    }\n}, {\n    name: \"searchForward\",\n    bindKey: {win: \"Ctrl-S|Ctrl-K\", mac: \"Ctrl-S|Command-G\"},\n    exec: function(iSearch, options) {\n        options.useCurrentOrPrevSearch = true;\n        iSearch.next(options);\n    }\n}, {\n    name: \"searchBackward\",\n    bindKey: {win: \"Ctrl-R|Ctrl-Shift-K\", mac: \"Ctrl-R|Command-Shift-G\"},\n    exec: function(iSearch, options) {\n        options.useCurrentOrPrevSearch = true;\n        options.backwards = true;\n        iSearch.next(options);\n    }\n}, {\n    name: \"extendSearchTerm\",\n    exec: function(iSearch, string) {\n        iSearch.addString(string);\n    }\n}, {\n    name: \"extendSearchTermSpace\",\n    bindKey: \"space\",\n    exec: function(iSearch) { iSearch.addString(' '); }\n}, {\n    name: \"shrinkSearchTerm\",\n    bindKey: \"backspace\",\n    exec: function(iSearch) {\n        iSearch.removeChar();\n    }\n}, {\n    name: 'confirmSearch',\n    bindKey: 'return',\n    exec: function(iSearch) { iSearch.deactivate(); }\n}, {\n    name: 'cancelSearch',\n    bindKey: 'esc|Ctrl-G',\n    exec: function(iSearch) { iSearch.deactivate(true); }\n}, {\n    name: 'occurisearch',\n    bindKey: 'Ctrl-O',\n    exec: function(iSearch) {\n        var options = oop.mixin({}, iSearch.$options);\n        iSearch.deactivate();\n        occurStartCommand.exec(iSearch.$editor, options);\n    }\n}, {\n    name: \"yankNextWord\",\n    bindKey: \"Ctrl-w\",\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorWordRight(); }),\n            string = ed.session.getTextRange(range);\n        iSearch.addString(string);\n    }\n}, {\n    name: \"yankNextChar\",\n    bindKey: \"Ctrl-Alt-y\",\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorRight(); }),\n            string = ed.session.getTextRange(range);\n        iSearch.addString(string);\n    }\n}, {\n    name: 'recenterTopBottom',\n    bindKey: 'Ctrl-l',\n    exec: function(iSearch) { iSearch.$editor.execCommand('recenterTopBottom'); }\n}, {\n    name: 'selectAllMatches',\n    bindKey: 'Ctrl-space',\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            hl = ed.session.$isearchHighlight,\n            ranges = hl && hl.cache ? hl.cache\n                .reduce(function(ranges, ea) {\n                    return ranges.concat(ea ? ea : []); }, []) : [];\n        iSearch.deactivate(false);\n        ranges.forEach(ed.selection.addRange.bind(ed.selection));\n    }\n}, {\n    name: 'searchAsRegExp',\n    bindKey: 'Alt-r',\n    exec: function(iSearch) {\n        iSearch.convertNeedleToRegExp();\n    }\n}].map(function(cmd) {\n    cmd.readOnly = true;\n    cmd.isIncrementalSearchCommand = true;\n    cmd.scrollIntoView = \"animate-cursor\";\n    return cmd;\n});\n\nfunction IncrementalSearchKeyboardHandler(iSearch) {\n    this.$iSearch = iSearch;\n}\n\noop.inherits(IncrementalSearchKeyboardHandler, HashHandler);\n\n(function() {\n\n    this.attach = function(editor) {\n        var iSearch = this.$iSearch;\n        HashHandler.call(this, exports.iSearchCommands, editor.commands.platform);\n        this.$commandExecHandler = editor.commands.addEventListener('exec', function(e) {\n            if (!e.command.isIncrementalSearchCommand)\n                return iSearch.deactivate();\n            e.stopPropagation();\n            e.preventDefault();\n            var scrollTop = editor.session.getScrollTop();\n            var result = e.command.exec(iSearch, e.args || {});\n            editor.renderer.scrollCursorIntoView(null, 0.5);\n            editor.renderer.animateScrolling(scrollTop);\n            return result;\n        });\n    };\n\n    this.detach = function(editor) {\n        if (!this.$commandExecHandler) return;\n        editor.commands.removeEventListener('exec', this.$commandExecHandler);\n        delete this.$commandExecHandler;\n    };\n\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function(data, hashId, key, keyCode) {\n        if (((hashId === 1/*ctrl*/ || hashId === 8/*command*/) && key === 'v')\n         || (hashId === 1/*ctrl*/ && key === 'y')) return null;\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        if (cmd.command) { return cmd; }\n        if (hashId == -1) {\n            var extendCmd = this.commands.extendSearchTerm;\n            if (extendCmd) { return {command: extendCmd, args: key}; }\n        }\n        return false;\n    };\n\n}).call(IncrementalSearchKeyboardHandler.prototype);\n\n\nexports.IncrementalSearchKeyboardHandler = IncrementalSearchKeyboardHandler;\n\n});\n\nace.define(\"ace/incremental_search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/search_highlight\",\"ace/commands/incremental_search_commands\",\"ace/lib/dom\",\"ace/commands/command_manager\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar iSearchCommandModule = require(\"./commands/incremental_search_commands\");\nvar ISearchKbd = iSearchCommandModule.IncrementalSearchKeyboardHandler;\nfunction IncrementalSearch() {\n    this.$options = {wrap: false, skipCurrent: false};\n    this.$keyboardHandler = new ISearchKbd(this);\n}\n\noop.inherits(IncrementalSearch, Search);\n\nfunction isRegExp(obj) {\n    return obj instanceof RegExp;\n}\n\nfunction regExpToObject(re) {\n    var string = String(re),\n        start = string.indexOf('/'),\n        flagStart = string.lastIndexOf('/');\n    return {\n        expression: string.slice(start+1, flagStart),\n        flags: string.slice(flagStart+1)\n    };\n}\n\nfunction stringToRegExp(string, flags) {\n    try {\n        return new RegExp(string, flags);\n    } catch (e) { return string; }\n}\n\nfunction objectToRegExp(obj) {\n    return stringToRegExp(obj.expression, obj.flags);\n}\n\n(function() {\n\n    this.activate = function(ed, backwards) {\n        this.$editor = ed;\n        this.$startPos = this.$currentPos = ed.getCursorPosition();\n        this.$options.needle = '';\n        this.$options.backwards = backwards;\n        ed.keyBinding.addKeyboardHandler(this.$keyboardHandler);\n        this.$originalEditorOnPaste = ed.onPaste; ed.onPaste = this.onPaste.bind(this);\n        this.$mousedownHandler = ed.addEventListener('mousedown', this.onMouseDown.bind(this));\n        this.selectionFix(ed);\n        this.statusMessage(true);\n    };\n\n    this.deactivate = function(reset) {\n        this.cancelSearch(reset);\n        var ed = this.$editor;\n        ed.keyBinding.removeKeyboardHandler(this.$keyboardHandler);\n        if (this.$mousedownHandler) {\n            ed.removeEventListener('mousedown', this.$mousedownHandler);\n            delete this.$mousedownHandler;\n        }\n        ed.onPaste = this.$originalEditorOnPaste;\n        this.message('');\n    };\n\n    this.selectionFix = function(editor) {\n        if (editor.selection.isEmpty() && !editor.session.$emacsMark) {\n            editor.clearSelection();\n        }\n    };\n\n    this.highlight = function(regexp) {\n        var sess = this.$editor.session,\n            hl = sess.$isearchHighlight = sess.$isearchHighlight || sess.addDynamicMarker(\n                new SearchHighlight(null, \"ace_isearch-result\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n\n    this.cancelSearch = function(reset) {\n        var e = this.$editor;\n        this.$prevNeedle = this.$options.needle;\n        this.$options.needle = '';\n        if (reset) {\n            e.moveCursorToPosition(this.$startPos);\n            this.$currentPos = this.$startPos;\n        } else {\n            e.pushEmacsMark && e.pushEmacsMark(this.$startPos, false);\n        }\n        this.highlight(null);\n        return Range.fromPoints(this.$currentPos, this.$currentPos);\n    };\n\n    this.highlightAndFindWithNeedle = function(moveToNext, needleUpdateFunc) {\n        if (!this.$editor) return null;\n        var options = this.$options;\n        if (needleUpdateFunc) {\n            options.needle = needleUpdateFunc.call(this, options.needle || '') || '';\n        }\n        if (options.needle.length === 0) {\n            this.statusMessage(true);\n            return this.cancelSearch(true);\n        }\n        options.start = this.$currentPos;\n        var session = this.$editor.session,\n            found = this.find(session),\n            shouldSelect = this.$editor.emacsMark ?\n                !!this.$editor.emacsMark() : !this.$editor.selection.isEmpty();\n        if (found) {\n            if (options.backwards) found = Range.fromPoints(found.end, found.start);\n            this.$editor.selection.setRange(Range.fromPoints(shouldSelect ? this.$startPos : found.end, found.end));\n            if (moveToNext) this.$currentPos = found.end;\n            this.highlight(options.re);\n        }\n\n        this.statusMessage(found);\n\n        return found;\n    };\n\n    this.addString = function(s) {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            if (!isRegExp(needle))\n              return needle + s;\n            var reObj = regExpToObject(needle);\n            reObj.expression += s;\n            return objectToRegExp(reObj);\n        });\n    };\n\n    this.removeChar = function(c) {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            if (!isRegExp(needle))\n              return needle.substring(0, needle.length-1);\n            var reObj = regExpToObject(needle);\n            reObj.expression = reObj.expression.substring(0, reObj.expression.length-1);\n            return objectToRegExp(reObj);\n        });\n    };\n\n    this.next = function(options) {\n        options = options || {};\n        this.$options.backwards = !!options.backwards;\n        this.$currentPos = this.$editor.getCursorPosition();\n        return this.highlightAndFindWithNeedle(true, function(needle) {\n            return options.useCurrentOrPrevSearch && needle.length === 0 ?\n                this.$prevNeedle || '' : needle;\n        });\n    };\n\n    this.onMouseDown = function(evt) {\n        this.deactivate();\n        return true;\n    };\n\n    this.onPaste = function(text) {\n        this.addString(text);\n    };\n\n    this.convertNeedleToRegExp = function() {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            return isRegExp(needle) ? needle : stringToRegExp(needle, 'ig');\n        });\n    };\n\n    this.convertNeedleToString = function() {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            return isRegExp(needle) ? regExpToObject(needle).expression : needle;\n        });\n    };\n\n    this.statusMessage = function(found) {\n        var options = this.$options, msg = '';\n        msg += options.backwards ? 'reverse-' : '';\n        msg += 'isearch: ' + options.needle;\n        msg += found ? '' : ' (not found)';\n        this.message(msg);\n    };\n\n    this.message = function(msg) {\n        if (this.$editor.showCommandLine) {\n            this.$editor.showCommandLine(msg);\n            this.$editor.focus();\n        } else {\n            console.log(msg);\n        }\n    };\n\n}).call(IncrementalSearch.prototype);\n\n\nexports.IncrementalSearch = IncrementalSearch;\n\nvar dom = require('./lib/dom');\ndom.importCssString && dom.importCssString(\"\\\n.ace_marker-layer .ace_isearch-result {\\\n  position: absolute;\\\n  z-index: 6;\\\n  box-sizing: border-box;\\\n}\\\ndiv.ace_isearch-result {\\\n  border-radius: 4px;\\\n  background-color: rgba(255, 200, 0, 0.5);\\\n  box-shadow: 0 0 4px rgb(255, 200, 0);\\\n}\\\n.ace_dark div.ace_isearch-result {\\\n  background-color: rgb(100, 110, 160);\\\n  box-shadow: 0 0 4px rgb(80, 90, 140);\\\n}\", \"incremental-search-highlighting\");\nvar commands = require(\"./commands/command_manager\");\n(function() {\n    this.setupIncrementalSearch = function(editor, val) {\n        if (this.usesIncrementalSearch == val) return;\n        this.usesIncrementalSearch = val;\n        var iSearchCommands = iSearchCommandModule.iSearchStartCommands;\n        var method = val ? 'addCommands' : 'removeCommands';\n        this[method](iSearchCommands);\n    };\n}).call(commands.CommandManager.prototype);\nvar Editor = require(\"./editor\").Editor;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    useIncrementalSearch: {\n        set: function(val) {\n            this.keyBinding.$handlers.forEach(function(handler) {\n                if (handler.setupIncrementalSearch) {\n                    handler.setupIncrementalSearch(this, val);\n                }\n            });\n            this._emit('incrementalSearchSettingChanged', {isEnabled: val});\n        }\n    }\n});\n\n});\n\nace.define(\"ace/keyboard/emacs\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/incremental_search\",\"ace/commands/incremental_search_commands\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nrequire(\"../incremental_search\");\nvar iSearchCommandModule = require(\"../commands/incremental_search_commands\");\n\n\nvar HashHandler = require(\"./hash_handler\").HashHandler;\nexports.handler = new HashHandler();\n\nexports.handler.isEmacs = true;\nexports.handler.$id = \"ace/keyboard/emacs\";\n\nvar initialized = false;\nvar $formerLongWords;\nvar $formerLineStart;\n\nexports.handler.attach = function(editor) {\n    if (!initialized) {\n        initialized = true;\n        dom.importCssString('\\\n            .emacs-mode .ace_cursor{\\\n                border: 1px rgba(50,250,50,0.8) solid!important;\\\n                box-sizing: border-box!important;\\\n                background-color: rgba(0,250,0,0.9);\\\n                opacity: 0.5;\\\n            }\\\n            .emacs-mode .ace_hidden-cursors .ace_cursor{\\\n                opacity: 1;\\\n                background-color: transparent;\\\n            }\\\n            .emacs-mode .ace_overwrite-cursors .ace_cursor {\\\n                opacity: 1;\\\n                background-color: transparent;\\\n                border-width: 0 0 2px 2px !important;\\\n            }\\\n            .emacs-mode .ace_text-layer {\\\n                z-index: 4\\\n            }\\\n            .emacs-mode .ace_cursor-layer {\\\n                z-index: 2\\\n            }', 'emacsMode'\n        );\n    }\n    $formerLongWords = editor.session.$selectLongWords;\n    editor.session.$selectLongWords = true;\n    $formerLineStart = editor.session.$useEmacsStyleLineStart;\n    editor.session.$useEmacsStyleLineStart = true;\n\n    editor.session.$emacsMark = null; // the active mark\n    editor.session.$emacsMarkRing = editor.session.$emacsMarkRing || [];\n\n    editor.emacsMark = function() {\n        return this.session.$emacsMark;\n    };\n\n    editor.setEmacsMark = function(p) {\n        this.session.$emacsMark = p;\n    };\n\n    editor.pushEmacsMark = function(p, activate) {\n        var prevMark = this.session.$emacsMark;\n        if (prevMark)\n            this.session.$emacsMarkRing.push(prevMark);\n        if (!p || activate) this.setEmacsMark(p);\n        else this.session.$emacsMarkRing.push(p);\n    };\n\n    editor.popEmacsMark = function() {\n        var mark = this.emacsMark();\n        if (mark) { this.setEmacsMark(null); return mark; }\n        return this.session.$emacsMarkRing.pop();\n    };\n\n    editor.getLastEmacsMark = function(p) {\n        return this.session.$emacsMark || this.session.$emacsMarkRing.slice(-1)[0];\n    };\n\n    editor.emacsMarkForSelection = function(replacement) {\n        var sel = this.selection,\n            multiRangeLength = this.multiSelect ?\n                this.multiSelect.getAllRanges().length : 1,\n            selIndex = sel.index || 0,\n            markRing = this.session.$emacsMarkRing,\n            markIndex = markRing.length - (multiRangeLength - selIndex),\n            lastMark = markRing[markIndex] || sel.anchor;\n        if (replacement) {\n            markRing.splice(markIndex, 1,\n                \"row\" in replacement && \"column\" in replacement ?\n                    replacement : undefined);\n        }\n        return lastMark;\n    };\n\n    editor.on(\"click\", $resetMarkMode);\n    editor.on(\"changeSession\", $kbSessionChange);\n    editor.renderer.$blockCursor = true;\n    editor.setStyle(\"emacs-mode\");\n    editor.commands.addCommands(commands);\n    exports.handler.platform = editor.commands.platform;\n    editor.$emacsModeHandler = this;\n    editor.addEventListener('copy', this.onCopy);\n    editor.addEventListener('paste', this.onPaste);\n};\n\nexports.handler.detach = function(editor) {\n    editor.renderer.$blockCursor = false;\n    editor.session.$selectLongWords = $formerLongWords;\n    editor.session.$useEmacsStyleLineStart = $formerLineStart;\n    editor.removeEventListener(\"click\", $resetMarkMode);\n    editor.removeEventListener(\"changeSession\", $kbSessionChange);\n    editor.unsetStyle(\"emacs-mode\");\n    editor.commands.removeCommands(commands);\n    editor.removeEventListener('copy', this.onCopy);\n    editor.removeEventListener('paste', this.onPaste);\n    editor.$emacsModeHandler = null;\n};\n\nvar $kbSessionChange = function(e) {\n    if (e.oldSession) {\n        e.oldSession.$selectLongWords = $formerLongWords;\n        e.oldSession.$useEmacsStyleLineStart = $formerLineStart;\n    }\n\n    $formerLongWords = e.session.$selectLongWords;\n    e.session.$selectLongWords = true;\n    $formerLineStart = e.session.$useEmacsStyleLineStart;\n    e.session.$useEmacsStyleLineStart = true;\n\n    if (!e.session.hasOwnProperty('$emacsMark'))\n        e.session.$emacsMark = null;\n    if (!e.session.hasOwnProperty('$emacsMarkRing'))\n        e.session.$emacsMarkRing = [];\n};\n\nvar $resetMarkMode = function(e) {\n    e.editor.session.$emacsMark = null;\n};\n\nvar keys = require(\"../lib/keys\").KEY_MODS;\nvar eMods = {C: \"ctrl\", S: \"shift\", M: \"alt\", CMD: \"command\"};\nvar combinations = [\"C-S-M-CMD\",\n                    \"S-M-CMD\", \"C-M-CMD\", \"C-S-CMD\", \"C-S-M\",\n                    \"M-CMD\", \"S-CMD\", \"S-M\", \"C-CMD\", \"C-M\", \"C-S\",\n                    \"CMD\", \"M\", \"S\", \"C\"];\ncombinations.forEach(function(c) {\n    var hashId = 0;\n    c.split(\"-\").forEach(function(c) {\n        hashId = hashId | keys[eMods[c]];\n    });\n    eMods[hashId] = c.toLowerCase() + \"-\";\n});\n\nexports.handler.onCopy = function(e, editor) {\n    if (editor.$handlesEmacsOnCopy) return;\n    editor.$handlesEmacsOnCopy = true;\n    exports.handler.commands.killRingSave.exec(editor);\n    editor.$handlesEmacsOnCopy = false;\n};\n\nexports.handler.onPaste = function(e, editor) {\n    editor.pushEmacsMark(editor.getCursorPosition());\n};\n\nexports.handler.bindKey = function(key, command) {\n    if (typeof key == \"object\")\n        key = key[this.platform];\n    if (!key)\n        return;\n\n    var ckb = this.commandKeyBinding;\n    key.split(\"|\").forEach(function(keyPart) {\n        keyPart = keyPart.toLowerCase();\n        ckb[keyPart] = command;\n        var keyParts = keyPart.split(\" \").slice(0,-1);\n        keyParts.reduce(function(keyMapKeys, keyPart, i) {\n            var prefix = keyMapKeys[i-1] ? keyMapKeys[i-1] + ' ' : '';\n            return keyMapKeys.concat([prefix + keyPart]);\n        }, []).forEach(function(keyPart) {\n            if (!ckb[keyPart]) ckb[keyPart] = \"null\";\n        });\n    }, this);\n};\n\nexports.handler.getStatusText = function(editor, data) {\n  var str = \"\";\n  if (data.count)\n    str += data.count;\n  if (data.keyChain)\n    str += \" \" + data.keyChain;\n  return str;\n};\n\nexports.handler.handleKeyboard = function(data, hashId, key, keyCode) {\n    if (keyCode === -1) return undefined;\n\n    var editor = data.editor;\n    editor._signal(\"changeStatus\");\n    if (hashId == -1) {\n        editor.pushEmacsMark();\n        if (data.count) {\n            var str = new Array(data.count + 1).join(key);\n            data.count = null;\n            return {command: \"insertstring\", args: str};\n        }\n    }\n\n    var modifier = eMods[hashId];\n    if (modifier == \"c-\" || data.count) {\n        var count = parseInt(key[key.length - 1]);\n        if (typeof count === 'number' && !isNaN(count)) {\n            data.count = Math.max(data.count, 0) || 0;\n            data.count = 10 * data.count + count;\n            return {command: \"null\"};\n        }\n    }\n    if (modifier) key = modifier + key;\n    if (data.keyChain) key = data.keyChain += \" \" + key;\n    var command = this.commandKeyBinding[key];\n    data.keyChain = command == \"null\" ? key : \"\";\n    if (!command) return undefined;\n    if (command === \"null\") return {command: \"null\"};\n\n    if (command === \"universalArgument\") {\n        data.count = -4;\n        return {command: \"null\"};\n    }\n    var args;\n    if (typeof command !== \"string\") {\n        args = command.args;\n        if (command.command) command = command.command;\n        if (command === \"goorselect\") {\n            command = editor.emacsMark() ? args[1] : args[0];\n            args = null;\n        }\n    }\n\n    if (typeof command === \"string\") {\n        if (command === \"insertstring\" ||\n            command === \"splitline\" ||\n            command === \"togglecomment\") {\n            editor.pushEmacsMark();\n        }\n        command = this.commands[command] || editor.commands.commands[command];\n        if (!command) return undefined;\n    }\n\n    if (!command.readOnly && !command.isYank)\n        data.lastCommand = null;\n\n    if (!command.readOnly && editor.emacsMark())\n        editor.setEmacsMark(null);\n        \n    if (data.count) {\n        var count = data.count;\n        data.count = 0;\n        if (!command || !command.handlesCount) {\n            return {\n                args: args,\n                command: {\n                    exec: function(editor, args) {\n                        for (var i = 0; i < count; i++)\n                            command.exec(editor, args);\n                    },\n                    multiSelectAction: command.multiSelectAction\n                }\n            };\n        } else {\n            if (!args) args = {};\n            if (typeof args === 'object') args.count = count;\n        }\n    }\n\n    return {command: command, args: args};\n};\n\nexports.emacsKeys = {\n    \"Up|C-p\"      : {command: \"goorselect\", args: [\"golineup\",\"selectup\"]},\n    \"Down|C-n\"    : {command: \"goorselect\", args: [\"golinedown\",\"selectdown\"]},\n    \"Left|C-b\"    : {command: \"goorselect\", args: [\"gotoleft\",\"selectleft\"]},\n    \"Right|C-f\"   : {command: \"goorselect\", args: [\"gotoright\",\"selectright\"]},\n    \"C-Left|M-b\"  : {command: \"goorselect\", args: [\"gotowordleft\",\"selectwordleft\"]},\n    \"C-Right|M-f\" : {command: \"goorselect\", args: [\"gotowordright\",\"selectwordright\"]},\n    \"Home|C-a\"    : {command: \"goorselect\", args: [\"gotolinestart\",\"selecttolinestart\"]},\n    \"End|C-e\"     : {command: \"goorselect\", args: [\"gotolineend\",\"selecttolineend\"]},\n    \"C-Home|S-M-,\": {command: \"goorselect\", args: [\"gotostart\",\"selecttostart\"]},\n    \"C-End|S-M-.\" : {command: \"goorselect\", args: [\"gotoend\",\"selecttoend\"]},\n    \"S-Up|S-C-p\"      : \"selectup\",\n    \"S-Down|S-C-n\"    : \"selectdown\",\n    \"S-Left|S-C-b\"    : \"selectleft\",\n    \"S-Right|S-C-f\"   : \"selectright\",\n    \"S-C-Left|S-M-b\"  : \"selectwordleft\",\n    \"S-C-Right|S-M-f\" : \"selectwordright\",\n    \"S-Home|S-C-a\"    : \"selecttolinestart\",\n    \"S-End|S-C-e\"     : \"selecttolineend\",\n    \"S-C-Home\"        : \"selecttostart\",\n    \"S-C-End\"         : \"selecttoend\",\n\n    \"C-l\" : \"recenterTopBottom\",\n    \"M-s\" : \"centerselection\",\n    \"M-g\": \"gotoline\",\n    \"C-x C-p\": \"selectall\",\n    \"C-Down\": {command: \"goorselect\", args: [\"gotopagedown\",\"selectpagedown\"]},\n    \"C-Up\": {command: \"goorselect\", args: [\"gotopageup\",\"selectpageup\"]},\n    \"PageDown|C-v\": {command: \"goorselect\", args: [\"gotopagedown\",\"selectpagedown\"]},\n    \"PageUp|M-v\": {command: \"goorselect\", args: [\"gotopageup\",\"selectpageup\"]},\n    \"S-C-Down\": \"selectpagedown\",\n    \"S-C-Up\": \"selectpageup\",\n\n    \"C-s\": \"iSearch\",\n    \"C-r\": \"iSearchBackwards\",\n\n    \"M-C-s\": \"findnext\",\n    \"M-C-r\": \"findprevious\",\n    \"S-M-5\": \"replace\",\n    \"Backspace\": \"backspace\",\n    \"Delete|C-d\": \"del\",\n    \"Return|C-m\": {command: \"insertstring\", args: \"\\n\"}, // \"newline\"\n    \"C-o\": \"splitline\",\n\n    \"M-d|C-Delete\": {command: \"killWord\", args: \"right\"},\n    \"C-Backspace|M-Backspace|M-Delete\": {command: \"killWord\", args: \"left\"},\n    \"C-k\": \"killLine\",\n\n    \"C-y|S-Delete\": \"yank\",\n    \"M-y\": \"yankRotate\",\n    \"C-g\": \"keyboardQuit\",\n\n    \"C-w|C-S-W\": \"killRegion\",\n    \"M-w\": \"killRingSave\",\n    \"C-Space\": \"setMark\",\n    \"C-x C-x\": \"exchangePointAndMark\",\n\n    \"C-t\": \"transposeletters\",\n    \"M-u\": \"touppercase\",    // Doesn't work\n    \"M-l\": \"tolowercase\",\n    \"M-/\": \"autocomplete\",   // Doesn't work\n    \"C-u\": \"universalArgument\",\n\n    \"M-;\": \"togglecomment\",\n\n    \"C-/|C-x u|S-C--|C-z\": \"undo\",\n    \"S-C-/|S-C-x u|C--|S-C-z\": \"redo\", // infinite undo?\n    \"C-x r\":  \"selectRectangularRegion\",\n    \"M-x\": {command: \"focusCommandLine\", args: \"M-x \"}\n};\n\n\nexports.handler.bindKeys(exports.emacsKeys);\n\nexports.handler.addCommands({\n    recenterTopBottom: function(editor) {\n        var renderer = editor.renderer;\n        var pos = renderer.$cursorLayer.getPixelPosition();\n        var h = renderer.$size.scrollerHeight - renderer.lineHeight;\n        var scrollTop = renderer.scrollTop;\n        if (Math.abs(pos.top - scrollTop) < 2) {\n            scrollTop = pos.top - h;\n        } else if (Math.abs(pos.top - scrollTop - h * 0.5) < 2) {\n            scrollTop = pos.top;\n        } else {\n            scrollTop = pos.top - h * 0.5;\n        }\n        editor.session.setScrollTop(scrollTop);\n    },\n    selectRectangularRegion:  function(editor) {\n        editor.multiSelect.toggleBlockSelection();\n    },\n    setMark:  {\n        exec: function(editor, args) {\n\n            if (args && args.count) {\n                if (editor.inMultiSelectMode) editor.forEachSelection(moveToMark);\n                else moveToMark();\n                moveToMark();\n                return;\n            }\n\n            var mark = editor.emacsMark(),\n                ranges = editor.selection.getAllRanges(),\n                rangePositions = ranges.map(function(r) { return {row: r.start.row, column: r.start.column}; }),\n                transientMarkModeActive = true,\n                hasNoSelection = ranges.every(function(range) { return range.isEmpty(); });\n            if (transientMarkModeActive && (mark || !hasNoSelection)) {\n                if (editor.inMultiSelectMode) editor.forEachSelection({exec: editor.clearSelection.bind(editor)});\n                else editor.clearSelection();\n                if (mark) editor.pushEmacsMark(null);\n                return;\n            }\n\n            if (!mark) {\n                rangePositions.forEach(function(pos) { editor.pushEmacsMark(pos); });\n                editor.setEmacsMark(rangePositions[rangePositions.length-1]);\n                return;\n            }\n\n            function moveToMark() {\n                var mark = editor.popEmacsMark();\n                mark && editor.moveCursorToPosition(mark);\n            }\n\n        },\n        readOnly: true,\n        handlesCount: true\n    },\n    exchangePointAndMark: {\n        exec: function exchangePointAndMark$exec(editor, args) {\n            var sel = editor.selection;\n            if (!args.count && !sel.isEmpty()) { // just invert selection\n                sel.setSelectionRange(sel.getRange(), !sel.isBackwards());\n                return;\n            }\n\n            if (args.count) { // replace mark and point\n                var pos = {row: sel.lead.row, column: sel.lead.column};\n                sel.clearSelection();\n                sel.moveCursorToPosition(editor.emacsMarkForSelection(pos));\n            } else { // create selection to last mark\n                sel.selectToPosition(editor.emacsMarkForSelection());\n            }\n        },\n        readOnly: true,\n        handlesCount: true,\n        multiSelectAction: \"forEach\"\n    },\n    killWord: {\n        exec: function(editor, dir) {\n            editor.clearSelection();\n            if (dir == \"left\")\n                editor.selection.selectWordLeft();\n            else\n                editor.selection.selectWordRight();\n\n            var range = editor.getSelectionRange();\n            var text = editor.session.getTextRange(range);\n            exports.killRing.add(text);\n\n            editor.session.remove(range);\n            editor.clearSelection();\n        },\n        multiSelectAction: \"forEach\"\n    },\n    killLine: function(editor) {\n        editor.pushEmacsMark(null);\n        editor.clearSelection();\n        var range = editor.getSelectionRange();\n        var line = editor.session.getLine(range.start.row);\n        range.end.column = line.length;\n        line = line.substr(range.start.column);\n        \n        var foldLine = editor.session.getFoldLine(range.start.row);\n        if (foldLine && range.end.row != foldLine.end.row) {\n            range.end.row = foldLine.end.row;\n            line = \"x\";\n        }\n        if (/^\\s*$/.test(line)) {\n            range.end.row++;\n            line = editor.session.getLine(range.end.row);\n            range.end.column = /^\\s*$/.test(line) ? line.length : 0;\n        }\n        var text = editor.session.getTextRange(range);\n        if (editor.prevOp.command == this)\n            exports.killRing.append(text);\n        else\n            exports.killRing.add(text);\n\n        editor.session.remove(range);\n        editor.clearSelection();\n    },\n    yank: function(editor) {\n        editor.onPaste(exports.killRing.get() || '');\n        editor.keyBinding.$data.lastCommand = \"yank\";\n    },\n    yankRotate: function(editor) {\n        if (editor.keyBinding.$data.lastCommand != \"yank\")\n            return;\n        editor.undo();\n        editor.session.$emacsMarkRing.pop(); // also undo recording mark\n        editor.onPaste(exports.killRing.rotate());\n        editor.keyBinding.$data.lastCommand = \"yank\";\n    },\n    killRegion: {\n        exec: function(editor) {\n            exports.killRing.add(editor.getCopyText());\n            editor.commands.byName.cut.exec(editor);\n            editor.setEmacsMark(null);\n        },\n        readOnly: true,\n        multiSelectAction: \"forEach\"\n    },\n    killRingSave: {\n        exec: function(editor) {\n\n            editor.$handlesEmacsOnCopy = true;\n            var marks = editor.session.$emacsMarkRing.slice(),\n                deselectedMarks = [];\n            exports.killRing.add(editor.getCopyText());\n\n            setTimeout(function() {\n                function deselect() {\n                    var sel = editor.selection, range = sel.getRange(),\n                        pos = sel.isBackwards() ? range.end : range.start;\n                    deselectedMarks.push({row: pos.row, column: pos.column});\n                    sel.clearSelection();\n                }\n                editor.$handlesEmacsOnCopy = false;\n                if (editor.inMultiSelectMode) editor.forEachSelection({exec: deselect});\n                else deselect();\n                editor.session.$emacsMarkRing = marks.concat(deselectedMarks.reverse());\n            }, 0);\n        },\n        readOnly: true\n    },\n    keyboardQuit: function(editor) {\n        editor.selection.clearSelection();\n        editor.setEmacsMark(null);\n        editor.keyBinding.$data.count = null;\n    },\n    focusCommandLine: function(editor, arg) {\n        if (editor.showCommandLine)\n            editor.showCommandLine(arg);\n    }\n});\n\nexports.handler.addCommands(iSearchCommandModule.iSearchStartCommands);\n\nvar commands = exports.handler.commands;\ncommands.yank.isYank = true;\ncommands.yankRotate.isYank = true;\n\nexports.killRing = {\n    $data: [],\n    add: function(str) {\n        str && this.$data.push(str);\n        if (this.$data.length > 30)\n            this.$data.shift();\n    },\n    append: function(str) {\n        var idx = this.$data.length - 1;\n        var text = this.$data[idx] || \"\";\n        if (str) text += str;\n        if (text) this.$data[idx] = text;\n    },\n    get: function(n) {\n        n = n || 1;\n        return this.$data.slice(this.$data.length-n, this.$data.length).reverse().join('\\n');\n    },\n    pop: function() {\n        if (this.$data.length > 1)\n            this.$data.pop();\n        return this.get();\n    },\n    rotate: function() {\n        this.$data.unshift(this.$data.pop());\n        return this.get();\n    }\n};\n\n});                (function() {\n                    ace.require([\"ace/keyboard/emacs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/keybinding-sublime.js",
    "content": "ace.define(\"ace/keyboard/sublime\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/oop\",\"ace/lib/useragent\",\"ace/keyboard/hash_handler\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar oop = require(\"../lib/oop\");\nvar useragent = require(\"../lib/useragent\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\n\nfunction moveBySubWords(editor, direction, extend) {\n    var selection = editor.selection;\n    var row = selection.lead.row;\n    var column = selection.lead.column;\n\n    var line = editor.session.getLine(row);\n    if (!line[column + direction]) {\n        var method = (extend ? \"selectWord\" : \"moveCursorShortWord\")\n            + (direction == 1 ? \"Right\" : \"Left\");\n        return editor.selection[method]();\n    }\n    if (direction == -1) column--;\n    while (line[column]) {\n        var type = getType(line[column]) + getType(line[column + direction]);\n        column += direction;\n        if (direction == 1) {\n            if (type == \"WW\" && getType(line[column + 1]) == \"w\")\n                break;\n        }\n        else {\n            if (type == \"wW\") {\n                if (getType(line[column - 1]) == \"W\") {\n                    column -= 1;\n                    break;\n                } else {\n                    continue;\n                }\n            }\n            if (type == \"Ww\")\n                break;\n        }\n        if (/w[s_oW]|_[sWo]|o[s_wW]|s[W]|W[so]/.test(type))\n            break;\n    }\n    if (direction == -1) column++;\n    if (extend)\n        editor.selection.moveCursorTo(row, column);\n    else\n        editor.selection.moveTo(row, column);\n    \n    function getType(x) {\n        if (!x) return \"-\";\n        if (/\\s/.test(x)) return \"s\";\n        if (x == \"_\") return \"_\";\n        if (x.toUpperCase() == x && x.toLowerCase() != x) return \"W\";\n        if (x.toUpperCase() != x && x.toLowerCase() == x) return \"w\";\n        return \"o\";\n    }\n}\n\nexports.handler = new HashHandler();\n \nexports.handler.addCommands([{\n    name: \"find_all_under\",\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        editor.findAll();\n    },\n    readOnly: true\n}, {\n    name: \"find_under\",\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        editor.findNext();\n    },\n    readOnly: true\n}, {\n    name: \"find_under_prev\",\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        editor.findPrevious();\n    },\n    readOnly: true\n}, {\n    name: \"find_under_expand\",\n    exec: function(editor) {\n        editor.selectMore(1, false, true);\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"find_under_expand_skip\",\n    exec: function(editor) {\n        editor.selectMore(1, true, true);\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"delete_to_hard_bol\",\n    exec: function(editor) {\n        var pos = editor.selection.getCursor();\n        editor.session.remove({\n            start: { row: pos.row, column: 0 },\n            end: pos\n        });\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"delete_to_hard_eol\",\n    exec: function(editor) {\n        var pos = editor.selection.getCursor();\n        editor.session.remove({\n            start: pos,\n            end: { row: pos.row, column: Infinity }\n        });\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"moveToWordStartLeft\",\n    exec: function(editor) {\n        editor.selection.moveCursorLongWordLeft();\n        editor.clearSelection();\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"moveToWordEndRight\",\n    exec: function(editor) {\n        editor.selection.moveCursorLongWordRight();\n        editor.clearSelection();\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"selectToWordStartLeft\",\n    exec: function(editor) {\n        var sel = editor.selection;\n        sel.$moveSelection(sel.moveCursorLongWordLeft);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"selectToWordEndRight\",\n    exec: function(editor) {\n        var sel = editor.selection;\n        sel.$moveSelection(sel.moveCursorLongWordRight);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"selectSubWordRight\",\n    exec: function(editor) {\n        moveBySubWords(editor, 1, true);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectSubWordLeft\",\n    exec: function(editor) {\n        moveBySubWords(editor, -1, true);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"moveSubWordRight\",\n    exec: function(editor) {\n        moveBySubWords(editor, 1);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"moveSubWordLeft\",\n    exec: function(editor) {\n        moveBySubWords(editor, -1);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}]);\n\n\n[{\n    bindKey: { mac: \"cmd-k cmd-backspace|cmd-backspace\", win: \"ctrl-shift-backspace|ctrl-k ctrl-backspace\" },\n    name: \"removetolinestarthard\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-k|cmd-delete|ctrl-k\", win: \"ctrl-shift-delete|ctrl-k ctrl-k\" },\n    name: \"removetolineendhard\"\n}, {\n    bindKey: { mac: \"cmd-shift-d\", win: \"ctrl-shift-d\" },\n    name: \"duplicateSelection\"\n}, {\n    bindKey: { mac: \"cmd-l\", win: \"ctrl-l\" },\n    name: \"expandtoline\"\n}, \n{\n    bindKey: {mac: \"cmd-shift-a\", win: \"ctrl-shift-a\"},\n    name: \"expandSelection\",\n    args: {to: \"tag\"}\n}, {\n    bindKey: {mac: \"cmd-shift-j\", win: \"ctrl-shift-j\"},\n    name: \"expandSelection\",\n    args: {to: \"indentation\"}\n}, {\n    bindKey: {mac: \"ctrl-shift-m\", win: \"ctrl-shift-m\"},\n    name: \"expandSelection\",\n    args: {to: \"brackets\"}\n}, {\n    bindKey: {mac: \"cmd-shift-space\", win: \"ctrl-shift-space\"},\n    name: \"expandSelection\",\n    args: {to: \"scope\"}\n},\n{\n    bindKey: { mac: \"ctrl-cmd-g\", win: \"alt-f3\" },\n    name: \"find_all_under\"\n}, {\n    bindKey: { mac: \"alt-cmd-g\", win: \"ctrl-f3\" },\n    name: \"find_under\"\n}, {\n    bindKey: { mac: \"shift-alt-cmd-g\", win: \"ctrl-shift-f3\" },\n    name: \"find_under_prev\"\n}, {\n    bindKey: { mac: \"cmd-g\", win: \"f3\" },\n    name: \"findnext\"\n}, {\n    bindKey: { mac: \"shift-cmd-g\", win: \"shift-f3\" },\n    name: \"findprevious\"\n}, {\n    bindKey: { mac: \"cmd-d\", win: \"ctrl-d\" },\n    name: \"find_under_expand\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-d\", win: \"ctrl-k ctrl-d\" },\n    name: \"find_under_expand_skip\"\n}, \n{\n    bindKey: { mac: \"cmd-alt-[\", win: \"ctrl-shift-[\" },\n    name: \"toggleFoldWidget\"\n}, {\n    bindKey: { mac: \"cmd-alt-]\", win: \"ctrl-shift-]\" },\n    name: \"unfold\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-0|cmd-k cmd-j\", win: \"ctrl-k ctrl-0|ctrl-k ctrl-j\" },\n    name: \"unfoldall\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-1\", win: \"ctrl-k ctrl-1\" },\n    name: \"foldOther\",\n    args: { level: 1 }\n},\n{\n    bindKey: { win: \"ctrl-left\", mac: \"alt-left\" },\n    name: \"moveToWordStartLeft\"\n}, {\n    bindKey: { win: \"ctrl-right\", mac: \"alt-right\" },\n    name: \"moveToWordEndRight\"\n}, {\n    bindKey: { win: \"ctrl-shift-left\", mac: \"alt-shift-left\" },\n    name: \"selectToWordStartLeft\"\n}, {\n    bindKey: { win: \"ctrl-shift-right\", mac: \"alt-shift-right\" },\n    name: \"selectToWordEndRight\"\n}, \n{\n    bindKey: {mac: \"ctrl-alt-shift-right|ctrl-shift-right\", win: \"alt-shift-right\"},\n    name: \"selectSubWordRight\"\n}, {\n    bindKey: {mac: \"ctrl-alt-shift-left|ctrl-shift-left\", win: \"alt-shift-left\"},\n    name: \"selectSubWordLeft\"\n}, {\n    bindKey: {mac: \"ctrl-alt-right|ctrl-right\", win: \"alt-right\"},\n    name: \"moveSubWordRight\"\n}, {\n    bindKey: {mac: \"ctrl-alt-left|ctrl-left\", win: \"alt-left\"},\n    name: \"moveSubWordLeft\"\n}, \n{\n    bindKey: { mac: \"ctrl-m\", win: \"ctrl-m\" },\n    name: \"jumptomatching\",\n    args: { to: \"brackets\" }\n}, \n{\n    bindKey: { mac: \"ctrl-f6\", win: \"ctrl-f6\" },\n    name: \"goToNextError\"\n}, {\n    bindKey: { mac: \"ctrl-shift-f6\", win: \"ctrl-shift-f6\" },\n    name: \"goToPreviousError\"\n},\n\n{\n    bindKey: { mac: \"ctrl-o\" },\n    name: \"splitline\"\n}, \n{\n    bindKey: {mac: \"ctrl-shift-w\", win: \"alt-shift-w\"},\n    name: \"surrowndWithTag\"\n},{\n    bindKey: {mac: \"cmd-alt-.\", win: \"alt-.\"},\n    name: \"close_tag\"\n}, \n{\n    bindKey: { mac: \"cmd-j\", win: \"ctrl-j\" },\n    name: \"joinlines\"\n}, \n\n{\n    bindKey: {mac: \"ctrl--\", win: \"alt--\"},\n    name: \"jumpBack\"\n}, {\n    bindKey: {mac: \"ctrl-shift--\", win: \"alt-shift--\"},\n    name: \"jumpForward\"\n}, \n\n{\n    bindKey: { mac: \"cmd-k cmd-l\", win: \"ctrl-k ctrl-l\" },\n    name: \"tolowercase\"\n}, {\n    bindKey: { mac: \"cmd-k cmd-u\", win: \"ctrl-k ctrl-u\" },\n    name: \"touppercase\"\n}, \n\n{\n    bindKey: {mac: \"cmd-shift-v\", win: \"ctrl-shift-v\"},\n    name: \"paste_and_indent\"\n}, {\n    bindKey: {mac: \"cmd-k cmd-v|cmd-alt-v\", win: \"ctrl-k ctrl-v\"},\n    name: \"paste_from_history\"\n}, \n\n{\n    bindKey: { mac: \"cmd-shift-enter\", win: \"ctrl-shift-enter\" },\n    name: \"addLineBefore\"\n}, {\n    bindKey: { mac: \"cmd-enter\", win: \"ctrl-enter\" },\n    name: \"addLineAfter\"\n}, {\n    bindKey: { mac: \"ctrl-shift-k\", win: \"ctrl-shift-k\" },\n    name: \"removeline\"\n}, {\n    bindKey: { mac: \"ctrl-alt-up\", win: \"ctrl-up\" },\n    name: \"scrollup\"\n}, {\n    bindKey: { mac: \"ctrl-alt-down\", win: \"ctrl-down\" },\n    name: \"scrolldown\"\n}, {\n    bindKey: { mac: \"cmd-a\", win: \"ctrl-a\" },\n    name: \"selectall\"\n}, {\n    bindKey: { linux: \"alt-shift-down\", mac: \"ctrl-shift-down\", win: \"ctrl-alt-down\" },\n    name: \"addCursorBelow\"\n}, {\n    bindKey: { linux: \"alt-shift-up\", mac: \"ctrl-shift-up\", win: \"ctrl-alt-up\" },\n    name: \"addCursorAbove\"\n},\n\n\n{\n    bindKey: { mac: \"cmd-k cmd-c|ctrl-l\", win: \"ctrl-k ctrl-c\" },\n    name: \"centerselection\"\n}, \n\n{\n    bindKey: { mac: \"f5\", win: \"f9\" },\n    name: \"sortlines\"\n}, \n{\n    bindKey: {mac: \"ctrl-f5\", win: \"ctrl-f9\"},\n    name: \"sortlines\",\n    args: {caseSensitive: true}\n},\n{\n    bindKey: { mac: \"cmd-shift-l\", win: \"ctrl-shift-l\" },\n    name: \"splitIntoLines\"\n}, {\n    bindKey: { mac: \"ctrl-cmd-down\", win: \"ctrl-shift-down\" },\n    name: \"movelinesdown\"\n}, {\n    bindKey: { mac: \"ctrl-cmd-up\", win: \"ctrl-shift-up\" },\n    name: \"movelinesup\"\n}, {\n    bindKey: { mac: \"alt-down\", win: \"alt-down\" },\n    name: \"modifyNumberDown\"\n}, {\n    bindKey: { mac: \"alt-up\", win: \"alt-up\" },\n    name: \"modifyNumberUp\"\n}, {\n    bindKey: { mac: \"cmd-/\", win: \"ctrl-/\" },\n    name: \"togglecomment\"\n}, {\n    bindKey: { mac: \"cmd-alt-/\", win: \"ctrl-shift-/\" },\n    name: \"toggleBlockComment\"\n},\n\n\n{\n    bindKey: { linux: \"ctrl-alt-q\", mac: \"ctrl-q\", win: \"ctrl-q\" },\n    name: \"togglerecording\"\n}, {\n    bindKey: { linux: \"ctrl-alt-shift-q\", mac: \"ctrl-shift-q\", win: \"ctrl-shift-q\" },\n    name: \"replaymacro\"\n}, \n\n{\n    bindKey: { mac: \"ctrl-t\", win: \"ctrl-t\" },\n    name: \"transpose\"\n}\n\n].forEach(function(binding) {\n    var command = exports.handler.commands[binding.name];\n    if (command)\n        command.bindKey = binding.bindKey;\n    exports.handler.bindKey(binding.bindKey, command || binding.name);\n});\n\n});                (function() {\n                    ace.require([\"ace/keyboard/sublime\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/keybinding-vim.js",
    "content": "ace.define(\"ace/keyboard/vim\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/search\",\"ace/lib/useragent\",\"ace/search_highlight\",\"ace/commands/multi_select_commands\",\"ace/mode/text\",\"ace/multi_select\"], function(require, exports, module) {\n  'use strict';\n\n  function log() {\n    var d = \"\";\n    function format(p) {\n      if (typeof p != \"object\")\n        return p + \"\";\n      if (\"line\" in p) {\n        return p.line + \":\" + p.ch;\n      }\n      if (\"anchor\" in p) {\n        return format(p.anchor) + \"->\" + format(p.head);\n      }\n      if (Array.isArray(p))\n        return \"[\" + p.map(function(x) {\n          return format(x);\n        }) + \"]\";\n      return JSON.stringify(p);\n    }\n    for (var i = 0; i < arguments.length; i++) {\n      var p = arguments[i];\n      var f = format(p);\n      d += f + \"  \";\n    }\n    console.log(d);\n  }\n  var Range = require(\"../range\").Range;\n  var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n  var dom = require(\"../lib/dom\");\n  var oop = require(\"../lib/oop\");\n  var KEYS = require(\"../lib/keys\");\n  var event = require(\"../lib/event\");\n  var Search = require(\"../search\").Search;\n  var useragent = require(\"../lib/useragent\");\n  var SearchHighlight = require(\"../search_highlight\").SearchHighlight;\n  var multiSelectCommands = require(\"../commands/multi_select_commands\");\n  var TextModeTokenRe = require(\"../mode/text\").Mode.prototype.tokenRe;\n  require(\"../multi_select\");\n\n  var CodeMirror = function(ace) {\n    this.ace = ace;\n    this.state = {};\n    this.marks = {};\n    this.$uid = 0;\n    this.onChange = this.onChange.bind(this);\n    this.onSelectionChange = this.onSelectionChange.bind(this);\n    this.onBeforeEndOperation = this.onBeforeEndOperation.bind(this);\n    this.ace.on('change', this.onChange);\n    this.ace.on('changeSelection', this.onSelectionChange);\n    this.ace.on('beforeEndOperation', this.onBeforeEndOperation);\n  };\n  CodeMirror.Pos = function(line, ch) {\n    if (!(this instanceof Pos)) return new Pos(line, ch);\n    this.line = line; this.ch = ch;\n  };\n  CodeMirror.defineOption = function(name, val, setter) {};\n  CodeMirror.commands = {\n    redo: function(cm) { cm.ace.redo(); },\n    undo: function(cm) { cm.ace.undo(); },\n    newlineAndIndent: function(cm) { cm.ace.insert(\"\\n\"); }\n  };\n  CodeMirror.keyMap = {};\n  CodeMirror.addClass = CodeMirror.rmClass = function() {};\n  CodeMirror.e_stop = CodeMirror.e_preventDefault = event.stopEvent;\n  CodeMirror.keyName = function(e) {\n    var key = (KEYS[e.keyCode] || e.key || \"\");\n    if (key.length == 1) key = key.toUpperCase();\n    key = event.getModifierString(e).replace(/(^|-)\\w/g, function(m) {\n      return m.toUpperCase();\n    }) + key;\n    return key;\n  };\n  CodeMirror.keyMap['default'] = function(key) {\n    return function(cm) {\n      var cmd = cm.ace.commands.commandKeyBinding[key.toLowerCase()];\n      return cmd && cm.ace.execCommand(cmd) !== false;\n    };\n  };\n  CodeMirror.lookupKey = function lookupKey(key, map, handle) {\n    if (typeof map == \"string\")\n      map = CodeMirror.keyMap[map];\n    var found = typeof map == \"function\" ? map(key) : map[key];\n    if (found === false) return \"nothing\";\n    if (found === \"...\") return \"multi\";\n    if (found != null && handle(found)) return \"handled\";\n\n    if (map.fallthrough) {\n      if (!Array.isArray(map.fallthrough))\n        return lookupKey(key, map.fallthrough, handle);\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle);\n        if (result) return result;\n      }\n    }\n  };\n\n  CodeMirror.signal = function(o, name, e) { return o._signal(name, e) };\n  CodeMirror.on = event.addListener;\n  CodeMirror.off = event.removeListener;\n  CodeMirror.isWordChar = function(ch) {\n    if (ch < \"\\x7f\") return /^\\w$/.test(ch);\n    TextModeTokenRe.lastIndex = 0;\n    return TextModeTokenRe.test(ch);\n  };\n  \n(function() {\n  oop.implement(CodeMirror.prototype, EventEmitter);\n  \n  this.destroy = function() {\n    this.ace.off('change', this.onChange);\n    this.ace.off('changeSelection', this.onSelectionChange);\n    this.ace.off('beforeEndOperation', this.onBeforeEndOperation);\n    this.removeOverlay();\n  };\n  this.virtualSelectionMode = function() {\n    return this.ace.inVirtualSelectionMode && this.ace.selection.index;\n  };\n  this.onChange = function(delta) {\n    var change = { text: delta.action[0] == 'i' ? delta.lines : [] };\n    var curOp = this.curOp = this.curOp || {};\n    if (!curOp.changeHandlers)\n      curOp.changeHandlers = this._eventRegistry[\"change\"] && this._eventRegistry[\"change\"].slice();\n    if (!curOp.lastChange) {\n      curOp.lastChange = curOp.change = change;\n    } else {\n      curOp.lastChange.next = curOp.lastChange = change;\n    }\n    this.$updateMarkers(delta);\n  };\n  this.onSelectionChange = function() {\n    var curOp = this.curOp = this.curOp || {};\n    if (!curOp.cursorActivityHandlers)\n      curOp.cursorActivityHandlers = this._eventRegistry[\"cursorActivity\"] && this._eventRegistry[\"cursorActivity\"].slice();\n    this.curOp.cursorActivity = true;\n    if (this.ace.inMultiSelectMode) {\n      this.ace.keyBinding.removeKeyboardHandler(multiSelectCommands.keyboardHandler);\n    }\n  };\n  this.operation = function(fn, force) {\n    if (!force && this.curOp || force && this.curOp && this.curOp.force) {\n      return fn();\n    }\n    if (force || !this.ace.curOp) {\n      if (this.curOp)\n        this.onBeforeEndOperation();\n    }\n    if (!this.ace.curOp) {\n      var prevOp = this.ace.prevOp;\n      this.ace.startOperation({\n        command: { name: \"vim\",  scrollIntoView: \"cursor\" }\n      });\n    }\n    var curOp = this.curOp = this.curOp || {};\n    this.curOp.force = force;\n    var result = fn();\n    if (this.ace.curOp && this.ace.curOp.command.name == \"vim\") {\n      if (this.state.dialog)\n        this.ace.curOp.command.scrollIntoView = false;\n      this.ace.endOperation();\n      if (!curOp.cursorActivity && !curOp.lastChange && prevOp)\n        this.ace.prevOp = prevOp;\n    }\n    if (force || !this.ace.curOp) {\n      if (this.curOp)\n        this.onBeforeEndOperation();\n    }\n    return result;\n  };\n  this.onBeforeEndOperation = function() {\n    var op = this.curOp;\n    if (op) {\n      if (op.change) { this.signal(\"change\", op.change, op); }\n      if (op && op.cursorActivity) { this.signal(\"cursorActivity\", null, op); }\n      this.curOp = null;\n    }\n  };\n\n  this.signal = function(eventName, e, handlers) {\n    var listeners = handlers ? handlers[eventName + \"Handlers\"]\n        : (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](this, e);\n  };\n  this.firstLine = function() { return 0; };\n  this.lastLine = function() { return this.ace.session.getLength() - 1; };\n  this.lineCount = function() { return this.ace.session.getLength(); };\n  this.setCursor = function(line, ch) {\n    if (typeof line === 'object') {\n      ch = line.ch;\n      line = line.line;\n    }\n    if (!this.ace.inVirtualSelectionMode)\n      this.ace.exitMultiSelectMode();\n    this.ace.session.unfold({row: line, column: ch});\n    this.ace.selection.moveTo(line, ch);\n  };\n  this.getCursor = function(p) {\n    var sel = this.ace.selection;\n    var pos = p == 'anchor' ? (sel.isEmpty() ? sel.lead : sel.anchor) :\n        p == 'head' || !p ? sel.lead : sel.getRange()[p];\n    return toCmPos(pos);\n  };\n  this.listSelections = function(p) {\n    var ranges = this.ace.multiSelect.rangeList.ranges;\n    if (!ranges.length || this.ace.inVirtualSelectionMode)\n      return [{anchor: this.getCursor('anchor'), head: this.getCursor('head')}];\n    return ranges.map(function(r) {\n      return {\n        anchor: this.clipPos(toCmPos(r.cursor == r.end ? r.start : r.end)),\n        head: this.clipPos(toCmPos(r.cursor))\n      };\n    }, this);\n  };\n  this.setSelections = function(p, primIndex) {\n    var sel = this.ace.multiSelect;\n    var ranges = p.map(function(x) {\n      var anchor = toAcePos(x.anchor);\n      var head = toAcePos(x.head);\n      var r = Range.comparePoints(anchor, head) < 0\n        ? new Range.fromPoints(anchor, head)\n        : new Range.fromPoints(head, anchor);\n      r.cursor = Range.comparePoints(r.start, head) ? r.end : r.start;\n      return r;\n    });\n    \n    if (this.ace.inVirtualSelectionMode) {\n      this.ace.selection.fromOrientedRange(ranges[0]);\n      return;\n    }\n    if (!primIndex) {\n        ranges = ranges.reverse();\n    } else if (ranges[primIndex]) {\n       ranges.push(ranges.splice(primIndex, 1)[0]);\n    }\n    sel.toSingleRange(ranges[0].clone());\n    var session = this.ace.session;\n    for (var i = 0; i < ranges.length; i++) {\n      var range = session.$clipRangeToDocument(ranges[i]); // todo why ace doesn't do this?\n      sel.addRange(range);\n    }\n  };\n  this.setSelection = function(a, h, options) {\n    var sel = this.ace.selection;\n    sel.moveTo(a.line, a.ch);\n    sel.selectTo(h.line, h.ch);\n    if (options && options.origin == '*mouse') {\n      this.onBeforeEndOperation();\n    }\n  };\n  this.somethingSelected = function(p) {\n    return !this.ace.selection.isEmpty();\n  };\n  this.clipPos = function(p) {\n    var pos = this.ace.session.$clipPositionToDocument(p.line, p.ch);\n    return toCmPos(pos);\n  };\n  this.markText = function(cursor) {\n    return {clear: function() {}, find: function() {}};\n  };\n  this.$updateMarkers = function(delta) {\n    var isInsert = delta.action == \"insert\";\n    var start = delta.start;\n    var end = delta.end;\n    var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n    var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n    if (isInsert) end = start;\n    \n    for (var i in this.marks) {\n      var point = this.marks[i];\n      var cmp = Range.comparePoints(point, start);\n      if (cmp < 0) {\n        continue; // delta starts after the range\n      }\n      if (cmp === 0) {\n        if (isInsert) {\n          if (point.bias == 1) {\n            cmp = 1;\n          } else {\n            point.bias = -1;\n            continue;\n          }\n        }\n      }\n      var cmp2 = isInsert ? cmp : Range.comparePoints(point, end);\n      if (cmp2 > 0) {\n        point.row += rowShift;\n        point.column += point.row == end.row ? colShift : 0;\n        continue;\n      }\n      if (!isInsert && cmp2 <= 0) {\n        point.row = start.row;\n        point.column = start.column;\n        if (cmp2 === 0)\n          point.bias = 1;\n      }\n    }\n  };\n  var Marker = function(cm, id, row, column) {\n    this.cm = cm;\n    this.id = id;\n    this.row = row;\n    this.column = column;\n    cm.marks[this.id] = this;\n  };\n  Marker.prototype.clear = function() { delete this.cm.marks[this.id] };\n  Marker.prototype.find = function() { return toCmPos(this) };\n  this.setBookmark = function(cursor, options) {\n    var bm = new Marker(this, this.$uid++, cursor.line, cursor.ch);\n    if (!options || !options.insertLeft)\n      bm.$insertRight = true;\n    this.marks[bm.id] = bm;\n    return bm;\n  };\n  this.moveH = function(increment, unit) {\n    if (unit == 'char') {\n      var sel = this.ace.selection;\n      sel.clearSelection();\n      sel.moveCursorBy(0, increment);\n    }\n  };\n  this.findPosV = function(start, amount, unit, goalColumn) {\n    if (unit == 'page') {\n      var renderer = this.ace.renderer;\n      var config = renderer.layerConfig;\n      amount = amount * Math.floor(config.height / config.lineHeight);\n      unit = 'line';\n    }\n    if (unit == 'line') {\n      var screenPos = this.ace.session.documentToScreenPosition(start.line, start.ch);\n      if (goalColumn != null)\n        screenPos.column = goalColumn;\n      screenPos.row += amount;\n      screenPos.row = Math.min(Math.max(0, screenPos.row), this.ace.session.getScreenLength() - 1);\n      var pos = this.ace.session.screenToDocumentPosition(screenPos.row, screenPos.column);\n      return toCmPos(pos);\n    } else {\n      debugger;\n    }\n  };\n  this.charCoords = function(pos, mode) {\n    if (mode == 'div' || !mode) {\n      var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n      return {left: sc.column, top: sc.row};\n    }if (mode == 'local') {\n      var renderer = this.ace.renderer;\n      var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n      var lh = renderer.layerConfig.lineHeight;\n      var cw = renderer.layerConfig.characterWidth;\n      var top = lh * sc.row;\n      return {left: sc.column * cw, top: top, bottom: top + lh};\n    }\n  };\n  this.coordsChar = function(pos, mode) {\n    var renderer = this.ace.renderer;\n    if (mode == 'local') {\n      var row = Math.max(0, Math.floor(pos.top / renderer.lineHeight));\n      var col = Math.max(0, Math.floor(pos.left / renderer.characterWidth));\n      var ch = renderer.session.screenToDocumentPosition(row, col);\n      return toCmPos(ch);\n    } else if (mode == 'div') {\n      throw \"not implemented\";\n    }\n  };\n  this.getSearchCursor = function(query, pos, caseFold) {\n    var caseSensitive = false;\n    var isRegexp = false;\n    if (query instanceof RegExp && !query.global) {\n      caseSensitive = !query.ignoreCase;\n      query = query.source;\n      isRegexp = true;\n    }\n    var search = new Search();\n    if (pos.ch == undefined) pos.ch = Number.MAX_VALUE;\n    var acePos = {row: pos.line, column: pos.ch};\n    var cm = this;\n    var last = null;\n    return {\n      findNext: function() { return this.find(false) },\n      findPrevious: function() {return this.find(true) },\n      find: function(back) {\n        search.setOptions({\n          needle: query,\n          caseSensitive: caseSensitive,\n          wrap: false,\n          backwards: back,\n          regExp: isRegexp,\n          start: last || acePos\n        });\n        var range = search.find(cm.ace.session);\n        if (range && range.isEmpty()) {\n          if (cm.getLine(range.start.row).length == range.start.column) {\n            search.$options.start = range;\n            range = search.find(cm.ace.session);\n          }\n        }\n        last = range;\n        return last;\n      },\n      from: function() { return last && toCmPos(last.start) },\n      to: function() { return last && toCmPos(last.end) },\n      replace: function(text) {\n        if (last) {\n          last.end = cm.ace.session.doc.replace(last, text);\n        }\n      }\n    };\n  };\n  this.scrollTo = function(x, y) {\n    var renderer = this.ace.renderer;\n    var config = renderer.layerConfig;\n    var maxHeight = config.maxHeight;\n    maxHeight -= (renderer.$size.scrollerHeight - renderer.lineHeight) * renderer.$scrollPastEnd;\n    if (y != null) this.ace.session.setScrollTop(Math.max(0, Math.min(y, maxHeight)));\n    if (x != null) this.ace.session.setScrollLeft(Math.max(0, Math.min(x, config.width)));\n  };\n  this.scrollInfo = function() { return 0; };\n  this.scrollIntoView = function(pos, margin) {\n    if (pos) {\n      var renderer = this.ace.renderer;\n      var viewMargin = { \"top\": 0, \"bottom\": margin };\n      renderer.scrollCursorIntoView(toAcePos(pos),\n        (renderer.lineHeight * 2) / renderer.$size.scrollerHeight, viewMargin);\n    }\n  };\n  this.getLine = function(row) { return this.ace.session.getLine(row) };\n  this.getRange = function(s, e) {\n    return this.ace.session.getTextRange(new Range(s.line, s.ch, e.line, e.ch));\n  };\n  this.replaceRange = function(text, s, e) {\n    if (!e) e = s;\n    return this.ace.session.replace(new Range(s.line, s.ch, e.line, e.ch), text);\n  };\n  this.replaceSelections = function(p) {\n    var sel = this.ace.selection;\n    if (this.ace.inVirtualSelectionMode) {\n      this.ace.session.replace(sel.getRange(), p[0] || \"\");\n      return;\n    }\n    sel.inVirtualSelectionMode = true;\n    var ranges = sel.rangeList.ranges;\n    if (!ranges.length) ranges = [this.ace.multiSelect.getRange()];\n    for (var i = ranges.length; i--;)\n       this.ace.session.replace(ranges[i], p[i] || \"\");\n    sel.inVirtualSelectionMode = false;\n  };\n  this.getSelection = function() {\n    return this.ace.getSelectedText();\n  };\n  this.getSelections = function() {\n    return this.listSelections().map(function(x) {\n      return this.getRange(x.anchor, x.head);\n    }, this);\n  };\n  this.getInputField = function() {\n    return this.ace.textInput.getElement();\n  };\n  this.getWrapperElement = function() {\n    return this.ace.container;\n  };\n  var optMap = {\n    indentWithTabs: \"useSoftTabs\",\n    indentUnit: \"tabSize\",\n    tabSize: \"tabSize\",\n    firstLineNumber: \"firstLineNumber\",\n    readOnly: \"readOnly\"\n  };\n  this.setOption = function(name, val) {\n    this.state[name] = val;\n    switch (name) {\n      case 'indentWithTabs':\n        name = optMap[name];\n        val = !val;\n      break;\n      default:\n        name = optMap[name];\n    }\n    if (name)\n      this.ace.setOption(name, val);\n  };\n  this.getOption = function(name, val) {\n    var aceOpt = optMap[name];\n    if (aceOpt)\n      val = this.ace.getOption(aceOpt);\n    switch (name) {\n      case 'indentWithTabs':\n        name = optMap[name];\n        return !val;\n    }\n    return aceOpt ? val : this.state[name];\n  };\n  this.toggleOverwrite = function(on) {\n    this.state.overwrite = on;\n    return this.ace.setOverwrite(on);\n  };\n  this.addOverlay = function(o) {\n    if (!this.$searchHighlight || !this.$searchHighlight.session) {\n      var highlight = new SearchHighlight(null, \"ace_highlight-marker\", \"text\");\n      var marker = this.ace.session.addDynamicMarker(highlight);\n      highlight.id = marker.id;\n      highlight.session = this.ace.session;\n      highlight.destroy = function(o) {\n        highlight.session.off(\"change\", highlight.updateOnChange);\n        highlight.session.off(\"changeEditor\", highlight.destroy);\n        highlight.session.removeMarker(highlight.id);\n        highlight.session = null;\n      };\n      highlight.updateOnChange = function(delta) {\n        var row = delta.start.row;\n        if (row == delta.end.row) highlight.cache[row] = undefined;\n        else highlight.cache.splice(row, highlight.cache.length);\n      };\n      highlight.session.on(\"changeEditor\", highlight.destroy);\n      highlight.session.on(\"change\", highlight.updateOnChange);\n    }\n    var re = new RegExp(o.query.source, \"gmi\");\n    this.$searchHighlight = o.highlight = highlight;\n    this.$searchHighlight.setRegexp(re);\n    this.ace.renderer.updateBackMarkers();\n  };\n  this.removeOverlay = function(o) {\n    if (this.$searchHighlight && this.$searchHighlight.session) {\n      this.$searchHighlight.destroy();\n    }\n  };\n  this.getScrollInfo = function() {\n    var renderer = this.ace.renderer;\n    var config = renderer.layerConfig;\n    return {\n      left: renderer.scrollLeft,\n      top: renderer.scrollTop,\n      height: config.maxHeight,\n      width: config.width,\n      clientHeight: config.height,\n      clientWidth: config.width\n    };\n  };\n  this.getValue = function() {\n    return this.ace.getValue();\n  };\n  this.setValue = function(v) {\n    return this.ace.setValue(v);\n  };\n  this.getTokenTypeAt = function(pos) {\n    var token = this.ace.session.getTokenAt(pos.line, pos.ch);\n    return token && /comment|string/.test(token.type) ? \"string\" : \"\";\n  };\n  this.findMatchingBracket = function(pos) {\n    var m = this.ace.session.findMatchingBracket(toAcePos(pos));\n    return {to: m && toCmPos(m)};\n  };\n  this.indentLine = function(line, method) {\n    if (method === true)\n        this.ace.session.indentRows(line, line, \"\\t\");\n    else if (method === false)\n        this.ace.session.outdentRows(new Range(line, 0, line, 0));\n  };\n  this.indexFromPos = function(pos) {\n    return this.ace.session.doc.positionToIndex(toAcePos(pos));\n  };\n  this.posFromIndex = function(index) {\n    return toCmPos(this.ace.session.doc.indexToPosition(index));\n  };\n  this.focus = function(index) {\n    return this.ace.textInput.focus();\n  };\n  this.blur = function(index) {\n    return this.ace.blur();\n  };\n  this.defaultTextHeight = function(index) {\n    return this.ace.renderer.layerConfig.lineHeight;\n  };\n  this.scanForBracket = function(pos, dir, _, options) {\n    var re = options.bracketRegex.source;\n    var tokenRe = /paren|text|operator|tag/;\n    if (dir == 1) {\n      var m = this.ace.session.$findClosingBracket(re.slice(1, 2), toAcePos(pos), tokenRe);\n    } else {\n      var m = this.ace.session.$findOpeningBracket(re.slice(-2, -1), {row: pos.line, column: pos.ch + 1}, tokenRe);\n    }\n    return m && {pos: toCmPos(m)};\n  };\n  this.refresh = function() {\n    return this.ace.resize(true);\n  };\n  this.getMode = function() {\n    return { name : this.getOption(\"mode\") };\n  }\n}).call(CodeMirror.prototype);\n  function toAcePos(cmPos) {\n    return {row: cmPos.line, column: cmPos.ch};\n  }\n  function toCmPos(acePos) {\n    return new Pos(acePos.row, acePos.column);\n  }\n\n  var StringStream = CodeMirror.StringStream = function(string, tabSize) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n  };\n\n  StringStream.prototype = {\n    eol: function() {return this.pos >= this.string.length;},\n    sol: function() {return this.pos == this.lineStart;},\n    peek: function() {return this.string.charAt(this.pos) || undefined;},\n    next: function() {\n      if (this.pos < this.string.length)\n        return this.string.charAt(this.pos++);\n    },\n    eat: function(match) {\n      var ch = this.string.charAt(this.pos);\n      if (typeof match == \"string\") var ok = ch == match;\n      else var ok = ch && (match.test ? match.test(ch) : match(ch));\n      if (ok) {++this.pos; return ch;}\n    },\n    eatWhile: function(match) {\n      var start = this.pos;\n      while (this.eat(match)){}\n      return this.pos > start;\n    },\n    eatSpace: function() {\n      var start = this.pos;\n      while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n      return this.pos > start;\n    },\n    skipToEnd: function() {this.pos = this.string.length;},\n    skipTo: function(ch) {\n      var found = this.string.indexOf(ch, this.pos);\n      if (found > -1) {this.pos = found; return true;}\n    },\n    backUp: function(n) {this.pos -= n;},\n    column: function() {\n      throw \"not implemented\";\n    },\n    indentation: function() {\n      throw \"not implemented\";\n    },\n    match: function(pattern, consume, caseInsensitive) {\n      if (typeof pattern == \"string\") {\n        var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};\n        var substr = this.string.substr(this.pos, pattern.length);\n        if (cased(substr) == cased(pattern)) {\n          if (consume !== false) this.pos += pattern.length;\n          return true;\n        }\n      } else {\n        var match = this.string.slice(this.pos).match(pattern);\n        if (match && match.index > 0) return null;\n        if (match && consume !== false) this.pos += match[0].length;\n        return match;\n      }\n    },\n    current: function(){return this.string.slice(this.start, this.pos);},\n    hideFirstChars: function(n, inner) {\n      this.lineStart += n;\n      try { return inner(); }\n      finally { this.lineStart -= n; }\n    }\n  };\nCodeMirror.defineExtension = function(name, fn) {\n  CodeMirror.prototype[name] = fn;\n};\ndom.importCssString(\".normal-mode .ace_cursor{\\\n    border: none;\\\n    background-color: rgba(255,0,0,0.5);\\\n}\\\n.normal-mode .ace_hidden-cursors .ace_cursor{\\\n  background-color: transparent;\\\n  border: 1px solid red;\\\n  opacity: 0.7\\\n}\\\n.ace_dialog {\\\n  position: absolute;\\\n  left: 0; right: 0;\\\n  background: inherit;\\\n  z-index: 15;\\\n  padding: .1em .8em;\\\n  overflow: hidden;\\\n  color: inherit;\\\n}\\\n.ace_dialog-top {\\\n  border-bottom: 1px solid #444;\\\n  top: 0;\\\n}\\\n.ace_dialog-bottom {\\\n  border-top: 1px solid #444;\\\n  bottom: 0;\\\n}\\\n.ace_dialog input {\\\n  border: none;\\\n  outline: none;\\\n  background: transparent;\\\n  width: 20em;\\\n  color: inherit;\\\n  font-family: monospace;\\\n}\", \"vimMode\");\n(function() {\n  function dialogDiv(cm, template, bottom) {\n    var wrap = cm.ace.container;\n    var dialog;\n    dialog = wrap.appendChild(document.createElement(\"div\"));\n    if (bottom)\n      dialog.className = \"ace_dialog ace_dialog-bottom\";\n    else\n      dialog.className = \"ace_dialog ace_dialog-top\";\n\n    if (typeof template == \"string\") {\n      dialog.innerHTML = template;\n    } else { // Assuming it's a detached DOM element.\n      dialog.appendChild(template);\n    }\n    return dialog;\n  }\n\n  function closeNotification(cm, newVal) {\n    if (cm.state.currentNotificationClose)\n      cm.state.currentNotificationClose();\n    cm.state.currentNotificationClose = newVal;\n  }\n\n  CodeMirror.defineExtension(\"openDialog\", function(template, callback, options) {\n    if (this.virtualSelectionMode()) return;\n    if (!options) options = {};\n\n    closeNotification(this, null);\n\n    var dialog = dialogDiv(this, template, options.bottom);\n    var closed = false, me = this;\n    this.state.dialog = dialog;\n    function close(newVal) {\n      if (typeof newVal == 'string') {\n        inp.value = newVal;\n      } else {\n        if (closed) return;\n        \n        if (newVal && newVal.type == \"blur\") {\n          if (document.activeElement === inp)\n            return;\n        }\n        \n        me.state.dialog = null;\n        closed = true;\n        dialog.parentNode.removeChild(dialog);\n        me.focus();\n\n        if (options.onClose) options.onClose(dialog);\n      }\n    }\n\n    var inp = dialog.getElementsByTagName(\"input\")[0], button;\n    if (inp) {\n      if (options.value) {\n        inp.value = options.value;\n        if (options.selectValueOnOpen !== false) inp.select();\n      }\n\n      if (options.onInput)\n        CodeMirror.on(inp, \"input\", function(e) { options.onInput(e, inp.value, close);});\n      if (options.onKeyUp)\n        CodeMirror.on(inp, \"keyup\", function(e) {options.onKeyUp(e, inp.value, close);});\n\n      CodeMirror.on(inp, \"keydown\", function(e) {\n        if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }\n        if (e.keyCode == 13) callback(inp.value);\n        if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {\n          inp.blur();\n          CodeMirror.e_stop(e);\n          close();\n        }\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(inp, \"blur\", close);\n\n      inp.focus();\n    } else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n      CodeMirror.on(button, \"click\", function() {\n        close();\n        me.focus();\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(button, \"blur\", close);\n\n      button.focus();\n    }\n    return close;\n  });\n\n  CodeMirror.defineExtension(\"openNotification\", function(template, options) {\n    if (this.virtualSelectionMode()) return;\n    closeNotification(this, close);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var closed = false, doneTimer;\n    var duration = options && typeof options.duration !== \"undefined\" ? options.duration : 5000;\n\n    function close() {\n      if (closed) return;\n      closed = true;\n      clearTimeout(doneTimer);\n      dialog.parentNode.removeChild(dialog);\n    }\n\n    CodeMirror.on(dialog, 'click', function(e) {\n      CodeMirror.e_preventDefault(e);\n      close();\n    });\n\n    if (duration)\n      doneTimer = setTimeout(close, duration);\n\n    return close;\n  });\n})();\n\n  \n  var defaultKeymap = [\n    { keys: '<Left>', type: 'keyToKey', toKeys: 'h' },\n    { keys: '<Right>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<Up>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<Down>', type: 'keyToKey', toKeys: 'j' },\n    { keys: '<Space>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<BS>', type: 'keyToKey', toKeys: 'h', context: 'normal'},\n    { keys: '<C-Space>', type: 'keyToKey', toKeys: 'W' },\n    { keys: '<C-BS>', type: 'keyToKey', toKeys: 'B', context: 'normal' },\n    { keys: '<S-Space>', type: 'keyToKey', toKeys: 'w' },\n    { keys: '<S-BS>', type: 'keyToKey', toKeys: 'b', context: 'normal' },\n    { keys: '<C-n>', type: 'keyToKey', toKeys: 'j' },\n    { keys: '<C-p>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' },\n    { keys: 's', type: 'keyToKey', toKeys: 'c', context: 'visual'},\n    { keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' },\n    { keys: 'S', type: 'keyToKey', toKeys: 'VdO', context: 'visual' },\n    { keys: '<Home>', type: 'keyToKey', toKeys: '0' },\n    { keys: '<End>', type: 'keyToKey', toKeys: '$' },\n    { keys: '<PageUp>', type: 'keyToKey', toKeys: '<C-b>' },\n    { keys: '<PageDown>', type: 'keyToKey', toKeys: '<C-f>' },\n    { keys: '<CR>', type: 'keyToKey', toKeys: 'j^', context: 'normal' },\n    { keys: '<Ins>', type: 'action', action: 'toggleOverwrite', context: 'insert' },\n    { keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'h', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: false }},\n    { keys: 'l', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: true }},\n    { keys: 'j', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, linewise: true }},\n    { keys: 'k', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, linewise: true }},\n    { keys: 'gj', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: true }},\n    { keys: 'gk', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: false }},\n    { keys: 'w', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false }},\n    { keys: 'W', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false, bigWord: true }},\n    { keys: 'e', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, inclusive: true }},\n    { keys: 'E', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, bigWord: true, inclusive: true }},\n    { keys: 'b', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }},\n    { keys: 'B', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false, bigWord: true }},\n    { keys: 'ge', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, inclusive: true }},\n    { keys: 'gE', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, bigWord: true, inclusive: true }},\n    { keys: '{', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: false, toJumplist: true }},\n    { keys: '}', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: true, toJumplist: true }},\n    { keys: '<C-f>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: true }},\n    { keys: '<C-b>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: false }},\n    { keys: '<C-d>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: true, explicitRepeat: true }},\n    { keys: '<C-u>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: false, explicitRepeat: true }},\n    { keys: 'gg', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: 'G', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: '0', type: 'motion', motion: 'moveToStartOfLine' },\n    { keys: '^', type: 'motion', motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '+', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true }},\n    { keys: '-', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, toFirstChar:true }},\n    { keys: '_', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true, repeatOffset:-1 }},\n    { keys: '$', type: 'motion', motion: 'moveToEol', motionArgs: { inclusive: true }},\n    { keys: '%', type: 'motion', motion: 'moveToMatchedSymbol', motionArgs: { inclusive: true, toJumplist: true }},\n    { keys: 'f<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: true , inclusive: true }},\n    { keys: 'F<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: false }},\n    { keys: 't<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: true, inclusive: true }},\n    { keys: 'T<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: false }},\n    { keys: ';', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: true }},\n    { keys: ',', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: false }},\n    { keys: '\\'<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true, linewise: true}},\n    { keys: '`<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true}},\n    { keys: ']`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } },\n    { keys: '[`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } },\n    { keys: ']\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } },\n    { keys: '[\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } },\n    { keys: ']p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true, matchIndent: true}},\n    { keys: '[p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true, matchIndent: true}},\n    { keys: ']<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: true, toJumplist: true}},\n    { keys: '[<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: false, toJumplist: true}},\n    { keys: '|', type: 'motion', motion: 'moveToColumn'},\n    { keys: 'o', type: 'motion', motion: 'moveToOtherHighlightedEnd', context:'visual'},\n    { keys: 'O', type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: {sameLine: true}, context:'visual'},\n    { keys: 'd', type: 'operator', operator: 'delete' },\n    { keys: 'y', type: 'operator', operator: 'yank' },\n    { keys: 'c', type: 'operator', operator: 'change' },\n    { keys: '>', type: 'operator', operator: 'indent', operatorArgs: { indentRight: true }},\n    { keys: '<', type: 'operator', operator: 'indent', operatorArgs: { indentRight: false }},\n    { keys: 'g~', type: 'operator', operator: 'changeCase' },\n    { keys: 'gu', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, isEdit: true },\n    { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, isEdit: true },\n    { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true }},\n    { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true }},\n    { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false }},\n    { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true }},\n    { keys: 'D', type: 'operatorMotion', operator: 'delete', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'D', type: 'operator', operator: 'delete', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: 'Y', type: 'operatorMotion', operator: 'yank', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'Y', type: 'operator', operator: 'yank', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: 'C', type: 'operatorMotion', operator: 'change', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'C', type: 'operator', operator: 'change', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: '~', type: 'operatorMotion', operator: 'changeCase', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorArgs: { shouldMoveCursor: true }, context: 'normal'},\n    { keys: '~', type: 'operator', operator: 'changeCase', context: 'visual'},\n    { keys: '<C-w>', type: 'operatorMotion', operator: 'delete', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }, context: 'insert' },\n    { keys: '<C-i>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: true }},\n    { keys: '<C-o>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: false }},\n    { keys: '<C-e>', type: 'action', action: 'scroll', actionArgs: { forward: true, linewise: true }},\n    { keys: '<C-y>', type: 'action', action: 'scroll', actionArgs: { forward: false, linewise: true }},\n    { keys: 'a', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'charAfter' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'eol' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' },\n    { keys: 'i', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'inplace' }, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'firstNonBlank'}, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'startOfSelectedArea' }, context: 'visual' },\n    { keys: 'o', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: true }, context: 'normal' },\n    { keys: 'O', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: false }, context: 'normal' },\n    { keys: 'v', type: 'action', action: 'toggleVisualMode' },\n    { keys: 'V', type: 'action', action: 'toggleVisualMode', actionArgs: { linewise: true }},\n    { keys: '<C-v>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }},\n    { keys: '<C-q>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }},\n    { keys: 'gv', type: 'action', action: 'reselectLastSelection' },\n    { keys: 'J', type: 'action', action: 'joinLines', isEdit: true },\n    { keys: 'p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true }},\n    { keys: 'P', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true }},\n    { keys: 'r<character>', type: 'action', action: 'replace', isEdit: true },\n    { keys: '@<character>', type: 'action', action: 'replayMacro' },\n    { keys: 'q<character>', type: 'action', action: 'enterMacroRecordMode' },\n    { keys: 'R', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { replace: true }},\n    { keys: 'u', type: 'action', action: 'undo', context: 'normal' },\n    { keys: 'u', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, context: 'visual', isEdit: true },\n    { keys: 'U', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, context: 'visual', isEdit: true },\n    { keys: '<C-r>', type: 'action', action: 'redo' },\n    { keys: 'm<character>', type: 'action', action: 'setMark' },\n    { keys: '\"<character>', type: 'action', action: 'setRegister' },\n    { keys: 'zz', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }},\n    { keys: 'z.', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'zt', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }},\n    { keys: 'z<CR>', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'z-', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }},\n    { keys: 'zb', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '.', type: 'action', action: 'repeatLastEdit' },\n    { keys: '<C-a>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: true, backtrack: false}},\n    { keys: '<C-x>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: false, backtrack: false}},\n    { keys: '<C-t>', type: 'action', action: 'indent', actionArgs: { indentRight: true }, context: 'insert' },\n    { keys: '<C-d>', type: 'action', action: 'indent', actionArgs: { indentRight: false }, context: 'insert' },\n    { keys: 'a<character>', type: 'motion', motion: 'textObjectManipulation' },\n    { keys: 'i<character>', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true }},\n    { keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }},\n    { keys: '?', type: 'search', searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true }},\n    { keys: '*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: '#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: 'g*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true }},\n    { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }},\n    { keys: ':', type: 'ex' }\n  ];\n  var defaultExCommandMap = [\n    { name: 'colorscheme', shortName: 'colo' },\n    { name: 'map' },\n    { name: 'imap', shortName: 'im' },\n    { name: 'nmap', shortName: 'nm' },\n    { name: 'vmap', shortName: 'vm' },\n    { name: 'unmap' },\n    { name: 'write', shortName: 'w' },\n    { name: 'undo', shortName: 'u' },\n    { name: 'redo', shortName: 'red' },\n    { name: 'set', shortName: 'se' },\n    { name: 'set', shortName: 'se' },\n    { name: 'setlocal', shortName: 'setl' },\n    { name: 'setglobal', shortName: 'setg' },\n    { name: 'sort', shortName: 'sor' },\n    { name: 'substitute', shortName: 's', possiblyAsync: true },\n    { name: 'nohlsearch', shortName: 'noh' },\n    { name: 'yank', shortName: 'y' },\n    { name: 'delmarks', shortName: 'delm' },\n    { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },\n    { name: 'global', shortName: 'g' }\n  ];\n\n  var Pos = CodeMirror.Pos;\n\n  var Vim = function() { return vimApi; } //{\n    function enterVimMode(cm) {\n      cm.setOption('disableInput', true);\n      cm.setOption('showCursorWhenSelecting', false);\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      cm.on('cursorActivity', onCursorActivity);\n      maybeInitVimState(cm);\n      CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm));\n    }\n\n    function leaveVimMode(cm) {\n      cm.setOption('disableInput', false);\n      cm.off('cursorActivity', onCursorActivity);\n      CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm));\n      cm.state.vim = null;\n    }\n\n    function detachVimMap(cm, next) {\n      if (this == CodeMirror.keyMap.vim)\n        CodeMirror.rmClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n\n      if (!next || next.attach != attachVimMap)\n        leaveVimMode(cm);\n    }\n    function attachVimMap(cm, prev) {\n      if (this == CodeMirror.keyMap.vim)\n        CodeMirror.addClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n\n      if (!prev || prev.attach != attachVimMap)\n        enterVimMode(cm);\n    }\n    CodeMirror.defineOption('vimMode', false, function(cm, val, prev) {\n      if (val && cm.getOption(\"keyMap\") != \"vim\")\n        cm.setOption(\"keyMap\", \"vim\");\n      else if (!val && prev != CodeMirror.Init && /^vim/.test(cm.getOption(\"keyMap\")))\n        cm.setOption(\"keyMap\", \"default\");\n    });\n\n    function cmKey(key, cm) {\n      if (!cm) { return undefined; }\n      if (this[key]) { return this[key]; }\n      var vimKey = cmKeyToVimKey(key);\n      if (!vimKey) {\n        return false;\n      }\n      var cmd = CodeMirror.Vim.findKey(cm, vimKey);\n      if (typeof cmd == 'function') {\n        CodeMirror.signal(cm, 'vim-keypress', vimKey);\n      }\n      return cmd;\n    }\n\n    var modifiers = {'Shift': 'S', 'Ctrl': 'C', 'Alt': 'A', 'Cmd': 'D', 'Mod': 'A'};\n    var specialKeys = {Enter:'CR',Backspace:'BS',Delete:'Del',Insert:'Ins'};\n    function cmKeyToVimKey(key) {\n      if (key.charAt(0) == '\\'') {\n        return key.charAt(1);\n      }\n      var pieces = key.split(/-(?!$)/);\n      var lastPiece = pieces[pieces.length - 1];\n      if (pieces.length == 1 && pieces[0].length == 1) {\n        return false;\n      } else if (pieces.length == 2 && pieces[0] == 'Shift' && lastPiece.length == 1) {\n        return false;\n      }\n      var hasCharacter = false;\n      for (var i = 0; i < pieces.length; i++) {\n        var piece = pieces[i];\n        if (piece in modifiers) { pieces[i] = modifiers[piece]; }\n        else { hasCharacter = true; }\n        if (piece in specialKeys) { pieces[i] = specialKeys[piece]; }\n      }\n      if (!hasCharacter) {\n        return false;\n      }\n      if (isUpperCase(lastPiece)) {\n        pieces[pieces.length - 1] = lastPiece.toLowerCase();\n      }\n      return '<' + pieces.join('-') + '>';\n    }\n\n    function getOnPasteFn(cm) {\n      var vim = cm.state.vim;\n      if (!vim.onPasteFn) {\n        vim.onPasteFn = function() {\n          if (!vim.insertMode) {\n            cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));\n            actions.enterInsertMode(cm, {}, vim);\n          }\n        };\n      }\n      return vim.onPasteFn;\n    }\n\n    var numberRegex = /[\\d]/;\n    var wordCharTest = [CodeMirror.isWordChar, function(ch) {\n      return ch && !CodeMirror.isWordChar(ch) && !/\\s/.test(ch);\n    }], bigWordCharTest = [function(ch) {\n      return /\\S/.test(ch);\n    }];\n    function makeKeyRange(start, size) {\n      var keys = [];\n      for (var i = start; i < start + size; i++) {\n        keys.push(String.fromCharCode(i));\n      }\n      return keys;\n    }\n    var upperCaseAlphabet = makeKeyRange(65, 26);\n    var lowerCaseAlphabet = makeKeyRange(97, 26);\n    var numbers = makeKeyRange(48, 10);\n    var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']);\n    var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '\"', '.', ':', '/']);\n\n    function isLine(cm, line) {\n      return line >= cm.firstLine() && line <= cm.lastLine();\n    }\n    function isLowerCase(k) {\n      return (/^[a-z]$/).test(k);\n    }\n    function isMatchableSymbol(k) {\n      return '()[]{}'.indexOf(k) != -1;\n    }\n    function isNumber(k) {\n      return numberRegex.test(k);\n    }\n    function isUpperCase(k) {\n      return (/^[A-Z]$/).test(k);\n    }\n    function isWhiteSpaceString(k) {\n      return (/^\\s*$/).test(k);\n    }\n    function inArray(val, arr) {\n      for (var i = 0; i < arr.length; i++) {\n        if (arr[i] == val) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    var options = {};\n    function defineOption(name, defaultValue, type, aliases, callback) {\n      if (defaultValue === undefined && !callback) {\n        throw Error('defaultValue is required unless callback is provided');\n      }\n      if (!type) { type = 'string'; }\n      options[name] = {\n        type: type,\n        defaultValue: defaultValue,\n        callback: callback\n      };\n      if (aliases) {\n        for (var i = 0; i < aliases.length; i++) {\n          options[aliases[i]] = options[name];\n        }\n      }\n      if (defaultValue) {\n        setOption(name, defaultValue);\n      }\n    }\n\n    function setOption(name, value, cm, cfg) {\n      var option = options[name];\n      cfg = cfg || {};\n      var scope = cfg.scope;\n      if (!option) {\n        return new Error('Unknown option: ' + name);\n      }\n      if (option.type == 'boolean') {\n        if (value && value !== true) {\n          return new Error('Invalid argument: ' + name + '=' + value);\n        } else if (value !== false) {\n          value = true;\n        }\n      }\n      if (option.callback) {\n        if (scope !== 'local') {\n          option.callback(value, undefined);\n        }\n        if (scope !== 'global' && cm) {\n          option.callback(value, cm);\n        }\n      } else {\n        if (scope !== 'local') {\n          option.value = option.type == 'boolean' ? !!value : value;\n        }\n        if (scope !== 'global' && cm) {\n          cm.state.vim.options[name] = {value: value};\n        }\n      }\n    }\n\n    function getOption(name, cm, cfg) {\n      var option = options[name];\n      cfg = cfg || {};\n      var scope = cfg.scope;\n      if (!option) {\n        return new Error('Unknown option: ' + name);\n      }\n      if (option.callback) {\n        var local = cm && option.callback(undefined, cm);\n        if (scope !== 'global' && local !== undefined) {\n          return local;\n        }\n        if (scope !== 'local') {\n          return option.callback();\n        }\n        return;\n      } else {\n        var local = (scope !== 'global') && (cm && cm.state.vim.options[name]);\n        return (local || (scope !== 'local') && option || {}).value;\n      }\n    }\n\n    defineOption('filetype', undefined, 'string', ['ft'], function(name, cm) {\n      if (cm === undefined) {\n        return;\n      }\n      if (name === undefined) {\n        var mode = cm.getOption('mode');\n        return mode == 'null' ? '' : mode;\n      } else {\n        var mode = name == '' ? 'null' : name;\n        cm.setOption('mode', mode);\n      }\n    });\n\n    var createCircularJumpList = function() {\n      var size = 100;\n      var pointer = -1;\n      var head = 0;\n      var tail = 0;\n      var buffer = new Array(size);\n      function add(cm, oldCur, newCur) {\n        var current = pointer % size;\n        var curMark = buffer[current];\n        function useNextSlot(cursor) {\n          var next = ++pointer % size;\n          var trashMark = buffer[next];\n          if (trashMark) {\n            trashMark.clear();\n          }\n          buffer[next] = cm.setBookmark(cursor);\n        }\n        if (curMark) {\n          var markPos = curMark.find();\n          if (markPos && !cursorEqual(markPos, oldCur)) {\n            useNextSlot(oldCur);\n          }\n        } else {\n          useNextSlot(oldCur);\n        }\n        useNextSlot(newCur);\n        head = pointer;\n        tail = pointer - size + 1;\n        if (tail < 0) {\n          tail = 0;\n        }\n      }\n      function move(cm, offset) {\n        pointer += offset;\n        if (pointer > head) {\n          pointer = head;\n        } else if (pointer < tail) {\n          pointer = tail;\n        }\n        var mark = buffer[(size + pointer) % size];\n        if (mark && !mark.find()) {\n          var inc = offset > 0 ? 1 : -1;\n          var newCur;\n          var oldCur = cm.getCursor();\n          do {\n            pointer += inc;\n            mark = buffer[(size + pointer) % size];\n            if (mark &&\n                (newCur = mark.find()) &&\n                !cursorEqual(oldCur, newCur)) {\n              break;\n            }\n          } while (pointer < head && pointer > tail);\n        }\n        return mark;\n      }\n      return {\n        cachedCursor: undefined, //used for # and * jumps\n        add: add,\n        move: move\n      };\n    };\n    var createInsertModeChanges = function(c) {\n      if (c) {\n        return {\n          changes: c.changes,\n          expectCursorActivityForChange: c.expectCursorActivityForChange\n        };\n      }\n      return {\n        changes: [],\n        expectCursorActivityForChange: false\n      };\n    };\n\n    function MacroModeState() {\n      this.latestRegister = undefined;\n      this.isPlaying = false;\n      this.isRecording = false;\n      this.replaySearchQueries = [];\n      this.onRecordingDone = undefined;\n      this.lastInsertModeChanges = createInsertModeChanges();\n    }\n    MacroModeState.prototype = {\n      exitMacroRecordMode: function() {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.onRecordingDone) {\n          macroModeState.onRecordingDone(); // close dialog\n        }\n        macroModeState.onRecordingDone = undefined;\n        macroModeState.isRecording = false;\n      },\n      enterMacroRecordMode: function(cm, registerName) {\n        var register =\n            vimGlobalState.registerController.getRegister(registerName);\n        if (register) {\n          register.clear();\n          this.latestRegister = registerName;\n          if (cm.openDialog) {\n            this.onRecordingDone = cm.openDialog(\n                '(recording)['+registerName+']', null, {bottom:true});\n          }\n          this.isRecording = true;\n        }\n      }\n    };\n\n    function maybeInitVimState(cm) {\n      if (!cm.state.vim) {\n        cm.state.vim = {\n          inputState: new InputState(),\n          lastEditInputState: undefined,\n          lastEditActionCommand: undefined,\n          lastHPos: -1,\n          lastHSPos: -1,\n          lastMotion: null,\n          marks: {},\n          fakeCursor: null,\n          insertMode: false,\n          insertModeRepeat: undefined,\n          visualMode: false,\n          visualLine: false,\n          visualBlock: false,\n          lastSelection: null,\n          lastPastedText: null,\n          sel: {},\n          options: {}\n        };\n      }\n      return cm.state.vim;\n    }\n    var vimGlobalState;\n    function resetVimGlobalState() {\n      vimGlobalState = {\n        searchQuery: null,\n        searchIsReversed: false,\n        lastSubstituteReplacePart: undefined,\n        jumpList: createCircularJumpList(),\n        macroModeState: new MacroModeState,\n        lastCharacterSearch: {increment:0, forward:true, selectedCharacter:''},\n        registerController: new RegisterController({}),\n        searchHistoryController: new HistoryController(),\n        exCommandHistoryController : new HistoryController()\n      };\n      for (var optionName in options) {\n        var option = options[optionName];\n        option.value = option.defaultValue;\n      }\n    }\n\n    var lastInsertModeKeyTimer;\n    var vimApi= {\n      buildKeyMap: function() {\n      },\n      getRegisterController: function() {\n        return vimGlobalState.registerController;\n      },\n      resetVimGlobalState_: resetVimGlobalState,\n      getVimGlobalState_: function() {\n        return vimGlobalState;\n      },\n      maybeInitVimState_: maybeInitVimState,\n\n      suppressErrorLogging: false,\n\n      InsertModeKey: InsertModeKey,\n      map: function(lhs, rhs, ctx) {\n        exCommandDispatcher.map(lhs, rhs, ctx);\n      },\n      unmap: function(lhs, ctx) {\n        exCommandDispatcher.unmap(lhs, ctx);\n      },\n      setOption: setOption,\n      getOption: getOption,\n      defineOption: defineOption,\n      defineEx: function(name, prefix, func){\n        if (!prefix) {\n          prefix = name;\n        } else if (name.indexOf(prefix) !== 0) {\n          throw new Error('(Vim.defineEx) \"'+prefix+'\" is not a prefix of \"'+name+'\", command not registered');\n        }\n        exCommands[name]=func;\n        exCommandDispatcher.commandMap_[prefix]={name:name, shortName:prefix, type:'api'};\n      },\n      handleKey: function (cm, key, origin) {\n        var command = this.findKey(cm, key, origin);\n        if (typeof command === 'function') {\n          return command();\n        }\n      },\n      findKey: function(cm, key, origin) {\n        var vim = maybeInitVimState(cm);\n        function handleMacroRecording() {\n          var macroModeState = vimGlobalState.macroModeState;\n          if (macroModeState.isRecording) {\n            if (key == 'q') {\n              macroModeState.exitMacroRecordMode();\n              clearInputState(cm);\n              return true;\n            }\n            if (origin != 'mapping') {\n              logKey(macroModeState, key);\n            }\n          }\n        }\n        function handleEsc() {\n          if (key == '<Esc>') {\n            clearInputState(cm);\n            if (vim.visualMode) {\n              exitVisualMode(cm);\n            } else if (vim.insertMode) {\n              exitInsertMode(cm);\n            }\n            return true;\n          }\n        }\n        function doKeyToKey(keys) {\n          var match;\n          while (keys) {\n            match = (/<\\w+-.+?>|<\\w+>|./).exec(keys);\n            key = match[0];\n            keys = keys.substring(match.index + key.length);\n            CodeMirror.Vim.handleKey(cm, key, 'mapping');\n          }\n        }\n\n        function handleKeyInsertMode() {\n          if (handleEsc()) { return true; }\n          var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n          var keysAreChars = key.length == 1;\n          var match = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n          while (keys.length > 1 && match.type != 'full') {\n            var keys = vim.inputState.keyBuffer = keys.slice(1);\n            var thisMatch = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n            if (thisMatch.type != 'none') { match = thisMatch; }\n          }\n          if (match.type == 'none') { clearInputState(cm); return false; }\n          else if (match.type == 'partial') {\n            if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }\n            lastInsertModeKeyTimer = window.setTimeout(\n              function() { if (vim.insertMode && vim.inputState.keyBuffer) { clearInputState(cm); } },\n              getOption('insertModeEscKeysTimeout'));\n            return !keysAreChars;\n          }\n\n          if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }\n          if (keysAreChars) {\n            var selections = cm.listSelections();\n            for (var i = 0; i < selections.length; i++) {\n              var here = selections[i].head;\n              cm.replaceRange('', offsetCursor(here, 0, -(keys.length - 1)), here, '+input');\n            }\n            vimGlobalState.macroModeState.lastInsertModeChanges.changes.pop();\n          }\n          clearInputState(cm);\n          return match.command;\n        }\n\n        function handleKeyNonInsertMode() {\n          if (handleMacroRecording() || handleEsc()) { return true; }\n\n          var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n          if (/^[1-9]\\d*$/.test(keys)) { return true; }\n\n          var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n          if (!keysMatcher) { clearInputState(cm); return false; }\n          var context = vim.visualMode ? 'visual' :\n                                         'normal';\n          var match = commandDispatcher.matchCommand(keysMatcher[2] || keysMatcher[1], defaultKeymap, vim.inputState, context);\n          if (match.type == 'none') { clearInputState(cm); return false; }\n          else if (match.type == 'partial') { return true; }\n\n          vim.inputState.keyBuffer = '';\n          var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n          if (keysMatcher[1] && keysMatcher[1] != '0') {\n            vim.inputState.pushRepeatDigit(keysMatcher[1]);\n          }\n          return match.command;\n        }\n\n        var command;\n        if (vim.insertMode) { command = handleKeyInsertMode(); }\n        else { command = handleKeyNonInsertMode(); }\n        if (command === false) {\n          return undefined;\n        } else if (command === true) {\n          return function() { return true; };\n        } else {\n          return function() {\n            if ((command.operator || command.isEdit) && cm.getOption('readOnly'))\n              return; // ace_patch\n            return cm.operation(function() {\n              cm.curOp.isVimOp = true;\n              try {\n                if (command.type == 'keyToKey') {\n                  doKeyToKey(command.toKeys);\n                } else {\n                  commandDispatcher.processCommand(cm, vim, command);\n                }\n              } catch (e) {\n                cm.state.vim = undefined;\n                maybeInitVimState(cm);\n                if (!CodeMirror.Vim.suppressErrorLogging) {\n                  console['log'](e);\n                }\n                throw e;\n              }\n              return true;\n            });\n          };\n        }\n      },\n      handleEx: function(cm, input) {\n        exCommandDispatcher.processCommand(cm, input);\n      },\n\n      defineMotion: defineMotion,\n      defineAction: defineAction,\n      defineOperator: defineOperator,\n      mapCommand: mapCommand,\n      _mapCommand: _mapCommand,\n\n      defineRegister: defineRegister,\n\n      exitVisualMode: exitVisualMode,\n      exitInsertMode: exitInsertMode\n    };\n    function InputState() {\n      this.prefixRepeat = [];\n      this.motionRepeat = [];\n\n      this.operator = null;\n      this.operatorArgs = null;\n      this.motion = null;\n      this.motionArgs = null;\n      this.keyBuffer = []; // For matching multi-key commands.\n      this.registerName = null; // Defaults to the unnamed register.\n    }\n    InputState.prototype.pushRepeatDigit = function(n) {\n      if (!this.operator) {\n        this.prefixRepeat = this.prefixRepeat.concat(n);\n      } else {\n        this.motionRepeat = this.motionRepeat.concat(n);\n      }\n    };\n    InputState.prototype.getRepeat = function() {\n      var repeat = 0;\n      if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) {\n        repeat = 1;\n        if (this.prefixRepeat.length > 0) {\n          repeat *= parseInt(this.prefixRepeat.join(''), 10);\n        }\n        if (this.motionRepeat.length > 0) {\n          repeat *= parseInt(this.motionRepeat.join(''), 10);\n        }\n      }\n      return repeat;\n    };\n\n    function clearInputState(cm, reason) {\n      cm.state.vim.inputState = new InputState();\n      CodeMirror.signal(cm, 'vim-command-done', reason);\n    }\n    function Register(text, linewise, blockwise) {\n      this.clear();\n      this.keyBuffer = [text || ''];\n      this.insertModeChanges = [];\n      this.searchQueries = [];\n      this.linewise = !!linewise;\n      this.blockwise = !!blockwise;\n    }\n    Register.prototype = {\n      setText: function(text, linewise, blockwise) {\n        this.keyBuffer = [text || ''];\n        this.linewise = !!linewise;\n        this.blockwise = !!blockwise;\n      },\n      pushText: function(text, linewise) {\n        if (linewise) {\n          if (!this.linewise) {\n            this.keyBuffer.push('\\n');\n          }\n          this.linewise = true;\n        }\n        this.keyBuffer.push(text);\n      },\n      pushInsertModeChanges: function(changes) {\n        this.insertModeChanges.push(createInsertModeChanges(changes));\n      },\n      pushSearchQuery: function(query) {\n        this.searchQueries.push(query);\n      },\n      clear: function() {\n        this.keyBuffer = [];\n        this.insertModeChanges = [];\n        this.searchQueries = [];\n        this.linewise = false;\n      },\n      toString: function() {\n        return this.keyBuffer.join('');\n      }\n    };\n    function defineRegister(name, register) {\n      var registers = vimGlobalState.registerController.registers;\n      if (!name || name.length != 1) {\n        throw Error('Register name must be 1 character');\n      }\n      registers[name] = register;\n      validRegisters.push(name);\n    }\n    function RegisterController(registers) {\n      this.registers = registers;\n      this.unnamedRegister = registers['\"'] = new Register();\n      registers['.'] = new Register();\n      registers[':'] = new Register();\n      registers['/'] = new Register();\n    }\n    RegisterController.prototype = {\n      pushText: function(registerName, operator, text, linewise, blockwise) {\n        if (linewise && text.charAt(text.length - 1) !== '\\n'){\n          text += '\\n';\n        }\n        var register = this.isValidRegister(registerName) ?\n            this.getRegister(registerName) : null;\n        if (!register) {\n          switch (operator) {\n            case 'yank':\n              this.registers['0'] = new Register(text, linewise, blockwise);\n              break;\n            case 'delete':\n            case 'change':\n              if (text.indexOf('\\n') == -1) {\n                this.registers['-'] = new Register(text, linewise);\n              } else {\n                this.shiftNumericRegisters_();\n                this.registers['1'] = new Register(text, linewise);\n              }\n              break;\n          }\n          this.unnamedRegister.setText(text, linewise, blockwise);\n          return;\n        }\n        var append = isUpperCase(registerName);\n        if (append) {\n          register.pushText(text, linewise);\n        } else {\n          register.setText(text, linewise, blockwise);\n        }\n        this.unnamedRegister.setText(register.toString(), linewise);\n      },\n      getRegister: function(name) {\n        if (!this.isValidRegister(name)) {\n          return this.unnamedRegister;\n        }\n        name = name.toLowerCase();\n        if (!this.registers[name]) {\n          this.registers[name] = new Register();\n        }\n        return this.registers[name];\n      },\n      isValidRegister: function(name) {\n        return name && inArray(name, validRegisters);\n      },\n      shiftNumericRegisters_: function() {\n        for (var i = 9; i >= 2; i--) {\n          this.registers[i] = this.getRegister('' + (i - 1));\n        }\n      }\n    };\n    function HistoryController() {\n        this.historyBuffer = [];\n        this.iterator = 0;\n        this.initialPrefix = null;\n    }\n    HistoryController.prototype = {\n      nextMatch: function (input, up) {\n        var historyBuffer = this.historyBuffer;\n        var dir = up ? -1 : 1;\n        if (this.initialPrefix === null) this.initialPrefix = input;\n        for (var i = this.iterator + dir; up ? i >= 0 : i < historyBuffer.length; i+= dir) {\n          var element = historyBuffer[i];\n          for (var j = 0; j <= element.length; j++) {\n            if (this.initialPrefix == element.substring(0, j)) {\n              this.iterator = i;\n              return element;\n            }\n          }\n        }\n        if (i >= historyBuffer.length) {\n          this.iterator = historyBuffer.length;\n          return this.initialPrefix;\n        }\n        if (i < 0 ) return input;\n      },\n      pushInput: function(input) {\n        var index = this.historyBuffer.indexOf(input);\n        if (index > -1) this.historyBuffer.splice(index, 1);\n        if (input.length) this.historyBuffer.push(input);\n      },\n      reset: function() {\n        this.initialPrefix = null;\n        this.iterator = this.historyBuffer.length;\n      }\n    };\n    var commandDispatcher = {\n      matchCommand: function(keys, keyMap, inputState, context) {\n        var matches = commandMatches(keys, keyMap, context, inputState);\n        if (!matches.full && !matches.partial) {\n          return {type: 'none'};\n        } else if (!matches.full && matches.partial) {\n          return {type: 'partial'};\n        }\n\n        var bestMatch;\n        for (var i = 0; i < matches.full.length; i++) {\n          var match = matches.full[i];\n          if (!bestMatch) {\n            bestMatch = match;\n          }\n        }\n        if (bestMatch.keys.slice(-11) == '<character>') {\n          var character = lastChar(keys);\n          if (/<C-.>/.test(character)) return {type: 'none'};\n          inputState.selectedCharacter = character;\n        }\n        return {type: 'full', command: bestMatch};\n      },\n      processCommand: function(cm, vim, command) {\n        vim.inputState.repeatOverride = command.repeatOverride;\n        switch (command.type) {\n          case 'motion':\n            this.processMotion(cm, vim, command);\n            break;\n          case 'operator':\n            this.processOperator(cm, vim, command);\n            break;\n          case 'operatorMotion':\n            this.processOperatorMotion(cm, vim, command);\n            break;\n          case 'action':\n            this.processAction(cm, vim, command);\n            break;\n          case 'search':\n            this.processSearch(cm, vim, command);\n            break;\n          case 'ex':\n          case 'keyToEx':\n            this.processEx(cm, vim, command);\n            break;\n          default:\n            break;\n        }\n      },\n      processMotion: function(cm, vim, command) {\n        vim.inputState.motion = command.motion;\n        vim.inputState.motionArgs = copyArgs(command.motionArgs);\n        this.evalInput(cm, vim);\n      },\n      processOperator: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        if (inputState.operator) {\n          if (inputState.operator == command.operator) {\n            inputState.motion = 'expandToLine';\n            inputState.motionArgs = { linewise: true };\n            this.evalInput(cm, vim);\n            return;\n          } else {\n            clearInputState(cm);\n          }\n        }\n        inputState.operator = command.operator;\n        inputState.operatorArgs = copyArgs(command.operatorArgs);\n        if (vim.visualMode) {\n          this.evalInput(cm, vim);\n        }\n      },\n      processOperatorMotion: function(cm, vim, command) {\n        var visualMode = vim.visualMode;\n        var operatorMotionArgs = copyArgs(command.operatorMotionArgs);\n        if (operatorMotionArgs) {\n          if (visualMode && operatorMotionArgs.visualLine) {\n            vim.visualLine = true;\n          }\n        }\n        this.processOperator(cm, vim, command);\n        if (!visualMode) {\n          this.processMotion(cm, vim, command);\n        }\n      },\n      processAction: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        var repeat = inputState.getRepeat();\n        var repeatIsExplicit = !!repeat;\n        var actionArgs = copyArgs(command.actionArgs) || {};\n        if (inputState.selectedCharacter) {\n          actionArgs.selectedCharacter = inputState.selectedCharacter;\n        }\n        if (command.operator) {\n          this.processOperator(cm, vim, command);\n        }\n        if (command.motion) {\n          this.processMotion(cm, vim, command);\n        }\n        if (command.motion || command.operator) {\n          this.evalInput(cm, vim);\n        }\n        actionArgs.repeat = repeat || 1;\n        actionArgs.repeatIsExplicit = repeatIsExplicit;\n        actionArgs.registerName = inputState.registerName;\n        clearInputState(cm);\n        vim.lastMotion = null;\n        if (command.isEdit) {\n          this.recordLastEdit(vim, inputState, command);\n        }\n        actions[command.action](cm, actionArgs, vim);\n      },\n      processSearch: function(cm, vim, command) {\n        if (!cm.getSearchCursor) {\n          return;\n        }\n        var forward = command.searchArgs.forward;\n        var wholeWordOnly = command.searchArgs.wholeWordOnly;\n        getSearchState(cm).setReversed(!forward);\n        var promptPrefix = (forward) ? '/' : '?';\n        var originalQuery = getSearchState(cm).getQuery();\n        var originalScrollPos = cm.getScrollInfo();\n        function handleQuery(query, ignoreCase, smartCase) {\n          vimGlobalState.searchHistoryController.pushInput(query);\n          vimGlobalState.searchHistoryController.reset();\n          try {\n            updateSearchQuery(cm, query, ignoreCase, smartCase);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + query);\n            clearInputState(cm);\n            return;\n          }\n          commandDispatcher.processMotion(cm, vim, {\n            type: 'motion',\n            motion: 'findNext',\n            motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist }\n          });\n        }\n        function onPromptClose(query) {\n          handleQuery(query, true /** ignoreCase */, true /** smartCase */);\n          var macroModeState = vimGlobalState.macroModeState;\n          if (macroModeState.isRecording) {\n            logSearchQuery(macroModeState, query);\n          }\n        }\n        function onPromptKeyUp(e, query, close) {\n          var keyName = CodeMirror.keyName(e), up, offset;\n          if (keyName == 'Up' || keyName == 'Down') {\n            up = keyName == 'Up' ? true : false;\n            offset = e.target ? e.target.selectionEnd : 0;\n            query = vimGlobalState.searchHistoryController.nextMatch(query, up) || '';\n            close(query);\n            if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n          } else {\n            if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n              vimGlobalState.searchHistoryController.reset();\n          }\n          var parsedQuery;\n          try {\n            parsedQuery = updateSearchQuery(cm, query,\n                true /** ignoreCase */, true /** smartCase */);\n          } catch (e) {\n          }\n          if (parsedQuery) {\n            cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30);\n          } else {\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n          }\n        }\n        function onPromptKeyDown(e, query, close) {\n          var keyName = CodeMirror.keyName(e);\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n              (keyName == 'Backspace' && query == '')) {\n            vimGlobalState.searchHistoryController.pushInput(query);\n            vimGlobalState.searchHistoryController.reset();\n            updateSearchQuery(cm, originalQuery);\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n            CodeMirror.e_stop(e);\n            clearInputState(cm);\n            close();\n            cm.focus();\n          } else if (keyName == 'Up' || keyName == 'Down') {\n            CodeMirror.e_stop(e);\n          } else if (keyName == 'Ctrl-U') {\n            CodeMirror.e_stop(e);\n            close('');\n          }\n        }\n        switch (command.searchArgs.querySrc) {\n          case 'prompt':\n            var macroModeState = vimGlobalState.macroModeState;\n            if (macroModeState.isPlaying) {\n              var query = macroModeState.replaySearchQueries.shift();\n              handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            } else {\n              showPrompt(cm, {\n                  onClose: onPromptClose,\n                  prefix: promptPrefix,\n                  desc: searchPromptDesc,\n                  onKeyUp: onPromptKeyUp,\n                  onKeyDown: onPromptKeyDown\n              });\n            }\n            break;\n          case 'wordUnderCursor':\n            var word = expandWordUnderCursor(cm, false /** inclusive */,\n                true /** forward */, false /** bigWord */,\n                true /** noSymbol */);\n            var isKeyword = true;\n            if (!word) {\n              word = expandWordUnderCursor(cm, false /** inclusive */,\n                  true /** forward */, false /** bigWord */,\n                  false /** noSymbol */);\n              isKeyword = false;\n            }\n            if (!word) {\n              return;\n            }\n            var query = cm.getLine(word.start.line).substring(word.start.ch,\n                word.end.ch);\n            if (isKeyword && wholeWordOnly) {\n                query = '\\\\b' + query + '\\\\b';\n            } else {\n              query = escapeRegex(query);\n            }\n            vimGlobalState.jumpList.cachedCursor = cm.getCursor();\n            cm.setCursor(word.start);\n\n            handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            break;\n        }\n      },\n      processEx: function(cm, vim, command) {\n        function onPromptClose(input) {\n          vimGlobalState.exCommandHistoryController.pushInput(input);\n          vimGlobalState.exCommandHistoryController.reset();\n          exCommandDispatcher.processCommand(cm, input);\n        }\n        function onPromptKeyDown(e, input, close) {\n          var keyName = CodeMirror.keyName(e), up, offset;\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n              (keyName == 'Backspace' && input == '')) {\n            vimGlobalState.exCommandHistoryController.pushInput(input);\n            vimGlobalState.exCommandHistoryController.reset();\n            CodeMirror.e_stop(e);\n            clearInputState(cm);\n            close();\n            cm.focus();\n          }\n          if (keyName == 'Up' || keyName == 'Down') {\n            CodeMirror.e_stop(e);\n            up = keyName == 'Up' ? true : false;\n            offset = e.target ? e.target.selectionEnd : 0;\n            input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || '';\n            close(input);\n            if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n          } else if (keyName == 'Ctrl-U') {\n            CodeMirror.e_stop(e);\n            close('');\n          } else {\n            if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n              vimGlobalState.exCommandHistoryController.reset();\n          }\n        }\n        if (command.type == 'keyToEx') {\n          exCommandDispatcher.processCommand(cm, command.exArgs.input);\n        } else {\n          if (vim.visualMode) {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\\'<,\\'>',\n                onKeyDown: onPromptKeyDown, selectValueOnOpen: false});\n          } else {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':',\n                onKeyDown: onPromptKeyDown});\n          }\n        }\n      },\n      evalInput: function(cm, vim) {\n        var inputState = vim.inputState;\n        var motion = inputState.motion;\n        var motionArgs = inputState.motionArgs || {};\n        var operator = inputState.operator;\n        var operatorArgs = inputState.operatorArgs || {};\n        var registerName = inputState.registerName;\n        var sel = vim.sel;\n        var origHead = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.head): cm.getCursor('head'));\n        var origAnchor = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.anchor) : cm.getCursor('anchor'));\n        var oldHead = copyCursor(origHead);\n        var oldAnchor = copyCursor(origAnchor);\n        var newHead, newAnchor;\n        var repeat;\n        if (operator) {\n          this.recordLastEdit(vim, inputState);\n        }\n        if (inputState.repeatOverride !== undefined) {\n          repeat = inputState.repeatOverride;\n        } else {\n          repeat = inputState.getRepeat();\n        }\n        if (repeat > 0 && motionArgs.explicitRepeat) {\n          motionArgs.repeatIsExplicit = true;\n        } else if (motionArgs.noRepeat ||\n            (!motionArgs.explicitRepeat && repeat === 0)) {\n          repeat = 1;\n          motionArgs.repeatIsExplicit = false;\n        }\n        if (inputState.selectedCharacter) {\n          motionArgs.selectedCharacter = operatorArgs.selectedCharacter =\n              inputState.selectedCharacter;\n        }\n        motionArgs.repeat = repeat;\n        clearInputState(cm);\n        if (motion) {\n          var motionResult = motions[motion](cm, origHead, motionArgs, vim);\n          vim.lastMotion = motions[motion];\n          if (!motionResult) {\n            return;\n          }\n          if (motionArgs.toJumplist) {\n            if (!operator && cm.ace.curOp != null)\n              cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n            var jumpList = vimGlobalState.jumpList;\n            var cachedCursor = jumpList.cachedCursor;\n            if (cachedCursor) {\n              recordJumpPosition(cm, cachedCursor, motionResult);\n              delete jumpList.cachedCursor;\n            } else {\n              recordJumpPosition(cm, origHead, motionResult);\n            }\n          }\n          if (motionResult instanceof Array) {\n            newAnchor = motionResult[0];\n            newHead = motionResult[1];\n          } else {\n            newHead = motionResult;\n          }\n          if (!newHead) {\n            newHead = copyCursor(origHead);\n          }\n          if (vim.visualMode) {\n            if (!(vim.visualBlock && newHead.ch === Infinity)) {\n              newHead = clipCursorToContent(cm, newHead, vim.visualBlock);\n            }\n            if (newAnchor) {\n              newAnchor = clipCursorToContent(cm, newAnchor, true);\n            }\n            newAnchor = newAnchor || oldAnchor;\n            sel.anchor = newAnchor;\n            sel.head = newHead;\n            updateCmSelection(cm);\n            updateMark(cm, vim, '<',\n                cursorIsBefore(newAnchor, newHead) ? newAnchor\n                    : newHead);\n            updateMark(cm, vim, '>',\n                cursorIsBefore(newAnchor, newHead) ? newHead\n                    : newAnchor);\n          } else if (!operator) {\n            newHead = clipCursorToContent(cm, newHead);\n            cm.setCursor(newHead.line, newHead.ch);\n          }\n        }\n        if (operator) {\n          if (operatorArgs.lastSel) {\n            newAnchor = oldAnchor;\n            var lastSel = operatorArgs.lastSel;\n            var lineOffset = Math.abs(lastSel.head.line - lastSel.anchor.line);\n            var chOffset = Math.abs(lastSel.head.ch - lastSel.anchor.ch);\n            if (lastSel.visualLine) {\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n            } else if (lastSel.visualBlock) {\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch + chOffset);\n            } else if (lastSel.head.line == lastSel.anchor.line) {\n              newHead = Pos(oldAnchor.line, oldAnchor.ch + chOffset);\n            } else {\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n            }\n            vim.visualMode = true;\n            vim.visualLine = lastSel.visualLine;\n            vim.visualBlock = lastSel.visualBlock;\n            sel = vim.sel = {\n              anchor: newAnchor,\n              head: newHead\n            };\n            updateCmSelection(cm);\n          } else if (vim.visualMode) {\n            operatorArgs.lastSel = {\n              anchor: copyCursor(sel.anchor),\n              head: copyCursor(sel.head),\n              visualBlock: vim.visualBlock,\n              visualLine: vim.visualLine\n            };\n          }\n          var curStart, curEnd, linewise, mode;\n          var cmSel;\n          if (vim.visualMode) {\n            curStart = cursorMin(sel.head, sel.anchor);\n            curEnd = cursorMax(sel.head, sel.anchor);\n            linewise = vim.visualLine || operatorArgs.linewise;\n            mode = vim.visualBlock ? 'block' :\n                   linewise ? 'line' :\n                   'char';\n            cmSel = makeCmSelection(cm, {\n              anchor: curStart,\n              head: curEnd\n            }, mode);\n            if (linewise) {\n              var ranges = cmSel.ranges;\n              if (mode == 'block') {\n                for (var i = 0; i < ranges.length; i++) {\n                  ranges[i].head.ch = lineLength(cm, ranges[i].head.line);\n                }\n              } else if (mode == 'line') {\n                ranges[0].head = Pos(ranges[0].head.line + 1, 0);\n              }\n            }\n          } else {\n            curStart = copyCursor(newAnchor || oldAnchor);\n            curEnd = copyCursor(newHead || oldHead);\n            if (cursorIsBefore(curEnd, curStart)) {\n              var tmp = curStart;\n              curStart = curEnd;\n              curEnd = tmp;\n            }\n            linewise = motionArgs.linewise || operatorArgs.linewise;\n            if (linewise) {\n              expandSelectionToLine(cm, curStart, curEnd);\n            } else if (motionArgs.forward) {\n              clipToLine(cm, curStart, curEnd);\n            }\n            mode = 'char';\n            var exclusive = !motionArgs.inclusive || linewise;\n            cmSel = makeCmSelection(cm, {\n              anchor: curStart,\n              head: curEnd\n            }, mode, exclusive);\n          }\n          cm.setSelections(cmSel.ranges, cmSel.primary);\n          vim.lastMotion = null;\n          operatorArgs.repeat = repeat; // For indent in visual mode.\n          operatorArgs.registerName = registerName;\n          operatorArgs.linewise = linewise;\n          var operatorMoveTo = operators[operator](\n            cm, operatorArgs, cmSel.ranges, oldAnchor, newHead);\n          if (vim.visualMode) {\n            exitVisualMode(cm, operatorMoveTo != null);\n          }\n          if (operatorMoveTo) {\n            cm.setCursor(operatorMoveTo);\n          }\n        }\n      },\n      recordLastEdit: function(vim, inputState, actionCommand) {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        vim.lastEditInputState = inputState;\n        vim.lastEditActionCommand = actionCommand;\n        macroModeState.lastInsertModeChanges.changes = [];\n        macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false;\n      }\n    };\n    var motions = {\n      moveToTopLine: function(cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).top + motionArgs.repeat -1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToMiddleLine: function(cm) {\n        var range = getUserVisibleLines(cm);\n        var line = Math.floor((range.top + range.bottom) * 0.5);\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToBottomLine: function(cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).bottom - motionArgs.repeat +1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      expandToLine: function(_cm, head, motionArgs) {\n        var cur = head;\n        return Pos(cur.line + motionArgs.repeat - 1, Infinity);\n      },\n      findNext: function(cm, _head, motionArgs) {\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        if (!query) {\n          return;\n        }\n        var prev = !motionArgs.forward;\n        prev = (state.isReversed()) ? !prev : prev;\n        highlightSearchMatches(cm, query);\n        return findNext(cm, prev/** prev */, query, motionArgs.repeat);\n      },\n      goToMark: function(cm, _head, motionArgs, vim) {\n        var pos = getMarkPos(cm, vim, motionArgs.selectedCharacter);\n        if (pos) {\n          return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos;\n        }\n        return null;\n      },\n      moveToOtherHighlightedEnd: function(cm, _head, motionArgs, vim) {\n        if (vim.visualBlock && motionArgs.sameLine) {\n          var sel = vim.sel;\n          return [\n            clipCursorToContent(cm, Pos(sel.anchor.line, sel.head.ch)),\n            clipCursorToContent(cm, Pos(sel.head.line, sel.anchor.ch))\n          ];\n        } else {\n          return ([vim.sel.head, vim.sel.anchor]);\n        }\n      },\n      jumpToMark: function(cm, head, motionArgs, vim) {\n        var best = head;\n        for (var i = 0; i < motionArgs.repeat; i++) {\n          var cursor = best;\n          for (var key in vim.marks) {\n            if (!isLowerCase(key)) {\n              continue;\n            }\n            var mark = vim.marks[key].find();\n            var isWrongDirection = (motionArgs.forward) ?\n              cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark);\n\n            if (isWrongDirection) {\n              continue;\n            }\n            if (motionArgs.linewise && (mark.line == cursor.line)) {\n              continue;\n            }\n\n            var equal = cursorEqual(cursor, best);\n            var between = (motionArgs.forward) ?\n              cursorIsBetween(cursor, mark, best) :\n              cursorIsBetween(best, mark, cursor);\n\n            if (equal || between) {\n              best = mark;\n            }\n          }\n        }\n\n        if (motionArgs.linewise) {\n          best = Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line)));\n        }\n        return best;\n      },\n      moveByCharacters: function(_cm, head, motionArgs) {\n        var cur = head;\n        var repeat = motionArgs.repeat;\n        var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat;\n        return Pos(cur.line, ch);\n      },\n      moveByLines: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        var endCh = cur.ch;\n        switch (vim.lastMotion) {\n          case this.moveByLines:\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveToColumn:\n          case this.moveToEol:\n            endCh = vim.lastHPos;\n            break;\n          default:\n            vim.lastHPos = endCh;\n        }\n        var repeat = motionArgs.repeat+(motionArgs.repeatOffset||0);\n        var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;\n        var first = cm.firstLine();\n        var last = cm.lastLine();\n        if (line < first && cur.line == first){\n          return this.moveToStartOfLine(cm, head, motionArgs, vim);\n        }else if (line > last && cur.line == last){\n            return this.moveToEol(cm, head, motionArgs, vim);\n        }\n        var fold = cm.ace.session.getFoldLine(line);\n        if (fold) {\n          if (motionArgs.forward) {\n            if (line > fold.start.row)\n              line = fold.end.row + 1;\n          } else {\n            line = fold.start.row;\n          }\n        }\n        if (motionArgs.toFirstChar){\n          endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));\n          vim.lastHPos = endCh;\n        }\n        vim.lastHSPos = cm.charCoords(Pos(line, endCh),'div').left;\n        return Pos(line, endCh);\n      },\n      moveByDisplayLines: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        switch (vim.lastMotion) {\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveByLines:\n          case this.moveToColumn:\n          case this.moveToEol:\n            break;\n          default:\n            vim.lastHSPos = cm.charCoords(cur,'div').left;\n        }\n        var repeat = motionArgs.repeat;\n        var res=cm.findPosV(cur,(motionArgs.forward ? repeat : -repeat),'line',vim.lastHSPos);\n        if (res.hitSide) {\n          if (motionArgs.forward) {\n            var lastCharCoords = cm.charCoords(res, 'div');\n            var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos };\n            var res = cm.coordsChar(goalCoords, 'div');\n          } else {\n            var resCoords = cm.charCoords(Pos(cm.firstLine(), 0), 'div');\n            resCoords.left = vim.lastHSPos;\n            res = cm.coordsChar(resCoords, 'div');\n          }\n        }\n        vim.lastHPos = res.ch;\n        return res;\n      },\n      moveByPage: function(cm, head, motionArgs) {\n        var curStart = head;\n        var repeat = motionArgs.repeat;\n        return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');\n      },\n      moveByParagraph: function(cm, head, motionArgs) {\n        var dir = motionArgs.forward ? 1 : -1;\n        return findParagraph(cm, head, motionArgs.repeat, dir);\n      },\n      moveByScroll: function(cm, head, motionArgs, vim) {\n        var scrollbox = cm.getScrollInfo();\n        var curEnd = null;\n        var repeat = motionArgs.repeat;\n        if (!repeat) {\n          repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight());\n        }\n        var orig = cm.charCoords(head, 'local');\n        motionArgs.repeat = repeat;\n        var curEnd = motions.moveByDisplayLines(cm, head, motionArgs, vim);\n        if (!curEnd) {\n          return null;\n        }\n        var dest = cm.charCoords(curEnd, 'local');\n        cm.scrollTo(null, scrollbox.top + dest.top - orig.top);\n        return curEnd;\n      },\n      moveByWords: function(cm, head, motionArgs) {\n        return moveToWord(cm, head, motionArgs.repeat, !!motionArgs.forward,\n            !!motionArgs.wordEnd, !!motionArgs.bigWord);\n      },\n      moveTillCharacter: function(cm, _head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        var curEnd = moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter);\n        var increment = motionArgs.forward ? -1 : 1;\n        recordLastCharacterSearch(increment, motionArgs);\n        if (!curEnd) return null;\n        curEnd.ch += increment;\n        return curEnd;\n      },\n      moveToCharacter: function(cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        recordLastCharacterSearch(0, motionArgs);\n        return moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || head;\n      },\n      moveToSymbol: function(cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        return findSymbol(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || head;\n      },\n      moveToColumn: function(cm, head, motionArgs, vim) {\n        var repeat = motionArgs.repeat;\n        vim.lastHPos = repeat - 1;\n        vim.lastHSPos = cm.charCoords(head,'div').left;\n        return moveToColumn(cm, repeat);\n      },\n      moveToEol: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        vim.lastHPos = Infinity;\n        var retval= Pos(cur.line + motionArgs.repeat - 1, Infinity);\n        var end=cm.clipPos(retval);\n        end.ch--;\n        vim.lastHSPos = cm.charCoords(end,'div').left;\n        return retval;\n      },\n      moveToFirstNonWhiteSpaceCharacter: function(cm, head) {\n        var cursor = head;\n        return Pos(cursor.line,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line)));\n      },\n      moveToMatchedSymbol: function(cm, head) {\n        var cursor = head;\n        var line = cursor.line;\n        var ch = cursor.ch;\n        var lineText = cm.getLine(line);\n        var symbol;\n        do {\n          symbol = lineText.charAt(ch++);\n          if (symbol && isMatchableSymbol(symbol)) {\n            var style = cm.getTokenTypeAt(Pos(line, ch));\n            if (style !== \"string\" && style !== \"comment\") {\n              break;\n            }\n          }\n        } while (symbol);\n        if (symbol) {\n          var matched = cm.findMatchingBracket(Pos(line, ch));\n          return matched.to;\n        } else {\n          return cursor;\n        }\n      },\n      moveToStartOfLine: function(_cm, head) {\n        return Pos(head.line, 0);\n      },\n      moveToLineOrEdgeOfDocument: function(cm, _head, motionArgs) {\n        var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine();\n        if (motionArgs.repeatIsExplicit) {\n          lineNum = motionArgs.repeat - cm.getOption('firstLineNumber');\n        }\n        return Pos(lineNum,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum)));\n      },\n      textObjectManipulation: function(cm, head, motionArgs, vim) {\n        var mirroredPairs = {'(': ')', ')': '(',\n                             '{': '}', '}': '{',\n                             '[': ']', ']': '[',\n                             '<': '>', '>': '<'};\n        var selfPaired = {'\\'': true, '\"': true, '`': true};\n\n        var character = motionArgs.selectedCharacter;\n        if (character == 'b') {\n          character = '(';\n        } else if (character == 'B') {\n          character = '{';\n        }\n        var inclusive = !motionArgs.textObjectInner;\n\n        var tmp;\n        if (mirroredPairs[character]) {\n          tmp = selectCompanionObject(cm, head, character, inclusive);\n        } else if (selfPaired[character]) {\n          tmp = findBeginningAndEnd(cm, head, character, inclusive);\n        } else if (character === 'W') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     true /** bigWord */);\n        } else if (character === 'w') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     false /** bigWord */);\n        } else if (character === 'p') {\n          tmp = findParagraph(cm, head, motionArgs.repeat, 0, inclusive);\n          motionArgs.linewise = true;\n          if (vim.visualMode) {\n            if (!vim.visualLine) { vim.visualLine = true; }\n          } else {\n            var operatorArgs = vim.inputState.operatorArgs;\n            if (operatorArgs) { operatorArgs.linewise = true; }\n            tmp.end.line--;\n          }\n        } else {\n          return null;\n        }\n\n        if (!cm.state.vim.visualMode) {\n          return [tmp.start, tmp.end];\n        } else {\n          return expandSelection(cm, tmp.start, tmp.end);\n        }\n      },\n\n      repeatLastCharacterSearch: function(cm, head, motionArgs) {\n        var lastSearch = vimGlobalState.lastCharacterSearch;\n        var repeat = motionArgs.repeat;\n        var forward = motionArgs.forward === lastSearch.forward;\n        var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1);\n        cm.moveH(-increment, 'char');\n        motionArgs.inclusive = forward ? true : false;\n        var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter);\n        if (!curEnd) {\n          cm.moveH(increment, 'char');\n          return head;\n        }\n        curEnd.ch += increment;\n        return curEnd;\n      }\n    };\n\n    function defineMotion(name, fn) {\n      motions[name] = fn;\n    }\n\n    function fillArray(val, times) {\n      var arr = [];\n      for (var i = 0; i < times; i++) {\n        arr.push(val);\n      }\n      return arr;\n    }\n    var operators = {\n      change: function(cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock = vim.visualBlock;\n        if (!vim.visualMode) {\n          var anchor = ranges[0].anchor,\n              head = ranges[0].head;\n          text = cm.getRange(anchor, head);\n          var lastState = vim.lastEditInputState || {};\n          if (lastState.motion == \"moveByWords\" && !isWhiteSpaceString(text)) {\n            var match = (/\\s+$/).exec(text);\n            if (match && lastState.motionArgs && lastState.motionArgs.forward) {\n              head = offsetCursor(head, 0, - match[0].length);\n              text = text.slice(0, - match[0].length);\n            }\n          }\n          var prevLineEnd = new Pos(anchor.line - 1, Number.MAX_VALUE);\n          var wasLastLine = cm.firstLine() == cm.lastLine();\n          if (head.line > cm.lastLine() && args.linewise && !wasLastLine) {\n            cm.replaceRange('', prevLineEnd, head);\n          } else {\n            cm.replaceRange('', anchor, head);\n          }\n          if (args.linewise) {\n            if (!wasLastLine) {\n              cm.setCursor(prevLineEnd);\n              CodeMirror.commands.newlineAndIndent(cm);\n            }\n            anchor.ch = Number.MAX_VALUE;\n          }\n          finalHead = anchor;\n        } else {\n          text = cm.getSelection();\n          var replacement = fillArray('', ranges.length);\n          cm.replaceSelections(replacement);\n          finalHead = cursorMin(ranges[0].head, ranges[0].anchor);\n        }\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'change', text,\n            args.linewise, ranges.length > 1);\n        actions.enterInsertMode(cm, {head: finalHead}, cm.state.vim);\n      },\n      'delete': function(cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        if (!vim.visualBlock) {\n          var anchor = ranges[0].anchor,\n              head = ranges[0].head;\n          if (args.linewise &&\n              head.line != cm.firstLine() &&\n              anchor.line == cm.lastLine() &&\n              anchor.line == head.line - 1) {\n            if (anchor.line == cm.firstLine()) {\n              anchor.ch = 0;\n            } else {\n              anchor = Pos(anchor.line - 1, lineLength(cm, anchor.line - 1));\n            }\n          }\n          text = cm.getRange(anchor, head);\n          cm.replaceRange('', anchor, head);\n          finalHead = anchor;\n          if (args.linewise) {\n            finalHead = motions.moveToFirstNonWhiteSpaceCharacter(cm, anchor);\n          }\n        } else {\n          text = cm.getSelection();\n          var replacement = fillArray('', ranges.length);\n          cm.replaceSelections(replacement);\n          finalHead = ranges[0].anchor;\n        }\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'delete', text,\n            args.linewise, vim.visualBlock);\n        var includeLineBreak = vim.insertMode\n        return clipCursorToContent(cm, finalHead, includeLineBreak);\n      },\n      indent: function(cm, args, ranges) {\n        var vim = cm.state.vim;\n        var startLine = ranges[0].anchor.line;\n        var endLine = vim.visualBlock ?\n          ranges[ranges.length - 1].anchor.line :\n          ranges[0].head.line;\n        var repeat = (vim.visualMode) ? args.repeat : 1;\n        if (args.linewise) {\n          endLine--;\n        }\n        for (var i = startLine; i <= endLine; i++) {\n          for (var j = 0; j < repeat; j++) {\n            cm.indentLine(i, args.indentRight);\n          }\n        }\n        return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor);\n      },\n      changeCase: function(cm, args, ranges, oldAnchor, newHead) {\n        var selections = cm.getSelections();\n        var swapped = [];\n        var toLower = args.toLower;\n        for (var j = 0; j < selections.length; j++) {\n          var toSwap = selections[j];\n          var text = '';\n          if (toLower === true) {\n            text = toSwap.toLowerCase();\n          } else if (toLower === false) {\n            text = toSwap.toUpperCase();\n          } else {\n            for (var i = 0; i < toSwap.length; i++) {\n              var character = toSwap.charAt(i);\n              text += isUpperCase(character) ? character.toLowerCase() :\n                  character.toUpperCase();\n            }\n          }\n          swapped.push(text);\n        }\n        cm.replaceSelections(swapped);\n        if (args.shouldMoveCursor){\n          return newHead;\n        } else if (!cm.state.vim.visualMode && args.linewise && ranges[0].anchor.line + 1 == ranges[0].head.line) {\n          return motions.moveToFirstNonWhiteSpaceCharacter(cm, oldAnchor);\n        } else if (args.linewise){\n          return oldAnchor;\n        } else {\n          return cursorMin(ranges[0].anchor, ranges[0].head);\n        }\n      },\n      yank: function(cm, args, ranges, oldAnchor) {\n        var vim = cm.state.vim;\n        var text = cm.getSelection();\n        var endPos = vim.visualMode\n          ? cursorMin(vim.sel.anchor, vim.sel.head, ranges[0].head, ranges[0].anchor)\n          : oldAnchor;\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'yank',\n            text, args.linewise, vim.visualBlock);\n        return endPos;\n      }\n    };\n\n    function defineOperator(name, fn) {\n      operators[name] = fn;\n    }\n\n    var actions = {\n      jumpListWalk: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat;\n        var forward = actionArgs.forward;\n        var jumpList = vimGlobalState.jumpList;\n\n        var mark = jumpList.move(cm, forward ? repeat : -repeat);\n        var markPos = mark ? mark.find() : undefined;\n        markPos = markPos ? markPos : cm.getCursor();\n        cm.setCursor(markPos);\n        cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n      },\n      scroll: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat || 1;\n        var lineHeight = cm.defaultTextHeight();\n        var top = cm.getScrollInfo().top;\n        var delta = lineHeight * repeat;\n        var newPos = actionArgs.forward ? top + delta : top - delta;\n        var cursor = copyCursor(cm.getCursor());\n        var cursorCoords = cm.charCoords(cursor, 'local');\n        if (actionArgs.forward) {\n          if (newPos > cursorCoords.top) {\n             cursor.line += (newPos - cursorCoords.top) / lineHeight;\n             cursor.line = Math.ceil(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(null, cursorCoords.top);\n          } else {\n             cm.scrollTo(null, newPos);\n          }\n        } else {\n          var newBottom = newPos + cm.getScrollInfo().clientHeight;\n          if (newBottom < cursorCoords.bottom) {\n             cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight;\n             cursor.line = Math.floor(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(\n                 null, cursorCoords.bottom - cm.getScrollInfo().clientHeight);\n          } else {\n             cm.scrollTo(null, newPos);\n          }\n        }\n      },\n      scrollToCursor: function(cm, actionArgs) {\n        var lineNum = cm.getCursor().line;\n        var charCoords = cm.charCoords(Pos(lineNum, 0), 'local');\n        var height = cm.getScrollInfo().clientHeight;\n        var y = charCoords.top;\n        var lineHeight = charCoords.bottom - y;\n        switch (actionArgs.position) {\n          case 'center': y = y - (height / 2) + lineHeight;\n            break;\n          case 'bottom': y = y - height + lineHeight*1.4;\n            break;\n          case 'top': y = y + lineHeight*0.4;\n            break;\n        }\n        cm.scrollTo(null, y);\n      },\n      replayMacro: function(cm, actionArgs, vim) {\n        var registerName = actionArgs.selectedCharacter;\n        var repeat = actionArgs.repeat;\n        var macroModeState = vimGlobalState.macroModeState;\n        if (registerName == '@') {\n          registerName = macroModeState.latestRegister;\n        }\n        while(repeat--){\n          executeMacroRegister(cm, vim, macroModeState, registerName);\n        }\n      },\n      enterMacroRecordMode: function(cm, actionArgs) {\n        var macroModeState = vimGlobalState.macroModeState;\n        var registerName = actionArgs.selectedCharacter;\n        if (vimGlobalState.registerController.isValidRegister(registerName)) {\n          macroModeState.enterMacroRecordMode(cm, registerName);\n        }\n      },\n      toggleOverwrite: function(cm) {\n        if (!cm.state.overwrite) {\n          cm.toggleOverwrite(true);\n          cm.setOption('keyMap', 'vim-replace');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"replace\"});\n        } else {\n          cm.toggleOverwrite(false);\n          cm.setOption('keyMap', 'vim-insert');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"insert\"});\n        }\n      },\n      enterInsertMode: function(cm, actionArgs, vim) {\n        if (cm.getOption('readOnly')) { return; }\n        vim.insertMode = true;\n        vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1;\n        var insertAt = (actionArgs) ? actionArgs.insertAt : null;\n        var sel = vim.sel;\n        var head = actionArgs.head || cm.getCursor('head');\n        var height = cm.listSelections().length;\n        if (insertAt == 'eol') {\n          head = Pos(head.line, lineLength(cm, head.line));\n        } else if (insertAt == 'charAfter') {\n          head = offsetCursor(head, 0, 1);\n        } else if (insertAt == 'firstNonBlank') {\n          head = motions.moveToFirstNonWhiteSpaceCharacter(cm, head);\n        } else if (insertAt == 'startOfSelectedArea') {\n          if (!vim.visualBlock) {\n            if (sel.head.line < sel.anchor.line) {\n              head = sel.head;\n            } else {\n              head = Pos(sel.anchor.line, 0);\n            }\n          } else {\n            head = Pos(\n                Math.min(sel.head.line, sel.anchor.line),\n                Math.min(sel.head.ch, sel.anchor.ch));\n            height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n          }\n        } else if (insertAt == 'endOfSelectedArea') {\n          if (!vim.visualBlock) {\n            if (sel.head.line >= sel.anchor.line) {\n              head = offsetCursor(sel.head, 0, 1);\n            } else {\n              head = Pos(sel.anchor.line, 0);\n            }\n          } else {\n            head = Pos(\n                Math.min(sel.head.line, sel.anchor.line),\n                Math.max(sel.head.ch + 1, sel.anchor.ch));\n            height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n          }\n        } else if (insertAt == 'inplace') {\n          if (vim.visualMode){\n            return;\n          }\n        }\n        cm.setOption('disableInput', false);\n        if (actionArgs && actionArgs.replace) {\n          cm.toggleOverwrite(true);\n          cm.setOption('keyMap', 'vim-replace');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"replace\"});\n        } else {\n          cm.toggleOverwrite(false);\n          cm.setOption('keyMap', 'vim-insert');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"insert\"});\n        }\n        if (!vimGlobalState.macroModeState.isPlaying) {\n          cm.on('change', onChange);\n          CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n        }\n        if (vim.visualMode) {\n          exitVisualMode(cm);\n        }\n        selectForInsert(cm, head, height);\n      },\n      toggleVisualMode: function(cm, actionArgs, vim) {\n        var repeat = actionArgs.repeat;\n        var anchor = cm.getCursor();\n        var head;\n        if (!vim.visualMode) {\n          vim.visualMode = true;\n          vim.visualLine = !!actionArgs.linewise;\n          vim.visualBlock = !!actionArgs.blockwise;\n          head = clipCursorToContent(\n              cm, Pos(anchor.line, anchor.ch + repeat - 1),\n              true /** includeLineBreak */);\n          vim.sel = {\n            anchor: anchor,\n            head: head\n          };\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\"});\n          updateCmSelection(cm);\n          updateMark(cm, vim, '<', cursorMin(anchor, head));\n          updateMark(cm, vim, '>', cursorMax(anchor, head));\n        } else if (vim.visualLine ^ actionArgs.linewise ||\n            vim.visualBlock ^ actionArgs.blockwise) {\n          vim.visualLine = !!actionArgs.linewise;\n          vim.visualBlock = !!actionArgs.blockwise;\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\"});\n          updateCmSelection(cm);\n        } else {\n          exitVisualMode(cm);\n        }\n      },\n      reselectLastSelection: function(cm, _actionArgs, vim) {\n        var lastSelection = vim.lastSelection;\n        if (vim.visualMode) {\n          updateLastSelection(cm, vim);\n        }\n        if (lastSelection) {\n          var anchor = lastSelection.anchorMark.find();\n          var head = lastSelection.headMark.find();\n          if (!anchor || !head) {\n            return;\n          }\n          vim.sel = {\n            anchor: anchor,\n            head: head\n          };\n          vim.visualMode = true;\n          vim.visualLine = lastSelection.visualLine;\n          vim.visualBlock = lastSelection.visualBlock;\n          updateCmSelection(cm);\n          updateMark(cm, vim, '<', cursorMin(anchor, head));\n          updateMark(cm, vim, '>', cursorMax(anchor, head));\n          CodeMirror.signal(cm, 'vim-mode-change', {\n            mode: 'visual',\n            subMode: vim.visualLine ? 'linewise' :\n                     vim.visualBlock ? 'blockwise' : ''});\n        }\n      },\n      joinLines: function(cm, actionArgs, vim) {\n        var curStart, curEnd;\n        if (vim.visualMode) {\n          curStart = cm.getCursor('anchor');\n          curEnd = cm.getCursor('head');\n          if (cursorIsBefore(curEnd, curStart)) {\n            var tmp = curEnd;\n            curEnd = curStart;\n            curStart = tmp;\n          }\n          curEnd.ch = lineLength(cm, curEnd.line) - 1;\n        } else {\n          var repeat = Math.max(actionArgs.repeat, 2);\n          curStart = cm.getCursor();\n          curEnd = clipCursorToContent(cm, Pos(curStart.line + repeat - 1,\n                                               Infinity));\n        }\n        var finalCh = 0;\n        for (var i = curStart.line; i < curEnd.line; i++) {\n          finalCh = lineLength(cm, curStart.line);\n          var tmp = Pos(curStart.line + 1,\n                        lineLength(cm, curStart.line + 1));\n          var text = cm.getRange(curStart, tmp);\n          text = text.replace(/\\n\\s*/g, ' ');\n          cm.replaceRange(text, curStart, tmp);\n        }\n        var curFinalPos = Pos(curStart.line, finalCh);\n        if (vim.visualMode) {\n          exitVisualMode(cm, false);\n        }\n        cm.setCursor(curFinalPos);\n      },\n      newLineAndEnterInsertMode: function(cm, actionArgs, vim) {\n        vim.insertMode = true;\n        var insertAt = copyCursor(cm.getCursor());\n        if (insertAt.line === cm.firstLine() && !actionArgs.after) {\n          cm.replaceRange('\\n', Pos(cm.firstLine(), 0));\n          cm.setCursor(cm.firstLine(), 0);\n        } else {\n          insertAt.line = (actionArgs.after) ? insertAt.line :\n              insertAt.line - 1;\n          insertAt.ch = lineLength(cm, insertAt.line);\n          cm.setCursor(insertAt);\n          var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment ||\n              CodeMirror.commands.newlineAndIndent;\n          newlineFn(cm);\n        }\n        this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);\n      },\n      paste: function(cm, actionArgs, vim) {\n        var cur = copyCursor(cm.getCursor());\n        var register = vimGlobalState.registerController.getRegister(\n            actionArgs.registerName);\n        var text = register.toString();\n        if (!text) {\n          return;\n        }\n        if (actionArgs.matchIndent) {\n          var tabSize = cm.getOption(\"tabSize\");\n          var whitespaceLength = function(str) {\n            var tabs = (str.split(\"\\t\").length - 1);\n            var spaces = (str.split(\" \").length - 1);\n            return tabs * tabSize + spaces * 1;\n          };\n          var currentLine = cm.getLine(cm.getCursor().line);\n          var indent = whitespaceLength(currentLine.match(/^\\s*/)[0]);\n          var chompedText = text.replace(/\\n$/, '');\n          var wasChomped = text !== chompedText;\n          var firstIndent = whitespaceLength(text.match(/^\\s*/)[0]);\n          var text = chompedText.replace(/^\\s*/gm, function(wspace) {\n            var newIndent = indent + (whitespaceLength(wspace) - firstIndent);\n            if (newIndent < 0) {\n              return \"\";\n            }\n            else if (cm.getOption(\"indentWithTabs\")) {\n              var quotient = Math.floor(newIndent / tabSize);\n              return Array(quotient + 1).join('\\t');\n            }\n            else {\n              return Array(newIndent + 1).join(' ');\n            }\n          });\n          text += wasChomped ? \"\\n\" : \"\";\n        }\n        if (actionArgs.repeat > 1) {\n          var text = Array(actionArgs.repeat + 1).join(text);\n        }\n        var linewise = register.linewise;\n        var blockwise = register.blockwise;\n        if (linewise && !blockwise) {\n          if(vim.visualMode) {\n            text = vim.visualLine ? text.slice(0, -1) : '\\n' + text.slice(0, text.length - 1) + '\\n';\n          } else if (actionArgs.after) {\n            text = '\\n' + text.slice(0, text.length - 1);\n            cur.ch = lineLength(cm, cur.line);\n          } else {\n            cur.ch = 0;\n          }\n        } else {\n          if (blockwise) {\n            text = text.split('\\n');\n            for (var i = 0; i < text.length; i++) {\n              text[i] = (text[i] == '') ? ' ' : text[i];\n            }\n          }\n          cur.ch += actionArgs.after ? 1 : 0;\n        }\n        var curPosFinal;\n        var idx;\n        if (vim.visualMode) {\n          vim.lastPastedText = text;\n          var lastSelectionCurEnd;\n          var selectedArea = getSelectedAreaRange(cm, vim);\n          var selectionStart = selectedArea[0];\n          var selectionEnd = selectedArea[1];\n          var selectedText = cm.getSelection();\n          var selections = cm.listSelections();\n          var emptyStrings = new Array(selections.length).join('1').split('1');\n          if (vim.lastSelection) {\n            lastSelectionCurEnd = vim.lastSelection.headMark.find();\n          }\n          vimGlobalState.registerController.unnamedRegister.setText(selectedText);\n          if (blockwise) {\n            cm.replaceSelections(emptyStrings);\n            selectionEnd = Pos(selectionStart.line + text.length-1, selectionStart.ch);\n            cm.setCursor(selectionStart);\n            selectBlock(cm, selectionEnd);\n            cm.replaceSelections(text);\n            curPosFinal = selectionStart;\n          } else if (vim.visualBlock) {\n            cm.replaceSelections(emptyStrings);\n            cm.setCursor(selectionStart);\n            cm.replaceRange(text, selectionStart, selectionStart);\n            curPosFinal = selectionStart;\n          } else {\n            cm.replaceRange(text, selectionStart, selectionEnd);\n            curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1);\n          }\n          if(lastSelectionCurEnd) {\n            vim.lastSelection.headMark = cm.setBookmark(lastSelectionCurEnd);\n          }\n          if (linewise) {\n            curPosFinal.ch=0;\n          }\n        } else {\n          if (blockwise) {\n            cm.setCursor(cur);\n            for (var i = 0; i < text.length; i++) {\n              var line = cur.line+i;\n              if (line > cm.lastLine()) {\n                cm.replaceRange('\\n',  Pos(line, 0));\n              }\n              var lastCh = lineLength(cm, line);\n              if (lastCh < cur.ch) {\n                extendLineToColumn(cm, line, cur.ch);\n              }\n            }\n            cm.setCursor(cur);\n            selectBlock(cm, Pos(cur.line + text.length-1, cur.ch));\n            cm.replaceSelections(text);\n            curPosFinal = cur;\n          } else {\n            cm.replaceRange(text, cur);\n            if (linewise && actionArgs.after) {\n              curPosFinal = Pos(\n              cur.line + 1,\n              findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));\n            } else if (linewise && !actionArgs.after) {\n              curPosFinal = Pos(\n                cur.line,\n                findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));\n            } else if (!linewise && actionArgs.after) {\n              idx = cm.indexFromPos(cur);\n              curPosFinal = cm.posFromIndex(idx + text.length - 1);\n            } else {\n              idx = cm.indexFromPos(cur);\n              curPosFinal = cm.posFromIndex(idx + text.length);\n            }\n          }\n        }\n        if (vim.visualMode) {\n          exitVisualMode(cm, false);\n        }\n        cm.setCursor(curPosFinal);\n      },\n      undo: function(cm, actionArgs) {\n        cm.operation(function() {\n          repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)();\n          cm.setCursor(cm.getCursor('anchor'));\n        });\n      },\n      redo: function(cm, actionArgs) {\n        repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)();\n      },\n      setRegister: function(_cm, actionArgs, vim) {\n        vim.inputState.registerName = actionArgs.selectedCharacter;\n      },\n      setMark: function(cm, actionArgs, vim) {\n        var markName = actionArgs.selectedCharacter;\n        updateMark(cm, vim, markName, cm.getCursor());\n      },\n      replace: function(cm, actionArgs, vim) {\n        var replaceWith = actionArgs.selectedCharacter;\n        var curStart = cm.getCursor();\n        var replaceTo;\n        var curEnd;\n        var selections = cm.listSelections();\n        if (vim.visualMode) {\n          curStart = cm.getCursor('start');\n          curEnd = cm.getCursor('end');\n        } else {\n          var line = cm.getLine(curStart.line);\n          replaceTo = curStart.ch + actionArgs.repeat;\n          if (replaceTo > line.length) {\n            replaceTo=line.length;\n          }\n          curEnd = Pos(curStart.line, replaceTo);\n        }\n        if (replaceWith=='\\n') {\n          if (!vim.visualMode) cm.replaceRange('', curStart, curEnd);\n          (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm);\n        } else {\n          var replaceWithStr = cm.getRange(curStart, curEnd);\n          replaceWithStr = replaceWithStr.replace(/[^\\n]/g, replaceWith);\n          if (vim.visualBlock) {\n            var spaces = new Array(cm.getOption(\"tabSize\")+1).join(' ');\n            replaceWithStr = cm.getSelection();\n            replaceWithStr = replaceWithStr.replace(/\\t/g, spaces).replace(/[^\\n]/g, replaceWith).split('\\n');\n            cm.replaceSelections(replaceWithStr);\n          } else {\n            cm.replaceRange(replaceWithStr, curStart, curEnd);\n          }\n          if (vim.visualMode) {\n            curStart = cursorIsBefore(selections[0].anchor, selections[0].head) ?\n                         selections[0].anchor : selections[0].head;\n            cm.setCursor(curStart);\n            exitVisualMode(cm, false);\n          } else {\n            cm.setCursor(offsetCursor(curEnd, 0, -1));\n          }\n        }\n      },\n      incrementNumberToken: function(cm, actionArgs) {\n        var cur = cm.getCursor();\n        var lineStr = cm.getLine(cur.line);\n        var re = /(-?)(?:(0x)([\\da-f]+)|(0b|0|)(\\d+))/gi;\n        var match;\n        var start;\n        var end;\n        var numberStr;\n        while ((match = re.exec(lineStr)) !== null) {\n          start = match.index;\n          end = start + match[0].length;\n          if (cur.ch < end)break;\n        }\n        if (!actionArgs.backtrack && (end <= cur.ch))return;\n        if (match) {\n          var baseStr = match[2] || match[4]\n          var digits = match[3] || match[5]\n          var increment = actionArgs.increase ? 1 : -1;\n          var base = {'0b': 2, '0': 8, '': 10, '0x': 16}[baseStr.toLowerCase()];\n          var number = parseInt(match[1] + digits, base) + (increment * actionArgs.repeat);\n          numberStr = number.toString(base);\n          var zeroPadding = baseStr ? new Array(digits.length - numberStr.length + 1 + match[1].length).join('0') : ''\n          if (numberStr.charAt(0) === '-') {\n            numberStr = '-' + baseStr + zeroPadding + numberStr.substr(1);\n          } else {\n            numberStr = baseStr + zeroPadding + numberStr;\n          }\n          var from = Pos(cur.line, start);\n          var to = Pos(cur.line, end);\n          cm.replaceRange(numberStr, from, to);\n        } else {\n          return;\n        }\n        cm.setCursor(Pos(cur.line, start + numberStr.length - 1));\n      },\n      repeatLastEdit: function(cm, actionArgs, vim) {\n        var lastEditInputState = vim.lastEditInputState;\n        if (!lastEditInputState) { return; }\n        var repeat = actionArgs.repeat;\n        if (repeat && actionArgs.repeatIsExplicit) {\n          vim.lastEditInputState.repeatOverride = repeat;\n        } else {\n          repeat = vim.lastEditInputState.repeatOverride || repeat;\n        }\n        repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);\n      },\n      indent: function(cm, actionArgs) {\n        cm.indentLine(cm.getCursor().line, actionArgs.indentRight);\n      },\n      exitInsertMode: exitInsertMode\n    };\n\n    function defineAction(name, fn) {\n      actions[name] = fn;\n    }\n    function clipCursorToContent(cm, cur, includeLineBreak) {\n      var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine() );\n      var maxCh = lineLength(cm, line) - 1;\n      maxCh = (includeLineBreak) ? maxCh + 1 : maxCh;\n      var ch = Math.min(Math.max(0, cur.ch), maxCh);\n      return Pos(line, ch);\n    }\n    function copyArgs(args) {\n      var ret = {};\n      for (var prop in args) {\n        if (args.hasOwnProperty(prop)) {\n          ret[prop] = args[prop];\n        }\n      }\n      return ret;\n    }\n    function offsetCursor(cur, offsetLine, offsetCh) {\n      if (typeof offsetLine === 'object') {\n        offsetCh = offsetLine.ch;\n        offsetLine = offsetLine.line;\n      }\n      return Pos(cur.line + offsetLine, cur.ch + offsetCh);\n    }\n    function getOffset(anchor, head) {\n      return {\n        line: head.line - anchor.line,\n        ch: head.line - anchor.line\n      };\n    }\n    function commandMatches(keys, keyMap, context, inputState) {\n      var match, partial = [], full = [];\n      for (var i = 0; i < keyMap.length; i++) {\n        var command = keyMap[i];\n        if (context == 'insert' && command.context != 'insert' ||\n            command.context && command.context != context ||\n            inputState.operator && command.type == 'action' ||\n            !(match = commandMatch(keys, command.keys))) { continue; }\n        if (match == 'partial') { partial.push(command); }\n        if (match == 'full') { full.push(command); }\n      }\n      return {\n        partial: partial.length && partial,\n        full: full.length && full\n      };\n    }\n    function commandMatch(pressed, mapped) {\n      if (mapped.slice(-11) == '<character>') {\n        var prefixLen = mapped.length - 11;\n        var pressedPrefix = pressed.slice(0, prefixLen);\n        var mappedPrefix = mapped.slice(0, prefixLen);\n        return pressedPrefix == mappedPrefix && pressed.length > prefixLen ? 'full' :\n               mappedPrefix.indexOf(pressedPrefix) == 0 ? 'partial' : false;\n      } else {\n        return pressed == mapped ? 'full' :\n               mapped.indexOf(pressed) == 0 ? 'partial' : false;\n      }\n    }\n    function lastChar(keys) {\n      var match = /^.*(<[^>]+>)$/.exec(keys);\n      var selectedCharacter = match ? match[1] : keys.slice(-1);\n      if (selectedCharacter.length > 1){\n        switch(selectedCharacter){\n          case '<CR>':\n            selectedCharacter='\\n';\n            break;\n          case '<Space>':\n            selectedCharacter=' ';\n            break;\n          default:\n            selectedCharacter='';\n            break;\n        }\n      }\n      return selectedCharacter;\n    }\n    function repeatFn(cm, fn, repeat) {\n      return function() {\n        for (var i = 0; i < repeat; i++) {\n          fn(cm);\n        }\n      };\n    }\n    function copyCursor(cur) {\n      return Pos(cur.line, cur.ch);\n    }\n    function cursorEqual(cur1, cur2) {\n      return cur1.ch == cur2.ch && cur1.line == cur2.line;\n    }\n    function cursorIsBefore(cur1, cur2) {\n      if (cur1.line < cur2.line) {\n        return true;\n      }\n      if (cur1.line == cur2.line && cur1.ch < cur2.ch) {\n        return true;\n      }\n      return false;\n    }\n    function cursorMin(cur1, cur2) {\n      if (arguments.length > 2) {\n        cur2 = cursorMin.apply(undefined, Array.prototype.slice.call(arguments, 1));\n      }\n      return cursorIsBefore(cur1, cur2) ? cur1 : cur2;\n    }\n    function cursorMax(cur1, cur2) {\n      if (arguments.length > 2) {\n        cur2 = cursorMax.apply(undefined, Array.prototype.slice.call(arguments, 1));\n      }\n      return cursorIsBefore(cur1, cur2) ? cur2 : cur1;\n    }\n    function cursorIsBetween(cur1, cur2, cur3) {\n      var cur1before2 = cursorIsBefore(cur1, cur2);\n      var cur2before3 = cursorIsBefore(cur2, cur3);\n      return cur1before2 && cur2before3;\n    }\n    function lineLength(cm, lineNum) {\n      return cm.getLine(lineNum).length;\n    }\n    function trim(s) {\n      if (s.trim) {\n        return s.trim();\n      }\n      return s.replace(/^\\s+|\\s+$/g, '');\n    }\n    function escapeRegex(s) {\n      return s.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g, '\\\\$1');\n    }\n    function extendLineToColumn(cm, lineNum, column) {\n      var endCh = lineLength(cm, lineNum);\n      var spaces = new Array(column-endCh+1).join(' ');\n      cm.setCursor(Pos(lineNum, endCh));\n      cm.replaceRange(spaces, cm.getCursor());\n    }\n    function selectBlock(cm, selectionEnd) {\n      var selections = [], ranges = cm.listSelections();\n      var head = copyCursor(cm.clipPos(selectionEnd));\n      var isClipped = !cursorEqual(selectionEnd, head);\n      var curHead = cm.getCursor('head');\n      var primIndex = getIndex(ranges, curHead);\n      var wasClipped = cursorEqual(ranges[primIndex].head, ranges[primIndex].anchor);\n      var max = ranges.length - 1;\n      var index = max - primIndex > primIndex ? max : 0;\n      var base = ranges[index].anchor;\n\n      var firstLine = Math.min(base.line, head.line);\n      var lastLine = Math.max(base.line, head.line);\n      var baseCh = base.ch, headCh = head.ch;\n\n      var dir = ranges[index].head.ch - baseCh;\n      var newDir = headCh - baseCh;\n      if (dir > 0 && newDir <= 0) {\n        baseCh++;\n        if (!isClipped) { headCh--; }\n      } else if (dir < 0 && newDir >= 0) {\n        baseCh--;\n        if (!wasClipped) { headCh++; }\n      } else if (dir < 0 && newDir == -1) {\n        baseCh--;\n        headCh++;\n      }\n      for (var line = firstLine; line <= lastLine; line++) {\n        var range = {anchor: new Pos(line, baseCh), head: new Pos(line, headCh)};\n        selections.push(range);\n      }\n      cm.setSelections(selections);\n      selectionEnd.ch = headCh;\n      base.ch = baseCh;\n      return base;\n    }\n    function selectForInsert(cm, head, height) {\n      var sel = [];\n      for (var i = 0; i < height; i++) {\n        var lineHead = offsetCursor(head, i, 0);\n        sel.push({anchor: lineHead, head: lineHead});\n      }\n      cm.setSelections(sel, 0);\n    }\n    function getIndex(ranges, cursor, end) {\n      for (var i = 0; i < ranges.length; i++) {\n        var atAnchor = end != 'head' && cursorEqual(ranges[i].anchor, cursor);\n        var atHead = end != 'anchor' && cursorEqual(ranges[i].head, cursor);\n        if (atAnchor || atHead) {\n          return i;\n        }\n      }\n      return -1;\n    }\n    function getSelectedAreaRange(cm, vim) {\n      var lastSelection = vim.lastSelection;\n      var getCurrentSelectedAreaRange = function() {\n        var selections = cm.listSelections();\n        var start =  selections[0];\n        var end = selections[selections.length-1];\n        var selectionStart = cursorIsBefore(start.anchor, start.head) ? start.anchor : start.head;\n        var selectionEnd = cursorIsBefore(end.anchor, end.head) ? end.head : end.anchor;\n        return [selectionStart, selectionEnd];\n      };\n      var getLastSelectedAreaRange = function() {\n        var selectionStart = cm.getCursor();\n        var selectionEnd = cm.getCursor();\n        var block = lastSelection.visualBlock;\n        if (block) {\n          var width = block.width;\n          var height = block.height;\n          selectionEnd = Pos(selectionStart.line + height, selectionStart.ch + width);\n          var selections = [];\n          for (var i = selectionStart.line; i < selectionEnd.line; i++) {\n            var anchor = Pos(i, selectionStart.ch);\n            var head = Pos(i, selectionEnd.ch);\n            var range = {anchor: anchor, head: head};\n            selections.push(range);\n          }\n          cm.setSelections(selections);\n        } else {\n          var start = lastSelection.anchorMark.find();\n          var end = lastSelection.headMark.find();\n          var line = end.line - start.line;\n          var ch = end.ch - start.ch;\n          selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch};\n          if (lastSelection.visualLine) {\n            selectionStart = Pos(selectionStart.line, 0);\n            selectionEnd = Pos(selectionEnd.line, lineLength(cm, selectionEnd.line));\n          }\n          cm.setSelection(selectionStart, selectionEnd);\n        }\n        return [selectionStart, selectionEnd];\n      };\n      if (!vim.visualMode) {\n        return getLastSelectedAreaRange();\n      } else {\n        return getCurrentSelectedAreaRange();\n      }\n    }\n    function updateLastSelection(cm, vim) {\n      var anchor = vim.sel.anchor;\n      var head = vim.sel.head;\n      if (vim.lastPastedText) {\n        head = cm.posFromIndex(cm.indexFromPos(anchor) + vim.lastPastedText.length);\n        vim.lastPastedText = null;\n      }\n      vim.lastSelection = {'anchorMark': cm.setBookmark(anchor),\n                           'headMark': cm.setBookmark(head),\n                           'anchor': copyCursor(anchor),\n                           'head': copyCursor(head),\n                           'visualMode': vim.visualMode,\n                           'visualLine': vim.visualLine,\n                           'visualBlock': vim.visualBlock};\n    }\n    function expandSelection(cm, start, end) {\n      var sel = cm.state.vim.sel;\n      var head = sel.head;\n      var anchor = sel.anchor;\n      var tmp;\n      if (cursorIsBefore(end, start)) {\n        tmp = end;\n        end = start;\n        start = tmp;\n      }\n      if (cursorIsBefore(head, anchor)) {\n        head = cursorMin(start, head);\n        anchor = cursorMax(anchor, end);\n      } else {\n        anchor = cursorMin(start, anchor);\n        head = cursorMax(head, end);\n        head = offsetCursor(head, 0, -1);\n        if (head.ch == -1 && head.line != cm.firstLine()) {\n          head = Pos(head.line - 1, lineLength(cm, head.line - 1));\n        }\n      }\n      return [anchor, head];\n    }\n    function updateCmSelection(cm, sel, mode) {\n      var vim = cm.state.vim;\n      sel = sel || vim.sel;\n      var mode = mode ||\n        vim.visualLine ? 'line' : vim.visualBlock ? 'block' : 'char';\n      var cmSel = makeCmSelection(cm, sel, mode);\n      cm.setSelections(cmSel.ranges, cmSel.primary);\n      updateFakeCursor(cm);\n    }\n    function makeCmSelection(cm, sel, mode, exclusive) {\n      var head = copyCursor(sel.head);\n      var anchor = copyCursor(sel.anchor);\n      if (mode == 'char') {\n        var headOffset = !exclusive && !cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        var anchorOffset = cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        head = offsetCursor(sel.head, 0, headOffset);\n        anchor = offsetCursor(sel.anchor, 0, anchorOffset);\n        return {\n          ranges: [{anchor: anchor, head: head}],\n          primary: 0\n        };\n      } else if (mode == 'line') {\n        if (!cursorIsBefore(sel.head, sel.anchor)) {\n          anchor.ch = 0;\n\n          var lastLine = cm.lastLine();\n          if (head.line > lastLine) {\n            head.line = lastLine;\n          }\n          head.ch = lineLength(cm, head.line);\n        } else {\n          head.ch = 0;\n          anchor.ch = lineLength(cm, anchor.line);\n        }\n        return {\n          ranges: [{anchor: anchor, head: head}],\n          primary: 0\n        };\n      } else if (mode == 'block') {\n        var top = Math.min(anchor.line, head.line),\n            left = Math.min(anchor.ch, head.ch),\n            bottom = Math.max(anchor.line, head.line),\n            right = Math.max(anchor.ch, head.ch) + 1;\n        var height = bottom - top + 1;\n        var primary = head.line == top ? 0 : height - 1;\n        var ranges = [];\n        for (var i = 0; i < height; i++) {\n          ranges.push({\n            anchor: Pos(top + i, left),\n            head: Pos(top + i, right)\n          });\n        }\n        return {\n          ranges: ranges,\n          primary: primary\n        };\n      }\n    }\n    function getHead(cm) {\n      var cur = cm.getCursor('head');\n      if (cm.getSelection().length == 1) {\n        cur = cursorMin(cur, cm.getCursor('anchor'));\n      }\n      return cur;\n    }\n    function exitVisualMode(cm, moveHead) {\n      var vim = cm.state.vim;\n      if (moveHead !== false) {\n        cm.setCursor(clipCursorToContent(cm, vim.sel.head));\n      }\n      updateLastSelection(cm, vim);\n      vim.visualMode = false;\n      vim.visualLine = false;\n      vim.visualBlock = false;\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      if (vim.fakeCursor) {\n        vim.fakeCursor.clear();\n      }\n    }\n    function clipToLine(cm, curStart, curEnd) {\n      var selection = cm.getRange(curStart, curEnd);\n      if (/\\n\\s*$/.test(selection)) {\n        var lines = selection.split('\\n');\n        lines.pop();\n        var line;\n        for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) {\n          curEnd.line--;\n          curEnd.ch = 0;\n        }\n        if (line) {\n          curEnd.line--;\n          curEnd.ch = lineLength(cm, curEnd.line);\n        } else {\n          curEnd.ch = 0;\n        }\n      }\n    }\n    function expandSelectionToLine(_cm, curStart, curEnd) {\n      curStart.ch = 0;\n      curEnd.ch = 0;\n      curEnd.line++;\n    }\n\n    function findFirstNonWhiteSpaceCharacter(text) {\n      if (!text) {\n        return 0;\n      }\n      var firstNonWS = text.search(/\\S/);\n      return firstNonWS == -1 ? text.length : firstNonWS;\n    }\n\n    function expandWordUnderCursor(cm, inclusive, _forward, bigWord, noSymbol) {\n      var cur = getHead(cm);\n      var line = cm.getLine(cur.line);\n      var idx = cur.ch;\n      var test = noSymbol ? wordCharTest[0] : bigWordCharTest [0];\n      while (!test(line.charAt(idx))) {\n        idx++;\n        if (idx >= line.length) { return null; }\n      }\n\n      if (bigWord) {\n        test = bigWordCharTest[0];\n      } else {\n        test = wordCharTest[0];\n        if (!test(line.charAt(idx))) {\n          test = wordCharTest[1];\n        }\n      }\n\n      var end = idx, start = idx;\n      while (test(line.charAt(end)) && end < line.length) { end++; }\n      while (test(line.charAt(start)) && start >= 0) { start--; }\n      start++;\n\n      if (inclusive) {\n        var wordEnd = end;\n        while (/\\s/.test(line.charAt(end)) && end < line.length) { end++; }\n        if (wordEnd == end) {\n          var wordStart = start;\n          while (/\\s/.test(line.charAt(start - 1)) && start > 0) { start--; }\n          if (!start) { start = wordStart; }\n        }\n      }\n      return { start: Pos(cur.line, start), end: Pos(cur.line, end) };\n    }\n\n    function recordJumpPosition(cm, oldCur, newCur) {\n      if (!cursorEqual(oldCur, newCur)) {\n        vimGlobalState.jumpList.add(cm, oldCur, newCur);\n      }\n    }\n\n    function recordLastCharacterSearch(increment, args) {\n        vimGlobalState.lastCharacterSearch.increment = increment;\n        vimGlobalState.lastCharacterSearch.forward = args.forward;\n        vimGlobalState.lastCharacterSearch.selectedCharacter = args.selectedCharacter;\n    }\n\n    var symbolToMode = {\n        '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket',\n        '[': 'section', ']': 'section',\n        '*': 'comment', '/': 'comment',\n        'm': 'method', 'M': 'method',\n        '#': 'preprocess'\n    };\n    var findSymbolModes = {\n      bracket: {\n        isComplete: function(state) {\n          if (state.nextCh === state.symb) {\n            state.depth++;\n            if (state.depth >= 1)return true;\n          } else if (state.nextCh === state.reverseSymb) {\n            state.depth--;\n          }\n          return false;\n        }\n      },\n      section: {\n        init: function(state) {\n          state.curMoveThrough = true;\n          state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}';\n        },\n        isComplete: function(state) {\n          return state.index === 0 && state.nextCh === state.symb;\n        }\n      },\n      comment: {\n        isComplete: function(state) {\n          var found = state.lastCh === '*' && state.nextCh === '/';\n          state.lastCh = state.nextCh;\n          return found;\n        }\n      },\n      method: {\n        init: function(state) {\n          state.symb = (state.symb === 'm' ? '{' : '}');\n          state.reverseSymb = state.symb === '{' ? '}' : '{';\n        },\n        isComplete: function(state) {\n          if (state.nextCh === state.symb)return true;\n          return false;\n        }\n      },\n      preprocess: {\n        init: function(state) {\n          state.index = 0;\n        },\n        isComplete: function(state) {\n          if (state.nextCh === '#') {\n            var token = state.lineText.match(/#(\\w+)/)[1];\n            if (token === 'endif') {\n              if (state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth++;\n            } else if (token === 'if') {\n              if (!state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth--;\n            }\n            if (token === 'else' && state.depth === 0)return true;\n          }\n          return false;\n        }\n      }\n    };\n    function findSymbol(cm, repeat, forward, symb) {\n      var cur = copyCursor(cm.getCursor());\n      var increment = forward ? 1 : -1;\n      var endLine = forward ? cm.lineCount() : -1;\n      var curCh = cur.ch;\n      var line = cur.line;\n      var lineText = cm.getLine(line);\n      var state = {\n        lineText: lineText,\n        nextCh: lineText.charAt(curCh),\n        lastCh: null,\n        index: curCh,\n        symb: symb,\n        reverseSymb: (forward ?  { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb],\n        forward: forward,\n        depth: 0,\n        curMoveThrough: false\n      };\n      var mode = symbolToMode[symb];\n      if (!mode)return cur;\n      var init = findSymbolModes[mode].init;\n      var isComplete = findSymbolModes[mode].isComplete;\n      if (init) { init(state); }\n      while (line !== endLine && repeat) {\n        state.index += increment;\n        state.nextCh = state.lineText.charAt(state.index);\n        if (!state.nextCh) {\n          line += increment;\n          state.lineText = cm.getLine(line) || '';\n          if (increment > 0) {\n            state.index = 0;\n          } else {\n            var lineLen = state.lineText.length;\n            state.index = (lineLen > 0) ? (lineLen-1) : 0;\n          }\n          state.nextCh = state.lineText.charAt(state.index);\n        }\n        if (isComplete(state)) {\n          cur.line = line;\n          cur.ch = state.index;\n          repeat--;\n        }\n      }\n      if (state.nextCh || state.curMoveThrough) {\n        return Pos(line, state.index);\n      }\n      return cur;\n    }\n    function findWord(cm, cur, forward, bigWord, emptyLineIsWord) {\n      var lineNum = cur.line;\n      var pos = cur.ch;\n      var line = cm.getLine(lineNum);\n      var dir = forward ? 1 : -1;\n      var charTests = bigWord ? bigWordCharTest: wordCharTest;\n\n      if (emptyLineIsWord && line == '') {\n        lineNum += dir;\n        line = cm.getLine(lineNum);\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        pos = (forward) ? 0 : line.length;\n      }\n\n      while (true) {\n        if (emptyLineIsWord && line == '') {\n          return { from: 0, to: 0, line: lineNum };\n        }\n        var stop = (dir > 0) ? line.length : -1;\n        var wordStart = stop, wordEnd = stop;\n        while (pos != stop) {\n          var foundWord = false;\n          for (var i = 0; i < charTests.length && !foundWord; ++i) {\n            if (charTests[i](line.charAt(pos))) {\n              wordStart = pos;\n              while (pos != stop && charTests[i](line.charAt(pos))) {\n                pos += dir;\n              }\n              wordEnd = pos;\n              foundWord = wordStart != wordEnd;\n              if (wordStart == cur.ch && lineNum == cur.line &&\n                  wordEnd == wordStart + dir) {\n                continue;\n              } else {\n                return {\n                  from: Math.min(wordStart, wordEnd + 1),\n                  to: Math.max(wordStart, wordEnd),\n                  line: lineNum };\n              }\n            }\n          }\n          if (!foundWord) {\n            pos += dir;\n          }\n        }\n        lineNum += dir;\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        line = cm.getLine(lineNum);\n        pos = (dir > 0) ? 0 : line.length;\n      }\n    }\n    function moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) {\n      var curStart = copyCursor(cur);\n      var words = [];\n      if (forward && !wordEnd || !forward && wordEnd) {\n        repeat++;\n      }\n      var emptyLineIsWord = !(forward && wordEnd);\n      for (var i = 0; i < repeat; i++) {\n        var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord);\n        if (!word) {\n          var eodCh = lineLength(cm, cm.lastLine());\n          words.push(forward\n              ? {line: cm.lastLine(), from: eodCh, to: eodCh}\n              : {line: 0, from: 0, to: 0});\n          break;\n        }\n        words.push(word);\n        cur = Pos(word.line, forward ? (word.to - 1) : word.from);\n      }\n      var shortCircuit = words.length != repeat;\n      var firstWord = words[0];\n      var lastWord = words.pop();\n      if (forward && !wordEnd) {\n        if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) {\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.from);\n      } else if (forward && wordEnd) {\n        return Pos(lastWord.line, lastWord.to - 1);\n      } else if (!forward && wordEnd) {\n        if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) {\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.to);\n      } else {\n        return Pos(lastWord.line, lastWord.from);\n      }\n    }\n\n    function moveToCharacter(cm, repeat, forward, character) {\n      var cur = cm.getCursor();\n      var start = cur.ch;\n      var idx;\n      for (var i = 0; i < repeat; i ++) {\n        var line = cm.getLine(cur.line);\n        idx = charIdxInLine(start, line, character, forward, true);\n        if (idx == -1) {\n          return null;\n        }\n        start = idx;\n      }\n      return Pos(cm.getCursor().line, idx);\n    }\n\n    function moveToColumn(cm, repeat) {\n      var line = cm.getCursor().line;\n      return clipCursorToContent(cm, Pos(line, repeat - 1));\n    }\n\n    function updateMark(cm, vim, markName, pos) {\n      if (!inArray(markName, validMarks)) {\n        return;\n      }\n      if (vim.marks[markName]) {\n        vim.marks[markName].clear();\n      }\n      vim.marks[markName] = cm.setBookmark(pos);\n    }\n\n    function charIdxInLine(start, line, character, forward, includeChar) {\n      var idx;\n      if (forward) {\n        idx = line.indexOf(character, start + 1);\n        if (idx != -1 && !includeChar) {\n          idx -= 1;\n        }\n      } else {\n        idx = line.lastIndexOf(character, start - 1);\n        if (idx != -1 && !includeChar) {\n          idx += 1;\n        }\n      }\n      return idx;\n    }\n\n    function findParagraph(cm, head, repeat, dir, inclusive) {\n      var line = head.line;\n      var min = cm.firstLine();\n      var max = cm.lastLine();\n      var start, end, i = line;\n      function isEmpty(i) { return !/\\S/.test(cm.getLine(i)); } // ace_patch\n      function isBoundary(i, dir, any) {\n        if (any) { return isEmpty(i) != isEmpty(i + dir); }\n        return !isEmpty(i) && isEmpty(i + dir);\n      }\n      function skipFold(i) {\n          dir = dir > 0 ? 1 : -1;\n          var foldLine = cm.ace.session.getFoldLine(i);\n          if (foldLine) {\n              if (i + dir > foldLine.start.row && i + dir < foldLine.end.row)\n                  dir = (dir > 0 ? foldLine.end.row : foldLine.start.row) - i;\n          }\n      }\n      if (dir) {\n        while (min <= i && i <= max && repeat > 0) {\n          skipFold(i);\n          if (isBoundary(i, dir)) { repeat--; }\n          i += dir;\n        }\n        return new Pos(i, 0);\n      }\n\n      var vim = cm.state.vim;\n      if (vim.visualLine && isBoundary(line, 1, true)) {\n        var anchor = vim.sel.anchor;\n        if (isBoundary(anchor.line, -1, true)) {\n          if (!inclusive || anchor.line != line) {\n            line += 1;\n          }\n        }\n      }\n      var startState = isEmpty(line);\n      for (i = line; i <= max && repeat; i++) {\n        if (isBoundary(i, 1, true)) {\n          if (!inclusive || isEmpty(i) != startState) {\n            repeat--;\n          }\n        }\n      }\n      end = new Pos(i, 0);\n      if (i > max && !startState) { startState = true; }\n      else { inclusive = false; }\n      for (i = line; i > min; i--) {\n        if (!inclusive || isEmpty(i) == startState || i == line) {\n          if (isBoundary(i, -1, true)) { break; }\n        }\n      }\n      start = new Pos(i, 0);\n      return { start: start, end: end };\n    }\n    function selectCompanionObject(cm, head, symb, inclusive) {\n      var cur = head, start, end;\n\n      var bracketRegexp = ({\n        '(': /[()]/, ')': /[()]/,\n        '[': /[[\\]]/, ']': /[[\\]]/,\n        '{': /[{}]/, '}': /[{}]/,\n        '<': /[<>]/, '>': /[<>]/})[symb];\n      var openSym = ({\n        '(': '(', ')': '(',\n        '[': '[', ']': '[',\n        '{': '{', '}': '{',\n        '<': '<', '>': '<'})[symb];\n      var curChar = cm.getLine(cur.line).charAt(cur.ch);\n      var offset = curChar === openSym ? 1 : 0;\n\n      start = cm.scanForBracket(Pos(cur.line, cur.ch + offset), -1, null, {'bracketRegex': bracketRegexp});\n      end = cm.scanForBracket(Pos(cur.line, cur.ch + offset), 1, null, {'bracketRegex': bracketRegexp});\n\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n\n      start = start.pos;\n      end = end.pos;\n\n      if ((start.line == end.line && start.ch > end.ch)\n          || (start.line > end.line)) {\n        var tmp = start;\n        start = end;\n        end = tmp;\n      }\n\n      if (inclusive) {\n        end.ch += 1;\n      } else {\n        start.ch += 1;\n      }\n\n      return { start: start, end: end };\n    }\n    function findBeginningAndEnd(cm, head, symb, inclusive) {\n      var cur = copyCursor(head);\n      var line = cm.getLine(cur.line);\n      var chars = line.split('');\n      var start, end, i, len;\n      var firstIndex = chars.indexOf(symb);\n      if (cur.ch < firstIndex) {\n        cur.ch = firstIndex;\n      }\n      else if (firstIndex < cur.ch && chars[cur.ch] == symb) {\n        end = cur.ch; // assign end to the current cursor\n        --cur.ch; // make sure to look backwards\n      }\n      if (chars[cur.ch] == symb && !end) {\n        start = cur.ch + 1; // assign start to ahead of the cursor\n      } else {\n        for (i = cur.ch; i > -1 && !start; i--) {\n          if (chars[i] == symb) {\n            start = i + 1;\n          }\n        }\n      }\n      if (start && !end) {\n        for (i = start, len = chars.length; i < len && !end; i++) {\n          if (chars[i] == symb) {\n            end = i;\n          }\n        }\n      }\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n      if (inclusive) {\n        --start; ++end;\n      }\n\n      return {\n        start: Pos(cur.line, start),\n        end: Pos(cur.line, end)\n      };\n    }\n    defineOption('pcre', true, 'boolean');\n    function SearchState() {}\n    SearchState.prototype = {\n      getQuery: function() {\n        return vimGlobalState.query;\n      },\n      setQuery: function(query) {\n        vimGlobalState.query = query;\n      },\n      getOverlay: function() {\n        return this.searchOverlay;\n      },\n      setOverlay: function(overlay) {\n        this.searchOverlay = overlay;\n      },\n      isReversed: function() {\n        return vimGlobalState.isReversed;\n      },\n      setReversed: function(reversed) {\n        vimGlobalState.isReversed = reversed;\n      },\n      getScrollbarAnnotate: function() {\n        return this.annotate;\n      },\n      setScrollbarAnnotate: function(annotate) {\n        this.annotate = annotate;\n      }\n    };\n    function getSearchState(cm) {\n      var vim = cm.state.vim;\n      return vim.searchState_ || (vim.searchState_ = new SearchState());\n    }\n    function dialog(cm, template, shortText, onClose, options) {\n      if (cm.openDialog) {\n        cm.openDialog(template, onClose, { bottom: true, value: options.value,\n            onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp,\n            selectValueOnOpen: false, onClose: function() {\n              if (cm.state.vim) {\n                cm.state.vim.status = \"\";\n                cm.ace.renderer.$loop.schedule(cm.ace.renderer.CHANGE_CURSOR);\n              }\n            }});\n      }\n      else {\n        onClose(prompt(shortText, ''));\n      }\n    }\n    \n    function splitBySlash(argString) {\n      return splitBySeparator(argString, '/');\n    }\n  \n    function findUnescapedSlashes(argString) {\n      return findUnescapedSeparators(argString, '/');\n    }\n\n    function splitBySeparator(argString, separator) {\n      var slashes = findUnescapedSeparators(argString, separator) || [];\n      if (!slashes.length) return [];\n      var tokens = [];\n      if (slashes[0] !== 0) return;\n      for (var i = 0; i < slashes.length; i++) {\n        if (typeof slashes[i] == 'number')\n          tokens.push(argString.substring(slashes[i] + 1, slashes[i+1]));\n      }\n      return tokens;\n    }\n\n    function findUnescapedSeparators(str, separator) {\n      if (!separator)\n        separator = '/';\n\n      var escapeNextChar = false;\n      var slashes = [];\n      for (var i = 0; i < str.length; i++) {\n        var c = str.charAt(i);\n        if (!escapeNextChar && c == separator) {\n          slashes.push(i);\n        }\n        escapeNextChar = !escapeNextChar && (c == '\\\\');\n      }\n      return slashes;\n    }\n    function translateRegex(str) {\n      var specials = '|(){';\n      var unescape = '}';\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        var specialComesNext = (n && specials.indexOf(n) != -1);\n        if (escapeNextChar) {\n          if (c !== '\\\\' || !specialComesNext) {\n            out.push(c);\n          }\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            if (n && unescape.indexOf(n) != -1) {\n              specialComesNext = true;\n            }\n            if (!specialComesNext || n === '\\\\') {\n              out.push(c);\n            }\n          } else {\n            out.push(c);\n            if (specialComesNext && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n    var charUnescapes = {'\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t'};\n    function translateRegexReplace(str) {\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        if (charUnescapes[c + n]) {\n          out.push(charUnescapes[c+n]);\n          i++;\n        } else if (escapeNextChar) {\n          out.push(c);\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            if ((isNumber(n) || n === '$')) {\n              out.push('$');\n            } else if (n !== '/' && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          } else {\n            if (c === '$') {\n              out.push('$');\n            }\n            out.push(c);\n            if (n === '/') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n    var unescapes = {'\\\\/': '/', '\\\\\\\\': '\\\\', '\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t'};\n    function unescapeRegexReplace(str) {\n      var stream = new CodeMirror.StringStream(str);\n      var output = [];\n      while (!stream.eol()) {\n        while (stream.peek() && stream.peek() != '\\\\') {\n          output.push(stream.next());\n        }\n        var matched = false;\n        for (var matcher in unescapes) {\n          if (stream.match(matcher, true)) {\n            matched = true;\n            output.push(unescapes[matcher]);\n            break;\n          }\n        }\n        if (!matched) {\n          output.push(stream.next());\n        }\n      }\n      return output.join('');\n    }\n    function parseQuery(query, ignoreCase, smartCase) {\n      var lastSearchRegister = vimGlobalState.registerController.getRegister('/');\n      lastSearchRegister.setText(query);\n      if (query instanceof RegExp) { return query; }\n      var slashes = findUnescapedSlashes(query);\n      var regexPart;\n      var forceIgnoreCase;\n      if (!slashes.length) {\n        regexPart = query;\n      } else {\n        regexPart = query.substring(0, slashes[0]);\n        var flagsPart = query.substring(slashes[0]);\n        forceIgnoreCase = (flagsPart.indexOf('i') != -1);\n      }\n      if (!regexPart) {\n        return null;\n      }\n      if (!getOption('pcre')) {\n        regexPart = translateRegex(regexPart);\n      }\n      if (smartCase) {\n        ignoreCase = (/^[^A-Z]*$/).test(regexPart);\n      }\n      var regexp = new RegExp(regexPart,\n          (ignoreCase || forceIgnoreCase) ? 'i' : undefined);\n      return regexp;\n    }\n    function showConfirm(cm, text) {\n      if (cm.openNotification) {\n        cm.openNotification('<span style=\"color: red\">' + text + '</span>',\n                            {bottom: true, duration: 5000});\n      } else {\n        alert(text);\n      }\n    }\n    function makePrompt(prefix, desc) {\n      var raw = '<span style=\"font-family: monospace; white-space: pre\">' +\n          (prefix || \"\") + '<input type=\"text\" autocorrect=\"off\" autocapitalize=\"none\" autocomplete=\"off\"></span>';\n      if (desc)\n        raw += ' <span style=\"color: #888\">' + desc + '</span>';\n      return raw;\n    }\n    var searchPromptDesc = '(Javascript regexp)';\n    function showPrompt(cm, options) {\n      var shortText = (options.prefix || '') + ' ' + (options.desc || '');\n      var prompt = makePrompt(options.prefix, options.desc);\n      dialog(cm, prompt, shortText, options.onClose, options);\n    }\n    function regexEqual(r1, r2) {\n      if (r1 instanceof RegExp && r2 instanceof RegExp) {\n          var props = ['global', 'multiline', 'ignoreCase', 'source'];\n          for (var i = 0; i < props.length; i++) {\n              var prop = props[i];\n              if (r1[prop] !== r2[prop]) {\n                  return false;\n              }\n          }\n          return true;\n      }\n      return false;\n    }\n    function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) {\n      if (!rawQuery) {\n        return;\n      }\n      var state = getSearchState(cm);\n      var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase);\n      if (!query) {\n        return;\n      }\n      highlightSearchMatches(cm, query);\n      if (regexEqual(query, state.getQuery())) {\n        return query;\n      }\n      state.setQuery(query);\n      return query;\n    }\n    function searchOverlay(query) {\n      if (query.source.charAt(0) == '^') {\n        var matchSol = true;\n      }\n      return {\n        token: function(stream) {\n          if (matchSol && !stream.sol()) {\n            stream.skipToEnd();\n            return;\n          }\n          var match = stream.match(query, false);\n          if (match) {\n            if (match[0].length == 0) {\n              stream.next();\n              return 'searching';\n            }\n            if (!stream.sol()) {\n              stream.backUp(1);\n              if (!query.exec(stream.next() + match[0])) {\n                stream.next();\n                return null;\n              }\n            }\n            stream.match(query);\n            return 'searching';\n          }\n          while (!stream.eol()) {\n            stream.next();\n            if (stream.match(query, false)) break;\n          }\n        },\n        query: query\n      };\n    }\n    function highlightSearchMatches(cm, query) {\n      var searchState = getSearchState(cm);\n      var overlay = searchState.getOverlay();\n      if (!overlay || query != overlay.query) {\n        if (overlay) {\n          cm.removeOverlay(overlay);\n        }\n        overlay = searchOverlay(query);\n        cm.addOverlay(overlay);\n        if (cm.showMatchesOnScrollbar) {\n          if (searchState.getScrollbarAnnotate()) {\n            searchState.getScrollbarAnnotate().clear();\n          }\n          searchState.setScrollbarAnnotate(cm.showMatchesOnScrollbar(query));\n        }\n        searchState.setOverlay(overlay);\n      }\n    }\n    function findNext(cm, prev, query, repeat) {\n      if (repeat === undefined) { repeat = 1; }\n      return cm.operation(function() {\n        var pos = cm.getCursor();\n        var cursor = cm.getSearchCursor(query, pos);\n        for (var i = 0; i < repeat; i++) {\n          var found = cursor.find(prev);\n          if (i == 0 && found && cursorEqual(cursor.from(), pos)) { found = cursor.find(prev); }\n          if (!found) {\n            cursor = cm.getSearchCursor(query,\n                (prev) ? Pos(cm.lastLine()) : Pos(cm.firstLine(), 0) );\n            if (!cursor.find(prev)) {\n              return;\n            }\n          }\n        }\n        return cursor.from();\n      });\n    }\n    function clearSearchHighlight(cm) {\n      var state = getSearchState(cm);\n      cm.removeOverlay(getSearchState(cm).getOverlay());\n      state.setOverlay(null);\n      if (state.getScrollbarAnnotate()) {\n        state.getScrollbarAnnotate().clear();\n        state.setScrollbarAnnotate(null);\n      }\n    }\n    function isInRange(pos, start, end) {\n      if (typeof pos != 'number') {\n        pos = pos.line;\n      }\n      if (start instanceof Array) {\n        return inArray(pos, start);\n      } else {\n        if (end) {\n          return (pos >= start && pos <= end);\n        } else {\n          return pos == start;\n        }\n      }\n    }\n    function getUserVisibleLines(cm) {\n      var renderer = cm.ace.renderer;\n      return {\n        top: renderer.getFirstFullyVisibleRow(),\n        bottom: renderer.getLastFullyVisibleRow()\n      }\n    }\n\n    function getMarkPos(cm, vim, markName) {\n\n      var mark = vim.marks[markName];\n      return mark && mark.find();\n    }\n\n    var ExCommandDispatcher = function() {\n      this.buildCommandMap_();\n    };\n    ExCommandDispatcher.prototype = {\n      processCommand: function(cm, input, opt_params) {\n        var that = this;\n        cm.operation(function () {\n          cm.curOp.isVimOp = true;\n          that._processCommand(cm, input, opt_params);\n        });\n      },\n      _processCommand: function(cm, input, opt_params) {\n        var vim = cm.state.vim;\n        var commandHistoryRegister = vimGlobalState.registerController.getRegister(':');\n        var previousCommand = commandHistoryRegister.toString();\n        if (vim.visualMode) {\n          exitVisualMode(cm);\n        }\n        var inputStream = new CodeMirror.StringStream(input);\n        commandHistoryRegister.setText(input);\n        var params = opt_params || {};\n        params.input = input;\n        try {\n          this.parseInput_(cm, inputStream, params);\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n        var command;\n        var commandName;\n        if (!params.commandName) {\n          if (params.line !== undefined) {\n            commandName = 'move';\n          }\n        } else {\n          command = this.matchCommand_(params.commandName);\n          if (command) {\n            commandName = command.name;\n            if (command.excludeFromCommandHistory) {\n              commandHistoryRegister.setText(previousCommand);\n            }\n            this.parseCommandArgs_(inputStream, params, command);\n            if (command.type == 'exToKey') {\n              for (var i = 0; i < command.toKeys.length; i++) {\n                CodeMirror.Vim.handleKey(cm, command.toKeys[i], 'mapping');\n              }\n              return;\n            } else if (command.type == 'exToEx') {\n              this.processCommand(cm, command.toInput);\n              return;\n            }\n          }\n        }\n        if (!commandName) {\n          showConfirm(cm, 'Not an editor command \":' + input + '\"');\n          return;\n        }\n        try {\n          exCommands[commandName](cm, params);\n          if ((!command || !command.possiblyAsync) && params.callback) {\n            params.callback();\n          }\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n      },\n      parseInput_: function(cm, inputStream, result) {\n        inputStream.eatWhile(':');\n        if (inputStream.eat('%')) {\n          result.line = cm.firstLine();\n          result.lineEnd = cm.lastLine();\n        } else {\n          result.line = this.parseLineSpec_(cm, inputStream);\n          if (result.line !== undefined && inputStream.eat(',')) {\n            result.lineEnd = this.parseLineSpec_(cm, inputStream);\n          }\n        }\n        var commandMatch = inputStream.match(/^(\\w+)/);\n        if (commandMatch) {\n          result.commandName = commandMatch[1];\n        } else {\n          result.commandName = inputStream.match(/.*/)[0];\n        }\n\n        return result;\n      },\n      parseLineSpec_: function(cm, inputStream) {\n        var numberMatch = inputStream.match(/^(\\d+)/);\n        if (numberMatch) {\n          return parseInt(numberMatch[1], 10) - 1;\n        }\n        switch (inputStream.next()) {\n          case '.':\n            return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);\n          case '$':\n            return this.parseLineSpecOffset_(inputStream, cm.lastLine());\n          case '\\'':\n            var markName = inputStream.next();\n            var markPos = getMarkPos(cm, cm.state.vim, markName);\n            if (!markPos) throw new Error('Mark not set');\n            return this.parseLineSpecOffset_(inputStream, markPos.line);\n          case '-':\n          case '+':\n            inputStream.backUp(1);\n            return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);\n          default:\n            inputStream.backUp(1);\n            return undefined;\n        }\n      },\n      parseLineSpecOffset_: function(inputStream, line) {\n        var offsetMatch = inputStream.match(/^([+-])?(\\d+)/);\n        if (offsetMatch) {\n          var offset = parseInt(offsetMatch[2], 10);\n          if (offsetMatch[1] == \"-\") {\n            line -= offset;\n          } else {\n            line += offset;\n          }\n        }\n        return line;\n      },\n      parseCommandArgs_: function(inputStream, params, command) {\n        if (inputStream.eol()) {\n          return;\n        }\n        params.argString = inputStream.match(/.*/)[0];\n        var delim = command.argDelimiter || /\\s+/;\n        var args = trim(params.argString).split(delim);\n        if (args.length && args[0]) {\n          params.args = args;\n        }\n      },\n      matchCommand_: function(commandName) {\n        for (var i = commandName.length; i > 0; i--) {\n          var prefix = commandName.substring(0, i);\n          if (this.commandMap_[prefix]) {\n            var command = this.commandMap_[prefix];\n            if (command.name.indexOf(commandName) === 0) {\n              return command;\n            }\n          }\n        }\n        return null;\n      },\n      buildCommandMap_: function() {\n        this.commandMap_ = {};\n        for (var i = 0; i < defaultExCommandMap.length; i++) {\n          var command = defaultExCommandMap[i];\n          var key = command.shortName || command.name;\n          this.commandMap_[key] = command;\n        }\n      },\n      map: function(lhs, rhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToEx',\n              toInput: rhs.substring(1),\n              user: true\n            };\n          } else {\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToKey',\n              toKeys: rhs,\n              user: true\n            };\n          }\n        } else {\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            var mapping = {\n              keys: lhs,\n              type: 'keyToEx',\n              exArgs: { input: rhs.substring(1) }\n            };\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          } else {\n            var mapping = {\n              keys: lhs,\n              type: 'keyToKey',\n              toKeys: rhs\n            };\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          }\n        }\n      },\n      unmap: function(lhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (this.commandMap_[commandName] && this.commandMap_[commandName].user) {\n            delete this.commandMap_[commandName];\n            return;\n          }\n        } else {\n          var keys = lhs;\n          for (var i = 0; i < defaultKeymap.length; i++) {\n            if (keys == defaultKeymap[i].keys\n                && defaultKeymap[i].context === ctx) {\n              defaultKeymap.splice(i, 1);\n              return;\n            }\n          }\n        }\n      }\n    };\n\n    var exCommands = {\n      colorscheme: function(cm, params) {\n        if (!params.args || params.args.length < 1) {\n          showConfirm(cm, cm.getOption('theme'));\n          return;\n        }\n        cm.setOption('theme', params.args[0]);\n      },\n      map: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 2) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx);\n      },\n      imap: function(cm, params) { this.map(cm, params, 'insert'); },\n      nmap: function(cm, params) { this.map(cm, params, 'normal'); },\n      vmap: function(cm, params) { this.map(cm, params, 'visual'); },\n      unmap: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'No such mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.unmap(mapArgs[0], ctx);\n      },\n      move: function(cm, params) {\n        commandDispatcher.processCommand(cm, cm.state.vim, {\n            type: 'motion',\n            motion: 'moveToLineOrEdgeOfDocument',\n            motionArgs: { forward: false, explicitRepeat: true,\n              linewise: true },\n            repeatOverride: params.line+1});\n      },\n      set: function(cm, params) {\n        var setArgs = params.args;\n        var setCfg = params.setCfg || {};\n        if (!setArgs || setArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        var expr = setArgs[0].split('=');\n        var optionName = expr[0];\n        var value = expr[1];\n        var forceGet = false;\n\n        if (optionName.charAt(optionName.length - 1) == '?') {\n          if (value) { throw Error('Trailing characters: ' + params.argString); }\n          optionName = optionName.substring(0, optionName.length - 1);\n          forceGet = true;\n        }\n        if (value === undefined && optionName.substring(0, 2) == 'no') {\n          optionName = optionName.substring(2);\n          value = false;\n        }\n\n        var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean';\n        if (optionIsBoolean && value == undefined) {\n          value = true;\n        }\n        if (!optionIsBoolean && value === undefined || forceGet) {\n          var oldValue = getOption(optionName, cm, setCfg);\n          if (oldValue instanceof Error) {\n            showConfirm(cm, oldValue.message);\n          } else if (oldValue === true || oldValue === false) {\n            showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);\n          } else {\n            showConfirm(cm, '  ' + optionName + '=' + oldValue);\n          }\n        } else {\n          var setOptionReturn = setOption(optionName, value, cm, setCfg);\n          if (setOptionReturn instanceof Error) {\n            showConfirm(cm, setOptionReturn.message);\n          }\n        }\n      },\n      setlocal: function (cm, params) {\n        params.setCfg = {scope: 'local'};\n        this.set(cm, params);\n      },\n      setglobal: function (cm, params) {\n        params.setCfg = {scope: 'global'};\n        this.set(cm, params);\n      },\n      registers: function(cm, params) {\n        var regArgs = params.args;\n        var registers = vimGlobalState.registerController.registers;\n        var regInfo = '----------Registers----------<br><br>';\n        if (!regArgs) {\n          for (var registerName in registers) {\n            var text = registers[registerName].toString();\n            if (text.length) {\n              regInfo += '\"' + registerName + '    ' + text + '<br>';\n            }\n          }\n        } else {\n          var registerName;\n          regArgs = regArgs.join('');\n          for (var i = 0; i < regArgs.length; i++) {\n            registerName = regArgs.charAt(i);\n            if (!vimGlobalState.registerController.isValidRegister(registerName)) {\n              continue;\n            }\n            var register = registers[registerName] || new Register();\n            regInfo += '\"' + registerName + '    ' + register.toString() + '<br>';\n          }\n        }\n        showConfirm(cm, regInfo);\n      },\n      sort: function(cm, params) {\n        var reverse, ignoreCase, unique, number, pattern;\n        function parseArgs() {\n          if (params.argString) {\n            var args = new CodeMirror.StringStream(params.argString);\n            if (args.eat('!')) { reverse = true; }\n            if (args.eol()) { return; }\n            if (!args.eatSpace()) { return 'Invalid arguments'; }\n            var opts = args.match(/([dinuox]+)?\\s*(\\/.+\\/)?\\s*/);\n            if (!opts && !args.eol()) { return 'Invalid arguments'; }\n            if (opts[1]) {\n              ignoreCase = opts[1].indexOf('i') != -1;\n              unique = opts[1].indexOf('u') != -1;\n              var decimal = opts[1].indexOf('d') != -1 || opts[1].indexOf('n') != -1 && 1;\n              var hex = opts[1].indexOf('x') != -1 && 1;\n              var octal = opts[1].indexOf('o') != -1 && 1;\n              if (decimal + hex + octal > 1) { return 'Invalid arguments'; }\n              number = decimal && 'decimal' || hex && 'hex' || octal && 'octal';\n            }\n            if (opts[2]) {\n              pattern = new RegExp(opts[2].substr(1, opts[2].length - 2), ignoreCase ? 'i' : '');\n            }\n          }\n        }\n        var err = parseArgs();\n        if (err) {\n          showConfirm(cm, err + ': ' + params.argString);\n          return;\n        }\n        var lineStart = params.line || cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        if (lineStart == lineEnd) { return; }\n        var curStart = Pos(lineStart, 0);\n        var curEnd = Pos(lineEnd, lineLength(cm, lineEnd));\n        var text = cm.getRange(curStart, curEnd).split('\\n');\n        var numberRegex = pattern ? pattern :\n           (number == 'decimal') ? /(-?)([\\d]+)/ :\n           (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i :\n           (number == 'octal') ? /([0-7]+)/ : null;\n        var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null;\n        var numPart = [], textPart = [];\n        if (number || pattern) {\n          for (var i = 0; i < text.length; i++) {\n            var matchPart = pattern ? text[i].match(pattern) : null;\n            if (matchPart && matchPart[0] != '') {\n              numPart.push(matchPart);\n            } else if (!pattern && numberRegex.exec(text[i])) {\n              numPart.push(text[i]);\n            } else {\n              textPart.push(text[i]);\n            }\n          }\n        } else {\n          textPart = text;\n        }\n        function compareFn(a, b) {\n          if (reverse) { var tmp; tmp = a; a = b; b = tmp; }\n          if (ignoreCase) { a = a.toLowerCase(); b = b.toLowerCase(); }\n          var anum = number && numberRegex.exec(a);\n          var bnum = number && numberRegex.exec(b);\n          if (!anum) { return a < b ? -1 : 1; }\n          anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix);\n          bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix);\n          return anum - bnum;\n        }\n        function comparePatternFn(a, b) {\n          if (reverse) { var tmp; tmp = a; a = b; b = tmp; }\n          if (ignoreCase) { a[0] = a[0].toLowerCase(); b[0] = b[0].toLowerCase(); }\n          return (a[0] < b[0]) ? -1 : 1;\n        }\n        numPart.sort(pattern ? comparePatternFn : compareFn);\n        if (pattern) {\n          for (var i = 0; i < numPart.length; i++) {\n            numPart[i] = numPart[i].input;\n          }\n        } else if (!number) { textPart.sort(compareFn); }\n        text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart);\n        if (unique) { // Remove duplicate lines\n          var textOld = text;\n          var lastLine;\n          text = [];\n          for (var i = 0; i < textOld.length; i++) {\n            if (textOld[i] != lastLine) {\n              text.push(textOld[i]);\n            }\n            lastLine = textOld[i];\n          }\n        }\n        cm.replaceRange(text.join('\\n'), curStart, curEnd);\n      },\n      global: function(cm, params) {\n        var argString = params.argString;\n        if (!argString) {\n          showConfirm(cm, 'Regular Expression missing from global');\n          return;\n        }\n        var lineStart = (params.line !== undefined) ? params.line : cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        var tokens = splitBySlash(argString);\n        var regexPart = argString, cmd;\n        if (tokens.length) {\n          regexPart = tokens[0];\n          cmd = tokens.slice(1, tokens.length).join('/');\n        }\n        if (regexPart) {\n          try {\n           updateSearchQuery(cm, regexPart, true /** ignoreCase */,\n             true /** smartCase */);\n          } catch (e) {\n           showConfirm(cm, 'Invalid regex: ' + regexPart);\n           return;\n          }\n        }\n        var query = getSearchState(cm).getQuery();\n        var matchedLines = [], content = '';\n        for (var i = lineStart; i <= lineEnd; i++) {\n          var matched = query.test(cm.getLine(i));\n          if (matched) {\n            matchedLines.push(i+1);\n            content+= cm.getLine(i) + '<br>';\n          }\n        }\n        if (!cmd) {\n          showConfirm(cm, content);\n          return;\n        }\n        var index = 0;\n        var nextCommand = function() {\n          if (index < matchedLines.length) {\n            var command = matchedLines[index] + cmd;\n            exCommandDispatcher.processCommand(cm, command, {\n              callback: nextCommand\n            });\n          }\n          index++;\n        };\n        nextCommand();\n      },\n      substitute: function(cm, params) {\n        if (!cm.getSearchCursor) {\n          throw new Error('Search feature not available. Requires searchcursor.js or ' +\n              'any other getSearchCursor implementation.');\n        }\n        var argString = params.argString;\n        var tokens = argString ? splitBySeparator(argString, argString[0]) : [];\n        var regexPart, replacePart = '', trailing, flagsPart, count;\n        var confirm = false; // Whether to confirm each replace.\n        var global = false; // True to replace all instances on a line, false to replace only 1.\n        if (tokens.length) {\n          regexPart = tokens[0];\n          replacePart = tokens[1];\n          if (regexPart && regexPart[regexPart.length - 1] === '$') {\n            regexPart = regexPart.slice(0, regexPart.length - 1) + '\\\\n';\n            replacePart = replacePart ? replacePart + '\\n' : '\\n';\n          }\n          if (replacePart !== undefined) {\n            if (getOption('pcre')) {\n              replacePart = unescapeRegexReplace(replacePart);\n            } else {\n              replacePart = translateRegexReplace(replacePart);\n            }\n            vimGlobalState.lastSubstituteReplacePart = replacePart;\n          }\n          trailing = tokens[2] ? tokens[2].split(' ') : [];\n        } else {\n          if (argString && argString.length) {\n            showConfirm(cm, 'Substitutions should be of the form ' +\n                ':s/pattern/replace/');\n            return;\n          }\n        }\n        if (trailing) {\n          flagsPart = trailing[0];\n          count = parseInt(trailing[1]);\n          if (flagsPart) {\n            if (flagsPart.indexOf('c') != -1) {\n              confirm = true;\n              flagsPart.replace('c', '');\n            }\n            if (flagsPart.indexOf('g') != -1) {\n              global = true;\n              flagsPart.replace('g', '');\n            }\n            regexPart = regexPart.replace(/\\//g, \"\\\\/\") + '/' + flagsPart;\n          }\n        }\n        if (regexPart) {\n          try {\n            updateSearchQuery(cm, regexPart, true /** ignoreCase */,\n              true /** smartCase */);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + regexPart);\n            return;\n          }\n        }\n        replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart;\n        if (replacePart === undefined) {\n          showConfirm(cm, 'No previous substitute regular expression');\n          return;\n        }\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line;\n        var lineEnd = params.lineEnd || lineStart;\n        if (lineStart == cm.firstLine() && lineEnd == cm.lastLine()) {\n          lineEnd = Infinity;\n        }\n        if (count) {\n          lineStart = lineEnd;\n          lineEnd = lineStart + count - 1;\n        }\n        var startPos = clipCursorToContent(cm, Pos(lineStart, 0));\n        var cursor = cm.getSearchCursor(query, startPos);\n        doReplace(cm, confirm, global, lineStart, lineEnd, cursor, query, replacePart, params.callback);\n      },\n      redo: CodeMirror.commands.redo,\n      undo: CodeMirror.commands.undo,\n      write: function(cm) {\n        if (CodeMirror.commands.save) {\n          CodeMirror.commands.save(cm);\n        } else if (cm.save) {\n          cm.save();\n        }\n      },\n      nohlsearch: function(cm) {\n        clearSearchHighlight(cm);\n      },\n      yank: function (cm) {\n        var cur = copyCursor(cm.getCursor());\n        var line = cur.line;\n        var lineText = cm.getLine(line);\n        vimGlobalState.registerController.pushText(\n          '0', 'yank', lineText, true, true);\n      },\n      delmarks: function(cm, params) {\n        if (!params.argString || !trim(params.argString)) {\n          showConfirm(cm, 'Argument required');\n          return;\n        }\n\n        var state = cm.state.vim;\n        var stream = new CodeMirror.StringStream(trim(params.argString));\n        while (!stream.eol()) {\n          stream.eatSpace();\n          var count = stream.pos;\n\n          if (!stream.match(/[a-zA-Z]/, false)) {\n            showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n            return;\n          }\n\n          var sym = stream.next();\n          if (stream.match('-', true)) {\n            if (!stream.match(/[a-zA-Z]/, false)) {\n              showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n              return;\n            }\n\n            var startMark = sym;\n            var finishMark = stream.next();\n            if (isLowerCase(startMark) && isLowerCase(finishMark) ||\n                isUpperCase(startMark) && isUpperCase(finishMark)) {\n              var start = startMark.charCodeAt(0);\n              var finish = finishMark.charCodeAt(0);\n              if (start >= finish) {\n                showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n                return;\n              }\n              for (var j = 0; j <= finish - start; j++) {\n                var mark = String.fromCharCode(start + j);\n                delete state.marks[mark];\n              }\n            } else {\n              showConfirm(cm, 'Invalid argument: ' + startMark + '-');\n              return;\n            }\n          } else {\n            delete state.marks[sym];\n          }\n        }\n      }\n    };\n\n    var exCommandDispatcher = new ExCommandDispatcher();\n    function doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query,\n        replaceWith, callback) {\n      cm.state.vim.exMode = true;\n      var done = false;\n      var lastPos = searchCursor.from();\n      function replaceAll() {\n        cm.operation(function() {\n          while (!done) {\n            replace();\n            next();\n          }\n          stop();\n        });\n      }\n      function replace() {\n        var text = cm.getRange(searchCursor.from(), searchCursor.to());\n        var newText = text.replace(query, replaceWith);\n        searchCursor.replace(newText);\n      }\n      function next() {\n        while(searchCursor.findNext() &&\n              isInRange(searchCursor.from(), lineStart, lineEnd)) {\n          if (!global && lastPos && searchCursor.from().line == lastPos.line) {\n            continue;\n          }\n          cm.scrollIntoView(searchCursor.from(), 30);\n          cm.setSelection(searchCursor.from(), searchCursor.to());\n          lastPos = searchCursor.from();\n          done = false;\n          return;\n        }\n        done = true;\n      }\n      function stop(close) {\n        if (close) { close(); }\n        cm.focus();\n        if (lastPos) {\n          cm.setCursor(lastPos);\n          var vim = cm.state.vim;\n          vim.exMode = false;\n          vim.lastHPos = vim.lastHSPos = lastPos.ch;\n        }\n        if (callback) { callback(); }\n      }\n      function onPromptKeyDown(e, _value, close) {\n        CodeMirror.e_stop(e);\n        var keyName = CodeMirror.keyName(e);\n        switch (keyName) {\n          case 'Y':\n            replace(); next(); break;\n          case 'N':\n            next(); break;\n          case 'A':\n            var savedCallback = callback;\n            callback = undefined;\n            cm.operation(replaceAll);\n            callback = savedCallback;\n            break;\n          case 'L':\n            replace();\n          case 'Q':\n          case 'Esc':\n          case 'Ctrl-C':\n          case 'Ctrl-[':\n            stop(close);\n            break;\n        }\n        if (done) { stop(close); }\n        return true;\n      }\n      next();\n      if (done) {\n        showConfirm(cm, 'No matches for ' + query.source);\n        return;\n      }\n      if (!confirm) {\n        replaceAll();\n        if (callback) { callback(); }\n        return;\n      }\n      showPrompt(cm, {\n        prefix: 'replace with <strong>' + replaceWith + '</strong> (y/n/a/q/l)',\n        onKeyDown: onPromptKeyDown\n      });\n    }\n\n    CodeMirror.keyMap.vim = {\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    function exitInsertMode(cm) {\n      var vim = cm.state.vim;\n      var macroModeState = vimGlobalState.macroModeState;\n      var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.');\n      var isPlaying = macroModeState.isPlaying;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      if (!isPlaying) {\n        cm.off('change', onChange);\n        CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n      }\n      if (!isPlaying && vim.insertModeRepeat > 1) {\n        repeatLastEdit(cm, vim, vim.insertModeRepeat - 1,\n            true /** repeatForInsert */);\n        vim.lastEditInputState.repeatOverride = vim.insertModeRepeat;\n      }\n      delete vim.insertModeRepeat;\n      vim.insertMode = false;\n      cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1);\n      cm.setOption('keyMap', 'vim');\n      cm.setOption('disableInput', true);\n      cm.toggleOverwrite(false); // exit replace mode if we were in it.\n      insertModeChangeRegister.setText(lastChange.changes.join(''));\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      if (macroModeState.isRecording) {\n        logInsertModeChange(macroModeState);\n      }\n    }\n\n    function _mapCommand(command) {\n      defaultKeymap.unshift(command);\n    }\n\n    function mapCommand(keys, type, name, args, extra) {\n      var command = {keys: keys, type: type};\n      command[type] = name;\n      command[type + \"Args\"] = args;\n      for (var key in extra)\n        command[key] = extra[key];\n      _mapCommand(command);\n    }\n    defineOption('insertModeEscKeysTimeout', 200, 'number');\n\n    CodeMirror.keyMap['vim-insert'] = {\n      'Ctrl-N': 'autocomplete',\n      'Ctrl-P': 'autocomplete',\n      'Enter': function(cm) {\n        var fn = CodeMirror.commands.newlineAndIndentContinueComment ||\n            CodeMirror.commands.newlineAndIndent;\n        fn(cm);\n      },\n      fallthrough: ['default'],\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    CodeMirror.keyMap['vim-replace'] = {\n      'Backspace': 'goCharLeft',\n      fallthrough: ['vim-insert'],\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    function executeMacroRegister(cm, vim, macroModeState, registerName) {\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (registerName == ':') {\n        if (register.keyBuffer[0]) {\n          exCommandDispatcher.processCommand(cm, register.keyBuffer[0]);\n        }\n        macroModeState.isPlaying = false;\n        return;\n      }\n      var keyBuffer = register.keyBuffer;\n      var imc = 0;\n      macroModeState.isPlaying = true;\n      macroModeState.replaySearchQueries = register.searchQueries.slice(0);\n      for (var i = 0; i < keyBuffer.length; i++) {\n        var text = keyBuffer[i];\n        var match, key;\n        while (text) {\n          match = (/<\\w+-.+?>|<\\w+>|./).exec(text);\n          key = match[0];\n          text = text.substring(match.index + key.length);\n          CodeMirror.Vim.handleKey(cm, key, 'macro');\n          if (vim.insertMode) {\n            var changes = register.insertModeChanges[imc++].changes;\n            vimGlobalState.macroModeState.lastInsertModeChanges.changes =\n                changes;\n            repeatInsertModeChanges(cm, changes, 1);\n            exitInsertMode(cm);\n          }\n        }\n      }\n      macroModeState.isPlaying = false;\n    }\n\n    function logKey(macroModeState, key) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register) {\n        register.pushText(key);\n      }\n    }\n\n    function logInsertModeChange(macroModeState) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register && register.pushInsertModeChanges) {\n        register.pushInsertModeChanges(macroModeState.lastInsertModeChanges);\n      }\n    }\n\n    function logSearchQuery(macroModeState, query) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register && register.pushSearchQuery) {\n        register.pushSearchQuery(query);\n      }\n    }\n    function onChange(cm, changeObj) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      if (!macroModeState.isPlaying) {\n        while(changeObj) {\n          lastChange.expectCursorActivityForChange = true;\n          if (lastChange.ignoreCount > 1) {\n            lastChange.ignoreCount--;\n          } else if (changeObj.origin == '+input' || changeObj.origin == 'paste'\n              || changeObj.origin === undefined /* only in testing */) {\n            var selectionCount = cm.listSelections().length;\n            if (selectionCount > 1)\n              lastChange.ignoreCount = selectionCount;\n            var text = changeObj.text.join('\\n');\n            if (lastChange.maybeReset) {\n              lastChange.changes = [];\n              lastChange.maybeReset = false;\n            }\n            if (cm.state.overwrite && !/\\n/.test(text)) {\n                lastChange.changes.push([text]);\n            } else {\n                lastChange.changes.push(text);\n            }\n          }\n          changeObj = changeObj.next;\n        }\n      }\n    }\n    function onCursorActivity(cm) {\n      var vim = cm.state.vim;\n      if (vim.insertMode) {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        var lastChange = macroModeState.lastInsertModeChanges;\n        if (lastChange.expectCursorActivityForChange) {\n          lastChange.expectCursorActivityForChange = false;\n        } else {\n          lastChange.maybeReset = true;\n        }\n      } else if (!cm.curOp.isVimOp) {\n        handleExternalSelection(cm, vim);\n      }\n      if (vim.visualMode) {\n        updateFakeCursor(cm);\n      }\n    }\n    function updateFakeCursor(cm) {\n      var vim = cm.state.vim;\n      var from = clipCursorToContent(cm, copyCursor(vim.sel.head));\n      var to = offsetCursor(from, 0, 1);\n      if (vim.fakeCursor) {\n        vim.fakeCursor.clear();\n      }\n      vim.fakeCursor = cm.markText(from, to, {className: 'cm-animate-fat-cursor'});\n    }\n    function handleExternalSelection(cm, vim) {\n      var anchor = cm.getCursor('anchor');\n      var head = cm.getCursor('head');\n      if (vim.visualMode && !cm.somethingSelected()) {\n        exitVisualMode(cm, false);\n      } else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) {\n        vim.visualMode = true;\n        vim.visualLine = false;\n        CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\"});\n      }\n      if (vim.visualMode) {\n        var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n        var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n        head = offsetCursor(head, 0, headOffset);\n        anchor = offsetCursor(anchor, 0, anchorOffset);\n        vim.sel = {\n          anchor: anchor,\n          head: head\n        };\n        updateMark(cm, vim, '<', cursorMin(head, anchor));\n        updateMark(cm, vim, '>', cursorMax(head, anchor));\n      } else if (!vim.insertMode) {\n        vim.lastHPos = cm.getCursor().ch;\n      }\n    }\n    function InsertModeKey(keyName) {\n      this.keyName = keyName;\n    }\n    function onKeyEventTargetKeyDown(e) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      var keyName = CodeMirror.keyName(e);\n      if (!keyName) { return; }\n      function onKeyFound() {\n        if (lastChange.maybeReset) {\n          lastChange.changes = [];\n          lastChange.maybeReset = false;\n        }\n        lastChange.changes.push(new InsertModeKey(keyName));\n        return true;\n      }\n      if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) {\n        CodeMirror.lookupKey(keyName, 'vim-insert', onKeyFound);\n      }\n    }\n    function repeatLastEdit(cm, vim, repeat, repeatForInsert) {\n      var macroModeState = vimGlobalState.macroModeState;\n      macroModeState.isPlaying = true;\n      var isAction = !!vim.lastEditActionCommand;\n      var cachedInputState = vim.inputState;\n      function repeatCommand() {\n        if (isAction) {\n          commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand);\n        } else {\n          commandDispatcher.evalInput(cm, vim);\n        }\n      }\n      function repeatInsert(repeat) {\n        if (macroModeState.lastInsertModeChanges.changes.length > 0) {\n          repeat = !vim.lastEditActionCommand ? 1 : repeat;\n          var changeObject = macroModeState.lastInsertModeChanges;\n          repeatInsertModeChanges(cm, changeObject.changes, repeat);\n        }\n      }\n      vim.inputState = vim.lastEditInputState;\n      if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) {\n        for (var i = 0; i < repeat; i++) {\n          repeatCommand();\n          repeatInsert(1);\n        }\n      } else {\n        if (!repeatForInsert) {\n          repeatCommand();\n        }\n        repeatInsert(repeat);\n      }\n      vim.inputState = cachedInputState;\n      if (vim.insertMode && !repeatForInsert) {\n        exitInsertMode(cm);\n      }\n      macroModeState.isPlaying = false;\n    }\n\n    function repeatInsertModeChanges(cm, changes, repeat) {\n      function keyHandler(binding) {\n        if (typeof binding == 'string') {\n          CodeMirror.commands[binding](cm);\n        } else {\n          binding(cm);\n        }\n        return true;\n      }\n      var head = cm.getCursor('head');\n      var inVisualBlock = vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock;\n      if (inVisualBlock) {\n        var vim = cm.state.vim;\n        var lastSel = vim.lastSelection;\n        var offset = getOffset(lastSel.anchor, lastSel.head);\n        selectForInsert(cm, head, offset.line + 1);\n        repeat = cm.listSelections().length;\n        cm.setCursor(head);\n      }\n      for (var i = 0; i < repeat; i++) {\n        if (inVisualBlock) {\n          cm.setCursor(offsetCursor(head, i, 0));\n        }\n        for (var j = 0; j < changes.length; j++) {\n          var change = changes[j];\n          if (change instanceof InsertModeKey) {\n            CodeMirror.lookupKey(change.keyName, 'vim-insert', keyHandler);\n          } else if (typeof change == \"string\") {\n            var cur = cm.getCursor();\n            cm.replaceRange(change, cur, cur);\n          } else {\n            var start = cm.getCursor();\n            var end = offsetCursor(start, 0, change[0].length);\n            cm.replaceRange(change[0], start, end);\n          }\n        }\n      }\n      if (inVisualBlock) {\n        cm.setCursor(offsetCursor(head, 0, 1));\n      }\n    }\n\n    resetVimGlobalState();\n  CodeMirror.Vim = Vim();\n\n  Vim = CodeMirror.Vim;\n\n  var specialKey = {'return':'CR',backspace:'BS','delete':'Del',esc:'Esc',\n    left:'Left',right:'Right',up:'Up',down:'Down',space: 'Space',\n    home:'Home',end:'End',pageup:'PageUp',pagedown:'PageDown', enter: 'CR'\n  };\n  function lookupKey(hashId, key, e) {\n    if (key.length > 1 && key[0] == \"n\") {\n      key = key.replace(\"numpad\", \"\");\n    }\n    key = specialKey[key] || key;\n    var name = '';\n    if (e.ctrlKey) { name += 'C-'; }\n    if (e.altKey) { name += 'A-'; }\n    if ((name || key.length > 1) && e.shiftKey) { name += 'S-'; }\n\n    name += key;\n    if (name.length > 1) { name = '<' + name + '>'; }\n    return name;\n  }\n  var handleKey = Vim.handleKey.bind(Vim);\n  Vim.handleKey = function(cm, key, origin) {\n    return cm.operation(function() {\n      return handleKey(cm, key, origin);\n    }, true);\n  }\n  function cloneVimState(state) {\n    var n = new state.constructor();\n    Object.keys(state).forEach(function(key) {\n      var o = state[key];\n      if (Array.isArray(o))\n        o = o.slice();\n      else if (o && typeof o == \"object\" && o.constructor != Object)\n        o = cloneVimState(o);\n      n[key] = o;\n    });\n    if (state.sel) {\n      n.sel = {\n        head: state.sel.head && copyCursor(state.sel.head),\n        anchor: state.sel.anchor && copyCursor(state.sel.anchor)\n      };\n    }\n    return n;\n  }\n  function multiSelectHandleKey(cm, key, origin) {\n    var isHandled = false;\n    var vim = Vim.maybeInitVimState_(cm);\n    var visualBlock = vim.visualBlock || vim.wasInVisualBlock;\n    if (vim.wasInVisualBlock && !cm.ace.inMultiSelectMode) {\n      vim.wasInVisualBlock = false;\n    } else if (cm.ace.inMultiSelectMode && vim.visualBlock) {\n       vim.wasInVisualBlock = true;\n    }\n    \n    if (key == '<Esc>' && !vim.insertMode && !vim.visualMode && cm.ace.inMultiSelectMode) {\n      cm.ace.exitMultiSelectMode();\n    } else if (visualBlock || !cm.ace.inMultiSelectMode || cm.ace.inVirtualSelectionMode) {\n      isHandled = Vim.handleKey(cm, key, origin);\n    } else {\n      var old = cloneVimState(vim);\n      cm.operation(function() {\n        cm.ace.forEachSelection(function() {\n          var sel = cm.ace.selection;\n          cm.state.vim.lastHPos = sel.$desiredColumn == null ? sel.lead.column : sel.$desiredColumn;\n          var head = cm.getCursor(\"head\");\n          var anchor = cm.getCursor(\"anchor\");\n          var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n          var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n          head = offsetCursor(head, 0, headOffset);\n          anchor = offsetCursor(anchor, 0, anchorOffset);\n          cm.state.vim.sel.head = head;\n          cm.state.vim.sel.anchor = anchor;\n          \n          isHandled = handleKey(cm, key, origin);\n          sel.$desiredColumn = cm.state.vim.lastHPos == -1 ? null : cm.state.vim.lastHPos;\n          if (cm.virtualSelectionMode()) {\n            cm.state.vim = cloneVimState(old);\n          }\n        });\n        if (cm.curOp.cursorActivity && !isHandled)\n          cm.curOp.cursorActivity = false;\n      }, true);\n    }\n    if (isHandled && !vim.visualMode && !vim.insert)\n      handleExternalSelection(cm, vim);\n    return isHandled;\n  }\n  exports.CodeMirror = CodeMirror;\n  var getVim = Vim.maybeInitVimState_;\n  exports.handler = {\n    $id: \"ace/keyboard/vim\",\n    drawCursor: function(element, pixelPos, config, sel, session) {\n      var vim = this.state.vim || {};\n      var w = config.characterWidth;\n      var h = config.lineHeight;\n      var top = pixelPos.top;\n      var left = pixelPos.left;\n      if (!vim.insertMode) {\n        var isbackwards = !sel.cursor \n            ? session.selection.isBackwards() || session.selection.isEmpty()\n            : Range.comparePoints(sel.cursor, sel.start) <= 0;\n        if (!isbackwards && left > w)\n          left -= w;\n      }     \n      if (!vim.insertMode && vim.status) {\n        h = h / 2;\n        top += h;\n      }\n      dom.translate(element, left, top);\n      dom.setStyle(element.style, \"width\", w + \"px\");\n      dom.setStyle(element.style, \"height\", h + \"px\");\n    },\n    handleKeyboard: function(data, hashId, key, keyCode, e) {\n      var editor = data.editor;\n      var cm = editor.state.cm;\n      var vim = getVim(cm);\n      if (keyCode == -1) return;\n      if (!vim.insertMode) {\n        if (hashId == -1) {\n          if (key.charCodeAt(0) > 0xFF) {\n            if (data.inputKey) {\n              key = data.inputKey;\n              if (key && data.inputHash == 4)\n                key = key.toUpperCase();\n            }\n          }\n          data.inputChar = key;\n        }\n        else if (hashId == 4 || hashId == 0) {\n          if (data.inputKey == key && data.inputHash == hashId && data.inputChar) {\n            key = data.inputChar;\n            hashId = -1\n          }\n          else {\n            data.inputChar = null;\n            data.inputKey = key;\n            data.inputHash = hashId;\n          }\n        }\n        else {\n          data.inputChar = data.inputKey = null;\n        }\n      }\n      if (key == \"c\" && hashId == 1) { // key == \"ctrl-c\"\n        if (!useragent.isMac && editor.getCopyText()) {\n          editor.once(\"copy\", function() {\n            editor.selection.clearSelection();\n          });\n          return {command: \"null\", passEvent: true};\n        }\n      }\n      \n      if (key == \"esc\" && !vim.insertMode && !vim.visualMode && !cm.ace.inMultiSelectMode) {\n        var searchState = getSearchState(cm);\n        var overlay = searchState.getOverlay();\n        if (overlay) cm.removeOverlay(overlay);\n      }\n      \n      if (hashId == -1 || hashId & 1 || hashId === 0 && key.length > 1) {\n        var insertMode = vim.insertMode;\n        var name = lookupKey(hashId, key, e || {});\n        if (vim.status == null)\n          vim.status = \"\";\n        var isHandled = multiSelectHandleKey(cm, name, 'user');\n        vim = getVim(cm); // may be changed by multiSelectHandleKey\n        if (isHandled && vim.status != null)\n          vim.status += name;\n        else if (vim.status == null)\n          vim.status = \"\";\n        cm._signal(\"changeStatus\");\n        if (!isHandled && (hashId != -1 || insertMode))\n          return;\n        return {command: \"null\", passEvent: !isHandled};\n      }\n    },\n    attach: function(editor) {\n      if (!editor.state) editor.state = {};\n      var cm = new CodeMirror(editor);\n      editor.state.cm = cm;\n      editor.$vimModeHandler = this;\n      CodeMirror.keyMap.vim.attach(cm);\n      getVim(cm).status = null;\n      cm.on('vim-command-done', function() {\n        if (cm.virtualSelectionMode()) return;\n        getVim(cm).status = null;\n        cm.ace._signal(\"changeStatus\");\n        cm.ace.session.markUndoGroup();\n      });\n      cm.on(\"changeStatus\", function() {\n        cm.ace.renderer.updateCursor();\n        cm.ace._signal(\"changeStatus\");\n      });\n      cm.on(\"vim-mode-change\", function() {\n        if (cm.virtualSelectionMode()) return;\n        updateInputMode();\n        cm._signal(\"changeStatus\");\n      });\n      function updateInputMode() {\n        var isIntsert = getVim(cm).insertMode;\n        cm.ace.renderer.setStyle(\"normal-mode\", !isIntsert);\n        editor.textInput.setCommandMode(!isIntsert);\n        editor.renderer.$keepTextAreaAtCursor = isIntsert;\n        editor.renderer.$blockCursor = !isIntsert;\n      }\n      updateInputMode();\n      editor.renderer.$cursorLayer.drawCursor = this.drawCursor.bind(cm);\n    },\n    detach: function(editor) {\n      var cm = editor.state.cm;\n      CodeMirror.keyMap.vim.detach(cm);\n      cm.destroy();\n      editor.state.cm = null;\n      editor.$vimModeHandler = null;\n      editor.renderer.$cursorLayer.drawCursor = null;\n      editor.renderer.setStyle(\"normal-mode\", false);\n      editor.textInput.setCommandMode(false);\n      editor.renderer.$keepTextAreaAtCursor = true;\n    },\n    getStatusText: function(editor) {\n      var cm = editor.state.cm;\n      var vim = getVim(cm);\n      if (vim.insertMode)\n        return \"INSERT\";\n      var status = \"\";\n      if (vim.visualMode) {\n        status += \"VISUAL\";\n        if (vim.visualLine)\n          status += \" LINE\";\n        if (vim.visualBlock)\n          status += \" BLOCK\";\n      }\n      if (vim.status)\n        status += (status ? \" \" : \"\") + vim.status;\n      return status;\n    }\n  };\n  Vim.defineOption({\n    name: \"wrap\",\n    set: function(value, cm) {\n      if (cm) {cm.ace.setOption(\"wrap\", value)}\n    },\n    type: \"boolean\"\n  }, false);\n  Vim.defineEx('write', 'w', function() {\n    console.log(':write is not implemented')\n  });\n  defaultKeymap.push(\n    { keys: 'zc', type: 'action', action: 'fold', actionArgs: { open: false } },\n    { keys: 'zC', type: 'action', action: 'fold', actionArgs: { open: false, all: true } },\n    { keys: 'zo', type: 'action', action: 'fold', actionArgs: { open: true } },\n    { keys: 'zO', type: 'action', action: 'fold', actionArgs: { open: true, all: true } },\n    { keys: 'za', type: 'action', action: 'fold', actionArgs: { toggle: true } },\n    { keys: 'zA', type: 'action', action: 'fold', actionArgs: { toggle: true, all: true } },\n    { keys: 'zf', type: 'action', action: 'fold', actionArgs: { open: true, all: true } },\n    { keys: 'zd', type: 'action', action: 'fold', actionArgs: { open: true, all: true } },\n    \n    { keys: '<C-A-k>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAbove\" } },\n    { keys: '<C-A-j>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelow\" } },\n    { keys: '<C-A-S-k>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAboveSkipCurrent\" } },\n    { keys: '<C-A-S-j>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelowSkipCurrent\" } },\n    { keys: '<C-A-h>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreBefore\" } },\n    { keys: '<C-A-l>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreAfter\" } },\n    { keys: '<C-A-S-h>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextBefore\" } },\n    { keys: '<C-A-S-l>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextAfter\" } }\n  );\n  actions.aceCommand = function(cm, actionArgs, vim) {\n    cm.vimCmd = actionArgs;\n    if (cm.ace.inVirtualSelectionMode)\n      cm.ace.on(\"beforeEndOperation\", delayedExecAceCommand);\n    else\n      delayedExecAceCommand(null, cm.ace);\n  };\n  function delayedExecAceCommand(op, ace) {\n    ace.off(\"beforeEndOperation\", delayedExecAceCommand);\n    var cmd = ace.state.cm.vimCmd;\n    if (cmd) {\n      ace.execCommand(cmd.exec ? cmd : cmd.name, cmd.args);\n    }\n    ace.curOp = ace.prevOp;\n  }\n  actions.fold = function(cm, actionArgs, vim) {\n    cm.ace.execCommand(['toggleFoldWidget', 'toggleFoldWidget', 'foldOther', 'unfoldall'\n      ][(actionArgs.all ? 2 : 0) + (actionArgs.open ? 1 : 0)]);\n  };\n\n  exports.handler.defaultKeymap = defaultKeymap;\n  exports.handler.actions = actions;\n  exports.Vim = Vim;\n  \n  Vim.map(\"Y\", \"yy\", \"normal\");\n});                (function() {\n                    ace.require([\"ace/keyboard/vim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-abap.js",
    "content": "ace.define(\"ace/mode/abap_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AbapHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \n            \"ADD ALIAS ALIASES ASCENDING ASSERT ASSIGN ASSIGNING AT BACK\" +\n            \" CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY\" +\n            \" DATA DEFINE DEFINITION DEFERRED DELETE DESCENDING DESCRIBE DETAIL DIVIDE DO\" +\n            \" ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT\" +\n            \" FETCH FIELDS FORM FORMAT FREE FROM FUNCTION\" +\n            \" GENERATE GET\" +\n            \" HIDE\" +\n            \" IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION\" +\n            \" LEAVE LIKE LINE LOAD LOCAL LOOP\" +\n            \" MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY\" +\n            \" ON OVERLAY OPTIONAL OTHERS\" +\n            \" PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT\" +\n            \" RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURN RETURNING ROLLBACK\" +\n            \" SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS\" +\n            \" TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES\" +\n            \" UNASSIGN ULINE UNPACK UPDATE\" +\n            \" WHEN WHILE WINDOW WRITE\" +\n            \" OCCURS STRUCTURE OBJECT PROPERTY\" +\n            \" CASTING APPEND RAISING VALUE COLOR\" +\n            \" CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT\" +\n            \" ID NUMBER FOR TITLE OUTPUT\" +\n            \" WITH EXIT USING\" +\n            \" INTO WHERE GROUP BY HAVING ORDER BY SINGLE\" +\n            \" APPENDING CORRESPONDING FIELDS OF TABLE\" +\n            \" LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING\" +\n            \" EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN\",\n        \"constant.language\": \n            \"TRUE FALSE NULL SPACE\",\n        \"support.type\": \n            \"c n i p f d t x string xstring decfloat16 decfloat34\",\n        \"keyword.operator\":\n            \"abs sign ceil floor trunc frac acos asin atan cos sin tan\" +\n            \" abapOperator cosh sinh tanh exp log log10 sqrt\" +\n            \" strlen xstrlen charlen numofchar dbmaxlen lines\" \n    }, \"text\", true, \" \");\n\n    var compoundKeywords = \"WITH\\\\W+(?:HEADER\\\\W+LINE|FRAME|KEY)|NO\\\\W+STANDARD\\\\W+PAGE\\\\W+HEADING|\"+\n        \"EXIT\\\\W+FROM\\\\W+STEP\\\\W+LOOP|BEGIN\\\\W+OF\\\\W+(?:BLOCK|LINE)|BEGIN\\\\W+OF|\"+\n        \"END\\\\W+OF\\\\W+(?:BLOCK|LINE)|END\\\\W+OF|NO\\\\W+INTERVALS|\"+\n        \"RESPECTING\\\\W+BLANKS|SEPARATED\\\\W+BY|USING\\\\W+(?:EDIT\\\\W+MASK)|\"+\n        \"WHERE\\\\W+(?:LINE)|RADIOBUTTON\\\\W+GROUP|REF\\\\W+TO|\"+\n        \"(?:PUBLIC|PRIVATE|PROTECTED)(?:\\\\W+SECTION)?|DELETING\\\\W+(?:TRAILING|LEADING)\"+\n        \"(?:ALL\\\\W+OCCURRENCES)|(?:FIRST|LAST)\\\\W+OCCURRENCE|INHERITING\\\\W+FROM|\"+\n        \"LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|\"+\n        \"CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|\"+\n        \"FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|\"+\n        \"NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|\"+\n        \"START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|\"+\n        \"TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|\"+\n        \"IS\\\\W+(?:NOT\\\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)\";\n     \n    this.$rules = {\n        \"start\" : [\n            {token : \"string\", regex : \"`\", next  : \"string\"},\n            {token : \"string\", regex : \"'\", next  : \"qstring\"},\n            {token : \"doc.comment\", regex : /^\\*.+/},\n            {token : \"comment\",  regex : /\".+$/},\n            {token : \"invalid\", regex: \"\\\\.{2,}\"},\n            {token : \"keyword.operator\", regex: /\\W[\\-+%=<>*]\\W|\\*\\*|[~:,\\.&$]|->*?|=>/},\n            {token : \"paren.lparen\", regex : \"[\\\\[({]\"},\n            {token : \"paren.rparen\", regex : \"[\\\\])}]\"},\n            {token : \"constant.numeric\", regex: \"[+-]?\\\\d+\\\\b\"},\n            {token : \"variable.parameter\", regex : /sy|pa?\\d\\d\\d\\d\\|t\\d\\d\\d\\.|innnn/}, \n            {token : \"keyword\", regex : compoundKeywords}, \n            {token : \"variable.parameter\", regex : /\\w+-\\w[\\-\\w]*/},\n            {token : keywordMapper, regex : \"\\\\b\\\\w+\\\\b\"},\n            {caseInsensitive: true}\n        ],\n        \"qstring\" : [\n            {token : \"constant.language.escape\",   regex : \"''\"},\n            {token : \"string\", regex : \"'\",     next  : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"string\" : [\n            {token : \"constant.language.escape\",   regex : \"``\"},\n            {token : \"string\", regex : \"`\",     next  : \"start\"},\n            {defaultToken : \"string\"}\n        ]\n    };\n};\noop.inherits(AbapHighlightRules, TextHighlightRules);\n\nexports.AbapHighlightRules = AbapHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/abap\",[\"require\",\"exports\",\"module\",\"ace/mode/abap_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./abap_highlight_rules\").AbapHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar oop = require(\"../lib/oop\");\n\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.foldingRules = new FoldMode();\n}\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.lineCommentStart = '\"';\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        return indent;\n    };    \n    \n    this.$id = \"ace/mode/abap\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-abc.js",
    "content": "ace.define(\"ace/mode/abc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var ABCHighlightRules = function () {\n\n        this.$rules = {\n            start: [\n                {\n                    token: ['zupfnoter.information.comment.line.percentage', 'information.keyword', 'in formation.keyword.embedded'],\n                    regex: '(%%%%)(hn\\\\.[a-z]*)(.*)',\n                    comment: 'Instruction Comment'\n                },\n                {\n                    token: ['information.comment.line.percentage', 'information.keyword.embedded'],\n                    regex: '(%%)(.*)',\n                    comment: 'Instruction Comment'\n                },\n\n                {\n                    token: 'comment.line.percentage',\n                    regex: '%.*',\n                    comment: 'Comments'\n                },\n\n                {\n                    token: 'barline.keyword.operator',\n                    regex: '[\\\\[:]*[|:][|\\\\]:]*(?:\\\\[?[0-9]+)?|\\\\[[0-9]+',\n                    comment: 'Bar lines'\n                },\n                {\n                    token: ['information.keyword.embedded', 'information.argument.string.unquoted'],\n                    regex: '(\\\\[[A-Za-z]:)([^\\\\]]*\\\\])',\n                    comment: 'embedded Header lines'\n                },\n                {\n                    token: ['information.keyword', 'information.argument.string.unquoted'],\n                    regex: '^([A-Za-z]:)([^%\\\\\\\\]*)',\n                    comment: 'Header lines'\n                },\n                {\n                    token: ['text', 'entity.name.function', 'string.unquoted', 'text'],\n                    regex: '(\\\\[)([A-Z]:)(.*?)(\\\\])',\n                    comment: 'Inline fields'\n                },\n                {\n                    token: ['accent.constant.language', 'pitch.constant.numeric', 'duration.constant.numeric'],\n                    regex: '([\\\\^=_]*)([A-Ga-gz][,\\']*)([0-9]*/*[><0-9]*)',\n                    comment: 'Notes'\n                },\n                {\n                    token: 'zupfnoter.jumptarget.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\:.*?[\\\\\"!]',\n                    comment: 'Zupfnoter jumptarget'\n                }, {\n                    token: 'zupfnoter.goto.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\@.*?[\\\\\"!]',\n                    comment: 'Zupfnoter goto'\n                },\n                {\n                    token: 'zupfnoter.annotation.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\!.*?[\\\\\"!]',\n                    comment: 'Zupfnoter annoation'\n                },\n                {\n                    token: 'zupfnoter.annotationref.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\#.*?[\\\\\"!]',\n                    comment: 'Zupfnoter annotation reference'\n                },\n                {\n                    token: 'chordname.string.quoted',\n                    regex: '[\\\\\"!]\\\\^.*?[\\\\\"!]',\n                    comment: 'abc chord'\n                },\n                {\n                    token: 'string.quoted',\n                    regex: '[\\\\\"!].*?[\\\\\"!]',\n                    comment: 'abc annotation'\n                }\n\n            ]\n        };\n\n        this.normalizeRules();\n    };\n\n    ABCHighlightRules.metaData = {\n        fileTypes: ['abc'],\n        name: 'ABC',\n        scopeName: 'text.abcnotation'\n    };\n\n\n    oop.inherits(ABCHighlightRules, TextHighlightRules);\n\n    exports.ABCHighlightRules = ABCHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/abc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/abc_highlight_rules\",\"ace/mode/folding/cstyle\"], function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var ABCHighlightRules = require(\"./abc_highlight_rules\").ABCHighlightRules;\n    var FoldMode = require(\"./folding/cstyle\").FoldMode;\n\n    var Mode = function () {\n        this.HighlightRules = ABCHighlightRules;\n        this.foldingRules = new FoldMode();\n        this.$behaviour = this.$defaultBehaviour;\n    };\n    oop.inherits(Mode, TextMode);\n\n    (function () {\n        this.$id = \"ace/mode/abc\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-actionscript.js",
    "content": "ace.define(\"ace/mode/actionscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ActionScriptHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'support.class.actionscript.2',\n           regex: '\\\\b(?:R(?:ecordset|DBMSResolver|adioButton(?:Group)?)|X(?:ML(?:Socket|Node|Connector)?|UpdateResolverDataHolder)|M(?:M(?:Save|Execute)|icrophoneMicrophone|o(?:use|vieClip(?:Loader)?)|e(?:nu(?:Bar)?|dia(?:Controller|Display|Playback))|ath)|B(?:yName|inding|utton)|S(?:haredObject|ystem|crollPane|t(?:yleSheet|age|ream)|ound|e(?:ndEvent|rviceObject)|OAPCall|lide)|N(?:umericStepper|et(?:stream|S(?:tream|ervices)|Connection|Debug(?:Config)?))|C(?:heckBox|o(?:ntextMenu(?:Item)?|okie|lor|m(?:ponentMixins|boBox))|ustomActions|lient|amera)|T(?:ypedValue|ext(?:Snapshot|Input|F(?:ield|ormat)|Area)|ree|AB)|Object|D(?:ownload|elta(?:Item|Packet)?|at(?:e(?:Chooser|Field)?|a(?:G(?:lue|rid)|Set|Type)))|U(?:RL|TC|IScrollBar)|P(?:opUpManager|endingCall|r(?:intJob|o(?:duct|gressBar)))|E(?:ndPoint|rror)|Video|Key|F(?:RadioButton|GridColumn|MessageBox|BarChart|S(?:croll(?:Bar|Pane)|tyleFormat|plitView)|orm|C(?:heckbox|omboBox|alendar)|unction|T(?:icker|ooltip(?:Lite)?|ree(?:Node)?)|IconButton|D(?:ataGrid|raggablePane)|P(?:ieChart|ushButton|ro(?:gressBar|mptBox))|L(?:i(?:stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(?:indow|SDLURL|ebService(?:Connector)?)|L(?:ist|o(?:calConnection|ad(?:er|Vars)|g)|a(?:unch|bel))|A(?:sBroadcaster|cc(?:ordion|essibility)|S(?:Set(?:Native|PropFlags)|N(?:ew|ative)|C(?:onstructor|lamp(?:2)?)|InstanceOf)|pplication|lert|rray))\\\\b' },\n         { token: 'support.function.actionscript.2',\n           regex: '\\\\b(?:s(?:h(?:ift|ow(?:GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(?:ow|ePane))|c(?:hema|ale(?:X|Mode|Y|Content)|r(?:oll(?:Track|Drag)?|een(?:Resolution|Color|DPI)))|t(?:yleSheet|op(?:Drag|A(?:nimation|llSounds|gent))?|epSize|a(?:tus|rt(?:Drag|A(?:nimation|gent))?))|i(?:n|ze|lence(?:TimeOut|Level))|o(?:ngname|urce|rt(?:Items(?:By)?|On(?:HeaderRelease)?|able(?:Columns)?)?)|u(?:ppressInvalidCalls|bstr(?:ing)?)|p(?:li(?:ce|t)|aceCol(?:umnsEqually|lumnsEqually))|e(?:nd(?:DefaultPushButtonEvent|AndLoad)?|curity|t(?:R(?:GB|o(?:otNode|w(?:Height|Count))|esizable(?:Columns)?|a(?:nge|te))|G(?:ain|roupName)|X(?:AxisTitle)?|M(?:i(?:n(?:imum|utes)|lliseconds)|o(?:nth(?:Names)?|tionLevel|de)|ultilineMode|e(?:ssage|nu(?:ItemEnabled(?:At)?|EnabledAt)|dia)|a(?:sk|ximum))|B(?:u(?:tton(?:s|Width)|fferTime)|a(?:seTabIndex|ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Target|P(?:osition|roperties)|barState|Location)|t(?:yle(?:Property)?|opOnFocus|at(?:us|e))|i(?:ze|lenceLevel)|ort(?:able(?:Columns)?|Function)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)?|Style|Color|ed(?:Node(?:s)?|Cell|I(?:nd(?:ices|ex)|tem(?:s)?))?|able))|kin|m(?:oothness|allScroll))|H(?:ighlight(?:s|Color)|Scroll|o(?:urs|rizontal)|eader(?:Symbol|Height|Text|Property|Format|Width|Location)?|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:ode(?:Properties|ExpansionHandler)|ewTextFormat)|C(?:h(?:ildNodes|a(?:ngeHandler|rt(?:Title|EventHandler)))|o(?:ntent(?:Size)?|okie|lumns)|ell(?:Symbol|Data)|l(?:i(?:ckHandler|pboard)|oseHandler)|redentials)|T(?:ype(?:dVaule)?|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:out(?:Handler)?)?)|oggle|extFormat|ransform)|I(?:s(?:Branch|Open)|n(?:terval|putProperty)|con(?:SymbolName)?|te(?:rator|m(?:ByKey|Symbol)))|Orientation|D(?:i(?:splay(?:Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(?:pth(?:Below|To|Above)|fault(?:GatewayURL|Mappings|NodeIconSymbolName)|l(?:iveryMode|ay)|bug(?:ID)?)|a(?:yOfWeekNames|t(?:e(?:Filter)?|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Provider|All(?:Height|Property|Format|Width))?))|ra(?:wConnectors|gContent))|U(?:se(?:Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(?:osition|ercentComplete|an(?:e(?:M(?:inimumSize|aximumSize)|Size|Title))?|ro(?:pert(?:y(?:Data)?|iesAt)|gress))|E(?:nabled|dit(?:Handler|able)|xpand(?:NodeTrigger|erSymbolName))|V(?:Scroll|olume|alue(?:Source)?)|KeyFrameInterval|Quality|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:opback|adTarget)|a(?:rgeScroll|bel(?:Source|Placement)?))|A(?:s(?:Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:e(?:State(?:Handler)?|Handler)|ateHandler)|utoH(?:ideScrollBar|eight)))?|paratorBefore|ek|lect(?:ion(?:Disabled|Unfocused)?|ed(?:Node(?:s)?|Child|I(?:nd(?:ices|ex)|tem(?:s)?)|Dat(?:e|a))?|able(?:Ranges)?)|rver(?:String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(?:scroll(?:Policy)?|tml(?:Text)?|i(?:t(?:Test(?:TextNearPos)?|Area)|de(?:BuiltInItems|Child)?|ghlight(?:2D|3D)?)|orizontal|e(?:ight|ader(?:Re(?:nderer|lease)|Height|Text))|P(?:osition|ageScrollSize)|a(?:s(?:childNodes|MP3|S(?:creen(?:Broadcast|Playback)|treaming(?:Video|Audio)|ort)|Next|OwnProperty|Pr(?:inting|evious)|EmbeddedVideo|VideoEncoder|A(?:ccesibility|udio(?:Encoder)?))|ndlerName)|LineScrollSize)|ye(?:sLabel|ar)|n(?:o(?:t|de(?:Name|Close|Type|Open|Value)|Label)|u(?:llValue|mChild(?:S(?:creens|lides)|ren|Forms))|e(?:w(?:Item|line|Value|LocationDialog)|xt(?:S(?:cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(?:s)?)|c(?:h(?:ildNodes|eck|a(?:nge(?:sPending)?|r(?:CodeAt|At))|r)|o(?:s|n(?:st(?:ant|ructor)|nect|c(?:urrency|at)|t(?:ent(?:Type|Path)?|ains|rol(?:Placement|lerPolicy))|denseWhite|version)|py|l(?:or|umn(?:Stretch|Name(?:s)?|Count))|m(?:p(?:onent|lete)|ment))|u(?:stomItems|ePoint(?:s)?|r(?:veTo|Value|rent(?:Slide|ChildSlide|Item|F(?:ocused(?:S(?:creen|lide)|Form)|ps))))|e(?:il|ll(?:Renderer|Press|Edit|Focus(?:In|Out)))|l(?:i(?:ck|ents)|o(?:se(?:Button|Pane)?|ne(?:Node)?)|ear(?:S(?:haredObjects|treams)|Timeout|Interval)?)|a(?:ncelLabel|tch|p(?:tion|abilities)|l(?:cFields|l(?:e(?:e|r))?))|reate(?:GatewayConnection|Menu|Se(?:rver|gment)|C(?:hild(?:AtDepth)?|l(?:ient|ass(?:ChildAtDepth|Object(?:AtDepth)?))|all)|Text(?:Node|Field)|Item|Object(?:AtDepth)?|PopUp|E(?:lement|mptyMovieClip)))|t(?:h(?:is|row)|ype(?:of|Name)?|i(?:tle(?:StyleDeclaration)?|me(?:out)?)|o(?:talTime|String|olTipText|p|UpperCase|ggle(?:HighQuality)?|Lo(?:caleString|werCase))|e(?:st|llTarget|xt(?:RightMargin|Bold|S(?:ize|elected)|Height|Color|I(?:ndent|talic)|Disabled|Underline|F(?:ield|ont)|Width|LeftMargin|Align)?)|a(?:n|rget(?:Path)?|b(?:Stops|Children|Index|Enabled|leName))|r(?:y|igger|ac(?:e|k(?:AsMenu)?)))|i(?:s(?:Running|Branch|NaN|Con(?:soleOpen|nected)|Toggled|Installed|Open|D(?:own|ebugger)|P(?:urchased|ro(?:totypeOf|pertyEnumerable))|Empty|F(?:inite|ullyPopulated)|Local|Active)|n(?:s(?:tall|ertBefore)|cludeDeltaPacketInfo|t|it(?:ialize|Component|Pod|A(?:pplication|gent))?|de(?:nt|terminate|x(?:InParent(?:Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(?:F(?:ield|unction))?|t(?:e(?:ratorScrolled|m(?:s|RollO(?:ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(?:Case|White))|o(?:s|n(?:R(?:ollO(?:ut|ver)|e(?:s(?:ize|ult)|l(?:ease(?:Outside)?|aseOutside)))|XML|Mouse(?:Move|Down|Up|Wheel)|S(?:ync|croller|tatus|oundComplete|e(?:tFocus|lect(?:edItem)?))|N(?:oticeEvent|etworkChange)|C(?:hanged|onnect|l(?:ipEvent|ose))|ID3|D(?:isconnect|eactivate|ata|ragO(?:ut|ver))|Un(?:install|load)|P(?:aymentResult|ress)|EnterFrame|K(?:illFocus|ey(?:Down|Up))|Fault|Lo(?:ad|g)|A(?:ctiv(?:ity|ate)|ppSt(?:op|art)))?|pe(?:n|ration)|verLayChildren|kLabel|ldValue|r(?:d)?)|d(?:i(?:s(?:connect|play(?:Normal|ed(?:Month|Year)|Full)|able(?:Shader|d(?:Ranges|Days)|CloseBox|Events))|rection)|o(?:cTypeDecl|tall|Decoding|main|LazyDecoding)|u(?:plicateMovieClip|ration)|e(?:stroy(?:ChildAt|Object)|code|fault(?:PushButton(?:Enabled)?|KeydownHandler)?|l(?:ta(?:Packet(?:Changed)?)?|ete(?:PopUp|All)?)|blocking)|a(?:shBoardSave|yNames|ta(?:Provider)?|rkshadow)|r(?:opdown(?:Width)?|a(?:w|gO(?:ut|ver))))|u(?:se(?:Sort|HandCursor|Codepage|EchoSuppression)|n(?:shift|install|derline|escape|format|watch|lo(?:ck|ad(?:Movie(?:Num)?)?))|pdate(?:Results|Mode|I(?:nputProperties|tem(?:ByIndex)?)|P(?:acket|roperties)|View|AfterEvent)|rl)|join|p(?:ixelAspectRatio|o(?:sition|p|w)|u(?:sh|rge|blish)|ercen(?:tComplete|Loaded)|lay(?:head(?:Change|Time)|ing|Hidden|erType)?|a(?:ssword|use|r(?:se(?:XML|CSS|Int|Float)|ent(?:Node|Is(?:S(?:creen|lide)|Form))|ams))|r(?:int(?:Num|AsBitmap(?:Num)?)?|o(?:to(?:type)?|pert(?:y|ies)|gress)|e(?:ss|v(?:ious(?:S(?:ibling|lide)|Value)?|Scene|Frame)|ferred(?:Height|Width))))|e(?:scape|n(?:code(?:r)?|ter(?:Frame)?|dFill|able(?:Shader|d|CloseBox|Events))|dit(?:able|Field|LocationDialog)|v(?:ent|al(?:uate)?)|q|x(?:tended|p|ec(?:ute)?|actSettings)|m(?:phasized(?:StyleDeclaration)?|bedFonts))|v(?:i(?:sible|ewPod)|ScrollPolicy|o(?:id|lume)|ersion|P(?:osition|ageScrollSize)|a(?:l(?:idat(?:ionError|e(?:Property|ActivationKey)?)|ue(?:Of)?)|riable)|LineScrollSize)|k(?:ind|ey(?:Down|Up|Press|FrameInterval))|q(?:sort|uality)|f(?:scommand|i(?:n(?:d(?:Text|First|Last)?|ally)|eldInfo|lter(?:ed|Func)?|rst(?:Slide|Child|DayOfWeek|VisibleNode)?)|o(?:nt|cus(?:In|edCell|Out|Enabled)|r(?:egroundDisabled|mat(?:ter)?))|unctionName|ps|l(?:oor|ush)|ace|romCharCode)|w(?:i(?:th|dth)|ordWrap|atch|riteAccess)|l(?:t|i(?:st(?:Owner)?|ne(?:Style|To))|o(?:c(?:k|a(?:t(?:ion|eByld)|l(?:ToGlobal|FileReadDisable)))|opback|ad(?:Movie(?:Num)?|S(?:crollContent|ound)|ed|Variables(?:Num)?|Application)?|g(?:Changes)?)|e(?:ngth|ft(?:Margin)?|ading)?|a(?:st(?:Slide|Child|Index(?:Of)?)?|nguage|b(?:el(?:Placement|F(?:ield|unction))?|leField)))|a(?:s(?:scociate(?:Controller|Display)|in|pectRatio|function)|nd|c(?:ceptConnection|tiv(?:ityLevel|ePlayControl)|os)|t(?:t(?:ach(?:Movie|Sound|Video|Audio)|ributes)|an(?:2)?)|dd(?:header|RequestHeader|Menu(?:Item(?:At)?|At)?|Sort|Header|No(?:tice|de(?:At)?)|C(?:olumn(?:At)?|uePoint)|T(?:oLocalInternetCache|reeNode(?:At)?)|I(?:con|tem(?:s(?:At)?|At)?)|DeltaItem|P(?:od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(?:Size|Play|KeyNav|Load)|pp(?:endChild|ly(?:Changes|Updates)?)|vHardwareDisable|fterLoaded|l(?:ternateRowColors|ign|l(?:ow(?:InsecureDomain|Domain)|Transitions(?:InDone|OutDone))|bum)|r(?:tist|row|g(?:uments|List))|gent|bs)|r(?:ight(?:Margin)?|o(?:ot(?:S(?:creen|lide)|Form)|und|w(?:Height|Count)|llO(?:ut|ver))|e(?:s(?:yncDepth|t(?:orePane|artAnimation|rict)|iz(?:e|able(?:Columns)?)|olveDelta|ult(?:s)?|ponse)|c(?:o(?:ncile(?:Results|Updates)|rd)|eive(?:Video|Audio))|draw|jectConnection|place(?:Sel|ItemAt|AllItems)?|ve(?:al(?:Child)?|rse)|quest(?:SizeChange|Payment)?|f(?:errer|resh(?:ScrollContent|Destinations|Pane|FromSources)?)|lease(?:Outside)?|ad(?:Only|Access)|gister(?:SkinElement|C(?:olor(?:Style|Name)|lass)|InheritingStyle|Proxy)|move(?:Range|M(?:ovieClip|enu(?:Item(?:At)?|At))|Background|Sort|No(?:tice|de(?:sAt|At)?)|C(?:olum(?:nAt|At)|uePoints)|T(?:extField|reeNode(?:At)?)|Item(?:At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(?:C(?:olumns|uePoints)|Items)?))|a(?:ndom|te|dioDot))|g(?:t|oto(?:Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(?:Stop|Play))|e(?:nre|t(?:R(?:GB|o(?:otNode|wCount)|e(?:sizable|mote))|X(?:AxisTitle)?|M(?:i(?:n(?:imum(?:Size)?|utes)|lliseconds)|onth(?:Names)?|ultilineMode|e(?:ssage|nu(?:ItemAt|EnabledAt|At))|aximum(?:Size)?)|B(?:ytes(?:Total|Loaded)|ounds|utton(?:s|Width)|eginIndex|a(?:ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Position|barState|Location)|t(?:yle(?:Names)?|opOnFocus|ate)|ize|o(?:urce|rtState)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)|Style|ed(?:Node(?:s)?|Cell|Text|I(?:nd(?:ices|ex)|tem(?:s)?))?)|rvice)|moothness|WFVersion)|H(?:ighlight(?:s|Color)|ours|e(?:ight|ader(?:Height|Text|Property|Format|Width|Location)?)|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:o(?:tices|de(?:DisplayedAt|At))|um(?:Children|berAvailable)|e(?:wTextFormat|xtHighestDepth))|C(?:h(?:ild(?:S(?:creen|lide)|Nodes|Form|At)|artTitle)|o(?:n(?:tent|figInfo)|okie|de|unt|lumn(?:Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(?:ll|retIndex))|T(?:ypedValue|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:stamp|zoneOffset|out(?:State|Handler)|r)?)|oggle|ext(?:Extent|Format)?|r(?:ee(?:NodeAt|Length)|ans(?:form|actionId)))|I(?:s(?:Branch|Open)|n(?:stanceAtDepth|d(?:icesByKey|exByKey))|con(?:SymbolName)?|te(?:rator|m(?:sByKey|By(?:Name|Key)|id|ID|At))|d)|O(?:utput(?:Parameter(?:s|ByName)?|Value(?:s)?)|peration|ri(?:entation|ginalCellData))|D(?:i(?:s(?:play(?:Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(?:pth|faultNodeIconSymbolName|l(?:taPacket|ay)|bug(?:Config|ID)?)|a(?:y(?:OfWeekNames)?|t(?:e|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Label|All(?:Height|Property|Format|Width))?))|rawConnectors)|U(?:se(?:Shadow|HandCursor|rInput|Fade)|RL|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear))|P(?:o(?:sition|ds)|ercentComplete|a(?:n(?:e(?:M(?:inimums|aximums)|Height|Title|Width))?|rentNode)|r(?:operty(?:Name|Data)?|efer(?:ences|red(?:Height|Width))))|E(?:n(?:dIndex|abled)|ditingData|x(?:panderSymbolName|andNodeTrigger))|V(?:iewed(?:Pods|Applications)|olume|ersion|alue(?:Source)?)|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|o(?:ntList|cus)|ullYear|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:cal|adTarget)|ength|a(?:stTabIndex|bel(?:Source)?))|A(?:s(?:cii|Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:eState(?:Handler)?|ateHandler)|utoH(?:ideScrollBar|eight)|llItems|gent))?)?|lobal(?:StyleFormat|ToLocal)?|ain|roupName)|x(?:updatePackety|mlDecl)?|m(?:y(?:MethodName|Call)|in(?:imum)?|o(?:nthNames|tion(?:TimeOut|Level)|de(?:lChanged)?|use(?:Move|O(?:ut|ver)|Down(?:Somewhere|Outside)?|Up(?:Somewhere)?|WheelEnabled)|ve(?:To)?)|u(?:ted|lti(?:pleS(?:imultaneousAllowed|elections)|line))|e(?:ssage|nu(?:Show|Hide)?|th(?:od)?|diaType)|a(?:nufacturer|tch|x(?:scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(?:substring|chr|ord|length))|b(?:ytes(?:Total|Loaded)|indFormat(?:Strings|Function)|o(?:ttom(?:Scroll)?|ld|rder(?:Color)?)|u(?:tton(?:Height|Width)|iltInItems|ffer(?:Time|Length)|llet)|e(?:foreApplyUpdates|gin(?:GradientFill|Fill))|lockIndent|a(?:ndwidth|ckground(?:Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\\\\b' },\n         { token: 'support.constant.actionscript.2',\n           regex: '\\\\b(?:__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\\\\b' },\n         { token: 'keyword.control.actionscript.2',\n           regex: '\\\\b(?:dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\\\\b' },\n         { token: 'storage.type.actionscript.2',\n           regex: '\\\\b(?:Boolean|Number|String|Void)\\\\b' },\n         { token: 'constant.language.actionscript.2',\n           regex: '\\\\b(?:null|undefined|true|false)\\\\b' },\n         { token: 'constant.numeric.actionscript.2',\n           regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b' },\n         { token: 'punctuation.definition.string.begin.actionscript.2',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.actionscript.2',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.actionscript.2',\n                regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.double.actionscript.2' } ] },\n         { token: 'punctuation.definition.string.begin.actionscript.2',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.actionscript.2',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.actionscript.2',\n                regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.single.actionscript.2' } ] },\n         { token: 'support.constant.actionscript.2',\n           regex: '\\\\b(?:BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\\\\b' },\n         { token: 'punctuation.definition.comment.actionscript.2',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.actionscript.2',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.actionscript.2' } ] },\n         { token: 'punctuation.definition.comment.actionscript.2',\n           regex: '//.*$',\n           push_: \n            [ { token: 'comment.line.double-slash.actionscript.2',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-slash.actionscript.2' } ] },\n         { token: 'keyword.operator.actionscript.2',\n           regex: '\\\\binstanceof\\\\b' },\n         { token: 'keyword.operator.symbolic.actionscript.2',\n           regex: '[-!%&*+=/?:]' },\n         { token: \n            [ 'meta.preprocessor.actionscript.2',\n              'punctuation.definition.preprocessor.actionscript.2',\n              'meta.preprocessor.actionscript.2' ],\n           regex: '^([ \\\\t]*)(#)([a-zA-Z]+)' },\n         { token: \n            [ 'storage.type.function.actionscript.2',\n              'meta.function.actionscript.2',\n              'entity.name.function.actionscript.2',\n              'meta.function.actionscript.2',\n              'punctuation.definition.parameters.begin.actionscript.2' ],\n           regex: '\\\\b(function)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()',\n           push: \n            [ { token: 'punctuation.definition.parameters.end.actionscript.2',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: 'variable.parameter.function.actionscript.2',\n                regex: '[^,)$]+' },\n              { defaultToken: 'meta.function.actionscript.2' } ] },\n         { token: \n            [ 'storage.type.class.actionscript.2',\n              'meta.class.actionscript.2',\n              'entity.name.type.class.actionscript.2',\n              'meta.class.actionscript.2',\n              'storage.modifier.extends.actionscript.2',\n              'meta.class.actionscript.2',\n              'entity.other.inherited-class.actionscript.2' ],\n           regex: '\\\\b(class)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*)(?:(\\\\s+)(extends)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*))?' } ] };\n    \n    this.normalizeRules();\n};\n\nActionScriptHighlightRules.metaData = { fileTypes: [ 'as' ],\n      keyEquivalent: '^~A',\n      name: 'ActionScript',\n      scopeName: 'source.actionscript.2' };\n\n\noop.inherits(ActionScriptHighlightRules, TextHighlightRules);\n\nexports.ActionScriptHighlightRules = ActionScriptHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/actionscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/actionscript_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ActionScriptHighlightRules = require(\"./actionscript_highlight_rules\").ActionScriptHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ActionScriptHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/actionscript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-ada.js",
    "content": "ace.define(\"ace/mode/ada_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AdaHighlightRules = function() {\nvar keywords = \"abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|\" +\n\"access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|\" +\n\"array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|\" +\n\"body|private|then|if|procedure|type|case|in|protected|constant|interface|until|\" +\n\"|is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor\";\n\n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n    var builtinFunctions = (\n        \"count|min|max|avg|sum|rank|now|coalesce|main\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"--.*$\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // character\n            regex : \"'.'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n};\n\noop.inherits(AdaHighlightRules, TextHighlightRules);\n\nexports.AdaHighlightRules = AdaHighlightRules;\n});\n\nace.define(\"ace/mode/ada\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ada_highlight_rules\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AdaHighlightRules = require(\"./ada_highlight_rules\").AdaHighlightRules;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = AdaHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*(begin|loop|then|is|do)\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        var complete_line = line + input;\n        if (complete_line.match(/^\\s*(begin|end)$/)) {\n            return true;\n        }\n\n        return false;\n    };\n\n    this.autoOutdent = function(state, session, row) {\n\n        var line = session.getLine(row);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine).length;\n        var indent = this.$getIndent(line).length;\n        if (indent <= prevIndent) {\n            return;\n        }\n\n        session.outdentRows(new Range(row, 0, row + 2, 0));\n    };\n\n\n    this.$id = \"ace/mode/ada\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-apache_conf.js",
    "content": "ace.define(\"ace/mode/apache_conf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ApacheConfHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: \n            [ 'punctuation.definition.comment.apacheconf',\n              'comment.line.hash.ini',\n              'comment.line.hash.ini' ],\n           regex: '^((?:\\\\s)*)(#)(.*$)' },\n         { token: \n            [ 'punctuation.definition.tag.apacheconf',\n              'entity.tag.apacheconf',\n              'text',\n              'string.value.apacheconf',\n              'punctuation.definition.tag.apacheconf' ],\n           regex: '(<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(?:(\\\\s)(.+?))?(>)' },\n         { token: \n            [ 'punctuation.definition.tag.apacheconf',\n              'entity.tag.apacheconf',\n              'punctuation.definition.tag.apacheconf' ],\n           regex: '(</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(>)' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'string.regexp.apacheconf', 'text',\n              'string.replacement.apacheconf', 'text' ],\n           regex: '(Rewrite(?:Rule|Cond))(\\\\s+)(.+?)(\\\\s+)(.+?)($|\\\\s)' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'entity.status.apacheconf', 'text',\n              'string.regexp.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(RedirectMatch)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text', \n              'entity.status.apacheconf', 'text',\n              'string.path.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(Redirect)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'string.regexp.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(ScriptAliasMatch|AliasMatch)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)(\\\\s))?' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'string.path.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n         { token: 'keyword.core.apacheconf',\n           regex: '\\\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\\\b' },\n         { token: 'keyword.mpm.apacheconf',\n           regex: '\\\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\\\b' },\n         { token: 'keyword.access.apacheconf',\n           regex: '\\\\b(?:Allow|Deny|Order)\\\\b' },\n         { token: 'keyword.actions.apacheconf',\n           regex: '\\\\b(?:Action|Script)\\\\b' },\n         { token: 'keyword.alias.apacheconf',\n           regex: '\\\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\\\b' },\n         { token: 'keyword.auth.apacheconf',\n           regex: '\\\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\\\b' },\n         { token: 'keyword.auth_anon.apacheconf',\n           regex: '\\\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\\\b' },\n         { token: 'keyword.auth_dbm.apacheconf',\n           regex: '\\\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\\\b' },\n         { token: 'keyword.auth_digest.apacheconf',\n           regex: '\\\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\\\b' },\n         { token: 'keyword.auth_ldap.apacheconf',\n           regex: '\\\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\\\b' },\n         { token: 'keyword.autoindex.apacheconf',\n           regex: '\\\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\\\b' },\n         { token: 'keyword.cache.apacheconf',\n           regex: '\\\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\\\b' },\n         { token: 'keyword.cern_meta.apacheconf',\n           regex: '\\\\b(?:MetaDir|MetaFiles|MetaSuffix)\\\\b' },\n         { token: 'keyword.cgi.apacheconf',\n           regex: '\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\\\b' },\n         { token: 'keyword.cgid.apacheconf',\n           regex: '\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\\\b' },\n         { token: 'keyword.charset_lite.apacheconf',\n           regex: '\\\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\\\b' },\n         { token: 'keyword.dav.apacheconf',\n           regex: '\\\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\\\b' },\n         { token: 'keyword.deflate.apacheconf',\n           regex: '\\\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\\\b' },\n         { token: 'keyword.dir.apacheconf',\n           regex: '\\\\b(?:DirectoryIndex|DirectorySlash)\\\\b' },\n         { token: 'keyword.disk_cache.apacheconf',\n           regex: '\\\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\\\b' },\n         { token: 'keyword.dumpio.apacheconf',\n           regex: '\\\\b(?:DumpIOInput|DumpIOOutput)\\\\b' },\n         { token: 'keyword.env.apacheconf',\n           regex: '\\\\b(?:PassEnv|SetEnv|UnsetEnv)\\\\b' },\n         { token: 'keyword.expires.apacheconf',\n           regex: '\\\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\\\b' },\n         { token: 'keyword.ext_filter.apacheconf',\n           regex: '\\\\b(?:ExtFilterDefine|ExtFilterOptions)\\\\b' },\n         { token: 'keyword.file_cache.apacheconf',\n           regex: '\\\\b(?:CacheFile|MMapFile)\\\\b' },\n         { token: 'keyword.headers.apacheconf',\n           regex: '\\\\b(?:Header|RequestHeader)\\\\b' },\n         { token: 'keyword.imap.apacheconf',\n           regex: '\\\\b(?:ImapBase|ImapDefault|ImapMenu)\\\\b' },\n         { token: 'keyword.include.apacheconf',\n           regex: '\\\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\\\b' },\n         { token: 'keyword.isapi.apacheconf',\n           regex: '\\\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\\\b' },\n         { token: 'keyword.ldap.apacheconf',\n           regex: '\\\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\\\b' },\n         { token: 'keyword.log.apacheconf',\n           regex: '\\\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\\\b' },\n         { token: 'keyword.mem_cache.apacheconf',\n           regex: '\\\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\\\b' },\n         { token: 'keyword.mime.apacheconf',\n           regex: '\\\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\\\b' },\n         { token: 'keyword.misc.apacheconf',\n           regex: '\\\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\\\b' },\n         { token: 'keyword.negotiation.apacheconf',\n           regex: '\\\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\\\b' },\n         { token: 'keyword.nw_ssl.apacheconf',\n           regex: '\\\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\\\b' },\n         { token: 'keyword.proxy.apacheconf',\n           regex: '\\\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\\\b' },\n         { token: 'keyword.rewrite.apacheconf',\n           regex: '\\\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\\\b' },\n         { token: 'keyword.setenvif.apacheconf',\n           regex: '\\\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\\\b' },\n         { token: 'keyword.so.apacheconf',\n           regex: '\\\\b(?:LoadFile|LoadModule)\\\\b' },\n         { token: 'keyword.ssl.apacheconf',\n           regex: '\\\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\\\b' },\n         { token: 'keyword.usertrack.apacheconf',\n           regex: '\\\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\\\b' },\n         { token: 'keyword.vhost_alias.apacheconf',\n           regex: '\\\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\\\b' },\n         { token: \n            [ 'keyword.php.apacheconf',\n              'text',\n              'entity.property.apacheconf',\n              'text',\n              'string.value.apacheconf',\n              'text' ],\n           regex: '\\\\b(php_value|php_flag)\\\\b(?:(\\\\s+)(.+?)(?:(\\\\s+)(.+?))?)?(\\\\s)' },\n         { token: \n            [ 'punctuation.variable.apacheconf',\n              'variable.env.apacheconf',\n              'variable.misc.apacheconf',\n              'punctuation.variable.apacheconf' ],\n           regex: '(%\\\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\\\})' },\n         { token: [ 'entity.mime-type.apacheconf', 'text' ],\n           regex: '\\\\b((?:text|image|application|video|audio)/.+?)(\\\\s)' },\n         { token: 'entity.helper.apacheconf',\n           regex: '\\\\b(?:from|unset|set|on|off)\\\\b',\n           caseInsensitive: true },\n         { token: 'constant.integer.apacheconf', regex: '\\\\b\\\\d+\\\\b' },\n         { token: \n            [ 'text',\n              'punctuation.definition.flag.apacheconf',\n              'string.flag.apacheconf',\n              'punctuation.definition.flag.apacheconf',\n              'text' ],\n           regex: '(\\\\s)(\\\\[)(.*?)(\\\\])(\\\\s)' } ] };\n    \n    this.normalizeRules();\n};\n\nApacheConfHighlightRules.metaData = { fileTypes: \n       [ 'conf',\n         'CONF',\n         'htaccess',\n         'HTACCESS',\n         'htgroups',\n         'HTGROUPS',\n         'htpasswd',\n         'HTPASSWD',\n         '.htaccess',\n         '.HTACCESS',\n         '.htgroups',\n         '.HTGROUPS',\n         '.htpasswd',\n         '.HTPASSWD' ],\n      name: 'Apache Conf',\n      scopeName: 'source.apacheconf' };\n\n\noop.inherits(ApacheConfHighlightRules, TextHighlightRules);\n\nexports.ApacheConfHighlightRules = ApacheConfHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/apache_conf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apache_conf_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ApacheConfHighlightRules = require(\"./apache_conf_highlight_rules\").ApacheConfHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ApacheConfHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/apache_conf\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-apex.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/apex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"../mode/text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = require(\"../mode/doc_comment_highlight_rules\").DocCommentHighlightRules;\n\nvar ApexHighlightRules = function() {\n    var mainKeywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"activate|any|autonomous|begin|bigdecimal|byte|cast|char|collect|const\"\n             + \"|end|exit|export|float|goto|group|having|hint|import|inner|into|join|loop|number|object|of|outer\"\n             + \"|parallel|pragma|retrieve|returning|search|short|stat|synchronized|then|this_month\"\n             + \"|transaction|type|when\",\n        \"keyword\": \"private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final\"\n             + \"|and|array|as|asc|break|bulk|by|catch|class|commit|continue|convertcurrency\"\n             + \"|delete|desc|do|else|enum|extends|false|final|finally|for|from|future|global\"\n             + \"|if|implements|in|insert|instanceof|interface|last_90_days|last_month\"\n             + \"|last_n_days|last_week|like|limit|list|map|merge|new|next_90_days|next_month|next_n_days\"\n             + \"|next_week|not|null|nulls|on|or|override|package|return\"\n             + \"|rollback|savepoint|select|set|sort|super|testmethod|this|this_week|throw|today\"\n             + \"|tolabel|tomorrow|trigger|true|try|undelete|update|upsert|using|virtual|webservice\"\n             + \"|where|while|yesterday|switch|case|default\",\n        \"storage.type\":\n            \"def|boolean|byte|char|short|int|float|pblob|date|datetime|decimal|double|id|integer|long|string|time|void|blob|Object\",\n        \"constant.language\":\n            \"true|false|null|after|before|count|excludes|first|includes|last|order|sharing|with\",\n        \"support.function\":\n            \"system|apex|label|apexpages|userinfo|schema\"\n    }, \"identifier\", true);\n    function keywordMapper(value) {\n        if (value.slice(-3) == \"__c\") return \"support.function\";\n        return mainKeywordMapper(value);\n    }\n    \n    function string(start, options) {\n        return {\n            regex: start + (options.multiline ? \"\" : \"(?=.)\"),\n            token: \"string.start\",\n            next: [{\n                regex: options.escape,\n                token: \"character.escape\"\n            }, {\n                regex: options.error,\n                token: \"error.invalid\"\n            }, {\n                regex: start + (options.multiline ? \"\" : \"|$\"),\n                token: \"string.end\",\n                next: options.next || \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        };\n    }\n    \n    function comments() {\n        return [{\n                token : \"comment\",\n                regex : \"\\\\/\\\\/(?=.)\",\n                next : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment\", regex : \"$|^\", next : \"start\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : /\\/\\*/,\n                next : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment\", regex : \"\\\\*\\\\/\", next : \"start\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            }\n        ];\n    }\n    \n    this.$rules = {\n        start: [\n            string(\"'\", {\n                escape: /\\\\[nb'\"\\\\]/,\n                error: /\\\\./,\n                multiline: false\n            }),\n            comments(\"c\"),\n            {\n                type: \"decoration\",\n                token: [\n                    \"meta.package.apex\",\n                    \"keyword.other.package.apex\",\n                    \"meta.package.apex\",\n                    \"storage.modifier.package.apex\",\n                    \"meta.package.apex\",\n                    \"punctuation.terminator.apex\"\n                ],\n                regex: /^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*)((?:;)?))?/\n            }, {\n                 regex: /@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                 token: \"constant.language\"\n            },\n            {\n                regex: /[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                token: keywordMapper\n            },  \n            {\n                regex: \"`#%\",\n                token: \"error.invalid\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d+(?:(?:\\.\\d*)?(?:[LlDdEe][+-]?\\d+)?)\\b|\\.\\d+[LlDdEe]/\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[]/,\n                next  : \"maybe_soql\",\n                merge : false\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\",\n                merge : false\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/,\n                merge : false\n            } \n        ], \n        maybe_soql: [{\n            regex: /\\s+/,\n            token: \"text\"\n        }, {\n            regex: /(SELECT|FIND)\\b/,\n            token: \"keyword\",\n            caseInsensitive: true,\n            next: \"soql\"\n        }, {\n            regex: \"\",\n            token: \"none\",\n            next: \"start\"\n        }],\n        soql: [{\n            regex: \"(:?ASC|BY|CATEGORY|CUBE|DATA|DESC|END|FIND|FIRST|FOR|FROM|GROUP|HAVING|IN|LAST\"\n                + \"|LIMIT|NETWORK|NULLS|OFFSET|ORDER|REFERENCE|RETURNING|ROLLUP|SCOPE|SELECT\"\n                + \"|SNIPPET|TRACKING|TYPEOF|UPDATE|USING|VIEW|VIEWSTAT|WHERE|WITH|AND|OR)\\\\b\",\n            token: \"keyword\",\n            caseInsensitive: true\n        }, {\n            regex: \"(:?target_length|toLabel|convertCurrency|count|Contact|Account|User|FIELDS)\\\\b\",\n            token: \"support.function\",\n            caseInsensitive: true\n        }, {\n            token : \"paren.rparen\",\n            regex : /[\\]]/,\n            next  : \"start\",\n            merge : false\n        }, \n        string(\"'\", {\n            escape: /\\\\[nb'\"\\\\]/,\n            error: /\\\\./,\n            multiline: false,\n            next: \"soql\"\n        }),\n        string('\"', {\n            escape: /\\\\[nb'\"\\\\]/,\n            error: /\\\\./,\n            multiline: false,\n            next: \"soql\"\n        }),\n        {\n            regex: /\\\\./,\n            token: \"character.escape\"\n        },\n        {\n            regex : /[\\?\\&\\|\\!\\{\\}\\[\\]\\(\\)\\^\\~\\*\\:\\\"\\'\\+\\-\\,\\.=\\\\\\/]/,\n            token : \"keyword.operator\"\n        }],\n        \n        \"log-start\" : [ {\n            token : \"timestamp.invisible\",\n            regex : /^[\\d:.() ]+\\|/, \n            next: \"log-header\"\n        },  {\n            token : \"timestamp.invisible\",\n            regex : /^  (Number of|Maximum)[^:]*:/,\n            next: \"log-comment\"\n        }, {\n            token : \"invisible\",\n            regex : /^Execute Anonymous:/,\n            next: \"log-comment\"\n        },  {\n            defaultToken: \"text\"\n        }],\n        \"log-comment\": [{\n            token : \"log-comment\",\n            regex : /.*$/,\n            next: \"log-start\"\n        }],\n        \"log-header\": [{\n            token : \"timestamp.invisible\",\n            regex : /((USER_DEBUG|\\[\\d+\\]|DEBUG)\\|)+/\n        },\n        {\n            token : \"keyword\",\n            regex: \"(?:EXECUTION_FINISHED|EXECUTION_STARTED|CODE_UNIT_STARTED\"\n                + \"|CUMULATIVE_LIMIT_USAGE|LIMIT_USAGE_FOR_NS\"\n                + \"|CUMULATIVE_LIMIT_USAGE_END|CODE_UNIT_FINISHED)\"\n        }, {\n            regex: \"\",\n            next: \"log-start\"\n        }]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n        \n\n    this.normalizeRules();\n};\n\n\noop.inherits(ApexHighlightRules, TextHighlightRules);\n\nexports.ApexHighlightRules = ApexHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/apex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apex_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar ApexHighlightRules = require(\"./apex_highlight_rules\").ApexHighlightRules;\nvar FoldMode = require(\"../mode/folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"../mode/behaviour/cstyle\").CstyleBehaviour;\n\nfunction ApexMode() {\n    TextMode.call(this);\n\n    this.HighlightRules = ApexHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n}\n\noop.inherits(ApexMode, TextMode);\n\nApexMode.prototype.lineCommentStart = \"//\";\n\nApexMode.prototype.blockComment = {\n    start: \"/*\",\n    end: \"*/\"\n};\n\nexports.Mode = ApexMode;\n\n});                (function() {\n                    ace.require([\"ace/mode/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-applescript.js",
    "content": "ace.define(\"ace/mode/applescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AppleScriptHighlightRules = function() {\n    var keywords = (\n        \"about|above|after|against|and|around|as|at|back|before|beginning|\" +\n        \"behind|below|beneath|beside|between|but|by|considering|\" +\n        \"contain|contains|continue|copy|div|does|eighth|else|end|equal|\" +\n        \"equals|error|every|exit|fifth|first|for|fourth|from|front|\" +\n        \"get|given|global|if|ignoring|in|into|is|it|its|last|local|me|\" +\n        \"middle|mod|my|ninth|not|of|on|onto|or|over|prop|property|put|ref|\" +\n        \"reference|repeat|returning|script|second|set|seventh|since|\" +\n        \"sixth|some|tell|tenth|that|the|then|third|through|thru|\" +\n        \"timeout|times|to|transaction|try|until|where|while|whose|with|without\"\n    );\n\n    var builtinConstants = (\n        \"AppleScript|false|linefeed|return|pi|quote|result|space|tab|true\"\n    );\n\n    var builtinFunctions = (\n        \"activate|beep|count|delay|launch|log|offset|read|round|run|say|\" +\n        \"summarize|write\"\n    );\n\n    var builtinTypes = (\n        \"alias|application|boolean|class|constant|date|file|integer|list|\" +\n        \"number|real|record|string|text|character|characters|contents|day|\" +\n        \"frontmost|id|item|length|month|name|paragraph|paragraphs|rest|\" +\n        \"reverse|running|time|version|weekday|word|words|year\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"support.type\": builtinTypes,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"--.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\(\\\\*\",\n                next : \"comment\"\n            },\n            {\n                token: \"string\",           // \" string\n                regex: '\".*?\"'\n            },\n            {\n                token: \"support.type\",\n                regex: '\\\\b(POSIX file|POSIX path|(date|time) string|quoted form)\\\\b'\n            },\n            {\n                token: \"support.function\",\n                regex: '\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|' +\n          'mount volume|path to|(close|open for) access|(get|set) eof|' +\n          'current date|do shell script|get volume settings|random number|' +\n          'set volume|system attribute|system info|time to GMT|' +\n          '(load|run|store) script|scripting components|' +\n          'ASCII (character|number)|localized string|' +\n          'choose (application|color|file|file name|' +\n          'folder|from list|remote application|URL)|' +\n          'display (alert|dialog))\\\\b|^\\\\s*return\\\\b'\n            },\n            {\n                token: \"constant.language\",\n                regex: '\\\\b(text item delimiters|current application|missing value)\\\\b'\n            },\n            {\n                token: \"keyword\",\n                regex: '\\\\b(apart from|aside from|instead of|out of|greater than|' +\n          \"isn't|(doesn't|does not) (equal|come before|come after|contain)|\" +\n          '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' +\n          'contained by|comes (before|after)|a (ref|reference))\\\\b'\n            },\n            {\n                token: keywordMapper,\n                regex: \"[a-zA-Z][a-zA-Z0-9_]*\\\\b\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\", // closing comment\n                regex: \"\\\\*\\\\)\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(AppleScriptHighlightRules, TextHighlightRules);\n\nexports.AppleScriptHighlightRules = AppleScriptHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/applescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/applescript_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AppleScriptHighlightRules = require(\"./applescript_highlight_rules\").AppleScriptHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AppleScriptHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"(*\", end: \"*)\"};\n    this.$id = \"ace/mode/applescript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-asciidoc.js",
    "content": "ace.define(\"ace/mode/asciidoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AsciidocHighlightRules = function() {\n    var identifierRe = \"[a-zA-Z\\u00a1-\\uffff]+\\\\b\";\n\n    this.$rules = {\n        \"start\": [\n            {token: \"empty\",   regex: /$/},\n            {token: \"literal\", regex: /^\\.{4,}\\s*$/,  next: \"listingBlock\"},\n            {token: \"literal\", regex: /^-{4,}\\s*$/,   next: \"literalBlock\"},\n            {token: \"string\",  regex: /^\\+{4,}\\s*$/,  next: \"passthroughBlock\"},\n            {token: \"keyword\", regex: /^={4,}\\s*$/},\n            {token: \"text\",    regex: /^\\s*$/},\n            {token: \"empty\", regex: \"\", next: \"dissallowDelimitedBlock\"}\n        ],\n\n        \"dissallowDelimitedBlock\": [\n            {include: \"paragraphEnd\"},\n            {token: \"comment\", regex: '^//.+$'},\n            {token: \"keyword\", regex: \"^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):\"},\n\n            {include: \"listStart\"},\n            {token: \"literal\", regex: /^\\s+.+$/, next: \"indentedBlock\"},\n            {token: \"empty\",   regex: \"\", next: \"text\"}\n        ],\n\n        \"paragraphEnd\": [\n            {token: \"doc.comment\", regex: /^\\/{4,}\\s*$/,    next: \"commentBlock\"},\n            {token: \"tableBlock\",  regex: /^\\s*[|!]=+\\s*$/, next: \"tableBlock\"},\n            {token: \"keyword\",     regex: /^(?:--|''')\\s*$/, next: \"start\"},\n            {token: \"option\",      regex: /^\\[.*\\]\\s*$/,     next: \"start\"},\n            {token: \"pageBreak\",   regex: /^>{3,}$/,         next: \"start\"},\n            {token: \"literal\",     regex: /^\\.{4,}\\s*$/,     next: \"listingBlock\"},\n            {token: \"titleUnderline\",    regex: /^(?:={2,}|-{2,}|~{2,}|\\^{2,}|\\+{2,})\\s*$/, next: \"start\"},\n            {token: \"singleLineTitle\",   regex: /^={1,5}\\s+\\S.*$/, next: \"start\"},\n\n            {token: \"otherBlock\",    regex: /^(?:\\*{2,}|_{2,})\\s*$/, next: \"start\"},\n            {token: \"optionalTitle\", regex: /^\\.[^.\\s].+$/,  next: \"start\"}\n        ],\n\n        \"listStart\": [\n            {token: \"keyword\",  regex: /^\\s*(?:\\d+\\.|[a-zA-Z]\\.|[ixvmIXVM]+\\)|\\*{1,5}|-|\\.{1,5})\\s/, next: \"listText\"},\n            {token: \"meta.tag\", regex: /^.+(?::{2,4}|;;)(?: |$)/, next: \"listText\"},\n            {token: \"support.function.list.callout\", regex: /^(?:<\\d+>|\\d+>|>) /, next: \"text\"},\n            {token: \"keyword\",  regex: /^\\+\\s*$/, next: \"start\"}\n        ],\n\n        \"text\": [\n            {token: [\"link\", \"variable.language\"], regex: /((?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+)(\\[.*?\\])/},\n            {token: \"link\", regex: /(?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+/},\n            {token: \"link\", regex: /\\b[\\w\\.\\/\\-]+@[\\w\\.\\/\\-]+\\b/},\n            {include: \"macros\"},\n            {include: \"paragraphEnd\"},\n            {token: \"literal\", regex:/\\+{3,}/, next:\"smallPassthrough\"},\n            {token: \"escape\", regex: /\\((?:C|TM|R)\\)|\\.{3}|->|<-|=>|<=|&#(?:\\d+|x[a-fA-F\\d]+);|(?: |^)--(?=\\s+\\S)/},\n            {token: \"escape\", regex: /\\\\[_*'`+#]|\\\\{2}[_*'`+#]{2}/},\n            {token: \"keyword\", regex: /\\s\\+$/},\n            {token: \"text\", regex: identifierRe},\n            {token: [\"keyword\", \"string\", \"keyword\"],\n                regex: /(<<[\\w\\d\\-$]+,)(.*?)(>>|$)/},\n            {token: \"keyword\", regex: /<<[\\w\\d\\-$]+,?|>>/},\n            {token: \"constant.character\", regex: /\\({2,3}.*?\\){2,3}/},\n            {token: \"keyword\", regex: /\\[\\[.+?\\]\\]/},\n            {token: \"support\", regex: /^\\[{3}[\\w\\d =\\-]+\\]{3}/},\n\n            {include: \"quotes\"},\n            {token: \"empty\", regex: /^\\s*$/, next: \"start\"}\n        ],\n\n        \"listText\": [\n            {include: \"listStart\"},\n            {include: \"text\"}\n        ],\n\n        \"indentedBlock\": [\n            {token: \"literal\", regex: /^[\\s\\w].+$/, next: \"indentedBlock\"},\n            {token: \"literal\", regex: \"\", next: \"start\"}\n        ],\n\n        \"listingBlock\": [\n            {token: \"literal\", regex: /^\\.{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"constant.numeric\", regex: '<\\\\d+>'},\n            {token: \"literal\", regex: '[^<]+'},\n            {token: \"literal\", regex: '<'}\n        ],\n        \"literalBlock\": [\n            {token: \"literal\", regex: /^-{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"constant.numeric\", regex: '<\\\\d+>'},\n            {token: \"literal\", regex: '[^<]+'},\n            {token: \"literal\", regex: '<'}\n        ],\n        \"passthroughBlock\": [\n            {token: \"literal\", regex: /^\\+{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"literal\", regex: identifierRe + \"|\\\\d+\"},\n            {include: \"macros\"},\n            {token: \"literal\", regex: \".\"}\n        ],\n\n        \"smallPassthrough\": [\n            {token: \"literal\", regex: /[+]{3,}/, next: \"dissallowDelimitedBlock\"},\n            {token: \"literal\", regex: /^\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"literal\", regex: identifierRe + \"|\\\\d+\"},\n            {include: \"macros\"}\n        ],\n\n        \"commentBlock\": [\n            {token: \"doc.comment\", regex: /^\\/{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"doc.comment\", regex: '^.*$'}\n        ],\n        \"tableBlock\": [\n            {token: \"tableBlock\", regex: /^\\s*\\|={3,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"tableBlock\", regex: /^\\s*!={3,}\\s*$/, next: \"innerTableBlock\"},\n            {token: \"tableBlock\", regex: /\\|/},\n            {include: \"text\", noEscape: true}\n        ],\n        \"innerTableBlock\": [\n            {token: \"tableBlock\", regex: /^\\s*!={3,}\\s*$/, next: \"tableBlock\"},\n            {token: \"tableBlock\", regex: /^\\s*|={3,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"tableBlock\", regex: /!/}\n        ],\n        \"macros\": [\n            {token: \"macro\", regex: /{[\\w\\-$]+}/},\n            {token: [\"text\", \"string\", \"text\", \"constant.character\", \"text\"], regex: /({)([\\w\\-$]+)(:)?(.+)?(})/},\n            {token: [\"text\", \"markup.list.macro\", \"keyword\", \"string\"], regex: /(\\w+)(footnote(?:ref)?::?)([^\\s\\[]+)?(\\[.*?\\])?/},\n            {token: [\"markup.list.macro\", \"keyword\", \"string\"], regex: /([a-zA-Z\\-][\\w\\.\\/\\-]*::?)([^\\s\\[]+)(\\[.*?\\])?/},\n            {token: [\"markup.list.macro\", \"keyword\"], regex: /([a-zA-Z\\-][\\w\\.\\/\\-]+::?)(\\[.*?\\])/},\n            {token: \"keyword\",     regex: /^:.+?:(?= |$)/}\n        ],\n\n        \"quotes\": [\n            {token: \"string.italic\", regex: /__[^_\\s].*?__/},\n            {token: \"string.italic\", regex: quoteRule(\"_\")},\n            \n            {token: \"keyword.bold\", regex: /\\*\\*[^*\\s].*?\\*\\*/},\n            {token: \"keyword.bold\", regex: quoteRule(\"\\\\*\")},\n            \n            {token: \"literal\", regex: quoteRule(\"\\\\+\")},\n            {token: \"literal\", regex: /\\+\\+[^+\\s].*?\\+\\+/},\n            {token: \"literal\", regex: /\\$\\$.+?\\$\\$/},\n            {token: \"literal\", regex: quoteRule(\"`\")},\n\n            {token: \"keyword\", regex: quoteRule(\"^\")},\n            {token: \"keyword\", regex: quoteRule(\"~\")},\n            {token: \"keyword\", regex: /##?/},\n            {token: \"keyword\", regex: /(?:\\B|^)``|\\b''/}\n        ]\n\n    };\n\n    function quoteRule(ch) {\n        var prefix = /\\w/.test(ch) ? \"\\\\b\" : \"(?:\\\\B|^)\";\n        return prefix + ch + \"[^\" + ch + \"].*?\" + ch + \"(?![\\\\w*])\";\n    }\n\n    var tokenMap = {\n        macro: \"constant.character\",\n        tableBlock: \"doc.comment\",\n        titleUnderline: \"markup.heading\",\n        singleLineTitle: \"markup.heading\",\n        pageBreak: \"string\",\n        option: \"string.regexp\",\n        otherBlock: \"markup.list\",\n        literal: \"support.function\",\n        optionalTitle: \"constant.numeric\",\n        escape: \"constant.language.escape\",\n        link: \"markup.underline.list\"\n    };\n\n    for (var state in this.$rules) {\n        var stateRules = this.$rules[state];\n        for (var i = stateRules.length; i--; ) {\n            var rule = stateRules[i];\n            if (rule.include || typeof rule == \"string\") {\n                var args = [i, 1].concat(this.$rules[rule.include || rule]);\n                if (rule.noEscape) {\n                    args = args.filter(function(x) {\n                        return !x.next;\n                    });\n                }\n                stateRules.splice.apply(stateRules, args);\n            } else if (rule.token in tokenMap) {\n                rule.token = tokenMap[rule.token];\n            }\n        }\n    }\n};\noop.inherits(AsciidocHighlightRules, TextHighlightRules);\n\nexports.AsciidocHighlightRules = AsciidocHighlightRules;\n});\n\nace.define(\"ace/mode/folding/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /^(?:\\|={10,}|[\\.\\/=\\-~^+]{4,}\\s*$|={1,5} )/;\n    this.singleLineHeadingRe = /^={1,5}(?=\\s+\\S)/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n\n        if (line[0] == \"=\") {\n            if (this.singleLineHeadingRe.test(line))\n                return \"start\";\n            if (session.getLine(row - 1).length != session.getLine(row).length)\n                return \"\";\n            return \"start\";\n        }\n        if (session.bgTokenizer.getState(row) == \"dissallowDelimitedBlock\")\n            return \"end\";\n        return \"start\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n\n        var token;\n        function getTokenType(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type;\n        }\n\n        var levels = [\"=\",\"-\",\"~\",\"^\",\"+\"];\n        var heading = \"markup.heading\";\n        var singleLineHeadingRe = this.singleLineHeadingRe;\n        function getLevel() {\n            var match = token.value.match(singleLineHeadingRe);\n            if (match)\n                return match[0].length;\n            var level = levels.indexOf(token.value[0]) + 1;\n            if (level == 1) {\n                if (session.getLine(row - 1).length != session.getLine(row).length)\n                    return Infinity;\n            }\n            return level;\n        }\n\n        if (getTokenType(row) == heading) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (getTokenType(row) != heading)\n                    continue;\n                var level = getLevel();\n                if (level <= startHeadingLevel)\n                    break;\n            }\n\n            var isSingleLineHeading = token && token.value.match(this.singleLineHeadingRe);\n            endRow = isSingleLineHeading ? row - 1 : row - 2;\n\n            if (endRow > startRow) {\n                while (endRow > startRow && (!getTokenType(endRow) || token.value[0] == \"[\"))\n                    endRow--;\n            }\n\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        } else {\n            var state = session.bgTokenizer.getState(row);\n            if (state == \"dissallowDelimitedBlock\") {\n                while (row -- > 0) {\n                    if (session.bgTokenizer.getState(row).lastIndexOf(\"Block\") == -1)\n                        break;\n                }\n                endRow = row + 1;\n                if (endRow < startRow) {\n                    var endColumn = session.getLine(row).length;\n                    return new Range(endRow, 5, startRow, startColumn - 5);\n                }\n            } else {\n                while (++row < maxRow) {\n                    if (session.bgTokenizer.getState(row) == \"dissallowDelimitedBlock\")\n                        break;\n                }\n                endRow = row;\n                if (endRow > startRow) {\n                    var endColumn = session.getLine(row).length;\n                    return new Range(startRow, 5, endRow, endColumn - 5);\n                }\n            }\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asciidoc_highlight_rules\",\"ace/mode/folding/asciidoc\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AsciidocHighlightRules = require(\"./asciidoc_highlight_rules\").AsciidocHighlightRules;\nvar AsciidocFoldMode = require(\"./folding/asciidoc\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AsciidocHighlightRules;\n    \n    this.foldingRules = new AsciidocFoldMode();    \n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^((?:.+)?)([-+*][ ]+)/.exec(line);\n            if (match) {\n                return new Array(match[1].length + 1).join(\" \") + match[2];\n            } else {\n                return \"\";\n            }\n        } else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/asciidoc\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-asl.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/asl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var ASLHighlightRules = function() {\n        var keywords = (\n            \"Default|DefinitionBlock|Device|Method|Else|ElseIf|For|Function|If|Include|Method|Return|\" +\n            \"Scope|Switch|Case|While|Break|BreakPoint|Continue|NoOp|Wait\"\n        );\n\n        var keywordOperators = (\n            \"Add|And|Decrement|Divide|Increment|Index|LAnd|LEqual|LGreater|LGreaterEqual|\" +\n            \"LLess|LLessEqual|LNot|LNotEqual|LOr|Mod|Multiply|NAnd|NOr|Not|Or|RefOf|Revision|\" +\n            \"ShiftLeft|ShiftRight|Subtract|XOr|DerefOf\"\n        );\n\n        var buildinFunctions = (\n            \"AccessAs|Acquire|Alias|BankField|Buffer|Concatenate|ConcatenateResTemplate|\" +\n            \"CondRefOf|Connection|CopyObject|CreateBitField|CreateByteField|CreateDWordField|\" +\n            \"CreateField|CreateQWordField|CreateWordField|DataTableRegion|Debug|\" +\n            \"DMA|DWordIO|DWordMemory|DWordSpace|EisaId|EISAID|EndDependentFn|Event|ExtendedIO|\" +\n            \"ExtendedMemory|ExtendedSpace|External|Fatal|Field|FindSetLeftBit|FindSetRightBit|\" +\n            \"FixedDMA|FixedIO|Fprintf|FromBCD|GpioInt|GpioIo|I2CSerialBusV2|IndexField|\" +\n            \"Interrupt|IO|IRQ|IRQNoFlags|Load|LoadTable|Match|Memory32|Memory32Fixed|\" +\n            \"Mid|Mutex|Name|Notify|Offset|ObjectType|OperationRegion|Package|PowerResource|Printf|\" +\n            \"QWordIO|QWordMemory|QWordSpace|RawDataBuffer|Register|Release|Reset|ResourceTemplate|\" +\n            \"Signal|SizeOf|Sleep|SPISerialBusV2|Stall|StartDependentFn|StartDependentFnNoPri|\" +\n            \"Store|ThermalZone|Timer|ToBCD|ToBuffer|ToDecimalString|ToInteger|ToPLD|ToString|\" +\n            \"ToUUID|UARTSerialBusV2|Unicode|Unload|VendorLong|VendorShort|WordBusNumber|WordIO|\" +\n            \"WordSpace\"\n        );\n\n        var flags = (\n            \"AttribQuick|AttribSendReceive|AttribByte|AttribBytes|AttribRawBytes|\" +\n            \"AttribRawProcessBytes|AttribWord|AttribBlock|AttribProcessCall|AttribBlockProcessCall|\" +\n            \"AnyAcc|ByteAcc|WordAcc|DWordAcc|QWordAcc|BufferAcc|\" +\n            \"AddressRangeMemory|AddressRangeReserved|AddressRangeNVS|AddressRangeACPI|\" +\n            \"RegionSpaceKeyword|FFixedHW|PCC|\" +\n            \"AddressingMode7Bit|AddressingMode10Bit|\" +\n            \"DataBitsFive|DataBitsSix|DataBitsSeven|DataBitsEight|DataBitsNine|\" +\n            \"BusMaster|NotBusMaster|\" +\n            \"ClockPhaseFirst|ClockPhaseSecond|ClockPolarityLow|ClockPolarityHigh|\" +\n            \"SubDecode|PosDecode|\" +\n            \"BigEndianing|LittleEndian|\" +\n            \"FlowControlNone|FlowControlXon|FlowControlHardware|\" +\n            \"Edge|Level|ActiveHigh|ActiveLow|ActiveBoth|Decode16|Decode10|\" +\n            \"IoRestrictionNone|IoRestrictionInputOnly|IoRestrictionOutputOnly|\" +\n            \"IoRestrictionNoneAndPreserve|Lock|NoLock|MTR|MEQ|MLE|MLT|MGE|MGT|\" +\n            \"MaxFixed|MaxNotFixed|Cacheable|WriteCombining|Prefetchable|NonCacheable|\" +\n            \"MinFixed|MinNotFixed|\" +\n            \"ParityTypeNone|ParityTypeSpace|ParityTypeMark|ParityTypeOdd|ParityTypeEven|\" +\n            \"PullDefault|PullUp|PullDown|PullNone|PolarityHigh|PolarityLow|\" +\n            \"ISAOnlyRanges|NonISAOnlyRanges|EntireRange|ReadWrite|ReadOnly|\" +\n            \"UserDefRegionSpace|SystemIO|SystemMemory|PCI_Config|EmbeddedControl|\" +\n            \"SMBus|SystemCMOS|PciBarTarget|IPMI|GeneralPurposeIO|GenericSerialBus|\" +\n            \"ResourceConsumer|ResourceProducer|Serialized|NotSerialized|\" +\n            \"Shared|Exclusive|SharedAndWake|ExclusiveAndWake|ControllerInitiated|DeviceInitiated|\" +\n            \"StopBitsZero|StopBitsOne|StopBitsOnePlusHalf|StopBitsTwo|\" +\n            \"Width8Bit|Width16Bit|Width32Bit|Width64Bit|Width128Bit|Width256Bit|\" +\n            \"SparseTranslation|DenseTranslation|TypeTranslation|TypeStatic|\" +\n            \"Preserve|WriteAsOnes|WriteAsZeros|Transfer8|Transfer16|Transfer8_16|\" +\n            \"ThreeWireMode|FourWireMode\"\n        );\n\n        var storageTypes = (\n            \"UnknownObj|IntObj|StrObj|BuffObj|PkgObj|FieldUnitObj|DeviceObj|\" +\n            \"EventObj|MethodObj|MutexObj|OpRegionObj|PowerResObj|ProcessorObj|\" +\n            \"ThermalZoneObj|BuffFieldObj|DDBHandleObj\"\n        );\n\n        var buildinConstants = (\n            \"__FILE__|__PATH__|__LINE__|__DATE__|__IASL__\"\n        );\n\n        var deprecated = (\n            \"Memory24|Processor\"\n        );\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"keyword.operator\": keywordOperators,\n            \"function.buildin\": buildinFunctions,\n            \"constant.language\": buildinConstants,\n            \"storage.type\": storageTypes,\n            \"constant.character\": flags,\n            \"invalid.deprecated\": deprecated\n        }, \"identifier\");\n\n        this.$rules = {\n            \"start\" : [\n                {\n                    token : \"comment\",\n                    regex : \"\\\\/\\\\/.*$\"\n                },\n                DocCommentHighlightRules.getStartRule(\"doc-start\"),\n                {\n                    token : \"comment\", // multi line comment\n                    regex : \"\\\\/\\\\*\",\n                    next : \"comment\"\n                },\n                DocCommentHighlightRules.getStartRule(\"doc-start\"),\n                {\n                    token : \"comment\", // ignored fields / comments\n                    regex : \"\\\\\\[\",\n                    next : \"ignoredfield\"\n                }, {\n                    token : \"variable\",\n                    regex : \"\\\\Local[0-7]|\\\\Arg[0-6]\"\n                }, {\n                    token : \"keyword\", // pre-compiler directives\n                    regex : \"#\\\\s*(?:define|elif|else|endif|error|if|ifdef|ifndef|include|includebuffer|line|pragma|undef|warning)\\\\b\",\n                    next  : \"directive\"\n                }, {\n                    token : \"string\", // single line\n                    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n                }, {\n                    token : \"constant.character\", // single line\n                    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n                }, {\n                    token : \"constant.numeric\", // hex\n                    regex : /0[xX][0-9a-fA-F]+\\b/\n                }, {\n                    token : \"constant.numeric\",\n                    regex : /(One(s)?|Zero|True|False|[0-9]+)\\b/\n                }, {\n                    token : keywordMapper,\n                    regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"/|!|\\\\$|%|&|\\\\||\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|\\\\^|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\|=\"\n                }, {\n                    token : \"lparen\",\n                    regex : \"[[({]\"\n                }, {\n                    token : \"rparen\",\n                    regex : \"[\\\\])}]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }\n            ],\n            \"comment\" : [\n                {\n                    token : \"comment\", // closing comment\n                    regex : \"\\\\*\\\\/\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ],\n            \"ignoredfield\" : [\n                {\n                    token : \"comment\", // closing ignored fields / comments\n                    regex : \"\\\\\\]\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ],\n            \"directive\" : [\n                {\n                    token : \"constant.other.multiline\",\n                    regex : /\\\\/\n                },\n                {\n                    token : \"constant.other.multiline\",\n                    regex : /.*\\\\/\n                },\n                {\n                    token : \"constant.other\",\n                    regex : \"\\\\s*<.+?>*s\",\n                    next : \"start\"\n                },\n                {\n                    token : \"constant.other\", // single line\n                    regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]*s',\n                    next : \"start\"\n                },\n                {\n                    token : \"constant.other\", // single line\n                    regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                    next : \"start\"\n                },\n                {\n                    token : \"constant.other\",\n                    regex : /[^\\\\\\/]+/,\n                    next : \"start\"\n                }\n            ]\n        };\n\n        this.embedRules(DocCommentHighlightRules, \"doc-\",\n            [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    };\n\n    oop.inherits(ASLHighlightRules, TextHighlightRules);\n\n    exports.ASLHighlightRules = ASLHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/asl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asl_highlight_rules\",\"ace/mode/folding/cstyle\"], function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var ASLHighlightRules = require(\"./asl_highlight_rules\").ASLHighlightRules;\n    var FoldMode = require(\"./folding/cstyle\").FoldMode;\n\n    var Mode = function () {\n        this.HighlightRules = ASLHighlightRules;\n        this.foldingRules = new FoldMode();\n        this.$behaviour = this.$defaultBehaviour;\n    };\n    oop.inherits(Mode, TextMode);\n\n    (function () {\n        this.$id = \"ace/mode/asl\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-assembly_x86.js",
    "content": "ace.define(\"ace/mode/assembly_x86_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AssemblyX86HighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'keyword.control.assembly',\n           regex: '\\\\b(?:aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vtestps|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(?:n?e|n?z)?|call|j(?:mp|n?e|ge?|ae?|le?|be?|n?o|n?z))\\\\b',\n           caseInsensitive: true },\n         { token: 'variable.parameter.register.assembly',\n           regex: '\\\\b(?:CS|DS|ES|FS|GS|SS|RAX|EAX|RBX|EBX|RCX|ECX|RDX|EDX|RCX|RIP|EIP|IP|RSP|ESP|SP|RSI|ESI|SI|RDI|EDI|DI|RFLAGS|EFLAGS|FLAGS|R8-15|(?:Y|X)MM(?:[0-9]|10|11|12|13|14|15)|(?:A|B|C|D)(?:X|H|L)|CR(?:[0-4]|DR(?:[0-7]|TR6|TR7|EFER)))\\\\b',\n           caseInsensitive: true },\n         { token: 'constant.character.decimal.assembly',\n           regex: '\\\\b[0-9]+\\\\b' },\n         { token: 'constant.character.hexadecimal.assembly',\n           regex: '\\\\b0x[A-F0-9]+\\\\b',\n           caseInsensitive: true },\n         { token: 'constant.character.hexadecimal.assembly',\n           regex: '\\\\b[A-F0-9]+h\\\\b',\n           caseInsensitive: true },\n         { token: 'string.assembly', regex: /'([^\\\\']|\\\\.)*'/ },\n         { token: 'string.assembly', regex: /\"([^\\\\\"]|\\\\.)*\"/ },\n         { token: 'support.function.directive.assembly',\n           regex: '^\\\\[',\n           push: \n            [ { token: 'support.function.directive.assembly',\n                regex: '\\\\]$',\n                next: 'pop' },\n              { defaultToken: 'support.function.directive.assembly' } ] },\n         { token: \n            [ 'support.function.directive.assembly',\n              'support.function.directive.assembly',\n              'entity.name.function.assembly' ],\n           regex: '(^struc)( )([_a-zA-Z][_a-zA-Z0-9]*)' },\n         { token: 'support.function.directive.assembly',\n           regex: '^endstruc\\\\b' },\n        { token: \n            [ 'support.function.directive.assembly',\n              'entity.name.function.assembly',\n              'support.function.directive.assembly',\n              'constant.character.assembly' ],\n           regex: '^(%macro )([_a-zA-Z][_a-zA-Z0-9]*)( )([0-9]+)' },\n         { token: 'support.function.directive.assembly',\n           regex: '^%endmacro' },\n         { token: \n            [ 'text',\n              'support.function.directive.assembly',\n              'text',\n              'entity.name.function.assembly' ],\n           regex: '(\\\\s*)(%define|%xdefine|%idefine|%undef|%assign|%defstr|%strcat|%strlen|%substr|%00|%0|%rotate|%rep|%endrep|%include|\\\\$\\\\$|\\\\$|%unmacro|%if|%elif|%else|%endif|%(?:el)?ifdef|%(?:el)?ifmacro|%(?:el)?ifctx|%(?:el)?ifidn|%(?:el)?ifidni|%(?:el)?ifid|%(?:el)?ifnum|%(?:el)?ifstr|%(?:el)?iftoken|%(?:el)?ifempty|%(?:el)?ifenv|%pathsearch|%depend|%use|%push|%pop|%repl|%arg|%stacksize|%local|%error|%warning|%fatal|%line|%!|%comment|%endcomment|__NASM_VERSION_ID__|__NASM_VER__|__FILE__|__LINE__|__BITS__|__OUTPUT_FORMAT__|__DATE__|__TIME__|__DATE_NUM__|_TIME__NUM__|__UTC_DATE__|__UTC_TIME__|__UTC_DATE_NUM__|__UTC_TIME_NUM__|__POSIX_TIME__|__PASS__|ISTRUC|AT|IEND|BITS 16|BITS 32|BITS 64|USE16|USE32|__SECT__|ABSOLUTE|EXTERN|GLOBAL|COMMON|CPU|FLOAT)\\\\b( ?)((?:[_a-zA-Z][_a-zA-Z0-9]*)?)',\n           caseInsensitive: true },\n          { token: 'support.function.directive.assembly',\n           regex: '\\\\b(?:d[bwdqtoy]|res[bwdqto]|equ|times|align|alignb|sectalign|section|ptr|byte|word|dword|qword|incbin)\\\\b',\n           caseInsensitive: true },\n         { token: 'entity.name.function.assembly', regex: '^\\\\s*%%[\\\\w.]+?:$' },\n         { token: 'entity.name.function.assembly', regex: '^\\\\s*%\\\\$[\\\\w.]+?:$' },\n         { token: 'entity.name.function.assembly', regex: '^[\\\\w.]+?:' },\n         { token: 'entity.name.function.assembly', regex: '^[\\\\w.]+?\\\\b' },\n         { token: 'comment.assembly', regex: ';.*$' } ] \n    };\n    \n    this.normalizeRules();\n};\n\nAssemblyX86HighlightRules.metaData = { fileTypes: [ 'asm' ],\n      name: 'Assembly x86',\n      scopeName: 'source.assembly' };\n\n\noop.inherits(AssemblyX86HighlightRules, TextHighlightRules);\n\nexports.AssemblyX86HighlightRules = AssemblyX86HighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/assembly_x86\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/assembly_x86_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AssemblyX86HighlightRules = require(\"./assembly_x86_highlight_rules\").AssemblyX86HighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AssemblyX86HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = [\";\"];\n    this.$id = \"ace/mode/assembly_x86\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-autohotkey.js",
    "content": "ace.define(\"ace/mode/autohotkey_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AutoHotKeyHighlightRules = function() {\n    var autoItKeywords = 'And|ByRef|Case|Const|ContinueCase|ContinueLoop|Default|Dim|Do|Else|ElseIf|EndFunc|EndIf|EndSelect|EndSwitch|EndWith|Enum|Exit|ExitLoop|False|For|Func|Global|If|In|Local|Next|Not|Or|ReDim|Return|Select|Step|Switch|Then|To|True|Until|WEnd|While|With|' +       \n        'Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitRotate|BitShift|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|ControlTreeView|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCallbackFree|DllCallbackGetPtr|DllCallbackRegister|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFSLink|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GUICreate|GUICtrlCreateAvi|GUICtrlCreateButton|GUICtrlCreateCheckbox|GUICtrlCreateCombo|GUICtrlCreateContextMenu|GUICtrlCreateDate|GUICtrlCreateDummy|GUICtrlCreateEdit|GUICtrlCreateGraphic|GUICtrlCreateGroup|GUICtrlCreateIcon|GUICtrlCreateInput|GUICtrlCreateLabel|GUICtrlCreateList|GUICtrlCreateListView|GUICtrlCreateListViewItem|GUICtrlCreateMenu|GUICtrlCreateMenuItem|GUICtrlCreateMonthCal|GUICtrlCreateObj|GUICtrlCreatePic|GUICtrlCreateProgress|GUICtrlCreateRadio|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTabItem|GUICtrlCreateTreeView|GUICtrlCreateTreeViewItem|GUICtrlCreateUpdown|GUICtrlDelete|GUICtrlGetHandle|GUICtrlGetState|GUICtrlRead|GUICtrlRecvMsg|GUICtrlRegisterListViewSort|GUICtrlSendMsg|GUICtrlSendToDummy|GUICtrlSetBkColor|GUICtrlSetColor|GUICtrlSetCursor|GUICtrlSetData|GUICtrlSetFont|GUICtrlSetDefColor|GUICtrlSetDefBkColor|GUICtrlSetGraphic|GUICtrlSetImage|GUICtrlSetLimit|GUICtrlSetOnEvent|GUICtrlSetPos|GUICtrlSetResizing|GUICtrlSetState|GUICtrlSetStyle|GUICtrlSetTip|GUIDelete|GUIGetCursorInfo|GUIGetMsg|GUIGetStyle|GUIRegisterMsg|GUISetAccelerators()|GUISetBkColor|GUISetCoord|GUISetCursor|GUISetFont|GUISetHelp|GUISetIcon|GUISetOnEvent|GUISetState|GUISetStyle|GUIStartGroup|GUISwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsPtr|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Opt|Ping|PixelChecksum|PixelGetColor|PixelSearch|PluginClose|PluginOpen|ProcessClose|ProcessExists|ProcessGetStats|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProgressOn|ProgressSet|Ptr|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAs|RunAsWait|RunWait|Send|SendKeepActive|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdioClose|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPRecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|UDPShutdown|UDPStartup|VarGetType|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive|' +\n        'ArrayAdd|ArrayBinarySearch|ArrayConcatenate|ArrayDelete|ArrayDisplay|ArrayFindAll|ArrayInsert|ArrayMax|ArrayMaxIndex|ArrayMin|ArrayMinIndex|ArrayPop|ArrayPush|ArrayReverse|ArraySearch|ArraySort|ArraySwap|ArrayToClip|ArrayToString|ArrayTrim|ChooseColor|ChooseFont|ClipBoard_ChangeChain|ClipBoard_Close|ClipBoard_CountFormats|ClipBoard_Empty|ClipBoard_EnumFormats|ClipBoard_FormatStr|ClipBoard_GetData|ClipBoard_GetDataEx|ClipBoard_GetFormatName|ClipBoard_GetOpenWindow|ClipBoard_GetOwner|ClipBoard_GetPriorityFormat|ClipBoard_GetSequenceNumber|ClipBoard_GetViewer|ClipBoard_IsFormatAvailable|ClipBoard_Open|ClipBoard_RegisterFormat|ClipBoard_SetData|ClipBoard_SetDataEx|ClipBoard_SetViewer|ClipPutFile|ColorConvertHSLtoRGB|ColorConvertRGBtoHSL|ColorGetBlue|ColorGetGreen|ColorGetRed|Date_Time_CompareFileTime|Date_Time_DOSDateTimeToArray|Date_Time_DOSDateTimeToFileTime|Date_Time_DOSDateTimeToStr|Date_Time_DOSDateToArray|Date_Time_DOSDateToStr|Date_Time_DOSTimeToArray|Date_Time_DOSTimeToStr|Date_Time_EncodeFileTime|Date_Time_EncodeSystemTime|Date_Time_FileTimeToArray|Date_Time_FileTimeToDOSDateTime|Date_Time_FileTimeToLocalFileTime|Date_Time_FileTimeToStr|Date_Time_FileTimeToSystemTime|Date_Time_GetFileTime|Date_Time_GetLocalTime|Date_Time_GetSystemTime|Date_Time_GetSystemTimeAdjustment|Date_Time_GetSystemTimeAsFileTime|Date_Time_GetSystemTimes|Date_Time_GetTickCount|Date_Time_GetTimeZoneInformation|Date_Time_LocalFileTimeToFileTime|Date_Time_SetFileTime|Date_Time_SetLocalTime|Date_Time_SetSystemTime|Date_Time_SetSystemTimeAdjustment|Date_Time_SetTimeZoneInformation|Date_Time_SystemTimeToArray|Date_Time_SystemTimeToDateStr|Date_Time_SystemTimeToDateTimeStr|Date_Time_SystemTimeToFileTime|Date_Time_SystemTimeToTimeStr|Date_Time_SystemTimeToTzSpecificLocalTime|Date_Time_TzSpecificLocalTimeToSystemTime|DateAdd|DateDayOfWeek|DateDaysInMonth|DateDiff|DateIsLeapYear|DateIsValid|DateTimeFormat|DateTimeSplit|DateToDayOfWeek|DateToDayOfWeekISO|DateToDayValue|DateToMonth|DayValueToDate|DebugBugReportEnv|DebugOut|DebugSetup|Degree|EventLog__Backup|EventLog__Clear|EventLog__Close|EventLog__Count|EventLog__DeregisterSource|EventLog__Full|EventLog__Notify|EventLog__Oldest|EventLog__Open|EventLog__OpenBackup|EventLog__Read|EventLog__RegisterSource|EventLog__Report|FileCountLines|FileCreate|FileListToArray|FilePrint|FileReadToArray|FileWriteFromArray|FileWriteLog|FileWriteToLine|GDIPlus_ArrowCapCreate|GDIPlus_ArrowCapDispose|GDIPlus_ArrowCapGetFillState|GDIPlus_ArrowCapGetHeight|GDIPlus_ArrowCapGetMiddleInset|GDIPlus_ArrowCapGetWidth|GDIPlus_ArrowCapSetFillState|GDIPlus_ArrowCapSetHeight|GDIPlus_ArrowCapSetMiddleInset|GDIPlus_ArrowCapSetWidth|GDIPlus_BitmapCloneArea|GDIPlus_BitmapCreateFromFile|GDIPlus_BitmapCreateFromGraphics|GDIPlus_BitmapCreateFromHBITMAP|GDIPlus_BitmapCreateHBITMAPFromBitmap|GDIPlus_BitmapDispose|GDIPlus_BitmapLockBits|GDIPlus_BitmapUnlockBits|GDIPlus_BrushClone|GDIPlus_BrushCreateSolid|GDIPlus_BrushDispose|GDIPlus_BrushGetType|GDIPlus_CustomLineCapDispose|GDIPlus_Decoders|GDIPlus_DecodersGetCount|GDIPlus_DecodersGetSize|GDIPlus_Encoders|GDIPlus_EncodersGetCLSID|GDIPlus_EncodersGetCount|GDIPlus_EncodersGetParamList|GDIPlus_EncodersGetParamListSize|GDIPlus_EncodersGetSize|GDIPlus_FontCreate|GDIPlus_FontDispose|GDIPlus_FontFamilyCreate|GDIPlus_FontFamilyDispose|GDIPlus_GraphicsClear|GDIPlus_GraphicsCreateFromHDC|GDIPlus_GraphicsCreateFromHWND|GDIPlus_GraphicsDispose|GDIPlus_GraphicsDrawArc|GDIPlus_GraphicsDrawBezier|GDIPlus_GraphicsDrawClosedCurve|GDIPlus_GraphicsDrawCurve|GDIPlus_GraphicsDrawEllipse|GDIPlus_GraphicsDrawImage|GDIPlus_GraphicsDrawImageRect|GDIPlus_GraphicsDrawImageRectRect|GDIPlus_GraphicsDrawLine|GDIPlus_GraphicsDrawPie|GDIPlus_GraphicsDrawPolygon|GDIPlus_GraphicsDrawRect|GDIPlus_GraphicsDrawString|GDIPlus_GraphicsDrawStringEx|GDIPlus_GraphicsFillClosedCurve|GDIPlus_GraphicsFillEllipse|GDIPlus_GraphicsFillPie|GDIPlus_GraphicsFillRect|GDIPlus_GraphicsGetDC|GDIPlus_GraphicsGetSmoothingMode|GDIPlus_GraphicsMeasureString|GDIPlus_GraphicsReleaseDC|GDIPlus_GraphicsSetSmoothingMode|GDIPlus_GraphicsSetTransform|GDIPlus_ImageDispose|GDIPlus_ImageGetGraphicsContext|GDIPlus_ImageGetHeight|GDIPlus_ImageGetWidth|GDIPlus_ImageLoadFromFile|GDIPlus_ImageSaveToFile|GDIPlus_ImageSaveToFileEx|GDIPlus_MatrixCreate|GDIPlus_MatrixDispose|GDIPlus_MatrixRotate|GDIPlus_ParamAdd|GDIPlus_ParamInit|GDIPlus_PenCreate|GDIPlus_PenDispose|GDIPlus_PenGetAlignment|GDIPlus_PenGetColor|GDIPlus_PenGetCustomEndCap|GDIPlus_PenGetDashCap|GDIPlus_PenGetDashStyle|GDIPlus_PenGetEndCap|GDIPlus_PenGetWidth|GDIPlus_PenSetAlignment|GDIPlus_PenSetColor|GDIPlus_PenSetCustomEndCap|GDIPlus_PenSetDashCap|GDIPlus_PenSetDashStyle|GDIPlus_PenSetEndCap|GDIPlus_PenSetWidth|GDIPlus_RectFCreate|GDIPlus_Shutdown|GDIPlus_Startup|GDIPlus_StringFormatCreate|GDIPlus_StringFormatDispose|GetIP|GUICtrlAVI_Close|GUICtrlAVI_Create|GUICtrlAVI_Destroy|GUICtrlAVI_Open|GUICtrlAVI_OpenEx|GUICtrlAVI_Play|GUICtrlAVI_Seek|GUICtrlAVI_Show|GUICtrlAVI_Stop|GUICtrlButton_Click|GUICtrlButton_Create|GUICtrlButton_Destroy|GUICtrlButton_Enable|GUICtrlButton_GetCheck|GUICtrlButton_GetFocus|GUICtrlButton_GetIdealSize|GUICtrlButton_GetImage|GUICtrlButton_GetImageList|GUICtrlButton_GetState|GUICtrlButton_GetText|GUICtrlButton_GetTextMargin|GUICtrlButton_SetCheck|GUICtrlButton_SetFocus|GUICtrlButton_SetImage|GUICtrlButton_SetImageList|GUICtrlButton_SetSize|GUICtrlButton_SetState|GUICtrlButton_SetStyle|GUICtrlButton_SetText|GUICtrlButton_SetTextMargin|GUICtrlButton_Show|GUICtrlComboBox_AddDir|GUICtrlComboBox_AddString|GUICtrlComboBox_AutoComplete|GUICtrlComboBox_BeginUpdate|GUICtrlComboBox_Create|GUICtrlComboBox_DeleteString|GUICtrlComboBox_Destroy|GUICtrlComboBox_EndUpdate|GUICtrlComboBox_FindString|GUICtrlComboBox_FindStringExact|GUICtrlComboBox_GetComboBoxInfo|GUICtrlComboBox_GetCount|GUICtrlComboBox_GetCurSel|GUICtrlComboBox_GetDroppedControlRect|GUICtrlComboBox_GetDroppedControlRectEx|GUICtrlComboBox_GetDroppedState|GUICtrlComboBox_GetDroppedWidth|GUICtrlComboBox_GetEditSel|GUICtrlComboBox_GetEditText|GUICtrlComboBox_GetExtendedUI|GUICtrlComboBox_GetHorizontalExtent|GUICtrlComboBox_GetItemHeight|GUICtrlComboBox_GetLBText|GUICtrlComboBox_GetLBTextLen|GUICtrlComboBox_GetList|GUICtrlComboBox_GetListArray|GUICtrlComboBox_GetLocale|GUICtrlComboBox_GetLocaleCountry|GUICtrlComboBox_GetLocaleLang|GUICtrlComboBox_GetLocalePrimLang|GUICtrlComboBox_GetLocaleSubLang|GUICtrlComboBox_GetMinVisible|GUICtrlComboBox_GetTopIndex|GUICtrlComboBox_InitStorage|GUICtrlComboBox_InsertString|GUICtrlComboBox_LimitText|GUICtrlComboBox_ReplaceEditSel|GUICtrlComboBox_ResetContent|GUICtrlComboBox_SelectString|GUICtrlComboBox_SetCurSel|GUICtrlComboBox_SetDroppedWidth|GUICtrlComboBox_SetEditSel|GUICtrlComboBox_SetEditText|GUICtrlComboBox_SetExtendedUI|GUICtrlComboBox_SetHorizontalExtent|GUICtrlComboBox_SetItemHeight|GUICtrlComboBox_SetMinVisible|GUICtrlComboBox_SetTopIndex|GUICtrlComboBox_ShowDropDown|GUICtrlComboBoxEx_AddDir|GUICtrlComboBoxEx_AddString|GUICtrlComboBoxEx_BeginUpdate|GUICtrlComboBoxEx_Create|GUICtrlComboBoxEx_CreateSolidBitMap|GUICtrlComboBoxEx_DeleteString|GUICtrlComboBoxEx_Destroy|GUICtrlComboBoxEx_EndUpdate|GUICtrlComboBoxEx_FindStringExact|GUICtrlComboBoxEx_GetComboBoxInfo|GUICtrlComboBoxEx_GetComboControl|GUICtrlComboBoxEx_GetCount|GUICtrlComboBoxEx_GetCurSel|GUICtrlComboBoxEx_GetDroppedControlRect|GUICtrlComboBoxEx_GetDroppedControlRectEx|GUICtrlComboBoxEx_GetDroppedState|GUICtrlComboBoxEx_GetDroppedWidth|GUICtrlComboBoxEx_GetEditControl|GUICtrlComboBoxEx_GetEditSel|GUICtrlComboBoxEx_GetEditText|GUICtrlComboBoxEx_GetExtendedStyle|GUICtrlComboBoxEx_GetExtendedUI|GUICtrlComboBoxEx_GetImageList|GUICtrlComboBoxEx_GetItem|GUICtrlComboBoxEx_GetItemEx|GUICtrlComboBoxEx_GetItemHeight|GUICtrlComboBoxEx_GetItemImage|GUICtrlComboBoxEx_GetItemIndent|GUICtrlComboBoxEx_GetItemOverlayImage|GUICtrlComboBoxEx_GetItemParam|GUICtrlComboBoxEx_GetItemSelectedImage|GUICtrlComboBoxEx_GetItemText|GUICtrlComboBoxEx_GetItemTextLen|GUICtrlComboBoxEx_GetList|GUICtrlComboBoxEx_GetListArray|GUICtrlComboBoxEx_GetLocale|GUICtrlComboBoxEx_GetLocaleCountry|GUICtrlComboBoxEx_GetLocaleLang|GUICtrlComboBoxEx_GetLocalePrimLang|GUICtrlComboBoxEx_GetLocaleSubLang|GUICtrlComboBoxEx_GetMinVisible|GUICtrlComboBoxEx_GetTopIndex|GUICtrlComboBoxEx_InitStorage|GUICtrlComboBoxEx_InsertString|GUICtrlComboBoxEx_LimitText|GUICtrlComboBoxEx_ReplaceEditSel|GUICtrlComboBoxEx_ResetContent|GUICtrlComboBoxEx_SetCurSel|GUICtrlComboBoxEx_SetDroppedWidth|GUICtrlComboBoxEx_SetEditSel|GUICtrlComboBoxEx_SetEditText|GUICtrlComboBoxEx_SetExtendedStyle|GUICtrlComboBoxEx_SetExtendedUI|GUICtrlComboBoxEx_SetImageList|GUICtrlComboBoxEx_SetItem|GUICtrlComboBoxEx_SetItemEx|GUICtrlComboBoxEx_SetItemHeight|GUICtrlComboBoxEx_SetItemImage|GUICtrlComboBoxEx_SetItemIndent|GUICtrlComboBoxEx_SetItemOverlayImage|GUICtrlComboBoxEx_SetItemParam|GUICtrlComboBoxEx_SetItemSelectedImage|GUICtrlComboBoxEx_SetMinVisible|GUICtrlComboBoxEx_SetTopIndex|GUICtrlComboBoxEx_ShowDropDown|GUICtrlDTP_Create|GUICtrlDTP_Destroy|GUICtrlDTP_GetMCColor|GUICtrlDTP_GetMCFont|GUICtrlDTP_GetMonthCal|GUICtrlDTP_GetRange|GUICtrlDTP_GetRangeEx|GUICtrlDTP_GetSystemTime|GUICtrlDTP_GetSystemTimeEx|GUICtrlDTP_SetFormat|GUICtrlDTP_SetMCColor|GUICtrlDTP_SetMCFont|GUICtrlDTP_SetRange|GUICtrlDTP_SetRangeEx|GUICtrlDTP_SetSystemTime|GUICtrlDTP_SetSystemTimeEx|GUICtrlEdit_AppendText|GUICtrlEdit_BeginUpdate|GUICtrlEdit_CanUndo|GUICtrlEdit_CharFromPos|GUICtrlEdit_Create|GUICtrlEdit_Destroy|GUICtrlEdit_EmptyUndoBuffer|GUICtrlEdit_EndUpdate|GUICtrlEdit_Find|GUICtrlEdit_FmtLines|GUICtrlEdit_GetFirstVisibleLine|GUICtrlEdit_GetLimitText|GUICtrlEdit_GetLine|GUICtrlEdit_GetLineCount|GUICtrlEdit_GetMargins|GUICtrlEdit_GetModify|GUICtrlEdit_GetPasswordChar|GUICtrlEdit_GetRECT|GUICtrlEdit_GetRECTEx|GUICtrlEdit_GetSel|GUICtrlEdit_GetText|GUICtrlEdit_GetTextLen|GUICtrlEdit_HideBalloonTip|GUICtrlEdit_InsertText|GUICtrlEdit_LineFromChar|GUICtrlEdit_LineIndex|GUICtrlEdit_LineLength|GUICtrlEdit_LineScroll|GUICtrlEdit_PosFromChar|GUICtrlEdit_ReplaceSel|GUICtrlEdit_Scroll|GUICtrlEdit_SetLimitText|GUICtrlEdit_SetMargins|GUICtrlEdit_SetModify|GUICtrlEdit_SetPasswordChar|GUICtrlEdit_SetReadOnly|GUICtrlEdit_SetRECT|GUICtrlEdit_SetRECTEx|GUICtrlEdit_SetRECTNP|GUICtrlEdit_SetRectNPEx|GUICtrlEdit_SetSel|GUICtrlEdit_SetTabStops|GUICtrlEdit_SetText|GUICtrlEdit_ShowBalloonTip|GUICtrlEdit_Undo|GUICtrlHeader_AddItem|GUICtrlHeader_ClearFilter|GUICtrlHeader_ClearFilterAll|GUICtrlHeader_Create|GUICtrlHeader_CreateDragImage|GUICtrlHeader_DeleteItem|GUICtrlHeader_Destroy|GUICtrlHeader_EditFilter|GUICtrlHeader_GetBitmapMargin|GUICtrlHeader_GetImageList|GUICtrlHeader_GetItem|GUICtrlHeader_GetItemAlign|GUICtrlHeader_GetItemBitmap|GUICtrlHeader_GetItemCount|GUICtrlHeader_GetItemDisplay|GUICtrlHeader_GetItemFlags|GUICtrlHeader_GetItemFormat|GUICtrlHeader_GetItemImage|GUICtrlHeader_GetItemOrder|GUICtrlHeader_GetItemParam|GUICtrlHeader_GetItemRect|GUICtrlHeader_GetItemRectEx|GUICtrlHeader_GetItemText|GUICtrlHeader_GetItemWidth|GUICtrlHeader_GetOrderArray|GUICtrlHeader_GetUnicodeFormat|GUICtrlHeader_HitTest|GUICtrlHeader_InsertItem|GUICtrlHeader_Layout|GUICtrlHeader_OrderToIndex|GUICtrlHeader_SetBitmapMargin|GUICtrlHeader_SetFilterChangeTimeout|GUICtrlHeader_SetHotDivider|GUICtrlHeader_SetImageList|GUICtrlHeader_SetItem|GUICtrlHeader_SetItemAlign|GUICtrlHeader_SetItemBitmap|GUICtrlHeader_SetItemDisplay|GUICtrlHeader_SetItemFlags|GUICtrlHeader_SetItemFormat|GUICtrlHeader_SetItemImage|GUICtrlHeader_SetItemOrder|GUICtrlHeader_SetItemParam|GUICtrlHeader_SetItemText|GUICtrlHeader_SetItemWidth|GUICtrlHeader_SetOrderArray|GUICtrlHeader_SetUnicodeFormat|GUICtrlIpAddress_ClearAddress|GUICtrlIpAddress_Create|GUICtrlIpAddress_Destroy|GUICtrlIpAddress_Get|GUICtrlIpAddress_GetArray|GUICtrlIpAddress_GetEx|GUICtrlIpAddress_IsBlank|GUICtrlIpAddress_Set|GUICtrlIpAddress_SetArray|GUICtrlIpAddress_SetEx|GUICtrlIpAddress_SetFocus|GUICtrlIpAddress_SetFont|GUICtrlIpAddress_SetRange|GUICtrlIpAddress_ShowHide|GUICtrlListBox_AddFile|GUICtrlListBox_AddString|GUICtrlListBox_BeginUpdate|GUICtrlListBox_Create|GUICtrlListBox_DeleteString|GUICtrlListBox_Destroy|GUICtrlListBox_Dir|GUICtrlListBox_EndUpdate|GUICtrlListBox_FindInText|GUICtrlListBox_FindString|GUICtrlListBox_GetAnchorIndex|GUICtrlListBox_GetCaretIndex|GUICtrlListBox_GetCount|GUICtrlListBox_GetCurSel|GUICtrlListBox_GetHorizontalExtent|GUICtrlListBox_GetItemData|GUICtrlListBox_GetItemHeight|GUICtrlListBox_GetItemRect|GUICtrlListBox_GetItemRectEx|GUICtrlListBox_GetListBoxInfo|GUICtrlListBox_GetLocale|GUICtrlListBox_GetLocaleCountry|GUICtrlListBox_GetLocaleLang|GUICtrlListBox_GetLocalePrimLang|GUICtrlListBox_GetLocaleSubLang|GUICtrlListBox_GetSel|GUICtrlListBox_GetSelCount|GUICtrlListBox_GetSelItems|GUICtrlListBox_GetSelItemsText|GUICtrlListBox_GetText|GUICtrlListBox_GetTextLen|GUICtrlListBox_GetTopIndex|GUICtrlListBox_InitStorage|GUICtrlListBox_InsertString|GUICtrlListBox_ItemFromPoint|GUICtrlListBox_ReplaceString|GUICtrlListBox_ResetContent|GUICtrlListBox_SelectString|GUICtrlListBox_SelItemRange|GUICtrlListBox_SelItemRangeEx|GUICtrlListBox_SetAnchorIndex|GUICtrlListBox_SetCaretIndex|GUICtrlListBox_SetColumnWidth|GUICtrlListBox_SetCurSel|GUICtrlListBox_SetHorizontalExtent|GUICtrlListBox_SetItemData|GUICtrlListBox_SetItemHeight|GUICtrlListBox_SetLocale|GUICtrlListBox_SetSel|GUICtrlListBox_SetTabStops|GUICtrlListBox_SetTopIndex|GUICtrlListBox_Sort|GUICtrlListBox_SwapString|GUICtrlListBox_UpdateHScroll|GUICtrlListView_AddArray|GUICtrlListView_AddColumn|GUICtrlListView_AddItem|GUICtrlListView_AddSubItem|GUICtrlListView_ApproximateViewHeight|GUICtrlListView_ApproximateViewRect|GUICtrlListView_ApproximateViewWidth|GUICtrlListView_Arrange|GUICtrlListView_BeginUpdate|GUICtrlListView_CancelEditLabel|GUICtrlListView_ClickItem|GUICtrlListView_CopyItems|GUICtrlListView_Create|GUICtrlListView_CreateDragImage|GUICtrlListView_CreateSolidBitMap|GUICtrlListView_DeleteAllItems|GUICtrlListView_DeleteColumn|GUICtrlListView_DeleteItem|GUICtrlListView_DeleteItemsSelected|GUICtrlListView_Destroy|GUICtrlListView_DrawDragImage|GUICtrlListView_EditLabel|GUICtrlListView_EnableGroupView|GUICtrlListView_EndUpdate|GUICtrlListView_EnsureVisible|GUICtrlListView_FindInText|GUICtrlListView_FindItem|GUICtrlListView_FindNearest|GUICtrlListView_FindParam|GUICtrlListView_FindText|GUICtrlListView_GetBkColor|GUICtrlListView_GetBkImage|GUICtrlListView_GetCallbackMask|GUICtrlListView_GetColumn|GUICtrlListView_GetColumnCount|GUICtrlListView_GetColumnOrder|GUICtrlListView_GetColumnOrderArray|GUICtrlListView_GetColumnWidth|GUICtrlListView_GetCounterPage|GUICtrlListView_GetEditControl|GUICtrlListView_GetExtendedListViewStyle|GUICtrlListView_GetGroupInfo|GUICtrlListView_GetGroupViewEnabled|GUICtrlListView_GetHeader|GUICtrlListView_GetHotCursor|GUICtrlListView_GetHotItem|GUICtrlListView_GetHoverTime|GUICtrlListView_GetImageList|GUICtrlListView_GetISearchString|GUICtrlListView_GetItem|GUICtrlListView_GetItemChecked|GUICtrlListView_GetItemCount|GUICtrlListView_GetItemCut|GUICtrlListView_GetItemDropHilited|GUICtrlListView_GetItemEx|GUICtrlListView_GetItemFocused|GUICtrlListView_GetItemGroupID|GUICtrlListView_GetItemImage|GUICtrlListView_GetItemIndent|GUICtrlListView_GetItemParam|GUICtrlListView_GetItemPosition|GUICtrlListView_GetItemPositionX|GUICtrlListView_GetItemPositionY|GUICtrlListView_GetItemRect|GUICtrlListView_GetItemRectEx|GUICtrlListView_GetItemSelected|GUICtrlListView_GetItemSpacing|GUICtrlListView_GetItemSpacingX|GUICtrlListView_GetItemSpacingY|GUICtrlListView_GetItemState|GUICtrlListView_GetItemStateImage|GUICtrlListView_GetItemText|GUICtrlListView_GetItemTextArray|GUICtrlListView_GetItemTextString|GUICtrlListView_GetNextItem|GUICtrlListView_GetNumberOfWorkAreas|GUICtrlListView_GetOrigin|GUICtrlListView_GetOriginX|GUICtrlListView_GetOriginY|GUICtrlListView_GetOutlineColor|GUICtrlListView_GetSelectedColumn|GUICtrlListView_GetSelectedCount|GUICtrlListView_GetSelectedIndices|GUICtrlListView_GetSelectionMark|GUICtrlListView_GetStringWidth|GUICtrlListView_GetSubItemRect|GUICtrlListView_GetTextBkColor|GUICtrlListView_GetTextColor|GUICtrlListView_GetToolTips|GUICtrlListView_GetTopIndex|GUICtrlListView_GetUnicodeFormat|GUICtrlListView_GetView|GUICtrlListView_GetViewDetails|GUICtrlListView_GetViewLarge|GUICtrlListView_GetViewList|GUICtrlListView_GetViewRect|GUICtrlListView_GetViewSmall|GUICtrlListView_GetViewTile|GUICtrlListView_HideColumn|GUICtrlListView_HitTest|GUICtrlListView_InsertColumn|GUICtrlListView_InsertGroup|GUICtrlListView_InsertItem|GUICtrlListView_JustifyColumn|GUICtrlListView_MapIDToIndex|GUICtrlListView_MapIndexToID|GUICtrlListView_RedrawItems|GUICtrlListView_RegisterSortCallBack|GUICtrlListView_RemoveAllGroups|GUICtrlListView_RemoveGroup|GUICtrlListView_Scroll|GUICtrlListView_SetBkColor|GUICtrlListView_SetBkImage|GUICtrlListView_SetCallBackMask|GUICtrlListView_SetColumn|GUICtrlListView_SetColumnOrder|GUICtrlListView_SetColumnOrderArray|GUICtrlListView_SetColumnWidth|GUICtrlListView_SetExtendedListViewStyle|GUICtrlListView_SetGroupInfo|GUICtrlListView_SetHotItem|GUICtrlListView_SetHoverTime|GUICtrlListView_SetIconSpacing|GUICtrlListView_SetImageList|GUICtrlListView_SetItem|GUICtrlListView_SetItemChecked|GUICtrlListView_SetItemCount|GUICtrlListView_SetItemCut|GUICtrlListView_SetItemDropHilited|GUICtrlListView_SetItemEx|GUICtrlListView_SetItemFocused|GUICtrlListView_SetItemGroupID|GUICtrlListView_SetItemImage|GUICtrlListView_SetItemIndent|GUICtrlListView_SetItemParam|GUICtrlListView_SetItemPosition|GUICtrlListView_SetItemPosition32|GUICtrlListView_SetItemSelected|GUICtrlListView_SetItemState|GUICtrlListView_SetItemStateImage|GUICtrlListView_SetItemText|GUICtrlListView_SetOutlineColor|GUICtrlListView_SetSelectedColumn|GUICtrlListView_SetSelectionMark|GUICtrlListView_SetTextBkColor|GUICtrlListView_SetTextColor|GUICtrlListView_SetToolTips|GUICtrlListView_SetUnicodeFormat|GUICtrlListView_SetView|GUICtrlListView_SetWorkAreas|GUICtrlListView_SimpleSort|GUICtrlListView_SortItems|GUICtrlListView_SubItemHitTest|GUICtrlListView_UnRegisterSortCallBack|GUICtrlMenu_AddMenuItem|GUICtrlMenu_AppendMenu|GUICtrlMenu_CheckMenuItem|GUICtrlMenu_CheckRadioItem|GUICtrlMenu_CreateMenu|GUICtrlMenu_CreatePopup|GUICtrlMenu_DeleteMenu|GUICtrlMenu_DestroyMenu|GUICtrlMenu_DrawMenuBar|GUICtrlMenu_EnableMenuItem|GUICtrlMenu_FindItem|GUICtrlMenu_FindParent|GUICtrlMenu_GetItemBmp|GUICtrlMenu_GetItemBmpChecked|GUICtrlMenu_GetItemBmpUnchecked|GUICtrlMenu_GetItemChecked|GUICtrlMenu_GetItemCount|GUICtrlMenu_GetItemData|GUICtrlMenu_GetItemDefault|GUICtrlMenu_GetItemDisabled|GUICtrlMenu_GetItemEnabled|GUICtrlMenu_GetItemGrayed|GUICtrlMenu_GetItemHighlighted|GUICtrlMenu_GetItemID|GUICtrlMenu_GetItemInfo|GUICtrlMenu_GetItemRect|GUICtrlMenu_GetItemRectEx|GUICtrlMenu_GetItemState|GUICtrlMenu_GetItemStateEx|GUICtrlMenu_GetItemSubMenu|GUICtrlMenu_GetItemText|GUICtrlMenu_GetItemType|GUICtrlMenu_GetMenu|GUICtrlMenu_GetMenuBackground|GUICtrlMenu_GetMenuBarInfo|GUICtrlMenu_GetMenuContextHelpID|GUICtrlMenu_GetMenuData|GUICtrlMenu_GetMenuDefaultItem|GUICtrlMenu_GetMenuHeight|GUICtrlMenu_GetMenuInfo|GUICtrlMenu_GetMenuStyle|GUICtrlMenu_GetSystemMenu|GUICtrlMenu_InsertMenuItem|GUICtrlMenu_InsertMenuItemEx|GUICtrlMenu_IsMenu|GUICtrlMenu_LoadMenu|GUICtrlMenu_MapAccelerator|GUICtrlMenu_MenuItemFromPoint|GUICtrlMenu_RemoveMenu|GUICtrlMenu_SetItemBitmaps|GUICtrlMenu_SetItemBmp|GUICtrlMenu_SetItemBmpChecked|GUICtrlMenu_SetItemBmpUnchecked|GUICtrlMenu_SetItemChecked|GUICtrlMenu_SetItemData|GUICtrlMenu_SetItemDefault|GUICtrlMenu_SetItemDisabled|GUICtrlMenu_SetItemEnabled|GUICtrlMenu_SetItemGrayed|GUICtrlMenu_SetItemHighlighted|GUICtrlMenu_SetItemID|GUICtrlMenu_SetItemInfo|GUICtrlMenu_SetItemState|GUICtrlMenu_SetItemSubMenu|GUICtrlMenu_SetItemText|GUICtrlMenu_SetItemType|GUICtrlMenu_SetMenu|GUICtrlMenu_SetMenuBackground|GUICtrlMenu_SetMenuContextHelpID|GUICtrlMenu_SetMenuData|GUICtrlMenu_SetMenuDefaultItem|GUICtrlMenu_SetMenuHeight|GUICtrlMenu_SetMenuInfo|GUICtrlMenu_SetMenuStyle|GUICtrlMenu_TrackPopupMenu|GUICtrlMonthCal_Create|GUICtrlMonthCal_Destroy|GUICtrlMonthCal_GetColor|GUICtrlMonthCal_GetColorArray|GUICtrlMonthCal_GetCurSel|GUICtrlMonthCal_GetCurSelStr|GUICtrlMonthCal_GetFirstDOW|GUICtrlMonthCal_GetFirstDOWStr|GUICtrlMonthCal_GetMaxSelCount|GUICtrlMonthCal_GetMaxTodayWidth|GUICtrlMonthCal_GetMinReqHeight|GUICtrlMonthCal_GetMinReqRect|GUICtrlMonthCal_GetMinReqRectArray|GUICtrlMonthCal_GetMinReqWidth|GUICtrlMonthCal_GetMonthDelta|GUICtrlMonthCal_GetMonthRange|GUICtrlMonthCal_GetMonthRangeMax|GUICtrlMonthCal_GetMonthRangeMaxStr|GUICtrlMonthCal_GetMonthRangeMin|GUICtrlMonthCal_GetMonthRangeMinStr|GUICtrlMonthCal_GetMonthRangeSpan|GUICtrlMonthCal_GetRange|GUICtrlMonthCal_GetRangeMax|GUICtrlMonthCal_GetRangeMaxStr|GUICtrlMonthCal_GetRangeMin|GUICtrlMonthCal_GetRangeMinStr|GUICtrlMonthCal_GetSelRange|GUICtrlMonthCal_GetSelRangeMax|GUICtrlMonthCal_GetSelRangeMaxStr|GUICtrlMonthCal_GetSelRangeMin|GUICtrlMonthCal_GetSelRangeMinStr|GUICtrlMonthCal_GetToday|GUICtrlMonthCal_GetTodayStr|GUICtrlMonthCal_GetUnicodeFormat|GUICtrlMonthCal_HitTest|GUICtrlMonthCal_SetColor|GUICtrlMonthCal_SetCurSel|GUICtrlMonthCal_SetDayState|GUICtrlMonthCal_SetFirstDOW|GUICtrlMonthCal_SetMaxSelCount|GUICtrlMonthCal_SetMonthDelta|GUICtrlMonthCal_SetRange|GUICtrlMonthCal_SetSelRange|GUICtrlMonthCal_SetToday|GUICtrlMonthCal_SetUnicodeFormat|GUICtrlRebar_AddBand|GUICtrlRebar_AddToolBarBand|GUICtrlRebar_BeginDrag|GUICtrlRebar_Create|GUICtrlRebar_DeleteBand|GUICtrlRebar_Destroy|GUICtrlRebar_DragMove|GUICtrlRebar_EndDrag|GUICtrlRebar_GetBandBackColor|GUICtrlRebar_GetBandBorders|GUICtrlRebar_GetBandBordersEx|GUICtrlRebar_GetBandChildHandle|GUICtrlRebar_GetBandChildSize|GUICtrlRebar_GetBandCount|GUICtrlRebar_GetBandForeColor|GUICtrlRebar_GetBandHeaderSize|GUICtrlRebar_GetBandID|GUICtrlRebar_GetBandIdealSize|GUICtrlRebar_GetBandLength|GUICtrlRebar_GetBandLParam|GUICtrlRebar_GetBandMargins|GUICtrlRebar_GetBandMarginsEx|GUICtrlRebar_GetBandRect|GUICtrlRebar_GetBandRectEx|GUICtrlRebar_GetBandStyle|GUICtrlRebar_GetBandStyleBreak|GUICtrlRebar_GetBandStyleChildEdge|GUICtrlRebar_GetBandStyleFixedBMP|GUICtrlRebar_GetBandStyleFixedSize|GUICtrlRebar_GetBandStyleGripperAlways|GUICtrlRebar_GetBandStyleHidden|GUICtrlRebar_GetBandStyleHideTitle|GUICtrlRebar_GetBandStyleNoGripper|GUICtrlRebar_GetBandStyleTopAlign|GUICtrlRebar_GetBandStyleUseChevron|GUICtrlRebar_GetBandStyleVariableHeight|GUICtrlRebar_GetBandText|GUICtrlRebar_GetBarHeight|GUICtrlRebar_GetBKColor|GUICtrlRebar_GetColorScheme|GUICtrlRebar_GetRowCount|GUICtrlRebar_GetRowHeight|GUICtrlRebar_GetTextColor|GUICtrlRebar_GetToolTips|GUICtrlRebar_GetUnicodeFormat|GUICtrlRebar_HitTest|GUICtrlRebar_IDToIndex|GUICtrlRebar_MaximizeBand|GUICtrlRebar_MinimizeBand|GUICtrlRebar_MoveBand|GUICtrlRebar_SetBandBackColor|GUICtrlRebar_SetBandForeColor|GUICtrlRebar_SetBandHeaderSize|GUICtrlRebar_SetBandID|GUICtrlRebar_SetBandIdealSize|GUICtrlRebar_SetBandLength|GUICtrlRebar_SetBandLParam|GUICtrlRebar_SetBandStyle|GUICtrlRebar_SetBandStyleBreak|GUICtrlRebar_SetBandStyleChildEdge|GUICtrlRebar_SetBandStyleFixedBMP|GUICtrlRebar_SetBandStyleFixedSize|GUICtrlRebar_SetBandStyleGripperAlways|GUICtrlRebar_SetBandStyleHidden|GUICtrlRebar_SetBandStyleHideTitle|GUICtrlRebar_SetBandStyleNoGripper|GUICtrlRebar_SetBandStyleTopAlign|GUICtrlRebar_SetBandStyleUseChevron|GUICtrlRebar_SetBandStyleVariableHeight|GUICtrlRebar_SetBandText|GUICtrlRebar_SetBKColor|GUICtrlRebar_SetColorScheme|GUICtrlRebar_SetTextColor|GUICtrlRebar_SetToolTips|GUICtrlRebar_SetUnicodeFormat|GUICtrlRebar_ShowBand|GUICtrlSlider_ClearSel|GUICtrlSlider_ClearTics|GUICtrlSlider_Create|GUICtrlSlider_Destroy|GUICtrlSlider_GetBuddy|GUICtrlSlider_GetChannelRect|GUICtrlSlider_GetLineSize|GUICtrlSlider_GetNumTics|GUICtrlSlider_GetPageSize|GUICtrlSlider_GetPos|GUICtrlSlider_GetPTics|GUICtrlSlider_GetRange|GUICtrlSlider_GetRangeMax|GUICtrlSlider_GetRangeMin|GUICtrlSlider_GetSel|GUICtrlSlider_GetSelEnd|GUICtrlSlider_GetSelStart|GUICtrlSlider_GetThumbLength|GUICtrlSlider_GetThumbRect|GUICtrlSlider_GetThumbRectEx|GUICtrlSlider_GetTic|GUICtrlSlider_GetTicPos|GUICtrlSlider_GetToolTips|GUICtrlSlider_GetUnicodeFormat|GUICtrlSlider_SetBuddy|GUICtrlSlider_SetLineSize|GUICtrlSlider_SetPageSize|GUICtrlSlider_SetPos|GUICtrlSlider_SetRange|GUICtrlSlider_SetRangeMax|GUICtrlSlider_SetRangeMin|GUICtrlSlider_SetSel|GUICtrlSlider_SetSelEnd|GUICtrlSlider_SetSelStart|GUICtrlSlider_SetThumbLength|GUICtrlSlider_SetTic|GUICtrlSlider_SetTicFreq|GUICtrlSlider_SetTipSide|GUICtrlSlider_SetToolTips|GUICtrlSlider_SetUnicodeFormat|GUICtrlStatusBar_Create|GUICtrlStatusBar_Destroy|GUICtrlStatusBar_EmbedControl|GUICtrlStatusBar_GetBorders|GUICtrlStatusBar_GetBordersHorz|GUICtrlStatusBar_GetBordersRect|GUICtrlStatusBar_GetBordersVert|GUICtrlStatusBar_GetCount|GUICtrlStatusBar_GetHeight|GUICtrlStatusBar_GetIcon|GUICtrlStatusBar_GetParts|GUICtrlStatusBar_GetRect|GUICtrlStatusBar_GetRectEx|GUICtrlStatusBar_GetText|GUICtrlStatusBar_GetTextFlags|GUICtrlStatusBar_GetTextLength|GUICtrlStatusBar_GetTextLengthEx|GUICtrlStatusBar_GetTipText|GUICtrlStatusBar_GetUnicodeFormat|GUICtrlStatusBar_GetWidth|GUICtrlStatusBar_IsSimple|GUICtrlStatusBar_Resize|GUICtrlStatusBar_SetBkColor|GUICtrlStatusBar_SetIcon|GUICtrlStatusBar_SetMinHeight|GUICtrlStatusBar_SetParts|GUICtrlStatusBar_SetSimple|GUICtrlStatusBar_SetText|GUICtrlStatusBar_SetTipText|GUICtrlStatusBar_SetUnicodeFormat|GUICtrlStatusBar_ShowHide|GUICtrlTab_Create|GUICtrlTab_DeleteAllItems|GUICtrlTab_DeleteItem|GUICtrlTab_DeselectAll|GUICtrlTab_Destroy|GUICtrlTab_FindTab|GUICtrlTab_GetCurFocus|GUICtrlTab_GetCurSel|GUICtrlTab_GetDisplayRect|GUICtrlTab_GetDisplayRectEx|GUICtrlTab_GetExtendedStyle|GUICtrlTab_GetImageList|GUICtrlTab_GetItem|GUICtrlTab_GetItemCount|GUICtrlTab_GetItemImage|GUICtrlTab_GetItemParam|GUICtrlTab_GetItemRect|GUICtrlTab_GetItemRectEx|GUICtrlTab_GetItemState|GUICtrlTab_GetItemText|GUICtrlTab_GetRowCount|GUICtrlTab_GetToolTips|GUICtrlTab_GetUnicodeFormat|GUICtrlTab_HighlightItem|GUICtrlTab_HitTest|GUICtrlTab_InsertItem|GUICtrlTab_RemoveImage|GUICtrlTab_SetCurFocus|GUICtrlTab_SetCurSel|GUICtrlTab_SetExtendedStyle|GUICtrlTab_SetImageList|GUICtrlTab_SetItem|GUICtrlTab_SetItemImage|GUICtrlTab_SetItemParam|GUICtrlTab_SetItemSize|GUICtrlTab_SetItemState|GUICtrlTab_SetItemText|GUICtrlTab_SetMinTabWidth|GUICtrlTab_SetPadding|GUICtrlTab_SetToolTips|GUICtrlTab_SetUnicodeFormat|GUICtrlToolbar_AddBitmap|GUICtrlToolbar_AddButton|GUICtrlToolbar_AddButtonSep|GUICtrlToolbar_AddString|GUICtrlToolbar_ButtonCount|GUICtrlToolbar_CheckButton|GUICtrlToolbar_ClickAccel|GUICtrlToolbar_ClickButton|GUICtrlToolbar_ClickIndex|GUICtrlToolbar_CommandToIndex|GUICtrlToolbar_Create|GUICtrlToolbar_Customize|GUICtrlToolbar_DeleteButton|GUICtrlToolbar_Destroy|GUICtrlToolbar_EnableButton|GUICtrlToolbar_FindToolbar|GUICtrlToolbar_GetAnchorHighlight|GUICtrlToolbar_GetBitmapFlags|GUICtrlToolbar_GetButtonBitmap|GUICtrlToolbar_GetButtonInfo|GUICtrlToolbar_GetButtonInfoEx|GUICtrlToolbar_GetButtonParam|GUICtrlToolbar_GetButtonRect|GUICtrlToolbar_GetButtonRectEx|GUICtrlToolbar_GetButtonSize|GUICtrlToolbar_GetButtonState|GUICtrlToolbar_GetButtonStyle|GUICtrlToolbar_GetButtonText|GUICtrlToolbar_GetColorScheme|GUICtrlToolbar_GetDisabledImageList|GUICtrlToolbar_GetExtendedStyle|GUICtrlToolbar_GetHotImageList|GUICtrlToolbar_GetHotItem|GUICtrlToolbar_GetImageList|GUICtrlToolbar_GetInsertMark|GUICtrlToolbar_GetInsertMarkColor|GUICtrlToolbar_GetMaxSize|GUICtrlToolbar_GetMetrics|GUICtrlToolbar_GetPadding|GUICtrlToolbar_GetRows|GUICtrlToolbar_GetString|GUICtrlToolbar_GetStyle|GUICtrlToolbar_GetStyleAltDrag|GUICtrlToolbar_GetStyleCustomErase|GUICtrlToolbar_GetStyleFlat|GUICtrlToolbar_GetStyleList|GUICtrlToolbar_GetStyleRegisterDrop|GUICtrlToolbar_GetStyleToolTips|GUICtrlToolbar_GetStyleTransparent|GUICtrlToolbar_GetStyleWrapable|GUICtrlToolbar_GetTextRows|GUICtrlToolbar_GetToolTips|GUICtrlToolbar_GetUnicodeFormat|GUICtrlToolbar_HideButton|GUICtrlToolbar_HighlightButton|GUICtrlToolbar_HitTest|GUICtrlToolbar_IndexToCommand|GUICtrlToolbar_InsertButton|GUICtrlToolbar_InsertMarkHitTest|GUICtrlToolbar_IsButtonChecked|GUICtrlToolbar_IsButtonEnabled|GUICtrlToolbar_IsButtonHidden|GUICtrlToolbar_IsButtonHighlighted|GUICtrlToolbar_IsButtonIndeterminate|GUICtrlToolbar_IsButtonPressed|GUICtrlToolbar_LoadBitmap|GUICtrlToolbar_LoadImages|GUICtrlToolbar_MapAccelerator|GUICtrlToolbar_MoveButton|GUICtrlToolbar_PressButton|GUICtrlToolbar_SetAnchorHighlight|GUICtrlToolbar_SetBitmapSize|GUICtrlToolbar_SetButtonBitMap|GUICtrlToolbar_SetButtonInfo|GUICtrlToolbar_SetButtonInfoEx|GUICtrlToolbar_SetButtonParam|GUICtrlToolbar_SetButtonSize|GUICtrlToolbar_SetButtonState|GUICtrlToolbar_SetButtonStyle|GUICtrlToolbar_SetButtonText|GUICtrlToolbar_SetButtonWidth|GUICtrlToolbar_SetCmdID|GUICtrlToolbar_SetColorScheme|GUICtrlToolbar_SetDisabledImageList|GUICtrlToolbar_SetDrawTextFlags|GUICtrlToolbar_SetExtendedStyle|GUICtrlToolbar_SetHotImageList|GUICtrlToolbar_SetHotItem|GUICtrlToolbar_SetImageList|GUICtrlToolbar_SetIndent|GUICtrlToolbar_SetIndeterminate|GUICtrlToolbar_SetInsertMark|GUICtrlToolbar_SetInsertMarkColor|GUICtrlToolbar_SetMaxTextRows|GUICtrlToolbar_SetMetrics|GUICtrlToolbar_SetPadding|GUICtrlToolbar_SetParent|GUICtrlToolbar_SetRows|GUICtrlToolbar_SetStyle|GUICtrlToolbar_SetStyleAltDrag|GUICtrlToolbar_SetStyleCustomErase|GUICtrlToolbar_SetStyleFlat|GUICtrlToolbar_SetStyleList|GUICtrlToolbar_SetStyleRegisterDrop|GUICtrlToolbar_SetStyleToolTips|GUICtrlToolbar_SetStyleTransparent|GUICtrlToolbar_SetStyleWrapable|GUICtrlToolbar_SetToolTips|GUICtrlToolbar_SetUnicodeFormat|GUICtrlToolbar_SetWindowTheme|GUICtrlTreeView_Add|GUICtrlTreeView_AddChild|GUICtrlTreeView_AddChildFirst|GUICtrlTreeView_AddFirst|GUICtrlTreeView_BeginUpdate|GUICtrlTreeView_ClickItem|GUICtrlTreeView_Create|GUICtrlTreeView_CreateDragImage|GUICtrlTreeView_CreateSolidBitMap|GUICtrlTreeView_Delete|GUICtrlTreeView_DeleteAll|GUICtrlTreeView_DeleteChildren|GUICtrlTreeView_Destroy|GUICtrlTreeView_DisplayRect|GUICtrlTreeView_DisplayRectEx|GUICtrlTreeView_EditText|GUICtrlTreeView_EndEdit|GUICtrlTreeView_EndUpdate|GUICtrlTreeView_EnsureVisible|GUICtrlTreeView_Expand|GUICtrlTreeView_ExpandedOnce|GUICtrlTreeView_FindItem|GUICtrlTreeView_FindItemEx|GUICtrlTreeView_GetBkColor|GUICtrlTreeView_GetBold|GUICtrlTreeView_GetChecked|GUICtrlTreeView_GetChildCount|GUICtrlTreeView_GetChildren|GUICtrlTreeView_GetCount|GUICtrlTreeView_GetCut|GUICtrlTreeView_GetDropTarget|GUICtrlTreeView_GetEditControl|GUICtrlTreeView_GetExpanded|GUICtrlTreeView_GetFirstChild|GUICtrlTreeView_GetFirstItem|GUICtrlTreeView_GetFirstVisible|GUICtrlTreeView_GetFocused|GUICtrlTreeView_GetHeight|GUICtrlTreeView_GetImageIndex|GUICtrlTreeView_GetImageListIconHandle|GUICtrlTreeView_GetIndent|GUICtrlTreeView_GetInsertMarkColor|GUICtrlTreeView_GetISearchString|GUICtrlTreeView_GetItemByIndex|GUICtrlTreeView_GetItemHandle|GUICtrlTreeView_GetItemParam|GUICtrlTreeView_GetLastChild|GUICtrlTreeView_GetLineColor|GUICtrlTreeView_GetNext|GUICtrlTreeView_GetNextChild|GUICtrlTreeView_GetNextSibling|GUICtrlTreeView_GetNextVisible|GUICtrlTreeView_GetNormalImageList|GUICtrlTreeView_GetParentHandle|GUICtrlTreeView_GetParentParam|GUICtrlTreeView_GetPrev|GUICtrlTreeView_GetPrevChild|GUICtrlTreeView_GetPrevSibling|GUICtrlTreeView_GetPrevVisible|GUICtrlTreeView_GetScrollTime|GUICtrlTreeView_GetSelected|GUICtrlTreeView_GetSelectedImageIndex|GUICtrlTreeView_GetSelection|GUICtrlTreeView_GetSiblingCount|GUICtrlTreeView_GetState|GUICtrlTreeView_GetStateImageIndex|GUICtrlTreeView_GetStateImageList|GUICtrlTreeView_GetText|GUICtrlTreeView_GetTextColor|GUICtrlTreeView_GetToolTips|GUICtrlTreeView_GetTree|GUICtrlTreeView_GetUnicodeFormat|GUICtrlTreeView_GetVisible|GUICtrlTreeView_GetVisibleCount|GUICtrlTreeView_HitTest|GUICtrlTreeView_HitTestEx|GUICtrlTreeView_HitTestItem|GUICtrlTreeView_Index|GUICtrlTreeView_InsertItem|GUICtrlTreeView_IsFirstItem|GUICtrlTreeView_IsParent|GUICtrlTreeView_Level|GUICtrlTreeView_SelectItem|GUICtrlTreeView_SelectItemByIndex|GUICtrlTreeView_SetBkColor|GUICtrlTreeView_SetBold|GUICtrlTreeView_SetChecked|GUICtrlTreeView_SetCheckedByIndex|GUICtrlTreeView_SetChildren|GUICtrlTreeView_SetCut|GUICtrlTreeView_SetDropTarget|GUICtrlTreeView_SetFocused|GUICtrlTreeView_SetHeight|GUICtrlTreeView_SetIcon|GUICtrlTreeView_SetImageIndex|GUICtrlTreeView_SetIndent|GUICtrlTreeView_SetInsertMark|GUICtrlTreeView_SetInsertMarkColor|GUICtrlTreeView_SetItemHeight|GUICtrlTreeView_SetItemParam|GUICtrlTreeView_SetLineColor|GUICtrlTreeView_SetNormalImageList|GUICtrlTreeView_SetScrollTime|GUICtrlTreeView_SetSelected|GUICtrlTreeView_SetSelectedImageIndex|GUICtrlTreeView_SetState|GUICtrlTreeView_SetStateImageIndex|GUICtrlTreeView_SetStateImageList|GUICtrlTreeView_SetText|GUICtrlTreeView_SetTextColor|GUICtrlTreeView_SetToolTips|GUICtrlTreeView_SetUnicodeFormat|GUICtrlTreeView_Sort|GUIImageList_Add|GUIImageList_AddBitmap|GUIImageList_AddIcon|GUIImageList_AddMasked|GUIImageList_BeginDrag|GUIImageList_Copy|GUIImageList_Create|GUIImageList_Destroy|GUIImageList_DestroyIcon|GUIImageList_DragEnter|GUIImageList_DragLeave|GUIImageList_DragMove|GUIImageList_Draw|GUIImageList_DrawEx|GUIImageList_Duplicate|GUIImageList_EndDrag|GUIImageList_GetBkColor|GUIImageList_GetIcon|GUIImageList_GetIconHeight|GUIImageList_GetIconSize|GUIImageList_GetIconSizeEx|GUIImageList_GetIconWidth|GUIImageList_GetImageCount|GUIImageList_GetImageInfoEx|GUIImageList_Remove|GUIImageList_ReplaceIcon|GUIImageList_SetBkColor|GUIImageList_SetIconSize|GUIImageList_SetImageCount|GUIImageList_Swap|GUIScrollBars_EnableScrollBar|GUIScrollBars_GetScrollBarInfoEx|GUIScrollBars_GetScrollBarRect|GUIScrollBars_GetScrollBarRGState|GUIScrollBars_GetScrollBarXYLineButton|GUIScrollBars_GetScrollBarXYThumbBottom|GUIScrollBars_GetScrollBarXYThumbTop|GUIScrollBars_GetScrollInfo|GUIScrollBars_GetScrollInfoEx|GUIScrollBars_GetScrollInfoMax|GUIScrollBars_GetScrollInfoMin|GUIScrollBars_GetScrollInfoPage|GUIScrollBars_GetScrollInfoPos|GUIScrollBars_GetScrollInfoTrackPos|GUIScrollBars_GetScrollPos|GUIScrollBars_GetScrollRange|GUIScrollBars_Init|GUIScrollBars_ScrollWindow|GUIScrollBars_SetScrollInfo|GUIScrollBars_SetScrollInfoMax|GUIScrollBars_SetScrollInfoMin|GUIScrollBars_SetScrollInfoPage|GUIScrollBars_SetScrollInfoPos|GUIScrollBars_SetScrollRange|GUIScrollBars_ShowScrollBar|GUIToolTip_Activate|GUIToolTip_AddTool|GUIToolTip_AdjustRect|GUIToolTip_BitsToTTF|GUIToolTip_Create|GUIToolTip_DelTool|GUIToolTip_Destroy|GUIToolTip_EnumTools|GUIToolTip_GetBubbleHeight|GUIToolTip_GetBubbleSize|GUIToolTip_GetBubbleWidth|GUIToolTip_GetCurrentTool|GUIToolTip_GetDelayTime|GUIToolTip_GetMargin|GUIToolTip_GetMarginEx|GUIToolTip_GetMaxTipWidth|GUIToolTip_GetText|GUIToolTip_GetTipBkColor|GUIToolTip_GetTipTextColor|GUIToolTip_GetTitleBitMap|GUIToolTip_GetTitleText|GUIToolTip_GetToolCount|GUIToolTip_GetToolInfo|GUIToolTip_HitTest|GUIToolTip_NewToolRect|GUIToolTip_Pop|GUIToolTip_PopUp|GUIToolTip_SetDelayTime|GUIToolTip_SetMargin|GUIToolTip_SetMaxTipWidth|GUIToolTip_SetTipBkColor|GUIToolTip_SetTipTextColor|GUIToolTip_SetTitle|GUIToolTip_SetToolInfo|GUIToolTip_SetWindowTheme|GUIToolTip_ToolExists|GUIToolTip_ToolToArray|GUIToolTip_TrackActivate|GUIToolTip_TrackPosition|GUIToolTip_TTFToBits|GUIToolTip_Update|GUIToolTip_UpdateTipText|HexToString|IE_Example|IE_Introduction|IE_VersionInfo|IEAction|IEAttach|IEBodyReadHTML|IEBodyReadText|IEBodyWriteHTML|IECreate|IECreateEmbedded|IEDocGetObj|IEDocInsertHTML|IEDocInsertText|IEDocReadHTML|IEDocWriteHTML|IEErrorHandlerDeRegister|IEErrorHandlerRegister|IEErrorNotify|IEFormElementCheckBoxSelect|IEFormElementGetCollection|IEFormElementGetObjByName|IEFormElementGetValue|IEFormElementOptionSelect|IEFormElementRadioSelect|IEFormElementSetValue|IEFormGetCollection|IEFormGetObjByName|IEFormImageClick|IEFormReset|IEFormSubmit|IEFrameGetCollection|IEFrameGetObjByName|IEGetObjById|IEGetObjByName|IEHeadInsertEventScript|IEImgClick|IEImgGetCollection|IEIsFrameSet|IELinkClickByIndex|IELinkClickByText|IELinkGetCollection|IELoadWait|IELoadWaitTimeout|IENavigate|IEPropertyGet|IEPropertySet|IEQuit|IETableGetCollection|IETableWriteToArray|IETagNameAllGetCollection|IETagNameGetCollection|Iif|INetExplorerCapable|INetGetSource|INetMail|INetSmtpMail|IsPressed|MathCheckDiv|Max|MemGlobalAlloc|MemGlobalFree|MemGlobalLock|MemGlobalSize|MemGlobalUnlock|MemMoveMemory|MemMsgBox|MemShowError|MemVirtualAlloc|MemVirtualAllocEx|MemVirtualFree|MemVirtualFreeEx|Min|MouseTrap|NamedPipes_CallNamedPipe|NamedPipes_ConnectNamedPipe|NamedPipes_CreateNamedPipe|NamedPipes_CreatePipe|NamedPipes_DisconnectNamedPipe|NamedPipes_GetNamedPipeHandleState|NamedPipes_GetNamedPipeInfo|NamedPipes_PeekNamedPipe|NamedPipes_SetNamedPipeHandleState|NamedPipes_TransactNamedPipe|NamedPipes_WaitNamedPipe|Net_Share_ConnectionEnum|Net_Share_FileClose|Net_Share_FileEnum|Net_Share_FileGetInfo|Net_Share_PermStr|Net_Share_ResourceStr|Net_Share_SessionDel|Net_Share_SessionEnum|Net_Share_SessionGetInfo|Net_Share_ShareAdd|Net_Share_ShareCheck|Net_Share_ShareDel|Net_Share_ShareEnum|Net_Share_ShareGetInfo|Net_Share_ShareSetInfo|Net_Share_StatisticsGetSvr|Net_Share_StatisticsGetWrk|Now|NowCalc|NowCalcDate|NowDate|NowTime|PathFull|PathMake|PathSplit|ProcessGetName|ProcessGetPriority|Radian|ReplaceStringInFile|RunDOS|ScreenCapture_Capture|ScreenCapture_CaptureWnd|ScreenCapture_SaveImage|ScreenCapture_SetBMPFormat|ScreenCapture_SetJPGQuality|ScreenCapture_SetTIFColorDepth|ScreenCapture_SetTIFCompression|Security__AdjustTokenPrivileges|Security__GetAccountSid|Security__GetLengthSid|Security__GetTokenInformation|Security__ImpersonateSelf|Security__IsValidSid|Security__LookupAccountName|Security__LookupAccountSid|Security__LookupPrivilegeValue|Security__OpenProcessToken|Security__OpenThreadToken|Security__OpenThreadTokenEx|Security__SetPrivilege|Security__SidToStringSid|Security__SidTypeStr|Security__StringSidToSid|SendMessage|SendMessageA|SetDate|SetTime|Singleton|SoundClose|SoundLength|SoundOpen|SoundPause|SoundPlay|SoundPos|SoundResume|SoundSeek|SoundStatus|SoundStop|SQLite_Changes|SQLite_Close|SQLite_Display2DResult|SQLite_Encode|SQLite_ErrCode|SQLite_ErrMsg|SQLite_Escape|SQLite_Exec|SQLite_FetchData|SQLite_FetchNames|SQLite_GetTable|SQLite_GetTable2d|SQLite_LastInsertRowID|SQLite_LibVersion|SQLite_Open|SQLite_Query|SQLite_QueryFinalize|SQLite_QueryReset|SQLite_QuerySingleRow|SQLite_SaveMode|SQLite_SetTimeout|SQLite_Shutdown|SQLite_SQLiteExe|SQLite_Startup|SQLite_TotalChanges|StringAddComma|StringBetween|StringEncrypt|StringInsert|StringProper|StringRepeat|StringReverse|StringSplit|StringToHex|TCPIpToName|TempFile|TicksToTime|Timer_Diff|Timer_GetTimerID|Timer_Init|Timer_KillAllTimers|Timer_KillTimer|Timer_SetTimer|TimeToTicks|VersionCompare|viClose|viExecCommand|viFindGpib|viGpibBusReset|viGTL|viOpen|viSetAttribute|viSetTimeout|WeekNumberISO|WinAPI_AttachConsole|WinAPI_AttachThreadInput|WinAPI_Beep|WinAPI_BitBlt|WinAPI_CallNextHookEx|WinAPI_Check|WinAPI_ClientToScreen|WinAPI_CloseHandle|WinAPI_CommDlgExtendedError|WinAPI_CopyIcon|WinAPI_CreateBitmap|WinAPI_CreateCompatibleBitmap|WinAPI_CreateCompatibleDC|WinAPI_CreateEvent|WinAPI_CreateFile|WinAPI_CreateFont|WinAPI_CreateFontIndirect|WinAPI_CreateProcess|WinAPI_CreateSolidBitmap|WinAPI_CreateSolidBrush|WinAPI_CreateWindowEx|WinAPI_DefWindowProc|WinAPI_DeleteDC|WinAPI_DeleteObject|WinAPI_DestroyIcon|WinAPI_DestroyWindow|WinAPI_DrawEdge|WinAPI_DrawFrameControl|WinAPI_DrawIcon|WinAPI_DrawIconEx|WinAPI_DrawText|WinAPI_EnableWindow|WinAPI_EnumDisplayDevices|WinAPI_EnumWindows|WinAPI_EnumWindowsPopup|WinAPI_EnumWindowsTop|WinAPI_ExpandEnvironmentStrings|WinAPI_ExtractIconEx|WinAPI_FatalAppExit|WinAPI_FillRect|WinAPI_FindExecutable|WinAPI_FindWindow|WinAPI_FlashWindow|WinAPI_FlashWindowEx|WinAPI_FloatToInt|WinAPI_FlushFileBuffers|WinAPI_FormatMessage|WinAPI_FrameRect|WinAPI_FreeLibrary|WinAPI_GetAncestor|WinAPI_GetAsyncKeyState|WinAPI_GetClassName|WinAPI_GetClientHeight|WinAPI_GetClientRect|WinAPI_GetClientWidth|WinAPI_GetCurrentProcess|WinAPI_GetCurrentProcessID|WinAPI_GetCurrentThread|WinAPI_GetCurrentThreadId|WinAPI_GetCursorInfo|WinAPI_GetDC|WinAPI_GetDesktopWindow|WinAPI_GetDeviceCaps|WinAPI_GetDIBits|WinAPI_GetDlgCtrlID|WinAPI_GetDlgItem|WinAPI_GetFileSizeEx|WinAPI_GetFocus|WinAPI_GetForegroundWindow|WinAPI_GetIconInfo|WinAPI_GetLastError|WinAPI_GetLastErrorMessage|WinAPI_GetModuleHandle|WinAPI_GetMousePos|WinAPI_GetMousePosX|WinAPI_GetMousePosY|WinAPI_GetObject|WinAPI_GetOpenFileName|WinAPI_GetOverlappedResult|WinAPI_GetParent|WinAPI_GetProcessAffinityMask|WinAPI_GetSaveFileName|WinAPI_GetStdHandle|WinAPI_GetStockObject|WinAPI_GetSysColor|WinAPI_GetSysColorBrush|WinAPI_GetSystemMetrics|WinAPI_GetTextExtentPoint32|WinAPI_GetWindow|WinAPI_GetWindowDC|WinAPI_GetWindowHeight|WinAPI_GetWindowLong|WinAPI_GetWindowRect|WinAPI_GetWindowText|WinAPI_GetWindowThreadProcessId|WinAPI_GetWindowWidth|WinAPI_GetXYFromPoint|WinAPI_GlobalMemStatus|WinAPI_GUIDFromString|WinAPI_GUIDFromStringEx|WinAPI_HiWord|WinAPI_InProcess|WinAPI_IntToFloat|WinAPI_InvalidateRect|WinAPI_IsClassName|WinAPI_IsWindow|WinAPI_IsWindowVisible|WinAPI_LoadBitmap|WinAPI_LoadImage|WinAPI_LoadLibrary|WinAPI_LoadLibraryEx|WinAPI_LoadShell32Icon|WinAPI_LoadString|WinAPI_LocalFree|WinAPI_LoWord|WinAPI_MakeDWord|WinAPI_MAKELANGID|WinAPI_MAKELCID|WinAPI_MakeLong|WinAPI_MessageBeep|WinAPI_Mouse_Event|WinAPI_MoveWindow|WinAPI_MsgBox|WinAPI_MulDiv|WinAPI_MultiByteToWideChar|WinAPI_MultiByteToWideCharEx|WinAPI_OpenProcess|WinAPI_PointFromRect|WinAPI_PostMessage|WinAPI_PrimaryLangId|WinAPI_PtInRect|WinAPI_ReadFile|WinAPI_ReadProcessMemory|WinAPI_RectIsEmpty|WinAPI_RedrawWindow|WinAPI_RegisterWindowMessage|WinAPI_ReleaseCapture|WinAPI_ReleaseDC|WinAPI_ScreenToClient|WinAPI_SelectObject|WinAPI_SetBkColor|WinAPI_SetCapture|WinAPI_SetCursor|WinAPI_SetDefaultPrinter|WinAPI_SetDIBits|WinAPI_SetEvent|WinAPI_SetFocus|WinAPI_SetFont|WinAPI_SetHandleInformation|WinAPI_SetLastError|WinAPI_SetParent|WinAPI_SetProcessAffinityMask|WinAPI_SetSysColors|WinAPI_SetTextColor|WinAPI_SetWindowLong|WinAPI_SetWindowPos|WinAPI_SetWindowsHookEx|WinAPI_SetWindowText|WinAPI_ShowCursor|WinAPI_ShowError|WinAPI_ShowMsg|WinAPI_ShowWindow|WinAPI_StringFromGUID|WinAPI_SubLangId|WinAPI_SystemParametersInfo|WinAPI_TwipsPerPixelX|WinAPI_TwipsPerPixelY|WinAPI_UnhookWindowsHookEx|WinAPI_UpdateLayeredWindow|WinAPI_UpdateWindow|WinAPI_ValidateClassName|WinAPI_WaitForInputIdle|WinAPI_WaitForMultipleObjects|WinAPI_WaitForSingleObject|WinAPI_WideCharToMultiByte|WinAPI_WindowFromPoint|WinAPI_WriteConsole|WinAPI_WriteFile|WinAPI_WriteProcessMemory|WinNet_AddConnection|WinNet_AddConnection2|WinNet_AddConnection3|WinNet_CancelConnection|WinNet_CancelConnection2|WinNet_CloseEnum|WinNet_ConnectionDialog|WinNet_ConnectionDialog1|WinNet_DisconnectDialog|WinNet_DisconnectDialog1|WinNet_EnumResource|WinNet_GetConnection|WinNet_GetConnectionPerformance|WinNet_GetLastError|WinNet_GetNetworkInformation|WinNet_GetProviderName|WinNet_GetResourceInformation|WinNet_GetResourceParent|WinNet_GetUniversalName|WinNet_GetUser|WinNet_OpenEnum|WinNet_RestoreConnection|WinNet_UseConnection|Word_VersionInfo|WordAttach|WordCreate|WordDocAdd|WordDocAddLink|WordDocAddPicture|WordDocClose|WordDocFindReplace|WordDocGetCollection|WordDocLinkGetCollection|WordDocOpen|WordDocPrint|WordDocPropertyGet|WordDocPropertySet|WordDocSave|WordDocSaveAs|WordErrorHandlerDeRegister|WordErrorHandlerRegister|WordErrorNotify|WordMacroRun|WordPropertyGet|WordPropertySet|WordQuit|' +\n        'ce|comments-end|comments-start|cs|include|include-once|NoTrayIcon|RequireAdmin|' +\n        'AutoIt3Wrapper_Au3Check_Parameters|AutoIt3Wrapper_Au3Check_Stop_OnWarning|AutoIt3Wrapper_Change2CUI|AutoIt3Wrapper_Compression|AutoIt3Wrapper_cvsWrapper_Parameters|AutoIt3Wrapper_Icon|AutoIt3Wrapper_Outfile|AutoIt3Wrapper_Outfile_Type|AutoIt3Wrapper_Plugin_Funcs|AutoIt3Wrapper_Res_Comment|AutoIt3Wrapper_Res_Description|AutoIt3Wrapper_Res_Field|AutoIt3Wrapper_Res_File_Add|AutoIt3Wrapper_Res_Fileversion|AutoIt3Wrapper_Res_FileVersion_AutoIncrement|AutoIt3Wrapper_Res_Icon_Add|AutoIt3Wrapper_Res_Language|AutoIt3Wrapper_Res_LegalCopyright|AutoIt3Wrapper_res_requestedExecutionLevel|AutoIt3Wrapper_Res_SaveSource|AutoIt3Wrapper_Run_After|AutoIt3Wrapper_Run_Au3check|AutoIt3Wrapper_Run_Before|AutoIt3Wrapper_Run_cvsWrapper|AutoIt3Wrapper_Run_Debug_Mode|AutoIt3Wrapper_Run_Obfuscator|AutoIt3Wrapper_Run_Tidy|AutoIt3Wrapper_Tidy_Stop_OnError|AutoIt3Wrapper_UseAnsi|AutoIt3Wrapper_UseUpx|AutoIt3Wrapper_UseX64|AutoIt3Wrapper_Version|EndRegion|forceref|Obfuscator_Ignore_Funcs|Obfuscator_Ignore_Variables|Obfuscator_Parameters|Region|Tidy_Parameters';\n    var atKeywords = 'AppDataCommonDir|AppDataDir|AutoItExe|AutoItPID|AutoItUnicode|AutoItVersion|AutoItX64|COM_EventObj|CommonFilesDir|Compiled|ComputerName|ComSpec|CR|CRLF|DesktopCommonDir|DesktopDepth|DesktopDir|DesktopHeight|DesktopRefresh|DesktopWidth|DocumentsCommonDir|error|exitCode|exitMethod|extended|FavoritesCommonDir|FavoritesDir|GUI_CtrlHandle|GUI_CtrlId|GUI_DragFile|GUI_DragId|GUI_DropId|GUI_WinHandle|HomeDrive|HomePath|HomeShare|HotKeyPressed|HOUR|InetGetActive|InetGetBytesRead|IPAddress1|IPAddress2|IPAddress3|IPAddress4|KBLayout|LF|LogonDNSDomain|LogonDomain|LogonServer|MDAY|MIN|MON|MyDocumentsDir|NumParams|OSBuild|OSLang|OSServicePack|OSTYPE|OSVersion|ProcessorArch|ProgramFilesDir|ProgramsCommonDir|ProgramsDir|ScriptDir|ScriptFullPath|ScriptLineNumber|ScriptName|SEC|StartMenuCommonDir|StartMenuDir|StartupCommonDir|StartupDir|SW_DISABLE|SW_ENABLE|SW_HIDE|SW_LOCK|SW_MAXIMIZE|SW_MINIMIZE|SW_RESTORE|SW_SHOW|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWMINNOACTIVE|SW_SHOWNA|SW_SHOWNOACTIVATE|SW_SHOWNORMAL|SW_UNLOCK|SystemDir|TAB|TempDir|TRAY_ID|TrayIconFlashing|TrayIconVisible|UserName|UserProfileDir|WDAY|WindowsDir|WorkingDir|YDAY|YEAR';\n    \n    this.$rules = { start: \n       [ { token: 'comment.line.ahk', regex: '(?:^| );.*$' },\n         { token: 'comment.block.ahk',\n           regex: '/\\\\*', push: \n            [ { token: 'comment.block.ahk', regex: '\\\\*/', next: 'pop' },\n              { defaultToken: 'comment.block.ahk' } ] },\n         { token: 'doc.comment.ahk',\n           regex: '#cs', push: \n            [ { token: 'doc.comment.ahk', regex: '#ce', next: 'pop' },\n              { defaultToken: 'doc.comment.ahk' } ] },\n         { token: 'keyword.command.ahk',\n           regex: '(?:\\\\b|^)(?:allowsamelinecomments|clipboardtimeout|commentflag|errorstdout|escapechar|hotkeyinterval|hotkeymodifiertimeout|hotstring|include|includeagain|installkeybdhook|installmousehook|keyhistory|ltrim|maxhotkeysperinterval|maxmem|maxthreads|maxthreadsbuffer|maxthreadsperhotkey|noenv|notrayicon|persistent|singleinstance|usehook|winactivateforce|autotrim|blockinput|click|clipwait|continue|control|controlclick|controlfocus|controlget|controlgetfocus|controlgetpos|controlgettext|controlmove|controlsend|controlsendraw|controlsettext|coordmode|critical|detecthiddentext|detecthiddenwindows|drive|driveget|drivespacefree|edit|endrepeat|envadd|envdiv|envget|envmult|envset|envsub|envupdate|exit|exitapp|fileappend|filecopy|filecopydir|filecreatedir|filecreateshortcut|filedelete|filegetattrib|filegetshortcut|filegetsize|filegettime|filegetversion|fileinstall|filemove|filemovedir|fileread|filereadline|filerecycle|filerecycleempty|fileremovedir|fileselectfile|fileselectfolder|filesetattrib|filesettime|formattime|getkeystate|gosub|goto|groupactivate|groupadd|groupclose|groupdeactivate|gui|guicontrol|guicontrolget|hideautoitwin|hotkey|ifequal|ifexist|ifgreater|ifgreaterorequal|ifinstring|ifless|iflessorequal|ifmsgbox|ifnotequal|ifnotexist|ifnotinstring|ifwinactive|ifwinexist|ifwinnotactive|ifwinnotexist|imagesearch|inidelete|iniread|iniwrite|input|inputbox|keyhistory|keywait|listhotkeys|listlines|listvars|menu|mouseclick|mouseclickdrag|mousegetpos|mousemove|msgbox|onexit|outputdebug|pause|pixelgetcolor|pixelsearch|postmessage|process|progress|random|regdelete|regread|regwrite|reload|repeat|run|runas|runwait|send|sendevent|sendinput|sendmode|sendplay|sendmessage|sendraw|setbatchlines|setcapslockstate|setcontroldelay|setdefaultmousespeed|setenv|setformat|setkeydelay|setmousedelay|setnumlockstate|setscrolllockstate|setstorecapslockmode|settimer|settitlematchmode|setwindelay|setworkingdir|shutdown|sleep|sort|soundbeep|soundget|soundgetwavevolume|soundplay|soundset|soundsetwavevolume|splashimage|splashtextoff|splashtexton|splitpath|statusbargettext|statusbarwait|stringcasesense|stringgetpos|stringleft|stringlen|stringlower|stringmid|stringreplace|stringright|stringsplit|stringtrimleft|stringtrimright|stringupper|suspend|sysget|thread|tooltip|transform|traytip|urldownloadtofile|while|winactivate|winactivatebottom|winclose|winget|wingetactivestats|wingetactivetitle|wingetclass|wingetpos|wingettext|wingettitle|winhide|winkill|winmaximize|winmenuselectitem|winminimize|winminimizeall|winminimizeallundo|winmove|winrestore|winset|winsettitle|winshow|winwait|winwaitactive|winwaitclose|winwaitnotactive)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.ahk',\n           regex: '(?:\\\\b|^)(?:if|else|return|loop|break|for|while|global|local|byref)\\\\b',\n           caseInsensitive: true },\n         { token: 'support.function.ahk',\n           regex: '(?:\\\\b|^)(?:abs|acos|asc|asin|atan|ceil|chr|cos|dllcall|exp|fileexist|floor|getkeystate|il_add|il_create|il_destroy|instr|substr|isfunc|islabel|ln|log|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|onmessage|numget|numput|registercallback|regexmatch|regexreplace|round|sin|tan|sqrt|strlen|sb_seticon|sb_setparts|sb_settext|tv_add|tv_delete|tv_getchild|tv_getcount|tv_getnext|tv_get|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist)\\\\b',\n           caseInsensitive: true },\n         { token: 'variable.predefined.ahk',\n           regex: '(?:\\\\b|^)(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_formatfloat|a_formatinteger|a_gui|a_guievent|a_guicontrol|a_guicontrolevent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|programfiles|a_programfiles|a_programs|a_programscommon|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel)\\\\b',\n           caseInsensitive: true },\n         { token: 'support.constant.ahk',\n           regex: '(?:\\\\b|^)(?:shift|lshift|rshift|alt|lalt|ralt|control|lcontrol|rcontrol|ctrl|lctrl|rctrl|lwin|rwin|appskey|altdown|altup|shiftdown|shiftup|ctrldown|ctrlup|lwindown|lwinup|rwindown|rwinup|lbutton|rbutton|mbutton|wheelup|wheelleft|wheelright|wheeldown|xbutton1|xbutton2|joy1|joy2|joy3|joy4|joy5|joy6|joy7|joy8|joy9|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy30|joy31|joy32|joyx|joyy|joyz|joyr|joyu|joyv|joypov|joyname|joybuttons|joyaxes|joyinfo|space|tab|enter|escape|esc|backspace|bs|delete|del|insert|ins|pgup|pgdn|home|end|up|down|left|right|printscreen|ctrlbreak|pause|scrolllock|capslock|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadmult|numpadadd|numpadsub|numpaddiv|numpaddot|numpaddel|numpadins|numpadclear|numpadup|numpaddown|numpadleft|numpadright|numpadhome|numpadend|numpadpgup|numpadpgdn|numpadenter|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f20|f21|f22|f23|f24|browser_back|browser_forward|browser_refresh|browser_stop|browser_search|browser_favorites|browser_home|volume_mute|volume_down|volume_up|media_next|media_prev|media_stop|media_play_pause|launch_mail|launch_media|launch_app1|launch_app2)\\\\b',\n           caseInsensitive: true },\n         { token: 'variable.parameter',\n           regex: '(?:\\\\b|^)(?:pixel|mouse|screen|relative|rgb|ltrim|rtrim|join|low|belownormal|normal|abovenormal|high|realtime|ahk_id|ahk_pid|ahk_class|ahk_group|between|contains|in|is|integer|float|integerfast|floatfast|number|digit|xdigit|alpha|upper|lower|alnum|time|date|not|or|and|alwaysontop|topmost|top|bottom|transparent|transcolor|redraw|region|id|idlast|processname|minmax|controllist|count|list|capacity|statuscd|eject|lock|unlock|label|filesystem|label|setlabel|serial|type|status|static|seconds|minutes|hours|days|read|parse|logoff|close|error|single|tray|add|rename|check|uncheck|togglecheck|enable|disable|toggleenable|default|nodefault|standard|nostandard|color|delete|deleteall|icon|noicon|tip|click|show|mainwindow|nomainwindow|useerrorlevel|text|picture|pic|groupbox|button|checkbox|radio|dropdownlist|ddl|combobox|listbox|listview|datetime|monthcal|updown|slider|tab|tab2|statusbar|treeview|iconsmall|tile|report|sortdesc|nosort|nosorthdr|grid|hdr|autosize|range|xm|ym|ys|xs|xp|yp|font|resize|owner|submit|nohide|minimize|maximize|restore|noactivate|na|cancel|destroy|center|margin|maxsize|minsize|owndialogs|guiescape|guiclose|guisize|guicontextmenu|guidropfiles|tabstop|section|altsubmit|wrap|hscroll|vscroll|border|top|bottom|buttons|expand|first|imagelist|lines|wantctrla|wantf2|vis|visfirst|number|uppercase|lowercase|limit|password|multi|wantreturn|group|background|bold|italic|strike|underline|norm|backgroundtrans|theme|caption|delimiter|minimizebox|maximizebox|sysmenu|toolwindow|flash|style|exstyle|check3|checked|checkedgray|readonly|password|hidden|left|right|center|notab|section|move|focus|hide|choose|choosestring|text|pos|enabled|disabled|visible|lastfound|lastfoundexist|alttab|shiftalttab|alttabmenu|alttabandmenu|alttabmenudismiss|notimers|interrupt|priority|waitclose|blind|raw|unicode|deref|pow|bitnot|bitand|bitor|bitxor|bitshiftleft|bitshiftright|yes|no|ok|cancel|abort|retry|ignore|tryagain|on|off|all|hkey_local_machine|hkey_users|hkey_current_user|hkey_classes_root|hkey_current_config|hklm|hku|hkcu|hkcr|hkcc|reg_sz|reg_expand_sz|reg_multi_sz|reg_dword|reg_qword|reg_binary|reg_link|reg_resource_list|reg_full_resource_descriptor|reg_resource_requirements_list|reg_dword_big_endian)\\\\b',\n           caseInsensitive: true },\n         { keywordMap: {\"constant.language\": autoItKeywords}, regex: '\\\\w+\\\\b'},\n         { keywordMap: {\"variable.function\": atKeywords}, regex: '@\\\\w+\\\\b'},\n         { token : \"constant.numeric\", regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},\n         { token: 'keyword.operator.ahk',\n           regex: '=|==|<>|:=|<|>|\\\\*|\\\\/|\\\\+|:|\\\\?|\\\\-' },\n         { token: 'punctuation.ahk',\n           regex: '#|`|::|,|\\\\{|\\\\}|\\\\(|\\\\)|\\\\%' },\n         { token: \n            [ 'punctuation.quote.double',\n              'string.quoted.ahk',\n              'punctuation.quote.double' ],\n           regex: '(\")((?:[^\"]|\"\")*)(\")' },\n         { token: [ 'label.ahk', 'punctuation.definition.label.ahk' ],\n           regex: '^([^: ]+)(:)(?!:)' } ] };\n    \n    this.normalizeRules();\n};\n\nAutoHotKeyHighlightRules.metaData = { name: 'AutoHotKey',\n      scopeName: 'source.ahk',\n      fileTypes: [ 'ahk' ],\n      foldingStartMarker: '^\\\\s*/\\\\*|^(?![^{]*?;|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|;|/\\\\*(?!.*?\\\\*/.*\\\\S))',\n      foldingStopMarker: '^\\\\s*\\\\*/|^\\\\s*\\\\}' };\n\n\noop.inherits(AutoHotKeyHighlightRules, TextHighlightRules);\n\nexports.AutoHotKeyHighlightRules = AutoHotKeyHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/autohotkey\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/autohotkey_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AutoHotKeyHighlightRules = require(\"./autohotkey_highlight_rules\").AutoHotKeyHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AutoHotKeyHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \";\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/autohotkey\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-batchfile.js",
    "content": "ace.define(\"ace/mode/batchfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar BatchFileHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'keyword.command.dosbatch',\n           regex: '\\\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.statement.dosbatch',\n           regex: '\\\\b(?:goto|call|exit)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.conditional.if.dosbatch',\n           regex: '\\\\bif\\\\s+not\\\\s+(?:exist|defined|errorlevel|cmdextversion)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.conditional.dosbatch',\n           regex: '\\\\b(?:if|else)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.repeat.dosbatch',\n           regex: '\\\\bfor\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.operator.dosbatch',\n           regex: '\\\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\\\b' },\n         { token: ['doc.comment', 'comment'],\n           regex: '(?:^|\\\\b)(rem)($|\\\\s.*$)',\n           caseInsensitive: true },\n         { token: 'comment.line.colons.dosbatch',\n           regex: '::.*$' },\n         { include: 'variable' },\n         { token: 'punctuation.definition.string.begin.shell',\n           regex: '\"',\n           push: [ \n              { token: 'punctuation.definition.string.end.shell', regex: '\"', next: 'pop' },\n              { include: 'variable' },\n              { defaultToken: 'string.quoted.double.dosbatch' } ] },\n         { token: 'keyword.operator.pipe.dosbatch', regex: '[|]' },\n         { token: 'keyword.operator.redirect.shell',\n           regex: '&>|\\\\d*>&\\\\d*|\\\\d*(?:>>|>|<)|\\\\d*<&|\\\\d*<>' } ],\n        variable: [\n         { token: 'constant.numeric', regex: '%%\\\\w+|%[*\\\\d]|%\\\\w+%'},\n         { token: 'constant.numeric', regex: '%~\\\\d+'},\n         { token: ['markup.list', 'constant.other', 'markup.list'],\n            regex: '(%)(\\\\w+)(%?)' }]};\n    \n    this.normalizeRules();\n};\n\nBatchFileHighlightRules.metaData = { name: 'Batch File',\n      scopeName: 'source.dosbatch',\n      fileTypes: [ 'bat' ] };\n\n\noop.inherits(BatchFileHighlightRules, TextHighlightRules);\n\nexports.BatchFileHighlightRules = BatchFileHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/batchfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/batchfile_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar BatchFileHighlightRules = require(\"./batchfile_highlight_rules\").BatchFileHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = BatchFileHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"::\";\n    this.blockComment = \"\";\n    this.$id = \"ace/mode/batchfile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-bro.js",
    "content": "ace.define(\"ace/mode/bro_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar BroHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"punctuation.definition.comment.bro\",\n            regex: /#/,\n            push: [{\n                token: \"comment.line.number-sign.bro\",\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.line.number-sign.bro\"\n            }]\n        }, {\n            token: \"keyword.control.bro\",\n            regex: /\\b(?:break|case|continue|else|for|if|return|switch|next|when|timeout|schedule)\\b/\n        }, {\n            token: [\n                \"meta.function.bro\",\n                \"meta.function.bro\",\n                \"storage.type.bro\",\n                \"meta.function.bro\",\n                \"entity.name.function.bro\",\n                \"meta.function.bro\"\n            ],\n            regex: /^(\\s*)(?:function|hook|event)(\\s*)(.*)(\\s*\\()(.*)(\\).*$)/\n        }, {\n            token: \"storage.type.bro\",\n            regex: /\\b(?:bool|enum|double|int|count|port|addr|subnet|any|file|interval|time|string|table|vector|set|record|pattern|hook)\\b/\n        }, {\n            token: \"storage.modifier.bro\",\n            regex: /\\b(?:global|const|redef|local|&(?:optional|rotate_interval|rotate_size|add_func|del_func|expire_func|expire_create|expire_read|expire_write|persistent|synchronized|encrypt|mergeable|priority|group|type_column|log|error_handler))\\b/\n        }, {\n            token: \"keyword.operator.bro\",\n            regex: /\\s*(?:\\||&&|(?:>|<|!)=?|==)\\s*|\\b!?in\\b/\n        }, {\n            token: \"constant.language.bro\",\n            regex: /\\b(?:T|F)\\b/\n        }, {\n            token: \"constant.numeric.bro\",\n            regex: /\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:\\/(?:tcp|udp|icmp)|\\s*(?:u?sec|min|hr|day)s?)?\\b/\n        }, {\n            token: \"punctuation.definition.string.begin.bro\",\n            regex: /\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.bro\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                include: \"#string_escaped_char\"\n            }, {\n                include: \"#string_placeholder\"\n            }, {\n                defaultToken: \"string.quoted.double.bro\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.bro\",\n            regex: /\\//,\n            push: [{\n                token: \"punctuation.definition.string.end.bro\",\n                regex: /\\//,\n                next: \"pop\"\n            }, {\n                include: \"#string_escaped_char\"\n            }, {\n                include: \"#string_placeholder\"\n            }, {\n                defaultToken: \"string.quoted.regex.bro\"\n            }]\n        }, {\n            token: [\n                \"meta.preprocessor.bro.load\",\n                \"keyword.other.special-method.bro\"\n            ],\n            regex: /^(\\s*)(\\@load(?:-sigs)?)\\b/,\n            push: [{\n                token: [],\n                regex: /(?=\\#)|$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"meta.preprocessor.bro.load\"\n            }]\n        }, {\n            token: [\n                \"meta.preprocessor.bro.if\",\n                \"keyword.other.special-method.bro\",\n                \"meta.preprocessor.bro.if\"\n            ],\n            regex: /^(\\s*)(\\@endif|\\@if(?:n?def)?)(.*$)/,\n            push: [{\n                token: [],\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"meta.preprocessor.bro.if\"\n            }]\n        }],\n        \"#disabled\": [{\n            token: \"text\",\n            regex: /^\\s*\\@if(?:n?def)?\\b.*$/,\n            push: [{\n                token: \"text\",\n                regex: /^\\s*\\@endif\\b.*$/,\n                next: \"pop\"\n            }, {\n                include: \"#disabled\"\n            }, {\n                include: \"#pragma-mark\"\n            }],\n            comment: \"eat nested preprocessor ifdefs\"\n        }],\n        \"#preprocessor-rule-other\": [{\n            token: [\n                \"text\",\n                \"meta.preprocessor.bro\",\n                \"meta.preprocessor.bro\",\n                \"text\"\n            ],\n            regex: /^(\\s*)(@if)((?:n?def)?)\\b(.*?)(?:(?=)|$)/,\n            push: [{\n                token: [\"text\", \"meta.preprocessor.bro\", \"text\"],\n                regex: /^(\\s*)(@endif)\\b(.*$)/,\n                next: \"pop\"\n            }, {\n                include: \"$base\"\n            }]\n        }],\n        \"#string_escaped_char\": [{\n            token: \"constant.character.escape.bro\",\n            regex: /\\\\(?:\\\\|[abefnprtv'\"?]|[0-3]\\d{,2}|[4-7]\\d?|x[a-fA-F0-9]{,2})/\n        }, {\n            token: \"invalid.illegal.unknown-escape.bro\",\n            regex: /\\\\./\n        }],\n        \"#string_placeholder\": [{\n            token: \"constant.other.placeholder.bro\",\n            regex: /%(?:\\d+\\$)?[#0\\- +']*[,;:_]?(?:-?\\d+|\\*(?:-?\\d+\\$)?)?(?:\\.(?:-?\\d+|\\*(?:-?\\d+\\$)?)?)?(?:hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?[diouxXDOUeEfFgGaACcSspn%]/\n        }, {\n            token: \"invalid.illegal.placeholder.bro\",\n            regex: /%/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nBroHighlightRules.metaData = {\n    fileTypes: [\"bro\"],\n    foldingStartMarker: \"^(\\\\@if(n?def)?)\",\n    foldingStopMarker: \"^\\\\@endif\",\n    keyEquivalent: \"@B\",\n    name: \"Bro\",\n    scopeName: \"source.bro\"\n};\n\n\noop.inherits(BroHighlightRules, TextHighlightRules);\n\nexports.BroHighlightRules = BroHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/bro\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/bro_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar BroHighlightRules = require(\"./bro_highlight_rules\").BroHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = BroHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/bro\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/bro\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-c9search.js",
    "content": "ace.define(\"ace/mode/c9search_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nfunction safeCreateRegexp(source, flag) {\n    try {\n        return new RegExp(source, flag);\n    } catch(e) {}\n}\n\nvar C9SearchHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                tokenNames : [\"c9searchresults.constant.numeric\", \"c9searchresults.text\", \"c9searchresults.text\", \"c9searchresults.keyword\"],\n                regex : /(^\\s+[0-9]+)(:)(\\d*\\s?)([^\\r\\n]+)/,\n                onMatch : function(val, state, stack) {\n                    var values = this.splitRegex.exec(val);\n                    var types = this.tokenNames;\n                    var tokens = [{\n                        type: types[0],\n                        value: values[1]\n                    }, {\n                        type: types[1],\n                        value: values[2]\n                    }];\n                    \n                    if (values[3]) {\n                        if (values[3] == \" \")\n                            tokens[1] = { type: types[1], value: values[2] + \" \" };\n                        else\n                            tokens.push({ type: types[1], value: values[3] });\n                    }\n                    var regex = stack[1];\n                    var str = values[4];\n                    \n                    var m;\n                    var last = 0;\n                    if (regex && regex.exec) {\n                        regex.lastIndex = 0;\n                        while (m = regex.exec(str)) {\n                            var skipped = str.substring(last, m.index);\n                            last = regex.lastIndex;\n                            if (skipped)\n                                tokens.push({type: types[2], value: skipped});\n                            if (m[0])\n                                tokens.push({type: types[3], value: m[0]});\n                            else if (!skipped)\n                                break;\n                        }\n                    }\n                    if (last < str.length)\n                        tokens.push({type: types[2], value: str.substr(last)});\n                    return tokens;\n                }\n            },\n            {\n                regex : \"^Searching for [^\\\\r\\\\n]*$\",\n                onMatch: function(val, state, stack) {\n                    var parts = val.split(\"\\x01\");\n                    if (parts.length < 3)\n                        return \"text\";\n\n                    var options, search;\n                    \n                    var i = 0;\n                    var tokens = [{\n                        value: parts[i++] + \"'\",\n                        type: \"text\"\n                    }, {\n                        value: search = parts[i++],\n                        type: \"text\" // \"c9searchresults.keyword\"\n                    }, {\n                        value: \"'\" + parts[i++],\n                        type: \"text\"\n                    }];\n                    if (parts[2] !== \" in\") {\n                        tokens.push({\n                            value: \"'\" + parts[i++] + \"'\",\n                            type: \"text\"\n                        }, {\n                            value: parts[i++],\n                            type: \"text\"\n                        });\n                    }\n                    tokens.push({\n                        value: \" \" + parts[i++] + \" \",\n                        type: \"text\"\n                    });\n                    if (parts[i+1]) {\n                        options = parts[i+1];\n                        tokens.push({\n                            value: \"(\" + parts[i+1] + \")\",\n                            type: \"text\"\n                        });\n                        i += 1;\n                    } else {\n                        i -= 1;\n                    }\n                    while (i++ < parts.length) {\n                        parts[i] && tokens.push({\n                            value: parts[i],\n                            type: \"text\"\n                        });\n                    }\n                    \n                    if (search) {\n                        if (!/regex/.test(options))\n                            search = lang.escapeRegExp(search);\n                        if (/whole/.test(options))\n                            search = \"\\\\b\" + search + \"\\\\b\";\n                    }\n                    \n                    var regex = search && safeCreateRegexp(\n                        \"(\" + search + \")\",\n                        / sensitive/.test(options) ? \"g\" : \"ig\"\n                    );\n                    if (regex) {\n                        stack[0] = state;\n                        stack[1] = regex;\n                    }\n                    \n                    return tokens;\n                }\n            },\n            {\n                regex : \"^(?=Found \\\\d+ matches)\",\n                token : \"text\",\n                next : \"numbers\"\n            },\n            {\n                token : \"string\", // single line\n                regex : \"^\\\\S:?[^:]+\",\n                next : \"numbers\"\n            }\n        ],\n        numbers:[{\n            regex : \"\\\\d+\",\n            token : \"constant.numeric\"\n        }, {\n            regex : \"$\",\n            token : \"text\",\n            next : \"start\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(C9SearchHighlightRules, TextHighlightRules);\n\nexports.C9SearchHighlightRules = C9SearchHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^(\\S.*:|Searching for.*)$/;\n    this.foldingStopMarker = /^(\\s+|Found.*)$/;\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var lines = session.doc.getAllLines(row);\n        var line = lines[row];\n        var level1 = /^(Found.*|Searching for.*)$/;\n        var level2 = /^(\\S.*:|\\s*)$/;\n        var re = level1.test(line) ? level1 : level2;\n        \n        var startRow = row;\n        var endRow = row;\n\n        if (this.foldingStartMarker.test(line)) {\n            for (var i = row + 1, l = session.getLength(); i < l; i++) {\n                if (re.test(lines[i]))\n                    break;\n            }\n            endRow = i;\n        }\n        else if (this.foldingStopMarker.test(line)) {\n            for (var i = row - 1; i >= 0; i--) {\n                line = lines[i];\n                if (re.test(line))\n                    break;\n            }\n            startRow = i;\n        }\n        if (startRow != endRow) {\n            var col = line.length;\n            if (re === level1)\n                col = line.search(/\\(Found[^)]+\\)$|$/);\n            return new Range(startRow, col, endRow, 0);\n        }\n    };\n    \n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c9search_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/c9search\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar C9SearchHighlightRules = require(\"./c9search_highlight_rules\").C9SearchHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar C9StyleFoldMode = require(\"./folding/c9search\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = C9SearchHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new C9StyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c9search\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-c_cpp.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-cirru.js",
    "content": "ace.define(\"ace/mode/cirru_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CirruHighlightRules = function() {\n    this.$rules = {\n        start: [{\n            token: 'constant.numeric',\n            regex: /[\\d\\.]+/\n        }, {\n            token: 'comment.line.double-dash',\n            regex: /--/,\n            next: 'comment'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\(/\n        }, {\n            token: 'storage.modifier',\n            regex: /,/,\n            next: 'line'\n        }, {\n            token: 'support.function',\n            regex: /[^\\(\\)\"\\s]+/,\n            next: 'line'\n        }, {\n            token: 'string.quoted.double',\n            regex: /\"/,\n            next: 'string'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\)/\n        }],\n        comment: [{\n            token: 'comment.line.double-dash',\n            regex: / +[^\\n]+/,\n            next: 'start'\n        }],\n        string: [{\n            token: 'string.quoted.double',\n            regex: /\"/,\n            next: 'line'\n        }, {\n            token: 'constant.character.escape',\n            regex: /\\\\/,\n            next: 'escape'\n        }, {\n            token: 'string.quoted.double',\n            regex: /[^\\\\\"]+/\n        }],\n        escape: [{\n            token: 'constant.character.escape',\n            regex: /./,\n            next: 'string'\n        }],\n        line: [{\n            token: 'constant.numeric',\n            regex: /[\\d\\.]+/\n        }, {\n            token: 'markup.raw',\n            regex: /^\\s*/,\n            next: 'start'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\$/,\n            next: 'start'\n        }, {\n            token: 'variable.parameter',\n            regex: /[^\\(\\)\"\\s]+/\n        }, {\n            token: 'storage.modifier',\n            regex: /\\(/,\n            next: 'start'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\)/\n        }, {\n            token: 'markup.raw',\n            regex: /^ */,\n            next: 'start'\n        }, {\n            token: 'string.quoted.double',\n            regex: /\"/,\n            next: 'string'\n        }]\n    };\n\n};\n\noop.inherits(CirruHighlightRules, TextHighlightRules);\n\nexports.CirruHighlightRules = CirruHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/cirru\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cirru_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CirruHighlightRules = require(\"./cirru_highlight_rules\").CirruHighlightRules;\nvar CoffeeFoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CirruHighlightRules;\n    this.foldingRules = new CoffeeFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.$id = \"ace/mode/cirru\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-clojure.js",
    "content": "ace.define(\"ace/mode/clojure_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n\n\nvar ClojureHighlightRules = function() {\n\n    var builtinFunctions = (\n        '* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* ' +\n        '*command-line-args* *compile-files* *compile-path* *e *err* *file* ' +\n        '*flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* ' +\n        '*print-dup* *print-length* *print-level* *print-meta* *print-readably* ' +\n        '*read-eval* *source-path* *use-context-classloader* ' +\n        '*warn-on-reflection* + - -> ->> .. / < <= = ' +\n        '== > &gt; >= &gt;= accessor aclone ' +\n        'add-classpath add-watch agent agent-errors aget alength alias all-ns ' +\n        'alter alter-meta! alter-var-root amap ancestors and apply areduce ' +\n        'array-map aset aset-boolean aset-byte aset-char aset-double aset-float ' +\n        'aset-int aset-long aset-short assert assoc assoc! assoc-in associative? ' +\n        'atom await await-for await1 bases bean bigdec bigint binding bit-and ' +\n        'bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left ' +\n        'bit-shift-right bit-test bit-xor boolean boolean-array booleans ' +\n        'bound-fn bound-fn* butlast byte byte-array bytes cast char char-array ' +\n        'char-escape-string char-name-string char? chars chunk chunk-append ' +\n        'chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? ' +\n        'class class? clear-agent-errors clojure-version coll? comment commute ' +\n        'comp comparator compare compare-and-set! compile complement concat cond ' +\n        'condp conj conj! cons constantly construct-proxy contains? count ' +\n        'counted? create-ns create-struct cycle dec decimal? declare definline ' +\n        'defmacro defmethod defmulti defn defn- defonce defstruct delay delay? ' +\n        'deliver deref derive descendants destructure disj disj! dissoc dissoc! ' +\n        'distinct distinct? doall doc dorun doseq dosync dotimes doto double ' +\n        'double-array doubles drop drop-last drop-while empty empty? ensure ' +\n        'enumeration-seq eval even? every? false? ffirst file-seq filter find ' +\n        'find-doc find-ns find-var first float float-array float? floats flush ' +\n        'fn fn? fnext for force format future future-call future-cancel ' +\n        'future-cancelled? future-done? future? gen-class gen-interface gensym ' +\n        'get get-in get-method get-proxy-class get-thread-bindings get-validator ' +\n        'hash hash-map hash-set identical? identity if-let if-not ifn? import ' +\n        'in-ns inc init-proxy instance? int int-array integer? interleave intern ' +\n        'interpose into into-array ints io! isa? iterate iterator-seq juxt key ' +\n        'keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list ' +\n        'list* list? load load-file load-reader load-string loaded-libs locking ' +\n        'long long-array longs loop macroexpand macroexpand-1 make-array ' +\n        'make-hierarchy map map? mapcat max max-key memfn memoize merge ' +\n        'merge-with meta method-sig methods min min-key mod name namespace neg? ' +\n        'newline next nfirst nil? nnext not not-any? not-empty not-every? not= ' +\n        'ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ' +\n        'ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? ' +\n        'or parents partial partition pcalls peek persistent! pmap pop pop! ' +\n        'pop-thread-bindings pos? pr pr-str prefer-method prefers ' +\n        'primitives-classnames print print-ctor print-doc print-dup print-method ' +\n        'print-namespace-doc print-simple print-special-doc print-str printf ' +\n        'println println-str prn prn-str promise proxy proxy-call-with-super ' +\n        'proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot ' +\n        'rand rand-int range ratio? rational? rationalize re-find re-groups ' +\n        're-matcher re-matches re-pattern re-seq read read-line read-string ' +\n        'reduce ref ref-history-count ref-max-history ref-min-history ref-set ' +\n        'refer refer-clojure release-pending-sends rem remove remove-method ' +\n        'remove-ns remove-watch repeat repeatedly replace replicate require ' +\n        'reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq ' +\n        'rsubseq second select-keys send send-off seq seq? seque sequence ' +\n        'sequential? set set-validator! set? short short-array shorts ' +\n        'shutdown-agents slurp some sort sort-by sorted-map sorted-map-by ' +\n        'sorted-set sorted-set-by sorted? special-form-anchor special-symbol? ' +\n        'split-at split-with str stream? string? struct struct-map subs subseq ' +\n        'subvec supers swap! symbol symbol? sync syntax-symbol-anchor take ' +\n        'take-last take-nth take-while test the-ns time to-array to-array-2d ' +\n        'trampoline transient tree-seq true? type unchecked-add unchecked-dec ' +\n        'unchecked-divide unchecked-inc unchecked-multiply unchecked-negate ' +\n        'unchecked-remainder unchecked-subtract underive unquote ' +\n        'unquote-splicing update-in update-proxy use val vals var-get var-set ' +\n        'var? vary-meta vec vector vector? when when-first when-let when-not ' +\n        'while with-bindings with-bindings* with-in-str with-loading-context ' +\n        'with-local-vars with-meta with-open with-out-str with-precision xml-seq ' +\n        'zero? zipmap'\n    );\n\n    var keywords = ('throw try var ' +\n        'def do fn if let loop monitor-enter monitor-exit new quote recur set!'\n    );\n\n    var buildinConstants = (\"true false nil\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\", false, \" \");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \";.*$\"\n            }, {\n                token : \"keyword\", //parens\n                regex : \"[\\\\(|\\\\)]\"\n            }, {\n                token : \"keyword\", //lists\n                regex : \"[\\\\'\\\\(]\"\n            }, {\n                token : \"keyword\", //vectors\n                regex : \"[\\\\[|\\\\]]\"\n            }, {\n                token : \"keyword\", //sets and maps\n                regex : \"[\\\\{|\\\\}|\\\\#\\\\{|\\\\#\\\\}]\"\n            }, {\n                    token : \"keyword\", // ampersands\n                    regex : '[\\\\&]'\n            }, {\n                    token : \"keyword\", // metadata\n                    regex : '[\\\\#\\\\^\\\\{]'\n            }, {\n                    token : \"keyword\", // anonymous fn syntactic sugar\n                    regex : '[\\\\%]'\n            }, {\n                    token : \"keyword\", // deref reader macro\n                    regex : '[@]'\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language\",\n                regex : '[!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+||=|!=|<=|>=|<>|<|>|!|&&]'\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next: \"string\"\n            }, {\n                token : \"constant\", // symbol\n                regex : /:[^()\\[\\]{}'\"\\^%`,;\\s]+/\n            }, {\n                token : \"string.regexp\", //Regular Expressions\n                regex : '/#\"(?:\\\\.|(?:\\\\\")|[^\"\"\\n])*\"/g'\n            }\n\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : \"\\\\\\\\.|\\\\\\\\$\"\n            }, {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+'\n            }, {\n                token : \"string\",\n                regex : '\"',\n                next : \"start\"\n            }\n        ]\n    };\n};\n\noop.inherits(ClojureHighlightRules, TextHighlightRules);\n\nexports.ClojureHighlightRules = ClojureHighlightRules;\n});\n\nace.define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingParensOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\)/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\))/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        var match = line.match(/^(\\s+)/);\n        if (match) {\n            return match[1];\n        }\n\n        return \"\";\n    };\n\n}).call(MatchingParensOutdent.prototype);\n\nexports.MatchingParensOutdent = MatchingParensOutdent;\n});\n\nace.define(\"ace/mode/clojure\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/clojure_highlight_rules\",\"ace/mode/matching_parens_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ClojureHighlightRules = require(\"./clojure_highlight_rules\").ClojureHighlightRules;\nvar MatchingParensOutdent = require(\"./matching_parens_outdent\").MatchingParensOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = ClojureHighlightRules;\n    this.$outdent = new MatchingParensOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.minorIndentFunctions = [\"defn\", \"defn-\", \"defmacro\", \"def\", \"deftest\", \"testing\"];\n\n    this.$toIndent = function(str) {\n        return str.split('').map(function(ch) {\n            if (/\\s/.exec(ch)) {\n                return ch;\n            } else {\n                return ' ';\n            }\n        }).join('');\n    };\n\n    this.$calculateIndent = function(line, tab) {\n        var baseIndent = this.$getIndent(line);\n        var delta = 0;\n        var isParen, ch;\n        for (var i = line.length - 1; i >= 0; i--) {\n            ch = line[i];\n            if (ch === '(') {\n                delta--;\n                isParen = true;\n            } else if (ch === '(' || ch === '[' || ch === '{') {\n                delta--;\n                isParen = false;\n            } else if (ch === ')' || ch === ']' || ch === '}') {\n                delta++;\n            }\n            if (delta < 0) {\n                break;\n            }\n        }\n        if (delta < 0 && isParen) {\n            i += 1;\n            var iBefore = i;\n            var fn = '';\n            while (true) {\n                ch = line[i];\n                if (ch === ' ' || ch === '\\t') {\n                    if(this.minorIndentFunctions.indexOf(fn) !== -1) {\n                        return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                    } else {\n                        return this.$toIndent(line.substring(0, i + 1));\n                    }\n                } else if (ch === undefined) {\n                    return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                }\n                fn += line[i];\n                i++;\n            }\n        } else if(delta < 0 && !isParen) {\n            return this.$toIndent(line.substring(0, i+1));\n        } else if(delta > 0) {\n            baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);\n            return baseIndent;\n        } else {\n            return baseIndent;\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$calculateIndent(line, tab);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/clojure\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-cobol.js",
    "content": "ace.define(\"ace/mode/cobol_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CobolHighlightRules = function() {\nvar keywords = \"ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|\" +\n\"AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|\" +\n\"ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|\" +\n\"TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|\" +\n\"UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|\" +\n\"PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|\" +\n\"CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|\" +\n\"COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|\" +\n\"RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|\" +\n\"DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|\" +\n\"ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|\" +\n\"EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT\";\n\n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n    var builtinFunctions = (\n        \"count|min|max|avg|sum|rank|now|coalesce|main\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"\\\\*.*$\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n};\n\noop.inherits(CobolHighlightRules, TextHighlightRules);\n\nexports.CobolHighlightRules = CobolHighlightRules;\n});\n\nace.define(\"ace/mode/cobol\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cobol_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CobolHighlightRules = require(\"./cobol_highlight_rules\").CobolHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CobolHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"*\";\n\n    this.$id = \"ace/mode/cobol\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-coffee.js",
    "content": "ace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    oop.inherits(CoffeeHighlightRules, TextHighlightRules);\n\n    function CoffeeHighlightRules() {\n        var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n\n        var keywords = (\n            \"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n            \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n            \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n            \"or|on|unless|until|and|yes|yield|export|import|default\"\n        );\n\n        var langConstant = (\n            \"true|false|null|undefined|NaN|Infinity\"\n        );\n\n        var illegal = (\n            \"case|const|function|var|void|with|enum|implements|\" +\n            \"interface|let|package|private|protected|public|static\"\n        );\n\n        var supportClass = (\n            \"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n            \"SyntaxError|TypeError|URIError|\"  +\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\"\n        );\n\n        var supportFunction = (\n            \"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n            \"encodeURIComponent|decodeURI|decodeURIComponent|String|\"\n        );\n\n        var variableLanguage = (\n            \"window|arguments|prototype|document\"\n        );\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": langConstant,\n            \"invalid.illegal\": illegal,\n            \"language.support.class\": supportClass,\n            \"language.support.function\": supportFunction,\n            \"variable.language\": variableLanguage\n        }, \"identifier\");\n\n        var functionRule = {\n            token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n            regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n        };\n\n        var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n\n        this.$rules = {\n            start : [\n                {\n                    token : \"constant.numeric\",\n                    regex : \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n                }, {\n                    stateName: \"qdoc\",\n                    token : \"string\", regex : \"'''\", next : [\n                        {token : \"string\", regex : \"'''\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqdoc\",\n                    token : \"string\",\n                    regex : '\"\"\"',\n                    next : [\n                        {token : \"string\", regex : '\"\"\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qstring\",\n                    token : \"string\", regex : \"'\", next : [\n                        {token : \"string\", regex : \"'\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqstring\",\n                    token : \"string.start\", regex : '\"', next : [\n                        {token : \"string.end\", regex : '\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"js\",\n                    token : \"string\", regex : \"`\", next : [\n                        {token : \"string\", regex : \"`\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    regex: \"[{}]\", onMatch: function(val, state, stack) {\n                        this.next = \"\";\n                        if (val == \"{\" && stack.length) {\n                            stack.unshift(\"start\", state);\n                            return \"paren\";\n                        }\n                        if (val == \"}\" && stack.length) {\n                            stack.shift();\n                            this.next = stack.shift() || \"\";\n                            if (this.next.indexOf(\"string\") != -1)\n                                return \"paren.string\";\n                        }\n                        return \"paren\";\n                    }\n                }, {\n                    token : \"string.regex\",\n                    regex : \"///\",\n                    next : \"heregex\"\n                }, {\n                    token : \"string.regex\",\n                    regex : /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n                }, {\n                    token : \"comment\",\n                    regex : \"###(?!#)\",\n                    next : \"comment\"\n                }, {\n                    token : \"comment\",\n                    regex : \"#.*\"\n                }, {\n                    token : [\"punctuation.operator\", \"text\", \"identifier\"],\n                    regex : \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\.{1,3}\"\n                }, {\n                    token : [\"keyword\", \"text\", \"language.support.class\",\n                     \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                    regex : \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n                }, {\n                    token : [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                    regex : \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n                }, \n                functionRule, \n                {\n                    token : \"variable\",\n                    regex : \"@(?:\" + identifier + \")?\"\n                }, {\n                    token: keywordMapper,\n                    regex : identifier\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\,|\\\\.\"\n                }, {\n                    token : \"storage.type\",\n                    regex : \"[\\\\-=]>\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[({[]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\]})]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }],\n\n\n            heregex : [{\n                token : \"string.regex\",\n                regex : '.*?///[imgy]{0,4}',\n                next : \"start\"\n            }, {\n                token : \"comment.regex\",\n                regex : \"\\\\s+(?:#.*)?\"\n            }, {\n                token : \"string.regex\",\n                regex : \"\\\\S+\"\n            }],\n\n            comment : [{\n                token : \"comment\",\n                regex : '###',\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        };\n        this.normalizeRules();\n    }\n\n    exports.CoffeeHighlightRules = CoffeeHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\n\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.foldingRules = new FoldMode();\n}\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    var indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;\n    \n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"###\", end: \"###\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n    \n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/coffee_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/coffee\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-coldfusion.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/coldfusion_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar ColdfusionHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    this.$rules.tag[2].token = function (start, tag) {\n        var group = tag.slice(0,2) == \"cf\" ? \"keyword\" : \"meta.tag\";\n        return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n            group + \".tag-name.xml\"];\n    };\n\n    var jsAndCss = Object.keys(this.$rules).filter(function(x) {\n        return /^(js|css)-/.test(x);\n    });\n    this.embedRules({\n        cfmlComment: [\n            { regex: \"<!---\", token: \"comment.start\", push: \"cfmlComment\"}, \n            { regex: \"--->\", token: \"comment.end\", next: \"pop\"},\n            { defaultToken: \"comment\"}\n        ]\n    }, \"\", [\n        { regex: \"<!---\", token: \"comment.start\", push: \"cfmlComment\"}\n    ], [\n        \"comment\", \"start\", \"tag_whitespace\", \"cdata\"\n    ].concat(jsAndCss));\n    \n    \n    this.$rules.cfTag = [\n        {include : \"attributes\"},\n        {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"pop\"}\n    ];\n    var cfTag = {\n        token : function(start, tag) {\n            return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                \"keyword.tag-name.xml\"];\n        },\n        regex : \"(</?)(cf[-_a-zA-Z0-9:.]+)\",\n        push: \"cfTag\"\n    };\n    jsAndCss.forEach(function(s) {\n        this.$rules[s].unshift(cfTag);\n    }, this);\n    \n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"cfjs-\", \"cfscript\");\n\n    this.normalizeRules();\n};\n\noop.inherits(ColdfusionHighlightRules, HtmlHighlightRules);\n\nexports.ColdfusionHighlightRules = ColdfusionHighlightRules;\n});\n\nace.define(\"ace/mode/coldfusion\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html\",\"ace/mode/coldfusion_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar HtmlMode = require(\"./html\").Mode;\nvar ColdfusionHighlightRules = require(\"./coldfusion_highlight_rules\").ColdfusionHighlightRules;\n\nvar voidElements = \"cfabort|cfapplication|cfargument|cfassociate|cfbreak|cfcache|cfcollection|cfcookie|cfdbinfo|cfdirectory|cfdump|cfelse|cfelseif|cferror|cfexchangecalendar|cfexchangeconnection|cfexchangecontact|cfexchangefilter|cfexchangetask|cfexit|cffeed|cffile|cfflush|cfftp|cfheader|cfhtmlhead|cfhttpparam|cfimage|cfimport|cfinclude|cfindex|cfinsert|cfinvokeargument|cflocation|cflog|cfmailparam|cfNTauthenticate|cfobject|cfobjectcache|cfparam|cfpdfformparam|cfprint|cfprocparam|cfprocresult|cfproperty|cfqueryparam|cfregistry|cfreportparam|cfrethrow|cfreturn|cfschedule|cfsearch|cfset|cfsetting|cfthrow|cfzipparam)\".split(\"|\");\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    \n    this.HighlightRules = ColdfusionHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.voidElements = oop.mixin(lang.arrayToMap(voidElements), this.voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.$id = \"ace/mode/coldfusion\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-csharp.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CSharpHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\n        \"constant.language\": \"null|true|false\"\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : /'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/\n            }, {\n                token : \"string\", start : '\"', end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"string\", start : '@\"', end : '\"', next:[\n                    {token: \"constant.language.escape\", regex: '\"\"'}\n                ]\n            }, {\n                token : \"string\", start : /\\$\"/, end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?$)|{{/},\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"keyword\",\n                regex : \"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(CSharpHighlightRules, TextHighlightRules);\n\nexports.CSharpHighlightRules = CSharpHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar CFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, CFoldMode);\n\n(function() {\n    this.usingRe = /^\\s*using \\S/;\n\n    this.getFoldWidgetRangeBase = this.getFoldWidgetRange;\n    this.getFoldWidgetBase = this.getFoldWidget;\n    \n    this.getFoldWidget = function(session, foldStyle, row) {\n        var fw = this.getFoldWidgetBase(session, foldStyle, row);\n        if (!fw) {\n            var line = session.getLine(row);\n            if (/^\\s*#region\\b/.test(line)) \n                return \"start\";\n            var usingRe = this.usingRe;\n            if (usingRe.test(line)) {\n                var prev = session.getLine(row - 1);\n                var next = session.getLine(row + 1);\n                if (!usingRe.test(prev) && usingRe.test(next))\n                    return \"start\";\n            }\n        }\n        return fw;\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.getFoldWidgetRangeBase(session, foldStyle, row);\n        if (range)\n            return range;\n\n        var line = session.getLine(row);\n        if (this.usingRe.test(line))\n            return this.getUsingStatementBlock(session, line, row);\n            \n        if (/^\\s*#region\\b/.test(line))\n            return this.getRegionBlock(session, line, row);\n    };\n    \n    this.getUsingStatementBlock = function(session, line, row) {\n        var startColumn = line.match(this.usingRe)[0].length - 1;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            if (!this.usingRe.test(line))\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    \n    this.getRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*#(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n\n            if (!depth)\n                break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csharp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/csharp\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CSharpHighlightRules = require(\"./csharp_highlight_rules\").CSharpHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/csharp\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CSharpHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n  \n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n  \n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n    \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n  \n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n  \n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/csharp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-csound_document.js",
    "content": "ace.define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundPreprocessorHighlightRules = function() {\n\n    this.semicolonComments = {\n        token : \"comment.line.semicolon.csound\",\n        regex : \";.*$\"\n    };\n\n    this.comments = [\n        {\n            token : \"punctuation.definition.comment.begin.csound\",\n            regex : \"/\\\\*\",\n            push  : [\n                {\n                    token : \"punctuation.definition.comment.end.csound\",\n                    regex : \"\\\\*/\",\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token : \"comment.line.double-slash.csound\",\n            regex : \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n\n    this.macroUses = [\n        {\n            token : [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex : /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next  : \"macro parameter value list\"\n        }, {\n            token : \"entity.name.function.preprocessor.csound\",\n            regex : /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n\n    this.numbers = [\n        {\n            token : \"constant.numeric.float.csound\",\n            regex : /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token : [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex : /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token : \"constant.numeric.integer.decimal.csound\",\n            regex : /\\d+/\n        }\n    ];\n\n    this.bracedStringContents = [\n        {\n            token : \"constant.character.escape.csound\",\n            regex : /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        {\n            token : \"constant.character.placeholder.csound\",\n            regex : /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token : \"constant.character.escape.csound\",\n            regex : /%%/\n        }\n    ];\n\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n\n    var start = [\n        this.comments,\n\n        {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#include/,\n            push  : [\n                this.comments,\n                {\n                    token : \"string.csound\",\n                    regex : /([^ \\t])(?:.*?\\1)/,\n                    next  : \"pop\"\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#[ \\t]*define/,\n            next  : \"define directive\"\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:ifn?def|undef)\\b/,\n            next  : \"macro directive\"\n        },\n\n        this.macroUses\n    ];\n\n    this.$rules = {\n        \"start\": start,\n\n        \"define directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter name list\"\n            }, {\n                token : \"punctuation.definition.macro.begin.csound\",\n                regex : /#/,\n                next  : \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token : \"variable.parameter.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex : /\\)/,\n                next  : \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\#/\n            }, {\n                token : \"punctuation.definition.macro.end.csound\",\n                regex : /#/,\n                next  : \"start\"\n            },\n            start\n        ],\n\n        \"macro directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"macro parameter value list\": [\n            {\n                token : \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex : /\\)/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }), {\n                token : \"punctuation.macro-parameter-value-separator.csound\",\n                regex : \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\\\)/\n            }, this.popRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex : /\\)/\n            }), this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\n\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n\n(function() {\n\n    this.pushRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                } else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (Array.isArray(params.next)) {\n                    var oldNext = params.next[params.next.length - 1];\n                    var oldNextIndex = oldNext.length - 1;\n                    var newNextIndex = next.length - 1;\n                    if (newNextIndex > oldNextIndex) {\n                        while (oldNextIndex >= 0 && newNextIndex >= 0) {\n                            if (oldNext.charAt(oldNextIndex) !== next.charAt(newNextIndex)) {\n                                var prefix = next.substr(0, newNextIndex);\n                                for (var i = 0; i < params.next.length; i++) {\n                                    params.next[i] = prefix + params.next[i];\n                                }\n                                break;\n                            }\n                            oldNextIndex--;\n                            newNextIndex--;\n                        }\n                    }\n                } else {\n                    params.next = next;\n                }\n            },\n            get token() { return params.token; }\n        };\n    };\n\n    this.popRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                } else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n\n}).call(CsoundPreprocessorHighlightRules.prototype);\n\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n});\n\nace.define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\n\nvar CsoundScoreHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n\n    this.quotedStringContents.push({\n        token : \"invalid.illegal.csound-score\",\n        regex : /[^\"]*$/\n    });\n\n    var start = this.$rules.start;\n    start.push(\n        {\n            token : \"keyword.control.csound-score\",\n            regex : /[abCdefiqstvxy]/\n        }, {\n            token : \"invalid.illegal.csound-score\",\n            regex : /w/\n        }, {\n            token : \"constant.numeric.language.csound-score\",\n            regex : /z/\n        }, {\n            token : [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n            regex : /([nNpP][pP])(\\d+)/\n        }, {\n            token : \"keyword.other.csound-score\",\n            regex : /[mn]/,\n            push  : [\n                {\n                    token : \"empty\",\n                    regex : /$/,\n                    next  : \"pop\"\n                },\n                this.comments,\n                {\n                    token : \"entity.name.label.csound-score\",\n                    regex : /[A-Z_a-z]\\w*/\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound-score\",\n            regex : /r\\b/,\n            next  : \"repeat section\"\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound-score\",\n            regex : \"[!+\\\\-*/^%&|<>#~.]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound-score\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }),\n\n        this.pushRule({\n            token : \"punctuation.braced-loop.begin.csound-score\",\n            regex : /{/,\n            next  : \"loop after left brace\"\n        })\n    );\n\n    this.addRules({\n        \"repeat section\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"entity.name.label.csound-score\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound-score\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n\n        \"loop after left brace\": [\n            this.popRule({\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token : \"entity.name.function.preprocessor.csound-score\",\n                regex : /[A-Z_a-z]\\w*\\b/,\n                next  : \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token : \"punctuation.braced-loop.end.csound-score\",\n                regex : /}/\n            })\n        ]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n});\n\nace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuaHighlightRules = function() {\n\n    var keywords = (\n        \"break|do|else|elseif|end|for|function|if|in|local|repeat|\"+\n         \"return|then|until|while|or|and|not\"\n    );\n\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n\n    var functions = (\n        \"string|xpcall|package|tostring|print|os|unpack|require|\"+\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\"+\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\"+\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\"+\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\"+\n        \"load|error|loadfile|\"+\n\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\"+\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\"+\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\"+\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\"+\n        \"lines|write|close|flush|open|output|type|read|stderr|\"+\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\"+\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\"+\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\"+\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\"+\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\"+\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\"+\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\"+\n        \"status|wrap|create|running|\"+\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\"+\n         \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\"\n    );\n\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [{\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex : /\\-\\-\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"comment\";\n                    },\n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ]\n        },\n\n        {\n            token : \"comment\",\n            regex : \"\\\\-\\\\-.*$\"\n        },\n        {\n            stateName: \"bracketedString\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length, currentState);\n                return \"string.start\";\n            },\n            regex : /\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"string.end\";\n                    },\n                    \n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        },\n        {\n            token : \"string\",           // \" string\n            regex : '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+|\\\\w+\"\n        } ]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LuaHighlightRules, TextHighlightRules);\n\nexports.LuaHighlightRules = LuaHighlightRules;\n});\n\nace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\"\n    );\n\n    var builtinConstants = (\n        \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n    );\n\n    var builtinFunctions = (\n        \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + '\"{3}',\n            next: \"rawqqstring3\"\n        }, {\n            token: \"string\", \n            regex: strRawPre + '\"(?=.)',\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'{3}\",\n            next: \"rawqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'(?=.)\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"{3}',\n            next: \"fqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"(?=.)',\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'{3}\",\n            next: \"fqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'(?=.)\",\n            next: \"fqstring\"\n        },{\n            token: \"string\",\n            regex: strRawFormatPre + '\"{3}',\n            next: \"rfqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + '\"(?=.)',\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'{3}\",\n            next: \"rfqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'(?=.)\",\n            next: \"rfqstring\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }, {\n            include: \"constants\"\n        }],\n        \"qqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring\": [{\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstringParRules\": [{//TODO: nested {}\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)]\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string\",\n            regex: \"'(.)*'\"\n        }, {\n            token: \"string\",\n            regex: '\"(.)*\"'\n        }, {\n            token: \"function.support\",\n            regex: \"(!s|!r|!a)\"\n        }, {\n            include: \"constants\"\n        },{\n            token: 'paren.rparen',\n            regex: \"}\",\n            next: 'pop'\n        },{\n            token: 'paren.lparen',\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }],\n        \"constants\": [{\n            token: \"constant.numeric\", // imaginary\n            regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: floatNumber\n        }, {\n            token: \"constant.numeric\", // long integer\n            regex: integer + \"[lL]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // integer\n            regex: integer + \"\\\\b\"\n        }, {\n            token: [\"punctuation\", \"function.support\"],// method\n            regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n\nace.define(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\n\nvar CsoundOrchestraHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n    var opcodes = [\n        \"ATSadd\",\n        \"ATSaddnz\",\n        \"ATSbufread\",\n        \"ATScross\",\n        \"ATSinfo\",\n        \"ATSinterpread\",\n        \"ATSpartialtap\",\n        \"ATSread\",\n        \"ATSreadnz\",\n        \"ATSsinnoi\",\n        \"FLbox\",\n        \"FLbutBank\",\n        \"FLbutton\",\n        \"FLcloseButton\",\n        \"FLcolor\",\n        \"FLcolor2\",\n        \"FLcount\",\n        \"FLexecButton\",\n        \"FLgetsnap\",\n        \"FLgroup\",\n        \"FLgroupEnd\",\n        \"FLgroup_end\",\n        \"FLhide\",\n        \"FLhvsBox\",\n        \"FLhvsBoxSetValue\",\n        \"FLjoy\",\n        \"FLkeyIn\",\n        \"FLknob\",\n        \"FLlabel\",\n        \"FLloadsnap\",\n        \"FLmouse\",\n        \"FLpack\",\n        \"FLpackEnd\",\n        \"FLpack_end\",\n        \"FLpanel\",\n        \"FLpanelEnd\",\n        \"FLpanel_end\",\n        \"FLprintk\",\n        \"FLprintk2\",\n        \"FLroller\",\n        \"FLrun\",\n        \"FLsavesnap\",\n        \"FLscroll\",\n        \"FLscrollEnd\",\n        \"FLscroll_end\",\n        \"FLsetAlign\",\n        \"FLsetBox\",\n        \"FLsetColor\",\n        \"FLsetColor2\",\n        \"FLsetFont\",\n        \"FLsetPosition\",\n        \"FLsetSize\",\n        \"FLsetSnapGroup\",\n        \"FLsetText\",\n        \"FLsetTextColor\",\n        \"FLsetTextSize\",\n        \"FLsetTextType\",\n        \"FLsetVal\",\n        \"FLsetVal_i\",\n        \"FLsetVali\",\n        \"FLsetsnap\",\n        \"FLshow\",\n        \"FLslidBnk\",\n        \"FLslidBnk2\",\n        \"FLslidBnk2Set\",\n        \"FLslidBnk2Setk\",\n        \"FLslidBnkGetHandle\",\n        \"FLslidBnkSet\",\n        \"FLslidBnkSetk\",\n        \"FLslider\",\n        \"FLtabs\",\n        \"FLtabsEnd\",\n        \"FLtabs_end\",\n        \"FLtext\",\n        \"FLupdate\",\n        \"FLvalue\",\n        \"FLvkeybd\",\n        \"FLvslidBnk\",\n        \"FLvslidBnk2\",\n        \"FLxyin\",\n        \"JackoAudioIn\",\n        \"JackoAudioInConnect\",\n        \"JackoAudioOut\",\n        \"JackoAudioOutConnect\",\n        \"JackoFreewheel\",\n        \"JackoInfo\",\n        \"JackoInit\",\n        \"JackoMidiInConnect\",\n        \"JackoMidiOut\",\n        \"JackoMidiOutConnect\",\n        \"JackoNoteOut\",\n        \"JackoOn\",\n        \"JackoTransport\",\n        \"K35_hpf\",\n        \"K35_lpf\",\n        \"MixerClear\",\n        \"MixerGetLevel\",\n        \"MixerReceive\",\n        \"MixerSend\",\n        \"MixerSetLevel\",\n        \"MixerSetLevel_i\",\n        \"OSCbundle\",\n        \"OSCcount\",\n        \"OSCinit\",\n        \"OSCinitM\",\n        \"OSClisten\",\n        \"OSCraw\",\n        \"OSCsend\",\n        \"OSCsend_lo\",\n        \"S\",\n        \"STKBandedWG\",\n        \"STKBeeThree\",\n        \"STKBlowBotl\",\n        \"STKBlowHole\",\n        \"STKBowed\",\n        \"STKBrass\",\n        \"STKClarinet\",\n        \"STKDrummer\",\n        \"STKFMVoices\",\n        \"STKFlute\",\n        \"STKHevyMetl\",\n        \"STKMandolin\",\n        \"STKModalBar\",\n        \"STKMoog\",\n        \"STKPercFlut\",\n        \"STKPlucked\",\n        \"STKResonate\",\n        \"STKRhodey\",\n        \"STKSaxofony\",\n        \"STKShakers\",\n        \"STKSimple\",\n        \"STKSitar\",\n        \"STKStifKarp\",\n        \"STKTubeBell\",\n        \"STKVoicForm\",\n        \"STKWhistle\",\n        \"STKWurley\",\n        \"a\",\n        \"abs\",\n        \"active\",\n        \"adsr\",\n        \"adsyn\",\n        \"adsynt\",\n        \"adsynt2\",\n        \"aftouch\",\n        \"alpass\",\n        \"alwayson\",\n        \"ampdb\",\n        \"ampdbfs\",\n        \"ampmidi\",\n        \"ampmidid\",\n        \"areson\",\n        \"aresonk\",\n        \"atone\",\n        \"atonek\",\n        \"atonex\",\n        \"babo\",\n        \"balance\",\n        \"balance2\",\n        \"bamboo\",\n        \"barmodel\",\n        \"bbcutm\",\n        \"bbcuts\",\n        \"beadsynt\",\n        \"beosc\",\n        \"betarand\",\n        \"bexprnd\",\n        \"bformdec1\",\n        \"bformenc1\",\n        \"binit\",\n        \"biquad\",\n        \"biquada\",\n        \"birnd\",\n        \"bpf\",\n        \"bpfcos\",\n        \"bqrez\",\n        \"butbp\",\n        \"butbr\",\n        \"buthp\",\n        \"butlp\",\n        \"butterbp\",\n        \"butterbr\",\n        \"butterhp\",\n        \"butterlp\",\n        \"button\",\n        \"buzz\",\n        \"c2r\",\n        \"cabasa\",\n        \"cauchy\",\n        \"cauchyi\",\n        \"cbrt\",\n        \"ceil\",\n        \"cell\",\n        \"cent\",\n        \"centroid\",\n        \"ceps\",\n        \"cepsinv\",\n        \"chanctrl\",\n        \"changed\",\n        \"changed2\",\n        \"chani\",\n        \"chano\",\n        \"chebyshevpoly\",\n        \"checkbox\",\n        \"chn_S\",\n        \"chn_a\",\n        \"chn_k\",\n        \"chnclear\",\n        \"chnexport\",\n        \"chnget\",\n        \"chngetks\",\n        \"chnmix\",\n        \"chnparams\",\n        \"chnset\",\n        \"chnsetks\",\n        \"chuap\",\n        \"clear\",\n        \"clfilt\",\n        \"clip\",\n        \"clockoff\",\n        \"clockon\",\n        \"cmp\",\n        \"cmplxprod\",\n        \"comb\",\n        \"combinv\",\n        \"compilecsd\",\n        \"compileorc\",\n        \"compilestr\",\n        \"compress\",\n        \"compress2\",\n        \"connect\",\n        \"control\",\n        \"convle\",\n        \"convolve\",\n        \"copya2ftab\",\n        \"copyf2array\",\n        \"cos\",\n        \"cosh\",\n        \"cosinv\",\n        \"cosseg\",\n        \"cossegb\",\n        \"cossegr\",\n        \"cps2pch\",\n        \"cpsmidi\",\n        \"cpsmidib\",\n        \"cpsmidinn\",\n        \"cpsoct\",\n        \"cpspch\",\n        \"cpstmid\",\n        \"cpstun\",\n        \"cpstuni\",\n        \"cpsxpch\",\n        \"cpumeter\",\n        \"cpuprc\",\n        \"cross2\",\n        \"crossfm\",\n        \"crossfmi\",\n        \"crossfmpm\",\n        \"crossfmpmi\",\n        \"crosspm\",\n        \"crosspmi\",\n        \"crunch\",\n        \"ctlchn\",\n        \"ctrl14\",\n        \"ctrl21\",\n        \"ctrl7\",\n        \"ctrlinit\",\n        \"cuserrnd\",\n        \"dam\",\n        \"date\",\n        \"dates\",\n        \"db\",\n        \"dbamp\",\n        \"dbfsamp\",\n        \"dcblock\",\n        \"dcblock2\",\n        \"dconv\",\n        \"dct\",\n        \"dctinv\",\n        \"deinterleave\",\n        \"delay\",\n        \"delay1\",\n        \"delayk\",\n        \"delayr\",\n        \"delayw\",\n        \"deltap\",\n        \"deltap3\",\n        \"deltapi\",\n        \"deltapn\",\n        \"deltapx\",\n        \"deltapxw\",\n        \"denorm\",\n        \"diff\",\n        \"diode_ladder\",\n        \"directory\",\n        \"diskgrain\",\n        \"diskin\",\n        \"diskin2\",\n        \"dispfft\",\n        \"display\",\n        \"distort\",\n        \"distort1\",\n        \"divz\",\n        \"doppler\",\n        \"dot\",\n        \"downsamp\",\n        \"dripwater\",\n        \"dssiactivate\",\n        \"dssiaudio\",\n        \"dssictls\",\n        \"dssiinit\",\n        \"dssilist\",\n        \"dumpk\",\n        \"dumpk2\",\n        \"dumpk3\",\n        \"dumpk4\",\n        \"duserrnd\",\n        \"dust\",\n        \"dust2\",\n        \"envlpx\",\n        \"envlpxr\",\n        \"ephasor\",\n        \"eqfil\",\n        \"evalstr\",\n        \"event\",\n        \"event_i\",\n        \"exciter\",\n        \"exitnow\",\n        \"exp\",\n        \"expcurve\",\n        \"expon\",\n        \"exprand\",\n        \"exprandi\",\n        \"expseg\",\n        \"expsega\",\n        \"expsegb\",\n        \"expsegba\",\n        \"expsegr\",\n        \"fareylen\",\n        \"fareyleni\",\n        \"faustaudio\",\n        \"faustcompile\",\n        \"faustctl\",\n        \"faustdsp\",\n        \"faustgen\",\n        \"faustplay\",\n        \"fft\",\n        \"fftinv\",\n        \"ficlose\",\n        \"filebit\",\n        \"filelen\",\n        \"filenchnls\",\n        \"filepeak\",\n        \"filescal\",\n        \"filesr\",\n        \"filevalid\",\n        \"fillarray\",\n        \"filter2\",\n        \"fin\",\n        \"fini\",\n        \"fink\",\n        \"fiopen\",\n        \"flanger\",\n        \"flashtxt\",\n        \"flooper\",\n        \"flooper2\",\n        \"floor\",\n        \"fmanal\",\n        \"fmax\",\n        \"fmb3\",\n        \"fmbell\",\n        \"fmin\",\n        \"fmmetal\",\n        \"fmod\",\n        \"fmpercfl\",\n        \"fmrhode\",\n        \"fmvoice\",\n        \"fmwurlie\",\n        \"fof\",\n        \"fof2\",\n        \"fofilter\",\n        \"fog\",\n        \"fold\",\n        \"follow\",\n        \"follow2\",\n        \"foscil\",\n        \"foscili\",\n        \"fout\",\n        \"fouti\",\n        \"foutir\",\n        \"foutk\",\n        \"fprintks\",\n        \"fprints\",\n        \"frac\",\n        \"fractalnoise\",\n        \"framebuffer\",\n        \"freeverb\",\n        \"ftaudio\",\n        \"ftchnls\",\n        \"ftconv\",\n        \"ftcps\",\n        \"ftfree\",\n        \"ftgen\",\n        \"ftgenonce\",\n        \"ftgentmp\",\n        \"ftlen\",\n        \"ftload\",\n        \"ftloadk\",\n        \"ftlptim\",\n        \"ftmorf\",\n        \"ftom\",\n        \"ftprint\",\n        \"ftresize\",\n        \"ftresizei\",\n        \"ftsamplebank\",\n        \"ftsave\",\n        \"ftsavek\",\n        \"ftslice\",\n        \"ftsr\",\n        \"gain\",\n        \"gainslider\",\n        \"gauss\",\n        \"gaussi\",\n        \"gausstrig\",\n        \"gbuzz\",\n        \"genarray\",\n        \"genarray_i\",\n        \"gendy\",\n        \"gendyc\",\n        \"gendyx\",\n        \"getcfg\",\n        \"getcol\",\n        \"getftargs\",\n        \"getrow\",\n        \"getrowlin\",\n        \"getseed\",\n        \"gogobel\",\n        \"grain\",\n        \"grain2\",\n        \"grain3\",\n        \"granule\",\n        \"guiro\",\n        \"harmon\",\n        \"harmon2\",\n        \"harmon3\",\n        \"harmon4\",\n        \"hdf5read\",\n        \"hdf5write\",\n        \"hilbert\",\n        \"hilbert2\",\n        \"hrtfearly\",\n        \"hrtfmove\",\n        \"hrtfmove2\",\n        \"hrtfreverb\",\n        \"hrtfstat\",\n        \"hsboscil\",\n        \"hvs1\",\n        \"hvs2\",\n        \"hvs3\",\n        \"hypot\",\n        \"i\",\n        \"ihold\",\n        \"imagecreate\",\n        \"imagefree\",\n        \"imagegetpixel\",\n        \"imageload\",\n        \"imagesave\",\n        \"imagesetpixel\",\n        \"imagesize\",\n        \"in\",\n        \"in32\",\n        \"inch\",\n        \"inh\",\n        \"init\",\n        \"initc14\",\n        \"initc21\",\n        \"initc7\",\n        \"inleta\",\n        \"inletf\",\n        \"inletk\",\n        \"inletkid\",\n        \"inletv\",\n        \"ino\",\n        \"inq\",\n        \"inrg\",\n        \"ins\",\n        \"insglobal\",\n        \"insremot\",\n        \"int\",\n        \"integ\",\n        \"interleave\",\n        \"interp\",\n        \"invalue\",\n        \"inx\",\n        \"inz\",\n        \"jacktransport\",\n        \"jitter\",\n        \"jitter2\",\n        \"joystick\",\n        \"jspline\",\n        \"k\",\n        \"la_i_add_mc\",\n        \"la_i_add_mr\",\n        \"la_i_add_vc\",\n        \"la_i_add_vr\",\n        \"la_i_assign_mc\",\n        \"la_i_assign_mr\",\n        \"la_i_assign_t\",\n        \"la_i_assign_vc\",\n        \"la_i_assign_vr\",\n        \"la_i_conjugate_mc\",\n        \"la_i_conjugate_mr\",\n        \"la_i_conjugate_vc\",\n        \"la_i_conjugate_vr\",\n        \"la_i_distance_vc\",\n        \"la_i_distance_vr\",\n        \"la_i_divide_mc\",\n        \"la_i_divide_mr\",\n        \"la_i_divide_vc\",\n        \"la_i_divide_vr\",\n        \"la_i_dot_mc\",\n        \"la_i_dot_mc_vc\",\n        \"la_i_dot_mr\",\n        \"la_i_dot_mr_vr\",\n        \"la_i_dot_vc\",\n        \"la_i_dot_vr\",\n        \"la_i_get_mc\",\n        \"la_i_get_mr\",\n        \"la_i_get_vc\",\n        \"la_i_get_vr\",\n        \"la_i_invert_mc\",\n        \"la_i_invert_mr\",\n        \"la_i_lower_solve_mc\",\n        \"la_i_lower_solve_mr\",\n        \"la_i_lu_det_mc\",\n        \"la_i_lu_det_mr\",\n        \"la_i_lu_factor_mc\",\n        \"la_i_lu_factor_mr\",\n        \"la_i_lu_solve_mc\",\n        \"la_i_lu_solve_mr\",\n        \"la_i_mc_create\",\n        \"la_i_mc_set\",\n        \"la_i_mr_create\",\n        \"la_i_mr_set\",\n        \"la_i_multiply_mc\",\n        \"la_i_multiply_mr\",\n        \"la_i_multiply_vc\",\n        \"la_i_multiply_vr\",\n        \"la_i_norm1_mc\",\n        \"la_i_norm1_mr\",\n        \"la_i_norm1_vc\",\n        \"la_i_norm1_vr\",\n        \"la_i_norm_euclid_mc\",\n        \"la_i_norm_euclid_mr\",\n        \"la_i_norm_euclid_vc\",\n        \"la_i_norm_euclid_vr\",\n        \"la_i_norm_inf_mc\",\n        \"la_i_norm_inf_mr\",\n        \"la_i_norm_inf_vc\",\n        \"la_i_norm_inf_vr\",\n        \"la_i_norm_max_mc\",\n        \"la_i_norm_max_mr\",\n        \"la_i_print_mc\",\n        \"la_i_print_mr\",\n        \"la_i_print_vc\",\n        \"la_i_print_vr\",\n        \"la_i_qr_eigen_mc\",\n        \"la_i_qr_eigen_mr\",\n        \"la_i_qr_factor_mc\",\n        \"la_i_qr_factor_mr\",\n        \"la_i_qr_sym_eigen_mc\",\n        \"la_i_qr_sym_eigen_mr\",\n        \"la_i_random_mc\",\n        \"la_i_random_mr\",\n        \"la_i_random_vc\",\n        \"la_i_random_vr\",\n        \"la_i_size_mc\",\n        \"la_i_size_mr\",\n        \"la_i_size_vc\",\n        \"la_i_size_vr\",\n        \"la_i_subtract_mc\",\n        \"la_i_subtract_mr\",\n        \"la_i_subtract_vc\",\n        \"la_i_subtract_vr\",\n        \"la_i_t_assign\",\n        \"la_i_trace_mc\",\n        \"la_i_trace_mr\",\n        \"la_i_transpose_mc\",\n        \"la_i_transpose_mr\",\n        \"la_i_upper_solve_mc\",\n        \"la_i_upper_solve_mr\",\n        \"la_i_vc_create\",\n        \"la_i_vc_set\",\n        \"la_i_vr_create\",\n        \"la_i_vr_set\",\n        \"la_k_a_assign\",\n        \"la_k_add_mc\",\n        \"la_k_add_mr\",\n        \"la_k_add_vc\",\n        \"la_k_add_vr\",\n        \"la_k_assign_a\",\n        \"la_k_assign_f\",\n        \"la_k_assign_mc\",\n        \"la_k_assign_mr\",\n        \"la_k_assign_t\",\n        \"la_k_assign_vc\",\n        \"la_k_assign_vr\",\n        \"la_k_conjugate_mc\",\n        \"la_k_conjugate_mr\",\n        \"la_k_conjugate_vc\",\n        \"la_k_conjugate_vr\",\n        \"la_k_current_f\",\n        \"la_k_current_vr\",\n        \"la_k_distance_vc\",\n        \"la_k_distance_vr\",\n        \"la_k_divide_mc\",\n        \"la_k_divide_mr\",\n        \"la_k_divide_vc\",\n        \"la_k_divide_vr\",\n        \"la_k_dot_mc\",\n        \"la_k_dot_mc_vc\",\n        \"la_k_dot_mr\",\n        \"la_k_dot_mr_vr\",\n        \"la_k_dot_vc\",\n        \"la_k_dot_vr\",\n        \"la_k_f_assign\",\n        \"la_k_get_mc\",\n        \"la_k_get_mr\",\n        \"la_k_get_vc\",\n        \"la_k_get_vr\",\n        \"la_k_invert_mc\",\n        \"la_k_invert_mr\",\n        \"la_k_lower_solve_mc\",\n        \"la_k_lower_solve_mr\",\n        \"la_k_lu_det_mc\",\n        \"la_k_lu_det_mr\",\n        \"la_k_lu_factor_mc\",\n        \"la_k_lu_factor_mr\",\n        \"la_k_lu_solve_mc\",\n        \"la_k_lu_solve_mr\",\n        \"la_k_mc_set\",\n        \"la_k_mr_set\",\n        \"la_k_multiply_mc\",\n        \"la_k_multiply_mr\",\n        \"la_k_multiply_vc\",\n        \"la_k_multiply_vr\",\n        \"la_k_norm1_mc\",\n        \"la_k_norm1_mr\",\n        \"la_k_norm1_vc\",\n        \"la_k_norm1_vr\",\n        \"la_k_norm_euclid_mc\",\n        \"la_k_norm_euclid_mr\",\n        \"la_k_norm_euclid_vc\",\n        \"la_k_norm_euclid_vr\",\n        \"la_k_norm_inf_mc\",\n        \"la_k_norm_inf_mr\",\n        \"la_k_norm_inf_vc\",\n        \"la_k_norm_inf_vr\",\n        \"la_k_norm_max_mc\",\n        \"la_k_norm_max_mr\",\n        \"la_k_qr_eigen_mc\",\n        \"la_k_qr_eigen_mr\",\n        \"la_k_qr_factor_mc\",\n        \"la_k_qr_factor_mr\",\n        \"la_k_qr_sym_eigen_mc\",\n        \"la_k_qr_sym_eigen_mr\",\n        \"la_k_random_mc\",\n        \"la_k_random_mr\",\n        \"la_k_random_vc\",\n        \"la_k_random_vr\",\n        \"la_k_subtract_mc\",\n        \"la_k_subtract_mr\",\n        \"la_k_subtract_vc\",\n        \"la_k_subtract_vr\",\n        \"la_k_t_assign\",\n        \"la_k_trace_mc\",\n        \"la_k_trace_mr\",\n        \"la_k_upper_solve_mc\",\n        \"la_k_upper_solve_mr\",\n        \"la_k_vc_set\",\n        \"la_k_vr_set\",\n        \"lenarray\",\n        \"lfo\",\n        \"limit\",\n        \"limit1\",\n        \"lincos\",\n        \"line\",\n        \"linen\",\n        \"linenr\",\n        \"lineto\",\n        \"link_beat_force\",\n        \"link_beat_get\",\n        \"link_beat_request\",\n        \"link_create\",\n        \"link_enable\",\n        \"link_is_enabled\",\n        \"link_metro\",\n        \"link_peers\",\n        \"link_tempo_get\",\n        \"link_tempo_set\",\n        \"linlin\",\n        \"linrand\",\n        \"linseg\",\n        \"linsegb\",\n        \"linsegr\",\n        \"liveconv\",\n        \"locsend\",\n        \"locsig\",\n        \"log\",\n        \"log10\",\n        \"log2\",\n        \"logbtwo\",\n        \"logcurve\",\n        \"loopseg\",\n        \"loopsegp\",\n        \"looptseg\",\n        \"loopxseg\",\n        \"lorenz\",\n        \"loscil\",\n        \"loscil3\",\n        \"loscil3phs\",\n        \"loscilphs\",\n        \"loscilx\",\n        \"lowpass2\",\n        \"lowres\",\n        \"lowresx\",\n        \"lpf18\",\n        \"lpform\",\n        \"lpfreson\",\n        \"lphasor\",\n        \"lpinterp\",\n        \"lposcil\",\n        \"lposcil3\",\n        \"lposcila\",\n        \"lposcilsa\",\n        \"lposcilsa2\",\n        \"lpread\",\n        \"lpreson\",\n        \"lpshold\",\n        \"lpsholdp\",\n        \"lpslot\",\n        \"lua_exec\",\n        \"lua_iaopcall\",\n        \"lua_iaopcall_off\",\n        \"lua_ikopcall\",\n        \"lua_ikopcall_off\",\n        \"lua_iopcall\",\n        \"lua_iopcall_off\",\n        \"lua_opdef\",\n        \"mac\",\n        \"maca\",\n        \"madsr\",\n        \"mags\",\n        \"mandel\",\n        \"mandol\",\n        \"maparray\",\n        \"maparray_i\",\n        \"marimba\",\n        \"massign\",\n        \"max\",\n        \"max_k\",\n        \"maxabs\",\n        \"maxabsaccum\",\n        \"maxaccum\",\n        \"maxalloc\",\n        \"maxarray\",\n        \"mclock\",\n        \"mdelay\",\n        \"median\",\n        \"mediank\",\n        \"metro\",\n        \"mfb\",\n        \"midglobal\",\n        \"midiarp\",\n        \"midic14\",\n        \"midic21\",\n        \"midic7\",\n        \"midichannelaftertouch\",\n        \"midichn\",\n        \"midicontrolchange\",\n        \"midictrl\",\n        \"mididefault\",\n        \"midifilestatus\",\n        \"midiin\",\n        \"midinoteoff\",\n        \"midinoteoncps\",\n        \"midinoteonkey\",\n        \"midinoteonoct\",\n        \"midinoteonpch\",\n        \"midion\",\n        \"midion2\",\n        \"midiout\",\n        \"midiout_i\",\n        \"midipgm\",\n        \"midipitchbend\",\n        \"midipolyaftertouch\",\n        \"midiprogramchange\",\n        \"miditempo\",\n        \"midremot\",\n        \"min\",\n        \"minabs\",\n        \"minabsaccum\",\n        \"minaccum\",\n        \"minarray\",\n        \"mincer\",\n        \"mirror\",\n        \"mode\",\n        \"modmatrix\",\n        \"monitor\",\n        \"moog\",\n        \"moogladder\",\n        \"moogladder2\",\n        \"moogvcf\",\n        \"moogvcf2\",\n        \"moscil\",\n        \"mp3bitrate\",\n        \"mp3in\",\n        \"mp3len\",\n        \"mp3nchnls\",\n        \"mp3scal\",\n        \"mp3sr\",\n        \"mpulse\",\n        \"mrtmsg\",\n        \"mtof\",\n        \"mton\",\n        \"multitap\",\n        \"mute\",\n        \"mvchpf\",\n        \"mvclpf1\",\n        \"mvclpf2\",\n        \"mvclpf3\",\n        \"mvclpf4\",\n        \"mxadsr\",\n        \"nchnls_hw\",\n        \"nestedap\",\n        \"nlalp\",\n        \"nlfilt\",\n        \"nlfilt2\",\n        \"noise\",\n        \"noteoff\",\n        \"noteon\",\n        \"noteondur\",\n        \"noteondur2\",\n        \"notnum\",\n        \"nreverb\",\n        \"nrpn\",\n        \"nsamp\",\n        \"nstance\",\n        \"nstrnum\",\n        \"ntom\",\n        \"ntrpol\",\n        \"nxtpow2\",\n        \"octave\",\n        \"octcps\",\n        \"octmidi\",\n        \"octmidib\",\n        \"octmidinn\",\n        \"octpch\",\n        \"olabuffer\",\n        \"oscbnk\",\n        \"oscil\",\n        \"oscil1\",\n        \"oscil1i\",\n        \"oscil3\",\n        \"oscili\",\n        \"oscilikt\",\n        \"osciliktp\",\n        \"oscilikts\",\n        \"osciln\",\n        \"oscils\",\n        \"oscilx\",\n        \"out\",\n        \"out32\",\n        \"outc\",\n        \"outch\",\n        \"outh\",\n        \"outiat\",\n        \"outic\",\n        \"outic14\",\n        \"outipat\",\n        \"outipb\",\n        \"outipc\",\n        \"outkat\",\n        \"outkc\",\n        \"outkc14\",\n        \"outkpat\",\n        \"outkpb\",\n        \"outkpc\",\n        \"outleta\",\n        \"outletf\",\n        \"outletk\",\n        \"outletkid\",\n        \"outletv\",\n        \"outo\",\n        \"outq\",\n        \"outq1\",\n        \"outq2\",\n        \"outq3\",\n        \"outq4\",\n        \"outrg\",\n        \"outs\",\n        \"outs1\",\n        \"outs2\",\n        \"outvalue\",\n        \"outx\",\n        \"outz\",\n        \"p\",\n        \"p5gconnect\",\n        \"p5gdata\",\n        \"pan\",\n        \"pan2\",\n        \"pareq\",\n        \"part2txt\",\n        \"partials\",\n        \"partikkel\",\n        \"partikkelget\",\n        \"partikkelset\",\n        \"partikkelsync\",\n        \"passign\",\n        \"paulstretch\",\n        \"pcauchy\",\n        \"pchbend\",\n        \"pchmidi\",\n        \"pchmidib\",\n        \"pchmidinn\",\n        \"pchoct\",\n        \"pchtom\",\n        \"pconvolve\",\n        \"pcount\",\n        \"pdclip\",\n        \"pdhalf\",\n        \"pdhalfy\",\n        \"peak\",\n        \"pgmassign\",\n        \"pgmchn\",\n        \"phaser1\",\n        \"phaser2\",\n        \"phasor\",\n        \"phasorbnk\",\n        \"phs\",\n        \"pindex\",\n        \"pinker\",\n        \"pinkish\",\n        \"pitch\",\n        \"pitchac\",\n        \"pitchamdf\",\n        \"planet\",\n        \"platerev\",\n        \"plltrack\",\n        \"pluck\",\n        \"poisson\",\n        \"pol2rect\",\n        \"polyaft\",\n        \"polynomial\",\n        \"port\",\n        \"portk\",\n        \"poscil\",\n        \"poscil3\",\n        \"pow\",\n        \"powershape\",\n        \"powoftwo\",\n        \"pows\",\n        \"prealloc\",\n        \"prepiano\",\n        \"print\",\n        \"print_type\",\n        \"printarray\",\n        \"printf\",\n        \"printf_i\",\n        \"printk\",\n        \"printk2\",\n        \"printks\",\n        \"printks2\",\n        \"prints\",\n        \"product\",\n        \"pset\",\n        \"ptable\",\n        \"ptable3\",\n        \"ptablei\",\n        \"ptableiw\",\n        \"ptablew\",\n        \"ptrack\",\n        \"puts\",\n        \"pvadd\",\n        \"pvbufread\",\n        \"pvcross\",\n        \"pvinterp\",\n        \"pvoc\",\n        \"pvread\",\n        \"pvs2array\",\n        \"pvs2tab\",\n        \"pvsadsyn\",\n        \"pvsanal\",\n        \"pvsarp\",\n        \"pvsbandp\",\n        \"pvsbandr\",\n        \"pvsbin\",\n        \"pvsblur\",\n        \"pvsbuffer\",\n        \"pvsbufread\",\n        \"pvsbufread2\",\n        \"pvscale\",\n        \"pvscent\",\n        \"pvsceps\",\n        \"pvscross\",\n        \"pvsdemix\",\n        \"pvsdiskin\",\n        \"pvsdisp\",\n        \"pvsenvftw\",\n        \"pvsfilter\",\n        \"pvsfread\",\n        \"pvsfreeze\",\n        \"pvsfromarray\",\n        \"pvsftr\",\n        \"pvsftw\",\n        \"pvsfwrite\",\n        \"pvsgain\",\n        \"pvshift\",\n        \"pvsifd\",\n        \"pvsin\",\n        \"pvsinfo\",\n        \"pvsinit\",\n        \"pvslock\",\n        \"pvsmaska\",\n        \"pvsmix\",\n        \"pvsmooth\",\n        \"pvsmorph\",\n        \"pvsosc\",\n        \"pvsout\",\n        \"pvspitch\",\n        \"pvstanal\",\n        \"pvstencil\",\n        \"pvstrace\",\n        \"pvsvoc\",\n        \"pvswarp\",\n        \"pvsynth\",\n        \"pwd\",\n        \"pyassign\",\n        \"pyassigni\",\n        \"pyassignt\",\n        \"pycall\",\n        \"pycall1\",\n        \"pycall1i\",\n        \"pycall1t\",\n        \"pycall2\",\n        \"pycall2i\",\n        \"pycall2t\",\n        \"pycall3\",\n        \"pycall3i\",\n        \"pycall3t\",\n        \"pycall4\",\n        \"pycall4i\",\n        \"pycall4t\",\n        \"pycall5\",\n        \"pycall5i\",\n        \"pycall5t\",\n        \"pycall6\",\n        \"pycall6i\",\n        \"pycall6t\",\n        \"pycall7\",\n        \"pycall7i\",\n        \"pycall7t\",\n        \"pycall8\",\n        \"pycall8i\",\n        \"pycall8t\",\n        \"pycalli\",\n        \"pycalln\",\n        \"pycallni\",\n        \"pycallt\",\n        \"pyeval\",\n        \"pyevali\",\n        \"pyevalt\",\n        \"pyexec\",\n        \"pyexeci\",\n        \"pyexect\",\n        \"pyinit\",\n        \"pylassign\",\n        \"pylassigni\",\n        \"pylassignt\",\n        \"pylcall\",\n        \"pylcall1\",\n        \"pylcall1i\",\n        \"pylcall1t\",\n        \"pylcall2\",\n        \"pylcall2i\",\n        \"pylcall2t\",\n        \"pylcall3\",\n        \"pylcall3i\",\n        \"pylcall3t\",\n        \"pylcall4\",\n        \"pylcall4i\",\n        \"pylcall4t\",\n        \"pylcall5\",\n        \"pylcall5i\",\n        \"pylcall5t\",\n        \"pylcall6\",\n        \"pylcall6i\",\n        \"pylcall6t\",\n        \"pylcall7\",\n        \"pylcall7i\",\n        \"pylcall7t\",\n        \"pylcall8\",\n        \"pylcall8i\",\n        \"pylcall8t\",\n        \"pylcalli\",\n        \"pylcalln\",\n        \"pylcallni\",\n        \"pylcallt\",\n        \"pyleval\",\n        \"pylevali\",\n        \"pylevalt\",\n        \"pylexec\",\n        \"pylexeci\",\n        \"pylexect\",\n        \"pylrun\",\n        \"pylruni\",\n        \"pylrunt\",\n        \"pyrun\",\n        \"pyruni\",\n        \"pyrunt\",\n        \"qinf\",\n        \"qnan\",\n        \"r2c\",\n        \"rand\",\n        \"randh\",\n        \"randi\",\n        \"random\",\n        \"randomh\",\n        \"randomi\",\n        \"rbjeq\",\n        \"readclock\",\n        \"readf\",\n        \"readfi\",\n        \"readk\",\n        \"readk2\",\n        \"readk3\",\n        \"readk4\",\n        \"readks\",\n        \"readscore\",\n        \"readscratch\",\n        \"rect2pol\",\n        \"release\",\n        \"remoteport\",\n        \"remove\",\n        \"repluck\",\n        \"reshapearray\",\n        \"reson\",\n        \"resonk\",\n        \"resonr\",\n        \"resonx\",\n        \"resonxk\",\n        \"resony\",\n        \"resonz\",\n        \"resyn\",\n        \"reverb\",\n        \"reverb2\",\n        \"reverbsc\",\n        \"rewindscore\",\n        \"rezzy\",\n        \"rfft\",\n        \"rifft\",\n        \"rms\",\n        \"rnd\",\n        \"rnd31\",\n        \"round\",\n        \"rspline\",\n        \"rtclock\",\n        \"s16b14\",\n        \"s32b14\",\n        \"samphold\",\n        \"sandpaper\",\n        \"sc_lag\",\n        \"sc_lagud\",\n        \"sc_phasor\",\n        \"sc_trig\",\n        \"scale\",\n        \"scalearray\",\n        \"scanhammer\",\n        \"scans\",\n        \"scantable\",\n        \"scanu\",\n        \"schedkwhen\",\n        \"schedkwhennamed\",\n        \"schedule\",\n        \"schedwhen\",\n        \"scoreline\",\n        \"scoreline_i\",\n        \"seed\",\n        \"sekere\",\n        \"select\",\n        \"semitone\",\n        \"sense\",\n        \"sensekey\",\n        \"seqtime\",\n        \"seqtime2\",\n        \"serialBegin\",\n        \"serialEnd\",\n        \"serialFlush\",\n        \"serialPrint\",\n        \"serialRead\",\n        \"serialWrite\",\n        \"serialWrite_i\",\n        \"setcol\",\n        \"setctrl\",\n        \"setksmps\",\n        \"setrow\",\n        \"setscorepos\",\n        \"sfilist\",\n        \"sfinstr\",\n        \"sfinstr3\",\n        \"sfinstr3m\",\n        \"sfinstrm\",\n        \"sfload\",\n        \"sflooper\",\n        \"sfpassign\",\n        \"sfplay\",\n        \"sfplay3\",\n        \"sfplay3m\",\n        \"sfplaym\",\n        \"sfplist\",\n        \"sfpreset\",\n        \"shaker\",\n        \"shiftin\",\n        \"shiftout\",\n        \"signum\",\n        \"sin\",\n        \"sinh\",\n        \"sininv\",\n        \"sinsyn\",\n        \"sleighbells\",\n        \"slicearray\",\n        \"slicearray_i\",\n        \"slider16\",\n        \"slider16f\",\n        \"slider16table\",\n        \"slider16tablef\",\n        \"slider32\",\n        \"slider32f\",\n        \"slider32table\",\n        \"slider32tablef\",\n        \"slider64\",\n        \"slider64f\",\n        \"slider64table\",\n        \"slider64tablef\",\n        \"slider8\",\n        \"slider8f\",\n        \"slider8table\",\n        \"slider8tablef\",\n        \"sliderKawai\",\n        \"sndloop\",\n        \"sndwarp\",\n        \"sndwarpst\",\n        \"sockrecv\",\n        \"sockrecvs\",\n        \"socksend\",\n        \"socksends\",\n        \"sorta\",\n        \"sortd\",\n        \"soundin\",\n        \"space\",\n        \"spat3d\",\n        \"spat3di\",\n        \"spat3dt\",\n        \"spdist\",\n        \"splitrig\",\n        \"sprintf\",\n        \"sprintfk\",\n        \"spsend\",\n        \"sqrt\",\n        \"squinewave\",\n        \"statevar\",\n        \"stix\",\n        \"strcat\",\n        \"strcatk\",\n        \"strchar\",\n        \"strchark\",\n        \"strcmp\",\n        \"strcmpk\",\n        \"strcpy\",\n        \"strcpyk\",\n        \"strecv\",\n        \"streson\",\n        \"strfromurl\",\n        \"strget\",\n        \"strindex\",\n        \"strindexk\",\n        \"strlen\",\n        \"strlenk\",\n        \"strlower\",\n        \"strlowerk\",\n        \"strrindex\",\n        \"strrindexk\",\n        \"strset\",\n        \"strsub\",\n        \"strsubk\",\n        \"strtod\",\n        \"strtodk\",\n        \"strtol\",\n        \"strtolk\",\n        \"strupper\",\n        \"strupperk\",\n        \"stsend\",\n        \"subinstr\",\n        \"subinstrinit\",\n        \"sum\",\n        \"sumarray\",\n        \"svfilter\",\n        \"syncgrain\",\n        \"syncloop\",\n        \"syncphasor\",\n        \"system\",\n        \"system_i\",\n        \"tab\",\n        \"tab2array\",\n        \"tab2pvs\",\n        \"tab_i\",\n        \"tabifd\",\n        \"table\",\n        \"table3\",\n        \"table3kt\",\n        \"tablecopy\",\n        \"tablefilter\",\n        \"tablefilteri\",\n        \"tablegpw\",\n        \"tablei\",\n        \"tableicopy\",\n        \"tableigpw\",\n        \"tableikt\",\n        \"tableimix\",\n        \"tableiw\",\n        \"tablekt\",\n        \"tablemix\",\n        \"tableng\",\n        \"tablera\",\n        \"tableseg\",\n        \"tableshuffle\",\n        \"tableshufflei\",\n        \"tablew\",\n        \"tablewa\",\n        \"tablewkt\",\n        \"tablexkt\",\n        \"tablexseg\",\n        \"tabmorph\",\n        \"tabmorpha\",\n        \"tabmorphak\",\n        \"tabmorphi\",\n        \"tabplay\",\n        \"tabrec\",\n        \"tabrowlin\",\n        \"tabsum\",\n        \"tabw\",\n        \"tabw_i\",\n        \"tambourine\",\n        \"tan\",\n        \"tanh\",\n        \"taninv\",\n        \"taninv2\",\n        \"tbvcf\",\n        \"tempest\",\n        \"tempo\",\n        \"temposcal\",\n        \"tempoval\",\n        \"timedseq\",\n        \"timeinstk\",\n        \"timeinsts\",\n        \"timek\",\n        \"times\",\n        \"tival\",\n        \"tlineto\",\n        \"tone\",\n        \"tonek\",\n        \"tonex\",\n        \"tradsyn\",\n        \"trandom\",\n        \"transeg\",\n        \"transegb\",\n        \"transegr\",\n        \"trcross\",\n        \"trfilter\",\n        \"trhighest\",\n        \"trigger\",\n        \"trigseq\",\n        \"trim\",\n        \"trim_i\",\n        \"trirand\",\n        \"trlowest\",\n        \"trmix\",\n        \"trscale\",\n        \"trshift\",\n        \"trsplit\",\n        \"turnoff\",\n        \"turnoff2\",\n        \"turnon\",\n        \"tvconv\",\n        \"unirand\",\n        \"unwrap\",\n        \"upsamp\",\n        \"urandom\",\n        \"urd\",\n        \"vactrol\",\n        \"vadd\",\n        \"vadd_i\",\n        \"vaddv\",\n        \"vaddv_i\",\n        \"vaget\",\n        \"valpass\",\n        \"vaset\",\n        \"vbap\",\n        \"vbapg\",\n        \"vbapgmove\",\n        \"vbaplsinit\",\n        \"vbapmove\",\n        \"vbapz\",\n        \"vbapzmove\",\n        \"vcella\",\n        \"vco\",\n        \"vco2\",\n        \"vco2ft\",\n        \"vco2ift\",\n        \"vco2init\",\n        \"vcomb\",\n        \"vcopy\",\n        \"vcopy_i\",\n        \"vdel_k\",\n        \"vdelay\",\n        \"vdelay3\",\n        \"vdelayk\",\n        \"vdelayx\",\n        \"vdelayxq\",\n        \"vdelayxs\",\n        \"vdelayxw\",\n        \"vdelayxwq\",\n        \"vdelayxws\",\n        \"vdivv\",\n        \"vdivv_i\",\n        \"vecdelay\",\n        \"veloc\",\n        \"vexp\",\n        \"vexp_i\",\n        \"vexpseg\",\n        \"vexpv\",\n        \"vexpv_i\",\n        \"vibes\",\n        \"vibr\",\n        \"vibrato\",\n        \"vincr\",\n        \"vlimit\",\n        \"vlinseg\",\n        \"vlowres\",\n        \"vmap\",\n        \"vmirror\",\n        \"vmult\",\n        \"vmult_i\",\n        \"vmultv\",\n        \"vmultv_i\",\n        \"voice\",\n        \"vosim\",\n        \"vphaseseg\",\n        \"vport\",\n        \"vpow\",\n        \"vpow_i\",\n        \"vpowv\",\n        \"vpowv_i\",\n        \"vpvoc\",\n        \"vrandh\",\n        \"vrandi\",\n        \"vsubv\",\n        \"vsubv_i\",\n        \"vtaba\",\n        \"vtabi\",\n        \"vtabk\",\n        \"vtable1k\",\n        \"vtablea\",\n        \"vtablei\",\n        \"vtablek\",\n        \"vtablewa\",\n        \"vtablewi\",\n        \"vtablewk\",\n        \"vtabwa\",\n        \"vtabwi\",\n        \"vtabwk\",\n        \"vwrap\",\n        \"waveset\",\n        \"websocket\",\n        \"weibull\",\n        \"wgbow\",\n        \"wgbowedbar\",\n        \"wgbrass\",\n        \"wgclar\",\n        \"wgflute\",\n        \"wgpluck\",\n        \"wgpluck2\",\n        \"wguide1\",\n        \"wguide2\",\n        \"wiiconnect\",\n        \"wiidata\",\n        \"wiirange\",\n        \"wiisend\",\n        \"window\",\n        \"wrap\",\n        \"writescratch\",\n        \"wterrain\",\n        \"xadsr\",\n        \"xin\",\n        \"xout\",\n        \"xscanmap\",\n        \"xscans\",\n        \"xscansmap\",\n        \"xscanu\",\n        \"xtratim\",\n        \"xyscale\",\n        \"zacl\",\n        \"zakinit\",\n        \"zamod\",\n        \"zar\",\n        \"zarg\",\n        \"zaw\",\n        \"zawm\",\n        \"zdf_1pole\",\n        \"zdf_1pole_mode\",\n        \"zdf_2pole\",\n        \"zdf_2pole_mode\",\n        \"zdf_ladder\",\n        \"zfilter2\",\n        \"zir\",\n        \"ziw\",\n        \"ziwm\",\n        \"zkcl\",\n        \"zkmod\",\n        \"zkr\",\n        \"zkw\",\n        \"zkwm\"\n    ];\n    var deprecatedOpcodes = [\n        \"array\",\n        \"bformdec\",\n        \"bformenc\",\n        \"copy2ftab\",\n        \"copy2ttab\",\n        \"hrtfer\",\n        \"ktableseg\",\n        \"lentab\",\n        \"maxtab\",\n        \"mintab\",\n        \"pop\",\n        \"pop_f\",\n        \"push\",\n        \"push_f\",\n        \"scalet\",\n        \"sndload\",\n        \"soundout\",\n        \"soundouts\",\n        \"specaddm\",\n        \"specdiff\",\n        \"specdisp\",\n        \"specfilt\",\n        \"spechist\",\n        \"specptrk\",\n        \"specscal\",\n        \"specsum\",\n        \"spectrum\",\n        \"stack\",\n        \"sumtab\",\n        \"tabgen\",\n        \"tabmap\",\n        \"tabmap_i\",\n        \"tabslice\",\n        \"tb0\",\n        \"tb0_init\",\n        \"tb1\",\n        \"tb10\",\n        \"tb10_init\",\n        \"tb11\",\n        \"tb11_init\",\n        \"tb12\",\n        \"tb12_init\",\n        \"tb13\",\n        \"tb13_init\",\n        \"tb14\",\n        \"tb14_init\",\n        \"tb15\",\n        \"tb15_init\",\n        \"tb1_init\",\n        \"tb2\",\n        \"tb2_init\",\n        \"tb3\",\n        \"tb3_init\",\n        \"tb4\",\n        \"tb4_init\",\n        \"tb5\",\n        \"tb5_init\",\n        \"tb6\",\n        \"tb6_init\",\n        \"tb7\",\n        \"tb7_init\",\n        \"tb8\",\n        \"tb8_init\",\n        \"tb9\",\n        \"tb9_init\",\n        \"vbap16\",\n        \"vbap4\",\n        \"vbap4move\",\n        \"vbap8\",\n        \"vbap8move\",\n        \"xyin\"\n    ];\n\n    opcodes = lang.arrayToMap(opcodes);\n    deprecatedOpcodes = lang.arrayToMap(deprecatedOpcodes);\n\n    this.lineContinuations = [\n        {\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\$/\n        }, this.pushRule({\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\/,\n            next  : \"line continuation\"\n        })\n    ];\n\n    this.comments.push(this.lineContinuations);\n\n    this.quotedStringContents.push(\n        this.lineContinuations,\n        {\n            token : \"invalid.illegal\",\n            regex : /[^\"\\\\]*$/\n        }\n    );\n\n    var start = this.$rules.start;\n    start.splice(1, 0, {\n        token : [\"text.csound\", \"entity.name.label.csound\", \"entity.punctuation.label.csound\", \"text.csound\"],\n        regex : /^([ \\t]*)(\\w+)(:)([ \\t]+|$)/\n    });\n    start.push(\n        this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\binstr\\b/,\n            next  : \"instrument numbers and identifiers\"\n        }), this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\bopcode\\b/,\n            next  : \"after opcode keyword\"\n        }), {\n            token : \"keyword.other.csound\",\n            regex : /\\bend(?:in|op)\\b/\n        },\n\n        {\n            token : \"variable.language.csound\",\n            regex : /\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound\",\n            regex : \"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~¬]|[=!+\\\\-*/^%&|<>#?:]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }), this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /{{/,\n            next  : \"braced string\"\n        }),\n\n        {\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/\n        },\n\n        this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b[ik]?goto\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:r(?:einit|igoto)|tigoto)\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bc(?:g|in?|k|nk?)goto\\b/,\n            next  : [\"goto before label\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\btimout\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bloop_[gl][et]\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\", \"goto before argument\"]\n        }),\n\n        this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\b(?:readscore|scoreline(?:_i)?)\\b/,\n            next  : \"Csound score opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\bpyl?run[it]?\\b(?!$)/,\n            next  : \"Python opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\blua_(?:exec|opdef)\\b(?!$)/,\n            next  : \"Lua opcode\"\n        }),\n\n        {\n            token : \"support.variable.csound\",\n            regex : /\\bp\\d+\\b/\n        }, {\n            regex : /\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/, onMatch: function(value, currentState, stack, line) {\n                var tokens = value.split(this.splitRegex);\n                var name = tokens[1];\n                var type;\n                if (opcodes.hasOwnProperty(name))\n                    type = \"support.function.csound\";\n                else if (deprecatedOpcodes.hasOwnProperty(name))\n                    type = \"invalid.deprecated.csound\";\n                if (type) {\n                    if (tokens[2]) {\n                        return [\n                            {type: type, value: name},\n                            {type: \"punctuation.type-annotation.csound\", value: tokens[2]},\n                            {type: \"type-annotation.storage.type.csound\", value: tokens[3]}\n                        ];\n                    }\n                    return type;\n                }\n                return \"text.csound\";\n            }\n        }\n    );\n\n    this.$rules[\"macro parameter value list\"].splice(2, 0, {\n        token : \"punctuation.definition.string.begin.csound\",\n        regex : /{{/,\n        next  : \"macro parameter value braced string\"\n    });\n\n    this.addRules({\n        \"macro parameter value braced string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/,\n                next  : \"macro parameter value list\"\n            }, {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"instrument numbers and identifiers\": [\n            this.comments,\n            {\n                token : \"entity.name.function.csound\",\n                regex : /\\d+|[A-Z_a-z]\\w*/\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"after opcode keyword\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), this.popRule({\n                token : \"entity.name.function.opcode.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"opcode type signatures\"\n            })\n        ],\n        \"opcode type signatures\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), {\n                token : \"storage.type.csound\",\n                regex : /\\b(?:0|[afijkKoOpPStV\\[\\]]+)/\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"braced string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/\n            }),\n            this.bracedStringContents,\n            {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"goto before argument\": [\n            this.popRule({\n                token : \"text.csound\",\n                regex : /,/\n            }),\n            start\n        ],\n        \"goto before label\": [\n            {\n                token : \"text.csound\",\n                regex : /\\s+/\n            },\n            this.comments,\n            this.popRule({\n                token : \"entity.name.label.csound\",\n                regex : /\\w+/\n            }), this.popRule({\n                token : \"empty\",\n                regex : /(?!\\w)/\n            })\n        ],\n\n        \"Csound score opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"csound-score-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Python opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"python-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Lua opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"lua-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"line continuation\": [\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }),\n            this.semicolonComments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ]\n    });\n\n    var rules = [\n        this.popRule({\n            token : \"punctuation.definition.string.end.csound\",\n            regex : /}}/\n        })\n    ];\n    this.embedRules(CsoundScoreHighlightRules, \"csound-score-\", rules);\n    this.embedRules(PythonHighlightRules, \"python-\", rules);\n    this.embedRules(LuaHighlightRules, \"lua-\", rules);\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundOrchestraHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundOrchestraHighlightRules = CsoundOrchestraHighlightRules;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/csound_document_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_orchestra_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundOrchestraHighlightRules = require(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundDocumentHighlightRules = function() {\n\n    this.$rules = {\n        \"start\": [\n            {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : /(<)(CsoundSynthesi[sz]er)(>)/,\n                next  : \"synthesizer\"\n            },\n            {defaultToken : \"text.csound-document\"}\n        ],\n\n        \"synthesizer\": [\n            {\n                token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(</)(CsoundSynthesi[sz]er)(>)\",\n                next  : \"start\"\n            }, {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(<)(CsInstruments)(>)\",\n                next  : \"csound-start\"\n            }, {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(<)(CsScore)(>)\",\n                next  : \"csound-score-start\"\n            }, {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(<)([Hh][Tt][Mm][Ll])(>)\",\n                next  : \"html-start\"\n            }\n        ]\n    };\n\n    this.embedRules(CsoundOrchestraHighlightRules, \"csound-\", [{\n        token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n        regex : \"(</)(CsInstruments)(>)\",\n        next  : \"synthesizer\"\n    }]);\n    this.embedRules(CsoundScoreHighlightRules, \"csound-score-\", [{\n        token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n        regex : \"(</)(CsScore)(>)\",\n        next  : \"synthesizer\"\n    }]);\n    this.embedRules(HtmlHighlightRules, \"html-\", [{\n        token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n        regex : \"(</)([Hh][Tt][Mm][Ll])(>)\",\n        next  : \"synthesizer\"\n    }]);\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundDocumentHighlightRules, TextHighlightRules);\n\nexports.CsoundDocumentHighlightRules = CsoundDocumentHighlightRules;\n});\n\nace.define(\"ace/mode/csound_document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_document_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundDocumentHighlightRules = require(\"./csound_document_highlight_rules\").CsoundDocumentHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CsoundDocumentHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-csound_orchestra.js",
    "content": "ace.define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundPreprocessorHighlightRules = function() {\n\n    this.semicolonComments = {\n        token : \"comment.line.semicolon.csound\",\n        regex : \";.*$\"\n    };\n\n    this.comments = [\n        {\n            token : \"punctuation.definition.comment.begin.csound\",\n            regex : \"/\\\\*\",\n            push  : [\n                {\n                    token : \"punctuation.definition.comment.end.csound\",\n                    regex : \"\\\\*/\",\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token : \"comment.line.double-slash.csound\",\n            regex : \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n\n    this.macroUses = [\n        {\n            token : [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex : /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next  : \"macro parameter value list\"\n        }, {\n            token : \"entity.name.function.preprocessor.csound\",\n            regex : /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n\n    this.numbers = [\n        {\n            token : \"constant.numeric.float.csound\",\n            regex : /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token : [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex : /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token : \"constant.numeric.integer.decimal.csound\",\n            regex : /\\d+/\n        }\n    ];\n\n    this.bracedStringContents = [\n        {\n            token : \"constant.character.escape.csound\",\n            regex : /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        {\n            token : \"constant.character.placeholder.csound\",\n            regex : /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token : \"constant.character.escape.csound\",\n            regex : /%%/\n        }\n    ];\n\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n\n    var start = [\n        this.comments,\n\n        {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#include/,\n            push  : [\n                this.comments,\n                {\n                    token : \"string.csound\",\n                    regex : /([^ \\t])(?:.*?\\1)/,\n                    next  : \"pop\"\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#[ \\t]*define/,\n            next  : \"define directive\"\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:ifn?def|undef)\\b/,\n            next  : \"macro directive\"\n        },\n\n        this.macroUses\n    ];\n\n    this.$rules = {\n        \"start\": start,\n\n        \"define directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter name list\"\n            }, {\n                token : \"punctuation.definition.macro.begin.csound\",\n                regex : /#/,\n                next  : \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token : \"variable.parameter.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex : /\\)/,\n                next  : \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\#/\n            }, {\n                token : \"punctuation.definition.macro.end.csound\",\n                regex : /#/,\n                next  : \"start\"\n            },\n            start\n        ],\n\n        \"macro directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"macro parameter value list\": [\n            {\n                token : \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex : /\\)/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }), {\n                token : \"punctuation.macro-parameter-value-separator.csound\",\n                regex : \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\\\)/\n            }, this.popRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex : /\\)/\n            }), this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\n\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n\n(function() {\n\n    this.pushRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                } else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (Array.isArray(params.next)) {\n                    var oldNext = params.next[params.next.length - 1];\n                    var oldNextIndex = oldNext.length - 1;\n                    var newNextIndex = next.length - 1;\n                    if (newNextIndex > oldNextIndex) {\n                        while (oldNextIndex >= 0 && newNextIndex >= 0) {\n                            if (oldNext.charAt(oldNextIndex) !== next.charAt(newNextIndex)) {\n                                var prefix = next.substr(0, newNextIndex);\n                                for (var i = 0; i < params.next.length; i++) {\n                                    params.next[i] = prefix + params.next[i];\n                                }\n                                break;\n                            }\n                            oldNextIndex--;\n                            newNextIndex--;\n                        }\n                    }\n                } else {\n                    params.next = next;\n                }\n            },\n            get token() { return params.token; }\n        };\n    };\n\n    this.popRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                } else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n\n}).call(CsoundPreprocessorHighlightRules.prototype);\n\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n});\n\nace.define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\n\nvar CsoundScoreHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n\n    this.quotedStringContents.push({\n        token : \"invalid.illegal.csound-score\",\n        regex : /[^\"]*$/\n    });\n\n    var start = this.$rules.start;\n    start.push(\n        {\n            token : \"keyword.control.csound-score\",\n            regex : /[abCdefiqstvxy]/\n        }, {\n            token : \"invalid.illegal.csound-score\",\n            regex : /w/\n        }, {\n            token : \"constant.numeric.language.csound-score\",\n            regex : /z/\n        }, {\n            token : [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n            regex : /([nNpP][pP])(\\d+)/\n        }, {\n            token : \"keyword.other.csound-score\",\n            regex : /[mn]/,\n            push  : [\n                {\n                    token : \"empty\",\n                    regex : /$/,\n                    next  : \"pop\"\n                },\n                this.comments,\n                {\n                    token : \"entity.name.label.csound-score\",\n                    regex : /[A-Z_a-z]\\w*/\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound-score\",\n            regex : /r\\b/,\n            next  : \"repeat section\"\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound-score\",\n            regex : \"[!+\\\\-*/^%&|<>#~.]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound-score\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }),\n\n        this.pushRule({\n            token : \"punctuation.braced-loop.begin.csound-score\",\n            regex : /{/,\n            next  : \"loop after left brace\"\n        })\n    );\n\n    this.addRules({\n        \"repeat section\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"entity.name.label.csound-score\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound-score\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n\n        \"loop after left brace\": [\n            this.popRule({\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token : \"entity.name.function.preprocessor.csound-score\",\n                regex : /[A-Z_a-z]\\w*\\b/,\n                next  : \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token : \"punctuation.braced-loop.end.csound-score\",\n                regex : /}/\n            })\n        ]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n});\n\nace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuaHighlightRules = function() {\n\n    var keywords = (\n        \"break|do|else|elseif|end|for|function|if|in|local|repeat|\"+\n         \"return|then|until|while|or|and|not\"\n    );\n\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n\n    var functions = (\n        \"string|xpcall|package|tostring|print|os|unpack|require|\"+\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\"+\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\"+\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\"+\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\"+\n        \"load|error|loadfile|\"+\n\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\"+\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\"+\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\"+\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\"+\n        \"lines|write|close|flush|open|output|type|read|stderr|\"+\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\"+\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\"+\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\"+\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\"+\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\"+\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\"+\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\"+\n        \"status|wrap|create|running|\"+\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\"+\n         \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\"\n    );\n\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [{\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex : /\\-\\-\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"comment\";\n                    },\n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ]\n        },\n\n        {\n            token : \"comment\",\n            regex : \"\\\\-\\\\-.*$\"\n        },\n        {\n            stateName: \"bracketedString\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length, currentState);\n                return \"string.start\";\n            },\n            regex : /\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"string.end\";\n                    },\n                    \n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        },\n        {\n            token : \"string\",           // \" string\n            regex : '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+|\\\\w+\"\n        } ]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LuaHighlightRules, TextHighlightRules);\n\nexports.LuaHighlightRules = LuaHighlightRules;\n});\n\nace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\"\n    );\n\n    var builtinConstants = (\n        \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n    );\n\n    var builtinFunctions = (\n        \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + '\"{3}',\n            next: \"rawqqstring3\"\n        }, {\n            token: \"string\", \n            regex: strRawPre + '\"(?=.)',\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'{3}\",\n            next: \"rawqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'(?=.)\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"{3}',\n            next: \"fqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"(?=.)',\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'{3}\",\n            next: \"fqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'(?=.)\",\n            next: \"fqstring\"\n        },{\n            token: \"string\",\n            regex: strRawFormatPre + '\"{3}',\n            next: \"rfqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + '\"(?=.)',\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'{3}\",\n            next: \"rfqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'(?=.)\",\n            next: \"rfqstring\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }, {\n            include: \"constants\"\n        }],\n        \"qqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring\": [{\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstringParRules\": [{//TODO: nested {}\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)]\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string\",\n            regex: \"'(.)*'\"\n        }, {\n            token: \"string\",\n            regex: '\"(.)*\"'\n        }, {\n            token: \"function.support\",\n            regex: \"(!s|!r|!a)\"\n        }, {\n            include: \"constants\"\n        },{\n            token: 'paren.rparen',\n            regex: \"}\",\n            next: 'pop'\n        },{\n            token: 'paren.lparen',\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }],\n        \"constants\": [{\n            token: \"constant.numeric\", // imaginary\n            regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: floatNumber\n        }, {\n            token: \"constant.numeric\", // long integer\n            regex: integer + \"[lL]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // integer\n            regex: integer + \"\\\\b\"\n        }, {\n            token: [\"punctuation\", \"function.support\"],// method\n            regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n\nace.define(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\n\nvar CsoundOrchestraHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n    var opcodes = [\n        \"ATSadd\",\n        \"ATSaddnz\",\n        \"ATSbufread\",\n        \"ATScross\",\n        \"ATSinfo\",\n        \"ATSinterpread\",\n        \"ATSpartialtap\",\n        \"ATSread\",\n        \"ATSreadnz\",\n        \"ATSsinnoi\",\n        \"FLbox\",\n        \"FLbutBank\",\n        \"FLbutton\",\n        \"FLcloseButton\",\n        \"FLcolor\",\n        \"FLcolor2\",\n        \"FLcount\",\n        \"FLexecButton\",\n        \"FLgetsnap\",\n        \"FLgroup\",\n        \"FLgroupEnd\",\n        \"FLgroup_end\",\n        \"FLhide\",\n        \"FLhvsBox\",\n        \"FLhvsBoxSetValue\",\n        \"FLjoy\",\n        \"FLkeyIn\",\n        \"FLknob\",\n        \"FLlabel\",\n        \"FLloadsnap\",\n        \"FLmouse\",\n        \"FLpack\",\n        \"FLpackEnd\",\n        \"FLpack_end\",\n        \"FLpanel\",\n        \"FLpanelEnd\",\n        \"FLpanel_end\",\n        \"FLprintk\",\n        \"FLprintk2\",\n        \"FLroller\",\n        \"FLrun\",\n        \"FLsavesnap\",\n        \"FLscroll\",\n        \"FLscrollEnd\",\n        \"FLscroll_end\",\n        \"FLsetAlign\",\n        \"FLsetBox\",\n        \"FLsetColor\",\n        \"FLsetColor2\",\n        \"FLsetFont\",\n        \"FLsetPosition\",\n        \"FLsetSize\",\n        \"FLsetSnapGroup\",\n        \"FLsetText\",\n        \"FLsetTextColor\",\n        \"FLsetTextSize\",\n        \"FLsetTextType\",\n        \"FLsetVal\",\n        \"FLsetVal_i\",\n        \"FLsetVali\",\n        \"FLsetsnap\",\n        \"FLshow\",\n        \"FLslidBnk\",\n        \"FLslidBnk2\",\n        \"FLslidBnk2Set\",\n        \"FLslidBnk2Setk\",\n        \"FLslidBnkGetHandle\",\n        \"FLslidBnkSet\",\n        \"FLslidBnkSetk\",\n        \"FLslider\",\n        \"FLtabs\",\n        \"FLtabsEnd\",\n        \"FLtabs_end\",\n        \"FLtext\",\n        \"FLupdate\",\n        \"FLvalue\",\n        \"FLvkeybd\",\n        \"FLvslidBnk\",\n        \"FLvslidBnk2\",\n        \"FLxyin\",\n        \"JackoAudioIn\",\n        \"JackoAudioInConnect\",\n        \"JackoAudioOut\",\n        \"JackoAudioOutConnect\",\n        \"JackoFreewheel\",\n        \"JackoInfo\",\n        \"JackoInit\",\n        \"JackoMidiInConnect\",\n        \"JackoMidiOut\",\n        \"JackoMidiOutConnect\",\n        \"JackoNoteOut\",\n        \"JackoOn\",\n        \"JackoTransport\",\n        \"K35_hpf\",\n        \"K35_lpf\",\n        \"MixerClear\",\n        \"MixerGetLevel\",\n        \"MixerReceive\",\n        \"MixerSend\",\n        \"MixerSetLevel\",\n        \"MixerSetLevel_i\",\n        \"OSCbundle\",\n        \"OSCcount\",\n        \"OSCinit\",\n        \"OSCinitM\",\n        \"OSClisten\",\n        \"OSCraw\",\n        \"OSCsend\",\n        \"OSCsend_lo\",\n        \"S\",\n        \"STKBandedWG\",\n        \"STKBeeThree\",\n        \"STKBlowBotl\",\n        \"STKBlowHole\",\n        \"STKBowed\",\n        \"STKBrass\",\n        \"STKClarinet\",\n        \"STKDrummer\",\n        \"STKFMVoices\",\n        \"STKFlute\",\n        \"STKHevyMetl\",\n        \"STKMandolin\",\n        \"STKModalBar\",\n        \"STKMoog\",\n        \"STKPercFlut\",\n        \"STKPlucked\",\n        \"STKResonate\",\n        \"STKRhodey\",\n        \"STKSaxofony\",\n        \"STKShakers\",\n        \"STKSimple\",\n        \"STKSitar\",\n        \"STKStifKarp\",\n        \"STKTubeBell\",\n        \"STKVoicForm\",\n        \"STKWhistle\",\n        \"STKWurley\",\n        \"a\",\n        \"abs\",\n        \"active\",\n        \"adsr\",\n        \"adsyn\",\n        \"adsynt\",\n        \"adsynt2\",\n        \"aftouch\",\n        \"alpass\",\n        \"alwayson\",\n        \"ampdb\",\n        \"ampdbfs\",\n        \"ampmidi\",\n        \"ampmidid\",\n        \"areson\",\n        \"aresonk\",\n        \"atone\",\n        \"atonek\",\n        \"atonex\",\n        \"babo\",\n        \"balance\",\n        \"balance2\",\n        \"bamboo\",\n        \"barmodel\",\n        \"bbcutm\",\n        \"bbcuts\",\n        \"beadsynt\",\n        \"beosc\",\n        \"betarand\",\n        \"bexprnd\",\n        \"bformdec1\",\n        \"bformenc1\",\n        \"binit\",\n        \"biquad\",\n        \"biquada\",\n        \"birnd\",\n        \"bpf\",\n        \"bpfcos\",\n        \"bqrez\",\n        \"butbp\",\n        \"butbr\",\n        \"buthp\",\n        \"butlp\",\n        \"butterbp\",\n        \"butterbr\",\n        \"butterhp\",\n        \"butterlp\",\n        \"button\",\n        \"buzz\",\n        \"c2r\",\n        \"cabasa\",\n        \"cauchy\",\n        \"cauchyi\",\n        \"cbrt\",\n        \"ceil\",\n        \"cell\",\n        \"cent\",\n        \"centroid\",\n        \"ceps\",\n        \"cepsinv\",\n        \"chanctrl\",\n        \"changed\",\n        \"changed2\",\n        \"chani\",\n        \"chano\",\n        \"chebyshevpoly\",\n        \"checkbox\",\n        \"chn_S\",\n        \"chn_a\",\n        \"chn_k\",\n        \"chnclear\",\n        \"chnexport\",\n        \"chnget\",\n        \"chngetks\",\n        \"chnmix\",\n        \"chnparams\",\n        \"chnset\",\n        \"chnsetks\",\n        \"chuap\",\n        \"clear\",\n        \"clfilt\",\n        \"clip\",\n        \"clockoff\",\n        \"clockon\",\n        \"cmp\",\n        \"cmplxprod\",\n        \"comb\",\n        \"combinv\",\n        \"compilecsd\",\n        \"compileorc\",\n        \"compilestr\",\n        \"compress\",\n        \"compress2\",\n        \"connect\",\n        \"control\",\n        \"convle\",\n        \"convolve\",\n        \"copya2ftab\",\n        \"copyf2array\",\n        \"cos\",\n        \"cosh\",\n        \"cosinv\",\n        \"cosseg\",\n        \"cossegb\",\n        \"cossegr\",\n        \"cps2pch\",\n        \"cpsmidi\",\n        \"cpsmidib\",\n        \"cpsmidinn\",\n        \"cpsoct\",\n        \"cpspch\",\n        \"cpstmid\",\n        \"cpstun\",\n        \"cpstuni\",\n        \"cpsxpch\",\n        \"cpumeter\",\n        \"cpuprc\",\n        \"cross2\",\n        \"crossfm\",\n        \"crossfmi\",\n        \"crossfmpm\",\n        \"crossfmpmi\",\n        \"crosspm\",\n        \"crosspmi\",\n        \"crunch\",\n        \"ctlchn\",\n        \"ctrl14\",\n        \"ctrl21\",\n        \"ctrl7\",\n        \"ctrlinit\",\n        \"cuserrnd\",\n        \"dam\",\n        \"date\",\n        \"dates\",\n        \"db\",\n        \"dbamp\",\n        \"dbfsamp\",\n        \"dcblock\",\n        \"dcblock2\",\n        \"dconv\",\n        \"dct\",\n        \"dctinv\",\n        \"deinterleave\",\n        \"delay\",\n        \"delay1\",\n        \"delayk\",\n        \"delayr\",\n        \"delayw\",\n        \"deltap\",\n        \"deltap3\",\n        \"deltapi\",\n        \"deltapn\",\n        \"deltapx\",\n        \"deltapxw\",\n        \"denorm\",\n        \"diff\",\n        \"diode_ladder\",\n        \"directory\",\n        \"diskgrain\",\n        \"diskin\",\n        \"diskin2\",\n        \"dispfft\",\n        \"display\",\n        \"distort\",\n        \"distort1\",\n        \"divz\",\n        \"doppler\",\n        \"dot\",\n        \"downsamp\",\n        \"dripwater\",\n        \"dssiactivate\",\n        \"dssiaudio\",\n        \"dssictls\",\n        \"dssiinit\",\n        \"dssilist\",\n        \"dumpk\",\n        \"dumpk2\",\n        \"dumpk3\",\n        \"dumpk4\",\n        \"duserrnd\",\n        \"dust\",\n        \"dust2\",\n        \"envlpx\",\n        \"envlpxr\",\n        \"ephasor\",\n        \"eqfil\",\n        \"evalstr\",\n        \"event\",\n        \"event_i\",\n        \"exciter\",\n        \"exitnow\",\n        \"exp\",\n        \"expcurve\",\n        \"expon\",\n        \"exprand\",\n        \"exprandi\",\n        \"expseg\",\n        \"expsega\",\n        \"expsegb\",\n        \"expsegba\",\n        \"expsegr\",\n        \"fareylen\",\n        \"fareyleni\",\n        \"faustaudio\",\n        \"faustcompile\",\n        \"faustctl\",\n        \"faustdsp\",\n        \"faustgen\",\n        \"faustplay\",\n        \"fft\",\n        \"fftinv\",\n        \"ficlose\",\n        \"filebit\",\n        \"filelen\",\n        \"filenchnls\",\n        \"filepeak\",\n        \"filescal\",\n        \"filesr\",\n        \"filevalid\",\n        \"fillarray\",\n        \"filter2\",\n        \"fin\",\n        \"fini\",\n        \"fink\",\n        \"fiopen\",\n        \"flanger\",\n        \"flashtxt\",\n        \"flooper\",\n        \"flooper2\",\n        \"floor\",\n        \"fmanal\",\n        \"fmax\",\n        \"fmb3\",\n        \"fmbell\",\n        \"fmin\",\n        \"fmmetal\",\n        \"fmod\",\n        \"fmpercfl\",\n        \"fmrhode\",\n        \"fmvoice\",\n        \"fmwurlie\",\n        \"fof\",\n        \"fof2\",\n        \"fofilter\",\n        \"fog\",\n        \"fold\",\n        \"follow\",\n        \"follow2\",\n        \"foscil\",\n        \"foscili\",\n        \"fout\",\n        \"fouti\",\n        \"foutir\",\n        \"foutk\",\n        \"fprintks\",\n        \"fprints\",\n        \"frac\",\n        \"fractalnoise\",\n        \"framebuffer\",\n        \"freeverb\",\n        \"ftaudio\",\n        \"ftchnls\",\n        \"ftconv\",\n        \"ftcps\",\n        \"ftfree\",\n        \"ftgen\",\n        \"ftgenonce\",\n        \"ftgentmp\",\n        \"ftlen\",\n        \"ftload\",\n        \"ftloadk\",\n        \"ftlptim\",\n        \"ftmorf\",\n        \"ftom\",\n        \"ftprint\",\n        \"ftresize\",\n        \"ftresizei\",\n        \"ftsamplebank\",\n        \"ftsave\",\n        \"ftsavek\",\n        \"ftslice\",\n        \"ftsr\",\n        \"gain\",\n        \"gainslider\",\n        \"gauss\",\n        \"gaussi\",\n        \"gausstrig\",\n        \"gbuzz\",\n        \"genarray\",\n        \"genarray_i\",\n        \"gendy\",\n        \"gendyc\",\n        \"gendyx\",\n        \"getcfg\",\n        \"getcol\",\n        \"getftargs\",\n        \"getrow\",\n        \"getrowlin\",\n        \"getseed\",\n        \"gogobel\",\n        \"grain\",\n        \"grain2\",\n        \"grain3\",\n        \"granule\",\n        \"guiro\",\n        \"harmon\",\n        \"harmon2\",\n        \"harmon3\",\n        \"harmon4\",\n        \"hdf5read\",\n        \"hdf5write\",\n        \"hilbert\",\n        \"hilbert2\",\n        \"hrtfearly\",\n        \"hrtfmove\",\n        \"hrtfmove2\",\n        \"hrtfreverb\",\n        \"hrtfstat\",\n        \"hsboscil\",\n        \"hvs1\",\n        \"hvs2\",\n        \"hvs3\",\n        \"hypot\",\n        \"i\",\n        \"ihold\",\n        \"imagecreate\",\n        \"imagefree\",\n        \"imagegetpixel\",\n        \"imageload\",\n        \"imagesave\",\n        \"imagesetpixel\",\n        \"imagesize\",\n        \"in\",\n        \"in32\",\n        \"inch\",\n        \"inh\",\n        \"init\",\n        \"initc14\",\n        \"initc21\",\n        \"initc7\",\n        \"inleta\",\n        \"inletf\",\n        \"inletk\",\n        \"inletkid\",\n        \"inletv\",\n        \"ino\",\n        \"inq\",\n        \"inrg\",\n        \"ins\",\n        \"insglobal\",\n        \"insremot\",\n        \"int\",\n        \"integ\",\n        \"interleave\",\n        \"interp\",\n        \"invalue\",\n        \"inx\",\n        \"inz\",\n        \"jacktransport\",\n        \"jitter\",\n        \"jitter2\",\n        \"joystick\",\n        \"jspline\",\n        \"k\",\n        \"la_i_add_mc\",\n        \"la_i_add_mr\",\n        \"la_i_add_vc\",\n        \"la_i_add_vr\",\n        \"la_i_assign_mc\",\n        \"la_i_assign_mr\",\n        \"la_i_assign_t\",\n        \"la_i_assign_vc\",\n        \"la_i_assign_vr\",\n        \"la_i_conjugate_mc\",\n        \"la_i_conjugate_mr\",\n        \"la_i_conjugate_vc\",\n        \"la_i_conjugate_vr\",\n        \"la_i_distance_vc\",\n        \"la_i_distance_vr\",\n        \"la_i_divide_mc\",\n        \"la_i_divide_mr\",\n        \"la_i_divide_vc\",\n        \"la_i_divide_vr\",\n        \"la_i_dot_mc\",\n        \"la_i_dot_mc_vc\",\n        \"la_i_dot_mr\",\n        \"la_i_dot_mr_vr\",\n        \"la_i_dot_vc\",\n        \"la_i_dot_vr\",\n        \"la_i_get_mc\",\n        \"la_i_get_mr\",\n        \"la_i_get_vc\",\n        \"la_i_get_vr\",\n        \"la_i_invert_mc\",\n        \"la_i_invert_mr\",\n        \"la_i_lower_solve_mc\",\n        \"la_i_lower_solve_mr\",\n        \"la_i_lu_det_mc\",\n        \"la_i_lu_det_mr\",\n        \"la_i_lu_factor_mc\",\n        \"la_i_lu_factor_mr\",\n        \"la_i_lu_solve_mc\",\n        \"la_i_lu_solve_mr\",\n        \"la_i_mc_create\",\n        \"la_i_mc_set\",\n        \"la_i_mr_create\",\n        \"la_i_mr_set\",\n        \"la_i_multiply_mc\",\n        \"la_i_multiply_mr\",\n        \"la_i_multiply_vc\",\n        \"la_i_multiply_vr\",\n        \"la_i_norm1_mc\",\n        \"la_i_norm1_mr\",\n        \"la_i_norm1_vc\",\n        \"la_i_norm1_vr\",\n        \"la_i_norm_euclid_mc\",\n        \"la_i_norm_euclid_mr\",\n        \"la_i_norm_euclid_vc\",\n        \"la_i_norm_euclid_vr\",\n        \"la_i_norm_inf_mc\",\n        \"la_i_norm_inf_mr\",\n        \"la_i_norm_inf_vc\",\n        \"la_i_norm_inf_vr\",\n        \"la_i_norm_max_mc\",\n        \"la_i_norm_max_mr\",\n        \"la_i_print_mc\",\n        \"la_i_print_mr\",\n        \"la_i_print_vc\",\n        \"la_i_print_vr\",\n        \"la_i_qr_eigen_mc\",\n        \"la_i_qr_eigen_mr\",\n        \"la_i_qr_factor_mc\",\n        \"la_i_qr_factor_mr\",\n        \"la_i_qr_sym_eigen_mc\",\n        \"la_i_qr_sym_eigen_mr\",\n        \"la_i_random_mc\",\n        \"la_i_random_mr\",\n        \"la_i_random_vc\",\n        \"la_i_random_vr\",\n        \"la_i_size_mc\",\n        \"la_i_size_mr\",\n        \"la_i_size_vc\",\n        \"la_i_size_vr\",\n        \"la_i_subtract_mc\",\n        \"la_i_subtract_mr\",\n        \"la_i_subtract_vc\",\n        \"la_i_subtract_vr\",\n        \"la_i_t_assign\",\n        \"la_i_trace_mc\",\n        \"la_i_trace_mr\",\n        \"la_i_transpose_mc\",\n        \"la_i_transpose_mr\",\n        \"la_i_upper_solve_mc\",\n        \"la_i_upper_solve_mr\",\n        \"la_i_vc_create\",\n        \"la_i_vc_set\",\n        \"la_i_vr_create\",\n        \"la_i_vr_set\",\n        \"la_k_a_assign\",\n        \"la_k_add_mc\",\n        \"la_k_add_mr\",\n        \"la_k_add_vc\",\n        \"la_k_add_vr\",\n        \"la_k_assign_a\",\n        \"la_k_assign_f\",\n        \"la_k_assign_mc\",\n        \"la_k_assign_mr\",\n        \"la_k_assign_t\",\n        \"la_k_assign_vc\",\n        \"la_k_assign_vr\",\n        \"la_k_conjugate_mc\",\n        \"la_k_conjugate_mr\",\n        \"la_k_conjugate_vc\",\n        \"la_k_conjugate_vr\",\n        \"la_k_current_f\",\n        \"la_k_current_vr\",\n        \"la_k_distance_vc\",\n        \"la_k_distance_vr\",\n        \"la_k_divide_mc\",\n        \"la_k_divide_mr\",\n        \"la_k_divide_vc\",\n        \"la_k_divide_vr\",\n        \"la_k_dot_mc\",\n        \"la_k_dot_mc_vc\",\n        \"la_k_dot_mr\",\n        \"la_k_dot_mr_vr\",\n        \"la_k_dot_vc\",\n        \"la_k_dot_vr\",\n        \"la_k_f_assign\",\n        \"la_k_get_mc\",\n        \"la_k_get_mr\",\n        \"la_k_get_vc\",\n        \"la_k_get_vr\",\n        \"la_k_invert_mc\",\n        \"la_k_invert_mr\",\n        \"la_k_lower_solve_mc\",\n        \"la_k_lower_solve_mr\",\n        \"la_k_lu_det_mc\",\n        \"la_k_lu_det_mr\",\n        \"la_k_lu_factor_mc\",\n        \"la_k_lu_factor_mr\",\n        \"la_k_lu_solve_mc\",\n        \"la_k_lu_solve_mr\",\n        \"la_k_mc_set\",\n        \"la_k_mr_set\",\n        \"la_k_multiply_mc\",\n        \"la_k_multiply_mr\",\n        \"la_k_multiply_vc\",\n        \"la_k_multiply_vr\",\n        \"la_k_norm1_mc\",\n        \"la_k_norm1_mr\",\n        \"la_k_norm1_vc\",\n        \"la_k_norm1_vr\",\n        \"la_k_norm_euclid_mc\",\n        \"la_k_norm_euclid_mr\",\n        \"la_k_norm_euclid_vc\",\n        \"la_k_norm_euclid_vr\",\n        \"la_k_norm_inf_mc\",\n        \"la_k_norm_inf_mr\",\n        \"la_k_norm_inf_vc\",\n        \"la_k_norm_inf_vr\",\n        \"la_k_norm_max_mc\",\n        \"la_k_norm_max_mr\",\n        \"la_k_qr_eigen_mc\",\n        \"la_k_qr_eigen_mr\",\n        \"la_k_qr_factor_mc\",\n        \"la_k_qr_factor_mr\",\n        \"la_k_qr_sym_eigen_mc\",\n        \"la_k_qr_sym_eigen_mr\",\n        \"la_k_random_mc\",\n        \"la_k_random_mr\",\n        \"la_k_random_vc\",\n        \"la_k_random_vr\",\n        \"la_k_subtract_mc\",\n        \"la_k_subtract_mr\",\n        \"la_k_subtract_vc\",\n        \"la_k_subtract_vr\",\n        \"la_k_t_assign\",\n        \"la_k_trace_mc\",\n        \"la_k_trace_mr\",\n        \"la_k_upper_solve_mc\",\n        \"la_k_upper_solve_mr\",\n        \"la_k_vc_set\",\n        \"la_k_vr_set\",\n        \"lenarray\",\n        \"lfo\",\n        \"limit\",\n        \"limit1\",\n        \"lincos\",\n        \"line\",\n        \"linen\",\n        \"linenr\",\n        \"lineto\",\n        \"link_beat_force\",\n        \"link_beat_get\",\n        \"link_beat_request\",\n        \"link_create\",\n        \"link_enable\",\n        \"link_is_enabled\",\n        \"link_metro\",\n        \"link_peers\",\n        \"link_tempo_get\",\n        \"link_tempo_set\",\n        \"linlin\",\n        \"linrand\",\n        \"linseg\",\n        \"linsegb\",\n        \"linsegr\",\n        \"liveconv\",\n        \"locsend\",\n        \"locsig\",\n        \"log\",\n        \"log10\",\n        \"log2\",\n        \"logbtwo\",\n        \"logcurve\",\n        \"loopseg\",\n        \"loopsegp\",\n        \"looptseg\",\n        \"loopxseg\",\n        \"lorenz\",\n        \"loscil\",\n        \"loscil3\",\n        \"loscil3phs\",\n        \"loscilphs\",\n        \"loscilx\",\n        \"lowpass2\",\n        \"lowres\",\n        \"lowresx\",\n        \"lpf18\",\n        \"lpform\",\n        \"lpfreson\",\n        \"lphasor\",\n        \"lpinterp\",\n        \"lposcil\",\n        \"lposcil3\",\n        \"lposcila\",\n        \"lposcilsa\",\n        \"lposcilsa2\",\n        \"lpread\",\n        \"lpreson\",\n        \"lpshold\",\n        \"lpsholdp\",\n        \"lpslot\",\n        \"lua_exec\",\n        \"lua_iaopcall\",\n        \"lua_iaopcall_off\",\n        \"lua_ikopcall\",\n        \"lua_ikopcall_off\",\n        \"lua_iopcall\",\n        \"lua_iopcall_off\",\n        \"lua_opdef\",\n        \"mac\",\n        \"maca\",\n        \"madsr\",\n        \"mags\",\n        \"mandel\",\n        \"mandol\",\n        \"maparray\",\n        \"maparray_i\",\n        \"marimba\",\n        \"massign\",\n        \"max\",\n        \"max_k\",\n        \"maxabs\",\n        \"maxabsaccum\",\n        \"maxaccum\",\n        \"maxalloc\",\n        \"maxarray\",\n        \"mclock\",\n        \"mdelay\",\n        \"median\",\n        \"mediank\",\n        \"metro\",\n        \"mfb\",\n        \"midglobal\",\n        \"midiarp\",\n        \"midic14\",\n        \"midic21\",\n        \"midic7\",\n        \"midichannelaftertouch\",\n        \"midichn\",\n        \"midicontrolchange\",\n        \"midictrl\",\n        \"mididefault\",\n        \"midifilestatus\",\n        \"midiin\",\n        \"midinoteoff\",\n        \"midinoteoncps\",\n        \"midinoteonkey\",\n        \"midinoteonoct\",\n        \"midinoteonpch\",\n        \"midion\",\n        \"midion2\",\n        \"midiout\",\n        \"midiout_i\",\n        \"midipgm\",\n        \"midipitchbend\",\n        \"midipolyaftertouch\",\n        \"midiprogramchange\",\n        \"miditempo\",\n        \"midremot\",\n        \"min\",\n        \"minabs\",\n        \"minabsaccum\",\n        \"minaccum\",\n        \"minarray\",\n        \"mincer\",\n        \"mirror\",\n        \"mode\",\n        \"modmatrix\",\n        \"monitor\",\n        \"moog\",\n        \"moogladder\",\n        \"moogladder2\",\n        \"moogvcf\",\n        \"moogvcf2\",\n        \"moscil\",\n        \"mp3bitrate\",\n        \"mp3in\",\n        \"mp3len\",\n        \"mp3nchnls\",\n        \"mp3scal\",\n        \"mp3sr\",\n        \"mpulse\",\n        \"mrtmsg\",\n        \"mtof\",\n        \"mton\",\n        \"multitap\",\n        \"mute\",\n        \"mvchpf\",\n        \"mvclpf1\",\n        \"mvclpf2\",\n        \"mvclpf3\",\n        \"mvclpf4\",\n        \"mxadsr\",\n        \"nchnls_hw\",\n        \"nestedap\",\n        \"nlalp\",\n        \"nlfilt\",\n        \"nlfilt2\",\n        \"noise\",\n        \"noteoff\",\n        \"noteon\",\n        \"noteondur\",\n        \"noteondur2\",\n        \"notnum\",\n        \"nreverb\",\n        \"nrpn\",\n        \"nsamp\",\n        \"nstance\",\n        \"nstrnum\",\n        \"ntom\",\n        \"ntrpol\",\n        \"nxtpow2\",\n        \"octave\",\n        \"octcps\",\n        \"octmidi\",\n        \"octmidib\",\n        \"octmidinn\",\n        \"octpch\",\n        \"olabuffer\",\n        \"oscbnk\",\n        \"oscil\",\n        \"oscil1\",\n        \"oscil1i\",\n        \"oscil3\",\n        \"oscili\",\n        \"oscilikt\",\n        \"osciliktp\",\n        \"oscilikts\",\n        \"osciln\",\n        \"oscils\",\n        \"oscilx\",\n        \"out\",\n        \"out32\",\n        \"outc\",\n        \"outch\",\n        \"outh\",\n        \"outiat\",\n        \"outic\",\n        \"outic14\",\n        \"outipat\",\n        \"outipb\",\n        \"outipc\",\n        \"outkat\",\n        \"outkc\",\n        \"outkc14\",\n        \"outkpat\",\n        \"outkpb\",\n        \"outkpc\",\n        \"outleta\",\n        \"outletf\",\n        \"outletk\",\n        \"outletkid\",\n        \"outletv\",\n        \"outo\",\n        \"outq\",\n        \"outq1\",\n        \"outq2\",\n        \"outq3\",\n        \"outq4\",\n        \"outrg\",\n        \"outs\",\n        \"outs1\",\n        \"outs2\",\n        \"outvalue\",\n        \"outx\",\n        \"outz\",\n        \"p\",\n        \"p5gconnect\",\n        \"p5gdata\",\n        \"pan\",\n        \"pan2\",\n        \"pareq\",\n        \"part2txt\",\n        \"partials\",\n        \"partikkel\",\n        \"partikkelget\",\n        \"partikkelset\",\n        \"partikkelsync\",\n        \"passign\",\n        \"paulstretch\",\n        \"pcauchy\",\n        \"pchbend\",\n        \"pchmidi\",\n        \"pchmidib\",\n        \"pchmidinn\",\n        \"pchoct\",\n        \"pchtom\",\n        \"pconvolve\",\n        \"pcount\",\n        \"pdclip\",\n        \"pdhalf\",\n        \"pdhalfy\",\n        \"peak\",\n        \"pgmassign\",\n        \"pgmchn\",\n        \"phaser1\",\n        \"phaser2\",\n        \"phasor\",\n        \"phasorbnk\",\n        \"phs\",\n        \"pindex\",\n        \"pinker\",\n        \"pinkish\",\n        \"pitch\",\n        \"pitchac\",\n        \"pitchamdf\",\n        \"planet\",\n        \"platerev\",\n        \"plltrack\",\n        \"pluck\",\n        \"poisson\",\n        \"pol2rect\",\n        \"polyaft\",\n        \"polynomial\",\n        \"port\",\n        \"portk\",\n        \"poscil\",\n        \"poscil3\",\n        \"pow\",\n        \"powershape\",\n        \"powoftwo\",\n        \"pows\",\n        \"prealloc\",\n        \"prepiano\",\n        \"print\",\n        \"print_type\",\n        \"printarray\",\n        \"printf\",\n        \"printf_i\",\n        \"printk\",\n        \"printk2\",\n        \"printks\",\n        \"printks2\",\n        \"prints\",\n        \"product\",\n        \"pset\",\n        \"ptable\",\n        \"ptable3\",\n        \"ptablei\",\n        \"ptableiw\",\n        \"ptablew\",\n        \"ptrack\",\n        \"puts\",\n        \"pvadd\",\n        \"pvbufread\",\n        \"pvcross\",\n        \"pvinterp\",\n        \"pvoc\",\n        \"pvread\",\n        \"pvs2array\",\n        \"pvs2tab\",\n        \"pvsadsyn\",\n        \"pvsanal\",\n        \"pvsarp\",\n        \"pvsbandp\",\n        \"pvsbandr\",\n        \"pvsbin\",\n        \"pvsblur\",\n        \"pvsbuffer\",\n        \"pvsbufread\",\n        \"pvsbufread2\",\n        \"pvscale\",\n        \"pvscent\",\n        \"pvsceps\",\n        \"pvscross\",\n        \"pvsdemix\",\n        \"pvsdiskin\",\n        \"pvsdisp\",\n        \"pvsenvftw\",\n        \"pvsfilter\",\n        \"pvsfread\",\n        \"pvsfreeze\",\n        \"pvsfromarray\",\n        \"pvsftr\",\n        \"pvsftw\",\n        \"pvsfwrite\",\n        \"pvsgain\",\n        \"pvshift\",\n        \"pvsifd\",\n        \"pvsin\",\n        \"pvsinfo\",\n        \"pvsinit\",\n        \"pvslock\",\n        \"pvsmaska\",\n        \"pvsmix\",\n        \"pvsmooth\",\n        \"pvsmorph\",\n        \"pvsosc\",\n        \"pvsout\",\n        \"pvspitch\",\n        \"pvstanal\",\n        \"pvstencil\",\n        \"pvstrace\",\n        \"pvsvoc\",\n        \"pvswarp\",\n        \"pvsynth\",\n        \"pwd\",\n        \"pyassign\",\n        \"pyassigni\",\n        \"pyassignt\",\n        \"pycall\",\n        \"pycall1\",\n        \"pycall1i\",\n        \"pycall1t\",\n        \"pycall2\",\n        \"pycall2i\",\n        \"pycall2t\",\n        \"pycall3\",\n        \"pycall3i\",\n        \"pycall3t\",\n        \"pycall4\",\n        \"pycall4i\",\n        \"pycall4t\",\n        \"pycall5\",\n        \"pycall5i\",\n        \"pycall5t\",\n        \"pycall6\",\n        \"pycall6i\",\n        \"pycall6t\",\n        \"pycall7\",\n        \"pycall7i\",\n        \"pycall7t\",\n        \"pycall8\",\n        \"pycall8i\",\n        \"pycall8t\",\n        \"pycalli\",\n        \"pycalln\",\n        \"pycallni\",\n        \"pycallt\",\n        \"pyeval\",\n        \"pyevali\",\n        \"pyevalt\",\n        \"pyexec\",\n        \"pyexeci\",\n        \"pyexect\",\n        \"pyinit\",\n        \"pylassign\",\n        \"pylassigni\",\n        \"pylassignt\",\n        \"pylcall\",\n        \"pylcall1\",\n        \"pylcall1i\",\n        \"pylcall1t\",\n        \"pylcall2\",\n        \"pylcall2i\",\n        \"pylcall2t\",\n        \"pylcall3\",\n        \"pylcall3i\",\n        \"pylcall3t\",\n        \"pylcall4\",\n        \"pylcall4i\",\n        \"pylcall4t\",\n        \"pylcall5\",\n        \"pylcall5i\",\n        \"pylcall5t\",\n        \"pylcall6\",\n        \"pylcall6i\",\n        \"pylcall6t\",\n        \"pylcall7\",\n        \"pylcall7i\",\n        \"pylcall7t\",\n        \"pylcall8\",\n        \"pylcall8i\",\n        \"pylcall8t\",\n        \"pylcalli\",\n        \"pylcalln\",\n        \"pylcallni\",\n        \"pylcallt\",\n        \"pyleval\",\n        \"pylevali\",\n        \"pylevalt\",\n        \"pylexec\",\n        \"pylexeci\",\n        \"pylexect\",\n        \"pylrun\",\n        \"pylruni\",\n        \"pylrunt\",\n        \"pyrun\",\n        \"pyruni\",\n        \"pyrunt\",\n        \"qinf\",\n        \"qnan\",\n        \"r2c\",\n        \"rand\",\n        \"randh\",\n        \"randi\",\n        \"random\",\n        \"randomh\",\n        \"randomi\",\n        \"rbjeq\",\n        \"readclock\",\n        \"readf\",\n        \"readfi\",\n        \"readk\",\n        \"readk2\",\n        \"readk3\",\n        \"readk4\",\n        \"readks\",\n        \"readscore\",\n        \"readscratch\",\n        \"rect2pol\",\n        \"release\",\n        \"remoteport\",\n        \"remove\",\n        \"repluck\",\n        \"reshapearray\",\n        \"reson\",\n        \"resonk\",\n        \"resonr\",\n        \"resonx\",\n        \"resonxk\",\n        \"resony\",\n        \"resonz\",\n        \"resyn\",\n        \"reverb\",\n        \"reverb2\",\n        \"reverbsc\",\n        \"rewindscore\",\n        \"rezzy\",\n        \"rfft\",\n        \"rifft\",\n        \"rms\",\n        \"rnd\",\n        \"rnd31\",\n        \"round\",\n        \"rspline\",\n        \"rtclock\",\n        \"s16b14\",\n        \"s32b14\",\n        \"samphold\",\n        \"sandpaper\",\n        \"sc_lag\",\n        \"sc_lagud\",\n        \"sc_phasor\",\n        \"sc_trig\",\n        \"scale\",\n        \"scalearray\",\n        \"scanhammer\",\n        \"scans\",\n        \"scantable\",\n        \"scanu\",\n        \"schedkwhen\",\n        \"schedkwhennamed\",\n        \"schedule\",\n        \"schedwhen\",\n        \"scoreline\",\n        \"scoreline_i\",\n        \"seed\",\n        \"sekere\",\n        \"select\",\n        \"semitone\",\n        \"sense\",\n        \"sensekey\",\n        \"seqtime\",\n        \"seqtime2\",\n        \"serialBegin\",\n        \"serialEnd\",\n        \"serialFlush\",\n        \"serialPrint\",\n        \"serialRead\",\n        \"serialWrite\",\n        \"serialWrite_i\",\n        \"setcol\",\n        \"setctrl\",\n        \"setksmps\",\n        \"setrow\",\n        \"setscorepos\",\n        \"sfilist\",\n        \"sfinstr\",\n        \"sfinstr3\",\n        \"sfinstr3m\",\n        \"sfinstrm\",\n        \"sfload\",\n        \"sflooper\",\n        \"sfpassign\",\n        \"sfplay\",\n        \"sfplay3\",\n        \"sfplay3m\",\n        \"sfplaym\",\n        \"sfplist\",\n        \"sfpreset\",\n        \"shaker\",\n        \"shiftin\",\n        \"shiftout\",\n        \"signum\",\n        \"sin\",\n        \"sinh\",\n        \"sininv\",\n        \"sinsyn\",\n        \"sleighbells\",\n        \"slicearray\",\n        \"slicearray_i\",\n        \"slider16\",\n        \"slider16f\",\n        \"slider16table\",\n        \"slider16tablef\",\n        \"slider32\",\n        \"slider32f\",\n        \"slider32table\",\n        \"slider32tablef\",\n        \"slider64\",\n        \"slider64f\",\n        \"slider64table\",\n        \"slider64tablef\",\n        \"slider8\",\n        \"slider8f\",\n        \"slider8table\",\n        \"slider8tablef\",\n        \"sliderKawai\",\n        \"sndloop\",\n        \"sndwarp\",\n        \"sndwarpst\",\n        \"sockrecv\",\n        \"sockrecvs\",\n        \"socksend\",\n        \"socksends\",\n        \"sorta\",\n        \"sortd\",\n        \"soundin\",\n        \"space\",\n        \"spat3d\",\n        \"spat3di\",\n        \"spat3dt\",\n        \"spdist\",\n        \"splitrig\",\n        \"sprintf\",\n        \"sprintfk\",\n        \"spsend\",\n        \"sqrt\",\n        \"squinewave\",\n        \"statevar\",\n        \"stix\",\n        \"strcat\",\n        \"strcatk\",\n        \"strchar\",\n        \"strchark\",\n        \"strcmp\",\n        \"strcmpk\",\n        \"strcpy\",\n        \"strcpyk\",\n        \"strecv\",\n        \"streson\",\n        \"strfromurl\",\n        \"strget\",\n        \"strindex\",\n        \"strindexk\",\n        \"strlen\",\n        \"strlenk\",\n        \"strlower\",\n        \"strlowerk\",\n        \"strrindex\",\n        \"strrindexk\",\n        \"strset\",\n        \"strsub\",\n        \"strsubk\",\n        \"strtod\",\n        \"strtodk\",\n        \"strtol\",\n        \"strtolk\",\n        \"strupper\",\n        \"strupperk\",\n        \"stsend\",\n        \"subinstr\",\n        \"subinstrinit\",\n        \"sum\",\n        \"sumarray\",\n        \"svfilter\",\n        \"syncgrain\",\n        \"syncloop\",\n        \"syncphasor\",\n        \"system\",\n        \"system_i\",\n        \"tab\",\n        \"tab2array\",\n        \"tab2pvs\",\n        \"tab_i\",\n        \"tabifd\",\n        \"table\",\n        \"table3\",\n        \"table3kt\",\n        \"tablecopy\",\n        \"tablefilter\",\n        \"tablefilteri\",\n        \"tablegpw\",\n        \"tablei\",\n        \"tableicopy\",\n        \"tableigpw\",\n        \"tableikt\",\n        \"tableimix\",\n        \"tableiw\",\n        \"tablekt\",\n        \"tablemix\",\n        \"tableng\",\n        \"tablera\",\n        \"tableseg\",\n        \"tableshuffle\",\n        \"tableshufflei\",\n        \"tablew\",\n        \"tablewa\",\n        \"tablewkt\",\n        \"tablexkt\",\n        \"tablexseg\",\n        \"tabmorph\",\n        \"tabmorpha\",\n        \"tabmorphak\",\n        \"tabmorphi\",\n        \"tabplay\",\n        \"tabrec\",\n        \"tabrowlin\",\n        \"tabsum\",\n        \"tabw\",\n        \"tabw_i\",\n        \"tambourine\",\n        \"tan\",\n        \"tanh\",\n        \"taninv\",\n        \"taninv2\",\n        \"tbvcf\",\n        \"tempest\",\n        \"tempo\",\n        \"temposcal\",\n        \"tempoval\",\n        \"timedseq\",\n        \"timeinstk\",\n        \"timeinsts\",\n        \"timek\",\n        \"times\",\n        \"tival\",\n        \"tlineto\",\n        \"tone\",\n        \"tonek\",\n        \"tonex\",\n        \"tradsyn\",\n        \"trandom\",\n        \"transeg\",\n        \"transegb\",\n        \"transegr\",\n        \"trcross\",\n        \"trfilter\",\n        \"trhighest\",\n        \"trigger\",\n        \"trigseq\",\n        \"trim\",\n        \"trim_i\",\n        \"trirand\",\n        \"trlowest\",\n        \"trmix\",\n        \"trscale\",\n        \"trshift\",\n        \"trsplit\",\n        \"turnoff\",\n        \"turnoff2\",\n        \"turnon\",\n        \"tvconv\",\n        \"unirand\",\n        \"unwrap\",\n        \"upsamp\",\n        \"urandom\",\n        \"urd\",\n        \"vactrol\",\n        \"vadd\",\n        \"vadd_i\",\n        \"vaddv\",\n        \"vaddv_i\",\n        \"vaget\",\n        \"valpass\",\n        \"vaset\",\n        \"vbap\",\n        \"vbapg\",\n        \"vbapgmove\",\n        \"vbaplsinit\",\n        \"vbapmove\",\n        \"vbapz\",\n        \"vbapzmove\",\n        \"vcella\",\n        \"vco\",\n        \"vco2\",\n        \"vco2ft\",\n        \"vco2ift\",\n        \"vco2init\",\n        \"vcomb\",\n        \"vcopy\",\n        \"vcopy_i\",\n        \"vdel_k\",\n        \"vdelay\",\n        \"vdelay3\",\n        \"vdelayk\",\n        \"vdelayx\",\n        \"vdelayxq\",\n        \"vdelayxs\",\n        \"vdelayxw\",\n        \"vdelayxwq\",\n        \"vdelayxws\",\n        \"vdivv\",\n        \"vdivv_i\",\n        \"vecdelay\",\n        \"veloc\",\n        \"vexp\",\n        \"vexp_i\",\n        \"vexpseg\",\n        \"vexpv\",\n        \"vexpv_i\",\n        \"vibes\",\n        \"vibr\",\n        \"vibrato\",\n        \"vincr\",\n        \"vlimit\",\n        \"vlinseg\",\n        \"vlowres\",\n        \"vmap\",\n        \"vmirror\",\n        \"vmult\",\n        \"vmult_i\",\n        \"vmultv\",\n        \"vmultv_i\",\n        \"voice\",\n        \"vosim\",\n        \"vphaseseg\",\n        \"vport\",\n        \"vpow\",\n        \"vpow_i\",\n        \"vpowv\",\n        \"vpowv_i\",\n        \"vpvoc\",\n        \"vrandh\",\n        \"vrandi\",\n        \"vsubv\",\n        \"vsubv_i\",\n        \"vtaba\",\n        \"vtabi\",\n        \"vtabk\",\n        \"vtable1k\",\n        \"vtablea\",\n        \"vtablei\",\n        \"vtablek\",\n        \"vtablewa\",\n        \"vtablewi\",\n        \"vtablewk\",\n        \"vtabwa\",\n        \"vtabwi\",\n        \"vtabwk\",\n        \"vwrap\",\n        \"waveset\",\n        \"websocket\",\n        \"weibull\",\n        \"wgbow\",\n        \"wgbowedbar\",\n        \"wgbrass\",\n        \"wgclar\",\n        \"wgflute\",\n        \"wgpluck\",\n        \"wgpluck2\",\n        \"wguide1\",\n        \"wguide2\",\n        \"wiiconnect\",\n        \"wiidata\",\n        \"wiirange\",\n        \"wiisend\",\n        \"window\",\n        \"wrap\",\n        \"writescratch\",\n        \"wterrain\",\n        \"xadsr\",\n        \"xin\",\n        \"xout\",\n        \"xscanmap\",\n        \"xscans\",\n        \"xscansmap\",\n        \"xscanu\",\n        \"xtratim\",\n        \"xyscale\",\n        \"zacl\",\n        \"zakinit\",\n        \"zamod\",\n        \"zar\",\n        \"zarg\",\n        \"zaw\",\n        \"zawm\",\n        \"zdf_1pole\",\n        \"zdf_1pole_mode\",\n        \"zdf_2pole\",\n        \"zdf_2pole_mode\",\n        \"zdf_ladder\",\n        \"zfilter2\",\n        \"zir\",\n        \"ziw\",\n        \"ziwm\",\n        \"zkcl\",\n        \"zkmod\",\n        \"zkr\",\n        \"zkw\",\n        \"zkwm\"\n    ];\n    var deprecatedOpcodes = [\n        \"array\",\n        \"bformdec\",\n        \"bformenc\",\n        \"copy2ftab\",\n        \"copy2ttab\",\n        \"hrtfer\",\n        \"ktableseg\",\n        \"lentab\",\n        \"maxtab\",\n        \"mintab\",\n        \"pop\",\n        \"pop_f\",\n        \"push\",\n        \"push_f\",\n        \"scalet\",\n        \"sndload\",\n        \"soundout\",\n        \"soundouts\",\n        \"specaddm\",\n        \"specdiff\",\n        \"specdisp\",\n        \"specfilt\",\n        \"spechist\",\n        \"specptrk\",\n        \"specscal\",\n        \"specsum\",\n        \"spectrum\",\n        \"stack\",\n        \"sumtab\",\n        \"tabgen\",\n        \"tabmap\",\n        \"tabmap_i\",\n        \"tabslice\",\n        \"tb0\",\n        \"tb0_init\",\n        \"tb1\",\n        \"tb10\",\n        \"tb10_init\",\n        \"tb11\",\n        \"tb11_init\",\n        \"tb12\",\n        \"tb12_init\",\n        \"tb13\",\n        \"tb13_init\",\n        \"tb14\",\n        \"tb14_init\",\n        \"tb15\",\n        \"tb15_init\",\n        \"tb1_init\",\n        \"tb2\",\n        \"tb2_init\",\n        \"tb3\",\n        \"tb3_init\",\n        \"tb4\",\n        \"tb4_init\",\n        \"tb5\",\n        \"tb5_init\",\n        \"tb6\",\n        \"tb6_init\",\n        \"tb7\",\n        \"tb7_init\",\n        \"tb8\",\n        \"tb8_init\",\n        \"tb9\",\n        \"tb9_init\",\n        \"vbap16\",\n        \"vbap4\",\n        \"vbap4move\",\n        \"vbap8\",\n        \"vbap8move\",\n        \"xyin\"\n    ];\n\n    opcodes = lang.arrayToMap(opcodes);\n    deprecatedOpcodes = lang.arrayToMap(deprecatedOpcodes);\n\n    this.lineContinuations = [\n        {\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\$/\n        }, this.pushRule({\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\/,\n            next  : \"line continuation\"\n        })\n    ];\n\n    this.comments.push(this.lineContinuations);\n\n    this.quotedStringContents.push(\n        this.lineContinuations,\n        {\n            token : \"invalid.illegal\",\n            regex : /[^\"\\\\]*$/\n        }\n    );\n\n    var start = this.$rules.start;\n    start.splice(1, 0, {\n        token : [\"text.csound\", \"entity.name.label.csound\", \"entity.punctuation.label.csound\", \"text.csound\"],\n        regex : /^([ \\t]*)(\\w+)(:)([ \\t]+|$)/\n    });\n    start.push(\n        this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\binstr\\b/,\n            next  : \"instrument numbers and identifiers\"\n        }), this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\bopcode\\b/,\n            next  : \"after opcode keyword\"\n        }), {\n            token : \"keyword.other.csound\",\n            regex : /\\bend(?:in|op)\\b/\n        },\n\n        {\n            token : \"variable.language.csound\",\n            regex : /\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound\",\n            regex : \"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~¬]|[=!+\\\\-*/^%&|<>#?:]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }), this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /{{/,\n            next  : \"braced string\"\n        }),\n\n        {\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/\n        },\n\n        this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b[ik]?goto\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:r(?:einit|igoto)|tigoto)\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bc(?:g|in?|k|nk?)goto\\b/,\n            next  : [\"goto before label\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\btimout\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bloop_[gl][et]\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\", \"goto before argument\"]\n        }),\n\n        this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\b(?:readscore|scoreline(?:_i)?)\\b/,\n            next  : \"Csound score opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\bpyl?run[it]?\\b(?!$)/,\n            next  : \"Python opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\blua_(?:exec|opdef)\\b(?!$)/,\n            next  : \"Lua opcode\"\n        }),\n\n        {\n            token : \"support.variable.csound\",\n            regex : /\\bp\\d+\\b/\n        }, {\n            regex : /\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/, onMatch: function(value, currentState, stack, line) {\n                var tokens = value.split(this.splitRegex);\n                var name = tokens[1];\n                var type;\n                if (opcodes.hasOwnProperty(name))\n                    type = \"support.function.csound\";\n                else if (deprecatedOpcodes.hasOwnProperty(name))\n                    type = \"invalid.deprecated.csound\";\n                if (type) {\n                    if (tokens[2]) {\n                        return [\n                            {type: type, value: name},\n                            {type: \"punctuation.type-annotation.csound\", value: tokens[2]},\n                            {type: \"type-annotation.storage.type.csound\", value: tokens[3]}\n                        ];\n                    }\n                    return type;\n                }\n                return \"text.csound\";\n            }\n        }\n    );\n\n    this.$rules[\"macro parameter value list\"].splice(2, 0, {\n        token : \"punctuation.definition.string.begin.csound\",\n        regex : /{{/,\n        next  : \"macro parameter value braced string\"\n    });\n\n    this.addRules({\n        \"macro parameter value braced string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/,\n                next  : \"macro parameter value list\"\n            }, {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"instrument numbers and identifiers\": [\n            this.comments,\n            {\n                token : \"entity.name.function.csound\",\n                regex : /\\d+|[A-Z_a-z]\\w*/\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"after opcode keyword\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), this.popRule({\n                token : \"entity.name.function.opcode.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"opcode type signatures\"\n            })\n        ],\n        \"opcode type signatures\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), {\n                token : \"storage.type.csound\",\n                regex : /\\b(?:0|[afijkKoOpPStV\\[\\]]+)/\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"braced string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/\n            }),\n            this.bracedStringContents,\n            {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"goto before argument\": [\n            this.popRule({\n                token : \"text.csound\",\n                regex : /,/\n            }),\n            start\n        ],\n        \"goto before label\": [\n            {\n                token : \"text.csound\",\n                regex : /\\s+/\n            },\n            this.comments,\n            this.popRule({\n                token : \"entity.name.label.csound\",\n                regex : /\\w+/\n            }), this.popRule({\n                token : \"empty\",\n                regex : /(?!\\w)/\n            })\n        ],\n\n        \"Csound score opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"csound-score-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Python opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"python-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Lua opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"lua-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"line continuation\": [\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }),\n            this.semicolonComments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ]\n    });\n\n    var rules = [\n        this.popRule({\n            token : \"punctuation.definition.string.end.csound\",\n            regex : /}}/\n        })\n    ];\n    this.embedRules(CsoundScoreHighlightRules, \"csound-score-\", rules);\n    this.embedRules(PythonHighlightRules, \"python-\", rules);\n    this.embedRules(LuaHighlightRules, \"lua-\", rules);\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundOrchestraHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundOrchestraHighlightRules = CsoundOrchestraHighlightRules;\n});\n\nace.define(\"ace/mode/csound_orchestra\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_orchestra_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundOrchestraHighlightRules = require(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CsoundOrchestraHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-csound_score.js",
    "content": "ace.define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundPreprocessorHighlightRules = function() {\n\n    this.semicolonComments = {\n        token : \"comment.line.semicolon.csound\",\n        regex : \";.*$\"\n    };\n\n    this.comments = [\n        {\n            token : \"punctuation.definition.comment.begin.csound\",\n            regex : \"/\\\\*\",\n            push  : [\n                {\n                    token : \"punctuation.definition.comment.end.csound\",\n                    regex : \"\\\\*/\",\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token : \"comment.line.double-slash.csound\",\n            regex : \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n\n    this.macroUses = [\n        {\n            token : [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex : /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next  : \"macro parameter value list\"\n        }, {\n            token : \"entity.name.function.preprocessor.csound\",\n            regex : /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n\n    this.numbers = [\n        {\n            token : \"constant.numeric.float.csound\",\n            regex : /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token : [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex : /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token : \"constant.numeric.integer.decimal.csound\",\n            regex : /\\d+/\n        }\n    ];\n\n    this.bracedStringContents = [\n        {\n            token : \"constant.character.escape.csound\",\n            regex : /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        {\n            token : \"constant.character.placeholder.csound\",\n            regex : /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token : \"constant.character.escape.csound\",\n            regex : /%%/\n        }\n    ];\n\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n\n    var start = [\n        this.comments,\n\n        {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#include/,\n            push  : [\n                this.comments,\n                {\n                    token : \"string.csound\",\n                    regex : /([^ \\t])(?:.*?\\1)/,\n                    next  : \"pop\"\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#[ \\t]*define/,\n            next  : \"define directive\"\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:ifn?def|undef)\\b/,\n            next  : \"macro directive\"\n        },\n\n        this.macroUses\n    ];\n\n    this.$rules = {\n        \"start\": start,\n\n        \"define directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter name list\"\n            }, {\n                token : \"punctuation.definition.macro.begin.csound\",\n                regex : /#/,\n                next  : \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token : \"variable.parameter.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex : /\\)/,\n                next  : \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\#/\n            }, {\n                token : \"punctuation.definition.macro.end.csound\",\n                regex : /#/,\n                next  : \"start\"\n            },\n            start\n        ],\n\n        \"macro directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"macro parameter value list\": [\n            {\n                token : \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex : /\\)/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }), {\n                token : \"punctuation.macro-parameter-value-separator.csound\",\n                regex : \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\\\)/\n            }, this.popRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex : /\\)/\n            }), this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\n\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n\n(function() {\n\n    this.pushRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                } else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (Array.isArray(params.next)) {\n                    var oldNext = params.next[params.next.length - 1];\n                    var oldNextIndex = oldNext.length - 1;\n                    var newNextIndex = next.length - 1;\n                    if (newNextIndex > oldNextIndex) {\n                        while (oldNextIndex >= 0 && newNextIndex >= 0) {\n                            if (oldNext.charAt(oldNextIndex) !== next.charAt(newNextIndex)) {\n                                var prefix = next.substr(0, newNextIndex);\n                                for (var i = 0; i < params.next.length; i++) {\n                                    params.next[i] = prefix + params.next[i];\n                                }\n                                break;\n                            }\n                            oldNextIndex--;\n                            newNextIndex--;\n                        }\n                    }\n                } else {\n                    params.next = next;\n                }\n            },\n            get token() { return params.token; }\n        };\n    };\n\n    this.popRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                } else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n\n}).call(CsoundPreprocessorHighlightRules.prototype);\n\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n});\n\nace.define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\n\nvar CsoundScoreHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n\n    this.quotedStringContents.push({\n        token : \"invalid.illegal.csound-score\",\n        regex : /[^\"]*$/\n    });\n\n    var start = this.$rules.start;\n    start.push(\n        {\n            token : \"keyword.control.csound-score\",\n            regex : /[abCdefiqstvxy]/\n        }, {\n            token : \"invalid.illegal.csound-score\",\n            regex : /w/\n        }, {\n            token : \"constant.numeric.language.csound-score\",\n            regex : /z/\n        }, {\n            token : [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n            regex : /([nNpP][pP])(\\d+)/\n        }, {\n            token : \"keyword.other.csound-score\",\n            regex : /[mn]/,\n            push  : [\n                {\n                    token : \"empty\",\n                    regex : /$/,\n                    next  : \"pop\"\n                },\n                this.comments,\n                {\n                    token : \"entity.name.label.csound-score\",\n                    regex : /[A-Z_a-z]\\w*/\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound-score\",\n            regex : /r\\b/,\n            next  : \"repeat section\"\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound-score\",\n            regex : \"[!+\\\\-*/^%&|<>#~.]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound-score\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }),\n\n        this.pushRule({\n            token : \"punctuation.braced-loop.begin.csound-score\",\n            regex : /{/,\n            next  : \"loop after left brace\"\n        })\n    );\n\n    this.addRules({\n        \"repeat section\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"entity.name.label.csound-score\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound-score\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n\n        \"loop after left brace\": [\n            this.popRule({\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token : \"entity.name.function.preprocessor.csound-score\",\n                regex : /[A-Z_a-z]\\w*\\b/,\n                next  : \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token : \"punctuation.braced-loop.end.csound-score\",\n                regex : /}/\n            })\n        ]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n});\n\nace.define(\"ace/mode/csound_score\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_score_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CsoundScoreHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-csp.js",
    "content": "ace.define(\"ace/mode/csp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var CspHighlightRules = function() {\n        var keywordMapper = this.createKeywordMapper({\n            \"constant.language\": \"child-src|connect-src|default-src|font-src|frame-src|img-src|manifest-src|media-src|object-src\"\n                  + \"|script-src|style-src|worker-src|base-uri|plugin-types|sandbox|disown-opener|form-action|frame-ancestors|report-uri\"\n                  + \"|report-to|upgrade-insecure-requests|block-all-mixed-content|require-sri-for|reflected-xss|referrer|policy-uri\",\n            \"variable\": \"'none'|'self'|'unsafe-inline'|'unsafe-eval'|'strict-dynamic'|'unsafe-hashed-attributes'\"\n        }, \"identifier\", true);\n\n        this.$rules = {\n            start: [{\n                token: \"string.link\",\n                regex: /https?:[^;\\s]*/\n            }, {\n                token: \"operator.punctuation\",\n                regex: /;/\n            }, {\n                token: keywordMapper,\n                regex: /[^\\s;]+/\n            }]\n        };\n    };\n\n    oop.inherits(CspHighlightRules, TextHighlightRules);\n\n    exports.CspHighlightRules = CspHighlightRules;\n});\n\nace.define(\"ace/mode/csp\",[\"require\",\"exports\",\"module\",\"ace/mode/text\",\"ace/mode/csp_highlight_rules\",\"ace/lib/oop\"], function(require, exports, module) {\n    \"use strict\";\n\n    var TextMode = require(\"./text\").Mode;\n    var CspHighlightRules = require(\"./csp_highlight_rules\").CspHighlightRules;\n    var oop = require(\"../lib/oop\");\n\n    var Mode = function() {\n        this.HighlightRules = CspHighlightRules;\n    };\n\n    oop.inherits(Mode, TextMode);\n\n    (function() {\n        this.$id = \"ace/mode/csp\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-css.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-curly.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/curly_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\n\nvar CurlyHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    this.$rules[\"start\"].unshift({\n        token: \"variable\",\n        regex: \"{{\",\n        push: \"curly-start\"\n    });\n\n    this.$rules[\"curly-start\"] = [{\n        token: \"variable\",\n        regex: \"}}\",\n        next: \"pop\"\n    }];\n\n    this.normalizeRules();\n};\n\noop.inherits(CurlyHighlightRules, HtmlHighlightRules);\n\nexports.CurlyHighlightRules = CurlyHighlightRules;\n\n});\n\nace.define(\"ace/mode/curly\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/html\",\"ace/mode/curly_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar CurlyHighlightRules = require(\"./curly_highlight_rules\").CurlyHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = CurlyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new HtmlFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.$id = \"ace/mode/curly\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-d.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/d_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DHighlightRules = function() {\n\n    var keywords = (\n        \"this|super|import|module|body|mixin|__traits|invariant|alias|asm|delete|\"+\n        \"typeof|typeid|sizeof|cast|new|in|is|typedef|__vector|__parameters\"\n    );\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|foreach|foreach_reverse|goto|if|\" +\n        \"return|switch|while|catch|try|throw|finally|version|assert|unittest|with\"\n    );\n    \n    var types = (\n        \"auto|bool|char|dchar|wchar|byte|ubyte|float|double|real|\" +\n        \"cfloat|creal|cdouble|cent|ifloat|ireal|idouble|\" +\n        \"int|long|short|void|uint|ulong|ushort|ucent|\" +\n        \"function|delegate|string|wstring|dstring|size_t|ptrdiff_t|hash_t|Object\"\n    );\n\n    var modifiers = (\n        \"abstract|align|debug|deprecated|export|extern|const|final|in|inout|out|\" +\n        \"ref|immutable|lazy|nothrow|override|package|pragma|private|protected|\" +\n        \"public|pure|scope|shared|__gshared|synchronized|static|volatile\"\n    );\n    \n    var storages = (\n        \"class|struct|union|template|interface|enum|macro\"\n    );\n    \n    var stringEscapesSeq =  {\n        token: \"constant.language.escape\",\n        regex: \"\\\\\\\\(?:(?:x[0-9A-F]{2})|(?:[0-7]{1,3})|(?:['\\\"\\\\?0abfnrtv\\\\\\\\])|\" +\n            \"(?:u[0-9a-fA-F]{4})|(?:U[0-9a-fA-F]{8}))\"\n    };\n\n    var builtinConstants = (\n        \"null|true|false|\"+\n        \"__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__|\"+\n        \"__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__\"\n    );\n    \n    var operators = (\n        \"/|/\\\\=|&|&\\\\=|&&|\\\\|\\\\|\\\\=|\\\\|\\\\||\\\\-|\\\\-\\\\=|\\\\-\\\\-|\\\\+|\" +\n        \"\\\\+\\\\=|\\\\+\\\\+|\\\\<|\\\\<\\\\=|\\\\<\\\\<|\\\\<\\\\<\\\\=|\\\\<\\\\>|\\\\<\\\\>\\\\=|\\\\>|\\\\>\\\\=|\\\\>\\\\>\\\\=|\" +\n        \"\\\\>\\\\>\\\\>\\\\=|\\\\>\\\\>|\\\\>\\\\>\\\\>|\\\\!|\\\\!\\\\=|\\\\!\\\\<\\\\>|\\\\!\\\\<\\\\>\\\\=|\\\\!\\\\<|\\\\!\\\\<\\\\=|\" +\n        \"\\\\!\\\\>|\\\\!\\\\>\\\\=|\\\\?|\\\\$|\\\\=|\\\\=\\\\=|\\\\*|\\\\*\\\\=|%|%\\\\=|\" +\n        \"\\\\^|\\\\^\\\\=|\\\\^\\\\^|\\\\^\\\\^\\\\=|~|~\\\\=|\\\\=\\\\>|#\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.modifier\" : modifiers,\n        \"keyword.control\" :  keywordControls,\n        \"keyword.type\" :     types,\n        \"keyword\":           keywords,\n        \"keyword.storage\":   storages,\n        \"punctation\": \"\\\\.|\\\\,|;|\\\\.\\\\.|\\\\.\\\\.\\\\.\",\n        \"keyword.operator\" : operators,\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    \n    var identifierRe = \"[a-zA-Z_\\u00a1-\\uffff][a-zA-Z\\\\d_\\u00a1-\\uffff]*\\\\b\";\n\n    this.$rules = {\n        \"start\" : [\n            {     //-------------------------------------------------------- COMMENTS\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"star-comment\"\n            }, {\n                token: \"comment.shebang\",\n                regex: \"^\\\\s*#!.*\"\n            }, {\n                token : \"comment\",\n                regex : \"\\\\/\\\\+\",\n                next: \"plus-comment\"\n            }, {  //-------------------------------------------------------- STRINGS\n                onMatch: function(value, currentState, state) {\n                    state.unshift(this.next, value.substr(2));\n                    return \"string\";\n                },\n                regex: 'q\"(?:[\\\\[\\\\(\\\\{\\\\<]+)',\n                next: 'operator-heredoc-string'\n            }, {\n                onMatch: function(value, currentState, state) {\n                    state.unshift(this.next, value.substr(2));\n                    return \"string\";\n                },\n                regex: 'q\"(?:[a-zA-Z_]+)$',\n                next: 'identifier-heredoc-string'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[xr]?\"',\n                next : \"quote-string\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[xr]?`',\n                next : \"backtick-string\"\n            }, {\n                token : \"string\", // single line\n                regex : \"[xr]?['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?['][cdw]?\"\n            }, {  //-------------------------------------------------------- RULES\n                token: [\"keyword\", \"text\", \"paren.lparen\"],\n                regex: /(asm)(\\s*)({)/,\n                next: \"d-asm\"\n            }, {\n                token: [\"keyword\", \"text\", \"paren.lparen\", \"constant.language\"],\n                regex: \"(__traits)(\\\\s*)(\\\\()(\"+identifierRe+\")\"\n            }, { // import|module abc\n                token: [\"keyword\", \"text\", \"variable.module\"],\n                regex: \"(import|module)(\\\\s+)((?:\"+identifierRe+\"\\\\.?)*)\"\n            }, { // storage Name\n                token: [\"keyword.storage\", \"text\", \"entity.name.type\"],\n                regex: \"(\"+storages+\")(\\\\s*)(\"+identifierRe+\")\"\n            }, { // alias|typedef foo bar;\n                token: [\"keyword\", \"text\", \"variable.storage\", \"text\"],\n                regex: \"(alias|typedef)(\\\\s*)(\"+identifierRe+\")(\\\\s*)\"\n            }, {  //-------------------------------------------------------- OTHERS\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F_]+(l|ul|u|f|F|L|U|UL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d[\\\\d_]*(?:(?:\\\\.[\\\\d_]*)?(?:[eE][+-]?[\\\\d_]+)?)?(l|ul|u|f|F|L|U|UL)?\\\\b\"\n            }, {\n                token: \"entity.other.attribute-name\",\n                regex: \"@\"+identifierRe\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : operators\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.|\\\\:\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"star-comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken: 'comment'\n            }\n        ],\n        \"plus-comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\+\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken: 'comment'\n            }\n        ],\n        \n        \"quote-string\" : [\n           stringEscapesSeq,\n           {\n                token : \"string\",\n                regex : '\"[cdw]?',\n                next : \"start\"\n            }, {\n                defaultToken: 'string'\n            }\n        ],\n        \n        \"backtick-string\" : [\n           stringEscapesSeq,\n           {\n                token : \"string\",\n                regex : '`[cdw]?',\n                next : \"start\"\n            }, {\n                defaultToken: 'string'\n            }\n        ],\n        \n        \"operator-heredoc-string\": [\n            {\n                onMatch: function(value, currentState, state) {\n                    value = value.substring(value.length-2, value.length-1);\n                    var map = {'>':'<',']':'[',')':'(','}':'{'};\n                    if(Object.keys(map).indexOf(value) != -1)\n                        value = map[value];\n                    if(value != state[1]) return \"string\";\n                    state.shift();\n                    state.shift();\n                    \n                    return \"string\";\n                },\n                regex: '(?:[\\\\]\\\\)}>]+)\"',\n                next: 'start'\n            }, {\n                token: 'string',\n                regex: '[^\\\\]\\\\)}>]+'\n            }\n        ],\n        \n        \"identifier-heredoc-string\": [\n            {\n                onMatch: function(value, currentState, state) {\n                    value = value.substring(0, value.length-1);\n                    if(value != state[1]) return \"string\";\n                    state.shift();\n                    state.shift();\n                    \n                    return \"string\";\n                },\n                regex: '^(?:[A-Za-z_][a-zA-Z0-9]+)\"',\n                next: 'start'\n            }, {\n                token: 'string',\n                regex: '[^\\\\]\\\\)}>]+'\n            }\n        ],\n        \n        \"d-asm\": [\n            {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: 'keyword.instruction',\n                regex: '[a-zA-Z]+',\n                next: 'd-asm-instruction' \n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        'd-asm-instruction': [\n            {\n                token: 'constant.language',\n                regex: /AL|AH|AX|EAX|BL|BH|BX|EBX|CL|CH|CX|ECX|DL|DH|DX|EDX|BP|EBP|SP|ESP|DI|EDI|SI|ESI/i\n            }, {\n                token: 'identifier',\n                regex: '[a-zA-Z]+'\n            }, {\n                token: 'string',\n                regex: '\".*\"'\n            }, {\n                token: 'comment',\n                regex: '//.*$'\n            }, {\n                token: 'constant.numeric',\n                regex: '[0-9.xA-F]+'\n            }, {\n                token: 'punctuation.operator',\n                regex: '\\\\,'\n            }, {\n                token: 'punctuation.operator',\n                regex: ';',\n                next: 'd-asm'\n            }, {\n                token: 'text',\n                regex: '\\\\s+'\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\nDHighlightRules.metaData = {\n      comment: 'D language',\n      fileTypes: [ 'd', 'di' ],\n      firstLineMatch: '^#!.*\\\\b[glr]?dmd\\\\b.',\n      foldingStartMarker: '(?x)/\\\\*\\\\*(?!\\\\*)|^(?![^{]*?//|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|//|/\\\\*(?!.*?\\\\*/.*\\\\S))',\n      foldingStopMarker: '(?<!\\\\*)\\\\*\\\\*/|^\\\\s*\\\\}',\n      keyEquivalent: '^~D',\n      name: 'D',\n      scopeName: 'source.d'\n};\noop.inherits(DHighlightRules, TextHighlightRules);\n\nexports.DHighlightRules = DHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/d\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/d_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar DHighlightRules = require(\"./d_highlight_rules\").DHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = DHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/d\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-dart.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/dart_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DartHighlightRules = function() {\n\n    var constantLanguage = \"true|false|null\";\n    var variableLanguage = \"this|super\";\n    var keywordControl = \"try|catch|finally|throw|rethrow|assert|break|case|continue|default|do|else|for|if|in|return|switch|while|new|deferred|async|await\";\n    var keywordDeclaration = \"abstract|class|extends|external|factory|implements|get|native|operator|set|typedef|with|enum\";\n    var storageModifier = \"static|final|const\";\n    var storageType = \"void|bool|num|int|double|dynamic|var|String\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.dart\": constantLanguage,\n        \"variable.language.dart\": variableLanguage,\n        \"keyword.control.dart\": keywordControl,\n        \"keyword.declaration.dart\": keywordDeclaration,\n        \"storage.modifier.dart\": storageModifier,\n        \"storage.type.primitive.dart\": storageType\n    }, \"identifier\");\n\n    var stringfill = [{\n        token : \"constant.language.escape\",\n        regex : /\\\\./\n    }, {\n        token : \"text\",\n        regex : /\\$(?:\\w+|{[^\"'}]+})?/\n    }, {\n        defaultToken : \"string\"\n    }];\n\n    this.$rules = {\n    \"start\": [\n        {\n            token : \"comment\",\n            regex : /\\/\\/.*$/\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next : \"comment\"\n        },\n        {\n            token: [\"meta.preprocessor.script.dart\"],\n            regex: \"^(#!.*)$\"\n        },\n        {\n            token: \"keyword.other.import.dart\",\n            regex: \"(?:\\\\b)(?:library|import|export|part|of|show|hide)(?:\\\\b)\"\n        },\n        {\n            token : [\"keyword.other.import.dart\", \"text\"],\n            regex : \"(?:\\\\b)(prefix)(\\\\s*:)\"\n        },\n        {\n            regex: \"\\\\bas\\\\b\",\n            token: \"keyword.cast.dart\"\n        },\n        {\n            regex: \"\\\\?|:\",\n            token: \"keyword.control.ternary.dart\"\n        },\n        {\n            regex: \"(?:\\\\b)(is\\\\!?)(?:\\\\b)\",\n            token: [\"keyword.operator.dart\"]\n        },\n        {\n            regex: \"(<<|>>>?|~|\\\\^|\\\\||&)\",\n            token: [\"keyword.operator.bitwise.dart\"]\n        },\n        {\n            regex: \"((?:&|\\\\^|\\\\||<<|>>>?)=)\",\n            token: [\"keyword.operator.assignment.bitwise.dart\"]\n        },\n        {\n            regex: \"(===?|!==?|<=?|>=?)\",\n            token: [\"keyword.operator.comparison.dart\"]\n        },\n        {\n            regex: \"((?:[+*/%-]|\\\\~)=)\",\n            token: [\"keyword.operator.assignment.arithmetic.dart\"]\n        },\n        {\n            regex: \"=\",\n            token: \"keyword.operator.assignment.dart\"\n        },\n        {\n            token : \"string\",\n            regex : \"'''\",\n            next : \"qdoc\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"\"\"',\n            next : \"qqdoc\"\n        }, \n        {\n            token : \"string\",\n            regex : \"'\",\n            next : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"',\n            next : \"qqstring\"\n        }, \n        {\n            regex: \"(\\\\-\\\\-|\\\\+\\\\+)\",\n            token: [\"keyword.operator.increment-decrement.dart\"]\n        },\n        {\n            regex: \"(\\\\-|\\\\+|\\\\*|\\\\/|\\\\~\\\\/|%)\",\n            token: [\"keyword.operator.arithmetic.dart\"]\n        },\n        {\n            regex: \"(!|&&|\\\\|\\\\|)\",\n            token: [\"keyword.operator.logical.dart\"]\n        },\n        {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, \n        {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, \n        {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }\n    ],\n    \"comment\" : [\n        {\n            token : \"comment\", // closing comment\n            regex : \"\\\\*\\\\/\",\n            next : \"start\"\n        }, {\n            defaultToken : \"comment\"\n        }\n    ],\n    \"qdoc\" : [\n        {\n            token : \"string\",\n            regex : \"'''\",\n            next : \"start\"\n        }\n    ].concat(stringfill),\n\n    \"qqdoc\" : [\n        {\n            token : \"string\",\n            regex : '\"\"\"',\n            next : \"start\"\n        }\n    ].concat(stringfill),\n\n    \"qstring\" : [\n        {\n            token : \"string\",\n            regex : \"'|$\",\n            next : \"start\"\n        }\n    ].concat(stringfill),\n\n    \"qqstring\" : [\n        {\n            token : \"string\",\n            regex : '\"|$',\n            next : \"start\"\n        }\n    ].concat(stringfill)\n};\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(DartHighlightRules, TextHighlightRules);\n\nexports.DartHighlightRules = DartHighlightRules;\n});\n\nace.define(\"ace/mode/dart\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/dart_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar DartHighlightRules = require(\"./dart_highlight_rules\").DartHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    CMode.call(this);\n    this.HighlightRules = DartHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, CMode);\n\n(function() { \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/dart\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-diff.js",
    "content": "ace.define(\"ace/mode/diff_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DiffHighlightRules = function() {\n\n    this.$rules = {\n        \"start\" : [{\n                regex: \"^(?:\\\\*{15}|={67}|-{3}|\\\\+{3})$\",\n                token: \"punctuation.definition.separator.diff\",\n                \"name\": \"keyword\"\n            }, { //diff.range.unified\n                regex: \"^(@@)(\\\\s*.+?\\\\s*)(@@)(.*)$\",\n                token: [\n                    \"constant\",\n                    \"constant.numeric\",\n                    \"constant\",\n                    \"comment.doc.tag\"\n                ]\n            }, { //diff.range.normal\n                regex: \"^(\\\\d+)([,\\\\d]+)(a|d|c)(\\\\d+)([,\\\\d]+)(.*)$\",\n                token: [\n                    \"constant.numeric\",\n                    \"punctuation.definition.range.diff\",\n                    \"constant.function\",\n                    \"constant.numeric\",\n                    \"punctuation.definition.range.diff\",\n                    \"invalid\"\n                ],\n                \"name\": \"meta.\"\n            }, {\n                regex: \"^(\\\\-{3}|\\\\+{3}|\\\\*{3})( .+)$\",\n                token: [\n                    \"constant.numeric\",\n                    \"meta.tag\"\n                ]\n            }, { // added\n                regex: \"^([!+>])(.*?)(\\\\s*)$\",\n                token: [\n                    \"support.constant\",\n                    \"text\",\n                    \"invalid\"\n                ]\n            }, { // removed\n                regex: \"^([<\\\\-])(.*?)(\\\\s*)$\",\n                token: [\n                    \"support.function\",\n                    \"string\",\n                    \"invalid\"\n                ]\n            }, {\n                regex: \"^(diff)(\\\\s+--\\\\w+)?(.+?)( .+)?$\",\n                token: [\"variable\", \"variable\", \"keyword\", \"variable\"]\n            }, {\n                regex: \"^Index.+$\",\n                token: \"variable\"\n            }, {\n                regex: \"^\\\\s+$\",\n                token: \"text\"\n            }, {\n                regex: \"\\\\s*$\",\n                token: \"invalid\"\n            }, {\n                defaultToken: \"invisible\",\n                caseInsensitive: true\n            }\n        ]\n    };\n};\n\noop.inherits(DiffHighlightRules, TextHighlightRules);\n\nexports.DiffHighlightRules = DiffHighlightRules;\n});\n\nace.define(\"ace/mode/folding/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function(levels, flag) {\n\tthis.regExpList = levels;\n\tthis.flag = flag;\n\tthis.foldingStartMarker = RegExp(\"^(\" + levels.join(\"|\") + \")\", this.flag);\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var start = {row: row, column: line.length};\n\n        var regList = this.regExpList;\n        for (var i = 1; i <= regList.length; i++) {\n            var re = RegExp(\"^(\" + regList.slice(0, i).join(\"|\") + \")\", this.flag);\n            if (re.test(line))\n                break;\n        }\n\n        for (var l = session.getLength(); ++row < l; ) {\n            line = session.getLine(row);\n            if (re.test(line))\n                break;\n        }\n        if (row == start.row + 1)\n            return;\n        return new Range(start.row, start.column, row - 1, line.length);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/diff_highlight_rules\",\"ace/mode/folding/diff\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./diff_highlight_rules\").DiffHighlightRules;\nvar FoldMode = require(\"./folding/diff\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode([\"diff\", \"@@|\\\\*{5}\"], \"i\");\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/diff\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-django.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/django\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DjangoHighlightRules = function(){\n    this.$rules = {\n        'start': [{\n            token: \"string\",\n            regex: '\".*?\"'\n        }, {\n            token: \"string\",\n            regex: \"'.*?'\"\n        }, {\n            token: \"constant\",\n            regex: '[0-9]+'\n        }, {\n            token: \"variable\",\n            regex: \"[-_a-zA-Z0-9:]+\"\n        }],\n        'tag': [{\n            token: \"entity.name.function\",\n            regex: \"[a-zA-Z][_a-zA-Z0-9]*\",\n            next: \"start\"\n        }]\n    };\n};\n\noop.inherits(DjangoHighlightRules, TextHighlightRules);\n\nvar DjangoHtmlHighlightRules = function() {\n    this.$rules = new HtmlHighlightRules().getRules();\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"comment.line\",\n            regex: \"\\\\{#.*?#\\\\}\"\n        }, {\n            token: \"comment.block\",\n            regex: \"\\\\{\\\\%\\\\s*comment\\\\s*\\\\%\\\\}\",\n            merge: true,\n            next: \"django-comment\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\{\\\\{\",\n            next: \"django-start\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\{\\\\%\",\n            next: \"django-tag\"\n        });\n        this.embedRules(DjangoHighlightRules, \"django-\", [{\n                token: \"comment.block\",\n                regex: \"\\\\{\\\\%\\\\s*endcomment\\\\s*\\\\%\\\\}\",\n                merge: true,\n                next: \"start\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\%\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\}\\\\}\",\n                next: \"start\"\n        }]);\n    }\n};\n\noop.inherits(DjangoHtmlHighlightRules, HtmlHighlightRules);\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = DjangoHtmlHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.$id = \"ace/mode/django\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-dockerfile.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\nvar Mode = function() {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n   \n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/sh\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/dockerfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\n\nvar DockerfileHighlightRules = function() {\n    ShHighlightRules.call(this);\n\n    var startRules = this.$rules.start;\n    for (var i = 0; i < startRules.length; i++) {\n        if (startRules[i].token == \"variable.language\") {\n            startRules.splice(i, 0, {\n                token: \"constant.language\",\n                regex: \"(?:^(?:FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|COPY|LABEL)\\\\b)\",\n                caseInsensitive: true\n            });\n            break;\n        }\n    }\n    \n};\n\noop.inherits(DockerfileHighlightRules, ShHighlightRules);\n\nexports.DockerfileHighlightRules = DockerfileHighlightRules;\n});\n\nace.define(\"ace/mode/dockerfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh\",\"ace/mode/dockerfile_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar ShMode = require(\"./sh\").Mode;\nvar DockerfileHighlightRules = require(\"./dockerfile_highlight_rules\").DockerfileHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    ShMode.call(this);\n    \n    this.HighlightRules = DockerfileHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, ShMode);\n\n(function() {\n    this.$id = \"ace/mode/dockerfile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-dot.js",
    "content": "ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/dot_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n\nvar DotHighlightRules = function() {\n\n   var keywords = lang.arrayToMap(\n        (\"strict|node|edge|graph|digraph|subgraph\").split(\"|\")\n   );\n\n   var attributes = lang.arrayToMap(\n        (\"damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z\").split(\"|\")\n   );\n\n   this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /\\/\\/.*$/\n            }, {\n                token : \"comment\",\n                regex : /#.*$/\n            }, {\n                token : \"comment\", // multi line comment\n                merge : true,\n                regex : /\\/\\*/,\n                next : \"comment\"\n            }, {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : /[+\\-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?\\b/\n            }, {\n                token : \"keyword.operator\",\n                regex : /\\+|=|\\->/\n            }, {\n                token : \"punctuation.operator\",\n                regex : /,|;/\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[{]/\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\]}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }, {\n                token: function(value) {\n                    if (keywords.hasOwnProperty(value.toLowerCase())) {\n                        return \"keyword\";\n                    }\n                    else if (attributes.hasOwnProperty(value.toLowerCase())) {\n                        return \"variable\";\n                    }\n                    else {\n                        return \"text\";\n                    }\n                },\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n           }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+',\n                merge : true\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\",\n                merge : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\",\n                merge : true\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"[^'\\\\\\\\]+\",\n                merge : true\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qstring\",\n                merge : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"start\",\n                merge : true\n            }\n        ]\n   };\n};\n\noop.inherits(DotHighlightRules, TextHighlightRules);\n\nexports.DotHighlightRules = DotHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/dot\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matching_brace_outdent\",\"ace/mode/dot_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar DotHighlightRules = require(\"./dot_highlight_rules\").DotHighlightRules;\nvar DotFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = DotHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new DotFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/dot\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-drools.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JavaHighlightRules = function() {\n    var keywords = (\n    \"abstract|continue|for|new|switch|\" +\n    \"assert|default|goto|package|synchronized|\" +\n    \"boolean|do|if|private|this|\" +\n    \"break|double|implements|protected|throw|\" +\n    \"byte|else|import|public|throws|\" +\n    \"case|enum|instanceof|return|transient|\" +\n    \"catch|extends|int|short|try|\" +\n    \"char|final|interface|static|void|\" +\n    \"class|finally|long|strictfp|volatile|\" +\n    \"const|float|native|super|while|\" +\n    \"var\"\n    );\n\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                regex: \"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",\n                token: \"keyword\",\n                next: [{\n                    regex: \"{\",\n                    token: \"paren.lparen\",\n                    next: [{\n                        regex: \"}\",\n                        token: \"paren.rparen\",\n                        next: \"start\"\n                    }, {\n                        regex: \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n                        token: \"keyword\" \n                    }]\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    token : \"identifier\",\n                    regex : \"\\\\w+\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \".\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    regex: \"\", // exit if there is anything else\n                    next: \"start\"\n                }]\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(JavaHighlightRules, TextHighlightRules);\n\nexports.JavaHighlightRules = JavaHighlightRules;\n});\n\nace.define(\"ace/mode/drools_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/java_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar packageIdentifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][\\\\.a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar DroolsHighlightRules = function() {\n\n    var keywords = (\"date|effective|expires|lock|on|active|no|loop|auto|focus\" +\n        \"|activation|group|agenda|ruleflow|duration|timer|calendars|refract|direct\" +\n        \"|dialect|salience|enabled|attributes|extends|template\" +\n        \"|function|contains|matches|eval|excludes|soundslike\" +\n        \"|memberof|not|in|or|and|exists|forall|over|from|entry|point|accumulate|acc|collect\" +\n        \"|action|reverse|result|end|init|instanceof|extends|super|boolean|char|byte|short\" +\n        \"|int|long|float|double|this|void|class|new|case|final|if|else|for|while|do\" +\n        \"|default|try|catch|finally|switch|synchronized|return|throw|break|continue|assert\" +\n        \"|modify|static|public|protected|private|abstract|native|transient|volatile\" +\n        \"|strictfp|throws|interface|enum|implements|type|window|trait|no-loop|str\"\n      );\n\n      var langClasses = (\n          \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n          \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n          \"ExceptionInInitializerError|IllegalAccessError|\"+\n          \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n          \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n          \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n          \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n          \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n          \"InstantiationException|IndexOutOfBoundsException|\"+\n          \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n          \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n          \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n          \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n          \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n          \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n          \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n          \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n          \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n          \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n          \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n          \"ArrayStoreException|ClassCastException|LinkageError|\"+\n          \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n          \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n          \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n      );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": \"null\",\n        \"support.class\" : langClasses,\n        \"support.function\" : \"retract|update|modify|insert\"\n    }, \"identifier\");\n\n    var stringRules = function() {\n      return [{\n        token : \"string\", // single line\n        regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n      }, {\n        token : \"string\", // single line\n        regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n      }];\n    };\n\n\n      var basicPreRules = function(blockCommentRules) {\n        return [{\n            token : \"comment\",\n            regex : \"\\\\/\\\\/.*$\"\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            next : blockCommentRules\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n          }];\n      };\n\n      var blockCommentRules = function(returnRule) {\n        return [\n            {\n                token : \"comment.block\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : returnRule\n            }, {\n                defaultToken : \"comment.block\"\n            }\n        ];\n      };\n\n      var basicPostRules = function() {\n        return [{\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }];\n      };\n\n\n    this.$rules = {\n        \"start\" : [].concat(basicPreRules(\"block.comment\"), [\n              {\n                token : \"entity.name.type\",\n                regex : \"@[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(package)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(import)(\\\\s+)(function)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(import)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\",\"text\",\"variable\"],\n                regex : \"(global)(\\\\s+)(\" + packageIdentifierRe +\")(\\\\s+)(\" + identifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(declare)(\\\\s+)(trait)(\\\\s+)(\" + identifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(declare)(\\\\s+)(\" + identifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(extends)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                token : [\"keyword\",\"text\"],\n                regex : \"(rule)(\\\\s+)\",\n                next :  \"asset.name\"\n              }],\n              stringRules(),\n              [{\n                token : [\"variable.other\",\"text\",\"text\"],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)\"\n              }, {\n                token : [\"keyword\",\"text\"],\n                regex : \"(query)(\\\\s+)\",\n                next :  \"asset.name\"\n              }, {\n                token : [\"keyword\",\"text\"],\n                regex : \"(when)(\\\\s*)\"\n              }, {\n                token : [\"keyword\",\"text\"],\n                regex : \"(then)(\\\\s*)\",\n                next :  \"java-start\"\n              }, {\n                  token : \"paren.lparen\",\n                  regex : /[\\[({]/\n              }, {\n                  token : \"paren.rparen\",\n                  regex : /[\\])}]/\n              }], basicPostRules()),\n        \"block.comment\" : blockCommentRules(\"start\"),\n        \"asset.name\" : [\n            {\n                token : \"entity.name\",\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"entity.name\",\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"entity.name\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"start\"\n            }]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n\n    this.embedRules(JavaHighlightRules, \"java-\", [\n      {\n       token : \"support.function\",\n       regex: \"\\\\b(insert|modify|retract|update)\\\\b\"\n     }, {\n       token : \"keyword\",\n       regex: \"\\\\bend\\\\b\",\n       next  : \"start\"\n    }]);\n\n};\n\noop.inherits(DroolsHighlightRules, TextHighlightRules);\n\nexports.DroolsHighlightRules = DroolsHighlightRules;\n});\n\nace.define(\"ace/mode/folding/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /\\b(rule|declare|query|when|then)\\b/; \n    this.foldingStopMarker = /\\bend\\b/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1]) {\n                var position = {row: row, column: line.length};\n                var iterator = new TokenIterator(session, position.row, position.column);\n                var seek = \"end\";\n                var token = iterator.getCurrentToken();\n                if (token.value == \"when\") {\n                    seek = \"then\";\n                }\n                while (token) {\n                    if (token.value == seek) { \n                        return Range.fromPoints(position ,{\n                            row: iterator.getCurrentTokenRow(),\n                            column: iterator.getCurrentTokenColumn()\n                        });\n                    }\n                    token = iterator.stepForward();\n                }\n            }\n\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/drools_highlight_rules\",\"ace/mode/folding/drools\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar DroolsHighlightRules = require(\"./drools_highlight_rules\").DroolsHighlightRules;\nvar DroolsFoldMode = require(\"./folding/drools\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = DroolsHighlightRules;\n    this.foldingRules = new DroolsFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/drools\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-edifact.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/edifact_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n    \n    var oop = require(\"../lib/oop\");\n    var DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n    \n    var EdifactHighlightRules = function() {\n    \n        var header = (\n            \"UNH\"\n        );\n        var segment = (\n            \"ADR|AGR|AJT|ALC|ALI|APP|APR|ARD|ARR|ASI|ATT|AUT|\"+\n            \"BAS|BGM|BII|BUS|\"+\n            \"CAV|CCD|CCI|CDI|CDS|CDV|CED|CIN|CLA|CLI|CMP|CNI|CNT|COD|COM|COT|CPI|CPS|CPT|CST|CTA|CUX|\"+\n            \"DAM|DFN|DGS|DII|DIM|DLI|DLM|DMS|DOC|DRD|DSG|DSI|DTM|\"+\n            \"EDT|EFI|ELM|ELU|ELV|EMP|EQA|EQD|EQN|ERC|ERP|EVE|FCA|FII|FNS|FNT|FOR|FSQ|FTX|\"+\n            \"GDS|GEI|GID|GIN|GIR|GOR|GPO|GRU|HAN|HYN|ICD|IDE|IFD|IHC|IMD|IND|INP|INV|IRQ|\"+\n            \"LAN|LIN|LOC|MEA|MEM|MKS|MOA|MSG|MTD|NAD|NAT|\"+\n            \"PAC|PAI|PAS|PCC|PCD|PCI|PDI|PER|PGI|PIA|PNA|POC|PRC|PRI|PRV|PSD|PTY|PYT|\"+\n            \"QRS|QTY|QUA|QVR|\"+\n            \"RCS|REL|RFF|RJL|RNG|ROD|RSL|RTE|\"+\n            \"SAL|SCC|SCD|SEG|SEL|SEQ|SFI|SGP|SGU|SPR|SPS|STA|STC|STG|STS|\"+\n            \"TAX|TCC|TDT|TEM|TMD|TMP|TOD|TPL|TRU|TSR|\"+\n            \"UNB|UNZ|UNT|UGH|UGT|UNS|\"+\n            \"VLI\"\n        );\n    \n        var header = (\n            \"UNH\"\n        );\n    \n        var buildinConstants = (\"null|Infinity|NaN|undefined\");\n        var langClasses = (\n            \"\"\n        );\n    \n        var keywords = (\n            \"BY|SE|ON|INV|JP|UNOA\"\n        );\n    \n        var keywordMapper = this.createKeywordMapper({\n            \"variable.language\": \"this\",\n            \"keyword\": keywords,\n            \"entity.name.segment\":segment,\n            \"entity.name.header\":header,\n            \"constant.language\": buildinConstants,\n            \"support.function\": langClasses\n        }, \"identifier\");\n    \n        this.$rules = {\n            \"start\" : [\n                {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\+.\\\\+\"\n                }, {\n                    token : \"constant.language.boolean\",\n                    regex : \"(?:true|false)\\\\b\"\n                }, {\n                    token : keywordMapper,\n                    regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"\\\\+\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\:|'\"\n                },{\n                    token : \"identifier\",\n                    regex : \"\\\\:D\\\\:\"\n                }\n            ]\n        };\n    \n        this.embedRules(DocCommentHighlightRules, \"doc-\",\n            [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    };\n    \n    EdifactHighlightRules.metaData = { fileTypes: [ 'edi' ],\n          keyEquivalent: '^~E',\n          name: 'Edifact',\n          scopeName: 'source.edifact' };\n    \n    oop.inherits(EdifactHighlightRules, TextHighlightRules);\n    \n    exports.EdifactHighlightRules = EdifactHighlightRules;\n    });\n\nace.define(\"ace/mode/edifact\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/edifact_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar EdifactHighlightRules = require(\"./edifact_highlight_rules\").EdifactHighlightRules;\n\nvar Mode = function() {\n   \n    this.HighlightRules = EdifactHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/edifact\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-eiffel.js",
    "content": "ace.define(\"ace/mode/eiffel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar EiffelHighlightRules = function() {\n    var keywords = \"across|agent|alias|all|attached|as|assign|attribute|check|\" +\n        \"class|convert|create|debug|deferred|detachable|do|else|elseif|end|\" +\n        \"ensure|expanded|export|external|feature|from|frozen|if|inherit|\" +\n        \"inspect|invariant|like|local|loop|not|note|obsolete|old|once|\" +\n        \"Precursor|redefine|rename|require|rescue|retry|select|separate|\" +\n        \"some|then|undefine|until|variant|when\";\n\n    var operatorKeywords = \"and|implies|or|xor\";\n\n    var languageConstants = \"Void\";\n\n    var booleanConstants = \"True|False\";\n\n    var languageVariables = \"Current|Result\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language\": languageConstants,\n        \"constant.language.boolean\": booleanConstants,\n        \"variable.language\": languageVariables,\n        \"keyword.operator\": operatorKeywords,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n\n    var simpleString = /(?:[^\"%\\b\\f\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)+?/;\n\n    this.$rules = {\n        \"start\": [{\n                token : \"string.quoted.other\", // Aligned-verbatim-strings (verbatim option not supported)\n                regex : /\"\\[/,\n                next: \"aligned_verbatim_string\"\n            }, {\n                token : \"string.quoted.other\", // Non-aligned-verbatim-strings (verbatim option not supported)\n                regex : /\"\\{/,\n                next: \"non-aligned_verbatim_string\"\n            }, {\n                token : \"string.quoted.double\",\n                regex : /\"(?:[^%\\b\\f\\n\\r\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)*?\"/\n            }, {\n                token : \"comment.line.double-dash\",\n                regex : /--.*/\n            }, {\n                token : \"constant.character\",\n                regex : /'(?:[^%\\b\\f\\n\\r\\t\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)'/\n            }, {\n                token : \"constant.numeric\", // hexa | octal | bin\n                regex : /\\b0(?:[xX][\\da-fA-F](?:_*[\\da-fA-F])*|[cC][0-7](?:_*[0-7])*|[bB][01](?:_*[01])*)\\b/\n            }, {\n                token : \"constant.numeric\",\n                regex : /(?:\\d(?:_*\\d)*)?\\.(?:(?:\\d(?:_*\\d)*)?[eE][+-]?)?\\d(?:_*\\d)*|\\d(?:_*\\d)*\\.?/\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]|<<|\\|\\(/\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]|>>|\\|\\)/\n            }, {\n                token : \"keyword.operator\", // punctuation\n                regex : /:=|->|\\.(?=\\w)|[;,:?]/\n            }, {\n                token : \"keyword.operator\",\n                regex : /\\\\\\\\|\\|\\.\\.\\||\\.\\.|\\/[~\\/]?|[><\\/]=?|[-+*^=~]/\n            }, {\n                token : function (v) {\n                    var result = keywordMapper(v);\n                    if (result === \"identifier\" && v === v.toUpperCase()) {\n                        result =  \"entity.name.type\";\n                    }\n                    return result;\n                },\n                regex : /[a-zA-Z][a-zA-Z\\d_]*\\b/\n            }, {\n                token : \"text\",\n                regex : /\\s+/\n            }\n        ],\n        \"aligned_verbatim_string\" : [{\n                token : \"string\",\n                regex : /]\"/,\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : simpleString\n            }\n        ],\n        \"non-aligned_verbatim_string\" : [{\n                token : \"string.quoted.other\",\n                regex : /}\"/,\n                next : \"start\"\n            }, {\n                token : \"string.quoted.other\",\n                regex : simpleString\n            }\n        ]};\n};\n\noop.inherits(EiffelHighlightRules, TextHighlightRules);\n\nexports.EiffelHighlightRules = EiffelHighlightRules;\n});\n\nace.define(\"ace/mode/eiffel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/eiffel_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar EiffelHighlightRules = require(\"./eiffel_highlight_rules\").EiffelHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = EiffelHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.$id = \"ace/mode/eiffel\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-ejs.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length-tab.length, row, indent.length));\n        }\n    };\n\n    this.$id = \"ace/mode/ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/ejs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar EjsHighlightRules = function(start, end) {\n    HtmlHighlightRules.call(this);\n    \n    if (!start)\n        start = \"(?:<%|<\\\\?|{{)\";\n    if (!end)\n        end = \"(?:%>|\\\\?>|}})\";\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token : \"markup.list.meta.tag\",\n            regex : start + \"(?![>}])[-=]?\",\n            push  : \"ejs-start\"\n        });\n    }\n    \n    this.embedRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"ejs-\", [{\n        token : \"markup.list.meta.tag\",\n        regex : \"-?\" + end,\n        next  : \"pop\"\n    }, {\n        token: \"comment\",\n        regex: \"//.*?\" + end,\n        next: \"pop\"\n    }]);\n    \n    this.normalizeRules();\n};\n\n\noop.inherits(EjsHighlightRules, HtmlHighlightRules);\n\nexports.EjsHighlightRules = EjsHighlightRules;\n\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar RubyMode = require(\"./ruby\").Mode;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = EjsHighlightRules;    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"ejs-\": JavaScriptMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.$id = \"ace/mode/ejs\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-elixir.js",
    "content": "ace.define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ElixirHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: \n            [ 'meta.module.elixir',\n              'keyword.control.module.elixir',\n              'meta.module.elixir',\n              'entity.name.type.module.elixir' ],\n           regex: '^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.false',\n           regex: '@(?:module|type)?doc false',\n           comment: '@doc false is treated as documentation' },\n         { token: 'comment.documentation.string',\n           regex: '@(?:module|type)?doc \"',\n           push: \n            [ { token: 'comment.documentation.string',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.string' } ],\n           comment: '@doc with string is treated as documentation' },\n         { token: 'keyword.control.elixir',\n           regex: '\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])' },\n         { token: 'keyword.operator.elixir',\n           regex: '\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           comment: ' as above, just doesn\\'t need a \\'end\\' and does a logic operation' },\n         { token: 'constant.language.elixir',\n           regex: '\\\\b(?:nil|true|false)\\\\b(?![?!])' },\n         { token: 'variable.language.elixir',\n           regex: '\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.readwrite.module.elixir' ],\n           regex: '(@)([a-zA-Z_]\\\\w*)' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.anonymous.elixir' ],\n           regex: '(&)(\\\\d*)' },\n         { token: 'variable.other.constant.elixir',\n           regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\\'',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.single-quoted.elixir' } ] },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\"',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.double-quoted.elixir' } ] },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\\'\\'\\')',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\\'\\'\\')',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' } ],\n           comment: 'Single-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.elixir' } ],\n           comment: 'single quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.elixir' } ],\n           comment: 'double quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[a-z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[A-Z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'],\n           regex: '(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)',\n           comment: 'symbols' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: '(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)',\n           comment: 'symbols' },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(#)(.*)' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           comment: '\\n\\t\\t\\tmatches questionmark-letters.\\n\\n\\t\\t\\texamples (1st alternation = hex):\\n\\t\\t\\t?\\\\x1     ?\\\\x61\\n\\n\\t\\t\\texamples (2rd alternation = escaped):\\n\\t\\t\\t?\\\\n      ?\\\\b\\n\\n\\t\\t\\texamples (3rd alternation = normal):\\n\\t\\t\\t?a       ?A       ?0 \\n\\t\\t\\t?*       ?\"       ?( \\n\\t\\t\\t?.       ?#\\n\\t\\t\\t\\n\\t\\t\\tthe negative lookbehind prevents against matching\\n\\t\\t\\tp(42.tainted?)\\n\\t\\t\\t' },\n         { token: 'keyword.operator.assignment.augmented.elixir',\n           regex: '\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=' },\n         { token: 'keyword.operator.comparison.elixir',\n           regex: '===?|!==?|<=?|>=?' },\n         { token: 'keyword.operator.bitwise.elixir',\n           regex: '\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}' },\n         { token: 'keyword.operator.logical.elixir',\n           regex: '!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b',\n           originalRegex: '(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b' },\n         { token: 'keyword.operator.arithmetic.elixir',\n           regex: '\\\\*|\\\\+|\\\\-|/' },\n         { token: 'keyword.operator.other.elixir',\n           regex: '\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>' },\n         { token: 'keyword.operator.assignment.elixir', regex: '=' },\n         { token: 'punctuation.separator.other.elixir', regex: ':' },\n         { token: 'punctuation.separator.statement.elixir',\n           regex: '\\\\;' },\n         { token: 'punctuation.separator.object.elixir', regex: ',' },\n         { token: 'punctuation.separator.method.elixir', regex: '\\\\.' },\n         { token: 'punctuation.section.scope.elixir', regex: '\\\\{|\\\\}' },\n         { token: 'punctuation.section.array.elixir', regex: '\\\\[|\\\\]' },\n         { token: 'punctuation.section.function.elixir',\n           regex: '\\\\(|\\\\)' } ],\n      '#escaped_char': \n       [ { token: 'constant.character.escape.elixir',\n           regex: '\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)' } ],\n      '#interpolated_elixir': \n       [ { token: \n            [ 'source.elixir.embedded.source',\n              'source.elixir.embedded.source.empty' ],\n           regex: '(#\\\\{)(\\\\})' },\n         { todo: \n            { token: 'punctuation.section.embedded.elixir',\n              regex: '#\\\\{',\n              push: \n               [ { token: 'punctuation.section.embedded.elixir',\n                   regex: '\\\\}',\n                   next: 'pop' },\n                 { include: '#nest_curly_and_self' },\n                 { include: '$self' },\n                 { defaultToken: 'source.elixir.embedded.source' } ] } } ],\n      '#nest_curly_and_self': \n       [ { token: 'punctuation.section.scope.elixir',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.section.scope.elixir',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#nest_curly_and_self' } ] },\n         { include: '$self' } ],\n      '#regex_sub': \n       [ { include: '#interpolated_elixir' },\n         { include: '#escaped_char' },\n         { token: \n            [ 'punctuation.definition.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'punctuation.definition.arbitrary-repitition.elixir' ],\n           regex: '(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})' },\n         { token: 'punctuation.definition.character-class.elixir',\n           regex: '\\\\[(?:\\\\^?\\\\])?',\n           push: \n            [ { token: 'punctuation.definition.character-class.elixir',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.regexp.character-class.elixir' } ] },\n         { token: 'punctuation.definition.group.elixir',\n           regex: '\\\\(',\n           push: \n            [ { token: 'punctuation.definition.group.elixir',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#regex_sub' },\n              { defaultToken: 'string.regexp.group.elixir' } ] },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)',\n           originalRegex: '(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$',\n           comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' } ] };\n    \n    this.normalizeRules();\n};\n\nElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.',\n      fileTypes: [ 'ex', 'exs' ],\n      firstLineMatch: '^#!/.*\\\\belixir',\n      foldingStartMarker: '(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$',\n      foldingStopMarker: '^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)',\n      keyEquivalent: '^~E',\n      name: 'Elixir',\n      scopeName: 'source.elixir' };\n\n\noop.inherits(ElixirHighlightRules, TextHighlightRules);\n\nexports.ElixirHighlightRules = ElixirHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ElixirHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/elixir\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-elm.js",
    "content": "ace.define(\"ace/mode/elm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ElmHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n       \"keyword\": \"as|case|class|data|default|deriving|do|else|export|foreign|\" +\n            \"hiding|jsevent|if|import|in|infix|infixl|infixr|instance|let|\" +\n            \"module|newtype|of|open|then|type|where|_|port|\\u03BB\"\n    }, \"identifier\");\n    \n    var escapeRe = /\\\\(\\d+|['\"\\\\&trnbvf])/;\n    \n    var smallRe = /[a-z_]/.source;\n    var largeRe = /[A-Z]/.source;\n    var idRe = /[a-z_A-Z0-9']/.source;\n\n    this.$rules = {\n        start: [{\n            token: \"string.start\",\n            regex: '\"',\n            next: \"string\"\n        }, {\n            token: \"string.character\",\n            regex: \"'(?:\" + escapeRe.source + \"|.)'?\"\n        }, {\n            regex: /0(?:[xX][0-9A-Fa-f]+|[oO][0-7]+)|\\d+(\\.\\d+)?([eE][-+]?\\d*)?/,\n            token: \"constant.numeric\"\n        }, {\n            token: \"comment\",\n            regex: \"--.*\"\n        }, {\n            token : \"keyword\",\n            regex : /\\.\\.|\\||:|=|\\\\|\"|->|<-|\\u2192/\n        }, {\n            token : \"keyword.operator\",\n            regex : /[-!#$%&*+.\\/<=>?@\\\\^|~:\\u03BB\\u2192]+/\n        }, {\n            token : \"operator.punctuation\",\n            regex : /[,;`]/\n        }, {\n            regex : largeRe + idRe + \"+\\\\.?\",\n            token : function(value) {\n                if (value[value.length - 1] == \".\")\n                    return \"entity.name.function\"; \n                return \"constant.language\"; \n            }\n        }, {\n            regex : \"^\" + smallRe  + idRe + \"+\",\n            token : function(value) {\n                return \"constant.language\"; \n            }\n        }, {\n            token : keywordMapper,\n            regex : \"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"\n        }, {\n            regex: \"{-#?\",\n            token: \"comment.start\",\n            onMatch: function(value, currentState, stack) {\n                this.next = value.length == 2 ? \"blockComment\" : \"docComment\";\n                return this.token;\n            }\n        }, {\n            token: \"variable.language\",\n            regex: /\\[markdown\\|/,\n            next: \"markdown\"\n        }, {\n            token: \"paren.lparen\",\n            regex: /[\\[({]/ \n        }, {\n            token: \"paren.rparen\",\n            regex: /[\\])}]/\n        } ],\n        markdown: [{\n            regex: /\\|\\]/,\n            next: \"start\"\n        }, {\n            defaultToken : \"string\"\n        }],\n        blockComment: [{\n            regex: \"{-\",\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            regex: \"-}\",\n            token: \"comment.end\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }],\n        docComment: [{\n            regex: \"{-\",\n            token: \"comment.start\",\n            push: \"docComment\"\n        }, {\n            regex: \"-}\",\n            token: \"comment.end\",\n            next: \"pop\" \n        }, {\n            defaultToken: \"doc.comment\"\n        }],\n        string: [{\n            token: \"constant.language.escape\",\n            regex: escapeRe\n        }, {\n            token: \"text\",\n            regex: /\\\\(\\s|$)/,\n            next: \"stringGap\"\n        }, {\n            token: \"string.end\",\n            regex: '\"',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        stringGap: [{\n            token: \"text\",\n            regex: /\\\\/,\n            next: \"string\"\n        }, {\n            token: \"error\",\n            regex: \"\",\n            next: \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ElmHighlightRules, TextHighlightRules);\n\nexports.ElmHighlightRules = ElmHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/elm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elm_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./elm_highlight_rules\").ElmHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"{-\", end: \"-}\", nestable: true};\n    this.$id = \"ace/mode/elm\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-erlang.js",
    "content": "ace.define(\"ace/mode/erlang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ErlangHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { include: '#module-directive' },\n         { include: '#import-export-directive' },\n         { include: '#behaviour-directive' },\n         { include: '#record-directive' },\n         { include: '#define-directive' },\n         { include: '#macro-directive' },\n         { include: '#directive' },\n         { include: '#function' },\n         { include: '#everything-else' } ],\n      '#atom': \n       [ { token: 'punctuation.definition.symbol.begin.erlang',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.symbol.end.erlang',\n                regex: '\\'',\n                next: 'pop' },\n              { token: \n                 [ 'punctuation.definition.escape.erlang',\n                   'constant.other.symbol.escape.erlang',\n                   'punctuation.definition.escape.erlang',\n                   'constant.other.symbol.escape.erlang',\n                   'constant.other.symbol.escape.erlang' ],\n                regex: '(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n              { token: 'invalid.illegal.atom.erlang', regex: '\\\\\\\\\\\\^?.?' },\n              { defaultToken: 'constant.other.symbol.quoted.single.erlang' } ] },\n         { token: 'constant.other.symbol.unquoted.erlang',\n           regex: '[a-z][a-zA-Z\\\\d@_]*' } ],\n      '#behaviour-directive': \n       [ { token: \n            [ 'meta.directive.behaviour.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.behaviour.erlang',\n              'keyword.control.directive.behaviour.erlang',\n              'meta.directive.behaviour.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.behaviour.erlang',\n              'entity.name.type.class.behaviour.definition.erlang',\n              'meta.directive.behaviour.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.behaviour.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(behaviour)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' } ],\n      '#binary': \n       [ { token: 'punctuation.definition.binary.begin.erlang',\n           regex: '<<',\n           push: \n            [ { token: 'punctuation.definition.binary.end.erlang',\n                regex: '>>',\n                next: 'pop' },\n              { token: \n                 [ 'punctuation.separator.binary.erlang',\n                   'punctuation.separator.value-size.erlang' ],\n                regex: '(,)|(:)' },\n              { include: '#internal-type-specifiers' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.binary.erlang' } ] } ],\n      '#character': \n       [ { token: \n            [ 'punctuation.definition.character.erlang',\n              'punctuation.definition.escape.erlang',\n              'constant.character.escape.erlang',\n              'punctuation.definition.escape.erlang',\n              'constant.character.escape.erlang',\n              'constant.character.escape.erlang' ],\n           regex: '(\\\\$)(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n         { token: 'invalid.illegal.character.erlang',\n           regex: '\\\\$\\\\\\\\\\\\^?.?' },\n         { token: \n            [ 'punctuation.definition.character.erlang',\n              'constant.character.erlang' ],\n           regex: '(\\\\$)(\\\\S)' },\n         { token: 'invalid.illegal.character.erlang', regex: '\\\\$.?' } ],\n      '#comment': \n       [ { token: 'punctuation.definition.comment.erlang',\n           regex: '%.*$',\n           push_: \n            [ { token: 'comment.line.percentage.erlang',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.percentage.erlang' } ] } ],\n      '#define-directive': \n       [ { token: \n            [ 'meta.directive.define.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.define.erlang',\n              'keyword.control.directive.define.erlang',\n              'meta.directive.define.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.define.erlang',\n              'entity.name.function.macro.definition.erlang',\n              'meta.directive.define.erlang',\n              'punctuation.separator.parameters.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(,)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.define.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.directive.define.erlang' } ] },\n         { token: 'meta.directive.define.erlang',\n           regex: '(?=^\\\\s*-\\\\s*define\\\\s*\\\\(\\\\s*[a-zA-Z\\\\d@_]+\\\\s*\\\\()',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.define.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { token: \n                 [ 'text',\n                   'punctuation.section.directive.begin.erlang',\n                   'text',\n                   'keyword.control.directive.define.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang',\n                   'text',\n                   'entity.name.function.macro.definition.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang' ],\n                regex: '^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\()',\n                push: \n                 [ { token: \n                      [ 'punctuation.definition.parameters.end.erlang',\n                        'text',\n                        'punctuation.separator.parameters.erlang' ],\n                     regex: '(\\\\))(\\\\s*)(,)',\n                     next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { token: 'punctuation.separator.define.erlang',\n                regex: '\\\\|\\\\||\\\\||:|;|,|\\\\.|->' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.directive.define.erlang' } ] } ],\n      '#directive': \n       [ { token: \n            [ 'meta.directive.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.erlang',\n              'keyword.control.directive.erlang',\n              'meta.directive.erlang',\n              'punctuation.definition.parameters.begin.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\(?)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\)?)(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.directive.erlang' } ] },\n         { token: \n            [ 'meta.directive.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.erlang',\n              'keyword.control.directive.erlang',\n              'meta.directive.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\.)' } ],\n      '#everything-else': \n       [ { include: '#comment' },\n         { include: '#record-usage' },\n         { include: '#macro-usage' },\n         { include: '#expression' },\n         { include: '#keyword' },\n         { include: '#textual-operator' },\n         { include: '#function-call' },\n         { include: '#tuple' },\n         { include: '#list' },\n         { include: '#binary' },\n         { include: '#parenthesized-expression' },\n         { include: '#character' },\n         { include: '#number' },\n         { include: '#atom' },\n         { include: '#string' },\n         { include: '#symbolic-operator' },\n         { include: '#variable' } ],\n      '#expression': \n       [ { token: 'keyword.control.if.erlang',\n           regex: '\\\\bif\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.if.erlang' } ] },\n         { token: 'keyword.control.case.erlang',\n           regex: '\\\\bcase\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.case.erlang' } ] },\n         { token: 'keyword.control.receive.erlang',\n           regex: '\\\\breceive\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.receive.erlang' } ] },\n         { token: \n            [ 'keyword.control.fun.erlang',\n              'text',\n              'entity.name.type.class.module.erlang',\n              'text',\n              'punctuation.separator.module-function.erlang',\n              'text',\n              'entity.name.function.erlang',\n              'text',\n              'punctuation.separator.function-arity.erlang' ],\n           regex: '\\\\b(fun)(\\\\s*)(?:([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(/)' },\n         { token: 'keyword.control.fun.erlang',\n           regex: '\\\\bfun\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { token: 'text',\n                regex: '(?=\\\\()',\n                push: \n                 [ { token: 'punctuation.separator.clauses.erlang',\n                     regex: ';|(?=\\\\bend\\\\b)',\n                     next: 'pop' },\n                   { include: '#internal-function-parts' } ] },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.fun.erlang' } ] },\n         { token: 'keyword.control.try.erlang',\n           regex: '\\\\btry\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.try.erlang' } ] },\n         { token: 'keyword.control.begin.erlang',\n           regex: '\\\\bbegin\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.begin.erlang' } ] },\n         { token: 'keyword.control.query.erlang',\n           regex: '\\\\bquery\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.query.erlang' } ] } ],\n      '#function': \n       [ { token: \n            [ 'meta.function.erlang',\n              'entity.name.function.definition.erlang',\n              'meta.function.erlang' ],\n           regex: '^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(?=\\\\()',\n           push: \n            [ { token: 'punctuation.terminator.function.erlang',\n                regex: '\\\\.',\n                next: 'pop' },\n              { token: [ 'text', 'entity.name.function.erlang', 'text' ],\n                regex: '^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(?=\\\\()' },\n              { token: 'text',\n                regex: '(?=\\\\()',\n                push: \n                 [ { token: 'punctuation.separator.clauses.erlang',\n                     regex: ';|(?=\\\\.)',\n                     next: 'pop' },\n                   { include: '#parenthesized-expression' },\n                   { include: '#internal-function-parts' } ] },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.function.erlang' } ] } ],\n      '#function-call': \n       [ { token: 'meta.function-call.erlang',\n           regex: '(?=(?:[a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')\\\\s*(?:\\\\(|:\\\\s*(?:[a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')\\\\s*\\\\())',\n           push: \n            [ { token: 'punctuation.definition.parameters.end.erlang',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: \n                 [ 'entity.name.type.class.module.erlang',\n                   'text',\n                   'punctuation.separator.module-function.erlang',\n                   'text',\n                   'entity.name.function.guard.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang' ],\n                regex: '(?:(erlang)(\\\\s*)(:)(\\\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\\\s*)(\\\\()',\n                push: \n                 [ { token: 'text', regex: '(?=\\\\))', next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { token: \n                 [ 'entity.name.type.class.module.erlang',\n                   'text',\n                   'punctuation.separator.module-function.erlang',\n                   'text',\n                   'entity.name.function.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang' ],\n                regex: '(?:([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(\\\\()',\n                push: \n                 [ { token: 'text', regex: '(?=\\\\))', next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { defaultToken: 'meta.function-call.erlang' } ] } ],\n      '#import-export-directive': \n       [ { token: \n            [ 'meta.directive.import.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.import.erlang',\n              'keyword.control.directive.import.erlang',\n              'meta.directive.import.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.import.erlang',\n              'entity.name.type.class.module.erlang',\n              'meta.directive.import.erlang',\n              'punctuation.separator.parameters.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(import)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(,)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.import.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#internal-function-list' },\n              { defaultToken: 'meta.directive.import.erlang' } ] },\n         { token: \n            [ 'meta.directive.export.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.export.erlang',\n              'keyword.control.directive.export.erlang',\n              'meta.directive.export.erlang',\n              'punctuation.definition.parameters.begin.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(export)(\\\\s*)(\\\\()',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.export.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#internal-function-list' },\n              { defaultToken: 'meta.directive.export.erlang' } ] } ],\n      '#internal-expression-punctuation': \n       [ { token: \n            [ 'punctuation.separator.clause-head-body.erlang',\n              'punctuation.separator.clauses.erlang',\n              'punctuation.separator.expressions.erlang' ],\n           regex: '(->)|(;)|(,)' } ],\n      '#internal-function-list': \n       [ { token: 'punctuation.definition.list.begin.erlang',\n           regex: '\\\\[',\n           push: \n            [ { token: 'punctuation.definition.list.end.erlang',\n                regex: '\\\\]',\n                next: 'pop' },\n              { token: \n                 [ 'entity.name.function.erlang',\n                   'text',\n                   'punctuation.separator.function-arity.erlang' ],\n                regex: '([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(/)',\n                push: \n                 [ { token: 'punctuation.separator.list.erlang',\n                     regex: ',|(?=\\\\])',\n                     next: 'pop' },\n                   { include: '#everything-else' } ] },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.list.function.erlang' } ] } ],\n      '#internal-function-parts': \n       [ { token: 'text',\n           regex: '(?=\\\\()',\n           push: \n            [ { token: 'punctuation.separator.clause-head-body.erlang',\n                regex: '->',\n                next: 'pop' },\n              { token: 'punctuation.definition.parameters.begin.erlang',\n                regex: '\\\\(',\n                push: \n                 [ { token: 'punctuation.definition.parameters.end.erlang',\n                     regex: '\\\\)',\n                     next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { token: 'punctuation.separator.guards.erlang', regex: ',|;' },\n              { include: '#everything-else' } ] },\n         { token: 'punctuation.separator.expressions.erlang',\n           regex: ',' },\n         { include: '#everything-else' } ],\n      '#internal-record-body': \n       [ { token: 'punctuation.definition.class.record.begin.erlang',\n           regex: '\\\\{',\n           push: \n            [ { token: 'meta.structure.record.erlang',\n                regex: '(?=\\\\})',\n                next: 'pop' },\n              { token: \n                 [ 'variable.other.field.erlang',\n                   'variable.language.omitted.field.erlang',\n                   'text',\n                   'keyword.operator.assignment.erlang' ],\n                regex: '(?:([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')|(_))(\\\\s*)(=|::)',\n                push: \n                 [ { token: 'punctuation.separator.class.record.erlang',\n                     regex: ',|(?=\\\\})',\n                     next: 'pop' },\n                   { include: '#everything-else' } ] },\n              { token: \n                 [ 'variable.other.field.erlang',\n                   'text',\n                   'punctuation.separator.class.record.erlang' ],\n                regex: '([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)((?:,)?)' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.record.erlang' } ] } ],\n      '#internal-type-specifiers': \n       [ { token: 'punctuation.separator.value-type.erlang',\n           regex: '/',\n           push: \n            [ { token: 'text', regex: '(?=,|:|>>)', next: 'pop' },\n              { token: \n                 [ 'storage.type.erlang',\n                   'storage.modifier.signedness.erlang',\n                   'storage.modifier.endianness.erlang',\n                   'storage.modifier.unit.erlang',\n                   'punctuation.separator.type-specifiers.erlang' ],\n                regex: '(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)' } ] } ],\n      '#keyword': \n       [ { token: 'keyword.control.erlang',\n           regex: '\\\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\\\b' } ],\n      '#list': \n       [ { token: 'punctuation.definition.list.begin.erlang',\n           regex: '\\\\[',\n           push: \n            [ { token: 'punctuation.definition.list.end.erlang',\n                regex: '\\\\]',\n                next: 'pop' },\n              { token: 'punctuation.separator.list.erlang',\n                regex: '\\\\||\\\\|\\\\||,' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.list.erlang' } ] } ],\n      '#macro-directive': \n       [ { token: \n            [ 'meta.directive.ifdef.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.ifdef.erlang',\n              'keyword.control.directive.ifdef.erlang',\n              'meta.directive.ifdef.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.ifdef.erlang',\n              'entity.name.function.macro.erlang',\n              'meta.directive.ifdef.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.ifdef.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(ifdef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' },\n         { token: \n            [ 'meta.directive.ifndef.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.ifndef.erlang',\n              'keyword.control.directive.ifndef.erlang',\n              'meta.directive.ifndef.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.ifndef.erlang',\n              'entity.name.function.macro.erlang',\n              'meta.directive.ifndef.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.ifndef.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(ifndef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' },\n         { token: \n            [ 'meta.directive.undef.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.undef.erlang',\n              'keyword.control.directive.undef.erlang',\n              'meta.directive.undef.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.undef.erlang',\n              'entity.name.function.macro.erlang',\n              'meta.directive.undef.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.undef.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(undef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' } ],\n      '#macro-usage': \n       [ { token: \n            [ 'keyword.operator.macro.erlang',\n              'meta.macro-usage.erlang',\n              'entity.name.function.macro.erlang' ],\n           regex: '(\\\\?\\\\??)(\\\\s*)([a-zA-Z\\\\d@_]+)' } ],\n      '#module-directive': \n       [ { token: \n            [ 'meta.directive.module.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.module.erlang',\n              'keyword.control.directive.module.erlang',\n              'meta.directive.module.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.module.erlang',\n              'entity.name.type.class.module.definition.erlang',\n              'meta.directive.module.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.module.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(module)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' } ],\n      '#number': \n       [ { token: 'text',\n           regex: '(?=\\\\d)',\n           push: \n            [ { token: 'text', regex: '(?!\\\\d)', next: 'pop' },\n              { token: \n                 [ 'constant.numeric.float.erlang',\n                   'punctuation.separator.integer-float.erlang',\n                   'constant.numeric.float.erlang',\n                   'punctuation.separator.float-exponent.erlang' ],\n                regex: '(\\\\d+)(\\\\.)(\\\\d+)((?:[eE][\\\\+\\\\-]?\\\\d+)?)' },\n              { token: \n                 [ 'constant.numeric.integer.binary.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.binary.erlang' ],\n                regex: '(2)(#)([0-1]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-3.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-3.erlang' ],\n                regex: '(3)(#)([0-2]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-4.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-4.erlang' ],\n                regex: '(4)(#)([0-3]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-5.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-5.erlang' ],\n                regex: '(5)(#)([0-4]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-6.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-6.erlang' ],\n                regex: '(6)(#)([0-5]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-7.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-7.erlang' ],\n                regex: '(7)(#)([0-6]+)' },\n              { token: \n                 [ 'constant.numeric.integer.octal.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.octal.erlang' ],\n                regex: '(8)(#)([0-7]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-9.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-9.erlang' ],\n                regex: '(9)(#)([0-8]+)' },\n              { token: \n                 [ 'constant.numeric.integer.decimal.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.decimal.erlang' ],\n                regex: '(10)(#)(\\\\d+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-11.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-11.erlang' ],\n                regex: '(11)(#)([\\\\daA]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-12.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-12.erlang' ],\n                regex: '(12)(#)([\\\\da-bA-B]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-13.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-13.erlang' ],\n                regex: '(13)(#)([\\\\da-cA-C]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-14.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-14.erlang' ],\n                regex: '(14)(#)([\\\\da-dA-D]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-15.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-15.erlang' ],\n                regex: '(15)(#)([\\\\da-eA-E]+)' },\n              { token: \n                 [ 'constant.numeric.integer.hexadecimal.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.hexadecimal.erlang' ],\n                regex: '(16)(#)([\\\\da-fA-F]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-17.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-17.erlang' ],\n                regex: '(17)(#)([\\\\da-gA-G]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-18.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-18.erlang' ],\n                regex: '(18)(#)([\\\\da-hA-H]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-19.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-19.erlang' ],\n                regex: '(19)(#)([\\\\da-iA-I]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-20.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-20.erlang' ],\n                regex: '(20)(#)([\\\\da-jA-J]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-21.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-21.erlang' ],\n                regex: '(21)(#)([\\\\da-kA-K]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-22.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-22.erlang' ],\n                regex: '(22)(#)([\\\\da-lA-L]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-23.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-23.erlang' ],\n                regex: '(23)(#)([\\\\da-mA-M]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-24.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-24.erlang' ],\n                regex: '(24)(#)([\\\\da-nA-N]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-25.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-25.erlang' ],\n                regex: '(25)(#)([\\\\da-oA-O]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-26.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-26.erlang' ],\n                regex: '(26)(#)([\\\\da-pA-P]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-27.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-27.erlang' ],\n                regex: '(27)(#)([\\\\da-qA-Q]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-28.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-28.erlang' ],\n                regex: '(28)(#)([\\\\da-rA-R]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-29.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-29.erlang' ],\n                regex: '(29)(#)([\\\\da-sA-S]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-30.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-30.erlang' ],\n                regex: '(30)(#)([\\\\da-tA-T]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-31.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-31.erlang' ],\n                regex: '(31)(#)([\\\\da-uA-U]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-32.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-32.erlang' ],\n                regex: '(32)(#)([\\\\da-vA-V]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-33.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-33.erlang' ],\n                regex: '(33)(#)([\\\\da-wA-W]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-34.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-34.erlang' ],\n                regex: '(34)(#)([\\\\da-xA-X]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-35.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-35.erlang' ],\n                regex: '(35)(#)([\\\\da-yA-Y]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-36.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-36.erlang' ],\n                regex: '(36)(#)([\\\\da-zA-Z]+)' },\n              { token: 'invalid.illegal.integer.erlang',\n                regex: '\\\\d+#[\\\\da-zA-Z]+' },\n              { token: 'constant.numeric.integer.decimal.erlang',\n                regex: '\\\\d+' } ] } ],\n      '#parenthesized-expression': \n       [ { token: 'punctuation.section.expression.begin.erlang',\n           regex: '\\\\(',\n           push: \n            [ { token: 'punctuation.section.expression.end.erlang',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.parenthesized' } ] } ],\n      '#record-directive': \n       [ { token: \n            [ 'meta.directive.record.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.record.erlang',\n              'keyword.control.directive.import.erlang',\n              'meta.directive.record.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.record.erlang',\n              'entity.name.type.class.record.definition.erlang',\n              'meta.directive.record.erlang',\n              'punctuation.separator.parameters.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(record)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(,)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.class.record.end.erlang',\n                   'meta.directive.record.erlang',\n                   'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.record.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\})(\\\\s*)(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#internal-record-body' },\n              { defaultToken: 'meta.directive.record.erlang' } ] } ],\n      '#record-usage': \n       [ { token: \n            [ 'keyword.operator.record.erlang',\n              'meta.record-usage.erlang',\n              'entity.name.type.class.record.erlang',\n              'meta.record-usage.erlang',\n              'punctuation.separator.record-field.erlang',\n              'meta.record-usage.erlang',\n              'variable.other.field.erlang' ],\n           regex: '(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(\\\\.)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')' },\n         { token: \n            [ 'keyword.operator.record.erlang',\n              'meta.record-usage.erlang',\n              'entity.name.type.class.record.erlang' ],\n           regex: '(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')',\n           push: \n            [ { token: 'punctuation.definition.class.record.end.erlang',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#internal-record-body' },\n              { defaultToken: 'meta.record-usage.erlang' } ] } ],\n      '#string': \n       [ { token: 'punctuation.definition.string.begin.erlang',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.erlang',\n                regex: '\"',\n                next: 'pop' },\n              { token: \n                 [ 'punctuation.definition.escape.erlang',\n                   'constant.character.escape.erlang',\n                   'punctuation.definition.escape.erlang',\n                   'constant.character.escape.erlang',\n                   'constant.character.escape.erlang' ],\n                regex: '(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n              { token: 'invalid.illegal.string.erlang', regex: '\\\\\\\\\\\\^?.?' },\n              { token: \n                 [ 'punctuation.definition.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'constant.other.placeholder.erlang' ],\n                regex: '(~)(?:((?:\\\\-)?)(\\\\d+)|(\\\\*))?(?:(\\\\.)(?:(\\\\d+)|(\\\\*)))?(?:(\\\\.)(?:(\\\\*)|(.)))?([~cfegswpWPBX#bx\\\\+ni])' },\n              { token: \n                 [ 'punctuation.definition.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'constant.other.placeholder.erlang' ],\n                regex: '(~)((?:\\\\*)?)((?:\\\\d+)?)([~du\\\\-#fsacl])' },\n              { token: 'invalid.illegal.string.erlang', regex: '~.?' },\n              { defaultToken: 'string.quoted.double.erlang' } ] } ],\n      '#symbolic-operator': \n       [ { token: 'keyword.operator.symbolic.erlang',\n           regex: '\\\\+\\\\+|\\\\+|--|-|\\\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::' } ],\n      '#textual-operator': \n       [ { token: 'keyword.operator.textual.erlang',\n           regex: '\\\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\\\b' } ],\n      '#tuple': \n       [ { token: 'punctuation.definition.tuple.begin.erlang',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.definition.tuple.end.erlang',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'punctuation.separator.tuple.erlang', regex: ',' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.tuple.erlang' } ] } ],\n      '#variable': \n       [ { token: [ 'variable.other.erlang', 'variable.language.omitted.erlang' ],\n           regex: '(_[a-zA-Z\\\\d@_]+|[A-Z][a-zA-Z\\\\d@_]*)|(_)' } ] };\n    \n    this.normalizeRules();\n};\n\nErlangHighlightRules.metaData = { comment: 'The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace).  Also, the function/module/record/macro names must be given unquoted.  -- desp',\n      fileTypes: [ 'erl', 'hrl' ],\n      keyEquivalent: '^~E',\n      name: 'Erlang',\n      scopeName: 'source.erlang' };\n\n\noop.inherits(ErlangHighlightRules, TextHighlightRules);\n\nexports.ErlangHighlightRules = ErlangHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/erlang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/erlang_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ErlangHighlightRules = require(\"./erlang_highlight_rules\").ErlangHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ErlangHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"%\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/erlang\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-forth.js",
    "content": "ace.define(\"ace/mode/forth_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ForthHighlightRules = function() {\n\n    this.$rules = { start: [ { include: '#forth' } ],\n      '#comment':\n       [ { token: 'comment.line.double-dash.forth',\n           regex: '(?:^|\\\\s)--\\\\s.*$',\n           comment: 'line comments for iForth' },\n         { token: 'comment.line.backslash.forth',\n           regex: '(?:^|\\\\s)\\\\\\\\[\\\\s\\\\S]*$',\n           comment: 'ANSI line comment' },\n         { token: 'comment.line.backslash-g.forth',\n           regex: '(?:^|\\\\s)\\\\\\\\[Gg] .*$',\n           comment: 'gForth line comment' },\n         { token: 'comment.block.forth',\n           regex: '(?:^|\\\\s)\\\\(\\\\*(?=\\\\s|$)',\n           push:\n            [ { token: 'comment.block.forth',\n                regex: '(?:^|\\\\s)\\\\*\\\\)(?=\\\\s|$)',\n                next: 'pop' },\n              { defaultToken: 'comment.block.forth' } ],\n           comment: 'multiline comments for iForth' },\n         { token: 'comment.block.documentation.forth',\n           regex: '\\\\bDOC\\\\b',\n           caseInsensitive: true,\n           push:\n            [ { token: 'comment.block.documentation.forth',\n                regex: '\\\\bENDDOC\\\\b',\n                caseInsensitive: true,\n                next: 'pop' },\n              { defaultToken: 'comment.block.documentation.forth' } ],\n           comment: 'documentation comments for iForth' },\n         { token: 'comment.line.parentheses.forth',\n           regex: '(?:^|\\\\s)\\\\.?\\\\( [^)]*\\\\)',\n           comment: 'ANSI line comment' } ],\n      '#constant':\n       [ { token: 'constant.language.forth',\n           regex: '(?:^|\\\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'constant.numeric.forth',\n           regex: '(?:^|\\\\s)[$#%]?[-+]?[0-9]+(?:\\\\.[0-9]*e-?[0-9]+|\\\\.?[0-9a-fA-F]*)(?=\\\\s|$)'},\n         { token: 'constant.character.forth',\n           regex: '(?:^|\\\\s)(?:[&^]\\\\S|(?:\"|\\')\\\\S(?:\"|\\'))(?=\\\\s|$)'}],\n      '#forth':\n       [ { include: '#constant' },\n         { include: '#comment' },\n         { include: '#string' },\n         { include: '#word' },\n         { include: '#variable' },\n         { include: '#storage' },\n         { include: '#word-def' } ],\n      '#storage':\n       [ { token: 'storage.type.forth',\n           regex: '(?:^|\\\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\\\s|$)',\n           caseInsensitive: true}],\n      '#string':\n       [ { token: 'string.quoted.double.forth',\n           regex: '(ABORT\" |BREAK\" |\\\\.\" |C\" |0\"|S\\\\\\\\?\" )([^\"]+\")',\n           caseInsensitive: true},\n         { token: 'string.unquoted.forth',\n           regex: '(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\\\S+(?=\\\\s|$)',\n           caseInsensitive: true}],\n      '#variable':\n       [ { token: 'variable.language.forth',\n           regex: '\\\\b(?:I|J)\\\\b',\n           caseInsensitive: true } ],\n      '#word':\n       [ { token: 'keyword.control.immediate.forth',\n           regex: '(?:^|\\\\s)\\\\[(?:\\\\?DO|\\\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\\\](?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.immediate.forth',\n           regex: '(?:^|\\\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT\\'S|])(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.control.compile-only.forth',\n           regex: '(?:^|\\\\s)(?:-DO|\\\\-LOOP|\\\\?DO|\\\\?LEAVE|\\\\+DO|\\\\+LOOP|ABORT\\\\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\\\-DO|U\\\\+DO|UNTIL|WHILE)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.compile-only.forth',\n           regex: '(?:^|\\\\s)(?:\\\\?DUP-0=-IF|\\\\?DUP-IF|\\\\)|\\\\[|\\\\[\\'\\\\]|\\\\[CHAR\\\\]|\\\\[COMPILE\\\\]|\\\\[IS\\\\]|\\\\[TO\\\\]|<COMPILATION|<INTERPRETATION|ASSERT\\\\(|ASSERT0\\\\(|ASSERT1\\\\(|ASSERT2\\\\(|ASSERT3\\\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.non-immediate.forth',\n           regex: '(?:^|\\\\s)(?:\\'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.warning.forth',\n           regex: '(?:^|\\\\s)(?:~~|BREAK:|BREAK\"|DBG)(?=\\\\s|$)',\n           caseInsensitive: true}],\n      '#word-def':\n       [ { token:\n            [ 'keyword.other.compile-only.forth',\n              'keyword.other.compile-only.forth',\n              'meta.block.forth',\n              'entity.name.function.forth' ],\n           regex: '(:NONAME)|(^:|\\\\s:)(\\\\s)(\\\\S+)(?=\\\\s|$)',\n           caseInsensitive: true,\n           push:\n            [ { token: 'keyword.other.compile-only.forth',\n                regex: ';(?:CODE)?',\n                caseInsensitive: true,\n                next: 'pop' },\n              { include: '#constant' },\n              { include: '#comment' },\n              { include: '#string' },\n              { include: '#word' },\n              { include: '#variable' },\n              { include: '#storage' },\n              { defaultToken: 'meta.block.forth' } ] } ] };\n    \n    this.normalizeRules();\n};\n\nForthHighlightRules.metaData = { fileTypes: [ 'frt', 'fs', 'ldr', 'fth', '4th' ],\n      foldingStartMarker: '/\\\\*\\\\*|\\\\{\\\\s*$',\n      foldingStopMarker: '\\\\*\\\\*/|^\\\\s*\\\\}',\n      keyEquivalent: '^~F',\n      name: 'Forth',\n      scopeName: 'source.forth' };\n\n\noop.inherits(ForthHighlightRules, TextHighlightRules);\n\nexports.ForthHighlightRules = ForthHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/forth\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/forth_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ForthHighlightRules = require(\"./forth_highlight_rules\").ForthHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ForthHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/forth\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-fortran.js",
    "content": "ace.define(\"ace/mode/fortran_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar FortranHighlightRules = function() {\n\n    var keywords = (\n        \"call|case|contains|continue|cycle|do|else|elseif|end|enddo|endif|function|\"+ \n        \"if|implicit|in|include|inout|intent|module|none|only|out|print|program|return|\"+ \n        \"select|status|stop|subroutine|\" +\n        \"return|then|use|while|write|\"+\n        \"CALL|CASE|CONTAINS|CONTINUE|CYCLE|DO|ELSE|ELSEIF|END|ENDDO|ENDIF|FUNCTION|\"+\n        \"IF|IMPLICIT|IN|INCLUDE|INOUT|INTENT|MODULE|NONE|ONLY|OUT|PRINT|PROGRAM|RETURN|\"+\n        \"SELECT|STATUS|STOP|SUBROUTINE|\" +\n        \"RETURN|THEN|USE|WHILE|WRITE\"\n    );\n\n    var keywordOperators = (\n        \"and|or|not|eq|ne|gt|ge|lt|le|\" +\n        \"AND|OR|NOT|EQ|NE|GT|GE|LT|LE\" \n    );\n\n    var builtinConstants = (\n        \"true|false|TRUE|FALSE\"\n    );\n\n    var builtinFunctions = (\n        \"abs|achar|acos|acosh|adjustl|adjustr|aimag|aint|all|allocate|\"+\n        \"anint|any|asin|asinh|associated|atan|atan2|atanh|\"+\n        \"bessel_j0|bessel_j1|bessel_jn|bessel_y0|bessel_y1|bessel_yn|\"+\n        \"bge|bgt|bit_size|ble|blt|btest|ceiling|char|cmplx|conjg|cos|cosh|\"+\n        \"count|cpu_time|cshift|date_and_time|dble|deallocate|digits|dim|dot_product|dprod|\"+\n        \"dshiftl|dshiftr|dsqrt|eoshift|epsilon|erf|erfc|erfc_scaled|exp|float|floor|\"+\n        \"format|fraction|gamma|input|len|lge|lgt|lle|llt|log|log10|maskl|maskr|matmul|max|maxloc|maxval|\"+\n        \"merge|min|minloc|minval|mod|modulo|nint|not|norm2|null|nullify|pack|parity|popcnt|poppar|\"+\n        \"precision|present|product|radix|random_number|random_seed|range|repeat|reshape|round|\"+\n        \"rrspacing|same_type_as|scale|scan|selected_char_kind|selected_int_kind|selected_real_kind|\"+\n        \"set_exponent|shape|shifta|shiftl|shiftr|sign|sin|sinh|size|sngl|spacing|spread|\"+\n        \"sqrt|sum|system_clock|tan|tanh|tiny|trailz|transfer|transpose|trim|ubound|unpack|verify|\" +\n        \"ABS|ACHAR|ACOS|ACOSH|ADJUSTL|ADJUSTR|AIMAG|AINT|ALL|ALLOCATE|\"+\n        \"ANINT|ANY|ASIN|ASINH|ASSOCIATED|ATAN|ATAN2|ATANH|\"+\n        \"BESSEL_J0|BESSEL_J1|BESSEL_JN|BESSEL_Y0|BESSEL_Y1|BESSEL_YN|\"+\n        \"BGE|BGT|BIT_SIZE|BLE|BLT|BTEST|CEILING|CHAR|CMPLX|CONJG|COS|COSH|\"+\n        \"COUNT|CPU_TIME|CSHIFT|DATE_AND_TIME|DBLE|DEALLOCATE|DIGITS|DIM|DOT_PRODUCT|DPROD|\"+\n        \"DSHIFTL|DSHIFTR|DSQRT|EOSHIFT|EPSILON|ERF|ERFC|ERFC_SCALED|EXP|FLOAT|FLOOR|\"+\n        \"FORMAT|FRACTION|GAMMA|INPUT|LEN|LGE|LGT|LLE|LLT|LOG|LOG10|MASKL|MASKR|MATMUL|MAX|MAXLOC|MAXVAL|\"+\n        \"MERGE|MIN|MINLOC|MINVAL|MOD|MODULO|NINT|NOT|NORM2|NULL|NULLIFY|PACK|PARITY|POPCNT|POPPAR|\"+\n        \"PRECISION|PRESENT|PRODUCT|RADIX|RANDOM_NUMBER|RANDOM_SEED|RANGE|REPEAT|RESHAPE|ROUND|\"+\n        \"RRSPACING|SAME_TYPE_AS|SCALE|SCAN|SELECTED_CHAR_KIND|SELECTED_INT_KIND|SELECTED_REAL_KIND|\"+\n        \"SET_EXPONENT|SHAPE|SHIFTA|SHIFTL|SHIFTR|SIGN|SIN|SINH|SIZE|SNGL|SPACING|SPREAD|\"+\n        \"SQRT|SUM|SYSTEM_CLOCK|TAN|TANH|TINY|TRAILZ|TRANSFER|TRANSPOSE|TRIM|UBOUND|UNPACK|VERIFY\"\n    );\n\n    var storageType = (\n        \"logical|character|integer|real|type|\" +\n        \"LOGICAL|CHARACTER|INTEGER|REAL|TYPE\"    \n    );\n\n    var storageModifiers = ( \n        \"allocatable|dimension|intent|parameter|pointer|target|private|public|\" +\n        \"ALLOCATABLE|DIMENSION|INTENT|PARAMETER|POINTER|TARGET|PRIVATE|PUBLIC\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords,\n        \"keyword.operator\": keywordOperators,\n        \"storage.type\": storageType,\n        \"storage.modifier\" : storageModifiers\n    }, \"identifier\");\n\n    var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape =  \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"!.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token : \"constant.numeric\", // imaginary\n            regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // long integer\n            regex : integer + \"[lL]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : \"keyword\", // pre-compiler directives\n            regex : \"#\\\\s*(?:include|import|define|undef|INCLUDE|IMPORT|DEFINE|UNDEF)\\\\b\"\n        }, {\n            token : \"keyword\", // special case pre-compiler directive\n            regex : \"#\\\\s*(?:endif|ifdef|else|elseif|ifndef|ENDIF|IFDEF|ELSE|ELSEIF|IFNDEF)\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ],\n        \"qqstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        } ],\n        \"qstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        } ],\n        \"qqstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }]\n    };\n};\n\noop.inherits(FortranHighlightRules, TextHighlightRules);\n\nexports.FortranHighlightRules = FortranHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/fortran\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fortran_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FortranHighlightRules = require(\"./fortran_highlight_rules\").FortranHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = FortranHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"!\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"return\": 1,\n        \"break\": 1,\n        \"continue\": 1,\n        \"RETURN\": 1,\n        \"BREAK\": 1,\n        \"CONTINUE\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/fortran\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-fsharp.js",
    "content": "ace.define(\"ace/mode/fsharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar FSharpHighlightRules = function () {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable\": \"this\",\n        \"keyword\": 'abstract|assert|base|begin|class|default|delegate|done|downcast|downto|elif\\\n|else|exception|extern|false|finally|function|global|inherit|inline|interface|internal|lazy|match\\\n|member|module|mutable|namespace|open|or|override|private|public|rec|return|return!|select|static\\\n|struct|then|to|true|try|typeof|upcast|use|use!|val|void|when|while|with|yield|yield!|__SOURCE_DIRECTORY__\\\n|as|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue\\\n|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall\\\n|trait|virtual|volatile|and|do|end|for|fun|if|in|let|let!|new|not|null|of|endif',\n        \"constant\": \"true|false\"\n    }, \"identifier\");\n\n    var floatNumber = \"(?:(?:(?:(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.))|(?:\\\\d+))(?:[eE][+-]?\\\\d+))|(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.)))\";\n\n    this.$rules = {\n        \"start\": [\n            {\n              token: \"variable.classes\",\n              regex: '\\\\[\\\\<[.]*\\\\>\\\\]'\n            },\n            {\n                token: \"comment\",\n                regex: '//.*$'\n            },\n            {\n                token: \"comment.start\",\n                regex: /\\(\\*(?!\\))/,\n                push: \"blockComment\"\n            },\n            {\n                token: \"string\",\n                regex: \"'.'\"\n            },\n            {\n                token: \"string\",\n                regex: '\"\"\"',\n                next  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\./,\n                    next  : \"qqstring\"\n                }, {\n                    token : \"string\",\n                    regex : '\"\"\"',\n                    next  : \"start\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            },\n            {\n                token: \"string\",\n                regex: '\"',\n                next  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\./,\n                    next  : \"qqstring\"\n                }, {\n                    token : \"string\",\n                    regex : '\"',\n                    next  : \"start\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            },\n            {\n                token: [\"verbatim.string\", \"string\"],\n                regex: '(@?)(\")',\n                stateName : \"qqstring\",\n                next  : [{\n                    token : \"constant.language.escape\",\n                    regex : '\"\"'\n                }, {\n                    token : \"string\",\n                    regex : '\"',\n                    next  : \"start\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            },\n            {\n                token: \"constant.float\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            },\n            {\n                token: \"constant.float\",\n                regex: floatNumber\n            },\n            {\n                token: \"constant.integer\",\n                regex: \"(?:(?:(?:[1-9]\\\\d*)|(?:0))|(?:0[oO]?[0-7]+)|(?:0[xX][\\\\dA-Fa-f]+)|(?:0[bB][01]+))\\\\b\"\n            },\n            {\n                token: [\"keyword.type\", \"variable\"],\n                regex: \"(type\\\\s)([a-zA-Z0-9_$\\-]*\\\\b)\"\n            },\n            {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|\\\\(\\\\*\\\\)\"\n            },\n            {\n                token: \"paren.lpar\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.rpar\",\n                regex: \"[\\\\])}]\"\n            }\n        ],\n        blockComment: [{\n            regex: /\\(\\*\\)/,\n            token: \"comment\"\n        }, {\n            regex: /\\(\\*(?!\\))/,\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            regex: /\\*\\)/,\n            token: \"comment.end\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }]\n    };\n    this.normalizeRules();\n};\n\n\noop.inherits(FSharpHighlightRules, TextHighlightRules);\n\nexports.FSharpHighlightRules = FSharpHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/fsharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsharp_highlight_rules\",\"ace/mode/folding/cstyle\"], function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var FSharpHighlightRules = require(\"./fsharp_highlight_rules\").FSharpHighlightRules;\n    var CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\n    var Mode = function () {\n        TextMode.call(this);\n        this.HighlightRules = FSharpHighlightRules;\n        this.foldingRules = new CStyleFoldMode();\n    };\n\n    oop.inherits(Mode, TextMode);\n\n\n    (function () {\n        this.lineCommentStart = \"//\";\n        this.blockComment = {start: \"(*\", end: \"*)\", nestable: true};\n\n\n        this.$id = \"ace/mode/fsharp\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-fsl.js",
    "content": "ace.define(\"ace/mode/fsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar FSLHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"punctuation.definition.comment.mn\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.mn\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.fsl\"\n            }]\n        }, {\n            token: \"comment.line.fsl\",\n            regex: /\\/\\//,\n            push: [{\n                token: \"comment.line.fsl\",\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.line.fsl\"\n            }]\n        }, {\n            token: \"entity.name.function\",\n            regex: /\\${/,\n            push: [{\n                token: \"entity.name.function\",\n                regex: /}/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"keyword.other\"\n            }],\n            comment: \"js outcalls\"\n        }, {\n            token: \"constant.numeric\",\n            regex: /[0-9]*\\.[0-9]*\\.[0-9]*/,\n            comment: \"semver\"\n        }, {\n            token: \"constant.language.fslLanguage\",\n            regex: \"(?:\"\n                + \"graph_layout|machine_name|machine_author|machine_license|machine_comment|machine_language\"\n                + \"|machine_version|machine_reference|npm_name|graph_layout|on_init|on_halt|on_end|on_terminate|on_finalize|on_transition\"\n                + \"|on_action|on_stochastic_action|on_legal|on_main|on_forced|on_validation|on_validation_failure|on_transition_refused|on_forced_transition_refused\"\n                + \"|on_action_refused|on_enter|on_exit|start_states|end_states|terminal_states|final_states|fsl_version\"\n                + \")\\\\s*:\"\n        }, {\n            token: \"keyword.control.transition.fslArrow\",\n            regex: /<->|<-|->|<=>|=>|<=|<~>|~>|<~|<-=>|<=->|<-~>|<~->|<=~>|<~=>/\n        }, {\n            token: \"constant.numeric.fslProbability\",\n            regex: /[0-9]+%/,\n            comment: \"edge probability annotation\"\n        }, {\n            token: \"constant.character.fslAction\",\n            regex: /\\'[^']*\\'/,\n            comment: \"action annotation\"\n        }, {\n            token: \"string.quoted.double.fslLabel.doublequoted\",\n            regex: /\\\"[^\"]*\\\"/,\n            comment: \"fsl label annotation\"\n        }, {\n            token: \"entity.name.tag.fslLabel.atom\",\n            regex: /[a-zA-Z0-9_.+&()#@!?,]/,\n            comment: \"fsl label annotation\"\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nFSLHighlightRules.metaData = {\n    fileTypes: [\"fsl\", \"fsl_state\"],\n    name: \"FSL\",\n    scopeName: \"source.fsl\"\n};\n\n\noop.inherits(FSLHighlightRules, TextHighlightRules);\n\nexports.FSLHighlightRules = FSLHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/fsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsl_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FSLHighlightRules = require(\"./fsl_highlight_rules\").FSLHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = FSLHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/fsl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-ftl.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/ftl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar FtlLangHighlightRules = function () {\n\n    var stringBuiltIns = \"\\\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|\"\n        + \"ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|\"\n        + \"left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|\"\n        + \"upper_case|word_list|xhtml|xml\";\n    var numberBuiltIns = \"c|round|floor|ceiling\";\n    var dateBuiltIns = \"iso_[a-z_]+\";\n    var seqBuiltIns = \"first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk\";\n    var hashBuiltIns = \"keys|values\";\n    var xmlBuiltIns = \"children|parent|root|ancestors|node_name|node_type|node_namespace\";\n    var expertBuiltIns = \"byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|\"\n        + \"eval|has_content|interpret|is_[a-z_]+|namespacenew\";\n    var allBuiltIns = stringBuiltIns + numberBuiltIns + dateBuiltIns + seqBuiltIns + hashBuiltIns\n        + xmlBuiltIns + expertBuiltIns;\n\n    var deprecatedBuiltIns = \"default|exists|if_exists|web_safe\";\n\n    var variables = \"data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|\"\n        + \"now|output_encoding|template_name|url_escaping_charset|vars|version\";\n\n    var operators = \"gt|gte|lt|lte|as|in|using\";\n\n    var reserved = \"true|false\";\n\n    var attributes = \"encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|\"\n        + \"url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|\"\n        + \"attributes\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant.character.entity\",\n            regex : /&[^;]+;/\n        }, {\n            token : \"support.function\",\n            regex : \"\\\\?(\"+allBuiltIns+\")\"\n        },  {\n            token : \"support.function.deprecated\",\n            regex : \"\\\\?(\"+deprecatedBuiltIns+\")\"\n        }, {\n            token : \"language.variable\",\n            regex : \"\\\\.(?:\"+variables+\")\"\n        }, {\n            token : \"constant.language\",\n            regex : \"\\\\b(\"+reserved+\")\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\b(?:\"+operators+\")\\\\b\"\n        }, {\n            token : \"entity.other.attribute-name\",\n            regex : attributes\n        }, {\n            token : \"string\", //\n            regex : /['\"]/,\n            next : \"qstring\"\n        }, {\n            token : function(value) {\n                if (value.match(\"^[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?$\")) {\n                    return \"constant.numeric\";\n                } else {\n                    return \"variable\";\n                }\n            },\n            regex : /[\\w.+\\-]+/\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|\\\\.|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }],\n\n        \"qstring\" : [{\n            token : \"constant.character.escape\",\n            regex : '\\\\\\\\[nrtvef\\\\\\\\\"$]'\n        }, {\n            token : \"string\",\n            regex : /['\"]/,\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        }]\n    };\n};\n\noop.inherits(FtlLangHighlightRules, TextHighlightRules);\n\nvar FtlHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var directives = \"assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|\"\n        + \"ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|\"\n        + \"setting|stop|switch|t|visit\";\n\n    var startRules = [\n        {\n            token : \"comment\",\n            regex : \"<#--\",\n            next : \"ftl-dcomment\"\n        }, {\n            token : \"string.interpolated\",\n            regex : \"\\\\${\",\n            push  : \"ftl-start\"\n        }, {\n            token : \"keyword.function\",\n            regex :  \"</?#(\"+directives+\")\",\n            push : \"ftl-start\"\n        }, {\n            token : \"keyword.other\",\n            regex : \"</?@[a-zA-Z\\\\.]+\",\n            push : \"ftl-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n           token : \"keyword\",\n            regex : \"/?>\",\n            next  : \"pop\"\n        }, {\n            token : \"string.interpolated\",\n            regex : \"}\",\n            next  : \"pop\"\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(FtlLangHighlightRules, \"ftl-\", endRules, [\"start\"]);\n\n    this.addRules({\n        \"ftl-dcomment\" : [{\n            token : \"comment\",\n            regex : \"-->\",\n            next : \"pop\"\n        }, {\n            defaultToken : \"comment\"\n        }]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(FtlHighlightRules, HtmlHighlightRules);\n\nexports.FtlHighlightRules = FtlHighlightRules;\n});\n\nace.define(\"ace/mode/ftl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ftl_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FtlHighlightRules = require(\"./ftl_highlight_rules\").FtlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = FtlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/ftl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-gcode.js",
    "content": "ace.define(\"ace/mode/gcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var GcodeHighlightRules = function() {\n\n        var keywords = (\n            \"IF|DO|WHILE|ENDWHILE|CALL|ENDIF|SUB|ENDSUB|GOTO|REPEAT|ENDREPEAT|CALL\"\n            );\n\n        var builtinConstants = (\n            \"PI\"\n            );\n\n        var builtinFunctions = (\n            \"ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN\"\n            );\n        var keywordMapper = this.createKeywordMapper({\n            \"support.function\": builtinFunctions,\n            \"keyword\": keywords,\n            \"constant.language\": builtinConstants\n        }, \"identifier\", true);\n\n        this.$rules = {\n            \"start\" : [ {\n                token : \"comment\",\n                regex : \"\\\\(.*\\\\)\"\n            }, {\n                token : \"comment\",           // block number\n                regex : \"([N])([0-9]+)\"\n            }, {\n                token : \"string\",           // \" string\n                regex : \"([G])([0-9]+\\\\.?[0-9]?)\"\n            }, {\n                token : \"string\",           // ' string\n                regex : \"([M])([0-9]+\\\\.?[0-9]?)\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"([-+]?([0-9]*\\\\.?[0-9]+\\\\.?))|(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\"\n            }, {\n                token : keywordMapper,\n                regex : \"[A-Z]\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"EQ|LT|GT|NE|GE|LE|OR|XOR\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[\\\\[]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\]]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            } ]\n        };\n    };\n\n    oop.inherits(GcodeHighlightRules, TextHighlightRules);\n\n    exports.GcodeHighlightRules = GcodeHighlightRules;\n});\n\nace.define(\"ace/mode/gcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gcode_highlight_rules\",\"ace/range\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var GcodeHighlightRules = require(\"./gcode_highlight_rules\").GcodeHighlightRules;\n    var Range = require(\"../range\").Range;\n\n    var Mode = function() {\n        this.HighlightRules = GcodeHighlightRules;\n        this.$behaviour = this.$defaultBehaviour;\n    };\n    oop.inherits(Mode, TextMode);\n\n    (function() {\n        this.$id = \"ace/mode/gcode\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-gherkin.js",
    "content": "ace.define(\"ace/mode/gherkin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar stringEscape =  \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\nvar GherkinHighlightRules = function() {\n    var languages = [{\n        name: \"en\",\n        labels: \"Feature|Background|Scenario(?: Outline)?|Examples\",\n        keywords: \"Given|When|Then|And|But\"\n    }];\n    \n    var labels = languages.map(function(l) {\n        return l.labels;\n    }).join(\"|\");\n    var keywords = languages.map(function(l) {\n        return l.keywords;\n    }).join(\"|\");\n    this.$rules = {\n        start : [{\n            token: \"constant.numeric\",\n            regex: \"(?:(?:[1-9]\\\\d*)|(?:0))\"\n        }, {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"keyword\",\n            regex : \"(?:\" + labels + \"):|(?:\" + keywords + \")\\\\b\"\n        }, {\n            token : \"keyword\",\n            regex : \"\\\\*\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\"',\n            next : \"qqstring\"\n        }, {\n            token : \"text\",\n            regex : \"^\\\\s*(?=@[\\\\w])\",\n            next : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : \"variable.parameter\",\n                regex : \"@[\\\\w]+\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"start\"\n            }]\n        }, {\n            token : \"comment\",\n            regex : \"<[^>]+>\"\n        }, {\n            token : \"comment\",\n            regex : \"\\\\|(?=.)\",\n            next : \"table-item\"\n        }, {\n            token : \"comment\",\n            regex : \"\\\\|$\",\n            next : \"start\"\n        }],\n        \"qqstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        }],\n        \"qqstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"table-item\" : [{\n            token : \"comment\",\n            regex : /$/,\n            next : \"start\"\n        }, {\n            token : \"comment\",\n            regex : /\\|/\n        }, {\n            token : \"string\",\n            regex : /\\\\./\n        }, {\n            defaultToken : \"string\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(GherkinHighlightRules, TextHighlightRules);\n\nexports.GherkinHighlightRules = GherkinHighlightRules;\n});\n\nace.define(\"ace/mode/gherkin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gherkin_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GherkinHighlightRules = require(\"./gherkin_highlight_rules\").GherkinHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = GherkinHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/gherkin\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var space2 = \"  \";\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        \n        console.log(state);\n        \n        if(line.match(\"[ ]*\\\\|\")) {\n            indent += \"| \";\n        }\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        \n\n        if (state == \"start\") {\n            if (line.match(\"Scenario:|Feature:|Scenario Outline:|Background:\")) {\n                indent += space2;\n            } else if(line.match(\"(Given|Then).+(:)$|Examples:\")) {\n                indent += space2;\n            } else if(line.match(\"\\\\*.+\")) {\n                indent += \"* \";\n            } \n        }\n        \n\n        return indent;\n    };\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-gitignore.js",
    "content": "ace.define(\"ace/mode/gitignore_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GitignoreHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /^\\s*#.*$/\n            }, {\n                token : \"keyword\", // negated patterns\n                regex : /^\\s*!.*$/\n            }\n        ]\n    };\n    \n    this.normalizeRules();\n};\n\nGitignoreHighlightRules.metaData = {\n    fileTypes: ['gitignore'],\n    name: 'Gitignore'\n};\n\noop.inherits(GitignoreHighlightRules, TextHighlightRules);\n\nexports.GitignoreHighlightRules = GitignoreHighlightRules;\n});\n\nace.define(\"ace/mode/gitignore\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gitignore_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GitignoreHighlightRules = require(\"./gitignore_highlight_rules\").GitignoreHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = GitignoreHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/gitignore\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-glsl.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/glsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\n\nvar glslHighlightRules = function() {\n\n    var keywords = (\n        \"attribute|const|uniform|varying|break|continue|do|for|while|\" +\n        \"if|else|in|out|inout|float|int|void|bool|true|false|\" +\n        \"lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|\" +\n        \"mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|\" +\n        \"samplerCube|struct\"\n    );\n\n    var buildinConstants = (\n        \"radians|degrees|sin|cos|tan|asin|acos|atan|pow|\" +\n        \"exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|\" +\n        \"min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|\" +\n        \"normalize|faceforward|reflect|refract|matrixCompMult|lessThan|\" +\n        \"lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|\" +\n        \"not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|\" +\n        \"texture2DProjLod|textureCube|textureCubeLod|\" +\n        \"gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|\" +\n        \"gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|\" +\n        \"gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|\" +\n        \"gl_DepthRangeParameters|gl_DepthRange|\" +\n        \"gl_Position|gl_PointSize|\" +\n        \"gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    this.$rules = new c_cppHighlightRules().$rules;\n    this.$rules.start.forEach(function(rule) {\n        if (typeof rule.token == \"function\")\n            rule.token = keywordMapper;\n    });\n};\n\noop.inherits(glslHighlightRules, c_cppHighlightRules);\n\nexports.glslHighlightRules = glslHighlightRules;\n});\n\nace.define(\"ace/mode/glsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/glsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar glslHighlightRules = require(\"./glsl_highlight_rules\").glslHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = glslHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, CMode);\n\n(function() {\n    this.$id = \"ace/mode/glsl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-gobstones.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/gobstones_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GobstonesHighlightRules = function() {\n\n    var keywords = (\n    \"program|procedure|function|interactive|if|then|else|switch|repeat|while|foreach|in|not|div|mod|Skip|return\"\n    );\n\n    var buildinConstants = (\n        \"False|True\"\n    );\n\n\n    var langClasses = (\n        \"Poner|Sacar|Mover|IrAlBorde|VaciarTablero|\" +\n        \"nroBolitas|hayBolitas|puedeMover|siguiente|previo|opuesto|minBool|maxBool|\" +\n        \"minDir|maxDir|minColor|maxColor\"\n    );\n\n    var supportType = (\n        \"Verde|Rojo|Azul|Negro|Norte|Sur|Este|Oeste\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses,\n        \"support.type\": supportType\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\",\n                regex : \"\\\\-\\\\-.*$\"\n            },\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:True|False)\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \":=|\\\\.\\\\.|,|;|\\\\|\\\\||\\\\/\\\\/|\\\\+|\\\\-|\\\\^|\\\\*|>|<|>=|=>|==|&&\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(GobstonesHighlightRules, TextHighlightRules);\n\nexports.GobstonesHighlightRules = GobstonesHighlightRules;\n});\n\nace.define(\"ace/mode/gobstones\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/gobstones_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar GobstonesHighlightRules = require(\"./gobstones_highlight_rules\").GobstonesHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = GobstonesHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/gobstones\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-golang.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/golang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    var oop = require(\"../lib/oop\");\n    var DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var GolangHighlightRules = function() {\n        var keywords = (\n            \"else|break|case|return|goto|if|const|select|\" +\n            \"continue|struct|default|switch|for|range|\" +\n            \"func|import|package|chan|defer|fallthrough|go|interface|map|range|\" +\n            \"select|type|var\"\n        );\n        var builtinTypes = (\n            \"string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|\" +\n            \"float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error\"\n        );\n        var builtinFunctions = (\n            \"new|close|cap|copy|panic|panicln|print|println|len|make|delete|real|recover|imag|append\"\n        );\n        var builtinConstants = (\"nil|true|false|iota\");\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": builtinConstants,\n            \"support.function\": builtinFunctions,\n            \"support.type\": builtinTypes\n        }, \"\");\n        \n        var stringEscapeRe = \"\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u{4}|U\\\\h{6}|[abfnrtv'\\\"\\\\\\\\])\".replace(/\\\\h/g, \"[a-fA-F\\\\d]\");\n\n        this.$rules = {\n            \"start\" : [\n                {\n                    token : \"comment\",\n                    regex : \"\\\\/\\\\/.*$\"\n                },\n                DocCommentHighlightRules.getStartRule(\"doc-start\"),\n                {\n                    token : \"comment.start\", // multi line comment\n                    regex : \"\\\\/\\\\*\",\n                    next : \"comment\"\n                }, {\n                    token : \"string\", // single line\n                    regex : /\"(?:[^\"\\\\]|\\\\.)*?\"/\n                }, {\n                    token : \"string\", // raw\n                    regex : '`',\n                    next : \"bqstring\"\n                }, {\n                    token : \"constant.numeric\", // rune\n                    regex : \"'(?:[^\\\\'\\uD800-\\uDBFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|\" + stringEscapeRe.replace('\"', '')  + \")'\"\n                }, {\n                    token : \"constant.numeric\", // hex\n                    regex : \"0[xX][0-9a-fA-F]+\\\\b\" \n                }, {\n                    token : \"constant.numeric\", // float\n                    regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n                }, {\n                    token : [\"keyword\", \"text\", \"entity.name.function\"],\n                    regex : \"(func)(\\\\s+)([a-zA-Z_$][a-zA-Z0-9_$]*)\\\\b\"\n                }, {\n                    token : function(val) {\n                        if (val[val.length - 1] == \"(\") {\n                            return [{\n                                type: keywordMapper(val.slice(0, -1)) || \"support.function\",\n                                value: val.slice(0, -1)\n                            }, {\n                                type: \"paren.lparen\",\n                                value: val.slice(-1)\n                            }];\n                        }\n                        \n                        return keywordMapper(val) || \"identifier\";\n                    },\n                    regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\\\\(?\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[[({]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\])}]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }\n            ],\n            \"comment\" : [\n                {\n                    token : \"comment.end\",\n                    regex : \"\\\\*\\\\/\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ],\n            \"bqstring\" : [\n                {\n                    token : \"string\",\n                    regex : '`',\n                    next : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        };\n\n        this.embedRules(DocCommentHighlightRules, \"doc-\",\n            [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    };\n    oop.inherits(GolangHighlightRules, TextHighlightRules);\n\n    exports.GolangHighlightRules = GolangHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/golang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/golang_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GolangHighlightRules = require(\"./golang_highlight_rules\").GolangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = GolangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };//end getNextLineIndent\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/golang\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-graphqlschema.js",
    "content": "ace.define(\"ace/mode/graphqlschema_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GraphQLSchemaHighlightRules = function() {\n\n    var keywords = (\n      \"type|interface|union|enum|schema|input|implements|extends|scalar\"\n    );\n\n    var dataTypes = (\n      \"Int|Float|String|ID|Boolean\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"storage.type\": dataTypes\n    }, \"identifier\");\n\n    this.$rules = {\n      \"start\" : [ {\n        token : \"comment\",\n        regex : \"#.*$\"\n      }, {\n        token : \"paren.lparen\",\n        regex : /[\\[({]/,\n        next  : \"start\"\n      }, {\n        token : \"paren.rparen\",\n        regex : /[\\])}]/\n      }, {\n        token : keywordMapper,\n        regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n      } ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(GraphQLSchemaHighlightRules, TextHighlightRules);\n\nexports.GraphQLSchemaHighlightRules = GraphQLSchemaHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/graphqlschema\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/graphqlschema_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GraphQLSchemaHighlightRules = require(\"./graphqlschema_highlight_rules\").GraphQLSchemaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = GraphQLSchemaHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/graphqlschema\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-groovy.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/groovy_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GroovyHighlightRules = function() {\n\n    var keywords = (\n        \"assert|with|abstract|continue|for|new|switch|\" +\n        \"assert|default|goto|package|synchronized|\" +\n        \"boolean|do|if|private|this|\" +\n        \"break|double|implements|protected|throw|\" +\n        \"byte|else|import|public|throws|\" +\n        \"case|enum|instanceof|return|transient|\" +\n        \"catch|extends|int|short|try|\" +\n        \"char|final|interface|static|void|\" +\n        \"class|finally|long|strictfp|volatile|\" +\n        \"def|float|native|super|while\"\n    );\n\n    var buildinConstants = (\n        \"null|Infinity|NaN|undefined\"\n    );\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"support.function\": langClasses,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\",\n                regex : '\"\"\"',\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : \"'''\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"\\\\?:|\\\\?\\\\.|\\\\*\\\\.|<=>|=~|==~|\\\\.@|\\\\*\\\\.@|\\\\.&|as|in|is|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:u[0-9A-Fa-f]{4}|.|$)/\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\$[\\w\\d]+/\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\$\\{[^\"\\}]+\\}?/\n            }, {\n                token : \"string\",\n                regex : '\"{3,5}',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+?'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:u[0-9A-Fa-f]{4}|.|$)/\n            }, {\n                token : \"string\",\n                regex : \"'{3,5}\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : \".+?\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(GroovyHighlightRules, TextHighlightRules);\n\nexports.GroovyHighlightRules = GroovyHighlightRules;\n});\n\nace.define(\"ace/mode/groovy\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/groovy_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar GroovyHighlightRules = require(\"./groovy_highlight_rules\").GroovyHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = GroovyHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/groovy\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-haml.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\nace.define(\"ace/mode/haml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar RubyExports = require(\"./ruby_highlight_rules\");\nvar RubyHighlightRules = RubyExports.RubyHighlightRules;\n\nvar HamlHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.block\", // multiline HTML comment\n                regex: /^\\/$/,\n                next: \"comment\"\n            },\n            {\n                token: \"comment.block\", // multiline HAML comment\n                regex: /^\\-#$/,\n                next: \"comment\"\n            },\n            {\n                token: \"comment.line\", // HTML comment\n                regex: /\\/\\s*.*/\n            },\n            {\n                token: \"comment.line\", // HAML comment\n                regex: /-#\\s*.*/\n            },\n            {\n                token: \"keyword.other.doctype\",\n                regex: \"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"\n            },\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            {\n                token: \"meta.tag.haml\",\n                regex: /(%[\\w:\\-]+)/\n            },\n            {\n                token: \"keyword.attribute-name.class.haml\",\n                regex: /\\.[\\w-]+/\n            },\n            {\n                token: \"keyword.attribute-name.id.haml\",\n                regex: /#[\\w-]+/,\n                next: \"element_class\"\n            },\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            RubyExports.constantOtherSymbol,\n            {\n                token: \"text\",\n                regex: /=|-|~/,\n                next: \"embedded_ruby\"\n            }\n        ],\n        \"element_class\": [\n            {\n                token: \"keyword.attribute-name.class.haml\",\n                regex: /\\.[\\w-]+/\n            },\n            {\n                token: \"punctuation.section\",\n                regex: /\\{/,\n                next: \"element_attributes\"\n            },\n            RubyExports.constantOtherSymbol,\n            {\n                token: \"empty\",\n                regex: \"$|(?!\\\\.|#|\\\\{|\\\\[|=|-|~|\\\\/])\",\n                next: \"start\"\n            }\n        ],\n        \"element_attributes\": [\n            RubyExports.constantOtherSymbol,\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            {\n                token: \"punctuation.section\",\n                regex: /$|\\}/,\n                next: \"start\"\n            }\n        ],\n        \"embedded_ruby\": [\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            RubyExports.instanceVariable,\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n            {\n                token : new RubyHighlightRules().getKeywords(),\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token : [\"keyword\", \"text\", \"text\"],\n                regex : \"(?:do|\\\\{)(?: \\\\|[^|]+\\\\|)?$\",\n                next  : \"start\"\n            },\n            {\n                token : [\"text\"],\n                regex : \"^$\",\n                next  : \"start\"\n            },\n            {\n                token : [\"text\"],\n                regex : \"^(?!.*\\\\|\\\\s*$)\",\n                next  : \"start\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.block\",\n                regex: /^$/,\n                next: \"start\"\n            },\n            {\n                token: \"comment.block\", // comment spanning the whole line\n                regex: /\\s+.*/\n            }\n        ]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(HamlHighlightRules, HtmlHighlightRules);\n\nexports.HamlHighlightRules = HamlHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/haml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haml_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HamlHighlightRules = require(\"./haml_highlight_rules\").HamlHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HamlHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    \n    this.$id = \"ace/mode/haml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-handlebars.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/handlebars_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nfunction pop2(currentState, stack) {\n    stack.splice(0, 3);\n    return stack.shift() || \"start\";\n}\nvar HandlebarsHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var hbs = {\n        regex : \"(?={{)\",\n        push : \"handlebars\"\n    };\n    for (var key in this.$rules) {\n        this.$rules[key].unshift(hbs);\n    }\n    this.$rules.handlebars = [{\n        token : \"comment.start\",\n        regex : \"{{!--\",\n        push : [{\n            token : \"comment.end\",\n            regex : \"--}}\",\n            next : pop2\n        }, {\n            defaultToken : \"comment\"\n        }]\n    }, {\n        token : \"comment.start\",\n        regex : \"{{!\",\n        push : [{\n            token : \"comment.end\",\n            regex : \"}}\",\n            next : pop2\n        }, {\n            defaultToken : \"comment\"\n        }]\n    }, {\n        token : \"support.function\", // unescaped variable\n        regex : \"{{{\",\n        push : [{\n            token : \"support.function\",\n            regex : \"}}}\",\n            next : pop2\n        }, {\n            token : \"variable.parameter\",\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n        }]\n    }, {\n        token : \"storage.type.start\", // begin section\n        regex : \"{{[#\\\\^/&]?\",\n        push : [{\n            token : \"storage.type.end\",\n            regex : \"}}\",\n            next : pop2\n        }, {\n            token : \"variable.parameter\",\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n        }]\n    }];\n\n    this.normalizeRules();\n};\n\noop.inherits(HandlebarsHighlightRules, HtmlHighlightRules);\n\nexports.HandlebarsHighlightRules = HandlebarsHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour/xml\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\n\nvar HtmlBehaviour = function () {\n\n    XmlBehaviour.call(this);\n\n};\n\noop.inherits(HtmlBehaviour, XmlBehaviour);\n\nexports.HtmlBehaviour = HtmlBehaviour;\n});\n\nace.define(\"ace/mode/handlebars\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/handlebars_highlight_rules\",\"ace/mode/behaviour/html\",\"ace/mode/folding/html\"], function(require, exports, module) {\n  \"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar HandlebarsHighlightRules = require(\"./handlebars_highlight_rules\").HandlebarsHighlightRules;\nvar HtmlBehaviour = require(\"./behaviour/html\").HtmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = HandlebarsHighlightRules;\n    this.$behaviour = new HtmlBehaviour();\n};\n\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.blockComment = {start: \"{{!--\", end: \"--}}\"};\n    this.$id = \"ace/mode/handlebars\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-haskell.js",
    "content": "ace.define(\"ace/mode/haskell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar HaskellHighlightRules = function() {\n\n    this.$rules = { start:\n       [ { token:\n            [ 'punctuation.definition.entity.haskell',\n              'keyword.operator.function.infix.haskell',\n              'punctuation.definition.entity.haskell' ],\n           regex: '(`)([a-zA-Z_\\']*?)(`)',\n           comment: 'In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).' },\n         { token: 'constant.language.unit.haskell', regex: '\\\\(\\\\)' },\n         { token: 'constant.language.empty-list.haskell',\n           regex: '\\\\[\\\\]' },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\b(module|signature)\\\\b',\n           push:\n            [ { token: 'keyword.other.haskell', regex: '\\\\bwhere\\\\b', next: 'pop' },\n              { include: '#module_name' },\n              { include: '#module_exports' },\n              { token: 'invalid', regex: '[a-z]+' },\n              { defaultToken: 'meta.declaration.module.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\bclass\\\\b',\n           push:\n            [ { token: 'keyword.other.haskell',\n                regex: '\\\\bwhere\\\\b',\n                next: 'pop' },\n              { token: 'support.class.prelude.haskell',\n                regex: '\\\\b(?:Monad|Functor|Eq|Ord|Read|Show|Num|(?:Frac|Ra)tional|Enum|Bounded|Real(?:Frac|Float)?|Integral|Floating)\\\\b' },\n              { token: 'entity.other.inherited-class.haskell',\n                regex: '[A-Z][A-Za-z_\\']*' },\n              { token: 'variable.other.generic-type.haskell',\n                regex: '\\\\b[a-z][a-zA-Z0-9_\\']*\\\\b' },\n              { defaultToken: 'meta.declaration.class.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\binstance\\\\b',\n           push:\n            [ { token: 'keyword.other.haskell',\n                regex: '\\\\bwhere\\\\b|$',\n                next: 'pop' },\n              { include: '#type_signature' },\n              { defaultToken: 'meta.declaration.instance.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: 'import',\n           push:\n            [ { token: 'meta.import.haskell', regex: '$|;|^', next: 'pop' },\n              { token: 'keyword.other.haskell', regex: 'qualified|as|hiding' },\n              { include: '#module_name' },\n              { include: '#module_exports' },\n              { defaultToken: 'meta.import.haskell' } ] },\n         { token: [ 'keyword.other.haskell', 'meta.deriving.haskell' ],\n           regex: '(deriving)(\\\\s*\\\\()',\n           push:\n            [ { token: 'meta.deriving.haskell', regex: '\\\\)', next: 'pop' },\n              { token: 'entity.other.inherited-class.haskell',\n                regex: '\\\\b[A-Z][a-zA-Z_\\']*' },\n              { defaultToken: 'meta.deriving.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\b(?:deriving|where|data|type|case|of|let|in|newtype|default)\\\\b' },\n         { token: 'keyword.operator.haskell', regex: '\\\\binfix[lr]?\\\\b' },\n         { token: 'keyword.control.haskell',\n           regex: '\\\\b(?:do|if|then|else)\\\\b' },\n         { token: 'constant.numeric.float.haskell',\n           regex: '\\\\b(?:[0-9]+\\\\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\\\b',\n           comment: 'Floats are always decimal' },\n         { token: 'constant.numeric.haskell',\n           regex: '\\\\b(?:[0-9]+|0(?:[xX][0-9a-fA-F]+|[oO][0-7]+))\\\\b' },\n         { token:\n            [ 'meta.preprocessor.c',\n              'punctuation.definition.preprocessor.c',\n              'meta.preprocessor.c' ],\n           regex: '^(\\\\s*)(#)(\\\\s*\\\\w+)',\n           comment: 'In addition to Haskell\\'s \"native\" syntax, GHC permits the C preprocessor to be run on a source file.' },\n         { include: '#pragma' },\n         { token: 'punctuation.definition.string.begin.haskell',\n           regex: '\"',\n           push:\n            [ { token: 'punctuation.definition.string.end.haskell',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.haskell',\n                regex: '\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\"\\'\\\\&])' },\n              { token: 'constant.character.escape.octal.haskell',\n                regex: '\\\\\\\\o[0-7]+|\\\\\\\\x[0-9A-Fa-f]+|\\\\\\\\[0-9]+' },\n              { token: 'constant.character.escape.control.haskell',\n                regex: '\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]' },\n              { defaultToken: 'string.quoted.double.haskell' } ] },\n         { token:\n            [ 'punctuation.definition.string.begin.haskell',\n              'string.quoted.single.haskell',\n              'constant.character.escape.haskell',\n              'constant.character.escape.octal.haskell',\n              'constant.character.escape.hexadecimal.haskell',\n              'constant.character.escape.control.haskell',\n              'punctuation.definition.string.end.haskell' ],\n           regex: '(\\')(?:([\\\\ -\\\\[\\\\]-~])|(\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\"\\'\\\\&]))|(\\\\\\\\o[0-7]+)|(\\\\\\\\x[0-9A-Fa-f]+)|(\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]))(\\')' },\n         { token:\n            [ 'meta.function.type-declaration.haskell',\n              'entity.name.function.haskell',\n              'meta.function.type-declaration.haskell',\n              'keyword.other.double-colon.haskell' ],\n           regex: '^(\\\\s*)([a-z_][a-zA-Z0-9_\\']*|\\\\([|!%$+\\\\-.,=</>]+\\\\))(\\\\s*)(::)',\n           push:\n            [ { token: 'meta.function.type-declaration.haskell',\n                regex: '$',\n                next: 'pop' },\n              { include: '#type_signature' },\n              { defaultToken: 'meta.function.type-declaration.haskell' } ] },\n         { token: 'support.constant.haskell',\n           regex: '\\\\b(?:Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\\\(\\\\)|\\\\[\\\\])\\\\b' },\n         { token: 'constant.other.haskell', regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n         { include: '#comments' },\n         { token: 'support.function.prelude.haskell',\n           regex: '\\\\b(?:abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\\\b' },\n         { include: '#infix_op' },\n         { token: 'keyword.operator.haskell',\n           regex: '[|!%$?~+:\\\\-.=</>\\\\\\\\]+',\n           comment: 'In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.' },\n         { token: 'punctuation.separator.comma.haskell', regex: ',' } ],\n      '#block_comment':\n       [ { token: 'punctuation.definition.comment.haskell',\n           regex: '\\\\{-(?!#)',\n           push:\n            [ { include: '#block_comment' },\n              { token: 'punctuation.definition.comment.haskell',\n                regex: '-\\\\}',\n                next: 'pop' },\n              { defaultToken: 'comment.block.haskell' } ] } ],\n      '#comments':\n       [ { token: 'punctuation.definition.comment.haskell',\n           regex: '--.*',\n           push_:\n            [ { token: 'comment.line.double-dash.haskell',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-dash.haskell' } ] },\n         { include: '#block_comment' } ],\n      '#infix_op':\n       [ { token: 'entity.name.function.infix.haskell',\n           regex: '\\\\([|!%$+:\\\\-.=</>]+\\\\)|\\\\(,+\\\\)' } ],\n      '#module_exports':\n       [ { token: 'meta.declaration.exports.haskell',\n           regex: '\\\\(',\n           push:\n            [ { token: 'meta.declaration.exports.haskell.end',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: 'entity.name.function.haskell',\n                regex: '\\\\b[a-z][a-zA-Z_\\']*' },\n              { token: 'storage.type.haskell', regex: '\\\\b[A-Z][A-Za-z_\\']*' },\n              { token: 'punctuation.separator.comma.haskell', regex: ',' },\n              { include: '#infix_op' },\n              { token: 'meta.other.unknown.haskell',\n                regex: '\\\\(.*?\\\\)',\n                comment: 'So named because I don\\'t know what to call this.' },\n              { defaultToken: 'meta.declaration.exports.haskell.end' } ] } ],\n      '#module_name':\n       [ { token: 'support.other.module.haskell',\n           regex: '[A-Z][A-Za-z._\\']*' } ],\n      '#pragma':\n       [ { token: 'meta.preprocessor.haskell',\n           regex: '\\\\{-#',\n           push:\n            [ { token: 'meta.preprocessor.haskell',\n                regex: '#-\\\\}',\n                next: 'pop' },\n              { token: 'keyword.other.preprocessor.haskell',\n                regex: '\\\\b(?:LANGUAGE|UNPACK|INLINE)\\\\b' },\n              { defaultToken: 'meta.preprocessor.haskell' } ] } ],\n      '#type_signature':\n       [ { token:\n            [ 'meta.class-constraint.haskell',\n              'entity.other.inherited-class.haskell',\n              'meta.class-constraint.haskell',\n              'variable.other.generic-type.haskell',\n              'meta.class-constraint.haskell',\n              'keyword.other.big-arrow.haskell' ],\n           regex: '(\\\\(\\\\s*)([A-Z][A-Za-z]*)(\\\\s+)([a-z][A-Za-z_\\']*)(\\\\)\\\\s*)(=>)' },\n         { include: '#pragma' },\n         { token: 'keyword.other.arrow.haskell', regex: '->' },\n         { token: 'keyword.other.big-arrow.haskell', regex: '=>' },\n         { token: 'support.type.prelude.haskell',\n           regex: '\\\\b(?:Int(?:eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(?:Error)?)\\\\b' },\n         { token: 'variable.other.generic-type.haskell',\n           regex: '\\\\b[a-z][a-zA-Z0-9_\\']*\\\\b' },\n         { token: 'storage.type.haskell',\n           regex: '\\\\b[A-Z][a-zA-Z0-9_\\']*\\\\b' },\n         { token: 'support.constant.unit.haskell', regex: '\\\\(\\\\)' },\n         { include: '#comments' } ] };\n\n    this.normalizeRules();\n};\n\nHaskellHighlightRules.metaData = { fileTypes: [ 'hs' ],\n      keyEquivalent: '^~H',\n      name: 'Haskell',\n      scopeName: 'source.haskell' };\n\n\noop.inherits(HaskellHighlightRules, TextHighlightRules);\n\nexports.HaskellHighlightRules = HaskellHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/haskell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HaskellHighlightRules = require(\"./haskell_highlight_rules\").HaskellHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HaskellHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/haskell\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-haskell_cabal.js",
    "content": "ace.define(\"ace/mode/haskell_cabal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CabalHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"^\\\\s*--.*$\"\n            }, {\n                token: [\"keyword\"],\n                regex: /^(\\s*\\w.*?)(:(?:\\s+|$))/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[\\d_]+(?:(?:[\\.\\d_]*)?)/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n            }, {\n                token : \"markup.heading\",\n                regex : /^(\\w.*)$/\n            }\n        ]};\n\n};\n\noop.inherits(CabalHighlightRules, TextHighlightRules);\n\nexports.CabalHighlightRules = CabalHighlightRules;\n});\n\nace.define(\"ace/mode/folding/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n  this.isHeading = function (session,row) {\n      var heading = \"markup.heading\";\n      var token = session.getTokens(row)[0];\n      return row==0 || (token && token.type.lastIndexOf(heading, 0) === 0);\n  };\n\n  this.getFoldWidget = function(session, foldStyle, row) {\n      if (this.isHeading(session,row)){\n        return \"start\";\n      } else if (foldStyle === \"markbeginend\" && !(/^\\s*$/.test(session.getLine(row)))){\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n          if (!(/^\\s*$/.test(session.getLine(row)))){\n              break;\n          }\n        }\n        if (row==maxRow || this.isHeading(session,row)){\n          return \"end\";\n        }\n      }\n      return \"\";\n  };\n\n\n  this.getFoldWidgetRange = function(session, foldStyle, row) {\n      var line = session.getLine(row);\n      var startColumn = line.length;\n      var maxRow = session.getLength();\n      var startRow = row;\n      var endRow = row;\n      if (this.isHeading(session,row)) {\n          while (++row < maxRow) {\n              if (this.isHeading(session,row)){\n                row--;\n                break;\n              }\n          }\n\n          endRow = row;\n          if (endRow > startRow) {\n              while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                  endRow--;\n          }\n\n          if (endRow > startRow) {\n              var endColumn = session.getLine(endRow).length;\n              return new Range(startRow, startColumn, endRow, endColumn);\n          }\n      } else if (this.getFoldWidget(session, foldStyle, row)===\"end\"){\n        var endRow = row;\n        var endColumn = session.getLine(endRow).length;\n        while (--row>=0){\n          if (this.isHeading(session,row)){\n            break;\n          }\n        }\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        return new Range(row, startColumn, endRow, endColumn);\n      }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_cabal_highlight_rules\",\"ace/mode/folding/haskell_cabal\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CabalHighlightRules = require(\"./haskell_cabal_highlight_rules\").CabalHighlightRules;\nvar FoldMode = require(\"./folding/haskell_cabal\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CabalHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/haskell_cabal\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-haxe.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/haxe_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar HaxeHighlightRules = function() {\n\n    var keywords = (\n        \"break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std\"\n    );\n\n    var buildinConstants = (\n        \"null|true|false\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({<]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}>]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(HaxeHighlightRules, TextHighlightRules);\n\nexports.HaxeHighlightRules = HaxeHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/haxe\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haxe_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HaxeHighlightRules = require(\"./haxe_highlight_rules\").HaxeHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HaxeHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/haxe\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-hjson.js",
    "content": "ace.define(\"ace/mode/hjson_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar HjsonHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            include: \"#rootObject\"\n        }, {\n            include: \"#value\"\n        }],\n        \"#array\": [{\n            token: \"paren.lparen\",\n            regex: /\\[/,\n            push: [{\n                token: \"paren.rparen\",\n                regex: /\\]/,\n                next: \"pop\"\n            }, {\n                include: \"#value\"\n            }, {\n                include: \"#comments\"\n            }, {\n                token: \"text\",\n                regex: /,|$/\n            }, {\n                token: \"invalid.illegal\",\n                regex: /[^\\s\\]]/\n            }, {\n                defaultToken: \"array\"\n            }]\n        }],\n        \"#comments\": [{\n            token: [\n                \"comment.punctuation\",\n                \"comment.line\"\n            ],\n            regex: /(#)(.*$)/\n        }, {\n            token: \"comment.punctuation\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"comment.punctuation\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block\"\n            }]\n        }, {\n            token: [\n                \"comment.punctuation\",\n                \"comment.line\"\n            ],\n            regex: /(\\/\\/)(.*$)/\n        }],\n        \"#constant\": [{\n            token: \"constant\",\n            regex: /\\b(?:true|false|null)\\b/\n        }],\n        \"#keyname\": [{\n            token: \"keyword\",\n            regex: /(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*(?=:)/\n        }],\n        \"#mstring\": [{\n            token: \"string\",\n            regex: /'''/,\n            push: [{\n                token: \"string\",\n                regex: /'''/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        \"#number\": [{\n            token: \"constant.numeric\",\n            regex: /-?(?:0|[1-9]\\d*)(?:(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)?/,\n            comment: \"handles integer and decimal numbers\"\n        }],\n        \"#object\": [{\n            token: \"paren.lparen\",\n            regex: /\\{/,\n            push: [{\n                token: \"paren.rparen\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                include: \"#keyname\"\n            }, {\n                include: \"#value\"\n            }, {\n                token: \"text\",\n                regex: /:/\n            }, {\n                token: \"text\",\n                regex: /,/\n            }, {\n                defaultToken: \"paren\"\n            }]\n        }],\n        \"#rootObject\": [{\n            token: \"paren\",\n            regex: /(?=\\s*(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*:)/,\n            push: [{\n                token: \"paren.rparen\",\n                regex: /---none---/,\n                next: \"pop\"\n            }, {\n                include: \"#keyname\"\n            }, {\n                include: \"#value\"\n            }, {\n                token: \"text\",\n                regex: /:/\n            }, {\n                token: \"text\",\n                regex: /,/\n            }, {\n                defaultToken: \"paren\"\n            }]\n        }],\n        \"#string\": [{\n            token: \"string\",\n            regex: /\"/,\n            push: [{\n                token: \"string\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/\n            }, {\n                token: \"invalid.illegal\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        \"#ustring\": [{\n            token: \"string\",\n            regex: /\\b[^:,0-9\\-\\{\\[\\}\\]\\s].*$/\n        }],\n        \"#value\": [{\n            include: \"#constant\"\n        }, {\n            include: \"#number\"\n        }, {\n            include: \"#string\"\n        }, {\n            include: \"#array\"\n        }, {\n            include: \"#object\"\n        }, {\n            include: \"#comments\"\n        }, {\n            include: \"#mstring\"\n        }, {\n            include: \"#ustring\"\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nHjsonHighlightRules.metaData = {\n    fileTypes: [\"hjson\"],\n    foldingStartMarker: \"(?x:     # turn on extended mode\\n              ^    # a line beginning with\\n              \\\\s*    # some optional space\\n              [{\\\\[]  # the start of an object or array\\n              (?!    # but not followed by\\n              .*   # whatever\\n              [}\\\\]]  # and the close of an object or array\\n              ,?   # an optional comma\\n              \\\\s*  # some optional space\\n              $    # at the end of the line\\n              )\\n              |    # ...or...\\n              [{\\\\[]  # the start of an object or array\\n              \\\\s*    # some optional space\\n              $    # at the end of the line\\n            )\",\n    foldingStopMarker: \"(?x:   # turn on extended mode\\n             ^    # a line beginning with\\n             \\\\s*  # some optional space\\n             [}\\\\]]  # and the close of an object or array\\n             )\",\n    keyEquivalent: \"^~J\",\n    name: \"Hjson\",\n    scopeName: \"source.hjson\"\n};\n\n\noop.inherits(HjsonHighlightRules, TextHighlightRules);\n\nexports.HjsonHighlightRules = HjsonHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/hjson\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/hjson_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HjsonHighlightRules = require(\"./hjson_highlight_rules\").HjsonHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HjsonHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/hjson\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-html.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-html_elixir.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ElixirHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: \n            [ 'meta.module.elixir',\n              'keyword.control.module.elixir',\n              'meta.module.elixir',\n              'entity.name.type.module.elixir' ],\n           regex: '^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.false',\n           regex: '@(?:module|type)?doc false',\n           comment: '@doc false is treated as documentation' },\n         { token: 'comment.documentation.string',\n           regex: '@(?:module|type)?doc \"',\n           push: \n            [ { token: 'comment.documentation.string',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.string' } ],\n           comment: '@doc with string is treated as documentation' },\n         { token: 'keyword.control.elixir',\n           regex: '\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])' },\n         { token: 'keyword.operator.elixir',\n           regex: '\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           comment: ' as above, just doesn\\'t need a \\'end\\' and does a logic operation' },\n         { token: 'constant.language.elixir',\n           regex: '\\\\b(?:nil|true|false)\\\\b(?![?!])' },\n         { token: 'variable.language.elixir',\n           regex: '\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.readwrite.module.elixir' ],\n           regex: '(@)([a-zA-Z_]\\\\w*)' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.anonymous.elixir' ],\n           regex: '(&)(\\\\d*)' },\n         { token: 'variable.other.constant.elixir',\n           regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\\'',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.single-quoted.elixir' } ] },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\"',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.double-quoted.elixir' } ] },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\\'\\'\\')',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\\'\\'\\')',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' } ],\n           comment: 'Single-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.elixir' } ],\n           comment: 'single quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.elixir' } ],\n           comment: 'double quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[a-z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[A-Z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'],\n           regex: '(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)',\n           comment: 'symbols' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: '(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)',\n           comment: 'symbols' },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(#)(.*)' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           comment: '\\n\\t\\t\\tmatches questionmark-letters.\\n\\n\\t\\t\\texamples (1st alternation = hex):\\n\\t\\t\\t?\\\\x1     ?\\\\x61\\n\\n\\t\\t\\texamples (2rd alternation = escaped):\\n\\t\\t\\t?\\\\n      ?\\\\b\\n\\n\\t\\t\\texamples (3rd alternation = normal):\\n\\t\\t\\t?a       ?A       ?0 \\n\\t\\t\\t?*       ?\"       ?( \\n\\t\\t\\t?.       ?#\\n\\t\\t\\t\\n\\t\\t\\tthe negative lookbehind prevents against matching\\n\\t\\t\\tp(42.tainted?)\\n\\t\\t\\t' },\n         { token: 'keyword.operator.assignment.augmented.elixir',\n           regex: '\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=' },\n         { token: 'keyword.operator.comparison.elixir',\n           regex: '===?|!==?|<=?|>=?' },\n         { token: 'keyword.operator.bitwise.elixir',\n           regex: '\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}' },\n         { token: 'keyword.operator.logical.elixir',\n           regex: '!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b',\n           originalRegex: '(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b' },\n         { token: 'keyword.operator.arithmetic.elixir',\n           regex: '\\\\*|\\\\+|\\\\-|/' },\n         { token: 'keyword.operator.other.elixir',\n           regex: '\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>' },\n         { token: 'keyword.operator.assignment.elixir', regex: '=' },\n         { token: 'punctuation.separator.other.elixir', regex: ':' },\n         { token: 'punctuation.separator.statement.elixir',\n           regex: '\\\\;' },\n         { token: 'punctuation.separator.object.elixir', regex: ',' },\n         { token: 'punctuation.separator.method.elixir', regex: '\\\\.' },\n         { token: 'punctuation.section.scope.elixir', regex: '\\\\{|\\\\}' },\n         { token: 'punctuation.section.array.elixir', regex: '\\\\[|\\\\]' },\n         { token: 'punctuation.section.function.elixir',\n           regex: '\\\\(|\\\\)' } ],\n      '#escaped_char': \n       [ { token: 'constant.character.escape.elixir',\n           regex: '\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)' } ],\n      '#interpolated_elixir': \n       [ { token: \n            [ 'source.elixir.embedded.source',\n              'source.elixir.embedded.source.empty' ],\n           regex: '(#\\\\{)(\\\\})' },\n         { todo: \n            { token: 'punctuation.section.embedded.elixir',\n              regex: '#\\\\{',\n              push: \n               [ { token: 'punctuation.section.embedded.elixir',\n                   regex: '\\\\}',\n                   next: 'pop' },\n                 { include: '#nest_curly_and_self' },\n                 { include: '$self' },\n                 { defaultToken: 'source.elixir.embedded.source' } ] } } ],\n      '#nest_curly_and_self': \n       [ { token: 'punctuation.section.scope.elixir',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.section.scope.elixir',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#nest_curly_and_self' } ] },\n         { include: '$self' } ],\n      '#regex_sub': \n       [ { include: '#interpolated_elixir' },\n         { include: '#escaped_char' },\n         { token: \n            [ 'punctuation.definition.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'punctuation.definition.arbitrary-repitition.elixir' ],\n           regex: '(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})' },\n         { token: 'punctuation.definition.character-class.elixir',\n           regex: '\\\\[(?:\\\\^?\\\\])?',\n           push: \n            [ { token: 'punctuation.definition.character-class.elixir',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.regexp.character-class.elixir' } ] },\n         { token: 'punctuation.definition.group.elixir',\n           regex: '\\\\(',\n           push: \n            [ { token: 'punctuation.definition.group.elixir',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#regex_sub' },\n              { defaultToken: 'string.regexp.group.elixir' } ] },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)',\n           originalRegex: '(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$',\n           comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' } ] };\n    \n    this.normalizeRules();\n};\n\nElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.',\n      fileTypes: [ 'ex', 'exs' ],\n      firstLineMatch: '^#!/.*\\\\belixir',\n      foldingStartMarker: '(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$',\n      foldingStopMarker: '^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)',\n      keyEquivalent: '^~E',\n      name: 'Elixir',\n      scopeName: 'source.elixir' };\n\n\noop.inherits(ElixirHighlightRules, TextHighlightRules);\n\nexports.ElixirHighlightRules = ElixirHighlightRules;\n});\n\nace.define(\"ace/mode/html_elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/elixir_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n    var ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\n\n    var HtmlElixirHighlightRules = function() {\n        HtmlHighlightRules.call(this);\n\n        var startRules = [\n            {\n                regex: \"<%%|%%>\",\n                token: \"constant.language.escape\"\n            }, {\n                token : \"comment.start.eex\",\n                regex : \"<%#\",\n                push  : [{\n                    token : \"comment.end.eex\",\n                    regex: \"%>\",\n                    next: \"pop\",\n                    defaultToken:\"comment\"\n                }]\n            }, {\n                token : \"support.elixir_tag\",\n                regex : \"<%+(?!>)[-=]?\",\n                push  : \"elixir-start\"\n            }\n        ];\n\n        var endRules = [\n            {\n                token : \"support.elixir_tag\",\n                regex : \"%>\",\n                next  : \"pop\"\n            }, {\n                token: \"comment\",\n                regex: \"#(?:[^%]|%[^>])*\"\n            }\n        ];\n\n        for (var key in this.$rules)\n            this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n        this.embedRules(ElixirHighlightRules, \"elixir-\", endRules, [\"start\"]);\n\n        this.normalizeRules();\n    };\n\n\n    oop.inherits(HtmlElixirHighlightRules, HtmlHighlightRules);\n\n    exports.HtmlElixirHighlightRules = HtmlElixirHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ElixirHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/elixir\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/html_elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_elixir_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/elixir\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlElixirHighlightRules = require(\"./html_elixir_highlight_rules\").HtmlElixirHighlightRules;\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar ElixirMode = require(\"./elixir\").Mode;\n\nvar Mode = function() {\n    HtmlMode.call(this);   \n    this.HighlightRules = HtmlElixirHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"elixir-\": ElixirMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.$id = \"ace/mode/html_elixir\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-html_ruby.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\nace.define(\"ace/mode/html_ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n    var RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\n\n    var HtmlRubyHighlightRules = function() {\n        HtmlHighlightRules.call(this);\n\n        var startRules = [\n            {\n                regex: \"<%%|%%>\",\n                token: \"constant.language.escape\"\n            }, {\n                token : \"comment.start.erb\",\n                regex : \"<%#\",\n                push  : [{\n                    token : \"comment.end.erb\",\n                    regex: \"%>\",\n                    next: \"pop\",\n                    defaultToken:\"comment\"\n                }]\n            }, {\n                token : \"support.ruby_tag\",\n                regex : \"<%+(?!>)[-=]?\",\n                push  : \"ruby-start\"\n            }\n        ];\n\n        var endRules = [\n            {\n                token : \"support.ruby_tag\",\n                regex : \"%>\",\n                next  : \"pop\"\n            }, {\n                token: \"comment\",\n                regex: \"#(?:[^%]|%[^>])*\"\n            }\n        ];\n\n        for (var key in this.$rules)\n            this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n        this.embedRules(RubyHighlightRules, \"ruby-\", endRules, [\"start\"]);\n\n        this.normalizeRules();\n    };\n\n\n    oop.inherits(HtmlRubyHighlightRules, HtmlHighlightRules);\n\n    exports.HtmlRubyHighlightRules = HtmlRubyHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length-tab.length, row, indent.length));\n        }\n    };\n\n    this.$id = \"ace/mode/ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/html_ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_ruby_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlRubyHighlightRules = require(\"./html_ruby_highlight_rules\").HtmlRubyHighlightRules;\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar RubyMode = require(\"./ruby\").Mode;\n\nvar Mode = function() {\n    HtmlMode.call(this);   \n    this.HighlightRules = HtmlRubyHighlightRules;    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"ruby-\": RubyMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.$id = \"ace/mode/html_ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-ini.js",
    "content": "ace.define(\"ace/mode/ini_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar escapeRe = \"\\\\\\\\(?:[\\\\\\\\0abtrn;#=:]|x[a-fA-F\\\\d]{4})\";\n\nvar IniHighlightRules = function() {\n    this.$rules = {\n        start: [{\n            token: 'punctuation.definition.comment.ini',\n            regex: '#.*',\n            push_: [{\n                token: 'comment.line.number-sign.ini',\n                regex: '$|^',\n                next: 'pop'\n            }, {\n                defaultToken: 'comment.line.number-sign.ini'\n            }]\n        }, {\n            token: 'punctuation.definition.comment.ini',\n            regex: ';.*',\n            push_: [{\n                token: 'comment.line.semicolon.ini',\n                regex: '$|^',\n                next: 'pop'\n            }, {\n                defaultToken: 'comment.line.semicolon.ini'\n            }]\n        }, {\n            token: ['keyword.other.definition.ini', 'text', 'punctuation.separator.key-value.ini'],\n            regex: '\\\\b([a-zA-Z0-9_.-]+)\\\\b(\\\\s*)(=)'\n        }, {\n            token: ['punctuation.definition.entity.ini', 'constant.section.group-title.ini', 'punctuation.definition.entity.ini'],\n            regex: '^(\\\\[)(.*?)(\\\\])'\n        }, {\n            token: 'punctuation.definition.string.begin.ini',\n            regex: \"'\",\n            push: [{\n                token: 'punctuation.definition.string.end.ini',\n                regex: \"'\",\n                next: 'pop'\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapeRe\n            }, {\n                defaultToken: 'string.quoted.single.ini'\n            }]\n        }, {\n            token: 'punctuation.definition.string.begin.ini',\n            regex: '\"',\n            push: [{\n                token: \"constant.language.escape\",\n                regex: escapeRe\n            }, {\n                token: 'punctuation.definition.string.end.ini',\n                regex: '\"',\n                next: 'pop'\n            }, {\n                defaultToken: 'string.quoted.double.ini'\n            }]\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nIniHighlightRules.metaData = {\n    fileTypes: ['ini', 'conf'],\n    keyEquivalent: '^~I',\n    name: 'Ini',\n    scopeName: 'source.ini'\n};\n\n\noop.inherits(IniHighlightRules, TextHighlightRules);\n\nexports.IniHighlightRules = IniHighlightRules;\n});\n\nace.define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var re = this.foldingStartMarker;\n        var line = session.getLine(row);\n        \n        var m = line.match(re);\n        \n        if (!m) return;\n        \n        var startName = m[1] + \".\";\n        \n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            m = line.match(re);\n            if (m && m[1].lastIndexOf(startName, 0) !== 0)\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ini_highlight_rules\",\"ace/mode/folding/ini\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar IniHighlightRules = require(\"./ini_highlight_rules\").IniHighlightRules;\nvar FoldMode = require(\"./folding/ini\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = IniHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \";\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/ini\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-io.js",
    "content": "ace.define(\"ace/mode/io_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar IoHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: [ 'text', 'meta.empty-parenthesis.io' ],\n           regex: '(\\\\()(\\\\))',\n           comment: 'we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob' },\n         { token: [ 'text', 'meta.comma-parenthesis.io' ],\n           regex: '(\\\\,)(\\\\))',\n           comment: 'We want to do the same for ,) -- Seckar; same as above -- Rob' },\n         { token: 'keyword.control.io',\n           regex: '\\\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\\\b' },\n         { token: 'punctuation.definition.comment.io',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.io',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.io' } ] },\n         { token: 'punctuation.definition.comment.io',\n           regex: '//',\n           push: \n            [ { token: 'comment.line.double-slash.io',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-slash.io' } ] },\n         { token: 'punctuation.definition.comment.io',\n           regex: '#',\n           push: \n            [ { token: 'comment.line.number-sign.io', regex: '$', next: 'pop' },\n              { defaultToken: 'comment.line.number-sign.io' } ] },\n         { token: 'variable.language.io',\n           regex: '\\\\b(?:self|sender|target|proto|protos|parent)\\\\b',\n           comment: 'I wonder if some of this isn\\'t variable.other.language? --Allan; scoping this as variable.language to match Objective-C\\'s handling of \\'self\\', which is inconsistent with C++\\'s handling of \\'this\\' but perhaps intentionally so -- Rob' },\n         { token: 'keyword.operator.io',\n           regex: '<=|>=|=|:=|\\\\*|\\\\||\\\\|\\\\||\\\\+|-|/|&|&&|>|<|\\\\?|@|@@|\\\\b(?:and|or)\\\\b' },\n         { token: 'constant.other.io', regex: '\\\\bGL[\\\\w_]+\\\\b' },\n         { token: 'support.class.io', regex: '\\\\b[A-Z](?:\\\\w+)?\\\\b' },\n         { token: 'support.function.io',\n           regex: '\\\\b(?:clone|call|init|method|list|vector|block|\\\\w+(?=\\\\s*\\\\())\\\\b' },\n         { token: 'support.function.open-gl.io',\n           regex: '\\\\bgl(?:u|ut)?[A-Z]\\\\w+\\\\b' },\n         { token: 'punctuation.definition.string.begin.io',\n           regex: '\"\"\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.io',\n                regex: '\"\"\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.io', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.triple.io' } ] },\n         { token: 'punctuation.definition.string.begin.io',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.io',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.io', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.double.io' } ] },\n         { token: 'constant.numeric.io',\n           regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b' },\n         { token: 'variable.other.global.io', regex: 'Lobby\\\\b' },\n         { token: 'constant.language.io',\n           regex: '\\\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\\\b' } ] };\n    \n    this.normalizeRules();\n};\n\nIoHighlightRules.metaData = { fileTypes: [ 'io' ],\n      keyEquivalent: '^~I',\n      name: 'Io',\n      scopeName: 'source.io' };\n\n\noop.inherits(IoHighlightRules, TextHighlightRules);\n\nexports.IoHighlightRules = IoHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/io\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/io_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar IoHighlightRules = require(\"./io_highlight_rules\").IoHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = IoHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/io\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-jack.js",
    "content": "ace.define(\"ace/mode/jack_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JackHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"string\",\n                regex : '\"',\n                next  : \"string2\"\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next  : \"string1\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex: \"-?0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"(?:0|[-+]?[1-9][0-9]*)\\\\b\"\n            }, {\n                token : \"constant.binary\",\n                regex : \"<[0-9A-Fa-f][0-9A-Fa-f](\\\\s+[0-9A-Fa-f][0-9A-Fa-f])*>\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"constant.language.null\",\n                regex : \"null\\\\b\"\n            }, {\n                token : \"storage.type\",\n                regex: \"(?:Integer|Boolean|Null|String|Buffer|Tuple|List|Object|Function|Coroutine|Form)\\\\b\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:return|abort|vars|for|delete|in|is|escape|exec|split|and|if|elif|else|while)\\\\b\"\n            }, {\n                token : \"language.builtin\",\n                regex : \"(?:lines|source|parse|read-stream|interval|substr|parseint|write|print|range|rand|inspect|bind|i-values|i-pairs|i-map|i-filter|i-chunk|i-all\\\\?|i-any\\\\?|i-collect|i-zip|i-merge|i-each)\\\\b\"\n            }, {\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"storage.form\",\n                regex : \"@[a-z]+\"\n            }, {\n                token : \"constant.other.symbol\",\n                regex : ':+[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?'\n            }, {\n                token : \"variable\",\n                regex : '[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?'\n            }, {\n                token : \"keyword.operator\",\n                regex : \"\\\\|\\\\||\\\\^\\\\^|&&|!=|==|<=|<|>=|>|\\\\+|-|\\\\*|\\\\/|\\\\^|\\\\%|\\\\#|\\\\!\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string1\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : \"[^'\\\\\\\\]+\"\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next  : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\",\n                next  : \"start\"\n            }\n        ],\n        \"string2\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+'\n            }, {\n                token : \"string\",\n                regex : '\"',\n                next  : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\",\n                next  : \"start\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JackHighlightRules, TextHighlightRules);\n\nexports.JackHighlightRules = JackHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jack\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jack_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./jack_highlight_rules\").JackHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.$id = \"ace/mode/jack\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-jade.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token : \"support.function\",\n        regex : /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function(value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next  : \"githubblock\"\n    };\n    var codeBlockRules = [{\n        token : \"support.function\",\n        regex : \".*\",\n        onMatch: function(value, state, stack, line) {\n            var embedState = stack[1];\n            var indent = stack[2][0];\n            var endMarker = stack[2][1];\n            var language = stack[2][2];\n            \n            var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n            if (\n                m && m[1].length < indent.length + 3\n                && m[2].length >= endMarker.length && m[2][0] == endMarker[0]\n            ) {\n                stack.splice(0, 3);\n                this.next = stack.shift();\n                return this.token;\n            }\n            this.next = \"\";\n            if (language && modes[language]) {\n                var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                stack[1] = data.state;\n                return data.tokens;\n            }\n            return this.token;\n        }\n    }];\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s|$)/,\n        next : \"header\"\n    },\n    codeBlockStartRule,\n    { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\!?\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text or alt text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href or image\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        },\n        codeBlockStartRule,\n        {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : codeBlockRules\n    });\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n\nace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    );\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\n\nvar LessHighlightRules = function() {\n\n\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" + \n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n\n    var keywords = keywordList.split('|');\n\n    var properties = CssHighlightRules.supportType.split('|');\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);   \n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : [\"constant.numeric\", \"keyword\"],\n                regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex : \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token : [\"support.function\", \"paren.lparen\"],\n                regex : \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token : function(value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex : \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token : \"variable\",\n                regex : \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token : function(first, second) {\n                    if(properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex : \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token : \"keyword\",\n                regex : \"&\"   // special case - always treat as keyword\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(LessHighlightRules, TextHighlightRules);\n\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\nace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    oop.inherits(CoffeeHighlightRules, TextHighlightRules);\n\n    function CoffeeHighlightRules() {\n        var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n\n        var keywords = (\n            \"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n            \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n            \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n            \"or|on|unless|until|and|yes|yield|export|import|default\"\n        );\n\n        var langConstant = (\n            \"true|false|null|undefined|NaN|Infinity\"\n        );\n\n        var illegal = (\n            \"case|const|function|var|void|with|enum|implements|\" +\n            \"interface|let|package|private|protected|public|static\"\n        );\n\n        var supportClass = (\n            \"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n            \"SyntaxError|TypeError|URIError|\"  +\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\"\n        );\n\n        var supportFunction = (\n            \"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n            \"encodeURIComponent|decodeURI|decodeURIComponent|String|\"\n        );\n\n        var variableLanguage = (\n            \"window|arguments|prototype|document\"\n        );\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": langConstant,\n            \"invalid.illegal\": illegal,\n            \"language.support.class\": supportClass,\n            \"language.support.function\": supportFunction,\n            \"variable.language\": variableLanguage\n        }, \"identifier\");\n\n        var functionRule = {\n            token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n            regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n        };\n\n        var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n\n        this.$rules = {\n            start : [\n                {\n                    token : \"constant.numeric\",\n                    regex : \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n                }, {\n                    stateName: \"qdoc\",\n                    token : \"string\", regex : \"'''\", next : [\n                        {token : \"string\", regex : \"'''\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqdoc\",\n                    token : \"string\",\n                    regex : '\"\"\"',\n                    next : [\n                        {token : \"string\", regex : '\"\"\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qstring\",\n                    token : \"string\", regex : \"'\", next : [\n                        {token : \"string\", regex : \"'\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqstring\",\n                    token : \"string.start\", regex : '\"', next : [\n                        {token : \"string.end\", regex : '\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"js\",\n                    token : \"string\", regex : \"`\", next : [\n                        {token : \"string\", regex : \"`\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    regex: \"[{}]\", onMatch: function(val, state, stack) {\n                        this.next = \"\";\n                        if (val == \"{\" && stack.length) {\n                            stack.unshift(\"start\", state);\n                            return \"paren\";\n                        }\n                        if (val == \"}\" && stack.length) {\n                            stack.shift();\n                            this.next = stack.shift() || \"\";\n                            if (this.next.indexOf(\"string\") != -1)\n                                return \"paren.string\";\n                        }\n                        return \"paren\";\n                    }\n                }, {\n                    token : \"string.regex\",\n                    regex : \"///\",\n                    next : \"heregex\"\n                }, {\n                    token : \"string.regex\",\n                    regex : /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n                }, {\n                    token : \"comment\",\n                    regex : \"###(?!#)\",\n                    next : \"comment\"\n                }, {\n                    token : \"comment\",\n                    regex : \"#.*\"\n                }, {\n                    token : [\"punctuation.operator\", \"text\", \"identifier\"],\n                    regex : \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\.{1,3}\"\n                }, {\n                    token : [\"keyword\", \"text\", \"language.support.class\",\n                     \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                    regex : \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n                }, {\n                    token : [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                    regex : \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n                }, \n                functionRule, \n                {\n                    token : \"variable\",\n                    regex : \"@(?:\" + identifier + \")?\"\n                }, {\n                    token: keywordMapper,\n                    regex : identifier\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\,|\\\\.\"\n                }, {\n                    token : \"storage.type\",\n                    regex : \"[\\\\-=]>\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[({[]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\]})]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }],\n\n\n            heregex : [{\n                token : \"string.regex\",\n                regex : '.*?///[imgy]{0,4}',\n                next : \"start\"\n            }, {\n                token : \"comment.regex\",\n                regex : \"\\\\s+(?:#.*)?\"\n            }, {\n                token : \"string.regex\",\n                regex : \"\\\\S+\"\n            }],\n\n            comment : [{\n                token : \"comment\",\n                regex : '###',\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        };\n        this.normalizeRules();\n    }\n\n    exports.CoffeeHighlightRules = CoffeeHighlightRules;\n});\n\nace.define(\"ace/mode/jade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/scss_highlight_rules\",\"ace/mode/less_highlight_rules\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/javascript_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar SassHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar CoffeeHighlightRules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nfunction mixin_embed(tag, prefix) {\n    return { \n        token : \"entity.name.function.jade\",\n        regex : \"^\\\\s*\\\\:\" + tag,\n        next  : prefix + \"start\"\n    };\n}\n\nvar JadeHighlightRules = function() {\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-6][0-7]?|\" + // oct\n        \"37[0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token: \"keyword.control.import.include.jade\",\n            regex: \"\\\\s*\\\\binclude\\\\b\"\n        },\n        {\n            token: \"keyword.other.doctype.jade\",\n            regex: \"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"\n        },\n        {\n            onMatch: function(value, currentState, stack) {\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\//,\n            next: \"comment_block\"\n        },\n        mixin_embed(\"markdown\", \"markdown-\"),\n        mixin_embed(\"sass\", \"sass-\"),\n        mixin_embed(\"less\", \"less-\"),\n        mixin_embed(\"coffee\", \"coffee-\"),\n        {\n            token: [ \"storage.type.function.jade\",\n                       \"entity.name.function.jade\",\n                       \"punctuation.definition.parameters.begin.jade\",\n                       \"variable.parameter.function.jade\",\n                       \"punctuation.definition.parameters.end.jade\"\n                    ],\n            regex: \"^(\\\\s*mixin)( [\\\\w\\\\-]+)(\\\\s*\\\\()(.*?)(\\\\))\"\n        },\n        {\n            token: [ \"storage.type.function.jade\", \"entity.name.function.jade\"],\n            regex: \"^(\\\\s*mixin)( [\\\\w\\\\-]+)\"\n        },\n        {\n            token: \"source.js.embedded.jade\",\n            regex: \"^\\\\s*(?:-|=|!=)\",\n            next: \"js-start\"\n        },\n        {\n            token: \"string.interpolated.jade\",\n            regex: \"[#!]\\\\{[^\\\\}]+\\\\}\"\n        },\n        {\n            token: \"meta.tag.any.jade\",\n            regex: /^\\s*(?!\\w+:)(?:[\\w-]+|(?=\\.|#)])/,\n            next: \"tag_single\"\n        },\n        {\n            token: \"suport.type.attribute.id.jade\",\n            regex: \"#\\\\w+\"\n        },\n        {\n            token: \"suport.type.attribute.class.jade\",\n            regex: \"\\\\.\\\\w+\"\n        },\n        {\n            token: \"punctuation\",\n            regex: \"\\\\s*(?:\\\\()\",\n            next: \"tag_attributes\"\n        }\n    ],\n    \"comment_block\": [\n        {regex: /^\\s*(?:\\/\\/)?/, onMatch: function(value, currentState, stack) {\n            if (value.length <= stack[1]) {\n                if (value.slice(-1) == \"/\") {\n                    stack[1] = value.length - 2;\n                    this.next = \"\";\n                    return \"comment\";\n                }\n                stack.shift();\n                stack.shift();\n                this.next = stack.shift();\n                return \"text\";\n            } else {\n                this.next = \"\";\n                return \"comment\";\n            }\n        }, next: \"start\"},\n        {defaultToken: \"comment\"}\n    ],\n    \"tag_single\": [\n        {\n            token: \"entity.other.attribute-name.class.jade\",\n            regex: \"\\\\.[\\\\w-]+\"\n        },\n        {\n            token: \"entity.other.attribute-name.id.jade\",\n            regex: \"#[\\\\w-]+\"\n        },\n        {\n            token: [\"text\", \"punctuation\"],\n            regex: \"($)|((?!\\\\.|#|=|-))\",\n            next: \"start\"\n        }\n    ],\n    \"tag_attributes\": [ \n        {\n            token : \"string\",\n            regex : \"'(?=.)\",\n            next  : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        },\n        {\n            token: [\"entity.other.attribute-name.jade\", \"punctuation\"],\n            regex: \"([a-zA-Z:\\\\.-]+)(=)?\",\n            next: \"attribute_strings\"\n        },\n        {\n            token: \"punctuation\",\n            regex: \"\\\\)\",\n            next: \"start\"\n        }\n    ],\n    \"attribute_strings\": [\n        {\n            token : \"string\",\n            regex : \"'(?=.)\",\n            next  : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        },\n        {\n            token : \"string\",\n            regex : '(?=\\\\S)',\n            next  : \"tag_attributes\"\n        }\n    ],\n    \"qqstring\" : [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        }, {\n            token : \"string\",\n            regex : '[^\"\\\\\\\\]+'\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"tag_attributes\"\n        }\n    ],\n    \"qstring\" : [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        }, {\n            token : \"string\",\n            regex : \"[^'\\\\\\\\]+\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"tag_attributes\"\n        }\n    ]\n};\n\n    this.embedRules(JavaScriptHighlightRules, \"js-\", [{\n        token: \"text\",\n        regex: \".$\",\n        next: \"start\"\n    }]);\n};\n\noop.inherits(JadeHighlightRules, TextHighlightRules);\n\nexports.JadeHighlightRules = JadeHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jade_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JadeHighlightRules = require(\"./jade_highlight_rules\").JadeHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JadeHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() { \n\tthis.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/jade\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-java.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JavaHighlightRules = function() {\n    var keywords = (\n    \"abstract|continue|for|new|switch|\" +\n    \"assert|default|goto|package|synchronized|\" +\n    \"boolean|do|if|private|this|\" +\n    \"break|double|implements|protected|throw|\" +\n    \"byte|else|import|public|throws|\" +\n    \"case|enum|instanceof|return|transient|\" +\n    \"catch|extends|int|short|try|\" +\n    \"char|final|interface|static|void|\" +\n    \"class|finally|long|strictfp|volatile|\" +\n    \"const|float|native|super|while|\" +\n    \"var\"\n    );\n\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                regex: \"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",\n                token: \"keyword\",\n                next: [{\n                    regex: \"{\",\n                    token: \"paren.lparen\",\n                    next: [{\n                        regex: \"}\",\n                        token: \"paren.rparen\",\n                        next: \"start\"\n                    }, {\n                        regex: \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n                        token: \"keyword\" \n                    }]\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    token : \"identifier\",\n                    regex : \"\\\\w+\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \".\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    regex: \"\", // exit if there is anything else\n                    next: \"start\"\n                }]\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(JavaHighlightRules, TextHighlightRules);\n\nexports.JavaHighlightRules = JavaHighlightRules;\n});\n\nace.define(\"ace/mode/folding/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, CStyleFoldMode);\n\n(function() {\n    this.importRegex = /^import /;\n    this.getCStyleFoldWidget = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        if (foldStyle === \"markbegin\") {\n            var line = session.getLine(row);\n            if (this.importRegex.test(line)) {\n                if (row == 0 || !this.importRegex.test(session.getLine(row - 1)))\n                    return \"start\";\n            }\n        }\n\n        return this.getCStyleFoldWidget(session, foldStyle, row);\n    };\n    \n    this.getCstyleFoldWidgetRange = this.getFoldWidgetRange;\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        var match = line.match(this.importRegex);\n        if (!match || foldStyle !== \"markbegin\")\n            return this.getCstyleFoldWidgetRange(session, foldStyle, row, forceMultiline);\n\n        var startColumn = match[0].length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            var line = session.getLine(row);\n            if (line.match(/^\\s*$/))\n                continue;\n\n            if (!line.match(this.importRegex))\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/java_highlight_rules\",\"ace/mode/folding/java\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\nvar JavaFoldMode = require(\"./folding/java\").FoldMode;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = JavaHighlightRules;\n    this.foldingRules = new JavaFoldMode();\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/java\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-javascript.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-json.js",
    "content": "ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"variable\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next  : \"string\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"text\", // single quoted strings are not allowed\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"comment\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.start\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\*\",\n                next  : \"comment\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\", // comments are not allowed, but who cares?\n                regex : \"\\\\*\\\\/\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n\n    this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-jsoniq.js",
    "content": "ace.define(\"ace/mode/xquery/jsoniq_lexer\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var JSONiqTokenizer = exports.JSONiqTokenizer = function JSONiqTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 59:                        // '<?'\n      shift(59);                    // '<?'\n      break;\n    case 43:                        // '(#'\n      shift(43);                    // '(#'\n      break;\n    case 45:                        // '(:~'\n      shift(45);                    // '(:~'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    case 277:                       // '}'\n      shift(277);                   // '}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 42:                        // '('\n      shift(42);                    // '('\n      break;\n    case 46:                        // ')'\n      shift(46);                    // ')'\n      break;\n    case 52:                        // '/'\n      shift(52);                    // '/'\n      break;\n    case 65:                        // '['\n      shift(65);                    // '['\n      break;\n    case 66:                        // ']'\n      shift(66);                    // ']'\n      break;\n    case 49:                        // ','\n      shift(49);                    // ','\n      break;\n    case 51:                        // '.'\n      shift(51);                    // '.'\n      break;\n    case 56:                        // ';'\n      shift(56);                    // ';'\n      break;\n    case 54:                        // ':'\n      shift(54);                    // ':'\n      break;\n    case 36:                        // '!'\n      shift(36);                    // '!'\n      break;\n    case 276:                       // '|'\n      shift(276);                   // '|'\n      break;\n    case 40:                        // '$$'\n      shift(40);                    // '$$'\n      break;\n    case 5:                         // Annotation\n      shift(5);                     // Annotation\n      break;\n    case 4:                         // ModuleDecl\n      shift(4);                     // ModuleDecl\n      break;\n    case 6:                         // OptionDecl\n      shift(6);                     // OptionDecl\n      break;\n    case 15:                        // AttrTest\n      shift(15);                    // AttrTest\n      break;\n    case 16:                        // Wildcard\n      shift(16);                    // Wildcard\n      break;\n    case 18:                        // IntegerLiteral\n      shift(18);                    // IntegerLiteral\n      break;\n    case 19:                        // DecimalLiteral\n      shift(19);                    // DecimalLiteral\n      break;\n    case 20:                        // DoubleLiteral\n      shift(20);                    // DoubleLiteral\n      break;\n    case 8:                         // Variable\n      shift(8);                     // Variable\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 7:                         // Operator\n      shift(7);                     // Operator\n      break;\n    case 35:                        // EOF\n      shift(35);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    case 53:                        // '/>'\n      shift(53);                    // '/>'\n      break;\n    case 29:                        // QName\n      shift(29);                    // QName\n      break;\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 25:                        // ElementContentChar\n      shift(25);                    // ElementContentChar\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 10:                        // EndTag\n      shift(10);                    // EndTag\n      break;\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 27:                        // AposAttrContentChar\n      shift(27);                    // AposAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 22:                        // EscapeQuot\n      shift(22);                    // EscapeQuot\n      break;\n    case 26:                        // QuotAttrContentChar\n      shift(26);                    // QuotAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 14:                        // CDataSectionContents\n      shift(14);                    // CDataSectionContents\n      break;\n    case 67:                        // ']]>'\n      shift(67);                    // ']]>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 12:                        // DirCommentContents\n      shift(12);                    // DirCommentContents\n      break;\n    case 50:                        // '-->'\n      shift(50);                    // '-->'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 13:                        // DirPIContents\n      shift(13);                    // DirPIContents\n      break;\n    case 62:                        // '?'\n      shift(62);                    // '?'\n      break;\n    case 63:                        // '?>'\n      shift(63);                    // '?>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 11:                        // PragmaContents\n      shift(11);                    // PragmaContents\n      break;\n    case 38:                        // '#'\n      shift(38);                    // '#'\n      break;\n    case 39:                        // '#)'\n      shift(39);                    // '#)'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 32:                        // CommentContents\n      shift(32);                    // CommentContents\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(6);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 33:                        // DocTag\n      shift(33);                    // DocTag\n      break;\n    case 34:                        // DocCommentContents\n      shift(34);                    // DocCommentContents\n      break;\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(5);                  // JSONChar | JSONCharRef | JSONPredefinedCharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 3:                         // JSONPredefinedCharRef\n      shift(3);                     // JSONPredefinedCharRef\n      break;\n    case 2:                         // JSONCharRef\n      shift(2);                     // JSONCharRef\n      break;\n    case 1:                         // JSONChar\n      shift(1);                     // JSONChar\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 24:                        // AposChar\n      shift(24);                    // AposChar\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 17:                        // EQName^Token\n      shift(17);                    // EQName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 28:                        // NCName^Token\n      shift(28);                    // NCName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 30)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqTokenizer.MAP1[(c0 & 15) + JSONiqTokenizer.MAP1[(c1 & 31) + JSONiqTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = JSONiqTokenizer.TRANSITION[(i0 & 15) + JSONiqTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 279; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2066 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqTokenizer.EXPECTED[(i0 & 3) + JSONiqTokenizer.EXPECTED[(i1 & 3) + JSONiqTokenizer.EXPECTED[(i2 & 3) + JSONiqTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqTokenizer.MAP0 =\n[ 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37\n];\n\nJSONiqTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 31, 31, 37, 37, 37, 37, 37, 37, 37, 66, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66\n];\n\nJSONiqTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 37, 31, 37, 31, 31, 37\n];\n\nJSONiqTokenizer.INITIAL =\n[ 1, 2, 49155, 57348, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nJSONiqTokenizer.TRANSITION =\n[ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 17408, 19288, 17439, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19074, 36169, 17439, 36866, 17466, 36890, 36866, 22314, 19105, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22182, 19288, 19121, 36866, 17466, 18345, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19273, 19552, 19304, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19332, 17423, 19363, 36866, 17466, 17537, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 18614, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19391, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19427, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36154, 19288, 19457, 36866, 17466, 17740, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22780, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22375, 22197, 18469, 36866, 17466, 36890, 36866, 21991, 24018, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21331, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 19485, 19501, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19537, 22390, 19568, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19596, 19611, 19457, 36866, 17466, 36890, 36866, 18246, 19627, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22242, 20553, 19457, 36866, 17466, 36890, 36866, 18648, 30477, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36472, 19288, 19457, 36866, 17466, 17809, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21770, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19643, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19672, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20538, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17975, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22345, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19726, 19742, 21529, 24035, 23112, 26225, 23511, 27749, 27397, 24035, 34360, 24035, 24036, 23114, 35166, 23114, 23114, 19758, 23511, 35247, 23511, 23511, 28447, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 19821, 23511, 23511, 23511, 23511, 23512, 19441, 36539, 24035, 24035, 24035, 24035, 19846, 19869, 23114, 23114, 23114, 28618, 32187, 19892, 23511, 23511, 23511, 34585, 20402, 36647, 24035, 24035, 24036, 23114, 33757, 23114, 23114, 23029, 20271, 23511, 27070, 23511, 23511, 30562, 24035, 24035, 29274, 26576, 23114, 23114, 31118, 23036, 29695, 23511, 23511, 32431, 23634, 30821, 24035, 23110, 19913, 23114, 23467, 31261, 23261, 34299, 19932, 24035, 32609, 19965, 35389, 19984, 27689, 19830, 29391, 29337, 20041, 22643, 35619, 33728, 20062, 20121, 20166, 35100, 26145, 20211, 23008, 19876, 20208, 20227, 25670, 20132, 26578, 27685, 20141, 20243, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36094, 19288, 19457, 36866, 17466, 21724, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22735, 19552, 20287, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22750, 19288, 21529, 24035, 23112, 28056, 23511, 29483, 28756, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 20327, 23511, 23511, 23511, 23511, 31156, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 20371, 23511, 23511, 23511, 23511, 27443, 20395, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 29457, 29700, 23511, 23511, 23511, 23511, 33444, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 28350, 20421, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 20447, 20475, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20523, 22257, 20569, 20783, 21715, 17603, 20699, 20837, 20614, 20630, 21149, 20670, 21405, 17486, 17509, 17525, 18373, 19179, 20695, 20716, 20732, 20755, 19194, 18042, 21641, 20592, 20779, 20598, 21412, 17470, 17591, 20896, 17468, 17619, 20799, 20700, 21031, 20744, 20699, 20828, 18075, 21259, 20581, 20853, 18048, 20868, 20884, 17756, 17784, 17800, 17825, 17854, 21171, 21200, 20931, 20947, 21378, 20955, 20971, 18086, 20645, 21002, 20986, 18178, 17960, 18012, 18381, 18064, 29176, 21044, 21438, 21018, 21122, 21393, 21060, 21844, 21094, 20654, 17493, 18150, 18166, 18214, 25967, 20763, 21799, 21110, 21830, 21138, 21246, 21301, 18336, 18361, 21165, 21187, 20812, 21216, 21232, 21287, 21317, 18553, 21347, 21363, 21428, 21454, 21271, 21483, 21499, 21515, 21575, 21467, 18712, 21591, 21633, 21078, 18189, 18198, 20679, 21657, 21701, 21074, 21687, 21740, 21756, 21786, 21815, 21860, 21876, 21892, 21946, 21962, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36457, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 36813, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 21981, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 22151, 22007, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 27898, 17884, 18890, 17906, 17928, 22042, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 22070, 22112, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 22142, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36109, 19288, 18469, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22167, 19288, 19457, 36866, 17466, 17768, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22227, 36487, 22273, 36866, 17466, 36890, 36866, 19316, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18749, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 22304, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19580, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22330, 19089, 19457, 36866, 17466, 18721, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22765, 19347, 19457, 36866, 17466, 36890, 36866, 18114, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34541, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 22540, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29908, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22561, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 23837, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22584, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36442, 19288, 21605, 24035, 23112, 28137, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 31568, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22690, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 27584, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 22659, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22360, 19552, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22675, 22811, 19457, 36866, 17466, 36890, 36866, 19133, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22827, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36064, 19288, 22865, 22881, 32031, 22897, 22913, 22956, 29939, 24035, 24035, 24035, 23003, 23114, 23114, 23114, 23024, 22420, 23511, 23511, 23511, 23052, 29116, 23073, 29268, 24035, 25563, 26915, 23106, 23131, 23114, 23114, 23159, 23181, 23197, 23248, 23511, 23511, 23282, 23305, 22493, 32364, 24035, 33472, 30138, 26325, 31770, 33508, 27345, 33667, 23114, 23321, 23473, 23351, 35793, 36576, 23511, 23375, 22500, 24145, 24035, 29197, 20192, 24533, 23440, 23114, 19017, 23459, 22839, 23489, 23510, 23511, 33563, 23528, 32076, 25389, 24035, 26576, 23561, 23583, 23114, 32683, 22516, 23622, 23655, 23511, 23634, 35456, 37144, 23110, 23683, 34153, 20499, 32513, 25824, 23705, 24035, 24035, 23111, 23114, 19874, 27078, 33263, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 20507, 32241, 20150, 31862, 27464, 35108, 23727, 23007, 35895, 34953, 26578, 27685, 20141, 24569, 31691, 19787, 33967, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36427, 19552, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 27027, 26576, 23114, 23114, 23114, 31471, 23756, 22468, 23511, 23511, 23511, 34687, 23772, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 23788, 24035, 24035, 24035, 21559, 23828, 23114, 23114, 23114, 25086, 22839, 23853, 23511, 23511, 23511, 23876, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 31761, 23909, 23953, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36049, 19288, 21605, 30825, 23112, 23987, 23511, 24003, 31001, 27617, 24034, 24035, 24036, 24052, 24089, 23114, 23114, 22420, 24109, 24168, 23511, 23511, 29116, 24188, 27609, 20017, 29516, 24035, 26576, 24222, 19968, 23114, 24252, 33811, 22468, 24270, 33587, 23511, 24320, 27443, 22493, 24035, 24035, 24035, 24035, 24339, 23113, 23114, 23114, 23114, 28128, 28618, 29700, 23511, 23511, 23511, 28276, 34564, 20402, 24035, 24035, 32929, 24036, 23114, 23114, 23114, 24357, 23029, 22839, 23511, 23511, 23511, 24377, 25645, 24035, 34112, 24035, 26576, 23114, 26643, 23114, 32683, 22516, 23511, 25638, 23511, 23711, 24035, 24395, 27809, 23114, 24414, 20499, 24432, 30917, 23628, 24035, 30680, 23111, 23114, 30233, 27078, 25748, 24452, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 24475, 19829, 26577, 26597, 26154, 24519, 24556, 24596, 23007, 20046, 20132, 26578, 24634, 20141, 24569, 31691, 24679, 24727, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36412, 19288, 21605, 19943, 34861, 32618, 26027, 29483, 32016, 32050, 36233, 24776, 35574, 24801, 24819, 32671, 31289, 22420, 24868, 24886, 20087, 26849, 29116, 19803, 24035, 24035, 24035, 36228, 26576, 23114, 23114, 23114, 24981, 33811, 22468, 23511, 23511, 23511, 29028, 27443, 22493, 24923, 27965, 24035, 24035, 32797, 24946, 23443, 23114, 23114, 29636, 24997, 22849, 28252, 23511, 23511, 23511, 25042, 25110, 24035, 24035, 34085, 24036, 25133, 23114, 23114, 25152, 23029, 22839, 25169, 23511, 36764, 23511, 25645, 30403, 24035, 25186, 26576, 31806, 24093, 25212, 32683, 22516, 32713, 26245, 34293, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 32406, 23111, 23114, 28676, 30944, 27689, 25234, 24035, 23112, 19872, 37063, 23266, 24036, 23114, 30243, 20379, 26100, 29218, 20211, 30105, 25257, 25284, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 24834, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36034, 19288, 21671, 25314, 25072, 25330, 25346, 25362, 29939, 29951, 35288, 29984, 23812, 27216, 25405, 25424, 30456, 22584, 26292, 25461, 25480, 31592, 29116, 25516, 34963, 25545, 27007, 25579, 33937, 25614, 25661, 25686, 34872, 25702, 25718, 25734, 25769, 25795, 25811, 25840, 22493, 26533, 25856, 24035, 25876, 30763, 27481, 25909, 23114, 28987, 25936, 25954, 29700, 25983, 23511, 31412, 26043, 26063, 22568, 29241, 29592, 26116, 31216, 35383, 26170, 34783, 26194, 26221, 22839, 26241, 26261, 22477, 26283, 26308, 27306, 31035, 24655, 26576, 29854, 33386, 26341, 32683, 22516, 32153, 30926, 26361, 19996, 26381, 35463, 26397, 26424, 34646, 26478, 35605, 31386, 26494, 35567, 31964, 22940, 23689, 25218, 30309, 32289, 19830, 33605, 23112, 32109, 27733, 27084, 24496, 35886, 35221, 26525, 36602, 26549, 26558, 26574, 26594, 26613, 26629, 26666, 26700, 26578, 27685, 23740, 24285, 31691, 26733, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36397, 19552, 18991, 25887, 28117, 32618, 26776, 29483, 29939, 26802, 24035, 24035, 24036, 28664, 23114, 23114, 23114, 22420, 30297, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 25559, 26576, 23114, 23114, 23114, 30525, 33811, 22468, 23511, 23511, 23511, 28725, 27443, 22493, 24035, 24035, 27249, 24035, 24035, 23113, 23114, 23114, 26827, 23114, 28618, 29700, 23511, 23511, 26845, 23511, 34564, 20402, 24035, 24035, 26979, 24036, 23114, 23114, 23114, 24974, 23029, 22839, 23511, 23511, 23511, 26865, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 33305, 24035, 25598, 23114, 19874, 34253, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 26886, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 26931, 24569, 26439, 26947, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36019, 19288, 26995, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 27043, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 27061, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 29978, 24035, 24035, 23113, 23114, 33114, 23114, 23114, 30010, 29700, 23511, 35913, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 27155, 26576, 23114, 23114, 30447, 23036, 29695, 23511, 23511, 30935, 20099, 24152, 25529, 27100, 34461, 27121, 22625, 29156, 26009, 27137, 30422, 31903, 31655, 28870, 27171, 32439, 31731, 19830, 27232, 22612, 27265, 26786, 25494, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 20342, 27288, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 27322, 27339, 28020, 27361, 27382, 29939, 24035, 24035, 32581, 24036, 23114, 23114, 23114, 27425, 22420, 23511, 23511, 23511, 27442, 28306, 19803, 24035, 24035, 24035, 24035, 26710, 23114, 23114, 23114, 23114, 32261, 22468, 23511, 23511, 23511, 23511, 35719, 24694, 29510, 24035, 24035, 24035, 24035, 26717, 23114, 23114, 23114, 23114, 28618, 32217, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 27459, 23114, 23114, 23114, 36252, 23029, 20271, 23511, 23511, 23511, 28840, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 27480, 34483, 28401, 29761, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36382, 19288, 21605, 27497, 27517, 28504, 28898, 27569, 29939, 29401, 27600, 27323, 27633, 19025, 27662, 23114, 27705, 22420, 20483, 27721, 23511, 27765, 28306, 19803, 23540, 24035, 24610, 27781, 27805, 26650, 23114, 28573, 32990, 25920, 22468, 26870, 23511, 26684, 34262, 34737, 25057, 34622, 24035, 24035, 23971, 24206, 27825, 27847, 23114, 23114, 27865, 27885, 35766, 27914, 23511, 23511, 32766, 32844, 27934, 28795, 26909, 27955, 26092, 27988, 25445, 28005, 28036, 28052, 21965, 23511, 32196, 19897, 28072, 28102, 36534, 21541, 23801, 28153, 28180, 28197, 28221, 23036, 32695, 28251, 28268, 28292, 23667, 34825, 23930, 24580, 28322, 28344, 31627, 28366, 25996, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 35625, 33477, 33359, 27674, 28393, 33992, 24036, 23114, 30243, 19829, 28417, 28433, 28463, 23008, 19876, 20208, 23007, 20046, 20132, 28489, 28520, 20141, 24569, 31691, 19787, 28550, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 28589, 24035, 24035, 24035, 24035, 28608, 23114, 23114, 23114, 23114, 28618, 20431, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36004, 19288, 28634, 31951, 28565, 28702, 28718, 28741, 32544, 20175, 28792, 32086, 20105, 28811, 29059, 29862, 28856, 22420, 28886, 30354, 23359, 28922, 28306, 28952, 23888, 26320, 36506, 24035, 29331, 28968, 36609, 23114, 29003, 31661, 27061, 30649, 27366, 23511, 29023, 27918, 24694, 24035, 24035, 23893, 33094, 30867, 23113, 23114, 23114, 29044, 34184, 30010, 29700, 23511, 23511, 29081, 29102, 34585, 20402, 27789, 24035, 24035, 24036, 23114, 29132, 23114, 23114, 23029, 20271, 23511, 29153, 23511, 23511, 30562, 30174, 24035, 24035, 27409, 25438, 23114, 23114, 29172, 36668, 31332, 23511, 23511, 29192, 30144, 24035, 23110, 30203, 23114, 23467, 31544, 23261, 23628, 24035, 22545, 23111, 23114, 29213, 27078, 27689, 29234, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 29257, 23008, 19876, 20208, 28768, 29290, 29320, 34776, 29353, 20141, 22435, 29378, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36367, 19288, 21605, 34616, 19006, 32618, 31497, 31507, 36216, 20184, 24035, 34393, 29424, 34668, 23114, 34900, 29447, 22420, 30360, 23511, 37089, 29473, 28306, 19803, 29499, 24398, 24035, 24035, 26576, 31799, 29532, 29550, 23114, 33811, 22468, 32298, 29571, 31184, 23511, 23512, 37127, 36628, 29589, 24035, 24135, 24035, 23113, 29608, 23114, 27831, 29634, 28618, 29652, 30037, 23511, 24172, 29671, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 29555, 29690, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 29719, 24035, 23110, 29738, 23114, 23467, 34035, 29756, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 29777, 34364, 28181, 30243, 29799, 31920, 27272, 27185, 23008, 31126, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29828, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35989, 19552, 19687, 35139, 28649, 29878, 29894, 29924, 29939, 23224, 23085, 31969, 24036, 35173, 24752, 24803, 23114, 22420, 31190, 30318, 24870, 23511, 28306, 29967, 23967, 24035, 24035, 24035, 26576, 30000, 23114, 23114, 23114, 33811, 22468, 30026, 23511, 23511, 23511, 23512, 26078, 24035, 24035, 24035, 30053, 37137, 30071, 23114, 23114, 33368, 25136, 28618, 30723, 23511, 23511, 37096, 31356, 34585, 20402, 30092, 30127, 30160, 24036, 35740, 30219, 24960, 30259, 23029, 20271, 34042, 30285, 30342, 30376, 23289, 30055, 30400, 30419, 30438, 32640, 33532, 33514, 30472, 18792, 26267, 24323, 23057, 30493, 23639, 20008, 30196, 33188, 30517, 20075, 23511, 30541, 23628, 30578, 33928, 28776, 30594, 19874, 30610, 30637, 19830, 30677, 27646, 19872, 25779, 23266, 23232, 35016, 30243, 30696, 29812, 30712, 30746, 27206, 30779, 30807, 23007, 33395, 20132, 26578, 27685, 31703, 22928, 31691, 19787, 31079, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36352, 19288, 23335, 30841, 26131, 30888, 30904, 30986, 29939, 24035, 24704, 31017, 20025, 23114, 26178, 31051, 31095, 22420, 23511, 22524, 31142, 31172, 28534, 31206, 35497, 25196, 24035, 28592, 24503, 23114, 31239, 31285, 23114, 31305, 31321, 31355, 31372, 31407, 23511, 30556, 24694, 24035, 27501, 19805, 24035, 24035, 23113, 23114, 31428, 24066, 23114, 28618, 29700, 23511, 31837, 18809, 23511, 34585, 31448, 24035, 24035, 24035, 23090, 23114, 23114, 23114, 23114, 31619, 35038, 23511, 23511, 23511, 23511, 33714, 24035, 33085, 24035, 29431, 23114, 31467, 23114, 23143, 31487, 23511, 31523, 23511, 35195, 36783, 24035, 30111, 23567, 23114, 23467, 31543, 31560, 23628, 24035, 24035, 23111, 23114, 19874, 30953, 31584, 34508, 24035, 31608, 26345, 37055, 23266, 31643, 31677, 31719, 31747, 31786, 31822, 26898, 23008, 19876, 31859, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 31878, 31936, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35974, 19288, 21605, 27972, 35663, 31985, 29655, 32001, 36715, 24785, 25893, 23545, 31912, 19853, 19916, 25938, 24540, 22420, 31843, 29674, 29573, 32735, 28936, 19803, 24035, 24035, 32047, 24035, 26576, 23114, 23114, 27544, 23114, 33811, 22468, 23511, 23511, 32161, 23511, 23512, 32066, 24035, 33313, 24035, 24035, 24035, 23113, 27426, 32102, 23114, 23114, 28618, 32125, 23511, 32144, 23511, 23511, 33569, 20402, 24035, 27045, 24035, 24036, 23114, 23114, 28328, 23114, 30076, 32177, 23511, 23511, 30384, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23595, 32212, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 22635, 25753, 32233, 32257, 32277, 19829, 26577, 26597, 20211, 23008, 19876, 32322, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 32352, 35285, 32380, 34196, 33016, 30661, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 32404, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 32422, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 30269, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 19949, 24035, 23111, 32455, 19874, 31269, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36337, 19552, 19209, 21617, 26509, 32475, 32491, 32529, 29939, 24035, 32578, 25241, 32597, 23114, 32634, 29007, 32656, 22420, 23511, 32729, 26365, 32751, 28306, 32788, 32882, 24035, 24035, 32813, 36727, 23114, 33182, 23114, 27553, 33235, 32829, 23511, 32706, 23511, 28906, 28377, 26962, 32881, 32904, 32898, 32920, 24035, 32953, 23114, 32977, 26408, 23114, 28164, 33006, 23511, 33039, 35774, 23511, 32306, 20402, 33076, 30872, 24035, 24036, 25408, 33110, 28979, 23114, 23029, 20271, 35835, 33130, 33054, 23511, 30562, 33148, 24035, 24035, 33167, 23114, 23114, 33775, 23036, 20459, 23511, 23511, 25464, 24646, 24035, 24035, 22446, 23114, 23114, 25627, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 31391, 33204, 33220, 33251, 33287, 26577, 26597, 20211, 33329, 19876, 33345, 23007, 20046, 20132, 26578, 27685, 28473, 22599, 31691, 33411, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35959, 19288, 21907, 27243, 29843, 32618, 33427, 31507, 29939, 33460, 34090, 24035, 24036, 33493, 24416, 33530, 23114, 22420, 33548, 24379, 33585, 23511, 28306, 19803, 33603, 24202, 24035, 24035, 25593, 33749, 28205, 23114, 23114, 32388, 22468, 33853, 33060, 23511, 23511, 31339, 33621, 24035, 24035, 34397, 24618, 30757, 33663, 23114, 23114, 33683, 35684, 28618, 26678, 23511, 23511, 32506, 33699, 34585, 20402, 24035, 32562, 26973, 24036, 23114, 23114, 33377, 33773, 23029, 20271, 23511, 23511, 30621, 23511, 23860, 24035, 33791, 21553, 26576, 36558, 23114, 33809, 23036, 32857, 26047, 23511, 33827, 23634, 24035, 24035, 23110, 23114, 23114, 31252, 23511, 33845, 23628, 24035, 24459, 23111, 23114, 33869, 27078, 30791, 29783, 24035, 24742, 19872, 33895, 23266, 26462, 19710, 33879, 33919, 26577, 26597, 24123, 24930, 21930, 20208, 30501, 33953, 25268, 20252, 33983, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36322, 19552, 23390, 33634, 35154, 34008, 34024, 34058, 35544, 34106, 34128, 26811, 33151, 34144, 34169, 34212, 23114, 34228, 34244, 34278, 34315, 23511, 34331, 34347, 34380, 34413, 24035, 24663, 26576, 34429, 34453, 34477, 29534, 33811, 22468, 34499, 34524, 34557, 25170, 34580, 35436, 23937, 34601, 24035, 24341, 26453, 23113, 34638, 34662, 23114, 24236, 28618, 34684, 34703, 34729, 23511, 35352, 34753, 34799, 24035, 34815, 32558, 34848, 34888, 35814, 34923, 23165, 29137, 23606, 30326, 30730, 34939, 33023, 30562, 36848, 34979, 24035, 24847, 34996, 23114, 23114, 35032, 29695, 35054, 23511, 23511, 35091, 33296, 35124, 24296, 28235, 24361, 36276, 32772, 35067, 35189, 27301, 30855, 24852, 22452, 35211, 35237, 35316, 25500, 35270, 23405, 24304, 35304, 29362, 24036, 23114, 35332, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 35368, 28823, 23920, 32336, 35405, 20141, 24569, 31691, 35421, 35479, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35944, 22795, 21605, 33647, 35877, 35513, 30962, 35529, 34073, 35557, 24035, 24035, 20405, 31107, 23114, 23114, 23114, 35590, 34713, 23511, 23511, 23511, 35641, 19803, 29408, 32937, 25298, 24035, 35657, 23115, 27849, 24760, 35679, 26205, 22468, 23511, 35700, 24907, 24901, 35075, 31893, 34980, 24035, 24035, 24035, 24035, 23113, 35009, 23114, 23114, 23114, 28618, 35716, 30970, 23511, 23511, 23511, 34585, 23215, 24035, 24035, 24035, 24036, 35735, 23114, 23114, 23114, 27105, 35756, 35790, 23511, 23511, 23511, 35254, 35446, 24035, 24035, 31223, 35809, 23114, 23114, 23036, 36825, 35830, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 31031, 20355, 19872, 33903, 23266, 24036, 23114, 28686, 19829, 26577, 26597, 20211, 23008, 23424, 20208, 24711, 31065, 24486, 26578, 27685, 20141, 19773, 35851, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36307, 19288, 21605, 35494, 19702, 32618, 33437, 31507, 29939, 25117, 24035, 27939, 24036, 27869, 23114, 26829, 23114, 22420, 23494, 23511, 33132, 23511, 28306, 19803, 24035, 34832, 24035, 24035, 26576, 23114, 25153, 23114, 23114, 33811, 22468, 23511, 23511, 35911, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35929, 19288, 21605, 25860, 23112, 36185, 23511, 36201, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 26748, 24035, 24035, 24035, 24035, 24035, 36249, 23114, 23114, 23114, 23114, 28618, 28835, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 27151, 24035, 26760, 23114, 27989, 23114, 23114, 36268, 20271, 23511, 24436, 23511, 29703, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36292, 19288, 21605, 36503, 21922, 32618, 34534, 31507, 36522, 24035, 33793, 24035, 35864, 23114, 23114, 36555, 23417, 22420, 23511, 23511, 36574, 26020, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 36592, 24035, 24035, 36625, 24035, 24035, 23113, 23114, 32961, 23114, 23114, 29618, 29700, 23511, 29086, 23511, 23511, 34585, 20402, 36644, 24035, 24035, 24036, 29740, 23114, 23114, 23114, 29065, 36663, 31527, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 31451, 23112, 36684, 23511, 36700, 29939, 24035, 24035, 24035, 30185, 23114, 23114, 23114, 27526, 22420, 23511, 23511, 23511, 32865, 28306, 19803, 36743, 24035, 27017, 24035, 26576, 27535, 23114, 31432, 23114, 33811, 22468, 33271, 23511, 32128, 23511, 23512, 24694, 24035, 27196, 24035, 24035, 24035, 23113, 32459, 23114, 23114, 23114, 28618, 29700, 33829, 36762, 23511, 23511, 34585, 20402, 24035, 36746, 24035, 29722, 23114, 23114, 34437, 23114, 34907, 20271, 23511, 23511, 18801, 23511, 23206, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 36837, 24035, 24035, 33739, 23114, 23114, 25094, 23511, 23261, 23628, 24035, 36780, 23111, 24073, 19874, 27078, 35344, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22720, 19288, 36799, 36866, 17466, 36890, 36864, 21991, 22211, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17631, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22705, 19288, 19457, 36866, 17466, 36890, 36866, 19375, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36124, 19288, 36951, 36866, 17466, 36890, 36866, 21991, 22404, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18567, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36979, 36995, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18027, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 21529, 24035, 23112, 23033, 23511, 31507, 25377, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 37040, 23511, 23511, 23511, 23511, 28086, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 37079, 23511, 23511, 23511, 23511, 23512, 34766, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 37112, 37160, 18469, 36866, 17466, 36890, 36866, 17656, 37174, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18537, 22984, 17553, 17572, 22285, 18780, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 0, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 127011, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2576384, 2215936, 2215936, 2215936, 2416640, 2424832, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2543616, 2215936, 2215936, 2215936, 2215936, 2215936, 2629632, 2215936, 2617344, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2691072, 2215936, 2707456, 2215936, 2715648, 2215936, 2723840, 2764800, 2215936, 2215936, 2797568, 2215936, 2822144, 2215936, 2215936, 2854912, 2215936, 2215936, 2215936, 2912256, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 180224, 0, 0, 2174976, 0, 0, 2170880, 2617344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2691072, 2170880, 2707456, 2170880, 2715648, 2170880, 2723840, 2764800, 2170880, 2170880, 2797568, 2170880, 2170880, 2797568, 2170880, 2822144, 2170880, 2170880, 2854912, 2170880, 2170880, 2170880, 2912256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2609152, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2654208, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 184599, 280, 0, 2174976, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 544, 0, 546, 0, 0, 2179072, 0, 0, 0, 552, 0, 0, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2158592, 2158592, 2232320, 2232320, 0, 2240512, 2240512, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 2768896, 2789376, 2813952, 2170880, 2170880, 2170880, 2875392, 2904064, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 167936, 0, 0, 0, 0, 2174976, 0, 0, 2215936, 2215936, 2514944, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2592768, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 32768, 0, 0, 0, 0, 0, 2174976, 32768, 0, 2633728, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2711552, 2215936, 2215936, 2215936, 2215936, 2215936, 2760704, 2768896, 2789376, 2813952, 2215936, 2215936, 2215936, 2875392, 2904064, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 65819, 2215936, 2215936, 3031040, 2215936, 3055616, 2215936, 2215936, 2215936, 2215936, 3092480, 2215936, 2215936, 3125248, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2170880, 2170880, 2494464, 2170880, 2170880, 0, 0, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 2699264, 2170880, 2727936, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3026944, 2170880, 2170880, 3063808, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 2379776, 2215936, 2523136, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2596864, 2215936, 2621440, 2215936, 2215936, 2641920, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 548, 0, 0, 0, 0, 287, 2170880, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2699264, 2215936, 2727936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2879488, 2215936, 2916352, 2215936, 2215936, 0, 0, 0, 0, 188416, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 0, 2171019, 2171019, 2171019, 2400395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3031179, 2171019, 3055755, 2171019, 2171019, 2215936, 3133440, 2215936, 2215936, 2215936, 3162112, 2215936, 2215936, 3182592, 3186688, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2523275, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2597003, 2171019, 2621579, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 4337664, 28, 2170880, 2170880, 2170880, 2629632, 2170880, 2170880, 2170880, 2170880, 2719744, 2744320, 2170880, 2170880, 2170880, 2834432, 2838528, 2170880, 2908160, 2170880, 2170880, 2936832, 2215936, 2215936, 2215936, 2215936, 2719744, 2744320, 2215936, 2215936, 2215936, 2834432, 2838528, 2215936, 2908160, 2215936, 2215936, 2936832, 2215936, 2215936, 2985984, 2215936, 2994176, 2215936, 2215936, 3014656, 2215936, 3059712, 3076096, 3088384, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2445312, 2215936, 2465792, 2473984, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2171019, 2494603, 2171019, 2171019, 2215936, 2215936, 2215936, 3215360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3016168, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 124, 124, 0, 128, 128, 2170880, 2170880, 2170880, 3215360, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2535424, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 0, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2170880, 2170880, 3170304, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 2215936, 2215936, 2215936, 2535424, 2539520, 2215936, 2215936, 2588672, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 136, 0, 2215936, 2215936, 2920448, 2215936, 2215936, 2215936, 2990080, 2215936, 2215936, 2215936, 2215936, 3051520, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3108864, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3026944, 2215936, 2215936, 3063808, 2215936, 2215936, 3112960, 2215936, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2537049, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 1508, 2170880, 2170880, 2170880, 1512, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2686976, 2748416, 2170880, 2170880, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3121152, 2170880, 2170880, 3145728, 3158016, 3166208, 2170880, 2420736, 2428928, 2170880, 2478080, 2170880, 2170880, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 0, 0, 3145728, 3158016, 3166208, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 0, 2170880, 2215936, 2215936, 2580480, 2215936, 2605056, 2637824, 2215936, 2215936, 2686976, 2748416, 2215936, 2215936, 2215936, 2924544, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 286, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 1625, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 647, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2686976, 0, 0, 2748416, 2170880, 2170880, 0, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 0, 0, 28, 28, 2170880, 3141632, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2170880, 2420736, 2428928, 2752512, 2756608, 0, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2170880, 3141632, 2170880, 2170880, 2490368, 2215936, 2490368, 2215936, 2215936, 2215936, 2547712, 2555904, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 245760, 0, 3129344, 2170880, 2170880, 2490368, 2170880, 2170880, 2170880, 0, 0, 2547712, 2555904, 2170880, 2170880, 2170880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 45056, 0, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1482, 97, 97, 97, 97, 97, 97, 97, 1354, 97, 97, 97, 97, 97, 97, 97, 97, 1148, 97, 97, 97, 97, 97, 97, 97, 2584576, 2170880, 2170880, 1512, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2170880, 2850816, 2170880, 2170880, 2170880, 3022848, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 2215936, 3022848, 2170880, 2441216, 2170880, 2527232, 0, 0, 2170880, 2600960, 2170880, 0, 2850816, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2596864, 2170880, 2621440, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 3022848, 2170880, 2519040, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2514944, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2519040, 0, 2024, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 2024, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 2170880, 2215936, 2650112, 2965504, 2215936, 0, 0, 2170880, 2650112, 2965504, 2170880, 2551808, 2170880, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 141, 45, 45, 67, 67, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 0, 2551808, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2977792, 2977792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 29, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 49172, 0, 0, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 4256099, 4256099, 24, 24, 0, 28, 28, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 0, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 2170880, 2547712, 2555904, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2215936, 2215936, 543, 543, 545, 545, 0, 0, 2179072, 0, 550, 551, 551, 0, 287, 2171166, 2171166, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 645, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 149, 2584576, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2519040, 0, 0, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 0, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 53264, 18, 49172, 57366, 24, 155648, 28, 102432, 155648, 155687, 114730, 106539, 0, 0, 155648, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 0, 0, 2220032, 0, 94208, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 208896, 18, 278528, 24, 24, 0, 28, 28, 53264, 18, 159765, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 139394, 28, 28, 102432, 131, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 32768, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 546, 0, 0, 2183168, 0, 0, 552, 832, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2654208, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 1084, 0, 1088, 0, 1092, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 937, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 644, 0, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 826, 0, 828, 0, 0, 2183168, 0, 0, 830, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2170880, 2170880, 2633728, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 53264, 18, 49172, 57366, 24, 8192, 28, 172066, 172032, 110630, 172066, 106539, 0, 0, 172032, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 102432, 0, 98304, 0, 0, 2220032, 110630, 0, 0, 0, 0, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 45056, 0, 0, 0, 53264, 18, 49172, 57366, 25, 8192, 30, 102432, 0, 110630, 114730, 106539, 0, 0, 176219, 53264, 18, 18, 49172, 0, 57366, 0, 124, 124, 124, 0, 128, 128, 128, 128, 102432, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 546, 0, 0, 2183168, 0, 65536, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 143, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1824, 67, 1826, 67, 67, 67, 67, 17, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 120, 121, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 2179072, 548, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2033, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 978, 0, 546, 70179, 0, 2183168, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1013, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 67, 67, 67, 483, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1359, 97, 97, 97, 67, 67, 1584, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 45, 45, 45, 45, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 774, 67, 67, 1713, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1723, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 45, 1559, 45, 45, 1561, 45, 45, 45, 45, 45, 45, 45, 687, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1771, 1772, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 1827, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 1614, 97, 97, 97, 97, 97, 603, 97, 97, 605, 97, 97, 608, 97, 97, 97, 97, 0, 1532, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 450, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 1839, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 1883, 97, 1885, 97, 0, 1888, 0, 97, 97, 0, 97, 97, 1848, 97, 97, 97, 97, 1852, 45, 45, 45, 45, 45, 45, 45, 384, 391, 45, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 45, 45, 45, 45, 1237, 45, 45, 45, 45, 45, 45, 67, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1951, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1963, 97, 2023, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 1994, 67, 1995, 67, 67, 67, 67, 67, 67, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 137, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2793472, 2805760, 2170880, 2830336, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 281, 549, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2031, 2032, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 0, 546, 70179, 549, 549, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1858, 45, 641, 0, 0, 0, 0, 41606, 926, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 456, 67, 0, 0, 0, 1313, 0, 0, 0, 1096, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1110, 97, 97, 97, 97, 67, 67, 67, 67, 1301, 1476, 0, 0, 0, 0, 1307, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1486, 97, 1487, 97, 1313, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 97, 45, 1853, 45, 1855, 45, 45, 45, 45, 53264, 18, 49172, 57366, 26, 8192, 31, 102432, 0, 110630, 114730, 106539, 0, 0, 225368, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 18, 49172, 163840, 57366, 0, 24, 24, 229376, 0, 28, 28, 28, 229376, 102432, 0, 0, 0, 0, 2220167, 110630, 0, 0, 0, 114730, 106539, 0, 2171019, 2171019, 2171019, 2171019, 2592907, 2171019, 2171019, 2171019, 2171019, 2633867, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2654347, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3117195, 2171019, 2171019, 2171019, 2171019, 2240641, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 140, 2171019, 2171019, 2171019, 2416779, 2424971, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2617483, 2171019, 2171019, 2642059, 2171019, 2171019, 2171019, 2699403, 2171019, 2728075, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3215499, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2171019, 2822283, 2171019, 2171019, 2855051, 2171019, 2171019, 2171019, 2912395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3002507, 2171019, 2171019, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2171166, 2171166, 2416926, 2425118, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2576670, 2171166, 2617630, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2691358, 2171166, 2707742, 2171166, 2715934, 2171166, 2724126, 2765086, 2171166, 2171166, 2797854, 2171166, 2822430, 2171166, 2171166, 2855198, 2171166, 2171166, 2171166, 2912542, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2793758, 2806046, 2171166, 2830622, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3109150, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2543902, 2171166, 2171166, 2171166, 2171166, 2171166, 2629918, 2793611, 2805899, 2171019, 2830475, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2171166, 2171166, 2171166, 2400542, 2171166, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 0, 2171166, 2920734, 2171166, 2171166, 2171166, 2990366, 2171166, 2171166, 2171166, 2171166, 3117342, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 53264, 0, 18, 18, 4329472, 2232445, 0, 2240641, 4337664, 2711691, 2171019, 2171019, 2171019, 2171019, 2171019, 2760843, 2769035, 2789515, 2814091, 2171019, 2171019, 2171019, 2875531, 2904203, 2171019, 2171019, 3092619, 2171019, 2171019, 3125387, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3199115, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2793472, 2805760, 2215936, 2830336, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2494464, 2170880, 2170880, 2171166, 2171166, 2634014, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2711838, 2171166, 2171166, 2171166, 2171166, 2171166, 2760990, 2769182, 2789662, 2814238, 2171166, 2171166, 2171166, 2875678, 2904350, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3199262, 2171166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379915, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2445451, 2171019, 2465931, 2474123, 2171019, 2171019, 3113099, 2171019, 2171019, 3133579, 2171019, 2171019, 2171019, 3162251, 2171019, 2171019, 3182731, 3186827, 2171019, 2379776, 2879627, 2171019, 2916491, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3027083, 2171019, 2171019, 3063947, 2699550, 2171166, 2728222, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2879774, 2171166, 2916638, 2171166, 2171166, 2171166, 2171166, 2171166, 2609438, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2654494, 2171166, 2171166, 2171166, 2171166, 2171166, 2445598, 2171166, 2466078, 2474270, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2523422, 2171019, 2437259, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2543755, 2171019, 2171019, 2171019, 2584715, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2908299, 2171019, 2171019, 2936971, 2171019, 2171019, 2986123, 2171019, 2994315, 2171019, 2171019, 3014795, 2171019, 3059851, 3076235, 3088523, 2171166, 2171166, 2986270, 2171166, 2994462, 2171166, 2171166, 3014942, 2171166, 3059998, 3076382, 3088670, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3027230, 2171166, 2171166, 3064094, 2171166, 2171166, 3113246, 2171166, 2171166, 3133726, 2506891, 2171019, 2171019, 2171019, 2535563, 2539659, 2171019, 2171019, 2588811, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2691211, 2171019, 2707595, 2171019, 2715787, 2171019, 2723979, 2764939, 2171019, 2171019, 2797707, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2453790, 2457886, 2171166, 2171166, 2171166, 2486558, 2171166, 2171166, 2507038, 2171166, 2171166, 2171166, 2535710, 2539806, 2171166, 2171166, 2588958, 2171166, 2171166, 2171166, 2171166, 2515230, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2593054, 2171166, 2171166, 2171166, 2171166, 3051806, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3170590, 0, 2388107, 2392203, 2171019, 2171019, 2433163, 2171019, 2461835, 2171019, 2171019, 2171019, 2510987, 2171019, 2171019, 2171019, 2171019, 2580619, 2171019, 2605195, 2637963, 2171019, 2171019, 2171019, 2920587, 2171019, 2171019, 2171019, 2990219, 2171019, 2171019, 2171019, 2171019, 3051659, 2171019, 2171019, 2171019, 2453643, 2457739, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2515083, 2171019, 2171019, 2171019, 2171019, 2646155, 2670731, 2752651, 2756747, 2846859, 2961547, 2171019, 2998411, 2171019, 3010699, 2171019, 2171019, 2687115, 2748555, 2171019, 2171019, 2171019, 2924683, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3121291, 2171019, 2171019, 2171019, 3170443, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 3145867, 3158155, 3166347, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 553, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2388254, 2392350, 2171166, 2171166, 2433310, 2171166, 2461982, 2171166, 2171166, 2171166, 2511134, 2171166, 2171166, 0, 2171166, 2171166, 2580766, 2171166, 2605342, 2638110, 2171166, 2171166, 2171166, 2171166, 3031326, 2171166, 3055902, 2171166, 2171166, 2171166, 2171166, 3092766, 2171166, 2171166, 3125534, 2171166, 2171166, 2171166, 3162398, 2171166, 2171166, 3182878, 3186974, 2171166, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 3109003, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2171166, 2687262, 0, 0, 2748702, 2171166, 2171166, 0, 2171166, 2924830, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2597150, 2171166, 2621726, 2171166, 2171166, 2642206, 2171166, 2171166, 2171166, 2171166, 3121438, 2171166, 2171166, 3146014, 3158302, 3166494, 2171019, 2420875, 2429067, 2171019, 2478219, 2171019, 2171019, 2171019, 2171019, 2547851, 2556043, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3129483, 2215936, 2171019, 3141771, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2171166, 2421022, 2429214, 2171166, 2478366, 2171166, 2171166, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2646302, 2670878, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 0, 45, 45, 45, 45, 45, 1405, 1406, 45, 45, 45, 45, 1409, 45, 45, 45, 45, 45, 1415, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1238, 45, 45, 45, 45, 67, 2752798, 2756894, 0, 2847006, 2961694, 2171166, 2998558, 2171166, 3010846, 2171166, 2171166, 2171166, 3141918, 2171019, 2171019, 2490507, 3129344, 2171166, 2171166, 2490654, 2171166, 2171166, 2171166, 0, 0, 2547998, 2556190, 2171166, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 167, 45, 45, 45, 45, 185, 187, 45, 45, 198, 45, 45, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3129630, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2576523, 2171019, 2171019, 2171019, 2171019, 2171019, 2609291, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2171166, 2171166, 2494750, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 147, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 3002654, 2171166, 2171166, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2175257, 0, 0, 2584862, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2441355, 2171019, 2527371, 2171019, 2601099, 2171019, 2850955, 2171019, 2171019, 2171019, 3022987, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 69632, 287, 2170880, 2215936, 3022848, 2171166, 2441502, 2171166, 2527518, 0, 0, 2171166, 2601246, 2171166, 0, 2851102, 2171166, 2171166, 2171166, 2171166, 2720030, 2744606, 2171166, 2171166, 2171166, 2834718, 2838814, 2171166, 2908446, 2171166, 2171166, 2937118, 3023134, 2171019, 2519179, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 3215646, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2486411, 2171019, 2171019, 2171019, 2629771, 2171019, 2171019, 2171019, 2171019, 2719883, 2744459, 2171019, 2171019, 2171019, 2834571, 2838667, 2171019, 2519326, 0, 0, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 2396299, 2171019, 2171019, 2171019, 2171019, 3018891, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396446, 0, 0, 2171166, 2171166, 2171166, 2171166, 3019038, 2171019, 2650251, 2965643, 2171019, 2215936, 2650112, 2965504, 2215936, 0, 0, 2171166, 2650398, 2965790, 2171166, 2551947, 2171019, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 144, 45, 45, 67, 67, 67, 67, 67, 228, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1929, 97, 97, 97, 97, 0, 0, 0, 2552094, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2977931, 2977792, 2978078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1321, 97, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 140, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2584576, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 140, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3215360, 544, 0, 0, 0, 544, 0, 546, 0, 0, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 0, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 552, 0, 0, 0, 552, 0, 287, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 644, 0, 2215936, 2215936, 3170304, 544, 0, 546, 0, 552, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 140, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 249856, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 151640, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 253952, 110630, 114730, 106539, 0, 0, 32856, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 192512, 53264, 18, 18, 49172, 0, 57366, 0, 2232445, 184320, 2232445, 0, 2240641, 2240641, 184320, 2240641, 102432, 0, 0, 0, 221184, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3108864, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 0, 0, 0, 45056, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 127, 127, 53264, 18, 49172, 258071, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 204800, 53264, 18, 49172, 57366, 24, 27, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 33, 0, 33, 33, 33, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2170880, 2170880, 2170880, 2416640, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2030, 45, 45, 45, 45, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1699, 67, 67, 67, 67, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 1358, 97, 97, 97, 641, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 45, 45, 45, 0, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1680, 45, 45, 45, 641, 0, 924, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 45, 45, 45, 45, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 282, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 2028, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1767, 67, 67, 67, 0, 0, 0, 0, 0, 0, 1612, 97, 97, 97, 97, 97, 97, 0, 1785, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1790, 97, 0, 0, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 241664, 2387968, 2392064, 2170880, 2170880, 2433024, 53264, 19, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 274432, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 270336, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 1134711, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 1126440, 1126440, 1126440, 0, 0, 1126400, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 36, 110630, 114730, 106539, 0, 0, 217088, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 94, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 96, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 24666, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 126, 28, 28, 28, 28, 102432, 53264, 122, 123, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 2170880, 2170880, 4256099, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1109, 97, 97, 97, 97, 1113, 132, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 146, 150, 45, 45, 45, 45, 45, 175, 45, 180, 45, 186, 45, 189, 45, 45, 203, 67, 256, 67, 67, 270, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 293, 297, 97, 97, 97, 97, 97, 322, 97, 327, 97, 333, 97, 0, 0, 97, 2026, 0, 2027, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 336, 97, 97, 350, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 2424832, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2617344, 2170880, 45, 439, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 525, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 622, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 1527, 369, 648, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1239, 45, 45, 45, 67, 729, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 762, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 0, 0, 0, 1477, 0, 1086, 0, 0, 0, 1479, 0, 1090, 67, 67, 796, 67, 67, 799, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 67, 67, 811, 67, 67, 67, 67, 67, 816, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 833, 97, 97, 97, 97, 97, 97, 97, 97, 1380, 0, 0, 0, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 45, 45, 45, 45, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 97, 97, 97, 894, 97, 97, 897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1382, 45, 45, 45, 97, 909, 97, 97, 97, 97, 97, 914, 97, 97, 97, 97, 97, 97, 97, 923, 67, 67, 1079, 67, 67, 67, 67, 67, 37689, 1085, 25403, 1089, 66365, 1093, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 148, 1114, 97, 97, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 97, 97, 606, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1173, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 145, 45, 45, 67, 67, 67, 67, 67, 1762, 67, 67, 67, 1766, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1934, 67, 67, 1255, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 67, 67, 67, 67, 1297, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 33344, 97, 97, 97, 1335, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1377, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 670, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 67, 67, 1438, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 0, 0, 0, 1311, 0, 0, 0, 1317, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1322, 97, 97, 1491, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 1553, 45, 1504, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 97, 97, 0, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 1540, 45, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1700, 67, 67, 67, 97, 1648, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1541, 0, 97, 97, 97, 97, 0, 1940, 0, 97, 97, 97, 97, 97, 97, 45, 45, 2011, 45, 45, 45, 2015, 67, 67, 2017, 67, 67, 67, 2021, 97, 67, 67, 812, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 97, 97, 910, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 0, 0, 0, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 1188, 45, 45, 45, 45, 1414, 45, 45, 45, 1417, 45, 1419, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 453, 45, 45, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 1324, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 930, 45, 45, 45, 45, 97, 97, 97, 97, 1378, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 45, 67, 67, 1923, 67, 1925, 67, 67, 1927, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1985, 45, 45, 45, 45, 45, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 45, 946, 45, 45, 950, 45, 45, 45, 0, 97, 97, 97, 1939, 0, 0, 0, 97, 1943, 97, 97, 1945, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 990, 45, 45, 45, 67, 257, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 337, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 2170880, 2170880, 2170880, 2416640, 401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 459, 461, 67, 67, 67, 67, 67, 67, 67, 67, 475, 67, 480, 67, 67, 67, 67, 67, 67, 1054, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 484, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 67, 67, 97, 556, 558, 97, 97, 97, 97, 97, 97, 97, 97, 572, 97, 577, 97, 97, 0, 0, 1896, 97, 97, 97, 97, 97, 97, 1903, 45, 45, 45, 45, 983, 45, 45, 45, 45, 988, 45, 45, 45, 45, 45, 45, 1195, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1549, 45, 45, 45, 45, 45, 581, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1004, 45, 45, 45, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 761, 67, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 1071, 67, 67, 67, 67, 1076, 794, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 544, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 859, 97, 0, 0, 2025, 97, 20480, 97, 97, 2029, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1775, 67, 67, 67, 97, 97, 97, 97, 892, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1515, 97, 993, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 992, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1607, 67, 67, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 97, 45, 1556, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 696, 45, 1596, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 67, 97, 97, 97, 1621, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1346, 97, 97, 97, 97, 1740, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 45, 45, 67, 97, 97, 97, 97, 97, 97, 1836, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1984, 97, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 45, 45, 45, 45, 67, 739, 67, 67, 67, 67, 67, 744, 45, 45, 1909, 45, 45, 45, 45, 45, 45, 45, 67, 1917, 67, 1918, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 67, 67, 67, 67, 67, 97, 1930, 97, 1931, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 1580, 67, 67, 0, 97, 97, 1938, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 699, 45, 45, 45, 704, 45, 45, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 2006, 97, 97, 97, 97, 0, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 722, 723, 45, 45, 45, 45, 45, 45, 2045, 67, 67, 67, 2047, 0, 0, 97, 97, 97, 2051, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1957, 45, 67, 67, 67, 67, 67, 1836, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 67, 67, 1761, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 45, 45, 420, 45, 45, 422, 45, 45, 425, 45, 45, 45, 45, 45, 45, 45, 387, 45, 45, 45, 45, 397, 45, 45, 45, 67, 460, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 515, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 97, 0, 2039, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1426, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1689, 67, 67, 67, 97, 557, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 612, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 896, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 97, 45, 939, 45, 45, 45, 45, 943, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1916, 67, 67, 67, 67, 67, 45, 67, 67, 67, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 1019, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 804, 67, 67, 67, 67, 67, 1077, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2543616, 2170880, 2170880, 2170880, 2170880, 2170880, 2629632, 1169, 97, 1171, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 936, 45, 45, 67, 67, 214, 67, 220, 67, 67, 233, 67, 243, 67, 248, 67, 67, 67, 67, 67, 67, 1298, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1617, 97, 0, 0, 0, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 45, 45, 45, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 1281, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 776, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 907, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 690, 45, 45, 695, 45, 45, 67, 67, 67, 67, 67, 1465, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1712, 97, 97, 97, 97, 1741, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1924, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1983, 97, 97, 45, 45, 1987, 45, 1988, 45, 0, 97, 97, 97, 97, 0, 0, 0, 1942, 97, 97, 97, 97, 97, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 711, 45, 45, 153, 45, 45, 166, 45, 176, 45, 181, 45, 45, 188, 191, 196, 45, 204, 255, 258, 263, 67, 271, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 97, 97, 294, 97, 300, 97, 97, 313, 97, 323, 97, 328, 97, 97, 335, 338, 343, 97, 351, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1411, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 67, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1263, 67, 67, 67, 67, 67, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1526, 97, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 0, 97, 97, 1796, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1744, 45, 45, 45, 369, 0, 651, 45, 653, 45, 654, 45, 656, 45, 45, 45, 660, 45, 45, 45, 45, 1558, 45, 45, 45, 45, 45, 45, 45, 45, 1566, 45, 45, 681, 45, 683, 45, 45, 45, 45, 45, 45, 45, 45, 691, 692, 694, 45, 45, 45, 716, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 709, 45, 45, 712, 45, 714, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 726, 45, 45, 45, 733, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 747, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 1613, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 67, 764, 67, 67, 67, 67, 768, 67, 770, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1977, 67, 778, 779, 781, 67, 67, 67, 67, 67, 67, 788, 789, 67, 67, 792, 793, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 67, 67, 824, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 836, 97, 838, 97, 839, 97, 841, 97, 97, 97, 845, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 97, 97, 0, 1728, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1802, 45, 97, 97, 862, 97, 97, 97, 97, 866, 97, 868, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1788, 97, 97, 97, 0, 0, 97, 97, 876, 877, 879, 97, 97, 97, 97, 97, 97, 886, 887, 97, 97, 890, 891, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1646, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 97, 97, 922, 923, 45, 955, 45, 957, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 195, 45, 45, 45, 45, 45, 981, 982, 45, 45, 45, 45, 45, 45, 989, 45, 45, 45, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 67, 67, 1031, 67, 1033, 67, 67, 67, 67, 67, 67, 67, 817, 819, 67, 67, 67, 67, 67, 37689, 544, 67, 1065, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 1078, 67, 67, 1081, 1082, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2437406, 2171166, 2171166, 97, 1115, 97, 1117, 97, 97, 97, 97, 97, 97, 1125, 97, 1127, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 1644, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 1642, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1159, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1502, 97, 97, 97, 97, 97, 1172, 97, 97, 1175, 1176, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 935, 45, 45, 45, 1233, 45, 45, 45, 1236, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1873, 67, 67, 45, 45, 1218, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 1230, 45, 45, 67, 67, 215, 219, 222, 67, 230, 67, 67, 244, 246, 249, 67, 67, 67, 67, 67, 67, 1882, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1904, 45, 1905, 45, 67, 67, 67, 67, 67, 1258, 67, 1260, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 67, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 67, 818, 67, 67, 67, 67, 67, 67, 37689, 544, 67, 67, 1295, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 97, 97, 97, 1326, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 97, 97, 97, 97, 97, 1338, 97, 1340, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 1503, 97, 1363, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 578, 97, 1375, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 45, 45, 45, 45, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1778, 97, 97, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 97, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 1554, 45, 1570, 1571, 45, 67, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 67, 1061, 67, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 1594, 67, 67, 67, 67, 67, 97, 2038, 0, 97, 97, 97, 97, 97, 2044, 45, 45, 45, 995, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 45, 45, 45, 1809, 45, 1811, 45, 45, 45, 45, 45, 67, 1610, 1611, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 1618, 1647, 1649, 97, 97, 97, 1652, 97, 1654, 1655, 97, 0, 45, 45, 45, 1658, 45, 45, 67, 67, 216, 67, 67, 67, 67, 234, 67, 67, 67, 67, 252, 254, 1845, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 947, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1881, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1902, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1921, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 0, 97, 1937, 97, 97, 1940, 0, 0, 97, 97, 97, 97, 97, 97, 1947, 1948, 1949, 45, 45, 45, 1952, 45, 1954, 45, 45, 45, 45, 1959, 1960, 1961, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 67, 67, 1964, 67, 1966, 67, 67, 67, 67, 1971, 1972, 1973, 97, 0, 0, 0, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 884, 97, 97, 97, 889, 97, 97, 1978, 97, 0, 0, 1981, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 736, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 45, 67, 67, 67, 67, 0, 2049, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 933, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 97, 97, 288, 97, 97, 97, 97, 97, 97, 317, 97, 97, 97, 97, 97, 97, 0, 0, 97, 1787, 97, 97, 97, 97, 0, 0, 45, 45, 378, 45, 45, 45, 45, 45, 390, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 431, 433, 45, 45, 45, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 67, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 632, 97, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 67, 97, 97, 97, 97, 97, 97, 1837, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1897, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 97, 2010, 45, 45, 45, 45, 45, 45, 2016, 67, 67, 67, 67, 67, 67, 2022, 45, 2046, 67, 67, 67, 0, 0, 2050, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 932, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 45, 45, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 701, 702, 45, 45, 705, 706, 45, 45, 45, 45, 45, 45, 703, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 45, 45, 45, 45, 45, 725, 45, 45, 45, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 834, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1799, 97, 97, 45, 45, 45, 1569, 45, 45, 45, 1572, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1306, 0, 67, 67, 67, 1598, 67, 67, 67, 67, 67, 67, 67, 67, 1606, 67, 67, 1609, 97, 97, 97, 1650, 97, 97, 1653, 97, 97, 97, 0, 45, 45, 1657, 45, 45, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1421, 45, 45, 45, 1703, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1711, 97, 97, 0, 1895, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 958, 45, 960, 45, 45, 45, 45, 45, 45, 45, 45, 1913, 45, 45, 1915, 67, 67, 67, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 481, 67, 45, 1749, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 45, 45, 45, 45, 173, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1773, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1886, 0, 0, 0, 97, 97, 67, 2035, 2036, 67, 67, 97, 0, 0, 97, 2041, 2042, 97, 97, 45, 45, 45, 45, 1662, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1397, 45, 45, 45, 45, 151, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 437, 205, 45, 67, 67, 67, 218, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 67, 97, 97, 97, 97, 298, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 97, 97, 97, 97, 97, 97, 352, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 365, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1427, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1435, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1037, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1919, 67, 1759, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 45, 154, 45, 162, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 964, 45, 45, 45, 206, 45, 67, 67, 67, 67, 221, 67, 229, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 67, 785, 67, 67, 67, 67, 67, 67, 67, 67, 802, 67, 67, 67, 807, 67, 67, 67, 97, 97, 97, 97, 353, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 402, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 45, 45, 674, 45, 45, 45, 45, 45, 45, 45, 45, 389, 45, 394, 45, 45, 398, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 447, 45, 45, 45, 454, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 488, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 67, 67, 67, 67, 67, 1774, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 67, 67, 523, 67, 67, 527, 67, 67, 67, 67, 67, 533, 67, 67, 67, 540, 97, 97, 97, 585, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 97, 97, 97, 97, 1784, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 620, 97, 97, 624, 97, 97, 97, 97, 97, 630, 97, 97, 97, 637, 713, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 45, 45, 45, 1197, 45, 45, 45, 45, 45, 45, 45, 45, 730, 732, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1581, 67, 45, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 775, 67, 67, 67, 67, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 67, 67, 67, 1080, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 287, 0, 2379776, 2170880, 2170880, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 920, 97, 97, 0, 0, 0, 0, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 45, 959, 45, 45, 45, 45, 45, 45, 45, 45, 45, 184, 45, 45, 45, 45, 202, 45, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1266, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1279, 67, 67, 67, 67, 67, 272, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1293, 67, 67, 67, 1296, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 281, 94, 0, 0, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 0, 97, 1376, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1384, 45, 45, 67, 208, 67, 67, 67, 67, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1069, 1070, 67, 67, 67, 67, 67, 67, 67, 0, 37140, 24854, 0, 0, 0, 0, 41098, 65821, 45, 1423, 45, 45, 45, 45, 45, 45, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1083, 37689, 0, 25403, 0, 66365, 0, 0, 0, 1436, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1830, 67, 1452, 1453, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 67, 67, 1461, 67, 67, 67, 1464, 67, 1466, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 1587, 67, 67, 67, 67, 67, 67, 67, 67, 1595, 1489, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 1505, 1506, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 1164, 97, 97, 97, 97, 97, 1516, 97, 97, 97, 1519, 97, 1521, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1301, 0, 0, 0, 1307, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 919, 97, 97, 97, 0, 97, 97, 97, 1781, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1792, 1860, 45, 1862, 1863, 45, 1865, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1875, 67, 1877, 1878, 67, 1880, 67, 97, 97, 97, 97, 97, 1887, 0, 1889, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 237568, 0, 367, 0, 97, 1893, 0, 0, 0, 97, 1898, 1899, 97, 1901, 97, 45, 45, 45, 45, 45, 2014, 45, 67, 67, 67, 67, 67, 2020, 67, 97, 1989, 45, 1990, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1996, 67, 1997, 67, 67, 67, 67, 67, 273, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 2005, 0, 97, 2007, 97, 97, 18, 0, 139621, 0, 0, 0, 642, 0, 133, 364, 0, 0, 367, 41606, 0, 97, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 209, 67, 67, 67, 223, 67, 67, 67, 67, 67, 67, 67, 67, 67, 786, 67, 67, 67, 791, 67, 67, 45, 45, 940, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1016, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 142, 45, 45, 67, 210, 67, 67, 67, 225, 67, 67, 239, 67, 67, 67, 250, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 476, 67, 67, 67, 67, 67, 67, 67, 1709, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1843, 0, 67, 259, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 289, 97, 97, 97, 303, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 97, 339, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 358, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1953, 45, 1955, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1687, 1688, 67, 67, 67, 67, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1203, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 477, 67, 67, 67, 67, 67, 67, 67, 1970, 97, 97, 97, 1974, 0, 0, 0, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1372, 97, 97, 97, 97, 67, 522, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 536, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 574, 97, 97, 97, 97, 97, 301, 97, 309, 97, 97, 97, 97, 97, 97, 97, 97, 97, 900, 97, 97, 97, 905, 97, 97, 97, 619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 633, 97, 97, 18, 0, 139621, 0, 0, 362, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 664, 67, 67, 67, 67, 750, 751, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1057, 1058, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 67, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 902, 97, 97, 97, 97, 67, 67, 1051, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1302, 0, 0, 0, 1308, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1139, 97, 97, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 1161, 97, 97, 97, 97, 97, 1166, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 1257, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 97, 97, 1337, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1630, 97, 67, 1474, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380062, 2171166, 2171166, 97, 1529, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 45, 45, 67, 67, 67, 67, 1707, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1891, 1739, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 1200, 45, 45, 45, 45, 97, 97, 1894, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 45, 45, 45, 67, 67, 1965, 67, 1967, 67, 67, 67, 97, 97, 97, 97, 0, 1976, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 97, 97, 1979, 0, 0, 97, 1982, 97, 97, 97, 1986, 45, 45, 45, 45, 45, 735, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 2000, 97, 97, 97, 2002, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1798, 97, 97, 97, 45, 45, 45, 2034, 67, 67, 67, 67, 97, 0, 0, 2040, 97, 97, 97, 97, 45, 45, 45, 45, 1752, 45, 45, 45, 1753, 1754, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 45, 45, 438, 45, 45, 45, 45, 45, 445, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1430, 67, 67, 67, 67, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 531, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1096, 97, 97, 97, 621, 97, 97, 97, 97, 97, 628, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 45, 942, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 708, 45, 45, 45, 45, 763, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 809, 810, 67, 67, 67, 67, 783, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1303, 0, 0, 0, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 45, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 67, 67, 67, 67, 1027, 67, 67, 67, 67, 1032, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1097, 1064, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 67, 1098, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 331, 97, 97, 97, 97, 1158, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 1309, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1374, 97, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1240, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1252, 67, 97, 97, 97, 1635, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1800, 97, 45, 45, 45, 97, 97, 1793, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1743, 45, 45, 45, 1746, 45, 0, 97, 97, 97, 97, 97, 1851, 97, 45, 45, 45, 45, 1856, 45, 45, 45, 45, 1864, 45, 45, 67, 67, 1869, 67, 67, 67, 67, 1874, 67, 0, 97, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 211, 67, 67, 67, 67, 67, 67, 240, 67, 67, 67, 67, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 67, 67, 268, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 290, 97, 97, 97, 305, 97, 97, 319, 97, 97, 97, 330, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 643, 367, 41606, 97, 97, 348, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 395, 45, 45, 45, 400, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 45, 972, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1086, 25403, 1090, 66365, 1094, 0, 0, 97, 843, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 1121, 97, 97, 97, 97, 1126, 97, 97, 97, 97, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1400, 45, 67, 67, 67, 1011, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1304, 0, 0, 0, 1190, 45, 45, 1193, 1194, 45, 45, 45, 45, 45, 1199, 45, 1201, 45, 45, 45, 45, 1911, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 67, 67, 45, 1205, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1217, 45, 45, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 1229, 45, 45, 45, 1388, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1574, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 1254, 67, 67, 67, 67, 67, 1259, 67, 1261, 67, 67, 67, 67, 1265, 67, 67, 67, 67, 67, 67, 1708, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 1289, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1087, 25403, 1091, 66365, 1095, 0, 0, 97, 97, 97, 97, 1339, 97, 1341, 97, 97, 97, 97, 1345, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 573, 97, 97, 97, 97, 97, 97, 1717, 97, 0, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1329, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 97, 97, 97, 1365, 97, 97, 97, 97, 1369, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1399, 45, 45, 45, 1413, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1669, 45, 1422, 45, 45, 1425, 45, 45, 1428, 45, 1429, 67, 67, 67, 67, 67, 67, 67, 67, 1468, 67, 67, 67, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 539, 67, 67, 1475, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 97, 97, 1530, 97, 0, 45, 45, 1534, 45, 45, 45, 45, 45, 45, 45, 45, 1956, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 67, 67, 1601, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 67, 1632, 97, 1634, 0, 97, 97, 97, 1640, 97, 97, 97, 1643, 97, 97, 1645, 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1660, 1661, 45, 45, 45, 45, 1665, 1666, 45, 45, 45, 45, 45, 1670, 1692, 1693, 67, 67, 67, 67, 67, 1697, 67, 67, 67, 67, 67, 67, 67, 1702, 97, 97, 1714, 1715, 97, 97, 97, 97, 0, 1721, 1722, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 97, 97, 1362, 1726, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 1734, 97, 97, 97, 97, 97, 848, 849, 97, 97, 97, 97, 856, 97, 97, 97, 97, 97, 354, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 45, 45, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1681, 45, 0, 1846, 97, 97, 97, 97, 97, 97, 45, 45, 1854, 45, 45, 45, 45, 1859, 67, 67, 67, 1879, 67, 67, 97, 97, 1884, 97, 97, 0, 0, 0, 97, 97, 97, 1105, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 1347, 97, 1892, 97, 0, 0, 0, 97, 97, 97, 1900, 97, 97, 45, 45, 45, 45, 45, 997, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1002, 45, 45, 1005, 1006, 45, 67, 67, 67, 67, 67, 1926, 67, 67, 1928, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1737, 97, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1944, 97, 97, 1946, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 190, 45, 45, 45, 152, 155, 45, 163, 45, 45, 177, 179, 182, 45, 45, 45, 193, 197, 45, 45, 45, 1672, 45, 45, 45, 45, 45, 1677, 45, 1679, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 67, 260, 264, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 295, 299, 302, 97, 310, 97, 97, 324, 326, 329, 97, 97, 97, 0, 97, 97, 1639, 0, 1641, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 97, 1523, 97, 97, 97, 97, 97, 97, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 97, 97, 312, 97, 97, 97, 97, 97, 97, 97, 97, 1123, 97, 97, 97, 97, 97, 97, 97, 340, 344, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 373, 375, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 435, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1410, 45, 45, 45, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 67, 67, 67, 67, 1969, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 2064, 2065, 0, 2066, 45, 521, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 465, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1933, 0, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 18, 640, 139621, 358, 641, 0, 0, 0, 0, 364, 0, 0, 367, 0, 618, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 97, 97, 881, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 569, 97, 97, 97, 97, 97, 369, 0, 45, 652, 45, 45, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1432, 67, 67, 67, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 67, 0, 1305, 0, 1311, 0, 1317, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 1724, 97, 97, 97, 777, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 535, 67, 67, 67, 67, 67, 67, 67, 814, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 837, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 97, 97, 97, 0, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1168, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 97, 97, 0, 1637, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1801, 45, 45, 97, 875, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1151, 1152, 97, 97, 97, 67, 67, 67, 1040, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 790, 67, 67, 67, 1180, 0, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 200, 45, 45, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 67, 67, 67, 0, 0, 0, 1481, 0, 1094, 0, 0, 97, 1483, 97, 97, 97, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 1633, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1381, 0, 0, 45, 45, 45, 45, 97, 97, 1727, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 636, 45, 45, 1760, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 67, 67, 1299, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1616, 97, 97, 1803, 45, 45, 45, 45, 1807, 45, 45, 45, 45, 45, 1813, 45, 45, 45, 67, 67, 1684, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 822, 67, 67, 37689, 544, 67, 67, 1818, 67, 67, 67, 67, 1822, 67, 67, 67, 67, 67, 1828, 67, 67, 67, 67, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2012, 2013, 45, 45, 67, 67, 67, 2018, 2019, 67, 67, 97, 67, 97, 97, 97, 1833, 97, 97, 0, 0, 97, 97, 1840, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 1733, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 1849, 97, 97, 97, 45, 45, 45, 45, 45, 1857, 45, 45, 45, 1910, 45, 1912, 45, 45, 1914, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 67, 1020, 67, 45, 1861, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1446, 67, 67, 67, 67, 67, 1876, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1890, 97, 97, 97, 97, 97, 1134, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 97, 97, 97, 580, 1935, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1906, 45, 67, 67, 67, 67, 2048, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 931, 45, 45, 45, 45, 45, 45, 1674, 45, 1676, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1871, 67, 67, 67, 67, 0, 97, 97, 45, 67, 0, 97, 2060, 2061, 0, 2063, 45, 67, 0, 97, 45, 45, 156, 45, 45, 45, 45, 45, 45, 45, 45, 45, 192, 45, 45, 45, 45, 1673, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 429, 45, 45, 45, 45, 67, 67, 67, 269, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 349, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 374, 45, 45, 67, 67, 213, 217, 67, 67, 67, 67, 67, 242, 67, 247, 67, 253, 45, 45, 698, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 399, 45, 45, 0, 0, 0, 0, 925, 41606, 0, 929, 0, 0, 45, 45, 45, 45, 45, 45, 1391, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 436, 45, 67, 67, 67, 67, 1041, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1776, 67, 67, 97, 97, 97, 1099, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 888, 97, 97, 97, 1131, 97, 97, 97, 97, 1135, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 883, 97, 97, 97, 97, 97, 97, 1310, 0, 0, 0, 1316, 0, 0, 0, 0, 1100, 0, 0, 0, 97, 97, 97, 97, 97, 1107, 97, 97, 97, 97, 97, 97, 97, 97, 1343, 97, 97, 97, 97, 97, 97, 1348, 0, 0, 1317, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1868, 67, 1870, 67, 67, 67, 67, 67, 1817, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 823, 67, 37689, 544, 67, 97, 1832, 97, 97, 1834, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 1732, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1177, 0, 0, 925, 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 1941, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1991, 1992, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1998, 134, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 941, 45, 45, 944, 45, 45, 45, 45, 45, 45, 952, 45, 45, 207, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 67, 67, 67, 37689, 544, 369, 650, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1682, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 835, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1725, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 1036, 67, 67, 67, 265, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 296, 97, 97, 97, 97, 314, 97, 97, 97, 97, 332, 334, 97, 97, 97, 97, 97, 1146, 1147, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 97, 97, 345, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 372, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 45, 45, 404, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 451, 452, 45, 45, 45, 67, 1683, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 490, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 1450, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 537, 538, 67, 67, 67, 67, 67, 506, 67, 67, 508, 67, 67, 511, 67, 67, 67, 67, 0, 1476, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1484, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1499, 97, 97, 97, 97, 97, 97, 97, 97, 97, 587, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 634, 635, 97, 97, 97, 97, 97, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 97, 97, 97, 369, 0, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 1001, 45, 45, 45, 45, 45, 45, 45, 45, 715, 45, 45, 45, 720, 45, 45, 45, 45, 45, 45, 45, 45, 728, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 840, 97, 97, 97, 97, 97, 1174, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 97, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 680, 45, 968, 45, 970, 45, 973, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 962, 45, 45, 45, 45, 45, 979, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 688, 45, 45, 45, 45, 45, 45, 45, 1007, 1008, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 1044, 67, 1046, 67, 1049, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 808, 67, 67, 0, 0, 0, 1102, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 97, 97, 97, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 1138, 97, 1140, 97, 1143, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 45, 1191, 45, 45, 45, 45, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 991, 45, 67, 67, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1048, 67, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 97, 1386, 45, 1387, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 455, 45, 457, 45, 45, 1424, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1433, 67, 1434, 67, 67, 67, 67, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 1593, 67, 67, 45, 45, 1805, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1814, 45, 45, 1816, 67, 67, 67, 67, 1820, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1829, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 821, 67, 67, 67, 37689, 544, 67, 1831, 97, 97, 97, 97, 1835, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1850, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 961, 45, 45, 45, 45, 965, 45, 967, 1907, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1920, 0, 1936, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 28672, 97, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2054, 97, 97, 291, 97, 97, 97, 97, 97, 97, 320, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 926, 1179, 0, 45, 377, 45, 45, 45, 381, 45, 45, 392, 45, 45, 396, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 45, 45, 45, 67, 67, 67, 67, 463, 67, 67, 67, 467, 67, 67, 478, 67, 67, 482, 67, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 1472, 67, 502, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1460, 67, 97, 97, 97, 97, 560, 97, 97, 97, 564, 97, 97, 575, 97, 97, 579, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 930, 97, 599, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 872, 97, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1758, 0, 362, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 934, 45, 45, 45, 164, 168, 174, 178, 45, 45, 45, 45, 45, 194, 45, 45, 45, 165, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 45, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1060, 67, 67, 67, 67, 67, 67, 1052, 1053, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1063, 97, 1157, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1167, 97, 97, 97, 97, 97, 1379, 97, 97, 97, 0, 0, 0, 45, 1383, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 1812, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1471, 67, 45, 1402, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 67, 1462, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 1517, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 1636, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1705, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1842, 0, 0, 1779, 97, 97, 97, 1782, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1789, 97, 97, 0, 0, 0, 97, 1847, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 45, 737, 738, 67, 740, 67, 741, 67, 743, 67, 67, 67, 67, 67, 67, 1968, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 2062, 97, 45, 67, 0, 97, 45, 67, 67, 97, 97, 2001, 97, 0, 0, 2004, 97, 97, 0, 97, 97, 97, 97, 1797, 97, 97, 97, 97, 97, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 292, 97, 97, 97, 97, 311, 315, 321, 325, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1330, 97, 97, 1333, 1334, 97, 341, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 363, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 416, 45, 376, 45, 45, 45, 45, 382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 45, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 414, 45, 45, 45, 418, 67, 67, 67, 462, 67, 67, 67, 67, 468, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 1604, 67, 67, 67, 67, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 1067, 67, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 274, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 504, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 517, 519, 541, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 554, 97, 97, 97, 559, 97, 97, 97, 97, 565, 97, 97, 97, 97, 97, 97, 97, 1718, 0, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 906, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 597, 97, 97, 97, 97, 97, 1520, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 1656, 45, 45, 45, 97, 97, 601, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 614, 616, 638, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 661, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1815, 45, 67, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 678, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 977, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 697, 67, 67, 748, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1274, 67, 67, 67, 67, 67, 67, 67, 67, 765, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 780, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1777, 67, 97, 97, 97, 97, 97, 97, 846, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 97, 1742, 45, 45, 45, 45, 45, 45, 45, 1747, 97, 97, 97, 863, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 1178, 925, 0, 1179, 0, 97, 97, 97, 878, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 954, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 963, 45, 45, 966, 45, 45, 157, 45, 45, 171, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 1022, 67, 67, 1026, 67, 67, 67, 1030, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 1605, 67, 67, 67, 1608, 67, 67, 67, 1039, 67, 67, 1042, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 67, 0, 1100, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 97, 97, 97, 97, 1116, 97, 97, 1120, 97, 97, 97, 1124, 97, 97, 97, 97, 97, 97, 562, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1133, 97, 97, 1136, 97, 97, 97, 97, 97, 97, 97, 97, 915, 917, 97, 97, 97, 97, 97, 0, 97, 1170, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1993, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 1278, 67, 0, 0, 0, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1189, 1204, 45, 45, 45, 1207, 45, 45, 1209, 45, 1210, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 45, 689, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 805, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1249, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1300, 0, 0, 0, 0, 0, 1267, 67, 67, 1269, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 97, 1349, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 97, 0, 1980, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 677, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 953, 67, 1437, 67, 1440, 67, 67, 67, 67, 1445, 67, 67, 67, 1448, 67, 67, 67, 67, 67, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 67, 67, 67, 1473, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 834, 97, 97, 97, 97, 1490, 97, 1493, 97, 97, 97, 97, 1498, 97, 97, 97, 1501, 97, 97, 97, 0, 97, 1638, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 916, 97, 97, 97, 97, 97, 97, 0, 1528, 97, 97, 97, 0, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1932, 0, 0, 1555, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1567, 45, 45, 158, 45, 45, 172, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 67, 212, 67, 67, 67, 67, 231, 235, 241, 245, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 472, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1651, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 45, 67, 1704, 67, 1706, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1841, 97, 0, 1844, 97, 97, 97, 97, 1716, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1385, 1748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1757, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 97, 97, 1780, 97, 97, 97, 0, 0, 1786, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1730, 0, 97, 97, 97, 97, 97, 1736, 97, 1738, 67, 97, 97, 97, 97, 97, 97, 0, 1838, 97, 97, 97, 97, 97, 0, 0, 97, 1729, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 1165, 97, 97, 97, 45, 1950, 45, 45, 45, 45, 45, 45, 45, 45, 1958, 67, 67, 67, 1962, 67, 67, 67, 67, 67, 1246, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1710, 97, 97, 97, 1999, 67, 97, 97, 97, 97, 0, 2003, 97, 97, 97, 0, 97, 97, 2008, 2009, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 2052, 67, 2053, 0, 0, 0, 0, 925, 41606, 0, 0, 930, 0, 45, 45, 45, 45, 45, 45, 1392, 45, 1394, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 1565, 45, 45, 45, 1568, 0, 97, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 28672, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 679, 45, 45, 67, 67, 266, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 346, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 362, 0, 364, 0, 367, 41098, 369, 140, 371, 45, 45, 45, 379, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 449, 45, 45, 45, 45, 45, 67, 67, 542, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 97, 0, 1794, 1795, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 97, 639, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 45, 731, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 251, 67, 67, 67, 67, 67, 798, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1073, 67, 67, 67, 860, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 873, 0, 0, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 921, 97, 0, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1250, 67, 67, 1253, 0, 0, 1312, 0, 0, 0, 1318, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 97, 1155, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1141, 97, 97, 67, 67, 1439, 67, 1441, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 97, 97, 1492, 97, 1494, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 97, 67, 67, 67, 2037, 67, 97, 0, 0, 97, 97, 97, 2043, 97, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 232, 67, 67, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1975, 0, 0, 97, 874, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1142, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 65, 86, 117, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 63, 84, 115, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 61, 82, 113, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 59, 80, 111, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 57, 78, 109, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 55, 76, 107, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 53, 74, 105, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 51, 72, 103, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 49, 70, 101, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 47, 68, 99, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 45, 67, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 213085, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 0, 0, 44, 0, 0, 32863, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 41, 41, 41, 0, 0, 1138688, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 89, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 127, 127, 127, 127, 102432, 67, 262, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 342, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 360, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 45, 45, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1292, 67, 67, 1294, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1615, 97, 97, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 66, 87, 118, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 64, 85, 116, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 62, 83, 114, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 60, 81, 112, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 58, 79, 110, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 56, 77, 108, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 54, 75, 106, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 52, 73, 104, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 50, 71, 102, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 48, 69, 100, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 46, 67, 98, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 233472, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 69724, 53264, 18, 18, 49172, 0, 57366, 262144, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 45, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 28, 139621, 359, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1389, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 45, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1449, 67, 67, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1154, 97, 0, 0, 0, 0, 925, 41606, 927, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 67, 67, 45, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 951, 45, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 45, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1488, 67, 67, 267, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 347, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 361, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 734, 45, 45, 45, 67, 67, 67, 67, 67, 742, 67, 67, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1214, 45, 45, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1361, 97, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 45, 45, 0, 0, 0, 0, 2220032, 0, 0, 1130496, 0, 0, 0, 0, 2170880, 2171020, 2170880, 2170880, 18, 0, 0, 131072, 0, 0, 0, 90112, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1485, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1390, 45, 1393, 45, 45, 45, 45, 1398, 45, 45, 45, 2170880, 2171167, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2721252, 2744320, 2170880, 2170880, 2170880, 2834432, 2840040, 2170880, 2908160, 2170880, 2170880, 2936832, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3014656, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 0, 2220032, 0, 0, 0, 1142784, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3215360, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 543, 0, 545, 0, 0, 2183168, 0, 0, 831, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 2170880, 2170880, 3092480, 2170880, 2170880, 3125248, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 0, 0, 0, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 0, 0, 0, 65820, 65820, 0, 287, 97, 97, 97, 97, 97, 1783, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1791, 0, 0, 546, 70179, 0, 0, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 97, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 0, 0, 147456, 0, 0, 0, 0, 925, 41606, 0, 928, 0, 0, 45, 45, 45, 45, 45, 45, 998, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 1564, 45, 45, 45, 45, 0, 2158592, 2158592, 0, 0, 0, 0, 2232320, 2232320, 2232320, 0, 2240512, 2240512, 2240512, 2240512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640\n];\n\nJSONiqTokenizer.EXPECTED =\n[ 291, 300, 304, 341, 315, 309, 305, 295, 319, 323, 327, 329, 296, 333, 337, 339, 342, 346, 350, 294, 356, 360, 312, 367, 352, 371, 363, 375, 379, 383, 387, 391, 395, 726, 399, 405, 518, 684, 405, 405, 405, 405, 808, 405, 405, 405, 512, 405, 405, 405, 431, 405, 405, 406, 405, 405, 404, 405, 405, 405, 405, 405, 405, 405, 908, 631, 410, 415, 405, 414, 419, 608, 405, 429, 602, 405, 435, 443, 405, 441, 641, 478, 405, 447, 451, 450, 456, 643, 461, 460, 762, 679, 465, 469, 741, 473, 477, 482, 486, 492, 932, 931, 523, 498, 504, 720, 405, 510, 596, 405, 516, 941, 580, 522, 929, 527, 590, 589, 897, 939, 534, 538, 547, 551, 555, 559, 563, 567, 571, 969, 575, 708, 690, 689, 579, 584, 634, 405, 594, 731, 405, 600, 882, 405, 606, 895, 786, 452, 612, 405, 615, 620, 876, 624, 628, 638, 647, 651, 655, 659, 663, 667, 676, 683, 688, 695, 694, 791, 405, 699, 437, 405, 706, 714, 405, 712, 825, 870, 405, 718, 724, 769, 768, 823, 730, 735, 745, 751, 422, 755, 759, 425, 766, 902, 810, 587, 775, 888, 887, 405, 773, 992, 405, 779, 962, 405, 785, 781, 986, 790, 795, 797, 506, 500, 499, 801, 805, 814, 820, 829, 833, 837, 841, 845, 849, 853, 857, 861, 616, 865, 869, 868, 488, 405, 874, 816, 405, 880, 738, 405, 886, 892, 543, 405, 901, 906, 913, 912, 918, 494, 541, 922, 926, 936, 945, 949, 953, 957, 530, 966, 973, 960, 702, 701, 405, 979, 981, 405, 985, 747, 405, 990, 998, 914, 405, 996, 1004, 672, 975, 974, 1014, 1002, 1008, 670, 1012, 405, 405, 405, 405, 405, 401, 1018, 1022, 1026, 1106, 1071, 1111, 1111, 1111, 1082, 1145, 1030, 1101, 1034, 1038, 1106, 1106, 1106, 1106, 1046, 1206, 1052, 1106, 1072, 1111, 1111, 1042, 1134, 1065, 1111, 1112, 1056, 1160, 1207, 1062, 1204, 1208, 1069, 1106, 1106, 1106, 1076, 1111, 1207, 1161, 1122, 1205, 1064, 1094, 1106, 1106, 1107, 1111, 1111, 1111, 1078, 1086, 1207, 1092, 1098, 1046, 1058, 1106, 1106, 1110, 1111, 1111, 1116, 1120, 1161, 1126, 1202, 1104, 1106, 1145, 1146, 1129, 1138, 1088, 1151, 1048, 1157, 1153, 1132, 1141, 1165, 1107, 1111, 1172, 1179, 1109, 1183, 1175, 1143, 1147, 1187, 1108, 1191, 1195, 1144, 1199, 1168, 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1557, 1247, 1241, 1241, 1038, 1434, 1241, 1241, 1241, 1241, 1254, 1275, 1617, 1241, 1280, 1287, 1241, 1241, 1241, 1287, 1241, 2114, 1291, 1241, 1243, 1241, 2049, 1824, 2094, 2095, 1520, 1309, 1241, 1241, 1302, 1241, 1321, 1311, 1241, 1241, 1313, 1778, 1325, 1336, 1241, 1241, 1325, 1330, 1353, 1241, 1241, 1695, 1354, 1241, 1241, 1241, 1294, 1686, 1331, 1241, 1696, 1368, 1241, 1338, 1370, 1241, 1392, 1399, 1364, 2017, 1406, 2016, 1405, 1716, 1406, 1407, 1422, 1417, 1421, 1241, 1241, 1241, 1349, 1426, 1241, 1774, 1756, 1241, 1773, 1241, 1241, 1345, 1964, 1812, 1432, 1241, 1241, 1345, 1993, 1459, 1241, 1241, 1241, 1395, 1848, 1767, 1465, 1241, 1241, 1394, 1847, 1242, 1477, 1241, 1241, 1428, 1241, 1445, 1492, 1241, 1241, 1438, 1241, 1499, 1241, 1241, 1241, 1455, 1241, 1818, 1448, 1241, 1250, 1241, 2026, 1623, 1449, 1241, 1612, 1616, 1241, 1614, 1241, 1257, 1241, 1241, 1985, 1292, 1586, 1512, 1241, 1517, 2050, 1526, 1674, 1519, 1524, 1647, 2051, 1532, 1537, 1551, 1544, 1550, 1555, 1561, 1571, 1578, 1584, 1590, 1591, 1653, 1595, 1602, 1606, 1610, 1634, 1628, 1640, 1633, 1645, 1241, 1241, 1241, 1469, 1241, 1970, 1651, 1241, 1270, 1241, 1241, 1819, 1449, 1241, 1293, 1664, 1241, 1241, 1481, 1485, 1574, 1672, 1241, 1241, 1513, 1317, 1487, 1684, 1241, 1241, 1533, 1299, 1694, 1241, 1241, 1295, 1241, 1241, 1241, 1546, 1700, 1241, 1241, 1707, 1241, 1713, 1241, 1849, 1715, 1241, 1720, 1241, 1276, 1267, 1241, 1241, 2107, 1657, 1864, 1241, 1881, 1241, 1326, 1292, 1241, 1685, 1358, 1724, 1338, 1241, 1363, 1362, 1342, 1340, 1361, 1339, 1833, 1372, 1360, 1833, 1833, 1342, 1343, 1835, 1341, 1731, 1738, 1344, 1241, 1745, 1241, 1379, 1241, 1241, 2092, 1241, 1388, 1761, 1754, 1241, 1386, 1241, 1400, 1760, 1241, 1241, 1241, 1598, 1734, 1241, 1241, 1241, 1635, 1645, 1241, 1780, 1766, 1241, 1241, 1332, 1771, 1241, 1241, 1629, 2079, 1241, 1242, 1784, 1241, 1241, 1680, 1639, 2063, 1790, 1241, 1241, 1741, 1241, 1241, 1800, 1241, 1241, 1762, 1473, 1241, 1806, 1241, 1241, 1786, 1240, 1709, 1241, 1241, 1241, 1668, 1811, 1241, 1940, 1241, 1401, 1974, 1241, 1408, 1413, 1382, 1241, 1816, 1241, 1241, 1802, 2086, 1811, 1241, 1817, 1945, 1823, 2095, 2095, 2047, 2094, 2046, 2080, 1241, 1409, 1312, 1376, 2096, 2048, 1241, 1241, 1807, 1241, 1241, 1241, 2035, 1241, 1241, 1828, 1241, 2057, 2061, 1241, 1241, 1843, 1241, 2059, 1241, 1241, 1241, 1690, 1847, 1241, 1241, 1241, 1703, 2102, 1848, 1241, 1241, 1853, 1292, 1848, 1241, 2016, 1857, 1241, 2002, 1868, 1241, 1436, 1241, 1241, 1271, 1305, 1241, 1874, 1241, 1241, 1884, 2037, 1892, 1241, 1890, 1241, 1461, 1241, 1241, 1795, 1241, 1241, 1891, 1241, 1878, 1241, 1888, 1241, 1888, 1905, 1896, 2087, 1912, 1903, 1241, 1911, 1906, 1916, 1905, 2027, 1863, 1925, 2088, 1859, 1861, 1922, 1927, 1931, 1935, 1494, 1241, 1241, 1918, 1907, 1939, 1917, 1944, 1949, 1241, 1241, 1451, 1955, 1241, 1241, 1241, 1796, 1727, 2061, 1241, 1241, 1899, 1241, 1660, 1968, 1241, 1241, 1951, 1678, 1978, 1241, 1241, 1241, 1839, 1241, 1241, 1984, 1982, 1241, 1488, 1241, 1241, 1624, 1450, 1989, 1241, 1241, 1241, 1870, 1995, 1292, 1241, 1241, 1958, 1261, 1241, 1996, 1241, 1241, 1241, 2039, 2008, 1241, 1241, 1750, 2000, 1241, 1256, 2001, 1960, 1241, 1564, 1241, 1504, 1241, 1241, 1442, 1241, 1241, 1564, 1528, 1263, 1241, 1508, 1241, 1241, 1468, 1498, 2006, 1540, 2015, 1539, 2014, 1748, 2013, 1539, 1831, 2014, 2012, 1500, 1567, 2022, 2021, 1241, 1580, 1241, 1241, 2033, 2037, 1791, 2045, 2031, 1241, 1621, 1241, 1641, 2044, 1241, 1241, 1241, 2093, 1241, 1241, 2055, 1241, 1241, 2067, 1241, 1283, 1241, 1241, 1241, 2101, 2071, 1241, 1241, 1241, 2073, 1848, 2040, 1241, 1241, 1241, 2077, 1241, 1241, 2106, 1241, 1241, 2084, 1241, 2111, 1241, 1241, 1381, 1380, 1241, 1241, 1241, 2100, 1241, 2129, 2118, 2122, 2126, 2197, 2133, 3010, 2825, 2145, 2698, 2156, 2226, 2160, 2161, 2165, 2174, 2293, 2194, 2630, 2201, 2203, 2152, 3019, 2226, 2263, 2209, 2213, 2218, 2269, 2292, 2269, 2269, 2184, 2226, 2238, 2148, 2151, 3017, 2245, 2214, 2269, 2269, 2185, 2226, 2292, 2269, 2291, 2269, 2269, 2269, 2292, 2205, 3019, 2226, 2226, 2160, 2160, 2160, 2261, 2160, 2160, 2160, 2262, 2276, 2160, 2160, 2277, 2216, 2283, 2216, 2269, 2269, 2268, 2269, 2267, 2269, 2269, 2269, 2271, 2568, 2292, 2269, 2293, 2269, 2182, 2190, 2269, 2186, 2226, 2226, 2226, 2226, 2227, 2160, 2160, 2160, 2160, 2263, 2160, 2275, 2277, 2282, 2215, 2217, 2269, 2269, 2291, 2269, 2269, 2293, 2291, 2269, 2220, 2269, 2295, 2294, 2269, 2269, 2305, 2233, 2262, 2278, 2218, 2269, 2234, 2226, 2226, 2228, 2160, 2160, 2160, 2289, 2220, 2294, 2294, 2269, 2269, 2304, 2269, 2160, 2160, 2287, 2269, 2269, 2305, 2269, 2269, 2312, 2269, 2269, 2225, 2226, 2160, 2287, 2289, 2219, 2304, 2295, 2314, 2234, 2226, 2314, 2269, 2226, 2226, 2160, 2288, 2219, 2222, 2304, 2296, 2269, 2224, 2160, 2160, 2269, 2302, 2294, 2314, 2224, 2226, 2288, 2220, 2294, 2269, 2290, 2269, 2269, 2293, 2269, 2269, 2269, 2269, 2270, 2221, 2313, 2225, 2227, 2160, 2300, 2269, 2225, 2261, 2309, 2234, 2229, 2223, 2318, 2318, 2318, 2328, 2336, 2340, 2344, 2350, 2637, 2712, 2358, 2362, 2372, 2135, 2378, 2398, 2135, 2135, 2135, 2135, 2136, 2417, 2241, 2135, 2378, 2135, 2135, 2980, 2984, 2135, 3006, 2135, 2135, 2135, 2945, 2931, 2425, 2400, 2135, 2135, 2135, 2954, 2135, 2481, 2433, 2135, 2135, 2988, 2824, 2135, 2135, 2482, 2434, 2135, 2135, 2440, 2445, 2452, 2135, 2135, 2998, 3002, 2961, 2441, 2446, 2453, 2463, 2974, 2135, 2135, 2135, 2140, 2642, 2709, 2459, 2470, 2465, 2135, 2135, 3005, 2135, 2135, 2987, 2823, 2458, 2469, 2464, 2975, 2135, 2135, 2135, 2353, 2488, 2447, 2324, 2974, 2135, 2409, 2459, 2448, 2135, 2961, 2487, 2446, 2476, 2323, 2973, 2135, 2135, 2135, 2354, 2476, 2974, 2135, 2135, 2135, 2957, 2135, 2135, 2960, 2135, 2135, 2135, 2363, 2409, 2459, 2474, 2465, 2487, 2571, 2973, 2135, 2135, 2168, 2973, 2135, 2135, 2135, 2959, 2135, 2135, 2135, 2506, 2135, 2957, 2488, 2170, 2135, 2135, 2135, 2960, 2135, 2818, 2493, 2135, 2135, 3033, 2135, 2135, 2135, 2934, 2819, 2494, 2135, 2135, 2135, 2976, 2780, 2499, 2135, 2135, 2135, 3000, 2968, 2135, 2935, 2135, 2135, 2135, 2364, 2507, 2135, 2135, 2934, 2135, 2135, 2780, 2492, 2507, 2135, 2135, 2506, 2780, 2135, 2135, 2782, 2780, 2135, 2782, 2135, 2783, 2374, 2514, 2135, 2135, 2135, 3007, 2530, 2974, 2135, 2135, 2135, 3008, 2135, 2135, 2134, 2135, 2526, 2531, 2975, 2135, 2135, 3042, 2581, 2575, 2956, 2135, 2135, 2135, 2394, 2135, 2508, 2535, 2840, 2844, 2495, 2135, 2135, 2136, 2684, 2537, 2842, 2846, 2135, 2136, 2561, 2581, 2551, 2536, 2841, 2845, 2975, 3043, 2582, 2843, 2555, 2135, 3040, 3044, 2538, 2844, 2975, 2135, 2135, 2253, 2644, 2672, 2542, 2554, 2135, 2135, 2346, 2873, 2551, 2555, 2135, 2135, 2135, 2381, 2559, 2565, 2538, 2553, 2135, 2560, 2914, 2576, 2590, 2135, 2135, 2135, 2408, 2136, 2596, 2624, 2135, 2135, 2135, 2409, 2135, 2618, 2597, 3008, 2135, 2135, 2380, 2956, 2601, 2135, 2135, 2135, 2410, 2620, 2624, 2135, 2136, 2383, 2135, 2135, 2783, 2623, 2135, 2135, 2393, 2888, 2136, 2621, 3008, 2135, 2618, 2618, 2622, 2135, 2135, 2405, 2414, 2619, 2384, 2624, 2135, 2136, 2950, 2135, 2138, 2135, 2139, 2135, 2604, 2623, 2135, 2140, 2878, 2665, 2957, 2622, 2135, 2135, 2428, 2762, 2606, 2612, 2135, 2135, 2501, 2586, 2604, 3038, 2135, 2604, 3036, 2387, 2958, 2386, 2135, 2141, 2135, 2421, 2387, 2385, 2135, 2385, 2384, 2384, 2135, 2386, 2628, 2384, 2135, 2135, 2501, 2596, 2591, 2135, 2135, 2135, 2400, 2135, 2634, 2135, 2135, 2559, 2580, 2575, 2648, 2135, 2135, 2135, 2429, 2649, 2135, 2135, 2135, 2435, 2654, 2658, 2135, 2135, 2135, 2436, 2649, 2178, 2659, 2135, 2135, 2595, 2601, 2669, 2677, 2135, 2135, 2616, 2957, 2879, 2665, 2691, 2135, 2363, 2367, 2900, 2878, 2664, 2690, 2975, 2877, 2643, 2670, 2974, 2671, 2975, 2135, 2135, 2619, 2608, 2669, 2673, 2135, 2135, 2653, 2177, 2672, 2135, 2135, 2135, 2486, 2168, 2251, 2255, 2695, 2974, 2709, 2135, 2135, 2135, 2487, 2169, 2399, 2716, 2975, 2135, 2363, 2770, 2776, 2640, 2717, 2135, 2135, 2729, 2135, 2135, 2641, 2718, 2135, 2135, 2135, 2505, 2135, 2640, 2257, 2974, 2135, 2727, 2975, 2135, 2365, 2332, 2895, 2957, 2135, 2959, 2135, 2365, 2749, 2754, 2959, 2958, 2958, 2135, 2380, 2793, 2799, 2135, 2735, 2738, 2135, 2381, 2135, 2135, 2940, 2974, 2135, 2744, 2135, 2135, 2739, 2519, 2976, 2745, 2135, 2135, 2135, 2509, 2755, 2135, 2135, 2135, 2510, 2772, 2778, 2135, 2135, 2740, 2520, 2135, 2771, 2777, 2135, 2135, 2759, 2750, 2792, 2798, 2135, 2135, 2781, 2392, 2779, 2135, 2135, 2135, 2521, 2135, 2679, 2248, 2135, 2135, 2681, 2480, 2135, 2135, 2786, 3000, 2135, 2679, 2683, 2135, 2135, 2416, 2135, 2135, 2135, 2525, 2135, 2730, 2135, 2135, 2135, 2560, 2581, 2135, 2805, 2135, 2135, 2804, 2962, 2832, 2974, 2135, 2382, 2135, 2135, 2958, 2135, 2135, 2960, 2135, 2829, 2833, 2975, 2961, 2965, 2969, 2973, 2968, 2972, 2135, 2135, 2135, 2641, 2135, 2515, 2966, 2970, 2851, 2478, 2135, 2135, 2808, 2135, 2809, 2135, 2135, 2135, 2722, 2852, 2479, 2135, 2135, 2815, 2135, 2135, 2766, 2853, 2480, 2135, 2857, 2479, 2135, 2388, 2723, 2135, 2364, 2331, 2894, 2858, 2480, 2135, 2135, 2850, 2478, 2135, 2135, 2135, 2806, 2864, 2135, 2399, 2256, 2974, 2865, 2135, 2135, 2862, 2135, 2135, 2135, 2685, 2807, 2865, 2135, 2135, 2807, 2863, 2135, 2135, 2135, 2686, 2884, 2807, 2135, 2809, 2807, 2135, 2135, 2807, 2806, 2705, 2810, 2808, 2700, 2869, 2702, 2702, 2702, 2704, 2883, 2135, 2135, 2135, 2730, 2884, 2135, 2135, 2135, 2731, 2321, 2546, 2135, 2135, 2876, 2255, 2889, 2322, 2547, 2135, 2401, 2135, 2135, 2135, 2949, 2367, 2893, 2544, 2973, 2906, 2973, 2135, 2135, 2877, 2663, 2368, 2901, 2907, 2974, 2366, 2899, 2905, 2972, 2920, 2974, 2135, 2135, 2911, 2900, 2920, 2363, 2913, 2918, 2465, 2941, 2975, 2135, 2135, 2924, 2928, 2974, 2945, 2931, 2135, 2135, 2135, 2765, 2136, 2955, 2135, 2135, 2939, 2931, 2380, 2135, 2135, 2380, 2135, 2135, 2135, 2780, 2507, 2137, 2135, 2137, 2135, 2139, 2135, 2806, 2810, 2135, 2135, 2135, 2992, 2135, 2135, 2962, 2966, 2970, 2974, 2135, 2135, 2787, 3014, 2135, 2521, 2993, 2135, 2135, 2135, 2803, 2135, 2135, 2135, 2618, 2607, 2997, 3001, 2135, 2135, 2963, 2967, 2971, 2975, 2135, 2135, 2791, 2797, 2135, 3009, 2999, 3003, 2787, 3001, 2135, 2135, 2964, 2968, 2785, 2999, 3003, 2135, 2135, 2135, 2804, 2785, 2999, 3004, 2135, 2135, 2135, 2807, 2135, 2135, 3023, 2135, 2135, 2135, 2811, 2135, 2135, 3027, 2135, 2135, 2135, 2837, 2968, 3028, 2135, 2135, 2135, 2875, 2135, 2784, 3029, 2135, 2408, 2457, 2446, 0, 14, 0, -2120220672, 1610612736, -2074083328, -2002780160, -2111830528, 1073872896, 1342177280, 1075807216, 4096, 16384, 2048, 8192, 0, 8192, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, -2145386496, 8388608, 1073741824, 0, 0x80000000, 0x80000000, 2097152, 2097152, 2097152, 536870912, 0, 0, 134217728, 33554432, 1536, 268435456, 268435456, 268435456, 268435456, 128, 256, 32, 0, 65536, 131072, 524288, 16777216, 268435456, 0x80000000, 1572864, 1835008, 640, 32768, 65536, 262144, 1048576, 2097152, 196608, 196800, 196608, 196608, 0, 131072, 131072, 131072, 196608, 196624, 196608, 196624, 196608, 196608, 128, 4096, 16384, 16384, 2048, 0, 4, 0, 0, 0x80000000, 2097152, 0, 1024, 32, 32, 0, 65536, 1572864, 1048576, 32768, 32768, 32768, 32768, 196608, 196608, 196608, 64, 64, 196608, 196608, 131072, 131072, 131072, 131072, 268435456, 268435456, 64, 196736, 196608, 196608, 196608, 131072, 196608, 196608, 16384, 4, 4, 4, 2, 32, 32, 65536, 1048576, 12582912, 1073741824, 0, 0, 2, 8, 16, 96, 2048, 32768, 0, 0, 131072, 268435456, 268435456, 268435456, 256, 256, 196608, 196672, 196608, 196608, 196608, 196608, 4, 0, 256, 256, 256, 256, 32, 32, 32768, 32, 32, 32, 32, 32768, 268435456, 268435456, 268435456, 196608, 196608, 196608, 196624, 196608, 196608, 196608, 16, 16, 16, 268435456, 196608, 64, 64, 64, 196608, 196608, 196608, 196672, 268435456, 64, 64, 196608, 196608, 16, 196608, 196608, 196608, 268435456, 64, 196608, 131072, 262144, 4194304, 25165824, 33554432, 134217728, 268435456, 268435456, 196608, 262152, 8, 256, 512, 3072, 16384, 200, -1073741816, 8392713, 40, 8392718, 520, 807404072, 40, 520, 100663304, 0, 0, -540651761, -540651761, 257589048, 0, 262144, 0, 0, 3, 8, 256, 0, 4, 6, 4100, 8388612, 0, 0, 0, 3, 4, 8, 256, 512, 1024, 0, 2097152, 0, 0, -537854471, -537854471, 0, 100663296, 0, 0, 1, 2, 0, 0, 0, 16384, 0, 0, 0, 96, 14336, 0, 0, 0, 7, 8, 234881024, 0, 0, 0, 8, 0, 0, 0, 0, 262144, 0, 0, 16, 64, 384, 512, 0, 1, 1, 0, 12582912, 0, 0, 0, 0, 33554432, 67108864, -606084144, -606084144, -606084138, 0, 0, 28, 32, 768, 1966080, -608174080, 0, 0, 0, 14, 35056, 16, 64, 896, 24576, 98304, 98304, 131072, 262144, 524288, 1048576, 4194304, 25165824, 1048576, 62914560, 134217728, -805306368, 0, 384, 512, 16384, 65536, 131072, 262144, 29360128, 33554432, 134217728, 268435456, 1073741824, 0x80000000, 262144, 524288, 1048576, 29360128, 33554432, 524288, 1048576, 16777216, 33554432, 134217728, 268435456, 1073741824, 0, 0, 0, 123856, 1966080, 0, 64, 384, 16384, 65536, 131072, 16384, 65536, 524288, 268435456, 0x80000000, 0, 0, 524288, 0x80000000, 0, 0, 1, 16, 0, 256, 524288, 0, 0, 0, 25, 96, 128, -537854471, 0, 0, 0, 32, 7404800, -545259520, 0, 0, 0, 60, 0, 249, 64768, 1048576, 6291456, 6291456, 25165824, 100663296, 402653184, 1073741824, 96, 128, 1280, 2048, 4096, 57344, 6291456, 57344, 6291456, 8388608, 16777216, 33554432, 201326592, 1342177280, 0x80000000, 0, 57344, 6291456, 8388608, 100663296, 134217728, 0x80000000, 0, 0, 0, 1, 8, 16, 64, 128, 64, 128, 256, 1024, 131072, 131072, 131072, 262144, 524288, 16777216, 57344, 6291456, 8388608, 67108864, 134217728, 64, 256, 1024, 2048, 4096, 57344, 64, 256, 0, 24576, 32768, 6291456, 67108864, 134217728, 0, 1, 64, 256, 24576, 32768, 4194304, 32768, 4194304, 67108864, 0, 0, 64, 256, 0, 0, 24576, 32768, 0, 16384, 4194304, 67108864, 64, 16384, 0, 0, 1, 64, 256, 16384, 4194304, 67108864, 0, 0, 0, 16384, 0, 16384, 16384, 0, -470447874, -470447874, -470447874, 0, 0, 128, 0, 0, 8, 96, 2048, 32768, 262144, 8388608, 35056, 1376256, -471859200, 0, 0, 14, 16, 224, 2048, 32768, 2097152, 4194304, 8388608, -486539264, 0, 96, 128, 2048, 32768, 262144, 2097152, 262144, 2097152, 8388608, 33554432, 536870912, 1073741824, 0x80000000, 0, 1610612736, 0x80000000, 0, 0, 1, 524288, 1048576, 12582912, 0, 0, 0, 151311, 264503296, 2097152, 8388608, 33554432, 1610612736, 0x80000000, 262144, 8388608, 33554432, 536870912, 67108864, 4194304, 0, 4194304, 0, 4194304, 4194304, 0, 0, 524288, 8388608, 536870912, 1073741824, 0x80000000, 1, 4097, 8388609, 96, 2048, 32768, 1073741824, 0x80000000, 0, 96, 2048, 0x80000000, 0, 0, 96, 2048, 0, 0, 1, 12582912, 0, 0, 0, 0, 1641895695, 1641895695, 0, 0, 0, 249, 7404800, 15, 87808, 1835008, 1639972864, 0, 768, 5120, 16384, 65536, 1835008, 1835008, 12582912, 16777216, 1610612736, 0, 3, 4, 8, 768, 4096, 65536, 0, 0, 256, 512, 786432, 8, 256, 512, 4096, 16384, 1835008, 16384, 1835008, 12582912, 1610612736, 0, 0, 0, 256, 0, 0, 0, 4, 8, 16, 32, 1, 2, 8, 256, 16384, 524288, 16384, 524288, 1048576, 12582912, 1610612736, 0, 0, 0, 8388608, 0, 0, 0, 524288, 4194304, 0, 0, 0, 8388608, -548662288, -548662288, -548662288, 0, 0, 256, 16384, 65536, 520093696, -1073741824, 0, 0, 0, 16777216, 0, 16, 32, 960, 4096, 4980736, 520093696, 1073741824, 0, 32, 896, 4096, 57344, 1048576, 6291456, 8388608, 16777216, 100663296, 134217728, 268435456, 0x80000000, 0, 512, 786432, 4194304, 33554432, 134217728, 268435456, 0, 786432, 4194304, 134217728, 268435456, 0, 524288, 4194304, 268435456, 0, 0, 0, 0, 0, 4194304, 4194304, -540651761, 0, 0, 0, 2, 4, 8, 16, 96, 128, 264503296, -805306368, 0, 0, 0, 8, 256, 512, 19456, 131072, 3072, 16384, 131072, 262144, 8388608, 16777216, 512, 1024, 2048, 16384, 131072, 262144, 131072, 262144, 8388608, 33554432, 201326592, 268435456, 0, 3, 4, 256, 1024, 2048, 57344, 16384, 131072, 8388608, 33554432, 134217728, 268435456, 0, 3, 256, 1024, 16384, 131072, 33554432, 134217728, 1073741824, 0x80000000, 0, 0, 256, 524288, 0x80000000, 0, 3, 256, 33554432, 134217728, 1073741824, 0, 1, 2, 33554432, 1, 2, 134217728, 1073741824, 0, 1, 2, 134217728, 0, 0, 0, 64, 0, 0, 0, 16, 32, 896, 4096, 786432, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 0, 0, 0, 15, 0, 4980736, 4980736, 4980736, 70460, 70460, 3478332, 0, 0, 1008, 4984832, 520093696, 60, 4864, 65536, 0, 0, 0, 12, 16, 32, 256, 512, 4096, 65536, 0, 0, 0, 67108864, 0, 0, 0, 12, 0, 256, 512, 65536, 0, 0, 1024, 512, 131072, 131072, 4, 16, 32, 65536, 0, 4, 16, 32, 0, 0, 0, 4, 16, 0, 0, 16384, 67108864, 0, 0, 1, 24, 96, 128, 256, 1024\n];\n\nJSONiqTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"JSONChar\",\n  \"JSONCharRef\",\n  \"JSONPredefinedCharRef\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$$'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar JSONiqTokenizer = _dereq_('./JSONiqTokenizer').JSONiqTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit'.split('|');\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'JSONPredefinedCharRef', token: 'constant.language.escape' },\n        { name: 'JSONCharRef', token: 'constant.language.escape' },\n        { name: 'JSONChar', token: 'string' }\n    ]\n};\n    \nexports.JSONiqLexer = function(){ return new Lexer(JSONiqTokenizer, Rules); };\n},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}]},{},[\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\"]);\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\n  var oop = require(\"../../lib/oop\");\n  var Behaviour = require('../behaviour').Behaviour;\n  var CstyleBehaviour = require('./cstyle').CstyleBehaviour;\n  var XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\n  var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nfunction hasType(token, type) {\n    var hasType = true;\n    var typeList = token.type.split('.');\n    var needleList = type.split('.');\n    needleList.forEach(function(needle){\n        if (typeList.indexOf(needle) == -1) {\n            hasType = false;\n            return false;\n        }\n    });\n    return hasType;\n}\n \n  var XQueryBehaviour = function () {\n      \n      this.inherit(CstyleBehaviour, [\"braces\", \"parens\", \"string_dquotes\"]); // Get string behaviour\n      this.inherit(XmlBehaviour); // Get xml behaviour\n      \n      this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken();\n            var atCursor = false;\n            var state = JSON.parse(state).pop();\n            if ((token && token.value === '>') || state !== \"StartTag\") return;\n            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){\n                do {\n                    token = iterator.stepBackward();\n                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));\n            } else {\n                atCursor = true;\n            }\n            var previous = iterator.stepBackward();\n            if (!token || !hasType(token, 'meta.tag') || (previous !== null && previous.value.match('/'))) {\n                return;\n            }\n            var tag = token.value.substring(1);\n            if (atCursor){\n                var tag = tag.substring(0, position.column - token.start);\n            }\n\n            return {\n               text: '>' + '</' + tag + '>',\n               selection: [1, 1]\n            };\n        }\n    });\n\n  };\n  oop.inherits(XQueryBehaviour, Behaviour);\n\n  exports.XQueryBehaviour = XQueryBehaviour;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jsoniq\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/jsoniq_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JSONiqLexer = require(\"./xquery/jsoniq_lexer\").JSONiqLexer;\nvar Range = require(\"../range\").Range;\nvar XQueryBehaviour = require(\"./behaviour/xquery\").XQueryBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Anchor = require(\"../anchor\").Anchor;\n\nvar Mode = function() {\n    this.$tokenizer   = new JSONiqLexer();\n    this.$behaviour   = new XQueryBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n    this.$highlightRules = new TextHighlightRules();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.completer = {\n        getCompletions: function(editor, session, pos, prefix, callback) {\n            if (!session.$worker)\n                return callback();\n            session.$worker.emit(\"complete\", { data: { pos: pos, prefix: prefix } });\n            session.$worker.on(\"complete\", function(e){\n                callback(null, e.data);\n            });\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var match = line.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);\n        if (match)\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*[\\}\\)]/.test(input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*[\\}\\)])/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(:(.*):\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(:\" + line + \":)\");\n        }\n    };\n    this.createWorker = function(session) {\n        \n      var worker = new WorkerClient([\"ace\"], \"ace/mode/xquery_worker\", \"XQueryWorker\");\n        var that = this;\n\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"ok\", function(e) {\n          session.clearAnnotations();\n        });\n        \n        worker.on(\"markers\", function(e) {\n          session.clearAnnotations();\n          that.addMarkers(e.data, session);\n        });\n \n        return worker;\n    };\n \n    this.removeMarkers = function(session) {\n        var markers = session.getMarkers(false);\n        for (var id in markers) {\n            if (markers[id].clazz.indexOf('language_highlight_') === 0) {\n                session.removeMarker(id);\n            }\n        }\n        for (var i = 0; i < session.markerAnchors.length; i++) {\n            session.markerAnchors[i].detach();\n        }\n        session.markerAnchors = [];\n    };\n\n    this.addMarkers = function(annos, mySession) {\n        var _self = this;\n        \n        if (!mySession.markerAnchors) mySession.markerAnchors = [];\n        this.removeMarkers(mySession);\n        mySession.languageAnnos = [];\n        annos.forEach(function(anno) {\n            var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0);\n            mySession.markerAnchors.push(anchor);\n            var markerId;\n            var colDiff = anno.pos.ec - anno.pos.sc;\n            var rowDiff = anno.pos.el - anno.pos.sl;\n            var gutterAnno = {\n                guttertext: anno.message,\n                type: anno.level || \"warning\",\n                text: anno.message\n            };\n\n            function updateFloat(single) {\n                if (markerId)\n                    mySession.removeMarker(markerId);\n                gutterAnno.row = anchor.row;\n                if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) {\n                    var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec);\n                    markerId = mySession.addMarker(range, \"language_highlight_\" + (anno.type ? anno.type : \"default\"));\n                }\n                if (single) mySession.setAnnotations(mySession.languageAnnos);\n            }\n            updateFloat();\n            anchor.on(\"change\", function() {\n                updateFloat(true);\n            });\n            if (anno.message) mySession.languageAnnos.push(gutterAnno);\n        });\n        mySession.setAnnotations(mySession.languageAnnos);\n    }; \n\n    this.$id = \"ace/mode/jsoniq\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-jsp.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JavaHighlightRules = function() {\n    var keywords = (\n    \"abstract|continue|for|new|switch|\" +\n    \"assert|default|goto|package|synchronized|\" +\n    \"boolean|do|if|private|this|\" +\n    \"break|double|implements|protected|throw|\" +\n    \"byte|else|import|public|throws|\" +\n    \"case|enum|instanceof|return|transient|\" +\n    \"catch|extends|int|short|try|\" +\n    \"char|final|interface|static|void|\" +\n    \"class|finally|long|strictfp|volatile|\" +\n    \"const|float|native|super|while|\" +\n    \"var\"\n    );\n\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                regex: \"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",\n                token: \"keyword\",\n                next: [{\n                    regex: \"{\",\n                    token: \"paren.lparen\",\n                    next: [{\n                        regex: \"}\",\n                        token: \"paren.rparen\",\n                        next: \"start\"\n                    }, {\n                        regex: \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n                        token: \"keyword\" \n                    }]\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    token : \"identifier\",\n                    regex : \"\\\\w+\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \".\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }, {\n                    regex: \"\", // exit if there is anything else\n                    next: \"start\"\n                }]\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(JavaHighlightRules, TextHighlightRules);\n\nexports.JavaHighlightRules = JavaHighlightRules;\n});\n\nace.define(\"ace/mode/jsp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/java_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\n\nvar JspHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var builtinVariables = 'request|response|out|session|' +\n            'application|config|pageContext|page|Exception';\n\n    var keywords = 'page|include|taglib';\n\n    var startRules = [\n        {\n            token : \"comment\",\n            regex : \"<%--\",\n            push : \"jsp-dcomment\"\n        }, {\n            token : \"meta.tag\", // jsp open tag\n            regex : \"<%@?|<%=?|<%!?|<jsp:[^>]+>\",\n            push  : \"jsp-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token : \"meta.tag\", // jsp close tag\n            regex : \"%>|<\\\\/jsp:[^>]+>\",\n            next  : \"pop\"\n        }, {\n            token: \"variable.language\",\n            regex : builtinVariables\n        }, {\n            token: \"keyword\",\n            regex : keywords\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(JavaHighlightRules, \"jsp-\", endRules, [\"start\"]);\n\n    this.addRules({\n        \"jsp-dcomment\" : [{\n            token : \"comment\",\n            regex : \".*?--%>\",\n            next : \"pop\"\n        }]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(JspHighlightRules, HtmlHighlightRules);\n\nexports.JspHighlightRules = JspHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jsp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JspHighlightRules = require(\"./jsp_highlight_rules\").JspHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JspHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/jsp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-jssm.js",
    "content": "ace.define(\"ace/mode/jssm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JSSMHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"punctuation.definition.comment.mn\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.mn\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.jssm\"\n            }],\n            comment: \"block comment\"\n        }, {\n            token: \"comment.line.jssm\",\n            regex: /\\/\\//,\n            push: [{\n                token: \"comment.line.jssm\",\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.line.jssm\"\n            }],\n            comment: \"block comment\"\n        }, {\n            token: \"entity.name.function\",\n            regex: /\\${/,\n            push: [{\n                token: \"entity.name.function\",\n                regex: /}/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"keyword.other\"\n            }],\n            comment: \"js outcalls\"\n        }, {\n            token: \"constant.numeric\",\n            regex: /[0-9]*\\.[0-9]*\\.[0-9]*/,\n            comment: \"semver\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /graph_layout\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /machine_name\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /machine_version\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /jssm_version\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_legal\",\n            regex: /<->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_none\",\n            regex: /<-/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.none_legal\",\n            regex: /->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_main\",\n            regex: /<=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.none_main\",\n            regex: /=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_none\",\n            regex: /<=/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_forced\",\n            regex: /<~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.none_forced\",\n            regex: /~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_none\",\n            regex: /<~/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_main\",\n            regex: /<-=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_legal\",\n            regex: /<=->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_forced\",\n            regex: /<-~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_legal\",\n            regex: /<~->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_forced\",\n            regex: /<=~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_main\",\n            regex: /<~=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"constant.numeric.jssmProbability\",\n            regex: /[0-9]+%/,\n            comment: \"edge probability annotation\"\n        }, {\n            token: \"constant.character.jssmAction\",\n            regex: /\\'[^']*\\'/,\n            comment: \"action annotation\"\n        }, {\n            token: \"entity.name.tag.jssmLabel.doublequoted\",\n            regex: /\\\"[^\"]*\\\"/,\n            comment: \"jssm label annotation\"\n        }, {\n            token: \"entity.name.tag.jssmLabel.atom\",\n            regex: /[a-zA-Z0-9_.+&()#@!?,]/,\n            comment: \"jssm label annotation\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nJSSMHighlightRules.metaData = {\n    fileTypes: [\"jssm\", \"jssm_state\"],\n    name: \"JSSM\",\n    scopeName: \"source.jssm\"\n};\n\n\noop.inherits(JSSMHighlightRules, TextHighlightRules);\n\nexports.JSSMHighlightRules = JSSMHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jssm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jssm_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JSSMHighlightRules = require(\"./jssm_highlight_rules\").JSSMHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JSSMHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/jssm\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-jsx.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/jsx_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsxHighlightRules = function() {\n    var keywords = lang.arrayToMap(\n        (\"break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|\" +\n         \"if|throw|\" +\n         \"delete|in|try|\" +\n         \"class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|\" +\n         \"number|int|string|boolean|variant|\" +\n         \"log|assert\").split(\"|\")\n    );\n    \n    var buildinConstants = lang.arrayToMap(\n        (\"null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined\").split(\"|\")\n    );\n    \n    var reserved = lang.arrayToMap(\n        (\"debugger|with|\" +\n         \"const|export|\" +\n         \"let|private|public|yield|protected|\" +\n         \"extern|native|as|operator|__fake__|__readonly__\").split(\"|\")\n    );\n    \n    var identifierRe = \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\";\n    \n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : [\n                    \"storage.type\",\n                    \"text\",\n                    \"entity.name.function\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")\"\n            }, {\n                token : function(value) {\n                    if (value == \"this\")\n                        return \"variable.language\";\n                    else if (value == \"function\")\n                        return \"storage.type\";\n                    else if (keywords.hasOwnProperty(value) || reserved.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (buildinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (/^_?[A-Z][a-zA-Z0-9_]*$/.test(value))\n                        return \"language.support.class\";\n                    else\n                        return \"identifier\";\n                },\n                regex : identifierRe\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({<]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}>]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(JsxHighlightRules, TextHighlightRules);\n\nexports.JsxHighlightRules = JsxHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsx_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JsxHighlightRules = require(\"./jsx_highlight_rules\").JsxHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nfunction Mode() {\n    this.HighlightRules = JsxHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n}\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/jsx\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-julia.js",
    "content": "ace.define(\"ace/mode/julia_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JuliaHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { include: '#function_decl' },\n         { include: '#function_call' },\n         { include: '#type_decl' },\n         { include: '#keyword' },\n         { include: '#operator' },\n         { include: '#number' },\n         { include: '#string' },\n         { include: '#comment' } ],\n      '#bracket': \n       [ { token: 'keyword.bracket.julia',\n           regex: '\\\\(|\\\\)|\\\\[|\\\\]|\\\\{|\\\\}|,' } ],\n      '#comment': \n       [ { token: \n            [ 'punctuation.definition.comment.julia',\n              'comment.line.number-sign.julia' ],\n           regex: '(#)(?!\\\\{)(.*$)'} ],\n      '#function_call': \n       [ { token: [ 'support.function.julia', 'text' ],\n           regex: '([a-zA-Z0-9_]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*\\\\()'} ],\n      '#function_decl': \n       [ { token: [ 'keyword.other.julia', 'meta.function.julia',\n               'entity.name.function.julia', 'meta.function.julia','text' ],\n           regex: '(function|macro)(\\\\s*)([a-zA-Z0-9_\\\\{]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*)([(\\\\\\\\{])'} ],\n      '#keyword':\n       [ { token: 'keyword.other.julia',\n           regex: '\\\\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\\\\b' },\n         { token: 'keyword.control.julia',\n           regex: '\\\\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\\\\b' },\n         { token: 'storage.modifier.variable.julia',\n           regex: '\\\\b(?:global|local|const|export|import|importall|using)\\\\b' },\n         { token: 'variable.macro.julia', regex: '@[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b' } ],\n      '#number': \n       [ { token: 'constant.numeric.julia',\n           regex: '\\\\b0(?:x|X)[0-9a-fA-F]*|(?:\\\\b[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]*)?(?:im)?|\\\\bInf(?:32)?\\\\b|\\\\bNaN(?:32)?\\\\b|\\\\btrue\\\\b|\\\\bfalse\\\\b' } ],\n      '#operator': \n       [ { token: 'keyword.operator.update.julia',\n           regex: '=|:=|\\\\+=|-=|\\\\*=|/=|//=|\\\\.//=|\\\\.\\\\*=|\\\\\\\\=|\\\\.\\\\\\\\=|^=|\\\\.^=|%=|\\\\|=|&=|\\\\$=|<<=|>>=' },\n         { token: 'keyword.operator.ternary.julia', regex: '\\\\?|:' },\n         { token: 'keyword.operator.boolean.julia',\n           regex: '\\\\|\\\\||&&|!' },\n         { token: 'keyword.operator.arrow.julia', regex: '->|<-|-->' },\n         { token: 'keyword.operator.relation.julia',\n           regex: '>|<|>=|<=|==|!=|\\\\.>|\\\\.<|\\\\.>=|\\\\.>=|\\\\.==|\\\\.!=|\\\\.=|\\\\.!|<:|:>' },\n         { token: 'keyword.operator.range.julia', regex: ':' },\n         { token: 'keyword.operator.shift.julia', regex: '<<|>>' },\n         { token: 'keyword.operator.bitwise.julia', regex: '\\\\||\\\\&|~' },\n         { token: 'keyword.operator.arithmetic.julia',\n           regex: '\\\\+|-|\\\\*|\\\\.\\\\*|/|\\\\./|//|\\\\.//|%|\\\\.%|\\\\\\\\|\\\\.\\\\\\\\|\\\\^|\\\\.\\\\^' },\n         { token: 'keyword.operator.isa.julia', regex: '::' },\n         { token: 'keyword.operator.dots.julia',\n           regex: '\\\\.(?=[a-zA-Z])|\\\\.\\\\.+' },\n         { token: 'keyword.operator.interpolation.julia',\n           regex: '\\\\$#?(?=.)' },\n         { token: [ 'variable', 'keyword.operator.transposed-variable.julia' ],\n           regex: '([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+)((?:\\'|\\\\.\\')*\\\\.?\\')' },\n         { token: 'text',\n           regex: '\\\\[|\\\\('},\n         { token: [ 'text', 'keyword.operator.transposed-matrix.julia' ],\n            regex: \"([\\\\]\\\\)])((?:'|\\\\.')*\\\\.?')\"} ],\n      '#string': \n       [ { token: 'punctuation.definition.string.begin.julia',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#string_escaped_char' },\n              { defaultToken: 'string.quoted.single.julia' } ] },\n         { token: 'punctuation.definition.string.begin.julia',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#string_escaped_char' },\n              { defaultToken: 'string.quoted.double.julia' } ] },\n         { token: 'punctuation.definition.string.begin.julia',\n           regex: '\\\\b[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*',\n                next: 'pop' },\n              { include: '#string_custom_escaped_char' },\n              { defaultToken: 'string.quoted.custom-double.julia' } ] },\n         { token: 'punctuation.definition.string.begin.julia',\n           regex: '`',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '`',\n                next: 'pop' },\n              { include: '#string_escaped_char' },\n              { defaultToken: 'string.quoted.backtick.julia' } ] } ],\n      '#string_custom_escaped_char': [ { token: 'constant.character.escape.julia', regex: '\\\\\\\\\"' } ],\n      '#string_escaped_char': \n       [ { token: 'constant.character.escape.julia',\n           regex: '\\\\\\\\(?:\\\\\\\\|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)' } ],\n      '#type_decl': \n       [ { token: \n            [ 'keyword.control.type.julia',\n              'meta.type.julia',\n              'entity.name.type.julia',\n              'entity.other.inherited-class.julia',\n              'punctuation.separator.inheritance.julia',\n              'entity.other.inherited-class.julia' ],\n           regex: '(type|immutable)(\\\\s+)([a-zA-Z0-9_]+)(?:(\\\\s*)(<:)(\\\\s*[.a-zA-Z0-9_:]+))?' },\n         { token: [ 'other.typed-variable.julia', 'support.type.julia' ],\n           regex: '([a-zA-Z0-9_]+)(::[a-zA-Z0-9_{}]+)' } ] };\n    \n    this.normalizeRules();\n};\n\nJuliaHighlightRules.metaData = { fileTypes: [ 'jl' ],\n      firstLineMatch: '^#!.*\\\\bjulia\\\\s*$',\n      foldingStartMarker: '^\\\\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\\\\b(?!.*\\\\bend\\\\b).*$',\n      foldingStopMarker: '^\\\\s*(?:end)\\\\b.*$',\n      name: 'Julia',\n      scopeName: 'source.julia' };\n\n\noop.inherits(JuliaHighlightRules, TextHighlightRules);\n\nexports.JuliaHighlightRules = JuliaHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/julia\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/julia_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JuliaHighlightRules = require(\"./julia_highlight_rules\").JuliaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JuliaHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.blockComment = \"\";\n    this.$id = \"ace/mode/julia\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-kotlin.js",
    "content": "ace.define(\"ace/mode/kotlin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar KotlinHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            token: [\n                \"text\",\n                \"keyword.other.kotlin\",\n                \"text\",\n                \"entity.name.package.kotlin\",\n                \"text\"\n            ],\n            regex: /^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*))?/\n        }, {\n            include: \"#imports\"\n        }, {\n            include: \"#statements\"\n        }],\n        \"#classes\": [{\n            token: \"text\",\n            regex: /(?=\\s*(?:companion|class|object|interface))/,\n            push: [{\n                token: \"text\",\n                regex: /}|(?=$)/,\n                next: \"pop\"\n            }, {\n                token: [\"keyword.other.kotlin\", \"text\"],\n                regex: /\\b((?:companion\\s*)?)(class|object|interface)\\b/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=<|{|\\(|:)/,\n                    next: \"pop\"\n                }, {\n                    token: \"keyword.other.kotlin\",\n                    regex: /\\bobject\\b/\n                }, {\n                    token: \"entity.name.type.class.kotlin\",\n                    regex: /\\w+/\n                }]\n            }, {\n                token: \"text\",\n                regex: /</,\n                push: [{\n                    token: \"text\",\n                    regex: />/,\n                    next: \"pop\"\n                }, {\n                    include: \"#generics\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\(/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#parameters\"\n                }]\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?={|$)/,\n                    next: \"pop\"\n                }, {\n                    token: \"entity.other.inherited-class.kotlin\",\n                    regex: /\\w+/\n                }, {\n                    token: \"text\",\n                    regex: /\\(/,\n                    push: [{\n                        token: \"text\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#expressions\"\n                    }]\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\}/,\n                    next: \"pop\"\n                }, {\n                    include: \"#statements\"\n                }]\n            }]\n        }],\n        \"#comments\": [{\n            token: \"punctuation.definition.comment.kotlin\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.kotlin\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.kotlin\"\n            }]\n        }, {\n            token: [\n                \"text\",\n                \"punctuation.definition.comment.kotlin\",\n                \"comment.line.double-slash.kotlin\"\n            ],\n            regex: /(\\s*)(\\/\\/)(.*$)/\n        }],\n        \"#constants\": [{\n            token: \"constant.language.kotlin\",\n            regex: /\\b(?:true|false|null|this|super)\\b/\n        }, {\n            token: \"constant.numeric.kotlin\",\n            regex: /\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\b/\n        }, {\n            token: \"constant.other.kotlin\",\n            regex: /\\b[A-Z][A-Z0-9_]+\\b/\n        }],\n        \"#expressions\": [{\n            token: \"text\",\n            regex: /\\(/,\n            push: [{\n                token: \"text\",\n                regex: /\\)/,\n                next: \"pop\"\n            }, {\n                include: \"#expressions\"\n            }]\n        }, {\n            include: \"#types\"\n        }, {\n            include: \"#strings\"\n        }, {\n            include: \"#constants\"\n        }, {\n            include: \"#comments\"\n        }, {\n            include: \"#keywords\"\n        }],\n        \"#functions\": [{\n            token: \"text\",\n            regex: /(?=\\s*fun)/,\n            push: [{\n                token: \"text\",\n                regex: /}|(?=$)/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.other.kotlin\",\n                regex: /\\bfun\\b/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=\\()/,\n                    next: \"pop\"\n                }, {\n                    token: \"text\",\n                    regex: /</,\n                    push: [{\n                        token: \"text\",\n                        regex: />/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#generics\"\n                    }]\n                }, {\n                    token: [\"text\", \"entity.name.function.kotlin\"],\n                    regex: /((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\(/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#parameters\"\n                }]\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?={|=|$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#types\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=\\})/,\n                    next: \"pop\"\n                }, {\n                    include: \"#statements\"\n                }]\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }]\n        }],\n        \"#generics\": [{\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /:/,\n            push: [{\n                token: \"text\",\n                regex: /(?=,|>)/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }]\n        }, {\n            include: \"#keywords\"\n        }, {\n            token: \"storage.type.generic.kotlin\",\n            regex: /\\w+/\n        }],\n        \"#getters-and-setters\": [{\n            token: [\"entity.name.function.kotlin\", \"text\"],\n            regex: /\\b(get)\\b(\\s*\\(\\s*\\))/,\n            push: [{\n                token: \"text\",\n                regex: /\\}|(?=\\bset\\b)|$/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$|\\bset\\b)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\}/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }]\n        }, {\n            token: [\"entity.name.function.kotlin\", \"text\"],\n            regex: /\\b(set)\\b(\\s*)(?=\\()/,\n            push: [{\n                token: \"text\",\n                regex: /\\}|(?=\\bget\\b)|$/,\n                next: \"pop\"\n            }, {\n                token: \"text\",\n                regex: /\\(/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#parameters\"\n                }]\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$|\\bset\\b)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\}/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }]\n        }],\n        \"#imports\": [{\n            token: [\n                \"text\",\n                \"keyword.other.kotlin\",\n                \"text\",\n                \"keyword.other.kotlin\"\n            ],\n            regex: /^(\\s*)(import)(\\s+[^ $]+\\s+)((?:as)?)/\n        }],\n        \"#keywords\": [{\n            token: \"storage.modifier.kotlin\",\n            regex: /\\b(?:var|val|public|private|protected|abstract|final|enum|open|attribute|annotation|override|inline|var|val|vararg|lazy|in|out|internal|data|tailrec|operator|infix|const|yield|typealias|typeof)\\b/\n        }, {\n            token: \"keyword.control.catch-exception.kotlin\",\n            regex: /\\b(?:try|catch|finally|throw)\\b/\n        }, {\n            token: \"keyword.control.kotlin\",\n            regex: /\\b(?:if|else|while|for|do|return|when|where|break|continue)\\b/\n        }, {\n            token: \"keyword.operator.kotlin\",\n            regex: /\\b(?:in|is|as|assert)\\b/\n        }, {\n            token: \"keyword.operator.comparison.kotlin\",\n            regex: /==|!=|===|!==|<=|>=|<|>/\n        }, {\n            token: \"keyword.operator.assignment.kotlin\",\n            regex: /=/\n        }, {\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /:/\n        }, {\n            token: \"keyword.operator.dot.kotlin\",\n            regex: /\\./\n        }, {\n            token: \"keyword.operator.increment-decrement.kotlin\",\n            regex: /\\-\\-|\\+\\+/\n        }, {\n            token: \"keyword.operator.arithmetic.kotlin\",\n            regex: /\\-|\\+|\\*|\\/|%/\n        }, {\n            token: \"keyword.operator.arithmetic.assign.kotlin\",\n            regex: /\\+=|\\-=|\\*=|\\/=/\n        }, {\n            token: \"keyword.operator.logical.kotlin\",\n            regex: /!|&&|\\|\\|/\n        }, {\n            token: \"keyword.operator.range.kotlin\",\n            regex: /\\.\\./\n        }, {\n            token: \"punctuation.terminator.kotlin\",\n            regex: /;/\n        }],\n        \"#namespaces\": [{\n            token: \"keyword.other.kotlin\",\n            regex: /\\bnamespace\\b/\n        }, {\n            token: \"text\",\n            regex: /\\{/,\n            push: [{\n                token: \"text\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                include: \"#statements\"\n            }]\n        }],\n        \"#parameters\": [{\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /:/,\n            push: [{\n                token: \"text\",\n                regex: /(?=,|\\)|=)/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }]\n        }, {\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /=/,\n            push: [{\n                token: \"text\",\n                regex: /(?=,|\\))/,\n                next: \"pop\"\n            }, {\n                include: \"#expressions\"\n            }]\n        }, {\n            include: \"#keywords\"\n        }, {\n            token: \"variable.parameter.function.kotlin\",\n            regex: /\\w+/\n        }],\n        \"#statements\": [{\n            include: \"#namespaces\"\n        }, {\n            include: \"#typedefs\"\n        }, {\n            include: \"#classes\"\n        }, {\n            include: \"#functions\"\n        }, {\n            include: \"#variables\"\n        }, {\n            include: \"#getters-and-setters\"\n        }, {\n            include: \"#expressions\"\n        }],\n        \"#strings\": [{\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /\"\"\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /\"\"\"/,\n                next: \"pop\"\n            }, {\n                token: \"variable.parameter.template.kotlin\",\n                regex: /\\$\\w+|\\$\\{[^\\}]+\\}/\n            }, {\n                token: \"constant.character.escape.kotlin\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.third.kotlin\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"variable.parameter.template.kotlin\",\n                regex: /\\$\\w+|\\$\\{[^\\}]+\\}/\n            }, {\n                token: \"constant.character.escape.kotlin\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.kotlin\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /'/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /'/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.kotlin\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.single.kotlin\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /`/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /`/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.single.kotlin\"\n            }]\n        }],\n        \"#typedefs\": [{\n            token: \"text\",\n            regex: /(?=\\s*type)/,\n            push: [{\n                token: \"text\",\n                regex: /(?=$)/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.other.kotlin\",\n                regex: /\\btype\\b/\n            }, {\n                token: \"text\",\n                regex: /</,\n                push: [{\n                    token: \"text\",\n                    regex: />/,\n                    next: \"pop\"\n                }, {\n                    include: \"#generics\"\n                }]\n            }, {\n                include: \"#expressions\"\n            }]\n        }],\n        \"#types\": [{\n            token: \"storage.type.buildin.kotlin\",\n            regex: /\\b(?:Any|Unit|String|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic)\\b/\n        }, {\n            token: \"storage.type.buildin.array.kotlin\",\n            regex: /\\b(?:IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray)\\b/\n        }, {\n            token: [\n                \"storage.type.buildin.collection.kotlin\",\n                \"text\"\n            ],\n            regex: /\\b(Array|List|Map)(<\\b)/,\n            push: [{\n                token: \"text\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }, {\n                include: \"#keywords\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /\\w+</,\n            push: [{\n                token: \"text\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }, {\n                include: \"#keywords\"\n            }]\n        }, {\n            token: [\"keyword.operator.tuple.kotlin\", \"text\"],\n            regex: /(#)(\\()/,\n            push: [{\n                token: \"text\",\n                regex: /\\)/,\n                next: \"pop\"\n            }, {\n                include: \"#expressions\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /\\{/,\n            push: [{\n                token: \"text\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                include: \"#statements\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /\\(/,\n            push: [{\n                token: \"text\",\n                regex: /\\)/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }]\n        }, {\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /->/\n        }],\n        \"#variables\": [{\n            token: \"text\",\n            regex: /(?=\\s*(?:var|val))/,\n            push: [{\n                token: \"text\",\n                regex: /(?=:|=|$)/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.other.kotlin\",\n                regex: /\\b(?:var|val)\\b/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=:|=|$)/,\n                    next: \"pop\"\n                }, {\n                    token: \"text\",\n                    regex: /</,\n                    push: [{\n                        token: \"text\",\n                        regex: />/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#generics\"\n                    }]\n                }, {\n                    token: [\"text\", \"entity.name.variable.kotlin\"],\n                    regex: /((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/\n                }]\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?==|$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#types\"\n                }, {\n                    include: \"#getters-and-setters\"\n                }]\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }, {\n                    include: \"#getters-and-setters\"\n                }]\n            }]\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nKotlinHighlightRules.metaData = {\n    fileTypes: [\"kt\", \"kts\"],\n    name: \"Kotlin\",\n    scopeName: \"source.Kotlin\"\n};\n\n\noop.inherits(KotlinHighlightRules, TextHighlightRules);\n\nexports.KotlinHighlightRules = KotlinHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/kotlin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/kotlin_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar KotlinHighlightRules = require(\"./kotlin_highlight_rules\").KotlinHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = KotlinHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/kotlin\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-latex.js",
    "content": "ace.define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LatexHighlightRules = function() {  \n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            token : [\"keyword\", \"lparen\", \"variable.parameter\", \"rparen\", \"lparen\", \"storage.type\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"\n        }, {\n            token : [\"keyword\",\"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"\n        }, {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(verbatim)(})\",\n            next : \"verbatim\"\n        },  {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(lstlisting)(})\",\n            next : \"lstlisting\"\n        },  {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"\n        }, {\n            token : \"storage.type\",\n            regex : /\\\\verb\\b\\*?/,\n            next : [{\n                token : [\"keyword.operator\", \"string\", \"keyword.operator\"],\n                regex : \"(.)(.*?)(\\\\1|$)|\",\n                next : \"start\"\n            }]\n        }, {\n            token : \"storage.type\",\n            regex : \"\\\\\\\\[a-zA-Z]+\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\[^a-zA-Z]?\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"equation\"\n        }],\n        \"equation\" : [{\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"start\"\n        }, {\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"\n        }, {\n            token : \"error\", \n            regex : \"^\\\\s*$\", \n            next : \"start\" \n        }, {\n            defaultToken : \"string\"\n        }],\n        \"verbatim\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(verbatim)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }],\n        \"lstlisting\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(lstlisting)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\noop.inherits(LatexHighlightRules, TextHighlightRules);\n\nexports.LatexHighlightRules = LatexHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar keywordLevels = {\n    \"\\\\subparagraph\": 1,\n    \"\\\\paragraph\": 2,\n    \"\\\\subsubsubsection\": 3,\n    \"\\\\subsubsection\": 4,\n    \"\\\\subsection\": 5,\n    \"\\\\section\": 6,\n    \"\\\\chapter\": 7,\n    \"\\\\part\": 8,\n    \"\\\\begin\": 9,\n    \"\\\\end\": 10\n};\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^\\s*\\\\(begin)|\\s*\\\\(part|chapter|(?:sub)*(?:section|paragraph))\\b|{\\s*$/;\n    this.foldingStopMarker = /^\\s*\\\\(end)\\b|^\\s*}/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.latexBlock(session, row, match[0].length - 1);\n            if (match[2])\n                return this.latexSection(session, row, match[0].length - 1);\n\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.latexBlock(session, row, match[0].length - 1);\n\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n\n    this.latexBlock = function(session, row, column, returnRange) {\n        var keywords = {\n            \"\\\\begin\": 1,\n            \"\\\\end\": -1\n        };\n\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || !(token.type == \"storage.type\" || token.type == \"constant.character.escape\"))\n            return;\n\n        var val = token.value;\n        var dir = keywords[val];\n\n        var getType = function() {\n            var token = stream.stepForward();\n            var type = token.type == \"lparen\" ?stream.stepForward().value : \"\";\n            if (dir === -1) {\n                stream.stepBackward();\n                if (type)\n                    stream.stepBackward();\n            }\n            return type;\n        };\n        var stack = [getType()];\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while(token = stream.step()) {\n            if (!token || !(token.type == \"storage.type\" || token.type == \"constant.character.escape\"))\n                continue;\n            var level = keywords[token.value];\n            if (!level)\n                continue;\n            var type = getType();\n            if (level === dir)\n                stack.unshift(type);\n            else if (stack.shift() !== type || !stack.length)\n                break;\n        }\n\n        if (stack.length)\n            return;\n        \n        if (dir == 1) {\n            stream.stepBackward();\n            stream.stepBackward();\n        }\n        \n        if (returnRange)\n            return stream.getCurrentTokenRange();\n\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n\n    this.latexSection = function(session, row, column) {\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"storage.type\")\n            return;\n\n        var startLevel = keywordLevels[token.value] || 0;\n        var stackDepth = 0;\n        var endRow = row;\n\n        while(token = stream.stepForward()) {\n            if (token.type !== \"storage.type\")\n                continue;\n            var level = keywordLevels[token.value] || 0;\n\n            if (level >= 9) {\n                if (!stackDepth)\n                    endRow = stream.getCurrentTokenRow() - 1;\n                stackDepth += level == 9 ? 1 : - 1;\n                if (stackDepth < 0)\n                    break;\n            } else if (level >= startLevel)\n                break;\n        }\n\n        if (!stackDepth)\n            endRow = stream.getCurrentTokenRow() - 1;\n\n        while (endRow > row && !/\\S/.test(session.getLine(endRow)))\n            endRow--;\n\n        return new Range(\n            row, session.getLine(row).length,\n            endRow, session.getLine(endRow).length\n        );\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/latex_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/latex\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LatexHighlightRules = require(\"./latex_highlight_rules\").LatexHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar LatexFoldMode = require(\"./folding/latex\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LatexHighlightRules;\n    this.foldingRules = new LatexFoldMode();\n    this.$behaviour = new CstyleBehaviour({ braces: true });\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    \n    this.lineCommentStart = \"%\";\n\n    this.$id = \"ace/mode/latex\";\n    \n    this.getMatching = function(session, row, column) {\n        if (row == undefined)\n            row = session.selection.lead;\n        if (typeof row == \"object\") {\n            column = row.column;\n            row = row.row;\n        }\n\n        var startToken = session.getTokenAt(row, column);\n        if (!startToken)\n            return;\n        if (startToken.value == \"\\\\begin\" || startToken.value == \"\\\\end\") {\n            return this.foldingRules.latexBlock(session, row, column, true);\n        }\n    };\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-less.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\n\nvar LessHighlightRules = function() {\n\n\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" + \n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n\n    var keywords = keywordList.split('|');\n\n    var properties = CssHighlightRules.supportType.split('|');\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);   \n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : [\"constant.numeric\", \"keyword\"],\n                regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex : \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token : [\"support.function\", \"paren.lparen\"],\n                regex : \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token : function(value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex : \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token : \"variable\",\n                regex : \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token : function(first, second) {\n                    if(properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex : \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token : \"keyword\",\n                regex : \"&\"   // special case - always treat as keyword\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(LessHighlightRules, TextHighlightRules);\n\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LessHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(\"ruleset\", session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/less\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-liquid.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/behaviour/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n    \"use strict\";\n    \n    var oop = require(\"../../lib/oop\");\n    var Behaviour = require(\"../behaviour\").Behaviour;\n    var XmlBehaviour = require(\"./xml\").XmlBehaviour;\n    var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n    var lang = require(\"../../lib/lang\");\n    \n    function is(token, type) {\n        return token && token.type.lastIndexOf(type + \".xml\") > -1;\n    }\n    \n    var LiquidBehaviour = function () {\n        XmlBehaviour.call(this);\n        this.add(\"autoBraceTagClosing\",\"insertion\", function (state, action, editor, session, text) {\n            if (text == '}') {\n                var position = editor.getSelectionRange().start;\n                var iterator = new TokenIterator(session, position.row, position.column);\n                var token = iterator.getCurrentToken() || iterator.stepBackward();\n                if (!token || !( token.value.trim() === '%' || is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                    return;\n                if (is(token, \"reference.attribute-value\"))\n                    return;\n\n                if (is(token, \"attribute-value\")) {\n                    var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                    if (position.column < tokenEndColumn)\n                        return;\n                    if (position.column == tokenEndColumn) {\n                        var nextToken = iterator.stepForward();\n                        if (nextToken && is(nextToken, \"attribute-value\"))\n                            return;\n                        iterator.stepBackward();\n                    }\n                }\n                if (/{%\\s*%/.test(session.getLine(position.row))) return;\n                if (/^\\s*}/.test(session.getLine(position.row).slice(position.column)))\n                    return;\n                while (!token.type != 'keyword.block') {\n                    token = iterator.stepBackward();\n                    if (token.value == '{%') {\n                        while(true) {\n                            token = iterator.stepForward();\n\n                            if (token.type === 'keyword.block') {\n                                break;\n                            } else if (token.value.trim() == '%') {\n                                token = null;\n                                break;\n                            }\n                        }\n                        break; \n                    }\n                }\n                if (!token ) return ;\n                var tokenRow = iterator.getCurrentTokenRow();\n                var tokenColumn = iterator.getCurrentTokenColumn();\n                if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n                \n                var element = token.value;\n                if (tokenRow == position.row)\n                    element = element.substring(0, position.column - tokenColumn);\n    \n                if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                     return;\n                return {\n                   text: \"}\" + \"{% end\" + element + \" %}\",\n                   selection: [1, 1]\n                };\n            }\n        });\n    \n    };\n\n    oop.inherits(LiquidBehaviour, Behaviour);\n    \n    exports.LiquidBehaviour = LiquidBehaviour;\n    });\n\nace.define(\"ace/mode/liquid_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar LiquidHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var functions = (\n        \"date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|\" +\n         \"escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|\" +\n         \"truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split\"\n    );\n\n    var keywords = (\n        \"capture|endcapture|case|endcase|when|comment|endcomment|\" +\n        \"cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|\" +\n        \"style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow\"\n    );\n    var blocks = 'for|if|case|capture|unless|tablerow|marker|comment';\n\n    var builtinVariables = 'forloop|tablerowloop';\n\n    var definitions = (\"assign\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": builtinVariables,\n        \"keyword\": keywords,\n        \"keyword.block\": blocks,\n        \"support.function\": functions,\n        \"keyword.definition\": definitions\n    }, \"identifier\");\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token : \"variable\",\n            regex : \"{%\",\n            push : \"liquid-start\"\n        }, {\n            token : \"variable\",\n            regex : \"{{\",\n            push : \"liquid-start\"\n        });\n    }\n\n    this.addRules({\n        \"liquid-start\" : [{\n            token: \"variable\",\n            regex: \"}}\",\n            next: \"pop\"\n        }, {\n            token: \"variable\",\n            regex: \"%}\",\n            next: \"pop\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"/|\\\\*|\\\\-|\\\\+|=|!=|\\\\?\\\\:\"\n        }, {\n            token : \"paren.lparen\",\n            regex : /[\\[\\({]/\n        }, {\n            token : \"paren.rparen\",\n            regex : /[\\])}]/\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }]\n    });\n\n    this.normalizeRules();\n};\noop.inherits(LiquidHighlightRules, TextHighlightRules);\n\nexports.LiquidHighlightRules = LiquidHighlightRules;\n});\n\nace.define(\"ace/mode/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/html\",\"ace/mode/html_completions\",\"ace/mode/behaviour/liquid\",\"ace/mode/liquid_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar LiquidBehaviour = require(\"./behaviour/liquid\").LiquidBehaviour;\nvar LiquidHighlightRules = require(\"./liquid_highlight_rules\").LiquidHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = LiquidHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new LiquidBehaviour();\n    this.$completer = new HtmlCompletions();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n    this.voidElements = new HtmlMode().voidElements;\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/liquid\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-lisp.js",
    "content": "ace.define(\"ace/mode/lisp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LispHighlightRules = function() {\n    var keywordControl = \"case|do|let|loop|if|else|when\";\n    var keywordOperator = \"eq|neq|and|or\";\n    var constantLanguage = \"null|nil\";\n    var supportFunctions = \"cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control\": keywordControl,\n        \"keyword.operator\": keywordOperator,\n        \"constant.language\": constantLanguage,\n        \"support.function\": supportFunctions\n    }, \"identifier\", true);\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token : \"comment\",\n            regex : \";.*$\"\n        },\n        {\n            token: [\"storage.type.function-type.lisp\", \"text\", \"entity.name.function.lisp\"],\n            regex: \"(?:\\\\b(?:(defun|defmethod|defmacro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"\n        },\n        {\n            token: [\"punctuation.definition.constant.character.lisp\", \"constant.character.lisp\"],\n            regex: \"(#)((?:\\\\w|[\\\\\\\\+-=<>'\\\"&#])+)\"\n        },\n        {\n            token: [\"punctuation.definition.variable.lisp\", \"variable.other.global.lisp\", \"punctuation.definition.variable.lisp\"],\n            regex: \"(\\\\*)(\\\\S*)(\\\\*)\"\n        },\n        {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n        }, \n        {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n        },\n        {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        },\n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        }\n    ],\n    \"qqstring\": [\n        {\n            token: \"constant.character.escape.lisp\",\n            regex: \"\\\\\\\\.\"\n        },\n        {\n            token : \"string\",\n            regex : '[^\"\\\\\\\\]+'\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }\n    ]\n};\n\n};\n\noop.inherits(LispHighlightRules, TextHighlightRules);\n\nexports.LispHighlightRules = LispHighlightRules;\n});\n\nace.define(\"ace/mode/lisp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lisp_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LispHighlightRules = require(\"./lisp_highlight_rules\").LispHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = LispHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = \";\";\n    \n    this.$id = \"ace/mode/lisp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-livescript.js",
    "content": "ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/livescript\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/text\"], function(require, exports, module){\n  var identifier, LiveScriptMode, keywordend, stringfill;\n  identifier = '(?![\\\\d\\\\s])[$\\\\w\\\\xAA-\\\\uFFDC](?:(?!\\\\s)[$\\\\w\\\\xAA-\\\\uFFDC]|-[A-Za-z])*';\n  exports.Mode = LiveScriptMode = (function(superclass){\n    var indenter, prototype = extend$((import$(LiveScriptMode, superclass).displayName = 'LiveScriptMode', LiveScriptMode), superclass).prototype, constructor = LiveScriptMode;\n    function LiveScriptMode(){\n      var that;\n      this.$tokenizer = new (require('../tokenizer')).Tokenizer(LiveScriptMode.Rules);\n      if (that = require('../mode/matching_brace_outdent')) {\n        this.$outdent = new that.MatchingBraceOutdent;\n      }\n      this.$id = \"ace/mode/livescript\";\n      this.$behaviour = new (require(\"./behaviour/cstyle\").CstyleBehaviour)();\n    }\n    indenter = RegExp('(?:[({[=:]|[-~]>|\\\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\\\s*all)?|const|var|let|new|catch(?:\\\\s*' + identifier + ')?))\\\\s*$');\n    prototype.getNextLineIndent = function(state, line, tab){\n      var indent, tokens;\n      indent = this.$getIndent(line);\n      tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n      if (!(tokens.length && tokens[tokens.length - 1].type === 'comment')) {\n        if (state === 'start' && indenter.test(line)) {\n          indent += tab;\n        }\n      }\n      return indent;\n    };\n    prototype.lineCommentStart = \"#\";\n    prototype.blockComment = {start: \"###\", end: \"###\"};\n    prototype.checkOutdent = function(state, line, input){\n      var ref$;\n      return (ref$ = this.$outdent) != null ? ref$.checkOutdent(line, input) : void 8;\n    };\n    prototype.autoOutdent = function(state, doc, row){\n      var ref$;\n      return (ref$ = this.$outdent) != null ? ref$.autoOutdent(doc, row) : void 8;\n    };\n    return LiveScriptMode;\n  }(require('../mode/text').Mode));\n  keywordend = '(?![$\\\\w]|-[A-Za-z]|\\\\s*:(?![:=]))';\n  stringfill = {\n    defaultToken: 'string'\n  };\n  LiveScriptMode.Rules = {\n    start: [\n      {\n        token: 'keyword',\n        regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend\n      }, {\n        token: 'constant.language',\n        regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend\n      }, {\n        token: 'invalid.illegal',\n        regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend\n      }, {\n        token: 'language.support.class',\n        regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend\n      }, {\n        token: 'language.support.function',\n        regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend\n      }, {\n        token: 'variable.language',\n        regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend\n      }, {\n        token: 'identifier',\n        regex: identifier + '\\\\s*:(?![:=])'\n      }, {\n        token: 'variable',\n        regex: identifier\n      }, {\n        token: 'keyword.operator',\n        regex: '(?:\\\\.{3}|\\\\s+\\\\?)'\n      }, {\n        token: 'keyword.variable',\n        regex: '(?:@+|::|\\\\.\\\\.)',\n        next: 'key'\n      }, {\n        token: 'keyword.operator',\n        regex: '\\\\.\\\\s*',\n        next: 'key'\n      }, {\n        token: 'string',\n        regex: '\\\\\\\\\\\\S[^\\\\s,;)}\\\\]]*'\n      }, {\n        token: 'string.doc',\n        regex: '\\'\\'\\'',\n        next: 'qdoc'\n      }, {\n        token: 'string.doc',\n        regex: '\"\"\"',\n        next: 'qqdoc'\n      }, {\n        token: 'string',\n        regex: '\\'',\n        next: 'qstring'\n      }, {\n        token: 'string',\n        regex: '\"',\n        next: 'qqstring'\n      }, {\n        token: 'string',\n        regex: '`',\n        next: 'js'\n      }, {\n        token: 'string',\n        regex: '<\\\\[',\n        next: 'words'\n      }, {\n        token: 'string.regex',\n        regex: '//',\n        next: 'heregex'\n      }, {\n        token: 'comment.doc',\n        regex: '/\\\\*',\n        next: 'comment'\n      }, {\n        token: 'comment',\n        regex: '#.*'\n      }, {\n        token: 'string.regex',\n        regex: '\\\\/(?:[^[\\\\/\\\\n\\\\\\\\]*(?:(?:\\\\\\\\.|\\\\[[^\\\\]\\\\n\\\\\\\\]*(?:\\\\\\\\.[^\\\\]\\\\n\\\\\\\\]*)*\\\\])[^[\\\\/\\\\n\\\\\\\\]*)*)\\\\/[gimy$]{0,4}',\n        next: 'key'\n      }, {\n        token: 'constant.numeric',\n        regex: '(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*|(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*|(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)(?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)'\n      }, {\n        token: 'lparen',\n        regex: '[({[]'\n      }, {\n        token: 'rparen',\n        regex: '[)}\\\\]]',\n        next: 'key'\n      }, {\n        token: 'keyword.operator',\n        regex: '[\\\\^!|&%+\\\\-]+'\n      }, {\n        token: 'text',\n        regex: '\\\\s+'\n      }\n    ],\n    heregex: [\n      {\n        token: 'string.regex',\n        regex: '.*?//[gimy$?]{0,4}',\n        next: 'start'\n      }, {\n        token: 'string.regex',\n        regex: '\\\\s*#{'\n      }, {\n        token: 'comment.regex',\n        regex: '\\\\s+(?:#.*)?'\n      }, {\n        defaultToken: 'string.regex'\n      }\n    ],\n    key: [\n      {\n        token: 'keyword.operator',\n        regex: '[.?@!]+'\n      }, {\n        token: 'identifier',\n        regex: identifier,\n        next: 'start'\n      }, {\n        token: 'text',\n        regex: '',\n        next: 'start'\n      }\n    ],\n    comment: [\n      {\n        token: 'comment.doc',\n        regex: '.*?\\\\*/',\n        next: 'start'\n      }, {\n        defaultToken: 'comment.doc'\n      }\n    ],\n    qdoc: [\n      {\n        token: 'string',\n        regex: \".*?'''\",\n        next: 'key'\n      }, stringfill\n    ],\n    qqdoc: [\n      {\n        token: 'string',\n        regex: '.*?\"\"\"',\n        next: 'key'\n      }, stringfill\n    ],\n    qstring: [\n      {\n        token: 'string',\n        regex: '[^\\\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\\\']*)*\\'',\n        next: 'key'\n      }, stringfill\n    ],\n    qqstring: [\n      {\n        token: 'string',\n        regex: '[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',\n        next: 'key'\n      }, stringfill\n    ],\n    js: [\n      {\n        token: 'string',\n        regex: '[^\\\\\\\\`]*(?:\\\\\\\\.[^\\\\\\\\`]*)*`',\n        next: 'key'\n      }, stringfill\n    ],\n    words: [\n      {\n        token: 'string',\n        regex: '.*?\\\\]>',\n        next: 'key'\n      }, stringfill\n    ]\n  };\nfunction extend$(sub, sup){\n  function fun(){} fun.prototype = (sub.superclass = sup).prototype;\n  (sub.prototype = new fun).constructor = sub;\n  if (typeof sup.extended == 'function') sup.extended(sub);\n  return sub;\n}\nfunction import$(obj, src){\n  var own = {}.hasOwnProperty;\n  for (var key in src) if (own.call(src, key)) obj[key] = src[key];\n  return obj;\n}\n});                (function() {\n                    ace.require([\"ace/mode/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-logiql.js",
    "content": "ace.define(\"ace/mode/logiql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LogiQLHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'comment.block',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'comment.block', regex: '\\\\*/', next: 'pop' },\n              { defaultToken: 'comment.block' } ]\n            },\n         { token: 'comment.single',\n           regex: '//.*'\n            },\n         { token: 'constant.numeric',\n           regex: '\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?[fd]?'\n            },\n         { token: 'string',\n           regex: '\"',\n           push: \n            [ { token: 'string', regex: '\"', next: 'pop' },\n              { defaultToken: 'string' } ]\n            },\n         { token: 'constant.language',\n           regex: '\\\\b(true|false)\\\\b'\n            },\n         { token: 'entity.name.type.logicblox',\n           regex: '`[a-zA-Z_:]+(\\\\d|\\\\a)*\\\\b'\n            },\n         { token: 'keyword.start', regex: '->',  comment: 'Constraint' },\n         { token: 'keyword.start', regex: '-->', comment: 'Level 1 Constraint'},\n         { token: 'keyword.start', regex: '<-',  comment: 'Rule' },\n         { token: 'keyword.start', regex: '<--', comment: 'Level 1 Rule' },\n         { token: 'keyword.end',   regex: '\\\\.', comment: 'Terminator' },\n         { token: 'keyword.other', regex: '!',   comment: 'Negation' },\n         { token: 'keyword.other', regex: ',',   comment: 'Conjunction' },\n         { token: 'keyword.other', regex: ';',   comment: 'Disjunction' },\n         { token: 'keyword.operator', regex: '<=|>=|!=|<|>', comment: 'Equality'},\n         { token: 'keyword.other', regex: '@', comment: 'Equality' },\n         { token: 'keyword.operator', regex: '\\\\+|-|\\\\*|/', comment: 'Arithmetic operations'},\n         { token: 'keyword', regex: '::', comment: 'Colon colon' },\n         { token: 'support.function',\n           regex: '\\\\b(agg\\\\s*<<)',\n           push: \n            [ { include: '$self' },\n              { token: 'support.function',\n                regex: '>>',\n                next: 'pop' } ]\n            },\n         { token: 'storage.modifier',\n           regex: '\\\\b(lang:[\\\\w:]*)'\n            },\n         { token: [ 'storage.type', 'text' ],\n           regex: '(export|sealed|clauses|block|alias|alias_all)(\\\\s*\\\\()(?=`)'\n            },\n         { token: 'entity.name',\n           regex: '[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\\\(|\\\\[))'\n            },\n         { token: 'variable.parameter',\n           regex: '([a-zA-Z][a-zA-Z_0-9]*|_)\\\\s*(?=(,|\\\\.|<-|->|\\\\)|\\\\]|=))'\n            } ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LogiQLHighlightRules, TextHighlightRules);\n\nexports.LogiQLHighlightRules = LogiQLHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/logiql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/logiql_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/token_iterator\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LogiQLHighlightRules = require(\"./logiql_highlight_rules\").LogiQLHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = LogiQLHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (/comment|string/.test(endState))  \n            return indent;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment.single\")\n            return indent;\n\n        var match = line.match();\n        if (/(-->|<--|<-|->|{)\\s*$/.test(line))\n            indent += tab;\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (this.$outdent.checkOutdent(line, input))\n            return true;\n\n        if (input !== \"\\n\" && input !== \"\\r\\n\")\n            return false;\n            \n        if (!/^\\s+/.test(line))\n            return false;\n\n        return true;\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        if (this.$outdent.autoOutdent(doc, row))\n            return;\n        var prevLine = doc.getLine(row);\n        var match = prevLine.match(/^\\s+/);\n        var column = prevLine.lastIndexOf(\".\") + 1;\n        if (!match || !row || !column) return 0;\n\n        var line = doc.getLine(row + 1);\n        var startRange = this.getMatching(doc, {row: row, column: column});\n        if (!startRange || startRange.start.row == row) return 0;\n\n        column = match[0].length;\n        var indent = this.$getIndent(doc.getLine(startRange.start.row));\n        doc.replace(new Range(row + 1, 0, row + 1, column), indent);\n    };\n\n    this.getMatching = function(session, row, column) {\n        if (row == undefined)\n            row = session.selection.lead;\n        if (typeof row == \"object\") {\n            column = row.column;\n            row = row.row;\n        }\n\n        var startToken = session.getTokenAt(row, column);\n        var KW_START = \"keyword.start\", KW_END = \"keyword.end\";\n        var tok;\n        if (!startToken)\n            return;\n        if (startToken.type == KW_START) {\n            var it = new TokenIterator(session, row, column);\n            it.step = it.stepForward;\n        } else if (startToken.type == KW_END) {\n            var it = new TokenIterator(session, row, column);\n            it.step = it.stepBackward;\n        } else\n            return;\n\n        while (tok = it.step()) {\n            if (tok.type == KW_START || tok.type == KW_END)\n                break;\n        }\n        if (!tok || tok.type == startToken.type)\n            return;\n\n        var col = it.getCurrentTokenColumn();\n        var row = it.getCurrentTokenRow();\n        return new Range(row, col, row, col + tok.value.length);\n    };\n    this.$id = \"ace/mode/logiql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-logtalk.js",
    "content": "ace.define(\"ace/mode/logtalk_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LogtalkHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: 'punctuation.definition.comment.logtalk',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.logtalk',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.logtalk' } ] },\n         { todo: 'fix grouping',\n           token: \n            [ 'comment.line.percentage.logtalk',\n              'punctuation.definition.comment.logtalk' ],\n           regex: '%.*$\\\\n?' },\n         { todo: 'fix grouping',\n           token: \n            [ 'storage.type.opening.logtalk',\n              'punctuation.definition.storage.type.logtalk' ],\n           regex: ':-\\\\s(?:object|protocol|category|module)(?=[(])' },\n         { todo: 'fix grouping',\n           token: \n            [ 'storage.type.closing.logtalk',\n              'punctuation.definition.storage.type.logtalk' ],\n           regex: ':-\\\\send_(?:object|protocol|category)(?=[.])' },\n         { caseInsensitive: false,\n           token: 'storage.type.relations.logtalk',\n           regex: '\\\\b(?:complements|extends|i(?:nstantiates|mp(?:orts|lements))|specializes)(?=[(])' },\n         { caseInsensitive: false,\n           todo: 'fix grouping',\n           token: \n            [ 'storage.modifier.others.logtalk',\n              'punctuation.definition.storage.modifier.logtalk' ],\n           regex: ':-\\\\s(?:e(?:lse|ndif)|built_in|dynamic|synchronized|threaded)(?=[.])' },\n         { caseInsensitive: false,\n           todo: 'fix grouping',\n           token: \n            [ 'storage.modifier.others.logtalk',\n              'punctuation.definition.storage.modifier.logtalk' ],\n           regex: ':-\\\\s(?:c(?:alls|oinductive)|e(?:lif|n(?:coding|sure_loaded)|xport)|i(?:f|n(?:clude|itialization|fo))|reexport|set_(?:logtalk|prolog)_flag|uses)(?=[(])' },\n         { caseInsensitive: false,\n           todo: 'fix grouping',\n           token: \n            [ 'storage.modifier.others.logtalk',\n              'punctuation.definition.storage.modifier.logtalk' ],\n           regex: ':-\\\\s(?:alias|info|d(?:ynamic|iscontiguous)|m(?:eta_(?:non_terminal|predicate)|ode|ultifile)|p(?:ublic|r(?:otected|ivate))|op|use(?:s|_module)|synchronized)(?=[(])' },\n         { token: 'keyword.operator.message-sending.logtalk',\n           regex: '(:|::|\\\\^\\\\^)' },\n         { token: 'keyword.operator.external-call.logtalk',\n           regex: '([{}])' },\n         { token: 'keyword.operator.mode.logtalk', regex: '(\\\\?|@)' },\n         { token: 'keyword.operator.comparison.term.logtalk',\n           regex: '(@=<|@<|@>|@>=|==|\\\\\\\\==)' },\n         { token: 'keyword.operator.comparison.arithmetic.logtalk',\n           regex: '(=<|<|>|>=|=:=|=\\\\\\\\=)' },\n         { token: 'keyword.operator.bitwise.logtalk',\n           regex: '(<<|>>|/\\\\\\\\|\\\\\\\\/|\\\\\\\\)' },\n         { token: 'keyword.operator.evaluable.logtalk',\n           regex: '\\\\b(?:e|pi|div|mod|rem)\\\\b(?![-!(^~])' },\n         { token: 'keyword.operator.evaluable.logtalk',\n           regex: '(\\\\*\\\\*|\\\\+|-|\\\\*|/|//)' },\n         { token: 'keyword.operator.misc.logtalk',\n           regex: '(:-|!|\\\\\\\\+|,|;|-->|->|=|\\\\=|\\\\.|=\\\\.\\\\.|\\\\^|\\\\bas\\\\b|\\\\bis\\\\b)' },\n         { caseInsensitive: false,\n           token: 'support.function.evaluable.logtalk',\n           regex: '\\\\b(a(bs|cos|sin|tan|tan2)|c(eiling|os)|div|exp|flo(at(_(integer|fractional)_part)?|or)|log|m(ax|in|od)|r(em|ound)|s(i(n|gn)|qrt)|t(an|runcate)|xor)(?=[(])' },\n         { token: 'support.function.control.logtalk',\n           regex: '\\\\b(?:true|fa(?:il|lse)|repeat|(?:instantiation|system)_error)\\\\b(?![-!(^~])' },\n         { token: 'support.function.control.logtalk',\n           regex: '\\\\b((?:type|domain|existence|permission|representation|evaluation|resource|syntax)_error)(?=[(])' },\n         { token: 'support.function.control.logtalk',\n           regex: '\\\\b(?:ca(?:ll|tch)|ignore|throw|once)(?=[(])' },\n         { token: 'support.function.chars-and-bytes-io.logtalk',\n           regex: '\\\\b(?:(?:get|p(?:eek|ut))_(c(?:har|ode)|byte)|nl)(?=[(])' },\n         { token: 'support.function.chars-and-bytes-io.logtalk',\n           regex: '\\\\bnl\\\\b' },\n         { token: 'support.function.atom-term-processing.logtalk',\n           regex: '\\\\b(?:atom_(?:length|c(?:hars|o(?:ncat|des)))|sub_atom|char_code|number_c(?:har|ode)s)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.term-testing.logtalk',\n           regex: '\\\\b(?:var|atom(ic)?|integer|float|c(?:allable|ompound)|n(?:onvar|umber)|ground|acyclic_term)(?=[(])' },\n         { token: 'support.function.term-comparison.logtalk',\n           regex: '\\\\b(compare)(?=[(])' },\n         { token: 'support.function.term-io.logtalk',\n           regex: '\\\\b(?:read(_term)?|write(?:q|_(?:canonical|term))?|(current_)?(?:char_conversion|op))(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.term-creation-and-decomposition.logtalk',\n           regex: '\\\\b(arg|copy_term|functor|numbervars|term_variables)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.term-unification.logtalk',\n           regex: '\\\\b(subsumes_term|unify_with_occurs_check)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.stream-selection-and-control.logtalk',\n           regex: '\\\\b(?:(?:se|curren)t_(?:in|out)put|open|close|flush_output|stream_property|at_end_of_stream|set_stream_position)(?=[(])' },\n         { token: 'support.function.stream-selection-and-control.logtalk',\n           regex: '\\\\b(?:flush_output|at_end_of_stream)\\\\b' },\n         { token: 'support.function.prolog-flags.logtalk',\n           regex: '\\\\b((?:se|curren)t_prolog_flag)(?=[(])' },\n         { token: 'support.function.compiling-and-loading.logtalk',\n           regex: '\\\\b(logtalk_(?:compile|l(?:ibrary_path|oad|oad_context)|make(_target_action)?))(?=[(])' },\n         { token: 'support.function.compiling-and-loading.logtalk',\n           regex: '\\\\b(logtalk_make)\\\\b' },\n         { caseInsensitive: false,\n           token: 'support.function.event-handling.logtalk',\n           regex: '\\\\b(?:(?:abolish|define)_events|current_event)(?=[(])' },\n         { token: 'support.function.implementation-defined-hooks.logtalk',\n           regex: '\\\\b(?:(?:create|current|set)_logtalk_flag|halt)(?=[(])' },\n         { token: 'support.function.implementation-defined-hooks.logtalk',\n           regex: '\\\\b(halt)\\\\b' },\n         { token: 'support.function.sorting.logtalk',\n           regex: '\\\\b((key)?(sort))(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.entity-creation-and-abolishing.logtalk',\n           regex: '\\\\b((c(?:reate|urrent)|abolish)_(?:object|protocol|category))(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.reflection.logtalk',\n           regex: '\\\\b((object|protocol|category)_property|co(mplements_object|nforms_to_protocol)|extends_(object|protocol|category)|imp(orts_category|lements_protocol)|(instantiat|specializ)es_class)(?=[(])' },\n         { token: 'support.function.logtalk',\n           regex: '\\\\b((?:for|retract)all)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.execution-context.logtalk',\n           regex: '\\\\b(?:context|parameter|se(?:lf|nder)|this)(?=[(])' },\n         { token: 'support.function.database.logtalk',\n           regex: '\\\\b(?:a(?:bolish|ssert(?:a|z))|clause|retract(all)?)(?=[(])' },\n         { token: 'support.function.all-solutions.logtalk',\n           regex: '\\\\b((?:bag|set)of|f(?:ind|or)all)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.multi-threading.logtalk',\n           regex: '\\\\b(threaded(_(call|once|ignore|exit|peek|wait|notify))?)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.engines.logtalk',\n           regex: '\\\\b(threaded_engine(_(create|destroy|self|next(?:_reified)?|yield|post|fetch))?)(?=[(])' },\n         { caseInsensitive: false,\n           token: 'support.function.reflection.logtalk',\n           regex: '\\\\b(?:current_predicate|predicate_property)(?=[(])' },\n         { token: 'support.function.event-handler.logtalk',\n           regex: '\\\\b(?:before|after)(?=[(])' },\n         { token: 'support.function.message-forwarding-handler.logtalk',\n           regex: '\\\\b(forward)(?=[(])' },\n         { token: 'support.function.grammar-rule.logtalk',\n           regex: '\\\\b(?:expand_(?:goal|term)|(?:goal|term)_expansion|phrase)(?=[(])' },\n         { token: 'punctuation.definition.string.begin.logtalk',\n           regex: '\\'',\n           push: \n            [ { token: 'constant.character.escape.logtalk',\n                regex: '\\\\\\\\([\\\\\\\\abfnrtv\"\\']|(x[a-fA-F0-9]+|[0-7]+)\\\\\\\\)' },\n              { token: 'punctuation.definition.string.end.logtalk',\n                regex: '\\'',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.single.logtalk' } ] },\n         { token: 'punctuation.definition.string.begin.logtalk',\n           regex: '\"',\n           push: \n            [ { token: 'constant.character.escape.logtalk', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.logtalk',\n                regex: '\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.double.logtalk' } ] },\n         { token: 'constant.numeric.logtalk',\n           regex: '\\\\b(0b[0-1]+|0o[0-7]+|0x[0-9a-fA-F]+)\\\\b' },\n         { token: 'constant.numeric.logtalk',\n           regex: '\\\\b(0\\'\\\\\\\\.|0\\'.|0\\'\\'|0\\'\")' },\n         { token: 'constant.numeric.logtalk',\n           regex: '\\\\b(\\\\d+\\\\.?\\\\d*((e|E)(\\\\+|-)?\\\\d+)?)\\\\b' },\n         { token: 'variable.other.logtalk',\n           regex: '\\\\b([A-Z_][A-Za-z0-9_]*)\\\\b' } ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LogtalkHighlightRules, TextHighlightRules);\n\nexports.LogtalkHighlightRules = LogtalkHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/logtalk\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/logtalk_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar LogtalkHighlightRules = require(\"./logtalk_highlight_rules\").LogtalkHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LogtalkHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"%\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/logtalk\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-lsl.js",
    "content": "ace.define(\"ace/mode/lsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\noop.inherits(LSLHighlightRules, TextHighlightRules);\n\nfunction LSLHighlightRules() {\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.float.lsl\" : \"DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI\",\n        \"constant.language.integer.lsl\": \"ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|CHARACTER_RADIUS|CHARACTER_STAY_WITHIN_PARCEL|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DENSITY|ERR_GENERIC|ERR_MALFORMED_PARAMS|ERR_PARCEL_PERMISSIONS|ERR_RUNTIME_PERMISSIONS|ERR_THROTTLED|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|FALSE|FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_BODY_SHAPE_TYPE|OBJECT_CHARACTER_TIME|OBJECT_CLICK_ACTION|OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_HOVER_HEIGHT|OBJECT_LAST_OWNER_ID|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_PHYSICS_COST|OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_RENDER_WEIGHT|OBJECT_RETURN_PARCEL|OBJECT_RETURN_PARCEL_OWNER|OBJECT_RETURN_REGION|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|OBJECT_TEMP_ON_REZ|OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|PARCEL_DETAILS_SEE_AVATARS|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|PARCEL_FLAG_ALLOW_TERRAFORM|PARCEL_FLAG_LOCAL_SOUND_ONLY|PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|PARCEL_FLAG_USE_LAND_PASS_LIST|PARCEL_MEDIA_COMMAND_AGENT|PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|PARCEL_MEDIA_COMMAND_PAUSE|PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASS_ALWAYS|PASS_IF_NOT_HANDLED|PASS_NEVER|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|PERMISSION_RETURN_OBJECTS|PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_ALPHA_MODE|PRIM_ALPHA_MODE_BLEND|PRIM_ALPHA_MODE_EMISSIVE|PRIM_ALPHA_MODE_MASK|PRIM_ALPHA_MODE_NONE|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CONTROLS_STANDARD|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|PRIM_MEDIA_WIDTH_PIXELS|PRIM_NAME|PRIM_NORMAL|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|PRIM_SLICE|PRIM_SPECULAR|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|PROFILE_SCRIPT_MEMORY|PSYS_PART_BF_DEST_COLOR|PSYS_PART_BF_ONE|PSYS_PART_BF_ONE_MINUS_DEST_COLOR|PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA|PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR|PSYS_PART_BF_SOURCE_ALPHA|PSYS_PART_BF_SOURCE_COLOR|PSYS_PART_BF_ZERO|PSYS_PART_BLEND_FUNC_DEST|PSYS_PART_BLEND_FUNC_SOURCE|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|PSYS_PART_END_COLOR|PSYS_PART_END_GLOW|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_MAX_AGE|PSYS_PART_RIBBON_MASK|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_GLOW|PSYS_PART_START_SCALE|PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|RC_REJECT_TYPES|REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|TRUE|TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|WANDER_PAUSE_AT_WAYPOINTS|XP_ERROR_EXPERIENCES_DISABLED|XP_ERROR_EXPERIENCE_DISABLED|XP_ERROR_EXPERIENCE_SUSPENDED|XP_ERROR_INVALID_EXPERIENCE|XP_ERROR_INVALID_PARAMETERS|XP_ERROR_KEY_NOT_FOUND|XP_ERROR_MATURITY_EXCEEDED|XP_ERROR_NONE|XP_ERROR_NOT_FOUND|XP_ERROR_NOT_PERMITTED|XP_ERROR_NO_EXPERIENCE|XP_ERROR_QUOTA_EXCEEDED|XP_ERROR_RETRY_UPDATE|XP_ERROR_STORAGE_EXCEPTION|XP_ERROR_STORE_DISABLED|XP_ERROR_THROTTLED|XP_ERROR_UNKNOWN_ERROR\",\n        \"constant.language.integer.boolean.lsl\" : \"FALSE|TRUE\",\n        \"constant.language.quaternion.lsl\" : \"ZERO_ROTATION\",\n        \"constant.language.string.lsl\" : \"EOF|JSON_ARRAY|JSON_DELETE|JSON_FALSE|JSON_INVALID|JSON_NULL|JSON_NUMBER|JSON_OBJECT|JSON_STRING|JSON_TRUE|NULL_KEY|TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED\",\n        \"constant.language.vector.lsl\" : \"TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR\",\n        \"invalid.broken.lsl\": \"LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH\",\n        \"invalid.deprecated.lsl\" : \"ATTACH_LPEC|ATTACH_RPEC|DATA_RATING|OBJECT_ATTACHMENT_GEOMETRY_BYTES|OBJECT_ATTACHMENT_SURFACE_AREA|PRIM_CAST_SHADOWS|PRIM_MATERIAL_LIGHT|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP|llClearExperiencePermissions|llCloud|llGetExperienceList|llMakeExplosion|llMakeFire|llMakeFountain|llMakeSmoke|llRemoteDataSetRegion|llSound|llSoundPreload|llXorBase64Strings|llXorBase64StringsCorrect\",\n        \"invalid.illegal.lsl\": \"event\",\n        \"invalid.unimplemented.lsl\": \"CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|PERMISSION_CHANGE_JOINTS|PERMISSION_CHANGE_PERMISSIONS|PERMISSION_EXPERIENCE|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|PRIM_PHYSICS_MATERIAL|PSYS_SRC_OBJ_REL_MASK|llCollisionSprite|llPointAt|llRefreshPrimURL|llReleaseCamera|llRemoteLoadScript|llSetPrimURL|llStopPointAt|llTakeCamera\",\n        \"reserved.godmode.lsl\": \"llGodLikeRezObject|llSetInventoryPermMask|llSetObjectPermMask\",\n        \"reserved.log.lsl\" : \"print\",\n        \"keyword.control.lsl\" : \"do|else|for|if|jump|return|while\",\n        \"storage.type.lsl\" : \"float|integer|key|list|quaternion|rotation|string|vector\",\n        \"support.function.lsl\": \"llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|llAdjustSoundVolume|llAgentInExperience|llAllowInventoryDrop|llAngleBetween|llApplyImpulse|llApplyRotationalImpulse|llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|llAvatarOnLinkSitTarget|llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|llBase64ToInteger|llBase64ToString|llBreakAllLinks|llBreakLink|llCSV2List|llCastRay|llCeil|llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|llCollisionFilter|llCollisionSound|llCos|llCreateCharacter|llCreateKeyValue|llCreateLink|llDataSizeKeyValue|llDeleteCharacter|llDeleteKeyValue|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|llDetectedGrab|llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llEvade|llExecCharacterCmd|llFabs|llFleeFrom|llFloor|llForceMouselook|llFrand|llGenerateKey|llGetAccel|llGetAgentInfo|llGetAgentLanguage|llGetAgentList|llGetAgentSize|llGetAlpha|llGetAndResetTime|llGetAnimation|llGetAnimationList|llGetAnimationOverride|llGetAttached|llGetAttachedList|llGetBoundingBox|llGetCameraPos|llGetCameraRot|llGetCenterOfMass|llGetClosestNavPoint|llGetColor|llGetCreator|llGetDate|llGetDisplayName|llGetEnergy|llGetEnv|llGetExperienceDetails|llGetExperienceErrorMessage|llGetForce|llGetFreeMemory|llGetFreeURLs|llGetGMTclock|llGetGeometricCenter|llGetHTTPHeader|llGetInventoryCreator|llGetInventoryKey|llGetInventoryName|llGetInventoryNumber|llGetInventoryPermMask|llGetInventoryType|llGetKey|llGetLandOwnerAt|llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|llGetListLength|llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|llGetMaxScaleFactor|llGetMemoryLimit|llGetMinScaleFactor|llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|llGetNumberOfPrims|llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|llGetObjectMass|llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|llGetOmega|llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|llGetParcelMaxPrims|llGetParcelMusicURL|llGetParcelPrimCount|llGetParcelPrimOwners|llGetPermissions|llGetPermissionsKey|llGetPhysicsMaterial|llGetPos|llGetPrimMediaParams|llGetPrimitiveParams|llGetRegionAgentCount|llGetRegionCorner|llGetRegionFPS|llGetRegionFlags|llGetRegionName|llGetRegionTimeDilation|llGetRootPosition|llGetRootRotation|llGetRot|llGetSPMaxMemory|llGetScale|llGetScriptName|llGetScriptState|llGetSimStats|llGetSimulatorHostname|llGetStartParameter|llGetStaticPath|llGetStatus|llGetSubString|llGetSunDirection|llGetTexture|llGetTextureOffset|llGetTextureRot|llGetTextureScale|llGetTime|llGetTimeOfDay|llGetTimestamp|llGetTorque|llGetUnixTime|llGetUsedMemory|llGetUsername|llGetVel|llGetWallclock|llGiveInventory|llGiveInventoryList|llGiveMoney|llGround|llGroundContour|llGroundNormal|llGroundRepel|llGroundSlope|llHTTPRequest|llHTTPResponse|llInsertString|llInstantMessage|llIntegerToBase64|llJson2List|llJsonGetValue|llJsonSetValue|llJsonValueType|llKey2Name|llKeyCountKeyValue|llKeysKeyValue|llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|llList2Json|llList2Key|llList2List|llList2ListStrided|llList2Rot|llList2String|llList2Vector|llListFindList|llListInsertList|llListRandomize|llListReplaceList|llListSort|llListStatistics|llListen|llListenControl|llListenRemove|llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|llLoopSoundSlave|llMD5String|llManageEstateAccess|llMapDestination|llMessageLinked|llMinEventDelay|llModPow|llModifyLand|llMoveToTarget|llNavigateTo|llOffsetTexture|llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|llPassCollisions|llPassTouches|llPatrolPoints|llPlaySound|llPlaySoundSlave|llPow|llPreloadSound|llPursue|llPushObject|llReadKeyValue|llRegionSay|llRegionSayTo|llReleaseControls|llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|llRemoveFromLandBanList|llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|llRequestAgentData|llRequestDisplayName|llRequestExperiencePermissions|llRequestInventoryData|llRequestPermissions|llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|llResetScript|llResetTime|llReturnObjectsByID|llReturnObjectsByOwner|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|llRot2Fwd|llRot2Left|llRot2Up|llRotBetween|llRotLookAt|llRotTarget|llRotTargetRemove|llRotateTexture|llRound|llSHA1String|llSameGroup|llSay|llScaleByFactor|llScaleTexture|llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetAnimationOverride|llSetBuoyancy|llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|llSetHoverHeight|llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|llSetLinkColor|llSetLinkMedia|llSetLinkPrimitiveParams|llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|llSetParcelMusicURL|llSetPayPrice|llSetPhysicsMaterial|llSetPos|llSetPrimMediaParams|llSetPrimitiveParams|llSetRegionPos|llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|llSetSitText|llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|llSetTexture|llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|llSetVehicleFlags|llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|llSetVehicleVectorParam|llSetVelocity|llShout|llSin|llSitTarget|llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|llUnSit|llUnescapeURL|llUpdateCharacter|llUpdateKeyValue|llVecDist|llVecMag|llVecNorm|llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64\",\n        \"support.function.event.lsl\" : \"at_rot_target|at_target|attach|changed|collision|collision_end|collision_start|control|dataserver|email|experience_permissions|experience_permissions_denied|http_request|http_response|land_collision|land_collision_end|land_collision_start|link_message|listen|money|moving_end|moving_start|no_sensor|not_at_rot_target|not_at_target|object_rez|on_rez|path_update|remote_data|run_time_permissions|sensor|state_entry|state_exit|timer|touch|touch_end|touch_start|transaction_result\"\n        }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment.line.double-slash.lsl\",\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.block.begin.lsl\",\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.quoted.double.lsl\",\n                start : '\"',\n                end : '\"',\n                next : [{\n                    token : \"constant.character.escape.lsl\",\n                    regex : /\\\\[tn\"\\\\]/\n                }]\n            }, {\n                token : \"constant.numeric.lsl\",\n                regex : \"(0[xX][0-9a-fA-F]+|[+-]?[0-9]+(?:(?:\\\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)?)\\\\b\"\n            }, {\n                token : \"entity.name.state.lsl\",\n                regex : \"\\\\b((state)\\\\s+[A-Za-z_]\\\\w*|default)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token : \"support.function.user-defined.lsl\",\n                regex : /\\b([a-zA-Z_]\\w*)(?=\\(.*?\\))/\n            }, {\n                token : \"keyword.operator.lsl\",\n                regex : \"\\\\+\\\\+|\\\\-\\\\-|<<|>>|&&?|\\\\|\\\\|?|\\\\^|~|[!%<>=*+\\\\-\\\\/]=?\"\n            }, {\n                token : \"invalid.illegal.keyword.operator.lsl\",\n                regex : \":=?\"\n            }, {\n                token : \"punctuation.operator.lsl\",\n                regex : \"\\\\,|\\\\;\"\n            }, {\n                token : \"paren.lparen.lsl\",\n                regex : \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token : \"paren.rparen.lsl\",\n                regex : \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token : \"text.lsl\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.block.end.lsl\",\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment.block.lsl\"\n            }\n        ]\n    };\n    this.normalizeRules();\n}\n\nexports.LSLHighlightRules = LSLHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/lsl\",[\"require\",\"exports\",\"module\",\"ace/mode/lsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/text\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./lsl_highlight_rules\").LSLHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar oop = require(\"../lib/oop\");\n\nvar Mode = function() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = [\"//\"];\n\n    this.blockComment = {\n        start: \"/*\",\n        end: \"*/\"\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type === \"comment.block.lsl\") {\n            return indent;\n        }\n\n        if (state === \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/lsl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-lua.js",
    "content": "ace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuaHighlightRules = function() {\n\n    var keywords = (\n        \"break|do|else|elseif|end|for|function|if|in|local|repeat|\"+\n         \"return|then|until|while|or|and|not\"\n    );\n\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n\n    var functions = (\n        \"string|xpcall|package|tostring|print|os|unpack|require|\"+\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\"+\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\"+\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\"+\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\"+\n        \"load|error|loadfile|\"+\n\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\"+\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\"+\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\"+\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\"+\n        \"lines|write|close|flush|open|output|type|read|stderr|\"+\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\"+\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\"+\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\"+\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\"+\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\"+\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\"+\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\"+\n        \"status|wrap|create|running|\"+\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\"+\n         \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\"\n    );\n\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [{\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex : /\\-\\-\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"comment\";\n                    },\n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ]\n        },\n\n        {\n            token : \"comment\",\n            regex : \"\\\\-\\\\-.*$\"\n        },\n        {\n            stateName: \"bracketedString\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length, currentState);\n                return \"string.start\";\n            },\n            regex : /\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"string.end\";\n                    },\n                    \n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        },\n        {\n            token : \"string\",           // \" string\n            regex : '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+|\\\\w+\"\n        } ]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LuaHighlightRules, TextHighlightRules);\n\nexports.LuaHighlightRules = LuaHighlightRules;\n});\n\nace.define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/;\n    this.foldingStopMarker = /\\bend\\b|^\\s*}|\\]=*\\]/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1] == \"then\" && /\\belseif\\b/.test(line))\n                return;\n            if (match[1]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return \"start\";\n            } else if (match[2]) {\n                var type = session.bgTokenizer.getState(row) || \"\";\n                if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                    return \"start\";\n            } else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n\n        var match = line.match(this.foldingStopMarker);\n        if (match[0] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        } else if (match[0][0] === \"]\") {\n            var type = session.bgTokenizer.getState(row - 1) || \"\";\n            if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                return \"end\";\n        } else\n            return \"end\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.luaBlock(session, row, match.index + 1);\n\n            if (match[2])\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[0] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.luaBlock(session, row, match.index + 1);\n            }\n\n            if (match[0][0] === \"]\")\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n\n    this.luaBlock = function(session, row, column) {\n        var stream = new TokenIterator(session, row, column);\n        var indentKeywords = {\n            \"function\": 1,\n            \"do\": 1,\n            \"then\": 1,\n            \"elseif\": -1,\n            \"end\": -1,\n            \"repeat\": 1,\n            \"until\": -1\n        };\n\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"keyword\")\n            return;\n\n        var val = token.value;\n        var stack = [val];\n        var dir = indentKeywords[val];\n\n        if (!dir)\n            return;\n\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while(token = stream.step()) {\n            if (token.type !== \"keyword\")\n                continue;\n            var level = dir * indentKeywords[token.value];\n\n            if (level > 0) {\n                stack.unshift(token.value);\n            } else if (level <= 0) {\n                stack.shift();\n                if (!stack.length && token.value != \"elseif\")\n                    break;\n                if (level === 0)\n                    stack.unshift(token.value);\n            }\n        }\n\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar LuaFoldMode = require(\"./folding/lua\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n    this.HighlightRules = LuaHighlightRules;\n    \n    this.foldingRules = new LuaFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"--[\", end: \"]--\"};\n    \n    var indentKeywords = {\n        \"function\": 1,\n        \"then\": 1,\n        \"do\": 1,\n        \"else\": 1,\n        \"elseif\": 1,\n        \"repeat\": 1,\n        \"end\": -1,\n        \"until\": -1\n    };\n    var outdentKeywords = [\n        \"else\",\n        \"elseif\",\n        \"end\",\n        \"until\"\n    ];\n\n    function getNetIndentLevel(tokens) {\n        var level = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (token.type == \"keyword\") {\n                if (token.value in indentKeywords) {\n                    level += indentKeywords[token.value];\n                }\n            } else if (token.type == \"paren.lparen\") {\n                level += token.value.length;\n            } else if (token.type == \"paren.rparen\") {\n                level -= token.value.length;\n            }\n        }\n        if (level < 0) {\n            return -1;\n        } else if (level > 0) {\n            return 1;\n        } else {\n            return 0;\n        }\n    }\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var level = 0;\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (state == \"start\") {\n            level = getNetIndentLevel(tokens);\n        }\n        if (level > 0) {\n            return indent + tab;\n        } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {\n            if (!this.checkOutdent(state, line, \"\\n\")) {\n                return indent.substr(0, indent.length - tab.length);\n            }\n        }\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input != \"\\n\" && input != \"\\r\" && input != \"\\r\\n\")\n            return false;\n\n        if (line.match(/^\\s*[\\)\\}\\]]$/))\n            return true;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens || !tokens.length)\n            return false;\n\n        return (tokens[0].type == \"keyword\" && outdentKeywords.indexOf(tokens[0].value) != -1);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine).length;\n        var prevTokens = this.getTokenizer().getLineTokens(prevLine, \"start\").tokens;\n        var tabLength = session.getTabString().length;\n        var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);\n        var curIndent = this.$getIndent(session.getLine(row)).length;\n        if (curIndent <= expectedIndent) {\n            return;\n        }\n        session.outdentRows(new Range(row, 0, row + 2, 0));\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/lua_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/lua\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-luapage.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuaHighlightRules = function() {\n\n    var keywords = (\n        \"break|do|else|elseif|end|for|function|if|in|local|repeat|\"+\n         \"return|then|until|while|or|and|not\"\n    );\n\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n\n    var functions = (\n        \"string|xpcall|package|tostring|print|os|unpack|require|\"+\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\"+\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\"+\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\"+\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\"+\n        \"load|error|loadfile|\"+\n\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\"+\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\"+\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\"+\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\"+\n        \"lines|write|close|flush|open|output|type|read|stderr|\"+\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\"+\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\"+\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\"+\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\"+\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\"+\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\"+\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\"+\n        \"status|wrap|create|running|\"+\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\"+\n         \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\"\n    );\n\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [{\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex : /\\-\\-\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"comment\";\n                    },\n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ]\n        },\n\n        {\n            token : \"comment\",\n            regex : \"\\\\-\\\\-.*$\"\n        },\n        {\n            stateName: \"bracketedString\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length, currentState);\n                return \"string.start\";\n            },\n            regex : /\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"string.end\";\n                    },\n                    \n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        },\n        {\n            token : \"string\",           // \" string\n            regex : '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+|\\\\w+\"\n        } ]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LuaHighlightRules, TextHighlightRules);\n\nexports.LuaHighlightRules = LuaHighlightRules;\n});\n\nace.define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/;\n    this.foldingStopMarker = /\\bend\\b|^\\s*}|\\]=*\\]/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1] == \"then\" && /\\belseif\\b/.test(line))\n                return;\n            if (match[1]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return \"start\";\n            } else if (match[2]) {\n                var type = session.bgTokenizer.getState(row) || \"\";\n                if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                    return \"start\";\n            } else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n\n        var match = line.match(this.foldingStopMarker);\n        if (match[0] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        } else if (match[0][0] === \"]\") {\n            var type = session.bgTokenizer.getState(row - 1) || \"\";\n            if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                return \"end\";\n        } else\n            return \"end\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.luaBlock(session, row, match.index + 1);\n\n            if (match[2])\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[0] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.luaBlock(session, row, match.index + 1);\n            }\n\n            if (match[0][0] === \"]\")\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n\n    this.luaBlock = function(session, row, column) {\n        var stream = new TokenIterator(session, row, column);\n        var indentKeywords = {\n            \"function\": 1,\n            \"do\": 1,\n            \"then\": 1,\n            \"elseif\": -1,\n            \"end\": -1,\n            \"repeat\": 1,\n            \"until\": -1\n        };\n\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"keyword\")\n            return;\n\n        var val = token.value;\n        var stack = [val];\n        var dir = indentKeywords[val];\n\n        if (!dir)\n            return;\n\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while(token = stream.step()) {\n            if (token.type !== \"keyword\")\n                continue;\n            var level = dir * indentKeywords[token.value];\n\n            if (level > 0) {\n                stack.unshift(token.value);\n            } else if (level <= 0) {\n                stack.shift();\n                if (!stack.length && token.value != \"elseif\")\n                    break;\n                if (level === 0)\n                    stack.unshift(token.value);\n            }\n        }\n\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar LuaFoldMode = require(\"./folding/lua\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n    this.HighlightRules = LuaHighlightRules;\n    \n    this.foldingRules = new LuaFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"--[\", end: \"]--\"};\n    \n    var indentKeywords = {\n        \"function\": 1,\n        \"then\": 1,\n        \"do\": 1,\n        \"else\": 1,\n        \"elseif\": 1,\n        \"repeat\": 1,\n        \"end\": -1,\n        \"until\": -1\n    };\n    var outdentKeywords = [\n        \"else\",\n        \"elseif\",\n        \"end\",\n        \"until\"\n    ];\n\n    function getNetIndentLevel(tokens) {\n        var level = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (token.type == \"keyword\") {\n                if (token.value in indentKeywords) {\n                    level += indentKeywords[token.value];\n                }\n            } else if (token.type == \"paren.lparen\") {\n                level += token.value.length;\n            } else if (token.type == \"paren.rparen\") {\n                level -= token.value.length;\n            }\n        }\n        if (level < 0) {\n            return -1;\n        } else if (level > 0) {\n            return 1;\n        } else {\n            return 0;\n        }\n    }\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var level = 0;\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (state == \"start\") {\n            level = getNetIndentLevel(tokens);\n        }\n        if (level > 0) {\n            return indent + tab;\n        } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {\n            if (!this.checkOutdent(state, line, \"\\n\")) {\n                return indent.substr(0, indent.length - tab.length);\n            }\n        }\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input != \"\\n\" && input != \"\\r\" && input != \"\\r\\n\")\n            return false;\n\n        if (line.match(/^\\s*[\\)\\}\\]]$/))\n            return true;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens || !tokens.length)\n            return false;\n\n        return (tokens[0].type == \"keyword\" && outdentKeywords.indexOf(tokens[0].value) != -1);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine).length;\n        var prevTokens = this.getTokenizer().getLineTokens(prevLine, \"start\").tokens;\n        var tabLength = session.getTabString().length;\n        var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);\n        var curIndent = this.$getIndent(session.getLine(row)).length;\n        if (curIndent <= expectedIndent) {\n            return;\n        }\n        session.outdentRows(new Range(row, 0, row + 2, 0));\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/lua_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/lua\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/luapage_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/lua_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\n\nvar LuaPageHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var startRules = [\n        {\n            token: \"keyword\",\n            regex: \"<\\\\%\\\\=?\",\n            push: \"lua-start\"\n        }, {\n            token: \"keyword\",\n            regex: \"<\\\\?lua\\\\=?\",\n            push: \"lua-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token: \"keyword\",\n            regex: \"\\\\%>\",\n            next: \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"\\\\?>\",\n            next: \"pop\"\n        }\n    ];\n\n    this.embedRules(LuaHighlightRules, \"lua-\", endRules, [\"start\"]);\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.normalizeRules();\n};\n\noop.inherits(LuaPageHighlightRules, HtmlHighlightRules);\n\nexports.LuaPageHighlightRules = LuaPageHighlightRules;\n\n});\n\nace.define(\"ace/mode/luapage\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/lua\",\"ace/mode/luapage_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar LuaMode = require(\"./lua\").Mode;\nvar LuaPageHighlightRules = require(\"./luapage_highlight_rules\").LuaPageHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    \n    this.HighlightRules = LuaPageHighlightRules;\n    this.createModeDelegates({\n        \"lua-\": LuaMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.$id = \"ace/mode/luapage\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-lucene.js",
    "content": "ace.define(\"ace/mode/lucene_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuceneHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\[\\+\\-&\\|!\\(\\)\\{\\}\\[\\]^\"~\\*\\?:\\\\]/\n            }, {\n                token: \"constant.character.negation\",\n                regex: \"\\\\-\"\n            }, {\n                token: \"constant.character.interro\",\n                regex: \"\\\\?\"\n            }, {\n                token: \"constant.character.required\",\n                regex: \"\\\\+\"\n            }, {\n                token: \"constant.character.asterisk\",\n                regex: \"\\\\*\"\n            }, {\n                token: 'constant.character.proximity',\n                regex: '~(?:0\\\\.[0-9]+|[0-9]+)?'\n            }, {\n                token: 'keyword.operator',\n                regex: '(AND|OR|NOT|TO)\\\\b'\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(\\\\{\\\\[]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)\\\\}\\\\]]\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\\\\\\\\.|[^\\\\s:\\\\\\\\])+:\"\n            }, {\n                token: \"string\",           // \" string\n                regex: '\"(?:\\\\\\\\\"|[^\"])*\"'\n            }, {\n                token: \"term\",\n                regex: \"\\\\w+\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ]\n    };\n};\n\noop.inherits(LuceneHighlightRules, TextHighlightRules);\n\nexports.LuceneHighlightRules = LuceneHighlightRules;\n});\n\nace.define(\"ace/mode/lucene\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lucene_highlight_rules\"], function(require, exports, module) {\n'use strict';\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuceneHighlightRules = require(\"./lucene_highlight_rules\").LuceneHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = LuceneHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/lucene\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-makefile.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\nace.define(\"ace/mode/makefile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/sh_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ShHighlightFile = require(\"./sh_highlight_rules\");\n\nvar MakefileHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": ShHighlightFile.reservedKeywords,\n        \"support.function.builtin\": ShHighlightFile.languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"string\");\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token: \"string.interpolated.backtick.makefile\",\n            regex: \"`\",\n            next: \"shell-start\"\n        },\n        {\n            token: \"punctuation.definition.comment.makefile\",\n            regex: /#(?=.)/,\n            next: \"comment\"\n        },\n        {\n            token: [ \"keyword.control.makefile\"],\n            regex: \"^(?:\\\\s*\\\\b)(\\\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\\\b)\"\n        },\n        {// ^([^\\t ]+(\\s[^\\t ]+)*:(?!\\=))\\s*.*\n            token: [\"entity.name.function.makefile\", \"text\"],\n            regex: \"^([^\\\\t ]+(?:\\\\s[^\\\\t ]+)*:)(\\\\s*.*)\"\n        }\n    ],\n    \"comment\": [\n        {\n            token : \"punctuation.definition.comment.makefile\",\n            regex : /.+\\\\/\n        },\n        {\n            token : \"punctuation.definition.comment.makefile\",\n            regex : \".+\",\n            next  : \"start\"\n        }\n    ],\n    \"shell-start\": [\n        {\n            token: keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, \n        {\n            token: \"string\",\n            regex : \"\\\\w+\"\n        }, \n        {\n            token : \"string.interpolated.backtick.makefile\",\n            regex : \"`\",\n            next  : \"start\"\n        }\n    ]\n};\n\n};\n\noop.inherits(MakefileHighlightRules, TextHighlightRules);\n\nexports.MakefileHighlightRules = MakefileHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/makefile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/makefile_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MakefileHighlightRules = require(\"./makefile_highlight_rules\").MakefileHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MakefileHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = \"#\";    \n    this.$indentWithTabs = true;\n    \n    this.$id = \"ace/mode/makefile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-markdown.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token : \"support.function\",\n        regex : /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function(value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next  : \"githubblock\"\n    };\n    var codeBlockRules = [{\n        token : \"support.function\",\n        regex : \".*\",\n        onMatch: function(value, state, stack, line) {\n            var embedState = stack[1];\n            var indent = stack[2][0];\n            var endMarker = stack[2][1];\n            var language = stack[2][2];\n            \n            var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n            if (\n                m && m[1].length < indent.length + 3\n                && m[2].length >= endMarker.length && m[2][0] == endMarker[0]\n            ) {\n                stack.splice(0, 3);\n                this.next = stack.shift();\n                return this.token;\n            }\n            this.next = \"\";\n            if (language && modes[language]) {\n                var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                stack[1] = data.state;\n                return data.tokens;\n            }\n            return this.token;\n        }\n    }];\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s|$)/,\n        next : \"header\"\n    },\n    codeBlockStartRule,\n    { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\!?\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text or alt text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href or image\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        },\n        codeBlockStartRule,\n        {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : codeBlockRules\n    });\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n\nace.define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /^(?:[=-]+\\s*$|#{1,6} |`{3})/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) == \"start\")\n                return \"end\";\n            return \"start\";\n        }\n\n        return \"start\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) !== \"start\") {\n                while (++row < maxRow) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(startRow, startColumn, row, 0);\n            } else {\n                while (row -- > 0) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(row, line.length, startRow, 0);\n            }\n        }\n\n        var token;\n        function isHeading(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type.lastIndexOf(heading, 0) === 0;\n        }\n\n        var heading = \"markup.heading\";\n        function getLevel() {\n            var ch = token.value[0];\n            if (ch == \"=\") return 6;\n            if (ch == \"-\") return 5;\n            return 7 - token.value.search(/[^#]|$/);\n        }\n\n        if (isHeading(row)) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (!isHeading(row))\n                    continue;\n                var level = getLevel();\n                if (level >= startHeadingLevel)\n                    break;\n            }\n\n            endRow = row - (!token || [\"=\", \"-\"].indexOf(token.value[0]) == -1 ? 1 : 2);\n\n            if (endRow > startRow) {\n                while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                    endRow--;\n            }\n\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\nace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\nvar Mode = function() {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n   \n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/sh\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar XmlMode = require(\"./xml\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar MarkdownFoldMode = require(\"./folding/markdown\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MarkdownHighlightRules;\n\n    this.createModeDelegates({\n        javascript: require(\"./javascript\").Mode,\n        html: require(\"./html\").Mode,\n        bash: require(\"./sh\").Mode,\n        sh: require(\"./sh\").Mode,\n        xml: require(\"./xml\").Mode,\n        css: require(\"./css\").Mode\n    });\n\n    this.foldingRules = new MarkdownFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(line);\n            if (!match)\n                return \"\";\n            var marker = match[2];\n            if (!marker)\n                marker = parseInt(match[3], 10) + 1 + \".\";\n            return match[1] + marker + match[4];\n        } else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/markdown\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-mask.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token : \"support.function\",\n        regex : /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function(value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next  : \"githubblock\"\n    };\n    var codeBlockRules = [{\n        token : \"support.function\",\n        regex : \".*\",\n        onMatch: function(value, state, stack, line) {\n            var embedState = stack[1];\n            var indent = stack[2][0];\n            var endMarker = stack[2][1];\n            var language = stack[2][2];\n            \n            var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n            if (\n                m && m[1].length < indent.length + 3\n                && m[2].length >= endMarker.length && m[2][0] == endMarker[0]\n            ) {\n                stack.splice(0, 3);\n                this.next = stack.shift();\n                return this.token;\n            }\n            this.next = \"\";\n            if (language && modes[language]) {\n                var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                stack[1] = data.state;\n                return data.tokens;\n            }\n            return this.token;\n        }\n    }];\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s|$)/,\n        next : \"header\"\n    },\n    codeBlockStartRule,\n    { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\!?\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text or alt text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href or image\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        },\n        codeBlockStartRule,\n        {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : codeBlockRules\n    });\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n\nace.define(\"ace/mode/mask_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/css_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nexports.MaskHighlightRules = MaskHighlightRules;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextRules   = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JSRules     = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar CssRules    = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MDRules     = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar HTMLRules   = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar token_TAG       = \"keyword.support.constant.language\",\n    token_COMPO     = \"support.function.markup.bold\",\n    token_KEYWORD   = \"keyword\",\n    token_LANG      = \"constant.language\",\n    token_UTIL      = \"keyword.control.markup.italic\",\n    token_ATTR      = \"support.variable.class\",\n    token_PUNKT     = \"keyword.operator\",\n    token_ITALIC    = \"markup.italic\",\n    token_BOLD      = \"markup.bold\",\n    token_LPARE     = \"paren.lparen\",\n    token_RPARE     = \"paren.rparen\";\n\nvar const_FUNCTIONS,\n    const_KEYWORDS,\n    const_CONST,\n    const_TAGS;\n(function(){\n    const_FUNCTIONS = lang.arrayToMap(\n        (\"log\").split(\"|\")\n    );\n    const_CONST = lang.arrayToMap(\n        (\":dualbind|:bind|:import|slot|event|style|html|markdown|md\").split(\"|\")\n    );\n    const_KEYWORDS = lang.arrayToMap(\n        (\"debugger|define|var|if|each|for|of|else|switch|case|with|visible|+if|+each|+for|+switch|+with|+visible|include|import\").split(\"|\")\n    );\n    const_TAGS = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n}());\n\nfunction MaskHighlightRules () {\n\n    this.$rules = {\n        \"start\" : [\n            Token(\"comment\", \"\\\\/\\\\/.*$\"),\n            Token(\"comment\", \"\\\\/\\\\*\", [\n                Token(\"comment\", \".*?\\\\*\\\\/\", \"start\"),\n                Token(\"comment\", \".+\")\n            ]),\n            \n            Blocks.string(\"'''\"),\n            Blocks.string('\"\"\"'),\n            Blocks.string('\"'),\n            Blocks.string(\"'\"),\n            \n            Blocks.syntax(/(markdown|md)\\b/, \"md-multiline\", \"multiline\"),\n            Blocks.syntax(/html\\b/, \"html-multiline\", \"multiline\"),\n            Blocks.syntax(/(slot|event)\\b/, \"js-block\", \"block\"),\n            Blocks.syntax(/style\\b/, \"css-block\", \"block\"),\n            Blocks.syntax(/var\\b/, \"js-statement\", \"attr\"),\n            \n            Blocks.tag(),\n            \n            Token(token_LPARE, \"[[({>]\"),\n            Token(token_RPARE, \"[\\\\])};]\", \"start\"),\n            {\n                caseInsensitive: true\n            }\n        ]\n    };\n    var rules = this;\n    \n    addJavaScript(\"interpolation\", /\\]/, token_RPARE + \".\" + token_ITALIC);\n    addJavaScript(\"statement\", /\\)|}|;/);\n    addJavaScript(\"block\", /\\}/);\n    addCss();\n    addMarkdown();\n    addHtml();\n    \n    function addJavaScript(name, escape, closeType) {\n        var prfx  =  \"js-\" + name + \"-\",\n            rootTokens = name === \"block\" ? [\"start\"] : [\"start\", \"no_regex\"];\n        add(\n            JSRules\n            , prfx\n            , escape\n            , rootTokens\n            , closeType\n        );\n    }\n    function addCss() {\n        add(CssRules, \"css-block-\", /\\}/);\n    }\n    function addMarkdown() {\n        add(MDRules, \"md-multiline-\", /(\"\"\"|''')/, []);\n    }\n    function addHtml() {\n        add(HTMLRules, \"html-multiline-\", /(\"\"\"|''')/);\n    }\n    function add(Rules, strPrfx, rgxEnd, rootTokens, closeType) {\n        var next = \"pop\";\n        var tokens = rootTokens || [ \"start\" ];\n        if (tokens.length === 0) {\n            tokens = null;\n        }\n        if (/block|multiline/.test(strPrfx)) {\n            next = strPrfx + \"end\";\n            rules.$rules[next] = [\n                Token(\"empty\", \"\", \"start\")\n            ];\n        }\n        rules.embedRules(\n            Rules\n            , strPrfx\n            , [ Token(closeType || token_RPARE, rgxEnd, next) ]\n            , tokens\n            , tokens == null ? true : false\n        );\n    }\n\n    this.normalizeRules();\n}\noop.inherits(MaskHighlightRules, TextRules);\n\nvar Blocks = {\n    string: function(str, next){\n        var token = Token(\n            \"string.start\"\n            , str\n            , [\n                Token(token_LPARE + \".\" + token_ITALIC, /~\\[/, Blocks.interpolation()),\n                Token(\"string.end\", str, \"pop\"),\n                {\n                    defaultToken: \"string\"\n                }\n            ]\n            , next\n        );\n        if (str.length === 1){\n            var escaped = Token(\"string.escape\", \"\\\\\\\\\" + str);\n            token.push.unshift(escaped);\n        }\n        return token;\n    },\n    interpolation: function(){\n        return [\n            Token(token_UTIL, /\\s*\\w*\\s*:/),\n            \"js-interpolation-start\"\n        ];\n    },\n    tagHead: function (rgx) {\n      return Token(token_ATTR, rgx, [\n            Token(token_ATTR, /[\\w\\-_]+/),\n            Token(token_LPARE + \".\" + token_ITALIC, /~\\[/, Blocks.interpolation()),\n            Blocks.goUp()\n        ]);\n    },\n    tag: function () {\n        return {\n            token: 'tag',\n            onMatch :  function(value) {\n                if (void 0 !== const_KEYWORDS[value])\n                    return token_KEYWORD;\n                if (void 0 !== const_CONST[value])\n                    return token_LANG;\n                if (void 0 !== const_FUNCTIONS[value])\n                    return \"support.function\";\n                if (void 0 !== const_TAGS[value.toLowerCase()])\n                    return token_TAG;\n                \n                return token_COMPO;\n            },\n            regex : /([@\\w\\-_:+]+)|((^|\\s)(?=\\s*(\\.|#)))/,\n            push: [\n                Blocks.tagHead(/\\./) ,\n                Blocks.tagHead(/#/) ,\n                Blocks.expression(),\n                Blocks.attribute(),\n                \n                Token(token_LPARE, /[;>{]/, \"pop\")\n            ]\n        };\n    },\n    syntax: function(rgx, next, type){\n        return {\n            token: token_LANG,\n            regex : rgx,\n            push: ({\n                \"attr\": [\n                    next + \"-start\",\n                    Token(token_PUNKT, /;/, \"start\")\n                ],\n                \"multiline\": [\n                    Blocks.tagHead(/\\./) ,\n                    Blocks.tagHead(/#/) ,\n                    Blocks.attribute(),\n                    Blocks.expression(),\n                    Token(token_LPARE, /[>\\{]/),\n                    Token(token_PUNKT, /;/, \"start\"),\n                    Token(token_LPARE, /'''|\"\"\"/, [ next + \"-start\" ])\n                ],\n                \"block\": [\n                    Blocks.tagHead(/\\./) ,\n                    Blocks.tagHead(/#/) ,\n                    Blocks.attribute(),\n                    Blocks.expression(),\n                    Token(token_LPARE, /\\{/, [ next + \"-start\" ])\n                ]\n            })[type]\n        };\n    },\n    attribute: function(){\n        return Token(function(value){\n            return  /^x\\-/.test(value)\n                ? token_ATTR + \".\" + token_BOLD\n                : token_ATTR;\n        }, /[\\w_-]+/, [\n            Token(token_PUNKT, /\\s*=\\s*/, [\n                Blocks.string('\"'),\n                Blocks.string(\"'\"),\n                Blocks.word(),\n                Blocks.goUp()\n            ]),\n            Blocks.goUp()\n        ]);\n    },\n    expression: function(){\n        return Token(token_LPARE, /\\(/, [ \"js-statement-start\" ]);\n    },\n    word: function(){\n        return Token(\"string\", /[\\w-_]+/);\n    },\n    goUp: function(){\n        return Token(\"text\", \"\", \"pop\");\n    },\n    goStart: function(){\n        return Token(\"text\", \"\", \"start\");\n    }\n};\n\n\nfunction Token(token, rgx, mix) {\n    var push, next, onMatch;\n    if (arguments.length === 4) {\n        push = mix;\n        next = arguments[3];\n    }\n    else if (typeof mix === \"string\") {\n        next = mix;\n    }\n    else {\n        push = mix;\n    }\n    if (typeof token === \"function\") {\n        onMatch = token;\n        token   = \"empty\";\n    }\n    return {\n        token: token,\n        regex: rgx,\n        push: push,\n        next: next,\n        onMatch: onMatch\n    };\n}\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/mask\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mask_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MaskHighlightRules = require(\"./mask_highlight_rules\").MaskHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MaskHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/mask\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-matlab.js",
    "content": "ace.define(\"ace/mode/matlab_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MatlabHighlightRules = function() {\n\nvar keywords = (\n        \"break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while\"\n    );\n\n    var builtinConstants = (\n        \"true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout\"\n    );\n\n    var builtinFunctions = (\n        \"abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|\"+\n\t\t\"airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|\" +\n\t\t\"audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|\"+\n\t\t\"bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|\"+\n\t\t\"bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|\"+\n\t\t\"camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:.(?:close|closeVar|\"+\n\t\t\"computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|\"+\n\t\t\"getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|\"+\n\t\t\"getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|\"+\n\t\t\"getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|\"+\n\t\t\"getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|\"+\n\t\t\"hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|\"+\n\t\t\"renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|\"+\n\t\t\"setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|\"+\n\t\t\"cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|\"+\n\t\t\"clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|\"+\n\t\t\"commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|\"+\n\t\t\"copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|\"+\n\t\t\"cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|\"+\n\t\t\"dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|\"+\n\t\t\"demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|\"+\n\t\t\"dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|\"+\n\t\t\"erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|\"+\n\t\t\"expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|\"+\n\t\t\"fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|\"+\n\t\t\"findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|\"+\n\t\t\"frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|\"+\n\t\t\"get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|\"+\n\t\t\"guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|\"+\n\t\t\"hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|\"+\n\t\t\"hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|\"+\n\t\t\"ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|\"+\n\t\t\"1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|\"+\n\t\t\"isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|\"+\n\t\t\"isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|\"+\n\t\t\"isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|\"+\n\t\t\"lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|\"+\n\t\t\"linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|\"+\n\t\t\"lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab.io.MatFile|matlab.mixin.(?:Copyable|Heterogeneous(?:.getDefaultScalarElement)?)|matlabrc|\"+\n\t\t\"matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta.(?:class(?:.fromName)?|DynamicProperty|EnumeratedValue|event|\"+\n\t\t\"MetaData|method|package(?:.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|\"+\n\t\t\"minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|\"+\n\t\t\"multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|\"+\n\t\t\"ncwriteschema|ndgrid|ndims|ne|NET(?:.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|\"+\n\t\t\"NetException|setStaticProperty))?|netcdf.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|\"+\n\t\t\"getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|\"+\n\t\t\"inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|\"+\n\t\t\"setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|\"+\n\t\t\"ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|\"+\n\t\t\"orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|\"+\n\t\t\"permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|\"+\n\t\t\"polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|\"+\n\t\t\"PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:.(?:create|\"+\n\t\t\"getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|\"+\n\t\t\"rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|\"+\n\t\t\"restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|\"+\n\t\t\"saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|\"+\n\t\t\"setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|\"+\n\t\t\"spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|\"+\n\t\t\"str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|\"+\n\t\t\"strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|\"+\n\t\t\"support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|\"+\n\t\t\"textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|\"+\n\t\t\"transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|\"+\n\t\t\"uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|\"+\n\t\t\"uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|\"+\n\t\t\"userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:.isPlatformSupported)?|VideoWriter(?:.getProfiles)?|\"+\n\t\t\"view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|\"+\n\t\t\"what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|\"+\n\t\t\"ylabel|ylim|zeros|zip|zlabel|zlim|zoom|addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|\"+\n\t\t\"pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|\"+\n\t\t\"cholcov|Classification(?:BaggedEnsemble|Discriminant(?:.(?:fit|make|template))?|Ensemble|KNN(?:.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|\"+\n\t\t\"template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|\"+\n\t\t\"controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|\"+\n\t\t\"dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|\"+\n\t\t\"fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:.fit)?|geo(?:cdf|inv|mean|\"+\n\t\t\"pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|\"+\n\t\t\"gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|\"+\n\t\t\"jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|\"+\n\t\t\"LinearModel(?:.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|\"+\n\t\t\"mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:.fit)?|nan(?:cov|max|mean|median|min|std|\"+\n\t\t\"sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|\"+\n\t\t\"nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|\"+\n\t\t\"pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|\"+\n\t\t\"Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|\"+\n\t\t\"rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|regstats|relieff|ridge|\"+\n\t\t\"robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|\"+\n\t\t\"statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|\"+\n\t\t\"ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztest\"+\n\t\t\"adapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|\"+\n\t\t\"bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|\"+\n\t\t\"cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|\"+\n\t\t\"entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|\"+\n\t\t\"getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|\"+\n\t\t\"iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|\"+\n\t\t\"imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|\"+\n\t\t\"imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|\"+\n\t\t\"imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|\"+\n\t\t\"imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|\"+\n\t\t\"imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|\"+\n\t\t\"iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|\"+\n\t\t\"isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|\"+\n\t\t\"medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|\"+\n\t\t\"reflect|regionprops|registration.metric.(?:MattesMutualInformation|MeanSquares)|registration.optimizer.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|\"+\n\t\t\"rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|\"+\n\t\t\"warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb|bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|\"+\n\t\t\"linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog\"\n    );\n    var storageType = (\n        \"cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"storage.type\": storageType,\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        start: [{ \n            token : \"string\",\n            regex : \"'\",\n            stateName : \"qstring\",\n            next  : [{\n                token : \"constant.language.escape\",\n                regex : \"''\"\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }, {\n            regex: \"\",\n            next: \"noQstring\"\n        }],        \n        noQstring : [{\n            regex: \"^\\\\s*%{\\\\s*$\",\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            token : \"comment\",\n            regex : \"%[^\\r\\n]*\"\n        }, {\n            token : \"string\",\n            regex : '\"',\n            stateName : \"qqstring\",\n            next  : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\./\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\",\n            next: \"start\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\",\n            next: \"start\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[({\\\\[]\",\n            next: \"start\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]})]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }, {\n            token : \"text\",\n            regex : \"$\",\n            next  : \"start\"\n        }],\n        blockComment: [{\n            regex: \"^\\\\s*%{\\\\s*$\",\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            regex: \"^\\\\s*%}\\\\s*$\",\n            token: \"comment.end\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(MatlabHighlightRules, TextHighlightRules);\n\nexports.MatlabHighlightRules = MatlabHighlightRules;\n});\n\nace.define(\"ace/mode/matlab\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matlab_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MatlabHighlightRules = require(\"./matlab_highlight_rules\").MatlabHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = MatlabHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"%\";\n    this.blockComment = {start: \"%{\", end: \"%}\"};\n\n    this.$id = \"ace/mode/matlab\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-maze.js",
    "content": "ace.define(\"ace/mode/maze_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MazeHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"keyword.control\",\n            regex: /##|``/,\n            comment: \"Wall\"\n        }, {\n            token: \"entity.name.tag\",\n            regex: /\\.\\./,\n            comment: \"Path\"\n        }, {\n            token: \"keyword.control\",\n            regex: /<>/,\n            comment: \"Splitter\"\n        }, {\n            token: \"entity.name.tag\",\n            regex: /\\*[\\*A-Za-z0-9]/,\n            comment: \"Signal\"\n        }, {\n            token: \"constant.numeric\",\n            regex: /[0-9]{2}/,\n            comment: \"Pause\"\n        }, {\n            token: \"keyword.control\",\n            regex: /\\^\\^/,\n            comment: \"Start\"\n        }, {\n            token: \"keyword.control\",\n            regex: /\\(\\)/,\n            comment: \"Hole\"\n        }, {\n            token: \"support.function\",\n            regex: />>/,\n            comment: \"Out\"\n        }, {\n            token: \"support.function\",\n            regex: />\\//,\n            comment: \"Ln Out\"\n        }, {\n            token: \"support.function\",\n            regex: /<</,\n            comment: \"In\"\n        }, {\n            token: \"keyword.control\",\n            regex: /--/,\n            comment: \"One use\"\n        }, {\n            token: \"constant.language\",\n            regex: /%[LRUDNlrudn]/,\n            comment: \"Direction\"\n        }, {\n            token: [\n                \"entity.name.function\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"constant.numeric\",\n                \"keyword.operator\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"constant.numeric\",\n                \"string.quoted.double\",\n                \"string.quoted.single\"\n            ],\n            regex: /([A-Za-z][A-Za-z0-9])( *-> *)(?:([-+*\\/]=)( *)((?:-)?)([0-9]+)|(=)( *)(?:((?:-)?)([0-9]+)|(\"[^\"]*\")|('[^']*')))/,\n            comment: \"Assignment function\"\n        }, {\n            token: [\n                \"entity.name.function\",\n                \"keyword.other\",\n                \"keyword.control\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"constant.numeric\",\n                \"entity.name.tag\",\n                \"keyword.other\",\n                \"keyword.control\",\n                \"keyword.other\",\n                \"constant.language\",\n                \"keyword.other\",\n                \"keyword.control\",\n                \"keyword.other\",\n                \"constant.language\"\n            ],\n            regex: /([A-Za-z][A-Za-z0-9])( *-> *)(IF|if)( *)(?:([<>]=?|==)( *)((?:-)?)([0-9]+)|(\\*[\\*A-Za-z0-9]))( *)(THEN|then)( *)(%[LRUDNlrudn])(?:( *)(ELSE|else)( *)(%[LRUDNlrudn]))?/,\n            comment: \"Equality Function\"\n        }, {\n            token: \"entity.name.function\",\n            regex: /[A-Za-z][A-Za-z0-9]/,\n            comment: \"Function cell\"\n        }, {\n            token: \"comment.line.double-slash\",\n            regex: / *\\/\\/.*/,\n            comment: \"Comment\"\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nMazeHighlightRules.metaData = {\n    fileTypes: [\"mz\"],\n    name: \"Maze\",\n    scopeName: \"source.maze\"\n};\n\n\noop.inherits(MazeHighlightRules, TextHighlightRules);\n\nexports.MazeHighlightRules = MazeHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/maze\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/maze_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MazeHighlightRules = require(\"./maze_highlight_rules\").MazeHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MazeHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/maze\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-mel.js",
    "content": "ace.define(\"ace/mode/mel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MELHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { caseInsensitive: true,\n           token: 'storage.type.mel',\n           regex: '\\\\b(matrix|string|vector|float|int|void)\\\\b' },\n         { caseInsensitive: true,\n           token: 'support.function.mel',\n           regex: '\\\\b((s(h(ow(ManipCtx|S(hadingGroupAttrEditor|electionInTitle)|H(idden|elp)|Window)|el(f(Button|TabLayout|Layout)|lField)|ading(GeometryRelCtx|Node|Connection|LightRelCtx))|y(s(tem|File)|mbol(Button|CheckBox))|nap(shot|Mode|2to2 |TogetherCtx|Key)|c(ulpt|ene(UIReplacement|Editor)|ale(BrushBrightness |Constraint|Key(Ctx)?)?|r(ipt(Node|Ctx|Table|edPanel(Type)?|Job|EditorInfo)|oll(Field|Layout))|mh)|t(itch(Surface(Points)?|AndExplodeShell )|a(ckTrace|rt(sWith |String ))|r(cmp|i(ng(ToStringArray |Array(Remove(Duplicates | )|C(ount |atenate )|ToString |Intersector))|p )|oke))|i(n(gleProfileBirailSurface)?|ze|gn|mplify)|o(u(nd(Control)?|rce)|ft(Mod(Ctx)?)?|rt)|u(perCtx|rface(S(haderList|ampler))?|b(st(itute(Geometry|AllString )?|ring)|d(M(irror|a(tchTopology|p(SewMove|Cut)))|iv(Crease|DisplaySmoothness)?|C(ollapse|leanTopology)|T(o(Blind|Poly)|ransferUVsToCache)|DuplicateAndConnect|EditUV|ListComponentConversion|AutoProjection)))|p(h(ere|rand)|otLight(PreviewPort)?|aceLocator|r(ing|eadSheetEditor))|e(t(s|MenuMode|Sta(te |rtupMessage|mpDensity )|NodeTypeFlag|ConstraintRestPosition |ToolTo|In(putDeviceMapping|finity)|D(ynamic|efaultShadingGroup|rivenKeyframe)|UITemplate|P(ar(ticleAttr|ent)|roject )|E(scapeCtx|dit(or|Ctx))|Key(Ctx|frame|Path)|F(ocus|luidAttr)|Attr(Mapping)?)|parator|ed|l(ect(Mode|ionConnection|Context|Type|edNodes|Pr(iority|ef)|Key(Ctx)?)?|LoadSettings)|archPathArray )|kin(Cluster|Percent)|q(uareSurface|rt)|w(itchTable|atchDisplayPort)|a(ve(Menu|Shelf|ToolSettings|I(nitialState|mage)|Pref(s|Objects)|Fluid|A(ttrPreset |llShelves))|mpleImage)|rtContext|mooth(step|Curve|TangentSurface))|h(sv_to_rgb|yp(ot|er(Graph|Shade|Panel))|i(tTest|de|lite)|ot(Box|key(Check)?)|ud(Button|Slider(Button)?)|e(lp(Line)?|adsUpDisplay|rmite)|wRe(nder(Load)?|flectionMap)|ard(enPointCurve|ware(RenderPanel)?))|n(o(nLinear|ise|de(Type|IconButton|Outliner|Preset)|rmal(ize |Constraint))|urbs(Boolean|S(elect|quare)|C(opyUVSet|ube)|To(Subdiv|Poly(gonsPref)?)|Plane|ViewDirectionVector )|ew(ton|PanelItems)|ame(space(Info)?|Command|Field))|c(h(oice|dir|eck(Box(Grp)?|DefaultRenderGlobals)|a(n(nelBox|geSubdiv(Region|ComponentDisplayLevel))|racter(Map|OutlineEditor)?))|y(cleCheck|linder)|tx(Completion|Traverse|EditMode|Abort)|irc(ularFillet|le)|o(s|n(str(uctionHistory|ain(Value)?)|nect(ionInfo|Control|Dynamic|Joint|Attr)|t(extInfo|rol)|dition|e|vert(SolidTx|Tessellation|Unit|FromOldLayers |Lightmap)|firmDialog)|py(SkinWeights|Key|Flexor|Array )|l(or(Slider(Grp|ButtonGrp)|Index(SliderGrp)?|Editor|AtPoint)?|umnLayout|lision)|arsenSubdivSelectionList|m(p(onentEditor|utePolysetVolume |actHairSystem )|mand(Port|Echo|Line)))|u(tKey|r(ve(MoveEPCtx|SketchCtx|CVCtx|Intersect|OnSurface|E(ditorCtx|PCtx)|AddPtCtx)?|rent(Ctx|Time(Ctx)?|Unit)))|p(GetSolverAttr|Button|S(olver(Types)?|e(t(SolverAttr|Edit)|am))|C(o(nstraint|llision)|ache)|Tool|P(anel|roperty))|eil|l(ip(Schedule(rOutliner)?|TrimBefore |Editor(CurrentTimeCtx)?)?|ose(Surface|Curve)|uster|ear(Cache)?|amp)|a(n(CreateManip|vas)|tch(Quiet)?|pitalizeString |mera(View)?)|r(oss(Product )?|eate(RenderLayer|MotionField |SubdivRegion|N(ode|ewShelf )|D(isplayLayer|rawCtx)|Editor))|md(Shell|FileOutput))|M(R(ender(ShadowData|Callback|Data|Util|View|Line(Array)?)|ampAttribute)|G(eometryData|lobal)|M(odelMessage|essage|a(nipData|t(erial|rix)))|BoundingBox|S(yntax|ceneMessage|t(atus|ring(Array)?)|imple|pace|elect(ion(Mask|List)|Info)|watchRender(Register|Base))|H(ardwareRenderer|WShaderSwatchGenerator)|NodeMessage|C(o(nditionMessage|lor(Array)?|m(putation|mand(Result|Message)))|ursor|loth(Material|S(ystem|olverRegister)|Con(straint|trol)|Triangle|Particle|Edge|Force)|allbackIdArray)|T(ypeId|ime(r(Message)?|Array)?|oolsInfo|esselationParams|r(imBoundaryArray|ansformationMatrix))|I(ntArray|t(Geometry|Mesh(Polygon|Edge|Vertex|FaceVertex)|S(urfaceCV|electionList)|CurveCV|Instancer|eratorType|D(ependency(Graph|Nodes)|ag)|Keyframe)|k(System|HandleGroup)|mage)|3dView|Object(SetMessage|Handle|Array)?|D(G(M(odifier|essage)|Context)|ynSwept(Triangle|Line)|istance|oubleArray|evice(State|Channel)|a(ta(Block|Handle)|g(M(odifier|essage)|Path(Array)?))|raw(Request(Queue)?|Info|Data|ProcedureBase))|U(serEventMessage|i(nt(Array|64Array)|Message))|P(o(int(Array)?|lyMessage)|lug(Array)?|rogressWindow|x(G(eometry(Iterator|Data)|lBuffer)|M(idiInputDevice|odelEditorCommand|anipContainer)|S(urfaceShape(UI)?|pringNode|electionContext)|HwShaderNode|Node|Co(ntext(Command)?|m(ponentShape|mand))|T(oolCommand|ransform(ationMatrix)?)|IkSolver(Node)?|3dModelView|ObjectSet|D(eformerNode|ata|ragAndDropBehavior)|PolyT(weakUVCommand|rg)|EmitterNode|F(i(eldNode|leTranslator)|luidEmitterNode)|LocatorNode))|E(ulerRotation|vent(Message)?)|ayatomr|Vector(Array)?|Quaternion|F(n(R(otateManip|eflectShader|adialField)|G(e(nericAttribute|ometry(Data|Filter))|ravityField)|M(otionPath|es(sageAttribute|h(Data)?)|a(nip3D|trix(Data|Attribute)))|B(l(innShader|endShapeDeformer)|ase)|S(caleManip|t(ateManip|ring(Data|ArrayData))|ingleIndexedComponent|ubd(Names|Data)?|p(hereData|otLight)|et|kinCluster)|HikEffector|N(on(ExtendedLight|AmbientLight)|u(rbs(Surface(Data)?|Curve(Data)?)|meric(Data|Attribute))|ewtonField)|C(haracter|ircleSweepManip|ompo(nent(ListData)?|undAttribute)|urveSegmentManip|lip|amera)|T(ypedAttribute|oggleManip|urbulenceField|r(ipleIndexedComponent|ansform))|I(ntArrayData|k(Solver|Handle|Joint|Effector))|D(ynSweptGeometryData|i(s(cManip|tanceManip)|rection(Manip|alLight))|ouble(IndexedComponent|ArrayData)|ependencyNode|a(ta|gNode)|ragField)|U(ni(tAttribute|formField)|Int64ArrayData)|P(hong(Shader|EShader)|oint(On(SurfaceManip|CurveManip)|Light|ArrayData)|fxGeometry|lugin(Data)?|arti(cleSystem|tion))|E(numAttribute|xpression)|V(o(lume(Light|AxisField)|rtexField)|ectorArrayData)|KeyframeDelta(Move|B(lockAddRemove|reakdown)|Scale|Tangent|InfType|Weighted|AddRemove)?|F(ield|luid|reePointTriadManip)|W(ireDeformer|eightGeometryFilter)|L(ight(DataAttribute)?|a(yeredShader|ttice(D(eformer|ata))?|mbertShader))|A(ni(sotropyShader|mCurve)|ttribute|irField|r(eaLight|rayAttrsData)|mbientLight))?|ile(IO|Object)|eedbackLine|loat(Matrix|Point(Array)?|Vector(Array)?|Array))|L(i(ghtLinks|brary)|ockMessage)|A(n(im(Message|C(ontrol|urveC(hange|lipboard(Item(Array)?)?))|Util)|gle)|ttribute(Spec(Array)?|Index)|r(rayData(Builder|Handle)|g(Database|Parser|List))))|t(hreePointArcCtx|ime(Control|Port|rX)|o(ol(Button|HasOptions|Collection|Dropped|PropertyWindow)|NativePath |upper|kenize(List )?|l(ower|erance)|rus|ggle(WindowVisibility|Axis)?)|u(rbulence|mble(Ctx)?)|ex(RotateContext|M(oveContext|anipContext)|t(ScrollList|Curves|ure(HairColor |DisplacePlane |PlacementContext|Window)|ToShelf |Field(Grp|ButtonGrp)?)?|S(caleContext|electContext|mudgeUVContext)|WinToolCtx)|woPointArcCtx|a(n(gentConstraint)?|bLayout)|r(im|unc(ate(HairCache|FluidCache))?|a(ns(formLimits|lator)|c(e|k(Ctx)?))))|i(s(olateSelect|Connected|True|Dirty|ParentOf |Valid(String |ObjectName |UiName )|AnimCurve )|n(s(tance(r)?|ert(Joint(Ctx)?|K(not(Surface|Curve)|eyCtx)))|heritTransform|t(S(crollBar|lider(Grp)?)|er(sect|nalVar|ToUI )|Field(Grp)?))|conText(Radio(Button|Collection)|Button|StaticLabel|CheckBox)|temFilter(Render|Type|Attr)?|prEngine|k(S(ystem(Info)?|olver|plineHandleCtx)|Handle(Ctx|DisplayScale)?|fkDisplayMethod)|m(portComposerCurves |fPlugins|age))|o(ceanNurbsPreviewPlane |utliner(Panel|Editor)|p(tion(Menu(Grp)?|Var)|en(GLExtension|MayaPref))|verrideModifier|ffset(Surface|Curve(OnSurface)?)|r(ientConstraint|bit(Ctx)?)|b(soleteProc |j(ect(Center|Type(UI)?|Layer )|Exists)))|d(yn(RelEd(itor|Panel)|Globals|C(ontrol|ache)|P(a(intEditor|rticleCtx)|ref)|Exp(ort|ression)|amicLoad)|i(s(connect(Joint|Attr)|tanceDim(Context|ension)|pla(y(RGBColor|S(tats|urface|moothness)|C(olor|ull)|Pref|LevelOfDetail|Affected)|cementToPoly)|kCache|able)|r(name |ect(ionalLight|KeyCtx)|map)|mWhen)|o(cServer|Blur|t(Product )?|ubleProfileBirailSurface|peSheetEditor|lly(Ctx)?)|uplicate(Surface|Curve)?|e(tach(Surface|Curve|DeviceAttr)|vice(Panel|Editor)|f(ine(DataServer|VirtualDevice)|ormer|ault(Navigation|LightListCheckBox))|l(ete(Sh(elfTab |adingGroupsAndMaterials )|U(nusedBrushes |I)|Attr)?|randstr)|g_to_rad)|agPose|r(opoffLocator|ag(gerContext)?)|g(timer|dirty|Info|eval))|CBG |u(serCtx|n(t(angleUV|rim)|i(t|form)|do(Info)?|loadPlugin|assignInputDevice|group)|iTemplate|p(dateAE |Axis)|v(Snapshot|Link))|joint(C(tx|luster)|DisplayScale|Lattice)?|p(sd(ChannelOutliner|TextureFile|E(ditTextureFile|xport))|close|i(c(ture|kWalk)|xelMove)|o(se|int(MatrixMult |C(onstraint|urveConstraint)|On(Surface|Curve)|Position|Light)|p(upMenu|en)|w|l(y(Reduce|GeoSampler|M(irrorFace|ove(UV|Edge|Vertex|Facet(UV)?)|erge(UV|Edge(Ctx)?|Vertex|Facet(Ctx)?)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|l(indData|endColor))|S(traightenUVBorder|oftEdge|u(perCtx|bdivide(Edge|Facet))|p(her(icalProjection|e)|lit(Ring|Ctx|Edge|Vertex)?)|e(tToFaceNormal|parate|wEdge|lect(Constraint(Monitor)?|EditCtx))|mooth)|Normal(izeUV|PerVertex)?|C(hipOff|ylind(er|ricalProjection)|o(ne|pyUV|l(or(BlindData|Set|PerVertex)|lapse(Edge|Facet)))|u(t(Ctx)?|be)|l(ipboard|oseBorder)|acheMonitor|rea(seEdge|teFacet(Ctx)?))|T(o(Subdiv|rus)|r(iangulate|ansfer))|In(stallAction|fo)|Options|D(uplicate(Edge|AndConnect)|el(Edge|Vertex|Facet))|U(nite|VSet)|P(yramid|oke|lan(e|arProjection)|r(ism|ojection))|E(ditUV|valuate|xtrude(Edge|Facet))|Qu(eryBlindData|ad)|F(orceUV|lip(UV|Edge))|WedgeFace|L(istComponentConversion|ayoutUV)|A(utoProjection|ppend(Vertex|FacetCtx)?|verage(Normal|Vertex)))|eVectorConstraint))|utenv|er(cent|formanceOptions)|fxstrokes|wd|l(uginInfo|a(y(b(last|ackOptions))?|n(e|arSrf)))|a(steKey|ne(l(History|Configuration)?|Layout)|thAnimation|irBlend|use|lettePort|r(ti(cle(RenderInfo|Instancer|Exists)?|tion)|ent(Constraint)?|am(Dim(Context|ension)|Locator)))|r(int|o(j(ect(ion(Manip|Context)|Curve|Tangent)|FileViewer)|pMo(dCtx|ve)|gress(Bar|Window)|mptDialog)|eloadRefEd))|e(n(codeString|d(sWith |String )|v|ableDevice)|dit(RenderLayer(Globals|Members)|or(Template)?|DisplayLayer(Globals|Members)|AttrLimits )|v(ent|al(Deferred|Echo)?)|quivalent(Tol | )|ffector|r(f|ror)|x(clusiveLightCheckBox|t(end(Surface|Curve)|rude)|ists|p(ortComposerCurves |ression(EditorListen)?)?|ec(uteForEachObject )?|actWorldBoundingBox)|mit(ter)?)|v(i(sor|ew(Set|HeadOn|2dToolCtx|C(lipPlane|amera)|Place|Fit|LookAt))|o(lumeAxis|rtex)|e(ctorize|rifyCmd )|alidateShelfName )|key(Tangent|frame(Region(MoveKeyCtx|S(caleKeyCtx|e(tKeyCtx|lectKeyCtx))|CurrentTimeCtx|TrackCtx|InsertKeyCtx|D(irectKeyCtx|ollyCtx))|Stats|Outliner)?)|qu(it|erySubdiv)|f(c(heck|lose)|i(nd(RelatedSkinCluster |MenuItem |er|Keyframe|AllIntersections )|tBspline|l(ter(StudioImport|Curve|Expand)?|e(BrowserDialog|test|Info|Dialog|Extension )?|letCurve)|rstParentOf )|o(ntDialog|pen|rmLayout)|print|eof|flush|write|l(o(or|w|at(S(crollBar|lider(Grp|ButtonGrp|2)?)|Eq |Field(Grp)?))|u(shUndo|id(CacheInfo|Emitter|VoxelInfo))|exor)|r(omNativePath |e(eFormFillet|wind|ad)|ameLayout)|get(word|line)|mod)|w(hatIs|i(ndow(Pref)?|re(Context)?)|orkspace|ebBrowser(Prefs)?|a(itCursor|rning)|ri(nkle(Context)?|teTake))|l(s(T(hroughFilter|ype )|UI)?|i(st(Relatives|MenuAnnotation |Sets|History|NodeTypes|C(onnections|ameras)|Transforms |InputDevice(s|Buttons|Axes)|erEditor|DeviceAttachments|Unselected |A(nimatable|ttr))|n(step|eIntersection )|ght(link|List(Panel|Editor)?))|o(ckNode|okThru|ft|ad(NewShelf |P(lugin|refObjects)|Fluid)|g)|a(ssoContext|y(out|er(Button|ed(ShaderPort|TexturePort)))|ttice(DeformKeyCtx)?|unch(ImageEditor)?))|a(ssign(Command|InputDevice)|n(notate|im(C(one|urveEditor)|Display|View)|gle(Between)?)|tt(ach(Surface|Curve|DeviceAttr)|r(ibute(Menu|Info|Exists|Query)|NavigationControlGrp|Co(ntrolGrp|lorSliderGrp|mpatibility)|PresetEditWin|EnumOptionMenu(Grp)?|Field(Grp|SliderGrp)))|i(r|mConstraint)|d(d(NewShelfTab|Dynamic|PP|Attr(ibuteEditorNodeHelp)?)|vanceToNextDrivenKey)|uto(Place|Keyframe)|pp(endStringArray|l(y(Take|AttrPreset)|icationName))|ffect(s|edNet)|l(i(as(Attr)?|gn(Surface|C(tx|urve))?)|lViewFit)|r(c(len|Len(DimContext|gthDimension))|t(BuildPaintMenu|Se(tPaintCtx|lectCtx)|3dPaintCtx|UserPaintCtx|PuttyCtx|FluidAttrCtx|Attr(SkinPaintCtx|Ctx|PaintVertexCtx))|rayMapper)|mbientLight|b(s|out))|r(igid(Body|Solver)|o(t(at(ionInterpolation|e))?|otOf |undConstantRadius|w(ColumnLayout|Layout)|ll(Ctx)?)|un(up|TimeCommand)|e(s(olutionNode|et(Tool|AE )|ampleFluid)|hash|n(der(GlobalsNode|Manip|ThumbnailUpdate|Info|er|Partition|QualityNode|Window(SelectContext|Editor)|LayerButton)?|ame(SelectionList |UI|Attr)?)|cord(Device|Attr)|target|order(Deformers)?|do|v(olve|erse(Surface|Curve))|quires|f(ineSubdivSelectionList|erence(Edit|Query)?|resh(AE )?)|loadImage|adTake|root|move(MultiInstance|Joint)|build(Surface|Curve))|a(n(d(state|omizeFollicles )?|geControl)|d(i(o(MenuItemCollection|Button(Grp)?|Collection)|al)|_to_deg)|mpColorPort)|gb_to_hsv)|g(o(toBindPose |al)|e(t(M(odifiers|ayaPanelTypes )|Classification|InputDeviceRange|pid|env|DefaultBrush|Pa(nel|rticleAttr)|F(ileList|luidAttr)|A(ttr|pplicationVersionAsFloat ))|ometryConstraint)|l(Render(Editor)?|obalStitch)|a(uss|mma)|r(id(Layout)?|oup(ObjectsByName )?|a(dientControl(NoAttr)?|ph(SelectContext|TrackCtx|DollyCtx)|vity|bColor))|match)|x(pmPicker|form|bmLangPathList )|m(i(n(imizeApp)?|rrorJoint)|o(del(CurrentTimeCtx|Panel|Editor)|use|v(In|e(IKtoFK |VertexAlongDirection|KeyCtx)?|Out))|u(te|ltiProfileBirailSurface)|e(ssageLine|nu(BarLayout|Item(ToShelf )?|Editor)?|mory)|a(nip(Rotate(Context|LimitsCtx)|Move(Context|LimitsCtx)|Scale(Context|LimitsCtx)|Options)|tch|ke(Roll |SingleSurface|TubeOn |Identity|Paintable|bot|Live)|rker|g|x))|b(in(Membership|d(Skin|Pose))|o(neLattice|undary|x(ZoomCtx|DollyCtx))|u(tton(Manip)?|ild(BookmarkMenu|KeyframeMenu)|fferCurve)|e(ssel|vel(Plus)?)|l(indDataType|end(Shape(Panel|Editor)?|2|TwoAttr))|a(sename(Ex | )|tchRender|ke(Results|Simulation|Clip|PartialHistory|FluidShading )))))\\\\b' },\n         { caseInsensitive: true,\n           token: 'support.constant.mel',\n           regex: '\\\\b(s(h(ellTessellate|a(d(ing(Map|Engine)|erGlow)|pe))|n(ow|apshot(Shape)?)|c(ulpt|aleConstraint|ript)|t(yleCurve|itch(Srf|AsNurbsShell)|u(cco|dioClearCoat)|encil|roke(Globals)?)|i(ngleShadingSwitch|mpleVolumeShader)|o(ftMod(Manip|Handle)?|lidFractal)|u(rface(Sha(der|pe)|Info|EdManip|VarGroup|Luminance)|b(Surface|d(M(odifier(UV|World)?|ap(SewMove|Cut|pingManip))|B(lindData|ase)|iv(ReverseFaces|SurfaceVarGroup|Co(llapse|mponentId)|To(Nurbs|Poly))?|HierBlind|CleanTopology|Tweak(UV)?|P(lanarProj|rojManip)|LayoutUV|A(ddTopology|utoProj))|Curve))|p(BirailSrf|otLight|ring)|e(tRange|lectionListOperator)|k(inCluster|etchPlane)|quareSrf|ampler(Info)?|m(ooth(Curve|TangentSrf)|ear))|h(svToRgb|yper(GraphInfo|View|Layout)|ik(Solver|Handle|Effector)|oldMatrix|eightField|w(Re(nderGlobals|flectionMap)|Shader)|a(ir(System|Constraint|TubeShader)|rd(enPoint|wareRenderGlobals)))|n(o(n(ExtendedLightShapeNode|Linear|AmbientLightShapeNode)|ise|rmalConstraint)|urbs(Surface|Curve|T(oSubdiv(Proc)?|essellate)|DimShape)|e(twork|wtonField))|c(h(o(ice|oser)|ecker|aracter(Map|Offset)?)|o(n(straint|tr(olPoint|ast)|dition)|py(ColorSet|UVSet))|urve(Range|Shape|Normalizer(Linear|Angle)?|In(tersect|fo)|VarGroup|From(Mesh(CoM|Edge)?|Su(rface(Bnd|CoS|Iso)?|bdiv(Edge|Face)?)))|l(ip(Scheduler|Library)|o(se(stPointOnSurface|Surface|Curve)|th|ud)|uster(Handle)?|amp)|amera(View)?|r(eate(BPManip|ColorSet|UVSet)|ater))|t(ime(ToUnitConversion|Function)?|oo(nLineAttributes|lDrawManip)|urbulenceField|ex(BaseDeformManip|ture(BakeSet|2d|ToGeom|3d|Env)|SmudgeUVManip|LatticeDeformManip)|weak|angentConstraint|r(i(pleShadingSwitch|m(WithBoundaries)?)|ansform(Geometry)?))|i(n(s(tancer|ertKnot(Surface|Curve))|tersectSurface)|k(RPsolver|MCsolver|S(ystem|olver|Csolver|plineSolver)|Handle|PASolver|Effector)|m(plicit(Box|Sphere|Cone)|agePlane))|o(cean(Shader)?|pticalFX|ffset(Surface|C(os|urve))|ldBlindDataBase|rient(Constraint|ationMarker)|bject(RenderFilter|MultiFilter|BinFilter|S(criptFilter|et)|NameFilter|TypeFilter|Filter|AttrFilter))|d(yn(Globals|Base)|i(s(tance(Between|DimShape)|pla(yLayer(Manager)?|cementShader)|kCache)|rect(ionalLight|edDisc)|mensionShape)|o(ubleShadingSwitch|f)|pBirailSrf|e(tach(Surface|Curve)|pendNode|f(orm(Bend|S(ine|quash)|Twist|ableShape|F(unc|lare)|Wave)|ault(RenderUtilityList|ShaderList|TextureList|LightList))|lete(Co(lorSet|mponent)|UVSet))|ag(Node|Pose)|r(opoffLocator|agField))|u(seBackground|n(trim|i(t(Conversion|ToTimeConversion)|formField)|known(Transform|Dag)?)|vChooser)|j(iggle|oint(Cluster|Ffd|Lattice)?)|p(sdFileTex|hong(E)?|o(s(tProcessList|itionMarker)|int(MatrixMult|Constraint|On(SurfaceInfo|CurveInfo)|Emitter|Light)|l(y(Reduce|M(irror|o(difier(UV|World)?|ve(UV|Edge|Vertex|Face(tUV)?))|erge(UV|Edge|Vert|Face)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|lindData|ase)|S(traightenUVBorder|oftEdge|ubd(Edge|Face)|p(h(ere|Proj)|lit(Ring|Edge|Vert)?)|e(parate|wEdge)|mooth(Proxy|Face)?)|Normal(izeUV|PerVertex)?|C(hipOff|yl(inder|Proj)|o(ne|pyUV|l(orPerVertex|lapse(Edge|F)))|u(t(Manip(Container)?)?|be)|loseBorder|rea(seEdge|t(or|eFace)))|T(o(Subdiv|rus)|weak(UV)?|r(iangulate|ansfer))|OptUvs|D(uplicateEdge|el(Edge|Vertex|Facet))|Unite|P(yramid|oke(Manip)?|lan(e|arProj)|r(i(sm|mitive)|oj))|Extrude(Edge|Vertex|Face)|VertexNormalManip|Quad|Flip(UV|Edge)|WedgeFace|LayoutUV|A(utoProj|ppend(Vertex)?|verageVertex))|eVectorConstraint))|fx(Geometry|Hair|Toon)|l(usMinusAverage|a(n(e|arTrimSurface)|ce(2dTexture|3dTexture)))|a(ssMatrix|irBlend|r(ti(cle(SamplerInfo|C(olorMapper|loud)|TranspMapper|IncandMapper|AgeMapper)?|tion)|ent(Constraint|Tessellate)|amDimension))|r(imitive|o(ject(ion|Curve|Tangent)|xyManager)))|e(n(tity|v(Ball|ironmentFog|S(phere|ky)|C(hrome|ube)|Fog))|x(t(end(Surface|Curve)|rude)|p(lodeNurbsShell|ression)))|v(iewManip|o(lume(Shader|Noise|Fog|Light|AxisField)|rtexField)|e(ctor(RenderGlobals|Product)|rtexBakeSet))|quadShadingSwitch|f(i(tBspline|eld|l(ter(Resample|Simplify|ClosestSample|Euler)?|e|letCurve))|o(urByFourMatrix|llicle)|urPointOn(MeshInfo|Subd)|f(BlendSrf(Obsolete)?|d|FilletSrf)|l(ow|uid(S(hape|liceManip)|Texture(2D|3D)|Emitter)|exorShape)|ra(ctal|meCache))|w(tAddMatrix|ire|ood|eightGeometryFilter|ater|rap)|l(ight(Info|Fog|Li(st|nker))?|o(cator|okAt|d(Group|Thresholds)|ft)|uminance|ea(stSquaresModifier|ther)|a(yered(Shader|Texture)|ttice|mbert))|a(n(notationShape|i(sotropic|m(Blend(InOut)?|C(urve(T(T|U|L|A)|U(T|U|L|A))?|lip)))|gleBetween)|tt(ach(Surface|Curve)|rHierarchyTest)|i(rField|mConstraint)|dd(Matrix|DoubleLinear)|udio|vg(SurfacePoints|NurbsSurfacePoints|Curves)|lign(Manip|Surface|Curve)|r(cLengthDimension|tAttrPaintTest|eaLight|rayMapper)|mbientLight|bstractBase(NurbsConversion|Create))|r(igid(Body|Solver|Constraint)|o(ck|undConstantRadius)|e(s(olution|ultCurve(TimeTo(Time|Unitless|Linear|Angular))?)|nder(Rect|Globals(List)?|Box|Sphere|Cone|Quality|L(ight|ayer(Manager)?))|cord|v(olve(dPrimitive)?|erse(Surface|Curve)?)|f(erence|lect)|map(Hsv|Color|Value)|build(Surface|Curve))|a(dialField|mp(Shader)?)|gbToHsv|bfSrf)|g(uide|eo(Connect(or|able)|metry(Shape|Constraint|VarGroup|Filter))|lobal(Stitch|CacheControl)|ammaCorrect|r(id|oup(Id|Parts)|a(nite|vityField)))|Fur(Globals|Description|Feedback|Attractors)|xformManip|m(o(tionPath|untain|vie)|u(te|lt(Matrix|i(plyDivide|listerLight)|DoubleLinear))|pBirailSrf|e(sh(VarGroup)?|ntalray(Texture|IblShape))|a(terialInfo|ke(Group|Nurb(sSquare|Sphere|C(ylinder|ircle|one|ube)|Torus|Plane)|CircularArc|T(hreePointCircularArc|extCurves|woPointCircularArc))|rble))|b(irailSrf|o(neLattice|olean|undary(Base)?)|u(lge|mp(2d|3d))|evel(Plus)?|l(in(n|dDataTemplate)|end(Shape|Color(s|Sets)|TwoAttr|Device|Weighted)?)|a(se(GeometryVarGroup|ShadingSwitch|Lattice)|keSet)|r(ownian|ush)))\\\\b' },\n         { caseInsensitive: true,\n           token: 'keyword.control.mel',\n           regex: '\\\\b(if|in|else|for|while|break|continue|case|default|do|switch|return|switch|case|source|catch|alias)\\\\b' },\n         { token: 'keyword.other.mel', regex: '\\\\b(global)\\\\b' },\n         { caseInsensitive: true,\n           token: 'constant.language.mel',\n           regex: '\\\\b(null|undefined)\\\\b' },\n         { token: 'constant.numeric.mel',\n           regex: '\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\\\\b' },\n         { token: 'punctuation.definition.string.begin.mel',\n           regex: '\"',\n           push: \n            [ { token: 'constant.character.escape.mel', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.mel',\n                regex: '\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.double.mel' } ] },\n         \n         { token: [ 'variable.other.mel', 'punctuation.definition.variable.mel' ],\n           regex: '(\\\\$)([a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*?\\\\b)' },\n           \n         { token: 'punctuation.definition.string.begin.mel',\n           regex: '\\'',\n           push: \n            [ { token: 'constant.character.escape.mel', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.mel',\n                regex: '\\'',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.single.mel' } ] },\n         \n         { token: 'constant.language.mel',\n           regex: '\\\\b(false|true|yes|no|on|off)\\\\b' },\n           \n         { token: 'punctuation.definition.comment.mel',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.mel',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.mel' } ] },\n         \n         { token: [ 'comment.line.double-slash.mel', 'punctuation.definition.comment.mel' ],\n           regex: '(//)(.*$\\\\n?)' },\n           \n         { caseInsensitive: true,\n           token: 'keyword.operator.mel',\n           regex: '\\\\b(instanceof)\\\\b' },\n         { token: 'keyword.operator.symbolic.mel',\n           regex: '[-\\\\!\\\\%\\\\&\\\\*\\\\+\\\\=\\\\/\\\\?\\\\:]' },\n         \n         { token: [ 'meta.preprocessor.mel', 'punctuation.definition.preprocessor.mel' ],\n           regex: '(^[ \\\\t]*)((?:#)[a-zA-Z]+)' },\n         \n         { token: [ 'meta.function.mel', 'keyword.other.mel', 'storage.type.mel', 'entity.name.function.mel', 'punctuation.section.function.mel' ],\n           regex: '(global\\\\s*)?(proc\\\\s*)(\\\\w+\\\\s*\\\\[?\\\\]?\\\\s+|\\\\s+)([A-Za-z_][A-Za-z0-9_\\\\.]*)(\\\\s*\\\\()',\n           push: \n            [ { include: '$self' },\n              { token: 'punctuation.section.function.mel',\n                regex: '\\\\)',\n                next: 'pop' },\n              { defaultToken: 'meta.function.mel' } ] }\n              \n              ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(MELHighlightRules, TextHighlightRules);\n\nexports.MELHighlightRules = MELHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/mel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mel_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MELHighlightRules = require(\"./mel_highlight_rules\").MELHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MELHighlightRules;\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/mel\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-mixal.js",
    "content": "ace.define(\"ace/mode/mixal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MixalHighlightRules = function() {\n    var isValidSymbol = function(string) {\n        return string && string.search(/^[A-Z\\u0394\\u03a0\\u03a30-9]{1,10}$/) > -1 && string.search(/[A-Z\\u0394\\u03a0\\u03a3]/) > -1;\n    };\n\n    var isValidOp = function(op) {\n        return op && [\n            'NOP', 'ADD', 'FADD', 'SUB', 'FSUB', 'MUL', 'FMUL', 'DIV', 'FDIV', 'NUM', 'CHAR', 'HLT',\n            'SLA', 'SRA', 'SLAX', 'SRAX', 'SLC', 'SRC', 'MOVE', 'LDA', 'LD1', 'LD2', 'LD3', 'LD4',\n            'LD5', 'LD6', 'LDX', 'LDAN', 'LD1N', 'LD2N', 'LD3N', 'LD4N', 'LD5N', 'LD6N', 'LDXN',\n            'STA', 'ST1', 'ST2', 'ST3', 'ST4', 'ST5', 'ST6', 'STX', 'STJ', 'STZ', 'JBUS', 'IOC',\n            'IN', 'OUT', 'JRED', 'JMP', 'JSJ', 'JOV', 'JNOV', 'JL', 'JE', 'JG', 'JGE', 'JNE', 'JLE',\n            'JAN', 'JAZ', 'JAP', 'JANN', 'JANZ', 'JANP', 'J1N', 'J1Z', 'J1P', 'J1NN', 'J1NZ',\n            'J1NP', 'J2N', 'J2Z', 'J2P', 'J2NN', 'J2NZ', 'J2NP','J3N', 'J3Z', 'J3P', 'J3NN', 'J3NZ',\n            'J3NP', 'J4N', 'J4Z', 'J4P', 'J4NN', 'J4NZ', 'J4NP', 'J5N', 'J5Z', 'J5P', 'J5NN',\n            'J5NZ', 'J5NP','J6N', 'J6Z', 'J6P', 'J6NN', 'J6NZ', 'J6NP', 'JXAN', 'JXZ', 'JXP',\n            'JXNN', 'JXNZ', 'JXNP', 'INCA', 'DECA', 'ENTA', 'ENNA', 'INC1', 'DEC1', 'ENT1', 'ENN1',\n            'INC2', 'DEC2', 'ENT2', 'ENN2', 'INC3', 'DEC3', 'ENT3', 'ENN3', 'INC4', 'DEC4', 'ENT4',\n            'ENN4', 'INC5', 'DEC5', 'ENT5', 'ENN5', 'INC6', 'DEC6', 'ENT6', 'ENN6', 'INCX', 'DECX',\n            'ENTX', 'ENNX', 'CMPA', 'FCMP', 'CMP1', 'CMP2', 'CMP3', 'CMP4', 'CMP5', 'CMP6', 'CMPX',\n            'EQU', 'ORIG', 'CON', 'ALF', 'END'\n        ].indexOf(op) > -1;\n    };\n\n    var containsOnlySupportedCharacters = function(string) {\n        return string && string.search(/[^ A-Z\\u0394\\u03a0\\u03a30-9.,()+*/=$<>@;:'-]/) == -1;\n    };\n\n    this.$rules = {\n        \"start\" : [{\n            token: \"comment.line.character\",\n            regex: /^ *\\*.*$/\n        }, {\n            token: function(label, space0, keyword, space1, literal, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    \"keyword.control\",\n                    \"text\",\n                    containsOnlySupportedCharacters(literal) ? \"text\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(ALF)(  )(.{5})(\\s+.*)?$/\n        }, {\n            token: function(label, space0, keyword, space1, literal, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    \"keyword.control\",\n                    \"text\",\n                    containsOnlySupportedCharacters(literal) ? \"text\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(ALF)( )(\\S.{4})(\\s+.*)?$/\n        }, {\n            token: function(label, space0, op, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    isValidOp(op) ? \"keyword.control\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(\\S+)(?:\\s*)$/\n        }, {\n            token: function(label, space0, op, space1, address, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    isValidOp(op) ? \"keyword.control\" : \"invalid.illegal\",\n                    \"text\",\n                    containsOnlySupportedCharacters(address) ? \"text\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(\\S+)( +)(\\S+)(\\s+.*)?$/\n        }, {\n            defaultToken: \"text\"\n        }]\n    };\n};\n\noop.inherits(MixalHighlightRules, TextHighlightRules);\n\nexports.MixalHighlightRules = MixalHighlightRules;\n\n});\n\nace.define(\"ace/mode/mixal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mixal_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MixalHighlightRules = require(\"./mixal_highlight_rules\").MixalHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = MixalHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/mixal\";\n    this.lineCommentStart = \"*\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-mushcode.js",
    "content": "ace.define(\"ace/mode/mushcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MushCodeRules = function() {\n\n\n    var keywords = (\n \"@if|\"+\n \"@ifelse|\"+\n \"@switch|\"+\n \"@halt|\"+\n \"@dolist|\"+\n \"@create|\"+\n \"@scent|\"+\n \"@sound|\"+\n \"@touch|\"+\n \"@ataste|\"+\n \"@osound|\"+\n \"@ahear|\"+\n \"@aahear|\"+\n \"@amhear|\"+\n \"@otouch|\"+\n \"@otaste|\"+\n \"@drop|\"+\n \"@odrop|\"+\n \"@adrop|\"+\n \"@dropfail|\"+\n \"@odropfail|\"+\n \"@smell|\"+\n \"@oemit|\"+\n \"@emit|\"+\n \"@pemit|\"+\n \"@parent|\"+\n \"@clone|\"+\n \"@taste|\"+\n \"whisper|\"+\n \"page|\"+\n \"say|\"+\n \"pose|\"+\n \"semipose|\"+\n \"teach|\"+\n \"touch|\"+\n \"taste|\"+\n \"smell|\"+\n \"listen|\"+\n \"look|\"+\n \"move|\"+\n \"go|\"+\n \"home|\"+\n \"follow|\"+\n \"unfollow|\"+\n \"desert|\"+\n \"dismiss|\"+\n \"@tel\"\n    );\n\n    var builtinConstants = (\n        \"=#0\"\n    );\n\n    var builtinFunctions = (\n \"default|\"+\n \"edefault|\"+\n \"eval|\"+\n \"get_eval|\"+\n \"get|\"+\n \"grep|\"+\n \"grepi|\"+\n \"hasattr|\"+\n \"hasattrp|\"+\n \"hasattrval|\"+\n \"hasattrpval|\"+\n \"lattr|\"+\n \"nattr|\"+\n \"poss|\"+\n \"udefault|\"+\n \"ufun|\"+\n \"u|\"+\n \"v|\"+\n \"uldefault|\"+\n \"xget|\"+\n \"zfun|\"+\n \"band|\"+\n \"bnand|\"+\n \"bnot|\"+\n \"bor|\"+\n \"bxor|\"+\n \"shl|\"+\n \"shr|\"+\n \"and|\"+\n \"cand|\"+\n \"cor|\"+\n \"eq|\"+\n \"gt|\"+\n \"gte|\"+\n \"lt|\"+\n \"lte|\"+\n \"nand|\"+\n \"neq|\"+\n \"nor|\"+\n \"not|\"+\n \"or|\"+\n \"t|\"+\n \"xor|\"+\n \"con|\"+\n \"entrances|\"+\n \"exit|\"+\n \"followers|\"+\n \"home|\"+\n \"lcon|\"+\n \"lexits|\"+\n \"loc|\"+\n \"locate|\"+\n \"lparent|\"+\n \"lsearch|\"+\n \"next|\"+\n \"num|\"+\n \"owner|\"+\n \"parent|\"+\n \"pmatch|\"+\n \"rloc|\"+\n \"rnum|\"+\n \"room|\"+\n \"where|\"+\n \"zone|\"+\n \"worn|\"+\n \"held|\"+\n \"carried|\"+\n \"acos|\"+\n \"asin|\"+\n \"atan|\"+\n \"ceil|\"+\n \"cos|\"+\n \"e|\"+\n \"exp|\"+\n \"fdiv|\"+\n \"fmod|\"+\n \"floor|\"+\n \"log|\"+\n \"ln|\"+\n \"pi|\"+\n \"power|\"+\n \"round|\"+\n \"sin|\"+\n \"sqrt|\"+\n \"tan|\"+\n \"aposs|\"+\n \"andflags|\"+\n \"conn|\"+\n \"commandssent|\"+\n \"controls|\"+\n \"doing|\"+\n \"elock|\"+\n \"findable|\"+\n \"flags|\"+\n \"fullname|\"+\n \"hasflag|\"+\n \"haspower|\"+\n \"hastype|\"+\n \"hidden|\"+\n \"idle|\"+\n \"isbaker|\"+\n \"lock|\"+\n \"lstats|\"+\n \"money|\"+\n \"who|\"+\n \"name|\"+\n \"nearby|\"+\n \"obj|\"+\n \"objflags|\"+\n \"photo|\"+\n \"poll|\"+\n \"powers|\"+\n \"pendingtext|\"+\n \"receivedtext|\"+\n \"restarts|\"+\n \"restarttime|\"+\n \"subj|\"+\n \"shortestpath|\"+\n \"tmoney|\"+\n \"type|\"+\n \"visible|\"+\n \"cat|\"+\n \"element|\"+\n \"elements|\"+\n \"extract|\"+\n \"filter|\"+\n \"filterbool|\"+\n \"first|\"+\n \"foreach|\"+\n \"fold|\"+\n \"grab|\"+\n \"graball|\"+\n \"index|\"+\n \"insert|\"+\n \"itemize|\"+\n \"items|\"+\n \"iter|\"+\n \"last|\"+\n \"ldelete|\"+\n \"map|\"+\n \"match|\"+\n \"matchall|\"+\n \"member|\"+\n \"mix|\"+\n \"munge|\"+\n \"pick|\"+\n \"remove|\"+\n \"replace|\"+\n \"rest|\"+\n \"revwords|\"+\n \"setdiff|\"+\n \"setinter|\"+\n \"setunion|\"+\n \"shuffle|\"+\n \"sort|\"+\n \"sortby|\"+\n \"splice|\"+\n \"step|\"+\n \"wordpos|\"+\n \"words|\"+\n \"add|\"+\n \"lmath|\"+\n \"max|\"+\n \"mean|\"+\n \"median|\"+\n \"min|\"+\n \"mul|\"+\n \"percent|\"+\n \"sign|\"+\n \"stddev|\"+\n \"sub|\"+\n \"val|\"+\n \"bound|\"+\n \"abs|\"+\n \"inc|\"+\n \"dec|\"+\n \"dist2d|\"+\n \"dist3d|\"+\n \"div|\"+\n \"floordiv|\"+\n \"mod|\"+\n \"modulo|\"+\n \"remainder|\"+\n \"vadd|\"+\n \"vdim|\"+\n \"vdot|\"+\n \"vmag|\"+\n \"vmax|\"+\n \"vmin|\"+\n \"vmul|\"+\n \"vsub|\"+\n \"vunit|\"+\n \"regedit|\"+\n \"regeditall|\"+\n \"regeditalli|\"+\n \"regediti|\"+\n \"regmatch|\"+\n \"regmatchi|\"+\n \"regrab|\"+\n \"regraball|\"+\n \"regraballi|\"+\n \"regrabi|\"+\n \"regrep|\"+\n \"regrepi|\"+\n \"after|\"+\n \"alphamin|\"+\n \"alphamax|\"+\n \"art|\"+\n \"before|\"+\n \"brackets|\"+\n \"capstr|\"+\n \"case|\"+\n \"caseall|\"+\n \"center|\"+\n \"containsfansi|\"+\n \"comp|\"+\n \"decompose|\"+\n \"decrypt|\"+\n \"delete|\"+\n \"edit|\"+\n \"encrypt|\"+\n \"escape|\"+\n \"if|\"+\n \"ifelse|\"+\n \"lcstr|\"+\n \"left|\"+\n \"lit|\"+\n \"ljust|\"+\n \"merge|\"+\n \"mid|\"+\n \"ostrlen|\"+\n \"pos|\"+\n \"repeat|\"+\n \"reverse|\"+\n \"right|\"+\n \"rjust|\"+\n \"scramble|\"+\n \"secure|\"+\n \"space|\"+\n \"spellnum|\"+\n \"squish|\"+\n \"strcat|\"+\n \"strmatch|\"+\n \"strinsert|\"+\n \"stripansi|\"+\n \"stripfansi|\"+\n \"strlen|\"+\n \"switch|\"+\n \"switchall|\"+\n \"table|\"+\n \"tr|\"+\n \"trim|\"+\n \"ucstr|\"+\n \"unsafe|\"+\n \"wrap|\"+\n \"ctitle|\"+\n \"cwho|\"+\n \"channels|\"+\n \"clock|\"+\n \"cflags|\"+\n \"ilev|\"+\n \"itext|\"+\n \"inum|\"+\n \"convsecs|\"+\n \"convutcsecs|\"+\n \"convtime|\"+\n \"ctime|\"+\n \"etimefmt|\"+\n \"isdaylight|\"+\n \"mtime|\"+\n \"secs|\"+\n \"msecs|\"+\n \"starttime|\"+\n \"time|\"+\n \"timefmt|\"+\n \"timestring|\"+\n \"utctime|\"+\n \"atrlock|\"+\n \"clone|\"+\n \"create|\"+\n \"cook|\"+\n \"dig|\"+\n \"emit|\"+\n \"lemit|\"+\n \"link|\"+\n \"oemit|\"+\n \"open|\"+\n \"pemit|\"+\n \"remit|\"+\n \"set|\"+\n \"tel|\"+\n \"wipe|\"+\n \"zemit|\"+\n \"fbcreate|\"+\n \"fbdestroy|\"+\n \"fbwrite|\"+\n \"fbclear|\"+\n \"fbcopy|\"+\n \"fbcopyto|\"+\n \"fbclip|\"+\n \"fbdump|\"+\n \"fbflush|\"+\n \"fbhset|\"+\n \"fblist|\"+\n \"fbstats|\"+\n \"qentries|\"+\n \"qentry|\"+\n \"play|\"+\n \"ansi|\"+\n \"break|\"+\n \"c|\"+\n \"asc|\"+\n \"die|\"+\n \"isdbref|\"+\n \"isint|\"+\n \"isnum|\"+\n \"isletters|\"+\n \"linecoords|\"+\n \"localize|\"+\n \"lnum|\"+\n \"nameshort|\"+\n \"null|\"+\n \"objeval|\"+\n \"r|\"+\n \"rand|\"+\n \"s|\"+\n \"setq|\"+\n \"setr|\"+\n \"soundex|\"+\n \"soundslike|\"+\n \"valid|\"+\n \"vchart|\"+\n \"vchart2|\"+\n \"vlabel|\"+\n \"@@|\"+\n \"bakerdays|\"+\n \"bodybuild|\"+\n \"box|\"+\n \"capall|\"+\n \"catalog|\"+\n \"children|\"+\n \"ctrailer|\"+\n \"darttime|\"+\n \"debt|\"+\n \"detailbar|\"+\n \"exploredroom|\"+\n \"fansitoansi|\"+\n \"fansitoxansi|\"+\n \"fullbar|\"+\n \"halfbar|\"+\n \"isdarted|\"+\n \"isnewbie|\"+\n \"isword|\"+\n \"lambda|\"+\n \"lobjects|\"+\n \"lplayers|\"+\n \"lthings|\"+\n \"lvexits|\"+\n \"lvobjects|\"+\n \"lvplayers|\"+\n \"lvthings|\"+\n \"newswrap|\"+\n \"numsuffix|\"+\n \"playerson|\"+\n \"playersthisweek|\"+\n \"randomad|\"+\n \"randword|\"+\n \"realrandword|\"+\n \"replacechr|\"+\n \"second|\"+\n \"splitamount|\"+\n \"strlenall|\"+\n \"text|\"+\n \"third|\"+\n \"tofansi|\"+\n \"totalac|\"+\n \"unique|\"+\n \"getaddressroom|\"+\n \"listpropertycomm|\"+\n \"listpropertyres|\"+\n \"lotowner|\"+\n \"lotrating|\"+\n \"lotratingcount|\"+\n \"lotvalue|\"+\n \"boughtproduct|\"+\n \"companyabb|\"+\n \"companyicon|\"+\n \"companylist|\"+\n \"companyname|\"+\n \"companyowners|\"+\n \"companyvalue|\"+\n \"employees|\"+\n \"invested|\"+\n \"productlist|\"+\n \"productname|\"+\n \"productowners|\"+\n \"productrating|\"+\n \"productratingcount|\"+\n \"productsoldat|\"+\n \"producttype|\"+\n \"ratedproduct|\"+\n \"soldproduct|\"+\n \"topproducts|\"+\n \"totalspentonproduct|\"+\n \"totalstock|\"+\n \"transfermoney|\"+\n \"uniquebuyercount|\"+\n \"uniqueproductsbought|\"+\n \"validcompany|\"+\n \"deletepicture|\"+\n \"fbsave|\"+\n \"getpicturesecurity|\"+\n \"haspicture|\"+\n \"listpictures|\"+\n \"picturesize|\"+\n \"replacecolor|\"+\n \"rgbtocolor|\"+\n \"savepicture|\"+\n \"setpicturesecurity|\"+\n \"showpicture|\"+\n \"piechart|\"+\n \"piechartlabel|\"+\n \"createmaze|\"+\n \"drawmaze|\"+\n \"drawwireframe\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [\n         {\n                token : \"variable\", // mush substitution register\n                regex : \"%[0-9]{1}\"\n         },\n         {\n                token : \"variable\", // mush substitution register\n                regex : \"%q[0-9A-Za-z]{1}\"\n         },\n         {\n                token : \"variable\", // mush special character register\n                regex : \"%[a-zA-Z]{1}\"\n         },\n         {\n                token: \"variable.language\",\n                regex: \"%[a-z0-9-_]+\"\n         },\n        {\n            token : \"constant.numeric\", // imaginary\n            regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // long integer\n            regex : integer + \"[lL]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|#|%|<<|>>|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n};\n\noop.inherits(MushCodeRules, TextHighlightRules);\n\nexports.MushCodeRules = MushCodeRules;\n});\n\nace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(markers) {\n    this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, match.index);\n            if (match[2])\n                return this.indentationBlock(session, row, match.index + match[2].length);\n            return this.indentationBlock(session, row);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/mushcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mushcode_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MushCodeRules = require(\"./mushcode_highlight_rules\").MushCodeRules;\nvar PythonFoldMode = require(\"./folding/pythonic\").FoldMode;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = MushCodeRules;\n    this.foldingRules = new PythonFoldMode(\"\\\\:\");\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n   var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/mushcode\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-mysql.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/mysql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MysqlHighlightRules = function() {\n\n    var mySqlKeywords = /*sql*/ \"alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where\" + \"|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat\";\n    var builtins = \"by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl\";\n    var variable = \"charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtins,\n        \"keyword\": mySqlKeywords,\n        \"constant\": \"false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat\",\n        \"variable.language\": variable\n    }, \"identifier\", true);\n\n    \n    function string(rule) {\n        var start = rule.start;\n        var escapeSeq = rule.escape;\n        return {\n            token: \"string.start\",\n            regex: start,\n            next: [\n                {token: \"constant.language.escape\", regex: escapeSeq},\n                {token: \"string.end\", next: \"start\", regex: start},\n                {defaultToken: \"string\"}\n            ]\n        };\n    }\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\", regex : \"(?:-- |#).*$\"\n        },  \n        string({start: '\"', escape: /\\\\[0'\"bnrtZ\\\\%_]?/}),\n        string({start: \"'\", escape: /\\\\[0'\"bnrtZ\\\\%_]?/}),\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next : \"comment\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : /0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"constant.class\",\n            regex : \"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"constant.buildin\",\n            regex : \"`[^`]*`\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ],\n        \"comment\" : [\n            {token : \"comment\", regex : \"\\\\*\\\\/\", next : \"start\"},\n            {defaultToken : \"comment\"}\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(MysqlHighlightRules, TextHighlightRules);\n\nexports.MysqlHighlightRules = MysqlHighlightRules;\n});\n\nace.define(\"ace/mode/mysql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mysql_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar MysqlHighlightRules = require(\"./mysql_highlight_rules\").MysqlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = MysqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {       \n    this.lineCommentStart = [\"--\", \"#\"]; // todo space\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.$id = \"ace/mode/mysql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-nix.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/nix_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var NixHighlightRules = function() {\n\n        var constantLanguage = \"true|false\";\n        var keywordControl = \"with|import|if|else|then|inherit\";\n        var keywordDeclaration = \"let|in|rec\";\n\n        var keywordMapper = this.createKeywordMapper({\n            \"constant.language.nix\": constantLanguage,\n            \"keyword.control.nix\": keywordControl,\n            \"keyword.declaration.nix\": keywordDeclaration\n        }, \"identifier\");\n\n        this.$rules = {\n            \"start\": [{\n                    token: \"comment\",\n                    regex: /#.*$/\n                }, {\n                    token: \"comment\",\n                    regex: /\\/\\*/,\n                    next: \"comment\"\n                }, {\n                    token: \"constant\",\n                    regex: \"<[^>]+>\"\n                }, {\n                    regex: \"(==|!=|<=?|>=?)\",\n                    token: [\"keyword.operator.comparison.nix\"]\n                }, {\n                    regex: \"((?:[+*/%-]|\\\\~)=)\",\n                    token: [\"keyword.operator.assignment.arithmetic.nix\"]\n                }, {\n                    regex: \"=\",\n                    token: \"keyword.operator.assignment.nix\"\n                }, {\n                    token: \"string\",\n                    regex: \"''\",\n                    next: \"qqdoc\"\n                }, {\n                    token: \"string\",\n                    regex: \"'\",\n                    next: \"qstring\"\n                }, {\n                    token: \"string\",\n                    regex: '\"',\n                    push: \"qqstring\"\n                }, {\n                    token: \"constant.numeric\", // hex\n                    regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n                }, {\n                    token: \"constant.numeric\", // float\n                    regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n                }, {\n                    token: keywordMapper,\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }, {\n                    regex: \"}\",\n                    token: function(val, start, stack) {\n                        return stack[1] && stack[1].charAt(0) == \"q\" ? \"constant.language.escape\" : \"text\";\n                    },\n                    next: \"pop\"\n                }],\n            \"comment\": [{\n                token: \"comment\", // closing comment\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }],\n            \"qqdoc\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: /\\$\\{/,\n                    push: \"start\"\n                }, {\n                    token: \"string\",\n                    regex: \"''\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }],\n            \"qqstring\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: /\\$\\{/,\n                    push: \"start\"\n                }, {\n                    token: \"string\",\n                    regex: '\"',\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }],\n            \"qstring\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: /\\$\\{/,\n                    push: \"start\"\n                }, {\n                    token: \"string\",\n                    regex: \"'\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n        };\n\n        this.normalizeRules();\n    };\n\n    oop.inherits(NixHighlightRules, TextHighlightRules);\n\n    exports.NixHighlightRules = NixHighlightRules;\n});\n\nace.define(\"ace/mode/nix\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/nix_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar NixHighlightRules = require(\"./nix_highlight_rules\").NixHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    CMode.call(this);\n    this.HighlightRules = NixHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, CMode);\n\n(function() { \n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/nix\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-nsis.js",
    "content": "ace.define(\"ace/mode/nsis_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar NSISHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"keyword.compiler.nsis\",\n            regex: /^\\s*!(?:include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|pragma|finalize|getdllversion|gettlbversion|system|tempfile|warning|verbose|define|undef|insertmacro|macro|macroend|makensis|searchparse|searchreplace)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.command.nsis\",\n            regex: /^\\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEDllCharacteristics|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.control.nsis\",\n            regex: /^\\s*!(?:ifdef|ifndef|if|ifmacrodef|ifmacrondef|else|endif)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.plugin.nsis\",\n            regex: /^\\s*\\w+::\\w+/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.operator.comparison.nsis\",\n            regex: /[!<>]?=|<>|<|>/\n        }, {\n            token: \"support.function.nsis\",\n            regex: /(?:\\b|^\\s*)(?:Function|FunctionEnd|Section|SectionEnd|SectionGroup|SectionGroupEnd|PageEx|PageExEnd)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"support.library.nsis\",\n            regex: /\\${[\\w\\.:-]+}/\n        }, {\n            token: \"constant.nsis\",\n            regex: /\\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.library.nsis\",\n            regex: /\\${(?:AtLeastServicePack|AtLeastWin7|AtLeastWin8|AtLeastWin10|AtLeastWin95|AtLeastWin98|AtLeastWin2000|AtLeastWin2003|AtLeastWin2008|AtLeastWin2008R2|AtLeastWinME|AtLeastWinNT4|AtLeastWinVista|AtLeastWinXP|AtMostServicePack|AtMostWin7|AtMostWin8|AtMostWin10|AtMostWin95|AtMostWin98|AtMostWin2000|AtMostWin2003|AtMostWin2008|AtMostWin2008R2|AtMostWinME|AtMostWinNT4|AtMostWinVista|AtMostWinXP|IsDomainController|IsNT|IsServer|IsServicePack|IsWin7|IsWin8|IsWin10|IsWin95|IsWin98|IsWin2000|IsWin2003|IsWin2008|IsWin2008R2|IsWinME|IsWinNT4|IsWinVista|IsWinXP)}/\n        }, {\n            token: \"constant.language.boolean.true.nsis\",\n            regex: /\\b(?:true|on)\\b/\n        }, {\n            token: \"constant.language.boolean.false.nsis\",\n            regex: /\\b(?:false|off)\\b/\n        }, {\n            token: \"constant.language.option.nsis\",\n            regex: /(?:\\b|^\\s*)(?:(?:un\\.)?components|(?:un\\.)?custom|(?:un\\.)?directory|(?:un\\.)?instfiles|(?:un\\.)?license|uninstConfirm|admin|all|auto|both|bottom|bzip2|current|force|hide|highest|ifdiff|ifnewer|lastused|leave|left|listonly|lzma|nevershow|none|normal|notset|right|show|silent|silentlog|textonly|top|try|user|Win10|Win7|Win8|WinVista|zlib)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.language.slash-option.nsis\",\n            regex: /\\b\\/(?:a|BRANDING|CENTER|COMPONENTSONLYONCUSTOM|CUSTOMSTRING=|date|e|ENABLECANCEL|FILESONLY|file|FINAL|GLOBAL|gray|ifempty|ifndef|ignorecase|IMGID=|ITALIC|LANG=|NOCUSTOM|noerrors|NONFATAL|nonfatal|oname=|o|REBOOTOK|redef|RESIZETOFIT|r|SHORT|SILENT|SOLID|STRIKE|TRIM|UNDERLINE|utcdate|windows|x)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.numeric.nsis\",\n            regex: /\\b(?:0(?:x|X)[0-9a-fA-F]+|[0-9]+(?:\\.[0-9]+)?)\\b/\n        }, {\n            token: \"entity.name.function.nsis\",\n            regex: /\\$\\([\\w\\.:-]+\\)/\n        }, {\n            token: \"storage.type.function.nsis\",\n            regex: /\\$\\w+/\n        }, {\n            token: \"punctuation.definition.string.begin.nsis\",\n            regex: /`/,\n            push: [{\n                token: \"punctuation.definition.string.end.nsis\",\n                regex: /`/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.nsis\",\n                regex: /\\$\\\\./\n            }, {\n                defaultToken: \"string.quoted.back.nsis\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.nsis\",\n            regex: /\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.nsis\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.nsis\",\n                regex: /\\$\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.nsis\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.nsis\",\n            regex: /'/,\n            push: [{\n                token: \"punctuation.definition.string.end.nsis\",\n                regex: /'/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.nsis\",\n                regex: /\\$\\\\./\n            }, {\n                defaultToken: \"string.quoted.single.nsis\"\n            }]\n        }, {\n            token: [\n                \"punctuation.definition.comment.nsis\",\n                \"comment.line.nsis\"\n            ],\n            regex: /(;|#)(.*$)/\n        }, {\n            token: \"punctuation.definition.comment.nsis\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.nsis\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.nsis\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /(?:!include|!insertmacro)\\b/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nNSISHighlightRules.metaData = {\n    comment: \"\\n\\ttodo: - highlight functions\\n\\t\",\n    fileTypes: [\"nsi\", \"nsh\"],\n    name: \"NSIS\",\n    scopeName: \"source.nsis\"\n};\n\n\noop.inherits(NSISHighlightRules, TextHighlightRules);\n\nexports.NSISHighlightRules = NSISHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/nsis\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/nsis_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar NSISHighlightRules = require(\"./nsis_highlight_rules\").NSISHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = NSISHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = [\";\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/nsis\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-objectivec.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\nace.define(\"ace/mode/objectivec_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/c_cpp_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar C_Highlight_File = require(\"./c_cpp_highlight_rules\");\nvar CHighlightRules = C_Highlight_File.c_cppHighlightRules;\n\nvar ObjectiveCHighlightRules = function() {\n\n    var escapedConstRe = \"\\\\\\\\(?:[abefnrtv'\\\"?\\\\\\\\]|\" + \n                         \"[0-3]\\\\d{1,2}|\" +\n                         \"[4-7]\\\\d?|\" +\n                         \"222|\" +\n                         \"x[a-zA-Z0-9]+)\";\n\n    var specialVariables = [{\n            regex: \"\\\\b_cmd\\\\b\",\n            token: \"variable.other.selector.objc\"\n        }, {\n            regex: \"\\\\b(?:self|super)\\\\b\",\n            token: \"variable.language.objc\"\n        }\n    ];\n\n    var cObj = new CHighlightRules();\n    var cRules = cObj.getRules();\n\n    this.$rules = {\n    \"start\": [ \n        {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/.*$\"\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            next : \"comment\"\n        }, \n        {\n            token: [ \"storage.type.objc\", \"punctuation.definition.storage.type.objc\", \n                       \"entity.name.type.objc\", \"text\", \"entity.other.inherited-class.objc\"\n                     ],\n            regex: \"(@)(interface|protocol)(?!.+;)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*:\\\\s*)([A-Za-z]+)\"\n        },\n        {\n            token: [ \"storage.type.objc\" ],\n            regex: \"(@end)\"\n        },\n        {\n            token: [ \"storage.type.objc\", \"entity.name.type.objc\", \n                        \"entity.other.inherited-class.objc\"\n                     ],\n            regex: \"(@implementation)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*?::\\\\s*(?:[A-Za-z][A-Za-z0-9]*))?\"\n        },\n        {\n            token: \"string.begin.objc\",\n            regex: '@\"',\n            next: \"constant_NSString\"\n        },\n        {\n            token: \"storage.type.objc\",\n            regex: \"\\\\bid\\\\s*<\",\n            next: \"protocol_list\"\n        },\n        {\n            token: \"keyword.control.macro.objc\",\n            regex: \"\\\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\\\b\"\n        },\n        {\n            token: [\"punctuation.definition.keyword.objc\", \"keyword.control.exception.objc\"],\n            regex: \"(@)(try|catch|finally|throw)\\\\b\"\n        },\n        {\n            token: [\"punctuation.definition.keyword.objc\", \"keyword.other.objc\"],\n            regex: \"(@)(defs|encode)\\\\b\"\n        },\n        {\n            token: [\"storage.type.id.objc\", \"text\"],\n            regex: \"(\\\\bid\\\\b)(\\\\s|\\\\n)?\"\n        },\n        {\n            token: \"storage.type.objc\",\n            regex: \"\\\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\\\b\"\n        },\n        {\n            token: [ \"punctuation.definition.storage.type.objc\", \"storage.type.objc\"],\n            regex: \"(@)(class|protocol)\\\\b\"\n        },\n        {\n            token: [ \"punctuation.definition.storage.type.objc\", \"punctuation\"],\n            regex: \"(@selector)(\\\\s*\\\\()\",\n            next: \"selectors\"\n        },\n        {\n            token: [ \"punctuation.definition.storage.modifier.objc\", \"storage.modifier.objc\"],\n            regex: \"(@)(synchronized|public|private|protected|package)\\\\b\"\n        },\n        {\n            token: \"constant.language.objc\",\n            regex: \"\\\\bYES|NO|Nil|nil\\\\b\"\n        },\n        {\n            token:  \"support.variable.foundation\",\n            regex: \"\\\\bNSApp\\\\b\"\n        },\n        {\n            token: [ \"support.function.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.function.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.class.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.class.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.type.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.class.quartz\"],\n            regex: \"(?:\\\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.type.quartz\"],\n            regex: \"(?:\\\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.type.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.notification.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.notification.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\\\b)\"\n        },\n        {\n        token: \"support.function.C99.c\",\n        regex: C_Highlight_File.cFunctions\n        },\n        {\n            token : cObj.getKeywords(),\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        },\n        {\n            token: \"punctuation.section.scope.begin.objc\",\n            regex: \"\\\\[\",\n            next: \"bracketed_content\"\n        },\n        {\n            token: \"meta.function.objc\",\n            regex: \"^(?:-|\\\\+)\\\\s*\"\n        }\n    ],\n    \"constant_NSString\": [\n        {\n            token: \"constant.character.escape.objc\",\n            regex: escapedConstRe\n        },\n        {\n            token: \"invalid.illegal.unknown-escape.objc\",\n            regex: \"\\\\\\\\.\"\n        },\n        {\n            token: \"string\",\n            regex: '[^\"\\\\\\\\]+'\n        },\n        {\n            token: \"punctuation.definition.string.end\",\n            regex: \"\\\"\",\n            next: \"start\"\n        }\n    ],\n    \"protocol_list\": [\n        {\n            token: \"punctuation.section.scope.end.objc\",\n            regex: \">\",\n            next: \"start\"\n        },\n        {\n            token: \"support.other.protocol.objc\",\n            regex: \"\\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\\b\"\n        }\n    ],\n    \"selectors\": [\n        {\n            token: \"support.function.any-method.name-of-parameter.objc\",\n            regex: \"\\\\b(?:[a-zA-Z_:][\\\\w]*)+\"\n        },\n        {\n            token: \"punctuation\",\n            regex: \"\\\\)\",\n            next: \"start\"\n        }\n    ],\n    \"bracketed_content\": [\n        {\n            token: \"punctuation.section.scope.end.objc\",\n            regex: \"]\",\n            next: \"start\"\n        },\n        {\n            token: [\"support.function.any-method.objc\"],\n            regex: \"(?:predicateWithFormat:| NSPredicate predicateWithFormat:)\",\n            next: \"start\"\n        },\n        {\n            token: \"support.function.any-method.objc\",\n            regex: \"\\\\w+(?::|(?=]))\",\n            next: \"start\"\n        }\n    ],\n    \"bracketed_strings\": [\n        {\n            token: \"punctuation.section.scope.end.objc\",\n            regex: \"]\",\n            next: \"start\"\n        },\n        {\n            token: \"keyword.operator.logical.predicate.cocoa\",\n            regex: \"\\\\b(?:AND|OR|NOT|IN)\\\\b\"\n        },\n        {\n            token: [\"invalid.illegal.unknown-method.objc\", \"punctuation.separator.arguments.objc\"],\n            regex: \"\\\\b(\\\\w+)(:)\"\n        },\n        {\n            regex: \"\\\\b(?:ALL|ANY|SOME|NONE)\\\\b\",\n            token: \"constant.language.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\\\b\",\n            token: \"constant.language.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\\\b\",\n            token: \"keyword.operator.comparison.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\bC(?:ASEINSENSITIVE|I)\\\\b\",\n            token: \"keyword.other.modifier.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\\\b\",\n            token: \"keyword.other.predicate.cocoa\"\n        },\n        {\n            regex: escapedConstRe,\n            token: \"constant.character.escape.objc\"\n        },\n        {\n            regex: \"\\\\\\\\.\",\n            token: \"invalid.illegal.unknown-escape.objc\"\n        },\n        {\n            token: \"string\",\n            regex: '[^\"\\\\\\\\]'\n        },\n        {\n            token: \"punctuation.definition.string.end.objc\",\n            regex: \"\\\"\",\n            next: \"predicates\"\n        }\n    ],\n    \"comment\" : [\n        {\n            token : \"comment\", // closing comment\n            regex : \".*?\\\\*\\\\/\",\n            next : \"start\"\n        }, {\n            defaultToken : \"comment\"\n        }\n    ],\n    \"methods\" : [\n        {\n            token : \"meta.function.objc\",\n            regex : \"(?=\\\\{|#)|;\",\n            next : \"start\"\n        }\n    ]\n};\n    for (var r in cRules) {\n        if (this.$rules[r]) {\n            if (this.$rules[r].push)\n                this.$rules[r].push.apply(this.$rules[r], cRules[r]);\n        } else {\n            this.$rules[r] = cRules[r];\n        }\n    }\n    \n    this.$rules.bracketed_content = this.$rules.bracketed_content.concat(\n        this.$rules.start, specialVariables\n    );\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(ObjectiveCHighlightRules, CHighlightRules);\n\nexports.ObjectiveCHighlightRules = ObjectiveCHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/objectivec\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/objectivec_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ObjectiveCHighlightRules = require(\"./objectivec_highlight_rules\").ObjectiveCHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ObjectiveCHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/objectivec\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-ocaml.js",
    "content": "ace.define(\"ace/mode/ocaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar OcamlHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|begin|class|constraint|do|done|downto|else|end|\"  +\n        \"exception|external|for|fun|function|functor|if|in|include|\"     +\n        \"inherit|initializer|lazy|let|match|method|module|mutable|new|\"  +\n        \"object|of|open|or|private|rec|sig|struct|then|to|try|type|val|\" +\n        \"virtual|when|while|with\"\n    );\n\n    var builtinConstants = (\"true|false\");\n\n    var builtinFunctions = (\n        \"abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|\" +\n        \"add_available_units|add_big_int|add_buffer|add_channel|add_char|\" +\n        \"add_initializer|add_int_big_int|add_interfaces|add_num|add_string|\" +\n        \"add_substitute|add_substring|alarm|allocated_bytes|allow_only|\" +\n        \"allow_unsafe_modules|always|append|appname_get|appname_set|\" +\n        \"approx_num_exp|approx_num_fix|arg|argv|arith_status|array|\" +\n        \"array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|\" +\n        \"assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|\" +\n        \"beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|\" +\n        \"bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|\" +\n        \"bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|\" +\n        \"bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|\" +\n        \"cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|\" +\n        \"chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|\" +\n        \"chown|chr|chroot|classify_float|clear|clear_available_units|\" +\n        \"clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|\" +\n        \"close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|\" +\n        \"close_out|close_out_noerr|close_process|close_process|\" +\n        \"close_process_full|close_process_in|close_process_out|close_subwindow|\" +\n        \"close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|\" +\n        \"combine|combine|command|compact|compare|compare_big_int|compare_num|\" +\n        \"complex32|complex64|concat|conj|connect|contains|contains_from|contents|\" +\n        \"copy|cos|cosh|count|count|counters|create|create_alarm|create_image|\" +\n        \"create_matrix|create_matrix|create_matrix|create_object|\" +\n        \"create_object_and_run_initializers|create_object_opt|create_process|\" +\n        \"create_process|create_process_env|create_process_env|create_table|\" +\n        \"current|current_dir_name|current_point|current_x|current_y|curveto|\" +\n        \"custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|\" +\n        \"delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|\" +\n        \"dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|\" +\n        \"double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|\" +\n        \"draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|\" +\n        \"dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|\" +\n        \"environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|\" +\n        \"error_message|escaped|establish_server|executable_name|execv|execve|execvp|\" +\n        \"execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|\" +\n        \"file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|\" +\n        \"filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|\" +\n        \"float|float32|float64|float_of_big_int|float_of_bits|float_of_int|\" +\n        \"float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|\" +\n        \"flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|\" +\n        \"for_all|for_all2|force|force_newline|force_val|foreground|fork|\" +\n        \"format_of_string|formatter_of_buffer|formatter_of_out_channel|\" +\n        \"fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|\" +\n        \"from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|\" +\n        \"full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|\" +\n        \"genarray_of_array1|genarray_of_array2|genarray_of_array3|get|\" +\n        \"get_all_formatter_output_functions|get_approx_printing|get_copy|\" +\n        \"get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|\" +\n        \"get_formatter_output_functions|get_formatter_tag_functions|get_image|\" +\n        \"get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|\" +\n        \"get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|\" +\n        \"get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|\" +\n        \"getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|\" +\n        \"getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|\" +\n        \"getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|\" +\n        \"getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|\" +\n        \"getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|\" +\n        \"global_replace|global_substitute|gmtime|green|grid|group_beginning|\" +\n        \"group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|\" +\n        \"hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|\" +\n        \"incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|\" +\n        \"infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|\" +\n        \"input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|\" +\n        \"int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|\" +\n        \"int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|\" +\n        \"is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|\" +\n        \"is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|\" +\n        \"kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|\" +\n        \"lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|\" +\n        \"lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|\" +\n        \"loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|\" +\n        \"logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|\" +\n        \"lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|\" +\n        \"make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|\" +\n        \"marshal|match_beginning|match_end|matched_group|matched_string|max|\" +\n        \"max_array_length|max_big_int|max_elt|max_float|max_int|max_num|\" +\n        \"max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|\" +\n        \"min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|\" +\n        \"minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|\" +\n        \"mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|\" +\n        \"nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|\" +\n        \"new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|\" +\n        \"nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|\" +\n        \"num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|\" +\n        \"of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|\" +\n        \"of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|\" +\n        \"open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|\" +\n        \"open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|\" +\n        \"open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|\" +\n        \"open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|\" +\n        \"out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|\" +\n        \"output_char|output_string|output_value|over_max_boxes|pack|params|\" +\n        \"parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|\" +\n        \"place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|\" +\n        \"power_big_int_positive_big_int|power_big_int_positive_int|\" +\n        \"power_int_positive_big_int|power_int_positive_int|power_num|\" +\n        \"pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|\" +\n        \"pp_get_all_formatter_output_functions|pp_get_ellipsis_text|\" +\n        \"pp_get_formatter_output_functions|pp_get_formatter_tag_functions|\" +\n        \"pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|\" +\n        \"pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|\" +\n        \"pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|\" +\n        \"pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|\" +\n        \"pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|\" +\n        \"pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|\" +\n        \"pp_set_all_formatter_output_functions|pp_set_ellipsis_text|\" +\n        \"pp_set_formatter_out_channel|pp_set_formatter_output_functions|\" +\n        \"pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|\" +\n        \"pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|\" +\n        \"pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|\" +\n        \"prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|\" +\n        \"print_bool|print_break|print_char|print_cut|print_endline|print_float|\" +\n        \"print_flush|print_if_newline|print_int|print_newline|print_space|\" +\n        \"print_stat|print_string|print_tab|print_tbreak|printf|prohibit|\" +\n        \"public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|\" +\n        \"raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|\" +\n        \"read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|\" +\n        \"recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|\" +\n        \"regexp_string_case_fold|register|register_exception|rem|remember_mode|\" +\n        \"remove|remove_assoc|remove_assq|rename|replace|replace_first|\" +\n        \"replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|\" +\n        \"rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|\" +\n        \"rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|\" +\n        \"run_initializers|run_initializers_opt|scanf|search_backward|\" +\n        \"search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|\" +\n        \"set_all_formatter_output_functions|set_approx_printing|\" +\n        \"set_binary_mode_in|set_binary_mode_out|set_close_on_exec|\" +\n        \"set_close_on_exec|set_color|set_ellipsis_text|\" +\n        \"set_error_when_null_denominator|set_field|set_floating_precision|\" +\n        \"set_font|set_formatter_out_channel|set_formatter_output_functions|\" +\n        \"set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|\" +\n        \"set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|\" +\n        \"set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|\" +\n        \"set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|\" +\n        \"set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|\" +\n        \"setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|\" +\n        \"setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|\" +\n        \"shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|\" +\n        \"shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|\" +\n        \"shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|\" +\n        \"sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|\" +\n        \"sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|\" +\n        \"sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|\" +\n        \"sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|\" +\n        \"sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|\" +\n        \"slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|\" +\n        \"slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|\" +\n        \"split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|\" +\n        \"square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|\" +\n        \"stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|\" +\n        \"stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|\" +\n        \"str_formatter|string|string_after|string_before|string_match|\" +\n        \"string_of_big_int|string_of_bool|string_of_float|string_of_format|\" +\n        \"string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|\" +\n        \"string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|\" +\n        \"sub_right|subset|subset|substitute_first|substring|succ|succ|\" +\n        \"succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|\" +\n        \"symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|\" +\n        \"tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|\" +\n        \"tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|\" +\n        \"temp_file|text_size|time|time|time|timed_read|timed_write|times|times|\" +\n        \"tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|\" +\n        \"to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|\" +\n        \"to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|\" +\n        \"truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|\" +\n        \"uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|\" +\n        \"unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|\" +\n        \"update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|\" +\n        \"wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|\" +\n        \"wait_timed_read|wait_timed_write|wait_write|waitpid|white|\" +\n        \"widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|\" +\n\n        \"Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|\" +\n        \"Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|\" +\n        \"Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|\" +\n        \"Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|\" +\n        \"MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|\" +\n        \"Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|\" +\n        \"Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : '\\\\(\\\\*.*?\\\\*\\\\)\\\\s*?$'\n            },\n            {\n                token : \"comment\",\n                regex : '\\\\(\\\\*.*',\n                next : \"comment\"\n            },\n            {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            },\n            {\n                token : \"string\", // single char\n                regex : \"'.'\"\n            },\n            {\n                token : \"string\", // \" string\n                regex : '\"',\n                next  : \"qstring\"\n            },\n            {\n                token : \"constant.numeric\", // imaginary\n                regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            },\n            {\n                token : \"constant.numeric\", // float\n                regex : floatNumber\n            },\n            {\n                token : \"constant.numeric\", // integer\n                regex : integer + \"\\\\b\"\n            },\n            {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token : \"keyword.operator\",\n                regex : \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=\"\n            },\n            {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            },\n            {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            },\n            {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\)\",\n                next : \"start\"\n            },\n            {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : '\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(OcamlHighlightRules, TextHighlightRules);\n\nexports.OcamlHighlightRules = OcamlHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/ocaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ocaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar OcamlHighlightRules = require(\"./ocaml_highlight_rules\").OcamlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = OcamlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n    \n    this.$outdent   = new MatchingBraceOutdent();\n};\noop.inherits(Mode, TextMode);\n\nvar indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|with))\\s*$/;\n\n(function() {\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(\\*(.*)\\*\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(*\" + line + \"*)\");\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n\n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/ocaml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-pascal.js",
    "content": "ace.define(\"ace/mode/pascal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PascalHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { caseInsensitive: true,\n           token: 'keyword.control.pascal',\n           regex: '\\\\b(?:(absolute|abstract|all|and|and_then|array|as|asm|attribute|begin|bindable|case|class|const|constructor|destructor|div|do|do|else|end|except|export|exports|external|far|file|finalization|finally|for|forward|goto|if|implementation|import|in|inherited|initialization|interface|interrupt|is|label|library|mod|module|name|near|nil|not|object|of|only|operator|or|or_else|otherwise|packed|pow|private|program|property|protected|public|published|qualified|record|repeat|resident|restricted|segment|set|shl|shr|then|to|try|type|unit|until|uses|value|var|view|virtual|while|with|xor))\\\\b' },\n         { caseInsensitive: true,           \n           token: \n            [ 'variable.pascal', \"text\",\n              'storage.type.prototype.pascal',\n              'entity.name.function.prototype.pascal' ],\n           regex: '\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?(?=(?:\\\\(.*?\\\\))?;\\\\s*(?:attribute|forward|external))' },\n         { caseInsensitive: true,\n           token: \n            [ 'variable.pascal', \"text\",\n              'storage.type.function.pascal',\n              'entity.name.function.pascal' ],\n           regex: '\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?' },\n         { token: 'constant.numeric.pascal',\n           regex: '\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b' },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '--.*$',\n           push_: \n            [ { token: 'comment.line.double-dash.pascal.one',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-dash.pascal.one' } ] },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '//.*$',\n           push_: \n            [ { token: 'comment.line.double-slash.pascal.two',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-slash.pascal.two' } ] },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '\\\\(\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.pascal',\n                regex: '\\\\*\\\\)',\n                next: 'pop' },\n              { defaultToken: 'comment.block.pascal.one' } ] },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.definition.comment.pascal',\n                regex: '\\\\}',\n                next: 'pop' },\n              { defaultToken: 'comment.block.pascal.two' } ] },\n         { token: 'punctuation.definition.string.begin.pascal',\n           regex: '\"',\n           push: \n            [ { token: 'constant.character.escape.pascal', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.pascal',\n                regex: '\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.double.pascal' } ]\n            },\n         { token: 'punctuation.definition.string.begin.pascal',\n           regex: '\\'',\n           push: \n            [ { token: 'constant.character.escape.apostrophe.pascal',\n                regex: '\\'\\'' },\n              { token: 'punctuation.definition.string.end.pascal',\n                regex: '\\'',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.single.pascal' } ] },\n          { token: 'keyword.operator',\n           regex: '[+\\\\-;,/*%]|:=|=' } ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(PascalHighlightRules, TextHighlightRules);\n\nexports.PascalHighlightRules = PascalHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/pascal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pascal_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PascalHighlightRules = require(\"./pascal_highlight_rules\").PascalHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PascalHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = [\"--\", \"//\"];\n    this.blockComment = [\n        {start: \"(*\", end: \"*)\"},\n        {start: \"{\", end: \"}\"}\n    ];\n    \n    this.$id = \"ace/mode/pascal\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-perl.js",
    "content": "ace.define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PerlHighlightRules = function() {\n\n    var keywords = (\n        \"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|\" +\n         \"no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\"\n    );\n\n    var buildinConstants = (\"ARGV|ENV|INC|SIG\");\n\n    var builtinFunctions = (\n        \"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|\" +\n         \"gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|\" +\n         \"getpeername|setpriority|getprotoent|setprotoent|getpriority|\" +\n         \"endprotoent|getservent|setservent|endservent|sethostent|socketpair|\" +\n         \"getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|\" +\n         \"localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|\" +\n         \"closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|\" +\n         \"shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|\" +\n         \"dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|\" +\n         \"setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|\" +\n         \"lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|\" +\n         \"waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|\" +\n         \"chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|\" +\n         \"unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|\" +\n         \"length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|\" +\n         \"undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|\" +\n         \"sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|\" +\n         \"BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|\" +\n         \"join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|\" +\n         \"keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|\" +\n         \"eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|\" +\n         \"map|die|uc|lc|do\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment.doc\",\n                regex : \"^=(?:begin|item)\\\\b\",\n                next : \"block_comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0x[0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"block_comment\": [\n            {\n                token: \"comment.doc\", \n                regex: \"^=cut\\\\b\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment.doc\"\n            }\n        ]\n    };\n};\n\noop.inherits(PerlHighlightRules, TextHighlightRules);\n\nexports.PerlHighlightRules = PerlHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/perl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PerlHighlightRules = require(\"./perl_highlight_rules\").PerlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PerlHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode({start: \"^=(begin|item)\\\\b\", end: \"^=(cut)\\\\b\"});\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n    this.blockComment = [\n        {start: \"=begin\", end: \"=cut\", lineStartOnly: true},\n        {start: \"=item\", end: \"=cut\", lineStartOnly: true}\n    ];\n\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/perl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-perl6.js",
    "content": "ace.define(\"ace/mode/perl6_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar Perl6HighlightRules = function() {\n\n    var keywords = (\n        \"my|our|class|role|grammar|is|does|sub|method|submethod|try|\" +\n        \"default|when|if|elsif|else|unless|with|orwith|without|for|given|proceed|\" +\n        \"succeed|loop|while|until|repeat|module|use|need|import|require|unit|\" +\n        \"constant|enum|multi|return|has|token|rule|make|made|proto|state|augment|\" +\n        \"but|anon|supersede|let|subset|gather|returns|return-rw|temp|\" +\n        \"BEGIN|CHECK|INIT|END|CLOSE|ENTER|LEAVE|KEEP|UNDO|PRE|POST|FIRST|NEXT|LAST|CATCH|CONTROL|QUIT|DOC\"\n    );\n\n    var types = (\n        \"Any|Array|Associative|AST|atomicint|Attribute|Backtrace|Backtrace::Frame|\" +\n        \"Bag|Baggy|BagHash|Blob|Block|Bool|Buf|Callable|CallFrame|Cancellation|\" +\n        \"Capture|Channel|Code|compiler|Complex|ComplexStr|Cool|CurrentThreadScheduler|\" +\n        \"Cursor|Date|Dateish|DateTime|Distro|Duration|Encoding|Exception|Failure|\"+\n        \"FatRat|Grammar|Hash|HyperWhatever|Instant|Int|IntStr|IO|IO::ArgFiles|\"+\n        \"IO::CatHandle|IO::Handle|IO::Notification|IO::Path|IO::Path::Cygwin|\"+\n        \"IO::Path::QNX|IO::Path::Unix|IO::Path::Win32|IO::Pipe|IO::Socket|\"+\n        \"IO::Socket::Async|IO::Socket::INET|IO::Spec|IO::Spec::Cygwin|IO::Spec::QNX|\"+\n        \"IO::Spec::Unix|IO::Spec::Win32|IO::Special|Iterable|Iterator|Junction|Kernel|\"+\n        \"Label|List|Lock|Lock::Async|Macro|Map|Match|Metamodel::AttributeContainer|\"+\n        \"Metamodel::C3MRO|Metamodel::ClassHOW|Metamodel::EnumHOW|Metamodel::Finalization|\"+\n        \"Metamodel::MethodContainer|Metamodel::MROBasedMethodDispatch|Metamodel::MultipleInheritance|\"+\n        \"Metamodel::Naming|Metamodel::Primitives|Metamodel::PrivateMethodContainer|\"+\n        \"Metamodel::RoleContainer|Metamodel::Trusting|Method|Mix|MixHash|Mixy|Mu|\"+\n        \"NFC|NFD|NFKC|NFKD|Nil|Num|Numeric|NumStr|ObjAt|Order|Pair|Parameter|Perl|\"+\n        \"Pod::Block|Pod::Block::Code|Pod::Block::Comment|Pod::Block::Declarator|\"+\n        \"Pod::Block::Named|Pod::Block::Para|Pod::Block::Table|Pod::Heading|Pod::Item|\"+\n        \"Positional|PositionalBindFailover|Proc|Proc::Async|Promise|Proxy|PseudoStash|\"+\n        \"QuantHash|Range|Rat|Rational|RatStr|Real|Regex|Routine|Scalar|Scheduler|\"+\n        \"Semaphore|Seq|Set|SetHash|Setty|Signature|Slip|Stash|Str|StrDistance|Stringy|\"+\n        \"Sub|Submethod|Supplier|Supplier::Preserving|Supply|Systemic|Tap|Telemetry|\"+\n        \"Telemetry::Instrument::Thread|Telemetry::Instrument::Usage|Telemetry::Period|\"+\n        \"Telemetry::Sampler|Thread|ThreadPoolScheduler|UInt|Uni|utf8|Variable|Version|\"+\n        \"VM|Whatever|WhateverCode|WrapHandle|int|uint|num|str|\"+\n        \"int8|int16|int32|int64|uint8|uint16|uint32|uint64|long|longlong|num32|num64|size_t|bool|CArray|Pointer|\"+\n\t\t\"Backtrace|Backtrace::Frame|Exception|Failure|X::AdHoc|X::Anon::Augment|X::Anon::Multi|\"+\n\t\t\"X::Assignment::RO|X::Attribute::NoPackage|X::Attribute::Package|X::Attribute::Undeclared|\"+\n\t\t\"X::Augment::NoSuchType|X::Bind|X::Bind::NativeType|X::Bind::Slice|X::Caller::NotDynamic|\"+\n\t\t\"X::Channel::ReceiveOnClosed|X::Channel::SendOnClosed|X::Comp|X::Composition::NotComposable|\"+\n\t\t\"X::Constructor::Positional|X::ControlFlow|X::ControlFlow::Return|X::DateTime::TimezoneClash|\"+\n\t\t\"X::Declaration::Scope|X::Declaration::Scope::Multi|X::Does::TypeObject|X::Eval::NoSuchLang|\"+\n\t\t\"X::Export::NameClash|X::IO|X::IO::Chdir|X::IO::Chmod|X::IO::Copy|X::IO::Cwd|X::IO::Dir|\"+\n\t\t\"X::IO::DoesNotExist|X::IO::Link|X::IO::Mkdir|X::IO::Move|X::IO::Rename|X::IO::Rmdir|X::IO::Symlink|\"+\n\t\t\"X::IO::Unlink|X::Inheritance::NotComposed|X::Inheritance::Unsupported|X::Method::InvalidQualifier|\"+\n\t\t\"X::Method::NotFound|X::Method::Private::Permission|X::Method::Private::Unqualified|\"+\n\t\t\"X::Mixin::NotComposable|X::NYI|X::NoDispatcher|X::Numeric::Real|X::OS|X::Obsolete|X::OutOfRange|\"+\n\t\t\"X::Package::Stubbed|X::Parameter::Default|X::Parameter::MultipleTypeConstraints|\"+\n\t\t\"X::Parameter::Placeholder|X::Parameter::Twigil|X::Parameter::WrongOrder|X::Phaser::Multiple|\"+\n\t\t\"X::Phaser::PrePost|X::Placeholder::Block|X::Placeholder::Mainline|X::Pod|X::Proc::Async|\"+\n\t\t\"X::Proc::Async::AlreadyStarted|X::Proc::Async::CharsOrBytes|X::Proc::Async::MustBeStarted|\"+\n\t\t\"X::Proc::Async::OpenForWriting|X::Proc::Async::TapBeforeSpawn|X::Proc::Unsuccessful|\"+\n\t\t\"X::Promise::CauseOnlyValidOnBroken|X::Promise::Vowed|X::Redeclaration|X::Role::Initialization|\"+\n\t\t\"X::Seq::Consumed|X::Sequence::Deduction|X::Signature::NameClash|X::Signature::Placeholder|\"+\n\t\t\"X::Str::Numeric|X::StubCode|X::Syntax|X::Syntax::Augment::WithoutMonkeyTyping|\"+\n\t\t\"X::Syntax::Comment::Embedded|X::Syntax::Confused|X::Syntax::InfixInTermPosition|\"+\n\t\t\"X::Syntax::Malformed|X::Syntax::Missing|X::Syntax::NegatedPair|X::Syntax::NoSelf|\"+\n\t\t\"X::Syntax::Number::RadixOutOfRange|X::Syntax::P5|X::Syntax::Regex::Adverb|\"+\n\t\t\"X::Syntax::Regex::SolitaryQuantifier|X::Syntax::Reserved|X::Syntax::Self::WithoutObject|\"+\n\t\t\"X::Syntax::Signature::InvocantMarker|X::Syntax::Term::MissingInitializer|X::Syntax::UnlessElse|\"+\n\t\t\"X::Syntax::Variable::Match|X::Syntax::Variable::Numeric|X::Syntax::Variable::Twigil|X::Temporal|\"+\n\t\t\"X::Temporal::InvalidFormat|X::TypeCheck|X::TypeCheck::Assignment|X::TypeCheck::Binding|\"+\n\t\t\"X::TypeCheck::Return|X::TypeCheck::Splice|X::Undeclared\"\n\t\t);\n\n    var builtinFunctions = (\n        \"abs|abs2rel|absolute|accept|ACCEPTS|accessed|acos|acosec|acosech|acosh|\"+\n        \"acotan|acotanh|acquire|act|action|actions|add|add_attribute|add_enum_value|\"+\n        \"add_fallback|add_method|add_parent|add_private_method|add_role|add_trustee|\"+\n        \"adverb|after|all|allocate|allof|allowed|alternative-names|annotations|antipair|\"+\n        \"antipairs|any|anyof|app_lifetime|append|arch|archname|args|arity|asec|asech|\"+\n        \"asin|asinh|ASSIGN-KEY|ASSIGN-POS|assuming|ast|at|atan|atan2|atanh|AT-KEY|\"+\n        \"atomic-assign|atomic-dec-fetch|atomic-fetch|atomic-fetch-add|atomic-fetch-dec|\"+\n        \"atomic-fetch-inc|atomic-fetch-sub|atomic-inc-fetch|AT-POS|attributes|auth|await|\"+\n        \"backtrace|Bag|BagHash|base|basename|base-repeating|batch|BIND-KEY|BIND-POS|\"+\n        \"bind-stderr|bind-stdin|bind-stdout|bind-udp|bits|bless|block|bool-only|\"+\n        \"bounds|break|Bridge|broken|BUILD|build-date|bytes|cache|callframe|calling-package|\"+\n        \"CALL-ME|callsame|callwith|can|cancel|candidates|cando|canonpath|caps|caption|\"+\n        \"Capture|cas|catdir|categorize|categorize-list|catfile|catpath|cause|ceiling|\"+\n        \"cglobal|changed|Channel|chars|chdir|child|child-name|child-typename|chmod|chomp|\"+\n        \"chop|chr|chrs|chunks|cis|classify|classify-list|cleanup|clone|close|closed|\"+\n        \"close-stdin|code|codes|collate|column|comb|combinations|command|comment|\"+\n        \"compiler|Complex|compose|compose_type|composer|condition|config|configure_destroy|\"+\n        \"configure_type_checking|conj|connect|constraints|construct|contains|contents|copy|\"+\n        \"cos|cosec|cosech|cosh|cotan|cotanh|count|count-only|cpu-cores|cpu-usage|CREATE|\"+\n        \"create_type|cross|cue|curdir|curupdir|d|Date|DateTime|day|daycount|day-of-month|\"+\n        \"day-of-week|day-of-year|days-in-month|declaration|decode|decoder|deepmap|\"+\n        \"defined|DEFINITE|delayed|DELETE-KEY|DELETE-POS|denominator|desc|DESTROY|destroyers|\"+\n        \"devnull|did-you-mean|die|dir|dirname|dir-sep|DISTROnames|do|done|duckmap|dynamic|\"+\n        \"e|eager|earlier|elems|emit|enclosing|encode|encoder|encoding|end|ends-with|enum_from_value|\"+\n        \"enum_value_list|enum_values|enums|eof|EVAL|EVALFILE|exception|excludes-max|excludes-min|\"+\n        \"EXISTS-KEY|EXISTS-POS|exit|exitcode|exp|expected|explicitly-manage|expmod|extension|f|\"+\n        \"fail|fc|feature|file|filename|find_method|find_method_qualified|finish|first|flat|flatmap|\"+\n        \"flip|floor|flush|fmt|format|formatter|freeze|from|from-list|from-loop|from-posix|full|\"+\n        \"full-barrier|get|get_value|getc|gist|got|grab|grabpairs|grep|handle|handled|handles|\"+\n        \"hardware|has_accessor|head|headers|hh-mm-ss|hidden|hides|hour|how|hyper|id|illegal|\"+\n        \"im|in|indent|index|indices|indir|infinite|infix|install_method_cache|\"+\n        \"Instant|instead|int-bounds|interval|in-timezone|invalid-str|invert|invocant|IO|\"+\n        \"IO::Notification.watch-path|is_trusted|is_type|isa|is-absolute|is-hidden|is-initial-thread|\"+\n        \"is-int|is-lazy|is-leap-year|isNaN|is-prime|is-relative|is-routine|is-setting|is-win|item|\"+\n        \"iterator|join|keep|kept|KERNELnames|key|keyof|keys|kill|kv|kxxv|l|lang|last|lastcall|later|\"+\n        \"lazy|lc|leading|level|line|lines|link|listen|live|local|lock|log|log10|lookup|lsb|\"+\n        \"MAIN|match|max|maxpairs|merge|message|method_table|methods|migrate|min|minmax|\"+\n        \"minpairs|minute|misplaced|Mix|MixHash|mkdir|mode|modified|month|move|mro|msb|multiness|\"+\n        \"name|named|named_names|narrow|nativecast|native-descriptor|nativesizeof|new|new_type|\"+\n        \"new-from-daycount|new-from-pairs|next|nextcallee|next-handle|nextsame|nextwith|NFC|NFD|\"+\n        \"NFKC|NFKD|nl-in|nl-out|nodemap|none|norm|not|note|now|nude|numerator|Numeric|of|\"+\n        \"offset|offset-in-hours|offset-in-minutes|old|on-close|one|on-switch|open|opened|\"+\n        \"operation|optional|ord|ords|orig|os-error|osname|out-buffer|pack|package|package-kind|\"+\n        \"package-name|packages|pair|pairs|pairup|parameter|params|parent|parent-name|parents|parse|\"+\n        \"parse-base|parsefile|parse-names|parts|path|path-sep|payload|peer-host|peer-port|periods|\"+\n        \"perl|permutations|phaser|pick|pickpairs|pid|placeholder|plus|polar|poll|polymod|pop|pos|\"+\n        \"positional|posix|postfix|postmatch|precomp-ext|precomp-target|pred|prefix|prematch|prepend|\"+\n        \"print|printf|print-nl|print-to|private|private_method_table|proc|produce|Promise|prompt|\"+\n        \"protect|pull-one|push|push-all|push-at-least|push-exactly|push-until-lazy|put|\"+\n        \"qualifier-type|quit|r|race|radix|rand|range|raw|re|read|readchars|readonly|\"+\n        \"ready|Real|reallocate|reals|reason|rebless|receive|recv|redispatcher|redo|reduce|\"+\n        \"rel2abs|relative|release|rename|repeated|replacement|report|reserved|resolve|\"+\n        \"restore|result|resume|rethrow|reverse|right|rindex|rmdir|roles_to_compose|\"+\n        \"rolish|roll|rootdir|roots|rotate|rotor|round|roundrobin|routine-type|run|rwx|s|\"+\n        \"samecase|samemark|samewith|say|schedule-on|scheduler|scope|sec|sech|second|seek|\"+\n        \"self|send|Set|set_hidden|set_name|set_package|set_rw|set_value|SetHash|\"+\n        \"set-instruments|setup_finalization|shape|share|shell|shift|sibling|sigil|\"+\n        \"sign|signal|signals|signature|sin|sinh|sink|sink-all|skip|skip-at-least|\"+\n        \"skip-at-least-pull-one|skip-one|sleep|sleep-timer|sleep-until|Slip|slurp|\"+\n        \"slurp-rest|slurpy|snap|snapper|so|socket-host|socket-port|sort|source|\"+\n        \"source-package|spawn|SPEC|splice|split|splitdir|splitpath|sprintf|spurt|\"+\n        \"sqrt|squish|srand|stable|start|started|starts-with|status|stderr|stdout|\"+\n        \"sub_signature|subbuf|subbuf-rw|subname|subparse|subst|subst-mutate|\"+\n        \"substr|substr-eq|substr-rw|succ|sum|Supply|symlink|t|tail|take|take-rw|\"+\n        \"tan|tanh|tap|target|target-name|tc|tclc|tell|then|throttle|throw|timezone|\"+\n        \"tmpdir|to|today|toggle|to-posix|total|trailing|trans|tree|trim|trim-leading|\"+\n        \"trim-trailing|truncate|truncated-to|trusts|try_acquire|trying|twigil|type|\"+\n        \"type_captures|typename|uc|udp|uncaught_handler|unimatch|uniname|uninames|\"+\n        \"uniparse|uniprop|uniprops|unique|unival|univals|unlink|unlock|unpack|unpolar|\"+\n        \"unshift|unwrap|updir|USAGE|utc|val|value|values|VAR|variable|verbose-config|\"+\n        \"version|VMnames|volume|vow|w|wait|warn|watch|watch-path|week|weekday-of-month|\"+\n        \"week-number|week-year|WHAT|WHERE|WHEREFORE|WHICH|WHO|whole-second|WHY|\"+\n        \"wordcase|words|workaround|wrap|write|write-to|yada|year|yield|yyyy-mm-dd|\"+\n        \"z|zip|zip-latest|\"+\n        \"plan|done-testing|bail-out|todo|skip|skip-rest|diag|subtest|pass|flunk|ok|\"+\n        \"nok|cmp-ok|is-deeply|isnt|is-approx|like|unlike|use-ok|isa-ok|does-ok|\"+\n        \"can-ok|dies-ok|lives-ok|eval-dies-ok|eval-lives-ok|throws-like|fails-like|\"+\n\t\t\"rw|required|native|repr|export|symbol\"\n\t);\n\tvar constants_ascii = (\"pi|Inf|tau|time\");\n\t\n\tvar ops_txt = (\"eq|ne|gt|lt|le|ge|div|gcd|lcm|leg|cmp|ff|fff|\"+\n\t\t\"x|before|after|Z|X|and|or|andthen|notandthen|orelse|xor\"\n\t);\n\n\tvar keywordMapper = this.createKeywordMapper({\n\t\t\"keyword\": keywords,\n\t\t\"storage.type\" : types,\n\t\t\"constant.language\": constants_ascii,\n\t\t\"support.function\": builtinFunctions,\n\t\t\"keyword.operator\": ops_txt\n\t}, \"identifier\");\n\t\n\tvar moduleName = \"[a-zA-Z_][a-zA-Z_0-9:-]*\\\\b\";\n\tvar hex = {\ttoken : \"constant.numeric\", regex : \"0x[0-9a-fA-F]+\\\\b\" };\n\tvar num_rat = { token : \"constant.numeric\", regex : \"[+-.]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\" };\n\tvar num_with_ = { token : \"constant.numeric\", regex : \"(?:\\\\d+_?\\\\d+)+\\\\b\" };\n\tvar complex_numbers = { token : \"constant.numeric\", regex : \"\\\\+?\\\\d+i\\\\b\" };\n\tvar booleans = { token : \"constant.language.boolean\", regex : \"(?:True|False)\\\\b\" };\n\tvar versions = { token : \"constant.other\", regex : \"v[0-9](?:\\\\.[a-zA-Z0-9*])*\\\\b\" };\n\tvar lang_keywords = { token : keywordMapper, regex : \"[a-zA-Z][\\\\:a-zA-Z0-9_-]*\\\\b\" };\n\tvar variables = { token : \"variable.language\", regex : \"[$@%&][?*!.]?[a-zA-Z0-9_-]+\\\\b\" };\n\tvar vars_special = { token: \"variable.language\", regex : \"\\\\$[/|!]?|@\\\\$/\" };\n\tvar ops_char = { token : \"keyword.operator\", regex : \"=|<|>|\\\\+|\\\\*|-|/|~|%|\\\\?|!|\\\\^|\\\\.|\\\\:|\\\\,|\"+\n\t\"»|«|\\\\||\\\\&|⚛|∘\" };\n\tvar constants_unicode = { token : \"constant.language\", regex : \"𝑒|π|τ|∞\" };\n\tvar qstrings = { token : \"string.quoted.single\", regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\" };\n\tvar word_quoting = { token : \"string.quoted.single\", regex : \"[<](?:[a-zA-Z0-9 ])*[>]\"};\n\tvar regexp = {\n\t\t\t\ttoken : \"string.regexp\",\n\t\t\t\tregex : \"[m|rx]?[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\" };\n\t\n\t\n\tthis.$rules = {\n\t\t\"start\" : [\n\t\t\t{\n\t\t\t\ttoken : \"comment.block\", // Embedded Comments - Parentheses\n\t\t\t\tregex : \"#[`|=]\\\\(.*\\\\)\"\n\t\t\t}, {\n\t\t\t\ttoken : \"comment.block\", // Embedded Comments - Brackets\n\t\t\t\tregex : \"#[`|=]\\\\[.*\\\\]\"\n\t\t\t}, {\n\t\t\t\ttoken : \"comment.doc\", // Multiline Comments\n\t\t\t\tregex : \"^=(?:begin)\\\\b\",\n\t\t\t\tnext : \"block_comment\"\n\t\t\t}, {\n\t\t\t\ttoken : \"string.unquoted\", // q Heredocs\n\t\t\t\tregex : \"q[x|w]?\\\\:to/END/;\",\n\t\t\t\tnext : \"qheredoc\"\n\t\t\t}, {\n\t\t\t\ttoken : \"string.unquoted\", // qq Heredocs\n\t\t\t\tregex : \"qq[x|w]?\\\\:to/END/;\",\n\t\t\t\tnext : \"qqheredoc\"\n\t\t\t},\n\t\t\tregexp,\n\t\t\tqstrings\n\t\t\t, {\n\t\t\t\ttoken : \"string.quoted.double\", // Double Quoted String\n\t\t\t\tregex : '\"',\n\t\t\t\tnext : \"qqstring\"\n\t\t\t},\n\t\t\tword_quoting\n\t\t\t, {\n\t\t\t\ttoken: [\"keyword\", \"text\", \"variable.module\"], // use - Module Names, Pragmas, etc.\n\t\t\t\tregex: \"(use)(\\\\s+)((?:\"+moduleName+\"\\\\.?)*)\"\n\t\t\t},\n\t\t\thex,\n\t\t\tnum_rat,\n\t\t\tnum_with_,\n\t\t\tcomplex_numbers,\n\t\t\tbooleans,\n\t\t\tversions,\n\t\t\tlang_keywords,\n\t\t\tvariables,\n\t\t\tvars_special,\n\t\t\tops_char,\n\t\t\tconstants_unicode\n\t\t\t, {\n\t\t\t\ttoken : \"comment\", // Sigle Line Comments\n\t\t\t\tregex : \"#.*$\"\n\t\t\t}, {\n\t\t\t\ttoken : \"lparen\",\n\t\t\t\tregex : \"[[({]\"\n\t\t\t}, {\n\t\t\t\ttoken : \"rparen\",\n\t\t\t\tregex : \"[\\\\])}]\"\n\t\t\t}, {\n\t\t\t\ttoken : \"text\",\n\t\t\t\tregex : \"\\\\s+\"\n\t\t\t}\n\t\t],\n\t\t\"qqstring\" : [\n\t\t\t{\n\t\t\t\ttoken : \"constant.language.escape\",\n\t\t\t\tregex : '\\\\\\\\(?:[nrtef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n\t\t\t}, \n\t\t\tvariables,\n\t\t\tvars_special\n\t\t\t, {\n\t\t\t\ttoken : \"lparen\",\n\t\t\t\tregex : \"{\",\n\t\t\t\tnext : \"qqinterpolation\"\n\t\t\t}, {\n\t\t\t\ttoken : \"string.quoted.double\", \n\t\t\t\tregex : '\"', \n\t\t\t\tnext : \"start\"\n\t\t\t}, {\n\t\t\t\tdefaultToken : \"string.quoted.double\"\n\t\t\t}\n\t\t],\n\t\t\"qqinterpolation\" : [\n\t\t\thex,\n\t\t\tnum_rat,\n\t\t\tnum_with_,\n\t\t\tcomplex_numbers,\n\t\t\tbooleans,\n\t\t\tversions,\n\t\t\tlang_keywords,\n\t\t\tvariables,\n\t\t\tvars_special,\n\t\t\tops_char,\n\t\t\tconstants_unicode,\n\t\t\tqstrings,\n\t\t\tregexp,\n\t\t\t\n\t\t\t{\n\t\t\t\ttoken: \"rparen\",\n\t\t\t\tregex: \"}\",\n\t\t\t\tnext : \"qqstring\"\n\t\t\t}\n\t\t],\n\t\t\"block_comment\": [\n\t\t\t{\n\t\t\t\ttoken: \"comment.doc\",\n\t\t\t\tregex: \"^=end +[a-zA-Z_0-9]*\",\n\t\t\t\tnext: \"start\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tdefaultToken: \"comment.doc\"\n\t\t\t}\n\t\t],\n\t\t\"qheredoc\": [\n\t\t\t{\n\t\t\t\ttoken: \"string.unquoted\",\n\t\t\t\tregex: \"END$\",\n\t\t\t\tnext: \"start\"\n\t\t\t}, {\n\t\t\t\tdefaultToken: \"string.unquoted\"\n\t\t\t}\n\t\t],\n\t\t\"qqheredoc\": [\n\t\t\tvariables,\n\t\t\tvars_special,\n\t\t\t{\n\t\t\t\ttoken : \"lparen\",\n\t\t\t\tregex : \"{\",\n\t\t\t\tnext : \"qqheredocinterpolation\"\n\t\t\t}, {\n\t\t\t\ttoken: \"string.unquoted\",\n\t\t\t\tregex: \"END$\",\n\t\t\t\tnext: \"start\"\n\t\t\t}, {\n\t\t\t\tdefaultToken: \"string.unquoted\"\n\t\t\t}\n\t\t],\n\t\t\"qqheredocinterpolation\" : [\n\t\t\thex,\n\t\t\tnum_rat,\n\t\t\tnum_with_,\n\t\t\tcomplex_numbers,\n\t\t\tbooleans,\n\t\t\tversions,\n\t\t\tlang_keywords,\n\t\t\tvariables,\n\t\t\tvars_special,\n\t\t\tops_char,\n\t\t\tconstants_unicode,\n\t\t\tqstrings,\n\t\t\tregexp,\n\t\t\t{\n\t\t\t\ttoken: \"rparen\",\n\t\t\t\tregex: \"}\",\n\t\t\t\tnext : \"qqheredoc\"\n\t\t\t}\n\t\t]\n\t};\n};\n\noop.inherits(Perl6HighlightRules, TextHighlightRules);\n\nexports.Perl6HighlightRules = Perl6HighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/perl6\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl6_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar Perl6HighlightRules = require(\"./perl6_highlight_rules\").Perl6HighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = Perl6HighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode({start: \"^=(begin)\\\\b\", end: \"^=(end)\\\\b\"});\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n    this.blockComment = [\n        {start: \"=begin\", end: \"=end\", lineStartOnly: true},\n        {start: \"=item\", end: \"=end\", lineStartOnly: true}\n    ];\n\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/perl6\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/perl6\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-pgsql.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PerlHighlightRules = function() {\n\n    var keywords = (\n        \"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|\" +\n         \"no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\"\n    );\n\n    var buildinConstants = (\"ARGV|ENV|INC|SIG\");\n\n    var builtinFunctions = (\n        \"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|\" +\n         \"gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|\" +\n         \"getpeername|setpriority|getprotoent|setprotoent|getpriority|\" +\n         \"endprotoent|getservent|setservent|endservent|sethostent|socketpair|\" +\n         \"getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|\" +\n         \"localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|\" +\n         \"closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|\" +\n         \"shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|\" +\n         \"dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|\" +\n         \"setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|\" +\n         \"lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|\" +\n         \"waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|\" +\n         \"chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|\" +\n         \"unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|\" +\n         \"length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|\" +\n         \"undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|\" +\n         \"sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|\" +\n         \"BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|\" +\n         \"join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|\" +\n         \"keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|\" +\n         \"eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|\" +\n         \"map|die|uc|lc|do\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment.doc\",\n                regex : \"^=(?:begin|item)\\\\b\",\n                next : \"block_comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0x[0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"block_comment\": [\n            {\n                token: \"comment.doc\", \n                regex: \"^=cut\\\\b\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment.doc\"\n            }\n        ]\n    };\n};\n\noop.inherits(PerlHighlightRules, TextHighlightRules);\n\nexports.PerlHighlightRules = PerlHighlightRules;\n});\n\nace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\"\n    );\n\n    var builtinConstants = (\n        \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n    );\n\n    var builtinFunctions = (\n        \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + '\"{3}',\n            next: \"rawqqstring3\"\n        }, {\n            token: \"string\", \n            regex: strRawPre + '\"(?=.)',\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'{3}\",\n            next: \"rawqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'(?=.)\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"{3}',\n            next: \"fqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"(?=.)',\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'{3}\",\n            next: \"fqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'(?=.)\",\n            next: \"fqstring\"\n        },{\n            token: \"string\",\n            regex: strRawFormatPre + '\"{3}',\n            next: \"rfqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + '\"(?=.)',\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'{3}\",\n            next: \"rfqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'(?=.)\",\n            next: \"rfqstring\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }, {\n            include: \"constants\"\n        }],\n        \"qqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring\": [{\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstringParRules\": [{//TODO: nested {}\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)]\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string\",\n            regex: \"'(.)*'\"\n        }, {\n            token: \"string\",\n            regex: '\"(.)*\"'\n        }, {\n            token: \"function.support\",\n            regex: \"(!s|!r|!a)\"\n        }, {\n            include: \"constants\"\n        },{\n            token: 'paren.rparen',\n            regex: \"}\",\n            next: 'pop'\n        },{\n            token: 'paren.lparen',\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }],\n        \"constants\": [{\n            token: \"constant.numeric\", // imaginary\n            regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: floatNumber\n        }, {\n            token: \"constant.numeric\", // long integer\n            regex: integer + \"[lL]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // integer\n            regex: integer + \"\\\\b\"\n        }, {\n            token: [\"punctuation\", \"function.support\"],// method\n            regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n\nace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"variable\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next  : \"string\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"text\", // single quoted strings are not allowed\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"comment\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.start\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\*\",\n                next  : \"comment\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\", // comments are not allowed, but who cares?\n                regex : \"\\\\*\\\\/\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/pgsql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/perl_highlight_rules\",\"ace/mode/python_highlight_rules\",\"ace/mode/json_highlight_rules\",\"ace/mode/javascript_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PerlHighlightRules = require(\"./perl_highlight_rules\").PerlHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar JsonHighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar PgsqlHighlightRules = function() {\n    var keywords = (\n        \"abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|\" +\n        \"analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|anyrange|array|as|asc|\" +\n        \"assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|\" +\n        \"bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|\" +\n        \"catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|\" +\n        \"cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|\" +\n        \"configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|\" +\n        \"create|cross|cstring|csv|current|current_catalog|current_date|current_role|\" +\n        \"current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|\" +\n        \"date|daterange|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|\" +\n        \"definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|\" +\n        \"domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|event|event_trigger|\" +\n        \"except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|\" +\n        \"family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|\" +\n        \"freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|\" +\n        \"having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|\" +\n        \"increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|\" +\n        \"insensitive|insert|instead|int|int2|int2vector|int4|int4range|int8|int8range|integer|\" +\n        \"internal|intersect|interval|into|invoker|is|isnull|isolation|join|json|key|label|language|\" +\n        \"language_handler|large|last|lateral|lc_collate|lc_ctype|leading|leakproof|least|left|level|\" +\n        \"like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|\" +\n        \"mapping|match|materialized|maxvalue|minute|minvalue|mode|money|month|move|name|names|\" +\n        \"national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|\" +\n        \"numeric|numrange|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|\" +\n        \"options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|\" +\n        \"password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|\" +\n        \"pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|\" +\n        \"preserve|primary|prior|privileges|procedural|procedure|program|quote|range|read|real|\" +\n        \"reassign|recheck|record|recursive|ref|refcursor|references|refresh|regclass|regconfig|\" +\n        \"regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|\" +\n        \"reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|\" +\n        \"right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|\" +\n        \"sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|\" +\n        \"simple|smallint|smgr|snapshot|some|stable|standalone|start|statement|statistics|stdin|\" +\n        \"stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|\" +\n        \"template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|\" +\n        \"transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsrange|tstzrange|tsvector|\" +\n        \"txid_snapshot|type|types|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|\" +\n        \"unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|\" +\n        \"varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|\" +\n        \"with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|\" +\n        \"xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone\"\n    );\n\n\n    var builtinFunctions = (\n        \"RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|\" +\n        \"RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|\" +\n        \"RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|\" +\n        \"RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|\" +\n        \"abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|acldefault|\" +\n        \"aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|\" +\n        \"anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|\" +\n        \"anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anyrange_in|anyrange_out|\" +\n        \"anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|\" +\n        \"array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|\" +\n        \"array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|\" +\n        \"array_prepend|array_recv|array_remove|array_replace|array_send|array_smaller|\" +\n        \"array_to_json|array_to_string|array_typanalyze|array_upper|arraycontained|\" +\n        \"arraycontains|arraycontjoinsel|arraycontsel|arrayoverlap|ascii|ascii_to_mic|\" +\n        \"ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|\" +\n        \"bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|\" +\n        \"bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|\" +\n        \"bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|\" +\n        \"boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|\" +\n        \"box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|\" +\n        \"box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|\" +\n        \"box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|\" +\n        \"box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|\" +\n        \"bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|\" +\n        \"bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|\" +\n        \"bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|\" +\n        \"bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|\" +\n        \"btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|\" +\n        \"btbulkdelete|btcanreturn|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|\" +\n        \"btfloat4sortsupport|btfloat84cmp|btfloat8cmp|btfloat8sortsupport|btgetbitmap|\" +\n        \"btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint2sortsupport|btint42cmp|\" +\n        \"btint48cmp|btint4cmp|btint4sortsupport|btint82cmp|btint84cmp|btint8cmp|\" +\n        \"btint8sortsupport|btmarkpos|btnamecmp|btnamesortsupport|btoidcmp|btoidsortsupport|\" +\n        \"btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|\" +\n        \"bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|\" +\n        \"bytea_string_agg_finalfn|bytea_string_agg_transfn|byteacat|byteacmp|byteaeq|byteage|\" +\n        \"byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|\" +\n        \"cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|\" +\n        \"cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|\" +\n        \"cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|\" +\n        \"cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|\" +\n        \"charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|\" +\n        \"cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|\" +\n        \"circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|\" +\n        \"circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|\" +\n        \"circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|\" +\n        \"circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|\" +\n        \"circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|\" +\n        \"close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|\" +\n        \"contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|\" +\n        \"covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|\" +\n        \"current_query|current_schema|current_schemas|current_setting|current_user|currtid|\" +\n        \"currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|\" +\n        \"database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|\" +\n        \"date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|\" +\n        \"date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|\" +\n        \"date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|\" +\n        \"date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|\" +\n        \"date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|\" +\n        \"date_recv|date_send|date_smaller|date_sortsupport|date_trunc|daterange|\" +\n        \"daterange_canonical|daterange_subdiff|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|\" +\n        \"dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|\" +\n        \"dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|\" +\n        \"dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|\" +\n        \"dsynonym_init|dsynonym_lexize|dtrunc|elem_contained_by_range|encode|enum_cmp|enum_eq|\" +\n        \"enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|\" +\n        \"enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|\" +\n        \"euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|\" +\n        \"euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|\" +\n        \"euc_tw_to_mic|euc_tw_to_utf8|event_trigger_in|event_trigger_out|every|exp|factorial|\" +\n        \"family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|\" +\n        \"float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|\" +\n        \"float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|\" +\n        \"float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|\" +\n        \"float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|\" +\n        \"float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|\" +\n        \"float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|\" +\n        \"float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|\" +\n        \"float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|\" +\n        \"float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|\" +\n        \"float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|\" +\n        \"float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|\" +\n        \"fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|\" +\n        \"gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|\" +\n        \"get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|\" +\n        \"gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|\" +\n        \"ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|\" +\n        \"gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|\" +\n        \"ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|\" +\n        \"gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|\" +\n        \"gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|\" +\n        \"gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|\" +\n        \"gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|\" +\n        \"gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|\" +\n        \"gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|\" +\n        \"gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|\" +\n        \"gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|\" +\n        \"gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|\" +\n        \"gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|\" +\n        \"has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|\" +\n        \"has_function_privilege|has_language_privilege|has_schema_privilege|\" +\n        \"has_sequence_privilege|has_server_privilege|has_table_privilege|\" +\n        \"has_tablespace_privilege|has_type_privilege|hash_aclitem|hash_array|hash_numeric|\" +\n        \"hash_range|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|\" +\n        \"hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|\" +\n        \"hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|\" +\n        \"hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|\" +\n        \"hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|\" +\n        \"icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|\" +\n        \"inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|\" +\n        \"inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|\" +\n        \"initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|\" +\n        \"int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|\" +\n        \"int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|\" +\n        \"int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|\" +\n        \"int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|\" +\n        \"int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|\" +\n        \"int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|\" +\n        \"int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|\" +\n        \"int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|\" +\n        \"int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|\" +\n        \"int4range|int4range_canonical|int4range_subdiff|int4recv|int4send|int4shl|int4shr|\" +\n        \"int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|\" +\n        \"int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|\" +\n        \"int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|\" +\n        \"int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|\" +\n        \"int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|\" +\n        \"int8range|int8range_canonical|int8range_subdiff|int8recv|int8send|int8shl|int8shr|\" +\n        \"int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|\" +\n        \"internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|\" +\n        \"interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|\" +\n        \"interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|\" +\n        \"interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|\" +\n        \"interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_transform|\" +\n        \"interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isempty|isfinite|\" +\n        \"ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|\" +\n        \"iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|json_agg|\" +\n        \"json_agg_finalfn|json_agg_transfn|json_array_element|json_array_element_text|\" +\n        \"json_array_elements|json_array_length|json_each|json_each_text|json_extract_path|\" +\n        \"json_extract_path_op|json_extract_path_text|json_extract_path_text_op|json_in|\" +\n        \"json_object_field|json_object_field_text|json_object_keys|json_out|\" +\n        \"json_populate_record|json_populate_recordset|json_recv|json_send|justify_days|\" +\n        \"justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|\" +\n        \"koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|\" +\n        \"language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|\" +\n        \"latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|\" +\n        \"line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|\" +\n        \"line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|\" +\n        \"lo_export|lo_import|lo_lseek|lo_lseek64|lo_open|lo_tell|lo_tell64|lo_truncate|\" +\n        \"lo_truncate64|lo_unlink|log|loread|lower|lower_inc|lower_inf|lowrite|lpad|lseg|lseg_center|\" +\n        \"lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|\" +\n        \"lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|\" +\n        \"lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_and|macaddr_cmp|macaddr_eq|macaddr_ge|\" +\n        \"macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_not|macaddr_or|\" +\n        \"macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|\" +\n        \"mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|\" +\n        \"mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|\" +\n        \"mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|\" +\n        \"name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|\" +\n        \"namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|\" +\n        \"neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|\" +\n        \"network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|\" +\n        \"nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|\" +\n        \"numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|\" +\n        \"numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|\" +\n        \"numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|\" +\n        \"numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|\" +\n        \"numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|\" +\n        \"numeric_transform|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|\" +\n        \"numerictypmodin|numerictypmodout|numnode|numrange|numrange_subdiff|obj_description|\" +\n        \"octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|\" +\n        \"oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|\" +\n        \"oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|\" +\n        \"on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|\" +\n        \"path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|\" +\n        \"path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|\" +\n        \"path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|\" +\n        \"pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|\" +\n        \"pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|\" +\n        \"pg_available_extension_versions|pg_available_extensions|pg_backend_pid|\" +\n        \"pg_backup_start_time|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|\" +\n        \"pg_collation_for|pg_collation_is_visible|pg_column_is_updatable|pg_column_size|\" +\n        \"pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|\" +\n        \"pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|\" +\n        \"pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|\" +\n        \"pg_event_trigger_dropped_objects|pg_export_snapshot|pg_extension_config_dump|\" +\n        \"pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|\" +\n        \"pg_get_function_arguments|pg_get_function_identity_arguments|\" +\n        \"pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|\" +\n        \"pg_get_multixact_members|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|\" +\n        \"pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_identify_object|pg_indexes_size|\" +\n        \"pg_is_in_backup|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|\" +\n        \"pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|\" +\n        \"pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|\" +\n        \"pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|\" +\n        \"pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|\" +\n        \"pg_opfamily_is_visible|pg_options_to_table|pg_postmaster_start_time|\" +\n        \"pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|\" +\n        \"pg_relation_filenode|pg_relation_filepath|pg_relation_is_updatable|pg_relation_size|\" +\n        \"pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|\" +\n        \"pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|\" +\n        \"pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|\" +\n        \"pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|\" +\n        \"pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|\" +\n        \"pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|\" +\n        \"pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|\" +\n        \"pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|\" +\n        \"pg_stat_get_bgwriter_buf_written_checkpoints|\" +\n        \"pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|\" +\n        \"pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|\" +\n        \"pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|\" +\n        \"pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|\" +\n        \"pg_stat_get_buf_written_backend|pg_stat_get_checkpoint_sync_time|\" +\n        \"pg_stat_get_checkpoint_write_time|pg_stat_get_db_blk_read_time|\" +\n        \"pg_stat_get_db_blk_write_time|pg_stat_get_db_blocks_fetched|\" +\n        \"pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|\" +\n        \"pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|\" +\n        \"pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|\" +\n        \"pg_stat_get_db_conflict_tablespace|pg_stat_get_db_deadlocks|\" +\n        \"pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|\" +\n        \"pg_stat_get_db_temp_bytes|pg_stat_get_db_temp_files|pg_stat_get_db_tuples_deleted|\" +\n        \"pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|\" +\n        \"pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|\" +\n        \"pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|\" +\n        \"pg_stat_get_function_calls|pg_stat_get_function_self_time|\" +\n        \"pg_stat_get_function_total_time|pg_stat_get_last_analyze_time|\" +\n        \"pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|\" +\n        \"pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|\" +\n        \"pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|\" +\n        \"pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|\" +\n        \"pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|\" +\n        \"pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|\" +\n        \"pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|\" +\n        \"pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_total_time|\" +\n        \"pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|\" +\n        \"pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|\" +\n        \"pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|\" +\n        \"pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|\" +\n        \"pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|\" +\n        \"pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|\" +\n        \"pg_tablespace_databases|pg_tablespace_location|pg_tablespace_size|\" +\n        \"pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|\" +\n        \"pg_trigger_depth|pg_try_advisory_lock|pg_try_advisory_lock_shared|\" +\n        \"pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|\" +\n        \"pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|\" +\n        \"pg_type_is_visible|pg_typeof|pg_xlog_location_diff|pg_xlog_replay_pause|\" +\n        \"pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|\" +\n        \"plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|\" +\n        \"point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|\" +\n        \"point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|\" +\n        \"poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|\" +\n        \"poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|\" +\n        \"poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|\" +\n        \"polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|\" +\n        \"prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|\" +\n        \"pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|\" +\n        \"querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|range_adjacent|\" +\n        \"range_after|range_before|range_cmp|range_contained_by|range_contains|\" +\n        \"range_contains_elem|range_eq|range_ge|range_gist_compress|range_gist_consistent|\" +\n        \"range_gist_decompress|range_gist_penalty|range_gist_picksplit|range_gist_same|\" +\n        \"range_gist_union|range_gt|range_in|range_intersect|range_le|range_lt|range_minus|\" +\n        \"range_ne|range_out|range_overlaps|range_overleft|range_overright|range_recv|range_send|\" +\n        \"range_typanalyze|range_union|rangesel|rank|record_eq|record_ge|record_gt|record_in|\" +\n        \"record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|\" +\n        \"regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|\" +\n        \"regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|\" +\n        \"regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|\" +\n        \"regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|\" +\n        \"regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|\" +\n        \"regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|\" +\n        \"regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|\" +\n        \"regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|\" +\n        \"reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|\" +\n        \"reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|row_to_json|rpad|\" +\n        \"rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|\" +\n        \"schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|\" +\n        \"set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|\" +\n        \"shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|\" +\n        \"similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|\" +\n        \"smgrout|spg_kd_choose|spg_kd_config|spg_kd_inner_consistent|spg_kd_picksplit|\" +\n        \"spg_quad_choose|spg_quad_config|spg_quad_inner_consistent|spg_quad_leaf_consistent|\" +\n        \"spg_quad_picksplit|spg_range_quad_choose|spg_range_quad_config|\" +\n        \"spg_range_quad_inner_consistent|spg_range_quad_leaf_consistent|\" +\n        \"spg_range_quad_picksplit|spg_text_choose|spg_text_config|spg_text_inner_consistent|\" +\n        \"spg_text_leaf_consistent|spg_text_picksplit|spgbeginscan|spgbuild|spgbuildempty|\" +\n        \"spgbulkdelete|spgcanreturn|spgcostestimate|spgendscan|spggetbitmap|spggettuple|\" +\n        \"spginsert|spgmarkpos|spgoptions|spgrescan|spgrestrpos|spgvacuumcleanup|split_part|sqrt|\" +\n        \"statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|\" +\n        \"string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|\" +\n        \"suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|\" +\n        \"table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|\" +\n        \"text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|\" +\n        \"texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|\" +\n        \"textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|\" +\n        \"thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|\" +\n        \"tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|\" +\n        \"time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|\" +\n        \"time_smaller|time_transform|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|\" +\n        \"timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|\" +\n        \"timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|\" +\n        \"timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|\" +\n        \"timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|\" +\n        \"timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|\" +\n        \"timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|\" +\n        \"timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|\" +\n        \"timestamp_sortsupport|timestamp_transform|timestamptypmodin|timestamptypmodout|\" +\n        \"timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|\" +\n        \"timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|\" +\n        \"timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|\" +\n        \"timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|\" +\n        \"timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|\" +\n        \"timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|\" +\n        \"timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|\" +\n        \"timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|\" +\n        \"timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|\" +\n        \"timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|\" +\n        \"timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|\" +\n        \"timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|\" +\n        \"tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|\" +\n        \"tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|\" +\n        \"tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|\" +\n        \"tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|\" +\n        \"to_json|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|\" +\n        \"trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|\" +\n        \"ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|\" +\n        \"ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|\" +\n        \"tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|\" +\n        \"tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsrange|\" +\n        \"tsrange_subdiff|tstzrange|tstzrange_subdiff|tsvector_cmp|tsvector_concat|tsvector_eq|\" +\n        \"tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|\" +\n        \"tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|\" +\n        \"txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|\" +\n        \"txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|\" +\n        \"txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|\" +\n        \"unknownout|unknownrecv|unknownsend|unnest|upper|upper_inc|upper_inf|utf8_to_ascii|\" +\n        \"utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|\" +\n        \"utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|\" +\n        \"utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|\" +\n        \"utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|\" +\n        \"uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|\" +\n        \"varbit_recv|varbit_send|varbit_transform|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|\" +\n        \"varbitlt|varbitne|varbittypmodin|varbittypmodout|varchar_transform|varcharin|\" +\n        \"varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|\" +\n        \"void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|\" +\n        \"win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|\" +\n        \"win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|\" +\n        \"xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|\" +\n        \"xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|\" +\n        \"xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n\n\n    var sqlRules = [{\n            token : \"string\", // single line string -- assume dollar strings if multi-line for now\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"variable.language\", // pg identifier\n            regex : '\".*?\"'\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\" // TODO - Unicode in identifiers\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\" +\n                    \"\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\" +\n                    \"\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|\" +\n                    \"~=|~>=~|~>~|~~|~~\\\\*\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    ];\n\n\n    this.$rules = {\n        \"start\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            },{\n                token : \"keyword.statementBegin\",\n                regex : \"[a-zA-Z]+\", // Could enumerate starting keywords but this allows things to work when new statements are added.\n                next : \"statement\"\n            },{\n                token : \"support.buildin\", // psql directive\n                regex : \"^\\\\\\\\[\\\\S]+.*$\"\n            }\n        ],\n\n        \"statement\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentStatement\"\n            }, {\n                token : \"statementEnd\",\n                regex : \";\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$perl\\\\$\",\n                next : \"perl-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$python\\\\$\",\n                next : \"python-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$json\\\\$\",\n                next : \"json-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$(js|javascript)\\\\$\",\n                next : \"javascript-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$$\", // dollar quote at the end of a line\n                next : \"dollarSql\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarStatementString\"\n            }\n        ].concat(sqlRules),\n\n        \"dollarSql\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentDollarSql\"\n            }, {\n                token : \"string\", // end quoting with dollar at the start of a line\n                regex : \"^\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSqlString\"\n            }\n        ].concat(sqlRules),\n\n        \"comment\" : [{\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"commentStatement\" : [{\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"statement\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"commentDollarSql\" : [{\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"dollarSql\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"dollarStatementString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"dollarSqlString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSql\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.embedRules(PerlHighlightRules, \"perl-\", [{token : \"string\", regex : \"\\\\$perl\\\\$\", next : \"statement\"}]);\n    this.embedRules(PythonHighlightRules, \"python-\", [{token : \"string\", regex : \"\\\\$python\\\\$\", next : \"statement\"}]);\n    this.embedRules(JsonHighlightRules, \"json-\", [{token : \"string\", regex : \"\\\\$json\\\\$\", next : \"statement\"}]);\n    this.embedRules(JavaScriptHighlightRules, \"javascript-\", [{token : \"string\", regex : \"\\\\$(js|javascript)\\\\$\", next : \"statement\"}]);\n};\n\noop.inherits(PgsqlHighlightRules, TextHighlightRules);\n\nexports.PgsqlHighlightRules = PgsqlHighlightRules;\n});\n\nace.define(\"ace/mode/pgsql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pgsql_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar PgsqlHighlightRules = require(\"./pgsql_highlight_rules\").PgsqlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = PgsqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) { \n        if (state == \"start\" || state == \"keyword.statementEnd\") {\n            return \"\";\n        } else {\n            return this.$getIndent(line); // Keep whatever indent the previous line has\n        }\n    };\n\n    this.$id = \"ace/mode/pgsql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-php.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar PhpLangHighlightRules = function() {\n    var docComment = DocCommentHighlightRules;\n    var builtinFunctions = lang.arrayToMap(\n'abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|\\\naggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|\\\napache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|\\\napache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|\\\napc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|\\\napc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|\\\napd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|\\\napd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|\\\narray_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|\\\narray_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|\\\narray_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|\\\narray_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|\\\narray_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|\\\narray_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|\\\natan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|\\\nbbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|\\\nbcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|\\\nbcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|\\\nbcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|\\\nbindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|\\\ncachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|\\\ncairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|\\\ncairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|\\\ncairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|\\\ncairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|\\\ncairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|\\\ncairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|\\\ncairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|\\\ncairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|\\\ncairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|\\\ncairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|\\\ncairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|\\\ncairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|\\\ncairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|\\\ncairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|\\\ncairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|\\\ncairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|\\\ncairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|\\\ncairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|\\\ncairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|\\\ncairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|\\\ncairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|\\\ncairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|\\\ncairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|\\\ncairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|\\\ncairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|\\\ncairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|\\\ncal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|\\\nchdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|\\\nclass_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|\\\nclasskit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|\\\ncom_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|\\\ncom_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|\\\nconvert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|\\\ncounter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|\\\ncrack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|\\\nctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|\\\ncubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|\\\ncubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|\\\ncubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|\\\ncubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|\\\ncubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|\\\ncubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|\\\ncubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|\\\ncubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|\\\ncubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|\\\ncubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|\\\ncubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|\\\ncurl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|\\\ncurl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|\\\ncurl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|\\\ndate_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|\\\ndate_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|\\\ndate_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|\\\ndateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|\\\ndb2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|\\\ndb2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|\\\ndb2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|\\\ndb2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|\\\ndb2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|\\\ndb2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|\\\ndba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|\\\ndbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|\\\ndbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|\\\ndbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|\\\ndbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|\\\ndbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|\\\ndbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|\\\ndbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|\\\ndbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|\\\ndefine_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|\\\ndio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|\\\ndns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|\\\ndomattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|\\\ndomdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|\\\ndomdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|\\\ndomdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|\\\ndomdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|\\\ndomdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|\\\ndomelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|\\\ndomelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|\\\ndomexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|\\\ndomnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|\\\ndomnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|\\\ndomnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|\\\ndomnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|\\\ndomnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|\\\ndomtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|\\\ndomxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|\\\ndomxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|\\\nenchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|\\\nenchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|\\\nenchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|\\\nenchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|\\\neregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|\\\nevent_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|\\\nevent_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|\\\nevent_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|\\\nevent_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|\\\nexpm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|\\\nfam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|\\\nfbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|\\\nfbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|\\\nfbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|\\\nfbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|\\\nfbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|\\\nfbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|\\\nfbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|\\\nfbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|\\\nfdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|\\\nfdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|\\\nfdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|\\\nfdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|\\\nfile_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|\\\nfilepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|\\\nfiletype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|\\\nfinfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|\\\nforward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|\\\nftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|\\\nftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|\\\nftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|\\\nfunc_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|\\\ngearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|\\\ngeoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|\\\ngeoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|\\\nget_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|\\\nget_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|\\\nget_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|\\\nget_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|\\\ngetcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|\\\ngethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|\\\ngetmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|\\\ngetrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|\\\ngettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|\\\ngmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|\\\ngmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|\\\ngmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|\\\ngnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|\\\ngnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|\\\ngnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|\\\ngrapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|\\\ngupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|\\\ngupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|\\\ngupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|\\\ngupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|\\\ngupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|\\\ngupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|\\\ngupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|\\\ngupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|\\\ngupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|\\\ngzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|\\\nhalt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|\\\nharuannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|\\\nharudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|\\\nharudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|\\\nharudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|\\\nharudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|\\\nharudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|\\\nharudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|\\\nharudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|\\\nharudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|\\\nharuencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|\\\nharufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|\\\nharufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|\\\nharuimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|\\\nharuoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|\\\nharupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|\\\nharupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|\\\nharupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|\\\nharupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|\\\nharupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|\\\nharupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|\\\nharupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|\\\nharupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|\\\nharupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|\\\nharupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|\\\nharupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|\\\nharupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|\\\nharupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|\\\nharupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|\\\nhash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|\\\nheader_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|\\\nhtml_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|\\\nhttp_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|\\\nhttp_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|\\\nhttp_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|\\\nhttp_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|\\\nhttp_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|\\\nhttp_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|\\\nhttp_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|\\\nhttp_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|\\\nhttpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|\\\nhttpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|\\\nhttpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|\\\nhttpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|\\\nhttpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|\\\nhttpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|\\\nhttpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|\\\nhttpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|\\\nhttpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|\\\nhttprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|\\\nhttprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|\\\nhttprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|\\\nhttprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|\\\nhttprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|\\\nhttprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|\\\nhttprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|\\\nhttprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|\\\nhttprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|\\\nhttprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|\\\nhttprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|\\\nhttprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|\\\nhttprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|\\\nhttpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|\\\nhttpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|\\\nhttpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|\\\nhttpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|\\\nhttpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|\\\nhttpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|\\\nhttpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|\\\nhw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|\\\nhw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|\\\nhw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|\\\nhw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|\\\nhw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|\\\nhw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|\\\nhw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|\\\nhwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|\\\nhwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|\\\nhwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|\\\nhwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|\\\nhwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|\\\nhwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|\\\nhwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|\\\nibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|\\\nibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|\\\nibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|\\\nibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|\\\nibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|\\\nibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|\\\nibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|\\\niconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|\\\nid3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|\\\nidn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|\\\nifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|\\\nifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|\\\nifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|\\\nifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|\\\niis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|\\\niis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|\\\niis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|\\\nimagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|\\\nimagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|\\\nimagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|\\\nimagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|\\\nimagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|\\\nimagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|\\\nimagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|\\\nimagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|\\\nimagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|\\\nimagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|\\\nimagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|\\\nimagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|\\\nimagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|\\\nimagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|\\\nimagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|\\\nimagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|\\\nimagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|\\\nimagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|\\\nimagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|\\\nimagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|\\\nimagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|\\\nimagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|\\\nimagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|\\\nimagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|\\\nimagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|\\\nimagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|\\\nimagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|\\\nimagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|\\\nimagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|\\\nimagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|\\\nimagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|\\\nimagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|\\\nimagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|\\\nimagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|\\\nimagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|\\\nimagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|\\\nimagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|\\\nimagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|\\\nimagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|\\\nimagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|\\\nimagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|\\\nimagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|\\\nimagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|\\\nimagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|\\\nimagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|\\\nimagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|\\\nimagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|\\\nimagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|\\\nimagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|\\\nimagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|\\\nimagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|\\\nimagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|\\\nimagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|\\\nimagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|\\\nimagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|\\\nimagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|\\\nimagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|\\\nimagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|\\\nimagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|\\\nimagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|\\\nimagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|\\\nimagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|\\\nimagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|\\\nimagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|\\\nimagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|\\\nimagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|\\\nimagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|\\\nimagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|\\\nimagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|\\\nimagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|\\\nimagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|\\\nimagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|\\\nimagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|\\\nimagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|\\\nimagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|\\\nimagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|\\\nimagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|\\\nimagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|\\\nimagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|\\\nimagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|\\\nimagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|\\\nimagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|\\\nimagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|\\\nimagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|\\\nimagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|\\\nimagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|\\\nimagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|\\\nimagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|\\\nimagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|\\\nimagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|\\\nimagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|\\\nimagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|\\\nimagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|\\\nimagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|\\\nimagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|\\\nimagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|\\\nimagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|\\\nimagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|\\\nimagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|\\\nimagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|\\\nimagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|\\\nimagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|\\\nimap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|\\\nimap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|\\\nimap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|\\\nimap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|\\\nimap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|\\\nimap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|\\\nimap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|\\\nimap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|\\\ninclude_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|\\\ningres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|\\\ningres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|\\\ningres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|\\\ningres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|\\\ningres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|\\\ninotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|\\\nintldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|\\\nis_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|\\\nis_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|\\\niscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|\\\niterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|\\\njddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|\\\njson_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|\\\nkadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|\\\nkadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|\\\nldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|\\\nldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|\\\nldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|\\\nldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|\\\nldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|\\\nlibxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|\\\nlimititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|\\\nlzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|\\\nm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|\\\nm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|\\\nm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|\\\nm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|\\\nmailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|\\\nmailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|\\\nmailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|\\\nmaxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|\\\nmaxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|\\\nmaxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|\\\nmaxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|\\\nmaxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|\\\nmaxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|\\\nmaxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|\\\nmaxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|\\\nmaxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|\\\nmaxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|\\\nmaxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|\\\nmaxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|\\\nmaxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|\\\nmaxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|\\\nmaxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|\\\nmb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|\\\nmb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|\\\nmb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|\\\nmb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|\\\nmb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|\\\nmb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|\\\nmb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|\\\nmcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|\\\nmcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|\\\nmcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|\\\nmcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|\\\nmcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|\\\nmcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|\\\nmdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|\\\nmhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|\\\nming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|\\\nmongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|\\\nmongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|\\\nmongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|\\\nmqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|\\\nmqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|\\\nmsession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|\\\nmsession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|\\\nmsg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|\\\nmsql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|\\\nmsql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|\\\nmsql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|\\\nmsql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|\\\nmssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|\\\nmssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|\\\nmssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|\\\nmssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|\\\nmssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|\\\nmysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|\\\nmysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|\\\nmysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|\\\nmysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|\\\nmysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|\\\nmysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|\\\nmysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|\\\nmysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|\\\nmysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|\\\nmysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|\\\nmysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|\\\nmysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|\\\nmysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|\\\nmysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|\\\nmysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|\\\nmysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|\\\nmysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|\\\nmysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|\\\nmysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|\\\nmysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|\\\nmysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|\\\nmysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|\\\nmysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|\\\nmysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|\\\nmysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|\\\nmysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|\\\nmysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|\\\nncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|\\\nncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|\\\nncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|\\\nncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|\\\nncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|\\\nncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|\\\nncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|\\\nncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|\\\nncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|\\\nncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|\\\nncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|\\\nncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|\\\nncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|\\\nncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|\\\nncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|\\\nncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|\\\nncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|\\\nncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|\\\nncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|\\\nncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|\\\nncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|\\\nncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|\\\nnewt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|\\\nnewt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|\\\nnewt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|\\\nnewt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|\\\nnewt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|\\\nnewt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|\\\nnewt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|\\\nnewt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|\\\nnewt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|\\\nnewt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|\\\nnewt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|\\\nnewt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|\\\nnewt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|\\\nnewt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|\\\nnewt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|\\\nnewt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|\\\nnewt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|\\\nnewt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|\\\nnewt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|\\\nnotes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|\\\nnotes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|\\\nnumberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|\\\nob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|\\\nob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|\\\noci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|\\\noci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|\\\noci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|\\\noci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|\\\noci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|\\\noci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|\\\noci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|\\\noci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|\\\noci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|\\\nocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|\\\nocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|\\\nocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|\\\nociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|\\\nocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|\\\noctdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|\\\nodbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|\\\nodbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|\\\nodbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|\\\nodbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|\\\nodbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|\\\nopenal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|\\\nopenal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|\\\nopenal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|\\\nopenlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|\\\nopenssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|\\\nopenssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|\\\nopenssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|\\\nopenssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|\\\nopenssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|\\\nopenssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|\\\nopenssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|\\\noutofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|\\\novrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|\\\novrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|\\\novrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|\\\nparse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|\\\npcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|\\\npcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|\\\npdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|\\\npdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|\\\npdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|\\\npdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|\\\npdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|\\\npdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|\\\npdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|\\\npdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|\\\npdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|\\\npdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|\\\npdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|\\\npdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|\\\npdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|\\\npdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|\\\npdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|\\\npdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|\\\npdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|\\\npdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|\\\npdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|\\\npdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|\\\npdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|\\\npdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|\\\npdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|\\\npdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|\\\npg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|\\\npg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|\\\npg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|\\\npg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|\\\npg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|\\\npg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|\\\npg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|\\\npg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|\\\npg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|\\\nphp_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|\\\npng2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|\\\nposix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|\\\nposix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|\\\nposix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|\\\npreg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|\\\nprinter_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|\\\nprinter_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|\\\nprinter_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|\\\nprinter_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|\\\nprinter_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|\\\nps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|\\\nps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|\\\nps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|\\\nps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|\\\nps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|\\\nps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|\\\nps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|\\\nps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|\\\nps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|\\\npspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|\\\npspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|\\\npspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|\\\npx_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|\\\npx_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|\\\npx_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|\\\nradius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|\\\nradius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|\\\nradius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|\\\nradius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|\\\nrararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|\\\nreadline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|\\\nreadline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|\\\nreadline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|\\\nrecursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|\\\nrecursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|\\\nreflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|\\\nregexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|\\\nresourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|\\\nrpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|\\\nrrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|\\\nrunkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|\\\nrunkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|\\\nrunkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|\\\nrunkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|\\\nsamconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|\\\nsamconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|\\\nsammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|\\\nsca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|\\\nsdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|\\\nsdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|\\\nsdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|\\\nsdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|\\\nsdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|\\\nsdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|\\\nsdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|\\\nsdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|\\\nsdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|\\\nsdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|\\\nsdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|\\\nsdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|\\\nsdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|\\\nsdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|\\\nsdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|\\\nsdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|\\\nsdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|\\\nsem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|\\\nsession_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|\\\nsession_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|\\\nsession_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|\\\nsession_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|\\\nset_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|\\\nsetstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|\\\nshm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|\\\nsimilar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|\\\nsnmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|\\\nsnmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|\\\nsnmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|\\\nsoapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|\\\nsocket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|\\\nsocket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|\\\nsocket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|\\\nsolrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|\\\nsolrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|\\\nsolrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|\\\nspl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|\\\nsplfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|\\\nsplpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|\\\nsqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|\\\nsqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|\\\nsqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|\\\nsqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|\\\nsqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|\\\nsqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|\\\nssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|\\\nssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|\\\nssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|\\\nssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|\\\nstats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|\\\nstats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|\\\nstats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|\\\nstats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|\\\nstats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|\\\nstats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|\\\nstats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|\\\nstats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|\\\nstats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|\\\nstats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|\\\nstats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|\\\nstats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|\\\nstr_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|\\\nstream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|\\\nstream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|\\\nstream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|\\\nstream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|\\\nstream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|\\\nstream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|\\\nstream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|\\\nstream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|\\\nstripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|\\\nstrstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|\\\nsvn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|\\\nsvn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|\\\nsvn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|\\\nsvn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|\\\nsvn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|\\\nsvn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|\\\nswf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|\\\nswf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|\\\nswf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|\\\nswf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|\\\nswf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|\\\nswf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|\\\nswf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|\\\nswf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|\\\nswfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|\\\nswfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|\\\nswish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|\\\nswishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|\\\nswishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|\\\nsybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|\\\nsybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|\\\nsybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|\\\nsybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|\\\ntcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|\\\ntidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|\\\ntime_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|\\\ntimezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|\\\ntokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|\\\nucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|\\\nudm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|\\\nudm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|\\\nuksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|\\\nurldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|\\\nvariant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|\\\nvariant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|\\\nvariant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|\\\nvpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|\\\nvpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|\\\nvpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|\\\nw32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|\\\nwddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|\\\nwin32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|\\\nwin32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|\\\nwincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|\\\nwincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|\\\nwincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|\\\nwincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|\\\nxattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|\\\nxdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|\\\nxdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|\\\nxhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|\\\nxml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|\\\nxml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|\\\nxml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|\\\nxml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|\\\nxmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|\\\nxmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|\\\nxmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|\\\nxmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|\\\nxmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|\\\nxmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|\\\nxmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|\\\nxmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|\\\nxmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|\\\nxmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|\\\nxmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|\\\nxpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|\\\nxslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|\\\nxslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|\\\nyaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|\\\nyaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|\\\nyaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|\\\nyp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|\\\nzip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|\\\nziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|\\\nziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|\\\nziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|\\\nziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|\\\nziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|\\\nziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type'.split('|')\n    );\n    var keywords = lang.arrayToMap(\n'abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|\\\nendif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|\\\npublic|static|switch|throw|trait|try|use|var|while|xor|yield'.split('|')\n    );\n    var languageConstructs = lang.arrayToMap(\n        ('__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|')\n    );\n\n    var builtinConstants = lang.arrayToMap(\n        ('true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__').split('|')\n    );\n\n    var builtinVariables = lang.arrayToMap(\n'$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|\\\n$http_response_header|$argc|$argv'.split('|')\n    );\n    var builtinFunctionsDeprecated = lang.arrayToMap(\n'key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|\\\ncom_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|\\\ncubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|\\\nhw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|\\\nmaxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|\\\nmysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|\\\nmysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|\\\nmysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|\\\nmysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|\\\nmysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|\\\nmysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|\\\nocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|\\\nocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|\\\nocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|\\\nocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|\\\nociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|\\\nPDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|\\\nPDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|\\\nPDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|\\\nPDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|\\\nPDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|\\\nPDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|\\\nPDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|\\\nPDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|\\\npx_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister\\\nset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|\\\nsql_regcase'.split('|')\n    );\n\n    var keywordsDeprecated = lang.arrayToMap(\n        ('cfunction|old_function').split('|')\n    );\n\n    var futureReserved = lang.arrayToMap([]);\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /(?:#|\\/\\/)(?:[^?]|\\?[^>])*/\n            },\n            docComment.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // \" string start\n                regex : '\"',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // ' string start\n                regex : \"'\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|\" +\n                        \"ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|\" +\n                        \"HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|\" +\n                        \"L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|\" +\n                        \"VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"\n            }, {\n                token : [\"keyword\", \"text\", \"support.class\"],\n                regex : \"\\\\b(new)(\\\\s+)(\\\\w+)\"\n            }, {\n                token : [\"support.class\", \"keyword.operator\"],\n                regex : \"\\\\b(\\\\w+)(::)\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|\" +\n                        \"SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|\" +\n                        \"O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|\" +\n                        \"R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|\" +\n                        \"YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|\" +\n                        \"ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|\" +\n                        \"T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|\" +\n                        \"HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|\" +\n                        \"I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|\" +\n                        \"O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|\" +\n                        \"L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|\" +\n                        \"M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|\" +\n                        \"OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|\" +\n                        \"T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"\n            }, {\n                token : function(value) {\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (builtinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (builtinVariables.hasOwnProperty(value))\n                        return \"variable.language\";\n                    else if (futureReserved.hasOwnProperty(value))\n                        return \"invalid.illegal\";\n                    else if (builtinFunctions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (value == \"debugger\")\n                        return \"invalid.deprecated\";\n                    else\n                        if(value.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/))\n                            return \"variable\";\n                        return \"identifier\";\n                },\n                regex : /[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            }, {\n                onMatch : function(value, currentSate, state) {\n                    value = value.substr(3);\n                    if (value[0] == \"'\" || value[0] == '\"')\n                        value = value.slice(1, -1);\n                    state.unshift(this.next, value);\n                    return \"markup.list\";\n                },\n                regex : /<<<(?:\\w+|'\\w+'|\"\\w+\")$/,\n                next: \"heredoc\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[,;]/\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"heredoc\" : [\n            {\n                onMatch : function(value, currentSate, stack) {\n                    if (stack[1] != value)\n                        return \"string\";\n                    stack.shift();\n                    stack.shift();\n                    return \"markup.list\";\n                },\n                regex : \"^\\\\w+(?=;?$)\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex : \".*\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : '\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n            }, {\n                token : \"variable\",\n                regex : /\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/\n            }, {\n                token : \"variable\",\n                regex : /\\$\\{[^\"\\}]+\\}?/           // this is wrong but ok for now\n            },\n            {token : \"string\", regex : '\"', next : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"qstring\" : [\n            {token : \"constant.language.escape\", regex : /\\\\['\\\\]/},\n            {token : \"string\", regex : \"'\", next : \"start\"},\n            {defaultToken : \"string\"}\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(PhpLangHighlightRules, TextHighlightRules);\n\n\nvar PhpHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var startRules = [\n        {\n            token : \"support.php_tag\", // php open tag\n            regex : \"<\\\\?(?:php|=)?\",\n            push  : \"php-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token : \"support.php_tag\", // php close tag\n            regex : \"\\\\?>\",\n            next  : \"pop\"\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(PhpLangHighlightRules, \"php-\", endRules, [\"start\"]);\n\n    this.normalizeRules();\n};\n\noop.inherits(PhpHighlightRules, HtmlHighlightRules);\n\nexports.PhpHighlightRules = PhpHighlightRules;\nexports.PhpLangHighlightRules = PhpLangHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar functionMap = {\n    \"abs\": [\n        \"int abs(int number)\",\n        \"Return the absolute value of the number\"\n    ],\n    \"acos\": [\n        \"float acos(float number)\",\n        \"Return the arc cosine of the number in radians\"\n    ],\n    \"acosh\": [\n        \"float acosh(float number)\",\n        \"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"\n    ],\n    \"addGlob\": [\n        \"bool addGlob(string pattern[,int flags [, array options]])\",\n        \"Add files matching the glob pattern. See php's glob for the pattern syntax.\"\n    ],\n    \"addPattern\": [\n        \"bool addPattern(string pattern[, string path [, array options]])\",\n        \"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"\n    ],\n    \"addcslashes\": [\n        \"string addcslashes(string str, string charlist)\",\n        \"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"\n    ],\n    \"addslashes\": [\n        \"string addslashes(string str)\",\n        \"Escapes single quote, double quotes and backslash characters in a string with backslashes\"\n    ],\n    \"apache_child_terminate\": [\n        \"bool apache_child_terminate(void)\",\n        \"Terminate apache process after this request\"\n    ],\n    \"apache_get_modules\": [\n        \"array apache_get_modules(void)\",\n        \"Get a list of loaded Apache modules\"\n    ],\n    \"apache_get_version\": [\n        \"string apache_get_version(void)\",\n        \"Fetch Apache version\"\n    ],\n    \"apache_getenv\": [\n        \"bool apache_getenv(string variable [, bool walk_to_top])\",\n        \"Get an Apache subprocess_env variable\"\n    ],\n    \"apache_lookup_uri\": [\n        \"object apache_lookup_uri(string URI)\",\n        \"Perform a partial request of the given URI to obtain information about it\"\n    ],\n    \"apache_note\": [\n        \"string apache_note(string note_name [, string note_value])\",\n        \"Get and set Apache request notes\"\n    ],\n    \"apache_request_auth_name\": [\n        \"string apache_request_auth_name()\",\n        \"\"\n    ],\n    \"apache_request_auth_type\": [\n        \"string apache_request_auth_type()\",\n        \"\"\n    ],\n    \"apache_request_discard_request_body\": [\n        \"long apache_request_discard_request_body()\",\n        \"\"\n    ],\n    \"apache_request_err_headers_out\": [\n        \"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all headers that go out in case of an error or a subrequest\"\n    ],\n    \"apache_request_headers\": [\n        \"array apache_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"apache_request_headers_in\": [\n        \"array apache_request_headers_in()\",\n        \"* fetch all incoming request headers\"\n    ],\n    \"apache_request_headers_out\": [\n        \"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all outgoing request headers\"\n    ],\n    \"apache_request_is_initial_req\": [\n        \"bool apache_request_is_initial_req()\",\n        \"\"\n    ],\n    \"apache_request_log_error\": [\n        \"boolean apache_request_log_error(string message, [long facility])\",\n        \"\"\n    ],\n    \"apache_request_meets_conditions\": [\n        \"long apache_request_meets_conditions()\",\n        \"\"\n    ],\n    \"apache_request_remote_host\": [\n        \"int apache_request_remote_host([int type])\",\n        \"\"\n    ],\n    \"apache_request_run\": [\n        \"long apache_request_run()\",\n        \"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"\n    ],\n    \"apache_request_satisfies\": [\n        \"long apache_request_satisfies()\",\n        \"\"\n    ],\n    \"apache_request_server_port\": [\n        \"int apache_request_server_port()\",\n        \"\"\n    ],\n    \"apache_request_set_etag\": [\n        \"void apache_request_set_etag()\",\n        \"\"\n    ],\n    \"apache_request_set_last_modified\": [\n        \"void apache_request_set_last_modified()\",\n        \"\"\n    ],\n    \"apache_request_some_auth_required\": [\n        \"bool apache_request_some_auth_required()\",\n        \"\"\n    ],\n    \"apache_request_sub_req_lookup_file\": [\n        \"object apache_request_sub_req_lookup_file(string file)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_sub_req_lookup_uri\": [\n        \"object apache_request_sub_req_lookup_uri(string uri)\",\n        \"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"\n    ],\n    \"apache_request_sub_req_method_uri\": [\n        \"object apache_request_sub_req_method_uri(string method, string uri)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_update_mtime\": [\n        \"long apache_request_update_mtime([int dependency_mtime])\",\n        \"\"\n    ],\n    \"apache_reset_timeout\": [\n        \"bool apache_reset_timeout(void)\",\n        \"Reset the Apache write timer\"\n    ],\n    \"apache_response_headers\": [\n        \"array apache_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"apache_setenv\": [\n        \"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\n        \"Set an Apache subprocess_env variable\"\n    ],\n    \"array_change_key_case\": [\n        \"array array_change_key_case(array input [, int case=CASE_LOWER])\",\n        \"Retuns an array with all string keys lowercased [or uppercased]\"\n    ],\n    \"array_chunk\": [\n        \"array array_chunk(array input, int size [, bool preserve_keys])\",\n        \"Split array into chunks\"\n    ],\n    \"array_combine\": [\n        \"array array_combine(array keys, array values)\",\n        \"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"\n    ],\n    \"array_count_values\": [\n        \"array array_count_values(array input)\",\n        \"Return the value as key and the frequency of that value in input as value\"\n    ],\n    \"array_diff\": [\n        \"array array_diff(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"\n    ],\n    \"array_diff_assoc\": [\n        \"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"\n    ],\n    \"array_diff_key\": [\n        \"array array_diff_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_diff_uassoc\": [\n        \"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"\n    ],\n    \"array_diff_ukey\": [\n        \"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_fill\": [\n        \"array array_fill(int start_key, int num, mixed val)\",\n        \"Create an array containing num elements starting with index start_key each initialized to val\"\n    ],\n    \"array_fill_keys\": [\n        \"array array_fill_keys(array keys, mixed val)\",\n        \"Create an array using the elements of the first parameter as keys each initialized to val\"\n    ],\n    \"array_filter\": [\n        \"array array_filter(array input [, mixed callback])\",\n        \"Filters elements from the array via the callback.\"\n    ],\n    \"array_flip\": [\n        \"array array_flip(array input)\",\n        \"Return array with key <-> value flipped\"\n    ],\n    \"array_intersect\": [\n        \"array array_intersect(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments\"\n    ],\n    \"array_intersect_assoc\": [\n        \"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"\n    ],\n    \"array_intersect_key\": [\n        \"array array_intersect_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"\n    ],\n    \"array_intersect_uassoc\": [\n        \"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"\n    ],\n    \"array_intersect_ukey\": [\n        \"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"\n    ],\n    \"array_key_exists\": [\n        \"bool array_key_exists(mixed key, array search)\",\n        \"Checks if the given key or index exists in the array\"\n    ],\n    \"array_keys\": [\n        \"array array_keys(array input [, mixed search_value[, bool strict]])\",\n        \"Return just the keys from the input array, optionally only for the specified search_value\"\n    ],\n    \"array_map\": [\n        \"array array_map(mixed callback, array input1 [, array input2 ,...])\",\n        \"Applies the callback to the elements in given arrays.\"\n    ],\n    \"array_merge\": [\n        \"array array_merge(array arr1, array arr2 [, array ...])\",\n        \"Merges elements from passed arrays into one array\"\n    ],\n    \"array_merge_recursive\": [\n        \"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively merges elements from passed arrays into one array\"\n    ],\n    \"array_multisort\": [\n        \"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\n        \"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"\n    ],\n    \"array_pad\": [\n        \"array array_pad(array input, int pad_size, mixed pad_value)\",\n        \"Returns a copy of input array padded with pad_value to size pad_size\"\n    ],\n    \"array_pop\": [\n        \"mixed array_pop(array stack)\",\n        \"Pops an element off the end of the array\"\n    ],\n    \"array_product\": [\n        \"mixed array_product(array input)\",\n        \"Returns the product of the array entries\"\n    ],\n    \"array_push\": [\n        \"int array_push(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the end of the array\"\n    ],\n    \"array_rand\": [\n        \"mixed array_rand(array input [, int num_req])\",\n        \"Return key/keys for random entry/entries in the array\"\n    ],\n    \"array_reduce\": [\n        \"mixed array_reduce(array input, mixed callback [, mixed initial])\",\n        \"Iteratively reduce the array to a single value via the callback.\"\n    ],\n    \"array_replace\": [\n        \"array array_replace(array arr1, array arr2 [, array ...])\",\n        \"Replaces elements from passed arrays into one array\"\n    ],\n    \"array_replace_recursive\": [\n        \"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively replaces elements from passed arrays into one array\"\n    ],\n    \"array_reverse\": [\n        \"array array_reverse(array input [, bool preserve keys])\",\n        \"Return input as a new array with the order of the entries reversed\"\n    ],\n    \"array_search\": [\n        \"mixed array_search(mixed needle, array haystack [, bool strict])\",\n        \"Searches the array for a given value and returns the corresponding key if successful\"\n    ],\n    \"array_shift\": [\n        \"mixed array_shift(array stack)\",\n        \"Pops an element off the beginning of the array\"\n    ],\n    \"array_slice\": [\n        \"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\n        \"Returns elements specified by offset and length\"\n    ],\n    \"array_splice\": [\n        \"array array_splice(array input, int offset [, int length [, array replacement]])\",\n        \"Removes the elements designated by offset and length and replace them with supplied array\"\n    ],\n    \"array_sum\": [\n        \"mixed array_sum(array input)\",\n        \"Returns the sum of the array entries\"\n    ],\n    \"array_udiff\": [\n        \"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"\n    ],\n    \"array_udiff_assoc\": [\n        \"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"\n    ],\n    \"array_udiff_uassoc\": [\n        \"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"\n    ],\n    \"array_uintersect\": [\n        \"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_assoc\": [\n        \"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_uassoc\": [\n        \"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"\n    ],\n    \"array_unique\": [\n        \"array array_unique(array input [, int sort_flags])\",\n        \"Removes duplicate values from array\"\n    ],\n    \"array_unshift\": [\n        \"int array_unshift(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the beginning of the array\"\n    ],\n    \"array_values\": [\n        \"array array_values(array input)\",\n        \"Return just the values from the input array\"\n    ],\n    \"array_walk\": [\n        \"bool array_walk(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function to every member of an array\"\n    ],\n    \"array_walk_recursive\": [\n        \"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function recursively to every member of an array\"\n    ],\n    \"arsort\": [\n        \"bool arsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order and maintain index association\"\n    ],\n    \"asin\": [\n        \"float asin(float number)\",\n        \"Returns the arc sine of the number in radians\"\n    ],\n    \"asinh\": [\n        \"float asinh(float number)\",\n        \"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"\n    ],\n    \"asort\": [\n        \"bool asort(array &array_arg [, int sort_flags])\",\n        \"Sort an array and maintain index association\"\n    ],\n    \"assert\": [\n        \"int assert(string|bool assertion)\",\n        \"Checks if assertion is false\"\n    ],\n    \"assert_options\": [\n        \"mixed assert_options(int what [, mixed value])\",\n        \"Set/get the various assert flags\"\n    ],\n    \"atan\": [\n        \"float atan(float number)\",\n        \"Returns the arc tangent of the number in radians\"\n    ],\n    \"atan2\": [\n        \"float atan2(float y, float x)\",\n        \"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"\n    ],\n    \"atanh\": [\n        \"float atanh(float number)\",\n        \"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"\n    ],\n    \"attachIterator\": [\n        \"void attachIterator(Iterator iterator[, mixed info])\",\n        \"Attach a new iterator\"\n    ],\n    \"base64_decode\": [\n        \"string base64_decode(string str[, bool strict])\",\n        \"Decodes string using MIME base64 algorithm\"\n    ],\n    \"base64_encode\": [\n        \"string base64_encode(string str)\",\n        \"Encodes string using MIME base64 algorithm\"\n    ],\n    \"base_convert\": [\n        \"string base_convert(string number, int frombase, int tobase)\",\n        \"Converts a number in a string from any base <= 36 to any base <= 36\"\n    ],\n    \"basename\": [\n        \"string basename(string path [, string suffix])\",\n        \"Returns the filename component of the path\"\n    ],\n    \"bcadd\": [\n        \"string bcadd(string left_operand, string right_operand [, int scale])\",\n        \"Returns the sum of two arbitrary precision numbers\"\n    ],\n    \"bccomp\": [\n        \"int bccomp(string left_operand, string right_operand [, int scale])\",\n        \"Compares two arbitrary precision numbers\"\n    ],\n    \"bcdiv\": [\n        \"string bcdiv(string left_operand, string right_operand [, int scale])\",\n        \"Returns the quotient of two arbitrary precision numbers (division)\"\n    ],\n    \"bcmod\": [\n        \"string bcmod(string left_operand, string right_operand)\",\n        \"Returns the modulus of the two arbitrary precision operands\"\n    ],\n    \"bcmul\": [\n        \"string bcmul(string left_operand, string right_operand [, int scale])\",\n        \"Returns the multiplication of two arbitrary precision numbers\"\n    ],\n    \"bcpow\": [\n        \"string bcpow(string x, string y [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another\"\n    ],\n    \"bcpowmod\": [\n        \"string bcpowmod(string x, string y, string mod [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"\n    ],\n    \"bcscale\": [\n        \"bool bcscale(int scale)\",\n        \"Sets default scale parameter for all bc math functions\"\n    ],\n    \"bcsqrt\": [\n        \"string bcsqrt(string operand [, int scale])\",\n        \"Returns the square root of an arbitray precision number\"\n    ],\n    \"bcsub\": [\n        \"string bcsub(string left_operand, string right_operand [, int scale])\",\n        \"Returns the difference between two arbitrary precision numbers\"\n    ],\n    \"bin2hex\": [\n        \"string bin2hex(string data)\",\n        \"Converts the binary representation of data to hex\"\n    ],\n    \"bind_textdomain_codeset\": [\n        \"string bind_textdomain_codeset (string domain, string codeset)\",\n        \"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"\n    ],\n    \"bindec\": [\n        \"int bindec(string binary_number)\",\n        \"Returns the decimal equivalent of the binary number\"\n    ],\n    \"bindtextdomain\": [\n        \"string bindtextdomain(string domain_name, string dir)\",\n        \"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"\n    ],\n    \"birdstep_autocommit\": [\n        \"bool birdstep_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_close\": [\n        \"bool birdstep_close(int id)\",\n        \"\"\n    ],\n    \"birdstep_commit\": [\n        \"bool birdstep_commit(int index)\",\n        \"\"\n    ],\n    \"birdstep_connect\": [\n        \"int birdstep_connect(string server, string user, string pass)\",\n        \"\"\n    ],\n    \"birdstep_exec\": [\n        \"int birdstep_exec(int index, string exec_str)\",\n        \"\"\n    ],\n    \"birdstep_fetch\": [\n        \"bool birdstep_fetch(int index)\",\n        \"\"\n    ],\n    \"birdstep_fieldname\": [\n        \"string birdstep_fieldname(int index, int col)\",\n        \"\"\n    ],\n    \"birdstep_fieldnum\": [\n        \"int birdstep_fieldnum(int index)\",\n        \"\"\n    ],\n    \"birdstep_freeresult\": [\n        \"bool birdstep_freeresult(int index)\",\n        \"\"\n    ],\n    \"birdstep_off_autocommit\": [\n        \"bool birdstep_off_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_result\": [\n        \"mixed birdstep_result(int index, mixed col)\",\n        \"\"\n    ],\n    \"birdstep_rollback\": [\n        \"bool birdstep_rollback(int index)\",\n        \"\"\n    ],\n    \"bzcompress\": [\n        \"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\n        \"Compresses a string into BZip2 encoded data\"\n    ],\n    \"bzdecompress\": [\n        \"string bzdecompress(string source [, int small])\",\n        \"Decompresses BZip2 compressed data\"\n    ],\n    \"bzerrno\": [\n        \"int bzerrno(resource bz)\",\n        \"Returns the error number\"\n    ],\n    \"bzerror\": [\n        \"array bzerror(resource bz)\",\n        \"Returns the error number and error string in an associative array\"\n    ],\n    \"bzerrstr\": [\n        \"string bzerrstr(resource bz)\",\n        \"Returns the error string\"\n    ],\n    \"bzopen\": [\n        \"resource bzopen(string|int file|fp, string mode)\",\n        \"Opens a new BZip2 stream\"\n    ],\n    \"bzread\": [\n        \"string bzread(resource bz[, int length])\",\n        \"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"\n    ],\n    \"cal_days_in_month\": [\n        \"int cal_days_in_month(int calendar, int month, int year)\",\n        \"Returns the number of days in a month for a given year and calendar\"\n    ],\n    \"cal_from_jd\": [\n        \"array cal_from_jd(int jd, int calendar)\",\n        \"Converts from Julian Day Count to a supported calendar and return extended information\"\n    ],\n    \"cal_info\": [\n        \"array cal_info([int calendar])\",\n        \"Returns information about a particular calendar\"\n    ],\n    \"cal_to_jd\": [\n        \"int cal_to_jd(int calendar, int month, int day, int year)\",\n        \"Converts from a supported calendar to Julian Day Count\"\n    ],\n    \"call_user_func\": [\n        \"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"call_user_func_array\": [\n        \"mixed call_user_func_array(string function_name, array parameters)\",\n        \"Call a user function which is the first parameter with the arguments contained in array\"\n    ],\n    \"call_user_method\": [\n        \"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\n        \"Call a user method on a specific object or class\"\n    ],\n    \"call_user_method_array\": [\n        \"mixed call_user_method_array(string method_name, mixed object, array params)\",\n        \"Call a user method on a specific object or class using a parameter array\"\n    ],\n    \"ceil\": [\n        \"float ceil(float number)\",\n        \"Returns the next highest integer value of the number\"\n    ],\n    \"chdir\": [\n        \"bool chdir(string directory)\",\n        \"Change the current directory\"\n    ],\n    \"checkdate\": [\n        \"bool checkdate(int month, int day, int year)\",\n        \"Returns true(1) if it is a valid date in gregorian calendar\"\n    ],\n    \"chgrp\": [\n        \"bool chgrp(string filename, mixed group)\",\n        \"Change file group\"\n    ],\n    \"chmod\": [\n        \"bool chmod(string filename, int mode)\",\n        \"Change file mode\"\n    ],\n    \"chown\": [\n        \"bool chown (string filename, mixed user)\",\n        \"Change file owner\"\n    ],\n    \"chr\": [\n        \"string chr(int ascii)\",\n        \"Converts ASCII code to a character\"\n    ],\n    \"chroot\": [\n        \"bool chroot(string directory)\",\n        \"Change root directory\"\n    ],\n    \"chunk_split\": [\n        \"string chunk_split(string str [, int chunklen [, string ending]])\",\n        \"Returns split line\"\n    ],\n    \"class_alias\": [\n        \"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\n        \"Creates an alias for user defined class\"\n    ],\n    \"class_exists\": [\n        \"bool class_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"class_implements\": [\n        \"array class_implements(mixed what [, bool autoload ])\",\n        \"Return all classes and interfaces implemented by SPL\"\n    ],\n    \"class_parents\": [\n        \"array class_parents(object instance [, boolean autoload = true])\",\n        \"Return an array containing the names of all parent classes\"\n    ],\n    \"clearstatcache\": [\n        \"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\n        \"Clear file stat cache\"\n    ],\n    \"closedir\": [\n        \"void closedir([resource dir_handle])\",\n        \"Close directory connection identified by the dir_handle\"\n    ],\n    \"closelog\": [\n        \"bool closelog(void)\",\n        \"Close connection to system logger\"\n    ],\n    \"collator_asort\": [\n        \"bool collator_asort( Collator $coll, array(string) $arr )\",\n        \"* Sort array using specified collator, maintaining index association.\"\n    ],\n    \"collator_compare\": [\n        \"int collator_compare( Collator $coll, string $str1, string $str2 )\",\n        \"* Compare two strings.\"\n    ],\n    \"collator_create\": [\n        \"Collator collator_create( string $locale )\",\n        \"* Create collator.\"\n    ],\n    \"collator_get_attribute\": [\n        \"int collator_get_attribute( Collator $coll, int $attr )\",\n        \"* Get collation attribute value.\"\n    ],\n    \"collator_get_error_code\": [\n        \"int collator_get_error_code( Collator $coll )\",\n        \"* Get collator's last error code.\"\n    ],\n    \"collator_get_error_message\": [\n        \"string collator_get_error_message( Collator $coll )\",\n        \"* Get text description for collator's last error code.\"\n    ],\n    \"collator_get_locale\": [\n        \"string collator_get_locale( Collator $coll, int $type )\",\n        \"* Gets the locale name of the collator.\"\n    ],\n    \"collator_get_sort_key\": [\n        \"bool collator_get_sort_key( Collator $coll, string $str )\",\n        \"* Get a sort key for a string from a Collator. }}}\"\n    ],\n    \"collator_get_strength\": [\n        \"int collator_get_strength(Collator coll)\",\n        \"* Returns the current collation strength.\"\n    ],\n    \"collator_set_attribute\": [\n        \"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\n        \"* Set collation attribute.\"\n    ],\n    \"collator_set_strength\": [\n        \"bool collator_set_strength(Collator coll, int strength)\",\n        \"* Set the collation strength.\"\n    ],\n    \"collator_sort\": [\n        \"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\n        \"* Sort array using specified collator.\"\n    ],\n    \"collator_sort_with_sort_keys\": [\n        \"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\n        \"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"\n    ],\n    \"com_create_guid\": [\n        \"string com_create_guid()\",\n        \"Generate a globally unique identifier (GUID)\"\n    ],\n    \"com_event_sink\": [\n        \"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\n        \"Connect events from a COM object to a PHP object\"\n    ],\n    \"com_get_active_object\": [\n        \"object com_get_active_object(string progid [, int code_page ])\",\n        \"Returns a handle to an already running instance of a COM object\"\n    ],\n    \"com_load_typelib\": [\n        \"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\n        \"Loads a Typelibrary and registers its constants\"\n    ],\n    \"com_message_pump\": [\n        \"bool com_message_pump([int timeoutms])\",\n        \"Process COM messages, sleeping for up to timeoutms milliseconds\"\n    ],\n    \"com_print_typeinfo\": [\n        \"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\n        \"Print out a PHP class definition for a dispatchable interface\"\n    ],\n    \"compact\": [\n        \"array compact(mixed var_names [, mixed ...])\",\n        \"Creates a hash containing variables and their values\"\n    ],\n    \"compose_locale\": [\n        \"static string compose_locale($array)\",\n        \"* Creates a locale by combining the parts of locale-ID passed  * }}}\"\n    ],\n    \"confirm_extname_compiled\": [\n        \"string confirm_extname_compiled(string arg)\",\n        \"Return a string to confirm that the module is compiled in\"\n    ],\n    \"connection_aborted\": [\n        \"int connection_aborted(void)\",\n        \"Returns true if client disconnected\"\n    ],\n    \"connection_status\": [\n        \"int connection_status(void)\",\n        \"Returns the connection status bitfield\"\n    ],\n    \"constant\": [\n        \"mixed constant(string const_name)\",\n        \"Given the name of a constant this function will return the constant's associated value\"\n    ],\n    \"convert_cyr_string\": [\n        \"string convert_cyr_string(string str, string from, string to)\",\n        \"Convert from one Cyrillic character set to another\"\n    ],\n    \"convert_uudecode\": [\n        \"string convert_uudecode(string data)\",\n        \"decode a uuencoded string\"\n    ],\n    \"convert_uuencode\": [\n        \"string convert_uuencode(string data)\",\n        \"uuencode a string\"\n    ],\n    \"copy\": [\n        \"bool copy(string source_file, string destination_file [, resource context])\",\n        \"Copy a file\"\n    ],\n    \"cos\": [\n        \"float cos(float number)\",\n        \"Returns the cosine of the number in radians\"\n    ],\n    \"cosh\": [\n        \"float cosh(float number)\",\n        \"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"\n    ],\n    \"count\": [\n        \"int count(mixed var [, int mode])\",\n        \"Count the number of elements in a variable (usually an array)\"\n    ],\n    \"count_chars\": [\n        \"mixed count_chars(string input [, int mode])\",\n        \"Returns info about what characters are used in input\"\n    ],\n    \"crc32\": [\n        \"string crc32(string str)\",\n        \"Calculate the crc32 polynomial of a string\"\n    ],\n    \"create_function\": [\n        \"string create_function(string args, string code)\",\n        \"Creates an anonymous function, and returns its name (funny, eh?)\"\n    ],\n    \"crypt\": [\n        \"string crypt(string str [, string salt])\",\n        \"Hash a string\"\n    ],\n    \"ctype_alnum\": [\n        \"bool ctype_alnum(mixed c)\",\n        \"Checks for alphanumeric character(s)\"\n    ],\n    \"ctype_alpha\": [\n        \"bool ctype_alpha(mixed c)\",\n        \"Checks for alphabetic character(s)\"\n    ],\n    \"ctype_cntrl\": [\n        \"bool ctype_cntrl(mixed c)\",\n        \"Checks for control character(s)\"\n    ],\n    \"ctype_digit\": [\n        \"bool ctype_digit(mixed c)\",\n        \"Checks for numeric character(s)\"\n    ],\n    \"ctype_graph\": [\n        \"bool ctype_graph(mixed c)\",\n        \"Checks for any printable character(s) except space\"\n    ],\n    \"ctype_lower\": [\n        \"bool ctype_lower(mixed c)\",\n        \"Checks for lowercase character(s)\"\n    ],\n    \"ctype_print\": [\n        \"bool ctype_print(mixed c)\",\n        \"Checks for printable character(s)\"\n    ],\n    \"ctype_punct\": [\n        \"bool ctype_punct(mixed c)\",\n        \"Checks for any printable character which is not whitespace or an alphanumeric character\"\n    ],\n    \"ctype_space\": [\n        \"bool ctype_space(mixed c)\",\n        \"Checks for whitespace character(s)\"\n    ],\n    \"ctype_upper\": [\n        \"bool ctype_upper(mixed c)\",\n        \"Checks for uppercase character(s)\"\n    ],\n    \"ctype_xdigit\": [\n        \"bool ctype_xdigit(mixed c)\",\n        \"Checks for character(s) representing a hexadecimal digit\"\n    ],\n    \"curl_close\": [\n        \"void curl_close(resource ch)\",\n        \"Close a cURL session\"\n    ],\n    \"curl_copy_handle\": [\n        \"resource curl_copy_handle(resource ch)\",\n        \"Copy a cURL handle along with all of it's preferences\"\n    ],\n    \"curl_errno\": [\n        \"int curl_errno(resource ch)\",\n        \"Return an integer containing the last error number\"\n    ],\n    \"curl_error\": [\n        \"string curl_error(resource ch)\",\n        \"Return a string contain the last error for the current session\"\n    ],\n    \"curl_exec\": [\n        \"bool curl_exec(resource ch)\",\n        \"Perform a cURL session\"\n    ],\n    \"curl_getinfo\": [\n        \"mixed curl_getinfo(resource ch [, int option])\",\n        \"Get information regarding a specific transfer\"\n    ],\n    \"curl_init\": [\n        \"resource curl_init([string url])\",\n        \"Initialize a cURL session\"\n    ],\n    \"curl_multi_add_handle\": [\n        \"int curl_multi_add_handle(resource mh, resource ch)\",\n        \"Add a normal cURL handle to a cURL multi handle\"\n    ],\n    \"curl_multi_close\": [\n        \"void curl_multi_close(resource mh)\",\n        \"Close a set of cURL handles\"\n    ],\n    \"curl_multi_exec\": [\n        \"int curl_multi_exec(resource mh, int &still_running)\",\n        \"Run the sub-connections of the current cURL handle\"\n    ],\n    \"curl_multi_getcontent\": [\n        \"string curl_multi_getcontent(resource ch)\",\n        \"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"\n    ],\n    \"curl_multi_info_read\": [\n        \"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\n        \"Get information about the current transfers\"\n    ],\n    \"curl_multi_init\": [\n        \"resource curl_multi_init(void)\",\n        \"Returns a new cURL multi handle\"\n    ],\n    \"curl_multi_remove_handle\": [\n        \"int curl_multi_remove_handle(resource mh, resource ch)\",\n        \"Remove a multi handle from a set of cURL handles\"\n    ],\n    \"curl_multi_select\": [\n        \"int curl_multi_select(resource mh[, double timeout])\",\n        \"Get all the sockets associated with the cURL extension, which can then be \\\"selected\\\"\"\n    ],\n    \"curl_setopt\": [\n        \"bool curl_setopt(resource ch, int option, mixed value)\",\n        \"Set an option for a cURL transfer\"\n    ],\n    \"curl_setopt_array\": [\n        \"bool curl_setopt_array(resource ch, array options)\",\n        \"Set an array of option for a cURL transfer\"\n    ],\n    \"curl_version\": [\n        \"array curl_version([int version])\",\n        \"Return cURL version information.\"\n    ],\n    \"current\": [\n        \"mixed current(array array_arg)\",\n        \"Return the element currently pointed to by the internal array pointer\"\n    ],\n    \"date\": [\n        \"string date(string format [, long timestamp])\",\n        \"Format a local date/time\"\n    ],\n    \"date_add\": [\n        \"DateTime date_add(DateTime object, DateInterval interval)\",\n        \"Adds an interval to the current date in object.\"\n    ],\n    \"date_create\": [\n        \"DateTime date_create([string time[, DateTimeZone object]])\",\n        \"Returns new DateTime object\"\n    ],\n    \"date_create_from_format\": [\n        \"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\n        \"Returns new DateTime object formatted according to the specified format\"\n    ],\n    \"date_date_set\": [\n        \"DateTime date_date_set(DateTime object, long year, long month, long day)\",\n        \"Sets the date.\"\n    ],\n    \"date_default_timezone_get\": [\n        \"string date_default_timezone_get()\",\n        \"Gets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_default_timezone_set\": [\n        \"bool date_default_timezone_set(string timezone_identifier)\",\n        \"Sets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_diff\": [\n        \"DateInterval date_diff(DateTime object [, bool absolute])\",\n        \"Returns the difference between two DateTime objects.\"\n    ],\n    \"date_format\": [\n        \"string date_format(DateTime object, string format)\",\n        \"Returns date formatted according to given format\"\n    ],\n    \"date_get_last_errors\": [\n        \"array date_get_last_errors()\",\n        \"Returns the warnings and errors found while parsing a date/time string.\"\n    ],\n    \"date_interval_create_from_date_string\": [\n        \"DateInterval date_interval_create_from_date_string(string time)\",\n        \"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"\n    ],\n    \"date_interval_format\": [\n        \"string date_interval_format(DateInterval object, string format)\",\n        \"Formats the interval.\"\n    ],\n    \"date_isodate_set\": [\n        \"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\n        \"Sets the ISO date.\"\n    ],\n    \"date_modify\": [\n        \"DateTime date_modify(DateTime object, string modify)\",\n        \"Alters the timestamp.\"\n    ],\n    \"date_offset_get\": [\n        \"long date_offset_get(DateTime object)\",\n        \"Returns the DST offset.\"\n    ],\n    \"date_parse\": [\n        \"array date_parse(string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_parse_from_format\": [\n        \"array date_parse_from_format(string format, string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_sub\": [\n        \"DateTime date_sub(DateTime object, DateInterval interval)\",\n        \"Subtracts an interval to the current date in object.\"\n    ],\n    \"date_sun_info\": [\n        \"array date_sun_info(long time, float latitude, float longitude)\",\n        \"Returns an array with information about sun set/rise and twilight begin/end\"\n    ],\n    \"date_sunrise\": [\n        \"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunrise for a given day and location\"\n    ],\n    \"date_sunset\": [\n        \"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunset for a given day and location\"\n    ],\n    \"date_time_set\": [\n        \"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\n        \"Sets the time.\"\n    ],\n    \"date_timestamp_get\": [\n        \"long date_timestamp_get(DateTime object)\",\n        \"Gets the Unix timestamp.\"\n    ],\n    \"date_timestamp_set\": [\n        \"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\n        \"Sets the date and time based on an Unix timestamp.\"\n    ],\n    \"date_timezone_get\": [\n        \"DateTimeZone date_timezone_get(DateTime object)\",\n        \"Return new DateTimeZone object relative to give DateTime\"\n    ],\n    \"date_timezone_set\": [\n        \"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\n        \"Sets the timezone for the DateTime object.\"\n    ],\n    \"datefmt_create\": [\n        \"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\n        \"* Create formatter.\"\n    ],\n    \"datefmt_format\": [\n        \"string datefmt_format( [mixed]int $args or array $args )\",\n        \"* Format the time value as a string. }}}\"\n    ],\n    \"datefmt_get_calendar\": [\n        \"string datefmt_get_calendar( IntlDateFormatter $mf )\",\n        \"* Get formatter calendar.\"\n    ],\n    \"datefmt_get_datetype\": [\n        \"string datefmt_get_datetype( IntlDateFormatter $mf )\",\n        \"* Get formatter datetype.\"\n    ],\n    \"datefmt_get_error_code\": [\n        \"int datefmt_get_error_code( IntlDateFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"datefmt_get_error_message\": [\n        \"string datefmt_get_error_message( IntlDateFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"datefmt_get_locale\": [\n        \"string datefmt_get_locale(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_get_pattern\": [\n        \"string datefmt_get_pattern( IntlDateFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"datefmt_get_timetype\": [\n        \"string datefmt_get_timetype( IntlDateFormatter $mf )\",\n        \"* Get formatter timetype.\"\n    ],\n    \"datefmt_get_timezone_id\": [\n        \"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\n        \"* Get formatter timezone_id.\"\n    ],\n    \"datefmt_isLenient\": [\n        \"string datefmt_isLenient(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_localtime\": [\n        \"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\n        \"* Parse the string $value to a localtime array  }}}\"\n    ],\n    \"datefmt_parse\": [\n        \"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\n        \"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"\n    ],\n    \"datefmt_setLenient\": [\n        \"string datefmt_setLenient(IntlDateFormatter $mf)\",\n        \"* Set formatter lenient.\"\n    ],\n    \"datefmt_set_calendar\": [\n        \"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\n        \"* Set formatter calendar.\"\n    ],\n    \"datefmt_set_pattern\": [\n        \"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"datefmt_set_timezone_id\": [\n        \"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\n        \"* Set formatter timezone_id.\"\n    ],\n    \"dba_close\": [\n        \"void dba_close(resource handle)\",\n        \"Closes database\"\n    ],\n    \"dba_delete\": [\n        \"bool dba_delete(string key, resource handle)\",\n        \"Deletes the entry associated with key    If inifile: remove all other key lines\"\n    ],\n    \"dba_exists\": [\n        \"bool dba_exists(string key, resource handle)\",\n        \"Checks, if the specified key exists\"\n    ],\n    \"dba_fetch\": [\n        \"string dba_fetch(string key, [int skip ,] resource handle)\",\n        \"Fetches the data associated with key\"\n    ],\n    \"dba_firstkey\": [\n        \"string dba_firstkey(resource handle)\",\n        \"Resets the internal key pointer and returns the first key\"\n    ],\n    \"dba_handlers\": [\n        \"array dba_handlers([bool full_info])\",\n        \"List configured database handlers\"\n    ],\n    \"dba_insert\": [\n        \"bool dba_insert(string key, string value, resource handle)\",\n        \"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"\n    ],\n    \"dba_key_split\": [\n        \"array|false dba_key_split(string key)\",\n        \"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"\n    ],\n    \"dba_list\": [\n        \"array dba_list()\",\n        \"List opened databases\"\n    ],\n    \"dba_nextkey\": [\n        \"string dba_nextkey(resource handle)\",\n        \"Returns the next key\"\n    ],\n    \"dba_open\": [\n        \"resource dba_open(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode\"\n    ],\n    \"dba_optimize\": [\n        \"bool dba_optimize(resource handle)\",\n        \"Optimizes (e.g. clean up, vacuum) database\"\n    ],\n    \"dba_popen\": [\n        \"resource dba_popen(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode persistently\"\n    ],\n    \"dba_replace\": [\n        \"bool dba_replace(string key, string value, resource handle)\",\n        \"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"\n    ],\n    \"dba_sync\": [\n        \"bool dba_sync(resource handle)\",\n        \"Synchronizes database\"\n    ],\n    \"dcgettext\": [\n        \"string dcgettext(string domain_name, string msgid, long category)\",\n        \"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"\n    ],\n    \"dcngettext\": [\n        \"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\n        \"Plural version of dcgettext()\"\n    ],\n    \"debug_backtrace\": [\n        \"array debug_backtrace([bool provide_object])\",\n        \"Return backtrace as array\"\n    ],\n    \"debug_print_backtrace\": [\n        \"void debug_print_backtrace(void) */\",\n        \"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"\n    ],\n    \"dom_document_relaxNG_validate_xml\": [\n        \"boolean dom_document_relaxNG_validate_xml(string source); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"\n    ],\n    \"dom_document_rename_node\": [\n        \"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"\n    ],\n    \"dom_document_save\": [\n        \"int dom_document_save(string file);\",\n        \"Convenience method to save to file\"\n    ],\n    \"dom_document_save_html\": [\n        \"string dom_document_save_html();\",\n        \"Convenience method to output as html\"\n    ],\n    \"dom_document_save_html_file\": [\n        \"int dom_document_save_html_file(string file);\",\n        \"Convenience method to save to file as html\"\n    ],\n    \"dom_document_savexml\": [\n        \"string dom_document_savexml([node n]);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"\n    ],\n    \"dom_document_schema_validate\": [\n        \"boolean dom_document_schema_validate(string source); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"\n    ],\n    \"dom_document_schema_validate_file\": [\n        \"boolean dom_document_schema_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"\n    ],\n    \"dom_document_validate\": [\n        \"boolean dom_document_validate();\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_xinclude\": [\n        \"int dom_document_xinclude([int options])\",\n        \"Substitutues xincludes in a DomDocument\"\n    ],\n    \"dom_domconfiguration_can_set_parameter\": [\n        \"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"\n    ],\n    \"dom_domconfiguration_get_parameter\": [\n        \"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"\n    ],\n    \"dom_domconfiguration_set_parameter\": [\n        \"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"\n    ],\n    \"dom_domerrorhandler_handle_error\": [\n        \"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"\n    ],\n    \"dom_domimplementation_create_document\": [\n        \"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_create_document_type\": [\n        \"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_get_feature\": [\n        \"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_domimplementation_has_feature\": [\n        \"boolean dom_domimplementation_has_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"\n    ],\n    \"dom_domimplementationlist_item\": [\n        \"domdomimplementation dom_domimplementationlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementation\": [\n        \"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementations\": [\n        \"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"\n    ],\n    \"dom_domstringlist_item\": [\n        \"domstring dom_domstringlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"\n    ],\n    \"dom_element_get_attribute\": [\n        \"string dom_element_get_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"\n    ],\n    \"dom_element_get_attribute_node\": [\n        \"DOMAttr dom_element_get_attribute_node(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"\n    ],\n    \"dom_element_get_attribute_node_ns\": [\n        \"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_attribute_ns\": [\n        \"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"\n    ],\n    \"dom_element_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute\": [\n        \"boolean dom_element_has_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute_ns\": [\n        \"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_remove_attribute\": [\n        \"void dom_element_remove_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"\n    ],\n    \"dom_element_remove_attribute_node\": [\n        \"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"\n    ],\n    \"dom_element_remove_attribute_ns\": [\n        \"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute\": [\n        \"void dom_element_set_attribute(string name, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"\n    ],\n    \"dom_element_set_attribute_node\": [\n        \"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"\n    ],\n    \"dom_element_set_attribute_node_ns\": [\n        \"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute_ns\": [\n        \"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_id_attribute\": [\n        \"void dom_element_set_id_attribute(string name, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_node\": [\n        \"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_ns\": [\n        \"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"\n    ],\n    \"dom_import_simplexml\": [\n        \"somNode dom_import_simplexml(sxeobject node)\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"dom_namednodemap_get_named_item\": [\n        \"DOMNode dom_namednodemap_get_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"\n    ],\n    \"dom_namednodemap_get_named_item_ns\": [\n        \"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_item\": [\n        \"DOMNode dom_namednodemap_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item\": [\n        \"DOMNode dom_namednodemap_remove_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item_ns\": [\n        \"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_set_named_item\": [\n        \"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"\n    ],\n    \"dom_namednodemap_set_named_item_ns\": [\n        \"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namelist_get_name\": [\n        \"string dom_namelist_get_name(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"\n    ],\n    \"dom_namelist_get_namespace_uri\": [\n        \"string dom_namelist_get_namespace_uri(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"\n    ],\n    \"dom_node_append_child\": [\n        \"DomNode dom_node_append_child(DomNode newChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"\n    ],\n    \"dom_node_clone_node\": [\n        \"DomNode dom_node_clone_node(boolean deep);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"\n    ],\n    \"dom_node_compare_document_position\": [\n        \"short dom_node_compare_document_position(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"\n    ],\n    \"dom_node_get_feature\": [\n        \"DomNode dom_node_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_node_get_user_data\": [\n        \"mixed dom_node_get_user_data(string key);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"\n    ],\n    \"dom_node_has_attributes\": [\n        \"boolean dom_node_has_attributes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"\n    ],\n    \"dom_node_has_child_nodes\": [\n        \"boolean dom_node_has_child_nodes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"\n    ],\n    \"dom_node_insert_before\": [\n        \"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"\n    ],\n    \"dom_node_is_default_namespace\": [\n        \"boolean dom_node_is_default_namespace(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"\n    ],\n    \"dom_node_is_equal_node\": [\n        \"boolean dom_node_is_equal_node(DomNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_same_node\": [\n        \"boolean dom_node_is_same_node(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_supported\": [\n        \"boolean dom_node_is_supported(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"\n    ],\n    \"dom_node_lookup_namespace_uri\": [\n        \"string dom_node_lookup_namespace_uri(string prefix);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"\n    ],\n    \"dom_node_lookup_prefix\": [\n        \"string dom_node_lookup_prefix(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"\n    ],\n    \"dom_node_normalize\": [\n        \"void dom_node_normalize();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"\n    ],\n    \"dom_node_remove_child\": [\n        \"DomNode dom_node_remove_child(DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"\n    ],\n    \"dom_node_replace_child\": [\n        \"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"\n    ],\n    \"dom_node_set_user_data\": [\n        \"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"\n    ],\n    \"dom_nodelist_item\": [\n        \"DOMNode dom_nodelist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"\n    ],\n    \"dom_string_extend_find_offset16\": [\n        \"int dom_string_extend_find_offset16(int offset32);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"\n    ],\n    \"dom_string_extend_find_offset32\": [\n        \"int dom_string_extend_find_offset32(int offset16);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"\n    ],\n    \"dom_text_is_whitespace_in_element_content\": [\n        \"boolean dom_text_is_whitespace_in_element_content();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"\n    ],\n    \"dom_text_replace_whole_text\": [\n        \"DOMText dom_text_replace_whole_text(string content);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"\n    ],\n    \"dom_text_split_text\": [\n        \"DOMText dom_text_split_text(int offset);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"\n    ],\n    \"dom_userdatahandler_handle\": [\n        \"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"\n    ],\n    \"dom_xpath_evaluate\": [\n        \"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"\n    ],\n    \"dom_xpath_query\": [\n        \"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"\n    ],\n    \"dom_xpath_register_ns\": [\n        \"boolean dom_xpath_register_ns(string prefix, string uri); */\",\n        \"PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Oss\\\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid XPath Context\\\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}\"\n    ],\n    \"dom_xpath_register_php_functions\": [\n        \"void dom_xpath_register_php_functions() */\",\n        \"PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"a\\\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions\"\n    ],\n    \"each\": [\n        \"array each(array arr)\",\n        \"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"\n    ],\n    \"easter_date\": [\n        \"int easter_date([int year])\",\n        \"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"\n    ],\n    \"easter_days\": [\n        \"int easter_days([int year, [int method]])\",\n        \"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"\n    ],\n    \"echo\": [\n        \"void echo(string arg1 [, string ...])\",\n        \"Output one or more strings\"\n    ],\n    \"empty\": [\n        \"bool empty( mixed var )\",\n        \"Determine whether a variable is empty\"\n    ],\n    \"enchant_broker_describe\": [\n        \"array enchant_broker_describe(resource broker)\",\n        \"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"\n    ],\n    \"enchant_broker_dict_exists\": [\n        \"bool enchant_broker_dict_exists(resource broker, string tag)\",\n        \"Whether a dictionary exists or not. Using non-empty tag\"\n    ],\n    \"enchant_broker_free\": [\n        \"boolean enchant_broker_free(resource broker)\",\n        \"Destroys the broker object and its dictionnaries\"\n    ],\n    \"enchant_broker_free_dict\": [\n        \"resource enchant_broker_free_dict(resource dict)\",\n        \"Free the dictionary resource\"\n    ],\n    \"enchant_broker_get_dict_path\": [\n        \"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\n        \"Get the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_get_error\": [\n        \"string enchant_broker_get_error(resource broker)\",\n        \"Returns the last error of the broker\"\n    ],\n    \"enchant_broker_init\": [\n        \"resource enchant_broker_init()\",\n        \"create a new broker object capable of requesting\"\n    ],\n    \"enchant_broker_list_dicts\": [\n        \"string enchant_broker_list_dicts(resource broker)\",\n        \"Lists the dictionaries available for the given broker\"\n    ],\n    \"enchant_broker_request_dict\": [\n        \"resource enchant_broker_request_dict(resource broker, string tag)\",\n        \"create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\\\"en_US\\\", \\\"de_DE\\\", ...)\"\n    ],\n    \"enchant_broker_request_pwl_dict\": [\n        \"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\n        \"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"\n    ],\n    \"enchant_broker_set_dict_path\": [\n        \"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\n        \"Set the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_set_ordering\": [\n        \"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\n        \"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"\n    ],\n    \"enchant_dict_add_to_personal\": [\n        \"void enchant_dict_add_to_personal(resource dict, string word)\",\n        \"add 'word' to personal word list\"\n    ],\n    \"enchant_dict_add_to_session\": [\n        \"void enchant_dict_add_to_session(resource dict, string word)\",\n        \"add 'word' to this spell-checking session\"\n    ],\n    \"enchant_dict_check\": [\n        \"bool enchant_dict_check(resource dict, string word)\",\n        \"If the word is correctly spelled return true, otherwise return false\"\n    ],\n    \"enchant_dict_describe\": [\n        \"array enchant_dict_describe(resource dict)\",\n        \"Describes an individual dictionary 'dict'\"\n    ],\n    \"enchant_dict_get_error\": [\n        \"string enchant_dict_get_error(resource dict)\",\n        \"Returns the last error of the current spelling-session\"\n    ],\n    \"enchant_dict_is_in_session\": [\n        \"bool enchant_dict_is_in_session(resource dict, string word)\",\n        \"whether or not 'word' exists in this spelling-session\"\n    ],\n    \"enchant_dict_quick_check\": [\n        \"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\n        \"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"\n    ],\n    \"enchant_dict_store_replacement\": [\n        \"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\n        \"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"\n    ],\n    \"enchant_dict_suggest\": [\n        \"array enchant_dict_suggest(resource dict, string word)\",\n        \"Will return a list of values if any of those pre-conditions are not met.\"\n    ],\n    \"end\": [\n        \"mixed end(array array_arg)\",\n        \"Advances array argument's internal pointer to the last element and return it\"\n    ],\n    \"ereg\": [\n        \"int ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match\"\n    ],\n    \"ereg_replace\": [\n        \"string ereg_replace(string pattern, string replacement, string string)\",\n        \"Replace regular expression\"\n    ],\n    \"eregi\": [\n        \"int eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match\"\n    ],\n    \"eregi_replace\": [\n        \"string eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression\"\n    ],\n    \"error_get_last\": [\n        \"array error_get_last()\",\n        \"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"\n    ],\n    \"error_log\": [\n        \"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\n        \"Send an error message somewhere\"\n    ],\n    \"error_reporting\": [\n        \"int error_reporting([int new_error_level])\",\n        \"Return the current error_reporting level, and if an argument was passed - change to the new level\"\n    ],\n    \"escapeshellarg\": [\n        \"string escapeshellarg(string arg)\",\n        \"Quote and escape an argument for use in a shell command\"\n    ],\n    \"escapeshellcmd\": [\n        \"string escapeshellcmd(string command)\",\n        \"Escape shell metacharacters\"\n    ],\n    \"exec\": [\n        \"string exec(string command [, array &output [, int &return_value]])\",\n        \"Execute an external program\"\n    ],\n    \"exif_imagetype\": [\n        \"int exif_imagetype(string imagefile)\",\n        \"Get the type of an image\"\n    ],\n    \"exif_read_data\": [\n        \"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\n        \"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"\n    ],\n    \"exif_tagname\": [\n        \"string exif_tagname(index)\",\n        \"Get headername for index or false if not defined\"\n    ],\n    \"exif_thumbnail\": [\n        \"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\n        \"Reads the embedded thumbnail\"\n    ],\n    \"exit\": [\n        \"void exit([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"exp\": [\n        \"float exp(float number)\",\n        \"Returns e raised to the power of the number\"\n    ],\n    \"explode\": [\n        \"array explode(string separator, string str [, int limit])\",\n        \"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"\n    ],\n    \"expm1\": [\n        \"float expm1(float number)\",\n        \"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"extension_loaded\": [\n        \"bool extension_loaded(string extension_name)\",\n        \"Returns true if the named extension is loaded\"\n    ],\n    \"extract\": [\n        \"int extract(array var_array [, int extract_type [, string prefix]])\",\n        \"Imports variables into symbol table from an array\"\n    ],\n    \"ezmlm_hash\": [\n        \"int ezmlm_hash(string addr)\",\n        \"Calculate EZMLM list hash value.\"\n    ],\n    \"fclose\": [\n        \"bool fclose(resource fp)\",\n        \"Close an open file pointer\"\n    ],\n    \"feof\": [\n        \"bool feof(resource fp)\",\n        \"Test for end-of-file on a file pointer\"\n    ],\n    \"fflush\": [\n        \"bool fflush(resource fp)\",\n        \"Flushes output\"\n    ],\n    \"fgetc\": [\n        \"string fgetc(resource fp)\",\n        \"Get a character from file pointer\"\n    ],\n    \"fgetcsv\": [\n        \"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\n        \"Get line from file pointer and parse for CSV fields\"\n    ],\n    \"fgets\": [\n        \"string fgets(resource fp[, int length])\",\n        \"Get a line from file pointer\"\n    ],\n    \"fgetss\": [\n        \"string fgetss(resource fp [, int length [, string allowable_tags]])\",\n        \"Get a line from file pointer and strip HTML tags\"\n    ],\n    \"file\": [\n        \"array file(string filename [, int flags[, resource context]])\",\n        \"Read entire file into an array\"\n    ],\n    \"file_exists\": [\n        \"bool file_exists(string filename)\",\n        \"Returns true if filename exists\"\n    ],\n    \"file_get_contents\": [\n        \"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\n        \"Read the entire file into a string\"\n    ],\n    \"file_put_contents\": [\n        \"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\n        \"Write/Create a file with contents data and return the number of bytes written\"\n    ],\n    \"fileatime\": [\n        \"int fileatime(string filename)\",\n        \"Get last access time of file\"\n    ],\n    \"filectime\": [\n        \"int filectime(string filename)\",\n        \"Get inode modification time of file\"\n    ],\n    \"filegroup\": [\n        \"int filegroup(string filename)\",\n        \"Get file group\"\n    ],\n    \"fileinode\": [\n        \"int fileinode(string filename)\",\n        \"Get file inode\"\n    ],\n    \"filemtime\": [\n        \"int filemtime(string filename)\",\n        \"Get last modification time of file\"\n    ],\n    \"fileowner\": [\n        \"int fileowner(string filename)\",\n        \"Get file owner\"\n    ],\n    \"fileperms\": [\n        \"int fileperms(string filename)\",\n        \"Get file permissions\"\n    ],\n    \"filesize\": [\n        \"int filesize(string filename)\",\n        \"Get file size\"\n    ],\n    \"filetype\": [\n        \"string filetype(string filename)\",\n        \"Get file type\"\n    ],\n    \"filter_has_var\": [\n        \"mixed filter_has_var(constant type, string variable_name)\",\n        \"* Returns true if the variable with the name 'name' exists in source.\"\n    ],\n    \"filter_input\": [\n        \"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\n        \"* Returns the filtered variable 'name'* from source `type`.\"\n    ],\n    \"filter_input_array\": [\n        \"mixed filter_input_array(constant type, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"filter_var\": [\n        \"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\n        \"* Returns the filtered version of the vriable.\"\n    ],\n    \"filter_var_array\": [\n        \"mixed filter_var_array(array data, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"finfo_buffer\": [\n        \"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\n        \"Return infromation about a string buffer.\"\n    ],\n    \"finfo_close\": [\n        \"resource finfo_close(resource finfo)\",\n        \"Close fileinfo resource.\"\n    ],\n    \"finfo_file\": [\n        \"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\n        \"Return information about a file.\"\n    ],\n    \"finfo_open\": [\n        \"resource finfo_open([int options [, string arg]])\",\n        \"Create a new fileinfo resource.\"\n    ],\n    \"finfo_set_flags\": [\n        \"bool finfo_set_flags(resource finfo, int options)\",\n        \"Set libmagic configuration options.\"\n    ],\n    \"floatval\": [\n        \"float floatval(mixed var)\",\n        \"Get the float value of a variable\"\n    ],\n    \"flock\": [\n        \"bool flock(resource fp, int operation [, int &wouldblock])\",\n        \"Portable file locking\"\n    ],\n    \"floor\": [\n        \"float floor(float number)\",\n        \"Returns the next lowest integer value from the number\"\n    ],\n    \"flush\": [\n        \"void flush(void)\",\n        \"Flush the output buffer\"\n    ],\n    \"fmod\": [\n        \"float fmod(float x, float y)\",\n        \"Returns the remainder of dividing x by y as a float\"\n    ],\n    \"fnmatch\": [\n        \"bool fnmatch(string pattern, string filename [, int flags])\",\n        \"Match filename against pattern\"\n    ],\n    \"fopen\": [\n        \"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\n        \"Open a file or a URL and return a file pointer\"\n    ],\n    \"forward_static_call\": [\n        \"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"fpassthru\": [\n        \"int fpassthru(resource fp)\",\n        \"Output all remaining data from a file pointer\"\n    ],\n    \"fprintf\": [\n        \"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"fputcsv\": [\n        \"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\n        \"Format line as CSV and write to file pointer\"\n    ],\n    \"fread\": [\n        \"string fread(resource fp, int length)\",\n        \"Binary-safe file read\"\n    ],\n    \"frenchtojd\": [\n        \"int frenchtojd(int month, int day, int year)\",\n        \"Converts a french republic calendar date to julian day count\"\n    ],\n    \"fscanf\": [\n        \"mixed fscanf(resource stream, string format [, string ...])\",\n        \"Implements a mostly ANSI compatible fscanf()\"\n    ],\n    \"fseek\": [\n        \"int fseek(resource fp, int offset [, int whence])\",\n        \"Seek on a file pointer\"\n    ],\n    \"fsockopen\": [\n        \"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open Internet or Unix domain socket connection\"\n    ],\n    \"fstat\": [\n        \"array fstat(resource fp)\",\n        \"Stat() on a filehandle\"\n    ],\n    \"ftell\": [\n        \"int ftell(resource fp)\",\n        \"Get file pointer's read/write position\"\n    ],\n    \"ftok\": [\n        \"int ftok(string pathname, string proj)\",\n        \"Convert a pathname and a project identifier to a System V IPC key\"\n    ],\n    \"ftp_alloc\": [\n        \"bool ftp_alloc(resource stream, int size[, &response])\",\n        \"Attempt to allocate space on the remote FTP server\"\n    ],\n    \"ftp_cdup\": [\n        \"bool ftp_cdup(resource stream)\",\n        \"Changes to the parent directory\"\n    ],\n    \"ftp_chdir\": [\n        \"bool ftp_chdir(resource stream, string directory)\",\n        \"Changes directories\"\n    ],\n    \"ftp_chmod\": [\n        \"int ftp_chmod(resource stream, int mode, string filename)\",\n        \"Sets permissions on a file\"\n    ],\n    \"ftp_close\": [\n        \"bool ftp_close(resource stream)\",\n        \"Closes the FTP stream\"\n    ],\n    \"ftp_connect\": [\n        \"resource ftp_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP stream\"\n    ],\n    \"ftp_delete\": [\n        \"bool ftp_delete(resource stream, string file)\",\n        \"Deletes a file\"\n    ],\n    \"ftp_exec\": [\n        \"bool ftp_exec(resource stream, string command)\",\n        \"Requests execution of a program on the FTP server\"\n    ],\n    \"ftp_fget\": [\n        \"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server and writes it to an open file\"\n    ],\n    \"ftp_fput\": [\n        \"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server\"\n    ],\n    \"ftp_get\": [\n        \"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server and writes it to a local file\"\n    ],\n    \"ftp_get_option\": [\n        \"mixed ftp_get_option(resource stream, int option)\",\n        \"Gets an FTP option\"\n    ],\n    \"ftp_login\": [\n        \"bool ftp_login(resource stream, string username, string password)\",\n        \"Logs into the FTP server\"\n    ],\n    \"ftp_mdtm\": [\n        \"int ftp_mdtm(resource stream, string filename)\",\n        \"Returns the last modification time of the file, or -1 on error\"\n    ],\n    \"ftp_mkdir\": [\n        \"string ftp_mkdir(resource stream, string directory)\",\n        \"Creates a directory and returns the absolute path for the new directory or false on error\"\n    ],\n    \"ftp_nb_continue\": [\n        \"int ftp_nb_continue(resource stream)\",\n        \"Continues retrieving/sending a file nbronously\"\n    ],\n    \"ftp_nb_fget\": [\n        \"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server asynchronly and writes it to an open file\"\n    ],\n    \"ftp_nb_fput\": [\n        \"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server nbronly\"\n    ],\n    \"ftp_nb_get\": [\n        \"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server nbhronly and writes it to a local file\"\n    ],\n    \"ftp_nb_put\": [\n        \"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_nlist\": [\n        \"array ftp_nlist(resource stream, string directory)\",\n        \"Returns an array of filenames in the given directory\"\n    ],\n    \"ftp_pasv\": [\n        \"bool ftp_pasv(resource stream, bool pasv)\",\n        \"Turns passive mode on or off\"\n    ],\n    \"ftp_put\": [\n        \"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_pwd\": [\n        \"string ftp_pwd(resource stream)\",\n        \"Returns the present working directory\"\n    ],\n    \"ftp_raw\": [\n        \"array ftp_raw(resource stream, string command)\",\n        \"Sends a literal command to the FTP server\"\n    ],\n    \"ftp_rawlist\": [\n        \"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\n        \"Returns a detailed listing of a directory as an array of output lines\"\n    ],\n    \"ftp_rename\": [\n        \"bool ftp_rename(resource stream, string src, string dest)\",\n        \"Renames the given file to a new path\"\n    ],\n    \"ftp_rmdir\": [\n        \"bool ftp_rmdir(resource stream, string directory)\",\n        \"Removes a directory\"\n    ],\n    \"ftp_set_option\": [\n        \"bool ftp_set_option(resource stream, int option, mixed value)\",\n        \"Sets an FTP option\"\n    ],\n    \"ftp_site\": [\n        \"bool ftp_site(resource stream, string cmd)\",\n        \"Sends a SITE command to the server\"\n    ],\n    \"ftp_size\": [\n        \"int ftp_size(resource stream, string filename)\",\n        \"Returns the size of the file, or -1 on error\"\n    ],\n    \"ftp_ssl_connect\": [\n        \"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP-SSL stream\"\n    ],\n    \"ftp_systype\": [\n        \"string ftp_systype(resource stream)\",\n        \"Returns the system type identifier\"\n    ],\n    \"ftruncate\": [\n        \"bool ftruncate(resource fp, int size)\",\n        \"Truncate file to 'size' length\"\n    ],\n    \"func_get_arg\": [\n        \"mixed func_get_arg(int arg_num)\",\n        \"Get the $arg_num'th argument that was passed to the function\"\n    ],\n    \"func_get_args\": [\n        \"array func_get_args()\",\n        \"Get an array of the arguments that were passed to the function\"\n    ],\n    \"func_num_args\": [\n        \"int func_num_args(void)\",\n        \"Get the number of arguments that were passed to the function\"\n    ],\n    \"function \": [\"\", \"\"],\n    \"foreach \": [\"\", \"\"],\n    \"function_exists\": [\n        \"bool function_exists(string function_name)\",\n        \"Checks if the function exists\"\n    ],\n    \"fwrite\": [\n        \"int fwrite(resource fp, string str [, int length])\",\n        \"Binary-safe file write\"\n    ],\n    \"gc_collect_cycles\": [\n        \"int gc_collect_cycles(void)\",\n        \"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"\n    ],\n    \"gc_disable\": [\n        \"void gc_disable(void)\",\n        \"Deactivates the circular reference collector\"\n    ],\n    \"gc_enable\": [\n        \"void gc_enable(void)\",\n        \"Activates the circular reference collector\"\n    ],\n    \"gc_enabled\": [\n        \"void gc_enabled(void)\",\n        \"Returns status of the circular reference collector\"\n    ],\n    \"gd_info\": [\n        \"array gd_info()\",\n        \"\"\n    ],\n    \"getKeywords\": [\n        \"static array getKeywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"\n    ],\n    \"get_browser\": [\n        \"mixed get_browser([string browser_name [, bool return_array]])\",\n        \"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"\n    ],\n    \"get_called_class\": [\n        \"string get_called_class()\",\n        \"Retrieves the \\\"Late Static Binding\\\" class name\"\n    ],\n    \"get_cfg_var\": [\n        \"mixed get_cfg_var(string option_name)\",\n        \"Get the value of a PHP configuration option\"\n    ],\n    \"get_class\": [\n        \"string get_class([object object])\",\n        \"Retrieves the class name\"\n    ],\n    \"get_class_methods\": [\n        \"array get_class_methods(mixed class)\",\n        \"Returns an array of method names for class or class instance.\"\n    ],\n    \"get_class_vars\": [\n        \"array get_class_vars(string class_name)\",\n        \"Returns an array of default properties of the class.\"\n    ],\n    \"get_current_user\": [\n        \"string get_current_user(void)\",\n        \"Get the name of the owner of the current PHP script\"\n    ],\n    \"get_declared_classes\": [\n        \"array get_declared_classes()\",\n        \"Returns an array of all declared classes.\"\n    ],\n    \"get_declared_interfaces\": [\n        \"array get_declared_interfaces()\",\n        \"Returns an array of all declared interfaces.\"\n    ],\n    \"get_defined_constants\": [\n        \"array get_defined_constants([bool categorize])\",\n        \"Return an array containing the names and values of all defined constants\"\n    ],\n    \"get_defined_functions\": [\n        \"array get_defined_functions(void)\",\n        \"Returns an array of all defined functions\"\n    ],\n    \"get_defined_vars\": [\n        \"array get_defined_vars(void)\",\n        \"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"\n    ],\n    \"get_display_language\": [\n        \"static string get_display_language($locale[, $in_locale = null])\",\n        \"* gets the language for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_name\": [\n        \"static string get_display_name($locale[, $in_locale = null])\",\n        \"* gets the name for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_region\": [\n        \"static string get_display_region($locale, $in_locale = null)\",\n        \"* gets the region for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_script\": [\n        \"static string get_display_script($locale, $in_locale = null)\",\n        \"* gets the script for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_extension_funcs\": [\n        \"array get_extension_funcs(string extension_name)\",\n        \"Returns an array with the names of functions belonging to the named extension\"\n    ],\n    \"get_headers\": [\n        \"array get_headers(string url[, int format])\",\n        \"fetches all the headers sent by the server in response to a HTTP request\"\n    ],\n    \"get_html_translation_table\": [\n        \"array get_html_translation_table([int table [, int quote_style]])\",\n        \"Returns the internal translation table used by htmlspecialchars and htmlentities\"\n    ],\n    \"get_include_path\": [\n        \"string get_include_path()\",\n        \"Get the current include_path configuration option\"\n    ],\n    \"get_included_files\": [\n        \"array get_included_files(void)\",\n        \"Returns an array with the file names that were include_once()'d\"\n    ],\n    \"get_loaded_extensions\": [\n        \"array get_loaded_extensions([bool zend_extensions])\",\n        \"Return an array containing names of loaded extensions\"\n    ],\n    \"get_magic_quotes_gpc\": [\n        \"int get_magic_quotes_gpc(void)\",\n        \"Get the current active configuration setting of magic_quotes_gpc\"\n    ],\n    \"get_magic_quotes_runtime\": [\n        \"int get_magic_quotes_runtime(void)\",\n        \"Get the current active configuration setting of magic_quotes_runtime\"\n    ],\n    \"get_meta_tags\": [\n        \"array get_meta_tags(string filename [, bool use_include_path])\",\n        \"Extracts all meta tag content attributes from a file and returns an array\"\n    ],\n    \"get_object_vars\": [\n        \"array get_object_vars(object obj)\",\n        \"Returns an array of object properties\"\n    ],\n    \"get_parent_class\": [\n        \"string get_parent_class([mixed object])\",\n        \"Retrieves the parent class name for object or class or current scope.\"\n    ],\n    \"get_resource_type\": [\n        \"string get_resource_type(resource res)\",\n        \"Get the resource type name for a given resource\"\n    ],\n    \"getallheaders\": [\n        \"array getallheaders(void)\",\n        \"\"\n    ],\n    \"getcwd\": [\n        \"mixed getcwd(void)\",\n        \"Gets the current directory\"\n    ],\n    \"getdate\": [\n        \"array getdate([int timestamp])\",\n        \"Get date/time information\"\n    ],\n    \"getenv\": [\n        \"string getenv(string varname)\",\n        \"Get the value of an environment variable\"\n    ],\n    \"gethostbyaddr\": [\n        \"string gethostbyaddr(string ip_address)\",\n        \"Get the Internet host name corresponding to a given IP address\"\n    ],\n    \"gethostbyname\": [\n        \"string gethostbyname(string hostname)\",\n        \"Get the IP address corresponding to a given Internet host name\"\n    ],\n    \"gethostbynamel\": [\n        \"array gethostbynamel(string hostname)\",\n        \"Return a list of IP addresses that a given hostname resolves to.\"\n    ],\n    \"gethostname\": [\n        \"string gethostname()\",\n        \"Get the host name of the current machine\"\n    ],\n    \"getimagesize\": [\n        \"array getimagesize(string imagefile [, array info])\",\n        \"Get the size of an image as 4-element array\"\n    ],\n    \"getlastmod\": [\n        \"int getlastmod(void)\",\n        \"Get time of last page modification\"\n    ],\n    \"getmygid\": [\n        \"int getmygid(void)\",\n        \"Get PHP script owner's GID\"\n    ],\n    \"getmyinode\": [\n        \"int getmyinode(void)\",\n        \"Get the inode of the current script being parsed\"\n    ],\n    \"getmypid\": [\n        \"int getmypid(void)\",\n        \"Get current process ID\"\n    ],\n    \"getmyuid\": [\n        \"int getmyuid(void)\",\n        \"Get PHP script owner's UID\"\n    ],\n    \"getopt\": [\n        \"array getopt(string options [, array longopts])\",\n        \"Get options from the command line argument list\"\n    ],\n    \"getprotobyname\": [\n        \"int getprotobyname(string name)\",\n        \"Returns protocol number associated with name as per /etc/protocols\"\n    ],\n    \"getprotobynumber\": [\n        \"string getprotobynumber(int proto)\",\n        \"Returns protocol name associated with protocol number proto\"\n    ],\n    \"getrandmax\": [\n        \"int getrandmax(void)\",\n        \"Returns the maximum value a random number can have\"\n    ],\n    \"getrusage\": [\n        \"array getrusage([int who])\",\n        \"Returns an array of usage statistics\"\n    ],\n    \"getservbyname\": [\n        \"int getservbyname(string service, string protocol)\",\n        \"Returns port associated with service. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"getservbyport\": [\n        \"string getservbyport(int port, string protocol)\",\n        \"Returns service name associated with port. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"gettext\": [\n        \"string gettext(string msgid)\",\n        \"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"\n    ],\n    \"gettimeofday\": [\n        \"array gettimeofday([bool get_as_float])\",\n        \"Returns the current time as array\"\n    ],\n    \"gettype\": [\n        \"string gettype(mixed var)\",\n        \"Returns the type of the variable\"\n    ],\n    \"glob\": [\n        \"array glob(string pattern [, int flags])\",\n        \"Find pathnames matching a pattern\"\n    ],\n    \"gmdate\": [\n        \"string gmdate(string format [, long timestamp])\",\n        \"Format a GMT date/time\"\n    ],\n    \"gmmktime\": [\n        \"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a GMT date\"\n    ],\n    \"gmp_abs\": [\n        \"resource gmp_abs(resource a)\",\n        \"Calculates absolute value\"\n    ],\n    \"gmp_add\": [\n        \"resource gmp_add(resource a, resource b)\",\n        \"Add a and b\"\n    ],\n    \"gmp_and\": [\n        \"resource gmp_and(resource a, resource b)\",\n        \"Calculates logical AND of a and b\"\n    ],\n    \"gmp_clrbit\": [\n        \"void gmp_clrbit(resource &a, int index)\",\n        \"Clears bit in a\"\n    ],\n    \"gmp_cmp\": [\n        \"int gmp_cmp(resource a, resource b)\",\n        \"Compares two numbers\"\n    ],\n    \"gmp_com\": [\n        \"resource gmp_com(resource a)\",\n        \"Calculates one's complement of a\"\n    ],\n    \"gmp_div_q\": [\n        \"resource gmp_div_q(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient only\"\n    ],\n    \"gmp_div_qr\": [\n        \"array gmp_div_qr(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient and reminder\"\n    ],\n    \"gmp_div_r\": [\n        \"resource gmp_div_r(resource a, resource b [, int round])\",\n        \"Divide a by b, returns reminder only\"\n    ],\n    \"gmp_divexact\": [\n        \"resource gmp_divexact(resource a, resource b)\",\n        \"Divide a by b using exact division algorithm\"\n    ],\n    \"gmp_fact\": [\n        \"resource gmp_fact(int a)\",\n        \"Calculates factorial function\"\n    ],\n    \"gmp_gcd\": [\n        \"resource gmp_gcd(resource a, resource b)\",\n        \"Computes greatest common denominator (gcd) of a and b\"\n    ],\n    \"gmp_gcdext\": [\n        \"array gmp_gcdext(resource a, resource b)\",\n        \"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"\n    ],\n    \"gmp_hamdist\": [\n        \"int gmp_hamdist(resource a, resource b)\",\n        \"Calculates hamming distance between a and b\"\n    ],\n    \"gmp_init\": [\n        \"resource gmp_init(mixed number [, int base])\",\n        \"Initializes GMP number\"\n    ],\n    \"gmp_intval\": [\n        \"int gmp_intval(resource gmpnumber)\",\n        \"Gets signed long value of GMP number\"\n    ],\n    \"gmp_invert\": [\n        \"resource gmp_invert(resource a, resource b)\",\n        \"Computes the inverse of a modulo b\"\n    ],\n    \"gmp_jacobi\": [\n        \"int gmp_jacobi(resource a, resource b)\",\n        \"Computes Jacobi symbol\"\n    ],\n    \"gmp_legendre\": [\n        \"int gmp_legendre(resource a, resource b)\",\n        \"Computes Legendre symbol\"\n    ],\n    \"gmp_mod\": [\n        \"resource gmp_mod(resource a, resource b)\",\n        \"Computes a modulo b\"\n    ],\n    \"gmp_mul\": [\n        \"resource gmp_mul(resource a, resource b)\",\n        \"Multiply a and b\"\n    ],\n    \"gmp_neg\": [\n        \"resource gmp_neg(resource a)\",\n        \"Negates a number\"\n    ],\n    \"gmp_nextprime\": [\n        \"resource gmp_nextprime(resource a)\",\n        \"Finds next prime of a\"\n    ],\n    \"gmp_or\": [\n        \"resource gmp_or(resource a, resource b)\",\n        \"Calculates logical OR of a and b\"\n    ],\n    \"gmp_perfect_square\": [\n        \"bool gmp_perfect_square(resource a)\",\n        \"Checks if a is an exact square\"\n    ],\n    \"gmp_popcount\": [\n        \"int gmp_popcount(resource a)\",\n        \"Calculates the population count of a\"\n    ],\n    \"gmp_pow\": [\n        \"resource gmp_pow(resource base, int exp)\",\n        \"Raise base to power exp\"\n    ],\n    \"gmp_powm\": [\n        \"resource gmp_powm(resource base, resource exp, resource mod)\",\n        \"Raise base to power exp and take result modulo mod\"\n    ],\n    \"gmp_prob_prime\": [\n        \"int gmp_prob_prime(resource a[, int reps])\",\n        \"Checks if a is \\\"probably prime\\\"\"\n    ],\n    \"gmp_random\": [\n        \"resource gmp_random([int limiter])\",\n        \"Gets random number\"\n    ],\n    \"gmp_scan0\": [\n        \"int gmp_scan0(resource a, int start)\",\n        \"Finds first zero bit\"\n    ],\n    \"gmp_scan1\": [\n        \"int gmp_scan1(resource a, int start)\",\n        \"Finds first non-zero bit\"\n    ],\n    \"gmp_setbit\": [\n        \"void gmp_setbit(resource &a, int index[, bool set_clear])\",\n        \"Sets or clear bit in a\"\n    ],\n    \"gmp_sign\": [\n        \"int gmp_sign(resource a)\",\n        \"Gets the sign of the number\"\n    ],\n    \"gmp_sqrt\": [\n        \"resource gmp_sqrt(resource a)\",\n        \"Takes integer part of square root of a\"\n    ],\n    \"gmp_sqrtrem\": [\n        \"array gmp_sqrtrem(resource a)\",\n        \"Square root with remainder\"\n    ],\n    \"gmp_strval\": [\n        \"string gmp_strval(resource gmpnumber [, int base])\",\n        \"Gets string representation of GMP number\"\n    ],\n    \"gmp_sub\": [\n        \"resource gmp_sub(resource a, resource b)\",\n        \"Subtract b from a\"\n    ],\n    \"gmp_testbit\": [\n        \"bool gmp_testbit(resource a, int index)\",\n        \"Tests if bit is set in a\"\n    ],\n    \"gmp_xor\": [\n        \"resource gmp_xor(resource a, resource b)\",\n        \"Calculates logical exclusive OR of a and b\"\n    ],\n    \"gmstrftime\": [\n        \"string gmstrftime(string format [, int timestamp])\",\n        \"Format a GMT/UCT time/date according to locale settings\"\n    ],\n    \"grapheme_extract\": [\n        \"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\n        \"Function to extract a sequence of default grapheme clusters\"\n    ],\n    \"grapheme_stripos\": [\n        \"int grapheme_stripos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another, ignoring case differences\"\n    ],\n    \"grapheme_stristr\": [\n        \"string grapheme_stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_strlen\": [\n        \"int grapheme_strlen(string str)\",\n        \"Get number of graphemes in a string\"\n    ],\n    \"grapheme_strpos\": [\n        \"int grapheme_strpos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"grapheme_strripos\": [\n        \"int grapheme_strripos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another, ignoring case\"\n    ],\n    \"grapheme_strrpos\": [\n        \"int grapheme_strrpos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"grapheme_strstr\": [\n        \"string grapheme_strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_substr\": [\n        \"string grapheme_substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"gregoriantojd\": [\n        \"int gregoriantojd(int month, int day, int year)\",\n        \"Converts a gregorian calendar date to julian day count\"\n    ],\n    \"gzcompress\": [\n        \"string gzcompress(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzdeflate\": [\n        \"string gzdeflate(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzencode\": [\n        \"string gzencode(string data [, int level [, int encoding_mode]])\",\n        \"GZ encode a string\"\n    ],\n    \"gzfile\": [\n        \"array gzfile(string filename [, int use_include_path])\",\n        \"Read und uncompress entire .gz-file into an array\"\n    ],\n    \"gzinflate\": [\n        \"string gzinflate(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"gzopen\": [\n        \"resource gzopen(string filename, string mode [, int use_include_path])\",\n        \"Open a .gz-file and return a .gz-file pointer\"\n    ],\n    \"gzuncompress\": [\n        \"string gzuncompress(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"hash\": [\n        \"string hash(string algo, string data[, bool raw_output = false])\",\n        \"Generate a hash of a given input string Returns lowercase hexits by default\"\n    ],\n    \"hash_algos\": [\n        \"array hash_algos(void)\",\n        \"Return a list of registered hashing algorithms\"\n    ],\n    \"hash_copy\": [\n        \"resource hash_copy(resource context)\",\n        \"Copy hash resource\"\n    ],\n    \"hash_file\": [\n        \"string hash_file(string algo, string filename[, bool raw_output = false])\",\n        \"Generate a hash of a given file Returns lowercase hexits by default\"\n    ],\n    \"hash_final\": [\n        \"string hash_final(resource context[, bool raw_output=false])\",\n        \"Output resulting digest\"\n    ],\n    \"hash_hmac\": [\n        \"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_hmac_file\": [\n        \"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_init\": [\n        \"resource hash_init(string algo[, int options, string key])\",\n        \"Initialize a hashing context\"\n    ],\n    \"hash_update\": [\n        \"bool hash_update(resource context, string data)\",\n        \"Pump data into the hashing algorithm\"\n    ],\n    \"hash_update_file\": [\n        \"bool hash_update_file(resource context, string filename[, resource context])\",\n        \"Pump data into the hashing algorithm from a file\"\n    ],\n    \"hash_update_stream\": [\n        \"int hash_update_stream(resource context, resource handle[, integer length])\",\n        \"Pump data into the hashing algorithm from an open stream\"\n    ],\n    \"header\": [\n        \"void header(string header [, bool replace, [int http_response_code]])\",\n        \"Sends a raw HTTP header\"\n    ],\n    \"header_remove\": [\n        \"void header_remove([string name])\",\n        \"Removes an HTTP header previously set using header()\"\n    ],\n    \"headers_list\": [\n        \"array headers_list(void)\",\n        \"Return list of headers to be sent / already sent\"\n    ],\n    \"headers_sent\": [\n        \"bool headers_sent([string &$file [, int &$line]])\",\n        \"Returns true if headers have already been sent, false otherwise\"\n    ],\n    \"hebrev\": [\n        \"string hebrev(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text\"\n    ],\n    \"hebrevc\": [\n        \"string hebrevc(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text with newline conversion\"\n    ],\n    \"hexdec\": [\n        \"int hexdec(string hexadecimal_number)\",\n        \"Returns the decimal equivalent of the hexadecimal number\"\n    ],\n    \"highlight_file\": [\n        \"bool highlight_file(string file_name [, bool return] )\",\n        \"Syntax highlight a source file\"\n    ],\n    \"highlight_string\": [\n        \"bool highlight_string(string string [, bool return] )\",\n        \"Syntax highlight a string or optionally return it\"\n    ],\n    \"html_entity_decode\": [\n        \"string html_entity_decode(string string [, int quote_style][, string charset])\",\n        \"Convert all HTML entities to their applicable characters\"\n    ],\n    \"htmlentities\": [\n        \"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert all applicable characters to HTML entities\"\n    ],\n    \"htmlspecialchars\": [\n        \"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert special characters to HTML entities\"\n    ],\n    \"htmlspecialchars_decode\": [\n        \"string htmlspecialchars_decode(string string [, int quote_style])\",\n        \"Convert special HTML entities back to characters\"\n    ],\n    \"http_build_query\": [\n        \"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\n        \"Generates a form-encoded query string from an associative array or object.\"\n    ],\n    \"hypot\": [\n        \"float hypot(float num1, float num2)\",\n        \"Returns sqrt(num1*num1 + num2*num2)\"\n    ],\n    \"ibase_add_user\": [\n        \"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Add a user to security database\"\n    ],\n    \"ibase_affected_rows\": [\n        \"int ibase_affected_rows( [ resource link_identifier ] )\",\n        \"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"\n    ],\n    \"ibase_backup\": [\n        \"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\n        \"Initiates a backup task in the service manager and returns immediately\"\n    ],\n    \"ibase_blob_add\": [\n        \"bool ibase_blob_add(resource blob_handle, string data)\",\n        \"Add data into created blob\"\n    ],\n    \"ibase_blob_cancel\": [\n        \"bool ibase_blob_cancel(resource blob_handle)\",\n        \"Cancel creating blob\"\n    ],\n    \"ibase_blob_close\": [\n        \"string ibase_blob_close(resource blob_handle)\",\n        \"Close blob\"\n    ],\n    \"ibase_blob_create\": [\n        \"resource ibase_blob_create([resource link_identifier])\",\n        \"Create blob for adding data\"\n    ],\n    \"ibase_blob_echo\": [\n        \"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\n        \"Output blob contents to browser\"\n    ],\n    \"ibase_blob_get\": [\n        \"string ibase_blob_get(resource blob_handle, int len)\",\n        \"Get len bytes data from open blob\"\n    ],\n    \"ibase_blob_import\": [\n        \"string ibase_blob_import([ resource link_identifier, ] resource file)\",\n        \"Create blob, copy file in it, and close it\"\n    ],\n    \"ibase_blob_info\": [\n        \"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\n        \"Return blob length and other useful info\"\n    ],\n    \"ibase_blob_open\": [\n        \"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\n        \"Open blob for retrieving data parts\"\n    ],\n    \"ibase_close\": [\n        \"bool ibase_close([resource link_identifier])\",\n        \"Close an InterBase connection\"\n    ],\n    \"ibase_commit\": [\n        \"bool ibase_commit( resource link_identifier )\",\n        \"Commit transaction\"\n    ],\n    \"ibase_commit_ret\": [\n        \"bool ibase_commit_ret( resource link_identifier )\",\n        \"Commit transaction and retain the transaction context\"\n    ],\n    \"ibase_connect\": [\n        \"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a connection to an InterBase database\"\n    ],\n    \"ibase_db_info\": [\n        \"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\n        \"Request statistics about a database\"\n    ],\n    \"ibase_delete_user\": [\n        \"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Delete a user from security database\"\n    ],\n    \"ibase_drop_db\": [\n        \"bool ibase_drop_db([resource link_identifier])\",\n        \"Drop an InterBase database\"\n    ],\n    \"ibase_errcode\": [\n        \"int ibase_errcode(void)\",\n        \"Return error code\"\n    ],\n    \"ibase_errmsg\": [\n        \"string ibase_errmsg(void)\",\n        \"Return error message\"\n    ],\n    \"ibase_execute\": [\n        \"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a previously prepared query\"\n    ],\n    \"ibase_fetch_assoc\": [\n        \"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_fetch_object\": [\n        \"object ibase_fetch_object(resource result [, int fetch_flags])\",\n        \"Fetch a object from the results of a query\"\n    ],\n    \"ibase_fetch_row\": [\n        \"array ibase_fetch_row(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_field_info\": [\n        \"array ibase_field_info(resource query_result, int field_number)\",\n        \"Get information about a field\"\n    ],\n    \"ibase_free_event_handler\": [\n        \"bool ibase_free_event_handler(resource event)\",\n        \"Frees the event handler set by ibase_set_event_handler()\"\n    ],\n    \"ibase_free_query\": [\n        \"bool ibase_free_query(resource query)\",\n        \"Free memory used by a query\"\n    ],\n    \"ibase_free_result\": [\n        \"bool ibase_free_result(resource result)\",\n        \"Free the memory used by a result\"\n    ],\n    \"ibase_gen_id\": [\n        \"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\n        \"Increments the named generator and returns its new value\"\n    ],\n    \"ibase_maintain_db\": [\n        \"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\n        \"Execute a maintenance command on the database server\"\n    ],\n    \"ibase_modify_user\": [\n        \"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Modify a user in security database\"\n    ],\n    \"ibase_name_result\": [\n        \"bool ibase_name_result(resource result, string name)\",\n        \"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"\n    ],\n    \"ibase_num_fields\": [\n        \"int ibase_num_fields(resource query_result)\",\n        \"Get the number of fields in result\"\n    ],\n    \"ibase_num_params\": [\n        \"int ibase_num_params(resource query)\",\n        \"Get the number of params in a prepared query\"\n    ],\n    \"ibase_num_rows\": [\n        \"int ibase_num_rows( resource result_identifier )\",\n        \"Return the number of rows that are available in a result\"\n    ],\n    \"ibase_param_info\": [\n        \"array ibase_param_info(resource query, int field_number)\",\n        \"Get information about a parameter\"\n    ],\n    \"ibase_pconnect\": [\n        \"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a persistent connection to an InterBase database\"\n    ],\n    \"ibase_prepare\": [\n        \"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\n        \"Prepare a query for later execution\"\n    ],\n    \"ibase_query\": [\n        \"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a query\"\n    ],\n    \"ibase_restore\": [\n        \"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\n        \"Initiates a restore task in the service manager and returns immediately\"\n    ],\n    \"ibase_rollback\": [\n        \"bool ibase_rollback( resource link_identifier )\",\n        \"Rollback transaction\"\n    ],\n    \"ibase_rollback_ret\": [\n        \"bool ibase_rollback_ret( resource link_identifier )\",\n        \"Rollback transaction and retain the transaction context\"\n    ],\n    \"ibase_server_info\": [\n        \"string ibase_server_info(resource service_handle, int action)\",\n        \"Request information about a database server\"\n    ],\n    \"ibase_service_attach\": [\n        \"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\n        \"Connect to the service manager\"\n    ],\n    \"ibase_service_detach\": [\n        \"bool ibase_service_detach(resource service_handle)\",\n        \"Disconnect from the service manager\"\n    ],\n    \"ibase_set_event_handler\": [\n        \"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\n        \"Register the callback for handling each of the named events\"\n    ],\n    \"ibase_trans\": [\n        \"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\n        \"Start a transaction over one or several databases\"\n    ],\n    \"ibase_wait_event\": [\n        \"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\n        \"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"\n    ],\n    \"iconv\": [\n        \"string iconv(string in_charset, string out_charset, string str)\",\n        \"Returns str converted to the out_charset character set\"\n    ],\n    \"iconv_get_encoding\": [\n        \"mixed iconv_get_encoding([string type])\",\n        \"Get internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_mime_decode\": [\n        \"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\n        \"Decodes a mime header field\"\n    ],\n    \"iconv_mime_decode_headers\": [\n        \"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\n        \"Decodes multiple mime header fields\"\n    ],\n    \"iconv_mime_encode\": [\n        \"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\n        \"Composes a mime header field with field_name and field_value in a specified scheme\"\n    ],\n    \"iconv_set_encoding\": [\n        \"bool iconv_set_encoding(string type, string charset)\",\n        \"Sets internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_strlen\": [\n        \"int iconv_strlen(string str [, string charset])\",\n        \"Returns the character count of str\"\n    ],\n    \"iconv_strpos\": [\n        \"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\n        \"Finds position of first occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_strrpos\": [\n        \"int iconv_strrpos(string haystack, string needle [, string charset])\",\n        \"Finds position of last occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_substr\": [\n        \"string iconv_substr(string str, int offset, [int length, string charset])\",\n        \"Returns specified part of a string\"\n    ],\n    \"idate\": [\n        \"int idate(string format [, int timestamp])\",\n        \"Format a local time/date as integer\"\n    ],\n    \"idn_to_ascii\": [\n        \"int idn_to_ascii(string domain[, int options])\",\n        \"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"\n    ],\n    \"idn_to_utf8\": [\n        \"int idn_to_utf8(string domain[, int options])\",\n        \"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"\n    ],\n    \"ignore_user_abort\": [\n        \"int ignore_user_abort([string value])\",\n        \"Set whether we want to ignore a user abort event or not\"\n    ],\n    \"image2wbmp\": [\n        \"bool image2wbmp(resource im [, string filename [, int threshold]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"image_type_to_extension\": [\n        \"string image_type_to_extension(int imagetype [, bool include_dot])\",\n        \"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"image_type_to_mime_type\": [\n        \"string image_type_to_mime_type(int imagetype)\",\n        \"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"imagealphablending\": [\n        \"bool imagealphablending(resource im, bool on)\",\n        \"Turn alpha blending mode on or off for the given image\"\n    ],\n    \"imageantialias\": [\n        \"bool imageantialias(resource im, bool on)\",\n        \"Should antialiased functions used or not\"\n    ],\n    \"imagearc\": [\n        \"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\n        \"Draw a partial ellipse\"\n    ],\n    \"imagechar\": [\n        \"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character\"\n    ],\n    \"imagecharup\": [\n        \"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagecolorallocate\": [\n        \"int imagecolorallocate(resource im, int red, int green, int blue)\",\n        \"Allocate a color for an image\"\n    ],\n    \"imagecolorallocatealpha\": [\n        \"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Allocate a color with an alpha level.  Works for true color and palette based images\"\n    ],\n    \"imagecolorat\": [\n        \"int imagecolorat(resource im, int x, int y)\",\n        \"Get the index of the color of a pixel\"\n    ],\n    \"imagecolorclosest\": [\n        \"int imagecolorclosest(resource im, int red, int green, int blue)\",\n        \"Get the index of the closest color to the specified color\"\n    ],\n    \"imagecolorclosestalpha\": [\n        \"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find the closest matching colour with alpha transparency\"\n    ],\n    \"imagecolorclosesthwb\": [\n        \"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\n        \"Get the index of the color which has the hue, white and blackness nearest to the given color\"\n    ],\n    \"imagecolordeallocate\": [\n        \"bool imagecolordeallocate(resource im, int index)\",\n        \"De-allocate a color for an image\"\n    ],\n    \"imagecolorexact\": [\n        \"int imagecolorexact(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color\"\n    ],\n    \"imagecolorexactalpha\": [\n        \"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find exact match for colour with transparency\"\n    ],\n    \"imagecolormatch\": [\n        \"bool imagecolormatch(resource im1, resource im2)\",\n        \"Makes the colors of the palette version of an image more closely match the true color version\"\n    ],\n    \"imagecolorresolve\": [\n        \"int imagecolorresolve(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color or its closest possible alternative\"\n    ],\n    \"imagecolorresolvealpha\": [\n        \"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"\n    ],\n    \"imagecolorset\": [\n        \"void imagecolorset(resource im, int col, int red, int green, int blue)\",\n        \"Set the color for the specified palette index\"\n    ],\n    \"imagecolorsforindex\": [\n        \"array imagecolorsforindex(resource im, int col)\",\n        \"Get the colors for an index\"\n    ],\n    \"imagecolorstotal\": [\n        \"int imagecolorstotal(resource im)\",\n        \"Find out the number of colors in an image's palette\"\n    ],\n    \"imagecolortransparent\": [\n        \"int imagecolortransparent(resource im [, int col])\",\n        \"Define a color as transparent\"\n    ],\n    \"imageconvolution\": [\n        \"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\n        \"Apply a 3x3 convolution matrix, using coefficient div and offset\"\n    ],\n    \"imagecopy\": [\n        \"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\n        \"Copy part of an image\"\n    ],\n    \"imagecopymerge\": [\n        \"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopymergegray\": [\n        \"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopyresampled\": [\n        \"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image using resampling to help ensure clarity\"\n    ],\n    \"imagecopyresized\": [\n        \"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image\"\n    ],\n    \"imagecreate\": [\n        \"resource imagecreate(int x_size, int y_size)\",\n        \"Create a new image\"\n    ],\n    \"imagecreatefromgd\": [\n        \"resource imagecreatefromgd(string filename)\",\n        \"Create a new image from GD file or URL\"\n    ],\n    \"imagecreatefromgd2\": [\n        \"resource imagecreatefromgd2(string filename)\",\n        \"Create a new image from GD2 file or URL\"\n    ],\n    \"imagecreatefromgd2part\": [\n        \"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\n        \"Create a new image from a given part of GD2 file or URL\"\n    ],\n    \"imagecreatefromgif\": [\n        \"resource imagecreatefromgif(string filename)\",\n        \"Create a new image from GIF file or URL\"\n    ],\n    \"imagecreatefromjpeg\": [\n        \"resource imagecreatefromjpeg(string filename)\",\n        \"Create a new image from JPEG file or URL\"\n    ],\n    \"imagecreatefrompng\": [\n        \"resource imagecreatefrompng(string filename)\",\n        \"Create a new image from PNG file or URL\"\n    ],\n    \"imagecreatefromstring\": [\n        \"resource imagecreatefromstring(string image)\",\n        \"Create a new image from the image stream in the string\"\n    ],\n    \"imagecreatefromwbmp\": [\n        \"resource imagecreatefromwbmp(string filename)\",\n        \"Create a new image from WBMP file or URL\"\n    ],\n    \"imagecreatefromxbm\": [\n        \"resource imagecreatefromxbm(string filename)\",\n        \"Create a new image from XBM file or URL\"\n    ],\n    \"imagecreatefromxpm\": [\n        \"resource imagecreatefromxpm(string filename)\",\n        \"Create a new image from XPM file or URL\"\n    ],\n    \"imagecreatetruecolor\": [\n        \"resource imagecreatetruecolor(int x_size, int y_size)\",\n        \"Create a new true color image\"\n    ],\n    \"imagedashedline\": [\n        \"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a dashed line\"\n    ],\n    \"imagedestroy\": [\n        \"bool imagedestroy(resource im)\",\n        \"Destroy an image\"\n    ],\n    \"imageellipse\": [\n        \"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefill\": [\n        \"bool imagefill(resource im, int x, int y, int col)\",\n        \"Flood fill\"\n    ],\n    \"imagefilledarc\": [\n        \"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\n        \"Draw a filled partial ellipse\"\n    ],\n    \"imagefilledellipse\": [\n        \"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefilledpolygon\": [\n        \"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a filled polygon\"\n    ],\n    \"imagefilledrectangle\": [\n        \"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a filled rectangle\"\n    ],\n    \"imagefilltoborder\": [\n        \"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\n        \"Flood fill to specific color\"\n    ],\n    \"imagefilter\": [\n        \"bool imagefilter(resource src_im, int filtertype, [args] )\",\n        \"Applies Filter an image using a custom angle\"\n    ],\n    \"imagefontheight\": [\n        \"int imagefontheight(int font)\",\n        \"Get font height\"\n    ],\n    \"imagefontwidth\": [\n        \"int imagefontwidth(int font)\",\n        \"Get font width\"\n    ],\n    \"imageftbbox\": [\n        \"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\n        \"Give the bounding box of a text using fonts via freetype2\"\n    ],\n    \"imagefttext\": [\n        \"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\n        \"Write text to the image using fonts via freetype2\"\n    ],\n    \"imagegammacorrect\": [\n        \"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\n        \"Apply a gamma correction to a GD image\"\n    ],\n    \"imagegd\": [\n        \"bool imagegd(resource im [, string filename])\",\n        \"Output GD image to browser or file\"\n    ],\n    \"imagegd2\": [\n        \"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\n        \"Output GD2 image to browser or file\"\n    ],\n    \"imagegif\": [\n        \"bool imagegif(resource im [, string filename])\",\n        \"Output GIF image to browser or file\"\n    ],\n    \"imagegrabscreen\": [\n        \"resource imagegrabscreen()\",\n        \"Grab a screenshot\"\n    ],\n    \"imagegrabwindow\": [\n        \"resource imagegrabwindow(int window_handle [, int client_area])\",\n        \"Grab a window or its client area using a windows handle (HWND property in COM instance)\"\n    ],\n    \"imageinterlace\": [\n        \"int imageinterlace(resource im [, int interlace])\",\n        \"Enable or disable interlace\"\n    ],\n    \"imageistruecolor\": [\n        \"bool imageistruecolor(resource im)\",\n        \"return true if the image uses truecolor\"\n    ],\n    \"imagejpeg\": [\n        \"bool imagejpeg(resource im [, string filename [, int quality]])\",\n        \"Output JPEG image to browser or file\"\n    ],\n    \"imagelayereffect\": [\n        \"bool imagelayereffect(resource im, int effect)\",\n        \"Set the alpha blending flag to use the bundled libgd layering effects\"\n    ],\n    \"imageline\": [\n        \"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a line\"\n    ],\n    \"imageloadfont\": [\n        \"int imageloadfont(string filename)\",\n        \"Load a new font\"\n    ],\n    \"imagepalettecopy\": [\n        \"void imagepalettecopy(resource dst, resource src)\",\n        \"Copy the palette from the src image onto the dst image\"\n    ],\n    \"imagepng\": [\n        \"bool imagepng(resource im [, string filename])\",\n        \"Output PNG image to browser or file\"\n    ],\n    \"imagepolygon\": [\n        \"bool imagepolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a polygon\"\n    ],\n    \"imagepsbbox\": [\n        \"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\n        \"Return the bounding box needed by a string if rasterized\"\n    ],\n    \"imagepscopyfont\": [\n        \"int imagepscopyfont(int font_index)\",\n        \"Make a copy of a font for purposes like extending or reenconding\"\n    ],\n    \"imagepsencodefont\": [\n        \"bool imagepsencodefont(resource font_index, string filename)\",\n        \"To change a fonts character encoding vector\"\n    ],\n    \"imagepsextendfont\": [\n        \"bool imagepsextendfont(resource font_index, float extend)\",\n        \"Extend or or condense (if extend < 1) a font\"\n    ],\n    \"imagepsfreefont\": [\n        \"bool imagepsfreefont(resource font_index)\",\n        \"Free memory used by a font\"\n    ],\n    \"imagepsloadfont\": [\n        \"resource imagepsloadfont(string pathname)\",\n        \"Load a new font from specified file\"\n    ],\n    \"imagepsslantfont\": [\n        \"bool imagepsslantfont(resource font_index, float slant)\",\n        \"Slant a font\"\n    ],\n    \"imagepstext\": [\n        \"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\n        \"Rasterize a string over an image\"\n    ],\n    \"imagerectangle\": [\n        \"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a rectangle\"\n    ],\n    \"imagerotate\": [\n        \"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\n        \"Rotate an image using a custom angle\"\n    ],\n    \"imagesavealpha\": [\n        \"bool imagesavealpha(resource im, bool on)\",\n        \"Include alpha channel to a saved image\"\n    ],\n    \"imagesetbrush\": [\n        \"bool imagesetbrush(resource image, resource brush)\",\n        \"Set the brush image to $brush when filling $image with the \\\"IMG_COLOR_BRUSHED\\\" color\"\n    ],\n    \"imagesetpixel\": [\n        \"bool imagesetpixel(resource im, int x, int y, int col)\",\n        \"Set a single pixel\"\n    ],\n    \"imagesetstyle\": [\n        \"bool imagesetstyle(resource im, array styles)\",\n        \"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"\n    ],\n    \"imagesetthickness\": [\n        \"bool imagesetthickness(resource im, int thickness)\",\n        \"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"\n    ],\n    \"imagesettile\": [\n        \"bool imagesettile(resource image, resource tile)\",\n        \"Set the tile image to $tile when filling $image with the \\\"IMG_COLOR_TILED\\\" color\"\n    ],\n    \"imagestring\": [\n        \"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string horizontally\"\n    ],\n    \"imagestringup\": [\n        \"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string vertically - rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagesx\": [\n        \"int imagesx(resource im)\",\n        \"Get image width\"\n    ],\n    \"imagesy\": [\n        \"int imagesy(resource im)\",\n        \"Get image height\"\n    ],\n    \"imagetruecolortopalette\": [\n        \"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\n        \"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"\n    ],\n    \"imagettfbbox\": [\n        \"array imagettfbbox(float size, float angle, string font_file, string text)\",\n        \"Give the bounding box of a text using TrueType fonts\"\n    ],\n    \"imagettftext\": [\n        \"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\n        \"Write text to the image using a TrueType font\"\n    ],\n    \"imagetypes\": [\n        \"int imagetypes(void)\",\n        \"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"\n    ],\n    \"imagewbmp\": [\n        \"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"imagexbm\": [\n        \"int imagexbm(int im, string filename [, int foreground])\",\n        \"Output XBM image to browser or file\"\n    ],\n    \"imap_8bit\": [\n        \"string imap_8bit(string text)\",\n        \"Convert an 8-bit string to a quoted-printable string\"\n    ],\n    \"imap_alerts\": [\n        \"array imap_alerts(void)\",\n        \"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"\n    ],\n    \"imap_append\": [\n        \"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\n        \"Append a new message to a specified mailbox\"\n    ],\n    \"imap_base64\": [\n        \"string imap_base64(string text)\",\n        \"Decode BASE64 encoded text\"\n    ],\n    \"imap_binary\": [\n        \"string imap_binary(string text)\",\n        \"Convert an 8bit string to a base64 string\"\n    ],\n    \"imap_body\": [\n        \"string imap_body(resource stream_id, int msg_no [, int options])\",\n        \"Read the message body\"\n    ],\n    \"imap_bodystruct\": [\n        \"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\n        \"Read the structure of a specified body section of a specific message\"\n    ],\n    \"imap_check\": [\n        \"object imap_check(resource stream_id)\",\n        \"Get mailbox properties\"\n    ],\n    \"imap_clearflag_full\": [\n        \"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Clears flags on messages\"\n    ],\n    \"imap_close\": [\n        \"bool imap_close(resource stream_id [, int options])\",\n        \"Close an IMAP stream\"\n    ],\n    \"imap_createmailbox\": [\n        \"bool imap_createmailbox(resource stream_id, string mailbox)\",\n        \"Create a new mailbox\"\n    ],\n    \"imap_delete\": [\n        \"bool imap_delete(resource stream_id, int msg_no [, int options])\",\n        \"Mark a message for deletion\"\n    ],\n    \"imap_deletemailbox\": [\n        \"bool imap_deletemailbox(resource stream_id, string mailbox)\",\n        \"Delete a mailbox\"\n    ],\n    \"imap_errors\": [\n        \"array imap_errors(void)\",\n        \"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"\n    ],\n    \"imap_expunge\": [\n        \"bool imap_expunge(resource stream_id)\",\n        \"Permanently delete all messages marked for deletion\"\n    ],\n    \"imap_fetch_overview\": [\n        \"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\n        \"Read an overview of the information in the headers of the given message sequence\"\n    ],\n    \"imap_fetchbody\": [\n        \"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\n        \"Get a specific body section\"\n    ],\n    \"imap_fetchheader\": [\n        \"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\n        \"Get the full unfiltered header for a message\"\n    ],\n    \"imap_fetchstructure\": [\n        \"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\n        \"Read the full structure of a message\"\n    ],\n    \"imap_gc\": [\n        \"bool imap_gc(resource stream_id, int flags)\",\n        \"This function garbage collects (purges) the cache of entries of a specific type.\"\n    ],\n    \"imap_get_quota\": [\n        \"array imap_get_quota(resource stream_id, string qroot)\",\n        \"Returns the quota set to the mailbox account qroot\"\n    ],\n    \"imap_get_quotaroot\": [\n        \"array imap_get_quotaroot(resource stream_id, string mbox)\",\n        \"Returns the quota set to the mailbox account mbox\"\n    ],\n    \"imap_getacl\": [\n        \"array imap_getacl(resource stream_id, string mailbox)\",\n        \"Gets the ACL for a given mailbox\"\n    ],\n    \"imap_getmailboxes\": [\n        \"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\n        \"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"\n    ],\n    \"imap_getsubscribed\": [\n        \"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"\n    ],\n    \"imap_headerinfo\": [\n        \"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\n        \"Read the headers of the message\"\n    ],\n    \"imap_headers\": [\n        \"array imap_headers(resource stream_id)\",\n        \"Returns headers for all messages in a mailbox\"\n    ],\n    \"imap_last_error\": [\n        \"string imap_last_error(void)\",\n        \"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"\n    ],\n    \"imap_list\": [\n        \"array imap_list(resource stream_id, string ref, string pattern)\",\n        \"Read the list of mailboxes\"\n    ],\n    \"imap_listscan\": [\n        \"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\n        \"Read list of mailboxes containing a certain string\"\n    ],\n    \"imap_lsub\": [\n        \"array imap_lsub(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes\"\n    ],\n    \"imap_mail\": [\n        \"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\n        \"Send an email message\"\n    ],\n    \"imap_mail_compose\": [\n        \"string imap_mail_compose(array envelope, array body)\",\n        \"Create a MIME message based on given envelope and body sections\"\n    ],\n    \"imap_mail_copy\": [\n        \"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\n        \"Copy specified message to a mailbox\"\n    ],\n    \"imap_mail_move\": [\n        \"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\n        \"Move specified message to a mailbox\"\n    ],\n    \"imap_mailboxmsginfo\": [\n        \"object imap_mailboxmsginfo(resource stream_id)\",\n        \"Returns info about the current mailbox\"\n    ],\n    \"imap_mime_header_decode\": [\n        \"array imap_mime_header_decode(string str)\",\n        \"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"\n    ],\n    \"imap_msgno\": [\n        \"int imap_msgno(resource stream_id, int unique_msg_id)\",\n        \"Get the sequence number associated with a UID\"\n    ],\n    \"imap_mutf7_to_utf8\": [\n        \"string imap_mutf7_to_utf8(string in)\",\n        \"Decode a modified UTF-7 string to UTF-8\"\n    ],\n    \"imap_num_msg\": [\n        \"int imap_num_msg(resource stream_id)\",\n        \"Gives the number of messages in the current mailbox\"\n    ],\n    \"imap_num_recent\": [\n        \"int imap_num_recent(resource stream_id)\",\n        \"Gives the number of recent messages in current mailbox\"\n    ],\n    \"imap_open\": [\n        \"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\n        \"Open an IMAP stream to a mailbox\"\n    ],\n    \"imap_ping\": [\n        \"bool imap_ping(resource stream_id)\",\n        \"Check if the IMAP stream is still active\"\n    ],\n    \"imap_qprint\": [\n        \"string imap_qprint(string text)\",\n        \"Convert a quoted-printable string to an 8-bit string\"\n    ],\n    \"imap_renamemailbox\": [\n        \"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\n        \"Rename a mailbox\"\n    ],\n    \"imap_reopen\": [\n        \"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\n        \"Reopen an IMAP stream to a new mailbox\"\n    ],\n    \"imap_rfc822_parse_adrlist\": [\n        \"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\n        \"Parses an address string\"\n    ],\n    \"imap_rfc822_parse_headers\": [\n        \"object imap_rfc822_parse_headers(string headers [, string default_host])\",\n        \"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"\n    ],\n    \"imap_rfc822_write_address\": [\n        \"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\n        \"Returns a properly formatted email address given the mailbox, host, and personal info\"\n    ],\n    \"imap_savebody\": [\n        \"bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \\\"\\\"[, int options = 0]])\",\n        \"Save a specific body section to a file\"\n    ],\n    \"imap_search\": [\n        \"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\n        \"Return a list of messages matching the given criteria\"\n    ],\n    \"imap_set_quota\": [\n        \"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\n        \"Will set the quota for qroot mailbox\"\n    ],\n    \"imap_setacl\": [\n        \"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\n        \"Sets the ACL for a given mailbox\"\n    ],\n    \"imap_setflag_full\": [\n        \"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Sets flags on messages\"\n    ],\n    \"imap_sort\": [\n        \"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\n        \"Sort an array of message headers, optionally including only messages that meet specified criteria.\"\n    ],\n    \"imap_status\": [\n        \"object imap_status(resource stream_id, string mailbox, int options)\",\n        \"Get status info from a mailbox\"\n    ],\n    \"imap_subscribe\": [\n        \"bool imap_subscribe(resource stream_id, string mailbox)\",\n        \"Subscribe to a mailbox\"\n    ],\n    \"imap_thread\": [\n        \"array imap_thread(resource stream_id [, int options])\",\n        \"Return threaded by REFERENCES tree\"\n    ],\n    \"imap_timeout\": [\n        \"mixed imap_timeout(int timeout_type [, int timeout])\",\n        \"Set or fetch imap timeout\"\n    ],\n    \"imap_uid\": [\n        \"int imap_uid(resource stream_id, int msg_no)\",\n        \"Get the unique message id associated with a standard sequential message number\"\n    ],\n    \"imap_undelete\": [\n        \"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\n        \"Remove the delete flag from a message\"\n    ],\n    \"imap_unsubscribe\": [\n        \"bool imap_unsubscribe(resource stream_id, string mailbox)\",\n        \"Unsubscribe from a mailbox\"\n    ],\n    \"imap_utf7_decode\": [\n        \"string imap_utf7_decode(string buf)\",\n        \"Decode a modified UTF-7 string\"\n    ],\n    \"imap_utf7_encode\": [\n        \"string imap_utf7_encode(string buf)\",\n        \"Encode a string in modified UTF-7\"\n    ],\n    \"imap_utf8\": [\n        \"string imap_utf8(string mime_encoded_text)\",\n        \"Convert a mime-encoded text to UTF-8\"\n    ],\n    \"imap_utf8_to_mutf7\": [\n        \"string imap_utf8_to_mutf7(string in)\",\n        \"Encode a UTF-8 string to modified UTF-7\"\n    ],\n    \"implode\": [\n        \"string implode([string glue,] array pieces)\",\n        \"Joins array elements placing glue string between items and return one string\"\n    ],\n    \"import_request_variables\": [\n        \"bool import_request_variables(string types [, string prefix])\",\n        \"Import GET/POST/Cookie variables into the global scope\"\n    ],\n    \"in_array\": [\n        \"bool in_array(mixed needle, array haystack [, bool strict])\",\n        \"Checks if the given value exists in the array\"\n    ],\n    \"include\": [\n        \"bool include(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"include_once\": [\n        \"bool include_once(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"inet_ntop\": [\n        \"string inet_ntop(string in_addr)\",\n        \"Converts a packed inet address to a human readable IP address string\"\n    ],\n    \"inet_pton\": [\n        \"string inet_pton(string ip_address)\",\n        \"Converts a human readable IP address to a packed binary string\"\n    ],\n    \"ini_get\": [\n        \"string ini_get(string varname)\",\n        \"Get a configuration option\"\n    ],\n    \"ini_get_all\": [\n        \"array ini_get_all([string extension[, bool details = true]])\",\n        \"Get all configuration options\"\n    ],\n    \"ini_restore\": [\n        \"void ini_restore(string varname)\",\n        \"Restore the value of a configuration option specified by varname\"\n    ],\n    \"ini_set\": [\n        \"string ini_set(string varname, string newvalue)\",\n        \"Set a configuration option, returns false on error and the old value of the configuration option on success\"\n    ],\n    \"interface_exists\": [\n        \"bool interface_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"intl_error_name\": [\n        \"string intl_error_name()\",\n        \"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"\n    ],\n    \"intl_get_error_code\": [\n        \"int intl_get_error_code()\",\n        \"* Get code of the last occured error.\"\n    ],\n    \"intl_get_error_message\": [\n        \"string intl_get_error_message()\",\n        \"* Get text description of the last occured error.\"\n    ],\n    \"intl_is_failure\": [\n        \"bool intl_is_failure()\",\n        \"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"\n    ],\n    \"intval\": [\n        \"int intval(mixed var [, int base])\",\n        \"Get the integer value of a variable using the optional base for the conversion\"\n    ],\n    \"ip2long\": [\n        \"int ip2long(string ip_address)\",\n        \"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"\n    ],\n    \"iptcembed\": [\n        \"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\n        \"Embed binary IPTC data into a JPEG image.\"\n    ],\n    \"iptcparse\": [\n        \"array iptcparse(string iptcdata)\",\n        \"Parse binary IPTC-data into associative array\"\n    ],\n    \"is_a\": [\n        \"bool is_a(object object, string class_name)\",\n        \"Returns true if the object is of this class or has this class as one of its parents\"\n    ],\n    \"is_array\": [\n        \"bool is_array(mixed var)\",\n        \"Returns true if variable is an array\"\n    ],\n    \"is_bool\": [\n        \"bool is_bool(mixed var)\",\n        \"Returns true if variable is a boolean\"\n    ],\n    \"is_callable\": [\n        \"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\n        \"Returns true if var is callable.\"\n    ],\n    \"is_dir\": [\n        \"bool is_dir(string filename)\",\n        \"Returns true if file is directory\"\n    ],\n    \"is_executable\": [\n        \"bool is_executable(string filename)\",\n        \"Returns true if file is executable\"\n    ],\n    \"is_file\": [\n        \"bool is_file(string filename)\",\n        \"Returns true if file is a regular file\"\n    ],\n    \"is_finite\": [\n        \"bool is_finite(float val)\",\n        \"Returns whether argument is finite\"\n    ],\n    \"is_float\": [\n        \"bool is_float(mixed var)\",\n        \"Returns true if variable is float point\"\n    ],\n    \"is_infinite\": [\n        \"bool is_infinite(float val)\",\n        \"Returns whether argument is infinite\"\n    ],\n    \"is_link\": [\n        \"bool is_link(string filename)\",\n        \"Returns true if file is symbolic link\"\n    ],\n    \"is_long\": [\n        \"bool is_long(mixed var)\",\n        \"Returns true if variable is a long (integer)\"\n    ],\n    \"is_nan\": [\n        \"bool is_nan(float val)\",\n        \"Returns whether argument is not a number\"\n    ],\n    \"is_null\": [\n        \"bool is_null(mixed var)\",\n        \"Returns true if variable is null\"\n    ],\n    \"is_numeric\": [\n        \"bool is_numeric(mixed value)\",\n        \"Returns true if value is a number or a numeric string\"\n    ],\n    \"is_object\": [\n        \"bool is_object(mixed var)\",\n        \"Returns true if variable is an object\"\n    ],\n    \"is_readable\": [\n        \"bool is_readable(string filename)\",\n        \"Returns true if file can be read\"\n    ],\n    \"is_resource\": [\n        \"bool is_resource(mixed var)\",\n        \"Returns true if variable is a resource\"\n    ],\n    \"is_scalar\": [\n        \"bool is_scalar(mixed value)\",\n        \"Returns true if value is a scalar\"\n    ],\n    \"is_string\": [\n        \"bool is_string(mixed var)\",\n        \"Returns true if variable is a string\"\n    ],\n    \"is_subclass_of\": [\n        \"bool is_subclass_of(object object, string class_name)\",\n        \"Returns true if the object has this class as one of its parents\"\n    ],\n    \"is_uploaded_file\": [\n        \"bool is_uploaded_file(string path)\",\n        \"Check if file was created by rfc1867 upload\"\n    ],\n    \"is_writable\": [\n        \"bool is_writable(string filename)\",\n        \"Returns true if file can be written\"\n    ],\n    \"isset\": [\n        \"bool isset(mixed var [, mixed var])\",\n        \"Determine whether a variable is set\"\n    ],\n    \"iterator_apply\": [\n        \"int iterator_apply(Traversable it, mixed function [, mixed params])\",\n        \"Calls a function for every element in an iterator\"\n    ],\n    \"iterator_count\": [\n        \"int iterator_count(Traversable it)\",\n        \"Count the elements in an iterator\"\n    ],\n    \"iterator_to_array\": [\n        \"array iterator_to_array(Traversable it [, bool use_keys = true])\",\n        \"Copy the iterator into an array\"\n    ],\n    \"jddayofweek\": [\n        \"mixed jddayofweek(int juliandaycount [, int mode])\",\n        \"Returns name or number of day of week from julian day count\"\n    ],\n    \"jdmonthname\": [\n        \"string jdmonthname(int juliandaycount, int mode)\",\n        \"Returns name of month for julian day count\"\n    ],\n    \"jdtofrench\": [\n        \"string jdtofrench(int juliandaycount)\",\n        \"Converts a julian day count to a french republic calendar date\"\n    ],\n    \"jdtogregorian\": [\n        \"string jdtogregorian(int juliandaycount)\",\n        \"Converts a julian day count to a gregorian calendar date\"\n    ],\n    \"jdtojewish\": [\n        \"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\n        \"Converts a julian day count to a jewish calendar date\"\n    ],\n    \"jdtojulian\": [\n        \"string jdtojulian(int juliandaycount)\",\n        \"Convert a julian day count to a julian calendar date\"\n    ],\n    \"jdtounix\": [\n        \"int jdtounix(int jday)\",\n        \"Convert Julian Day to UNIX timestamp\"\n    ],\n    \"jewishtojd\": [\n        \"int jewishtojd(int month, int day, int year)\",\n        \"Converts a jewish calendar date to a julian day count\"\n    ],\n    \"join\": [\n        \"string join(array src, string glue)\",\n        \"An alias for implode\"\n    ],\n    \"jpeg2wbmp\": [\n        \"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert JPEG image to WBMP image\"\n    ],\n    \"json_decode\": [\n        \"mixed json_decode(string json [, bool assoc [, long depth]])\",\n        \"Decodes the JSON representation into a PHP value\"\n    ],\n    \"json_encode\": [\n        \"string json_encode(mixed data [, int options])\",\n        \"Returns the JSON representation of a value\"\n    ],\n    \"json_last_error\": [\n        \"int json_last_error()\",\n        \"Returns the error code of the last json_decode().\"\n    ],\n    \"juliantojd\": [\n        \"int juliantojd(int month, int day, int year)\",\n        \"Converts a julian calendar date to julian day count\"\n    ],\n    \"key\": [\n        \"mixed key(array array_arg)\",\n        \"Return the key of the element currently pointed to by the internal array pointer\"\n    ],\n    \"krsort\": [\n        \"bool krsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key value in reverse order\"\n    ],\n    \"ksort\": [\n        \"bool ksort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key\"\n    ],\n    \"lcfirst\": [\n        \"string lcfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"lcg_value\": [\n        \"float lcg_value()\",\n        \"Returns a value from the combined linear congruential generator\"\n    ],\n    \"lchgrp\": [\n        \"bool lchgrp(string filename, mixed group)\",\n        \"Change symlink group\"\n    ],\n    \"ldap_8859_to_t61\": [\n        \"string ldap_8859_to_t61(string value)\",\n        \"Translate 8859 characters to t61 characters\"\n    ],\n    \"ldap_add\": [\n        \"bool ldap_add(resource link, string dn, array entry)\",\n        \"Add entries to LDAP directory\"\n    ],\n    \"ldap_bind\": [\n        \"bool ldap_bind(resource link [, string dn [, string password]])\",\n        \"Bind to LDAP directory\"\n    ],\n    \"ldap_compare\": [\n        \"bool ldap_compare(resource link, string dn, string attr, string value)\",\n        \"Determine if an entry has a specific value for one of its attributes\"\n    ],\n    \"ldap_connect\": [\n        \"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\n        \"Connect to an LDAP server\"\n    ],\n    \"ldap_count_entries\": [\n        \"int ldap_count_entries(resource link, resource result)\",\n        \"Count the number of entries in a search result\"\n    ],\n    \"ldap_delete\": [\n        \"bool ldap_delete(resource link, string dn)\",\n        \"Delete an entry from a directory\"\n    ],\n    \"ldap_dn2ufn\": [\n        \"string ldap_dn2ufn(string dn)\",\n        \"Convert DN to User Friendly Naming format\"\n    ],\n    \"ldap_err2str\": [\n        \"string ldap_err2str(int errno)\",\n        \"Convert error number to error string\"\n    ],\n    \"ldap_errno\": [\n        \"int ldap_errno(resource link)\",\n        \"Get the current ldap error number\"\n    ],\n    \"ldap_error\": [\n        \"string ldap_error(resource link)\",\n        \"Get the current ldap error string\"\n    ],\n    \"ldap_explode_dn\": [\n        \"array ldap_explode_dn(string dn, int with_attrib)\",\n        \"Splits DN into its component parts\"\n    ],\n    \"ldap_first_attribute\": [\n        \"string ldap_first_attribute(resource link, resource result_entry)\",\n        \"Return first attribute\"\n    ],\n    \"ldap_first_entry\": [\n        \"resource ldap_first_entry(resource link, resource result)\",\n        \"Return first result id\"\n    ],\n    \"ldap_first_reference\": [\n        \"resource ldap_first_reference(resource link, resource result)\",\n        \"Return first reference\"\n    ],\n    \"ldap_free_result\": [\n        \"bool ldap_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"ldap_get_attributes\": [\n        \"array ldap_get_attributes(resource link, resource result_entry)\",\n        \"Get attributes from a search result entry\"\n    ],\n    \"ldap_get_dn\": [\n        \"string ldap_get_dn(resource link, resource result_entry)\",\n        \"Get the DN of a result entry\"\n    ],\n    \"ldap_get_entries\": [\n        \"array ldap_get_entries(resource link, resource result)\",\n        \"Get all result entries\"\n    ],\n    \"ldap_get_option\": [\n        \"bool ldap_get_option(resource link, int option, mixed retval)\",\n        \"Get the current value of various session-wide parameters\"\n    ],\n    \"ldap_get_values_len\": [\n        \"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\n        \"Get all values with lengths from a result entry\"\n    ],\n    \"ldap_list\": [\n        \"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Single-level search\"\n    ],\n    \"ldap_mod_add\": [\n        \"bool ldap_mod_add(resource link, string dn, array entry)\",\n        \"Add attribute values to current\"\n    ],\n    \"ldap_mod_del\": [\n        \"bool ldap_mod_del(resource link, string dn, array entry)\",\n        \"Delete attribute values\"\n    ],\n    \"ldap_mod_replace\": [\n        \"bool ldap_mod_replace(resource link, string dn, array entry)\",\n        \"Replace attribute values with new ones\"\n    ],\n    \"ldap_next_attribute\": [\n        \"string ldap_next_attribute(resource link, resource result_entry)\",\n        \"Get the next attribute in result\"\n    ],\n    \"ldap_next_entry\": [\n        \"resource ldap_next_entry(resource link, resource result_entry)\",\n        \"Get next result entry\"\n    ],\n    \"ldap_next_reference\": [\n        \"resource ldap_next_reference(resource link, resource reference_entry)\",\n        \"Get next reference\"\n    ],\n    \"ldap_parse_reference\": [\n        \"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\n        \"Extract information from reference entry\"\n    ],\n    \"ldap_parse_result\": [\n        \"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\n        \"Extract information from result\"\n    ],\n    \"ldap_read\": [\n        \"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Read an entry\"\n    ],\n    \"ldap_rename\": [\n        \"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\n        \"Modify the name of an entry\"\n    ],\n    \"ldap_sasl_bind\": [\n        \"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\n        \"Bind to LDAP directory using SASL\"\n    ],\n    \"ldap_search\": [\n        \"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Search LDAP tree under base_dn\"\n    ],\n    \"ldap_set_option\": [\n        \"bool ldap_set_option(resource link, int option, mixed newval)\",\n        \"Set the value of various session-wide parameters\"\n    ],\n    \"ldap_set_rebind_proc\": [\n        \"bool ldap_set_rebind_proc(resource link, string callback)\",\n        \"Set a callback function to do re-binds on referral chasing.\"\n    ],\n    \"ldap_sort\": [\n        \"bool ldap_sort(resource link, resource result, string sortfilter)\",\n        \"Sort LDAP result entries\"\n    ],\n    \"ldap_start_tls\": [\n        \"bool ldap_start_tls(resource link)\",\n        \"Start TLS\"\n    ],\n    \"ldap_t61_to_8859\": [\n        \"string ldap_t61_to_8859(string value)\",\n        \"Translate t61 characters to 8859 characters\"\n    ],\n    \"ldap_unbind\": [\n        \"bool ldap_unbind(resource link)\",\n        \"Unbind from LDAP directory\"\n    ],\n    \"leak\": [\n        \"void leak(int num_bytes=3)\",\n        \"Cause an intentional memory leak, for testing/debugging purposes\"\n    ],\n    \"levenshtein\": [\n        \"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\n        \"Calculate Levenshtein distance between two strings\"\n    ],\n    \"libxml_clear_errors\": [\n        \"void libxml_clear_errors()\",\n        \"Clear last error from libxml\"\n    ],\n    \"libxml_disable_entity_loader\": [\n        \"bool libxml_disable_entity_loader([boolean disable])\",\n        \"Disable/Enable ability to load external entities\"\n    ],\n    \"libxml_get_errors\": [\n        \"object libxml_get_errors()\",\n        \"Retrieve array of errors\"\n    ],\n    \"libxml_get_last_error\": [\n        \"object libxml_get_last_error()\",\n        \"Retrieve last error from libxml\"\n    ],\n    \"libxml_set_streams_context\": [\n        \"void libxml_set_streams_context(resource streams_context)\",\n        \"Set the streams context for the next libxml document load or write\"\n    ],\n    \"libxml_use_internal_errors\": [\n        \"bool libxml_use_internal_errors([boolean use_errors])\",\n        \"Disable libxml errors and allow user to fetch error information as needed\"\n    ],\n    \"link\": [\n        \"int link(string target, string link)\",\n        \"Create a hard link\"\n    ],\n    \"linkinfo\": [\n        \"int linkinfo(string filename)\",\n        \"Returns the st_dev field of the UNIX C stat structure describing the link\"\n    ],\n    \"litespeed_request_headers\": [\n        \"array litespeed_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"litespeed_response_headers\": [\n        \"array litespeed_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"locale_accept_from_http\": [\n        \"string locale_accept_from_http(string $http_accept)\",\n        null\n    ],\n    \"locale_canonicalize\": [\n        \"static string locale_canonicalize(Locale $loc, string $locale)\",\n        \"* @param string $locale The locale string to canonicalize\"\n    ],\n    \"locale_filter_matches\": [\n        \"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\n        \"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"\n    ],\n    \"locale_get_all_variants\": [\n        \"static array locale_get_all_variants($locale)\",\n        \"* gets an array containing the list of variants, or null\"\n    ],\n    \"locale_get_default\": [\n        \"static string locale_get_default( )\",\n        \"Get default locale\"\n    ],\n    \"locale_get_keywords\": [\n        \"static array locale_get_keywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"\n    ],\n    \"locale_get_primary_language\": [\n        \"static string locale_get_primary_language($locale)\",\n        \"* gets the primary language for the $locale\"\n    ],\n    \"locale_get_region\": [\n        \"static string locale_get_region($locale)\",\n        \"* gets the region for the $locale\"\n    ],\n    \"locale_get_script\": [\n        \"static string locale_get_script($locale)\",\n        \"* gets the script for the $locale\"\n    ],\n    \"locale_lookup\": [\n        \"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\n        \"* Searchs the items in $langtag for the best match to the language * range\"\n    ],\n    \"locale_set_default\": [\n        \"static string locale_set_default( string $locale )\",\n        \"Set default locale\"\n    ],\n    \"localeconv\": [\n        \"array localeconv(void)\",\n        \"Returns numeric formatting information based on the current locale\"\n    ],\n    \"localtime\": [\n        \"array localtime([int timestamp [, bool associative_array]])\",\n        \"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"\n    ],\n    \"log\": [\n        \"float log(float number, [float base])\",\n        \"Returns the natural logarithm of the number, or the base log if base is specified\"\n    ],\n    \"log10\": [\n        \"float log10(float number)\",\n        \"Returns the base-10 logarithm of the number\"\n    ],\n    \"log1p\": [\n        \"float log1p(float number)\",\n        \"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"long2ip\": [\n        \"string long2ip(int proper_address)\",\n        \"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"\n    ],\n    \"lstat\": [\n        \"array lstat(string filename)\",\n        \"Give information about a file or symbolic link\"\n    ],\n    \"ltrim\": [\n        \"string ltrim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning of a string\"\n    ],\n    \"mail\": [\n        \"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"Send an email message\"\n    ],\n    \"max\": [\n        \"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the highest value in an array or a series of arguments\"\n    ],\n    \"mb_check_encoding\": [\n        \"bool mb_check_encoding([string var[, string encoding]])\",\n        \"Check if the string is valid for the specified encoding\"\n    ],\n    \"mb_convert_case\": [\n        \"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\n        \"Returns a case-folded version of sourcestring\"\n    ],\n    \"mb_convert_encoding\": [\n        \"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\n        \"Returns converted string in desired encoding\"\n    ],\n    \"mb_convert_kana\": [\n        \"string mb_convert_kana(string str [, string option] [, string encoding])\",\n        \"Conversion between full-width character and half-width character (Japanese)\"\n    ],\n    \"mb_convert_variables\": [\n        \"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\n        \"Converts the string resource in variables to desired encoding\"\n    ],\n    \"mb_decode_mimeheader\": [\n        \"string mb_decode_mimeheader(string string)\",\n        \"Decodes the MIME \\\"encoded-word\\\" in the string\"\n    ],\n    \"mb_decode_numericentity\": [\n        \"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts HTML numeric entities to character code\"\n    ],\n    \"mb_detect_encoding\": [\n        \"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\n        \"Encodings of the given string is returned (as a string)\"\n    ],\n    \"mb_detect_order\": [\n        \"bool|array mb_detect_order([mixed encoding-list])\",\n        \"Sets the current detect_order or Return the current detect_order as a array\"\n    ],\n    \"mb_encode_mimeheader\": [\n        \"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",\n        \"Converts the string to MIME \\\"encoded-word\\\" in the format of =?charset?(B|Q)?encoded_string?=\"\n    ],\n    \"mb_encode_numericentity\": [\n        \"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts specified characters to HTML numeric entities\"\n    ],\n    \"mb_encoding_aliases\": [\n        \"array mb_encoding_aliases(string encoding)\",\n        \"Returns an array of the aliases of a given encoding name\"\n    ],\n    \"mb_ereg\": [\n        \"int mb_ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_match\": [\n        \"bool mb_ereg_match(string pattern, string string [,string option])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_replace\": [\n        \"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\n        \"Replace regular expression for multibyte string\"\n    ],\n    \"mb_ereg_search\": [\n        \"bool mb_ereg_search([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_getpos\": [\n        \"int mb_ereg_search_getpos(void)\",\n        \"Get search start position\"\n    ],\n    \"mb_ereg_search_getregs\": [\n        \"array mb_ereg_search_getregs(void)\",\n        \"Get matched substring of the last time\"\n    ],\n    \"mb_ereg_search_init\": [\n        \"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\n        \"Initialize string and regular expression for search.\"\n    ],\n    \"mb_ereg_search_pos\": [\n        \"array mb_ereg_search_pos([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_regs\": [\n        \"array mb_ereg_search_regs([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_setpos\": [\n        \"bool mb_ereg_search_setpos(int position)\",\n        \"Set search start position\"\n    ],\n    \"mb_eregi\": [\n        \"int mb_eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match for multibyte string\"\n    ],\n    \"mb_eregi_replace\": [\n        \"string mb_eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression for multibyte string\"\n    ],\n    \"mb_get_info\": [\n        \"mixed mb_get_info([string type])\",\n        \"Returns the current settings of mbstring\"\n    ],\n    \"mb_http_input\": [\n        \"mixed mb_http_input([string type])\",\n        \"Returns the input encoding\"\n    ],\n    \"mb_http_output\": [\n        \"string mb_http_output([string encoding])\",\n        \"Sets the current output_encoding or returns the current output_encoding as a string\"\n    ],\n    \"mb_internal_encoding\": [\n        \"string mb_internal_encoding([string encoding])\",\n        \"Sets the current internal encoding or Returns the current internal encoding as a string\"\n    ],\n    \"mb_language\": [\n        \"string mb_language([string language])\",\n        \"Sets the current language or Returns the current language as a string\"\n    ],\n    \"mb_list_encodings\": [\n        \"mixed mb_list_encodings()\",\n        \"Returns an array of all supported entity encodings\"\n    ],\n    \"mb_output_handler\": [\n        \"string mb_output_handler(string contents, int status)\",\n        \"Returns string in output buffer converted to the http_output encoding\"\n    ],\n    \"mb_parse_str\": [\n        \"bool mb_parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"mb_preferred_mime_name\": [\n        \"string mb_preferred_mime_name(string encoding)\",\n        \"Return the preferred MIME name (charset) as a string\"\n    ],\n    \"mb_regex_encoding\": [\n        \"string mb_regex_encoding([string encoding])\",\n        \"Returns the current encoding for regex as a string.\"\n    ],\n    \"mb_regex_set_options\": [\n        \"string mb_regex_set_options([string options])\",\n        \"Set or get the default options for mbregex functions\"\n    ],\n    \"mb_send_mail\": [\n        \"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"*  Sends an email message with MIME scheme\"\n    ],\n    \"mb_split\": [\n        \"array mb_split(string pattern, string string [, int limit])\",\n        \"split multibyte string into array by regular expression\"\n    ],\n    \"mb_strcut\": [\n        \"string mb_strcut(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_strimwidth\": [\n        \"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\n        \"Trim the string in terminal width\"\n    ],\n    \"mb_stripos\": [\n        \"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_stristr\": [\n        \"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strlen\": [\n        \"int mb_strlen(string str [, string encoding])\",\n        \"Get character numbers of a string\"\n    ],\n    \"mb_strpos\": [\n        \"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"mb_strrchr\": [\n        \"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"mb_strrichr\": [\n        \"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another, case insensitive\"\n    ],\n    \"mb_strripos\": [\n        \"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of last occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strrpos\": [\n        \"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"mb_strstr\": [\n        \"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"mb_strtolower\": [\n        \"string mb_strtolower(string sourcestring [, string encoding])\",\n        \"*  Returns a lowercased version of sourcestring\"\n    ],\n    \"mb_strtoupper\": [\n        \"string mb_strtoupper(string sourcestring [, string encoding])\",\n        \"*  Returns a uppercased version of sourcestring\"\n    ],\n    \"mb_strwidth\": [\n        \"int mb_strwidth(string str [, string encoding])\",\n        \"Gets terminal width of a string\"\n    ],\n    \"mb_substitute_character\": [\n        \"mixed mb_substitute_character([mixed substchar])\",\n        \"Sets the current substitute_character or returns the current substitute_character\"\n    ],\n    \"mb_substr\": [\n        \"string mb_substr(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_substr_count\": [\n        \"int mb_substr_count(string haystack, string needle [, string encoding])\",\n        \"Count the number of substring occurrences\"\n    ],\n    \"mcrypt_cbc\": [\n        \"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\n        \"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_cfb\": [\n        \"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\n        \"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_create_iv\": [\n        \"string mcrypt_create_iv(int size, int source)\",\n        \"Create an initialization vector (IV)\"\n    ],\n    \"mcrypt_decrypt\": [\n        \"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_ecb\": [\n        \"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\n        \"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_enc_get_algorithms_name\": [\n        \"string mcrypt_enc_get_algorithms_name(resource td)\",\n        \"Returns the name of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_block_size\": [\n        \"int mcrypt_enc_get_block_size(resource td)\",\n        \"Returns the block size of the cipher specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_iv_size\": [\n        \"int mcrypt_enc_get_iv_size(resource td)\",\n        \"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_key_size\": [\n        \"int mcrypt_enc_get_key_size(resource td)\",\n        \"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_modes_name\": [\n        \"string mcrypt_enc_get_modes_name(resource td)\",\n        \"Returns the name of the mode specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_supported_key_sizes\": [\n        \"array mcrypt_enc_get_supported_key_sizes(resource td)\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_enc_is_block_algorithm\": [\n        \"bool mcrypt_enc_is_block_algorithm(resource td)\",\n        \"Returns TRUE if the alrogithm is a block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_algorithm_mode\": [\n        \"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_mode\": [\n        \"bool mcrypt_enc_is_block_mode(resource td)\",\n        \"Returns TRUE if the mode outputs blocks\"\n    ],\n    \"mcrypt_enc_self_test\": [\n        \"int mcrypt_enc_self_test(resource td)\",\n        \"This function runs the self test on the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_encrypt\": [\n        \"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_generic\": [\n        \"string mcrypt_generic(resource td, string data)\",\n        \"This function encrypts the plaintext\"\n    ],\n    \"mcrypt_generic_deinit\": [\n        \"bool mcrypt_generic_deinit(resource td)\",\n        \"This function terminates encrypt specified by the descriptor td\"\n    ],\n    \"mcrypt_generic_init\": [\n        \"int mcrypt_generic_init(resource td, string key, string iv)\",\n        \"This function initializes all buffers for the specific module\"\n    ],\n    \"mcrypt_get_block_size\": [\n        \"int mcrypt_get_block_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_cipher_name\": [\n        \"string mcrypt_get_cipher_name(string cipher)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_iv_size\": [\n        \"int mcrypt_get_iv_size(string cipher, string module)\",\n        \"Get the IV size of cipher (Usually the same as the blocksize)\"\n    ],\n    \"mcrypt_get_key_size\": [\n        \"int mcrypt_get_key_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_list_algorithms\": [\n        \"array mcrypt_list_algorithms([string lib_dir])\",\n        \"List all algorithms in \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_list_modes\": [\n        \"array mcrypt_list_modes([string lib_dir])\",\n        \"List all modes \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_module_close\": [\n        \"bool mcrypt_module_close(resource td)\",\n        \"Free the descriptor td\"\n    ],\n    \"mcrypt_module_get_algo_block_size\": [\n        \"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\n        \"Returns the block size of the algorithm\"\n    ],\n    \"mcrypt_module_get_algo_key_size\": [\n        \"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\n        \"Returns the maximum supported key size of the algorithm\"\n    ],\n    \"mcrypt_module_get_supported_key_sizes\": [\n        \"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_module_is_block_algorithm\": [\n        \"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\n        \"Returns TRUE if the algorithm is a block algorithm\"\n    ],\n    \"mcrypt_module_is_block_algorithm_mode\": [\n        \"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_module_is_block_mode\": [\n        \"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode outputs blocks of bytes\"\n    ],\n    \"mcrypt_module_open\": [\n        \"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\n        \"Opens the module of the algorithm and the mode to be used\"\n    ],\n    \"mcrypt_module_self_test\": [\n        \"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",\n        \"Does a self test of the module \\\"module\\\"\"\n    ],\n    \"mcrypt_ofb\": [\n        \"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"md5\": [\n        \"string md5(string str, [ bool raw_output])\",\n        \"Calculate the md5 hash of a string\"\n    ],\n    \"md5_file\": [\n        \"string md5_file(string filename [, bool raw_output])\",\n        \"Calculate the md5 hash of given filename\"\n    ],\n    \"mdecrypt_generic\": [\n        \"string mdecrypt_generic(resource td, string data)\",\n        \"This function decrypts the plaintext\"\n    ],\n    \"memory_get_peak_usage\": [\n        \"int memory_get_peak_usage([real_usage])\",\n        \"Returns the peak allocated by PHP memory\"\n    ],\n    \"memory_get_usage\": [\n        \"int memory_get_usage([real_usage])\",\n        \"Returns the allocated by PHP memory\"\n    ],\n    \"metaphone\": [\n        \"string metaphone(string text[, int phones])\",\n        \"Break english phrases down into their phonemes\"\n    ],\n    \"method_exists\": [\n        \"bool method_exists(object object, string method)\",\n        \"Checks if the class method exists\"\n    ],\n    \"mhash\": [\n        \"string mhash(int hash, string data [, string key])\",\n        \"Hash data with hash\"\n    ],\n    \"mhash_count\": [\n        \"int mhash_count(void)\",\n        \"Gets the number of available hashes\"\n    ],\n    \"mhash_get_block_size\": [\n        \"int mhash_get_block_size(int hash)\",\n        \"Gets the block size of hash\"\n    ],\n    \"mhash_get_hash_name\": [\n        \"string mhash_get_hash_name(int hash)\",\n        \"Gets the name of hash\"\n    ],\n    \"mhash_keygen_s2k\": [\n        \"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\n        \"Generates a key using hash functions\"\n    ],\n    \"microtime\": [\n        \"mixed microtime([bool get_as_float])\",\n        \"Returns either a string or a float containing the current time in seconds and microseconds\"\n    ],\n    \"mime_content_type\": [\n        \"string mime_content_type(string filename|resource stream)\",\n        \"Return content-type for file\"\n    ],\n    \"min\": [\n        \"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the lowest value in an array or a series of arguments\"\n    ],\n    \"mkdir\": [\n        \"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\n        \"Create a directory\"\n    ],\n    \"mktime\": [\n        \"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a date\"\n    ],\n    \"money_format\": [\n        \"string money_format(string format , float value)\",\n        \"Convert monetary value(s) to string\"\n    ],\n    \"move_uploaded_file\": [\n        \"bool move_uploaded_file(string path, string new_path)\",\n        \"Move a file if and only if it was created by an upload\"\n    ],\n    \"msg_get_queue\": [\n        \"resource msg_get_queue(int key [, int perms])\",\n        \"Attach to a message queue\"\n    ],\n    \"msg_queue_exists\": [\n        \"bool msg_queue_exists(int key)\",\n        \"Check whether a message queue exists\"\n    ],\n    \"msg_receive\": [\n        \"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_remove_queue\": [\n        \"bool msg_remove_queue(resource queue)\",\n        \"Destroy the queue\"\n    ],\n    \"msg_send\": [\n        \"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_set_queue\": [\n        \"bool msg_set_queue(resource queue, array data)\",\n        \"Set information for a message queue\"\n    ],\n    \"msg_stat_queue\": [\n        \"array msg_stat_queue(resource queue)\",\n        \"Returns information about a message queue\"\n    ],\n    \"msgfmt_create\": [\n        \"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\n        \"* Create formatter.\"\n    ],\n    \"msgfmt_format\": [\n        \"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_format_message\": [\n        \"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_get_error_code\": [\n        \"int msgfmt_get_error_code( MessageFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"msgfmt_get_error_message\": [\n        \"string msgfmt_get_error_message( MessageFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"msgfmt_get_locale\": [\n        \"string msgfmt_get_locale(MessageFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"msgfmt_get_pattern\": [\n        \"string msgfmt_get_pattern( MessageFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"msgfmt_parse\": [\n        \"array msgfmt_parse( MessageFormatter $nf, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"msgfmt_set_pattern\": [\n        \"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"mssql_bind\": [\n        \"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\n        \"Adds a parameter to a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_close\": [\n        \"bool mssql_close([resource conn_id])\",\n        \"Closes a connection to a MS-SQL server\"\n    ],\n    \"mssql_connect\": [\n        \"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a connection to a MS-SQL server\"\n    ],\n    \"mssql_data_seek\": [\n        \"bool mssql_data_seek(resource result_id, int offset)\",\n        \"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"\n    ],\n    \"mssql_execute\": [\n        \"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\n        \"Executes a stored procedure on a MS-SQL server database\"\n    ],\n    \"mssql_fetch_array\": [\n        \"array mssql_fetch_array(resource result_id [, int result_type])\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_assoc\": [\n        \"array mssql_fetch_assoc(resource result_id)\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_batch\": [\n        \"int mssql_fetch_batch(resource result_index)\",\n        \"Returns the next batch of records\"\n    ],\n    \"mssql_fetch_field\": [\n        \"object mssql_fetch_field(resource result_id [, int offset])\",\n        \"Gets information about certain fields in a query result\"\n    ],\n    \"mssql_fetch_object\": [\n        \"object mssql_fetch_object(resource result_id)\",\n        \"Returns a pseudo-object of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_row\": [\n        \"array mssql_fetch_row(resource result_id)\",\n        \"Returns an array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_field_length\": [\n        \"int mssql_field_length(resource result_id [, int offset])\",\n        \"Get the length of a MS-SQL field\"\n    ],\n    \"mssql_field_name\": [\n        \"string mssql_field_name(resource result_id [, int offset])\",\n        \"Returns the name of the field given by offset in the result set given by result_id\"\n    ],\n    \"mssql_field_seek\": [\n        \"bool mssql_field_seek(resource result_id, int offset)\",\n        \"Seeks to the specified field offset\"\n    ],\n    \"mssql_field_type\": [\n        \"string mssql_field_type(resource result_id [, int offset])\",\n        \"Returns the type of a field\"\n    ],\n    \"mssql_free_result\": [\n        \"bool mssql_free_result(resource result_index)\",\n        \"Free a MS-SQL result index\"\n    ],\n    \"mssql_free_statement\": [\n        \"bool mssql_free_statement(resource result_index)\",\n        \"Free a MS-SQL statement index\"\n    ],\n    \"mssql_get_last_message\": [\n        \"string mssql_get_last_message(void)\",\n        \"Gets the last message from the MS-SQL server\"\n    ],\n    \"mssql_guid_string\": [\n        \"string mssql_guid_string(string binary [,bool short_format])\",\n        \"Converts a 16 byte binary GUID to a string\"\n    ],\n    \"mssql_init\": [\n        \"int mssql_init(string sp_name [, resource conn_id])\",\n        \"Initializes a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_min_error_severity\": [\n        \"void mssql_min_error_severity(int severity)\",\n        \"Sets the lower error severity\"\n    ],\n    \"mssql_min_message_severity\": [\n        \"void mssql_min_message_severity(int severity)\",\n        \"Sets the lower message severity\"\n    ],\n    \"mssql_next_result\": [\n        \"bool mssql_next_result(resource result_id)\",\n        \"Move the internal result pointer to the next result\"\n    ],\n    \"mssql_num_fields\": [\n        \"int mssql_num_fields(resource mssql_result_index)\",\n        \"Returns the number of fields fetched in from the result id specified\"\n    ],\n    \"mssql_num_rows\": [\n        \"int mssql_num_rows(resource mssql_result_index)\",\n        \"Returns the number of rows fetched in from the result id specified\"\n    ],\n    \"mssql_pconnect\": [\n        \"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a persistent connection to a MS-SQL server\"\n    ],\n    \"mssql_query\": [\n        \"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\n        \"Perform an SQL query on a MS-SQL server database\"\n    ],\n    \"mssql_result\": [\n        \"string mssql_result(resource result_id, int row, mixed field)\",\n        \"Returns the contents of one cell from a MS-SQL result set\"\n    ],\n    \"mssql_rows_affected\": [\n        \"int mssql_rows_affected(resource conn_id)\",\n        \"Returns the number of records affected by the query\"\n    ],\n    \"mssql_select_db\": [\n        \"bool mssql_select_db(string database_name [, resource conn_id])\",\n        \"Select a MS-SQL database\"\n    ],\n    \"mt_getrandmax\": [\n        \"int mt_getrandmax(void)\",\n        \"Returns the maximum value a random number from Mersenne Twister can have\"\n    ],\n    \"mt_rand\": [\n        \"int mt_rand([int min, int max])\",\n        \"Returns a random number from Mersenne Twister\"\n    ],\n    \"mt_srand\": [\n        \"void mt_srand([int seed])\",\n        \"Seeds Mersenne Twister random number generator\"\n    ],\n    \"mysql_affected_rows\": [\n        \"int mysql_affected_rows([int link_identifier])\",\n        \"Gets number of affected rows in previous MySQL operation\"\n    ],\n    \"mysql_client_encoding\": [\n        \"string mysql_client_encoding([int link_identifier])\",\n        \"Returns the default character set for the current connection\"\n    ],\n    \"mysql_close\": [\n        \"bool mysql_close([int link_identifier])\",\n        \"Close a MySQL connection\"\n    ],\n    \"mysql_connect\": [\n        \"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\n        \"Opens a connection to a MySQL Server\"\n    ],\n    \"mysql_create_db\": [\n        \"bool mysql_create_db(string database_name [, int link_identifier])\",\n        \"Create a MySQL database\"\n    ],\n    \"mysql_data_seek\": [\n        \"bool mysql_data_seek(resource result, int row_number)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysql_db_query\": [\n        \"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_drop_db\": [\n        \"bool mysql_drop_db(string database_name [, int link_identifier])\",\n        \"Drops (delete) a MySQL database\"\n    ],\n    \"mysql_errno\": [\n        \"int mysql_errno([int link_identifier])\",\n        \"Returns the number of the error message from previous MySQL operation\"\n    ],\n    \"mysql_error\": [\n        \"string mysql_error([int link_identifier])\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysql_escape_string\": [\n        \"string mysql_escape_string(string to_be_escaped)\",\n        \"Escape string for mysql query\"\n    ],\n    \"mysql_fetch_array\": [\n        \"array mysql_fetch_array(resource result [, int result_type])\",\n        \"Fetch a result row as an array (associative, numeric or both)\"\n    ],\n    \"mysql_fetch_assoc\": [\n        \"array mysql_fetch_assoc(resource result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysql_fetch_field\": [\n        \"object mysql_fetch_field(resource result [, int field_offset])\",\n        \"Gets column information from a result and return as an object\"\n    ],\n    \"mysql_fetch_lengths\": [\n        \"array mysql_fetch_lengths(resource result)\",\n        \"Gets max data size of each column in a result\"\n    ],\n    \"mysql_fetch_object\": [\n        \"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysql_fetch_row\": [\n        \"array mysql_fetch_row(resource result)\",\n        \"Gets a result row as an enumerated array\"\n    ],\n    \"mysql_field_flags\": [\n        \"string mysql_field_flags(resource result, int field_offset)\",\n        \"Gets the flags associated with the specified field in a result\"\n    ],\n    \"mysql_field_len\": [\n        \"int mysql_field_len(resource result, int field_offset)\",\n        \"Returns the length of the specified field\"\n    ],\n    \"mysql_field_name\": [\n        \"string mysql_field_name(resource result, int field_index)\",\n        \"Gets the name of the specified field in a result\"\n    ],\n    \"mysql_field_seek\": [\n        \"bool mysql_field_seek(resource result, int field_offset)\",\n        \"Sets result pointer to a specific field offset\"\n    ],\n    \"mysql_field_table\": [\n        \"string mysql_field_table(resource result, int field_offset)\",\n        \"Gets name of the table the specified field is in\"\n    ],\n    \"mysql_field_type\": [\n        \"string mysql_field_type(resource result, int field_offset)\",\n        \"Gets the type of the specified field in a result\"\n    ],\n    \"mysql_free_result\": [\n        \"bool mysql_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"mysql_get_client_info\": [\n        \"string mysql_get_client_info(void)\",\n        \"Returns a string that represents the client library version\"\n    ],\n    \"mysql_get_host_info\": [\n        \"string mysql_get_host_info([int link_identifier])\",\n        \"Returns a string describing the type of connection in use, including the server host name\"\n    ],\n    \"mysql_get_proto_info\": [\n        \"int mysql_get_proto_info([int link_identifier])\",\n        \"Returns the protocol version used by current connection\"\n    ],\n    \"mysql_get_server_info\": [\n        \"string mysql_get_server_info([int link_identifier])\",\n        \"Returns a string that represents the server version number\"\n    ],\n    \"mysql_info\": [\n        \"string mysql_info([int link_identifier])\",\n        \"Returns a string containing information about the most recent query\"\n    ],\n    \"mysql_insert_id\": [\n        \"int mysql_insert_id([int link_identifier])\",\n        \"Gets the ID generated from the previous INSERT operation\"\n    ],\n    \"mysql_list_dbs\": [\n        \"resource mysql_list_dbs([int link_identifier])\",\n        \"List databases available on a MySQL server\"\n    ],\n    \"mysql_list_fields\": [\n        \"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\n        \"List MySQL result fields\"\n    ],\n    \"mysql_list_processes\": [\n        \"resource mysql_list_processes([int link_identifier])\",\n        \"Returns a result set describing the current server threads\"\n    ],\n    \"mysql_list_tables\": [\n        \"resource mysql_list_tables(string database_name [, int link_identifier])\",\n        \"List tables in a MySQL database\"\n    ],\n    \"mysql_num_fields\": [\n        \"int mysql_num_fields(resource result)\",\n        \"Gets number of fields in a result\"\n    ],\n    \"mysql_num_rows\": [\n        \"int mysql_num_rows(resource result)\",\n        \"Gets number of rows in a result\"\n    ],\n    \"mysql_pconnect\": [\n        \"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\n        \"Opens a persistent connection to a MySQL Server\"\n    ],\n    \"mysql_ping\": [\n        \"bool mysql_ping([int link_identifier])\",\n        \"Ping a server connection. If no connection then reconnect.\"\n    ],\n    \"mysql_query\": [\n        \"resource mysql_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_real_escape_string\": [\n        \"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\n        \"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysql_result\": [\n        \"mixed mysql_result(resource result, int row [, mixed field])\",\n        \"Gets result data\"\n    ],\n    \"mysql_select_db\": [\n        \"bool mysql_select_db(string database_name [, int link_identifier])\",\n        \"Selects a MySQL database\"\n    ],\n    \"mysql_set_charset\": [\n        \"bool mysql_set_charset(string csname [, int link_identifier])\",\n        \"sets client character set\"\n    ],\n    \"mysql_stat\": [\n        \"string mysql_stat([int link_identifier])\",\n        \"Returns a string containing status information\"\n    ],\n    \"mysql_thread_id\": [\n        \"int mysql_thread_id([int link_identifier])\",\n        \"Returns the thread id of current connection\"\n    ],\n    \"mysql_unbuffered_query\": [\n        \"resource mysql_unbuffered_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL, without fetching and buffering the result rows\"\n    ],\n    \"mysqli_affected_rows\": [\n        \"mixed mysqli_affected_rows(object link)\",\n        \"Get number of affected rows in previous MySQL operation\"\n    ],\n    \"mysqli_autocommit\": [\n        \"bool mysqli_autocommit(object link, bool mode)\",\n        \"Turn auto commit on or of\"\n    ],\n    \"mysqli_cache_stats\": [\n        \"array mysqli_cache_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_change_user\": [\n        \"bool mysqli_change_user(object link, string user, string password, string database)\",\n        \"Change logged-in user of the active connection\"\n    ],\n    \"mysqli_character_set_name\": [\n        \"string mysqli_character_set_name(object link)\",\n        \"Returns the name of the character set used for this connection\"\n    ],\n    \"mysqli_close\": [\n        \"bool mysqli_close(object link)\",\n        \"Close connection\"\n    ],\n    \"mysqli_commit\": [\n        \"bool mysqli_commit(object link)\",\n        \"Commit outstanding actions and close transaction\"\n    ],\n    \"mysqli_connect\": [\n        \"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_connect_errno\": [\n        \"int mysqli_connect_errno(void)\",\n        \"Returns the numerical value of the error message from last connect command\"\n    ],\n    \"mysqli_connect_error\": [\n        \"string mysqli_connect_error(void)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_data_seek\": [\n        \"bool mysqli_data_seek(object result, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_debug\": [\n        \"void mysqli_debug(string debug)\",\n        \"\"\n    ],\n    \"mysqli_dump_debug_info\": [\n        \"bool mysqli_dump_debug_info(object link)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_end\": [\n        \"void mysqli_embedded_server_end(void)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_start\": [\n        \"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\n        \"initialize and start embedded server\"\n    ],\n    \"mysqli_errno\": [\n        \"int mysqli_errno(object link)\",\n        \"Returns the numerical value of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_error\": [\n        \"string mysqli_error(object link)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_fetch_all\": [\n        \"mixed mysqli_fetch_all (object result [,int resulttype])\",\n        \"Fetches all result rows as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_array\": [\n        \"mixed mysqli_fetch_array (object result [,int resulttype])\",\n        \"Fetch a result row as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_assoc\": [\n        \"mixed mysqli_fetch_assoc (object result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysqli_fetch_field\": [\n        \"mixed mysqli_fetch_field (object result)\",\n        \"Get column information from a result and return as an object\"\n    ],\n    \"mysqli_fetch_field_direct\": [\n        \"mixed mysqli_fetch_field_direct (object result, int offset)\",\n        \"Fetch meta-data for a single field\"\n    ],\n    \"mysqli_fetch_fields\": [\n        \"mixed mysqli_fetch_fields (object result)\",\n        \"Return array of objects containing field meta-data\"\n    ],\n    \"mysqli_fetch_lengths\": [\n        \"mixed mysqli_fetch_lengths (object result)\",\n        \"Get the length of each output in a result\"\n    ],\n    \"mysqli_fetch_object\": [\n        \"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysqli_fetch_row\": [\n        \"array mysqli_fetch_row (object result)\",\n        \"Get a result row as an enumerated array\"\n    ],\n    \"mysqli_field_count\": [\n        \"int mysqli_field_count(object link)\",\n        \"Fetch the number of fields returned by the last query for the given link\"\n    ],\n    \"mysqli_field_seek\": [\n        \"int mysqli_field_seek(object result, int fieldnr)\",\n        \"Set result pointer to a specified field offset\"\n    ],\n    \"mysqli_field_tell\": [\n        \"int mysqli_field_tell(object result)\",\n        \"Get current field offset of result pointer\"\n    ],\n    \"mysqli_free_result\": [\n        \"void mysqli_free_result(object result)\",\n        \"Free query result memory for the given result handle\"\n    ],\n    \"mysqli_get_charset\": [\n        \"object mysqli_get_charset(object link)\",\n        \"returns a character set object\"\n    ],\n    \"mysqli_get_client_info\": [\n        \"string mysqli_get_client_info(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_client_stats\": [\n        \"array mysqli_get_client_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_client_version\": [\n        \"int mysqli_get_client_version(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_connection_stats\": [\n        \"array mysqli_get_connection_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_host_info\": [\n        \"string mysqli_get_host_info (object link)\",\n        \"Get MySQL host info\"\n    ],\n    \"mysqli_get_proto_info\": [\n        \"int mysqli_get_proto_info(object link)\",\n        \"Get MySQL protocol information\"\n    ],\n    \"mysqli_get_server_info\": [\n        \"string mysqli_get_server_info(object link)\",\n        \"Get MySQL server info\"\n    ],\n    \"mysqli_get_server_version\": [\n        \"int mysqli_get_server_version(object link)\",\n        \"Return the MySQL version for the server referenced by the given link\"\n    ],\n    \"mysqli_get_warnings\": [\n        \"object mysqli_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}\"\n    ],\n    \"mysqli_info\": [\n        \"string mysqli_info(object link)\",\n        \"Get information about the most recent query\"\n    ],\n    \"mysqli_init\": [\n        \"resource mysqli_init(void)\",\n        \"Initialize mysqli and return a resource for use with mysql_real_connect\"\n    ],\n    \"mysqli_insert_id\": [\n        \"mixed mysqli_insert_id(object link)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_kill\": [\n        \"bool mysqli_kill(object link, int processid)\",\n        \"Kill a mysql process on the server\"\n    ],\n    \"mysqli_link_construct\": [\n        \"object mysqli_link_construct()\",\n        \"\"\n    ],\n    \"mysqli_more_results\": [\n        \"bool mysqli_more_results(object link)\",\n        \"check if there any more query results from a multi query\"\n    ],\n    \"mysqli_multi_query\": [\n        \"bool mysqli_multi_query(object link, string query)\",\n        \"allows to execute multiple queries\"\n    ],\n    \"mysqli_next_result\": [\n        \"bool mysqli_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_num_fields\": [\n        \"int mysqli_num_fields(object result)\",\n        \"Get number of fields in result\"\n    ],\n    \"mysqli_num_rows\": [\n        \"mixed mysqli_num_rows(object result)\",\n        \"Get number of rows in result\"\n    ],\n    \"mysqli_options\": [\n        \"bool mysqli_options(object link, int flags, mixed values)\",\n        \"Set options\"\n    ],\n    \"mysqli_ping\": [\n        \"bool mysqli_ping(object link)\",\n        \"Ping a server connection or reconnect if there is no connection\"\n    ],\n    \"mysqli_poll\": [\n        \"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\n        \"Poll connections\"\n    ],\n    \"mysqli_prepare\": [\n        \"mixed mysqli_prepare(object link, string query)\",\n        \"Prepare a SQL statement for execution\"\n    ],\n    \"mysqli_query\": [\n        \"mixed mysqli_query(object link, string query [,int resultmode]) */\",\n        \"PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Os|l\\\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Empty query\\\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid value for resultmode\\\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT\"\n    ],\n    \"mysqli_real_connect\": [\n        \"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_real_escape_string\": [\n        \"string mysqli_real_escape_string(object link, string escapestr)\",\n        \"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysqli_real_query\": [\n        \"bool mysqli_real_query(object link, string query)\",\n        \"Binary-safe version of mysql_query()\"\n    ],\n    \"mysqli_reap_async_query\": [\n        \"int mysqli_reap_async_query(object link)\",\n        \"Poll connections\"\n    ],\n    \"mysqli_refresh\": [\n        \"bool mysqli_refresh(object link, long options)\",\n        \"Flush tables or caches, or reset replication server information\"\n    ],\n    \"mysqli_report\": [\n        \"bool mysqli_report(int flags)\",\n        \"sets report level\"\n    ],\n    \"mysqli_rollback\": [\n        \"bool mysqli_rollback(object link)\",\n        \"Undo actions from current transaction\"\n    ],\n    \"mysqli_select_db\": [\n        \"bool mysqli_select_db(object link, string dbname)\",\n        \"Select a MySQL database\"\n    ],\n    \"mysqli_set_charset\": [\n        \"bool mysqli_set_charset(object link, string csname)\",\n        \"sets client character set\"\n    ],\n    \"mysqli_set_local_infile_default\": [\n        \"void mysqli_set_local_infile_default(object link)\",\n        \"unsets user defined handler for load local infile command\"\n    ],\n    \"mysqli_set_local_infile_handler\": [\n        \"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\n        \"Set callback functions for LOAD DATA LOCAL INFILE\"\n    ],\n    \"mysqli_sqlstate\": [\n        \"string mysqli_sqlstate(object link)\",\n        \"Returns the SQLSTATE error from previous MySQL operation\"\n    ],\n    \"mysqli_ssl_set\": [\n        \"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\n        \"\"\n    ],\n    \"mysqli_stat\": [\n        \"mixed mysqli_stat(object link)\",\n        \"Get current system status\"\n    ],\n    \"mysqli_stmt_affected_rows\": [\n        \"mixed mysqli_stmt_affected_rows(object stmt)\",\n        \"Return the number of rows affected in the last query for the given link\"\n    ],\n    \"mysqli_stmt_attr_get\": [\n        \"int mysqli_stmt_attr_get(object stmt, long attr)\",\n        \"\"\n    ],\n    \"mysqli_stmt_attr_set\": [\n        \"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\n        \"\"\n    ],\n    \"mysqli_stmt_bind_param\": [\n        \"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\n        \"Bind variables to a prepared statement as parameters\"\n    ],\n    \"mysqli_stmt_bind_result\": [\n        \"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\n        \"Bind variables to a prepared statement for result storage\"\n    ],\n    \"mysqli_stmt_close\": [\n        \"bool mysqli_stmt_close(object stmt)\",\n        \"Close statement\"\n    ],\n    \"mysqli_stmt_data_seek\": [\n        \"void mysqli_stmt_data_seek(object stmt, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_stmt_errno\": [\n        \"int mysqli_stmt_errno(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_error\": [\n        \"string mysqli_stmt_error(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_execute\": [\n        \"bool mysqli_stmt_execute(object stmt)\",\n        \"Execute a prepared statement\"\n    ],\n    \"mysqli_stmt_fetch\": [\n        \"mixed mysqli_stmt_fetch(object stmt)\",\n        \"Fetch results from a prepared statement into the bound variables\"\n    ],\n    \"mysqli_stmt_field_count\": [\n        \"int mysqli_stmt_field_count(object stmt) {\",\n        \"Return the number of result columns for the given statement\"\n    ],\n    \"mysqli_stmt_free_result\": [\n        \"void mysqli_stmt_free_result(object stmt)\",\n        \"Free stored result memory for the given statement handle\"\n    ],\n    \"mysqli_stmt_get_result\": [\n        \"object mysqli_stmt_get_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_stmt_get_warnings\": [\n        \"object mysqli_stmt_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \\\"mysqli_stmt\\\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}\"\n    ],\n    \"mysqli_stmt_init\": [\n        \"mixed mysqli_stmt_init(object link)\",\n        \"Initialize statement object\"\n    ],\n    \"mysqli_stmt_insert_id\": [\n        \"mixed mysqli_stmt_insert_id(object stmt)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_stmt_next_result\": [\n        \"bool mysqli_stmt_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_stmt_num_rows\": [\n        \"mixed mysqli_stmt_num_rows(object stmt)\",\n        \"Return the number of rows in statements result set\"\n    ],\n    \"mysqli_stmt_param_count\": [\n        \"int mysqli_stmt_param_count(object stmt)\",\n        \"Return the number of parameter for the given statement\"\n    ],\n    \"mysqli_stmt_prepare\": [\n        \"bool mysqli_stmt_prepare(object stmt, string query)\",\n        \"prepare server side statement with query\"\n    ],\n    \"mysqli_stmt_reset\": [\n        \"bool mysqli_stmt_reset(object stmt)\",\n        \"reset a prepared statement\"\n    ],\n    \"mysqli_stmt_result_metadata\": [\n        \"mixed mysqli_stmt_result_metadata(object stmt)\",\n        \"return result set from statement\"\n    ],\n    \"mysqli_stmt_send_long_data\": [\n        \"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\n        \"\"\n    ],\n    \"mysqli_stmt_sqlstate\": [\n        \"string mysqli_stmt_sqlstate(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_store_result\": [\n        \"bool mysqli_stmt_store_result(stmt)\",\n        \"\"\n    ],\n    \"mysqli_store_result\": [\n        \"object mysqli_store_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_thread_id\": [\n        \"int mysqli_thread_id(object link)\",\n        \"Return the current thread ID\"\n    ],\n    \"mysqli_thread_safe\": [\n        \"bool mysqli_thread_safe(void)\",\n        \"Return whether thread safety is given or not\"\n    ],\n    \"mysqli_use_result\": [\n        \"mixed mysqli_use_result(object link)\",\n        \"Directly retrieve query results - do not buffer results on client side\"\n    ],\n    \"mysqli_warning_count\": [\n        \"int mysqli_warning_count (object link)\",\n        \"Return number of warnings from the last query for the given link\"\n    ],\n    \"natcasesort\": [\n        \"void natcasesort(array &array_arg)\",\n        \"Sort an array using case-insensitive natural sort\"\n    ],\n    \"natsort\": [\n        \"void natsort(array &array_arg)\",\n        \"Sort an array using natural sort\"\n    ],\n    \"next\": [\n        \"mixed next(array array_arg)\",\n        \"Move array argument's internal pointer to the next element and return it\"\n    ],\n    \"ngettext\": [\n        \"string ngettext(string MSGID1, string MSGID2, int N)\",\n        \"Plural version of gettext()\"\n    ],\n    \"nl2br\": [\n        \"string nl2br(string str [, bool is_xhtml])\",\n        \"Converts newlines to HTML line breaks\"\n    ],\n    \"nl_langinfo\": [\n        \"string nl_langinfo(int item)\",\n        \"Query language and locale information\"\n    ],\n    \"normalizer_is_normalize\": [\n        \"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Test if a string is in a given normalization form.\"\n    ],\n    \"normalizer_normalize\": [\n        \"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Normalize a string.\"\n    ],\n    \"nsapi_request_headers\": [\n        \"array nsapi_request_headers(void)\",\n        \"Get all headers from the request\"\n    ],\n    \"nsapi_response_headers\": [\n        \"array nsapi_response_headers(void)\",\n        \"Get all headers from the response\"\n    ],\n    \"nsapi_virtual\": [\n        \"bool nsapi_virtual(string uri)\",\n        \"Perform an NSAPI sub-request\"\n    ],\n    \"number_format\": [\n        \"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\n        \"Formats a number with grouped thousands\"\n    ],\n    \"numfmt_create\": [\n        \"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\n        \"* Create number formatter.\"\n    ],\n    \"numfmt_format\": [\n        \"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\n        \"* Format a number.\"\n    ],\n    \"numfmt_format_currency\": [\n        \"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\n        \"* Format a number as currency.\"\n    ],\n    \"numfmt_get_attribute\": [\n        \"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_get_error_code\": [\n        \"int numfmt_get_error_code( NumberFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"numfmt_get_error_message\": [\n        \"string numfmt_get_error_message( NumberFormatter $nf )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"numfmt_get_locale\": [\n        \"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\n        \"* Get formatter locale.\"\n    ],\n    \"numfmt_get_pattern\": [\n        \"string numfmt_get_pattern( NumberFormatter $nf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"numfmt_get_symbol\": [\n        \"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter symbol value.\"\n    ],\n    \"numfmt_get_text_attribute\": [\n        \"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_parse\": [\n        \"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\n        \"* Parse a number.\"\n    ],\n    \"numfmt_parse_currency\": [\n        \"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\n        \"* Parse a number as currency.\"\n    ],\n    \"numfmt_parse_message\": [\n        \"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"numfmt_set_attribute\": [\n        \"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_set_pattern\": [\n        \"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"numfmt_set_symbol\": [\n        \"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\n        \"* Set formatter symbol value.\"\n    ],\n    \"numfmt_set_text_attribute\": [\n        \"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"ob_clean\": [\n        \"bool ob_clean(void)\",\n        \"Clean (delete) the current output buffer\"\n    ],\n    \"ob_end_clean\": [\n        \"bool ob_end_clean(void)\",\n        \"Clean the output buffer, and delete current output buffer\"\n    ],\n    \"ob_end_flush\": [\n        \"bool ob_end_flush(void)\",\n        \"Flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_flush\": [\n        \"bool ob_flush(void)\",\n        \"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"\n    ],\n    \"ob_get_clean\": [\n        \"bool ob_get_clean(void)\",\n        \"Get current buffer contents and delete current output buffer\"\n    ],\n    \"ob_get_contents\": [\n        \"string ob_get_contents(void)\",\n        \"Return the contents of the output buffer\"\n    ],\n    \"ob_get_flush\": [\n        \"bool ob_get_flush(void)\",\n        \"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_get_length\": [\n        \"int ob_get_length(void)\",\n        \"Return the length of the output buffer\"\n    ],\n    \"ob_get_level\": [\n        \"int ob_get_level(void)\",\n        \"Return the nesting level of the output buffer\"\n    ],\n    \"ob_get_status\": [\n        \"false|array ob_get_status([bool full_status])\",\n        \"Return the status of the active or all output buffers\"\n    ],\n    \"ob_gzhandler\": [\n        \"string ob_gzhandler(string str, int mode)\",\n        \"Encode str based on accept-encoding setting - designed to be called from ob_start()\"\n    ],\n    \"ob_iconv_handler\": [\n        \"string ob_iconv_handler(string contents, int status)\",\n        \"Returns str in output buffer converted to the iconv.output_encoding character set\"\n    ],\n    \"ob_implicit_flush\": [\n        \"void ob_implicit_flush([int flag])\",\n        \"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"\n    ],\n    \"ob_list_handlers\": [\n        \"false|array ob_list_handlers()\",\n        \"*  List all output_buffers in an array\"\n    ],\n    \"ob_start\": [\n        \"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\n        \"Turn on Output Buffering (specifying an optional output handler).\"\n    ],\n    \"oci_bind_array_by_name\": [\n        \"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\n        \"Bind a PHP array to an Oracle PL/SQL type by name\"\n    ],\n    \"oci_bind_by_name\": [\n        \"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\n        \"Bind a PHP variable to an Oracle placeholder by name\"\n    ],\n    \"oci_cancel\": [\n        \"bool oci_cancel(resource stmt)\",\n        \"Cancel reading from a cursor\"\n    ],\n    \"oci_close\": [\n        \"bool oci_close(resource connection)\",\n        \"Disconnect from database\"\n    ],\n    \"oci_collection_append\": [\n        \"bool oci_collection_append(string value)\",\n        \"Append an object to the collection\"\n    ],\n    \"oci_collection_assign\": [\n        \"bool oci_collection_assign(object from)\",\n        \"Assign a collection from another existing collection\"\n    ],\n    \"oci_collection_element_assign\": [\n        \"bool oci_collection_element_assign(int index, string val)\",\n        \"Assign element val to collection at index ndx\"\n    ],\n    \"oci_collection_element_get\": [\n        \"string oci_collection_element_get(int ndx)\",\n        \"Retrieve the value at collection index ndx\"\n    ],\n    \"oci_collection_max\": [\n        \"int oci_collection_max()\",\n        \"Return the max value of a collection. For a varray this is the maximum length of the array\"\n    ],\n    \"oci_collection_size\": [\n        \"int oci_collection_size()\",\n        \"Return the size of a collection\"\n    ],\n    \"oci_collection_trim\": [\n        \"bool oci_collection_trim(int num)\",\n        \"Trim num elements from the end of a collection\"\n    ],\n    \"oci_commit\": [\n        \"bool oci_commit(resource connection)\",\n        \"Commit the current context\"\n    ],\n    \"oci_connect\": [\n        \"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_define_by_name\": [\n        \"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\n        \"Define a PHP variable to an Oracle column by name\"\n    ],\n    \"oci_error\": [\n        \"array oci_error([resource stmt|connection|global])\",\n        \"Return the last error of stmt|connection|global. If no error happened returns false.\"\n    ],\n    \"oci_execute\": [\n        \"bool oci_execute(resource stmt [, int mode])\",\n        \"Execute a parsed statement\"\n    ],\n    \"oci_fetch\": [\n        \"bool oci_fetch(resource stmt)\",\n        \"Prepare a new row of data for reading\"\n    ],\n    \"oci_fetch_all\": [\n        \"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\n        \"Fetch all rows of result data into an array\"\n    ],\n    \"oci_fetch_array\": [\n        \"array oci_fetch_array( resource stmt [, int mode ])\",\n        \"Fetch a result row as an array\"\n    ],\n    \"oci_fetch_assoc\": [\n        \"array oci_fetch_assoc( resource stmt )\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"oci_fetch_object\": [\n        \"object oci_fetch_object( resource stmt )\",\n        \"Fetch a result row as an object\"\n    ],\n    \"oci_fetch_row\": [\n        \"array oci_fetch_row( resource stmt )\",\n        \"Fetch a result row as an enumerated array\"\n    ],\n    \"oci_field_is_null\": [\n        \"bool oci_field_is_null(resource stmt, int col)\",\n        \"Tell whether a column is NULL\"\n    ],\n    \"oci_field_name\": [\n        \"string oci_field_name(resource stmt, int col)\",\n        \"Tell the name of a column\"\n    ],\n    \"oci_field_precision\": [\n        \"int oci_field_precision(resource stmt, int col)\",\n        \"Tell the precision of a column\"\n    ],\n    \"oci_field_scale\": [\n        \"int oci_field_scale(resource stmt, int col)\",\n        \"Tell the scale of a column\"\n    ],\n    \"oci_field_size\": [\n        \"int oci_field_size(resource stmt, int col)\",\n        \"Tell the maximum data size of a column\"\n    ],\n    \"oci_field_type\": [\n        \"mixed oci_field_type(resource stmt, int col)\",\n        \"Tell the data type of a column\"\n    ],\n    \"oci_field_type_raw\": [\n        \"int oci_field_type_raw(resource stmt, int col)\",\n        \"Tell the raw oracle data type of a column\"\n    ],\n    \"oci_free_collection\": [\n        \"bool oci_free_collection()\",\n        \"Deletes collection object\"\n    ],\n    \"oci_free_descriptor\": [\n        \"bool oci_free_descriptor()\",\n        \"Deletes large object description\"\n    ],\n    \"oci_free_statement\": [\n        \"bool oci_free_statement(resource stmt)\",\n        \"Free all resources associated with a statement\"\n    ],\n    \"oci_internal_debug\": [\n        \"void oci_internal_debug(int onoff)\",\n        \"Toggle internal debugging output for the OCI extension\"\n    ],\n    \"oci_lob_append\": [\n        \"bool oci_lob_append( object lob )\",\n        \"Appends data from a LOB to another LOB\"\n    ],\n    \"oci_lob_close\": [\n        \"bool oci_lob_close()\",\n        \"Closes lob descriptor\"\n    ],\n    \"oci_lob_copy\": [\n        \"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\n        \"Copies data from a LOB to another LOB\"\n    ],\n    \"oci_lob_eof\": [\n        \"bool oci_lob_eof()\",\n        \"Checks if EOF is reached\"\n    ],\n    \"oci_lob_erase\": [\n        \"int oci_lob_erase( [ int offset [, int length ] ] )\",\n        \"Erases a specified portion of the internal LOB, starting at a specified offset\"\n    ],\n    \"oci_lob_export\": [\n        \"bool oci_lob_export([string filename [, int start [, int length]]])\",\n        \"Writes a large object into a file\"\n    ],\n    \"oci_lob_flush\": [\n        \"bool oci_lob_flush( [ int flag ] )\",\n        \"Flushes the LOB buffer\"\n    ],\n    \"oci_lob_import\": [\n        \"bool oci_lob_import( string filename )\",\n        \"Loads file into a LOB\"\n    ],\n    \"oci_lob_is_equal\": [\n        \"bool oci_lob_is_equal( object lob1, object lob2 )\",\n        \"Tests to see if two LOB/FILE locators are equal\"\n    ],\n    \"oci_lob_load\": [\n        \"string oci_lob_load()\",\n        \"Loads a large object\"\n    ],\n    \"oci_lob_read\": [\n        \"string oci_lob_read( int length )\",\n        \"Reads particular part of a large object\"\n    ],\n    \"oci_lob_rewind\": [\n        \"bool oci_lob_rewind()\",\n        \"Rewind pointer of a LOB\"\n    ],\n    \"oci_lob_save\": [\n        \"bool oci_lob_save( string data [, int offset ])\",\n        \"Saves a large object\"\n    ],\n    \"oci_lob_seek\": [\n        \"bool oci_lob_seek( int offset [, int whence ])\",\n        \"Moves the pointer of a LOB\"\n    ],\n    \"oci_lob_size\": [\n        \"int oci_lob_size()\",\n        \"Returns size of a large object\"\n    ],\n    \"oci_lob_tell\": [\n        \"int oci_lob_tell()\",\n        \"Tells LOB pointer position\"\n    ],\n    \"oci_lob_truncate\": [\n        \"bool oci_lob_truncate( [ int length ])\",\n        \"Truncates a LOB\"\n    ],\n    \"oci_lob_write\": [\n        \"int oci_lob_write( string string [, int length ])\",\n        \"Writes data to current position of a LOB\"\n    ],\n    \"oci_lob_write_temporary\": [\n        \"bool oci_lob_write_temporary(string var [, int lob_type])\",\n        \"Writes temporary blob\"\n    ],\n    \"oci_new_collection\": [\n        \"object oci_new_collection(resource connection, string tdo [, string schema])\",\n        \"Initialize a new collection\"\n    ],\n    \"oci_new_connect\": [\n        \"resource oci_new_connect(string user, string pass [, string db])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_new_cursor\": [\n        \"resource oci_new_cursor(resource connection)\",\n        \"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"\n    ],\n    \"oci_new_descriptor\": [\n        \"object oci_new_descriptor(resource connection [, int type])\",\n        \"Initialize a new empty descriptor LOB/FILE (LOB is default)\"\n    ],\n    \"oci_num_fields\": [\n        \"int oci_num_fields(resource stmt)\",\n        \"Return the number of result columns in a statement\"\n    ],\n    \"oci_num_rows\": [\n        \"int oci_num_rows(resource stmt)\",\n        \"Return the row count of an OCI statement\"\n    ],\n    \"oci_parse\": [\n        \"resource oci_parse(resource connection, string query)\",\n        \"Parse a query and return a statement\"\n    ],\n    \"oci_password_change\": [\n        \"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\n        \"Changes the password of an account\"\n    ],\n    \"oci_pconnect\": [\n        \"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\n        \"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"\n    ],\n    \"oci_result\": [\n        \"string oci_result(resource stmt, mixed column)\",\n        \"Return a single column of result data\"\n    ],\n    \"oci_rollback\": [\n        \"bool oci_rollback(resource connection)\",\n        \"Rollback the current context\"\n    ],\n    \"oci_server_version\": [\n        \"string oci_server_version(resource connection)\",\n        \"Return a string containing server version information\"\n    ],\n    \"oci_set_action\": [\n        \"bool oci_set_action(resource connection, string value)\",\n        \"Sets the action attribute on the connection\"\n    ],\n    \"oci_set_client_identifier\": [\n        \"bool oci_set_client_identifier(resource connection, string value)\",\n        \"Sets the client identifier attribute on the connection\"\n    ],\n    \"oci_set_client_info\": [\n        \"bool oci_set_client_info(resource connection, string value)\",\n        \"Sets the client info attribute on the connection\"\n    ],\n    \"oci_set_edition\": [\n        \"bool oci_set_edition(string value)\",\n        \"Sets the edition attribute for all subsequent connections created\"\n    ],\n    \"oci_set_module_name\": [\n        \"bool oci_set_module_name(resource connection, string value)\",\n        \"Sets the module attribute on the connection\"\n    ],\n    \"oci_set_prefetch\": [\n        \"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\n        \"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"\n    ],\n    \"oci_statement_type\": [\n        \"string oci_statement_type(resource stmt)\",\n        \"Return the query type of an OCI statement\"\n    ],\n    \"ocifetchinto\": [\n        \"int ocifetchinto(resource stmt, array &output [, int mode])\",\n        \"Fetch a row of result data into an array\"\n    ],\n    \"ocigetbufferinglob\": [\n        \"bool ocigetbufferinglob()\",\n        \"Returns current state of buffering for a LOB\"\n    ],\n    \"ocisetbufferinglob\": [\n        \"bool ocisetbufferinglob( boolean flag )\",\n        \"Enables/disables buffering for a LOB\"\n    ],\n    \"octdec\": [\n        \"int octdec(string octal_number)\",\n        \"Returns the decimal equivalent of an octal string\"\n    ],\n    \"odbc_autocommit\": [\n        \"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\n        \"Toggle autocommit mode or get status\"\n    ],\n    \"odbc_binmode\": [\n        \"bool odbc_binmode(int result_id, int mode)\",\n        \"Handle binary column data\"\n    ],\n    \"odbc_close\": [\n        \"void odbc_close(resource connection_id)\",\n        \"Close an ODBC connection\"\n    ],\n    \"odbc_close_all\": [\n        \"void odbc_close_all(void)\",\n        \"Close all ODBC connections\"\n    ],\n    \"odbc_columnprivileges\": [\n        \"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\n        \"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"\n    ],\n    \"odbc_columns\": [\n        \"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\n        \"Returns a result identifier that can be used to fetch a list of column names in specified tables\"\n    ],\n    \"odbc_commit\": [\n        \"bool odbc_commit(resource connection_id)\",\n        \"Commit an ODBC transaction\"\n    ],\n    \"odbc_connect\": [\n        \"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\n        \"Connect to a datasource\"\n    ],\n    \"odbc_cursor\": [\n        \"string odbc_cursor(resource result_id)\",\n        \"Get cursor name\"\n    ],\n    \"odbc_data_source\": [\n        \"array odbc_data_source(resource connection_id, int fetch_type)\",\n        \"Return information about the currently connected data source\"\n    ],\n    \"odbc_error\": [\n        \"string odbc_error([resource connection_id])\",\n        \"Get the last error code\"\n    ],\n    \"odbc_errormsg\": [\n        \"string odbc_errormsg([resource connection_id])\",\n        \"Get the last error message\"\n    ],\n    \"odbc_exec\": [\n        \"resource odbc_exec(resource connection_id, string query [, int flags])\",\n        \"Prepare and execute an SQL statement\"\n    ],\n    \"odbc_execute\": [\n        \"bool odbc_execute(resource result_id [, array parameters_array])\",\n        \"Execute a prepared statement\"\n    ],\n    \"odbc_fetch_array\": [\n        \"array odbc_fetch_array(int result [, int rownumber])\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"odbc_fetch_into\": [\n        \"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\n        \"Fetch one result row into an array\"\n    ],\n    \"odbc_fetch_object\": [\n        \"object odbc_fetch_object(int result [, int rownumber])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"odbc_fetch_row\": [\n        \"bool odbc_fetch_row(resource result_id [, int row_number])\",\n        \"Fetch a row\"\n    ],\n    \"odbc_field_len\": [\n        \"int odbc_field_len(resource result_id, int field_number)\",\n        \"Get the length (precision) of a column\"\n    ],\n    \"odbc_field_name\": [\n        \"string odbc_field_name(resource result_id, int field_number)\",\n        \"Get a column name\"\n    ],\n    \"odbc_field_num\": [\n        \"int odbc_field_num(resource result_id, string field_name)\",\n        \"Return column number\"\n    ],\n    \"odbc_field_scale\": [\n        \"int odbc_field_scale(resource result_id, int field_number)\",\n        \"Get the scale of a column\"\n    ],\n    \"odbc_field_type\": [\n        \"string odbc_field_type(resource result_id, int field_number)\",\n        \"Get the datatype of a column\"\n    ],\n    \"odbc_foreignkeys\": [\n        \"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\n        \"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"\n    ],\n    \"odbc_free_result\": [\n        \"bool odbc_free_result(resource result_id)\",\n        \"Free resources associated with a result\"\n    ],\n    \"odbc_gettypeinfo\": [\n        \"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\n        \"Returns a result identifier containing information about data types supported by the data source\"\n    ],\n    \"odbc_longreadlen\": [\n        \"bool odbc_longreadlen(int result_id, int length)\",\n        \"Handle LONG columns\"\n    ],\n    \"odbc_next_result\": [\n        \"bool odbc_next_result(resource result_id)\",\n        \"Checks if multiple results are avaiable\"\n    ],\n    \"odbc_num_fields\": [\n        \"int odbc_num_fields(resource result_id)\",\n        \"Get number of columns in a result\"\n    ],\n    \"odbc_num_rows\": [\n        \"int odbc_num_rows(resource result_id)\",\n        \"Get number of rows in a result\"\n    ],\n    \"odbc_pconnect\": [\n        \"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\n        \"Establish a persistent connection to a datasource\"\n    ],\n    \"odbc_prepare\": [\n        \"resource odbc_prepare(resource connection_id, string query)\",\n        \"Prepares a statement for execution\"\n    ],\n    \"odbc_primarykeys\": [\n        \"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\n        \"Returns a result identifier listing the column names that comprise the primary key for a table\"\n    ],\n    \"odbc_procedurecolumns\": [\n        \"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\n        \"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"\n    ],\n    \"odbc_procedures\": [\n        \"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\n        \"Returns a result identifier containg the list of procedure names in a datasource\"\n    ],\n    \"odbc_result\": [\n        \"mixed odbc_result(resource result_id, mixed field)\",\n        \"Get result data\"\n    ],\n    \"odbc_result_all\": [\n        \"int odbc_result_all(resource result_id [, string format])\",\n        \"Print result as HTML table\"\n    ],\n    \"odbc_rollback\": [\n        \"bool odbc_rollback(resource connection_id)\",\n        \"Rollback a transaction\"\n    ],\n    \"odbc_setoption\": [\n        \"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\n        \"Sets connection or statement options\"\n    ],\n    \"odbc_specialcolumns\": [\n        \"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\n        \"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"\n    ],\n    \"odbc_statistics\": [\n        \"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\n        \"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"\n    ],\n    \"odbc_tableprivileges\": [\n        \"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\n        \"Returns a result identifier containing a list of tables and the privileges associated with each table\"\n    ],\n    \"odbc_tables\": [\n        \"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\n        \"Call the SQLTables function\"\n    ],\n    \"opendir\": [\n        \"mixed opendir(string path[, resource context])\",\n        \"Open a directory and return a dir_handle\"\n    ],\n    \"openlog\": [\n        \"bool openlog(string ident, int option, int facility)\",\n        \"Open connection to system logger\"\n    ],\n    \"openssl_csr_export\": [\n        \"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\n        \"Exports a CSR to file or a var\"\n    ],\n    \"openssl_csr_export_to_file\": [\n        \"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\n        \"Exports a CSR to file\"\n    ],\n    \"openssl_csr_get_public_key\": [\n        \"mixed openssl_csr_get_public_key(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_get_subject\": [\n        \"mixed openssl_csr_get_subject(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_new\": [\n        \"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\n        \"Generates a privkey and CSR\"\n    ],\n    \"openssl_csr_sign\": [\n        \"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\n        \"Signs a cert with another CERT\"\n    ],\n    \"openssl_decrypt\": [\n        \"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\n        \"Takes raw or base64 encoded string and dectupt it using given method and key\"\n    ],\n    \"openssl_dh_compute_key\": [\n        \"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\n        \"Computes shared sicret for public value of remote DH key and local DH key\"\n    ],\n    \"openssl_digest\": [\n        \"string openssl_digest(string data, string method [, bool raw_output=false])\",\n        \"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"\n    ],\n    \"openssl_encrypt\": [\n        \"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\n        \"Encrypts given data with given method and key, returns raw or base64 encoded string\"\n    ],\n    \"openssl_error_string\": [\n        \"mixed openssl_error_string(void)\",\n        \"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"\n    ],\n    \"openssl_get_cipher_methods\": [\n        \"array openssl_get_cipher_methods([bool aliases = false])\",\n        \"Return array of available cipher methods\"\n    ],\n    \"openssl_get_md_methods\": [\n        \"array openssl_get_md_methods([bool aliases = false])\",\n        \"Return array of available digest methods\"\n    ],\n    \"openssl_open\": [\n        \"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\n        \"Opens data\"\n    ],\n    \"openssl_pkcs12_export\": [\n        \"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS12 to a var\"\n    ],\n    \"openssl_pkcs12_export_to_file\": [\n        \"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS to file\"\n    ],\n    \"openssl_pkcs12_read\": [\n        \"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\n        \"Parses a PKCS12 to an array\"\n    ],\n    \"openssl_pkcs7_decrypt\": [\n        \"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\n        \"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"\n    ],\n    \"openssl_pkcs7_encrypt\": [\n        \"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\n        \"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"\n    ],\n    \"openssl_pkcs7_sign\": [\n        \"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\n        \"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"\n    ],\n    \"openssl_pkcs7_verify\": [\n        \"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\n        \"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"\n    ],\n    \"openssl_pkey_export\": [\n        \"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\n        \"Gets an exportable representation of a key into a string or file\"\n    ],\n    \"openssl_pkey_export_to_file\": [\n        \"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\n        \"Gets an exportable representation of a key into a file\"\n    ],\n    \"openssl_pkey_free\": [\n        \"void openssl_pkey_free(int key)\",\n        \"Frees a key\"\n    ],\n    \"openssl_pkey_get_details\": [\n        \"resource openssl_pkey_get_details(resource key)\",\n        \"returns an array with the key details (bits, pkey, type)\"\n    ],\n    \"openssl_pkey_get_private\": [\n        \"int openssl_pkey_get_private(string key [, string passphrase])\",\n        \"Gets private keys\"\n    ],\n    \"openssl_pkey_get_public\": [\n        \"int openssl_pkey_get_public(mixed cert)\",\n        \"Gets public key from X.509 certificate\"\n    ],\n    \"openssl_pkey_new\": [\n        \"resource openssl_pkey_new([array configargs])\",\n        \"Generates a new private key\"\n    ],\n    \"openssl_private_decrypt\": [\n        \"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\n        \"Decrypts data with private key\"\n    ],\n    \"openssl_private_encrypt\": [\n        \"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with private key\"\n    ],\n    \"openssl_public_decrypt\": [\n        \"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\n        \"Decrypts data with public key\"\n    ],\n    \"openssl_public_encrypt\": [\n        \"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with public key\"\n    ],\n    \"openssl_random_pseudo_bytes\": [\n        \"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\n        \"Returns a string of the length specified filled with random pseudo bytes\"\n    ],\n    \"openssl_seal\": [\n        \"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\n        \"Seals data\"\n    ],\n    \"openssl_sign\": [\n        \"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\n        \"Signs data\"\n    ],\n    \"openssl_verify\": [\n        \"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\n        \"Verifys data\"\n    ],\n    \"openssl_x509_check_private_key\": [\n        \"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\n        \"Checks if a private key corresponds to a CERT\"\n    ],\n    \"openssl_x509_checkpurpose\": [\n        \"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\n        \"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"\n    ],\n    \"openssl_x509_export\": [\n        \"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_export_to_file\": [\n        \"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_free\": [\n        \"void openssl_x509_free(resource x509)\",\n        \"Frees X.509 certificates\"\n    ],\n    \"openssl_x509_parse\": [\n        \"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\n        \"Returns an array of the fields/values of the CERT\"\n    ],\n    \"openssl_x509_read\": [\n        \"resource openssl_x509_read(mixed cert)\",\n        \"Reads X.509 certificates\"\n    ],\n    \"ord\": [\n        \"int ord(string character)\",\n        \"Returns ASCII value of character\"\n    ],\n    \"output_add_rewrite_var\": [\n        \"bool output_add_rewrite_var(string name, string value)\",\n        \"Add URL rewriter values\"\n    ],\n    \"output_reset_rewrite_vars\": [\n        \"bool output_reset_rewrite_vars(void)\",\n        \"Reset(clear) URL rewriter values\"\n    ],\n    \"pack\": [\n        \"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Takes one or more arguments and packs them into a binary string according to the format argument\"\n    ],\n    \"parse_ini_file\": [\n        \"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration file\"\n    ],\n    \"parse_ini_string\": [\n        \"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration string\"\n    ],\n    \"parse_locale\": [\n        \"static array parse_locale($locale)\",\n        \"* parses a locale-id into an array the different parts of it\"\n    ],\n    \"parse_str\": [\n        \"void parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"parse_url\": [\n        \"mixed parse_url(string url, [int url_component])\",\n        \"Parse a URL and return its components\"\n    ],\n    \"passthru\": [\n        \"void passthru(string command [, int &return_value])\",\n        \"Execute an external program and display raw output\"\n    ],\n    \"pathinfo\": [\n        \"array pathinfo(string path[, int options])\",\n        \"Returns information about a certain string\"\n    ],\n    \"pclose\": [\n        \"int pclose(resource fp)\",\n        \"Close a file pointer opened by popen()\"\n    ],\n    \"pcnlt_sigwaitinfo\": [\n        \"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\n        \"Synchronously wait for queued signals\"\n    ],\n    \"pcntl_alarm\": [\n        \"int pcntl_alarm(int seconds)\",\n        \"Set an alarm clock for delivery of a signal\"\n    ],\n    \"pcntl_exec\": [\n        \"bool pcntl_exec(string path [, array args [, array envs]])\",\n        \"Executes specified program in current process space as defined by exec(2)\"\n    ],\n    \"pcntl_fork\": [\n        \"int pcntl_fork(void)\",\n        \"Forks the currently running process following the same behavior as the UNIX fork() system call\"\n    ],\n    \"pcntl_getpriority\": [\n        \"int pcntl_getpriority([int pid [, int process_identifier]])\",\n        \"Get the priority of any process\"\n    ],\n    \"pcntl_setpriority\": [\n        \"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\n        \"Change the priority of any process\"\n    ],\n    \"pcntl_signal\": [\n        \"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\n        \"Assigns a system signal handler to a PHP function\"\n    ],\n    \"pcntl_signal_dispatch\": [\n        \"bool pcntl_signal_dispatch()\",\n        \"Dispatch signals to signal handlers\"\n    ],\n    \"pcntl_sigprocmask\": [\n        \"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\n        \"Examine and change blocked signals\"\n    ],\n    \"pcntl_sigtimedwait\": [\n        \"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\n        \"Wait for queued signals\"\n    ],\n    \"pcntl_wait\": [\n        \"int pcntl_wait(int &status)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_waitpid\": [\n        \"int pcntl_waitpid(int pid, int &status, int options)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_wexitstatus\": [\n        \"int pcntl_wexitstatus(int status)\",\n        \"Returns the status code of a child's exit\"\n    ],\n    \"pcntl_wifexited\": [\n        \"bool pcntl_wifexited(int status)\",\n        \"Returns true if the child status code represents a successful exit\"\n    ],\n    \"pcntl_wifsignaled\": [\n        \"bool pcntl_wifsignaled(int status)\",\n        \"Returns true if the child status code represents a process that was terminated due to a signal\"\n    ],\n    \"pcntl_wifstopped\": [\n        \"bool pcntl_wifstopped(int status)\",\n        \"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"\n    ],\n    \"pcntl_wstopsig\": [\n        \"int pcntl_wstopsig(int status)\",\n        \"Returns the number of the signal that caused the process to stop who's status code is passed\"\n    ],\n    \"pcntl_wtermsig\": [\n        \"int pcntl_wtermsig(int status)\",\n        \"Returns the number of the signal that terminated the process who's status code is passed\"\n    ],\n    \"pdo_drivers\": [\n        \"array pdo_drivers()\",\n        \"Return array of available PDO drivers\"\n    ],\n    \"pfsockopen\": [\n        \"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open persistent Internet or Unix domain socket connection\"\n    ],\n    \"pg_affected_rows\": [\n        \"int pg_affected_rows(resource result)\",\n        \"Returns the number of affected tuples\"\n    ],\n    \"pg_cancel_query\": [\n        \"bool pg_cancel_query(resource connection)\",\n        \"Cancel request\"\n    ],\n    \"pg_client_encoding\": [\n        \"string pg_client_encoding([resource connection])\",\n        \"Get the current client encoding\"\n    ],\n    \"pg_close\": [\n        \"bool pg_close([resource connection])\",\n        \"Close a PostgreSQL connection\"\n    ],\n    \"pg_connect\": [\n        \"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a PostgreSQL connection\"\n    ],\n    \"pg_connection_busy\": [\n        \"bool pg_connection_busy(resource connection)\",\n        \"Get connection is busy or not\"\n    ],\n    \"pg_connection_reset\": [\n        \"bool pg_connection_reset(resource connection)\",\n        \"Reset connection (reconnect)\"\n    ],\n    \"pg_connection_status\": [\n        \"int pg_connection_status(resource connnection)\",\n        \"Get connection status\"\n    ],\n    \"pg_convert\": [\n        \"array pg_convert(resource db, string table, array values[, int options])\",\n        \"Check and convert values for PostgreSQL SQL statement\"\n    ],\n    \"pg_copy_from\": [\n        \"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\n        \"Copy table from array\"\n    ],\n    \"pg_copy_to\": [\n        \"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\n        \"Copy table to array\"\n    ],\n    \"pg_dbname\": [\n        \"string pg_dbname([resource connection])\",\n        \"Get the database name\"\n    ],\n    \"pg_delete\": [\n        \"mixed pg_delete(resource db, string table, array ids[, int options])\",\n        \"Delete records has ids (id=>value)\"\n    ],\n    \"pg_end_copy\": [\n        \"bool pg_end_copy([resource connection])\",\n        \"Sync with backend. Completes the Copy command\"\n    ],\n    \"pg_escape_bytea\": [\n        \"string pg_escape_bytea([resource connection,] string data)\",\n        \"Escape binary for bytea type\"\n    ],\n    \"pg_escape_string\": [\n        \"string pg_escape_string([resource connection,] string data)\",\n        \"Escape string for text/char type\"\n    ],\n    \"pg_execute\": [\n        \"resource pg_execute([resource connection,] string stmtname, array params)\",\n        \"Execute a prepared query\"\n    ],\n    \"pg_fetch_all\": [\n        \"array pg_fetch_all(resource result)\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_all_columns\": [\n        \"array pg_fetch_all_columns(resource result [, int column_number])\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_array\": [\n        \"array pg_fetch_array(resource result [, int row [, int result_type]])\",\n        \"Fetch a row as an array\"\n    ],\n    \"pg_fetch_assoc\": [\n        \"array pg_fetch_assoc(resource result [, int row])\",\n        \"Fetch a row as an assoc array\"\n    ],\n    \"pg_fetch_object\": [\n        \"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\n        \"Fetch a row as an object\"\n    ],\n    \"pg_fetch_result\": [\n        \"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\n        \"Returns values from a result identifier\"\n    ],\n    \"pg_fetch_row\": [\n        \"array pg_fetch_row(resource result [, int row [, int result_type]])\",\n        \"Get a row as an enumerated array\"\n    ],\n    \"pg_field_is_null\": [\n        \"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\n        \"Test if a field is NULL\"\n    ],\n    \"pg_field_name\": [\n        \"string pg_field_name(resource result, int field_number)\",\n        \"Returns the name of the field\"\n    ],\n    \"pg_field_num\": [\n        \"int pg_field_num(resource result, string field_name)\",\n        \"Returns the field number of the named field\"\n    ],\n    \"pg_field_prtlen\": [\n        \"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\n        \"Returns the printed length\"\n    ],\n    \"pg_field_size\": [\n        \"int pg_field_size(resource result, int field_number)\",\n        \"Returns the internal size of the field\"\n    ],\n    \"pg_field_table\": [\n        \"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\n        \"Returns the name of the table field belongs to, or table's oid if oid_only is true\"\n    ],\n    \"pg_field_type\": [\n        \"string pg_field_type(resource result, int field_number)\",\n        \"Returns the type name for the given field\"\n    ],\n    \"pg_field_type_oid\": [\n        \"string pg_field_type_oid(resource result, int field_number)\",\n        \"Returns the type oid for the given field\"\n    ],\n    \"pg_free_result\": [\n        \"bool pg_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"pg_get_notify\": [\n        \"array pg_get_notify([resource connection[, result_type]])\",\n        \"Get asynchronous notification\"\n    ],\n    \"pg_get_pid\": [\n        \"int pg_get_pid([resource connection)\",\n        \"Get backend(server) pid\"\n    ],\n    \"pg_get_result\": [\n        \"resource pg_get_result(resource connection)\",\n        \"Get asynchronous query result\"\n    ],\n    \"pg_host\": [\n        \"string pg_host([resource connection])\",\n        \"Returns the host name associated with the connection\"\n    ],\n    \"pg_insert\": [\n        \"mixed pg_insert(resource db, string table, array values[, int options])\",\n        \"Insert values (filed=>value) to table\"\n    ],\n    \"pg_last_error\": [\n        \"string pg_last_error([resource connection])\",\n        \"Get the error message string\"\n    ],\n    \"pg_last_notice\": [\n        \"string pg_last_notice(resource connection)\",\n        \"Returns the last notice set by the backend\"\n    ],\n    \"pg_last_oid\": [\n        \"string pg_last_oid(resource result)\",\n        \"Returns the last object identifier\"\n    ],\n    \"pg_lo_close\": [\n        \"bool pg_lo_close(resource large_object)\",\n        \"Close a large object\"\n    ],\n    \"pg_lo_create\": [\n        \"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\n        \"Create a large object\"\n    ],\n    \"pg_lo_export\": [\n        \"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\n        \"Export large object direct to filesystem\"\n    ],\n    \"pg_lo_import\": [\n        \"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\n        \"Import large object direct from filesystem\"\n    ],\n    \"pg_lo_open\": [\n        \"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\n        \"Open a large object and return fd\"\n    ],\n    \"pg_lo_read\": [\n        \"string pg_lo_read(resource large_object [, int len])\",\n        \"Read a large object\"\n    ],\n    \"pg_lo_read_all\": [\n        \"int pg_lo_read_all(resource large_object)\",\n        \"Read a large object and send straight to browser\"\n    ],\n    \"pg_lo_seek\": [\n        \"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\n        \"Seeks position of large object\"\n    ],\n    \"pg_lo_tell\": [\n        \"int pg_lo_tell(resource large_object)\",\n        \"Returns current position of large object\"\n    ],\n    \"pg_lo_unlink\": [\n        \"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\n        \"Delete a large object\"\n    ],\n    \"pg_lo_write\": [\n        \"int pg_lo_write(resource large_object, string buf [, int len])\",\n        \"Write a large object\"\n    ],\n    \"pg_meta_data\": [\n        \"array pg_meta_data(resource db, string table)\",\n        \"Get meta_data\"\n    ],\n    \"pg_num_fields\": [\n        \"int pg_num_fields(resource result)\",\n        \"Return the number of fields in the result\"\n    ],\n    \"pg_num_rows\": [\n        \"int pg_num_rows(resource result)\",\n        \"Return the number of rows in the result\"\n    ],\n    \"pg_options\": [\n        \"string pg_options([resource connection])\",\n        \"Get the options associated with the connection\"\n    ],\n    \"pg_parameter_status\": [\n        \"string|false pg_parameter_status([resource connection,] string param_name)\",\n        \"Returns the value of a server parameter\"\n    ],\n    \"pg_pconnect\": [\n        \"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a persistent PostgreSQL connection\"\n    ],\n    \"pg_ping\": [\n        \"bool pg_ping([resource connection])\",\n        \"Ping database. If connection is bad, try to reconnect.\"\n    ],\n    \"pg_port\": [\n        \"int pg_port([resource connection])\",\n        \"Return the port number associated with the connection\"\n    ],\n    \"pg_prepare\": [\n        \"resource pg_prepare([resource connection,] string stmtname, string query)\",\n        \"Prepare a query for future execution\"\n    ],\n    \"pg_put_line\": [\n        \"bool pg_put_line([resource connection,] string query)\",\n        \"Send null-terminated string to backend server\"\n    ],\n    \"pg_query\": [\n        \"resource pg_query([resource connection,] string query)\",\n        \"Execute a query\"\n    ],\n    \"pg_query_params\": [\n        \"resource pg_query_params([resource connection,] string query, array params)\",\n        \"Execute a query\"\n    ],\n    \"pg_result_error\": [\n        \"string pg_result_error(resource result)\",\n        \"Get error message associated with result\"\n    ],\n    \"pg_result_error_field\": [\n        \"string pg_result_error_field(resource result, int fieldcode)\",\n        \"Get error message field associated with result\"\n    ],\n    \"pg_result_seek\": [\n        \"bool pg_result_seek(resource result, int offset)\",\n        \"Set internal row offset\"\n    ],\n    \"pg_result_status\": [\n        \"mixed pg_result_status(resource result[, long result_type])\",\n        \"Get status of query result\"\n    ],\n    \"pg_select\": [\n        \"mixed pg_select(resource db, string table, array ids[, int options])\",\n        \"Select records that has ids (id=>value)\"\n    ],\n    \"pg_send_execute\": [\n        \"bool pg_send_execute(resource connection, string stmtname, array params)\",\n        \"Executes prevriously prepared stmtname asynchronously\"\n    ],\n    \"pg_send_prepare\": [\n        \"bool pg_send_prepare(resource connection, string stmtname, string query)\",\n        \"Asynchronously prepare a query for future execution\"\n    ],\n    \"pg_send_query\": [\n        \"bool pg_send_query(resource connection, string query)\",\n        \"Send asynchronous query\"\n    ],\n    \"pg_send_query_params\": [\n        \"bool pg_send_query_params(resource connection, string query, array params)\",\n        \"Send asynchronous parameterized query\"\n    ],\n    \"pg_set_client_encoding\": [\n        \"int pg_set_client_encoding([resource connection,] string encoding)\",\n        \"Set client encoding\"\n    ],\n    \"pg_set_error_verbosity\": [\n        \"int pg_set_error_verbosity([resource connection,] int verbosity)\",\n        \"Set error verbosity\"\n    ],\n    \"pg_trace\": [\n        \"bool pg_trace(string filename [, string mode [, resource connection]])\",\n        \"Enable tracing a PostgreSQL connection\"\n    ],\n    \"pg_transaction_status\": [\n        \"int pg_transaction_status(resource connnection)\",\n        \"Get transaction status\"\n    ],\n    \"pg_tty\": [\n        \"string pg_tty([resource connection])\",\n        \"Return the tty name associated with the connection\"\n    ],\n    \"pg_unescape_bytea\": [\n        \"string pg_unescape_bytea(string data)\",\n        \"Unescape binary for bytea type\"\n    ],\n    \"pg_untrace\": [\n        \"bool pg_untrace([resource connection])\",\n        \"Disable tracing of a PostgreSQL connection\"\n    ],\n    \"pg_update\": [\n        \"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\n        \"Update table using values (field=>value) and ids (id=>value)\"\n    ],\n    \"pg_version\": [\n        \"array pg_version([resource connection])\",\n        \"Returns an array with client, protocol and server version (when available)\"\n    ],\n    \"php_egg_logo_guid\": [\n        \"string php_egg_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_ini_loaded_file\": [\n        \"string php_ini_loaded_file(void)\",\n        \"Return the actual loaded ini filename\"\n    ],\n    \"php_ini_scanned_files\": [\n        \"string php_ini_scanned_files(void)\",\n        \"Return comma-separated string of .ini files parsed from the additional ini dir\"\n    ],\n    \"php_logo_guid\": [\n        \"string php_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_real_logo_guid\": [\n        \"string php_real_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_sapi_name\": [\n        \"string php_sapi_name(void)\",\n        \"Return the current SAPI module name\"\n    ],\n    \"php_snmpv3\": [\n        \"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\n        \"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"\n    ],\n    \"php_strip_whitespace\": [\n        \"string php_strip_whitespace(string file_name)\",\n        \"Return source with stripped comments and whitespace\"\n    ],\n    \"php_uname\": [\n        \"string php_uname(void)\",\n        \"Return information about the system PHP was built on\"\n    ],\n    \"phpcredits\": [\n        \"void phpcredits([int flag])\",\n        \"Prints the list of people who've contributed to the PHP project\"\n    ],\n    \"phpinfo\": [\n        \"void phpinfo([int what])\",\n        \"Output a page of useful information about PHP and the current request\"\n    ],\n    \"phpversion\": [\n        \"string phpversion([string extension])\",\n        \"Return the current PHP version\"\n    ],\n    \"pi\": [\n        \"float pi(void)\",\n        \"Returns an approximation of pi\"\n    ],\n    \"png2wbmp\": [\n        \"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert PNG image to WBMP image\"\n    ],\n    \"popen\": [\n        \"resource popen(string command, string mode)\",\n        \"Execute a command and open either a read or a write pipe to it\"\n    ],\n    \"posix_access\": [\n        \"bool posix_access(string file [, int mode])\",\n        \"Determine accessibility of a file (POSIX.1 5.6.3)\"\n    ],\n    \"posix_ctermid\": [\n        \"string posix_ctermid(void)\",\n        \"Generate terminal path name (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_get_last_error\": [\n        \"int posix_get_last_error(void)\",\n        \"Retrieve the error number set by the last posix function which failed.\"\n    ],\n    \"posix_getcwd\": [\n        \"string posix_getcwd(void)\",\n        \"Get working directory pathname (POSIX.1, 5.2.2)\"\n    ],\n    \"posix_getegid\": [\n        \"int posix_getegid(void)\",\n        \"Get the current effective group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_geteuid\": [\n        \"int posix_geteuid(void)\",\n        \"Get the current effective user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgid\": [\n        \"int posix_getgid(void)\",\n        \"Get the current group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgrgid\": [\n        \"array posix_getgrgid(long gid)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgrnam\": [\n        \"array posix_getgrnam(string groupname)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgroups\": [\n        \"array posix_getgroups(void)\",\n        \"Get supplementary group id's (POSIX.1, 4.2.3)\"\n    ],\n    \"posix_getlogin\": [\n        \"string posix_getlogin(void)\",\n        \"Get user name (POSIX.1, 4.2.4)\"\n    ],\n    \"posix_getpgid\": [\n        \"int posix_getpgid(void)\",\n        \"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"\n    ],\n    \"posix_getpgrp\": [\n        \"int posix_getpgrp(void)\",\n        \"Get current process group id (POSIX.1, 4.3.1)\"\n    ],\n    \"posix_getpid\": [\n        \"int posix_getpid(void)\",\n        \"Get the current process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getppid\": [\n        \"int posix_getppid(void)\",\n        \"Get the parent process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getpwnam\": [\n        \"array posix_getpwnam(string groupname)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getpwuid\": [\n        \"array posix_getpwuid(long uid)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getrlimit\": [\n        \"array posix_getrlimit(void)\",\n        \"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"\n    ],\n    \"posix_getsid\": [\n        \"int posix_getsid(void)\",\n        \"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"\n    ],\n    \"posix_getuid\": [\n        \"int posix_getuid(void)\",\n        \"Get the current user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_initgroups\": [\n        \"bool posix_initgroups(string name, int base_group_id)\",\n        \"Calculate the group access list for the user specified in name.\"\n    ],\n    \"posix_isatty\": [\n        \"bool posix_isatty(int fd)\",\n        \"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_kill\": [\n        \"bool posix_kill(int pid, int sig)\",\n        \"Send a signal to a process (POSIX.1, 3.3.2)\"\n    ],\n    \"posix_mkfifo\": [\n        \"bool posix_mkfifo(string pathname, int mode)\",\n        \"Make a FIFO special file (POSIX.1, 5.4.2)\"\n    ],\n    \"posix_mknod\": [\n        \"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\n        \"Make a special or ordinary file (POSIX.1)\"\n    ],\n    \"posix_setegid\": [\n        \"bool posix_setegid(long uid)\",\n        \"Set effective group id\"\n    ],\n    \"posix_seteuid\": [\n        \"bool posix_seteuid(long uid)\",\n        \"Set effective user id\"\n    ],\n    \"posix_setgid\": [\n        \"bool posix_setgid(int uid)\",\n        \"Set group id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_setpgid\": [\n        \"bool posix_setpgid(int pid, int pgid)\",\n        \"Set process group id for job control (POSIX.1, 4.3.3)\"\n    ],\n    \"posix_setsid\": [\n        \"int posix_setsid(void)\",\n        \"Create session and set process group id (POSIX.1, 4.3.2)\"\n    ],\n    \"posix_setuid\": [\n        \"bool posix_setuid(long uid)\",\n        \"Set user id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_strerror\": [\n        \"string posix_strerror(int errno)\",\n        \"Retrieve the system error message associated with the given errno.\"\n    ],\n    \"posix_times\": [\n        \"array posix_times(void)\",\n        \"Get process times (POSIX.1, 4.5.2)\"\n    ],\n    \"posix_ttyname\": [\n        \"string posix_ttyname(int fd)\",\n        \"Determine terminal device name (POSIX.1, 4.7.2)\"\n    ],\n    \"posix_uname\": [\n        \"array posix_uname(void)\",\n        \"Get system name (POSIX.1, 4.4.1)\"\n    ],\n    \"pow\": [\n        \"number pow(number base, number exponent)\",\n        \"Returns base raised to the power of exponent. Returns integer result when possible\"\n    ],\n    \"preg_filter\": [\n        \"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement and only return matches.\"\n    ],\n    \"preg_grep\": [\n        \"array preg_grep(string regex, array input [, int flags])\",\n        \"Searches array and returns entries which match regex\"\n    ],\n    \"preg_last_error\": [\n        \"int preg_last_error()\",\n        \"Returns the error code of the last regexp execution.\"\n    ],\n    \"preg_match\": [\n        \"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\n        \"Perform a Perl-style regular expression match\"\n    ],\n    \"preg_match_all\": [\n        \"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\n        \"Perform a Perl-style global regular expression match\"\n    ],\n    \"preg_quote\": [\n        \"string preg_quote(string str [, string delim_char])\",\n        \"Quote regular expression characters plus an optional character\"\n    ],\n    \"preg_replace\": [\n        \"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement.\"\n    ],\n    \"preg_replace_callback\": [\n        \"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement using replacement callback.\"\n    ],\n    \"preg_split\": [\n        \"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\n        \"Split string into an array using a perl-style regular expression as a delimiter\"\n    ],\n    \"prev\": [\n        \"mixed prev(array array_arg)\",\n        \"Move array argument's internal pointer to the previous element and return it\"\n    ],\n    \"print\": [\n        \"int print(string arg)\",\n        \"Output a string\"\n    ],\n    \"print_r\": [\n        \"mixed print_r(mixed var [, bool return])\",\n        \"Prints out or returns information about the specified variable\"\n    ],\n    \"printf\": [\n        \"int printf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string\"\n    ],\n    \"proc_close\": [\n        \"int proc_close(resource process)\",\n        \"close a process opened by proc_open\"\n    ],\n    \"proc_get_status\": [\n        \"array proc_get_status(resource process)\",\n        \"get information about a process opened by proc_open\"\n    ],\n    \"proc_nice\": [\n        \"bool proc_nice(int priority)\",\n        \"Change the priority of the current process\"\n    ],\n    \"proc_open\": [\n        \"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\n        \"Run a process with more control over it's file descriptors\"\n    ],\n    \"proc_terminate\": [\n        \"bool proc_terminate(resource process [, long signal])\",\n        \"kill a process opened by proc_open\"\n    ],\n    \"property_exists\": [\n        \"bool property_exists(mixed object_or_class, string property_name)\",\n        \"Checks if the object or class has a property\"\n    ],\n    \"pspell_add_to_personal\": [\n        \"bool pspell_add_to_personal(int pspell, string word)\",\n        \"Adds a word to a personal list\"\n    ],\n    \"pspell_add_to_session\": [\n        \"bool pspell_add_to_session(int pspell, string word)\",\n        \"Adds a word to the current session\"\n    ],\n    \"pspell_check\": [\n        \"bool pspell_check(int pspell, string word)\",\n        \"Returns true if word is valid\"\n    ],\n    \"pspell_clear_session\": [\n        \"bool pspell_clear_session(int pspell)\",\n        \"Clears the current session\"\n    ],\n    \"pspell_config_create\": [\n        \"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\n        \"Create a new config to be used later to create a manager\"\n    ],\n    \"pspell_config_data_dir\": [\n        \"bool pspell_config_data_dir(int conf, string directory)\",\n        \"location of language data files\"\n    ],\n    \"pspell_config_dict_dir\": [\n        \"bool pspell_config_dict_dir(int conf, string directory)\",\n        \"location of the main word list\"\n    ],\n    \"pspell_config_ignore\": [\n        \"bool pspell_config_ignore(int conf, int ignore)\",\n        \"Ignore words <= n chars\"\n    ],\n    \"pspell_config_mode\": [\n        \"bool pspell_config_mode(int conf, long mode)\",\n        \"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"\n    ],\n    \"pspell_config_personal\": [\n        \"bool pspell_config_personal(int conf, string personal)\",\n        \"Use a personal dictionary for this config\"\n    ],\n    \"pspell_config_repl\": [\n        \"bool pspell_config_repl(int conf, string repl)\",\n        \"Use a personal dictionary with replacement pairs for this config\"\n    ],\n    \"pspell_config_runtogether\": [\n        \"bool pspell_config_runtogether(int conf, bool runtogether)\",\n        \"Consider run-together words as valid components\"\n    ],\n    \"pspell_config_save_repl\": [\n        \"bool pspell_config_save_repl(int conf, bool save)\",\n        \"Save replacement pairs when personal list is saved for this config\"\n    ],\n    \"pspell_new\": [\n        \"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary\"\n    ],\n    \"pspell_new_config\": [\n        \"int pspell_new_config(int config)\",\n        \"Load a dictionary based on the given config\"\n    ],\n    \"pspell_new_personal\": [\n        \"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary with a personal wordlist\"\n    ],\n    \"pspell_save_wordlist\": [\n        \"bool pspell_save_wordlist(int pspell)\",\n        \"Saves the current (personal) wordlist\"\n    ],\n    \"pspell_store_replacement\": [\n        \"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\n        \"Notify the dictionary of a user-selected replacement\"\n    ],\n    \"pspell_suggest\": [\n        \"array pspell_suggest(int pspell, string word)\",\n        \"Returns array of suggestions\"\n    ],\n    \"putenv\": [\n        \"bool putenv(string setting)\",\n        \"Set the value of an environment variable\"\n    ],\n    \"quoted_printable_decode\": [\n        \"string quoted_printable_decode(string str)\",\n        \"Convert a quoted-printable string to an 8 bit string\"\n    ],\n    \"quoted_printable_encode\": [\n        \"string quoted_printable_encode(string str) */\",\n        \"PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}\"\n    ],\n    \"quotemeta\": [\n        \"string quotemeta(string str)\",\n        \"Quotes meta characters\"\n    ],\n    \"rad2deg\": [\n        \"float rad2deg(float number)\",\n        \"Converts the radian number to the equivalent number in degrees\"\n    ],\n    \"rand\": [\n        \"int rand([int min, int max])\",\n        \"Returns a random number\"\n    ],\n    \"range\": [\n        \"array range(mixed low, mixed high[, int step])\",\n        \"Create an array containing the range of integers or characters from low to high (inclusive)\"\n    ],\n    \"rawurldecode\": [\n        \"string rawurldecode(string str)\",\n        \"Decodes URL-encodes string\"\n    ],\n    \"rawurlencode\": [\n        \"string rawurlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"readdir\": [\n        \"string readdir([resource dir_handle])\",\n        \"Read directory entry from dir_handle\"\n    ],\n    \"readfile\": [\n        \"int readfile(string filename [, bool use_include_path[, resource context]])\",\n        \"Output a file or a URL\"\n    ],\n    \"readgzfile\": [\n        \"int readgzfile(string filename [, int use_include_path])\",\n        \"Output a .gz-file\"\n    ],\n    \"readline\": [\n        \"string readline([string prompt])\",\n        \"Reads a line\"\n    ],\n    \"readline_add_history\": [\n        \"bool readline_add_history(string prompt)\",\n        \"Adds a line to the history\"\n    ],\n    \"readline_callback_handler_install\": [\n        \"void readline_callback_handler_install(string prompt, mixed callback)\",\n        \"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"\n    ],\n    \"readline_callback_handler_remove\": [\n        \"bool readline_callback_handler_remove()\",\n        \"Removes a previously installed callback handler and restores terminal settings\"\n    ],\n    \"readline_callback_read_char\": [\n        \"void readline_callback_read_char()\",\n        \"Informs the readline callback interface that a character is ready for input\"\n    ],\n    \"readline_clear_history\": [\n        \"bool readline_clear_history(void)\",\n        \"Clears the history\"\n    ],\n    \"readline_completion_function\": [\n        \"bool readline_completion_function(string funcname)\",\n        \"Readline completion function?\"\n    ],\n    \"readline_info\": [\n        \"mixed readline_info([string varname [, string newvalue]])\",\n        \"Gets/sets various internal readline variables.\"\n    ],\n    \"readline_list_history\": [\n        \"array readline_list_history(void)\",\n        \"Lists the history\"\n    ],\n    \"readline_on_new_line\": [\n        \"void readline_on_new_line(void)\",\n        \"Inform readline that the cursor has moved to a new line\"\n    ],\n    \"readline_read_history\": [\n        \"bool readline_read_history([string filename])\",\n        \"Reads the history\"\n    ],\n    \"readline_redisplay\": [\n        \"void readline_redisplay(void)\",\n        \"Ask readline to redraw the display\"\n    ],\n    \"readline_write_history\": [\n        \"bool readline_write_history([string filename])\",\n        \"Writes the history\"\n    ],\n    \"readlink\": [\n        \"string readlink(string filename)\",\n        \"Return the target of a symbolic link\"\n    ],\n    \"realpath\": [\n        \"string realpath(string path)\",\n        \"Return the resolved path\"\n    ],\n    \"realpath_cache_get\": [\n        \"bool realpath_cache_get()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"realpath_cache_size\": [\n        \"bool realpath_cache_size()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"recode_file\": [\n        \"bool recode_file(string request, resource input, resource output)\",\n        \"Recode file input into file output according to request\"\n    ],\n    \"recode_string\": [\n        \"string recode_string(string request, string str)\",\n        \"Recode string str according to request string\"\n    ],\n    \"register_shutdown_function\": [\n        \"void register_shutdown_function(string function_name)\",\n        \"Register a user-level function to be called on request termination\"\n    ],\n    \"register_tick_function\": [\n        \"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\n        \"Registers a tick callback function\"\n    ],\n    \"rename\": [\n        \"bool rename(string old_name, string new_name[, resource context])\",\n        \"Rename a file\"\n    ],\n    \"require\": [\n        \"bool require(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"require_once\": [\n        \"bool require_once(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"reset\": [\n        \"mixed reset(array array_arg)\",\n        \"Set array argument's internal pointer to the first element and return it\"\n    ],\n    \"restore_error_handler\": [\n        \"void restore_error_handler(void)\",\n        \"Restores the previously defined error handler function\"\n    ],\n    \"restore_exception_handler\": [\n        \"void restore_exception_handler(void)\",\n        \"Restores the previously defined exception handler function\"\n    ],\n    \"restore_include_path\": [\n        \"void restore_include_path()\",\n        \"Restore the value of the include_path configuration option\"\n    ],\n    \"rewind\": [\n        \"bool rewind(resource fp)\",\n        \"Rewind the position of a file pointer\"\n    ],\n    \"rewinddir\": [\n        \"void rewinddir([resource dir_handle])\",\n        \"Rewind dir_handle back to the start\"\n    ],\n    \"rmdir\": [\n        \"bool rmdir(string dirname[, resource context])\",\n        \"Remove a directory\"\n    ],\n    \"round\": [\n        \"float round(float number [, int precision [, int mode]])\",\n        \"Returns the number rounded to specified precision\"\n    ],\n    \"rsort\": [\n        \"bool rsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order\"\n    ],\n    \"rtrim\": [\n        \"string rtrim(string str [, string character_mask])\",\n        \"Removes trailing whitespace\"\n    ],\n    \"scandir\": [\n        \"array scandir(string dir [, int sorting_order [, resource context]])\",\n        \"List files & directories inside the specified path\"\n    ],\n    \"sem_acquire\": [\n        \"bool sem_acquire(resource id)\",\n        \"Acquires the semaphore with the given id, blocking if necessary\"\n    ],\n    \"sem_get\": [\n        \"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\n        \"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"\n    ],\n    \"sem_release\": [\n        \"bool sem_release(resource id)\",\n        \"Releases the semaphore with the given id\"\n    ],\n    \"sem_remove\": [\n        \"bool sem_remove(resource id)\",\n        \"Removes semaphore from Unix systems\"\n    ],\n    \"serialize\": [\n        \"string serialize(mixed variable)\",\n        \"Returns a string representation of variable (which can later be unserialized)\"\n    ],\n    \"session_cache_expire\": [\n        \"int session_cache_expire([int new_cache_expire])\",\n        \"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"\n    ],\n    \"session_cache_limiter\": [\n        \"string session_cache_limiter([string new_cache_limiter])\",\n        \"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"\n    ],\n    \"session_decode\": [\n        \"bool session_decode(string data)\",\n        \"Deserializes data and reinitializes the variables\"\n    ],\n    \"session_destroy\": [\n        \"bool session_destroy(void)\",\n        \"Destroy the current session and all data associated with it\"\n    ],\n    \"session_encode\": [\n        \"string session_encode(void)\",\n        \"Serializes the current setup and returns the serialized representation\"\n    ],\n    \"session_get_cookie_params\": [\n        \"array session_get_cookie_params(void)\",\n        \"Return the session cookie parameters\"\n    ],\n    \"session_id\": [\n        \"string session_id([string newid])\",\n        \"Return the current session id. If newid is given, the session id is replaced with newid\"\n    ],\n    \"session_is_registered\": [\n        \"bool session_is_registered(string varname)\",\n        \"Checks if a variable is registered in session\"\n    ],\n    \"session_module_name\": [\n        \"string session_module_name([string newname])\",\n        \"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"\n    ],\n    \"session_name\": [\n        \"string session_name([string newname])\",\n        \"Return the current session name. If newname is given, the session name is replaced with newname\"\n    ],\n    \"session_regenerate_id\": [\n        \"bool session_regenerate_id([bool delete_old_session])\",\n        \"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"\n    ],\n    \"session_register\": [\n        \"bool session_register(mixed var_names [, mixed ...])\",\n        \"Adds varname(s) to the list of variables which are freezed at the session end\"\n    ],\n    \"session_save_path\": [\n        \"string session_save_path([string newname])\",\n        \"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"\n    ],\n    \"session_set_cookie_params\": [\n        \"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\n        \"Set session cookie parameters\"\n    ],\n    \"session_set_save_handler\": [\n        \"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\n        \"Sets user-level functions\"\n    ],\n    \"session_start\": [\n        \"bool session_start(void)\",\n        \"Begin session - reinitializes freezed variables, registers browsers etc\"\n    ],\n    \"session_unregister\": [\n        \"bool session_unregister(string varname)\",\n        \"Removes varname from the list of variables which are freezed at the session end\"\n    ],\n    \"session_unset\": [\n        \"void session_unset(void)\",\n        \"Unset all registered variables\"\n    ],\n    \"session_write_close\": [\n        \"void session_write_close(void)\",\n        \"Write session data and end session\"\n    ],\n    \"set_error_handler\": [\n        \"string set_error_handler(string error_handler [, int error_types])\",\n        \"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"\n    ],\n    \"set_exception_handler\": [\n        \"string set_exception_handler(callable exception_handler)\",\n        \"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"\n    ],\n    \"set_include_path\": [\n        \"string set_include_path(string new_include_path)\",\n        \"Sets the include_path configuration option\"\n    ],\n    \"set_magic_quotes_runtime\": [\n        \"bool set_magic_quotes_runtime(int new_setting)\",\n        \"Set the current active configuration setting of magic_quotes_runtime and return previous\"\n    ],\n    \"set_time_limit\": [\n        \"bool set_time_limit(int seconds)\",\n        \"Sets the maximum time a script can run\"\n    ],\n    \"setcookie\": [\n        \"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie\"\n    ],\n    \"setlocale\": [\n        \"string setlocale(mixed category, string locale [, string ...])\",\n        \"Set locale information\"\n    ],\n    \"setrawcookie\": [\n        \"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie with no url encoding of the value\"\n    ],\n    \"settype\": [\n        \"bool settype(mixed var, string type)\",\n        \"Set the type of the variable\"\n    ],\n    \"sha1\": [\n        \"string sha1(string str [, bool raw_output])\",\n        \"Calculate the sha1 hash of a string\"\n    ],\n    \"sha1_file\": [\n        \"string sha1_file(string filename [, bool raw_output])\",\n        \"Calculate the sha1 hash of given filename\"\n    ],\n    \"shell_exec\": [\n        \"string shell_exec(string cmd)\",\n        \"Execute command via shell and return complete output as string\"\n    ],\n    \"shm_attach\": [\n        \"int shm_attach(int key [, int memsize [, int perm]])\",\n        \"Creates or open a shared memory segment\"\n    ],\n    \"shm_detach\": [\n        \"bool shm_detach(resource shm_identifier)\",\n        \"Disconnects from shared memory segment\"\n    ],\n    \"shm_get_var\": [\n        \"mixed shm_get_var(resource id, int variable_key)\",\n        \"Returns a variable from shared memory\"\n    ],\n    \"shm_has_var\": [\n        \"bool shm_has_var(resource id, int variable_key)\",\n        \"Checks whether a specific entry exists\"\n    ],\n    \"shm_put_var\": [\n        \"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\n        \"Inserts or updates a variable in shared memory\"\n    ],\n    \"shm_remove\": [\n        \"bool shm_remove(resource shm_identifier)\",\n        \"Removes shared memory from Unix systems\"\n    ],\n    \"shm_remove_var\": [\n        \"bool shm_remove_var(resource id, int variable_key)\",\n        \"Removes variable from shared memory\"\n    ],\n    \"shmop_close\": [\n        \"void shmop_close (int shmid)\",\n        \"closes a shared memory segment\"\n    ],\n    \"shmop_delete\": [\n        \"bool shmop_delete (int shmid)\",\n        \"mark segment for deletion\"\n    ],\n    \"shmop_open\": [\n        \"int shmop_open (int key, string flags, int mode, int size)\",\n        \"gets and attaches a shared memory segment\"\n    ],\n    \"shmop_read\": [\n        \"string shmop_read (int shmid, int start, int count)\",\n        \"reads from a shm segment\"\n    ],\n    \"shmop_size\": [\n        \"int shmop_size (int shmid)\",\n        \"returns the shm size\"\n    ],\n    \"shmop_write\": [\n        \"int shmop_write (int shmid, string data, int offset)\",\n        \"writes to a shared memory segment\"\n    ],\n    \"shuffle\": [\n        \"bool shuffle(array array_arg)\",\n        \"Randomly shuffle the contents of an array\"\n    ],\n    \"similar_text\": [\n        \"int similar_text(string str1, string str2 [, float percent])\",\n        \"Calculates the similarity between two strings\"\n    ],\n    \"simplexml_import_dom\": [\n        \"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"simplexml_load_file\": [\n        \"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a filename and return a simplexml_element object to allow for processing\"\n    ],\n    \"simplexml_load_string\": [\n        \"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a string and return a simplexml_element object to allow for processing\"\n    ],\n    \"sin\": [\n        \"float sin(float number)\",\n        \"Returns the sine of the number in radians\"\n    ],\n    \"sinh\": [\n        \"float sinh(float number)\",\n        \"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"\n    ],\n    \"sleep\": [\n        \"void sleep(int seconds)\",\n        \"Delay for a given number of seconds\"\n    ],\n    \"smfi_addheader\": [\n        \"bool smfi_addheader(string headerf, string headerv)\",\n        \"Adds a header to the current message.\"\n    ],\n    \"smfi_addrcpt\": [\n        \"bool smfi_addrcpt(string rcpt)\",\n        \"Add a recipient to the message envelope.\"\n    ],\n    \"smfi_chgheader\": [\n        \"bool smfi_chgheader(string headerf, string headerv)\",\n        \"Changes a header's value for the current message.\"\n    ],\n    \"smfi_delrcpt\": [\n        \"bool smfi_delrcpt(string rcpt)\",\n        \"Removes the named recipient from the current message's envelope.\"\n    ],\n    \"smfi_getsymval\": [\n        \"string smfi_getsymval(string macro)\",\n        \"Returns the value of the given macro or NULL if the macro is not defined.\"\n    ],\n    \"smfi_replacebody\": [\n        \"bool smfi_replacebody(string body)\",\n        \"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"\n    ],\n    \"smfi_setflags\": [\n        \"void smfi_setflags(long flags)\",\n        \"Sets the flags describing the actions the filter may take.\"\n    ],\n    \"smfi_setreply\": [\n        \"bool smfi_setreply(string rcode, string xcode, string message)\",\n        \"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"\n    ],\n    \"smfi_settimeout\": [\n        \"void smfi_settimeout(long timeout)\",\n        \"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"\n    ],\n    \"snmp2_get\": [\n        \"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_getnext\": [\n        \"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_real_walk\": [\n        \"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp2_set\": [\n        \"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmp2_walk\": [\n        \"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"snmp3_get\": [\n        \"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_getnext\": [\n        \"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_real_walk\": [\n        \"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_set\": [\n        \"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_walk\": [\n        \"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp_get_quick_print\": [\n        \"bool snmp_get_quick_print(void)\",\n        \"Return the current status of quick_print\"\n    ],\n    \"snmp_get_valueretrieval\": [\n        \"int snmp_get_valueretrieval()\",\n        \"Return the method how the SNMP values will be returned\"\n    ],\n    \"snmp_read_mib\": [\n        \"int snmp_read_mib(string filename)\",\n        \"Reads and parses a MIB file into the active MIB tree.\"\n    ],\n    \"snmp_set_enum_print\": [\n        \"void snmp_set_enum_print(int enum_print)\",\n        \"Return all values that are enums with their enum value instead of the raw integer\"\n    ],\n    \"snmp_set_oid_output_format\": [\n        \"void snmp_set_oid_output_format(int oid_format)\",\n        \"Set the OID output format.\"\n    ],\n    \"snmp_set_quick_print\": [\n        \"void snmp_set_quick_print(int quick_print)\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp_set_valueretrieval\": [\n        \"void snmp_set_valueretrieval(int method)\",\n        \"Specify the method how the SNMP values will be returned\"\n    ],\n    \"snmpget\": [\n        \"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmpgetnext\": [\n        \"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmprealwalk\": [\n        \"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmpset\": [\n        \"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmpwalk\": [\n        \"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"socket_accept\": [\n        \"resource socket_accept(resource socket)\",\n        \"Accepts a connection on the listening socket fd\"\n    ],\n    \"socket_bind\": [\n        \"bool socket_bind(resource socket, string addr [, int port])\",\n        \"Binds an open socket to a listening port, port is only specified in AF_INET family.\"\n    ],\n    \"socket_clear_error\": [\n        \"void socket_clear_error([resource socket])\",\n        \"Clears the error on the socket or the last error code.\"\n    ],\n    \"socket_close\": [\n        \"void socket_close(resource socket)\",\n        \"Closes a file descriptor\"\n    ],\n    \"socket_connect\": [\n        \"bool socket_connect(resource socket, string addr [, int port])\",\n        \"Opens a connection to addr:port on the socket specified by socket\"\n    ],\n    \"socket_create\": [\n        \"resource socket_create(int domain, int type, int protocol)\",\n        \"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"\n    ],\n    \"socket_create_listen\": [\n        \"resource socket_create_listen(int port[, int backlog])\",\n        \"Opens a socket on port to accept connections\"\n    ],\n    \"socket_create_pair\": [\n        \"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\n        \"Creates a pair of indistinguishable sockets and stores them in fds.\"\n    ],\n    \"socket_get_option\": [\n        \"mixed socket_get_option(resource socket, int level, int optname)\",\n        \"Gets socket options for the socket\"\n    ],\n    \"socket_getpeername\": [\n        \"bool socket_getpeername(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_getsockname\": [\n        \"bool socket_getsockname(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_last_error\": [\n        \"int socket_last_error([resource socket])\",\n        \"Returns the last socket error (either the last used or the provided socket resource)\"\n    ],\n    \"socket_listen\": [\n        \"bool socket_listen(resource socket[, int backlog])\",\n        \"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"\n    ],\n    \"socket_read\": [\n        \"string socket_read(resource socket, int length [, int type])\",\n        \"Reads a maximum of length bytes from socket\"\n    ],\n    \"socket_recv\": [\n        \"int socket_recv(resource socket, string &buf, int len, int flags)\",\n        \"Receives data from a connected socket\"\n    ],\n    \"socket_recvfrom\": [\n        \"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\n        \"Receives data from a socket, connected or not\"\n    ],\n    \"socket_select\": [\n        \"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"socket_send\": [\n        \"int socket_send(resource socket, string buf, int len, int flags)\",\n        \"Sends data to a connected socket\"\n    ],\n    \"socket_sendto\": [\n        \"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\n        \"Sends a message to a socket, whether it is connected or not\"\n    ],\n    \"socket_set_block\": [\n        \"bool socket_set_block(resource socket)\",\n        \"Sets blocking mode on a socket resource\"\n    ],\n    \"socket_set_nonblock\": [\n        \"bool socket_set_nonblock(resource socket)\",\n        \"Sets nonblocking mode on a socket resource\"\n    ],\n    \"socket_set_option\": [\n        \"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\n        \"Sets socket options for the socket\"\n    ],\n    \"socket_shutdown\": [\n        \"bool socket_shutdown(resource socket[, int how])\",\n        \"Shuts down a socket for receiving, sending, or both.\"\n    ],\n    \"socket_strerror\": [\n        \"string socket_strerror(int errno)\",\n        \"Returns a string describing an error\"\n    ],\n    \"socket_write\": [\n        \"int socket_write(resource socket, string buf[, int length])\",\n        \"Writes the buffer to the socket resource, length is optional\"\n    ],\n    \"solid_fetch_prev\": [\n        \"bool solid_fetch_prev(resource result_id)\",\n        \"\"\n    ],\n    \"sort\": [\n        \"bool sort(array &array_arg [, int sort_flags])\",\n        \"Sort an array\"\n    ],\n    \"soundex\": [\n        \"string soundex(string str)\",\n        \"Calculate the soundex key of a string\"\n    ],\n    \"spl_autoload\": [\n        \"void spl_autoload(string class_name [, string file_extensions])\",\n        \"Default implementation for __autoload()\"\n    ],\n    \"spl_autoload_call\": [\n        \"void spl_autoload_call(string class_name)\",\n        \"Try all registerd autoload function to load the requested class\"\n    ],\n    \"spl_autoload_extensions\": [\n        \"string spl_autoload_extensions([string file_extensions])\",\n        \"Register and return default file extensions for spl_autoload\"\n    ],\n    \"spl_autoload_functions\": [\n        \"false|array spl_autoload_functions()\",\n        \"Return all registered __autoload() functionns\"\n    ],\n    \"spl_autoload_register\": [\n        \"bool spl_autoload_register([mixed autoload_function = \\\"spl_autoload\\\" [, throw = true [, prepend]]])\",\n        \"Register given function as __autoload() implementation\"\n    ],\n    \"spl_autoload_unregister\": [\n        \"bool spl_autoload_unregister(mixed autoload_function)\",\n        \"Unregister given function as __autoload() implementation\"\n    ],\n    \"spl_classes\": [\n        \"array spl_classes()\",\n        \"Return an array containing the names of all clsses and interfaces defined in SPL\"\n    ],\n    \"spl_object_hash\": [\n        \"string spl_object_hash(object obj)\",\n        \"Return hash id for given object\"\n    ],\n    \"split\": [\n        \"array split(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression\"\n    ],\n    \"spliti\": [\n        \"array spliti(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression case-insensitive\"\n    ],\n    \"sprintf\": [\n        \"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Return a formatted string\"\n    ],\n    \"sql_regcase\": [\n        \"string sql_regcase(string string)\",\n        \"Make regular expression for case insensitive match\"\n    ],\n    \"sqlite_array_query\": [\n        \"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\n        \"Executes a query against a given database and returns an array of arrays.\"\n    ],\n    \"sqlite_busy_timeout\": [\n        \"void sqlite_busy_timeout(resource db, int ms)\",\n        \"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"\n    ],\n    \"sqlite_changes\": [\n        \"int sqlite_changes(resource db)\",\n        \"Returns the number of rows that were changed by the most recent SQL statement.\"\n    ],\n    \"sqlite_close\": [\n        \"void sqlite_close(resource db)\",\n        \"Closes an open sqlite database.\"\n    ],\n    \"sqlite_column\": [\n        \"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\n        \"Fetches a column from the current row of a result set.\"\n    ],\n    \"sqlite_create_aggregate\": [\n        \"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\n        \"Registers an aggregate function for queries.\"\n    ],\n    \"sqlite_create_function\": [\n        \"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",\n        \"Registers a \\\"regular\\\" function for queries.\"\n    ],\n    \"sqlite_current\": [\n        \"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the current row from a result set as an array.\"\n    ],\n    \"sqlite_error_string\": [\n        \"string sqlite_error_string(int error_code)\",\n        \"Returns the textual description of an error code.\"\n    ],\n    \"sqlite_escape_string\": [\n        \"string sqlite_escape_string(string item)\",\n        \"Escapes a string for use as a query parameter.\"\n    ],\n    \"sqlite_exec\": [\n        \"boolean sqlite_exec(string query, resource db[, string &error_message])\",\n        \"Executes a result-less query against a given database\"\n    ],\n    \"sqlite_factory\": [\n        \"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_fetch_all\": [\n        \"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches all rows from a result set as an array of arrays.\"\n    ],\n    \"sqlite_fetch_array\": [\n        \"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the next row from a result set as an array.\"\n    ],\n    \"sqlite_fetch_column_types\": [\n        \"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\n        \"Return an array of column types from a particular table.\"\n    ],\n    \"sqlite_fetch_object\": [\n        \"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\n        \"Fetches the next row from a result set as an object.\"\n    ],\n    \"sqlite_fetch_single\": [\n        \"string sqlite_fetch_single(resource result [, bool decode_binary])\",\n        \"Fetches the first column of a result set as a string.\"\n    ],\n    \"sqlite_field_name\": [\n        \"string sqlite_field_name(resource result, int field_index)\",\n        \"Returns the name of a particular field of a result set.\"\n    ],\n    \"sqlite_has_prev\": [\n        \"bool sqlite_has_prev(resource result)\",\n        \"* Returns whether a previous row is available.\"\n    ],\n    \"sqlite_key\": [\n        \"int sqlite_key(resource result)\",\n        \"Return the current row index of a buffered result.\"\n    ],\n    \"sqlite_last_error\": [\n        \"int sqlite_last_error(resource db)\",\n        \"Returns the error code of the last error for a database.\"\n    ],\n    \"sqlite_last_insert_rowid\": [\n        \"int sqlite_last_insert_rowid(resource db)\",\n        \"Returns the rowid of the most recently inserted row.\"\n    ],\n    \"sqlite_libencoding\": [\n        \"string sqlite_libencoding()\",\n        \"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"\n    ],\n    \"sqlite_libversion\": [\n        \"string sqlite_libversion()\",\n        \"Returns the version of the linked SQLite library.\"\n    ],\n    \"sqlite_next\": [\n        \"bool sqlite_next(resource result)\",\n        \"Seek to the next row number of a result set.\"\n    ],\n    \"sqlite_num_fields\": [\n        \"int sqlite_num_fields(resource result)\",\n        \"Returns the number of fields in a result set.\"\n    ],\n    \"sqlite_num_rows\": [\n        \"int sqlite_num_rows(resource result)\",\n        \"Returns the number of rows in a buffered result set.\"\n    ],\n    \"sqlite_open\": [\n        \"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_popen\": [\n        \"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\n        \"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_prev\": [\n        \"bool sqlite_prev(resource result)\",\n        \"* Seek to the previous row number of a result set.\"\n    ],\n    \"sqlite_query\": [\n        \"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\n        \"Executes a query against a given database and returns a result handle.\"\n    ],\n    \"sqlite_rewind\": [\n        \"bool sqlite_rewind(resource result)\",\n        \"Seek to the first row number of a buffered result set.\"\n    ],\n    \"sqlite_seek\": [\n        \"bool sqlite_seek(resource result, int row)\",\n        \"Seek to a particular row number of a buffered result set.\"\n    ],\n    \"sqlite_single_query\": [\n        \"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\n        \"Executes a query and returns either an array for one single column or the value of the first row.\"\n    ],\n    \"sqlite_udf_decode_binary\": [\n        \"string sqlite_udf_decode_binary(string data)\",\n        \"Decode binary encoding on a string parameter passed to an UDF.\"\n    ],\n    \"sqlite_udf_encode_binary\": [\n        \"string sqlite_udf_encode_binary(string data)\",\n        \"Apply binary encoding (if required) to a string to return from an UDF.\"\n    ],\n    \"sqlite_unbuffered_query\": [\n        \"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\n        \"Executes a query that does not prefetch and buffer all data.\"\n    ],\n    \"sqlite_valid\": [\n        \"bool sqlite_valid(resource result)\",\n        \"Returns whether more rows are available.\"\n    ],\n    \"sqrt\": [\n        \"float sqrt(float number)\",\n        \"Returns the square root of the number\"\n    ],\n    \"srand\": [\n        \"void srand([int seed])\",\n        \"Seeds random number generator\"\n    ],\n    \"sscanf\": [\n        \"mixed sscanf(string str, string format [, string ...])\",\n        \"Implements an ANSI C compatible sscanf\"\n    ],\n    \"stat\": [\n        \"array stat(string filename)\",\n        \"Give information about a file\"\n    ],\n    \"str_getcsv\": [\n        \"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\n        \"Parse a CSV string into an array\"\n    ],\n    \"str_ireplace\": [\n        \"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace / case-insensitive\"\n    ],\n    \"str_pad\": [\n        \"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\n        \"Returns input string padded on the left or right to specified length with pad_string\"\n    ],\n    \"str_repeat\": [\n        \"string str_repeat(string input, int mult)\",\n        \"Returns the input string repeat mult times\"\n    ],\n    \"str_replace\": [\n        \"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace\"\n    ],\n    \"str_rot13\": [\n        \"string str_rot13(string str)\",\n        \"Perform the rot13 transform on a string\"\n    ],\n    \"str_shuffle\": [\n        \"void str_shuffle(string str)\",\n        \"Shuffles string. One permutation of all possible is created\"\n    ],\n    \"str_split\": [\n        \"array str_split(string str [, int split_length])\",\n        \"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"\n    ],\n    \"str_word_count\": [\n        \"mixed str_word_count(string str, [int format [, string charlist]])\",\n        \"Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, 'word' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \\\"'\\\" and \\\"-\\\" characters.\"\n    ],\n    \"strcasecmp\": [\n        \"int strcasecmp(string str1, string str2)\",\n        \"Binary safe case-insensitive string comparison\"\n    ],\n    \"strchr\": [\n        \"string strchr(string haystack, string needle)\",\n        \"An alias for strstr\"\n    ],\n    \"strcmp\": [\n        \"int strcmp(string str1, string str2)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strcoll\": [\n        \"int strcoll(string str1, string str2)\",\n        \"Compares two strings using the current locale\"\n    ],\n    \"strcspn\": [\n        \"int strcspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"\n    ],\n    \"stream_bucket_append\": [\n        \"void stream_bucket_append(resource brigade, resource bucket)\",\n        \"Append bucket to brigade\"\n    ],\n    \"stream_bucket_make_writeable\": [\n        \"object stream_bucket_make_writeable(resource brigade)\",\n        \"Return a bucket object from the brigade for operating on\"\n    ],\n    \"stream_bucket_new\": [\n        \"resource stream_bucket_new(resource stream, string buffer)\",\n        \"Create a new bucket for use on the current stream\"\n    ],\n    \"stream_bucket_prepend\": [\n        \"void stream_bucket_prepend(resource brigade, resource bucket)\",\n        \"Prepend bucket to brigade\"\n    ],\n    \"stream_context_create\": [\n        \"resource stream_context_create([array options[, array params]])\",\n        \"Create a file context and optionally set parameters\"\n    ],\n    \"stream_context_get_default\": [\n        \"resource stream_context_get_default([array options])\",\n        \"Get a handle on the default file/stream context and optionally set parameters\"\n    ],\n    \"stream_context_get_options\": [\n        \"array stream_context_get_options(resource context|resource stream)\",\n        \"Retrieve options for a stream/wrapper/context\"\n    ],\n    \"stream_context_get_params\": [\n        \"array stream_context_get_params(resource context|resource stream)\",\n        \"Get parameters of a file context\"\n    ],\n    \"stream_context_set_default\": [\n        \"resource stream_context_set_default(array options)\",\n        \"Set default file/stream context, returns the context as a resource\"\n    ],\n    \"stream_context_set_option\": [\n        \"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\n        \"Set an option for a wrapper\"\n    ],\n    \"stream_context_set_params\": [\n        \"bool stream_context_set_params(resource context|resource stream, array options)\",\n        \"Set parameters for a file context\"\n    ],\n    \"stream_copy_to_stream\": [\n        \"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\n        \"Reads up to maxlen bytes from source stream and writes them to dest stream.\"\n    ],\n    \"stream_filter_append\": [\n        \"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Append a filter to a stream\"\n    ],\n    \"stream_filter_prepend\": [\n        \"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Prepend a filter to a stream\"\n    ],\n    \"stream_filter_register\": [\n        \"bool stream_filter_register(string filtername, string classname)\",\n        \"Registers a custom filter handler class\"\n    ],\n    \"stream_filter_remove\": [\n        \"bool stream_filter_remove(resource stream_filter)\",\n        \"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"\n    ],\n    \"stream_get_contents\": [\n        \"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\n        \"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"\n    ],\n    \"stream_get_filters\": [\n        \"array stream_get_filters(void)\",\n        \"Returns a list of registered filters\"\n    ],\n    \"stream_get_line\": [\n        \"string stream_get_line(resource stream, int maxlen [, string ending])\",\n        \"Read up to maxlen bytes from a stream or until the ending string is found\"\n    ],\n    \"stream_get_meta_data\": [\n        \"array stream_get_meta_data(resource fp)\",\n        \"Retrieves header/meta data from streams/file pointers\"\n    ],\n    \"stream_get_transports\": [\n        \"array stream_get_transports()\",\n        \"Retrieves list of registered socket transports\"\n    ],\n    \"stream_get_wrappers\": [\n        \"array stream_get_wrappers()\",\n        \"Retrieves list of registered stream wrappers\"\n    ],\n    \"stream_is_local\": [\n        \"bool stream_is_local(resource stream|string url)\",\n        \"\"\n    ],\n    \"stream_resolve_include_path\": [\n        \"string stream_resolve_include_path(string filename)\",\n        \"Determine what file will be opened by calls to fopen() with a relative path\"\n    ],\n    \"stream_select\": [\n        \"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"stream_set_blocking\": [\n        \"bool stream_set_blocking(resource socket, int mode)\",\n        \"Set blocking/non-blocking mode on a socket or stream\"\n    ],\n    \"stream_set_timeout\": [\n        \"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\n        \"Set timeout on stream read to seconds + microseonds\"\n    ],\n    \"stream_set_write_buffer\": [\n        \"int stream_set_write_buffer(resource fp, int buffer)\",\n        \"Set file write buffer\"\n    ],\n    \"stream_socket_accept\": [\n        \"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\n        \"Accept a client connection from a server socket\"\n    ],\n    \"stream_socket_client\": [\n        \"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\n        \"Open a client connection to a remote address\"\n    ],\n    \"stream_socket_enable_crypto\": [\n        \"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\n        \"Enable or disable a specific kind of crypto on the stream\"\n    ],\n    \"stream_socket_get_name\": [\n        \"string stream_socket_get_name(resource stream, bool want_peer)\",\n        \"Returns either the locally bound or remote name for a socket stream\"\n    ],\n    \"stream_socket_pair\": [\n        \"array stream_socket_pair(int domain, int type, int protocol)\",\n        \"Creates a pair of connected, indistinguishable socket streams\"\n    ],\n    \"stream_socket_recvfrom\": [\n        \"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\n        \"Receives data from a socket stream\"\n    ],\n    \"stream_socket_sendto\": [\n        \"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\n        \"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"\n    ],\n    \"stream_socket_server\": [\n        \"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\n        \"Create a server socket bound to localaddress\"\n    ],\n    \"stream_socket_shutdown\": [\n        \"int stream_socket_shutdown(resource stream, int how)\",\n        \"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"\n    ],\n    \"stream_supports_lock\": [\n        \"bool stream_supports_lock(resource stream)\",\n        \"Tells whether the stream supports locking through flock().\"\n    ],\n    \"stream_wrapper_register\": [\n        \"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\n        \"Registers a custom URL protocol handler class\"\n    ],\n    \"stream_wrapper_restore\": [\n        \"bool stream_wrapper_restore(string protocol)\",\n        \"Restore the original protocol handler, overriding if necessary\"\n    ],\n    \"stream_wrapper_unregister\": [\n        \"bool stream_wrapper_unregister(string protocol)\",\n        \"Unregister a wrapper for the life of the current request.\"\n    ],\n    \"strftime\": [\n        \"string strftime(string format [, int timestamp])\",\n        \"Format a local time/date according to locale settings\"\n    ],\n    \"strip_tags\": [\n        \"string strip_tags(string str [, string allowable_tags])\",\n        \"Strips HTML and PHP tags from a string\"\n    ],\n    \"stripcslashes\": [\n        \"string stripcslashes(string str)\",\n        \"Strips backslashes from a string. Uses C-style conventions\"\n    ],\n    \"stripos\": [\n        \"int stripos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"stripslashes\": [\n        \"string stripslashes(string str)\",\n        \"Strips backslashes from a string\"\n    ],\n    \"stristr\": [\n        \"string stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"strlen\": [\n        \"int strlen(string str)\",\n        \"Get string length\"\n    ],\n    \"strnatcasecmp\": [\n        \"int strnatcasecmp(string s1, string s2)\",\n        \"Returns the result of case-insensitive string comparison using 'natural' algorithm\"\n    ],\n    \"strnatcmp\": [\n        \"int strnatcmp(string s1, string s2)\",\n        \"Returns the result of string comparison using 'natural' algorithm\"\n    ],\n    \"strncasecmp\": [\n        \"int strncasecmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strncmp\": [\n        \"int strncmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strpbrk\": [\n        \"array strpbrk(string haystack, string char_list)\",\n        \"Search a string for any of a set of characters\"\n    ],\n    \"strpos\": [\n        \"int strpos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another\"\n    ],\n    \"strptime\": [\n        \"string strptime(string timestamp, string format)\",\n        \"Parse a time/date generated with strftime()\"\n    ],\n    \"strrchr\": [\n        \"string strrchr(string haystack, string needle)\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"strrev\": [\n        \"string strrev(string str)\",\n        \"Reverse a string\"\n    ],\n    \"strripos\": [\n        \"int strripos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strrpos\": [\n        \"int strrpos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strspn\": [\n        \"int strspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"\n    ],\n    \"strstr\": [\n        \"string strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"strtok\": [\n        \"string strtok([string str,] string token)\",\n        \"Tokenize a string\"\n    ],\n    \"strtolower\": [\n        \"string strtolower(string str)\",\n        \"Makes a string lowercase\"\n    ],\n    \"strtotime\": [\n        \"int strtotime(string time [, int now ])\",\n        \"Convert string representation of date and time to a timestamp\"\n    ],\n    \"strtoupper\": [\n        \"string strtoupper(string str)\",\n        \"Makes a string uppercase\"\n    ],\n    \"strtr\": [\n        \"string strtr(string str, string from[, string to])\",\n        \"Translates characters in str using given translation tables\"\n    ],\n    \"strval\": [\n        \"string strval(mixed var)\",\n        \"Get the string value of a variable\"\n    ],\n    \"substr\": [\n        \"string substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"substr_compare\": [\n        \"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\n        \"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"\n    ],\n    \"substr_count\": [\n        \"int substr_count(string haystack, string needle [, int offset [, int length]])\",\n        \"Returns the number of times a substring occurs in the string\"\n    ],\n    \"substr_replace\": [\n        \"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\n        \"Replaces part of a string with another string\"\n    ],\n    \"sybase_affected_rows\": [\n        \"int sybase_affected_rows([resource link_id])\",\n        \"Get number of affected rows in last query\"\n    ],\n    \"sybase_close\": [\n        \"bool sybase_close([resource link_id])\",\n        \"Close Sybase connection\"\n    ],\n    \"sybase_connect\": [\n        \"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\n        \"Open Sybase server connection\"\n    ],\n    \"sybase_data_seek\": [\n        \"bool sybase_data_seek(resource result, int offset)\",\n        \"Move internal row pointer\"\n    ],\n    \"sybase_deadlock_retry_count\": [\n        \"void sybase_deadlock_retry_count(int retry_count)\",\n        \"Sets deadlock retry count\"\n    ],\n    \"sybase_fetch_array\": [\n        \"array sybase_fetch_array(resource result)\",\n        \"Fetch row as array\"\n    ],\n    \"sybase_fetch_assoc\": [\n        \"array sybase_fetch_assoc(resource result)\",\n        \"Fetch row as array without numberic indices\"\n    ],\n    \"sybase_fetch_field\": [\n        \"object sybase_fetch_field(resource result [, int offset])\",\n        \"Get field information\"\n    ],\n    \"sybase_fetch_object\": [\n        \"object sybase_fetch_object(resource result [, mixed object])\",\n        \"Fetch row as object\"\n    ],\n    \"sybase_fetch_row\": [\n        \"array sybase_fetch_row(resource result)\",\n        \"Get row as enumerated array\"\n    ],\n    \"sybase_field_seek\": [\n        \"bool sybase_field_seek(resource result, int offset)\",\n        \"Set field offset\"\n    ],\n    \"sybase_free_result\": [\n        \"bool sybase_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"sybase_get_last_message\": [\n        \"string sybase_get_last_message(void)\",\n        \"Returns the last message from server (over min_message_severity)\"\n    ],\n    \"sybase_min_client_severity\": [\n        \"void sybase_min_client_severity(int severity)\",\n        \"Sets minimum client severity\"\n    ],\n    \"sybase_min_server_severity\": [\n        \"void sybase_min_server_severity(int severity)\",\n        \"Sets minimum server severity\"\n    ],\n    \"sybase_num_fields\": [\n        \"int sybase_num_fields(resource result)\",\n        \"Get number of fields in result\"\n    ],\n    \"sybase_num_rows\": [\n        \"int sybase_num_rows(resource result)\",\n        \"Get number of rows in result\"\n    ],\n    \"sybase_pconnect\": [\n        \"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\n        \"Open persistent Sybase connection\"\n    ],\n    \"sybase_query\": [\n        \"int sybase_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"sybase_result\": [\n        \"string sybase_result(resource result, int row, mixed field)\",\n        \"Get result data\"\n    ],\n    \"sybase_select_db\": [\n        \"bool sybase_select_db(string database [, resource link_id])\",\n        \"Select Sybase database\"\n    ],\n    \"sybase_set_message_handler\": [\n        \"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\n        \"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"\n    ],\n    \"sybase_unbuffered_query\": [\n        \"int sybase_unbuffered_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"symlink\": [\n        \"int symlink(string target, string link)\",\n        \"Create a symbolic link\"\n    ],\n    \"sys_get_temp_dir\": [\n        \"string sys_get_temp_dir()\",\n        \"Returns directory path used for temporary files\"\n    ],\n    \"sys_getloadavg\": [\n        \"array sys_getloadavg()\",\n        \"\"\n    ],\n    \"syslog\": [\n        \"bool syslog(int priority, string message)\",\n        \"Generate a system log message\"\n    ],\n    \"system\": [\n        \"int system(string command [, int &return_value])\",\n        \"Execute an external program and display output\"\n    ],\n    \"tan\": [\n        \"float tan(float number)\",\n        \"Returns the tangent of the number in radians\"\n    ],\n    \"tanh\": [\n        \"float tanh(float number)\",\n        \"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"\n    ],\n    \"tempnam\": [\n        \"string tempnam(string dir, string prefix)\",\n        \"Create a unique filename in a directory\"\n    ],\n    \"textdomain\": [\n        \"string textdomain(string domain)\",\n        \"Set the textdomain to \\\"domain\\\". Returns the current domain\"\n    ],\n    \"tidy_access_count\": [\n        \"int tidy_access_count()\",\n        \"Returns the Number of Tidy accessibility warnings encountered for specified document.\"\n    ],\n    \"tidy_clean_repair\": [\n        \"boolean tidy_clean_repair()\",\n        \"Execute configured cleanup and repair operations on parsed markup\"\n    ],\n    \"tidy_config_count\": [\n        \"int tidy_config_count()\",\n        \"Returns the Number of Tidy configuration errors encountered for specified document.\"\n    ],\n    \"tidy_diagnose\": [\n        \"boolean tidy_diagnose()\",\n        \"Run configured diagnostics on parsed and repaired markup.\"\n    ],\n    \"tidy_error_count\": [\n        \"int tidy_error_count()\",\n        \"Returns the Number of Tidy errors encountered for specified document.\"\n    ],\n    \"tidy_get_body\": [\n        \"TidyNode tidy_get_body(resource tidy)\",\n        \"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_config\": [\n        \"array tidy_get_config()\",\n        \"Get current Tidy configuarion\"\n    ],\n    \"tidy_get_error_buffer\": [\n        \"string tidy_get_error_buffer([boolean detailed])\",\n        \"Return warnings and errors which occured parsing the specified document\"\n    ],\n    \"tidy_get_head\": [\n        \"TidyNode tidy_get_head()\",\n        \"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html\": [\n        \"TidyNode tidy_get_html()\",\n        \"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html_ver\": [\n        \"int tidy_get_html_ver()\",\n        \"Get the Detected HTML version for the specified document.\"\n    ],\n    \"tidy_get_opt_doc\": [\n        \"string tidy_get_opt_doc(tidy resource, string optname)\",\n        \"Returns the documentation for the given option name\"\n    ],\n    \"tidy_get_output\": [\n        \"string tidy_get_output()\",\n        \"Return a string representing the parsed tidy markup\"\n    ],\n    \"tidy_get_release\": [\n        \"string tidy_get_release()\",\n        \"Get release date (version) for Tidy library\"\n    ],\n    \"tidy_get_root\": [\n        \"TidyNode tidy_get_root()\",\n        \"Returns a TidyNode Object representing the root of the tidy parse tree\"\n    ],\n    \"tidy_get_status\": [\n        \"int tidy_get_status()\",\n        \"Get status of specfied document.\"\n    ],\n    \"tidy_getopt\": [\n        \"mixed tidy_getopt(string option)\",\n        \"Returns the value of the specified configuration option for the tidy document.\"\n    ],\n    \"tidy_is_xhtml\": [\n        \"boolean tidy_is_xhtml()\",\n        \"Indicates if the document is a XHTML document.\"\n    ],\n    \"tidy_is_xml\": [\n        \"boolean tidy_is_xml()\",\n        \"Indicates if the document is a generic (non HTML/XHTML) XML document.\"\n    ],\n    \"tidy_parse_file\": [\n        \"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\n        \"Parse markup in file or URI\"\n    ],\n    \"tidy_parse_string\": [\n        \"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\n        \"Parse a document stored in a string\"\n    ],\n    \"tidy_repair_file\": [\n        \"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\n        \"Repair a file using an optionally provided configuration file\"\n    ],\n    \"tidy_repair_string\": [\n        \"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\n        \"Repair a string using an optionally provided configuration file\"\n    ],\n    \"tidy_warning_count\": [\n        \"int tidy_warning_count()\",\n        \"Returns the Number of Tidy warnings encountered for specified document.\"\n    ],\n    \"time\": [\n        \"int time(void)\",\n        \"Return current UNIX timestamp\"\n    ],\n    \"time_nanosleep\": [\n        \"mixed time_nanosleep(long seconds, long nanoseconds)\",\n        \"Delay for a number of seconds and nano seconds\"\n    ],\n    \"time_sleep_until\": [\n        \"mixed time_sleep_until(float timestamp)\",\n        \"Make the script sleep until the specified time\"\n    ],\n    \"timezone_abbreviations_list\": [\n        \"array timezone_abbreviations_list()\",\n        \"Returns associative array containing dst, offset and the timezone name\"\n    ],\n    \"timezone_identifiers_list\": [\n        \"array timezone_identifiers_list([long what[, string country]])\",\n        \"Returns numerically index array with all timezone identifiers.\"\n    ],\n    \"timezone_location_get\": [\n        \"array timezone_location_get()\",\n        \"Returns location information for a timezone, including country code, latitude/longitude and comments\"\n    ],\n    \"timezone_name_from_abbr\": [\n        \"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\n        \"Returns the timezone name from abbrevation\"\n    ],\n    \"timezone_name_get\": [\n        \"string timezone_name_get(DateTimeZone object)\",\n        \"Returns the name of the timezone.\"\n    ],\n    \"timezone_offset_get\": [\n        \"long timezone_offset_get(DateTimeZone object, DateTime object)\",\n        \"Returns the timezone offset.\"\n    ],\n    \"timezone_open\": [\n        \"DateTimeZone timezone_open(string timezone)\",\n        \"Returns new DateTimeZone object\"\n    ],\n    \"timezone_transitions_get\": [\n        \"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\n        \"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"\n    ],\n    \"timezone_version_get\": [\n        \"array timezone_version_get()\",\n        \"Returns the Olson database version number.\"\n    ],\n    \"tmpfile\": [\n        \"resource tmpfile(void)\",\n        \"Create a temporary file that will be deleted automatically after use\"\n    ],\n    \"token_get_all\": [\n        \"array token_get_all(string source)\",\n        \"\"\n    ],\n    \"token_name\": [\n        \"string token_name(int type)\",\n        \"\"\n    ],\n    \"touch\": [\n        \"bool touch(string filename [, int time [, int atime]])\",\n        \"Set modification time of file\"\n    ],\n    \"trigger_error\": [\n        \"void trigger_error(string messsage [, int error_type])\",\n        \"Generates a user-level error/warning/notice message\"\n    ],\n    \"trim\": [\n        \"string trim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning and end of a string\"\n    ],\n    \"uasort\": [\n        \"bool uasort(array array_arg, string cmp_function)\",\n        \"Sort an array with a user-defined comparison function and maintain index association\"\n    ],\n    \"ucfirst\": [\n        \"string ucfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"ucwords\": [\n        \"string ucwords(string str)\",\n        \"Uppercase the first character of every word in a string\"\n    ],\n    \"uksort\": [\n        \"bool uksort(array array_arg, string cmp_function)\",\n        \"Sort an array by keys using a user-defined comparison function\"\n    ],\n    \"umask\": [\n        \"int umask([int mask])\",\n        \"Return or change the umask\"\n    ],\n    \"uniqid\": [\n        \"string uniqid([string prefix [, bool more_entropy]])\",\n        \"Generates a unique ID\"\n    ],\n    \"unixtojd\": [\n        \"int unixtojd([int timestamp])\",\n        \"Convert UNIX timestamp to Julian Day\"\n    ],\n    \"unlink\": [\n        \"bool unlink(string filename[, context context])\",\n        \"Delete a file\"\n    ],\n    \"unpack\": [\n        \"array unpack(string format, string input)\",\n        \"Unpack binary string into named array elements according to format argument\"\n    ],\n    \"unregister_tick_function\": [\n        \"void unregister_tick_function(string function_name)\",\n        \"Unregisters a tick callback function\"\n    ],\n    \"unserialize\": [\n        \"mixed unserialize(string variable_representation)\",\n        \"Takes a string representation of variable and recreates it\"\n    ],\n    \"unset\": [\n        \"void unset (mixed var [, mixed var])\",\n        \"Unset a given variable\"\n    ],\n    \"urldecode\": [\n        \"string urldecode(string str)\",\n        \"Decodes URL-encoded string\"\n    ],\n    \"urlencode\": [\n        \"string urlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"usleep\": [\n        \"void usleep(int micro_seconds)\",\n        \"Delay for a given number of micro seconds\"\n    ],\n    \"usort\": [\n        \"bool usort(array array_arg, string cmp_function)\",\n        \"Sort an array by values using a user-defined comparison function\"\n    ],\n    \"utf8_decode\": [\n        \"string utf8_decode(string data)\",\n        \"Converts a UTF-8 encoded string to ISO-8859-1\"\n    ],\n    \"utf8_encode\": [\n        \"string utf8_encode(string data)\",\n        \"Encodes an ISO-8859-1 string to UTF-8\"\n    ],\n    \"var_dump\": [\n        \"void var_dump(mixed var)\",\n        \"Dumps a string representation of variable to output\"\n    ],\n    \"var_export\": [\n        \"mixed var_export(mixed var [, bool return])\",\n        \"Outputs or returns a string representation of a variable\"\n    ],\n    \"variant_abs\": [\n        \"mixed variant_abs(mixed left)\",\n        \"Returns the absolute value of a variant\"\n    ],\n    \"variant_add\": [\n        \"mixed variant_add(mixed left, mixed right)\",\n        \"\\\"Adds\\\" two variant values together and returns the result\"\n    ],\n    \"variant_and\": [\n        \"mixed variant_and(mixed left, mixed right)\",\n        \"performs a bitwise AND operation between two variants and returns the result\"\n    ],\n    \"variant_cast\": [\n        \"object variant_cast(object variant, int type)\",\n        \"Convert a variant into a new variant object of another type\"\n    ],\n    \"variant_cat\": [\n        \"mixed variant_cat(mixed left, mixed right)\",\n        \"concatenates two variant values together and returns the result\"\n    ],\n    \"variant_cmp\": [\n        \"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\n        \"Compares two variants\"\n    ],\n    \"variant_date_from_timestamp\": [\n        \"object variant_date_from_timestamp(int timestamp)\",\n        \"Returns a variant date representation of a unix timestamp\"\n    ],\n    \"variant_date_to_timestamp\": [\n        \"int variant_date_to_timestamp(object variant)\",\n        \"Converts a variant date/time value to unix timestamp\"\n    ],\n    \"variant_div\": [\n        \"mixed variant_div(mixed left, mixed right)\",\n        \"Returns the result from dividing two variants\"\n    ],\n    \"variant_eqv\": [\n        \"mixed variant_eqv(mixed left, mixed right)\",\n        \"Performs a bitwise equivalence on two variants\"\n    ],\n    \"variant_fix\": [\n        \"mixed variant_fix(mixed left)\",\n        \"Returns the integer part ? of a variant\"\n    ],\n    \"variant_get_type\": [\n        \"int variant_get_type(object variant)\",\n        \"Returns the VT_XXX type code for a variant\"\n    ],\n    \"variant_idiv\": [\n        \"mixed variant_idiv(mixed left, mixed right)\",\n        \"Converts variants to integers and then returns the result from dividing them\"\n    ],\n    \"variant_imp\": [\n        \"mixed variant_imp(mixed left, mixed right)\",\n        \"Performs a bitwise implication on two variants\"\n    ],\n    \"variant_int\": [\n        \"mixed variant_int(mixed left)\",\n        \"Returns the integer portion of a variant\"\n    ],\n    \"variant_mod\": [\n        \"mixed variant_mod(mixed left, mixed right)\",\n        \"Divides two variants and returns only the remainder\"\n    ],\n    \"variant_mul\": [\n        \"mixed variant_mul(mixed left, mixed right)\",\n        \"multiplies the values of the two variants and returns the result\"\n    ],\n    \"variant_neg\": [\n        \"mixed variant_neg(mixed left)\",\n        \"Performs logical negation on a variant\"\n    ],\n    \"variant_not\": [\n        \"mixed variant_not(mixed left)\",\n        \"Performs bitwise not negation on a variant\"\n    ],\n    \"variant_or\": [\n        \"mixed variant_or(mixed left, mixed right)\",\n        \"Performs a logical disjunction on two variants\"\n    ],\n    \"variant_pow\": [\n        \"mixed variant_pow(mixed left, mixed right)\",\n        \"Returns the result of performing the power function with two variants\"\n    ],\n    \"variant_round\": [\n        \"mixed variant_round(mixed left, int decimals)\",\n        \"Rounds a variant to the specified number of decimal places\"\n    ],\n    \"variant_set\": [\n        \"void variant_set(object variant, mixed value)\",\n        \"Assigns a new value for a variant object\"\n    ],\n    \"variant_set_type\": [\n        \"void variant_set_type(object variant, int type)\",\n        \"Convert a variant into another type.  Variant is modified \\\"in-place\\\"\"\n    ],\n    \"variant_sub\": [\n        \"mixed variant_sub(mixed left, mixed right)\",\n        \"subtracts the value of the right variant from the left variant value and returns the result\"\n    ],\n    \"variant_xor\": [\n        \"mixed variant_xor(mixed left, mixed right)\",\n        \"Performs a logical exclusion on two variants\"\n    ],\n    \"version_compare\": [\n        \"int version_compare(string ver1, string ver2 [, string oper])\",\n        \"Compares two \\\"PHP-standardized\\\" version number strings\"\n    ],\n    \"vfprintf\": [\n        \"int vfprintf(resource stream, string format, array args)\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"virtual\": [\n        \"bool virtual(string filename)\",\n        \"Perform an Apache sub-request\"\n    ],\n    \"vprintf\": [\n        \"int vprintf(string format, array args)\",\n        \"Output a formatted string\"\n    ],\n    \"vsprintf\": [\n        \"string vsprintf(string format, array args)\",\n        \"Return a formatted string\"\n    ],\n    \"wddx_add_vars\": [\n        \"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\n        \"Serializes given variables and adds them to packet given by packet_id\"\n    ],\n    \"wddx_deserialize\": [\n        \"mixed wddx_deserialize(mixed packet)\",\n        \"Deserializes given packet and returns a PHP value\"\n    ],\n    \"wddx_packet_end\": [\n        \"string wddx_packet_end(resource packet_id)\",\n        \"Ends specified WDDX packet and returns the string containing the packet\"\n    ],\n    \"wddx_packet_start\": [\n        \"resource wddx_packet_start([string comment])\",\n        \"Starts a WDDX packet with optional comment and returns the packet id\"\n    ],\n    \"wddx_serialize_value\": [\n        \"string wddx_serialize_value(mixed var [, string comment])\",\n        \"Creates a new packet and serializes the given value\"\n    ],\n    \"wddx_serialize_vars\": [\n        \"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\n        \"Creates a new packet and serializes given variables into a struct\"\n    ],\n    \"wordwrap\": [\n        \"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\n        \"Wraps buffer to selected number of characters using string break char\"\n    ],\n    \"xml_error_string\": [\n        \"string xml_error_string(int code)\",\n        \"Get XML parser error string\"\n    ],\n    \"xml_get_current_byte_index\": [\n        \"int xml_get_current_byte_index(resource parser)\",\n        \"Get current byte index for an XML parser\"\n    ],\n    \"xml_get_current_column_number\": [\n        \"int xml_get_current_column_number(resource parser)\",\n        \"Get current column number for an XML parser\"\n    ],\n    \"xml_get_current_line_number\": [\n        \"int xml_get_current_line_number(resource parser)\",\n        \"Get current line number for an XML parser\"\n    ],\n    \"xml_get_error_code\": [\n        \"int xml_get_error_code(resource parser)\",\n        \"Get XML parser error code\"\n    ],\n    \"xml_parse\": [\n        \"int xml_parse(resource parser, string data [, int isFinal])\",\n        \"Start parsing an XML document\"\n    ],\n    \"xml_parse_into_struct\": [\n        \"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\n        \"Parsing a XML document\"\n    ],\n    \"xml_parser_create\": [\n        \"resource xml_parser_create([string encoding])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_create_ns\": [\n        \"resource xml_parser_create_ns([string encoding [, string sep]])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_free\": [\n        \"int xml_parser_free(resource parser)\",\n        \"Free an XML parser\"\n    ],\n    \"xml_parser_get_option\": [\n        \"int xml_parser_get_option(resource parser, int option)\",\n        \"Get options from an XML parser\"\n    ],\n    \"xml_parser_set_option\": [\n        \"int xml_parser_set_option(resource parser, int option, mixed value)\",\n        \"Set options in an XML parser\"\n    ],\n    \"xml_set_character_data_handler\": [\n        \"int xml_set_character_data_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_default_handler\": [\n        \"int xml_set_default_handler(resource parser, string hdl)\",\n        \"Set up default handler\"\n    ],\n    \"xml_set_element_handler\": [\n        \"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\n        \"Set up start and end element handlers\"\n    ],\n    \"xml_set_end_namespace_decl_handler\": [\n        \"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_external_entity_ref_handler\": [\n        \"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\n        \"Set up external entity reference handler\"\n    ],\n    \"xml_set_notation_decl_handler\": [\n        \"int xml_set_notation_decl_handler(resource parser, string hdl)\",\n        \"Set up notation declaration handler\"\n    ],\n    \"xml_set_object\": [\n        \"int xml_set_object(resource parser, object &obj)\",\n        \"Set up object which should be used for callbacks\"\n    ],\n    \"xml_set_processing_instruction_handler\": [\n        \"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\n        \"Set up processing instruction (PI) handler\"\n    ],\n    \"xml_set_start_namespace_decl_handler\": [\n        \"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_unparsed_entity_decl_handler\": [\n        \"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\n        \"Set up unparsed entity declaration handler\"\n    ],\n    \"xmlrpc_decode\": [\n        \"array xmlrpc_decode(string xml [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_decode_request\": [\n        \"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_encode\": [\n        \"string xmlrpc_encode(mixed value)\",\n        \"Generates XML for a PHP value\"\n    ],\n    \"xmlrpc_encode_request\": [\n        \"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\n        \"Generates XML for a method request\"\n    ],\n    \"xmlrpc_get_type\": [\n        \"string xmlrpc_get_type(mixed value)\",\n        \"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"\n    ],\n    \"xmlrpc_is_fault\": [\n        \"bool xmlrpc_is_fault(array)\",\n        \"Determines if an array value represents an XMLRPC fault.\"\n    ],\n    \"xmlrpc_parse_method_descriptions\": [\n        \"array xmlrpc_parse_method_descriptions(string xml)\",\n        \"Decodes XML into a list of method descriptions\"\n    ],\n    \"xmlrpc_server_add_introspection_data\": [\n        \"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\n        \"Adds introspection documentation\"\n    ],\n    \"xmlrpc_server_call_method\": [\n        \"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\n        \"Parses XML requests and call methods\"\n    ],\n    \"xmlrpc_server_create\": [\n        \"resource xmlrpc_server_create(void)\",\n        \"Creates an xmlrpc server\"\n    ],\n    \"xmlrpc_server_destroy\": [\n        \"int xmlrpc_server_destroy(resource server)\",\n        \"Destroys server resources\"\n    ],\n    \"xmlrpc_server_register_introspection_callback\": [\n        \"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\n        \"Register a PHP function to generate documentation\"\n    ],\n    \"xmlrpc_server_register_method\": [\n        \"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\n        \"Register a PHP function to handle method matching method_name\"\n    ],\n    \"xmlrpc_set_type\": [\n        \"bool xmlrpc_set_type(string value, string type)\",\n        \"Sets xmlrpc type, base64 or datetime, for a PHP string value\"\n    ],\n    \"xmlwriter_end_attribute\": [\n        \"bool xmlwriter_end_attribute(resource xmlwriter)\",\n        \"End attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_cdata\": [\n        \"bool xmlwriter_end_cdata(resource xmlwriter)\",\n        \"End current CDATA - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_comment\": [\n        \"bool xmlwriter_end_comment(resource xmlwriter)\",\n        \"Create end comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_document\": [\n        \"bool xmlwriter_end_document(resource xmlwriter)\",\n        \"End current document - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd\": [\n        \"bool xmlwriter_end_dtd(resource xmlwriter)\",\n        \"End current DTD - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_attlist\": [\n        \"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\n        \"End current DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_element\": [\n        \"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\n        \"End current DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_entity\": [\n        \"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\n        \"End current DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_element\": [\n        \"bool xmlwriter_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_pi\": [\n        \"bool xmlwriter_end_pi(resource xmlwriter)\",\n        \"End current PI - returns FALSE on error\"\n    ],\n    \"xmlwriter_flush\": [\n        \"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\n        \"Output current buffer\"\n    ],\n    \"xmlwriter_full_end_element\": [\n        \"bool xmlwriter_full_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_open_memory\": [\n        \"resource xmlwriter_open_memory()\",\n        \"Create new xmlwriter using memory for string output\"\n    ],\n    \"xmlwriter_open_uri\": [\n        \"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\n        \"Create new xmlwriter using source uri for output\"\n    ],\n    \"xmlwriter_output_memory\": [\n        \"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\n        \"Output current buffer as string\"\n    ],\n    \"xmlwriter_set_indent\": [\n        \"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\n        \"Toggle indentation on/off - returns FALSE on error\"\n    ],\n    \"xmlwriter_set_indent_string\": [\n        \"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\n        \"Set string used for indenting - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute\": [\n        \"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\n        \"Create start attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute_ns\": [\n        \"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_cdata\": [\n        \"bool xmlwriter_start_cdata(resource xmlwriter)\",\n        \"Create start CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_comment\": [\n        \"bool xmlwriter_start_comment(resource xmlwriter)\",\n        \"Create start comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_document\": [\n        \"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\n        \"Create document tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd\": [\n        \"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\n        \"Create start DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_attlist\": [\n        \"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\n        \"Create start DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_element\": [\n        \"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\n        \"Create start DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_entity\": [\n        \"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\n        \"Create start DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element\": [\n        \"bool xmlwriter_start_element(resource xmlwriter, string name)\",\n        \"Create start element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element_ns\": [\n        \"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_pi\": [\n        \"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\n        \"Create start PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_text\": [\n        \"bool xmlwriter_text(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute\": [\n        \"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\n        \"Write full attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute_ns\": [\n        \"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\n        \"Write full namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_cdata\": [\n        \"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\n        \"Write full CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_comment\": [\n        \"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\n        \"Write full comment tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd\": [\n        \"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\n        \"Write full DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_attlist\": [\n        \"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\n        \"Write full DTD AttList tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_element\": [\n        \"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\n        \"Write full DTD element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_entity\": [\n        \"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\n        \"Write full DTD Entity tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element\": [\n        \"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\n        \"Write full element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element_ns\": [\n        \"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\n        \"Write full namesapced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_pi\": [\n        \"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\n        \"Write full PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_raw\": [\n        \"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xsl_xsltprocessor_get_parameter\": [\n        \"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_has_exslt_support\": [\n        \"bool xsl_xsltprocessor_has_exslt_support();\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_import_stylesheet\": [\n        \"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_register_php_functions\": [\n        \"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_remove_parameter\": [\n        \"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_parameter\": [\n        \"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_profiling\": [\n        \"bool xsl_xsltprocessor_set_profiling(string filename) */\",\n        \"PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s!\\\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling\"\n    ],\n    \"xsl_xsltprocessor_transform_to_doc\": [\n        \"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_transform_to_uri\": [\n        \"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_xml\": [\n        \"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\n        \"\"\n    ],\n    \"zend_logo_guid\": [\n        \"string zend_logo_guid(void)\",\n        \"Return the special ID used to request the Zend logo in phpinfo screens\"\n    ],\n    \"zend_version\": [\n        \"string zend_version(void)\",\n        \"Get the version of the Zend Engine\"\n    ],\n    \"zip_close\": [\n        \"void zip_close(resource zip)\",\n        \"Close a Zip archive\"\n    ],\n    \"zip_entry_close\": [\n        \"void zip_entry_close(resource zip_ent)\",\n        \"Close a zip entry\"\n    ],\n    \"zip_entry_compressedsize\": [\n        \"int zip_entry_compressedsize(resource zip_entry)\",\n        \"Return the compressed size of a ZZip entry\"\n    ],\n    \"zip_entry_compressionmethod\": [\n        \"string zip_entry_compressionmethod(resource zip_entry)\",\n        \"Return a string containing the compression method used on a particular entry\"\n    ],\n    \"zip_entry_filesize\": [\n        \"int zip_entry_filesize(resource zip_entry)\",\n        \"Return the actual filesize of a ZZip entry\"\n    ],\n    \"zip_entry_name\": [\n        \"string zip_entry_name(resource zip_entry)\",\n        \"Return the name given a ZZip entry\"\n    ],\n    \"zip_entry_open\": [\n        \"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\n        \"Open a Zip File, pointed by the resource entry\"\n    ],\n    \"zip_entry_read\": [\n        \"mixed zip_entry_read(resource zip_entry [, int len])\",\n        \"Read from an open directory entry\"\n    ],\n    \"zip_open\": [\n        \"resource zip_open(string filename)\",\n        \"Create new zip using source uri for output\"\n    ],\n    \"zip_read\": [\n        \"resource zip_read(resource zip)\",\n        \"Returns the next file in the archive\"\n    ],\n    \"zlib_get_coding_type\": [\n        \"string zlib_get_coding_type(void)\",\n        \"Returns the coding type used for output compression\"\n    ]\n};\n\nvar variableMap = {\n    \"$_COOKIE\": {\n        type: \"array\"\n    },\n    \"$_ENV\": {\n        type: \"array\"\n    },\n    \"$_FILES\": {\n        type: \"array\"\n    },\n    \"$_GET\": {\n        type: \"array\"\n    },\n    \"$_POST\": {\n        type: \"array\"\n    },\n    \"$_REQUEST\": {\n        type: \"array\"\n    },\n    \"$_SERVER\": {\n        type: \"array\",\n        value: {\n            \"DOCUMENT_ROOT\":  1,\n            \"GATEWAY_INTERFACE\":  1,\n            \"HTTP_ACCEPT\":  1,\n            \"HTTP_ACCEPT_CHARSET\":  1,\n            \"HTTP_ACCEPT_ENCODING\":  1 ,\n            \"HTTP_ACCEPT_LANGUAGE\":  1,\n            \"HTTP_CONNECTION\":  1,\n            \"HTTP_HOST\":  1,\n            \"HTTP_REFERER\":  1,\n            \"HTTP_USER_AGENT\":  1,\n            \"PATH_TRANSLATED\":  1,\n            \"PHP_SELF\":  1,\n            \"QUERY_STRING\":  1,\n            \"REMOTE_ADDR\":  1,\n            \"REMOTE_PORT\":  1,\n            \"REQUEST_METHOD\":  1,\n            \"REQUEST_URI\":  1,\n            \"SCRIPT_FILENAME\":  1,\n            \"SCRIPT_NAME\":  1,\n            \"SERVER_ADMIN\":  1,\n            \"SERVER_NAME\":  1,\n            \"SERVER_PORT\":  1,\n            \"SERVER_PROTOCOL\":  1,\n            \"SERVER_SIGNATURE\":  1,\n            \"SERVER_SOFTWARE\":  1\n        }\n    },\n    \"$_SESSION\": {\n        type: \"array\"\n    },\n    \"$GLOBALS\": {\n        type: \"array\"\n    }\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type) > -1;\n}\n\nvar PhpCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        \n        if (token.type==='support.php_tag' && token.value==='<?')\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (token.type==='identifier') {\n            if (token.index > 0) {\n                var prevToken = session.getTokenAt(pos.row, token.start);\n                if (prevToken.type==='support.php_tag') {\n                    return this.getTagCompletions(state, session, pos, prefix);\n                }\n            }\n            return this.getFunctionCompletions(state, session, pos, prefix);\n        }\n        if (is(token, \"variable\"))\n            return this.getVariableCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (token.type==='string' && /(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(line))\n            return this.getArrayKeyCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n    \n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return [{\n            caption: 'php',\n            value: 'php',\n            meta: \"php tag\",\n            score: 1000000\n        }, {\n            caption: '=',\n            value: '=',\n            meta: \"php tag\",\n            score: 1000000\n        }];\n    };\n\n    this.getFunctionCompletions = function(state, session, pos, prefix) {\n        var functions = Object.keys(functionMap);\n        return functions.map(function(func){\n            return {\n                caption: func,\n                snippet: func + '($0)',\n                meta: \"php function\",\n                score: 1000000,\n                docHTML: functionMap[func][1]\n            };\n        });\n    };\n\n    this.getVariableCompletions = function(state, session, pos, prefix) {\n        var variables = Object.keys(variableMap);\n        return variables.map(function(variable){\n            return {\n                caption: variable,\n                value: variable,\n                meta: \"php variable\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getArrayKeyCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var variable = line.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];\n\n        if (!variableMap[variable]) {\n            return [];\n        }\n\n        var keys = [];\n        if (variableMap[variable].type==='array' && variableMap[variable].value)\n            keys = Object.keys(variableMap[variable].value);\n\n        return keys.map(function(key) {\n            return {\n                caption: key,\n                value: key,\n                meta: \"php array key\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(PhpCompletions.prototype);\n\nexports.PhpCompletions = PhpCompletions;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\nvar PhpLangHighlightRules = require(\"./php_highlight_rules\").PhpLangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar PhpCompletions = require(\"./php_completions\").PhpCompletions;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar unicode = require(\"../unicode\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\n\nvar PhpMode = function(opts) {\n    this.HighlightRules = PhpLangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.$completer = new PhpCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(PhpMode, TextMode);\n\n(function() {\n\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"_]|\\\\s])+\", \"g\");\n\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState != \"doc-start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/php-inline\";\n}).call(PhpMode.prototype);\n\nvar Mode = function(opts) {\n    if (opts && opts.inline) {\n        var mode = new PhpMode();\n        mode.createWorker = this.createWorker;\n        mode.inlinePhp = true;\n        return mode;\n    }\n    HtmlMode.call(this);\n    this.HighlightRules = PhpHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"php-\": PhpMode\n    });\n    this.foldingRules.subModes[\"php-\"] = new CStyleFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/php_worker\", \"PhpWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.inlinePhp)\n            worker.call(\"setOptions\", [{inline: true}]);\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/php\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-php_laravel_blade.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar PhpLangHighlightRules = function() {\n    var docComment = DocCommentHighlightRules;\n    var builtinFunctions = lang.arrayToMap(\n'abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|\\\naggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|\\\napache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|\\\napache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|\\\napc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|\\\napc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|\\\napd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|\\\napd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|\\\narray_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|\\\narray_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|\\\narray_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|\\\narray_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|\\\narray_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|\\\narray_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|\\\natan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|\\\nbbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|\\\nbcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|\\\nbcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|\\\nbcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|\\\nbindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|\\\ncachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|\\\ncairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|\\\ncairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|\\\ncairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|\\\ncairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|\\\ncairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|\\\ncairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|\\\ncairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|\\\ncairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|\\\ncairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|\\\ncairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|\\\ncairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|\\\ncairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|\\\ncairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|\\\ncairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|\\\ncairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|\\\ncairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|\\\ncairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|\\\ncairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|\\\ncairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|\\\ncairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|\\\ncairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|\\\ncairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|\\\ncairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|\\\ncairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|\\\ncairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|\\\ncairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|\\\ncal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|\\\nchdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|\\\nclass_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|\\\nclasskit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|\\\ncom_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|\\\ncom_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|\\\nconvert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|\\\ncounter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|\\\ncrack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|\\\nctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|\\\ncubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|\\\ncubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|\\\ncubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|\\\ncubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|\\\ncubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|\\\ncubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|\\\ncubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|\\\ncubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|\\\ncubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|\\\ncubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|\\\ncubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|\\\ncurl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|\\\ncurl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|\\\ncurl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|\\\ndate_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|\\\ndate_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|\\\ndate_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|\\\ndateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|\\\ndb2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|\\\ndb2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|\\\ndb2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|\\\ndb2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|\\\ndb2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|\\\ndb2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|\\\ndba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|\\\ndbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|\\\ndbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|\\\ndbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|\\\ndbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|\\\ndbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|\\\ndbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|\\\ndbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|\\\ndbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|\\\ndefine_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|\\\ndio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|\\\ndns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|\\\ndomattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|\\\ndomdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|\\\ndomdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|\\\ndomdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|\\\ndomdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|\\\ndomdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|\\\ndomelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|\\\ndomelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|\\\ndomexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|\\\ndomnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|\\\ndomnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|\\\ndomnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|\\\ndomnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|\\\ndomnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|\\\ndomtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|\\\ndomxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|\\\ndomxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|\\\nenchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|\\\nenchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|\\\nenchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|\\\nenchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|\\\neregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|\\\nevent_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|\\\nevent_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|\\\nevent_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|\\\nevent_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|\\\nexpm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|\\\nfam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|\\\nfbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|\\\nfbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|\\\nfbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|\\\nfbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|\\\nfbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|\\\nfbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|\\\nfbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|\\\nfbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|\\\nfdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|\\\nfdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|\\\nfdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|\\\nfdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|\\\nfile_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|\\\nfilepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|\\\nfiletype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|\\\nfinfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|\\\nforward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|\\\nftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|\\\nftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|\\\nftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|\\\nfunc_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|\\\ngearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|\\\ngeoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|\\\ngeoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|\\\nget_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|\\\nget_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|\\\nget_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|\\\nget_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|\\\ngetcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|\\\ngethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|\\\ngetmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|\\\ngetrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|\\\ngettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|\\\ngmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|\\\ngmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|\\\ngmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|\\\ngnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|\\\ngnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|\\\ngnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|\\\ngrapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|\\\ngupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|\\\ngupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|\\\ngupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|\\\ngupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|\\\ngupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|\\\ngupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|\\\ngupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|\\\ngupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|\\\ngupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|\\\ngzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|\\\nhalt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|\\\nharuannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|\\\nharudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|\\\nharudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|\\\nharudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|\\\nharudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|\\\nharudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|\\\nharudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|\\\nharudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|\\\nharudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|\\\nharuencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|\\\nharufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|\\\nharufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|\\\nharuimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|\\\nharuoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|\\\nharupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|\\\nharupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|\\\nharupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|\\\nharupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|\\\nharupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|\\\nharupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|\\\nharupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|\\\nharupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|\\\nharupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|\\\nharupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|\\\nharupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|\\\nharupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|\\\nharupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|\\\nharupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|\\\nhash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|\\\nheader_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|\\\nhtml_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|\\\nhttp_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|\\\nhttp_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|\\\nhttp_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|\\\nhttp_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|\\\nhttp_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|\\\nhttp_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|\\\nhttp_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|\\\nhttp_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|\\\nhttpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|\\\nhttpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|\\\nhttpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|\\\nhttpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|\\\nhttpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|\\\nhttpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|\\\nhttpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|\\\nhttpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|\\\nhttpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|\\\nhttprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|\\\nhttprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|\\\nhttprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|\\\nhttprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|\\\nhttprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|\\\nhttprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|\\\nhttprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|\\\nhttprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|\\\nhttprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|\\\nhttprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|\\\nhttprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|\\\nhttprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|\\\nhttprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|\\\nhttpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|\\\nhttpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|\\\nhttpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|\\\nhttpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|\\\nhttpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|\\\nhttpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|\\\nhttpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|\\\nhw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|\\\nhw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|\\\nhw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|\\\nhw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|\\\nhw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|\\\nhw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|\\\nhw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|\\\nhwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|\\\nhwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|\\\nhwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|\\\nhwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|\\\nhwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|\\\nhwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|\\\nhwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|\\\nibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|\\\nibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|\\\nibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|\\\nibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|\\\nibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|\\\nibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|\\\nibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|\\\niconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|\\\nid3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|\\\nidn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|\\\nifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|\\\nifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|\\\nifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|\\\nifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|\\\niis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|\\\niis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|\\\niis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|\\\nimagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|\\\nimagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|\\\nimagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|\\\nimagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|\\\nimagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|\\\nimagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|\\\nimagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|\\\nimagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|\\\nimagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|\\\nimagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|\\\nimagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|\\\nimagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|\\\nimagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|\\\nimagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|\\\nimagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|\\\nimagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|\\\nimagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|\\\nimagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|\\\nimagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|\\\nimagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|\\\nimagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|\\\nimagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|\\\nimagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|\\\nimagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|\\\nimagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|\\\nimagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|\\\nimagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|\\\nimagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|\\\nimagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|\\\nimagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|\\\nimagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|\\\nimagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|\\\nimagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|\\\nimagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|\\\nimagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|\\\nimagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|\\\nimagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|\\\nimagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|\\\nimagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|\\\nimagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|\\\nimagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|\\\nimagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|\\\nimagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|\\\nimagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|\\\nimagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|\\\nimagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|\\\nimagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|\\\nimagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|\\\nimagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|\\\nimagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|\\\nimagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|\\\nimagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|\\\nimagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|\\\nimagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|\\\nimagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|\\\nimagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|\\\nimagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|\\\nimagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|\\\nimagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|\\\nimagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|\\\nimagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|\\\nimagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|\\\nimagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|\\\nimagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|\\\nimagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|\\\nimagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|\\\nimagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|\\\nimagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|\\\nimagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|\\\nimagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|\\\nimagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|\\\nimagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|\\\nimagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|\\\nimagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|\\\nimagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|\\\nimagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|\\\nimagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|\\\nimagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|\\\nimagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|\\\nimagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|\\\nimagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|\\\nimagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|\\\nimagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|\\\nimagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|\\\nimagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|\\\nimagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|\\\nimagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|\\\nimagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|\\\nimagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|\\\nimagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|\\\nimagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|\\\nimagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|\\\nimagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|\\\nimagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|\\\nimagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|\\\nimagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|\\\nimagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|\\\nimagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|\\\nimagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|\\\nimagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|\\\nimagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|\\\nimagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|\\\nimap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|\\\nimap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|\\\nimap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|\\\nimap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|\\\nimap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|\\\nimap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|\\\nimap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|\\\nimap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|\\\ninclude_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|\\\ningres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|\\\ningres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|\\\ningres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|\\\ningres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|\\\ningres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|\\\ninotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|\\\nintldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|\\\nis_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|\\\nis_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|\\\niscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|\\\niterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|\\\njddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|\\\njson_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|\\\nkadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|\\\nkadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|\\\nldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|\\\nldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|\\\nldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|\\\nldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|\\\nldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|\\\nlibxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|\\\nlimititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|\\\nlzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|\\\nm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|\\\nm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|\\\nm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|\\\nm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|\\\nmailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|\\\nmailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|\\\nmailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|\\\nmaxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|\\\nmaxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|\\\nmaxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|\\\nmaxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|\\\nmaxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|\\\nmaxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|\\\nmaxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|\\\nmaxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|\\\nmaxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|\\\nmaxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|\\\nmaxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|\\\nmaxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|\\\nmaxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|\\\nmaxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|\\\nmaxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|\\\nmb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|\\\nmb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|\\\nmb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|\\\nmb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|\\\nmb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|\\\nmb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|\\\nmb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|\\\nmcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|\\\nmcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|\\\nmcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|\\\nmcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|\\\nmcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|\\\nmcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|\\\nmdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|\\\nmhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|\\\nming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|\\\nmongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|\\\nmongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|\\\nmongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|\\\nmqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|\\\nmqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|\\\nmsession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|\\\nmsession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|\\\nmsg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|\\\nmsql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|\\\nmsql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|\\\nmsql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|\\\nmsql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|\\\nmssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|\\\nmssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|\\\nmssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|\\\nmssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|\\\nmssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|\\\nmysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|\\\nmysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|\\\nmysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|\\\nmysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|\\\nmysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|\\\nmysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|\\\nmysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|\\\nmysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|\\\nmysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|\\\nmysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|\\\nmysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|\\\nmysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|\\\nmysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|\\\nmysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|\\\nmysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|\\\nmysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|\\\nmysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|\\\nmysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|\\\nmysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|\\\nmysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|\\\nmysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|\\\nmysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|\\\nmysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|\\\nmysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|\\\nmysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|\\\nmysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|\\\nmysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|\\\nncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|\\\nncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|\\\nncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|\\\nncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|\\\nncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|\\\nncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|\\\nncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|\\\nncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|\\\nncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|\\\nncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|\\\nncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|\\\nncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|\\\nncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|\\\nncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|\\\nncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|\\\nncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|\\\nncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|\\\nncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|\\\nncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|\\\nncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|\\\nncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|\\\nncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|\\\nnewt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|\\\nnewt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|\\\nnewt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|\\\nnewt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|\\\nnewt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|\\\nnewt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|\\\nnewt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|\\\nnewt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|\\\nnewt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|\\\nnewt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|\\\nnewt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|\\\nnewt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|\\\nnewt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|\\\nnewt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|\\\nnewt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|\\\nnewt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|\\\nnewt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|\\\nnewt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|\\\nnewt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|\\\nnotes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|\\\nnotes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|\\\nnumberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|\\\nob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|\\\nob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|\\\noci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|\\\noci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|\\\noci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|\\\noci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|\\\noci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|\\\noci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|\\\noci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|\\\noci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|\\\noci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|\\\nocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|\\\nocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|\\\nocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|\\\nociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|\\\nocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|\\\noctdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|\\\nodbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|\\\nodbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|\\\nodbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|\\\nodbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|\\\nodbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|\\\nopenal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|\\\nopenal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|\\\nopenal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|\\\nopenlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|\\\nopenssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|\\\nopenssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|\\\nopenssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|\\\nopenssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|\\\nopenssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|\\\nopenssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|\\\nopenssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|\\\noutofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|\\\novrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|\\\novrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|\\\novrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|\\\nparse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|\\\npcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|\\\npcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|\\\npdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|\\\npdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|\\\npdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|\\\npdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|\\\npdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|\\\npdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|\\\npdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|\\\npdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|\\\npdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|\\\npdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|\\\npdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|\\\npdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|\\\npdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|\\\npdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|\\\npdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|\\\npdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|\\\npdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|\\\npdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|\\\npdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|\\\npdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|\\\npdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|\\\npdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|\\\npdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|\\\npdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|\\\npg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|\\\npg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|\\\npg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|\\\npg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|\\\npg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|\\\npg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|\\\npg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|\\\npg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|\\\npg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|\\\nphp_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|\\\npng2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|\\\nposix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|\\\nposix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|\\\nposix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|\\\npreg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|\\\nprinter_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|\\\nprinter_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|\\\nprinter_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|\\\nprinter_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|\\\nprinter_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|\\\nps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|\\\nps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|\\\nps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|\\\nps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|\\\nps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|\\\nps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|\\\nps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|\\\nps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|\\\nps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|\\\npspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|\\\npspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|\\\npspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|\\\npx_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|\\\npx_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|\\\npx_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|\\\nradius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|\\\nradius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|\\\nradius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|\\\nradius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|\\\nrararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|\\\nreadline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|\\\nreadline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|\\\nreadline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|\\\nrecursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|\\\nrecursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|\\\nreflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|\\\nregexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|\\\nresourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|\\\nrpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|\\\nrrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|\\\nrunkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|\\\nrunkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|\\\nrunkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|\\\nrunkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|\\\nsamconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|\\\nsamconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|\\\nsammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|\\\nsca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|\\\nsdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|\\\nsdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|\\\nsdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|\\\nsdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|\\\nsdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|\\\nsdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|\\\nsdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|\\\nsdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|\\\nsdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|\\\nsdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|\\\nsdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|\\\nsdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|\\\nsdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|\\\nsdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|\\\nsdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|\\\nsdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|\\\nsdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|\\\nsem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|\\\nsession_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|\\\nsession_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|\\\nsession_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|\\\nsession_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|\\\nset_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|\\\nsetstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|\\\nshm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|\\\nsimilar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|\\\nsnmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|\\\nsnmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|\\\nsnmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|\\\nsoapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|\\\nsocket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|\\\nsocket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|\\\nsocket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|\\\nsolrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|\\\nsolrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|\\\nsolrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|\\\nspl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|\\\nsplfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|\\\nsplpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|\\\nsqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|\\\nsqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|\\\nsqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|\\\nsqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|\\\nsqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|\\\nsqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|\\\nssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|\\\nssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|\\\nssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|\\\nssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|\\\nstats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|\\\nstats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|\\\nstats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|\\\nstats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|\\\nstats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|\\\nstats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|\\\nstats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|\\\nstats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|\\\nstats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|\\\nstats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|\\\nstats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|\\\nstats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|\\\nstr_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|\\\nstream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|\\\nstream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|\\\nstream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|\\\nstream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|\\\nstream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|\\\nstream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|\\\nstream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|\\\nstream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|\\\nstripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|\\\nstrstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|\\\nsvn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|\\\nsvn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|\\\nsvn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|\\\nsvn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|\\\nsvn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|\\\nsvn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|\\\nswf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|\\\nswf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|\\\nswf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|\\\nswf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|\\\nswf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|\\\nswf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|\\\nswf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|\\\nswf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|\\\nswfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|\\\nswfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|\\\nswish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|\\\nswishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|\\\nswishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|\\\nsybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|\\\nsybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|\\\nsybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|\\\nsybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|\\\ntcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|\\\ntidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|\\\ntime_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|\\\ntimezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|\\\ntokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|\\\nucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|\\\nudm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|\\\nudm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|\\\nuksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|\\\nurldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|\\\nvariant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|\\\nvariant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|\\\nvariant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|\\\nvpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|\\\nvpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|\\\nvpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|\\\nw32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|\\\nwddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|\\\nwin32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|\\\nwin32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|\\\nwincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|\\\nwincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|\\\nwincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|\\\nwincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|\\\nxattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|\\\nxdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|\\\nxdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|\\\nxhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|\\\nxml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|\\\nxml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|\\\nxml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|\\\nxml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|\\\nxmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|\\\nxmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|\\\nxmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|\\\nxmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|\\\nxmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|\\\nxmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|\\\nxmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|\\\nxmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|\\\nxmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|\\\nxmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|\\\nxmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|\\\nxpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|\\\nxslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|\\\nxslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|\\\nyaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|\\\nyaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|\\\nyaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|\\\nyp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|\\\nzip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|\\\nziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|\\\nziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|\\\nziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|\\\nziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|\\\nziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|\\\nziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type'.split('|')\n    );\n    var keywords = lang.arrayToMap(\n'abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|\\\nendif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|\\\npublic|static|switch|throw|trait|try|use|var|while|xor|yield'.split('|')\n    );\n    var languageConstructs = lang.arrayToMap(\n        ('__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|')\n    );\n\n    var builtinConstants = lang.arrayToMap(\n        ('true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__').split('|')\n    );\n\n    var builtinVariables = lang.arrayToMap(\n'$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|\\\n$http_response_header|$argc|$argv'.split('|')\n    );\n    var builtinFunctionsDeprecated = lang.arrayToMap(\n'key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|\\\ncom_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|\\\ncubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|\\\nhw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|\\\nmaxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|\\\nmysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|\\\nmysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|\\\nmysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|\\\nmysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|\\\nmysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|\\\nmysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|\\\nocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|\\\nocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|\\\nocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|\\\nocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|\\\nociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|\\\nPDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|\\\nPDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|\\\nPDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|\\\nPDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|\\\nPDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|\\\nPDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|\\\nPDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|\\\nPDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|\\\npx_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister\\\nset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|\\\nsql_regcase'.split('|')\n    );\n\n    var keywordsDeprecated = lang.arrayToMap(\n        ('cfunction|old_function').split('|')\n    );\n\n    var futureReserved = lang.arrayToMap([]);\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /(?:#|\\/\\/)(?:[^?]|\\?[^>])*/\n            },\n            docComment.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // \" string start\n                regex : '\"',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // ' string start\n                regex : \"'\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|\" +\n                        \"ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|\" +\n                        \"HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|\" +\n                        \"L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|\" +\n                        \"VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"\n            }, {\n                token : [\"keyword\", \"text\", \"support.class\"],\n                regex : \"\\\\b(new)(\\\\s+)(\\\\w+)\"\n            }, {\n                token : [\"support.class\", \"keyword.operator\"],\n                regex : \"\\\\b(\\\\w+)(::)\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|\" +\n                        \"SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|\" +\n                        \"O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|\" +\n                        \"R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|\" +\n                        \"YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|\" +\n                        \"ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|\" +\n                        \"T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|\" +\n                        \"HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|\" +\n                        \"I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|\" +\n                        \"O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|\" +\n                        \"L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|\" +\n                        \"M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|\" +\n                        \"OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|\" +\n                        \"T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"\n            }, {\n                token : function(value) {\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (builtinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (builtinVariables.hasOwnProperty(value))\n                        return \"variable.language\";\n                    else if (futureReserved.hasOwnProperty(value))\n                        return \"invalid.illegal\";\n                    else if (builtinFunctions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (value == \"debugger\")\n                        return \"invalid.deprecated\";\n                    else\n                        if(value.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/))\n                            return \"variable\";\n                        return \"identifier\";\n                },\n                regex : /[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            }, {\n                onMatch : function(value, currentSate, state) {\n                    value = value.substr(3);\n                    if (value[0] == \"'\" || value[0] == '\"')\n                        value = value.slice(1, -1);\n                    state.unshift(this.next, value);\n                    return \"markup.list\";\n                },\n                regex : /<<<(?:\\w+|'\\w+'|\"\\w+\")$/,\n                next: \"heredoc\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[,;]/\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"heredoc\" : [\n            {\n                onMatch : function(value, currentSate, stack) {\n                    if (stack[1] != value)\n                        return \"string\";\n                    stack.shift();\n                    stack.shift();\n                    return \"markup.list\";\n                },\n                regex : \"^\\\\w+(?=;?$)\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex : \".*\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : '\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n            }, {\n                token : \"variable\",\n                regex : /\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/\n            }, {\n                token : \"variable\",\n                regex : /\\$\\{[^\"\\}]+\\}?/           // this is wrong but ok for now\n            },\n            {token : \"string\", regex : '\"', next : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"qstring\" : [\n            {token : \"constant.language.escape\", regex : /\\\\['\\\\]/},\n            {token : \"string\", regex : \"'\", next : \"start\"},\n            {defaultToken : \"string\"}\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(PhpLangHighlightRules, TextHighlightRules);\n\n\nvar PhpHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var startRules = [\n        {\n            token : \"support.php_tag\", // php open tag\n            regex : \"<\\\\?(?:php|=)?\",\n            push  : \"php-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token : \"support.php_tag\", // php close tag\n            regex : \"\\\\?>\",\n            next  : \"pop\"\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(PhpLangHighlightRules, \"php-\", endRules, [\"start\"]);\n\n    this.normalizeRules();\n};\n\noop.inherits(PhpHighlightRules, HtmlHighlightRules);\n\nexports.PhpHighlightRules = PhpHighlightRules;\nexports.PhpLangHighlightRules = PhpLangHighlightRules;\n});\n\nace.define(\"ace/mode/php_laravel_blade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\n\nvar PHPLaravelBladeHighlightRules = function() {\n    PhpHighlightRules.call(this);\n\n    var bladeRules = {\n        start: [{\n            include: \"comments\"\n        }, {\n            include: \"directives\"\n        }, {\n            include: \"parenthesis\"\n        }],\n        comments: [{\n            token: \"punctuation.definition.comment.blade\",\n            regex: \"(\\\\/\\\\/(.)*)|(\\\\#(.)*)\",\n            next: \"pop\"\n        }, {\n            token: \"punctuation.definition.comment.begin.php\",\n            regex: \"(?:\\\\/\\\\*)\",\n            push: [{\n                token: \"punctuation.definition.comment.end.php\",\n                regex: \"(?:\\\\*\\\\/)\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.blade\"\n            }]\n        }, {\n            token: \"punctuation.definition.comment.begin.blade\",\n            regex: \"(?:\\\\{\\\\{\\\\-\\\\-)\",\n            push: [{\n                token: \"punctuation.definition.comment.end.blade\",\n                regex: \"(?:\\\\-\\\\-\\\\}\\\\})\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.blade\"\n            }]\n        }],\n        parenthesis: [{\n            token: \"parenthesis.begin.blade\",\n            regex: \"\\\\(\",\n            push: [{\n                token: \"parenthesis.end.blade\",\n                regex: \"\\\\)\",\n                next: \"pop\"\n            }, {\n                include: \"strings\"\n            }, {\n                include: \"variables\"\n            }, {\n                include: \"lang\"\n            }, {\n                include: \"parenthesis\"\n            }, {\n                defaultToken: \"source.blade\"\n            }]\n        }],\n        directives: [{\n                token: [\"directive.declaration.blade\", \"keyword.directives.blade\"],\n                regex: \"(@)(endunless|endisset|endempty|endauth|endguest|endcomponent|endslot|endalert|endverbatim|endsection|show|php|endphp|endpush|endprepend|endenv|endforelse|isset|empty|component|slot|alert|json|verbatim|section|auth|guest|hasSection|forelse|includeIf|includeWhen|includeFirst|each|push|stack|prepend|inject|env|elseenv|unless|yield|extends|parent|include|acfrepeater|block|can|cannot|choice|debug|elsecan|elsecannot|embed|hipchat|lang|layout|macro|macrodef|minify|partial|render|servers|set|slack|story|task|unset|wpposts|acfend|after|append|breakpoint|endafter|endcan|endcannot|endembed|endmacro|endmarkdown|endminify|endpartial|endsetup|endstory|endtask|endunless|markdown|overwrite|setup|stop|wpempty|wpend|wpquery)\"\n\n            }, {\n                token: [\"directive.declaration.blade\", \"keyword.control.blade\"],\n                regex: \"(@)(if|else|elseif|endif|foreach|endforeach|switch|case|break|default|endswitch|for|endfor|while|endwhile|continue)\"\n            }, {\n                token: [\"directive.ignore.blade\", \"injections.begin.blade\"],\n                regex: \"(@?)(\\\\{\\\\{)\",\n                push: [{\n                    token: \"injections.end.blade\",\n                    regex: \"\\\\}\\\\}\",\n                    next: \"pop\"\n                }, {\n                    include: \"strings\"\n                }, {\n                    include: \"variables\"\n                }, {\n                    defaultToken: \"source.blade\"\n                }]\n            }, {\n                token: \"injections.unescaped.begin.blade\",\n                regex: \"\\\\{\\\\!\\\\!\",\n                push: [{\n                    token: \"injections.unescaped.end.blade\",\n                    regex: \"\\\\!\\\\!\\\\}\",\n                    next: \"pop\"\n                }, {\n                    include: \"strings\"\n                }, {\n                    include: \"variables\"\n                }, {\n                    defaultToken: \"source.blade\"\n                }]\n            }\n\n        ],\n\n        lang: [{\n            token: \"keyword.operator.blade\",\n            regex: \"(?:!=|!|<=|>=|<|>|===|==|=|\\\\+\\\\+|\\\\;|\\\\,|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod|as)\\\\b\"\n        }, {\n            token: \"constant.language.blade\",\n            regex: \"\\\\b(?:TRUE|FALSE|true|false)\\\\b\"\n        }],\n        strings: [{\n            token: \"punctuation.definition.string.begin.blade\",\n            regex: \"\\\"\",\n            push: [{\n                token: \"punctuation.definition.string.end.blade\",\n                regex: \"\\\"\",\n                next: \"pop\"\n            }, {\n                token: \"string.character.escape.blade\",\n                regex: \"\\\\\\\\.\"\n            }, {\n                defaultToken: \"string.quoted.single.blade\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.blade\",\n            regex: \"'\",\n            push: [{\n                token: \"punctuation.definition.string.end.blade\",\n                regex: \"'\",\n                next: \"pop\"\n            }, {\n                token: \"string.character.escape.blade\",\n                regex: \"\\\\\\\\.\"\n            }, {\n                defaultToken: \"string.quoted.double.blade\"\n            }]\n        }],\n        variables: [{\n            token: \"variable.blade\",\n            regex: \"\\\\$([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"\n        }, {\n            token: [\"keyword.operator.blade\", \"constant.other.property.blade\"],\n            regex: \"(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"\n        }, {\n            token: [\"keyword.operator.blade\",\n                \"meta.function-call.object.blade\",\n                \"punctuation.definition.variable.blade\",\n                \"variable.blade\",\n                \"punctuation.definition.variable.blade\"\n            ],\n            regex: \"(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))\"\n        }]\n    };\n\n    var bladeStart = bladeRules.start;\n\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift.apply(this.$rules[rule], bladeStart);\n    }\n\n    Object.keys(bladeRules).forEach(function(x) {\n        if (!this.$rules[x])\n            this.$rules[x] = bladeRules[x];\n    }, this);\n\n    this.normalizeRules();\n};\n\n\noop.inherits(PHPLaravelBladeHighlightRules, PhpHighlightRules);\n\nexports.PHPLaravelBladeHighlightRules = PHPLaravelBladeHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar functionMap = {\n    \"abs\": [\n        \"int abs(int number)\",\n        \"Return the absolute value of the number\"\n    ],\n    \"acos\": [\n        \"float acos(float number)\",\n        \"Return the arc cosine of the number in radians\"\n    ],\n    \"acosh\": [\n        \"float acosh(float number)\",\n        \"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"\n    ],\n    \"addGlob\": [\n        \"bool addGlob(string pattern[,int flags [, array options]])\",\n        \"Add files matching the glob pattern. See php's glob for the pattern syntax.\"\n    ],\n    \"addPattern\": [\n        \"bool addPattern(string pattern[, string path [, array options]])\",\n        \"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"\n    ],\n    \"addcslashes\": [\n        \"string addcslashes(string str, string charlist)\",\n        \"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"\n    ],\n    \"addslashes\": [\n        \"string addslashes(string str)\",\n        \"Escapes single quote, double quotes and backslash characters in a string with backslashes\"\n    ],\n    \"apache_child_terminate\": [\n        \"bool apache_child_terminate(void)\",\n        \"Terminate apache process after this request\"\n    ],\n    \"apache_get_modules\": [\n        \"array apache_get_modules(void)\",\n        \"Get a list of loaded Apache modules\"\n    ],\n    \"apache_get_version\": [\n        \"string apache_get_version(void)\",\n        \"Fetch Apache version\"\n    ],\n    \"apache_getenv\": [\n        \"bool apache_getenv(string variable [, bool walk_to_top])\",\n        \"Get an Apache subprocess_env variable\"\n    ],\n    \"apache_lookup_uri\": [\n        \"object apache_lookup_uri(string URI)\",\n        \"Perform a partial request of the given URI to obtain information about it\"\n    ],\n    \"apache_note\": [\n        \"string apache_note(string note_name [, string note_value])\",\n        \"Get and set Apache request notes\"\n    ],\n    \"apache_request_auth_name\": [\n        \"string apache_request_auth_name()\",\n        \"\"\n    ],\n    \"apache_request_auth_type\": [\n        \"string apache_request_auth_type()\",\n        \"\"\n    ],\n    \"apache_request_discard_request_body\": [\n        \"long apache_request_discard_request_body()\",\n        \"\"\n    ],\n    \"apache_request_err_headers_out\": [\n        \"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all headers that go out in case of an error or a subrequest\"\n    ],\n    \"apache_request_headers\": [\n        \"array apache_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"apache_request_headers_in\": [\n        \"array apache_request_headers_in()\",\n        \"* fetch all incoming request headers\"\n    ],\n    \"apache_request_headers_out\": [\n        \"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all outgoing request headers\"\n    ],\n    \"apache_request_is_initial_req\": [\n        \"bool apache_request_is_initial_req()\",\n        \"\"\n    ],\n    \"apache_request_log_error\": [\n        \"boolean apache_request_log_error(string message, [long facility])\",\n        \"\"\n    ],\n    \"apache_request_meets_conditions\": [\n        \"long apache_request_meets_conditions()\",\n        \"\"\n    ],\n    \"apache_request_remote_host\": [\n        \"int apache_request_remote_host([int type])\",\n        \"\"\n    ],\n    \"apache_request_run\": [\n        \"long apache_request_run()\",\n        \"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"\n    ],\n    \"apache_request_satisfies\": [\n        \"long apache_request_satisfies()\",\n        \"\"\n    ],\n    \"apache_request_server_port\": [\n        \"int apache_request_server_port()\",\n        \"\"\n    ],\n    \"apache_request_set_etag\": [\n        \"void apache_request_set_etag()\",\n        \"\"\n    ],\n    \"apache_request_set_last_modified\": [\n        \"void apache_request_set_last_modified()\",\n        \"\"\n    ],\n    \"apache_request_some_auth_required\": [\n        \"bool apache_request_some_auth_required()\",\n        \"\"\n    ],\n    \"apache_request_sub_req_lookup_file\": [\n        \"object apache_request_sub_req_lookup_file(string file)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_sub_req_lookup_uri\": [\n        \"object apache_request_sub_req_lookup_uri(string uri)\",\n        \"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"\n    ],\n    \"apache_request_sub_req_method_uri\": [\n        \"object apache_request_sub_req_method_uri(string method, string uri)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_update_mtime\": [\n        \"long apache_request_update_mtime([int dependency_mtime])\",\n        \"\"\n    ],\n    \"apache_reset_timeout\": [\n        \"bool apache_reset_timeout(void)\",\n        \"Reset the Apache write timer\"\n    ],\n    \"apache_response_headers\": [\n        \"array apache_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"apache_setenv\": [\n        \"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\n        \"Set an Apache subprocess_env variable\"\n    ],\n    \"array_change_key_case\": [\n        \"array array_change_key_case(array input [, int case=CASE_LOWER])\",\n        \"Retuns an array with all string keys lowercased [or uppercased]\"\n    ],\n    \"array_chunk\": [\n        \"array array_chunk(array input, int size [, bool preserve_keys])\",\n        \"Split array into chunks\"\n    ],\n    \"array_combine\": [\n        \"array array_combine(array keys, array values)\",\n        \"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"\n    ],\n    \"array_count_values\": [\n        \"array array_count_values(array input)\",\n        \"Return the value as key and the frequency of that value in input as value\"\n    ],\n    \"array_diff\": [\n        \"array array_diff(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"\n    ],\n    \"array_diff_assoc\": [\n        \"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"\n    ],\n    \"array_diff_key\": [\n        \"array array_diff_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_diff_uassoc\": [\n        \"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"\n    ],\n    \"array_diff_ukey\": [\n        \"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_fill\": [\n        \"array array_fill(int start_key, int num, mixed val)\",\n        \"Create an array containing num elements starting with index start_key each initialized to val\"\n    ],\n    \"array_fill_keys\": [\n        \"array array_fill_keys(array keys, mixed val)\",\n        \"Create an array using the elements of the first parameter as keys each initialized to val\"\n    ],\n    \"array_filter\": [\n        \"array array_filter(array input [, mixed callback])\",\n        \"Filters elements from the array via the callback.\"\n    ],\n    \"array_flip\": [\n        \"array array_flip(array input)\",\n        \"Return array with key <-> value flipped\"\n    ],\n    \"array_intersect\": [\n        \"array array_intersect(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments\"\n    ],\n    \"array_intersect_assoc\": [\n        \"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"\n    ],\n    \"array_intersect_key\": [\n        \"array array_intersect_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"\n    ],\n    \"array_intersect_uassoc\": [\n        \"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"\n    ],\n    \"array_intersect_ukey\": [\n        \"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"\n    ],\n    \"array_key_exists\": [\n        \"bool array_key_exists(mixed key, array search)\",\n        \"Checks if the given key or index exists in the array\"\n    ],\n    \"array_keys\": [\n        \"array array_keys(array input [, mixed search_value[, bool strict]])\",\n        \"Return just the keys from the input array, optionally only for the specified search_value\"\n    ],\n    \"array_map\": [\n        \"array array_map(mixed callback, array input1 [, array input2 ,...])\",\n        \"Applies the callback to the elements in given arrays.\"\n    ],\n    \"array_merge\": [\n        \"array array_merge(array arr1, array arr2 [, array ...])\",\n        \"Merges elements from passed arrays into one array\"\n    ],\n    \"array_merge_recursive\": [\n        \"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively merges elements from passed arrays into one array\"\n    ],\n    \"array_multisort\": [\n        \"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\n        \"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"\n    ],\n    \"array_pad\": [\n        \"array array_pad(array input, int pad_size, mixed pad_value)\",\n        \"Returns a copy of input array padded with pad_value to size pad_size\"\n    ],\n    \"array_pop\": [\n        \"mixed array_pop(array stack)\",\n        \"Pops an element off the end of the array\"\n    ],\n    \"array_product\": [\n        \"mixed array_product(array input)\",\n        \"Returns the product of the array entries\"\n    ],\n    \"array_push\": [\n        \"int array_push(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the end of the array\"\n    ],\n    \"array_rand\": [\n        \"mixed array_rand(array input [, int num_req])\",\n        \"Return key/keys for random entry/entries in the array\"\n    ],\n    \"array_reduce\": [\n        \"mixed array_reduce(array input, mixed callback [, mixed initial])\",\n        \"Iteratively reduce the array to a single value via the callback.\"\n    ],\n    \"array_replace\": [\n        \"array array_replace(array arr1, array arr2 [, array ...])\",\n        \"Replaces elements from passed arrays into one array\"\n    ],\n    \"array_replace_recursive\": [\n        \"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively replaces elements from passed arrays into one array\"\n    ],\n    \"array_reverse\": [\n        \"array array_reverse(array input [, bool preserve keys])\",\n        \"Return input as a new array with the order of the entries reversed\"\n    ],\n    \"array_search\": [\n        \"mixed array_search(mixed needle, array haystack [, bool strict])\",\n        \"Searches the array for a given value and returns the corresponding key if successful\"\n    ],\n    \"array_shift\": [\n        \"mixed array_shift(array stack)\",\n        \"Pops an element off the beginning of the array\"\n    ],\n    \"array_slice\": [\n        \"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\n        \"Returns elements specified by offset and length\"\n    ],\n    \"array_splice\": [\n        \"array array_splice(array input, int offset [, int length [, array replacement]])\",\n        \"Removes the elements designated by offset and length and replace them with supplied array\"\n    ],\n    \"array_sum\": [\n        \"mixed array_sum(array input)\",\n        \"Returns the sum of the array entries\"\n    ],\n    \"array_udiff\": [\n        \"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"\n    ],\n    \"array_udiff_assoc\": [\n        \"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"\n    ],\n    \"array_udiff_uassoc\": [\n        \"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"\n    ],\n    \"array_uintersect\": [\n        \"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_assoc\": [\n        \"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_uassoc\": [\n        \"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"\n    ],\n    \"array_unique\": [\n        \"array array_unique(array input [, int sort_flags])\",\n        \"Removes duplicate values from array\"\n    ],\n    \"array_unshift\": [\n        \"int array_unshift(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the beginning of the array\"\n    ],\n    \"array_values\": [\n        \"array array_values(array input)\",\n        \"Return just the values from the input array\"\n    ],\n    \"array_walk\": [\n        \"bool array_walk(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function to every member of an array\"\n    ],\n    \"array_walk_recursive\": [\n        \"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function recursively to every member of an array\"\n    ],\n    \"arsort\": [\n        \"bool arsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order and maintain index association\"\n    ],\n    \"asin\": [\n        \"float asin(float number)\",\n        \"Returns the arc sine of the number in radians\"\n    ],\n    \"asinh\": [\n        \"float asinh(float number)\",\n        \"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"\n    ],\n    \"asort\": [\n        \"bool asort(array &array_arg [, int sort_flags])\",\n        \"Sort an array and maintain index association\"\n    ],\n    \"assert\": [\n        \"int assert(string|bool assertion)\",\n        \"Checks if assertion is false\"\n    ],\n    \"assert_options\": [\n        \"mixed assert_options(int what [, mixed value])\",\n        \"Set/get the various assert flags\"\n    ],\n    \"atan\": [\n        \"float atan(float number)\",\n        \"Returns the arc tangent of the number in radians\"\n    ],\n    \"atan2\": [\n        \"float atan2(float y, float x)\",\n        \"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"\n    ],\n    \"atanh\": [\n        \"float atanh(float number)\",\n        \"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"\n    ],\n    \"attachIterator\": [\n        \"void attachIterator(Iterator iterator[, mixed info])\",\n        \"Attach a new iterator\"\n    ],\n    \"base64_decode\": [\n        \"string base64_decode(string str[, bool strict])\",\n        \"Decodes string using MIME base64 algorithm\"\n    ],\n    \"base64_encode\": [\n        \"string base64_encode(string str)\",\n        \"Encodes string using MIME base64 algorithm\"\n    ],\n    \"base_convert\": [\n        \"string base_convert(string number, int frombase, int tobase)\",\n        \"Converts a number in a string from any base <= 36 to any base <= 36\"\n    ],\n    \"basename\": [\n        \"string basename(string path [, string suffix])\",\n        \"Returns the filename component of the path\"\n    ],\n    \"bcadd\": [\n        \"string bcadd(string left_operand, string right_operand [, int scale])\",\n        \"Returns the sum of two arbitrary precision numbers\"\n    ],\n    \"bccomp\": [\n        \"int bccomp(string left_operand, string right_operand [, int scale])\",\n        \"Compares two arbitrary precision numbers\"\n    ],\n    \"bcdiv\": [\n        \"string bcdiv(string left_operand, string right_operand [, int scale])\",\n        \"Returns the quotient of two arbitrary precision numbers (division)\"\n    ],\n    \"bcmod\": [\n        \"string bcmod(string left_operand, string right_operand)\",\n        \"Returns the modulus of the two arbitrary precision operands\"\n    ],\n    \"bcmul\": [\n        \"string bcmul(string left_operand, string right_operand [, int scale])\",\n        \"Returns the multiplication of two arbitrary precision numbers\"\n    ],\n    \"bcpow\": [\n        \"string bcpow(string x, string y [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another\"\n    ],\n    \"bcpowmod\": [\n        \"string bcpowmod(string x, string y, string mod [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"\n    ],\n    \"bcscale\": [\n        \"bool bcscale(int scale)\",\n        \"Sets default scale parameter for all bc math functions\"\n    ],\n    \"bcsqrt\": [\n        \"string bcsqrt(string operand [, int scale])\",\n        \"Returns the square root of an arbitray precision number\"\n    ],\n    \"bcsub\": [\n        \"string bcsub(string left_operand, string right_operand [, int scale])\",\n        \"Returns the difference between two arbitrary precision numbers\"\n    ],\n    \"bin2hex\": [\n        \"string bin2hex(string data)\",\n        \"Converts the binary representation of data to hex\"\n    ],\n    \"bind_textdomain_codeset\": [\n        \"string bind_textdomain_codeset (string domain, string codeset)\",\n        \"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"\n    ],\n    \"bindec\": [\n        \"int bindec(string binary_number)\",\n        \"Returns the decimal equivalent of the binary number\"\n    ],\n    \"bindtextdomain\": [\n        \"string bindtextdomain(string domain_name, string dir)\",\n        \"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"\n    ],\n    \"birdstep_autocommit\": [\n        \"bool birdstep_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_close\": [\n        \"bool birdstep_close(int id)\",\n        \"\"\n    ],\n    \"birdstep_commit\": [\n        \"bool birdstep_commit(int index)\",\n        \"\"\n    ],\n    \"birdstep_connect\": [\n        \"int birdstep_connect(string server, string user, string pass)\",\n        \"\"\n    ],\n    \"birdstep_exec\": [\n        \"int birdstep_exec(int index, string exec_str)\",\n        \"\"\n    ],\n    \"birdstep_fetch\": [\n        \"bool birdstep_fetch(int index)\",\n        \"\"\n    ],\n    \"birdstep_fieldname\": [\n        \"string birdstep_fieldname(int index, int col)\",\n        \"\"\n    ],\n    \"birdstep_fieldnum\": [\n        \"int birdstep_fieldnum(int index)\",\n        \"\"\n    ],\n    \"birdstep_freeresult\": [\n        \"bool birdstep_freeresult(int index)\",\n        \"\"\n    ],\n    \"birdstep_off_autocommit\": [\n        \"bool birdstep_off_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_result\": [\n        \"mixed birdstep_result(int index, mixed col)\",\n        \"\"\n    ],\n    \"birdstep_rollback\": [\n        \"bool birdstep_rollback(int index)\",\n        \"\"\n    ],\n    \"bzcompress\": [\n        \"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\n        \"Compresses a string into BZip2 encoded data\"\n    ],\n    \"bzdecompress\": [\n        \"string bzdecompress(string source [, int small])\",\n        \"Decompresses BZip2 compressed data\"\n    ],\n    \"bzerrno\": [\n        \"int bzerrno(resource bz)\",\n        \"Returns the error number\"\n    ],\n    \"bzerror\": [\n        \"array bzerror(resource bz)\",\n        \"Returns the error number and error string in an associative array\"\n    ],\n    \"bzerrstr\": [\n        \"string bzerrstr(resource bz)\",\n        \"Returns the error string\"\n    ],\n    \"bzopen\": [\n        \"resource bzopen(string|int file|fp, string mode)\",\n        \"Opens a new BZip2 stream\"\n    ],\n    \"bzread\": [\n        \"string bzread(resource bz[, int length])\",\n        \"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"\n    ],\n    \"cal_days_in_month\": [\n        \"int cal_days_in_month(int calendar, int month, int year)\",\n        \"Returns the number of days in a month for a given year and calendar\"\n    ],\n    \"cal_from_jd\": [\n        \"array cal_from_jd(int jd, int calendar)\",\n        \"Converts from Julian Day Count to a supported calendar and return extended information\"\n    ],\n    \"cal_info\": [\n        \"array cal_info([int calendar])\",\n        \"Returns information about a particular calendar\"\n    ],\n    \"cal_to_jd\": [\n        \"int cal_to_jd(int calendar, int month, int day, int year)\",\n        \"Converts from a supported calendar to Julian Day Count\"\n    ],\n    \"call_user_func\": [\n        \"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"call_user_func_array\": [\n        \"mixed call_user_func_array(string function_name, array parameters)\",\n        \"Call a user function which is the first parameter with the arguments contained in array\"\n    ],\n    \"call_user_method\": [\n        \"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\n        \"Call a user method on a specific object or class\"\n    ],\n    \"call_user_method_array\": [\n        \"mixed call_user_method_array(string method_name, mixed object, array params)\",\n        \"Call a user method on a specific object or class using a parameter array\"\n    ],\n    \"ceil\": [\n        \"float ceil(float number)\",\n        \"Returns the next highest integer value of the number\"\n    ],\n    \"chdir\": [\n        \"bool chdir(string directory)\",\n        \"Change the current directory\"\n    ],\n    \"checkdate\": [\n        \"bool checkdate(int month, int day, int year)\",\n        \"Returns true(1) if it is a valid date in gregorian calendar\"\n    ],\n    \"chgrp\": [\n        \"bool chgrp(string filename, mixed group)\",\n        \"Change file group\"\n    ],\n    \"chmod\": [\n        \"bool chmod(string filename, int mode)\",\n        \"Change file mode\"\n    ],\n    \"chown\": [\n        \"bool chown (string filename, mixed user)\",\n        \"Change file owner\"\n    ],\n    \"chr\": [\n        \"string chr(int ascii)\",\n        \"Converts ASCII code to a character\"\n    ],\n    \"chroot\": [\n        \"bool chroot(string directory)\",\n        \"Change root directory\"\n    ],\n    \"chunk_split\": [\n        \"string chunk_split(string str [, int chunklen [, string ending]])\",\n        \"Returns split line\"\n    ],\n    \"class_alias\": [\n        \"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\n        \"Creates an alias for user defined class\"\n    ],\n    \"class_exists\": [\n        \"bool class_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"class_implements\": [\n        \"array class_implements(mixed what [, bool autoload ])\",\n        \"Return all classes and interfaces implemented by SPL\"\n    ],\n    \"class_parents\": [\n        \"array class_parents(object instance [, boolean autoload = true])\",\n        \"Return an array containing the names of all parent classes\"\n    ],\n    \"clearstatcache\": [\n        \"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\n        \"Clear file stat cache\"\n    ],\n    \"closedir\": [\n        \"void closedir([resource dir_handle])\",\n        \"Close directory connection identified by the dir_handle\"\n    ],\n    \"closelog\": [\n        \"bool closelog(void)\",\n        \"Close connection to system logger\"\n    ],\n    \"collator_asort\": [\n        \"bool collator_asort( Collator $coll, array(string) $arr )\",\n        \"* Sort array using specified collator, maintaining index association.\"\n    ],\n    \"collator_compare\": [\n        \"int collator_compare( Collator $coll, string $str1, string $str2 )\",\n        \"* Compare two strings.\"\n    ],\n    \"collator_create\": [\n        \"Collator collator_create( string $locale )\",\n        \"* Create collator.\"\n    ],\n    \"collator_get_attribute\": [\n        \"int collator_get_attribute( Collator $coll, int $attr )\",\n        \"* Get collation attribute value.\"\n    ],\n    \"collator_get_error_code\": [\n        \"int collator_get_error_code( Collator $coll )\",\n        \"* Get collator's last error code.\"\n    ],\n    \"collator_get_error_message\": [\n        \"string collator_get_error_message( Collator $coll )\",\n        \"* Get text description for collator's last error code.\"\n    ],\n    \"collator_get_locale\": [\n        \"string collator_get_locale( Collator $coll, int $type )\",\n        \"* Gets the locale name of the collator.\"\n    ],\n    \"collator_get_sort_key\": [\n        \"bool collator_get_sort_key( Collator $coll, string $str )\",\n        \"* Get a sort key for a string from a Collator. }}}\"\n    ],\n    \"collator_get_strength\": [\n        \"int collator_get_strength(Collator coll)\",\n        \"* Returns the current collation strength.\"\n    ],\n    \"collator_set_attribute\": [\n        \"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\n        \"* Set collation attribute.\"\n    ],\n    \"collator_set_strength\": [\n        \"bool collator_set_strength(Collator coll, int strength)\",\n        \"* Set the collation strength.\"\n    ],\n    \"collator_sort\": [\n        \"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\n        \"* Sort array using specified collator.\"\n    ],\n    \"collator_sort_with_sort_keys\": [\n        \"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\n        \"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"\n    ],\n    \"com_create_guid\": [\n        \"string com_create_guid()\",\n        \"Generate a globally unique identifier (GUID)\"\n    ],\n    \"com_event_sink\": [\n        \"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\n        \"Connect events from a COM object to a PHP object\"\n    ],\n    \"com_get_active_object\": [\n        \"object com_get_active_object(string progid [, int code_page ])\",\n        \"Returns a handle to an already running instance of a COM object\"\n    ],\n    \"com_load_typelib\": [\n        \"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\n        \"Loads a Typelibrary and registers its constants\"\n    ],\n    \"com_message_pump\": [\n        \"bool com_message_pump([int timeoutms])\",\n        \"Process COM messages, sleeping for up to timeoutms milliseconds\"\n    ],\n    \"com_print_typeinfo\": [\n        \"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\n        \"Print out a PHP class definition for a dispatchable interface\"\n    ],\n    \"compact\": [\n        \"array compact(mixed var_names [, mixed ...])\",\n        \"Creates a hash containing variables and their values\"\n    ],\n    \"compose_locale\": [\n        \"static string compose_locale($array)\",\n        \"* Creates a locale by combining the parts of locale-ID passed  * }}}\"\n    ],\n    \"confirm_extname_compiled\": [\n        \"string confirm_extname_compiled(string arg)\",\n        \"Return a string to confirm that the module is compiled in\"\n    ],\n    \"connection_aborted\": [\n        \"int connection_aborted(void)\",\n        \"Returns true if client disconnected\"\n    ],\n    \"connection_status\": [\n        \"int connection_status(void)\",\n        \"Returns the connection status bitfield\"\n    ],\n    \"constant\": [\n        \"mixed constant(string const_name)\",\n        \"Given the name of a constant this function will return the constant's associated value\"\n    ],\n    \"convert_cyr_string\": [\n        \"string convert_cyr_string(string str, string from, string to)\",\n        \"Convert from one Cyrillic character set to another\"\n    ],\n    \"convert_uudecode\": [\n        \"string convert_uudecode(string data)\",\n        \"decode a uuencoded string\"\n    ],\n    \"convert_uuencode\": [\n        \"string convert_uuencode(string data)\",\n        \"uuencode a string\"\n    ],\n    \"copy\": [\n        \"bool copy(string source_file, string destination_file [, resource context])\",\n        \"Copy a file\"\n    ],\n    \"cos\": [\n        \"float cos(float number)\",\n        \"Returns the cosine of the number in radians\"\n    ],\n    \"cosh\": [\n        \"float cosh(float number)\",\n        \"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"\n    ],\n    \"count\": [\n        \"int count(mixed var [, int mode])\",\n        \"Count the number of elements in a variable (usually an array)\"\n    ],\n    \"count_chars\": [\n        \"mixed count_chars(string input [, int mode])\",\n        \"Returns info about what characters are used in input\"\n    ],\n    \"crc32\": [\n        \"string crc32(string str)\",\n        \"Calculate the crc32 polynomial of a string\"\n    ],\n    \"create_function\": [\n        \"string create_function(string args, string code)\",\n        \"Creates an anonymous function, and returns its name (funny, eh?)\"\n    ],\n    \"crypt\": [\n        \"string crypt(string str [, string salt])\",\n        \"Hash a string\"\n    ],\n    \"ctype_alnum\": [\n        \"bool ctype_alnum(mixed c)\",\n        \"Checks for alphanumeric character(s)\"\n    ],\n    \"ctype_alpha\": [\n        \"bool ctype_alpha(mixed c)\",\n        \"Checks for alphabetic character(s)\"\n    ],\n    \"ctype_cntrl\": [\n        \"bool ctype_cntrl(mixed c)\",\n        \"Checks for control character(s)\"\n    ],\n    \"ctype_digit\": [\n        \"bool ctype_digit(mixed c)\",\n        \"Checks for numeric character(s)\"\n    ],\n    \"ctype_graph\": [\n        \"bool ctype_graph(mixed c)\",\n        \"Checks for any printable character(s) except space\"\n    ],\n    \"ctype_lower\": [\n        \"bool ctype_lower(mixed c)\",\n        \"Checks for lowercase character(s)\"\n    ],\n    \"ctype_print\": [\n        \"bool ctype_print(mixed c)\",\n        \"Checks for printable character(s)\"\n    ],\n    \"ctype_punct\": [\n        \"bool ctype_punct(mixed c)\",\n        \"Checks for any printable character which is not whitespace or an alphanumeric character\"\n    ],\n    \"ctype_space\": [\n        \"bool ctype_space(mixed c)\",\n        \"Checks for whitespace character(s)\"\n    ],\n    \"ctype_upper\": [\n        \"bool ctype_upper(mixed c)\",\n        \"Checks for uppercase character(s)\"\n    ],\n    \"ctype_xdigit\": [\n        \"bool ctype_xdigit(mixed c)\",\n        \"Checks for character(s) representing a hexadecimal digit\"\n    ],\n    \"curl_close\": [\n        \"void curl_close(resource ch)\",\n        \"Close a cURL session\"\n    ],\n    \"curl_copy_handle\": [\n        \"resource curl_copy_handle(resource ch)\",\n        \"Copy a cURL handle along with all of it's preferences\"\n    ],\n    \"curl_errno\": [\n        \"int curl_errno(resource ch)\",\n        \"Return an integer containing the last error number\"\n    ],\n    \"curl_error\": [\n        \"string curl_error(resource ch)\",\n        \"Return a string contain the last error for the current session\"\n    ],\n    \"curl_exec\": [\n        \"bool curl_exec(resource ch)\",\n        \"Perform a cURL session\"\n    ],\n    \"curl_getinfo\": [\n        \"mixed curl_getinfo(resource ch [, int option])\",\n        \"Get information regarding a specific transfer\"\n    ],\n    \"curl_init\": [\n        \"resource curl_init([string url])\",\n        \"Initialize a cURL session\"\n    ],\n    \"curl_multi_add_handle\": [\n        \"int curl_multi_add_handle(resource mh, resource ch)\",\n        \"Add a normal cURL handle to a cURL multi handle\"\n    ],\n    \"curl_multi_close\": [\n        \"void curl_multi_close(resource mh)\",\n        \"Close a set of cURL handles\"\n    ],\n    \"curl_multi_exec\": [\n        \"int curl_multi_exec(resource mh, int &still_running)\",\n        \"Run the sub-connections of the current cURL handle\"\n    ],\n    \"curl_multi_getcontent\": [\n        \"string curl_multi_getcontent(resource ch)\",\n        \"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"\n    ],\n    \"curl_multi_info_read\": [\n        \"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\n        \"Get information about the current transfers\"\n    ],\n    \"curl_multi_init\": [\n        \"resource curl_multi_init(void)\",\n        \"Returns a new cURL multi handle\"\n    ],\n    \"curl_multi_remove_handle\": [\n        \"int curl_multi_remove_handle(resource mh, resource ch)\",\n        \"Remove a multi handle from a set of cURL handles\"\n    ],\n    \"curl_multi_select\": [\n        \"int curl_multi_select(resource mh[, double timeout])\",\n        \"Get all the sockets associated with the cURL extension, which can then be \\\"selected\\\"\"\n    ],\n    \"curl_setopt\": [\n        \"bool curl_setopt(resource ch, int option, mixed value)\",\n        \"Set an option for a cURL transfer\"\n    ],\n    \"curl_setopt_array\": [\n        \"bool curl_setopt_array(resource ch, array options)\",\n        \"Set an array of option for a cURL transfer\"\n    ],\n    \"curl_version\": [\n        \"array curl_version([int version])\",\n        \"Return cURL version information.\"\n    ],\n    \"current\": [\n        \"mixed current(array array_arg)\",\n        \"Return the element currently pointed to by the internal array pointer\"\n    ],\n    \"date\": [\n        \"string date(string format [, long timestamp])\",\n        \"Format a local date/time\"\n    ],\n    \"date_add\": [\n        \"DateTime date_add(DateTime object, DateInterval interval)\",\n        \"Adds an interval to the current date in object.\"\n    ],\n    \"date_create\": [\n        \"DateTime date_create([string time[, DateTimeZone object]])\",\n        \"Returns new DateTime object\"\n    ],\n    \"date_create_from_format\": [\n        \"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\n        \"Returns new DateTime object formatted according to the specified format\"\n    ],\n    \"date_date_set\": [\n        \"DateTime date_date_set(DateTime object, long year, long month, long day)\",\n        \"Sets the date.\"\n    ],\n    \"date_default_timezone_get\": [\n        \"string date_default_timezone_get()\",\n        \"Gets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_default_timezone_set\": [\n        \"bool date_default_timezone_set(string timezone_identifier)\",\n        \"Sets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_diff\": [\n        \"DateInterval date_diff(DateTime object [, bool absolute])\",\n        \"Returns the difference between two DateTime objects.\"\n    ],\n    \"date_format\": [\n        \"string date_format(DateTime object, string format)\",\n        \"Returns date formatted according to given format\"\n    ],\n    \"date_get_last_errors\": [\n        \"array date_get_last_errors()\",\n        \"Returns the warnings and errors found while parsing a date/time string.\"\n    ],\n    \"date_interval_create_from_date_string\": [\n        \"DateInterval date_interval_create_from_date_string(string time)\",\n        \"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"\n    ],\n    \"date_interval_format\": [\n        \"string date_interval_format(DateInterval object, string format)\",\n        \"Formats the interval.\"\n    ],\n    \"date_isodate_set\": [\n        \"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\n        \"Sets the ISO date.\"\n    ],\n    \"date_modify\": [\n        \"DateTime date_modify(DateTime object, string modify)\",\n        \"Alters the timestamp.\"\n    ],\n    \"date_offset_get\": [\n        \"long date_offset_get(DateTime object)\",\n        \"Returns the DST offset.\"\n    ],\n    \"date_parse\": [\n        \"array date_parse(string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_parse_from_format\": [\n        \"array date_parse_from_format(string format, string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_sub\": [\n        \"DateTime date_sub(DateTime object, DateInterval interval)\",\n        \"Subtracts an interval to the current date in object.\"\n    ],\n    \"date_sun_info\": [\n        \"array date_sun_info(long time, float latitude, float longitude)\",\n        \"Returns an array with information about sun set/rise and twilight begin/end\"\n    ],\n    \"date_sunrise\": [\n        \"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunrise for a given day and location\"\n    ],\n    \"date_sunset\": [\n        \"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunset for a given day and location\"\n    ],\n    \"date_time_set\": [\n        \"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\n        \"Sets the time.\"\n    ],\n    \"date_timestamp_get\": [\n        \"long date_timestamp_get(DateTime object)\",\n        \"Gets the Unix timestamp.\"\n    ],\n    \"date_timestamp_set\": [\n        \"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\n        \"Sets the date and time based on an Unix timestamp.\"\n    ],\n    \"date_timezone_get\": [\n        \"DateTimeZone date_timezone_get(DateTime object)\",\n        \"Return new DateTimeZone object relative to give DateTime\"\n    ],\n    \"date_timezone_set\": [\n        \"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\n        \"Sets the timezone for the DateTime object.\"\n    ],\n    \"datefmt_create\": [\n        \"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\n        \"* Create formatter.\"\n    ],\n    \"datefmt_format\": [\n        \"string datefmt_format( [mixed]int $args or array $args )\",\n        \"* Format the time value as a string. }}}\"\n    ],\n    \"datefmt_get_calendar\": [\n        \"string datefmt_get_calendar( IntlDateFormatter $mf )\",\n        \"* Get formatter calendar.\"\n    ],\n    \"datefmt_get_datetype\": [\n        \"string datefmt_get_datetype( IntlDateFormatter $mf )\",\n        \"* Get formatter datetype.\"\n    ],\n    \"datefmt_get_error_code\": [\n        \"int datefmt_get_error_code( IntlDateFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"datefmt_get_error_message\": [\n        \"string datefmt_get_error_message( IntlDateFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"datefmt_get_locale\": [\n        \"string datefmt_get_locale(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_get_pattern\": [\n        \"string datefmt_get_pattern( IntlDateFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"datefmt_get_timetype\": [\n        \"string datefmt_get_timetype( IntlDateFormatter $mf )\",\n        \"* Get formatter timetype.\"\n    ],\n    \"datefmt_get_timezone_id\": [\n        \"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\n        \"* Get formatter timezone_id.\"\n    ],\n    \"datefmt_isLenient\": [\n        \"string datefmt_isLenient(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_localtime\": [\n        \"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\n        \"* Parse the string $value to a localtime array  }}}\"\n    ],\n    \"datefmt_parse\": [\n        \"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\n        \"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"\n    ],\n    \"datefmt_setLenient\": [\n        \"string datefmt_setLenient(IntlDateFormatter $mf)\",\n        \"* Set formatter lenient.\"\n    ],\n    \"datefmt_set_calendar\": [\n        \"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\n        \"* Set formatter calendar.\"\n    ],\n    \"datefmt_set_pattern\": [\n        \"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"datefmt_set_timezone_id\": [\n        \"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\n        \"* Set formatter timezone_id.\"\n    ],\n    \"dba_close\": [\n        \"void dba_close(resource handle)\",\n        \"Closes database\"\n    ],\n    \"dba_delete\": [\n        \"bool dba_delete(string key, resource handle)\",\n        \"Deletes the entry associated with key    If inifile: remove all other key lines\"\n    ],\n    \"dba_exists\": [\n        \"bool dba_exists(string key, resource handle)\",\n        \"Checks, if the specified key exists\"\n    ],\n    \"dba_fetch\": [\n        \"string dba_fetch(string key, [int skip ,] resource handle)\",\n        \"Fetches the data associated with key\"\n    ],\n    \"dba_firstkey\": [\n        \"string dba_firstkey(resource handle)\",\n        \"Resets the internal key pointer and returns the first key\"\n    ],\n    \"dba_handlers\": [\n        \"array dba_handlers([bool full_info])\",\n        \"List configured database handlers\"\n    ],\n    \"dba_insert\": [\n        \"bool dba_insert(string key, string value, resource handle)\",\n        \"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"\n    ],\n    \"dba_key_split\": [\n        \"array|false dba_key_split(string key)\",\n        \"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"\n    ],\n    \"dba_list\": [\n        \"array dba_list()\",\n        \"List opened databases\"\n    ],\n    \"dba_nextkey\": [\n        \"string dba_nextkey(resource handle)\",\n        \"Returns the next key\"\n    ],\n    \"dba_open\": [\n        \"resource dba_open(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode\"\n    ],\n    \"dba_optimize\": [\n        \"bool dba_optimize(resource handle)\",\n        \"Optimizes (e.g. clean up, vacuum) database\"\n    ],\n    \"dba_popen\": [\n        \"resource dba_popen(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode persistently\"\n    ],\n    \"dba_replace\": [\n        \"bool dba_replace(string key, string value, resource handle)\",\n        \"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"\n    ],\n    \"dba_sync\": [\n        \"bool dba_sync(resource handle)\",\n        \"Synchronizes database\"\n    ],\n    \"dcgettext\": [\n        \"string dcgettext(string domain_name, string msgid, long category)\",\n        \"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"\n    ],\n    \"dcngettext\": [\n        \"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\n        \"Plural version of dcgettext()\"\n    ],\n    \"debug_backtrace\": [\n        \"array debug_backtrace([bool provide_object])\",\n        \"Return backtrace as array\"\n    ],\n    \"debug_print_backtrace\": [\n        \"void debug_print_backtrace(void) */\",\n        \"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"\n    ],\n    \"dom_document_relaxNG_validate_xml\": [\n        \"boolean dom_document_relaxNG_validate_xml(string source); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"\n    ],\n    \"dom_document_rename_node\": [\n        \"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"\n    ],\n    \"dom_document_save\": [\n        \"int dom_document_save(string file);\",\n        \"Convenience method to save to file\"\n    ],\n    \"dom_document_save_html\": [\n        \"string dom_document_save_html();\",\n        \"Convenience method to output as html\"\n    ],\n    \"dom_document_save_html_file\": [\n        \"int dom_document_save_html_file(string file);\",\n        \"Convenience method to save to file as html\"\n    ],\n    \"dom_document_savexml\": [\n        \"string dom_document_savexml([node n]);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"\n    ],\n    \"dom_document_schema_validate\": [\n        \"boolean dom_document_schema_validate(string source); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"\n    ],\n    \"dom_document_schema_validate_file\": [\n        \"boolean dom_document_schema_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"\n    ],\n    \"dom_document_validate\": [\n        \"boolean dom_document_validate();\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_xinclude\": [\n        \"int dom_document_xinclude([int options])\",\n        \"Substitutues xincludes in a DomDocument\"\n    ],\n    \"dom_domconfiguration_can_set_parameter\": [\n        \"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"\n    ],\n    \"dom_domconfiguration_get_parameter\": [\n        \"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"\n    ],\n    \"dom_domconfiguration_set_parameter\": [\n        \"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"\n    ],\n    \"dom_domerrorhandler_handle_error\": [\n        \"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"\n    ],\n    \"dom_domimplementation_create_document\": [\n        \"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_create_document_type\": [\n        \"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_get_feature\": [\n        \"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_domimplementation_has_feature\": [\n        \"boolean dom_domimplementation_has_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"\n    ],\n    \"dom_domimplementationlist_item\": [\n        \"domdomimplementation dom_domimplementationlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementation\": [\n        \"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementations\": [\n        \"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"\n    ],\n    \"dom_domstringlist_item\": [\n        \"domstring dom_domstringlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"\n    ],\n    \"dom_element_get_attribute\": [\n        \"string dom_element_get_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"\n    ],\n    \"dom_element_get_attribute_node\": [\n        \"DOMAttr dom_element_get_attribute_node(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"\n    ],\n    \"dom_element_get_attribute_node_ns\": [\n        \"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_attribute_ns\": [\n        \"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"\n    ],\n    \"dom_element_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute\": [\n        \"boolean dom_element_has_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute_ns\": [\n        \"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_remove_attribute\": [\n        \"void dom_element_remove_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"\n    ],\n    \"dom_element_remove_attribute_node\": [\n        \"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"\n    ],\n    \"dom_element_remove_attribute_ns\": [\n        \"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute\": [\n        \"void dom_element_set_attribute(string name, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"\n    ],\n    \"dom_element_set_attribute_node\": [\n        \"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"\n    ],\n    \"dom_element_set_attribute_node_ns\": [\n        \"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute_ns\": [\n        \"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_id_attribute\": [\n        \"void dom_element_set_id_attribute(string name, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_node\": [\n        \"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_ns\": [\n        \"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"\n    ],\n    \"dom_import_simplexml\": [\n        \"somNode dom_import_simplexml(sxeobject node)\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"dom_namednodemap_get_named_item\": [\n        \"DOMNode dom_namednodemap_get_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"\n    ],\n    \"dom_namednodemap_get_named_item_ns\": [\n        \"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_item\": [\n        \"DOMNode dom_namednodemap_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item\": [\n        \"DOMNode dom_namednodemap_remove_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item_ns\": [\n        \"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_set_named_item\": [\n        \"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"\n    ],\n    \"dom_namednodemap_set_named_item_ns\": [\n        \"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namelist_get_name\": [\n        \"string dom_namelist_get_name(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"\n    ],\n    \"dom_namelist_get_namespace_uri\": [\n        \"string dom_namelist_get_namespace_uri(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"\n    ],\n    \"dom_node_append_child\": [\n        \"DomNode dom_node_append_child(DomNode newChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"\n    ],\n    \"dom_node_clone_node\": [\n        \"DomNode dom_node_clone_node(boolean deep);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"\n    ],\n    \"dom_node_compare_document_position\": [\n        \"short dom_node_compare_document_position(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"\n    ],\n    \"dom_node_get_feature\": [\n        \"DomNode dom_node_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_node_get_user_data\": [\n        \"mixed dom_node_get_user_data(string key);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"\n    ],\n    \"dom_node_has_attributes\": [\n        \"boolean dom_node_has_attributes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"\n    ],\n    \"dom_node_has_child_nodes\": [\n        \"boolean dom_node_has_child_nodes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"\n    ],\n    \"dom_node_insert_before\": [\n        \"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"\n    ],\n    \"dom_node_is_default_namespace\": [\n        \"boolean dom_node_is_default_namespace(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"\n    ],\n    \"dom_node_is_equal_node\": [\n        \"boolean dom_node_is_equal_node(DomNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_same_node\": [\n        \"boolean dom_node_is_same_node(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_supported\": [\n        \"boolean dom_node_is_supported(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"\n    ],\n    \"dom_node_lookup_namespace_uri\": [\n        \"string dom_node_lookup_namespace_uri(string prefix);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"\n    ],\n    \"dom_node_lookup_prefix\": [\n        \"string dom_node_lookup_prefix(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"\n    ],\n    \"dom_node_normalize\": [\n        \"void dom_node_normalize();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"\n    ],\n    \"dom_node_remove_child\": [\n        \"DomNode dom_node_remove_child(DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"\n    ],\n    \"dom_node_replace_child\": [\n        \"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"\n    ],\n    \"dom_node_set_user_data\": [\n        \"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"\n    ],\n    \"dom_nodelist_item\": [\n        \"DOMNode dom_nodelist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"\n    ],\n    \"dom_string_extend_find_offset16\": [\n        \"int dom_string_extend_find_offset16(int offset32);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"\n    ],\n    \"dom_string_extend_find_offset32\": [\n        \"int dom_string_extend_find_offset32(int offset16);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"\n    ],\n    \"dom_text_is_whitespace_in_element_content\": [\n        \"boolean dom_text_is_whitespace_in_element_content();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"\n    ],\n    \"dom_text_replace_whole_text\": [\n        \"DOMText dom_text_replace_whole_text(string content);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"\n    ],\n    \"dom_text_split_text\": [\n        \"DOMText dom_text_split_text(int offset);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"\n    ],\n    \"dom_userdatahandler_handle\": [\n        \"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"\n    ],\n    \"dom_xpath_evaluate\": [\n        \"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"\n    ],\n    \"dom_xpath_query\": [\n        \"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"\n    ],\n    \"dom_xpath_register_ns\": [\n        \"boolean dom_xpath_register_ns(string prefix, string uri); */\",\n        \"PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Oss\\\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid XPath Context\\\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}\"\n    ],\n    \"dom_xpath_register_php_functions\": [\n        \"void dom_xpath_register_php_functions() */\",\n        \"PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"a\\\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions\"\n    ],\n    \"each\": [\n        \"array each(array arr)\",\n        \"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"\n    ],\n    \"easter_date\": [\n        \"int easter_date([int year])\",\n        \"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"\n    ],\n    \"easter_days\": [\n        \"int easter_days([int year, [int method]])\",\n        \"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"\n    ],\n    \"echo\": [\n        \"void echo(string arg1 [, string ...])\",\n        \"Output one or more strings\"\n    ],\n    \"empty\": [\n        \"bool empty( mixed var )\",\n        \"Determine whether a variable is empty\"\n    ],\n    \"enchant_broker_describe\": [\n        \"array enchant_broker_describe(resource broker)\",\n        \"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"\n    ],\n    \"enchant_broker_dict_exists\": [\n        \"bool enchant_broker_dict_exists(resource broker, string tag)\",\n        \"Whether a dictionary exists or not. Using non-empty tag\"\n    ],\n    \"enchant_broker_free\": [\n        \"boolean enchant_broker_free(resource broker)\",\n        \"Destroys the broker object and its dictionnaries\"\n    ],\n    \"enchant_broker_free_dict\": [\n        \"resource enchant_broker_free_dict(resource dict)\",\n        \"Free the dictionary resource\"\n    ],\n    \"enchant_broker_get_dict_path\": [\n        \"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\n        \"Get the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_get_error\": [\n        \"string enchant_broker_get_error(resource broker)\",\n        \"Returns the last error of the broker\"\n    ],\n    \"enchant_broker_init\": [\n        \"resource enchant_broker_init()\",\n        \"create a new broker object capable of requesting\"\n    ],\n    \"enchant_broker_list_dicts\": [\n        \"string enchant_broker_list_dicts(resource broker)\",\n        \"Lists the dictionaries available for the given broker\"\n    ],\n    \"enchant_broker_request_dict\": [\n        \"resource enchant_broker_request_dict(resource broker, string tag)\",\n        \"create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\\\"en_US\\\", \\\"de_DE\\\", ...)\"\n    ],\n    \"enchant_broker_request_pwl_dict\": [\n        \"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\n        \"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"\n    ],\n    \"enchant_broker_set_dict_path\": [\n        \"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\n        \"Set the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_set_ordering\": [\n        \"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\n        \"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"\n    ],\n    \"enchant_dict_add_to_personal\": [\n        \"void enchant_dict_add_to_personal(resource dict, string word)\",\n        \"add 'word' to personal word list\"\n    ],\n    \"enchant_dict_add_to_session\": [\n        \"void enchant_dict_add_to_session(resource dict, string word)\",\n        \"add 'word' to this spell-checking session\"\n    ],\n    \"enchant_dict_check\": [\n        \"bool enchant_dict_check(resource dict, string word)\",\n        \"If the word is correctly spelled return true, otherwise return false\"\n    ],\n    \"enchant_dict_describe\": [\n        \"array enchant_dict_describe(resource dict)\",\n        \"Describes an individual dictionary 'dict'\"\n    ],\n    \"enchant_dict_get_error\": [\n        \"string enchant_dict_get_error(resource dict)\",\n        \"Returns the last error of the current spelling-session\"\n    ],\n    \"enchant_dict_is_in_session\": [\n        \"bool enchant_dict_is_in_session(resource dict, string word)\",\n        \"whether or not 'word' exists in this spelling-session\"\n    ],\n    \"enchant_dict_quick_check\": [\n        \"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\n        \"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"\n    ],\n    \"enchant_dict_store_replacement\": [\n        \"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\n        \"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"\n    ],\n    \"enchant_dict_suggest\": [\n        \"array enchant_dict_suggest(resource dict, string word)\",\n        \"Will return a list of values if any of those pre-conditions are not met.\"\n    ],\n    \"end\": [\n        \"mixed end(array array_arg)\",\n        \"Advances array argument's internal pointer to the last element and return it\"\n    ],\n    \"ereg\": [\n        \"int ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match\"\n    ],\n    \"ereg_replace\": [\n        \"string ereg_replace(string pattern, string replacement, string string)\",\n        \"Replace regular expression\"\n    ],\n    \"eregi\": [\n        \"int eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match\"\n    ],\n    \"eregi_replace\": [\n        \"string eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression\"\n    ],\n    \"error_get_last\": [\n        \"array error_get_last()\",\n        \"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"\n    ],\n    \"error_log\": [\n        \"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\n        \"Send an error message somewhere\"\n    ],\n    \"error_reporting\": [\n        \"int error_reporting([int new_error_level])\",\n        \"Return the current error_reporting level, and if an argument was passed - change to the new level\"\n    ],\n    \"escapeshellarg\": [\n        \"string escapeshellarg(string arg)\",\n        \"Quote and escape an argument for use in a shell command\"\n    ],\n    \"escapeshellcmd\": [\n        \"string escapeshellcmd(string command)\",\n        \"Escape shell metacharacters\"\n    ],\n    \"exec\": [\n        \"string exec(string command [, array &output [, int &return_value]])\",\n        \"Execute an external program\"\n    ],\n    \"exif_imagetype\": [\n        \"int exif_imagetype(string imagefile)\",\n        \"Get the type of an image\"\n    ],\n    \"exif_read_data\": [\n        \"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\n        \"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"\n    ],\n    \"exif_tagname\": [\n        \"string exif_tagname(index)\",\n        \"Get headername for index or false if not defined\"\n    ],\n    \"exif_thumbnail\": [\n        \"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\n        \"Reads the embedded thumbnail\"\n    ],\n    \"exit\": [\n        \"void exit([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"exp\": [\n        \"float exp(float number)\",\n        \"Returns e raised to the power of the number\"\n    ],\n    \"explode\": [\n        \"array explode(string separator, string str [, int limit])\",\n        \"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"\n    ],\n    \"expm1\": [\n        \"float expm1(float number)\",\n        \"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"extension_loaded\": [\n        \"bool extension_loaded(string extension_name)\",\n        \"Returns true if the named extension is loaded\"\n    ],\n    \"extract\": [\n        \"int extract(array var_array [, int extract_type [, string prefix]])\",\n        \"Imports variables into symbol table from an array\"\n    ],\n    \"ezmlm_hash\": [\n        \"int ezmlm_hash(string addr)\",\n        \"Calculate EZMLM list hash value.\"\n    ],\n    \"fclose\": [\n        \"bool fclose(resource fp)\",\n        \"Close an open file pointer\"\n    ],\n    \"feof\": [\n        \"bool feof(resource fp)\",\n        \"Test for end-of-file on a file pointer\"\n    ],\n    \"fflush\": [\n        \"bool fflush(resource fp)\",\n        \"Flushes output\"\n    ],\n    \"fgetc\": [\n        \"string fgetc(resource fp)\",\n        \"Get a character from file pointer\"\n    ],\n    \"fgetcsv\": [\n        \"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\n        \"Get line from file pointer and parse for CSV fields\"\n    ],\n    \"fgets\": [\n        \"string fgets(resource fp[, int length])\",\n        \"Get a line from file pointer\"\n    ],\n    \"fgetss\": [\n        \"string fgetss(resource fp [, int length [, string allowable_tags]])\",\n        \"Get a line from file pointer and strip HTML tags\"\n    ],\n    \"file\": [\n        \"array file(string filename [, int flags[, resource context]])\",\n        \"Read entire file into an array\"\n    ],\n    \"file_exists\": [\n        \"bool file_exists(string filename)\",\n        \"Returns true if filename exists\"\n    ],\n    \"file_get_contents\": [\n        \"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\n        \"Read the entire file into a string\"\n    ],\n    \"file_put_contents\": [\n        \"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\n        \"Write/Create a file with contents data and return the number of bytes written\"\n    ],\n    \"fileatime\": [\n        \"int fileatime(string filename)\",\n        \"Get last access time of file\"\n    ],\n    \"filectime\": [\n        \"int filectime(string filename)\",\n        \"Get inode modification time of file\"\n    ],\n    \"filegroup\": [\n        \"int filegroup(string filename)\",\n        \"Get file group\"\n    ],\n    \"fileinode\": [\n        \"int fileinode(string filename)\",\n        \"Get file inode\"\n    ],\n    \"filemtime\": [\n        \"int filemtime(string filename)\",\n        \"Get last modification time of file\"\n    ],\n    \"fileowner\": [\n        \"int fileowner(string filename)\",\n        \"Get file owner\"\n    ],\n    \"fileperms\": [\n        \"int fileperms(string filename)\",\n        \"Get file permissions\"\n    ],\n    \"filesize\": [\n        \"int filesize(string filename)\",\n        \"Get file size\"\n    ],\n    \"filetype\": [\n        \"string filetype(string filename)\",\n        \"Get file type\"\n    ],\n    \"filter_has_var\": [\n        \"mixed filter_has_var(constant type, string variable_name)\",\n        \"* Returns true if the variable with the name 'name' exists in source.\"\n    ],\n    \"filter_input\": [\n        \"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\n        \"* Returns the filtered variable 'name'* from source `type`.\"\n    ],\n    \"filter_input_array\": [\n        \"mixed filter_input_array(constant type, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"filter_var\": [\n        \"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\n        \"* Returns the filtered version of the vriable.\"\n    ],\n    \"filter_var_array\": [\n        \"mixed filter_var_array(array data, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"finfo_buffer\": [\n        \"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\n        \"Return infromation about a string buffer.\"\n    ],\n    \"finfo_close\": [\n        \"resource finfo_close(resource finfo)\",\n        \"Close fileinfo resource.\"\n    ],\n    \"finfo_file\": [\n        \"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\n        \"Return information about a file.\"\n    ],\n    \"finfo_open\": [\n        \"resource finfo_open([int options [, string arg]])\",\n        \"Create a new fileinfo resource.\"\n    ],\n    \"finfo_set_flags\": [\n        \"bool finfo_set_flags(resource finfo, int options)\",\n        \"Set libmagic configuration options.\"\n    ],\n    \"floatval\": [\n        \"float floatval(mixed var)\",\n        \"Get the float value of a variable\"\n    ],\n    \"flock\": [\n        \"bool flock(resource fp, int operation [, int &wouldblock])\",\n        \"Portable file locking\"\n    ],\n    \"floor\": [\n        \"float floor(float number)\",\n        \"Returns the next lowest integer value from the number\"\n    ],\n    \"flush\": [\n        \"void flush(void)\",\n        \"Flush the output buffer\"\n    ],\n    \"fmod\": [\n        \"float fmod(float x, float y)\",\n        \"Returns the remainder of dividing x by y as a float\"\n    ],\n    \"fnmatch\": [\n        \"bool fnmatch(string pattern, string filename [, int flags])\",\n        \"Match filename against pattern\"\n    ],\n    \"fopen\": [\n        \"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\n        \"Open a file or a URL and return a file pointer\"\n    ],\n    \"forward_static_call\": [\n        \"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"fpassthru\": [\n        \"int fpassthru(resource fp)\",\n        \"Output all remaining data from a file pointer\"\n    ],\n    \"fprintf\": [\n        \"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"fputcsv\": [\n        \"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\n        \"Format line as CSV and write to file pointer\"\n    ],\n    \"fread\": [\n        \"string fread(resource fp, int length)\",\n        \"Binary-safe file read\"\n    ],\n    \"frenchtojd\": [\n        \"int frenchtojd(int month, int day, int year)\",\n        \"Converts a french republic calendar date to julian day count\"\n    ],\n    \"fscanf\": [\n        \"mixed fscanf(resource stream, string format [, string ...])\",\n        \"Implements a mostly ANSI compatible fscanf()\"\n    ],\n    \"fseek\": [\n        \"int fseek(resource fp, int offset [, int whence])\",\n        \"Seek on a file pointer\"\n    ],\n    \"fsockopen\": [\n        \"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open Internet or Unix domain socket connection\"\n    ],\n    \"fstat\": [\n        \"array fstat(resource fp)\",\n        \"Stat() on a filehandle\"\n    ],\n    \"ftell\": [\n        \"int ftell(resource fp)\",\n        \"Get file pointer's read/write position\"\n    ],\n    \"ftok\": [\n        \"int ftok(string pathname, string proj)\",\n        \"Convert a pathname and a project identifier to a System V IPC key\"\n    ],\n    \"ftp_alloc\": [\n        \"bool ftp_alloc(resource stream, int size[, &response])\",\n        \"Attempt to allocate space on the remote FTP server\"\n    ],\n    \"ftp_cdup\": [\n        \"bool ftp_cdup(resource stream)\",\n        \"Changes to the parent directory\"\n    ],\n    \"ftp_chdir\": [\n        \"bool ftp_chdir(resource stream, string directory)\",\n        \"Changes directories\"\n    ],\n    \"ftp_chmod\": [\n        \"int ftp_chmod(resource stream, int mode, string filename)\",\n        \"Sets permissions on a file\"\n    ],\n    \"ftp_close\": [\n        \"bool ftp_close(resource stream)\",\n        \"Closes the FTP stream\"\n    ],\n    \"ftp_connect\": [\n        \"resource ftp_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP stream\"\n    ],\n    \"ftp_delete\": [\n        \"bool ftp_delete(resource stream, string file)\",\n        \"Deletes a file\"\n    ],\n    \"ftp_exec\": [\n        \"bool ftp_exec(resource stream, string command)\",\n        \"Requests execution of a program on the FTP server\"\n    ],\n    \"ftp_fget\": [\n        \"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server and writes it to an open file\"\n    ],\n    \"ftp_fput\": [\n        \"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server\"\n    ],\n    \"ftp_get\": [\n        \"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server and writes it to a local file\"\n    ],\n    \"ftp_get_option\": [\n        \"mixed ftp_get_option(resource stream, int option)\",\n        \"Gets an FTP option\"\n    ],\n    \"ftp_login\": [\n        \"bool ftp_login(resource stream, string username, string password)\",\n        \"Logs into the FTP server\"\n    ],\n    \"ftp_mdtm\": [\n        \"int ftp_mdtm(resource stream, string filename)\",\n        \"Returns the last modification time of the file, or -1 on error\"\n    ],\n    \"ftp_mkdir\": [\n        \"string ftp_mkdir(resource stream, string directory)\",\n        \"Creates a directory and returns the absolute path for the new directory or false on error\"\n    ],\n    \"ftp_nb_continue\": [\n        \"int ftp_nb_continue(resource stream)\",\n        \"Continues retrieving/sending a file nbronously\"\n    ],\n    \"ftp_nb_fget\": [\n        \"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server asynchronly and writes it to an open file\"\n    ],\n    \"ftp_nb_fput\": [\n        \"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server nbronly\"\n    ],\n    \"ftp_nb_get\": [\n        \"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server nbhronly and writes it to a local file\"\n    ],\n    \"ftp_nb_put\": [\n        \"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_nlist\": [\n        \"array ftp_nlist(resource stream, string directory)\",\n        \"Returns an array of filenames in the given directory\"\n    ],\n    \"ftp_pasv\": [\n        \"bool ftp_pasv(resource stream, bool pasv)\",\n        \"Turns passive mode on or off\"\n    ],\n    \"ftp_put\": [\n        \"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_pwd\": [\n        \"string ftp_pwd(resource stream)\",\n        \"Returns the present working directory\"\n    ],\n    \"ftp_raw\": [\n        \"array ftp_raw(resource stream, string command)\",\n        \"Sends a literal command to the FTP server\"\n    ],\n    \"ftp_rawlist\": [\n        \"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\n        \"Returns a detailed listing of a directory as an array of output lines\"\n    ],\n    \"ftp_rename\": [\n        \"bool ftp_rename(resource stream, string src, string dest)\",\n        \"Renames the given file to a new path\"\n    ],\n    \"ftp_rmdir\": [\n        \"bool ftp_rmdir(resource stream, string directory)\",\n        \"Removes a directory\"\n    ],\n    \"ftp_set_option\": [\n        \"bool ftp_set_option(resource stream, int option, mixed value)\",\n        \"Sets an FTP option\"\n    ],\n    \"ftp_site\": [\n        \"bool ftp_site(resource stream, string cmd)\",\n        \"Sends a SITE command to the server\"\n    ],\n    \"ftp_size\": [\n        \"int ftp_size(resource stream, string filename)\",\n        \"Returns the size of the file, or -1 on error\"\n    ],\n    \"ftp_ssl_connect\": [\n        \"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP-SSL stream\"\n    ],\n    \"ftp_systype\": [\n        \"string ftp_systype(resource stream)\",\n        \"Returns the system type identifier\"\n    ],\n    \"ftruncate\": [\n        \"bool ftruncate(resource fp, int size)\",\n        \"Truncate file to 'size' length\"\n    ],\n    \"func_get_arg\": [\n        \"mixed func_get_arg(int arg_num)\",\n        \"Get the $arg_num'th argument that was passed to the function\"\n    ],\n    \"func_get_args\": [\n        \"array func_get_args()\",\n        \"Get an array of the arguments that were passed to the function\"\n    ],\n    \"func_num_args\": [\n        \"int func_num_args(void)\",\n        \"Get the number of arguments that were passed to the function\"\n    ],\n    \"function \": [\"\", \"\"],\n    \"foreach \": [\"\", \"\"],\n    \"function_exists\": [\n        \"bool function_exists(string function_name)\",\n        \"Checks if the function exists\"\n    ],\n    \"fwrite\": [\n        \"int fwrite(resource fp, string str [, int length])\",\n        \"Binary-safe file write\"\n    ],\n    \"gc_collect_cycles\": [\n        \"int gc_collect_cycles(void)\",\n        \"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"\n    ],\n    \"gc_disable\": [\n        \"void gc_disable(void)\",\n        \"Deactivates the circular reference collector\"\n    ],\n    \"gc_enable\": [\n        \"void gc_enable(void)\",\n        \"Activates the circular reference collector\"\n    ],\n    \"gc_enabled\": [\n        \"void gc_enabled(void)\",\n        \"Returns status of the circular reference collector\"\n    ],\n    \"gd_info\": [\n        \"array gd_info()\",\n        \"\"\n    ],\n    \"getKeywords\": [\n        \"static array getKeywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"\n    ],\n    \"get_browser\": [\n        \"mixed get_browser([string browser_name [, bool return_array]])\",\n        \"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"\n    ],\n    \"get_called_class\": [\n        \"string get_called_class()\",\n        \"Retrieves the \\\"Late Static Binding\\\" class name\"\n    ],\n    \"get_cfg_var\": [\n        \"mixed get_cfg_var(string option_name)\",\n        \"Get the value of a PHP configuration option\"\n    ],\n    \"get_class\": [\n        \"string get_class([object object])\",\n        \"Retrieves the class name\"\n    ],\n    \"get_class_methods\": [\n        \"array get_class_methods(mixed class)\",\n        \"Returns an array of method names for class or class instance.\"\n    ],\n    \"get_class_vars\": [\n        \"array get_class_vars(string class_name)\",\n        \"Returns an array of default properties of the class.\"\n    ],\n    \"get_current_user\": [\n        \"string get_current_user(void)\",\n        \"Get the name of the owner of the current PHP script\"\n    ],\n    \"get_declared_classes\": [\n        \"array get_declared_classes()\",\n        \"Returns an array of all declared classes.\"\n    ],\n    \"get_declared_interfaces\": [\n        \"array get_declared_interfaces()\",\n        \"Returns an array of all declared interfaces.\"\n    ],\n    \"get_defined_constants\": [\n        \"array get_defined_constants([bool categorize])\",\n        \"Return an array containing the names and values of all defined constants\"\n    ],\n    \"get_defined_functions\": [\n        \"array get_defined_functions(void)\",\n        \"Returns an array of all defined functions\"\n    ],\n    \"get_defined_vars\": [\n        \"array get_defined_vars(void)\",\n        \"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"\n    ],\n    \"get_display_language\": [\n        \"static string get_display_language($locale[, $in_locale = null])\",\n        \"* gets the language for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_name\": [\n        \"static string get_display_name($locale[, $in_locale = null])\",\n        \"* gets the name for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_region\": [\n        \"static string get_display_region($locale, $in_locale = null)\",\n        \"* gets the region for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_script\": [\n        \"static string get_display_script($locale, $in_locale = null)\",\n        \"* gets the script for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_extension_funcs\": [\n        \"array get_extension_funcs(string extension_name)\",\n        \"Returns an array with the names of functions belonging to the named extension\"\n    ],\n    \"get_headers\": [\n        \"array get_headers(string url[, int format])\",\n        \"fetches all the headers sent by the server in response to a HTTP request\"\n    ],\n    \"get_html_translation_table\": [\n        \"array get_html_translation_table([int table [, int quote_style]])\",\n        \"Returns the internal translation table used by htmlspecialchars and htmlentities\"\n    ],\n    \"get_include_path\": [\n        \"string get_include_path()\",\n        \"Get the current include_path configuration option\"\n    ],\n    \"get_included_files\": [\n        \"array get_included_files(void)\",\n        \"Returns an array with the file names that were include_once()'d\"\n    ],\n    \"get_loaded_extensions\": [\n        \"array get_loaded_extensions([bool zend_extensions])\",\n        \"Return an array containing names of loaded extensions\"\n    ],\n    \"get_magic_quotes_gpc\": [\n        \"int get_magic_quotes_gpc(void)\",\n        \"Get the current active configuration setting of magic_quotes_gpc\"\n    ],\n    \"get_magic_quotes_runtime\": [\n        \"int get_magic_quotes_runtime(void)\",\n        \"Get the current active configuration setting of magic_quotes_runtime\"\n    ],\n    \"get_meta_tags\": [\n        \"array get_meta_tags(string filename [, bool use_include_path])\",\n        \"Extracts all meta tag content attributes from a file and returns an array\"\n    ],\n    \"get_object_vars\": [\n        \"array get_object_vars(object obj)\",\n        \"Returns an array of object properties\"\n    ],\n    \"get_parent_class\": [\n        \"string get_parent_class([mixed object])\",\n        \"Retrieves the parent class name for object or class or current scope.\"\n    ],\n    \"get_resource_type\": [\n        \"string get_resource_type(resource res)\",\n        \"Get the resource type name for a given resource\"\n    ],\n    \"getallheaders\": [\n        \"array getallheaders(void)\",\n        \"\"\n    ],\n    \"getcwd\": [\n        \"mixed getcwd(void)\",\n        \"Gets the current directory\"\n    ],\n    \"getdate\": [\n        \"array getdate([int timestamp])\",\n        \"Get date/time information\"\n    ],\n    \"getenv\": [\n        \"string getenv(string varname)\",\n        \"Get the value of an environment variable\"\n    ],\n    \"gethostbyaddr\": [\n        \"string gethostbyaddr(string ip_address)\",\n        \"Get the Internet host name corresponding to a given IP address\"\n    ],\n    \"gethostbyname\": [\n        \"string gethostbyname(string hostname)\",\n        \"Get the IP address corresponding to a given Internet host name\"\n    ],\n    \"gethostbynamel\": [\n        \"array gethostbynamel(string hostname)\",\n        \"Return a list of IP addresses that a given hostname resolves to.\"\n    ],\n    \"gethostname\": [\n        \"string gethostname()\",\n        \"Get the host name of the current machine\"\n    ],\n    \"getimagesize\": [\n        \"array getimagesize(string imagefile [, array info])\",\n        \"Get the size of an image as 4-element array\"\n    ],\n    \"getlastmod\": [\n        \"int getlastmod(void)\",\n        \"Get time of last page modification\"\n    ],\n    \"getmygid\": [\n        \"int getmygid(void)\",\n        \"Get PHP script owner's GID\"\n    ],\n    \"getmyinode\": [\n        \"int getmyinode(void)\",\n        \"Get the inode of the current script being parsed\"\n    ],\n    \"getmypid\": [\n        \"int getmypid(void)\",\n        \"Get current process ID\"\n    ],\n    \"getmyuid\": [\n        \"int getmyuid(void)\",\n        \"Get PHP script owner's UID\"\n    ],\n    \"getopt\": [\n        \"array getopt(string options [, array longopts])\",\n        \"Get options from the command line argument list\"\n    ],\n    \"getprotobyname\": [\n        \"int getprotobyname(string name)\",\n        \"Returns protocol number associated with name as per /etc/protocols\"\n    ],\n    \"getprotobynumber\": [\n        \"string getprotobynumber(int proto)\",\n        \"Returns protocol name associated with protocol number proto\"\n    ],\n    \"getrandmax\": [\n        \"int getrandmax(void)\",\n        \"Returns the maximum value a random number can have\"\n    ],\n    \"getrusage\": [\n        \"array getrusage([int who])\",\n        \"Returns an array of usage statistics\"\n    ],\n    \"getservbyname\": [\n        \"int getservbyname(string service, string protocol)\",\n        \"Returns port associated with service. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"getservbyport\": [\n        \"string getservbyport(int port, string protocol)\",\n        \"Returns service name associated with port. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"gettext\": [\n        \"string gettext(string msgid)\",\n        \"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"\n    ],\n    \"gettimeofday\": [\n        \"array gettimeofday([bool get_as_float])\",\n        \"Returns the current time as array\"\n    ],\n    \"gettype\": [\n        \"string gettype(mixed var)\",\n        \"Returns the type of the variable\"\n    ],\n    \"glob\": [\n        \"array glob(string pattern [, int flags])\",\n        \"Find pathnames matching a pattern\"\n    ],\n    \"gmdate\": [\n        \"string gmdate(string format [, long timestamp])\",\n        \"Format a GMT date/time\"\n    ],\n    \"gmmktime\": [\n        \"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a GMT date\"\n    ],\n    \"gmp_abs\": [\n        \"resource gmp_abs(resource a)\",\n        \"Calculates absolute value\"\n    ],\n    \"gmp_add\": [\n        \"resource gmp_add(resource a, resource b)\",\n        \"Add a and b\"\n    ],\n    \"gmp_and\": [\n        \"resource gmp_and(resource a, resource b)\",\n        \"Calculates logical AND of a and b\"\n    ],\n    \"gmp_clrbit\": [\n        \"void gmp_clrbit(resource &a, int index)\",\n        \"Clears bit in a\"\n    ],\n    \"gmp_cmp\": [\n        \"int gmp_cmp(resource a, resource b)\",\n        \"Compares two numbers\"\n    ],\n    \"gmp_com\": [\n        \"resource gmp_com(resource a)\",\n        \"Calculates one's complement of a\"\n    ],\n    \"gmp_div_q\": [\n        \"resource gmp_div_q(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient only\"\n    ],\n    \"gmp_div_qr\": [\n        \"array gmp_div_qr(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient and reminder\"\n    ],\n    \"gmp_div_r\": [\n        \"resource gmp_div_r(resource a, resource b [, int round])\",\n        \"Divide a by b, returns reminder only\"\n    ],\n    \"gmp_divexact\": [\n        \"resource gmp_divexact(resource a, resource b)\",\n        \"Divide a by b using exact division algorithm\"\n    ],\n    \"gmp_fact\": [\n        \"resource gmp_fact(int a)\",\n        \"Calculates factorial function\"\n    ],\n    \"gmp_gcd\": [\n        \"resource gmp_gcd(resource a, resource b)\",\n        \"Computes greatest common denominator (gcd) of a and b\"\n    ],\n    \"gmp_gcdext\": [\n        \"array gmp_gcdext(resource a, resource b)\",\n        \"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"\n    ],\n    \"gmp_hamdist\": [\n        \"int gmp_hamdist(resource a, resource b)\",\n        \"Calculates hamming distance between a and b\"\n    ],\n    \"gmp_init\": [\n        \"resource gmp_init(mixed number [, int base])\",\n        \"Initializes GMP number\"\n    ],\n    \"gmp_intval\": [\n        \"int gmp_intval(resource gmpnumber)\",\n        \"Gets signed long value of GMP number\"\n    ],\n    \"gmp_invert\": [\n        \"resource gmp_invert(resource a, resource b)\",\n        \"Computes the inverse of a modulo b\"\n    ],\n    \"gmp_jacobi\": [\n        \"int gmp_jacobi(resource a, resource b)\",\n        \"Computes Jacobi symbol\"\n    ],\n    \"gmp_legendre\": [\n        \"int gmp_legendre(resource a, resource b)\",\n        \"Computes Legendre symbol\"\n    ],\n    \"gmp_mod\": [\n        \"resource gmp_mod(resource a, resource b)\",\n        \"Computes a modulo b\"\n    ],\n    \"gmp_mul\": [\n        \"resource gmp_mul(resource a, resource b)\",\n        \"Multiply a and b\"\n    ],\n    \"gmp_neg\": [\n        \"resource gmp_neg(resource a)\",\n        \"Negates a number\"\n    ],\n    \"gmp_nextprime\": [\n        \"resource gmp_nextprime(resource a)\",\n        \"Finds next prime of a\"\n    ],\n    \"gmp_or\": [\n        \"resource gmp_or(resource a, resource b)\",\n        \"Calculates logical OR of a and b\"\n    ],\n    \"gmp_perfect_square\": [\n        \"bool gmp_perfect_square(resource a)\",\n        \"Checks if a is an exact square\"\n    ],\n    \"gmp_popcount\": [\n        \"int gmp_popcount(resource a)\",\n        \"Calculates the population count of a\"\n    ],\n    \"gmp_pow\": [\n        \"resource gmp_pow(resource base, int exp)\",\n        \"Raise base to power exp\"\n    ],\n    \"gmp_powm\": [\n        \"resource gmp_powm(resource base, resource exp, resource mod)\",\n        \"Raise base to power exp and take result modulo mod\"\n    ],\n    \"gmp_prob_prime\": [\n        \"int gmp_prob_prime(resource a[, int reps])\",\n        \"Checks if a is \\\"probably prime\\\"\"\n    ],\n    \"gmp_random\": [\n        \"resource gmp_random([int limiter])\",\n        \"Gets random number\"\n    ],\n    \"gmp_scan0\": [\n        \"int gmp_scan0(resource a, int start)\",\n        \"Finds first zero bit\"\n    ],\n    \"gmp_scan1\": [\n        \"int gmp_scan1(resource a, int start)\",\n        \"Finds first non-zero bit\"\n    ],\n    \"gmp_setbit\": [\n        \"void gmp_setbit(resource &a, int index[, bool set_clear])\",\n        \"Sets or clear bit in a\"\n    ],\n    \"gmp_sign\": [\n        \"int gmp_sign(resource a)\",\n        \"Gets the sign of the number\"\n    ],\n    \"gmp_sqrt\": [\n        \"resource gmp_sqrt(resource a)\",\n        \"Takes integer part of square root of a\"\n    ],\n    \"gmp_sqrtrem\": [\n        \"array gmp_sqrtrem(resource a)\",\n        \"Square root with remainder\"\n    ],\n    \"gmp_strval\": [\n        \"string gmp_strval(resource gmpnumber [, int base])\",\n        \"Gets string representation of GMP number\"\n    ],\n    \"gmp_sub\": [\n        \"resource gmp_sub(resource a, resource b)\",\n        \"Subtract b from a\"\n    ],\n    \"gmp_testbit\": [\n        \"bool gmp_testbit(resource a, int index)\",\n        \"Tests if bit is set in a\"\n    ],\n    \"gmp_xor\": [\n        \"resource gmp_xor(resource a, resource b)\",\n        \"Calculates logical exclusive OR of a and b\"\n    ],\n    \"gmstrftime\": [\n        \"string gmstrftime(string format [, int timestamp])\",\n        \"Format a GMT/UCT time/date according to locale settings\"\n    ],\n    \"grapheme_extract\": [\n        \"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\n        \"Function to extract a sequence of default grapheme clusters\"\n    ],\n    \"grapheme_stripos\": [\n        \"int grapheme_stripos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another, ignoring case differences\"\n    ],\n    \"grapheme_stristr\": [\n        \"string grapheme_stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_strlen\": [\n        \"int grapheme_strlen(string str)\",\n        \"Get number of graphemes in a string\"\n    ],\n    \"grapheme_strpos\": [\n        \"int grapheme_strpos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"grapheme_strripos\": [\n        \"int grapheme_strripos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another, ignoring case\"\n    ],\n    \"grapheme_strrpos\": [\n        \"int grapheme_strrpos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"grapheme_strstr\": [\n        \"string grapheme_strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_substr\": [\n        \"string grapheme_substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"gregoriantojd\": [\n        \"int gregoriantojd(int month, int day, int year)\",\n        \"Converts a gregorian calendar date to julian day count\"\n    ],\n    \"gzcompress\": [\n        \"string gzcompress(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzdeflate\": [\n        \"string gzdeflate(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzencode\": [\n        \"string gzencode(string data [, int level [, int encoding_mode]])\",\n        \"GZ encode a string\"\n    ],\n    \"gzfile\": [\n        \"array gzfile(string filename [, int use_include_path])\",\n        \"Read und uncompress entire .gz-file into an array\"\n    ],\n    \"gzinflate\": [\n        \"string gzinflate(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"gzopen\": [\n        \"resource gzopen(string filename, string mode [, int use_include_path])\",\n        \"Open a .gz-file and return a .gz-file pointer\"\n    ],\n    \"gzuncompress\": [\n        \"string gzuncompress(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"hash\": [\n        \"string hash(string algo, string data[, bool raw_output = false])\",\n        \"Generate a hash of a given input string Returns lowercase hexits by default\"\n    ],\n    \"hash_algos\": [\n        \"array hash_algos(void)\",\n        \"Return a list of registered hashing algorithms\"\n    ],\n    \"hash_copy\": [\n        \"resource hash_copy(resource context)\",\n        \"Copy hash resource\"\n    ],\n    \"hash_file\": [\n        \"string hash_file(string algo, string filename[, bool raw_output = false])\",\n        \"Generate a hash of a given file Returns lowercase hexits by default\"\n    ],\n    \"hash_final\": [\n        \"string hash_final(resource context[, bool raw_output=false])\",\n        \"Output resulting digest\"\n    ],\n    \"hash_hmac\": [\n        \"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_hmac_file\": [\n        \"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_init\": [\n        \"resource hash_init(string algo[, int options, string key])\",\n        \"Initialize a hashing context\"\n    ],\n    \"hash_update\": [\n        \"bool hash_update(resource context, string data)\",\n        \"Pump data into the hashing algorithm\"\n    ],\n    \"hash_update_file\": [\n        \"bool hash_update_file(resource context, string filename[, resource context])\",\n        \"Pump data into the hashing algorithm from a file\"\n    ],\n    \"hash_update_stream\": [\n        \"int hash_update_stream(resource context, resource handle[, integer length])\",\n        \"Pump data into the hashing algorithm from an open stream\"\n    ],\n    \"header\": [\n        \"void header(string header [, bool replace, [int http_response_code]])\",\n        \"Sends a raw HTTP header\"\n    ],\n    \"header_remove\": [\n        \"void header_remove([string name])\",\n        \"Removes an HTTP header previously set using header()\"\n    ],\n    \"headers_list\": [\n        \"array headers_list(void)\",\n        \"Return list of headers to be sent / already sent\"\n    ],\n    \"headers_sent\": [\n        \"bool headers_sent([string &$file [, int &$line]])\",\n        \"Returns true if headers have already been sent, false otherwise\"\n    ],\n    \"hebrev\": [\n        \"string hebrev(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text\"\n    ],\n    \"hebrevc\": [\n        \"string hebrevc(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text with newline conversion\"\n    ],\n    \"hexdec\": [\n        \"int hexdec(string hexadecimal_number)\",\n        \"Returns the decimal equivalent of the hexadecimal number\"\n    ],\n    \"highlight_file\": [\n        \"bool highlight_file(string file_name [, bool return] )\",\n        \"Syntax highlight a source file\"\n    ],\n    \"highlight_string\": [\n        \"bool highlight_string(string string [, bool return] )\",\n        \"Syntax highlight a string or optionally return it\"\n    ],\n    \"html_entity_decode\": [\n        \"string html_entity_decode(string string [, int quote_style][, string charset])\",\n        \"Convert all HTML entities to their applicable characters\"\n    ],\n    \"htmlentities\": [\n        \"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert all applicable characters to HTML entities\"\n    ],\n    \"htmlspecialchars\": [\n        \"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert special characters to HTML entities\"\n    ],\n    \"htmlspecialchars_decode\": [\n        \"string htmlspecialchars_decode(string string [, int quote_style])\",\n        \"Convert special HTML entities back to characters\"\n    ],\n    \"http_build_query\": [\n        \"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\n        \"Generates a form-encoded query string from an associative array or object.\"\n    ],\n    \"hypot\": [\n        \"float hypot(float num1, float num2)\",\n        \"Returns sqrt(num1*num1 + num2*num2)\"\n    ],\n    \"ibase_add_user\": [\n        \"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Add a user to security database\"\n    ],\n    \"ibase_affected_rows\": [\n        \"int ibase_affected_rows( [ resource link_identifier ] )\",\n        \"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"\n    ],\n    \"ibase_backup\": [\n        \"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\n        \"Initiates a backup task in the service manager and returns immediately\"\n    ],\n    \"ibase_blob_add\": [\n        \"bool ibase_blob_add(resource blob_handle, string data)\",\n        \"Add data into created blob\"\n    ],\n    \"ibase_blob_cancel\": [\n        \"bool ibase_blob_cancel(resource blob_handle)\",\n        \"Cancel creating blob\"\n    ],\n    \"ibase_blob_close\": [\n        \"string ibase_blob_close(resource blob_handle)\",\n        \"Close blob\"\n    ],\n    \"ibase_blob_create\": [\n        \"resource ibase_blob_create([resource link_identifier])\",\n        \"Create blob for adding data\"\n    ],\n    \"ibase_blob_echo\": [\n        \"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\n        \"Output blob contents to browser\"\n    ],\n    \"ibase_blob_get\": [\n        \"string ibase_blob_get(resource blob_handle, int len)\",\n        \"Get len bytes data from open blob\"\n    ],\n    \"ibase_blob_import\": [\n        \"string ibase_blob_import([ resource link_identifier, ] resource file)\",\n        \"Create blob, copy file in it, and close it\"\n    ],\n    \"ibase_blob_info\": [\n        \"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\n        \"Return blob length and other useful info\"\n    ],\n    \"ibase_blob_open\": [\n        \"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\n        \"Open blob for retrieving data parts\"\n    ],\n    \"ibase_close\": [\n        \"bool ibase_close([resource link_identifier])\",\n        \"Close an InterBase connection\"\n    ],\n    \"ibase_commit\": [\n        \"bool ibase_commit( resource link_identifier )\",\n        \"Commit transaction\"\n    ],\n    \"ibase_commit_ret\": [\n        \"bool ibase_commit_ret( resource link_identifier )\",\n        \"Commit transaction and retain the transaction context\"\n    ],\n    \"ibase_connect\": [\n        \"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a connection to an InterBase database\"\n    ],\n    \"ibase_db_info\": [\n        \"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\n        \"Request statistics about a database\"\n    ],\n    \"ibase_delete_user\": [\n        \"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Delete a user from security database\"\n    ],\n    \"ibase_drop_db\": [\n        \"bool ibase_drop_db([resource link_identifier])\",\n        \"Drop an InterBase database\"\n    ],\n    \"ibase_errcode\": [\n        \"int ibase_errcode(void)\",\n        \"Return error code\"\n    ],\n    \"ibase_errmsg\": [\n        \"string ibase_errmsg(void)\",\n        \"Return error message\"\n    ],\n    \"ibase_execute\": [\n        \"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a previously prepared query\"\n    ],\n    \"ibase_fetch_assoc\": [\n        \"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_fetch_object\": [\n        \"object ibase_fetch_object(resource result [, int fetch_flags])\",\n        \"Fetch a object from the results of a query\"\n    ],\n    \"ibase_fetch_row\": [\n        \"array ibase_fetch_row(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_field_info\": [\n        \"array ibase_field_info(resource query_result, int field_number)\",\n        \"Get information about a field\"\n    ],\n    \"ibase_free_event_handler\": [\n        \"bool ibase_free_event_handler(resource event)\",\n        \"Frees the event handler set by ibase_set_event_handler()\"\n    ],\n    \"ibase_free_query\": [\n        \"bool ibase_free_query(resource query)\",\n        \"Free memory used by a query\"\n    ],\n    \"ibase_free_result\": [\n        \"bool ibase_free_result(resource result)\",\n        \"Free the memory used by a result\"\n    ],\n    \"ibase_gen_id\": [\n        \"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\n        \"Increments the named generator and returns its new value\"\n    ],\n    \"ibase_maintain_db\": [\n        \"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\n        \"Execute a maintenance command on the database server\"\n    ],\n    \"ibase_modify_user\": [\n        \"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Modify a user in security database\"\n    ],\n    \"ibase_name_result\": [\n        \"bool ibase_name_result(resource result, string name)\",\n        \"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"\n    ],\n    \"ibase_num_fields\": [\n        \"int ibase_num_fields(resource query_result)\",\n        \"Get the number of fields in result\"\n    ],\n    \"ibase_num_params\": [\n        \"int ibase_num_params(resource query)\",\n        \"Get the number of params in a prepared query\"\n    ],\n    \"ibase_num_rows\": [\n        \"int ibase_num_rows( resource result_identifier )\",\n        \"Return the number of rows that are available in a result\"\n    ],\n    \"ibase_param_info\": [\n        \"array ibase_param_info(resource query, int field_number)\",\n        \"Get information about a parameter\"\n    ],\n    \"ibase_pconnect\": [\n        \"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a persistent connection to an InterBase database\"\n    ],\n    \"ibase_prepare\": [\n        \"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\n        \"Prepare a query for later execution\"\n    ],\n    \"ibase_query\": [\n        \"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a query\"\n    ],\n    \"ibase_restore\": [\n        \"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\n        \"Initiates a restore task in the service manager and returns immediately\"\n    ],\n    \"ibase_rollback\": [\n        \"bool ibase_rollback( resource link_identifier )\",\n        \"Rollback transaction\"\n    ],\n    \"ibase_rollback_ret\": [\n        \"bool ibase_rollback_ret( resource link_identifier )\",\n        \"Rollback transaction and retain the transaction context\"\n    ],\n    \"ibase_server_info\": [\n        \"string ibase_server_info(resource service_handle, int action)\",\n        \"Request information about a database server\"\n    ],\n    \"ibase_service_attach\": [\n        \"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\n        \"Connect to the service manager\"\n    ],\n    \"ibase_service_detach\": [\n        \"bool ibase_service_detach(resource service_handle)\",\n        \"Disconnect from the service manager\"\n    ],\n    \"ibase_set_event_handler\": [\n        \"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\n        \"Register the callback for handling each of the named events\"\n    ],\n    \"ibase_trans\": [\n        \"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\n        \"Start a transaction over one or several databases\"\n    ],\n    \"ibase_wait_event\": [\n        \"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\n        \"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"\n    ],\n    \"iconv\": [\n        \"string iconv(string in_charset, string out_charset, string str)\",\n        \"Returns str converted to the out_charset character set\"\n    ],\n    \"iconv_get_encoding\": [\n        \"mixed iconv_get_encoding([string type])\",\n        \"Get internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_mime_decode\": [\n        \"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\n        \"Decodes a mime header field\"\n    ],\n    \"iconv_mime_decode_headers\": [\n        \"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\n        \"Decodes multiple mime header fields\"\n    ],\n    \"iconv_mime_encode\": [\n        \"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\n        \"Composes a mime header field with field_name and field_value in a specified scheme\"\n    ],\n    \"iconv_set_encoding\": [\n        \"bool iconv_set_encoding(string type, string charset)\",\n        \"Sets internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_strlen\": [\n        \"int iconv_strlen(string str [, string charset])\",\n        \"Returns the character count of str\"\n    ],\n    \"iconv_strpos\": [\n        \"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\n        \"Finds position of first occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_strrpos\": [\n        \"int iconv_strrpos(string haystack, string needle [, string charset])\",\n        \"Finds position of last occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_substr\": [\n        \"string iconv_substr(string str, int offset, [int length, string charset])\",\n        \"Returns specified part of a string\"\n    ],\n    \"idate\": [\n        \"int idate(string format [, int timestamp])\",\n        \"Format a local time/date as integer\"\n    ],\n    \"idn_to_ascii\": [\n        \"int idn_to_ascii(string domain[, int options])\",\n        \"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"\n    ],\n    \"idn_to_utf8\": [\n        \"int idn_to_utf8(string domain[, int options])\",\n        \"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"\n    ],\n    \"ignore_user_abort\": [\n        \"int ignore_user_abort([string value])\",\n        \"Set whether we want to ignore a user abort event or not\"\n    ],\n    \"image2wbmp\": [\n        \"bool image2wbmp(resource im [, string filename [, int threshold]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"image_type_to_extension\": [\n        \"string image_type_to_extension(int imagetype [, bool include_dot])\",\n        \"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"image_type_to_mime_type\": [\n        \"string image_type_to_mime_type(int imagetype)\",\n        \"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"imagealphablending\": [\n        \"bool imagealphablending(resource im, bool on)\",\n        \"Turn alpha blending mode on or off for the given image\"\n    ],\n    \"imageantialias\": [\n        \"bool imageantialias(resource im, bool on)\",\n        \"Should antialiased functions used or not\"\n    ],\n    \"imagearc\": [\n        \"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\n        \"Draw a partial ellipse\"\n    ],\n    \"imagechar\": [\n        \"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character\"\n    ],\n    \"imagecharup\": [\n        \"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagecolorallocate\": [\n        \"int imagecolorallocate(resource im, int red, int green, int blue)\",\n        \"Allocate a color for an image\"\n    ],\n    \"imagecolorallocatealpha\": [\n        \"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Allocate a color with an alpha level.  Works for true color and palette based images\"\n    ],\n    \"imagecolorat\": [\n        \"int imagecolorat(resource im, int x, int y)\",\n        \"Get the index of the color of a pixel\"\n    ],\n    \"imagecolorclosest\": [\n        \"int imagecolorclosest(resource im, int red, int green, int blue)\",\n        \"Get the index of the closest color to the specified color\"\n    ],\n    \"imagecolorclosestalpha\": [\n        \"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find the closest matching colour with alpha transparency\"\n    ],\n    \"imagecolorclosesthwb\": [\n        \"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\n        \"Get the index of the color which has the hue, white and blackness nearest to the given color\"\n    ],\n    \"imagecolordeallocate\": [\n        \"bool imagecolordeallocate(resource im, int index)\",\n        \"De-allocate a color for an image\"\n    ],\n    \"imagecolorexact\": [\n        \"int imagecolorexact(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color\"\n    ],\n    \"imagecolorexactalpha\": [\n        \"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find exact match for colour with transparency\"\n    ],\n    \"imagecolormatch\": [\n        \"bool imagecolormatch(resource im1, resource im2)\",\n        \"Makes the colors of the palette version of an image more closely match the true color version\"\n    ],\n    \"imagecolorresolve\": [\n        \"int imagecolorresolve(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color or its closest possible alternative\"\n    ],\n    \"imagecolorresolvealpha\": [\n        \"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"\n    ],\n    \"imagecolorset\": [\n        \"void imagecolorset(resource im, int col, int red, int green, int blue)\",\n        \"Set the color for the specified palette index\"\n    ],\n    \"imagecolorsforindex\": [\n        \"array imagecolorsforindex(resource im, int col)\",\n        \"Get the colors for an index\"\n    ],\n    \"imagecolorstotal\": [\n        \"int imagecolorstotal(resource im)\",\n        \"Find out the number of colors in an image's palette\"\n    ],\n    \"imagecolortransparent\": [\n        \"int imagecolortransparent(resource im [, int col])\",\n        \"Define a color as transparent\"\n    ],\n    \"imageconvolution\": [\n        \"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\n        \"Apply a 3x3 convolution matrix, using coefficient div and offset\"\n    ],\n    \"imagecopy\": [\n        \"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\n        \"Copy part of an image\"\n    ],\n    \"imagecopymerge\": [\n        \"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopymergegray\": [\n        \"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopyresampled\": [\n        \"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image using resampling to help ensure clarity\"\n    ],\n    \"imagecopyresized\": [\n        \"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image\"\n    ],\n    \"imagecreate\": [\n        \"resource imagecreate(int x_size, int y_size)\",\n        \"Create a new image\"\n    ],\n    \"imagecreatefromgd\": [\n        \"resource imagecreatefromgd(string filename)\",\n        \"Create a new image from GD file or URL\"\n    ],\n    \"imagecreatefromgd2\": [\n        \"resource imagecreatefromgd2(string filename)\",\n        \"Create a new image from GD2 file or URL\"\n    ],\n    \"imagecreatefromgd2part\": [\n        \"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\n        \"Create a new image from a given part of GD2 file or URL\"\n    ],\n    \"imagecreatefromgif\": [\n        \"resource imagecreatefromgif(string filename)\",\n        \"Create a new image from GIF file or URL\"\n    ],\n    \"imagecreatefromjpeg\": [\n        \"resource imagecreatefromjpeg(string filename)\",\n        \"Create a new image from JPEG file or URL\"\n    ],\n    \"imagecreatefrompng\": [\n        \"resource imagecreatefrompng(string filename)\",\n        \"Create a new image from PNG file or URL\"\n    ],\n    \"imagecreatefromstring\": [\n        \"resource imagecreatefromstring(string image)\",\n        \"Create a new image from the image stream in the string\"\n    ],\n    \"imagecreatefromwbmp\": [\n        \"resource imagecreatefromwbmp(string filename)\",\n        \"Create a new image from WBMP file or URL\"\n    ],\n    \"imagecreatefromxbm\": [\n        \"resource imagecreatefromxbm(string filename)\",\n        \"Create a new image from XBM file or URL\"\n    ],\n    \"imagecreatefromxpm\": [\n        \"resource imagecreatefromxpm(string filename)\",\n        \"Create a new image from XPM file or URL\"\n    ],\n    \"imagecreatetruecolor\": [\n        \"resource imagecreatetruecolor(int x_size, int y_size)\",\n        \"Create a new true color image\"\n    ],\n    \"imagedashedline\": [\n        \"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a dashed line\"\n    ],\n    \"imagedestroy\": [\n        \"bool imagedestroy(resource im)\",\n        \"Destroy an image\"\n    ],\n    \"imageellipse\": [\n        \"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefill\": [\n        \"bool imagefill(resource im, int x, int y, int col)\",\n        \"Flood fill\"\n    ],\n    \"imagefilledarc\": [\n        \"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\n        \"Draw a filled partial ellipse\"\n    ],\n    \"imagefilledellipse\": [\n        \"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefilledpolygon\": [\n        \"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a filled polygon\"\n    ],\n    \"imagefilledrectangle\": [\n        \"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a filled rectangle\"\n    ],\n    \"imagefilltoborder\": [\n        \"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\n        \"Flood fill to specific color\"\n    ],\n    \"imagefilter\": [\n        \"bool imagefilter(resource src_im, int filtertype, [args] )\",\n        \"Applies Filter an image using a custom angle\"\n    ],\n    \"imagefontheight\": [\n        \"int imagefontheight(int font)\",\n        \"Get font height\"\n    ],\n    \"imagefontwidth\": [\n        \"int imagefontwidth(int font)\",\n        \"Get font width\"\n    ],\n    \"imageftbbox\": [\n        \"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\n        \"Give the bounding box of a text using fonts via freetype2\"\n    ],\n    \"imagefttext\": [\n        \"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\n        \"Write text to the image using fonts via freetype2\"\n    ],\n    \"imagegammacorrect\": [\n        \"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\n        \"Apply a gamma correction to a GD image\"\n    ],\n    \"imagegd\": [\n        \"bool imagegd(resource im [, string filename])\",\n        \"Output GD image to browser or file\"\n    ],\n    \"imagegd2\": [\n        \"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\n        \"Output GD2 image to browser or file\"\n    ],\n    \"imagegif\": [\n        \"bool imagegif(resource im [, string filename])\",\n        \"Output GIF image to browser or file\"\n    ],\n    \"imagegrabscreen\": [\n        \"resource imagegrabscreen()\",\n        \"Grab a screenshot\"\n    ],\n    \"imagegrabwindow\": [\n        \"resource imagegrabwindow(int window_handle [, int client_area])\",\n        \"Grab a window or its client area using a windows handle (HWND property in COM instance)\"\n    ],\n    \"imageinterlace\": [\n        \"int imageinterlace(resource im [, int interlace])\",\n        \"Enable or disable interlace\"\n    ],\n    \"imageistruecolor\": [\n        \"bool imageistruecolor(resource im)\",\n        \"return true if the image uses truecolor\"\n    ],\n    \"imagejpeg\": [\n        \"bool imagejpeg(resource im [, string filename [, int quality]])\",\n        \"Output JPEG image to browser or file\"\n    ],\n    \"imagelayereffect\": [\n        \"bool imagelayereffect(resource im, int effect)\",\n        \"Set the alpha blending flag to use the bundled libgd layering effects\"\n    ],\n    \"imageline\": [\n        \"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a line\"\n    ],\n    \"imageloadfont\": [\n        \"int imageloadfont(string filename)\",\n        \"Load a new font\"\n    ],\n    \"imagepalettecopy\": [\n        \"void imagepalettecopy(resource dst, resource src)\",\n        \"Copy the palette from the src image onto the dst image\"\n    ],\n    \"imagepng\": [\n        \"bool imagepng(resource im [, string filename])\",\n        \"Output PNG image to browser or file\"\n    ],\n    \"imagepolygon\": [\n        \"bool imagepolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a polygon\"\n    ],\n    \"imagepsbbox\": [\n        \"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\n        \"Return the bounding box needed by a string if rasterized\"\n    ],\n    \"imagepscopyfont\": [\n        \"int imagepscopyfont(int font_index)\",\n        \"Make a copy of a font for purposes like extending or reenconding\"\n    ],\n    \"imagepsencodefont\": [\n        \"bool imagepsencodefont(resource font_index, string filename)\",\n        \"To change a fonts character encoding vector\"\n    ],\n    \"imagepsextendfont\": [\n        \"bool imagepsextendfont(resource font_index, float extend)\",\n        \"Extend or or condense (if extend < 1) a font\"\n    ],\n    \"imagepsfreefont\": [\n        \"bool imagepsfreefont(resource font_index)\",\n        \"Free memory used by a font\"\n    ],\n    \"imagepsloadfont\": [\n        \"resource imagepsloadfont(string pathname)\",\n        \"Load a new font from specified file\"\n    ],\n    \"imagepsslantfont\": [\n        \"bool imagepsslantfont(resource font_index, float slant)\",\n        \"Slant a font\"\n    ],\n    \"imagepstext\": [\n        \"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\n        \"Rasterize a string over an image\"\n    ],\n    \"imagerectangle\": [\n        \"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a rectangle\"\n    ],\n    \"imagerotate\": [\n        \"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\n        \"Rotate an image using a custom angle\"\n    ],\n    \"imagesavealpha\": [\n        \"bool imagesavealpha(resource im, bool on)\",\n        \"Include alpha channel to a saved image\"\n    ],\n    \"imagesetbrush\": [\n        \"bool imagesetbrush(resource image, resource brush)\",\n        \"Set the brush image to $brush when filling $image with the \\\"IMG_COLOR_BRUSHED\\\" color\"\n    ],\n    \"imagesetpixel\": [\n        \"bool imagesetpixel(resource im, int x, int y, int col)\",\n        \"Set a single pixel\"\n    ],\n    \"imagesetstyle\": [\n        \"bool imagesetstyle(resource im, array styles)\",\n        \"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"\n    ],\n    \"imagesetthickness\": [\n        \"bool imagesetthickness(resource im, int thickness)\",\n        \"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"\n    ],\n    \"imagesettile\": [\n        \"bool imagesettile(resource image, resource tile)\",\n        \"Set the tile image to $tile when filling $image with the \\\"IMG_COLOR_TILED\\\" color\"\n    ],\n    \"imagestring\": [\n        \"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string horizontally\"\n    ],\n    \"imagestringup\": [\n        \"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string vertically - rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagesx\": [\n        \"int imagesx(resource im)\",\n        \"Get image width\"\n    ],\n    \"imagesy\": [\n        \"int imagesy(resource im)\",\n        \"Get image height\"\n    ],\n    \"imagetruecolortopalette\": [\n        \"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\n        \"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"\n    ],\n    \"imagettfbbox\": [\n        \"array imagettfbbox(float size, float angle, string font_file, string text)\",\n        \"Give the bounding box of a text using TrueType fonts\"\n    ],\n    \"imagettftext\": [\n        \"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\n        \"Write text to the image using a TrueType font\"\n    ],\n    \"imagetypes\": [\n        \"int imagetypes(void)\",\n        \"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"\n    ],\n    \"imagewbmp\": [\n        \"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"imagexbm\": [\n        \"int imagexbm(int im, string filename [, int foreground])\",\n        \"Output XBM image to browser or file\"\n    ],\n    \"imap_8bit\": [\n        \"string imap_8bit(string text)\",\n        \"Convert an 8-bit string to a quoted-printable string\"\n    ],\n    \"imap_alerts\": [\n        \"array imap_alerts(void)\",\n        \"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"\n    ],\n    \"imap_append\": [\n        \"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\n        \"Append a new message to a specified mailbox\"\n    ],\n    \"imap_base64\": [\n        \"string imap_base64(string text)\",\n        \"Decode BASE64 encoded text\"\n    ],\n    \"imap_binary\": [\n        \"string imap_binary(string text)\",\n        \"Convert an 8bit string to a base64 string\"\n    ],\n    \"imap_body\": [\n        \"string imap_body(resource stream_id, int msg_no [, int options])\",\n        \"Read the message body\"\n    ],\n    \"imap_bodystruct\": [\n        \"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\n        \"Read the structure of a specified body section of a specific message\"\n    ],\n    \"imap_check\": [\n        \"object imap_check(resource stream_id)\",\n        \"Get mailbox properties\"\n    ],\n    \"imap_clearflag_full\": [\n        \"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Clears flags on messages\"\n    ],\n    \"imap_close\": [\n        \"bool imap_close(resource stream_id [, int options])\",\n        \"Close an IMAP stream\"\n    ],\n    \"imap_createmailbox\": [\n        \"bool imap_createmailbox(resource stream_id, string mailbox)\",\n        \"Create a new mailbox\"\n    ],\n    \"imap_delete\": [\n        \"bool imap_delete(resource stream_id, int msg_no [, int options])\",\n        \"Mark a message for deletion\"\n    ],\n    \"imap_deletemailbox\": [\n        \"bool imap_deletemailbox(resource stream_id, string mailbox)\",\n        \"Delete a mailbox\"\n    ],\n    \"imap_errors\": [\n        \"array imap_errors(void)\",\n        \"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"\n    ],\n    \"imap_expunge\": [\n        \"bool imap_expunge(resource stream_id)\",\n        \"Permanently delete all messages marked for deletion\"\n    ],\n    \"imap_fetch_overview\": [\n        \"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\n        \"Read an overview of the information in the headers of the given message sequence\"\n    ],\n    \"imap_fetchbody\": [\n        \"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\n        \"Get a specific body section\"\n    ],\n    \"imap_fetchheader\": [\n        \"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\n        \"Get the full unfiltered header for a message\"\n    ],\n    \"imap_fetchstructure\": [\n        \"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\n        \"Read the full structure of a message\"\n    ],\n    \"imap_gc\": [\n        \"bool imap_gc(resource stream_id, int flags)\",\n        \"This function garbage collects (purges) the cache of entries of a specific type.\"\n    ],\n    \"imap_get_quota\": [\n        \"array imap_get_quota(resource stream_id, string qroot)\",\n        \"Returns the quota set to the mailbox account qroot\"\n    ],\n    \"imap_get_quotaroot\": [\n        \"array imap_get_quotaroot(resource stream_id, string mbox)\",\n        \"Returns the quota set to the mailbox account mbox\"\n    ],\n    \"imap_getacl\": [\n        \"array imap_getacl(resource stream_id, string mailbox)\",\n        \"Gets the ACL for a given mailbox\"\n    ],\n    \"imap_getmailboxes\": [\n        \"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\n        \"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"\n    ],\n    \"imap_getsubscribed\": [\n        \"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"\n    ],\n    \"imap_headerinfo\": [\n        \"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\n        \"Read the headers of the message\"\n    ],\n    \"imap_headers\": [\n        \"array imap_headers(resource stream_id)\",\n        \"Returns headers for all messages in a mailbox\"\n    ],\n    \"imap_last_error\": [\n        \"string imap_last_error(void)\",\n        \"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"\n    ],\n    \"imap_list\": [\n        \"array imap_list(resource stream_id, string ref, string pattern)\",\n        \"Read the list of mailboxes\"\n    ],\n    \"imap_listscan\": [\n        \"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\n        \"Read list of mailboxes containing a certain string\"\n    ],\n    \"imap_lsub\": [\n        \"array imap_lsub(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes\"\n    ],\n    \"imap_mail\": [\n        \"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\n        \"Send an email message\"\n    ],\n    \"imap_mail_compose\": [\n        \"string imap_mail_compose(array envelope, array body)\",\n        \"Create a MIME message based on given envelope and body sections\"\n    ],\n    \"imap_mail_copy\": [\n        \"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\n        \"Copy specified message to a mailbox\"\n    ],\n    \"imap_mail_move\": [\n        \"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\n        \"Move specified message to a mailbox\"\n    ],\n    \"imap_mailboxmsginfo\": [\n        \"object imap_mailboxmsginfo(resource stream_id)\",\n        \"Returns info about the current mailbox\"\n    ],\n    \"imap_mime_header_decode\": [\n        \"array imap_mime_header_decode(string str)\",\n        \"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"\n    ],\n    \"imap_msgno\": [\n        \"int imap_msgno(resource stream_id, int unique_msg_id)\",\n        \"Get the sequence number associated with a UID\"\n    ],\n    \"imap_mutf7_to_utf8\": [\n        \"string imap_mutf7_to_utf8(string in)\",\n        \"Decode a modified UTF-7 string to UTF-8\"\n    ],\n    \"imap_num_msg\": [\n        \"int imap_num_msg(resource stream_id)\",\n        \"Gives the number of messages in the current mailbox\"\n    ],\n    \"imap_num_recent\": [\n        \"int imap_num_recent(resource stream_id)\",\n        \"Gives the number of recent messages in current mailbox\"\n    ],\n    \"imap_open\": [\n        \"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\n        \"Open an IMAP stream to a mailbox\"\n    ],\n    \"imap_ping\": [\n        \"bool imap_ping(resource stream_id)\",\n        \"Check if the IMAP stream is still active\"\n    ],\n    \"imap_qprint\": [\n        \"string imap_qprint(string text)\",\n        \"Convert a quoted-printable string to an 8-bit string\"\n    ],\n    \"imap_renamemailbox\": [\n        \"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\n        \"Rename a mailbox\"\n    ],\n    \"imap_reopen\": [\n        \"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\n        \"Reopen an IMAP stream to a new mailbox\"\n    ],\n    \"imap_rfc822_parse_adrlist\": [\n        \"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\n        \"Parses an address string\"\n    ],\n    \"imap_rfc822_parse_headers\": [\n        \"object imap_rfc822_parse_headers(string headers [, string default_host])\",\n        \"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"\n    ],\n    \"imap_rfc822_write_address\": [\n        \"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\n        \"Returns a properly formatted email address given the mailbox, host, and personal info\"\n    ],\n    \"imap_savebody\": [\n        \"bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \\\"\\\"[, int options = 0]])\",\n        \"Save a specific body section to a file\"\n    ],\n    \"imap_search\": [\n        \"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\n        \"Return a list of messages matching the given criteria\"\n    ],\n    \"imap_set_quota\": [\n        \"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\n        \"Will set the quota for qroot mailbox\"\n    ],\n    \"imap_setacl\": [\n        \"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\n        \"Sets the ACL for a given mailbox\"\n    ],\n    \"imap_setflag_full\": [\n        \"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Sets flags on messages\"\n    ],\n    \"imap_sort\": [\n        \"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\n        \"Sort an array of message headers, optionally including only messages that meet specified criteria.\"\n    ],\n    \"imap_status\": [\n        \"object imap_status(resource stream_id, string mailbox, int options)\",\n        \"Get status info from a mailbox\"\n    ],\n    \"imap_subscribe\": [\n        \"bool imap_subscribe(resource stream_id, string mailbox)\",\n        \"Subscribe to a mailbox\"\n    ],\n    \"imap_thread\": [\n        \"array imap_thread(resource stream_id [, int options])\",\n        \"Return threaded by REFERENCES tree\"\n    ],\n    \"imap_timeout\": [\n        \"mixed imap_timeout(int timeout_type [, int timeout])\",\n        \"Set or fetch imap timeout\"\n    ],\n    \"imap_uid\": [\n        \"int imap_uid(resource stream_id, int msg_no)\",\n        \"Get the unique message id associated with a standard sequential message number\"\n    ],\n    \"imap_undelete\": [\n        \"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\n        \"Remove the delete flag from a message\"\n    ],\n    \"imap_unsubscribe\": [\n        \"bool imap_unsubscribe(resource stream_id, string mailbox)\",\n        \"Unsubscribe from a mailbox\"\n    ],\n    \"imap_utf7_decode\": [\n        \"string imap_utf7_decode(string buf)\",\n        \"Decode a modified UTF-7 string\"\n    ],\n    \"imap_utf7_encode\": [\n        \"string imap_utf7_encode(string buf)\",\n        \"Encode a string in modified UTF-7\"\n    ],\n    \"imap_utf8\": [\n        \"string imap_utf8(string mime_encoded_text)\",\n        \"Convert a mime-encoded text to UTF-8\"\n    ],\n    \"imap_utf8_to_mutf7\": [\n        \"string imap_utf8_to_mutf7(string in)\",\n        \"Encode a UTF-8 string to modified UTF-7\"\n    ],\n    \"implode\": [\n        \"string implode([string glue,] array pieces)\",\n        \"Joins array elements placing glue string between items and return one string\"\n    ],\n    \"import_request_variables\": [\n        \"bool import_request_variables(string types [, string prefix])\",\n        \"Import GET/POST/Cookie variables into the global scope\"\n    ],\n    \"in_array\": [\n        \"bool in_array(mixed needle, array haystack [, bool strict])\",\n        \"Checks if the given value exists in the array\"\n    ],\n    \"include\": [\n        \"bool include(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"include_once\": [\n        \"bool include_once(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"inet_ntop\": [\n        \"string inet_ntop(string in_addr)\",\n        \"Converts a packed inet address to a human readable IP address string\"\n    ],\n    \"inet_pton\": [\n        \"string inet_pton(string ip_address)\",\n        \"Converts a human readable IP address to a packed binary string\"\n    ],\n    \"ini_get\": [\n        \"string ini_get(string varname)\",\n        \"Get a configuration option\"\n    ],\n    \"ini_get_all\": [\n        \"array ini_get_all([string extension[, bool details = true]])\",\n        \"Get all configuration options\"\n    ],\n    \"ini_restore\": [\n        \"void ini_restore(string varname)\",\n        \"Restore the value of a configuration option specified by varname\"\n    ],\n    \"ini_set\": [\n        \"string ini_set(string varname, string newvalue)\",\n        \"Set a configuration option, returns false on error and the old value of the configuration option on success\"\n    ],\n    \"interface_exists\": [\n        \"bool interface_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"intl_error_name\": [\n        \"string intl_error_name()\",\n        \"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"\n    ],\n    \"intl_get_error_code\": [\n        \"int intl_get_error_code()\",\n        \"* Get code of the last occured error.\"\n    ],\n    \"intl_get_error_message\": [\n        \"string intl_get_error_message()\",\n        \"* Get text description of the last occured error.\"\n    ],\n    \"intl_is_failure\": [\n        \"bool intl_is_failure()\",\n        \"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"\n    ],\n    \"intval\": [\n        \"int intval(mixed var [, int base])\",\n        \"Get the integer value of a variable using the optional base for the conversion\"\n    ],\n    \"ip2long\": [\n        \"int ip2long(string ip_address)\",\n        \"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"\n    ],\n    \"iptcembed\": [\n        \"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\n        \"Embed binary IPTC data into a JPEG image.\"\n    ],\n    \"iptcparse\": [\n        \"array iptcparse(string iptcdata)\",\n        \"Parse binary IPTC-data into associative array\"\n    ],\n    \"is_a\": [\n        \"bool is_a(object object, string class_name)\",\n        \"Returns true if the object is of this class or has this class as one of its parents\"\n    ],\n    \"is_array\": [\n        \"bool is_array(mixed var)\",\n        \"Returns true if variable is an array\"\n    ],\n    \"is_bool\": [\n        \"bool is_bool(mixed var)\",\n        \"Returns true if variable is a boolean\"\n    ],\n    \"is_callable\": [\n        \"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\n        \"Returns true if var is callable.\"\n    ],\n    \"is_dir\": [\n        \"bool is_dir(string filename)\",\n        \"Returns true if file is directory\"\n    ],\n    \"is_executable\": [\n        \"bool is_executable(string filename)\",\n        \"Returns true if file is executable\"\n    ],\n    \"is_file\": [\n        \"bool is_file(string filename)\",\n        \"Returns true if file is a regular file\"\n    ],\n    \"is_finite\": [\n        \"bool is_finite(float val)\",\n        \"Returns whether argument is finite\"\n    ],\n    \"is_float\": [\n        \"bool is_float(mixed var)\",\n        \"Returns true if variable is float point\"\n    ],\n    \"is_infinite\": [\n        \"bool is_infinite(float val)\",\n        \"Returns whether argument is infinite\"\n    ],\n    \"is_link\": [\n        \"bool is_link(string filename)\",\n        \"Returns true if file is symbolic link\"\n    ],\n    \"is_long\": [\n        \"bool is_long(mixed var)\",\n        \"Returns true if variable is a long (integer)\"\n    ],\n    \"is_nan\": [\n        \"bool is_nan(float val)\",\n        \"Returns whether argument is not a number\"\n    ],\n    \"is_null\": [\n        \"bool is_null(mixed var)\",\n        \"Returns true if variable is null\"\n    ],\n    \"is_numeric\": [\n        \"bool is_numeric(mixed value)\",\n        \"Returns true if value is a number or a numeric string\"\n    ],\n    \"is_object\": [\n        \"bool is_object(mixed var)\",\n        \"Returns true if variable is an object\"\n    ],\n    \"is_readable\": [\n        \"bool is_readable(string filename)\",\n        \"Returns true if file can be read\"\n    ],\n    \"is_resource\": [\n        \"bool is_resource(mixed var)\",\n        \"Returns true if variable is a resource\"\n    ],\n    \"is_scalar\": [\n        \"bool is_scalar(mixed value)\",\n        \"Returns true if value is a scalar\"\n    ],\n    \"is_string\": [\n        \"bool is_string(mixed var)\",\n        \"Returns true if variable is a string\"\n    ],\n    \"is_subclass_of\": [\n        \"bool is_subclass_of(object object, string class_name)\",\n        \"Returns true if the object has this class as one of its parents\"\n    ],\n    \"is_uploaded_file\": [\n        \"bool is_uploaded_file(string path)\",\n        \"Check if file was created by rfc1867 upload\"\n    ],\n    \"is_writable\": [\n        \"bool is_writable(string filename)\",\n        \"Returns true if file can be written\"\n    ],\n    \"isset\": [\n        \"bool isset(mixed var [, mixed var])\",\n        \"Determine whether a variable is set\"\n    ],\n    \"iterator_apply\": [\n        \"int iterator_apply(Traversable it, mixed function [, mixed params])\",\n        \"Calls a function for every element in an iterator\"\n    ],\n    \"iterator_count\": [\n        \"int iterator_count(Traversable it)\",\n        \"Count the elements in an iterator\"\n    ],\n    \"iterator_to_array\": [\n        \"array iterator_to_array(Traversable it [, bool use_keys = true])\",\n        \"Copy the iterator into an array\"\n    ],\n    \"jddayofweek\": [\n        \"mixed jddayofweek(int juliandaycount [, int mode])\",\n        \"Returns name or number of day of week from julian day count\"\n    ],\n    \"jdmonthname\": [\n        \"string jdmonthname(int juliandaycount, int mode)\",\n        \"Returns name of month for julian day count\"\n    ],\n    \"jdtofrench\": [\n        \"string jdtofrench(int juliandaycount)\",\n        \"Converts a julian day count to a french republic calendar date\"\n    ],\n    \"jdtogregorian\": [\n        \"string jdtogregorian(int juliandaycount)\",\n        \"Converts a julian day count to a gregorian calendar date\"\n    ],\n    \"jdtojewish\": [\n        \"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\n        \"Converts a julian day count to a jewish calendar date\"\n    ],\n    \"jdtojulian\": [\n        \"string jdtojulian(int juliandaycount)\",\n        \"Convert a julian day count to a julian calendar date\"\n    ],\n    \"jdtounix\": [\n        \"int jdtounix(int jday)\",\n        \"Convert Julian Day to UNIX timestamp\"\n    ],\n    \"jewishtojd\": [\n        \"int jewishtojd(int month, int day, int year)\",\n        \"Converts a jewish calendar date to a julian day count\"\n    ],\n    \"join\": [\n        \"string join(array src, string glue)\",\n        \"An alias for implode\"\n    ],\n    \"jpeg2wbmp\": [\n        \"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert JPEG image to WBMP image\"\n    ],\n    \"json_decode\": [\n        \"mixed json_decode(string json [, bool assoc [, long depth]])\",\n        \"Decodes the JSON representation into a PHP value\"\n    ],\n    \"json_encode\": [\n        \"string json_encode(mixed data [, int options])\",\n        \"Returns the JSON representation of a value\"\n    ],\n    \"json_last_error\": [\n        \"int json_last_error()\",\n        \"Returns the error code of the last json_decode().\"\n    ],\n    \"juliantojd\": [\n        \"int juliantojd(int month, int day, int year)\",\n        \"Converts a julian calendar date to julian day count\"\n    ],\n    \"key\": [\n        \"mixed key(array array_arg)\",\n        \"Return the key of the element currently pointed to by the internal array pointer\"\n    ],\n    \"krsort\": [\n        \"bool krsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key value in reverse order\"\n    ],\n    \"ksort\": [\n        \"bool ksort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key\"\n    ],\n    \"lcfirst\": [\n        \"string lcfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"lcg_value\": [\n        \"float lcg_value()\",\n        \"Returns a value from the combined linear congruential generator\"\n    ],\n    \"lchgrp\": [\n        \"bool lchgrp(string filename, mixed group)\",\n        \"Change symlink group\"\n    ],\n    \"ldap_8859_to_t61\": [\n        \"string ldap_8859_to_t61(string value)\",\n        \"Translate 8859 characters to t61 characters\"\n    ],\n    \"ldap_add\": [\n        \"bool ldap_add(resource link, string dn, array entry)\",\n        \"Add entries to LDAP directory\"\n    ],\n    \"ldap_bind\": [\n        \"bool ldap_bind(resource link [, string dn [, string password]])\",\n        \"Bind to LDAP directory\"\n    ],\n    \"ldap_compare\": [\n        \"bool ldap_compare(resource link, string dn, string attr, string value)\",\n        \"Determine if an entry has a specific value for one of its attributes\"\n    ],\n    \"ldap_connect\": [\n        \"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\n        \"Connect to an LDAP server\"\n    ],\n    \"ldap_count_entries\": [\n        \"int ldap_count_entries(resource link, resource result)\",\n        \"Count the number of entries in a search result\"\n    ],\n    \"ldap_delete\": [\n        \"bool ldap_delete(resource link, string dn)\",\n        \"Delete an entry from a directory\"\n    ],\n    \"ldap_dn2ufn\": [\n        \"string ldap_dn2ufn(string dn)\",\n        \"Convert DN to User Friendly Naming format\"\n    ],\n    \"ldap_err2str\": [\n        \"string ldap_err2str(int errno)\",\n        \"Convert error number to error string\"\n    ],\n    \"ldap_errno\": [\n        \"int ldap_errno(resource link)\",\n        \"Get the current ldap error number\"\n    ],\n    \"ldap_error\": [\n        \"string ldap_error(resource link)\",\n        \"Get the current ldap error string\"\n    ],\n    \"ldap_explode_dn\": [\n        \"array ldap_explode_dn(string dn, int with_attrib)\",\n        \"Splits DN into its component parts\"\n    ],\n    \"ldap_first_attribute\": [\n        \"string ldap_first_attribute(resource link, resource result_entry)\",\n        \"Return first attribute\"\n    ],\n    \"ldap_first_entry\": [\n        \"resource ldap_first_entry(resource link, resource result)\",\n        \"Return first result id\"\n    ],\n    \"ldap_first_reference\": [\n        \"resource ldap_first_reference(resource link, resource result)\",\n        \"Return first reference\"\n    ],\n    \"ldap_free_result\": [\n        \"bool ldap_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"ldap_get_attributes\": [\n        \"array ldap_get_attributes(resource link, resource result_entry)\",\n        \"Get attributes from a search result entry\"\n    ],\n    \"ldap_get_dn\": [\n        \"string ldap_get_dn(resource link, resource result_entry)\",\n        \"Get the DN of a result entry\"\n    ],\n    \"ldap_get_entries\": [\n        \"array ldap_get_entries(resource link, resource result)\",\n        \"Get all result entries\"\n    ],\n    \"ldap_get_option\": [\n        \"bool ldap_get_option(resource link, int option, mixed retval)\",\n        \"Get the current value of various session-wide parameters\"\n    ],\n    \"ldap_get_values_len\": [\n        \"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\n        \"Get all values with lengths from a result entry\"\n    ],\n    \"ldap_list\": [\n        \"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Single-level search\"\n    ],\n    \"ldap_mod_add\": [\n        \"bool ldap_mod_add(resource link, string dn, array entry)\",\n        \"Add attribute values to current\"\n    ],\n    \"ldap_mod_del\": [\n        \"bool ldap_mod_del(resource link, string dn, array entry)\",\n        \"Delete attribute values\"\n    ],\n    \"ldap_mod_replace\": [\n        \"bool ldap_mod_replace(resource link, string dn, array entry)\",\n        \"Replace attribute values with new ones\"\n    ],\n    \"ldap_next_attribute\": [\n        \"string ldap_next_attribute(resource link, resource result_entry)\",\n        \"Get the next attribute in result\"\n    ],\n    \"ldap_next_entry\": [\n        \"resource ldap_next_entry(resource link, resource result_entry)\",\n        \"Get next result entry\"\n    ],\n    \"ldap_next_reference\": [\n        \"resource ldap_next_reference(resource link, resource reference_entry)\",\n        \"Get next reference\"\n    ],\n    \"ldap_parse_reference\": [\n        \"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\n        \"Extract information from reference entry\"\n    ],\n    \"ldap_parse_result\": [\n        \"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\n        \"Extract information from result\"\n    ],\n    \"ldap_read\": [\n        \"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Read an entry\"\n    ],\n    \"ldap_rename\": [\n        \"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\n        \"Modify the name of an entry\"\n    ],\n    \"ldap_sasl_bind\": [\n        \"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\n        \"Bind to LDAP directory using SASL\"\n    ],\n    \"ldap_search\": [\n        \"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Search LDAP tree under base_dn\"\n    ],\n    \"ldap_set_option\": [\n        \"bool ldap_set_option(resource link, int option, mixed newval)\",\n        \"Set the value of various session-wide parameters\"\n    ],\n    \"ldap_set_rebind_proc\": [\n        \"bool ldap_set_rebind_proc(resource link, string callback)\",\n        \"Set a callback function to do re-binds on referral chasing.\"\n    ],\n    \"ldap_sort\": [\n        \"bool ldap_sort(resource link, resource result, string sortfilter)\",\n        \"Sort LDAP result entries\"\n    ],\n    \"ldap_start_tls\": [\n        \"bool ldap_start_tls(resource link)\",\n        \"Start TLS\"\n    ],\n    \"ldap_t61_to_8859\": [\n        \"string ldap_t61_to_8859(string value)\",\n        \"Translate t61 characters to 8859 characters\"\n    ],\n    \"ldap_unbind\": [\n        \"bool ldap_unbind(resource link)\",\n        \"Unbind from LDAP directory\"\n    ],\n    \"leak\": [\n        \"void leak(int num_bytes=3)\",\n        \"Cause an intentional memory leak, for testing/debugging purposes\"\n    ],\n    \"levenshtein\": [\n        \"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\n        \"Calculate Levenshtein distance between two strings\"\n    ],\n    \"libxml_clear_errors\": [\n        \"void libxml_clear_errors()\",\n        \"Clear last error from libxml\"\n    ],\n    \"libxml_disable_entity_loader\": [\n        \"bool libxml_disable_entity_loader([boolean disable])\",\n        \"Disable/Enable ability to load external entities\"\n    ],\n    \"libxml_get_errors\": [\n        \"object libxml_get_errors()\",\n        \"Retrieve array of errors\"\n    ],\n    \"libxml_get_last_error\": [\n        \"object libxml_get_last_error()\",\n        \"Retrieve last error from libxml\"\n    ],\n    \"libxml_set_streams_context\": [\n        \"void libxml_set_streams_context(resource streams_context)\",\n        \"Set the streams context for the next libxml document load or write\"\n    ],\n    \"libxml_use_internal_errors\": [\n        \"bool libxml_use_internal_errors([boolean use_errors])\",\n        \"Disable libxml errors and allow user to fetch error information as needed\"\n    ],\n    \"link\": [\n        \"int link(string target, string link)\",\n        \"Create a hard link\"\n    ],\n    \"linkinfo\": [\n        \"int linkinfo(string filename)\",\n        \"Returns the st_dev field of the UNIX C stat structure describing the link\"\n    ],\n    \"litespeed_request_headers\": [\n        \"array litespeed_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"litespeed_response_headers\": [\n        \"array litespeed_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"locale_accept_from_http\": [\n        \"string locale_accept_from_http(string $http_accept)\",\n        null\n    ],\n    \"locale_canonicalize\": [\n        \"static string locale_canonicalize(Locale $loc, string $locale)\",\n        \"* @param string $locale The locale string to canonicalize\"\n    ],\n    \"locale_filter_matches\": [\n        \"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\n        \"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"\n    ],\n    \"locale_get_all_variants\": [\n        \"static array locale_get_all_variants($locale)\",\n        \"* gets an array containing the list of variants, or null\"\n    ],\n    \"locale_get_default\": [\n        \"static string locale_get_default( )\",\n        \"Get default locale\"\n    ],\n    \"locale_get_keywords\": [\n        \"static array locale_get_keywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"\n    ],\n    \"locale_get_primary_language\": [\n        \"static string locale_get_primary_language($locale)\",\n        \"* gets the primary language for the $locale\"\n    ],\n    \"locale_get_region\": [\n        \"static string locale_get_region($locale)\",\n        \"* gets the region for the $locale\"\n    ],\n    \"locale_get_script\": [\n        \"static string locale_get_script($locale)\",\n        \"* gets the script for the $locale\"\n    ],\n    \"locale_lookup\": [\n        \"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\n        \"* Searchs the items in $langtag for the best match to the language * range\"\n    ],\n    \"locale_set_default\": [\n        \"static string locale_set_default( string $locale )\",\n        \"Set default locale\"\n    ],\n    \"localeconv\": [\n        \"array localeconv(void)\",\n        \"Returns numeric formatting information based on the current locale\"\n    ],\n    \"localtime\": [\n        \"array localtime([int timestamp [, bool associative_array]])\",\n        \"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"\n    ],\n    \"log\": [\n        \"float log(float number, [float base])\",\n        \"Returns the natural logarithm of the number, or the base log if base is specified\"\n    ],\n    \"log10\": [\n        \"float log10(float number)\",\n        \"Returns the base-10 logarithm of the number\"\n    ],\n    \"log1p\": [\n        \"float log1p(float number)\",\n        \"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"long2ip\": [\n        \"string long2ip(int proper_address)\",\n        \"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"\n    ],\n    \"lstat\": [\n        \"array lstat(string filename)\",\n        \"Give information about a file or symbolic link\"\n    ],\n    \"ltrim\": [\n        \"string ltrim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning of a string\"\n    ],\n    \"mail\": [\n        \"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"Send an email message\"\n    ],\n    \"max\": [\n        \"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the highest value in an array or a series of arguments\"\n    ],\n    \"mb_check_encoding\": [\n        \"bool mb_check_encoding([string var[, string encoding]])\",\n        \"Check if the string is valid for the specified encoding\"\n    ],\n    \"mb_convert_case\": [\n        \"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\n        \"Returns a case-folded version of sourcestring\"\n    ],\n    \"mb_convert_encoding\": [\n        \"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\n        \"Returns converted string in desired encoding\"\n    ],\n    \"mb_convert_kana\": [\n        \"string mb_convert_kana(string str [, string option] [, string encoding])\",\n        \"Conversion between full-width character and half-width character (Japanese)\"\n    ],\n    \"mb_convert_variables\": [\n        \"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\n        \"Converts the string resource in variables to desired encoding\"\n    ],\n    \"mb_decode_mimeheader\": [\n        \"string mb_decode_mimeheader(string string)\",\n        \"Decodes the MIME \\\"encoded-word\\\" in the string\"\n    ],\n    \"mb_decode_numericentity\": [\n        \"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts HTML numeric entities to character code\"\n    ],\n    \"mb_detect_encoding\": [\n        \"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\n        \"Encodings of the given string is returned (as a string)\"\n    ],\n    \"mb_detect_order\": [\n        \"bool|array mb_detect_order([mixed encoding-list])\",\n        \"Sets the current detect_order or Return the current detect_order as a array\"\n    ],\n    \"mb_encode_mimeheader\": [\n        \"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",\n        \"Converts the string to MIME \\\"encoded-word\\\" in the format of =?charset?(B|Q)?encoded_string?=\"\n    ],\n    \"mb_encode_numericentity\": [\n        \"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts specified characters to HTML numeric entities\"\n    ],\n    \"mb_encoding_aliases\": [\n        \"array mb_encoding_aliases(string encoding)\",\n        \"Returns an array of the aliases of a given encoding name\"\n    ],\n    \"mb_ereg\": [\n        \"int mb_ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_match\": [\n        \"bool mb_ereg_match(string pattern, string string [,string option])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_replace\": [\n        \"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\n        \"Replace regular expression for multibyte string\"\n    ],\n    \"mb_ereg_search\": [\n        \"bool mb_ereg_search([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_getpos\": [\n        \"int mb_ereg_search_getpos(void)\",\n        \"Get search start position\"\n    ],\n    \"mb_ereg_search_getregs\": [\n        \"array mb_ereg_search_getregs(void)\",\n        \"Get matched substring of the last time\"\n    ],\n    \"mb_ereg_search_init\": [\n        \"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\n        \"Initialize string and regular expression for search.\"\n    ],\n    \"mb_ereg_search_pos\": [\n        \"array mb_ereg_search_pos([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_regs\": [\n        \"array mb_ereg_search_regs([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_setpos\": [\n        \"bool mb_ereg_search_setpos(int position)\",\n        \"Set search start position\"\n    ],\n    \"mb_eregi\": [\n        \"int mb_eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match for multibyte string\"\n    ],\n    \"mb_eregi_replace\": [\n        \"string mb_eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression for multibyte string\"\n    ],\n    \"mb_get_info\": [\n        \"mixed mb_get_info([string type])\",\n        \"Returns the current settings of mbstring\"\n    ],\n    \"mb_http_input\": [\n        \"mixed mb_http_input([string type])\",\n        \"Returns the input encoding\"\n    ],\n    \"mb_http_output\": [\n        \"string mb_http_output([string encoding])\",\n        \"Sets the current output_encoding or returns the current output_encoding as a string\"\n    ],\n    \"mb_internal_encoding\": [\n        \"string mb_internal_encoding([string encoding])\",\n        \"Sets the current internal encoding or Returns the current internal encoding as a string\"\n    ],\n    \"mb_language\": [\n        \"string mb_language([string language])\",\n        \"Sets the current language or Returns the current language as a string\"\n    ],\n    \"mb_list_encodings\": [\n        \"mixed mb_list_encodings()\",\n        \"Returns an array of all supported entity encodings\"\n    ],\n    \"mb_output_handler\": [\n        \"string mb_output_handler(string contents, int status)\",\n        \"Returns string in output buffer converted to the http_output encoding\"\n    ],\n    \"mb_parse_str\": [\n        \"bool mb_parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"mb_preferred_mime_name\": [\n        \"string mb_preferred_mime_name(string encoding)\",\n        \"Return the preferred MIME name (charset) as a string\"\n    ],\n    \"mb_regex_encoding\": [\n        \"string mb_regex_encoding([string encoding])\",\n        \"Returns the current encoding for regex as a string.\"\n    ],\n    \"mb_regex_set_options\": [\n        \"string mb_regex_set_options([string options])\",\n        \"Set or get the default options for mbregex functions\"\n    ],\n    \"mb_send_mail\": [\n        \"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"*  Sends an email message with MIME scheme\"\n    ],\n    \"mb_split\": [\n        \"array mb_split(string pattern, string string [, int limit])\",\n        \"split multibyte string into array by regular expression\"\n    ],\n    \"mb_strcut\": [\n        \"string mb_strcut(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_strimwidth\": [\n        \"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\n        \"Trim the string in terminal width\"\n    ],\n    \"mb_stripos\": [\n        \"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_stristr\": [\n        \"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strlen\": [\n        \"int mb_strlen(string str [, string encoding])\",\n        \"Get character numbers of a string\"\n    ],\n    \"mb_strpos\": [\n        \"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"mb_strrchr\": [\n        \"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"mb_strrichr\": [\n        \"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another, case insensitive\"\n    ],\n    \"mb_strripos\": [\n        \"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of last occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strrpos\": [\n        \"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"mb_strstr\": [\n        \"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"mb_strtolower\": [\n        \"string mb_strtolower(string sourcestring [, string encoding])\",\n        \"*  Returns a lowercased version of sourcestring\"\n    ],\n    \"mb_strtoupper\": [\n        \"string mb_strtoupper(string sourcestring [, string encoding])\",\n        \"*  Returns a uppercased version of sourcestring\"\n    ],\n    \"mb_strwidth\": [\n        \"int mb_strwidth(string str [, string encoding])\",\n        \"Gets terminal width of a string\"\n    ],\n    \"mb_substitute_character\": [\n        \"mixed mb_substitute_character([mixed substchar])\",\n        \"Sets the current substitute_character or returns the current substitute_character\"\n    ],\n    \"mb_substr\": [\n        \"string mb_substr(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_substr_count\": [\n        \"int mb_substr_count(string haystack, string needle [, string encoding])\",\n        \"Count the number of substring occurrences\"\n    ],\n    \"mcrypt_cbc\": [\n        \"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\n        \"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_cfb\": [\n        \"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\n        \"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_create_iv\": [\n        \"string mcrypt_create_iv(int size, int source)\",\n        \"Create an initialization vector (IV)\"\n    ],\n    \"mcrypt_decrypt\": [\n        \"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_ecb\": [\n        \"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\n        \"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_enc_get_algorithms_name\": [\n        \"string mcrypt_enc_get_algorithms_name(resource td)\",\n        \"Returns the name of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_block_size\": [\n        \"int mcrypt_enc_get_block_size(resource td)\",\n        \"Returns the block size of the cipher specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_iv_size\": [\n        \"int mcrypt_enc_get_iv_size(resource td)\",\n        \"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_key_size\": [\n        \"int mcrypt_enc_get_key_size(resource td)\",\n        \"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_modes_name\": [\n        \"string mcrypt_enc_get_modes_name(resource td)\",\n        \"Returns the name of the mode specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_supported_key_sizes\": [\n        \"array mcrypt_enc_get_supported_key_sizes(resource td)\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_enc_is_block_algorithm\": [\n        \"bool mcrypt_enc_is_block_algorithm(resource td)\",\n        \"Returns TRUE if the alrogithm is a block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_algorithm_mode\": [\n        \"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_mode\": [\n        \"bool mcrypt_enc_is_block_mode(resource td)\",\n        \"Returns TRUE if the mode outputs blocks\"\n    ],\n    \"mcrypt_enc_self_test\": [\n        \"int mcrypt_enc_self_test(resource td)\",\n        \"This function runs the self test on the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_encrypt\": [\n        \"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_generic\": [\n        \"string mcrypt_generic(resource td, string data)\",\n        \"This function encrypts the plaintext\"\n    ],\n    \"mcrypt_generic_deinit\": [\n        \"bool mcrypt_generic_deinit(resource td)\",\n        \"This function terminates encrypt specified by the descriptor td\"\n    ],\n    \"mcrypt_generic_init\": [\n        \"int mcrypt_generic_init(resource td, string key, string iv)\",\n        \"This function initializes all buffers for the specific module\"\n    ],\n    \"mcrypt_get_block_size\": [\n        \"int mcrypt_get_block_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_cipher_name\": [\n        \"string mcrypt_get_cipher_name(string cipher)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_iv_size\": [\n        \"int mcrypt_get_iv_size(string cipher, string module)\",\n        \"Get the IV size of cipher (Usually the same as the blocksize)\"\n    ],\n    \"mcrypt_get_key_size\": [\n        \"int mcrypt_get_key_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_list_algorithms\": [\n        \"array mcrypt_list_algorithms([string lib_dir])\",\n        \"List all algorithms in \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_list_modes\": [\n        \"array mcrypt_list_modes([string lib_dir])\",\n        \"List all modes \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_module_close\": [\n        \"bool mcrypt_module_close(resource td)\",\n        \"Free the descriptor td\"\n    ],\n    \"mcrypt_module_get_algo_block_size\": [\n        \"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\n        \"Returns the block size of the algorithm\"\n    ],\n    \"mcrypt_module_get_algo_key_size\": [\n        \"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\n        \"Returns the maximum supported key size of the algorithm\"\n    ],\n    \"mcrypt_module_get_supported_key_sizes\": [\n        \"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_module_is_block_algorithm\": [\n        \"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\n        \"Returns TRUE if the algorithm is a block algorithm\"\n    ],\n    \"mcrypt_module_is_block_algorithm_mode\": [\n        \"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_module_is_block_mode\": [\n        \"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode outputs blocks of bytes\"\n    ],\n    \"mcrypt_module_open\": [\n        \"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\n        \"Opens the module of the algorithm and the mode to be used\"\n    ],\n    \"mcrypt_module_self_test\": [\n        \"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",\n        \"Does a self test of the module \\\"module\\\"\"\n    ],\n    \"mcrypt_ofb\": [\n        \"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"md5\": [\n        \"string md5(string str, [ bool raw_output])\",\n        \"Calculate the md5 hash of a string\"\n    ],\n    \"md5_file\": [\n        \"string md5_file(string filename [, bool raw_output])\",\n        \"Calculate the md5 hash of given filename\"\n    ],\n    \"mdecrypt_generic\": [\n        \"string mdecrypt_generic(resource td, string data)\",\n        \"This function decrypts the plaintext\"\n    ],\n    \"memory_get_peak_usage\": [\n        \"int memory_get_peak_usage([real_usage])\",\n        \"Returns the peak allocated by PHP memory\"\n    ],\n    \"memory_get_usage\": [\n        \"int memory_get_usage([real_usage])\",\n        \"Returns the allocated by PHP memory\"\n    ],\n    \"metaphone\": [\n        \"string metaphone(string text[, int phones])\",\n        \"Break english phrases down into their phonemes\"\n    ],\n    \"method_exists\": [\n        \"bool method_exists(object object, string method)\",\n        \"Checks if the class method exists\"\n    ],\n    \"mhash\": [\n        \"string mhash(int hash, string data [, string key])\",\n        \"Hash data with hash\"\n    ],\n    \"mhash_count\": [\n        \"int mhash_count(void)\",\n        \"Gets the number of available hashes\"\n    ],\n    \"mhash_get_block_size\": [\n        \"int mhash_get_block_size(int hash)\",\n        \"Gets the block size of hash\"\n    ],\n    \"mhash_get_hash_name\": [\n        \"string mhash_get_hash_name(int hash)\",\n        \"Gets the name of hash\"\n    ],\n    \"mhash_keygen_s2k\": [\n        \"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\n        \"Generates a key using hash functions\"\n    ],\n    \"microtime\": [\n        \"mixed microtime([bool get_as_float])\",\n        \"Returns either a string or a float containing the current time in seconds and microseconds\"\n    ],\n    \"mime_content_type\": [\n        \"string mime_content_type(string filename|resource stream)\",\n        \"Return content-type for file\"\n    ],\n    \"min\": [\n        \"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the lowest value in an array or a series of arguments\"\n    ],\n    \"mkdir\": [\n        \"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\n        \"Create a directory\"\n    ],\n    \"mktime\": [\n        \"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a date\"\n    ],\n    \"money_format\": [\n        \"string money_format(string format , float value)\",\n        \"Convert monetary value(s) to string\"\n    ],\n    \"move_uploaded_file\": [\n        \"bool move_uploaded_file(string path, string new_path)\",\n        \"Move a file if and only if it was created by an upload\"\n    ],\n    \"msg_get_queue\": [\n        \"resource msg_get_queue(int key [, int perms])\",\n        \"Attach to a message queue\"\n    ],\n    \"msg_queue_exists\": [\n        \"bool msg_queue_exists(int key)\",\n        \"Check whether a message queue exists\"\n    ],\n    \"msg_receive\": [\n        \"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_remove_queue\": [\n        \"bool msg_remove_queue(resource queue)\",\n        \"Destroy the queue\"\n    ],\n    \"msg_send\": [\n        \"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_set_queue\": [\n        \"bool msg_set_queue(resource queue, array data)\",\n        \"Set information for a message queue\"\n    ],\n    \"msg_stat_queue\": [\n        \"array msg_stat_queue(resource queue)\",\n        \"Returns information about a message queue\"\n    ],\n    \"msgfmt_create\": [\n        \"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\n        \"* Create formatter.\"\n    ],\n    \"msgfmt_format\": [\n        \"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_format_message\": [\n        \"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_get_error_code\": [\n        \"int msgfmt_get_error_code( MessageFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"msgfmt_get_error_message\": [\n        \"string msgfmt_get_error_message( MessageFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"msgfmt_get_locale\": [\n        \"string msgfmt_get_locale(MessageFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"msgfmt_get_pattern\": [\n        \"string msgfmt_get_pattern( MessageFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"msgfmt_parse\": [\n        \"array msgfmt_parse( MessageFormatter $nf, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"msgfmt_set_pattern\": [\n        \"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"mssql_bind\": [\n        \"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\n        \"Adds a parameter to a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_close\": [\n        \"bool mssql_close([resource conn_id])\",\n        \"Closes a connection to a MS-SQL server\"\n    ],\n    \"mssql_connect\": [\n        \"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a connection to a MS-SQL server\"\n    ],\n    \"mssql_data_seek\": [\n        \"bool mssql_data_seek(resource result_id, int offset)\",\n        \"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"\n    ],\n    \"mssql_execute\": [\n        \"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\n        \"Executes a stored procedure on a MS-SQL server database\"\n    ],\n    \"mssql_fetch_array\": [\n        \"array mssql_fetch_array(resource result_id [, int result_type])\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_assoc\": [\n        \"array mssql_fetch_assoc(resource result_id)\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_batch\": [\n        \"int mssql_fetch_batch(resource result_index)\",\n        \"Returns the next batch of records\"\n    ],\n    \"mssql_fetch_field\": [\n        \"object mssql_fetch_field(resource result_id [, int offset])\",\n        \"Gets information about certain fields in a query result\"\n    ],\n    \"mssql_fetch_object\": [\n        \"object mssql_fetch_object(resource result_id)\",\n        \"Returns a pseudo-object of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_row\": [\n        \"array mssql_fetch_row(resource result_id)\",\n        \"Returns an array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_field_length\": [\n        \"int mssql_field_length(resource result_id [, int offset])\",\n        \"Get the length of a MS-SQL field\"\n    ],\n    \"mssql_field_name\": [\n        \"string mssql_field_name(resource result_id [, int offset])\",\n        \"Returns the name of the field given by offset in the result set given by result_id\"\n    ],\n    \"mssql_field_seek\": [\n        \"bool mssql_field_seek(resource result_id, int offset)\",\n        \"Seeks to the specified field offset\"\n    ],\n    \"mssql_field_type\": [\n        \"string mssql_field_type(resource result_id [, int offset])\",\n        \"Returns the type of a field\"\n    ],\n    \"mssql_free_result\": [\n        \"bool mssql_free_result(resource result_index)\",\n        \"Free a MS-SQL result index\"\n    ],\n    \"mssql_free_statement\": [\n        \"bool mssql_free_statement(resource result_index)\",\n        \"Free a MS-SQL statement index\"\n    ],\n    \"mssql_get_last_message\": [\n        \"string mssql_get_last_message(void)\",\n        \"Gets the last message from the MS-SQL server\"\n    ],\n    \"mssql_guid_string\": [\n        \"string mssql_guid_string(string binary [,bool short_format])\",\n        \"Converts a 16 byte binary GUID to a string\"\n    ],\n    \"mssql_init\": [\n        \"int mssql_init(string sp_name [, resource conn_id])\",\n        \"Initializes a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_min_error_severity\": [\n        \"void mssql_min_error_severity(int severity)\",\n        \"Sets the lower error severity\"\n    ],\n    \"mssql_min_message_severity\": [\n        \"void mssql_min_message_severity(int severity)\",\n        \"Sets the lower message severity\"\n    ],\n    \"mssql_next_result\": [\n        \"bool mssql_next_result(resource result_id)\",\n        \"Move the internal result pointer to the next result\"\n    ],\n    \"mssql_num_fields\": [\n        \"int mssql_num_fields(resource mssql_result_index)\",\n        \"Returns the number of fields fetched in from the result id specified\"\n    ],\n    \"mssql_num_rows\": [\n        \"int mssql_num_rows(resource mssql_result_index)\",\n        \"Returns the number of rows fetched in from the result id specified\"\n    ],\n    \"mssql_pconnect\": [\n        \"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a persistent connection to a MS-SQL server\"\n    ],\n    \"mssql_query\": [\n        \"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\n        \"Perform an SQL query on a MS-SQL server database\"\n    ],\n    \"mssql_result\": [\n        \"string mssql_result(resource result_id, int row, mixed field)\",\n        \"Returns the contents of one cell from a MS-SQL result set\"\n    ],\n    \"mssql_rows_affected\": [\n        \"int mssql_rows_affected(resource conn_id)\",\n        \"Returns the number of records affected by the query\"\n    ],\n    \"mssql_select_db\": [\n        \"bool mssql_select_db(string database_name [, resource conn_id])\",\n        \"Select a MS-SQL database\"\n    ],\n    \"mt_getrandmax\": [\n        \"int mt_getrandmax(void)\",\n        \"Returns the maximum value a random number from Mersenne Twister can have\"\n    ],\n    \"mt_rand\": [\n        \"int mt_rand([int min, int max])\",\n        \"Returns a random number from Mersenne Twister\"\n    ],\n    \"mt_srand\": [\n        \"void mt_srand([int seed])\",\n        \"Seeds Mersenne Twister random number generator\"\n    ],\n    \"mysql_affected_rows\": [\n        \"int mysql_affected_rows([int link_identifier])\",\n        \"Gets number of affected rows in previous MySQL operation\"\n    ],\n    \"mysql_client_encoding\": [\n        \"string mysql_client_encoding([int link_identifier])\",\n        \"Returns the default character set for the current connection\"\n    ],\n    \"mysql_close\": [\n        \"bool mysql_close([int link_identifier])\",\n        \"Close a MySQL connection\"\n    ],\n    \"mysql_connect\": [\n        \"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\n        \"Opens a connection to a MySQL Server\"\n    ],\n    \"mysql_create_db\": [\n        \"bool mysql_create_db(string database_name [, int link_identifier])\",\n        \"Create a MySQL database\"\n    ],\n    \"mysql_data_seek\": [\n        \"bool mysql_data_seek(resource result, int row_number)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysql_db_query\": [\n        \"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_drop_db\": [\n        \"bool mysql_drop_db(string database_name [, int link_identifier])\",\n        \"Drops (delete) a MySQL database\"\n    ],\n    \"mysql_errno\": [\n        \"int mysql_errno([int link_identifier])\",\n        \"Returns the number of the error message from previous MySQL operation\"\n    ],\n    \"mysql_error\": [\n        \"string mysql_error([int link_identifier])\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysql_escape_string\": [\n        \"string mysql_escape_string(string to_be_escaped)\",\n        \"Escape string for mysql query\"\n    ],\n    \"mysql_fetch_array\": [\n        \"array mysql_fetch_array(resource result [, int result_type])\",\n        \"Fetch a result row as an array (associative, numeric or both)\"\n    ],\n    \"mysql_fetch_assoc\": [\n        \"array mysql_fetch_assoc(resource result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysql_fetch_field\": [\n        \"object mysql_fetch_field(resource result [, int field_offset])\",\n        \"Gets column information from a result and return as an object\"\n    ],\n    \"mysql_fetch_lengths\": [\n        \"array mysql_fetch_lengths(resource result)\",\n        \"Gets max data size of each column in a result\"\n    ],\n    \"mysql_fetch_object\": [\n        \"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysql_fetch_row\": [\n        \"array mysql_fetch_row(resource result)\",\n        \"Gets a result row as an enumerated array\"\n    ],\n    \"mysql_field_flags\": [\n        \"string mysql_field_flags(resource result, int field_offset)\",\n        \"Gets the flags associated with the specified field in a result\"\n    ],\n    \"mysql_field_len\": [\n        \"int mysql_field_len(resource result, int field_offset)\",\n        \"Returns the length of the specified field\"\n    ],\n    \"mysql_field_name\": [\n        \"string mysql_field_name(resource result, int field_index)\",\n        \"Gets the name of the specified field in a result\"\n    ],\n    \"mysql_field_seek\": [\n        \"bool mysql_field_seek(resource result, int field_offset)\",\n        \"Sets result pointer to a specific field offset\"\n    ],\n    \"mysql_field_table\": [\n        \"string mysql_field_table(resource result, int field_offset)\",\n        \"Gets name of the table the specified field is in\"\n    ],\n    \"mysql_field_type\": [\n        \"string mysql_field_type(resource result, int field_offset)\",\n        \"Gets the type of the specified field in a result\"\n    ],\n    \"mysql_free_result\": [\n        \"bool mysql_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"mysql_get_client_info\": [\n        \"string mysql_get_client_info(void)\",\n        \"Returns a string that represents the client library version\"\n    ],\n    \"mysql_get_host_info\": [\n        \"string mysql_get_host_info([int link_identifier])\",\n        \"Returns a string describing the type of connection in use, including the server host name\"\n    ],\n    \"mysql_get_proto_info\": [\n        \"int mysql_get_proto_info([int link_identifier])\",\n        \"Returns the protocol version used by current connection\"\n    ],\n    \"mysql_get_server_info\": [\n        \"string mysql_get_server_info([int link_identifier])\",\n        \"Returns a string that represents the server version number\"\n    ],\n    \"mysql_info\": [\n        \"string mysql_info([int link_identifier])\",\n        \"Returns a string containing information about the most recent query\"\n    ],\n    \"mysql_insert_id\": [\n        \"int mysql_insert_id([int link_identifier])\",\n        \"Gets the ID generated from the previous INSERT operation\"\n    ],\n    \"mysql_list_dbs\": [\n        \"resource mysql_list_dbs([int link_identifier])\",\n        \"List databases available on a MySQL server\"\n    ],\n    \"mysql_list_fields\": [\n        \"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\n        \"List MySQL result fields\"\n    ],\n    \"mysql_list_processes\": [\n        \"resource mysql_list_processes([int link_identifier])\",\n        \"Returns a result set describing the current server threads\"\n    ],\n    \"mysql_list_tables\": [\n        \"resource mysql_list_tables(string database_name [, int link_identifier])\",\n        \"List tables in a MySQL database\"\n    ],\n    \"mysql_num_fields\": [\n        \"int mysql_num_fields(resource result)\",\n        \"Gets number of fields in a result\"\n    ],\n    \"mysql_num_rows\": [\n        \"int mysql_num_rows(resource result)\",\n        \"Gets number of rows in a result\"\n    ],\n    \"mysql_pconnect\": [\n        \"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\n        \"Opens a persistent connection to a MySQL Server\"\n    ],\n    \"mysql_ping\": [\n        \"bool mysql_ping([int link_identifier])\",\n        \"Ping a server connection. If no connection then reconnect.\"\n    ],\n    \"mysql_query\": [\n        \"resource mysql_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_real_escape_string\": [\n        \"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\n        \"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysql_result\": [\n        \"mixed mysql_result(resource result, int row [, mixed field])\",\n        \"Gets result data\"\n    ],\n    \"mysql_select_db\": [\n        \"bool mysql_select_db(string database_name [, int link_identifier])\",\n        \"Selects a MySQL database\"\n    ],\n    \"mysql_set_charset\": [\n        \"bool mysql_set_charset(string csname [, int link_identifier])\",\n        \"sets client character set\"\n    ],\n    \"mysql_stat\": [\n        \"string mysql_stat([int link_identifier])\",\n        \"Returns a string containing status information\"\n    ],\n    \"mysql_thread_id\": [\n        \"int mysql_thread_id([int link_identifier])\",\n        \"Returns the thread id of current connection\"\n    ],\n    \"mysql_unbuffered_query\": [\n        \"resource mysql_unbuffered_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL, without fetching and buffering the result rows\"\n    ],\n    \"mysqli_affected_rows\": [\n        \"mixed mysqli_affected_rows(object link)\",\n        \"Get number of affected rows in previous MySQL operation\"\n    ],\n    \"mysqli_autocommit\": [\n        \"bool mysqli_autocommit(object link, bool mode)\",\n        \"Turn auto commit on or of\"\n    ],\n    \"mysqli_cache_stats\": [\n        \"array mysqli_cache_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_change_user\": [\n        \"bool mysqli_change_user(object link, string user, string password, string database)\",\n        \"Change logged-in user of the active connection\"\n    ],\n    \"mysqli_character_set_name\": [\n        \"string mysqli_character_set_name(object link)\",\n        \"Returns the name of the character set used for this connection\"\n    ],\n    \"mysqli_close\": [\n        \"bool mysqli_close(object link)\",\n        \"Close connection\"\n    ],\n    \"mysqli_commit\": [\n        \"bool mysqli_commit(object link)\",\n        \"Commit outstanding actions and close transaction\"\n    ],\n    \"mysqli_connect\": [\n        \"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_connect_errno\": [\n        \"int mysqli_connect_errno(void)\",\n        \"Returns the numerical value of the error message from last connect command\"\n    ],\n    \"mysqli_connect_error\": [\n        \"string mysqli_connect_error(void)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_data_seek\": [\n        \"bool mysqli_data_seek(object result, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_debug\": [\n        \"void mysqli_debug(string debug)\",\n        \"\"\n    ],\n    \"mysqli_dump_debug_info\": [\n        \"bool mysqli_dump_debug_info(object link)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_end\": [\n        \"void mysqli_embedded_server_end(void)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_start\": [\n        \"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\n        \"initialize and start embedded server\"\n    ],\n    \"mysqli_errno\": [\n        \"int mysqli_errno(object link)\",\n        \"Returns the numerical value of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_error\": [\n        \"string mysqli_error(object link)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_fetch_all\": [\n        \"mixed mysqli_fetch_all (object result [,int resulttype])\",\n        \"Fetches all result rows as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_array\": [\n        \"mixed mysqli_fetch_array (object result [,int resulttype])\",\n        \"Fetch a result row as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_assoc\": [\n        \"mixed mysqli_fetch_assoc (object result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysqli_fetch_field\": [\n        \"mixed mysqli_fetch_field (object result)\",\n        \"Get column information from a result and return as an object\"\n    ],\n    \"mysqli_fetch_field_direct\": [\n        \"mixed mysqli_fetch_field_direct (object result, int offset)\",\n        \"Fetch meta-data for a single field\"\n    ],\n    \"mysqli_fetch_fields\": [\n        \"mixed mysqli_fetch_fields (object result)\",\n        \"Return array of objects containing field meta-data\"\n    ],\n    \"mysqli_fetch_lengths\": [\n        \"mixed mysqli_fetch_lengths (object result)\",\n        \"Get the length of each output in a result\"\n    ],\n    \"mysqli_fetch_object\": [\n        \"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysqli_fetch_row\": [\n        \"array mysqli_fetch_row (object result)\",\n        \"Get a result row as an enumerated array\"\n    ],\n    \"mysqli_field_count\": [\n        \"int mysqli_field_count(object link)\",\n        \"Fetch the number of fields returned by the last query for the given link\"\n    ],\n    \"mysqli_field_seek\": [\n        \"int mysqli_field_seek(object result, int fieldnr)\",\n        \"Set result pointer to a specified field offset\"\n    ],\n    \"mysqli_field_tell\": [\n        \"int mysqli_field_tell(object result)\",\n        \"Get current field offset of result pointer\"\n    ],\n    \"mysqli_free_result\": [\n        \"void mysqli_free_result(object result)\",\n        \"Free query result memory for the given result handle\"\n    ],\n    \"mysqli_get_charset\": [\n        \"object mysqli_get_charset(object link)\",\n        \"returns a character set object\"\n    ],\n    \"mysqli_get_client_info\": [\n        \"string mysqli_get_client_info(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_client_stats\": [\n        \"array mysqli_get_client_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_client_version\": [\n        \"int mysqli_get_client_version(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_connection_stats\": [\n        \"array mysqli_get_connection_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_host_info\": [\n        \"string mysqli_get_host_info (object link)\",\n        \"Get MySQL host info\"\n    ],\n    \"mysqli_get_proto_info\": [\n        \"int mysqli_get_proto_info(object link)\",\n        \"Get MySQL protocol information\"\n    ],\n    \"mysqli_get_server_info\": [\n        \"string mysqli_get_server_info(object link)\",\n        \"Get MySQL server info\"\n    ],\n    \"mysqli_get_server_version\": [\n        \"int mysqli_get_server_version(object link)\",\n        \"Return the MySQL version for the server referenced by the given link\"\n    ],\n    \"mysqli_get_warnings\": [\n        \"object mysqli_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}\"\n    ],\n    \"mysqli_info\": [\n        \"string mysqli_info(object link)\",\n        \"Get information about the most recent query\"\n    ],\n    \"mysqli_init\": [\n        \"resource mysqli_init(void)\",\n        \"Initialize mysqli and return a resource for use with mysql_real_connect\"\n    ],\n    \"mysqli_insert_id\": [\n        \"mixed mysqli_insert_id(object link)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_kill\": [\n        \"bool mysqli_kill(object link, int processid)\",\n        \"Kill a mysql process on the server\"\n    ],\n    \"mysqli_link_construct\": [\n        \"object mysqli_link_construct()\",\n        \"\"\n    ],\n    \"mysqli_more_results\": [\n        \"bool mysqli_more_results(object link)\",\n        \"check if there any more query results from a multi query\"\n    ],\n    \"mysqli_multi_query\": [\n        \"bool mysqli_multi_query(object link, string query)\",\n        \"allows to execute multiple queries\"\n    ],\n    \"mysqli_next_result\": [\n        \"bool mysqli_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_num_fields\": [\n        \"int mysqli_num_fields(object result)\",\n        \"Get number of fields in result\"\n    ],\n    \"mysqli_num_rows\": [\n        \"mixed mysqli_num_rows(object result)\",\n        \"Get number of rows in result\"\n    ],\n    \"mysqli_options\": [\n        \"bool mysqli_options(object link, int flags, mixed values)\",\n        \"Set options\"\n    ],\n    \"mysqli_ping\": [\n        \"bool mysqli_ping(object link)\",\n        \"Ping a server connection or reconnect if there is no connection\"\n    ],\n    \"mysqli_poll\": [\n        \"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\n        \"Poll connections\"\n    ],\n    \"mysqli_prepare\": [\n        \"mixed mysqli_prepare(object link, string query)\",\n        \"Prepare a SQL statement for execution\"\n    ],\n    \"mysqli_query\": [\n        \"mixed mysqli_query(object link, string query [,int resultmode]) */\",\n        \"PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Os|l\\\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Empty query\\\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid value for resultmode\\\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT\"\n    ],\n    \"mysqli_real_connect\": [\n        \"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_real_escape_string\": [\n        \"string mysqli_real_escape_string(object link, string escapestr)\",\n        \"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysqli_real_query\": [\n        \"bool mysqli_real_query(object link, string query)\",\n        \"Binary-safe version of mysql_query()\"\n    ],\n    \"mysqli_reap_async_query\": [\n        \"int mysqli_reap_async_query(object link)\",\n        \"Poll connections\"\n    ],\n    \"mysqli_refresh\": [\n        \"bool mysqli_refresh(object link, long options)\",\n        \"Flush tables or caches, or reset replication server information\"\n    ],\n    \"mysqli_report\": [\n        \"bool mysqli_report(int flags)\",\n        \"sets report level\"\n    ],\n    \"mysqli_rollback\": [\n        \"bool mysqli_rollback(object link)\",\n        \"Undo actions from current transaction\"\n    ],\n    \"mysqli_select_db\": [\n        \"bool mysqli_select_db(object link, string dbname)\",\n        \"Select a MySQL database\"\n    ],\n    \"mysqli_set_charset\": [\n        \"bool mysqli_set_charset(object link, string csname)\",\n        \"sets client character set\"\n    ],\n    \"mysqli_set_local_infile_default\": [\n        \"void mysqli_set_local_infile_default(object link)\",\n        \"unsets user defined handler for load local infile command\"\n    ],\n    \"mysqli_set_local_infile_handler\": [\n        \"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\n        \"Set callback functions for LOAD DATA LOCAL INFILE\"\n    ],\n    \"mysqli_sqlstate\": [\n        \"string mysqli_sqlstate(object link)\",\n        \"Returns the SQLSTATE error from previous MySQL operation\"\n    ],\n    \"mysqli_ssl_set\": [\n        \"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\n        \"\"\n    ],\n    \"mysqli_stat\": [\n        \"mixed mysqli_stat(object link)\",\n        \"Get current system status\"\n    ],\n    \"mysqli_stmt_affected_rows\": [\n        \"mixed mysqli_stmt_affected_rows(object stmt)\",\n        \"Return the number of rows affected in the last query for the given link\"\n    ],\n    \"mysqli_stmt_attr_get\": [\n        \"int mysqli_stmt_attr_get(object stmt, long attr)\",\n        \"\"\n    ],\n    \"mysqli_stmt_attr_set\": [\n        \"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\n        \"\"\n    ],\n    \"mysqli_stmt_bind_param\": [\n        \"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\n        \"Bind variables to a prepared statement as parameters\"\n    ],\n    \"mysqli_stmt_bind_result\": [\n        \"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\n        \"Bind variables to a prepared statement for result storage\"\n    ],\n    \"mysqli_stmt_close\": [\n        \"bool mysqli_stmt_close(object stmt)\",\n        \"Close statement\"\n    ],\n    \"mysqli_stmt_data_seek\": [\n        \"void mysqli_stmt_data_seek(object stmt, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_stmt_errno\": [\n        \"int mysqli_stmt_errno(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_error\": [\n        \"string mysqli_stmt_error(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_execute\": [\n        \"bool mysqli_stmt_execute(object stmt)\",\n        \"Execute a prepared statement\"\n    ],\n    \"mysqli_stmt_fetch\": [\n        \"mixed mysqli_stmt_fetch(object stmt)\",\n        \"Fetch results from a prepared statement into the bound variables\"\n    ],\n    \"mysqli_stmt_field_count\": [\n        \"int mysqli_stmt_field_count(object stmt) {\",\n        \"Return the number of result columns for the given statement\"\n    ],\n    \"mysqli_stmt_free_result\": [\n        \"void mysqli_stmt_free_result(object stmt)\",\n        \"Free stored result memory for the given statement handle\"\n    ],\n    \"mysqli_stmt_get_result\": [\n        \"object mysqli_stmt_get_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_stmt_get_warnings\": [\n        \"object mysqli_stmt_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \\\"mysqli_stmt\\\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}\"\n    ],\n    \"mysqli_stmt_init\": [\n        \"mixed mysqli_stmt_init(object link)\",\n        \"Initialize statement object\"\n    ],\n    \"mysqli_stmt_insert_id\": [\n        \"mixed mysqli_stmt_insert_id(object stmt)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_stmt_next_result\": [\n        \"bool mysqli_stmt_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_stmt_num_rows\": [\n        \"mixed mysqli_stmt_num_rows(object stmt)\",\n        \"Return the number of rows in statements result set\"\n    ],\n    \"mysqli_stmt_param_count\": [\n        \"int mysqli_stmt_param_count(object stmt)\",\n        \"Return the number of parameter for the given statement\"\n    ],\n    \"mysqli_stmt_prepare\": [\n        \"bool mysqli_stmt_prepare(object stmt, string query)\",\n        \"prepare server side statement with query\"\n    ],\n    \"mysqli_stmt_reset\": [\n        \"bool mysqli_stmt_reset(object stmt)\",\n        \"reset a prepared statement\"\n    ],\n    \"mysqli_stmt_result_metadata\": [\n        \"mixed mysqli_stmt_result_metadata(object stmt)\",\n        \"return result set from statement\"\n    ],\n    \"mysqli_stmt_send_long_data\": [\n        \"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\n        \"\"\n    ],\n    \"mysqli_stmt_sqlstate\": [\n        \"string mysqli_stmt_sqlstate(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_store_result\": [\n        \"bool mysqli_stmt_store_result(stmt)\",\n        \"\"\n    ],\n    \"mysqli_store_result\": [\n        \"object mysqli_store_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_thread_id\": [\n        \"int mysqli_thread_id(object link)\",\n        \"Return the current thread ID\"\n    ],\n    \"mysqli_thread_safe\": [\n        \"bool mysqli_thread_safe(void)\",\n        \"Return whether thread safety is given or not\"\n    ],\n    \"mysqli_use_result\": [\n        \"mixed mysqli_use_result(object link)\",\n        \"Directly retrieve query results - do not buffer results on client side\"\n    ],\n    \"mysqli_warning_count\": [\n        \"int mysqli_warning_count (object link)\",\n        \"Return number of warnings from the last query for the given link\"\n    ],\n    \"natcasesort\": [\n        \"void natcasesort(array &array_arg)\",\n        \"Sort an array using case-insensitive natural sort\"\n    ],\n    \"natsort\": [\n        \"void natsort(array &array_arg)\",\n        \"Sort an array using natural sort\"\n    ],\n    \"next\": [\n        \"mixed next(array array_arg)\",\n        \"Move array argument's internal pointer to the next element and return it\"\n    ],\n    \"ngettext\": [\n        \"string ngettext(string MSGID1, string MSGID2, int N)\",\n        \"Plural version of gettext()\"\n    ],\n    \"nl2br\": [\n        \"string nl2br(string str [, bool is_xhtml])\",\n        \"Converts newlines to HTML line breaks\"\n    ],\n    \"nl_langinfo\": [\n        \"string nl_langinfo(int item)\",\n        \"Query language and locale information\"\n    ],\n    \"normalizer_is_normalize\": [\n        \"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Test if a string is in a given normalization form.\"\n    ],\n    \"normalizer_normalize\": [\n        \"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Normalize a string.\"\n    ],\n    \"nsapi_request_headers\": [\n        \"array nsapi_request_headers(void)\",\n        \"Get all headers from the request\"\n    ],\n    \"nsapi_response_headers\": [\n        \"array nsapi_response_headers(void)\",\n        \"Get all headers from the response\"\n    ],\n    \"nsapi_virtual\": [\n        \"bool nsapi_virtual(string uri)\",\n        \"Perform an NSAPI sub-request\"\n    ],\n    \"number_format\": [\n        \"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\n        \"Formats a number with grouped thousands\"\n    ],\n    \"numfmt_create\": [\n        \"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\n        \"* Create number formatter.\"\n    ],\n    \"numfmt_format\": [\n        \"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\n        \"* Format a number.\"\n    ],\n    \"numfmt_format_currency\": [\n        \"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\n        \"* Format a number as currency.\"\n    ],\n    \"numfmt_get_attribute\": [\n        \"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_get_error_code\": [\n        \"int numfmt_get_error_code( NumberFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"numfmt_get_error_message\": [\n        \"string numfmt_get_error_message( NumberFormatter $nf )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"numfmt_get_locale\": [\n        \"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\n        \"* Get formatter locale.\"\n    ],\n    \"numfmt_get_pattern\": [\n        \"string numfmt_get_pattern( NumberFormatter $nf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"numfmt_get_symbol\": [\n        \"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter symbol value.\"\n    ],\n    \"numfmt_get_text_attribute\": [\n        \"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_parse\": [\n        \"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\n        \"* Parse a number.\"\n    ],\n    \"numfmt_parse_currency\": [\n        \"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\n        \"* Parse a number as currency.\"\n    ],\n    \"numfmt_parse_message\": [\n        \"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"numfmt_set_attribute\": [\n        \"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_set_pattern\": [\n        \"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"numfmt_set_symbol\": [\n        \"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\n        \"* Set formatter symbol value.\"\n    ],\n    \"numfmt_set_text_attribute\": [\n        \"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"ob_clean\": [\n        \"bool ob_clean(void)\",\n        \"Clean (delete) the current output buffer\"\n    ],\n    \"ob_end_clean\": [\n        \"bool ob_end_clean(void)\",\n        \"Clean the output buffer, and delete current output buffer\"\n    ],\n    \"ob_end_flush\": [\n        \"bool ob_end_flush(void)\",\n        \"Flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_flush\": [\n        \"bool ob_flush(void)\",\n        \"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"\n    ],\n    \"ob_get_clean\": [\n        \"bool ob_get_clean(void)\",\n        \"Get current buffer contents and delete current output buffer\"\n    ],\n    \"ob_get_contents\": [\n        \"string ob_get_contents(void)\",\n        \"Return the contents of the output buffer\"\n    ],\n    \"ob_get_flush\": [\n        \"bool ob_get_flush(void)\",\n        \"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_get_length\": [\n        \"int ob_get_length(void)\",\n        \"Return the length of the output buffer\"\n    ],\n    \"ob_get_level\": [\n        \"int ob_get_level(void)\",\n        \"Return the nesting level of the output buffer\"\n    ],\n    \"ob_get_status\": [\n        \"false|array ob_get_status([bool full_status])\",\n        \"Return the status of the active or all output buffers\"\n    ],\n    \"ob_gzhandler\": [\n        \"string ob_gzhandler(string str, int mode)\",\n        \"Encode str based on accept-encoding setting - designed to be called from ob_start()\"\n    ],\n    \"ob_iconv_handler\": [\n        \"string ob_iconv_handler(string contents, int status)\",\n        \"Returns str in output buffer converted to the iconv.output_encoding character set\"\n    ],\n    \"ob_implicit_flush\": [\n        \"void ob_implicit_flush([int flag])\",\n        \"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"\n    ],\n    \"ob_list_handlers\": [\n        \"false|array ob_list_handlers()\",\n        \"*  List all output_buffers in an array\"\n    ],\n    \"ob_start\": [\n        \"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\n        \"Turn on Output Buffering (specifying an optional output handler).\"\n    ],\n    \"oci_bind_array_by_name\": [\n        \"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\n        \"Bind a PHP array to an Oracle PL/SQL type by name\"\n    ],\n    \"oci_bind_by_name\": [\n        \"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\n        \"Bind a PHP variable to an Oracle placeholder by name\"\n    ],\n    \"oci_cancel\": [\n        \"bool oci_cancel(resource stmt)\",\n        \"Cancel reading from a cursor\"\n    ],\n    \"oci_close\": [\n        \"bool oci_close(resource connection)\",\n        \"Disconnect from database\"\n    ],\n    \"oci_collection_append\": [\n        \"bool oci_collection_append(string value)\",\n        \"Append an object to the collection\"\n    ],\n    \"oci_collection_assign\": [\n        \"bool oci_collection_assign(object from)\",\n        \"Assign a collection from another existing collection\"\n    ],\n    \"oci_collection_element_assign\": [\n        \"bool oci_collection_element_assign(int index, string val)\",\n        \"Assign element val to collection at index ndx\"\n    ],\n    \"oci_collection_element_get\": [\n        \"string oci_collection_element_get(int ndx)\",\n        \"Retrieve the value at collection index ndx\"\n    ],\n    \"oci_collection_max\": [\n        \"int oci_collection_max()\",\n        \"Return the max value of a collection. For a varray this is the maximum length of the array\"\n    ],\n    \"oci_collection_size\": [\n        \"int oci_collection_size()\",\n        \"Return the size of a collection\"\n    ],\n    \"oci_collection_trim\": [\n        \"bool oci_collection_trim(int num)\",\n        \"Trim num elements from the end of a collection\"\n    ],\n    \"oci_commit\": [\n        \"bool oci_commit(resource connection)\",\n        \"Commit the current context\"\n    ],\n    \"oci_connect\": [\n        \"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_define_by_name\": [\n        \"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\n        \"Define a PHP variable to an Oracle column by name\"\n    ],\n    \"oci_error\": [\n        \"array oci_error([resource stmt|connection|global])\",\n        \"Return the last error of stmt|connection|global. If no error happened returns false.\"\n    ],\n    \"oci_execute\": [\n        \"bool oci_execute(resource stmt [, int mode])\",\n        \"Execute a parsed statement\"\n    ],\n    \"oci_fetch\": [\n        \"bool oci_fetch(resource stmt)\",\n        \"Prepare a new row of data for reading\"\n    ],\n    \"oci_fetch_all\": [\n        \"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\n        \"Fetch all rows of result data into an array\"\n    ],\n    \"oci_fetch_array\": [\n        \"array oci_fetch_array( resource stmt [, int mode ])\",\n        \"Fetch a result row as an array\"\n    ],\n    \"oci_fetch_assoc\": [\n        \"array oci_fetch_assoc( resource stmt )\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"oci_fetch_object\": [\n        \"object oci_fetch_object( resource stmt )\",\n        \"Fetch a result row as an object\"\n    ],\n    \"oci_fetch_row\": [\n        \"array oci_fetch_row( resource stmt )\",\n        \"Fetch a result row as an enumerated array\"\n    ],\n    \"oci_field_is_null\": [\n        \"bool oci_field_is_null(resource stmt, int col)\",\n        \"Tell whether a column is NULL\"\n    ],\n    \"oci_field_name\": [\n        \"string oci_field_name(resource stmt, int col)\",\n        \"Tell the name of a column\"\n    ],\n    \"oci_field_precision\": [\n        \"int oci_field_precision(resource stmt, int col)\",\n        \"Tell the precision of a column\"\n    ],\n    \"oci_field_scale\": [\n        \"int oci_field_scale(resource stmt, int col)\",\n        \"Tell the scale of a column\"\n    ],\n    \"oci_field_size\": [\n        \"int oci_field_size(resource stmt, int col)\",\n        \"Tell the maximum data size of a column\"\n    ],\n    \"oci_field_type\": [\n        \"mixed oci_field_type(resource stmt, int col)\",\n        \"Tell the data type of a column\"\n    ],\n    \"oci_field_type_raw\": [\n        \"int oci_field_type_raw(resource stmt, int col)\",\n        \"Tell the raw oracle data type of a column\"\n    ],\n    \"oci_free_collection\": [\n        \"bool oci_free_collection()\",\n        \"Deletes collection object\"\n    ],\n    \"oci_free_descriptor\": [\n        \"bool oci_free_descriptor()\",\n        \"Deletes large object description\"\n    ],\n    \"oci_free_statement\": [\n        \"bool oci_free_statement(resource stmt)\",\n        \"Free all resources associated with a statement\"\n    ],\n    \"oci_internal_debug\": [\n        \"void oci_internal_debug(int onoff)\",\n        \"Toggle internal debugging output for the OCI extension\"\n    ],\n    \"oci_lob_append\": [\n        \"bool oci_lob_append( object lob )\",\n        \"Appends data from a LOB to another LOB\"\n    ],\n    \"oci_lob_close\": [\n        \"bool oci_lob_close()\",\n        \"Closes lob descriptor\"\n    ],\n    \"oci_lob_copy\": [\n        \"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\n        \"Copies data from a LOB to another LOB\"\n    ],\n    \"oci_lob_eof\": [\n        \"bool oci_lob_eof()\",\n        \"Checks if EOF is reached\"\n    ],\n    \"oci_lob_erase\": [\n        \"int oci_lob_erase( [ int offset [, int length ] ] )\",\n        \"Erases a specified portion of the internal LOB, starting at a specified offset\"\n    ],\n    \"oci_lob_export\": [\n        \"bool oci_lob_export([string filename [, int start [, int length]]])\",\n        \"Writes a large object into a file\"\n    ],\n    \"oci_lob_flush\": [\n        \"bool oci_lob_flush( [ int flag ] )\",\n        \"Flushes the LOB buffer\"\n    ],\n    \"oci_lob_import\": [\n        \"bool oci_lob_import( string filename )\",\n        \"Loads file into a LOB\"\n    ],\n    \"oci_lob_is_equal\": [\n        \"bool oci_lob_is_equal( object lob1, object lob2 )\",\n        \"Tests to see if two LOB/FILE locators are equal\"\n    ],\n    \"oci_lob_load\": [\n        \"string oci_lob_load()\",\n        \"Loads a large object\"\n    ],\n    \"oci_lob_read\": [\n        \"string oci_lob_read( int length )\",\n        \"Reads particular part of a large object\"\n    ],\n    \"oci_lob_rewind\": [\n        \"bool oci_lob_rewind()\",\n        \"Rewind pointer of a LOB\"\n    ],\n    \"oci_lob_save\": [\n        \"bool oci_lob_save( string data [, int offset ])\",\n        \"Saves a large object\"\n    ],\n    \"oci_lob_seek\": [\n        \"bool oci_lob_seek( int offset [, int whence ])\",\n        \"Moves the pointer of a LOB\"\n    ],\n    \"oci_lob_size\": [\n        \"int oci_lob_size()\",\n        \"Returns size of a large object\"\n    ],\n    \"oci_lob_tell\": [\n        \"int oci_lob_tell()\",\n        \"Tells LOB pointer position\"\n    ],\n    \"oci_lob_truncate\": [\n        \"bool oci_lob_truncate( [ int length ])\",\n        \"Truncates a LOB\"\n    ],\n    \"oci_lob_write\": [\n        \"int oci_lob_write( string string [, int length ])\",\n        \"Writes data to current position of a LOB\"\n    ],\n    \"oci_lob_write_temporary\": [\n        \"bool oci_lob_write_temporary(string var [, int lob_type])\",\n        \"Writes temporary blob\"\n    ],\n    \"oci_new_collection\": [\n        \"object oci_new_collection(resource connection, string tdo [, string schema])\",\n        \"Initialize a new collection\"\n    ],\n    \"oci_new_connect\": [\n        \"resource oci_new_connect(string user, string pass [, string db])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_new_cursor\": [\n        \"resource oci_new_cursor(resource connection)\",\n        \"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"\n    ],\n    \"oci_new_descriptor\": [\n        \"object oci_new_descriptor(resource connection [, int type])\",\n        \"Initialize a new empty descriptor LOB/FILE (LOB is default)\"\n    ],\n    \"oci_num_fields\": [\n        \"int oci_num_fields(resource stmt)\",\n        \"Return the number of result columns in a statement\"\n    ],\n    \"oci_num_rows\": [\n        \"int oci_num_rows(resource stmt)\",\n        \"Return the row count of an OCI statement\"\n    ],\n    \"oci_parse\": [\n        \"resource oci_parse(resource connection, string query)\",\n        \"Parse a query and return a statement\"\n    ],\n    \"oci_password_change\": [\n        \"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\n        \"Changes the password of an account\"\n    ],\n    \"oci_pconnect\": [\n        \"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\n        \"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"\n    ],\n    \"oci_result\": [\n        \"string oci_result(resource stmt, mixed column)\",\n        \"Return a single column of result data\"\n    ],\n    \"oci_rollback\": [\n        \"bool oci_rollback(resource connection)\",\n        \"Rollback the current context\"\n    ],\n    \"oci_server_version\": [\n        \"string oci_server_version(resource connection)\",\n        \"Return a string containing server version information\"\n    ],\n    \"oci_set_action\": [\n        \"bool oci_set_action(resource connection, string value)\",\n        \"Sets the action attribute on the connection\"\n    ],\n    \"oci_set_client_identifier\": [\n        \"bool oci_set_client_identifier(resource connection, string value)\",\n        \"Sets the client identifier attribute on the connection\"\n    ],\n    \"oci_set_client_info\": [\n        \"bool oci_set_client_info(resource connection, string value)\",\n        \"Sets the client info attribute on the connection\"\n    ],\n    \"oci_set_edition\": [\n        \"bool oci_set_edition(string value)\",\n        \"Sets the edition attribute for all subsequent connections created\"\n    ],\n    \"oci_set_module_name\": [\n        \"bool oci_set_module_name(resource connection, string value)\",\n        \"Sets the module attribute on the connection\"\n    ],\n    \"oci_set_prefetch\": [\n        \"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\n        \"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"\n    ],\n    \"oci_statement_type\": [\n        \"string oci_statement_type(resource stmt)\",\n        \"Return the query type of an OCI statement\"\n    ],\n    \"ocifetchinto\": [\n        \"int ocifetchinto(resource stmt, array &output [, int mode])\",\n        \"Fetch a row of result data into an array\"\n    ],\n    \"ocigetbufferinglob\": [\n        \"bool ocigetbufferinglob()\",\n        \"Returns current state of buffering for a LOB\"\n    ],\n    \"ocisetbufferinglob\": [\n        \"bool ocisetbufferinglob( boolean flag )\",\n        \"Enables/disables buffering for a LOB\"\n    ],\n    \"octdec\": [\n        \"int octdec(string octal_number)\",\n        \"Returns the decimal equivalent of an octal string\"\n    ],\n    \"odbc_autocommit\": [\n        \"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\n        \"Toggle autocommit mode or get status\"\n    ],\n    \"odbc_binmode\": [\n        \"bool odbc_binmode(int result_id, int mode)\",\n        \"Handle binary column data\"\n    ],\n    \"odbc_close\": [\n        \"void odbc_close(resource connection_id)\",\n        \"Close an ODBC connection\"\n    ],\n    \"odbc_close_all\": [\n        \"void odbc_close_all(void)\",\n        \"Close all ODBC connections\"\n    ],\n    \"odbc_columnprivileges\": [\n        \"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\n        \"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"\n    ],\n    \"odbc_columns\": [\n        \"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\n        \"Returns a result identifier that can be used to fetch a list of column names in specified tables\"\n    ],\n    \"odbc_commit\": [\n        \"bool odbc_commit(resource connection_id)\",\n        \"Commit an ODBC transaction\"\n    ],\n    \"odbc_connect\": [\n        \"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\n        \"Connect to a datasource\"\n    ],\n    \"odbc_cursor\": [\n        \"string odbc_cursor(resource result_id)\",\n        \"Get cursor name\"\n    ],\n    \"odbc_data_source\": [\n        \"array odbc_data_source(resource connection_id, int fetch_type)\",\n        \"Return information about the currently connected data source\"\n    ],\n    \"odbc_error\": [\n        \"string odbc_error([resource connection_id])\",\n        \"Get the last error code\"\n    ],\n    \"odbc_errormsg\": [\n        \"string odbc_errormsg([resource connection_id])\",\n        \"Get the last error message\"\n    ],\n    \"odbc_exec\": [\n        \"resource odbc_exec(resource connection_id, string query [, int flags])\",\n        \"Prepare and execute an SQL statement\"\n    ],\n    \"odbc_execute\": [\n        \"bool odbc_execute(resource result_id [, array parameters_array])\",\n        \"Execute a prepared statement\"\n    ],\n    \"odbc_fetch_array\": [\n        \"array odbc_fetch_array(int result [, int rownumber])\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"odbc_fetch_into\": [\n        \"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\n        \"Fetch one result row into an array\"\n    ],\n    \"odbc_fetch_object\": [\n        \"object odbc_fetch_object(int result [, int rownumber])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"odbc_fetch_row\": [\n        \"bool odbc_fetch_row(resource result_id [, int row_number])\",\n        \"Fetch a row\"\n    ],\n    \"odbc_field_len\": [\n        \"int odbc_field_len(resource result_id, int field_number)\",\n        \"Get the length (precision) of a column\"\n    ],\n    \"odbc_field_name\": [\n        \"string odbc_field_name(resource result_id, int field_number)\",\n        \"Get a column name\"\n    ],\n    \"odbc_field_num\": [\n        \"int odbc_field_num(resource result_id, string field_name)\",\n        \"Return column number\"\n    ],\n    \"odbc_field_scale\": [\n        \"int odbc_field_scale(resource result_id, int field_number)\",\n        \"Get the scale of a column\"\n    ],\n    \"odbc_field_type\": [\n        \"string odbc_field_type(resource result_id, int field_number)\",\n        \"Get the datatype of a column\"\n    ],\n    \"odbc_foreignkeys\": [\n        \"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\n        \"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"\n    ],\n    \"odbc_free_result\": [\n        \"bool odbc_free_result(resource result_id)\",\n        \"Free resources associated with a result\"\n    ],\n    \"odbc_gettypeinfo\": [\n        \"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\n        \"Returns a result identifier containing information about data types supported by the data source\"\n    ],\n    \"odbc_longreadlen\": [\n        \"bool odbc_longreadlen(int result_id, int length)\",\n        \"Handle LONG columns\"\n    ],\n    \"odbc_next_result\": [\n        \"bool odbc_next_result(resource result_id)\",\n        \"Checks if multiple results are avaiable\"\n    ],\n    \"odbc_num_fields\": [\n        \"int odbc_num_fields(resource result_id)\",\n        \"Get number of columns in a result\"\n    ],\n    \"odbc_num_rows\": [\n        \"int odbc_num_rows(resource result_id)\",\n        \"Get number of rows in a result\"\n    ],\n    \"odbc_pconnect\": [\n        \"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\n        \"Establish a persistent connection to a datasource\"\n    ],\n    \"odbc_prepare\": [\n        \"resource odbc_prepare(resource connection_id, string query)\",\n        \"Prepares a statement for execution\"\n    ],\n    \"odbc_primarykeys\": [\n        \"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\n        \"Returns a result identifier listing the column names that comprise the primary key for a table\"\n    ],\n    \"odbc_procedurecolumns\": [\n        \"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\n        \"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"\n    ],\n    \"odbc_procedures\": [\n        \"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\n        \"Returns a result identifier containg the list of procedure names in a datasource\"\n    ],\n    \"odbc_result\": [\n        \"mixed odbc_result(resource result_id, mixed field)\",\n        \"Get result data\"\n    ],\n    \"odbc_result_all\": [\n        \"int odbc_result_all(resource result_id [, string format])\",\n        \"Print result as HTML table\"\n    ],\n    \"odbc_rollback\": [\n        \"bool odbc_rollback(resource connection_id)\",\n        \"Rollback a transaction\"\n    ],\n    \"odbc_setoption\": [\n        \"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\n        \"Sets connection or statement options\"\n    ],\n    \"odbc_specialcolumns\": [\n        \"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\n        \"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"\n    ],\n    \"odbc_statistics\": [\n        \"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\n        \"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"\n    ],\n    \"odbc_tableprivileges\": [\n        \"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\n        \"Returns a result identifier containing a list of tables and the privileges associated with each table\"\n    ],\n    \"odbc_tables\": [\n        \"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\n        \"Call the SQLTables function\"\n    ],\n    \"opendir\": [\n        \"mixed opendir(string path[, resource context])\",\n        \"Open a directory and return a dir_handle\"\n    ],\n    \"openlog\": [\n        \"bool openlog(string ident, int option, int facility)\",\n        \"Open connection to system logger\"\n    ],\n    \"openssl_csr_export\": [\n        \"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\n        \"Exports a CSR to file or a var\"\n    ],\n    \"openssl_csr_export_to_file\": [\n        \"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\n        \"Exports a CSR to file\"\n    ],\n    \"openssl_csr_get_public_key\": [\n        \"mixed openssl_csr_get_public_key(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_get_subject\": [\n        \"mixed openssl_csr_get_subject(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_new\": [\n        \"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\n        \"Generates a privkey and CSR\"\n    ],\n    \"openssl_csr_sign\": [\n        \"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\n        \"Signs a cert with another CERT\"\n    ],\n    \"openssl_decrypt\": [\n        \"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\n        \"Takes raw or base64 encoded string and dectupt it using given method and key\"\n    ],\n    \"openssl_dh_compute_key\": [\n        \"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\n        \"Computes shared sicret for public value of remote DH key and local DH key\"\n    ],\n    \"openssl_digest\": [\n        \"string openssl_digest(string data, string method [, bool raw_output=false])\",\n        \"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"\n    ],\n    \"openssl_encrypt\": [\n        \"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\n        \"Encrypts given data with given method and key, returns raw or base64 encoded string\"\n    ],\n    \"openssl_error_string\": [\n        \"mixed openssl_error_string(void)\",\n        \"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"\n    ],\n    \"openssl_get_cipher_methods\": [\n        \"array openssl_get_cipher_methods([bool aliases = false])\",\n        \"Return array of available cipher methods\"\n    ],\n    \"openssl_get_md_methods\": [\n        \"array openssl_get_md_methods([bool aliases = false])\",\n        \"Return array of available digest methods\"\n    ],\n    \"openssl_open\": [\n        \"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\n        \"Opens data\"\n    ],\n    \"openssl_pkcs12_export\": [\n        \"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS12 to a var\"\n    ],\n    \"openssl_pkcs12_export_to_file\": [\n        \"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS to file\"\n    ],\n    \"openssl_pkcs12_read\": [\n        \"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\n        \"Parses a PKCS12 to an array\"\n    ],\n    \"openssl_pkcs7_decrypt\": [\n        \"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\n        \"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"\n    ],\n    \"openssl_pkcs7_encrypt\": [\n        \"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\n        \"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"\n    ],\n    \"openssl_pkcs7_sign\": [\n        \"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\n        \"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"\n    ],\n    \"openssl_pkcs7_verify\": [\n        \"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\n        \"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"\n    ],\n    \"openssl_pkey_export\": [\n        \"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\n        \"Gets an exportable representation of a key into a string or file\"\n    ],\n    \"openssl_pkey_export_to_file\": [\n        \"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\n        \"Gets an exportable representation of a key into a file\"\n    ],\n    \"openssl_pkey_free\": [\n        \"void openssl_pkey_free(int key)\",\n        \"Frees a key\"\n    ],\n    \"openssl_pkey_get_details\": [\n        \"resource openssl_pkey_get_details(resource key)\",\n        \"returns an array with the key details (bits, pkey, type)\"\n    ],\n    \"openssl_pkey_get_private\": [\n        \"int openssl_pkey_get_private(string key [, string passphrase])\",\n        \"Gets private keys\"\n    ],\n    \"openssl_pkey_get_public\": [\n        \"int openssl_pkey_get_public(mixed cert)\",\n        \"Gets public key from X.509 certificate\"\n    ],\n    \"openssl_pkey_new\": [\n        \"resource openssl_pkey_new([array configargs])\",\n        \"Generates a new private key\"\n    ],\n    \"openssl_private_decrypt\": [\n        \"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\n        \"Decrypts data with private key\"\n    ],\n    \"openssl_private_encrypt\": [\n        \"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with private key\"\n    ],\n    \"openssl_public_decrypt\": [\n        \"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\n        \"Decrypts data with public key\"\n    ],\n    \"openssl_public_encrypt\": [\n        \"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with public key\"\n    ],\n    \"openssl_random_pseudo_bytes\": [\n        \"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\n        \"Returns a string of the length specified filled with random pseudo bytes\"\n    ],\n    \"openssl_seal\": [\n        \"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\n        \"Seals data\"\n    ],\n    \"openssl_sign\": [\n        \"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\n        \"Signs data\"\n    ],\n    \"openssl_verify\": [\n        \"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\n        \"Verifys data\"\n    ],\n    \"openssl_x509_check_private_key\": [\n        \"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\n        \"Checks if a private key corresponds to a CERT\"\n    ],\n    \"openssl_x509_checkpurpose\": [\n        \"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\n        \"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"\n    ],\n    \"openssl_x509_export\": [\n        \"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_export_to_file\": [\n        \"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_free\": [\n        \"void openssl_x509_free(resource x509)\",\n        \"Frees X.509 certificates\"\n    ],\n    \"openssl_x509_parse\": [\n        \"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\n        \"Returns an array of the fields/values of the CERT\"\n    ],\n    \"openssl_x509_read\": [\n        \"resource openssl_x509_read(mixed cert)\",\n        \"Reads X.509 certificates\"\n    ],\n    \"ord\": [\n        \"int ord(string character)\",\n        \"Returns ASCII value of character\"\n    ],\n    \"output_add_rewrite_var\": [\n        \"bool output_add_rewrite_var(string name, string value)\",\n        \"Add URL rewriter values\"\n    ],\n    \"output_reset_rewrite_vars\": [\n        \"bool output_reset_rewrite_vars(void)\",\n        \"Reset(clear) URL rewriter values\"\n    ],\n    \"pack\": [\n        \"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Takes one or more arguments and packs them into a binary string according to the format argument\"\n    ],\n    \"parse_ini_file\": [\n        \"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration file\"\n    ],\n    \"parse_ini_string\": [\n        \"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration string\"\n    ],\n    \"parse_locale\": [\n        \"static array parse_locale($locale)\",\n        \"* parses a locale-id into an array the different parts of it\"\n    ],\n    \"parse_str\": [\n        \"void parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"parse_url\": [\n        \"mixed parse_url(string url, [int url_component])\",\n        \"Parse a URL and return its components\"\n    ],\n    \"passthru\": [\n        \"void passthru(string command [, int &return_value])\",\n        \"Execute an external program and display raw output\"\n    ],\n    \"pathinfo\": [\n        \"array pathinfo(string path[, int options])\",\n        \"Returns information about a certain string\"\n    ],\n    \"pclose\": [\n        \"int pclose(resource fp)\",\n        \"Close a file pointer opened by popen()\"\n    ],\n    \"pcnlt_sigwaitinfo\": [\n        \"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\n        \"Synchronously wait for queued signals\"\n    ],\n    \"pcntl_alarm\": [\n        \"int pcntl_alarm(int seconds)\",\n        \"Set an alarm clock for delivery of a signal\"\n    ],\n    \"pcntl_exec\": [\n        \"bool pcntl_exec(string path [, array args [, array envs]])\",\n        \"Executes specified program in current process space as defined by exec(2)\"\n    ],\n    \"pcntl_fork\": [\n        \"int pcntl_fork(void)\",\n        \"Forks the currently running process following the same behavior as the UNIX fork() system call\"\n    ],\n    \"pcntl_getpriority\": [\n        \"int pcntl_getpriority([int pid [, int process_identifier]])\",\n        \"Get the priority of any process\"\n    ],\n    \"pcntl_setpriority\": [\n        \"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\n        \"Change the priority of any process\"\n    ],\n    \"pcntl_signal\": [\n        \"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\n        \"Assigns a system signal handler to a PHP function\"\n    ],\n    \"pcntl_signal_dispatch\": [\n        \"bool pcntl_signal_dispatch()\",\n        \"Dispatch signals to signal handlers\"\n    ],\n    \"pcntl_sigprocmask\": [\n        \"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\n        \"Examine and change blocked signals\"\n    ],\n    \"pcntl_sigtimedwait\": [\n        \"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\n        \"Wait for queued signals\"\n    ],\n    \"pcntl_wait\": [\n        \"int pcntl_wait(int &status)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_waitpid\": [\n        \"int pcntl_waitpid(int pid, int &status, int options)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_wexitstatus\": [\n        \"int pcntl_wexitstatus(int status)\",\n        \"Returns the status code of a child's exit\"\n    ],\n    \"pcntl_wifexited\": [\n        \"bool pcntl_wifexited(int status)\",\n        \"Returns true if the child status code represents a successful exit\"\n    ],\n    \"pcntl_wifsignaled\": [\n        \"bool pcntl_wifsignaled(int status)\",\n        \"Returns true if the child status code represents a process that was terminated due to a signal\"\n    ],\n    \"pcntl_wifstopped\": [\n        \"bool pcntl_wifstopped(int status)\",\n        \"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"\n    ],\n    \"pcntl_wstopsig\": [\n        \"int pcntl_wstopsig(int status)\",\n        \"Returns the number of the signal that caused the process to stop who's status code is passed\"\n    ],\n    \"pcntl_wtermsig\": [\n        \"int pcntl_wtermsig(int status)\",\n        \"Returns the number of the signal that terminated the process who's status code is passed\"\n    ],\n    \"pdo_drivers\": [\n        \"array pdo_drivers()\",\n        \"Return array of available PDO drivers\"\n    ],\n    \"pfsockopen\": [\n        \"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open persistent Internet or Unix domain socket connection\"\n    ],\n    \"pg_affected_rows\": [\n        \"int pg_affected_rows(resource result)\",\n        \"Returns the number of affected tuples\"\n    ],\n    \"pg_cancel_query\": [\n        \"bool pg_cancel_query(resource connection)\",\n        \"Cancel request\"\n    ],\n    \"pg_client_encoding\": [\n        \"string pg_client_encoding([resource connection])\",\n        \"Get the current client encoding\"\n    ],\n    \"pg_close\": [\n        \"bool pg_close([resource connection])\",\n        \"Close a PostgreSQL connection\"\n    ],\n    \"pg_connect\": [\n        \"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a PostgreSQL connection\"\n    ],\n    \"pg_connection_busy\": [\n        \"bool pg_connection_busy(resource connection)\",\n        \"Get connection is busy or not\"\n    ],\n    \"pg_connection_reset\": [\n        \"bool pg_connection_reset(resource connection)\",\n        \"Reset connection (reconnect)\"\n    ],\n    \"pg_connection_status\": [\n        \"int pg_connection_status(resource connnection)\",\n        \"Get connection status\"\n    ],\n    \"pg_convert\": [\n        \"array pg_convert(resource db, string table, array values[, int options])\",\n        \"Check and convert values for PostgreSQL SQL statement\"\n    ],\n    \"pg_copy_from\": [\n        \"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\n        \"Copy table from array\"\n    ],\n    \"pg_copy_to\": [\n        \"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\n        \"Copy table to array\"\n    ],\n    \"pg_dbname\": [\n        \"string pg_dbname([resource connection])\",\n        \"Get the database name\"\n    ],\n    \"pg_delete\": [\n        \"mixed pg_delete(resource db, string table, array ids[, int options])\",\n        \"Delete records has ids (id=>value)\"\n    ],\n    \"pg_end_copy\": [\n        \"bool pg_end_copy([resource connection])\",\n        \"Sync with backend. Completes the Copy command\"\n    ],\n    \"pg_escape_bytea\": [\n        \"string pg_escape_bytea([resource connection,] string data)\",\n        \"Escape binary for bytea type\"\n    ],\n    \"pg_escape_string\": [\n        \"string pg_escape_string([resource connection,] string data)\",\n        \"Escape string for text/char type\"\n    ],\n    \"pg_execute\": [\n        \"resource pg_execute([resource connection,] string stmtname, array params)\",\n        \"Execute a prepared query\"\n    ],\n    \"pg_fetch_all\": [\n        \"array pg_fetch_all(resource result)\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_all_columns\": [\n        \"array pg_fetch_all_columns(resource result [, int column_number])\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_array\": [\n        \"array pg_fetch_array(resource result [, int row [, int result_type]])\",\n        \"Fetch a row as an array\"\n    ],\n    \"pg_fetch_assoc\": [\n        \"array pg_fetch_assoc(resource result [, int row])\",\n        \"Fetch a row as an assoc array\"\n    ],\n    \"pg_fetch_object\": [\n        \"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\n        \"Fetch a row as an object\"\n    ],\n    \"pg_fetch_result\": [\n        \"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\n        \"Returns values from a result identifier\"\n    ],\n    \"pg_fetch_row\": [\n        \"array pg_fetch_row(resource result [, int row [, int result_type]])\",\n        \"Get a row as an enumerated array\"\n    ],\n    \"pg_field_is_null\": [\n        \"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\n        \"Test if a field is NULL\"\n    ],\n    \"pg_field_name\": [\n        \"string pg_field_name(resource result, int field_number)\",\n        \"Returns the name of the field\"\n    ],\n    \"pg_field_num\": [\n        \"int pg_field_num(resource result, string field_name)\",\n        \"Returns the field number of the named field\"\n    ],\n    \"pg_field_prtlen\": [\n        \"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\n        \"Returns the printed length\"\n    ],\n    \"pg_field_size\": [\n        \"int pg_field_size(resource result, int field_number)\",\n        \"Returns the internal size of the field\"\n    ],\n    \"pg_field_table\": [\n        \"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\n        \"Returns the name of the table field belongs to, or table's oid if oid_only is true\"\n    ],\n    \"pg_field_type\": [\n        \"string pg_field_type(resource result, int field_number)\",\n        \"Returns the type name for the given field\"\n    ],\n    \"pg_field_type_oid\": [\n        \"string pg_field_type_oid(resource result, int field_number)\",\n        \"Returns the type oid for the given field\"\n    ],\n    \"pg_free_result\": [\n        \"bool pg_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"pg_get_notify\": [\n        \"array pg_get_notify([resource connection[, result_type]])\",\n        \"Get asynchronous notification\"\n    ],\n    \"pg_get_pid\": [\n        \"int pg_get_pid([resource connection)\",\n        \"Get backend(server) pid\"\n    ],\n    \"pg_get_result\": [\n        \"resource pg_get_result(resource connection)\",\n        \"Get asynchronous query result\"\n    ],\n    \"pg_host\": [\n        \"string pg_host([resource connection])\",\n        \"Returns the host name associated with the connection\"\n    ],\n    \"pg_insert\": [\n        \"mixed pg_insert(resource db, string table, array values[, int options])\",\n        \"Insert values (filed=>value) to table\"\n    ],\n    \"pg_last_error\": [\n        \"string pg_last_error([resource connection])\",\n        \"Get the error message string\"\n    ],\n    \"pg_last_notice\": [\n        \"string pg_last_notice(resource connection)\",\n        \"Returns the last notice set by the backend\"\n    ],\n    \"pg_last_oid\": [\n        \"string pg_last_oid(resource result)\",\n        \"Returns the last object identifier\"\n    ],\n    \"pg_lo_close\": [\n        \"bool pg_lo_close(resource large_object)\",\n        \"Close a large object\"\n    ],\n    \"pg_lo_create\": [\n        \"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\n        \"Create a large object\"\n    ],\n    \"pg_lo_export\": [\n        \"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\n        \"Export large object direct to filesystem\"\n    ],\n    \"pg_lo_import\": [\n        \"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\n        \"Import large object direct from filesystem\"\n    ],\n    \"pg_lo_open\": [\n        \"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\n        \"Open a large object and return fd\"\n    ],\n    \"pg_lo_read\": [\n        \"string pg_lo_read(resource large_object [, int len])\",\n        \"Read a large object\"\n    ],\n    \"pg_lo_read_all\": [\n        \"int pg_lo_read_all(resource large_object)\",\n        \"Read a large object and send straight to browser\"\n    ],\n    \"pg_lo_seek\": [\n        \"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\n        \"Seeks position of large object\"\n    ],\n    \"pg_lo_tell\": [\n        \"int pg_lo_tell(resource large_object)\",\n        \"Returns current position of large object\"\n    ],\n    \"pg_lo_unlink\": [\n        \"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\n        \"Delete a large object\"\n    ],\n    \"pg_lo_write\": [\n        \"int pg_lo_write(resource large_object, string buf [, int len])\",\n        \"Write a large object\"\n    ],\n    \"pg_meta_data\": [\n        \"array pg_meta_data(resource db, string table)\",\n        \"Get meta_data\"\n    ],\n    \"pg_num_fields\": [\n        \"int pg_num_fields(resource result)\",\n        \"Return the number of fields in the result\"\n    ],\n    \"pg_num_rows\": [\n        \"int pg_num_rows(resource result)\",\n        \"Return the number of rows in the result\"\n    ],\n    \"pg_options\": [\n        \"string pg_options([resource connection])\",\n        \"Get the options associated with the connection\"\n    ],\n    \"pg_parameter_status\": [\n        \"string|false pg_parameter_status([resource connection,] string param_name)\",\n        \"Returns the value of a server parameter\"\n    ],\n    \"pg_pconnect\": [\n        \"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a persistent PostgreSQL connection\"\n    ],\n    \"pg_ping\": [\n        \"bool pg_ping([resource connection])\",\n        \"Ping database. If connection is bad, try to reconnect.\"\n    ],\n    \"pg_port\": [\n        \"int pg_port([resource connection])\",\n        \"Return the port number associated with the connection\"\n    ],\n    \"pg_prepare\": [\n        \"resource pg_prepare([resource connection,] string stmtname, string query)\",\n        \"Prepare a query for future execution\"\n    ],\n    \"pg_put_line\": [\n        \"bool pg_put_line([resource connection,] string query)\",\n        \"Send null-terminated string to backend server\"\n    ],\n    \"pg_query\": [\n        \"resource pg_query([resource connection,] string query)\",\n        \"Execute a query\"\n    ],\n    \"pg_query_params\": [\n        \"resource pg_query_params([resource connection,] string query, array params)\",\n        \"Execute a query\"\n    ],\n    \"pg_result_error\": [\n        \"string pg_result_error(resource result)\",\n        \"Get error message associated with result\"\n    ],\n    \"pg_result_error_field\": [\n        \"string pg_result_error_field(resource result, int fieldcode)\",\n        \"Get error message field associated with result\"\n    ],\n    \"pg_result_seek\": [\n        \"bool pg_result_seek(resource result, int offset)\",\n        \"Set internal row offset\"\n    ],\n    \"pg_result_status\": [\n        \"mixed pg_result_status(resource result[, long result_type])\",\n        \"Get status of query result\"\n    ],\n    \"pg_select\": [\n        \"mixed pg_select(resource db, string table, array ids[, int options])\",\n        \"Select records that has ids (id=>value)\"\n    ],\n    \"pg_send_execute\": [\n        \"bool pg_send_execute(resource connection, string stmtname, array params)\",\n        \"Executes prevriously prepared stmtname asynchronously\"\n    ],\n    \"pg_send_prepare\": [\n        \"bool pg_send_prepare(resource connection, string stmtname, string query)\",\n        \"Asynchronously prepare a query for future execution\"\n    ],\n    \"pg_send_query\": [\n        \"bool pg_send_query(resource connection, string query)\",\n        \"Send asynchronous query\"\n    ],\n    \"pg_send_query_params\": [\n        \"bool pg_send_query_params(resource connection, string query, array params)\",\n        \"Send asynchronous parameterized query\"\n    ],\n    \"pg_set_client_encoding\": [\n        \"int pg_set_client_encoding([resource connection,] string encoding)\",\n        \"Set client encoding\"\n    ],\n    \"pg_set_error_verbosity\": [\n        \"int pg_set_error_verbosity([resource connection,] int verbosity)\",\n        \"Set error verbosity\"\n    ],\n    \"pg_trace\": [\n        \"bool pg_trace(string filename [, string mode [, resource connection]])\",\n        \"Enable tracing a PostgreSQL connection\"\n    ],\n    \"pg_transaction_status\": [\n        \"int pg_transaction_status(resource connnection)\",\n        \"Get transaction status\"\n    ],\n    \"pg_tty\": [\n        \"string pg_tty([resource connection])\",\n        \"Return the tty name associated with the connection\"\n    ],\n    \"pg_unescape_bytea\": [\n        \"string pg_unescape_bytea(string data)\",\n        \"Unescape binary for bytea type\"\n    ],\n    \"pg_untrace\": [\n        \"bool pg_untrace([resource connection])\",\n        \"Disable tracing of a PostgreSQL connection\"\n    ],\n    \"pg_update\": [\n        \"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\n        \"Update table using values (field=>value) and ids (id=>value)\"\n    ],\n    \"pg_version\": [\n        \"array pg_version([resource connection])\",\n        \"Returns an array with client, protocol and server version (when available)\"\n    ],\n    \"php_egg_logo_guid\": [\n        \"string php_egg_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_ini_loaded_file\": [\n        \"string php_ini_loaded_file(void)\",\n        \"Return the actual loaded ini filename\"\n    ],\n    \"php_ini_scanned_files\": [\n        \"string php_ini_scanned_files(void)\",\n        \"Return comma-separated string of .ini files parsed from the additional ini dir\"\n    ],\n    \"php_logo_guid\": [\n        \"string php_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_real_logo_guid\": [\n        \"string php_real_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_sapi_name\": [\n        \"string php_sapi_name(void)\",\n        \"Return the current SAPI module name\"\n    ],\n    \"php_snmpv3\": [\n        \"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\n        \"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"\n    ],\n    \"php_strip_whitespace\": [\n        \"string php_strip_whitespace(string file_name)\",\n        \"Return source with stripped comments and whitespace\"\n    ],\n    \"php_uname\": [\n        \"string php_uname(void)\",\n        \"Return information about the system PHP was built on\"\n    ],\n    \"phpcredits\": [\n        \"void phpcredits([int flag])\",\n        \"Prints the list of people who've contributed to the PHP project\"\n    ],\n    \"phpinfo\": [\n        \"void phpinfo([int what])\",\n        \"Output a page of useful information about PHP and the current request\"\n    ],\n    \"phpversion\": [\n        \"string phpversion([string extension])\",\n        \"Return the current PHP version\"\n    ],\n    \"pi\": [\n        \"float pi(void)\",\n        \"Returns an approximation of pi\"\n    ],\n    \"png2wbmp\": [\n        \"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert PNG image to WBMP image\"\n    ],\n    \"popen\": [\n        \"resource popen(string command, string mode)\",\n        \"Execute a command and open either a read or a write pipe to it\"\n    ],\n    \"posix_access\": [\n        \"bool posix_access(string file [, int mode])\",\n        \"Determine accessibility of a file (POSIX.1 5.6.3)\"\n    ],\n    \"posix_ctermid\": [\n        \"string posix_ctermid(void)\",\n        \"Generate terminal path name (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_get_last_error\": [\n        \"int posix_get_last_error(void)\",\n        \"Retrieve the error number set by the last posix function which failed.\"\n    ],\n    \"posix_getcwd\": [\n        \"string posix_getcwd(void)\",\n        \"Get working directory pathname (POSIX.1, 5.2.2)\"\n    ],\n    \"posix_getegid\": [\n        \"int posix_getegid(void)\",\n        \"Get the current effective group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_geteuid\": [\n        \"int posix_geteuid(void)\",\n        \"Get the current effective user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgid\": [\n        \"int posix_getgid(void)\",\n        \"Get the current group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgrgid\": [\n        \"array posix_getgrgid(long gid)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgrnam\": [\n        \"array posix_getgrnam(string groupname)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgroups\": [\n        \"array posix_getgroups(void)\",\n        \"Get supplementary group id's (POSIX.1, 4.2.3)\"\n    ],\n    \"posix_getlogin\": [\n        \"string posix_getlogin(void)\",\n        \"Get user name (POSIX.1, 4.2.4)\"\n    ],\n    \"posix_getpgid\": [\n        \"int posix_getpgid(void)\",\n        \"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"\n    ],\n    \"posix_getpgrp\": [\n        \"int posix_getpgrp(void)\",\n        \"Get current process group id (POSIX.1, 4.3.1)\"\n    ],\n    \"posix_getpid\": [\n        \"int posix_getpid(void)\",\n        \"Get the current process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getppid\": [\n        \"int posix_getppid(void)\",\n        \"Get the parent process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getpwnam\": [\n        \"array posix_getpwnam(string groupname)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getpwuid\": [\n        \"array posix_getpwuid(long uid)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getrlimit\": [\n        \"array posix_getrlimit(void)\",\n        \"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"\n    ],\n    \"posix_getsid\": [\n        \"int posix_getsid(void)\",\n        \"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"\n    ],\n    \"posix_getuid\": [\n        \"int posix_getuid(void)\",\n        \"Get the current user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_initgroups\": [\n        \"bool posix_initgroups(string name, int base_group_id)\",\n        \"Calculate the group access list for the user specified in name.\"\n    ],\n    \"posix_isatty\": [\n        \"bool posix_isatty(int fd)\",\n        \"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_kill\": [\n        \"bool posix_kill(int pid, int sig)\",\n        \"Send a signal to a process (POSIX.1, 3.3.2)\"\n    ],\n    \"posix_mkfifo\": [\n        \"bool posix_mkfifo(string pathname, int mode)\",\n        \"Make a FIFO special file (POSIX.1, 5.4.2)\"\n    ],\n    \"posix_mknod\": [\n        \"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\n        \"Make a special or ordinary file (POSIX.1)\"\n    ],\n    \"posix_setegid\": [\n        \"bool posix_setegid(long uid)\",\n        \"Set effective group id\"\n    ],\n    \"posix_seteuid\": [\n        \"bool posix_seteuid(long uid)\",\n        \"Set effective user id\"\n    ],\n    \"posix_setgid\": [\n        \"bool posix_setgid(int uid)\",\n        \"Set group id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_setpgid\": [\n        \"bool posix_setpgid(int pid, int pgid)\",\n        \"Set process group id for job control (POSIX.1, 4.3.3)\"\n    ],\n    \"posix_setsid\": [\n        \"int posix_setsid(void)\",\n        \"Create session and set process group id (POSIX.1, 4.3.2)\"\n    ],\n    \"posix_setuid\": [\n        \"bool posix_setuid(long uid)\",\n        \"Set user id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_strerror\": [\n        \"string posix_strerror(int errno)\",\n        \"Retrieve the system error message associated with the given errno.\"\n    ],\n    \"posix_times\": [\n        \"array posix_times(void)\",\n        \"Get process times (POSIX.1, 4.5.2)\"\n    ],\n    \"posix_ttyname\": [\n        \"string posix_ttyname(int fd)\",\n        \"Determine terminal device name (POSIX.1, 4.7.2)\"\n    ],\n    \"posix_uname\": [\n        \"array posix_uname(void)\",\n        \"Get system name (POSIX.1, 4.4.1)\"\n    ],\n    \"pow\": [\n        \"number pow(number base, number exponent)\",\n        \"Returns base raised to the power of exponent. Returns integer result when possible\"\n    ],\n    \"preg_filter\": [\n        \"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement and only return matches.\"\n    ],\n    \"preg_grep\": [\n        \"array preg_grep(string regex, array input [, int flags])\",\n        \"Searches array and returns entries which match regex\"\n    ],\n    \"preg_last_error\": [\n        \"int preg_last_error()\",\n        \"Returns the error code of the last regexp execution.\"\n    ],\n    \"preg_match\": [\n        \"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\n        \"Perform a Perl-style regular expression match\"\n    ],\n    \"preg_match_all\": [\n        \"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\n        \"Perform a Perl-style global regular expression match\"\n    ],\n    \"preg_quote\": [\n        \"string preg_quote(string str [, string delim_char])\",\n        \"Quote regular expression characters plus an optional character\"\n    ],\n    \"preg_replace\": [\n        \"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement.\"\n    ],\n    \"preg_replace_callback\": [\n        \"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement using replacement callback.\"\n    ],\n    \"preg_split\": [\n        \"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\n        \"Split string into an array using a perl-style regular expression as a delimiter\"\n    ],\n    \"prev\": [\n        \"mixed prev(array array_arg)\",\n        \"Move array argument's internal pointer to the previous element and return it\"\n    ],\n    \"print\": [\n        \"int print(string arg)\",\n        \"Output a string\"\n    ],\n    \"print_r\": [\n        \"mixed print_r(mixed var [, bool return])\",\n        \"Prints out or returns information about the specified variable\"\n    ],\n    \"printf\": [\n        \"int printf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string\"\n    ],\n    \"proc_close\": [\n        \"int proc_close(resource process)\",\n        \"close a process opened by proc_open\"\n    ],\n    \"proc_get_status\": [\n        \"array proc_get_status(resource process)\",\n        \"get information about a process opened by proc_open\"\n    ],\n    \"proc_nice\": [\n        \"bool proc_nice(int priority)\",\n        \"Change the priority of the current process\"\n    ],\n    \"proc_open\": [\n        \"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\n        \"Run a process with more control over it's file descriptors\"\n    ],\n    \"proc_terminate\": [\n        \"bool proc_terminate(resource process [, long signal])\",\n        \"kill a process opened by proc_open\"\n    ],\n    \"property_exists\": [\n        \"bool property_exists(mixed object_or_class, string property_name)\",\n        \"Checks if the object or class has a property\"\n    ],\n    \"pspell_add_to_personal\": [\n        \"bool pspell_add_to_personal(int pspell, string word)\",\n        \"Adds a word to a personal list\"\n    ],\n    \"pspell_add_to_session\": [\n        \"bool pspell_add_to_session(int pspell, string word)\",\n        \"Adds a word to the current session\"\n    ],\n    \"pspell_check\": [\n        \"bool pspell_check(int pspell, string word)\",\n        \"Returns true if word is valid\"\n    ],\n    \"pspell_clear_session\": [\n        \"bool pspell_clear_session(int pspell)\",\n        \"Clears the current session\"\n    ],\n    \"pspell_config_create\": [\n        \"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\n        \"Create a new config to be used later to create a manager\"\n    ],\n    \"pspell_config_data_dir\": [\n        \"bool pspell_config_data_dir(int conf, string directory)\",\n        \"location of language data files\"\n    ],\n    \"pspell_config_dict_dir\": [\n        \"bool pspell_config_dict_dir(int conf, string directory)\",\n        \"location of the main word list\"\n    ],\n    \"pspell_config_ignore\": [\n        \"bool pspell_config_ignore(int conf, int ignore)\",\n        \"Ignore words <= n chars\"\n    ],\n    \"pspell_config_mode\": [\n        \"bool pspell_config_mode(int conf, long mode)\",\n        \"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"\n    ],\n    \"pspell_config_personal\": [\n        \"bool pspell_config_personal(int conf, string personal)\",\n        \"Use a personal dictionary for this config\"\n    ],\n    \"pspell_config_repl\": [\n        \"bool pspell_config_repl(int conf, string repl)\",\n        \"Use a personal dictionary with replacement pairs for this config\"\n    ],\n    \"pspell_config_runtogether\": [\n        \"bool pspell_config_runtogether(int conf, bool runtogether)\",\n        \"Consider run-together words as valid components\"\n    ],\n    \"pspell_config_save_repl\": [\n        \"bool pspell_config_save_repl(int conf, bool save)\",\n        \"Save replacement pairs when personal list is saved for this config\"\n    ],\n    \"pspell_new\": [\n        \"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary\"\n    ],\n    \"pspell_new_config\": [\n        \"int pspell_new_config(int config)\",\n        \"Load a dictionary based on the given config\"\n    ],\n    \"pspell_new_personal\": [\n        \"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary with a personal wordlist\"\n    ],\n    \"pspell_save_wordlist\": [\n        \"bool pspell_save_wordlist(int pspell)\",\n        \"Saves the current (personal) wordlist\"\n    ],\n    \"pspell_store_replacement\": [\n        \"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\n        \"Notify the dictionary of a user-selected replacement\"\n    ],\n    \"pspell_suggest\": [\n        \"array pspell_suggest(int pspell, string word)\",\n        \"Returns array of suggestions\"\n    ],\n    \"putenv\": [\n        \"bool putenv(string setting)\",\n        \"Set the value of an environment variable\"\n    ],\n    \"quoted_printable_decode\": [\n        \"string quoted_printable_decode(string str)\",\n        \"Convert a quoted-printable string to an 8 bit string\"\n    ],\n    \"quoted_printable_encode\": [\n        \"string quoted_printable_encode(string str) */\",\n        \"PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}\"\n    ],\n    \"quotemeta\": [\n        \"string quotemeta(string str)\",\n        \"Quotes meta characters\"\n    ],\n    \"rad2deg\": [\n        \"float rad2deg(float number)\",\n        \"Converts the radian number to the equivalent number in degrees\"\n    ],\n    \"rand\": [\n        \"int rand([int min, int max])\",\n        \"Returns a random number\"\n    ],\n    \"range\": [\n        \"array range(mixed low, mixed high[, int step])\",\n        \"Create an array containing the range of integers or characters from low to high (inclusive)\"\n    ],\n    \"rawurldecode\": [\n        \"string rawurldecode(string str)\",\n        \"Decodes URL-encodes string\"\n    ],\n    \"rawurlencode\": [\n        \"string rawurlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"readdir\": [\n        \"string readdir([resource dir_handle])\",\n        \"Read directory entry from dir_handle\"\n    ],\n    \"readfile\": [\n        \"int readfile(string filename [, bool use_include_path[, resource context]])\",\n        \"Output a file or a URL\"\n    ],\n    \"readgzfile\": [\n        \"int readgzfile(string filename [, int use_include_path])\",\n        \"Output a .gz-file\"\n    ],\n    \"readline\": [\n        \"string readline([string prompt])\",\n        \"Reads a line\"\n    ],\n    \"readline_add_history\": [\n        \"bool readline_add_history(string prompt)\",\n        \"Adds a line to the history\"\n    ],\n    \"readline_callback_handler_install\": [\n        \"void readline_callback_handler_install(string prompt, mixed callback)\",\n        \"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"\n    ],\n    \"readline_callback_handler_remove\": [\n        \"bool readline_callback_handler_remove()\",\n        \"Removes a previously installed callback handler and restores terminal settings\"\n    ],\n    \"readline_callback_read_char\": [\n        \"void readline_callback_read_char()\",\n        \"Informs the readline callback interface that a character is ready for input\"\n    ],\n    \"readline_clear_history\": [\n        \"bool readline_clear_history(void)\",\n        \"Clears the history\"\n    ],\n    \"readline_completion_function\": [\n        \"bool readline_completion_function(string funcname)\",\n        \"Readline completion function?\"\n    ],\n    \"readline_info\": [\n        \"mixed readline_info([string varname [, string newvalue]])\",\n        \"Gets/sets various internal readline variables.\"\n    ],\n    \"readline_list_history\": [\n        \"array readline_list_history(void)\",\n        \"Lists the history\"\n    ],\n    \"readline_on_new_line\": [\n        \"void readline_on_new_line(void)\",\n        \"Inform readline that the cursor has moved to a new line\"\n    ],\n    \"readline_read_history\": [\n        \"bool readline_read_history([string filename])\",\n        \"Reads the history\"\n    ],\n    \"readline_redisplay\": [\n        \"void readline_redisplay(void)\",\n        \"Ask readline to redraw the display\"\n    ],\n    \"readline_write_history\": [\n        \"bool readline_write_history([string filename])\",\n        \"Writes the history\"\n    ],\n    \"readlink\": [\n        \"string readlink(string filename)\",\n        \"Return the target of a symbolic link\"\n    ],\n    \"realpath\": [\n        \"string realpath(string path)\",\n        \"Return the resolved path\"\n    ],\n    \"realpath_cache_get\": [\n        \"bool realpath_cache_get()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"realpath_cache_size\": [\n        \"bool realpath_cache_size()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"recode_file\": [\n        \"bool recode_file(string request, resource input, resource output)\",\n        \"Recode file input into file output according to request\"\n    ],\n    \"recode_string\": [\n        \"string recode_string(string request, string str)\",\n        \"Recode string str according to request string\"\n    ],\n    \"register_shutdown_function\": [\n        \"void register_shutdown_function(string function_name)\",\n        \"Register a user-level function to be called on request termination\"\n    ],\n    \"register_tick_function\": [\n        \"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\n        \"Registers a tick callback function\"\n    ],\n    \"rename\": [\n        \"bool rename(string old_name, string new_name[, resource context])\",\n        \"Rename a file\"\n    ],\n    \"require\": [\n        \"bool require(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"require_once\": [\n        \"bool require_once(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"reset\": [\n        \"mixed reset(array array_arg)\",\n        \"Set array argument's internal pointer to the first element and return it\"\n    ],\n    \"restore_error_handler\": [\n        \"void restore_error_handler(void)\",\n        \"Restores the previously defined error handler function\"\n    ],\n    \"restore_exception_handler\": [\n        \"void restore_exception_handler(void)\",\n        \"Restores the previously defined exception handler function\"\n    ],\n    \"restore_include_path\": [\n        \"void restore_include_path()\",\n        \"Restore the value of the include_path configuration option\"\n    ],\n    \"rewind\": [\n        \"bool rewind(resource fp)\",\n        \"Rewind the position of a file pointer\"\n    ],\n    \"rewinddir\": [\n        \"void rewinddir([resource dir_handle])\",\n        \"Rewind dir_handle back to the start\"\n    ],\n    \"rmdir\": [\n        \"bool rmdir(string dirname[, resource context])\",\n        \"Remove a directory\"\n    ],\n    \"round\": [\n        \"float round(float number [, int precision [, int mode]])\",\n        \"Returns the number rounded to specified precision\"\n    ],\n    \"rsort\": [\n        \"bool rsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order\"\n    ],\n    \"rtrim\": [\n        \"string rtrim(string str [, string character_mask])\",\n        \"Removes trailing whitespace\"\n    ],\n    \"scandir\": [\n        \"array scandir(string dir [, int sorting_order [, resource context]])\",\n        \"List files & directories inside the specified path\"\n    ],\n    \"sem_acquire\": [\n        \"bool sem_acquire(resource id)\",\n        \"Acquires the semaphore with the given id, blocking if necessary\"\n    ],\n    \"sem_get\": [\n        \"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\n        \"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"\n    ],\n    \"sem_release\": [\n        \"bool sem_release(resource id)\",\n        \"Releases the semaphore with the given id\"\n    ],\n    \"sem_remove\": [\n        \"bool sem_remove(resource id)\",\n        \"Removes semaphore from Unix systems\"\n    ],\n    \"serialize\": [\n        \"string serialize(mixed variable)\",\n        \"Returns a string representation of variable (which can later be unserialized)\"\n    ],\n    \"session_cache_expire\": [\n        \"int session_cache_expire([int new_cache_expire])\",\n        \"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"\n    ],\n    \"session_cache_limiter\": [\n        \"string session_cache_limiter([string new_cache_limiter])\",\n        \"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"\n    ],\n    \"session_decode\": [\n        \"bool session_decode(string data)\",\n        \"Deserializes data and reinitializes the variables\"\n    ],\n    \"session_destroy\": [\n        \"bool session_destroy(void)\",\n        \"Destroy the current session and all data associated with it\"\n    ],\n    \"session_encode\": [\n        \"string session_encode(void)\",\n        \"Serializes the current setup and returns the serialized representation\"\n    ],\n    \"session_get_cookie_params\": [\n        \"array session_get_cookie_params(void)\",\n        \"Return the session cookie parameters\"\n    ],\n    \"session_id\": [\n        \"string session_id([string newid])\",\n        \"Return the current session id. If newid is given, the session id is replaced with newid\"\n    ],\n    \"session_is_registered\": [\n        \"bool session_is_registered(string varname)\",\n        \"Checks if a variable is registered in session\"\n    ],\n    \"session_module_name\": [\n        \"string session_module_name([string newname])\",\n        \"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"\n    ],\n    \"session_name\": [\n        \"string session_name([string newname])\",\n        \"Return the current session name. If newname is given, the session name is replaced with newname\"\n    ],\n    \"session_regenerate_id\": [\n        \"bool session_regenerate_id([bool delete_old_session])\",\n        \"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"\n    ],\n    \"session_register\": [\n        \"bool session_register(mixed var_names [, mixed ...])\",\n        \"Adds varname(s) to the list of variables which are freezed at the session end\"\n    ],\n    \"session_save_path\": [\n        \"string session_save_path([string newname])\",\n        \"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"\n    ],\n    \"session_set_cookie_params\": [\n        \"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\n        \"Set session cookie parameters\"\n    ],\n    \"session_set_save_handler\": [\n        \"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\n        \"Sets user-level functions\"\n    ],\n    \"session_start\": [\n        \"bool session_start(void)\",\n        \"Begin session - reinitializes freezed variables, registers browsers etc\"\n    ],\n    \"session_unregister\": [\n        \"bool session_unregister(string varname)\",\n        \"Removes varname from the list of variables which are freezed at the session end\"\n    ],\n    \"session_unset\": [\n        \"void session_unset(void)\",\n        \"Unset all registered variables\"\n    ],\n    \"session_write_close\": [\n        \"void session_write_close(void)\",\n        \"Write session data and end session\"\n    ],\n    \"set_error_handler\": [\n        \"string set_error_handler(string error_handler [, int error_types])\",\n        \"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"\n    ],\n    \"set_exception_handler\": [\n        \"string set_exception_handler(callable exception_handler)\",\n        \"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"\n    ],\n    \"set_include_path\": [\n        \"string set_include_path(string new_include_path)\",\n        \"Sets the include_path configuration option\"\n    ],\n    \"set_magic_quotes_runtime\": [\n        \"bool set_magic_quotes_runtime(int new_setting)\",\n        \"Set the current active configuration setting of magic_quotes_runtime and return previous\"\n    ],\n    \"set_time_limit\": [\n        \"bool set_time_limit(int seconds)\",\n        \"Sets the maximum time a script can run\"\n    ],\n    \"setcookie\": [\n        \"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie\"\n    ],\n    \"setlocale\": [\n        \"string setlocale(mixed category, string locale [, string ...])\",\n        \"Set locale information\"\n    ],\n    \"setrawcookie\": [\n        \"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie with no url encoding of the value\"\n    ],\n    \"settype\": [\n        \"bool settype(mixed var, string type)\",\n        \"Set the type of the variable\"\n    ],\n    \"sha1\": [\n        \"string sha1(string str [, bool raw_output])\",\n        \"Calculate the sha1 hash of a string\"\n    ],\n    \"sha1_file\": [\n        \"string sha1_file(string filename [, bool raw_output])\",\n        \"Calculate the sha1 hash of given filename\"\n    ],\n    \"shell_exec\": [\n        \"string shell_exec(string cmd)\",\n        \"Execute command via shell and return complete output as string\"\n    ],\n    \"shm_attach\": [\n        \"int shm_attach(int key [, int memsize [, int perm]])\",\n        \"Creates or open a shared memory segment\"\n    ],\n    \"shm_detach\": [\n        \"bool shm_detach(resource shm_identifier)\",\n        \"Disconnects from shared memory segment\"\n    ],\n    \"shm_get_var\": [\n        \"mixed shm_get_var(resource id, int variable_key)\",\n        \"Returns a variable from shared memory\"\n    ],\n    \"shm_has_var\": [\n        \"bool shm_has_var(resource id, int variable_key)\",\n        \"Checks whether a specific entry exists\"\n    ],\n    \"shm_put_var\": [\n        \"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\n        \"Inserts or updates a variable in shared memory\"\n    ],\n    \"shm_remove\": [\n        \"bool shm_remove(resource shm_identifier)\",\n        \"Removes shared memory from Unix systems\"\n    ],\n    \"shm_remove_var\": [\n        \"bool shm_remove_var(resource id, int variable_key)\",\n        \"Removes variable from shared memory\"\n    ],\n    \"shmop_close\": [\n        \"void shmop_close (int shmid)\",\n        \"closes a shared memory segment\"\n    ],\n    \"shmop_delete\": [\n        \"bool shmop_delete (int shmid)\",\n        \"mark segment for deletion\"\n    ],\n    \"shmop_open\": [\n        \"int shmop_open (int key, string flags, int mode, int size)\",\n        \"gets and attaches a shared memory segment\"\n    ],\n    \"shmop_read\": [\n        \"string shmop_read (int shmid, int start, int count)\",\n        \"reads from a shm segment\"\n    ],\n    \"shmop_size\": [\n        \"int shmop_size (int shmid)\",\n        \"returns the shm size\"\n    ],\n    \"shmop_write\": [\n        \"int shmop_write (int shmid, string data, int offset)\",\n        \"writes to a shared memory segment\"\n    ],\n    \"shuffle\": [\n        \"bool shuffle(array array_arg)\",\n        \"Randomly shuffle the contents of an array\"\n    ],\n    \"similar_text\": [\n        \"int similar_text(string str1, string str2 [, float percent])\",\n        \"Calculates the similarity between two strings\"\n    ],\n    \"simplexml_import_dom\": [\n        \"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"simplexml_load_file\": [\n        \"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a filename and return a simplexml_element object to allow for processing\"\n    ],\n    \"simplexml_load_string\": [\n        \"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a string and return a simplexml_element object to allow for processing\"\n    ],\n    \"sin\": [\n        \"float sin(float number)\",\n        \"Returns the sine of the number in radians\"\n    ],\n    \"sinh\": [\n        \"float sinh(float number)\",\n        \"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"\n    ],\n    \"sleep\": [\n        \"void sleep(int seconds)\",\n        \"Delay for a given number of seconds\"\n    ],\n    \"smfi_addheader\": [\n        \"bool smfi_addheader(string headerf, string headerv)\",\n        \"Adds a header to the current message.\"\n    ],\n    \"smfi_addrcpt\": [\n        \"bool smfi_addrcpt(string rcpt)\",\n        \"Add a recipient to the message envelope.\"\n    ],\n    \"smfi_chgheader\": [\n        \"bool smfi_chgheader(string headerf, string headerv)\",\n        \"Changes a header's value for the current message.\"\n    ],\n    \"smfi_delrcpt\": [\n        \"bool smfi_delrcpt(string rcpt)\",\n        \"Removes the named recipient from the current message's envelope.\"\n    ],\n    \"smfi_getsymval\": [\n        \"string smfi_getsymval(string macro)\",\n        \"Returns the value of the given macro or NULL if the macro is not defined.\"\n    ],\n    \"smfi_replacebody\": [\n        \"bool smfi_replacebody(string body)\",\n        \"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"\n    ],\n    \"smfi_setflags\": [\n        \"void smfi_setflags(long flags)\",\n        \"Sets the flags describing the actions the filter may take.\"\n    ],\n    \"smfi_setreply\": [\n        \"bool smfi_setreply(string rcode, string xcode, string message)\",\n        \"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"\n    ],\n    \"smfi_settimeout\": [\n        \"void smfi_settimeout(long timeout)\",\n        \"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"\n    ],\n    \"snmp2_get\": [\n        \"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_getnext\": [\n        \"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_real_walk\": [\n        \"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp2_set\": [\n        \"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmp2_walk\": [\n        \"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"snmp3_get\": [\n        \"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_getnext\": [\n        \"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_real_walk\": [\n        \"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_set\": [\n        \"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_walk\": [\n        \"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp_get_quick_print\": [\n        \"bool snmp_get_quick_print(void)\",\n        \"Return the current status of quick_print\"\n    ],\n    \"snmp_get_valueretrieval\": [\n        \"int snmp_get_valueretrieval()\",\n        \"Return the method how the SNMP values will be returned\"\n    ],\n    \"snmp_read_mib\": [\n        \"int snmp_read_mib(string filename)\",\n        \"Reads and parses a MIB file into the active MIB tree.\"\n    ],\n    \"snmp_set_enum_print\": [\n        \"void snmp_set_enum_print(int enum_print)\",\n        \"Return all values that are enums with their enum value instead of the raw integer\"\n    ],\n    \"snmp_set_oid_output_format\": [\n        \"void snmp_set_oid_output_format(int oid_format)\",\n        \"Set the OID output format.\"\n    ],\n    \"snmp_set_quick_print\": [\n        \"void snmp_set_quick_print(int quick_print)\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp_set_valueretrieval\": [\n        \"void snmp_set_valueretrieval(int method)\",\n        \"Specify the method how the SNMP values will be returned\"\n    ],\n    \"snmpget\": [\n        \"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmpgetnext\": [\n        \"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmprealwalk\": [\n        \"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmpset\": [\n        \"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmpwalk\": [\n        \"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"socket_accept\": [\n        \"resource socket_accept(resource socket)\",\n        \"Accepts a connection on the listening socket fd\"\n    ],\n    \"socket_bind\": [\n        \"bool socket_bind(resource socket, string addr [, int port])\",\n        \"Binds an open socket to a listening port, port is only specified in AF_INET family.\"\n    ],\n    \"socket_clear_error\": [\n        \"void socket_clear_error([resource socket])\",\n        \"Clears the error on the socket or the last error code.\"\n    ],\n    \"socket_close\": [\n        \"void socket_close(resource socket)\",\n        \"Closes a file descriptor\"\n    ],\n    \"socket_connect\": [\n        \"bool socket_connect(resource socket, string addr [, int port])\",\n        \"Opens a connection to addr:port on the socket specified by socket\"\n    ],\n    \"socket_create\": [\n        \"resource socket_create(int domain, int type, int protocol)\",\n        \"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"\n    ],\n    \"socket_create_listen\": [\n        \"resource socket_create_listen(int port[, int backlog])\",\n        \"Opens a socket on port to accept connections\"\n    ],\n    \"socket_create_pair\": [\n        \"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\n        \"Creates a pair of indistinguishable sockets and stores them in fds.\"\n    ],\n    \"socket_get_option\": [\n        \"mixed socket_get_option(resource socket, int level, int optname)\",\n        \"Gets socket options for the socket\"\n    ],\n    \"socket_getpeername\": [\n        \"bool socket_getpeername(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_getsockname\": [\n        \"bool socket_getsockname(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_last_error\": [\n        \"int socket_last_error([resource socket])\",\n        \"Returns the last socket error (either the last used or the provided socket resource)\"\n    ],\n    \"socket_listen\": [\n        \"bool socket_listen(resource socket[, int backlog])\",\n        \"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"\n    ],\n    \"socket_read\": [\n        \"string socket_read(resource socket, int length [, int type])\",\n        \"Reads a maximum of length bytes from socket\"\n    ],\n    \"socket_recv\": [\n        \"int socket_recv(resource socket, string &buf, int len, int flags)\",\n        \"Receives data from a connected socket\"\n    ],\n    \"socket_recvfrom\": [\n        \"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\n        \"Receives data from a socket, connected or not\"\n    ],\n    \"socket_select\": [\n        \"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"socket_send\": [\n        \"int socket_send(resource socket, string buf, int len, int flags)\",\n        \"Sends data to a connected socket\"\n    ],\n    \"socket_sendto\": [\n        \"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\n        \"Sends a message to a socket, whether it is connected or not\"\n    ],\n    \"socket_set_block\": [\n        \"bool socket_set_block(resource socket)\",\n        \"Sets blocking mode on a socket resource\"\n    ],\n    \"socket_set_nonblock\": [\n        \"bool socket_set_nonblock(resource socket)\",\n        \"Sets nonblocking mode on a socket resource\"\n    ],\n    \"socket_set_option\": [\n        \"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\n        \"Sets socket options for the socket\"\n    ],\n    \"socket_shutdown\": [\n        \"bool socket_shutdown(resource socket[, int how])\",\n        \"Shuts down a socket for receiving, sending, or both.\"\n    ],\n    \"socket_strerror\": [\n        \"string socket_strerror(int errno)\",\n        \"Returns a string describing an error\"\n    ],\n    \"socket_write\": [\n        \"int socket_write(resource socket, string buf[, int length])\",\n        \"Writes the buffer to the socket resource, length is optional\"\n    ],\n    \"solid_fetch_prev\": [\n        \"bool solid_fetch_prev(resource result_id)\",\n        \"\"\n    ],\n    \"sort\": [\n        \"bool sort(array &array_arg [, int sort_flags])\",\n        \"Sort an array\"\n    ],\n    \"soundex\": [\n        \"string soundex(string str)\",\n        \"Calculate the soundex key of a string\"\n    ],\n    \"spl_autoload\": [\n        \"void spl_autoload(string class_name [, string file_extensions])\",\n        \"Default implementation for __autoload()\"\n    ],\n    \"spl_autoload_call\": [\n        \"void spl_autoload_call(string class_name)\",\n        \"Try all registerd autoload function to load the requested class\"\n    ],\n    \"spl_autoload_extensions\": [\n        \"string spl_autoload_extensions([string file_extensions])\",\n        \"Register and return default file extensions for spl_autoload\"\n    ],\n    \"spl_autoload_functions\": [\n        \"false|array spl_autoload_functions()\",\n        \"Return all registered __autoload() functionns\"\n    ],\n    \"spl_autoload_register\": [\n        \"bool spl_autoload_register([mixed autoload_function = \\\"spl_autoload\\\" [, throw = true [, prepend]]])\",\n        \"Register given function as __autoload() implementation\"\n    ],\n    \"spl_autoload_unregister\": [\n        \"bool spl_autoload_unregister(mixed autoload_function)\",\n        \"Unregister given function as __autoload() implementation\"\n    ],\n    \"spl_classes\": [\n        \"array spl_classes()\",\n        \"Return an array containing the names of all clsses and interfaces defined in SPL\"\n    ],\n    \"spl_object_hash\": [\n        \"string spl_object_hash(object obj)\",\n        \"Return hash id for given object\"\n    ],\n    \"split\": [\n        \"array split(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression\"\n    ],\n    \"spliti\": [\n        \"array spliti(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression case-insensitive\"\n    ],\n    \"sprintf\": [\n        \"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Return a formatted string\"\n    ],\n    \"sql_regcase\": [\n        \"string sql_regcase(string string)\",\n        \"Make regular expression for case insensitive match\"\n    ],\n    \"sqlite_array_query\": [\n        \"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\n        \"Executes a query against a given database and returns an array of arrays.\"\n    ],\n    \"sqlite_busy_timeout\": [\n        \"void sqlite_busy_timeout(resource db, int ms)\",\n        \"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"\n    ],\n    \"sqlite_changes\": [\n        \"int sqlite_changes(resource db)\",\n        \"Returns the number of rows that were changed by the most recent SQL statement.\"\n    ],\n    \"sqlite_close\": [\n        \"void sqlite_close(resource db)\",\n        \"Closes an open sqlite database.\"\n    ],\n    \"sqlite_column\": [\n        \"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\n        \"Fetches a column from the current row of a result set.\"\n    ],\n    \"sqlite_create_aggregate\": [\n        \"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\n        \"Registers an aggregate function for queries.\"\n    ],\n    \"sqlite_create_function\": [\n        \"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",\n        \"Registers a \\\"regular\\\" function for queries.\"\n    ],\n    \"sqlite_current\": [\n        \"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the current row from a result set as an array.\"\n    ],\n    \"sqlite_error_string\": [\n        \"string sqlite_error_string(int error_code)\",\n        \"Returns the textual description of an error code.\"\n    ],\n    \"sqlite_escape_string\": [\n        \"string sqlite_escape_string(string item)\",\n        \"Escapes a string for use as a query parameter.\"\n    ],\n    \"sqlite_exec\": [\n        \"boolean sqlite_exec(string query, resource db[, string &error_message])\",\n        \"Executes a result-less query against a given database\"\n    ],\n    \"sqlite_factory\": [\n        \"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_fetch_all\": [\n        \"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches all rows from a result set as an array of arrays.\"\n    ],\n    \"sqlite_fetch_array\": [\n        \"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the next row from a result set as an array.\"\n    ],\n    \"sqlite_fetch_column_types\": [\n        \"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\n        \"Return an array of column types from a particular table.\"\n    ],\n    \"sqlite_fetch_object\": [\n        \"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\n        \"Fetches the next row from a result set as an object.\"\n    ],\n    \"sqlite_fetch_single\": [\n        \"string sqlite_fetch_single(resource result [, bool decode_binary])\",\n        \"Fetches the first column of a result set as a string.\"\n    ],\n    \"sqlite_field_name\": [\n        \"string sqlite_field_name(resource result, int field_index)\",\n        \"Returns the name of a particular field of a result set.\"\n    ],\n    \"sqlite_has_prev\": [\n        \"bool sqlite_has_prev(resource result)\",\n        \"* Returns whether a previous row is available.\"\n    ],\n    \"sqlite_key\": [\n        \"int sqlite_key(resource result)\",\n        \"Return the current row index of a buffered result.\"\n    ],\n    \"sqlite_last_error\": [\n        \"int sqlite_last_error(resource db)\",\n        \"Returns the error code of the last error for a database.\"\n    ],\n    \"sqlite_last_insert_rowid\": [\n        \"int sqlite_last_insert_rowid(resource db)\",\n        \"Returns the rowid of the most recently inserted row.\"\n    ],\n    \"sqlite_libencoding\": [\n        \"string sqlite_libencoding()\",\n        \"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"\n    ],\n    \"sqlite_libversion\": [\n        \"string sqlite_libversion()\",\n        \"Returns the version of the linked SQLite library.\"\n    ],\n    \"sqlite_next\": [\n        \"bool sqlite_next(resource result)\",\n        \"Seek to the next row number of a result set.\"\n    ],\n    \"sqlite_num_fields\": [\n        \"int sqlite_num_fields(resource result)\",\n        \"Returns the number of fields in a result set.\"\n    ],\n    \"sqlite_num_rows\": [\n        \"int sqlite_num_rows(resource result)\",\n        \"Returns the number of rows in a buffered result set.\"\n    ],\n    \"sqlite_open\": [\n        \"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_popen\": [\n        \"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\n        \"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_prev\": [\n        \"bool sqlite_prev(resource result)\",\n        \"* Seek to the previous row number of a result set.\"\n    ],\n    \"sqlite_query\": [\n        \"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\n        \"Executes a query against a given database and returns a result handle.\"\n    ],\n    \"sqlite_rewind\": [\n        \"bool sqlite_rewind(resource result)\",\n        \"Seek to the first row number of a buffered result set.\"\n    ],\n    \"sqlite_seek\": [\n        \"bool sqlite_seek(resource result, int row)\",\n        \"Seek to a particular row number of a buffered result set.\"\n    ],\n    \"sqlite_single_query\": [\n        \"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\n        \"Executes a query and returns either an array for one single column or the value of the first row.\"\n    ],\n    \"sqlite_udf_decode_binary\": [\n        \"string sqlite_udf_decode_binary(string data)\",\n        \"Decode binary encoding on a string parameter passed to an UDF.\"\n    ],\n    \"sqlite_udf_encode_binary\": [\n        \"string sqlite_udf_encode_binary(string data)\",\n        \"Apply binary encoding (if required) to a string to return from an UDF.\"\n    ],\n    \"sqlite_unbuffered_query\": [\n        \"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\n        \"Executes a query that does not prefetch and buffer all data.\"\n    ],\n    \"sqlite_valid\": [\n        \"bool sqlite_valid(resource result)\",\n        \"Returns whether more rows are available.\"\n    ],\n    \"sqrt\": [\n        \"float sqrt(float number)\",\n        \"Returns the square root of the number\"\n    ],\n    \"srand\": [\n        \"void srand([int seed])\",\n        \"Seeds random number generator\"\n    ],\n    \"sscanf\": [\n        \"mixed sscanf(string str, string format [, string ...])\",\n        \"Implements an ANSI C compatible sscanf\"\n    ],\n    \"stat\": [\n        \"array stat(string filename)\",\n        \"Give information about a file\"\n    ],\n    \"str_getcsv\": [\n        \"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\n        \"Parse a CSV string into an array\"\n    ],\n    \"str_ireplace\": [\n        \"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace / case-insensitive\"\n    ],\n    \"str_pad\": [\n        \"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\n        \"Returns input string padded on the left or right to specified length with pad_string\"\n    ],\n    \"str_repeat\": [\n        \"string str_repeat(string input, int mult)\",\n        \"Returns the input string repeat mult times\"\n    ],\n    \"str_replace\": [\n        \"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace\"\n    ],\n    \"str_rot13\": [\n        \"string str_rot13(string str)\",\n        \"Perform the rot13 transform on a string\"\n    ],\n    \"str_shuffle\": [\n        \"void str_shuffle(string str)\",\n        \"Shuffles string. One permutation of all possible is created\"\n    ],\n    \"str_split\": [\n        \"array str_split(string str [, int split_length])\",\n        \"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"\n    ],\n    \"str_word_count\": [\n        \"mixed str_word_count(string str, [int format [, string charlist]])\",\n        \"Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, 'word' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \\\"'\\\" and \\\"-\\\" characters.\"\n    ],\n    \"strcasecmp\": [\n        \"int strcasecmp(string str1, string str2)\",\n        \"Binary safe case-insensitive string comparison\"\n    ],\n    \"strchr\": [\n        \"string strchr(string haystack, string needle)\",\n        \"An alias for strstr\"\n    ],\n    \"strcmp\": [\n        \"int strcmp(string str1, string str2)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strcoll\": [\n        \"int strcoll(string str1, string str2)\",\n        \"Compares two strings using the current locale\"\n    ],\n    \"strcspn\": [\n        \"int strcspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"\n    ],\n    \"stream_bucket_append\": [\n        \"void stream_bucket_append(resource brigade, resource bucket)\",\n        \"Append bucket to brigade\"\n    ],\n    \"stream_bucket_make_writeable\": [\n        \"object stream_bucket_make_writeable(resource brigade)\",\n        \"Return a bucket object from the brigade for operating on\"\n    ],\n    \"stream_bucket_new\": [\n        \"resource stream_bucket_new(resource stream, string buffer)\",\n        \"Create a new bucket for use on the current stream\"\n    ],\n    \"stream_bucket_prepend\": [\n        \"void stream_bucket_prepend(resource brigade, resource bucket)\",\n        \"Prepend bucket to brigade\"\n    ],\n    \"stream_context_create\": [\n        \"resource stream_context_create([array options[, array params]])\",\n        \"Create a file context and optionally set parameters\"\n    ],\n    \"stream_context_get_default\": [\n        \"resource stream_context_get_default([array options])\",\n        \"Get a handle on the default file/stream context and optionally set parameters\"\n    ],\n    \"stream_context_get_options\": [\n        \"array stream_context_get_options(resource context|resource stream)\",\n        \"Retrieve options for a stream/wrapper/context\"\n    ],\n    \"stream_context_get_params\": [\n        \"array stream_context_get_params(resource context|resource stream)\",\n        \"Get parameters of a file context\"\n    ],\n    \"stream_context_set_default\": [\n        \"resource stream_context_set_default(array options)\",\n        \"Set default file/stream context, returns the context as a resource\"\n    ],\n    \"stream_context_set_option\": [\n        \"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\n        \"Set an option for a wrapper\"\n    ],\n    \"stream_context_set_params\": [\n        \"bool stream_context_set_params(resource context|resource stream, array options)\",\n        \"Set parameters for a file context\"\n    ],\n    \"stream_copy_to_stream\": [\n        \"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\n        \"Reads up to maxlen bytes from source stream and writes them to dest stream.\"\n    ],\n    \"stream_filter_append\": [\n        \"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Append a filter to a stream\"\n    ],\n    \"stream_filter_prepend\": [\n        \"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Prepend a filter to a stream\"\n    ],\n    \"stream_filter_register\": [\n        \"bool stream_filter_register(string filtername, string classname)\",\n        \"Registers a custom filter handler class\"\n    ],\n    \"stream_filter_remove\": [\n        \"bool stream_filter_remove(resource stream_filter)\",\n        \"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"\n    ],\n    \"stream_get_contents\": [\n        \"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\n        \"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"\n    ],\n    \"stream_get_filters\": [\n        \"array stream_get_filters(void)\",\n        \"Returns a list of registered filters\"\n    ],\n    \"stream_get_line\": [\n        \"string stream_get_line(resource stream, int maxlen [, string ending])\",\n        \"Read up to maxlen bytes from a stream or until the ending string is found\"\n    ],\n    \"stream_get_meta_data\": [\n        \"array stream_get_meta_data(resource fp)\",\n        \"Retrieves header/meta data from streams/file pointers\"\n    ],\n    \"stream_get_transports\": [\n        \"array stream_get_transports()\",\n        \"Retrieves list of registered socket transports\"\n    ],\n    \"stream_get_wrappers\": [\n        \"array stream_get_wrappers()\",\n        \"Retrieves list of registered stream wrappers\"\n    ],\n    \"stream_is_local\": [\n        \"bool stream_is_local(resource stream|string url)\",\n        \"\"\n    ],\n    \"stream_resolve_include_path\": [\n        \"string stream_resolve_include_path(string filename)\",\n        \"Determine what file will be opened by calls to fopen() with a relative path\"\n    ],\n    \"stream_select\": [\n        \"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"stream_set_blocking\": [\n        \"bool stream_set_blocking(resource socket, int mode)\",\n        \"Set blocking/non-blocking mode on a socket or stream\"\n    ],\n    \"stream_set_timeout\": [\n        \"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\n        \"Set timeout on stream read to seconds + microseonds\"\n    ],\n    \"stream_set_write_buffer\": [\n        \"int stream_set_write_buffer(resource fp, int buffer)\",\n        \"Set file write buffer\"\n    ],\n    \"stream_socket_accept\": [\n        \"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\n        \"Accept a client connection from a server socket\"\n    ],\n    \"stream_socket_client\": [\n        \"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\n        \"Open a client connection to a remote address\"\n    ],\n    \"stream_socket_enable_crypto\": [\n        \"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\n        \"Enable or disable a specific kind of crypto on the stream\"\n    ],\n    \"stream_socket_get_name\": [\n        \"string stream_socket_get_name(resource stream, bool want_peer)\",\n        \"Returns either the locally bound or remote name for a socket stream\"\n    ],\n    \"stream_socket_pair\": [\n        \"array stream_socket_pair(int domain, int type, int protocol)\",\n        \"Creates a pair of connected, indistinguishable socket streams\"\n    ],\n    \"stream_socket_recvfrom\": [\n        \"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\n        \"Receives data from a socket stream\"\n    ],\n    \"stream_socket_sendto\": [\n        \"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\n        \"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"\n    ],\n    \"stream_socket_server\": [\n        \"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\n        \"Create a server socket bound to localaddress\"\n    ],\n    \"stream_socket_shutdown\": [\n        \"int stream_socket_shutdown(resource stream, int how)\",\n        \"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"\n    ],\n    \"stream_supports_lock\": [\n        \"bool stream_supports_lock(resource stream)\",\n        \"Tells whether the stream supports locking through flock().\"\n    ],\n    \"stream_wrapper_register\": [\n        \"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\n        \"Registers a custom URL protocol handler class\"\n    ],\n    \"stream_wrapper_restore\": [\n        \"bool stream_wrapper_restore(string protocol)\",\n        \"Restore the original protocol handler, overriding if necessary\"\n    ],\n    \"stream_wrapper_unregister\": [\n        \"bool stream_wrapper_unregister(string protocol)\",\n        \"Unregister a wrapper for the life of the current request.\"\n    ],\n    \"strftime\": [\n        \"string strftime(string format [, int timestamp])\",\n        \"Format a local time/date according to locale settings\"\n    ],\n    \"strip_tags\": [\n        \"string strip_tags(string str [, string allowable_tags])\",\n        \"Strips HTML and PHP tags from a string\"\n    ],\n    \"stripcslashes\": [\n        \"string stripcslashes(string str)\",\n        \"Strips backslashes from a string. Uses C-style conventions\"\n    ],\n    \"stripos\": [\n        \"int stripos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"stripslashes\": [\n        \"string stripslashes(string str)\",\n        \"Strips backslashes from a string\"\n    ],\n    \"stristr\": [\n        \"string stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"strlen\": [\n        \"int strlen(string str)\",\n        \"Get string length\"\n    ],\n    \"strnatcasecmp\": [\n        \"int strnatcasecmp(string s1, string s2)\",\n        \"Returns the result of case-insensitive string comparison using 'natural' algorithm\"\n    ],\n    \"strnatcmp\": [\n        \"int strnatcmp(string s1, string s2)\",\n        \"Returns the result of string comparison using 'natural' algorithm\"\n    ],\n    \"strncasecmp\": [\n        \"int strncasecmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strncmp\": [\n        \"int strncmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strpbrk\": [\n        \"array strpbrk(string haystack, string char_list)\",\n        \"Search a string for any of a set of characters\"\n    ],\n    \"strpos\": [\n        \"int strpos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another\"\n    ],\n    \"strptime\": [\n        \"string strptime(string timestamp, string format)\",\n        \"Parse a time/date generated with strftime()\"\n    ],\n    \"strrchr\": [\n        \"string strrchr(string haystack, string needle)\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"strrev\": [\n        \"string strrev(string str)\",\n        \"Reverse a string\"\n    ],\n    \"strripos\": [\n        \"int strripos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strrpos\": [\n        \"int strrpos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strspn\": [\n        \"int strspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"\n    ],\n    \"strstr\": [\n        \"string strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"strtok\": [\n        \"string strtok([string str,] string token)\",\n        \"Tokenize a string\"\n    ],\n    \"strtolower\": [\n        \"string strtolower(string str)\",\n        \"Makes a string lowercase\"\n    ],\n    \"strtotime\": [\n        \"int strtotime(string time [, int now ])\",\n        \"Convert string representation of date and time to a timestamp\"\n    ],\n    \"strtoupper\": [\n        \"string strtoupper(string str)\",\n        \"Makes a string uppercase\"\n    ],\n    \"strtr\": [\n        \"string strtr(string str, string from[, string to])\",\n        \"Translates characters in str using given translation tables\"\n    ],\n    \"strval\": [\n        \"string strval(mixed var)\",\n        \"Get the string value of a variable\"\n    ],\n    \"substr\": [\n        \"string substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"substr_compare\": [\n        \"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\n        \"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"\n    ],\n    \"substr_count\": [\n        \"int substr_count(string haystack, string needle [, int offset [, int length]])\",\n        \"Returns the number of times a substring occurs in the string\"\n    ],\n    \"substr_replace\": [\n        \"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\n        \"Replaces part of a string with another string\"\n    ],\n    \"sybase_affected_rows\": [\n        \"int sybase_affected_rows([resource link_id])\",\n        \"Get number of affected rows in last query\"\n    ],\n    \"sybase_close\": [\n        \"bool sybase_close([resource link_id])\",\n        \"Close Sybase connection\"\n    ],\n    \"sybase_connect\": [\n        \"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\n        \"Open Sybase server connection\"\n    ],\n    \"sybase_data_seek\": [\n        \"bool sybase_data_seek(resource result, int offset)\",\n        \"Move internal row pointer\"\n    ],\n    \"sybase_deadlock_retry_count\": [\n        \"void sybase_deadlock_retry_count(int retry_count)\",\n        \"Sets deadlock retry count\"\n    ],\n    \"sybase_fetch_array\": [\n        \"array sybase_fetch_array(resource result)\",\n        \"Fetch row as array\"\n    ],\n    \"sybase_fetch_assoc\": [\n        \"array sybase_fetch_assoc(resource result)\",\n        \"Fetch row as array without numberic indices\"\n    ],\n    \"sybase_fetch_field\": [\n        \"object sybase_fetch_field(resource result [, int offset])\",\n        \"Get field information\"\n    ],\n    \"sybase_fetch_object\": [\n        \"object sybase_fetch_object(resource result [, mixed object])\",\n        \"Fetch row as object\"\n    ],\n    \"sybase_fetch_row\": [\n        \"array sybase_fetch_row(resource result)\",\n        \"Get row as enumerated array\"\n    ],\n    \"sybase_field_seek\": [\n        \"bool sybase_field_seek(resource result, int offset)\",\n        \"Set field offset\"\n    ],\n    \"sybase_free_result\": [\n        \"bool sybase_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"sybase_get_last_message\": [\n        \"string sybase_get_last_message(void)\",\n        \"Returns the last message from server (over min_message_severity)\"\n    ],\n    \"sybase_min_client_severity\": [\n        \"void sybase_min_client_severity(int severity)\",\n        \"Sets minimum client severity\"\n    ],\n    \"sybase_min_server_severity\": [\n        \"void sybase_min_server_severity(int severity)\",\n        \"Sets minimum server severity\"\n    ],\n    \"sybase_num_fields\": [\n        \"int sybase_num_fields(resource result)\",\n        \"Get number of fields in result\"\n    ],\n    \"sybase_num_rows\": [\n        \"int sybase_num_rows(resource result)\",\n        \"Get number of rows in result\"\n    ],\n    \"sybase_pconnect\": [\n        \"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\n        \"Open persistent Sybase connection\"\n    ],\n    \"sybase_query\": [\n        \"int sybase_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"sybase_result\": [\n        \"string sybase_result(resource result, int row, mixed field)\",\n        \"Get result data\"\n    ],\n    \"sybase_select_db\": [\n        \"bool sybase_select_db(string database [, resource link_id])\",\n        \"Select Sybase database\"\n    ],\n    \"sybase_set_message_handler\": [\n        \"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\n        \"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"\n    ],\n    \"sybase_unbuffered_query\": [\n        \"int sybase_unbuffered_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"symlink\": [\n        \"int symlink(string target, string link)\",\n        \"Create a symbolic link\"\n    ],\n    \"sys_get_temp_dir\": [\n        \"string sys_get_temp_dir()\",\n        \"Returns directory path used for temporary files\"\n    ],\n    \"sys_getloadavg\": [\n        \"array sys_getloadavg()\",\n        \"\"\n    ],\n    \"syslog\": [\n        \"bool syslog(int priority, string message)\",\n        \"Generate a system log message\"\n    ],\n    \"system\": [\n        \"int system(string command [, int &return_value])\",\n        \"Execute an external program and display output\"\n    ],\n    \"tan\": [\n        \"float tan(float number)\",\n        \"Returns the tangent of the number in radians\"\n    ],\n    \"tanh\": [\n        \"float tanh(float number)\",\n        \"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"\n    ],\n    \"tempnam\": [\n        \"string tempnam(string dir, string prefix)\",\n        \"Create a unique filename in a directory\"\n    ],\n    \"textdomain\": [\n        \"string textdomain(string domain)\",\n        \"Set the textdomain to \\\"domain\\\". Returns the current domain\"\n    ],\n    \"tidy_access_count\": [\n        \"int tidy_access_count()\",\n        \"Returns the Number of Tidy accessibility warnings encountered for specified document.\"\n    ],\n    \"tidy_clean_repair\": [\n        \"boolean tidy_clean_repair()\",\n        \"Execute configured cleanup and repair operations on parsed markup\"\n    ],\n    \"tidy_config_count\": [\n        \"int tidy_config_count()\",\n        \"Returns the Number of Tidy configuration errors encountered for specified document.\"\n    ],\n    \"tidy_diagnose\": [\n        \"boolean tidy_diagnose()\",\n        \"Run configured diagnostics on parsed and repaired markup.\"\n    ],\n    \"tidy_error_count\": [\n        \"int tidy_error_count()\",\n        \"Returns the Number of Tidy errors encountered for specified document.\"\n    ],\n    \"tidy_get_body\": [\n        \"TidyNode tidy_get_body(resource tidy)\",\n        \"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_config\": [\n        \"array tidy_get_config()\",\n        \"Get current Tidy configuarion\"\n    ],\n    \"tidy_get_error_buffer\": [\n        \"string tidy_get_error_buffer([boolean detailed])\",\n        \"Return warnings and errors which occured parsing the specified document\"\n    ],\n    \"tidy_get_head\": [\n        \"TidyNode tidy_get_head()\",\n        \"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html\": [\n        \"TidyNode tidy_get_html()\",\n        \"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html_ver\": [\n        \"int tidy_get_html_ver()\",\n        \"Get the Detected HTML version for the specified document.\"\n    ],\n    \"tidy_get_opt_doc\": [\n        \"string tidy_get_opt_doc(tidy resource, string optname)\",\n        \"Returns the documentation for the given option name\"\n    ],\n    \"tidy_get_output\": [\n        \"string tidy_get_output()\",\n        \"Return a string representing the parsed tidy markup\"\n    ],\n    \"tidy_get_release\": [\n        \"string tidy_get_release()\",\n        \"Get release date (version) for Tidy library\"\n    ],\n    \"tidy_get_root\": [\n        \"TidyNode tidy_get_root()\",\n        \"Returns a TidyNode Object representing the root of the tidy parse tree\"\n    ],\n    \"tidy_get_status\": [\n        \"int tidy_get_status()\",\n        \"Get status of specfied document.\"\n    ],\n    \"tidy_getopt\": [\n        \"mixed tidy_getopt(string option)\",\n        \"Returns the value of the specified configuration option for the tidy document.\"\n    ],\n    \"tidy_is_xhtml\": [\n        \"boolean tidy_is_xhtml()\",\n        \"Indicates if the document is a XHTML document.\"\n    ],\n    \"tidy_is_xml\": [\n        \"boolean tidy_is_xml()\",\n        \"Indicates if the document is a generic (non HTML/XHTML) XML document.\"\n    ],\n    \"tidy_parse_file\": [\n        \"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\n        \"Parse markup in file or URI\"\n    ],\n    \"tidy_parse_string\": [\n        \"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\n        \"Parse a document stored in a string\"\n    ],\n    \"tidy_repair_file\": [\n        \"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\n        \"Repair a file using an optionally provided configuration file\"\n    ],\n    \"tidy_repair_string\": [\n        \"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\n        \"Repair a string using an optionally provided configuration file\"\n    ],\n    \"tidy_warning_count\": [\n        \"int tidy_warning_count()\",\n        \"Returns the Number of Tidy warnings encountered for specified document.\"\n    ],\n    \"time\": [\n        \"int time(void)\",\n        \"Return current UNIX timestamp\"\n    ],\n    \"time_nanosleep\": [\n        \"mixed time_nanosleep(long seconds, long nanoseconds)\",\n        \"Delay for a number of seconds and nano seconds\"\n    ],\n    \"time_sleep_until\": [\n        \"mixed time_sleep_until(float timestamp)\",\n        \"Make the script sleep until the specified time\"\n    ],\n    \"timezone_abbreviations_list\": [\n        \"array timezone_abbreviations_list()\",\n        \"Returns associative array containing dst, offset and the timezone name\"\n    ],\n    \"timezone_identifiers_list\": [\n        \"array timezone_identifiers_list([long what[, string country]])\",\n        \"Returns numerically index array with all timezone identifiers.\"\n    ],\n    \"timezone_location_get\": [\n        \"array timezone_location_get()\",\n        \"Returns location information for a timezone, including country code, latitude/longitude and comments\"\n    ],\n    \"timezone_name_from_abbr\": [\n        \"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\n        \"Returns the timezone name from abbrevation\"\n    ],\n    \"timezone_name_get\": [\n        \"string timezone_name_get(DateTimeZone object)\",\n        \"Returns the name of the timezone.\"\n    ],\n    \"timezone_offset_get\": [\n        \"long timezone_offset_get(DateTimeZone object, DateTime object)\",\n        \"Returns the timezone offset.\"\n    ],\n    \"timezone_open\": [\n        \"DateTimeZone timezone_open(string timezone)\",\n        \"Returns new DateTimeZone object\"\n    ],\n    \"timezone_transitions_get\": [\n        \"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\n        \"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"\n    ],\n    \"timezone_version_get\": [\n        \"array timezone_version_get()\",\n        \"Returns the Olson database version number.\"\n    ],\n    \"tmpfile\": [\n        \"resource tmpfile(void)\",\n        \"Create a temporary file that will be deleted automatically after use\"\n    ],\n    \"token_get_all\": [\n        \"array token_get_all(string source)\",\n        \"\"\n    ],\n    \"token_name\": [\n        \"string token_name(int type)\",\n        \"\"\n    ],\n    \"touch\": [\n        \"bool touch(string filename [, int time [, int atime]])\",\n        \"Set modification time of file\"\n    ],\n    \"trigger_error\": [\n        \"void trigger_error(string messsage [, int error_type])\",\n        \"Generates a user-level error/warning/notice message\"\n    ],\n    \"trim\": [\n        \"string trim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning and end of a string\"\n    ],\n    \"uasort\": [\n        \"bool uasort(array array_arg, string cmp_function)\",\n        \"Sort an array with a user-defined comparison function and maintain index association\"\n    ],\n    \"ucfirst\": [\n        \"string ucfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"ucwords\": [\n        \"string ucwords(string str)\",\n        \"Uppercase the first character of every word in a string\"\n    ],\n    \"uksort\": [\n        \"bool uksort(array array_arg, string cmp_function)\",\n        \"Sort an array by keys using a user-defined comparison function\"\n    ],\n    \"umask\": [\n        \"int umask([int mask])\",\n        \"Return or change the umask\"\n    ],\n    \"uniqid\": [\n        \"string uniqid([string prefix [, bool more_entropy]])\",\n        \"Generates a unique ID\"\n    ],\n    \"unixtojd\": [\n        \"int unixtojd([int timestamp])\",\n        \"Convert UNIX timestamp to Julian Day\"\n    ],\n    \"unlink\": [\n        \"bool unlink(string filename[, context context])\",\n        \"Delete a file\"\n    ],\n    \"unpack\": [\n        \"array unpack(string format, string input)\",\n        \"Unpack binary string into named array elements according to format argument\"\n    ],\n    \"unregister_tick_function\": [\n        \"void unregister_tick_function(string function_name)\",\n        \"Unregisters a tick callback function\"\n    ],\n    \"unserialize\": [\n        \"mixed unserialize(string variable_representation)\",\n        \"Takes a string representation of variable and recreates it\"\n    ],\n    \"unset\": [\n        \"void unset (mixed var [, mixed var])\",\n        \"Unset a given variable\"\n    ],\n    \"urldecode\": [\n        \"string urldecode(string str)\",\n        \"Decodes URL-encoded string\"\n    ],\n    \"urlencode\": [\n        \"string urlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"usleep\": [\n        \"void usleep(int micro_seconds)\",\n        \"Delay for a given number of micro seconds\"\n    ],\n    \"usort\": [\n        \"bool usort(array array_arg, string cmp_function)\",\n        \"Sort an array by values using a user-defined comparison function\"\n    ],\n    \"utf8_decode\": [\n        \"string utf8_decode(string data)\",\n        \"Converts a UTF-8 encoded string to ISO-8859-1\"\n    ],\n    \"utf8_encode\": [\n        \"string utf8_encode(string data)\",\n        \"Encodes an ISO-8859-1 string to UTF-8\"\n    ],\n    \"var_dump\": [\n        \"void var_dump(mixed var)\",\n        \"Dumps a string representation of variable to output\"\n    ],\n    \"var_export\": [\n        \"mixed var_export(mixed var [, bool return])\",\n        \"Outputs or returns a string representation of a variable\"\n    ],\n    \"variant_abs\": [\n        \"mixed variant_abs(mixed left)\",\n        \"Returns the absolute value of a variant\"\n    ],\n    \"variant_add\": [\n        \"mixed variant_add(mixed left, mixed right)\",\n        \"\\\"Adds\\\" two variant values together and returns the result\"\n    ],\n    \"variant_and\": [\n        \"mixed variant_and(mixed left, mixed right)\",\n        \"performs a bitwise AND operation between two variants and returns the result\"\n    ],\n    \"variant_cast\": [\n        \"object variant_cast(object variant, int type)\",\n        \"Convert a variant into a new variant object of another type\"\n    ],\n    \"variant_cat\": [\n        \"mixed variant_cat(mixed left, mixed right)\",\n        \"concatenates two variant values together and returns the result\"\n    ],\n    \"variant_cmp\": [\n        \"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\n        \"Compares two variants\"\n    ],\n    \"variant_date_from_timestamp\": [\n        \"object variant_date_from_timestamp(int timestamp)\",\n        \"Returns a variant date representation of a unix timestamp\"\n    ],\n    \"variant_date_to_timestamp\": [\n        \"int variant_date_to_timestamp(object variant)\",\n        \"Converts a variant date/time value to unix timestamp\"\n    ],\n    \"variant_div\": [\n        \"mixed variant_div(mixed left, mixed right)\",\n        \"Returns the result from dividing two variants\"\n    ],\n    \"variant_eqv\": [\n        \"mixed variant_eqv(mixed left, mixed right)\",\n        \"Performs a bitwise equivalence on two variants\"\n    ],\n    \"variant_fix\": [\n        \"mixed variant_fix(mixed left)\",\n        \"Returns the integer part ? of a variant\"\n    ],\n    \"variant_get_type\": [\n        \"int variant_get_type(object variant)\",\n        \"Returns the VT_XXX type code for a variant\"\n    ],\n    \"variant_idiv\": [\n        \"mixed variant_idiv(mixed left, mixed right)\",\n        \"Converts variants to integers and then returns the result from dividing them\"\n    ],\n    \"variant_imp\": [\n        \"mixed variant_imp(mixed left, mixed right)\",\n        \"Performs a bitwise implication on two variants\"\n    ],\n    \"variant_int\": [\n        \"mixed variant_int(mixed left)\",\n        \"Returns the integer portion of a variant\"\n    ],\n    \"variant_mod\": [\n        \"mixed variant_mod(mixed left, mixed right)\",\n        \"Divides two variants and returns only the remainder\"\n    ],\n    \"variant_mul\": [\n        \"mixed variant_mul(mixed left, mixed right)\",\n        \"multiplies the values of the two variants and returns the result\"\n    ],\n    \"variant_neg\": [\n        \"mixed variant_neg(mixed left)\",\n        \"Performs logical negation on a variant\"\n    ],\n    \"variant_not\": [\n        \"mixed variant_not(mixed left)\",\n        \"Performs bitwise not negation on a variant\"\n    ],\n    \"variant_or\": [\n        \"mixed variant_or(mixed left, mixed right)\",\n        \"Performs a logical disjunction on two variants\"\n    ],\n    \"variant_pow\": [\n        \"mixed variant_pow(mixed left, mixed right)\",\n        \"Returns the result of performing the power function with two variants\"\n    ],\n    \"variant_round\": [\n        \"mixed variant_round(mixed left, int decimals)\",\n        \"Rounds a variant to the specified number of decimal places\"\n    ],\n    \"variant_set\": [\n        \"void variant_set(object variant, mixed value)\",\n        \"Assigns a new value for a variant object\"\n    ],\n    \"variant_set_type\": [\n        \"void variant_set_type(object variant, int type)\",\n        \"Convert a variant into another type.  Variant is modified \\\"in-place\\\"\"\n    ],\n    \"variant_sub\": [\n        \"mixed variant_sub(mixed left, mixed right)\",\n        \"subtracts the value of the right variant from the left variant value and returns the result\"\n    ],\n    \"variant_xor\": [\n        \"mixed variant_xor(mixed left, mixed right)\",\n        \"Performs a logical exclusion on two variants\"\n    ],\n    \"version_compare\": [\n        \"int version_compare(string ver1, string ver2 [, string oper])\",\n        \"Compares two \\\"PHP-standardized\\\" version number strings\"\n    ],\n    \"vfprintf\": [\n        \"int vfprintf(resource stream, string format, array args)\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"virtual\": [\n        \"bool virtual(string filename)\",\n        \"Perform an Apache sub-request\"\n    ],\n    \"vprintf\": [\n        \"int vprintf(string format, array args)\",\n        \"Output a formatted string\"\n    ],\n    \"vsprintf\": [\n        \"string vsprintf(string format, array args)\",\n        \"Return a formatted string\"\n    ],\n    \"wddx_add_vars\": [\n        \"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\n        \"Serializes given variables and adds them to packet given by packet_id\"\n    ],\n    \"wddx_deserialize\": [\n        \"mixed wddx_deserialize(mixed packet)\",\n        \"Deserializes given packet and returns a PHP value\"\n    ],\n    \"wddx_packet_end\": [\n        \"string wddx_packet_end(resource packet_id)\",\n        \"Ends specified WDDX packet and returns the string containing the packet\"\n    ],\n    \"wddx_packet_start\": [\n        \"resource wddx_packet_start([string comment])\",\n        \"Starts a WDDX packet with optional comment and returns the packet id\"\n    ],\n    \"wddx_serialize_value\": [\n        \"string wddx_serialize_value(mixed var [, string comment])\",\n        \"Creates a new packet and serializes the given value\"\n    ],\n    \"wddx_serialize_vars\": [\n        \"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\n        \"Creates a new packet and serializes given variables into a struct\"\n    ],\n    \"wordwrap\": [\n        \"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\n        \"Wraps buffer to selected number of characters using string break char\"\n    ],\n    \"xml_error_string\": [\n        \"string xml_error_string(int code)\",\n        \"Get XML parser error string\"\n    ],\n    \"xml_get_current_byte_index\": [\n        \"int xml_get_current_byte_index(resource parser)\",\n        \"Get current byte index for an XML parser\"\n    ],\n    \"xml_get_current_column_number\": [\n        \"int xml_get_current_column_number(resource parser)\",\n        \"Get current column number for an XML parser\"\n    ],\n    \"xml_get_current_line_number\": [\n        \"int xml_get_current_line_number(resource parser)\",\n        \"Get current line number for an XML parser\"\n    ],\n    \"xml_get_error_code\": [\n        \"int xml_get_error_code(resource parser)\",\n        \"Get XML parser error code\"\n    ],\n    \"xml_parse\": [\n        \"int xml_parse(resource parser, string data [, int isFinal])\",\n        \"Start parsing an XML document\"\n    ],\n    \"xml_parse_into_struct\": [\n        \"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\n        \"Parsing a XML document\"\n    ],\n    \"xml_parser_create\": [\n        \"resource xml_parser_create([string encoding])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_create_ns\": [\n        \"resource xml_parser_create_ns([string encoding [, string sep]])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_free\": [\n        \"int xml_parser_free(resource parser)\",\n        \"Free an XML parser\"\n    ],\n    \"xml_parser_get_option\": [\n        \"int xml_parser_get_option(resource parser, int option)\",\n        \"Get options from an XML parser\"\n    ],\n    \"xml_parser_set_option\": [\n        \"int xml_parser_set_option(resource parser, int option, mixed value)\",\n        \"Set options in an XML parser\"\n    ],\n    \"xml_set_character_data_handler\": [\n        \"int xml_set_character_data_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_default_handler\": [\n        \"int xml_set_default_handler(resource parser, string hdl)\",\n        \"Set up default handler\"\n    ],\n    \"xml_set_element_handler\": [\n        \"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\n        \"Set up start and end element handlers\"\n    ],\n    \"xml_set_end_namespace_decl_handler\": [\n        \"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_external_entity_ref_handler\": [\n        \"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\n        \"Set up external entity reference handler\"\n    ],\n    \"xml_set_notation_decl_handler\": [\n        \"int xml_set_notation_decl_handler(resource parser, string hdl)\",\n        \"Set up notation declaration handler\"\n    ],\n    \"xml_set_object\": [\n        \"int xml_set_object(resource parser, object &obj)\",\n        \"Set up object which should be used for callbacks\"\n    ],\n    \"xml_set_processing_instruction_handler\": [\n        \"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\n        \"Set up processing instruction (PI) handler\"\n    ],\n    \"xml_set_start_namespace_decl_handler\": [\n        \"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_unparsed_entity_decl_handler\": [\n        \"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\n        \"Set up unparsed entity declaration handler\"\n    ],\n    \"xmlrpc_decode\": [\n        \"array xmlrpc_decode(string xml [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_decode_request\": [\n        \"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_encode\": [\n        \"string xmlrpc_encode(mixed value)\",\n        \"Generates XML for a PHP value\"\n    ],\n    \"xmlrpc_encode_request\": [\n        \"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\n        \"Generates XML for a method request\"\n    ],\n    \"xmlrpc_get_type\": [\n        \"string xmlrpc_get_type(mixed value)\",\n        \"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"\n    ],\n    \"xmlrpc_is_fault\": [\n        \"bool xmlrpc_is_fault(array)\",\n        \"Determines if an array value represents an XMLRPC fault.\"\n    ],\n    \"xmlrpc_parse_method_descriptions\": [\n        \"array xmlrpc_parse_method_descriptions(string xml)\",\n        \"Decodes XML into a list of method descriptions\"\n    ],\n    \"xmlrpc_server_add_introspection_data\": [\n        \"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\n        \"Adds introspection documentation\"\n    ],\n    \"xmlrpc_server_call_method\": [\n        \"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\n        \"Parses XML requests and call methods\"\n    ],\n    \"xmlrpc_server_create\": [\n        \"resource xmlrpc_server_create(void)\",\n        \"Creates an xmlrpc server\"\n    ],\n    \"xmlrpc_server_destroy\": [\n        \"int xmlrpc_server_destroy(resource server)\",\n        \"Destroys server resources\"\n    ],\n    \"xmlrpc_server_register_introspection_callback\": [\n        \"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\n        \"Register a PHP function to generate documentation\"\n    ],\n    \"xmlrpc_server_register_method\": [\n        \"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\n        \"Register a PHP function to handle method matching method_name\"\n    ],\n    \"xmlrpc_set_type\": [\n        \"bool xmlrpc_set_type(string value, string type)\",\n        \"Sets xmlrpc type, base64 or datetime, for a PHP string value\"\n    ],\n    \"xmlwriter_end_attribute\": [\n        \"bool xmlwriter_end_attribute(resource xmlwriter)\",\n        \"End attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_cdata\": [\n        \"bool xmlwriter_end_cdata(resource xmlwriter)\",\n        \"End current CDATA - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_comment\": [\n        \"bool xmlwriter_end_comment(resource xmlwriter)\",\n        \"Create end comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_document\": [\n        \"bool xmlwriter_end_document(resource xmlwriter)\",\n        \"End current document - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd\": [\n        \"bool xmlwriter_end_dtd(resource xmlwriter)\",\n        \"End current DTD - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_attlist\": [\n        \"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\n        \"End current DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_element\": [\n        \"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\n        \"End current DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_entity\": [\n        \"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\n        \"End current DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_element\": [\n        \"bool xmlwriter_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_pi\": [\n        \"bool xmlwriter_end_pi(resource xmlwriter)\",\n        \"End current PI - returns FALSE on error\"\n    ],\n    \"xmlwriter_flush\": [\n        \"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\n        \"Output current buffer\"\n    ],\n    \"xmlwriter_full_end_element\": [\n        \"bool xmlwriter_full_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_open_memory\": [\n        \"resource xmlwriter_open_memory()\",\n        \"Create new xmlwriter using memory for string output\"\n    ],\n    \"xmlwriter_open_uri\": [\n        \"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\n        \"Create new xmlwriter using source uri for output\"\n    ],\n    \"xmlwriter_output_memory\": [\n        \"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\n        \"Output current buffer as string\"\n    ],\n    \"xmlwriter_set_indent\": [\n        \"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\n        \"Toggle indentation on/off - returns FALSE on error\"\n    ],\n    \"xmlwriter_set_indent_string\": [\n        \"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\n        \"Set string used for indenting - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute\": [\n        \"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\n        \"Create start attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute_ns\": [\n        \"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_cdata\": [\n        \"bool xmlwriter_start_cdata(resource xmlwriter)\",\n        \"Create start CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_comment\": [\n        \"bool xmlwriter_start_comment(resource xmlwriter)\",\n        \"Create start comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_document\": [\n        \"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\n        \"Create document tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd\": [\n        \"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\n        \"Create start DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_attlist\": [\n        \"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\n        \"Create start DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_element\": [\n        \"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\n        \"Create start DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_entity\": [\n        \"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\n        \"Create start DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element\": [\n        \"bool xmlwriter_start_element(resource xmlwriter, string name)\",\n        \"Create start element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element_ns\": [\n        \"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_pi\": [\n        \"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\n        \"Create start PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_text\": [\n        \"bool xmlwriter_text(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute\": [\n        \"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\n        \"Write full attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute_ns\": [\n        \"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\n        \"Write full namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_cdata\": [\n        \"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\n        \"Write full CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_comment\": [\n        \"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\n        \"Write full comment tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd\": [\n        \"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\n        \"Write full DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_attlist\": [\n        \"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\n        \"Write full DTD AttList tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_element\": [\n        \"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\n        \"Write full DTD element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_entity\": [\n        \"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\n        \"Write full DTD Entity tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element\": [\n        \"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\n        \"Write full element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element_ns\": [\n        \"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\n        \"Write full namesapced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_pi\": [\n        \"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\n        \"Write full PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_raw\": [\n        \"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xsl_xsltprocessor_get_parameter\": [\n        \"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_has_exslt_support\": [\n        \"bool xsl_xsltprocessor_has_exslt_support();\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_import_stylesheet\": [\n        \"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_register_php_functions\": [\n        \"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_remove_parameter\": [\n        \"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_parameter\": [\n        \"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_profiling\": [\n        \"bool xsl_xsltprocessor_set_profiling(string filename) */\",\n        \"PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s!\\\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling\"\n    ],\n    \"xsl_xsltprocessor_transform_to_doc\": [\n        \"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_transform_to_uri\": [\n        \"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_xml\": [\n        \"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\n        \"\"\n    ],\n    \"zend_logo_guid\": [\n        \"string zend_logo_guid(void)\",\n        \"Return the special ID used to request the Zend logo in phpinfo screens\"\n    ],\n    \"zend_version\": [\n        \"string zend_version(void)\",\n        \"Get the version of the Zend Engine\"\n    ],\n    \"zip_close\": [\n        \"void zip_close(resource zip)\",\n        \"Close a Zip archive\"\n    ],\n    \"zip_entry_close\": [\n        \"void zip_entry_close(resource zip_ent)\",\n        \"Close a zip entry\"\n    ],\n    \"zip_entry_compressedsize\": [\n        \"int zip_entry_compressedsize(resource zip_entry)\",\n        \"Return the compressed size of a ZZip entry\"\n    ],\n    \"zip_entry_compressionmethod\": [\n        \"string zip_entry_compressionmethod(resource zip_entry)\",\n        \"Return a string containing the compression method used on a particular entry\"\n    ],\n    \"zip_entry_filesize\": [\n        \"int zip_entry_filesize(resource zip_entry)\",\n        \"Return the actual filesize of a ZZip entry\"\n    ],\n    \"zip_entry_name\": [\n        \"string zip_entry_name(resource zip_entry)\",\n        \"Return the name given a ZZip entry\"\n    ],\n    \"zip_entry_open\": [\n        \"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\n        \"Open a Zip File, pointed by the resource entry\"\n    ],\n    \"zip_entry_read\": [\n        \"mixed zip_entry_read(resource zip_entry [, int len])\",\n        \"Read from an open directory entry\"\n    ],\n    \"zip_open\": [\n        \"resource zip_open(string filename)\",\n        \"Create new zip using source uri for output\"\n    ],\n    \"zip_read\": [\n        \"resource zip_read(resource zip)\",\n        \"Returns the next file in the archive\"\n    ],\n    \"zlib_get_coding_type\": [\n        \"string zlib_get_coding_type(void)\",\n        \"Returns the coding type used for output compression\"\n    ]\n};\n\nvar variableMap = {\n    \"$_COOKIE\": {\n        type: \"array\"\n    },\n    \"$_ENV\": {\n        type: \"array\"\n    },\n    \"$_FILES\": {\n        type: \"array\"\n    },\n    \"$_GET\": {\n        type: \"array\"\n    },\n    \"$_POST\": {\n        type: \"array\"\n    },\n    \"$_REQUEST\": {\n        type: \"array\"\n    },\n    \"$_SERVER\": {\n        type: \"array\",\n        value: {\n            \"DOCUMENT_ROOT\":  1,\n            \"GATEWAY_INTERFACE\":  1,\n            \"HTTP_ACCEPT\":  1,\n            \"HTTP_ACCEPT_CHARSET\":  1,\n            \"HTTP_ACCEPT_ENCODING\":  1 ,\n            \"HTTP_ACCEPT_LANGUAGE\":  1,\n            \"HTTP_CONNECTION\":  1,\n            \"HTTP_HOST\":  1,\n            \"HTTP_REFERER\":  1,\n            \"HTTP_USER_AGENT\":  1,\n            \"PATH_TRANSLATED\":  1,\n            \"PHP_SELF\":  1,\n            \"QUERY_STRING\":  1,\n            \"REMOTE_ADDR\":  1,\n            \"REMOTE_PORT\":  1,\n            \"REQUEST_METHOD\":  1,\n            \"REQUEST_URI\":  1,\n            \"SCRIPT_FILENAME\":  1,\n            \"SCRIPT_NAME\":  1,\n            \"SERVER_ADMIN\":  1,\n            \"SERVER_NAME\":  1,\n            \"SERVER_PORT\":  1,\n            \"SERVER_PROTOCOL\":  1,\n            \"SERVER_SIGNATURE\":  1,\n            \"SERVER_SOFTWARE\":  1\n        }\n    },\n    \"$_SESSION\": {\n        type: \"array\"\n    },\n    \"$GLOBALS\": {\n        type: \"array\"\n    }\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type) > -1;\n}\n\nvar PhpCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        \n        if (token.type==='support.php_tag' && token.value==='<?')\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (token.type==='identifier') {\n            if (token.index > 0) {\n                var prevToken = session.getTokenAt(pos.row, token.start);\n                if (prevToken.type==='support.php_tag') {\n                    return this.getTagCompletions(state, session, pos, prefix);\n                }\n            }\n            return this.getFunctionCompletions(state, session, pos, prefix);\n        }\n        if (is(token, \"variable\"))\n            return this.getVariableCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (token.type==='string' && /(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(line))\n            return this.getArrayKeyCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n    \n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return [{\n            caption: 'php',\n            value: 'php',\n            meta: \"php tag\",\n            score: 1000000\n        }, {\n            caption: '=',\n            value: '=',\n            meta: \"php tag\",\n            score: 1000000\n        }];\n    };\n\n    this.getFunctionCompletions = function(state, session, pos, prefix) {\n        var functions = Object.keys(functionMap);\n        return functions.map(function(func){\n            return {\n                caption: func,\n                snippet: func + '($0)',\n                meta: \"php function\",\n                score: 1000000,\n                docHTML: functionMap[func][1]\n            };\n        });\n    };\n\n    this.getVariableCompletions = function(state, session, pos, prefix) {\n        var variables = Object.keys(variableMap);\n        return variables.map(function(variable){\n            return {\n                caption: variable,\n                value: variable,\n                meta: \"php variable\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getArrayKeyCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var variable = line.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];\n\n        if (!variableMap[variable]) {\n            return [];\n        }\n\n        var keys = [];\n        if (variableMap[variable].type==='array' && variableMap[variable].value)\n            keys = Object.keys(variableMap[variable].value);\n\n        return keys.map(function(key) {\n            return {\n                caption: key,\n                value: key,\n                meta: \"php array key\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(PhpCompletions.prototype);\n\nexports.PhpCompletions = PhpCompletions;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\nvar PhpLangHighlightRules = require(\"./php_highlight_rules\").PhpLangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar PhpCompletions = require(\"./php_completions\").PhpCompletions;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar unicode = require(\"../unicode\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\n\nvar PhpMode = function(opts) {\n    this.HighlightRules = PhpLangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.$completer = new PhpCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(PhpMode, TextMode);\n\n(function() {\n\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"_]|\\\\s])+\", \"g\");\n\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState != \"doc-start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/php-inline\";\n}).call(PhpMode.prototype);\n\nvar Mode = function(opts) {\n    if (opts && opts.inline) {\n        var mode = new PhpMode();\n        mode.createWorker = this.createWorker;\n        mode.inlinePhp = true;\n        return mode;\n    }\n    HtmlMode.call(this);\n    this.HighlightRules = PhpHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"php-\": PhpMode\n    });\n    this.foldingRules.subModes[\"php-\"] = new CStyleFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/php_worker\", \"PhpWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.inlinePhp)\n            worker.call(\"setOptions\", [{inline: true}]);\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/php\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/php_laravel_blade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_laravel_blade_highlight_rules\",\"ace/mode/php\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var PHPLaravelBladeHighlightRules = require(\"./php_laravel_blade_highlight_rules\").PHPLaravelBladeHighlightRules;\n    var PHPMode = require(\"./php\").Mode;\n    var JavaScriptMode = require(\"./javascript\").Mode;\n    var CssMode = require(\"./css\").Mode;\n    var HtmlMode = require(\"./html\").Mode;\n\n    var Mode = function() {\n        PHPMode.call(this);\n\n        this.HighlightRules = PHPLaravelBladeHighlightRules;\n        this.createModeDelegates({\n            \"js-\": JavaScriptMode,\n            \"css-\": CssMode,\n            \"html-\": HtmlMode\n        });\n    };\n    oop.inherits(Mode, PHPMode);\n\n    (function() {\n\n        this.$id = \"ace/mode/php_laravel_blade\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-pig.js",
    "content": "ace.define(\"ace/mode/pig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PigHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            token: \"comment.block.pig\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"comment.block.pig\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.pig\"\n            }]\n        }, {\n            token: \"comment.line.double-dash.asciidoc\",\n            regex: /--.*$/\n        }, {\n            token: \"keyword.control.pig\",\n            regex: /\\b(?:ASSERT|LOAD|STORE|DUMP|FILTER|DISTINCT|FOREACH|GENERATE|STREAM|JOIN|COGROUP|GROUP|CROSS|ORDER|LIMIT|UNION|SPLIT|DESCRIBE|EXPLAIN|ILLUSTRATE|AS|BY|INTO|USING|LIMIT|PARALLEL|OUTER|INNER|DEFAULT|LEFT|SAMPLE|RANK|CUBE|ALL|KILL|QUIT|MAPREDUCE|ASC|DESC|THROUGH|SHIP|CACHE|DECLARE|CASE|WHEN|THEN|END|IN|PARTITION|FULL|IMPORT|IF|ONSCHEMA|INPUT|OUTPUT)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"storage.datatypes.pig\",\n            regex: /\\b(?:int|long|float|double|chararray|bytearray|boolean|datetime|biginteger|bigdecimal|tuple|bag|map)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"support.function.storage.pig\",\n            regex: /\\b(?:PigStorage|BinStorage|BinaryStorage|PigDump|HBaseStorage|JsonLoader|JsonStorage|AvroStorage|TextLoader|PigStreaming|TrevniStorage|AccumuloStorage)\\b/\n        }, {\n            token: \"support.function.udf.pig\",\n            regex: /\\b(?:DIFF|TOBAG|TOMAP|TOP|TOTUPLE|RANDOM|FLATTEN|flatten|CUBE|ROLLUP|IsEmpty|ARITY|PluckTuple|SUBTRACT|BagToString)\\b/\n        }, {\n            token: \"support.function.udf.math.pig\",\n            regex: /\\b(?:ABS|ACOS|ASIN|ATAN|CBRT|CEIL|COS|COSH|EXP|FLOOR|LOG|LOG10|ROUND|ROUND_TO|SIN|SINH|SQRT|TAN|TANH|AVG|COUNT|COUNT_STAR|MAX|MIN|SUM|COR|COV)\\b/\n        }, {\n            token: \"support.function.udf.string.pig\",\n            regex: /\\b(?:CONCAT|INDEXOF|LAST_INDEX_OF|LCFIRST|LOWER|REGEX_EXTRACT|REGEX_EXTRACT_ALL|REPLACE|SIZE|STRSPLIT|SUBSTRING|TOKENIZE|TRIM|UCFIRST|UPPER|LTRIM|RTRIM|ENDSWITH|STARTSWITH|TRIM)\\b/\n        }, {\n            token: \"support.function.udf.datetime.pig\",\n            regex: /\\b(?:AddDuration|CurrentTime|DaysBetween|GetDay|GetHour|GetMilliSecond|GetMinute|GetMonth|GetSecond|GetWeek|GetWeekYear|GetYear|HoursBetween|MilliSecondsBetween|MinutesBetween|MonthsBetween|SecondsBetween|SubtractDuration|ToDate|WeeksBetween|YearsBetween|ToMilliSeconds|ToString|ToUnixTime)\\b/\n        }, {\n            token: \"support.function.command.pig\",\n            regex: /\\b(?:cat|cd|copyFromLocal|copyToLocal|cp|ls|mkdir|mv|pwd|rm)\\b/\n        }, {\n            token: \"variable.pig\",\n            regex: /\\$[a_zA-Z0-9_]+/\n        }, {\n            token: \"constant.language.pig\",\n            regex: /\\b(?:NULL|true|false|stdin|stdout|stderr)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.numeric.pig\",\n            regex: /\\b\\d+(?:\\.\\d+)?\\b/\n        }, {\n            token: \"keyword.operator.comparison.pig\",\n            regex: /!=|==|<|>|<=|>=|\\b(?:MATCHES|IS|OR|AND|NOT)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.operator.arithmetic.pig\",\n            regex: /\\+|\\-|\\*|\\/|\\%|\\?|:|::|\\.\\.|#/\n        }, {\n            token: \"string.quoted.double.pig\",\n            regex: /\"/,\n            push: [{\n                token: \"string.quoted.double.pig\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.pig\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.pig\"\n            }]\n        }, {\n            token: \"string.quoted.single.pig\",\n            regex: /'/,\n            push: [{\n                token: \"string.quoted.single.pig\",\n                regex: /'/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.pig\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.single.pig\"\n            }]\n        }, {\n            todo: {\n                token: [\n                    \"text\",\n                    \"keyword.parameter.pig\",\n                    \"text\",\n                    \"storage.type.parameter.pig\"\n                ],\n                regex: /^(\\s*)(set)(\\s+)(\\S+)/,\n                caseInsensitive: true,\n                push: [{\n                    token: \"text\",\n                    regex: /$/,\n                    next: \"pop\"\n                }, {\n                    include: \"$self\"\n                }]\n            }\n        }, {\n            token: [\n                \"text\",\n                \"keyword.alias.pig\",\n                \"text\",\n                \"storage.type.alias.pig\"\n            ],\n            regex: /(\\s*)(DEFINE|DECLARE|REGISTER)(\\s+)(\\S+)/,\n            caseInsensitive: true,\n            push: [{\n                token: \"text\",\n                regex: /;?$/,\n                next: \"pop\"\n            }]\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nPigHighlightRules.metaData = {\n    fileTypes: [\"pig\"],\n    name: \"Pig\",\n    scopeName: \"source.pig\"\n};\n\n\noop.inherits(PigHighlightRules, TextHighlightRules);\n\nexports.PigHighlightRules = PigHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/pig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pig_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PigHighlightRules = require(\"./pig_highlight_rules\").PigHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PigHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/pig\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-plain_text.js",
    "content": "ace.define(\"ace/mode/plain_text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar Behaviour = require(\"./behaviour\").Behaviour;\n\nvar Mode = function() {\n    this.HighlightRules = TextHighlightRules;\n    this.$behaviour = new Behaviour();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        return '';\n    };\n    this.$id = \"ace/mode/plain_text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-powershell.js",
    "content": "ace.define(\"ace/mode/powershell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PowershellHighlightRules = function() {\n    var keywords = (\n        \"begin|break|catch|continue|data|do|dynamicparam|else|elseif|end|exit|filter|\" +\n        \"finally|for|foreach|from|function|if|in|inlinescript|hidden|parallel|param|\" +\n        \"process|return|sequence|switch|throw|trap|try|until|while|workflow\"\n    );\n    var builtinFunctions = (\n        \"Get-AppBackgroundTask|Start-AppBackgroundTask|Unregister-AppBackgroundTask|Disable-AppBackgroundTaskDiagnosticLog|Enable-AppBackgroundTaskDiagnosticLog|Set-AppBackgroundTaskResourcePolicy|\" +\n        \"Get-AppLockerFileInformation|Get-AppLockerPolicy|New-AppLockerPolicy|Set-AppLockerPolicy|Test-AppLockerPolicy|\" +\n        \"Get-AppxLastError|Get-AppxLog|Add-AppxPackage|Add-AppxVolume|Dismount-AppxVolume|Get-AppxDefaultVolume|Get-AppxPackage|Get-AppxPackageManifest|Get-AppxVolume|Mount-AppxVolume|Move-AppxPackage|Remove-AppxPackage|Remove-AppxVolume|Set-AppxDefaultVolume|\" +\n        \"Clear-AssignedAccess|Get-AssignedAccess|Set-AssignedAccess|\" +\n        \"Add-BitLockerKeyProtector|Backup-BitLockerKeyProtector|Clear-BitLockerAutoUnlock|Disable-BitLocker|Disable-BitLockerAutoUnlock|Enable-BitLocker|Enable-BitLockerAutoUnlock|Get-BitLockerVolume|Lock-BitLocker|Remove-BitLockerKeyProtector|Resume-BitLocker|Suspend-BitLocker|Unlock-BitLocker|\" +\n        \"Add-BitsFile|Complete-BitsTransfer|Get-BitsTransfer|Remove-BitsTransfer|Resume-BitsTransfer|Set-BitsTransfer|Start-BitsTransfer|Suspend-BitsTransfer|\" +\n        \"Add-BCDataCacheExtension|Clear-BCCache|Disable-BC|Disable-BCDowngrading|Disable-BCServeOnBattery|Enable-BCDistributed|Enable-BCDowngrading|Enable-BCHostedClient|Enable-BCHostedServer|Enable-BCLocal|Enable-BCServeOnBattery|Export-BCCachePackage|Export-BCSecretKey|Get-BCClientConfiguration|Get-BCContentServerConfiguration|Get-BCDataCache|Get-BCDataCacheExtension|Get-BCHashCache|Get-BCHostedCacheServerConfiguration|Get-BCNetworkConfiguration|Get-BCStatus|Import-BCCachePackage|Import-BCSecretKey|Publish-BCFileContent|Publish-BCWebContent|Remove-BCDataCacheExtension|Reset-BC|Set-BCAuthentication|Set-BCCache|Set-BCDataCacheEntryMaxAge|Set-BCMinSMBLatency|Set-BCSecretKey|\" +\n        \"Export-BinaryMiLog|Get-CimAssociatedInstance|Get-CimClass|Get-CimInstance|Get-CimSession|Import-BinaryMiLog|Invoke-CimMethod|New-CimInstance|New-CimSession|New-CimSessionOption|Register-CimIndicationEvent|Remove-CimInstance|Remove-CimSession|Set-CimInstance|\" +\n        \"ConvertFrom-CIPolicy|\" +\n        \"Add-SignerRule|Edit-CIPolicyRule|Get-CIPolicy|Get-CIPolicyInfo|Get-SystemDriver|Merge-CIPolicy|New-CIPolicy|New-CIPolicyRule|Remove-CIPolicyRule|Set-CIPolicyVersion|Set-HVCIOptions|Set-RuleOption|\" +\n        \"Add-MpPreference|Get-MpComputerStatus|Get-MpPreference|Get-MpThreat|Get-MpThreatCatalog|Get-MpThreatDetection|Remove-MpPreference|Remove-MpThreat|Set-MpPreference|Start-MpScan|Start-MpWDOScan|Update-MpSignature|\" +\n        \"Disable-DAManualEntryPointSelection|Enable-DAManualEntryPointSelection|Get-DAClientExperienceConfiguration|Get-DAEntryPointTableItem|New-DAEntryPointTableItem|Remove-DAEntryPointTableItem|Rename-DAEntryPointTableItem|Reset-DAClientExperienceConfiguration|Reset-DAEntryPointTableItem|Set-DAClientExperienceConfiguration|Set-DAEntryPointTableItem|\" +\n        \"Add-ProvisionedAppxPackage|Apply-WindowsUnattend|Get-ProvisionedAppxPackage|Remove-ProvisionedAppxPackage|Add-AppxProvisionedPackage|Add-WindowsCapability|Add-WindowsDriver|Add-WindowsImage|Add-WindowsPackage|Clear-WindowsCorruptMountPoint|Disable-WindowsOptionalFeature|Dismount-WindowsImage|Enable-WindowsOptionalFeature|Expand-WindowsCustomDataImage|Expand-WindowsImage|Export-WindowsDriver|Export-WindowsImage|Get-AppxProvisionedPackage|Get-WIMBootEntry|Get-WindowsCapability|Get-WindowsDriver|Get-WindowsEdition|Get-WindowsImage|Get-WindowsImageContent|Get-WindowsOptionalFeature|Get-WindowsPackage|Mount-WindowsImage|New-WindowsCustomImage|New-WindowsImage|Optimize-WindowsImage|Remove-AppxProvisionedPackage|Remove-WindowsCapability|Remove-WindowsDriver|Remove-WindowsImage|Remove-WindowsPackage|Repair-WindowsImage|Save-WindowsImage|Set-AppXProvisionedDataFile|Set-WindowsEdition|Set-WindowsProductKey|Split-WindowsImage|Update-WIMBootEntry|Use-WindowsUnattend|\" +\n        \"Add-DnsClientNrptRule|Clear-DnsClientCache|Get-DnsClient|Get-DnsClientCache|Get-DnsClientGlobalSetting|Get-DnsClientNrptGlobal|Get-DnsClientNrptPolicy|Get-DnsClientNrptRule|Get-DnsClientServerAddress|Register-DnsClient|Remove-DnsClientNrptRule|Set-DnsClient|Set-DnsClientGlobalSetting|Set-DnsClientNrptGlobal|Set-DnsClientNrptRule|Set-DnsClientServerAddress|Resolve-DnsName|\" +\n        \"Add-EtwTraceProvider|Get-AutologgerConfig|Get-EtwTraceProvider|Get-EtwTraceSession|New-AutologgerConfig|New-EtwTraceSession|Remove-AutologgerConfig|Remove-EtwTraceProvider|Remove-EtwTraceSession|Send-EtwTraceSession|Set-AutologgerConfig|Set-EtwTraceProvider|Set-EtwTraceSession|\" +\n        \"Get-WinAcceptLanguageFromLanguageListOptOut|Get-WinCultureFromLanguageListOptOut|Get-WinDefaultInputMethodOverride|Get-WinHomeLocation|Get-WinLanguageBarOption|Get-WinSystemLocale|Get-WinUILanguageOverride|Get-WinUserLanguageList|New-WinUserLanguageList|Set-Culture|Set-WinAcceptLanguageFromLanguageListOptOut|Set-WinCultureFromLanguageListOptOut|Set-WinDefaultInputMethodOverride|Set-WinHomeLocation|Set-WinLanguageBarOption|Set-WinSystemLocale|Set-WinUILanguageOverride|Set-WinUserLanguageList|\" +\n        \"Connect-IscsiTarget|Disconnect-IscsiTarget|Get-IscsiConnection|Get-IscsiSession|Get-IscsiTarget|Get-IscsiTargetPortal|New-IscsiTargetPortal|Register-IscsiSession|Remove-IscsiTargetPortal|Set-IscsiChapSecret|Unregister-IscsiSession|Update-IscsiTarget|Update-IscsiTargetPortal|\" +\n        \"Get-IseSnippet|Import-IseSnippet|New-IseSnippet|\" +\n        \"Add-KdsRootKey|Clear-KdsCache|Get-KdsConfiguration|Get-KdsRootKey|Set-KdsConfiguration|Test-KdsRootKey|\" +\n        \"Compress-Archive|Expand-Archive|\" +\n        \"Export-Counter|Get-Counter|Get-WinEvent|Import-Counter|New-WinEvent|\" +\n        \"Start-Transcript|Stop-Transcript|\" +\n        \"Add-Computer|Add-Content|Checkpoint-Computer|Clear-Content|Clear-EventLog|Clear-Item|Clear-ItemProperty|Clear-RecycleBin|Complete-Transaction|Convert-Path|Copy-Item|Copy-ItemProperty|Debug-Process|Disable-ComputerRestore|Enable-ComputerRestore|Get-ChildItem|Get-Clipboard|Get-ComputerRestorePoint|Get-Content|Get-ControlPanelItem|Get-EventLog|Get-HotFix|Get-Item|Get-ItemProperty|Get-ItemPropertyValue|Get-Location|Get-Process|Get-PSDrive|Get-PSProvider|Get-Service|Get-Transaction|Get-WmiObject|Invoke-Item|Invoke-WmiMethod|Join-Path|Limit-EventLog|Move-Item|Move-ItemProperty|New-EventLog|New-Item|New-ItemProperty|New-PSDrive|New-Service|New-WebServiceProxy|Pop-Location|Push-Location|Register-WmiEvent|Remove-Computer|Remove-EventLog|Remove-Item|Remove-ItemProperty|Remove-PSDrive|Remove-WmiObject|Rename-Computer|Rename-Item|Rename-ItemProperty|Reset-ComputerMachinePassword|Resolve-Path|Restart-Computer|Restart-Service|Restore-Computer|Resume-Service|Set-Clipboard|Set-Content|Set-Item|Set-ItemProperty|Set-Location|Set-Service|Set-WmiInstance|Show-ControlPanelItem|Show-EventLog|Split-Path|Start-Process|Start-Service|Start-Transaction|Stop-Computer|Stop-Process|Stop-Service|Suspend-Service|Test-ComputerSecureChannel|Test-Connection|Test-Path|Undo-Transaction|Use-Transaction|Wait-Process|Write-EventLog|\" +\n        \"Export-ODataEndpointProxy|\" +\n        \"ConvertFrom-SecureString|ConvertTo-SecureString|Get-Acl|Get-AuthenticodeSignature|Get-CmsMessage|Get-Credential|Get-ExecutionPolicy|Get-PfxCertificate|Protect-CmsMessage|Set-Acl|Set-AuthenticodeSignature|Set-ExecutionPolicy|Unprotect-CmsMessage|\" +\n        \"ConvertFrom-SddlString|Format-Hex|Get-FileHash|Import-PowerShellDataFile|New-Guid|New-TemporaryFile|Add-Member|Add-Type|Clear-Variable|Compare-Object|ConvertFrom-Csv|ConvertFrom-Json|ConvertFrom-String|ConvertFrom-StringData|Convert-String|ConvertTo-Csv|ConvertTo-Html|ConvertTo-Json|ConvertTo-Xml|Debug-Runspace|Disable-PSBreakpoint|Disable-RunspaceDebug|Enable-PSBreakpoint|Enable-RunspaceDebug|Export-Alias|Export-Clixml|Export-Csv|Export-FormatData|Export-PSSession|Format-Custom|Format-List|Format-Table|Format-Wide|Get-Alias|Get-Culture|Get-Date|Get-Event|Get-EventSubscriber|Get-FormatData|Get-Host|Get-Member|Get-PSBreakpoint|Get-PSCallStack|Get-Random|Get-Runspace|Get-RunspaceDebug|Get-TraceSource|Get-TypeData|Get-UICulture|Get-Unique|Get-Variable|Group-Object|Import-Alias|Import-Clixml|Import-Csv|Import-LocalizedData|Import-PSSession|Invoke-Expression|Invoke-RestMethod|Invoke-WebRequest|Measure-Command|Measure-Object|New-Alias|New-Event|New-Object|New-TimeSpan|New-Variable|Out-File|Out-GridView|Out-Printer|Out-String|Read-Host|Register-EngineEvent|Register-ObjectEvent|Remove-Event|Remove-PSBreakpoint|Remove-TypeData|Remove-Variable|Select-Object|Select-String|Select-Xml|Send-MailMessage|Set-Alias|Set-Date|Set-PSBreakpoint|Set-TraceSource|Set-Variable|Show-Command|Sort-Object|Start-Sleep|Tee-Object|Trace-Command|Unblock-File|Unregister-Event|Update-FormatData|Update-List|Update-TypeData|Wait-Debugger|Wait-Event|Write-Debug|Write-Error|Write-Host|Write-Information|Write-Output|Write-Progress|Write-Verbose|Write-Warning|\" +\n        \"Connect-WSMan|Disable-WSManCredSSP|Disconnect-WSMan|Enable-WSManCredSSP|Get-WSManCredSSP|Get-WSManInstance|Invoke-WSManAction|New-WSManInstance|New-WSManSessionOption|Remove-WSManInstance|Set-WSManInstance|Set-WSManQuickConfig|Test-WSMan|\" +\n        \"Debug-MMAppPrelaunch|Disable-MMAgent|Enable-MMAgent|Get-MMAgent|Set-MMAgent|\" +\n        \"Add-DtcClusterTMMapping|Get-Dtc|Get-DtcAdvancedHostSetting|Get-DtcAdvancedSetting|Get-DtcClusterDefault|Get-DtcClusterTMMapping|Get-DtcDefault|Get-DtcLog|Get-DtcNetworkSetting|Get-DtcTransaction|Get-DtcTransactionsStatistics|Get-DtcTransactionsTraceSession|Get-DtcTransactionsTraceSetting|Install-Dtc|Remove-DtcClusterTMMapping|Reset-DtcLog|Set-DtcAdvancedHostSetting|Set-DtcAdvancedSetting|Set-DtcClusterDefault|Set-DtcClusterTMMapping|Set-DtcDefault|Set-DtcLog|Set-DtcNetworkSetting|Set-DtcTransaction|Set-DtcTransactionsTraceSession|Set-DtcTransactionsTraceSetting|Start-Dtc|Start-DtcTransactionsTraceSession|Stop-Dtc|Stop-DtcTransactionsTraceSession|Test-Dtc|Uninstall-Dtc|Write-DtcTransactionsTraceSession|Complete-DtcDiagnosticTransaction|Join-DtcDiagnosticResourceManager|New-DtcDiagnosticTransaction|Receive-DtcDiagnosticTransaction|Send-DtcDiagnosticTransaction|Start-DtcDiagnosticResourceManager|Stop-DtcDiagnosticResourceManager|Undo-DtcDiagnosticTransaction|\" +\n        \"Disable-NetAdapter|Disable-NetAdapterBinding|Disable-NetAdapterChecksumOffload|Disable-NetAdapterEncapsulatedPacketTaskOffload|Disable-NetAdapterIPsecOffload|Disable-NetAdapterLso|Disable-NetAdapterPacketDirect|Disable-NetAdapterPowerManagement|Disable-NetAdapterQos|Disable-NetAdapterRdma|Disable-NetAdapterRsc|Disable-NetAdapterRss|Disable-NetAdapterSriov|Disable-NetAdapterVmq|Enable-NetAdapter|Enable-NetAdapterBinding|Enable-NetAdapterChecksumOffload|Enable-NetAdapterEncapsulatedPacketTaskOffload|Enable-NetAdapterIPsecOffload|Enable-NetAdapterLso|Enable-NetAdapterPacketDirect|Enable-NetAdapterPowerManagement|Enable-NetAdapterQos|Enable-NetAdapterRdma|Enable-NetAdapterRsc|Enable-NetAdapterRss|Enable-NetAdapterSriov|Enable-NetAdapterVmq|Get-NetAdapter|Get-NetAdapterAdvancedProperty|Get-NetAdapterBinding|Get-NetAdapterChecksumOffload|Get-NetAdapterEncapsulatedPacketTaskOffload|Get-NetAdapterHardwareInfo|Get-NetAdapterIPsecOffload|Get-NetAdapterLso|Get-NetAdapterPacketDirect|Get-NetAdapterPowerManagement|Get-NetAdapterQos|Get-NetAdapterRdma|Get-NetAdapterRsc|Get-NetAdapterRss|Get-NetAdapterSriov|Get-NetAdapterSriovVf|Get-NetAdapterStatistics|Get-NetAdapterVmq|Get-NetAdapterVmqQueue|Get-NetAdapterVPort|New-NetAdapterAdvancedProperty|Remove-NetAdapterAdvancedProperty|Rename-NetAdapter|Reset-NetAdapterAdvancedProperty|Restart-NetAdapter|Set-NetAdapter|Set-NetAdapterAdvancedProperty|Set-NetAdapterBinding|Set-NetAdapterChecksumOffload|Set-NetAdapterEncapsulatedPacketTaskOffload|Set-NetAdapterIPsecOffload|Set-NetAdapterLso|Set-NetAdapterPacketDirect|Set-NetAdapterPowerManagement|Set-NetAdapterQos|Set-NetAdapterRdma|Set-NetAdapterRsc|Set-NetAdapterRss|Set-NetAdapterSriov|Set-NetAdapterVmq|\" +\n        \"Get-NetConnectionProfile|Set-NetConnectionProfile|\" +\n        \"Add-NetEventNetworkAdapter|Add-NetEventPacketCaptureProvider|Add-NetEventProvider|Add-NetEventVmNetworkAdapter|Add-NetEventVmSwitch|Add-NetEventWFPCaptureProvider|Get-NetEventNetworkAdapter|Get-NetEventPacketCaptureProvider|Get-NetEventProvider|Get-NetEventSession|Get-NetEventVmNetworkAdapter|Get-NetEventVmSwitch|Get-NetEventWFPCaptureProvider|New-NetEventSession|Remove-NetEventNetworkAdapter|Remove-NetEventPacketCaptureProvider|Remove-NetEventProvider|Remove-NetEventSession|Remove-NetEventVmNetworkAdapter|Remove-NetEventVmSwitch|Remove-NetEventWFPCaptureProvider|Set-NetEventPacketCaptureProvider|Set-NetEventProvider|Set-NetEventSession|Set-NetEventWFPCaptureProvider|Start-NetEventSession|Stop-NetEventSession|\" +\n        \"Add-NetLbfoTeamMember|Add-NetLbfoTeamNic|Get-NetLbfoTeam|Get-NetLbfoTeamMember|Get-NetLbfoTeamNic|New-NetLbfoTeam|Remove-NetLbfoTeam|Remove-NetLbfoTeamMember|Remove-NetLbfoTeamNic|Rename-NetLbfoTeam|Set-NetLbfoTeam|Set-NetLbfoTeamMember|Set-NetLbfoTeamNic|\" +\n        \"Add-NetNatExternalAddress|Add-NetNatStaticMapping|Get-NetNat|Get-NetNatExternalAddress|Get-NetNatGlobal|Get-NetNatSession|Get-NetNatStaticMapping|New-NetNat|Remove-NetNat|Remove-NetNatExternalAddress|Remove-NetNatStaticMapping|Set-NetNat|Set-NetNatGlobal|\" +\n        \"Get-NetQosPolicy|New-NetQosPolicy|Remove-NetQosPolicy|Set-NetQosPolicy|\" +\n        \"Copy-NetFirewallRule|Copy-NetIPsecMainModeCryptoSet|Copy-NetIPsecMainModeRule|Copy-NetIPsecPhase1AuthSet|Copy-NetIPsecPhase2AuthSet|Copy-NetIPsecQuickModeCryptoSet|Copy-NetIPsecRule|Disable-NetFirewallRule|Disable-NetIPsecMainModeRule|Disable-NetIPsecRule|Enable-NetFirewallRule|Enable-NetIPsecMainModeRule|Enable-NetIPsecRule|Find-NetIPsecRule|Get-NetFirewallAddressFilter|Get-NetFirewallApplicationFilter|Get-NetFirewallInterfaceFilter|Get-NetFirewallInterfaceTypeFilter|Get-NetFirewallPortFilter|Get-NetFirewallProfile|Get-NetFirewallRule|Get-NetFirewallSecurityFilter|Get-NetFirewallServiceFilter|Get-NetFirewallSetting|Get-NetIPsecDospSetting|Get-NetIPsecMainModeCryptoSet|Get-NetIPsecMainModeRule|Get-NetIPsecMainModeSA|Get-NetIPsecPhase1AuthSet|Get-NetIPsecPhase2AuthSet|Get-NetIPsecQuickModeCryptoSet|Get-NetIPsecQuickModeSA|Get-NetIPsecRule|New-NetFirewallRule|New-NetIPsecDospSetting|New-NetIPsecMainModeCryptoSet|New-NetIPsecMainModeRule|New-NetIPsecPhase1AuthSet|New-NetIPsecPhase2AuthSet|New-NetIPsecQuickModeCryptoSet|New-NetIPsecRule|Open-NetGPO|Remove-NetFirewallRule|Remove-NetIPsecDospSetting|Remove-NetIPsecMainModeCryptoSet|Remove-NetIPsecMainModeRule|Remove-NetIPsecMainModeSA|Remove-NetIPsecPhase1AuthSet|Remove-NetIPsecPhase2AuthSet|Remove-NetIPsecQuickModeCryptoSet|Remove-NetIPsecQuickModeSA|Remove-NetIPsecRule|Rename-NetFirewallRule|Rename-NetIPsecMainModeCryptoSet|Rename-NetIPsecMainModeRule|Rename-NetIPsecPhase1AuthSet|Rename-NetIPsecPhase2AuthSet|Rename-NetIPsecQuickModeCryptoSet|Rename-NetIPsecRule|Save-NetGPO|Set-NetFirewallAddressFilter|Set-NetFirewallApplicationFilter|Set-NetFirewallInterfaceFilter|Set-NetFirewallInterfaceTypeFilter|Set-NetFirewallPortFilter|Set-NetFirewallProfile|Set-NetFirewallRule|Set-NetFirewallSecurityFilter|Set-NetFirewallServiceFilter|Set-NetFirewallSetting|Set-NetIPsecDospSetting|Set-NetIPsecMainModeCryptoSet|Set-NetIPsecMainModeRule|Set-NetIPsecPhase1AuthSet|Set-NetIPsecPhase2AuthSet|Set-NetIPsecQuickModeCryptoSet|Set-NetIPsecRule|Show-NetFirewallRule|Show-NetIPsecRule|Sync-NetIPsecRule|Update-NetIPsecRule|Get-DAPolicyChange|New-NetIPsecAuthProposal|New-NetIPsecMainModeCryptoProposal|New-NetIPsecQuickModeCryptoProposal|\" +\n        \"Add-NetSwitchTeamMember|Get-NetSwitchTeam|Get-NetSwitchTeamMember|New-NetSwitchTeam|Remove-NetSwitchTeam|Remove-NetSwitchTeamMember|Rename-NetSwitchTeam|\" +\n        \"Find-NetRoute|Get-NetCompartment|Get-NetIPAddress|Get-NetIPConfiguration|Get-NetIPInterface|Get-NetIPv4Protocol|Get-NetIPv6Protocol|Get-NetNeighbor|Get-NetOffloadGlobalSetting|Get-NetPrefixPolicy|Get-NetRoute|Get-NetTCPConnection|Get-NetTCPSetting|Get-NetTransportFilter|Get-NetUDPEndpoint|Get-NetUDPSetting|New-NetIPAddress|New-NetNeighbor|New-NetRoute|New-NetTransportFilter|Remove-NetIPAddress|Remove-NetNeighbor|Remove-NetRoute|Remove-NetTransportFilter|Set-NetIPAddress|Set-NetIPInterface|Set-NetIPv4Protocol|Set-NetIPv6Protocol|Set-NetNeighbor|Set-NetOffloadGlobalSetting|Set-NetRoute|Set-NetTCPSetting|Set-NetUDPSetting|Test-NetConnection|\" +\n        \"Get-DAConnectionStatus|Get-NCSIPolicyConfiguration|Reset-NCSIPolicyConfiguration|Set-NCSIPolicyConfiguration|\" +\n        \"Disable-NetworkSwitchEthernetPort|Disable-NetworkSwitchFeature|Disable-NetworkSwitchVlan|Enable-NetworkSwitchEthernetPort|Enable-NetworkSwitchFeature|Enable-NetworkSwitchVlan|Get-NetworkSwitchEthernetPort|Get-NetworkSwitchFeature|Get-NetworkSwitchGlobalData|Get-NetworkSwitchVlan|New-NetworkSwitchVlan|Remove-NetworkSwitchEthernetPortIPAddress|Remove-NetworkSwitchVlan|Restore-NetworkSwitchConfiguration|Save-NetworkSwitchConfiguration|Set-NetworkSwitchEthernetPortIPAddress|Set-NetworkSwitchPortMode|Set-NetworkSwitchPortProperty|Set-NetworkSwitchVlanProperty|\" +\n        \"Add-NetIPHttpsCertBinding|Disable-NetDnsTransitionConfiguration|Disable-NetIPHttpsProfile|Disable-NetNatTransitionConfiguration|Enable-NetDnsTransitionConfiguration|Enable-NetIPHttpsProfile|Enable-NetNatTransitionConfiguration|Get-Net6to4Configuration|Get-NetDnsTransitionConfiguration|Get-NetDnsTransitionMonitoring|Get-NetIPHttpsConfiguration|Get-NetIPHttpsState|Get-NetIsatapConfiguration|Get-NetNatTransitionConfiguration|Get-NetNatTransitionMonitoring|Get-NetTeredoConfiguration|Get-NetTeredoState|New-NetIPHttpsConfiguration|New-NetNatTransitionConfiguration|Remove-NetIPHttpsCertBinding|Remove-NetIPHttpsConfiguration|Remove-NetNatTransitionConfiguration|Rename-NetIPHttpsConfiguration|Reset-Net6to4Configuration|Reset-NetDnsTransitionConfiguration|Reset-NetIPHttpsConfiguration|Reset-NetIsatapConfiguration|Reset-NetTeredoConfiguration|Set-Net6to4Configuration|Set-NetDnsTransitionConfiguration|Set-NetIPHttpsConfiguration|Set-NetIsatapConfiguration|Set-NetNatTransitionConfiguration|Set-NetTeredoConfiguration|\" +\n        \"Find-Package|Find-PackageProvider|Get-Package|Get-PackageProvider|Get-PackageSource|Import-PackageProvider|Install-Package|Install-PackageProvider|Register-PackageSource|Save-Package|Set-PackageSource|Uninstall-Package|Unregister-PackageSource|\" +\n        \"Clear-PcsvDeviceLog|Get-PcsvDevice|Get-PcsvDeviceLog|Restart-PcsvDevice|Set-PcsvDeviceBootConfiguration|Set-PcsvDeviceNetworkConfiguration|Set-PcsvDeviceUserPassword|Start-PcsvDevice|Stop-PcsvDevice|\" +\n        \"AfterAll|AfterEach|Assert-MockCalled|Assert-VerifiableMocks|BeforeAll|BeforeEach|Context|Describe|Get-MockDynamicParameters|Get-TestDriveItem|In|InModuleScope|Invoke-Mock|Invoke-Pester|It|Mock|New-Fixture|Set-DynamicParameterVariables|Setup|Should|\" +\n        \"Add-CertificateEnrollmentPolicyServer|Export-Certificate|Export-PfxCertificate|Get-Certificate|Get-CertificateAutoEnrollmentPolicy|Get-CertificateEnrollmentPolicyServer|Get-CertificateNotificationTask|Get-PfxData|Import-Certificate|Import-PfxCertificate|New-CertificateNotificationTask|New-SelfSignedCertificate|Remove-CertificateEnrollmentPolicyServer|Remove-CertificateNotificationTask|Set-CertificateAutoEnrollmentPolicy|Switch-Certificate|Test-Certificate|\" +\n        \"Disable-PnpDevice|Enable-PnpDevice|Get-PnpDevice|Get-PnpDeviceProperty|\" +\n        \"Find-DscResource|Find-Module|Find-Script|Get-InstalledModule|Get-InstalledScript|Get-PSRepository|Install-Module|Install-Script|New-ScriptFileInfo|Publish-Module|Publish-Script|Register-PSRepository|Save-Module|Save-Script|Set-PSRepository|Test-ScriptFileInfo|Uninstall-Module|Uninstall-Script|Unregister-PSRepository|Update-Module|Update-ModuleManifest|Update-Script|Update-ScriptFileInfo|\" +\n        \"Add-Printer|Add-PrinterDriver|Add-PrinterPort|Get-PrintConfiguration|Get-Printer|Get-PrinterDriver|Get-PrinterPort|Get-PrinterProperty|Get-PrintJob|Read-PrinterNfcTag|Remove-Printer|Remove-PrinterDriver|Remove-PrinterPort|Remove-PrintJob|Rename-Printer|Restart-PrintJob|Resume-PrintJob|Set-PrintConfiguration|Set-Printer|Set-PrinterProperty|Suspend-PrintJob|Write-PrinterNfcTag|\" +\n        \"Configuration|Disable-DscDebug|Enable-DscDebug|Get-DscConfiguration|Get-DscConfigurationStatus|Get-DscLocalConfigurationManager|Get-DscResource|New-DscChecksum|Remove-DscConfigurationDocument|Restore-DscConfiguration|Stop-DscConfiguration|Invoke-DscResource|Publish-DscConfiguration|Set-DscLocalConfigurationManager|Start-DscConfiguration|Test-DscConfiguration|Update-DscConfiguration|\" +\n        \"Disable-PSTrace|Disable-PSWSManCombinedTrace|Disable-WSManTrace|Enable-PSTrace|Enable-PSWSManCombinedTrace|Enable-WSManTrace|Get-LogProperties|Set-LogProperties|Start-Trace|Stop-Trace|\" +\n        \"PSConsoleHostReadline|Get-PSReadlineKeyHandler|Get-PSReadlineOption|Remove-PSReadlineKeyHandler|Set-PSReadlineKeyHandler|Set-PSReadlineOption|\" +\n        \"Add-JobTrigger|Disable-JobTrigger|Disable-ScheduledJob|Enable-JobTrigger|Enable-ScheduledJob|Get-JobTrigger|Get-ScheduledJob|Get-ScheduledJobOption|New-JobTrigger|New-ScheduledJobOption|Register-ScheduledJob|Remove-JobTrigger|Set-JobTrigger|Set-ScheduledJob|Set-ScheduledJobOption|Unregister-ScheduledJob|\" +\n        \"New-PSWorkflowSession|New-PSWorkflowExecutionOption|\" +\n        \"Invoke-AsWorkflow|\" +\n        \"Disable-ScheduledTask|Enable-ScheduledTask|Export-ScheduledTask|Get-ClusteredScheduledTask|Get-ScheduledTask|Get-ScheduledTaskInfo|New-ScheduledTask|New-ScheduledTaskAction|New-ScheduledTaskPrincipal|New-ScheduledTaskSettingsSet|New-ScheduledTaskTrigger|Register-ClusteredScheduledTask|Register-ScheduledTask|Set-ClusteredScheduledTask|Set-ScheduledTask|Start-ScheduledTask|Stop-ScheduledTask|Unregister-ClusteredScheduledTask|Unregister-ScheduledTask|\" +\n        \"Confirm-SecureBootUEFI|Format-SecureBootUEFI|Get-SecureBootPolicy|Get-SecureBootUEFI|Set-SecureBootUEFI|\" +\n        \"Block-SmbShareAccess|Close-SmbOpenFile|Close-SmbSession|Disable-SmbDelegation|Enable-SmbDelegation|Get-SmbBandwidthLimit|Get-SmbClientConfiguration|Get-SmbClientNetworkInterface|Get-SmbConnection|Get-SmbDelegation|Get-SmbMapping|Get-SmbMultichannelConnection|Get-SmbMultichannelConstraint|Get-SmbOpenFile|Get-SmbServerConfiguration|Get-SmbServerNetworkInterface|Get-SmbSession|Get-SmbShare|Get-SmbShareAccess|Grant-SmbShareAccess|New-SmbMapping|New-SmbMultichannelConstraint|New-SmbShare|Remove-SmbBandwidthLimit|Remove-SmbMapping|Remove-SmbMultichannelConstraint|Remove-SmbShare|Revoke-SmbShareAccess|Set-SmbBandwidthLimit|Set-SmbClientConfiguration|Set-SmbPathAcl|Set-SmbServerConfiguration|Set-SmbShare|Unblock-SmbShareAccess|Update-SmbMultichannelConnection|\" +\n        \"Move-SmbClient|Get-SmbWitnessClient|Move-SmbWitnessClient|\" +\n        \"Get-StartApps|Export-StartLayout|Import-StartLayout|\" +\n        \"Disable-PhysicalDiskIndication|Disable-StorageDiagnosticLog|Enable-PhysicalDiskIndication|Enable-StorageDiagnosticLog|Flush-Volume|Get-DiskSNV|Get-PhysicalDiskSNV|Get-StorageEnclosureSNV|Initialize-Volume|Write-FileSystemCache|Add-InitiatorIdToMaskingSet|Add-PartitionAccessPath|Add-PhysicalDisk|Add-TargetPortToMaskingSet|Add-VirtualDiskToMaskingSet|Block-FileShareAccess|Clear-Disk|Clear-FileStorageTier|Clear-StorageDiagnosticInfo|Connect-VirtualDisk|Debug-FileShare|Debug-StorageSubSystem|Debug-Volume|Disable-PhysicalDiskIdentification|Disable-StorageEnclosureIdentification|Disable-StorageHighAvailability|Disconnect-VirtualDisk|Dismount-DiskImage|Enable-PhysicalDiskIdentification|Enable-StorageEnclosureIdentification|Enable-StorageHighAvailability|Format-Volume|Get-DedupProperties|Get-Disk|Get-DiskImage|Get-DiskStorageNodeView|Get-FileIntegrity|Get-FileShare|Get-FileShareAccessControlEntry|Get-FileStorageTier|Get-InitiatorId|Get-InitiatorPort|Get-MaskingSet|Get-OffloadDataTransferSetting|Get-Partition|Get-PartitionSupportedSize|Get-PhysicalDisk|Get-PhysicalDiskStorageNodeView|Get-ResiliencySetting|Get-StorageAdvancedProperty|Get-StorageDiagnosticInfo|Get-StorageEnclosure|Get-StorageEnclosureStorageNodeView|Get-StorageEnclosureVendorData|Get-StorageFaultDomain|Get-StorageFileServer|Get-StorageFirmwareInformation|Get-StorageHealthAction|Get-StorageHealthReport|Get-StorageHealthSetting|Get-StorageJob|Get-StorageNode|Get-StoragePool|Get-StorageProvider|Get-StorageReliabilityCounter|Get-StorageSetting|Get-StorageSubSystem|Get-StorageTier|Get-StorageTierSupportedSize|Get-SupportedClusterSizes|Get-SupportedFileSystems|Get-TargetPort|Get-TargetPortal|Get-VirtualDisk|Get-VirtualDiskSupportedSize|Get-Volume|Get-VolumeCorruptionCount|Get-VolumeScrubPolicy|Grant-FileShareAccess|Hide-VirtualDisk|Initialize-Disk|Mount-DiskImage|New-FileShare|New-MaskingSet|New-Partition|New-StorageFileServer|New-StoragePool|New-StorageSubsystemVirtualDisk|New-StorageTier|New-VirtualDisk|New-VirtualDiskClone|New-VirtualDiskSnapshot|New-Volume|Optimize-StoragePool|Optimize-Volume|Register-StorageSubsystem|Remove-FileShare|Remove-InitiatorId|Remove-InitiatorIdFromMaskingSet|Remove-MaskingSet|Remove-Partition|Remove-PartitionAccessPath|Remove-PhysicalDisk|Remove-StorageFileServer|Remove-StorageHealthSetting|Remove-StoragePool|Remove-StorageTier|Remove-TargetPortFromMaskingSet|Remove-VirtualDisk|Remove-VirtualDiskFromMaskingSet|Rename-MaskingSet|Repair-FileIntegrity|Repair-VirtualDisk|Repair-Volume|Reset-PhysicalDisk|Reset-StorageReliabilityCounter|Resize-Partition|Resize-StorageTier|Resize-VirtualDisk|Revoke-FileShareAccess|Set-Disk|Set-FileIntegrity|Set-FileShare|Set-FileStorageTier|Set-InitiatorPort|Set-Partition|Set-PhysicalDisk|Set-ResiliencySetting|Set-StorageFileServer|Set-StorageHealthSetting|Set-StoragePool|Set-StorageProvider|Set-StorageSetting|Set-StorageSubSystem|Set-StorageTier|Set-VirtualDisk|Set-Volume|Set-VolumeScrubPolicy|Show-VirtualDisk|Start-StorageDiagnosticLog|Stop-StorageDiagnosticLog|Stop-StorageJob|Unblock-FileShareAccess|Unregister-StorageSubsystem|Update-Disk|Update-HostStorageCache|Update-StorageFirmware|Update-StoragePool|Update-StorageProviderCache|Write-VolumeCache|\" +\n        \"Disable-TlsCipherSuite|Disable-TlsSessionTicketKey|Enable-TlsCipherSuite|Enable-TlsSessionTicketKey|Export-TlsSessionTicketKey|Get-TlsCipherSuite|New-TlsSessionTicketKey|\" +\n        \"Get-TroubleshootingPack|Invoke-TroubleshootingPack|\" +\n        \"Clear-Tpm|ConvertTo-TpmOwnerAuth|Disable-TpmAutoProvisioning|Enable-TpmAutoProvisioning|Get-Tpm|Get-TpmEndorsementKeyInfo|Get-TpmSupportedFeature|Import-TpmOwnerAuth|Initialize-Tpm|Set-TpmOwnerAuth|Unblock-Tpm|\" +\n        \"Add-VpnConnection|Add-VpnConnectionRoute|Add-VpnConnectionTriggerApplication|Add-VpnConnectionTriggerDnsConfiguration|Add-VpnConnectionTriggerTrustedNetwork|Get-VpnConnection|Get-VpnConnectionTrigger|New-EapConfiguration|New-VpnServerAddress|Remove-VpnConnection|Remove-VpnConnectionRoute|Remove-VpnConnectionTriggerApplication|Remove-VpnConnectionTriggerDnsConfiguration|Remove-VpnConnectionTriggerTrustedNetwork|Set-VpnConnection|Set-VpnConnectionIPsecConfiguration|Set-VpnConnectionProxy|Set-VpnConnectionTriggerDnsConfiguration|Set-VpnConnectionTriggerTrustedNetwork|\" +\n        \"Add-OdbcDsn|Disable-OdbcPerfCounter|Disable-WdacBidTrace|Enable-OdbcPerfCounter|Enable-WdacBidTrace|Get-OdbcDriver|Get-OdbcDsn|Get-OdbcPerfCounter|Get-WdacBidTrace|Remove-OdbcDsn|Set-OdbcDriver|Set-OdbcDsn|\" +\n        \"Get-WindowsDeveloperLicense|Show-WindowsDeveloperLicenseRegistration|Unregister-WindowsDeveloperLicense|\" +\n        \"Disable-WindowsErrorReporting|Enable-WindowsErrorReporting|Get-WindowsErrorReporting|\" +\n        \"Get-WindowsSearchSetting|Set-WindowsSearchSetting|\" +\n        \"Get-WindowsUpdateLog\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\");\n    var binaryOperatorsRe = (\n        \"eq|ne|gt|lt|le|ge|like|notlike|match|notmatch|contains|notcontains|in|notin|band|bor|bxor|bnot|\" + \n        \"ceq|cne|cgt|clt|cle|cge|clike|cnotlike|cmatch|cnotmatch|ccontains|cnotcontains|cin|cnotin|\" + \n        \"ieq|ine|igt|ilt|ile|ige|ilike|inotlike|imatch|inotmatch|icontains|inotcontains|iin|inotin|\" +\n        \"and|or|xor|not|\" +\n        \"split|join|replace|f|\" +\n        \"csplit|creplace|\" +\n        \"isplit|ireplace|\" +\n        \"is|isnot|as|\" +\n        \"shl|shr\"\n    );\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment.start\",\n                regex : \"<#\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"[$](?:[Tt]rue|[Ff]alse)\\\\b\"\n            }, {\n                token : \"constant.language\",\n                regex : \"[$][Nn]ull\\\\b\"\n            }, {\n                token : \"variable.instance\",\n                regex : \"[$][a-zA-Z][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"\\\\-(?:\" + binaryOperatorsRe + \")\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"&|\\\\+|\\\\-|\\\\*|\\\\/|\\\\%|\\\\=|\\\\>|\\\\&|\\\\!|\\\\|\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\",\n                regex : \"#>\",\n                next : \"start\"\n            }, {\n                token : \"doc.comment.tag\",\n                regex : \"^\\\\.\\\\w+\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n};\n\noop.inherits(PowershellHighlightRules, TextHighlightRules);\n\nexports.PowershellHighlightRules = PowershellHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/powershell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/powershell_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PowershellHighlightRules = require(\"./powershell_highlight_rules\").PowershellHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PowershellHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode({start: \"^\\\\s*(<#)\", end: \"^[#\\\\s]>\\\\s*$\"});\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"<#\", end: \"#>\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n      \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/powershell\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-praat.js",
    "content": "ace.define(\"ace/mode/praat_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PraatHighlightRules = function() {\n\n    var keywords = (\n        \"if|then|else|elsif|elif|endif|fi|\" +\n        \"endfor|endproc|\" + // related keywords specified below\n        \"while|endwhile|\" +\n        \"repeat|until|\" +\n        \"select|plus|minus|\" +\n        \"assert|asserterror\"\n    );\n\n    var predefinedVariables = (\n        \"macintosh|windows|unix|\" +\n        \"praatVersion|praatVersion\\\\$\" +\n        \"pi|undefined|\" +\n        \"newline\\\\$|tab\\\\$|\" +\n        \"shellDirectory\\\\$|homeDirectory\\\\$|preferencesDirectory\\\\$|\" +\n        \"temporaryDirectory\\\\$|defaultDirectory\\\\$\"\n    );\n    var directives = (\n        \"clearinfo|endSendPraat\"\n    );\n\n    var functions = (\n        \"writeInfo|writeInfoLine|appendInfo|appendInfoLine|info\\\\$|\" +\n        \"writeFile|writeFileLine|appendFile|appendFileLine|\" +\n        \"abs|round|floor|ceiling|min|max|imin|imax|\" +\n        \"sqrt|sin|cos|tan|arcsin|arccos|arctan|arctan2|sinc|sincpi|\" +\n        \"exp|ln|lnBeta|lnGamma|log10|log2|\" +\n        \"sinh|cosh|tanh|arcsinh|arccosh|arctanh|\" +\n        \"sigmoid|invSigmoid|erf|erfc|\" +\n        \"random(?:Uniform|Integer|Gauss|Poisson|Binomial)|\" +\n        \"gaussP|gaussQ|invGaussQ|incompleteGammaP|incompleteBeta|\" +\n        \"chiSquareP|chiSquareQ|invChiSquareQ|studentP|studentQ|invStudentQ|\" +\n        \"fisherP|fisherQ|invFisherQ|\" +\n        \"binomialP|binomialQ|invBinomialP|invBinomialQ|\" +\n        \"hertzToBark|barkToHerz|\" +\n        \"hertzToMel|melToHertz|\" +\n        \"hertzToSemitones|semitonesToHerz|\" +\n        \"erb|hertzToErb|erbToHertz|\" +\n        \"phonToDifferenceLimens|differenceLimensToPhon|\" +\n        \"soundPressureToPhon|\" +\n        \"beta|beta2|besselI|besselK|\" +\n        \"numberOfColumns|numberOfRows|\" +\n        \"selected|selected\\\\$|numberOfSelected|variableExists|\"+\n        \"index|rindex|startsWith|endsWith|\"+\n        \"index_regex|rindex_regex|replace_regex\\\\$|\"+\n        \"length|extractWord\\\\$|extractLine\\\\$|extractNumber|\" +\n        \"left\\\\$|right\\\\$|mid\\\\$|replace\\\\$|\" +\n        \"date\\\\$|fixed\\\\$|percent\\\\$|\" +\n        \"zero#|linear#|randomUniform#|randomInteger#|randomGauss#|\" +\n        \"beginPause|endPause|\" +\n        \"demoShow|demoWindowTitle|demoInput|demoWaitForInput|\" +\n        \"demoClicked|demoClickedIn|demoX|demoY|\" +\n        \"demoKeyPressed|demoKey\\\\$|\" +\n        \"demoExtraControlKeyPressed|demoShiftKeyPressed|\"+\n        \"demoCommandKeyPressed|demoOptionKeyPressed|\" +\n        \"environment\\\\$|chooseReadFile\\\\$|\" +\n        \"chooseDirectory\\\\$|createDirectory|fileReadable|deleteFile|\" +\n        \"selectObject|removeObject|plusObject|minusObject|\" +\n        \"runScript|exitScript|\" +\n        \"beginSendPraat|endSendPraat|\" +\n        \"objectsAreIdentical\"\n    );\n\n    var objectTypes = (\n        \"Activation|AffineTransform|AmplitudeTier|Art|Artword|Autosegment|\"  +\n        \"BarkFilter|CCA|Categories|Cepstrum|Cepstrumc|ChebyshevSeries|\"      +\n        \"ClassificationTable|Cochleagram|Collection|Configuration|\"          +\n        \"Confusion|ContingencyTable|Corpus|Correlation|Covariance|\"          +\n        \"CrossCorrelationTable|CrossCorrelationTables|DTW|Diagonalizer|\"     +\n        \"Discriminant|Dissimilarity|Distance|Distributions|DurationTier|\"    +\n        \"EEG|ERP|ERPTier|Eigen|Excitation|Excitations|ExperimentMFC|FFNet|\"  +\n        \"FeatureWeights|Formant|FormantFilter|FormantGrid|FormantPoint|\"     +\n        \"FormantTier|GaussianMixture|HMM|HMM_Observation|\"                   +\n        \"HMM_ObservationSequence|HMM_State|HMM_StateSequence|Harmonicity|\"   +\n        \"ISpline|Index|Intensity|IntensityTier|IntervalTier|KNN|KlattGrid|\"  +\n        \"KlattTable|LFCC|LPC|Label|LegendreSeries|LinearRegression|\"         +\n        \"LogisticRegression|LongSound|Ltas|MFCC|MSpline|ManPages|\"           +\n        \"Manipulation|Matrix|MelFilter|MixingMatrix|Movie|Network|\"          +\n        \"OTGrammar|OTHistory|OTMulti|PCA|PairDistribution|ParamCurve|\"       +\n        \"Pattern|Permutation|Pitch|PitchTier|PointProcess|Polygon|\"          +\n        \"Polynomial|Procrustes|RealPoint|RealTier|ResultsMFC|Roots|SPINET|\"  +\n        \"SSCP|SVD|Salience|ScalarProduct|Similarity|SimpleString|\"           +\n        \"SortedSetOfString|Sound|Speaker|Spectrogram|Spectrum|SpectrumTier|\" +\n        \"SpeechSynthesizer|SpellingChecker|Strings|StringsIndex|Table|\"      +\n        \"TableOfReal|TextGrid|TextInterval|TextPoint|TextTier|Tier|\"         +\n        \"Transition|VocalTract|Weight|WordList\"\n    );\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"string.interpolated\",\n                regex : /'((?:\\.?[a-z][a-zA-Z0-9_.]*)(?:\\$|#|:[0-9]+)?)'/\n            }, {\n                token : [\"text\", \"text\", \"keyword.operator\", \"text\", \"keyword\"],\n                regex : /(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(stopwatch)/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"string\"],\n                regex : /(^\\s*)(print(?:line|tab)?|echo|exit|pause|send(?:praat|socket)|include|execute|system(?:_nocheck)?)(\\s+)(.*)/\n            }, {\n                token : [\"text\", \"keyword\"],\n                regex : \"(^\\\\s*)(\" + directives + \")$\"\n            }, {\n                token : [\"text\", \"keyword.operator\", \"text\"],\n                regex : /(\\s+)((?:\\+|-|\\/|\\*|<|>)=?|==?|!=|%|\\^|\\||and|or|not)(\\s+)/\n            }, {\n                token : [\"text\", \"text\", \"keyword.operator\", \"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(?:((?:no)?warn|(?:unix_)?nocheck|noprogress)(\\s+))?((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /(^\\s*)((?:no(?:warn|check))?)(\\s*)(\\b(?:editor(?::?)|endeditor)\\b)/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /(^\\s*)(?:(demo)?(\\s+))((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /^(\\s*)(?:(demo)(\\s+))?(10|12|14|16|24)$/\n            }, {\n                token : [\"text\", \"support.function\", \"text\"],\n                regex : /(\\s*)(do\\$?)(\\s*:\\s*|\\s*\\(\\s*)/\n            }, {\n                token : \"entity.name.type\",\n                regex : \"(\" + objectTypes + \")\"\n            }, {\n                token : \"variable.language\",\n                regex : \"(\" + predefinedVariables + \")\"\n            }, {\n                token : [\"support.function\", \"text\"],\n                regex : \"((?:\" + functions + \")\\\\$?)(\\\\s*(?::|\\\\())\"\n            }, {\n                token : \"keyword\",\n                regex : /(\\bfor\\b)/,\n                next : \"for\"\n            }, {\n                token : \"keyword\",\n                regex : \"(\\\\b(?:\" + keywords + \")\\\\b)\"\n            }, {\n                token : \"string\",\n                regex : /\"[^\"]*\"/\n            }, {\n                token : \"string\",\n                regex : /\"[^\"]*$/,\n                next : \"brokenstring\"\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"entity.name.section\"],\n                regex : /(^\\s*)(\\bform\\b)(\\s+)(.*)/,\n                next : \"form\"\n            }, {\n                token : \"constant.numeric\",\n                regex : /\\b[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n            }, {\n                token : [\"keyword\", \"text\", \"entity.name.function\"],\n                regex : /(procedure)(\\s+)([^:\\s]+)/\n            }, {\n                token : [\"entity.name.function\", \"text\"],\n                regex : /(@\\S+)(:|\\s*\\()/\n            }, {\n                token : [\"text\", \"keyword\", \"text\", \"entity.name.function\"],\n                regex : /(^\\s*)(call)(\\s+)(\\S+)/\n            }, {\n                token : \"comment\",\n                regex : /(^\\s*#|;).*$/\n            }, {\n                token : \"text\",\n                regex : /\\s+/\n            }\n        ],\n        \"form\" : [\n            {\n                token : [\"keyword\", \"text\", \"constant.numeric\"],\n                regex : /((?:optionmenu|choice)\\s+)(\\S+:\\s+)([0-9]+)/\n            }, {\n                token : [\"keyword\", \"constant.numeric\"],\n                regex : /((?:option|button)\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/\n            }, {\n                token : [\"keyword\", \"string\"],\n                regex : /((?:option|button)\\s+)(.*)/\n            }, {\n                token : [\"keyword\", \"text\", \"string\"],\n                regex : /((?:sentence|text)\\s+)(\\S+\\s*)(.*)/\n            }, {\n                token : [\"keyword\", \"text\", \"string\", \"invalid.illegal\"],\n                regex : /(word\\s+)(\\S+\\s*)(\\S+)?(\\s.*)?/\n            }, {\n                token : [\"keyword\", \"text\", \"constant.language\"],\n                regex : /(boolean\\s+)(\\S+\\s*)(0|1|\"?(?:yes|no)\"?)/\n            }, {\n                token : [\"keyword\", \"text\", \"constant.numeric\"],\n                regex : /((?:real|natural|positive|integer)\\s+)(\\S+\\s*)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/\n            }, {\n                token : [\"keyword\", \"string\"],\n                regex : /(comment\\s+)(.*)/\n            }, {\n                token : \"keyword\",\n                regex : 'endform',\n                next : \"start\"\n            }\n        ],\n        \"for\" : [\n            {\n                token : [\"keyword\", \"text\", \"constant.numeric\", \"text\"],\n                regex : /(from|to)(\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?)(\\s*)/\n            }, {\n                token : [\"keyword\", \"text\"],\n                regex : /(from|to)(\\s+\\S+\\s*)/\n            }, {\n                token : \"text\",\n                regex : /$/,\n                next : \"start\"\n            }\n        ],\n        \"brokenstring\" : [\n            {\n                token : [\"text\", \"string\"],\n                regex : /(\\s*\\.{3})([^\"]*)/\n            }, {\n                token : \"string\",\n                regex : /\"/,\n                next : \"start\"\n            }\n        ]\n    };\n};\n\noop.inherits(PraatHighlightRules, TextHighlightRules);\n\nexports.PraatHighlightRules = PraatHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/praat\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/praat_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PraatHighlightRules = require(\"./praat_highlight_rules\").PraatHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PraatHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/praat\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-prolog.js",
    "content": "ace.define(\"ace/mode/prolog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PrologHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { include: '#comment' },\n         { include: '#basic_fact' },\n         { include: '#rule' },\n         { include: '#directive' },\n         { include: '#fact' } ],\n      '#atom': \n       [ { token: 'constant.other.atom.prolog',\n           regex: '\\\\b[a-z][a-zA-Z0-9_]*\\\\b' },\n         { token: 'constant.numeric.prolog',\n           regex: '-?\\\\d+(?:\\\\.\\\\d+)?' },\n         { include: '#string' } ],\n      '#basic_elem': \n       [ { include: '#comment' },\n         { include: '#statement' },\n         { include: '#constants' },\n         { include: '#operators' },\n         { include: '#builtins' },\n         { include: '#list' },\n         { include: '#atom' },\n         { include: '#variable' } ],\n      '#basic_fact': \n       [ { token: \n            [ 'entity.name.function.fact.basic.prolog',\n              'punctuation.end.fact.basic.prolog' ],\n           regex: '([a-z]\\\\w*)(\\\\.)' } ],\n      '#builtins': \n       [ { token: 'support.function.builtin.prolog',\n           regex: '\\\\b(?:abolish|abort|ancestors|arg|ascii|assert[az]|atom(?:ic)?|body|char|close|conc|concat|consult|define|definition|dynamic|dump|fail|file|free|free_proc|functor|getc|goal|halt|head|head|integer|length|listing|match_args|member|next_clause|nl|nonvar|nth|number|cvars|nvars|offset|op|print?|prompt|putc|quoted|ratom|read|redefine|rename|retract(?:all)?|see|seeing|seen|skip|spy|statistics|system|tab|tell|telling|term|time|told|univ|unlink_clause|unspy_predicate|var|write)\\\\b' } ],\n      '#comment': \n       [ { token: \n            [ 'punctuation.definition.comment.prolog',\n              'comment.line.percentage.prolog' ],\n           regex: '(%)(.*$)' },\n         { token: 'punctuation.definition.comment.prolog',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.prolog',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.prolog' } ] } ],\n      '#constants': \n       [ { token: 'constant.language.prolog',\n           regex: '\\\\b(?:true|false|yes|no)\\\\b' } ],\n      '#directive': \n       [ { token: 'keyword.operator.directive.prolog',\n           regex: ':-',\n           push: \n            [ { token: 'meta.directive.prolog', regex: '\\\\.', next: 'pop' },\n              { include: '#comment' },\n              { include: '#statement' },\n              { defaultToken: 'meta.directive.prolog' } ] } ],\n      '#expr': \n       [ { include: '#comments' },\n         { token: 'meta.expression.prolog',\n           regex: '\\\\(',\n           push: \n            [ { token: 'meta.expression.prolog', regex: '\\\\)', next: 'pop' },\n              { include: '#expr' },\n              { defaultToken: 'meta.expression.prolog' } ] },\n         { token: 'keyword.control.cutoff.prolog', regex: '!' },\n         { token: 'punctuation.control.and.prolog', regex: ',' },\n         { token: 'punctuation.control.or.prolog', regex: ';' },\n         { include: '#basic_elem' } ],\n      '#fact': \n       [ { token: \n            [ 'entity.name.function.fact.prolog',\n              'punctuation.begin.fact.parameters.prolog' ],\n           regex: '([a-z]\\\\w*)(\\\\()(?!.*:-)',\n           push: \n            [ { token: \n                 [ 'punctuation.end.fact.parameters.prolog',\n                   'punctuation.end.fact.prolog' ],\n                regex: '(\\\\))(\\\\.?)',\n                next: 'pop' },\n              { include: '#parameter' },\n              { defaultToken: 'meta.fact.prolog' } ] } ],\n      '#list': \n       [ { token: 'punctuation.begin.list.prolog',\n           regex: '\\\\[(?=.*\\\\])',\n           push: \n            [ { token: 'punctuation.end.list.prolog',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#comment' },\n              { token: 'punctuation.separator.list.prolog', regex: ',' },\n              { token: 'punctuation.concat.list.prolog',\n                regex: '\\\\|',\n                push: \n                 [ { token: 'meta.list.concat.prolog',\n                     regex: '(?=\\\\s*\\\\])',\n                     next: 'pop' },\n                   { include: '#basic_elem' },\n                   { defaultToken: 'meta.list.concat.prolog' } ] },\n              { include: '#basic_elem' },\n              { defaultToken: 'meta.list.prolog' } ] } ],\n      '#operators': \n       [ { token: 'keyword.operator.prolog',\n           regex: '\\\\\\\\\\\\+|\\\\bnot\\\\b|\\\\bis\\\\b|->|[><]|[><\\\\\\\\:=]?=|(?:=\\\\\\\\|\\\\\\\\=)=' } ],\n      '#parameter': \n       [ { token: 'variable.language.anonymous.prolog',\n           regex: '\\\\b_\\\\b' },\n         { token: 'variable.parameter.prolog',\n           regex: '\\\\b[A-Z_]\\\\w*\\\\b' },\n         { token: 'punctuation.separator.parameters.prolog', regex: ',' },\n         { include: '#basic_elem' },\n         { token: 'text', regex: '[^\\\\s]' } ],\n      '#rule': \n       [ { token: 'meta.rule.prolog',\n           regex: '(?=[a-z]\\\\w*.*:-)',\n           push: \n            [ { token: 'punctuation.rule.end.prolog',\n                regex: '\\\\.',\n                next: 'pop' },\n              { token: 'meta.rule.signature.prolog',\n                regex: '(?=[a-z]\\\\w*.*:-)',\n                push: \n                 [ { token: 'meta.rule.signature.prolog',\n                     regex: '(?=:-)',\n                     next: 'pop' },\n                   { token: 'entity.name.function.rule.prolog',\n                     regex: '[a-z]\\\\w*(?=\\\\(|\\\\s*:-)' },\n                   { token: 'punctuation.rule.parameters.begin.prolog',\n                     regex: '\\\\(',\n                     push: \n                      [ { token: 'punctuation.rule.parameters.end.prolog',\n                          regex: '\\\\)',\n                          next: 'pop' },\n                        { include: '#parameter' },\n                        { defaultToken: 'meta.rule.parameters.prolog' } ] },\n                   { defaultToken: 'meta.rule.signature.prolog' } ] },\n              { token: 'keyword.operator.definition.prolog',\n                regex: ':-',\n                push: \n                 [ { token: 'meta.rule.definition.prolog',\n                     regex: '(?=\\\\.)',\n                     next: 'pop' },\n                   { include: '#comment' },\n                   { include: '#expr' },\n                   { defaultToken: 'meta.rule.definition.prolog' } ] },\n              { defaultToken: 'meta.rule.prolog' } ] } ],\n      '#statement': \n       [ { token: 'meta.statement.prolog',\n           regex: '(?=[a-z]\\\\w*\\\\()',\n           push: \n            [ { token: 'punctuation.end.statement.parameters.prolog',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#builtins' },\n              { include: '#atom' },\n              { token: 'punctuation.begin.statement.parameters.prolog',\n                regex: '\\\\(',\n                push: \n                 [ { token: 'meta.statement.parameters.prolog',\n                     regex: '(?=\\\\))',\n                     next: 'pop' },\n                   { token: 'punctuation.separator.statement.prolog', regex: ',' },\n                   { include: '#basic_elem' },\n                   { defaultToken: 'meta.statement.parameters.prolog' } ] },\n              { defaultToken: 'meta.statement.prolog' } ] } ],\n      '#string': \n       [ { token: 'punctuation.definition.string.begin.prolog',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.prolog',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.prolog', regex: '\\\\\\\\.' },\n              { token: 'constant.character.escape.quote.prolog',\n                regex: '\\'\\'' },\n              { defaultToken: 'string.quoted.single.prolog' } ] } ],\n      '#variable': \n       [ { token: 'variable.language.anonymous.prolog',\n           regex: '\\\\b_\\\\b' },\n         { token: 'variable.other.prolog',\n           regex: '\\\\b[A-Z_][a-zA-Z0-9_]*\\\\b' } ] };\n    \n    this.normalizeRules();\n};\n\nPrologHighlightRules.metaData = { fileTypes: [ 'plg', 'prolog' ],\n      foldingStartMarker: '(%\\\\s*region \\\\w*)|([a-z]\\\\w*.*:- ?)',\n      foldingStopMarker: '(%\\\\s*end(\\\\s*region)?)|(?=\\\\.)',\n      keyEquivalent: '^~P',\n      name: 'Prolog',\n      scopeName: 'source.prolog' };\n\n\noop.inherits(PrologHighlightRules, TextHighlightRules);\n\nexports.PrologHighlightRules = PrologHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/prolog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/prolog_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PrologHighlightRules = require(\"./prolog_highlight_rules\").PrologHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PrologHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"%\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/prolog\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-properties.js",
    "content": "ace.define(\"ace/mode/properties_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PropertiesHighlightRules = function() {\n\n    var escapeRe = /\\\\u[0-9a-fA-F]{4}|\\\\/;\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /[!#].*$/\n            }, {\n                token : \"keyword\",\n                regex : /[=:]$/\n            }, {\n                token : \"keyword\",\n                regex : /[=:]/,\n                next  : \"value\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : escapeRe\n            }, {\n                defaultToken: \"variable\"\n            }\n        ],\n        \"value\" : [\n            {\n                regex : /\\\\$/,\n                token : \"string\",\n                next : \"value\"\n            }, {\n                regex : /$/,\n                token : \"string\",\n                next : \"start\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : escapeRe\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n};\n\noop.inherits(PropertiesHighlightRules, TextHighlightRules);\n\nexports.PropertiesHighlightRules = PropertiesHighlightRules;\n});\n\nace.define(\"ace/mode/properties\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/properties_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PropertiesHighlightRules = require(\"./properties_highlight_rules\").PropertiesHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = PropertiesHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/properties\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-protobuf.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/protobuf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var ProtobufHighlightRules = function() {\n\n        var builtinTypes = \"double|float|int32|int64|uint32|uint64|sint32|\" +\n                           \"sint64|fixed32|fixed64|sfixed32|sfixed64|bool|\" +\n                           \"string|bytes\";\n        var keywordDeclaration = \"message|required|optional|repeated|package|\" +\n                                 \"import|option|enum\";\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword.declaration.protobuf\": keywordDeclaration,\n            \"support.type\": builtinTypes\n        }, \"identifier\");\n\n        this.$rules = {\n            \"start\": [{\n                    token: \"comment\",\n                    regex: /\\/\\/.*$/\n                }, {\n                    token: \"comment\",\n                    regex: /\\/\\*/,\n                    next: \"comment\"\n                }, {\n                    token: \"constant\",\n                    regex: \"<[^>]+>\"\n                }, {\n                    regex: \"=\",\n                    token: \"keyword.operator.assignment.protobuf\"\n                }, {\n                    token : \"string\", // single line\n                    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n                }, {\n                    token : \"string\", // single line\n                    regex : '[\\'](?:(?:\\\\\\\\.)|(?:[^\\'\\\\\\\\]))*?[\\']'\n                }, {\n                    token: \"constant.numeric\", // hex\n                    regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n                }, {\n                    token: \"constant.numeric\", // float\n                    regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n                }, {\n                    token: keywordMapper,\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }],\n            \"comment\": [{\n                    token : \"comment\", // closing comment\n                    regex : \"\\\\*\\\\/\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }]\n        };\n\n        this.normalizeRules();\n    };\n\n    oop.inherits(ProtobufHighlightRules, TextHighlightRules);\n\n    exports.ProtobufHighlightRules = ProtobufHighlightRules;\n});\n\nace.define(\"ace/mode/protobuf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/protobuf_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar ProtobufHighlightRules = require(\"./protobuf_highlight_rules\").ProtobufHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    CMode.call(this);\n    this.foldingRules = new CStyleFoldMode();\n    this.HighlightRules = ProtobufHighlightRules;\n};\noop.inherits(Mode, CMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/protobuf\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-puppet.js",
    "content": "ace.define(\"ace/mode/puppet_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PuppetHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: ['keyword.type.puppet', 'constant.class.puppet', 'keyword.inherits.puppet', 'constant.class.puppet'],\n                regex: \"^\\\\s*(class)(\\\\s+(?:[-_A-Za-z0-9\\\".]+::)*[-_A-Za-z0-9\\\".]+\\\\s*)(?:(inherits\\\\s*)(\\\\s+(?:[-_A-Za-z0-9\\\".]+::)*[-_A-Za-z0-9\\\".]+\\\\s*))?\"\n            },\n            {\n                token: ['storage.function.puppet', 'name.function.puppet', 'punctuation.lpar'],\n                regex: \"(^\\\\s*define)(\\\\s+[a-zA-Z0-9_:]+\\\\s*)(\\\\()\",\n                push:\n                    [{\n                        token: 'punctuation.rpar.puppet',\n                        regex: \"\\\\)\",\n                        next: 'pop'\n                    },\n                        {include: \"constants\"},\n                        {include: \"variable\"},\n                        {include: \"strings\"},\n                        {include: \"operators\"},\n                        {defaultToken: 'string'}]\n            },\n            {\n                token: [\"language.support.class\", \"keyword.operator\"],\n                regex: \"\\\\b([a-zA-Z_]+)(\\\\s+=>)\"\n            },\n            {\n                token: [\"exported.resource.puppet\", \"keyword.name.resource.puppet\", \"paren.lpar\"],\n                regex: \"(\\\\@\\\\@)?(\\\\s*[a-zA-Z_]*)(\\\\s*\\\\{)\"\n            },\n            {\n                token: \"qualified.variable.puppet\",\n                regex: \"(\\\\$([a-z][a-z0-9_]*)?(::[a-z][a-z0-9_]*)*::[a-z0-9_][a-zA-Z0-9_]*)\"\n            },\n\n            {\n                token: \"singleline.comment.puppet\",\n                regex: '#(.)*$'\n            },\n            {\n                token: \"multiline.comment.begin.puppet\",\n                regex: '^\\\\s*\\\\/\\\\*\\\\s*$',\n                push: \"blockComment\"\n            },\n            {\n                token: \"keyword.control.puppet\",\n                regex: \"\\\\b(case|if|unless|else|elsif|in|default:|and|or)\\\\s+(?!::)\"\n            },\n            {\n                token: \"keyword.control.puppet\",\n                regex: \"\\\\b(import|default|inherits|include|require|contain|node|application|consumes|environment|site|function|produces)\\\\b\"\n            },\n            {\n                token: \"support.function.puppet\",\n                regex: \"\\\\b(lest|str2bool|escape|gsub|Timestamp|Timespan|with|alert|crit|debug|notice|sprintf|split|step|strftime|slice|shellquote|type|sha1|defined|scanf|reverse_each|regsubst|return|emerg|reduce|err|failed|fail|versioncmp|file|generate|then|info|realize|search|tag|tagged|template|epp|warning|hiera_include|each|assert_type|binary_file|create_resources|dig|digest|filter|lookup|find_file|fqdn_rand|hiera_array|hiera_hash|inline_epp|inline_template|map|match|md5|new|next)\\\\b\"\n            },\n            {\n                token: \"constant.types.puppet\",\n                regex: \"\\\\b(String|File|Package|Service|Class|Integer|Array|Catalogentry|Variant|Boolean|Undef|Number|Hash|Float|Numeric|NotUndef|Callable|Optional|Any|Regexp|Sensitive|Sensitive.new|Type|Resource|Default|Enum|Scalar|Collection|Data|Pattern|Tuple|Struct)\\\\b\"\n            },\n\n            {\n                token: \"paren.lpar\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.rpar\",\n                regex: \"[\\\\])}]\"\n            },\n            {include: \"variable\"},\n            {include: \"constants\"},\n            {include: \"strings\"},\n            {include: \"operators\"},\n            {\n                token: \"regexp.begin.string.puppet\",\n                regex: \"\\\\s*(\\\\/(\\\\S)+)\\\\/\"\n            }\n        ],\n        blockComment: [{\n            regex: \"^\\\\s*\\\\/\\\\*\\\\s*$\",\n            token: \"multiline.comment.begin.puppet\",\n            push: \"blockComment\"\n        }, {\n            regex: \"^\\\\s*\\\\*\\\\/\\\\s*$\",\n            token: \"multiline.comment.end.puppet\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }],\n        \"constants\": [\n            {\n                token: \"constant.language.puppet\",\n                regex: \"\\\\b(false|true|running|stopped|installed|purged|latest|file|directory|held|undef|present|absent|link|mounted|unmounted)\\\\b\"\n            }\n        ],\n        \"variable\": [\n            {\n                token: \"variable.puppet\",\n                regex: \"(\\\\$[a-z0-9_\\{][a-zA-Z0-9_]*)\"\n            }\n        ],\n        \"strings\": [\n            {\n                token: \"punctuation.quote.puppet\",\n                regex: \"'\",\n                push:\n                    [{\n                        token: 'punctuation.quote.puppet',\n                        regex: \"'\",\n                        next: 'pop'\n                    },\n                        {include: \"escaped_chars\"},\n                        {defaultToken: 'string'}]\n            },\n            {\n                token: \"punctuation.quote.puppet\",\n                regex: '\"',\n                push:\n                    [{\n                        token: 'punctuation.quote.puppet',\n                        regex: '\"',\n                        next: 'pop'\n                    },\n                        {include: \"escaped_chars\"},\n                        {include: \"variable\"},\n                        {defaultToken: 'string'}]\n            }\n        ],\n        \"escaped_chars\": [\n            {\n                token: \"constant.escaped_char.puppet\",\n                regex: \"\\\\\\\\.\"\n            }\n        ],\n        \"operators\": [\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|::|,\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\n\noop.inherits(PuppetHighlightRules, TextHighlightRules);\n\nexports.PuppetHighlightRules = PuppetHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/puppet\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/puppet_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PuppetHighlightRules = require(\"./puppet_highlight_rules\").PuppetHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = PuppetHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n\n(function () {\n    this.$id = \"ace/mode/puppet\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-python.js",
    "content": "ace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\"\n    );\n\n    var builtinConstants = (\n        \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n    );\n\n    var builtinFunctions = (\n        \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + '\"{3}',\n            next: \"rawqqstring3\"\n        }, {\n            token: \"string\", \n            regex: strRawPre + '\"(?=.)',\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'{3}\",\n            next: \"rawqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawPre + \"'(?=.)\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"{3}',\n            next: \"fqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + '\"(?=.)',\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'{3}\",\n            next: \"fqstring3\"\n        }, {\n            token: \"string\",\n            regex: strFormatPre + \"'(?=.)\",\n            next: \"fqstring\"\n        },{\n            token: \"string\",\n            regex: strRawFormatPre + '\"{3}',\n            next: \"rfqqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + '\"(?=.)',\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'{3}\",\n            next: \"rfqstring3\"\n        }, {\n            token: \"string\",\n            regex: strRawFormatPre + \"'(?=.)\",\n            next: \"rfqstring\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }, {\n            include: \"constants\"\n        }],\n        \"qqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rawqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rawqstring\"\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring3\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"fqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstring\": [{\n            token: \"constant.language.escape\",\n            regex: stringEscape\n        }, {\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring3\": [{\n            token: \"string\", // multi line \"\"\" string end\n            regex: '\"{3}',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring3\": [{\n            token: \"string\",  // multi line ''' string end\n            regex: \"'{3}\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqqstring\": [{\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"rfqqstring\"\n        }, {\n            token: \"string\",\n            regex: '\"|$',\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rfqstring\": [{\n            token: \"string\",\n            regex: \"'|$\",\n            next: \"start\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"fqstringParRules\": [{//TODO: nested {}\n            token: \"paren.lparen\",\n            regex: \"[\\\\[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\]\\\\)]\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string\",\n            regex: \"'(.)*'\"\n        }, {\n            token: \"string\",\n            regex: '\"(.)*\"'\n        }, {\n            token: \"function.support\",\n            regex: \"(!s|!r|!a)\"\n        }, {\n            include: \"constants\"\n        },{\n            token: 'paren.rparen',\n            regex: \"}\",\n            next: 'pop'\n        },{\n            token: 'paren.lparen',\n            regex: \"{\",\n            push: \"fqstringParRules\"\n        }],\n        \"constants\": [{\n            token: \"constant.numeric\", // imaginary\n            regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: floatNumber\n        }, {\n            token: \"constant.numeric\", // long integer\n            regex: integer + \"[lL]\\\\b\"\n        }, {\n            token: \"constant.numeric\", // integer\n            regex: integer + \"\\\\b\"\n        }, {\n            token: [\"punctuation\", \"function.support\"],// method\n            regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n\nace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(markers) {\n    this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, match.index);\n            if (match[2])\n                return this.indentationBlock(session, row, match.index + match[2].length);\n            return this.indentationBlock(session, row);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/python\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/python_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar PythonFoldMode = require(\"./folding/pythonic\").FoldMode;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = PythonHighlightRules;\n    this.foldingRules = new PythonFoldMode(\"\\\\:\");\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        \n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        \n        if (!last)\n            return false;\n        \n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        \n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/python\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-r.js",
    "content": "ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TexHighlightRules = function(textClass) {\n\n    if (!textClass)\n        textClass = \"text\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : textClass, // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : textClass,\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass, // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(TexHighlightRules, TextHighlightRules);\n\nexports.TexHighlightRules = TexHighlightRules;\n});\n\nace.define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"], function(require, exports, module)\n{\n\n   var oop = require(\"../lib/oop\");\n   var lang = require(\"../lib/lang\");\n   var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n   var TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\n\n   var RHighlightRules = function()\n   {\n\n      var keywords = lang.arrayToMap(\n            (\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\")\n                  .split(\"|\")\n            );\n\n      var buildinConstants = lang.arrayToMap(\n            (\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|\" +\n             \"NA_complex_\").split(\"|\")\n            );\n\n      this.$rules = {\n         \"start\" : [\n            {\n               token : \"comment.sectionhead\",\n               regex : \"#+(?!').*(?:----|====|####)\\\\s*$\"\n            },\n            {\n               token : \"comment\",\n               regex : \"#+'\",\n               next : \"rd-start\"\n            },\n            {\n               token : \"comment\",\n               regex : \"#.*$\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : '[\"]',\n               next : \"qqstring\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : \"[']\",\n               next : \"qstring\"\n            },\n            {\n               token : \"constant.numeric\", // hex\n               regex : \"0[xX][0-9a-fA-F]+[Li]?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // explicit integer\n               regex : \"\\\\d+L\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number\n               regex : \"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number with leading decimal\n               regex : \"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.language.boolean\",\n               regex : \"(?:TRUE|FALSE|T|F)\\\\b\"\n            },\n            {\n               token : \"identifier\",\n               regex : \"`.*?`\"\n            },\n            {\n               onMatch : function(value) {\n                  if (keywords[value])\n                     return \"keyword\";\n                  else if (buildinConstants[value])\n                     return \"constant.language\";\n                  else if (value == '...' || value.match(/^\\.\\.\\d+$/))\n                     return \"variable.language\";\n                  else\n                     return \"identifier\";\n               },\n               regex : \"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"\n            },\n            {\n               token : \"keyword.operator\",\n               regex : \"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"\n            },\n            {\n               token : \"keyword.operator\", // infix operators\n               regex : \"%.*?%\"\n            },\n            {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n            },\n            {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])}]\"\n            },\n            {\n               token : \"text\",\n               regex : \"\\\\s+\"\n            }\n         ],\n         \"qqstring\" : [\n            {\n               token : \"string\",\n               regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ],\n         \"qstring\" : [\n            {\n               token : \"string\",\n               regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ]\n      };\n\n      var rdRules = new TexHighlightRules(\"comment\").getRules();\n      for (var i = 0; i < rdRules[\"start\"].length; i++) {\n         rdRules[\"start\"][i].token += \".virtual-comment\";\n      }\n\n      this.addRules(rdRules, \"rd-\");\n      this.$rules[\"rd-start\"].unshift({\n          token: \"text\",\n          regex: \"^\",\n          next: \"start\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"keyword\",\n         regex : \"@(?!@)[^ ]*\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"comment\",\n         regex : \"@@\"\n      });\n      this.$rules[\"rd-start\"].push({\n         token : \"comment\",\n         regex : \"[^%\\\\\\\\[({\\\\])}]+\"\n      });\n   };\n\n   oop.inherits(RHighlightRules, TextHighlightRules);\n\n   exports.RHighlightRules = RHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/r\",[\"require\",\"exports\",\"module\",\"ace/unicode\",\"ace/range\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/r_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n   \"use strict\";\n\n   var unicode = require(\"../unicode\");\n   var Range = require(\"../range\").Range;\n   var oop = require(\"../lib/oop\");\n   var TextMode = require(\"./text\").Mode;\n   var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n   var RHighlightRules = require(\"./r_highlight_rules\").RHighlightRules;\n   var MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\n   var Mode = function(){\n      this.HighlightRules = RHighlightRules;\n      this.$outdent = new MatchingBraceOutdent();\n      this.$behaviour = this.$defaultBehaviour;\n   };\n   oop.inherits(Mode, TextMode);\n\n   (function() {\n      this.lineCommentStart = \"#\";\n      this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"._]+\", \"g\");\n\n      this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"._]|\\s])+\", \"g\");\n       this.$id = \"ace/mode/r\";\n   }).call(Mode.prototype);\n   exports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-razor.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CSharpHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\n        \"constant.language\": \"null|true|false\"\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : /'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/\n            }, {\n                token : \"string\", start : '\"', end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"string\", start : '@\"', end : '\"', next:[\n                    {token: \"constant.language.escape\", regex: '\"\"'}\n                ]\n            }, {\n                token : \"string\", start : /\\$\"/, end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?$)|{{/},\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"keyword\",\n                regex : \"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(CSharpHighlightRules, TextHighlightRules);\n\nexports.CSharpHighlightRules = CSharpHighlightRules;\n});\n\nace.define(\"ace/mode/razor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/csharp_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar CSharpHighlightRules = require(\"./csharp_highlight_rules\").CSharpHighlightRules;\n\nvar blockPrefix = 'razor-block-';\nvar RazorLangHighlightRules = function() {\n    CSharpHighlightRules.call(this);\n\n    var processPotentialCallback = function(value, stackItem) {\n        if (typeof stackItem === \"function\")\n            return stackItem(value);\n\n        return stackItem;\n    };\n\n    var inBraces = 'in-braces';\n    this.$rules.start.unshift({\n        regex: '[\\\\[({]',\n        onMatch: function(value, state, stack) {\n            var prefix = /razor-[^\\-]+-/.exec(state)[0];\n\n            stack.unshift(value);\n            stack.unshift(prefix + inBraces);\n            this.next = prefix + inBraces;\n            return 'paren.lparen';\n        }\n    }, {\n        start: \"@\\\\*\",\n        end: \"\\\\*@\",\n        token: \"comment\"\n    });\n\n    var parentCloseMap = {\n        '{': '}',\n        '[': ']',\n        '(': ')'\n    };\n\n    this.$rules[inBraces] = lang.deepCopy(this.$rules.start);\n    this.$rules[inBraces].unshift({\n        regex: '[\\\\])}]',\n        onMatch: function(value, state, stack) {\n            var open = stack[1];\n            if (parentCloseMap[open] !== value)\n                return 'invalid.illegal';\n\n            stack.shift(); // exit in-braces block\n            stack.shift(); // exit brace marker\n            this.next = processPotentialCallback(value, stack[0]) || 'start';\n            return 'paren.rparen';\n        }\n    });\n};\n\noop.inherits(RazorLangHighlightRules, CSharpHighlightRules);\n\nvar RazorHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var blockStartRule = {\n        regex: '@[({]|@functions{',\n        onMatch: function(value, state, stack) {\n            stack.unshift(value);\n            stack.unshift('razor-block-start');\n            this.next = 'razor-block-start';\n            return 'punctuation.block.razor';\n        }\n    };\n\n    var blockEndMap = {\n        '@{': '}',\n        '@(': ')',\n        '@functions{':'}'\n    };\n\n    var blockEndRule = {\n        regex: '[})]',\n        onMatch: function(value, state, stack) {\n            var blockStart = stack[1];\n            if (blockEndMap[blockStart] !== value)\n                return 'invalid.illegal';\n\n            stack.shift(); // exit razor block\n            stack.shift(); // remove block type marker\n            this.next = stack.shift() || 'start';\n            return 'punctuation.block.razor';\n        }\n    };\n\n    var shortStartRule = {\n        regex: \"@(?![{(])\",\n        onMatch: function(value, state, stack) {\n            stack.unshift(\"razor-short-start\");\n            this.next = \"razor-short-start\";\n            return 'punctuation.short.razor';\n        }\n    };\n\n    var shortEndRule = {\n        token: \"\",\n        regex: \"(?=[^A-Za-z_\\\\.()\\\\[\\\\]])\",\n        next: 'pop'\n    };\n\n    var ifStartRule = {\n        regex: \"@(?=if)\",\n        onMatch: function(value, state, stack) {\n            stack.unshift(function(value) {\n                if (value !== '}')\n                    return 'start';\n\n                return stack.shift() || 'start';\n            });\n            this.next = 'razor-block-start';\n            return 'punctuation.control.razor';\n        }\n    };\n\n    var razorStartRules = [\n        {\n            start: \"@\\\\*\",\n            end: \"\\\\*@\",\n            token: \"comment\"\n        },\n        {\n            token: [\"meta.directive.razor\", \"text\", \"identifier\"],\n            regex: \"^(\\\\s*@model)(\\\\s+)(.+)$\"\n        },\n        blockStartRule,\n        shortStartRule\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], razorStartRules);\n\n    this.embedRules(RazorLangHighlightRules, \"razor-block-\", [blockEndRule], [\"start\"]);\n    this.embedRules(RazorLangHighlightRules, \"razor-short-\", [shortEndRule], [\"start\"]);\n\n    this.normalizeRules();\n};\n\noop.inherits(RazorHighlightRules, HtmlHighlightRules);\n\nexports.RazorHighlightRules = RazorHighlightRules;\nexports.RazorLangHighlightRules = RazorLangHighlightRules;\n});\n\nace.define(\"ace/mode/razor_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar keywords = [\n    \"abstract\", \"as\", \"base\", \"bool\",\n    \"break\", \"byte\", \"case\", \"catch\",\n    \"char\", \"checked\", \"class\", \"const\",\n    \"continue\", \"decimal\", \"default\", \"delegate\",\n    \"do\", \"double\",\"else\",\"enum\",\n    \"event\", \"explicit\", \"extern\", \"false\",\n    \"finally\", \"fixed\", \"float\", \"for\",\n    \"foreach\", \"goto\", \"if\", \"implicit\",\n    \"in\", \"int\", \"interface\", \"internal\",\n    \"is\", \"lock\", \"long\", \"namespace\",\n    \"new\", \"null\", \"object\", \"operator\",\n    \"out\", \"override\", \"params\", \"private\",\n    \"protected\", \"public\", \"readonly\", \"ref\",\n    \"return\", \"sbyte\", \"sealed\", \"short\",\n    \"sizeof\", \"stackalloc\", \"static\", \"string\",\n    \"struct\", \"switch\", \"this\", \"throw\",\n    \"true\", \"try\", \"typeof\", \"uint\",\n    \"ulong\", \"unchecked\", \"unsafe\", \"ushort\",\n    \"using\", \"var\", \"virtual\", \"void\",\n    \"volatile\", \"while\"];\n\nvar shortHands  = [\n    \"Html\", \"Model\", \"Url\", \"Layout\"\n];\n    \nvar RazorCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        \n        if(state.lastIndexOf(\"razor-short-start\") == -1 && state.lastIndexOf(\"razor-block-start\") == -1)\n            return [];\n        \n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        \n        if(state.lastIndexOf(\"razor-short-start\") != -1) {\n            return this.getShortStartCompletions(state, session, pos, prefix);\n        }\n        \n        if(state.lastIndexOf(\"razor-block-start\") != -1) {\n            return this.getKeywordCompletions(state, session, pos, prefix);\n        }\n\n        \n    };\n    \n    this.getShortStartCompletions = function(state, session, pos, prefix) {\n        return shortHands.map(function(element){\n            return {\n                value: element,\n                meta: \"keyword\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getKeywordCompletions = function(state, session, pos, prefix) {\n        return shortHands.concat(keywords).map(function(element){\n            return {\n                value: element,\n                meta: \"keyword\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(RazorCompletions.prototype);\n\nexports.RazorCompletions = RazorCompletions;\n\n});\n\nace.define(\"ace/mode/razor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/razor_highlight_rules\",\"ace/mode/razor_completions\",\"ace/mode/html_completions\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar RazorHighlightRules = require(\"./razor_highlight_rules\").RazorHighlightRules;\nvar RazorCompletions = require(\"./razor_completions\").RazorCompletions;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.$highlightRules = new RazorHighlightRules();\n    this.$completer = new RazorCompletions();\n    this.$htmlCompleter = new HtmlCompletions();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.getCompletions = function(state, session, pos, prefix) {\n        var razorToken = this.$completer.getCompletions(state, session, pos, prefix);\n        var htmlToken = this.$htmlCompleter.getCompletions(state, session, pos, prefix);\n        return razorToken.concat(htmlToken);\n    };\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/razor\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-rdoc.js",
    "content": "ace.define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LatexHighlightRules = function() {  \n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            token : [\"keyword\", \"lparen\", \"variable.parameter\", \"rparen\", \"lparen\", \"storage.type\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"\n        }, {\n            token : [\"keyword\",\"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"\n        }, {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(verbatim)(})\",\n            next : \"verbatim\"\n        },  {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(lstlisting)(})\",\n            next : \"lstlisting\"\n        },  {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"\n        }, {\n            token : \"storage.type\",\n            regex : /\\\\verb\\b\\*?/,\n            next : [{\n                token : [\"keyword.operator\", \"string\", \"keyword.operator\"],\n                regex : \"(.)(.*?)(\\\\1|$)|\",\n                next : \"start\"\n            }]\n        }, {\n            token : \"storage.type\",\n            regex : \"\\\\\\\\[a-zA-Z]+\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\[^a-zA-Z]?\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"equation\"\n        }],\n        \"equation\" : [{\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"start\"\n        }, {\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"\n        }, {\n            token : \"error\", \n            regex : \"^\\\\s*$\", \n            next : \"start\" \n        }, {\n            defaultToken : \"string\"\n        }],\n        \"verbatim\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(verbatim)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }],\n        \"lstlisting\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(lstlisting)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\noop.inherits(LatexHighlightRules, TextHighlightRules);\n\nexports.LatexHighlightRules = LatexHighlightRules;\n\n});\n\nace.define(\"ace/mode/rdoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/latex_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LaTeXHighlightRules = require(\"./latex_highlight_rules\");\n\nvar RDocHighlightRules = function() {\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : \"text\", // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.text\", // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.text\",\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.text\",\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(RDocHighlightRules, TextHighlightRules);\n\nexports.RDocHighlightRules = RDocHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/rdoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rdoc_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RDocHighlightRules = require(\"./rdoc_highlight_rules\").RDocHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function(suppressHighlighting) {\n\tthis.HighlightRules = RDocHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.$id = \"ace/mode/rdoc\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-red.js",
    "content": "ace.define(\"ace/mode/red_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar RedHighlightRules = function() {\n\n    var compoundKeywords = \"\";        \n\n    this.$rules = {\n        \"start\" : [\n            {token : \"keyword.operator\", \n                regex: /\\s([\\-+%/=<>*]|(?:\\*\\*\\|\\/\\/|==|>>>?|<>|<<|=>|<=|=\\?))(\\s|(?=:))/},\n            {token : \"string.email\", regex : /\\w[-\\w._]*\\@\\w[-\\w._]*/},\n            {token : \"value.time\", regex : /\\b\\d+:\\d+(:\\d+)?/},\n            {token : \"string.url\", regex : /\\w[-\\w_]*\\:(\\/\\/)?\\w[-\\w._]*(:\\d+)?/},\n            {token : \"value.date\", regex : /(\\b\\d{1,4}[-/]\\d{1,2}[-/]\\d{1,2}|\\d{1,2}[-/]\\d{1,2}[-/]\\d{1,4})\\b/},\n            {token : \"value.tuple\", regex : /\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(\\.\\d{1,3}){0,9}/},\n            {token : \"value.pair\", regex: /[+-]?\\d+x[-+]?\\d+/},\n            {token : \"value.binary\", regex : /\\b2#{([01]{8})+}/},\n            {token : \"value.binary\", regex : /\\b64#{([\\w/=+])+}/},\n            {token : \"value.binary\", regex : /(16)?#{([\\dabcdefABCDEF][\\dabcdefABCDEF])*}/},\n            {token : \"value.issue\", regex : /#\\w[-\\w'*.]*/},\n            {token : \"value.numeric\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?e[-+]?\\d{1,3}\\%?(?!\\w)/},\n            {token : \"invalid.illegal\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?[a-zA-Z]/},\n            {token : \"value.numeric\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?(?![a-zA-Z])/},\n            {token : \"value.character\", regex : /#\"(\\^[-@/_~^\"HKLM\\[]|.)\"/},\n            {token : \"string.file\", regex : /%[-\\w\\.\\/]+/},\n            {token : \"string.tag\", regex : /</, next : \"tag\"},\n            {token : \"string\", regex : /\"/, next  : \"string\"},\n            {token : \"string.other\", regex : \"{\", next  : \"string.other\"},\n            {token : \"comment\", regex : \"comment [{]\", next : \"comment\"},\n            {token : \"comment\",  regex : /;.+$/},\n            {token : \"paren.map-start\", regex : \"#\\\\(\"},\n            {token : \"paren.block-start\", regex : \"[\\\\[]\"},\n            {token : \"paren.block-end\", regex : \"[\\\\]]\"},\n            {token : \"paren.parens-start\", regex : \"[(]\"},\n            {token : \"paren.parens-end\", regex : \"\\\\)\"},\n            {token : \"keyword\", regex : \"/local|/external\"},\n            {token : \"keyword.preprocessor\", regex : \"#(if|either|\" +\n                \"switch|case|include|do|macrolocal|reset|process|trace)\"},\n            {token : \"constant.datatype!\", regex : \n                \"(?:datatype|unset|none|logic|block|paren|string|\" +\n                \"file|url|char|integer|float|word|set-word|lit-word|\" +\n                \"get-word|refinement|issue|native|action|op|function|\" +\n                \"path|lit-path|set-path|get-path|routine|bitset|point|\" + \n                \"object|typeset|error|vector|hash|pair|percent|tuple|\" +\n                \"map|binary|time|tag|email|handle|date|image|event|\" +\n                \"series|any-type|number|any-object|scalar|\" +\n                \"any-string|any-word|any-function|any-block|any-list|\" +\n                \"any-path|immediate|all-word|internal|external|default)!(?![-!?\\\\w~])\"},\n            {token : \"keyword.function\", regex : \n                \"\\\\b(?:collect|quote|on-parse-event|math|last|source|expand|\" +\n                \"show|context|object|input|quit|dir|make-dir|cause-error|\" +\n                \"error\\\\?|none\\\\?|block\\\\?|any-list\\\\?|word\\\\?|char\\\\?|\" +\n                \"any-string\\\\?|series\\\\?|binary\\\\?|attempt|url\\\\?|\" +\n                \"string\\\\?|suffix\\\\?|file\\\\?|object\\\\?|body-of|first|\" +\n                \"second|third|mod|clean-path|dir\\\\?|to-red-file|\" +\n                \"normalize-dir|list-dir|pad|empty\\\\?|dirize|offset\\\\?|\" +\n                \"what-dir|expand-directives|load|split-path|change-dir|\" +\n                \"to-file|path-thru|save|load-thru|View|float\\\\?|to-float|\" +\n                \"charset|\\\\?|probe|set-word\\\\?|q|words-of|replace|repend|\" +\n                \"react|function\\\\?|spec-of|unset\\\\?|halt|op\\\\?|\" +\n                \"any-function\\\\?|to-paren|tag\\\\?|routine|class-of|\" +\n                \"size-text|draw|handle\\\\?|link-tabs-to-parent|\" +\n                \"link-sub-to-parent|on-face-deep-change*|\" +\n                \"update-font-faces|do-actor|do-safe|do-events|pair\\\\?|\" +\n                \"foreach-face|hex-to-rgb|issue\\\\?|alter|path\\\\?|\" +\n                \"typeset\\\\?|datatype\\\\?|set-flag|layout|extract|image\\\\?|\" +\n                \"get-word\\\\?|to-logic|to-set-word|to-block|center-face|\" +\n                \"dump-face|request-font|request-file|request-dir|rejoin|\" +\n                \"ellipsize-at|any-block\\\\?|any-object\\\\?|map\\\\?|keys-of|\" +\n                \"a-an|also|parse-func-spec|help-string|what|routine\\\\?|\" +\n                \"action\\\\?|native\\\\?|refinement\\\\?|common-substr|\" +\n                \"red-complete-file|red-complete-path|unview|comment|\\\\?\\\\?|\" +\n                \"fourth|fifth|values-of|bitset\\\\?|email\\\\?|get-path\\\\?|\" +\n                \"hash\\\\?|integer\\\\?|lit-path\\\\?|lit-word\\\\?|logic\\\\?|\" +\n                \"paren\\\\?|percent\\\\?|set-path\\\\?|time\\\\?|tuple\\\\?|date\\\\?|\" +\n                \"vector\\\\?|any-path\\\\?|any-word\\\\?|number\\\\?|immediate\\\\?|\" +\n                \"scalar\\\\?|all-word\\\\?|to-bitset|to-binary|to-char|to-email|\" +\n                \"to-get-path|to-get-word|to-hash|to-integer|to-issue|\" +\n                \"to-lit-path|to-lit-word|to-map|to-none|to-pair|to-path|\" +\n                \"to-percent|to-refinement|to-set-path|to-string|to-tag|\" +\n                \"to-time|to-typeset|to-tuple|to-unset|to-url|to-word|\" +\n                \"to-image|to-date|parse-trace|modulo|eval-set-path|\" +\n                \"extract-boot-args|flip-exe-flag|split|do-file|\" +\n                \"exists-thru\\\\?|read-thru|do-thru|cos|sin|tan|acos|asin|\" +\n                \"atan|atan2|sqrt|clear-reactions|dump-reactions|react\\\\?|\" +\n                \"within\\\\?|overlap\\\\?|distance\\\\?|face\\\\?|metrics\\\\?|\" +\n                \"get-scroller|insert-event-func|remove-event-func|\" +\n                \"set-focus|help|fetch-help|about|ls|ll|pwd|cd|\" +\n                \"red-complete-input|matrix)(?![-!?\\\\w~])\"},\n            {token : \"keyword.action\", regex : \n                \"\\\\b(?:to|remove|copy|insert|change|clear|move|poke|put|\" +\n                \"random|reverse|sort|swap|take|trim|add|subtract|\" +\n                \"divide|multiply|make|reflect|form|mold|modify|\" +\n                \"absolute|negate|power|remainder|round|even\\\\?|odd\\\\?|\" +\n                \"and~|complement|or~|xor~|append|at|back|find|skip|\" +\n                \"tail|head|head\\\\?|index\\\\?|length\\\\?|next|pick|\" +\n                \"select|tail\\\\?|delete|read|write)(?![-_!?\\\\w~])\"\n            },\n            {token : \"keyword.native\", regex : \n                \"\\\\b(?:not|any|set|uppercase|lowercase|checksum|\" +\n                \"try|catch|browse|throw|all|as|\" +\n                \"remove-each|func|function|does|has|do|reduce|\" +\n                \"compose|get|print|prin|equal\\\\?|not-equal\\\\?|\" +\n                \"strict-equal\\\\?|lesser\\\\?|greater\\\\?|lesser-or-equal\\\\?|\" +\n                \"greater-or-equal\\\\?|same\\\\?|type\\\\?|stats|bind|in|parse|\" +\n                \"union|unique|intersect|difference|exclude|\" +\n                \"complement\\\\?|dehex|negative\\\\?|positive\\\\?|max|min|\" +\n                \"shift|to-hex|sine|cosine|tangent|arcsine|arccosine|\" +\n                \"arctangent|arctangent2|NaN\\\\?|zero\\\\?|log-2|log-10|log-e|\" +\n                \"exp|square-root|construct|value\\\\?|as-pair|\" +\n                \"extend|debase|enbase|to-local-file|\" +\n                \"wait|unset|new-line|new-line\\\\?|context\\\\?|set-env|\" +\n                \"get-env|list-env|now|sign\\\\?|call|size\\\\?)(?![-!?\\\\w~])\"\n            },\n            {token : \"keyword\", regex : \n                \"\\\\b(?:Red(?=\\\\s+\\\\[)|object|context|make|self|keep)(?![-!?\\\\w~])\"\n            },\n            {token: \"variable.language\", regex : \"this\"},\n            {token: \"keyword.control\", regex : \n                \"(?:while|if|return|case|unless|either|until|loop|repeat|\" +\n                \"forever|foreach|forall|switch|break|continue|exit)(?![-!?\\\\w~])\"},\n            {token: \"constant.language\", regex : \n                \"\\\\b(?:true|false|on|off|yes|none|no)(?![-!?\\\\w~])\"},\n            {token: \"constant.numeric\", regex : /\\bpi(?![^-_])/},\n            {token: \"constant.character\", regex : \"\\\\b(space|tab|newline|cr|lf)(?![-!?\\\\w~])\"},\n            {token: \"keyword.operator\", regex : \"\\s(or|and|xor|is)\\s\"},\n            {token : \"variable.get-path\", regex : /:\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},\n            {token : \"variable.set-path\", regex : /\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*:/},\n            {token : \"variable.lit-path\", regex : /'\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},\n            {token : \"variable.path\", regex : /\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},\n            {token : \"variable.refinement\", regex : /\\/\\w[-\\w'*.?!]*/}, \n            {token : \"keyword.view.style\", regex : \n                \"\\\\b(?:window|base|button|text|field|area|check|\" +\n                \"radio|progress|slider|camera|text-list|\" +\n                \"drop-list|drop-down|panel|group-box|\" +\n                \"tab-panel|h1|h2|h3|h4|h5|box|image|init)(?![-!?\\\\w~])\"},\n            {token : \"keyword.view.event\", regex : \n                \"\\\\b(?:detect|on-detect|time|on-time|drawing|on-drawing|\" +\n                \"scroll|on-scroll|down|on-down|up|on-up|mid-down|\" +\n                \"on-mid-down|mid-up|on-mid-up|alt-down|on-alt-down|\" +\n                \"alt-up|on-alt-up|aux-down|on-aux-down|aux-up|\" +\n                \"on-aux-up|wheel|on-wheel|drag-start|on-drag-start|\" +\n                \"drag|on-drag|drop|on-drop|click|on-click|dbl-click|\" +\n                \"on-dbl-click|over|on-over|key|on-key|key-down|\" +\n                \"on-key-down|key-up|on-key-up|ime|on-ime|focus|\" +\n                \"on-focus|unfocus|on-unfocus|select|on-select|\" +\n                \"change|on-change|enter|on-enter|menu|on-menu|close|\" +\n                \"on-close|move|on-move|resize|on-resize|moving|\" +\n                \"on-moving|resizing|on-resizing|zoom|on-zoom|pan|\" +\n                \"on-pan|rotate|on-rotate|two-tap|on-two-tap|\" +\n                \"press-tap|on-press-tap|create|on-create|created|on-created)(?![-!?\\\\w~])\"},\n            {token : \"keyword.view.option\", regex : \n                \"\\\\b(?:all-over|center|color|default|disabled|down|\" +\n                \"flags|focus|font|font-color|font-name|\" +\n                \"font-size|hidden|hint|left|loose|name|\" +\n                \"no-border|now|rate|react|select|size|space)(?![-!?\\\\w~])\"},\n            {token : \"constant.other.colour\", regex : \"\\\\b(?:Red|white|transparent|\" +\n                \"black|gray|aqua|beige|blue|brick|brown|coal|coffee|\" +\n                \"crimson|cyan|forest|gold|green|ivory|khaki|leaf|linen|\" +\n                \"magenta|maroon|mint|navy|oldrab|olive|orange|papaya|\" +\n                \"pewter|pink|purple|reblue|rebolor|sienna|silver|sky|\" +\n                \"snow|tanned|teal|violet|water|wheat|yello|yellow|glass)(?![-!?\\\\w~])\"},\n            {token : \"variable.get-word\", regex : /\\:\\w[-\\w'*.?!]*/}, \n            {token : \"variable.set-word\", regex : /\\w[-\\w'*.?!]*\\:/}, \n            {token : \"variable.lit-word\", regex : /'\\w[-\\w'*.?!]*/},\n            {token : \"variable.word\", regex : /\\b\\w+[-\\w'*.!?]*/},\n            {caseInsensitive: true}\n        ],\n        \"string\" : [\n            {token : \"string\", regex : /\"/, next : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"string.other\" : [\n            {token : \"string.other\", regex : /}/, next : \"start\"},\n            {defaultToken : \"string.other\"}\n        ],\n        \"tag\" : [\n            {token : \"string.tag\", regex : />/, next : \"start\"},\n            {defaultToken : \"string.tag\"}\n        ],\n        \"comment\" : [\n            {token : \"comment\", regex : /}/, next : \"start\"},\n            {defaultToken : \"comment\"}\n        ]\n    };\n};\noop.inherits(RedHighlightRules, TextHighlightRules);\n\nexports.RedHighlightRules = RedHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/red\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/red_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RedHighlightRules = require(\"./red_highlight_rules\").RedHighlightRules;\nvar RedFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = RedHighlightRules;\n    this.foldingRules = new RedFoldMode();\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.blockComment = { start: \"comment {\", end: \"}\" };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\[\\(]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/red\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-redshift.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"variable\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next  : \"string\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"text\", // single quoted strings are not allowed\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"comment\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.start\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\*\",\n                next  : \"comment\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\", // comments are not allowed, but who cares?\n                regex : \"\\\\*\\\\/\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\nace.define(\"ace/mode/redshift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/json_highlight_rules\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\n\nvar RedshiftHighlightRules = function() {\n    var keywords = (\n        \"aes128|aes256|all|allowoverwrite|analyse|analyze|and|any|array|as|asc|authorization|backup|\" + \n        \"between|binary|blanksasnull|both|bytedict|bzip2|case|cast|check|collate|column|constraint|create|credentials|\" + \n        \"cross|current_date|current_time|current_timestamp|current_user|current_user_id|default|deferrable|deflate|defrag|delta|\" + \n        \"delta32k|desc|disable|distinct|do|else|emptyasnull|enable|encode|encrypt|encryption|end|except|explicit|false|for|foreign|\" + \n        \"freeze|from|full|globaldict256|globaldict64k|grant|group|gzip|having|identity|ignore|ilike|in|initially|inner|intersect|into|is|\" + \n        \"isnull|join|leading|left|like|limit|localtime|localtimestamp|lun|luns|lzo|lzop|minus|mostly13|mostly32|mostly8|natural|new|not|notnull|\" + \n        \"null|nulls|off|offline|offset|old|on|only|open|or|order|outer|overlaps|parallel|partition|percent|permissions|placing|primary|raw|readratio|\" +\n        \"recover|references|rejectlog|resort|restore|right|select|session_user|similar|some|sysdate|system|table|tag|tdes|text255|text32k|then|timestamp|\" + \n        \"to|top|trailing|true|truncatecolumns|union|unique|user|using|verbose|wallet|when|where|with|without\"\n    );\n\n\n    var builtinFunctions = (\n        \"current_schema|current_schemas|has_database_privilege|has_schema_privilege|has_table_privilege|age|current_time|current_timestamp|localtime|\" + \n        \"isfinite|now|ascii|get_bit|get_byte|octet_length|set_bit|set_byte|to_ascii|avg|count|listagg|max|min|stddev_samp|stddev_pop|sum|var_samp|var_pop|\" + \n        \"bit_and|bit_or|bool_and|bool_or|avg|count|cume_dist|dense_rank|first_value|last_value|lag|lead|listagg|max|median|min|nth_value|ntile|percent_rank|\" + \n        \"percentile_cont|percentile_disc|rank|ratio_to_report|row_number|case|coalesce|decode|greatest|least|nvl|nvl2|nullif|add_months|age|convert_timezone|\" +\n        \"current_date|timeofday|current_time|current_timestamp|date_cmp|date_cmp_timestamp|date_part_year|dateadd|datediff|date_part|date_trunc|extract|getdate|\" +\n        \"interval_cmp|isfinite|last_day|localtime|localtimestamp|months_between|next_day|now|sysdate|timestamp_cmp|timestamp_cmp_date|trunc|abs|acos|asin|atan|\" +\n        \"atan2|cbrt|ceiling|ceil|checksum|cos|cot|degrees|dexp|dlog1|dlog10|exp|floor|ln|log|mod|pi|power|radians|random|round|sin|sign|sqrt|tan|trunc|ascii|\" +\n        \"bpcharcmp|btrim|bttext_pattern_cmp|char_length|character_length|charindex|chr|concat|crc32|func_sha1|get_bit|get_byte|initcap|left|right|len|length|\" +\n        \"lower|lpad|rpad|ltrim|md5|octet_length|position|quote_ident|quote_literal|regexp_count|regexp_instr|regexp_replace|regexp_substr|repeat|replace|replicate|\" +\n        \"reverse|rtrim|set_bit|set_byte|split_part|strpos|strtol|substring|textlen|to_ascii|to_hex|translate|trim|upper|json_array_length|json_extract_array_element_text|\" +\n        \"json_extract_path_text|cast|convert|to_char|to_date|to_number|current_database|current_schema|current_schemas|current_user|current_user_id|has_database_privilege|\" +\n        \"has_schema_privilege|has_table_privilege|pg_backend_pid|pg_last_copy_count|pg_last_copy_id|pg_last_query_id|pg_last_unload_count|session_user|slice_num|user|version\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n\n\n    var sqlRules = [{\n            token : \"string\", // single line string -- assume dollar strings if multi-line for now\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"variable.language\", // pg identifier\n            regex : '\".*?\"'\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\" // TODO - Unicode in identifiers\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\" +\n                    \"\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\" +\n                    \"\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|\" +\n                    \"~=|~>=~|~>~|~~|~~\\\\*\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    ];\n\n\n    this.$rules = {\n        \"start\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            },{\n                token : \"keyword.statementBegin\",\n                regex : \"^[a-zA-Z]+\", // Could enumerate starting keywords but this allows things to work when new statements are added.\n                next : \"statement\"\n            },{\n                token : \"support.buildin\", // psql directive\n                regex : \"^\\\\\\\\[\\\\S]+.*$\"\n            }\n        ],\n\n        \"statement\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentStatement\"\n            }, {\n                token : \"statementEnd\",\n                regex : \";\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$json\\\\$\",\n                next : \"json-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$$\", // dollar quote at the end of a line\n                next : \"dollarSql\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarStatementString\"\n            }\n        ].concat(sqlRules),\n\n        \"dollarSql\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentDollarSql\"\n            }, {\n                token : \"string\", // end quoting with dollar at the start of a line\n                regex : \"^\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSqlString\"\n            }\n        ].concat(sqlRules),\n\n        \"comment\" : [{\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"commentStatement\" : [{\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"statement\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"commentDollarSql\" : [{\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"dollarSql\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"dollarStatementString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"dollarSqlString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSql\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.embedRules(JsonHighlightRules, \"json-\", [{token : \"string\", regex : \"\\\\$json\\\\$\", next : \"statement\"}]);\n};\n\noop.inherits(RedshiftHighlightRules, TextHighlightRules);\n\nexports.RedshiftHighlightRules = RedshiftHighlightRules;\n});\n\nace.define(\"ace/mode/redshift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/redshift_highlight_rules\",\"ace/range\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar RedshiftHighlightRules = require(\"./redshift_highlight_rules\").RedshiftHighlightRules;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = RedshiftHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) { \n        if (state == \"start\" || state == \"keyword.statementEnd\") {\n            return \"\";\n        } else {\n            return this.$getIndent(line); // Keep whatever indent the previous line has\n        }\n    };\n\n    this.$id = \"ace/mode/redshift\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-rhtml.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TexHighlightRules = function(textClass) {\n\n    if (!textClass)\n        textClass = \"text\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : textClass, // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : textClass,\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass, // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(TexHighlightRules, TextHighlightRules);\n\nexports.TexHighlightRules = TexHighlightRules;\n});\n\nace.define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"], function(require, exports, module)\n{\n\n   var oop = require(\"../lib/oop\");\n   var lang = require(\"../lib/lang\");\n   var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n   var TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\n\n   var RHighlightRules = function()\n   {\n\n      var keywords = lang.arrayToMap(\n            (\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\")\n                  .split(\"|\")\n            );\n\n      var buildinConstants = lang.arrayToMap(\n            (\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|\" +\n             \"NA_complex_\").split(\"|\")\n            );\n\n      this.$rules = {\n         \"start\" : [\n            {\n               token : \"comment.sectionhead\",\n               regex : \"#+(?!').*(?:----|====|####)\\\\s*$\"\n            },\n            {\n               token : \"comment\",\n               regex : \"#+'\",\n               next : \"rd-start\"\n            },\n            {\n               token : \"comment\",\n               regex : \"#.*$\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : '[\"]',\n               next : \"qqstring\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : \"[']\",\n               next : \"qstring\"\n            },\n            {\n               token : \"constant.numeric\", // hex\n               regex : \"0[xX][0-9a-fA-F]+[Li]?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // explicit integer\n               regex : \"\\\\d+L\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number\n               regex : \"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number with leading decimal\n               regex : \"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.language.boolean\",\n               regex : \"(?:TRUE|FALSE|T|F)\\\\b\"\n            },\n            {\n               token : \"identifier\",\n               regex : \"`.*?`\"\n            },\n            {\n               onMatch : function(value) {\n                  if (keywords[value])\n                     return \"keyword\";\n                  else if (buildinConstants[value])\n                     return \"constant.language\";\n                  else if (value == '...' || value.match(/^\\.\\.\\d+$/))\n                     return \"variable.language\";\n                  else\n                     return \"identifier\";\n               },\n               regex : \"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"\n            },\n            {\n               token : \"keyword.operator\",\n               regex : \"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"\n            },\n            {\n               token : \"keyword.operator\", // infix operators\n               regex : \"%.*?%\"\n            },\n            {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n            },\n            {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])}]\"\n            },\n            {\n               token : \"text\",\n               regex : \"\\\\s+\"\n            }\n         ],\n         \"qqstring\" : [\n            {\n               token : \"string\",\n               regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ],\n         \"qstring\" : [\n            {\n               token : \"string\",\n               regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ]\n      };\n\n      var rdRules = new TexHighlightRules(\"comment\").getRules();\n      for (var i = 0; i < rdRules[\"start\"].length; i++) {\n         rdRules[\"start\"][i].token += \".virtual-comment\";\n      }\n\n      this.addRules(rdRules, \"rd-\");\n      this.$rules[\"rd-start\"].unshift({\n          token: \"text\",\n          regex: \"^\",\n          next: \"start\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"keyword\",\n         regex : \"@(?!@)[^ ]*\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"comment\",\n         regex : \"@@\"\n      });\n      this.$rules[\"rd-start\"].push({\n         token : \"comment\",\n         regex : \"[^%\\\\\\\\[({\\\\])}]+\"\n      });\n   };\n\n   oop.inherits(RHighlightRules, TextHighlightRules);\n\n   exports.RHighlightRules = RHighlightRules;\n});\n\nace.define(\"ace/mode/rhtml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/r_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar RHighlightRules = require(\"./r_highlight_rules\").RHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar RHtmlHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    this.$rules[\"start\"].unshift({\n        token: \"support.function.codebegin\",\n        regex: \"^<\" + \"!--\\\\s*begin.rcode\\\\s*(?:.*)\",\n        next: \"r-start\"\n    });\n\n    this.embedRules(RHighlightRules, \"r-\", [{\n        token: \"support.function.codeend\",\n        regex: \"^\\\\s*end.rcode\\\\s*-->\",\n        next: \"start\"\n    }], [\"start\"]);\n\n    this.normalizeRules();\n};\noop.inherits(RHtmlHighlightRules, TextHighlightRules);\n\nexports.RHtmlHighlightRules = RHtmlHighlightRules;\n});\n\nace.define(\"ace/mode/rhtml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/rhtml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\n\nvar RHtmlHighlightRules = require(\"./rhtml_highlight_rules\").RHtmlHighlightRules;\n\nvar Mode = function(doc, session) {\n   HtmlMode.call(this);\n   this.$session = session;\n   this.HighlightRules = RHtmlHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n   this.insertChunkInfo = {\n      value: \"<!--begin.rcode\\n\\nend.rcode-->\\n\",\n      position: {row: 0, column: 15}\n   };\n    \n   this.getLanguageMode = function(position)\n   {\n      return this.$session.getState(position.row).match(/^r-/) ? 'R' : 'HTML';\n   };\n\n    this.$id = \"ace/mode/rhtml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-rst.js",
    "content": "ace.define(\"ace/mode/rst_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar RSTHighlightRules = function() {\n\n  var tokens = {\n    title: \"markup.heading\",\n    list: \"markup.heading\",\n    table: \"constant\",\n    directive: \"keyword.operator\",\n    entity: \"string\",\n    link: \"markup.underline.list\",\n    bold: \"markup.bold\",\n    italic: \"markup.italic\",\n    literal: \"support.function\",\n    comment: \"comment\"\n  };\n\n  var startStringPrefix = \"(^|\\\\s|[\\\"'(<\\\\[{\\\\-/:])\";\n  var endStringSuffix = \"(?:$|(?=\\\\s|[\\\\\\\\.,;!?\\\\-/:\\\"')>\\\\]}]))\";\n\n  this.$rules = {\n    \"start\": [\n      {\n        token : tokens.title,\n        regex : \"(^)([\\\\=\\\\-`:\\\\.'\\\"~\\\\^_\\\\*\\\\+#])(\\\\2{2,}\\\\s*$)\"\n      },\n      {\n        token : [\"text\", tokens.directive, tokens.literal],\n        regex : \"(^\\\\s*\\\\.\\\\. )([^: ]+::)(.*$)\",\n        next  : \"codeblock\"\n      },\n      {\n        token : tokens.directive,\n        regex : \"::$\",\n        next  : \"codeblock\"\n      },\n      {\n        token : [tokens.entity, tokens.link],\n        regex : \"(^\\\\.\\\\. _[^:]+:)(.*$)\"\n      },\n      {\n        token : [tokens.entity, tokens.link],\n        regex : \"(^__ )(https?://.*$)\"\n      },\n      {\n        token : tokens.entity,\n        regex : \"^\\\\.\\\\. \\\\[[^\\\\]]+\\\\] \"\n      },\n      {\n        token : tokens.comment,\n        regex : \"^\\\\.\\\\. .*$\",\n        next  : \"comment\"\n      },\n      {\n        token : tokens.list,\n        regex : \"^\\\\s*[\\\\*\\\\+-] \"\n      },\n      {\n        token : tokens.list,\n        regex : \"^\\\\s*(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\. \"\n      },\n      {\n        token : tokens.list,\n        regex : \"^\\\\s*\\\\(?(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\) \"\n      },\n      {\n        token : tokens.table,\n        regex : \"^={2,}(?: +={2,})+$\"\n      },\n      {\n        token : tokens.table,\n        regex : \"^\\\\+-{2,}(?:\\\\+-{2,})+\\\\+$\"\n      },\n      {\n        token : tokens.table,\n        regex : \"^\\\\+={2,}(?:\\\\+={2,})+\\\\+$\"\n      },\n      {\n        token : [\"text\", tokens.literal],\n        regex : startStringPrefix + \"(``)(?=\\\\S)\",\n        next  : \"code\"\n      },\n      {\n        token : [\"text\", tokens.bold],\n        regex : startStringPrefix + \"(\\\\*\\\\*)(?=\\\\S)\",\n        next  : \"bold\"\n      },\n      {\n        token : [\"text\", tokens.italic],\n        regex : startStringPrefix + \"(\\\\*)(?=\\\\S)\",\n        next  : \"italic\"\n      },\n      {\n        token : tokens.entity,\n        regex : \"\\\\|[\\\\w\\\\-]+?\\\\|\"\n      },\n      {\n        token : tokens.entity,\n        regex : \":[\\\\w-:]+:`\\\\S\",\n        next  : \"entity\"\n      },\n      {\n        token : [\"text\", tokens.entity],\n        regex : startStringPrefix + \"(_`)(?=\\\\S)\",\n        next  : \"entity\"\n      },\n      {\n        token : tokens.entity,\n        regex : \"_[A-Za-z0-9\\\\-]+?\"\n      },\n      {\n        token : [\"text\", tokens.link],\n        regex : startStringPrefix + \"(`)(?=\\\\S)\",\n        next  : \"link\"\n      },\n      {\n        token : tokens.link,\n        regex : \"[A-Za-z0-9\\\\-]+?__?\"\n      },\n      {\n        token : tokens.link,\n        regex : \"\\\\[[^\\\\]]+?\\\\]_\"\n      },\n      {\n        token : tokens.link,\n        regex : \"https?://\\\\S+\"\n      },\n      {\n        token : tokens.table,\n        regex : \"\\\\|\"\n      }\n    ],\n    \"codeblock\": [\n      {\n        token : tokens.literal,\n        regex : \"^ +.+$\",\n        next : \"codeblock\"\n      },\n      {\n        token : tokens.literal,\n        regex : '^$',\n        next: \"codeblock\"\n      },\n      {\n        token : \"empty\",\n        regex : \"\",\n        next : \"start\"\n      }\n    ],\n    \"code\": [\n      {\n        token : tokens.literal,\n        regex : \"\\\\S``\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.literal\n      }\n    ],\n    \"bold\": [\n      {\n        token : tokens.bold,\n        regex : \"\\\\S\\\\*\\\\*\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.bold\n      }\n    ],\n    \"italic\": [\n      {\n        token : tokens.italic,\n        regex : \"\\\\S\\\\*\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.italic\n      }\n    ],\n    \"entity\": [\n      {\n        token : tokens.entity,\n        regex : \"\\\\S`\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.entity\n      }\n    ],\n    \"link\": [\n      {\n        token : tokens.link,\n        regex : \"\\\\S`__?\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.link\n      }\n    ],\n    \"comment\": [\n      {\n        token : tokens.comment,\n        regex : \"^ +.+$\",\n        next : \"comment\"\n      },\n      {\n        token : tokens.comment,\n        regex : '^$',\n        next: \"comment\"\n      },\n      {\n        token : \"empty\",\n        regex : \"\",\n        next : \"start\"\n      }\n    ]\n  };\n};\noop.inherits(RSTHighlightRules, TextHighlightRules);\n\nexports.RSTHighlightRules = RSTHighlightRules;\n});\n\nace.define(\"ace/mode/rst\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rst_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RSTHighlightRules = require(\"./rst_highlight_rules\").RSTHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = RSTHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n\n    this.$id = \"ace/mode/rst\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-ruby.js",
    "content": "ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length-tab.length, row, indent.length));\n        }\n    };\n\n    this.$id = \"ace/mode/ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-rust.js",
    "content": "ace.define(\"ace/mode/rust_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar stringEscape = /\\\\(?:[nrt0'\"\\\\]|x[\\da-fA-F]{2}|u\\{[\\da-fA-F]{6}\\})/.source;\nvar RustHighlightRules = function() {\n\n    this.$rules = { start:\n       [ { token: 'variable.other.source.rust',\n           regex: '\\'[a-zA-Z_][a-zA-Z0-9_]*(?![\\\\\\'])' },\n         { token: 'string.quoted.single.source.rust',\n           regex: \"'(?:[^'\\\\\\\\]|\" + stringEscape + \")'\" },\n         { token: 'identifier',\n           regex:  /r#[a-zA-Z_][a-zA-Z0-9_]*\\b/ },\n         {\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 1, currentState);\n                return \"string.quoted.raw.source.rust\";\n            },\n            regex : /r#*\"/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        var token = \"string.quoted.raw.source.rust\";\n                        if (value.length >= stack[1]) {\n                            if (value.length > stack[1])\n                                token = \"invalid\";\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return token;\n                    },\n                    regex : /\"#*/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string.quoted.raw.source.rust\"\n                }\n            ]\n         },\n         { token: 'string.quoted.double.source.rust',\n           regex: '\"',\n           push: \n            [ { token: 'string.quoted.double.source.rust',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.source.rust',\n                regex: stringEscape },\n              { defaultToken: 'string.quoted.double.source.rust' } ] },\n         { token: [ 'keyword.source.rust', 'text', 'entity.name.function.source.rust' ],\n           regex: '\\\\b(fn)(\\\\s+)((?:r#)?[a-zA-Z_][a-zA-Z0-9_]*)' },\n         { token: 'support.constant', regex: '\\\\b[a-zA-Z_][\\\\w\\\\d]*::' },\n         { token: 'keyword.source.rust',\n           regex: '\\\\b(?:abstract|alignof|as|become|box|break|catch|continue|const|crate|default|do|dyn|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\\\b' },\n         { token: 'storage.type.source.rust',\n           regex: '\\\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|u128|f16|f32|f64|i8|i16|i32|i64|i128|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\\\b' },\n         { token: 'variable.language.source.rust', regex: '\\\\bself\\\\b' },\n         \n         { token: 'comment.line.doc.source.rust',\n           regex: '//!.*$' },\n         { token: 'comment.line.double-dash.source.rust',\n           regex: '//.*$' },\n         { token: 'comment.start.block.source.rust',\n           regex: '/\\\\*',\n           stateName: 'comment',\n           push: \n            [ { token: 'comment.start.block.source.rust',\n                regex: '/\\\\*',\n                push: 'comment' },\n              { token: 'comment.end.block.source.rust',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.source.rust' } ] },\n         \n         { token: 'keyword.operator',\n           regex: /\\$|[-=]>|[-+%^=!&|<>]=?|[*/](?![*/])=?/ },\n         { token : \"punctuation.operator\", regex : /[?:,;.]/ },\n         { token : \"paren.lparen\", regex : /[\\[({]/ },\n         { token : \"paren.rparen\", regex : /[\\])}]/ },\n         { token: 'constant.language.source.rust',\n           regex: '\\\\b(?:true|false|Some|None|Ok|Err)\\\\b' },\n         { token: 'support.constant.source.rust',\n           regex: '\\\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\\\b' },\n         { token: 'meta.preprocessor.source.rust',\n           regex: '\\\\b\\\\w\\\\(\\\\w\\\\)*!|#\\\\[[\\\\w=\\\\(\\\\)_]+\\\\]\\\\b' },\n         { token: 'constant.numeric.source.rust',\n           regex: /\\b(?:0x[a-fA-F0-9_]+|0o[0-7_]+|0b[01_]+|[0-9][0-9_]*(?!\\.))(?:[iu](?:size|8|16|32|64|128))?\\b/ },\n         { token: 'constant.numeric.source.rust',\n           regex: /\\b(?:[0-9][0-9_]*)(?:\\.[0-9][0-9_]*)?(?:[Ee][+-][0-9][0-9_]*)?(?:f32|f64)?\\b/ } ] };\n    \n    this.normalizeRules();\n};\n\nRustHighlightRules.metaData = { fileTypes: [ 'rs', 'rc' ],\n      foldingStartMarker: '^.*\\\\bfn\\\\s*(\\\\w+\\\\s*)?\\\\([^\\\\)]*\\\\)(\\\\s*\\\\{[^\\\\}]*)?\\\\s*$',\n      foldingStopMarker: '^\\\\s*\\\\}',\n      name: 'Rust',\n      scopeName: 'source.rust' };\n\n\noop.inherits(RustHighlightRules, TextHighlightRules);\n\nexports.RustHighlightRules = RustHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/rust\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rust_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RustHighlightRules = require(\"./rust_highlight_rules\").RustHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RustHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\", nestable: true};\n    this.$quotes = { '\"': '\"' };\n    this.$id = \"ace/mode/rust\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-sass.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    );\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\n\nvar SassHighlightRules = function() {\n    ScssHighlightRules.call(this);\n    var start = this.$rules.start;\n    if (start[1].token == \"comment\") {\n        start.splice(1, 1, {\n            onMatch: function(value, currentState, stack) {\n                stack.unshift(this.next, -1, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\*/,\n            next: \"comment\"\n        }, {\n            token: \"error.invalid\",\n            regex: \"/\\\\*|[{;}]\"\n        }, {\n            token: \"support.type\",\n            regex: /^\\s*:[\\w\\-]+\\s/\n        });\n        \n        this.$rules.comment = [\n            {regex: /^\\s*/, onMatch: function(value, currentState, stack) {\n                if (stack[1] === -1)\n                    stack[1] = Math.max(stack[2], value.length - 1);\n                if (value.length <= stack[1]) {stack.shift();stack.shift();stack.shift();\n                    this.next = stack.shift();\n                    return \"text\";\n                } else {\n                    this.next = \"\";\n                    return \"comment\";\n                }\n            }, next: \"start\"},\n            {defaultToken: \"comment\"}\n        ];\n    }\n};\n\noop.inherits(SassHighlightRules, ScssHighlightRules);\n\nexports.SassHighlightRules = SassHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SassHighlightRules = require(\"./sass_highlight_rules\").SassHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SassHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {   \n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/sass\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-scad.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/scad_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar scadHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"module|if|else|for\",\n        \"constant.language\": \"NULL\"\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n              token : \"constant\", // <CONSTANT>\n              regex : \"<[a-zA-Z0-9.]+>\"\n            }, {\n              token : \"keyword\", // pre-compiler directivs\n              regex : \"(?:use|include)\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(scadHighlightRules, TextHighlightRules);\n\nexports.scadHighlightRules = scadHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/scad\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scad_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar scadHighlightRules = require(\"./scad_highlight_rules\").scadHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = scadHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/scad\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-scala.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/scala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ScalaHighlightRules = function() {\n\n    var keywords = (\n            \"case|default|do|else|for|if|match|while|throw|return|try|trye|catch|finally|yield|\" +\n            \"abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|null|\" +\n            \"override|package|private|protected|sealed|super|this|trait|type|val|var|with|\" +\n            \"assert|assume|require|print|println|printf|readLine|readBoolean|readByte|readShort|\" + // package scala\n            \"readChar|readInt|readLong|readFloat|readDouble\" // package scala\n    );\n\n    var buildinConstants = (\"true|false\");\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object|\" +\n        \"Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|\" +\n        \"Option|Array|Char|Byte|Int|Long|Nothing|\" +\n\n        \"App|Application|BufferedIterator|BigDecimal|BigInt|Console|Either|\" +\n        \"Enumeration|Equiv|Fractional|Function|IndexedSeq|Integral|Iterator|\" +\n        \"Map|Numeric|Nil|NotNull|Ordered|Ordering|PartialFunction|PartialOrdering|\" +\n        \"Product|Proxy|Range|Responder|Seq|Serializable|Set|Specializable|Stream|\" +\n        \"StringContext|Symbol|Traversable|TraversableOnce|Tuple|Vector|Pair|Triple\"\n\n\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"support.function\": langClasses,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\",\n                regex : '\"\"\"',\n                next : \"tstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)', // \" strings can't span multiple lines\n                next : \"string\"\n            }, {\n                token : \"symbol.constant\", // single line\n                regex : \"'[\\\\w\\\\d_]+\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"escape\",\n                regex : '\\\\\\\\\"'\n            }, {\n                token : \"string\",\n                regex : '\"',\n                next : \"start\"\n            }, {\n                token : \"string.invalid\",\n                regex : '[^\"\\\\\\\\]*$',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+'\n            }\n        ],\n        \"tstring\" : [\n            {\n                token : \"string\",\n                regex : '\"{3,5}',\n                next : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(ScalaHighlightRules, TextHighlightRules);\n\nexports.ScalaHighlightRules = ScalaHighlightRules;\n});\n\nace.define(\"ace/mode/scala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/scala_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar ScalaHighlightRules = require(\"./scala_highlight_rules\").ScalaHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = ScalaHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/scala\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-scheme.js",
    "content": "ace.define(\"ace/mode/scheme_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SchemeHighlightRules = function() {\n    var keywordControl = \"case|do|let|loop|if|else|when\";\n    var keywordOperator = \"eq?|eqv?|equal?|and|or|not|null?\";\n    var constantLanguage = \"#t|#f\";\n    var supportFunctions = \"cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control\": keywordControl,\n        \"keyword.operator\": keywordOperator,\n        \"constant.language\": constantLanguage,\n        \"support.function\": supportFunctions\n    }, \"identifier\", true);\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token : \"comment\",\n            regex : \";.*$\"\n        },\n        {\n            \"token\": [\"storage.type.function-type.scheme\", \"text\", \"entity.name.function.scheme\"],\n            \"regex\": \"(?:\\\\b(?:(define|define-syntax|define-macro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"\n        },\n        {\n            \"token\": \"punctuation.definition.constant.character.scheme\",\n            \"regex\": \"#:\\\\S+\"\n        },\n        {\n            \"token\": [\"punctuation.definition.variable.scheme\", \"variable.other.global.scheme\", \"punctuation.definition.variable.scheme\"],\n            \"regex\": \"(\\\\*)(\\\\S*)(\\\\*)\"\n        },\n        {\n            \"token\" : \"constant.numeric\", // hex\n            \"regex\" : \"#[xXoObB][0-9a-fA-F]+\"\n        }, \n        {\n            \"token\" : \"constant.numeric\", // float\n            \"regex\" : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\"\n        },\n        {\n                \"token\" : keywordMapper,\n                \"regex\" : \"[a-zA-Z_#][a-zA-Z0-9_\\\\-\\\\?\\\\!\\\\*]*\"\n        },\n        {\n            \"token\" : \"string\",\n            \"regex\" : '\"(?=.)',\n            \"next\"  : \"qqstring\"\n        }\n    ],\n    \"qqstring\": [\n        {\n            \"token\": \"constant.character.escape.scheme\",\n            \"regex\": \"\\\\\\\\.\"\n        },\n        {\n            \"token\" : \"string\",\n            \"regex\" : '[^\"\\\\\\\\]+',\n            \"merge\" : true\n        }, {\n            \"token\" : \"string\",\n            \"regex\" : \"\\\\\\\\$\",\n            \"next\"  : \"qqstring\",\n            \"merge\" : true\n        }, {\n            \"token\" : \"string\",\n            \"regex\" : '\"|$',\n            \"next\"  : \"start\",\n            \"merge\" : true\n        }\n    ]\n};\n\n};\n\noop.inherits(SchemeHighlightRules, TextHighlightRules);\n\nexports.SchemeHighlightRules = SchemeHighlightRules;\n});\n\nace.define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingParensOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\)/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\))/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        var match = line.match(/^(\\s+)/);\n        if (match) {\n            return match[1];\n        }\n\n        return \"\";\n    };\n\n}).call(MatchingParensOutdent.prototype);\n\nexports.MatchingParensOutdent = MatchingParensOutdent;\n});\n\nace.define(\"ace/mode/scheme\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scheme_highlight_rules\",\"ace/mode/matching_parens_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SchemeHighlightRules = require(\"./scheme_highlight_rules\").SchemeHighlightRules;\nvar MatchingParensOutdent = require(\"./matching_parens_outdent\").MatchingParensOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = SchemeHighlightRules;\n\tthis.$outdent = new MatchingParensOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = \";\";\n    this.minorIndentFunctions = [\"define\", \"lambda\", \"define-macro\", \"define-syntax\", \"syntax-rules\", \"define-record-type\", \"define-structure\"];\n\n    this.$toIndent = function(str) {\n        return str.split('').map(function(ch) {\n            if (/\\s/.exec(ch)) {\n                return ch;\n            } else {\n                return ' ';\n            }\n        }).join('');\n    };\n\n    this.$calculateIndent = function(line, tab) {\n        var baseIndent = this.$getIndent(line);\n        var delta = 0;\n        var isParen, ch;\n        for (var i = line.length - 1; i >= 0; i--) {\n            ch = line[i];\n            if (ch === '(') {\n                delta--;\n                isParen = true;\n            } else if (ch === '(' || ch === '[' || ch === '{') {\n                delta--;\n                isParen = false;\n            } else if (ch === ')' || ch === ']' || ch === '}') {\n                delta++;\n            }\n            if (delta < 0) {\n                break;\n            }\n        }\n        if (delta < 0 && isParen) {\n            i += 1;\n            var iBefore = i;\n            var fn = '';\n            while (true) {\n                ch = line[i];\n                if (ch === ' ' || ch === '\\t') {\n                    if(this.minorIndentFunctions.indexOf(fn) !== -1) {\n                        return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                    } else {\n                        return this.$toIndent(line.substring(0, i + 1));\n                    }\n                } else if (ch === undefined) {\n                    return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                }\n                fn += line[i];\n                i++;\n            }\n        } else if(delta < 0 && !isParen) {\n            return this.$toIndent(line.substring(0, i+1));\n        } else if(delta > 0) {\n            baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);\n            return baseIndent;\n        } else {\n            return baseIndent;\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$calculateIndent(line, tab);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.$id = \"ace/mode/scheme\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-scss.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    );\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\n\nvar Mode = function() {\n    this.HighlightRules = ScssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n\n    this.$id = \"ace/mode/scss\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-sh.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\nvar Mode = function() {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n   \n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/sh\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-sjs.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/sjs_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SJSHighlightRules = function() {\n    var parent = new JavaScriptHighlightRules({noES6: true});\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-6][0-7]?|\" + // oct\n        \"37[0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    var contextAware = function(f) {\n        f.isContextAware = true;\n        return f;\n    };\n\n    var ctxBegin = function(opts) {\n        return {\n            token: opts.token,\n            regex: opts.regex,\n            next: contextAware(function(currentState, stack) {\n                if (stack.length === 0)\n                    stack.unshift(currentState);\n                stack.unshift(opts.next);\n                return opts.next;\n            })\n        };\n    };\n\n    var ctxEnd = function(opts) {\n        return {\n            token: opts.token,\n            regex: opts.regex,\n            next: contextAware(function(currentState, stack) {\n                stack.shift();\n                return stack[0] || \"start\";\n            })\n        };\n    };\n\n    this.$rules = parent.$rules;\n    this.$rules.no_regex = [\n        {\n            token: \"keyword\",\n            regex: \"(waitfor|or|and|collapse|spawn|retract)\\\\b\"\n        },\n        {\n            token: \"keyword.operator\",\n            regex: \"(->|=>|\\\\.\\\\.)\"\n        },\n        {\n            token: \"variable.language\",\n            regex: \"(hold|default)\\\\b\"\n        },\n        ctxBegin({\n            token: \"string\",\n            regex: \"`\",\n            next: \"bstring\"\n        }),\n        ctxBegin({\n            token: \"string\",\n            regex: '\"',\n            next: \"qqstring\"\n        }),\n        ctxBegin({\n            token: \"string\",\n            regex: '\"',\n            next: \"qqstring\"\n        }),\n        {\n            token: [\"paren.lparen\", \"text\", \"paren.rparen\"],\n            regex: \"(\\\\{)(\\\\s*)(\\\\|)\",\n            next: \"block_arguments\"\n        }\n\n    ].concat(this.$rules.no_regex);\n\n    this.$rules.block_arguments = [\n        {\n            token: \"paren.rparen\",\n            regex: \"\\\\|\",\n            next: \"no_regex\"\n        }\n    ].concat(this.$rules.function_arguments);\n\n    this.$rules.bstring = [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        },\n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next: \"bstring\"\n        },\n        ctxBegin({\n            token : \"paren.lparen\",\n            regex : \"\\\\$\\\\{\",\n            next: \"string_interp\"\n        }),\n        ctxBegin({\n            token : \"paren.lparen\",\n            regex : \"\\\\$\",\n            next: \"bstring_interp_single\"\n        }),\n        ctxEnd({\n            token : \"string\",\n            regex : \"`\"\n        }),\n        {\n            defaultToken: \"string\"\n        }\n    ];\n    \n    this.$rules.qqstring = [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        },\n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next: \"qqstring\"\n        },\n        ctxBegin({\n            token : \"paren.lparen\",\n            regex : \"#\\\\{\",\n            next: \"string_interp\"\n        }),\n        ctxEnd({\n            token : \"string\",\n            regex : '\"'\n        }),\n        {\n            defaultToken: \"string\"\n        }\n    ];\n    var embeddableRules = [];\n    for (var i=0; i < this.$rules.no_regex.length; i++) {\n        var rule = this.$rules.no_regex[i];\n        var token = String(rule.token);\n        if (token.indexOf('paren') == -1 && (!rule.next || rule.next.isContextAware)) {\n            embeddableRules.push(rule);\n        }\n    }\n\n    this.$rules.string_interp = [\n        ctxEnd({\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }),\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: '{',\n            next: \"string_interp\"\n        })\n    ].concat(embeddableRules);\n    this.$rules.bstring_interp_single = [\n        {\n            token: [\"identifier\", \"paren.lparen\"],\n            regex: '(\\\\w+)(\\\\()',\n            next: 'bstring_interp_single_call'\n        },\n        ctxEnd({\n            token : \"identifier\",\n            regex : \"\\\\w*\"\n        })\n    ];\n    this.$rules.bstring_interp_single_call = [\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: \"\\\\(\",\n            next: \"bstring_interp_single_call\"\n        }),\n        ctxEnd({\n            token: \"paren.rparen\",\n            regex: \"\\\\)\"\n        })\n    ].concat(embeddableRules);\n};\noop.inherits(SJSHighlightRules, TextHighlightRules);\n\nexports.SJSHighlightRules = SJSHighlightRules;\n});\n\nace.define(\"ace/mode/sjs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/sjs_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JSMode = require(\"./javascript\").Mode;\nvar SJSHighlightRules = require(\"./sjs_highlight_rules\").SJSHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SJSHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, JSMode);\n(function() {\n    this.createWorker = function(session) {\n        return null;\n    };\n    this.$id = \"ace/mode/sjs\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-slim.js",
    "content": "ace.define(\"ace/mode/slim_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SlimHighlightRules = function() {\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"keyword\",\n                regex: /^(\\s*)(\\w+):\\s*/,\n                onMatch: function(value, state, stack, line) {\n                    var indent = /^\\s*/.exec(line)[0];\n                    var m = value.match(/^(\\s*)(\\w+):/);\n                    var language = m[2];\n                    if (!/^(javascript|ruby|coffee|markdown|css|scss|sass|less)$/.test(language))\n                        language = \"\";\n                    stack.unshift(\"language-embed\", [], [indent, language], state);\n                    return this.token;\n                },\n                stateName: \"language-embed\",\n                next: [{\n                    token: \"string\",\n                    regex: /^(\\s*)/,\n                    onMatch: function(value, state, stack, line) {\n                        var indent = stack[2][0];\n                        if (indent.length >= value.length) {\n                            stack.splice(0, 3);\n                            this.next = stack.shift();\n                            return this.token;\n                        }\n                        this.next = \"\";\n                        return [{type: \"text\", value: indent}];\n                    },\n                    next: \"\"\n                }, {\n                    token: \"string\",\n                    regex: /.+/,\n                    onMatch: function(value, state, stack, line) {\n                        var indent = stack[2][0];\n                        var language = stack[2][1];\n                        var embedState = stack[1];\n                        \n                        if (modes[language]) {\n                            var data = modes[language].getTokenizer().getLineTokens(line.slice(indent.length), embedState.slice(0));\n                            stack[1] = data.state;\n                            return data.tokens;\n                        }\n                        return this.token;\n                    }\n                }]\n            },\n            {\n                token: 'constant.begin.javascript.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(ruby):$'\n            }, {\n                token: 'constant.begin.coffeescript.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(markdown):$'\n            }, {\n                token: 'constant.begin.css.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin.scss.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(sass):$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(less):$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(erb):$'\n            }, {\n                token: 'keyword.html.tags.slim',\n                regex: '^(\\\\s*)((:?\\\\*(\\\\w)+)|doctype html|abbr|acronym|address|applet|area|article|aside|audio|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dialog|dfn|dir|div|dl|dt|embed|fieldset|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|link|li|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|source|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video|xmp|b|u|s|em|a)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)?\\\\b'\n\n            }, {\n                token: 'keyword.slim',\n                regex: '^(\\\\s*)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)'\n            }, {\n                token: \"string\",\n                regex: /^(\\s*)('|\\||\\/|(\\/!))\\s*/,\n                onMatch: function(val, state, stack, line) {\n                    var indent = /^\\s*/.exec(line)[0];\n                    if (stack.length < 1) {\n                        stack.push(this.next);\n                    }\n                    else {\n                        stack[0] = \"mlString\";\n                    }\n\n                    if (stack.length < 2) {\n                        stack.push(indent.length);\n                    }\n                    else {\n                        stack[1] = indent.length;\n                    }\n                    return this.token;\n                },\n                next: \"mlString\"\n            }, {\n                token: 'keyword.control.slim',\n                regex: '^(\\\\s*)(\\\\-|==|=)',\n                push: [{\n                    token: 'control.end.slim',\n                    regex: '$',\n                    next: \"pop\"\n                }, {\n                    include: \"rubyline\"\n                }, {\n                    include: \"misc\"\n                }]\n\n            }, {\n                token: 'paren',\n                regex: '\\\\(',\n                push: [{\n                    token: 'paren',\n                    regex: '\\\\)',\n                    next: \"pop\"\n                }, {\n                    include: \"misc\"\n                }]\n\n            }, {\n                token: 'paren',\n                regex: '\\\\[',\n                push: [{\n                    token: 'paren',\n                    regex: '\\\\]',\n                    next: \"pop\"\n                }, {\n                    include: \"misc\"\n                }]\n            }, {\n                include: \"misc\"\n            }\n        ],\n        \"mlString\": [{\n            token: \"indent\",\n            regex: /^\\s*/,\n            onMatch: function(val, state, stack) {\n                var curIndent = stack[1];\n\n                if (curIndent >= val.length) {\n                    this.next = \"start\";\n                    stack.splice(0);\n                }\n                else {\n                    this.next = \"mlString\";\n                }\n                return this.token;\n            },\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"rubyline\": [{\n            token: \"keyword.operator.ruby.embedded.slim\",\n            regex: \"(==|=)(<>|><|<'|'<|<|>)?|-\"\n        }, {\n            token: \"list.ruby.operators.slim\",\n            regex: \"(\\\\b)(for|in|do|if|else|elsif|unless|while|yield|not|and|or)\\\\b\"\n        }, {\n            token: \"string\",\n            regex: \"['](.)*?[']\"\n        }, {\n            token: \"string\",\n            regex: \"[\\\"](.)*?[\\\"]\"\n        }],\n        \"misc\": [{\n            token: 'class.variable.slim',\n            regex: '\\\\@([a-zA-Z_][a-zA-Z0-9_]*)\\\\b'\n        }, {\n            token: \"list.meta.slim\",\n            regex: \"(\\\\b)(true|false|nil)(\\\\b)\"\n        }, {\n            token: 'keyword.operator.equals.slim',\n            regex: '='\n        }, {\n            token: \"string\",\n            regex: \"['](.)*?[']\"\n        }, {\n            token: \"string\",\n            regex: \"[\\\"](.)*?[\\\"]\"\n        }]\n    };\n    this.normalizeRules();\n};\n\n\noop.inherits(SlimHighlightRules, TextHighlightRules);\n\nexports.SlimHighlightRules = SlimHighlightRules;\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = require(\"../config\").$modes;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token : \"support.function\",\n        regex : /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function(value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next  : \"githubblock\"\n    };\n    var codeBlockRules = [{\n        token : \"support.function\",\n        regex : \".*\",\n        onMatch: function(value, state, stack, line) {\n            var embedState = stack[1];\n            var indent = stack[2][0];\n            var endMarker = stack[2][1];\n            var language = stack[2][2];\n            \n            var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n            if (\n                m && m[1].length < indent.length + 3\n                && m[2].length >= endMarker.length && m[2][0] == endMarker[0]\n            ) {\n                stack.splice(0, 3);\n                this.next = stack.shift();\n                return this.token;\n            }\n            this.next = \"\";\n            if (language && modes[language]) {\n                var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                stack[1] = data.state;\n                return data.tokens;\n            }\n            return this.token;\n        }\n    }];\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s|$)/,\n        next : \"header\"\n    },\n    codeBlockStartRule,\n    { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\!?\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text or alt text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href or image\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        },\n        codeBlockStartRule,\n        {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : codeBlockRules\n    });\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n\nace.define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /^(?:[=-]+\\s*$|#{1,6} |`{3})/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) == \"start\")\n                return \"end\";\n            return \"start\";\n        }\n\n        return \"start\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) !== \"start\") {\n                while (++row < maxRow) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(startRow, startColumn, row, 0);\n            } else {\n                while (row -- > 0) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(row, line.length, startRow, 0);\n            }\n        }\n\n        var token;\n        function isHeading(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type.lastIndexOf(heading, 0) === 0;\n        }\n\n        var heading = \"markup.heading\";\n        function getLevel() {\n            var ch = token.value[0];\n            if (ch == \"=\") return 6;\n            if (ch == \"-\") return 5;\n            return 7 - token.value.search(/[^#]|$/);\n        }\n\n        if (isHeading(row)) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (!isHeading(row))\n                    continue;\n                var level = getLevel();\n                if (level >= startHeadingLevel)\n                    break;\n            }\n\n            endRow = row - (!token || [\"=\", \"-\"].indexOf(token.value[0]) == -1 ? 1 : 2);\n\n            if (endRow > startRow) {\n                while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                    endRow--;\n            }\n\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n\nace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\nvar Mode = function() {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n   \n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/sh\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar XmlMode = require(\"./xml\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar MarkdownFoldMode = require(\"./folding/markdown\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MarkdownHighlightRules;\n\n    this.createModeDelegates({\n        javascript: require(\"./javascript\").Mode,\n        html: require(\"./html\").Mode,\n        bash: require(\"./sh\").Mode,\n        sh: require(\"./sh\").Mode,\n        xml: require(\"./xml\").Mode,\n        css: require(\"./css\").Mode\n    });\n\n    this.foldingRules = new MarkdownFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(line);\n            if (!match)\n                return \"\";\n            var marker = match[2];\n            if (!marker)\n                marker = parseInt(match[3], 10) + 1 + \".\";\n            return match[1] + marker + match[4];\n        } else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/markdown\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    oop.inherits(CoffeeHighlightRules, TextHighlightRules);\n\n    function CoffeeHighlightRules() {\n        var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n\n        var keywords = (\n            \"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n            \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n            \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n            \"or|on|unless|until|and|yes|yield|export|import|default\"\n        );\n\n        var langConstant = (\n            \"true|false|null|undefined|NaN|Infinity\"\n        );\n\n        var illegal = (\n            \"case|const|function|var|void|with|enum|implements|\" +\n            \"interface|let|package|private|protected|public|static\"\n        );\n\n        var supportClass = (\n            \"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n            \"SyntaxError|TypeError|URIError|\"  +\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\"\n        );\n\n        var supportFunction = (\n            \"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n            \"encodeURIComponent|decodeURI|decodeURIComponent|String|\"\n        );\n\n        var variableLanguage = (\n            \"window|arguments|prototype|document\"\n        );\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": langConstant,\n            \"invalid.illegal\": illegal,\n            \"language.support.class\": supportClass,\n            \"language.support.function\": supportFunction,\n            \"variable.language\": variableLanguage\n        }, \"identifier\");\n\n        var functionRule = {\n            token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n            regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n        };\n\n        var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n\n        this.$rules = {\n            start : [\n                {\n                    token : \"constant.numeric\",\n                    regex : \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n                }, {\n                    stateName: \"qdoc\",\n                    token : \"string\", regex : \"'''\", next : [\n                        {token : \"string\", regex : \"'''\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqdoc\",\n                    token : \"string\",\n                    regex : '\"\"\"',\n                    next : [\n                        {token : \"string\", regex : '\"\"\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qstring\",\n                    token : \"string\", regex : \"'\", next : [\n                        {token : \"string\", regex : \"'\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqstring\",\n                    token : \"string.start\", regex : '\"', next : [\n                        {token : \"string.end\", regex : '\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"js\",\n                    token : \"string\", regex : \"`\", next : [\n                        {token : \"string\", regex : \"`\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    regex: \"[{}]\", onMatch: function(val, state, stack) {\n                        this.next = \"\";\n                        if (val == \"{\" && stack.length) {\n                            stack.unshift(\"start\", state);\n                            return \"paren\";\n                        }\n                        if (val == \"}\" && stack.length) {\n                            stack.shift();\n                            this.next = stack.shift() || \"\";\n                            if (this.next.indexOf(\"string\") != -1)\n                                return \"paren.string\";\n                        }\n                        return \"paren\";\n                    }\n                }, {\n                    token : \"string.regex\",\n                    regex : \"///\",\n                    next : \"heregex\"\n                }, {\n                    token : \"string.regex\",\n                    regex : /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n                }, {\n                    token : \"comment\",\n                    regex : \"###(?!#)\",\n                    next : \"comment\"\n                }, {\n                    token : \"comment\",\n                    regex : \"#.*\"\n                }, {\n                    token : [\"punctuation.operator\", \"text\", \"identifier\"],\n                    regex : \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\.{1,3}\"\n                }, {\n                    token : [\"keyword\", \"text\", \"language.support.class\",\n                     \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                    regex : \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n                }, {\n                    token : [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                    regex : \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n                }, \n                functionRule, \n                {\n                    token : \"variable\",\n                    regex : \"@(?:\" + identifier + \")?\"\n                }, {\n                    token: keywordMapper,\n                    regex : identifier\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\,|\\\\.\"\n                }, {\n                    token : \"storage.type\",\n                    regex : \"[\\\\-=]>\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[({[]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\]})]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }],\n\n\n            heregex : [{\n                token : \"string.regex\",\n                regex : '.*?///[imgy]{0,4}',\n                next : \"start\"\n            }, {\n                token : \"comment.regex\",\n                regex : \"\\\\s+(?:#.*)?\"\n            }, {\n                token : \"string.regex\",\n                regex : \"\\\\S+\"\n            }],\n\n            comment : [{\n                token : \"comment\",\n                regex : '###',\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        };\n        this.normalizeRules();\n    }\n\n    exports.CoffeeHighlightRules = CoffeeHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\n\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.foldingRules = new FoldMode();\n}\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    var indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;\n    \n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"###\", end: \"###\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n    \n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/coffee_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/coffee\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    );\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\n\nvar Mode = function() {\n    this.HighlightRules = ScssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n\n    this.$id = \"ace/mode/scss\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\n\nvar SassHighlightRules = function() {\n    ScssHighlightRules.call(this);\n    var start = this.$rules.start;\n    if (start[1].token == \"comment\") {\n        start.splice(1, 1, {\n            onMatch: function(value, currentState, stack) {\n                stack.unshift(this.next, -1, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\*/,\n            next: \"comment\"\n        }, {\n            token: \"error.invalid\",\n            regex: \"/\\\\*|[{;}]\"\n        }, {\n            token: \"support.type\",\n            regex: /^\\s*:[\\w\\-]+\\s/\n        });\n        \n        this.$rules.comment = [\n            {regex: /^\\s*/, onMatch: function(value, currentState, stack) {\n                if (stack[1] === -1)\n                    stack[1] = Math.max(stack[2], value.length - 1);\n                if (value.length <= stack[1]) {stack.shift();stack.shift();stack.shift();\n                    this.next = stack.shift();\n                    return \"text\";\n                } else {\n                    this.next = \"\";\n                    return \"comment\";\n                }\n            }, next: \"start\"},\n            {defaultToken: \"comment\"}\n        ];\n    }\n};\n\noop.inherits(SassHighlightRules, ScssHighlightRules);\n\nexports.SassHighlightRules = SassHighlightRules;\n\n});\n\nace.define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SassHighlightRules = require(\"./sass_highlight_rules\").SassHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SassHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {   \n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/sass\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\n\nvar LessHighlightRules = function() {\n\n\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" + \n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n\n    var keywords = keywordList.split('|');\n\n    var properties = CssHighlightRules.supportType.split('|');\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);   \n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : [\"constant.numeric\", \"keyword\"],\n                regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex : \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token : [\"support.function\", \"paren.lparen\"],\n                regex : \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token : function(value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex : \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token : \"variable\",\n                regex : \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token : function(first, second) {\n                    if(properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex : \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token : \"keyword\",\n                regex : \"&\"   // special case - always treat as keyword\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(LessHighlightRules, TextHighlightRules);\n\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\nace.define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LessHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(\"ruleset\", session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/less\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n\nace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length-tab.length, row, indent.length));\n        }\n    };\n\n    this.$id = \"ace/mode/ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/slim\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/slim_highlight_rules\",\"ace/mode/javascript\",\"ace/mode/markdown\",\"ace/mode/coffee\",\"ace/mode/scss\",\"ace/mode/sass\",\"ace/mode/less\",\"ace/mode/ruby\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SlimHighlightRules = require(\"./slim_highlight_rules\").SlimHighlightRules;\n\nvar Mode = function() {\n    TextMode.call(this);\n    this.HighlightRules = SlimHighlightRules;\n    this.createModeDelegates({\n        javascript: require(\"./javascript\").Mode,\n        markdown: require(\"./markdown\").Mode,\n        coffee: require(\"./coffee\").Mode,\n        scss: require(\"./scss\").Mode,\n        sass: require(\"./sass\").Mode,\n        less: require(\"./less\").Mode,\n        ruby: require(\"./ruby\").Mode,\n        css: require(\"./css\").Mode\n    });\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/slim\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-smarty.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/smarty_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar SmartyHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var smartyRules = { start: \n       [ { include: '#comments' },\n         { include: '#blocks' } ],\n      '#blocks': \n       [ { token: 'punctuation.section.embedded.begin.smarty',\n           regex: '\\\\{%?',\n           push: \n            [ { token: 'punctuation.section.embedded.end.smarty',\n                regex: '%?\\\\}',\n                next: 'pop' },\n              { include: '#strings' },\n              { include: '#variables' },\n              { include: '#lang' },\n              { defaultToken: 'source.smarty' } ] } ],\n      '#comments': \n       [ { token: \n            [ 'punctuation.definition.comment.smarty',\n              'comment.block.smarty' ],\n           regex: '(\\\\{%?)(\\\\*)',\n           push: \n            [ { token: 'comment.block.smarty', regex: '\\\\*%?\\\\}', next: 'pop' },\n              { defaultToken: 'comment.block.smarty' } ] } ],\n      '#lang': \n       [ { token: 'keyword.operator.smarty',\n           regex: '(?:!=|!|<=|>=|<|>|===|==|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod)\\\\b' },\n         { token: 'constant.language.smarty',\n           regex: '\\\\b(?:TRUE|FALSE|true|false)\\\\b' },\n         { token: 'keyword.control.smarty',\n           regex: '\\\\b(?:if|else|elseif|foreach|foreachelse|section|switch|case|break|default)\\\\b' },\n         { token: 'variable.parameter.smarty', regex: '\\\\b[a-zA-Z]+=' },\n         { token: 'support.function.built-in.smarty',\n           regex: '\\\\b(?:capture|config_load|counter|cycle|debug|eval|fetch|include_php|include|insert|literal|math|strip|rdelim|ldelim|assign|constant|block|html_[a-z_]*)\\\\b' },\n         { token: 'support.function.variable-modifier.smarty',\n           regex: '\\\\|(?:capitalize|cat|count_characters|count_paragraphs|count_sentences|count_words|date_format|default|escape|indent|lower|nl2br|regex_replace|replace|spacify|string_format|strip_tags|strip|truncate|upper|wordwrap)' } ],\n      '#strings': \n       [ { token: 'punctuation.definition.string.begin.smarty',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.smarty',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.smarty', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.single.smarty' } ] },\n         { token: 'punctuation.definition.string.begin.smarty',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.smarty',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.smarty', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.double.smarty' } ] } ],\n      '#variables': \n       [ { token: \n            [ 'punctuation.definition.variable.smarty',\n              'variable.other.global.smarty' ],\n           regex: '\\\\b(\\\\$)(Smarty\\\\.)' },\n         { token: \n            [ 'punctuation.definition.variable.smarty',\n              'variable.other.smarty' ],\n           regex: '(\\\\$)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b' },\n         { token: [ 'keyword.operator.smarty', 'variable.other.property.smarty' ],\n           regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b' },\n         { token: \n            [ 'keyword.operator.smarty',\n              'meta.function-call.object.smarty',\n              'punctuation.definition.variable.smarty',\n              'variable.other.smarty',\n              'punctuation.definition.variable.smarty' ],\n           regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))' } ] };\n    \n    var smartyStart = smartyRules.start;\n    \n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift.apply(this.$rules[rule], smartyStart);\n    }\n    \n    Object.keys(smartyRules).forEach(function(x) {\n        if (!this.$rules[x])\n            this.$rules[x] = smartyRules[x];\n    }, this);\n    \n    this.normalizeRules();\n};\n\nSmartyHighlightRules.metaData = { fileTypes: [ 'tpl' ],\n      foldingStartMarker: '\\\\{%?',\n      foldingStopMarker: '%?\\\\}',\n      name: 'Smarty',\n      scopeName: 'text.html.smarty' };\n\n\noop.inherits(SmartyHighlightRules, HtmlHighlightRules);\n\nexports.SmartyHighlightRules = SmartyHighlightRules;\n});\n\nace.define(\"ace/mode/smarty\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/smarty_highlight_rules\"], function(require, exports, module) {\n  \"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar SmartyHighlightRules = require(\"./smarty_highlight_rules\").SmartyHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = SmartyHighlightRules;\n};\n\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    \n    this.$id = \"ace/mode/smarty\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-snippets.js",
    "content": "ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SnippetHighlightRules = function() {\n\n    var builtins = \"SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|\" +\n        \"LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME\";\n\n    this.$rules = {\n        \"start\" : [\n            {token:\"constant.language.escape\", regex: /\\\\[\\$}`\\\\]/},\n            {token:\"keyword\", regex: \"\\\\$(?:TM_)?(?:\" + builtins + \")\\\\b\"},\n            {token:\"variable\", regex: \"\\\\$\\\\w+\"},\n            {onMatch: function(value, state, stack) {\n                if (stack[1])\n                    stack[1]++;\n                else\n                    stack.unshift(state, 1);\n                return this.tokenName;\n            }, tokenName: \"markup.list\", regex: \"\\\\${\", next: \"varDecl\"},\n            {onMatch: function(value, state, stack) {\n                if (!stack[1])\n                    return \"text\";\n                stack[1]--;\n                if (!stack[1])\n                    stack.splice(0,2);\n                return this.tokenName;\n            }, tokenName: \"markup.list\", regex: \"}\"},\n            {token: \"doc.comment\", regex:/^\\${2}-{5,}$/}\n        ],\n        \"varDecl\" : [\n            {regex: /\\d+\\b/, token: \"constant.numeric\"},\n            {token:\"keyword\", regex: \"(?:TM_)?(?:\" + builtins + \")\\\\b\"},\n            {token:\"variable\", regex: \"\\\\w+\"},\n            {regex: /:/, token: \"punctuation.operator\", next: \"start\"},\n            {regex: /\\//, token: \"string.regex\", next: \"regexp\"},\n            {regex: \"\", next: \"start\"}\n        ],\n        \"regexp\" : [\n            {regex: /\\\\./, token: \"escape\"},\n            {regex: /\\[/, token: \"regex.start\", next: \"charClass\"},\n            {regex: \"/\", token: \"string.regex\", next: \"format\"},\n            {\"token\": \"string.regex\", regex:\".\"}\n        ],\n        charClass : [\n            {regex: \"\\\\.\", token: \"escape\"},\n            {regex: \"\\\\]\", token: \"regex.end\", next: \"regexp\"},\n            {\"token\": \"string.regex\", regex:\".\"}\n        ],\n        \"format\" : [\n            {regex: /\\\\[ulULE]/, token: \"keyword\"},\n            {regex: /\\$\\d+/, token: \"variable\"},\n            {regex: \"/[gim]*:?\", token: \"string.regex\", next: \"start\"},\n            {\"token\": \"string\", regex:\".\"}\n        ]\n    };\n};\noop.inherits(SnippetHighlightRules, TextHighlightRules);\n\nexports.SnippetHighlightRules = SnippetHighlightRules;\n\nvar SnippetGroupHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {token: \"text\", regex: \"^\\\\t\", next: \"sn-start\"},\n            {token:\"invalid\", regex: /^ \\s*/},\n            {token:\"comment\", regex: /^#.*/},\n            {token:\"constant.language.escape\", regex: \"^regex \", next: \"regex\"},\n            {token:\"constant.language.escape\", regex: \"^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\\\b\"}\n        ],\n        \"regex\" : [\n            {token:\"text\", regex: \"\\\\.\"},\n            {token:\"keyword\", regex: \"/\"},\n            {token:\"empty\", regex: \"$\", next: \"start\"}\n        ]\n    };\n    this.embedRules(SnippetHighlightRules, \"sn-\", [\n        {token: \"text\", regex: \"^\\\\t\", next: \"sn-start\"},\n        {onMatch: function(value, state, stack) {\n            stack.splice(stack.length);\n            return this.tokenName;\n        }, tokenName: \"text\", regex: \"^(?!\\t)\", next: \"start\"}\n    ]);\n    \n};\n\noop.inherits(SnippetGroupHighlightRules, TextHighlightRules);\n\nexports.SnippetGroupHighlightRules = SnippetGroupHighlightRules;\n\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SnippetGroupHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$indentWithTabs = true;\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/snippets\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n\n});                (function() {\n                    ace.require([\"ace/mode/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-soy_template.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/soy_template_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar SoyTemplateHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var soyRules = { start: \n       [ { include: '#template' },\n         { include: '#if' },\n         { include: '#comment-line' },\n         { include: '#comment-block' },\n         { include: '#comment-doc' },\n         { include: '#call' },\n         { include: '#css' },\n         { include: '#param' },\n         { include: '#print' },\n         { include: '#msg' },\n         { include: '#for' },\n         { include: '#foreach' },\n         { include: '#switch' },\n         { include: '#tag' },\n         { include: 'text.html.basic' } ],\n      '#call': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.call.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(?=call|delcall)',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { token: ['entity.name.tag.soy', 'variable.parameter.soy'],\n                regex: '(call|delcall)(\\\\s+[\\\\.\\\\w]+)'},\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy' ],\n                regex: '\\\\b(data)(\\\\s*)(=)' },\n              { defaultToken: 'meta.tag.call.soy' } ] } ],\n      '#comment-line': \n       [ { token: \n            [ 'comment.line.double-slash.soy',\n              'comment.line.double-slash.soy' ],\n           regex: '(//)(.*$)' } ],\n      '#comment-block': \n       [ { token: 'punctuation.definition.comment.begin.soy',\n           regex: '/\\\\*(?!\\\\*)',\n           push: \n            [ { token: 'punctuation.definition.comment.end.soy',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.soy' } ] } ],\n      '#comment-doc': \n       [ { token: 'punctuation.definition.comment.begin.soy',\n           regex: '/\\\\*\\\\*(?!/)',\n           push: \n            [ { token: 'punctuation.definition.comment.end.soy',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { token: [ 'support.type.soy', 'text', 'variable.parameter.soy' ],\n                regex: '(@param|@param\\\\?)(\\\\s+)(\\\\w+)' },\n              { defaultToken: 'comment.block.documentation.soy' } ] } ],\n      '#css': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.css.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(css)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'support.constant.soy',\n                regex: '\\\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\\\b' },\n              { defaultToken: 'meta.tag.css.soy' } ] } ],\n      '#for': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.for.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(for)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'keyword.operator.soy', regex: '\\\\bin\\\\b' },\n              { token: 'support.function.soy', regex: '\\\\brange\\\\b' },\n              { include: '#variable' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { defaultToken: 'meta.tag.for.soy' } ] } ],\n      '#foreach': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.foreach.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(foreach)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'keyword.operator.soy', regex: '\\\\bin\\\\b' },\n              { include: '#variable' },\n              { defaultToken: 'meta.tag.foreach.soy' } ] } ],\n      '#function': \n       [ { token: 'support.function.soy',\n           regex: '\\\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\\\b' } ],\n      '#if': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.if.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(if|elseif)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#operator' },\n              { include: '#function' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { defaultToken: 'meta.tag.if.soy' } ] } ],\n      '#namespace': \n       [ { token: [ 'entity.name.tag.soy', 'text', 'variable.parameter.soy' ],\n           regex: '(namespace|delpackage)(\\\\s+)([\\\\w\\\\.]+)' } ],\n      '#number': [ { token: 'constant.numeric', regex: '[\\\\d]+' } ],\n      '#operator': \n       [ { token: 'keyword.operator.soy',\n           regex: '==|!=|\\\\band\\\\b|\\\\bor\\\\b|\\\\bnot\\\\b|-|\\\\+|/|\\\\?:' } ],\n      '#param': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.param.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(param)',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy' ],\n                regex: '\\\\b([\\\\w]+)(\\\\s*)((?::)?)' },\n              { defaultToken: 'meta.tag.param.soy' } ] } ],\n      '#primitive': \n       [ { token: 'constant.language.soy',\n           regex: '\\\\b(?:null|false|true)\\\\b' } ],\n      '#msg': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.msg.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(msg)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy' ],\n                regex: '\\\\b(meaning|desc)(\\\\s*)(=)' },\n              { defaultToken: 'meta.tag.msg.soy' } ] } ],\n      '#print': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.print.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(print)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#print-parameter' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { include: '#attribute-lookup' },\n              { defaultToken: 'meta.tag.print.soy' } ] } ],\n      '#print-parameter': \n       [ { token: 'keyword.operator.soy', regex: '\\\\|' },\n         { token: 'variable.parameter.soy',\n           regex: 'noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate' } ],\n      '#special-character': \n       [ { token: 'support.constant.soy',\n           regex: '\\\\bsp\\\\b|\\\\bnil\\\\b|\\\\\\\\r|\\\\\\\\n|\\\\\\\\t|\\\\blb\\\\b|\\\\brb\\\\b' } ],\n      '#string-quoted-double': [ { token: 'string.quoted.double', regex: '\"[^\"]*\"' } ],\n      '#string-quoted-single': [ { token: 'string.quoted.single', regex: '\\'[^\\']*\\'' } ],\n      '#switch': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.switch.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(switch|case)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#function' },\n              { include: '#number' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { defaultToken: 'meta.tag.switch.soy' } ] } ],\n      '#attribute-lookup': \n       [ { token: 'punctuation.definition.attribute-lookup.begin.soy',\n           regex: '\\\\[',\n           push: \n            [ { token: 'punctuation.definition.attribute-lookup.end.soy',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#function' },\n              { include: '#operator' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' } ] } ],\n      '#tag': \n       [ { token: 'punctuation.definition.tag.begin.soy',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#namespace' },\n              { include: '#variable' },\n              { include: '#special-character' },\n              { include: '#tag-simple' },\n              { include: '#function' },\n              { include: '#operator' },\n              { include: '#attribute-lookup' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { include: '#print-parameter' } ] } ],\n      '#tag-simple': \n       [ { token: 'entity.name.tag.soy',\n           regex: '{{\\\\s*(?:literal|else|ifempty|default)\\\\s*(?=\\\\})'} ],\n      '#template': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.template.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(?=template|deltemplate)',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: ['entity.name.tag.soy', 'text', 'entity.name.function.soy' ],\n                regex: '(template|deltemplate)(\\\\s+)([\\\\.\\\\w]+)',\n                originalRegex: '(?<=template|deltemplate)\\\\s+([\\\\.\\\\w]+)' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.double.soy' ],\n                regex: '\\\\b(private)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\")' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.single.soy' ],\n                regex: '\\\\b(private)(\\\\s*)(=)(\\\\s*)(\\'true\\'|\\'false\\')' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.double.soy' ],\n                regex: '\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\"|\"contextual\")' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.single.soy' ],\n                regex: '\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\\'true\\'|\\'false\\'|\\'contextual\\')' },\n              { defaultToken: 'meta.tag.template.soy' } ] } ],\n      '#variable': [ { token: 'variable.other.soy', regex: '\\\\$[\\\\w\\\\.]+' } ] };\n    \n    \n    for (var i in soyRules) {\n        if (this.$rules[i]) {\n            this.$rules[i].unshift.apply(this.$rules[i], soyRules[i]);\n        } else {\n            this.$rules[i] = soyRules[i];\n        }\n    }\n    \n    this.normalizeRules();\n};\n\nSoyTemplateHighlightRules.metaData = { comment: 'SoyTemplate',\n      fileTypes: [ 'soy' ],\n      firstLineMatch: '\\\\{\\\\s*namespace\\\\b',\n      foldingStartMarker: '\\\\{\\\\s*template\\\\s+[^\\\\}]*\\\\}',\n      foldingStopMarker: '\\\\{\\\\s*/\\\\s*template\\\\s*\\\\}',\n      name: 'SoyTemplate',\n      scopeName: 'source.soy' };\n\n\noop.inherits(SoyTemplateHighlightRules, HtmlHighlightRules);\n\nexports.SoyTemplateHighlightRules = SoyTemplateHighlightRules;\n});\n\nace.define(\"ace/mode/soy_template\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/soy_template_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar SoyTemplateHighlightRules = require(\"./soy_template_highlight_rules\").SoyTemplateHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = SoyTemplateHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/soy_template\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-space.js",
    "content": "ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/space_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SpaceHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"empty_line\",\n                regex : / */,\n                next : \"key\"\n            },\n            {\n                token : \"empty_line\",\n                regex : /$/,\n                next : \"key\"\n            }\n        ],\n        \"key\" : [\n            {\n                token : \"variable\",\n                regex : /\\S+/\n            },\n            {\n                token : \"empty_line\",\n                regex : /$/,\n                next : \"start\"\n            },{\n                token : \"keyword.operator\",\n                regex : / /,\n                next  : \"value\"\n            }\n        ],\n        \"value\" : [\n            {\n                token : \"keyword.operator\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            {\n                token : \"string\",\n                regex : /[^$]/\n            }\n        ]\n    };\n    \n};\n\noop.inherits(SpaceHighlightRules, TextHighlightRules);\n\nexports.SpaceHighlightRules = SpaceHighlightRules;\n});\n\nace.define(\"ace/mode/space\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/coffee\",\"ace/mode/space_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar SpaceHighlightRules = require(\"./space_highlight_rules\").SpaceHighlightRules;\nvar Mode = function() {\n    this.HighlightRules = SpaceHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function() {\n    \n    this.$id = \"ace/mode/space\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-sparql.js",
    "content": "ace.define(\"ace/mode/sparql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SPARQLHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            include: \"#strings\"\n        }, {\n            include: \"#string-language-suffixes\"\n        }, {\n            include: \"#string-datatype-suffixes\"\n        }, {\n            include: \"#logic-operators\"\n        }, {\n            include: \"#relative-urls\"\n        }, {\n            include: \"#xml-schema-types\"\n        }, {\n            include: \"#rdf-schema-types\"\n        }, {\n            include: \"#owl-types\"\n        }, {\n            include: \"#qnames\"\n        }, {\n            include: \"#keywords\"\n        }, {\n            include: \"#built-in-functions\"\n        }, {\n            include: \"#variables\"\n        }, {\n            include: \"#boolean-literal\"\n        }, {\n            include: \"#punctuation-operators\"\n        }],\n        \"#boolean-literal\": [{\n            token: \"constant.language.boolean.sparql\",\n            regex: /true|false/\n        }],\n        \"#built-in-functions\": [{\n            token: \"support.function.sparql\",\n            regex: /[Aa][Bb][Ss]|[Aa][Vv][Gg]|[Bb][Nn][Oo][Dd][Ee]|[Bb][Oo][Uu][Nn][Dd]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Aa][Ll][Ee][Ss][Cc][Ee]|[Cc][Oo][Nn][Cc][Aa][Tt]|[Cc][Oo][Nn][Tt][Aa][Ii][Nn][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Dd][Aa][Tt][Aa][Tt][Yy][Pp][Ee]|[Dd][Aa][Yy]|[Ee][Nn][Cc][Oo][Dd][Ee]_[Ff][Oo][Rr]_[Uu][Rr][Ii]|[Ee][Xx][Ii][Ss][Tt][Ss]|[Ff][Ll][Oo][Oo][Rr]|[Gg][Rr][Oo][Uu][Pp]_[Cc][Oo][Nn][Cc][Aa][Tt]|[Hh][Oo][Uu][Rr][Ss]|[Ii][Ff]|[Ii][Rr][Ii]|[Ii][Ss][Bb][Ll][Aa][Nn][Kk]|[Ii][Ss][Ii][Rr][Ii]|[Ii][Ss][Ll][Ii][Tt][Ee][Rr][Aa][Ll]|[Ii][Ss][Nn][Uu][Mm][Ee][Rr][Ii][Cc]|[Ii][Ss][Uu][Rr][Ii]|[Ll][Aa][Nn][Gg]|[Ll][Aa][Nn][Gg][Mm][Aa][Tt][Cc][Hh][Ee][Ss]|[Ll][Cc][Aa][Ss][Ee]|[Mm][Aa][Xx]|[Mm][Dd]5|[Mm][Ii][Nn]|[Mm][Ii][Nn][Uu][Tt][Ee][Ss]|[Mm][Oo][Nn][Tt][Hh]|[Nn][Oo][Ww]|[Rr][Aa][Nn][Dd]|[Rr][Ee][Gg][Ee][Xx]|[Rr][Ee][Pp][Ll][Aa][Cc][Ee]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Aa][Mm][Ee][Tt][Ee][Rr][Mm]|[Ss][Aa][Mm][Pp][Ll][Ee]|[Ss][Ee][Cc][Oo][Nn][Dd][Ss]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Hh][Aa](?:1|256|384|512)|[Ss][Tt][Rr]|[Ss][Tt][Rr][Aa][Ff][Tt][Ee][Rr]|[Ss][Tt][Rr][Bb][Ee][Ff][Oo][Rr][Ee]|[Ss][Tt][Rr][Dd][Tt]|[Ss][Tt][Rr][Ee][Nn][Dd][Ss]|[Ss][Tt][Rr][Ll][Aa][Nn][Gg]|[Ss][Tt][Rr][Ll][Ee][Nn]|[Ss][Tt][Rr][Ss][Tt][Aa][Rr][Tt][Ss]|[Ss][Tt][Rr][Uu][Uu][Ii][Dd]|[Ss][Uu][Bb][Ss][Tt][Rr]|[Ss][Uu][Mm]|[Tt][Ii][Mm][Ee][Zz][Oo][Nn][Ee]|[Tt][Zz]|[Uu][Cc][Aa][Ss][Ee]|[Uu][Rr][Ii]|[Uu][Uu][Ii][Dd]|[Yy][Ee][Aa][Rr]/\n        }],\n        \"#comments\": [{\n            token: [\n                \"punctuation.definition.comment.sparql\",\n                \"comment.line.hash.sparql\"\n            ],\n            regex: /(#)(.*$)/\n        }],\n        \"#keywords\": [{\n            token: \"keyword.other.sparql\",\n            regex: /[Aa][Dd][Dd]|[Aa][Ll][Ll]|[Aa][Ss]|[As][Ss][Cc]|[Aa][Ss][Kk]|[Bb][Aa][Ss][Ee]|[Bb][Ii][Nn][Dd]|[Bb][Yy]|[Cc][Ll][Ee][Aa][Rr]|[Cc][Oo][Nn][Ss][Tt][Rr][Uu][Cc][Tt]|[Cc][Oo][Pp][Yy]|[Cc][Rr][Ee][Aa][Tt][Ee]|[Dd][Aa][Tt][Aa]|[Dd][Ee][Ff][Aa][Uu][Ll][Tt]|[Dd][Ee][Ll][Ee][Tt][Ee]|[Dd][Ee][Sc][Cc]|[Dd][Ee][Ss][Cc][Rr][Ii][Bb][Ee]|[Dd][Ii][Ss][Tt][Ii][Nn][Cc][Tt]|[Dd][Rr][Oo][Pp]|[Ff][Ii][Ll][Tt][Ee][Rr]|[Ff][Rr][Oo][Mm]|[Gg][Rr][Aa][Pp][Hh]|[Gg][Rr][Oo][Uu][Pp]|[Hh][Aa][Vv][Ii][Nn][Gg]|[Ii][Nn][Ss][Ee][Rr][Tt]|[Ll][Ii][Mm][Ii][Tt]|[Ll][Oo][Aa][Dd]|[Mm][Ii][Nn][Uu][Ss]|[Mm][Oo][Vv][Ee]|[Nn][Aa][Mm][Ee][Dd]|[Oo][Ff][Ff][Ss][Ee][Tt]|[Oo][Pp][Tt][Ii][Oo][Nn][Aa][Ll]|[Oo][Rr][Dd][Ee][Rr]|[Pp][Rr][Ee][Ff][Ii][Xx]|[Rr][Ee][Dd][Uu][Cc][Ee][Dd]|[Ss][Ee][Ll][Ee][Cc][Tt]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Ee][Rr][Vv][Ii][Cc][Ee]|[Ss][Ii][Ll][Ee][Nn][Tt]|[Tt][Oo]|[Uu][Nn][Dd][Ee][Ff]|[Uu][Nn][Ii][Oo][Nn]|[Uu][Ss][Ii][Nn][Gg]|[Vv][Aa][Ll][Uu][Ee][Ss]|[Ww][He][Ee][Rr][Ee]|[Ww][Ii][Tt][Hh]/\n        }],\n        \"#logic-operators\": [{\n            token: \"keyword.operator.logical.sparql\",\n            regex: /\\|\\||&&|=|!=|<|>|<=|>=|(?:^|!?\\s)IN(?:!?\\s|$)|(?:^|!?\\s)NOT(?:!?\\s|$)|-|\\+|\\*|\\/|\\!/\n        }],\n        \"#owl-types\": [{\n            token: \"support.type.datatype.owl.sparql\",\n            regex: /owl:[a-zA-Z]+/\n        }],\n        \"#punctuation-operators\": [{\n            token: \"keyword.operator.punctuation.sparql\",\n            regex: /;|,|\\.|\\(|\\)|\\{|\\}|\\|/\n        }],\n        \"#qnames\": [{\n            token: \"entity.name.other.qname.sparql\",\n            regex: /(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/\n        }],\n        \"#rdf-schema-types\": [{\n            token: \"support.type.datatype.rdf.schema.sparql\",\n            regex: /rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/\n        }],\n        \"#relative-urls\": [{\n            token: \"string.quoted.other.relative.url.sparql\",\n            regex: /</,\n            push: [{\n                token: \"string.quoted.other.relative.url.sparql\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.other.relative.url.sparql\"\n            }]\n        }],\n        \"#string-datatype-suffixes\": [{\n            token: \"keyword.operator.datatype.suffix.sparql\",\n            regex: /\\^\\^/\n        }],\n        \"#string-language-suffixes\": [{\n            token: [\n                \"keyword.operator.language.suffix.sparql\",\n                \"constant.language.suffix.sparql\"\n            ],\n            regex: /(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/\n        }],\n        \"#strings\": [{\n            token: \"string.quoted.triple.sparql\",\n            regex: /\"\"\"/,\n            push: [{\n                token: \"string.quoted.triple.sparql\",\n                regex: /\"\"\"/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.triple.sparql\"\n            }]\n        }, {\n            token: \"string.quoted.double.sparql\",\n            regex: /\"/,\n            push: [{\n                token: \"string.quoted.double.sparql\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"invalid.string.newline\",\n                regex: /$/\n            }, {\n                token: \"constant.character.escape.sparql\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.sparql\"\n            }]\n        }],\n        \"#variables\": [{\n            token: \"variable.other.sparql\",\n            regex: /(?:\\?|\\$)[-_a-zA-Z0-9]+/\n        }],\n        \"#xml-schema-types\": [{\n            token: \"support.type.datatype.schema.sparql\",\n            regex: /xsd?:[a-z][a-zA-Z]+/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nSPARQLHighlightRules.metaData = {\n    fileTypes: [\"rq\", \"sparql\"],\n    name: \"SPARQL\",\n    scopeName: \"source.sparql\"\n};\n\n\noop.inherits(SPARQLHighlightRules, TextHighlightRules);\n\nexports.SPARQLHighlightRules = SPARQLHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sparql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sparql_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SPARQLHighlightRules = require(\"./sparql_highlight_rules\").SPARQLHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SPARQLHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/sparql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-sql.js",
    "content": "ace.define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SqlHighlightRules = function() {\n\n    var keywords = (\n        \"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|\" +\n        \"when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|\" +\n        \"foreign|not|references|default|null|inner|cross|natural|database|drop|grant\"\n    );\n\n    var builtinConstants = (\n        \"true|false\"\n    );\n\n    var builtinFunctions = (\n        \"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|\" + \n        \"coalesce|ifnull|isnull|nvl\"\n    );\n\n    var dataTypes = (\n        \"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|\" +\n        \"money|real|number|integer\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"storage.type\": dataTypes\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"--.*$\"\n        },  {\n            token : \"comment\",\n            start : \"/\\\\*\",\n            end : \"\\\\*/\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"string\",           // ` string (apache drill)\n            regex : \"`.*?`\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(SqlHighlightRules, TextHighlightRules);\n\nexports.SqlHighlightRules = SqlHighlightRules;\n});\n\nace.define(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlHighlightRules = require(\"./sql_highlight_rules\").SqlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = SqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.$id = \"ace/mode/sql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-sqlserver.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/sqlserver_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SqlServerHighlightRules = function() {\n    var logicalOperators = \"ALL|AND|ANY|BETWEEN|EXISTS|IN|LIKE|NOT|OR|SOME\";\n    logicalOperators += \"|NULL|IS|APPLY|INNER|OUTER|LEFT|RIGHT|JOIN|CROSS\"; //SSMS colors these gray too\n    \n\n    var builtinFunctions = (\n        \"OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|\" +\n        \"AVG|CHECKSUM_AGG|COUNT|COUNT_BIG|GROUPING|GROUPING_ID|MAX|MIN|STDEV|STDEVP|SUM|VAR|VARP|\" +\n        \"DENSE_RANK|NTILE|RANK|ROW_NUMBER\" +\n        \"@@DATEFIRST|@@DBTS|@@LANGID|@@LANGUAGE|@@LOCK_TIMEOUT|@@MAX_CONNECTIONS|@@MAX_PRECISION|@@NESTLEVEL|@@OPTIONS|@@REMSERVER|@@SERVERNAME|@@SERVICENAME|@@SPID|@@TEXTSIZE|@@VERSION|\" +\n        \"CAST|CONVERT|PARSE|TRY_CAST|TRY_CONVERT|TRY_PARSE\" +\n        \"@@CURSOR_ROWS|@@FETCH_STATUS|CURSOR_STATUS|\" +\n        \"@@DATEFIRST|@@LANGUAGE|CURRENT_TIMESTAMP|DATEADD|DATEDIFF|DATEFROMPARTS|DATENAME|DATEPART|DATETIME2FROMPARTS|DATETIMEFROMPARTS|DATETIMEOFFSETFROMPARTS|DAY|EOMONTH|GETDATE|GETUTCDATE|ISDATE|MONTH|SET DATEFIRST|SET DATEFORMAT|SET LANGUAGE|SMALLDATETIMEFROMPARTS|SP_HELPLANGUAGE|SWITCHOFFSET|SYSDATETIME|SYSDATETIMEOFFSET|SYSUTCDATETIME|TIMEFROMPARTS|TODATETIMEOFFSET|YEAR|\" +\n        \"CHOOSE|IIF|\" +\n        \"ABS|ACOS|ASIN|ATAN|ATN2|CEILING|COS|COT|DEGREES|EXP|FLOOR|LOG|LOG10|PI|POWER|RADIANS|RAND|ROUND|SIGN|SIN|SQRT|SQUARE|TAN|\" +\n        \"@@PROCID|APPLOCK_MODE|APPLOCK_TEST|APP_NAME|ASSEMBLYPROPERTY|COLUMNPROPERTY|COL_LENGTH|COL_NAME|DATABASEPROPERTYEX|DATABASE_PRINCIPAL_ID|DB_ID|DB_NAME|FILEGROUPPROPERTY|FILEGROUP_ID|FILEGROUP_NAME|FILEPROPERTY|FILE_ID|FILE_IDEX|FILE_NAME|FULLTEXTCATALOGPROPERTY|FULLTEXTSERVICEPROPERTY|INDEXKEY_PROPERTY|INDEXPROPERTY|INDEX_COL|OBJECTPROPERTY|OBJECTPROPERTYEX|OBJECT_DEFINITION|OBJECT_ID|OBJECT_NAME|OBJECT_SCHEMA_NAME|ORIGINAL_DB_NAME|PARSENAME|SCHEMA_ID|SCHEMA_NAME|SCOPE_IDENTITY|SERVERPROPERTY|STATS_DATE|TYPEPROPERTY|TYPE_ID|TYPE_NAME|\" +\n        \"CERTENCODED|CERTPRIVATEKEY|CURRENT_USER|DATABASE_PRINCIPAL_ID|HAS_PERMS_BY_NAME|IS_MEMBER|IS_ROLEMEMBER|IS_SRVROLEMEMBER|ORIGINAL_LOGIN|PERMISSIONS|PWDCOMPARE|PWDENCRYPT|SCHEMA_ID|SCHEMA_NAME|SESSION_USER|SUSER_ID|SUSER_NAME|SUSER_SID|SUSER_SNAME|SYS.FN_BUILTIN_PERMISSIONS|SYS.FN_GET_AUDIT_FILE|SYS.FN_MY_PERMISSIONS|SYSTEM_USER|USER_ID|USER_NAME|\" +\n        \"ASCII|CHAR|CHARINDEX|CONCAT|DIFFERENCE|FORMAT|LEN|LOWER|LTRIM|NCHAR|PATINDEX|QUOTENAME|REPLACE|REPLICATE|REVERSE|RTRIM|SOUNDEX|SPACE|STR|STUFF|SUBSTRING|UNICODE|UPPER|\" +\n        \"$PARTITION|@@ERROR|@@IDENTITY|@@PACK_RECEIVED|@@ROWCOUNT|@@TRANCOUNT|BINARY_CHECKSUM|CHECKSUM|CONNECTIONPROPERTY|CONTEXT_INFO|CURRENT_REQUEST_ID|ERROR_LINE|ERROR_MESSAGE|ERROR_NUMBER|ERROR_PROCEDURE|ERROR_SEVERITY|ERROR_STATE|FORMATMESSAGE|GETANSINULL|GET_FILESTREAM_TRANSACTION_CONTEXT|HOST_ID|HOST_NAME|ISNULL|ISNUMERIC|MIN_ACTIVE_ROWVERSION|NEWID|NEWSEQUENTIALID|ROWCOUNT_BIG|XACT_STATE|\" +\n        \"@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|\" +\n        \"PATINDEX|TEXTPTR|TEXTVALID|\" +\n        \"COALESCE|NULLIF\"\n    );\n    var dataTypes = (\"BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML\");\n    var builtInStoredProcedures = \"sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool\";\n    var keywords = \"ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE\";\n    keywords += \"|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT\";\n    keywords += \"|LOOP|HASH|MERGE|REMOTE\";\n    keywords += \"|TRY|CATCH|THROW\";\n    keywords += \"|TYPE\";\n    keywords = keywords.split('|');\n    keywords = keywords.filter(function(value, index, self) {\n        return logicalOperators.split('|').indexOf(value) === -1 && builtinFunctions.split('|').indexOf(value) === -1 && dataTypes.split('|').indexOf(value) === -1;\n    });\n    keywords = keywords.sort().join('|');\n    \n    \n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language\": logicalOperators,\n        \"storage.type\": dataTypes,\n        \"support.function\": builtinFunctions,\n        \"support.storedprocedure\": builtInStoredProcedures,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n    var setStatements = \"SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT\".split('|');\n    var isolationLevels = \"READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE\".split('|');\n    for (var i = 0; i < isolationLevels.length; i++) {\n        setStatements.push('SET TRANSACTION ISOLATION LEVEL ' + isolationLevels[i]);\n    }\n    \n    \n    this.$rules = {\n        start: [{\n            token: \"string.start\",\n            regex: \"'\",\n            next: [{\n                token: \"constant.language.escape\",\n                regex: /''/\n            }, {\n                token: \"string.end\",\n                next: \"start\",\n                regex: \"'\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"), {\n            token: \"comment\",\n            regex: \"--.*$\"\n        }, {\n            token: \"comment\",\n            start: \"/\\\\*\",\n            end: \"\\\\*/\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b(?!])\" //up to 2 @symbols for some built in functions\n        }, {\n            token: \"constant.class\",\n            regex: \"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=|\\\\*\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\)]\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|;\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }],\n        comment: [\n        DocCommentHighlightRules.getTagRule(), {\n            token: \"comment\",\n            regex: \"\\\\*\\\\/\",\n            next: \"no_regex\"\n        }, {\n            defaultToken: \"comment\",\n            caseInsensitive: true\n        }]\n    };\n    for (var i = 0; i < setStatements.length; i++) {\n        this.$rules.start.unshift({\n            token: \"set.statement\",\n            regex: setStatements[i]\n        });\n    }\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n    var completions = [];\n    var addCompletions = function(arr, meta) {\n        arr.forEach(function(v) {\n            completions.push({\n                name: v,\n                value: v,\n                score: 0,\n                meta: meta\n            });\n        });\n    };\n    addCompletions(builtInStoredProcedures.split('|'), 'procedure');\n    addCompletions(logicalOperators.split('|'), 'operator');\n    addCompletions(builtinFunctions.split('|'), 'function');\n    addCompletions(dataTypes.split('|'), 'type');\n    addCompletions(setStatements, 'statement');\n    addCompletions(keywords.split('|'), 'keyword');\n    \n    this.completions = completions;\n};\n\noop.inherits(SqlServerHighlightRules, TextHighlightRules);\n\nexports.SqlHighlightRules = SqlServerHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\bCASE\\b|\\bBEGIN\\b)|^\\s*(\\/\\*)/i;\n    this.startRegionRe = /^\\s*(\\/\\*|--)#?region\\b/;\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n    \n        if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row);\n    \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1]) return this.getBeginEndBlock(session, row, i, match[1]);\n    \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\") range = null;\n            }\n    \n            return range;\n        }\n    \n        if (foldStyle === \"markbegin\") return;\n        return;\n    };\n    this.getBeginEndBlock = function(session, row, column, matchSequence) {\n        var start = {\n            row: row,\n            column: column + matchSequence.length\n        };\n        var maxRow = session.getLength();\n        var line;\n    \n        var depth = 1;\n        var re = /(\\bCASE\\b|\\bBEGIN\\b)|(\\bEND\\b)/i;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth++;\n            else depth--;\n    \n            if (!depth) break;\n        }\n        var endRow = row;\n        if (endRow > start.row) {\n            return new Range(start.row, start.column, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sqlserver_highlight_rules\",\"ace/mode/folding/sqlserver\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlServerHighlightRules = require(\"./sqlserver_highlight_rules\").SqlHighlightRules;\nvar SqlServerFoldMode = require(\"./folding/sqlserver\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SqlServerHighlightRules;\n    this.foldingRules = new SqlServerFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.getCompletions = function(state, session, pos, prefix) {\n        return session.$mode.$highlightRules.completions;\n    };\n    \n    this.$id = \"ace/mode/sql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-stylus.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/stylus_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar StylusHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.type\": CssHighlightRules.supportType,\n        \"support.function\": CssHighlightRules.supportFunction,\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n    start: [\n        {\n            token : \"comment\",\n            regex : /\\/\\/.*$/\n        },\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next : \"comment\"\n        },\n        {\n            token: [\"entity.name.function.stylus\", \"text\"],\n            regex: \"^([-a-zA-Z_][-\\\\w]*)?(\\\\()\"\n        },\n        {\n            token: [\"entity.other.attribute-name.class.stylus\"],\n            regex: \"\\\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*\"\n        },\n        {\n            token: [\"entity.language.stylus\"],\n            regex: \"^ *&\"\n        },\n        {\n            token: [\"variable.language.stylus\"],\n            regex: \"(arguments)\"\n        },\n        {\n            token: [\"keyword.stylus\"],\n            regex: \"@[-\\\\w]+\"\n        },\n        {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : CssHighlightRules.pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : CssHighlightRules.pseudoClasses\n        }, \n        {\n            token: [\"entity.name.tag.stylus\"],\n            regex: \"(?:\\\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\\\b)\"\n        },\n        {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, \n        {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, \n        {\n            token: [\"punctuation.definition.entity.stylus\", \"entity.other.attribute-name.id.stylus\"],\n            regex: \"(#)([a-zA-Z][a-zA-Z0-9_-]*)\"\n        },\n        {\n            token: \"meta.vendor-prefix.stylus\",\n            regex: \"-webkit-|-moz\\\\-|-ms-|-o-\"\n        },\n        {\n            token: \"keyword.control.stylus\",\n            regex: \"(?:!important|for|in|return|true|false|null|if|else|unless|return)\\\\b\"\n        },\n        {\n            token: \"keyword.operator.stylus\",\n            regex: \"!|~|\\\\+|-|(?:\\\\*)?\\\\*|\\\\/|%|(?:\\\\.)\\\\.\\\\.|<|>|(?:=|:|\\\\?|\\\\+|-|\\\\*|\\\\/|%|<|>)?=|!=\"\n        },\n        {\n            token: \"keyword.operator.stylus\",\n            regex: \"(?:in|is(?:nt)?|not)\\\\b\"\n        },\n        {\n            token : \"string\",\n            regex : \"'(?=.)\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        }, \n        {\n            token : \"constant.numeric\",\n            regex : CssHighlightRules.numRe\n        }, \n        {\n            token : \"keyword\",\n            regex : \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\\\\b\"\n        }, \n        {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }\n    ],\n    \"comment\" : [\n        {\n            token : \"comment\", // closing comment\n            regex : \"\\\\*\\\\/\",\n            next : \"start\"\n        }, {\n            defaultToken : \"comment\"\n        }\n    ],\n    \"qqstring\" : [\n        {\n            token : \"string\",\n            regex : '[^\"\\\\\\\\]+'\n        }, \n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }\n    ],\n    \"qstring\" : [\n        {\n            token : \"string\",\n            regex : \"[^'\\\\\\\\]+\"\n        }, \n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"start\"\n        }\n    ]\n};\n\n};\n\noop.inherits(StylusHighlightRules, TextHighlightRules);\n\nexports.StylusHighlightRules = StylusHighlightRules;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/stylus\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/stylus_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar StylusHighlightRules = require(\"./stylus_highlight_rules\").StylusHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = StylusHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.$id = \"ace/mode/stylus\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-svg.js",
    "content": "ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/svg_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar SvgHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.embedTagRules(JavaScriptHighlightRules, \"js-\", \"script\");\n\n    this.normalizeRules();\n};\n\noop.inherits(SvgHighlightRules, XmlHighlightRules);\n\nexports.SvgHighlightRules = SvgHighlightRules;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/svg\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/xml\",\"ace/mode/javascript\",\"ace/mode/svg_highlight_rules\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar XmlMode = require(\"./xml\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar SvgHighlightRules = require(\"./svg_highlight_rules\").SvgHighlightRules;\nvar MixedFoldMode = require(\"./folding/mixed\").FoldMode;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    XmlMode.call(this);\n    \n    this.HighlightRules = SvgHighlightRules;\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode\n    });\n    \n    this.foldingRules = new MixedFoldMode(new XmlFoldMode(), {\n        \"js-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(Mode, XmlMode);\n\n(function() {\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n    \n\n    this.$id = \"ace/mode/svg\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-swift.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/swift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SwiftHighlightRules = function() {\n   var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"\",\n        \"keyword\": \"__COLUMN__|__FILE__|__FUNCTION__|__LINE__\"\n            + \"|as|associativity|break|case|class|continue|default|deinit|didSet\"\n            + \"|do|dynamicType|else|enum|extension|fallthrough|for|func|get|if|import\"\n            + \"|in|infix|init|inout|is|left|let|let|mutating|new|none|nonmutating\"\n            + \"|operator|override|postfix|precedence|prefix|protocol|return|right\"\n            + \"|safe|Self|self|set|struct|subscript|switch|Type|typealias\"\n            + \"|unowned|unsafe|var|weak|where|while|willSet\"\n            + \"|convenience|dynamic|final|infix|lazy|mutating|nonmutating|optional|override|postfix\"\n            + \"|prefix|required|static|guard|defer\",\n        \"storage.type\": \"bool|double|Double\"\n            + \"|extension|float|Float|int|Int|open|internal|fileprivate|private|public|string|String\",\n        \"constant.language\":\n            \"false|Infinity|NaN|nil|no|null|null|off|on|super|this|true|undefined|yes\",\n        \"support.function\":\n            \"\"\n    }, \"identifier\");\n    \n    function string(start, options) {\n        var nestable = options.nestable || options.interpolation;\n        var interpStart = options.interpolation && options.interpolation.nextState || \"start\";\n        var mainRule = {\n            regex: start + (options.multiline ? \"\" : \"(?=.)\"),\n            token: \"string.start\"\n        };\n        var nextState = [\n            options.escape && {\n                regex: options.escape,\n                token: \"character.escape\"\n            },\n            options.interpolation && {\n                token : \"paren.quasi.start\",\n                regex : lang.escapeRegExp(options.interpolation.lead + options.interpolation.open),\n                push  : interpStart\n            },\n            options.error && {\n                regex: options.error,\n                token: \"error.invalid\"\n            }, \n            {\n                regex: start + (options.multiline ? \"\" : \"|$\"),\n                token: \"string.end\",\n                next: nestable ? \"pop\" : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ].filter(Boolean);\n        \n        if (nestable)\n            mainRule.push = nextState;\n        else\n            mainRule.next = nextState;\n        \n        if (!options.interpolation)\n            return mainRule;\n        \n        var open = options.interpolation.open;\n        var close = options.interpolation.close;\n        var counter = {\n            regex: \"[\" + lang.escapeRegExp(open + close) + \"]\",\n            onMatch: function(val, state, stack) {\n                this.next = val == open ? this.nextState : \"\";\n                if (val == open && stack.length) {\n                    stack.unshift(\"start\", state);\n                    return \"paren\";\n                }\n                if (val == close && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == open ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: interpStart\n        }; \n        return [counter, mainRule];\n    }\n    \n    function comments() {\n        return [{\n                token : \"comment\",\n                regex : \"\\\\/\\\\/(?=.)\",\n                next : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment\", regex : \"$|^\", next: \"start\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment.start\",\n                regex : /\\/\\*/,\n                stateName: \"nested_comment\",\n                push : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment.start\", regex : /\\/\\*/, push: \"nested_comment\"},\n                    {token : \"comment.end\", regex : \"\\\\*\\\\/\", next : \"pop\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            }\n        ];\n    }\n    \n\n    this.$rules = {\n        start: [\n            string('\"', {\n                escape: /\\\\(?:[0\\\\tnr\"']|u{[a-fA-F1-9]{0,8}})/,\n                interpolation: {lead: \"\\\\\", open: \"(\", close: \")\"},\n                error: /\\\\./,\n                multiline: false\n            }),\n            comments(),\n            {\n                 regex: /@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                 token: \"variable.parameter\"\n            },\n            {\n                regex: /[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                token: keywordMapper\n            },  \n            {\n                token : \"constant.numeric\", \n                regex : /[+-]?(?:0(?:b[01]+|o[0-7]+|x[\\da-fA-F])|\\d+(?:(?:\\.\\d*)?(?:[PpEe][+-]?\\d+)?)\\b)/\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            } \n            \n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    \n    this.normalizeRules();\n};\n\n\noop.inherits(SwiftHighlightRules, TextHighlightRules);\n\nexports.HighlightRules = SwiftHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/swift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/swift_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./swift_highlight_rules\").HighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\", nestable: true};\n    \n    this.$id = \"ace/mode/swift\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-tcl.js",
    "content": "ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/tcl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TclHighlightRules = function() {\n\n    this.$rules = {\n        \"start\" : [\n           {\n                token : \"comment\",\n                regex : \"#.*\\\\\\\\$\",\n                next  : \"commentfollow\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"support.function\",\n                regex : '[\\\\\\\\]$',\n                next  : \"splitlineStart\"\n            }, {\n                token : \"text\",\n                regex : /\\\\(?:[\"{}\\[\\]$\\\\])/\n            }, {\n                token : \"text\", // last value before command\n                regex : '^|[^{][;][^}]|[/\\r/]',\n                next  : \"commandItem\"\n            }, {\n                token : \"string\", // single line\n                regex : '[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line \"\"\" string start\n                regex : '[ ]*[\"]',\n                next  : \"qqstring\"\n            }, {\n                token : \"variable.instance\",\n                regex : \"[$]\",\n                next  : \"variable\"\n            }, {\n                token : \"support.function\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"\n            }, {\n                token : \"identifier\",\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[{]\",\n                next  : \"commandItem\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[(]\"\n            },  {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"commandItem\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*\\\\\\\\$\",\n                next  : \"commentfollow\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\",\n                next  : \"start\"\n            }, {\n                token : \"string\", // single line\n                regex : '[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"variable.instance\", \n                regex : \"[$]\",\n                next  : \"variable\"\n            }, {\n                token : \"support.function\",\n                regex : \"(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])\",\n                next  : \"commandItem\"\n            }, {\n                token : \"support.function\",\n                regex : \"[a-zA-Z0-9_/]+(?:[:][:])\",\n                next  : \"commandItem\"\n            }, {\n                token : \"support.function\",\n                regex : \"(?:[:][:])\",\n                next  : \"commandItem\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"support.function\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"\n            }, {\n                token : \"keyword\",\n                regex : \"[a-zA-Z0-9_/]+\",\n                next  : \"start\"\n            } ],\n        \"commentfollow\" : [ \n            {\n                token : \"comment\",\n                regex : \".*\\\\\\\\$\",\n                next  : \"commentfollow\"\n            }, {\n                token : \"comment\",\n                regex : '.+',\n                next  : \"start\"\n        } ],\n        \"splitlineStart\" : [ \n            {\n                token : \"text\",\n                regex : \"^.\",\n                next  : \"start\"\n            }],\n        \"variable\" : [ \n            {\n                token : \"variable.instance\", // variable tcl\n                regex : \"[a-zA-Z_\\\\d]+(?:[(][a-zA-Z_\\\\d]+[)])?\",\n                next  : \"start\"\n            }, {\n                token : \"variable.instance\", // variable tcl with braces\n                regex : \"{?[a-zA-Z_\\\\d]+}?\",\n                next  : \"start\"\n            }],  \n        \"qqstring\" : [ {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '(?:[^\\\\\\\\]|\\\\\\\\.)*?[\"]',\n            next : \"start\"\n        }, {\n            token : \"string\",\n            regex : '.+'\n        } ]\n    };\n};\n\noop.inherits(TclHighlightRules, TextHighlightRules);\n\nexports.TclHighlightRules = TclHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/tcl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/cstyle\",\"ace/mode/tcl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar TclHighlightRules = require(\"./tcl_highlight_rules\").TclHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = TclHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/tcl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-terraform.js",
    "content": "ace.define(\"ace/mode/terraform_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TerraformHighlightRules = function () {\n\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: ['storage.function.terraform'],\n                regex: '\\\\b(output|resource|data|variable|module|export)\\\\b'\n            },\n            {\n                token: \"variable.terraform\",\n                regex: \"\\\\$\\\\s\",\n                push: [\n                    {\n                        token: \"keyword.terraform\",\n                        regex: \"(-var-file|-var)\"\n                    },\n                    {\n                        token: \"variable.terraform\",\n                        regex: \"\\\\n|$\",\n                        next: \"pop\"\n                    },\n\n                    {include: \"strings\"},\n                    {include: \"variables\"},\n                    {include: \"operators\"},\n\n                    {defaultToken: \"text\"}\n                ]\n            },\n            {\n                token: \"language.support.class\",\n                regex: \"\\\\b(timeouts|provider|connection|provisioner|lifecycleprovider|atlas)\\\\b\"\n            },\n\n            {\n                token: \"singleline.comment.terraform\",\n                regex: '#(.)*$'\n            },\n            {\n                token: \"multiline.comment.begin.terraform\",\n                regex: '^\\\\s*\\\\/\\\\*',\n                push: \"blockComment\"\n            },\n            {\n                token: \"storage.function.terraform\",\n                regex: \"^\\\\s*(locals|terraform)\\\\s*{\"\n            },\n            {\n                token: \"paren.lpar\",\n                regex: \"[[({]\"\n            },\n\n            {\n                token: \"paren.rpar\",\n                regex: \"[\\\\])}]\"\n            },\n            {include: \"constants\"},\n            {include: \"strings\"},\n            {include: \"operators\"},\n            {include: \"variables\"}\n        ],\n        blockComment: [{\n            regex: \"^\\\\s*\\\\/\\\\*\",\n            token: \"multiline.comment.begin.terraform\",\n            push: \"blockComment\"\n        }, {\n            regex: \"\\\\*\\\\/\\\\s*$\",\n            token: \"multiline.comment.end.terraform\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }],\n        \"constants\": [\n            {\n                token: \"constant.language.terraform\",\n                regex: \"\\\\b(true|false|yes|no|on|off|EOF)\\\\b\"\n            },\n            {\n                token: \"constant.numeric.terraform\",\n                regex: \"(\\\\b([0-9]+)([kKmMgG]b?)?\\\\b)|(\\\\b(0x[0-9A-Fa-f]+)([kKmMgG]b?)?\\\\b)\"\n            }\n        ],\n        \"variables\": [\n            {\n                token: [\"variable.assignment.terraform\", \"keyword.operator\"],\n                regex: \"\\\\b([a-zA-Z_]+)(\\\\s*=)\"\n            }\n        ],\n        \"interpolated_variables\": [\n            {\n                token: \"variable.terraform\",\n                regex: \"\\\\b(var|self|count|path|local)\\\\b(?:\\\\.*[a-zA-Z_-]*)?\"\n            }\n        ],\n        \"strings\": [\n            {\n                token: \"punctuation.quote.terraform\",\n                regex: \"'\",\n                push:\n                    [{\n                        token: 'punctuation.quote.terraform',\n                        regex: \"'\",\n                        next: 'pop'\n                    },\n                        {include: \"escaped_chars\"},\n                        {defaultToken: 'string'}]\n            },\n            {\n                token: \"punctuation.quote.terraform\",\n                regex: '\"',\n                push:\n                    [{\n                        token: 'punctuation.quote.terraform',\n                        regex: '\"',\n                        next: 'pop'\n                    },\n                        {include: \"interpolation\"},\n                        {include: \"escaped_chars\"},\n                        {defaultToken: 'string'}]\n            }\n        ],\n        \"escaped_chars\": [\n            {\n                token: \"constant.escaped_char.terraform\",\n                regex: \"\\\\\\\\.\"\n            }\n        ],\n        \"operators\": [\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\?|:|==|!=|>|<|>=|<=|&&|\\\\|\\\\\\||!|%|&|\\\\*|\\\\+|\\\\-|/|=\"\n            }\n        ],\n        \"interpolation\": [\n            {// TODO: double $\n                token: \"punctuation.interpolated.begin.terraform\",\n                regex: \"\\\\$?\\\\$\\\\{\",\n                push: [{\n                    token: \"punctuation.interpolated.end.terraform\",\n                    regex: \"\\\\}\",\n                    next: \"pop\"\n                },\n                    {include: \"interpolated_variables\"},\n                    {include: \"operators\"},\n                    {include: \"constants\"},\n                    {include: \"strings\"},\n                    {include: \"functions\"},\n                    {include: \"parenthesis\"},\n                    {defaultToken: \"punctuation\"}\n                ]\n            }\n        ],\n        \"functions\": [\n            {\n                token: \"keyword.function.terraform\",\n                regex: \"\\\\b(abs|basename|base64decode|base64encode|base64gzip|base64sha256|base64sha512|bcrypt|ceil|chomp|chunklist|cidrhost|cidrnetmask|cidrsubnet|coalesce|coalescelist|compact|concat|contains|dirname|distinct|element|file|floor|flatten|format|formatlist|indent|index|join|jsonencode|keys|length|list|log|lookup|lower|map|matchkeys|max|merge|min|md5|pathexpand|pow|replace|rsadecrypt|sha1|sha256|sha512|signum|slice|sort|split|substr|timestamp|timeadd|title|transpose|trimspace|upper|urlencode|uuid|values|zipmap)\\\\b\"\n            }\n        ],\n        \"parenthesis\": [\n            {\n                token: \"paren.lpar\",\n                regex: \"\\\\[\"\n            },\n            {\n                token: \"paren.rpar\",\n                regex: \"\\\\]\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(TerraformHighlightRules, TextHighlightRules);\n\nexports.TerraformHighlightRules = TerraformHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/terraform\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/terraform_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TerraformHighlightRules = require(\"./terraform_highlight_rules\").TerraformHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = TerraformHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n\n(function () {\n    this.$id = \"ace/mode/terraform\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-tex.js",
    "content": "ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TexHighlightRules = function(textClass) {\n\n    if (!textClass)\n        textClass = \"text\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : textClass, // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : textClass,\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass, // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(TexHighlightRules, TextHighlightRules);\n\nexports.TexHighlightRules = TexHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/tex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function(suppressHighlighting) {\n    if (suppressHighlighting)\n        this.HighlightRules = TextHighlightRules;\n    else\n        this.HighlightRules = TexHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   this.lineCommentStart = \"%\";\n   this.getNextLineIndent = function(state, line, tab) {\n      return this.$getIndent(line);\n   };\n\n   this.allowAutoInsert = function() {\n      return false;\n   };\n    this.$id = \"ace/mode/tex\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-text.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/mode/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-textile.js",
    "content": "ace.define(\"ace/mode/textile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TextileHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : function(value) {\n                    if (value.charAt(0) == \"h\")\n                        return \"markup.heading.\" + value.charAt(1);\n                    else\n                        return \"markup.heading\";\n                },\n                regex : \"h1|h2|h3|h4|h5|h6|bq|p|bc|pre\",\n                next  : \"blocktag\"\n            },\n            {\n                token : \"keyword\",\n                regex : \"[\\\\*]+|[#]+\"\n            },\n            {\n                token : \"text\",\n                regex : \".+\"\n            }\n        ],\n        \"blocktag\" : [\n            {\n                token : \"keyword\",\n                regex : \"\\\\. \",\n                next  : \"start\"\n            },\n            {\n                token : \"keyword\",\n                regex : \"\\\\(\",\n                next  : \"blocktagproperties\"\n            }\n        ],\n        \"blocktagproperties\" : [\n            {\n                token : \"keyword\",\n                regex : \"\\\\)\",\n                next  : \"blocktag\"\n            },\n            {\n                token : \"string\",\n                regex : \"[a-zA-Z0-9\\\\-_]+\"\n            },\n            {\n                token : \"keyword\",\n                regex : \"#\"\n            }\n        ]\n    };\n};\n\noop.inherits(TextileHighlightRules, TextHighlightRules);\n\nexports.TextileHighlightRules = TextileHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/textile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/textile_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextileHighlightRules = require(\"./textile_highlight_rules\").TextileHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = TextileHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"intag\")\n            return tab;\n        \n        return \"\";\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.$id = \"ace/mode/textile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-toml.js",
    "content": "ace.define(\"ace/mode/toml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TomlHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n\n    this.$rules = {\n    \"start\": [\n        {\n            token: \"comment.toml\",\n            regex: /#.*$/\n        },\n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        },\n        {\n            token: [\"variable.keygroup.toml\"],\n            regex: \"(?:^\\\\s*)(\\\\[\\\\[([^\\\\]]+)\\\\]\\\\])\"\n        },\n        {\n            token: [\"variable.keygroup.toml\"],\n            regex: \"(?:^\\\\s*)(\\\\[([^\\\\]]+)\\\\])\"\n        },\n        {\n            token : keywordMapper,\n            regex : identifierRe\n        },\n        {\n           token : \"support.date.toml\",\n           regex: \"\\\\d{4}-\\\\d{2}-\\\\d{2}(T)\\\\d{2}:\\\\d{2}:\\\\d{2}(Z)\"\n        },\n        {\n           token: \"constant.numeric.toml\",\n           regex: \"-?\\\\d+(\\\\.?\\\\d+)?\"\n        }\n    ],\n    \"qqstring\" : [\n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        },\n        {\n            token : \"constant.language.escape\",\n            regex : '\\\\\\\\[0tnr\"\\\\\\\\]'\n        },\n        {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        },\n        {\n            defaultToken: \"string\"\n        }\n    ]\n    };\n\n};\n\noop.inherits(TomlHighlightRules, TextHighlightRules);\n\nexports.TomlHighlightRules = TomlHighlightRules;\n});\n\nace.define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var re = this.foldingStartMarker;\n        var line = session.getLine(row);\n        \n        var m = line.match(re);\n        \n        if (!m) return;\n        \n        var startName = m[1] + \".\";\n        \n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            m = line.match(re);\n            if (m && m[1].lastIndexOf(startName, 0) !== 0)\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/toml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/toml_highlight_rules\",\"ace/mode/folding/ini\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TomlHighlightRules = require(\"./toml_highlight_rules\").TomlHighlightRules;\nvar FoldMode = require(\"./folding/ini\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = TomlHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/toml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-tsx.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar TypeScriptHighlightRules = function (options) {\n\n    var tsRules = [\n        {\n            token: [\"storage.type\", \"text\", \"entity.name.function.ts\"],\n            regex: \"(function)(\\\\s+)([a-zA-Z0-9\\$_\\u00a1-\\uffff][a-zA-Z0-9\\d\\$_\\u00a1-\\uffff]*)\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"\n        },\n        {\n            token: [\"keyword\", \"storage.type.variable.ts\"],\n            regex: \"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"\n         },\n        {\n            token: \"keyword\",\n            regex: \"\\\\b(?:super|export|import|keyof|infer)\\\\b\"\n        }, \n        {\n            token: [\"storage.type.variable.ts\"],\n            regex: \"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"\n        }\n    ];\n\n    var JSRules = new JavaScriptHighlightRules({jsx: (options && options.jsx) == true}).getRules();\n    \n    JSRules.no_regex = tsRules.concat(JSRules.no_regex);\n    this.$rules = JSRules;\n};\n\noop.inherits(TypeScriptHighlightRules, JavaScriptHighlightRules);\n\nexports.TypeScriptHighlightRules = TypeScriptHighlightRules;\n});\n\nace.define(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar jsMode = require(\"./javascript\").Mode;\nvar TypeScriptHighlightRules = require(\"./typescript_highlight_rules\").TypeScriptHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = TypeScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, jsMode);\n\n(function() {\n    this.createWorker = function(session) {\n        return null;\n    };\n    this.$id = \"ace/mode/typescript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/tsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/typescript\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar tsMode = require(\"./typescript\").Mode;\n\nvar Mode = function() {\n    tsMode.call(this);\n    this.$highlightRuleConfig = {jsx: true};\n};\noop.inherits(Mode, tsMode);\n\n(function() {\n    this.$id = \"ace/mode/tsx\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-turtle.js",
    "content": "ace.define(\"ace/mode/turtle_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TurtleHighlightRules = function() {\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            include: \"#strings\"\n        }, {\n            include: \"#base-prefix-declarations\"\n        }, {\n            include: \"#string-language-suffixes\"\n        }, {\n            include: \"#string-datatype-suffixes\"\n        }, {\n            include: \"#relative-urls\"\n        }, {\n            include: \"#xml-schema-types\"\n        }, {\n            include: \"#rdf-schema-types\"\n        }, {\n            include: \"#owl-types\"\n        }, {\n            include: \"#qnames\"\n        }, {\n            include: \"#punctuation-operators\"\n        }],\n        \"#base-prefix-declarations\": [{\n            token: \"keyword.other.prefix.turtle\",\n            regex: /@(?:base|prefix)/\n        }],\n        \"#comments\": [{\n            token: [\n                \"punctuation.definition.comment.turtle\",\n                \"comment.line.hash.turtle\"\n            ],\n            regex: /(#)(.*$)/\n        }],\n        \"#owl-types\": [{\n            token: \"support.type.datatype.owl.turtle\",\n            regex: /owl:[a-zA-Z]+/\n        }],\n        \"#punctuation-operators\": [{\n            token: \"keyword.operator.punctuation.turtle\",\n            regex: /;|,|\\.|\\(|\\)|\\[|\\]/\n        }],\n        \"#qnames\": [{\n            token: \"entity.name.other.qname.turtle\",\n            regex: /(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/\n        }],\n        \"#rdf-schema-types\": [{\n            token: \"support.type.datatype.rdf.schema.turtle\",\n            regex: /rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/\n        }],\n        \"#relative-urls\": [{\n            token: \"string.quoted.other.relative.url.turtle\",\n            regex: /</,\n            push: [{\n                token: \"string.quoted.other.relative.url.turtle\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.other.relative.url.turtle\"\n            }]\n        }],\n        \"#string-datatype-suffixes\": [{\n            token: \"keyword.operator.datatype.suffix.turtle\",\n            regex: /\\^\\^/\n        }],\n        \"#string-language-suffixes\": [{\n            token: [\n                \"keyword.operator.language.suffix.turtle\",\n                \"constant.language.suffix.turtle\"\n            ],\n            regex: /(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/\n        }],\n        \"#strings\": [{\n            token: \"string.quoted.triple.turtle\",\n            regex: /\"\"\"/,\n            push: [{\n                token: \"string.quoted.triple.turtle\",\n                regex: /\"\"\"/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.triple.turtle\"\n            }]\n        }, {\n            token: \"string.quoted.double.turtle\",\n            regex: /\"/,\n            push: [{\n                token: \"string.quoted.double.turtle\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"invalid.string.newline\",\n                regex: /$/\n            }, {\n                token: \"constant.character.escape.turtle\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.turtle\"\n            }]\n        }],\n        \"#xml-schema-types\": [{\n            token: \"support.type.datatype.xml.schema.turtle\",\n            regex: /xsd?:[a-z][a-zA-Z]+/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nTurtleHighlightRules.metaData = {\n    fileTypes: [\"ttl\", \"nt\"],\n    name: \"Turtle\",\n    scopeName: \"source.turtle\"\n};\n\n\noop.inherits(TurtleHighlightRules, TextHighlightRules);\n\nexports.TurtleHighlightRules = TurtleHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/turtle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/turtle_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TurtleHighlightRules = require(\"./turtle_highlight_rules\").TurtleHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = TurtleHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/turtle\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-twig.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/twig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TwigHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var tags = \"autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim\";\n    tags = tags + \"|end\" + tags.replace(/\\|/g, \"|end\");\n    var filters = \"abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode\";\n    var functions = \"attribute|constant|cycle|date|dump|parent|random|range|template_from_string\";\n    var tests = \"constant|divisibleby|sameas|defined|empty|even|iterable|odd\";\n    var constants = \"null|none|true|false\";\n    var operators = \"b-and|b-xor|b-or|in|is|and|or|not\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control.twig\": tags,\n        \"support.function.twig\": [filters, functions, tests].join(\"|\"),\n        \"keyword.operator.twig\":  operators,\n        \"constant.language.twig\": constants\n    }, \"identifier\");\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token : \"variable.other.readwrite.local.twig\",\n            regex : \"\\\\{\\\\{-?\",\n            push : \"twig-start\"\n        }, {\n            token : \"meta.tag.twig\",\n            regex : \"\\\\{%-?\",\n            push : \"twig-start\"\n        }, {\n            token : \"comment.block.twig\",\n            regex : \"\\\\{#-?\",\n            push : \"twig-comment\"\n        });\n    }\n    this.$rules[\"twig-comment\"] = [{\n        token : \"comment.block.twig\",\n        regex : \".*-?#\\\\}\",\n        next : \"pop\"\n    }];\n\n    this.$rules[\"twig-start\"] = [{\n        token : \"variable.other.readwrite.local.twig\",\n        regex : \"-?\\\\}\\\\}\",\n        next : \"pop\"\n    }, {\n        token : \"meta.tag.twig\",\n        regex : \"-?%\\\\}\",\n        next : \"pop\"\n    }, {\n        token : \"string\",\n        regex : \"'\",\n        next  : \"twig-qstring\"\n    }, {\n        token : \"string\",\n        regex : '\"',\n        next  : \"twig-qqstring\"\n    }, {\n        token : \"constant.numeric\", // hex\n        regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n    }, {\n        token : \"constant.numeric\", // float\n        regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n    }, {\n        token : \"constant.language.boolean\",\n        regex : \"(?:true|false)\\\\b\"\n    }, {\n        token : keywordMapper,\n        regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n    }, {\n        token : \"keyword.operator.assignment\",\n        regex : \"=|~\"\n    }, {\n        token : \"keyword.operator.comparison\",\n        regex : \"==|!=|<|>|>=|<=|===\"\n    }, {\n        token : \"keyword.operator.arithmetic\",\n        regex : \"\\\\+|-|/|%|//|\\\\*|\\\\*\\\\*\"\n    }, {\n        token : \"keyword.operator.other\",\n        regex : \"\\\\.\\\\.|\\\\|\"\n    }, {\n        token : \"punctuation.operator\",\n        regex : /\\?|:|,|;|\\./\n    }, {\n        token : \"paren.lparen\",\n        regex : /[\\[\\({]/\n    }, {\n        token : \"paren.rparen\",\n        regex : /[\\])}]/\n    }, {\n        token : \"text\",\n        regex : \"\\\\s+\"\n    } ];\n\n    this.$rules[\"twig-qqstring\"] = [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\\"$#ntr]|#{[^\"}]*}/\n        }, {\n            token : \"string\",\n            regex : '\"',\n            next  : \"twig-start\"\n        }, {\n            defaultToken : \"string\"\n        }\n    ];\n\n    this.$rules[\"twig-qstring\"] = [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\'ntr]}/\n        }, {\n            token : \"string\",\n            regex : \"'\",\n            next  : \"twig-start\"\n        }, {\n            defaultToken : \"string\"\n        }\n    ];\n\n    this.normalizeRules();\n};\n\noop.inherits(TwigHighlightRules, TextHighlightRules);\n\nexports.TwigHighlightRules = TwigHighlightRules;\n});\n\nace.define(\"ace/mode/twig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/twig_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar TwigHighlightRules = require(\"./twig_highlight_rules\").TwigHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = TwigHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.blockComment = {start: \"{#\", end: \"#}\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/twig\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-typescript.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"], function (require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar TypeScriptHighlightRules = function (options) {\n\n    var tsRules = [\n        {\n            token: [\"storage.type\", \"text\", \"entity.name.function.ts\"],\n            regex: \"(function)(\\\\s+)([a-zA-Z0-9\\$_\\u00a1-\\uffff][a-zA-Z0-9\\d\\$_\\u00a1-\\uffff]*)\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"\n        },\n        {\n            token: [\"keyword\", \"storage.type.variable.ts\"],\n            regex: \"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"\n         },\n        {\n            token: \"keyword\",\n            regex: \"\\\\b(?:super|export|import|keyof|infer)\\\\b\"\n        }, \n        {\n            token: [\"storage.type.variable.ts\"],\n            regex: \"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"\n        }\n    ];\n\n    var JSRules = new JavaScriptHighlightRules({jsx: (options && options.jsx) == true}).getRules();\n    \n    JSRules.no_regex = tsRules.concat(JSRules.no_regex);\n    this.$rules = JSRules;\n};\n\noop.inherits(TypeScriptHighlightRules, JavaScriptHighlightRules);\n\nexports.TypeScriptHighlightRules = TypeScriptHighlightRules;\n});\n\nace.define(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar jsMode = require(\"./javascript\").Mode;\nvar TypeScriptHighlightRules = require(\"./typescript_highlight_rules\").TypeScriptHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = TypeScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, jsMode);\n\n(function() {\n    this.createWorker = function(session) {\n        return null;\n    };\n    this.$id = \"ace/mode/typescript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-vala.js",
    "content": "ace.define(\"ace/mode/vala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ValaHighlightRules = function() {\n\n    this.$rules = { start: \n       [ { token: \n            [ 'meta.using.vala',\n              'keyword.other.using.vala',\n              'meta.using.vala',\n              'storage.modifier.using.vala',\n              'meta.using.vala',\n              'punctuation.terminator.vala' ],\n           regex: '^(\\\\s*)(using)\\\\b(?:(\\\\s*)([^ ;$]+)(\\\\s*)((?:;)?))?' },\n         { include: '#code' } ],\n      '#all-types': \n       [ { include: '#primitive-arrays' },\n         { include: '#primitive-types' },\n         { include: '#object-types' } ],\n      '#annotations': \n       [ { token: \n            [ 'storage.type.annotation.vala',\n              'punctuation.definition.annotation-arguments.begin.vala' ],\n           regex: '(@[^ (]+)(\\\\()',\n           push: \n            [ { token: 'punctuation.definition.annotation-arguments.end.vala',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: \n                 [ 'constant.other.key.vala',\n                   'text',\n                   'keyword.operator.assignment.vala' ],\n                regex: '(\\\\w*)(\\\\s*)(=)' },\n              { include: '#code' },\n              { token: 'punctuation.seperator.property.vala', regex: ',' },\n              { defaultToken: 'meta.declaration.annotation.vala' } ] },\n         { token: 'storage.type.annotation.vala', regex: '@\\\\w*' } ],\n      '#anonymous-classes-and-new': \n       [ { token: 'keyword.control.new.vala',\n           regex: '\\\\bnew\\\\b',\n           push_disabled: \n            [ { token: 'text',\n                regex: '(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)',\n                next: 'pop' },\n              { token: [ 'storage.type.vala', 'text' ],\n                regex: '(\\\\w+)(\\\\s*)(?=\\\\[)',\n                push: \n                 [ { token: 'text', regex: '}|(?=;|\\\\))', next: 'pop' },\n                   { token: 'text',\n                     regex: '\\\\[',\n                     push: \n                      [ { token: 'text', regex: '\\\\]', next: 'pop' },\n                        { include: '#code' } ] },\n                   { token: 'text',\n                     regex: '{',\n                     push: \n                      [ { token: 'text', regex: '(?=})', next: 'pop' },\n                        { include: '#code' } ] } ] },\n              { token: 'text',\n                regex: '(?=\\\\w.*\\\\()',\n                push: \n                 [ { token: 'text',\n                     regex: '(?<=\\\\))',\n                     TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                     originalRegex: '(?<=\\\\))',\n                     next: 'pop' },\n                   { include: '#object-types' },\n                   { token: 'text',\n                     regex: '\\\\(',\n                     push: \n                      [ { token: 'text', regex: '\\\\)', next: 'pop' },\n                        { include: '#code' } ] } ] },\n              { token: 'meta.inner-class.vala',\n                regex: '{',\n                push: \n                 [ { token: 'meta.inner-class.vala', regex: '}', next: 'pop' },\n                   { include: '#class-body' },\n                   { defaultToken: 'meta.inner-class.vala' } ] } ] } ],\n      '#assertions': \n       [ { token: \n            [ 'keyword.control.assert.vala',\n              'meta.declaration.assertion.vala' ],\n           regex: '\\\\b(assert|requires|ensures)(\\\\s)',\n           push: \n            [ { token: 'meta.declaration.assertion.vala',\n                regex: '$',\n                next: 'pop' },\n              { token: 'keyword.operator.assert.expression-seperator.vala',\n                regex: ':' },\n              { include: '#code' },\n              { defaultToken: 'meta.declaration.assertion.vala' } ] } ],\n      '#class': \n       [ { token: 'meta.class.vala',\n           regex: '(?=\\\\w?[\\\\w\\\\s]*(?:class|(?:@)?interface|enum|struct|namespace)\\\\s+\\\\w+)',\n           push: \n            [ { token: 'paren.vala',\n                regex: '}',\n                next: 'pop' },\n              { include: '#storage-modifiers' },\n              { include: '#comments' },\n              { token: \n                 [ 'storage.modifier.vala',\n                   'meta.class.identifier.vala',\n                   'entity.name.type.class.vala' ],\n                regex: '(class|(?:@)?interface|enum|struct|namespace)(\\\\s+)([\\\\w\\\\.]+)' },\n              { token: 'storage.modifier.extends.vala',\n                regex: ':',\n                push: \n                 [ { token: 'meta.definition.class.inherited.classes.vala',\n                     regex: '(?={|,)',\n                     next: 'pop' },\n                   { include: '#object-types-inherited' },\n                   { include: '#comments' },\n                   { defaultToken: 'meta.definition.class.inherited.classes.vala' } ] },\n              { token: \n                 [ 'storage.modifier.implements.vala',\n                   'meta.definition.class.implemented.interfaces.vala' ],\n                regex: '(,)(\\\\s)',\n                push: \n                 [ { token: 'meta.definition.class.implemented.interfaces.vala',\n                     regex: '(?=\\\\{)',\n                     next: 'pop' },\n                   { include: '#object-types-inherited' },\n                   { include: '#comments' },\n                   { defaultToken: 'meta.definition.class.implemented.interfaces.vala' } ] },\n              { token: 'paren.vala',\n                regex: '{',\n                push: \n                 [ { token: 'paren.vala', regex: '(?=})', next: 'pop' },\n                   { include: '#class-body' },\n                   { defaultToken: 'meta.class.body.vala' } ] },\n              { defaultToken: 'meta.class.vala' } ],\n           comment: 'attempting to put namespace in here.' } ],\n      '#class-body': \n       [ { include: '#comments' },\n         { include: '#class' },\n         { include: '#enums' },\n         { include: '#methods' },\n         { include: '#annotations' },\n         { include: '#storage-modifiers' },\n         { include: '#code' } ],\n      '#code': \n       [ { include: '#comments' },\n         { include: '#class' },\n         { token: 'text',\n           regex: '{',\n           push: \n            [ { token: 'text', regex: '}', next: 'pop' },\n              { include: '#code' } ] },\n         { include: '#assertions' },\n         { include: '#parens' },\n         { include: '#constants-and-special-vars' },\n         { include: '#anonymous-classes-and-new' },\n         { include: '#keywords' },\n         { include: '#storage-modifiers' },\n         { include: '#strings' },\n         { include: '#all-types' } ],\n      '#comments': \n       [ { token: 'punctuation.definition.comment.vala',\n           regex: '/\\\\*\\\\*/' },\n         { include: 'text.html.javadoc' },\n         { include: '#comments-inline' } ],\n      '#comments-inline': \n       [ { token: 'punctuation.definition.comment.vala',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.vala',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.vala' } ] },\n         { token: \n            [ 'text',\n              'punctuation.definition.comment.vala',\n              'comment.line.double-slash.vala' ],\n           regex: '(\\\\s*)(//)(.*$)' } ],\n      '#constants-and-special-vars': \n       [ { token: 'constant.language.vala',\n           regex: '\\\\b(?:true|false|null)\\\\b' },\n         { token: 'variable.language.vala',\n           regex: '\\\\b(?:this|base)\\\\b' },\n         { token: 'constant.numeric.vala',\n           regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\\\b' },\n         { token: [ 'keyword.operator.dereference.vala', 'constant.other.vala' ],\n           regex: '((?:\\\\.)?)\\\\b([A-Z][A-Z0-9_]+)(?!<|\\\\.class|\\\\s*\\\\w+\\\\s*=)\\\\b' } ],\n      '#enums': \n       [ { token: 'text',\n           regex: '^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))',\n           push: \n            [ { token: 'text', regex: '(?=;|})', next: 'pop' },\n              { token: 'constant.other.enum.vala',\n                regex: '\\\\w+',\n                push: \n                 [ { token: 'meta.enum.vala', regex: '(?=,|;|})', next: 'pop' },\n                   { include: '#parens' },\n                   { token: 'text',\n                     regex: '{',\n                     push: \n                      [ { token: 'text', regex: '}', next: 'pop' },\n                        { include: '#class-body' } ] },\n                   { defaultToken: 'meta.enum.vala' } ] } ] } ],\n      '#keywords': \n       [ { token: 'keyword.control.catch-exception.vala',\n           regex: '\\\\b(?:try|catch|finally|throw)\\\\b' },\n         { token: 'keyword.control.vala', regex: '\\\\?|:|\\\\?\\\\?' },\n         { token: 'keyword.control.vala',\n           regex: '\\\\b(?:return|break|case|continue|default|do|while|for|foreach|switch|if|else|in|yield|get|set|value)\\\\b' },\n         { token: 'keyword.operator.vala',\n           regex: '\\\\b(?:typeof|is|as)\\\\b' },\n         { token: 'keyword.operator.comparison.vala',\n           regex: '==|!=|<=|>=|<>|<|>' },\n         { token: 'keyword.operator.assignment.vala', regex: '=' },\n         { token: 'keyword.operator.increment-decrement.vala',\n           regex: '\\\\-\\\\-|\\\\+\\\\+' },\n         { token: 'keyword.operator.arithmetic.vala',\n           regex: '\\\\-|\\\\+|\\\\*|\\\\/|%' },\n         { token: 'keyword.operator.logical.vala', regex: '!|&&|\\\\|\\\\|' },\n         { token: 'keyword.operator.dereference.vala',\n           regex: '\\\\.(?=\\\\S)',\n           originalRegex: '(?<=\\\\S)\\\\.(?=\\\\S)' },\n         { token: 'punctuation.terminator.vala', regex: ';' },\n         { token: 'keyword.operator.ownership', regex: 'owned|unowned' } ],\n      '#methods': \n       [ { token: 'meta.method.vala',\n           regex: '(?!new)(?=\\\\w.*\\\\s+)(?=[^=]+\\\\()',\n           push: \n            [ { token: 'paren.vala', regex: '}|(?=;)', next: 'pop' },\n              { include: '#storage-modifiers' },\n              { token: [ 'entity.name.function.vala', 'meta.method.identifier.vala' ],\n                regex: '([\\\\~\\\\w\\\\.]+)(\\\\s*\\\\()',\n                push: \n                 [ { token: 'meta.method.identifier.vala',\n                     regex: '\\\\)',\n                     next: 'pop' },\n                   { include: '#parameters' },\n                   { defaultToken: 'meta.method.identifier.vala' } ] },\n              { token: 'meta.method.return-type.vala',\n                regex: '(?=\\\\w.*\\\\s+\\\\w+\\\\s*\\\\()',\n                push: \n                 [ { token: 'meta.method.return-type.vala',\n                     regex: '(?=\\\\w+\\\\s*\\\\()',\n                     next: 'pop' },\n                   { include: '#all-types' },\n                   { defaultToken: 'meta.method.return-type.vala' } ] },\n              { include: '#throws' },\n              { token: 'paren.vala',\n                regex: '{',\n                push: \n                 [ { token: 'paren.vala', regex: '(?=})', next: 'pop' },\n                   { include: '#code' },\n                   { defaultToken: 'meta.method.body.vala' } ] },\n              { defaultToken: 'meta.method.vala' } ] } ],\n      '#namespace': \n       [ { token: 'text',\n           regex: '^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))',\n           push: \n            [ { token: 'text', regex: '(?=;|})', next: 'pop' },\n              { token: 'constant.other.namespace.vala',\n                regex: '\\\\w+',\n                push: \n                 [ { token: 'meta.namespace.vala', regex: '(?=,|;|})', next: 'pop' },\n                   { include: '#parens' },\n                   { token: 'text',\n                     regex: '{',\n                     push: \n                      [ { token: 'text', regex: '}', next: 'pop' },\n                        { include: '#code' } ] },\n                   { defaultToken: 'meta.namespace.vala' } ] } ],\n           comment: 'This is not quite right. See the class grammar right now' } ],\n      '#object-types': \n       [ { token: 'storage.type.generic.vala',\n           regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<',\n           push: \n            [ { token: 'storage.type.generic.vala',\n                regex: '>|[^\\\\w\\\\s,\\\\?<\\\\[()\\\\]]',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '>|[^\\\\w\\\\s,\\\\?<\\\\[(?:[,]+)\\\\]]',\n                next: 'pop' },\n              { include: '#object-types' },\n              { token: 'storage.type.generic.vala',\n                regex: '<',\n                push: \n                 [ { token: 'storage.type.generic.vala',\n                     regex: '>|[^\\\\w\\\\s,\\\\[\\\\]<]',\n                     next: 'pop' },\n                   { defaultToken: 'storage.type.generic.vala' } ],\n                comment: 'This is just to support <>\\'s with no actual type prefix' },\n              { defaultToken: 'storage.type.generic.vala' } ] },\n         { token: 'storage.type.object.array.vala',\n           regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*(?=\\\\[)',\n           push: \n            [ { token: 'storage.type.object.array.vala',\n                regex: '(?=[^\\\\]\\\\s])',\n                next: 'pop' },\n              { token: 'text',\n                regex: '\\\\[',\n                push: \n                 [ { token: 'text', regex: '\\\\]', next: 'pop' },\n                   { include: '#code' } ] },\n              { defaultToken: 'storage.type.object.array.vala' } ] },\n         { token: \n            [ 'storage.type.vala',\n              'keyword.operator.dereference.vala',\n              'storage.type.vala' ],\n           regex: '\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*\\\\b)' } ],\n      '#object-types-inherited': \n       [ { token: 'entity.other.inherited-class.vala',\n           regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<',\n           push: \n            [ { token: 'entity.other.inherited-class.vala',\n                regex: '>|[^\\\\w\\\\s,<]',\n                next: 'pop' },\n              { include: '#object-types' },\n              { token: 'storage.type.generic.vala',\n                regex: '<',\n                push: \n                 [ { token: 'storage.type.generic.vala',\n                     regex: '>|[^\\\\w\\\\s,<]',\n                     next: 'pop' },\n                   { defaultToken: 'storage.type.generic.vala' } ],\n                comment: 'This is just to support <>\\'s with no actual type prefix' },\n              { defaultToken: 'entity.other.inherited-class.vala' } ] },\n         { token: \n            [ 'entity.other.inherited-class.vala',\n              'keyword.operator.dereference.vala',\n              'entity.other.inherited-class.vala' ],\n           regex: '\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*)' } ],\n      '#parameters': \n       [ { token: 'storage.modifier.vala', regex: 'final' },\n         { include: '#primitive-arrays' },\n         { include: '#primitive-types' },\n         { include: '#object-types' },\n         { token: 'variable.parameter.vala', regex: '\\\\w+' } ],\n      '#parens': \n       [ { token: 'text',\n           regex: '\\\\(',\n           push: \n            [ { token: 'text', regex: '\\\\)', next: 'pop' },\n              { include: '#code' } ] } ],\n      '#primitive-arrays': \n       [ { token: 'storage.type.primitive.array.vala',\n           regex: '\\\\b(?:bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|int8|int16|int32|int64|uint8|uint16|uint32|uint64)(?:\\\\[\\\\])*\\\\b' } ],\n      '#primitive-types': \n       [ { token: 'storage.type.primitive.vala',\n           regex: '\\\\b(?:var|bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\\\\b',\n           comment: 'var is not really a primitive, but acts like one in most cases' } ],\n      '#storage-modifiers': \n       [ { token: 'storage.modifier.vala',\n           regex: '\\\\b(?:public|private|protected|internal|static|final|sealed|virtual|override|abstract|readonly|volatile|dynamic|async|unsafe|out|ref|weak|owned|unowned|const)\\\\b',\n           comment: 'Not sure about unsafe and readonly' } ],\n      '#strings': \n       [ { token: 'punctuation.definition.string.begin.vala',\n           regex: '@\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala',\n                regex: '\\\\\\\\.|%[\\\\w\\\\.\\\\-]+|\\\\$(?:\\\\w+|\\\\([\\\\w\\\\s\\\\+\\\\-\\\\*\\\\/]+\\\\))' },\n              { defaultToken: 'string.quoted.interpolated.vala' } ] },\n         { token: 'punctuation.definition.string.begin.vala',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala', regex: '\\\\\\\\.' },\n              { token: 'constant.character.escape.vala',\n                regex: '%[\\\\w\\\\.\\\\-]+' },\n              { defaultToken: 'string.quoted.double.vala' } ] },\n         { token: 'punctuation.definition.string.begin.vala',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.single.vala' } ] },\n         { token: 'punctuation.definition.string.begin.vala',\n           regex: '\"\"\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\"\"\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala',\n                regex: '%[\\\\w\\\\.\\\\-]+' },\n              { defaultToken: 'string.quoted.triple.vala' } ] } ],\n      '#throws': \n       [ { token: 'storage.modifier.vala',\n           regex: 'throws',\n           push: \n            [ { token: 'meta.throwables.vala', regex: '(?={|;)', next: 'pop' },\n              { include: '#object-types' },\n              { defaultToken: 'meta.throwables.vala' } ] } ],\n      '#values': \n       [ { include: '#strings' },\n         { include: '#object-types' },\n         { include: '#constants-and-special-vars' } ] };\n    \n    this.normalizeRules();\n};\n\nValaHighlightRules.metaData = { \n    comment: 'Based heavily on the Java bundle\\'s language syntax. TODO:\\n* Closures\\n* Delegates\\n* Properties: Better support for properties.\\n* Annotations\\n* Error domains\\n* Named arguments\\n* Array slicing, negative indexes, multidimensional\\n* construct blocks\\n* lock blocks?\\n* regex literals\\n* DocBlock syntax highlighting. (Currently importing javadoc)\\n* Folding rule for comments.\\n',\n      fileTypes: [ 'vala' ],\n      foldingStartMarker: '(\\\\{\\\\s*(//.*)?$|^\\\\s*// \\\\{\\\\{\\\\{)',\n      foldingStopMarker: '^\\\\s*(\\\\}|// \\\\}\\\\}\\\\}$)',\n      name: 'Vala',\n      scopeName: 'source.vala' };\n\n\noop.inherits(ValaHighlightRules, TextHighlightRules);\n\nexports.ValaHighlightRules = ValaHighlightRules;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/vala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/vala_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar ValaHighlightRules = require(\"./vala_highlight_rules\").ValaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = ValaHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/vala\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-vbscript.js",
    "content": "ace.define(\"ace/mode/vbscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar VBScriptHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control.asp\":  \"If|Then|Else|ElseIf|End|While|Wend|For|To|Each|Case|Select|Return\"\n            + \"|Continue|Do|Until|Loop|Next|With|Exit|Function|Property|Type|Enum|Sub|IIf\",\n        \"storage.type.asp\": \"Dim|Call|Class|Const|Dim|Redim|Set|Let|Get|New|Randomize|Option|Explicit\",\n        \"storage.modifier.asp\": \"Private|Public|Default\",\n        \"keyword.operator.asp\": \"Mod|And|Not|Or|Xor|as\",\n        \"constant.language.asp\": \"Empty|False|Nothing|Null|True\",\n        \"support.class.asp\": \"Application|ObjectContext|Request|Response|Server|Session\",\n        \"support.class.collection.asp\": \"Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables\",\n        \"support.constant.asp\": \"TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute\"\n            + \"|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout\",\n        \"support.function.asp\": \"Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog\"\n            + \"|BinaryWrite|Clear|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex\",\n        \"support.function.event.asp\": \"Application_OnEnd|Application_OnStart\"\n            + \"|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart\",\n        \"support.function.vb.asp\": \"Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng\"\n            + \"|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial\"\n            + \"|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency\"\n            + \"|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex\"\n            + \"|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric\"\n            + \"|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim\"\n            + \"|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace\"\n            + \"|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion\"\n            + \"|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse\"\n            + \"|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year\",\n        \"support.type.vb.asp\": \"vbtrue|vbfalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|\"\n            + \"int32|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday\"\n            + \"|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek\"\n            + \"|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger\"\n            + \"|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant\"\n            + \"|vbDataObject|vbDecimal|vbByte|vbArray\"\n    }, \"identifier\", true);\n\n    this.$rules = {\n    \"start\": [\n        {\n            token: [\n                \"meta.ending-space\"\n            ],\n            regex: \"$\"\n        },\n        {\n            token: [null],\n            regex: \"^(?=\\\\t)\",\n            next: \"state_3\"\n        },\n        {\n            token: [null],\n            regex: \"^(?= )\",\n            next: \"state_4\"\n        },\n        {\n            token: [\n                \"text\",\n                \"storage.type.function.asp\",\n                \"text\",\n                \"entity.name.function.asp\",\n                \"text\",\n                \"punctuation.definition.parameters.asp\",\n                \"variable.parameter.function.asp\",\n                \"punctuation.definition.parameters.asp\"\n            ],\n            regex: \"^(\\\\s*)(Function|Sub)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()([^)]*)(\\\\))\"\n        },\n        {\n            token: \"punctuation.definition.comment.asp\",\n            regex: \"'|REM(?=\\\\s|$)\",\n            next: \"comment\",\n            caseInsensitive: true\n        },\n        {\n            token: \"storage.type.asp\",\n            regex: \"On Error Resume Next|On Error GoTo\",\n            caseInsensitive: true\n        },\n        {\n            token: \"punctuation.definition.string.begin.asp\",\n            regex: '\"',\n            next: \"string\"\n        },\n        {\n            token: [\n                \"punctuation.definition.variable.asp\"\n            ],\n            regex: \"(\\\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b\\\\s*\"\n        },\n        {\n            token: \"constant.numeric.asp\",\n            regex: \"-?\\\\b(?:(?:0(?:x|X)[0-9a-fA-F]*)|(?:(?:[0-9]+\\\\.?[0-9]*)|(?:\\\\.[0-9]+))(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"\n        },\n        {\n            regex: \"\\\\w+\",\n            token: keywordMapper\n        },\n        {\n            token: [\"entity.name.function.asp\"],\n            regex: \"(?:(\\\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b)(?=\\\\(\\\\)?))\"\n        },\n        {\n            token: [\"keyword.operator.asp\"],\n            regex: \"\\\\-|\\\\+|\\\\*\\\\/|\\\\>|\\\\<|\\\\=|\\\\&\"\n        }\n    ],\n    \"state_3\": [\n        {\n            token: [\n                \"meta.odd-tab.tabs\",\n                \"meta.even-tab.tabs\"\n            ],\n            regex: \"(\\\\t)(\\\\t)?\"\n        },\n        {\n            token: \"meta.leading-space\",\n            regex: \"(?=[^\\\\t])\",\n            next: \"start\"\n        },\n        {\n            token: \"meta.leading-space\",\n            regex: \".\",\n            next: \"state_3\"\n        }\n    ],\n    \"state_4\": [\n        {\n            token: [\"meta.odd-tab.spaces\", \"meta.even-tab.spaces\"],\n            regex: \"(  )(  )?\"\n        },\n        {\n            token: \"meta.leading-space\",\n            regex: \"(?=[^ ])\",\n            next: \"start\"\n        },\n        {\n            defaultToken: \"meta.leading-space\"\n        }\n    ],\n    \"comment\": [\n        {\n            token: \"comment.line.apostrophe.asp\",\n            regex: \"$|(?=(?:%>))\",\n            next: \"start\"\n        },\n        {\n            defaultToken: \"comment.line.apostrophe.asp\"\n        }\n    ],\n    \"string\": [\n        {\n            token: \"constant.character.escape.apostrophe.asp\",\n            regex: '\"\"'\n        },\n        {\n            token: \"string.quoted.double.asp\",\n            regex: '\"',\n            next: \"start\"\n        },\n        {\n            defaultToken: \"string.quoted.double.asp\"\n        }\n    ]\n};\n\n};\n\noop.inherits(VBScriptHighlightRules, TextHighlightRules);\n\nexports.VBScriptHighlightRules = VBScriptHighlightRules;\n});\n\nace.define(\"ace/mode/vbscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vbscript_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VBScriptHighlightRules = require(\"./vbscript_highlight_rules\").VBScriptHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = VBScriptHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = [\"'\", \"REM\"];\n    \n    this.$id = \"ace/mode/vbscript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-velocity.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/velocity_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar VelocityHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var builtinConstants = lang.arrayToMap(\n        ('true|false|null').split('|')\n    );\n\n    var builtinFunctions = lang.arrayToMap(\n        (\"_DateTool|_DisplayTool|_EscapeTool|_FieldTool|_MathTool|_NumberTool|_SerializerTool|_SortTool|_StringTool|_XPathTool\").split('|')\n    );\n\n    var builtinVariables = lang.arrayToMap(\n        ('$contentRoot|$foreach').split('|')\n    );\n\n    var keywords = lang.arrayToMap(\n        (\"#set|#macro|#include|#parse|\" +\n        \"#if|#elseif|#else|#foreach|\" +\n        \"#break|#end|#stop\"\n        ).split('|')\n    );\n\n    this.$rules.start.push(\n        {\n            token : \"comment\",\n            regex : \"##.*$\"\n        },{\n            token : \"comment.block\", // multi line comment\n            regex : \"#\\\\*\",\n            next : \"vm_comment\"\n        }, {\n            token : \"string.regexp\",\n            regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n        }, {\n            token : function(value) {\n                if (keywords.hasOwnProperty(value))\n                    return \"keyword\";\n                else if (builtinConstants.hasOwnProperty(value))\n                    return \"constant.language\";\n                else if (builtinVariables.hasOwnProperty(value))\n                    return \"variable.language\";\n                else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n                    return \"support.function\";\n                else if (value == \"debugger\")\n                    return \"invalid.deprecated\";\n                else\n                    if(value.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*)$/))\n                        return \"variable\";\n                    return \"identifier\";\n            },\n            regex : \"[a-zA-Z$#][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    );\n\n    this.$rules[\"vm_comment\"] = [\n        {\n            token : \"comment\", // closing comment\n            regex : \"\\\\*#|-->\",\n            next : \"start\"\n        }, {\n            defaultToken: \"comment\"\n        }\n    ];\n\n    this.$rules[\"vm_start\"] = [\n        {\n            token: \"variable\",\n            regex: \"}\",\n            next: \"pop\"\n        }, {\n            token : \"string.regexp\",\n            regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n        }, {\n            token : function(value) {\n                if (keywords.hasOwnProperty(value))\n                    return \"keyword\";\n                else if (builtinConstants.hasOwnProperty(value))\n                    return \"constant.language\";\n                else if (builtinVariables.hasOwnProperty(value))\n                    return \"variable.language\";\n                else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n                    return \"support.function\";\n                else if (value == \"debugger\")\n                    return \"invalid.deprecated\";\n                else\n                    if(value.match(/^(\\$[a-zA-Z_$][a-zA-Z0-9_]*)$/))\n                        return \"variable\";\n                    return \"identifier\";\n            },\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    ];\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"variable\",\n            regex: \"\\\\${\",\n            push: \"vm_start\"\n        });\n    }\n\n    this.normalizeRules();\n};\n\noop.inherits(VelocityHighlightRules, TextHighlightRules);\n\nexports.VelocityHighlightRules = VelocityHighlightRules;\n});\n\nace.define(\"ace/mode/folding/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"##\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"##\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"##\" && next[indent] == \"##\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"##\" && prev[indent] == \"##\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/velocity_highlight_rules\",\"ace/mode/folding/velocity\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar VelocityHighlightRules = require(\"./velocity_highlight_rules\").VelocityHighlightRules;\nvar FoldMode = require(\"./folding/velocity\").FoldMode;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = VelocityHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.lineCommentStart = \"##\";\n    this.blockComment = {start: \"#*\", end: \"*#\"};\n    this.$id = \"ace/mode/velocity\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-verilog.js",
    "content": "ace.define(\"ace/mode/verilog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar VerilogHighlightRules = function() {\nvar keywords = \"always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|\" +\n    \"deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|\" +\n    \"endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|\" +\n    \"highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|\" +\n    \"macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|\" +\n    \"posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|\" +\n    \"reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|\" +\n    \"strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|\" +\n    \"unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xor\" +\n    \"begin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|\" +\n    \"endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|\" +\n    \"macromodule|module|primitive|repeat|specify|table|task|while\";\n\n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n    var builtinFunctions = (\n        \"count|min|max|avg|sum|rank|now|coalesce|main\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"//.*$\"\n        }, {\n            token : \"comment.start\",\n            regex : \"/\\\\*\",\n            next : [\n                { token : \"comment.end\", regex : \"\\\\*/\", next: \"start\" },\n                { defaultToken : \"comment\" }\n            ]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            next : [\n                { token : \"constant.language.escape\", regex : /\\\\(?:[ntvfa\\\\\"]|[0-7]{1,3}|\\x[a-fA-F\\d]{1,2}|)/, consumeLineEnd : true },\n                { token : \"string.end\", regex : '\"|$', next: \"start\" },\n                { defaultToken : \"string\" }\n            ]\n        }, {\n            token : \"string\",\n            regex : \"'^[']'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(VerilogHighlightRules, TextHighlightRules);\n\nexports.VerilogHighlightRules = VerilogHighlightRules;\n});\n\nace.define(\"ace/mode/verilog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/verilog_highlight_rules\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VerilogHighlightRules = require(\"./verilog_highlight_rules\").VerilogHighlightRules;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = VerilogHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = { '\"': '\"' };\n\n\n    this.$id = \"ace/mode/verilog\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-vhdl.js",
    "content": "ace.define(\"ace/mode/vhdl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar VHDLHighlightRules = function() {\n\n\n    \n    var keywords = \"access|after|ailas|all|architecture|assert|attribute|\"+\n                   \"begin|block|buffer|bus|case|component|configuration|\"+\n                   \"disconnect|downto|else|elsif|end|entity|file|for|function|\"+\n                   \"generate|generic|guarded|if|impure|in|inertial|inout|is|\"+\n                   \"label|linkage|literal|loop|mapnew|next|of|on|open|\"+\n                   \"others|out|port|process|pure|range|record|reject|\"+\n                   \"report|return|select|shared|subtype|then|to|transport|\"+\n                   \"type|unaffected|united|until|wait|when|while|with\";\n    \n    var storageType = \"bit|bit_vector|boolean|character|integer|line|natural|\"+\n                      \"positive|real|register|severity|signal|signed|\"+\n                      \"std_logic|std_logic_vector|string||text|time|unsigned|\"+\n                      \"variable\";\n    \n    var storageModifiers = \"array|constant\";\n    \n    var keywordOperators = \"abs|and|mod|nand|nor|not|rem|rol|ror|sla|sll|sra\"+\n                           \"srl|xnor|xor\";\n    \n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.operator\": keywordOperators,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"storage.modifier\": storageModifiers,\n        \"storage.type\": storageType\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"--.*$\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"keyword\", // pre-compiler directives\n            regex : \"\\\\s*(?:library|package|use)\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"&|\\\\*|\\\\+|\\\\-|\\\\/|<|=|>|\\\\||=>|\\\\*\\\\*|:=|\\\\/=|>=|<=|<>\" \n        }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\'|\\\\:|\\\\,|\\\\;|\\\\.\"\n        },{\n            token : \"paren.lparen\",\n            regex : \"[[(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\])]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n\n       \n    };\n};\n\noop.inherits(VHDLHighlightRules, TextHighlightRules);\n\nexports.VHDLHighlightRules = VHDLHighlightRules;\n});\n\nace.define(\"ace/mode/vhdl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vhdl_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VHDLHighlightRules = require(\"./vhdl_highlight_rules\").VHDLHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = VHDLHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.$id = \"ace/mode/vhdl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-visualforce.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@(?!viewport)\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"[:;]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n\n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        if (state==='ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"b\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"br\": {},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": {\"span\": 1},\n    \"colgroup\": {\"span\": 1},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"details\": {\"open\": 1},\n    \"dfn\": {},\n    \"dialog\": {\"open\": 1},\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": {\"manifest\": 1},\n    \"i\": {},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"kbd\": {},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"legend\": {},\n    \"li\": {\"value\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"main\": {},\n    \"map\": {\"name\": 1},\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"nav\": {},\n    \"noscript\": {\"href\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"p\": {},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"pre\": {},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"q\": {\"cite\": 1},\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"small\": {},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"span\": {},\n    \"strong\": {},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": {\"summary\": 1},\n    \"tbody\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"tfoot\": {},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"thead\": {},\n    \"time\": {\"datetime\": 1},\n    \"title\": {},\n    \"tr\": {},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"wbr\": {}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/visualforce_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"../mode/html_highlight_rules\").HtmlHighlightRules;\n\nfunction string(options) {\n    return {\n        token: options.token + \".start\",\n        regex: options.start,\n        push: [{\n            token : \"constant.language.escape\",\n            regex : options.escape\n        }, {\n            token: options.token + \".end\",\n            regex: options.start,\n            next: \"pop\"\n        }, {\n            defaultToken: options.token\n        }]\n    };\n}\nvar VisualforceHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"$Action|$Api|$Component|$ComponentLabel|$CurrentPage|$FieldSet|$Label|$Label|\" +\n            \"$ObjectType|$Organization|$Page|$Permission|$Profile|$Resource|$SControl|\" +\n            \"$Setup|$Site|$System.OriginDateTime|$User|$UserRole|\" +\n            \"Site|UITheme|UIThemeDisplayed\",\n        \"keyword\":\n            \"\",\n        \"storage.type\":\n            \"\",\n        \"constant.language\":\n            \"true|false|null|TRUE|FALSE|NULL\",\n        \"support.function\":\n            \"DATE|DATEVALUE|DATETIMEVALUE|DAY|MONTH|NOW|TODAY|YEAR|BLANKVALUE|ISBLANK|\" +\n            \"NULLVALUE|PRIORVALUE|AND|CASE|IF|ISCHANGED|ISNEW|ISNUMBER|NOT|OR|ABS|\" +\n            \"CEILING|EXP|FLOOR|LN|LOG|MAX|MIN|MOD|ROUND|SQRT|BEGINS|BR|CASESAFEID|\" +\n            \"CONTAINS|FIND|GETSESSIONID|HTMLENCODE|ISPICKVAL|JSENCODE|JSINHTMLENCODE|\" +\n            \"LEFT|LEN|LOWER|LPAD|MID|RIGHT|RPAD|SUBSTITUTE|TEXT|TRIM|UPPER|URLENCODE|VALUE|\" +\n            \"GETRECORDIDS|INCLUDE|LINKTO|REGEX|REQUIRESCRIPT|URLFOR|VLOOKUP|HTMLENCODE|JSENCODE|\" +\n            \"JSINHTMLENCODE|URLENCODE\"\n    }, \"identifier\");\n\n    HtmlHighlightRules.call(this);\n    var hbs = {\n        token : \"keyword.start\",\n        regex : \"{!\",\n        push : \"Visualforce\"\n    };\n    for (var key in this.$rules) {\n        this.$rules[key].unshift(hbs);\n    }\n    this.$rules.Visualforce = [\n        string({\n            start: '\"',\n            escape: /\\\\[btnfr\"'\\\\]/,\n            token: \"string\",\n            multiline: true\n        }),\n        string({\n            start: \"'\",\n            escape: /\\\\[btnfr\"'\\\\]/,\n            token: \"string\",\n            multiline: true\n        }),\n        {\n            token: \"comment.start\",\n            regex : \"\\\\/\\\\*\",\n            push: [\n                {token : \"comment.end\", regex : \"\\\\*\\\\/|(?=})\", next : \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"keyword.end\",\n            regex : \"}\",\n            next : \"pop\"\n        }, {\n            token : keywordMapper,\n            regex : /[a-zA-Z$_\\u00a1-\\uffff][a-zA-Z\\d$_\\u00a1-\\uffff]*\\b/\n        }, {\n            token : \"keyword.operator\",\n            regex : /==|<>|!=|<=|>=|&&|\\|\\||[+\\-*/^()=<>&]/\n        }, {\n            token : \"punctuation.operator\",\n            regex : /[?:,;.]/\n        }, {\n            token : \"paren.lparen\",\n            regex : /[\\[({]/\n        }, {\n            token : \"paren.rparen\",\n            regex : /[\\])}]/\n        }\n    ];\n\n    this.normalizeRules();\n};\n\noop.inherits(VisualforceHighlightRules, HtmlHighlightRules);\n\nexports.VisualforceHighlightRules = VisualforceHighlightRules;\n});\n\nace.define(\"ace/mode/visualforce\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/visualforce_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar VisualforceHighlightRules = require(\"./visualforce_highlight_rules\").VisualforceHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\n\nfunction VisualforceMode() {\n    HtmlMode.call(this);\n\n    this.HighlightRules = VisualforceHighlightRules;\n    this.foldingRules = new HtmlFoldMode();\n    this.$behaviour = new XmlBehaviour();\n}\n\noop.inherits(VisualforceMode, HtmlMode);\n\nVisualforceMode.prototype.emmetConfig = {\n    profile: \"xhtml\"\n};\n\nexports.Mode = VisualforceMode;\n\n});                (function() {\n                    ace.require([\"ace/mode/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-wollok.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/,\n                next  : \"start\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/wollok_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar WollokHighlightRules = function() {\n    var keywords = (\n    \"test|describe|package|inherits|false|import|else|or|class|and|not|native|override|program|self|try|const|var|catch|object|super|throw|if|null|return|true|new|constructor|method|mixin\"\n    );\n\n    var buildinConstants = (\"null|assert|console\");\n\n    var langClasses = (\n        \"Object|Pair|String|Boolean|Number|Integer|Double|Collection|Set|List|Exception|Range\" +\n        \"|StackTraceElement\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"self\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"===|&&|\\\\*=|\\\\.\\\\.|\\\\*\\\\*|#|!|%|\\\\*|\\\\?:|\\\\+|\\\\/|,|\\\\+=|\\\\-|\\\\.\\\\.<|!==|:|\\\\/=|\\\\?\\\\.|\\\\+\\\\+|>|=|<|>=|=>|==|\\\\]|\\\\[|\\\\-=|\\\\->|\\\\||\\\\-\\\\-|<>|!=|%=|\\\\|\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(WollokHighlightRules, TextHighlightRules);\n\nexports.WollokHighlightRules = WollokHighlightRules;\n});\n\nace.define(\"ace/mode/wollok\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/wollok_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar WollokHighlightRules = require(\"./wollok_highlight_rules\").WollokHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = WollokHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/wollok\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-xml.js",
    "content": "ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-xquery.js",
    "content": "ace.define(\"ace/mode/xquery/xquery_lexer\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var XQueryTokenizer = exports.XQueryTokenizer = function XQueryTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 56:                        // '<?'\n      shift(56);                    // '<?'\n      break;\n    case 40:                        // '(#'\n      shift(40);                    // '(#'\n      break;\n    case 42:                        // '(:~'\n      shift(42);                    // '(:~'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    case 274:                       // '}'\n      shift(274);                   // '}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 39:                        // '('\n      shift(39);                    // '('\n      break;\n    case 43:                        // ')'\n      shift(43);                    // ')'\n      break;\n    case 49:                        // '/'\n      shift(49);                    // '/'\n      break;\n    case 62:                        // '['\n      shift(62);                    // '['\n      break;\n    case 63:                        // ']'\n      shift(63);                    // ']'\n      break;\n    case 46:                        // ','\n      shift(46);                    // ','\n      break;\n    case 48:                        // '.'\n      shift(48);                    // '.'\n      break;\n    case 53:                        // ';'\n      shift(53);                    // ';'\n      break;\n    case 51:                        // ':'\n      shift(51);                    // ':'\n      break;\n    case 34:                        // '!'\n      shift(34);                    // '!'\n      break;\n    case 273:                       // '|'\n      shift(273);                   // '|'\n      break;\n    case 2:                         // Annotation\n      shift(2);                     // Annotation\n      break;\n    case 1:                         // ModuleDecl\n      shift(1);                     // ModuleDecl\n      break;\n    case 3:                         // OptionDecl\n      shift(3);                     // OptionDecl\n      break;\n    case 12:                        // AttrTest\n      shift(12);                    // AttrTest\n      break;\n    case 13:                        // Wildcard\n      shift(13);                    // Wildcard\n      break;\n    case 15:                        // IntegerLiteral\n      shift(15);                    // IntegerLiteral\n      break;\n    case 16:                        // DecimalLiteral\n      shift(16);                    // DecimalLiteral\n      break;\n    case 17:                        // DoubleLiteral\n      shift(17);                    // DoubleLiteral\n      break;\n    case 5:                         // Variable\n      shift(5);                     // Variable\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 4:                         // Operator\n      shift(4);                     // Operator\n      break;\n    case 33:                        // EOF\n      shift(33);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 58:                        // '>'\n      shift(58);                    // '>'\n      break;\n    case 50:                        // '/>'\n      shift(50);                    // '/>'\n      break;\n    case 27:                        // QName\n      shift(27);                    // QName\n      break;\n    case 57:                        // '='\n      shift(57);                    // '='\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 23:                        // ElementContentChar\n      shift(23);                    // ElementContentChar\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 7:                         // EndTag\n      shift(7);                     // EndTag\n      break;\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 25:                        // AposAttrContentChar\n      shift(25);                    // AposAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 24:                        // QuotAttrContentChar\n      shift(24);                    // QuotAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 11:                        // CDataSectionContents\n      shift(11);                    // CDataSectionContents\n      break;\n    case 64:                        // ']]>'\n      shift(64);                    // ']]>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 9:                         // DirCommentContents\n      shift(9);                     // DirCommentContents\n      break;\n    case 47:                        // '-->'\n      shift(47);                    // '-->'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 10:                        // DirPIContents\n      shift(10);                    // DirPIContents\n      break;\n    case 59:                        // '?'\n      shift(59);                    // '?'\n      break;\n    case 60:                        // '?>'\n      shift(60);                    // '?>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 8:                         // PragmaContents\n      shift(8);                     // PragmaContents\n      break;\n    case 36:                        // '#'\n      shift(36);                    // '#'\n      break;\n    case 37:                        // '#)'\n      shift(37);                    // '#)'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 30:                        // CommentContents\n      shift(30);                    // CommentContents\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(5);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 31:                        // DocTag\n      shift(31);                    // DocTag\n      break;\n    case 32:                        // DocCommentContents\n      shift(32);                    // DocCommentContents\n      break;\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(6);                  // PredefinedEntityRef | EscapeQuot | QuotChar | CharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 21:                        // QuotChar\n      shift(21);                    // QuotChar\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 22:                        // AposChar\n      shift(22);                    // AposChar\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 14:                        // EQName^Token\n      shift(14);                    // EQName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 26:                        // NCName^Token\n      shift(26);                    // NCName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 28)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryTokenizer.MAP1[(c0 & 15) + XQueryTokenizer.MAP1[(c1 & 31) + XQueryTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryTokenizer.TRANSITION[(i0 & 15) + XQueryTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 276; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2062 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryTokenizer.EXPECTED[(i0 & 3) + XQueryTokenizer.EXPECTED[(i1 & 3) + XQueryTokenizer.EXPECTED[(i2 & 3) + XQueryTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryTokenizer.MAP0 =\n[ 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35\n];\n\nXQueryTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n];\n\nXQueryTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 35, 31, 35, 31, 31, 35\n];\n\nXQueryTokenizer.INITIAL =\n[ 1, 2, 36867, 45060, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nXQueryTokenizer.TRANSITION =\n[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008, 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233, 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008, 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987, 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370, 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888, 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855, 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888, 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518, 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694, 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701, 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401, 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505, 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654, 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964, 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279, 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711, 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831, 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935, 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222, 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946, 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008, 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233, 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067, 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386, 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401, 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193, 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552, 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851, 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224, 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659, 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401, 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211, 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185, 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401, 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358, 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418, 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540, 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211, 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659, 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419, 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982, 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462, 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164, 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211, 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211, 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607, 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086, 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057, 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613, 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344, 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211, 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799, 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930, 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085, 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729, 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189, 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568, 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121, 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619, 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211, 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086, 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836, 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211, 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986, 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500, 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356, 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989, 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211, 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890, 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211, 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601, 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260, 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261, 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488, 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248, 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490, 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274, 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782, 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888, 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261, 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888, 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888, 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628, 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401, 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895, 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738, 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678, 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888, 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217, 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473, 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783, 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837, 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888, 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523, 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938, 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574, 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016, 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835, 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181, 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888, 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334, 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437, 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497, 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401, 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401, 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851, 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000, 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888, 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401, 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058, 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144, 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856, 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889, 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367, 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572, 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764, 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942, 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211, 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590, 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123, 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963, 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097, 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442, 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775, 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284, 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679, 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211, 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659, 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853, 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113, 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413, 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164, 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211, 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890, 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211, 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123, 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086, 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105, 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782, 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154, 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666, 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211, 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739, 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778, 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447, 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008, 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059, 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121, 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211, 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836, 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211, 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888, 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893, 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064, 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890, 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888, 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211, 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100, 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888, 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888, 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346, 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n];\n\nXQueryTokenizer.EXPECTED =\n[ 290, 300, 304, 353, 296, 309, 305, 319, 315, 324, 328, 352, 354, 334, 338, 330, 320, 345, 349, 293, 358, 362, 341, 366, 312, 370, 374, 378, 382, 386, 390, 394, 398, 737, 402, 634, 439, 604, 634, 634, 634, 634, 408, 634, 634, 634, 404, 634, 634, 634, 457, 634, 634, 963, 634, 634, 413, 634, 634, 634, 634, 634, 634, 634, 663, 418, 422, 903, 902, 426, 431, 548, 634, 437, 521, 919, 443, 615, 409, 449, 455, 624, 731, 751, 634, 461, 465, 672, 470, 469, 474, 481, 485, 477, 489, 493, 629, 542, 497, 505, 603, 602, 991, 648, 510, 804, 634, 515, 958, 526, 525, 530, 768, 634, 546, 552, 711, 710, 593, 558, 562, 618, 566, 570, 574, 578, 582, 586, 590, 608, 612, 660, 822, 821, 634, 622, 596, 444, 628, 533, 724, 633, 640, 653, 647, 652, 536, 1008, 451, 450, 445, 657, 670, 676, 685, 689, 693, 697, 701, 704, 707, 715, 719, 798, 815, 634, 723, 762, 996, 634, 728, 969, 730, 735, 908, 634, 741, 679, 889, 511, 747, 634, 750, 755, 499, 666, 499, 501, 759, 772, 776, 780, 634, 787, 784, 797, 802, 809, 808, 427, 814, 1006, 517, 634, 519, 853, 634, 813, 850, 793, 634, 819, 826, 833, 832, 837, 843, 847, 857, 861, 863, 867, 871, 875, 879, 883, 643, 887, 539, 980, 979, 634, 893, 944, 634, 900, 896, 634, 907, 933, 506, 912, 917, 828, 433, 636, 635, 554, 961, 923, 930, 927, 937, 941, 634, 634, 634, 974, 948, 952, 985, 913, 968, 967, 743, 634, 973, 839, 634, 978, 599, 634, 984, 989, 765, 444, 995, 1000, 634, 1003, 790, 955, 1012, 681, 634, 634, 634, 634, 634, 414, 1016, 1020, 1024, 1085, 1027, 1090, 1090, 1046, 1080, 1137, 1108, 1215, 1049, 1032, 1039, 1085, 1085, 1085, 1085, 1058, 1062, 1068, 1085, 1086, 1090, 1090, 1091, 1072, 1064, 1107, 1090, 1090, 1090, 1118, 1123, 1138, 1078, 1074, 1084, 1085, 1085, 1085, 1087, 1090, 1062, 1052, 1060, 1114, 1062, 1104, 1085, 1085, 1090, 1090, 1028, 1122, 1063, 1128, 1139, 1127, 1158, 1085, 1085, 1151, 1090, 1090, 1090, 1095, 1090, 1132, 1073, 1136, 1143, 1061, 1150, 1085, 1155, 1098, 1101, 1146, 1162, 1169, 1101, 1185, 1151, 1090, 1110, 1173, 1054, 1087, 1109, 1177, 1165, 1089, 1204, 1184, 1107, 1189, 1193, 1088, 1197, 1180, 1201, 1208, 1042, 1212, 1219, 1223, 1227, 1231, 1235, 1245, 1777, 1527, 1686, 1686, 1238, 1686, 1254, 1686, 1686, 1686, 1294, 1669, 1686, 1686, 1686, 1322, 1625, 1534, 1268, 1624, 1275, 1281, 1443, 1292, 1300, 1686, 1686, 1686, 1350, 1826, 1306, 1686, 1686, 1240, 2032, 1317, 1321, 1686, 1686, 1253, 1686, 1326, 1686, 1686, 1686, 1418, 1709, 1446, 1686, 1686, 1686, 1492, 1686, 1295, 1447, 1686, 1686, 1258, 1686, 1736, 1686, 1686, 1520, 1355, 1686, 1288, 1348, 1361, 1686, 1359, 1686, 1364, 1498, 1368, 1302, 1362, 1381, 1389, 1395, 1486, 1686, 1371, 1377, 1370, 1686, 1375, 1382, 1384, 1402, 1408, 1385, 1383, 1619, 1413, 1423, 1428, 1433, 1686, 1686, 1270, 1686, 1338, 1686, 1440, 1686, 1686, 1686, 1499, 1465, 1686, 1686, 1686, 1639, 1473, 1884, 1686, 1686, 1293, 1864, 1686, 1686, 1296, 1321, 1483, 1686, 1686, 1686, 1646, 1686, 1748, 1496, 1686, 1418, 1675, 1686, 1418, 1702, 1686, 1418, 1981, 1686, 1429, 1409, 1427, 1504, 1692, 1686, 1686, 1313, 1448, 1651, 1508, 1686, 1686, 1340, 1686, 1903, 1686, 1686, 1435, 1513, 1686, 1283, 1287, 1519, 1686, 1524, 1363, 1568, 1938, 1539, 1566, 1579, 1479, 1533, 1538, 1553, 1544, 1552, 1557, 1563, 1574, 1557, 1583, 1589, 1590, 1759, 1594, 1603, 1607, 1611, 1686, 1436, 1514, 1686, 1434, 1656, 1686, 1434, 1680, 1686, 1453, 1686, 1686, 1686, 1559, 1617, 1686, 1770, 1418, 1623, 1769, 1629, 1686, 1515, 1335, 1686, 1285, 1686, 1671, 1921, 1650, 1686, 1686, 1344, 1308, 1666, 1686, 1686, 1686, 1659, 1685, 1686, 1686, 1686, 1686, 1241, 1686, 1686, 1844, 1691, 1686, 1630, 1977, 1970, 1362, 1686, 1686, 1686, 1693, 1698, 1686, 1686, 1686, 1697, 1686, 1764, 1715, 1686, 1634, 1638, 1686, 1599, 1585, 1686, 1271, 1686, 1269, 1686, 1721, 1686, 1686, 1354, 1686, 1801, 1686, 1799, 1686, 1640, 1686, 1686, 1461, 1686, 1686, 1732, 1686, 1944, 1686, 1740, 1686, 1746, 1415, 1396, 1686, 1598, 1547, 1417, 1597, 1416, 1577, 1546, 1397, 1577, 1547, 1548, 1570, 1398, 1753, 1686, 1652, 1509, 1686, 1686, 1686, 1757, 1686, 1419, 1686, 1763, 1418, 1768, 1781, 1686, 1686, 1686, 1705, 1686, 2048, 1792, 1686, 1686, 1686, 1735, 1686, 1797, 1686, 1686, 1404, 1686, 1639, 1815, 1686, 1686, 1418, 2017, 1820, 1686, 1686, 1803, 1686, 1686, 1686, 1736, 1489, 1686, 1686, 1825, 1338, 1260, 1263, 1686, 1686, 1785, 1686, 1686, 1728, 1686, 1686, 1749, 1497, 1830, 1830, 1262, 1248, 1261, 1329, 1260, 1264, 1329, 1248, 1249, 1259, 1540, 1849, 1842, 1686, 1686, 1835, 1686, 1686, 1816, 1686, 1686, 1831, 1882, 1848, 1686, 1686, 1686, 1774, 2071, 1854, 1686, 1686, 1469, 1884, 1686, 1821, 1859, 1686, 1686, 1350, 1883, 1686, 1686, 1686, 1781, 1391, 1875, 1686, 1686, 1613, 1644, 1686, 1686, 1889, 1686, 1686, 1662, 1884, 1686, 1885, 1890, 1686, 1686, 1686, 1894, 1686, 1686, 1678, 1686, 1907, 1686, 1686, 1529, 1914, 1686, 1838, 1686, 1686, 1881, 1686, 1686, 1872, 1876, 1836, 1919, 1686, 1837, 1692, 1910, 1686, 1925, 1928, 1742, 1686, 1811, 1811, 1930, 1810, 1929, 1935, 1928, 1900, 1942, 1867, 1868, 1931, 1035, 1788, 1948, 1952, 1956, 1960, 1964, 1686, 1976, 1686, 1686, 1686, 2065, 1686, 1992, 2037, 1686, 1686, 1998, 2009, 1972, 2002, 1686, 1686, 1686, 2077, 1300, 2023, 1686, 1686, 1686, 1807, 2031, 1686, 1686, 1686, 1860, 1500, 2032, 1686, 1686, 1686, 2083, 1686, 2036, 1686, 1277, 1276, 2042, 1877, 1686, 1686, 2041, 1686, 1686, 2027, 2037, 2012, 1686, 2012, 1855, 1850, 1686, 2046, 1686, 1686, 2054, 1996, 1686, 1897, 1309, 2059, 2052, 1686, 2058, 1686, 1686, 2081, 1686, 1717, 1477, 1686, 1331, 1686, 1686, 1687, 1686, 1860, 1681, 1686, 1686, 1686, 1966, 1724, 1686, 1686, 1686, 1984, 2015, 1686, 1686, 1686, 1988, 1686, 2063, 1686, 1686, 1686, 2005, 1686, 1727, 1686, 1686, 1711, 1457, 2069, 1686, 1686, 1686, 2019, 2075, 1686, 1686, 1915, 1686, 1686, 1793, 1874, 1686, 1686, 1491, 1362, 1449, 1686, 1686, 1460, 2098, 2087, 2091, 2095, 2184, 2102, 2113, 2780, 2117, 2134, 2142, 2281, 2146, 2146, 2146, 2304, 2296, 2181, 2639, 2591, 2872, 2592, 2873, 2313, 2195, 2200, 2281, 2146, 2273, 2226, 2204, 2152, 2219, 2276, 2167, 2177, 2276, 2235, 2276, 2276, 2230, 2281, 2276, 2296, 2276, 2293, 2276, 2276, 2276, 2276, 2234, 2276, 2311, 2314, 2210, 2199, 2217, 2222, 2276, 2276, 2276, 2240, 2276, 2294, 2276, 2276, 2173, 2276, 2198, 2281, 2281, 2281, 2281, 2282, 2146, 2146, 2146, 2146, 2205, 2146, 2204, 2248, 2276, 2235, 2276, 2297, 2276, 2276, 2276, 2277, 2256, 2281, 2283, 2146, 2146, 2146, 2275, 2276, 2295, 2276, 2276, 2293, 2146, 2304, 2264, 2269, 2221, 2276, 2276, 2276, 2293, 2295, 2276, 2276, 2276, 2295, 2263, 2205, 2268, 2220, 2172, 2276, 2276, 2276, 2296, 2276, 2276, 2296, 2294, 2276, 2276, 2278, 2281, 2281, 2280, 2281, 2281, 2281, 2283, 2206, 2223, 2276, 2276, 2279, 2281, 2281, 2146, 2273, 2276, 2276, 2281, 2281, 2281, 2276, 2292, 2276, 2298, 2225, 2276, 2298, 2169, 2224, 2292, 2298, 2171, 2229, 2281, 2281, 2171, 2236, 2281, 2281, 2281, 2146, 2275, 2225, 2292, 2299, 2276, 2229, 2281, 2146, 2276, 2290, 2297, 2283, 2146, 2146, 2274, 2224, 2227, 2298, 2225, 2297, 2276, 2230, 2170, 2230, 2282, 2146, 2147, 2151, 2156, 2288, 2276, 2230, 2303, 2308, 2236, 2284, 2228, 2318, 2318, 2318, 2326, 2335, 2339, 2343, 2349, 2416, 2693, 2357, 2592, 2109, 2592, 2592, 2162, 2943, 2823, 2646, 2592, 2361, 2592, 2122, 2592, 2592, 2122, 2470, 2592, 2592, 2592, 2109, 2107, 2592, 2592, 2592, 2123, 2592, 2592, 2592, 2125, 2592, 2413, 2592, 2592, 2592, 2127, 2592, 2592, 2414, 2592, 2592, 2592, 2130, 2952, 2592, 2594, 2592, 2592, 2212, 2609, 2252, 2592, 2592, 2592, 2446, 2434, 2592, 2592, 2592, 2212, 2446, 2450, 2456, 2431, 2435, 2592, 2592, 2243, 2478, 2448, 2439, 2946, 2592, 2592, 2592, 2368, 2809, 2813, 2450, 2441, 2212, 2812, 2449, 2440, 2947, 2592, 2592, 2592, 2345, 2451, 2457, 2948, 2592, 2124, 2592, 2592, 2650, 2823, 2449, 2455, 2946, 2592, 2128, 2592, 2592, 2649, 2952, 2592, 2810, 2448, 2461, 2991, 2467, 2592, 2592, 2329, 2817, 2474, 2990, 2466, 2592, 2592, 2373, 2447, 2992, 2469, 2592, 2592, 2592, 2373, 2447, 2477, 2468, 2592, 2592, 2353, 2469, 2592, 2495, 2592, 2592, 2415, 2483, 2592, 2415, 2496, 2592, 2592, 2352, 2592, 2592, 2352, 2352, 2469, 2592, 2592, 2363, 2331, 2494, 2592, 2592, 2592, 2375, 2592, 2375, 2415, 2504, 2592, 2592, 2367, 2372, 2503, 2592, 2592, 2592, 2389, 2418, 2415, 2592, 2592, 2373, 2592, 2592, 2592, 2593, 2732, 2417, 2415, 2592, 2417, 2520, 2592, 2592, 2592, 2390, 2521, 2521, 2592, 2592, 2592, 2401, 2599, 2585, 2526, 2531, 2120, 2592, 2212, 2426, 2450, 2463, 2948, 2592, 2592, 2592, 2213, 2389, 2527, 2532, 2121, 2542, 2551, 2105, 2592, 2213, 2592, 2592, 2592, 2558, 2538, 2544, 2553, 2557, 2537, 2543, 2552, 2421, 2572, 2576, 2546, 2543, 2547, 2592, 2592, 2373, 2615, 2575, 2545, 2105, 2592, 2244, 2479, 2592, 2129, 2592, 2592, 2628, 2690, 2469, 2562, 2566, 2592, 2592, 2592, 2415, 2928, 2934, 2401, 2570, 2574, 2564, 2572, 2585, 2590, 2592, 2592, 2585, 2965, 2592, 2592, 2592, 2445, 2251, 2592, 2592, 2592, 2474, 2592, 2609, 2892, 2592, 2362, 2592, 2592, 2138, 2851, 2159, 2592, 2592, 2592, 2509, 2888, 2892, 2592, 2592, 2592, 2490, 2418, 2891, 2592, 2592, 2376, 2592, 2592, 2374, 2592, 2889, 2388, 2592, 2373, 2373, 2890, 2592, 2592, 2387, 2592, 2887, 2505, 2892, 2592, 2373, 2610, 2388, 2592, 2592, 2376, 2373, 2592, 2887, 2891, 2592, 2374, 2592, 2592, 2608, 2159, 2614, 2620, 2592, 2592, 2394, 2594, 2887, 2399, 2592, 2887, 2397, 2508, 2374, 2507, 2592, 2375, 2592, 2592, 2592, 2595, 2508, 2506, 2592, 2506, 2505, 2505, 2592, 2507, 2637, 2505, 2592, 2592, 2401, 2661, 2592, 2643, 2592, 2592, 2417, 2592, 2655, 2592, 2592, 2592, 2510, 2414, 2656, 2592, 2592, 2592, 2516, 2592, 2593, 2660, 2665, 2880, 2592, 2592, 2592, 2522, 2767, 2666, 2881, 2592, 2592, 2420, 2571, 2696, 2592, 2592, 2592, 2580, 2572, 2686, 2632, 2698, 2592, 2383, 2514, 2592, 2163, 2932, 2465, 2685, 2631, 2697, 2592, 2388, 2592, 2592, 2212, 2604, 2671, 2632, 2678, 2592, 2401, 2405, 2409, 2592, 2592, 2592, 2679, 2592, 2592, 2592, 2592, 2108, 2677, 2591, 2592, 2592, 2592, 2419, 2592, 2683, 2187, 2191, 2469, 2671, 2189, 2467, 2592, 2401, 2629, 2633, 2702, 2468, 2592, 2592, 2421, 2536, 2703, 2469, 2592, 2592, 2422, 2573, 2593, 2672, 2467, 2592, 2402, 2406, 2592, 2402, 2979, 2592, 2592, 2626, 2673, 2467, 2592, 2446, 2259, 2947, 2592, 2377, 2709, 2592, 2592, 2522, 2862, 2713, 2468, 2592, 2592, 2581, 2572, 2562, 2374, 2374, 2592, 2376, 2721, 2724, 2592, 2592, 2624, 2373, 2731, 2592, 2592, 2592, 2626, 2732, 2592, 2592, 2592, 2755, 2656, 2726, 2736, 2741, 2592, 2486, 2593, 2381, 2592, 2727, 2737, 2742, 2715, 2747, 2753, 2592, 2498, 2469, 2873, 2743, 2592, 2592, 2592, 2791, 2759, 2763, 2592, 2592, 2627, 2704, 2592, 2592, 2522, 2789, 2593, 2761, 2753, 2592, 2498, 2863, 2592, 2592, 2767, 2592, 2592, 2592, 2792, 2789, 2592, 2592, 2592, 2803, 2126, 2592, 2592, 2592, 2811, 2122, 2592, 2592, 2592, 2834, 2777, 2592, 2592, 2592, 2848, 2936, 2591, 2489, 2797, 2592, 2592, 2670, 2631, 2490, 2798, 2592, 2592, 2592, 2963, 2807, 2592, 2592, 2592, 2965, 2838, 2592, 2592, 2592, 2975, 2330, 2818, 2829, 2592, 2498, 2939, 2592, 2498, 2592, 2791, 2331, 2819, 2830, 2592, 2592, 2592, 2982, 2834, 2817, 2828, 2106, 2592, 2592, 2592, 2405, 2405, 2817, 2828, 2592, 2592, 2415, 2849, 2842, 2592, 2522, 2773, 2592, 2522, 2868, 2592, 2580, 2600, 2586, 2137, 2850, 2843, 2592, 2592, 2855, 2937, 2844, 2592, 2592, 2592, 2987, 2936, 2591, 2592, 2592, 2684, 2630, 2592, 2856, 2938, 2592, 2592, 2860, 2939, 2592, 2592, 2872, 2592, 2861, 2591, 2592, 2592, 2887, 2616, 2592, 2867, 2592, 2592, 2708, 2592, 2498, 2469, 2498, 2497, 2785, 2773, 2499, 2783, 2770, 2877, 2877, 2877, 2772, 2592, 2592, 2345, 2885, 2592, 2592, 2592, 2715, 2762, 2515, 2896, 2592, 2592, 2715, 2917, 2516, 2897, 2592, 2592, 2592, 2901, 2906, 2911, 2592, 2592, 2956, 2960, 2715, 2902, 2907, 2912, 2593, 2916, 2920, 2820, 2922, 2822, 2592, 2592, 2715, 2927, 2921, 2821, 2106, 2592, 2592, 2974, 2408, 2321, 2821, 2106, 2592, 2592, 2983, 2592, 2593, 2404, 2408, 2592, 2592, 2717, 2749, 2716, 2928, 2322, 2822, 2593, 2926, 2919, 2820, 2934, 2823, 2592, 2592, 2592, 2651, 2824, 2592, 2592, 2592, 2130, 2952, 2592, 2592, 2592, 2592, 2964, 2592, 2592, 2716, 2748, 2592, 2969, 2592, 2592, 2716, 2918, 2368, 2970, 2592, 2592, 2592, 2403, 2407, 2592, 2592, 2787, 2211, 2404, 2409, 2592, 2592, 2802, 2837, 2987, 2592, 2592, 2592, 2809, 2427, 2592, 2793, 2592, 2592, 2809, 2447, 1073741824, 0x80000000, 539754496, 542375936, 402653184, 554434560, 571736064, 545521856, 268451840, 335544320, 268693630, 512, 2048, 256, 1024, 0, 1024, 0, 1073741824, 0x80000000, 0, 0, 0, 8388608, 0, 0, 1073741824, 1073741824, 0, 0x80000000, 537133056, 4194304, 1048576, 268435456, -1073741824, 0, 0, 0, 1048576, 0, 0, 0, 1572864, 0, 0, 0, 4194304, 0, 134217728, 16777216, 0, 0, 32, 64, 98304, 0, 33554432, 8388608, 192, 67108864, 67108864, 67108864, 67108864, 16, 32, 4, 0, 8192, 196608, 196608, 229376, 80, 4096, 524288, 8388608, 0, 0, 32, 128, 256, 24576, 24600, 24576, 24576, 2, 24576, 24576, 24576, 24584, 24592, 24576, 24578, 24576, 24578, 24576, 24576, 16, 512, 2048, 2048, 256, 4096, 32768, 1048576, 4194304, 67108864, 134217728, 268435456, 262144, 134217728, 0, 128, 128, 64, 16384, 16384, 16384, 67108864, 32, 32, 4, 4, 4096, 262144, 134217728, 0, 0, 0, 2, 0, 8192, 131072, 131072, 4096, 4096, 4096, 4096, 24576, 24576, 24576, 8, 8, 24576, 24576, 16384, 16384, 16384, 24576, 24584, 24576, 24576, 24576, 16384, 24576, 536870912, 262144, 0, 0, 32, 2048, 8192, 4, 4096, 4096, 4096, 786432, 8388608, 16777216, 0, 128, 16384, 16384, 16384, 32768, 65536, 2097152, 32, 32, 32, 32, 4, 4, 4, 4, 4, 4096, 67108864, 67108864, 67108864, 24576, 24576, 24576, 24576, 0, 16384, 16384, 16384, 16384, 67108864, 67108864, 8, 67108864, 24576, 8, 8, 8, 24576, 24576, 24576, 24578, 24576, 24576, 24576, 2, 2, 2, 16384, 67108864, 67108864, 67108864, 32, 67108864, 8, 8, 24576, 2048, 0x80000000, 536870912, 262144, 262144, 262144, 67108864, 8, 24576, 16384, 32768, 1048576, 4194304, 25165824, 67108864, 24576, 32770, 2, 4, 112, 512, 98304, 524288, 50, 402653186, 1049090, 1049091, 10, 66, 100925514, 10, 66, 12582914, 0, 0, -1678194207, -1678194207, -1041543218, 0, 32768, 0, 0, 32, 65536, 268435456, 1, 1, 513, 1048577, 0, 12582912, 0, 0, 0, 4, 1792, 0, 0, 0, 7, 29360128, 0, 0, 0, 8, 0, 0, 0, 12, 1, 1, 0, 0, -604102721, -604102721, 4194304, 8388608, 0, 0, 0, 31, 925600, 997981306, 997981306, 997981306, 0, 0, 2048, 8388608, 0, 0, 1, 2, 4, 32, 64, 512, 8192, 0, 0, 0, 245760, 997720064, 0, 0, 0, 32, 0, 0, 0, 3, 12, 16, 32, 8, 112, 3072, 12288, 16384, 32768, 65536, 131072, 7864320, 16777216, 973078528, 0, 0, 65536, 131072, 3670016, 4194304, 16777216, 33554432, 2, 8, 48, 2048, 8192, 16384, 32768, 65536, 131072, 524288, 131072, 524288, 3145728, 4194304, 16777216, 33554432, 65536, 131072, 2097152, 4194304, 16777216, 33554432, 134217728, 268435456, 536870912, 0, 0, 0, 1024, 0, 8, 48, 2048, 8192, 65536, 33554432, 268435456, 536870912, 65536, 268435456, 536870912, 0, 0, 32768, 0, 0, 126, 623104, 65011712, 0, 32, 65536, 536870912, 0, 0, 65536, 524288, 0, 32, 65536, 0, 0, 0, 2048, 0, 0, 0, 15482, 245760, -604102721, 0, 0, 0, 18913, 33062912, 925600, -605028352, 0, 0, 0, 65536, 31, 8096, 131072, 786432, 3145728, 3145728, 12582912, 50331648, 134217728, 268435456, 160, 256, 512, 7168, 131072, 786432, 131072, 786432, 1048576, 2097152, 12582912, 16777216, 268435456, 1073741824, 0x80000000, 12582912, 16777216, 33554432, 268435456, 1073741824, 0x80000000, 3, 12, 16, 160, 256, 7168, 786432, 1048576, 12582912, 16777216, 268435456, 1073741824, 0, 8, 16, 32, 128, 256, 512, 7168, 786432, 1048576, 2097152, 0, 1, 2, 8, 16, 7168, 786432, 1048576, 8388608, 16777216, 16777216, 1073741824, 0, 0, 0, 0, 1, 0, 0, 8, 32, 128, 256, 7168, 8, 32, 0, 3072, 0, 8, 32, 3072, 4096, 524288, 8, 32, 0, 0, 3072, 4096, 0, 2048, 524288, 8388608, 8, 2048, 0, 0, 1, 12, 256, 4096, 32768, 262144, 1048576, 4194304, 67108864, 0, 2048, 0, 2048, 2048, 1073741824, -58805985, -58805985, -58805985, 0, 0, 262144, 0, 0, 32, 4194304, 16777216, 134217728, 4382, 172032, -58982400, 0, 0, 2, 28, 256, 4096, 8192, 8192, 32768, 131072, 262144, 524288, 1, 2, 12, 256, 4096, 0, 0, 4194304, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1, 2, 12, 16, 256, 4096, 1048576, 67108864, 134217728, 268435456, 0, 512, 1048576, 4194304, 201326592, 1879048192, 0, 0, 12, 256, 4096, 134217728, 268435456, 536870912, 12, 256, 268435456, 536870912, 0, 12, 256, 0, 0, 1, 32, 64, 512, 0, 0, 205236961, 205236961, 0, 0, 0, 1, 96, 640, 1, 10976, 229376, 204996608, 0, 640, 2048, 8192, 229376, 1572864, 1572864, 2097152, 201326592, 0, 0, 0, 64, 512, 2048, 229376, 1572864, 201326592, 1572864, 201326592, 0, 0, 1, 4382, 0, 1, 32, 2048, 65536, 131072, 1572864, 201326592, 131072, 1572864, 134217728, 0, 0, 524288, 524288, 0, 0, 0, -68582786, -68582786, -68582786, 0, 0, 2097152, 524288, 0, 524288, 0, 0, 65536, 131072, 1572864, 0, 0, 2, 4, 0, 0, 65011712, -134217728, 0, 0, 0, 0, 2, 4, 120, 512, -268435456, 0, 0, 0, 2, 8, 48, 64, 2048, 8192, 98304, 524288, 2097152, 4194304, 25165824, 33554432, 134217728, 268435456, 0x80000000, 0, 0, 25165824, 33554432, 134217728, 1879048192, 0x80000000, 0, 0, 4, 112, 512, 622592, 65011712, 134217728, -268435456, 16777216, 33554432, 134217728, 1610612736, 0, 0, 0, 64, 98304, 524288, 4194304, 16777216, 33554432, 0, 98304, 524288, 16777216, 33554432, 0, 65536, 524288, 33554432, 536870912, 1073741824, 0, 65536, 524288, 536870912, 1073741824, 0, 0, 65536, 524288, 536870912, 0, 524288, 0, 524288, 524288, 1048576, 2086666240, 0x80000000, 0, -1678194207, 0, 0, 0, 8, 32, 2048, 524288, 8388608, 0, 0, 33062912, 436207616, 0x80000000, 0, 0, 32, 64, 2432, 16384, 32768, 32768, 524288, 3145728, 4194304, 25165824, 25165824, 167772160, 268435456, 0x80000000, 0, 32, 64, 384, 2048, 16384, 32768, 1048576, 2097152, 4194304, 25165824, 32, 64, 128, 256, 2048, 16384, 2048, 16384, 1048576, 4194304, 16777216, 33554432, 134217728, 536870912, 1073741824, 0, 0, 2048, 16384, 4194304, 16777216, 33554432, 134217728, 805306368, 0, 0, 16777216, 134217728, 268435456, 0x80000000, 0, 622592, 622592, 622592, 8807, 8807, 434791, 0, 0, 16777216, 0, 0, 0, 7, 608, 8192, 0, 0, 0, 3, 4, 96, 512, 32, 64, 8192, 0, 0, 16777216, 134217728, 0, 0, 2, 4, 8192, 16384, 65536, 2097152, 33554432, 268435456\n];\n\nXQueryTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"QuotChar\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar XQueryTokenizer = _dereq_('./XQueryTokenizer').XQueryTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict'.split('|');\n\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotChar', token: 'string' }\n    ]\n};\n    \nexports.XQueryLexer = function(){ return new Lexer(XQueryTokenizer, Rules); };\n},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}]},{},[\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\"]);\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            \n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\n  var oop = require(\"../../lib/oop\");\n  var Behaviour = require('../behaviour').Behaviour;\n  var CstyleBehaviour = require('./cstyle').CstyleBehaviour;\n  var XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\n  var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nfunction hasType(token, type) {\n    var hasType = true;\n    var typeList = token.type.split('.');\n    var needleList = type.split('.');\n    needleList.forEach(function(needle){\n        if (typeList.indexOf(needle) == -1) {\n            hasType = false;\n            return false;\n        }\n    });\n    return hasType;\n}\n \n  var XQueryBehaviour = function () {\n      \n      this.inherit(CstyleBehaviour, [\"braces\", \"parens\", \"string_dquotes\"]); // Get string behaviour\n      this.inherit(XmlBehaviour); // Get xml behaviour\n      \n      this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken();\n            var atCursor = false;\n            var state = JSON.parse(state).pop();\n            if ((token && token.value === '>') || state !== \"StartTag\") return;\n            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){\n                do {\n                    token = iterator.stepBackward();\n                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));\n            } else {\n                atCursor = true;\n            }\n            var previous = iterator.stepBackward();\n            if (!token || !hasType(token, 'meta.tag') || (previous !== null && previous.value.match('/'))) {\n                return;\n            }\n            var tag = token.value.substring(1);\n            if (atCursor){\n                var tag = tag.substring(0, position.column - token.start);\n            }\n\n            return {\n               text: '>' + '</' + tag + '>',\n               selection: [1, 1]\n            };\n        }\n    });\n\n  };\n  oop.inherits(XQueryBehaviour, Behaviour);\n\n  exports.XQueryBehaviour = XQueryBehaviour;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xquery\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/xquery_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XQueryLexer = require(\"./xquery/xquery_lexer\").XQueryLexer;\nvar Range = require(\"../range\").Range;\nvar XQueryBehaviour = require(\"./behaviour/xquery\").XQueryBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Anchor = require(\"../anchor\").Anchor;\n\nvar Mode = function() {\n    this.$tokenizer   = new XQueryLexer();\n    this.$behaviour   = new XQueryBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n    this.$highlightRules = new TextHighlightRules();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.completer = {\n        getCompletions: function(editor, session, pos, prefix, callback) {\n            if (!session.$worker)\n                return callback();\n            session.$worker.emit(\"complete\", { data: { pos: pos, prefix: prefix } });\n            session.$worker.on(\"complete\", function(e){\n                callback(null, e.data);\n            });\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var match = line.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);\n        if (match)\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return (/^\\s*[\\}\\)]/).test(input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*[\\}\\)])/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(:(.*):\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(:\" + line + \":)\");\n        }\n    };\n    \n    this.createWorker = function(session) {\n        \n      var worker = new WorkerClient([\"ace\"], \"ace/mode/xquery_worker\", \"XQueryWorker\");\n        var that = this;\n\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"ok\", function(e) {\n          session.clearAnnotations();\n        });\n        \n        worker.on(\"markers\", function(e) {\n          session.clearAnnotations();\n          that.addMarkers(e.data, session);\n        });\n \n        worker.on(\"highlight\", function(tokens) {\n          that.$tokenizer.tokens = tokens.data.tokens;\n          that.$tokenizer.lines  = session.getDocument().getAllLines();\n          \n          var rows = Object.keys(that.$tokenizer.tokens);\n          for(var i=0; i < rows.length; i++) {\n            var row = parseInt(rows[i]);\n            delete session.bgTokenizer.lines[row];\n            delete session.bgTokenizer.states[row];\n            session.bgTokenizer.fireUpdateEvent(row, row);\n          }\n        });\n        \n        return worker;\n    };\n\n    this.removeMarkers = function(session) {\n        var markers = session.getMarkers(false);\n        for (var id in markers) {\n            if (markers[id].clazz.indexOf('language_highlight_') === 0) {\n                session.removeMarker(id);\n            }\n        }\n        for (var i = 0; i < session.markerAnchors.length; i++) {\n            session.markerAnchors[i].detach();\n        }\n        session.markerAnchors = [];\n    };\n\n    this.addMarkers = function(annos, mySession) {\n        var _self = this;\n        \n        if (!mySession.markerAnchors) mySession.markerAnchors = [];\n        this.removeMarkers(mySession);\n        mySession.languageAnnos = [];\n        annos.forEach(function(anno) {\n            var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0);\n            mySession.markerAnchors.push(anchor);\n            var markerId;\n            var colDiff = anno.pos.ec - anno.pos.sc;\n            var rowDiff = anno.pos.el - anno.pos.sl;\n            var gutterAnno = {\n                guttertext: anno.message,\n                type: anno.level || \"warning\",\n                text: anno.message\n            };\n\n            function updateFloat(single) {\n                if (markerId)\n                    mySession.removeMarker(markerId);\n                gutterAnno.row = anchor.row;\n                if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) {\n                    var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec);\n                    markerId = mySession.addMarker(range, \"language_highlight_\" + (anno.type ? anno.type : \"default\"));\n                }\n                if (single) mySession.setAnnotations(mySession.languageAnnos);\n            }\n            updateFloat();\n            anchor.on(\"change\", function() {\n                updateFloat(true);\n            });\n            if (anno.message) mySession.languageAnnos.push(gutterAnno);\n        });\n        mySession.setAnnotations(mySession.languageAnnos);\n    };    \n        \n    this.$id = \"ace/mode/xquery\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/mode-yaml.js",
    "content": "ace.define(\"ace/mode/yaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar YamlHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"list.markup\",\n                regex : /^(?:-{3}|\\.{3})\\s*(?=#|$)/\n            },  {\n                token : \"list.markup\",\n                regex : /^\\s*[\\-?](?:$|\\s)/\n            }, {\n                token: \"constant\",\n                regex: \"!![\\\\w//]+\"\n            }, {\n                token: \"constant.language\",\n                regex: \"[&\\\\*][a-zA-Z0-9-_]+\"\n            }, {\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /^(\\s*\\w.*?)(:(?=\\s|$))/\n            },{\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /(\\w+?)(\\s*:(?=\\s|$))/\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<<\\\\w*:\\\\w*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"-\\\\s*(?=[{])\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : /[|>][-+\\d\\s]*$/,\n                onMatch: function(val, state, stack, line) {\n                    var indent = /^\\s*/.exec(line)[0];\n                    if (stack.length < 1) {\n                        stack.push(this.next);\n                    } else {\n                        stack[0] = \"mlString\";\n                    }\n\n                    if (stack.length < 2) {\n                        stack.push(indent.length);\n                    }\n                    else {\n                        stack[1] = indent.length;\n                    }\n                    return this.token;\n                },\n                next : \"mlString\"\n            }, {\n                token : \"string\", // single quoted string\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)(?=[^\\d-\\w]|$)/\n            }, {\n                token : \"constant.numeric\", // other number\n                regex : /[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"\\\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : /[^\\s,:\\[\\]\\{\\}]+/\n            }\n        ],\n        \"mlString\" : [\n            {\n                token : \"indent\",\n                regex : /^\\s*$/\n            }, {\n                token : \"indent\",\n                regex : /^\\s*/,\n                onMatch: function(val, state, stack) {\n                    var curIndent = stack[1];\n\n                    if (curIndent >= val.length) {\n                        this.next = \"start\";\n                        stack.splice(0);\n                    }\n                    else {\n                        this.next = \"mlString\";\n                    }\n                    return this.token;\n                },\n                next : \"mlString\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]};\n    this.normalizeRules();\n\n};\n\noop.inherits(YamlHighlightRules, TextHighlightRules);\n\nexports.YamlHighlightRules = YamlHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/yaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/yaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar YamlHighlightRules = require(\"./yaml_highlight_rules\").YamlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = YamlHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = [\"#\"];\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.$id = \"ace/mode/yaml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/abap.js",
    "content": "ace.define(\"ace/snippets/abap\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"abap\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/abc.js",
    "content": "ace.define(\"ace/snippets/abc\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"\\n\\\nsnippet zupfnoter.print\\n\\\n\t%%%%hn.print {\\\"startpos\\\": ${1:pos_y}, \\\"t\\\":\\\"${2:title}\\\", \\\"v\\\":[${3:voices}], \\\"s\\\":[[${4:syncvoices}1,2]], \\\"f\\\":[${5:flowlines}],  \\\"sf\\\":[${6:subflowlines}], \\\"j\\\":[${7:jumplines}]}\\n\\\n\\n\\\nsnippet zupfnoter.note\\n\\\n\t%%%%hn.note {\\\"pos\\\": [${1:pos_x},${2:pos_y}], \\\"text\\\": \\\"${3:text}\\\", \\\"style\\\": \\\"${4:style}\\\"}\\n\\\n\\n\\\nsnippet zupfnoter.annotation\\n\\\n\t%%%%hn.annotation {\\\"id\\\": \\\"${1:id}\\\", \\\"pos\\\": [${2:pos}], \\\"text\\\": \\\"${3:text}\\\"}\\n\\\n\\n\\\nsnippet zupfnoter.lyrics\\n\\\n\t%%%%hn.lyrics {\\\"pos\\\": [${1:x_pos},${2:y_pos}]}\\n\\\n\\n\\\nsnippet zupfnoter.legend\\n\\\n\t%%%%hn.legend {\\\"pos\\\": [${1:x_pos},${2:y_pos}]}\\n\\\n\\n\\\n\\n\\\n\\n\\\nsnippet zupfnoter.target\\n\\\n\t\\\"^:${1:target}\\\"\\n\\\n\\n\\\nsnippet zupfnoter.goto\\n\\\n\t\\\"^@${1:target}@${2:distance}\\\"\\n\\\n\\n\\\nsnippet zupfnoter.annotationref\\n\\\n\t\\\"^#${1:target}\\\"\\n\\\n\\n\\\nsnippet zupfnoter.annotation\\n\\\n\t\\\"^!${1:text}@${2:x_offset},${3:y_offset}\\\"\\n\\\n\\n\\\n\\n\\\n\";\nexports.scope = \"abc\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/actionscript.js",
    "content": "ace.define(\"ace/snippets/actionscript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet main\\n\\\n\tpackage {\\n\\\n\t\timport flash.display.*;\\n\\\n\t\timport flash.Events.*;\\n\\\n\t\\n\\\n\t\tpublic class Main extends Sprite {\\n\\\n\t\t\tpublic function Main (\t) {\\n\\\n\t\t\t\ttrace(\\\"start\\\");\\n\\\n\t\t\t\tstage.scaleMode = StageScaleMode.NO_SCALE;\\n\\\n\t\t\t\tstage.addEventListener(Event.RESIZE, resizeListener);\\n\\\n\t\t\t}\\n\\\n\t\\n\\\n\t\t\tprivate function resizeListener (e:Event):void {\\n\\\n\t\t\t\ttrace(\\\"The application window changed size!\\\");\\n\\\n\t\t\t\ttrace(\\\"New width:  \\\" + stage.stageWidth);\\n\\\n\t\t\t\ttrace(\\\"New height: \\\" + stage.stageHeight);\\n\\\n\t\t\t}\\n\\\n\t\\n\\\n\t\t}\\n\\\n\t\\n\\\n\t}\\n\\\nsnippet class\\n\\\n\t${1:public|internal} class ${2:name} ${3:extends } {\\n\\\n\t\tpublic function $2 (\t) {\\n\\\n\t\t\t(\\\"start\\\");\\n\\\n\t\t}\\n\\\n\t}\\n\\\nsnippet all\\n\\\n\tpackage name {\\n\\\n\\n\\\n\t\t${1:public|internal|final} class ${2:name} ${3:extends } {\\n\\\n\t\t\tprivate|public| static const FOO = \\\"abc\\\";\\n\\\n\t\t\tprivate|public| static var BAR = \\\"abc\\\";\\n\\\n\\n\\\n\t\t\t// class initializer - no JIT !! one time setup\\n\\\n\t\t\tif Cababilities.os == \\\"Linux|MacOS\\\" {\\n\\\n\t\t\t\tFOO = \\\"other\\\";\\n\\\n\t\t\t}\\n\\\n\\n\\\n\t\t\t// constructor:\\n\\\n\t\t\tpublic function $2 (\t){\\n\\\n\t\t\t\tsuper2();\\n\\\n\t\t\t\ttrace(\\\"start\\\");\\n\\\n\t\t\t}\\n\\\n\t\t\tpublic function name (a, b...){\\n\\\n\t\t\t\tsuper.name(..);\\n\\\n\t\t\t\tlable:break\\n\\\n\t\t\t}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n\\n\\\n\tfunction A(){\\n\\\n\t\t// A can only be accessed within this file\\n\\\n\t}\\n\\\nsnippet switch\\n\\\n\tswitch(${1}){\\n\\\n\t\tcase ${2}:\\n\\\n\t\t\t${3}\\n\\\n\t\tbreak;\\n\\\n\t\tdefault:\\n\\\n\t}\\n\\\nsnippet case\\n\\\n\t\tcase ${1}:\\n\\\n\t\t\t${2}\\n\\\n\t\tbreak;\\n\\\nsnippet package\\n\\\n\tpackage ${1:package}{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet wh\\n\\\n\twhile ${1:cond}{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet do\\n\\\n\tdo {\\n\\\n\t\t${2}\\n\\\n\t} while (${1:cond})\\n\\\nsnippet while\\n\\\n\twhile ${1:cond}{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet for enumerate names\\n\\\n\tfor (${1:var} in ${2:object}){\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet for enumerate values\\n\\\n\tfor each (${1:var} in ${2:object}){\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet get_set\\n\\\n\tfunction get ${1:name} {\\n\\\n\t\treturn ${2}\\n\\\n\t}\\n\\\n\tfunction set $1 (newValue) {\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet interface\\n\\\n\tinterface name {\\n\\\n\t\tfunction method(${1}):${2:returntype};\\n\\\n\t}\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${1}\\n\\\n\t} catch (error:ErrorType) {\\n\\\n\t\t${2}\\n\\\n\t} finally {\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\n# For Loop (same as c.snippet)\\n\\\nsnippet for for (..) {..}\\n\\\n\tfor (${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\\\n\t\t${4:/* code */}\\n\\\n\t}\\n\\\n# Custom For Loop\\n\\\nsnippet forr\\n\\\n\tfor (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {\\n\\\n\t\t${5:/* code */}\\n\\\n\t}\\n\\\n# If Condition\\n\\\nsnippet if\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:/* code */}\\n\\\n\t}\\n\\\nsnippet el\\n\\\n\telse {\\n\\\n\t\t${1}\\n\\\n\t}\\n\\\n# Ternary conditional\\n\\\nsnippet t\\n\\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\n\\\nsnippet fun\\n\\\n\tfunction ${1:function_name}(${2})${3}\\n\\\n\t{\\n\\\n\t\t${4:/* code */}\\n\\\n\t}\\n\\\n# FlxSprite (usefull when using the flixel library)\\n\\\nsnippet FlxSprite\\n\\\n\tpackage\\n\\\n\t{\\n\\\n\t\timport org.flixel.*\\n\\\n\\n\\\n\t\tpublic class ${1:ClassName} extends ${2:FlxSprite}\\n\\\n\t\t{\\n\\\n\t\t\tpublic function $1(${3: X:Number, Y:Number}):void\\n\\\n\t\t\t{\\n\\\n\t\t\t\tsuper(X,Y);\\n\\\n\t\t\t\t${4: //code...}\\n\\\n\t\t\t}\\n\\\n\\n\\\n\t\t\toverride public function update():void\\n\\\n\t\t\t{\\n\\\n\t\t\t\tsuper.update();\\n\\\n\t\t\t\t${5: //code...}\\n\\\n\t\t\t}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n\\n\\\n\";\nexports.scope = \"actionscript\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/ada.js",
    "content": "ace.define(\"ace/snippets/ada\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ada\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/apache_conf.js",
    "content": "ace.define(\"ace/snippets/apache_conf\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"apache_conf\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/apex.js",
    "content": "ace.define(\"ace/snippets/apex\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"apex\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/applescript.js",
    "content": "ace.define(\"ace/snippets/applescript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"applescript\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/asciidoc.js",
    "content": "ace.define(\"ace/snippets/asciidoc\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"asciidoc\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/asl.js",
    "content": "ace.define(\"ace/snippets/asl\",[\"require\",\"exports\",\"module\"], function (require, exports, module) {\n    \"use strict\";\n\n    exports.snippetText =undefined;\n    exports.scope = \"asl\";\n});                (function() {\n                    ace.require([\"ace/snippets/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/assembly_x86.js",
    "content": "ace.define(\"ace/snippets/assembly_x86\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"assembly_x86\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/autohotkey.js",
    "content": "ace.define(\"ace/snippets/autohotkey\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"autohotkey\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/batchfile.js",
    "content": "ace.define(\"ace/snippets/batchfile\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"batchfile\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/bro.js",
    "content": "ace.define(\"ace/snippets/bro\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/bro\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/c9search.js",
    "content": "ace.define(\"ace/snippets/c9search\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"c9search\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/c_cpp.js",
    "content": "ace.define(\"ace/snippets/c_cpp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"## STL Collections\\n\\\n# std::array\\n\\\nsnippet array\\n\\\n\tstd::array<${1:T}, ${2:N}> ${3};${4}\\n\\\n# std::vector\\n\\\nsnippet vector\\n\\\n\tstd::vector<${1:T}> ${2};${3}\\n\\\n# std::deque\\n\\\nsnippet deque\\n\\\n\tstd::deque<${1:T}> ${2};${3}\\n\\\n# std::forward_list\\n\\\nsnippet flist\\n\\\n\tstd::forward_list<${1:T}> ${2};${3}\\n\\\n# std::list\\n\\\nsnippet list\\n\\\n\tstd::list<${1:T}> ${2};${3}\\n\\\n# std::set\\n\\\nsnippet set\\n\\\n\tstd::set<${1:T}> ${2};${3}\\n\\\n# std::map\\n\\\nsnippet map\\n\\\n\tstd::map<${1:Key}, ${2:T}> ${3};${4}\\n\\\n# std::multiset\\n\\\nsnippet mset\\n\\\n\tstd::multiset<${1:T}> ${2};${3}\\n\\\n# std::multimap\\n\\\nsnippet mmap\\n\\\n\tstd::multimap<${1:Key}, ${2:T}> ${3};${4}\\n\\\n# std::unordered_set\\n\\\nsnippet uset\\n\\\n\tstd::unordered_set<${1:T}> ${2};${3}\\n\\\n# std::unordered_map\\n\\\nsnippet umap\\n\\\n\tstd::unordered_map<${1:Key}, ${2:T}> ${3};${4}\\n\\\n# std::unordered_multiset\\n\\\nsnippet umset\\n\\\n\tstd::unordered_multiset<${1:T}> ${2};${3}\\n\\\n# std::unordered_multimap\\n\\\nsnippet ummap\\n\\\n\tstd::unordered_multimap<${1:Key}, ${2:T}> ${3};${4}\\n\\\n# std::stack\\n\\\nsnippet stack\\n\\\n\tstd::stack<${1:T}> ${2};${3}\\n\\\n# std::queue\\n\\\nsnippet queue\\n\\\n\tstd::queue<${1:T}> ${2};${3}\\n\\\n# std::priority_queue\\n\\\nsnippet pqueue\\n\\\n\tstd::priority_queue<${1:T}> ${2};${3}\\n\\\n##\\n\\\n## Access Modifiers\\n\\\n# private\\n\\\nsnippet pri\\n\\\n\tprivate\\n\\\n# protected\\n\\\nsnippet pro\\n\\\n\tprotected\\n\\\n# public\\n\\\nsnippet pub\\n\\\n\tpublic\\n\\\n# friend\\n\\\nsnippet fr\\n\\\n\tfriend\\n\\\n# mutable\\n\\\nsnippet mu\\n\\\n\tmutable\\n\\\n## \\n\\\n## Class\\n\\\n# class\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename('$1', 'name')`} \\n\\\n\t{\\n\\\n\tpublic:\\n\\\n\t\t$1(${2});\\n\\\n\t\t~$1();\\n\\\n\\n\\\n\tprivate:\\n\\\n\t\t${3:/* data */}\\n\\\n\t};\\n\\\n# member function implementation\\n\\\nsnippet mfun\\n\\\n\t${4:void} ${1:`Filename('$1', 'ClassName')`}::${2:memberFunction}(${3}) {\\n\\\n\t\t${5:/* code */}\\n\\\n\t}\\n\\\n# namespace\\n\\\nsnippet ns\\n\\\n\tnamespace ${1:`Filename('', 'my')`} {\\n\\\n\t\t${2}\\n\\\n\t} /* namespace $1 */\\n\\\n##\\n\\\n## Input/Output\\n\\\n# std::cout\\n\\\nsnippet cout\\n\\\n\tstd::cout << ${1} << std::endl;${2}\\n\\\n# std::cin\\n\\\nsnippet cin\\n\\\n\tstd::cin >> ${1};${2}\\n\\\n##\\n\\\n## Iteration\\n\\\n# for i \\n\\\nsnippet fori\\n\\\n\tfor (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\\\n\t\t${4:/* code */}\\n\\\n\t}${5}\\n\\\n\\n\\\n# foreach\\n\\\nsnippet fore\\n\\\n\tfor (${1:auto} ${2:i} : ${3:container}) {\\n\\\n\t\t${4:/* code */}\\n\\\n\t}${5}\\n\\\n# iterator\\n\\\nsnippet iter\\n\\\n\tfor (${1:std::vector}<${2:type}>::${3:const_iterator} ${4:i} = ${5:container}.begin(); $4 != $5.end(); ++$4) {\\n\\\n\t\t${6}\\n\\\n\t}${7}\\n\\\n\\n\\\n# auto iterator\\n\\\nsnippet itera\\n\\\n\tfor (auto ${1:i} = $1.begin(); $1 != $1.end(); ++$1) {\\n\\\n\t\t${2:std::cout << *$1 << std::endl;}\\n\\\n\t}${3}\\n\\\n##\\n\\\n## Lambdas\\n\\\n# lamda (one line)\\n\\\nsnippet ld\\n\\\n\t[${1}](${2}){${3:/* code */}}${4}\\n\\\n# lambda (multi-line)\\n\\\nsnippet lld\\n\\\n\t[${1}](${2}){\\n\\\n\t\t${3:/* code */}\\n\\\n\t}${4}\\n\\\n\";\nexports.scope = \"c_cpp\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/cirru.js",
    "content": "ace.define(\"ace/snippets/cirru\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"cirru\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/clojure.js",
    "content": "ace.define(\"ace/snippets/clojure\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet comm\\n\\\n\t(comment\\n\\\n\t  ${1}\\n\\\n\t  )\\n\\\nsnippet condp\\n\\\n\t(condp ${1:pred} ${2:expr}\\n\\\n\t  ${3})\\n\\\nsnippet def\\n\\\n\t(def ${1})\\n\\\nsnippet defm\\n\\\n\t(defmethod ${1:multifn} \\\"${2:doc-string}\\\" ${3:dispatch-val} [${4:args}]\\n\\\n\t  ${5})\\n\\\nsnippet defmm\\n\\\n\t(defmulti ${1:name} \\\"${2:doc-string}\\\" ${3:dispatch-fn})\\n\\\nsnippet defma\\n\\\n\t(defmacro ${1:name} \\\"${2:doc-string}\\\" ${3:dispatch-fn})\\n\\\nsnippet defn\\n\\\n\t(defn ${1:name} \\\"${2:doc-string}\\\" [${3:arg-list}]\\n\\\n\t  ${4})\\n\\\nsnippet defp\\n\\\n\t(defprotocol ${1:name}\\n\\\n\t  ${2})\\n\\\nsnippet defr\\n\\\n\t(defrecord ${1:name} [${2:fields}]\\n\\\n\t  ${3:protocol}\\n\\\n\t  ${4})\\n\\\nsnippet deft\\n\\\n\t(deftest ${1:name}\\n\\\n\t    (is (= ${2:assertion})))\\n\\\n\t  ${3})\\n\\\nsnippet is\\n\\\n\t(is (= ${1} ${2}))\\n\\\nsnippet defty\\n\\\n\t(deftype ${1:Name} [${2:fields}]\\n\\\n\t  ${3:Protocol}\\n\\\n\t  ${4})\\n\\\nsnippet doseq\\n\\\n\t(doseq [${1:elem} ${2:coll}]\\n\\\n\t  ${3})\\n\\\nsnippet fn\\n\\\n\t(fn [${1:arg-list}] ${2})\\n\\\nsnippet if\\n\\\n\t(if ${1:test-expr}\\n\\\n\t  ${2:then-expr}\\n\\\n\t  ${3:else-expr})\\n\\\nsnippet if-let \\n\\\n\t(if-let [${1:result} ${2:test-expr}]\\n\\\n\t\t(${3:then-expr} $1)\\n\\\n\t\t(${4:else-expr}))\\n\\\nsnippet imp\\n\\\n\t(:import [${1:package}])\\n\\\n\t& {:keys [${1:keys}] :or {${2:defaults}}}\\n\\\nsnippet let\\n\\\n\t(let [${1:name} ${2:expr}]\\n\\\n\t\t${3})\\n\\\nsnippet letfn\\n\\\n\t(letfn [(${1:name) [${2:args}]\\n\\\n\t          ${3})])\\n\\\nsnippet map\\n\\\n\t(map ${1:func} ${2:coll})\\n\\\nsnippet mapl\\n\\\n\t(map #(${1:lambda}) ${2:coll})\\n\\\nsnippet met\\n\\\n\t(${1:name} [${2:this} ${3:args}]\\n\\\n\t  ${4})\\n\\\nsnippet ns\\n\\\n\t(ns ${1:name}\\n\\\n\t  ${2})\\n\\\nsnippet dotimes\\n\\\n\t(dotimes [_ 10]\\n\\\n\t  (time\\n\\\n\t    (dotimes [_ ${1:times}]\\n\\\n\t      ${2})))\\n\\\nsnippet pmethod\\n\\\n\t(${1:name} [${2:this} ${3:args}])\\n\\\nsnippet refer\\n\\\n\t(:refer-clojure :exclude [${1}])\\n\\\nsnippet require\\n\\\n\t(:require [${1:namespace} :as [${2}]])\\n\\\nsnippet use\\n\\\n\t(:use [${1:namespace} :only [${2}]])\\n\\\nsnippet print\\n\\\n\t(println ${1})\\n\\\nsnippet reduce\\n\\\n\t(reduce ${1:(fn [p n] ${3})} ${2})\\n\\\nsnippet when\\n\\\n\t(when ${1:test} ${2:body})\\n\\\nsnippet when-let\\n\\\n\t(when-let [${1:result} ${2:test}]\\n\\\n\t\t${3:body})\\n\\\n\";\nexports.scope = \"clojure\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/cobol.js",
    "content": "ace.define(\"ace/snippets/cobol\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"cobol\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/coffee.js",
    "content": "ace.define(\"ace/snippets/coffee\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Closure loop\\n\\\nsnippet forindo\\n\\\n\tfor ${1:name} in ${2:array}\\n\\\n\t\tdo ($1) ->\\n\\\n\t\t\t${3:// body}\\n\\\n# Array comprehension\\n\\\nsnippet fora\\n\\\n\tfor ${1:name} in ${2:array}\\n\\\n\t\t${3:// body...}\\n\\\n# Object comprehension\\n\\\nsnippet foro\\n\\\n\tfor ${1:key}, ${2:value} of ${3:object}\\n\\\n\t\t${4:// body...}\\n\\\n# Range comprehension (inclusive)\\n\\\nsnippet forr\\n\\\n\tfor ${1:name} in [${2:start}..${3:finish}]\\n\\\n\t\t${4:// body...}\\n\\\nsnippet forrb\\n\\\n\tfor ${1:name} in [${2:start}..${3:finish}] by ${4:step}\\n\\\n\t\t${5:// body...}\\n\\\n# Range comprehension (exclusive)\\n\\\nsnippet forrex\\n\\\n\tfor ${1:name} in [${2:start}...${3:finish}]\\n\\\n\t\t${4:// body...}\\n\\\nsnippet forrexb\\n\\\n\tfor ${1:name} in [${2:start}...${3:finish}] by ${4:step}\\n\\\n\t\t${5:// body...}\\n\\\n# Function\\n\\\nsnippet fun\\n\\\n\t(${1:args}) ->\\n\\\n\t\t${2:// body...}\\n\\\n# Function (bound)\\n\\\nsnippet bfun\\n\\\n\t(${1:args}) =>\\n\\\n\t\t${2:// body...}\\n\\\n# Class\\n\\\nsnippet cla class ..\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\t${2}\\n\\\nsnippet cla class .. constructor: ..\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\tconstructor: (${2:args}) ->\\n\\\n\t\t\t${3}\\n\\\n\\n\\\n\t\t${4}\\n\\\nsnippet cla class .. extends ..\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\\\n\t\t${3}\\n\\\nsnippet cla class .. extends .. constructor: ..\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\\\n\t\tconstructor: (${3:args}) ->\\n\\\n\t\t\t${4}\\n\\\n\\n\\\n\t\t${5}\\n\\\n# If\\n\\\nsnippet if\\n\\\n\tif ${1:condition}\\n\\\n\t\t${2:// body...}\\n\\\n# If __ Else\\n\\\nsnippet ife\\n\\\n\tif ${1:condition}\\n\\\n\t\t${2:// body...}\\n\\\n\telse\\n\\\n\t\t${3:// body...}\\n\\\n# Else if\\n\\\nsnippet elif\\n\\\n\telse if ${1:condition}\\n\\\n\t\t${2:// body...}\\n\\\n# Ternary If\\n\\\nsnippet ifte\\n\\\n\tif ${1:condition} then ${2:value} else ${3:other}\\n\\\n# Unless\\n\\\nsnippet unl\\n\\\n\t${1:action} unless ${2:condition}\\n\\\n# Switch\\n\\\nsnippet swi\\n\\\n\tswitch ${1:object}\\n\\\n\t\twhen ${2:value}\\n\\\n\t\t\t${3:// body...}\\n\\\n\\n\\\n# Log\\n\\\nsnippet log\\n\\\n\tconsole.log ${1}\\n\\\n# Try __ Catch\\n\\\nsnippet try\\n\\\n\ttry\\n\\\n\t\t${1}\\n\\\n\tcatch ${2:error}\\n\\\n\t\t${3}\\n\\\n# Require\\n\\\nsnippet req\\n\\\n\t${2:$1} = require '${1:sys}'${3}\\n\\\n# Export\\n\\\nsnippet exp\\n\\\n\t${1:root} = exports ? this\\n\\\n\";\nexports.scope = \"coffee\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/coldfusion.js",
    "content": "ace.define(\"ace/snippets/coldfusion\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"coldfusion\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/csharp.js",
    "content": "ace.define(\"ace/snippets/csharp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"csharp\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/csound_document.js",
    "content": "ace.define(\"ace/snippets/csound_document\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# <CsoundSynthesizer>\\n\\\nsnippet synth\\n\\\n\t<CsoundSynthesizer>\\n\\\n\t<CsInstruments>\\n\\\n\t${1}\\n\\\n\t</CsInstruments>\\n\\\n\t<CsScore>\\n\\\n\te\\n\\\n\t</CsScore>\\n\\\n\t</CsoundSynthesizer>\\n\\\n\";\nexports.scope = \"csound_document\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/csound_orchestra.js",
    "content": "ace.define(\"ace/snippets/csound_orchestra\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# else\\n\\\nsnippet else\\n\\\n\telse\\n\\\n\t\t${1:/* statements */}\\n\\\n# elseif\\n\\\nsnippet elseif\\n\\\n\telseif ${1:/* condition */} then\\n\\\n\t\t${2:/* statements */}\\n\\\n# if\\n\\\nsnippet if\\n\\\n\tif ${1:/* condition */} then\\n\\\n\t\t${2:/* statements */}\\n\\\n\tendif\\n\\\n# instrument block\\n\\\nsnippet instr\\n\\\n\tinstr ${1:name}\\n\\\n\t\t${2:/* statements */}\\n\\\n\tendin\\n\\\n# i-time while loop\\n\\\nsnippet iwhile\\n\\\n\ti${1:Index} = ${2:0}\\n\\\n\twhile i${1:Index} < ${3:/* count */} do\\n\\\n\t\t${4:/* statements */}\\n\\\n\t\ti${1:Index} += 1\\n\\\n\tod\\n\\\n# k-rate while loop\\n\\\nsnippet kwhile\\n\\\n\tk${1:Index} = ${2:0}\\n\\\n\twhile k${1:Index} < ${3:/* count */} do\\n\\\n\t\t${4:/* statements */}\\n\\\n\t\tk${1:Index} += 1\\n\\\n\tod\\n\\\n# opcode\\n\\\nsnippet opcode\\n\\\n\topcode ${1:name}, ${2:/* output types */ 0}, ${3:/* input types */ 0}\\n\\\n\t\t${4:/* statements */}\\n\\\n\tendop\\n\\\n# until loop\\n\\\nsnippet until\\n\\\n\tuntil ${1:/* condition */} do\\n\\\n\t\t${2:/* statements */}\\n\\\n\tod\\n\\\n# while loop\\n\\\nsnippet while\\n\\\n\twhile ${1:/* condition */} do\\n\\\n\t\t${2:/* statements */}\\n\\\n\tod\\n\\\n\";\nexports.scope = \"csound_orchestra\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/csound_score.js",
    "content": "ace.define(\"ace/snippets/csound_score\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"csound_score\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/csp.js",
    "content": "ace.define(\"ace/snippets/csp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/css.js",
    "content": "ace.define(\"ace/snippets/css\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet .\\n\\\n\t${1} {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet !\\n\\\n\t !important\\n\\\nsnippet bdi:m+\\n\\\n\t-moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\n\\\nsnippet bdi:m\\n\\\n\t-moz-border-image: ${1};\\n\\\nsnippet bdrz:m\\n\\\n\t-moz-border-radius: ${1};\\n\\\nsnippet bxsh:m+\\n\\\n\t-moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet bxsh:m\\n\\\n\t-moz-box-shadow: ${1};\\n\\\nsnippet bdi:w+\\n\\\n\t-webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\n\\\nsnippet bdi:w\\n\\\n\t-webkit-border-image: ${1};\\n\\\nsnippet bdrz:w\\n\\\n\t-webkit-border-radius: ${1};\\n\\\nsnippet bxsh:w+\\n\\\n\t-webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet bxsh:w\\n\\\n\t-webkit-box-shadow: ${1};\\n\\\nsnippet @f\\n\\\n\t@font-face {\\n\\\n\t\tfont-family: ${1};\\n\\\n\t\tsrc: url(${2});\\n\\\n\t}\\n\\\nsnippet @i\\n\\\n\t@import url(${1});\\n\\\nsnippet @m\\n\\\n\t@media ${1:print} {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet bg+\\n\\\n\tbackground: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\\n\\\nsnippet bga\\n\\\n\tbackground-attachment: ${1};\\n\\\nsnippet bga:f\\n\\\n\tbackground-attachment: fixed;\\n\\\nsnippet bga:s\\n\\\n\tbackground-attachment: scroll;\\n\\\nsnippet bgbk\\n\\\n\tbackground-break: ${1};\\n\\\nsnippet bgbk:bb\\n\\\n\tbackground-break: bounding-box;\\n\\\nsnippet bgbk:c\\n\\\n\tbackground-break: continuous;\\n\\\nsnippet bgbk:eb\\n\\\n\tbackground-break: each-box;\\n\\\nsnippet bgcp\\n\\\n\tbackground-clip: ${1};\\n\\\nsnippet bgcp:bb\\n\\\n\tbackground-clip: border-box;\\n\\\nsnippet bgcp:cb\\n\\\n\tbackground-clip: content-box;\\n\\\nsnippet bgcp:nc\\n\\\n\tbackground-clip: no-clip;\\n\\\nsnippet bgcp:pb\\n\\\n\tbackground-clip: padding-box;\\n\\\nsnippet bgc\\n\\\n\tbackground-color: #${1:FFF};\\n\\\nsnippet bgc:t\\n\\\n\tbackground-color: transparent;\\n\\\nsnippet bgi\\n\\\n\tbackground-image: url(${1});\\n\\\nsnippet bgi:n\\n\\\n\tbackground-image: none;\\n\\\nsnippet bgo\\n\\\n\tbackground-origin: ${1};\\n\\\nsnippet bgo:bb\\n\\\n\tbackground-origin: border-box;\\n\\\nsnippet bgo:cb\\n\\\n\tbackground-origin: content-box;\\n\\\nsnippet bgo:pb\\n\\\n\tbackground-origin: padding-box;\\n\\\nsnippet bgpx\\n\\\n\tbackground-position-x: ${1};\\n\\\nsnippet bgpy\\n\\\n\tbackground-position-y: ${1};\\n\\\nsnippet bgp\\n\\\n\tbackground-position: ${1:0} ${2:0};\\n\\\nsnippet bgr\\n\\\n\tbackground-repeat: ${1};\\n\\\nsnippet bgr:n\\n\\\n\tbackground-repeat: no-repeat;\\n\\\nsnippet bgr:x\\n\\\n\tbackground-repeat: repeat-x;\\n\\\nsnippet bgr:y\\n\\\n\tbackground-repeat: repeat-y;\\n\\\nsnippet bgr:r\\n\\\n\tbackground-repeat: repeat;\\n\\\nsnippet bgz\\n\\\n\tbackground-size: ${1};\\n\\\nsnippet bgz:a\\n\\\n\tbackground-size: auto;\\n\\\nsnippet bgz:ct\\n\\\n\tbackground-size: contain;\\n\\\nsnippet bgz:cv\\n\\\n\tbackground-size: cover;\\n\\\nsnippet bg\\n\\\n\tbackground: ${1};\\n\\\nsnippet bg:ie\\n\\\n\tfilter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\\n\\\nsnippet bg:n\\n\\\n\tbackground: none;\\n\\\nsnippet bd+\\n\\\n\tborder: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdb+\\n\\\n\tborder-bottom: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdbc\\n\\\n\tborder-bottom-color: #${1:000};\\n\\\nsnippet bdbi\\n\\\n\tborder-bottom-image: url(${1});\\n\\\nsnippet bdbi:n\\n\\\n\tborder-bottom-image: none;\\n\\\nsnippet bdbli\\n\\\n\tborder-bottom-left-image: url(${1});\\n\\\nsnippet bdbli:c\\n\\\n\tborder-bottom-left-image: continue;\\n\\\nsnippet bdbli:n\\n\\\n\tborder-bottom-left-image: none;\\n\\\nsnippet bdblrz\\n\\\n\tborder-bottom-left-radius: ${1};\\n\\\nsnippet bdbri\\n\\\n\tborder-bottom-right-image: url(${1});\\n\\\nsnippet bdbri:c\\n\\\n\tborder-bottom-right-image: continue;\\n\\\nsnippet bdbri:n\\n\\\n\tborder-bottom-right-image: none;\\n\\\nsnippet bdbrrz\\n\\\n\tborder-bottom-right-radius: ${1};\\n\\\nsnippet bdbs\\n\\\n\tborder-bottom-style: ${1};\\n\\\nsnippet bdbs:n\\n\\\n\tborder-bottom-style: none;\\n\\\nsnippet bdbw\\n\\\n\tborder-bottom-width: ${1};\\n\\\nsnippet bdb\\n\\\n\tborder-bottom: ${1};\\n\\\nsnippet bdb:n\\n\\\n\tborder-bottom: none;\\n\\\nsnippet bdbk\\n\\\n\tborder-break: ${1};\\n\\\nsnippet bdbk:c\\n\\\n\tborder-break: close;\\n\\\nsnippet bdcl\\n\\\n\tborder-collapse: ${1};\\n\\\nsnippet bdcl:c\\n\\\n\tborder-collapse: collapse;\\n\\\nsnippet bdcl:s\\n\\\n\tborder-collapse: separate;\\n\\\nsnippet bdc\\n\\\n\tborder-color: #${1:000};\\n\\\nsnippet bdci\\n\\\n\tborder-corner-image: url(${1});\\n\\\nsnippet bdci:c\\n\\\n\tborder-corner-image: continue;\\n\\\nsnippet bdci:n\\n\\\n\tborder-corner-image: none;\\n\\\nsnippet bdf\\n\\\n\tborder-fit: ${1};\\n\\\nsnippet bdf:c\\n\\\n\tborder-fit: clip;\\n\\\nsnippet bdf:of\\n\\\n\tborder-fit: overwrite;\\n\\\nsnippet bdf:ow\\n\\\n\tborder-fit: overwrite;\\n\\\nsnippet bdf:r\\n\\\n\tborder-fit: repeat;\\n\\\nsnippet bdf:sc\\n\\\n\tborder-fit: scale;\\n\\\nsnippet bdf:sp\\n\\\n\tborder-fit: space;\\n\\\nsnippet bdf:st\\n\\\n\tborder-fit: stretch;\\n\\\nsnippet bdi\\n\\\n\tborder-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\n\\\nsnippet bdi:n\\n\\\n\tborder-image: none;\\n\\\nsnippet bdl+\\n\\\n\tborder-left: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdlc\\n\\\n\tborder-left-color: #${1:000};\\n\\\nsnippet bdli\\n\\\n\tborder-left-image: url(${1});\\n\\\nsnippet bdli:n\\n\\\n\tborder-left-image: none;\\n\\\nsnippet bdls\\n\\\n\tborder-left-style: ${1};\\n\\\nsnippet bdls:n\\n\\\n\tborder-left-style: none;\\n\\\nsnippet bdlw\\n\\\n\tborder-left-width: ${1};\\n\\\nsnippet bdl\\n\\\n\tborder-left: ${1};\\n\\\nsnippet bdl:n\\n\\\n\tborder-left: none;\\n\\\nsnippet bdlt\\n\\\n\tborder-length: ${1};\\n\\\nsnippet bdlt:a\\n\\\n\tborder-length: auto;\\n\\\nsnippet bdrz\\n\\\n\tborder-radius: ${1};\\n\\\nsnippet bdr+\\n\\\n\tborder-right: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdrc\\n\\\n\tborder-right-color: #${1:000};\\n\\\nsnippet bdri\\n\\\n\tborder-right-image: url(${1});\\n\\\nsnippet bdri:n\\n\\\n\tborder-right-image: none;\\n\\\nsnippet bdrs\\n\\\n\tborder-right-style: ${1};\\n\\\nsnippet bdrs:n\\n\\\n\tborder-right-style: none;\\n\\\nsnippet bdrw\\n\\\n\tborder-right-width: ${1};\\n\\\nsnippet bdr\\n\\\n\tborder-right: ${1};\\n\\\nsnippet bdr:n\\n\\\n\tborder-right: none;\\n\\\nsnippet bdsp\\n\\\n\tborder-spacing: ${1};\\n\\\nsnippet bds\\n\\\n\tborder-style: ${1};\\n\\\nsnippet bds:ds\\n\\\n\tborder-style: dashed;\\n\\\nsnippet bds:dtds\\n\\\n\tborder-style: dot-dash;\\n\\\nsnippet bds:dtdtds\\n\\\n\tborder-style: dot-dot-dash;\\n\\\nsnippet bds:dt\\n\\\n\tborder-style: dotted;\\n\\\nsnippet bds:db\\n\\\n\tborder-style: double;\\n\\\nsnippet bds:g\\n\\\n\tborder-style: groove;\\n\\\nsnippet bds:h\\n\\\n\tborder-style: hidden;\\n\\\nsnippet bds:i\\n\\\n\tborder-style: inset;\\n\\\nsnippet bds:n\\n\\\n\tborder-style: none;\\n\\\nsnippet bds:o\\n\\\n\tborder-style: outset;\\n\\\nsnippet bds:r\\n\\\n\tborder-style: ridge;\\n\\\nsnippet bds:s\\n\\\n\tborder-style: solid;\\n\\\nsnippet bds:w\\n\\\n\tborder-style: wave;\\n\\\nsnippet bdt+\\n\\\n\tborder-top: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdtc\\n\\\n\tborder-top-color: #${1:000};\\n\\\nsnippet bdti\\n\\\n\tborder-top-image: url(${1});\\n\\\nsnippet bdti:n\\n\\\n\tborder-top-image: none;\\n\\\nsnippet bdtli\\n\\\n\tborder-top-left-image: url(${1});\\n\\\nsnippet bdtli:c\\n\\\n\tborder-corner-image: continue;\\n\\\nsnippet bdtli:n\\n\\\n\tborder-corner-image: none;\\n\\\nsnippet bdtlrz\\n\\\n\tborder-top-left-radius: ${1};\\n\\\nsnippet bdtri\\n\\\n\tborder-top-right-image: url(${1});\\n\\\nsnippet bdtri:c\\n\\\n\tborder-top-right-image: continue;\\n\\\nsnippet bdtri:n\\n\\\n\tborder-top-right-image: none;\\n\\\nsnippet bdtrrz\\n\\\n\tborder-top-right-radius: ${1};\\n\\\nsnippet bdts\\n\\\n\tborder-top-style: ${1};\\n\\\nsnippet bdts:n\\n\\\n\tborder-top-style: none;\\n\\\nsnippet bdtw\\n\\\n\tborder-top-width: ${1};\\n\\\nsnippet bdt\\n\\\n\tborder-top: ${1};\\n\\\nsnippet bdt:n\\n\\\n\tborder-top: none;\\n\\\nsnippet bdw\\n\\\n\tborder-width: ${1};\\n\\\nsnippet bd\\n\\\n\tborder: ${1};\\n\\\nsnippet bd:n\\n\\\n\tborder: none;\\n\\\nsnippet b\\n\\\n\tbottom: ${1};\\n\\\nsnippet b:a\\n\\\n\tbottom: auto;\\n\\\nsnippet bxsh+\\n\\\n\tbox-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet bxsh\\n\\\n\tbox-shadow: ${1};\\n\\\nsnippet bxsh:n\\n\\\n\tbox-shadow: none;\\n\\\nsnippet bxz\\n\\\n\tbox-sizing: ${1};\\n\\\nsnippet bxz:bb\\n\\\n\tbox-sizing: border-box;\\n\\\nsnippet bxz:cb\\n\\\n\tbox-sizing: content-box;\\n\\\nsnippet cps\\n\\\n\tcaption-side: ${1};\\n\\\nsnippet cps:b\\n\\\n\tcaption-side: bottom;\\n\\\nsnippet cps:t\\n\\\n\tcaption-side: top;\\n\\\nsnippet cl\\n\\\n\tclear: ${1};\\n\\\nsnippet cl:b\\n\\\n\tclear: both;\\n\\\nsnippet cl:l\\n\\\n\tclear: left;\\n\\\nsnippet cl:n\\n\\\n\tclear: none;\\n\\\nsnippet cl:r\\n\\\n\tclear: right;\\n\\\nsnippet cp\\n\\\n\tclip: ${1};\\n\\\nsnippet cp:a\\n\\\n\tclip: auto;\\n\\\nsnippet cp:r\\n\\\n\tclip: rect(${1:0} ${2:0} ${3:0} ${4:0});\\n\\\nsnippet c\\n\\\n\tcolor: #${1:000};\\n\\\nsnippet ct\\n\\\n\tcontent: ${1};\\n\\\nsnippet ct:a\\n\\\n\tcontent: attr(${1});\\n\\\nsnippet ct:cq\\n\\\n\tcontent: close-quote;\\n\\\nsnippet ct:c\\n\\\n\tcontent: counter(${1});\\n\\\nsnippet ct:cs\\n\\\n\tcontent: counters(${1});\\n\\\nsnippet ct:ncq\\n\\\n\tcontent: no-close-quote;\\n\\\nsnippet ct:noq\\n\\\n\tcontent: no-open-quote;\\n\\\nsnippet ct:n\\n\\\n\tcontent: normal;\\n\\\nsnippet ct:oq\\n\\\n\tcontent: open-quote;\\n\\\nsnippet coi\\n\\\n\tcounter-increment: ${1};\\n\\\nsnippet cor\\n\\\n\tcounter-reset: ${1};\\n\\\nsnippet cur\\n\\\n\tcursor: ${1};\\n\\\nsnippet cur:a\\n\\\n\tcursor: auto;\\n\\\nsnippet cur:c\\n\\\n\tcursor: crosshair;\\n\\\nsnippet cur:d\\n\\\n\tcursor: default;\\n\\\nsnippet cur:ha\\n\\\n\tcursor: hand;\\n\\\nsnippet cur:he\\n\\\n\tcursor: help;\\n\\\nsnippet cur:m\\n\\\n\tcursor: move;\\n\\\nsnippet cur:p\\n\\\n\tcursor: pointer;\\n\\\nsnippet cur:t\\n\\\n\tcursor: text;\\n\\\nsnippet d\\n\\\n\tdisplay: ${1};\\n\\\nsnippet d:mib\\n\\\n\tdisplay: -moz-inline-box;\\n\\\nsnippet d:mis\\n\\\n\tdisplay: -moz-inline-stack;\\n\\\nsnippet d:b\\n\\\n\tdisplay: block;\\n\\\nsnippet d:cp\\n\\\n\tdisplay: compact;\\n\\\nsnippet d:ib\\n\\\n\tdisplay: inline-block;\\n\\\nsnippet d:itb\\n\\\n\tdisplay: inline-table;\\n\\\nsnippet d:i\\n\\\n\tdisplay: inline;\\n\\\nsnippet d:li\\n\\\n\tdisplay: list-item;\\n\\\nsnippet d:n\\n\\\n\tdisplay: none;\\n\\\nsnippet d:ri\\n\\\n\tdisplay: run-in;\\n\\\nsnippet d:tbcp\\n\\\n\tdisplay: table-caption;\\n\\\nsnippet d:tbc\\n\\\n\tdisplay: table-cell;\\n\\\nsnippet d:tbclg\\n\\\n\tdisplay: table-column-group;\\n\\\nsnippet d:tbcl\\n\\\n\tdisplay: table-column;\\n\\\nsnippet d:tbfg\\n\\\n\tdisplay: table-footer-group;\\n\\\nsnippet d:tbhg\\n\\\n\tdisplay: table-header-group;\\n\\\nsnippet d:tbrg\\n\\\n\tdisplay: table-row-group;\\n\\\nsnippet d:tbr\\n\\\n\tdisplay: table-row;\\n\\\nsnippet d:tb\\n\\\n\tdisplay: table;\\n\\\nsnippet ec\\n\\\n\tempty-cells: ${1};\\n\\\nsnippet ec:h\\n\\\n\tempty-cells: hide;\\n\\\nsnippet ec:s\\n\\\n\tempty-cells: show;\\n\\\nsnippet exp\\n\\\n\texpression()\\n\\\nsnippet fl\\n\\\n\tfloat: ${1};\\n\\\nsnippet fl:l\\n\\\n\tfloat: left;\\n\\\nsnippet fl:n\\n\\\n\tfloat: none;\\n\\\nsnippet fl:r\\n\\\n\tfloat: right;\\n\\\nsnippet f+\\n\\\n\tfont: ${1:1em} ${2:Arial},${3:sans-serif};\\n\\\nsnippet fef\\n\\\n\tfont-effect: ${1};\\n\\\nsnippet fef:eb\\n\\\n\tfont-effect: emboss;\\n\\\nsnippet fef:eg\\n\\\n\tfont-effect: engrave;\\n\\\nsnippet fef:n\\n\\\n\tfont-effect: none;\\n\\\nsnippet fef:o\\n\\\n\tfont-effect: outline;\\n\\\nsnippet femp\\n\\\n\tfont-emphasize-position: ${1};\\n\\\nsnippet femp:a\\n\\\n\tfont-emphasize-position: after;\\n\\\nsnippet femp:b\\n\\\n\tfont-emphasize-position: before;\\n\\\nsnippet fems\\n\\\n\tfont-emphasize-style: ${1};\\n\\\nsnippet fems:ac\\n\\\n\tfont-emphasize-style: accent;\\n\\\nsnippet fems:c\\n\\\n\tfont-emphasize-style: circle;\\n\\\nsnippet fems:ds\\n\\\n\tfont-emphasize-style: disc;\\n\\\nsnippet fems:dt\\n\\\n\tfont-emphasize-style: dot;\\n\\\nsnippet fems:n\\n\\\n\tfont-emphasize-style: none;\\n\\\nsnippet fem\\n\\\n\tfont-emphasize: ${1};\\n\\\nsnippet ff\\n\\\n\tfont-family: ${1};\\n\\\nsnippet ff:c\\n\\\n\tfont-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\\n\\\nsnippet ff:f\\n\\\n\tfont-family: ${1:Capitals,Impact},fantasy;\\n\\\nsnippet ff:m\\n\\\n\tfont-family: ${1:Monaco,'Courier New'},monospace;\\n\\\nsnippet ff:ss\\n\\\n\tfont-family: ${1:Helvetica,Arial},sans-serif;\\n\\\nsnippet ff:s\\n\\\n\tfont-family: ${1:Georgia,'Times New Roman'},serif;\\n\\\nsnippet fza\\n\\\n\tfont-size-adjust: ${1};\\n\\\nsnippet fza:n\\n\\\n\tfont-size-adjust: none;\\n\\\nsnippet fz\\n\\\n\tfont-size: ${1};\\n\\\nsnippet fsm\\n\\\n\tfont-smooth: ${1};\\n\\\nsnippet fsm:aw\\n\\\n\tfont-smooth: always;\\n\\\nsnippet fsm:a\\n\\\n\tfont-smooth: auto;\\n\\\nsnippet fsm:n\\n\\\n\tfont-smooth: never;\\n\\\nsnippet fst\\n\\\n\tfont-stretch: ${1};\\n\\\nsnippet fst:c\\n\\\n\tfont-stretch: condensed;\\n\\\nsnippet fst:e\\n\\\n\tfont-stretch: expanded;\\n\\\nsnippet fst:ec\\n\\\n\tfont-stretch: extra-condensed;\\n\\\nsnippet fst:ee\\n\\\n\tfont-stretch: extra-expanded;\\n\\\nsnippet fst:n\\n\\\n\tfont-stretch: normal;\\n\\\nsnippet fst:sc\\n\\\n\tfont-stretch: semi-condensed;\\n\\\nsnippet fst:se\\n\\\n\tfont-stretch: semi-expanded;\\n\\\nsnippet fst:uc\\n\\\n\tfont-stretch: ultra-condensed;\\n\\\nsnippet fst:ue\\n\\\n\tfont-stretch: ultra-expanded;\\n\\\nsnippet fs\\n\\\n\tfont-style: ${1};\\n\\\nsnippet fs:i\\n\\\n\tfont-style: italic;\\n\\\nsnippet fs:n\\n\\\n\tfont-style: normal;\\n\\\nsnippet fs:o\\n\\\n\tfont-style: oblique;\\n\\\nsnippet fv\\n\\\n\tfont-variant: ${1};\\n\\\nsnippet fv:n\\n\\\n\tfont-variant: normal;\\n\\\nsnippet fv:sc\\n\\\n\tfont-variant: small-caps;\\n\\\nsnippet fw\\n\\\n\tfont-weight: ${1};\\n\\\nsnippet fw:b\\n\\\n\tfont-weight: bold;\\n\\\nsnippet fw:br\\n\\\n\tfont-weight: bolder;\\n\\\nsnippet fw:lr\\n\\\n\tfont-weight: lighter;\\n\\\nsnippet fw:n\\n\\\n\tfont-weight: normal;\\n\\\nsnippet f\\n\\\n\tfont: ${1};\\n\\\nsnippet h\\n\\\n\theight: ${1};\\n\\\nsnippet h:a\\n\\\n\theight: auto;\\n\\\nsnippet l\\n\\\n\tleft: ${1};\\n\\\nsnippet l:a\\n\\\n\tleft: auto;\\n\\\nsnippet lts\\n\\\n\tletter-spacing: ${1};\\n\\\nsnippet lh\\n\\\n\tline-height: ${1};\\n\\\nsnippet lisi\\n\\\n\tlist-style-image: url(${1});\\n\\\nsnippet lisi:n\\n\\\n\tlist-style-image: none;\\n\\\nsnippet lisp\\n\\\n\tlist-style-position: ${1};\\n\\\nsnippet lisp:i\\n\\\n\tlist-style-position: inside;\\n\\\nsnippet lisp:o\\n\\\n\tlist-style-position: outside;\\n\\\nsnippet list\\n\\\n\tlist-style-type: ${1};\\n\\\nsnippet list:c\\n\\\n\tlist-style-type: circle;\\n\\\nsnippet list:dclz\\n\\\n\tlist-style-type: decimal-leading-zero;\\n\\\nsnippet list:dc\\n\\\n\tlist-style-type: decimal;\\n\\\nsnippet list:d\\n\\\n\tlist-style-type: disc;\\n\\\nsnippet list:lr\\n\\\n\tlist-style-type: lower-roman;\\n\\\nsnippet list:n\\n\\\n\tlist-style-type: none;\\n\\\nsnippet list:s\\n\\\n\tlist-style-type: square;\\n\\\nsnippet list:ur\\n\\\n\tlist-style-type: upper-roman;\\n\\\nsnippet lis\\n\\\n\tlist-style: ${1};\\n\\\nsnippet lis:n\\n\\\n\tlist-style: none;\\n\\\nsnippet mb\\n\\\n\tmargin-bottom: ${1};\\n\\\nsnippet mb:a\\n\\\n\tmargin-bottom: auto;\\n\\\nsnippet ml\\n\\\n\tmargin-left: ${1};\\n\\\nsnippet ml:a\\n\\\n\tmargin-left: auto;\\n\\\nsnippet mr\\n\\\n\tmargin-right: ${1};\\n\\\nsnippet mr:a\\n\\\n\tmargin-right: auto;\\n\\\nsnippet mt\\n\\\n\tmargin-top: ${1};\\n\\\nsnippet mt:a\\n\\\n\tmargin-top: auto;\\n\\\nsnippet m\\n\\\n\tmargin: ${1};\\n\\\nsnippet m:4\\n\\\n\tmargin: ${1:0} ${2:0} ${3:0} ${4:0};\\n\\\nsnippet m:3\\n\\\n\tmargin: ${1:0} ${2:0} ${3:0};\\n\\\nsnippet m:2\\n\\\n\tmargin: ${1:0} ${2:0};\\n\\\nsnippet m:0\\n\\\n\tmargin: 0;\\n\\\nsnippet m:a\\n\\\n\tmargin: auto;\\n\\\nsnippet mah\\n\\\n\tmax-height: ${1};\\n\\\nsnippet mah:n\\n\\\n\tmax-height: none;\\n\\\nsnippet maw\\n\\\n\tmax-width: ${1};\\n\\\nsnippet maw:n\\n\\\n\tmax-width: none;\\n\\\nsnippet mih\\n\\\n\tmin-height: ${1};\\n\\\nsnippet miw\\n\\\n\tmin-width: ${1};\\n\\\nsnippet op\\n\\\n\topacity: ${1};\\n\\\nsnippet op:ie\\n\\\n\tfilter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\\n\\\nsnippet op:ms\\n\\\n\t-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\\n\\\nsnippet orp\\n\\\n\torphans: ${1};\\n\\\nsnippet o+\\n\\\n\toutline: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet oc\\n\\\n\toutline-color: ${1:#000};\\n\\\nsnippet oc:i\\n\\\n\toutline-color: invert;\\n\\\nsnippet oo\\n\\\n\toutline-offset: ${1};\\n\\\nsnippet os\\n\\\n\toutline-style: ${1};\\n\\\nsnippet ow\\n\\\n\toutline-width: ${1};\\n\\\nsnippet o\\n\\\n\toutline: ${1};\\n\\\nsnippet o:n\\n\\\n\toutline: none;\\n\\\nsnippet ovs\\n\\\n\toverflow-style: ${1};\\n\\\nsnippet ovs:a\\n\\\n\toverflow-style: auto;\\n\\\nsnippet ovs:mq\\n\\\n\toverflow-style: marquee;\\n\\\nsnippet ovs:mv\\n\\\n\toverflow-style: move;\\n\\\nsnippet ovs:p\\n\\\n\toverflow-style: panner;\\n\\\nsnippet ovs:s\\n\\\n\toverflow-style: scrollbar;\\n\\\nsnippet ovx\\n\\\n\toverflow-x: ${1};\\n\\\nsnippet ovx:a\\n\\\n\toverflow-x: auto;\\n\\\nsnippet ovx:h\\n\\\n\toverflow-x: hidden;\\n\\\nsnippet ovx:s\\n\\\n\toverflow-x: scroll;\\n\\\nsnippet ovx:v\\n\\\n\toverflow-x: visible;\\n\\\nsnippet ovy\\n\\\n\toverflow-y: ${1};\\n\\\nsnippet ovy:a\\n\\\n\toverflow-y: auto;\\n\\\nsnippet ovy:h\\n\\\n\toverflow-y: hidden;\\n\\\nsnippet ovy:s\\n\\\n\toverflow-y: scroll;\\n\\\nsnippet ovy:v\\n\\\n\toverflow-y: visible;\\n\\\nsnippet ov\\n\\\n\toverflow: ${1};\\n\\\nsnippet ov:a\\n\\\n\toverflow: auto;\\n\\\nsnippet ov:h\\n\\\n\toverflow: hidden;\\n\\\nsnippet ov:s\\n\\\n\toverflow: scroll;\\n\\\nsnippet ov:v\\n\\\n\toverflow: visible;\\n\\\nsnippet pb\\n\\\n\tpadding-bottom: ${1};\\n\\\nsnippet pl\\n\\\n\tpadding-left: ${1};\\n\\\nsnippet pr\\n\\\n\tpadding-right: ${1};\\n\\\nsnippet pt\\n\\\n\tpadding-top: ${1};\\n\\\nsnippet p\\n\\\n\tpadding: ${1};\\n\\\nsnippet p:4\\n\\\n\tpadding: ${1:0} ${2:0} ${3:0} ${4:0};\\n\\\nsnippet p:3\\n\\\n\tpadding: ${1:0} ${2:0} ${3:0};\\n\\\nsnippet p:2\\n\\\n\tpadding: ${1:0} ${2:0};\\n\\\nsnippet p:0\\n\\\n\tpadding: 0;\\n\\\nsnippet pgba\\n\\\n\tpage-break-after: ${1};\\n\\\nsnippet pgba:aw\\n\\\n\tpage-break-after: always;\\n\\\nsnippet pgba:a\\n\\\n\tpage-break-after: auto;\\n\\\nsnippet pgba:l\\n\\\n\tpage-break-after: left;\\n\\\nsnippet pgba:r\\n\\\n\tpage-break-after: right;\\n\\\nsnippet pgbb\\n\\\n\tpage-break-before: ${1};\\n\\\nsnippet pgbb:aw\\n\\\n\tpage-break-before: always;\\n\\\nsnippet pgbb:a\\n\\\n\tpage-break-before: auto;\\n\\\nsnippet pgbb:l\\n\\\n\tpage-break-before: left;\\n\\\nsnippet pgbb:r\\n\\\n\tpage-break-before: right;\\n\\\nsnippet pgbi\\n\\\n\tpage-break-inside: ${1};\\n\\\nsnippet pgbi:a\\n\\\n\tpage-break-inside: auto;\\n\\\nsnippet pgbi:av\\n\\\n\tpage-break-inside: avoid;\\n\\\nsnippet pos\\n\\\n\tposition: ${1};\\n\\\nsnippet pos:a\\n\\\n\tposition: absolute;\\n\\\nsnippet pos:f\\n\\\n\tposition: fixed;\\n\\\nsnippet pos:r\\n\\\n\tposition: relative;\\n\\\nsnippet pos:s\\n\\\n\tposition: static;\\n\\\nsnippet q\\n\\\n\tquotes: ${1};\\n\\\nsnippet q:en\\n\\\n\tquotes: '\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019';\\n\\\nsnippet q:n\\n\\\n\tquotes: none;\\n\\\nsnippet q:ru\\n\\\n\tquotes: '\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C';\\n\\\nsnippet rz\\n\\\n\tresize: ${1};\\n\\\nsnippet rz:b\\n\\\n\tresize: both;\\n\\\nsnippet rz:h\\n\\\n\tresize: horizontal;\\n\\\nsnippet rz:n\\n\\\n\tresize: none;\\n\\\nsnippet rz:v\\n\\\n\tresize: vertical;\\n\\\nsnippet r\\n\\\n\tright: ${1};\\n\\\nsnippet r:a\\n\\\n\tright: auto;\\n\\\nsnippet tbl\\n\\\n\ttable-layout: ${1};\\n\\\nsnippet tbl:a\\n\\\n\ttable-layout: auto;\\n\\\nsnippet tbl:f\\n\\\n\ttable-layout: fixed;\\n\\\nsnippet tal\\n\\\n\ttext-align-last: ${1};\\n\\\nsnippet tal:a\\n\\\n\ttext-align-last: auto;\\n\\\nsnippet tal:c\\n\\\n\ttext-align-last: center;\\n\\\nsnippet tal:l\\n\\\n\ttext-align-last: left;\\n\\\nsnippet tal:r\\n\\\n\ttext-align-last: right;\\n\\\nsnippet ta\\n\\\n\ttext-align: ${1};\\n\\\nsnippet ta:c\\n\\\n\ttext-align: center;\\n\\\nsnippet ta:l\\n\\\n\ttext-align: left;\\n\\\nsnippet ta:r\\n\\\n\ttext-align: right;\\n\\\nsnippet td\\n\\\n\ttext-decoration: ${1};\\n\\\nsnippet td:l\\n\\\n\ttext-decoration: line-through;\\n\\\nsnippet td:n\\n\\\n\ttext-decoration: none;\\n\\\nsnippet td:o\\n\\\n\ttext-decoration: overline;\\n\\\nsnippet td:u\\n\\\n\ttext-decoration: underline;\\n\\\nsnippet te\\n\\\n\ttext-emphasis: ${1};\\n\\\nsnippet te:ac\\n\\\n\ttext-emphasis: accent;\\n\\\nsnippet te:a\\n\\\n\ttext-emphasis: after;\\n\\\nsnippet te:b\\n\\\n\ttext-emphasis: before;\\n\\\nsnippet te:c\\n\\\n\ttext-emphasis: circle;\\n\\\nsnippet te:ds\\n\\\n\ttext-emphasis: disc;\\n\\\nsnippet te:dt\\n\\\n\ttext-emphasis: dot;\\n\\\nsnippet te:n\\n\\\n\ttext-emphasis: none;\\n\\\nsnippet th\\n\\\n\ttext-height: ${1};\\n\\\nsnippet th:a\\n\\\n\ttext-height: auto;\\n\\\nsnippet th:f\\n\\\n\ttext-height: font-size;\\n\\\nsnippet th:m\\n\\\n\ttext-height: max-size;\\n\\\nsnippet th:t\\n\\\n\ttext-height: text-size;\\n\\\nsnippet ti\\n\\\n\ttext-indent: ${1};\\n\\\nsnippet ti:-\\n\\\n\ttext-indent: -9999px;\\n\\\nsnippet tj\\n\\\n\ttext-justify: ${1};\\n\\\nsnippet tj:a\\n\\\n\ttext-justify: auto;\\n\\\nsnippet tj:d\\n\\\n\ttext-justify: distribute;\\n\\\nsnippet tj:ic\\n\\\n\ttext-justify: inter-cluster;\\n\\\nsnippet tj:ii\\n\\\n\ttext-justify: inter-ideograph;\\n\\\nsnippet tj:iw\\n\\\n\ttext-justify: inter-word;\\n\\\nsnippet tj:k\\n\\\n\ttext-justify: kashida;\\n\\\nsnippet tj:t\\n\\\n\ttext-justify: tibetan;\\n\\\nsnippet to+\\n\\\n\ttext-outline: ${1:0} ${2:0} #${3:000};\\n\\\nsnippet to\\n\\\n\ttext-outline: ${1};\\n\\\nsnippet to:n\\n\\\n\ttext-outline: none;\\n\\\nsnippet tr\\n\\\n\ttext-replace: ${1};\\n\\\nsnippet tr:n\\n\\\n\ttext-replace: none;\\n\\\nsnippet tsh+\\n\\\n\ttext-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet tsh\\n\\\n\ttext-shadow: ${1};\\n\\\nsnippet tsh:n\\n\\\n\ttext-shadow: none;\\n\\\nsnippet tt\\n\\\n\ttext-transform: ${1};\\n\\\nsnippet tt:c\\n\\\n\ttext-transform: capitalize;\\n\\\nsnippet tt:l\\n\\\n\ttext-transform: lowercase;\\n\\\nsnippet tt:n\\n\\\n\ttext-transform: none;\\n\\\nsnippet tt:u\\n\\\n\ttext-transform: uppercase;\\n\\\nsnippet tw\\n\\\n\ttext-wrap: ${1};\\n\\\nsnippet tw:no\\n\\\n\ttext-wrap: none;\\n\\\nsnippet tw:n\\n\\\n\ttext-wrap: normal;\\n\\\nsnippet tw:s\\n\\\n\ttext-wrap: suppress;\\n\\\nsnippet tw:u\\n\\\n\ttext-wrap: unrestricted;\\n\\\nsnippet t\\n\\\n\ttop: ${1};\\n\\\nsnippet t:a\\n\\\n\ttop: auto;\\n\\\nsnippet va\\n\\\n\tvertical-align: ${1};\\n\\\nsnippet va:bl\\n\\\n\tvertical-align: baseline;\\n\\\nsnippet va:b\\n\\\n\tvertical-align: bottom;\\n\\\nsnippet va:m\\n\\\n\tvertical-align: middle;\\n\\\nsnippet va:sub\\n\\\n\tvertical-align: sub;\\n\\\nsnippet va:sup\\n\\\n\tvertical-align: super;\\n\\\nsnippet va:tb\\n\\\n\tvertical-align: text-bottom;\\n\\\nsnippet va:tt\\n\\\n\tvertical-align: text-top;\\n\\\nsnippet va:t\\n\\\n\tvertical-align: top;\\n\\\nsnippet v\\n\\\n\tvisibility: ${1};\\n\\\nsnippet v:c\\n\\\n\tvisibility: collapse;\\n\\\nsnippet v:h\\n\\\n\tvisibility: hidden;\\n\\\nsnippet v:v\\n\\\n\tvisibility: visible;\\n\\\nsnippet whsc\\n\\\n\twhite-space-collapse: ${1};\\n\\\nsnippet whsc:ba\\n\\\n\twhite-space-collapse: break-all;\\n\\\nsnippet whsc:bs\\n\\\n\twhite-space-collapse: break-strict;\\n\\\nsnippet whsc:k\\n\\\n\twhite-space-collapse: keep-all;\\n\\\nsnippet whsc:l\\n\\\n\twhite-space-collapse: loose;\\n\\\nsnippet whsc:n\\n\\\n\twhite-space-collapse: normal;\\n\\\nsnippet whs\\n\\\n\twhite-space: ${1};\\n\\\nsnippet whs:n\\n\\\n\twhite-space: normal;\\n\\\nsnippet whs:nw\\n\\\n\twhite-space: nowrap;\\n\\\nsnippet whs:pl\\n\\\n\twhite-space: pre-line;\\n\\\nsnippet whs:pw\\n\\\n\twhite-space: pre-wrap;\\n\\\nsnippet whs:p\\n\\\n\twhite-space: pre;\\n\\\nsnippet wid\\n\\\n\twidows: ${1};\\n\\\nsnippet w\\n\\\n\twidth: ${1};\\n\\\nsnippet w:a\\n\\\n\twidth: auto;\\n\\\nsnippet wob\\n\\\n\tword-break: ${1};\\n\\\nsnippet wob:ba\\n\\\n\tword-break: break-all;\\n\\\nsnippet wob:bs\\n\\\n\tword-break: break-strict;\\n\\\nsnippet wob:k\\n\\\n\tword-break: keep-all;\\n\\\nsnippet wob:l\\n\\\n\tword-break: loose;\\n\\\nsnippet wob:n\\n\\\n\tword-break: normal;\\n\\\nsnippet wos\\n\\\n\tword-spacing: ${1};\\n\\\nsnippet wow\\n\\\n\tword-wrap: ${1};\\n\\\nsnippet wow:no\\n\\\n\tword-wrap: none;\\n\\\nsnippet wow:n\\n\\\n\tword-wrap: normal;\\n\\\nsnippet wow:s\\n\\\n\tword-wrap: suppress;\\n\\\nsnippet wow:u\\n\\\n\tword-wrap: unrestricted;\\n\\\nsnippet z\\n\\\n\tz-index: ${1};\\n\\\nsnippet z:a\\n\\\n\tz-index: auto;\\n\\\nsnippet zoo\\n\\\n\tzoom: 1;\\n\\\n\";\nexports.scope = \"css\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/curly.js",
    "content": "ace.define(\"ace/snippets/curly\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"curly\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/d.js",
    "content": "ace.define(\"ace/snippets/d\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"d\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/dart.js",
    "content": "ace.define(\"ace/snippets/dart\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet lib\\n\\\n\tlibrary ${1};\\n\\\n\t${2}\\n\\\nsnippet im\\n\\\n\timport '${1}';\\n\\\n\t${2}\\n\\\nsnippet pa\\n\\\n\tpart '${1}';\\n\\\n\t${2}\\n\\\nsnippet pao\\n\\\n\tpart of ${1};\\n\\\n\t${2}\\n\\\nsnippet main\\n\\\n\tvoid main() {\\n\\\n\t  ${1:/* code */}\\n\\\n\t}\\n\\\nsnippet st\\n\\\n\tstatic ${1}\\n\\\nsnippet fi\\n\\\n\tfinal ${1}\\n\\\nsnippet re\\n\\\n\treturn ${1}\\n\\\nsnippet br\\n\\\n\tbreak;\\n\\\nsnippet th\\n\\\n\tthrow ${1}\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\n\\\nsnippet imp\\n\\\n\timplements ${1}\\n\\\nsnippet ext\\n\\\n\textends ${1}\\n\\\nsnippet if\\n\\\n\tif (${1:true}) {\\n\\\n\t  ${2}\\n\\\n\t}\\n\\\nsnippet ife\\n\\\n\tif (${1:true}) {\\n\\\n\t  ${2}\\n\\\n\t} else {\\n\\\n\t  ${3}\\n\\\n\t}\\n\\\nsnippet el\\n\\\n\telse\\n\\\nsnippet sw\\n\\\n\tswitch (${1}) {\\n\\\n\t  ${2}\\n\\\n\t}\\n\\\nsnippet cs\\n\\\n\tcase ${1}:\\n\\\n\t  ${2}\\n\\\nsnippet de\\n\\\n\tdefault:\\n\\\n\t  ${1}\\n\\\nsnippet for\\n\\\n\tfor (var ${2:i} = 0, len = ${1:things}.length; $2 < len; ${3:++}$2) {\\n\\\n\t  ${4:$1[$2]}\\n\\\n\t}\\n\\\nsnippet fore\\n\\\n\tfor (final ${2:item} in ${1:itemList}) {\\n\\\n\t  ${3:/* code */}\\n\\\n\t}\\n\\\nsnippet wh\\n\\\n\twhile (${1:/* condition */}) {\\n\\\n\t  ${2:/* code */}\\n\\\n\t}\\n\\\nsnippet dowh\\n\\\n\tdo {\\n\\\n\t  ${2:/* code */}\\n\\\n\t} while (${1:/* condition */});\\n\\\nsnippet as\\n\\\n\tassert(${1:/* condition */});\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t  ${2}\\n\\\n\t} catch (${1:Exception e}) {\\n\\\n\t}\\n\\\nsnippet tryf\\n\\\n\ttry {\\n\\\n\t  ${2}\\n\\\n\t} catch (${1:Exception e}) {\\n\\\n\t} finally {\\n\\\n\t}\\n\\\n\";\nexports.scope = \"dart\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/diff.js",
    "content": "ace.define(\"ace/snippets/diff\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# DEP-3 (http://dep.debian.net/deps/dep3/) style patch header\\n\\\nsnippet header DEP-3 style header\\n\\\n\tDescription: ${1}\\n\\\n\tOrigin: ${2:vendor|upstream|other}, ${3:url of the original patch}\\n\\\n\tBug: ${4:url in upstream bugtracker}\\n\\\n\tForwarded: ${5:no|not-needed|url}\\n\\\n\tAuthor: ${6:`g:snips_author`}\\n\\\n\tReviewed-by: ${7:name and email}\\n\\\n\tLast-Update: ${8:`strftime(\\\"%Y-%m-%d\\\")`}\\n\\\n\tApplied-Upstream: ${9:upstream version|url|commit}\\n\\\n\\n\\\n\";\nexports.scope = \"diff\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/django.js",
    "content": "ace.define(\"ace/snippets/django\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Model Fields\\n\\\n\\n\\\n# Note: Optional arguments are using defaults that match what Django will use\\n\\\n# as a default, e.g. with max_length fields.  Doing this as a form of self\\n\\\n# documentation and to make it easy to know whether you should override the\\n\\\n# default or not.\\n\\\n\\n\\\n# Note: Optional arguments that are booleans will use the opposite since you\\n\\\n# can either not specify them, or override them, e.g. auto_now_add=False.\\n\\\n\\n\\\nsnippet auto\\n\\\n\t${1:FIELDNAME} = models.AutoField(${2})\\n\\\nsnippet bool\\n\\\n\t${1:FIELDNAME} = models.BooleanField(${2:default=True})\\n\\\nsnippet char\\n\\\n\t${1:FIELDNAME} = models.CharField(max_length=${2}${3:, blank=True})\\n\\\nsnippet comma\\n\\\n\t${1:FIELDNAME} = models.CommaSeparatedIntegerField(max_length=${2}${3:, blank=True})\\n\\\nsnippet date\\n\\\n\t${1:FIELDNAME} = models.DateField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\n\\\nsnippet datetime\\n\\\n\t${1:FIELDNAME} = models.DateTimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\n\\\nsnippet decimal\\n\\\n\t${1:FIELDNAME} = models.DecimalField(max_digits=${2}, decimal_places=${3})\\n\\\nsnippet email\\n\\\n\t${1:FIELDNAME} = models.EmailField(max_length=${2:75}${3:, blank=True})\\n\\\nsnippet file\\n\\\n\t${1:FIELDNAME} = models.FileField(upload_to=${2:path/for/upload}${3:, max_length=100})\\n\\\nsnippet filepath\\n\\\n\t${1:FIELDNAME} = models.FilePathField(path=${2:\\\"/abs/path/to/dir\\\"}${3:, max_length=100}${4:, match=\\\"*.ext\\\"}${5:, recursive=True}${6:, blank=True, })\\n\\\nsnippet float\\n\\\n\t${1:FIELDNAME} = models.FloatField(${2})\\n\\\nsnippet image\\n\\\n\t${1:FIELDNAME} = models.ImageField(upload_to=${2:path/for/upload}${3:, height_field=height, width_field=width}${4:, max_length=100})\\n\\\nsnippet int\\n\\\n\t${1:FIELDNAME} = models.IntegerField(${2})\\n\\\nsnippet ip\\n\\\n\t${1:FIELDNAME} = models.IPAddressField(${2})\\n\\\nsnippet nullbool\\n\\\n\t${1:FIELDNAME} = models.NullBooleanField(${2})\\n\\\nsnippet posint\\n\\\n\t${1:FIELDNAME} = models.PositiveIntegerField(${2})\\n\\\nsnippet possmallint\\n\\\n\t${1:FIELDNAME} = models.PositiveSmallIntegerField(${2})\\n\\\nsnippet slug\\n\\\n\t${1:FIELDNAME} = models.SlugField(max_length=${2:50}${3:, blank=True})\\n\\\nsnippet smallint\\n\\\n\t${1:FIELDNAME} = models.SmallIntegerField(${2})\\n\\\nsnippet text\\n\\\n\t${1:FIELDNAME} = models.TextField(${2:blank=True})\\n\\\nsnippet time\\n\\\n\t${1:FIELDNAME} = models.TimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\n\\\nsnippet url\\n\\\n\t${1:FIELDNAME} = models.URLField(${2:verify_exists=False}${3:, max_length=200}${4:, blank=True})\\n\\\nsnippet xml\\n\\\n\t${1:FIELDNAME} = models.XMLField(schema_path=${2:None}${3:, blank=True})\\n\\\n# Relational Fields\\n\\\nsnippet fk\\n\\\n\t${1:FIELDNAME} = models.ForeignKey(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, to_field=''})\\n\\\nsnippet m2m\\n\\\n\t${1:FIELDNAME} = models.ManyToManyField(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, symmetrical=False}${6:, through=''}${7:, db_table=''})\\n\\\nsnippet o2o\\n\\\n\t${1:FIELDNAME} = models.OneToOneField(${2:OtherModel}${3:, parent_link=True}${4:, related_name=''}${5:, limit_choices_to=}${6:, to_field=''})\\n\\\n\\n\\\n# Code Skeletons\\n\\\n\\n\\\nsnippet form\\n\\\n\tclass ${1:FormName}(forms.Form):\\n\\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\\\n\t\t${3}\\n\\\n\\n\\\nsnippet model\\n\\\n\tclass ${1:ModelName}(models.Model):\\n\\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\\\n\t\t${3}\\n\\\n\t\t\\n\\\n\t\tclass Meta:\\n\\\n\t\t\t${4}\\n\\\n\t\t\\n\\\n\t\tdef __unicode__(self):\\n\\\n\t\t\t${5}\\n\\\n\t\t\\n\\\n\t\tdef save(self, force_insert=False, force_update=False):\\n\\\n\t\t\t${6}\\n\\\n\t\t\\n\\\n\t\t@models.permalink\\n\\\n\t\tdef get_absolute_url(self):\\n\\\n\t\t\treturn ('${7:view_or_url_name}' ${8})\\n\\\n\\n\\\nsnippet modeladmin\\n\\\n\tclass ${1:ModelName}Admin(admin.ModelAdmin):\\n\\\n\t\t${2}\\n\\\n\t\\n\\\n\tadmin.site.register($1, $1Admin)\\n\\\n\t\\n\\\nsnippet tabularinline\\n\\\n\tclass ${1:ModelName}Inline(admin.TabularInline):\\n\\\n\t\tmodel = $1\\n\\\n\\n\\\nsnippet stackedinline\\n\\\n\tclass ${1:ModelName}Inline(admin.StackedInline):\\n\\\n\t\tmodel = $1\\n\\\n\\n\\\nsnippet r2r\\n\\\n\treturn render_to_response('${1:template.html}', {\\n\\\n\t\t\t${2}\\n\\\n\t\t}${3:, context_instance=RequestContext(request)}\\n\\\n\t)\\n\\\n\";\nexports.scope = \"django\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/dockerfile.js",
    "content": "ace.define(\"ace/snippets/dockerfile\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"dockerfile\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/dot.js",
    "content": "ace.define(\"ace/snippets/dot\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"dot\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/drools.js",
    "content": "ace.define(\"ace/snippets/drools\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"\\n\\\nsnippet rule\\n\\\n\trule \\\"${1?:rule_name}\\\"\\n\\\n\twhen\\n\\\n\t\t${2:// when...} \\n\\\n\tthen\\n\\\n\t\t${3:// then...}\\n\\\n\tend\\n\\\n\\n\\\nsnippet query\\n\\\n\tquery ${1?:query_name}\\n\\\n\t\t${2:// find} \\n\\\n\tend\\n\\\n\t\\n\\\nsnippet declare\\n\\\n\tdeclare ${1?:type_name}\\n\\\n\t\t${2:// attributes} \\n\\\n\tend\\n\\\n\\n\\\n\";\nexports.scope = \"drools\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/edifact.js",
    "content": "ace.define(\"ace/snippets/edifact\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n    \"use strict\";\n    \n    exports.snippetText = \"## Access Modifiers\\n\\\nsnippet u\\n\\\n\tUN\\n\\\nsnippet un\\n\\\n\tUNB\\n\\\nsnippet pr\\n\\\n\tprivate\\n\\\n##\\n\\\n## Annotations\\n\\\nsnippet before\\n\\\n\t@Before\\n\\\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\\n\\\nsnippet mm\\n\\\n\t@ManyToMany\\n\\\n\t${1}\\n\\\nsnippet mo\\n\\\n\t@ManyToOne\\n\\\n\t${1}\\n\\\nsnippet om\\n\\\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\\\n\t${2}\\n\\\nsnippet oo\\n\\\n\t@OneToOne\\n\\\n\t${1}\\n\\\n##\\n\\\n## Basic Java packages and import\\n\\\nsnippet im\\n\\\n\timport\\n\\\nsnippet j.b\\n\\\n\tjava.beans.\\n\\\nsnippet j.i\\n\\\n\tjava.io.\\n\\\nsnippet j.m\\n\\\n\tjava.math.\\n\\\nsnippet j.n\\n\\\n\tjava.net.\\n\\\nsnippet j.u\\n\\\n\tjava.util.\\n\\\n##\\n\\\n## Class\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\n\\\nsnippet in\\n\\\n\tinterface ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2:extends Parent}${3}\\n\\\nsnippet tc\\n\\\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n\\\n##\\n\\\n## Class Enhancements\\n\\\nsnippet ext\\n\\\n\textends \\n\\\nsnippet imp\\n\\\n\timplements\\n\\\n##\\n\\\n## Comments\\n\\\nsnippet /*\\n\\\n\t/*\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n##\\n\\\n## Constants\\n\\\nsnippet co\\n\\\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\\n\\\nsnippet cos\\n\\\n\tstatic public final String ${1:var} = \\\"${2}\\\";${3}\\n\\\n##\\n\\\n## Control Statements\\n\\\nsnippet case\\n\\\n\tcase ${1}:\\n\\\n\t\t${2}\\n\\\nsnippet def\\n\\\n\tdefault:\\n\\\n\t\t${2}\\n\\\nsnippet el\\n\\\n\telse\\n\\\nsnippet elif\\n\\\n\telse if (${1}) ${2}\\n\\\nsnippet if\\n\\\n\tif (${1}) ${2}\\n\\\nsnippet sw\\n\\\n\tswitch (${1}) {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\n##\\n\\\n## Create a Method\\n\\\nsnippet m\\n\\\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n\\\n##\\n\\\n## Create a Variable\\n\\\nsnippet v\\n\\\n\t${1:String} ${2:var}${3: = null}${4};${5}\\n\\\n##\\n\\\n## Enhancements to Methods, variables, classes, etc.\\n\\\nsnippet ab\\n\\\n\tabstract\\n\\\nsnippet fi\\n\\\n\tfinal\\n\\\nsnippet st\\n\\\n\tstatic\\n\\\nsnippet sy\\n\\\n\tsynchronized\\n\\\n##\\n\\\n## Error Methods\\n\\\nsnippet err\\n\\\n\tSystem.err.print(\\\"${1:Message}\\\");\\n\\\nsnippet errf\\n\\\n\tSystem.err.printf(\\\"${1:Message}\\\", ${2:exception});\\n\\\nsnippet errln\\n\\\n\tSystem.err.println(\\\"${1:Message}\\\");\\n\\\n##\\n\\\n## Exception Handling\\n\\\nsnippet as\\n\\\n\tassert ${1:test} : \\\"${2:Failure message}\\\";${3}\\n\\\nsnippet ca\\n\\\n\tcatch(${1:Exception} ${2:e}) ${3}\\n\\\nsnippet thr\\n\\\n\tthrow\\n\\\nsnippet ths\\n\\\n\tthrows\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch(${1:Exception} ${2:e}) {\\n\\\n\t}\\n\\\nsnippet tryf\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch(${1:Exception} ${2:e}) {\\n\\\n\t} finally {\\n\\\n\t}\\n\\\n##\\n\\\n## Find Methods\\n\\\nsnippet findall\\n\\\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\n\\\nsnippet findbyid\\n\\\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n\\\n##\\n\\\n## Javadocs\\n\\\nsnippet /**\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\nsnippet @au\\n\\\n\t@author `system(\\\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\\\":\\\\\\\" -f5 | cut -d \\\\\\\",\\\\\\\" -f1\\\")`\\n\\\nsnippet @br\\n\\\n\t@brief ${1:Description}\\n\\\nsnippet @fi\\n\\\n\t@file ${1:`Filename()`}.java\\n\\\nsnippet @pa\\n\\\n\t@param ${1:param}\\n\\\nsnippet @re\\n\\\n\t@return ${1:param}\\n\\\n##\\n\\\n## Logger Methods\\n\\\nsnippet debug\\n\\\n\tLogger.debug(${1:param});${2}\\n\\\nsnippet error\\n\\\n\tLogger.error(${1:param});${2}\\n\\\nsnippet info\\n\\\n\tLogger.info(${1:param});${2}\\n\\\nsnippet warn\\n\\\n\tLogger.warn(${1:param});${2}\\n\\\n##\\n\\\n## Loops\\n\\\nsnippet enfor\\n\\\n\tfor (${1} : ${2}) ${3}\\n\\\nsnippet for\\n\\\n\tfor (${1}; ${2}; ${3}) ${4}\\n\\\nsnippet wh\\n\\\n\twhile (${1}) ${2}\\n\\\n##\\n\\\n## Main method\\n\\\nsnippet main\\n\\\n\tpublic static void main (String[] args) {\\n\\\n\t\t${1:/* code */}\\n\\\n\t}\\n\\\n##\\n\\\n## Print Methods\\n\\\nsnippet print\\n\\\n\tSystem.out.print(\\\"${1:Message}\\\");\\n\\\nsnippet printf\\n\\\n\tSystem.out.printf(\\\"${1:Message}\\\", ${2:args});\\n\\\nsnippet println\\n\\\n\tSystem.out.println(${1});\\n\\\n##\\n\\\n## Render Methods\\n\\\nsnippet ren\\n\\\n\trender(${1:param});${2}\\n\\\nsnippet rena\\n\\\n\trenderArgs.put(\\\"${1}\\\", ${2});${3}\\n\\\nsnippet renb\\n\\\n\trenderBinary(${1:param});${2}\\n\\\nsnippet renj\\n\\\n\trenderJSON(${1:param});${2}\\n\\\nsnippet renx\\n\\\n\trenderXml(${1:param});${2}\\n\\\n##\\n\\\n## Setter and Getter Methods\\n\\\nsnippet set\\n\\\n\t${1:public} void set${3:}(${2:String} ${4:}){\\n\\\n\t\tthis.$4 = $4;\\n\\\n\t}\\n\\\nsnippet get\\n\\\n\t${1:public} ${2:String} get${3:}(){\\n\\\n\t\treturn this.${4:};\\n\\\n\t}\\n\\\n##\\n\\\n## Terminate Methods or Loops\\n\\\nsnippet re\\n\\\n\treturn\\n\\\nsnippet br\\n\\\n\tbreak;\\n\\\n##\\n\\\n## Test Methods\\n\\\nsnippet t\\n\\\n\tpublic void test${1:Name}() throws Exception {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet test\\n\\\n\t@Test\\n\\\n\tpublic void test${1:Name}() throws Exception {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\n##\\n\\\n## Utils\\n\\\nsnippet Sc\\n\\\n\tScanner\\n\\\n##\\n\\\n## Miscellaneous\\n\\\nsnippet action\\n\\\n\tpublic static void ${1:index}(${2:args}) { ${3} }\\n\\\nsnippet rnf\\n\\\n\tnotFound(${1:param});${2}\\n\\\nsnippet rnfin\\n\\\n\tnotFoundIfNull(${1:param});${2}\\n\\\nsnippet rr\\n\\\n\tredirect(${1:param});${2}\\n\\\nsnippet ru\\n\\\n\tunauthorized(${1:param});${2}\\n\\\nsnippet unless\\n\\\n\t(unless=${1:param});${2}\\n\\\n\";\n    exports.scope = \"edifact\";\n    \n});                (function() {\n                    ace.require([\"ace/snippets/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/eiffel.js",
    "content": "ace.define(\"ace/snippets/eiffel\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"eiffel\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/ejs.js",
    "content": "ace.define(\"ace/snippets/ejs\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ejs\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/elixir.js",
    "content": "ace.define(\"ace/snippets/elixir\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/elm.js",
    "content": "ace.define(\"ace/snippets/elm\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"elm\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/erlang.js",
    "content": "ace.define(\"ace/snippets/erlang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# module and export all\\n\\\nsnippet mod\\n\\\n\t-module(${1:`Filename('', 'my')`}).\\n\\\n\t\\n\\\n\t-compile([export_all]).\\n\\\n\t\\n\\\n\tstart() ->\\n\\\n\t    ${2}\\n\\\n\t\\n\\\n\tstop() ->\\n\\\n\t    ok.\\n\\\n# define directive\\n\\\nsnippet def\\n\\\n\t-define(${1:macro}, ${2:body}).${3}\\n\\\n# export directive\\n\\\nsnippet exp\\n\\\n\t-export([${1:function}/${2:arity}]).\\n\\\n# include directive\\n\\\nsnippet inc\\n\\\n\t-include(\\\"${1:file}\\\").${2}\\n\\\n# behavior directive\\n\\\nsnippet beh\\n\\\n\t-behaviour(${1:behaviour}).${2}\\n\\\n# if expression\\n\\\nsnippet if\\n\\\n\tif\\n\\\n\t    ${1:guard} ->\\n\\\n\t        ${2:body}\\n\\\n\tend\\n\\\n# case expression\\n\\\nsnippet case\\n\\\n\tcase ${1:expression} of\\n\\\n\t    ${2:pattern} ->\\n\\\n\t        ${3:body};\\n\\\n\tend\\n\\\n# anonymous function\\n\\\nsnippet fun\\n\\\n\tfun (${1:Parameters}) -> ${2:body} end${3}\\n\\\n# try...catch\\n\\\nsnippet try\\n\\\n\ttry\\n\\\n\t    ${1}\\n\\\n\tcatch\\n\\\n\t    ${2:_:_} -> ${3:got_some_exception}\\n\\\n\tend\\n\\\n# record directive\\n\\\nsnippet rec\\n\\\n\t-record(${1:record}, {\\n\\\n\t    ${2:field}=${3:value}}).${4}\\n\\\n# todo comment\\n\\\nsnippet todo\\n\\\n\t%% TODO: ${1}\\n\\\n## Snippets below (starting with '%') are in EDoc format.\\n\\\n## See http://www.erlang.org/doc/apps/edoc/chapter.html#id56887 for more details\\n\\\n# doc comment\\n\\\nsnippet %d\\n\\\n\t%% @doc ${1}\\n\\\n# end of doc comment\\n\\\nsnippet %e\\n\\\n\t%% @end\\n\\\n# specification comment\\n\\\nsnippet %s\\n\\\n\t%% @spec ${1}\\n\\\n# private function marker\\n\\\nsnippet %p\\n\\\n\t%% @private\\n\\\n# OTP application\\n\\\nsnippet application\\n\\\n\t-module(${1:`Filename('', 'my')`}).\\n\\\n\\n\\\n\t-behaviour(application).\\n\\\n\\n\\\n\t-export([start/2, stop/1]).\\n\\\n\\n\\\n\tstart(_Type, _StartArgs) ->\\n\\\n\t    case ${2:root_supervisor}:start_link() of\\n\\\n\t        {ok, Pid} ->\\n\\\n\t            {ok, Pid};\\n\\\n\t        Other ->\\n\\\n\t\t          {error, Other}\\n\\\n\t    end.\\n\\\n\\n\\\n\tstop(_State) ->\\n\\\n\t    ok.\t\\n\\\n# OTP supervisor\\n\\\nsnippet supervisor\\n\\\n\t-module(${1:`Filename('', 'my')`}).\\n\\\n\\n\\\n\t-behaviour(supervisor).\\n\\\n\\n\\\n\t%% API\\n\\\n\t-export([start_link/0]).\\n\\\n\\n\\\n\t%% Supervisor callbacks\\n\\\n\t-export([init/1]).\\n\\\n\\n\\\n\t-define(SERVER, ?MODULE).\\n\\\n\\n\\\n\tstart_link() ->\\n\\\n\t    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\\n\\\n\\n\\\n\tinit([]) ->\\n\\\n\t    Server = {${2:my_server}, {$2, start_link, []},\\n\\\n\t      permanent, 2000, worker, [$2]},\\n\\\n\t    Children = [Server],\\n\\\n\t    RestartStrategy = {one_for_one, 0, 1},\\n\\\n\t    {ok, {RestartStrategy, Children}}.\\n\\\n# OTP gen_server\\n\\\nsnippet gen_server\\n\\\n\t-module(${1:`Filename('', 'my')`}).\\n\\\n\\n\\\n\t-behaviour(gen_server).\\n\\\n\\n\\\n\t%% API\\n\\\n\t-export([\\n\\\n\t         start_link/0\\n\\\n\t        ]).\\n\\\n\\n\\\n\t%% gen_server callbacks\\n\\\n\t-export([init/1, handle_call/3, handle_cast/2, handle_info/2,\\n\\\n\t         terminate/2, code_change/3]).\\n\\\n\\n\\\n\t-define(SERVER, ?MODULE).\\n\\\n\\n\\\n\t-record(state, {}).\\n\\\n\\n\\\n\t%%%===================================================================\\n\\\n\t%%% API\\n\\\n\t%%%===================================================================\\n\\\n\\n\\\n\tstart_link() ->\\n\\\n\t    gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).\\n\\\n\\n\\\n\t%%%===================================================================\\n\\\n\t%%% gen_server callbacks\\n\\\n\t%%%===================================================================\\n\\\n\\n\\\n\tinit([]) ->\\n\\\n\t    {ok, #state{}}.\\n\\\n\\n\\\n\thandle_call(_Request, _From, State) ->\\n\\\n\t    Reply = ok,\\n\\\n\t    {reply, Reply, State}.\\n\\\n\\n\\\n\thandle_cast(_Msg, State) ->\\n\\\n\t    {noreply, State}.\\n\\\n\\n\\\n\thandle_info(_Info, State) ->\\n\\\n\t    {noreply, State}.\\n\\\n\\n\\\n\tterminate(_Reason, _State) ->\\n\\\n\t    ok.\\n\\\n\\n\\\n\tcode_change(_OldVsn, State, _Extra) ->\\n\\\n\t    {ok, State}.\\n\\\n\\n\\\n\t%%%===================================================================\\n\\\n\t%%% Internal functions\\n\\\n\t%%%===================================================================\\n\\\n\\n\\\n\";\nexports.scope = \"erlang\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/forth.js",
    "content": "ace.define(\"ace/snippets/forth\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"forth\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/fortran.js",
    "content": "ace.define(\"ace/snippets/fortran\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"fortran\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/fsharp.js",
    "content": "ace.define(\"ace/snippets/fsharp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n    \"use strict\";\n\n    exports.snippetText =undefined;\n    exports.scope = \"fsharp\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/fsl.js",
    "content": "ace.define(\"ace/snippets/fsl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/ftl.js",
    "content": "ace.define(\"ace/snippets/ftl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ftl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/gcode.js",
    "content": "ace.define(\"ace/snippets/gcode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"gcode\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/gherkin.js",
    "content": "ace.define(\"ace/snippets/gherkin\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"gherkin\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/gitignore.js",
    "content": "ace.define(\"ace/snippets/gitignore\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"gitignore\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/glsl.js",
    "content": "ace.define(\"ace/snippets/glsl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"glsl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/gobstones.js",
    "content": "ace.define(\"ace/snippets/gobstones\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Procedure\\n\\\nsnippet proc\\n\\\n\tprocedure ${1?:name}(${2:argument}) {\\n\\\n\t\t${3:// body...}\\n\\\n\t}\\n\\\n\\n\\\n# Function\\n\\\nsnippet fun\\n\\\n\tfunction ${1?:name}(${2:argument}) {\\n\\\n\t\treturn ${3:// body...}\\n\\\n\t}\\n\\\n\\n\\\n# Repeat\\n\\\nsnippet rep\\n\\\n\trepeat ${1?:times} {\\n\\\n\t\t${2:// body...}\\n\\\n\t}\\n\\\n\\n\\\n# For\\n\\\nsnippet for\\n\\\n\tforeach ${1?:e} in ${2?:list} {\\n\\\n\t\t${3:// body...}\t\\n\\\n\t}\\n\\\n\\n\\\n# If\\n\\\nsnippet if\\n\\\n\tif (${1?:condition}) {\\n\\\n\t\t${3:// body...}\t\\n\\\n\t}\\n\\\n\\n\\\n# While\\n\\\n  while (${1?:condition}) {\\n\\\n    ${2:// body...}\t\\n\\\n  }\\n\\\n\";\nexports.scope = \"gobstones\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/golang.js",
    "content": "ace.define(\"ace/snippets/golang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"golang\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/graphqlschema.js",
    "content": "ace.define(\"ace/snippets/graphqlschema\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Type Snippet\\n\\\ntrigger type\\n\\\nsnippet type\\n\\\n\ttype ${1:type_name} {\\n\\\n\t\t${2:type_siblings}\\n\\\n\t}\\n\\\n\\n\\\n# Input Snippet\\n\\\ntrigger input\\n\\\nsnippet input\\n\\\n\tinput ${1:input_name} {\\n\\\n\t\t${2:input_siblings}\\n\\\n\t}\\n\\\n\\n\\\n# Interface Snippet\\n\\\ntrigger interface\\n\\\nsnippet interface\\n\\\n\tinterface ${1:interface_name} {\\n\\\n\t\t${2:interface_siblings}\\n\\\n\t}\\n\\\n\\n\\\n# Interface Snippet\\n\\\ntrigger union\\n\\\nsnippet union\\n\\\n\tunion ${1:union_name} = ${2:type} | ${3: type}\\n\\\n\\n\\\n# Enum Snippet\\n\\\ntrigger enum\\n\\\nsnippet enum\\n\\\n\tenum ${1:enum_name} {\\n\\\n\t\t${2:enum_siblings}\\n\\\n\t}\\n\\\n\";\nexports.scope = \"graphqlschema\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/groovy.js",
    "content": "ace.define(\"ace/snippets/groovy\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"groovy\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/haml.js",
    "content": "ace.define(\"ace/snippets/haml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet t\\n\\\n\t%table\\n\\\n\t\t%tr\\n\\\n\t\t\t%th\\n\\\n\t\t\t\t${1:headers}\\n\\\n\t\t%tr\\n\\\n\t\t\t%td\\n\\\n\t\t\t\t${2:headers}\\n\\\nsnippet ul\\n\\\n\t%ul\\n\\\n\t\t%li\\n\\\n\t\t\t${1:item}\\n\\\n\t\t%li\\n\\\nsnippet =rp\\n\\\n\t= render :partial => '${1:partial}'\\n\\\nsnippet =rpl\\n\\\n\t= render :partial => '${1:partial}', :locals => {}\\n\\\nsnippet =rpc\\n\\\n\t= render :partial => '${1:partial}', :collection => @$1\\n\\\n\\n\\\n\";\nexports.scope = \"haml\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/handlebars.js",
    "content": "ace.define(\"ace/snippets/handlebars\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"handlebars\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/haskell.js",
    "content": "ace.define(\"ace/snippets/haskell\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet lang\\n\\\n\t{-# LANGUAGE ${1:OverloadedStrings} #-}\\n\\\nsnippet info\\n\\\n\t-- |\\n\\\n\t-- Module      :  ${1:Module.Namespace}\\n\\\n\t-- Copyright   :  ${2:Author} ${3:2011-2012}\\n\\\n\t-- License     :  ${4:BSD3}\\n\\\n\t--\\n\\\n\t-- Maintainer  :  ${5:email@something.com}\\n\\\n\t-- Stability   :  ${6:experimental}\\n\\\n\t-- Portability :  ${7:unknown}\\n\\\n\t--\\n\\\n\t-- ${8:Description}\\n\\\n\t--\\n\\\nsnippet import\\n\\\n\timport           ${1:Data.Text}\\n\\\nsnippet import2\\n\\\n\timport           ${1:Data.Text} (${2:head})\\n\\\nsnippet importq\\n\\\n\timport qualified ${1:Data.Text} as ${2:T}\\n\\\nsnippet inst\\n\\\n\tinstance ${1:Monoid} ${2:Type} where\\n\\\n\t\t${3}\\n\\\nsnippet type\\n\\\n\ttype ${1:Type} = ${2:Type}\\n\\\nsnippet data\\n\\\n\tdata ${1:Type} = ${2:$1} ${3:Int}\\n\\\nsnippet newtype\\n\\\n\tnewtype ${1:Type} = ${2:$1} ${3:Int}\\n\\\nsnippet class\\n\\\n\tclass ${1:Class} a where\\n\\\n\t\t${2}\\n\\\nsnippet module\\n\\\n\tmodule `substitute(substitute(expand('%:r'), '[/\\\\\\\\]','.','g'),'^\\\\%(\\\\l*\\\\.\\\\)\\\\?','','')` (\\n\\\n\t)\twhere\\n\\\n\t`expand('%') =~ 'Main' ? \\\"\\\\n\\\\nmain = do\\\\n  print \\\\\\\"hello world\\\\\\\"\\\" : \\\"\\\"`\\n\\\n\\n\\\nsnippet const\\n\\\n\t${1:name} :: ${2:a}\\n\\\n\t$1 = ${3:undefined}\\n\\\nsnippet fn\\n\\\n\t${1:fn} :: ${2:a} -> ${3:a}\\n\\\n\t$1 ${4} = ${5:undefined}\\n\\\nsnippet fn2\\n\\\n\t${1:fn} :: ${2:a} -> ${3:a} -> ${4:a}\\n\\\n\t$1 ${5} = ${6:undefined}\\n\\\nsnippet ap\\n\\\n\t${1:map} ${2:fn} ${3:list}\\n\\\nsnippet do\\n\\\n\tdo\\n\\\n\t\t\\n\\\nsnippet λ\\n\\\n\t\\\\${1:x} -> ${2}\\n\\\nsnippet \\\\\\n\\\n\t\\\\${1:x} -> ${2}\\n\\\nsnippet <-\\n\\\n\t${1:a} <- ${2:m a}\\n\\\nsnippet ←\\n\\\n\t${1:a} <- ${2:m a}\\n\\\nsnippet ->\\n\\\n\t${1:m a} -> ${2:a}\\n\\\nsnippet →\\n\\\n\t${1:m a} -> ${2:a}\\n\\\nsnippet tup\\n\\\n\t(${1:a}, ${2:b})\\n\\\nsnippet tup2\\n\\\n\t(${1:a}, ${2:b}, ${3:c})\\n\\\nsnippet tup3\\n\\\n\t(${1:a}, ${2:b}, ${3:c}, ${4:d})\\n\\\nsnippet rec\\n\\\n\t${1:Record} { ${2:recFieldA} = ${3:undefined}\\n\\\n\t\t\t\t, ${4:recFieldB} = ${5:undefined}\\n\\\n\t\t\t\t}\\n\\\nsnippet case\\n\\\n\tcase ${1:something} of\\n\\\n\t\t${2} -> ${3}\\n\\\nsnippet let\\n\\\n\tlet ${1} = ${2}\\n\\\n\tin ${3}\\n\\\nsnippet where\\n\\\n\twhere\\n\\\n\t\t${1:fn} = ${2:undefined}\\n\\\n\";\nexports.scope = \"haskell\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/haskell_cabal.js",
    "content": "ace.define(\"ace/snippets/haskell_cabal\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"haskell_cabal\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/haxe.js",
    "content": "ace.define(\"ace/snippets/haxe\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"haxe\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/hjson.js",
    "content": "ace.define(\"ace/snippets/hjson\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/html.js",
    "content": "ace.define(\"ace/snippets/html\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Some useful Unicode entities\\n\\\n# Non-Breaking Space\\n\\\nsnippet nbs\\n\\\n\t&nbsp;\\n\\\n# ←\\n\\\nsnippet left\\n\\\n\t&#x2190;\\n\\\n# →\\n\\\nsnippet right\\n\\\n\t&#x2192;\\n\\\n# ↑\\n\\\nsnippet up\\n\\\n\t&#x2191;\\n\\\n# ↓\\n\\\nsnippet down\\n\\\n\t&#x2193;\\n\\\n# ↩\\n\\\nsnippet return\\n\\\n\t&#x21A9;\\n\\\n# ⇤\\n\\\nsnippet backtab\\n\\\n\t&#x21E4;\\n\\\n# ⇥\\n\\\nsnippet tab\\n\\\n\t&#x21E5;\\n\\\n# ⇧\\n\\\nsnippet shift\\n\\\n\t&#x21E7;\\n\\\n# ⌃\\n\\\nsnippet ctrl\\n\\\n\t&#x2303;\\n\\\n# ⌅\\n\\\nsnippet enter\\n\\\n\t&#x2305;\\n\\\n# ⌘\\n\\\nsnippet cmd\\n\\\n\t&#x2318;\\n\\\n# ⌥\\n\\\nsnippet option\\n\\\n\t&#x2325;\\n\\\n# ⌦\\n\\\nsnippet delete\\n\\\n\t&#x2326;\\n\\\n# ⌫\\n\\\nsnippet backspace\\n\\\n\t&#x232B;\\n\\\n# ⎋\\n\\\nsnippet esc\\n\\\n\t&#x238B;\\n\\\n# Generic Doctype\\n\\\nsnippet doctype HTML 4.01 Strict\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\nsnippet doctype HTML 4.01 Transitional\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\nsnippet doctype HTML 5\\n\\\n\t<!DOCTYPE HTML>\\n\\\nsnippet doctype XHTML 1.0 Frameset\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Strict\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Transitional\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\nsnippet doctype XHTML 1.1\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# HTML Doctype 4.01 Strict\\n\\\nsnippet docts\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\n# HTML Doctype 4.01 Transitional\\n\\\nsnippet doct\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\n# HTML Doctype 5\\n\\\nsnippet doct5\\n\\\n\t<!DOCTYPE html>\\n\\\n# XHTML Doctype 1.0 Frameset\\n\\\nsnippet docxf\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Frameset//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Strict\\n\\\nsnippet docxs\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Transitional\\n\\\nsnippet docxt\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\n# XHTML Doctype 1.1\\n\\\nsnippet docx\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# html5shiv\\n\\\nsnippet html5shiv\\n\\\n\t<!--[if lte IE 8]>\\n\\\n\t\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\\\"></script>\\n\\\n\t<![endif]-->\\n\\\nsnippet html5printshiv\\n\\\n\t<!--[if lte IE 8]>\\n\\\n\t\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\\\"></script>\\n\\\n\t<![endif]-->\\n\\\n# Attributes\\n\\\nsnippet attr\\n\\\n\t${1:attribute}=\\\"${2:property}\\\"\\n\\\nsnippet attr+\\n\\\n\t${1:attribute}=\\\"${2:property}\\\" attr+${3}\\n\\\nsnippet .\\n\\\n\tclass=\\\"${1}\\\"${2}\\n\\\nsnippet #\\n\\\n\tid=\\\"${1}\\\"${2}\\n\\\nsnippet alt\\n\\\n\talt=\\\"${1}\\\"${2}\\n\\\nsnippet charset\\n\\\n\tcharset=\\\"${1:utf-8}\\\"${2}\\n\\\nsnippet data\\n\\\n\tdata-${1}=\\\"${2:$1}\\\"${3}\\n\\\nsnippet for\\n\\\n\tfor=\\\"${1}\\\"${2}\\n\\\nsnippet height\\n\\\n\theight=\\\"${1}\\\"${2}\\n\\\nsnippet href\\n\\\n\thref=\\\"${1:#}\\\"${2}\\n\\\nsnippet lang\\n\\\n\tlang=\\\"${1:en}\\\"${2}\\n\\\nsnippet media\\n\\\n\tmedia=\\\"${1}\\\"${2}\\n\\\nsnippet name\\n\\\n\tname=\\\"${1}\\\"${2}\\n\\\nsnippet rel\\n\\\n\trel=\\\"${1}\\\"${2}\\n\\\nsnippet scope\\n\\\n\tscope=\\\"${1:row}\\\"${2}\\n\\\nsnippet src\\n\\\n\tsrc=\\\"${1}\\\"${2}\\n\\\nsnippet title=\\n\\\n\ttitle=\\\"${1}\\\"${2}\\n\\\nsnippet type\\n\\\n\ttype=\\\"${1}\\\"${2}\\n\\\nsnippet value\\n\\\n\tvalue=\\\"${1}\\\"${2}\\n\\\nsnippet width\\n\\\n\twidth=\\\"${1}\\\"${2}\\n\\\n# Elements\\n\\\nsnippet a\\n\\\n\t<a href=\\\"${1:#}\\\">${2:$1}</a>\\n\\\nsnippet a.\\n\\\n\t<a class=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a#\\n\\\n\t<a id=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a:ext\\n\\\n\t<a href=\\\"http://${1:example.com}\\\">${2:$1}</a>\\n\\\nsnippet a:mail\\n\\\n\t<a href=\\\"mailto:${1:joe@example.com}?subject=${2:feedback}\\\">${3:email me}</a>\\n\\\nsnippet abbr\\n\\\n\t<abbr title=\\\"${1}\\\">${2}</abbr>\\n\\\nsnippet address\\n\\\n\t<address>\\n\\\n\t\t${1}\\n\\\n\t</address>\\n\\\nsnippet area\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\nsnippet area+\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\n\tarea+${5}\\n\\\nsnippet area:c\\n\\\n\t<area shape=\\\"circle\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:d\\n\\\n\t<area shape=\\\"default\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:p\\n\\\n\t<area shape=\\\"poly\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:r\\n\\\n\t<area shape=\\\"rect\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet article\\n\\\n\t<article>\\n\\\n\t\t${1}\\n\\\n\t</article>\\n\\\nsnippet article.\\n\\\n\t<article class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet article#\\n\\\n\t<article id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet aside\\n\\\n\t<aside>\\n\\\n\t\t${1}\\n\\\n\t</aside>\\n\\\nsnippet aside.\\n\\\n\t<aside class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet aside#\\n\\\n\t<aside id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet audio\\n\\\n\t<audio src=\\\"${1}>${2}</audio>\\n\\\nsnippet b\\n\\\n\t<b>${1}</b>\\n\\\nsnippet base\\n\\\n\t<base href=\\\"${1}\\\" target=\\\"${2}\\\" />\\n\\\nsnippet bdi\\n\\\n\t<bdi>${1}</bdo>\\n\\\nsnippet bdo\\n\\\n\t<bdo dir=\\\"${1}\\\">${2}</bdo>\\n\\\nsnippet bdo:l\\n\\\n\t<bdo dir=\\\"ltr\\\">${1}</bdo>\\n\\\nsnippet bdo:r\\n\\\n\t<bdo dir=\\\"rtl\\\">${1}</bdo>\\n\\\nsnippet blockquote\\n\\\n\t<blockquote>\\n\\\n\t\t${1}\\n\\\n\t</blockquote>\\n\\\nsnippet body\\n\\\n\t<body>\\n\\\n\t\t${1}\\n\\\n\t</body>\\n\\\nsnippet br\\n\\\n\t<br />${1}\\n\\\nsnippet button\\n\\\n\t<button type=\\\"${1:submit}\\\">${2}</button>\\n\\\nsnippet button.\\n\\\n\t<button class=\\\"${1:button}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button#\\n\\\n\t<button id=\\\"${1}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button:s\\n\\\n\t<button type=\\\"submit\\\">${1}</button>\\n\\\nsnippet button:r\\n\\\n\t<button type=\\\"reset\\\">${1}</button>\\n\\\nsnippet canvas\\n\\\n\t<canvas>\\n\\\n\t\t${1}\\n\\\n\t</canvas>\\n\\\nsnippet caption\\n\\\n\t<caption>${1}</caption>\\n\\\nsnippet cite\\n\\\n\t<cite>${1}</cite>\\n\\\nsnippet code\\n\\\n\t<code>${1}</code>\\n\\\nsnippet col\\n\\\n\t<col />${1}\\n\\\nsnippet col+\\n\\\n\t<col />\\n\\\n\tcol+${1}\\n\\\nsnippet colgroup\\n\\\n\t<colgroup>\\n\\\n\t\t${1}\\n\\\n\t</colgroup>\\n\\\nsnippet colgroup+\\n\\\n\t<colgroup>\\n\\\n\t\t<col />\\n\\\n\t\tcol+${1}\\n\\\n\t</colgroup>\\n\\\nsnippet command\\n\\\n\t<command type=\\\"command\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:c\\n\\\n\t<command type=\\\"checkbox\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:r\\n\\\n\t<command type=\\\"radio\\\" radiogroup=\\\"${1}\\\" label=\\\"${2}\\\" icon=\\\"${3}\\\" />\\n\\\nsnippet datagrid\\n\\\n\t<datagrid>\\n\\\n\t\t${1}\\n\\\n\t</datagrid>\\n\\\nsnippet datalist\\n\\\n\t<datalist>\\n\\\n\t\t${1}\\n\\\n\t</datalist>\\n\\\nsnippet datatemplate\\n\\\n\t<datatemplate>\\n\\\n\t\t${1}\\n\\\n\t</datatemplate>\\n\\\nsnippet dd\\n\\\n\t<dd>${1}</dd>\\n\\\nsnippet dd.\\n\\\n\t<dd class=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet dd#\\n\\\n\t<dd id=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet del\\n\\\n\t<del>${1}</del>\\n\\\nsnippet details\\n\\\n\t<details>${1}</details>\\n\\\nsnippet dfn\\n\\\n\t<dfn>${1}</dfn>\\n\\\nsnippet dialog\\n\\\n\t<dialog>\\n\\\n\t\t${1}\\n\\\n\t</dialog>\\n\\\nsnippet div\\n\\\n\t<div>\\n\\\n\t\t${1}\\n\\\n\t</div>\\n\\\nsnippet div.\\n\\\n\t<div class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet div#\\n\\\n\t<div id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet dl\\n\\\n\t<dl>\\n\\\n\t\t${1}\\n\\\n\t</dl>\\n\\\nsnippet dl.\\n\\\n\t<dl class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl#\\n\\\n\t<dl id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl+\\n\\\n\t<dl>\\n\\\n\t\t<dt>${1}</dt>\\n\\\n\t\t<dd>${2}</dd>\\n\\\n\t\tdt+${3}\\n\\\n\t</dl>\\n\\\nsnippet dt\\n\\\n\t<dt>${1}</dt>\\n\\\nsnippet dt.\\n\\\n\t<dt class=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt#\\n\\\n\t<dt id=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt+\\n\\\n\t<dt>${1}</dt>\\n\\\n\t<dd>${2}</dd>\\n\\\n\tdt+${3}\\n\\\nsnippet em\\n\\\n\t<em>${1}</em>\\n\\\nsnippet embed\\n\\\n\t<embed src=${1} type=\\\"${2} />\\n\\\nsnippet fieldset\\n\\\n\t<fieldset>\\n\\\n\t\t${1}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset.\\n\\\n\t<fieldset class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset#\\n\\\n\t<fieldset id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset+\\n\\\n\t<fieldset>\\n\\\n\t\t<legend><span>${1}</span></legend>\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\n\tfieldset+${3}\\n\\\nsnippet figcaption\\n\\\n\t<figcaption>${1}</figcaption>\\n\\\nsnippet figure\\n\\\n\t<figure>${1}</figure>\\n\\\nsnippet footer\\n\\\n\t<footer>\\n\\\n\t\t${1}\\n\\\n\t</footer>\\n\\\nsnippet footer.\\n\\\n\t<footer class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet footer#\\n\\\n\t<footer id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet form\\n\\\n\t<form action=\\\"${1}\\\" method=\\\"${2:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${3}\\n\\\n\t</form>\\n\\\nsnippet form.\\n\\\n\t<form class=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet form#\\n\\\n\t<form id=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet h1\\n\\\n\t<h1>${1}</h1>\\n\\\nsnippet h1.\\n\\\n\t<h1 class=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h1#\\n\\\n\t<h1 id=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h2\\n\\\n\t<h2>${1}</h2>\\n\\\nsnippet h2.\\n\\\n\t<h2 class=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h2#\\n\\\n\t<h2 id=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h3\\n\\\n\t<h3>${1}</h3>\\n\\\nsnippet h3.\\n\\\n\t<h3 class=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h3#\\n\\\n\t<h3 id=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h4\\n\\\n\t<h4>${1}</h4>\\n\\\nsnippet h4.\\n\\\n\t<h4 class=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h4#\\n\\\n\t<h4 id=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h5\\n\\\n\t<h5>${1}</h5>\\n\\\nsnippet h5.\\n\\\n\t<h5 class=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h5#\\n\\\n\t<h5 id=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h6\\n\\\n\t<h6>${1}</h6>\\n\\\nsnippet h6.\\n\\\n\t<h6 class=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet h6#\\n\\\n\t<h6 id=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet head\\n\\\n\t<head>\\n\\\n\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\\n\\\n\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t${2}\\n\\\n\t</head>\\n\\\nsnippet header\\n\\\n\t<header>\\n\\\n\t\t${1}\\n\\\n\t</header>\\n\\\nsnippet header.\\n\\\n\t<header class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet header#\\n\\\n\t<header id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet hgroup\\n\\\n\t<hgroup>\\n\\\n\t\t${1}\\n\\\n\t</hgroup>\\n\\\nsnippet hgroup.\\n\\\n\t<hgroup class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</hgroup>\\n\\\nsnippet hr\\n\\\n\t<hr />${1}\\n\\\nsnippet html\\n\\\n\t<html>\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet xhtml\\n\\\n\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet html5\\n\\\n\t<!DOCTYPE html>\\n\\\n\t<html>\\n\\\n\t\t<head>\\n\\\n\t\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t\t${2:meta}\\n\\\n\t\t</head>\\n\\\n\t\t<body>\\n\\\n\t\t\t${3:body}\\n\\\n\t\t</body>\\n\\\n\t</html>\\n\\\nsnippet xhtml5\\n\\\n\t<!DOCTYPE html>\\n\\\n\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\\n\t\t<head>\\n\\\n\t\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"application/xhtml+xml; charset=utf-8\\\" />\\n\\\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t\t${2:meta}\\n\\\n\t\t</head>\\n\\\n\t\t<body>\\n\\\n\t\t\t${3:body}\\n\\\n\t\t</body>\\n\\\n\t</html>\\n\\\nsnippet i\\n\\\n\t<i>${1}</i>\\n\\\nsnippet iframe\\n\\\n\t<iframe src=\\\"${1}\\\" frameborder=\\\"0\\\"></iframe>${2}\\n\\\nsnippet iframe.\\n\\\n\t<iframe class=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet iframe#\\n\\\n\t<iframe id=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet img\\n\\\n\t<img src=\\\"${1}\\\" alt=\\\"${2}\\\" />${3}\\n\\\nsnippet img.\\n\\\n\t<img class=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet img#\\n\\\n\t<img id=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet input\\n\\\n\t<input type=\\\"${1:text/submit/hidden/button/image}\\\" name=\\\"${2}\\\" id=\\\"${3:$2}\\\" value=\\\"${4}\\\" />${5}\\n\\\nsnippet input.\\n\\\n\t<input class=\\\"${1}\\\" type=\\\"${2:text/submit/hidden/button/image}\\\" name=\\\"${3}\\\" id=\\\"${4:$3}\\\" value=\\\"${5}\\\" />${6}\\n\\\nsnippet input:text\\n\\\n\t<input type=\\\"text\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:submit\\n\\\n\t<input type=\\\"submit\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:hidden\\n\\\n\t<input type=\\\"hidden\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:button\\n\\\n\t<input type=\\\"button\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:image\\n\\\n\t<input type=\\\"image\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" src=\\\"${3}\\\" alt=\\\"${4}\\\" />${5}\\n\\\nsnippet input:checkbox\\n\\\n\t<input type=\\\"checkbox\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:radio\\n\\\n\t<input type=\\\"radio\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:color\\n\\\n\t<input type=\\\"color\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:date\\n\\\n\t<input type=\\\"date\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime\\n\\\n\t<input type=\\\"datetime\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime-local\\n\\\n\t<input type=\\\"datetime-local\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:email\\n\\\n\t<input type=\\\"email\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:file\\n\\\n\t<input type=\\\"file\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:month\\n\\\n\t<input type=\\\"month\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:number\\n\\\n\t<input type=\\\"number\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:password\\n\\\n\t<input type=\\\"password\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:range\\n\\\n\t<input type=\\\"range\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:reset\\n\\\n\t<input type=\\\"reset\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:search\\n\\\n\t<input type=\\\"search\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:time\\n\\\n\t<input type=\\\"time\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:url\\n\\\n\t<input type=\\\"url\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:week\\n\\\n\t<input type=\\\"week\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet ins\\n\\\n\t<ins>${1}</ins>\\n\\\nsnippet kbd\\n\\\n\t<kbd>${1}</kbd>\\n\\\nsnippet keygen\\n\\\n\t<keygen>${1}</keygen>\\n\\\nsnippet label\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\nsnippet label:i\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<input type=\\\"${3:text/submit/hidden/button}\\\" name=\\\"${4:$2}\\\" id=\\\"${5:$2}\\\" value=\\\"${6}\\\" />${7}\\n\\\nsnippet label:s\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<select name=\\\"${3:$2}\\\" id=\\\"${4:$2}\\\">\\n\\\n\t\t<option value=\\\"${5}\\\">${6:$5}</option>\\n\\\n\t</select>\\n\\\nsnippet legend\\n\\\n\t<legend>${1}</legend>\\n\\\nsnippet legend+\\n\\\n\t<legend><span>${1}</span></legend>\\n\\\nsnippet li\\n\\\n\t<li>${1}</li>\\n\\\nsnippet li.\\n\\\n\t<li class=\\\"${1}\\\">${2}</li>\\n\\\nsnippet li+\\n\\\n\t<li>${1}</li>\\n\\\n\tli+${2}\\n\\\nsnippet lia\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\nsnippet lia+\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\n\tlia+${3}\\n\\\nsnippet link\\n\\\n\t<link rel=\\\"${1}\\\" href=\\\"${2}\\\" title=\\\"${3}\\\" type=\\\"${4}\\\" />${5}\\n\\\nsnippet link:atom\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:atom.xml}\\\" title=\\\"Atom\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:css\\n\\\n\t<link rel=\\\"stylesheet\\\" href=\\\"${2:style.css}\\\" type=\\\"text/css\\\" media=\\\"${3:all}\\\" />${4}\\n\\\nsnippet link:favicon\\n\\\n\t<link rel=\\\"shortcut icon\\\" href=\\\"${1:favicon.ico}\\\" type=\\\"image/x-icon\\\" />${2}\\n\\\nsnippet link:rss\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:rss.xml}\\\" title=\\\"RSS\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:touch\\n\\\n\t<link rel=\\\"apple-touch-icon\\\" href=\\\"${1:favicon.png}\\\" />${2}\\n\\\nsnippet map\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</map>\\n\\\nsnippet map.\\n\\\n\t<map class=\\\"${1}\\\" name=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map#\\n\\\n\t<map name=\\\"${1}\\\" id=\\\"${2:$1}>\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map+\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t<area shape=\\\"${2}\\\" coords=\\\"${3}\\\" href=\\\"${4}\\\" alt=\\\"${5}\\\" />${6}\\n\\\n\t</map>${7}\\n\\\nsnippet mark\\n\\\n\t<mark>${1}</mark>\\n\\\nsnippet menu\\n\\\n\t<menu>\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:c\\n\\\n\t<menu type=\\\"context\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:t\\n\\\n\t<menu type=\\\"toolbar\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet meta\\n\\\n\t<meta http-equiv=\\\"${1}\\\" content=\\\"${2}\\\" />${3}\\n\\\nsnippet meta:compat\\n\\\n\t<meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=${1:7,8,edge}\\\" />${3}\\n\\\nsnippet meta:refresh\\n\\\n\t<meta http-equiv=\\\"refresh\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meta:utf\\n\\\n\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meter\\n\\\n\t<meter>${1}</meter>\\n\\\nsnippet nav\\n\\\n\t<nav>\\n\\\n\t\t${1}\\n\\\n\t</nav>\\n\\\nsnippet nav.\\n\\\n\t<nav class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet nav#\\n\\\n\t<nav id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet noscript\\n\\\n\t<noscript>\\n\\\n\t\t${1}\\n\\\n\t</noscript>\\n\\\nsnippet object\\n\\\n\t<object data=\\\"${1}\\\" type=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</object>${4}\\n\\\n# Embed QT Movie\\n\\\nsnippet movie\\n\\\n\t<object width=\\\"$2\\\" height=\\\"$3\\\" classid=\\\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\\\"\\n\\\n\t codebase=\\\"http://www.apple.com/qtactivex/qtplugin.cab\\\">\\n\\\n\t\t<param name=\\\"src\\\" value=\\\"$1\\\" />\\n\\\n\t\t<param name=\\\"controller\\\" value=\\\"$4\\\" />\\n\\\n\t\t<param name=\\\"autoplay\\\" value=\\\"$5\\\" />\\n\\\n\t\t<embed src=\\\"${1:movie.mov}\\\"\\n\\\n\t\t\twidth=\\\"${2:320}\\\" height=\\\"${3:240}\\\"\\n\\\n\t\t\tcontroller=\\\"${4:true}\\\" autoplay=\\\"${5:true}\\\"\\n\\\n\t\t\tscale=\\\"tofit\\\" cache=\\\"true\\\"\\n\\\n\t\t\tpluginspage=\\\"http://www.apple.com/quicktime/download/\\\" />\\n\\\n\t</object>${6}\\n\\\nsnippet ol\\n\\\n\t<ol>\\n\\\n\t\t${1}\\n\\\n\t</ol>\\n\\\nsnippet ol.\\n\\\n\t<ol class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol#\\n\\\n\t<ol id=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol+\\n\\\n\t<ol>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ol>\\n\\\nsnippet opt\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\nsnippet opt+\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\topt+${3}\\n\\\nsnippet optt\\n\\\n\t<option>${1}</option>\\n\\\nsnippet optgroup\\n\\\n\t<optgroup>\\n\\\n\t\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\t\topt+${3}\\n\\\n\t</optgroup>\\n\\\nsnippet output\\n\\\n\t<output>${1}</output>\\n\\\nsnippet p\\n\\\n\t<p>${1}</p>\\n\\\nsnippet param\\n\\\n\t<param name=\\\"${1}\\\" value=\\\"${2}\\\" />${3}\\n\\\nsnippet pre\\n\\\n\t<pre>\\n\\\n\t\t${1}\\n\\\n\t</pre>\\n\\\nsnippet progress\\n\\\n\t<progress>${1}</progress>\\n\\\nsnippet q\\n\\\n\t<q>${1}</q>\\n\\\nsnippet rp\\n\\\n\t<rp>${1}</rp>\\n\\\nsnippet rt\\n\\\n\t<rt>${1}</rt>\\n\\\nsnippet ruby\\n\\\n\t<ruby>\\n\\\n\t\t<rp><rt>${1}</rt></rp>\\n\\\n\t</ruby>\\n\\\nsnippet s\\n\\\n\t<s>${1}</s>\\n\\\nsnippet samp\\n\\\n\t<samp>\\n\\\n\t\t${1}\\n\\\n\t</samp>\\n\\\nsnippet script\\n\\\n\t<script type=\\\"text/javascript\\\" charset=\\\"utf-8\\\">\\n\\\n\t\t${1}\\n\\\n\t</script>\\n\\\nsnippet scriptsrc\\n\\\n\t<script src=\\\"${1}.js\\\" type=\\\"text/javascript\\\" charset=\\\"utf-8\\\"></script>\\n\\\nsnippet newscript\\n\\\n\t<script type=\\\"application/javascript\\\" charset=\\\"utf-8\\\">\\n\\\n\t\t${1}\\n\\\n\t</script>\\n\\\nsnippet newscriptsrc\\n\\\n\t<script src=\\\"${1}.js\\\" type=\\\"application/javascript\\\" charset=\\\"utf-8\\\"></script>\\n\\\nsnippet section\\n\\\n\t<section>\\n\\\n\t\t${1}\\n\\\n\t</section>\\n\\\nsnippet section.\\n\\\n\t<section class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet section#\\n\\\n\t<section id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet select\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t${3}\\n\\\n\t</select>\\n\\\nsnippet select.\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\" class=\\\"${3}>\\n\\\n\t\t${4}\\n\\\n\t</select>\\n\\\nsnippet select+\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t<option value=\\\"${3}\\\">${4:$3}</option>\\n\\\n\t\topt+${5}\\n\\\n\t</select>\\n\\\nsnippet small\\n\\\n\t<small>${1}</small>\\n\\\nsnippet source\\n\\\n\t<source src=\\\"${1}\\\" type=\\\"${2}\\\" media=\\\"${3}\\\" />\\n\\\nsnippet span\\n\\\n\t<span>${1}</span>\\n\\\nsnippet strong\\n\\\n\t<strong>${1}</strong>\\n\\\nsnippet style\\n\\\n\t<style type=\\\"text/css\\\" media=\\\"${1:all}\\\">\\n\\\n\t\t${2}\\n\\\n\t</style>\\n\\\nsnippet sub\\n\\\n\t<sub>${1}</sub>\\n\\\nsnippet summary\\n\\\n\t<summary>\\n\\\n\t\t${1}\\n\\\n\t</summary>\\n\\\nsnippet sup\\n\\\n\t<sup>${1}</sup>\\n\\\nsnippet table\\n\\\n\t<table border=\\\"${1:0}\\\">\\n\\\n\t\t${2}\\n\\\n\t</table>\\n\\\nsnippet table.\\n\\\n\t<table class=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet table#\\n\\\n\t<table id=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet tbody\\n\\\n\t<tbody>\\n\\\n\t\t${1}\\n\\\n\t</tbody>\\n\\\nsnippet td\\n\\\n\t<td>${1}</td>\\n\\\nsnippet td.\\n\\\n\t<td class=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td#\\n\\\n\t<td id=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td+\\n\\\n\t<td>${1}</td>\\n\\\n\ttd+${2}\\n\\\nsnippet textarea\\n\\\n\t<textarea name=\\\"${1}\\\" id=${2:$1} rows=\\\"${3:8}\\\" cols=\\\"${4:40}\\\">${5}</textarea>${6}\\n\\\nsnippet tfoot\\n\\\n\t<tfoot>\\n\\\n\t\t${1}\\n\\\n\t</tfoot>\\n\\\nsnippet th\\n\\\n\t<th>${1}</th>\\n\\\nsnippet th.\\n\\\n\t<th class=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th#\\n\\\n\t<th id=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th+\\n\\\n\t<th>${1}</th>\\n\\\n\tth+${2}\\n\\\nsnippet thead\\n\\\n\t<thead>\\n\\\n\t\t${1}\\n\\\n\t</thead>\\n\\\nsnippet time\\n\\\n\t<time datetime=\\\"${1}\\\" pubdate=\\\"${2:$1}>${3:$1}</time>\\n\\\nsnippet title\\n\\\n\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\nsnippet tr\\n\\\n\t<tr>\\n\\\n\t\t${1}\\n\\\n\t</tr>\\n\\\nsnippet tr+\\n\\\n\t<tr>\\n\\\n\t\t<td>${1}</td>\\n\\\n\t\ttd+${2}\\n\\\n\t</tr>\\n\\\nsnippet track\\n\\\n\t<track src=\\\"${1}\\\" srclang=\\\"${2}\\\" label=\\\"${3}\\\" default=\\\"${4:default}>${5}</track>${6}\\n\\\nsnippet ul\\n\\\n\t<ul>\\n\\\n\t\t${1}\\n\\\n\t</ul>\\n\\\nsnippet ul.\\n\\\n\t<ul class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul#\\n\\\n\t<ul id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul+\\n\\\n\t<ul>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ul>\\n\\\nsnippet var\\n\\\n\t<var>${1}</var>\\n\\\nsnippet video\\n\\\n\t<video src=\\\"${1} height=\\\"${2}\\\" width=\\\"${3}\\\" preload=\\\"${5:none}\\\" autoplay=\\\"${6:autoplay}>${7}</video>${8}\\n\\\nsnippet wbr\\n\\\n\t<wbr />${1}\\n\\\n\";\nexports.scope = \"html\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/html_elixir.js",
    "content": "ace.define(\"ace/snippets/html_elixir\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"html_elixir\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/html_ruby.js",
    "content": "ace.define(\"ace/snippets/html_ruby\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"html_ruby\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/ini.js",
    "content": "ace.define(\"ace/snippets/ini\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ini\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/io.js",
    "content": "ace.define(\"ace/snippets/io\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippets = [\n    {\n        \"content\": \"assertEquals(${1:expected}, ${2:expr})\",\n        \"name\": \"assertEquals\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ae\"\n    },\n    {\n        \"content\": \"${1:${2:newValue} := ${3:Object} }clone do(\\n\\t$0\\n)\",\n        \"name\": \"clone do\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"cdo\"\n    },\n    {\n        \"content\": \"docSlot(\\\"${1:slotName}\\\", \\\"${2:documentation}\\\")\",\n        \"name\": \"docSlot\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ds\"\n    },\n    {\n        \"content\": \"(${1:header,}\\n\\t${2:body}\\n)$0\",\n        \"keyEquivalent\": \"@(\",\n        \"name\": \"Indented Bracketed Line\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"(\"\n    },\n    {\n        \"content\": \"\\n\\t$0\\n\",\n        \"keyEquivalent\": \"\\r\",\n        \"name\": \"Special: Return Inside Empty Parenthesis\",\n        \"scope\": \"io meta.empty-parenthesis.io, io meta.comma-parenthesis.io\"\n    },\n    {\n        \"content\": \"${1:methodName} := method(${2:args,}\\n\\t$0\\n)\",\n        \"name\": \"method\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"m\"\n    },\n    {\n        \"content\": \"newSlot(\\\"${1:slotName}\\\", ${2:defaultValue}, \\\"${3:docString}\\\")$0\",\n        \"name\": \"newSlot\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ns\"\n    },\n    {\n        \"content\": \"${1:name} := Object clone do(\\n\\t$0\\n)\",\n        \"name\": \"Object clone do\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ocdo\"\n    },\n    {\n        \"content\": \"test${1:SomeFeature} := method(\\n\\t$0\\n)\",\n        \"name\": \"testMethod\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ts\"\n    },\n    {\n        \"content\": \"${1:Something}Test := ${2:UnitTest} clone do(\\n\\t$0\\n)\",\n        \"name\": \"UnitTest\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ut\"\n    }\n];\nexports.scope = \"io\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/jack.js",
    "content": "ace.define(\"ace/snippets/jack\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"jack\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/jade.js",
    "content": "ace.define(\"ace/snippets/jade\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"jade\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/java.js",
    "content": "ace.define(\"ace/snippets/java\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"## Access Modifiers\\n\\\nsnippet po\\n\\\n\tprotected\\n\\\nsnippet pu\\n\\\n\tpublic\\n\\\nsnippet pr\\n\\\n\tprivate\\n\\\n##\\n\\\n## Annotations\\n\\\nsnippet before\\n\\\n\t@Before\\n\\\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\\n\\\nsnippet mm\\n\\\n\t@ManyToMany\\n\\\n\t${1}\\n\\\nsnippet mo\\n\\\n\t@ManyToOne\\n\\\n\t${1}\\n\\\nsnippet om\\n\\\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\\\n\t${2}\\n\\\nsnippet oo\\n\\\n\t@OneToOne\\n\\\n\t${1}\\n\\\n##\\n\\\n## Basic Java packages and import\\n\\\nsnippet im\\n\\\n\timport\\n\\\nsnippet j.b\\n\\\n\tjava.beans.\\n\\\nsnippet j.i\\n\\\n\tjava.io.\\n\\\nsnippet j.m\\n\\\n\tjava.math.\\n\\\nsnippet j.n\\n\\\n\tjava.net.\\n\\\nsnippet j.u\\n\\\n\tjava.util.\\n\\\n##\\n\\\n## Class\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\n\\\nsnippet in\\n\\\n\tinterface ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2:extends Parent}${3}\\n\\\nsnippet tc\\n\\\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n\\\n##\\n\\\n## Class Enhancements\\n\\\nsnippet ext\\n\\\n\textends \\n\\\nsnippet imp\\n\\\n\timplements\\n\\\n##\\n\\\n## Comments\\n\\\nsnippet /*\\n\\\n\t/*\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n##\\n\\\n## Constants\\n\\\nsnippet co\\n\\\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\\n\\\nsnippet cos\\n\\\n\tstatic public final String ${1:var} = \\\"${2}\\\";${3}\\n\\\n##\\n\\\n## Control Statements\\n\\\nsnippet case\\n\\\n\tcase ${1}:\\n\\\n\t\t${2}\\n\\\nsnippet def\\n\\\n\tdefault:\\n\\\n\t\t${2}\\n\\\nsnippet el\\n\\\n\telse\\n\\\nsnippet elif\\n\\\n\telse if (${1}) ${2}\\n\\\nsnippet if\\n\\\n\tif (${1}) ${2}\\n\\\nsnippet sw\\n\\\n\tswitch (${1}) {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\n##\\n\\\n## Create a Method\\n\\\nsnippet m\\n\\\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n\\\n##\\n\\\n## Create a Variable\\n\\\nsnippet v\\n\\\n\t${1:String} ${2:var}${3: = null}${4};${5}\\n\\\n##\\n\\\n## Enhancements to Methods, variables, classes, etc.\\n\\\nsnippet ab\\n\\\n\tabstract\\n\\\nsnippet fi\\n\\\n\tfinal\\n\\\nsnippet st\\n\\\n\tstatic\\n\\\nsnippet sy\\n\\\n\tsynchronized\\n\\\n##\\n\\\n## Error Methods\\n\\\nsnippet err\\n\\\n\tSystem.err.print(\\\"${1:Message}\\\");\\n\\\nsnippet errf\\n\\\n\tSystem.err.printf(\\\"${1:Message}\\\", ${2:exception});\\n\\\nsnippet errln\\n\\\n\tSystem.err.println(\\\"${1:Message}\\\");\\n\\\n##\\n\\\n## Exception Handling\\n\\\nsnippet as\\n\\\n\tassert ${1:test} : \\\"${2:Failure message}\\\";${3}\\n\\\nsnippet ca\\n\\\n\tcatch(${1:Exception} ${2:e}) ${3}\\n\\\nsnippet thr\\n\\\n\tthrow\\n\\\nsnippet ths\\n\\\n\tthrows\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch(${1:Exception} ${2:e}) {\\n\\\n\t}\\n\\\nsnippet tryf\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch(${1:Exception} ${2:e}) {\\n\\\n\t} finally {\\n\\\n\t}\\n\\\n##\\n\\\n## Find Methods\\n\\\nsnippet findall\\n\\\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\n\\\nsnippet findbyid\\n\\\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n\\\n##\\n\\\n## Javadocs\\n\\\nsnippet /**\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\nsnippet @au\\n\\\n\t@author `system(\\\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\\\":\\\\\\\" -f5 | cut -d \\\\\\\",\\\\\\\" -f1\\\")`\\n\\\nsnippet @br\\n\\\n\t@brief ${1:Description}\\n\\\nsnippet @fi\\n\\\n\t@file ${1:`Filename()`}.java\\n\\\nsnippet @pa\\n\\\n\t@param ${1:param}\\n\\\nsnippet @re\\n\\\n\t@return ${1:param}\\n\\\n##\\n\\\n## Logger Methods\\n\\\nsnippet debug\\n\\\n\tLogger.debug(${1:param});${2}\\n\\\nsnippet error\\n\\\n\tLogger.error(${1:param});${2}\\n\\\nsnippet info\\n\\\n\tLogger.info(${1:param});${2}\\n\\\nsnippet warn\\n\\\n\tLogger.warn(${1:param});${2}\\n\\\n##\\n\\\n## Loops\\n\\\nsnippet enfor\\n\\\n\tfor (${1} : ${2}) ${3}\\n\\\nsnippet for\\n\\\n\tfor (${1}; ${2}; ${3}) ${4}\\n\\\nsnippet wh\\n\\\n\twhile (${1}) ${2}\\n\\\n##\\n\\\n## Main method\\n\\\nsnippet main\\n\\\n\tpublic static void main (String[] args) {\\n\\\n\t\t${1:/* code */}\\n\\\n\t}\\n\\\n##\\n\\\n## Print Methods\\n\\\nsnippet print\\n\\\n\tSystem.out.print(\\\"${1:Message}\\\");\\n\\\nsnippet printf\\n\\\n\tSystem.out.printf(\\\"${1:Message}\\\", ${2:args});\\n\\\nsnippet println\\n\\\n\tSystem.out.println(${1});\\n\\\n##\\n\\\n## Render Methods\\n\\\nsnippet ren\\n\\\n\trender(${1:param});${2}\\n\\\nsnippet rena\\n\\\n\trenderArgs.put(\\\"${1}\\\", ${2});${3}\\n\\\nsnippet renb\\n\\\n\trenderBinary(${1:param});${2}\\n\\\nsnippet renj\\n\\\n\trenderJSON(${1:param});${2}\\n\\\nsnippet renx\\n\\\n\trenderXml(${1:param});${2}\\n\\\n##\\n\\\n## Setter and Getter Methods\\n\\\nsnippet set\\n\\\n\t${1:public} void set${3:}(${2:String} ${4:}){\\n\\\n\t\tthis.$4 = $4;\\n\\\n\t}\\n\\\nsnippet get\\n\\\n\t${1:public} ${2:String} get${3:}(){\\n\\\n\t\treturn this.${4:};\\n\\\n\t}\\n\\\n##\\n\\\n## Terminate Methods or Loops\\n\\\nsnippet re\\n\\\n\treturn\\n\\\nsnippet br\\n\\\n\tbreak;\\n\\\n##\\n\\\n## Test Methods\\n\\\nsnippet t\\n\\\n\tpublic void test${1:Name}() throws Exception {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet test\\n\\\n\t@Test\\n\\\n\tpublic void test${1:Name}() throws Exception {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\n##\\n\\\n## Utils\\n\\\nsnippet Sc\\n\\\n\tScanner\\n\\\n##\\n\\\n## Miscellaneous\\n\\\nsnippet action\\n\\\n\tpublic static void ${1:index}(${2:args}) { ${3} }\\n\\\nsnippet rnf\\n\\\n\tnotFound(${1:param});${2}\\n\\\nsnippet rnfin\\n\\\n\tnotFoundIfNull(${1:param});${2}\\n\\\nsnippet rr\\n\\\n\tredirect(${1:param});${2}\\n\\\nsnippet ru\\n\\\n\tunauthorized(${1:param});${2}\\n\\\nsnippet unless\\n\\\n\t(unless=${1:param});${2}\\n\\\n\";\nexports.scope = \"java\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/javascript.js",
    "content": "ace.define(\"ace/snippets/javascript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Prototype\\n\\\nsnippet proto\\n\\\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\\n\\\n\t\t${4:// body...}\\n\\\n\t};\\n\\\n# Function\\n\\\nsnippet fun\\n\\\n\tfunction ${1?:function_name}(${2:argument}) {\\n\\\n\t\t${3:// body...}\\n\\\n\t}\\n\\\n# Anonymous Function\\n\\\nregex /((=)\\\\s*|(:)\\\\s*|(\\\\()|\\\\b)/f/(\\\\))?/\\n\\\nsnippet f\\n\\\n\tfunction${M1?: ${1:functionName}}($2) {\\n\\\n\t\t${0:$TM_SELECTED_TEXT}\\n\\\n\t}${M2?;}${M3?,}${M4?)}\\n\\\n# Immediate function\\n\\\ntrigger \\\\(?f\\\\(\\n\\\nendTrigger \\\\)?\\n\\\nsnippet f(\\n\\\n\t(function(${1}) {\\n\\\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\\n\\\n\t}(${1}));\\n\\\n# if\\n\\\nsnippet if\\n\\\n\tif (${1:true}) {\\n\\\n\t\t${0}\\n\\\n\t}\\n\\\n# if ... else\\n\\\nsnippet ife\\n\\\n\tif (${1:true}) {\\n\\\n\t\t${2}\\n\\\n\t} else {\\n\\\n\t\t${0}\\n\\\n\t}\\n\\\n# tertiary conditional\\n\\\nsnippet ter\\n\\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\n\\\n# switch\\n\\\nsnippet switch\\n\\\n\tswitch (${1:expression}) {\\n\\\n\t\tcase '${3:case}':\\n\\\n\t\t\t${4:// code}\\n\\\n\t\t\tbreak;\\n\\\n\t\t${5}\\n\\\n\t\tdefault:\\n\\\n\t\t\t${2:// code}\\n\\\n\t}\\n\\\n# case\\n\\\nsnippet case\\n\\\n\tcase '${1:case}':\\n\\\n\t\t${2:// code}\\n\\\n\t\tbreak;\\n\\\n\t${3}\\n\\\n\\n\\\n# while (...) {...}\\n\\\nsnippet wh\\n\\\n\twhile (${1:/* condition */}) {\\n\\\n\t\t${0:/* code */}\\n\\\n\t}\\n\\\n# try\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${0:/* code */}\\n\\\n\t} catch (e) {}\\n\\\n# do...while\\n\\\nsnippet do\\n\\\n\tdo {\\n\\\n\t\t${2:/* code */}\\n\\\n\t} while (${1:/* condition */});\\n\\\n# Object Method\\n\\\nsnippet :f\\n\\\nregex /([,{[])|^\\\\s*/:f/\\n\\\n\t${1:method_name}: function(${2:attribute}) {\\n\\\n\t\t${0}\\n\\\n\t}${3:,}\\n\\\n# setTimeout function\\n\\\nsnippet setTimeout\\n\\\nregex /\\\\b/st|timeout|setTimeo?u?t?/\\n\\\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\\n\\\n# Get Elements\\n\\\nsnippet gett\\n\\\n\tgetElementsBy${1:TagName}('${2}')${3}\\n\\\n# Get Element\\n\\\nsnippet get\\n\\\n\tgetElementBy${1:Id}('${2}')${3}\\n\\\n# console.log (Firebug)\\n\\\nsnippet cl\\n\\\n\tconsole.log(${1});\\n\\\n# return\\n\\\nsnippet ret\\n\\\n\treturn ${1:result}\\n\\\n# for (property in object ) { ... }\\n\\\nsnippet fori\\n\\\n\tfor (var ${1:prop} in ${2:Things}) {\\n\\\n\t\t${0:$2[$1]}\\n\\\n\t}\\n\\\n# hasOwnProperty\\n\\\nsnippet has\\n\\\n\thasOwnProperty(${1})\\n\\\n# docstring\\n\\\nsnippet /**\\n\\\n\t/**\\n\\\n\t * ${1:description}\\n\\\n\t *\\n\\\n\t */\\n\\\nsnippet @par\\n\\\nregex /^\\\\s*\\\\*\\\\s*/@(para?m?)?/\\n\\\n\t@param {${1:type}} ${2:name} ${3:description}\\n\\\nsnippet @ret\\n\\\n\t@return {${1:type}} ${2:description}\\n\\\n# JSON.parse\\n\\\nsnippet jsonp\\n\\\n\tJSON.parse(${1:jstr});\\n\\\n# JSON.stringify\\n\\\nsnippet jsons\\n\\\n\tJSON.stringify(${1:object});\\n\\\n# self-defining function\\n\\\nsnippet sdf\\n\\\n\tvar ${1:function_name} = function(${2:argument}) {\\n\\\n\t\t${3:// initial code ...}\\n\\\n\\n\\\n\t\t$1 = function($2) {\\n\\\n\t\t\t${4:// main code}\\n\\\n\t\t};\\n\\\n\t}\\n\\\n# singleton\\n\\\nsnippet sing\\n\\\n\tfunction ${1:Singleton} (${2:argument}) {\\n\\\n\t\t// the cached instance\\n\\\n\t\tvar instance;\\n\\\n\\n\\\n\t\t// rewrite the constructor\\n\\\n\t\t$1 = function $1($2) {\\n\\\n\t\t\treturn instance;\\n\\\n\t\t};\\n\\\n\t\t\\n\\\n\t\t// carry over the prototype properties\\n\\\n\t\t$1.prototype = this;\\n\\\n\\n\\\n\t\t// the instance\\n\\\n\t\tinstance = new $1();\\n\\\n\\n\\\n\t\t// reset the constructor pointer\\n\\\n\t\tinstance.constructor = $1;\\n\\\n\\n\\\n\t\t${3:// code ...}\\n\\\n\\n\\\n\t\treturn instance;\\n\\\n\t}\\n\\\n# class\\n\\\nsnippet class\\n\\\nregex /^\\\\s*/clas{0,2}/\\n\\\n\tvar ${1:class} = function(${20}) {\\n\\\n\t\t$40$0\\n\\\n\t};\\n\\\n\t\\n\\\n\t(function() {\\n\\\n\t\t${60:this.prop = \\\"\\\"}\\n\\\n\t}).call(${1:class}.prototype);\\n\\\n\t\\n\\\n\texports.${1:class} = ${1:class};\\n\\\n# \\n\\\nsnippet for-\\n\\\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\\n\\\n\t\t${0:${2:Things}[${1:i}];}\\n\\\n\t}\\n\\\n# for (...) {...}\\n\\\nsnippet for\\n\\\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\\n\\\n\t\t${3:$2[$1]}$0\\n\\\n\t}\\n\\\n# for (...) {...} (Improved Native For-Loop)\\n\\\nsnippet forr\\n\\\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\\n\\\n\t\t${3:$2[$1]}$0\\n\\\n\t}\\n\\\n\\n\\\n\\n\\\n#modules\\n\\\nsnippet def\\n\\\n\tdefine(function(require, exports, module) {\\n\\\n\t\\\"use strict\\\";\\n\\\n\tvar ${1/.*\\\\///} = require(\\\"${1}\\\");\\n\\\n\t\\n\\\n\t$TM_SELECTED_TEXT\\n\\\n\t});\\n\\\nsnippet req\\n\\\nguard ^\\\\s*\\n\\\n\tvar ${1/.*\\\\///} = require(\\\"${1}\\\");\\n\\\n\t$0\\n\\\nsnippet requ\\n\\\nguard ^\\\\s*\\n\\\n\tvar ${1/.*\\\\/(.)/\\\\u$1/} = require(\\\"${1}\\\").${1/.*\\\\/(.)/\\\\u$1/};\\n\\\n\t$0\\n\\\n\";\nexports.scope = \"javascript\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/json.js",
    "content": "ace.define(\"ace/snippets/json\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"json\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/jsoniq.js",
    "content": "ace.define(\"ace/snippets/jsoniq\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet for\\n\\\n\tfor $${1:item} in ${2:expr}\\n\\\nsnippet return\\n\\\n\treturn ${1:expr}\\n\\\nsnippet import\\n\\\n\timport module namespace ${1:ns} = \\\"${2:http://www.example.com/}\\\";\\n\\\nsnippet some\\n\\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\n\\\nsnippet every\\n\\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\n\\\nsnippet if\\n\\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\n\\\nsnippet switch\\n\\\n\tswitch(${1:\\\"foo\\\"})\\n\\\n\tcase ${2:\\\"foo\\\"}\\n\\\n\treturn ${3:true}\\n\\\n\tdefault return ${4:false}\\n\\\nsnippet try\\n\\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\n\\\nsnippet tumbling\\n\\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\\\n\tstart at $${3:start} when ${4:expr}\\n\\\n\tend at $${5:end} when ${6:expr}\\n\\\n\treturn ${7:expr}\\n\\\nsnippet sliding\\n\\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\\\n\tstart at $${3:start} when ${4:expr}\\n\\\n\tend at $${5:end} when ${6:expr}\\n\\\n\treturn ${7:expr}\\n\\\nsnippet let\\n\\\n\tlet $${1:varname} := ${2:expr}\\n\\\nsnippet group\\n\\\n\tgroup by $${1:varname} := ${2:expr}\\n\\\nsnippet order\\n\\\n\torder by ${1:expr} ${2:descending}\\n\\\nsnippet stable\\n\\\n\tstable order by ${1:expr}\\n\\\nsnippet count\\n\\\n\tcount $${1:varname}\\n\\\nsnippet ordered\\n\\\n\tordered { ${1:expr} }\\n\\\nsnippet unordered\\n\\\n\tunordered { ${1:expr} }\\n\\\nsnippet treat \\n\\\n\ttreat as ${1:expr}\\n\\\nsnippet castable\\n\\\n\tcastable as ${1:atomicType}\\n\\\nsnippet cast\\n\\\n\tcast as ${1:atomicType}\\n\\\nsnippet typeswitch\\n\\\n\ttypeswitch(${1:expr})\\n\\\n\tcase ${2:type}  return ${3:expr}\\n\\\n\tdefault return ${4:expr}\\n\\\nsnippet var\\n\\\n\tdeclare variable $${1:varname} := ${2:expr};\\n\\\nsnippet fn\\n\\\n\tdeclare function ${1:ns}:${2:name}(){\\n\\\n\t${3:expr}\\n\\\n\t};\\n\\\nsnippet module\\n\\\n\tmodule namespace ${1:ns} = \\\"${2:http://www.example.com}\\\";\\n\\\n\";\nexports.scope = \"jsoniq\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/jsp.js",
    "content": "ace.define(\"ace/snippets/jsp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet @page\\n\\\n\t<%@page contentType=\\\"text/html\\\" pageEncoding=\\\"UTF-8\\\"%>\\n\\\nsnippet jstl\\n\\\n\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/core\\\" prefix=\\\"c\\\" %>\\n\\\n\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/functions\\\" prefix=\\\"fn\\\" %>\\n\\\nsnippet jstl:c\\n\\\n\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/core\\\" prefix=\\\"c\\\" %>\\n\\\nsnippet jstl:fn\\n\\\n\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/functions\\\" prefix=\\\"fn\\\" %>\\n\\\nsnippet cpath\\n\\\n\t${pageContext.request.contextPath}\\n\\\nsnippet cout\\n\\\n\t<c:out value=\\\"${1}\\\" default=\\\"${2}\\\" />\\n\\\nsnippet cset\\n\\\n\t<c:set var=\\\"${1}\\\" value=\\\"${2}\\\" />\\n\\\nsnippet cremove\\n\\\n\t<c:remove var=\\\"${1}\\\" scope=\\\"${2:page}\\\" />\\n\\\nsnippet ccatch\\n\\\n\t<c:catch var=\\\"${1}\\\" />\\n\\\nsnippet cif\\n\\\n\t<c:if test=\\\"${${1}}\\\">\\n\\\n\t\t${2}\\n\\\n\t</c:if>\\n\\\nsnippet cchoose\\n\\\n\t<c:choose>\\n\\\n\t\t${1}\\n\\\n\t</c:choose>\\n\\\nsnippet cwhen\\n\\\n\t<c:when test=\\\"${${1}}\\\">\\n\\\n\t\t${2}\\n\\\n\t</c:when>\\n\\\nsnippet cother\\n\\\n\t<c:otherwise>\\n\\\n\t\t${1}\\n\\\n\t</c:otherwise>\\n\\\nsnippet cfore\\n\\\n\t<c:forEach items=\\\"${${1}}\\\" var=\\\"${2}\\\" varStatus=\\\"${3}\\\">\\n\\\n\t\t${4:<c:out value=\\\"$2\\\" />}\\n\\\n\t</c:forEach>\\n\\\nsnippet cfort\\n\\\n\t<c:set var=\\\"${1}\\\">${2:item1,item2,item3}</c:set>\\n\\\n\t<c:forTokens var=\\\"${3}\\\" items=\\\"${$1}\\\" delims=\\\"${4:,}\\\">\\n\\\n\t\t${5:<c:out value=\\\"$3\\\" />}\\n\\\n\t</c:forTokens>\\n\\\nsnippet cparam\\n\\\n\t<c:param name=\\\"${1}\\\" value=\\\"${2}\\\" />\\n\\\nsnippet cparam+\\n\\\n\t<c:param name=\\\"${1}\\\" value=\\\"${2}\\\" />\\n\\\n\tcparam+${3}\\n\\\nsnippet cimport\\n\\\n\t<c:import url=\\\"${1}\\\" />\\n\\\nsnippet cimport+\\n\\\n\t<c:import url=\\\"${1}\\\">\\n\\\n\t\t<c:param name=\\\"${2}\\\" value=\\\"${3}\\\" />\\n\\\n\t\tcparam+${4}\\n\\\n\t</c:import>\\n\\\nsnippet curl\\n\\\n\t<c:url value=\\\"${1}\\\" var=\\\"${2}\\\" />\\n\\\n\t<a href=\\\"${$2}\\\">${3}</a>\\n\\\nsnippet curl+\\n\\\n\t<c:url value=\\\"${1}\\\" var=\\\"${2}\\\">\\n\\\n\t\t<c:param name=\\\"${4}\\\" value=\\\"${5}\\\" />\\n\\\n\t\tcparam+${6}\\n\\\n\t</c:url>\\n\\\n\t<a href=\\\"${$2}\\\">${3}</a>\\n\\\nsnippet credirect\\n\\\n\t<c:redirect url=\\\"${1}\\\" />\\n\\\nsnippet contains\\n\\\n\t${fn:contains(${1:string}, ${2:substr})}\\n\\\nsnippet contains:i\\n\\\n\t${fn:containsIgnoreCase(${1:string}, ${2:substr})}\\n\\\nsnippet endswith\\n\\\n\t${fn:endsWith(${1:string}, ${2:suffix})}\\n\\\nsnippet escape\\n\\\n\t${fn:escapeXml(${1:string})}\\n\\\nsnippet indexof\\n\\\n\t${fn:indexOf(${1:string}, ${2:substr})}\\n\\\nsnippet join\\n\\\n\t${fn:join(${1:collection}, ${2:delims})}\\n\\\nsnippet length\\n\\\n\t${fn:length(${1:collection_or_string})}\\n\\\nsnippet replace\\n\\\n\t${fn:replace(${1:string}, ${2:substr}, ${3:replace})}\\n\\\nsnippet split\\n\\\n\t${fn:split(${1:string}, ${2:delims})}\\n\\\nsnippet startswith\\n\\\n\t${fn:startsWith(${1:string}, ${2:prefix})}\\n\\\nsnippet substr\\n\\\n\t${fn:substring(${1:string}, ${2:begin}, ${3:end})}\\n\\\nsnippet substr:a\\n\\\n\t${fn:substringAfter(${1:string}, ${2:substr})}\\n\\\nsnippet substr:b\\n\\\n\t${fn:substringBefore(${1:string}, ${2:substr})}\\n\\\nsnippet lc\\n\\\n\t${fn:toLowerCase(${1:string})}\\n\\\nsnippet uc\\n\\\n\t${fn:toUpperCase(${1:string})}\\n\\\nsnippet trim\\n\\\n\t${fn:trim(${1:string})}\\n\\\n\";\nexports.scope = \"jsp\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/jssm.js",
    "content": "ace.define(\"ace/snippets/jssm\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/jsx.js",
    "content": "ace.define(\"ace/snippets/jsx\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"jsx\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/julia.js",
    "content": "ace.define(\"ace/snippets/julia\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"julia\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/kotlin.js",
    "content": "ace.define(\"ace/snippets/kotlin\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/latex.js",
    "content": "ace.define(\"ace/snippets/latex\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"latex\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/less.js",
    "content": "ace.define(\"ace/snippets/less\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"less\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/liquid.js",
    "content": "ace.define(\"ace/snippets/liquid\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"\\n\\\n# liquid specific snippets\\n\\\nsnippet ife\\n\\\n\t{% if ${1:condition} %}\\n\\\n\\n\\\n\t{% else %}\\n\\\n\\n\\\n\t{% endif %}\\n\\\nsnippet if\\n\\\n\t{% if ${1:condition} %}\\n\\\n\t\t\\n\\\n\t{% endif %}\\n\\\nsnippet for\\n\\\n\t{% for in ${1:iterator} %}\\n\\\n\\n\\\n\t{% endfor %}\\n\\\nsnippet capture\\n\\\n\t{% capture ${1} %}\\n\\\n\\n\\\n\t{% endcapture %}\\n\\\nsnippet comment\\n\\\n\t{% comment %}\\n\\\n\t  ${1:comment}\\n\\\n\t{% endcomment %}\\n\\\n\\n\\\n# Include html.snippets\\n\\\n# Some useful Unicode entities\\n\\\n# Non-Breaking Space\\n\\\nsnippet nbs\\n\\\n\t&nbsp;\\n\\\n# ←\\n\\\nsnippet left\\n\\\n\t&#x2190;\\n\\\n# →\\n\\\nsnippet right\\n\\\n\t&#x2192;\\n\\\n# ↑\\n\\\nsnippet up\\n\\\n\t&#x2191;\\n\\\n# ↓\\n\\\nsnippet down\\n\\\n\t&#x2193;\\n\\\n# ↩\\n\\\nsnippet return\\n\\\n\t&#x21A9;\\n\\\n# ⇤\\n\\\nsnippet backtab\\n\\\n\t&#x21E4;\\n\\\n# ⇥\\n\\\nsnippet tab\\n\\\n\t&#x21E5;\\n\\\n# ⇧\\n\\\nsnippet shift\\n\\\n\t&#x21E7;\\n\\\n# ⌃\\n\\\nsnippet ctrl\\n\\\n\t&#x2303;\\n\\\n# ⌅\\n\\\nsnippet enter\\n\\\n\t&#x2305;\\n\\\n# ⌘\\n\\\nsnippet cmd\\n\\\n\t&#x2318;\\n\\\n# ⌥\\n\\\nsnippet option\\n\\\n\t&#x2325;\\n\\\n# ⌦\\n\\\nsnippet delete\\n\\\n\t&#x2326;\\n\\\n# ⌫\\n\\\nsnippet backspace\\n\\\n\t&#x232B;\\n\\\n# ⎋\\n\\\nsnippet esc\\n\\\n\t&#x238B;\\n\\\n# Generic Doctype\\n\\\nsnippet doctype HTML 4.01 Strict\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\nsnippet doctype HTML 4.01 Transitional\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\nsnippet doctype HTML 5\\n\\\n\t<!DOCTYPE HTML>\\n\\\nsnippet doctype XHTML 1.0 Frameset\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Strict\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Transitional\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\nsnippet doctype XHTML 1.1\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# HTML Doctype 4.01 Strict\\n\\\nsnippet docts\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\n# HTML Doctype 4.01 Transitional\\n\\\nsnippet doct\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\n# HTML Doctype 5\\n\\\nsnippet doct5\\n\\\n\t<!DOCTYPE html>\\n\\\n# XHTML Doctype 1.0 Frameset\\n\\\nsnippet docxf\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Frameset//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Strict\\n\\\nsnippet docxs\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Transitional\\n\\\nsnippet docxt\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\n# XHTML Doctype 1.1\\n\\\nsnippet docx\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# html5shiv\\n\\\nsnippet html5shiv\\n\\\n\t<!--[if lte IE 8]>\\n\\\n\t\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\\\"></script>\\n\\\n\t<![endif]-->\\n\\\nsnippet html5printshiv\\n\\\n\t<!--[if lte IE 8]>\\n\\\n\t\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\\\"></script>\\n\\\n\t<![endif]-->\\n\\\n# Attributes\\n\\\nsnippet attr\\n\\\n\t${1:attribute}=\\\"${2:property}\\\"\\n\\\nsnippet attr+\\n\\\n\t${1:attribute}=\\\"${2:property}\\\" attr+${3}\\n\\\nsnippet .\\n\\\n\tclass=\\\"${1}\\\"${2}\\n\\\nsnippet #\\n\\\n\tid=\\\"${1}\\\"${2}\\n\\\nsnippet alt\\n\\\n\talt=\\\"${1}\\\"${2}\\n\\\nsnippet charset\\n\\\n\tcharset=\\\"${1:utf-8}\\\"${2}\\n\\\nsnippet data\\n\\\n\tdata-${1}=\\\"${2:$1}\\\"${3}\\n\\\nsnippet for\\n\\\n\tfor=\\\"${1}\\\"${2}\\n\\\nsnippet height\\n\\\n\theight=\\\"${1}\\\"${2}\\n\\\nsnippet href\\n\\\n\thref=\\\"${1:#}\\\"${2}\\n\\\nsnippet lang\\n\\\n\tlang=\\\"${1:en}\\\"${2}\\n\\\nsnippet media\\n\\\n\tmedia=\\\"${1}\\\"${2}\\n\\\nsnippet name\\n\\\n\tname=\\\"${1}\\\"${2}\\n\\\nsnippet rel\\n\\\n\trel=\\\"${1}\\\"${2}\\n\\\nsnippet scope\\n\\\n\tscope=\\\"${1:row}\\\"${2}\\n\\\nsnippet src\\n\\\n\tsrc=\\\"${1}\\\"${2}\\n\\\nsnippet title=\\n\\\n\ttitle=\\\"${1}\\\"${2}\\n\\\nsnippet type\\n\\\n\ttype=\\\"${1}\\\"${2}\\n\\\nsnippet value\\n\\\n\tvalue=\\\"${1}\\\"${2}\\n\\\nsnippet width\\n\\\n\twidth=\\\"${1}\\\"${2}\\n\\\n# Elements\\n\\\nsnippet a\\n\\\n\t<a href=\\\"${1:#}\\\">${2:$1}</a>\\n\\\nsnippet a.\\n\\\n\t<a class=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a#\\n\\\n\t<a id=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a:ext\\n\\\n\t<a href=\\\"http://${1:example.com}\\\">${2:$1}</a>\\n\\\nsnippet a:mail\\n\\\n\t<a href=\\\"mailto:${1:joe@example.com}?subject=${2:feedback}\\\">${3:email me}</a>\\n\\\nsnippet abbr\\n\\\n\t<abbr title=\\\"${1}\\\">${2}</abbr>\\n\\\nsnippet address\\n\\\n\t<address>\\n\\\n\t\t${1}\\n\\\n\t</address>\\n\\\nsnippet area\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\nsnippet area+\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\n\tarea+${5}\\n\\\nsnippet area:c\\n\\\n\t<area shape=\\\"circle\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:d\\n\\\n\t<area shape=\\\"default\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:p\\n\\\n\t<area shape=\\\"poly\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:r\\n\\\n\t<area shape=\\\"rect\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet article\\n\\\n\t<article>\\n\\\n\t\t${1}\\n\\\n\t</article>\\n\\\nsnippet article.\\n\\\n\t<article class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet article#\\n\\\n\t<article id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet aside\\n\\\n\t<aside>\\n\\\n\t\t${1}\\n\\\n\t</aside>\\n\\\nsnippet aside.\\n\\\n\t<aside class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet aside#\\n\\\n\t<aside id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet audio\\n\\\n\t<audio src=\\\"${1}>${2}</audio>\\n\\\nsnippet b\\n\\\n\t<b>${1}</b>\\n\\\nsnippet base\\n\\\n\t<base href=\\\"${1}\\\" target=\\\"${2}\\\" />\\n\\\nsnippet bdi\\n\\\n\t<bdi>${1}</bdo>\\n\\\nsnippet bdo\\n\\\n\t<bdo dir=\\\"${1}\\\">${2}</bdo>\\n\\\nsnippet bdo:l\\n\\\n\t<bdo dir=\\\"ltr\\\">${1}</bdo>\\n\\\nsnippet bdo:r\\n\\\n\t<bdo dir=\\\"rtl\\\">${1}</bdo>\\n\\\nsnippet blockquote\\n\\\n\t<blockquote>\\n\\\n\t\t${1}\\n\\\n\t</blockquote>\\n\\\nsnippet body\\n\\\n\t<body>\\n\\\n\t\t${1}\\n\\\n\t</body>\\n\\\nsnippet br\\n\\\n\t<br />${1}\\n\\\nsnippet button\\n\\\n\t<button type=\\\"${1:submit}\\\">${2}</button>\\n\\\nsnippet button.\\n\\\n\t<button class=\\\"${1:button}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button#\\n\\\n\t<button id=\\\"${1}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button:s\\n\\\n\t<button type=\\\"submit\\\">${1}</button>\\n\\\nsnippet button:r\\n\\\n\t<button type=\\\"reset\\\">${1}</button>\\n\\\nsnippet canvas\\n\\\n\t<canvas>\\n\\\n\t\t${1}\\n\\\n\t</canvas>\\n\\\nsnippet caption\\n\\\n\t<caption>${1}</caption>\\n\\\nsnippet cite\\n\\\n\t<cite>${1}</cite>\\n\\\nsnippet code\\n\\\n\t<code>${1}</code>\\n\\\nsnippet col\\n\\\n\t<col />${1}\\n\\\nsnippet col+\\n\\\n\t<col />\\n\\\n\tcol+${1}\\n\\\nsnippet colgroup\\n\\\n\t<colgroup>\\n\\\n\t\t${1}\\n\\\n\t</colgroup>\\n\\\nsnippet colgroup+\\n\\\n\t<colgroup>\\n\\\n\t\t<col />\\n\\\n\t\tcol+${1}\\n\\\n\t</colgroup>\\n\\\nsnippet command\\n\\\n\t<command type=\\\"command\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:c\\n\\\n\t<command type=\\\"checkbox\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:r\\n\\\n\t<command type=\\\"radio\\\" radiogroup=\\\"${1}\\\" label=\\\"${2}\\\" icon=\\\"${3}\\\" />\\n\\\nsnippet datagrid\\n\\\n\t<datagrid>\\n\\\n\t\t${1}\\n\\\n\t</datagrid>\\n\\\nsnippet datalist\\n\\\n\t<datalist>\\n\\\n\t\t${1}\\n\\\n\t</datalist>\\n\\\nsnippet datatemplate\\n\\\n\t<datatemplate>\\n\\\n\t\t${1}\\n\\\n\t</datatemplate>\\n\\\nsnippet dd\\n\\\n\t<dd>${1}</dd>\\n\\\nsnippet dd.\\n\\\n\t<dd class=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet dd#\\n\\\n\t<dd id=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet del\\n\\\n\t<del>${1}</del>\\n\\\nsnippet details\\n\\\n\t<details>${1}</details>\\n\\\nsnippet dfn\\n\\\n\t<dfn>${1}</dfn>\\n\\\nsnippet dialog\\n\\\n\t<dialog>\\n\\\n\t\t${1}\\n\\\n\t</dialog>\\n\\\nsnippet div\\n\\\n\t<div>\\n\\\n\t\t${1}\\n\\\n\t</div>\\n\\\nsnippet div.\\n\\\n\t<div class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet div#\\n\\\n\t<div id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet dl\\n\\\n\t<dl>\\n\\\n\t\t${1}\\n\\\n\t</dl>\\n\\\nsnippet dl.\\n\\\n\t<dl class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl#\\n\\\n\t<dl id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl+\\n\\\n\t<dl>\\n\\\n\t\t<dt>${1}</dt>\\n\\\n\t\t<dd>${2}</dd>\\n\\\n\t\tdt+${3}\\n\\\n\t</dl>\\n\\\nsnippet dt\\n\\\n\t<dt>${1}</dt>\\n\\\nsnippet dt.\\n\\\n\t<dt class=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt#\\n\\\n\t<dt id=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt+\\n\\\n\t<dt>${1}</dt>\\n\\\n\t<dd>${2}</dd>\\n\\\n\tdt+${3}\\n\\\nsnippet em\\n\\\n\t<em>${1}</em>\\n\\\nsnippet embed\\n\\\n\t<embed src=${1} type=\\\"${2} />\\n\\\nsnippet fieldset\\n\\\n\t<fieldset>\\n\\\n\t\t${1}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset.\\n\\\n\t<fieldset class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset#\\n\\\n\t<fieldset id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset+\\n\\\n\t<fieldset>\\n\\\n\t\t<legend><span>${1}</span></legend>\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\n\tfieldset+${3}\\n\\\nsnippet figcaption\\n\\\n\t<figcaption>${1}</figcaption>\\n\\\nsnippet figure\\n\\\n\t<figure>${1}</figure>\\n\\\nsnippet footer\\n\\\n\t<footer>\\n\\\n\t\t${1}\\n\\\n\t</footer>\\n\\\nsnippet footer.\\n\\\n\t<footer class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet footer#\\n\\\n\t<footer id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet form\\n\\\n\t<form action=\\\"${1}\\\" method=\\\"${2:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${3}\\n\\\n\t</form>\\n\\\nsnippet form.\\n\\\n\t<form class=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet form#\\n\\\n\t<form id=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet h1\\n\\\n\t<h1>${1}</h1>\\n\\\nsnippet h1.\\n\\\n\t<h1 class=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h1#\\n\\\n\t<h1 id=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h2\\n\\\n\t<h2>${1}</h2>\\n\\\nsnippet h2.\\n\\\n\t<h2 class=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h2#\\n\\\n\t<h2 id=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h3\\n\\\n\t<h3>${1}</h3>\\n\\\nsnippet h3.\\n\\\n\t<h3 class=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h3#\\n\\\n\t<h3 id=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h4\\n\\\n\t<h4>${1}</h4>\\n\\\nsnippet h4.\\n\\\n\t<h4 class=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h4#\\n\\\n\t<h4 id=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h5\\n\\\n\t<h5>${1}</h5>\\n\\\nsnippet h5.\\n\\\n\t<h5 class=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h5#\\n\\\n\t<h5 id=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h6\\n\\\n\t<h6>${1}</h6>\\n\\\nsnippet h6.\\n\\\n\t<h6 class=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet h6#\\n\\\n\t<h6 id=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet head\\n\\\n\t<head>\\n\\\n\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\\n\\\n\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t${2}\\n\\\n\t</head>\\n\\\nsnippet header\\n\\\n\t<header>\\n\\\n\t\t${1}\\n\\\n\t</header>\\n\\\nsnippet header.\\n\\\n\t<header class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet header#\\n\\\n\t<header id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet hgroup\\n\\\n\t<hgroup>\\n\\\n\t\t${1}\\n\\\n\t</hgroup>\\n\\\nsnippet hgroup.\\n\\\n\t<hgroup class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</hgroup>\\n\\\nsnippet hr\\n\\\n\t<hr />${1}\\n\\\nsnippet html\\n\\\n\t<html>\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet xhtml\\n\\\n\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet html5\\n\\\n\t<!DOCTYPE html>\\n\\\n\t<html>\\n\\\n\t\t<head>\\n\\\n\t\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t\t${2:meta}\\n\\\n\t\t</head>\\n\\\n\t\t<body>\\n\\\n\t\t\t${3:body}\\n\\\n\t\t</body>\\n\\\n\t</html>\\n\\\nsnippet xhtml5\\n\\\n\t<!DOCTYPE html>\\n\\\n\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\\n\t\t<head>\\n\\\n\t\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"application/xhtml+xml; charset=utf-8\\\" />\\n\\\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t\t${2:meta}\\n\\\n\t\t</head>\\n\\\n\t\t<body>\\n\\\n\t\t\t${3:body}\\n\\\n\t\t</body>\\n\\\n\t</html>\\n\\\nsnippet i\\n\\\n\t<i>${1}</i>\\n\\\nsnippet iframe\\n\\\n\t<iframe src=\\\"${1}\\\" frameborder=\\\"0\\\"></iframe>${2}\\n\\\nsnippet iframe.\\n\\\n\t<iframe class=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet iframe#\\n\\\n\t<iframe id=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet img\\n\\\n\t<img src=\\\"${1}\\\" alt=\\\"${2}\\\" />${3}\\n\\\nsnippet img.\\n\\\n\t<img class=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet img#\\n\\\n\t<img id=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet input\\n\\\n\t<input type=\\\"${1:text/submit/hidden/button/image}\\\" name=\\\"${2}\\\" id=\\\"${3:$2}\\\" value=\\\"${4}\\\" />${5}\\n\\\nsnippet input.\\n\\\n\t<input class=\\\"${1}\\\" type=\\\"${2:text/submit/hidden/button/image}\\\" name=\\\"${3}\\\" id=\\\"${4:$3}\\\" value=\\\"${5}\\\" />${6}\\n\\\nsnippet input:text\\n\\\n\t<input type=\\\"text\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:submit\\n\\\n\t<input type=\\\"submit\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:hidden\\n\\\n\t<input type=\\\"hidden\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:button\\n\\\n\t<input type=\\\"button\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:image\\n\\\n\t<input type=\\\"image\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" src=\\\"${3}\\\" alt=\\\"${4}\\\" />${5}\\n\\\nsnippet input:checkbox\\n\\\n\t<input type=\\\"checkbox\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:radio\\n\\\n\t<input type=\\\"radio\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:color\\n\\\n\t<input type=\\\"color\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:date\\n\\\n\t<input type=\\\"date\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime\\n\\\n\t<input type=\\\"datetime\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime-local\\n\\\n\t<input type=\\\"datetime-local\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:email\\n\\\n\t<input type=\\\"email\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:file\\n\\\n\t<input type=\\\"file\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:month\\n\\\n\t<input type=\\\"month\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:number\\n\\\n\t<input type=\\\"number\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:password\\n\\\n\t<input type=\\\"password\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:range\\n\\\n\t<input type=\\\"range\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:reset\\n\\\n\t<input type=\\\"reset\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:search\\n\\\n\t<input type=\\\"search\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:time\\n\\\n\t<input type=\\\"time\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:url\\n\\\n\t<input type=\\\"url\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:week\\n\\\n\t<input type=\\\"week\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet ins\\n\\\n\t<ins>${1}</ins>\\n\\\nsnippet kbd\\n\\\n\t<kbd>${1}</kbd>\\n\\\nsnippet keygen\\n\\\n\t<keygen>${1}</keygen>\\n\\\nsnippet label\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\nsnippet label:i\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<input type=\\\"${3:text/submit/hidden/button}\\\" name=\\\"${4:$2}\\\" id=\\\"${5:$2}\\\" value=\\\"${6}\\\" />${7}\\n\\\nsnippet label:s\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<select name=\\\"${3:$2}\\\" id=\\\"${4:$2}\\\">\\n\\\n\t\t<option value=\\\"${5}\\\">${6:$5}</option>\\n\\\n\t</select>\\n\\\nsnippet legend\\n\\\n\t<legend>${1}</legend>\\n\\\nsnippet legend+\\n\\\n\t<legend><span>${1}</span></legend>\\n\\\nsnippet li\\n\\\n\t<li>${1}</li>\\n\\\nsnippet li.\\n\\\n\t<li class=\\\"${1}\\\">${2}</li>\\n\\\nsnippet li+\\n\\\n\t<li>${1}</li>\\n\\\n\tli+${2}\\n\\\nsnippet lia\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\nsnippet lia+\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\n\tlia+${3}\\n\\\nsnippet link\\n\\\n\t<link rel=\\\"${1}\\\" href=\\\"${2}\\\" title=\\\"${3}\\\" type=\\\"${4}\\\" />${5}\\n\\\nsnippet link:atom\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:atom.xml}\\\" title=\\\"Atom\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:css\\n\\\n\t<link rel=\\\"stylesheet\\\" href=\\\"${2:style.css}\\\" type=\\\"text/css\\\" media=\\\"${3:all}\\\" />${4}\\n\\\nsnippet link:favicon\\n\\\n\t<link rel=\\\"shortcut icon\\\" href=\\\"${1:favicon.ico}\\\" type=\\\"image/x-icon\\\" />${2}\\n\\\nsnippet link:rss\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:rss.xml}\\\" title=\\\"RSS\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:touch\\n\\\n\t<link rel=\\\"apple-touch-icon\\\" href=\\\"${1:favicon.png}\\\" />${2}\\n\\\nsnippet map\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</map>\\n\\\nsnippet map.\\n\\\n\t<map class=\\\"${1}\\\" name=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map#\\n\\\n\t<map name=\\\"${1}\\\" id=\\\"${2:$1}>\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map+\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t<area shape=\\\"${2}\\\" coords=\\\"${3}\\\" href=\\\"${4}\\\" alt=\\\"${5}\\\" />${6}\\n\\\n\t</map>${7}\\n\\\nsnippet mark\\n\\\n\t<mark>${1}</mark>\\n\\\nsnippet menu\\n\\\n\t<menu>\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:c\\n\\\n\t<menu type=\\\"context\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:t\\n\\\n\t<menu type=\\\"toolbar\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet meta\\n\\\n\t<meta http-equiv=\\\"${1}\\\" content=\\\"${2}\\\" />${3}\\n\\\nsnippet meta:compat\\n\\\n\t<meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=${1:7,8,edge}\\\" />${3}\\n\\\nsnippet meta:refresh\\n\\\n\t<meta http-equiv=\\\"refresh\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meta:utf\\n\\\n\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meter\\n\\\n\t<meter>${1}</meter>\\n\\\nsnippet nav\\n\\\n\t<nav>\\n\\\n\t\t${1}\\n\\\n\t</nav>\\n\\\nsnippet nav.\\n\\\n\t<nav class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet nav#\\n\\\n\t<nav id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet noscript\\n\\\n\t<noscript>\\n\\\n\t\t${1}\\n\\\n\t</noscript>\\n\\\nsnippet object\\n\\\n\t<object data=\\\"${1}\\\" type=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</object>${4}\\n\\\n# Embed QT Movie\\n\\\nsnippet movie\\n\\\n\t<object width=\\\"$2\\\" height=\\\"$3\\\" classid=\\\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\\\"\\n\\\n\t codebase=\\\"http://www.apple.com/qtactivex/qtplugin.cab\\\">\\n\\\n\t\t<param name=\\\"src\\\" value=\\\"$1\\\" />\\n\\\n\t\t<param name=\\\"controller\\\" value=\\\"$4\\\" />\\n\\\n\t\t<param name=\\\"autoplay\\\" value=\\\"$5\\\" />\\n\\\n\t\t<embed src=\\\"${1:movie.mov}\\\"\\n\\\n\t\t\twidth=\\\"${2:320}\\\" height=\\\"${3:240}\\\"\\n\\\n\t\t\tcontroller=\\\"${4:true}\\\" autoplay=\\\"${5:true}\\\"\\n\\\n\t\t\tscale=\\\"tofit\\\" cache=\\\"true\\\"\\n\\\n\t\t\tpluginspage=\\\"http://www.apple.com/quicktime/download/\\\" />\\n\\\n\t</object>${6}\\n\\\nsnippet ol\\n\\\n\t<ol>\\n\\\n\t\t${1}\\n\\\n\t</ol>\\n\\\nsnippet ol.\\n\\\n\t<ol class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol#\\n\\\n\t<ol id=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol+\\n\\\n\t<ol>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ol>\\n\\\nsnippet opt\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\nsnippet opt+\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\topt+${3}\\n\\\nsnippet optt\\n\\\n\t<option>${1}</option>\\n\\\nsnippet optgroup\\n\\\n\t<optgroup>\\n\\\n\t\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\t\topt+${3}\\n\\\n\t</optgroup>\\n\\\nsnippet output\\n\\\n\t<output>${1}</output>\\n\\\nsnippet p\\n\\\n\t<p>${1}</p>\\n\\\nsnippet param\\n\\\n\t<param name=\\\"${1}\\\" value=\\\"${2}\\\" />${3}\\n\\\nsnippet pre\\n\\\n\t<pre>\\n\\\n\t\t${1}\\n\\\n\t</pre>\\n\\\nsnippet progress\\n\\\n\t<progress>${1}</progress>\\n\\\nsnippet q\\n\\\n\t<q>${1}</q>\\n\\\nsnippet rp\\n\\\n\t<rp>${1}</rp>\\n\\\nsnippet rt\\n\\\n\t<rt>${1}</rt>\\n\\\nsnippet ruby\\n\\\n\t<ruby>\\n\\\n\t\t<rp><rt>${1}</rt></rp>\\n\\\n\t</ruby>\\n\\\nsnippet s\\n\\\n\t<s>${1}</s>\\n\\\nsnippet samp\\n\\\n\t<samp>\\n\\\n\t\t${1}\\n\\\n\t</samp>\\n\\\nsnippet script\\n\\\n\t<script type=\\\"text/javascript\\\" charset=\\\"utf-8\\\">\\n\\\n\t\t${1}\\n\\\n\t</script>\\n\\\nsnippet scriptsrc\\n\\\n\t<script src=\\\"${1}.js\\\" type=\\\"text/javascript\\\" charset=\\\"utf-8\\\"></script>\\n\\\nsnippet newscript\\n\\\n\t<script type=\\\"application/javascript\\\" charset=\\\"utf-8\\\">\\n\\\n\t\t${1}\\n\\\n\t</script>\\n\\\nsnippet newscriptsrc\\n\\\n\t<script src=\\\"${1}.js\\\" type=\\\"application/javascript\\\" charset=\\\"utf-8\\\"></script>\\n\\\nsnippet section\\n\\\n\t<section>\\n\\\n\t\t${1}\\n\\\n\t</section>\\n\\\nsnippet section.\\n\\\n\t<section class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet section#\\n\\\n\t<section id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet select\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t${3}\\n\\\n\t</select>\\n\\\nsnippet select.\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\" class=\\\"${3}>\\n\\\n\t\t${4}\\n\\\n\t</select>\\n\\\nsnippet select+\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t<option value=\\\"${3}\\\">${4:$3}</option>\\n\\\n\t\topt+${5}\\n\\\n\t</select>\\n\\\nsnippet small\\n\\\n\t<small>${1}</small>\\n\\\nsnippet source\\n\\\n\t<source src=\\\"${1}\\\" type=\\\"${2}\\\" media=\\\"${3}\\\" />\\n\\\nsnippet span\\n\\\n\t<span>${1}</span>\\n\\\nsnippet strong\\n\\\n\t<strong>${1}</strong>\\n\\\nsnippet style\\n\\\n\t<style type=\\\"text/css\\\" media=\\\"${1:all}\\\">\\n\\\n\t\t${2}\\n\\\n\t</style>\\n\\\nsnippet sub\\n\\\n\t<sub>${1}</sub>\\n\\\nsnippet summary\\n\\\n\t<summary>\\n\\\n\t\t${1}\\n\\\n\t</summary>\\n\\\nsnippet sup\\n\\\n\t<sup>${1}</sup>\\n\\\nsnippet table\\n\\\n\t<table border=\\\"${1:0}\\\">\\n\\\n\t\t${2}\\n\\\n\t</table>\\n\\\nsnippet table.\\n\\\n\t<table class=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet table#\\n\\\n\t<table id=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet tbody\\n\\\n\t<tbody>\\n\\\n\t\t${1}\\n\\\n\t</tbody>\\n\\\nsnippet td\\n\\\n\t<td>${1}</td>\\n\\\nsnippet td.\\n\\\n\t<td class=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td#\\n\\\n\t<td id=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td+\\n\\\n\t<td>${1}</td>\\n\\\n\ttd+${2}\\n\\\nsnippet textarea\\n\\\n\t<textarea name=\\\"${1}\\\" id=${2:$1} rows=\\\"${3:8}\\\" cols=\\\"${4:40}\\\">${5}</textarea>${6}\\n\\\nsnippet tfoot\\n\\\n\t<tfoot>\\n\\\n\t\t${1}\\n\\\n\t</tfoot>\\n\\\nsnippet th\\n\\\n\t<th>${1}</th>\\n\\\nsnippet th.\\n\\\n\t<th class=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th#\\n\\\n\t<th id=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th+\\n\\\n\t<th>${1}</th>\\n\\\n\tth+${2}\\n\\\nsnippet thead\\n\\\n\t<thead>\\n\\\n\t\t${1}\\n\\\n\t</thead>\\n\\\nsnippet time\\n\\\n\t<time datetime=\\\"${1}\\\" pubdate=\\\"${2:$1}>${3:$1}</time>\\n\\\nsnippet title\\n\\\n\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\nsnippet tr\\n\\\n\t<tr>\\n\\\n\t\t${1}\\n\\\n\t</tr>\\n\\\nsnippet tr+\\n\\\n\t<tr>\\n\\\n\t\t<td>${1}</td>\\n\\\n\t\ttd+${2}\\n\\\n\t</tr>\\n\\\nsnippet track\\n\\\n\t<track src=\\\"${1}\\\" srclang=\\\"${2}\\\" label=\\\"${3}\\\" default=\\\"${4:default}>${5}</track>${6}\\n\\\nsnippet ul\\n\\\n\t<ul>\\n\\\n\t\t${1}\\n\\\n\t</ul>\\n\\\nsnippet ul.\\n\\\n\t<ul class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul#\\n\\\n\t<ul id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul+\\n\\\n\t<ul>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ul>\\n\\\nsnippet var\\n\\\n\t<var>${1}</var>\\n\\\nsnippet video\\n\\\n\t<video src=\\\"${1} height=\\\"${2}\\\" width=\\\"${3}\\\" preload=\\\"${5:none}\\\" autoplay=\\\"${6:autoplay}>${7}</video>${8}\\n\\\nsnippet wbr\\n\\\n\t<wbr />${1}\\n\\\n\";\nexports.scope = \"liquid\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/lisp.js",
    "content": "ace.define(\"ace/snippets/lisp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"lisp\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/livescript.js",
    "content": "ace.define(\"ace/snippets/livescript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"livescript\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/logiql.js",
    "content": "ace.define(\"ace/snippets/logiql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"logiql\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/logtalk.js",
    "content": "ace.define(\"ace/snippets/logtalk\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"logtalk\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/lsl.js",
    "content": "ace.define(\"ace/snippets/lsl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet @\\n\\\n\t@${1:label};\\n\\\nsnippet CAMERA_ACTIVE\\n\\\n\tCAMERA_ACTIVE, ${1:integer isActive}, $0\\n\\\nsnippet CAMERA_BEHINDNESS_ANGLE\\n\\\n\tCAMERA_BEHINDNESS_ANGLE, ${1:float degrees}, $0\\n\\\nsnippet CAMERA_BEHINDNESS_LAG\\n\\\n\tCAMERA_BEHINDNESS_LAG, ${1:float seconds}, $0\\n\\\nsnippet CAMERA_DISTANCE\\n\\\n\tCAMERA_DISTANCE, ${1:float meters}, $0\\n\\\nsnippet CAMERA_FOCUS\\n\\\n\tCAMERA_FOCUS, ${1:vector position}, $0\\n\\\nsnippet CAMERA_FOCUS_LAG\\n\\\n\tCAMERA_FOCUS_LAG, ${1:float seconds}, $0\\n\\\nsnippet CAMERA_FOCUS_LOCKED\\n\\\n\tCAMERA_FOCUS_LOCKED, ${1:integer isLocked}, $0\\n\\\nsnippet CAMERA_FOCUS_OFFSET\\n\\\n\tCAMERA_FOCUS_OFFSET, ${1:vector meters}, $0\\n\\\nsnippet CAMERA_FOCUS_THRESHOLD\\n\\\n\tCAMERA_FOCUS_THRESHOLD, ${1:float meters}, $0\\n\\\nsnippet CAMERA_PITCH\\n\\\n\tCAMERA_PITCH, ${1:float degrees}, $0\\n\\\nsnippet CAMERA_POSITION\\n\\\n\tCAMERA_POSITION, ${1:vector position}, $0\\n\\\nsnippet CAMERA_POSITION_LAG\\n\\\n\tCAMERA_POSITION_LAG, ${1:float seconds}, $0\\n\\\nsnippet CAMERA_POSITION_LOCKED\\n\\\n\tCAMERA_POSITION_LOCKED, ${1:integer isLocked}, $0\\n\\\nsnippet CAMERA_POSITION_THRESHOLD\\n\\\n\tCAMERA_POSITION_THRESHOLD, ${1:float meters}, $0\\n\\\nsnippet CHARACTER_AVOIDANCE_MODE\\n\\\n\tCHARACTER_AVOIDANCE_MODE, ${1:integer flags}, $0\\n\\\nsnippet CHARACTER_DESIRED_SPEED\\n\\\n\tCHARACTER_DESIRED_SPEED, ${1:float speed}, $0\\n\\\nsnippet CHARACTER_DESIRED_TURN_SPEED\\n\\\n\tCHARACTER_DESIRED_TURN_SPEED, ${1:float speed}, $0\\n\\\nsnippet CHARACTER_LENGTH\\n\\\n\tCHARACTER_LENGTH, ${1:float length}, $0\\n\\\nsnippet CHARACTER_MAX_TURN_RADIUS\\n\\\n\tCHARACTER_MAX_TURN_RADIUS, ${1:float radius}, $0\\n\\\nsnippet CHARACTER_ORIENTATION\\n\\\n\tCHARACTER_ORIENTATION, ${1:integer orientation}, $0\\n\\\nsnippet CHARACTER_RADIUS\\n\\\n\tCHARACTER_RADIUS, ${1:float radius}, $0\\n\\\nsnippet CHARACTER_STAY_WITHIN_PARCEL\\n\\\n\tCHARACTER_STAY_WITHIN_PARCEL, ${1:boolean stay}, $0\\n\\\nsnippet CHARACTER_TYPE\\n\\\n\tCHARACTER_TYPE, ${1:integer type}, $0\\n\\\nsnippet HTTP_BODY_MAXLENGTH\\n\\\n\tHTTP_BODY_MAXLENGTH, ${1:integer length}, $0\\n\\\nsnippet HTTP_CUSTOM_HEADER\\n\\\n\tHTTP_CUSTOM_HEADER, ${1:string name}, ${2:string value}, $0\\n\\\nsnippet HTTP_METHOD\\n\\\n\tHTTP_METHOD, ${1:string method}, $0\\n\\\nsnippet HTTP_MIMETYPE\\n\\\n\tHTTP_MIMETYPE, ${1:string mimeType}, $0\\n\\\nsnippet HTTP_PRAGMA_NO_CACHE\\n\\\n\tHTTP_PRAGMA_NO_CACHE, ${1:integer send_header}, $0\\n\\\nsnippet HTTP_VERBOSE_THROTTLE\\n\\\n\tHTTP_VERBOSE_THROTTLE, ${1:integer noisy}, $0\\n\\\nsnippet HTTP_VERIFY_CERT\\n\\\n\tHTTP_VERIFY_CERT, ${1:integer verify}, $0\\n\\\nsnippet RC_DATA_FLAGS\\n\\\n\tRC_DATA_FLAGS, ${1:integer flags}, $0\\n\\\nsnippet RC_DETECT_PHANTOM\\n\\\n\tRC_DETECT_PHANTOM, ${1:integer dectedPhantom}, $0\\n\\\nsnippet RC_MAX_HITS\\n\\\n\tRC_MAX_HITS, ${1:integer maxHits}, $0\\n\\\nsnippet RC_REJECT_TYPES\\n\\\n\tRC_REJECT_TYPES, ${1:integer filterMask}, $0\\n\\\nsnippet at_rot_target\\n\\\n\tat_rot_target(${1:integer handle}, ${2:rotation targetrot}, ${3:rotation ourrot})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet at_target\\n\\\n\tat_target(${1:integer tnum}, ${2:vector targetpos}, ${3:vector ourpos})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet attach\\n\\\n\tattach(${1:key id})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet changed\\n\\\n\tchanged(${1:integer change})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet collision\\n\\\n\tcollision(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet collision_end\\n\\\n\tcollision_end(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet collision_start\\n\\\n\tcollision_start(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet control\\n\\\n\tcontrol(${1:key id}, ${2:integer level}, ${3:integer edge})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet dataserver\\n\\\n\tdataserver(${1:key query_id}, ${2:string data})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet do\\n\\\n\tdo\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\n\twhile (${1:condition});\\n\\\nsnippet else\\n\\\n\telse\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet email\\n\\\n\temail(${1:string time}, ${2:string address}, ${3:string subject}, ${4:string message}, ${5:integer num_left})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet experience_permissions\\n\\\n\texperience_permissions(${1:key agent_id})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet experience_permissions_denied\\n\\\n\texperience_permissions_denied(${1:key agent_id}, ${2:integer reason})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet for\\n\\\n\tfor (${1:start}; ${3:condition}; ${3:step})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet http_request\\n\\\n\thttp_request(${1:key request_id}, ${2:string method}, ${3:string body})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet http_response\\n\\\n\thttp_response(${1:key request_id}, ${2:integer status}, ${3:list metadata}, ${4:string body})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet if\\n\\\n\tif (${1:condition})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet jump\\n\\\n\tjump ${1:label};\\n\\\nsnippet land_collision\\n\\\n\tland_collision(${1:vector pos})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet land_collision_end\\n\\\n\tland_collision_end(${1:vector pos})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet land_collision_start\\n\\\n\tland_collision_start(${1:vector pos})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet link_message\\n\\\n\tlink_message(${1:integer sender_num}, ${2:integer num}, ${3:string str}, ${4:key id})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet listen\\n\\\n\tlisten(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string message})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet llAbs\\n\\\n\tllAbs(${1:integer val})\\n\\\nsnippet llAcos\\n\\\n\tllAcos(${1:float val})\\n\\\nsnippet llAddToLandBanList\\n\\\n\tllAddToLandBanList(${1:key agent}, ${2:float hours});\\n\\\n\t$0\\n\\\nsnippet llAddToLandPassList\\n\\\n\tllAddToLandPassList(${1:key agent}, ${2:float hours});\\n\\\n\t$0\\n\\\nsnippet llAdjustSoundVolume\\n\\\n\tllAdjustSoundVolume(${1:float volume});\\n\\\n\t$0\\n\\\nsnippet llAgentInExperience\\n\\\n\tllAgentInExperience(${1:key agent})\\n\\\nsnippet llAllowInventoryDrop\\n\\\n\tllAllowInventoryDrop(${1:integer add});\\n\\\n\t$0\\n\\\nsnippet llAngleBetween\\n\\\n\tllAngleBetween(${1:rotation a}, ${2:rotation b})\\n\\\nsnippet llApplyImpulse\\n\\\n\tllApplyImpulse(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llApplyRotationalImpulse\\n\\\n\tllApplyRotationalImpulse(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llAsin\\n\\\n\tllAsin(${1:float val})\\n\\\nsnippet llAtan2\\n\\\n\tllAtan2(${1:float y}, ${2:float x})\\n\\\nsnippet llAttachToAvatar\\n\\\n\tllAttachToAvatar(${1:integer attach_point});\\n\\\n\t$0\\n\\\nsnippet llAttachToAvatarTemp\\n\\\n\tllAttachToAvatarTemp(${1:integer attach_point});\\n\\\n\t$0\\n\\\nsnippet llAvatarOnLinkSitTarget\\n\\\n\tllAvatarOnLinkSitTarget(${1:integer link})\\n\\\nsnippet llAvatarOnSitTarget\\n\\\n\tllAvatarOnSitTarget()\\n\\\nsnippet llAxes2Rot\\n\\\n\tllAxes2Rot(${1:vector fwd}, ${2:vector left}, ${3:vector up})\\n\\\nsnippet llAxisAngle2Rot\\n\\\n\tllAxisAngle2Rot(${1:vector axis}, ${2:float angle})\\n\\\nsnippet llBase64ToInteger\\n\\\n\tllBase64ToInteger(${1:string str})\\n\\\nsnippet llBase64ToString\\n\\\n\tllBase64ToString(${1:string str})\\n\\\nsnippet llBreakAllLinks\\n\\\n\tllBreakAllLinks();\\n\\\n\t$0\\n\\\nsnippet llBreakLink\\n\\\n\tllBreakLink(${1:integer link});\\n\\\n\t$0\\n\\\nsnippet llCastRay\\n\\\n\tllCastRay(${1:vector start}, ${2:vector end}, ${3:list options});\\n\\\n\t$0\\n\\\nsnippet llCeil\\n\\\n\tllCeil(${1:float val})\\n\\\nsnippet llClearCameraParams\\n\\\n\tllClearCameraParams();\\n\\\n\t$0\\n\\\nsnippet llClearLinkMedia\\n\\\n\tllClearLinkMedia(${1:integer link}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llClearPrimMedia\\n\\\n\tllClearPrimMedia(${1:integer face});\\n\\\n\t$0\\n\\\nsnippet llCloseRemoteDataChannel\\n\\\n\tllCloseRemoteDataChannel(${1:key channel});\\n\\\n\t$0\\n\\\nsnippet llCollisionFilter\\n\\\n\tllCollisionFilter(${1:string name}, ${2:key id}, ${3:integer accept});\\n\\\n\t$0\\n\\\nsnippet llCollisionSound\\n\\\n\tllCollisionSound(${1:string impact_sound}, ${2:float impact_volume});\\n\\\n\t$0\\n\\\nsnippet llCos\\n\\\n\tllCos(${1:float theta})\\n\\\nsnippet llCreateCharacter\\n\\\n\tllCreateCharacter(${1:list options});\\n\\\n\t$0\\n\\\nsnippet llCreateKeyValue\\n\\\n\tllCreateKeyValue(${1:string k})\\n\\\nsnippet llCreateLink\\n\\\n\tllCreateLink(${1:key target}, ${2:integer parent});\\n\\\n\t$0\\n\\\nsnippet llCSV2List\\n\\\n\tllCSV2List(${1:string src})\\n\\\nsnippet llDataSizeKeyValue\\n\\\n\tllDataSizeKeyValue()\\n\\\nsnippet llDeleteCharacter\\n\\\n\tllDeleteCharacter();\\n\\\n\t$0\\n\\\nsnippet llDeleteKeyValue\\n\\\n\tllDeleteKeyValue(${1:string k})\\n\\\nsnippet llDeleteSubList\\n\\\n\tllDeleteSubList(${1:list src}, ${2:integer start}, ${3:integer end})\\n\\\nsnippet llDeleteSubString\\n\\\n\tllDeleteSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\n\\\nsnippet llDetachFromAvatar\\n\\\n\tllDetachFromAvatar();\\n\\\n\t$0\\n\\\nsnippet llDetectedGrab\\n\\\n\tllDetectedGrab(${1:integer number})\\n\\\nsnippet llDetectedGroup\\n\\\n\tllDetectedGroup(${1:integer number})\\n\\\nsnippet llDetectedKey\\n\\\n\tllDetectedKey(${1:integer number})\\n\\\nsnippet llDetectedLinkNumber\\n\\\n\tllDetectedLinkNumber(${1:integer number})\\n\\\nsnippet llDetectedName\\n\\\n\tllDetectedName(${1:integer number})\\n\\\nsnippet llDetectedOwner\\n\\\n\tllDetectedOwner(${1:integer number})\\n\\\nsnippet llDetectedPos\\n\\\n\tllDetectedPosl(${1:integer number})\\n\\\nsnippet llDetectedRot\\n\\\n\tllDetectedRot(${1:integer number})\\n\\\nsnippet llDetectedTouchBinormal\\n\\\n\tllDetectedTouchBinormal(${1:integer number})\\n\\\nsnippet llDetectedTouchFace\\n\\\n\tllDetectedTouchFace(${1:integer number})\\n\\\nsnippet llDetectedTouchNormal\\n\\\n\tllDetectedTouchNormal(${1:integer number})\\n\\\nsnippet llDetectedTouchPos\\n\\\n\tllDetectedTouchPos(${1:integer number})\\n\\\nsnippet llDetectedTouchST\\n\\\n\tllDetectedTouchST(${1:integer number})\\n\\\nsnippet llDetectedTouchUV\\n\\\n\tllDetectedTouchUV(${1:integer number})\\n\\\nsnippet llDetectedType\\n\\\n\tllDetectedType(${1:integer number})\\n\\\nsnippet llDetectedVel\\n\\\n\tllDetectedVel(${1:integer number})\\n\\\nsnippet llDialog\\n\\\n\tllDialog(${1:key agent}, ${2:string message}, ${3:list buttons}, ${4:integer channel});\\n\\\n\t$0\\n\\\nsnippet llDie\\n\\\n\tllDie();\\n\\\n\t$0\\n\\\nsnippet llDumpList2String\\n\\\n\tllDumpList2String(${1:list src}, ${2:string separator})\\n\\\nsnippet llEdgeOfWorld\\n\\\n\tllEdgeOfWorld(${1:vector pos}, ${2:vector dir})\\n\\\nsnippet llEjectFromLand\\n\\\n\tllEjectFromLand(${1:key agent});\\n\\\n\t$0\\n\\\nsnippet llEmail\\n\\\n\tllEmail(${1:string address}, ${2:string subject}, ${3:string message});\\n\\\n\t$0\\n\\\nsnippet llEscapeURL\\n\\\n\tllEscapeURL(${1:string url})\\n\\\nsnippet llEuler2Rot\\n\\\n\tllEuler2Rot(${1:vector v})\\n\\\nsnippet llExecCharacterCmd\\n\\\n\tllExecCharacterCmd(${1:integer command}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llEvade\\n\\\n\tllEvade(${1:key target}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llFabs\\n\\\n\tllFabs(${1:float val})\\n\\\nsnippet llFleeFrom\\n\\\n\tllFleeFrom(${1:vector position}, ${2:float distance}, ${3:list options});\\n\\\n\t$0\\n\\\nsnippet llFloor\\n\\\n\tllFloor(${1:float val})\\n\\\nsnippet llForceMouselook\\n\\\n\tllForceMouselook(${1:integer mouselook});\\n\\\n\t$0\\n\\\nsnippet llFrand\\n\\\n\tllFrand(${1:float mag})\\n\\\nsnippet llGenerateKey\\n\\\n\tllGenerateKey()\\n\\\nsnippet llGetAccel\\n\\\n\tllGetAccel()\\n\\\nsnippet llGetAgentInfo\\n\\\n\tllGetAgentInfo(${1:key id})\\n\\\nsnippet llGetAgentLanguage\\n\\\n\tllGetAgentLanguage(${1:key agent})\\n\\\nsnippet llGetAgentList\\n\\\n\tllGetAgentList(${1:integer scope}, ${2:list options})\\n\\\nsnippet llGetAgentSize\\n\\\n\tllGetAgentSize(${1:key agent})\\n\\\nsnippet llGetAlpha\\n\\\n\tllGetAlpha(${1:integer face})\\n\\\nsnippet llGetAndResetTime\\n\\\n\tllGetAndResetTime()\\n\\\nsnippet llGetAnimation\\n\\\n\tllGetAnimation(${1:key id})\\n\\\nsnippet llGetAnimationList\\n\\\n\tllGetAnimationList(${1:key agent})\\n\\\nsnippet llGetAnimationOverride\\n\\\n\tllGetAnimationOverride(${1:string anim_state})\\n\\\nsnippet llGetAttached\\n\\\n\tllGetAttached()\\n\\\nsnippet llGetAttachedList\\n\\\n\tllGetAttachedList(${1:key id})\\n\\\nsnippet llGetBoundingBox\\n\\\n\tllGetBoundingBox(${1:key object})\\n\\\nsnippet llGetCameraPos\\n\\\n\tllGetCameraPos()\\n\\\nsnippet llGetCameraRot\\n\\\n\tllGetCameraRot()\\n\\\nsnippet llGetCenterOfMass\\n\\\n\tllGetCenterOfMass()\\n\\\nsnippet llGetClosestNavPoint\\n\\\n\tllGetClosestNavPoint(${1:vector point}, ${2:list options})\\n\\\nsnippet llGetColor\\n\\\n\tllGetColor(${1:integer face})\\n\\\nsnippet llGetCreator\\n\\\n\tllGetCreator()\\n\\\nsnippet llGetDate\\n\\\n\tllGetDate()\\n\\\nsnippet llGetDisplayName\\n\\\n\tllGetDisplayName(${1:key id})\\n\\\nsnippet llGetEnergy\\n\\\n\tllGetEnergy()\\n\\\nsnippet llGetEnv\\n\\\n\tllGetEnv(${1:string name})\\n\\\nsnippet llGetExperienceDetails\\n\\\n\tllGetExperienceDetails(${1:key experience_id})\\n\\\nsnippet llGetExperienceErrorMessage\\n\\\n\tllGetExperienceErrorMessage(${1:integer error})\\n\\\nsnippet llGetForce\\n\\\n\tllGetForce()\\n\\\nsnippet llGetFreeMemory\\n\\\n\tllGetFreeMemory()\\n\\\nsnippet llGetFreeURLs\\n\\\n\tllGetFreeURLs()\\n\\\nsnippet llGetGeometricCenter\\n\\\n\tllGetGeometricCenter()\\n\\\nsnippet llGetGMTclock\\n\\\n\tllGetGMTclock()\\n\\\nsnippet llGetHTTPHeader\\n\\\n\tllGetHTTPHeader(${1:key request_id}, ${2:string header})\\n\\\nsnippet llGetInventoryCreator\\n\\\n\tllGetInventoryCreator(${1:string item})\\n\\\nsnippet llGetInventoryKey\\n\\\n\tllGetInventoryKey(${1:string name})\\n\\\nsnippet llGetInventoryName\\n\\\n\tllGetInventoryName(${1:integer type}, ${2:integer number})\\n\\\nsnippet llGetInventoryNumber\\n\\\n\tllGetInventoryNumber(${1:integer type})\\n\\\nsnippet llGetInventoryPermMask\\n\\\n\tllGetInventoryPermMask(${1:string item}, ${2:integer mask})\\n\\\nsnippet llGetInventoryType\\n\\\n\tllGetInventoryType(${1:string name})\\n\\\nsnippet llGetKey\\n\\\n\tllGetKey()\\n\\\nsnippet llGetLandOwnerAt\\n\\\n\tllGetLandOwnerAt(${1:vector pos})\\n\\\nsnippet llGetLinkKey\\n\\\n\tllGetLinkKey(${1:integer link})\\n\\\nsnippet llGetLinkMedia\\n\\\n\tllGetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params})\\n\\\nsnippet llGetLinkName\\n\\\n\tllGetLinkName(${1:integer link})\\n\\\nsnippet llGetLinkNumber\\n\\\n\tllGetLinkNumber()\\n\\\nsnippet llGetLinkNumberOfSides\\n\\\n\tllGetLinkNumberOfSides(${1:integer link})\\n\\\nsnippet llGetLinkPrimitiveParams\\n\\\n\tllGetLinkPrimitiveParams(${1:integer link}, ${2:list params})\\n\\\nsnippet llGetListEntryType\\n\\\n\tllGetListEntryType(${1:list src}, ${2:integer index})\\n\\\nsnippet llGetListLength\\n\\\n\tllGetListLength(${1:list src})\\n\\\nsnippet llGetLocalPos\\n\\\n\tllGetLocalPos()\\n\\\nsnippet llGetLocalRot\\n\\\n\tllGetLocalRot()\\n\\\nsnippet llGetMass\\n\\\n\tllGetMass()\\n\\\nsnippet llGetMassMKS\\n\\\n\tllGetMassMKS()\\n\\\nsnippet llGetMaxScaleFactor\\n\\\n\tllGetMaxScaleFactor()\\n\\\nsnippet llGetMemoryLimit\\n\\\n\tllGetMemoryLimit()\\n\\\nsnippet llGetMinScaleFactor\\n\\\n\tllGetMinScaleFactor()\\n\\\nsnippet llGetNextEmail\\n\\\n\tllGetNextEmail(${1:string address}, ${2:string subject});\\n\\\n\t$0\\n\\\nsnippet llGetNotecardLine\\n\\\n\tllGetNotecardLine(${1:string name}, ${2:integer line})\\n\\\nsnippet llGetNumberOfNotecardLines\\n\\\n\tllGetNumberOfNotecardLines(${1:string name})\\n\\\nsnippet llGetNumberOfPrims\\n\\\n\tllGetNumberOfPrims()\\n\\\nsnippet llGetNumberOfSides\\n\\\n\tllGetNumberOfSides()\\n\\\nsnippet llGetObjectDesc\\n\\\n\tllGetObjectDesc()\\n\\\nsnippet llGetObjectDetails\\n\\\n\tllGetObjectDetails(${1:key id}, ${2:list params})\\n\\\nsnippet llGetObjectMass\\n\\\n\tllGetObjectMass(${1:key id})\\n\\\nsnippet llGetObjectName\\n\\\n\tllGetObjectName()\\n\\\nsnippet llGetObjectPermMask\\n\\\n\tllGetObjectPermMask(${1:integer mask})\\n\\\nsnippet llGetObjectPrimCount\\n\\\n\tllGetObjectPrimCount(${1:key prim})\\n\\\nsnippet llGetOmega\\n\\\n\tllGetOmega()\\n\\\nsnippet llGetOwner\\n\\\n\tllGetOwner()\\n\\\nsnippet llGetOwnerKey\\n\\\n\tllGetOwnerKey(${1:key id})\\n\\\nsnippet llGetParcelDetails\\n\\\n\tllGetParcelDetails(${1:vector pos}, ${2:list params})\\n\\\nsnippet llGetParcelFlags\\n\\\n\tllGetParcelFlags(${1:vector pos})\\n\\\nsnippet llGetParcelMaxPrims\\n\\\n\tllGetParcelMaxPrims(${1:vector pos}, ${2:integer sim_wide})\\n\\\nsnippet llGetParcelMusicURL\\n\\\n\tllGetParcelMusicURL()\\n\\\nsnippet llGetParcelPrimCount\\n\\\n\tllGetParcelPrimCount(${1:vector pos}, ${2:integer category}, ${3:integer sim_wide})\\n\\\nsnippet llGetParcelPrimOwners\\n\\\n\tllGetParcelPrimOwners(${1:vector pos})\\n\\\nsnippet llGetPermissions\\n\\\n\tllGetPermissions()\\n\\\nsnippet llGetPermissionsKey\\n\\\n\tllGetPermissionsKey()\\n\\\nsnippet llGetPhysicsMaterial\\n\\\n\tllGetPhysicsMaterial()\\n\\\nsnippet llGetPos\\n\\\n\tllGetPos()\\n\\\nsnippet llGetPrimitiveParams\\n\\\n\tllGetPrimitiveParams(${1:list params})\\n\\\nsnippet llGetPrimMediaParams\\n\\\n\tllGetPrimMediaParams(${1:integer face}, ${2:list params})\\n\\\nsnippet llGetRegionAgentCount\\n\\\n\tllGetRegionAgentCount()\\n\\\nsnippet llGetRegionCorner\\n\\\n\tllGetRegionCorner()\\n\\\nsnippet llGetRegionFlags\\n\\\n\tllGetRegionFlags()\\n\\\nsnippet llGetRegionFPS\\n\\\n\tllGetRegionFPS()\\n\\\nsnippet llGetRegionName\\n\\\n\tllGetRegionName()\\n\\\nsnippet llGetRegionTimeDilation\\n\\\n\tllGetRegionTimeDilation()\\n\\\nsnippet llGetRootPosition\\n\\\n\tllGetRootPosition()\\n\\\nsnippet llGetRootRotation\\n\\\n\tllGetRootRotation()\\n\\\nsnippet llGetRot\\n\\\n\tllGetRot()\\n\\\nsnippet llGetScale\\n\\\n\tllGetScale()\\n\\\nsnippet llGetScriptName\\n\\\n\tllGetScriptName()\\n\\\nsnippet llGetScriptState\\n\\\n\tllGetScriptState(${1:string script})\\n\\\nsnippet llGetSimStats\\n\\\n\tllGetSimStats(${1:integer stat_type})\\n\\\nsnippet llGetSimulatorHostname\\n\\\n\tllGetSimulatorHostname()\\n\\\nsnippet llGetSPMaxMemory\\n\\\n\tllGetSPMaxMemory()\\n\\\nsnippet llGetStartParameter\\n\\\n\tllGetStartParameter()\\n\\\nsnippet llGetStaticPath\\n\\\n\tllGetStaticPath(${1:vector start}, ${2:vector end}, ${3:float radius}, ${4:list params})\\n\\\nsnippet llGetStatus\\n\\\n\tllGetStatus(${1:integer status})\\n\\\nsnippet llGetSubString\\n\\\n\tllGetSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\n\\\nsnippet llGetSunDirection\\n\\\n\tllGetSunDirection()\\n\\\nsnippet llGetTexture\\n\\\n\tllGetTexture(${1:integer face})\\n\\\nsnippet llGetTextureOffset\\n\\\n\tllGetTextureOffset(${1:integer face})\\n\\\nsnippet llGetTextureRot\\n\\\n\tllGetTextureRot(${1:integer face})\\n\\\nsnippet llGetTextureScale\\n\\\n\tllGetTextureScale(${1:integer face})\\n\\\nsnippet llGetTime\\n\\\n\tllGetTime()\\n\\\nsnippet llGetTimeOfDay\\n\\\n\tllGetTimeOfDay()\\n\\\nsnippet llGetTimestamp\\n\\\n\tllGetTimestamp()\\n\\\nsnippet llGetTorque\\n\\\n\tllGetTorque()\\n\\\nsnippet llGetUnixTime\\n\\\n\tllGetUnixTime()\\n\\\nsnippet llGetUsedMemory\\n\\\n\tllGetUsedMemory()\\n\\\nsnippet llGetUsername\\n\\\n\tllGetUsername(${1:key id})\\n\\\nsnippet llGetVel\\n\\\n\tllGetVel()\\n\\\nsnippet llGetWallclock\\n\\\n\tllGetWallclock()\\n\\\nsnippet llGiveInventory\\n\\\n\tllGiveInventory(${1:key destination}, ${2:string inventory});\\n\\\n\t$0\\n\\\nsnippet llGiveInventoryList\\n\\\n\tllGiveInventoryList(${1:key target}, ${2:string folder}, ${3:list inventory});\\n\\\n\t$0\\n\\\nsnippet llGiveMoney\\n\\\n\tllGiveMoney(${1:key destination}, ${2:integer amount})\\n\\\nsnippet llGround\\n\\\n\tllGround(${1:vector offset})\\n\\\nsnippet llGroundContour\\n\\\n\tllGroundContour(${1:vector offset})\\n\\\nsnippet llGroundNormal\\n\\\n\tllGroundNormal(${1:vector offset})\\n\\\nsnippet llGroundRepel\\n\\\n\tllGroundRepel(${1:float height}, ${2:integer water}, ${3:float tau});\\n\\\n\t$0\\n\\\nsnippet llGroundSlope\\n\\\n\tllGroundSlope(${1:vector offset})\\n\\\nsnippet llHTTPRequest\\n\\\n\tllHTTPRequest(${1:string url}, ${2:list parameters}, ${3:string body})\\n\\\nsnippet llHTTPResponse\\n\\\n\tllHTTPResponse(${1:key request_id}, ${2:integer status}, ${3:string body});\\n\\\n\t$0\\n\\\nsnippet llInsertString\\n\\\n\tllInsertString(${1:string dst}, ${2:integer pos}, ${3:string src})\\n\\\nsnippet llInstantMessage\\n\\\n\tllInstantMessage(${1:key user}, ${2:string message});\\n\\\n\t$0\\n\\\nsnippet llIntegerToBase64\\n\\\n\tllIntegerToBase64(${1:integer number})\\n\\\nsnippet llJson2List\\n\\\n\tllJson2List(${1:string json})\\n\\\nsnippet llJsonGetValue\\n\\\n\tllJsonGetValue(${1:string json}, ${2:list specifiers})\\n\\\nsnippet llJsonSetValue\\n\\\n\tllJsonSetValue(${1:string json}, ${2:list specifiers}, ${3:string newValue})\\n\\\nsnippet llJsonValueType\\n\\\n\tllJsonValueType(${1:string json}, ${2:list specifiers})\\n\\\nsnippet llKey2Name\\n\\\n\tllKey2Name(${1:key id})\\n\\\nsnippet llKeyCountKeyValue\\n\\\n\tllKeyCountKeyValue()\\n\\\nsnippet llKeysKeyValue\\n\\\n\tllKeysKeyValue(${1:integer first}, ${2:integer count})\\n\\\nsnippet llLinkParticleSystem\\n\\\n\tllLinkParticleSystem(${1:integer link}, ${2:list rules});\\n\\\n\t$0\\n\\\nsnippet llLinkSitTarget\\n\\\n\tllLinkSitTarget(${1:integer link}, ${2:vector offset}, ${3:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llList2CSV\\n\\\n\tllList2CSV(${1:list src})\\n\\\nsnippet llList2Float\\n\\\n\tllList2Float(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2Integer\\n\\\n\tllList2Integer(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2Json\\n\\\n\tllList2Json(${1:string type}, ${2:list values})\\n\\\nsnippet llList2Key\\n\\\n\tllList2Key(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2List\\n\\\n\tllList2List(${1:list src}, ${2:integer start}, ${3:integer end})\\n\\\nsnippet llList2ListStrided\\n\\\n\tllList2ListStrided(${1:list src}, ${2:integer start}, ${3:integer end}, ${4:integer stride})\\n\\\nsnippet llList2Rot\\n\\\n\tllList2Rot(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2String\\n\\\n\tllList2String(${1:list src}, ${2:integer index})\\n\\\nsnippet llList2Vector\\n\\\n\tllList2Vector(${1:list src}, ${2:integer index})\\n\\\nsnippet llListen\\n\\\n\tllListen(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string msg})\\n\\\nsnippet llListenControl\\n\\\n\tllListenControl(${1:integer handle}, ${2:integer active});\\n\\\n\t$0\\n\\\nsnippet llListenRemove\\n\\\n\tllListenRemove(${1:integer handle});\\n\\\n\t$0\\n\\\nsnippet llListFindList\\n\\\n\tllListFindList(${1:list src}, ${2:list test})\\n\\\nsnippet llListInsertList\\n\\\n\tllListInsertList(${1:list dest}, ${2:list src}, ${3:integer start})\\n\\\nsnippet llListRandomize\\n\\\n\tllListRandomize(${1:list src}, ${2:integer stride})\\n\\\nsnippet llListReplaceList\\n\\\n\tllListReplaceList(${1:list dest}, ${2:list src}, ${3:integer start}, ${4:integer end})\\n\\\nsnippet llListSort\\n\\\n\tllListSort(${1:list src}, ${2:integer stride}, ${3:integer ascending})\\n\\\nsnippet llListStatistics\\n\\\n\tllListStatistics(${1:integer operation}, ${2:list src})\\n\\\nsnippet llLoadURL\\n\\\n\tllLoadURL(${1:key agent}, ${2:string message}, ${3:string url});\\n\\\n\t$0\\n\\\nsnippet llLog\\n\\\n\tllLog(${1:float val})\\n\\\nsnippet llLog10\\n\\\n\tllLog10(${1:float val})\\n\\\nsnippet llLookAt\\n\\\n\tllLookAt(${1:vector target}, ${2:float strength}, ${3:float damping});\\n\\\n\t$0\\n\\\nsnippet llLoopSound\\n\\\n\tllLoopSound(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llLoopSoundMaster\\n\\\n\tllLoopSoundMaster(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llLoopSoundSlave\\n\\\n\tllLoopSoundSlave(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llManageEstateAccess\\n\\\n\tllManageEstateAccess(${1:integer action}, ${2:key agent})\\n\\\nsnippet llMapDestination\\n\\\n\tllMapDestination(${1:string simname}, ${2:vector pos}, ${3:vector look_at});\\n\\\n\t$0\\n\\\nsnippet llMD5String\\n\\\n\tllMD5String(${1:string src}, ${2:integer nonce})\\n\\\nsnippet llMessageLinked\\n\\\n\tllMessageLinked(${1:integer link}, ${2:integer num}, ${3:string str}, ${4:key id});\\n\\\n\t$0\\n\\\nsnippet llMinEventDelay\\n\\\n\tllMinEventDelay(${1:float delay});\\n\\\n\t$0\\n\\\nsnippet llModifyLand\\n\\\n\tllModifyLand(${1:integer action}, ${2:integer brush});\\n\\\n\t$0\\n\\\nsnippet llModPow\\n\\\n\tllModPow(${1:integer a}, ${2:integer b}, ${3:integer c})\\n\\\nsnippet llMoveToTarget\\n\\\n\tllMoveToTarget(${1:vector target}, ${2:float tau});\\n\\\n\t$0\\n\\\nsnippet llNavigateTo\\n\\\n\tllNavigateTo(${1:vector pos}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llOffsetTexture\\n\\\n\tllOffsetTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llOpenRemoteDataChannel\\n\\\n\tllOpenRemoteDataChannel();\\n\\\n\t$0\\n\\\nsnippet llOverMyLand\\n\\\n\tllOverMyLand(${1:key id})\\n\\\nsnippet llOwnerSay\\n\\\n\tllOwnerSay(${1:string msg});\\n\\\n\t$0\\n\\\nsnippet llParcelMediaCommandList\\n\\\n\tllParcelMediaCommandList(${1:list commandList});\\n\\\n\t$0\\n\\\nsnippet llParcelMediaQuery\\n\\\n\tllParcelMediaQuery(${1:list query})\\n\\\nsnippet llParseString2List\\n\\\n\tllParseString2List(${1:string src}, ${2:list separators}, ${3:list spacers})\\n\\\nsnippet llParseStringKeepNulls\\n\\\n\tllParseStringKeepNulls(${1:string src}, ${2:list separators}, ${3:list spacers})\\n\\\nsnippet llParticleSystem\\n\\\n\tllParticleSystem(${1:list rules});\\n\\\n\t$0\\n\\\nsnippet llPassCollisions\\n\\\n\tllPassCollisions(${1:integer pass});\\n\\\n\t$0\\n\\\nsnippet llPassTouches\\n\\\n\tllPassTouches(${1:integer pass});\\n\\\n\t$0\\n\\\nsnippet llPatrolPoints\\n\\\n\tllPatrolPoints(${1:list patrolPoints}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llPlaySound\\n\\\n\tllPlaySound(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llPlaySoundSlave\\n\\\n\tllPlaySoundSlave(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llPow\\n\\\n\tllPow(${1:float base}, ${2:float exponent})\\n\\\nsnippet llPreloadSound\\n\\\n\tllPreloadSound(${1:string sound});\\n\\\n\t$0\\n\\\nsnippet llPursue\\n\\\n\tllPursue(${1:key target}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llPushObject\\n\\\n\tllPushObject(${1:key target}, ${2:vector impulse}, ${3:vector ang_impulse}, ${4:integer local});\\n\\\n\t$0\\n\\\nsnippet llReadKeyValue\\n\\\n\tllReadKeyValue(${1:string k})\\n\\\nsnippet llRegionSay\\n\\\n\tllRegionSay(${1:integer channel}, ${2:string msg});\\n\\\n\t$0\\n\\\nsnippet llRegionSayTo\\n\\\n\tllRegionSayTo(${1:key target}, ${2:integer channel}, ${3:string msg});\\n\\\n\t$0\\n\\\nsnippet llReleaseControls\\n\\\n\tllReleaseControls();\\n\\\n\t$0\\n\\\nsnippet llReleaseURL\\n\\\n\tllReleaseURL(${1:string url});\\n\\\n\t$0\\n\\\nsnippet llRemoteDataReply\\n\\\n\tllRemoteDataReply(${1:key channel}, ${2:key message_id}, ${3:string sdata}, ${4:integer idata});\\n\\\n\t$0\\n\\\nsnippet llRemoteLoadScriptPin\\n\\\n\tllRemoteLoadScriptPin(${1:key target}, ${2:string name}, ${3:integer pin}, ${4:integer running}, ${5:integer start_param});\\n\\\n\t$0\\n\\\nsnippet llRemoveFromLandBanList\\n\\\n\tllRemoveFromLandBanList(${1:key agent});\\n\\\n\t$0\\n\\\nsnippet llRemoveFromLandPassList\\n\\\n\tllRemoveFromLandPassList(${1:key agent});\\n\\\n\t$0\\n\\\nsnippet llRemoveInventory\\n\\\n\tllRemoveInventory(${1:string item});\\n\\\n\t$0\\n\\\nsnippet llRemoveVehicleFlags\\n\\\n\tllRemoveVehicleFlags(${1:integer flags});\\n\\\n\t$0\\n\\\nsnippet llRequestAgentData\\n\\\n\tllRequestAgentData(${1:key id}, ${2:integer data})\\n\\\nsnippet llRequestDisplayName\\n\\\n\tllRequestDisplayName(${1:key id})\\n\\\nsnippet llRequestExperiencePermissions\\n\\\n\tllRequestExperiencePermissions(${1:key agent}, ${2:string name})\\n\\\nsnippet llRequestInventoryData\\n\\\n\tllRequestInventoryData(${1:string name})\\n\\\nsnippet llRequestPermissions\\n\\\n\tllRequestPermissions(${1:key agent}, ${2:integer permissions})\\n\\\nsnippet llRequestSecureURL\\n\\\n\tllRequestSecureURL()\\n\\\nsnippet llRequestSimulatorData\\n\\\n\tllRequestSimulatorData(${1:string region}, ${2:integer data})\\n\\\nsnippet llRequestURL\\n\\\n\tllRequestURL()\\n\\\nsnippet llRequestUsername\\n\\\n\tllRequestUsername(${1:key id})\\n\\\nsnippet llResetAnimationOverride\\n\\\n\tllResetAnimationOverride(${1:string anim_state});\\n\\\n\t$0\\n\\\nsnippet llResetLandBanList\\n\\\n\tllResetLandBanList();\\n\\\n\t$0\\n\\\nsnippet llResetLandPassList\\n\\\n\tllResetLandPassList();\\n\\\n\t$0\\n\\\nsnippet llResetOtherScript\\n\\\n\tllResetOtherScript(${1:string name});\\n\\\n\t$0\\n\\\nsnippet llResetScript\\n\\\n\tllResetScript();\\n\\\n\t$0\\n\\\nsnippet llResetTime\\n\\\n\tllResetTime();\\n\\\n\t$0\\n\\\nsnippet llReturnObjectsByID\\n\\\n\tllReturnObjectsByID(${1:list objects})\\n\\\nsnippet llReturnObjectsByOwner\\n\\\n\tllReturnObjectsByOwner(${1:key owner}, ${2:integer scope})\\n\\\nsnippet llRezAtRoot\\n\\\n\tllRezAtRoot(${1:string inventory}, ${2:vector position}, ${3:vector velocity}, ${4:rotation rot}, ${5:integer param});\\n\\\n\t$0\\n\\\nsnippet llRezObject\\n\\\n\tllRezObject(${1:string inventory}, ${2:vector pos}, ${3:vector vel}, ${4:rotation rot}, ${5:integer param});\\n\\\n\t$0\\n\\\nsnippet llRot2Angle\\n\\\n\tllRot2Angle(${1:rotation rot})\\n\\\nsnippet llRot2Axis\\n\\\n\tllRot2Axis(${1:rotation rot})\\n\\\nsnippet llRot2Euler\\n\\\n\tllRot2Euler(${1:rotation quat})\\n\\\nsnippet llRot2Fwd\\n\\\n\tllRot2Fwd(${1:rotation q})\\n\\\nsnippet llRot2Left\\n\\\n\tllRot2Left(${1:rotation q})\\n\\\nsnippet llRot2Up\\n\\\n\tllRot2Up(${1:rotation q})\\n\\\nsnippet llRotateTexture\\n\\\n\tllRotateTexture(${1:float angle}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llRotBetween\\n\\\n\tllRotBetween(${1:vector start}, ${2:vector end})\\n\\\nsnippet llRotLookAt\\n\\\n\tllRotLookAt(${1:rotation target_direction}, ${2:float strength}, ${3:float damping});\\n\\\n\t$0\\n\\\nsnippet llRotTarget\\n\\\n\tllRotTarget(${1:rotation rot}, ${2:float error})\\n\\\nsnippet llRotTargetRemove\\n\\\n\tllRotTargetRemove(${1:integer handle});\\n\\\n\t$0\\n\\\nsnippet llRound\\n\\\n\tllRound(${1:float val})\\n\\\nsnippet llSameGroup\\n\\\n\tllSameGroup(${1:key group})\\n\\\nsnippet llSay\\n\\\n\tllSay(${1:integer channel}, ${2:string msg});\\n\\\n\t$0\\n\\\nsnippet llScaleByFactor\\n\\\n\tllScaleByFactor(${1:float scaling_factor})\\n\\\nsnippet llScaleTexture\\n\\\n\tllScaleTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llScriptDanger\\n\\\n\tllScriptDanger(${1:vector pos})\\n\\\nsnippet llScriptProfiler\\n\\\n\tllScriptProfiler(${1:integer flags});\\n\\\n\t$0\\n\\\nsnippet llSendRemoteData\\n\\\n\tllSendRemoteData(${1:key channel}, ${2:string dest}, ${3:integer idata}, ${4:string sdata})\\n\\\nsnippet llSensor\\n\\\n\tllSensor(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc});\\n\\\n\t$0\\n\\\nsnippet llSensorRepeat\\n\\\n\tllSensorRepeat(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc}, ${6:float rate});\\n\\\n\t$0\\n\\\nsnippet llSetAlpha\\n\\\n\tllSetAlpha(${1:float alpha}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetAngularVelocity\\n\\\n\tllSetAngularVelocity(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llSetAnimationOverride\\n\\\n\tllSetAnimationOverride(${1:string anim_state}, ${2:string anim})\\n\\\nsnippet llSetBuoyancy\\n\\\n\tllSetBuoyancy(${1:float buoyancy});\\n\\\n\t$0\\n\\\nsnippet llSetCameraAtOffset\\n\\\n\tllSetCameraAtOffset(${1:vector offset});\\n\\\n\t$0\\n\\\nsnippet llSetCameraEyeOffset\\n\\\n\tllSetCameraEyeOffset(${1:vector offset});\\n\\\n\t$0\\n\\\nsnippet llSetCameraParams\\n\\\n\tllSetCameraParams(${1:list rules});\\n\\\n\t$0\\n\\\nsnippet llSetClickAction\\n\\\n\tllSetClickAction(${1:integer action});\\n\\\n\t$0\\n\\\nsnippet llSetColor\\n\\\n\tllSetColor(${1:vector color}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetContentType\\n\\\n\tllSetContentType(${1:key request_id}, ${2:integer content_type});\\n\\\n\t$0\\n\\\nsnippet llSetDamage\\n\\\n\tllSetDamage(${1:float damage});\\n\\\n\t$0\\n\\\nsnippet llSetForce\\n\\\n\tllSetForce(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llSetForceAndTorque\\n\\\n\tllSetForceAndTorque(${1:vector force}, ${2:vector torque}, ${3:integer local});\\n\\\n\t$0\\n\\\nsnippet llSetHoverHeight\\n\\\n\tllSetHoverHeight(${1:float height}, ${2:integer water}, ${3:float tau});\\n\\\n\t$0\\n\\\nsnippet llSetKeyframedMotion\\n\\\n\tllSetKeyframedMotion(${1:list keyframes}, ${2:list options});\\n\\\n\t$0\\n\\\nsnippet llSetLinkAlpha\\n\\\n\tllSetLinkAlpha(${1:integer link}, ${2:float alpha}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetLinkCamera\\n\\\n\tllSetLinkCamera(${1:integer link}, ${2:vector eye}, ${3:vector at});\\n\\\n\t$0\\n\\\nsnippet llSetLinkColor\\n\\\n\tllSetLinkColor(${1:integer link}, ${2:vector color}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetLinkMedia\\n\\\n\tllSetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params});\\n\\\n\t$0\\n\\\nsnippet llSetLinkPrimitiveParams\\n\\\n\tllSetLinkPrimitiveParams(${1:integer link}, ${2:list rules});\\n\\\n\t$0\\n\\\nsnippet llSetLinkPrimitiveParamsFast\\n\\\n\tllSetLinkPrimitiveParamsFast(${1:integer link}, ${2:list rules});\\n\\\n\t$0\\n\\\nsnippet llSetLinkTexture\\n\\\n\tllSetLinkTexture(${1:integer link}, ${2:string texture}, ${3:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetLinkTextureAnim\\n\\\n\tllSetLinkTextureAnim(${1:integer link}, ${2:integer mode}, ${3:integer face}, ${4:integer sizex}, ${5:integer sizey}, ${6:float start}, ${7:float length}, ${8:float rate});\\n\\\n\t$0\\n\\\nsnippet llSetLocalRot\\n\\\n\tllSetLocalRot(${1:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llSetMemoryLimit\\n\\\n\tllSetMemoryLimit(${1:integer limit})\\n\\\nsnippet llSetObjectDesc\\n\\\n\tllSetObjectDesc(${1:string description});\\n\\\n\t$0\\n\\\nsnippet llSetObjectName\\n\\\n\tllSetObjectName(${1:string name});\\n\\\n\t$0\\n\\\nsnippet llSetParcelMusicURL\\n\\\n\tllSetParcelMusicURL(${1:string url});\\n\\\n\t$0\\n\\\nsnippet llSetPayPrice\\n\\\n\tllSetPayPrice(${1:integer price}, [${2:integer price_button_a}, ${3:integer price_button_b}, ${4:integer price_button_c}, ${5:integer price_button_d}]);\\n\\\n\t$0\\n\\\nsnippet llSetPhysicsMaterial\\n\\\n\tllSetPhysicsMaterial(${1:integer mask}, ${2:float gravity_multiplier}, ${3:float restitution}, ${4:float friction}, ${5:float density});\\n\\\n\t$0\\n\\\nsnippet llSetPos\\n\\\n\tllSetPos(${1:vector pos});\\n\\\n\t$0\\n\\\nsnippet llSetPrimitiveParams\\n\\\n\tllSetPrimitiveParams(${1:list rules});\\n\\\n\t$0\\n\\\nsnippet llSetPrimMediaParams\\n\\\n\tllSetPrimMediaParams(${1:integer face}, ${2:list params});\\n\\\n\t$0\\n\\\nsnippet llSetRegionPos\\n\\\n\tllSetRegionPos(${1:vector position})\\n\\\nsnippet llSetRemoteScriptAccessPin\\n\\\n\tllSetRemoteScriptAccessPin(${1:integer pin});\\n\\\n\t$0\\n\\\nsnippet llSetRot\\n\\\n\tllSetRot(${1:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llSetScale\\n\\\n\tllSetScale(${1:vector size});\\n\\\n\t$0\\n\\\nsnippet llSetScriptState\\n\\\n\tllSetScriptState(${1:string name}, ${2:integer run});\\n\\\n\t$0\\n\\\nsnippet llSetSitText\\n\\\n\tllSetSitText(${1:string text});\\n\\\n\t$0\\n\\\nsnippet llSetSoundQueueing\\n\\\n\tllSetSoundQueueing(${1:integer queue});\\n\\\n\t$0\\n\\\nsnippet llSetSoundRadius\\n\\\n\tllSetSoundRadius(${1:float radius});\\n\\\n\t$0\\n\\\nsnippet llSetStatus\\n\\\n\tllSetStatus(${1:integer status}, ${2:integer value});\\n\\\n\t$0\\n\\\nsnippet llSetText\\n\\\n\tllSetText(${1:string text}, ${2:vector color}, ${3:float alpha});\\n\\\n\t$0\\n\\\nsnippet llSetTexture\\n\\\n\tllSetTexture(${1:string texture}, ${2:integer face});\\n\\\n\t$0\\n\\\nsnippet llSetTextureAnim\\n\\\n\tllSetTextureAnim(${1:integer mode}, ${2:integer face}, ${3:integer sizex}, ${4:integer sizey}, ${5:float start}, ${6:float length}, ${7:float rate});\\n\\\n\t$0\\n\\\nsnippet llSetTimerEvent\\n\\\n\tllSetTimerEvent(${1:float sec});\\n\\\n\t$0\\n\\\nsnippet llSetTorque\\n\\\n\tllSetTorque(${1:vector torque}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llSetTouchText\\n\\\n\tllSetTouchText(${1:string text});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleFlags\\n\\\n\tllSetVehicleFlags(${1:integer flags});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleFloatParam\\n\\\n\tllSetVehicleFloatParam(${1:integer param}, ${2:float value});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleRotationParam\\n\\\n\tllSetVehicleRotationParam(${1:integer param}, ${2:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleType\\n\\\n\tllSetVehicleType(${1:integer type});\\n\\\n\t$0\\n\\\nsnippet llSetVehicleVectorParam\\n\\\n\tllSetVehicleVectorParam(${1:integer param}, ${2:vector vec});\\n\\\n\t$0\\n\\\nsnippet llSetVelocity\\n\\\n\tllSetVelocity(${1:vector force}, ${2:integer local});\\n\\\n\t$0\\n\\\nsnippet llSHA1String\\n\\\n\tllSHA1String(${1:string src})\\n\\\nsnippet llShout\\n\\\n\tllShout(${1:integer channel}, ${2:string msg});\\n\\\n\t$0\\n\\\nsnippet llSin\\n\\\n\tllSin(${1:float theta})\\n\\\nsnippet llSitTarget\\n\\\n\tllSitTarget(${1:vector offset}, ${2:rotation rot});\\n\\\n\t$0\\n\\\nsnippet llSleep\\n\\\n\tllSleep(${1:float sec});\\n\\\n\t$0\\n\\\nsnippet llSqrt\\n\\\n\tllSqrt(${1:float val})\\n\\\nsnippet llStartAnimation\\n\\\n\tllStartAnimation(${1:string anim});\\n\\\n\t$0\\n\\\nsnippet llStopAnimation\\n\\\n\tllStopAnimation(${1:string anim});\\n\\\n\t$0\\n\\\nsnippet llStopHover\\n\\\n\tllStopHover();\\n\\\n\t$0\\n\\\nsnippet llStopLookAt\\n\\\n\tllStopLookAt();\\n\\\n\t$0\\n\\\nsnippet llStopMoveToTarget\\n\\\n\tllStopMoveToTarget();\\n\\\n\t$0\\n\\\nsnippet llStopSound\\n\\\n\tllStopSound();\\n\\\n\t$0\\n\\\nsnippet llStringLength\\n\\\n\tllStringLength(${1:string str})\\n\\\nsnippet llStringToBase64\\n\\\n\tllStringToBase64(${1:string str})\\n\\\nsnippet llStringTrim\\n\\\n\tllStringTrim(${1:string src}, ${2:integer type})\\n\\\nsnippet llSubStringIndex\\n\\\n\tllSubStringIndex(${1:string source}, ${2:string pattern})\\n\\\nsnippet llTakeControls\\n\\\n\tllTakeControls(${1:integer controls}, ${2:integer accept}, ${3:integer pass_on});\\n\\\n\t$0\\n\\\nsnippet llTan\\n\\\n\tllTan(${1:float theta})\\n\\\nsnippet llTarget\\n\\\n\tllTarget(${1:vector position}, ${2:float range})\\n\\\nsnippet llTargetOmega\\n\\\n\tllTargetOmega(${1:vector axis}, ${2:float spinrate}, ${3:float gain});\\n\\\n\t$0\\n\\\nsnippet llTargetRemove\\n\\\n\tllTargetRemove(${1:integer handle});\\n\\\n\t$0\\n\\\nsnippet llTeleportAgent\\n\\\n\tllTeleportAgent(${1:key agent}, ${2:string landmark}, ${3:vector position}, ${4:vector look_at});\\n\\\n\t$0\\n\\\nsnippet llTeleportAgentGlobalCoords\\n\\\n\tllTeleportAgentGlobalCoords(${1:key agent}, ${2:vector global_coordinates}, ${3:vector region_coordinates}, ${4:vector look_at});\\n\\\n\t$0\\n\\\nsnippet llTeleportAgentHome\\n\\\n\tllTeleportAgentHome(${1:key agent});\\n\\\n\t$0\\n\\\nsnippet llTextBox\\n\\\n\tllTextBox(${1:key agent}, ${2:string message}, ${3:integer channel});\\n\\\n\t$0\\n\\\nsnippet llToLower\\n\\\n\tllToLower(${1:string src})\\n\\\nsnippet llToUpper\\n\\\n\tllToUpper(${1:string src})\\n\\\nsnippet llTransferLindenDollars\\n\\\n\tllTransferLindenDollars(${1:key destination}, ${2:integer amount})\\n\\\nsnippet llTriggerSound\\n\\\n\tllTriggerSound(${1:string sound}, ${2:float volume});\\n\\\n\t$0\\n\\\nsnippet llTriggerSoundLimited\\n\\\n\tllTriggerSoundLimited(${1:string sound}, ${2:float volume}, ${3:vector top_north_east}, ${4:vector bottom_south_west});\\n\\\n\t$0\\n\\\nsnippet llUnescapeURL\\n\\\n\tllUnescapeURL(${1:string url})\\n\\\nsnippet llUnSit\\n\\\n\tllUnSit(${1:key id});\\n\\\n\t$0\\n\\\nsnippet llUpdateCharacter\\n\\\n\tllUpdateCharacter(${1:list options})\\n\\\nsnippet llUpdateKeyValue\\n\\\n\tllUpdateKeyValue(${1:string k}, ${2:string v}, ${3:integer checked}, ${4:string ov})\\n\\\nsnippet llVecDist\\n\\\n\tllVecDist(${1:vector vec_a}, ${2:vector vec_b})\\n\\\nsnippet llVecMag\\n\\\n\tllVecMag(${1:vector vec})\\n\\\nsnippet llVecNorm\\n\\\n\tllVecNorm(${1:vector vec})\\n\\\nsnippet llVolumeDetect\\n\\\n\tllVolumeDetect(${1:integer detect});\\n\\\n\t$0\\n\\\nsnippet llWanderWithin\\n\\\n\tllWanderWithin(${1:vector origin}, ${2:vector dist}, ${3:list options});\\n\\\n\t$0\\n\\\nsnippet llWater\\n\\\n\tllWater(${1:vector offset});\\n\\\n\t$0\\n\\\nsnippet llWhisper\\n\\\n\tllWhisper(${1:integer channel}, ${2:string msg});\\n\\\n\t$0\\n\\\nsnippet llWind\\n\\\n\tllWind(${1:vector offset});\\n\\\n\t$0\\n\\\nsnippet llXorBase64\\n\\\n\tllXorBase64(${1:string str1}, ${2:string str2})\\n\\\nsnippet money\\n\\\n\tmoney(${1:key id}, ${2:integer amount})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet object_rez\\n\\\n\tobject_rez(${1:key id})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet on_rez\\n\\\n\ton_rez(${1:integer start_param})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet path_update\\n\\\n\tpath_update(${1:integer type}, ${2:list reserved})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet remote_data\\n\\\n\tremote_data(${1:integer event_type}, ${2:key channel}, ${3:key message_id}, ${4:string sender}, ${5:integer idata}, ${6:string sdata})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet run_time_permissions\\n\\\n\trun_time_permissions(${1:integer perm})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet sensor\\n\\\n\tsensor(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet state\\n\\\n\tstate ${1:name}\\n\\\nsnippet touch\\n\\\n\ttouch(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet touch_end\\n\\\n\ttouch_end(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet touch_start\\n\\\n\ttouch_start(${1:integer index})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet transaction_result\\n\\\n\ttransaction_result(${1:key id}, ${2:integer success}, ${3:string data})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\nsnippet while\\n\\\n\twhile (${1:condition})\\n\\\n\t{\\n\\\n\t\t$0\\n\\\n\t}\\n\\\n\";\nexports.scope = \"lsl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/lua.js",
    "content": "ace.define(\"ace/snippets/lua\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet #!\\n\\\n\t#!/usr/bin/env lua\\n\\\n\t$1\\n\\\nsnippet local\\n\\\n\tlocal ${1:x} = ${2:1}\\n\\\nsnippet fun\\n\\\n\tfunction ${1:fname}(${2:...})\\n\\\n\t\t${3:-- body}\\n\\\n\tend\\n\\\nsnippet for\\n\\\n\tfor ${1:i}=${2:1},${3:10} do\\n\\\n\t\t${4:print(i)}\\n\\\n\tend\\n\\\nsnippet forp\\n\\\n\tfor ${1:i},${2:v} in pairs(${3:table_name}) do\\n\\\n\t   ${4:-- body}\\n\\\n\tend\\n\\\nsnippet fori\\n\\\n\tfor ${1:i},${2:v} in ipairs(${3:table_name}) do\\n\\\n\t   ${4:-- body}\\n\\\n\tend\\n\\\n\";\nexports.scope = \"lua\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/luapage.js",
    "content": "ace.define(\"ace/snippets/luapage\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"luapage\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/lucene.js",
    "content": "ace.define(\"ace/snippets/lucene\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"lucene\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/makefile.js",
    "content": "ace.define(\"ace/snippets/makefile\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet ifeq\\n\\\n\tifeq (${1:cond0},${2:cond1})\\n\\\n\t\t${3:code}\\n\\\n\tendif\\n\\\n\";\nexports.scope = \"makefile\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/markdown.js",
    "content": "ace.define(\"ace/snippets/markdown\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Markdown\\n\\\n\\n\\\n# Includes octopress (http://octopress.org/) snippets\\n\\\n\\n\\\nsnippet [\\n\\\n\t[${1:text}](http://${2:address} \\\"${3:title}\\\")\\n\\\nsnippet [*\\n\\\n\t[${1:link}](${2:`@*`} \\\"${3:title}\\\")${4}\\n\\\n\\n\\\nsnippet [:\\n\\\n\t[${1:id}]: http://${2:url} \\\"${3:title}\\\"\\n\\\nsnippet [:*\\n\\\n\t[${1:id}]: ${2:`@*`} \\\"${3:title}\\\"\\n\\\n\\n\\\nsnippet ![\\n\\\n\t![${1:alttext}](${2:/images/image.jpg} \\\"${3:title}\\\")\\n\\\nsnippet ![*\\n\\\n\t![${1:alt}](${2:`@*`} \\\"${3:title}\\\")${4}\\n\\\n\\n\\\nsnippet ![:\\n\\\n\t![${1:id}]: ${2:url} \\\"${3:title}\\\"\\n\\\nsnippet ![:*\\n\\\n\t![${1:id}]: ${2:`@*`} \\\"${3:title}\\\"\\n\\\n\\n\\\nsnippet ===\\n\\\nregex /^/=+/=*//\\n\\\n\t${PREV_LINE/./=/g}\\n\\\n\t\\n\\\n\t${0}\\n\\\nsnippet ---\\n\\\nregex /^/-+/-*//\\n\\\n\t${PREV_LINE/./-/g}\\n\\\n\t\\n\\\n\t${0}\\n\\\nsnippet blockquote\\n\\\n\t{% blockquote %}\\n\\\n\t${1:quote}\\n\\\n\t{% endblockquote %}\\n\\\n\\n\\\nsnippet blockquote-author\\n\\\n\t{% blockquote ${1:author}, ${2:title} %}\\n\\\n\t${3:quote}\\n\\\n\t{% endblockquote %}\\n\\\n\\n\\\nsnippet blockquote-link\\n\\\n\t{% blockquote ${1:author} ${2:URL} ${3:link_text} %}\\n\\\n\t${4:quote}\\n\\\n\t{% endblockquote %}\\n\\\n\\n\\\nsnippet bt-codeblock-short\\n\\\n\t```\\n\\\n\t${1:code_snippet}\\n\\\n\t```\\n\\\n\\n\\\nsnippet bt-codeblock-full\\n\\\n\t``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\\n\\\n\t${5:code_snippet}\\n\\\n\t```\\n\\\n\\n\\\nsnippet codeblock-short\\n\\\n\t{% codeblock %}\\n\\\n\t${1:code_snippet}\\n\\\n\t{% endcodeblock %}\\n\\\n\\n\\\nsnippet codeblock-full\\n\\\n\t{% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\\n\\\n\t${5:code_snippet}\\n\\\n\t{% endcodeblock %}\\n\\\n\\n\\\nsnippet gist-full\\n\\\n\t{% gist ${1:gist_id} ${2:filename} %}\\n\\\n\\n\\\nsnippet gist-short\\n\\\n\t{% gist ${1:gist_id} %}\\n\\\n\\n\\\nsnippet img\\n\\\n\t{% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\\n\\\n\\n\\\nsnippet youtube\\n\\\n\t{% youtube ${1:video_id} %}\\n\\\n\\n\\\n# The quote should appear only once in the text. It is inherently part of it.\\n\\\n# See http://octopress.org/docs/plugins/pullquote/ for more info.\\n\\\n\\n\\\nsnippet pullquote\\n\\\n\t{% pullquote %}\\n\\\n\t${1:text} {\\\" ${2:quote} \\\"} ${3:text}\\n\\\n\t{% endpullquote %}\\n\\\n\";\nexports.scope = \"markdown\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/mask.js",
    "content": "ace.define(\"ace/snippets/mask\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mask\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/matlab.js",
    "content": "ace.define(\"ace/snippets/matlab\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"matlab\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/maze.js",
    "content": "ace.define(\"ace/snippets/maze\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet >\\n\\\ndescription assignment\\n\\\nscope maze\\n\\\n\t-> ${1}= ${2}\\n\\\n\\n\\\nsnippet >\\n\\\ndescription if\\n\\\nscope maze\\n\\\n\t-> IF ${2:**} THEN %${3:L} ELSE %${4:R}\\n\\\n\";\nexports.scope = \"maze\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/mel.js",
    "content": "ace.define(\"ace/snippets/mel\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mel\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/mixal.js",
    "content": "ace.define(\"ace/snippets/mixal\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mixal\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/mushcode.js",
    "content": "ace.define(\"ace/snippets/mushcode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mushcode\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/mysql.js",
    "content": "ace.define(\"ace/snippets/mysql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"mysql\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/nix.js",
    "content": "ace.define(\"ace/snippets/nix\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"nix\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/nsis.js",
    "content": "ace.define(\"ace/snippets/nsis\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/objectivec.js",
    "content": "ace.define(\"ace/snippets/objectivec\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"objectivec\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/ocaml.js",
    "content": "ace.define(\"ace/snippets/ocaml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"ocaml\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/pascal.js",
    "content": "ace.define(\"ace/snippets/pascal\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"pascal\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/perl.js",
    "content": "ace.define(\"ace/snippets/perl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# #!/usr/bin/perl\\n\\\nsnippet #!\\n\\\n\t#!/usr/bin/env perl\\n\\\n\\n\\\n# Hash Pointer\\n\\\nsnippet .\\n\\\n\t =>\\n\\\n# Function\\n\\\nsnippet sub\\n\\\n\tsub ${1:function_name} {\\n\\\n\t\t${2:#body ...}\\n\\\n\t}\\n\\\n# Conditional\\n\\\nsnippet if\\n\\\n\tif (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# Conditional if..else\\n\\\nsnippet ife\\n\\\n\tif (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n\telse {\\n\\\n\t\t${3:# else...}\\n\\\n\t}\\n\\\n# Conditional if..elsif..else\\n\\\nsnippet ifee\\n\\\n\tif (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n\telsif (${3}) {\\n\\\n\t\t${4:# elsif...}\\n\\\n\t}\\n\\\n\telse {\\n\\\n\t\t${5:# else...}\\n\\\n\t}\\n\\\n# Conditional One-line\\n\\\nsnippet xif\\n\\\n\t${1:expression} if ${2:condition};${3}\\n\\\n# Unless conditional\\n\\\nsnippet unless\\n\\\n\tunless (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# Unless conditional One-line\\n\\\nsnippet xunless\\n\\\n\t${1:expression} unless ${2:condition};${3}\\n\\\n# Try/Except\\n\\\nsnippet eval\\n\\\n\tlocal $@;\\n\\\n\teval {\\n\\\n\t\t${1:# do something risky...}\\n\\\n\t};\\n\\\n\tif (my $e = $@) {\\n\\\n\t\t${2:# handle failure...}\\n\\\n\t}\\n\\\n# While Loop\\n\\\nsnippet wh\\n\\\n\twhile (${1}) {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# While Loop One-line\\n\\\nsnippet xwh\\n\\\n\t${1:expression} while ${2:condition};${3}\\n\\\n# C-style For Loop\\n\\\nsnippet cfor\\n\\\n\tfor (my $${2:var} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\\\n\t\t${4:# body...}\\n\\\n\t}\\n\\\n# For loop one-line\\n\\\nsnippet xfor\\n\\\n\t${1:expression} for @${2:array};${3}\\n\\\n# Foreach Loop\\n\\\nsnippet for\\n\\\n\tforeach my $${1:x} (@${2:array}) {\\n\\\n\t\t${3:# body...}\\n\\\n\t}\\n\\\n# Foreach Loop One-line\\n\\\nsnippet fore\\n\\\n\t${1:expression} foreach @${2:array};${3}\\n\\\n# Package\\n\\\nsnippet package\\n\\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`};\\n\\\n\\n\\\n\t${2}\\n\\\n\\n\\\n\t1;\\n\\\n\\n\\\n\t__END__\\n\\\n# Package syntax perl >= 5.14\\n\\\nsnippet packagev514\\n\\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`} ${2:0.99};\\n\\\n\\n\\\n\t${3}\\n\\\n\\n\\\n\t1;\\n\\\n\\n\\\n\t__END__\\n\\\n#moose\\n\\\nsnippet moose\\n\\\n\tuse Moose;\\n\\\n\tuse namespace::autoclean;\\n\\\n\t${1:#}BEGIN {extends '${2:ParentClass}'};\\n\\\n\\n\\\n\t${3}\\n\\\n# parent\\n\\\nsnippet parent\\n\\\n\tuse parent qw(${1:Parent Class});\\n\\\n# Read File\\n\\\nsnippet slurp\\n\\\n\tmy $${1:var} = do { local $/; open my $file, '<', \\\"${2:file}\\\"; <$file> };\\n\\\n\t${3}\\n\\\n# strict warnings\\n\\\nsnippet strwar\\n\\\n\tuse strict;\\n\\\n\tuse warnings;\\n\\\n# older versioning with perlcritic bypass\\n\\\nsnippet vers\\n\\\n\t## no critic\\n\\\n\tour $VERSION = '${1:version}';\\n\\\n\teval $VERSION;\\n\\\n\t## use critic\\n\\\n# new 'switch' like feature\\n\\\nsnippet switch\\n\\\n\tuse feature 'switch';\\n\\\n\\n\\\n# Anonymous subroutine\\n\\\nsnippet asub\\n\\\n\tsub {\\n\\\n\t \t${1:# body }\\n\\\n\t}\\n\\\n\\n\\\n\\n\\\n\\n\\\n# Begin block\\n\\\nsnippet begin\\n\\\n\tBEGIN {\\n\\\n\t\t${1:# begin body}\\n\\\n\t}\\n\\\n\\n\\\n# call package function with some parameter\\n\\\nsnippet pkgmv\\n\\\n\t__PACKAGE__->${1:package_method}(${2:var})\\n\\\n\\n\\\n# call package function without a parameter\\n\\\nsnippet pkgm\\n\\\n\t__PACKAGE__->${1:package_method}()\\n\\\n\\n\\\n# call package \\\"get_\\\" function without a parameter\\n\\\nsnippet pkget\\n\\\n\t__PACKAGE__->get_${1:package_method}()\\n\\\n\\n\\\n# call package function with a parameter\\n\\\nsnippet pkgetv\\n\\\n\t__PACKAGE__->get_${1:package_method}(${2:var})\\n\\\n\\n\\\n# complex regex\\n\\\nsnippet qrx\\n\\\n\tqr/\\n\\\n\t     ${1:regex}\\n\\\n\t/xms\\n\\\n\\n\\\n#simpler regex\\n\\\nsnippet qr/\\n\\\n\tqr/${1:regex}/x\\n\\\n\\n\\\n#given\\n\\\nsnippet given\\n\\\n\tgiven ($${1:var}) {\\n\\\n\t\t${2:# cases}\\n\\\n\t\t${3:# default}\\n\\\n\t}\\n\\\n\\n\\\n# switch-like case\\n\\\nsnippet when\\n\\\n\twhen (${1:case}) {\\n\\\n\t\t${2:# body}\\n\\\n\t}\\n\\\n\\n\\\n# hash slice\\n\\\nsnippet hslice\\n\\\n\t@{ ${1:hash}  }{ ${2:array} }\\n\\\n\\n\\\n\\n\\\n# map\\n\\\nsnippet map\\n\\\n\tmap {  ${2: body }    }  ${1: @array } ;\\n\\\n\\n\\\n\\n\\\n\\n\\\n# Pod stub\\n\\\nsnippet ppod\\n\\\n\t=head1 NAME\\n\\\n\\n\\\n\t${1:ClassName} - ${2:ShortDesc}\\n\\\n\\n\\\n\t=head1 SYNOPSIS\\n\\\n\\n\\\n\t  use $1;\\n\\\n\\n\\\n\t  ${3:# synopsis...}\\n\\\n\\n\\\n\t=head1 DESCRIPTION\\n\\\n\\n\\\n\t${4:# longer description...}\\n\\\n\\n\\\n\\n\\\n\t=head1 INTERFACE\\n\\\n\\n\\\n\\n\\\n\t=head1 DEPENDENCIES\\n\\\n\\n\\\n\\n\\\n\t=head1 SEE ALSO\\n\\\n\\n\\\n\\n\\\n# Heading for a subroutine stub\\n\\\nsnippet psub\\n\\\n\t=head2 ${1:MethodName}\\n\\\n\\n\\\n\t${2:Summary....}\\n\\\n\\n\\\n# Heading for inline subroutine pod\\n\\\nsnippet psubi\\n\\\n\t=head2 ${1:MethodName}\\n\\\n\\n\\\n\t${2:Summary...}\\n\\\n\\n\\\n\\n\\\n\t=cut\\n\\\n# inline documented subroutine\\n\\\nsnippet subpod\\n\\\n\t=head2 $1\\n\\\n\\n\\\n\tSummary of $1\\n\\\n\\n\\\n\t=cut\\n\\\n\\n\\\n\tsub ${1:subroutine_name} {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# Subroutine signature\\n\\\nsnippet parg\\n\\\n\t=over 2\\n\\\n\\n\\\n\t=item\\n\\\n\tArguments\\n\\\n\\n\\\n\\n\\\n\t=over 3\\n\\\n\\n\\\n\t=item\\n\\\n\tC<${1:DataStructure}>\\n\\\n\\n\\\n\t  ${2:Sample}\\n\\\n\\n\\\n\\n\\\n\t=back\\n\\\n\\n\\\n\\n\\\n\t=item\\n\\\n\tReturn\\n\\\n\\n\\\n\t=over 3\\n\\\n\\n\\\n\\n\\\n\t=item\\n\\\n\tC<${3:...return data}>\\n\\\n\\n\\\n\\n\\\n\t=back\\n\\\n\\n\\\n\\n\\\n\t=back\\n\\\n\\n\\\n\\n\\\n\\n\\\n# Moose has\\n\\\nsnippet has\\n\\\n\thas ${1:attribute} => (\\n\\\n\t\tis\t    => '${2:ro|rw}',\\n\\\n\t\tisa \t=> '${3:Str|Int|HashRef|ArrayRef|etc}',\\n\\\n\t\tdefault => sub {\\n\\\n\t\t\t${4:defaultvalue}\\n\\\n\t\t},\\n\\\n\t\t${5:# other attributes}\\n\\\n\t);\\n\\\n\\n\\\n\\n\\\n# override\\n\\\nsnippet override\\n\\\n\toverride ${1:attribute} => sub {\\n\\\n\t\t${2:# my $self = shift;};\\n\\\n\t\t${3:# my ($self, $args) = @_;};\\n\\\n\t};\\n\\\n\\n\\\n\\n\\\n# use test classes\\n\\\nsnippet tuse\\n\\\n\tuse Test::More;\\n\\\n\tuse Test::Deep; # (); # uncomment to stop prototype errors\\n\\\n\tuse Test::Exception;\\n\\\n\\n\\\n# local test lib\\n\\\nsnippet tlib\\n\\\n\tuse lib qw{ ./t/lib };\\n\\\n\\n\\\n#test methods\\n\\\nsnippet tmeths\\n\\\n\t$ENV{TEST_METHOD} = '${1:regex}';\\n\\\n\\n\\\n# runtestclass\\n\\\nsnippet trunner\\n\\\n\tuse ${1:test_class};\\n\\\n\t$1->runtests();\\n\\\n\\n\\\n# Test::Class-style test\\n\\\nsnippet tsub\\n\\\n\tsub t${1:number}_${2:test_case} :Test(${3:num_of_tests}) {\\n\\\n\t\tmy $self = shift;\\n\\\n\t\t${4:#  body}\\n\\\n\\n\\\n\t}\\n\\\n\\n\\\n# Test::Routine-style test\\n\\\nsnippet trsub\\n\\\n\ttest ${1:test_name} => { description => '${2:Description of test.}'} => sub {\\n\\\n\t\tmy ($self) = @_;\\n\\\n\t\t${3:# test code}\\n\\\n\t};\\n\\\n\\n\\\n#prep test method\\n\\\nsnippet tprep\\n\\\n\tsub prep${1:number}_${2:test_case} :Test(startup) {\\n\\\n\t\tmy $self = shift;\\n\\\n\t\t${4:#  body}\\n\\\n\t}\\n\\\n\\n\\\n# cause failures to print stack trace\\n\\\nsnippet debug_trace\\n\\\n\tuse Carp; # 'verbose';\\n\\\n\t# cloak \\\"die\\\"\\n\\\n\t# warn \\\"warning\\\"\\n\\\n\t$SIG{'__DIE__'} = sub {\\n\\\n\t\trequire Carp; Carp::confess\\n\\\n\t};\\n\\\n\\n\\\n\";\nexports.scope = \"perl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/perl6.js",
    "content": "ace.define(\"ace/snippets/perl6\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"perl6\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/perl6\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/pgsql.js",
    "content": "ace.define(\"ace/snippets/pgsql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"pgsql\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/php.js",
    "content": "ace.define(\"ace/snippets/php\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet ec\\n\\\n\techo ${1};\\n\\\nsnippet ns\\n\\\n\tnamespace ${1:Foo\\\\Bar\\\\Baz};\\n\\\n\t${2}\\n\\\nsnippet use\\n\\\n\tuse ${1:Foo\\\\Bar\\\\Baz};\\n\\\n\t${2}\\n\\\nsnippet c\\n\\\n\t${1:abstract }class ${2:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet i\\n\\\n\tinterface ${1:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet t.\\n\\\n\t$this->${1}\\n\\\nsnippet f\\n\\\n\tfunction ${1:foo}(${2:array }${3:$bar})\\n\\\n\t{\\n\\\n\t\t${4}\\n\\\n\t}\\n\\\n# method\\n\\\nsnippet m\\n\\\n\t${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\\n\\\n\t{\\n\\\n\t\t${7}\\n\\\n\t}\\n\\\n# setter method\\n\\\nsnippet sm\\n\\\n\t/**\\n\\\n\t * Sets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @param ${2:$1} $$1 ${3:description}\\n\\\n\t *\\n\\\n\t * @return ${4:$FILENAME}\\n\\\n\t */\\n\\\n\t${5:public} function set${6:$2}(${7:$2 }$$1)\\n\\\n\t{\\n\\\n\t\t$this->${8:$1} = $$1;\\n\\\n\t\treturn $this;\\n\\\n\t}${9}\\n\\\n# getter method\\n\\\nsnippet gm\\n\\\n\t/**\\n\\\n\t * Gets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @return ${2:$1}\\n\\\n\t */\\n\\\n\t${3:public} function get${4:$2}()\\n\\\n\t{\\n\\\n\t\treturn $this->${5:$1};\\n\\\n\t}${6}\\n\\\n#setter\\n\\\nsnippet $s\\n\\\n\t${1:$foo}->set${2:Bar}(${3});\\n\\\n#getter\\n\\\nsnippet $g\\n\\\n\t${1:$foo}->get${2:Bar}();\\n\\\n\\n\\\n# Tertiary conditional\\n\\\nsnippet =?:\\n\\\n\t$${1:foo} = ${2:true} ? ${3:a} : ${4};\\n\\\nsnippet ?:\\n\\\n\t${1:true} ? ${2:a} : ${3}\\n\\\n\\n\\\nsnippet C\\n\\\n\t$_COOKIE['${1:variable}']${2}\\n\\\nsnippet E\\n\\\n\t$_ENV['${1:variable}']${2}\\n\\\nsnippet F\\n\\\n\t$_FILES['${1:variable}']${2}\\n\\\nsnippet G\\n\\\n\t$_GET['${1:variable}']${2}\\n\\\nsnippet P\\n\\\n\t$_POST['${1:variable}']${2}\\n\\\nsnippet R\\n\\\n\t$_REQUEST['${1:variable}']${2}\\n\\\nsnippet S\\n\\\n\t$_SERVER['${1:variable}']${2}\\n\\\nsnippet SS\\n\\\n\t$_SESSION['${1:variable}']${2}\\n\\\n\\n\\\n# the following are old ones\\n\\\nsnippet inc\\n\\\n\tinclude '${1:file}';${2}\\n\\\nsnippet inc1\\n\\\n\tinclude_once '${1:file}';${2}\\n\\\nsnippet req\\n\\\n\trequire '${1:file}';${2}\\n\\\nsnippet req1\\n\\\n\trequire_once '${1:file}';${2}\\n\\\n# Start Docblock\\n\\\nsnippet /*\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n# Class - post doc\\n\\\nsnippet doc_cp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${2:default}\\n\\\n\t * @subpackage ${3:default}\\n\\\n\t * @author ${4:`g:snips_author`}\\n\\\n\t */${5}\\n\\\n# Class Variable - post doc\\n\\\nsnippet doc_vp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented class variable}\\n\\\n\t *\\n\\\n\t * @var ${2:string}\\n\\\n\t */${3}\\n\\\n# Class Variable\\n\\\nsnippet doc_v\\n\\\n\t/**\\n\\\n\t * ${3:undocumented class variable}\\n\\\n\t *\\n\\\n\t * @var ${4:string}\\n\\\n\t */\\n\\\n\t${1:var} $${2};${5}\\n\\\n# Class\\n\\\nsnippet doc_c\\n\\\n\t/**\\n\\\n\t * ${3:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${4:default}\\n\\\n\t * @subpackage ${5:default}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1:}class ${2:}\\n\\\n\t{\\n\\\n\t\t${7}\\n\\\n\t} // END $1class $2\\n\\\n# Constant Definition - post doc\\n\\\nsnippet doc_dp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented constant}\\n\\\n\t */${2}\\n\\\n# Constant Definition\\n\\\nsnippet doc_d\\n\\\n\t/**\\n\\\n\t * ${3:undocumented constant}\\n\\\n\t */\\n\\\n\tdefine(${1}, ${2});${4}\\n\\\n# Function - post doc\\n\\\nsnippet doc_fp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${2:void}\\n\\\n\t * @author ${3:`g:snips_author`}\\n\\\n\t */${4}\\n\\\n# Function signature\\n\\\nsnippet doc_s\\n\\\n\t/**\\n\\\n\t * ${4:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${5:void}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1}function ${2}(${3});${7}\\n\\\n# Function\\n\\\nsnippet doc_f\\n\\\n\t/**\\n\\\n\t * ${4:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${5:void}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1}function ${2}(${3})\\n\\\n\t{${7}\\n\\\n\t}\\n\\\n# Header\\n\\\nsnippet doc_h\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t *\\n\\\n\t * @author ${2:`g:snips_author`}\\n\\\n\t * @version ${3:$Id$}\\n\\\n\t * @copyright ${4:$2}, `strftime('%d %B, %Y')`\\n\\\n\t * @package ${5:default}\\n\\\n\t */\\n\\\n\\n\\\n# Interface\\n\\\nsnippet interface\\n\\\n\t/**\\n\\\n\t * ${2:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${3:default}\\n\\\n\t * @author ${4:`g:snips_author`}\\n\\\n\t */\\n\\\n\tinterface ${1:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${5}\\n\\\n\t}\\n\\\n# class ...\\n\\\nsnippet class\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n\tclass ${2:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${3}\\n\\\n\t\t/**\\n\\\n\t\t * ${4}\\n\\\n\t\t */\\n\\\n\t\t${5:public} function ${6:__construct}(${7:argument})\\n\\\n\t\t{\\n\\\n\t\t\t${8:// code...}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n# define(...)\\n\\\nsnippet def\\n\\\n\tdefine('${1}'${2});${3}\\n\\\n# defined(...)\\n\\\nsnippet def?\\n\\\n\t${1}defined('${2}')${3}\\n\\\nsnippet wh\\n\\\n\twhile (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\n# do ... while\\n\\\nsnippet do\\n\\\n\tdo {\\n\\\n\t\t${2:// code... }\\n\\\n\t} while (${1:/* condition */});\\n\\\nsnippet if\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\nsnippet ife\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t} else {\\n\\\n\t\t${3:// code...}\\n\\\n\t}\\n\\\n\t${4}\\n\\\nsnippet else\\n\\\n\telse {\\n\\\n\t\t${1:// code...}\\n\\\n\t}\\n\\\nsnippet elseif\\n\\\n\telseif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\nsnippet switch\\n\\\n\tswitch ($${1:variable}) {\\n\\\n\t\tcase '${2:value}':\\n\\\n\t\t\t${3:// code...}\\n\\\n\t\t\tbreak;\\n\\\n\t\t${5}\\n\\\n\t\tdefault:\\n\\\n\t\t\t${4:// code...}\\n\\\n\t\t\tbreak;\\n\\\n\t}\\n\\\nsnippet case\\n\\\n\tcase '${1:value}':\\n\\\n\t\t${2:// code...}\\n\\\n\t\tbreak;${3}\\n\\\nsnippet for\\n\\\n\tfor ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\\\n\t\t${4: // code...}\\n\\\n\t}\\n\\\nsnippet foreach\\n\\\n\tforeach ($${1:variable} as $${2:value}) {\\n\\\n\t\t${3:// code...}\\n\\\n\t}\\n\\\nsnippet foreachk\\n\\\n\tforeach ($${1:variable} as $${2:key} => $${3:value}) {\\n\\\n\t\t${4:// code...}\\n\\\n\t}\\n\\\n# $... = array (...)\\n\\\nsnippet array\\n\\\n\t$${1:arrayName} = array('${2}' => ${3});${4}\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${2}\\n\\\n\t} catch (${1:Exception} $e) {\\n\\\n\t}\\n\\\n# lambda with closure\\n\\\nsnippet lambda\\n\\\n\t${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\\n\\\n\t\t${4}\\n\\\n\t};\\n\\\n# pre_dump();\\n\\\nsnippet pd\\n\\\n\techo '<pre>'; var_dump(${1}); echo '</pre>';\\n\\\n# pre_dump(); die();\\n\\\nsnippet pdd\\n\\\n\techo '<pre>'; var_dump(${1}); echo '</pre>'; die(${2:});\\n\\\nsnippet vd\\n\\\n\tvar_dump(${1});\\n\\\nsnippet vdd\\n\\\n\tvar_dump(${1}); die(${2:});\\n\\\nsnippet http_redirect\\n\\\n\theader (\\\"HTTP/1.1 301 Moved Permanently\\\");\\n\\\n\theader (\\\"Location: \\\".URL);\\n\\\n\texit();\\n\\\n# Getters & Setters\\n\\\nsnippet gs\\n\\\n\t/**\\n\\\n\t * Gets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @return ${2:$1}\\n\\\n\t */\\n\\\n\tpublic function get${3:$2}()\\n\\\n\t{\\n\\\n\t\treturn $this->${4:$1};\\n\\\n\t}\\n\\\n\\n\\\n\t/**\\n\\\n\t * Sets the value of $1\\n\\\n\t *\\n\\\n\t * @param $2 $$1 ${5:description}\\n\\\n\t *\\n\\\n\t * @return ${6:$FILENAME}\\n\\\n\t */\\n\\\n\tpublic function set$3(${7:$2 }$$1)\\n\\\n\t{\\n\\\n\t\t$this->$4 = $$1;\\n\\\n\t\treturn $this;\\n\\\n\t}${8}\\n\\\n# anotation, get, and set, useful for doctrine\\n\\\nsnippet ags\\n\\\n\t/**\\n\\\n\t * ${1:description}\\n\\\n\t *\\n\\\n\t * @${7}\\n\\\n\t */\\n\\\n\t${2:protected} $${3:foo};\\n\\\n\\n\\\n\tpublic function get${4:$3}()\\n\\\n\t{\\n\\\n\t\treturn $this->$3;\\n\\\n\t}\\n\\\n\\n\\\n\tpublic function set$4(${5:$4 }$${6:$3})\\n\\\n\t{\\n\\\n\t\t$this->$3 = $$6;\\n\\\n\t\treturn $this;\\n\\\n\t}\\n\\\nsnippet rett\\n\\\n\treturn true;\\n\\\nsnippet retf\\n\\\n\treturn false;\\n\\\nscope html\\n\\\nsnippet <?\\n\\\n\t<?php\\n\\\n\\n\\\n\t${1}\\n\\\nsnippet <?e\\n\\\n\t<?php echo ${1} ?>\\n\\\n# this one is for php5.4\\n\\\nsnippet <?=\\n\\\n\t<?=${1}?>\\n\\\nsnippet ifil\\n\\\n\t<?php if (${1:/* condition */}): ?>\\n\\\n\t\t${2:<!-- code... -->}\\n\\\n\t<?php endif; ?>\\n\\\nsnippet ifeil\\n\\\n\t<?php if (${1:/* condition */}): ?>\\n\\\n\t\t${2:<!-- html... -->}\\n\\\n\t<?php else: ?>\\n\\\n\t\t${3:<!-- html... -->}\\n\\\n\t<?php endif; ?>\\n\\\n\t${4}\\n\\\nsnippet foreachil\\n\\\n\t<?php foreach ($${1:variable} as $${2:value}): ?>\\n\\\n\t\t${3:<!-- html... -->}\\n\\\n\t<?php endforeach; ?>\\n\\\nsnippet foreachkil\\n\\\n\t<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?>\\n\\\n\t\t${4:<!-- html... -->}\\n\\\n\t<?php endforeach; ?>\\n\\\nscope html-tag\\n\\\nsnippet ifil\\\\n\\\\\\n\\\n\t<?php if (${1:true}): ?>${2:code}<?php endif; ?>\\n\\\nsnippet ifeil\\\\n\\\\\\n\\\n\t<?php if (${1:true}): ?>${2:code}<?php else: ?>${3:code}<?php endif; ?>${4}\\n\\\n\";\nexports.scope = \"php\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/php_laravel_blade.js",
    "content": "ace.define(\"ace/snippets/php_laravel_blade\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n    \"use strict\";\n\n    exports.snippetText =undefined;\n    exports.scope = \"php\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/pig.js",
    "content": "ace.define(\"ace/snippets/pig\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"pig\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/plain_text.js",
    "content": "ace.define(\"ace/snippets/plain_text\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"plain_text\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/powershell.js",
    "content": "ace.define(\"ace/snippets/powershell\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"powershell\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/praat.js",
    "content": "ace.define(\"ace/snippets/praat\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"praat\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/prolog.js",
    "content": "ace.define(\"ace/snippets/prolog\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"prolog\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/properties.js",
    "content": "ace.define(\"ace/snippets/properties\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"properties\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/protobuf.js",
    "content": "ace.define(\"ace/snippets/protobuf\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"\";\nexports.scope = \"protobuf\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/puppet.js",
    "content": "ace.define(\"ace/snippets/puppet\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"puppet\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/python.js",
    "content": "ace.define(\"ace/snippets/python\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet #!\\n\\\n\t#!/usr/bin/env python\\n\\\nsnippet imp\\n\\\n\timport ${1:module}\\n\\\nsnippet from\\n\\\n\tfrom ${1:package} import ${2:module}\\n\\\n# Module Docstring\\n\\\nsnippet docs\\n\\\n\t'''\\n\\\n\tFile: ${1:FILENAME:file_name}\\n\\\n\tAuthor: ${2:author}\\n\\\n\tDescription: ${3}\\n\\\n\t'''\\n\\\nsnippet wh\\n\\\n\twhile ${1:condition}:\\n\\\n\t\t${2:# TODO: write code...}\\n\\\n# dowh - does the same as do...while in other languages\\n\\\nsnippet dowh\\n\\\n\twhile True:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\t\tif ${2:condition}:\\n\\\n\t\t\tbreak\\n\\\nsnippet with\\n\\\n\twith ${1:expr} as ${2:var}:\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# New Class\\n\\\nsnippet cl\\n\\\n\tclass ${1:ClassName}(${2:object}):\\n\\\n\t\t\\\"\\\"\\\"${3:docstring for $1}\\\"\\\"\\\"\\n\\\n\t\tdef __init__(self, ${4:arg}):\\n\\\n\t\t\t${5:super($1, self).__init__()}\\n\\\n\t\t\tself.$4 = $4\\n\\\n\t\t\t${6}\\n\\\n# New Function\\n\\\nsnippet def\\n\\\n\tdef ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\\n\\\n\t\t\\\"\\\"\\\"${3:docstring for $1}\\\"\\\"\\\"\\n\\\n\t\t${4:# TODO: write code...}\\n\\\nsnippet deff\\n\\\n\tdef ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# New Method\\n\\\nsnippet defs\\n\\\n\tdef ${1:mname}(self, ${2:arg}):\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# New Property\\n\\\nsnippet property\\n\\\n\tdef ${1:foo}():\\n\\\n\t\tdoc = \\\"${2:The $1 property.}\\\"\\n\\\n\t\tdef fget(self):\\n\\\n\t\t\t${3:return self._$1}\\n\\\n\t\tdef fset(self, value):\\n\\\n\t\t\t${4:self._$1 = value}\\n\\\n# Ifs\\n\\\nsnippet if\\n\\\n\tif ${1:condition}:\\n\\\n\t\t${2:# TODO: write code...}\\n\\\nsnippet el\\n\\\n\telse:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\nsnippet ei\\n\\\n\telif ${1:condition}:\\n\\\n\t\t${2:# TODO: write code...}\\n\\\n# For\\n\\\nsnippet for\\n\\\n\tfor ${1:item} in ${2:items}:\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# Encodes\\n\\\nsnippet cutf8\\n\\\n\t# -*- coding: utf-8 -*-\\n\\\nsnippet clatin1\\n\\\n\t# -*- coding: latin-1 -*-\\n\\\nsnippet cascii\\n\\\n\t# -*- coding: ascii -*-\\n\\\n# Lambda\\n\\\nsnippet ld\\n\\\n\t${1:var} = lambda ${2:vars} : ${3:action}\\n\\\nsnippet .\\n\\\n\tself.\\n\\\nsnippet try Try/Except\\n\\\n\ttry:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\texcept ${2:Exception}, ${3:e}:\\n\\\n\t\t${4:raise $3}\\n\\\nsnippet try Try/Except/Else\\n\\\n\ttry:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\texcept ${2:Exception}, ${3:e}:\\n\\\n\t\t${4:raise $3}\\n\\\n\telse:\\n\\\n\t\t${5:# TODO: write code...}\\n\\\nsnippet try Try/Except/Finally\\n\\\n\ttry:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\texcept ${2:Exception}, ${3:e}:\\n\\\n\t\t${4:raise $3}\\n\\\n\tfinally:\\n\\\n\t\t${5:# TODO: write code...}\\n\\\nsnippet try Try/Except/Else/Finally\\n\\\n\ttry:\\n\\\n\t\t${1:# TODO: write code...}\\n\\\n\texcept ${2:Exception}, ${3:e}:\\n\\\n\t\t${4:raise $3}\\n\\\n\telse:\\n\\\n\t\t${5:# TODO: write code...}\\n\\\n\tfinally:\\n\\\n\t\t${6:# TODO: write code...}\\n\\\n# if __name__ == '__main__':\\n\\\nsnippet ifmain\\n\\\n\tif __name__ == '__main__':\\n\\\n\t\t${1:main()}\\n\\\n# __magic__\\n\\\nsnippet _\\n\\\n\t__${1:init}__${2}\\n\\\n# python debugger (pdb)\\n\\\nsnippet pdb\\n\\\n\timport pdb; pdb.set_trace()\\n\\\n# ipython debugger (ipdb)\\n\\\nsnippet ipdb\\n\\\n\timport ipdb; ipdb.set_trace()\\n\\\n# ipython debugger (pdbbb)\\n\\\nsnippet pdbbb\\n\\\n\timport pdbpp; pdbpp.set_trace()\\n\\\nsnippet pprint\\n\\\n\timport pprint; pprint.pprint(${1})${2}\\n\\\nsnippet \\\"\\n\\\n\t\\\"\\\"\\\"\\n\\\n\t${1:doc}\\n\\\n\t\\\"\\\"\\\"\\n\\\n# test function/method\\n\\\nsnippet test\\n\\\n\tdef test_${1:description}(${2:self}):\\n\\\n\t\t${3:# TODO: write code...}\\n\\\n# test case\\n\\\nsnippet testcase\\n\\\n\tclass ${1:ExampleCase}(unittest.TestCase):\\n\\\n\t\t\\n\\\n\t\tdef test_${2:description}(self):\\n\\\n\t\t\t${3:# TODO: write code...}\\n\\\nsnippet fut\\n\\\n\tfrom __future__ import ${1}\\n\\\n#getopt\\n\\\nsnippet getopt\\n\\\n\ttry:\\n\\\n\t\t# Short option syntax: \\\"hv:\\\"\\n\\\n\t\t# Long option syntax: \\\"help\\\" or \\\"verbose=\\\"\\n\\\n\t\topts, args = getopt.getopt(sys.argv[1:], \\\"${1:short_options}\\\", [${2:long_options}])\\n\\\n\t\\n\\\n\texcept getopt.GetoptError, err:\\n\\\n\t\t# Print debug info\\n\\\n\t\tprint str(err)\\n\\\n\t\t${3:error_action}\\n\\\n\\n\\\n\tfor option, argument in opts:\\n\\\n\t\tif option in (\\\"-h\\\", \\\"--help\\\"):\\n\\\n\t\t\t${4}\\n\\\n\t\telif option in (\\\"-v\\\", \\\"--verbose\\\"):\\n\\\n\t\t\tverbose = argument\\n\\\n\";\nexports.scope = \"python\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/r.js",
    "content": "ace.define(\"ace/snippets/r\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet #!\\n\\\n\t#!/usr/bin/env Rscript\\n\\\n\\n\\\n# includes\\n\\\nsnippet lib\\n\\\n\tlibrary(${1:package})\\n\\\nsnippet req\\n\\\n\trequire(${1:package})\\n\\\nsnippet source\\n\\\n\tsource('${1:file}')\\n\\\n\\n\\\n# conditionals\\n\\\nsnippet if\\n\\\n\tif (${1:condition}) {\\n\\\n\t\t${2:code}\\n\\\n\t}\\n\\\nsnippet el\\n\\\n\telse {\\n\\\n\t\t${1:code}\\n\\\n\t}\\n\\\nsnippet ei\\n\\\n\telse if (${1:condition}) {\\n\\\n\t\t${2:code}\\n\\\n\t}\\n\\\n\\n\\\n# functions\\n\\\nsnippet fun\\n\\\n\t${1:name} = function (${2:variables}) {\\n\\\n\t\t${3:code}\\n\\\n\t}\\n\\\nsnippet ret\\n\\\n\treturn(${1:code})\\n\\\n\\n\\\n# dataframes, lists, etc\\n\\\nsnippet df\\n\\\n\t${1:name}[${2:rows}, ${3:cols}]\\n\\\nsnippet c\\n\\\n\tc(${1:items})\\n\\\nsnippet li\\n\\\n\tlist(${1:items})\\n\\\nsnippet mat\\n\\\n\tmatrix(${1:data}, nrow=${2:rows}, ncol=${3:cols})\\n\\\n\\n\\\n# apply functions\\n\\\nsnippet apply\\n\\\n\tapply(${1:array}, ${2:margin}, ${3:function})\\n\\\nsnippet lapply\\n\\\n\tlapply(${1:list}, ${2:function})\\n\\\nsnippet sapply\\n\\\n\tsapply(${1:list}, ${2:function})\\n\\\nsnippet vapply\\n\\\n\tvapply(${1:list}, ${2:function}, ${3:type})\\n\\\nsnippet mapply\\n\\\n\tmapply(${1:function}, ${2:...})\\n\\\nsnippet tapply\\n\\\n\ttapply(${1:vector}, ${2:index}, ${3:function})\\n\\\nsnippet rapply\\n\\\n\trapply(${1:list}, ${2:function})\\n\\\n\\n\\\n# plyr functions\\n\\\nsnippet dd\\n\\\n\tddply(${1:frame}, ${2:variables}, ${3:function})\\n\\\nsnippet dl\\n\\\n\tdlply(${1:frame}, ${2:variables}, ${3:function})\\n\\\nsnippet da\\n\\\n\tdaply(${1:frame}, ${2:variables}, ${3:function})\\n\\\nsnippet d_\\n\\\n\td_ply(${1:frame}, ${2:variables}, ${3:function})\\n\\\n\\n\\\nsnippet ad\\n\\\n\tadply(${1:array}, ${2:margin}, ${3:function})\\n\\\nsnippet al\\n\\\n\talply(${1:array}, ${2:margin}, ${3:function})\\n\\\nsnippet aa\\n\\\n\taaply(${1:array}, ${2:margin}, ${3:function})\\n\\\nsnippet a_\\n\\\n\ta_ply(${1:array}, ${2:margin}, ${3:function})\\n\\\n\\n\\\nsnippet ld\\n\\\n\tldply(${1:list}, ${2:function})\\n\\\nsnippet ll\\n\\\n\tllply(${1:list}, ${2:function})\\n\\\nsnippet la\\n\\\n\tlaply(${1:list}, ${2:function})\\n\\\nsnippet l_\\n\\\n\tl_ply(${1:list}, ${2:function})\\n\\\n\\n\\\nsnippet md\\n\\\n\tmdply(${1:matrix}, ${2:function})\\n\\\nsnippet ml\\n\\\n\tmlply(${1:matrix}, ${2:function})\\n\\\nsnippet ma\\n\\\n\tmaply(${1:matrix}, ${2:function})\\n\\\nsnippet m_\\n\\\n\tm_ply(${1:matrix}, ${2:function})\\n\\\n\\n\\\n# plot functions\\n\\\nsnippet pl\\n\\\n\tplot(${1:x}, ${2:y})\\n\\\nsnippet ggp\\n\\\n\tggplot(${1:data}, aes(${2:aesthetics}))\\n\\\nsnippet img\\n\\\n\t${1:(jpeg,bmp,png,tiff)}(filename=\\\"${2:filename}\\\", width=${3}, height=${4}, unit=\\\"${5}\\\")\\n\\\n\t${6:plot}\\n\\\n\tdev.off()\\n\\\n\\n\\\n# statistical test functions\\n\\\nsnippet fis\\n\\\n\tfisher.test(${1:x}, ${2:y})\\n\\\nsnippet chi\\n\\\n\tchisq.test(${1:x}, ${2:y})\\n\\\nsnippet tt\\n\\\n\tt.test(${1:x}, ${2:y})\\n\\\nsnippet wil\\n\\\n\twilcox.test(${1:x}, ${2:y})\\n\\\nsnippet cor\\n\\\n\tcor.test(${1:x}, ${2:y})\\n\\\nsnippet fte\\n\\\n\tvar.test(${1:x}, ${2:y})\\n\\\nsnippet kvt \\n\\\n\tkv.test(${1:x}, ${2:y})\\n\\\n\";\nexports.scope = \"r\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/razor.js",
    "content": "ace.define(\"ace/snippets/razor\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet if\\n\\\n(${1} == ${2}) {\\n\\\n\t${3}\\n\\\n}\";\nexports.scope = \"razor\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/rdoc.js",
    "content": "ace.define(\"ace/snippets/rdoc\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"rdoc\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/red.js",
    "content": "ace.define(\"ace/snippets/red\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \" \";\nexports.scope = \"red\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/redshift.js",
    "content": "ace.define(\"ace/snippets/redshift\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"redshift\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/rhtml.js",
    "content": "ace.define(\"ace/snippets/rhtml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"rhtml\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/rst.js",
    "content": "ace.define(\"ace/snippets/rst\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# rst\\n\\\n\\n\\\nsnippet :\\n\\\n\t:${1:field name}: ${2:field body}\\n\\\nsnippet *\\n\\\n\t*${1:Emphasis}*\\n\\\nsnippet **\\n\\\n\t**${1:Strong emphasis}**\\n\\\nsnippet _\\n\\\n\t\\\\`${1:hyperlink-name}\\\\`_\\n\\\n\t.. _\\\\`$1\\\\`: ${2:link-block}\\n\\\nsnippet =\\n\\\n\t${1:Title}\\n\\\n\t=====${2:=}\\n\\\n\t${3}\\n\\\nsnippet -\\n\\\n\t${1:Title}\\n\\\n\t-----${2:-}\\n\\\n\t${3}\\n\\\nsnippet cont:\\n\\\n\t.. contents::\\n\\\n\t\\n\\\n\";\nexports.scope = \"rst\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/ruby.js",
    "content": "ace.define(\"ace/snippets/ruby\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"########################################\\n\\\n# Ruby snippets - for Rails, see below #\\n\\\n########################################\\n\\\n\\n\\\n# encoding for Ruby 1.9\\n\\\nsnippet enc\\n\\\n\t# encoding: utf-8\\n\\\n\\n\\\n# #!/usr/bin/env ruby\\n\\\nsnippet #!\\n\\\n\t#!/usr/bin/env ruby\\n\\\n\t# encoding: utf-8\\n\\\n\\n\\\n# New Block\\n\\\nsnippet =b\\n\\\n\t=begin rdoc\\n\\\n\t\t${1}\\n\\\n\t=end\\n\\\nsnippet y\\n\\\n\t:yields: ${1:arguments}\\n\\\nsnippet rb\\n\\\n\t#!/usr/bin/env ruby -wKU\\n\\\nsnippet beg\\n\\\n\tbegin\\n\\\n\t\t${3}\\n\\\n\trescue ${1:Exception} => ${2:e}\\n\\\n\tend\\n\\\n\\n\\\nsnippet req require\\n\\\n\trequire \\\"${1}\\\"${2}\\n\\\nsnippet #\\n\\\n\t# =>\\n\\\nsnippet end\\n\\\n\t__END__\\n\\\nsnippet case\\n\\\n\tcase ${1:object}\\n\\\n\twhen ${2:condition}\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet when\\n\\\n\twhen ${1:condition}\\n\\\n\t\t${2}\\n\\\nsnippet def\\n\\\n\tdef ${1:method_name}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet deft\\n\\\n\tdef test_${1:case_name}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet if\\n\\\n\tif ${1:condition}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet ife\\n\\\n\tif ${1:condition}\\n\\\n\t\t${2}\\n\\\n\telse\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet elsif\\n\\\n\telsif ${1:condition}\\n\\\n\t\t${2}\\n\\\nsnippet unless\\n\\\n\tunless ${1:condition}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet while\\n\\\n\twhile ${1:condition}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet for\\n\\\n\tfor ${1:e} in ${2:c}\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet until\\n\\\n\tuntil ${1:condition}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet cla class .. end\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet cla class .. initialize .. end\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\tdef initialize(${2:args})\\n\\\n\t\t\t${3}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet cla class .. < ParentClass .. initialize .. end\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} < ${2:ParentClass}\\n\\\n\t\tdef initialize(${3:args})\\n\\\n\t\t\t${4}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet cla ClassName = Struct .. do .. end\\n\\\n\t${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} = Struct.new(:${2:attr_names}) do\\n\\\n\t\tdef ${3:method_name}\\n\\\n\t\t\t${4}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet cla class BlankSlate .. initialize .. end\\n\\\n\tclass ${1:BlankSlate}\\n\\\n\t\tinstance_methods.each { |meth| undef_method(meth) unless meth =~ /\\\\A__/ }\\n\\\n\tend\\n\\\nsnippet cla class << self .. end\\n\\\n\tclass << ${1:self}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\n# class .. < DelegateClass .. initialize .. end\\n\\\nsnippet cla-\\n\\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} < DelegateClass(${2:ParentClass})\\n\\\n\t\tdef initialize(${3:args})\\n\\\n\t\t\tsuper(${4:del_obj})\\n\\\n\\n\\\n\t\t\t${5}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet mod module .. end\\n\\\n\tmodule ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet mod module .. module_function .. end\\n\\\n\tmodule ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\tmodule_function\\n\\\n\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet mod module .. ClassMethods .. end\\n\\\n\tmodule ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\\n\t\tmodule ClassMethods\\n\\\n\t\t\t${2}\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tmodule InstanceMethods\\n\\\n\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tdef self.included(receiver)\\n\\\n\t\t\treceiver.extend         ClassMethods\\n\\\n\t\t\treceiver.send :include, InstanceMethods\\n\\\n\t\tend\\n\\\n\tend\\n\\\n# attr_reader\\n\\\nsnippet r\\n\\\n\tattr_reader :${1:attr_names}\\n\\\n# attr_writer\\n\\\nsnippet w\\n\\\n\tattr_writer :${1:attr_names}\\n\\\n# attr_accessor\\n\\\nsnippet rw\\n\\\n\tattr_accessor :${1:attr_names}\\n\\\nsnippet atp\\n\\\n\tattr_protected :${1:attr_names}\\n\\\nsnippet ata\\n\\\n\tattr_accessible :${1:attr_names}\\n\\\n# include Enumerable\\n\\\nsnippet Enum\\n\\\n\tinclude Enumerable\\n\\\n\\n\\\n\tdef each(&block)\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\n# include Comparable\\n\\\nsnippet Comp\\n\\\n\tinclude Comparable\\n\\\n\\n\\\n\tdef <=>(other)\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\n# extend Forwardable\\n\\\nsnippet Forw-\\n\\\n\textend Forwardable\\n\\\n# def self\\n\\\nsnippet defs\\n\\\n\tdef self.${1:class_method_name}\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\n# def method_missing\\n\\\nsnippet defmm\\n\\\n\tdef method_missing(meth, *args, &blk)\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\nsnippet defd\\n\\\n\tdef_delegator :${1:@del_obj}, :${2:del_meth}, :${3:new_name}\\n\\\nsnippet defds\\n\\\n\tdef_delegators :${1:@del_obj}, :${2:del_methods}\\n\\\nsnippet am\\n\\\n\talias_method :${1:new_name}, :${2:old_name}\\n\\\nsnippet app\\n\\\n\tif __FILE__ == $PROGRAM_NAME\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\n# usage_if()\\n\\\nsnippet usai\\n\\\n\tif ARGV.${1}\\n\\\n\t\tabort \\\"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\\\"${3}\\n\\\n\tend\\n\\\n# usage_unless()\\n\\\nsnippet usau\\n\\\n\tunless ARGV.${1}\\n\\\n\t\tabort \\\"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\\\"${3}\\n\\\n\tend\\n\\\nsnippet array\\n\\\n\tArray.new(${1:10}) { |${2:i}| ${3} }\\n\\\nsnippet hash\\n\\\n\tHash.new { |${1:hash}, ${2:key}| $1[$2] = ${3} }\\n\\\nsnippet file File.foreach() { |line| .. }\\n\\\n\tFile.foreach(${1:\\\"path/to/file\\\"}) { |${2:line}| ${3} }\\n\\\nsnippet file File.read()\\n\\\n\tFile.read(${1:\\\"path/to/file\\\"})${2}\\n\\\nsnippet Dir Dir.global() { |file| .. }\\n\\\n\tDir.glob(${1:\\\"dir/glob/*\\\"}) { |${2:file}| ${3} }\\n\\\nsnippet Dir Dir[\\\"..\\\"]\\n\\\n\tDir[${1:\\\"glob/**/*.rb\\\"}]${2}\\n\\\nsnippet dir\\n\\\n\tFilename.dirname(__FILE__)\\n\\\nsnippet deli\\n\\\n\tdelete_if { |${1:e}| ${2} }\\n\\\nsnippet fil\\n\\\n\tfill(${1:range}) { |${2:i}| ${3} }\\n\\\n# flatten_once()\\n\\\nsnippet flao\\n\\\n\tinject(Array.new) { |${1:arr}, ${2:a}| $1.push(*$2)}${3}\\n\\\nsnippet zip\\n\\\n\tzip(${1:enums}) { |${2:row}| ${3} }\\n\\\n# downto(0) { |n| .. }\\n\\\nsnippet dow\\n\\\n\tdownto(${1:0}) { |${2:n}| ${3} }\\n\\\nsnippet ste\\n\\\n\tstep(${1:2}) { |${2:n}| ${3} }\\n\\\nsnippet tim\\n\\\n\ttimes { |${1:n}| ${2} }\\n\\\nsnippet upt\\n\\\n\tupto(${1:1.0/0.0}) { |${2:n}| ${3} }\\n\\\nsnippet loo\\n\\\n\tloop { ${1} }\\n\\\nsnippet ea\\n\\\n\teach { |${1:e}| ${2} }\\n\\\nsnippet ead\\n\\\n\teach do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eab\\n\\\n\teach_byte { |${1:byte}| ${2} }\\n\\\nsnippet eac- each_char { |chr| .. }\\n\\\n\teach_char { |${1:chr}| ${2} }\\n\\\nsnippet eac- each_cons(..) { |group| .. }\\n\\\n\teach_cons(${1:2}) { |${2:group}| ${3} }\\n\\\nsnippet eai\\n\\\n\teach_index { |${1:i}| ${2} }\\n\\\nsnippet eaid\\n\\\n\teach_index do |${1:i}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eak\\n\\\n\teach_key { |${1:key}| ${2} }\\n\\\nsnippet eakd\\n\\\n\teach_key do |${1:key}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eal\\n\\\n\teach_line { |${1:line}| ${2} }\\n\\\nsnippet eald\\n\\\n\teach_line do |${1:line}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eap\\n\\\n\teach_pair { |${1:name}, ${2:val}| ${3} }\\n\\\nsnippet eapd\\n\\\n\teach_pair do |${1:name}, ${2:val}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet eas-\\n\\\n\teach_slice(${1:2}) { |${2:group}| ${3} }\\n\\\nsnippet easd-\\n\\\n\teach_slice(${1:2}) do |${2:group}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet eav\\n\\\n\teach_value { |${1:val}| ${2} }\\n\\\nsnippet eavd\\n\\\n\teach_value do |${1:val}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet eawi\\n\\\n\teach_with_index { |${1:e}, ${2:i}| ${3} }\\n\\\nsnippet eawid\\n\\\n\teach_with_index do |${1:e},${2:i}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet reve\\n\\\n\treverse_each { |${1:e}| ${2} }\\n\\\nsnippet reved\\n\\\n\treverse_each do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet inj\\n\\\n\tinject(${1:init}) { |${2:mem}, ${3:var}| ${4} }\\n\\\nsnippet injd\\n\\\n\tinject(${1:init}) do |${2:mem}, ${3:var}|\\n\\\n\t\t${4}\\n\\\n\tend\\n\\\nsnippet map\\n\\\n\tmap { |${1:e}| ${2} }\\n\\\nsnippet mapd\\n\\\n\tmap do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet mapwi-\\n\\\n\tenum_with_index.map { |${1:e}, ${2:i}| ${3} }\\n\\\nsnippet sor\\n\\\n\tsort { |a, b| ${1} }\\n\\\nsnippet sorb\\n\\\n\tsort_by { |${1:e}| ${2} }\\n\\\nsnippet ran\\n\\\n\tsort_by { rand }\\n\\\nsnippet all\\n\\\n\tall? { |${1:e}| ${2} }\\n\\\nsnippet any\\n\\\n\tany? { |${1:e}| ${2} }\\n\\\nsnippet cl\\n\\\n\tclassify { |${1:e}| ${2} }\\n\\\nsnippet col\\n\\\n\tcollect { |${1:e}| ${2} }\\n\\\nsnippet cold\\n\\\n\tcollect do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet det\\n\\\n\tdetect { |${1:e}| ${2} }\\n\\\nsnippet detd\\n\\\n\tdetect do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet fet\\n\\\n\tfetch(${1:name}) { |${2:key}| ${3} }\\n\\\nsnippet fin\\n\\\n\tfind { |${1:e}| ${2} }\\n\\\nsnippet find\\n\\\n\tfind do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet fina\\n\\\n\tfind_all { |${1:e}| ${2} }\\n\\\nsnippet finad\\n\\\n\tfind_all do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet gre\\n\\\n\tgrep(${1:/pattern/}) { |${2:match}| ${3} }\\n\\\nsnippet sub\\n\\\n\t${1:g}sub(${2:/pattern/}) { |${3:match}| ${4} }\\n\\\nsnippet sca\\n\\\n\tscan(${1:/pattern/}) { |${2:match}| ${3} }\\n\\\nsnippet scad\\n\\\n\tscan(${1:/pattern/}) do |${2:match}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet max\\n\\\n\tmax { |a, b| ${1} }\\n\\\nsnippet min\\n\\\n\tmin { |a, b| ${1} }\\n\\\nsnippet par\\n\\\n\tpartition { |${1:e}| ${2} }\\n\\\nsnippet pard\\n\\\n\tpartition do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet rej\\n\\\n\treject { |${1:e}| ${2} }\\n\\\nsnippet rejd\\n\\\n\treject do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet sel\\n\\\n\tselect { |${1:e}| ${2} }\\n\\\nsnippet seld\\n\\\n\tselect do |${1:e}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet lam\\n\\\n\tlambda { |${1:args}| ${2} }\\n\\\nsnippet doo\\n\\\n\tdo\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\nsnippet dov\\n\\\n\tdo |${1:variable}|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet :\\n\\\n\t:${1:key} => ${2:\\\"value\\\"}${3}\\n\\\nsnippet ope\\n\\\n\topen(${1:\\\"path/or/url/or/pipe\\\"}, \\\"${2:w}\\\") { |${3:io}| ${4} }\\n\\\n# path_from_here()\\n\\\nsnippet fpath\\n\\\n\tFile.join(File.dirname(__FILE__), *%2[${1:rel path here}])${2}\\n\\\n# unix_filter {}\\n\\\nsnippet unif\\n\\\n\tARGF.each_line${1} do |${2:line}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\n# option_parse {}\\n\\\nsnippet optp\\n\\\n\trequire \\\"optparse\\\"\\n\\\n\\n\\\n\toptions = {${1:default => \\\"args\\\"}}\\n\\\n\\n\\\n\tARGV.options do |opts|\\n\\\n\t\topts.banner = \\\"Usage: #{File.basename($PROGRAM_NAME)}\\n\\\nsnippet opt\\n\\\n\topts.on( \\\"-${1:o}\\\", \\\"--${2:long-option-name}\\\", ${3:String},\\n\\\n\t         \\\"${4:Option description.}\\\") do |${5:opt}|\\n\\\n\t\t${6}\\n\\\n\tend\\n\\\nsnippet tc\\n\\\n\trequire \\\"test/unit\\\"\\n\\\n\\n\\\n\trequire \\\"${1:library_file_name}\\\"\\n\\\n\\n\\\n\tclass Test${2:$1} < Test::Unit::TestCase\\n\\\n\t\tdef test_${3:case_name}\\n\\\n\t\t\t${4}\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet ts\\n\\\n\trequire \\\"test/unit\\\"\\n\\\n\\n\\\n\trequire \\\"tc_${1:test_case_file}\\\"\\n\\\n\trequire \\\"tc_${2:test_case_file}\\\"${3}\\n\\\nsnippet as\\n\\\n\tassert ${1:test}, \\\"${2:Failure message.}\\\"${3}\\n\\\nsnippet ase\\n\\\n\tassert_equal ${1:expected}, ${2:actual}${3}\\n\\\nsnippet asne\\n\\\n\tassert_not_equal ${1:unexpected}, ${2:actual}${3}\\n\\\nsnippet asid\\n\\\n\tassert_in_delta ${1:expected_float}, ${2:actual_float}, ${3:2 ** -20}${4}\\n\\\nsnippet asio\\n\\\n\tassert_instance_of ${1:ExpectedClass}, ${2:actual_instance}${3}\\n\\\nsnippet asko\\n\\\n\tassert_kind_of ${1:ExpectedKind}, ${2:actual_instance}${3}\\n\\\nsnippet asn\\n\\\n\tassert_nil ${1:instance}${2}\\n\\\nsnippet asnn\\n\\\n\tassert_not_nil ${1:instance}${2}\\n\\\nsnippet asm\\n\\\n\tassert_match /${1:expected_pattern}/, ${2:actual_string}${3}\\n\\\nsnippet asnm\\n\\\n\tassert_no_match /${1:unexpected_pattern}/, ${2:actual_string}${3}\\n\\\nsnippet aso\\n\\\n\tassert_operator ${1:left}, :${2:operator}, ${3:right}${4}\\n\\\nsnippet asr\\n\\\n\tassert_raise ${1:Exception} { ${2} }\\n\\\nsnippet asrd\\n\\\n\tassert_raise ${1:Exception} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet asnr\\n\\\n\tassert_nothing_raised ${1:Exception} { ${2} }\\n\\\nsnippet asnrd\\n\\\n\tassert_nothing_raised ${1:Exception} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet asrt\\n\\\n\tassert_respond_to ${1:object}, :${2:method}${3}\\n\\\nsnippet ass assert_same(..)\\n\\\n\tassert_same ${1:expected}, ${2:actual}${3}\\n\\\nsnippet ass assert_send(..)\\n\\\n\tassert_send [${1:object}, :${2:message}, ${3:args}]${4}\\n\\\nsnippet asns\\n\\\n\tassert_not_same ${1:unexpected}, ${2:actual}${3}\\n\\\nsnippet ast\\n\\\n\tassert_throws :${1:expected} { ${2} }\\n\\\nsnippet astd\\n\\\n\tassert_throws :${1:expected} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet asnt\\n\\\n\tassert_nothing_thrown { ${1} }\\n\\\nsnippet asntd\\n\\\n\tassert_nothing_thrown do\\n\\\n\t\t${1}\\n\\\n\tend\\n\\\nsnippet fl\\n\\\n\tflunk \\\"${1:Failure message.}\\\"${2}\\n\\\n# Benchmark.bmbm do .. end\\n\\\nsnippet bm-\\n\\\n\tTESTS = ${1:10_000}\\n\\\n\tBenchmark.bmbm do |results|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet rep\\n\\\n\tresults.report(\\\"${1:name}:\\\") { TESTS.times { ${2} }}\\n\\\n# Marshal.dump(.., file)\\n\\\nsnippet Md\\n\\\n\tFile.open(${1:\\\"path/to/file.dump\\\"}, \\\"wb\\\") { |${2:file}| Marshal.dump(${3:obj}, $2) }${4}\\n\\\n# Mashal.load(obj)\\n\\\nsnippet Ml\\n\\\n\tFile.open(${1:\\\"path/to/file.dump\\\"}, \\\"rb\\\") { |${2:file}| Marshal.load($2) }${3}\\n\\\n# deep_copy(..)\\n\\\nsnippet deec\\n\\\n\tMarshal.load(Marshal.dump(${1:obj_to_copy}))${2}\\n\\\nsnippet Pn-\\n\\\n\tPStore.new(${1:\\\"file_name.pstore\\\"})${2}\\n\\\nsnippet tra\\n\\\n\ttransaction(${1:true}) { ${2} }\\n\\\n# xmlread(..)\\n\\\nsnippet xml-\\n\\\n\tREXML::Document.new(File.read(${1:\\\"path/to/file\\\"}))${2}\\n\\\n# xpath(..) { .. }\\n\\\nsnippet xpa\\n\\\n\telements.each(${1:\\\"//Xpath\\\"}) do |${2:node}|\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\n# class_from_name()\\n\\\nsnippet clafn\\n\\\n\tsplit(\\\"::\\\").inject(Object) { |par, const| par.const_get(const) }\\n\\\n# singleton_class()\\n\\\nsnippet sinc\\n\\\n\tclass << self; self end\\n\\\nsnippet nam\\n\\\n\tnamespace :${1:`Filename()`} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet tas\\n\\\n\tdesc \\\"${1:Task description}\\\"\\n\\\n\ttask :${2:task_name => [:dependent, :tasks]} do\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\n# block\\n\\\nsnippet b\\n\\\n\t{ |${1:var}| ${2} }\\n\\\nsnippet begin\\n\\\n\tbegin\\n\\\n\t\traise 'A test exception.'\\n\\\n\trescue Exception => e\\n\\\n\t\tputs e.message\\n\\\n\t\tputs e.backtrace.inspect\\n\\\n\telse\\n\\\n\t\t# other exception\\n\\\n\tensure\\n\\\n\t\t# always executed\\n\\\n\tend\\n\\\n\\n\\\n#debugging\\n\\\nsnippet debug\\n\\\n\trequire 'ruby-debug'; debugger; true;\\n\\\nsnippet pry\\n\\\n\trequire 'pry'; binding.pry\\n\\\n\\n\\\n#############################################\\n\\\n# Rails snippets - for pure Ruby, see above #\\n\\\n#############################################\\n\\\nsnippet art\\n\\\n\tassert_redirected_to ${1::action => \\\"${2:index}\\\"}\\n\\\nsnippet artnp\\n\\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1}, ${4:@$2})\\n\\\nsnippet artnpp\\n\\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1})\\n\\\nsnippet artp\\n\\\n\tassert_redirected_to ${1:model}_path(${2:@$1})\\n\\\nsnippet artpp\\n\\\n\tassert_redirected_to ${1:model}s_path\\n\\\nsnippet asd\\n\\\n\tassert_difference \\\"${1:Model}.${2:count}\\\", $1 do\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet asnd\\n\\\n\tassert_no_difference \\\"${1:Model}.${2:count}\\\" do\\n\\\n\t\t${3}\\n\\\n\tend\\n\\\nsnippet asre\\n\\\n\tassert_response :${1:success}, @response.body${2}\\n\\\nsnippet asrj\\n\\\n\tassert_rjs :${1:replace}, \\\"${2:dom id}\\\"\\n\\\nsnippet ass assert_select(..)\\n\\\n\tassert_select '${1:path}', :${2:text} => '${3:inner_html' ${4:do}\\n\\\nsnippet bf\\n\\\n\tbefore_filter :${1:method}\\n\\\nsnippet bt\\n\\\n\tbelongs_to :${1:association}\\n\\\nsnippet crw\\n\\\n\tcattr_accessor :${1:attr_names}\\n\\\nsnippet defcreate\\n\\\n\tdef create\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new(params[:$1])\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\tif @$1.save\\n\\\n\t\t\t\tflash[:notice] = '$2 was successfully created.'\\n\\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\\\n\t\t\t\twants.xml  { render :xml => @$1, :status => :created, :location => @$1 }\\n\\\n\t\t\telse\\n\\\n\t\t\t\twants.html { render :action => \\\"new\\\" }\\n\\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\\\n\t\t\tend\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defdestroy\\n\\\n\tdef destroy\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\\n\t\t@$1.destroy\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\twants.html { redirect_to($1s_url) }\\n\\\n\t\t\twants.xml  { head :ok }\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defedit\\n\\\n\tdef edit\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\\n\tend\\n\\\nsnippet defindex\\n\\\n\tdef index\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.all\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\twants.html # index.html.erb\\n\\\n\t\t\twants.xml  { render :xml => @$1s }\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defnew\\n\\\n\tdef new\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\twants.html # new.html.erb\\n\\\n\t\t\twants.xml  { render :xml => @$1 }\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defshow\\n\\\n\tdef show\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\twants.html # show.html.erb\\n\\\n\t\t\twants.xml  { render :xml => @$1 }\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet defupdate\\n\\\n\tdef update\\n\\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\\n\\n\\\n\t\trespond_to do |wants|\\n\\\n\t\t\tif @$1.update_attributes(params[:$1])\\n\\\n\t\t\t\tflash[:notice] = '$2 was successfully updated.'\\n\\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\\\n\t\t\t\twants.xml  { head :ok }\\n\\\n\t\t\telse\\n\\\n\t\t\t\twants.html { render :action => \\\"edit\\\" }\\n\\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\\\n\t\t\tend\\n\\\n\t\tend\\n\\\n\tend${3}\\n\\\nsnippet flash\\n\\\n\tflash[:${1:notice}] = \\\"${2}\\\"\\n\\\nsnippet habtm\\n\\\n\thas_and_belongs_to_many :${1:object}, :join_table => \\\"${2:table_name}\\\", :foreign_key => \\\"${3}_id\\\"${4}\\n\\\nsnippet hm\\n\\\n\thas_many :${1:object}\\n\\\nsnippet hmd\\n\\\n\thas_many :${1:other}s, :class_name => \\\"${2:$1}\\\", :foreign_key => \\\"${3:$1}_id\\\", :dependent => :destroy${4}\\n\\\nsnippet hmt\\n\\\n\thas_many :${1:object}, :through => :${2:object}\\n\\\nsnippet ho\\n\\\n\thas_one :${1:object}\\n\\\nsnippet i18\\n\\\n\tI18n.t('${1:type.key}')${2}\\n\\\nsnippet ist\\n\\\n\t<%= image_submit_tag(\\\"${1:agree.png}\\\", :id => \\\"${2:id}\\\"${3} %>\\n\\\nsnippet log\\n\\\n\tRails.logger.${1:debug} ${2}\\n\\\nsnippet log2\\n\\\n\tRAILS_DEFAULT_LOGGER.${1:debug} ${2}\\n\\\nsnippet logd\\n\\\n\tlogger.debug { \\\"${1:message}\\\" }${2}\\n\\\nsnippet loge\\n\\\n\tlogger.error { \\\"${1:message}\\\" }${2}\\n\\\nsnippet logf\\n\\\n\tlogger.fatal { \\\"${1:message}\\\" }${2}\\n\\\nsnippet logi\\n\\\n\tlogger.info { \\\"${1:message}\\\" }${2}\\n\\\nsnippet logw\\n\\\n\tlogger.warn { \\\"${1:message}\\\" }${2}\\n\\\nsnippet mapc\\n\\\n\t${1:map}.${2:connect} '${3:controller/:action/:id}'\\n\\\nsnippet mapca\\n\\\n\t${1:map}.catch_all \\\"*${2:anything}\\\", :controller => \\\"${3:default}\\\", :action => \\\"${4:error}\\\"${5}\\n\\\nsnippet mapr\\n\\\n\t${1:map}.resource :${2:resource}\\n\\\nsnippet maprs\\n\\\n\t${1:map}.resources :${2:resource}\\n\\\nsnippet mapwo\\n\\\n\t${1:map}.with_options :${2:controller} => '${3:thing}' do |$3|\\n\\\n\t\t${4}\\n\\\n\tend\\n\\\nsnippet mbs\\n\\\n\tbefore_save :${1:method}\\n\\\nsnippet mcht\\n\\\n\tchange_table :${1:table_name} do |t|\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet mp\\n\\\n\tmap(&:${1:id})\\n\\\nsnippet mrw\\n\\\n\tmattr_accessor :${1:attr_names}\\n\\\nsnippet oa\\n\\\n\torder(\\\"${1:field}\\\")\\n\\\nsnippet od\\n\\\n\torder(\\\"${1:field} DESC\\\")\\n\\\nsnippet pa\\n\\\n\tparams[:${1:id}]${2}\\n\\\nsnippet ra\\n\\\n\trender :action => \\\"${1:action}\\\"\\n\\\nsnippet ral\\n\\\n\trender :action => \\\"${1:action}\\\", :layout => \\\"${2:layoutname}\\\"\\n\\\nsnippet rest\\n\\\n\trespond_to do |wants|\\n\\\n\t\twants.${1:html} { ${2} }\\n\\\n\tend\\n\\\nsnippet rf\\n\\\n\trender :file => \\\"${1:filepath}\\\"\\n\\\nsnippet rfu\\n\\\n\trender :file => \\\"${1:filepath}\\\", :use_full_path => ${2:false}\\n\\\nsnippet ri\\n\\\n\trender :inline => \\\"${1:<%= 'hello' %>}\\\"\\n\\\nsnippet ril\\n\\\n\trender :inline => \\\"${1:<%= 'hello' %>}\\\", :locals => { ${2::name} => \\\"${3:value}\\\"${4} }\\n\\\nsnippet rit\\n\\\n\trender :inline => \\\"${1:<%= 'hello' %>}\\\", :type => ${2::rxml}\\n\\\nsnippet rjson\\n\\\n\trender :json => ${1:text to render}\\n\\\nsnippet rl\\n\\\n\trender :layout => \\\"${1:layoutname}\\\"\\n\\\nsnippet rn\\n\\\n\trender :nothing => ${1:true}\\n\\\nsnippet rns\\n\\\n\trender :nothing => ${1:true}, :status => ${2:401}\\n\\\nsnippet rp\\n\\\n\trender :partial => \\\"${1:item}\\\"\\n\\\nsnippet rpc\\n\\\n\trender :partial => \\\"${1:item}\\\", :collection => ${2:@$1s}\\n\\\nsnippet rpl\\n\\\n\trender :partial => \\\"${1:item}\\\", :locals => { :${2:$1} => ${3:@$1}\\n\\\nsnippet rpo\\n\\\n\trender :partial => \\\"${1:item}\\\", :object => ${2:@$1}\\n\\\nsnippet rps\\n\\\n\trender :partial => \\\"${1:item}\\\", :status => ${2:500}\\n\\\nsnippet rt\\n\\\n\trender :text => \\\"${1:text to render}\\\"\\n\\\nsnippet rtl\\n\\\n\trender :text => \\\"${1:text to render}\\\", :layout => \\\"${2:layoutname}\\\"\\n\\\nsnippet rtlt\\n\\\n\trender :text => \\\"${1:text to render}\\\", :layout => ${2:true}\\n\\\nsnippet rts\\n\\\n\trender :text => \\\"${1:text to render}\\\", :status => ${2:401}\\n\\\nsnippet ru\\n\\\n\trender :update do |${1:page}|\\n\\\n\t\t$1.${2}\\n\\\n\tend\\n\\\nsnippet rxml\\n\\\n\trender :xml => ${1:text to render}\\n\\\nsnippet sc\\n\\\n\tscope :${1:name}, :where(:@${2:field} => ${3:value})\\n\\\nsnippet sl\\n\\\n\tscope :${1:name}, lambda do |${2:value}|\\n\\\n\t\twhere(\\\"${3:field = ?}\\\", ${4:bind var})\\n\\\n\tend\\n\\\nsnippet sha1\\n\\\n\tDigest::SHA1.hexdigest(${1:string})\\n\\\nsnippet sweeper\\n\\\n\tclass ${1:ModelClassName}Sweeper < ActionController::Caching::Sweeper\\n\\\n\t\tobserve $1\\n\\\n\\n\\\n\t\tdef after_save(${2:model_class_name})\\n\\\n\t\t\texpire_cache($2)\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tdef after_destroy($2)\\n\\\n\t\t\texpire_cache($2)\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tdef expire_cache($2)\\n\\\n\t\t\texpire_page\\n\\\n\t\tend\\n\\\n\tend\\n\\\nsnippet tcb\\n\\\n\tt.boolean :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcbi\\n\\\n\tt.binary :${1:title}, :limit => ${2:2}.megabytes\\n\\\n\t${3}\\n\\\nsnippet tcd\\n\\\n\tt.decimal :${1:title}, :precision => ${2:10}, :scale => ${3:2}\\n\\\n\t${4}\\n\\\nsnippet tcda\\n\\\n\tt.date :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcdt\\n\\\n\tt.datetime :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcf\\n\\\n\tt.float :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tch\\n\\\n\tt.change :${1:name}, :${2:string}, :${3:limit} => ${4:80}\\n\\\n\t${5}\\n\\\nsnippet tci\\n\\\n\tt.integer :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcl\\n\\\n\tt.integer :lock_version, :null => false, :default => 0\\n\\\n\t${1}\\n\\\nsnippet tcr\\n\\\n\tt.references :${1:taggable}, :polymorphic => { :default => '${2:Photo}' }\\n\\\n\t${3}\\n\\\nsnippet tcs\\n\\\n\tt.string :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tct\\n\\\n\tt.text :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcti\\n\\\n\tt.time :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tcts\\n\\\n\tt.timestamp :${1:title}\\n\\\n\t${2}\\n\\\nsnippet tctss\\n\\\n\tt.timestamps\\n\\\n\t${1}\\n\\\nsnippet va\\n\\\n\tvalidates_associated :${1:attribute}\\n\\\nsnippet vao\\n\\\n\tvalidates_acceptance_of :${1:terms}\\n\\\nsnippet vc\\n\\\n\tvalidates_confirmation_of :${1:attribute}\\n\\\nsnippet ve\\n\\\n\tvalidates_exclusion_of :${1:attribute}, :in => ${2:%w( mov avi )}\\n\\\nsnippet vf\\n\\\n\tvalidates_format_of :${1:attribute}, :with => /${2:regex}/\\n\\\nsnippet vi\\n\\\n\tvalidates_inclusion_of :${1:attribute}, :in => %w(${2: mov avi })\\n\\\nsnippet vl\\n\\\n\tvalidates_length_of :${1:attribute}, :within => ${2:3}..${3:20}\\n\\\nsnippet vn\\n\\\n\tvalidates_numericality_of :${1:attribute}\\n\\\nsnippet vpo\\n\\\n\tvalidates_presence_of :${1:attribute}\\n\\\nsnippet vu\\n\\\n\tvalidates_uniqueness_of :${1:attribute}\\n\\\nsnippet wants\\n\\\n\twants.${1:js|xml|html} { ${2} }\\n\\\nsnippet wc\\n\\\n\twhere(${1:\\\"conditions\\\"}${2:, bind_var})\\n\\\nsnippet wh\\n\\\n\twhere(${1:field} => ${2:value})\\n\\\nsnippet xdelete\\n\\\n\txhr :delete, :${1:destroy}, :id => ${2:1}${3}\\n\\\nsnippet xget\\n\\\n\txhr :get, :${1:show}, :id => ${2:1}${3}\\n\\\nsnippet xpost\\n\\\n\txhr :post, :${1:create}, :${2:object} => { ${3} }\\n\\\nsnippet xput\\n\\\n\txhr :put, :${1:update}, :id => ${2:1}, :${3:object} => { ${4} }${5}\\n\\\nsnippet test\\n\\\n\ttest \\\"should ${1:do something}\\\" do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\n#migrations\\n\\\nsnippet mac\\n\\\n\tadd_column :${1:table_name}, :${2:column_name}, :${3:data_type}\\n\\\nsnippet mrc\\n\\\n\tremove_column :${1:table_name}, :${2:column_name}\\n\\\nsnippet mrnc\\n\\\n\trename_column :${1:table_name}, :${2:old_column_name}, :${3:new_column_name}\\n\\\nsnippet mcc\\n\\\n\tchange_column :${1:table}, :${2:column}, :${3:type}\\n\\\nsnippet mccc\\n\\\n\tt.column :${1:title}, :${2:string}\\n\\\nsnippet mct\\n\\\n\tcreate_table :${1:table_name} do |t|\\n\\\n\t\tt.column :${2:name}, :${3:type}\\n\\\n\tend\\n\\\nsnippet migration\\n\\\n\tclass ${1:class_name} < ActiveRecord::Migration\\n\\\n\t\tdef self.up\\n\\\n\t\t\t${2}\\n\\\n\t\tend\\n\\\n\\n\\\n\t\tdef self.down\\n\\\n\t\tend\\n\\\n\tend\\n\\\n\\n\\\nsnippet trc\\n\\\n\tt.remove :${1:column}\\n\\\nsnippet tre\\n\\\n\tt.rename :${1:old_column_name}, :${2:new_column_name}\\n\\\n\t${3}\\n\\\nsnippet tref\\n\\\n\tt.references :${1:model}\\n\\\n\\n\\\n#rspec\\n\\\nsnippet it\\n\\\n\tit \\\"${1:spec_name}\\\" do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet itp\\n\\\n\tit \\\"${1:spec_name}\\\"\\n\\\n\t${2}\\n\\\nsnippet desc\\n\\\n\tdescribe ${1:class_name} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet cont\\n\\\n\tcontext \\\"${1:message}\\\" do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet bef\\n\\\n\tbefore :${1:each} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\nsnippet aft\\n\\\n\tafter :${1:each} do\\n\\\n\t\t${2}\\n\\\n\tend\\n\\\n\";\nexports.scope = \"ruby\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/rust.js",
    "content": "ace.define(\"ace/snippets/rust\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"rust\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/sass.js",
    "content": "ace.define(\"ace/snippets/sass\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"sass\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/scad.js",
    "content": "ace.define(\"ace/snippets/scad\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"scad\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/scala.js",
    "content": "ace.define(\"ace/snippets/scala\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"scala\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/scheme.js",
    "content": "ace.define(\"ace/snippets/scheme\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"scheme\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/scss.js",
    "content": "ace.define(\"ace/snippets/scss\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"scss\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/sh.js",
    "content": "ace.define(\"ace/snippets/sh\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Shebang. Executing bash via /usr/bin/env makes scripts more portable.\\n\\\nsnippet #!\\n\\\n\t#!/usr/bin/env bash\\n\\\n\t\\n\\\nsnippet if\\n\\\n\tif [[ ${1:condition} ]]; then\\n\\\n\t\t${2:#statements}\\n\\\n\tfi\\n\\\nsnippet elif\\n\\\n\telif [[ ${1:condition} ]]; then\\n\\\n\t\t${2:#statements}\\n\\\nsnippet for\\n\\\n\tfor (( ${2:i} = 0; $2 < ${1:count}; $2++ )); do\\n\\\n\t\t${3:#statements}\\n\\\n\tdone\\n\\\nsnippet fori\\n\\\n\tfor ${1:needle} in ${2:haystack} ; do\\n\\\n\t\t${3:#statements}\\n\\\n\tdone\\n\\\nsnippet wh\\n\\\n\twhile [[ ${1:condition} ]]; do\\n\\\n\t\t${2:#statements}\\n\\\n\tdone\\n\\\nsnippet until\\n\\\n\tuntil [[ ${1:condition} ]]; do\\n\\\n\t\t${2:#statements}\\n\\\n\tdone\\n\\\nsnippet case\\n\\\n\tcase ${1:word} in\\n\\\n\t\t${2:pattern})\\n\\\n\t\t\t${3};;\\n\\\n\tesac\\n\\\nsnippet go \\n\\\n\twhile getopts '${1:o}' ${2:opts} \\n\\\n\tdo \\n\\\n\t\tcase $$2 in\\n\\\n\t\t${3:o0})\\n\\\n\t\t\t${4:#staments};;\\n\\\n\t\tesac\\n\\\n\tdone\\n\\\n# Set SCRIPT_DIR variable to directory script is located.\\n\\\nsnippet sdir\\n\\\n\tSCRIPT_DIR=\\\"$( cd \\\"$( dirname \\\"${BASH_SOURCE[0]}\\\" )\\\" && pwd )\\\"\\n\\\n# getopt\\n\\\nsnippet getopt\\n\\\n\t__ScriptVersion=\\\"${1:version}\\\"\\n\\\n\\n\\\n\t#===  FUNCTION  ================================================================\\n\\\n\t#         NAME:  usage\\n\\\n\t#  DESCRIPTION:  Display usage information.\\n\\\n\t#===============================================================================\\n\\\n\tfunction usage ()\\n\\\n\t{\\n\\\n\t\t\tcat <<- EOT\\n\\\n\\n\\\n\t  Usage :  $${0:0} [options] [--] \\n\\\n\\n\\\n\t  Options: \\n\\\n\t  -h|help       Display this message\\n\\\n\t  -v|version    Display script version\\n\\\n\\n\\\n\tEOT\\n\\\n\t}    # ----------  end of function usage  ----------\\n\\\n\\n\\\n\t#-----------------------------------------------------------------------\\n\\\n\t#  Handle command line arguments\\n\\\n\t#-----------------------------------------------------------------------\\n\\\n\\n\\\n\twhile getopts \\\":hv\\\" opt\\n\\\n\tdo\\n\\\n\t  case $opt in\\n\\\n\\n\\\n\t\th|help     )  usage; exit 0   ;;\\n\\\n\\n\\\n\t\tv|version  )  echo \\\"$${0:0} -- Version $__ScriptVersion\\\"; exit 0   ;;\\n\\\n\\n\\\n\t\t\\\\? )  echo -e \\\"\\\\n  Option does not exist : $OPTARG\\\\n\\\"\\n\\\n\t\t\t  usage; exit 1   ;;\\n\\\n\\n\\\n\t  esac    # --- end of case ---\\n\\\n\tdone\\n\\\n\tshift $(($OPTIND-1))\\n\\\n\\n\\\n\";\nexports.scope = \"sh\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/sjs.js",
    "content": "ace.define(\"ace/snippets/sjs\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"sjs\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/slim.js",
    "content": "ace.define(\"ace/snippets/slim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n    \"use strict\";\n\n    exports.snippetText =undefined;\n    exports.scope = \"slim\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/smarty.js",
    "content": "ace.define(\"ace/snippets/smarty\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"smarty\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/snippets.js",
    "content": "ace.define(\"ace/snippets/snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# snippets for making snippets :)\\n\\\nsnippet snip\\n\\\n\tsnippet ${1:trigger}\\n\\\n\t\t${2}\\n\\\nsnippet msnip\\n\\\n\tsnippet ${1:trigger} ${2:description}\\n\\\n\t\t${3}\\n\\\nsnippet v\\n\\\n\t{VISUAL}\\n\\\n\";\nexports.scope = \"snippets\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/soy_template.js",
    "content": "ace.define(\"ace/snippets/soy_template\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"soy_template\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/space.js",
    "content": "ace.define(\"ace/snippets/space\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"space\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/sparql.js",
    "content": "ace.define(\"ace/snippets/sparql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/sql.js",
    "content": "ace.define(\"ace/snippets/sql\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet tbl\\n\\\n\tcreate table ${1:table} (\\n\\\n\t\t${2:columns}\\n\\\n\t);\\n\\\nsnippet col\\n\\\n\t${1:name}\t${2:type}\t${3:default ''}\t${4:not null}\\n\\\nsnippet ccol\\n\\\n\t${1:name}\tvarchar2(${2:size})\t${3:default ''}\t${4:not null}\\n\\\nsnippet ncol\\n\\\n\t${1:name}\tnumber\t${3:default 0}\t${4:not null}\\n\\\nsnippet dcol\\n\\\n\t${1:name}\tdate\t${3:default sysdate}\t${4:not null}\\n\\\nsnippet ind\\n\\\n\tcreate index ${3:$1_$2} on ${1:table}(${2:column});\\n\\\nsnippet uind\\n\\\n\tcreate unique index ${1:name} on ${2:table}(${3:column});\\n\\\nsnippet tblcom\\n\\\n\tcomment on table ${1:table} is '${2:comment}';\\n\\\nsnippet colcom\\n\\\n\tcomment on column ${1:table}.${2:column} is '${3:comment}';\\n\\\nsnippet addcol\\n\\\n\talter table ${1:table} add (${2:column} ${3:type});\\n\\\nsnippet seq\\n\\\n\tcreate sequence ${1:name} start with ${2:1} increment by ${3:1} minvalue ${4:1};\\n\\\nsnippet s*\\n\\\n\tselect * from ${1:table}\\n\\\n\";\nexports.scope = \"sql\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/sqlserver.js",
    "content": "ace.define(\"ace/snippets/sqlserver\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# ISNULL\\n\\\nsnippet isnull\\n\\\n\tISNULL(${1:check_expression}, ${2:replacement_value})\\n\\\n# FORMAT\\n\\\nsnippet format\\n\\\n\tFORMAT(${1:value}, ${2:format})\\n\\\n# CAST\\n\\\nsnippet cast\\n\\\n\tCAST(${1:expression} AS ${2:data_type})\\n\\\n# CONVERT\\n\\\nsnippet convert\\n\\\n\tCONVERT(${1:data_type}, ${2:expression})\\n\\\n# DATEPART\\n\\\nsnippet datepart\\n\\\n\tDATEPART(${1:datepart}, ${2:date})\\n\\\n# DATEDIFF\\n\\\nsnippet datediff\\n\\\n\tDATEDIFF(${1:datepart}, ${2:startdate}, ${3:enddate})\\n\\\n# DATEADD\\n\\\nsnippet dateadd\\n\\\n\tDATEADD(${1:datepart}, ${2:number}, ${3:date})\\n\\\n# DATEFROMPARTS \\n\\\nsnippet datefromparts\\n\\\n\tDATEFROMPARTS(${1:year}, ${2:month}, ${3:day})\\n\\\n# OBJECT_DEFINITION\\n\\\nsnippet objectdef\\n\\\n\tSELECT OBJECT_DEFINITION(OBJECT_ID('${1:sys.server_permissions /*object name*/}'))\\n\\\n# STUFF XML\\n\\\nsnippet stuffxml\\n\\\n\tSTUFF((SELECT ', ' + ${1:ColumnName}\\n\\\n\t\tFROM ${2:TableName}\\n\\\n\t\tWHERE ${3:WhereClause}\\n\\\n\t\tFOR XML PATH('')), 1, 1, '') AS ${4:Alias}\\n\\\n\t${5:/*https://msdn.microsoft.com/en-us/library/ms188043.aspx*/}\\n\\\n# Create Procedure\\n\\\nsnippet createproc\\n\\\n\t-- =============================================\\n\\\n\t-- Author:\t\t${1:Author}\\n\\\n\t-- Create date: ${2:Date}\\n\\\n\t-- Description:\t${3:Description}\\n\\\n\t-- =============================================\\n\\\n\tCREATE PROCEDURE ${4:Procedure_Name}\\n\\\n\t\t${5:/*Add the parameters for the stored procedure here*/}\\n\\\n\tAS\\n\\\n\tBEGIN\\n\\\n\t\t-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.\\n\\\n\t\tSET NOCOUNT ON;\\n\\\n\t\t\\n\\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\\\n\t\t\\n\\\n\tEND\\n\\\n\tGO\\n\\\n# Create Scalar Function\\n\\\nsnippet createfn\\n\\\n\t-- =============================================\\n\\\n\t-- Author:\t\t${1:Author}\\n\\\n\t-- Create date: ${2:Date}\\n\\\n\t-- Description:\t${3:Description}\\n\\\n\t-- =============================================\\n\\\n\tCREATE FUNCTION ${4:Scalar_Function_Name}\\n\\\n\t\t-- Add the parameters for the function here\\n\\\n\tRETURNS ${5:Function_Data_Type}\\n\\\n\tAS\\n\\\n\tBEGIN\\n\\\n\t\tDECLARE @Result ${5:Function_Data_Type}\\n\\\n\t\t\\n\\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\\\n\t\t\\n\\\n\tEND\\n\\\n\tGO\";\nexports.scope = \"sqlserver\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/stylus.js",
    "content": "ace.define(\"ace/snippets/stylus\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"stylus\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/svg.js",
    "content": "ace.define(\"ace/snippets/svg\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"svg\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/swift.js",
    "content": "ace.define(\"ace/snippets/swift\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"swift\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/tcl.js",
    "content": "ace.define(\"ace/snippets/tcl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# #!/usr/bin/env tclsh\\n\\\nsnippet #!\\n\\\n\t#!/usr/bin/env tclsh\\n\\\n\t\\n\\\n# Process\\n\\\nsnippet pro\\n\\\n\tproc ${1:function_name} {${2:args}} {\\n\\\n\t\t${3:#body ...}\\n\\\n\t}\\n\\\n#xif\\n\\\nsnippet xif\\n\\\n\t${1:expr}? ${2:true} : ${3:false}\\n\\\n# Conditional\\n\\\nsnippet if\\n\\\n\tif {${1}} {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# Conditional if..else\\n\\\nsnippet ife\\n\\\n\tif {${1}} {\\n\\\n\t\t${2:# body...}\\n\\\n\t} else {\\n\\\n\t\t${3:# else...}\\n\\\n\t}\\n\\\n# Conditional if..elsif..else\\n\\\nsnippet ifee\\n\\\n\tif {${1}} {\\n\\\n\t\t${2:# body...}\\n\\\n\t} elseif {${3}} {\\n\\\n\t\t${4:# elsif...}\\n\\\n\t} else {\\n\\\n\t\t${5:# else...}\\n\\\n\t}\\n\\\n# If catch then\\n\\\nsnippet ifc\\n\\\n\tif { [catch {${1:#do something...}} ${2:err}] } {\\n\\\n\t\t${3:# handle failure...}\\n\\\n\t}\\n\\\n# Catch\\n\\\nsnippet catch\\n\\\n\tcatch {${1}} ${2:err} ${3:options}\\n\\\n# While Loop\\n\\\nsnippet wh\\n\\\n\twhile {${1}} {\\n\\\n\t\t${2:# body...}\\n\\\n\t}\\n\\\n# For Loop\\n\\\nsnippet for\\n\\\n\tfor {set ${2:var} 0} {$$2 < ${1:count}} {${3:incr} $2} {\\n\\\n\t\t${4:# body...}\\n\\\n\t}\\n\\\n# Foreach Loop\\n\\\nsnippet fore\\n\\\n\tforeach ${1:x} {${2:#list}} {\\n\\\n\t\t${3:# body...}\\n\\\n\t}\\n\\\n# after ms script...\\n\\\nsnippet af\\n\\\n\tafter ${1:ms} ${2:#do something}\\n\\\n# after cancel id\\n\\\nsnippet afc\\n\\\n\tafter cancel ${1:id or script}\\n\\\n# after idle\\n\\\nsnippet afi\\n\\\n\tafter idle ${1:script}\\n\\\n# after info id\\n\\\nsnippet afin\\n\\\n\tafter info ${1:id}\\n\\\n# Expr\\n\\\nsnippet exp\\n\\\n\texpr {${1:#expression here}}\\n\\\n# Switch\\n\\\nsnippet sw\\n\\\n\tswitch ${1:var} {\\n\\\n\t\t${3:pattern 1} {\\n\\\n\t\t\t${4:#do something}\\n\\\n\t\t}\\n\\\n\t\tdefault {\\n\\\n\t\t\t${2:#do something}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n# Case\\n\\\nsnippet ca\\n\\\n\t${1:pattern} {\\n\\\n\t\t${2:#do something}\\n\\\n\t}${3}\\n\\\n# Namespace eval\\n\\\nsnippet ns\\n\\\n\tnamespace eval ${1:path} {${2:#script...}}\\n\\\n# Namespace current\\n\\\nsnippet nsc\\n\\\n\tnamespace current\\n\\\n\";\nexports.scope = \"tcl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/terraform.js",
    "content": "ace.define(\"ace/snippets/terraform\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"terraform\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/tex.js",
    "content": "ace.define(\"ace/snippets/tex\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"#PREAMBLE\\n\\\n#newcommand\\n\\\nsnippet nc\\n\\\n\t\\\\newcommand{\\\\${1:cmd}}[${2:opt}]{${3:realcmd}}${4}\\n\\\n#usepackage\\n\\\nsnippet up\\n\\\n\t\\\\usepackage[${1:[options}]{${2:package}}\\n\\\n#newunicodechar\\n\\\nsnippet nuc\\n\\\n\t\\\\newunicodechar{${1}}{${2:\\\\ensuremath}${3:tex-substitute}}}\\n\\\n#DeclareMathOperator\\n\\\nsnippet dmo\\n\\\n\t\\\\DeclareMathOperator{${1}}{${2}}\\n\\\n\\n\\\n#DOCUMENT\\n\\\n# \\\\begin{}...\\\\end{}\\n\\\nsnippet begin\\n\\\n\t\\\\begin{${1:env}}\\n\\\n\t\t${2}\\n\\\n\t\\\\end{$1}\\n\\\n# Tabular\\n\\\nsnippet tab\\n\\\n\t\\\\begin{${1:tabular}}{${2:c}}\\n\\\n\t${3}\\n\\\n\t\\\\end{$1}\\n\\\nsnippet thm\\n\\\n\t\\\\begin[${1:author}]{${2:thm}}\\n\\\n\t${3}\\n\\\n\t\\\\end{$1}\\n\\\nsnippet center\\n\\\n\t\\\\begin{center}\\n\\\n\t\t${1}\\n\\\n\t\\\\end{center}\\n\\\n# Align(ed)\\n\\\nsnippet ali\\n\\\n\t\\\\begin{align${1:ed}}\\n\\\n\t\t${2}\\n\\\n\t\\\\end{align$1}\\n\\\n# Gather(ed)\\n\\\nsnippet gat\\n\\\n\t\\\\begin{gather${1:ed}}\\n\\\n\t\t${2}\\n\\\n\t\\\\end{gather$1}\\n\\\n# Equation\\n\\\nsnippet eq\\n\\\n\t\\\\begin{equation}\\n\\\n\t\t${1}\\n\\\n\t\\\\end{equation}\\n\\\n# Equation\\n\\\nsnippet eq*\\n\\\n\t\\\\begin{equation*}\\n\\\n\t\t${1}\\n\\\n\t\\\\end{equation*}\\n\\\n# Unnumbered Equation\\n\\\nsnippet \\\\\\n\\\n\t\\\\[\\n\\\n\t\t${1}\\n\\\n\t\\\\]\\n\\\n# Enumerate\\n\\\nsnippet enum\\n\\\n\t\\\\begin{enumerate}\\n\\\n\t\t\\\\item ${1}\\n\\\n\t\\\\end{enumerate}\\n\\\n# Itemize\\n\\\nsnippet itemize\\n\\\n\t\\\\begin{itemize}\\n\\\n\t\t\\\\item ${1}\\n\\\n\t\\\\end{itemize}\\n\\\n# Description\\n\\\nsnippet desc\\n\\\n\t\\\\begin{description}\\n\\\n\t\t\\\\item[${1}] ${2}\\n\\\n\t\\\\end{description}\\n\\\n# Matrix\\n\\\nsnippet mat\\n\\\n\t\\\\begin{${1:p/b/v/V/B/small}matrix}\\n\\\n\t\t${2}\\n\\\n\t\\\\end{$1matrix}\\n\\\n# Cases\\n\\\nsnippet cas\\n\\\n\t\\\\begin{cases}\\n\\\n\t\t${1:equation}, &\\\\text{ if }${2:case}\\\\\\\\\\n\\\n\t\t${3}\\n\\\n\t\\\\end{cases}\\n\\\n# Split\\n\\\nsnippet spl\\n\\\n\t\\\\begin{split}\\n\\\n\t\t${1}\\n\\\n\t\\\\end{split}\\n\\\n# Part\\n\\\nsnippet part\\n\\\n\t\\\\part{${1:part name}} % (fold)\\n\\\n\t\\\\label{prt:${2:$1}}\\n\\\n\t${3}\\n\\\n\t% part $2 (end)\\n\\\n# Chapter\\n\\\nsnippet cha\\n\\\n\t\\\\chapter{${1:chapter name}}\\n\\\n\t\\\\label{cha:${2:$1}}\\n\\\n\t${3}\\n\\\n# Section\\n\\\nsnippet sec\\n\\\n\t\\\\section{${1:section name}}\\n\\\n\t\\\\label{sec:${2:$1}}\\n\\\n\t${3}\\n\\\n# Sub Section\\n\\\nsnippet sub\\n\\\n\t\\\\subsection{${1:subsection name}}\\n\\\n\t\\\\label{sub:${2:$1}}\\n\\\n\t${3}\\n\\\n# Sub Sub Section\\n\\\nsnippet subs\\n\\\n\t\\\\subsubsection{${1:subsubsection name}}\\n\\\n\t\\\\label{ssub:${2:$1}}\\n\\\n\t${3}\\n\\\n# Paragraph\\n\\\nsnippet par\\n\\\n\t\\\\paragraph{${1:paragraph name}}\\n\\\n\t\\\\label{par:${2:$1}}\\n\\\n\t${3}\\n\\\n# Sub Paragraph\\n\\\nsnippet subp\\n\\\n\t\\\\subparagraph{${1:subparagraph name}}\\n\\\n\t\\\\label{subp:${2:$1}}\\n\\\n\t${3}\\n\\\n#References\\n\\\nsnippet itd\\n\\\n\t\\\\item[${1:description}] ${2:item}\\n\\\nsnippet figure\\n\\\n\t${1:Figure}~\\\\ref{${2:fig:}}${3}\\n\\\nsnippet table\\n\\\n\t${1:Table}~\\\\ref{${2:tab:}}${3}\\n\\\nsnippet listing\\n\\\n\t${1:Listing}~\\\\ref{${2:list}}${3}\\n\\\nsnippet section\\n\\\n\t${1:Section}~\\\\ref{${2:sec:}}${3}\\n\\\nsnippet page\\n\\\n\t${1:page}~\\\\pageref{${2}}${3}\\n\\\nsnippet index\\n\\\n\t\\\\index{${1:index}}${2}\\n\\\n#Citations\\n\\\nsnippet cite\\n\\\n\t\\\\cite[${1}]{${2}}${3}\\n\\\nsnippet fcite\\n\\\n\t\\\\footcite[${1}]{${2}}${3}\\n\\\n#Formating text: italic, bold, underline, small capital, emphase ..\\n\\\nsnippet it\\n\\\n\t\\\\textit{${1:text}}\\n\\\nsnippet bf\\n\\\n\t\\\\textbf{${1:text}}\\n\\\nsnippet under\\n\\\n\t\\\\underline{${1:text}}\\n\\\nsnippet emp\\n\\\n\t\\\\emph{${1:text}}\\n\\\nsnippet sc\\n\\\n\t\\\\textsc{${1:text}}\\n\\\n#Choosing font\\n\\\nsnippet sf\\n\\\n\t\\\\textsf{${1:text}}\\n\\\nsnippet rm\\n\\\n\t\\\\textrm{${1:text}}\\n\\\nsnippet tt\\n\\\n\t\\\\texttt{${1:text}}\\n\\\n#misc\\n\\\nsnippet ft\\n\\\n\t\\\\footnote{${1:text}}\\n\\\nsnippet fig\\n\\\n\t\\\\begin{figure}\\n\\\n\t\\\\begin{center}\\n\\\n\t    \\\\includegraphics[scale=${1}]{Figures/${2}}\\n\\\n\t\\\\end{center}\\n\\\n\t\\\\caption{${3}}\\n\\\n\t\\\\label{fig:${4}}\\n\\\n\t\\\\end{figure}\\n\\\nsnippet tikz\\n\\\n\t\\\\begin{figure}\\n\\\n\t\\\\begin{center}\\n\\\n\t\\\\begin{tikzpicture}[scale=${1:1}]\\n\\\n\t\t${2}\\n\\\n\t\\\\end{tikzpicture}\\n\\\n\t\\\\end{center}\\n\\\n\t\\\\caption{${3}}\\n\\\n\t\\\\label{fig:${4}}\\n\\\n\t\\\\end{figure}\\n\\\n#math\\n\\\nsnippet stackrel\\n\\\n\t\\\\stackrel{${1:above}}{${2:below}} ${3}\\n\\\nsnippet frac\\n\\\n\t\\\\frac{${1:num}}{${2:denom}}\\n\\\nsnippet sum\\n\\\n\t\\\\sum^{${1:n}}_{${2:i=1}}{${3}}\";\nexports.scope = \"tex\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/text.js",
    "content": "ace.define(\"ace/snippets/text\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"text\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/textile.js",
    "content": "ace.define(\"ace/snippets/textile\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Jekyll post header\\n\\\nsnippet header\\n\\\n\t---\\n\\\n\ttitle: ${1:title}\\n\\\n\tlayout: post\\n\\\n\tdate: ${2:date} ${3:hour:minute:second} -05:00\\n\\\n\t---\\n\\\n\\n\\\n# Image\\n\\\nsnippet img\\n\\\n\t!${1:url}(${2:title}):${3:link}!\\n\\\n\\n\\\n# Table\\n\\\nsnippet |\\n\\\n\t|${1}|${2}\\n\\\n\\n\\\n# Link\\n\\\nsnippet link\\n\\\n\t\\\"${1:link text}\\\":${2:url}\\n\\\n\\n\\\n# Acronym\\n\\\nsnippet (\\n\\\n\t(${1:Expand acronym})${2}\\n\\\n\\n\\\n# Footnote\\n\\\nsnippet fn\\n\\\n\t[${1:ref number}] ${3}\\n\\\n\\n\\\n\tfn$1. ${2:footnote}\\n\\\n\t\\n\\\n\";\nexports.scope = \"textile\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/toml.js",
    "content": "ace.define(\"ace/snippets/toml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"toml\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/tsx.js",
    "content": "ace.define(\"ace/snippets/tsx\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"tsx\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/turtle.js",
    "content": "ace.define(\"ace/snippets/turtle\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/twig.js",
    "content": "ace.define(\"ace/snippets/twig\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"twig\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/typescript.js",
    "content": "ace.define(\"ace/snippets/typescript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"typescript\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/vala.js",
    "content": "ace.define(\"ace/snippets/vala\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nexports.snippets = [\n    {\n        \"content\": \"case ${1:condition}:\\n\\t$0\\n\\tbreak;\\n\",\n        \"name\": \"case\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"case\"\n    },\n    {\n        \"content\": \"/**\\n * ${6}\\n */\\n${1:public} class ${2:MethodName}${3: : GLib.Object} {\\n\\n\\t/**\\n\\t * ${7}\\n\\t */\\n\\tpublic ${2}(${4}) {\\n\\t\\t${5}\\n\\t}\\n\\n\\t$0\\n}\",\n        \"name\": \"class\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"class\"\n    },\n    {\n        \"content\": \"(${1}) => {\\n\\t${0}\\n}\\n\",\n        \"name\": \"closure\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"=>\"\n    },\n    {\n        \"content\": \"/*\\n * $0\\n */\",\n        \"name\": \"Comment (multiline)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"/*\"\n    },\n    {\n        \"content\": \"Console.WriteLine($1);\\n$0\",\n        \"name\": \"Console.WriteLine (writeline)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"writeline\"\n    },\n    {\n        \"content\": \"[DBus(name = \\\"$0\\\")]\",\n        \"name\": \"DBus annotation\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"[DBus\"\n    },\n    {\n        \"content\": \"delegate ${1:void} ${2:DelegateName}($0);\",\n        \"name\": \"delegate\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"delegate\"\n    },\n    {\n        \"content\": \"do {\\n\\t$0\\n} while ($1);\\n\",\n        \"name\": \"do while\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"dowhile\"\n    },\n    {\n        \"content\": \"/**\\n * $0\\n */\",\n        \"name\": \"DocBlock\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"/**\"\n    },\n    {\n        \"content\": \"else if ($1) {\\n\\t$0\\n}\\n\",\n        \"name\": \"else if (elseif)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"elseif\"\n    },\n    {\n        \"content\": \"else {\\n\\t$0\\n}\",\n        \"name\": \"else\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"else\"\n    },\n    {\n        \"content\": \"enum {$1:EnumName} {\\n\\t$0\\n}\",\n        \"name\": \"enum\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"enum\"\n    },\n    {\n        \"content\": \"public errordomain ${1:Error} {\\n\\t$0\\n}\",\n        \"name\": \"error domain\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"errordomain\"\n    },\n    {\n        \"content\": \"for ($1;$2;$3) {\\n\\t$0\\n}\",\n        \"name\": \"for\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"for\"\n    },\n    {\n        \"content\": \"foreach ($1 in $2) {\\n\\t$0\\n}\",\n        \"name\": \"foreach\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"foreach\"\n    },\n    {\n        \"content\": \"Gee.ArrayList<${1:G}>($0);\",\n        \"name\": \"Gee.ArrayList\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"ArrayList\"\n    },\n    {\n        \"content\": \"Gee.HashMap<${1:K},${2:V}>($0);\",\n        \"name\": \"Gee.HashMap\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"HashMap\"\n    },\n    {\n        \"content\": \"Gee.HashSet<${1:G}>($0);\",\n        \"name\": \"Gee.HashSet\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"HashSet\"\n    },\n    {\n        \"content\": \"if ($1) {\\n\\t$0\\n}\",\n        \"name\": \"if\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"if\"\n    },\n    {\n        \"content\": \"interface ${1:InterfaceName}{$2: : SuperInterface} {\\n\\t$0\\n}\",\n        \"name\": \"interface\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"interface\"\n    },\n    {\n        \"content\": \"public static int main(string [] argv) {\\n\\t${0}\\n\\treturn 0;\\n}\",\n        \"name\": \"Main function\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"main\"\n    },\n    {\n        \"content\": \"namespace $1 {\\n\\t$0\\n}\\n\",\n        \"name\": \"namespace (ns)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"ns\"\n    },\n    {\n        \"content\": \"stdout.printf($0);\",\n        \"name\": \"printf\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"printf\"\n    },\n    {\n        \"content\": \"${1:public} ${2:Type} ${3:Name} {\\n\\tset {\\n\\t\\t$0\\n\\t}\\n\\tget {\\n\\n\\t}\\n}\",\n        \"name\": \"property (prop)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"prop\"\n    },\n    {\n        \"content\": \"${1:public} ${2:Type} ${3:Name} {\\n\\tget {\\n\\t\\t$0\\n\\t}\\n}\",\n        \"name\": \"read-only property (roprop)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"roprop\"\n    },\n    {\n        \"content\": \"@\\\"${1:\\\\$var}\\\"\",\n        \"name\": \"String template (@)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"@\"\n    },\n    {\n        \"content\": \"struct ${1:StructName} {\\n\\t$0\\n}\",\n        \"name\": \"struct\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"struct\"\n    },\n    {\n        \"content\": \"switch ($1) {\\n\\t$0\\n}\",\n        \"name\": \"switch\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"switch\"\n    },\n    {\n        \"content\": \"try {\\n\\t$2\\n} catch (${1:Error} e) {\\n\\t$0\\n}\",\n        \"name\": \"try/catch\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"try\"\n    },\n    {\n        \"content\": \"\\\"\\\"\\\"$0\\\"\\\"\\\";\",\n        \"name\": \"Verbatim string (\\\"\\\"\\\")\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"verbatim\"\n    },\n    {\n        \"content\": \"while ($1) {\\n\\t$0\\n}\",\n        \"name\": \"while\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"while\"\n    }\n];\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/vbscript.js",
    "content": "ace.define(\"ace/snippets/vbscript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"vbscript\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/velocity.js",
    "content": "ace.define(\"ace/snippets/velocity\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# macro\\n\\\nsnippet #macro\\n\\\n\t#macro ( ${1:macroName} ${2:\\\\$var1, [\\\\$var2, ...]} )\\n\\\n\t\t${3:## macro code}\\n\\\n\t#end\\n\\\n# foreach\\n\\\nsnippet #foreach\\n\\\n\t#foreach ( ${1:\\\\$item} in ${2:\\\\$collection} )\\n\\\n\t\t${3:## foreach code}\\n\\\n\t#end\\n\\\n# if\\n\\\nsnippet #if\\n\\\n\t#if ( ${1:true} )\\n\\\n\t\t${0}\\n\\\n\t#end\\n\\\n# if ... else\\n\\\nsnippet #ife\\n\\\n\t#if ( ${1:true} )\\n\\\n\t\t${2}\\n\\\n\t#else\\n\\\n\t\t${0}\\n\\\n\t#end\\n\\\n#import\\n\\\nsnippet #import\\n\\\n\t#import ( \\\"${1:path/to/velocity/format}\\\" )\\n\\\n# set\\n\\\nsnippet #set\\n\\\n\t#set ( $${1:var} = ${0} )\\n\\\n\";\nexports.scope = \"velocity\";\nexports.includeScopes = [\"html\", \"javascript\", \"css\"];\n\n});                (function() {\n                    ace.require([\"ace/snippets/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/verilog.js",
    "content": "ace.define(\"ace/snippets/verilog\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"verilog\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/vhdl.js",
    "content": "ace.define(\"ace/snippets/vhdl\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"vhdl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/visualforce.js",
    "content": "ace.define(\"ace/snippets/visualforce\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"visualforce\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/wollok.js",
    "content": "ace.define(\"ace/snippets/wollok\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"##\\n\\\n## Basic Java packages and import\\n\\\nsnippet im\\n\\\n\timport\\n\\\nsnippet w.l\\n\\\n\twollok.lang\\n\\\nsnippet w.i\\n\\\n\twollok.lib\\n\\\n\\n\\\n## Class and object\\n\\\nsnippet cl\\n\\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\n\\\nsnippet obj\\n\\\n\tobject ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2:inherits Parent}${3}\\n\\\nsnippet te\\n\\\n\ttest ${1:`Filename(\\\"\\\", \\\"untitled\\\")`}\\n\\\n\\n\\\n##\\n\\\n## Enhancements\\n\\\nsnippet inh\\n\\\n\tinherits\\n\\\n\\n\\\n##\\n\\\n## Comments\\n\\\nsnippet /*\\n\\\n\t/*\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n\\n\\\n##\\n\\\n## Control Statements\\n\\\nsnippet el\\n\\\n\telse\\n\\\nsnippet if\\n\\\n\tif (${1}) ${2}\\n\\\n\\n\\\n##\\n\\\n## Create a Method\\n\\\nsnippet m\\n\\\n\tmethod ${1:method}(${2}) ${5}\\n\\\n\\n\\\n##  \\n\\\n## Tests\\n\\\nsnippet as\\n\\\n\tassert.equals(${1:expected}, ${2:actual})\\n\\\n\\n\\\n##\\n\\\n## Exceptions\\n\\\nsnippet ca\\n\\\n\tcatch ${1:e} : (${2:Exception} ) ${3}\\n\\\nsnippet thr\\n\\\n\tthrow\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${3}\\n\\\n\t} catch ${1:e} : ${2:Exception} {\\n\\\n\t}\\n\\\n\\n\\\n##\\n\\\n## Javadocs\\n\\\nsnippet /**\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n\\n\\\n##\\n\\\n## Print Methods\\n\\\nsnippet print\\n\\\n\tconsole.println(\\\"${1:Message}\\\")\\n\\\n\\n\\\n##\\n\\\n## Setter and Getter Methods\\n\\\nsnippet set\\n\\\n\tmethod set${1:}(${2:}) {\\n\\\n\t\t$1 = $2\\n\\\n\t}\\n\\\nsnippet get\\n\\\n\tmethod get${1:}() {\\n\\\n\t\treturn ${1:};\\n\\\n\t}\\n\\\n\\n\\\n##\\n\\\n## Terminate Methods or Loops\\n\\\nsnippet re\\n\\\n\treturn\";\nexports.scope = \"wollok\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/xml.js",
    "content": "ace.define(\"ace/snippets/xml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"xml\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/xquery.js",
    "content": "ace.define(\"ace/snippets/xquery\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet for\\n\\\n\tfor $${1:item} in ${2:expr}\\n\\\nsnippet return\\n\\\n\treturn ${1:expr}\\n\\\nsnippet import\\n\\\n\timport module namespace ${1:ns} = \\\"${2:http://www.example.com/}\\\";\\n\\\nsnippet some\\n\\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\n\\\nsnippet every\\n\\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\n\\\nsnippet if\\n\\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\n\\\nsnippet switch\\n\\\n\tswitch(${1:\\\"foo\\\"})\\n\\\n\tcase ${2:\\\"foo\\\"}\\n\\\n\treturn ${3:true}\\n\\\n\tdefault return ${4:false}\\n\\\nsnippet try\\n\\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\n\\\nsnippet tumbling\\n\\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\\\n\tstart at $${3:start} when ${4:expr}\\n\\\n\tend at $${5:end} when ${6:expr}\\n\\\n\treturn ${7:expr}\\n\\\nsnippet sliding\\n\\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\\\n\tstart at $${3:start} when ${4:expr}\\n\\\n\tend at $${5:end} when ${6:expr}\\n\\\n\treturn ${7:expr}\\n\\\nsnippet let\\n\\\n\tlet $${1:varname} := ${2:expr}\\n\\\nsnippet group\\n\\\n\tgroup by $${1:varname} := ${2:expr}\\n\\\nsnippet order\\n\\\n\torder by ${1:expr} ${2:descending}\\n\\\nsnippet stable\\n\\\n\tstable order by ${1:expr}\\n\\\nsnippet count\\n\\\n\tcount $${1:varname}\\n\\\nsnippet ordered\\n\\\n\tordered { ${1:expr} }\\n\\\nsnippet unordered\\n\\\n\tunordered { ${1:expr} }\\n\\\nsnippet treat \\n\\\n\ttreat as ${1:expr}\\n\\\nsnippet castable\\n\\\n\tcastable as ${1:atomicType}\\n\\\nsnippet cast\\n\\\n\tcast as ${1:atomicType}\\n\\\nsnippet typeswitch\\n\\\n\ttypeswitch(${1:expr})\\n\\\n\tcase ${2:type}  return ${3:expr}\\n\\\n\tdefault return ${4:expr}\\n\\\nsnippet var\\n\\\n\tdeclare variable $${1:varname} := ${2:expr};\\n\\\nsnippet fn\\n\\\n\tdeclare function ${1:ns}:${2:name}(){\\n\\\n\t${3:expr}\\n\\\n\t};\\n\\\nsnippet module\\n\\\n\tmodule namespace ${1:ns} = \\\"${2:http://www.example.com}\\\";\\n\\\n\";\nexports.scope = \"xquery\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/snippets/yaml.js",
    "content": "ace.define(\"ace/snippets/yaml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"yaml\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-ambiance.js",
    "content": "ace.define(\"ace/theme/ambiance\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-ambiance\";\nexports.cssText = \".ace-ambiance .ace_gutter {\\\nbackground-color: #3d3d3d;\\\nbackground-image: linear-gradient(left, #3D3D3D, #333);\\\nbackground-repeat: repeat-x;\\\nborder-right: 1px solid #4d4d4d;\\\ntext-shadow: 0px 1px 1px #4d4d4d;\\\ncolor: #222;\\\n}\\\n.ace-ambiance .ace_gutter-layer {\\\nbackground: repeat left top;\\\n}\\\n.ace-ambiance .ace_gutter-active-line {\\\nbackground-color: #3F3F3F;\\\n}\\\n.ace-ambiance .ace_fold-widget {\\\ntext-align: center;\\\n}\\\n.ace-ambiance .ace_fold-widget:hover {\\\ncolor: #777;\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_start,\\\n.ace-ambiance .ace_fold-widget.ace_end,\\\n.ace-ambiance .ace_fold-widget.ace_closed{\\\nbackground: none;\\\nborder: none;\\\nbox-shadow: none;\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_start:after {\\\ncontent: '▾'\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_end:after {\\\ncontent: '▴'\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_closed:after {\\\ncontent: '‣'\\\n}\\\n.ace-ambiance .ace_print-margin {\\\nborder-left: 1px dotted #2D2D2D;\\\nright: 0;\\\nbackground: #262626;\\\n}\\\n.ace-ambiance .ace_scroller {\\\n-webkit-box-shadow: inset 0 0 10px black;\\\n-moz-box-shadow: inset 0 0 10px black;\\\n-o-box-shadow: inset 0 0 10px black;\\\nbox-shadow: inset 0 0 10px black;\\\n}\\\n.ace-ambiance {\\\ncolor: #E6E1DC;\\\nbackground-color: #202020;\\\n}\\\n.ace-ambiance .ace_cursor {\\\nborder-left: 1px solid #7991E8;\\\n}\\\n.ace-ambiance .ace_overwrite-cursors .ace_cursor {\\\nborder: 1px solid #FFE300;\\\nbackground: #766B13;\\\n}\\\n.ace-ambiance.normal-mode .ace_cursor-layer {\\\nz-index: 0;\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_selected-word {\\\nborder-radius: 4px;\\\nborder: 8px solid #3f475d;\\\nbox-shadow: 0 0 4px black;\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031);\\\n}\\\n.ace-ambiance .ace_invisible {\\\ncolor: #333;\\\n}\\\n.ace-ambiance .ace_paren {\\\ncolor: #24C2C7;\\\n}\\\n.ace-ambiance .ace_keyword {\\\ncolor: #cda869;\\\n}\\\n.ace-ambiance .ace_keyword.ace_operator {\\\ncolor: #fa8d6a;\\\n}\\\n.ace-ambiance .ace_punctuation.ace_operator {\\\ncolor: #fa8d6a;\\\n}\\\n.ace-ambiance .ace_identifier {\\\n}\\\n.ace-ambiance .ace-statement {\\\ncolor: #cda869;\\\n}\\\n.ace-ambiance .ace_constant {\\\ncolor: #CF7EA9;\\\n}\\\n.ace-ambiance .ace_constant.ace_language {\\\ncolor: #CF7EA9;\\\n}\\\n.ace-ambiance .ace_constant.ace_library {\\\n}\\\n.ace-ambiance .ace_constant.ace_numeric {\\\ncolor: #78CF8A;\\\n}\\\n.ace-ambiance .ace_invalid {\\\ntext-decoration: underline;\\\n}\\\n.ace-ambiance .ace_invalid.ace_illegal {\\\ncolor:#F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75);\\\n}\\\n.ace-ambiance .ace_invalid,\\\n.ace-ambiance .ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1;\\\n}\\\n.ace-ambiance .ace_support {\\\ncolor: #9B859D;\\\n}\\\n.ace-ambiance .ace_support.ace_function {\\\ncolor: #DAD085;\\\n}\\\n.ace-ambiance .ace_function.ace_buildin {\\\ncolor: #9b859d;\\\n}\\\n.ace-ambiance .ace_string {\\\ncolor: #8f9d6a;\\\n}\\\n.ace-ambiance .ace_string.ace_regexp {\\\ncolor: #DAD085;\\\n}\\\n.ace-ambiance .ace_comment {\\\nfont-style: italic;\\\ncolor: #555;\\\n}\\\n.ace-ambiance .ace_comment.ace_doc {\\\n}\\\n.ace-ambiance .ace_comment.ace_doc.ace_tag {\\\ncolor: #666;\\\nfont-style: normal;\\\n}\\\n.ace-ambiance .ace_definition,\\\n.ace-ambiance .ace_type {\\\ncolor: #aac6e3;\\\n}\\\n.ace-ambiance .ace_variable {\\\ncolor: #9999cc;\\\n}\\\n.ace-ambiance .ace_variable.ace_language {\\\ncolor: #9b859d;\\\n}\\\n.ace-ambiance .ace_xml-pe {\\\ncolor: #494949;\\\n}\\\n.ace-ambiance .ace_gutter-layer,\\\n.ace-ambiance .ace_text-layer {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace-ambiance .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    ace.require([\"ace/theme/ambiance\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-chaos.js",
    "content": "ace.define(\"ace/theme/chaos\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-chaos\";\nexports.cssText = \".ace-chaos .ace_gutter {\\\nbackground: #141414;\\\ncolor: #595959;\\\nborder-right: 1px solid #282828;\\\n}\\\n.ace-chaos .ace_gutter-cell.ace_warning {\\\nbackground-image: none;\\\nbackground: #FC0;\\\nborder-left: none;\\\npadding-left: 0;\\\ncolor: #000;\\\n}\\\n.ace-chaos .ace_gutter-cell.ace_error {\\\nbackground-position: -6px center;\\\nbackground-image: none;\\\nbackground: #F10;\\\nborder-left: none;\\\npadding-left: 0;\\\ncolor: #000;\\\n}\\\n.ace-chaos .ace_print-margin {\\\nborder-left: 1px solid #555;\\\nright: 0;\\\nbackground: #1D1D1D;\\\n}\\\n.ace-chaos {\\\nbackground-color: #161616;\\\ncolor: #E6E1DC;\\\n}\\\n.ace-chaos .ace_cursor {\\\nborder-left: 2px solid #FFFFFF;\\\n}\\\n.ace-chaos .ace_cursor.ace_overwrite {\\\nborder-left: 0px;\\\nborder-bottom: 1px solid #FFFFFF;\\\n}\\\n.ace-chaos .ace_marker-layer .ace_selection {\\\nbackground: #494836;\\\n}\\\n.ace-chaos .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-chaos .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #FCE94F;\\\n}\\\n.ace-chaos .ace_marker-layer .ace_active-line {\\\nbackground: #333;\\\n}\\\n.ace-chaos .ace_gutter-active-line {\\\nbackground-color: #222;\\\n}\\\n.ace-chaos .ace_invisible {\\\ncolor: #404040;\\\n}\\\n.ace-chaos .ace_keyword {\\\ncolor:#00698F;\\\n}\\\n.ace-chaos .ace_keyword.ace_operator {\\\ncolor:#FF308F;\\\n}\\\n.ace-chaos .ace_constant {\\\ncolor:#1EDAFB;\\\n}\\\n.ace-chaos .ace_constant.ace_language {\\\ncolor:#FDC251;\\\n}\\\n.ace-chaos .ace_constant.ace_library {\\\ncolor:#8DFF0A;\\\n}\\\n.ace-chaos .ace_constant.ace_numeric {\\\ncolor:#58C554;\\\n}\\\n.ace-chaos .ace_invalid {\\\ncolor:#FFFFFF;\\\nbackground-color:#990000;\\\n}\\\n.ace-chaos .ace_invalid.ace_deprecated {\\\ncolor:#FFFFFF;\\\nbackground-color:#990000;\\\n}\\\n.ace-chaos .ace_support {\\\ncolor: #999;\\\n}\\\n.ace-chaos .ace_support.ace_function {\\\ncolor:#00AEEF;\\\n}\\\n.ace-chaos .ace_function {\\\ncolor:#00AEEF;\\\n}\\\n.ace-chaos .ace_string {\\\ncolor:#58C554;\\\n}\\\n.ace-chaos .ace_comment {\\\ncolor:#555;\\\nfont-style:italic;\\\npadding-bottom: 0px;\\\n}\\\n.ace-chaos .ace_variable {\\\ncolor:#997744;\\\n}\\\n.ace-chaos .ace_meta.ace_tag {\\\ncolor:#BE53E6;\\\n}\\\n.ace-chaos .ace_entity.ace_other.ace_attribute-name {\\\ncolor:#FFFF89;\\\n}\\\n.ace-chaos .ace_markup.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace-chaos .ace_fold-widget {\\\ntext-align: center;\\\n}\\\n.ace-chaos .ace_fold-widget:hover {\\\ncolor: #777;\\\n}\\\n.ace-chaos .ace_fold-widget.ace_start,\\\n.ace-chaos .ace_fold-widget.ace_end,\\\n.ace-chaos .ace_fold-widget.ace_closed{\\\nbackground: none;\\\nborder: none;\\\nbox-shadow: none;\\\n}\\\n.ace-chaos .ace_fold-widget.ace_start:after {\\\ncontent: '▾'\\\n}\\\n.ace-chaos .ace_fold-widget.ace_end:after {\\\ncontent: '▴'\\\n}\\\n.ace-chaos .ace_fold-widget.ace_closed:after {\\\ncontent: '‣'\\\n}\\\n.ace-chaos .ace_indent-guide {\\\nborder-right:1px dotted #333;\\\nmargin-right:-1px;\\\n}\\\n.ace-chaos .ace_fold { \\\nbackground: #222; \\\nborder-radius: 3px; \\\ncolor: #7AF; \\\nborder: none; \\\n}\\\n.ace-chaos .ace_fold:hover {\\\nbackground: #CCC; \\\ncolor: #000;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    ace.require([\"ace/theme/chaos\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-chrome.js",
    "content": "ace.define(\"ace/theme/chrome\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-chrome\";\nexports.cssText = \".ace-chrome .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333;\\\noverflow : hidden;\\\n}\\\n.ace-chrome .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-chrome {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-chrome .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-chrome .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-chrome .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-chrome .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-chrome .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-chrome .ace_invalid {\\\nbackground-color: rgb(153, 0, 0);\\\ncolor: white;\\\n}\\\n.ace-chrome .ace_fold {\\\n}\\\n.ace-chrome .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-chrome .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-chrome .ace_support.ace_type,\\\n.ace-chrome .ace_support.ace_class\\\n.ace-chrome .ace_support.ace_other {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-chrome .ace_variable.ace_parameter {\\\nfont-style:italic;\\\ncolor:#FD971F;\\\n}\\\n.ace-chrome .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-chrome .ace_comment {\\\ncolor: #236e24;\\\n}\\\n.ace-chrome .ace_comment.ace_doc {\\\ncolor: #236e24;\\\n}\\\n.ace-chrome .ace_comment.ace_doc.ace_tag {\\\ncolor: #236e24;\\\n}\\\n.ace-chrome .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-chrome .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-chrome .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-chrome .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-chrome .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-chrome .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-chrome .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-chrome .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-chrome .ace_storage,\\\n.ace-chrome .ace_keyword,\\\n.ace-chrome .ace_meta.ace_tag {\\\ncolor: rgb(147, 15, 128);\\\n}\\\n.ace-chrome .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-chrome .ace_string {\\\ncolor: #1A1AA6;\\\n}\\\n.ace-chrome .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #994409;\\\n}\\\n.ace-chrome .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/chrome\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-clouds.js",
    "content": "ace.define(\"ace/theme/clouds\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-clouds\";\nexports.cssText = \".ace-clouds .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333\\\n}\\\n.ace-clouds .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-clouds {\\\nbackground-color: #FFFFFF;\\\ncolor: #000000\\\n}\\\n.ace-clouds .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-clouds .ace_marker-layer .ace_selection {\\\nbackground: #BDD5FC\\\n}\\\n.ace-clouds.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-clouds .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-clouds .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #BFBFBF\\\n}\\\n.ace-clouds .ace_marker-layer .ace_active-line {\\\nbackground: #FFFBD1\\\n}\\\n.ace-clouds .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-clouds .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #BDD5FC\\\n}\\\n.ace-clouds .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-clouds .ace_keyword,\\\n.ace-clouds .ace_meta,\\\n.ace-clouds .ace_support.ace_constant.ace_property-value {\\\ncolor: #AF956F\\\n}\\\n.ace-clouds .ace_keyword.ace_operator {\\\ncolor: #484848\\\n}\\\n.ace-clouds .ace_keyword.ace_other.ace_unit {\\\ncolor: #96DC5F\\\n}\\\n.ace-clouds .ace_constant.ace_language {\\\ncolor: #39946A\\\n}\\\n.ace-clouds .ace_constant.ace_numeric {\\\ncolor: #46A609\\\n}\\\n.ace-clouds .ace_constant.ace_character.ace_entity {\\\ncolor: #BF78CC\\\n}\\\n.ace-clouds .ace_invalid {\\\nbackground-color: #FF002A\\\n}\\\n.ace-clouds .ace_fold {\\\nbackground-color: #AF956F;\\\nborder-color: #000000\\\n}\\\n.ace-clouds .ace_storage,\\\n.ace-clouds .ace_support.ace_class,\\\n.ace-clouds .ace_support.ace_function,\\\n.ace-clouds .ace_support.ace_other,\\\n.ace-clouds .ace_support.ace_type {\\\ncolor: #C52727\\\n}\\\n.ace-clouds .ace_string {\\\ncolor: #5D90CD\\\n}\\\n.ace-clouds .ace_comment {\\\ncolor: #BCC8BA\\\n}\\\n.ace-clouds .ace_entity.ace_name.ace_tag,\\\n.ace-clouds .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #606060\\\n}\\\n.ace-clouds .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/clouds\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-clouds_midnight.js",
    "content": "ace.define(\"ace/theme/clouds_midnight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-clouds-midnight\";\nexports.cssText = \".ace-clouds-midnight .ace_gutter {\\\nbackground: #232323;\\\ncolor: #929292\\\n}\\\n.ace-clouds-midnight .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #232323\\\n}\\\n.ace-clouds-midnight {\\\nbackground-color: #191919;\\\ncolor: #929292\\\n}\\\n.ace-clouds-midnight .ace_cursor {\\\ncolor: #7DA5DC\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_selection {\\\nbackground: #000000\\\n}\\\n.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #191919;\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #BFBFBF\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_active-line {\\\nbackground: rgba(215, 215, 215, 0.031)\\\n}\\\n.ace-clouds-midnight .ace_gutter-active-line {\\\nbackground-color: rgba(215, 215, 215, 0.031)\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #000000\\\n}\\\n.ace-clouds-midnight .ace_invisible {\\\ncolor: #666\\\n}\\\n.ace-clouds-midnight .ace_keyword,\\\n.ace-clouds-midnight .ace_meta,\\\n.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {\\\ncolor: #927C5D\\\n}\\\n.ace-clouds-midnight .ace_keyword.ace_operator {\\\ncolor: #4B4B4B\\\n}\\\n.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {\\\ncolor: #366F1A\\\n}\\\n.ace-clouds-midnight .ace_constant.ace_language {\\\ncolor: #39946A\\\n}\\\n.ace-clouds-midnight .ace_constant.ace_numeric {\\\ncolor: #46A609\\\n}\\\n.ace-clouds-midnight .ace_constant.ace_character.ace_entity {\\\ncolor: #A165AC\\\n}\\\n.ace-clouds-midnight .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #E92E2E\\\n}\\\n.ace-clouds-midnight .ace_fold {\\\nbackground-color: #927C5D;\\\nborder-color: #929292\\\n}\\\n.ace-clouds-midnight .ace_storage,\\\n.ace-clouds-midnight .ace_support.ace_class,\\\n.ace-clouds-midnight .ace_support.ace_function,\\\n.ace-clouds-midnight .ace_support.ace_other,\\\n.ace-clouds-midnight .ace_support.ace_type {\\\ncolor: #E92E2E\\\n}\\\n.ace-clouds-midnight .ace_string {\\\ncolor: #5D90CD\\\n}\\\n.ace-clouds-midnight .ace_comment {\\\ncolor: #3C403B\\\n}\\\n.ace-clouds-midnight .ace_entity.ace_name.ace_tag,\\\n.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #606060\\\n}\\\n.ace-clouds-midnight .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/clouds_midnight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-cobalt.js",
    "content": "ace.define(\"ace/theme/cobalt\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-cobalt\";\nexports.cssText = \".ace-cobalt .ace_gutter {\\\nbackground: #011e3a;\\\ncolor: rgb(128,145,160)\\\n}\\\n.ace-cobalt .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555555\\\n}\\\n.ace-cobalt {\\\nbackground-color: #002240;\\\ncolor: #FFFFFF\\\n}\\\n.ace-cobalt .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_selection {\\\nbackground: rgba(179, 101, 57, 0.75)\\\n}\\\n.ace-cobalt.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002240;\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_step {\\\nbackground: rgb(127, 111, 19)\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.15)\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.35)\\\n}\\\n.ace-cobalt .ace_gutter-active-line {\\\nbackground-color: rgba(0, 0, 0, 0.35)\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(179, 101, 57, 0.75)\\\n}\\\n.ace-cobalt .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.15)\\\n}\\\n.ace-cobalt .ace_keyword,\\\n.ace-cobalt .ace_meta {\\\ncolor: #FF9D00\\\n}\\\n.ace-cobalt .ace_constant,\\\n.ace-cobalt .ace_constant.ace_character,\\\n.ace-cobalt .ace_constant.ace_character.ace_escape,\\\n.ace-cobalt .ace_constant.ace_other {\\\ncolor: #FF628C\\\n}\\\n.ace-cobalt .ace_invalid {\\\ncolor: #F8F8F8;\\\nbackground-color: #800F00\\\n}\\\n.ace-cobalt .ace_support {\\\ncolor: #80FFBB\\\n}\\\n.ace-cobalt .ace_support.ace_constant {\\\ncolor: #EB939A\\\n}\\\n.ace-cobalt .ace_fold {\\\nbackground-color: #FF9D00;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-cobalt .ace_support.ace_function {\\\ncolor: #FFB054\\\n}\\\n.ace-cobalt .ace_storage {\\\ncolor: #FFEE80\\\n}\\\n.ace-cobalt .ace_entity {\\\ncolor: #FFDD00\\\n}\\\n.ace-cobalt .ace_string {\\\ncolor: #3AD900\\\n}\\\n.ace-cobalt .ace_string.ace_regexp {\\\ncolor: #80FFC2\\\n}\\\n.ace-cobalt .ace_comment {\\\nfont-style: italic;\\\ncolor: #0088FF\\\n}\\\n.ace-cobalt .ace_heading,\\\n.ace-cobalt .ace_markup.ace_heading {\\\ncolor: #C8E4FD;\\\nbackground-color: #001221\\\n}\\\n.ace-cobalt .ace_list,\\\n.ace-cobalt .ace_markup.ace_list {\\\nbackground-color: #130D26\\\n}\\\n.ace-cobalt .ace_variable {\\\ncolor: #CCCCCC\\\n}\\\n.ace-cobalt .ace_variable.ace_language {\\\ncolor: #FF80E1\\\n}\\\n.ace-cobalt .ace_meta.ace_tag {\\\ncolor: #9EFFFF\\\n}\\\n.ace-cobalt .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/cobalt\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-crimson_editor.js",
    "content": "ace.define(\"ace/theme/crimson_editor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\nexports.isDark = false;\nexports.cssText = \".ace-crimson-editor .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333;\\\noverflow : hidden;\\\n}\\\n.ace-crimson-editor .ace_gutter-layer {\\\nwidth: 100%;\\\ntext-align: right;\\\n}\\\n.ace-crimson-editor .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-crimson-editor {\\\nbackground-color: #FFFFFF;\\\ncolor: rgb(64, 64, 64);\\\n}\\\n.ace-crimson-editor .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-crimson-editor .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-crimson-editor .ace_identifier {\\\ncolor: black;\\\n}\\\n.ace-crimson-editor .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-crimson-editor .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-crimson-editor .ace_constant.ace_language {\\\ncolor: rgb(255, 156, 0);\\\n}\\\n.ace-crimson-editor .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-crimson-editor .ace_invalid {\\\ntext-decoration: line-through;\\\ncolor: rgb(224, 0, 0);\\\n}\\\n.ace-crimson-editor .ace_fold {\\\n}\\\n.ace-crimson-editor .ace_support.ace_function {\\\ncolor: rgb(192, 0, 0);\\\n}\\\n.ace-crimson-editor .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-crimson-editor .ace_support.ace_type,\\\n.ace-crimson-editor .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-crimson-editor .ace_keyword.ace_operator {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-crimson-editor .ace_string {\\\ncolor: rgb(128, 0, 128);\\\n}\\\n.ace-crimson-editor .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-crimson-editor .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-crimson-editor .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-crimson-editor .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 64);\\\n}\\\n.ace-crimson-editor .ace_variable {\\\ncolor: rgb(0, 64, 128);\\\n}\\\n.ace-crimson-editor .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_active-line {\\\nbackground: rgb(232, 242, 254);\\\n}\\\n.ace-crimson-editor .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-crimson-editor .ace_meta.ace_tag {\\\ncolor:rgb(28, 2, 255);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-crimson-editor .ace_string.ace_regex {\\\ncolor: rgb(192, 0, 192);\\\n}\\\n.ace-crimson-editor .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\nexports.cssClass = \"ace-crimson-editor\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/crimson_editor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-dawn.js",
    "content": "ace.define(\"ace/theme/dawn\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-dawn\";\nexports.cssText = \".ace-dawn .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333\\\n}\\\n.ace-dawn .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-dawn {\\\nbackground-color: #F9F9F9;\\\ncolor: #080808\\\n}\\\n.ace-dawn .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-dawn .ace_marker-layer .ace_selection {\\\nbackground: rgba(39, 95, 255, 0.30)\\\n}\\\n.ace-dawn.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #F9F9F9;\\\n}\\\n.ace-dawn .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-dawn .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(75, 75, 126, 0.50)\\\n}\\\n.ace-dawn .ace_marker-layer .ace_active-line {\\\nbackground: rgba(36, 99, 180, 0.12)\\\n}\\\n.ace-dawn .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-dawn .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(39, 95, 255, 0.30)\\\n}\\\n.ace-dawn .ace_invisible {\\\ncolor: rgba(75, 75, 126, 0.50)\\\n}\\\n.ace-dawn .ace_keyword,\\\n.ace-dawn .ace_meta {\\\ncolor: #794938\\\n}\\\n.ace-dawn .ace_constant,\\\n.ace-dawn .ace_constant.ace_character,\\\n.ace-dawn .ace_constant.ace_character.ace_escape,\\\n.ace-dawn .ace_constant.ace_other {\\\ncolor: #811F24\\\n}\\\n.ace-dawn .ace_invalid.ace_illegal {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #F8F8F8;\\\nbackground-color: #B52A1D\\\n}\\\n.ace-dawn .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #B52A1D\\\n}\\\n.ace-dawn .ace_support {\\\ncolor: #691C97\\\n}\\\n.ace-dawn .ace_support.ace_constant {\\\ncolor: #B4371F\\\n}\\\n.ace-dawn .ace_fold {\\\nbackground-color: #794938;\\\nborder-color: #080808\\\n}\\\n.ace-dawn .ace_list,\\\n.ace-dawn .ace_markup.ace_list,\\\n.ace-dawn .ace_support.ace_function {\\\ncolor: #693A17\\\n}\\\n.ace-dawn .ace_storage {\\\nfont-style: italic;\\\ncolor: #A71D5D\\\n}\\\n.ace-dawn .ace_string {\\\ncolor: #0B6125\\\n}\\\n.ace-dawn .ace_string.ace_regexp {\\\ncolor: #CF5628\\\n}\\\n.ace-dawn .ace_comment {\\\nfont-style: italic;\\\ncolor: #5A525F\\\n}\\\n.ace-dawn .ace_heading,\\\n.ace-dawn .ace_markup.ace_heading {\\\ncolor: #19356D\\\n}\\\n.ace-dawn .ace_variable {\\\ncolor: #234A97\\\n}\\\n.ace-dawn .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/dawn\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-dracula.js",
    "content": "ace.define(\"ace/theme/dracula\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-dracula\";\nexports.cssText = \"\\\n.ace-dracula .ace_gutter {\\\nbackground: #282a36;\\\ncolor: rgb(144,145,148)\\\n}\\\n.ace-dracula .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #44475a\\\n}\\\n.ace-dracula {\\\nbackground-color: #282a36;\\\ncolor: #f8f8f2\\\n}\\\n.ace-dracula .ace_cursor {\\\ncolor: #f8f8f0\\\n}\\\n.ace-dracula .ace_marker-layer .ace_selection {\\\nbackground: #44475a\\\n}\\\n.ace-dracula.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #282a36;\\\nborder-radius: 2px\\\n}\\\n.ace-dracula .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174)\\\n}\\\n.ace-dracula .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #a29709\\\n}\\\n.ace-dracula .ace_marker-layer .ace_active-line {\\\nbackground: #44475a\\\n}\\\n.ace-dracula .ace_gutter-active-line {\\\nbackground-color: #44475a\\\n}\\\n.ace-dracula .ace_marker-layer .ace_selected-word {\\\nbox-shadow: 0px 0px 0px 1px #a29709;\\\nborder-radius: 3px;\\\n}\\\n.ace-dracula .ace_fold {\\\nbackground-color: #50fa7b;\\\nborder-color: #f8f8f2\\\n}\\\n.ace-dracula .ace_keyword {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_constant.ace_language {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_constant.ace_numeric {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_constant.ace_character {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_constant.ace_character.ace_escape {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_constant.ace_other {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_support.ace_function {\\\ncolor: #8be9fd\\\n}\\\n.ace-dracula .ace_support.ace_constant {\\\ncolor: #6be5fd\\\n}\\\n.ace-dracula .ace_support.ace_class {\\\nfont-style: italic;\\\ncolor: #66d9ef\\\n}\\\n.ace-dracula .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66d9ef\\\n}\\\n.ace-dracula .ace_storage {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_storage.ace_type {\\\nfont-style: italic;\\\ncolor: #8be9fd\\\n}\\\n.ace-dracula .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #ff79c6\\\n}\\\n.ace-dracula .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #bd93f9\\\n}\\\n.ace-dracula .ace_string {\\\ncolor: #f1fa8c\\\n}\\\n.ace-dracula .ace_comment {\\\ncolor: #6272a4\\\n}\\\n.ace-dracula .ace_variable {\\\ncolor: #50fa7b\\\n}\\\n.ace-dracula .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #ffb86c\\\n}\\\n.ace-dracula .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #50fa7b\\\n}\\\n.ace-dracula .ace_entity.ace_name.ace_function {\\\ncolor: #50fa7b\\\n}\\\n.ace-dracula .ace_entity.ace_name.ace_tag {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_invisible {\\\ncolor: #626680;\\\n}\\\n.ace-dracula .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\nexports.$selectionColorConflict = true;\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/dracula\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-dreamweaver.js",
    "content": "ace.define(\"ace/theme/dreamweaver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\nexports.isDark = false;\nexports.cssClass = \"ace-dreamweaver\";\nexports.cssText = \".ace-dreamweaver .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333;\\\n}\\\n.ace-dreamweaver .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-dreamweaver {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-dreamweaver .ace_fold {\\\nbackground-color: #757AD8;\\\n}\\\n.ace-dreamweaver .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-dreamweaver .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-dreamweaver .ace_storage,\\\n.ace-dreamweaver .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-dreamweaver .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-dreamweaver .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-dreamweaver .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-dreamweaver .ace_invalid {\\\nbackground-color: rgb(153, 0, 0);\\\ncolor: white;\\\n}\\\n.ace-dreamweaver .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-dreamweaver .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-dreamweaver .ace_support.ace_type,\\\n.ace-dreamweaver .ace_support.ace_class {\\\ncolor: #009;\\\n}\\\n.ace-dreamweaver .ace_support.ace_php_tag {\\\ncolor: #f00;\\\n}\\\n.ace-dreamweaver .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-dreamweaver .ace_string {\\\ncolor: #00F;\\\n}\\\n.ace-dreamweaver .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-dreamweaver .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-dreamweaver .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-dreamweaver .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-dreamweaver .ace_variable {\\\ncolor: #06F\\\n}\\\n.ace-dreamweaver .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-dreamweaver .ace_entity.ace_name.ace_function {\\\ncolor: #00F;\\\n}\\\n.ace-dreamweaver .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-dreamweaver .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-dreamweaver .ace_gutter-active-line {\\\nbackground-color : #DCDCDC;\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag {\\\ncolor:#009;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\\\ncolor:#060;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_form {\\\ncolor:#F90;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_image {\\\ncolor:#909;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_script {\\\ncolor:#900;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_style {\\\ncolor:#909;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_table {\\\ncolor:#099;\\\n}\\\n.ace-dreamweaver .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-dreamweaver .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/dreamweaver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-eclipse.js",
    "content": "ace.define(\"ace/theme/eclipse\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssText = \".ace-eclipse .ace_gutter {\\\nbackground: #ebebeb;\\\nborder-right: 1px solid rgb(159, 159, 159);\\\ncolor: rgb(136, 136, 136);\\\n}\\\n.ace-eclipse .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #ebebeb;\\\n}\\\n.ace-eclipse {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-eclipse .ace_fold {\\\nbackground-color: rgb(60, 76, 114);\\\n}\\\n.ace-eclipse .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-eclipse .ace_storage,\\\n.ace-eclipse .ace_keyword,\\\n.ace-eclipse .ace_variable {\\\ncolor: rgb(127, 0, 85);\\\n}\\\n.ace-eclipse .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-eclipse .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-eclipse .ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-eclipse .ace_string {\\\ncolor: rgb(42, 0, 255);\\\n}\\\n.ace-eclipse .ace_comment {\\\ncolor: rgb(113, 150, 130);\\\n}\\\n.ace-eclipse .ace_comment.ace_doc {\\\ncolor: rgb(63, 95, 191);\\\n}\\\n.ace-eclipse .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(127, 159, 191);\\\n}\\\n.ace-eclipse .ace_constant.ace_numeric {\\\ncolor: darkblue;\\\n}\\\n.ace-eclipse .ace_tag {\\\ncolor: rgb(25, 118, 116);\\\n}\\\n.ace-eclipse .ace_type {\\\ncolor: rgb(127, 0, 127);\\\n}\\\n.ace-eclipse .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-eclipse .ace_meta.ace_tag {\\\ncolor:rgb(25, 118, 116);\\\n}\\\n.ace-eclipse .ace_invisible {\\\ncolor: #ddd;\\\n}\\\n.ace-eclipse .ace_entity.ace_other.ace_attribute-name {\\\ncolor:rgb(127, 0, 127);\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0);\\\n}\\\n.ace-eclipse .ace_active-line {\\\nbackground: rgb(232, 242, 254);\\\n}\\\n.ace-eclipse .ace_gutter-active-line {\\\nbackground-color : #DADADA;\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgb(181, 213, 255);\\\n}\\\n.ace-eclipse .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\nexports.cssClass = \"ace-eclipse\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/eclipse\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-github.js",
    "content": "ace.define(\"ace/theme/github\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-github\";\nexports.cssText = \"\\\n.ace-github .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #AAA;\\\n}\\\n.ace-github  {\\\nbackground: #fff;\\\ncolor: #000;\\\n}\\\n.ace-github .ace_keyword {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_string {\\\ncolor: #D14;\\\n}\\\n.ace-github .ace_variable.ace_class {\\\ncolor: teal;\\\n}\\\n.ace-github .ace_constant.ace_numeric {\\\ncolor: #099;\\\n}\\\n.ace-github .ace_constant.ace_buildin {\\\ncolor: #0086B3;\\\n}\\\n.ace-github .ace_support.ace_function {\\\ncolor: #0086B3;\\\n}\\\n.ace-github .ace_comment {\\\ncolor: #998;\\\nfont-style: italic;\\\n}\\\n.ace-github .ace_variable.ace_language  {\\\ncolor: #0086B3;\\\n}\\\n.ace-github .ace_paren {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_boolean {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_string.ace_regexp {\\\ncolor: #009926;\\\nfont-weight: normal;\\\n}\\\n.ace-github .ace_variable.ace_instance {\\\ncolor: teal;\\\n}\\\n.ace-github .ace_constant.ace_language {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-github.ace_focus .ace_marker-layer .ace_active-line {\\\nbackground: rgb(255, 255, 204);\\\n}\\\n.ace-github .ace_marker-layer .ace_active-line {\\\nbackground: rgb(245, 245, 245);\\\n}\\\n.ace-github .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-github.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-github.ace_nobold .ace_line > span {\\\nfont-weight: normal !important;\\\n}\\\n.ace-github .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-github .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-github .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-github .ace_gutter-active-line {\\\nbackground-color : rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-github .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-github .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-github .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-github .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\n    var dom = require(\"../lib/dom\");\n    dom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/github\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-gob.js",
    "content": "ace.define(\"ace/theme/gob\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-gob\";\nexports.cssText = \".ace-gob .ace_gutter {\\\nbackground: #0B1818;\\\ncolor: #03EE03\\\n}\\\n.ace-gob .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #131313\\\n}\\\n.ace-gob {\\\nbackground-color: #0B0B0B;\\\ncolor: #00FF00\\\n}\\\n.ace-gob .ace_cursor {\\\nborder-color: rgba(16, 248, 255, 0.90);\\\nbackground-color: rgba(16, 240, 248, 0.70);\\\nopacity: 0.4;\\\n}\\\n.ace-gob .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-gob.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #141414;\\\n}\\\n.ace-gob .ace_marker-layer .ace_step {\\\nbackground: rgb(16, 128, 0)\\\n}\\\n.ace-gob .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(64, 255, 255, 0.25)\\\n}\\\n.ace-gob .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.04)\\\n}\\\n.ace-gob .ace_gutter-active-line {\\\nbackground-color: rgba(255, 255, 255, 0.04)\\\n}\\\n.ace-gob .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(192, 240, 255, 0.20)\\\n}\\\n.ace-gob .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-gob .ace_keyword,\\\n.ace-gob .ace_meta {\\\ncolor: #10D8E8\\\n}\\\n.ace-gob .ace_constant,\\\n.ace-gob .ace_constant.ace_character,\\\n.ace-gob .ace_constant.ace_character.ace_escape,\\\n.ace-gob .ace_constant.ace_other,\\\n.ace-gob .ace_heading,\\\n.ace-gob .ace_markup.ace_heading,\\\n.ace-gob .ace_support.ace_constant {\\\ncolor: #10F0A0\\\n}\\\n.ace-gob .ace_invalid.ace_illegal {\\\ncolor: #F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75)\\\n}\\\n.ace-gob .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #20F8C0\\\n}\\\n.ace-gob .ace_support {\\\ncolor: #20E8B0\\\n}\\\n.ace-gob .ace_fold {\\\nbackground-color: #50B8B8;\\\nborder-color: #70F8F8\\\n}\\\n.ace-gob .ace_support.ace_function {\\\ncolor: #00F800\\\n}\\\n.ace-gob .ace_list,\\\n.ace-gob .ace_markup.ace_list,\\\n.ace-gob .ace_storage {\\\ncolor: #10FF98\\\n}\\\n.ace-gob .ace_entity.ace_name.ace_function,\\\n.ace-gob .ace_meta.ace_tag,\\\n.ace-gob .ace_variable {\\\ncolor: #00F868\\\n}\\\n.ace-gob .ace_string {\\\ncolor: #10F060\\\n}\\\n.ace-gob .ace_string.ace_regexp {\\\ncolor: #20F090;\\\n}\\\n.ace-gob .ace_comment {\\\nfont-style: italic;\\\ncolor: #00E060;\\\n}\\\n.ace-gob .ace_variable {\\\ncolor: #00F888;\\\n}\\\n.ace-gob .ace_xml-pe {\\\ncolor: #488858;\\\n}\\\n.ace-gob .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/gob\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-gruvbox.js",
    "content": "ace.define(\"ace/theme/gruvbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-gruvbox\";\nexports.cssText = \".ace-gruvbox .ace_gutter-active-line {\\\nbackground-color: #3C3836;\\\n}\\\n.ace-gruvbox {\\\ncolor: #EBDAB4;\\\nbackground-color: #1D2021;\\\n}\\\n.ace-gruvbox .ace_invisible {\\\ncolor: #504945;\\\n}\\\n.ace-gruvbox .ace_marker-layer .ace_selection {\\\nbackground: rgba(179, 101, 57, 0.75)\\\n}\\\n.ace-gruvbox.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002240;\\\n}\\\n.ace-gruvbox .ace_keyword {\\\ncolor: #8ec07c;\\\n}\\\n.ace-gruvbox .ace_comment {\\\nfont-style: italic;\\\ncolor: #928375;\\\n}\\\n.ace-gruvbox .ace-statement {\\\ncolor: red;\\\n}\\\n.ace-gruvbox .ace_variable {\\\ncolor: #84A598;\\\n}\\\n.ace-gruvbox .ace_variable.ace_language {\\\ncolor: #D2879B;\\\n}\\\n.ace-gruvbox .ace_constant {\\\ncolor: #C2859A;\\\n}\\\n.ace-gruvbox .ace_constant.ace_language {\\\ncolor: #C2859A;\\\n}\\\n.ace-gruvbox .ace_constant.ace_numeric {\\\ncolor: #C2859A;\\\n}\\\n.ace-gruvbox .ace_string {\\\ncolor: #B8BA37;\\\n}\\\n.ace-gruvbox .ace_support {\\\ncolor: #F9BC41;\\\n}\\\n.ace-gruvbox .ace_support.ace_function {\\\ncolor: #F84B3C;\\\n}\\\n.ace-gruvbox .ace_storage {\\\ncolor: #8FBF7F;\\\n}\\\n.ace-gruvbox .ace_keyword.ace_operator {\\\ncolor: #EBDAB4;\\\n}\\\n.ace-gruvbox .ace_punctuation.ace_operator {\\\ncolor: yellow;\\\n}\\\n.ace-gruvbox .ace_marker-layer .ace_active-line {\\\nbackground: #3C3836;\\\n}\\\n.ace-gruvbox .ace_marker-layer .ace_selected-word {\\\nborder-radius: 4px;\\\nborder: 8px solid #3f475d;\\\n}\\\n.ace-gruvbox .ace_print-margin {\\\nwidth: 5px;\\\nbackground: #3C3836;\\\n}\\\n.ace-gruvbox .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    ace.require([\"ace/theme/gruvbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-idle_fingers.js",
    "content": "ace.define(\"ace/theme/idle_fingers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-idle-fingers\";\nexports.cssText = \".ace-idle-fingers .ace_gutter {\\\nbackground: #3b3b3b;\\\ncolor: rgb(153,153,153)\\\n}\\\n.ace-idle-fingers .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #3b3b3b\\\n}\\\n.ace-idle-fingers {\\\nbackground-color: #323232;\\\ncolor: #FFFFFF\\\n}\\\n.ace-idle-fingers .ace_cursor {\\\ncolor: #91FF00\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_selection {\\\nbackground: rgba(90, 100, 126, 0.88)\\\n}\\\n.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #323232;\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_active-line {\\\nbackground: #353637\\\n}\\\n.ace-idle-fingers .ace_gutter-active-line {\\\nbackground-color: #353637\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(90, 100, 126, 0.88)\\\n}\\\n.ace-idle-fingers .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-idle-fingers .ace_keyword,\\\n.ace-idle-fingers .ace_meta {\\\ncolor: #CC7833\\\n}\\\n.ace-idle-fingers .ace_constant,\\\n.ace-idle-fingers .ace_constant.ace_character,\\\n.ace-idle-fingers .ace_constant.ace_character.ace_escape,\\\n.ace-idle-fingers .ace_constant.ace_other,\\\n.ace-idle-fingers .ace_support.ace_constant {\\\ncolor: #6C99BB\\\n}\\\n.ace-idle-fingers .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #FF0000\\\n}\\\n.ace-idle-fingers .ace_fold {\\\nbackground-color: #CC7833;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-idle-fingers .ace_support.ace_function {\\\ncolor: #B83426\\\n}\\\n.ace-idle-fingers .ace_variable.ace_parameter {\\\nfont-style: italic\\\n}\\\n.ace-idle-fingers .ace_string {\\\ncolor: #A5C261\\\n}\\\n.ace-idle-fingers .ace_string.ace_regexp {\\\ncolor: #CCCC33\\\n}\\\n.ace-idle-fingers .ace_comment {\\\nfont-style: italic;\\\ncolor: #BC9458\\\n}\\\n.ace-idle-fingers .ace_meta.ace_tag {\\\ncolor: #FFE5BB\\\n}\\\n.ace-idle-fingers .ace_entity.ace_name {\\\ncolor: #FFC66D\\\n}\\\n.ace-idle-fingers .ace_collab.ace_user1 {\\\ncolor: #323232;\\\nbackground-color: #FFF980\\\n}\\\n.ace-idle-fingers .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/idle_fingers\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-iplastic.js",
    "content": "ace.define(\"ace/theme/iplastic\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-iplastic\";\nexports.cssText = \".ace-iplastic .ace_gutter {\\\nbackground: #dddddd;\\\ncolor: #666666\\\n}\\\n.ace-iplastic .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #bbbbbb\\\n}\\\n.ace-iplastic {\\\nbackground-color: #eeeeee;\\\ncolor: #333333\\\n}\\\n.ace-iplastic .ace_cursor {\\\ncolor: #333\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_selection {\\\nbackground: #BAD6FD;\\\n}\\\n.ace-iplastic.ace_multiselect .ace_selection.ace_start {\\\nborder-radius: 4px\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_step {\\\nbackground: #444444\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E;\\\nbackground: #FFF799\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_active-line {\\\nbackground: #e5e5e5\\\n}\\\n.ace-iplastic .ace_gutter-active-line {\\\nbackground-color: #eeeeee\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #555555;\\\nborder-radius:4px\\\n}\\\n.ace-iplastic .ace_invisible {\\\ncolor: #999999\\\n}\\\n.ace-iplastic .ace_entity.ace_name.ace_tag,\\\n.ace-iplastic .ace_keyword,\\\n.ace-iplastic .ace_meta.ace_tag,\\\n.ace-iplastic .ace_storage {\\\ncolor: #0000FF\\\n}\\\n.ace-iplastic .ace_punctuation,\\\n.ace-iplastic .ace_punctuation.ace_tag {\\\ncolor: #000\\\n}\\\n.ace-iplastic .ace_constant {\\\ncolor: #333333;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_constant.ace_character,\\\n.ace-iplastic .ace_constant.ace_language,\\\n.ace-iplastic .ace_constant.ace_numeric,\\\n.ace-iplastic .ace_constant.ace_other {\\\ncolor: #0066FF;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_constant.ace_numeric{\\\nfont-weight: 100\\\n}\\\n.ace-iplastic .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-iplastic .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-iplastic .ace_support.ace_constant,\\\n.ace-iplastic .ace_support.ace_function {\\\ncolor: #333333;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_fold {\\\nbackground-color: #464646;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-iplastic .ace_storage.ace_type,\\\n.ace-iplastic .ace_support.ace_class,\\\n.ace-iplastic .ace_support.ace_type {\\\ncolor: #3333fc;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_entity.ace_name.ace_function,\\\n.ace-iplastic .ace_entity.ace_other,\\\n.ace-iplastic .ace_entity.ace_other.ace_attribute-name,\\\n.ace-iplastic .ace_variable {\\\ncolor: #3366cc;\\\nfont-style: italic\\\n}\\\n.ace-iplastic .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #2469E0\\\n}\\\n.ace-iplastic .ace_string {\\\ncolor: #a55f03\\\n}\\\n.ace-iplastic .ace_comment {\\\ncolor: #777777;\\\nfont-style: italic\\\n}\\\n.ace-iplastic .ace_fold-widget {\\\nbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);\\\n}\\\n.ace-iplastic .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAABlJREFUeNpi+P//PwMzMzPzfwAAAAD//wMAGRsECSML/RIAAAAASUVORK5CYII=) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/iplastic\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-katzenmilch.js",
    "content": "ace.define(\"ace/theme/katzenmilch\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-katzenmilch\";\nexports.cssText = \".ace-katzenmilch .ace_gutter,\\\n.ace-katzenmilch .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333\\\n}\\\n.ace-katzenmilch .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-katzenmilch {\\\nbackground-color: #f3f2f3;\\\ncolor: rgba(15, 0, 9, 1.0)\\\n}\\\n.ace-katzenmilch .ace_cursor {\\\nborder-left: 2px solid #100011\\\n}\\\n.ace-katzenmilch .ace_overwrite-cursors .ace_cursor {\\\nborder-left: 0px;\\\nborder-bottom: 1px solid #100011\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_selection {\\\nbackground: rgba(100, 5, 208, 0.27)\\\n}\\\n.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #f3f2f3;\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174)\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(0, 0, 0, 0.33);\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_active-line {\\\nbackground: rgb(232, 242, 254)\\\n}\\\n.ace-katzenmilch .ace_gutter-active-line {\\\nbackground-color: rgb(232, 242, 254)\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(100, 5, 208, 0.27)\\\n}\\\n.ace-katzenmilch .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-katzenmilch .ace_fold {\\\nbackground-color: rgba(2, 95, 73, 0.97);\\\nborder-color: rgba(15, 0, 9, 1.0)\\\n}\\\n.ace-katzenmilch .ace_keyword {\\\ncolor: #674Aa8;\\\nrbackground-color: rgba(163, 170, 216, 0.055)\\\n}\\\n.ace-katzenmilch .ace_constant.ace_language {\\\ncolor: #7D7e52;\\\nrbackground-color: rgba(189, 190, 130, 0.059)\\\n}\\\n.ace-katzenmilch .ace_constant.ace_numeric {\\\ncolor: rgba(79, 130, 123, 0.93);\\\nrbackground-color: rgba(119, 194, 187, 0.059)\\\n}\\\n.ace-katzenmilch .ace_constant.ace_character,\\\n.ace-katzenmilch .ace_constant.ace_other {\\\ncolor: rgba(2, 95, 105, 1.0);\\\nrbackground-color: rgba(127, 34, 153, 0.063)\\\n}\\\n.ace-katzenmilch .ace_support.ace_function {\\\ncolor: #9D7e62;\\\nrbackground-color: rgba(189, 190, 130, 0.039)\\\n}\\\n.ace-katzenmilch .ace_support.ace_class {\\\ncolor: rgba(239, 106, 167, 1.0);\\\nrbackground-color: rgba(239, 106, 167, 0.063)\\\n}\\\n.ace-katzenmilch .ace_storage {\\\ncolor: rgba(123, 92, 191, 1.0);\\\nrbackground-color: rgba(139, 93, 223, 0.051)\\\n}\\\n.ace-katzenmilch .ace_invalid {\\\ncolor: #DFDFD5;\\\nrbackground-color: #CC1B27\\\n}\\\n.ace-katzenmilch .ace_string {\\\ncolor: #5a5f9b;\\\nrbackground-color: rgba(170, 175, 219, 0.035)\\\n}\\\n.ace-katzenmilch .ace_comment {\\\nfont-style: italic;\\\ncolor: rgba(64, 79, 80, 0.67);\\\nrbackground-color: rgba(95, 15, 255, 0.0078)\\\n}\\\n.ace-katzenmilch .ace_entity.ace_name.ace_function,\\\n.ace-katzenmilch .ace_variable {\\\ncolor: rgba(2, 95, 73, 0.97);\\\nrbackground-color: rgba(34, 255, 73, 0.12)\\\n}\\\n.ace-katzenmilch .ace_variable.ace_language {\\\ncolor: #316fcf;\\\nrbackground-color: rgba(58, 175, 255, 0.039)\\\n}\\\n.ace-katzenmilch .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: rgba(51, 150, 159, 0.87);\\\nrbackground-color: rgba(5, 214, 249, 0.043)\\\n}\\\n.ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {\\\ncolor: rgba(73, 70, 194, 0.93);\\\nrbackground-color: rgba(73, 134, 194, 0.035)\\\n}\\\n.ace-katzenmilch .ace_entity.ace_name.ace_tag {\\\ncolor: #3976a2;\\\nrbackground-color: rgba(73, 166, 210, 0.039)\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/katzenmilch\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-kr_theme.js",
    "content": "ace.define(\"ace/theme/kr_theme\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-kr-theme\";\nexports.cssText = \".ace-kr-theme .ace_gutter {\\\nbackground: #1c1917;\\\ncolor: #FCFFE0\\\n}\\\n.ace-kr-theme .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1c1917\\\n}\\\n.ace-kr-theme {\\\nbackground-color: #0B0A09;\\\ncolor: #FCFFE0\\\n}\\\n.ace-kr-theme .ace_cursor {\\\ncolor: #FF9900\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_selection {\\\nbackground: rgba(170, 0, 255, 0.45)\\\n}\\\n.ace-kr-theme.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #0B0A09;\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 177, 111, 0.32)\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_active-line {\\\nbackground: #38403D\\\n}\\\n.ace-kr-theme .ace_gutter-active-line {\\\nbackground-color : #38403D\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(170, 0, 255, 0.45)\\\n}\\\n.ace-kr-theme .ace_invisible {\\\ncolor: rgba(255, 177, 111, 0.32)\\\n}\\\n.ace-kr-theme .ace_keyword,\\\n.ace-kr-theme .ace_meta {\\\ncolor: #949C8B\\\n}\\\n.ace-kr-theme .ace_constant,\\\n.ace-kr-theme .ace_constant.ace_character,\\\n.ace-kr-theme .ace_constant.ace_character.ace_escape,\\\n.ace-kr-theme .ace_constant.ace_other {\\\ncolor: rgba(210, 117, 24, 0.76)\\\n}\\\n.ace-kr-theme .ace_invalid {\\\ncolor: #F8F8F8;\\\nbackground-color: #A41300\\\n}\\\n.ace-kr-theme .ace_support {\\\ncolor: #9FC28A\\\n}\\\n.ace-kr-theme .ace_support.ace_constant {\\\ncolor: #C27E66\\\n}\\\n.ace-kr-theme .ace_fold {\\\nbackground-color: #949C8B;\\\nborder-color: #FCFFE0\\\n}\\\n.ace-kr-theme .ace_support.ace_function {\\\ncolor: #85873A\\\n}\\\n.ace-kr-theme .ace_storage {\\\ncolor: #FFEE80\\\n}\\\n.ace-kr-theme .ace_string {\\\ncolor: rgba(164, 161, 181, 0.8)\\\n}\\\n.ace-kr-theme .ace_string.ace_regexp {\\\ncolor: rgba(125, 255, 192, 0.65)\\\n}\\\n.ace-kr-theme .ace_comment {\\\nfont-style: italic;\\\ncolor: #706D5B\\\n}\\\n.ace-kr-theme .ace_variable {\\\ncolor: #D1A796\\\n}\\\n.ace-kr-theme .ace_list,\\\n.ace-kr-theme .ace_markup.ace_list {\\\nbackground-color: #0F0040\\\n}\\\n.ace-kr-theme .ace_variable.ace_language {\\\ncolor: #FF80E1\\\n}\\\n.ace-kr-theme .ace_meta.ace_tag {\\\ncolor: #BABD9C\\\n}\\\n.ace-kr-theme .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/kr_theme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-kuroir.js",
    "content": "ace.define(\"ace/theme/kuroir\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-kuroir\";\nexports.cssText = \"\\\n.ace-kuroir .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333;\\\n}\\\n.ace-kuroir .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-kuroir {\\\nbackground-color: #E8E9E8;\\\ncolor: #363636;\\\n}\\\n.ace-kuroir .ace_cursor {\\\ncolor: #202020;\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_selection {\\\nbackground: rgba(245, 170, 0, 0.57);\\\n}\\\n.ace-kuroir.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #E8E9E8;\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(0, 0, 0, 0.29);\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_active-line {\\\nbackground: rgba(203, 220, 47, 0.22);\\\n}\\\n.ace-kuroir .ace_gutter-active-line {\\\nbackground-color: rgba(203, 220, 47, 0.22);\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(245, 170, 0, 0.57);\\\n}\\\n.ace-kuroir .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-kuroir .ace_fold {\\\nborder-color: #363636;\\\n}\\\n.ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;\\\nbackground-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;\\\nfont-style:italic;\\\ncolor:#FD1732;\\\nbackground-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;\\\nbackground-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);\\\nbackground-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;\\\nbackground-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/kuroir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-merbivore.js",
    "content": "ace.define(\"ace/theme/merbivore\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-merbivore\";\nexports.cssText = \".ace-merbivore .ace_gutter {\\\nbackground: #202020;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-merbivore {\\\nbackground-color: #161616;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_selection {\\\nbackground: #454545\\\n}\\\n.ace-merbivore.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #161616;\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_active-line {\\\nbackground: #333435\\\n}\\\n.ace-merbivore .ace_gutter-active-line {\\\nbackground-color: #333435\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #454545\\\n}\\\n.ace-merbivore .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-merbivore .ace_entity.ace_name.ace_tag,\\\n.ace-merbivore .ace_keyword,\\\n.ace-merbivore .ace_meta,\\\n.ace-merbivore .ace_meta.ace_tag,\\\n.ace-merbivore .ace_storage,\\\n.ace-merbivore .ace_support.ace_function {\\\ncolor: #FC6F09\\\n}\\\n.ace-merbivore .ace_constant,\\\n.ace-merbivore .ace_constant.ace_character,\\\n.ace-merbivore .ace_constant.ace_character.ace_escape,\\\n.ace-merbivore .ace_constant.ace_other,\\\n.ace-merbivore .ace_support.ace_type {\\\ncolor: #1EDAFB\\\n}\\\n.ace-merbivore .ace_constant.ace_character.ace_escape {\\\ncolor: #519F50\\\n}\\\n.ace-merbivore .ace_constant.ace_language {\\\ncolor: #FDC251\\\n}\\\n.ace-merbivore .ace_constant.ace_library,\\\n.ace-merbivore .ace_string,\\\n.ace-merbivore .ace_support.ace_constant {\\\ncolor: #8DFF0A\\\n}\\\n.ace-merbivore .ace_constant.ace_numeric {\\\ncolor: #58C554\\\n}\\\n.ace-merbivore .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #990000\\\n}\\\n.ace-merbivore .ace_fold {\\\nbackground-color: #FC6F09;\\\nborder-color: #E6E1DC\\\n}\\\n.ace-merbivore .ace_comment {\\\nfont-style: italic;\\\ncolor: #AD2EA4\\\n}\\\n.ace-merbivore .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #FFFF89\\\n}\\\n.ace-merbivore .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/merbivore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-merbivore_soft.js",
    "content": "ace.define(\"ace/theme/merbivore_soft\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-merbivore-soft\";\nexports.cssText = \".ace-merbivore-soft .ace_gutter {\\\nbackground: #262424;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore-soft .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #262424\\\n}\\\n.ace-merbivore-soft {\\\nbackground-color: #1C1C1C;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore-soft .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_selection {\\\nbackground: #494949\\\n}\\\n.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #1C1C1C;\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_active-line {\\\nbackground: #333435\\\n}\\\n.ace-merbivore-soft .ace_gutter-active-line {\\\nbackground-color: #333435\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #494949\\\n}\\\n.ace-merbivore-soft .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-merbivore-soft .ace_entity.ace_name.ace_tag,\\\n.ace-merbivore-soft .ace_keyword,\\\n.ace-merbivore-soft .ace_meta,\\\n.ace-merbivore-soft .ace_meta.ace_tag,\\\n.ace-merbivore-soft .ace_storage {\\\ncolor: #FC803A\\\n}\\\n.ace-merbivore-soft .ace_constant,\\\n.ace-merbivore-soft .ace_constant.ace_character,\\\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape,\\\n.ace-merbivore-soft .ace_constant.ace_other,\\\n.ace-merbivore-soft .ace_support.ace_type {\\\ncolor: #68C1D8\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape {\\\ncolor: #B3E5B4\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_language {\\\ncolor: #E1C582\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_library,\\\n.ace-merbivore-soft .ace_string,\\\n.ace-merbivore-soft .ace_support.ace_constant {\\\ncolor: #8EC65F\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_numeric {\\\ncolor: #7FC578\\\n}\\\n.ace-merbivore-soft .ace_invalid,\\\n.ace-merbivore-soft .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #FE3838\\\n}\\\n.ace-merbivore-soft .ace_fold {\\\nbackground-color: #FC803A;\\\nborder-color: #E6E1DC\\\n}\\\n.ace-merbivore-soft .ace_comment,\\\n.ace-merbivore-soft .ace_meta {\\\nfont-style: italic;\\\ncolor: #AC4BB8\\\n}\\\n.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #EAF1A3\\\n}\\\n.ace-merbivore-soft .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/merbivore_soft\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-mono_industrial.js",
    "content": "ace.define(\"ace/theme/mono_industrial\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-mono-industrial\";\nexports.cssText = \".ace-mono-industrial .ace_gutter {\\\nbackground: #1d2521;\\\ncolor: #C5C9C9\\\n}\\\n.ace-mono-industrial .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-mono-industrial {\\\nbackground-color: #222C28;\\\ncolor: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_selection {\\\nbackground: rgba(145, 153, 148, 0.40)\\\n}\\\n.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #222C28;\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(102, 108, 104, 0.50)\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_active-line {\\\nbackground: rgba(12, 13, 12, 0.25)\\\n}\\\n.ace-mono-industrial .ace_gutter-active-line {\\\nbackground-color: rgba(12, 13, 12, 0.25)\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(145, 153, 148, 0.40)\\\n}\\\n.ace-mono-industrial .ace_invisible {\\\ncolor: rgba(102, 108, 104, 0.50)\\\n}\\\n.ace-mono-industrial .ace_string {\\\nbackground-color: #151C19;\\\ncolor: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_keyword,\\\n.ace-mono-industrial .ace_meta {\\\ncolor: #A39E64\\\n}\\\n.ace-mono-industrial .ace_constant,\\\n.ace-mono-industrial .ace_constant.ace_character,\\\n.ace-mono-industrial .ace_constant.ace_character.ace_escape,\\\n.ace-mono-industrial .ace_constant.ace_numeric,\\\n.ace-mono-industrial .ace_constant.ace_other {\\\ncolor: #E98800\\\n}\\\n.ace-mono-industrial .ace_entity.ace_name.ace_function,\\\n.ace-mono-industrial .ace_keyword.ace_operator,\\\n.ace-mono-industrial .ace_variable {\\\ncolor: #A8B3AB\\\n}\\\n.ace-mono-industrial .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: rgba(153, 0, 0, 0.68)\\\n}\\\n.ace-mono-industrial .ace_support.ace_constant {\\\ncolor: #C87500\\\n}\\\n.ace-mono-industrial .ace_fold {\\\nbackground-color: #A8B3AB;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_support.ace_function {\\\ncolor: #588E60\\\n}\\\n.ace-mono-industrial .ace_entity.ace_name,\\\n.ace-mono-industrial .ace_support.ace_class,\\\n.ace-mono-industrial .ace_support.ace_type {\\\ncolor: #5778B6\\\n}\\\n.ace-mono-industrial .ace_storage {\\\ncolor: #C23B00\\\n}\\\n.ace-mono-industrial .ace_variable.ace_language,\\\n.ace-mono-industrial .ace_variable.ace_parameter {\\\ncolor: #648BD2\\\n}\\\n.ace-mono-industrial .ace_comment {\\\ncolor: #666C68;\\\nbackground-color: #151C19\\\n}\\\n.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #909993\\\n}\\\n.ace-mono-industrial .ace_entity.ace_name.ace_tag {\\\ncolor: #A65EFF\\\n}\\\n.ace-mono-industrial .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/mono_industrial\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-monokai.js",
    "content": "ace.define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-monokai\";\nexports.cssText = \".ace-monokai .ace_gutter {\\\nbackground: #2F3129;\\\ncolor: #8F908A\\\n}\\\n.ace-monokai .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-monokai {\\\nbackground-color: #272822;\\\ncolor: #F8F8F2\\\n}\\\n.ace-monokai .ace_cursor {\\\ncolor: #F8F8F0\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selection {\\\nbackground: #49483E\\\n}\\\n.ace-monokai.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #272822;\\\n}\\\n.ace-monokai .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-monokai .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_marker-layer .ace_active-line {\\\nbackground: #202020\\\n}\\\n.ace-monokai .ace_gutter-active-line {\\\nbackground-color: #272727\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_invisible {\\\ncolor: #52524d\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_tag,\\\n.ace-monokai .ace_keyword,\\\n.ace-monokai .ace_meta.ace_tag,\\\n.ace-monokai .ace_storage {\\\ncolor: #F92672\\\n}\\\n.ace-monokai .ace_punctuation,\\\n.ace-monokai .ace_punctuation.ace_tag {\\\ncolor: #fff\\\n}\\\n.ace-monokai .ace_constant.ace_character,\\\n.ace-monokai .ace_constant.ace_language,\\\n.ace-monokai .ace_constant.ace_numeric,\\\n.ace-monokai .ace_constant.ace_other {\\\ncolor: #AE81FF\\\n}\\\n.ace-monokai .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-monokai .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-monokai .ace_support.ace_constant,\\\n.ace-monokai .ace_support.ace_function {\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_fold {\\\nbackground-color: #A6E22E;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-monokai .ace_storage.ace_type,\\\n.ace-monokai .ace_support.ace_class,\\\n.ace-monokai .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_function,\\\n.ace-monokai .ace_entity.ace_other,\\\n.ace-monokai .ace_entity.ace_other.ace_attribute-name,\\\n.ace-monokai .ace_variable {\\\ncolor: #A6E22E\\\n}\\\n.ace-monokai .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F\\\n}\\\n.ace-monokai .ace_string {\\\ncolor: #E6DB74\\\n}\\\n.ace-monokai .ace_comment {\\\ncolor: #75715E\\\n}\\\n.ace-monokai .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/monokai\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-pastel_on_dark.js",
    "content": "ace.define(\"ace/theme/pastel_on_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-pastel-on-dark\";\nexports.cssText = \".ace-pastel-on-dark .ace_gutter {\\\nbackground: #353030;\\\ncolor: #8F938F\\\n}\\\n.ace-pastel-on-dark .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #353030\\\n}\\\n.ace-pastel-on-dark {\\\nbackground-color: #2C2828;\\\ncolor: #8F938F\\\n}\\\n.ace-pastel-on-dark .ace_cursor {\\\ncolor: #A7A7A7\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #2C2828;\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-pastel-on-dark .ace_gutter-active-line {\\\nbackground-color: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-pastel-on-dark .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-pastel-on-dark .ace_keyword,\\\n.ace-pastel-on-dark .ace_meta {\\\ncolor: #757aD8\\\n}\\\n.ace-pastel-on-dark .ace_constant,\\\n.ace-pastel-on-dark .ace_constant.ace_character,\\\n.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,\\\n.ace-pastel-on-dark .ace_constant.ace_other {\\\ncolor: #4FB7C5\\\n}\\\n.ace-pastel-on-dark .ace_keyword.ace_operator {\\\ncolor: #797878\\\n}\\\n.ace-pastel-on-dark .ace_constant.ace_character {\\\ncolor: #AFA472\\\n}\\\n.ace-pastel-on-dark .ace_constant.ace_language {\\\ncolor: #DE8E30\\\n}\\\n.ace-pastel-on-dark .ace_constant.ace_numeric {\\\ncolor: #CCCCCC\\\n}\\\n.ace-pastel-on-dark .ace_invalid,\\\n.ace-pastel-on-dark .ace_invalid.ace_illegal {\\\ncolor: #F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75)\\\n}\\\n.ace-pastel-on-dark .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1\\\n}\\\n.ace-pastel-on-dark .ace_fold {\\\nbackground-color: #757aD8;\\\nborder-color: #8F938F\\\n}\\\n.ace-pastel-on-dark .ace_support.ace_function {\\\ncolor: #AEB2F8\\\n}\\\n.ace-pastel-on-dark .ace_string {\\\ncolor: #66A968\\\n}\\\n.ace-pastel-on-dark .ace_string.ace_regexp {\\\ncolor: #E9C062\\\n}\\\n.ace-pastel-on-dark .ace_comment {\\\ncolor: #A6C6FF\\\n}\\\n.ace-pastel-on-dark .ace_variable {\\\ncolor: #BEBF55\\\n}\\\n.ace-pastel-on-dark .ace_variable.ace_language {\\\ncolor: #C1C144\\\n}\\\n.ace-pastel-on-dark .ace_xml-pe {\\\ncolor: #494949\\\n}\\\n.ace-pastel-on-dark .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/pastel_on_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-solarized_dark.js",
    "content": "ace.define(\"ace/theme/solarized_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-solarized-dark\";\nexports.cssText = \".ace-solarized-dark .ace_gutter {\\\nbackground: #01313f;\\\ncolor: #d0edf7\\\n}\\\n.ace-solarized-dark .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #33555E\\\n}\\\n.ace-solarized-dark {\\\nbackground-color: #002B36;\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,\\\n.ace-solarized-dark .ace_storage {\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-dark .ace_cursor,\\\n.ace-solarized-dark .ace_string.ace_regexp {\\\ncolor: #D30102\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_active-line,\\\n.ace-solarized-dark .ace_marker-layer .ace_selection {\\\nbackground: rgba(255, 255, 255, 0.1)\\\n}\\\n.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002B36;\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-dark .ace_gutter-active-line {\\\nbackground-color: #0d3440\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #073642\\\n}\\\n.ace-solarized-dark .ace_invisible {\\\ncolor: rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-dark .ace_keyword,\\\n.ace-solarized-dark .ace_meta,\\\n.ace-solarized-dark .ace_support.ace_class,\\\n.ace-solarized-dark .ace_support.ace_type {\\\ncolor: #859900\\\n}\\\n.ace-solarized-dark .ace_constant.ace_character,\\\n.ace-solarized-dark .ace_constant.ace_other {\\\ncolor: #CB4B16\\\n}\\\n.ace-solarized-dark .ace_constant.ace_language {\\\ncolor: #B58900\\\n}\\\n.ace-solarized-dark .ace_constant.ace_numeric {\\\ncolor: #D33682\\\n}\\\n.ace-solarized-dark .ace_fold {\\\nbackground-color: #268BD2;\\\nborder-color: #93A1A1\\\n}\\\n.ace-solarized-dark .ace_entity.ace_name.ace_function,\\\n.ace-solarized-dark .ace_entity.ace_name.ace_tag,\\\n.ace-solarized-dark .ace_support.ace_function,\\\n.ace-solarized-dark .ace_variable,\\\n.ace-solarized-dark .ace_variable.ace_language {\\\ncolor: #268BD2\\\n}\\\n.ace-solarized-dark .ace_string {\\\ncolor: #2AA198\\\n}\\\n.ace-solarized-dark .ace_comment {\\\nfont-style: italic;\\\ncolor: #657B83\\\n}\\\n.ace-solarized-dark .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/solarized_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-solarized_light.js",
    "content": "ace.define(\"ace/theme/solarized_light\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-solarized-light\";\nexports.cssText = \".ace-solarized-light .ace_gutter {\\\nbackground: #fbf1d3;\\\ncolor: #333\\\n}\\\n.ace-solarized-light .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-solarized-light {\\\nbackground-color: #FDF6E3;\\\ncolor: #586E75\\\n}\\\n.ace-solarized-light .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_selection {\\\nbackground: rgba(7, 54, 67, 0.09)\\\n}\\\n.ace-solarized-light.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FDF6E3;\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_active-line {\\\nbackground: #EEE8D5\\\n}\\\n.ace-solarized-light .ace_gutter-active-line {\\\nbackground-color : #EDE5C1\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #7f9390\\\n}\\\n.ace-solarized-light .ace_invisible {\\\ncolor: rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-light .ace_keyword,\\\n.ace-solarized-light .ace_meta,\\\n.ace-solarized-light .ace_support.ace_class,\\\n.ace-solarized-light .ace_support.ace_type {\\\ncolor: #859900\\\n}\\\n.ace-solarized-light .ace_constant.ace_character,\\\n.ace-solarized-light .ace_constant.ace_other {\\\ncolor: #CB4B16\\\n}\\\n.ace-solarized-light .ace_constant.ace_language {\\\ncolor: #B58900\\\n}\\\n.ace-solarized-light .ace_constant.ace_numeric {\\\ncolor: #D33682\\\n}\\\n.ace-solarized-light .ace_fold {\\\nbackground-color: #268BD2;\\\nborder-color: #586E75\\\n}\\\n.ace-solarized-light .ace_entity.ace_name.ace_function,\\\n.ace-solarized-light .ace_entity.ace_name.ace_tag,\\\n.ace-solarized-light .ace_support.ace_function,\\\n.ace-solarized-light .ace_variable,\\\n.ace-solarized-light .ace_variable.ace_language {\\\ncolor: #268BD2\\\n}\\\n.ace-solarized-light .ace_storage {\\\ncolor: #073642\\\n}\\\n.ace-solarized-light .ace_string {\\\ncolor: #2AA198\\\n}\\\n.ace-solarized-light .ace_string.ace_regexp {\\\ncolor: #D30102\\\n}\\\n.ace-solarized-light .ace_comment,\\\n.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-light .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/solarized_light\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-sqlserver.js",
    "content": "ace.define(\"ace/theme/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-sqlserver\";\nexports.cssText = \".ace-sqlserver .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333;\\\noverflow: hidden;\\\n}\\\n.ace-sqlserver .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-sqlserver {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_identifier {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_keyword {\\\ncolor: #0000FF;\\\n}\\\n.ace-sqlserver .ace_numeric {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_storage {\\\ncolor: #11B7BE;\\\n}\\\n.ace-sqlserver .ace_keyword.ace_operator,\\\n.ace-sqlserver .ace_lparen,\\\n.ace-sqlserver .ace_rparen,\\\n.ace-sqlserver .ace_punctuation {\\\ncolor: #808080;\\\n}\\\n.ace-sqlserver .ace_set.ace_statement {\\\ncolor: #0000FF;\\\ntext-decoration: underline;\\\n}\\\n.ace-sqlserver .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-sqlserver .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-sqlserver .ace_constant.ace_language {\\\ncolor: #979797;\\\n}\\\n.ace-sqlserver .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-sqlserver .ace_invalid {\\\nbackground-color: rgb(153, 0, 0);\\\ncolor: white;\\\n}\\\n.ace-sqlserver .ace_support.ace_function {\\\ncolor: #FF00FF;\\\n}\\\n.ace-sqlserver .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-sqlserver .ace_class {\\\ncolor: #008080;\\\n}\\\n.ace-sqlserver .ace_support.ace_other {\\\ncolor: #6D79DE;\\\n}\\\n.ace-sqlserver .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F;\\\n}\\\n.ace-sqlserver .ace_comment {\\\ncolor: #008000;\\\n}\\\n.ace-sqlserver .ace_constant.ace_numeric {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-sqlserver .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-sqlserver .ace_support.ace_storedprocedure {\\\ncolor: #800000;\\\n}\\\n.ace-sqlserver .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-sqlserver .ace_list {\\\ncolor: rgb(185, 6, 144);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-sqlserver .ace_gutter-active-line {\\\nbackground-color: #dcdcdc;\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-sqlserver .ace_meta.ace_tag {\\\ncolor: #0000FF;\\\n}\\\n.ace-sqlserver .ace_string.ace_regex {\\\ncolor: #FF0000;\\\n}\\\n.ace-sqlserver .ace_string {\\\ncolor: #FF0000;\\\n}\\\n.ace-sqlserver .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #994409;\\\n}\\\n.ace-sqlserver .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-terminal.js",
    "content": "ace.define(\"ace/theme/terminal\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-terminal-theme\";\nexports.cssText = \".ace-terminal-theme .ace_gutter {\\\nbackground: #1a0005;\\\ncolor: steelblue\\\n}\\\n.ace-terminal-theme .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1a1a1a\\\n}\\\n.ace-terminal-theme {\\\nbackground-color: black;\\\ncolor: #DEDEDE\\\n}\\\n.ace-terminal-theme .ace_cursor {\\\ncolor: #9F9F9F\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_selection {\\\nbackground: #424242\\\n}\\\n.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px black;\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_step {\\\nbackground: rgb(0, 0, 0)\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_bracket {\\\nbackground: #090;\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_bracket-start {\\\nbackground: #090;\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #900\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_active-line {\\\nbackground: #2A2A2A\\\n}\\\n.ace-terminal-theme .ace_gutter-active-line {\\\nbackground-color: #2A112A\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #424242\\\n}\\\n.ace-terminal-theme .ace_invisible {\\\ncolor: #343434\\\n}\\\n.ace-terminal-theme .ace_keyword,\\\n.ace-terminal-theme .ace_meta,\\\n.ace-terminal-theme .ace_storage,\\\n.ace-terminal-theme .ace_storage.ace_type,\\\n.ace-terminal-theme .ace_support.ace_type {\\\ncolor: tomato\\\n}\\\n.ace-terminal-theme .ace_keyword.ace_operator {\\\ncolor: deeppink\\\n}\\\n.ace-terminal-theme .ace_constant.ace_character,\\\n.ace-terminal-theme .ace_constant.ace_language,\\\n.ace-terminal-theme .ace_constant.ace_numeric,\\\n.ace-terminal-theme .ace_keyword.ace_other.ace_unit,\\\n.ace-terminal-theme .ace_support.ace_constant,\\\n.ace-terminal-theme .ace_variable.ace_parameter {\\\ncolor: #E78C45\\\n}\\\n.ace-terminal-theme .ace_constant.ace_other {\\\ncolor: gold\\\n}\\\n.ace-terminal-theme .ace_invalid {\\\ncolor: yellow;\\\nbackground-color: red\\\n}\\\n.ace-terminal-theme .ace_invalid.ace_deprecated {\\\ncolor: #CED2CF;\\\nbackground-color: #B798BF\\\n}\\\n.ace-terminal-theme .ace_fold {\\\nbackground-color: #7AA6DA;\\\nborder-color: #DEDEDE\\\n}\\\n.ace-terminal-theme .ace_entity.ace_name.ace_function,\\\n.ace-terminal-theme .ace_support.ace_function,\\\n.ace-terminal-theme .ace_variable {\\\ncolor: #7AA6DA\\\n}\\\n.ace-terminal-theme .ace_support.ace_class,\\\n.ace-terminal-theme .ace_support.ace_type {\\\ncolor: #E7C547\\\n}\\\n.ace-terminal-theme .ace_heading,\\\n.ace-terminal-theme .ace_string {\\\ncolor: #B9CA4A\\\n}\\\n.ace-terminal-theme .ace_entity.ace_name.ace_tag,\\\n.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,\\\n.ace-terminal-theme .ace_meta.ace_tag,\\\n.ace-terminal-theme .ace_string.ace_regexp,\\\n.ace-terminal-theme .ace_variable {\\\ncolor: #D54E53\\\n}\\\n.ace-terminal-theme .ace_comment {\\\ncolor: orangered\\\n}\\\n.ace-terminal-theme .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/terminal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-textmate.js",
    "content": "ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/textmate\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-tomorrow.js",
    "content": "ace.define(\"ace/theme/tomorrow\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-tomorrow\";\nexports.cssText = \".ace-tomorrow .ace_gutter {\\\nbackground: #f6f6f6;\\\ncolor: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #f6f6f6\\\n}\\\n.ace-tomorrow {\\\nbackground-color: #FFFFFF;\\\ncolor: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_cursor {\\\ncolor: #AEAFAD\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_selection {\\\nbackground: #D6D6D6\\\n}\\\n.ace-tomorrow.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #D1D1D1\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_active-line {\\\nbackground: #EFEFEF\\\n}\\\n.ace-tomorrow .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #D6D6D6\\\n}\\\n.ace-tomorrow .ace_invisible {\\\ncolor: #D1D1D1\\\n}\\\n.ace-tomorrow .ace_keyword,\\\n.ace-tomorrow .ace_meta,\\\n.ace-tomorrow .ace_storage,\\\n.ace-tomorrow .ace_storage.ace_type,\\\n.ace-tomorrow .ace_support.ace_type {\\\ncolor: #8959A8\\\n}\\\n.ace-tomorrow .ace_keyword.ace_operator {\\\ncolor: #3E999F\\\n}\\\n.ace-tomorrow .ace_constant.ace_character,\\\n.ace-tomorrow .ace_constant.ace_language,\\\n.ace-tomorrow .ace_constant.ace_numeric,\\\n.ace-tomorrow .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow .ace_support.ace_constant,\\\n.ace-tomorrow .ace_variable.ace_parameter {\\\ncolor: #F5871F\\\n}\\\n.ace-tomorrow .ace_constant.ace_other {\\\ncolor: #666969\\\n}\\\n.ace-tomorrow .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #C82829\\\n}\\\n.ace-tomorrow .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #8959A8\\\n}\\\n.ace-tomorrow .ace_fold {\\\nbackground-color: #4271AE;\\\nborder-color: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow .ace_support.ace_function,\\\n.ace-tomorrow .ace_variable {\\\ncolor: #4271AE\\\n}\\\n.ace-tomorrow .ace_support.ace_class,\\\n.ace-tomorrow .ace_support.ace_type {\\\ncolor: #C99E00\\\n}\\\n.ace-tomorrow .ace_heading,\\\n.ace-tomorrow .ace_markup.ace_heading,\\\n.ace-tomorrow .ace_string {\\\ncolor: #718C00\\\n}\\\n.ace-tomorrow .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow .ace_meta.ace_tag,\\\n.ace-tomorrow .ace_string.ace_regexp,\\\n.ace-tomorrow .ace_variable {\\\ncolor: #C82829\\\n}\\\n.ace-tomorrow .ace_comment {\\\ncolor: #8E908C\\\n}\\\n.ace-tomorrow .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-tomorrow_night.js",
    "content": "ace.define(\"ace/theme/tomorrow_night\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night\";\nexports.cssText = \".ace-tomorrow-night .ace_gutter {\\\nbackground: #25282c;\\\ncolor: #C5C8C6\\\n}\\\n.ace-tomorrow-night .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #25282c\\\n}\\\n.ace-tomorrow-night {\\\nbackground-color: #1D1F21;\\\ncolor: #C5C8C6\\\n}\\\n.ace-tomorrow-night .ace_cursor {\\\ncolor: #AEAFAD\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_selection {\\\nbackground: #373B41\\\n}\\\n.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #1D1F21;\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #4B4E55\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_active-line {\\\nbackground: #282A2E\\\n}\\\n.ace-tomorrow-night .ace_gutter-active-line {\\\nbackground-color: #282A2E\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #373B41\\\n}\\\n.ace-tomorrow-night .ace_invisible {\\\ncolor: #4B4E55\\\n}\\\n.ace-tomorrow-night .ace_keyword,\\\n.ace-tomorrow-night .ace_meta,\\\n.ace-tomorrow-night .ace_storage,\\\n.ace-tomorrow-night .ace_storage.ace_type,\\\n.ace-tomorrow-night .ace_support.ace_type {\\\ncolor: #B294BB\\\n}\\\n.ace-tomorrow-night .ace_keyword.ace_operator {\\\ncolor: #8ABEB7\\\n}\\\n.ace-tomorrow-night .ace_constant.ace_character,\\\n.ace-tomorrow-night .ace_constant.ace_language,\\\n.ace-tomorrow-night .ace_constant.ace_numeric,\\\n.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night .ace_support.ace_constant,\\\n.ace-tomorrow-night .ace_variable.ace_parameter {\\\ncolor: #DE935F\\\n}\\\n.ace-tomorrow-night .ace_constant.ace_other {\\\ncolor: #CED1CF\\\n}\\\n.ace-tomorrow-night .ace_invalid {\\\ncolor: #CED2CF;\\\nbackground-color: #DF5F5F\\\n}\\\n.ace-tomorrow-night .ace_invalid.ace_deprecated {\\\ncolor: #CED2CF;\\\nbackground-color: #B798BF\\\n}\\\n.ace-tomorrow-night .ace_fold {\\\nbackground-color: #81A2BE;\\\nborder-color: #C5C8C6\\\n}\\\n.ace-tomorrow-night .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night .ace_support.ace_function,\\\n.ace-tomorrow-night .ace_variable {\\\ncolor: #81A2BE\\\n}\\\n.ace-tomorrow-night .ace_support.ace_class,\\\n.ace-tomorrow-night .ace_support.ace_type {\\\ncolor: #F0C674\\\n}\\\n.ace-tomorrow-night .ace_heading,\\\n.ace-tomorrow-night .ace_markup.ace_heading,\\\n.ace-tomorrow-night .ace_string {\\\ncolor: #B5BD68\\\n}\\\n.ace-tomorrow-night .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night .ace_meta.ace_tag,\\\n.ace-tomorrow-night .ace_string.ace_regexp,\\\n.ace-tomorrow-night .ace_variable {\\\ncolor: #CC6666\\\n}\\\n.ace-tomorrow-night .ace_comment {\\\ncolor: #969896\\\n}\\\n.ace-tomorrow-night .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-tomorrow_night_blue.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_blue\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-blue\";\nexports.cssText = \".ace-tomorrow-night-blue .ace_gutter {\\\nbackground: #00204b;\\\ncolor: #7388b5\\\n}\\\n.ace-tomorrow-night-blue .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #00204b\\\n}\\\n.ace-tomorrow-night-blue {\\\nbackground-color: #002451;\\\ncolor: #FFFFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_constant.ace_other,\\\n.ace-tomorrow-night-blue .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\\\nbackground: #003F8E\\\n}\\\n.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002451;\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_step {\\\nbackground: rgb(127, 111, 19)\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404F7D\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {\\\nbackground: #00346E\\\n}\\\n.ace-tomorrow-night-blue .ace_gutter-active-line {\\\nbackground-color: #022040\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #003F8E\\\n}\\\n.ace-tomorrow-night-blue .ace_invisible {\\\ncolor: #404F7D\\\n}\\\n.ace-tomorrow-night-blue .ace_keyword,\\\n.ace-tomorrow-night-blue .ace_meta,\\\n.ace-tomorrow-night-blue .ace_storage,\\\n.ace-tomorrow-night-blue .ace_storage.ace_type,\\\n.ace-tomorrow-night-blue .ace_support.ace_type {\\\ncolor: #EBBBFF\\\n}\\\n.ace-tomorrow-night-blue .ace_keyword.ace_operator {\\\ncolor: #99FFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_constant.ace_character,\\\n.ace-tomorrow-night-blue .ace_constant.ace_language,\\\n.ace-tomorrow-night-blue .ace_constant.ace_numeric,\\\n.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night-blue .ace_support.ace_constant,\\\n.ace-tomorrow-night-blue .ace_variable.ace_parameter {\\\ncolor: #FFC58F\\\n}\\\n.ace-tomorrow-night-blue .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #F99DA5\\\n}\\\n.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #EBBBFF\\\n}\\\n.ace-tomorrow-night-blue .ace_fold {\\\nbackground-color: #BBDAFF;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night-blue .ace_support.ace_function,\\\n.ace-tomorrow-night-blue .ace_variable {\\\ncolor: #BBDAFF\\\n}\\\n.ace-tomorrow-night-blue .ace_support.ace_class,\\\n.ace-tomorrow-night-blue .ace_support.ace_type {\\\ncolor: #FFEEAD\\\n}\\\n.ace-tomorrow-night-blue .ace_heading,\\\n.ace-tomorrow-night-blue .ace_markup.ace_heading,\\\n.ace-tomorrow-night-blue .ace_string {\\\ncolor: #D1F1A9\\\n}\\\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night-blue .ace_meta.ace_tag,\\\n.ace-tomorrow-night-blue .ace_string.ace_regexp,\\\n.ace-tomorrow-night-blue .ace_variable {\\\ncolor: #FF9DA4\\\n}\\\n.ace-tomorrow-night-blue .ace_comment {\\\ncolor: #7285B7\\\n}\\\n.ace-tomorrow-night-blue .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night_blue\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-tomorrow_night_bright.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_bright\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-bright\";\nexports.cssText = \".ace-tomorrow-night-bright .ace_gutter {\\\nbackground: #1a1a1a;\\\ncolor: #DEDEDE\\\n}\\\n.ace-tomorrow-night-bright .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1a1a1a\\\n}\\\n.ace-tomorrow-night-bright {\\\nbackground-color: #000000;\\\ncolor: #DEDEDE\\\n}\\\n.ace-tomorrow-night-bright .ace_cursor {\\\ncolor: #9F9F9F\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\\\nbackground: #424242\\\n}\\\n.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #000000;\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #888888\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {\\\nborder: 1px solid rgb(110, 119, 0);\\\nborder-bottom: 0;\\\nbox-shadow: inset 0 -1px rgb(110, 119, 0);\\\nmargin: -1px 0 0 -1px;\\\nbackground: rgba(255, 235, 0, 0.1)\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {\\\nbackground: #2A2A2A\\\n}\\\n.ace-tomorrow-night-bright .ace_gutter-active-line {\\\nbackground-color: #2A2A2A\\\n}\\\n.ace-tomorrow-night-bright .ace_stack {\\\nbackground-color: rgb(66, 90, 44)\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #888888\\\n}\\\n.ace-tomorrow-night-bright .ace_invisible {\\\ncolor: #343434\\\n}\\\n.ace-tomorrow-night-bright .ace_keyword,\\\n.ace-tomorrow-night-bright .ace_meta,\\\n.ace-tomorrow-night-bright .ace_storage,\\\n.ace-tomorrow-night-bright .ace_storage.ace_type,\\\n.ace-tomorrow-night-bright .ace_support.ace_type {\\\ncolor: #C397D8\\\n}\\\n.ace-tomorrow-night-bright .ace_keyword.ace_operator {\\\ncolor: #70C0B1\\\n}\\\n.ace-tomorrow-night-bright .ace_constant.ace_character,\\\n.ace-tomorrow-night-bright .ace_constant.ace_language,\\\n.ace-tomorrow-night-bright .ace_constant.ace_numeric,\\\n.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night-bright .ace_support.ace_constant,\\\n.ace-tomorrow-night-bright .ace_variable.ace_parameter {\\\ncolor: #E78C45\\\n}\\\n.ace-tomorrow-night-bright .ace_constant.ace_other {\\\ncolor: #EEEEEE\\\n}\\\n.ace-tomorrow-night-bright .ace_invalid {\\\ncolor: #CED2CF;\\\nbackground-color: #DF5F5F\\\n}\\\n.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\\\ncolor: #CED2CF;\\\nbackground-color: #B798BF\\\n}\\\n.ace-tomorrow-night-bright .ace_fold {\\\nbackground-color: #7AA6DA;\\\nborder-color: #DEDEDE\\\n}\\\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night-bright .ace_support.ace_function,\\\n.ace-tomorrow-night-bright .ace_variable {\\\ncolor: #7AA6DA\\\n}\\\n.ace-tomorrow-night-bright .ace_support.ace_class,\\\n.ace-tomorrow-night-bright .ace_support.ace_type {\\\ncolor: #E7C547\\\n}\\\n.ace-tomorrow-night-bright .ace_heading,\\\n.ace-tomorrow-night-bright .ace_markup.ace_heading,\\\n.ace-tomorrow-night-bright .ace_string {\\\ncolor: #B9CA4A\\\n}\\\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night-bright .ace_meta.ace_tag,\\\n.ace-tomorrow-night-bright .ace_string.ace_regexp,\\\n.ace-tomorrow-night-bright .ace_variable {\\\ncolor: #D54E53\\\n}\\\n.ace-tomorrow-night-bright .ace_comment {\\\ncolor: #969896\\\n}\\\n.ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {\\\ncolor: #C2C280\\\n}\\\n.ace-tomorrow-night-bright .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night_bright\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-tomorrow_night_eighties.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_eighties\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-eighties\";\nexports.cssText = \".ace-tomorrow-night-eighties .ace_gutter {\\\nbackground: #272727;\\\ncolor: #CCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #272727\\\n}\\\n.ace-tomorrow-night-eighties {\\\nbackground-color: #2D2D2D;\\\ncolor: #CCCCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_constant.ace_other,\\\n.ace-tomorrow-night-eighties .ace_cursor {\\\ncolor: #CCCCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\\\nbackground: #515151\\\n}\\\n.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #2D2D2D;\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #6A6A6A\\\n}\\\n.ace-tomorrow-night-bright .ace_stack {\\\nbackground: rgb(66, 90, 44)\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {\\\nbackground: #393939\\\n}\\\n.ace-tomorrow-night-eighties .ace_gutter-active-line {\\\nbackground-color: #393939\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #515151\\\n}\\\n.ace-tomorrow-night-eighties .ace_invisible {\\\ncolor: #6A6A6A\\\n}\\\n.ace-tomorrow-night-eighties .ace_keyword,\\\n.ace-tomorrow-night-eighties .ace_meta,\\\n.ace-tomorrow-night-eighties .ace_storage,\\\n.ace-tomorrow-night-eighties .ace_storage.ace_type,\\\n.ace-tomorrow-night-eighties .ace_support.ace_type {\\\ncolor: #CC99CC\\\n}\\\n.ace-tomorrow-night-eighties .ace_keyword.ace_operator {\\\ncolor: #66CCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_constant.ace_character,\\\n.ace-tomorrow-night-eighties .ace_constant.ace_language,\\\n.ace-tomorrow-night-eighties .ace_constant.ace_numeric,\\\n.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night-eighties .ace_support.ace_constant,\\\n.ace-tomorrow-night-eighties .ace_variable.ace_parameter {\\\ncolor: #F99157\\\n}\\\n.ace-tomorrow-night-eighties .ace_invalid {\\\ncolor: #CDCDCD;\\\nbackground-color: #F2777A\\\n}\\\n.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\\\ncolor: #CDCDCD;\\\nbackground-color: #CC99CC\\\n}\\\n.ace-tomorrow-night-eighties .ace_fold {\\\nbackground-color: #6699CC;\\\nborder-color: #CCCCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night-eighties .ace_support.ace_function,\\\n.ace-tomorrow-night-eighties .ace_variable {\\\ncolor: #6699CC\\\n}\\\n.ace-tomorrow-night-eighties .ace_support.ace_class,\\\n.ace-tomorrow-night-eighties .ace_support.ace_type {\\\ncolor: #FFCC66\\\n}\\\n.ace-tomorrow-night-eighties .ace_heading,\\\n.ace-tomorrow-night-eighties .ace_markup.ace_heading,\\\n.ace-tomorrow-night-eighties .ace_string {\\\ncolor: #99CC99\\\n}\\\n.ace-tomorrow-night-eighties .ace_comment {\\\ncolor: #999999\\\n}\\\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night-eighties .ace_meta.ace_tag,\\\n.ace-tomorrow-night-eighties .ace_variable {\\\ncolor: #F2777A\\\n}\\\n.ace-tomorrow-night-eighties .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night_eighties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-twilight.js",
    "content": "ace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-twilight\";\nexports.cssText = \".ace-twilight .ace_gutter {\\\nbackground: #232323;\\\ncolor: #E2E2E2\\\n}\\\n.ace-twilight .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #232323\\\n}\\\n.ace-twilight {\\\nbackground-color: #141414;\\\ncolor: #F8F8F8\\\n}\\\n.ace-twilight .ace_cursor {\\\ncolor: #A7A7A7\\\n}\\\n.ace-twilight .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-twilight.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #141414;\\\n}\\\n.ace-twilight .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-twilight .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-twilight .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-twilight .ace_gutter-active-line {\\\nbackground-color: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-twilight .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-twilight .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-twilight .ace_keyword,\\\n.ace-twilight .ace_meta {\\\ncolor: #CDA869\\\n}\\\n.ace-twilight .ace_constant,\\\n.ace-twilight .ace_constant.ace_character,\\\n.ace-twilight .ace_constant.ace_character.ace_escape,\\\n.ace-twilight .ace_constant.ace_other,\\\n.ace-twilight .ace_heading,\\\n.ace-twilight .ace_markup.ace_heading,\\\n.ace-twilight .ace_support.ace_constant {\\\ncolor: #CF6A4C\\\n}\\\n.ace-twilight .ace_invalid.ace_illegal {\\\ncolor: #F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75)\\\n}\\\n.ace-twilight .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1\\\n}\\\n.ace-twilight .ace_support {\\\ncolor: #9B859D\\\n}\\\n.ace-twilight .ace_fold {\\\nbackground-color: #AC885B;\\\nborder-color: #F8F8F8\\\n}\\\n.ace-twilight .ace_support.ace_function {\\\ncolor: #DAD085\\\n}\\\n.ace-twilight .ace_list,\\\n.ace-twilight .ace_markup.ace_list,\\\n.ace-twilight .ace_storage {\\\ncolor: #F9EE98\\\n}\\\n.ace-twilight .ace_entity.ace_name.ace_function,\\\n.ace-twilight .ace_meta.ace_tag,\\\n.ace-twilight .ace_variable {\\\ncolor: #AC885B\\\n}\\\n.ace-twilight .ace_string {\\\ncolor: #8F9D6A\\\n}\\\n.ace-twilight .ace_string.ace_regexp {\\\ncolor: #E9C062\\\n}\\\n.ace-twilight .ace_comment {\\\nfont-style: italic;\\\ncolor: #5F5A60\\\n}\\\n.ace-twilight .ace_variable {\\\ncolor: #7587A6\\\n}\\\n.ace-twilight .ace_xml-pe {\\\ncolor: #494949\\\n}\\\n.ace-twilight .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/twilight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-vibrant_ink.js",
    "content": "ace.define(\"ace/theme/vibrant_ink\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-vibrant-ink\";\nexports.cssText = \".ace-vibrant-ink .ace_gutter {\\\nbackground: #1a1a1a;\\\ncolor: #BEBEBE\\\n}\\\n.ace-vibrant-ink .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1a1a1a\\\n}\\\n.ace-vibrant-ink {\\\nbackground-color: #0F0F0F;\\\ncolor: #FFFFFF\\\n}\\\n.ace-vibrant-ink .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_selection {\\\nbackground: #6699CC\\\n}\\\n.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #0F0F0F;\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_active-line {\\\nbackground: #333333\\\n}\\\n.ace-vibrant-ink .ace_gutter-active-line {\\\nbackground-color: #333333\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #6699CC\\\n}\\\n.ace-vibrant-ink .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-vibrant-ink .ace_keyword,\\\n.ace-vibrant-ink .ace_meta {\\\ncolor: #FF6600\\\n}\\\n.ace-vibrant-ink .ace_constant,\\\n.ace-vibrant-ink .ace_constant.ace_character,\\\n.ace-vibrant-ink .ace_constant.ace_character.ace_escape,\\\n.ace-vibrant-ink .ace_constant.ace_other {\\\ncolor: #339999\\\n}\\\n.ace-vibrant-ink .ace_constant.ace_numeric {\\\ncolor: #99CC99\\\n}\\\n.ace-vibrant-ink .ace_invalid,\\\n.ace-vibrant-ink .ace_invalid.ace_deprecated {\\\ncolor: #CCFF33;\\\nbackground-color: #000000\\\n}\\\n.ace-vibrant-ink .ace_fold {\\\nbackground-color: #FFCC00;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-vibrant-ink .ace_entity.ace_name.ace_function,\\\n.ace-vibrant-ink .ace_support.ace_function,\\\n.ace-vibrant-ink .ace_variable {\\\ncolor: #FFCC00\\\n}\\\n.ace-vibrant-ink .ace_variable.ace_parameter {\\\nfont-style: italic\\\n}\\\n.ace-vibrant-ink .ace_string {\\\ncolor: #66FF00\\\n}\\\n.ace-vibrant-ink .ace_string.ace_regexp {\\\ncolor: #44B4CC\\\n}\\\n.ace-vibrant-ink .ace_comment {\\\ncolor: #9933CC\\\n}\\\n.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\\\nfont-style: italic;\\\ncolor: #99CC99\\\n}\\\n.ace-vibrant-ink .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/vibrant_ink\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/theme-xcode.js",
    "content": "ace.define(\"ace/theme/xcode\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-xcode\";\nexports.cssText = \"\\\n.ace-xcode .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333\\\n}\\\n.ace-xcode .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-xcode {\\\nbackground-color: #FFFFFF;\\\ncolor: #000000\\\n}\\\n.ace-xcode .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-xcode .ace_marker-layer .ace_selection {\\\nbackground: #B5D5FF\\\n}\\\n.ace-xcode.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-xcode .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174)\\\n}\\\n.ace-xcode .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #BFBFBF\\\n}\\\n.ace-xcode .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.071)\\\n}\\\n.ace-xcode .ace_gutter-active-line {\\\nbackground-color: rgba(0, 0, 0, 0.071)\\\n}\\\n.ace-xcode .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #B5D5FF\\\n}\\\n.ace-xcode .ace_constant.ace_language,\\\n.ace-xcode .ace_keyword,\\\n.ace-xcode .ace_meta,\\\n.ace-xcode .ace_variable.ace_language {\\\ncolor: #C800A4\\\n}\\\n.ace-xcode .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-xcode .ace_constant.ace_character,\\\n.ace-xcode .ace_constant.ace_other {\\\ncolor: #275A5E\\\n}\\\n.ace-xcode .ace_constant.ace_numeric {\\\ncolor: #3A00DC\\\n}\\\n.ace-xcode .ace_entity.ace_other.ace_attribute-name,\\\n.ace-xcode .ace_support.ace_constant,\\\n.ace-xcode .ace_support.ace_function {\\\ncolor: #450084\\\n}\\\n.ace-xcode .ace_fold {\\\nbackground-color: #C800A4;\\\nborder-color: #000000\\\n}\\\n.ace-xcode .ace_entity.ace_name.ace_tag,\\\n.ace-xcode .ace_support.ace_class,\\\n.ace-xcode .ace_support.ace_type {\\\ncolor: #790EAD\\\n}\\\n.ace-xcode .ace_storage {\\\ncolor: #C900A4\\\n}\\\n.ace-xcode .ace_string {\\\ncolor: #DF0002\\\n}\\\n.ace-xcode .ace_comment {\\\ncolor: #008E00\\\n}\\\n.ace-xcode .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});                (function() {\n                    ace.require([\"ace/theme/xcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/worker-coffee.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/coffee/coffee\",[], function(require, exports, module) {\nfunction define(f) { module.exports = f() }; define.amd = {};\nvar _typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},_get=function e(a,t,o){null===a&&(a=Function.prototype);var n=Object.getOwnPropertyDescriptor(a,t);if(n===void 0){var r=Object.getPrototypeOf(a);return null===r?void 0:e(r,t,o)}if(\"value\"in n)return n.value;var l=n.get;return void 0===l?void 0:l.call(o)},_slicedToArray=function(){function e(e,a){var t=[],o=!0,n=!1,r=void 0;try{for(var l=e[Symbol.iterator](),s;!(o=(s=l.next()).done)&&(t.push(s.value),!(a&&t.length===a));o=!0);}catch(e){n=!0,r=e}finally{try{!o&&l[\"return\"]&&l[\"return\"]()}finally{if(n)throw r}}return t}return function(a,t){if(Array.isArray(a))return a;if(Symbol.iterator in Object(a))return e(a,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),_createClass=function(){function e(e,a){for(var t=0,o;t<a.length;t++)o=a[t],o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(a,t,o){return t&&e(a.prototype,t),o&&e(a,o),a}}();function _toArray(e){return Array.isArray(e)?e:Array.from(e)}function _possibleConstructorReturn(e,a){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return a&&(\"object\"==typeof a||\"function\"==typeof a)?a:e}function _inherits(e,a){if(\"function\"!=typeof a&&null!==a)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof a);e.prototype=Object.create(a&&a.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),a&&(Object.setPrototypeOf?Object.setPrototypeOf(e,a):e.__proto__=a)}function _classCallCheck(e,a){if(!(e instanceof a))throw new TypeError(\"Cannot call a class as a function\")}function _toConsumableArray(e){if(Array.isArray(e)){for(var a=0,t=Array(e.length);a<e.length;a++)t[a]=e[a];return t}return Array.from(e)}(function(root){var CoffeeScript=function(){function require(e){return require[e]}var _Mathabs=Math.abs,_StringfromCharCode=String.fromCharCode,_Mathfloor=Math.floor;return require[\"../../package.json\"]=function(){return{name:\"coffeescript\",description:\"Unfancy JavaScript\",keywords:[\"javascript\",\"language\",\"coffeescript\",\"compiler\"],author:\"Jeremy Ashkenas\",version:\"2.2.1\",license:\"MIT\",engines:{node:\">=6\"},directories:{lib:\"./lib/coffeescript\"},main:\"./lib/coffeescript/index\",browser:\"./lib/coffeescript/browser\",bin:{coffee:\"./bin/coffee\",cake:\"./bin/cake\"},files:[\"bin\",\"lib\",\"register.js\",\"repl.js\"],scripts:{test:\"node ./bin/cake test\",\"test-harmony\":\"node --harmony ./bin/cake test\"},homepage:\"http://coffeescript.org\",bugs:\"https://github.com/jashkenas/coffeescript/issues\",repository:{type:\"git\",url:\"git://github.com/jashkenas/coffeescript.git\"},devDependencies:{\"babel-core\":\"~6.26.0\",\"babel-preset-babili\":\"~0.1.4\",\"babel-preset-env\":\"~1.6.1\",\"babel-preset-minify\":\"^0.3.0\",codemirror:\"^5.32.0\",docco:\"~0.8.0\",\"highlight.js\":\"~9.12.0\",jison:\">=0.4.18\",\"markdown-it\":\"~8.4.0\",underscore:\"~1.8.3\",webpack:\"~3.10.0\"},dependencies:{}}}(),require[\"./helpers\"]=function(){var e={};return function(){var a,t,o,n,r,l,s,i;e.starts=function(e,a,t){return a===e.substr(t,a.length)},e.ends=function(e,a,t){var o;return o=a.length,a===e.substr(e.length-o-(t||0),o)},e.repeat=s=function(e,a){var t;for(t=\"\";0<a;)1&a&&(t+=e),a>>>=1,e+=e;return t},e.compact=function(e){var a,t,o,n;for(n=[],a=0,o=e.length;a<o;a++)t=e[a],t&&n.push(t);return n},e.count=function(e,a){var t,o;if(t=o=0,!a.length)return 1/0;for(;o=1+e.indexOf(a,o);)t++;return t},e.merge=function(e,a){return n(n({},e),a)},n=e.extend=function(e,a){var t,o;for(t in a)o=a[t],e[t]=o;return e},e.flatten=r=function flatten(e){var a,t,o,n;for(t=[],o=0,n=e.length;o<n;o++)a=e[o],\"[object Array]\"===Object.prototype.toString.call(a)?t=t.concat(r(a)):t.push(a);return t},e.del=function(e,a){var t;return t=e[a],delete e[a],t},e.some=null==(l=Array.prototype.some)?function(a){var t,e,o,n;for(n=this,e=0,o=n.length;e<o;e++)if(t=n[e],a(t))return!0;return!1}:l,e.invertLiterate=function(e){var a,t,o,n,r,l,s,i,d;for(i=[],a=/^\\s*$/,o=/^[\\t ]/,s=/^(?:\\t?| {0,3})(?:[\\*\\-\\+]|[0-9]{1,9}\\.)[ \\t]/,n=!1,d=e.split(\"\\n\"),t=0,r=d.length;t<r;t++)l=d[t],a.test(l)?(n=!1,i.push(l)):n||s.test(l)?(n=!0,i.push(\"# \"+l)):!n&&o.test(l)?i.push(l):(n=!0,i.push(\"# \"+l));return i.join(\"\\n\")},t=function(e,a){return a?{first_line:e.first_line,first_column:e.first_column,last_line:a.last_line,last_column:a.last_column}:e},o=function(e){return e.first_line+\"x\"+e.first_column+\"-\"+e.last_line+\"x\"+e.last_column},e.addDataToNode=function(e,n,r){return function(l){var s,i,d,c,p,u;if(null!=(null==l?void 0:l.updateLocationDataIfMissing)&&null!=n&&l.updateLocationDataIfMissing(t(n,r)),!e.tokenComments)for(e.tokenComments={},c=e.parser.tokens,s=0,i=c.length;s<i;s++)if(p=c[s],!!p.comments)if(u=o(p[2]),null==e.tokenComments[u])e.tokenComments[u]=p.comments;else{var m;(m=e.tokenComments[u]).push.apply(m,_toConsumableArray(p.comments))}return null!=l.locationData&&(d=o(l.locationData),null!=e.tokenComments[d]&&a(e.tokenComments[d],l)),l}},e.attachCommentsToNode=a=function(e,a){var t;if(null!=e&&0!==e.length)return null==a.comments&&(a.comments=[]),(t=a.comments).push.apply(t,_toConsumableArray(e))},e.locationDataToString=function(e){var a;return\"2\"in e&&\"first_line\"in e[2]?a=e[2]:\"first_line\"in e&&(a=e),a?a.first_line+1+\":\"+(a.first_column+1)+\"-\"+(a.last_line+1+\":\"+(a.last_column+1)):\"No location data\"},e.baseFileName=function(e){var a=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],t=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],o,n;return(n=t?/\\\\|\\//:/\\//,o=e.split(n),e=o[o.length-1],!(a&&0<=e.indexOf(\".\")))?e:(o=e.split(\".\"),o.pop(),\"coffee\"===o[o.length-1]&&1<o.length&&o.pop(),o.join(\".\"))},e.isCoffee=function(e){return/\\.((lit)?coffee|coffee\\.md)$/.test(e)},e.isLiterate=function(e){return/\\.(litcoffee|coffee\\.md)$/.test(e)},e.throwSyntaxError=function(e,a){var t;throw t=new SyntaxError(e),t.location=a,t.toString=i,t.stack=t.toString(),t},e.updateSyntaxError=function(e,a,t){return e.toString===i&&(e.code||(e.code=a),e.filename||(e.filename=t),e.stack=e.toString()),e},i=function(){var e,a,t,o,n,r,l,i,d,c,p,u,m,h;if(!(this.code&&this.location))return Error.prototype.toString.call(this);var g=this.location;return l=g.first_line,r=g.first_column,d=g.last_line,i=g.last_column,null==d&&(d=l),null==i&&(i=r),n=this.filename||\"[stdin]\",e=this.code.split(\"\\n\")[l],h=r,o=l===d?i+1:e.length,c=e.slice(0,h).replace(/[^\\s]/g,\" \")+s(\"^\",o-h),\"undefined\"!=typeof process&&null!==process&&(t=(null==(p=process.stdout)?void 0:p.isTTY)&&(null==(u=process.env)||!u.NODE_DISABLE_COLORS)),(null==(m=this.colorful)?t:m)&&(a=function(e){return\"\u001b[1;31m\"+e+\"\u001b[0m\"},e=e.slice(0,h)+a(e.slice(h,o))+e.slice(o),c=a(c)),n+\":\"+(l+1)+\":\"+(r+1)+\": error: \"+this.message+\"\\n\"+e+\"\\n\"+c},e.nameWhitespaceCharacter=function(e){return\" \"===e?\"space\":\"\\n\"===e?\"newline\":\"\\r\"===e?\"carriage return\":\"\\t\"===e?\"tab\":e}}.call(this),{exports:e}.exports}(),require[\"./rewriter\"]=function(){var e={};return function(){var a=[].indexOf,t=require(\"./helpers\"),o,n,r,l,s,d,c,p,u,m,h,i,g,f,y,T,N,v,k,b,$,_,C;for(C=t.throwSyntaxError,$=function(e,a){var t,o,n,r,l;if(e.comments){if(a.comments&&0!==a.comments.length){for(l=[],r=e.comments,o=0,n=r.length;o<n;o++)t=r[o],t.unshift?l.push(t):a.comments.push(t);a.comments=l.concat(a.comments)}else a.comments=e.comments;return delete e.comments}},N=function(e,a,t,o){var n;return n=[e,a],n.generated=!0,t&&(n.origin=t),o&&$(o,n),n},e.Rewriter=f=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"rewrite\",value:function rewrite(e){var a,o,n;return this.tokens=e,(\"undefined\"!=typeof process&&null!==process?null==(a=process.env)?void 0:a.DEBUG_TOKEN_STREAM:void 0)&&(process.env.DEBUG_REWRITTEN_TOKEN_STREAM&&console.log(\"Initial token stream:\"),console.log(function(){var e,a,t,o;for(t=this.tokens,o=[],e=0,a=t.length;e<a;e++)n=t[e],o.push(n[0]+\"/\"+n[1]+(n.comments?\"*\":\"\"));return o}.call(this).join(\" \"))),this.removeLeadingNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.normalizeLines(),this.tagPostfixConditionals(),this.addImplicitBracesAndParens(),this.addParensToChainedDoIife(),this.rescueStowawayComments(),this.addLocationDataToGeneratedTokens(),this.enforceValidCSXAttributes(),this.fixOutdentLocationData(),(\"undefined\"!=typeof process&&null!==process?null==(o=process.env)?void 0:o.DEBUG_REWRITTEN_TOKEN_STREAM:void 0)&&(process.env.DEBUG_TOKEN_STREAM&&console.log(\"Rewritten token stream:\"),console.log(function(){var e,a,t,o;for(t=this.tokens,o=[],e=0,a=t.length;e<a;e++)n=t[e],o.push(n[0]+\"/\"+n[1]+(n.comments?\"*\":\"\"));return o}.call(this).join(\" \"))),this.tokens}},{key:\"scanTokens\",value:function scanTokens(e){var a,t,o;for(o=this.tokens,a=0;t=o[a];)a+=e.call(this,t,a,o);return!0}},{key:\"detectEnd\",value:function detectEnd(e,t,o){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{},r,l,s,i,p;for(p=this.tokens,r=0;i=p[e];){if(0===r&&t.call(this,i,e))return o.call(this,i,e);if((l=i[0],0<=a.call(c,l))?r+=1:(s=i[0],0<=a.call(d,s))&&(r-=1),0>r)return n.returnOnNegativeLevel?void 0:o.call(this,i,e);e+=1}return e-1}},{key:\"removeLeadingNewlines\",value:function removeLeadingNewlines(){var e,a,t,o,n,r,l,s,i;for(l=this.tokens,e=a=0,n=l.length;a<n;e=++a){var d=_slicedToArray(l[e],1);if(i=d[0],\"TERMINATOR\"!==i)break}if(0!==e){for(s=this.tokens.slice(0,e),t=0,r=s.length;t<r;t++)o=s[t],$(o,this.tokens[e]);return this.tokens.splice(0,e)}}},{key:\"closeOpenCalls\",value:function closeOpenCalls(){var e,a;return a=function(e){var a;return\")\"===(a=e[0])||\"CALL_END\"===a},e=function(e){return e[0]=\"CALL_END\"},this.scanTokens(function(t,o){return\"CALL_START\"===t[0]&&this.detectEnd(o+1,a,e),1})}},{key:\"closeOpenIndexes\",value:function closeOpenIndexes(){var e,a;return a=function(e){var a;return\"]\"===(a=e[0])||\"INDEX_END\"===a},e=function(e){return e[0]=\"INDEX_END\"},this.scanTokens(function(t,o){return\"INDEX_START\"===t[0]&&this.detectEnd(o+1,a,e),1})}},{key:\"indexOfTag\",value:function indexOfTag(e){var t,o,n,r,l;t=0;for(var s=arguments.length,i=Array(1<s?s-1:0),d=1;d<s;d++)i[d-1]=arguments[d];for(o=n=0,r=i.length;0<=r?0<=n&&n<r:0>=n&&n>r;o=0<=r?++n:--n)if(null!=i[o]&&(\"string\"==typeof i[o]&&(i[o]=[i[o]]),l=this.tag(e+o+t),0>a.call(i[o],l)))return-1;return e+o+t-1}},{key:\"looksObjectish\",value:function looksObjectish(e){var t,o;return-1!==this.indexOfTag(e,\"@\",null,\":\")||-1!==this.indexOfTag(e,null,\":\")||(o=this.indexOfTag(e,c),!!(-1!==o&&(t=null,this.detectEnd(o+1,function(e){var t;return t=e[0],0<=a.call(d,t)},function(e,a){return t=a}),\":\"===this.tag(t+1))))}},{key:\"findTagsBackwards\",value:function findTagsBackwards(e,t){var o,n,r,l,s,i,p;for(o=[];0<=e&&(o.length||(l=this.tag(e),0>a.call(t,l))&&((s=this.tag(e),0>a.call(c,s))||this.tokens[e].generated)&&(i=this.tag(e),0>a.call(g,i)));)(n=this.tag(e),0<=a.call(d,n))&&o.push(this.tag(e)),(r=this.tag(e),0<=a.call(c,r))&&o.length&&o.pop(),e-=1;return p=this.tag(e),0<=a.call(t,p)}},{key:\"addImplicitBracesAndParens\",value:function addImplicitBracesAndParens(){var e,t;return e=[],t=null,this.scanTokens(function(o,l,f){var i=this,y=_slicedToArray(o,1),T,v,b,$,_,C,D,E,x,I,S,A,R,k,O,L,F,w,P,j,M,U,V,s,B,G,H,W,X,Y,q,z,J;J=y[0];var K=P=0<l?f[l-1]:[],Z=_slicedToArray(K,1);w=Z[0];var Q=L=l<f.length-1?f[l+1]:[],ee=_slicedToArray(Q,1);if(O=ee[0],W=function(){return e[e.length-1]},X=l,b=function(e){return l-X+e},I=function(e){var a;return null==e||null==(a=e[2])?void 0:a.ours},A=function(e){return I(e)&&\"{\"===(null==e?void 0:e[0])},S=function(e){return I(e)&&\"(\"===(null==e?void 0:e[0])},C=function(){return I(W())},D=function(){return S(W())},x=function(){return A(W())},E=function(){var e;return C()&&\"CONTROL\"===(null==(e=W())?void 0:e[0])},Y=function(a){return e.push([\"(\",a,{ours:!0}]),f.splice(a,0,N(\"CALL_START\",\"(\",[\"\",\"implicit function call\",o[2]],P))},T=function(){return e.pop(),f.splice(l,0,N(\"CALL_END\",\")\",[\"\",\"end of input\",o[2]],P)),l+=1},q=function(a){var t=!(1<arguments.length&&void 0!==arguments[1])||arguments[1],n;return e.push([\"{\",a,{sameLine:!0,startsLine:t,ours:!0}]),n=new String(\"{\"),n.generated=!0,f.splice(a,0,N(\"{\",n,o,P))},v=function(a){return a=null==a?l:a,e.pop(),f.splice(a,0,N(\"}\",\"}\",o,P)),l+=1},$=function(e){var a;return a=null,i.detectEnd(e,function(e){return\"TERMINATOR\"===e[0]},function(e,t){return a=t},{returnOnNegativeLevel:!0}),null!=a&&i.looksObjectish(a+1)},(D()||x())&&0<=a.call(r,J)||x()&&\":\"===w&&\"FOR\"===J)return e.push([\"CONTROL\",l,{ours:!0}]),b(1);if(\"INDENT\"===J&&C()){if(\"=>\"!==w&&\"->\"!==w&&\"[\"!==w&&\"(\"!==w&&\",\"!==w&&\"{\"!==w&&\"ELSE\"!==w&&\"=\"!==w)for(;D()||x()&&\":\"!==w;)D()?T():v();return E()&&e.pop(),e.push([J,l]),b(1)}if(0<=a.call(c,J))return e.push([J,l]),b(1);if(0<=a.call(d,J)){for(;C();)D()?T():x()?v():e.pop();t=e.pop()}if(_=function(){var e,t,n,r;return(n=i.findTagsBackwards(l,[\"FOR\"])&&i.findTagsBackwards(l,[\"FORIN\",\"FOROF\",\"FORFROM\"]),e=n||i.findTagsBackwards(l,[\"WHILE\",\"UNTIL\",\"LOOP\",\"LEADING_WHEN\"]),!!e)&&(t=!1,r=o[2].first_line,i.detectEnd(l,function(e){var t;return t=e[0],0<=a.call(g,t)},function(e,a){var o=f[a-1]||[],n=_slicedToArray(o,3),l;return w=n[0],l=n[2].first_line,t=r===l&&(\"->\"===w||\"=>\"===w)},{returnOnNegativeLevel:!0}),t)},(0<=a.call(m,J)&&o.spaced||\"?\"===J&&0<l&&!f[l-1].spaced)&&(0<=a.call(p,O)||\"...\"===O&&(j=this.tag(l+2),0<=a.call(p,j))&&!this.findTagsBackwards(l,[\"INDEX_START\",\"[\"])||0<=a.call(h,O)&&!L.spaced&&!L.newLine)&&!_())return\"?\"===J&&(J=o[0]=\"FUNC_EXIST\"),Y(l+1),b(2);if(0<=a.call(m,J)&&-1<this.indexOfTag(l+1,\"INDENT\")&&this.looksObjectish(l+2)&&!this.findTagsBackwards(l,[\"CLASS\",\"EXTENDS\",\"IF\",\"CATCH\",\"SWITCH\",\"LEADING_WHEN\",\"FOR\",\"WHILE\",\"UNTIL\"]))return Y(l+1),e.push([\"INDENT\",l+2]),b(3);if(\":\"===J){if(V=function(){var e;switch(!1){case e=this.tag(l-1),0>a.call(d,e):return t[1];case\"@\"!==this.tag(l-2):return l-2;default:return l-1}}.call(this),z=0>=V||(M=this.tag(V-1),0<=a.call(g,M))||f[V-1].newLine,W()){var ae=W(),te=_slicedToArray(ae,2);if(H=te[0],B=te[1],(\"{\"===H||\"INDENT\"===H&&\"{\"===this.tag(B-1))&&(z||\",\"===this.tag(V-1)||\"{\"===this.tag(V-1)))return b(1)}return q(V,!!z),b(2)}if(0<=a.call(g,J))for(R=e.length-1;0<=R&&(G=e[R],!!I(G));R+=-1)A(G)&&(G[2].sameLine=!1);if(k=\"OUTDENT\"===w||P.newLine,0<=a.call(u,J)||0<=a.call(n,J)&&k||(\"..\"===J||\"...\"===J)&&this.findTagsBackwards(l,[\"INDEX_START\"]))for(;C();){var oe=W(),ne=_slicedToArray(oe,3);H=ne[0],B=ne[1];var re=ne[2];if(s=re.sameLine,z=re.startsLine,D()&&\",\"!==w||\",\"===w&&\"TERMINATOR\"===J&&null==O)T();else if(x()&&s&&\"TERMINATOR\"!==J&&\":\"!==w&&!((\"POST_IF\"===J||\"FOR\"===J||\"WHILE\"===J||\"UNTIL\"===J)&&z&&$(l+1)))v();else if(x()&&\"TERMINATOR\"===J&&\",\"!==w&&!(z&&this.looksObjectish(l+1)))v();else break}if(\",\"===J&&!this.looksObjectish(l+1)&&x()&&\"FOROF\"!==(U=this.tag(l+2))&&\"FORIN\"!==U&&(\"TERMINATOR\"!==O||!this.looksObjectish(l+2)))for(F=\"OUTDENT\"===O?1:0;x();)v(l+F);return b(1)})}},{key:\"enforceValidCSXAttributes\",value:function enforceValidCSXAttributes(){return this.scanTokens(function(e,a,t){var o,n;return e.csxColon&&(o=t[a+1],\"STRING_START\"!==(n=o[0])&&\"STRING\"!==n&&\"(\"!==n&&C(\"expected wrapped or quoted JSX attribute\",o[2])),1})}},{key:\"rescueStowawayComments\",value:function rescueStowawayComments(){var e,t,o;return e=function(e,a,t,o){return\"TERMINATOR\"!==t[a][0]&&t[o](N(\"TERMINATOR\",\"\\n\",t[a])),t[o](N(\"JS\",\"\",t[a],e))},o=function(t,o,n){var r,s,i,d,c,p,u;for(s=o;s!==n.length&&(c=n[s][0],0<=a.call(l,c));)s++;if(!(s===n.length||(p=n[s][0],0<=a.call(l,p)))){for(u=t.comments,i=0,d=u.length;i<d;i++)r=u[i],r.unshift=!0;return $(t,n[s]),1}return s=n.length-1,e(t,s,n,\"push\"),1},t=function(t,o,n){var r,s,i;for(r=o;-1!==r&&(s=n[r][0],0<=a.call(l,s));)r--;return-1===r||(i=n[r][0],0<=a.call(l,i))?(e(t,0,n,\"unshift\"),3):($(t,n[r]),1)},this.scanTokens(function(e,n,r){var s,i,d,c,p;if(!e.comments)return 1;if(p=1,d=e[0],0<=a.call(l,d)){for(s={comments:[]},i=e.comments.length-1;-1!==i;)!1===e.comments[i].newLine&&!1===e.comments[i].here&&(s.comments.unshift(e.comments[i]),e.comments.splice(i,1)),i--;0!==s.comments.length&&(p=t(s,n-1,r)),0!==e.comments.length&&o(e,n,r)}else{for(s={comments:[]},i=e.comments.length-1;-1!==i;)!e.comments[i].newLine||e.comments[i].unshift||\"JS\"===e[0]&&e.generated||(s.comments.unshift(e.comments[i]),e.comments.splice(i,1)),i--;0!==s.comments.length&&(p=o(s,n+1,r))}return 0===(null==(c=e.comments)?void 0:c.length)&&delete e.comments,p})}},{key:\"addLocationDataToGeneratedTokens\",value:function addLocationDataToGeneratedTokens(){return this.scanTokens(function(e,a,t){var o,n,r,l,s,i;if(e[2])return 1;if(!(e.generated||e.explicit))return 1;if(\"{\"===e[0]&&(r=null==(s=t[a+1])?void 0:s[2])){var d=r;n=d.first_line,o=d.first_column}else if(l=null==(i=t[a-1])?void 0:i[2]){var c=l;n=c.last_line,o=c.last_column}else n=o=0;return e[2]={first_line:n,first_column:o,last_line:n,last_column:o},1})}},{key:\"fixOutdentLocationData\",value:function fixOutdentLocationData(){return this.scanTokens(function(e,a,t){var o;return\"OUTDENT\"===e[0]||e.generated&&\"CALL_END\"===e[0]||e.generated&&\"}\"===e[0]?(o=t[a-1][2],e[2]={first_line:o.last_line,first_column:o.last_column,last_line:o.last_line,last_column:o.last_column},1):1})}},{key:\"addParensToChainedDoIife\",value:function addParensToChainedDoIife(){var e,t,o;return t=function(e,a){return\"OUTDENT\"===this.tag(a-1)},e=function(e,t){var r;if(r=e[0],!(0>a.call(n,r)))return this.tokens.splice(o,0,N(\"(\",\"(\",this.tokens[o])),this.tokens.splice(t+1,0,N(\")\",\")\",this.tokens[t]))},o=null,this.scanTokens(function(a,n){var r,l;return\"do\"===a[1]?(o=n,r=n+1,\"PARAM_START\"===this.tag(n+1)&&(r=null,this.detectEnd(n+1,function(e,a){return\"PARAM_END\"===this.tag(a-1)},function(e,a){return r=a})),null==r||\"->\"!==(l=this.tag(r))&&\"=>\"!==l||\"INDENT\"!==this.tag(r+1))?1:(this.detectEnd(r+1,t,e),2):1})}},{key:\"normalizeLines\",value:function normalizeLines(){var e=this,t,o,r,l,d,c,p,u,m;return m=d=u=null,p=null,c=null,l=[],r=function(e,t){var o,r,l,i;return\";\"!==e[1]&&(o=e[0],0<=a.call(y,o))&&!(\"TERMINATOR\"===e[0]&&(r=this.tag(t+1),0<=a.call(s,r)))&&!(\"ELSE\"===e[0]&&(\"THEN\"!==m||c||p))&&(\"CATCH\"!==(l=e[0])&&\"FINALLY\"!==l||\"->\"!==m&&\"=>\"!==m)||(i=e[0],0<=a.call(n,i))&&(this.tokens[t-1].newLine||\"OUTDENT\"===this.tokens[t-1][0])},t=function(e,a){return\"ELSE\"===e[0]&&\"THEN\"===m&&l.pop(),this.tokens.splice(\",\"===this.tag(a-1)?a-1:a,0,u)},o=function(a,t){var o,n,r;if(r=l.length,!(0<r))return t;o=l.pop();var s=e.indentation(a[o]),i=_slicedToArray(s,2);return n=i[1],n[1]=2*r,a.splice(t,0,n),n[1]=2,a.splice(t+1,0,n),e.detectEnd(t+2,function(e){var a;return\"OUTDENT\"===(a=e[0])||\"TERMINATOR\"===a},function(e,t){if(\"OUTDENT\"===this.tag(t)&&\"OUTDENT\"===this.tag(t+1))return a.splice(t,2)}),t+2},this.scanTokens(function(e,n,i){var h=_slicedToArray(e,1),g,f,y,k,N,v;if(v=h[0],g=(\"->\"===v||\"=>\"===v)&&this.findTagsBackwards(n,[\"IF\",\"WHILE\",\"FOR\",\"UNTIL\",\"SWITCH\",\"WHEN\",\"LEADING_WHEN\",\"[\",\"INDEX_START\"])&&!this.findTagsBackwards(n,[\"THEN\",\"..\",\"...\"]),\"TERMINATOR\"===v){if(\"ELSE\"===this.tag(n+1)&&\"OUTDENT\"!==this.tag(n-1))return i.splice.apply(i,[n,1].concat(_toConsumableArray(this.indentation()))),1;if(k=this.tag(n+1),0<=a.call(s,k))return i.splice(n,1),0}if(\"CATCH\"===v)for(f=y=1;2>=y;f=++y)if(\"OUTDENT\"===(N=this.tag(n+f))||\"TERMINATOR\"===N||\"FINALLY\"===N)return i.splice.apply(i,[n+f,0].concat(_toConsumableArray(this.indentation()))),2+f;if((\"->\"===v||\"=>\"===v)&&(\",\"===this.tag(n+1)||\".\"===this.tag(n+1)&&e.newLine)){var b=this.indentation(i[n]),$=_slicedToArray(b,2);return d=$[0],u=$[1],i.splice(n+1,0,d,u),1}if(0<=a.call(T,v)&&\"INDENT\"!==this.tag(n+1)&&(\"ELSE\"!==v||\"IF\"!==this.tag(n+1))&&!g){m=v;var _=this.indentation(i[n]),C=_slicedToArray(_,2);return d=C[0],u=C[1],\"THEN\"===m&&(d.fromThen=!0),\"THEN\"===v&&(p=this.findTagsBackwards(n,[\"LEADING_WHEN\"])&&\"IF\"===this.tag(n+1),c=this.findTagsBackwards(n,[\"IF\"])&&\"IF\"===this.tag(n+1)),\"THEN\"===v&&this.findTagsBackwards(n,[\"IF\"])&&l.push(n),\"ELSE\"===v&&\"OUTDENT\"!==this.tag(n-1)&&(n=o(i,n)),i.splice(n+1,0,d),this.detectEnd(n+2,r,t),\"THEN\"===v&&i.splice(n,1),1}return 1})}},{key:\"tagPostfixConditionals\",value:function tagPostfixConditionals(){var e,t,o;return o=null,t=function(e,t){var o=_slicedToArray(e,1),n,r;r=o[0];var l=_slicedToArray(this.tokens[t-1],1);return n=l[0],\"TERMINATOR\"===r||\"INDENT\"===r&&0>a.call(T,n)},e=function(e){if(\"INDENT\"!==e[0]||e.generated&&!e.fromThen)return o[0]=\"POST_\"+o[0]},this.scanTokens(function(a,n){return\"IF\"===a[0]?(o=a,this.detectEnd(n+1,t,e),1):1})}},{key:\"indentation\",value:function indentation(e){var a,t;return a=[\"INDENT\",2],t=[\"OUTDENT\",2],e?(a.generated=t.generated=!0,a.origin=t.origin=e):a.explicit=t.explicit=!0,[a,t]}},{key:\"tag\",value:function tag(e){var a;return null==(a=this.tokens[e])?void 0:a[0]}}]),e}();return e.prototype.generate=N,e}.call(this),o=[[\"(\",\")\"],[\"[\",\"]\"],[\"{\",\"}\"],[\"INDENT\",\"OUTDENT\"],[\"CALL_START\",\"CALL_END\"],[\"PARAM_START\",\"PARAM_END\"],[\"INDEX_START\",\"INDEX_END\"],[\"STRING_START\",\"STRING_END\"],[\"REGEX_START\",\"REGEX_END\"]],e.INVERSES=i={},c=[],d=[],v=0,b=o.length;v<b;v++){var D=_slicedToArray(o[v],2);k=D[0],_=D[1],c.push(i[_]=k),d.push(i[k]=_)}s=[\"CATCH\",\"THEN\",\"ELSE\",\"FINALLY\"].concat(d),m=[\"IDENTIFIER\",\"PROPERTY\",\"SUPER\",\")\",\"CALL_END\",\"]\",\"INDEX_END\",\"@\",\"THIS\"],p=[\"IDENTIFIER\",\"CSX_TAG\",\"PROPERTY\",\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_START\",\"REGEX\",\"REGEX_START\",\"JS\",\"NEW\",\"PARAM_START\",\"CLASS\",\"IF\",\"TRY\",\"SWITCH\",\"THIS\",\"UNDEFINED\",\"NULL\",\"BOOL\",\"UNARY\",\"YIELD\",\"AWAIT\",\"UNARY_MATH\",\"SUPER\",\"THROW\",\"@\",\"->\",\"=>\",\"[\",\"(\",\"{\",\"--\",\"++\"],h=[\"+\",\"-\"],u=[\"POST_IF\",\"FOR\",\"WHILE\",\"UNTIL\",\"WHEN\",\"BY\",\"LOOP\",\"TERMINATOR\"],T=[\"ELSE\",\"->\",\"=>\",\"TRY\",\"FINALLY\",\"THEN\"],y=[\"TERMINATOR\",\"CATCH\",\"FINALLY\",\"ELSE\",\"OUTDENT\",\"LEADING_WHEN\"],g=[\"TERMINATOR\",\"INDENT\",\"OUTDENT\"],n=[\".\",\"?.\",\"::\",\"?::\"],r=[\"IF\",\"TRY\",\"FINALLY\",\"CATCH\",\"CLASS\",\"SWITCH\"],l=[\"(\",\")\",\"[\",\"]\",\"{\",\"}\",\".\",\"..\",\"...\",\",\",\"=\",\"++\",\"--\",\"?\",\"AS\",\"AWAIT\",\"CALL_START\",\"CALL_END\",\"DEFAULT\",\"ELSE\",\"EXTENDS\",\"EXPORT\",\"FORIN\",\"FOROF\",\"FORFROM\",\"IMPORT\",\"INDENT\",\"INDEX_SOAK\",\"LEADING_WHEN\",\"OUTDENT\",\"PARAM_END\",\"REGEX_START\",\"REGEX_END\",\"RETURN\",\"STRING_END\",\"THROW\",\"UNARY\",\"YIELD\"].concat(h.concat(u.concat(n.concat(r))))}.call(this),{exports:e}.exports}(),require[\"./lexer\"]=function(){var e={};return function(){var a=[].indexOf,t=[].slice,o=require(\"./rewriter\"),n,r,l,s,i,d,c,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E,x,I,S,A,R,O,L,F,w,P,j,M,U,V,B,G,H,W,X,Y,q,z,J,K,Z,Q,ee,ae,te,oe,ne,re,le,se,ie,de,ce,pe,ue,me,he,ge,fe,ye,ke,Te,Ne,ve,be,$e;z=o.Rewriter,S=o.INVERSES;var _e=require(\"./helpers\");he=_e.count,be=_e.starts,me=_e.compact,ve=_e.repeat,ge=_e.invertLiterate,Ne=_e.merge,ue=_e.attachCommentsToNode,Te=_e.locationDataToString,$e=_e.throwSyntaxError,e.Lexer=w=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"tokenize\",value:function tokenize(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,r;for(this.literate=a.literate,this.indent=0,this.baseIndent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.indentLiteral=\"\",this.ends=[],this.tokens=[],this.seenFor=!1,this.seenImport=!1,this.seenExport=!1,this.importSpecifierList=!1,this.exportSpecifierList=!1,this.csxDepth=0,this.csxObjAttribute={},this.chunkLine=a.line||0,this.chunkColumn=a.column||0,e=this.clean(e),n=0;this.chunk=e.slice(n);){t=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.stringToken()||this.numberToken()||this.csxToken()||this.regexToken()||this.jsToken()||this.literalToken();var l=this.getLineAndColumnFromChunk(t),s=_slicedToArray(l,2);if(this.chunkLine=s[0],this.chunkColumn=s[1],n+=t,a.untilBalanced&&0===this.ends.length)return{tokens:this.tokens,index:n}}return this.closeIndentation(),(o=this.ends.pop())&&this.error(\"missing \"+o.tag,(null==(r=o.origin)?o:r)[2]),!1===a.rewrite?this.tokens:(new z).rewrite(this.tokens)}},{key:\"clean\",value:function clean(e){return e.charCodeAt(0)===n&&(e=e.slice(1)),e=e.replace(/\\r/g,\"\").replace(re,\"\"),pe.test(e)&&(e=\"\\n\"+e,this.chunkLine--),this.literate&&(e=ge(e)),e}},{key:\"identifierToken\",value:function identifierToken(){var e,t,o,n,r,s,p,u,m,h,f,y,k,T,N,v,b,$,_,C,E,x,I,S,A,O,F,w;if(p=this.atCSXTag(),A=p?g:D,!(m=A.exec(this.chunk)))return 0;var P=m,j=_slicedToArray(P,3);if(u=j[0],r=j[1],t=j[2],s=r.length,h=void 0,\"own\"===r&&\"FOR\"===this.tag())return this.token(\"OWN\",r),r.length;if(\"from\"===r&&\"YIELD\"===this.tag())return this.token(\"FROM\",r),r.length;if(\"as\"===r&&this.seenImport){if(\"*\"===this.value())this.tokens[this.tokens.length-1][0]=\"IMPORT_ALL\";else if(k=this.value(!0),0<=a.call(c,k)){f=this.prev();var M=[\"IDENTIFIER\",this.value(!0)];f[0]=M[0],f[1]=M[1]}if(\"DEFAULT\"===(T=this.tag())||\"IMPORT_ALL\"===T||\"IDENTIFIER\"===T)return this.token(\"AS\",r),r.length}if(\"as\"===r&&this.seenExport){if(\"IDENTIFIER\"===(v=this.tag())||\"DEFAULT\"===v)return this.token(\"AS\",r),r.length;if(b=this.value(!0),0<=a.call(c,b)){f=this.prev();var U=[\"IDENTIFIER\",this.value(!0)];return f[0]=U[0],f[1]=U[1],this.token(\"AS\",r),r.length}}if(\"default\"===r&&this.seenExport&&(\"EXPORT\"===($=this.tag())||\"AS\"===$))return this.token(\"DEFAULT\",r),r.length;if(\"do\"===r&&(S=/^(\\s*super)(?!\\(\\))/.exec(this.chunk.slice(3)))){this.token(\"SUPER\",\"super\"),this.token(\"CALL_START\",\"(\"),this.token(\"CALL_END\",\")\");var V=S,B=_slicedToArray(V,2);return u=B[0],O=B[1],O.length+3}if(f=this.prev(),F=t||null!=f&&(\".\"===(_=f[0])||\"?.\"===_||\"::\"===_||\"?::\"===_||!f.spaced&&\"@\"===f[0])?\"PROPERTY\":\"IDENTIFIER\",\"IDENTIFIER\"===F&&(0<=a.call(R,r)||0<=a.call(c,r))&&!(this.exportSpecifierList&&0<=a.call(c,r))?(F=r.toUpperCase(),\"WHEN\"===F&&(C=this.tag(),0<=a.call(L,C))?F=\"LEADING_WHEN\":\"FOR\"===F?this.seenFor=!0:\"UNLESS\"===F?F=\"IF\":\"IMPORT\"===F?this.seenImport=!0:\"EXPORT\"===F?this.seenExport=!0:0<=a.call(le,F)?F=\"UNARY\":0<=a.call(Y,F)&&(\"INSTANCEOF\"!==F&&this.seenFor?(F=\"FOR\"+F,this.seenFor=!1):(F=\"RELATION\",\"!\"===this.value()&&(h=this.tokens.pop(),r=\"!\"+r)))):\"IDENTIFIER\"===F&&this.seenFor&&\"from\"===r&&fe(f)?(F=\"FORFROM\",this.seenFor=!1):\"PROPERTY\"===F&&f&&(f.spaced&&(E=f[0],0<=a.call(l,E))&&/^[gs]et$/.test(f[1])&&1<this.tokens.length&&\".\"!==(x=this.tokens[this.tokens.length-2][0])&&\"?.\"!==x&&\"@\"!==x?this.error(\"'\"+f[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",f[2]):2<this.tokens.length&&(y=this.tokens[this.tokens.length-2],(\"@\"===(I=f[0])||\"THIS\"===I)&&y&&y.spaced&&/^[gs]et$/.test(y[1])&&\".\"!==(N=this.tokens[this.tokens.length-3][0])&&\"?.\"!==N&&\"@\"!==N&&this.error(\"'\"+y[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",y[2]))),\"IDENTIFIER\"===F&&0<=a.call(q,r)&&this.error(\"reserved word '\"+r+\"'\",{length:r.length}),\"PROPERTY\"===F||this.exportSpecifierList||(0<=a.call(i,r)&&(e=r,r=d[r]),F=function(){return\"!\"===r?\"UNARY\":\"==\"===r||\"!=\"===r?\"COMPARE\":\"true\"===r||\"false\"===r?\"BOOL\":\"break\"===r||\"continue\"===r||\"debugger\"===r?\"STATEMENT\":\"&&\"===r||\"||\"===r?r:F}()),w=this.token(F,r,0,s),e&&(w.origin=[F,e,w[2]]),h){var G=[h[2].first_line,h[2].first_column];w[2].first_line=G[0],w[2].first_column=G[1]}return t&&(o=u.lastIndexOf(p?\"=\":\":\"),n=this.token(\":\",\":\",o,t.length),p&&(n.csxColon=!0)),p&&\"IDENTIFIER\"===F&&\":\"!==f[0]&&this.token(\",\",\",\",0,0,w),u.length}},{key:\"numberToken\",value:function numberToken(){var e,a,t,o,n,r;if(!(t=U.exec(this.chunk)))return 0;switch(o=t[0],a=o.length,!1){case!/^0[BOX]/.test(o):this.error(\"radix prefix in '\"+o+\"' must be lowercase\",{offset:1});break;case!/^(?!0x).*E/.test(o):this.error(\"exponential notation in '\"+o+\"' must be indicated with a lowercase 'e'\",{offset:o.indexOf(\"E\")});break;case!/^0\\d*[89]/.test(o):this.error(\"decimal literal '\"+o+\"' must not be prefixed with '0'\",{length:a});break;case!/^0\\d+/.test(o):this.error(\"octal literal '\"+o+\"' must be prefixed with '0o'\",{length:a})}return e=function(){switch(o.charAt(1)){case\"b\":return 2;case\"o\":return 8;case\"x\":return 16;default:return null}}(),n=null==e?parseFloat(o):parseInt(o.slice(2),e),r=Infinity===n?\"INFINITY\":\"NUMBER\",this.token(r,o,0,a),a}},{key:\"stringToken\",value:function stringToken(){var e=this,a=oe.exec(this.chunk)||[],t=_slicedToArray(a,1),o,n,r,l,s,d,c,i,p,u,m,h,g,f,y,k;if(h=t[0],!h)return 0;m=this.prev(),m&&\"from\"===this.value()&&(this.seenImport||this.seenExport)&&(m[0]=\"FROM\"),f=function(){return\"'\"===h?te:'\"'===h?Q:\"'''\"===h?b:'\"\"\"'===h?N:void 0}(),d=3===h.length;var T=this.matchWithInterpolations(f,h);if(k=T.tokens,s=T.index,o=k.length-1,r=h.charAt(0),d){for(i=null,l=function(){var e,a,t;for(t=[],c=e=0,a=k.length;e<a;c=++e)y=k[c],\"NEOSTRING\"===y[0]&&t.push(y[1]);return t}().join(\"#{}\");u=v.exec(l);)n=u[1],(null===i||0<(g=n.length)&&g<i.length)&&(i=n);i&&(p=RegExp(\"\\\\n\"+i,\"g\")),this.mergeInterpolationTokens(k,{delimiter:r},function(a,t){return a=e.formatString(a,{delimiter:h}),p&&(a=a.replace(p,\"\\n\")),0===t&&(a=a.replace(O,\"\")),t===o&&(a=a.replace(ne,\"\")),a})}else this.mergeInterpolationTokens(k,{delimiter:r},function(a,t){return a=e.formatString(a,{delimiter:h}),a=a.replace(K,function(e,n){return 0===t&&0===n||t===o&&n+e.length===a.length?\"\":\" \"}),a});return this.atCSXTag()&&this.token(\",\",\",\",0,0,this.prev),s}},{key:\"commentToken\",value:function commentToken(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,t,o,n,r,l,s,i,d,c,u,m;if(!(i=e.match(p)))return 0;var h=i,g=_slicedToArray(h,2);return t=g[0],l=g[1],r=null,c=/^\\s*\\n+\\s*#/.test(t),l?(d=T.exec(t),d&&this.error(\"block comments cannot contain \"+d[0],{offset:d.index,length:d[0].length}),e=e.replace(\"###\"+l+\"###\",\"\"),e=e.replace(/^\\n+/,\"\"),this.lineToken(e),n=l,0<=a.call(n,\"\\n\")&&(n=n.replace(RegExp(\"\\\\n\"+ve(\" \",this.indent),\"g\"),\"\\n\")),r=[n]):(n=t.replace(/^(\\n*)/,\"\"),n=n.replace(/^([ |\\t]*)#/gm,\"\"),r=n.split(\"\\n\")),o=function(){var e,a,t;for(t=[],s=e=0,a=r.length;e<a;s=++e)n=r[s],t.push({content:n,here:null!=l,newLine:c||0!==s});return t}(),m=this.prev(),m?ue(o,m):(o[0].newLine=!0,this.lineToken(this.chunk.slice(t.length)),u=this.makeToken(\"JS\",\"\"),u.generated=!0,u.comments=o,this.tokens.push(u),this.newlineToken(0)),t.length}},{key:\"jsToken\",value:function jsToken(){var e,a;return\"`\"===this.chunk.charAt(0)&&(e=C.exec(this.chunk)||A.exec(this.chunk))?(a=e[1].replace(/\\\\+(`|$)/g,function(e){return e.slice(-Math.ceil(e.length/2))}),this.token(\"JS\",a,0,e[0].length),e[0].length):0}},{key:\"regexToken\",value:function regexToken(){var e=this,t,o,n,r,s,i,d,c,p,u,m,h,g,f,y,k;switch(!1){case!(u=W.exec(this.chunk)):this.error(\"regular expressions cannot begin with \"+u[2],{offset:u.index+u[1].length});break;case!(u=this.matchWithInterpolations($,\"///\")):var T=u;if(k=T.tokens,d=T.index,r=this.chunk.slice(0,d).match(/\\s+(#(?!{).*)/g),r)for(c=0,p=r.length;c<p;c++)n=r[c],this.commentToken(n);break;case!(u=G.exec(this.chunk)):var N=u,v=_slicedToArray(N,3);if(y=v[0],t=v[1],o=v[2],this.validateEscapes(t,{isRegex:!0,offsetInChunk:1}),d=y.length,h=this.prev(),h)if(h.spaced&&(g=h[0],0<=a.call(l,g))){if(!o||B.test(y))return 0}else if(f=h[0],0<=a.call(M,f))return 0;o||this.error(\"missing / (unclosed regex)\");break;default:return 0}var b=H.exec(this.chunk.slice(d)),_=_slicedToArray(b,1);switch(i=_[0],s=d+i.length,m=this.makeToken(\"REGEX\",null,0,s),!1){case!!ce.test(i):this.error(\"invalid regular expression flags \"+i,{offset:d,length:i.length});break;case!(y||1===k.length):t=t?this.formatRegex(t,{flags:i,delimiter:\"/\"}):this.formatHeregex(k[0][1],{flags:i}),this.token(\"REGEX\",\"\"+this.makeDelimitedLiteral(t,{delimiter:\"/\"})+i,0,s,m);break;default:this.token(\"REGEX_START\",\"(\",0,0,m),this.token(\"IDENTIFIER\",\"RegExp\",0,0),this.token(\"CALL_START\",\"(\",0,0),this.mergeInterpolationTokens(k,{delimiter:'\"',double:!0},function(a){return e.formatHeregex(a,{flags:i})}),i&&(this.token(\",\",\",\",d-1,0),this.token(\"STRING\",'\"'+i+'\"',d-1,i.length)),this.token(\")\",\")\",s-1,0),this.token(\"REGEX_END\",\")\",s-1,0)}return s}},{key:\"lineToken\",value:function lineToken(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,a,t,o,n,r,l,s,i,d;if(!(n=j.exec(e)))return 0;if(o=n[0],i=this.prev(),a=null!=i&&\"\\\\\"===i[0],a&&this.seenFor||(this.seenFor=!1),this.importSpecifierList||(this.seenImport=!1),this.exportSpecifierList||(this.seenExport=!1),d=o.length-1-o.lastIndexOf(\"\\n\"),s=this.unfinished(),l=0<d?o.slice(-d):\"\",!/^(.?)\\1*$/.exec(l))return this.error(\"mixed indentation\",{offset:o.length}),o.length;if(r=Math.min(l.length,this.indentLiteral.length),l.slice(0,r)!==this.indentLiteral.slice(0,r))return this.error(\"indentation mismatch\",{offset:o.length}),o.length;if(d-this.indebt===this.indent)return s?this.suppressNewlines():this.newlineToken(0),o.length;if(d>this.indent){if(s)return this.indebt=d-this.indent,this.suppressNewlines(),o.length;if(!this.tokens.length)return this.baseIndent=this.indent=d,this.indentLiteral=l,o.length;t=d-this.indent+this.outdebt,this.token(\"INDENT\",t,o.length-d,d),this.indents.push(t),this.ends.push({tag:\"OUTDENT\"}),this.outdebt=this.indebt=0,this.indent=d,this.indentLiteral=l}else d<this.baseIndent?this.error(\"missing indentation\",{offset:o.length}):(this.indebt=0,this.outdentToken(this.indent-d,s,o.length));return o.length}},{key:\"outdentToken\",value:function outdentToken(e,t,o){var n,r,l,s;for(n=this.indent-e;0<e;)l=this.indents[this.indents.length-1],l?this.outdebt&&e<=this.outdebt?(this.outdebt-=e,e=0):(r=this.indents.pop()+this.outdebt,o&&(s=this.chunk[o],0<=a.call(E,s))&&(n-=r-e,e=r),this.outdebt=0,this.pair(\"OUTDENT\"),this.token(\"OUTDENT\",e,0,o),e-=r):this.outdebt=e=0;return r&&(this.outdebt-=e),this.suppressSemicolons(),\"TERMINATOR\"===this.tag()||t||this.token(\"TERMINATOR\",\"\\n\",o,0),this.indent=n,this.indentLiteral=this.indentLiteral.slice(0,n),this}},{key:\"whitespaceToken\",value:function whitespaceToken(){var e,a,t;return(e=pe.exec(this.chunk))||(a=\"\\n\"===this.chunk.charAt(0))?(t=this.prev(),t&&(t[e?\"spaced\":\"newLine\"]=!0),e?e[0].length:0):0}},{key:\"newlineToken\",value:function newlineToken(e){return this.suppressSemicolons(),\"TERMINATOR\"!==this.tag()&&this.token(\"TERMINATOR\",\"\\n\",e,0),this}},{key:\"suppressNewlines\",value:function suppressNewlines(){var e;return e=this.prev(),\"\\\\\"===e[1]&&(e.comments&&1<this.tokens.length&&ue(e.comments,this.tokens[this.tokens.length-2]),this.tokens.pop()),this}},{key:\"csxToken\",value:function csxToken(){var e=this,t,o,n,r,l,s,i,d,c,p,m,h,g,T;if(l=this.chunk[0],m=0<this.tokens.length?this.tokens[this.tokens.length-1][0]:\"\",\"<\"===l){if(d=y.exec(this.chunk.slice(1))||f.exec(this.chunk.slice(1)),!(d&&(0<this.csxDepth||!(p=this.prev())||p.spaced||(h=p[0],0>a.call(u,h)))))return 0;var N=d,v=_slicedToArray(N,3);return i=v[0],s=v[1],o=v[2],c=this.token(\"CSX_TAG\",s,1,s.length),this.token(\"CALL_START\",\"(\"),this.token(\"[\",\"[\"),this.ends.push({tag:\"/>\",origin:c,name:s}),this.csxDepth++,s.length+1}if(n=this.atCSXTag()){if(\"/>\"===this.chunk.slice(0,2))return this.pair(\"/>\"),this.token(\"]\",\"]\",0,2),this.token(\"CALL_END\",\")\",0,2),this.csxDepth--,2;if(\"{\"===l)return\":\"===m?(g=this.token(\"(\",\"(\"),this.csxObjAttribute[this.csxDepth]=!1):(g=this.token(\"{\",\"{\"),this.csxObjAttribute[this.csxDepth]=!0),this.ends.push({tag:\"}\",origin:g}),1;if(\">\"===l){this.pair(\"/>\"),c=this.token(\"]\",\"]\"),this.token(\",\",\",\");var b=this.matchWithInterpolations(I,\">\",\"</\",k);return T=b.tokens,r=b.index,this.mergeInterpolationTokens(T,{delimiter:'\"'},function(a){return e.formatString(a,{delimiter:\">\"})}),d=y.exec(this.chunk.slice(r))||f.exec(this.chunk.slice(r)),d&&d[1]===n.name||this.error(\"expected corresponding CSX closing tag for \"+n.name,n.origin[2]),t=r+n.name.length,\">\"!==this.chunk[t]&&this.error(\"missing closing > after tag name\",{offset:t,length:1}),this.token(\"CALL_END\",\")\",r,n.name.length+1),this.csxDepth--,t+1}return 0}return this.atCSXTag(1)?\"}\"===l?(this.pair(l),this.csxObjAttribute[this.csxDepth]?(this.token(\"}\",\"}\"),this.csxObjAttribute[this.csxDepth]=!1):this.token(\")\",\")\"),this.token(\",\",\",\"),1):0:0}},{key:\"atCSXTag\",value:function atCSXTag(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,a,t,o;if(0===this.csxDepth)return!1;for(a=this.ends.length-1;\"OUTDENT\"===(null==(o=this.ends[a])?void 0:o.tag)||0<e--;)a--;return t=this.ends[a],\"/>\"===(null==t?void 0:t.tag)&&t}},{key:\"literalToken\",value:function literalToken(){var e,t,o,n,r,i,d,c,p,u,g,f,y;if(e=V.exec(this.chunk)){var k=e,T=_slicedToArray(k,1);y=T[0],s.test(y)&&this.tagParameters()}else y=this.chunk.charAt(0);if(g=y,n=this.prev(),n&&0<=a.call([\"=\"].concat(_toConsumableArray(h)),y)&&(u=!1,\"=\"!==y||\"||\"!==(r=n[1])&&\"&&\"!==r||n.spaced||(n[0]=\"COMPOUND_ASSIGN\",n[1]+=\"=\",n=this.tokens[this.tokens.length-2],u=!0),n&&\"PROPERTY\"!==n[0]&&(o=null==(i=n.origin)?n:i,t=ye(n[1],o[1]),t&&this.error(t,o[2])),u))return y.length;if(\"{\"===y&&this.seenImport?this.importSpecifierList=!0:this.importSpecifierList&&\"}\"===y?this.importSpecifierList=!1:\"{\"===y&&\"EXPORT\"===(null==n?void 0:n[0])?this.exportSpecifierList=!0:this.exportSpecifierList&&\"}\"===y&&(this.exportSpecifierList=!1),\";\"===y)(d=null==n?void 0:n[0],0<=a.call([\"=\"].concat(_toConsumableArray(ie)),d))&&this.error(\"unexpected ;\"),this.seenFor=this.seenImport=this.seenExport=!1,g=\"TERMINATOR\";else if(\"*\"===y&&\"EXPORT\"===(null==n?void 0:n[0]))g=\"EXPORT_ALL\";else if(0<=a.call(P,y))g=\"MATH\";else if(0<=a.call(m,y))g=\"COMPARE\";else if(0<=a.call(h,y))g=\"COMPOUND_ASSIGN\";else if(0<=a.call(le,y))g=\"UNARY\";else if(0<=a.call(se,y))g=\"UNARY_MATH\";else if(0<=a.call(J,y))g=\"SHIFT\";else if(\"?\"===y&&(null==n?void 0:n.spaced))g=\"BIN?\";else if(n)if(\"(\"===y&&!n.spaced&&(c=n[0],0<=a.call(l,c)))\"?\"===n[0]&&(n[0]=\"FUNC_EXIST\"),g=\"CALL_START\";else if(\"[\"===y&&((p=n[0],0<=a.call(x,p))&&!n.spaced||\"::\"===n[0]))switch(g=\"INDEX_START\",n[0]){case\"?\":n[0]=\"INDEX_SOAK\"}return f=this.makeToken(g,y),\"(\"===y||\"{\"===y||\"[\"===y?this.ends.push({tag:S[y],origin:f}):\")\"===y||\"}\"===y||\"]\"===y?this.pair(y):void 0,this.tokens.push(this.makeToken(g,y)),y.length}},{key:\"tagParameters\",value:function tagParameters(){var e,a,t,o,n;if(\")\"!==this.tag())return this;for(t=[],n=this.tokens,e=n.length,a=n[--e],a[0]=\"PARAM_END\";o=n[--e];)switch(o[0]){case\")\":t.push(o);break;case\"(\":case\"CALL_START\":if(t.length)t.pop();else return\"(\"===o[0]?(o[0]=\"PARAM_START\",this):(a[0]=\"CALL_END\",this)}return this}},{key:\"closeIndentation\",value:function closeIndentation(){return this.outdentToken(this.indent)}},{key:\"matchWithInterpolations\",value:function matchWithInterpolations(a,o,n,r){var l,s,i,d,c,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E;if(null==n&&(n=o),null==r&&(r=/^#\\{/),E=[],v=o.length,this.chunk.slice(0,v)!==o)return null;for(C=this.chunk.slice(v);;){var x=a.exec(C),I=_slicedToArray(x,1);if(D=I[0],this.validateEscapes(D,{isRegex:\"/\"===o.charAt(0),offsetInChunk:v}),E.push(this.makeToken(\"NEOSTRING\",D,v)),C=C.slice(D.length),v+=D.length,!(T=r.exec(C)))break;var S=T,A=_slicedToArray(S,1);f=A[0],g=f.length-1;var R=this.getLineAndColumnFromChunk(v+g),O=_slicedToArray(R,2);k=O[0],u=O[1],_=C.slice(g);var L=(new e).tokenize(_,{line:k,column:u,untilBalanced:!0});if(N=L.tokens,h=L.index,h+=g,c=\"}\"===C[h-1],c){var F,w,P,j;F=N,w=_slicedToArray(F,1),b=w[0],F,P=t.call(N,-1),j=_slicedToArray(P,1),p=j[0],P,b[0]=b[1]=\"(\",p[0]=p[1]=\")\",p.origin=[\"\",\"end of interpolation\",p[2]]}\"TERMINATOR\"===(null==($=N[1])?void 0:$[0])&&N.splice(1,1),c||(b=this.makeToken(\"(\",\"(\",v,0),p=this.makeToken(\")\",\")\",v+h,0),N=[b].concat(_toConsumableArray(N),[p])),E.push([\"TOKENS\",N]),C=C.slice(h),v+=h}return C.slice(0,n.length)!==n&&this.error(\"missing \"+n,{length:o.length}),l=E,s=_slicedToArray(l,1),m=s[0],l,i=t.call(E,-1),d=_slicedToArray(i,1),y=d[0],i,m[2].first_column-=o.length,\"\\n\"===y[1].substr(-1)?(y[2].last_line+=1,y[2].last_column=n.length-1):y[2].last_column+=n.length,0===y[1].length&&(y[2].last_column-=1),{tokens:E,index:v+n.length}}},{key:\"mergeInterpolationTokens\",value:function mergeInterpolationTokens(e,a,o){var n,r,l,s,i,d,c,p,u,m,h,g,f,y,k,T,N,v,b;for(1<e.length&&(h=this.token(\"STRING_START\",\"(\",0,0)),l=this.tokens.length,s=i=0,p=e.length;i<p;s=++i){var $;T=e[s];var _=T,C=_slicedToArray(_,2);switch(k=C[0],b=C[1],k){case\"TOKENS\":if(2===b.length){if(!(b[0].comments||b[1].comments))continue;for(g=0===this.csxDepth?this.makeToken(\"STRING\",\"''\"):this.makeToken(\"JS\",\"\"),g[2]=b[0][2],d=0,u=b.length;d<u;d++){var D;(v=b[d],!!v.comments)&&(null==g.comments&&(g.comments=[]),(D=g.comments).push.apply(D,_toConsumableArray(v.comments)))}b.splice(1,0,g)}m=b[0],N=b;break;case\"NEOSTRING\":if(n=o.call(this,T[1],s),0===n.length)if(0===s)r=this.tokens.length;else continue;2===s&&null!=r&&this.tokens.splice(r,2),T[0]=\"STRING\",T[1]=this.makeDelimitedLiteral(n,a),m=T,N=[T]}this.tokens.length>l&&(f=this.token(\"+\",\"+\"),f[2]={first_line:m[2].first_line,first_column:m[2].first_column,last_line:m[2].first_line,last_column:m[2].first_column}),($=this.tokens).push.apply($,_toConsumableArray(N))}if(h){var E=t.call(e,-1),x=_slicedToArray(E,1);return c=x[0],h.origin=[\"STRING\",null,{first_line:h[2].first_line,first_column:h[2].first_column,last_line:c[2].last_line,last_column:c[2].last_column}],h[2]=h.origin[2],y=this.token(\"STRING_END\",\")\"),y[2]={first_line:c[2].last_line,first_column:c[2].last_column,last_line:c[2].last_line,last_column:c[2].last_column}}}},{key:\"pair\",value:function pair(e){var a,o,n,r,l,s,i;if(l=this.ends,a=t.call(l,-1),o=_slicedToArray(a,1),r=o[0],a,e!==(i=null==r?void 0:r.tag)){var d,c;return\"OUTDENT\"!==i&&this.error(\"unmatched \"+e),s=this.indents,d=t.call(s,-1),c=_slicedToArray(d,1),n=c[0],d,this.outdentToken(n,!0),this.pair(e)}return this.ends.pop()}},{key:\"getLineAndColumnFromChunk\",value:function getLineAndColumnFromChunk(e){var a,o,n,r,l;if(0===e)return[this.chunkLine,this.chunkColumn];if(l=e>=this.chunk.length?this.chunk:this.chunk.slice(0,+(e-1)+1||9e9),n=he(l,\"\\n\"),a=this.chunkColumn,0<n){var s,i;r=l.split(\"\\n\"),s=t.call(r,-1),i=_slicedToArray(s,1),o=i[0],s,a=o.length}else a+=l.length;return[this.chunkLine+n,a]}},{key:\"makeToken\",value:function makeToken(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:a.length,n,r,l;r={};var s=this.getLineAndColumnFromChunk(t),i=_slicedToArray(s,2);r.first_line=i[0],r.first_column=i[1],n=0<o?o-1:0;var d=this.getLineAndColumnFromChunk(t+n),c=_slicedToArray(d,2);return r.last_line=c[0],r.last_column=c[1],l=[e,a,r],l}},{key:\"token\",value:function(e,a,t,o,n){var r;return r=this.makeToken(e,a,t,o),n&&(r.origin=n),this.tokens.push(r),r}},{key:\"tag\",value:function tag(){var e,a,o,n;return o=this.tokens,e=t.call(o,-1),a=_slicedToArray(e,1),n=a[0],e,null==n?void 0:n[0]}},{key:\"value\",value:function value(){var e=!!(0<arguments.length&&void 0!==arguments[0])&&arguments[0],a,o,n,r,l;return n=this.tokens,a=t.call(n,-1),o=_slicedToArray(a,1),l=o[0],a,e&&null!=(null==l?void 0:l.origin)?null==(r=l.origin)?void 0:r[1]:null==l?void 0:l[1]}},{key:\"prev\",value:function prev(){return this.tokens[this.tokens.length-1]}},{key:\"unfinished\",value:function unfinished(){var e;return F.test(this.chunk)||(e=this.tag(),0<=a.call(ie,e))}},{key:\"formatString\",value:function formatString(e,a){return this.replaceUnicodeCodePointEscapes(e.replace(ae,\"$1\"),a)}},{key:\"formatHeregex\",value:function formatHeregex(e,a){return this.formatRegex(e.replace(_,\"$1$2\"),Ne(a,{delimiter:\"///\"}))}},{key:\"formatRegex\",value:function formatRegex(e,a){return this.replaceUnicodeCodePointEscapes(e,a)}},{key:\"unicodeCodePointToUnicodeEscapes\",value:function unicodeCodePointToUnicodeEscapes(e){var a,t,o;return(o=function(e){var a;return a=e.toString(16),\"\\\\u\"+ve(\"0\",4-a.length)+a},65536>e)?o(e):(a=_Mathfloor((e-65536)/1024)+55296,t=(e-65536)%1024+56320,\"\"+o(a)+o(t))}},{key:\"replaceUnicodeCodePointEscapes\",value:function replaceUnicodeCodePointEscapes(e,t){var o=this,n;return n=null!=t.flags&&0>a.call(t.flags,\"u\"),e.replace(de,function(e,a,r,l){var s;return a?a:(s=parseInt(r,16),1114111<s&&o.error(\"unicode code point escapes greater than \\\\u{10ffff} are not allowed\",{offset:l+t.delimiter.length,length:r.length+4}),n?o.unicodeCodePointToUnicodeEscapes(s):e)})}},{key:\"validateEscapes\",value:function validateEscapes(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,r,l,s,i,d,c,p;if(r=a.isRegex?X:ee,l=r.exec(e),!!l)return l[0],t=l[1],i=l[2],o=l[3],p=l[4],c=l[5],s=i?\"octal escape sequences are not allowed\":\"invalid escape sequence\",n=\"\\\\\"+(i||o||p||c),this.error(s+\" \"+n,{offset:(null==(d=a.offsetInChunk)?0:d)+l.index+t.length,length:n.length})}},{key:\"makeDelimitedLiteral\",value:function makeDelimitedLiteral(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t;return\"\"===e&&\"/\"===a.delimiter&&(e=\"(?:)\"),t=RegExp(\"(\\\\\\\\\\\\\\\\)|(\\\\\\\\0(?=[1-7]))|\\\\\\\\?(\"+a.delimiter+\")|\\\\\\\\?(?:(\\\\n)|(\\\\r)|(\\\\u2028)|(\\\\u2029))|(\\\\\\\\.)\",\"g\"),e=e.replace(t,function(e,t,o,n,r,l,s,i,d){switch(!1){case!t:return a.double?t+t:t;case!o:return\"\\\\x00\";case!n:return\"\\\\\"+n;case!r:return\"\\\\n\";case!l:return\"\\\\r\";case!s:return\"\\\\u2028\";case!i:return\"\\\\u2029\";case!d:return a.double?\"\\\\\"+d:d}}),\"\"+a.delimiter+e+a.delimiter}},{key:\"suppressSemicolons\",value:function suppressSemicolons(){var e,t,o;for(o=[];\";\"===this.value();)this.tokens.pop(),(e=null==(t=this.prev())?void 0:t[0],0<=a.call([\"=\"].concat(_toConsumableArray(ie)),e))?o.push(this.error(\"unexpected ;\")):o.push(void 0);return o}},{key:\"error\",value:function error(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,r,l,s,i;return l=\"first_line\"in a?a:(t=this.getLineAndColumnFromChunk(null==(s=a.offset)?0:s),o=_slicedToArray(t,2),r=o[0],n=o[1],t,{first_line:r,first_column:n,last_column:n+(null==(i=a.length)?1:i)-1}),$e(e,l)}}]),e}(),ye=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:e;switch(!1){case 0>a.call([].concat(_toConsumableArray(R),_toConsumableArray(c)),e):return\"keyword '\"+t+\"' can't be assigned\";case 0>a.call(Z,e):return\"'\"+t+\"' can't be assigned\";case 0>a.call(q,e):return\"reserved word '\"+t+\"' can't be assigned\";default:return!1}},e.isUnassignable=ye,fe=function(e){var a;return\"IDENTIFIER\"===e[0]?(\"from\"===e[1]&&(e[1][0]=\"IDENTIFIER\",!0),!0):\"FOR\"!==e[0]&&\"{\"!==(a=e[1])&&\"[\"!==a&&\",\"!==a&&\":\"!==a},R=[\"true\",\"false\",\"null\",\"this\",\"new\",\"delete\",\"typeof\",\"in\",\"instanceof\",\"return\",\"throw\",\"break\",\"continue\",\"debugger\",\"yield\",\"await\",\"if\",\"else\",\"switch\",\"for\",\"while\",\"do\",\"try\",\"catch\",\"finally\",\"class\",\"extends\",\"super\",\"import\",\"export\",\"default\"],c=[\"undefined\",\"Infinity\",\"NaN\",\"then\",\"unless\",\"until\",\"loop\",\"of\",\"by\",\"when\"],d={and:\"&&\",or:\"||\",is:\"==\",isnt:\"!=\",not:\"!\",yes:\"true\",no:\"false\",on:\"true\",off:\"false\"},i=function(){var e;for(ke in e=[],d)e.push(ke);return e}(),c=c.concat(i),q=[\"case\",\"function\",\"var\",\"void\",\"with\",\"const\",\"let\",\"enum\",\"native\",\"implements\",\"interface\",\"package\",\"private\",\"protected\",\"public\",\"static\"],Z=[\"arguments\",\"eval\"],e.JS_FORBIDDEN=R.concat(q).concat(Z),n=65279,D=/^(?!\\d)((?:(?!\\s)[$\\w\\x7f-\\uffff])+)([^\\n\\S]*:(?!:))?/,y=/^(?![\\d<])((?:(?!\\s)[\\.\\-$\\w\\x7f-\\uffff])+)/,f=/^()>/,g=/^(?!\\d)((?:(?!\\s)[\\-$\\w\\x7f-\\uffff])+)([^\\S]*=(?!=))?/,U=/^0b[01]+|^0o[0-7]+|^0x[\\da-f]+|^\\d*\\.?\\d+(?:e[+-]?\\d+)?/i,V=/^(?:[-=]>|[-+*\\/%<>&|^!?=]=|>>>=?|([-+:])\\1|([&|<>*\\/%])\\2=?|\\?(\\.|::)|\\.{2,3})/,pe=/^[^\\n\\S]+/,p=/^\\s*###([^#][\\s\\S]*?)(?:###[^\\n\\S]*|###$)|^(?:\\s*#(?!##[^#]).*)+/,s=/^[-=]>/,j=/^(?:\\n[^\\n\\S]*)+/,A=/^`(?!``)((?:[^`\\\\]|\\\\[\\s\\S])*)`/,C=/^```((?:[^`\\\\]|\\\\[\\s\\S]|`(?!``))*)```/,oe=/^(?:'''|\"\"\"|'|\")/,te=/^(?:[^\\\\']|\\\\[\\s\\S])*/,Q=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\\#(?!\\{))*/,b=/^(?:[^\\\\']|\\\\[\\s\\S]|'(?!''))*/,N=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\"(?!\"\")|\\#(?!\\{))*/,I=/^(?:[^\\{<])*/,k=/^(?:\\{|<(?!\\/))/,ae=/((?:\\\\\\\\)+)|\\\\[^\\S\\n]*\\n\\s*/g,K=/\\s*\\n\\s*/g,v=/\\n+([^\\n\\S]*)(?=\\S)/g,G=/^\\/(?!\\/)((?:[^[\\/\\n\\\\]|\\\\[^\\n]|\\[(?:\\\\[^\\n]|[^\\]\\n\\\\])*\\])*)(\\/)?/,H=/^\\w*/,ce=/^(?!.*(.).*\\1)[imguy]*$/,$=/^(?:[^\\\\\\/#\\s]|\\\\[\\s\\S]|\\/(?!\\/\\/)|\\#(?!\\{)|\\s+(?:#(?!\\{).*)?)*/,_=/((?:\\\\\\\\)+)|\\\\(\\s)|\\s+(?:#.*)?/g,W=/^(\\/|\\/{3}\\s*)(\\*)/,B=/^\\/=?\\s/,T=/\\*\\//,F=/^\\s*(?:,|\\??\\.(?![.\\d])|::)/,ee=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7]|[1-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,X=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,de=/(\\\\\\\\)|\\\\u\\{([\\da-fA-F]+)\\}/g,O=/^[^\\n\\S]*\\n/,ne=/\\n[^\\n\\S]*$/,re=/\\s+$/,h=[\"-=\",\"+=\",\"/=\",\"*=\",\"%=\",\"||=\",\"&&=\",\"?=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"^=\",\"|=\",\"**=\",\"//=\",\"%%=\"],le=[\"NEW\",\"TYPEOF\",\"DELETE\",\"DO\"],se=[\"!\",\"~\"],J=[\"<<\",\">>\",\">>>\"],m=[\"==\",\"!=\",\"<\",\">\",\"<=\",\">=\"],P=[\"*\",\"/\",\"%\",\"//\",\"%%\"],Y=[\"IN\",\"OF\",\"INSTANCEOF\"],r=[\"TRUE\",\"FALSE\"],l=[\"IDENTIFIER\",\"PROPERTY\",\")\",\"]\",\"?\",\"@\",\"THIS\",\"SUPER\"],x=l.concat([\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_END\",\"REGEX\",\"REGEX_END\",\"BOOL\",\"NULL\",\"UNDEFINED\",\"}\",\"::\"]),u=[\"IDENTIFIER\",\")\",\"]\",\"NUMBER\"],M=x.concat([\"++\",\"--\"]),L=[\"INDENT\",\"OUTDENT\",\"TERMINATOR\"],E=[\")\",\"}\",\"]\"],ie=[\"\\\\\",\".\",\"?.\",\"?::\",\"UNARY\",\"MATH\",\"UNARY_MATH\",\"+\",\"-\",\"**\",\"SHIFT\",\"RELATION\",\"COMPARE\",\"&\",\"^\",\"|\",\"&&\",\"||\",\"BIN?\",\"EXTENDS\"]}.call(this),{exports:e}.exports}(),require[\"./parser\"]=function(){var e={},a={exports:e},t=function(){function e(){this.yy={}}var a=function(e,a,t,o){for(t=t||{},o=e.length;o--;t[e[o]]=a);return t},t=[1,24],o=[1,56],n=[1,91],r=[1,92],l=[1,87],s=[1,93],i=[1,94],d=[1,89],c=[1,90],p=[1,64],u=[1,66],m=[1,67],h=[1,68],g=[1,69],f=[1,70],y=[1,72],k=[1,73],T=[1,58],N=[1,42],v=[1,36],b=[1,76],$=[1,77],_=[1,86],C=[1,54],D=[1,59],E=[1,60],x=[1,74],I=[1,75],S=[1,47],A=[1,55],R=[1,71],O=[1,81],L=[1,82],F=[1,83],w=[1,84],P=[1,53],j=[1,80],M=[1,38],U=[1,39],V=[1,40],B=[1,41],G=[1,43],H=[1,44],W=[1,95],X=[1,6,36,47,146],Y=[1,6,35,36,47,69,70,93,127,135,146,149,157],q=[1,113],z=[1,114],J=[1,115],K=[1,110],Z=[1,98],Q=[1,97],ee=[1,96],ae=[1,99],te=[1,100],oe=[1,101],ne=[1,102],re=[1,103],le=[1,104],se=[1,105],ie=[1,106],de=[1,107],ce=[1,108],pe=[1,109],ue=[1,117],me=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],he=[2,196],ge=[1,123],fe=[1,128],ye=[1,124],ke=[1,125],Te=[1,126],Ne=[1,129],ve=[1,122],be=[1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174],$e=[1,6,35,36,45,46,47,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],_e=[2,122],Ce=[2,126],De=[6,35,88,93],Ee=[2,99],xe=[1,141],Ie=[1,135],Se=[1,140],Ae=[1,144],Re=[1,149],Oe=[1,147],Le=[1,151],Fe=[1,155],we=[1,153],Pe=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],je=[2,119],Me=[1,6,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Ue=[2,31],Ve=[1,183],Be=[2,86],Ge=[1,187],He=[1,193],We=[1,208],Xe=[1,203],Ye=[1,212],qe=[1,209],ze=[1,214],Je=[1,215],Ke=[1,217],Ze=[14,32,35,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Qe=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],ea=[1,228],aa=[2,142],ta=[1,250],oa=[1,245],na=[1,256],ra=[1,6,35,36,45,46,47,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],la=[1,6,33,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,117,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],sa=[1,6,35,36,45,46,47,52,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],ia=[1,286],da=[45,46,126],ca=[1,297],pa=[1,296],ua=[6,35],ma=[2,97],ha=[1,303],ga=[6,35,36,88,93],fa=[6,35,36,61,70,88,93],ya=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],ka=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,184,185,186,187,188,189,190,191,192,193],Ta=[2,347],Na=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,185,186,187,188,189,190,191,192,193],va=[45,46,80,81,101,102,103,105,125,126],ba=[1,330],$a=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174],_a=[2,84],Ca=[1,346],Da=[1,348],Ea=[1,353],xa=[1,355],Ia=[6,35,69,93],Sa=[2,221],Aa=[2,222],Ra=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Oa=[1,369],La=[6,14,32,35,36,38,39,43,45,46,49,50,54,55,56,57,58,59,68,69,70,77,84,85,86,90,91,93,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Fa=[6,35,36,69,93],wa=[6,35,36,69,93,127],Pa=[1,6,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],ja=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,157,174],Ma=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,149,157,174],Ua=[2,273],Va=[164,165,166],Ba=[93,164,165,166],Ga=[6,35,109],Ha=[1,393],Wa=[6,35,36,93,109],Xa=[6,35,36,65,93,109],Ya=[1,399],qa=[1,400],za=[6,35,36,61,65,70,80,81,93,109,126],Ja=[6,35,36,70,80,81,93,109,126],Ka=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,185,186,187,188,189,190,191,192,193],Za=[2,339],Qa=[2,338],et=[1,6,35,36,45,46,47,52,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],at=[1,422],tt=[14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,83,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ot=[2,207],nt=[6,35,36],rt=[2,98],lt=[1,431],st=[1,432],it=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,142,143,146,148,149,150,156,157,169,171,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],dt=[1,312],ct=[36,169,171],pt=[1,6,36,47,69,70,83,88,93,109,127,135,146,149,157,174],ut=[1,467],mt=[1,473],ht=[1,6,35,36,47,69,70,93,127,135,146,149,157,174],gt=[2,113],ft=[1,486],yt=[1,487],kt=[6,35,36,69],Tt=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,169,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Nt=[1,6,35,36,47,69,70,93,127,135,146,149,157,169],vt=[2,286],bt=[2,287],$t=[2,302],_t=[1,510],Ct=[1,511],Dt=[6,35,36,109],Et=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,157,174],xt=[1,532],It=[6,35,36,93,127],St=[6,35,36,93],At=[1,6,35,36,47,69,70,83,88,93,109,127,135,142,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Rt=[35,93],Ot=[1,560],Lt=[1,561],Ft=[1,567],wt=[1,568],Pt=[2,258],jt=[2,261],Mt=[2,274],Ut=[1,617],Vt=[1,618],Bt=[2,288],Gt=[2,292],Ht=[2,289],Wt=[2,293],Xt=[2,290],Yt=[2,291],qt=[2,303],zt=[2,304],Jt=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174],Kt=[2,294],Zt=[2,296],Qt=[2,298],eo=[2,300],ao=[2,295],to=[2,297],oo=[2,299],no=[2,301],ro={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Line:5,TERMINATOR:6,Expression:7,ExpressionLine:8,Statement:9,FuncDirective:10,YieldReturn:11,AwaitReturn:12,Return:13,STATEMENT:14,Import:15,Export:16,Value:17,Code:18,Operation:19,Assign:20,If:21,Try:22,While:23,For:24,Switch:25,Class:26,Throw:27,Yield:28,CodeLine:29,IfLine:30,OperationLine:31,YIELD:32,FROM:33,Block:34,INDENT:35,OUTDENT:36,Identifier:37,IDENTIFIER:38,CSX_TAG:39,Property:40,PROPERTY:41,AlphaNumeric:42,NUMBER:43,String:44,STRING:45,STRING_START:46,STRING_END:47,Regex:48,REGEX:49,REGEX_START:50,Invocation:51,REGEX_END:52,Literal:53,JS:54,UNDEFINED:55,NULL:56,BOOL:57,INFINITY:58,NAN:59,Assignable:60,\"=\":61,AssignObj:62,ObjAssignable:63,ObjRestValue:64,\":\":65,SimpleObjAssignable:66,ThisProperty:67,\"[\":68,\"]\":69,\"...\":70,ObjSpreadExpr:71,ObjSpreadIdentifier:72,Object:73,Parenthetical:74,Super:75,This:76,SUPER:77,Arguments:78,ObjSpreadAccessor:79,\".\":80,INDEX_START:81,IndexValue:82,INDEX_END:83,RETURN:84,AWAIT:85,PARAM_START:86,ParamList:87,PARAM_END:88,FuncGlyph:89,\"->\":90,\"=>\":91,OptComma:92,\",\":93,Param:94,ParamVar:95,Array:96,Splat:97,SimpleAssignable:98,Accessor:99,Range:100,\"?.\":101,\"::\":102,\"?::\":103,Index:104,INDEX_SOAK:105,Slice:106,\"{\":107,AssignList:108,\"}\":109,CLASS:110,EXTENDS:111,IMPORT:112,ImportDefaultSpecifier:113,ImportNamespaceSpecifier:114,ImportSpecifierList:115,ImportSpecifier:116,AS:117,DEFAULT:118,IMPORT_ALL:119,EXPORT:120,ExportSpecifierList:121,EXPORT_ALL:122,ExportSpecifier:123,OptFuncExist:124,FUNC_EXIST:125,CALL_START:126,CALL_END:127,ArgList:128,THIS:129,\"@\":130,Elisions:131,ArgElisionList:132,OptElisions:133,RangeDots:134,\"..\":135,Arg:136,ArgElision:137,Elision:138,SimpleArgs:139,TRY:140,Catch:141,FINALLY:142,CATCH:143,THROW:144,\"(\":145,\")\":146,WhileLineSource:147,WHILE:148,WHEN:149,UNTIL:150,WhileSource:151,Loop:152,LOOP:153,ForBody:154,ForLineBody:155,FOR:156,BY:157,ForStart:158,ForSource:159,ForLineSource:160,ForVariables:161,OWN:162,ForValue:163,FORIN:164,FOROF:165,FORFROM:166,SWITCH:167,Whens:168,ELSE:169,When:170,LEADING_WHEN:171,IfBlock:172,IF:173,POST_IF:174,IfBlockLine:175,UNARY:176,UNARY_MATH:177,\"-\":178,\"+\":179,\"--\":180,\"++\":181,\"?\":182,MATH:183,\"**\":184,SHIFT:185,COMPARE:186,\"&\":187,\"^\":188,\"|\":189,\"&&\":190,\"||\":191,\"BIN?\":192,RELATION:193,COMPOUND_ASSIGN:194,$accept:0,$end:1},terminals_:{2:\"error\",6:\"TERMINATOR\",14:\"STATEMENT\",32:\"YIELD\",33:\"FROM\",35:\"INDENT\",36:\"OUTDENT\",38:\"IDENTIFIER\",39:\"CSX_TAG\",41:\"PROPERTY\",43:\"NUMBER\",45:\"STRING\",46:\"STRING_START\",47:\"STRING_END\",49:\"REGEX\",50:\"REGEX_START\",52:\"REGEX_END\",54:\"JS\",55:\"UNDEFINED\",56:\"NULL\",57:\"BOOL\",58:\"INFINITY\",59:\"NAN\",61:\"=\",65:\":\",68:\"[\",69:\"]\",70:\"...\",77:\"SUPER\",80:\".\",81:\"INDEX_START\",83:\"INDEX_END\",84:\"RETURN\",85:\"AWAIT\",86:\"PARAM_START\",88:\"PARAM_END\",90:\"->\",91:\"=>\",93:\",\",101:\"?.\",102:\"::\",103:\"?::\",105:\"INDEX_SOAK\",107:\"{\",109:\"}\",110:\"CLASS\",111:\"EXTENDS\",112:\"IMPORT\",117:\"AS\",118:\"DEFAULT\",119:\"IMPORT_ALL\",120:\"EXPORT\",122:\"EXPORT_ALL\",125:\"FUNC_EXIST\",126:\"CALL_START\",127:\"CALL_END\",129:\"THIS\",130:\"@\",135:\"..\",140:\"TRY\",142:\"FINALLY\",143:\"CATCH\",144:\"THROW\",145:\"(\",146:\")\",148:\"WHILE\",149:\"WHEN\",150:\"UNTIL\",153:\"LOOP\",156:\"FOR\",157:\"BY\",162:\"OWN\",164:\"FORIN\",165:\"FOROF\",166:\"FORFROM\",167:\"SWITCH\",169:\"ELSE\",171:\"LEADING_WHEN\",173:\"IF\",174:\"POST_IF\",176:\"UNARY\",177:\"UNARY_MATH\",178:\"-\",179:\"+\",180:\"--\",181:\"++\",182:\"?\",183:\"MATH\",184:\"**\",185:\"SHIFT\",186:\"COMPARE\",187:\"&\",188:\"^\",189:\"|\",190:\"&&\",191:\"||\",192:\"BIN?\",193:\"RELATION\",194:\"COMPOUND_ASSIGN\"},productions_:[0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[5,1],[5,1],[10,1],[10,1],[9,1],[9,1],[9,1],[9,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[8,1],[8,1],[8,1],[28,1],[28,2],[28,3],[34,2],[34,3],[37,1],[37,1],[40,1],[42,1],[42,1],[44,1],[44,3],[48,1],[48,3],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[20,3],[20,4],[20,5],[62,1],[62,1],[62,3],[62,5],[62,3],[62,5],[66,1],[66,1],[66,1],[66,3],[63,1],[63,1],[64,2],[64,2],[64,2],[64,2],[71,1],[71,1],[71,1],[71,1],[71,1],[71,2],[71,2],[71,2],[72,2],[72,2],[79,2],[79,3],[13,2],[13,4],[13,1],[11,3],[11,2],[12,3],[12,2],[18,5],[18,2],[29,5],[29,2],[89,1],[89,1],[92,0],[92,1],[87,0],[87,1],[87,3],[87,4],[87,6],[94,1],[94,2],[94,2],[94,3],[94,1],[95,1],[95,1],[95,1],[95,1],[97,2],[97,2],[98,1],[98,2],[98,2],[98,1],[60,1],[60,1],[60,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[75,3],[75,4],[99,2],[99,2],[99,2],[99,2],[99,1],[99,1],[104,3],[104,2],[82,1],[82,1],[73,4],[108,0],[108,1],[108,3],[108,4],[108,6],[26,1],[26,2],[26,3],[26,4],[26,2],[26,3],[26,4],[26,5],[15,2],[15,4],[15,4],[15,5],[15,7],[15,6],[15,9],[115,1],[115,3],[115,4],[115,4],[115,6],[116,1],[116,3],[116,1],[116,3],[113,1],[114,3],[16,3],[16,5],[16,2],[16,4],[16,5],[16,6],[16,3],[16,5],[16,4],[16,7],[121,1],[121,3],[121,4],[121,4],[121,6],[123,1],[123,3],[123,3],[123,1],[123,3],[51,3],[51,3],[51,3],[124,0],[124,1],[78,2],[78,4],[76,1],[76,1],[67,2],[96,2],[96,3],[96,4],[134,1],[134,1],[100,5],[100,5],[106,3],[106,2],[106,3],[106,2],[106,2],[106,1],[128,1],[128,3],[128,4],[128,4],[128,6],[136,1],[136,1],[136,1],[136,1],[132,1],[132,3],[132,4],[132,4],[132,6],[137,1],[137,2],[133,1],[133,2],[131,1],[131,2],[138,1],[139,1],[139,1],[139,3],[139,3],[22,2],[22,3],[22,4],[22,5],[141,3],[141,3],[141,2],[27,2],[27,4],[74,3],[74,5],[147,2],[147,4],[147,2],[147,4],[151,2],[151,4],[151,4],[151,2],[151,4],[151,4],[23,2],[23,2],[23,2],[23,2],[23,1],[152,2],[152,2],[24,2],[24,2],[24,2],[24,2],[154,2],[154,4],[154,2],[155,4],[155,2],[158,2],[158,3],[163,1],[163,1],[163,1],[163,1],[161,1],[161,3],[159,2],[159,2],[159,4],[159,4],[159,4],[159,4],[159,4],[159,4],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,2],[159,4],[159,4],[160,2],[160,2],[160,4],[160,4],[160,4],[160,4],[160,4],[160,4],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,2],[160,4],[160,4],[25,5],[25,5],[25,7],[25,7],[25,4],[25,6],[168,1],[168,2],[170,3],[170,4],[172,3],[172,5],[21,1],[21,3],[21,3],[21,3],[175,3],[175,5],[30,1],[30,3],[30,3],[30,3],[31,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,5],[19,4]],performAction:function(e,a,t,o,n,r,l){var s=r.length-1;switch(n){case 1:return this.$=o.addDataToNode(o,l[s],l[s])(new o.Block);break;case 2:return this.$=r[s];break;case 3:this.$=o.addDataToNode(o,l[s],l[s])(o.Block.wrap([r[s]]));break;case 4:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-2].push(r[s]));break;case 5:this.$=r[s-1];break;case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 40:case 45:case 47:case 57:case 62:case 63:case 64:case 66:case 67:case 72:case 73:case 74:case 75:case 76:case 97:case 98:case 109:case 110:case 111:case 112:case 118:case 119:case 122:case 127:case 136:case 221:case 222:case 223:case 225:case 237:case 238:case 280:case 281:case 330:case 336:case 342:this.$=r[s];break;case 13:this.$=o.addDataToNode(o,l[s],l[s])(new o.StatementLiteral(r[s]));break;case 31:this.$=o.addDataToNode(o,l[s],l[s])(new o.Op(r[s],new o.Value(new o.Literal(\"\"))));break;case 32:case 346:case 347:case 348:case 351:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(r[s-1],r[s]));break;case 33:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(r[s-2].concat(r[s-1]),r[s]));break;case 34:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Block);break;case 35:case 83:case 137:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-1]);break;case 36:this.$=o.addDataToNode(o,l[s],l[s])(new o.IdentifierLiteral(r[s]));break;case 37:this.$=o.addDataToNode(o,l[s],l[s])(new o.CSXTag(r[s]));break;case 38:this.$=o.addDataToNode(o,l[s],l[s])(new o.PropertyName(r[s]));break;case 39:this.$=o.addDataToNode(o,l[s],l[s])(new o.NumberLiteral(r[s]));break;case 41:this.$=o.addDataToNode(o,l[s],l[s])(new o.StringLiteral(r[s]));break;case 42:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.StringWithInterpolations(r[s-1]));break;case 43:this.$=o.addDataToNode(o,l[s],l[s])(new o.RegexLiteral(r[s]));break;case 44:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.RegexWithInterpolations(r[s-1].args));break;case 46:this.$=o.addDataToNode(o,l[s],l[s])(new o.PassthroughLiteral(r[s]));break;case 48:this.$=o.addDataToNode(o,l[s],l[s])(new o.UndefinedLiteral(r[s]));break;case 49:this.$=o.addDataToNode(o,l[s],l[s])(new o.NullLiteral(r[s]));break;case 50:this.$=o.addDataToNode(o,l[s],l[s])(new o.BooleanLiteral(r[s]));break;case 51:this.$=o.addDataToNode(o,l[s],l[s])(new o.InfinityLiteral(r[s]));break;case 52:this.$=o.addDataToNode(o,l[s],l[s])(new o.NaNLiteral(r[s]));break;case 53:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(r[s-2],r[s]));break;case 54:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Assign(r[s-3],r[s]));break;case 55:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(r[s-4],r[s-1]));break;case 56:case 115:case 120:case 121:case 123:case 124:case 125:case 126:case 128:case 282:case 283:this.$=o.addDataToNode(o,l[s],l[s])(new o.Value(r[s]));break;case 58:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(o.addDataToNode(o,l[s-2])(new o.Value(r[s-2])),r[s],\"object\",{operatorToken:o.addDataToNode(o,l[s-1])(new o.Literal(r[s-1]))}));break;case 59:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(o.addDataToNode(o,l[s-4])(new o.Value(r[s-4])),r[s-1],\"object\",{operatorToken:o.addDataToNode(o,l[s-3])(new o.Literal(r[s-3]))}));break;case 60:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(o.addDataToNode(o,l[s-2])(new o.Value(r[s-2])),r[s],null,{operatorToken:o.addDataToNode(o,l[s-1])(new o.Literal(r[s-1]))}));break;case 61:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(o.addDataToNode(o,l[s-4])(new o.Value(r[s-4])),r[s-1],null,{operatorToken:o.addDataToNode(o,l[s-3])(new o.Literal(r[s-3]))}));break;case 65:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Value(new o.ComputedPropertyName(r[s-1])));break;case 68:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(new o.Value(r[s-1])));break;case 69:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(new o.Value(r[s])));break;case 70:case 113:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(r[s-1]));break;case 71:case 114:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(r[s]));break;case 77:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.SuperCall(o.addDataToNode(o,l[s-1])(new o.Super),r[s],!1,r[s-1]));break;case 78:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Call(new o.Value(r[s-1]),r[s]));break;case 79:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Call(r[s-1],r[s]));break;case 80:case 81:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Value(r[s-1]).add(r[s]));break;case 82:case 131:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Access(r[s]));break;case 84:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Return(r[s]));break;case 85:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Return(new o.Value(r[s-1])));break;case 86:this.$=o.addDataToNode(o,l[s],l[s])(new o.Return);break;case 87:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.YieldReturn(r[s]));break;case 88:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.YieldReturn);break;case 89:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.AwaitReturn(r[s]));break;case 90:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.AwaitReturn);break;case 91:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Code(r[s-3],r[s],r[s-1],o.addDataToNode(o,l[s-4])(new o.Literal(r[s-4]))));break;case 92:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Code([],r[s],r[s-1]));break;case 93:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Code(r[s-3],o.addDataToNode(o,l[s])(o.Block.wrap([r[s]])),r[s-1],o.addDataToNode(o,l[s-4])(new o.Literal(r[s-4]))));break;case 94:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Code([],o.addDataToNode(o,l[s])(o.Block.wrap([r[s]])),r[s-1]));break;case 95:case 96:this.$=o.addDataToNode(o,l[s],l[s])(new o.FuncGlyph(r[s]));break;case 99:case 142:case 232:this.$=o.addDataToNode(o,l[s],l[s])([]);break;case 100:case 143:case 162:case 183:case 216:case 230:case 234:case 284:this.$=o.addDataToNode(o,l[s],l[s])([r[s]]);break;case 101:case 144:case 163:case 184:case 217:case 226:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-2].concat(r[s]));break;case 102:case 145:case 164:case 185:case 218:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-3].concat(r[s]));break;case 103:case 146:case 166:case 187:case 220:this.$=o.addDataToNode(o,l[s-5],l[s])(r[s-5].concat(r[s-2]));break;case 104:this.$=o.addDataToNode(o,l[s],l[s])(new o.Param(r[s]));break;case 105:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Param(r[s-1],null,!0));break;case 106:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Param(r[s],null,!0));break;case 107:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Param(r[s-2],r[s]));break;case 108:case 224:this.$=o.addDataToNode(o,l[s],l[s])(new o.Expansion);break;case 116:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s-1].add(r[s]));break;case 117:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Value(r[s-1]).add(r[s]));break;case 129:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Super(o.addDataToNode(o,l[s])(new o.Access(r[s])),[],!1,r[s-2]));break;case 130:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Super(o.addDataToNode(o,l[s-1])(new o.Index(r[s-1])),[],!1,r[s-3]));break;case 132:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Access(r[s],\"soak\"));break;case 133:this.$=o.addDataToNode(o,l[s-1],l[s])([o.addDataToNode(o,l[s-1])(new o.Access(new o.PropertyName(\"prototype\"))),o.addDataToNode(o,l[s])(new o.Access(r[s]))]);break;case 134:this.$=o.addDataToNode(o,l[s-1],l[s])([o.addDataToNode(o,l[s-1])(new o.Access(new o.PropertyName(\"prototype\"),\"soak\")),o.addDataToNode(o,l[s])(new o.Access(r[s]))]);break;case 135:this.$=o.addDataToNode(o,l[s],l[s])(new o.Access(new o.PropertyName(\"prototype\")));break;case 138:this.$=o.addDataToNode(o,l[s-1],l[s])(o.extend(r[s],{soak:!0}));break;case 139:this.$=o.addDataToNode(o,l[s],l[s])(new o.Index(r[s]));break;case 140:this.$=o.addDataToNode(o,l[s],l[s])(new o.Slice(r[s]));break;case 141:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Obj(r[s-2],r[s-3].generated));break;case 147:this.$=o.addDataToNode(o,l[s],l[s])(new o.Class);break;case 148:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Class(null,null,r[s]));break;case 149:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Class(null,r[s]));break;case 150:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Class(null,r[s-1],r[s]));break;case 151:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Class(r[s]));break;case 152:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Class(r[s-1],null,r[s]));break;case 153:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Class(r[s-2],r[s]));break;case 154:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Class(r[s-3],r[s-1],r[s]));break;case 155:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.ImportDeclaration(null,r[s]));break;case 156:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ImportDeclaration(new o.ImportClause(r[s-2],null),r[s]));break;case 157:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ImportDeclaration(new o.ImportClause(null,r[s-2]),r[s]));break;case 158:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ImportDeclaration(new o.ImportClause(null,new o.ImportSpecifierList([])),r[s]));break;case 159:this.$=o.addDataToNode(o,l[s-6],l[s])(new o.ImportDeclaration(new o.ImportClause(null,new o.ImportSpecifierList(r[s-4])),r[s]));break;case 160:this.$=o.addDataToNode(o,l[s-5],l[s])(new o.ImportDeclaration(new o.ImportClause(r[s-4],r[s-2]),r[s]));break;case 161:this.$=o.addDataToNode(o,l[s-8],l[s])(new o.ImportDeclaration(new o.ImportClause(r[s-7],new o.ImportSpecifierList(r[s-4])),r[s]));break;case 165:case 186:case 199:case 219:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-2]);break;case 167:this.$=o.addDataToNode(o,l[s],l[s])(new o.ImportSpecifier(r[s]));break;case 168:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ImportSpecifier(r[s-2],r[s]));break;case 169:this.$=o.addDataToNode(o,l[s],l[s])(new o.ImportSpecifier(new o.Literal(r[s])));break;case 170:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ImportSpecifier(new o.Literal(r[s-2]),r[s]));break;case 171:this.$=o.addDataToNode(o,l[s],l[s])(new o.ImportDefaultSpecifier(r[s]));break;case 172:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ImportNamespaceSpecifier(new o.Literal(r[s-2]),r[s]));break;case 173:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportNamedDeclaration(new o.ExportSpecifierList([])));break;case 174:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ExportNamedDeclaration(new o.ExportSpecifierList(r[s-2])));break;case 175:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.ExportNamedDeclaration(r[s]));break;case 176:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ExportNamedDeclaration(new o.Assign(r[s-2],r[s],null,{moduleDeclaration:\"export\"})));break;case 177:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ExportNamedDeclaration(new o.Assign(r[s-3],r[s],null,{moduleDeclaration:\"export\"})));break;case 178:this.$=o.addDataToNode(o,l[s-5],l[s])(new o.ExportNamedDeclaration(new o.Assign(r[s-4],r[s-1],null,{moduleDeclaration:\"export\"})));break;case 179:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportDefaultDeclaration(r[s]));break;case 180:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ExportDefaultDeclaration(new o.Value(r[s-1])));break;case 181:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ExportAllDeclaration(new o.Literal(r[s-2]),r[s]));break;case 182:this.$=o.addDataToNode(o,l[s-6],l[s])(new o.ExportNamedDeclaration(new o.ExportSpecifierList(r[s-4]),r[s]));break;case 188:this.$=o.addDataToNode(o,l[s],l[s])(new o.ExportSpecifier(r[s]));break;case 189:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportSpecifier(r[s-2],r[s]));break;case 190:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportSpecifier(r[s-2],new o.Literal(r[s])));break;case 191:this.$=o.addDataToNode(o,l[s],l[s])(new o.ExportSpecifier(new o.Literal(r[s])));break;case 192:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportSpecifier(new o.Literal(r[s-2]),r[s]));break;case 193:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.TaggedTemplateCall(r[s-2],r[s],r[s-1]));break;case 194:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Call(r[s-2],r[s],r[s-1]));break;case 195:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.SuperCall(o.addDataToNode(o,l[s-2])(new o.Super),r[s],r[s-1],r[s-2]));break;case 196:this.$=o.addDataToNode(o,l[s],l[s])(!1);break;case 197:this.$=o.addDataToNode(o,l[s],l[s])(!0);break;case 198:this.$=o.addDataToNode(o,l[s-1],l[s])([]);break;case 200:case 201:this.$=o.addDataToNode(o,l[s],l[s])(new o.Value(new o.ThisLiteral(r[s])));break;case 202:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Value(o.addDataToNode(o,l[s-1])(new o.ThisLiteral(r[s-1])),[o.addDataToNode(o,l[s])(new o.Access(r[s]))],\"this\"));break;case 203:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Arr([]));break;case 204:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Arr(r[s-1]));break;case 205:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Arr([].concat(r[s-2],r[s-1])));break;case 206:this.$=o.addDataToNode(o,l[s],l[s])(\"inclusive\");break;case 207:this.$=o.addDataToNode(o,l[s],l[s])(\"exclusive\");break;case 208:case 209:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Range(r[s-3],r[s-1],r[s-2]));break;case 210:case 212:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Range(r[s-2],r[s],r[s-1]));break;case 211:case 213:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Range(r[s-1],null,r[s]));break;case 214:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Range(null,r[s],r[s-1]));break;case 215:this.$=o.addDataToNode(o,l[s],l[s])(new o.Range(null,null,r[s]));break;case 227:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-3].concat(r[s-2],r[s]));break;case 228:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-2].concat(r[s-1]));break;case 229:this.$=o.addDataToNode(o,l[s-5],l[s])(r[s-5].concat(r[s-4],r[s-2],r[s-1]));break;case 231:case 235:case 331:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s-1].concat(r[s]));break;case 233:this.$=o.addDataToNode(o,l[s-1],l[s])([].concat(r[s]));break;case 236:this.$=o.addDataToNode(o,l[s],l[s])(new o.Elision);break;case 239:case 240:this.$=o.addDataToNode(o,l[s-2],l[s])([].concat(r[s-2],r[s]));break;case 241:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Try(r[s]));break;case 242:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Try(r[s-1],r[s][0],r[s][1]));break;case 243:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Try(r[s-2],null,null,r[s]));break;case 244:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Try(r[s-3],r[s-2][0],r[s-2][1],r[s]));break;case 245:this.$=o.addDataToNode(o,l[s-2],l[s])([r[s-1],r[s]]);break;case 246:this.$=o.addDataToNode(o,l[s-2],l[s])([o.addDataToNode(o,l[s-1])(new o.Value(r[s-1])),r[s]]);break;case 247:this.$=o.addDataToNode(o,l[s-1],l[s])([null,r[s]]);break;case 248:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Throw(r[s]));break;case 249:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Throw(new o.Value(r[s-1])));break;case 250:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Parens(r[s-1]));break;case 251:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Parens(r[s-2]));break;case 252:case 256:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(r[s]));break;case 253:case 257:case 258:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.While(r[s-2],{guard:r[s]}));break;case 254:case 259:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(r[s],{invert:!0}));break;case 255:case 260:case 261:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.While(r[s-2],{invert:!0,guard:r[s]}));break;case 262:case 263:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s-1].addBody(r[s]));break;case 264:case 265:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s].addBody(o.addDataToNode(o,l[s-1])(o.Block.wrap([r[s-1]]))));break;case 266:this.$=o.addDataToNode(o,l[s],l[s])(r[s]);break;case 267:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(o.addDataToNode(o,l[s-1])(new o.BooleanLiteral(\"true\"))).addBody(r[s]));break;case 268:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(o.addDataToNode(o,l[s-1])(new o.BooleanLiteral(\"true\"))).addBody(o.addDataToNode(o,l[s])(o.Block.wrap([r[s]]))));break;case 269:case 270:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.For(r[s-1],r[s]));break;case 271:case 272:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.For(r[s],r[s-1]));break;case 273:this.$=o.addDataToNode(o,l[s-1],l[s])({source:o.addDataToNode(o,l[s])(new o.Value(r[s]))});break;case 274:case 276:this.$=o.addDataToNode(o,l[s-3],l[s])({source:o.addDataToNode(o,l[s-2])(new o.Value(r[s-2])),step:r[s]});break;case 275:case 277:this.$=o.addDataToNode(o,l[s-1],l[s])(function(){return r[s].own=r[s-1].own,r[s].ownTag=r[s-1].ownTag,r[s].name=r[s-1][0],r[s].index=r[s-1][1],r[s]}());break;case 278:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s]);break;case 279:this.$=o.addDataToNode(o,l[s-2],l[s])(function(){return r[s].own=!0,r[s].ownTag=o.addDataToNode(o,l[s-1])(new o.Literal(r[s-1])),r[s]}());break;case 285:this.$=o.addDataToNode(o,l[s-2],l[s])([r[s-2],r[s]]);break;case 286:case 305:this.$=o.addDataToNode(o,l[s-1],l[s])({source:r[s]});break;case 287:case 306:this.$=o.addDataToNode(o,l[s-1],l[s])({source:r[s],object:!0});break;case 288:case 289:case 307:case 308:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],guard:r[s]});break;case 290:case 291:case 309:case 310:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],guard:r[s],object:!0});break;case 292:case 293:case 311:case 312:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],step:r[s]});break;case 294:case 295:case 296:case 297:case 313:case 314:case 315:case 316:this.$=o.addDataToNode(o,l[s-5],l[s])({source:r[s-4],guard:r[s-2],step:r[s]});break;case 298:case 299:case 300:case 301:case 317:case 318:case 319:case 320:this.$=o.addDataToNode(o,l[s-5],l[s])({source:r[s-4],step:r[s-2],guard:r[s]});break;case 302:case 321:this.$=o.addDataToNode(o,l[s-1],l[s])({source:r[s],from:!0});break;case 303:case 304:case 322:case 323:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],guard:r[s],from:!0});break;case 324:case 325:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Switch(r[s-3],r[s-1]));break;case 326:case 327:this.$=o.addDataToNode(o,l[s-6],l[s])(new o.Switch(r[s-5],r[s-3],r[s-1]));break;case 328:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Switch(null,r[s-1]));break;case 329:this.$=o.addDataToNode(o,l[s-5],l[s])(new o.Switch(null,r[s-3],r[s-1]));break;case 332:this.$=o.addDataToNode(o,l[s-2],l[s])([[r[s-1],r[s]]]);break;case 333:this.$=o.addDataToNode(o,l[s-3],l[s])([[r[s-2],r[s-1]]]);break;case 334:case 340:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.If(r[s-1],r[s],{type:r[s-2]}));break;case 335:case 341:this.$=o.addDataToNode(o,l[s-4],l[s])(r[s-4].addElse(o.addDataToNode(o,l[s-2],l[s])(new o.If(r[s-1],r[s],{type:r[s-2]}))));break;case 337:case 343:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-2].addElse(r[s]));break;case 338:case 339:case 344:case 345:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.If(r[s],o.addDataToNode(o,l[s-2])(o.Block.wrap([r[s-2]])),{type:r[s-1],statement:!0}));break;case 349:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"-\",r[s]));break;case 350:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"+\",r[s]));break;case 352:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"--\",r[s]));break;case 353:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"++\",r[s]));break;case 354:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"--\",r[s-1],null,!0));break;case 355:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"++\",r[s-1],null,!0));break;case 356:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Existence(r[s-1]));break;case 357:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(\"+\",r[s-2],r[s]));break;case 358:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(\"-\",r[s-2],r[s]));break;case 359:case 360:case 361:case 362:case 363:case 364:case 365:case 366:case 367:case 368:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(r[s-1],r[s-2],r[s]));break;case 369:this.$=o.addDataToNode(o,l[s-2],l[s])(function(){return\"!\"===r[s-1].charAt(0)?new o.Op(r[s-1].slice(1),r[s-2],r[s]).invert():new o.Op(r[s-1],r[s-2],r[s])}());break;case 370:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(r[s-2],r[s],r[s-1]));break;case 371:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(r[s-4],r[s-1],r[s-3]));break;case 372:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Assign(r[s-3],r[s],r[s-2]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{1:[3]},{1:[2,2],6:W},a(X,[2,3]),a(Y,[2,6],{151:111,154:112,158:116,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,7]),a(Y,[2,8],{158:116,151:118,154:119,148:q,150:z,156:J,174:ue}),a(Y,[2,9]),a(me,[2,16],{124:120,99:121,104:127,45:he,46:he,126:he,80:ge,81:fe,101:ye,102:ke,103:Te,105:Ne,125:ve}),a(me,[2,17],{104:127,99:130,80:ge,81:fe,101:ye,102:ke,103:Te,105:Ne}),a(me,[2,18]),a(me,[2,19]),a(me,[2,20]),a(me,[2,21]),a(me,[2,22]),a(me,[2,23]),a(me,[2,24]),a(me,[2,25]),a(me,[2,26]),a(me,[2,27]),a(Y,[2,28]),a(Y,[2,29]),a(Y,[2,30]),a(be,[2,12]),a(be,[2,13]),a(be,[2,14]),a(be,[2,15]),a(Y,[2,10]),a(Y,[2,11]),a($e,_e,{61:[1,131]}),a($e,[2,123]),a($e,[2,124]),a($e,[2,125]),a($e,Ce),a($e,[2,127]),a($e,[2,128]),a(De,Ee,{87:132,94:133,95:134,37:136,67:137,96:138,73:139,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),{5:143,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,34:142,35:Ae,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:145,8:146,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:150,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:156,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:157,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:158,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:[1,159],85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{17:161,18:162,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:163,67:79,68:y,73:62,74:31,75:35,76:34,77:k,86:Le,89:152,90:b,91:$,96:61,98:160,100:32,107:_,129:x,130:I,145:R},{17:161,18:162,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:163,67:79,68:y,73:62,74:31,75:35,76:34,77:k,86:Le,89:152,90:b,91:$,96:61,98:164,100:32,107:_,129:x,130:I,145:R},a(Pe,je,{180:[1,165],181:[1,166],194:[1,167]}),a(me,[2,336],{169:[1,168]}),{34:169,35:Ae},{34:170,35:Ae},{34:171,35:Ae},a(me,[2,266]),{34:172,35:Ae},{34:173,35:Ae},{7:174,8:175,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:[1,176],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Me,[2,147],{53:30,74:31,100:32,51:33,76:34,75:35,96:61,73:62,42:63,48:65,37:78,67:79,44:88,89:152,17:161,18:162,60:163,34:177,98:179,35:Ae,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,86:Le,90:b,91:$,107:_,111:[1,178],129:x,130:I,145:R}),{7:180,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,181],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],Ue,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:t,32:Re,33:Ve,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:[1,184],85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),a(Y,[2,342],{169:[1,185]}),a([1,6,36,47,69,70,93,127,135,146,148,149,150,156,157,174],Be,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:186,14:t,32:Re,35:Ge,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),{37:192,38:n,39:r,44:188,45:s,46:i,107:[1,191],113:189,114:190,119:He},{26:195,37:196,38:n,39:r,107:[1,194],110:C,118:[1,197],122:[1,198]},a(Pe,[2,120]),a(Pe,[2,121]),a($e,[2,45]),a($e,[2,46]),a($e,[2,47]),a($e,[2,48]),a($e,[2,49]),a($e,[2,50]),a($e,[2,51]),a($e,[2,52]),{4:199,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,35:[1,200],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:201,8:202,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,69:Xe,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:204,132:205,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{80:ze,81:Je,124:213,125:ve,126:he},a($e,[2,200]),a($e,[2,201],{40:216,41:Ke}),a(Ze,[2,95]),a(Ze,[2,96]),a(Qe,[2,115]),a(Qe,[2,118]),{7:218,8:219,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:220,8:221,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:222,8:223,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:225,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,34:224,35:Ae,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{37:230,38:n,39:r,67:231,68:y,73:233,96:232,100:226,107:_,130:Se,161:227,162:ea,163:229},{159:234,160:235,164:[1,236],165:[1,237],166:[1,238]},a([6,35,93,109],aa,{44:88,108:239,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,38:n,39:r,41:Ke,43:l,45:s,46:i,68:ta,70:oa,77:na,107:_,129:x,130:I,145:R}),a(ra,[2,39]),a(ra,[2,40]),a($e,[2,43]),{17:161,18:162,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:257,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:163,67:79,68:y,73:62,74:31,75:35,76:34,77:k,86:Le,89:152,90:b,91:$,96:61,98:258,100:32,107:_,129:x,130:I,145:R},a(la,[2,36]),a(la,[2,37]),a(sa,[2,41]),{4:259,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(X,[2,5],{7:4,8:5,9:6,10:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,11:27,12:28,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,5:260,14:t,32:o,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:N,86:v,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),a(me,[2,356]),{7:261,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:262,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:263,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:264,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:265,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:266,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:267,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:268,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:269,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:270,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:271,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:272,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:273,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:274,8:275,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(me,[2,265]),a(me,[2,270]),{7:220,8:276,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:222,8:277,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{37:230,38:n,39:r,67:231,68:y,73:233,96:232,100:278,107:_,130:Se,161:227,162:ea,163:229},{159:234,164:[1,279],165:[1,280],166:[1,281]},{7:282,8:283,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(me,[2,264]),a(me,[2,269]),{44:284,45:s,46:i,78:285,126:ia},a(Qe,[2,116]),a(da,[2,197]),{40:287,41:Ke},{40:288,41:Ke},a(Qe,[2,135],{40:289,41:Ke}),{40:290,41:Ke},a(Qe,[2,136]),{7:292,8:294,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:ca,73:62,74:31,75:35,76:34,77:k,82:291,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,106:293,107:_,110:C,112:D,120:E,129:x,130:I,134:295,135:pa,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{81:fe,104:298,105:Ne},a(Qe,[2,117]),{6:[1,300],7:299,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,301],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ua,ma,{92:304,88:[1,302],93:ha}),a(ga,[2,100]),a(ga,[2,104],{61:[1,306],70:[1,305]}),a(ga,[2,108],{37:136,67:137,96:138,73:139,95:307,38:n,39:r,68:xe,107:_,130:Se}),a(fa,[2,109]),a(fa,[2,110]),a(fa,[2,111]),a(fa,[2,112]),{40:216,41:Ke},{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,69:Xe,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:204,132:205,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(ya,[2,92]),a(Y,[2,94]),{4:311,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,36:[1,310],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(ka,Ta,{151:111,154:112,158:116,182:ee}),a(Y,[2,346]),{7:158,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{148:q,150:z,151:118,154:119,156:J,158:116,174:ue},a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],Ue,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:t,32:Re,33:Ve,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),a(Na,[2,348],{151:111,154:112,158:116,182:ee,184:te}),a(De,Ee,{94:133,95:134,37:136,67:137,96:138,73:139,87:313,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),{34:142,35:Ae},{7:314,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{148:q,150:z,151:118,154:119,156:J,158:116,174:[1,315]},{7:316,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Na,[2,349],{151:111,154:112,158:116,182:ee,184:te}),a(Na,[2,350],{151:111,154:112,158:116,182:ee,184:te}),a(ka,[2,351],{151:111,154:112,158:116,182:ee}),a(Y,[2,90],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:317,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:Be,150:Be,156:Be,174:Be,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),a(me,[2,352],{45:je,46:je,80:je,81:je,101:je,102:je,103:je,105:je,125:je,126:je}),a(da,he,{124:120,99:121,104:127,80:ge,81:fe,101:ye,102:ke,103:Te,105:Ne,125:ve}),{80:ge,81:fe,99:130,101:ye,102:ke,103:Te,104:127,105:Ne},a(va,_e),a(me,[2,353],{45:je,46:je,80:je,81:je,101:je,102:je,103:je,105:je,125:je,126:je}),a(me,[2,354]),a(me,[2,355]),{6:[1,320],7:318,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,319],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{34:321,35:Ae,173:[1,322]},a(me,[2,241],{141:323,142:[1,324],143:[1,325]}),a(me,[2,262]),a(me,[2,263]),a(me,[2,271]),a(me,[2,272]),{35:[1,326],148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[1,327]},{168:328,170:329,171:ba},a(me,[2,148]),{7:331,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Me,[2,151],{34:332,35:Ae,45:je,46:je,80:je,81:je,101:je,102:je,103:je,105:je,125:je,126:je,111:[1,333]}),a($a,[2,248],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{73:334,107:_},a($a,[2,32],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:335,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([1,6,36,47,69,70,93,127,135,146,149,157],[2,88],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:336,14:t,32:Re,35:Ge,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:Be,150:Be,156:Be,174:Be,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),{34:337,35:Ae,173:[1,338]},a(be,_a,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{73:339,107:_},a(be,[2,155]),{33:[1,340],93:[1,341]},{33:[1,342]},{35:Ca,37:347,38:n,39:r,109:[1,343],115:344,116:345,118:Da},a([33,93],[2,171]),{117:[1,349]},{35:Ea,37:354,38:n,39:r,109:[1,350],118:xa,121:351,123:352},a(be,[2,175]),{61:[1,356]},{7:357,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,358],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{33:[1,359]},{6:W,146:[1,360]},{4:361,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ia,Sa,{151:111,154:112,158:116,134:362,70:[1,363],135:pa,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Ia,Aa,{134:364,70:ca,135:pa}),a(Ra,[2,203]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,69:[1,365],70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,136:367,138:366,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a([6,35,69],ma,{133:368,92:370,93:Oa}),a(La,[2,234]),a(Fa,[2,225]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:372,132:371,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(La,[2,236]),a(Fa,[2,230]),a(wa,[2,223]),a(wa,[2,224],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:373,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),{78:374,126:ia},{40:375,41:Ke},{7:376,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Pa,[2,202]),a(Pa,[2,38]),{34:377,35:Ae,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{34:378,35:Ae},a(ja,[2,256],{151:111,154:112,158:116,148:q,149:[1,379],150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:[2,252],149:[1,380]},a(ja,[2,259],{151:111,154:112,158:116,148:q,149:[1,381],150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:[2,254],149:[1,382]},a(me,[2,267]),a(Ma,[2,268],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:Ua,157:[1,383]},a(Va,[2,278]),{37:230,38:n,39:r,67:231,68:xe,73:233,96:232,107:_,130:Se,161:384,163:229},a(Va,[2,284],{93:[1,385]}),a(Ba,[2,280]),a(Ba,[2,281]),a(Ba,[2,282]),a(Ba,[2,283]),a(me,[2,275]),{35:[2,277]},{7:386,8:387,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:388,8:389,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:390,8:391,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ga,ma,{92:392,93:Ha}),a(Wa,[2,143]),a(Wa,[2,56],{65:[1,394]}),a(Wa,[2,57]),a(Xa,[2,66],{78:397,79:398,61:[1,395],70:[1,396],80:Ya,81:qa,126:ia}),a(Xa,[2,67]),{37:247,38:n,39:r,40:248,41:Ke,66:401,67:249,68:ta,71:402,72:251,73:252,74:253,75:254,76:255,77:na,107:_,129:x,130:I,145:R},{70:[1,403],78:404,79:405,80:Ya,81:qa,126:ia},a(za,[2,62]),a(za,[2,63]),a(za,[2,64]),{7:406,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Ja,[2,72]),a(Ja,[2,73]),a(Ja,[2,74]),a(Ja,[2,75]),a(Ja,[2,76]),{78:407,80:ze,81:Je,126:ia},a(va,Ce,{52:[1,408]}),a(va,je),{6:W,47:[1,409]},a(X,[2,4]),a(Ka,[2,357],{151:111,154:112,158:116,182:ee,183:ae,184:te}),a(Ka,[2,358],{151:111,154:112,158:116,182:ee,183:ae,184:te}),a(Na,[2,359],{151:111,154:112,158:116,182:ee,184:te}),a(Na,[2,360],{151:111,154:112,158:116,182:ee,184:te}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,185,186,187,188,189,190,191,192,193],[2,361],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192],[2,362],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,187,188,189,190,191,192],[2,363],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,188,189,190,191,192],[2,364],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,189,190,191,192],[2,365],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,190,191,192],[2,366],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,191,192],[2,367],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,192],[2,368],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192,193],[2,369],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe}),a(Ma,Za,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,345]),{149:[1,410]},{149:[1,411]},a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Ua,{157:[1,412]}),{7:413,8:414,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:415,8:416,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:417,8:418,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ma,Qa,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,344]),a(et,[2,193]),a(et,[2,194]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:at,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,127:[1,419],128:420,129:x,130:I,136:421,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Qe,[2,131]),a(Qe,[2,132]),a(Qe,[2,133]),a(Qe,[2,134]),{83:[1,423]},{70:ca,83:[2,139],134:424,135:pa,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{83:[2,140]},{70:ca,134:425,135:pa},{7:426,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,83:[2,215],84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(tt,[2,206]),a(tt,ot),a(Qe,[2,138]),a($a,[2,53],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:427,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:428,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{89:429,90:b,91:$},a(nt,rt,{95:134,37:136,67:137,96:138,73:139,94:430,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),{6:lt,35:st},a(ga,[2,105]),{7:433,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ga,[2,106]),a(wa,Sa,{151:111,154:112,158:116,70:[1,434],148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(wa,Aa),a(it,[2,34]),{6:W,36:[1,435]},{7:436,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ua,ma,{92:304,88:[1,437],93:ha}),a(ka,Ta,{151:111,154:112,158:116,182:ee}),{7:438,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{34:377,35:Ae,148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Y,[2,89],{151:111,154:112,158:116,148:_a,150:_a,156:_a,174:_a,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,[2,370],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:439,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:440,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(me,[2,337]),{7:441,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(me,[2,242],{142:[1,442]}),{34:443,35:Ae},{34:446,35:Ae,37:444,38:n,39:r,73:445,107:_},{168:447,170:329,171:ba},{168:448,170:329,171:ba},{36:[1,449],169:[1,450],170:451,171:ba},a(ct,[2,330]),{7:453,8:454,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,139:452,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(pt,[2,149],{151:111,154:112,158:116,34:455,35:Ae,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(me,[2,152]),{7:456,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{36:[1,457]},a($a,[2,33],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,87],{151:111,154:112,158:116,148:_a,150:_a,156:_a,174:_a,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,343]),{7:459,8:458,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{36:[1,460]},{44:461,45:s,46:i},{107:[1,463],114:462,119:He},{44:464,45:s,46:i},{33:[1,465]},a(Ga,ma,{92:466,93:ut}),a(Wa,[2,162]),{35:Ca,37:347,38:n,39:r,115:468,116:345,118:Da},a(Wa,[2,167],{117:[1,469]}),a(Wa,[2,169],{117:[1,470]}),{37:471,38:n,39:r},a(be,[2,173]),a(Ga,ma,{92:472,93:mt}),a(Wa,[2,183]),{35:Ea,37:354,38:n,39:r,118:xa,121:474,123:352},a(Wa,[2,188],{117:[1,475]}),a(Wa,[2,191],{117:[1,476]}),{6:[1,478],7:477,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,479],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ht,[2,179],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{73:480,107:_},{44:481,45:s,46:i},a($e,[2,250]),{6:W,36:[1,482]},{7:483,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ot,{6:gt,35:gt,69:gt,93:gt}),{7:484,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Ra,[2,204]),a(La,[2,235]),a(Fa,[2,231]),{6:ft,35:yt,69:[1,485]},a(kt,rt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,138:206,136:210,97:211,7:308,8:309,137:488,131:489,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,70:Ye,77:k,84:T,85:Oe,86:v,90:b,91:$,93:qe,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),a(kt,[2,232]),a(nt,ma,{92:370,133:490,93:Oa}),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,136:367,138:366,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(wa,[2,114],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(et,[2,195]),a($e,[2,129]),{83:[1,491],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Tt,[2,334]),a(Nt,[2,340]),{7:492,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:493,8:494,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:495,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:496,8:497,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:498,8:499,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Va,[2,279]),{37:230,38:n,39:r,67:231,68:xe,73:233,96:232,107:_,130:Se,163:500},{35:vt,148:q,149:[1,501],150:z,151:111,154:112,156:J,157:[1,502],158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,305],149:[1,503],157:[1,504]},{35:bt,148:q,149:[1,505],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,306],149:[1,506]},{35:$t,148:q,149:[1,507],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,321],149:[1,508]},{6:_t,35:Ct,109:[1,509]},a(Dt,rt,{44:88,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,62:512,38:n,39:r,41:Ke,43:l,45:s,46:i,68:ta,70:oa,77:na,107:_,129:x,130:I,145:R}),{7:513,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,514],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:515,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,516],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Wa,[2,68]),a(Ja,[2,78]),a(Ja,[2,80]),{40:517,41:Ke},{7:292,8:294,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:ca,73:62,74:31,75:35,76:34,77:k,82:518,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,106:293,107:_,110:C,112:D,120:E,129:x,130:I,134:295,135:pa,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Wa,[2,69],{78:397,79:398,80:Ya,81:qa,126:ia}),a(Wa,[2,71],{78:404,79:405,80:Ya,81:qa,126:ia}),a(Wa,[2,70]),a(Ja,[2,79]),a(Ja,[2,81]),{69:[1,519],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Ja,[2,77]),a($e,[2,44]),a(sa,[2,42]),{7:520,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:521,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:522,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,174],vt,{151:111,154:112,158:116,149:[1,523],157:[1,524],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,525],157:[1,526]},a(Et,bt,{151:111,154:112,158:116,149:[1,527],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,528]},a(Et,$t,{151:111,154:112,158:116,149:[1,529],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,530]},a(et,[2,198]),a([6,35,127],ma,{92:531,93:xt}),a(It,[2,216]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:at,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,128:533,129:x,130:I,136:421,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Qe,[2,137]),{7:534,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,83:[2,211],84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:535,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,83:[2,213],84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{83:[2,214],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a($a,[2,54],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{36:[1,536],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{5:538,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,34:537,35:Ae,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(ga,[2,101]),{37:136,38:n,39:r,67:137,68:xe,70:Ie,73:139,94:539,95:134,96:138,107:_,130:Se},a(St,Ee,{94:133,95:134,37:136,67:137,96:138,73:139,87:540,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),a(ga,[2,107],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(wa,gt),a(it,[2,35]),a(Ma,Za,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{89:541,90:b,91:$},a(Ma,Qa,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{36:[1,542],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a($a,[2,372],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{34:543,35:Ae,148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{34:544,35:Ae},a(me,[2,243]),{34:545,35:Ae},{34:546,35:Ae},a(At,[2,247]),{36:[1,547],169:[1,548],170:451,171:ba},{36:[1,549],169:[1,550],170:451,171:ba},a(me,[2,328]),{34:551,35:Ae},a(ct,[2,331]),{34:552,35:Ae,93:[1,553]},a(Rt,[2,237],{151:111,154:112,158:116,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Rt,[2,238]),a(me,[2,150]),a(pt,[2,153],{151:111,154:112,158:116,34:554,35:Ae,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(me,[2,249]),{34:555,35:Ae},{148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(be,[2,85]),a(be,[2,156]),{33:[1,556]},{35:Ca,37:347,38:n,39:r,115:557,116:345,118:Da},a(be,[2,157]),{44:558,45:s,46:i},{6:Ot,35:Lt,109:[1,559]},a(Dt,rt,{37:347,116:562,38:n,39:r,118:Da}),a(nt,ma,{92:563,93:ut}),{37:564,38:n,39:r},{37:565,38:n,39:r},{33:[2,172]},{6:Ft,35:wt,109:[1,566]},a(Dt,rt,{37:354,123:569,38:n,39:r,118:xa}),a(nt,ma,{92:570,93:mt}),{37:571,38:n,39:r,118:[1,572]},{37:573,38:n,39:r},a(ht,[2,176],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:574,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:575,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{36:[1,576]},a(be,[2,181]),{146:[1,577]},{69:[1,578],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{69:[1,579],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Ra,[2,205]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:372,136:210,137:580,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:372,132:581,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Fa,[2,226]),a(kt,[2,233],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,138:366,136:367,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,70:Ye,77:k,84:T,85:Oe,86:v,90:b,91:$,93:qe,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),{6:ft,35:yt,36:[1,582]},a($e,[2,130]),a(Ma,[2,257],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:Pt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,253]},a(Ma,[2,260],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:jt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,255]},{35:Mt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,276]},a(Va,[2,285]),{7:583,8:584,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:585,8:586,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:587,8:588,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:589,8:590,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:591,8:592,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:593,8:594,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:595,8:596,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:597,8:598,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ra,[2,141]),{37:247,38:n,39:r,40:248,41:Ke,42:244,43:l,44:88,45:s,46:i,62:599,63:241,64:242,66:243,67:249,68:ta,70:oa,71:246,72:251,73:252,74:253,75:254,76:255,77:na,107:_,129:x,130:I,145:R},a(St,aa,{44:88,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,108:600,38:n,39:r,41:Ke,43:l,45:s,46:i,68:ta,70:oa,77:na,107:_,129:x,130:I,145:R}),a(Wa,[2,144]),a(Wa,[2,58],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:601,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Wa,[2,60],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:602,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Ja,[2,82]),{83:[1,603]},a(za,[2,65]),a(Ma,Pt,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Ma,jt,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Ma,Mt,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:604,8:605,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:606,8:607,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:608,8:609,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:610,8:611,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:612,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:613,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:614,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:615,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{6:Ut,35:Vt,127:[1,616]},a([6,35,36,127],rt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,136:619,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,70:Ye,77:k,84:T,85:Oe,86:v,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),a(nt,ma,{92:620,93:xt}),{83:[2,210],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{83:[2,212],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(me,[2,55]),a(ya,[2,91]),a(Y,[2,93]),a(ga,[2,102]),a(nt,ma,{92:621,93:ha}),{34:537,35:Ae},a(me,[2,371]),a(Tt,[2,335]),a(me,[2,244]),a(At,[2,245]),a(At,[2,246]),a(me,[2,324]),{34:622,35:Ae},a(me,[2,325]),{34:623,35:Ae},{36:[1,624]},a(ct,[2,332],{6:[1,625]}),{7:626,8:627,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(me,[2,154]),a(Nt,[2,341]),{44:628,45:s,46:i},a(Ga,ma,{92:629,93:ut}),a(be,[2,158]),{33:[1,630]},{37:347,38:n,39:r,116:631,118:Da},{35:Ca,37:347,38:n,39:r,115:632,116:345,118:Da},a(Wa,[2,163]),{6:Ot,35:Lt,36:[1,633]},a(Wa,[2,168]),a(Wa,[2,170]),a(be,[2,174],{33:[1,634]}),{37:354,38:n,39:r,118:xa,123:635},{35:Ea,37:354,38:n,39:r,118:xa,121:636,123:352},a(Wa,[2,184]),{6:Ft,35:wt,36:[1,637]},a(Wa,[2,189]),a(Wa,[2,190]),a(Wa,[2,192]),a(ht,[2,177],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{36:[1,638],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(be,[2,180]),a($e,[2,251]),a($e,[2,208]),a($e,[2,209]),a(Fa,[2,227]),a(nt,ma,{92:370,133:639,93:Oa}),a(Fa,[2,228]),{35:Bt,148:q,150:z,151:111,154:112,156:J,157:[1,640],158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,307],157:[1,641]},{35:Gt,148:q,149:[1,642],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,311],149:[1,643]},{35:Ht,148:q,150:z,151:111,154:112,156:J,157:[1,644],158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,308],157:[1,645]},{35:Wt,148:q,149:[1,646],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,312],149:[1,647]},{35:Xt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,309]},{35:Yt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,310]},{35:qt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,322]},{35:zt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,323]},a(Wa,[2,145]),a(nt,ma,{92:648,93:Ha}),{36:[1,649],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{36:[1,650],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Ja,[2,83]),a(Jt,Bt,{151:111,154:112,158:116,157:[1,651],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{157:[1,652]},a(Et,Gt,{151:111,154:112,158:116,149:[1,653],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,654]},a(Jt,Ht,{151:111,154:112,158:116,157:[1,655],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{157:[1,656]},a(Et,Wt,{151:111,154:112,158:116,149:[1,657],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,658]},a($a,Xt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,Yt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,qt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,zt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(et,[2,199]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,136:659,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:at,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,128:660,129:x,130:I,136:421,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(It,[2,217]),{6:Ut,35:Vt,36:[1,661]},{6:lt,35:st,36:[1,662]},{36:[1,663]},{36:[1,664]},a(me,[2,329]),a(ct,[2,333]),a(Rt,[2,239],{151:111,154:112,158:116,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Rt,[2,240]),a(be,[2,160]),{6:Ot,35:Lt,109:[1,665]},{44:666,45:s,46:i},a(Wa,[2,164]),a(nt,ma,{92:667,93:ut}),a(Wa,[2,165]),{44:668,45:s,46:i},a(Wa,[2,185]),a(nt,ma,{92:669,93:mt}),a(Wa,[2,186]),a(be,[2,178]),{6:ft,35:yt,36:[1,670]},{7:671,8:672,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:673,8:674,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:675,8:676,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:677,8:678,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:679,8:680,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:681,8:682,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:683,8:684,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:685,8:686,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{6:_t,35:Ct,36:[1,687]},a(Wa,[2,59]),a(Wa,[2,61]),{7:688,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:689,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:690,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:691,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:692,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:693,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:694,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:695,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(It,[2,218]),a(nt,ma,{92:696,93:xt}),a(It,[2,219]),a(ga,[2,103]),a(me,[2,326]),a(me,[2,327]),{33:[1,697]},a(be,[2,159]),{6:Ot,35:Lt,36:[1,698]},a(be,[2,182]),{6:Ft,35:wt,36:[1,699]},a(Fa,[2,229]),{35:Kt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,313]},{35:Zt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,315]},{35:Qt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,317]},{35:eo,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,319]},{35:ao,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,314]},{35:to,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,316]},{35:oo,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,318]},{35:no,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,320]},a(Wa,[2,146]),a($a,Kt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,Zt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,Qt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,eo,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,ao,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,to,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,oo,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,no,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{6:Ut,35:Vt,36:[1,700]},{44:701,45:s,46:i},a(Wa,[2,166]),a(Wa,[2,187]),a(It,[2,220]),a(be,[2,161])],defaultActions:{235:[2,277],293:[2,140],471:[2,172],494:[2,253],497:[2,255],499:[2,276],592:[2,309],594:[2,310],596:[2,322],598:[2,323],672:[2,313],674:[2,315],676:[2,317],678:[2,319],680:[2,314],682:[2,316],684:[2,318],686:[2,320]},parseError:function(e,a){if(a.recoverable)this.trace(e);else{var t=new Error(e);throw t.hash=a,t}},parse:function(e){var a=this,t=[0],o=[null],n=[],l=this.table,s=\"\",i=0,d=0,c=0,u=1,m=n.slice.call(arguments,1),h=Object.create(this.lexer),g={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(g.yy[f]=this.yy[f]);h.setInput(e,g.yy),g.yy.lexer=h,g.yy.parser=this,\"undefined\"==typeof h.yylloc&&(h.yylloc={});var y=h.yylloc;n.push(y);var k=h.options&&h.options.ranges;this.parseError=\"function\"==typeof g.yy.parseError?g.yy.parseError:Object.getPrototypeOf(this).parseError;_token_stack:var T=function(){var e;return e=h.lex()||u,\"number\"!=typeof e&&(e=a.symbols_[e]||e),e};for(var N={},v,b,$,_,C,D,p,E,x;;){if($=t[t.length-1],this.defaultActions[$]?_=this.defaultActions[$]:((null===v||\"undefined\"==typeof v)&&(v=T()),_=l[$]&&l[$][v]),\"undefined\"==typeof _||!_.length||!_[0]){var I=\"\";for(D in x=[],l[$])this.terminals_[D]&&D>2&&x.push(\"'\"+this.terminals_[D]+\"'\");I=h.showPosition?\"Parse error on line \"+(i+1)+\":\\n\"+h.showPosition()+\"\\nExpecting \"+x.join(\", \")+\", got '\"+(this.terminals_[v]||v)+\"'\":\"Parse error on line \"+(i+1)+\": Unexpected \"+(v==u?\"end of input\":\"'\"+(this.terminals_[v]||v)+\"'\"),this.parseError(I,{text:h.match,token:this.terminals_[v]||v,line:h.yylineno,loc:y,expected:x})}if(_[0]instanceof Array&&1<_.length)throw new Error(\"Parse Error: multiple actions possible at state: \"+$+\", token: \"+v);switch(_[0]){case 1:t.push(v),o.push(h.yytext),n.push(h.yylloc),t.push(_[1]),v=null,b?(v=b,b=null):(d=h.yyleng,s=h.yytext,i=h.yylineno,y=h.yylloc,0<c&&c--);break;case 2:if(p=this.productions_[_[1]][1],N.$=o[o.length-p],N._$={first_line:n[n.length-(p||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(p||1)].first_column,last_column:n[n.length-1].last_column},k&&(N._$.range=[n[n.length-(p||1)].range[0],n[n.length-1].range[1]]),C=this.performAction.apply(N,[s,d,i,g.yy,_[1],o,n].concat(m)),\"undefined\"!=typeof C)return C;p&&(t=t.slice(0,2*(-1*p)),o=o.slice(0,-1*p),n=n.slice(0,-1*p)),t.push(this.productions_[_[1]][0]),o.push(N.$),n.push(N._$),E=l[t[t.length-2]][t[t.length-1]],t.push(E);break;case 3:return!0}}return!0}};return e.prototype=ro,ro.Parser=e,new e}();return\"undefined\"!=typeof require&&\"undefined\"!=typeof e&&(e.parser=t,e.Parser=t.Parser,e.parse=function(){return t.parse.apply(t,arguments)},e.main=function(){},require.main===a&&e.main(process.argv.slice(1))),a.exports}(),require[\"./scope\"]=function(){var e={};return function(){var a=[].indexOf,t;e.Scope=t=function(){function e(a,t,o,n){_classCallCheck(this,e);var r,l;this.parent=a,this.expressions=t,this.method=o,this.referencedVars=n,this.variables=[{name:\"arguments\",type:\"arguments\"}],this.comments={},this.positions={},this.parent||(this.utilities={}),this.root=null==(r=null==(l=this.parent)?void 0:l.root)?this:r}return _createClass(e,[{key:\"add\",value:function add(e,a,t){return this.shared&&!t?this.parent.add(e,a,t):Object.prototype.hasOwnProperty.call(this.positions,e)?this.variables[this.positions[e]].type=a:this.positions[e]=this.variables.push({name:e,type:a})-1}},{key:\"namedMethod\",value:function namedMethod(){var e;return(null==(e=this.method)?void 0:e.name)||!this.parent?this.method:this.parent.namedMethod()}},{key:\"find\",value:function find(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:\"var\";return!!this.check(e)||(this.add(e,a),!1)}},{key:\"parameter\",value:function parameter(e){return this.shared&&this.parent.check(e,!0)?void 0:this.add(e,\"param\")}},{key:\"check\",value:function check(e){var a;return!!(this.type(e)||(null==(a=this.parent)?void 0:a.check(e)))}},{key:\"temporary\",value:function temporary(e,a){var t=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],o,n,r,l,s,i;return t?(i=e.charCodeAt(0),n=122,o=n-i,l=i+a%(o+1),r=_StringfromCharCode(l),s=_Mathfloor(a/(o+1)),\"\"+r+(s||\"\")):\"\"+e+(a||\"\")}},{key:\"type\",value:function type(e){var a,t,o,n;for(o=this.variables,a=0,t=o.length;a<t;a++)if(n=o[a],n.name===e)return n.type;return null}},{key:\"freeVariable\",value:function freeVariable(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},o,n,r;for(o=0;r=this.temporary(e,o,t.single),!!(this.check(r)||0<=a.call(this.root.referencedVars,r));)o++;return(null==(n=t.reserve)||n)&&this.add(r,\"var\",!0),r}},{key:\"assign\",value:function assign(e,a){return this.add(e,{value:a,assigned:!0},!0),this.hasAssignments=!0}},{key:\"hasDeclarations\",value:function hasDeclarations(){return!!this.declaredVariables().length}},{key:\"declaredVariables\",value:function declaredVariables(){var e;return function(){var a,t,o,n;for(o=this.variables,n=[],a=0,t=o.length;a<t;a++)e=o[a],\"var\"===e.type&&n.push(e.name);return n}.call(this).sort()}},{key:\"assignedVariables\",value:function assignedVariables(){var e,a,t,o,n;for(t=this.variables,o=[],e=0,a=t.length;e<a;e++)n=t[e],n.type.assigned&&o.push(n.name+\" = \"+n.type.value);return o}}]),e}()}.call(this),{exports:e}.exports}(),require[\"./nodes\"]=function(){var e={};return function(){var a=[].indexOf,t=[].splice,n=[].slice,r,s,d,o,l,c,i,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E,x,I,S,A,R,O,L,F,w,P,j,M,U,V,B,G,H,W,X,Y,q,z,J,K,Z,Q,ee,ae,te,oe,ne,re,le,se,ie,de,ce,pe,ue,me,he,ge,fe,ye,ke,Te,Ne,ve,be,$e,_e,Ce,De,Ee,xe,Ie,Se,Ae,Re,Oe,Le,Fe,we,Pe,je,Me,Ue,Ve,Be,Ge,He,We,Xe,Ye,qe,ze,Je,Ke,Ze,Qe,ea,aa,ta,oa,na,ra,la,sa;Error.stackTraceLimit=Infinity;var ia=require(\"./scope\");ye=ia.Scope;var da=require(\"./lexer\");Je=da.isUnassignable,G=da.JS_FORBIDDEN;var ca=require(\"./helpers\");Ue=ca.compact,He=ca.flatten,Ge=ca.extend,Ze=ca.merge,Ve=ca.del,oa=ca.starts,Be=ca.ends,ta=ca.some,je=ca.addDataToNode,Me=ca.attachCommentsToNode,Ke=ca.locationDataToString,na=ca.throwSyntaxError,e.extend=Ge,e.addDataToNode=je,we=function(){return!0},te=function(){return!1},Ee=function(){return this},ae=function(){return this.negated=!this.negated,this},e.CodeFragment=g=function(){function e(a,t){_classCallCheck(this,e);var o;this.code=\"\"+t,this.type=(null==a||null==(o=a.constructor)?void 0:o.name)||\"unknown\",this.locationData=null==a?void 0:a.locationData,this.comments=null==a?void 0:a.comments}return _createClass(e,[{key:\"toString\",value:function toString(){return\"\"+this.code+(this.locationData?\": \"+Ke(this.locationData):\"\")}}]),e}(),We=function(e){var a;return function(){var t,o,n;for(n=[],t=0,o=e.length;t<o;t++)a=e[t],n.push(a.code);return n}().join(\"\")},e.Base=l=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"compile\",value:function compile(e,a){return We(this.compileToFragments(e,a))}},{key:\"compileWithoutComments\",value:function compileWithoutComments(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:\"compile\",o,n;return this.comments&&(this.ignoreTheseCommentsTemporarily=this.comments,delete this.comments),n=this.unwrapAll(),n.comments&&(n.ignoreTheseCommentsTemporarily=n.comments,delete n.comments),o=this[t](e,a),this.ignoreTheseCommentsTemporarily&&(this.comments=this.ignoreTheseCommentsTemporarily,delete this.ignoreTheseCommentsTemporarily),n.ignoreTheseCommentsTemporarily&&(n.comments=n.ignoreTheseCommentsTemporarily,delete n.ignoreTheseCommentsTemporarily),o}},{key:\"compileNodeWithoutComments\",value:function compileNodeWithoutComments(e,a){return this.compileWithoutComments(e,a,\"compileNode\")}},{key:\"compileToFragments\",value:function compileToFragments(e,a){var t,o;return e=Ge({},e),a&&(e.level=a),o=this.unfoldSoak(e)||this,o.tab=e.indent,t=e.level!==z&&o.isStatement(e)?o.compileClosure(e):o.compileNode(e),this.compileCommentFragments(e,o,t),t}},{key:\"compileToFragmentsWithoutComments\",value:function compileToFragmentsWithoutComments(e,a){return this.compileWithoutComments(e,a,\"compileToFragments\")}},{key:\"compileClosure\",value:function compileClosure(e){var a,t,o,n,l,s,i,d;switch((n=this.jumps())&&n.error(\"cannot use a pure statement in an expression\"),e.sharedScope=!0,o=new h([],c.wrap([this])),a=[],this.contains(function(e){return e instanceof _e})?o.bound=!0:((t=this.contains(qe))||this.contains(ze))&&(a=[new Ie],t?(l=\"apply\",a.push(new R(\"arguments\"))):l=\"call\",o=new Le(o,[new r(new pe(l))])),s=new u(o,a).compileNode(e),!1){case!(o.isGenerator||(null==(i=o.base)?void 0:i.isGenerator)):s.unshift(this.makeCode(\"(yield* \")),s.push(this.makeCode(\")\"));break;case!(o.isAsync||(null==(d=o.base)?void 0:d.isAsync)):s.unshift(this.makeCode(\"(await \")),s.push(this.makeCode(\")\"))}return s}},{key:\"compileCommentFragments\",value:function compileCommentFragments(e,t,o){var n,r,l,s,i,d,c,p;if(!t.comments)return o;for(p=function(e){var a;return e.unshift?la(o,e):(0!==o.length&&(a=o[o.length-1],e.newLine&&\"\"!==a.code&&!/\\n\\s*$/.test(a.code)&&(e.code=\"\\n\"+e.code)),o.push(e))},c=t.comments,i=0,d=c.length;i<d;i++)(l=c[i],!!(0>a.call(this.compiledComments,l)))&&(this.compiledComments.push(l),s=l.here?new S(l).compileNode(e):new J(l).compileNode(e),s.isHereComment&&!s.newLine||t.includeCommentFragments()?p(s):(0===o.length&&o.push(this.makeCode(\"\")),s.unshift?(null==(n=o[0]).precedingComments&&(n.precedingComments=[]),o[0].precedingComments.push(s)):(null==(r=o[o.length-1]).followingComments&&(r.followingComments=[]),o[o.length-1].followingComments.push(s))));return o}},{key:\"cache\",value:function cache(e,a,t){var o,n,r;return o=null==t?this.shouldCache():t(this),o?(n=new R(e.scope.freeVariable(\"ref\")),r=new d(n,this),a?[r.compileToFragments(e,a),[this.makeCode(n.value)]]:[r,n]):(n=a?this.compileToFragments(e,a):this,[n,n])}},{key:\"hoist\",value:function hoist(){var e,a,t;return this.hoisted=!0,t=new A(this),e=this.compileNode,a=this.compileToFragments,this.compileNode=function(a){return t.update(e,a)},this.compileToFragments=function(e){return t.update(a,e)},t}},{key:\"cacheToCodeFragments\",value:function cacheToCodeFragments(e){return[We(e[0]),We(e[1])]}},{key:\"makeReturn\",value:function makeReturn(e){var a;return a=this.unwrapAll(),e?new u(new K(e+\".push\"),[a]):new ge(a)}},{key:\"contains\",value:function contains(e){var a;return a=void 0,this.traverseChildren(!1,function(t){if(e(t))return a=t,!1}),a}},{key:\"lastNode\",value:function lastNode(e){return 0===e.length?null:e[e.length-1]}},{key:\"toString\",value:function toString(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:\"\",a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.constructor.name,t;return t=\"\\n\"+e+a,this.soak&&(t+=\"?\"),this.eachChild(function(a){return t+=a.toString(e+De)}),t}},{key:\"eachChild\",value:function eachChild(e){var a,t,o,n,r,l,s,i;if(!this.children)return this;for(s=this.children,o=0,r=s.length;o<r;o++)if(a=s[o],this[a])for(i=He([this[a]]),n=0,l=i.length;n<l;n++)if(t=i[n],!1===e(t))return this;return this}},{key:\"traverseChildren\",value:function traverseChildren(e,a){return this.eachChild(function(t){var o;if(o=a(t),!1!==o)return t.traverseChildren(e,a)})}},{key:\"replaceInContext\",value:function replaceInContext(e,a){var o,n,r,l,s,i,d,c,p,u;if(!this.children)return!1;for(p=this.children,s=0,d=p.length;s<d;s++)if(o=p[s],r=this[o])if(Array.isArray(r))for(l=i=0,c=r.length;i<c;l=++i){if(n=r[l],e(n))return t.apply(r,[l,l-l+1].concat(u=a(n,this))),u,!0;if(n.replaceInContext(e,a))return!0}else{if(e(r))return this[o]=a(r,this),!0;if(r.replaceInContext(e,a))return!0}}},{key:\"invert\",value:function invert(){return new se(\"!\",this)}},{key:\"unwrapAll\",value:function unwrapAll(){var e;for(e=this;e!==(e=e.unwrap());)continue;return e}},{key:\"updateLocationDataIfMissing\",value:function updateLocationDataIfMissing(e){return this.locationData&&!this.forceUpdateLocation?this:(delete this.forceUpdateLocation,this.locationData=e,this.eachChild(function(a){return a.updateLocationDataIfMissing(e)}))}},{key:\"error\",value:function error(e){return na(e,this.locationData)}},{key:\"makeCode\",value:function makeCode(e){return new g(this,e)}},{key:\"wrapInParentheses\",value:function wrapInParentheses(e){return[this.makeCode(\"(\")].concat(_toConsumableArray(e),[this.makeCode(\")\")])}},{key:\"wrapInBraces\",value:function wrapInBraces(e){return[this.makeCode(\"{\")].concat(_toConsumableArray(e),[this.makeCode(\"}\")])}},{key:\"joinFragmentArrays\",value:function joinFragmentArrays(e,a){var t,o,n,r,l;for(t=[],n=r=0,l=e.length;r<l;n=++r)o=e[n],n&&t.push(this.makeCode(a)),t=t.concat(o);return t}}]),e}();return e.prototype.children=[],e.prototype.isStatement=te,e.prototype.compiledComments=[],e.prototype.includeCommentFragments=te,e.prototype.jumps=te,e.prototype.shouldCache=we,e.prototype.isChainable=te,e.prototype.isAssignable=te,e.prototype.isNumber=te,e.prototype.unwrap=Ee,e.prototype.unfoldSoak=te,e.prototype.assigns=te,e}.call(this),e.HoistTarget=A=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.source=e,t.options={},t.targetFragments={fragments:[]},t}return _inherits(a,e),_createClass(a,null,[{key:\"expand\",value:function expand(e){var a,o,n,r;for(o=n=e.length-1;0<=n;o=n+=-1)a=e[o],a.fragments&&(t.apply(e,[o,o-o+1].concat(r=this.expand(a.fragments))),r);return e}}]),_createClass(a,[{key:\"isStatement\",value:function isStatement(e){return this.source.isStatement(e)}},{key:\"update\",value:function update(e,a){return this.targetFragments.fragments=e.call(this.source,Ze(a,this.options))}},{key:\"compileToFragments\",value:function compileToFragments(e,a){return this.options.indent=e.indent,this.options.level=null==a?e.level:a,[this.targetFragments]}},{key:\"compileNode\",value:function compileNode(e){return this.compileToFragments(e)}},{key:\"compileClosure\",value:function compileClosure(e){return this.compileToFragments(e)}}]),a}(l),e.Block=c=function(){var e=function(e){function t(e){_classCallCheck(this,t);var a=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return a.expressions=Ue(He(e||[])),a}return _inherits(t,e),_createClass(t,[{key:\"push\",value:function push(e){return this.expressions.push(e),this}},{key:\"pop\",value:function pop(){return this.expressions.pop()}},{key:\"unshift\",value:function unshift(e){return this.expressions.unshift(e),this}},{key:\"unwrap\",value:function unwrap(){return 1===this.expressions.length?this.expressions[0]:this}},{key:\"isEmpty\",value:function isEmpty(){return!this.expressions.length}},{key:\"isStatement\",value:function isStatement(e){var a,t,o,n;for(n=this.expressions,t=0,o=n.length;t<o;t++)if(a=n[t],a.isStatement(e))return!0;return!1}},{key:\"jumps\",value:function jumps(e){var a,t,o,n,r;for(r=this.expressions,t=0,n=r.length;t<n;t++)if(a=r[t],o=a.jumps(e))return o}},{key:\"makeReturn\",value:function makeReturn(e){var a,t;for(t=this.expressions.length;t--;){a=this.expressions[t],this.expressions[t]=a.makeReturn(e),a instanceof ge&&!a.expression&&this.expressions.splice(t,1);break}return this}},{key:\"compileToFragments\",value:function compileToFragments(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},a=arguments[1];return e.scope?_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileToFragments\",this).call(this,e,a):this.compileRoot(e)}},{key:\"compileNode\",value:function compileNode(e){var a,o,r,l,s,i,d,c,p,u;for(this.tab=e.indent,u=e.level===z,o=[],p=this.expressions,l=s=0,d=p.length;s<d;l=++s){if(c=p[l],c.hoisted){c.compileToFragments(e);continue}if(c=c.unfoldSoak(e)||c,c instanceof t)o.push(c.compileNode(e));else if(u){if(c.front=!0,r=c.compileToFragments(e),!c.isStatement(e)){r=Ye(r,this);var m=n.call(r,-1),h=_slicedToArray(m,1);i=h[0],\"\"===i.code||i.isComment||r.push(this.makeCode(\";\"))}o.push(r)}else o.push(c.compileToFragments(e,X))}return u?this.spaced?[].concat(this.joinFragmentArrays(o,\"\\n\\n\"),this.makeCode(\"\\n\")):this.joinFragmentArrays(o,\"\\n\"):(a=o.length?this.joinFragmentArrays(o,\", \"):[this.makeCode(\"void 0\")],1<o.length&&e.level>=X?this.wrapInParentheses(a):a)}},{key:\"compileRoot\",value:function compileRoot(e){var a,t,o,n,r,l;for(e.indent=e.bare?\"\":De,e.level=z,this.spaced=!0,e.scope=new ye(null,this,null,null==(r=e.referencedVars)?[]:r),l=e.locals||[],t=0,o=l.length;t<o;t++)n=l[t],e.scope.parameter(n);return a=this.compileWithDeclarations(e),A.expand(a),a=this.compileComments(a),e.bare?a:[].concat(this.makeCode(\"(function() {\\n\"),a,this.makeCode(\"\\n}).call(this);\\n\"))}},{key:\"compileWithDeclarations\",value:function compileWithDeclarations(e){var a,t,o,n,r,l,s,d,i,c,p,u,m,h,g,f,y;for(s=[],m=[],h=this.expressions,d=i=0,p=h.length;i<p&&(l=h[d],l=l.unwrap(),!!(l instanceof K));d=++i);if(e=Ze(e,{level:z}),d){g=this.expressions.splice(d,9e9);var k=[this.spaced,!1];y=k[0],this.spaced=k[1];var T=[this.compileNode(e),y];s=T[0],this.spaced=T[1],this.expressions=g}m=this.compileNode(e);var N=e;if(f=N.scope,f.expressions===this)if(r=e.scope.hasDeclarations(),a=f.hasAssignments,r||a){if(d&&s.push(this.makeCode(\"\\n\")),s.push(this.makeCode(this.tab+\"var \")),r)for(o=f.declaredVariables(),n=c=0,u=o.length;c<u;n=++c){if(t=o[n],s.push(this.makeCode(t)),Object.prototype.hasOwnProperty.call(e.scope.comments,t)){var v;(v=s).push.apply(v,_toConsumableArray(e.scope.comments[t]))}n!==o.length-1&&s.push(this.makeCode(\", \"))}a&&(r&&s.push(this.makeCode(\",\\n\"+(this.tab+De))),s.push(this.makeCode(f.assignedVariables().join(\",\\n\"+(this.tab+De))))),s.push(this.makeCode(\";\\n\"+(this.spaced?\"\\n\":\"\")))}else s.length&&m.length&&s.push(this.makeCode(\"\\n\"));return s.concat(m)}},{key:\"compileComments\",value:function compileComments(e){var t,o,n,s,i,d,c,p,u,l,m,h,g,f,y,k,T,N,r,v,b,$,_,C,D;for(i=c=0,l=e.length;c<l;i=++c){if(n=e[i],n.precedingComments){for(s=\"\",r=e.slice(0,i+1),p=r.length-1;0<=p;p+=-1)if(y=r[p],d=/^ {2,}/m.exec(y.code),d){s=d[0];break}else if(0<=a.call(y.code,\"\\n\"))break;for(t=\"\\n\"+s+function(){var e,a,t,r;for(t=n.precedingComments,r=[],e=0,a=t.length;e<a;e++)o=t[e],o.isHereComment&&o.multiline?r.push(ea(o.code,s,!1)):r.push(o.code);return r}().join(\"\\n\"+s).replace(/^(\\s*)$/gm,\"\"),v=e.slice(0,i+1),k=u=v.length-1;0<=u;k=u+=-1){if(y=v[k],g=y.code.lastIndexOf(\"\\n\"),-1===g)if(0===k)y.code=\"\\n\"+y.code,g=0;else if(y.isStringWithInterpolations&&\"{\"===y.code)t=t.slice(1)+\"\\n\",g=1;else continue;delete n.precedingComments,y.code=y.code.slice(0,g)+t+y.code.slice(g);break}}if(n.followingComments){if(_=n.followingComments[0].trail,s=\"\",!(_&&1===n.followingComments.length))for(f=!1,b=e.slice(i),T=0,m=b.length;T<m;T++)if(C=b[T],!f){if(0<=a.call(C.code,\"\\n\"))f=!0;else continue}else if(d=/^ {2,}/m.exec(C.code),d){s=d[0];break}else if(0<=a.call(C.code,\"\\n\"))break;for(t=1===i&&/^\\s+$/.test(e[0].code)?\"\":_?\" \":\"\\n\"+s,t+=function(){var e,a,t,r;for(t=n.followingComments,r=[],a=0,e=t.length;a<e;a++)o=t[a],o.isHereComment&&o.multiline?r.push(ea(o.code,s,!1)):r.push(o.code);return r}().join(\"\\n\"+s).replace(/^(\\s*)$/gm,\"\"),$=e.slice(i),D=N=0,h=$.length;N<h;D=++N){if(C=$[D],g=C.code.indexOf(\"\\n\"),-1===g)if(D===e.length-1)C.code+=\"\\n\",g=C.code.length;else if(C.isStringWithInterpolations&&\"}\"===C.code)t+=\"\\n\",g=0;else continue;delete n.followingComments,\"\\n\"===C.code&&(t=t.replace(/^\\n/,\"\")),C.code=C.code.slice(0,g)+t+C.code.slice(g);break}}}return e}}],[{key:\"wrap\",value:function wrap(e){return 1===e.length&&e[0]instanceof t?e[0]:new t(e)}}]),t}(l);return e.prototype.children=[\"expressions\"],e}.call(this),e.Literal=K=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.value=e,t}return _inherits(a,e),_createClass(a,[{key:\"assigns\",value:function assigns(e){return e===this.value}},{key:\"compileNode\",value:function compileNode(){return[this.makeCode(this.value)]}},{key:\"toString\",value:function toString(){return\" \"+(this.isStatement()?_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"toString\",this).call(this):this.constructor.name)+\": \"+this.value}}]),a}(l);return e.prototype.shouldCache=te,e}.call(this),e.NumberLiteral=re=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.InfinityLiteral=B=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){return[this.makeCode(\"2e308\")]}}]),a}(re),e.NaNLiteral=oe=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"NaN\"))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;return a=[this.makeCode(\"0/0\")],e.level>=Y?this.wrapInParentheses(a):a}}]),a}(re),e.StringLiteral=ve=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){var e;return e=this.csx?[this.makeCode(this.unquote(!0,!0))]:_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this)}},{key:\"unquote\",value:function unquote(){var e=!!(0<arguments.length&&void 0!==arguments[0])&&arguments[0],a=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],t;return t=this.value.slice(1,-1),e&&(t=t.replace(/\\\\\"/g,'\"')),a&&(t=t.replace(/\\\\n/g,\"\\n\")),t}}]),a}(K),e.RegexLiteral=me=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.PassthroughLiteral=ce=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.IdentifierLiteral=R=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"eachName\",value:function eachName(e){return e(this)}}]),a}(K);return e.prototype.isAssignable=we,e}.call(this),e.CSXTag=p=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(R),e.PropertyName=pe=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K);return e.prototype.isAssignable=we,e}.call(this),e.ComputedPropertyName=f=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return[this.makeCode(\"[\")].concat(_toConsumableArray(this.value.compileToFragments(e,X)),[this.makeCode(\"]\")])}}]),a}(pe),e.StatementLiteral=Ne=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"jumps\",value:function jumps(e){return\"break\"!==this.value||(null==e?void 0:e.loop)||(null==e?void 0:e.block)?\"continue\"!==this.value||null!=e&&e.loop?void 0:this:this}},{key:\"compileNode\",value:function compileNode(){return[this.makeCode(\"\"+this.tab+this.value+\";\")]}}]),a}(K);return e.prototype.isStatement=we,e.prototype.makeReturn=Ee,e}.call(this),e.ThisLiteral=Ie=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"this\"))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t;return a=(null==(t=e.scope.method)?void 0:t.bound)?e.scope.method.context:this.value,[this.makeCode(a)]}}]),a}(K),e.UndefinedLiteral=Oe=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"undefined\"))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return[this.makeCode(e.level>=H?\"(void 0)\":\"void 0\")]}}]),a}(K),e.NullLiteral=ne=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"null\"))}return _inherits(a,e),a}(K),e.BooleanLiteral=i=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.Return=ge=function(){var e=function(e){function t(e){_classCallCheck(this,t);var a=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return a.expression=e,a}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function compileToFragments(e,a){var o,n;return o=null==(n=this.expression)?void 0:n.makeReturn(),o&&!(o instanceof t)?o.compileToFragments(e,a):_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileToFragments\",this).call(this,e,a)}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r;if(t=[],this.expression){for(t=this.expression.compileToFragments(e,q),la(t,this.makeCode(this.tab+\"return \")),n=0,r=t.length;n<r;n++)if(o=t[n],o.isHereComment&&0<=a.call(o.code,\"\\n\"))o.code=ea(o.code,this.tab);else if(o.isLineComment)o.code=\"\"+this.tab+o.code;else break}else t.push(this.makeCode(this.tab+\"return\"));return t.push(this.makeCode(\";\")),t}}]),t}(l);return e.prototype.children=[\"expression\"],e.prototype.isStatement=we,e.prototype.makeReturn=Ee,e.prototype.jumps=Ee,e}.call(this),e.YieldReturn=Pe=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return null==e.scope.parent&&this.error(\"yield can only occur inside functions\"),_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e)}}]),a}(ge),e.AwaitReturn=o=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return null==e.scope.parent&&this.error(\"await can only occur inside functions\"),_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e)}}]),a}(ge),e.Value=Le=function(){var e=function(e){function a(e,t,o){var n=!!(3<arguments.length&&void 0!==arguments[3])&&arguments[3];_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),l,s;if(!t&&e instanceof a){var i;return i=e,_possibleConstructorReturn(r,i)}if(e instanceof de&&e.contains(function(e){return e instanceof Ne})){var d;return d=e.unwrap(),_possibleConstructorReturn(r,d)}return r.base=e,r.properties=t||[],o&&(r[o]=!0),r.isDefaultValue=n,(null==(l=r.base)?void 0:l.comments)&&r.base instanceof Ie&&null!=(null==(s=r.properties[0])?void 0:s.name)&&Qe(r.base,r.properties[0].name),r}return _inherits(a,e),_createClass(a,[{key:\"add\",value:function add(e){return this.properties=this.properties.concat(e),this.forceUpdateLocation=!0,this}},{key:\"hasProperties\",value:function hasProperties(){return 0!==this.properties.length}},{key:\"bareLiteral\",value:function bareLiteral(e){return!this.properties.length&&this.base instanceof e}},{key:\"isArray\",value:function isArray(){return this.bareLiteral(s)}},{key:\"isRange\",value:function isRange(){return this.bareLiteral(ue)}},{key:\"shouldCache\",value:function shouldCache(){return this.hasProperties()||this.base.shouldCache()}},{key:\"isAssignable\",value:function isAssignable(){return this.hasProperties()||this.base.isAssignable()}},{key:\"isNumber\",value:function isNumber(){return this.bareLiteral(re)}},{key:\"isString\",value:function isString(){return this.bareLiteral(ve)}},{key:\"isRegex\",value:function isRegex(){return this.bareLiteral(me)}},{key:\"isUndefined\",value:function isUndefined(){return this.bareLiteral(Oe)}},{key:\"isNull\",value:function isNull(){return this.bareLiteral(ne)}},{key:\"isBoolean\",value:function isBoolean(){return this.bareLiteral(i)}},{key:\"isAtomic\",value:function isAtomic(){var e,a,t,o;for(o=this.properties.concat(this.base),e=0,a=o.length;e<a;e++)if(t=o[e],t.soak||t instanceof u)return!1;return!0}},{key:\"isNotCallable\",value:function isNotCallable(){return this.isNumber()||this.isString()||this.isRegex()||this.isArray()||this.isRange()||this.isSplice()||this.isObject()||this.isUndefined()||this.isNull()||this.isBoolean()}},{key:\"isStatement\",value:function isStatement(e){return!this.properties.length&&this.base.isStatement(e)}},{key:\"assigns\",value:function assigns(e){return!this.properties.length&&this.base.assigns(e)}},{key:\"jumps\",value:function jumps(e){return!this.properties.length&&this.base.jumps(e)}},{key:\"isObject\",value:function isObject(e){return!this.properties.length&&this.base instanceof le&&(!e||this.base.generated)}},{key:\"isElision\",value:function isElision(){return!!(this.base instanceof s)&&this.base.hasElision()}},{key:\"isSplice\",value:function isSplice(){var e,a,t,o;return o=this.properties,e=n.call(o,-1),a=_slicedToArray(e,1),t=a[0],e,t instanceof ke}},{key:\"looksStatic\",value:function looksStatic(e){var a;return(this.this||this.base instanceof Ie||this.base.value===e)&&1===this.properties.length&&\"prototype\"!==(null==(a=this.properties[0].name)?void 0:a.value)}},{key:\"unwrap\",value:function unwrap(){return this.properties.length?this:this.base}},{key:\"cacheReference\",value:function cacheReference(e){var t,o,r,l,s,i,c;return(c=this.properties,t=n.call(c,-1),o=_slicedToArray(t,1),s=o[0],t,2>this.properties.length&&!this.base.shouldCache()&&(null==s||!s.shouldCache()))?[this,this]:(r=new a(this.base,this.properties.slice(0,-1)),r.shouldCache()&&(l=new R(e.scope.freeVariable(\"base\")),r=new a(new de(new d(l,r)))),!s)?[r,l]:(s.shouldCache()&&(i=new R(e.scope.freeVariable(\"name\")),s=new V(new d(i,s.index)),i=new V(i)),[r.add(s),new a(l||r.base,[i||s])])}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r;for(this.base.front=this.front,r=this.properties,a=r.length&&null!=this.base.cached?this.base.cached:this.base.compileToFragments(e,r.length?H:null),r.length&&fe.test(We(a))&&a.push(this.makeCode(\".\")),t=0,o=r.length;t<o;t++){var l;n=r[t],(l=a).push.apply(l,_toConsumableArray(n.compileToFragments(e)))}return a}},{key:\"unfoldSoak\",value:function unfoldSoak(e){var t=this;return null==this.unfoldedSoak?this.unfoldedSoak=function(){var o,n,r,l,s,i,c,p,u;if(r=t.base.unfoldSoak(e),r){var m;return(m=r.body.properties).push.apply(m,_toConsumableArray(t.properties)),r}for(p=t.properties,n=l=0,s=p.length;l<s;n=++l)if(i=p[n],!!i.soak)return i.soak=!1,o=new a(t.base,t.properties.slice(0,n)),u=new a(t.base,t.properties.slice(n)),o.shouldCache()&&(c=new R(e.scope.freeVariable(\"ref\")),o=new de(new d(c,o)),u.base=c),new O(new T(o),u,{soak:!0});return!1}():this.unfoldedSoak}},{key:\"eachName\",value:function eachName(e){return this.hasProperties()?e(this):this.base.isAssignable()?this.base.eachName(e):this.error(\"tried to assign to unassignable value\")}}]),a}(l);return e.prototype.children=[\"base\",\"properties\"],e}.call(this),e.HereComment=S=function(e){function t(e){var a=e.content,o=e.newLine,n=e.unshift;_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.content=a,r.newLine=o,r.unshift=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function compileNode(){var e,t,o,n,r,l,s,i,d;if(i=0<=a.call(this.content,\"\\n\"),t=/\\n\\s*[#|\\*]/.test(this.content),t&&(this.content=this.content.replace(/^([ \\t]*)#(?=\\s)/gm,\" *\")),i){for(n=\"\",d=this.content.split(\"\\n\"),o=0,l=d.length;o<l;o++)s=d[o],r=/^\\s*/.exec(s)[0],r.length>n.length&&(n=r);this.content=this.content.replace(RegExp(\"^(\"+r+\")\",\"gm\"),\"\")}return this.content=\"/*\"+this.content+(t?\" \":\"\")+\"*/\",e=this.makeCode(this.content),e.newLine=this.newLine,e.unshift=this.unshift,e.multiline=i,e.isComment=e.isHereComment=!0,e}}]),t}(l),e.LineComment=J=function(e){function a(e){var t=e.content,o=e.newLine,n=e.unshift;_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return r.content=t,r.newLine=o,r.unshift=n,r}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){var e;return e=this.makeCode(/^\\s*$/.test(this.content)?\"\":\"//\"+this.content),e.newLine=this.newLine,e.unshift=this.unshift,e.trail=!this.newLine&&!this.unshift,e.isComment=e.isLineComment=!0,e}}]),a}(l),e.Call=u=function(){var e=function(e){function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],o=arguments[2],n=arguments[3];_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),l;return r.variable=e,r.args=t,r.soak=o,r.token=n,r.isNew=!1,r.variable instanceof Le&&r.variable.isNotCallable()&&r.variable.error(\"literal is not a function\"),r.csx=r.variable.base instanceof p,\"RegExp\"===(null==(l=r.variable.base)?void 0:l.value)&&0!==r.args.length&&Qe(r.variable,r.args[0]),r}return _inherits(a,e),_createClass(a,[{key:\"updateLocationDataIfMissing\",value:function updateLocationDataIfMissing(e){var t,o;return this.locationData&&this.needsUpdatedStartLocation&&(this.locationData.first_line=e.first_line,this.locationData.first_column=e.first_column,t=(null==(o=this.variable)?void 0:o.base)||this.variable,t.needsUpdatedStartLocation&&(this.variable.locationData.first_line=e.first_line,this.variable.locationData.first_column=e.first_column,t.updateLocationDataIfMissing(e)),delete this.needsUpdatedStartLocation),_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"updateLocationDataIfMissing\",this).call(this,e)}},{key:\"newInstance\",value:function newInstance(){var e,t;return e=(null==(t=this.variable)?void 0:t.base)||this.variable,e instanceof a&&!e.isNew?e.newInstance():this.isNew=!0,this.needsUpdatedStartLocation=!0,this}},{key:\"unfoldSoak\",value:function unfoldSoak(e){var t,o,n,r,l,s,i,d;if(this.soak){if(this.variable instanceof $e)r=new K(this.variable.compile(e)),d=new Le(r),null==this.variable.accessor&&this.variable.error(\"Unsupported reference to 'super'\");else{if(o=ra(e,this,\"variable\"))return o;var c=new Le(this.variable).cacheReference(e),p=_slicedToArray(c,2);r=p[0],d=p[1]}return d=new a(d,this.args),d.isNew=this.isNew,r=new K(\"typeof \"+r.compile(e)+' === \"function\"'),new O(r,new Le(d),{soak:!0})}for(t=this,s=[];;){if(t.variable instanceof a){s.push(t),t=t.variable;continue}if(!(t.variable instanceof Le))break;if(s.push(t),!((t=t.variable.base)instanceof a))break}for(i=s.reverse(),n=0,l=i.length;n<l;n++)t=i[n],o&&(t.variable instanceof a?t.variable=o:t.variable.base=o),o=ra(e,t,\"variable\");return o}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,l,s,i,d,c,p,u,m,g,f,y;if(this.csx)return this.compileCSX(e);if(null!=(u=this.variable)&&(u.front=this.front),i=[],y=(null==(m=this.variable)||null==(g=m.properties)?void 0:g[0])instanceof r,n=function(){var e,a,t,n;for(t=this.args||[],n=[],e=0,a=t.length;e<a;e++)o=t[e],o instanceof h&&n.push(o);return n}.call(this),0<n.length&&y&&!this.variable.base.cached){var k=this.variable.base.cache(e,H,function(){return!1}),T=_slicedToArray(k,1);s=T[0],this.variable.base.cached=s}for(f=this.args,l=c=0,p=f.length;c<p;l=++c){var N;o=f[l],l&&i.push(this.makeCode(\", \")),(N=i).push.apply(N,_toConsumableArray(o.compileToFragments(e,X)))}return d=[],this.isNew&&(this.variable instanceof $e&&this.variable.error(\"Unsupported reference to 'super'\"),d.push(this.makeCode(\"new \"))),(a=d).push.apply(a,_toConsumableArray(this.variable.compileToFragments(e,H))),(t=d).push.apply(t,[this.makeCode(\"(\")].concat(_toConsumableArray(i),[this.makeCode(\")\")])),d}},{key:\"compileCSX\",value:function compileCSX(e){var a=_slicedToArray(this.args,2),t,o,n,r,l,i,d,c,p,u,m;if(r=a[0],l=a[1],r.base.csx=!0,null!=l&&(l.base.csx=!0),i=[this.makeCode(\"<\")],(t=i).push.apply(t,_toConsumableArray(m=this.variable.compileToFragments(e,H))),r.base instanceof s)for(u=r.base.objects,d=0,c=u.length;d<c;d++){var h;p=u[d],o=p.base,n=(null==o?void 0:o.properties)||[],(o instanceof le||o instanceof R)&&(!(o instanceof le)||o.generated||!(1<n.length)&&n[0]instanceof Te)||p.error('Unexpected token. Allowed CSX attributes are: id=\"val\", src={source}, {props...} or attribute.'),p.base instanceof le&&(p.base.csx=!0),i.push(this.makeCode(\" \")),(h=i).push.apply(h,_toConsumableArray(p.compileToFragments(e,q)))}if(l){var g,f;i.push(this.makeCode(\">\")),(g=i).push.apply(g,_toConsumableArray(l.compileNode(e,X))),(f=i).push.apply(f,[this.makeCode(\"</\")].concat(_toConsumableArray(m),[this.makeCode(\">\")]))}else i.push(this.makeCode(\" />\"));return i}}]),a}(l);return e.prototype.children=[\"variable\",\"args\"],e}.call(this),e.SuperCall=_e=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"isStatement\",value:function isStatement(e){var a;return(null==(a=this.expressions)?void 0:a.length)&&e.level===z}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r;if(null==(o=this.expressions)||!o.length)return _get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e);if(r=new K(We(_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e))),n=new c(this.expressions.slice()),e.level>z){var l=r.cache(e,null,we),s=_slicedToArray(l,2);r=s[0],t=s[1],n.push(t)}return n.unshift(r),n.compileToFragments(e,e.level===z?e.level:X)}}]),a}(u);return e.prototype.children=u.prototype.children.concat([\"expressions\"]),e}.call(this),e.Super=$e=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.accessor=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s,i;if(t=e.scope.namedMethod(),(null==t?void 0:t.isMethod)||this.error(\"cannot use super outside of an instance method\"),null==t.ctor&&null==this.accessor){var c=t;o=c.name,i=c.variable,(o.shouldCache()||o instanceof V&&o.index.isAssignable())&&(n=new R(e.scope.parent.freeVariable(\"name\")),o.index=new d(n,o.index)),this.accessor=null==n?o:new V(n)}return(null==(r=this.accessor)||null==(l=r.name)?void 0:l.comments)&&(s=this.accessor.name.comments,delete this.accessor.name.comments),a=new Le(new K(\"super\"),this.accessor?[this.accessor]:[]).compileToFragments(e),s&&Me(s,this.accessor.name),a}}]),a}(l);return e.prototype.children=[\"accessor\"],e}.call(this),e.RegexWithInterpolations=he=function(e){function a(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,new Le(new R(\"RegExp\")),e,!1))}return _inherits(a,e),a}(u),e.TaggedTemplateCall=xe=function(e){function a(e,t,o){return _classCallCheck(this,a),t instanceof ve&&(t=new be(c.wrap([new Le(t)]))),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,e,[t],o))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return this.variable.compileToFragments(e,H).concat(this.args[0].compileToFragments(e,X))}}]),a}(u),e.Extends=E=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.child=e,o.parent=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e){return new u(new Le(new K(sa(\"extend\",e))),[this.child,this.parent]).compileToFragments(e)}}]),a}(l);return e.prototype.children=[\"child\",\"parent\"],e}.call(this),e.Access=r=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.name=e,o.soak=\"soak\"===t,o}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e){var a,t;return a=this.name.compileToFragments(e),t=this.name.unwrap(),t instanceof pe?[this.makeCode(\".\")].concat(_toConsumableArray(a)):[this.makeCode(\"[\")].concat(_toConsumableArray(a),[this.makeCode(\"]\")])}}]),a}(l);return e.prototype.children=[\"name\"],e.prototype.shouldCache=te,e}.call(this),e.Index=V=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.index=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e){return[].concat(this.makeCode(\"[\"),this.index.compileToFragments(e,q),this.makeCode(\"]\"))}},{key:\"shouldCache\",value:function shouldCache(){return this.index.shouldCache()}}]),a}(l);return e.prototype.children=[\"index\"],e}.call(this),e.Range=ue=function(){var e=function(e){function a(e,t,o){_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.from=e,n.to=t,n.exclusive=\"exclusive\"===o,n.equals=n.exclusive?\"\":\"=\",n}return _inherits(a,e),_createClass(a,[{key:\"compileVariables\",value:function compileVariables(e){var a,t;e=Ze(e,{top:!0}),a=Ve(e,\"shouldCache\");var o=this.cacheToCodeFragments(this.from.cache(e,X,a)),n=_slicedToArray(o,2);this.fromC=n[0],this.fromVar=n[1];var r=this.cacheToCodeFragments(this.to.cache(e,X,a)),l=_slicedToArray(r,2);if(this.toC=l[0],this.toVar=l[1],t=Ve(e,\"step\")){var s=this.cacheToCodeFragments(t.cache(e,X,a)),i=_slicedToArray(s,2);this.step=i[0],this.stepVar=i[1]}return this.fromNum=this.from.isNumber()?+this.fromVar:null,this.toNum=this.to.isNumber()?+this.toVar:null,this.stepNum=(null==t?void 0:t.isNumber())?+this.stepVar:null}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s,i,d,c,p,u,m,h,g;if(this.fromVar||this.compileVariables(e),!e.index)return this.compileArray(e);s=null!=this.fromNum&&null!=this.toNum,r=Ve(e,\"index\"),l=Ve(e,\"name\"),c=l&&l!==r,g=s&&!c?\"var \"+r+\" = \"+this.fromC:r+\" = \"+this.fromC,this.toC!==this.toVar&&(g+=\", \"+this.toC),this.step!==this.stepVar&&(g+=\", \"+this.step),d=r+\" <\"+this.equals,n=r+\" >\"+this.equals;var f=[this.fromNum,this.toNum];return o=f[0],m=f[1],p=this.stepNum?this.stepNum+\" !== 0\":this.stepVar+\" !== 0\",t=s?null==this.step?o<=m?d+\" \"+m:n+\" \"+m:(i=o+\" <= \"+r+\" && \"+d+\" \"+m,h=o+\" >= \"+r+\" && \"+n+\" \"+m,o<=m?p+\" && \"+i:p+\" && \"+h):(i=this.fromVar+\" <= \"+r+\" && \"+d+\" \"+this.toVar,h=this.fromVar+\" >= \"+r+\" && \"+n+\" \"+this.toVar,p+\" && (\"+this.fromVar+\" <= \"+this.toVar+\" ? \"+i+\" : \"+h+\")\"),a=this.stepVar?this.stepVar+\" > 0\":this.fromVar+\" <= \"+this.toVar,u=this.stepVar?r+\" += \"+this.stepVar:s?c?o<=m?\"++\"+r:\"--\"+r:o<=m?r+\"++\":r+\"--\":c?a+\" ? ++\"+r+\" : --\"+r:a+\" ? \"+r+\"++ : \"+r+\"--\",c&&(g=l+\" = \"+g),c&&(u=l+\" = \"+u),[this.makeCode(g+\"; \"+t+\"; \"+u)]}},{key:\"compileArray\",value:function compileArray(e){var a,t,o,n,r,l,s,i,d,c,p,u,m;return(s=null!=this.fromNum&&null!=this.toNum,s&&20>=_Mathabs(this.fromNum-this.toNum))?(c=function(){for(var e=[],a=p=this.fromNum,t=this.toNum;p<=t?a<=t:a>=t;p<=t?a++:a--)e.push(a);return e}.apply(this),this.exclusive&&c.pop(),[this.makeCode(\"[\"+c.join(\", \")+\"]\")]):(l=this.tab+De,r=e.scope.freeVariable(\"i\",{single:!0,reserve:!1}),u=e.scope.freeVariable(\"results\",{reserve:!1}),d=\"\\n\"+l+\"var \"+u+\" = [];\",s?(e.index=r,t=We(this.compileNode(e))):(m=r+\" = \"+this.fromC+(this.toC===this.toVar?\"\":\", \"+this.toC),o=this.fromVar+\" <= \"+this.toVar,t=\"var \"+m+\"; \"+o+\" ? \"+r+\" <\"+this.equals+\" \"+this.toVar+\" : \"+r+\" >\"+this.equals+\" \"+this.toVar+\"; \"+o+\" ? \"+r+\"++ : \"+r+\"--\"),i=\"{ \"+u+\".push(\"+r+\"); }\\n\"+l+\"return \"+u+\";\\n\"+e.indent,n=function(e){return null==e?void 0:e.contains(qe)},(n(this.from)||n(this.to))&&(a=\", arguments\"),[this.makeCode(\"(function() {\"+d+\"\\n\"+l+\"for (\"+t+\")\"+i+\"}).apply(this\"+(null==a?\"\":a)+\")\")])}}]),a}(l);return e.prototype.children=[\"from\",\"to\"],e}.call(this),e.Slice=ke=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.range=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a=this.range,t,o,n,r,l,s;return l=a.to,n=a.from,(null==n?void 0:n.shouldCache())&&(n=new Le(new de(n))),(null==l?void 0:l.shouldCache())&&(l=new Le(new de(l))),r=(null==n?void 0:n.compileToFragments(e,q))||[this.makeCode(\"0\")],l&&(t=l.compileToFragments(e,q),o=We(t),(this.range.exclusive||-1!=+o)&&(s=\", \"+(this.range.exclusive?o:l.isNumber()?\"\"+(+o+1):(t=l.compileToFragments(e,H),\"+\"+We(t)+\" + 1 || 9e9\")))),[this.makeCode(\".slice(\"+We(r)+(s||\"\")+\")\")]}}]),a}(l);return e.prototype.children=[\"range\"],e}.call(this),e.Obj=le=function(){var e=function(e){function a(e){var t=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],o=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2];_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.generated=t,n.lhs=o,n.objects=n.properties=e||[],n}return _inherits(a,e),_createClass(a,[{key:\"isAssignable\",value:function isAssignable(){var e,a,t,o,n;for(n=this.properties,e=0,a=n.length;e<a;e++)if(o=n[e],t=Je(o.unwrapAll().value),t&&o.error(t),o instanceof d&&\"object\"===o.context&&(o=o.value),!o.isAssignable())return!1;return!0}},{key:\"shouldCache\",value:function shouldCache(){return!this.isAssignable()}},{key:\"hasSplat\",value:function hasSplat(){var e,a,t,o;for(o=this.properties,e=0,a=o.length;e<a;e++)if(t=o[e],t instanceof Te)return!0;return!1}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r,i,c,p,u,m,h,l,g,y,k,T,N,v,b,$,_,C,D;if(b=this.properties,this.generated)for(c=0,g=b.length;c<g;c++)N=b[c],N instanceof Le&&N.error(\"cannot have an implicit value in an implicit object\");if(this.hasSplat()&&!this.csx)return this.compileSpread(e);if(n=e.indent+=De,l=this.lastNode(this.properties),this.csx)return this.compileCSXAttributes(e);if(this.lhs)for(u=0,y=b.length;u<y;u++)if(v=b[u],!!(v instanceof d)){var E=v;D=E.value,C=D.unwrapAll(),C instanceof s||C instanceof a?C.lhs=!0:C instanceof d&&(C.nestedLhs=!0)}for(i=!0,_=this.properties,h=0,k=_.length;h<k;h++)v=_[h],v instanceof d&&\"object\"===v.context&&(i=!1);for(t=[],t.push(this.makeCode(i?\"\":\"\\n\")),o=$=0,T=b.length;$<T;o=++$){var x;if(v=b[o],p=o===b.length-1?\"\":i?\", \":v===l?\"\\n\":\",\\n\",r=i?\"\":n,m=v instanceof d&&\"object\"===v.context?v.variable:v instanceof d?(this.lhs?void 0:v.operatorToken.error(\"unexpected \"+v.operatorToken.value),v.variable):v,m instanceof Le&&m.hasProperties()&&((\"object\"===v.context||!m.this)&&m.error(\"invalid object key\"),m=m.properties[0].name,v=new d(m,v,\"object\")),m===v)if(v.shouldCache()){var I=v.base.cache(e),S=_slicedToArray(I,2);m=S[0],D=S[1],m instanceof R&&(m=new pe(m.value)),v=new d(m,D,\"object\")}else if(!(m instanceof Le&&m.base instanceof f))\"function\"==typeof v.bareLiteral&&v.bareLiteral(R)||(v=new d(v,v,\"object\"));else if(v.base.value.shouldCache()){var A=v.base.value.cache(e),O=_slicedToArray(A,2);m=O[0],D=O[1],m instanceof R&&(m=new f(m.value)),v=new d(m,D,\"object\")}else v=new d(m,v.base.value,\"object\");r&&t.push(this.makeCode(r)),(x=t).push.apply(x,_toConsumableArray(v.compileToFragments(e,z))),p&&t.push(this.makeCode(p))}return t.push(this.makeCode(i?\"\":\"\\n\"+this.tab)),t=this.wrapInBraces(t),this.front?this.wrapInParentheses(t):t}},{key:\"assigns\",value:function assigns(e){var a,t,o,n;for(n=this.properties,a=0,t=n.length;a<t;a++)if(o=n[a],o.assigns(e))return!0;return!1}},{key:\"eachName\",value:function eachName(e){var a,t,o,n,r;for(n=this.properties,r=[],a=0,t=n.length;a<t;a++)o=n[a],o instanceof d&&\"object\"===o.context&&(o=o.value),o=o.unwrapAll(),null==o.eachName?r.push(void 0):r.push(o.eachName(e));return r}},{key:\"compileSpread\",value:function compileSpread(e){var t,o,n,r,l,s,i,d,c;for(i=this.properties,c=[],s=[],d=[],o=function(){if(s.length&&d.push(new a(s)),c.length){var e;(e=d).push.apply(e,_toConsumableArray(c))}return c=[],s=[]},n=0,r=i.length;n<r;n++)l=i[n],l instanceof Te?(c.push(new Le(l.name)),o()):s.push(l);return o(),d[0]instanceof a||d.unshift(new a),t=new Le(new K(sa(\"_extends\",e))),new u(t,d).compileToFragments(e)}},{key:\"compileCSXAttributes\",value:function compileCSXAttributes(e){var a,t,o,n,r,l,s;for(s=this.properties,a=[],t=o=0,r=s.length;o<r;t=++o){var i;l=s[t],l.csx=!0,n=t===s.length-1?\"\":\" \",l instanceof Te&&(l=new K(\"{\"+l.compile(e)+\"}\")),(i=a).push.apply(i,_toConsumableArray(l.compileToFragments(e,z))),a.push(this.makeCode(n))}return this.front?this.wrapInParentheses(a):a}}]),a}(l);return e.prototype.children=[\"properties\"],e}.call(this),e.Arr=s=function(){var e=function(e){function t(e){var a=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1];_classCallCheck(this,t);var o=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return o.lhs=a,o.objects=e||[],o}return _inherits(t,e),_createClass(t,[{key:\"hasElision\",value:function hasElision(){var e,a,t,o;for(o=this.objects,e=0,a=o.length;e<a;e++)if(t=o[e],t instanceof y)return!0;return!1}},{key:\"isAssignable\",value:function isAssignable(){var e,a,t,o,n;if(!this.objects.length)return!1;for(n=this.objects,e=a=0,t=n.length;a<t;e=++a){if(o=n[e],o instanceof Te&&e+1!==this.objects.length)return!1;if(!(o.isAssignable()&&(!o.isAtomic||o.isAtomic())))return!1}return!0}},{key:\"shouldCache\",value:function shouldCache(){return!this.isAssignable()}},{key:\"compileNode\",value:function compileNode(e){var o,n,s,i,d,c,p,u,m,h,g,l,f,y,k,T,N,v,b,$,_,C,r,D;if(!this.objects.length)return[this.makeCode(\"[]\")];for(e.indent+=De,d=function(e){return\",\"===We(e).trim()},$=!1,o=[],r=this.objects,v=m=0,l=r.length;m<l;v=++m)N=r[v],D=N.unwrapAll(),D.comments&&0===D.comments.filter(function(e){return!e.here}).length&&(D.includeCommentFragments=we),this.lhs&&(D instanceof t||D instanceof le)&&(D.lhs=!0);for(n=function(){var a,t,o,n;for(o=this.objects,n=[],a=0,t=o.length;a<t;a++)N=o[a],n.push(N.compileToFragments(e,X));return n}.call(this),b=n.length,p=!1,u=h=0,f=n.length;h<f;u=++h){var E;for(c=n[u],g=0,y=c.length;g<y;g++)s=c[g],s.isHereComment?s.code=s.code.trim():0!==u&&!1===p&&Xe(s)&&(p=!0);0!==u&&$&&(!d(c)||u===b-1)&&o.push(this.makeCode(\", \")),$=$||!d(c),(E=o).push.apply(E,_toConsumableArray(c))}if(p||0<=a.call(We(o),\"\\n\")){for(i=_=0,k=o.length;_<k;i=++_)s=o[i],s.isHereComment?s.code=ea(s.code,e.indent,!1)+\"\\n\"+e.indent:\", \"===s.code&&(null==s||!s.isElision)&&(s.code=\",\\n\"+e.indent);o.unshift(this.makeCode(\"[\\n\"+e.indent)),o.push(this.makeCode(\"\\n\"+this.tab+\"]\"))}else{for(C=0,T=o.length;C<T;C++)s=o[C],s.isHereComment&&(s.code+=\" \");o.unshift(this.makeCode(\"[\")),o.push(this.makeCode(\"]\"))}return o}},{key:\"assigns\",value:function assigns(e){var a,t,o,n;for(n=this.objects,a=0,t=n.length;a<t;a++)if(o=n[a],o.assigns(e))return!0;return!1}},{key:\"eachName\",value:function eachName(e){var a,t,o,n,r;for(n=this.objects,r=[],a=0,t=n.length;a<t;a++)o=n[a],o=o.unwrapAll(),r.push(o.eachName(e));return r}}]),t}(l);return e.prototype.children=[\"objects\"],e}.call(this),e.Class=m=function(){var e=function(e){function o(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:new c;_classCallCheck(this,o);var n=_possibleConstructorReturn(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));return n.variable=e,n.parent=a,n.body=t,n}return _inherits(o,e),_createClass(o,[{key:\"compileNode\",value:function compileNode(e){var a,t,o;if(this.name=this.determineName(),a=this.walkBody(),this.parent instanceof Le&&!this.parent.hasProperties()&&(o=this.parent.base.value),this.hasNameClash=null!=this.name&&this.name===o,t=this,a||this.hasNameClash?t=new k(t,a):null==this.name&&e.level===z&&(t=new de(t)),this.boundMethods.length&&this.parent&&(null==this.variable&&(this.variable=new R(e.scope.freeVariable(\"_class\"))),null==this.variableRef)){var n=this.variable.cache(e),r=_slicedToArray(n,2);this.variable=r[0],this.variableRef=r[1]}this.variable&&(t=new d(this.variable,t,null,{moduleDeclaration:this.moduleDeclaration})),this.compileNode=this.compileClassDeclaration;try{return t.compileToFragments(e)}finally{delete this.compileNode}}},{key:\"compileClassDeclaration\",value:function compileClassDeclaration(e){var a,t,o;if((this.externalCtor||this.boundMethods.length)&&null==this.ctor&&(this.ctor=this.makeDefaultConstructor()),null!=(a=this.ctor)&&(a.noReturn=!0),this.boundMethods.length&&this.proxyBoundMethods(),e.indent+=De,o=[],o.push(this.makeCode(\"class \")),this.name&&o.push(this.makeCode(this.name)),null!=(null==(t=this.variable)?void 0:t.comments)&&this.compileCommentFragments(e,this.variable,o),this.name&&o.push(this.makeCode(\" \")),this.parent){var n;(n=o).push.apply(n,[this.makeCode(\"extends \")].concat(_toConsumableArray(this.parent.compileToFragments(e)),[this.makeCode(\" \")]))}if(o.push(this.makeCode(\"{\")),!this.body.isEmpty()){var r;this.body.spaced=!0,o.push(this.makeCode(\"\\n\")),(r=o).push.apply(r,_toConsumableArray(this.body.compileToFragments(e,z))),o.push(this.makeCode(\"\\n\"+this.tab))}return o.push(this.makeCode(\"}\")),o}},{key:\"determineName\",value:function determineName(){var e,t,o,l,s,i,d;return this.variable?(i=this.variable.properties,e=n.call(i,-1),t=_slicedToArray(e,1),d=t[0],e,s=d?d instanceof r&&d.name:this.variable.base,!(s instanceof R||s instanceof pe))?null:(l=s.value,d||(o=Je(l),o&&this.variable.error(o)),0<=a.call(G,l)?\"_\"+l:l):null}},{key:\"walkBody\",value:function walkBody(){var e,a,o,n,r,l,s,i,d,p,u,m,g,f,y,k,T,N;for(this.ctor=null,this.boundMethods=[],o=null,i=[],r=this.body.expressions,s=0,T=r.slice(),p=0,m=T.length;p<m;p++)if(n=T[p],n instanceof Le&&n.isObject(!0)){for(y=n.base.properties,l=[],a=0,N=0,k=function(){if(a>N)return l.push(new Le(new le(y.slice(N,a),!0)))};e=y[a];)(d=this.addInitializerExpression(e))&&(k(),l.push(d),i.push(d),N=a+1),a++;k(),t.apply(r,[s,s-s+1].concat(l)),l,s+=l.length}else(d=this.addInitializerExpression(n))&&(i.push(d),r[s]=d),s+=1;for(u=0,g=i.length;u<g;u++)f=i[u],f instanceof h&&(f.ctor?(this.ctor&&f.error(\"Cannot define more than one constructor in a class\"),this.ctor=f):f.isStatic&&f.bound?f.context=this.name:f.bound&&this.boundMethods.push(f));if(i.length!==r.length)return this.body.expressions=function(){var e,a,t;for(t=[],e=0,a=i.length;e<a;e++)n=i[e],t.push(n.hoist());return t}(),new c(r)}},{key:\"addInitializerExpression\",value:function addInitializerExpression(e){return e.unwrapAll()instanceof ce?e:this.validInitializerMethod(e)?this.addInitializerMethod(e):null}},{key:\"validInitializerMethod\",value:function validInitializerMethod(e){return!!(e instanceof d&&e.value instanceof h)&&(!(\"object\"!==e.context||e.variable.hasProperties())||e.variable.looksStatic(this.name)&&(this.name||!e.value.bound))}},{key:\"addInitializerMethod\",value:function addInitializerMethod(e){var a,t,o;return o=e.variable,a=e.value,a.isMethod=!0,a.isStatic=o.looksStatic(this.name),a.isStatic?a.name=o.properties[0]:(t=o.base,a.name=new(t.shouldCache()?V:r)(t),a.name.updateLocationDataIfMissing(t.locationData),\"constructor\"===t.value&&(a.ctor=this.parent?\"derived\":\"base\"),a.bound&&a.ctor&&a.error(\"Cannot define a constructor as a bound (fat arrow) function\")),a}},{key:\"makeDefaultConstructor\",value:function makeDefaultConstructor(){var e,a,t;return t=this.addInitializerMethod(new d(new Le(new pe(\"constructor\")),new h)),this.body.unshift(t),this.parent&&t.body.push(new _e(new $e,[new Te(new R(\"arguments\"))])),this.externalCtor&&(a=new Le(this.externalCtor,[new r(new pe(\"apply\"))]),e=[new Ie,new R(\"arguments\")],t.body.push(new u(a,e)),t.body.makeReturn()),t}},{key:\"proxyBoundMethods\",value:function proxyBoundMethods(){var e,a;return this.ctor.thisAssignments=function(){var t,o,n,l;for(n=this.boundMethods,l=[],t=0,o=n.length;t<o;t++)e=n[t],this.parent&&(e.classVariable=this.variableRef),a=new Le(new Ie,[e.name]),l.push(new d(a,new u(new Le(a,[new r(new pe(\"bind\"))]),[new Ie])));return l}.call(this),null}}]),o}(l);return e.prototype.children=[\"variable\",\"parent\",\"body\"],e}.call(this),e.ExecutableClassBody=k=function(){var e=function(e){function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:new c;_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.class=e,o.body=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,l,s,i,c,p,m,g,f;return(i=this.body.jumps())&&i.error(\"Class bodies cannot contain pure statements\"),(o=this.body.contains(qe))&&o.error(\"Class bodies shouldn't reference arguments\"),p=[],t=[new Ie],f=new h(p,this.body),c=new de(new u(new Le(f,[new r(new pe(\"call\"))]),t)),this.body.spaced=!0,e.classScope=f.makeScope(e.scope),this.name=null==(g=this.class.name)?e.classScope.freeVariable(this.defaultClassVariableName):g,s=new R(this.name),n=this.walkBody(),this.setContext(),this.class.hasNameClash&&(m=new R(e.classScope.freeVariable(\"superClass\")),f.params.push(new ie(m)),t.push(this.class.parent),this.class.parent=m),this.externalCtor&&(l=new R(e.classScope.freeVariable(\"ctor\",{reserve:!1})),this.class.externalCtor=l,this.externalCtor.variable.base=l),this.name===this.class.name?this.body.expressions.unshift(this.class):this.body.expressions.unshift(new d(new R(this.name),this.class)),(a=this.body.expressions).unshift.apply(a,_toConsumableArray(n)),this.body.push(s),c.compileToFragments(e)}},{key:\"walkBody\",value:function walkBody(){var e=this,a,t,o;for(a=[],o=0;(t=this.body.expressions[o])&&!!(t instanceof Le&&t.isString());)if(t.hoisted)o++;else{var n;(n=a).push.apply(n,_toConsumableArray(this.body.expressions.splice(o,1)))}return this.traverseChildren(!1,function(a){var t,o,n,r,l,s;if(a instanceof m||a instanceof A)return!1;if(t=!0,a instanceof c){for(s=a.expressions,o=n=0,r=s.length;n<r;o=++n)l=s[o],l instanceof Le&&l.isObject(!0)?(t=!1,a.expressions[o]=e.addProperties(l.base.properties)):l instanceof d&&l.variable.looksStatic(e.name)&&(l.value.isStatic=!0);a.expressions=He(a.expressions)}return t}),a}},{key:\"setContext\",value:function setContext(){var e=this;return this.body.traverseChildren(!1,function(a){return a instanceof Ie?a.value=e.name:a instanceof h&&a.bound&&a.isStatic?a.context=e.name:void 0})}},{key:\"addProperties\",value:function addProperties(e){var a,t,o,n,l,s,i;return l=function(){var l,c,p;for(p=[],l=0,c=e.length;l<c;l++)a=e[l],i=a.variable,t=null==i?void 0:i.base,s=a.value,delete a.context,\"constructor\"===t.value?(s instanceof h&&t.error(\"constructors must be defined at the top level of a class body\"),a=this.externalCtor=new d(new Le,s)):a.variable.this?a.value instanceof h&&(a.value.isStatic=!0):(o=new(t.shouldCache()?V:r)(t),n=new r(new pe(\"prototype\")),i=new Le(new Ie,[n,o]),a.variable=i),p.push(a);return p}.call(this),Ue(l)}}]),a}(l);return e.prototype.children=[\"class\",\"body\"],e.prototype.defaultClassVariableName=\"_Class\",e}.call(this),e.ModuleDeclaration=Z=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.clause=e,o.source=t,o.checkSource(),o}return _inherits(a,e),_createClass(a,[{key:\"checkSource\",value:function checkSource(){if(null!=this.source&&this.source instanceof be)return this.source.error(\"the name of the module to be imported from must be an uninterpolated string\")}},{key:\"checkScope\",value:function checkScope(e,a){if(0!==e.indent.length)return this.error(a+\" statements must be at top-level scope\")}}]),a}(l);return e.prototype.children=[\"clause\",\"source\"],e.prototype.isStatement=we,e.prototype.jumps=Ee,e.prototype.makeReturn=Ee,e}.call(this),e.ImportDeclaration=F=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t;if(this.checkScope(e,\"import\"),e.importedSymbols=[],a=[],a.push(this.makeCode(this.tab+\"import \")),null!=this.clause){var o;(o=a).push.apply(o,_toConsumableArray(this.clause.compileNode(e)))}return null!=(null==(t=this.source)?void 0:t.value)&&(null!==this.clause&&a.push(this.makeCode(\" from \")),a.push(this.makeCode(this.source.value))),a.push(this.makeCode(\";\")),a}}]),a}(Z),e.ImportClause=L=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.defaultBinding=e,o.namedImports=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;if(a=[],null!=this.defaultBinding){var t;(t=a).push.apply(t,_toConsumableArray(this.defaultBinding.compileNode(e))),null!=this.namedImports&&a.push(this.makeCode(\", \"))}if(null!=this.namedImports){var o;(o=a).push.apply(o,_toConsumableArray(this.namedImports.compileNode(e)))}return a}}]),a}(l);return e.prototype.children=[\"defaultBinding\",\"namedImports\"],e}.call(this),e.ExportDeclaration=b=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t;return this.checkScope(e,\"export\"),a=[],a.push(this.makeCode(this.tab+\"export \")),this instanceof $&&a.push(this.makeCode(\"default \")),!(this instanceof $)&&(this.clause instanceof d||this.clause instanceof m)&&(this.clause instanceof m&&!this.clause.variable&&this.clause.error(\"anonymous classes cannot be exported\"),a.push(this.makeCode(\"var \")),this.clause.moduleDeclaration=\"export\"),a=null!=this.clause.body&&this.clause.body instanceof c?a.concat(this.clause.compileToFragments(e,z)):a.concat(this.clause.compileNode(e)),null!=(null==(t=this.source)?void 0:t.value)&&a.push(this.makeCode(\" from \"+this.source.value)),a.push(this.makeCode(\";\")),a}}]),a}(Z),e.ExportNamedDeclaration=_=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(b),e.ExportDefaultDeclaration=$=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(b),e.ExportAllDeclaration=v=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(b),e.ModuleSpecifierList=ee=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.specifiers=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s;if(a=[],e.indent+=De,t=function(){var a,t,o,n;for(o=this.specifiers,n=[],a=0,t=o.length;a<t;a++)s=o[a],n.push(s.compileToFragments(e,X));return n}.call(this),0!==this.specifiers.length){for(a.push(this.makeCode(\"{\\n\"+e.indent)),n=r=0,l=t.length;r<l;n=++r){var i;o=t[n],n&&a.push(this.makeCode(\",\\n\"+e.indent)),(i=a).push.apply(i,_toConsumableArray(o))}a.push(this.makeCode(\"\\n}\"))}else a.push(this.makeCode(\"{}\"));return a}}]),a}(l);return e.prototype.children=[\"specifiers\"],e}.call(this),e.ImportSpecifierList=M=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(ee),e.ExportSpecifierList=D=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(ee),e.ModuleSpecifier=Q=function(){var e=function(e){function a(e,t,o){_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),r,l;if(n.original=e,n.alias=t,n.moduleDeclarationType=o,n.original.comments||(null==(r=n.alias)?void 0:r.comments)){if(n.comments=[],n.original.comments){var s;(s=n.comments).push.apply(s,_toConsumableArray(n.original.comments))}if(null==(l=n.alias)?void 0:l.comments){var i;(i=n.comments).push.apply(i,_toConsumableArray(n.alias.comments))}}return n.identifier=null==n.alias?n.original.value:n.alias.value,n}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;return e.scope.find(this.identifier,this.moduleDeclarationType),a=[],a.push(this.makeCode(this.original.value)),null!=this.alias&&a.push(this.makeCode(\" as \"+this.alias.value)),a}}]),a}(l);return e.prototype.children=[\"original\",\"alias\"],e}.call(this),e.ImportSpecifier=j=function(e){function t(e,a){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a,\"import\"))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function compileNode(e){var o;return(o=this.identifier,0<=a.call(e.importedSymbols,o))||e.scope.check(this.identifier)?this.error(\"'\"+this.identifier+\"' has already been declared\"):e.importedSymbols.push(this.identifier),_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,e)}}]),t}(Q),e.ImportDefaultSpecifier=w=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(j),e.ImportNamespaceSpecifier=P=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(j),e.ExportSpecifier=C=function(e){function a(e,t){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,e,t,\"export\"))}return _inherits(a,e),a}(Q),e.Assign=d=function(){var e=function(e){function n(e,a,t){var o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};_classCallCheck(this,n);var r=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.variable=e,r.value=a,r.context=t,r.param=o.param,r.subpattern=o.subpattern,r.operatorToken=o.operatorToken,r.moduleDeclaration=o.moduleDeclaration,r}return _inherits(n,e),_createClass(n,[{key:\"isStatement\",value:function isStatement(e){return(null==e?void 0:e.level)===z&&null!=this.context&&(this.moduleDeclaration||0<=a.call(this.context,\"?\"))}},{key:\"checkAssignability\",value:function checkAssignability(e,a){if(Object.prototype.hasOwnProperty.call(e.scope.positions,a.value)&&\"import\"===e.scope.variables[e.scope.positions[a.value]].type)return a.error(\"'\"+a.value+\"' is read-only\")}},{key:\"assigns\",value:function assigns(e){return this[\"object\"===this.context?\"value\":\"variable\"].assigns(e)}},{key:\"unfoldSoak\",value:function unfoldSoak(e){return ra(e,this,\"variable\")}},{key:\"compileNode\",value:function compileNode(e){var a=this,o,n,r,l,s,i,d,c,p,u,g,f,y,k,T;if(l=this.variable instanceof Le,l){if(this.variable.param=this.param,this.variable.isArray()||this.variable.isObject()){if(this.variable.base.lhs=!0,r=this.variable.contains(function(e){return e instanceof le&&e.hasSplat()}),!this.variable.isAssignable()||this.variable.isArray()&&r)return this.compileDestructuring(e);if(this.variable.isObject()&&r&&(i=this.compileObjectDestruct(e)),i)return i}if(this.variable.isSplice())return this.compileSplice(e);if(\"||=\"===(p=this.context)||\"&&=\"===p||\"?=\"===p)return this.compileConditional(e);if(\"**=\"===(u=this.context)||\"//=\"===u||\"%%=\"===u)return this.compileSpecialMath(e)}if(this.context||(T=this.variable.unwrapAll(),!T.isAssignable()&&this.variable.error(\"'\"+this.variable.compile(e)+\"' can't be assigned\"),T.eachName(function(t){var o,n,r;if(\"function\"!=typeof t.hasProperties||!t.hasProperties())return(r=Je(t.value),r&&t.error(r),a.checkAssignability(e,t),a.moduleDeclaration)?e.scope.add(t.value,a.moduleDeclaration):a.param?e.scope.add(t.value,\"alwaysDeclare\"===a.param?\"var\":\"param\"):(e.scope.find(t.value),t.comments&&!e.scope.comments[t.value]&&!(a.value instanceof m)&&t.comments.every(function(e){return e.here&&!e.multiline}))?(n=new R(t.value),n.comments=t.comments,o=[],a.compileCommentFragments(e,n,o),e.scope.comments[t.value]=o):void 0})),this.value instanceof h)if(this.value.isStatic)this.value.name=this.variable.properties[0];else if(2<=(null==(g=this.variable.properties)?void 0:g.length)){var N,v,b,$;f=this.variable.properties,N=f,v=_toArray(N),d=v.slice(0),N,b=t.call(d,-2),$=_slicedToArray(b,2),c=$[0],s=$[1],b,\"prototype\"===(null==(y=c.name)?void 0:y.value)&&(this.value.name=s)}return(this.csx&&(this.value.base.csxAttribute=!0),k=this.value.compileToFragments(e,X),n=this.variable.compileToFragments(e,X),\"object\"===this.context)?(this.variable.shouldCache()&&(n.unshift(this.makeCode(\"[\")),n.push(this.makeCode(\"]\"))),n.concat(this.makeCode(this.csx?\"=\":\": \"),k)):(o=n.concat(this.makeCode(\" \"+(this.context||\"=\")+\" \"),k),e.level>X||l&&this.variable.base instanceof le&&!this.nestedLhs&&!0!==this.param?this.wrapInParentheses(o):o)}},{key:\"compileObjectDestruct\",value:function compileObjectDestruct(e){var a,t,o,l,i,d,p,m,h,g,f,y;if(t=function(a){var t;if(a instanceof n){var o=a.variable.cache(e),r=_slicedToArray(o,2);return a.variable=r[0],t=r[1],t}return a},o=function(a){var o,r;return r=t(a),o=a instanceof n&&a.variable!==r,o||!r.isAssignable()?r:new K(\"'\"+r.compileWithoutComments(e)+\"'\")},h=function traverseRest(a,l){var i,d,c,u,m,g,f,y,p,k,T;for(k=[],T=void 0,null==l.properties&&(l=new Le(l)),d=c=0,u=a.length;c<u;d=++c)if(p=a[d],f=g=m=null,p instanceof n){if(\"function\"==typeof(i=p.value).isObject?i.isObject():void 0){if(\"object\"!==p.context)continue;m=p.value.base.properties}else if(p.value instanceof n&&p.value.variable.isObject()){m=p.value.variable.base.properties;var N=p.value.value.cache(e),v=_slicedToArray(N,2);p.value.value=v[0],f=v[1]}if(m){var b;g=new Le(l.base,l.properties.concat([new r(t(p))])),f&&(g=new Le(new se(\"?\",g,f))),(b=k).push.apply(b,_toConsumableArray(h(m,g)))}}else p instanceof Te&&(null!=T&&p.error(\"multiple rest elements are disallowed in object destructuring\"),T=d,k.push({name:p.name.unwrapAll(),source:l,excludeProps:new s(function(){var e,t,n;for(n=[],e=0,t=a.length;e<t;e++)y=a[e],y!==p&&n.push(o(y));return n}())}));return null!=T&&a.splice(T,1),k},y=this.value.shouldCache()?new R(e.scope.freeVariable(\"ref\",{reserve:!1})):this.value.base,p=h(this.variable.base.properties,y),!(p&&0<p.length))return!1;var k=this.value.cache(e),T=_slicedToArray(k,2);for(this.value=T[0],f=T[1],m=new c([this]),l=0,i=p.length;l<i;l++)d=p[l],g=new u(new Le(new K(sa(\"objectWithoutKeys\",e))),[d.source,d.excludeProps]),m.push(new n(new Le(d.name),g,null,{param:this.param?\"alwaysDeclare\":null}));return a=m.compileToFragments(e),e.level===z&&(a.shift(),a.pop()),a}},{key:\"compileDestructuring\",value:function compileDestructuring(e){var t=this,o,l,d,c,p,m,h,g,f,k,T,v,i,b,$,_,C,D,E,x,I,S,A,O,L,F,w,P,j,M,U,B,G,H;if(U=e.level===z,B=this.value,I=this.variable.base.objects,S=I.length,0===S)return d=B.compileToFragments(e),e.level>=Y?this.wrapInParentheses(d):d;var W=I,q=_slicedToArray(W,1);return E=q[0],1===S&&E instanceof N&&E.error(\"Destructuring assignment has no target\"),j=function(){var e,a,t;for(t=[],v=e=0,a=I.length;e<a;v=++e)E=I[v],E instanceof Te&&t.push(v);return t}(),g=function(){var e,a,t;for(t=[],v=e=0,a=I.length;e<a;v=++e)E=I[v],E instanceof N&&t.push(v);return t}(),M=[].concat(_toConsumableArray(j),_toConsumableArray(g)),1<M.length&&I[M.sort()[1]].error(\"multiple splats/expansions are disallowed in an assignment\"),_=0<(null==j?void 0:j.length),b=0<(null==g?void 0:g.length),$=this.variable.isObject(),i=this.variable.isArray(),G=B.compileToFragments(e,X),H=We(G),l=[],(!(B.unwrap()instanceof R)||this.variable.assigns(H))&&(O=e.scope.freeVariable(\"ref\"),l.push([this.makeCode(O+\" = \")].concat(_toConsumableArray(G))),G=[this.makeCode(O)],H=O),P=function(a){return function(t,o){var n=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],l,s;return l=[new R(t),new re(o)],n&&l.push(new re(n)),s=new Le(new R(sa(a,e)),[new r(new pe(\"call\"))]),new Le(new u(s,l))}},c=P(\"slice\"),p=P(\"splice\"),T=function(e){var a,t,o;for(o=[],v=a=0,t=e.length;a<t;v=++a)E=e[v],E.base instanceof le&&E.base.hasSplat()&&o.push(v);return o},k=function(e){var a,t,o;for(o=[],v=a=0,t=e.length;a<t;v=++a)E=e[v],E instanceof n&&\"object\"===E.context&&o.push(v);return o},x=function(e){var a,t;for(a=0,t=e.length;a<t;a++)if(E=e[a],!E.isAssignable())return!0;return!1},m=function(e){return T(e).length||k(e).length||x(e)||1===S},D=function(o,s,i){var d,p,u,m,h,g,f,k;for(g=T(o),f=[],v=u=0,m=o.length;u<m;v=++u)if(E=o[v],!(E instanceof y)){if(E instanceof n&&\"object\"===E.context){var N=E;if(p=N.variable.base,s=N.value,s instanceof n){var b=s;s=b.variable}p=s.this?s.properties[0].name:new pe(s.unwrap().value),d=p.unwrap()instanceof pe,k=new Le(B,[new(d?r:V)(p)])}else s=function(){switch(!1){case!(E instanceof Te):return new Le(E.name);case 0>a.call(g,v):return new Le(E.base);default:return E}}(),k=function(){switch(!1){case!(E instanceof Te):return c(i,v);default:return new Le(new K(i),[new V(new re(v))])}}();h=Je(s.unwrap().value),h&&s.error(h),f.push(l.push(new n(s,k,null,{param:t.param,subpattern:!0}).compileToFragments(e,X)))}return f},o=function(a,o,r){var i;return o=new Le(new s(a,!0)),i=r instanceof Le?r:new Le(new K(r)),l.push(new n(o,i,null,{param:t.param,subpattern:!0}).compileToFragments(e,X))},A=function(e,a,t){return m(e)?D(e,a,t):o(e,a,t)},M.length?(h=M[0],C=I.slice(0,h+(_?1:0)),w=I.slice(h+1),0!==C.length&&A(C,G,H),0!==w.length&&(L=function(){switch(!1){case!_:return p(I[h].unwrapAll().value,-1*w.length);case!b:return c(H,-1*w.length)}}(),m(w)&&(F=L,L=e.scope.freeVariable(\"ref\"),l.push([this.makeCode(L+\" = \")].concat(_toConsumableArray(F.compileToFragments(e,X))))),A(w,G,L))):A(I,G,H),U||this.subpattern||l.push(G),f=this.joinFragmentArrays(l,\", \"),e.level<X?f:this.wrapInParentheses(f)}},{key:\"compileConditional\",value:function compileConditional(e){var t=this.variable.cacheReference(e),o=_slicedToArray(t,2),r,l,s;return l=o[0],s=o[1],l.properties.length||!(l.base instanceof K)||l.base instanceof Ie||e.scope.check(l.base.value)||this.variable.error('the variable \"'+l.base.value+\"\\\" can't be assigned with \"+this.context+\" because it has not been declared before\"),0<=a.call(this.context,\"?\")?(e.isExistentialEquals=!0,new O(new T(l),s,{type:\"if\"}).addElse(new n(s,this.value,\"=\")).compileToFragments(e)):(r=new se(this.context.slice(0,-1),l,new n(s,this.value,\"=\")).compileToFragments(e),e.level<=X?r:this.wrapInParentheses(r))}},{key:\"compileSpecialMath\",value:function compileSpecialMath(e){var a=this.variable.cacheReference(e),t=_slicedToArray(a,2),o,r;return o=t[0],r=t[1],new n(o,new se(this.context.slice(0,-1),r,this.value)).compileToFragments(e)}},{key:\"compileSplice\",value:function compileSplice(e){var a=this.variable.properties.pop(),t=a.range,o,n,r,l,s,i,d,c,p,u;if(r=t.from,d=t.to,n=t.exclusive,c=this.variable.unwrapAll(),c.comments&&(Qe(c,this),delete this.variable.comments),i=this.variable.compile(e),r){var m=this.cacheToCodeFragments(r.cache(e,Y)),h=_slicedToArray(m,2);l=h[0],s=h[1]}else l=s=\"0\";d?(null==r?void 0:r.isNumber())&&d.isNumber()?(d=d.compile(e)-s,!n&&(d+=1)):(d=d.compile(e,H)+\" - \"+s,!n&&(d+=\" + 1\")):d=\"9e9\";var g=this.value.cache(e,X),f=_slicedToArray(g,2);return p=f[0],u=f[1],o=[].concat(this.makeCode(sa(\"splice\",e)+\".apply(\"+i+\", [\"+l+\", \"+d+\"].concat(\"),p,this.makeCode(\")), \"),u),e.level>z?this.wrapInParentheses(o):o}},{key:\"eachName\",value:function eachName(e){return this.variable.unwrapAll().eachName(e)}}]),n}(l);return e.prototype.children=[\"variable\",\"value\"],e.prototype.isAssignable=we,e}.call(this),e.FuncGlyph=I=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.glyph=e,t}return _inherits(a,e),a}(l),e.Code=h=function(){var e=function(e){function t(e,a,n,r){_classCallCheck(this,t);var l=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),s;return l.funcGlyph=n,l.paramStart=r,l.params=e||[],l.body=a||new c,l.bound=\"=>\"===(null==(s=l.funcGlyph)?void 0:s.glyph),l.isGenerator=!1,l.isAsync=!1,l.isMethod=!1,l.body.traverseChildren(!1,function(e){if((e instanceof se&&e.isYield()||e instanceof Pe)&&(l.isGenerator=!0),(e instanceof se&&e.isAwait()||e instanceof o)&&(l.isAsync=!0),l.isGenerator&&l.isAsync)return e.error(\"function can't contain both yield and await\")}),l}return _inherits(t,e),_createClass(t,[{key:\"isStatement\",value:function isStatement(){return this.isMethod}},{key:\"makeScope\",value:function makeScope(e){return new ye(e,this.body,this)}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r,c,p,h,g,f,y,T,v,i,b,$,k,l,_,C,D,m,E,x,I,S,A,L,F,w,P,j,M,U,V,B,W,X,Y,q,z,J,Z,Q;for(this.ctor&&(this.isAsync&&this.name.error(\"Class constructor may not be async\"),this.isGenerator&&this.name.error(\"Class constructor may not be a generator\")),this.bound&&((null==(P=e.scope.method)?void 0:P.bound)&&(this.context=e.scope.method.context),!this.context&&(this.context=\"this\")),e.scope=Ve(e,\"classScope\")||this.makeScope(e.scope),e.scope.shared=Ve(e,\"sharedScope\"),e.indent+=De,delete e.bare,delete e.isExistentialEquals,L=[],g=[],J=null==(j=null==(M=this.thisAssignments)?void 0:M.slice())?[]:j,F=[],T=!1,y=!1,S=[],this.eachParamName(function(t,o,n,r){var l,s;if(0<=a.call(S,t)&&o.error(\"multiple parameters named '\"+t+\"'\"),S.push(t),o.this)return t=o.properties[0].name.value,0<=a.call(G,t)&&(t=\"_\"+t),s=new R(e.scope.freeVariable(t,{reserve:!1})),l=n.name instanceof le&&r instanceof d&&\"=\"===r.operatorToken.value?new d(new R(t),s,\"object\"):s,n.renameParam(o,l),J.push(new d(o,s))}),U=this.params,v=b=0,l=U.length;b<l;v=++b)I=U[v],I.splat||I instanceof N?(T?I.error(\"only one splat or expansion parameter is allowed per function definition\"):I instanceof N&&1===this.params.length&&I.error(\"an expansion parameter cannot be the only parameter in a function definition\"),T=!0,I.splat?(I.name instanceof s?(z=e.scope.freeVariable(\"arg\"),L.push(w=new Le(new R(z))),g.push(new d(new Le(I.name),w))):(L.push(w=I.asReference(e)),z=We(w.compileNodeWithoutComments(e))),I.shouldCache()&&g.push(new d(new Le(I.name),w))):(z=e.scope.freeVariable(\"args\"),L.push(new Le(new R(z)))),e.scope.parameter(z)):((I.shouldCache()||y)&&(I.assignedInBody=!0,y=!0,null==I.value?g.push(new d(new Le(I.name),I.asReference(e),null,{param:\"alwaysDeclare\"})):(h=new se(\"===\",I,new Oe),i=new d(new Le(I.name),I.value),g.push(new O(h,i)))),T?(F.push(I),null!=I.value&&!I.shouldCache()&&(h=new se(\"===\",I,new Oe),i=new d(new Le(I.name),I.value),g.push(new O(h,i))),null!=(null==(V=I.name)?void 0:V.value)&&e.scope.add(I.name.value,\"var\",!0)):(w=I.shouldCache()?I.asReference(e):null==I.value||I.assignedInBody?I:new d(new Le(I.name),I.value,null,{param:!0}),I.name instanceof s||I.name instanceof le?(I.name.lhs=!0,I.name instanceof le&&I.name.hasSplat()?(z=e.scope.freeVariable(\"arg\"),e.scope.parameter(z),w=new Le(new R(z)),g.push(new d(new Le(I.name),w,null,{param:\"alwaysDeclare\"})),null!=I.value&&!I.assignedInBody&&(w=new d(w,I.value,null,{param:!0}))):!I.shouldCache()&&I.name.eachName(function(a){return e.scope.parameter(a.value)})):(A=null==I.value?w:I,e.scope.parameter(We(A.compileToFragmentsWithoutComments(e)))),L.push(w)));if(0!==F.length&&g.unshift(new d(new Le(new s([new Te(new R(z))].concat(_toConsumableArray(function(){var a,t,o;for(o=[],a=0,t=F.length;a<t;a++)I=F[a],o.push(I.asReference(e));return o}())))),new Le(new R(z)))),Z=this.body.isEmpty(),!this.expandCtorSuper(J)){var ee;(ee=this.body.expressions).unshift.apply(ee,_toConsumableArray(J))}for((t=this.body.expressions).unshift.apply(t,_toConsumableArray(g)),this.isMethod&&this.bound&&!this.isStatic&&this.classVariable&&(c=new Le(new K(sa(\"boundMethodCheck\",e))),this.body.expressions.unshift(new u(c,[new Le(new Ie),this.classVariable]))),Z||this.noReturn||this.body.makeReturn(),this.bound&&this.isGenerator&&(Q=this.body.contains(function(e){return e instanceof se&&\"yield\"===e.operator}),(Q||this).error(\"yield cannot occur inside bound (fat arrow) functions\")),E=[],this.isMethod&&this.isStatic&&E.push(\"static\"),this.isAsync&&E.push(\"async\"),this.isMethod||this.bound?this.isGenerator&&E.push(\"*\"):E.push(\"function\"+(this.isGenerator?\"*\":\"\")),q=[this.makeCode(\"(\")],null!=(null==(B=this.paramStart)?void 0:B.comments)&&this.compileCommentFragments(e,this.paramStart,q),v=$=0,_=L.length;$<_;v=++$){var ae;if(I=L[v],0!==v&&q.push(this.makeCode(\", \")),T&&v===L.length-1&&q.push(this.makeCode(\"...\")),Y=e.scope.variables.length,(ae=q).push.apply(ae,_toConsumableArray(I.compileToFragments(e))),Y!==e.scope.variables.length){var te;f=e.scope.variables.splice(Y),(te=e.scope.parent.variables).push.apply(te,_toConsumableArray(f))}}if(q.push(this.makeCode(\")\")),null!=(null==(W=this.funcGlyph)?void 0:W.comments)){for(X=this.funcGlyph.comments,k=0,C=X.length;k<C;k++)p=X[k],p.unshift=!1;this.compileCommentFragments(e,this.funcGlyph,q)}if(this.body.isEmpty()||(r=this.body.compileWithDeclarations(e)),this.isMethod){var oe=[e.scope,e.scope.parent];m=oe[0],e.scope=oe[1],x=this.name.compileToFragments(e),\".\"===x[0].code&&x.shift(),e.scope=m}if(n=this.joinFragmentArrays(function(){var e,a,t;for(t=[],a=0,e=E.length;a<e;a++)D=E[a],t.push(this.makeCode(D));return t}.call(this),\" \"),E.length&&x&&n.push(this.makeCode(\" \")),x){var ne;(ne=n).push.apply(ne,_toConsumableArray(x))}if((o=n).push.apply(o,_toConsumableArray(q)),this.bound&&!this.isMethod&&n.push(this.makeCode(\" =>\")),n.push(this.makeCode(\" {\")),null==r?void 0:r.length){var re;(re=n).push.apply(re,[this.makeCode(\"\\n\")].concat(_toConsumableArray(r),[this.makeCode(\"\\n\"+this.tab)]))}return n.push(this.makeCode(\"}\")),this.isMethod?Ye(n,this):this.front||e.level>=H?this.wrapInParentheses(n):n}},{key:\"eachParamName\",value:function eachParamName(e){var a,t,o,n,r;for(n=this.params,r=[],a=0,t=n.length;a<t;a++)o=n[a],r.push(o.eachName(e));return r}},{key:\"traverseChildren\",value:function traverseChildren(e,a){if(e)return _get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"traverseChildren\",this).call(this,e,a)}},{key:\"replaceInContext\",value:function replaceInContext(e,a){return!!this.bound&&_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"replaceInContext\",this).call(this,e,a)}},{key:\"expandCtorSuper\",value:function expandCtorSuper(e){var a=this,t,o,n,r;return!!this.ctor&&(this.eachSuperCall(c.wrap(this.params),function(e){return e.error(\"'super' is not allowed in constructor parameter defaults\")}),r=this.eachSuperCall(this.body,function(t){return\"base\"===a.ctor&&t.error(\"'super' is only allowed in derived class constructors\"),t.expressions=e}),t=e.length&&e.length!==(null==(n=this.thisAssignments)?void 0:n.length),\"derived\"===this.ctor&&!r&&t&&(o=e[0].variable,o.error(\"Can't use @params in derived class constructors without calling super\")),r)}},{key:\"eachSuperCall\",value:function eachSuperCall(e,a){var o=this,n;return n=!1,e.traverseChildren(!0,function(e){var r;return e instanceof _e?(!e.variable.accessor&&(r=e.args.filter(function(e){return!(e instanceof m)&&(!(e instanceof t)||e.bound)}),c.wrap(r).traverseChildren(!0,function(e){if(e.this)return e.error(\"Can't call super with @params in derived class constructors\")})),n=!0,a(e)):e instanceof Ie&&\"derived\"===o.ctor&&!n&&e.error(\"Can't reference 'this' before calling super in derived class constructors\"),!(e instanceof _e)&&(!(e instanceof t)||e.bound)}),n}}]),t}(l);return e.prototype.children=[\"params\",\"body\"],e.prototype.jumps=te,e}.call(this),e.Param=ie=function(){var e=function(e){function t(e,a,o){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),r,l;return n.name=e,n.value=a,n.splat=o,r=Je(n.name.unwrapAll().value),r&&n.name.error(r),n.name instanceof le&&n.name.generated&&(l=n.name.objects[0].operatorToken,l.error(\"unexpected \"+l.value)),n}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function compileToFragments(e){return this.name.compileToFragments(e,X)}},{key:\"compileToFragmentsWithoutComments\",value:function compileToFragmentsWithoutComments(e){return this.name.compileToFragmentsWithoutComments(e,X)}},{key:\"asReference\",value:function asReference(e){var t,o;return this.reference?this.reference:(o=this.name,o.this?(t=o.properties[0].name.value,0<=a.call(G,t)&&(t=\"_\"+t),o=new R(e.scope.freeVariable(t))):o.shouldCache()&&(o=new R(e.scope.freeVariable(\"arg\"))),o=new Le(o),o.updateLocationDataIfMissing(this.locationData),this.reference=o)}},{key:\"shouldCache\",value:function shouldCache(){return this.name.shouldCache()}},{key:\"eachName\",value:function eachName(e){var a=this,t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.name,o,n,r,l,s,i,c,p;if(o=function(t){var o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;return e(\"@\"+t.properties[0].name.value,t,a,o)},t instanceof K)return e(t.value,t,this);if(t instanceof Le)return o(t);for(p=null==(c=t.objects)?[]:c,n=0,r=p.length;n<r;n++)i=p[n],l=i,i instanceof d&&null==i.context&&(i=i.variable),i instanceof d?(i=i.value instanceof d?i.value.variable:i.value,this.eachName(e,i.unwrap())):i instanceof Te?(s=i.name.unwrap(),e(s.value,s,this)):i instanceof Le?i.isArray()||i.isObject()?this.eachName(e,i.base):i.this?o(i,l):e(i.base.value,i.base,this):i instanceof y?i:!(i instanceof N)&&i.error(\"illegal parameter \"+i.compile())}},{key:\"renameParam\",value:function renameParam(e,a){var t,o;return t=function(a){return a===e},o=function(e,t){var o;return t instanceof le?(o=e,e.this&&(o=e.properties[0].name),e.this&&o.value===a.value?new Le(a):new d(new Le(o),a,\"object\")):a},this.replaceInContext(t,o)}}]),t}(l);return e.prototype.children=[\"name\",\"value\"],e}.call(this),e.Splat=Te=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.name=e.compile?e:new K(e),t}return _inherits(a,e),_createClass(a,[{key:\"isAssignable\",value:function isAssignable(){return this.name.isAssignable()&&(!this.name.isAtomic||this.name.isAtomic())}},{key:\"assigns\",value:function assigns(e){return this.name.assigns(e)}},{key:\"compileNode\",value:function compileNode(e){return[this.makeCode(\"...\")].concat(_toConsumableArray(this.name.compileToFragments(e,Y)))}},{key:\"unwrap\",value:function unwrap(){return this.name}}]),a}(l);return e.prototype.children=[\"name\"],e}.call(this),e.Expansion=N=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){return this.error(\"Expansion must be used inside a destructuring assignment or parameter list\")}},{key:\"asReference\",value:function asReference(){return this}},{key:\"eachName\",value:function eachName(){}}]),a}(l);return e.prototype.shouldCache=te,e}.call(this),e.Elision=y=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e,t){var o;return o=_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileToFragments\",this).call(this,e,t),o.isElision=!0,o}},{key:\"compileNode\",value:function compileNode(){return[this.makeCode(\", \")]}},{key:\"asReference\",value:function asReference(){return this}},{key:\"eachName\",value:function eachName(){}}]),a}(l);return e.prototype.isAssignable=we,e.prototype.shouldCache=te,e}.call(this),e.While=Fe=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.condition=(null==t?void 0:t.invert)?e.invert():e,o.guard=null==t?void 0:t.guard,o}return _inherits(a,e),_createClass(a,[{key:\"makeReturn\",value:function makeReturn(e){return e?_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"makeReturn\",this).call(this,e):(this.returns=!this.jumps(),this)}},{key:\"addBody\",value:function addBody(e){return this.body=e,this}},{key:\"jumps\",value:function jumps(){var e,a,t,o,n;if(e=this.body.expressions,!e.length)return!1;for(a=0,o=e.length;a<o;a++)if(n=e[a],t=n.jumps({loop:!0}))return t;return!1}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n;return e.indent+=De,n=\"\",t=this.body,t.isEmpty()?t=this.makeCode(\"\"):(this.returns&&(t.makeReturn(o=e.scope.freeVariable(\"results\")),n=\"\"+this.tab+o+\" = [];\\n\"),this.guard&&(1<t.expressions.length?t.expressions.unshift(new O(new de(this.guard).invert(),new Ne(\"continue\"))):this.guard&&(t=c.wrap([new O(this.guard,t)]))),t=[].concat(this.makeCode(\"\\n\"),t.compileToFragments(e,z),this.makeCode(\"\\n\"+this.tab))),a=[].concat(this.makeCode(n+this.tab+\"while (\"),this.condition.compileToFragments(e,q),this.makeCode(\") {\"),t,this.makeCode(\"}\")),this.returns&&a.push(this.makeCode(\"\\n\"+this.tab+\"return \"+o+\";\")),a}}]),a}(l);return e.prototype.children=[\"condition\",\"guard\",\"body\"],e.prototype.isStatement=we,e}.call(this),e.Op=se=function(){var e=function(e){function n(e,a,o,r){var l;_classCallCheck(this,n);var s=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),i;if(\"in\"===e){var d;return d=new U(a,o),_possibleConstructorReturn(s,d)}if(\"do\"===e){var c;return c=n.prototype.generateDo(a),_possibleConstructorReturn(s,c)}if(\"new\"===e){if((i=a.unwrap())instanceof u&&!i.do&&!i.isNew){var p;return p=i.newInstance(),_possibleConstructorReturn(s,p)}(a instanceof h&&a.bound||a.do)&&(a=new de(a))}return s.operator=t[e]||e,s.first=a,s.second=o,s.flip=!!r,l=s,_possibleConstructorReturn(s,l)}return _inherits(n,e),_createClass(n,[{key:\"isNumber\",value:function isNumber(){var e;return this.isUnary()&&(\"+\"===(e=this.operator)||\"-\"===e)&&this.first instanceof Le&&this.first.isNumber()}},{key:\"isAwait\",value:function isAwait(){return\"await\"===this.operator}},{key:\"isYield\",value:function isYield(){var e;return\"yield\"===(e=this.operator)||\"yield*\"===e}},{key:\"isUnary\",value:function isUnary(){return!this.second}},{key:\"shouldCache\",value:function shouldCache(){return!this.isNumber()}},{key:\"isChainable\",value:function isChainable(){var e;return\"<\"===(e=this.operator)||\">\"===e||\">=\"===e||\"<=\"===e||\"===\"===e||\"!==\"===e}},{key:\"invert\",value:function invert(){var e,a,t,r,l;if(this.isChainable()&&this.first.isChainable()){for(e=!0,a=this;a&&a.operator;)e&&(e=a.operator in o),a=a.first;if(!e)return new de(this).invert();for(a=this;a&&a.operator;)a.invert=!a.invert,a.operator=o[a.operator],a=a.first;return this}return(r=o[this.operator])?(this.operator=r,this.first.unwrap()instanceof n&&this.first.invert(),this):this.second?new de(this).invert():\"!\"===this.operator&&(t=this.first.unwrap())instanceof n&&(\"!\"===(l=t.operator)||\"in\"===l||\"instanceof\"===l)?t:new n(\"!\",this)}},{key:\"unfoldSoak\",value:function unfoldSoak(e){var a;return(\"++\"===(a=this.operator)||\"--\"===a||\"delete\"===a)&&ra(e,this,\"first\")}},{key:\"generateDo\",value:function generateDo(e){var a,t,o,n,r,l,s,i;for(l=[],t=e instanceof d&&(s=e.value.unwrap())instanceof h?s:e,i=t.params||[],o=0,n=i.length;o<n;o++)r=i[o],r.value?(l.push(r.value),delete r.value):l.push(r);return a=new u(e,l),a.do=!0,a}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l;if(t=this.isChainable()&&this.first.isChainable(),t||(this.first.front=this.front),\"delete\"===this.operator&&e.scope.check(this.first.unwrapAll().value)&&this.error(\"delete operand may not be argument or var\"),(\"--\"===(r=this.operator)||\"++\"===r)&&(n=Je(this.first.unwrapAll().value),n&&this.first.error(n)),this.isYield()||this.isAwait())return this.compileContinuation(e);if(this.isUnary())return this.compileUnary(e);if(t)return this.compileChain(e);switch(this.operator){case\"?\":return this.compileExistence(e,this.second.isDefaultValue);case\"**\":return this.compilePower(e);case\"//\":return this.compileFloorDivision(e);case\"%%\":return this.compileModulo(e);default:return o=this.first.compileToFragments(e,Y),l=this.second.compileToFragments(e,Y),a=[].concat(o,this.makeCode(\" \"+this.operator+\" \"),l),e.level<=Y?a:this.wrapInParentheses(a)}}},{key:\"compileChain\",value:function compileChain(e){var a=this.first.second.cache(e),t=_slicedToArray(a,2),o,n,r;return this.first.second=t[0],r=t[1],n=this.first.compileToFragments(e,Y),o=n.concat(this.makeCode(\" \"+(this.invert?\"&&\":\"||\")+\" \"),r.compileToFragments(e),this.makeCode(\" \"+this.operator+\" \"),this.second.compileToFragments(e,Y)),this.wrapInParentheses(o)}},{key:\"compileExistence\",value:function compileExistence(e,a){var t,o;return this.first.shouldCache()?(o=new R(e.scope.freeVariable(\"ref\")),t=new de(new d(o,this.first))):(t=this.first,o=t),new O(new T(t,a),o,{type:\"if\"}).addElse(this.second).compileToFragments(e)}},{key:\"compileUnary\",value:function compileUnary(e){var a,t,o;return(t=[],a=this.operator,t.push([this.makeCode(a)]),\"!\"===a&&this.first instanceof T)?(this.first.negated=!this.first.negated,this.first.compileToFragments(e)):e.level>=H?new de(this).compileToFragments(e):(o=\"+\"===a||\"-\"===a,(\"new\"===a||\"typeof\"===a||\"delete\"===a||o&&this.first instanceof n&&this.first.operator===a)&&t.push([this.makeCode(\" \")]),(o&&this.first instanceof n||\"new\"===a&&this.first.isStatement(e))&&(this.first=new de(this.first)),t.push(this.first.compileToFragments(e,Y)),this.flip&&t.reverse(),this.joinFragmentArrays(t,\"\"))}},{key:\"compileContinuation\",value:function compileContinuation(e){var t,o,n,r;return o=[],t=this.operator,null==e.scope.parent&&this.error(this.operator+\" can only occur inside functions\"),(null==(n=e.scope.method)?void 0:n.bound)&&e.scope.method.isGenerator&&this.error(\"yield cannot occur inside bound (fat arrow) functions\"),0<=a.call(Object.keys(this.first),\"expression\")&&!(this.first instanceof Se)?null!=this.first.expression&&o.push(this.first.expression.compileToFragments(e,Y)):(e.level>=q&&o.push([this.makeCode(\"(\")]),o.push([this.makeCode(t)]),\"\"!==(null==(r=this.first.base)?void 0:r.value)&&o.push([this.makeCode(\" \")]),o.push(this.first.compileToFragments(e,Y)),e.level>=q&&o.push([this.makeCode(\")\")])),this.joinFragmentArrays(o,\"\")}},{key:\"compilePower\",value:function compilePower(e){var a;return a=new Le(new R(\"Math\"),[new r(new pe(\"pow\"))]),new u(a,[this.first,this.second]).compileToFragments(e)}},{key:\"compileFloorDivision\",value:function compileFloorDivision(e){var a,t,o;return t=new Le(new R(\"Math\"),[new r(new pe(\"floor\"))]),o=this.second.shouldCache()?new de(this.second):this.second,a=new n(\"/\",this.first,o),new u(t,[a]).compileToFragments(e)}},{key:\"compileModulo\",value:function compileModulo(e){var a;return a=new Le(new K(sa(\"modulo\",e))),new u(a,[this.first,this.second]).compileToFragments(e)}},{key:\"toString\",value:function toString(e){return _get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"toString\",this).call(this,e,this.constructor.name+\" \"+this.operator)}}]),n}(l),t,o;return t={\"==\":\"===\",\"!=\":\"!==\",of:\"in\",yieldfrom:\"yield*\"},o={\"!==\":\"===\",\"===\":\"!==\"},e.prototype.children=[\"first\",\"second\"],e}.call(this),e.In=U=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.object=e,o.array=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r;if(this.array instanceof Le&&this.array.isArray()&&this.array.base.objects.length){for(r=this.array.base.objects,t=0,o=r.length;t<o;t++)if(n=r[t],!!(n instanceof Te)){a=!0;break}if(!a)return this.compileOrTest(e)}return this.compileLoopTest(e)}},{key:\"compileOrTest\",value:function compileOrTest(e){var a=this.object.cache(e,Y),t=_slicedToArray(a,2),o,n,r,l,s,i,d,c,p,u;p=t[0],d=t[1];var m=this.negated?[\" !== \",\" && \"]:[\" === \",\" || \"],h=_slicedToArray(m,2);for(o=h[0],n=h[1],u=[],c=this.array.base.objects,r=s=0,i=c.length;s<i;r=++s)l=c[r],r&&u.push(this.makeCode(n)),u=u.concat(r?d:p,this.makeCode(o),l.compileToFragments(e,H));return e.level<Y?u:this.wrapInParentheses(u)}},{key:\"compileLoopTest\",value:function compileLoopTest(e){var a=this.object.cache(e,X),t=_slicedToArray(a,2),o,n,r;return(r=t[0],n=t[1],o=[].concat(this.makeCode(sa(\"indexOf\",e)+\".call(\"),this.array.compileToFragments(e,X),this.makeCode(\", \"),n,this.makeCode(\") \"+(this.negated?\"< 0\":\">= 0\"))),We(r)===We(n))?o:(o=r.concat(this.makeCode(\", \"),o),e.level<X?o:this.wrapInParentheses(o))}},{key:\"toString\",value:function toString(e){return _get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"toString\",this).call(this,e,this.constructor.name+(this.negated?\"!\":\"\"))}}]),a}(l);return e.prototype.children=[\"object\",\"array\"],e.prototype.invert=ae,e}.call(this),e.Try=Ae=function(){var e=function(e){function a(e,t,o,n){_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return r.attempt=e,r.errorVariable=t,r.recovery=o,r.ensure=n,r}return _inherits(a,e),_createClass(a,[{key:\"jumps\",value:function jumps(e){var a;return this.attempt.jumps(e)||(null==(a=this.recovery)?void 0:a.jumps(e))}},{key:\"makeReturn\",value:function makeReturn(e){return this.attempt&&(this.attempt=this.attempt.makeReturn(e)),this.recovery&&(this.recovery=this.recovery.makeReturn(e)),this}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l;return e.indent+=De,l=this.attempt.compileToFragments(e,z),a=this.recovery?(o=e.scope.freeVariable(\"error\",{reserve:!1}),r=new R(o),this.errorVariable?(n=Je(this.errorVariable.unwrapAll().value),n?this.errorVariable.error(n):void 0,this.recovery.unshift(new d(this.errorVariable,r))):void 0,[].concat(this.makeCode(\" catch (\"),r.compileToFragments(e),this.makeCode(\") {\\n\"),this.recovery.compileToFragments(e,z),this.makeCode(\"\\n\"+this.tab+\"}\"))):this.ensure||this.recovery?[]:(o=e.scope.freeVariable(\"error\",{reserve:!1}),[this.makeCode(\" catch (\"+o+\") {}\")]),t=this.ensure?[].concat(this.makeCode(\" finally {\\n\"),this.ensure.compileToFragments(e,z),this.makeCode(\"\\n\"+this.tab+\"}\")):[],[].concat(this.makeCode(this.tab+\"try {\\n\"),l,this.makeCode(\"\\n\"+this.tab+\"}\"),a,t)}}]),a}(l);return e.prototype.children=[\"attempt\",\"recovery\",\"ensure\"],e.prototype.isStatement=we,e}.call(this),e.Throw=Se=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.expression=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;return a=this.expression.compileToFragments(e,X),la(a,this.makeCode(\"throw \")),a.unshift(this.makeCode(this.tab)),a.push(this.makeCode(\";\")),a}}]),a}(l);return e.prototype.children=[\"expression\"],e.prototype.isStatement=we,e.prototype.jumps=te,e.prototype.makeReturn=Ee,e}.call(this),e.Existence=T=function(){var e=function(e){function t(e){var o=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1];_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),r;return n.expression=e,n.comparisonTarget=o?\"undefined\":\"null\",r=[],n.expression.traverseChildren(!0,function(e){var t,o,n,l;if(e.comments){for(l=e.comments,o=0,n=l.length;o<n;o++)t=l[o],0>a.call(r,t)&&r.push(t);return delete e.comments}}),Me(r,n),Qe(n.expression,n),n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function compileNode(e){var a,t,o;if(this.expression.front=this.front,o=this.expression.compile(e,Y),this.expression.unwrap()instanceof R&&!e.scope.check(o)){var n=this.negated?[\"===\",\"||\"]:[\"!==\",\"&&\"],r=_slicedToArray(n,2);a=r[0],t=r[1],o=\"typeof \"+o+\" \"+a+' \"undefined\"'+(\"undefined\"===this.comparisonTarget?\"\":\" \"+t+\" \"+o+\" \"+a+\" \"+this.comparisonTarget)}else a=\"null\"===this.comparisonTarget?this.negated?\"==\":\"!=\":this.negated?\"===\":\"!==\",o=o+\" \"+a+\" \"+this.comparisonTarget;return[this.makeCode(e.level<=W?o:\"(\"+o+\")\")]}}]),t}(l);return e.prototype.children=[\"expression\"],e.prototype.invert=ae,e}.call(this),e.Parens=de=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.body=e,t}return _inherits(a,e),_createClass(a,[{key:\"unwrap\",value:function unwrap(){return this.body}},{key:\"shouldCache\",value:function shouldCache(){return this.body.shouldCache()}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r;return(t=this.body.unwrap(),r=null==(n=t.comments)?void 0:n.some(function(e){return e.here&&!e.unshift&&!e.newLine}),t instanceof Le&&t.isAtomic()&&!this.csxAttribute&&!r)?(t.front=this.front,t.compileToFragments(e)):(o=t.compileToFragments(e,q),a=e.level<Y&&!r&&(t instanceof se||t.unwrap()instanceof u||t instanceof x&&t.returns)&&(e.level<W||3>=o.length),this.csxAttribute?this.wrapInBraces(o):a?o:this.wrapInParentheses(o))}}]),a}(l);return e.prototype.children=[\"body\"],e}.call(this),e.StringWithInterpolations=be=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.body=e,t}return _inherits(a,e),_createClass(a,[{key:\"unwrap\",value:function unwrap(){return this}},{key:\"shouldCache\",value:function shouldCache(){return this.body.shouldCache()}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r,l,s,i,d,c;if(this.csxAttribute)return c=new de(new a(this.body)),c.csxAttribute=!0,c.compileNode(e);for(r=this.body.unwrap(),n=[],d=[],r.traverseChildren(!1,function(e){var a,t,o,r,l,s;if(e instanceof ve){if(e.comments){var i;(i=d).push.apply(i,_toConsumableArray(e.comments)),delete e.comments}return n.push(e),!0}if(e instanceof de){if(0!==d.length){for(t=0,r=d.length;t<r;t++)a=d[t],a.unshift=!0,a.newLine=!0;Me(d,e)}return n.push(e),!1}if(e.comments){if(0!==n.length&&!(n[n.length-1]instanceof ve)){for(s=e.comments,o=0,l=s.length;o<l;o++)a=s[o],a.unshift=!1,a.newLine=!0;Me(e.comments,n[n.length-1])}else{var c;(c=d).push.apply(c,_toConsumableArray(e.comments))}delete e.comments}return!0}),l=[],this.csx||l.push(this.makeCode(\"`\")),s=0,i=n.length;s<i;s++)if(o=n[s],o instanceof ve){var p;o.value=o.unquote(!0,this.csx),this.csx||(o.value=o.value.replace(/(\\\\*)(`|\\$\\{)/g,function(e,a,t){return 0==a.length%2?a+\"\\\\\"+t:e})),(p=l).push.apply(p,_toConsumableArray(o.compileToFragments(e)))}else{var u;this.csx||l.push(this.makeCode(\"$\")),t=o.compileToFragments(e,q),(!this.isNestedTag(o)||t.some(function(e){return null!=e.comments}))&&(t=this.wrapInBraces(t),t[0].isStringWithInterpolations=!0,t[t.length-1].isStringWithInterpolations=!0),(u=l).push.apply(u,_toConsumableArray(t))}return this.csx||l.push(this.makeCode(\"`\")),l}},{key:\"isNestedTag\",value:function isNestedTag(e){var a,t,o;return t=null==(o=e.body)?void 0:o.expressions,a=null==t?void 0:t[0].unwrap(),this.csx&&t&&1===t.length&&a instanceof u&&a.csx}}]),a}(l);return e.prototype.children=[\"body\"],e}.call(this),e.For=x=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),n,r,l,s,i,d;if(o.source=t.source,o.guard=t.guard,o.step=t.step,o.name=t.name,o.index=t.index,o.body=c.wrap([e]),o.own=null!=t.own,o.object=null!=t.object,o.from=null!=t.from,o.from&&o.index&&o.index.error(\"cannot use index with for-from\"),o.own&&!o.object&&t.ownTag.error(\"cannot use own with for-\"+(o.from?\"from\":\"in\")),o.object){var p=[o.index,o.name];o.name=p[0],o.index=p[1]}for(((null==(s=o.index)?void 0:\"function\"==typeof s.isArray?s.isArray():void 0)||(null==(i=o.index)?void 0:\"function\"==typeof i.isObject?i.isObject():void 0))&&o.index.error(\"index cannot be a pattern matching expression\"),o.range=o.source instanceof Le&&o.source.base instanceof ue&&!o.source.properties.length&&!o.from,o.pattern=o.name instanceof Le,o.range&&o.index&&o.index.error(\"indexes do not apply to range loops\"),o.range&&o.pattern&&o.name.error(\"cannot pattern match over range loops\"),o.returns=!1,d=[\"source\",\"guard\",\"step\",\"name\",\"index\"],r=0,l=d.length;r<l;r++)(n=d[r],!!o[n])&&(o[n].traverseChildren(!0,function(e){var a,t,r,l;if(e.comments){for(l=e.comments,t=0,r=l.length;t<r;t++)a=l[t],a.newLine=a.unshift=!0;return Qe(e,o[n])}}),Qe(o[n],o));return o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,r,l,s,i,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E,x,I,S,A,L,F,w,P,j,M,U;if(o=c.wrap([this.body]),x=o.expressions,a=n.call(x,-1),t=_slicedToArray(a,1),$=t[0],a,(null==$?void 0:$.jumps())instanceof ge&&(this.returns=!1),F=this.range?this.source.base:this.source,L=e.scope,this.pattern||(C=this.name&&this.name.compile(e,X)),T=this.index&&this.index.compile(e,X),C&&!this.pattern&&L.find(C),T&&!(this.index instanceof Le)&&L.find(T),this.returns&&(A=L.freeVariable(\"results\")),this.from?this.pattern&&(N=L.freeVariable(\"x\",{single:!0})):N=this.object&&T||L.freeVariable(\"i\",{single:!0}),v=(this.range||this.from)&&C||T||N,b=v===N?\"\":v+\" = \",this.step&&!this.range){var V=this.cacheToCodeFragments(this.step.cache(e,X,aa)),B=_slicedToArray(V,2);w=B[0],j=B[1],this.step.isNumber()&&(P=+j)}return this.pattern&&(C=N),U=\"\",f=\"\",u=\"\",y=this.tab+De,this.range?h=F.compileToFragments(Ze(e,{index:N,name:C,step:this.step,shouldCache:aa})):(M=this.source.compile(e,X),(C||this.own)&&!(this.source.unwrap()instanceof R)&&(u+=\"\"+this.tab+(E=L.freeVariable(\"ref\"))+\" = \"+M+\";\\n\",M=E),C&&!this.pattern&&!this.from&&(D=C+\" = \"+M+\"[\"+v+\"]\"),!this.object&&!this.from&&(w!==j&&(u+=\"\"+this.tab+w+\";\\n\"),m=0>P,!(this.step&&null!=P&&m)&&(_=L.freeVariable(\"len\")),i=\"\"+b+N+\" = 0, \"+_+\" = \"+M+\".length\",p=\"\"+b+N+\" = \"+M+\".length - 1\",l=N+\" < \"+_,s=N+\" >= 0\",this.step?(null==P?(l=j+\" > 0 ? \"+l+\" : \"+s,i=\"(\"+j+\" > 0 ? (\"+i+\") : \"+p+\")\"):m&&(l=s,i=p),k=N+\" += \"+j):k=\"\"+(v===N?N+\"++\":\"++\"+N),h=[this.makeCode(i+\"; \"+l+\"; \"+b+k)])),this.returns&&(I=\"\"+this.tab+A+\" = [];\\n\",S=\"\\n\"+this.tab+\"return \"+A+\";\",o.makeReturn(A)),this.guard&&(1<o.expressions.length?o.expressions.unshift(new O(new de(this.guard).invert(),new Ne(\"continue\"))):this.guard&&(o=c.wrap([new O(this.guard,o)]))),this.pattern&&o.expressions.unshift(new d(this.name,this.from?new R(v):new K(M+\"[\"+v+\"]\"))),D&&(U=\"\\n\"+y+D+\";\"),this.object?(h=[this.makeCode(v+\" in \"+M)],this.own&&(f=\"\\n\"+y+\"if (!\"+sa(\"hasProp\",e)+\".call(\"+M+\", \"+v+\")) continue;\")):this.from&&(h=[this.makeCode(v+\" of \"+M)]),r=o.compileToFragments(Ze(e,{indent:y}),z),r&&0<r.length&&(r=[].concat(this.makeCode(\"\\n\"),r,this.makeCode(\"\\n\"))),g=[this.makeCode(u)],I&&g.push(this.makeCode(I)),g=g.concat(this.makeCode(this.tab),this.makeCode(\"for (\"),h,this.makeCode(\") {\"+f+U),r,this.makeCode(this.tab),this.makeCode(\"}\")),S&&g.push(this.makeCode(S)),g}}]),a}(Fe);return e.prototype.children=[\"body\",\"source\",\"guard\",\"step\"],e}.call(this),e.Switch=Ce=function(){var e=function(e){function a(e,t,o){_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.subject=e,n.cases=t,n.otherwise=o,n}return _inherits(a,e),_createClass(a,[{key:\"jumps\",value:function jumps(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{block:!0},a,t,o,n,r,l,s;for(l=this.cases,o=0,r=l.length;o<r;o++){var i=_slicedToArray(l[o],2);if(t=i[0],a=i[1],n=a.jumps(e))return n}return null==(s=this.otherwise)?void 0:s.jumps(e)}},{key:\"makeReturn\",value:function makeReturn(e){var a,t,o,n,r;for(n=this.cases,a=0,t=n.length;a<t;a++)o=n[a],o[1].makeReturn(e);return e&&(this.otherwise||(this.otherwise=new c([new K(\"void 0\")]))),null!=(r=this.otherwise)&&r.makeReturn(e),this}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s,i,d,c,p,u,m,h,g;for(i=e.indent+De,d=e.indent=i+De,l=[].concat(this.makeCode(this.tab+\"switch (\"),this.subject?this.subject.compileToFragments(e,q):this.makeCode(\"false\"),this.makeCode(\") {\\n\")),h=this.cases,s=c=0,u=h.length;c<u;s=++c){var f=_slicedToArray(h[s],2);for(n=f[0],a=f[1],g=He([n]),p=0,m=g.length;p<m;p++)o=g[p],this.subject||(o=o.invert()),l=l.concat(this.makeCode(i+\"case \"),o.compileToFragments(e,q),this.makeCode(\":\\n\"));if(0<(t=a.compileToFragments(e,z)).length&&(l=l.concat(t,this.makeCode(\"\\n\"))),s===this.cases.length-1&&!this.otherwise)break;(r=this.lastNode(a.expressions),!(r instanceof ge||r instanceof Se||r instanceof K&&r.jumps()&&\"debugger\"!==r.value))&&l.push(o.makeCode(d+\"break;\\n\"))}if(this.otherwise&&this.otherwise.expressions.length){var y;(y=l).push.apply(y,[this.makeCode(i+\"default:\\n\")].concat(_toConsumableArray(this.otherwise.compileToFragments(e,z)),[this.makeCode(\"\\n\")]))}return l.push(this.makeCode(this.tab+\"}\")),l}}]),a}(l);return e.prototype.children=[\"subject\",\"cases\",\"otherwise\"],e.prototype.isStatement=we,e}.call(this),e.If=O=function(){var e=function(e){function a(e,t){var o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.body=t,n.condition=\"unless\"===o.type?e.invert():e,n.elseBody=null,n.isChain=!1,n.soak=o.soak,n.condition.comments&&Qe(n.condition,n),n}return _inherits(a,e),_createClass(a,[{key:\"bodyNode\",value:function bodyNode(){var e;return null==(e=this.body)?void 0:e.unwrap()}},{key:\"elseBodyNode\",value:function elseBodyNode(){var e;return null==(e=this.elseBody)?void 0:e.unwrap()}},{key:\"addElse\",value:function addElse(e){return this.isChain?this.elseBodyNode().addElse(e):(this.isChain=e instanceof a,this.elseBody=this.ensureBlock(e),this.elseBody.updateLocationDataIfMissing(e.locationData)),this}},{key:\"isStatement\",value:function isStatement(e){var a;return(null==e?void 0:e.level)===z||this.bodyNode().isStatement(e)||(null==(a=this.elseBodyNode())?void 0:a.isStatement(e))}},{key:\"jumps\",value:function jumps(e){var a;return this.body.jumps(e)||(null==(a=this.elseBody)?void 0:a.jumps(e))}},{key:\"compileNode\",value:function compileNode(e){return this.isStatement(e)?this.compileStatement(e):this.compileExpression(e)}},{key:\"makeReturn\",value:function makeReturn(e){return e&&(this.elseBody||(this.elseBody=new c([new K(\"void 0\")]))),this.body&&(this.body=new c([this.body.makeReturn(e)])),this.elseBody&&(this.elseBody=new c([this.elseBody.makeReturn(e)])),this}},{key:\"ensureBlock\",value:function ensureBlock(e){return e instanceof c?e:new c([e])}},{key:\"compileStatement\",value:function compileStatement(e){var t,o,n,r,l,s,i;return(n=Ve(e,\"chainChild\"),l=Ve(e,\"isExistentialEquals\"),l)?new a(this.condition.invert(),this.elseBodyNode(),{type:\"if\"}).compileToFragments(e):(i=e.indent+De,r=this.condition.compileToFragments(e,q),o=this.ensureBlock(this.body).compileToFragments(Ze(e,{indent:i})),s=[].concat(this.makeCode(\"if (\"),r,this.makeCode(\") {\\n\"),o,this.makeCode(\"\\n\"+this.tab+\"}\")),n||s.unshift(this.makeCode(this.tab)),!this.elseBody)?s:(t=s.concat(this.makeCode(\" else \")),this.isChain?(e.chainChild=!0,t=t.concat(this.elseBody.unwrap().compileToFragments(e,z))):t=t.concat(this.makeCode(\"{\\n\"),this.elseBody.compileToFragments(Ze(e,{indent:i}),z),this.makeCode(\"\\n\"+this.tab+\"}\")),t)}},{key:\"compileExpression\",value:function compileExpression(e){var a,t,o,n;return o=this.condition.compileToFragments(e,W),t=this.bodyNode().compileToFragments(e,X),a=this.elseBodyNode()?this.elseBodyNode().compileToFragments(e,X):[this.makeCode(\"void 0\")],n=o.concat(this.makeCode(\" ? \"),t,this.makeCode(\" : \"),a),e.level>=W?this.wrapInParentheses(n):n}},{key:\"unfoldSoak\",value:function unfoldSoak(){return this.soak&&this}}]),a}(l);return e.prototype.children=[\"condition\",\"body\",\"elseBody\"],e}.call(this),Re={modulo:function modulo(){return\"function(a, b) { return (+a % (b = +b) + b) % b; }\"},objectWithoutKeys:function objectWithoutKeys(){return\"function(o, ks) { var res = {}; for (var k in o) ([].indexOf.call(ks, k) < 0 && {}.hasOwnProperty.call(o, k)) && (res[k] = o[k]); return res; }\"},boundMethodCheck:function boundMethodCheck(){return\"function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } }\"},_extends:function _extends(){return\"Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }\"},hasProp:function hasProp(){return\"{}.hasOwnProperty\"},indexOf:function(){return\"[].indexOf\"},slice:function slice(){return\"[].slice\"},splice:function(){return\"[].splice\"}},z=1,q=2,X=3,W=4,Y=5,H=6,De=\"  \",fe=/^[+-]?\\d+$/,sa=function(e,a){var t,o;return o=a.scope.root,e in o.utilities?o.utilities[e]:(t=o.freeVariable(e),o.assign(t,Re[e](a)),o.utilities[e]=t)},ea=function(e,a){var t=!(2<arguments.length&&void 0!==arguments[2])||arguments[2],o;return o=\"\\n\"===e[e.length-1],e=(t?a:\"\")+e.replace(/\\n/g,\"$&\"+a),e=e.replace(/\\s+$/,\"\"),o&&(e+=\"\\n\"),e},Ye=function(e,a){var t,o,n,r;for(o=n=0,r=e.length;n<r;o=++n)if(t=e[o],t.isHereComment)t.code=ea(t.code,a.tab);else{e.splice(o,0,a.makeCode(\"\"+a.tab));break}return e},Xe=function(e){var a,t,o,n;if(!e.comments)return!1;for(n=e.comments,t=0,o=n.length;t<o;t++)if(a=n[t],!1===a.here)return!0;return!1},Qe=function(e,a){if(null!=e&&e.comments)return Me(e.comments,a),delete e.comments},la=function(e,a){var t,o,n,r,l;for(n=!1,o=r=0,l=e.length;r<l;o=++r)if(t=e[o],!!!t.isComment){e.splice(o,0,a),n=!0;break}return n||e.push(a),e},qe=function(e){return e instanceof R&&\"arguments\"===e.value},ze=function(e){return e instanceof Ie||e instanceof h&&e.bound},aa=function(e){return e.shouldCache()||(\"function\"==typeof e.isAssignable?e.isAssignable():void 0)},ra=function(e,a,t){var o;if(o=a[t].unfoldSoak(e))return a[t]=o.body,o.body=new Le(a),o}}.call(this),{exports:e}.exports}(),require[\"./sourcemap\"]=function(){var e={exports:{}};return function(){var a,t;a=function(){function e(a){_classCallCheck(this,e),this.line=a,this.columns=[]}return _createClass(e,[{key:\"add\",value:function add(e,a){var t=_slicedToArray(a,2),o=t[0],n=t[1],r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return this.columns[e]&&r.noReplace?void 0:this.columns[e]={line:this.line,column:e,sourceLine:o,sourceColumn:n}}},{key:\"sourceLocation\",value:function sourceLocation(e){for(var a;!((a=this.columns[e])||0>=e);)e--;return a&&[a.sourceLine,a.sourceColumn]}}]),e}(),t=function(){var e=function(){function e(){_classCallCheck(this,e),this.lines=[]}return _createClass(e,[{key:\"add\",value:function add(e,t){var o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},n=_slicedToArray(t,2),r,l,s,i;return s=n[0],l=n[1],i=(r=this.lines)[s]||(r[s]=new a(s)),i.add(l,e,o)}},{key:\"sourceLocation\",value:function sourceLocation(e){for(var a=_slicedToArray(e,2),t=a[0],o=a[1],n;!((n=this.lines[t])||0>=t);)t--;return n&&n.sourceLocation(o)}},{key:\"generate\",value:function generate(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,t,o,n,r,l,s,i,d,c,p,u,m,h,g,f,y,k;for(k=0,r=0,s=0,l=0,m=!1,t=\"\",h=this.lines,p=o=0,i=h.length;o<i;p=++o)if(c=h[p],c)for(g=c.columns,n=0,d=g.length;n<d;n++)if(u=g[n],!!u){for(;k<u.line;)r=0,m=!1,t+=\";\",k++;m&&(t+=\",\",m=!1),t+=this.encodeVlq(u.column-r),r=u.column,t+=this.encodeVlq(0),t+=this.encodeVlq(u.sourceLine-s),s=u.sourceLine,t+=this.encodeVlq(u.sourceColumn-l),l=u.sourceColumn,m=!0}return f=e.sourceFiles?e.sourceFiles:e.filename?[e.filename]:[\"<anonymous>\"],y={version:3,file:e.generatedFile||\"\",sourceRoot:e.sourceRoot||\"\",sources:f,names:[],mappings:t},(e.sourceMap||e.inlineMap)&&(y.sourcesContent=[a]),y}},{key:\"encodeVlq\",value:function encodeVlq(e){var a,t,l,s;for(a=\"\",l=0>e?1:0,s=(_Mathabs(e)<<1)+l;s||!a;)t=s&r,s>>=n,s&&(t|=o),a+=this.encodeBase64(t);return a}},{key:\"encodeBase64\",value:function encodeBase64(e){return t[e]||function(){throw new Error(\"Cannot Base64 encode value: \"+e)}()}}]),e}(),t,o,n,r;return n=5,o=1<<n,r=o-1,t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",e}.call(this),e.exports=t}.call(this),e.exports}(),require[\"./coffeescript\"]=function(){var e={};return function(){var a=[].indexOf,t=require(\"./lexer\"),o,n,r,l,s,d,c,i,p,u,m,h,g,f,y;n=t.Lexer;var k=require(\"./parser\");h=k.parser,p=require(\"./helpers\"),r=require(\"./sourcemap\"),m=require(\"../../package.json\"),e.VERSION=m.version,e.FILE_EXTENSIONS=o=[\".coffee\",\".litcoffee\",\".coffee.md\"],e.helpers=p,l=function(e){switch(!1){case\"function\"!=typeof Buffer:return Buffer.from(e).toString(\"base64\");case\"function\"!=typeof btoa:return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(e,a){return _StringfromCharCode(\"0x\"+a)}));default:throw new Error(\"Unable to base64 encode inline sourcemap.\")}},y=function(e){return function(a){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},o;try{return e.call(this,a,t)}catch(e){if(o=e,\"string\"!=typeof a)throw o;throw p.updateSyntaxError(o,a,t.filename)}}},f={},g={},e.compile=d=y(function(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,d,c,m,y,k,T,i,N,v,b,$,_,C,D,E,x,I,S,A,R,O,L;if(a=Object.assign({},a),y=a.sourceMap||a.inlineMap||null==a.filename,d=a.filename||\"<anonymous>\",s(d,e),null==f[d]&&(f[d]=[]),f[d].push(e),y&&($=new r),S=u.tokenize(e,a),a.referencedVars=function(){var e,a,t;for(t=[],e=0,a=S.length;e<a;e++)I=S[e],\"IDENTIFIER\"===I[0]&&t.push(I[1]);return t}(),null==a.bare||!0!==a.bare)for(T=0,v=S.length;T<v;T++)if(I=S[T],\"IMPORT\"===(C=I[0])||\"EXPORT\"===C){a.bare=!0;break}for(m=h.parse(S).compileToFragments(a),o=0,a.header&&(o+=1),a.shiftLine&&(o+=1),t=0,N=\"\",i=0,b=m.length;i<b;i++)c=m[i],y&&(c.locationData&&!/^[;\\s]*$/.test(c.code)&&$.add([c.locationData.first_line,c.locationData.first_column],[o,t],{noReplace:!0}),_=p.count(c.code,\"\\n\"),o+=_,_?t=c.code.length-(c.code.lastIndexOf(\"\\n\")+1):t+=c.code.length),N+=c.code;if(a.header&&(k=\"Generated by CoffeeScript \"+this.VERSION,N=\"// \"+k+\"\\n\"+N),y&&(L=$.generate(a,e),null==g[d]&&(g[d]=[]),g[d].push($)),a.transpile){if(\"object\"!==_typeof(a.transpile))throw new Error(\"The transpile option must be given an object with options to pass to Babel\");A=a.transpile.transpile,delete a.transpile.transpile,R=Object.assign({},a.transpile),L&&null==R.inputSourceMap&&(R.inputSourceMap=L),O=A(N,R),N=O.code,L&&O.map&&(L=O.map)}return a.inlineMap&&(n=l(JSON.stringify(L)),E=\"//# sourceMappingURL=data:application/json;base64,\"+n,x=\"//# sourceURL=\"+(null==(D=a.filename)?\"coffeescript\":D),N=N+\"\\n\"+E+\"\\n\"+x),a.sourceMap?{js:N,sourceMap:$,v3SourceMap:JSON.stringify(L,null,2)}:N}),e.tokens=y(function(e,a){return u.tokenize(e,a)}),e.nodes=y(function(e,a){return\"string\"==typeof e?h.parse(u.tokenize(e,a)):h.parse(e)}),e.run=e.eval=e.register=function(){throw new Error(\"require index.coffee, not this file\")},u=new n,h.lexer={lex:function lex(){var e,a;if(a=h.tokens[this.pos++],a){var t=a,o=_slicedToArray(t,3);e=o[0],this.yytext=o[1],this.yylloc=o[2],h.errorToken=a.origin||a,this.yylineno=this.yylloc.first_line}else e=\"\";return e},setInput:function setInput(e){return h.tokens=e,this.pos=0},upcomingInput:function upcomingInput(){return\"\"}},h.yy=require(\"./nodes\"),h.yy.parseError=function(e,a){var t=a.token,o=h,n,r,l,s,i;s=o.errorToken,i=o.tokens;var d=s,c=_slicedToArray(d,3);return r=c[0],l=c[1],n=c[2],l=function(){switch(!1){case s!==i[i.length-1]:return\"end of input\";case\"INDENT\"!==r&&\"OUTDENT\"!==r:return\"indentation\";case\"IDENTIFIER\"!==r&&\"NUMBER\"!==r&&\"INFINITY\"!==r&&\"STRING\"!==r&&\"STRING_START\"!==r&&\"REGEX\"!==r&&\"REGEX_START\"!==r:return r.replace(/_START$/,\"\").toLowerCase();default:return p.nameWhitespaceCharacter(l)}}(),p.throwSyntaxError(\"unexpected \"+l,n)},c=function(e,a){var t,o,n,r,l,s,i,d,c,p,u,m;return r=void 0,n=\"\",e.isNative()?n=\"native\":(e.isEval()?(r=e.getScriptNameOrSourceURL(),!r&&(n=e.getEvalOrigin()+\", \")):r=e.getFileName(),r||(r=\"<anonymous>\"),d=e.getLineNumber(),o=e.getColumnNumber(),p=a(r,d,o),n=p?r+\":\"+p[0]+\":\"+p[1]:r+\":\"+d+\":\"+o),l=e.getFunctionName(),s=e.isConstructor(),i=!(e.isToplevel()||s),i?(c=e.getMethodName(),m=e.getTypeName(),l?(u=t=\"\",m&&l.indexOf(m)&&(u=m+\".\"),c&&l.indexOf(\".\"+c)!==l.length-c.length-1&&(t=\" [as \"+c+\"]\"),\"\"+u+l+t+\" (\"+n+\")\"):m+\".\"+(c||\"<anonymous>\")+\" (\"+n+\")\"):s?\"new \"+(l||\"<anonymous>\")+\" (\"+n+\")\":l?l+\" (\"+n+\")\":n},i=function(e,t,n){var r,l,s,i,c,u;if(!(\"<anonymous>\"===e||(i=e.slice(e.lastIndexOf(\".\")),0<=a.call(o,i))))return null;if(\"<anonymous>\"!==e&&null!=g[e])return g[e][g[e].length-1];if(null!=g[\"<anonymous>\"])for(c=g[\"<anonymous>\"],l=c.length-1;0<=l;l+=-1)if(s=c[l],u=s.sourceLocation([t-1,n-1]),null!=(null==u?void 0:u[0])&&null!=u[1])return s;return null==f[e]?null:(r=d(f[e][f[e].length-1],{filename:e,sourceMap:!0,literate:p.isLiterate(e)}),r.sourceMap)},Error.prepareStackTrace=function(a,t){var o,n,r;return r=function(e,a,t){var o,n;return n=i(e,a,t),null!=n&&(o=n.sourceLocation([a-1,t-1])),null==o?null:[o[0]+1,o[1]+1]},n=function(){var a,n,l;for(l=[],a=0,n=t.length;a<n&&(o=t[a],o.getFunction()!==e.run);a++)l.push(\"    at \"+c(o,r));return l}(),a.toString()+\"\\n\"+n.join(\"\\n\")+\"\\n\"},s=function(e,a){var t,o,n,r;if(o=a.split(/$/m)[0],r=null==o?void 0:o.match(/^#!\\s*([^\\s]+\\s*)(.*)/),t=null==r||null==(n=r[2])?void 0:n.split(/\\s/).filter(function(e){return\"\"!==e}),1<(null==t?void 0:t.length))return console.error(\"The script to be run begins with a shebang line with more than one\\nargument. This script will fail on platforms such as Linux which only\\nallow a single argument.\"),console.error(\"The shebang line was: '\"+o+\"' in file '\"+e+\"'\"),console.error(\"The arguments were: \"+JSON.stringify(t))}}.call(this),{exports:e}.exports}(),require[\"./browser\"]=function(){var exports={},module={exports:exports};return function(){var indexOf=[].indexOf,CoffeeScript,compile,runScripts;CoffeeScript=require(\"./coffeescript\"),compile=CoffeeScript.compile,CoffeeScript.eval=function(code){var options=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return null==options.bare&&(options.bare=!0),eval(compile(code,options))},CoffeeScript.run=function(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return a.bare=!0,a.shiftLine=!0,Function(compile(e,a))()},module.exports=CoffeeScript,\"undefined\"==typeof window||null===window||(\"undefined\"!=typeof btoa&&null!==btoa&&\"undefined\"!=typeof JSON&&null!==JSON&&(compile=function(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return a.inlineMap=!0,CoffeeScript.compile(e,a)}),CoffeeScript.load=function(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},o=!!(3<arguments.length&&void 0!==arguments[3])&&arguments[3],n;return t.sourceFiles=[e],n=window.ActiveXObject?new window.ActiveXObject(\"Microsoft.XMLHTTP\"):new window.XMLHttpRequest,n.open(\"GET\",e,!0),\"overrideMimeType\"in n&&n.overrideMimeType(\"text/plain\"),n.onreadystatechange=function(){var r,l;if(4===n.readyState){if(0!==(l=n.status)&&200!==l)throw new Error(\"Could not load \"+e);else if(r=[n.responseText,t],!o){var s;(s=CoffeeScript).run.apply(s,_toConsumableArray(r))}if(a)return a(r)}},n.send(null)},runScripts=function(){var e,a,t,o,n,r,l,i,s,d;for(d=window.document.getElementsByTagName(\"script\"),a=[\"text/coffeescript\",\"text/literate-coffeescript\"],e=function(){var e,t,o,n;for(n=[],e=0,t=d.length;e<t;e++)i=d[e],(o=i.type,0<=indexOf.call(a,o))&&n.push(i);return n}(),n=0,t=function execute(){var a;if(a=e[n],a instanceof Array){var o;return(o=CoffeeScript).run.apply(o,_toConsumableArray(a)),n++,t()}},o=r=0,l=e.length;r<l;o=++r)s=e[o],function(o,n){var r,l;return r={literate:o.type===a[1]},l=o.src||o.getAttribute(\"data-src\"),l?(r.filename=l,CoffeeScript.load(l,function(a){return e[n]=a,t()},r,!0)):(r.filename=o.id&&\"\"!==o.id?o.id:\"coffeescript\"+(0===n?\"\":n),r.sourceFiles=[\"embedded\"],e[n]=[o.innerHTML,r])}(s,o);return t()},window.addEventListener?window.addEventListener(\"DOMContentLoaded\",runScripts,!1):window.attachEvent(\"onload\",runScripts))}.call(this),module.exports}(),require[\"./browser\"]}();\"function\"==typeof define&&define.amd?define(function(){return CoffeeScript}):root.CoffeeScript=CoffeeScript})(this);\n});\n\nace.define(\"ace/mode/coffee_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar coffee = require(\"../mode/coffee/coffee\");\n\nwindow.addEventListener = function() {};\n\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(250);\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            coffee.compile(value);\n        } catch(e) {\n            var loc = e.location;\n            if (loc) {\n                errors.push({\n                    row: loc.first_line,\n                    column: loc.first_column,\n                    endRow: loc.last_line,\n                    endColumn: loc.last_column,\n                    text: e.message,\n                    type: \"error\"\n                });\n            }\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/worker-css.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/css/csslint\",[], function(require, exports, module) {\nvar parserlib = {};\n(function(){\nfunction EventTarget(){\n    this._listeners = {};\n}\n\nEventTarget.prototype = {\n    constructor: EventTarget,\n    addListener: function(type, listener){\n        if (!this._listeners[type]){\n            this._listeners[type] = [];\n        }\n\n        this._listeners[type].push(listener);\n    },\n    fire: function(event){\n        if (typeof event == \"string\"){\n            event = { type: event };\n        }\n        if (typeof event.target != \"undefined\"){\n            event.target = this;\n        }\n\n        if (typeof event.type == \"undefined\"){\n            throw new Error(\"Event object missing 'type' property.\");\n        }\n\n        if (this._listeners[event.type]){\n            var listeners = this._listeners[event.type].concat();\n            for (var i=0, len=listeners.length; i < len; i++){\n                listeners[i].call(this, event);\n            }\n        }\n    },\n    removeListener: function(type, listener){\n        if (this._listeners[type]){\n            var listeners = this._listeners[type];\n            for (var i=0, len=listeners.length; i < len; i++){\n                if (listeners[i] === listener){\n                    listeners.splice(i, 1);\n                    break;\n                }\n            }\n\n\n        }\n    }\n};\nfunction StringReader(text){\n    this._input = text.replace(/\\n\\r?/g, \"\\n\");\n    this._line = 1;\n    this._col = 1;\n    this._cursor = 0;\n}\n\nStringReader.prototype = {\n    constructor: StringReader,\n    getCol: function(){\n        return this._col;\n    },\n    getLine: function(){\n        return this._line ;\n    },\n    eof: function(){\n        return (this._cursor == this._input.length);\n    },\n    peek: function(count){\n        var c = null;\n        count = (typeof count == \"undefined\" ? 1 : count);\n        if (this._cursor < this._input.length){\n            c = this._input.charAt(this._cursor + count - 1);\n        }\n\n        return c;\n    },\n    read: function(){\n        var c = null;\n        if (this._cursor < this._input.length){\n            if (this._input.charAt(this._cursor) == \"\\n\"){\n                this._line++;\n                this._col=1;\n            } else {\n                this._col++;\n            }\n            c = this._input.charAt(this._cursor++);\n        }\n\n        return c;\n    },\n    mark: function(){\n        this._bookmark = {\n            cursor: this._cursor,\n            line:   this._line,\n            col:    this._col\n        };\n    },\n\n    reset: function(){\n        if (this._bookmark){\n            this._cursor = this._bookmark.cursor;\n            this._line = this._bookmark.line;\n            this._col = this._bookmark.col;\n            delete this._bookmark;\n        }\n    },\n    readTo: function(pattern){\n\n        var buffer = \"\",\n            c;\n        while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) != buffer.length - pattern.length){\n            c = this.read();\n            if (c){\n                buffer += c;\n            } else {\n                throw new Error(\"Expected \\\"\" + pattern + \"\\\" at line \" + this._line  + \", col \" + this._col + \".\");\n            }\n        }\n\n        return buffer;\n\n    },\n    readWhile: function(filter){\n\n        var buffer = \"\",\n            c = this.read();\n\n        while(c !== null && filter(c)){\n            buffer += c;\n            c = this.read();\n        }\n\n        return buffer;\n\n    },\n    readMatch: function(matcher){\n\n        var source = this._input.substring(this._cursor),\n            value = null;\n        if (typeof matcher == \"string\"){\n            if (source.indexOf(matcher) === 0){\n                value = this.readCount(matcher.length);\n            }\n        } else if (matcher instanceof RegExp){\n            if (matcher.test(source)){\n                value = this.readCount(RegExp.lastMatch.length);\n            }\n        }\n\n        return value;\n    },\n    readCount: function(count){\n        var buffer = \"\";\n\n        while(count--){\n            buffer += this.read();\n        }\n\n        return buffer;\n    }\n\n};\nfunction SyntaxError(message, line, col){\n    this.col = col;\n    this.line = line;\n    this.message = message;\n\n}\nSyntaxError.prototype = new Error();\nfunction SyntaxUnit(text, line, col, type){\n    this.col = col;\n    this.line = line;\n    this.text = text;\n    this.type = type;\n}\nSyntaxUnit.fromToken = function(token){\n    return new SyntaxUnit(token.value, token.startLine, token.startCol);\n};\n\nSyntaxUnit.prototype = {\n    constructor: SyntaxUnit,\n    valueOf: function(){\n        return this.text;\n    },\n    toString: function(){\n        return this.text;\n    }\n\n};\nfunction TokenStreamBase(input, tokenData){\n    this._reader = input ? new StringReader(input.toString()) : null;\n    this._token = null;\n    this._tokenData = tokenData;\n    this._lt = [];\n    this._ltIndex = 0;\n\n    this._ltIndexCache = [];\n}\nTokenStreamBase.createTokenData = function(tokens){\n\n    var nameMap     = [],\n        typeMap     = {},\n        tokenData     = tokens.concat([]),\n        i            = 0,\n        len            = tokenData.length+1;\n\n    tokenData.UNKNOWN = -1;\n    tokenData.unshift({name:\"EOF\"});\n\n    for (; i < len; i++){\n        nameMap.push(tokenData[i].name);\n        tokenData[tokenData[i].name] = i;\n        if (tokenData[i].text){\n            typeMap[tokenData[i].text] = i;\n        }\n    }\n\n    tokenData.name = function(tt){\n        return nameMap[tt];\n    };\n\n    tokenData.type = function(c){\n        return typeMap[c];\n    };\n\n    return tokenData;\n};\n\nTokenStreamBase.prototype = {\n    constructor: TokenStreamBase,\n    match: function(tokenTypes, channel){\n        if (!(tokenTypes instanceof Array)){\n            tokenTypes = [tokenTypes];\n        }\n\n        var tt  = this.get(channel),\n            i   = 0,\n            len = tokenTypes.length;\n\n        while(i < len){\n            if (tt == tokenTypes[i++]){\n                return true;\n            }\n        }\n        this.unget();\n        return false;\n    },\n    mustMatch: function(tokenTypes, channel){\n\n        var token;\n        if (!(tokenTypes instanceof Array)){\n            tokenTypes = [tokenTypes];\n        }\n\n        if (!this.match.apply(this, arguments)){\n            token = this.LT(1);\n            throw new SyntaxError(\"Expected \" + this._tokenData[tokenTypes[0]].name +\n                \" at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n        }\n    },\n    advance: function(tokenTypes, channel){\n\n        while(this.LA(0) !== 0 && !this.match(tokenTypes, channel)){\n            this.get();\n        }\n\n        return this.LA(0);\n    },\n    get: function(channel){\n\n        var tokenInfo   = this._tokenData,\n            reader      = this._reader,\n            value,\n            i           =0,\n            len         = tokenInfo.length,\n            found       = false,\n            token,\n            info;\n        if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length){\n\n            i++;\n            this._token = this._lt[this._ltIndex++];\n            info = tokenInfo[this._token.type];\n            while((info.channel !== undefined && channel !== info.channel) &&\n                    this._ltIndex < this._lt.length){\n                this._token = this._lt[this._ltIndex++];\n                info = tokenInfo[this._token.type];\n                i++;\n            }\n            if ((info.channel === undefined || channel === info.channel) &&\n                    this._ltIndex <= this._lt.length){\n                this._ltIndexCache.push(i);\n                return this._token.type;\n            }\n        }\n        token = this._getToken();\n        if (token.type > -1 && !tokenInfo[token.type].hide){\n            token.channel = tokenInfo[token.type].channel;\n            this._token = token;\n            this._lt.push(token);\n            this._ltIndexCache.push(this._lt.length - this._ltIndex + i);\n            if (this._lt.length > 5){\n                this._lt.shift();\n            }\n            if (this._ltIndexCache.length > 5){\n                this._ltIndexCache.shift();\n            }\n            this._ltIndex = this._lt.length;\n        }\n        info = tokenInfo[token.type];\n        if (info &&\n                (info.hide ||\n                (info.channel !== undefined && channel !== info.channel))){\n            return this.get(channel);\n        } else {\n            return token.type;\n        }\n    },\n    LA: function(index){\n        var total = index,\n            tt;\n        if (index > 0){\n            if (index > 5){\n                throw new Error(\"Too much lookahead.\");\n            }\n            while(total){\n                tt = this.get();\n                total--;\n            }\n            while(total < index){\n                this.unget();\n                total++;\n            }\n        } else if (index < 0){\n\n            if(this._lt[this._ltIndex+index]){\n                tt = this._lt[this._ltIndex+index].type;\n            } else {\n                throw new Error(\"Too much lookbehind.\");\n            }\n\n        } else {\n            tt = this._token.type;\n        }\n\n        return tt;\n\n    },\n    LT: function(index){\n        this.LA(index);\n        return this._lt[this._ltIndex+index-1];\n    },\n    peek: function(){\n        return this.LA(1);\n    },\n    token: function(){\n        return this._token;\n    },\n    tokenName: function(tokenType){\n        if (tokenType < 0 || tokenType > this._tokenData.length){\n            return \"UNKNOWN_TOKEN\";\n        } else {\n            return this._tokenData[tokenType].name;\n        }\n    },\n    tokenType: function(tokenName){\n        return this._tokenData[tokenName] || -1;\n    },\n    unget: function(){\n        if (this._ltIndexCache.length){\n            this._ltIndex -= this._ltIndexCache.pop();//--;\n            this._token = this._lt[this._ltIndex - 1];\n        } else {\n            throw new Error(\"Too much lookahead.\");\n        }\n    }\n\n};\n\n\nparserlib.util = {\nStringReader: StringReader,\nSyntaxError : SyntaxError,\nSyntaxUnit  : SyntaxUnit,\nEventTarget : EventTarget,\nTokenStreamBase : TokenStreamBase\n};\n})();\n(function(){\nvar EventTarget = parserlib.util.EventTarget,\nTokenStreamBase = parserlib.util.TokenStreamBase,\nStringReader = parserlib.util.StringReader,\nSyntaxError = parserlib.util.SyntaxError,\nSyntaxUnit  = parserlib.util.SyntaxUnit;\n\nvar Colors = {\n    aliceblue       :\"#f0f8ff\",\n    antiquewhite    :\"#faebd7\",\n    aqua            :\"#00ffff\",\n    aquamarine      :\"#7fffd4\",\n    azure           :\"#f0ffff\",\n    beige           :\"#f5f5dc\",\n    bisque          :\"#ffe4c4\",\n    black           :\"#000000\",\n    blanchedalmond  :\"#ffebcd\",\n    blue            :\"#0000ff\",\n    blueviolet      :\"#8a2be2\",\n    brown           :\"#a52a2a\",\n    burlywood       :\"#deb887\",\n    cadetblue       :\"#5f9ea0\",\n    chartreuse      :\"#7fff00\",\n    chocolate       :\"#d2691e\",\n    coral           :\"#ff7f50\",\n    cornflowerblue  :\"#6495ed\",\n    cornsilk        :\"#fff8dc\",\n    crimson         :\"#dc143c\",\n    cyan            :\"#00ffff\",\n    darkblue        :\"#00008b\",\n    darkcyan        :\"#008b8b\",\n    darkgoldenrod   :\"#b8860b\",\n    darkgray        :\"#a9a9a9\",\n    darkgrey        :\"#a9a9a9\",\n    darkgreen       :\"#006400\",\n    darkkhaki       :\"#bdb76b\",\n    darkmagenta     :\"#8b008b\",\n    darkolivegreen  :\"#556b2f\",\n    darkorange      :\"#ff8c00\",\n    darkorchid      :\"#9932cc\",\n    darkred         :\"#8b0000\",\n    darksalmon      :\"#e9967a\",\n    darkseagreen    :\"#8fbc8f\",\n    darkslateblue   :\"#483d8b\",\n    darkslategray   :\"#2f4f4f\",\n    darkslategrey   :\"#2f4f4f\",\n    darkturquoise   :\"#00ced1\",\n    darkviolet      :\"#9400d3\",\n    deeppink        :\"#ff1493\",\n    deepskyblue     :\"#00bfff\",\n    dimgray         :\"#696969\",\n    dimgrey         :\"#696969\",\n    dodgerblue      :\"#1e90ff\",\n    firebrick       :\"#b22222\",\n    floralwhite     :\"#fffaf0\",\n    forestgreen     :\"#228b22\",\n    fuchsia         :\"#ff00ff\",\n    gainsboro       :\"#dcdcdc\",\n    ghostwhite      :\"#f8f8ff\",\n    gold            :\"#ffd700\",\n    goldenrod       :\"#daa520\",\n    gray            :\"#808080\",\n    grey            :\"#808080\",\n    green           :\"#008000\",\n    greenyellow     :\"#adff2f\",\n    honeydew        :\"#f0fff0\",\n    hotpink         :\"#ff69b4\",\n    indianred       :\"#cd5c5c\",\n    indigo          :\"#4b0082\",\n    ivory           :\"#fffff0\",\n    khaki           :\"#f0e68c\",\n    lavender        :\"#e6e6fa\",\n    lavenderblush   :\"#fff0f5\",\n    lawngreen       :\"#7cfc00\",\n    lemonchiffon    :\"#fffacd\",\n    lightblue       :\"#add8e6\",\n    lightcoral      :\"#f08080\",\n    lightcyan       :\"#e0ffff\",\n    lightgoldenrodyellow  :\"#fafad2\",\n    lightgray       :\"#d3d3d3\",\n    lightgrey       :\"#d3d3d3\",\n    lightgreen      :\"#90ee90\",\n    lightpink       :\"#ffb6c1\",\n    lightsalmon     :\"#ffa07a\",\n    lightseagreen   :\"#20b2aa\",\n    lightskyblue    :\"#87cefa\",\n    lightslategray  :\"#778899\",\n    lightslategrey  :\"#778899\",\n    lightsteelblue  :\"#b0c4de\",\n    lightyellow     :\"#ffffe0\",\n    lime            :\"#00ff00\",\n    limegreen       :\"#32cd32\",\n    linen           :\"#faf0e6\",\n    magenta         :\"#ff00ff\",\n    maroon          :\"#800000\",\n    mediumaquamarine:\"#66cdaa\",\n    mediumblue      :\"#0000cd\",\n    mediumorchid    :\"#ba55d3\",\n    mediumpurple    :\"#9370d8\",\n    mediumseagreen  :\"#3cb371\",\n    mediumslateblue :\"#7b68ee\",\n    mediumspringgreen   :\"#00fa9a\",\n    mediumturquoise :\"#48d1cc\",\n    mediumvioletred :\"#c71585\",\n    midnightblue    :\"#191970\",\n    mintcream       :\"#f5fffa\",\n    mistyrose       :\"#ffe4e1\",\n    moccasin        :\"#ffe4b5\",\n    navajowhite     :\"#ffdead\",\n    navy            :\"#000080\",\n    oldlace         :\"#fdf5e6\",\n    olive           :\"#808000\",\n    olivedrab       :\"#6b8e23\",\n    orange          :\"#ffa500\",\n    orangered       :\"#ff4500\",\n    orchid          :\"#da70d6\",\n    palegoldenrod   :\"#eee8aa\",\n    palegreen       :\"#98fb98\",\n    paleturquoise   :\"#afeeee\",\n    palevioletred   :\"#d87093\",\n    papayawhip      :\"#ffefd5\",\n    peachpuff       :\"#ffdab9\",\n    peru            :\"#cd853f\",\n    pink            :\"#ffc0cb\",\n    plum            :\"#dda0dd\",\n    powderblue      :\"#b0e0e6\",\n    purple          :\"#800080\",\n    red             :\"#ff0000\",\n    rosybrown       :\"#bc8f8f\",\n    royalblue       :\"#4169e1\",\n    saddlebrown     :\"#8b4513\",\n    salmon          :\"#fa8072\",\n    sandybrown      :\"#f4a460\",\n    seagreen        :\"#2e8b57\",\n    seashell        :\"#fff5ee\",\n    sienna          :\"#a0522d\",\n    silver          :\"#c0c0c0\",\n    skyblue         :\"#87ceeb\",\n    slateblue       :\"#6a5acd\",\n    slategray       :\"#708090\",\n    slategrey       :\"#708090\",\n    snow            :\"#fffafa\",\n    springgreen     :\"#00ff7f\",\n    steelblue       :\"#4682b4\",\n    tan             :\"#d2b48c\",\n    teal            :\"#008080\",\n    thistle         :\"#d8bfd8\",\n    tomato          :\"#ff6347\",\n    turquoise       :\"#40e0d0\",\n    violet          :\"#ee82ee\",\n    wheat           :\"#f5deb3\",\n    white           :\"#ffffff\",\n    whitesmoke      :\"#f5f5f5\",\n    yellow          :\"#ffff00\",\n    yellowgreen     :\"#9acd32\",\n    activeBorder        :\"Active window border.\",\n    activecaption       :\"Active window caption.\",\n    appworkspace        :\"Background color of multiple document interface.\",\n    background          :\"Desktop background.\",\n    buttonface          :\"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonhighlight     :\"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonshadow        :\"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttontext          :\"Text on push buttons.\",\n    captiontext         :\"Text in caption, size box, and scrollbar arrow box.\",\n    graytext            :\"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.\",\n    greytext            :\"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.\",\n    highlight           :\"Item(s) selected in a control.\",\n    highlighttext       :\"Text of item(s) selected in a control.\",\n    inactiveborder      :\"Inactive window border.\",\n    inactivecaption     :\"Inactive window caption.\",\n    inactivecaptiontext :\"Color of text in an inactive caption.\",\n    infobackground      :\"Background color for tooltip controls.\",\n    infotext            :\"Text color for tooltip controls.\",\n    menu                :\"Menu background.\",\n    menutext            :\"Text in menus.\",\n    scrollbar           :\"Scroll bar gray area.\",\n    threeddarkshadow    :\"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedface          :\"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedhighlight     :\"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedlightshadow   :\"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedshadow        :\"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    window              :\"Window background.\",\n    windowframe         :\"Window frame.\",\n    windowtext          :\"Text in windows.\"\n};\nfunction Combinator(text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.COMBINATOR_TYPE);\n    this.type = \"unknown\";\n    if (/^\\s+$/.test(text)){\n        this.type = \"descendant\";\n    } else if (text == \">\"){\n        this.type = \"child\";\n    } else if (text == \"+\"){\n        this.type = \"adjacent-sibling\";\n    } else if (text == \"~\"){\n        this.type = \"sibling\";\n    }\n\n}\n\nCombinator.prototype = new SyntaxUnit();\nCombinator.prototype.constructor = Combinator;\nfunction MediaFeature(name, value){\n\n    SyntaxUnit.call(this, \"(\" + name + (value !== null ? \":\" + value : \"\") + \")\", name.startLine, name.startCol, Parser.MEDIA_FEATURE_TYPE);\n    this.name = name;\n    this.value = value;\n}\n\nMediaFeature.prototype = new SyntaxUnit();\nMediaFeature.prototype.constructor = MediaFeature;\nfunction MediaQuery(modifier, mediaType, features, line, col){\n\n    SyntaxUnit.call(this, (modifier ? modifier + \" \": \"\") + (mediaType ? mediaType : \"\") + (mediaType && features.length > 0 ? \" and \" : \"\") + features.join(\" and \"), line, col, Parser.MEDIA_QUERY_TYPE);\n    this.modifier = modifier;\n    this.mediaType = mediaType;\n    this.features = features;\n\n}\n\nMediaQuery.prototype = new SyntaxUnit();\nMediaQuery.prototype.constructor = MediaQuery;\nfunction Parser(options){\n    EventTarget.call(this);\n\n\n    this.options = options || {};\n\n    this._tokenStream = null;\n}\nParser.DEFAULT_TYPE = 0;\nParser.COMBINATOR_TYPE = 1;\nParser.MEDIA_FEATURE_TYPE = 2;\nParser.MEDIA_QUERY_TYPE = 3;\nParser.PROPERTY_NAME_TYPE = 4;\nParser.PROPERTY_VALUE_TYPE = 5;\nParser.PROPERTY_VALUE_PART_TYPE = 6;\nParser.SELECTOR_TYPE = 7;\nParser.SELECTOR_PART_TYPE = 8;\nParser.SELECTOR_SUB_PART_TYPE = 9;\n\nParser.prototype = function(){\n\n    var proto = new EventTarget(),  //new prototype\n        prop,\n        additions =  {\n            constructor: Parser,\n            DEFAULT_TYPE : 0,\n            COMBINATOR_TYPE : 1,\n            MEDIA_FEATURE_TYPE : 2,\n            MEDIA_QUERY_TYPE : 3,\n            PROPERTY_NAME_TYPE : 4,\n            PROPERTY_VALUE_TYPE : 5,\n            PROPERTY_VALUE_PART_TYPE : 6,\n            SELECTOR_TYPE : 7,\n            SELECTOR_PART_TYPE : 8,\n            SELECTOR_SUB_PART_TYPE : 9,\n\n            _stylesheet: function(){\n\n                var tokenStream = this._tokenStream,\n                    charset     = null,\n                    count,\n                    token,\n                    tt;\n\n                this.fire(\"startstylesheet\");\n                this._charset();\n\n                this._skipCruft();\n                while (tokenStream.peek() == Tokens.IMPORT_SYM){\n                    this._import();\n                    this._skipCruft();\n                }\n                while (tokenStream.peek() == Tokens.NAMESPACE_SYM){\n                    this._namespace();\n                    this._skipCruft();\n                }\n                tt = tokenStream.peek();\n                while(tt > Tokens.EOF){\n\n                    try {\n\n                        switch(tt){\n                            case Tokens.MEDIA_SYM:\n                                this._media();\n                                this._skipCruft();\n                                break;\n                            case Tokens.PAGE_SYM:\n                                this._page();\n                                this._skipCruft();\n                                break;\n                            case Tokens.FONT_FACE_SYM:\n                                this._font_face();\n                                this._skipCruft();\n                                break;\n                            case Tokens.KEYFRAMES_SYM:\n                                this._keyframes();\n                                this._skipCruft();\n                                break;\n                            case Tokens.VIEWPORT_SYM:\n                                this._viewport();\n                                this._skipCruft();\n                                break;\n                            case Tokens.UNKNOWN_SYM:  //unknown @ rule\n                                tokenStream.get();\n                                if (!this.options.strict){\n                                    this.fire({\n                                        type:       \"error\",\n                                        error:      null,\n                                        message:    \"Unknown @ rule: \" + tokenStream.LT(0).value + \".\",\n                                        line:       tokenStream.LT(0).startLine,\n                                        col:        tokenStream.LT(0).startCol\n                                    });\n                                    count=0;\n                                    while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE){\n                                        count++;    //keep track of nesting depth\n                                    }\n\n                                    while(count){\n                                        tokenStream.advance([Tokens.RBRACE]);\n                                        count--;\n                                    }\n\n                                } else {\n                                    throw new SyntaxError(\"Unknown @ rule.\", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol);\n                                }\n                                break;\n                            case Tokens.S:\n                                this._readWhitespace();\n                                break;\n                            default:\n                                if(!this._ruleset()){\n                                    switch(tt){\n                                        case Tokens.CHARSET_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._charset(false);\n                                            throw new SyntaxError(\"@charset not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.IMPORT_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._import(false);\n                                            throw new SyntaxError(\"@import not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.NAMESPACE_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._namespace(false);\n                                            throw new SyntaxError(\"@namespace not allowed here.\", token.startLine, token.startCol);\n                                        default:\n                                            tokenStream.get();  //get the last token\n                                            this._unexpectedToken(tokenStream.token());\n                                    }\n\n                                }\n                        }\n                    } catch(ex) {\n                        if (ex instanceof SyntaxError && !this.options.strict){\n                            this.fire({\n                                type:       \"error\",\n                                error:      ex,\n                                message:    ex.message,\n                                line:       ex.line,\n                                col:        ex.col\n                            });\n                        } else {\n                            throw ex;\n                        }\n                    }\n\n                    tt = tokenStream.peek();\n                }\n\n                if (tt != Tokens.EOF){\n                    this._unexpectedToken(tokenStream.token());\n                }\n\n                this.fire(\"endstylesheet\");\n            },\n\n            _charset: function(emit){\n                var tokenStream = this._tokenStream,\n                    charset,\n                    token,\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.CHARSET_SYM)){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.STRING);\n\n                    token = tokenStream.token();\n                    charset = token.value;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.SEMICOLON);\n\n                    if (emit !== false){\n                        this.fire({\n                            type:   \"charset\",\n                            charset:charset,\n                            line:   line,\n                            col:    col\n                        });\n                    }\n                }\n            },\n\n            _import: function(emit){\n\n                var tokenStream = this._tokenStream,\n                    tt,\n                    uri,\n                    importToken,\n                    mediaList   = [];\n                tokenStream.mustMatch(Tokens.IMPORT_SYM);\n                importToken = tokenStream.token();\n                this._readWhitespace();\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n                uri = tokenStream.token().value.replace(/^(?:url\\()?[\"']?([^\"']+?)[\"']?\\)?$/, \"$1\");\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false){\n                    this.fire({\n                        type:   \"import\",\n                        uri:    uri,\n                        media:  mediaList,\n                        line:   importToken.startLine,\n                        col:    importToken.startCol\n                    });\n                }\n\n            },\n\n            _namespace: function(emit){\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    prefix,\n                    uri;\n                tokenStream.mustMatch(Tokens.NAMESPACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n                this._readWhitespace();\n                if (tokenStream.match(Tokens.IDENT)){\n                    prefix = tokenStream.token().value;\n                    this._readWhitespace();\n                }\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n                uri = tokenStream.token().value.replace(/(?:url\\()?[\"']([^\"']+)[\"']\\)?/, \"$1\");\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false){\n                    this.fire({\n                        type:   \"namespace\",\n                        prefix: prefix,\n                        uri:    uri,\n                        line:   line,\n                        col:    col\n                    });\n                }\n\n            },\n\n            _media: function(){\n                var tokenStream     = this._tokenStream,\n                    line,\n                    col,\n                    mediaList;//       = [];\n                tokenStream.mustMatch(Tokens.MEDIA_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n\n                tokenStream.mustMatch(Tokens.LBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n\n                while(true) {\n                    if (tokenStream.peek() == Tokens.PAGE_SYM){\n                        this._page();\n                    } else if (tokenStream.peek() == Tokens.FONT_FACE_SYM){\n                        this._font_face();\n                    } else if (tokenStream.peek() == Tokens.VIEWPORT_SYM){\n                        this._viewport();\n                    } else if (!this._ruleset()){\n                        break;\n                    }\n                }\n\n                tokenStream.mustMatch(Tokens.RBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"endmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n            },\n            _media_query_list: function(){\n                var tokenStream = this._tokenStream,\n                    mediaList   = [];\n\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() == Tokens.IDENT || tokenStream.peek() == Tokens.LPAREN){\n                    mediaList.push(this._media_query());\n                }\n\n                while(tokenStream.match(Tokens.COMMA)){\n                    this._readWhitespace();\n                    mediaList.push(this._media_query());\n                }\n\n                return mediaList;\n            },\n            _media_query: function(){\n                var tokenStream = this._tokenStream,\n                    type        = null,\n                    ident       = null,\n                    token       = null,\n                    expressions = [];\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    ident = tokenStream.token().value.toLowerCase();\n                    if (ident != \"only\" && ident != \"not\"){\n                        tokenStream.unget();\n                        ident = null;\n                    } else {\n                        token = tokenStream.token();\n                    }\n                }\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() == Tokens.IDENT){\n                    type = this._media_type();\n                    if (token === null){\n                        token = tokenStream.token();\n                    }\n                } else if (tokenStream.peek() == Tokens.LPAREN){\n                    if (token === null){\n                        token = tokenStream.LT(1);\n                    }\n                    expressions.push(this._media_expression());\n                }\n\n                if (type === null && expressions.length === 0){\n                    return null;\n                } else {\n                    this._readWhitespace();\n                    while (tokenStream.match(Tokens.IDENT)){\n                        if (tokenStream.token().value.toLowerCase() != \"and\"){\n                            this._unexpectedToken(tokenStream.token());\n                        }\n\n                        this._readWhitespace();\n                        expressions.push(this._media_expression());\n                    }\n                }\n\n                return new MediaQuery(ident, type, expressions, token.startLine, token.startCol);\n            },\n            _media_type: function(){\n                return this._media_feature();\n            },\n            _media_expression: function(){\n                var tokenStream = this._tokenStream,\n                    feature     = null,\n                    token,\n                    expression  = null;\n\n                tokenStream.mustMatch(Tokens.LPAREN);\n                this._readWhitespace();\n\n                feature = this._media_feature();\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.COLON)){\n                    this._readWhitespace();\n                    token = tokenStream.LT(1);\n                    expression = this._expression();\n                }\n\n                tokenStream.mustMatch(Tokens.RPAREN);\n                this._readWhitespace();\n\n                return new MediaFeature(feature, (expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null));\n            },\n            _media_feature: function(){\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n            _page: function(){\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    identifier  = null,\n                    pseudoPage  = null;\n                tokenStream.mustMatch(Tokens.PAGE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    identifier = tokenStream.token().value;\n                    if (identifier.toLowerCase() === \"auto\"){\n                        this._unexpectedToken(tokenStream.token());\n                    }\n                }\n                if (tokenStream.peek() == Tokens.COLON){\n                    pseudoPage = this._pseudo_page();\n                }\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true, true);\n\n                this.fire({\n                    type:   \"endpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n            },\n            _margin: function(){\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    marginSym   = this._margin_sym();\n\n                if (marginSym){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this.fire({\n                        type: \"startpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type: \"endpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n            _margin_sym: function(){\n\n                var tokenStream = this._tokenStream;\n\n                if(tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM,\n                        Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM,\n                        Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM,\n                        Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM,\n                        Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM,\n                        Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM,\n                        Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM]))\n                {\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else {\n                    return null;\n                }\n\n            },\n\n            _pseudo_page: function(){\n\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch(Tokens.COLON);\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                return tokenStream.token().value;\n            },\n\n            _font_face: function(){\n                var tokenStream = this._tokenStream,\n                    line,\n                    col;\n                tokenStream.mustMatch(Tokens.FONT_FACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startfontface\",\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endfontface\",\n                    line:   line,\n                    col:    col\n                });\n            },\n\n            _viewport: function(){\n                 var tokenStream = this._tokenStream,\n                    line,\n                    col;\n\n                    tokenStream.mustMatch(Tokens.VIEWPORT_SYM);\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n\n                    this.fire({\n                        type:   \"startviewport\",\n                        line:   line,\n                        col:    col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type:   \"endviewport\",\n                        line:   line,\n                        col:    col\n                    });\n\n            },\n\n            _operator: function(inFunction){\n\n                var tokenStream = this._tokenStream,\n                    token       = null;\n\n                if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) ||\n                    (inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))){\n                    token =  tokenStream.token();\n                    this._readWhitespace();\n                }\n                return token ? PropertyValuePart.fromToken(token) : null;\n\n            },\n\n            _combinator: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    token;\n\n                if(tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])){\n                    token = tokenStream.token();\n                    value = new Combinator(token.value, token.startLine, token.startCol);\n                    this._readWhitespace();\n                }\n\n                return value;\n            },\n\n            _unary_operator: function(){\n\n                var tokenStream = this._tokenStream;\n\n                if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])){\n                    return tokenStream.token().value;\n                } else {\n                    return null;\n                }\n            },\n\n            _property: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    hack        = null,\n                    tokenValue,\n                    token,\n                    line,\n                    col;\n                if (tokenStream.peek() == Tokens.STAR && this.options.starHack){\n                    tokenStream.get();\n                    token = tokenStream.token();\n                    hack = token.value;\n                    line = token.startLine;\n                    col = token.startCol;\n                }\n\n                if(tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n                    tokenValue = token.value;\n                    if (tokenValue.charAt(0) == \"_\" && this.options.underscoreHack){\n                        hack = \"_\";\n                        tokenValue = tokenValue.substring(1);\n                    }\n\n                    value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol));\n                    this._readWhitespace();\n                }\n\n                return value;\n            },\n            _ruleset: function(){\n\n                var tokenStream = this._tokenStream,\n                    tt,\n                    selectors;\n                try {\n                    selectors = this._selectors_group();\n                } catch (ex){\n                    if (ex instanceof SyntaxError && !this.options.strict){\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n                        tt = tokenStream.advance([Tokens.RBRACE]);\n                        if (tt == Tokens.RBRACE){\n                        } else {\n                            throw ex;\n                        }\n\n                    } else {\n                        throw ex;\n                    }\n                    return true;\n                }\n                if (selectors){\n\n                    this.fire({\n                        type:       \"startrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type:       \"endrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                }\n\n                return selectors;\n\n            },\n            _selectors_group: function(){\n                var tokenStream = this._tokenStream,\n                    selectors   = [],\n                    selector;\n\n                selector = this._selector();\n                if (selector !== null){\n\n                    selectors.push(selector);\n                    while(tokenStream.match(Tokens.COMMA)){\n                        this._readWhitespace();\n                        selector = this._selector();\n                        if (selector !== null){\n                            selectors.push(selector);\n                        } else {\n                            this._unexpectedToken(tokenStream.LT(1));\n                        }\n                    }\n                }\n\n                return selectors.length ? selectors : null;\n            },\n            _selector: function(){\n\n                var tokenStream = this._tokenStream,\n                    selector    = [],\n                    nextSelector = null,\n                    combinator  = null,\n                    ws          = null;\n                nextSelector = this._simple_selector_sequence();\n                if (nextSelector === null){\n                    return null;\n                }\n\n                selector.push(nextSelector);\n\n                do {\n                    combinator = this._combinator();\n\n                    if (combinator !== null){\n                        selector.push(combinator);\n                        nextSelector = this._simple_selector_sequence();\n                        if (nextSelector === null){\n                            this._unexpectedToken(tokenStream.LT(1));\n                        } else {\n                            selector.push(nextSelector);\n                        }\n                    } else {\n                        if (this._readWhitespace()){\n                            ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol);\n                            combinator = this._combinator();\n                            nextSelector = this._simple_selector_sequence();\n                            if (nextSelector === null){\n                                if (combinator !== null){\n                                    this._unexpectedToken(tokenStream.LT(1));\n                                }\n                            } else {\n\n                                if (combinator !== null){\n                                    selector.push(combinator);\n                                } else {\n                                    selector.push(ws);\n                                }\n\n                                selector.push(nextSelector);\n                            }\n                        } else {\n                            break;\n                        }\n\n                    }\n                } while(true);\n\n                return new Selector(selector, selector[0].line, selector[0].col);\n            },\n            _simple_selector_sequence: function(){\n\n                var tokenStream = this._tokenStream,\n                    elementName = null,\n                    modifiers   = [],\n                    selectorText= \"\",\n                    components  = [\n                        function(){\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo,\n                        this._negation\n                    ],\n                    i           = 0,\n                    len         = components.length,\n                    component   = null,\n                    found       = false,\n                    line,\n                    col;\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                elementName = this._type_selector();\n                if (!elementName){\n                    elementName = this._universal();\n                }\n\n                if (elementName !== null){\n                    selectorText += elementName;\n                }\n\n                while(true){\n                    if (tokenStream.peek() === Tokens.S){\n                        break;\n                    }\n                    while(i < len && component === null){\n                        component = components[i++].call(this);\n                    }\n\n                    if (component === null){\n                        if (selectorText === \"\"){\n                            return null;\n                        } else {\n                            break;\n                        }\n                    } else {\n                        i = 0;\n                        modifiers.push(component);\n                        selectorText += component.toString();\n                        component = null;\n                    }\n                }\n\n\n                return selectorText !== \"\" ?\n                        new SelectorPart(elementName, modifiers, selectorText, line, col) :\n                        null;\n            },\n            _type_selector: function(){\n\n                var tokenStream = this._tokenStream,\n                    ns          = this._namespace_prefix(),\n                    elementName = this._element_name();\n\n                if (!elementName){\n                    if (ns){\n                        tokenStream.unget();\n                        if (ns.length > 1){\n                            tokenStream.unget();\n                        }\n                    }\n\n                    return null;\n                } else {\n                    if (ns){\n                        elementName.text = ns + elementName.text;\n                        elementName.col -= ns.length;\n                    }\n                    return elementName;\n                }\n            },\n            _class: function(){\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.DOT)){\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    token = tokenStream.token();\n                    return new SelectorSubPart(\".\" + token.value, \"class\", token.startLine, token.startCol - 1);\n                } else {\n                    return null;\n                }\n\n            },\n            _element_name: function(){\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n                    return new SelectorSubPart(token.value, \"elementName\", token.startLine, token.startCol);\n\n                } else {\n                    return null;\n                }\n            },\n            _namespace_prefix: function(){\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n                if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE){\n\n                    if(tokenStream.match([Tokens.IDENT, Tokens.STAR])){\n                        value += tokenStream.token().value;\n                    }\n\n                    tokenStream.mustMatch(Tokens.PIPE);\n                    value += \"|\";\n\n                }\n\n                return value.length ? value : null;\n            },\n            _universal: function(){\n                var tokenStream = this._tokenStream,\n                    value       = \"\",\n                    ns;\n\n                ns = this._namespace_prefix();\n                if(ns){\n                    value += ns;\n                }\n\n                if(tokenStream.match(Tokens.STAR)){\n                    value += \"*\";\n                }\n\n                return value.length ? value : null;\n\n           },\n            _attrib: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    ns,\n                    token;\n\n                if (tokenStream.match(Tokens.LBRACKET)){\n                    token = tokenStream.token();\n                    value = token.value;\n                    value += this._readWhitespace();\n\n                    ns = this._namespace_prefix();\n\n                    if (ns){\n                        value += ns;\n                    }\n\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n\n                    if(tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH,\n                            Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])){\n\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n\n                        tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACKET);\n\n                    return new SelectorSubPart(value + \"]\", \"attribute\", token.startLine, token.startCol);\n                } else {\n                    return null;\n                }\n            },\n            _pseudo: function(){\n\n                var tokenStream = this._tokenStream,\n                    pseudo      = null,\n                    colons      = \":\",\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.COLON)){\n\n                    if (tokenStream.match(Tokens.COLON)){\n                        colons += \":\";\n                    }\n\n                    if (tokenStream.match(Tokens.IDENT)){\n                        pseudo = tokenStream.token().value;\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol - colons.length;\n                    } else if (tokenStream.peek() == Tokens.FUNCTION){\n                        line = tokenStream.LT(1).startLine;\n                        col = tokenStream.LT(1).startCol - colons.length;\n                        pseudo = this._functional_pseudo();\n                    }\n\n                    if (pseudo){\n                        pseudo = new SelectorSubPart(colons + pseudo, \"pseudo\", line, col);\n                    }\n                }\n\n                return pseudo;\n            },\n            _functional_pseudo: function(){\n\n                var tokenStream = this._tokenStream,\n                    value = null;\n\n                if(tokenStream.match(Tokens.FUNCTION)){\n                    value = tokenStream.token().value;\n                    value += this._readWhitespace();\n                    value += this._expression();\n                    tokenStream.mustMatch(Tokens.RPAREN);\n                    value += \")\";\n                }\n\n                return value;\n            },\n            _expression: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n\n                while(tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION,\n                        Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH,\n                        Tokens.FREQ, Tokens.ANGLE, Tokens.TIME,\n                        Tokens.RESOLUTION, Tokens.SLASH])){\n\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n                }\n\n                return value.length ? value : null;\n\n            },\n            _negation: function(){\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    value       = \"\",\n                    arg,\n                    subpart     = null;\n\n                if (tokenStream.match(Tokens.NOT)){\n                    value = tokenStream.token().value;\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                    value += this._readWhitespace();\n                    arg = this._negation_arg();\n                    value += arg;\n                    value += this._readWhitespace();\n                    tokenStream.match(Tokens.RPAREN);\n                    value += tokenStream.token().value;\n\n                    subpart = new SelectorSubPart(value, \"not\", line, col);\n                    subpart.args.push(arg);\n                }\n\n                return subpart;\n            },\n            _negation_arg: function(){\n\n                var tokenStream = this._tokenStream,\n                    args        = [\n                        this._type_selector,\n                        this._universal,\n                        function(){\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo\n                    ],\n                    arg         = null,\n                    i           = 0,\n                    len         = args.length,\n                    elementName,\n                    line,\n                    col,\n                    part;\n\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                while(i < len && arg === null){\n\n                    arg = args[i].call(this);\n                    i++;\n                }\n                if (arg === null){\n                    this._unexpectedToken(tokenStream.LT(1));\n                }\n                if (arg.type == \"elementName\"){\n                    part = new SelectorPart(arg, [], arg.toString(), line, col);\n                } else {\n                    part = new SelectorPart(null, [arg], arg.toString(), line, col);\n                }\n\n                return part;\n            },\n\n            _declaration: function(){\n\n                var tokenStream = this._tokenStream,\n                    property    = null,\n                    expr        = null,\n                    prio        = null,\n                    error       = null,\n                    invalid     = null,\n                    propertyName= \"\";\n\n                property = this._property();\n                if (property !== null){\n\n                    tokenStream.mustMatch(Tokens.COLON);\n                    this._readWhitespace();\n\n                    expr = this._expr();\n                    if (!expr || expr.length === 0){\n                        this._unexpectedToken(tokenStream.LT(1));\n                    }\n\n                    prio = this._prio();\n                    propertyName = property.toString();\n                    if (this.options.starHack && property.hack == \"*\" ||\n                            this.options.underscoreHack && property.hack == \"_\") {\n\n                        propertyName = property.text;\n                    }\n\n                    try {\n                        this._validateProperty(propertyName, expr);\n                    } catch (ex) {\n                        invalid = ex;\n                    }\n\n                    this.fire({\n                        type:       \"property\",\n                        property:   property,\n                        value:      expr,\n                        important:  prio,\n                        line:       property.line,\n                        col:        property.col,\n                        invalid:    invalid\n                    });\n\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n\n            _prio: function(){\n\n                var tokenStream = this._tokenStream,\n                    result      = tokenStream.match(Tokens.IMPORTANT_SYM);\n\n                this._readWhitespace();\n                return result;\n            },\n\n            _expr: function(inFunction){\n\n                var tokenStream = this._tokenStream,\n                    values      = [],\n                    value       = null,\n                    operator    = null;\n\n                value = this._term(inFunction);\n                if (value !== null){\n\n                    values.push(value);\n\n                    do {\n                        operator = this._operator(inFunction);\n                        if (operator){\n                            values.push(operator);\n                        } /*else {\n                            values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col));\n                            valueParts = [];\n                        }*/\n\n                        value = this._term(inFunction);\n\n                        if (value === null){\n                            break;\n                        } else {\n                            values.push(value);\n                        }\n                    } while(true);\n                }\n\n                return values.length > 0 ? new PropertyValue(values, values[0].line, values[0].col) : null;\n            },\n\n            _term: function(inFunction){\n\n                var tokenStream = this._tokenStream,\n                    unary       = null,\n                    value       = null,\n                    endChar     = null,\n                    token,\n                    line,\n                    col;\n                unary = this._unary_operator();\n                if (unary !== null){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                }\n                if (tokenStream.peek() == Tokens.IE_FUNCTION && this.options.ieFilters){\n\n                    value = this._ie_function();\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                } else if (inFunction && tokenStream.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET])){\n\n                    token = tokenStream.token();\n                    endChar = token.endChar;\n                    value = token.value + this._expr(inFunction).text;\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                    tokenStream.mustMatch(Tokens.type(endChar));\n                    value += endChar;\n                    this._readWhitespace();\n                } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH,\n                        Tokens.ANGLE, Tokens.TIME,\n                        Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])){\n\n                    value = tokenStream.token().value;\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                    this._readWhitespace();\n                } else {\n                    token = this._hexcolor();\n                    if (token === null){\n                        if (unary === null){\n                            line = tokenStream.LT(1).startLine;\n                            col = tokenStream.LT(1).startCol;\n                        }\n                        if (value === null){\n                            if (tokenStream.LA(3) == Tokens.EQUALS && this.options.ieFilters){\n                                value = this._ie_function();\n                            } else {\n                                value = this._function();\n                            }\n                        }\n\n                    } else {\n                        value = token.value;\n                        if (unary === null){\n                            line = token.startLine;\n                            col = token.startCol;\n                        }\n                    }\n\n                }\n\n                return value !== null ?\n                        new PropertyValuePart(unary !== null ? unary + value : value, line, col) :\n                        null;\n\n            },\n\n            _function: function(){\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    expr        = null,\n                    lt;\n\n                if (tokenStream.match(Tokens.FUNCTION)){\n                    functionText = tokenStream.token().value;\n                    this._readWhitespace();\n                    expr = this._expr(true);\n                    functionText += expr;\n                    if (this.options.ieFilters && tokenStream.peek() == Tokens.EQUALS){\n                        do {\n\n                            if (this._readWhitespace()){\n                                functionText += tokenStream.token().value;\n                            }\n                            if (tokenStream.LA(0) == Tokens.COMMA){\n                                functionText += tokenStream.token().value;\n                            }\n\n                            tokenStream.match(Tokens.IDENT);\n                            functionText += tokenStream.token().value;\n\n                            tokenStream.match(Tokens.EQUALS);\n                            functionText += tokenStream.token().value;\n                            lt = tokenStream.peek();\n                            while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){\n                                tokenStream.get();\n                                functionText += tokenStream.token().value;\n                                lt = tokenStream.peek();\n                            }\n                        } while(tokenStream.match([Tokens.COMMA, Tokens.S]));\n                    }\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _ie_function: function(){\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    expr        = null,\n                    lt;\n                if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])){\n                    functionText = tokenStream.token().value;\n\n                    do {\n\n                        if (this._readWhitespace()){\n                            functionText += tokenStream.token().value;\n                        }\n                        if (tokenStream.LA(0) == Tokens.COMMA){\n                            functionText += tokenStream.token().value;\n                        }\n\n                        tokenStream.match(Tokens.IDENT);\n                        functionText += tokenStream.token().value;\n\n                        tokenStream.match(Tokens.EQUALS);\n                        functionText += tokenStream.token().value;\n                        lt = tokenStream.peek();\n                        while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){\n                            tokenStream.get();\n                            functionText += tokenStream.token().value;\n                            lt = tokenStream.peek();\n                        }\n                    } while(tokenStream.match([Tokens.COMMA, Tokens.S]));\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _hexcolor: function(){\n\n                var tokenStream = this._tokenStream,\n                    token = null,\n                    color;\n\n                if(tokenStream.match(Tokens.HASH)){\n\n                    token = tokenStream.token();\n                    color = token.value;\n                    if (!/#[a-f0-9]{3,6}/i.test(color)){\n                        throw new SyntaxError(\"Expected a hex color but found '\" + color + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n                    }\n                    this._readWhitespace();\n                }\n\n                return token;\n            },\n\n            _keyframes: function(){\n                var tokenStream = this._tokenStream,\n                    token,\n                    tt,\n                    name,\n                    prefix = \"\";\n\n                tokenStream.mustMatch(Tokens.KEYFRAMES_SYM);\n                token = tokenStream.token();\n                if (/^@\\-([^\\-]+)\\-/.test(token.value)) {\n                    prefix = RegExp.$1;\n                }\n\n                this._readWhitespace();\n                name = this._keyframe_name();\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.LBRACE);\n\n                this.fire({\n                    type:   \"startkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tt = tokenStream.peek();\n                while(tt == Tokens.IDENT || tt == Tokens.PERCENTAGE) {\n                    this._keyframe_rule();\n                    this._readWhitespace();\n                    tt = tokenStream.peek();\n                }\n\n                this.fire({\n                    type:   \"endkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.RBRACE);\n\n            },\n\n            _keyframe_name: function(){\n                var tokenStream = this._tokenStream,\n                    token;\n\n                tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n\n            _keyframe_rule: function(){\n                var tokenStream = this._tokenStream,\n                    token,\n                    keyList = this._key_list();\n\n                this.fire({\n                    type:   \"startkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n            },\n\n            _key_list: function(){\n                var tokenStream = this._tokenStream,\n                    token,\n                    key,\n                    keyList = [];\n                keyList.push(this._key());\n\n                this._readWhitespace();\n\n                while(tokenStream.match(Tokens.COMMA)){\n                    this._readWhitespace();\n                    keyList.push(this._key());\n                    this._readWhitespace();\n                }\n\n                return keyList;\n            },\n\n            _key: function(){\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.PERCENTAGE)){\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else if (tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n\n                    if (/from|to/i.test(token.value)){\n                        return SyntaxUnit.fromToken(token);\n                    }\n\n                    tokenStream.unget();\n                }\n                this._unexpectedToken(tokenStream.LT(1));\n            },\n            _skipCruft: function(){\n                while(this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])){\n                }\n            },\n            _readDeclarations: function(checkStart, readMargins){\n                var tokenStream = this._tokenStream,\n                    tt;\n\n\n                this._readWhitespace();\n\n                if (checkStart){\n                    tokenStream.mustMatch(Tokens.LBRACE);\n                }\n\n                this._readWhitespace();\n\n                try {\n\n                    while(true){\n\n                        if (tokenStream.match(Tokens.SEMICOLON) || (readMargins && this._margin())){\n                        } else if (this._declaration()){\n                            if (!tokenStream.match(Tokens.SEMICOLON)){\n                                break;\n                            }\n                        } else {\n                            break;\n                        }\n                        this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACE);\n                    this._readWhitespace();\n\n                } catch (ex) {\n                    if (ex instanceof SyntaxError && !this.options.strict){\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n                        tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]);\n                        if (tt == Tokens.SEMICOLON){\n                            this._readDeclarations(false, readMargins);\n                        } else if (tt != Tokens.RBRACE){\n                            throw ex;\n                        }\n\n                    } else {\n                        throw ex;\n                    }\n                }\n\n            },\n            _readWhitespace: function(){\n\n                var tokenStream = this._tokenStream,\n                    ws = \"\";\n\n                while(tokenStream.match(Tokens.S)){\n                    ws += tokenStream.token().value;\n                }\n\n                return ws;\n            },\n            _unexpectedToken: function(token){\n                throw new SyntaxError(\"Unexpected token '\" + token.value + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n            },\n            _verifyEnd: function(){\n                if (this._tokenStream.LA(1) != Tokens.EOF){\n                    this._unexpectedToken(this._tokenStream.LT(1));\n                }\n            },\n            _validateProperty: function(property, value){\n                Validation.validate(property, value);\n            },\n\n            parse: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._stylesheet();\n            },\n\n            parseStyleSheet: function(input){\n                return this.parse(input);\n            },\n\n            parseMediaQuery: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                var result = this._media_query();\n                this._verifyEnd();\n                return result;\n            },\n            parsePropertyValue: function(input){\n\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._expr();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseRule: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._ruleset();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseSelector: function(input){\n\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._selector();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseStyleAttribute: function(input){\n                input += \"}\"; // for error recovery in _readDeclarations()\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readDeclarations();\n            }\n        };\n    for (prop in additions){\n        if (additions.hasOwnProperty(prop)){\n            proto[prop] = additions[prop];\n        }\n    }\n\n    return proto;\n}();\nvar Properties = {\n    \"align-items\"                   : \"flex-start | flex-end | center | baseline | stretch\",\n    \"align-content\"                 : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"align-self\"                    : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"-webkit-align-items\"           : \"flex-start | flex-end | center | baseline | stretch\",\n    \"-webkit-align-content\"         : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"-webkit-align-self\"            : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"alignment-adjust\"              : \"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>\",\n    \"alignment-baseline\"            : \"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"animation\"                     : 1,\n    \"animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"animation-fill-mode\"           : { multi: \"none | forwards | backwards | both\", comma: true },\n    \"animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"animation-play-state\"          : { multi: \"running | paused\", comma: true },\n    \"animation-timing-function\"     : 1,\n    \"-moz-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-moz-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-moz-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-moz-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-moz-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-moz-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-ms-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-ms-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-ms-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-ms-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-ms-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-ms-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-webkit-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-webkit-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-webkit-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-webkit-animation-fill-mode\"           : { multi: \"none | forwards | backwards | both\", comma: true },\n    \"-webkit-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-webkit-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-webkit-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-o-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-o-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-o-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-o-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-o-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-o-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"appearance\"                    : \"icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | none | inherit\",\n    \"azimuth\"                       : function (expression) {\n        var simple      = \"<angle> | leftwards | rightwards | inherit\",\n            direction   = \"left-side | far-left | left | center-left | center | center-right | right | far-right | right-side\",\n            behind      = false,\n            valid       = false,\n            part;\n\n        if (!ValidationTypes.isAny(expression, simple)) {\n            if (ValidationTypes.isAny(expression, \"behind\")) {\n                behind = true;\n                valid = true;\n            }\n\n            if (ValidationTypes.isAny(expression, direction)) {\n                valid = true;\n                if (!behind) {\n                    ValidationTypes.isAny(expression, \"behind\");\n                }\n            }\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (<'azimuth'>) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"backface-visibility\"           : \"visible | hidden\",\n    \"background\"                    : 1,\n    \"background-attachment\"         : { multi: \"<attachment>\", comma: true },\n    \"background-clip\"               : { multi: \"<box>\", comma: true },\n    \"background-color\"              : \"<color> | inherit\",\n    \"background-image\"              : { multi: \"<bg-image>\", comma: true },\n    \"background-origin\"             : { multi: \"<box>\", comma: true },\n    \"background-position\"           : { multi: \"<bg-position>\", comma: true },\n    \"background-repeat\"             : { multi: \"<repeat-style>\" },\n    \"background-size\"               : { multi: \"<bg-size>\", comma: true },\n    \"baseline-shift\"                : \"baseline | sub | super | <percentage> | <length>\",\n    \"behavior\"                      : 1,\n    \"binding\"                       : 1,\n    \"bleed\"                         : \"<length>\",\n    \"bookmark-label\"                : \"<content> | <attr> | <string>\",\n    \"bookmark-level\"                : \"none | <integer>\",\n    \"bookmark-state\"                : \"open | closed\",\n    \"bookmark-target\"               : \"none | <uri> | <attr>\",\n    \"border\"                        : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom\"                 : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom-color\"           : \"<color> | inherit\",\n    \"border-bottom-left-radius\"     :  \"<x-one-radius>\",\n    \"border-bottom-right-radius\"    :  \"<x-one-radius>\",\n    \"border-bottom-style\"           : \"<border-style>\",\n    \"border-bottom-width\"           : \"<border-width>\",\n    \"border-collapse\"               : \"collapse | separate | inherit\",\n    \"border-color\"                  : { multi: \"<color> | inherit\", max: 4 },\n    \"border-image\"                  : 1,\n    \"border-image-outset\"           : { multi: \"<length> | <number>\", max: 4 },\n    \"border-image-repeat\"           : { multi: \"stretch | repeat | round\", max: 2 },\n    \"border-image-slice\"            : function(expression) {\n\n        var valid   = false,\n            numeric = \"<number> | <percentage>\",\n            fill    = false,\n            count   = 0,\n            max     = 4,\n            part;\n\n        if (ValidationTypes.isAny(expression, \"fill\")) {\n            fill = true;\n            valid = true;\n        }\n\n        while (expression.hasNext() && count < max) {\n            valid = ValidationTypes.isAny(expression, numeric);\n            if (!valid) {\n                break;\n            }\n            count++;\n        }\n\n\n        if (!fill) {\n            ValidationTypes.isAny(expression, \"fill\");\n        } else {\n            valid = true;\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected ([<number> | <percentage>]{1,4} && fill?) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"border-image-source\"           : \"<image> | none\",\n    \"border-image-width\"            : { multi: \"<length> | <percentage> | <number> | auto\", max: 4 },\n    \"border-left\"                   : \"<border-width> || <border-style> || <color>\",\n    \"border-left-color\"             : \"<color> | inherit\",\n    \"border-left-style\"             : \"<border-style>\",\n    \"border-left-width\"             : \"<border-width>\",\n    \"border-radius\"                 : function(expression) {\n\n        var valid   = false,\n            simple = \"<length> | <percentage> | inherit\",\n            slash   = false,\n            fill    = false,\n            count   = 0,\n            max     = 8,\n            part;\n\n        while (expression.hasNext() && count < max) {\n            valid = ValidationTypes.isAny(expression, simple);\n            if (!valid) {\n\n                if (expression.peek() == \"/\" && count > 0 && !slash) {\n                    slash = true;\n                    max = count + 5;\n                    expression.next();\n                } else {\n                    break;\n                }\n            }\n            count++;\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (<'border-radius'>) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"border-right\"                  : \"<border-width> || <border-style> || <color>\",\n    \"border-right-color\"            : \"<color> | inherit\",\n    \"border-right-style\"            : \"<border-style>\",\n    \"border-right-width\"            : \"<border-width>\",\n    \"border-spacing\"                : { multi: \"<length> | inherit\", max: 2 },\n    \"border-style\"                  : { multi: \"<border-style>\", max: 4 },\n    \"border-top\"                    : \"<border-width> || <border-style> || <color>\",\n    \"border-top-color\"              : \"<color> | inherit\",\n    \"border-top-left-radius\"        : \"<x-one-radius>\",\n    \"border-top-right-radius\"       : \"<x-one-radius>\",\n    \"border-top-style\"              : \"<border-style>\",\n    \"border-top-width\"              : \"<border-width>\",\n    \"border-width\"                  : { multi: \"<border-width>\", max: 4 },\n    \"bottom\"                        : \"<margin-width> | inherit\",\n    \"-moz-box-align\"                : \"start | end | center | baseline | stretch\",\n    \"-moz-box-decoration-break\"     : \"slice |clone\",\n    \"-moz-box-direction\"            : \"normal | reverse | inherit\",\n    \"-moz-box-flex\"                 : \"<number>\",\n    \"-moz-box-flex-group\"           : \"<integer>\",\n    \"-moz-box-lines\"                : \"single | multiple\",\n    \"-moz-box-ordinal-group\"        : \"<integer>\",\n    \"-moz-box-orient\"               : \"horizontal | vertical | inline-axis | block-axis | inherit\",\n    \"-moz-box-pack\"                 : \"start | end | center | justify\",\n    \"-webkit-box-align\"             : \"start | end | center | baseline | stretch\",\n    \"-webkit-box-decoration-break\"  : \"slice |clone\",\n    \"-webkit-box-direction\"         : \"normal | reverse | inherit\",\n    \"-webkit-box-flex\"              : \"<number>\",\n    \"-webkit-box-flex-group\"        : \"<integer>\",\n    \"-webkit-box-lines\"             : \"single | multiple\",\n    \"-webkit-box-ordinal-group\"     : \"<integer>\",\n    \"-webkit-box-orient\"            : \"horizontal | vertical | inline-axis | block-axis | inherit\",\n    \"-webkit-box-pack\"              : \"start | end | center | justify\",\n    \"box-shadow\"                    : function (expression) {\n        var result      = false,\n            part;\n\n        if (!ValidationTypes.isAny(expression, \"none\")) {\n            Validation.multiProperty(\"<shadow>\", expression, true, Infinity);\n        } else {\n            if (expression.hasNext()) {\n                part = expression.next();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"box-sizing\"                    : \"content-box | border-box | inherit\",\n    \"break-after\"                   : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-before\"                  : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-inside\"                  : \"auto | avoid | avoid-page | avoid-column\",\n    \"caption-side\"                  : \"top | bottom | inherit\",\n    \"clear\"                         : \"none | right | left | both | inherit\",\n    \"clip\"                          : 1,\n    \"color\"                         : \"<color> | inherit\",\n    \"color-profile\"                 : 1,\n    \"column-count\"                  : \"<integer> | auto\",                      //http://www.w3.org/TR/css3-multicol/\n    \"column-fill\"                   : \"auto | balance\",\n    \"column-gap\"                    : \"<length> | normal\",\n    \"column-rule\"                   : \"<border-width> || <border-style> || <color>\",\n    \"column-rule-color\"             : \"<color>\",\n    \"column-rule-style\"             : \"<border-style>\",\n    \"column-rule-width\"             : \"<border-width>\",\n    \"column-span\"                   : \"none | all\",\n    \"column-width\"                  : \"<length> | auto\",\n    \"columns\"                       : 1,\n    \"content\"                       : 1,\n    \"counter-increment\"             : 1,\n    \"counter-reset\"                 : 1,\n    \"crop\"                          : \"<shape> | auto\",\n    \"cue\"                           : \"cue-after | cue-before | inherit\",\n    \"cue-after\"                     : 1,\n    \"cue-before\"                    : 1,\n    \"cursor\"                        : 1,\n    \"direction\"                     : \"ltr | rtl | inherit\",\n    \"display\"                       : \"inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | none | inherit | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex\",\n    \"dominant-baseline\"             : 1,\n    \"drop-initial-after-adjust\"     : \"central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>\",\n    \"drop-initial-after-align\"      : \"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-before-adjust\"    : \"before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>\",\n    \"drop-initial-before-align\"     : \"caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-size\"             : \"auto | line | <length> | <percentage>\",\n    \"drop-initial-value\"            : \"initial | <integer>\",\n    \"elevation\"                     : \"<angle> | below | level | above | higher | lower | inherit\",\n    \"empty-cells\"                   : \"show | hide | inherit\",\n    \"filter\"                        : 1,\n    \"fit\"                           : \"fill | hidden | meet | slice\",\n    \"fit-position\"                  : 1,\n    \"flex\"                          : \"<flex>\",\n    \"flex-basis\"                    : \"<width>\",\n    \"flex-direction\"                : \"row | row-reverse | column | column-reverse\",\n    \"flex-flow\"                     : \"<flex-direction> || <flex-wrap>\",\n    \"flex-grow\"                     : \"<number>\",\n    \"flex-shrink\"                   : \"<number>\",\n    \"flex-wrap\"                     : \"nowrap | wrap | wrap-reverse\",\n    \"-webkit-flex\"                  : \"<flex>\",\n    \"-webkit-flex-basis\"            : \"<width>\",\n    \"-webkit-flex-direction\"        : \"row | row-reverse | column | column-reverse\",\n    \"-webkit-flex-flow\"             : \"<flex-direction> || <flex-wrap>\",\n    \"-webkit-flex-grow\"             : \"<number>\",\n    \"-webkit-flex-shrink\"           : \"<number>\",\n    \"-webkit-flex-wrap\"             : \"nowrap | wrap | wrap-reverse\",\n    \"-ms-flex\"                      : \"<flex>\",\n    \"-ms-flex-align\"                : \"start | end | center | stretch | baseline\",\n    \"-ms-flex-direction\"            : \"row | row-reverse | column | column-reverse | inherit\",\n    \"-ms-flex-order\"                : \"<number>\",\n    \"-ms-flex-pack\"                 : \"start | end | center | justify\",\n    \"-ms-flex-wrap\"                 : \"nowrap | wrap | wrap-reverse\",\n    \"float\"                         : \"left | right | none | inherit\",\n    \"float-offset\"                  : 1,\n    \"font\"                          : 1,\n    \"font-family\"                   : 1,\n    \"font-size\"                     : \"<absolute-size> | <relative-size> | <length> | <percentage> | inherit\",\n    \"font-size-adjust\"              : \"<number> | none | inherit\",\n    \"font-stretch\"                  : \"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit\",\n    \"font-style\"                    : \"normal | italic | oblique | inherit\",\n    \"font-variant\"                  : \"normal | small-caps | inherit\",\n    \"font-weight\"                   : \"normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit\",\n    \"grid-cell-stacking\"            : \"columns | rows | layer\",\n    \"grid-column\"                   : 1,\n    \"grid-columns\"                  : 1,\n    \"grid-column-align\"             : \"start | end | center | stretch\",\n    \"grid-column-sizing\"            : 1,\n    \"grid-column-span\"              : \"<integer>\",\n    \"grid-flow\"                     : \"none | rows | columns\",\n    \"grid-layer\"                    : \"<integer>\",\n    \"grid-row\"                      : 1,\n    \"grid-rows\"                     : 1,\n    \"grid-row-align\"                : \"start | end | center | stretch\",\n    \"grid-row-span\"                 : \"<integer>\",\n    \"grid-row-sizing\"               : 1,\n    \"hanging-punctuation\"           : 1,\n    \"height\"                        : \"<margin-width> | <content-sizing> | inherit\",\n    \"hyphenate-after\"               : \"<integer> | auto\",\n    \"hyphenate-before\"              : \"<integer> | auto\",\n    \"hyphenate-character\"           : \"<string> | auto\",\n    \"hyphenate-lines\"               : \"no-limit | <integer>\",\n    \"hyphenate-resource\"            : 1,\n    \"hyphens\"                       : \"none | manual | auto\",\n    \"icon\"                          : 1,\n    \"image-orientation\"             : \"angle | auto\",\n    \"image-rendering\"               : 1,\n    \"image-resolution\"              : 1,\n    \"inline-box-align\"              : \"initial | last | <integer>\",\n    \"justify-content\"               : \"flex-start | flex-end | center | space-between | space-around\",\n    \"-webkit-justify-content\"       : \"flex-start | flex-end | center | space-between | space-around\",\n    \"left\"                          : \"<margin-width> | inherit\",\n    \"letter-spacing\"                : \"<length> | normal | inherit\",\n    \"line-height\"                   : \"<number> | <length> | <percentage> | normal | inherit\",\n    \"line-break\"                    : \"auto | loose | normal | strict\",\n    \"line-stacking\"                 : 1,\n    \"line-stacking-ruby\"            : \"exclude-ruby | include-ruby\",\n    \"line-stacking-shift\"           : \"consider-shifts | disregard-shifts\",\n    \"line-stacking-strategy\"        : \"inline-line-height | block-line-height | max-height | grid-height\",\n    \"list-style\"                    : 1,\n    \"list-style-image\"              : \"<uri> | none | inherit\",\n    \"list-style-position\"           : \"inside | outside | inherit\",\n    \"list-style-type\"               : \"disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit\",\n    \"margin\"                        : { multi: \"<margin-width> | inherit\", max: 4 },\n    \"margin-bottom\"                 : \"<margin-width> | inherit\",\n    \"margin-left\"                   : \"<margin-width> | inherit\",\n    \"margin-right\"                  : \"<margin-width> | inherit\",\n    \"margin-top\"                    : \"<margin-width> | inherit\",\n    \"mark\"                          : 1,\n    \"mark-after\"                    : 1,\n    \"mark-before\"                   : 1,\n    \"marks\"                         : 1,\n    \"marquee-direction\"             : 1,\n    \"marquee-play-count\"            : 1,\n    \"marquee-speed\"                 : 1,\n    \"marquee-style\"                 : 1,\n    \"max-height\"                    : \"<length> | <percentage> | <content-sizing> | none | inherit\",\n    \"max-width\"                     : \"<length> | <percentage> | <content-sizing> | none | inherit\",\n    \"max-zoom\"                      : \"<number> | <percentage> | auto\",\n    \"min-height\"                    : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\n    \"min-width\"                     : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\n    \"min-zoom\"                      : \"<number> | <percentage> | auto\",\n    \"move-to\"                       : 1,\n    \"nav-down\"                      : 1,\n    \"nav-index\"                     : 1,\n    \"nav-left\"                      : 1,\n    \"nav-right\"                     : 1,\n    \"nav-up\"                        : 1,\n    \"opacity\"                       : \"<number> | inherit\",\n    \"order\"                         : \"<integer>\",\n    \"-webkit-order\"                 : \"<integer>\",\n    \"orphans\"                       : \"<integer> | inherit\",\n    \"outline\"                       : 1,\n    \"outline-color\"                 : \"<color> | invert | inherit\",\n    \"outline-offset\"                : 1,\n    \"outline-style\"                 : \"<border-style> | inherit\",\n    \"outline-width\"                 : \"<border-width> | inherit\",\n    \"overflow\"                      : \"visible | hidden | scroll | auto | inherit\",\n    \"overflow-style\"                : 1,\n    \"overflow-wrap\"                 : \"normal | break-word\",\n    \"overflow-x\"                    : 1,\n    \"overflow-y\"                    : 1,\n    \"padding\"                       : { multi: \"<padding-width> | inherit\", max: 4 },\n    \"padding-bottom\"                : \"<padding-width> | inherit\",\n    \"padding-left\"                  : \"<padding-width> | inherit\",\n    \"padding-right\"                 : \"<padding-width> | inherit\",\n    \"padding-top\"                   : \"<padding-width> | inherit\",\n    \"page\"                          : 1,\n    \"page-break-after\"              : \"auto | always | avoid | left | right | inherit\",\n    \"page-break-before\"             : \"auto | always | avoid | left | right | inherit\",\n    \"page-break-inside\"             : \"auto | avoid | inherit\",\n    \"page-policy\"                   : 1,\n    \"pause\"                         : 1,\n    \"pause-after\"                   : 1,\n    \"pause-before\"                  : 1,\n    \"perspective\"                   : 1,\n    \"perspective-origin\"            : 1,\n    \"phonemes\"                      : 1,\n    \"pitch\"                         : 1,\n    \"pitch-range\"                   : 1,\n    \"play-during\"                   : 1,\n    \"pointer-events\"                : \"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit\",\n    \"position\"                      : \"static | relative | absolute | fixed | inherit\",\n    \"presentation-level\"            : 1,\n    \"punctuation-trim\"              : 1,\n    \"quotes\"                        : 1,\n    \"rendering-intent\"              : 1,\n    \"resize\"                        : 1,\n    \"rest\"                          : 1,\n    \"rest-after\"                    : 1,\n    \"rest-before\"                   : 1,\n    \"richness\"                      : 1,\n    \"right\"                         : \"<margin-width> | inherit\",\n    \"rotation\"                      : 1,\n    \"rotation-point\"                : 1,\n    \"ruby-align\"                    : 1,\n    \"ruby-overhang\"                 : 1,\n    \"ruby-position\"                 : 1,\n    \"ruby-span\"                     : 1,\n    \"size\"                          : 1,\n    \"speak\"                         : \"normal | none | spell-out | inherit\",\n    \"speak-header\"                  : \"once | always | inherit\",\n    \"speak-numeral\"                 : \"digits | continuous | inherit\",\n    \"speak-punctuation\"             : \"code | none | inherit\",\n    \"speech-rate\"                   : 1,\n    \"src\"                           : 1,\n    \"stress\"                        : 1,\n    \"string-set\"                    : 1,\n\n    \"table-layout\"                  : \"auto | fixed | inherit\",\n    \"tab-size\"                      : \"<integer> | <length>\",\n    \"target\"                        : 1,\n    \"target-name\"                   : 1,\n    \"target-new\"                    : 1,\n    \"target-position\"               : 1,\n    \"text-align\"                    : \"left | right | center | justify | inherit\" ,\n    \"text-align-last\"               : 1,\n    \"text-decoration\"               : 1,\n    \"text-emphasis\"                 : 1,\n    \"text-height\"                   : 1,\n    \"text-indent\"                   : \"<length> | <percentage> | inherit\",\n    \"text-justify\"                  : \"auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida\",\n    \"text-outline\"                  : 1,\n    \"text-overflow\"                 : 1,\n    \"text-rendering\"                : \"auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit\",\n    \"text-shadow\"                   : 1,\n    \"text-transform\"                : \"capitalize | uppercase | lowercase | none | inherit\",\n    \"text-wrap\"                     : \"normal | none | avoid\",\n    \"top\"                           : \"<margin-width> | inherit\",\n    \"-ms-touch-action\"              : \"auto | none | pan-x | pan-y\",\n    \"touch-action\"                  : \"auto | none | pan-x | pan-y\",\n    \"transform\"                     : 1,\n    \"transform-origin\"              : 1,\n    \"transform-style\"               : 1,\n    \"transition\"                    : 1,\n    \"transition-delay\"              : 1,\n    \"transition-duration\"           : 1,\n    \"transition-property\"           : 1,\n    \"transition-timing-function\"    : 1,\n    \"unicode-bidi\"                  : \"normal | embed | isolate | bidi-override | isolate-override | plaintext | inherit\",\n    \"user-modify\"                   : \"read-only | read-write | write-only | inherit\",\n    \"user-select\"                   : \"none | text | toggle | element | elements | all | inherit\",\n    \"user-zoom\"                     : \"zoom | fixed\",\n    \"vertical-align\"                : \"auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>\",\n    \"visibility\"                    : \"visible | hidden | collapse | inherit\",\n    \"voice-balance\"                 : 1,\n    \"voice-duration\"                : 1,\n    \"voice-family\"                  : 1,\n    \"voice-pitch\"                   : 1,\n    \"voice-pitch-range\"             : 1,\n    \"voice-rate\"                    : 1,\n    \"voice-stress\"                  : 1,\n    \"voice-volume\"                  : 1,\n    \"volume\"                        : 1,\n    \"white-space\"                   : \"normal | pre | nowrap | pre-wrap | pre-line | inherit | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap\", //http://perishablepress.com/wrapping-content/\n    \"white-space-collapse\"          : 1,\n    \"widows\"                        : \"<integer> | inherit\",\n    \"width\"                         : \"<length> | <percentage> | <content-sizing> | auto | inherit\",\n    \"word-break\"                    : \"normal | keep-all | break-all\",\n    \"word-spacing\"                  : \"<length> | normal | inherit\",\n    \"word-wrap\"                     : \"normal | break-word\",\n    \"writing-mode\"                  : \"horizontal-tb | vertical-rl | vertical-lr | lr-tb | rl-tb | tb-rl | bt-rl | tb-lr | bt-lr | lr-bt | rl-bt | lr | rl | tb | inherit\",\n    \"z-index\"                       : \"<integer> | auto | inherit\",\n    \"zoom\"                          : \"<number> | <percentage> | normal\"\n};\nfunction PropertyName(text, hack, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_NAME_TYPE);\n    this.hack = hack;\n\n}\n\nPropertyName.prototype = new SyntaxUnit();\nPropertyName.prototype.constructor = PropertyName;\nPropertyName.prototype.toString = function(){\n    return (this.hack ? this.hack : \"\") + this.text;\n};\nfunction PropertyValue(parts, line, col){\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.PROPERTY_VALUE_TYPE);\n    this.parts = parts;\n\n}\n\nPropertyValue.prototype = new SyntaxUnit();\nPropertyValue.prototype.constructor = PropertyValue;\nfunction PropertyValueIterator(value){\n    this._i = 0;\n    this._parts = value.parts;\n    this._marks = [];\n    this.value = value;\n\n}\nPropertyValueIterator.prototype.count = function(){\n    return this._parts.length;\n};\nPropertyValueIterator.prototype.isFirst = function(){\n    return this._i === 0;\n};\nPropertyValueIterator.prototype.hasNext = function(){\n    return (this._i < this._parts.length);\n};\nPropertyValueIterator.prototype.mark = function(){\n    this._marks.push(this._i);\n};\nPropertyValueIterator.prototype.peek = function(count){\n    return this.hasNext() ? this._parts[this._i + (count || 0)] : null;\n};\nPropertyValueIterator.prototype.next = function(){\n    return this.hasNext() ? this._parts[this._i++] : null;\n};\nPropertyValueIterator.prototype.previous = function(){\n    return this._i > 0 ? this._parts[--this._i] : null;\n};\nPropertyValueIterator.prototype.restore = function(){\n    if (this._marks.length){\n        this._i = this._marks.pop();\n    }\n};\nfunction PropertyValuePart(text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_VALUE_PART_TYPE);\n    this.type = \"unknown\";\n\n    var temp;\n    if (/^([+\\-]?[\\d\\.]+)([a-z]+)$/i.test(text)){  //dimension\n        this.type = \"dimension\";\n        this.value = +RegExp.$1;\n        this.units = RegExp.$2;\n        switch(this.units.toLowerCase()){\n\n            case \"em\":\n            case \"rem\":\n            case \"ex\":\n            case \"px\":\n            case \"cm\":\n            case \"mm\":\n            case \"in\":\n            case \"pt\":\n            case \"pc\":\n            case \"ch\":\n            case \"vh\":\n            case \"vw\":\n            case \"vmax\":\n            case \"vmin\":\n                this.type = \"length\";\n                break;\n\n            case \"deg\":\n            case \"rad\":\n            case \"grad\":\n                this.type = \"angle\";\n                break;\n\n            case \"ms\":\n            case \"s\":\n                this.type = \"time\";\n                break;\n\n            case \"hz\":\n            case \"khz\":\n                this.type = \"frequency\";\n                break;\n\n            case \"dpi\":\n            case \"dpcm\":\n                this.type = \"resolution\";\n                break;\n\n        }\n\n    } else if (/^([+\\-]?[\\d\\.]+)%$/i.test(text)){  //percentage\n        this.type = \"percentage\";\n        this.value = +RegExp.$1;\n    } else if (/^([+\\-]?\\d+)$/i.test(text)){  //integer\n        this.type = \"integer\";\n        this.value = +RegExp.$1;\n    } else if (/^([+\\-]?[\\d\\.]+)$/i.test(text)){  //number\n        this.type = \"number\";\n        this.value = +RegExp.$1;\n\n    } else if (/^#([a-f0-9]{3,6})/i.test(text)){  //hexcolor\n        this.type = \"color\";\n        temp = RegExp.$1;\n        if (temp.length == 3){\n            this.red    = parseInt(temp.charAt(0)+temp.charAt(0),16);\n            this.green  = parseInt(temp.charAt(1)+temp.charAt(1),16);\n            this.blue   = parseInt(temp.charAt(2)+temp.charAt(2),16);\n        } else {\n            this.red    = parseInt(temp.substring(0,2),16);\n            this.green  = parseInt(temp.substring(2,4),16);\n            this.blue   = parseInt(temp.substring(4,6),16);\n        }\n    } else if (/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i.test(text)){ //rgb() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = +RegExp.$1;\n        this.green  = +RegExp.$2;\n        this.blue   = +RegExp.$3;\n    } else if (/^rgb\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)){ //rgb() color with percentages\n        this.type   = \"color\";\n        this.red    = +RegExp.$1 * 255 / 100;\n        this.green  = +RegExp.$2 * 255 / 100;\n        this.blue   = +RegExp.$3 * 255 / 100;\n    } else if (/^rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //rgba() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = +RegExp.$1;\n        this.green  = +RegExp.$2;\n        this.blue   = +RegExp.$3;\n        this.alpha  = +RegExp.$4;\n    } else if (/^rgba\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //rgba() color with percentages\n        this.type   = \"color\";\n        this.red    = +RegExp.$1 * 255 / 100;\n        this.green  = +RegExp.$2 * 255 / 100;\n        this.blue   = +RegExp.$3 * 255 / 100;\n        this.alpha  = +RegExp.$4;\n    } else if (/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)){ //hsl()\n        this.type   = \"color\";\n        this.hue    = +RegExp.$1;\n        this.saturation = +RegExp.$2 / 100;\n        this.lightness  = +RegExp.$3 / 100;\n    } else if (/^hsla\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //hsla() color with percentages\n        this.type   = \"color\";\n        this.hue    = +RegExp.$1;\n        this.saturation = +RegExp.$2 / 100;\n        this.lightness  = +RegExp.$3 / 100;\n        this.alpha  = +RegExp.$4;\n    } else if (/^url\\([\"']?([^\\)\"']+)[\"']?\\)/i.test(text)){ //URI\n        this.type   = \"uri\";\n        this.uri    = RegExp.$1;\n    } else if (/^([^\\(]+)\\(/i.test(text)){\n        this.type   = \"function\";\n        this.name   = RegExp.$1;\n        this.value  = text;\n    } else if (/^[\"'][^\"']*[\"']/.test(text)){    //string\n        this.type   = \"string\";\n        this.value  = eval(text);\n    } else if (Colors[text.toLowerCase()]){  //named color\n        this.type   = \"color\";\n        temp        = Colors[text.toLowerCase()].substring(1);\n        this.red    = parseInt(temp.substring(0,2),16);\n        this.green  = parseInt(temp.substring(2,4),16);\n        this.blue   = parseInt(temp.substring(4,6),16);\n    } else if (/^[\\,\\/]$/.test(text)){\n        this.type   = \"operator\";\n        this.value  = text;\n    } else if (/^[a-z\\-_\\u0080-\\uFFFF][a-z0-9\\-_\\u0080-\\uFFFF]*$/i.test(text)){\n        this.type   = \"identifier\";\n        this.value  = text;\n    }\n\n}\n\nPropertyValuePart.prototype = new SyntaxUnit();\nPropertyValuePart.prototype.constructor = PropertyValuePart;\nPropertyValuePart.fromToken = function(token){\n    return new PropertyValuePart(token.value, token.startLine, token.startCol);\n};\nvar Pseudos = {\n    \":first-letter\": 1,\n    \":first-line\":   1,\n    \":before\":       1,\n    \":after\":        1\n};\n\nPseudos.ELEMENT = 1;\nPseudos.CLASS = 2;\n\nPseudos.isElement = function(pseudo){\n    return pseudo.indexOf(\"::\") === 0 || Pseudos[pseudo.toLowerCase()] == Pseudos.ELEMENT;\n};\nfunction Selector(parts, line, col){\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.SELECTOR_TYPE);\n    this.parts = parts;\n    this.specificity = Specificity.calculate(this);\n\n}\n\nSelector.prototype = new SyntaxUnit();\nSelector.prototype.constructor = Selector;\nfunction SelectorPart(elementName, modifiers, text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_PART_TYPE);\n    this.elementName = elementName;\n    this.modifiers = modifiers;\n\n}\n\nSelectorPart.prototype = new SyntaxUnit();\nSelectorPart.prototype.constructor = SelectorPart;\nfunction SelectorSubPart(text, type, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_SUB_PART_TYPE);\n    this.type = type;\n    this.args = [];\n\n}\n\nSelectorSubPart.prototype = new SyntaxUnit();\nSelectorSubPart.prototype.constructor = SelectorSubPart;\nfunction Specificity(a, b, c, d){\n    this.a = a;\n    this.b = b;\n    this.c = c;\n    this.d = d;\n}\n\nSpecificity.prototype = {\n    constructor: Specificity,\n    compare: function(other){\n        var comps = [\"a\", \"b\", \"c\", \"d\"],\n            i, len;\n\n        for (i=0, len=comps.length; i < len; i++){\n            if (this[comps[i]] < other[comps[i]]){\n                return -1;\n            } else if (this[comps[i]] > other[comps[i]]){\n                return 1;\n            }\n        }\n\n        return 0;\n    },\n    valueOf: function(){\n        return (this.a * 1000) + (this.b * 100) + (this.c * 10) + this.d;\n    },\n    toString: function(){\n        return this.a + \",\" + this.b + \",\" + this.c + \",\" + this.d;\n    }\n\n};\nSpecificity.calculate = function(selector){\n\n    var i, len,\n        part,\n        b=0, c=0, d=0;\n\n    function updateValues(part){\n\n        var i, j, len, num,\n            elementName = part.elementName ? part.elementName.text : \"\",\n            modifier;\n\n        if (elementName && elementName.charAt(elementName.length-1) != \"*\") {\n            d++;\n        }\n\n        for (i=0, len=part.modifiers.length; i < len; i++){\n            modifier = part.modifiers[i];\n            switch(modifier.type){\n                case \"class\":\n                case \"attribute\":\n                    c++;\n                    break;\n\n                case \"id\":\n                    b++;\n                    break;\n\n                case \"pseudo\":\n                    if (Pseudos.isElement(modifier.text)){\n                        d++;\n                    } else {\n                        c++;\n                    }\n                    break;\n\n                case \"not\":\n                    for (j=0, num=modifier.args.length; j < num; j++){\n                        updateValues(modifier.args[j]);\n                    }\n            }\n         }\n    }\n\n    for (i=0, len=selector.parts.length; i < len; i++){\n        part = selector.parts[i];\n\n        if (part instanceof SelectorPart){\n            updateValues(part);\n        }\n    }\n\n    return new Specificity(0, b, c, d);\n};\n\nvar h = /^[0-9a-fA-F]$/,\n    nonascii = /^[\\u0080-\\uFFFF]$/,\n    nl = /\\n|\\r\\n|\\r|\\f/;\n\n\nfunction isHexDigit(c){\n    return c !== null && h.test(c);\n}\n\nfunction isDigit(c){\n    return c !== null && /\\d/.test(c);\n}\n\nfunction isWhitespace(c){\n    return c !== null && /\\s/.test(c);\n}\n\nfunction isNewLine(c){\n    return c !== null && nl.test(c);\n}\n\nfunction isNameStart(c){\n    return c !== null && (/[a-z_\\u0080-\\uFFFF\\\\]/i.test(c));\n}\n\nfunction isNameChar(c){\n    return c !== null && (isNameStart(c) || /[0-9\\-\\\\]/.test(c));\n}\n\nfunction isIdentStart(c){\n    return c !== null && (isNameStart(c) || /\\-\\\\/.test(c));\n}\n\nfunction mix(receiver, supplier){\n    for (var prop in supplier){\n        if (supplier.hasOwnProperty(prop)){\n            receiver[prop] = supplier[prop];\n        }\n    }\n    return receiver;\n}\nfunction TokenStream(input){\n    TokenStreamBase.call(this, input, Tokens);\n}\n\nTokenStream.prototype = mix(new TokenStreamBase(), {\n    _getToken: function(channel){\n\n        var c,\n            reader = this._reader,\n            token   = null,\n            startLine   = reader.getLine(),\n            startCol    = reader.getCol();\n\n        c = reader.read();\n\n\n        while(c){\n            switch(c){\n                case \"/\":\n\n                    if(reader.peek() == \"*\"){\n                        token = this.commentToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"|\":\n                case \"~\":\n                case \"^\":\n                case \"$\":\n                case \"*\":\n                    if(reader.peek() == \"=\"){\n                        token = this.comparisonToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"\\\"\":\n                case \"'\":\n                    token = this.stringToken(c, startLine, startCol);\n                    break;\n                case \"#\":\n                    if (isNameChar(reader.peek())){\n                        token = this.hashToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \".\":\n                    if (isDigit(reader.peek())){\n                        token = this.numberToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"-\":\n                    if (reader.peek() == \"-\"){  //could be closing HTML-style comment\n                        token = this.htmlCommentEndToken(c, startLine, startCol);\n                    } else if (isNameStart(reader.peek())){\n                        token = this.identOrFunctionToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"!\":\n                    token = this.importantToken(c, startLine, startCol);\n                    break;\n                case \"@\":\n                    token = this.atRuleToken(c, startLine, startCol);\n                    break;\n                case \":\":\n                    token = this.notToken(c, startLine, startCol);\n                    break;\n                case \"<\":\n                    token = this.htmlCommentStartToken(c, startLine, startCol);\n                    break;\n                case \"U\":\n                case \"u\":\n                    if (reader.peek() == \"+\"){\n                        token = this.unicodeRangeToken(c, startLine, startCol);\n                        break;\n                    }\n                default:\n                    if (isDigit(c)){\n                        token = this.numberToken(c, startLine, startCol);\n                    } else\n                    if (isWhitespace(c)){\n                        token = this.whitespaceToken(c, startLine, startCol);\n                    } else\n                    if (isIdentStart(c)){\n                        token = this.identOrFunctionToken(c, startLine, startCol);\n                    } else\n                    {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n\n\n\n\n\n\n            }\n            break;\n        }\n\n        if (!token && c === null){\n            token = this.createToken(Tokens.EOF,null,startLine,startCol);\n        }\n\n        return token;\n    },\n    createToken: function(tt, value, startLine, startCol, options){\n        var reader = this._reader;\n        options = options || {};\n\n        return {\n            value:      value,\n            type:       tt,\n            channel:    options.channel,\n            endChar:    options.endChar,\n            hide:       options.hide || false,\n            startLine:  startLine,\n            startCol:   startCol,\n            endLine:    reader.getLine(),\n            endCol:     reader.getCol()\n        };\n    },\n    atRuleToken: function(first, startLine, startCol){\n        var rule    = first,\n            reader  = this._reader,\n            tt      = Tokens.CHAR,\n            valid   = false,\n            ident,\n            c;\n        reader.mark();\n        ident = this.readName();\n        rule = first + ident;\n        tt = Tokens.type(rule.toLowerCase());\n        if (tt == Tokens.CHAR || tt == Tokens.UNKNOWN){\n            if (rule.length > 1){\n                tt = Tokens.UNKNOWN_SYM;\n            } else {\n                tt = Tokens.CHAR;\n                rule = first;\n                reader.reset();\n            }\n        }\n\n        return this.createToken(tt, rule, startLine, startCol);\n    },\n    charToken: function(c, startLine, startCol){\n        var tt = Tokens.type(c);\n        var opts = {};\n\n        if (tt == -1){\n            tt = Tokens.CHAR;\n        } else {\n            opts.endChar = Tokens[tt].endChar;\n        }\n\n        return this.createToken(tt, c, startLine, startCol, opts);\n    },\n    commentToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            comment = this.readComment(first);\n\n        return this.createToken(Tokens.COMMENT, comment, startLine, startCol);\n    },\n    comparisonToken: function(c, startLine, startCol){\n        var reader  = this._reader,\n            comparison  = c + reader.read(),\n            tt      = Tokens.type(comparison) || Tokens.CHAR;\n\n        return this.createToken(tt, comparison, startLine, startCol);\n    },\n    hashToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            name    = this.readName(first);\n\n        return this.createToken(Tokens.HASH, name, startLine, startCol);\n    },\n    htmlCommentStartToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(3);\n\n        if (text == \"<!--\"){\n            return this.createToken(Tokens.CDO, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    htmlCommentEndToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(2);\n\n        if (text == \"-->\"){\n            return this.createToken(Tokens.CDC, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    identOrFunctionToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            ident   = this.readName(first),\n            tt      = Tokens.IDENT;\n        if (reader.peek() == \"(\"){\n            ident += reader.read();\n            if (ident.toLowerCase() == \"url(\"){\n                tt = Tokens.URI;\n                ident = this.readURI(ident);\n                if (ident.toLowerCase() == \"url(\"){\n                    tt = Tokens.FUNCTION;\n                }\n            } else {\n                tt = Tokens.FUNCTION;\n            }\n        } else if (reader.peek() == \":\"){  //might be an IE function\n            if (ident.toLowerCase() == \"progid\"){\n                ident += reader.readTo(\"(\");\n                tt = Tokens.IE_FUNCTION;\n            }\n        }\n\n        return this.createToken(tt, ident, startLine, startCol);\n    },\n    importantToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            important   = first,\n            tt          = Tokens.CHAR,\n            temp,\n            c;\n\n        reader.mark();\n        c = reader.read();\n\n        while(c){\n            if (c == \"/\"){\n                if (reader.peek() != \"*\"){\n                    break;\n                } else {\n                    temp = this.readComment(c);\n                    if (temp === \"\"){    //broken!\n                        break;\n                    }\n                }\n            } else if (isWhitespace(c)){\n                important += c + this.readWhitespace();\n            } else if (/i/i.test(c)){\n                temp = reader.readCount(8);\n                if (/mportant/i.test(temp)){\n                    important += c + temp;\n                    tt = Tokens.IMPORTANT_SYM;\n\n                }\n                break;  //we're done\n            } else {\n                break;\n            }\n\n            c = reader.read();\n        }\n\n        if (tt == Tokens.CHAR){\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        } else {\n            return this.createToken(tt, important, startLine, startCol);\n        }\n\n\n    },\n    notToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(4);\n\n        if (text.toLowerCase() == \":not(\"){\n            return this.createToken(Tokens.NOT, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    numberToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = this.readNumber(first),\n            ident,\n            tt      = Tokens.NUMBER,\n            c       = reader.peek();\n\n        if (isIdentStart(c)){\n            ident = this.readName(reader.read());\n            value += ident;\n\n            if (/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(ident)){\n                tt = Tokens.LENGTH;\n            } else if (/^deg|^rad$|^grad$/i.test(ident)){\n                tt = Tokens.ANGLE;\n            } else if (/^ms$|^s$/i.test(ident)){\n                tt = Tokens.TIME;\n            } else if (/^hz$|^khz$/i.test(ident)){\n                tt = Tokens.FREQ;\n            } else if (/^dpi$|^dpcm$/i.test(ident)){\n                tt = Tokens.RESOLUTION;\n            } else {\n                tt = Tokens.DIMENSION;\n            }\n\n        } else if (c == \"%\"){\n            value += reader.read();\n            tt = Tokens.PERCENTAGE;\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n    stringToken: function(first, startLine, startCol){\n        var delim   = first,\n            string  = first,\n            reader  = this._reader,\n            prev    = first,\n            tt      = Tokens.STRING,\n            c       = reader.read();\n\n        while(c){\n            string += c;\n            if (c == delim && prev != \"\\\\\"){\n                break;\n            }\n            if (isNewLine(reader.peek()) && c != \"\\\\\"){\n                tt = Tokens.INVALID;\n                break;\n            }\n            prev = c;\n            c = reader.read();\n        }\n        if (c === null){\n            tt = Tokens.INVALID;\n        }\n\n        return this.createToken(tt, string, startLine, startCol);\n    },\n\n    unicodeRangeToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = first,\n            temp,\n            tt      = Tokens.CHAR;\n        if (reader.peek() == \"+\"){\n            reader.mark();\n            value += reader.read();\n            value += this.readUnicodeRangePart(true);\n            if (value.length == 2){\n                reader.reset();\n            } else {\n\n                tt = Tokens.UNICODE_RANGE;\n                if (value.indexOf(\"?\") == -1){\n\n                    if (reader.peek() == \"-\"){\n                        reader.mark();\n                        temp = reader.read();\n                        temp += this.readUnicodeRangePart(false);\n                        if (temp.length == 1){\n                            reader.reset();\n                        } else {\n                            value += temp;\n                        }\n                    }\n\n                }\n            }\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n    whitespaceToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = first + this.readWhitespace();\n        return this.createToken(Tokens.S, value, startLine, startCol);\n    },\n\n    readUnicodeRangePart: function(allowQuestionMark){\n        var reader  = this._reader,\n            part = \"\",\n            c       = reader.peek();\n        while(isHexDigit(c) && part.length < 6){\n            reader.read();\n            part += c;\n            c = reader.peek();\n        }\n        if (allowQuestionMark){\n            while(c == \"?\" && part.length < 6){\n                reader.read();\n                part += c;\n                c = reader.peek();\n            }\n        }\n\n        return part;\n    },\n\n    readWhitespace: function(){\n        var reader  = this._reader,\n            whitespace = \"\",\n            c       = reader.peek();\n\n        while(isWhitespace(c)){\n            reader.read();\n            whitespace += c;\n            c = reader.peek();\n        }\n\n        return whitespace;\n    },\n    readNumber: function(first){\n        var reader  = this._reader,\n            number  = first,\n            hasDot  = (first == \".\"),\n            c       = reader.peek();\n\n\n        while(c){\n            if (isDigit(c)){\n                number += reader.read();\n            } else if (c == \".\"){\n                if (hasDot){\n                    break;\n                } else {\n                    hasDot = true;\n                    number += reader.read();\n                }\n            } else {\n                break;\n            }\n\n            c = reader.peek();\n        }\n\n        return number;\n    },\n    readString: function(){\n        var reader  = this._reader,\n            delim   = reader.read(),\n            string  = delim,\n            prev    = delim,\n            c       = reader.peek();\n\n        while(c){\n            c = reader.read();\n            string += c;\n            if (c == delim && prev != \"\\\\\"){\n                break;\n            }\n            if (isNewLine(reader.peek()) && c != \"\\\\\"){\n                string = \"\";\n                break;\n            }\n            prev = c;\n            c = reader.peek();\n        }\n        if (c === null){\n            string = \"\";\n        }\n\n        return string;\n    },\n    readURI: function(first){\n        var reader  = this._reader,\n            uri     = first,\n            inner   = \"\",\n            c       = reader.peek();\n\n        reader.mark();\n        while(c && isWhitespace(c)){\n            reader.read();\n            c = reader.peek();\n        }\n        if (c == \"'\" || c == \"\\\"\"){\n            inner = this.readString();\n        } else {\n            inner = this.readURL();\n        }\n\n        c = reader.peek();\n        while(c && isWhitespace(c)){\n            reader.read();\n            c = reader.peek();\n        }\n        if (inner === \"\" || c != \")\"){\n            uri = first;\n            reader.reset();\n        } else {\n            uri += inner + reader.read();\n        }\n\n        return uri;\n    },\n    readURL: function(){\n        var reader  = this._reader,\n            url     = \"\",\n            c       = reader.peek();\n        while (/^[!#$%&\\\\*-~]$/.test(c)){\n            url += reader.read();\n            c = reader.peek();\n        }\n\n        return url;\n\n    },\n    readName: function(first){\n        var reader  = this._reader,\n            ident   = first || \"\",\n            c       = reader.peek();\n\n        while(true){\n            if (c == \"\\\\\"){\n                ident += this.readEscape(reader.read());\n                c = reader.peek();\n            } else if(c && isNameChar(c)){\n                ident += reader.read();\n                c = reader.peek();\n            } else {\n                break;\n            }\n        }\n\n        return ident;\n    },\n\n    readEscape: function(first){\n        var reader  = this._reader,\n            cssEscape = first || \"\",\n            i       = 0,\n            c       = reader.peek();\n\n        if (isHexDigit(c)){\n            do {\n                cssEscape += reader.read();\n                c = reader.peek();\n            } while(c && isHexDigit(c) && ++i < 6);\n        }\n\n        if (cssEscape.length == 3 && /\\s/.test(c) ||\n            cssEscape.length == 7 || cssEscape.length == 1){\n                reader.read();\n        } else {\n            c = \"\";\n        }\n\n        return cssEscape + c;\n    },\n\n    readComment: function(first){\n        var reader  = this._reader,\n            comment = first || \"\",\n            c       = reader.read();\n\n        if (c == \"*\"){\n            while(c){\n                comment += c;\n                if (comment.length > 2 && c == \"*\" && reader.peek() == \"/\"){\n                    comment += reader.read();\n                    break;\n                }\n\n                c = reader.read();\n            }\n\n            return comment;\n        } else {\n            return \"\";\n        }\n\n    }\n});\n\nvar Tokens  = [\n    { name: \"CDO\"},\n    { name: \"CDC\"},\n    { name: \"S\", whitespace: true/*, channel: \"ws\"*/},\n    { name: \"COMMENT\", comment: true, hide: true, channel: \"comment\" },\n    { name: \"INCLUDES\", text: \"~=\"},\n    { name: \"DASHMATCH\", text: \"|=\"},\n    { name: \"PREFIXMATCH\", text: \"^=\"},\n    { name: \"SUFFIXMATCH\", text: \"$=\"},\n    { name: \"SUBSTRINGMATCH\", text: \"*=\"},\n    { name: \"STRING\"},\n    { name: \"IDENT\"},\n    { name: \"HASH\"},\n    { name: \"IMPORT_SYM\", text: \"@import\"},\n    { name: \"PAGE_SYM\", text: \"@page\"},\n    { name: \"MEDIA_SYM\", text: \"@media\"},\n    { name: \"FONT_FACE_SYM\", text: \"@font-face\"},\n    { name: \"CHARSET_SYM\", text: \"@charset\"},\n    { name: \"NAMESPACE_SYM\", text: \"@namespace\"},\n    { name: \"VIEWPORT_SYM\", text: [\"@viewport\", \"@-ms-viewport\"]},\n    { name: \"UNKNOWN_SYM\" },\n    { name: \"KEYFRAMES_SYM\", text: [ \"@keyframes\", \"@-webkit-keyframes\", \"@-moz-keyframes\", \"@-o-keyframes\" ] },\n    { name: \"IMPORTANT_SYM\"},\n    { name: \"LENGTH\"},\n    { name: \"ANGLE\"},\n    { name: \"TIME\"},\n    { name: \"FREQ\"},\n    { name: \"DIMENSION\"},\n    { name: \"PERCENTAGE\"},\n    { name: \"NUMBER\"},\n    { name: \"URI\"},\n    { name: \"FUNCTION\"},\n    { name: \"UNICODE_RANGE\"},\n    { name: \"INVALID\"},\n    { name: \"PLUS\", text: \"+\" },\n    { name: \"GREATER\", text: \">\"},\n    { name: \"COMMA\", text: \",\"},\n    { name: \"TILDE\", text: \"~\"},\n    { name: \"NOT\"},\n    { name: \"TOPLEFTCORNER_SYM\", text: \"@top-left-corner\"},\n    { name: \"TOPLEFT_SYM\", text: \"@top-left\"},\n    { name: \"TOPCENTER_SYM\", text: \"@top-center\"},\n    { name: \"TOPRIGHT_SYM\", text: \"@top-right\"},\n    { name: \"TOPRIGHTCORNER_SYM\", text: \"@top-right-corner\"},\n    { name: \"BOTTOMLEFTCORNER_SYM\", text: \"@bottom-left-corner\"},\n    { name: \"BOTTOMLEFT_SYM\", text: \"@bottom-left\"},\n    { name: \"BOTTOMCENTER_SYM\", text: \"@bottom-center\"},\n    { name: \"BOTTOMRIGHT_SYM\", text: \"@bottom-right\"},\n    { name: \"BOTTOMRIGHTCORNER_SYM\", text: \"@bottom-right-corner\"},\n    { name: \"LEFTTOP_SYM\", text: \"@left-top\"},\n    { name: \"LEFTMIDDLE_SYM\", text: \"@left-middle\"},\n    { name: \"LEFTBOTTOM_SYM\", text: \"@left-bottom\"},\n    { name: \"RIGHTTOP_SYM\", text: \"@right-top\"},\n    { name: \"RIGHTMIDDLE_SYM\", text: \"@right-middle\"},\n    { name: \"RIGHTBOTTOM_SYM\", text: \"@right-bottom\"},\n    { name: \"RESOLUTION\", state: \"media\"},\n    { name: \"IE_FUNCTION\" },\n    { name: \"CHAR\" },\n    {\n        name: \"PIPE\",\n        text: \"|\"\n    },\n    {\n        name: \"SLASH\",\n        text: \"/\"\n    },\n    {\n        name: \"MINUS\",\n        text: \"-\"\n    },\n    {\n        name: \"STAR\",\n        text: \"*\"\n    },\n\n    {\n        name: \"LBRACE\",\n        endChar: \"}\",\n        text: \"{\"\n    },\n    {\n        name: \"RBRACE\",\n        text: \"}\"\n    },\n    {\n        name: \"LBRACKET\",\n        endChar: \"]\",\n        text: \"[\"\n    },\n    {\n        name: \"RBRACKET\",\n        text: \"]\"\n    },\n    {\n        name: \"EQUALS\",\n        text: \"=\"\n    },\n    {\n        name: \"COLON\",\n        text: \":\"\n    },\n    {\n        name: \"SEMICOLON\",\n        text: \";\"\n    },\n\n    {\n        name: \"LPAREN\",\n        endChar: \")\",\n        text: \"(\"\n    },\n    {\n        name: \"RPAREN\",\n        text: \")\"\n    },\n    {\n        name: \"DOT\",\n        text: \".\"\n    }\n];\n\n(function(){\n\n    var nameMap = [],\n        typeMap = {};\n\n    Tokens.UNKNOWN = -1;\n    Tokens.unshift({name:\"EOF\"});\n    for (var i=0, len = Tokens.length; i < len; i++){\n        nameMap.push(Tokens[i].name);\n        Tokens[Tokens[i].name] = i;\n        if (Tokens[i].text){\n            if (Tokens[i].text instanceof Array){\n                for (var j=0; j < Tokens[i].text.length; j++){\n                    typeMap[Tokens[i].text[j]] = i;\n                }\n            } else {\n                typeMap[Tokens[i].text] = i;\n            }\n        }\n    }\n\n    Tokens.name = function(tt){\n        return nameMap[tt];\n    };\n\n    Tokens.type = function(c){\n        return typeMap[c] || -1;\n    };\n\n})();\nvar Validation = {\n\n    validate: function(property, value){\n        var name        = property.toString().toLowerCase(),\n            parts       = value.parts,\n            expression  = new PropertyValueIterator(value),\n            spec        = Properties[name],\n            part,\n            valid,\n            j, count,\n            msg,\n            types,\n            last,\n            literals,\n            max, multi, group;\n\n        if (!spec) {\n            if (name.indexOf(\"-\") !== 0){    //vendor prefixed are ok\n                throw new ValidationError(\"Unknown property '\" + property + \"'.\", property.line, property.col);\n            }\n        } else if (typeof spec != \"number\"){\n            if (typeof spec == \"string\"){\n                if (spec.indexOf(\"||\") > -1) {\n                    this.groupProperty(spec, expression);\n                } else {\n                    this.singleProperty(spec, expression, 1);\n                }\n\n            } else if (spec.multi) {\n                this.multiProperty(spec.multi, expression, spec.comma, spec.max || Infinity);\n            } else if (typeof spec == \"function\") {\n                spec(expression);\n            }\n\n        }\n\n    },\n\n    singleProperty: function(types, expression, max, partial) {\n\n        var result      = false,\n            value       = expression.value,\n            count       = 0,\n            part;\n\n        while (expression.hasNext() && count < max) {\n            result = ValidationTypes.isAny(expression, types);\n            if (!result) {\n                break;\n            }\n            count++;\n        }\n\n        if (!result) {\n            if (expression.hasNext() && !expression.isFirst()) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                 throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n            }\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n\n    },\n\n    multiProperty: function (types, expression, comma, max) {\n\n        var result      = false,\n            value       = expression.value,\n            count       = 0,\n            sep         = false,\n            part;\n\n        while(expression.hasNext() && !result && count < max) {\n            if (ValidationTypes.isAny(expression, types)) {\n                count++;\n                if (!expression.hasNext()) {\n                    result = true;\n\n                } else if (comma) {\n                    if (expression.peek() == \",\") {\n                        part = expression.next();\n                    } else {\n                        break;\n                    }\n                }\n            } else {\n                break;\n\n            }\n        }\n\n        if (!result) {\n            if (expression.hasNext() && !expression.isFirst()) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                part = expression.previous();\n                if (comma && part == \",\") {\n                    throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n                } else {\n                    throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n                }\n            }\n\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n\n    },\n\n    groupProperty: function (types, expression, comma) {\n\n        var result      = false,\n            value       = expression.value,\n            typeCount   = types.split(\"||\").length,\n            groups      = { count: 0 },\n            partial     = false,\n            name,\n            part;\n\n        while(expression.hasNext() && !result) {\n            name = ValidationTypes.isAnyOfGroup(expression, types);\n            if (name) {\n                if (groups[name]) {\n                    break;\n                } else {\n                    groups[name] = 1;\n                    groups.count++;\n                    partial = true;\n\n                    if (groups.count == typeCount || !expression.hasNext()) {\n                        result = true;\n                    }\n                }\n            } else {\n                break;\n            }\n        }\n\n        if (!result) {\n            if (partial && expression.hasNext()) {\n                    part = expression.peek();\n                    throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n            }\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n    }\n\n\n\n};\nfunction ValidationError(message, line, col){\n    this.col = col;\n    this.line = line;\n    this.message = message;\n\n}\nValidationError.prototype = new Error();\nvar ValidationTypes = {\n\n    isLiteral: function (part, literals) {\n        var text = part.text.toString().toLowerCase(),\n            args = literals.split(\" | \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found; i++){\n            if (text == args[i].toLowerCase()){\n                found = true;\n            }\n        }\n\n        return found;\n    },\n\n    isSimple: function(type) {\n        return !!this.simple[type];\n    },\n\n    isComplex: function(type) {\n        return !!this.complex[type];\n    },\n    isAny: function (expression, types) {\n        var args = types.split(\" | \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found && expression.hasNext(); i++){\n            found = this.isType(expression, args[i]);\n        }\n\n        return found;\n    },\n    isAnyOfGroup: function(expression, types) {\n        var args = types.split(\" || \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found; i++){\n            found = this.isType(expression, args[i]);\n        }\n\n        return found ? args[i-1] : false;\n    },\n    isType: function (expression, type) {\n        var part = expression.peek(),\n            result = false;\n\n        if (type.charAt(0) != \"<\") {\n            result = this.isLiteral(part, type);\n            if (result) {\n                expression.next();\n            }\n        } else if (this.simple[type]) {\n            result = this.simple[type](part);\n            if (result) {\n                expression.next();\n            }\n        } else {\n            result = this.complex[type](expression);\n        }\n\n        return result;\n    },\n\n\n\n    simple: {\n\n        \"<absolute-size>\": function(part){\n            return ValidationTypes.isLiteral(part, \"xx-small | x-small | small | medium | large | x-large | xx-large\");\n        },\n\n        \"<attachment>\": function(part){\n            return ValidationTypes.isLiteral(part, \"scroll | fixed | local\");\n        },\n\n        \"<attr>\": function(part){\n            return part.type == \"function\" && part.name == \"attr\";\n        },\n\n        \"<bg-image>\": function(part){\n            return this[\"<image>\"](part) || this[\"<gradient>\"](part) ||  part == \"none\";\n        },\n\n        \"<gradient>\": function(part) {\n            return part.type == \"function\" && /^(?:\\-(?:ms|moz|o|webkit)\\-)?(?:repeating\\-)?(?:radial\\-|linear\\-)?gradient/i.test(part);\n        },\n\n        \"<box>\": function(part){\n            return ValidationTypes.isLiteral(part, \"padding-box | border-box | content-box\");\n        },\n\n        \"<content>\": function(part){\n            return part.type == \"function\" && part.name == \"content\";\n        },\n\n        \"<relative-size>\": function(part){\n            return ValidationTypes.isLiteral(part, \"smaller | larger\");\n        },\n        \"<ident>\": function(part){\n            return part.type == \"identifier\";\n        },\n\n        \"<length>\": function(part){\n            if (part.type == \"function\" && /^(?:\\-(?:ms|moz|o|webkit)\\-)?calc/i.test(part)){\n                return true;\n            }else{\n                return part.type == \"length\" || part.type == \"number\" || part.type == \"integer\" || part == \"0\";\n            }\n        },\n\n        \"<color>\": function(part){\n            return part.type == \"color\" || part == \"transparent\";\n        },\n\n        \"<number>\": function(part){\n            return part.type == \"number\" || this[\"<integer>\"](part);\n        },\n\n        \"<integer>\": function(part){\n            return part.type == \"integer\";\n        },\n\n        \"<line>\": function(part){\n            return part.type == \"integer\";\n        },\n\n        \"<angle>\": function(part){\n            return part.type == \"angle\";\n        },\n\n        \"<uri>\": function(part){\n            return part.type == \"uri\";\n        },\n\n        \"<image>\": function(part){\n            return this[\"<uri>\"](part);\n        },\n\n        \"<percentage>\": function(part){\n            return part.type == \"percentage\" || part == \"0\";\n        },\n\n        \"<border-width>\": function(part){\n            return this[\"<length>\"](part) || ValidationTypes.isLiteral(part, \"thin | medium | thick\");\n        },\n\n        \"<border-style>\": function(part){\n            return ValidationTypes.isLiteral(part, \"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset\");\n        },\n\n        \"<content-sizing>\": function(part){ // http://www.w3.org/TR/css3-sizing/#width-height-keywords\n            return ValidationTypes.isLiteral(part, \"fill-available | -moz-available | -webkit-fill-available | max-content | -moz-max-content | -webkit-max-content | min-content | -moz-min-content | -webkit-min-content | fit-content | -moz-fit-content | -webkit-fit-content\");\n        },\n\n        \"<margin-width>\": function(part){\n            return this[\"<length>\"](part) || this[\"<percentage>\"](part) || ValidationTypes.isLiteral(part, \"auto\");\n        },\n\n        \"<padding-width>\": function(part){\n            return this[\"<length>\"](part) || this[\"<percentage>\"](part);\n        },\n\n        \"<shape>\": function(part){\n            return part.type == \"function\" && (part.name == \"rect\" || part.name == \"inset-rect\");\n        },\n\n        \"<time>\": function(part) {\n            return part.type == \"time\";\n        },\n\n        \"<flex-grow>\": function(part){\n            return this[\"<number>\"](part);\n        },\n\n        \"<flex-shrink>\": function(part){\n            return this[\"<number>\"](part);\n        },\n\n        \"<width>\": function(part){\n            return this[\"<margin-width>\"](part);\n        },\n\n        \"<flex-basis>\": function(part){\n            return this[\"<width>\"](part);\n        },\n\n        \"<flex-direction>\": function(part){\n            return ValidationTypes.isLiteral(part, \"row | row-reverse | column | column-reverse\");\n        },\n\n        \"<flex-wrap>\": function(part){\n            return ValidationTypes.isLiteral(part, \"nowrap | wrap | wrap-reverse\");\n        }\n    },\n\n    complex: {\n\n        \"<bg-position>\": function(expression){\n            var types   = this,\n                result  = false,\n                numeric = \"<percentage> | <length>\",\n                xDir    = \"left | right\",\n                yDir    = \"top | bottom\",\n                count = 0,\n                hasNext = function() {\n                    return expression.hasNext() && expression.peek() != \",\";\n                };\n\n            while (expression.peek(count) && expression.peek(count) != \",\") {\n                count++;\n            }\n\n            if (count < 3) {\n                if (ValidationTypes.isAny(expression, xDir + \" | center | \" + numeric)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, yDir + \" | center | \" + numeric);\n                } else if (ValidationTypes.isAny(expression, yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, xDir + \" | center\");\n                }\n            } else {\n                if (ValidationTypes.isAny(expression, xDir)) {\n                    if (ValidationTypes.isAny(expression, yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    } else if (ValidationTypes.isAny(expression, numeric)) {\n                        if (ValidationTypes.isAny(expression, yDir)) {\n                            result = true;\n                            ValidationTypes.isAny(expression, numeric);\n                        } else if (ValidationTypes.isAny(expression, \"center\")) {\n                            result = true;\n                        }\n                    }\n                } else if (ValidationTypes.isAny(expression, yDir)) {\n                    if (ValidationTypes.isAny(expression, xDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    } else if (ValidationTypes.isAny(expression, numeric)) {\n                        if (ValidationTypes.isAny(expression, xDir)) {\n                                result = true;\n                                ValidationTypes.isAny(expression, numeric);\n                        } else if (ValidationTypes.isAny(expression, \"center\")) {\n                            result = true;\n                        }\n                    }\n                } else if (ValidationTypes.isAny(expression, \"center\")) {\n                    if (ValidationTypes.isAny(expression, xDir + \" | \" + yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    }\n                }\n            }\n\n            return result;\n        },\n\n        \"<bg-size>\": function(expression){\n            var types   = this,\n                result  = false,\n                numeric = \"<percentage> | <length> | auto\",\n                part,\n                i, len;\n\n            if (ValidationTypes.isAny(expression, \"cover | contain\")) {\n                result = true;\n            } else if (ValidationTypes.isAny(expression, numeric)) {\n                result = true;\n                ValidationTypes.isAny(expression, numeric);\n            }\n\n            return result;\n        },\n\n        \"<repeat-style>\": function(expression){\n            var result  = false,\n                values  = \"repeat | space | round | no-repeat\",\n                part;\n\n            if (expression.hasNext()){\n                part = expression.next();\n\n                if (ValidationTypes.isLiteral(part, \"repeat-x | repeat-y\")) {\n                    result = true;\n                } else if (ValidationTypes.isLiteral(part, values)) {\n                    result = true;\n\n                    if (expression.hasNext() && ValidationTypes.isLiteral(expression.peek(), values)) {\n                        expression.next();\n                    }\n                }\n            }\n\n            return result;\n\n        },\n\n        \"<shadow>\": function(expression) {\n            var result  = false,\n                count   = 0,\n                inset   = false,\n                color   = false,\n                part;\n\n            if (expression.hasNext()) {\n\n                if (ValidationTypes.isAny(expression, \"inset\")){\n                    inset = true;\n                }\n\n                if (ValidationTypes.isAny(expression, \"<color>\")) {\n                    color = true;\n                }\n\n                while (ValidationTypes.isAny(expression, \"<length>\") && count < 4) {\n                    count++;\n                }\n\n\n                if (expression.hasNext()) {\n                    if (!color) {\n                        ValidationTypes.isAny(expression, \"<color>\");\n                    }\n\n                    if (!inset) {\n                        ValidationTypes.isAny(expression, \"inset\");\n                    }\n\n                }\n\n                result = (count >= 2 && count <= 4);\n\n            }\n\n            return result;\n        },\n\n        \"<x-one-radius>\": function(expression) {\n            var result  = false,\n                simple = \"<length> | <percentage> | inherit\";\n\n            if (ValidationTypes.isAny(expression, simple)){\n                result = true;\n                ValidationTypes.isAny(expression, simple);\n            }\n\n            return result;\n        },\n\n        \"<flex>\": function(expression) {\n            var part,\n                result = false;\n            if (ValidationTypes.isAny(expression, \"none | inherit\")) {\n                result = true;\n            } else {\n                if (ValidationTypes.isType(expression, \"<flex-grow>\")) {\n                    if (expression.peek()) {\n                        if (ValidationTypes.isType(expression, \"<flex-shrink>\")) {\n                            if (expression.peek()) {\n                                result = ValidationTypes.isType(expression, \"<flex-basis>\");\n                            } else {\n                                result = true;\n                            }\n                        } else if (ValidationTypes.isType(expression, \"<flex-basis>\")) {\n                            result = expression.peek() === null;\n                        }\n                    } else {\n                        result = true;\n                    }\n                } else if (ValidationTypes.isType(expression, \"<flex-basis>\")) {\n                    result = true;\n                }\n            }\n\n            if (!result) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected (none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]) but found '\" + expression.value.text + \"'.\", part.line, part.col);\n            }\n\n            return result;\n        }\n    }\n};\n\nparserlib.css = {\nColors              :Colors,\nCombinator          :Combinator,\nParser              :Parser,\nPropertyName        :PropertyName,\nPropertyValue       :PropertyValue,\nPropertyValuePart   :PropertyValuePart,\nMediaFeature        :MediaFeature,\nMediaQuery          :MediaQuery,\nSelector            :Selector,\nSelectorPart        :SelectorPart,\nSelectorSubPart     :SelectorSubPart,\nSpecificity         :Specificity,\nTokenStream         :TokenStream,\nTokens              :Tokens,\nValidationError     :ValidationError\n};\n})();\n\n(function(){\nfor(var prop in parserlib){\nexports[prop] = parserlib[prop];\n}\n})();\n\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\nvar util = {\n  isArray: function (ar) {\n    return Array.isArray(ar) || (typeof ar === 'object' && objectToString(ar) === '[object Array]');\n  },\n  isDate: function (d) {\n    return typeof d === 'object' && objectToString(d) === '[object Date]';\n  },\n  isRegExp: function (re) {\n    return typeof re === 'object' && objectToString(re) === '[object RegExp]';\n  },\n  getRegExpFlags: function (re) {\n    var flags = '';\n    re.global && (flags += 'g');\n    re.ignoreCase && (flags += 'i');\n    re.multiline && (flags += 'm');\n    return flags;\n  }\n};\n\n\nif (typeof module === 'object')\n  module.exports = clone;\n\nfunction clone(parent, circular, depth, prototype) {\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n  function _clone(parent, depth) {\n    if (parent === null)\n      return null;\n\n    if (depth == 0)\n      return parent;\n\n    var child;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (util.isArray(parent)) {\n      child = [];\n    } else if (util.isRegExp(parent)) {\n      child = new RegExp(parent.source, util.getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (util.isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      child = new Buffer(parent.length);\n      parent.copy(child);\n      return child;\n    } else {\n      if (typeof prototype == 'undefined') child = Object.create(Object.getPrototypeOf(parent));\n      else child = Object.create(prototype);\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    for (var i in parent) {\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\nclone.clonePrototype = function(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\nvar CSSLint = (function(){\n\n    var rules           = [],\n        formatters      = [],\n        embeddedRuleset = /\\/\\*csslint([^\\*]*)\\*\\//,\n        api             = new parserlib.util.EventTarget();\n\n    api.version = \"@VERSION@\";\n    api.addRule = function(rule){\n        rules.push(rule);\n        rules[rule.id] = rule;\n    };\n    api.clearRules = function(){\n        rules = [];\n    };\n    api.getRules = function(){\n        return [].concat(rules).sort(function(a,b){\n            return a.id > b.id ? 1 : 0;\n        });\n    };\n    api.getRuleset = function() {\n        var ruleset = {},\n            i = 0,\n            len = rules.length;\n\n        while (i < len){\n            ruleset[rules[i++].id] = 1;    //by default, everything is a warning\n        }\n\n        return ruleset;\n    };\n    function applyEmbeddedRuleset(text, ruleset){\n        var valueMap,\n            embedded = text && text.match(embeddedRuleset),\n            rules = embedded && embedded[1];\n\n        if (rules) {\n            valueMap = {\n                \"true\": 2,  // true is error\n                \"\": 1,      // blank is warning\n                \"false\": 0, // false is ignore\n\n                \"2\": 2,     // explicit error\n                \"1\": 1,     // explicit warning\n                \"0\": 0      // explicit ignore\n            };\n\n            rules.toLowerCase().split(\",\").forEach(function(rule){\n                var pair = rule.split(\":\"),\n                    property = pair[0] || \"\",\n                    value = pair[1] || \"\";\n\n                ruleset[property.trim()] = valueMap[value.trim()];\n            });\n        }\n\n        return ruleset;\n    }\n    api.addFormatter = function(formatter) {\n        formatters[formatter.id] = formatter;\n    };\n    api.getFormatter = function(formatId){\n        return formatters[formatId];\n    };\n    api.format = function(results, filename, formatId, options) {\n        var formatter = this.getFormatter(formatId),\n            result = null;\n\n        if (formatter){\n            result = formatter.startFormat();\n            result += formatter.formatResults(results, filename, options || {});\n            result += formatter.endFormat();\n        }\n\n        return result;\n    };\n    api.hasFormat = function(formatId){\n        return formatters.hasOwnProperty(formatId);\n    };\n    api.verify = function(text, ruleset){\n\n        var i = 0,\n            reporter,\n            lines,\n            report,\n            parser = new parserlib.css.Parser({ starHack: true, ieFilters: true,\n                                                underscoreHack: true, strict: false });\n        lines = text.replace(/\\n\\r?/g, \"$split$\").split(\"$split$\");\n\n        if (!ruleset){\n            ruleset = this.getRuleset();\n        }\n\n        if (embeddedRuleset.test(text)){\n            ruleset = clone(ruleset);\n            ruleset = applyEmbeddedRuleset(text, ruleset);\n        }\n\n        reporter = new Reporter(lines, ruleset);\n\n        ruleset.errors = 2;       //always report parsing errors as errors\n        for (i in ruleset){\n            if(ruleset.hasOwnProperty(i) && ruleset[i]){\n                if (rules[i]){\n                    rules[i].init(parser, reporter);\n                }\n            }\n        }\n        try {\n            parser.parse(text);\n        } catch (ex) {\n            reporter.error(\"Fatal error, cannot continue: \" + ex.message, ex.line, ex.col, {});\n        }\n\n        report = {\n            messages    : reporter.messages,\n            stats       : reporter.stats,\n            ruleset     : reporter.ruleset\n        };\n        report.messages.sort(function (a, b){\n            if (a.rollup && !b.rollup){\n                return 1;\n            } else if (!a.rollup && b.rollup){\n                return -1;\n            } else {\n                return a.line - b.line;\n            }\n        });\n\n        return report;\n    };\n\n    return api;\n\n})();\nfunction Reporter(lines, ruleset){\n    this.messages = [];\n    this.stats = [];\n    this.lines = lines;\n    this.ruleset = ruleset;\n}\n\nReporter.prototype = {\n    constructor: Reporter,\n    error: function(message, line, col, rule){\n        this.messages.push({\n            type    : \"error\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule || {}\n        });\n    },\n    warn: function(message, line, col, rule){\n        this.report(message, line, col, rule);\n    },\n    report: function(message, line, col, rule){\n        this.messages.push({\n            type    : this.ruleset[rule.id] === 2 ? \"error\" : \"warning\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n    info: function(message, line, col, rule){\n        this.messages.push({\n            type    : \"info\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n    rollupError: function(message, rule){\n        this.messages.push({\n            type    : \"error\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n    rollupWarn: function(message, rule){\n        this.messages.push({\n            type    : \"warning\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n    stat: function(name, value){\n        this.stats[name] = value;\n    }\n};\nCSSLint._Reporter = Reporter;\nCSSLint.Util = {\n    mix: function(receiver, supplier){\n        var prop;\n\n        for (prop in supplier){\n            if (supplier.hasOwnProperty(prop)){\n                receiver[prop] = supplier[prop];\n            }\n        }\n\n        return prop;\n    },\n    indexOf: function(values, value){\n        if (values.indexOf){\n            return values.indexOf(value);\n        } else {\n            for (var i=0, len=values.length; i < len; i++){\n                if (values[i] === value){\n                    return i;\n                }\n            }\n            return -1;\n        }\n    },\n    forEach: function(values, func) {\n        if (values.forEach){\n            return values.forEach(func);\n        } else {\n            for (var i=0, len=values.length; i < len; i++){\n                func(values[i], i, values);\n            }\n        }\n    }\n};\n\nCSSLint.addRule({\n    id: \"adjoining-classes\",\n    name: \"Disallow adjoining classes\",\n    desc: \"Don't use adjoining classes.\",\n    browsers: \"IE6\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                classCount,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        classCount = 0;\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"class\"){\n                                classCount++;\n                            }\n                            if (classCount > 1){\n                                reporter.report(\"Don't use adjoining classes.\", part.line, part.col, rule);\n                            }\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\nCSSLint.addRule({\n    id: \"box-model\",\n    name: \"Beware of broken box size\",\n    desc: \"Don't use width or height when using padding or border.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            widthProperties = {\n                border: 1,\n                \"border-left\": 1,\n                \"border-right\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1\n            },\n            heightProperties = {\n                border: 1,\n                \"border-bottom\": 1,\n                \"border-top\": 1,\n                padding: 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1\n            },\n            properties,\n            boxSizing = false;\n\n        function startRule(){\n            properties = {};\n            boxSizing = false;\n        }\n\n        function endRule(){\n            var prop, value;\n\n            if (!boxSizing) {\n                if (properties.height){\n                    for (prop in heightProperties){\n                        if (heightProperties.hasOwnProperty(prop) && properties[prop]){\n                            value = properties[prop].value;\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[0].value === 0)){\n                                reporter.report(\"Using height with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n\n                if (properties.width){\n                    for (prop in widthProperties){\n                        if (widthProperties.hasOwnProperty(prop) && properties[prop]){\n                            value = properties[prop].value;\n\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[1].value === 0)){\n                                reporter.report(\"Using width with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (heightProperties[name] || widthProperties[name]){\n                if (!/^0\\S*$/.test(event.value) && !(name === \"border\" && event.value.toString() === \"none\")){\n                    properties[name] = { line: event.property.line, col: event.property.col, value: event.value };\n                }\n            } else {\n                if (/^(width|height)/i.test(name) && /^(length|percentage)/.test(event.value.parts[0].type)){\n                    properties[name] = 1;\n                } else if (name === \"box-sizing\") {\n                    boxSizing = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"box-sizing\",\n    name: \"Disallow use of box-sizing\",\n    desc: \"The box-sizing properties isn't supported in IE6 and IE7.\",\n    browsers: \"IE6, IE7\",\n    tags: [\"Compatibility\"],\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (name === \"box-sizing\"){\n                reporter.report(\"The box-sizing property isn't supported in IE6 and IE7.\", event.line, event.col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"bulletproof-font-face\",\n    name: \"Use the bulletproof @font-face syntax\",\n    desc: \"Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            fontFaceRule = false,\n            firstSrc     = true,\n            ruleFailed    = false,\n            line, col;\n        parser.addListener(\"startfontface\", function(){\n            fontFaceRule = true;\n        });\n\n        parser.addListener(\"property\", function(event){\n            if (!fontFaceRule) {\n                return;\n            }\n\n            var propertyName = event.property.toString().toLowerCase(),\n                value        = event.value.toString();\n            line = event.line;\n            col  = event.col;\n            if (propertyName === \"src\") {\n                var regex = /^\\s?url\\(['\"].+\\.eot\\?.*['\"]\\)\\s*format\\(['\"]embedded-opentype['\"]\\).*$/i;\n                if (!value.match(regex) && firstSrc) {\n                    ruleFailed = true;\n                    firstSrc = false;\n                } else if (value.match(regex) && !firstSrc) {\n                    ruleFailed = false;\n                }\n            }\n\n\n        });\n        parser.addListener(\"endfontface\", function(){\n            fontFaceRule = false;\n\n            if (ruleFailed) {\n                reporter.report(\"@font-face declaration doesn't follow the fontspring bulletproof syntax.\", line, col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"compatible-vendor-prefixes\",\n    name: \"Require compatible vendor prefixes\",\n    desc: \"Include all compatible vendor prefixes to reach a wider range of users.\",\n    browsers: \"All\",\n    init: function (parser, reporter) {\n        var rule = this,\n            compatiblePrefixes,\n            properties,\n            prop,\n            variations,\n            prefixed,\n            i,\n            len,\n            inKeyFrame = false,\n            arrayPush = Array.prototype.push,\n            applyTo = [];\n        compatiblePrefixes = {\n            \"animation\"                  : \"webkit moz\",\n            \"animation-delay\"            : \"webkit moz\",\n            \"animation-direction\"        : \"webkit moz\",\n            \"animation-duration\"         : \"webkit moz\",\n            \"animation-fill-mode\"        : \"webkit moz\",\n            \"animation-iteration-count\"  : \"webkit moz\",\n            \"animation-name\"             : \"webkit moz\",\n            \"animation-play-state\"       : \"webkit moz\",\n            \"animation-timing-function\"  : \"webkit moz\",\n            \"appearance\"                 : \"webkit moz\",\n            \"border-end\"                 : \"webkit moz\",\n            \"border-end-color\"           : \"webkit moz\",\n            \"border-end-style\"           : \"webkit moz\",\n            \"border-end-width\"           : \"webkit moz\",\n            \"border-image\"               : \"webkit moz o\",\n            \"border-radius\"              : \"webkit\",\n            \"border-start\"               : \"webkit moz\",\n            \"border-start-color\"         : \"webkit moz\",\n            \"border-start-style\"         : \"webkit moz\",\n            \"border-start-width\"         : \"webkit moz\",\n            \"box-align\"                  : \"webkit moz ms\",\n            \"box-direction\"              : \"webkit moz ms\",\n            \"box-flex\"                   : \"webkit moz ms\",\n            \"box-lines\"                  : \"webkit ms\",\n            \"box-ordinal-group\"          : \"webkit moz ms\",\n            \"box-orient\"                 : \"webkit moz ms\",\n            \"box-pack\"                   : \"webkit moz ms\",\n            \"box-sizing\"                 : \"webkit moz\",\n            \"box-shadow\"                 : \"webkit moz\",\n            \"column-count\"               : \"webkit moz ms\",\n            \"column-gap\"                 : \"webkit moz ms\",\n            \"column-rule\"                : \"webkit moz ms\",\n            \"column-rule-color\"          : \"webkit moz ms\",\n            \"column-rule-style\"          : \"webkit moz ms\",\n            \"column-rule-width\"          : \"webkit moz ms\",\n            \"column-width\"               : \"webkit moz ms\",\n            \"hyphens\"                    : \"epub moz\",\n            \"line-break\"                 : \"webkit ms\",\n            \"margin-end\"                 : \"webkit moz\",\n            \"margin-start\"               : \"webkit moz\",\n            \"marquee-speed\"              : \"webkit wap\",\n            \"marquee-style\"              : \"webkit wap\",\n            \"padding-end\"                : \"webkit moz\",\n            \"padding-start\"              : \"webkit moz\",\n            \"tab-size\"                   : \"moz o\",\n            \"text-size-adjust\"           : \"webkit ms\",\n            \"transform\"                  : \"webkit moz ms o\",\n            \"transform-origin\"           : \"webkit moz ms o\",\n            \"transition\"                 : \"webkit moz o\",\n            \"transition-delay\"           : \"webkit moz o\",\n            \"transition-duration\"        : \"webkit moz o\",\n            \"transition-property\"        : \"webkit moz o\",\n            \"transition-timing-function\" : \"webkit moz o\",\n            \"user-modify\"                : \"webkit moz\",\n            \"user-select\"                : \"webkit moz ms\",\n            \"word-break\"                 : \"epub ms\",\n            \"writing-mode\"               : \"epub ms\"\n        };\n\n\n        for (prop in compatiblePrefixes) {\n            if (compatiblePrefixes.hasOwnProperty(prop)) {\n                variations = [];\n                prefixed = compatiblePrefixes[prop].split(\" \");\n                for (i = 0, len = prefixed.length; i < len; i++) {\n                    variations.push(\"-\" + prefixed[i] + \"-\" + prop);\n                }\n                compatiblePrefixes[prop] = variations;\n                arrayPush.apply(applyTo, variations);\n            }\n        }\n\n        parser.addListener(\"startrule\", function () {\n            properties = [];\n        });\n\n        parser.addListener(\"startkeyframes\", function (event) {\n            inKeyFrame = event.prefix || true;\n        });\n\n        parser.addListener(\"endkeyframes\", function () {\n            inKeyFrame = false;\n        });\n\n        parser.addListener(\"property\", function (event) {\n            var name = event.property;\n            if (CSSLint.Util.indexOf(applyTo, name.text) > -1) {\n                if (!inKeyFrame || typeof inKeyFrame !== \"string\" ||\n                        name.text.indexOf(\"-\" + inKeyFrame + \"-\") !== 0) {\n                    properties.push(name);\n                }\n            }\n        });\n\n        parser.addListener(\"endrule\", function () {\n            if (!properties.length) {\n                return;\n            }\n\n            var propertyGroups = {},\n                i,\n                len,\n                name,\n                prop,\n                variations,\n                value,\n                full,\n                actual,\n                item,\n                propertiesSpecified;\n\n            for (i = 0, len = properties.length; i < len; i++) {\n                name = properties[i];\n\n                for (prop in compatiblePrefixes) {\n                    if (compatiblePrefixes.hasOwnProperty(prop)) {\n                        variations = compatiblePrefixes[prop];\n                        if (CSSLint.Util.indexOf(variations, name.text) > -1) {\n                            if (!propertyGroups[prop]) {\n                                propertyGroups[prop] = {\n                                    full : variations.slice(0),\n                                    actual : [],\n                                    actualNodes: []\n                                };\n                            }\n                            if (CSSLint.Util.indexOf(propertyGroups[prop].actual, name.text) === -1) {\n                                propertyGroups[prop].actual.push(name.text);\n                                propertyGroups[prop].actualNodes.push(name);\n                            }\n                        }\n                    }\n                }\n            }\n\n            for (prop in propertyGroups) {\n                if (propertyGroups.hasOwnProperty(prop)) {\n                    value = propertyGroups[prop];\n                    full = value.full;\n                    actual = value.actual;\n\n                    if (full.length > actual.length) {\n                        for (i = 0, len = full.length; i < len; i++) {\n                            item = full[i];\n                            if (CSSLint.Util.indexOf(actual, item) === -1) {\n                                propertiesSpecified = (actual.length === 1) ? actual[0] : (actual.length === 2) ? actual.join(\" and \") : actual.join(\", \");\n                                reporter.report(\"The property \" + item + \" is compatible with \" + propertiesSpecified + \" and should be included as well.\", value.actualNodes[0].line, value.actualNodes[0].col, rule);\n                            }\n                        }\n\n                    }\n                }\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"display-property-grouping\",\n    name: \"Require properties appropriate for display\",\n    desc: \"Certain properties shouldn't be used with certain display property values.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        var propertiesToCheck = {\n                display: 1,\n                \"float\": \"none\",\n                height: 1,\n                width: 1,\n                margin: 1,\n                \"margin-left\": 1,\n                \"margin-right\": 1,\n                \"margin-bottom\": 1,\n                \"margin-top\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1,\n                \"vertical-align\": 1\n            },\n            properties;\n\n        function reportProperty(name, display, msg){\n            if (properties[name]){\n                if (typeof propertiesToCheck[name] !== \"string\" || properties[name].value.toLowerCase() !== propertiesToCheck[name]){\n                    reporter.report(msg || name + \" can't be used with display: \" + display + \".\", properties[name].line, properties[name].col, rule);\n                }\n            }\n        }\n\n        function startRule(){\n            properties = {};\n        }\n\n        function endRule(){\n\n            var display = properties.display ? properties.display.value : null;\n            if (display){\n                switch(display){\n\n                    case \"inline\":\n                        reportProperty(\"height\", display);\n                        reportProperty(\"width\", display);\n                        reportProperty(\"margin\", display);\n                        reportProperty(\"margin-top\", display);\n                        reportProperty(\"margin-bottom\", display);\n                        reportProperty(\"float\", display, \"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).\");\n                        break;\n\n                    case \"block\":\n                        reportProperty(\"vertical-align\", display);\n                        break;\n\n                    case \"inline-block\":\n                        reportProperty(\"float\", display);\n                        break;\n\n                    default:\n                        if (display.indexOf(\"table-\") === 0){\n                            reportProperty(\"margin\", display);\n                            reportProperty(\"margin-left\", display);\n                            reportProperty(\"margin-right\", display);\n                            reportProperty(\"margin-top\", display);\n                            reportProperty(\"margin-bottom\", display);\n                            reportProperty(\"float\", display);\n                        }\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startpage\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (propertiesToCheck[name]){\n                properties[name] = { value: event.value.text, line: event.property.line, col: event.property.col };\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endpage\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"duplicate-background-images\",\n    name: \"Disallow duplicate background images\",\n    desc: \"Every background-image should be unique. Use a common class for e.g. sprites.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            stack = {};\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text,\n                value = event.value,\n                i, len;\n\n            if (name.match(/background/i)) {\n                for (i=0, len=value.parts.length; i < len; i++) {\n                    if (value.parts[i].type === \"uri\") {\n                        if (typeof stack[value.parts[i].uri] === \"undefined\") {\n                            stack[value.parts[i].uri] = event;\n                        }\n                        else {\n                            reporter.report(\"Background image '\" + value.parts[i].uri + \"' was used multiple times, first declared at line \" + stack[value.parts[i].uri].line + \", col \" + stack[value.parts[i].uri].col + \".\", event.line, event.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"duplicate-properties\",\n    name: \"Disallow duplicate properties\",\n    desc: \"Duplicate properties must appear one after the other.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            properties,\n            lastProperty;\n\n        function startRule(){\n            properties = {};\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var property = event.property,\n                name = property.text.toLowerCase();\n\n            if (properties[name] && (lastProperty !== name || properties[name] === event.value.text)){\n                reporter.report(\"Duplicate property '\" + event.property + \"' found.\", event.line, event.col, rule);\n            }\n\n            properties[name] = event.value.text;\n            lastProperty = name;\n\n        });\n\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"empty-rules\",\n    name: \"Disallow empty rules\",\n    desc: \"Rules without any properties specified should be removed.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n        parser.addListener(\"startrule\", function(){\n            count=0;\n        });\n\n        parser.addListener(\"property\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var selectors = event.selectors;\n            if (count === 0){\n                reporter.report(\"Rule is empty.\", selectors[0].line, selectors[0].col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"errors\",\n    name: \"Parsing Errors\",\n    desc: \"This rule looks for recoverable syntax errors.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"error\", function(event){\n            reporter.error(event.message, event.line, event.col, rule);\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"fallback-colors\",\n    name: \"Require fallback colors\",\n    desc: \"For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.\",\n    browsers: \"IE6,IE7,IE8\",\n    init: function(parser, reporter){\n        var rule = this,\n            lastProperty,\n            propertiesToCheck = {\n                color: 1,\n                background: 1,\n                \"border-color\": 1,\n                \"border-top-color\": 1,\n                \"border-right-color\": 1,\n                \"border-bottom-color\": 1,\n                \"border-left-color\": 1,\n                border: 1,\n                \"border-top\": 1,\n                \"border-right\": 1,\n                \"border-bottom\": 1,\n                \"border-left\": 1,\n                \"background-color\": 1\n            },\n            properties;\n\n        function startRule(){\n            properties = {};\n            lastProperty = null;\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var property = event.property,\n                name = property.text.toLowerCase(),\n                parts = event.value.parts,\n                i = 0,\n                colorType = \"\",\n                len = parts.length;\n\n            if(propertiesToCheck[name]){\n                while(i < len){\n                    if (parts[i].type === \"color\"){\n                        if (\"alpha\" in parts[i] || \"hue\" in parts[i]){\n\n                            if (/([^\\)]+)\\(/.test(parts[i])){\n                                colorType = RegExp.$1.toUpperCase();\n                            }\n\n                            if (!lastProperty || (lastProperty.property.text.toLowerCase() !== name || lastProperty.colorType !== \"compat\")){\n                                reporter.report(\"Fallback \" + name + \" (hex or RGB) should precede \" + colorType + \" \" + name + \".\", event.line, event.col, rule);\n                            }\n                        } else {\n                            event.colorType = \"compat\";\n                        }\n                    }\n\n                    i++;\n                }\n            }\n\n            lastProperty = event;\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"floats\",\n    name: \"Disallow too many floats\",\n    desc: \"This rule tests if the float property is used too many times\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        var count = 0;\n        parser.addListener(\"property\", function(event){\n            if (event.property.text.toLowerCase() === \"float\" &&\n                    event.value.text.toLowerCase() !== \"none\"){\n                count++;\n            }\n        });\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"floats\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many floats (\" + count + \"), you're probably using them for layout. Consider using a grid system instead.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"font-faces\",\n    name: \"Don't use too many web fonts\",\n    desc: \"Too many different web fonts in the same stylesheet.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n\n        parser.addListener(\"startfontface\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            if (count > 5){\n                reporter.rollupWarn(\"Too many @font-face declarations (\" + count + \").\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"font-sizes\",\n    name: \"Disallow too many font sizes\",\n    desc: \"Checks the number of font-size declarations.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n        parser.addListener(\"property\", function(event){\n            if (event.property.toString() === \"font-size\"){\n                count++;\n            }\n        });\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"font-sizes\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many font-size declarations (\" + count + \"), abstraction needed.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"gradients\",\n    name: \"Require all gradient definitions\",\n    desc: \"When using a vendor-prefixed gradient, make sure to use them all.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            gradients;\n\n        parser.addListener(\"startrule\", function(){\n            gradients = {\n                moz: 0,\n                webkit: 0,\n                oldWebkit: 0,\n                o: 0\n            };\n        });\n\n        parser.addListener(\"property\", function(event){\n\n            if (/\\-(moz|o|webkit)(?:\\-(?:linear|radial))\\-gradient/i.test(event.value)){\n                gradients[RegExp.$1] = 1;\n            } else if (/\\-webkit\\-gradient/i.test(event.value)){\n                gradients.oldWebkit = 1;\n            }\n\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var missing = [];\n\n            if (!gradients.moz){\n                missing.push(\"Firefox 3.6+\");\n            }\n\n            if (!gradients.webkit){\n                missing.push(\"Webkit (Safari 5+, Chrome)\");\n            }\n\n            if (!gradients.oldWebkit){\n                missing.push(\"Old Webkit (Safari 4+, Chrome)\");\n            }\n\n            if (!gradients.o){\n                missing.push(\"Opera 11.1+\");\n            }\n\n            if (missing.length && missing.length < 4){\n                reporter.report(\"Missing vendor-prefixed CSS gradients for \" + missing.join(\", \") + \".\", event.selectors[0].line, event.selectors[0].col, rule);\n            }\n\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"ids\",\n    name: \"Disallow IDs in selectors\",\n    desc: \"Selectors should not contain IDs.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                idCount,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                idCount = 0;\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"id\"){\n                                idCount++;\n                            }\n                        }\n                    }\n                }\n\n                if (idCount === 1){\n                    reporter.report(\"Don't use IDs in selectors.\", selector.line, selector.col, rule);\n                } else if (idCount > 1){\n                    reporter.report(idCount + \" IDs in the selector, really?\", selector.line, selector.col, rule);\n                }\n            }\n\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"import\",\n    name: \"Disallow @import\",\n    desc: \"Don't use @import, use <link> instead.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"import\", function(event){\n            reporter.report(\"@import prevents parallel downloads, use <link> instead.\", event.line, event.col, rule);\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"important\",\n    name: \"Disallow !important\",\n    desc: \"Be careful when using !important declaration\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n        parser.addListener(\"property\", function(event){\n            if (event.important === true){\n                count++;\n                reporter.report(\"Use of !important\", event.line, event.col, rule);\n            }\n        });\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"important\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many !important declarations (\" + count + \"), try to use less than 10 to avoid specificity issues.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"known-properties\",\n    name: \"Require use of known properties\",\n    desc: \"Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"property\", function(event){\n            if (event.invalid) {\n                reporter.report(event.invalid.message, event.line, event.col, rule);\n            }\n\n        });\n    }\n\n});\nCSSLint.addRule({\n    id: \"order-alphabetical\",\n    name: \"Alphabetical order\",\n    desc: \"Assure properties are in alphabetical order\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            properties;\n\n        var startRule = function () {\n            properties = [];\n        };\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text,\n                lowerCasePrefixLessName = name.toLowerCase().replace(/^-.*?-/, \"\");\n\n            properties.push(lowerCasePrefixLessName);\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var currentProperties = properties.join(\",\"),\n                expectedProperties = properties.sort().join(\",\");\n\n            if (currentProperties !== expectedProperties){\n                reporter.report(\"Rule doesn't have all its properties in alphabetical ordered.\", event.line, event.col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"outline-none\",\n    name: \"Disallow outline: none\",\n    desc: \"Use of outline: none or outline: 0 should be limited to :focus rules.\",\n    browsers: \"All\",\n    tags: [\"Accessibility\"],\n    init: function(parser, reporter){\n        var rule = this,\n            lastRule;\n\n        function startRule(event){\n            if (event.selectors){\n                lastRule = {\n                    line: event.line,\n                    col: event.col,\n                    selectors: event.selectors,\n                    propCount: 0,\n                    outline: false\n                };\n            } else {\n                lastRule = null;\n            }\n        }\n\n        function endRule(){\n            if (lastRule){\n                if (lastRule.outline){\n                    if (lastRule.selectors.toString().toLowerCase().indexOf(\":focus\") === -1){\n                        reporter.report(\"Outlines should only be modified using :focus.\", lastRule.line, lastRule.col, rule);\n                    } else if (lastRule.propCount === 1) {\n                        reporter.report(\"Outlines shouldn't be hidden unless other visual changes are made.\", lastRule.line, lastRule.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase(),\n                value = event.value;\n\n            if (lastRule){\n                lastRule.propCount++;\n                if (name === \"outline\" && (value.toString() === \"none\" || value.toString() === \"0\")){\n                    lastRule.outline = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"overqualified-elements\",\n    name: \"Disallow overqualified elements\",\n    desc: \"Don't use classes or IDs with elements (a.foo or a#foo).\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            classes = {};\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (part.elementName && modifier.type === \"id\"){\n                                reporter.report(\"Element (\" + part + \") is overqualified, just use \" + modifier + \" without element name.\", part.line, part.col, rule);\n                            } else if (modifier.type === \"class\"){\n\n                                if (!classes[modifier]){\n                                    classes[modifier] = [];\n                                }\n                                classes[modifier].push({ modifier: modifier, part: part });\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n\n            var prop;\n            for (prop in classes){\n                if (classes.hasOwnProperty(prop)){\n                    if (classes[prop].length === 1 && classes[prop][0].part.elementName){\n                        reporter.report(\"Element (\" + classes[prop][0].part + \") is overqualified, just use \" + classes[prop][0].modifier + \" without element name.\", classes[prop][0].part.line, classes[prop][0].part.col, rule);\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"qualified-headings\",\n    name: \"Disallow qualified headings\",\n    desc: \"Headings should not be qualified (namespaced).\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                i, j;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        if (part.elementName && /h[1-6]/.test(part.elementName.toString()) && j > 0){\n                            reporter.report(\"Heading (\" + part.elementName + \") should not be qualified.\", part.line, part.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"regex-selectors\",\n    name: \"Disallow selectors that look like regexs\",\n    desc: \"Selectors that look like regular expressions are slow and should be avoided.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"attribute\"){\n                                if (/([\\~\\|\\^\\$\\*]=)/.test(modifier)){\n                                    reporter.report(\"Attribute selectors with \" + RegExp.$1 + \" are slow!\", modifier.line, modifier.col, rule);\n                                }\n                            }\n\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"rules-count\",\n    name: \"Rules Count\",\n    desc: \"Track how many rules there are.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var count = 0;\n        parser.addListener(\"startrule\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"rule-count\", count);\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-max-approaching\",\n    name: \"Warn when approaching the 4095 selector limit for IE\",\n    desc: \"Will warn when selector count is >= 3800 selectors.\",\n    browsers: \"IE\",\n    init: function(parser, reporter) {\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count >= 3800) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-max\",\n    name: \"Error when past the 4095 selector limit for IE\",\n    desc: \"Will error when selector count is > 4095.\",\n    browsers: \"IE\",\n    init: function(parser, reporter){\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count > 4095) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-newline\",\n    name: \"Disallow new-line characters in selectors\",\n    desc: \"New-line characters in selectors are usually a forgotten comma and not a descendant combinator.\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        var rule = this;\n\n        function startRule(event) {\n            var i, len, selector, p, n, pLen, part, part2, type, currentLine, nextLine,\n                selectors = event.selectors;\n\n            for (i = 0, len = selectors.length; i < len; i++) {\n                selector = selectors[i];\n                for (p = 0, pLen = selector.parts.length; p < pLen; p++) {\n                    for (n = p + 1; n < pLen; n++) {\n                        part = selector.parts[p];\n                        part2 = selector.parts[n];\n                        type = part.type;\n                        currentLine = part.line;\n                        nextLine = part2.line;\n\n                        if (type === \"descendant\" && nextLine > currentLine) {\n                            reporter.report(\"newline character found in selector (forgot a comma?)\", currentLine, selectors[i].parts[0].col, rule);\n                        }\n                    }\n                }\n\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n\n    }\n});\n\nCSSLint.addRule({\n    id: \"shorthand\",\n    name: \"Require shorthand properties\",\n    desc: \"Use shorthand properties where possible.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            prop, i, len,\n            propertiesToCheck = {},\n            properties,\n            mapping = {\n                \"margin\": [\n                    \"margin-top\",\n                    \"margin-bottom\",\n                    \"margin-left\",\n                    \"margin-right\"\n                ],\n                \"padding\": [\n                    \"padding-top\",\n                    \"padding-bottom\",\n                    \"padding-left\",\n                    \"padding-right\"\n                ]\n            };\n        for (prop in mapping){\n            if (mapping.hasOwnProperty(prop)){\n                for (i=0, len=mapping[prop].length; i < len; i++){\n                    propertiesToCheck[mapping[prop][i]] = prop;\n                }\n            }\n        }\n\n        function startRule(){\n            properties = {};\n        }\n        function endRule(event){\n\n            var prop, i, len, total;\n            for (prop in mapping){\n                if (mapping.hasOwnProperty(prop)){\n                    total=0;\n\n                    for (i=0, len=mapping[prop].length; i < len; i++){\n                        total += properties[mapping[prop][i]] ? 1 : 0;\n                    }\n\n                    if (total === mapping[prop].length){\n                        reporter.report(\"The properties \" + mapping[prop].join(\", \") + \" can be replaced by \" + prop + \".\", event.line, event.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"property\", function(event){\n            var name = event.property.toString().toLowerCase();\n\n            if (propertiesToCheck[name]){\n                properties[name] = 1;\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"star-property-hack\",\n    name: \"Disallow properties with a star prefix\",\n    desc: \"Checks for the star property hack (targets IE6/7)\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"property\", function(event){\n            var property = event.property;\n\n            if (property.hack === \"*\") {\n                reporter.report(\"Property with star prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"text-indent\",\n    name: \"Disallow negative text-indent\",\n    desc: \"Checks for text indent less than -99px\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            textIndent,\n            direction;\n\n\n        function startRule(){\n            textIndent = false;\n            direction = \"inherit\";\n        }\n        function endRule(){\n            if (textIndent && direction !== \"ltr\"){\n                reporter.report(\"Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.\", textIndent.line, textIndent.col, rule);\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"property\", function(event){\n            var name = event.property.toString().toLowerCase(),\n                value = event.value;\n\n            if (name === \"text-indent\" && value.parts[0].value < -99){\n                textIndent = event.property;\n            } else if (name === \"direction\" && value.toString() === \"ltr\"){\n                direction = \"ltr\";\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"underscore-property-hack\",\n    name: \"Disallow properties with an underscore prefix\",\n    desc: \"Checks for the underscore property hack (targets IE6)\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"property\", function(event){\n            var property = event.property;\n\n            if (property.hack === \"_\") {\n                reporter.report(\"Property with underscore prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"unique-headings\",\n    name: \"Headings should only be defined once\",\n    desc: \"Headings should be defined only once.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        var headings = {\n                h1: 0,\n                h2: 0,\n                h3: 0,\n                h4: 0,\n                h5: 0,\n                h6: 0\n            };\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                pseudo,\n                i, j;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                part = selector.parts[selector.parts.length-1];\n\n                if (part.elementName && /(h[1-6])/i.test(part.elementName.toString())){\n\n                    for (j=0; j < part.modifiers.length; j++){\n                        if (part.modifiers[j].type === \"pseudo\"){\n                            pseudo = true;\n                            break;\n                        }\n                    }\n\n                    if (!pseudo){\n                        headings[RegExp.$1]++;\n                        if (headings[RegExp.$1] > 1) {\n                            reporter.report(\"Heading (\" + part.elementName + \") has already been defined.\", part.line, part.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            var prop,\n                messages = [];\n\n            for (prop in headings){\n                if (headings.hasOwnProperty(prop)){\n                    if (headings[prop] > 1){\n                        messages.push(headings[prop] + \" \" + prop + \"s\");\n                    }\n                }\n            }\n\n            if (messages.length){\n                reporter.rollupWarn(\"You have \" + messages.join(\", \") + \" defined in this stylesheet.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"universal-selector\",\n    name: \"Disallow universal selector\",\n    desc: \"The universal selector (*) is known to be slow.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                i;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.elementName === \"*\"){\n                    reporter.report(rule.desc, part.line, part.col, rule);\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"unqualified-attributes\",\n    name: \"Disallow unqualified attribute selectors\",\n    desc: \"Unqualified attribute selectors are known to be slow.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.type === parser.SELECTOR_PART_TYPE){\n                    for (k=0; k < part.modifiers.length; k++){\n                        modifier = part.modifiers[k];\n                        if (modifier.type === \"attribute\" && (!part.elementName || part.elementName === \"*\")){\n                            reporter.report(rule.desc, part.line, part.col, rule);\n                        }\n                    }\n                }\n\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"vendor-prefix\",\n    name: \"Require standard property with vendor prefix\",\n    desc: \"When using a vendor-prefixed property, make sure to include the standard one.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            properties,\n            num,\n            propertiesToCheck = {\n                \"-webkit-border-radius\": \"border-radius\",\n                \"-webkit-border-top-left-radius\": \"border-top-left-radius\",\n                \"-webkit-border-top-right-radius\": \"border-top-right-radius\",\n                \"-webkit-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-webkit-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-o-border-radius\": \"border-radius\",\n                \"-o-border-top-left-radius\": \"border-top-left-radius\",\n                \"-o-border-top-right-radius\": \"border-top-right-radius\",\n                \"-o-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-o-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-moz-border-radius\": \"border-radius\",\n                \"-moz-border-radius-topleft\": \"border-top-left-radius\",\n                \"-moz-border-radius-topright\": \"border-top-right-radius\",\n                \"-moz-border-radius-bottomleft\": \"border-bottom-left-radius\",\n                \"-moz-border-radius-bottomright\": \"border-bottom-right-radius\",\n\n                \"-moz-column-count\": \"column-count\",\n                \"-webkit-column-count\": \"column-count\",\n\n                \"-moz-column-gap\": \"column-gap\",\n                \"-webkit-column-gap\": \"column-gap\",\n\n                \"-moz-column-rule\": \"column-rule\",\n                \"-webkit-column-rule\": \"column-rule\",\n\n                \"-moz-column-rule-style\": \"column-rule-style\",\n                \"-webkit-column-rule-style\": \"column-rule-style\",\n\n                \"-moz-column-rule-color\": \"column-rule-color\",\n                \"-webkit-column-rule-color\": \"column-rule-color\",\n\n                \"-moz-column-rule-width\": \"column-rule-width\",\n                \"-webkit-column-rule-width\": \"column-rule-width\",\n\n                \"-moz-column-width\": \"column-width\",\n                \"-webkit-column-width\": \"column-width\",\n\n                \"-webkit-column-span\": \"column-span\",\n                \"-webkit-columns\": \"columns\",\n\n                \"-moz-box-shadow\": \"box-shadow\",\n                \"-webkit-box-shadow\": \"box-shadow\",\n\n                \"-moz-transform\" : \"transform\",\n                \"-webkit-transform\" : \"transform\",\n                \"-o-transform\" : \"transform\",\n                \"-ms-transform\" : \"transform\",\n\n                \"-moz-transform-origin\" : \"transform-origin\",\n                \"-webkit-transform-origin\" : \"transform-origin\",\n                \"-o-transform-origin\" : \"transform-origin\",\n                \"-ms-transform-origin\" : \"transform-origin\",\n\n                \"-moz-box-sizing\" : \"box-sizing\",\n                \"-webkit-box-sizing\" : \"box-sizing\"\n            };\n        function startRule(){\n            properties = {};\n            num = 1;\n        }\n        function endRule(){\n            var prop,\n                i,\n                len,\n                needed,\n                actual,\n                needsStandard = [];\n\n            for (prop in properties){\n                if (propertiesToCheck[prop]){\n                    needsStandard.push({ actual: prop, needed: propertiesToCheck[prop]});\n                }\n            }\n\n            for (i=0, len=needsStandard.length; i < len; i++){\n                needed = needsStandard[i].needed;\n                actual = needsStandard[i].actual;\n\n                if (!properties[needed]){\n                    reporter.report(\"Missing standard property '\" + needed + \"' to go along with '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                } else {\n                    if (properties[needed][0].pos < properties[actual][0].pos){\n                        reporter.report(\"Standard property '\" + needed + \"' should come after vendor-prefixed property '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                    }\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (!properties[name]){\n                properties[name] = [];\n            }\n\n            properties[name].push({ name: event.property, value : event.value, pos:num++ });\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"zero-units\",\n    name: \"Disallow units for 0 values\",\n    desc: \"You don't need to specify units when a value is 0.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"property\", function(event){\n            var parts = event.value.parts,\n                i = 0,\n                len = parts.length;\n\n            while(i < len){\n                if ((parts[i].units || parts[i].type === \"percentage\") && parts[i].value === 0 && parts[i].type !== \"time\"){\n                    reporter.report(\"Values of 0 shouldn't have units specified.\", parts[i].line, parts[i].col, rule);\n                }\n                i++;\n            }\n\n        });\n\n    }\n\n});\n\n(function() {\n    var xmlEscape = function(str) {\n        if (!str || str.constructor !== String) {\n            return \"\";\n        }\n\n        return str.replace(/[\\\"&><]/g, function(match) {\n            switch (match) {\n                case \"\\\"\":\n                    return \"&quot;\";\n                case \"&\":\n                    return \"&amp;\";\n                case \"<\":\n                    return \"&lt;\";\n                case \">\":\n                    return \"&gt;\";\n            }\n        });\n    };\n\n    CSSLint.addFormatter({\n        id: \"checkstyle-xml\",\n        name: \"Checkstyle XML format\",\n        startFormat: function(){\n            return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><checkstyle>\";\n        },\n        endFormat: function(){\n            return \"</checkstyle>\";\n        },\n        readError: function(filename, message) {\n            return \"<file name=\\\"\" + xmlEscape(filename) + \"\\\"><error line=\\\"0\\\" column=\\\"0\\\" severty=\\\"error\\\" message=\\\"\" + xmlEscape(message) + \"\\\"></error></file>\";\n        },\n        formatResults: function(results, filename/*, options*/) {\n            var messages = results.messages,\n                output = [];\n            var generateSource = function(rule) {\n                if (!rule || !(\"name\" in rule)) {\n                    return \"\";\n                }\n                return \"net.csslint.\" + rule.name.replace(/\\s/g,\"\");\n            };\n\n\n\n            if (messages.length > 0) {\n                output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n                CSSLint.Util.forEach(messages, function (message) {\n                    if (!message.rollup) {\n                        output.push(\"<error line=\\\"\" + message.line + \"\\\" column=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                          \" message=\\\"\" + xmlEscape(message.message) + \"\\\" source=\\\"\" + generateSource(message.rule) +\"\\\"/>\");\n                    }\n                });\n                output.push(\"</file>\");\n            }\n\n            return output.join(\"\");\n        }\n    });\n\n}());\n\nCSSLint.addFormatter({\n    id: \"compact\",\n    name: \"Compact, 'porcelain' format\",\n    startFormat: function() {\n        return \"\";\n    },\n    endFormat: function() {\n        return \"\";\n    },\n    formatResults: function(results, filename, options) {\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n        var capitalize = function(str) {\n            return str.charAt(0).toUpperCase() + str.slice(1);\n        };\n\n        if (messages.length === 0) {\n              return options.quiet ? \"\" : filename + \": Lint Free!\";\n        }\n\n        CSSLint.Util.forEach(messages, function(message) {\n            if (message.rollup) {\n                output += filename + \": \" + capitalize(message.type) + \" - \" + message.message + \"\\n\";\n            } else {\n                output += filename + \": \" + \"line \" + message.line +\n                    \", col \" + message.col + \", \" + capitalize(message.type) + \" - \" + message.message + \" (\" + message.rule.id + \")\\n\";\n            }\n        });\n\n        return output;\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"csslint-xml\",\n    name: \"CSSLint XML format\",\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><csslint>\";\n    },\n    endFormat: function(){\n        return \"</csslint>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n        var messages = results.messages,\n            output = [];\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\\\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    output.push(\"<issue line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"junit-xml\",\n    name: \"JUNIT XML format\",\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><testsuites>\";\n    },\n    endFormat: function() {\n        return \"</testsuites>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n\n        var messages = results.messages,\n            output = [],\n            tests = {\n                \"error\": 0,\n                \"failure\": 0\n            };\n        var generateSource = function(rule) {\n            if (!rule || !(\"name\" in rule)) {\n                return \"\";\n            }\n            return \"net.csslint.\" + rule.name.replace(/\\s/g,\"\");\n        };\n        var escapeSpecialCharacters = function(str) {\n\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n\n            return str.replace(/\\\"/g, \"'\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\n        };\n\n        if (messages.length > 0) {\n\n            messages.forEach(function (message) {\n                var type = message.type === \"warning\" ? \"error\" : message.type;\n                if (!message.rollup) {\n                    output.push(\"<testcase time=\\\"0\\\" name=\\\"\" + generateSource(message.rule) + \"\\\">\");\n                    output.push(\"<\" + type + \" message=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\"><![CDATA[\" + message.line + \":\" + message.col + \":\" + escapeSpecialCharacters(message.evidence)  + \"]]></\" + type + \">\");\n                    output.push(\"</testcase>\");\n\n                    tests[type] += 1;\n\n                }\n\n            });\n\n            output.unshift(\"<testsuite time=\\\"0\\\" tests=\\\"\" + messages.length + \"\\\" skipped=\\\"0\\\" errors=\\\"\" + tests.error + \"\\\" failures=\\\"\" + tests.failure + \"\\\" package=\\\"net.csslint\\\" name=\\\"\" + filename + \"\\\">\");\n            output.push(\"</testsuite>\");\n\n        }\n\n        return output.join(\"\");\n\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"lint-xml\",\n    name: \"Lint XML format\",\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><lint>\";\n    },\n    endFormat: function(){\n        return \"</lint>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n        var messages = results.messages,\n            output = [];\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\\\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    output.push(\"<issue line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"text\",\n    name: \"Plain Text\",\n    startFormat: function() {\n        return \"\";\n    },\n    endFormat: function() {\n        return \"\";\n    },\n    formatResults: function(results, filename, options) {\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n\n        if (messages.length === 0) {\n            return options.quiet ? \"\" : \"\\n\\ncsslint: No errors in \" + filename + \".\";\n        }\n\n        output = \"\\n\\ncsslint: There \";\n        if (messages.length === 1) {\n            output += \"is 1 problem\";\n        } else {\n            output += \"are \" + messages.length  +  \" problems\";\n        }\n        output += \" in \" + filename + \".\";\n\n        var pos = filename.lastIndexOf(\"/\"),\n            shortFilename = filename;\n\n        if (pos === -1){\n            pos = filename.lastIndexOf(\"\\\\\");\n        }\n        if (pos > -1){\n            shortFilename = filename.substring(pos+1);\n        }\n\n        CSSLint.Util.forEach(messages, function (message, i) {\n            output = output + \"\\n\\n\" + shortFilename;\n            if (message.rollup) {\n                output += \"\\n\" + (i+1) + \": \" + message.type;\n                output += \"\\n\" + message.message;\n            } else {\n                output += \"\\n\" + (i+1) + \": \" + message.type + \" at line \" + message.line + \", col \" + message.col;\n                output += \"\\n\" + message.message;\n                output += \"\\n\" + message.evidence;\n            }\n        });\n\n        return output;\n    }\n});\n\nmodule.exports.CSSLint = CSSLint;\n\n});\n\nace.define(\"ace/mode/css_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar CSSLint = require(\"./css/csslint\").CSSLint;\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.ruleset = null;\n    this.setDisabledRules(\"ids|order-alphabetical\");\n    this.setInfoRules(\n      \"adjoining-classes|qualified-headings|zero-units|gradients|\" +\n      \"import|outline-none|vendor-prefix\"\n    );\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n    this.setInfoRules = function(ruleNames) {\n        if (typeof ruleNames == \"string\")\n            ruleNames = ruleNames.split(\"|\");\n        this.infoRules = lang.arrayToMap(ruleNames);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.setDisabledRules = function(ruleNames) {\n        if (!ruleNames) {\n            this.ruleset = null;\n        } else {\n            if (typeof ruleNames == \"string\")\n                ruleNames = ruleNames.split(\"|\");\n            var all = {};\n\n            CSSLint.getRules().forEach(function(x){\n                all[x.id] = true;\n            });\n            ruleNames.forEach(function(x) {\n                delete all[x];\n            });\n            \n            this.ruleset = all;\n        }\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n        var infoRules = this.infoRules;\n\n        var result = CSSLint.verify(value, this.ruleset);\n        this.sender.emit(\"annotate\", result.messages.map(function(msg) {\n            return {\n                row: msg.line - 1,\n                column: msg.col - 1,\n                text: msg.message,\n                type: infoRules[msg.rule.id] ? \"info\" : msg.type,\n                rule: msg.rule.name\n            };\n        }));\n    };\n\n}).call(Worker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/worker-html.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/html/saxparser\",[], function(require, exports, module) {\nmodule.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({\n1:[function(_dereq_,module,exports){\nfunction isScopeMarker(node) {\n\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn node.localName === \"applet\"\n\t\t\t|| node.localName === \"caption\"\n\t\t\t|| node.localName === \"marquee\"\n\t\t\t|| node.localName === \"object\"\n\t\t\t|| node.localName === \"table\"\n\t\t\t|| node.localName === \"td\"\n\t\t\t|| node.localName === \"th\";\n\t}\n\tif (node.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\treturn node.localName === \"mi\"\n\t\t\t|| node.localName === \"mo\"\n\t\t\t|| node.localName === \"mn\"\n\t\t\t|| node.localName === \"ms\"\n\t\t\t|| node.localName === \"mtext\"\n\t\t\t|| node.localName === \"annotation-xml\";\n\t}\n\tif (node.namespaceURI === \"http://www.w3.org/2000/svg\") {\n\t\treturn node.localName === \"foreignObject\"\n\t\t\t|| node.localName === \"desc\"\n\t\t\t|| node.localName === \"title\";\n\t}\n}\n\nfunction isListItemScopeMarker(node) {\n\treturn isScopeMarker(node)\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ol')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ul');\n}\n\nfunction isTableScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'table')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isTableBodyScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tbody')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tfoot')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'thead')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isTableRowScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tr')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isButtonScopeMarker(node) {\n\treturn isScopeMarker(node)\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'button');\n}\n\nfunction isSelectScopeMarker(node) {\n\treturn !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'optgroup')\n\t\t&& !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'option');\n}\nfunction ElementStack() {\n\tthis.elements = [];\n\tthis.rootNode = null;\n\tthis.headElement = null;\n\tthis.bodyElement = null;\n}\nElementStack.prototype._inScope = function(localName, isMarker) {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.localName === localName)\n\t\t\treturn true;\n\t\tif (isMarker(node))\n\t\t\treturn false;\n\t}\n};\nElementStack.prototype.push = function(item) {\n\tthis.elements.push(item);\n};\nElementStack.prototype.pushHtmlElement = function(item) {\n\tthis.rootNode = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pushHeadElement = function(item) {\n\tthis.headElement = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pushBodyElement = function(item) {\n\tthis.bodyElement = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pop = function() {\n\treturn this.elements.pop();\n};\nElementStack.prototype.remove = function(item) {\n\tthis.elements.splice(this.elements.indexOf(item), 1);\n};\nElementStack.prototype.popUntilPopped = function(localName) {\n\tvar element;\n\tdo {\n\t\telement = this.pop();\n\t} while (element.localName != localName);\n};\n\nElementStack.prototype.popUntilTableScopeMarker = function() {\n\twhile (!isTableScopeMarker(this.top))\n\t\tthis.pop();\n};\n\nElementStack.prototype.popUntilTableBodyScopeMarker = function() {\n\twhile (!isTableBodyScopeMarker(this.top))\n\t\tthis.pop();\n};\n\nElementStack.prototype.popUntilTableRowScopeMarker = function() {\n\twhile (!isTableRowScopeMarker(this.top))\n\t\tthis.pop();\n};\nElementStack.prototype.item = function(index) {\n\treturn this.elements[index];\n};\nElementStack.prototype.contains = function(element) {\n\treturn this.elements.indexOf(element) !== -1;\n};\nElementStack.prototype.inScope = function(localName) {\n\treturn this._inScope(localName, isScopeMarker);\n};\nElementStack.prototype.inListItemScope = function(localName) {\n\treturn this._inScope(localName, isListItemScopeMarker);\n};\nElementStack.prototype.inTableScope = function(localName) {\n\treturn this._inScope(localName, isTableScopeMarker);\n};\nElementStack.prototype.inButtonScope = function(localName) {\n\treturn this._inScope(localName, isButtonScopeMarker);\n};\nElementStack.prototype.inSelectScope = function(localName) {\n\treturn this._inScope(localName, isSelectScopeMarker);\n};\nElementStack.prototype.hasNumberedHeaderElementInScope = function() {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.isNumberedHeader())\n\t\t\treturn true;\n\t\tif (isScopeMarker(node))\n\t\t\treturn false;\n\t}\n};\nElementStack.prototype.furthestBlockForFormattingElement = function(element) {\n\tvar furthestBlock = null;\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.node === element)\n\t\t\tbreak;\n\t\tif (node.isSpecial())\n\t\t\tfurthestBlock = node;\n\t}\n    return furthestBlock;\n};\nElementStack.prototype.findIndex = function(localName) {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tif (this.elements[i].localName == localName)\n\t\t\treturn i;\n\t}\n    return -1;\n};\n\nElementStack.prototype.remove_openElements_until = function(callback) {\n\tvar finished = false;\n\tvar element;\n\twhile (!finished) {\n\t\telement = this.elements.pop();\n\t\tfinished = callback(element);\n\t}\n\treturn element;\n};\n\nObject.defineProperty(ElementStack.prototype, 'top', {\n\tget: function() {\n\t\treturn this.elements[this.elements.length - 1];\n\t}\n});\n\nObject.defineProperty(ElementStack.prototype, 'length', {\n\tget: function() {\n\t\treturn this.elements.length;\n\t}\n});\n\nexports.ElementStack = ElementStack;\n\n},\n{}],\n2:[function(_dereq_,module,exports){\nvar entities  = _dereq_('html5-entities');\nvar InputStream = _dereq_('./InputStream').InputStream;\n\nvar namedEntityPrefixes = {};\nObject.keys(entities).forEach(function (entityKey) {\n\tfor (var i = 0; i < entityKey.length; i++) {\n\t\tnamedEntityPrefixes[entityKey.substring(0, i + 1)] = true;\n\t}\n});\n\nfunction isAlphaNumeric(c) {\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n}\n\nfunction isHexDigit(c) {\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');\n}\n\nfunction isDecimalDigit(c) {\n\treturn (c >= '0' && c <= '9');\n}\n\nvar EntityParser = {};\n\nEntityParser.consumeEntity = function(buffer, tokenizer, additionalAllowedCharacter) {\n\tvar decodedCharacter = '';\n\tvar consumedCharacters = '';\n\tvar ch = buffer.char();\n\tif (ch === InputStream.EOF)\n\t\treturn false;\n\tconsumedCharacters += ch;\n\tif (ch == '\\t' || ch == '\\n' || ch == '\\v' || ch == ' ' || ch == '<' || ch == '&') {\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n\tif (additionalAllowedCharacter === ch) {\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n\tif (ch == '#') {\n\t\tch = buffer.shift(1);\n\t\tif (ch === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\n\t\t\tbuffer.unget(consumedCharacters);\n\t\t\treturn false;\n\t\t}\n\t\tconsumedCharacters += ch;\n\t\tvar radix = 10;\n\t\tvar isDigit = isDecimalDigit;\n\t\tif (ch == 'x' || ch == 'X') {\n\t\t\tradix = 16;\n\t\t\tisDigit = isHexDigit;\n\t\t\tch = buffer.shift(1);\n\t\t\tif (ch === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\n\t\t\t\tbuffer.unget(consumedCharacters);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconsumedCharacters += ch;\n\t\t}\n\t\tif (isDigit(ch)) {\n\t\t\tvar code = '';\n\t\t\twhile (ch !== InputStream.EOF && isDigit(ch)) {\n\t\t\t\tcode += ch;\n\t\t\t\tch = buffer.char();\n\t\t\t}\n\t\t\tcode = parseInt(code, radix);\n\t\t\tvar replacement = this.replaceEntityNumbers(code);\n\t\t\tif (replacement) {\n\t\t\t\ttokenizer._parseError(\"invalid-numeric-entity-replaced\");\n\t\t\t\tcode = replacement;\n\t\t\t}\n\t\t\tif (code > 0xFFFF && code <= 0x10FFFF) {\n\t\t        code -= 0x10000;\n\t\t        var first = ((0xffc00 & code) >> 10) + 0xD800;\n\t\t        var second = (0x3ff & code) + 0xDC00;\n\t\t\t\tdecodedCharacter = String.fromCharCode(first, second);\n\t\t\t} else\n\t\t\t\tdecodedCharacter = String.fromCharCode(code);\n\t\t\tif (ch !== ';') {\n\t\t\t\ttokenizer._parseError(\"numeric-entity-without-semicolon\");\n\t\t\t\tbuffer.unget(ch);\n\t\t\t}\n\t\t\treturn decodedCharacter;\n\t\t}\n\t\tbuffer.unget(consumedCharacters);\n\t\ttokenizer._parseError(\"expected-numeric-entity\");\n\t\treturn false;\n\t}\n\tif ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {\n\t\tvar mostRecentMatch = '';\n\t\twhile (namedEntityPrefixes[consumedCharacters]) {\n\t\t\tif (entities[consumedCharacters]) {\n\t\t\t\tmostRecentMatch = consumedCharacters;\n\t\t\t}\n\t\t\tif (ch == ';')\n\t\t\t\tbreak;\n\t\t\tch = buffer.char();\n\t\t\tif (ch === InputStream.EOF)\n\t\t\t\tbreak;\n\t\t\tconsumedCharacters += ch;\n\t\t}\n\t\tif (!mostRecentMatch) {\n\t\t\ttokenizer._parseError(\"expected-named-entity\");\n\t\t\tbuffer.unget(consumedCharacters);\n\t\t\treturn false;\n\t\t}\n\t\tdecodedCharacter = entities[mostRecentMatch];\n\t\tif (ch === ';' || !additionalAllowedCharacter || !(isAlphaNumeric(ch) || ch === '=')) {\n\t\t\tif (consumedCharacters.length > mostRecentMatch.length) {\n\t\t\t\tbuffer.unget(consumedCharacters.substring(mostRecentMatch.length));\n\t\t\t}\n\t\t\tif (ch !== ';') {\n\t\t\t\ttokenizer._parseError(\"named-entity-without-semicolon\");\n\t\t\t}\n\t\t\treturn decodedCharacter;\n\t\t}\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n};\n\nEntityParser.replaceEntityNumbers = function(c) {\n\tswitch(c) {\n\t\tcase 0x00: return 0xFFFD; // REPLACEMENT CHARACTER\n\t\tcase 0x13: return 0x0010; // Carriage return\n\t\tcase 0x80: return 0x20AC; // EURO SIGN\n\t\tcase 0x81: return 0x0081; // <control>\n\t\tcase 0x82: return 0x201A; // SINGLE LOW-9 QUOTATION MARK\n\t\tcase 0x83: return 0x0192; // LATIN SMALL LETTER F WITH HOOK\n\t\tcase 0x84: return 0x201E; // DOUBLE LOW-9 QUOTATION MARK\n\t\tcase 0x85: return 0x2026; // HORIZONTAL ELLIPSIS\n\t\tcase 0x86: return 0x2020; // DAGGER\n\t\tcase 0x87: return 0x2021; // DOUBLE DAGGER\n\t\tcase 0x88: return 0x02C6; // MODIFIER LETTER CIRCUMFLEX ACCENT\n\t\tcase 0x89: return 0x2030; // PER MILLE SIGN\n\t\tcase 0x8A: return 0x0160; // LATIN CAPITAL LETTER S WITH CARON\n\t\tcase 0x8B: return 0x2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n\t\tcase 0x8C: return 0x0152; // LATIN CAPITAL LIGATURE OE\n\t\tcase 0x8D: return 0x008D; // <control>\n\t\tcase 0x8E: return 0x017D; // LATIN CAPITAL LETTER Z WITH CARON\n\t\tcase 0x8F: return 0x008F; // <control>\n\t\tcase 0x90: return 0x0090; // <control>\n\t\tcase 0x91: return 0x2018; // LEFT SINGLE QUOTATION MARK\n\t\tcase 0x92: return 0x2019; // RIGHT SINGLE QUOTATION MARK\n\t\tcase 0x93: return 0x201C; // LEFT DOUBLE QUOTATION MARK\n\t\tcase 0x94: return 0x201D; // RIGHT DOUBLE QUOTATION MARK\n\t\tcase 0x95: return 0x2022; // BULLET\n\t\tcase 0x96: return 0x2013; // EN DASH\n\t\tcase 0x97: return 0x2014; // EM DASH\n\t\tcase 0x98: return 0x02DC; // SMALL TILDE\n\t\tcase 0x99: return 0x2122; // TRADE MARK SIGN\n\t\tcase 0x9A: return 0x0161; // LATIN SMALL LETTER S WITH CARON\n\t\tcase 0x9B: return 0x203A; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n\t\tcase 0x9C: return 0x0153; // LATIN SMALL LIGATURE OE\n\t\tcase 0x9D: return 0x009D; // <control>\n\t\tcase 0x9E: return 0x017E; // LATIN SMALL LETTER Z WITH CARON\n\t\tcase 0x9F: return 0x0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS\n\t\tdefault:\n\t\t\tif ((c >= 0xD800 && c <= 0xDFFF) || c > 0x10FFFF) {\n\t\t\t\treturn 0xFFFD;\n\t\t\t} else if ((c >= 0x0001 && c <= 0x0008) || (c >= 0x000E && c <= 0x001F) ||\n\t\t\t\t(c >= 0x007F && c <= 0x009F) || (c >= 0xFDD0 && c <= 0xFDEF) ||\n\t\t\t\tc == 0x000B || c == 0xFFFE || c == 0x1FFFE || c == 0x2FFFFE ||\n\t\t\t\tc == 0x2FFFF || c == 0x3FFFE || c == 0x3FFFF || c == 0x4FFFE ||\n\t\t\t\tc == 0x4FFFF || c == 0x5FFFE || c == 0x5FFFF || c == 0x6FFFE ||\n\t\t\t\tc == 0x6FFFF || c == 0x7FFFE || c == 0x7FFFF || c == 0x8FFFE ||\n\t\t\t\tc == 0x8FFFF || c == 0x9FFFE || c == 0x9FFFF || c == 0xAFFFE ||\n\t\t\t\tc == 0xAFFFF || c == 0xBFFFE || c == 0xBFFFF || c == 0xCFFFE ||\n\t\t\t\tc == 0xCFFFF || c == 0xDFFFE || c == 0xDFFFF || c == 0xEFFFE ||\n\t\t\t\tc == 0xEFFFF || c == 0xFFFFE || c == 0xFFFFF || c == 0x10FFFE ||\n\t\t\t\tc == 0x10FFFF) {\n\t\t\t\treturn c;\n\t\t\t}\n\t}\n};\n\nexports.EntityParser = EntityParser;\n\n},\n{\"./InputStream\":3,\"html5-entities\":12}],\n3:[function(_dereq_,module,exports){\nfunction InputStream() {\n\tthis.data = '';\n\tthis.start = 0;\n\tthis.committed = 0;\n\tthis.eof = false;\n\tthis.lastLocation = {line: 0, column: 0};\n}\n\nInputStream.EOF = -1;\n\nInputStream.DRAIN = -2;\n\nInputStream.prototype = {\n\tslice: function() {\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\treturn this.data.slice(this.start, this.data.length);\n\t},\n\tchar: function() {\n\t\tif(!this.eof && this.start >= this.data.length - 1) throw InputStream.DRAIN;\n\t\tif(this.start >= this.data.length) {\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\tvar ch = this.data[this.start++];\n\t\tif (ch === '\\r')\n\t\t\tch = '\\n';\n\t\treturn ch;\n\t},\n\tadvance: function(amount) {\n\t\tthis.start += amount;\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t} else {\n\t\t\tif(this.committed > this.data.length / 2) {\n\t\t\t\tthis.lastLocation = this.location();\n\t\t\t\tthis.data = this.data.slice(this.committed);\n\t\t\t\tthis.start = this.start - this.committed;\n\t\t\t\tthis.committed = 0;\n\t\t\t}\n\t\t}\n\t},\n\tmatchWhile: function(re) {\n\t\tif(this.eof && this.start >= this.data.length ) return '';\n\t\tvar r = new RegExp(\"^\"+re+\"+\");\n\t\tvar m = r.exec(this.slice());\n\t\tif(m) {\n\t\t\tif(!this.eof && m[0].length == this.data.length - this.start) throw InputStream.DRAIN;\n\t\t\tthis.advance(m[0].length);\n\t\t\treturn m[0];\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t},\n\tmatchUntil: function(re) {\n\t\tvar m, s;\n\t\ts = this.slice();\n\t\tif(s === InputStream.EOF) {\n\t\t\treturn '';\n\t\t} else if(m = new RegExp(re + (this.eof ? \"|$\" : \"\")).exec(s)) {\n\t\t\tvar t = this.data.slice(this.start, this.start + m.index);\n\t\t\tthis.advance(m.index);\n\t\t\treturn t.replace(/\\r/g, '\\n').replace(/\\n{2,}/g, '\\n');\n\t\t} else {\n\t\t\tthrow InputStream.DRAIN;\n\t\t}\n\t},\n\tappend: function(data) {\n\t\tthis.data += data;\n\t},\n\tshift: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\tvar d = this.data.slice(this.start, this.start + n).toString();\n\t\tthis.advance(Math.min(n, this.data.length - this.start));\n\t\treturn d;\n\t},\n\tpeek: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\treturn this.data.slice(this.start, Math.min(this.start + n, this.data.length)).toString();\n\t},\n\tlength: function() {\n\t\treturn this.data.length - this.start - 1;\n\t},\n\tunget: function(d) {\n\t\tif(d === InputStream.EOF) return;\n\t\tthis.start -= (d.length);\n\t},\n\tundo: function() {\n\t\tthis.start = this.committed;\n\t},\n\tcommit: function() {\n\t\tthis.committed = this.start;\n\t},\n\tlocation: function() {\n\t\tvar lastLine = this.lastLocation.line;\n\t\tvar lastColumn = this.lastLocation.column;\n\t\tvar read = this.data.slice(0, this.committed);\n\t\tvar newlines = read.match(/\\n/g);\n\t\tvar line = newlines ? lastLine + newlines.length : lastLine;\n\t\tvar column = newlines ? read.length - read.lastIndexOf('\\n') - 1 : lastColumn + read.length;\n\t\treturn {line: line, column: column};\n\t}\n};\n\nexports.InputStream = InputStream;\n\n},\n{}],\n4:[function(_dereq_,module,exports){\nvar SpecialElements = {\n\t\"http://www.w3.org/1999/xhtml\": [\n\t\t'address',\n\t\t'applet',\n\t\t'area',\n\t\t'article',\n\t\t'aside',\n\t\t'base',\n\t\t'basefont',\n\t\t'bgsound',\n\t\t'blockquote',\n\t\t'body',\n\t\t'br',\n\t\t'button',\n\t\t'caption',\n\t\t'center',\n\t\t'col',\n\t\t'colgroup',\n\t\t'dd',\n\t\t'details',\n\t\t'dir',\n\t\t'div',\n\t\t'dl',\n\t\t'dt',\n\t\t'embed',\n\t\t'fieldset',\n\t\t'figcaption',\n\t\t'figure',\n\t\t'footer',\n\t\t'form',\n\t\t'frame',\n\t\t'frameset',\n\t\t'h1',\n\t\t'h2',\n\t\t'h3',\n\t\t'h4',\n\t\t'h5',\n\t\t'h6',\n\t\t'head',\n\t\t'header',\n\t\t'hgroup',\n\t\t'hr',\n\t\t'html',\n\t\t'iframe',\n\t\t'img',\n\t\t'input',\n\t\t'isindex',\n\t\t'li',\n\t\t'link',\n\t\t'listing',\n\t\t'main',\n\t\t'marquee',\n\t\t'menu',\n\t\t'menuitem',\n\t\t'meta',\n\t\t'nav',\n\t\t'noembed',\n\t\t'noframes',\n\t\t'noscript',\n\t\t'object',\n\t\t'ol',\n\t\t'p',\n\t\t'param',\n\t\t'plaintext',\n\t\t'pre',\n\t\t'script',\n\t\t'section',\n\t\t'select',\n\t\t'source',\n\t\t'style',\n\t\t'summary',\n\t\t'table',\n\t\t'tbody',\n\t\t'td',\n\t\t'textarea',\n\t\t'tfoot',\n\t\t'th',\n\t\t'thead',\n\t\t'title',\n\t\t'tr',\n\t\t'track',\n\t\t'ul',\n\t\t'wbr',\n\t\t'xmp'\n\t],\n\t\"http://www.w3.org/1998/Math/MathML\": [\n\t\t'mi',\n\t\t'mo',\n\t\t'mn',\n\t\t'ms',\n\t\t'mtext',\n\t\t'annotation-xml'\n\t],\n\t\"http://www.w3.org/2000/svg\": [\n\t\t'foreignObject',\n\t\t'desc',\n\t\t'title'\n\t]\n};\n\n\nfunction StackItem(namespaceURI, localName, attributes, node) {\n\tthis.localName = localName;\n\tthis.namespaceURI = namespaceURI;\n\tthis.attributes = attributes;\n\tthis.node = node;\n}\nStackItem.prototype.isSpecial = function() {\n\treturn this.namespaceURI in SpecialElements &&\n\t\tSpecialElements[this.namespaceURI].indexOf(this.localName) > -1;\n};\n\nStackItem.prototype.isFosterParenting = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn this.localName === 'table' ||\n\t\t\tthis.localName === 'tbody' ||\n\t\t\tthis.localName === 'tfoot' ||\n\t\t\tthis.localName === 'thead' ||\n\t\t\tthis.localName === 'tr';\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isNumberedHeader = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn this.localName === 'h1' ||\n\t\t\tthis.localName === 'h2' ||\n\t\t\tthis.localName === 'h3' ||\n\t\t\tthis.localName === 'h4' ||\n\t\t\tthis.localName === 'h5' ||\n\t\t\tthis.localName === 'h6';\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isForeign = function() {\n\treturn this.namespaceURI != \"http://www.w3.org/1999/xhtml\";\n};\n\nfunction getAttribute(item, name) {\n\tfor (var i = 0; i < item.attributes.length; i++) {\n\t\tif (item.attributes[i].nodeName == name)\n\t\t\treturn item.attributes[i].nodeValue;\n\t}\n\treturn null;\n}\n\nStackItem.prototype.isHtmlIntegrationPoint = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\tif (this.localName !== \"annotation-xml\")\n\t\t\treturn false;\n\t\tvar encoding = getAttribute(this, 'encoding');\n\t\tif (!encoding)\n\t\t\treturn false;\n\t\tencoding = encoding.toLowerCase();\n\t\treturn encoding === \"text/html\" || encoding === \"application/xhtml+xml\";\n\t}\n\tif (this.namespaceURI === \"http://www.w3.org/2000/svg\") {\n\t\treturn this.localName === \"foreignObject\"\n\t\t\t|| this.localName === \"desc\"\n\t\t\t|| this.localName === \"title\";\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isMathMLTextIntegrationPoint = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\treturn this.localName === \"mi\"\n\t\t\t|| this.localName === \"mo\"\n\t\t\t|| this.localName === \"mn\"\n\t\t\t|| this.localName === \"ms\"\n\t\t\t|| this.localName === \"mtext\";\n\t}\n\treturn false;\n};\n\nexports.StackItem = StackItem;\n\n},\n{}],\n5:[function(_dereq_,module,exports){\nvar InputStream = _dereq_('./InputStream').InputStream;\nvar EntityParser = _dereq_('./EntityParser').EntityParser;\n\nfunction isWhitespace(c){\n\treturn c === \" \" || c === \"\\n\" || c === \"\\t\" || c === \"\\r\" || c === \"\\f\";\n}\n\nfunction isAlpha(c) {\n\treturn (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');\n}\nfunction Tokenizer(tokenHandler) {\n\tthis._tokenHandler = tokenHandler;\n\tthis._state = Tokenizer.DATA;\n\tthis._inputStream = new InputStream();\n\tthis._currentToken = null;\n\tthis._temporaryBuffer = '';\n\tthis._additionalAllowedCharacter = '';\n}\n\nTokenizer.prototype._parseError = function(code, args) {\n\tthis._tokenHandler.parseError(code, args);\n};\n\nTokenizer.prototype._emitToken = function(token) {\n\tif (token.type === 'StartTag') {\n\t\tfor (var i = 1; i < token.data.length; i++) {\n\t\t\tif (!token.data[i].nodeName)\n\t\t\t\ttoken.data.splice(i--, 1);\n\t\t}\n\t} else if (token.type === 'EndTag') {\n\t\tif (token.selfClosing) {\n\t\t\tthis._parseError('self-closing-flag-on-end-tag');\n\t\t}\n\t\tif (token.data.length !== 0) {\n\t\t\tthis._parseError('attributes-in-end-tag');\n\t\t}\n\t}\n\tthis._tokenHandler.processToken(token);\n\tif (token.type === 'StartTag' && token.selfClosing && !this._tokenHandler.isSelfClosingFlagAcknowledged()) {\n\t\tthis._parseError('non-void-element-with-trailing-solidus', {name: token.name});\n\t}\n};\n\nTokenizer.prototype._emitCurrentToken = function() {\n\tthis._state = Tokenizer.DATA;\n\tthis._emitToken(this._currentToken);\n};\n\nTokenizer.prototype._currentAttribute = function() {\n\treturn this._currentToken.data[this._currentToken.data.length - 1];\n};\n\nTokenizer.prototype.setState = function(state) {\n\tthis._state = state;\n};\n\nTokenizer.prototype.tokenize = function(source) {\n\tTokenizer.DATA = data_state;\n\tTokenizer.RCDATA = rcdata_state;\n\tTokenizer.RAWTEXT = rawtext_state;\n\tTokenizer.SCRIPT_DATA = script_data_state;\n\tTokenizer.PLAINTEXT = plaintext_state;\n\n\n\tthis._state = Tokenizer.DATA;\n\n\tthis._inputStream.append(source);\n\n\tthis._tokenHandler.startTokenization(this);\n\n\tthis._inputStream.eof = true;\n\n\tvar tokenizer = this;\n\n\twhile (this._state.call(this, this._inputStream));\n\n\n\tfunction data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(tag_open_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_data_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(data_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rcdata_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_rcdata_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rcdata_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_rcdata_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(rcdata_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rawtext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rawtext_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction plaintext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\n\tfunction script_data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rcdata_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rcdata_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rawtext_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rawtext_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_end_tag_open_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<!'});\n\t\t\ttokenizer.setState(script_data_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(script_data_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escape_start_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil('<|-|\\u0000');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_less_then_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_open_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<' + data});\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_double_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' &&  appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\tbuffer.commit();\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '/'});\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_double_escape_end_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"bare-less-than-sign-at-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'StartTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer.setState(markup_declaration_open_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(close_tag_open_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-right-bracket\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<>\"});\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '?') {\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-question-mark\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"expected-tag-name\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<\"});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction close_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-right-bracket\");\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-char\", {data: data}); // param 1 is datavars:\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-tag-name');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.name += data.toLowerCase();\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.name += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.name += data;\n\t\t}\n\t\tbuffer.commit();\n\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-name-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data.toLowerCase(), nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '=' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tvar leavingThisState = true;\n\t\tvar shouldEmit = false;\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-name\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\tshouldEmit = true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentAttribute().nodeName += data.toLowerCase();\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '>') {\n\t\t\tshouldEmit = true;\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeName += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t}\n\n\t\tif (leavingThisState) {\n\t\t\tvar attributes = tokenizer._currentToken.data;\n\t\t\tvar currentAttribute = attributes[attributes.length - 1];\n\t\t\tfor (var i = attributes.length - 2; i >= 0; i--) {\n\t\t\t\tif (currentAttribute.nodeName === attributes[i].nodeName) {\n\t\t\t\t\ttokenizer._parseError(\"duplicate-attribute\", {name: currentAttribute.nodeName});\n\t\t\t\t\tcurrentAttribute.nodeName = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldEmit)\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-end-of-tag-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-after-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t\tbuffer.unget(data);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-right-bracket\");\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '=' || data === '<' || data === '`') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-double-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = '\"';\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar s = buffer.matchUntil('[\\0\"&]');\n\t\t\tdata = data + s;\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-single-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \"'\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data + buffer.matchUntil(\"\\u0000|['&]\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_unquoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \">\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"' || data === \"'\" || data === '=' || data === '`' || data === '<') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\tbuffer.commit();\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar o = buffer.matchUntil(\"\\u0000|[\"+ \"\\t\\n\\v\\f\\x20\\r\" + \"&<>\\\"'=`\" +\"]\");\n\t\t\tif (o === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-attribute-value-no-quotes\");\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t}\n\t\t\tbuffer.commit();\n\t\t\ttokenizer._currentAttribute().nodeValue += data + o;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_attribute_value_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer, this._additionalAllowedCharacter);\n\t\tthis._currentAttribute().nodeValue += character || '&';\n\t\tif (this._additionalAllowedCharacter === '\"')\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '\\'')\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '>')\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction self_closing_tag_state(buffer) {\n\t\tvar c = buffer.char();\n\t\tif (c === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"unexpected-eof-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (c === '>') {\n\t\t\ttokenizer._currentToken.selfClosing = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_comment_state(buffer) {\n\t\tvar data = buffer.matchUntil('>');\n\t\tdata = data.replace(/\\u0000/g, \"\\uFFFD\");\n\t\tbuffer.char();\n\t\ttokenizer._emitToken({type: 'Comment', data: data});\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction markup_declaration_open_state(buffer) {\n\t\tvar chars = buffer.shift(2);\n\t\tif (chars === '--') {\n\t\t\ttokenizer._currentToken = {type: 'Comment', data: ''};\n\t\t\ttokenizer.setState(comment_start_state);\n\t\t} else {\n\t\t\tvar newchars = buffer.shift(5);\n\t\t\tif (newchars === InputStream.EOF || chars === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tchars += newchars;\n\t\t\tif (chars.toUpperCase() === 'DOCTYPE') {\n\t\t\t\ttokenizer._currentToken = {type: 'Doctype', name: '', publicId: null, systemId: null, forceQuirks: false};\n\t\t\t\ttokenizer.setState(doctype_state);\n\t\t\t} else if (tokenizer._tokenHandler.isCdataSectionAllowed() && chars === '[CDATA[') {\n\t\t\t\ttokenizer.setState(cdata_section_state);\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction cdata_section_state(buffer) {\n\t\tvar data = buffer.matchUntil(']]>');\n\t\tbuffer.shift(3);\n\t\tif (data) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t}\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction comment_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_start_dash_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"-\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data + buffer.matchUntil('\\u0000|-');\n\t\t\tbuffer.char();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-double-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._parseError(\"unexpected-bang-after-double-dash-in-comment\");\n\t\t\ttokenizer.setState(comment_end_bang_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._parseError(\"unexpected-dash-after-double-dash-in-comment\");\n\t\t\ttokenizer._currentToken.data += data;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"--\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-comment\");\n\t\t\ttokenizer._currentToken.data += '--' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_bang_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-bang-state\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._currentToken.data += '--!';\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '--!' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"need-space-after-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-right-bracket\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name = data;\n\t\t\ttokenizer.setState(doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype-name\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_doctype_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (['p', 'P'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['u', 'U'], ['b', 'B'], ['l', 'L'], ['i', 'I'], ['c', 'C']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_public_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (['s', 'S'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['y', 'Y'], ['s', 'S'], ['t', 'T'], ['e', 'E'], ['m', 'M']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_system_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\n\t\t\tif (data === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\t\tbuffer.unget(data);\n\t\t\t\ttokenizer.setState(data_state);\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-space-or-right-bracket-in-doctype\", {data: data});\n\t\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(between_doctype_public_and_system_identifiers_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction between_doctype_public_and_system_identifiers_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n};\n\nObject.defineProperty(Tokenizer.prototype, 'lineNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().line;\n\t}\n});\n\nObject.defineProperty(Tokenizer.prototype, 'columnNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().column;\n\t}\n});\n\nexports.Tokenizer = Tokenizer;\n\n},\n{\"./EntityParser\":2,\"./InputStream\":3}],\n6:[function(_dereq_,module,exports){\nvar assert = _dereq_('assert');\n\nvar messages = _dereq_('./messages.json');\nvar constants = _dereq_('./constants');\n\nvar EventEmitter = _dereq_('events').EventEmitter;\n\nvar Tokenizer = _dereq_('./Tokenizer').Tokenizer;\nvar ElementStack = _dereq_('./ElementStack').ElementStack;\nvar StackItem = _dereq_('./StackItem').StackItem;\n\nvar Marker = {};\n\nfunction isWhitespace(ch) {\n\treturn ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\" || ch === \"\\f\";\n}\n\nfunction isWhitespaceOrReplacementCharacter(ch) {\n\treturn isWhitespace(ch) || ch === '\\uFFFD';\n}\n\nfunction isAllWhitespace(characters) {\n\tfor (var i = 0; i < characters.length; i++) {\n\t\tvar ch = characters[i];\n\t\tif (!isWhitespace(ch))\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isAllWhitespaceOrReplacementCharacters(characters) {\n\tfor (var i = 0; i < characters.length; i++) {\n\t\tvar ch = characters[i];\n\t\tif (!isWhitespaceOrReplacementCharacter(ch))\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction getAttribute(node, name) {\n\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\tvar attribute = node.attributes[i];\n\t\tif (attribute.nodeName === name) {\n\t\t\treturn attribute;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction CharacterBuffer(characters) {\n\tthis.characters = characters;\n\tthis.current = 0;\n\tthis.end = this.characters.length;\n}\n\nCharacterBuffer.prototype.skipAtMostOneLeadingNewline = function() {\n\tif (this.characters[this.current] === '\\n')\n\t\tthis.current++;\n};\n\nCharacterBuffer.prototype.skipLeadingWhitespace = function() {\n\twhile (isWhitespace(this.characters[this.current])) {\n\t\tif (++this.current == this.end)\n\t\t\treturn;\n\t}\n};\n\nCharacterBuffer.prototype.skipLeadingNonWhitespace = function() {\n\twhile (!isWhitespace(this.characters[this.current])) {\n\t\tif (++this.current == this.end)\n\t\t\treturn;\n\t}\n};\n\nCharacterBuffer.prototype.takeRemaining = function() {\n\treturn this.characters.substring(this.current);\n};\n\nCharacterBuffer.prototype.takeLeadingWhitespace = function() {\n\tvar start = this.current;\n\tthis.skipLeadingWhitespace();\n\tif (start === this.current)\n\t\treturn \"\";\n\treturn this.characters.substring(start, this.current - start);\n};\n\nObject.defineProperty(CharacterBuffer.prototype, 'length', {\n\tget: function(){\n\t\treturn this.end - this.current;\n\t}\n});\nfunction TreeBuilder() {\n\tthis.tokenizer = null;\n\tthis.errorHandler = null;\n\tthis.scriptingEnabled = false;\n\tthis.document = null;\n\tthis.head = null;\n\tthis.form = null;\n\tthis.openElements = new ElementStack();\n\tthis.activeFormattingElements = [];\n\tthis.insertionMode = null;\n\tthis.insertionModeName = \"\";\n\tthis.originalInsertionMode = \"\";\n\tthis.inQuirksMode = false; // TODO quirks mode\n\tthis.compatMode = \"no quirks\";\n\tthis.framesetOk = true;\n\tthis.redirectAttachToFosterParent = false;\n\tthis.selfClosingFlagAcknowledged = false;\n\tthis.context = \"\";\n\tthis.pendingTableCharacters = [];\n\tthis.shouldSkipLeadingNewline = false;\n\n\tvar tree = this;\n\tvar modes = this.insertionModes = {};\n\tmodes.base = {\n\t\tend_tag_handlers: {\"-default\": 'endTagOther'},\n\t\tstart_tag_handlers: {\"-default\": 'startTagOther'},\n\t\tprocessEOF: function() {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.openElements.length > 2) {\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\n\t\t\t} else if (tree.openElements.length == 2 &&\n\t\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\n\t\t\t} else if (tree.context && tree.openElements.length > 1) {\n\t\t\t}\n\t\t},\n\t\tprocessComment: function(data) {\n\t\t\ttree.insertComment(data, tree.currentStackItem().node);\n\t\t},\n\t\tprocessDoctype: function(name, publicId, systemId, forceQuirks) {\n\t\t\ttree.parseError('unexpected-doctype');\n\t\t},\n\t\tprocessStartTag: function(name, attributes, selfClosing) {\n\t\t\tif (this[this.start_tag_handlers[name]]) {\n\t\t\t\tthis[this.start_tag_handlers[name]](name, attributes, selfClosing);\n\t\t\t} else if (this[this.start_tag_handlers[\"-default\"]]) {\n\t\t\t\tthis[this.start_tag_handlers[\"-default\"]](name, attributes, selfClosing);\n\t\t\t} else {\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\n\t\t\t}\n\t\t},\n\t\tprocessEndTag: function(name) {\n\t\t\tif (this[this.end_tag_handlers[name]]) {\n\t\t\t\tthis[this.end_tag_handlers[name]](name);\n\t\t\t} else if (this[this.end_tag_handlers[\"-default\"]]) {\n\t\t\t\tthis[this.end_tag_handlers[\"-default\"]](name);\n\t\t\t} else {\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\n\t\t\t}\n\t\t},\n\t\tstartTagHtml: function(name, attributes) {\n\t\t\tmodes.inBody.startTagHtml(name, attributes);\n\t\t}\n\t};\n\n\tmodes.initial = Object.create(modes.base);\n\n\tmodes.initial.processEOF = function() {\n\t\ttree.parseError(\"expected-doctype-but-got-eof\");\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.initial.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.initial.processDoctype = function(name, publicId, systemId, forceQuirks) {\n\t\ttree.insertDoctype(name || '', publicId || '', systemId || '');\n\n\t\tif (forceQuirks || name != 'html' || (publicId != null && ([\n\t\t\t\t\t\"+//silmaril//dtd html pro v0r11 19970101//\",\n\t\t\t\t\t\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//\",\n\t\t\t\t\t\"-//as//dtd html 3.0 aswedit + extensions//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.1e//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.2 final//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.2//\",\n\t\t\t\t\t\"-//ietf//dtd html 3//\",\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//metrius//dtd metrius presentational//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html strict//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 tables//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html strict//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 tables//\",\n\t\t\t\t\t\"-//netscape comm. corp.//dtd html//\",\n\t\t\t\t\t\"-//netscape comm. corp.//dtd strict html//\",\n\t\t\t\t\t\"-//o'reilly and associates//dtd html 2.0//\",\n\t\t\t\t\t\"-//o'reilly and associates//dtd html extended 1.0//\",\n\t\t\t\t\t\"-//spyglass//dtd html 2.0 extended//\",\n\t\t\t\t\t\"-//sq//dtd html 2.0 hotmetal + extensions//\",\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava html//\",\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava strict html//\",\n\t\t\t\t\t\"-//w3c//dtd html 3 1995-03-24//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2 draft//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2 final//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2s draft//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.0 frameset//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.0 transitional//\",\n\t\t\t\t\t\"-//w3c//dtd html experimental 19960712//\",\n\t\t\t\t\t\"-//w3c//dtd html experimental 970421//\",\n\t\t\t\t\t\"-//w3c//dtd w3 html//\",\n\t\t\t\t\t\"-//w3o//dtd w3 html 3.0//\",\n\t\t\t\t\t\"-//webtechs//dtd mozilla html 2.0//\",\n\t\t\t\t\t\"-//webtechs//dtd mozilla html//\",\n\t\t\t\t\t\"html\"\n\t\t\t\t].some(publicIdStartsWith)\n\t\t\t\t|| [\n\t\t\t\t\t\"-//w3o//dtd w3 html strict 3.0//en//\",\n\t\t\t\t\t\"-/w3c/dtd html 4.0 transitional/en\",\n\t\t\t\t\t\"html\"\n\t\t\t\t].indexOf(publicId.toLowerCase()) > -1\n\t\t\t\t|| (systemId == null && [\n\t\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\n\t\t\t\t].some(publicIdStartsWith)))\n\t\t\t)\n\t\t\t|| (systemId != null && (systemId.toLowerCase() == \"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\"))\n\t\t) {\n\t\t\ttree.compatMode = \"quirks\";\n\t\t\ttree.parseError(\"quirky-doctype\");\n\t\t} else if (publicId != null && ([\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 transitional//\",\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 frameset//\"\n\t\t\t].some(publicIdStartsWith)\n\t\t\t|| (systemId != null && [\n\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\n\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\n\t\t\t].indexOf(publicId.toLowerCase()) > -1))\n\t\t) {\n\t\t\ttree.compatMode = \"limited quirks\";\n\t\t\ttree.parseError(\"almost-standards-doctype\");\n\t\t} else {\n\t\t\tif ((publicId == \"-//W3C//DTD HTML 4.0//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/REC-html40/strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD HTML 4.01//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/html4/strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.0 Strict//EN\" && (systemId == \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.1//EN\" && (systemId == \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"))\n\t\t\t) {\n\t\t\t} else if (!((systemId == null || systemId == \"about:legacy-compat\") && publicId == null)) {\n\t\t\t\ttree.parseError(\"unknown-doctype\");\n\t\t\t}\n\t\t}\n\t\ttree.setInsertionMode('beforeHTML');\n\t\tfunction publicIdStartsWith(string) {\n\t\t\treturn publicId.toLowerCase().indexOf(string) === 0;\n\t\t}\n\t};\n\n\tmodes.initial.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\ttree.parseError('expected-doctype-but-got-chars');\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.initial.processStartTag = function(name, attributes, selfClosing) {\n\t\ttree.parseError('expected-doctype-but-got-start-tag', {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.initial.processEndTag = function(name) {\n\t\ttree.parseError('expected-doctype-but-got-end-tag', {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.initial.anythingElse = function() {\n\t\ttree.compatMode = 'quirks';\n\t\ttree.setInsertionMode('beforeHTML');\n\t};\n\n\tmodes.beforeHTML = Object.create(modes.base);\n\n\tmodes.beforeHTML.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.beforeHTML.processEOF = function() {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.beforeHTML.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.beforeHTML.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.beforeHTML.startTagHtml = function(name, attributes, selfClosing) {\n\t\ttree.insertHtmlElement(attributes);\n\t\ttree.setInsertionMode('beforeHead');\n\t};\n\n\tmodes.beforeHTML.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.beforeHTML.processEndTag = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.beforeHTML.anythingElse = function() {\n\t\ttree.insertHtmlElement();\n\t\ttree.setInsertionMode('beforeHead');\n\t};\n\n\tmodes.afterAfterBody = Object.create(modes.base);\n\n\tmodes.afterAfterBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterAfterBody.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.afterAfterBody.processDoctype = function(data) {\n\t\tmodes.inBody.processDoctype(data);\n\t};\n\n\tmodes.afterAfterBody.startTagHtml = function(data, attributes) {\n\t\tmodes.inBody.startTagHtml(data, attributes);\n\t};\n\n\tmodes.afterAfterBody.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterAfterBody.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterAfterBody.processCharacters = function(data) {\n\t\tif (!isAllWhitespace(data.characters)) {\n\t\t\ttree.parseError('unexpected-char-after-body');\n\t\t\ttree.setInsertionMode('inBody');\n\t\t\treturn tree.insertionMode.processCharacters(data);\n\t\t}\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.afterBody = Object.create(modes.base);\n\n\tmodes.afterBody.end_tag_handlers = {\n\t\thtml: 'endTagHtml',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.afterBody.processComment = function(data) {\n\t\ttree.insertComment(data, tree.openElements.rootNode);\n\t};\n\n\tmodes.afterBody.processCharacters = function(data) {\n\t\tif (!isAllWhitespace(data.characters)) {\n\t\t\ttree.parseError('unexpected-char-after-body');\n\t\t\ttree.setInsertionMode('inBody');\n\t\t\treturn tree.insertionMode.processCharacters(data);\n\t\t}\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.afterBody.processStartTag = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag-after-body', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterBody.endTagHtml = function(name) {\n\t\tif (tree.context) {\n\t\t\ttree.parseError('end-html-in-innerhtml');\n\t\t} else {\n\t\t\ttree.setInsertionMode('afterAfterBody');\n\t\t}\n\t};\n\n\tmodes.afterBody.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag-after-body', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterFrameset = Object.create(modes.base);\n\n\tmodes.afterFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tnoframes: 'startTagNoframes',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterFrameset.end_tag_handlers = {\n\t\thtml: 'endTagHtml',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.afterFrameset.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tvar whitespace = \"\";\n\t\tfor (var i = 0; i < characters.length; i++) {\n\t\t\tvar ch = characters[i];\n\t\t\tif (isWhitespace(ch))\n\t\t\t\twhitespace += ch;\n\t\t}\n\t\tif (whitespace) {\n\t\t\ttree.insertText(whitespace);\n\t\t}\n\t\tif (whitespace.length < characters.length)\n\t\t\ttree.parseError('expected-eof-but-got-char');\n\t};\n\n\tmodes.afterFrameset.startTagNoframes = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterFrameset.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-after-frameset\", {name: name});\n\t};\n\n\tmodes.afterFrameset.endTagHtml = function(name) {\n\t\ttree.setInsertionMode('afterAfterFrameset');\n\t};\n\n\tmodes.afterFrameset.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-after-frameset\", {name: name});\n\t};\n\n\tmodes.beforeHead = Object.create(modes.base);\n\n\tmodes.beforeHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.beforeHead.end_tag_handlers = {\n\t\thtml: 'endTagImplyHead',\n\t\thead: 'endTagImplyHead',\n\t\tbody: 'endTagImplyHead',\n\t\tbr: 'endTagImplyHead',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.beforeHead.processEOF = function() {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.beforeHead.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.beforeHead.startTagHead = function(name, attributes) {\n\t\ttree.insertHeadElement(attributes);\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\tmodes.beforeHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.beforeHead.endTagImplyHead = function(name) {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.beforeHead.endTagOther = function(name) {\n\t\ttree.parseError('end-tag-after-implied-root', {name: name});\n\t};\n\n\tmodes.inHead = Object.create(modes.base);\n\n\tmodes.inHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\ttitle: 'startTagTitle',\n\t\tscript: 'startTagScript',\n\t\tstyle: 'startTagNoFramesStyle',\n\t\tnoscript: 'startTagNoScript',\n\t\tnoframes: 'startTagNoFramesStyle',\n\t\tbase: 'startTagBaseBasefontBgsoundLink',\n\t\tbasefont: 'startTagBaseBasefontBgsoundLink',\n\t\tbgsound: 'startTagBaseBasefontBgsoundLink',\n\t\tlink: 'startTagBaseBasefontBgsoundLink',\n\t\tmeta: 'startTagMeta',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inHead.end_tag_handlers = {\n\t\thead: 'endTagHead',\n\t\thtml: 'endTagHtmlBodyBr',\n\t\tbody: 'endTagHtmlBodyBr',\n\t\tbr: 'endTagHtmlBodyBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.inHead.processEOF = function() {\n\t\tvar name = tree.currentStackItem().localName;\n\t\tif (['title', 'style', 'script'].indexOf(name) != -1) {\n\t\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\", {name: name});\n\t\t\ttree.popElement();\n\t\t}\n\n\t\tthis.anythingElse();\n\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.inHead.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inHead.startTagHtml = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagHead = function(name, attributes) {\n\t\ttree.parseError('two-heads-are-not-better-than-one');\n\t};\n\n\tmodes.inHead.startTagTitle = function(name, attributes) {\n\t\ttree.processGenericRCDATAStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagNoScript = function(name, attributes) {\n\t\tif (tree.scriptingEnabled)\n\t\t\treturn tree.processGenericRawTextStartTag(name, attributes);\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inHeadNoscript');\n\t};\n\n\tmodes.inHead.startTagNoFramesStyle = function(name, attributes) {\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagScript = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.SCRIPT_DATA);\n\t\ttree.originalInsertionMode = tree.insertionModeName;\n\t\ttree.setInsertionMode('text');\n\t};\n\n\tmodes.inHead.startTagBaseBasefontBgsoundLink = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inHead.startTagMeta = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inHead.endTagHead = function(name) {\n\t\tif (tree.openElements.item(tree.openElements.length - 1).localName == 'head') {\n\t\t\ttree.openElements.pop();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'head'});\n\t\t}\n\t\ttree.setInsertionMode('afterHead');\n\t};\n\n\tmodes.inHead.endTagHtmlBodyBr = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inHead.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inHead.anythingElse = function() {\n\t\tthis.endTagHead('head');\n\t};\n\n\tmodes.afterHead = Object.create(modes.base);\n\n\tmodes.afterHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\tbody: 'startTagBody',\n\t\tframeset: 'startTagFrameset',\n\t\tbase: 'startTagFromHead',\n\t\tlink: 'startTagFromHead',\n\t\tmeta: 'startTagFromHead',\n\t\tscript: 'startTagFromHead',\n\t\tstyle: 'startTagFromHead',\n\t\ttitle: 'startTagFromHead',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.afterHead.end_tag_handlers = {\n\t\tbody: 'endTagBodyHtmlBr',\n\t\thtml: 'endTagBodyHtmlBr',\n\t\tbr: 'endTagBodyHtmlBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.afterHead.processEOF = function() {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.afterHead.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.afterHead.startTagHtml = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterHead.startTagBody = function(name, attributes) {\n\t\ttree.framesetOk = false;\n\t\ttree.insertBodyElement(attributes);\n\t\ttree.setInsertionMode('inBody');\n\t};\n\n\tmodes.afterHead.startTagFrameset = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inFrameset');\n\t};\n\n\tmodes.afterHead.startTagFromHead = function(name, attributes, selfClosing) {\n\t\ttree.parseError(\"unexpected-start-tag-out-of-my-head\", {name: name});\n\t\ttree.openElements.push(tree.head);\n\t\tmodes.inHead.processStartTag(name, attributes, selfClosing);\n\t\ttree.openElements.remove(tree.head);\n\t};\n\n\tmodes.afterHead.startTagHead = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t};\n\n\tmodes.afterHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterHead.endTagBodyHtmlBr = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterHead.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.afterHead.anythingElse = function() {\n\t\ttree.insertBodyElement([]);\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.framesetOk = true;\n\t}\n\n\tmodes.inBody = Object.create(modes.base);\n\n\tmodes.inBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagMisplaced',\n\t\tbase: 'startTagProcessInHead',\n\t\tbasefont: 'startTagProcessInHead',\n\t\tbgsound: 'startTagProcessInHead',\n\t\tlink: 'startTagProcessInHead',\n\t\tmeta: 'startTagProcessInHead',\n\t\tnoframes: 'startTagProcessInHead',\n\t\tscript: 'startTagProcessInHead',\n\t\tstyle: 'startTagProcessInHead',\n\t\ttitle: 'startTagProcessInHead',\n\t\tbody: 'startTagBody',\n\t\tform: 'startTagForm',\n\t\tplaintext: 'startTagPlaintext',\n\t\ta: 'startTagA',\n\t\tbutton: 'startTagButton',\n\t\txmp: 'startTagXmp',\n\t\ttable: 'startTagTable',\n\t\thr: 'startTagHr',\n\t\timage: 'startTagImage',\n\t\tinput: 'startTagInput',\n\t\ttextarea: 'startTagTextarea',\n\t\tselect: 'startTagSelect',\n\t\tisindex: 'startTagIsindex',\n\t\tapplet:\t'startTagAppletMarqueeObject',\n\t\tmarquee:\t'startTagAppletMarqueeObject',\n\t\tobject:\t'startTagAppletMarqueeObject',\n\t\tli: 'startTagListItem',\n\t\tdd: 'startTagListItem',\n\t\tdt: 'startTagListItem',\n\t\taddress: 'startTagCloseP',\n\t\tarticle: 'startTagCloseP',\n\t\taside: 'startTagCloseP',\n\t\tblockquote: 'startTagCloseP',\n\t\tcenter: 'startTagCloseP',\n\t\tdetails: 'startTagCloseP',\n\t\tdir: 'startTagCloseP',\n\t\tdiv: 'startTagCloseP',\n\t\tdl: 'startTagCloseP',\n\t\tfieldset: 'startTagCloseP',\n\t\tfigcaption: 'startTagCloseP',\n\t\tfigure: 'startTagCloseP',\n\t\tfooter: 'startTagCloseP',\n\t\theader: 'startTagCloseP',\n\t\thgroup: 'startTagCloseP',\n\t\tmain: 'startTagCloseP',\n\t\tmenu: 'startTagCloseP',\n\t\tnav: 'startTagCloseP',\n\t\tol: 'startTagCloseP',\n\t\tp: 'startTagCloseP',\n\t\tsection: 'startTagCloseP',\n\t\tsummary: 'startTagCloseP',\n\t\tul: 'startTagCloseP',\n\t\tlisting: 'startTagPreListing',\n\t\tpre: 'startTagPreListing',\n\t\tb: 'startTagFormatting',\n\t\tbig: 'startTagFormatting',\n\t\tcode: 'startTagFormatting',\n\t\tem: 'startTagFormatting',\n\t\tfont: 'startTagFormatting',\n\t\ti: 'startTagFormatting',\n\t\ts: 'startTagFormatting',\n\t\tsmall: 'startTagFormatting',\n\t\tstrike: 'startTagFormatting',\n\t\tstrong: 'startTagFormatting',\n\t\ttt: 'startTagFormatting',\n\t\tu: 'startTagFormatting',\n\t\tnobr: 'startTagNobr',\n\t\tarea: 'startTagVoidFormatting',\n\t\tbr: 'startTagVoidFormatting',\n\t\tembed: 'startTagVoidFormatting',\n\t\timg: 'startTagVoidFormatting',\n\t\tkeygen: 'startTagVoidFormatting',\n\t\twbr: 'startTagVoidFormatting',\n\t\tparam: 'startTagParamSourceTrack',\n\t\tsource: 'startTagParamSourceTrack',\n\t\ttrack: 'startTagParamSourceTrack',\n\t\tiframe: 'startTagIFrame',\n\t\tnoembed: 'startTagRawText',\n\t\tnoscript: 'startTagRawText',\n\t\th1: 'startTagHeading',\n\t\th2: 'startTagHeading',\n\t\th3: 'startTagHeading',\n\t\th4: 'startTagHeading',\n\t\th5: 'startTagHeading',\n\t\th6: 'startTagHeading',\n\t\tcaption: 'startTagMisplaced',\n\t\tcol: 'startTagMisplaced',\n\t\tcolgroup: 'startTagMisplaced',\n\t\tframe: 'startTagMisplaced',\n\t\tframeset: 'startTagFrameset',\n\t\ttbody: 'startTagMisplaced',\n\t\ttd: 'startTagMisplaced',\n\t\ttfoot: 'startTagMisplaced',\n\t\tth: 'startTagMisplaced',\n\t\tthead: 'startTagMisplaced',\n\t\ttr: 'startTagMisplaced',\n\t\toption: 'startTagOptionOptgroup',\n\t\toptgroup: 'startTagOptionOptgroup',\n\t\tmath: 'startTagMath',\n\t\tsvg: 'startTagSVG',\n\t\trt: 'startTagRpRt',\n\t\trp: 'startTagRpRt',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inBody.end_tag_handlers = {\n\t\tp: 'endTagP',\n\t\tbody: 'endTagBody',\n\t\thtml: 'endTagHtml',\n\t\taddress: 'endTagBlock',\n\t\tarticle: 'endTagBlock',\n\t\taside: 'endTagBlock',\n\t\tblockquote: 'endTagBlock',\n\t\tbutton: 'endTagBlock',\n\t\tcenter: 'endTagBlock',\n\t\tdetails: 'endTagBlock',\n\t\tdir: 'endTagBlock',\n\t\tdiv: 'endTagBlock',\n\t\tdl: 'endTagBlock',\n\t\tfieldset: 'endTagBlock',\n\t\tfigcaption: 'endTagBlock',\n\t\tfigure: 'endTagBlock',\n\t\tfooter: 'endTagBlock',\n\t\theader: 'endTagBlock',\n\t\thgroup: 'endTagBlock',\n\t\tlisting: 'endTagBlock',\n\t\tmain: 'endTagBlock',\n\t\tmenu: 'endTagBlock',\n\t\tnav: 'endTagBlock',\n\t\tol: 'endTagBlock',\n\t\tpre: 'endTagBlock',\n\t\tsection: 'endTagBlock',\n\t\tsummary: 'endTagBlock',\n\t\tul: 'endTagBlock',\n\t\tform: 'endTagForm',\n\t\tapplet: 'endTagAppletMarqueeObject',\n\t\tmarquee: 'endTagAppletMarqueeObject',\n\t\tobject: 'endTagAppletMarqueeObject',\n\t\tdd: 'endTagListItem',\n\t\tdt: 'endTagListItem',\n\t\tli: 'endTagListItem',\n\t\th1: 'endTagHeading',\n\t\th2: 'endTagHeading',\n\t\th3: 'endTagHeading',\n\t\th4: 'endTagHeading',\n\t\th5: 'endTagHeading',\n\t\th6: 'endTagHeading',\n\t\ta: 'endTagFormatting',\n\t\tb: 'endTagFormatting',\n\t\tbig: 'endTagFormatting',\n\t\tcode: 'endTagFormatting',\n\t\tem: 'endTagFormatting',\n\t\tfont: 'endTagFormatting',\n\t\ti: 'endTagFormatting',\n\t\tnobr: 'endTagFormatting',\n\t\ts: 'endTagFormatting',\n\t\tsmall: 'endTagFormatting',\n\t\tstrike: 'endTagFormatting',\n\t\tstrong: 'endTagFormatting',\n\t\ttt: 'endTagFormatting',\n\t\tu: 'endTagFormatting',\n\t\tbr: 'endTagBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.inBody.processCharacters = function(buffer) {\n\t\tif (tree.shouldSkipLeadingNewline) {\n\t\t\ttree.shouldSkipLeadingNewline = false;\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\n\t\t}\n\t\ttree.reconstructActiveFormattingElements();\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!characters)\n\t\t\treturn;\n\t\ttree.insertText(characters);\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\n\t\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagHtml = function(name, attributes) {\n\t\ttree.parseError('non-html-root');\n\t\ttree.addAttributesToElement(tree.openElements.rootNode, attributes);\n\t};\n\n\tmodes.inBody.startTagProcessInHead = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inBody.startTagBody = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag', {name: 'body'});\n\t\tif (tree.openElements.length == 1 ||\n\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\tassert.ok(tree.context);\n\t\t} else {\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.addAttributesToElement(tree.openElements.bodyElement, attributes);\n\t\t}\n\t};\n\n\tmodes.inBody.startTagFrameset = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag', {name: 'frameset'});\n\t\tif (tree.openElements.length == 1 ||\n\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\tassert.ok(tree.context);\n\t\t} else if (tree.framesetOk) {\n\t\t\ttree.detachFromParent(tree.openElements.bodyElement);\n\t\t\twhile (tree.openElements.length > 1)\n\t\t\t\ttree.openElements.pop();\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.setInsertionMode('inFrameset');\n\t\t}\n\t};\n\n\tmodes.inBody.startTagCloseP = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagPreListing = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t\ttree.shouldSkipLeadingNewline = true;\n\t};\n\n\tmodes.inBody.startTagForm = function(name, attributes) {\n\t\tif (tree.form) {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t} else {\n\t\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\t\tthis.endTagP('p');\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.form = tree.currentStackItem();\n\t\t}\n\t};\n\n\tmodes.inBody.startTagRpRt = function(name, attributes) {\n\t\tif (tree.openElements.inScope('ruby')) {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != 'ruby') {\n\t\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t\t}\n\t\t}\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagListItem = function(name, attributes) {\n\t\tvar stopNames = {li: ['li'], dd: ['dd', 'dt'], dt: ['dd', 'dt']};\n\t\tvar stopName = stopNames[name];\n\n\t\tvar els = tree.openElements;\n\t\tfor (var i = els.length - 1; i >= 0; i--) {\n\t\t\tvar node = els.item(i);\n\t\t\tif (stopName.indexOf(node.localName) != -1) {\n\t\t\t\ttree.insertionMode.processEndTag(node.localName);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (node.isSpecial() && node.localName !== 'p' && node.localName !== 'address' && node.localName !== 'div')\n\t\t\t\tbreak;\n\t\t}\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagPlaintext = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.PLAINTEXT);\n\t};\n\n\tmodes.inBody.startTagHeading = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\tif (tree.currentStackItem().isNumberedHeader()) {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t\ttree.popElement();\n\t\t}\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagA = function(name, attributes) {\n\t\tvar activeA = tree.elementInActiveFormattingElements('a');\n\t\tif (activeA) {\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: \"a\", endName: \"a\"});\n\t\t\ttree.adoptionAgencyEndTag('a');\n\t\t\tif (tree.openElements.contains(activeA))\n\t\t\t\ttree.openElements.remove(activeA);\n\t\t\ttree.removeElementFromActiveFormattingElements(activeA);\n\t\t}\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagFormatting = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagNobr = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tif (tree.openElements.inScope('nobr')) {\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: 'nobr', endName: 'nobr'});\n\t\t\tthis.processEndTag('nobr');\n\t\t\t\ttree.reconstructActiveFormattingElements();\n\t\t}\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagButton = function(name, attributes) {\n\t\tif (tree.openElements.inScope('button')) {\n\t\t\ttree.parseError('unexpected-start-tag-implies-end-tag', {startName: 'button', endName: 'button'});\n\t\t\tthis.processEndTag('button');\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t} else {\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertElement(name, attributes);\n\t\t}\n\t};\n\n\tmodes.inBody.startTagAppletMarqueeObject = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.activeFormattingElements.push(Marker);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.endTagAppletMarqueeObject = function(name) {\n\t\tif (!tree.openElements.inScope(name)) {\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t\ttree.clearActiveFormattingElements();\n\t\t}\n\t};\n\n\tmodes.inBody.startTagXmp = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.processEndTag('p');\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagTable = function(name, attributes) {\n\t\tif (tree.compatMode !== \"quirks\")\n\t\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\t\tthis.processEndTag('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inTable');\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagVoidFormatting = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagParamSourceTrack = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagHr = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagImage = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag-treated-as', {originalName: 'image', newName: 'img'});\n\t\tthis.processStartTag('img', attributes);\n\t};\n\n\tmodes.inBody.startTagInput = function(name, attributes) {\n\t\tvar currentFramesetOk = tree.framesetOk;\n\t\tthis.startTagVoidFormatting(name, attributes);\n\t\tfor (var key in attributes) {\n\t\t\tif (attributes[key].nodeName == 'type') {\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden')\n\t\t\t\t\ttree.framesetOk = currentFramesetOk;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inBody.startTagIsindex = function(name, attributes) {\n\t\ttree.parseError('deprecated-tag', {name: 'isindex'});\n\t\ttree.selfClosingFlagAcknowledged = true;\n\t\tif (tree.form)\n\t\t\treturn;\n\t\tvar formAttributes = [];\n\t\tvar inputAttributes = [];\n\t\tvar prompt = \"This is a searchable index. Enter search keywords: \";\n\t\tfor (var key in attributes) {\n\t\t\tswitch (attributes[key].nodeName) {\n\t\t\t\tcase 'action':\n\t\t\t\t\tformAttributes.push({nodeName: 'action',\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'prompt':\n\t\t\t\t\tprompt = attributes[key].nodeValue;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'name':\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tinputAttributes.push({nodeName: attributes[key].nodeName,\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\n\t\t\t}\n\t\t}\n\t\tinputAttributes.push({nodeName: 'name', nodeValue: 'isindex'});\n\t\tthis.processStartTag('form', formAttributes);\n\t\tthis.processStartTag('hr');\n\t\tthis.processStartTag('label');\n\t\tthis.processCharacters(new CharacterBuffer(prompt));\n\t\tthis.processStartTag('input', inputAttributes);\n\t\tthis.processEndTag('label');\n\t\tthis.processStartTag('hr');\n\t\tthis.processEndTag('form');\n\t};\n\n\tmodes.inBody.startTagTextarea = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.RCDATA);\n\t\ttree.originalInsertionMode = tree.insertionModeName;\n\t\ttree.shouldSkipLeadingNewline = true;\n\t\ttree.framesetOk = false;\n\t\ttree.setInsertionMode('text');\n\t};\n\n\tmodes.inBody.startTagIFrame = function(name, attributes) {\n\t\ttree.framesetOk = false;\n\t\tthis.startTagRawText(name, attributes);\n\t};\n\n\tmodes.inBody.startTagRawText = function(name, attributes) {\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t};\n\n\tmodes.inBody.startTagSelect = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t\tvar insertionModeName = tree.insertionModeName;\n\t\tif (insertionModeName == 'inTable' ||\n\t\t\tinsertionModeName == 'inCaption' ||\n\t\t\tinsertionModeName == 'inColumnGroup' ||\n\t\t\tinsertionModeName == 'inTableBody' ||\n\t\t\tinsertionModeName == 'inRow' ||\n\t\t\tinsertionModeName == 'inCell') {\n\t\t\ttree.setInsertionMode('inSelectInTable');\n\t\t} else {\n\t\t\ttree.setInsertionMode('inSelect');\n\t\t}\n\t};\n\n\tmodes.inBody.startTagMisplaced = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag-ignored', {name: name});\n\t};\n\n\tmodes.inBody.endTagMisplaced = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t};\n\n\tmodes.inBody.endTagBr = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-treated-as\", {originalName: \"br\", newName: \"br element\"});\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, []);\n\t\ttree.popElement();\n\t};\n\n\tmodes.inBody.startTagOptionOptgroup = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagOther = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.endTagOther = function(name) {\n\t\tvar node;\n\t\tfor (var i = tree.openElements.length - 1; i > 0; i--) {\n\t\t\tnode = tree.openElements.item(i);\n\t\t\tif (node.localName == name) {\n\t\t\t\ttree.generateImpliedEndTags(name);\n\t\t\t\tif (tree.currentStackItem().localName != name)\n\t\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\t\ttree.openElements.remove_openElements_until(function(x) {return x === node;});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (node.isSpecial()) {\n\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inBody.startTagMath = function(name, attributes, selfClosing) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tattributes = tree.adjustMathMLAttributes(attributes);\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/1998/Math/MathML\", selfClosing);\n\t};\n\n\tmodes.inBody.startTagSVG = function(name, attributes, selfClosing) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tattributes = tree.adjustSVGAttributes(attributes);\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/2000/svg\", selfClosing);\n\t};\n\n\tmodes.inBody.endTagP = function(name) {\n\t\tif (!tree.openElements.inButtonScope('p')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'p'});\n\t\t\tthis.startTagCloseP('p', []);\n\t\t\tthis.endTagP('p');\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags('p');\n\t\t\tif (tree.currentStackItem().localName != 'p')\n\t\t\t\ttree.parseError('unexpected-implied-end-tag', {name: 'p'});\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagBody = function(name) {\n\t\tif (!tree.openElements.inScope('body')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().localName != 'body') {\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\texpectedName: tree.currentStackItem().localName,\n\t\t\t\tgotName: name\n\t\t\t});\n\t\t}\n\t\ttree.setInsertionMode('afterBody');\n\t};\n\n\tmodes.inBody.endTagHtml = function(name) {\n\t\tif (!tree.openElements.inScope('body')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().localName != 'body') {\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\texpectedName: tree.currentStackItem().localName,\n\t\t\t\tgotName: name\n\t\t\t});\n\t\t}\n\t\ttree.setInsertionMode('afterBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inBody.endTagBlock = function(name) {\n\t\tif (!tree.openElements.inScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagForm = function(name)  {\n\t\tvar node = tree.form;\n\t\ttree.form = null;\n\t\tif (!node || !tree.openElements.inScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem() != node) {\n\t\t\t\ttree.parseError('end-tag-too-early-ignored', {name: 'form'});\n\t\t\t}\n\t\t\ttree.openElements.remove(node);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagListItem = function(name) {\n\t\tif (!tree.openElements.inListItemScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags(name);\n\t\t\tif (tree.currentStackItem().localName != name)\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagHeading = function(name) {\n\t\tif (!tree.openElements.hasNumberedHeaderElementInScope()) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\ttree.generateImpliedEndTags();\n\t\tif (tree.currentStackItem().localName != name)\n\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\n\t\ttree.openElements.remove_openElements_until(function(e) {\n\t\t\treturn e.isNumberedHeader();\n\t\t});\n\t};\n\n\tmodes.inBody.endTagFormatting = function(name, attributes) {\n\t\tif (!tree.adoptionAgencyEndTag(name))\n\t\t\tthis.endTagOther(name, attributes);\n\t};\n\n\tmodes.inCaption = Object.create(modes.base);\n\n\tmodes.inCaption.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagTableElement',\n\t\tcol: 'startTagTableElement',\n\t\tcolgroup: 'startTagTableElement',\n\t\ttbody: 'startTagTableElement',\n\t\ttd: 'startTagTableElement',\n\t\ttfoot: 'startTagTableElement',\n\t\tthead: 'startTagTableElement',\n\t\ttr: 'startTagTableElement',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inCaption.end_tag_handlers = {\n\t\tcaption: 'endTagCaption',\n\t\ttable: 'endTagTable',\n\t\tbody: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttbody: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\ttfood: 'endTagIgnore',\n\t\tthead: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inCaption.processCharacters = function(data) {\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.inCaption.startTagTableElement = function(name, attributes) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\n\t\ttree.insertionMode.processEndTag('caption');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inCaption.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inCaption.endTagCaption = function(name) {\n\t\tif (!tree.openElements.inTableScope('caption')) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != 'caption') {\n\t\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\t\tgotName: \"caption\",\n\t\t\t\t\texpectedName: tree.currentStackItem().localName\n\t\t\t\t});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped('caption');\n\t\t\ttree.clearActiveFormattingElements();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t}\n\t};\n\n\tmodes.inCaption.endTagTable = function(name) {\n\t\ttree.parseError(\"unexpected-end-table-in-caption\");\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\n\t\ttree.insertionMode.processEndTag('caption');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inCaption.endTagIgnore = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inCaption.endTagOther = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inCell = Object.create(modes.base);\n\n\tmodes.inCell.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttd: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tth: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\ttr: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inCell.end_tag_handlers = {\n\t\ttd: 'endTagTableCell',\n\t\tth: 'endTagTableCell',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttable: 'endTagImply',\n\t\ttbody: 'endTagImply',\n\t\ttfoot: 'endTagImply',\n\t\tthead: 'endTagImply',\n\t\ttr: 'endTagImply',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inCell.processCharacters = function(data) {\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.inCell.startTagTableOther = function(name, attributes, selfClosing) {\n\t\tif (tree.openElements.inTableScope('td') || tree.openElements.inTableScope('th')) {\n\t\t\tthis.closeCell();\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inCell.endTagTableCell = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.generateImpliedEndTags(name);\n\t\t\tif (tree.currentStackItem().localName != name.toLowerCase()) {\n\t\t\t\ttree.parseError('unexpected-cell-end-tag', {name: name});\n\t\t\t\ttree.openElements.popUntilPopped(name);\n\t\t\t} else {\n\t\t\t\ttree.popElement();\n\t\t\t}\n\t\t\ttree.clearActiveFormattingElements();\n\t\t\ttree.setInsertionMode('inRow');\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.endTagIgnore = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inCell.endTagImply = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.closeCell();\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.endTagOther = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inCell.closeCell = function() {\n\t\tif (tree.openElements.inTableScope('td')) {\n\t\t\tthis.endTagTableCell('td');\n\t\t} else if (tree.openElements.inTableScope('th')) {\n\t\t\tthis.endTagTableCell('th');\n\t\t}\n\t};\n\n\n\tmodes.inColumnGroup = Object.create(modes.base);\n\n\tmodes.inColumnGroup.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcol: 'startTagCol',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inColumnGroup.end_tag_handlers = {\n\t\tcolgroup: 'endTagColgroup',\n\t\tcol: 'endTagCol',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inColumnGroup.ignoreEndTagColgroup = function() {\n\t\treturn tree.currentStackItem().localName == 'html';\n\t};\n\n\tmodes.inColumnGroup.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inColumnGroup.startTagCol = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inColumnGroup.startTagOther = function(name, attributes, selfClosing) {\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inColumnGroup.endTagColgroup = function(name) {\n\t\tif (this.ignoreEndTagColgroup()) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t}\n\t};\n\n\tmodes.inColumnGroup.endTagCol = function(name) {\n\t\ttree.parseError(\"no-end-tag\", {name: 'col'});\n\t};\n\n\tmodes.inColumnGroup.endTagOther = function(name) {\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name) ;\n\t};\n\n\tmodes.inForeignContent = Object.create(modes.base);\n\n\tmodes.inForeignContent.processStartTag = function(name, attributes, selfClosing) {\n\t\tif (['b', 'big', 'blockquote', 'body', 'br', 'center', 'code', 'dd', 'div', 'dl', 'dt', 'em', 'embed', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'i', 'img', 'li', 'listing', 'menu', 'meta', 'nobr', 'ol', 'p', 'pre', 'ruby', 's', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'table', 'tt', 'u', 'ul', 'var'].indexOf(name) != -1\n\t\t\t\t|| (name == 'font' && attributes.some(function(attr){ return ['color', 'face', 'size'].indexOf(attr.nodeName) >= 0 }))) {\n\t\t\ttree.parseError('unexpected-html-element-in-foreign-content', {name: name});\n\t\t\twhile (tree.currentStackItem().isForeign()\n\t\t\t\t&& !tree.currentStackItem().isHtmlIntegrationPoint()\n\t\t\t\t&& !tree.currentStackItem().isMathMLTextIntegrationPoint()) {\n\t\t\t\ttree.openElements.pop();\n\t\t\t}\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/1998/Math/MathML\") {\n\t\t\tattributes = tree.adjustMathMLAttributes(attributes);\n\t\t}\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/2000/svg\") {\n\t\t\tname = tree.adjustSVGTagNameCase(name);\n\t\t\tattributes = tree.adjustSVGAttributes(attributes);\n\t\t}\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, tree.currentStackItem().namespaceURI, selfClosing);\n\t};\n\n\tmodes.inForeignContent.processEndTag = function(name) {\n\t\tvar node = tree.currentStackItem();\n\t\tvar index = tree.openElements.length - 1;\n\t\tif (node.localName.toLowerCase() != name)\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\n\t\twhile (true) {\n\t\t\tif (index === 0)\n\t\t\t\tbreak;\n\t\t\tif (node.localName.toLowerCase() == name) {\n\t\t\t\twhile (tree.openElements.pop() != node);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tindex -= 1;\n\t\t\tnode = tree.openElements.item(index);\n\t\t\tif (node.isForeign()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\ttree.insertionMode.processEndTag(name);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inForeignContent.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError('invalid-codepoint');\n\t\t\treturn '\\uFFFD';\n\t\t});\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\n\t\t\ttree.framesetOk = false;\n\t\ttree.insertText(characters);\n\t};\n\n\tmodes.inHeadNoscript = Object.create(modes.base);\n\n\tmodes.inHeadNoscript.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tbasefont: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tbgsound: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tlink: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tmeta: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tnoframes: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tstyle: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\thead: 'startTagHeadNoscript',\n\t\tnoscript: 'startTagHeadNoscript',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inHeadNoscript.end_tag_handlers = {\n\t\tnoscript: 'endTagNoscript',\n\t\tbr: 'endTagBr',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inHeadNoscript.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inHeadNoscript.processComment = function(data) {\n\t\tmodes.inHead.processComment(data);\n\t};\n\n\tmodes.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.startTagHeadNoscript = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inHeadNoscript.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.endTagBr = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.endTagNoscript = function(name, attributes) {\n\t\ttree.popElement();\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\tmodes.inHeadNoscript.endTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inHeadNoscript.anythingElse = function() {\n\t\ttree.popElement();\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\n\tmodes.inFrameset = Object.create(modes.base);\n\n\tmodes.inFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tframeset: 'startTagFrameset',\n\t\tframe: 'startTagFrame',\n\t\tnoframes: 'startTagNoframes',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inFrameset.end_tag_handlers = {\n\t\tframeset: 'endTagFrameset',\n\t\tnoframes: 'endTagNoframes',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inFrameset.processCharacters = function(data) {\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\n\t};\n\n\tmodes.inFrameset.startTagFrameset = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagFrame = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagNoframes = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inFrameset.endTagFrameset = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'html') {\n\t\t\ttree.parseError(\"unexpected-frameset-in-frameset-innerhtml\");\n\t\t} else {\n\t\t\ttree.popElement();\n\t\t}\n\n\t\tif (!tree.context && tree.currentStackItem().localName != 'frameset') {\n\t\t\ttree.setInsertionMode('afterFrameset');\n\t\t}\n\t};\n\n\tmodes.inFrameset.endTagNoframes = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inFrameset.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inTable = Object.create(modes.base);\n\n\tmodes.inTable.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagCaption',\n\t\tcolgroup: 'startTagColgroup',\n\t\tcol: 'startTagCol',\n\t\ttable: 'startTagTable',\n\t\ttbody: 'startTagRowGroup',\n\t\ttfoot: 'startTagRowGroup',\n\t\tthead: 'startTagRowGroup',\n\t\ttd: 'startTagImplyTbody',\n\t\tth: 'startTagImplyTbody',\n\t\ttr: 'startTagImplyTbody',\n\t\tstyle: 'startTagStyleScript',\n\t\tscript: 'startTagStyleScript',\n\t\tinput: 'startTagInput',\n\t\tform: 'startTagForm',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inTable.end_tag_handlers = {\n\t\ttable: 'endTagTable',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttbody: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\ttfoot: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\tthead: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inTable.processCharacters =  function(data) {\n\t\tif (tree.currentStackItem().isFosterParenting()) {\n\t\t\tvar originalInsertionMode = tree.insertionModeName;\n\t\t\ttree.setInsertionMode('inTableText');\n\t\t\ttree.originalInsertionMode = originalInsertionMode;\n\t\t\ttree.insertionMode.processCharacters(data);\n\t\t} else {\n\t\t\ttree.redirectAttachToFosterParent = true;\n\t\t\tmodes.inBody.processCharacters(data);\n\t\t\ttree.redirectAttachToFosterParent = false;\n\t\t}\n\t};\n\n\tmodes.inTable.startTagCaption = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.activeFormattingElements.push(Marker);\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inCaption');\n\t};\n\n\tmodes.inTable.startTagColgroup = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inColumnGroup');\n\t};\n\n\tmodes.inTable.startTagCol = function(name, attributes) {\n\t\tthis.startTagColgroup('colgroup', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagRowGroup = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inTableBody');\n\t};\n\n\tmodes.inTable.startTagImplyTbody = function(name, attributes) {\n\t\tthis.startTagRowGroup('tbody', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagTable = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\",\n\t\t\t\t{startName: \"table\", endName: \"table\"});\n\t\ttree.insertionMode.processEndTag('table');\n\t\tif (!tree.context) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagStyleScript = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagInput = function(name, attributes) {\n\t\tfor (var key in attributes) {\n\t\t\tif (attributes[key].nodeName.toLowerCase() == 'type') {\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden') {\n\t\t\t\t\ttree.parseError(\"unexpected-hidden-input-in-table\");\n\t\t\t\t\ttree.insertElement(name, attributes);\n\t\t\t\t\ttree.openElements.pop();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.startTagOther(name, attributes);\n\t};\n\n\tmodes.inTable.startTagForm = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-form-in-table\");\n\t\tif (!tree.form) {\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.form = tree.currentStackItem();\n\t\t\ttree.openElements.pop();\n\t\t}\n\t};\n\n\tmodes.inTable.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError(\"unexpected-start-tag-implies-table-voodoo\", {name: name});\n\t\ttree.redirectAttachToFosterParent = true;\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t\ttree.redirectAttachToFosterParent = false;\n\t};\n\n\tmodes.inTable.endTagTable = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError(\"end-tag-too-early-named\", {gotName: 'table', expectedName: tree.currentStackItem().localName});\n\t\t\t}\n\n\t\t\ttree.openElements.popUntilPopped('table');\n\t\t\ttree.resetInsertionMode();\n\t\t} else {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTable.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t};\n\n\tmodes.inTable.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-implies-table-voodoo\", {name: name});\n\t\ttree.redirectAttachToFosterParent = true;\n\t\tmodes.inBody.processEndTag(name);\n\t\ttree.redirectAttachToFosterParent = false;\n\t};\n\n\tmodes.inTableText = Object.create(modes.base);\n\n\tmodes.inTableText.flushCharacters = function() {\n\t\tvar characters = tree.pendingTableCharacters.join('');\n\t\tif (!isAllWhitespace(characters)) {\n\t\t\ttree.redirectAttachToFosterParent = true;\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertText(characters);\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.redirectAttachToFosterParent = false;\n\t\t} else {\n\t\t\ttree.insertText(characters);\n\t\t}\n\t\ttree.pendingTableCharacters = [];\n\t};\n\n\tmodes.inTableText.processComment = function(data) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processComment(data);\n\t};\n\n\tmodes.inTableText.processEOF = function(data) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.inTableText.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!characters)\n\t\t\treturn;\n\t\ttree.pendingTableCharacters.push(characters);\n\t};\n\n\tmodes.inTableText.processStartTag = function(name, attributes, selfClosing) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inTableText.processEndTag = function(name, attributes) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEndTag(name, attributes);\n\t};\n\n\tmodes.inTableBody = Object.create(modes.base);\n\n\tmodes.inTableBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\ttr: 'startTagTr',\n\t\ttd: 'startTagTableCell',\n\t\tth: 'startTagTableCell',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inTableBody.end_tag_handlers = {\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTableRowGroup',\n\t\ttfoot: 'endTagTableRowGroup',\n\t\tthead: 'endTagTableRowGroup',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inTableBody.processCharacters = function(data) {\n\t\tmodes.inTable.processCharacters(data);\n\t};\n\n\tmodes.inTableBody.startTagTr = function(name, attributes) {\n\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inRow');\n\t};\n\n\tmodes.inTableBody.startTagTableCell = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-cell-in-table-body\", {name: name});\n\t\tthis.startTagTr('tr', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTableBody.startTagTableOther = function(name, attributes) {\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.startTagOther = function(name, attributes) {\n\t\tmodes.inTable.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTableBody.endTagTableRowGroup = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag-in-table-body', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.endTagTable = function(name) {\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-table-body\", {name: name});\n\t};\n\n\tmodes.inTableBody.endTagOther = function(name) {\n\t\tmodes.inTable.processEndTag(name);\n\t};\n\n\tmodes.inSelect = Object.create(modes.base);\n\n\tmodes.inSelect.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\toption: 'startTagOption',\n\t\toptgroup: 'startTagOptgroup',\n\t\tselect: 'startTagSelect',\n\t\tinput: 'startTagInput',\n\t\tkeygen: 'startTagInput',\n\t\ttextarea: 'startTagInput',\n\t\tscript: 'startTagScript',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inSelect.end_tag_handlers = {\n\t\toption: 'endTagOption',\n\t\toptgroup: 'endTagOptgroup',\n\t\tselect: 'endTagSelect',\n\t\tcaption: 'endTagTableElements',\n\t\ttable: 'endTagTableElements',\n\t\ttbody: 'endTagTableElements',\n\t\ttfoot: 'endTagTableElements',\n\t\tthead: 'endTagTableElements',\n\t\ttr: 'endTagTableElements',\n\t\ttd: 'endTagTableElements',\n\t\tth: 'endTagTableElements',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inSelect.processCharacters = function(buffer) {\n\t\tvar data = buffer.takeRemaining();\n\t\tdata = data.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!data)\n\t\t\treturn;\n\t\ttree.insertText(data);\n\t};\n\n\tmodes.inSelect.startTagOption = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inSelect.startTagOptgroup = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\tif (tree.currentStackItem().localName == 'optgroup')\n\t\t\ttree.popElement();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inSelect.endTagOption = function(name) {\n\t\tif (tree.currentStackItem().localName !== 'option') {\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t\t\treturn;\n\t\t}\n\t\ttree.popElement();\n\t};\n\n\tmodes.inSelect.endTagOptgroup = function(name) {\n\t\tif (tree.currentStackItem().localName == 'option' && tree.openElements.item(tree.openElements.length - 2).localName == 'optgroup') {\n\t\t\ttree.popElement();\n\t\t}\n\t\tif (tree.currentStackItem().localName == 'optgroup') {\n\t\t\ttree.popElement();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: 'optgroup'});\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagSelect = function(name) {\n\t\ttree.parseError(\"unexpected-select-in-select\");\n\t\tthis.endTagSelect('select');\n\t};\n\n\tmodes.inSelect.endTagSelect = function(name) {\n\t\tif (tree.openElements.inTableScope('select')) {\n\t\t\ttree.openElements.popUntilPopped('select');\n\t\t\ttree.resetInsertionMode();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagInput = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-input-in-select\");\n\t\tif (tree.openElements.inSelectScope('select')) {\n\t\t\tthis.endTagSelect('select');\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagScript = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inSelect.endTagTableElements = function(name) {\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagSelect('select');\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-select\", {name: name});\n\t};\n\n\tmodes.inSelect.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t};\n\n\tmodes.inSelectInTable = Object.create(modes.base);\n\n\tmodes.inSelectInTable.start_tag_handlers = {\n\t\tcaption: 'startTagTable',\n\t\ttable: 'startTagTable',\n\t\ttbody: 'startTagTable',\n\t\ttfoot: 'startTagTable',\n\t\tthead: 'startTagTable',\n\t\ttr: 'startTagTable',\n\t\ttd: 'startTagTable',\n\t\tth: 'startTagTable',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inSelectInTable.end_tag_handlers = {\n\t\tcaption: 'endTagTable',\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTable',\n\t\ttfoot: 'endTagTable',\n\t\tthead: 'endTagTable',\n\t\ttr: 'endTagTable',\n\t\ttd: 'endTagTable',\n\t\tth: 'endTagTable',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inSelectInTable.processCharacters = function(data) {\n\t\tmodes.inSelect.processCharacters(data);\n\t};\n\n\tmodes.inSelectInTable.startTagTable = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-table-element-start-tag-in-select-in-table\", {name: name});\n\t\tthis.endTagOther(\"select\");\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inSelectInTable.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inSelect.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inSelectInTable.endTagTable = function(name) {\n\t\ttree.parseError(\"unexpected-table-element-end-tag-in-select-in-table\", {name: name});\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagOther(\"select\");\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t}\n\t};\n\n\tmodes.inSelectInTable.endTagOther = function(name) {\n\t\tmodes.inSelect.processEndTag(name);\n\t};\n\n\tmodes.inRow = Object.create(modes.base);\n\n\tmodes.inRow.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\ttd: 'startTagTableCell',\n\t\tth: 'startTagTableCell',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\ttr: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inRow.end_tag_handlers = {\n\t\ttr: 'endTagTr',\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTableRowGroup',\n\t\ttfoot: 'endTagTableRowGroup',\n\t\tthead: 'endTagTableRowGroup',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inRow.processCharacters = function(data) {\n\t\tmodes.inTable.processCharacters(data);\n\t};\n\n\tmodes.inRow.startTagTableCell = function(name, attributes) {\n\t\ttree.openElements.popUntilTableRowScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inCell');\n\t\ttree.activeFormattingElements.push(Marker);\n\t};\n\n\tmodes.inRow.startTagTableOther = function(name, attributes) {\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\n\t\tthis.endTagTr('tr');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inRow.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inTable.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inRow.endTagTr = function(name) {\n\t\tif (this.ignoreEndTagTr()) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.openElements.popUntilTableRowScopeMarker();\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTableBody');\n\t\t}\n\t};\n\n\tmodes.inRow.endTagTable = function(name) {\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\n\t\tthis.endTagTr('tr');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inRow.endTagTableRowGroup = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagTr('tr');\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inRow.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-table-row\", {name: name});\n\t};\n\n\tmodes.inRow.endTagOther = function(name) {\n\t\tmodes.inTable.processEndTag(name);\n\t};\n\n\tmodes.inRow.ignoreEndTagTr = function() {\n\t\treturn !tree.openElements.inTableScope('tr');\n\t};\n\n\tmodes.afterAfterFrameset = Object.create(modes.base);\n\n\tmodes.afterAfterFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tnoframes: 'startTagNoFrames',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterAfterFrameset.processEOF = function() {};\n\n\tmodes.afterAfterFrameset.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.afterAfterFrameset.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tvar whitespace = \"\";\n\t\tfor (var i = 0; i < characters.length; i++) {\n\t\t\tvar ch = characters[i];\n\t\t\tif (isWhitespace(ch))\n\t\t\t\twhitespace += ch;\n\t\t}\n\t\tif (whitespace) {\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertText(whitespace);\n\t\t}\n\t\tif (whitespace.length < characters.length)\n\t\t\ttree.parseError('expected-eof-but-got-char');\n\t};\n\n\tmodes.afterAfterFrameset.startTagNoFrames = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterAfterFrameset.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError('expected-eof-but-got-start-tag', {name: name});\n\t};\n\n\tmodes.afterAfterFrameset.processEndTag = function(name, attributes) {\n\t\ttree.parseError('expected-eof-but-got-end-tag', {name: name});\n\t};\n\n\tmodes.text = Object.create(modes.base);\n\n\tmodes.text.start_tag_handlers = {\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.text.end_tag_handlers = {\n\t\tscript: 'endTagScript',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.text.processCharacters = function(buffer) {\n\t\tif (tree.shouldSkipLeadingNewline) {\n\t\t\ttree.shouldSkipLeadingNewline = false;\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\n\t\t}\n\t\tvar data = buffer.takeRemaining();\n\t\tif (!data)\n\t\t\treturn;\n\t\ttree.insertText(data);\n\t};\n\n\tmodes.text.processEOF = function() {\n\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\",\n\t\t\t{name: tree.currentStackItem().localName});\n\t\ttree.openElements.pop();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.text.startTagOther = function(name) {\n\t\tthrow \"Tried to process start tag \" + name + \" in RCDATA/RAWTEXT mode\";\n\t};\n\n\tmodes.text.endTagScript = function(name) {\n\t\tvar node = tree.openElements.pop();\n\t\tassert.ok(node.localName == 'script');\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t};\n\n\tmodes.text.endTagOther = function(name) {\n\t\ttree.openElements.pop();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t};\n}\n\nTreeBuilder.prototype.setInsertionMode = function(name) {\n\tthis.insertionMode = this.insertionModes[name];\n\tthis.insertionModeName = name;\n};\nTreeBuilder.prototype.adoptionAgencyEndTag = function(name) {\n\tvar outerIterationLimit = 8;\n\tvar innerIterationLimit = 3;\n\tvar formattingElement;\n\n\tfunction isActiveFormattingElement(el) {\n\t\treturn el === formattingElement;\n\t}\n\n\tvar outerLoopCounter = 0;\n\n\twhile (outerLoopCounter++ < outerIterationLimit) {\n\t\tformattingElement = this.elementInActiveFormattingElements(name);\n\n\t\tif (!formattingElement || (this.openElements.contains(formattingElement) && !this.openElements.inScope(formattingElement.localName))) {\n\t\t\tthis.parseError('adoption-agency-1.1', {name: name});\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.openElements.contains(formattingElement)) {\n\t\t\tthis.parseError('adoption-agency-1.2', {name: name});\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\t\treturn true;\n\t\t}\n\t\tif (!this.openElements.inScope(formattingElement.localName)) {\n\t\t\tthis.parseError('adoption-agency-4.4', {name: name});\n\t\t}\n\n\t\tif (formattingElement != this.currentStackItem()) {\n\t\t\tthis.parseError('adoption-agency-1.3', {name: name});\n\t\t}\n\t\tvar furthestBlock = this.openElements.furthestBlockForFormattingElement(formattingElement.node);\n\n\t\tif (!furthestBlock) {\n\t\t\tthis.openElements.remove_openElements_until(isActiveFormattingElement);\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\t\treturn true;\n\t\t}\n\n\t\tvar afeIndex = this.openElements.elements.indexOf(formattingElement);\n\t\tvar commonAncestor = this.openElements.item(afeIndex - 1);\n\n\t\tvar bookmark = this.activeFormattingElements.indexOf(formattingElement);\n\n\t\tvar node = furthestBlock;\n\t\tvar lastNode = furthestBlock;\n\t\tvar index = this.openElements.elements.indexOf(node);\n\n\t\tvar innerLoopCounter = 0;\n\t\twhile (innerLoopCounter++ < innerIterationLimit) {\n\t\t\tindex -= 1;\n\t\t\tnode = this.openElements.item(index);\n\t\t\tif (this.activeFormattingElements.indexOf(node) < 0) {\n\t\t\t\tthis.openElements.elements.splice(index, 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (node == formattingElement)\n\t\t\t\tbreak;\n\n\t\t\tif (lastNode == furthestBlock)\n\t\t\t\tbookmark = this.activeFormattingElements.indexOf(node) + 1;\n\n\t\t\tvar clone = this.createElement(node.namespaceURI, node.localName, node.attributes);\n\t\t\tvar newNode = new StackItem(node.namespaceURI, node.localName, node.attributes, clone);\n\n\t\t\tthis.activeFormattingElements[this.activeFormattingElements.indexOf(node)] = newNode;\n\t\t\tthis.openElements.elements[this.openElements.elements.indexOf(node)] = newNode;\n\n\t\t\tnode = newNode;\n\t\t\tthis.detachFromParent(lastNode.node);\n\t\t\tthis.attachNode(lastNode.node, node.node);\n\t\t\tlastNode = node;\n\t\t}\n\n\t\tthis.detachFromParent(lastNode.node);\n\t\tif (commonAncestor.isFosterParenting()) {\n\t\t\tthis.insertIntoFosterParent(lastNode.node);\n\t\t} else {\n\t\t\tthis.attachNode(lastNode.node, commonAncestor.node);\n\t\t}\n\n\t\tvar clone = this.createElement(\"http://www.w3.org/1999/xhtml\", formattingElement.localName, formattingElement.attributes);\n\t\tvar formattingClone = new StackItem(formattingElement.namespaceURI, formattingElement.localName, formattingElement.attributes, clone);\n\n\t\tthis.reparentChildren(furthestBlock.node, clone);\n\t\tthis.attachNode(clone, furthestBlock.node);\n\n\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\tthis.activeFormattingElements.splice(Math.min(bookmark, this.activeFormattingElements.length), 0, formattingClone);\n\n\t\tthis.openElements.remove(formattingElement);\n\t\tthis.openElements.elements.splice(this.openElements.elements.indexOf(furthestBlock) + 1, 0, formattingClone);\n\t}\n\n\treturn true;\n};\n\nTreeBuilder.prototype.start = function() {\n\tthrow \"Not mplemented\";\n};\n\nTreeBuilder.prototype.startTokenization = function(tokenizer) {\n\tthis.tokenizer = tokenizer;\n\tthis.compatMode = \"no quirks\";\n\tthis.originalInsertionMode = \"initial\";\n\tthis.framesetOk = true;\n\tthis.openElements = new ElementStack();\n\tthis.activeFormattingElements = [];\n\tthis.start();\n\tif (this.context) {\n\t\tswitch(this.context) {\n\t\tcase 'title':\n\t\tcase 'textarea':\n\t\t\tthis.tokenizer.setState(Tokenizer.RCDATA);\n\t\t\tbreak;\n\t\tcase 'style':\n\t\tcase 'xmp':\n\t\tcase 'iframe':\n\t\tcase 'noembed':\n\t\tcase 'noframes':\n\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\t\t\tbreak;\n\t\tcase 'script':\n\t\t\tthis.tokenizer.setState(Tokenizer.SCRIPT_DATA);\n\t\t\tbreak;\n\t\tcase 'noscript':\n\t\t\tif (this.scriptingEnabled)\n\t\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\t\t\tbreak;\n\t\tcase 'plaintext':\n\t\t\tthis.tokenizer.setState(Tokenizer.PLAINTEXT);\n\t\t\tbreak;\n\t\t}\n\t\tthis.insertHtmlElement();\n\t\tthis.resetInsertionMode();\n\t} else {\n\t\tthis.setInsertionMode('initial');\n\t}\n};\n\nTreeBuilder.prototype.processToken = function(token) {\n\tthis.selfClosingFlagAcknowledged = false;\n\n\tvar currentNode = this.openElements.top || null;\n\tvar insertionMode;\n\tif (!currentNode || !currentNode.isForeign() ||\n\t\t(currentNode.isMathMLTextIntegrationPoint() &&\n\t\t\t((token.type == 'StartTag' &&\n\t\t\t\t\t!(token.name in {mglyph:0, malignmark:0})) ||\n\t\t\t\t(token.type === 'Characters'))\n\t\t) ||\n\t\t(currentNode.namespaceURI == \"http://www.w3.org/1998/Math/MathML\" &&\n\t\t\tcurrentNode.localName == 'annotation-xml' &&\n\t\t\ttoken.type == 'StartTag' && token.name == 'svg'\n\t\t) ||\n\t\t(currentNode.isHtmlIntegrationPoint() &&\n\t\t\ttoken.type in {StartTag:0, Characters:0}\n\t\t) ||\n\t\ttoken.type == 'EOF'\n\t) {\n\t\tinsertionMode = this.insertionMode;\n\t} else {\n\t\tinsertionMode = this.insertionModes.inForeignContent;\n\t}\n\tswitch(token.type) {\n\tcase 'Characters':\n\t\tvar buffer = new CharacterBuffer(token.data);\n\t\tinsertionMode.processCharacters(buffer);\n\t\tbreak;\n\tcase 'Comment':\n\t\tinsertionMode.processComment(token.data);\n\t\tbreak;\n\tcase 'StartTag':\n\t\tinsertionMode.processStartTag(token.name, token.data, token.selfClosing);\n\t\tbreak;\n\tcase 'EndTag':\n\t\tinsertionMode.processEndTag(token.name);\n\t\tbreak;\n\tcase 'Doctype':\n\t\tinsertionMode.processDoctype(token.name, token.publicId, token.systemId, token.forceQuirks);\n\t\tbreak;\n\tcase 'EOF':\n\t\tinsertionMode.processEOF();\n\t\tbreak;\n\t}\n};\nTreeBuilder.prototype.isCdataSectionAllowed = function() {\n\treturn this.openElements.length > 0 && this.currentStackItem().isForeign();\n};\nTreeBuilder.prototype.isSelfClosingFlagAcknowledged = function() {\n\treturn this.selfClosingFlagAcknowledged;\n};\n\nTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.attachNode = function(child, parent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.detachFromParent = function(node) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertHtmlElement = function(attributes) {\n\tvar root = this.createElement(\"http://www.w3.org/1999/xhtml\", 'html', attributes);\n\tthis.attachNode(root, this.document);\n\tthis.openElements.pushHtmlElement(new StackItem(\"http://www.w3.org/1999/xhtml\", 'html', attributes, root));\n\treturn root;\n};\n\nTreeBuilder.prototype.insertHeadElement = function(attributes) {\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"head\", attributes);\n\tthis.head = new StackItem(\"http://www.w3.org/1999/xhtml\", \"head\", attributes, element);\n\tthis.attachNode(element, this.openElements.top.node);\n\tthis.openElements.pushHeadElement(this.head);\n\treturn element;\n};\n\nTreeBuilder.prototype.insertBodyElement = function(attributes) {\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"body\", attributes);\n\tthis.attachNode(element, this.openElements.top.node);\n\tthis.openElements.pushBodyElement(new StackItem(\"http://www.w3.org/1999/xhtml\", \"body\", attributes, element));\n\treturn element;\n};\n\nTreeBuilder.prototype.insertIntoFosterParent = function(node) {\n\tvar tableIndex = this.openElements.findIndex('table');\n\tvar tableElement = this.openElements.item(tableIndex).node;\n\tif (tableIndex === 0)\n\t\treturn this.attachNode(node, tableElement);\n\tthis.attachNodeToFosterParent(node, tableElement, this.openElements.item(tableIndex - 1).node);\n};\n\nTreeBuilder.prototype.insertElement = function(name, attributes, namespaceURI, selfClosing) {\n\tif (!namespaceURI)\n\t\tnamespaceURI = \"http://www.w3.org/1999/xhtml\";\n\tvar element = this.createElement(namespaceURI, name, attributes);\n\tif (this.shouldFosterParent())\n\t\tthis.insertIntoFosterParent(element);\n\telse\n\t\tthis.attachNode(element, this.openElements.top.node);\n\tif (!selfClosing)\n\t\tthis.openElements.push(new StackItem(namespaceURI, name, attributes, element));\n};\n\nTreeBuilder.prototype.insertFormattingElement = function(name, attributes) {\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\");\n\tthis.appendElementToActiveFormattingElements(this.currentStackItem());\n};\n\nTreeBuilder.prototype.insertSelfClosingElement = function(name, attributes) {\n\tthis.selfClosingFlagAcknowledged = true;\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\", true);\n};\n\nTreeBuilder.prototype.insertForeignElement = function(name, attributes, namespaceURI, selfClosing) {\n\tif (selfClosing)\n\t\tthis.selfClosingFlagAcknowledged = true;\n\tthis.insertElement(name, attributes, namespaceURI, selfClosing);\n};\n\nTreeBuilder.prototype.insertComment = function(data, parent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertText = function(data) {\n\tthrow new Error(\"Not implemented\");\n};\nTreeBuilder.prototype.currentStackItem = function() {\n\treturn this.openElements.top;\n};\nTreeBuilder.prototype.popElement = function() {\n\treturn this.openElements.pop();\n};\nTreeBuilder.prototype.shouldFosterParent = function() {\n\treturn this.redirectAttachToFosterParent && this.currentStackItem().isFosterParenting();\n};\nTreeBuilder.prototype.generateImpliedEndTags = function(exclude) {\n\tvar name = this.openElements.top.localName;\n\tif (['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'].indexOf(name) != -1 && name != exclude) {\n\t\tthis.popElement();\n\t\tthis.generateImpliedEndTags(exclude);\n\t}\n};\nTreeBuilder.prototype.reconstructActiveFormattingElements = function() {\n\tif (this.activeFormattingElements.length === 0)\n\t\treturn;\n\tvar i = this.activeFormattingElements.length - 1;\n\tvar entry = this.activeFormattingElements[i];\n\tif (entry == Marker || this.openElements.contains(entry))\n\t\treturn;\n\n\twhile (entry != Marker && !this.openElements.contains(entry)) {\n\t\ti -= 1;\n\t\tentry = this.activeFormattingElements[i];\n\t\tif (!entry)\n\t\t\tbreak;\n\t}\n\n\twhile (true) {\n\t\ti += 1;\n\t\tentry = this.activeFormattingElements[i];\n\t\tthis.insertElement(entry.localName, entry.attributes);\n\t\tvar element = this.currentStackItem();\n\t\tthis.activeFormattingElements[i] = element;\n\t\tif (element == this.activeFormattingElements[this.activeFormattingElements.length -1])\n\t\t\tbreak;\n\t}\n\n};\nTreeBuilder.prototype.ensureNoahsArkCondition = function(item) {\n\tvar kNoahsArkCapacity = 3;\n\tif (this.activeFormattingElements.length < kNoahsArkCapacity)\n\t\treturn;\n\tvar candidates = [];\n\tvar newItemAttributeCount = item.attributes.length;\n\tfor (var i = this.activeFormattingElements.length - 1; i >= 0; i--) {\n\t\tvar candidate = this.activeFormattingElements[i];\n\t\tif (candidate === Marker)\n\t\t\tbreak;\n\t\tif (item.localName !== candidate.localName || item.namespaceURI !== candidate.namespaceURI)\n\t\t\tcontinue;\n\t\tif (candidate.attributes.length != newItemAttributeCount)\n\t\t\tcontinue;\n\t\tcandidates.push(candidate);\n\t}\n\tif (candidates.length < kNoahsArkCapacity)\n\t\treturn;\n\n\tvar remainingCandidates = [];\n\tvar attributes = item.attributes;\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\n\t\tfor (var j = 0; j < candidates.length; j++) {\n\t\t\tvar candidate = candidates[j];\n\t\t\tvar candidateAttribute = getAttribute(candidate, attribute.nodeName);\n\t\t\tif (candidateAttribute && candidateAttribute.nodeValue === attribute.nodeValue)\n\t\t\t\tremainingCandidates.push(candidate);\n\t\t}\n\t\tif (remainingCandidates.length < kNoahsArkCapacity)\n\t\t\treturn;\n\t\tcandidates = remainingCandidates;\n\t\tremainingCandidates = [];\n\t}\n\tfor (var i = kNoahsArkCapacity - 1; i < candidates.length; i++)\n\t\tthis.removeElementFromActiveFormattingElements(candidates[i]);\n};\nTreeBuilder.prototype.appendElementToActiveFormattingElements = function(item) {\n\tthis.ensureNoahsArkCondition(item);\n\tthis.activeFormattingElements.push(item);\n};\nTreeBuilder.prototype.removeElementFromActiveFormattingElements = function(item) {\n\tvar index = this.activeFormattingElements.indexOf(item);\n\tif (index >= 0)\n\t\tthis.activeFormattingElements.splice(index, 1);\n};\n\nTreeBuilder.prototype.elementInActiveFormattingElements = function(name) {\n\tvar els = this.activeFormattingElements;\n\tfor (var i = els.length - 1; i >= 0; i--) {\n\t\tif (els[i] == Marker) break;\n\t\tif (els[i].localName == name) return els[i];\n\t}\n\treturn false;\n};\n\nTreeBuilder.prototype.clearActiveFormattingElements = function() {\n    while (!(this.activeFormattingElements.length === 0 || this.activeFormattingElements.pop() == Marker));\n};\n\nTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\n\tthrow new Error(\"Not implemented\");\n};\nTreeBuilder.prototype.setFragmentContext = function(context) {\n\tthis.context = context;\n};\nTreeBuilder.prototype.parseError = function(code, args) {\n\tif (!this.errorHandler)\n\t\treturn;\n\tvar message = formatMessage(messages[code], args);\n\tthis.errorHandler.error(message, this.tokenizer._inputStream.location(), code);\n};\nTreeBuilder.prototype.resetInsertionMode = function() {\n\tvar last = false;\n\tvar node = null;\n\tfor (var i = this.openElements.length - 1; i >= 0; i--) {\n\t\tnode = this.openElements.item(i);\n\t\tif (i === 0) {\n\t\t\tassert.ok(this.context);\n\t\t\tlast = true;\n\t\t\tnode = new StackItem(\"http://www.w3.org/1999/xhtml\", this.context, [], null);\n\t\t}\n\n\t\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\t\tif (node.localName === 'select')\n\t\t\t\treturn this.setInsertionMode('inSelect');\n\t\t\tif (node.localName === 'td' || node.localName === 'th')\n\t\t\t\treturn this.setInsertionMode('inCell');\n\t\t\tif (node.localName === 'tr')\n\t\t\t\treturn this.setInsertionMode('inRow');\n\t\t\tif (node.localName === 'tbody' || node.localName === 'thead' || node.localName === 'tfoot')\n\t\t\t\treturn this.setInsertionMode('inTableBody');\n\t\t\tif (node.localName === 'caption')\n\t\t\t\treturn this.setInsertionMode('inCaption');\n\t\t\tif (node.localName === 'colgroup')\n\t\t\t\treturn this.setInsertionMode('inColumnGroup');\n\t\t\tif (node.localName === 'table')\n\t\t\t\treturn this.setInsertionMode('inTable');\n\t\t\tif (node.localName === 'head' && !last)\n\t\t\t\treturn this.setInsertionMode('inHead');\n\t\t\tif (node.localName === 'body')\n\t\t\t\treturn this.setInsertionMode('inBody');\n\t\t\tif (node.localName === 'frameset')\n\t\t\t\treturn this.setInsertionMode('inFrameset');\n\t\t\tif (node.localName === 'html')\n\t\t\t\tif (!this.openElements.headElement)\n\t\t\t\t\treturn this.setInsertionMode('beforeHead');\n\t\t\t\telse\n\t\t\t\t\treturn this.setInsertionMode('afterHead');\n\t\t}\n\n\t\tif (last)\n\t\t\treturn this.setInsertionMode('inBody');\n\t}\n};\n\nTreeBuilder.prototype.processGenericRCDATAStartTag = function(name, attributes) {\n\tthis.insertElement(name, attributes);\n\tthis.tokenizer.setState(Tokenizer.RCDATA);\n\tthis.originalInsertionMode = this.insertionModeName;\n\tthis.setInsertionMode('text');\n};\n\nTreeBuilder.prototype.processGenericRawTextStartTag = function(name, attributes) {\n\tthis.insertElement(name, attributes);\n\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\tthis.originalInsertionMode = this.insertionModeName;\n\tthis.setInsertionMode('text');\n};\n\nTreeBuilder.prototype.adjustMathMLAttributes = function(attributes) {\n\tattributes.forEach(function(a) {\n\t\ta.namespaceURI = \"http://www.w3.org/1998/Math/MathML\";\n\t\tif (constants.MATHMLAttributeMap[a.nodeName])\n\t\t\ta.nodeName = constants.MATHMLAttributeMap[a.nodeName];\n\t});\n\treturn attributes;\n};\n\nTreeBuilder.prototype.adjustSVGTagNameCase = function(name) {\n\treturn constants.SVGTagMap[name] || name;\n};\n\nTreeBuilder.prototype.adjustSVGAttributes = function(attributes) {\n\tattributes.forEach(function(a) {\n\t\ta.namespaceURI = \"http://www.w3.org/2000/svg\";\n\t\tif (constants.SVGAttributeMap[a.nodeName])\n\t\t\ta.nodeName = constants.SVGAttributeMap[a.nodeName];\n\t});\n\treturn attributes;\n};\n\nTreeBuilder.prototype.adjustForeignAttributes = function(attributes) {\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\t\tvar adjusted = constants.ForeignAttributeMap[attribute.nodeName];\n\t\tif (adjusted) {\n\t\t\tattribute.nodeName = adjusted.localName;\n\t\t\tattribute.prefix = adjusted.prefix;\n\t\t\tattribute.namespaceURI = adjusted.namespaceURI;\n\t\t}\n\t}\n\treturn attributes;\n};\n\nfunction formatMessage(format, args) {\n\treturn format.replace(new RegExp('{[0-9a-z-]+}', 'gi'), function(match) {\n\t\treturn args[match.slice(1, -1)] || match;\n\t});\n}\n\nexports.TreeBuilder = TreeBuilder;\n\n},\n{\"./ElementStack\":1,\"./StackItem\":4,\"./Tokenizer\":5,\"./constants\":7,\"./messages.json\":8,\"assert\":13,\"events\":16}],\n7:[function(_dereq_,module,exports){\nexports.SVGTagMap = {\n\t\"altglyph\": \"altGlyph\",\n\t\"altglyphdef\": \"altGlyphDef\",\n\t\"altglyphitem\": \"altGlyphItem\",\n\t\"animatecolor\": \"animateColor\",\n\t\"animatemotion\": \"animateMotion\",\n\t\"animatetransform\": \"animateTransform\",\n\t\"clippath\": \"clipPath\",\n\t\"feblend\": \"feBlend\",\n\t\"fecolormatrix\": \"feColorMatrix\",\n\t\"fecomponenttransfer\": \"feComponentTransfer\",\n\t\"fecomposite\": \"feComposite\",\n\t\"feconvolvematrix\": \"feConvolveMatrix\",\n\t\"fediffuselighting\": \"feDiffuseLighting\",\n\t\"fedisplacementmap\": \"feDisplacementMap\",\n\t\"fedistantlight\": \"feDistantLight\",\n\t\"feflood\": \"feFlood\",\n\t\"fefunca\": \"feFuncA\",\n\t\"fefuncb\": \"feFuncB\",\n\t\"fefuncg\": \"feFuncG\",\n\t\"fefuncr\": \"feFuncR\",\n\t\"fegaussianblur\": \"feGaussianBlur\",\n\t\"feimage\": \"feImage\",\n\t\"femerge\": \"feMerge\",\n\t\"femergenode\": \"feMergeNode\",\n\t\"femorphology\": \"feMorphology\",\n\t\"feoffset\": \"feOffset\",\n\t\"fepointlight\": \"fePointLight\",\n\t\"fespecularlighting\": \"feSpecularLighting\",\n\t\"fespotlight\": \"feSpotLight\",\n\t\"fetile\": \"feTile\",\n\t\"feturbulence\": \"feTurbulence\",\n\t\"foreignobject\": \"foreignObject\",\n\t\"glyphref\": \"glyphRef\",\n\t\"lineargradient\": \"linearGradient\",\n\t\"radialgradient\": \"radialGradient\",\n\t\"textpath\": \"textPath\"\n};\n\nexports.MATHMLAttributeMap = {\n\tdefinitionurl: 'definitionURL'\n};\n\nexports.SVGAttributeMap = {\n\tattributename:\t'attributeName',\n\tattributetype:\t'attributeType',\n\tbasefrequency:\t'baseFrequency',\n\tbaseprofile:\t'baseProfile',\n\tcalcmode:\t'calcMode',\n\tclippathunits:\t'clipPathUnits',\n\tcontentscripttype:\t'contentScriptType',\n\tcontentstyletype:\t'contentStyleType',\n\tdiffuseconstant:\t'diffuseConstant',\n\tedgemode:\t'edgeMode',\n\texternalresourcesrequired:\t'externalResourcesRequired',\n\tfilterres:\t'filterRes',\n\tfilterunits:\t'filterUnits',\n\tglyphref:\t'glyphRef',\n\tgradienttransform:\t'gradientTransform',\n\tgradientunits:\t'gradientUnits',\n\tkernelmatrix:\t'kernelMatrix',\n\tkernelunitlength:\t'kernelUnitLength',\n\tkeypoints:\t'keyPoints',\n\tkeysplines:\t'keySplines',\n\tkeytimes:\t'keyTimes',\n\tlengthadjust:\t'lengthAdjust',\n\tlimitingconeangle:\t'limitingConeAngle',\n\tmarkerheight:\t'markerHeight',\n\tmarkerunits:\t'markerUnits',\n\tmarkerwidth:\t'markerWidth',\n\tmaskcontentunits:\t'maskContentUnits',\n\tmaskunits:\t'maskUnits',\n\tnumoctaves:\t'numOctaves',\n\tpathlength:\t'pathLength',\n\tpatterncontentunits:\t'patternContentUnits',\n\tpatterntransform:\t'patternTransform',\n\tpatternunits:\t'patternUnits',\n\tpointsatx:\t'pointsAtX',\n\tpointsaty:\t'pointsAtY',\n\tpointsatz:\t'pointsAtZ',\n\tpreservealpha:\t'preserveAlpha',\n\tpreserveaspectratio:\t'preserveAspectRatio',\n\tprimitiveunits:\t'primitiveUnits',\n\trefx:\t'refX',\n\trefy:\t'refY',\n\trepeatcount:\t'repeatCount',\n\trepeatdur:\t'repeatDur',\n\trequiredextensions:\t'requiredExtensions',\n\trequiredfeatures:\t'requiredFeatures',\n\tspecularconstant:\t'specularConstant',\n\tspecularexponent:\t'specularExponent',\n\tspreadmethod:\t'spreadMethod',\n\tstartoffset:\t'startOffset',\n\tstddeviation:\t'stdDeviation',\n\tstitchtiles:\t'stitchTiles',\n\tsurfacescale:\t'surfaceScale',\n\tsystemlanguage:\t'systemLanguage',\n\ttablevalues:\t'tableValues',\n\ttargetx:\t'targetX',\n\ttargety:\t'targetY',\n\ttextlength:\t'textLength',\n\tviewbox:\t'viewBox',\n\tviewtarget:\t'viewTarget',\n\txchannelselector:\t'xChannelSelector',\n\tychannelselector:\t'yChannelSelector',\n\tzoomandpan:\t'zoomAndPan'\n};\n\nexports.ForeignAttributeMap = {\n\t\"xlink:actuate\": {prefix: \"xlink\", localName: \"actuate\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:arcrole\": {prefix: \"xlink\", localName: \"arcrole\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:href\": {prefix: \"xlink\", localName: \"href\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:role\": {prefix: \"xlink\", localName: \"role\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:show\": {prefix: \"xlink\", localName: \"show\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:title\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:type\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xml:base\": {prefix: \"xml\", localName: \"base\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:lang\": {prefix: \"xml\", localName: \"lang\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:space\": {prefix: \"xml\", localName: \"space\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xmlns\": {prefix: null, localName: \"xmlns\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n\t\"xmlns:xlink\": {prefix: \"xmlns\", localName: \"xlink\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n};\n},\n{}],\n8:[function(_dereq_,module,exports){\nmodule.exports={\n\t\"null-character\":\n\t\t\"Null character in input stream, replaced with U+FFFD.\",\n\t\"invalid-codepoint\":\n\t\t\"Invalid codepoint in stream\",\n\t\"incorrectly-placed-solidus\":\n\t\t\"Solidus (/) incorrectly placed in tag.\",\n\t\"incorrect-cr-newline-entity\":\n\t\t\"Incorrect CR newline entity, replaced with LF.\",\n\t\"illegal-windows-1252-entity\":\n\t\t\"Entity used with illegal number (windows-1252 reference).\",\n\t\"cant-convert-numeric-entity\":\n\t\t\"Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).\",\n\t\"invalid-numeric-entity-replaced\":\n\t\t\"Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.\",\n\t\"numeric-entity-without-semicolon\":\n\t\t\"Numeric entity didn't end with ';'.\",\n\t\"expected-numeric-entity-but-got-eof\":\n\t\t\"Numeric entity expected. Got end of file instead.\",\n\t\"expected-numeric-entity\":\n\t\t\"Numeric entity expected but none found.\",\n\t\"named-entity-without-semicolon\":\n\t\t\"Named entity didn't end with ';'.\",\n\t\"expected-named-entity\":\n\t\t\"Named entity expected. Got none.\",\n\t\"attributes-in-end-tag\":\n\t\t\"End tag contains unexpected attributes.\",\n\t\"self-closing-flag-on-end-tag\":\n\t\t\"End tag contains unexpected self-closing flag.\",\n\t\"bare-less-than-sign-at-eof\":\n\t\t\"End of file after <.\",\n\t\"expected-tag-name-but-got-right-bracket\":\n\t\t\"Expected tag name. Got '>' instead.\",\n\t\"expected-tag-name-but-got-question-mark\":\n\t\t\"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)\",\n\t\"expected-tag-name\":\n\t\t\"Expected tag name. Got something else instead.\",\n\t\"expected-closing-tag-but-got-right-bracket\":\n\t\t\"Expected closing tag. Got '>' instead. Ignoring '</>'.\",\n\t\"expected-closing-tag-but-got-eof\":\n\t\t\"Expected closing tag. Unexpected end of file.\",\n\t\"expected-closing-tag-but-got-char\":\n\t\t\"Expected closing tag. Unexpected character '{data}' found.\",\n\t\"eof-in-tag-name\":\n\t\t\"Unexpected end of file in the tag name.\",\n\t\"expected-attribute-name-but-got-eof\":\n\t\t\"Unexpected end of file. Expected attribute name instead.\",\n\t\"eof-in-attribute-name\":\n\t\t\"Unexpected end of file in attribute name.\",\n\t\"invalid-character-in-attribute-name\":\n\t\t\"Invalid character in attribute name.\",\n\t\"duplicate-attribute\":\n\t\t\"Dropped duplicate attribute '{name}' on tag.\",\n\t\"expected-end-of-tag-but-got-eof\":\n\t\t\"Unexpected end of file. Expected = or end of tag.\",\n\t\"expected-attribute-value-but-got-eof\":\n\t\t\"Unexpected end of file. Expected attribute value.\",\n\t\"expected-attribute-value-but-got-right-bracket\":\n\t\t\"Expected attribute value. Got '>' instead.\",\n\t\"unexpected-character-in-unquoted-attribute-value\":\n\t\t\"Unexpected character in unquoted attribute\",\n\t\"invalid-character-after-attribute-name\":\n\t\t\"Unexpected character after attribute name.\",\n\t\"unexpected-character-after-attribute-value\":\n\t\t\"Unexpected character after attribute value.\",\n\t\"eof-in-attribute-value-double-quote\":\n\t\t\"Unexpected end of file in attribute value (\\\").\",\n\t\"eof-in-attribute-value-single-quote\":\n\t\t\"Unexpected end of file in attribute value (').\",\n\t\"eof-in-attribute-value-no-quotes\":\n\t\t\"Unexpected end of file in attribute value.\",\n\t\"eof-after-attribute-value\":\n\t\t\"Unexpected end of file after attribute value.\",\n\t\"unexpected-eof-after-solidus-in-tag\":\n\t\t\"Unexpected end of file in tag. Expected >.\",\n\t\"unexpected-character-after-solidus-in-tag\":\n\t\t\"Unexpected character after / in tag. Expected >.\",\n\t\"expected-dashes-or-doctype\":\n\t\t\"Expected '--' or 'DOCTYPE'. Not found.\",\n\t\"unexpected-bang-after-double-dash-in-comment\":\n\t\t\"Unexpected ! after -- in comment.\",\n\t\"incorrect-comment\":\n\t\t\"Incorrect comment.\",\n\t\"eof-in-comment\":\n\t\t\"Unexpected end of file in comment.\",\n\t\"eof-in-comment-end-dash\":\n\t\t\"Unexpected end of file in comment (-).\",\n\t\"unexpected-dash-after-double-dash-in-comment\":\n\t\t\"Unexpected '-' after '--' found in comment.\",\n\t\"eof-in-comment-double-dash\":\n\t\t\"Unexpected end of file in comment (--).\",\n\t\"eof-in-comment-end-bang-state\":\n\t\t\"Unexpected end of file in comment.\",\n\t\"unexpected-char-in-comment\":\n\t\t\"Unexpected character in comment found.\",\n\t\"need-space-after-doctype\":\n\t\t\"No space after literal string 'DOCTYPE'.\",\n\t\"expected-doctype-name-but-got-right-bracket\":\n\t\t\"Unexpected > character. Expected DOCTYPE name.\",\n\t\"expected-doctype-name-but-got-eof\":\n\t\t\"Unexpected end of file. Expected DOCTYPE name.\",\n\t\"eof-in-doctype-name\":\n\t\t\"Unexpected end of file in DOCTYPE name.\",\n\t\"eof-in-doctype\":\n\t\t\"Unexpected end of file in DOCTYPE.\",\n\t\"expected-space-or-right-bracket-in-doctype\":\n\t\t\"Expected space or '>'. Got '{data}'.\",\n\t\"unexpected-end-of-doctype\":\n\t\t\"Unexpected end of DOCTYPE.\",\n\t\"unexpected-char-in-doctype\":\n\t\t\"Unexpected character in DOCTYPE.\",\n\t\"eof-in-bogus-doctype\":\n\t\t\"Unexpected end of file in bogus doctype.\",\n\t\"eof-in-innerhtml\":\n\t\t\"Unexpected EOF in inner html mode.\",\n\t\"unexpected-doctype\":\n\t\t\"Unexpected DOCTYPE. Ignored.\",\n\t\"non-html-root\":\n\t\t\"html needs to be the first start tag.\",\n\t\"expected-doctype-but-got-eof\":\n\t\t\"Unexpected End of file. Expected DOCTYPE.\",\n\t\"unknown-doctype\":\n\t\t\"Erroneous DOCTYPE. Expected <!DOCTYPE html>.\",\n\t\"quirky-doctype\":\n\t\t\"Quirky doctype. Expected <!DOCTYPE html>.\",\n\t\"almost-standards-doctype\":\n\t\t\"Almost standards mode doctype. Expected <!DOCTYPE html>.\",\n\t\"obsolete-doctype\":\n\t\t\"Obsolete doctype. Expected <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-chars\":\n\t\t\"Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-start-tag\":\n\t\t\"Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-end-tag\":\n\t\t\"End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"end-tag-after-implied-root\":\n\t\t\"Unexpected end tag ({name}) after the (implied) root element.\",\n\t\"expected-named-closing-tag-but-got-eof\":\n\t\t\"Unexpected end of file. Expected end tag ({name}).\",\n\t\"two-heads-are-not-better-than-one\":\n\t\t\"Unexpected start tag head in existing head. Ignored.\",\n\t\"unexpected-end-tag\":\n\t\t\"Unexpected end tag ({name}). Ignored.\",\n\t\"unexpected-implied-end-tag\":\n\t\t\"End tag {name} implied, but there were open elements.\",\n\t\"unexpected-start-tag-out-of-my-head\":\n\t\t\"Unexpected start tag ({name}) that can be in head. Moved.\",\n\t\"unexpected-start-tag\":\n\t\t\"Unexpected start tag ({name}).\",\n\t\"missing-end-tag\":\n\t\t\"Missing end tag ({name}).\",\n\t\"missing-end-tags\":\n\t\t\"Missing end tags ({name}).\",\n\t\"unexpected-start-tag-implies-end-tag\":\n\t\t\"Unexpected start tag ({startName}) implies end tag ({endName}).\",\n\t\"unexpected-start-tag-treated-as\":\n\t\t\"Unexpected start tag ({originalName}). Treated as {newName}.\",\n\t\"deprecated-tag\":\n\t\t\"Unexpected start tag {name}. Don't use it!\",\n\t\"unexpected-start-tag-ignored\":\n\t\t\"Unexpected start tag {name}. Ignored.\",\n\t\"expected-one-end-tag-but-got-another\":\n\t\t\"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).\",\n\t\"end-tag-too-early\":\n\t\t\"End tag ({name}) seen too early. Expected other end tag.\",\n\t\"end-tag-too-early-named\":\n\t\t\"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.\",\n\t\"end-tag-too-early-ignored\":\n\t\t\"End tag ({name}) seen too early. Ignored.\",\n\t\"adoption-agency-1.1\":\n\t\t\"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.\",\n\t\"adoption-agency-1.2\":\n\t\t\"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.\",\n\t\"adoption-agency-1.3\":\n\t\t\"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.\",\n\t\"adoption-agency-4.4\":\n\t\t\"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.\",\n\t\"unexpected-end-tag-treated-as\":\n\t\t\"Unexpected end tag ({originalName}). Treated as {newName}.\",\n\t\"no-end-tag\":\n\t\t\"This element ({name}) has no end tag.\",\n\t\"unexpected-implied-end-tag-in-table\":\n\t\t\"Unexpected implied end tag ({name}) in the table phase.\",\n\t\"unexpected-implied-end-tag-in-table-body\":\n\t\t\"Unexpected implied end tag ({name}) in the table body phase.\",\n\t\"unexpected-char-implies-table-voodoo\":\n\t\t\"Unexpected non-space characters in table context caused voodoo mode.\",\n\t\"unexpected-hidden-input-in-table\":\n\t\t\"Unexpected input with type hidden in table context.\",\n\t\"unexpected-form-in-table\":\n\t\t\"Unexpected form in table context.\",\n\t\"unexpected-start-tag-implies-table-voodoo\":\n\t\t\"Unexpected start tag ({name}) in table context caused voodoo mode.\",\n\t\"unexpected-end-tag-implies-table-voodoo\":\n\t\t\"Unexpected end tag ({name}) in table context caused voodoo mode.\",\n\t\"unexpected-cell-in-table-body\":\n\t\t\"Unexpected table cell start tag ({name}) in the table body phase.\",\n\t\"unexpected-cell-end-tag\":\n\t\t\"Got table cell end tag ({name}) while required end tags are missing.\",\n\t\"unexpected-end-tag-in-table-body\":\n\t\t\"Unexpected end tag ({name}) in the table body phase. Ignored.\",\n\t\"unexpected-implied-end-tag-in-table-row\":\n\t\t\"Unexpected implied end tag ({name}) in the table row phase.\",\n\t\"unexpected-end-tag-in-table-row\":\n\t\t\"Unexpected end tag ({name}) in the table row phase. Ignored.\",\n\t\"unexpected-select-in-select\":\n\t\t\"Unexpected select start tag in the select phase treated as select end tag.\",\n\t\"unexpected-input-in-select\":\n\t\t\"Unexpected input start tag in the select phase.\",\n\t\"unexpected-start-tag-in-select\":\n\t\t\"Unexpected start tag token ({name}) in the select phase. Ignored.\",\n\t\"unexpected-end-tag-in-select\":\n\t\t\"Unexpected end tag ({name}) in the select phase. Ignored.\",\n\t\"unexpected-table-element-start-tag-in-select-in-table\":\n\t\t\"Unexpected table element start tag ({name}) in the select in table phase.\",\n\t\"unexpected-table-element-end-tag-in-select-in-table\":\n\t\t\"Unexpected table element end tag ({name}) in the select in table phase.\",\n\t\"unexpected-char-after-body\":\n\t\t\"Unexpected non-space characters in the after body phase.\",\n\t\"unexpected-start-tag-after-body\":\n\t\t\"Unexpected start tag token ({name}) in the after body phase.\",\n\t\"unexpected-end-tag-after-body\":\n\t\t\"Unexpected end tag token ({name}) in the after body phase.\",\n\t\"unexpected-char-in-frameset\":\n\t\t\"Unepxected characters in the frameset phase. Characters ignored.\",\n\t\"unexpected-start-tag-in-frameset\":\n\t\t\"Unexpected start tag token ({name}) in the frameset phase. Ignored.\",\n\t\"unexpected-frameset-in-frameset-innerhtml\":\n\t\t\"Unexpected end tag token (frameset in the frameset phase (innerHTML).\",\n\t\"unexpected-end-tag-in-frameset\":\n\t\t\"Unexpected end tag token ({name}) in the frameset phase. Ignored.\",\n\t\"unexpected-char-after-frameset\":\n\t\t\"Unexpected non-space characters in the after frameset phase. Ignored.\",\n\t\"unexpected-start-tag-after-frameset\":\n\t\t\"Unexpected start tag ({name}) in the after frameset phase. Ignored.\",\n\t\"unexpected-end-tag-after-frameset\":\n\t\t\"Unexpected end tag ({name}) in the after frameset phase. Ignored.\",\n\t\"expected-eof-but-got-char\":\n\t\t\"Unexpected non-space characters. Expected end of file.\",\n\t\"expected-eof-but-got-start-tag\":\n\t\t\"Unexpected start tag ({name}). Expected end of file.\",\n\t\"expected-eof-but-got-end-tag\":\n\t\t\"Unexpected end tag ({name}). Expected end of file.\",\n\t\"unexpected-end-table-in-caption\":\n\t\t\"Unexpected end table tag in caption. Generates implied end caption.\",\n\t\"end-html-in-innerhtml\": \n\t\t\"Unexpected html end tag in inner html mode.\",\n\t\"eof-in-table\":\n\t\t\"Unexpected end of file. Expected table content.\",\n\t\"eof-in-script\":\n\t\t\"Unexpected end of file. Expected script content.\",\n\t\"non-void-element-with-trailing-solidus\":\n\t\t\"Trailing solidus not allowed on element {name}.\",\n\t\"unexpected-html-element-in-foreign-content\":\n\t\t\"HTML start tag \\\"{name}\\\" in a foreign namespace context.\",\n\t\"unexpected-start-tag-in-table\":\n\t\t\"Unexpected {name}. Expected table content.\"\n}\n},\n{}],\n9:[function(_dereq_,module,exports){\nvar SAXTreeBuilder = _dereq_('./SAXTreeBuilder').SAXTreeBuilder;\nvar Tokenizer = _dereq_('../Tokenizer').Tokenizer;\nvar TreeParser = _dereq_('./TreeParser').TreeParser;\n\nfunction SAXParser() {\n\tthis.contentHandler = null;\n\tthis._errorHandler = null;\n\tthis._treeBuilder = new SAXTreeBuilder();\n\tthis._tokenizer = new Tokenizer(this._treeBuilder);\n\tthis._scriptingEnabled = false;\n}\n\nSAXParser.prototype.parse = function(source) {\n\tthis._tokenizer.tokenize(source);\n\tvar document = this._treeBuilder.document;\n\tif (document) {\n\t\tnew TreeParser(this.contentHandler).parse(document);\n\t}\n};\n\nSAXParser.prototype.parseFragment = function(source, context) {\n\tthis._treeBuilder.setFragmentContext(context);\n\tthis._tokenizer.tokenize(source);\n\tvar fragment = this._treeBuilder.getFragment();\n\tif (fragment) {\n\t\tnew TreeParser(this.contentHandler).parse(fragment);\n\t}\n};\n\nObject.defineProperty(SAXParser.prototype, 'scriptingEnabled', {\n\tget: function() {\n\t\treturn this._scriptingEnabled;\n\t},\n\tset: function(value) {\n\t\tthis._scriptingEnabled = value;\n\t\tthis._treeBuilder.scriptingEnabled = value;\n\t}\n});\n\nObject.defineProperty(SAXParser.prototype, 'errorHandler', {\n\tget: function() {\n\t\treturn this._errorHandler;\n\t},\n\tset: function(value) {\n\t\tthis._errorHandler = value;\n\t\tthis._treeBuilder.errorHandler = value;\n\t}\n});\n\nexports.SAXParser = SAXParser;\n\n},\n{\"../Tokenizer\":5,\"./SAXTreeBuilder\":10,\"./TreeParser\":11}],\n10:[function(_dereq_,module,exports){\nvar util = _dereq_('util');\nvar TreeBuilder = _dereq_('../TreeBuilder').TreeBuilder;\n\nfunction SAXTreeBuilder() {\n\tTreeBuilder.call(this);\n}\n\nutil.inherits(SAXTreeBuilder, TreeBuilder);\n\nSAXTreeBuilder.prototype.start = function(tokenizer) {\n\tthis.document = new Document(this.tokenizer);\n};\n\nSAXTreeBuilder.prototype.end = function() {\n\tthis.document.endLocator = this.tokenizer;\n};\n\nSAXTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\n\tvar doctype = new DTD(this.tokenizer, name, publicId, systemId);\n\tdoctype.endLocator = this.tokenizer;\n\tthis.document.appendChild(doctype);\n};\n\nSAXTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\n\tvar element = new Element(this.tokenizer, namespaceURI, localName, localName, attributes || []);\n\treturn element;\n};\n\nSAXTreeBuilder.prototype.insertComment = function(data, parent) {\n\tif (!parent)\n\t\tparent = this.currentStackItem();\n\tvar comment = new Comment(this.tokenizer, data);\n\tparent.appendChild(comment);\n};\n\nSAXTreeBuilder.prototype.appendCharacters = function(parent, data) {\n\tvar text = new Characters(this.tokenizer, data);\n\tparent.appendChild(text);\n};\n\nSAXTreeBuilder.prototype.insertText = function(data) {\n\tif (this.redirectAttachToFosterParent && this.openElements.top.isFosterParenting()) {\n\t\tvar tableIndex = this.openElements.findIndex('table');\n\t\tvar tableItem = this.openElements.item(tableIndex);\n\t\tvar table = tableItem.node;\n\t\tif (tableIndex === 0) {\n\t\t\treturn this.appendCharacters(table, data);\n\t\t}\n\t\tvar text = new Characters(this.tokenizer, data);\n\t\tvar parent = table.parentNode;\n\t\tif (parent) {\n\t\t\tparent.insertBetween(text, table.previousSibling, table);\n\t\t\treturn;\n\t\t}\n\t\tvar stackParent = this.openElements.item(tableIndex - 1).node;\n\t\tstackParent.appendChild(text);\n\t\treturn;\n\t}\n\tthis.appendCharacters(this.currentStackItem().node, data);\n};\n\nSAXTreeBuilder.prototype.attachNode = function(node, parent) {\n\tparent.appendChild(node);\n};\n\nSAXTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\n\tvar parent = table.parentNode;\n\tif (parent)\n\t\tparent.insertBetween(child, table.previousSibling, table);\n\telse\n\t\tstackParent.appendChild(child);\n};\n\nSAXTreeBuilder.prototype.detachFromParent = function(element) {\n\telement.detach();\n};\n\nSAXTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\n\tnewParent.appendChildren(oldParent.firstChild);\n};\n\nSAXTreeBuilder.prototype.getFragment = function() {\n\tvar fragment = new DocumentFragment();\n\tthis.reparentChildren(this.openElements.rootNode, fragment);\n\treturn fragment;\n};\n\nfunction getAttribute(node, name) {\n\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\tvar attribute = node.attributes[i];\n\t\tif (attribute.nodeName === name)\n\t\t\treturn attribute.nodeValue;\n\t}\n}\n\nSAXTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\t\tif (!getAttribute(element, attribute.nodeName))\n\t\t\telement.attributes.push(attribute);\n\t}\n};\n\nvar NodeType = {\n\tCDATA: 1,\n\tCHARACTERS: 2,\n\tCOMMENT: 3,\n\tDOCUMENT: 4,\n\tDOCUMENT_FRAGMENT: 5,\n\tDTD: 6,\n\tELEMENT: 7,\n\tENTITY: 8,\n\tIGNORABLE_WHITESPACE: 9,\n\tPROCESSING_INSTRUCTION: 10,\n\tSKIPPED_ENTITY: 11\n};\nfunction Node(locator) {\n\tif (!locator) {\n\t\tthis.columnNumber = -1;\n\t\tthis.lineNumber = -1;\n\t} else {\n\t\tthis.columnNumber = locator.columnNumber;\n\t\tthis.lineNumber = locator.lineNumber;\n\t}\n\tthis.parentNode = null;\n\tthis.nextSibling = null;\n\tthis.firstChild = null;\n}\nNode.prototype.visit = function(treeParser) {\n\tthrow new Error(\"Not Implemented\");\n};\nNode.prototype.revisit = function(treeParser) {\n\treturn;\n};\nNode.prototype.detach = function() {\n\tif (this.parentNode !== null) {\n\t\tthis.parentNode.removeChild(this);\n\t\tthis.parentNode = null;\n\t}\n};\n\nObject.defineProperty(Node.prototype, 'previousSibling', {\n\tget: function() {\n\t\tvar prev = null;\n\t\tvar next = this.parentNode.firstChild;\n\t\tfor(;;) {\n\t\t\tif (this == next) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t}\n});\n\n\nfunction ParentNode(locator) {\n\tNode.call(this, locator);\n\tthis.lastChild = null;\n\tthis._endLocator = null;\n}\n\nParentNode.prototype = Object.create(Node.prototype);\nParentNode.prototype.insertBefore = function(child, sibling) {\n\tif (!sibling) {\n\t\treturn this.appendChild(child);\n\t}\n\tchild.detach();\n\tchild.parentNode = this;\n\tif (this.firstChild == sibling) {\n\t\tchild.nextSibling = sibling;\n\t\tthis.firstChild = child;\n\t} else {\n\t\tvar prev = this.firstChild;\n\t\tvar next = this.firstChild.nextSibling;\n\t\twhile (next != sibling) {\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t\tprev.nextSibling = child;\n\t\tchild.nextSibling = next;\n\t}\n\treturn child;\n};\n\nParentNode.prototype.insertBetween = function(child, prev, next) {\n\tif (!next) {\n\t\treturn this.appendChild(child);\n\t}\n\tchild.detach();\n\tchild.parentNode = this;\n\tchild.nextSibling = next;\n\tif (!prev) {\n\t\tfirstChild = child;\n\t} else {\n\t\tprev.nextSibling = child;\n\t}\n\treturn child;\n};\nParentNode.prototype.appendChild = function(child) {\n\tchild.detach();\n\tchild.parentNode = this;\n\tif (!this.firstChild) {\n\t\tthis.firstChild = child;\n\t} else {\n\t\tthis.lastChild.nextSibling = child;\n\t}\n\tthis.lastChild = child;\n\treturn child;\n};\nParentNode.prototype.appendChildren = function(parent) {\n\tvar child = parent.firstChild;\n\tif (!child) {\n\t\treturn;\n\t}\n\tvar another = parent;\n\tif (!this.firstChild) {\n\t\tthis.firstChild = child;\n\t} else {\n\t\tthis.lastChild.nextSibling = child;\n\t}\n\tthis.lastChild = another.lastChild;\n\tdo {\n\t\tchild.parentNode = this;\n\t} while ((child = child.nextSibling));\n\tanother.firstChild = null;\n\tanother.lastChild = null;\n};\nParentNode.prototype.removeChild = function(node) {\n\tif (this.firstChild == node) {\n\t\tthis.firstChild = node.nextSibling;\n\t\tif (this.lastChild == node) {\n\t\t\tthis.lastChild = null;\n\t\t}\n\t} else {\n\t\tvar prev = this.firstChild;\n\t\tvar next = this.firstChild.nextSibling;\n\t\twhile (next != node) {\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t\tprev.nextSibling = node.nextSibling;\n\t\tif (this.lastChild == node) {\n\t\t\tthis.lastChild = prev;\n\t\t}\n\t}\n\tnode.parentNode = null;\n\treturn node;\n};\n\nObject.defineProperty(ParentNode.prototype, 'endLocator', {\n\tget: function() {\n\t\treturn this._endLocator;\n\t},\n\tset: function(endLocator) {\n\t\tthis._endLocator = {\n\t\t\tlineNumber: endLocator.lineNumber,\n\t\t\tcolumnNumber: endLocator.columnNumber\n\t\t};\n\t}\n});\nfunction Document (locator) {\n\tParentNode.call(this, locator);\n\tthis.nodeType = NodeType.DOCUMENT;\n}\n\nDocument.prototype = Object.create(ParentNode.prototype);\nDocument.prototype.visit = function(treeParser) {\n\ttreeParser.startDocument(this);\n};\nDocument.prototype.revisit = function(treeParser) {\n\ttreeParser.endDocument(this.endLocator);\n};\nfunction DocumentFragment() {\n\tParentNode.call(this, new Locator());\n\tthis.nodeType = NodeType.DOCUMENT_FRAGMENT;\n}\n\nDocumentFragment.prototype = Object.create(ParentNode.prototype);\nDocumentFragment.prototype.visit = function(treeParser) {\n};\nfunction Element(locator, uri, localName, qName, atts, prefixMappings) {\n\tParentNode.call(this, locator);\n\tthis.uri = uri;\n\tthis.localName = localName;\n\tthis.qName = qName;\n\tthis.attributes = atts;\n\tthis.prefixMappings = prefixMappings;\n\tthis.nodeType = NodeType.ELEMENT;\n}\n\nElement.prototype = Object.create(ParentNode.prototype);\nElement.prototype.visit = function(treeParser) {\n\tif (this.prefixMappings) {\n\t\tfor (var key in prefixMappings) {\n\t\t\tvar mapping = prefixMappings[key];\n\t\t\ttreeParser.startPrefixMapping(mapping.getPrefix(),\n\t\t\t\t\tmapping.getUri(), this);\n\t\t}\n\t}\n\ttreeParser.startElement(this.uri, this.localName, this.qName, this.attributes, this);\n};\nElement.prototype.revisit = function(treeParser) {\n\ttreeParser.endElement(this.uri, this.localName, this.qName, this.endLocator);\n\tif (this.prefixMappings) {\n\t\tfor (var key in prefixMappings) {\n\t\t\tvar mapping = prefixMappings[key];\n\t\t\ttreeParser.endPrefixMapping(mapping.getPrefix(), this.endLocator);\n\t\t}\n\t}\n};\nfunction Characters(locator, data){\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.CHARACTERS;\n}\n\nCharacters.prototype = Object.create(Node.prototype);\nCharacters.prototype.visit = function (treeParser) {\n\ttreeParser.characters(this.data, 0, this.data.length, this);\n};\nfunction IgnorableWhitespace(locator, data) {\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.IGNORABLE_WHITESPACE;\n}\n\nIgnorableWhitespace.prototype = Object.create(Node.prototype);\nIgnorableWhitespace.prototype.visit = function(treeParser) {\n\ttreeParser.ignorableWhitespace(this.data, 0, this.data.length, this);\n};\nfunction Comment(locator, data) {\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.COMMENT;\n}\n\nComment.prototype = Object.create(Node.prototype);\nComment.prototype.visit = function(treeParser) {\n\ttreeParser.comment(this.data, 0, this.data.length, this);\n};\nfunction CDATA(locator) {\n\tParentNode.call(this, locator);\n\tthis.nodeType = NodeType.CDATA;\n}\n\nCDATA.prototype = Object.create(ParentNode.prototype);\nCDATA.prototype.visit = function(treeParser) {\n\ttreeParser.startCDATA(this);\n};\nCDATA.prototype.revisit = function(treeParser) {\n\ttreeParser.endCDATA(this.endLocator);\n};\nfunction Entity(name) {\n\tParentNode.call(this);\n\tthis.name = name;\n\tthis.nodeType = NodeType.ENTITY;\n}\n\nEntity.prototype = Object.create(ParentNode.prototype);\nEntity.prototype.visit = function(treeParser) {\n\ttreeParser.startEntity(this.name, this);\n};\nEntity.prototype.revisit = function(treeParser) {\n\ttreeParser.endEntity(this.name);\n};\n\nfunction SkippedEntity(name) {\n\tNode.call(this);\n\tthis.name = name;\n\tthis.nodeType = NodeType.SKIPPED_ENTITY;\n}\n\nSkippedEntity.prototype = Object.create(Node.prototype);\nSkippedEntity.prototype.visit = function(treeParser) {\n\ttreeParser.skippedEntity(this.name, this);\n};\nfunction ProcessingInstruction(target, data) {\n\tNode.call(this);\n\tthis.target = target;\n\tthis.data = data;\n}\n\nProcessingInstruction.prototype = Object.create(Node.prototype);\nProcessingInstruction.prototype.visit = function(treeParser) {\n\ttreeParser.processingInstruction(this.target, this.data, this);\n};\nProcessingInstruction.prototype.getNodeType = function() {\n\treturn NodeType.PROCESSING_INSTRUCTION;\n};\nfunction DTD(name, publicIdentifier, systemIdentifier) {\n\tParentNode.call(this);\n\tthis.name = name;\n\tthis.publicIdentifier = publicIdentifier;\n\tthis.systemIdentifier = systemIdentifier;\n\tthis.nodeType = NodeType.DTD;\n}\n\nDTD.prototype = Object.create(ParentNode.prototype);\nDTD.prototype.visit = function(treeParser) {\n\ttreeParser.startDTD(this.name, this.publicIdentifier, this.systemIdentifier, this);\n};\nDTD.prototype.revisit = function(treeParser) {\n\ttreeParser.endDTD();\n};\n\nexports.SAXTreeBuilder = SAXTreeBuilder;\n\n},\n{\"../TreeBuilder\":6,\"util\":20}],\n11:[function(_dereq_,module,exports){\nfunction TreeParser(contentHandler, lexicalHandler){\n\tthis.contentHandler;\n\tthis.lexicalHandler;\n\tthis.locatorDelegate;\n\n\tif (!contentHandler) {\n\t\tthrow new IllegalArgumentException(\"contentHandler was null.\");\n\t}\n\tthis.contentHandler = contentHandler;\n\tif (!lexicalHandler) {\n\t\tthis.lexicalHandler = new NullLexicalHandler();\n\t} else {\n\t\tthis.lexicalHandler = lexicalHandler;\n\t}\n}\nTreeParser.prototype.parse = function(node) {\n\tthis.contentHandler.documentLocator = this;\n\tvar current = node;\n\tvar next;\n\tfor (;;) {\n\t\tcurrent.visit(this);\n\t\tif (next = current.firstChild) {\n\t\t\tcurrent = next;\n\t\t\tcontinue;\n\t\t}\n\t\tfor (;;) {\n\t\t\tcurrent.revisit(this);\n\t\t\tif (current == node) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (next = current.nextSibling) {\n\t\t\t\tcurrent = next;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent = current.parentNode;\n\t\t}\n\t}\n};\nTreeParser.prototype.characters = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.characters(ch, start, length);\n};\nTreeParser.prototype.endDocument = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endDocument();\n};\nTreeParser.prototype.endElement = function(uri, localName, qName, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endElement(uri, localName, qName);\n};\nTreeParser.prototype.endPrefixMapping = function(prefix, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endPrefixMapping(prefix);\n};\nTreeParser.prototype.ignorableWhitespace = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.ignorableWhitespace(ch, start, length);\n};\nTreeParser.prototype.processingInstruction = function(target, data, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.processingInstruction(target, data);\n};\nTreeParser.prototype.skippedEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.skippedEntity(name);\n};\nTreeParser.prototype.startDocument = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startDocument();\n};\nTreeParser.prototype.startElement = function(uri, localName, qName, atts, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startElement(uri, localName, qName, atts);\n};\nTreeParser.prototype.startPrefixMapping = function(prefix, uri, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startPrefixMapping(prefix, uri);\n};\nTreeParser.prototype.comment = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.comment(ch, start, length);\n};\nTreeParser.prototype.endCDATA = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endCDATA();\n};\nTreeParser.prototype.endDTD = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endDTD();\n};\nTreeParser.prototype.endEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endEntity(name);\n};\nTreeParser.prototype.startCDATA = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startCDATA();\n};\nTreeParser.prototype.startDTD = function(name, publicId, systemId, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startDTD(name, publicId, systemId);\n};\nTreeParser.prototype.startEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startEntity(name);\n};\n\nObject.defineProperty(TreeParser.prototype, 'columnNumber', {\n\tget: function() {\n\t\tif (!this.locatorDelegate)\n\t\t\treturn -1;\n\t\telse\n\t\t\treturn this.locatorDelegate.columnNumber;\n\t}\n});\n\nObject.defineProperty(TreeParser.prototype, 'lineNumber', {\n\tget: function() {\n\t\tif (!this.locatorDelegate)\n\t\t\treturn -1;\n\t\telse\n\t\t\treturn this.locatorDelegate.lineNumber;\n\t}\n});\nfunction NullLexicalHandler() {\n\n}\n\nNullLexicalHandler.prototype.comment = function() {};\nNullLexicalHandler.prototype.endCDATA = function() {};\nNullLexicalHandler.prototype.endDTD = function() {};\nNullLexicalHandler.prototype.endEntity = function() {};\nNullLexicalHandler.prototype.startCDATA = function() {};\nNullLexicalHandler.prototype.startDTD = function() {};\nNullLexicalHandler.prototype.startEntity = function() {};\n\nexports.TreeParser = TreeParser;\n\n},\n{}],\n12:[function(_dereq_,module,exports){\nmodule.exports = {\n\t\"Aacute;\": \"\\u00C1\",\n\t\"Aacute\": \"\\u00C1\",\n\t\"aacute;\": \"\\u00E1\",\n\t\"aacute\": \"\\u00E1\",\n\t\"Abreve;\": \"\\u0102\",\n\t\"abreve;\": \"\\u0103\",\n\t\"ac;\": \"\\u223E\",\n\t\"acd;\": \"\\u223F\",\n\t\"acE;\": \"\\u223E\\u0333\",\n\t\"Acirc;\": \"\\u00C2\",\n\t\"Acirc\": \"\\u00C2\",\n\t\"acirc;\": \"\\u00E2\",\n\t\"acirc\": \"\\u00E2\",\n\t\"acute;\": \"\\u00B4\",\n\t\"acute\": \"\\u00B4\",\n\t\"Acy;\": \"\\u0410\",\n\t\"acy;\": \"\\u0430\",\n\t\"AElig;\": \"\\u00C6\",\n\t\"AElig\": \"\\u00C6\",\n\t\"aelig;\": \"\\u00E6\",\n\t\"aelig\": \"\\u00E6\",\n\t\"af;\": \"\\u2061\",\n\t\"Afr;\": \"\\uD835\\uDD04\",\n\t\"afr;\": \"\\uD835\\uDD1E\",\n\t\"Agrave;\": \"\\u00C0\",\n\t\"Agrave\": \"\\u00C0\",\n\t\"agrave;\": \"\\u00E0\",\n\t\"agrave\": \"\\u00E0\",\n\t\"alefsym;\": \"\\u2135\",\n\t\"aleph;\": \"\\u2135\",\n\t\"Alpha;\": \"\\u0391\",\n\t\"alpha;\": \"\\u03B1\",\n\t\"Amacr;\": \"\\u0100\",\n\t\"amacr;\": \"\\u0101\",\n\t\"amalg;\": \"\\u2A3F\",\n\t\"amp;\": \"\\u0026\",\n\t\"amp\": \"\\u0026\",\n\t\"AMP;\": \"\\u0026\",\n\t\"AMP\": \"\\u0026\",\n\t\"andand;\": \"\\u2A55\",\n\t\"And;\": \"\\u2A53\",\n\t\"and;\": \"\\u2227\",\n\t\"andd;\": \"\\u2A5C\",\n\t\"andslope;\": \"\\u2A58\",\n\t\"andv;\": \"\\u2A5A\",\n\t\"ang;\": \"\\u2220\",\n\t\"ange;\": \"\\u29A4\",\n\t\"angle;\": \"\\u2220\",\n\t\"angmsdaa;\": \"\\u29A8\",\n\t\"angmsdab;\": \"\\u29A9\",\n\t\"angmsdac;\": \"\\u29AA\",\n\t\"angmsdad;\": \"\\u29AB\",\n\t\"angmsdae;\": \"\\u29AC\",\n\t\"angmsdaf;\": \"\\u29AD\",\n\t\"angmsdag;\": \"\\u29AE\",\n\t\"angmsdah;\": \"\\u29AF\",\n\t\"angmsd;\": \"\\u2221\",\n\t\"angrt;\": \"\\u221F\",\n\t\"angrtvb;\": \"\\u22BE\",\n\t\"angrtvbd;\": \"\\u299D\",\n\t\"angsph;\": \"\\u2222\",\n\t\"angst;\": \"\\u00C5\",\n\t\"angzarr;\": \"\\u237C\",\n\t\"Aogon;\": \"\\u0104\",\n\t\"aogon;\": \"\\u0105\",\n\t\"Aopf;\": \"\\uD835\\uDD38\",\n\t\"aopf;\": \"\\uD835\\uDD52\",\n\t\"apacir;\": \"\\u2A6F\",\n\t\"ap;\": \"\\u2248\",\n\t\"apE;\": \"\\u2A70\",\n\t\"ape;\": \"\\u224A\",\n\t\"apid;\": \"\\u224B\",\n\t\"apos;\": \"\\u0027\",\n\t\"ApplyFunction;\": \"\\u2061\",\n\t\"approx;\": \"\\u2248\",\n\t\"approxeq;\": \"\\u224A\",\n\t\"Aring;\": \"\\u00C5\",\n\t\"Aring\": \"\\u00C5\",\n\t\"aring;\": \"\\u00E5\",\n\t\"aring\": \"\\u00E5\",\n\t\"Ascr;\": \"\\uD835\\uDC9C\",\n\t\"ascr;\": \"\\uD835\\uDCB6\",\n\t\"Assign;\": \"\\u2254\",\n\t\"ast;\": \"\\u002A\",\n\t\"asymp;\": \"\\u2248\",\n\t\"asympeq;\": \"\\u224D\",\n\t\"Atilde;\": \"\\u00C3\",\n\t\"Atilde\": \"\\u00C3\",\n\t\"atilde;\": \"\\u00E3\",\n\t\"atilde\": \"\\u00E3\",\n\t\"Auml;\": \"\\u00C4\",\n\t\"Auml\": \"\\u00C4\",\n\t\"auml;\": \"\\u00E4\",\n\t\"auml\": \"\\u00E4\",\n\t\"awconint;\": \"\\u2233\",\n\t\"awint;\": \"\\u2A11\",\n\t\"backcong;\": \"\\u224C\",\n\t\"backepsilon;\": \"\\u03F6\",\n\t\"backprime;\": \"\\u2035\",\n\t\"backsim;\": \"\\u223D\",\n\t\"backsimeq;\": \"\\u22CD\",\n\t\"Backslash;\": \"\\u2216\",\n\t\"Barv;\": \"\\u2AE7\",\n\t\"barvee;\": \"\\u22BD\",\n\t\"barwed;\": \"\\u2305\",\n\t\"Barwed;\": \"\\u2306\",\n\t\"barwedge;\": \"\\u2305\",\n\t\"bbrk;\": \"\\u23B5\",\n\t\"bbrktbrk;\": \"\\u23B6\",\n\t\"bcong;\": \"\\u224C\",\n\t\"Bcy;\": \"\\u0411\",\n\t\"bcy;\": \"\\u0431\",\n\t\"bdquo;\": \"\\u201E\",\n\t\"becaus;\": \"\\u2235\",\n\t\"because;\": \"\\u2235\",\n\t\"Because;\": \"\\u2235\",\n\t\"bemptyv;\": \"\\u29B0\",\n\t\"bepsi;\": \"\\u03F6\",\n\t\"bernou;\": \"\\u212C\",\n\t\"Bernoullis;\": \"\\u212C\",\n\t\"Beta;\": \"\\u0392\",\n\t\"beta;\": \"\\u03B2\",\n\t\"beth;\": \"\\u2136\",\n\t\"between;\": \"\\u226C\",\n\t\"Bfr;\": \"\\uD835\\uDD05\",\n\t\"bfr;\": \"\\uD835\\uDD1F\",\n\t\"bigcap;\": \"\\u22C2\",\n\t\"bigcirc;\": \"\\u25EF\",\n\t\"bigcup;\": \"\\u22C3\",\n\t\"bigodot;\": \"\\u2A00\",\n\t\"bigoplus;\": \"\\u2A01\",\n\t\"bigotimes;\": \"\\u2A02\",\n\t\"bigsqcup;\": \"\\u2A06\",\n\t\"bigstar;\": \"\\u2605\",\n\t\"bigtriangledown;\": \"\\u25BD\",\n\t\"bigtriangleup;\": \"\\u25B3\",\n\t\"biguplus;\": \"\\u2A04\",\n\t\"bigvee;\": \"\\u22C1\",\n\t\"bigwedge;\": \"\\u22C0\",\n\t\"bkarow;\": \"\\u290D\",\n\t\"blacklozenge;\": \"\\u29EB\",\n\t\"blacksquare;\": \"\\u25AA\",\n\t\"blacktriangle;\": \"\\u25B4\",\n\t\"blacktriangledown;\": \"\\u25BE\",\n\t\"blacktriangleleft;\": \"\\u25C2\",\n\t\"blacktriangleright;\": \"\\u25B8\",\n\t\"blank;\": \"\\u2423\",\n\t\"blk12;\": \"\\u2592\",\n\t\"blk14;\": \"\\u2591\",\n\t\"blk34;\": \"\\u2593\",\n\t\"block;\": \"\\u2588\",\n\t\"bne;\": \"\\u003D\\u20E5\",\n\t\"bnequiv;\": \"\\u2261\\u20E5\",\n\t\"bNot;\": \"\\u2AED\",\n\t\"bnot;\": \"\\u2310\",\n\t\"Bopf;\": \"\\uD835\\uDD39\",\n\t\"bopf;\": \"\\uD835\\uDD53\",\n\t\"bot;\": \"\\u22A5\",\n\t\"bottom;\": \"\\u22A5\",\n\t\"bowtie;\": \"\\u22C8\",\n\t\"boxbox;\": \"\\u29C9\",\n\t\"boxdl;\": \"\\u2510\",\n\t\"boxdL;\": \"\\u2555\",\n\t\"boxDl;\": \"\\u2556\",\n\t\"boxDL;\": \"\\u2557\",\n\t\"boxdr;\": \"\\u250C\",\n\t\"boxdR;\": \"\\u2552\",\n\t\"boxDr;\": \"\\u2553\",\n\t\"boxDR;\": \"\\u2554\",\n\t\"boxh;\": \"\\u2500\",\n\t\"boxH;\": \"\\u2550\",\n\t\"boxhd;\": \"\\u252C\",\n\t\"boxHd;\": \"\\u2564\",\n\t\"boxhD;\": \"\\u2565\",\n\t\"boxHD;\": \"\\u2566\",\n\t\"boxhu;\": \"\\u2534\",\n\t\"boxHu;\": \"\\u2567\",\n\t\"boxhU;\": \"\\u2568\",\n\t\"boxHU;\": \"\\u2569\",\n\t\"boxminus;\": \"\\u229F\",\n\t\"boxplus;\": \"\\u229E\",\n\t\"boxtimes;\": \"\\u22A0\",\n\t\"boxul;\": \"\\u2518\",\n\t\"boxuL;\": \"\\u255B\",\n\t\"boxUl;\": \"\\u255C\",\n\t\"boxUL;\": \"\\u255D\",\n\t\"boxur;\": \"\\u2514\",\n\t\"boxuR;\": \"\\u2558\",\n\t\"boxUr;\": \"\\u2559\",\n\t\"boxUR;\": \"\\u255A\",\n\t\"boxv;\": \"\\u2502\",\n\t\"boxV;\": \"\\u2551\",\n\t\"boxvh;\": \"\\u253C\",\n\t\"boxvH;\": \"\\u256A\",\n\t\"boxVh;\": \"\\u256B\",\n\t\"boxVH;\": \"\\u256C\",\n\t\"boxvl;\": \"\\u2524\",\n\t\"boxvL;\": \"\\u2561\",\n\t\"boxVl;\": \"\\u2562\",\n\t\"boxVL;\": \"\\u2563\",\n\t\"boxvr;\": \"\\u251C\",\n\t\"boxvR;\": \"\\u255E\",\n\t\"boxVr;\": \"\\u255F\",\n\t\"boxVR;\": \"\\u2560\",\n\t\"bprime;\": \"\\u2035\",\n\t\"breve;\": \"\\u02D8\",\n\t\"Breve;\": \"\\u02D8\",\n\t\"brvbar;\": \"\\u00A6\",\n\t\"brvbar\": \"\\u00A6\",\n\t\"bscr;\": \"\\uD835\\uDCB7\",\n\t\"Bscr;\": \"\\u212C\",\n\t\"bsemi;\": \"\\u204F\",\n\t\"bsim;\": \"\\u223D\",\n\t\"bsime;\": \"\\u22CD\",\n\t\"bsolb;\": \"\\u29C5\",\n\t\"bsol;\": \"\\u005C\",\n\t\"bsolhsub;\": \"\\u27C8\",\n\t\"bull;\": \"\\u2022\",\n\t\"bullet;\": \"\\u2022\",\n\t\"bump;\": \"\\u224E\",\n\t\"bumpE;\": \"\\u2AAE\",\n\t\"bumpe;\": \"\\u224F\",\n\t\"Bumpeq;\": \"\\u224E\",\n\t\"bumpeq;\": \"\\u224F\",\n\t\"Cacute;\": \"\\u0106\",\n\t\"cacute;\": \"\\u0107\",\n\t\"capand;\": \"\\u2A44\",\n\t\"capbrcup;\": \"\\u2A49\",\n\t\"capcap;\": \"\\u2A4B\",\n\t\"cap;\": \"\\u2229\",\n\t\"Cap;\": \"\\u22D2\",\n\t\"capcup;\": \"\\u2A47\",\n\t\"capdot;\": \"\\u2A40\",\n\t\"CapitalDifferentialD;\": \"\\u2145\",\n\t\"caps;\": \"\\u2229\\uFE00\",\n\t\"caret;\": \"\\u2041\",\n\t\"caron;\": \"\\u02C7\",\n\t\"Cayleys;\": \"\\u212D\",\n\t\"ccaps;\": \"\\u2A4D\",\n\t\"Ccaron;\": \"\\u010C\",\n\t\"ccaron;\": \"\\u010D\",\n\t\"Ccedil;\": \"\\u00C7\",\n\t\"Ccedil\": \"\\u00C7\",\n\t\"ccedil;\": \"\\u00E7\",\n\t\"ccedil\": \"\\u00E7\",\n\t\"Ccirc;\": \"\\u0108\",\n\t\"ccirc;\": \"\\u0109\",\n\t\"Cconint;\": \"\\u2230\",\n\t\"ccups;\": \"\\u2A4C\",\n\t\"ccupssm;\": \"\\u2A50\",\n\t\"Cdot;\": \"\\u010A\",\n\t\"cdot;\": \"\\u010B\",\n\t\"cedil;\": \"\\u00B8\",\n\t\"cedil\": \"\\u00B8\",\n\t\"Cedilla;\": \"\\u00B8\",\n\t\"cemptyv;\": \"\\u29B2\",\n\t\"cent;\": \"\\u00A2\",\n\t\"cent\": \"\\u00A2\",\n\t\"centerdot;\": \"\\u00B7\",\n\t\"CenterDot;\": \"\\u00B7\",\n\t\"cfr;\": \"\\uD835\\uDD20\",\n\t\"Cfr;\": \"\\u212D\",\n\t\"CHcy;\": \"\\u0427\",\n\t\"chcy;\": \"\\u0447\",\n\t\"check;\": \"\\u2713\",\n\t\"checkmark;\": \"\\u2713\",\n\t\"Chi;\": \"\\u03A7\",\n\t\"chi;\": \"\\u03C7\",\n\t\"circ;\": \"\\u02C6\",\n\t\"circeq;\": \"\\u2257\",\n\t\"circlearrowleft;\": \"\\u21BA\",\n\t\"circlearrowright;\": \"\\u21BB\",\n\t\"circledast;\": \"\\u229B\",\n\t\"circledcirc;\": \"\\u229A\",\n\t\"circleddash;\": \"\\u229D\",\n\t\"CircleDot;\": \"\\u2299\",\n\t\"circledR;\": \"\\u00AE\",\n\t\"circledS;\": \"\\u24C8\",\n\t\"CircleMinus;\": \"\\u2296\",\n\t\"CirclePlus;\": \"\\u2295\",\n\t\"CircleTimes;\": \"\\u2297\",\n\t\"cir;\": \"\\u25CB\",\n\t\"cirE;\": \"\\u29C3\",\n\t\"cire;\": \"\\u2257\",\n\t\"cirfnint;\": \"\\u2A10\",\n\t\"cirmid;\": \"\\u2AEF\",\n\t\"cirscir;\": \"\\u29C2\",\n\t\"ClockwiseContourIntegral;\": \"\\u2232\",\n\t\"CloseCurlyDoubleQuote;\": \"\\u201D\",\n\t\"CloseCurlyQuote;\": \"\\u2019\",\n\t\"clubs;\": \"\\u2663\",\n\t\"clubsuit;\": \"\\u2663\",\n\t\"colon;\": \"\\u003A\",\n\t\"Colon;\": \"\\u2237\",\n\t\"Colone;\": \"\\u2A74\",\n\t\"colone;\": \"\\u2254\",\n\t\"coloneq;\": \"\\u2254\",\n\t\"comma;\": \"\\u002C\",\n\t\"commat;\": \"\\u0040\",\n\t\"comp;\": \"\\u2201\",\n\t\"compfn;\": \"\\u2218\",\n\t\"complement;\": \"\\u2201\",\n\t\"complexes;\": \"\\u2102\",\n\t\"cong;\": \"\\u2245\",\n\t\"congdot;\": \"\\u2A6D\",\n\t\"Congruent;\": \"\\u2261\",\n\t\"conint;\": \"\\u222E\",\n\t\"Conint;\": \"\\u222F\",\n\t\"ContourIntegral;\": \"\\u222E\",\n\t\"copf;\": \"\\uD835\\uDD54\",\n\t\"Copf;\": \"\\u2102\",\n\t\"coprod;\": \"\\u2210\",\n\t\"Coproduct;\": \"\\u2210\",\n\t\"copy;\": \"\\u00A9\",\n\t\"copy\": \"\\u00A9\",\n\t\"COPY;\": \"\\u00A9\",\n\t\"COPY\": \"\\u00A9\",\n\t\"copysr;\": \"\\u2117\",\n\t\"CounterClockwiseContourIntegral;\": \"\\u2233\",\n\t\"crarr;\": \"\\u21B5\",\n\t\"cross;\": \"\\u2717\",\n\t\"Cross;\": \"\\u2A2F\",\n\t\"Cscr;\": \"\\uD835\\uDC9E\",\n\t\"cscr;\": \"\\uD835\\uDCB8\",\n\t\"csub;\": \"\\u2ACF\",\n\t\"csube;\": \"\\u2AD1\",\n\t\"csup;\": \"\\u2AD0\",\n\t\"csupe;\": \"\\u2AD2\",\n\t\"ctdot;\": \"\\u22EF\",\n\t\"cudarrl;\": \"\\u2938\",\n\t\"cudarrr;\": \"\\u2935\",\n\t\"cuepr;\": \"\\u22DE\",\n\t\"cuesc;\": \"\\u22DF\",\n\t\"cularr;\": \"\\u21B6\",\n\t\"cularrp;\": \"\\u293D\",\n\t\"cupbrcap;\": \"\\u2A48\",\n\t\"cupcap;\": \"\\u2A46\",\n\t\"CupCap;\": \"\\u224D\",\n\t\"cup;\": \"\\u222A\",\n\t\"Cup;\": \"\\u22D3\",\n\t\"cupcup;\": \"\\u2A4A\",\n\t\"cupdot;\": \"\\u228D\",\n\t\"cupor;\": \"\\u2A45\",\n\t\"cups;\": \"\\u222A\\uFE00\",\n\t\"curarr;\": \"\\u21B7\",\n\t\"curarrm;\": \"\\u293C\",\n\t\"curlyeqprec;\": \"\\u22DE\",\n\t\"curlyeqsucc;\": \"\\u22DF\",\n\t\"curlyvee;\": \"\\u22CE\",\n\t\"curlywedge;\": \"\\u22CF\",\n\t\"curren;\": \"\\u00A4\",\n\t\"curren\": \"\\u00A4\",\n\t\"curvearrowleft;\": \"\\u21B6\",\n\t\"curvearrowright;\": \"\\u21B7\",\n\t\"cuvee;\": \"\\u22CE\",\n\t\"cuwed;\": \"\\u22CF\",\n\t\"cwconint;\": \"\\u2232\",\n\t\"cwint;\": \"\\u2231\",\n\t\"cylcty;\": \"\\u232D\",\n\t\"dagger;\": \"\\u2020\",\n\t\"Dagger;\": \"\\u2021\",\n\t\"daleth;\": \"\\u2138\",\n\t\"darr;\": \"\\u2193\",\n\t\"Darr;\": \"\\u21A1\",\n\t\"dArr;\": \"\\u21D3\",\n\t\"dash;\": \"\\u2010\",\n\t\"Dashv;\": \"\\u2AE4\",\n\t\"dashv;\": \"\\u22A3\",\n\t\"dbkarow;\": \"\\u290F\",\n\t\"dblac;\": \"\\u02DD\",\n\t\"Dcaron;\": \"\\u010E\",\n\t\"dcaron;\": \"\\u010F\",\n\t\"Dcy;\": \"\\u0414\",\n\t\"dcy;\": \"\\u0434\",\n\t\"ddagger;\": \"\\u2021\",\n\t\"ddarr;\": \"\\u21CA\",\n\t\"DD;\": \"\\u2145\",\n\t\"dd;\": \"\\u2146\",\n\t\"DDotrahd;\": \"\\u2911\",\n\t\"ddotseq;\": \"\\u2A77\",\n\t\"deg;\": \"\\u00B0\",\n\t\"deg\": \"\\u00B0\",\n\t\"Del;\": \"\\u2207\",\n\t\"Delta;\": \"\\u0394\",\n\t\"delta;\": \"\\u03B4\",\n\t\"demptyv;\": \"\\u29B1\",\n\t\"dfisht;\": \"\\u297F\",\n\t\"Dfr;\": \"\\uD835\\uDD07\",\n\t\"dfr;\": \"\\uD835\\uDD21\",\n\t\"dHar;\": \"\\u2965\",\n\t\"dharl;\": \"\\u21C3\",\n\t\"dharr;\": \"\\u21C2\",\n\t\"DiacriticalAcute;\": \"\\u00B4\",\n\t\"DiacriticalDot;\": \"\\u02D9\",\n\t\"DiacriticalDoubleAcute;\": \"\\u02DD\",\n\t\"DiacriticalGrave;\": \"\\u0060\",\n\t\"DiacriticalTilde;\": \"\\u02DC\",\n\t\"diam;\": \"\\u22C4\",\n\t\"diamond;\": \"\\u22C4\",\n\t\"Diamond;\": \"\\u22C4\",\n\t\"diamondsuit;\": \"\\u2666\",\n\t\"diams;\": \"\\u2666\",\n\t\"die;\": \"\\u00A8\",\n\t\"DifferentialD;\": \"\\u2146\",\n\t\"digamma;\": \"\\u03DD\",\n\t\"disin;\": \"\\u22F2\",\n\t\"div;\": \"\\u00F7\",\n\t\"divide;\": \"\\u00F7\",\n\t\"divide\": \"\\u00F7\",\n\t\"divideontimes;\": \"\\u22C7\",\n\t\"divonx;\": \"\\u22C7\",\n\t\"DJcy;\": \"\\u0402\",\n\t\"djcy;\": \"\\u0452\",\n\t\"dlcorn;\": \"\\u231E\",\n\t\"dlcrop;\": \"\\u230D\",\n\t\"dollar;\": \"\\u0024\",\n\t\"Dopf;\": \"\\uD835\\uDD3B\",\n\t\"dopf;\": \"\\uD835\\uDD55\",\n\t\"Dot;\": \"\\u00A8\",\n\t\"dot;\": \"\\u02D9\",\n\t\"DotDot;\": \"\\u20DC\",\n\t\"doteq;\": \"\\u2250\",\n\t\"doteqdot;\": \"\\u2251\",\n\t\"DotEqual;\": \"\\u2250\",\n\t\"dotminus;\": \"\\u2238\",\n\t\"dotplus;\": \"\\u2214\",\n\t\"dotsquare;\": \"\\u22A1\",\n\t\"doublebarwedge;\": \"\\u2306\",\n\t\"DoubleContourIntegral;\": \"\\u222F\",\n\t\"DoubleDot;\": \"\\u00A8\",\n\t\"DoubleDownArrow;\": \"\\u21D3\",\n\t\"DoubleLeftArrow;\": \"\\u21D0\",\n\t\"DoubleLeftRightArrow;\": \"\\u21D4\",\n\t\"DoubleLeftTee;\": \"\\u2AE4\",\n\t\"DoubleLongLeftArrow;\": \"\\u27F8\",\n\t\"DoubleLongLeftRightArrow;\": \"\\u27FA\",\n\t\"DoubleLongRightArrow;\": \"\\u27F9\",\n\t\"DoubleRightArrow;\": \"\\u21D2\",\n\t\"DoubleRightTee;\": \"\\u22A8\",\n\t\"DoubleUpArrow;\": \"\\u21D1\",\n\t\"DoubleUpDownArrow;\": \"\\u21D5\",\n\t\"DoubleVerticalBar;\": \"\\u2225\",\n\t\"DownArrowBar;\": \"\\u2913\",\n\t\"downarrow;\": \"\\u2193\",\n\t\"DownArrow;\": \"\\u2193\",\n\t\"Downarrow;\": \"\\u21D3\",\n\t\"DownArrowUpArrow;\": \"\\u21F5\",\n\t\"DownBreve;\": \"\\u0311\",\n\t\"downdownarrows;\": \"\\u21CA\",\n\t\"downharpoonleft;\": \"\\u21C3\",\n\t\"downharpoonright;\": \"\\u21C2\",\n\t\"DownLeftRightVector;\": \"\\u2950\",\n\t\"DownLeftTeeVector;\": \"\\u295E\",\n\t\"DownLeftVectorBar;\": \"\\u2956\",\n\t\"DownLeftVector;\": \"\\u21BD\",\n\t\"DownRightTeeVector;\": \"\\u295F\",\n\t\"DownRightVectorBar;\": \"\\u2957\",\n\t\"DownRightVector;\": \"\\u21C1\",\n\t\"DownTeeArrow;\": \"\\u21A7\",\n\t\"DownTee;\": \"\\u22A4\",\n\t\"drbkarow;\": \"\\u2910\",\n\t\"drcorn;\": \"\\u231F\",\n\t\"drcrop;\": \"\\u230C\",\n\t\"Dscr;\": \"\\uD835\\uDC9F\",\n\t\"dscr;\": \"\\uD835\\uDCB9\",\n\t\"DScy;\": \"\\u0405\",\n\t\"dscy;\": \"\\u0455\",\n\t\"dsol;\": \"\\u29F6\",\n\t\"Dstrok;\": \"\\u0110\",\n\t\"dstrok;\": \"\\u0111\",\n\t\"dtdot;\": \"\\u22F1\",\n\t\"dtri;\": \"\\u25BF\",\n\t\"dtrif;\": \"\\u25BE\",\n\t\"duarr;\": \"\\u21F5\",\n\t\"duhar;\": \"\\u296F\",\n\t\"dwangle;\": \"\\u29A6\",\n\t\"DZcy;\": \"\\u040F\",\n\t\"dzcy;\": \"\\u045F\",\n\t\"dzigrarr;\": \"\\u27FF\",\n\t\"Eacute;\": \"\\u00C9\",\n\t\"Eacute\": \"\\u00C9\",\n\t\"eacute;\": \"\\u00E9\",\n\t\"eacute\": \"\\u00E9\",\n\t\"easter;\": \"\\u2A6E\",\n\t\"Ecaron;\": \"\\u011A\",\n\t\"ecaron;\": \"\\u011B\",\n\t\"Ecirc;\": \"\\u00CA\",\n\t\"Ecirc\": \"\\u00CA\",\n\t\"ecirc;\": \"\\u00EA\",\n\t\"ecirc\": \"\\u00EA\",\n\t\"ecir;\": \"\\u2256\",\n\t\"ecolon;\": \"\\u2255\",\n\t\"Ecy;\": \"\\u042D\",\n\t\"ecy;\": \"\\u044D\",\n\t\"eDDot;\": \"\\u2A77\",\n\t\"Edot;\": \"\\u0116\",\n\t\"edot;\": \"\\u0117\",\n\t\"eDot;\": \"\\u2251\",\n\t\"ee;\": \"\\u2147\",\n\t\"efDot;\": \"\\u2252\",\n\t\"Efr;\": \"\\uD835\\uDD08\",\n\t\"efr;\": \"\\uD835\\uDD22\",\n\t\"eg;\": \"\\u2A9A\",\n\t\"Egrave;\": \"\\u00C8\",\n\t\"Egrave\": \"\\u00C8\",\n\t\"egrave;\": \"\\u00E8\",\n\t\"egrave\": \"\\u00E8\",\n\t\"egs;\": \"\\u2A96\",\n\t\"egsdot;\": \"\\u2A98\",\n\t\"el;\": \"\\u2A99\",\n\t\"Element;\": \"\\u2208\",\n\t\"elinters;\": \"\\u23E7\",\n\t\"ell;\": \"\\u2113\",\n\t\"els;\": \"\\u2A95\",\n\t\"elsdot;\": \"\\u2A97\",\n\t\"Emacr;\": \"\\u0112\",\n\t\"emacr;\": \"\\u0113\",\n\t\"empty;\": \"\\u2205\",\n\t\"emptyset;\": \"\\u2205\",\n\t\"EmptySmallSquare;\": \"\\u25FB\",\n\t\"emptyv;\": \"\\u2205\",\n\t\"EmptyVerySmallSquare;\": \"\\u25AB\",\n\t\"emsp13;\": \"\\u2004\",\n\t\"emsp14;\": \"\\u2005\",\n\t\"emsp;\": \"\\u2003\",\n\t\"ENG;\": \"\\u014A\",\n\t\"eng;\": \"\\u014B\",\n\t\"ensp;\": \"\\u2002\",\n\t\"Eogon;\": \"\\u0118\",\n\t\"eogon;\": \"\\u0119\",\n\t\"Eopf;\": \"\\uD835\\uDD3C\",\n\t\"eopf;\": \"\\uD835\\uDD56\",\n\t\"epar;\": \"\\u22D5\",\n\t\"eparsl;\": \"\\u29E3\",\n\t\"eplus;\": \"\\u2A71\",\n\t\"epsi;\": \"\\u03B5\",\n\t\"Epsilon;\": \"\\u0395\",\n\t\"epsilon;\": \"\\u03B5\",\n\t\"epsiv;\": \"\\u03F5\",\n\t\"eqcirc;\": \"\\u2256\",\n\t\"eqcolon;\": \"\\u2255\",\n\t\"eqsim;\": \"\\u2242\",\n\t\"eqslantgtr;\": \"\\u2A96\",\n\t\"eqslantless;\": \"\\u2A95\",\n\t\"Equal;\": \"\\u2A75\",\n\t\"equals;\": \"\\u003D\",\n\t\"EqualTilde;\": \"\\u2242\",\n\t\"equest;\": \"\\u225F\",\n\t\"Equilibrium;\": \"\\u21CC\",\n\t\"equiv;\": \"\\u2261\",\n\t\"equivDD;\": \"\\u2A78\",\n\t\"eqvparsl;\": \"\\u29E5\",\n\t\"erarr;\": \"\\u2971\",\n\t\"erDot;\": \"\\u2253\",\n\t\"escr;\": \"\\u212F\",\n\t\"Escr;\": \"\\u2130\",\n\t\"esdot;\": \"\\u2250\",\n\t\"Esim;\": \"\\u2A73\",\n\t\"esim;\": \"\\u2242\",\n\t\"Eta;\": \"\\u0397\",\n\t\"eta;\": \"\\u03B7\",\n\t\"ETH;\": \"\\u00D0\",\n\t\"ETH\": \"\\u00D0\",\n\t\"eth;\": \"\\u00F0\",\n\t\"eth\": \"\\u00F0\",\n\t\"Euml;\": \"\\u00CB\",\n\t\"Euml\": \"\\u00CB\",\n\t\"euml;\": \"\\u00EB\",\n\t\"euml\": \"\\u00EB\",\n\t\"euro;\": \"\\u20AC\",\n\t\"excl;\": \"\\u0021\",\n\t\"exist;\": \"\\u2203\",\n\t\"Exists;\": \"\\u2203\",\n\t\"expectation;\": \"\\u2130\",\n\t\"exponentiale;\": \"\\u2147\",\n\t\"ExponentialE;\": \"\\u2147\",\n\t\"fallingdotseq;\": \"\\u2252\",\n\t\"Fcy;\": \"\\u0424\",\n\t\"fcy;\": \"\\u0444\",\n\t\"female;\": \"\\u2640\",\n\t\"ffilig;\": \"\\uFB03\",\n\t\"fflig;\": \"\\uFB00\",\n\t\"ffllig;\": \"\\uFB04\",\n\t\"Ffr;\": \"\\uD835\\uDD09\",\n\t\"ffr;\": \"\\uD835\\uDD23\",\n\t\"filig;\": \"\\uFB01\",\n\t\"FilledSmallSquare;\": \"\\u25FC\",\n\t\"FilledVerySmallSquare;\": \"\\u25AA\",\n\t\"fjlig;\": \"\\u0066\\u006A\",\n\t\"flat;\": \"\\u266D\",\n\t\"fllig;\": \"\\uFB02\",\n\t\"fltns;\": \"\\u25B1\",\n\t\"fnof;\": \"\\u0192\",\n\t\"Fopf;\": \"\\uD835\\uDD3D\",\n\t\"fopf;\": \"\\uD835\\uDD57\",\n\t\"forall;\": \"\\u2200\",\n\t\"ForAll;\": \"\\u2200\",\n\t\"fork;\": \"\\u22D4\",\n\t\"forkv;\": \"\\u2AD9\",\n\t\"Fouriertrf;\": \"\\u2131\",\n\t\"fpartint;\": \"\\u2A0D\",\n\t\"frac12;\": \"\\u00BD\",\n\t\"frac12\": \"\\u00BD\",\n\t\"frac13;\": \"\\u2153\",\n\t\"frac14;\": \"\\u00BC\",\n\t\"frac14\": \"\\u00BC\",\n\t\"frac15;\": \"\\u2155\",\n\t\"frac16;\": \"\\u2159\",\n\t\"frac18;\": \"\\u215B\",\n\t\"frac23;\": \"\\u2154\",\n\t\"frac25;\": \"\\u2156\",\n\t\"frac34;\": \"\\u00BE\",\n\t\"frac34\": \"\\u00BE\",\n\t\"frac35;\": \"\\u2157\",\n\t\"frac38;\": \"\\u215C\",\n\t\"frac45;\": \"\\u2158\",\n\t\"frac56;\": \"\\u215A\",\n\t\"frac58;\": \"\\u215D\",\n\t\"frac78;\": \"\\u215E\",\n\t\"frasl;\": \"\\u2044\",\n\t\"frown;\": \"\\u2322\",\n\t\"fscr;\": \"\\uD835\\uDCBB\",\n\t\"Fscr;\": \"\\u2131\",\n\t\"gacute;\": \"\\u01F5\",\n\t\"Gamma;\": \"\\u0393\",\n\t\"gamma;\": \"\\u03B3\",\n\t\"Gammad;\": \"\\u03DC\",\n\t\"gammad;\": \"\\u03DD\",\n\t\"gap;\": \"\\u2A86\",\n\t\"Gbreve;\": \"\\u011E\",\n\t\"gbreve;\": \"\\u011F\",\n\t\"Gcedil;\": \"\\u0122\",\n\t\"Gcirc;\": \"\\u011C\",\n\t\"gcirc;\": \"\\u011D\",\n\t\"Gcy;\": \"\\u0413\",\n\t\"gcy;\": \"\\u0433\",\n\t\"Gdot;\": \"\\u0120\",\n\t\"gdot;\": \"\\u0121\",\n\t\"ge;\": \"\\u2265\",\n\t\"gE;\": \"\\u2267\",\n\t\"gEl;\": \"\\u2A8C\",\n\t\"gel;\": \"\\u22DB\",\n\t\"geq;\": \"\\u2265\",\n\t\"geqq;\": \"\\u2267\",\n\t\"geqslant;\": \"\\u2A7E\",\n\t\"gescc;\": \"\\u2AA9\",\n\t\"ges;\": \"\\u2A7E\",\n\t\"gesdot;\": \"\\u2A80\",\n\t\"gesdoto;\": \"\\u2A82\",\n\t\"gesdotol;\": \"\\u2A84\",\n\t\"gesl;\": \"\\u22DB\\uFE00\",\n\t\"gesles;\": \"\\u2A94\",\n\t\"Gfr;\": \"\\uD835\\uDD0A\",\n\t\"gfr;\": \"\\uD835\\uDD24\",\n\t\"gg;\": \"\\u226B\",\n\t\"Gg;\": \"\\u22D9\",\n\t\"ggg;\": \"\\u22D9\",\n\t\"gimel;\": \"\\u2137\",\n\t\"GJcy;\": \"\\u0403\",\n\t\"gjcy;\": \"\\u0453\",\n\t\"gla;\": \"\\u2AA5\",\n\t\"gl;\": \"\\u2277\",\n\t\"glE;\": \"\\u2A92\",\n\t\"glj;\": \"\\u2AA4\",\n\t\"gnap;\": \"\\u2A8A\",\n\t\"gnapprox;\": \"\\u2A8A\",\n\t\"gne;\": \"\\u2A88\",\n\t\"gnE;\": \"\\u2269\",\n\t\"gneq;\": \"\\u2A88\",\n\t\"gneqq;\": \"\\u2269\",\n\t\"gnsim;\": \"\\u22E7\",\n\t\"Gopf;\": \"\\uD835\\uDD3E\",\n\t\"gopf;\": \"\\uD835\\uDD58\",\n\t\"grave;\": \"\\u0060\",\n\t\"GreaterEqual;\": \"\\u2265\",\n\t\"GreaterEqualLess;\": \"\\u22DB\",\n\t\"GreaterFullEqual;\": \"\\u2267\",\n\t\"GreaterGreater;\": \"\\u2AA2\",\n\t\"GreaterLess;\": \"\\u2277\",\n\t\"GreaterSlantEqual;\": \"\\u2A7E\",\n\t\"GreaterTilde;\": \"\\u2273\",\n\t\"Gscr;\": \"\\uD835\\uDCA2\",\n\t\"gscr;\": \"\\u210A\",\n\t\"gsim;\": \"\\u2273\",\n\t\"gsime;\": \"\\u2A8E\",\n\t\"gsiml;\": \"\\u2A90\",\n\t\"gtcc;\": \"\\u2AA7\",\n\t\"gtcir;\": \"\\u2A7A\",\n\t\"gt;\": \"\\u003E\",\n\t\"gt\": \"\\u003E\",\n\t\"GT;\": \"\\u003E\",\n\t\"GT\": \"\\u003E\",\n\t\"Gt;\": \"\\u226B\",\n\t\"gtdot;\": \"\\u22D7\",\n\t\"gtlPar;\": \"\\u2995\",\n\t\"gtquest;\": \"\\u2A7C\",\n\t\"gtrapprox;\": \"\\u2A86\",\n\t\"gtrarr;\": \"\\u2978\",\n\t\"gtrdot;\": \"\\u22D7\",\n\t\"gtreqless;\": \"\\u22DB\",\n\t\"gtreqqless;\": \"\\u2A8C\",\n\t\"gtrless;\": \"\\u2277\",\n\t\"gtrsim;\": \"\\u2273\",\n\t\"gvertneqq;\": \"\\u2269\\uFE00\",\n\t\"gvnE;\": \"\\u2269\\uFE00\",\n\t\"Hacek;\": \"\\u02C7\",\n\t\"hairsp;\": \"\\u200A\",\n\t\"half;\": \"\\u00BD\",\n\t\"hamilt;\": \"\\u210B\",\n\t\"HARDcy;\": \"\\u042A\",\n\t\"hardcy;\": \"\\u044A\",\n\t\"harrcir;\": \"\\u2948\",\n\t\"harr;\": \"\\u2194\",\n\t\"hArr;\": \"\\u21D4\",\n\t\"harrw;\": \"\\u21AD\",\n\t\"Hat;\": \"\\u005E\",\n\t\"hbar;\": \"\\u210F\",\n\t\"Hcirc;\": \"\\u0124\",\n\t\"hcirc;\": \"\\u0125\",\n\t\"hearts;\": \"\\u2665\",\n\t\"heartsuit;\": \"\\u2665\",\n\t\"hellip;\": \"\\u2026\",\n\t\"hercon;\": \"\\u22B9\",\n\t\"hfr;\": \"\\uD835\\uDD25\",\n\t\"Hfr;\": \"\\u210C\",\n\t\"HilbertSpace;\": \"\\u210B\",\n\t\"hksearow;\": \"\\u2925\",\n\t\"hkswarow;\": \"\\u2926\",\n\t\"hoarr;\": \"\\u21FF\",\n\t\"homtht;\": \"\\u223B\",\n\t\"hookleftarrow;\": \"\\u21A9\",\n\t\"hookrightarrow;\": \"\\u21AA\",\n\t\"hopf;\": \"\\uD835\\uDD59\",\n\t\"Hopf;\": \"\\u210D\",\n\t\"horbar;\": \"\\u2015\",\n\t\"HorizontalLine;\": \"\\u2500\",\n\t\"hscr;\": \"\\uD835\\uDCBD\",\n\t\"Hscr;\": \"\\u210B\",\n\t\"hslash;\": \"\\u210F\",\n\t\"Hstrok;\": \"\\u0126\",\n\t\"hstrok;\": \"\\u0127\",\n\t\"HumpDownHump;\": \"\\u224E\",\n\t\"HumpEqual;\": \"\\u224F\",\n\t\"hybull;\": \"\\u2043\",\n\t\"hyphen;\": \"\\u2010\",\n\t\"Iacute;\": \"\\u00CD\",\n\t\"Iacute\": \"\\u00CD\",\n\t\"iacute;\": \"\\u00ED\",\n\t\"iacute\": \"\\u00ED\",\n\t\"ic;\": \"\\u2063\",\n\t\"Icirc;\": \"\\u00CE\",\n\t\"Icirc\": \"\\u00CE\",\n\t\"icirc;\": \"\\u00EE\",\n\t\"icirc\": \"\\u00EE\",\n\t\"Icy;\": \"\\u0418\",\n\t\"icy;\": \"\\u0438\",\n\t\"Idot;\": \"\\u0130\",\n\t\"IEcy;\": \"\\u0415\",\n\t\"iecy;\": \"\\u0435\",\n\t\"iexcl;\": \"\\u00A1\",\n\t\"iexcl\": \"\\u00A1\",\n\t\"iff;\": \"\\u21D4\",\n\t\"ifr;\": \"\\uD835\\uDD26\",\n\t\"Ifr;\": \"\\u2111\",\n\t\"Igrave;\": \"\\u00CC\",\n\t\"Igrave\": \"\\u00CC\",\n\t\"igrave;\": \"\\u00EC\",\n\t\"igrave\": \"\\u00EC\",\n\t\"ii;\": \"\\u2148\",\n\t\"iiiint;\": \"\\u2A0C\",\n\t\"iiint;\": \"\\u222D\",\n\t\"iinfin;\": \"\\u29DC\",\n\t\"iiota;\": \"\\u2129\",\n\t\"IJlig;\": \"\\u0132\",\n\t\"ijlig;\": \"\\u0133\",\n\t\"Imacr;\": \"\\u012A\",\n\t\"imacr;\": \"\\u012B\",\n\t\"image;\": \"\\u2111\",\n\t\"ImaginaryI;\": \"\\u2148\",\n\t\"imagline;\": \"\\u2110\",\n\t\"imagpart;\": \"\\u2111\",\n\t\"imath;\": \"\\u0131\",\n\t\"Im;\": \"\\u2111\",\n\t\"imof;\": \"\\u22B7\",\n\t\"imped;\": \"\\u01B5\",\n\t\"Implies;\": \"\\u21D2\",\n\t\"incare;\": \"\\u2105\",\n\t\"in;\": \"\\u2208\",\n\t\"infin;\": \"\\u221E\",\n\t\"infintie;\": \"\\u29DD\",\n\t\"inodot;\": \"\\u0131\",\n\t\"intcal;\": \"\\u22BA\",\n\t\"int;\": \"\\u222B\",\n\t\"Int;\": \"\\u222C\",\n\t\"integers;\": \"\\u2124\",\n\t\"Integral;\": \"\\u222B\",\n\t\"intercal;\": \"\\u22BA\",\n\t\"Intersection;\": \"\\u22C2\",\n\t\"intlarhk;\": \"\\u2A17\",\n\t\"intprod;\": \"\\u2A3C\",\n\t\"InvisibleComma;\": \"\\u2063\",\n\t\"InvisibleTimes;\": \"\\u2062\",\n\t\"IOcy;\": \"\\u0401\",\n\t\"iocy;\": \"\\u0451\",\n\t\"Iogon;\": \"\\u012E\",\n\t\"iogon;\": \"\\u012F\",\n\t\"Iopf;\": \"\\uD835\\uDD40\",\n\t\"iopf;\": \"\\uD835\\uDD5A\",\n\t\"Iota;\": \"\\u0399\",\n\t\"iota;\": \"\\u03B9\",\n\t\"iprod;\": \"\\u2A3C\",\n\t\"iquest;\": \"\\u00BF\",\n\t\"iquest\": \"\\u00BF\",\n\t\"iscr;\": \"\\uD835\\uDCBE\",\n\t\"Iscr;\": \"\\u2110\",\n\t\"isin;\": \"\\u2208\",\n\t\"isindot;\": \"\\u22F5\",\n\t\"isinE;\": \"\\u22F9\",\n\t\"isins;\": \"\\u22F4\",\n\t\"isinsv;\": \"\\u22F3\",\n\t\"isinv;\": \"\\u2208\",\n\t\"it;\": \"\\u2062\",\n\t\"Itilde;\": \"\\u0128\",\n\t\"itilde;\": \"\\u0129\",\n\t\"Iukcy;\": \"\\u0406\",\n\t\"iukcy;\": \"\\u0456\",\n\t\"Iuml;\": \"\\u00CF\",\n\t\"Iuml\": \"\\u00CF\",\n\t\"iuml;\": \"\\u00EF\",\n\t\"iuml\": \"\\u00EF\",\n\t\"Jcirc;\": \"\\u0134\",\n\t\"jcirc;\": \"\\u0135\",\n\t\"Jcy;\": \"\\u0419\",\n\t\"jcy;\": \"\\u0439\",\n\t\"Jfr;\": \"\\uD835\\uDD0D\",\n\t\"jfr;\": \"\\uD835\\uDD27\",\n\t\"jmath;\": \"\\u0237\",\n\t\"Jopf;\": \"\\uD835\\uDD41\",\n\t\"jopf;\": \"\\uD835\\uDD5B\",\n\t\"Jscr;\": \"\\uD835\\uDCA5\",\n\t\"jscr;\": \"\\uD835\\uDCBF\",\n\t\"Jsercy;\": \"\\u0408\",\n\t\"jsercy;\": \"\\u0458\",\n\t\"Jukcy;\": \"\\u0404\",\n\t\"jukcy;\": \"\\u0454\",\n\t\"Kappa;\": \"\\u039A\",\n\t\"kappa;\": \"\\u03BA\",\n\t\"kappav;\": \"\\u03F0\",\n\t\"Kcedil;\": \"\\u0136\",\n\t\"kcedil;\": \"\\u0137\",\n\t\"Kcy;\": \"\\u041A\",\n\t\"kcy;\": \"\\u043A\",\n\t\"Kfr;\": \"\\uD835\\uDD0E\",\n\t\"kfr;\": \"\\uD835\\uDD28\",\n\t\"kgreen;\": \"\\u0138\",\n\t\"KHcy;\": \"\\u0425\",\n\t\"khcy;\": \"\\u0445\",\n\t\"KJcy;\": \"\\u040C\",\n\t\"kjcy;\": \"\\u045C\",\n\t\"Kopf;\": \"\\uD835\\uDD42\",\n\t\"kopf;\": \"\\uD835\\uDD5C\",\n\t\"Kscr;\": \"\\uD835\\uDCA6\",\n\t\"kscr;\": \"\\uD835\\uDCC0\",\n\t\"lAarr;\": \"\\u21DA\",\n\t\"Lacute;\": \"\\u0139\",\n\t\"lacute;\": \"\\u013A\",\n\t\"laemptyv;\": \"\\u29B4\",\n\t\"lagran;\": \"\\u2112\",\n\t\"Lambda;\": \"\\u039B\",\n\t\"lambda;\": \"\\u03BB\",\n\t\"lang;\": \"\\u27E8\",\n\t\"Lang;\": \"\\u27EA\",\n\t\"langd;\": \"\\u2991\",\n\t\"langle;\": \"\\u27E8\",\n\t\"lap;\": \"\\u2A85\",\n\t\"Laplacetrf;\": \"\\u2112\",\n\t\"laquo;\": \"\\u00AB\",\n\t\"laquo\": \"\\u00AB\",\n\t\"larrb;\": \"\\u21E4\",\n\t\"larrbfs;\": \"\\u291F\",\n\t\"larr;\": \"\\u2190\",\n\t\"Larr;\": \"\\u219E\",\n\t\"lArr;\": \"\\u21D0\",\n\t\"larrfs;\": \"\\u291D\",\n\t\"larrhk;\": \"\\u21A9\",\n\t\"larrlp;\": \"\\u21AB\",\n\t\"larrpl;\": \"\\u2939\",\n\t\"larrsim;\": \"\\u2973\",\n\t\"larrtl;\": \"\\u21A2\",\n\t\"latail;\": \"\\u2919\",\n\t\"lAtail;\": \"\\u291B\",\n\t\"lat;\": \"\\u2AAB\",\n\t\"late;\": \"\\u2AAD\",\n\t\"lates;\": \"\\u2AAD\\uFE00\",\n\t\"lbarr;\": \"\\u290C\",\n\t\"lBarr;\": \"\\u290E\",\n\t\"lbbrk;\": \"\\u2772\",\n\t\"lbrace;\": \"\\u007B\",\n\t\"lbrack;\": \"\\u005B\",\n\t\"lbrke;\": \"\\u298B\",\n\t\"lbrksld;\": \"\\u298F\",\n\t\"lbrkslu;\": \"\\u298D\",\n\t\"Lcaron;\": \"\\u013D\",\n\t\"lcaron;\": \"\\u013E\",\n\t\"Lcedil;\": \"\\u013B\",\n\t\"lcedil;\": \"\\u013C\",\n\t\"lceil;\": \"\\u2308\",\n\t\"lcub;\": \"\\u007B\",\n\t\"Lcy;\": \"\\u041B\",\n\t\"lcy;\": \"\\u043B\",\n\t\"ldca;\": \"\\u2936\",\n\t\"ldquo;\": \"\\u201C\",\n\t\"ldquor;\": \"\\u201E\",\n\t\"ldrdhar;\": \"\\u2967\",\n\t\"ldrushar;\": \"\\u294B\",\n\t\"ldsh;\": \"\\u21B2\",\n\t\"le;\": \"\\u2264\",\n\t\"lE;\": \"\\u2266\",\n\t\"LeftAngleBracket;\": \"\\u27E8\",\n\t\"LeftArrowBar;\": \"\\u21E4\",\n\t\"leftarrow;\": \"\\u2190\",\n\t\"LeftArrow;\": \"\\u2190\",\n\t\"Leftarrow;\": \"\\u21D0\",\n\t\"LeftArrowRightArrow;\": \"\\u21C6\",\n\t\"leftarrowtail;\": \"\\u21A2\",\n\t\"LeftCeiling;\": \"\\u2308\",\n\t\"LeftDoubleBracket;\": \"\\u27E6\",\n\t\"LeftDownTeeVector;\": \"\\u2961\",\n\t\"LeftDownVectorBar;\": \"\\u2959\",\n\t\"LeftDownVector;\": \"\\u21C3\",\n\t\"LeftFloor;\": \"\\u230A\",\n\t\"leftharpoondown;\": \"\\u21BD\",\n\t\"leftharpoonup;\": \"\\u21BC\",\n\t\"leftleftarrows;\": \"\\u21C7\",\n\t\"leftrightarrow;\": \"\\u2194\",\n\t\"LeftRightArrow;\": \"\\u2194\",\n\t\"Leftrightarrow;\": \"\\u21D4\",\n\t\"leftrightarrows;\": \"\\u21C6\",\n\t\"leftrightharpoons;\": \"\\u21CB\",\n\t\"leftrightsquigarrow;\": \"\\u21AD\",\n\t\"LeftRightVector;\": \"\\u294E\",\n\t\"LeftTeeArrow;\": \"\\u21A4\",\n\t\"LeftTee;\": \"\\u22A3\",\n\t\"LeftTeeVector;\": \"\\u295A\",\n\t\"leftthreetimes;\": \"\\u22CB\",\n\t\"LeftTriangleBar;\": \"\\u29CF\",\n\t\"LeftTriangle;\": \"\\u22B2\",\n\t\"LeftTriangleEqual;\": \"\\u22B4\",\n\t\"LeftUpDownVector;\": \"\\u2951\",\n\t\"LeftUpTeeVector;\": \"\\u2960\",\n\t\"LeftUpVectorBar;\": \"\\u2958\",\n\t\"LeftUpVector;\": \"\\u21BF\",\n\t\"LeftVectorBar;\": \"\\u2952\",\n\t\"LeftVector;\": \"\\u21BC\",\n\t\"lEg;\": \"\\u2A8B\",\n\t\"leg;\": \"\\u22DA\",\n\t\"leq;\": \"\\u2264\",\n\t\"leqq;\": \"\\u2266\",\n\t\"leqslant;\": \"\\u2A7D\",\n\t\"lescc;\": \"\\u2AA8\",\n\t\"les;\": \"\\u2A7D\",\n\t\"lesdot;\": \"\\u2A7F\",\n\t\"lesdoto;\": \"\\u2A81\",\n\t\"lesdotor;\": \"\\u2A83\",\n\t\"lesg;\": \"\\u22DA\\uFE00\",\n\t\"lesges;\": \"\\u2A93\",\n\t\"lessapprox;\": \"\\u2A85\",\n\t\"lessdot;\": \"\\u22D6\",\n\t\"lesseqgtr;\": \"\\u22DA\",\n\t\"lesseqqgtr;\": \"\\u2A8B\",\n\t\"LessEqualGreater;\": \"\\u22DA\",\n\t\"LessFullEqual;\": \"\\u2266\",\n\t\"LessGreater;\": \"\\u2276\",\n\t\"lessgtr;\": \"\\u2276\",\n\t\"LessLess;\": \"\\u2AA1\",\n\t\"lesssim;\": \"\\u2272\",\n\t\"LessSlantEqual;\": \"\\u2A7D\",\n\t\"LessTilde;\": \"\\u2272\",\n\t\"lfisht;\": \"\\u297C\",\n\t\"lfloor;\": \"\\u230A\",\n\t\"Lfr;\": \"\\uD835\\uDD0F\",\n\t\"lfr;\": \"\\uD835\\uDD29\",\n\t\"lg;\": \"\\u2276\",\n\t\"lgE;\": \"\\u2A91\",\n\t\"lHar;\": \"\\u2962\",\n\t\"lhard;\": \"\\u21BD\",\n\t\"lharu;\": \"\\u21BC\",\n\t\"lharul;\": \"\\u296A\",\n\t\"lhblk;\": \"\\u2584\",\n\t\"LJcy;\": \"\\u0409\",\n\t\"ljcy;\": \"\\u0459\",\n\t\"llarr;\": \"\\u21C7\",\n\t\"ll;\": \"\\u226A\",\n\t\"Ll;\": \"\\u22D8\",\n\t\"llcorner;\": \"\\u231E\",\n\t\"Lleftarrow;\": \"\\u21DA\",\n\t\"llhard;\": \"\\u296B\",\n\t\"lltri;\": \"\\u25FA\",\n\t\"Lmidot;\": \"\\u013F\",\n\t\"lmidot;\": \"\\u0140\",\n\t\"lmoustache;\": \"\\u23B0\",\n\t\"lmoust;\": \"\\u23B0\",\n\t\"lnap;\": \"\\u2A89\",\n\t\"lnapprox;\": \"\\u2A89\",\n\t\"lne;\": \"\\u2A87\",\n\t\"lnE;\": \"\\u2268\",\n\t\"lneq;\": \"\\u2A87\",\n\t\"lneqq;\": \"\\u2268\",\n\t\"lnsim;\": \"\\u22E6\",\n\t\"loang;\": \"\\u27EC\",\n\t\"loarr;\": \"\\u21FD\",\n\t\"lobrk;\": \"\\u27E6\",\n\t\"longleftarrow;\": \"\\u27F5\",\n\t\"LongLeftArrow;\": \"\\u27F5\",\n\t\"Longleftarrow;\": \"\\u27F8\",\n\t\"longleftrightarrow;\": \"\\u27F7\",\n\t\"LongLeftRightArrow;\": \"\\u27F7\",\n\t\"Longleftrightarrow;\": \"\\u27FA\",\n\t\"longmapsto;\": \"\\u27FC\",\n\t\"longrightarrow;\": \"\\u27F6\",\n\t\"LongRightArrow;\": \"\\u27F6\",\n\t\"Longrightarrow;\": \"\\u27F9\",\n\t\"looparrowleft;\": \"\\u21AB\",\n\t\"looparrowright;\": \"\\u21AC\",\n\t\"lopar;\": \"\\u2985\",\n\t\"Lopf;\": \"\\uD835\\uDD43\",\n\t\"lopf;\": \"\\uD835\\uDD5D\",\n\t\"loplus;\": \"\\u2A2D\",\n\t\"lotimes;\": \"\\u2A34\",\n\t\"lowast;\": \"\\u2217\",\n\t\"lowbar;\": \"\\u005F\",\n\t\"LowerLeftArrow;\": \"\\u2199\",\n\t\"LowerRightArrow;\": \"\\u2198\",\n\t\"loz;\": \"\\u25CA\",\n\t\"lozenge;\": \"\\u25CA\",\n\t\"lozf;\": \"\\u29EB\",\n\t\"lpar;\": \"\\u0028\",\n\t\"lparlt;\": \"\\u2993\",\n\t\"lrarr;\": \"\\u21C6\",\n\t\"lrcorner;\": \"\\u231F\",\n\t\"lrhar;\": \"\\u21CB\",\n\t\"lrhard;\": \"\\u296D\",\n\t\"lrm;\": \"\\u200E\",\n\t\"lrtri;\": \"\\u22BF\",\n\t\"lsaquo;\": \"\\u2039\",\n\t\"lscr;\": \"\\uD835\\uDCC1\",\n\t\"Lscr;\": \"\\u2112\",\n\t\"lsh;\": \"\\u21B0\",\n\t\"Lsh;\": \"\\u21B0\",\n\t\"lsim;\": \"\\u2272\",\n\t\"lsime;\": \"\\u2A8D\",\n\t\"lsimg;\": \"\\u2A8F\",\n\t\"lsqb;\": \"\\u005B\",\n\t\"lsquo;\": \"\\u2018\",\n\t\"lsquor;\": \"\\u201A\",\n\t\"Lstrok;\": \"\\u0141\",\n\t\"lstrok;\": \"\\u0142\",\n\t\"ltcc;\": \"\\u2AA6\",\n\t\"ltcir;\": \"\\u2A79\",\n\t\"lt;\": \"\\u003C\",\n\t\"lt\": \"\\u003C\",\n\t\"LT;\": \"\\u003C\",\n\t\"LT\": \"\\u003C\",\n\t\"Lt;\": \"\\u226A\",\n\t\"ltdot;\": \"\\u22D6\",\n\t\"lthree;\": \"\\u22CB\",\n\t\"ltimes;\": \"\\u22C9\",\n\t\"ltlarr;\": \"\\u2976\",\n\t\"ltquest;\": \"\\u2A7B\",\n\t\"ltri;\": \"\\u25C3\",\n\t\"ltrie;\": \"\\u22B4\",\n\t\"ltrif;\": \"\\u25C2\",\n\t\"ltrPar;\": \"\\u2996\",\n\t\"lurdshar;\": \"\\u294A\",\n\t\"luruhar;\": \"\\u2966\",\n\t\"lvertneqq;\": \"\\u2268\\uFE00\",\n\t\"lvnE;\": \"\\u2268\\uFE00\",\n\t\"macr;\": \"\\u00AF\",\n\t\"macr\": \"\\u00AF\",\n\t\"male;\": \"\\u2642\",\n\t\"malt;\": \"\\u2720\",\n\t\"maltese;\": \"\\u2720\",\n\t\"Map;\": \"\\u2905\",\n\t\"map;\": \"\\u21A6\",\n\t\"mapsto;\": \"\\u21A6\",\n\t\"mapstodown;\": \"\\u21A7\",\n\t\"mapstoleft;\": \"\\u21A4\",\n\t\"mapstoup;\": \"\\u21A5\",\n\t\"marker;\": \"\\u25AE\",\n\t\"mcomma;\": \"\\u2A29\",\n\t\"Mcy;\": \"\\u041C\",\n\t\"mcy;\": \"\\u043C\",\n\t\"mdash;\": \"\\u2014\",\n\t\"mDDot;\": \"\\u223A\",\n\t\"measuredangle;\": \"\\u2221\",\n\t\"MediumSpace;\": \"\\u205F\",\n\t\"Mellintrf;\": \"\\u2133\",\n\t\"Mfr;\": \"\\uD835\\uDD10\",\n\t\"mfr;\": \"\\uD835\\uDD2A\",\n\t\"mho;\": \"\\u2127\",\n\t\"micro;\": \"\\u00B5\",\n\t\"micro\": \"\\u00B5\",\n\t\"midast;\": \"\\u002A\",\n\t\"midcir;\": \"\\u2AF0\",\n\t\"mid;\": \"\\u2223\",\n\t\"middot;\": \"\\u00B7\",\n\t\"middot\": \"\\u00B7\",\n\t\"minusb;\": \"\\u229F\",\n\t\"minus;\": \"\\u2212\",\n\t\"minusd;\": \"\\u2238\",\n\t\"minusdu;\": \"\\u2A2A\",\n\t\"MinusPlus;\": \"\\u2213\",\n\t\"mlcp;\": \"\\u2ADB\",\n\t\"mldr;\": \"\\u2026\",\n\t\"mnplus;\": \"\\u2213\",\n\t\"models;\": \"\\u22A7\",\n\t\"Mopf;\": \"\\uD835\\uDD44\",\n\t\"mopf;\": \"\\uD835\\uDD5E\",\n\t\"mp;\": \"\\u2213\",\n\t\"mscr;\": \"\\uD835\\uDCC2\",\n\t\"Mscr;\": \"\\u2133\",\n\t\"mstpos;\": \"\\u223E\",\n\t\"Mu;\": \"\\u039C\",\n\t\"mu;\": \"\\u03BC\",\n\t\"multimap;\": \"\\u22B8\",\n\t\"mumap;\": \"\\u22B8\",\n\t\"nabla;\": \"\\u2207\",\n\t\"Nacute;\": \"\\u0143\",\n\t\"nacute;\": \"\\u0144\",\n\t\"nang;\": \"\\u2220\\u20D2\",\n\t\"nap;\": \"\\u2249\",\n\t\"napE;\": \"\\u2A70\\u0338\",\n\t\"napid;\": \"\\u224B\\u0338\",\n\t\"napos;\": \"\\u0149\",\n\t\"napprox;\": \"\\u2249\",\n\t\"natural;\": \"\\u266E\",\n\t\"naturals;\": \"\\u2115\",\n\t\"natur;\": \"\\u266E\",\n\t\"nbsp;\": \"\\u00A0\",\n\t\"nbsp\": \"\\u00A0\",\n\t\"nbump;\": \"\\u224E\\u0338\",\n\t\"nbumpe;\": \"\\u224F\\u0338\",\n\t\"ncap;\": \"\\u2A43\",\n\t\"Ncaron;\": \"\\u0147\",\n\t\"ncaron;\": \"\\u0148\",\n\t\"Ncedil;\": \"\\u0145\",\n\t\"ncedil;\": \"\\u0146\",\n\t\"ncong;\": \"\\u2247\",\n\t\"ncongdot;\": \"\\u2A6D\\u0338\",\n\t\"ncup;\": \"\\u2A42\",\n\t\"Ncy;\": \"\\u041D\",\n\t\"ncy;\": \"\\u043D\",\n\t\"ndash;\": \"\\u2013\",\n\t\"nearhk;\": \"\\u2924\",\n\t\"nearr;\": \"\\u2197\",\n\t\"neArr;\": \"\\u21D7\",\n\t\"nearrow;\": \"\\u2197\",\n\t\"ne;\": \"\\u2260\",\n\t\"nedot;\": \"\\u2250\\u0338\",\n\t\"NegativeMediumSpace;\": \"\\u200B\",\n\t\"NegativeThickSpace;\": \"\\u200B\",\n\t\"NegativeThinSpace;\": \"\\u200B\",\n\t\"NegativeVeryThinSpace;\": \"\\u200B\",\n\t\"nequiv;\": \"\\u2262\",\n\t\"nesear;\": \"\\u2928\",\n\t\"nesim;\": \"\\u2242\\u0338\",\n\t\"NestedGreaterGreater;\": \"\\u226B\",\n\t\"NestedLessLess;\": \"\\u226A\",\n\t\"NewLine;\": \"\\u000A\",\n\t\"nexist;\": \"\\u2204\",\n\t\"nexists;\": \"\\u2204\",\n\t\"Nfr;\": \"\\uD835\\uDD11\",\n\t\"nfr;\": \"\\uD835\\uDD2B\",\n\t\"ngE;\": \"\\u2267\\u0338\",\n\t\"nge;\": \"\\u2271\",\n\t\"ngeq;\": \"\\u2271\",\n\t\"ngeqq;\": \"\\u2267\\u0338\",\n\t\"ngeqslant;\": \"\\u2A7E\\u0338\",\n\t\"nges;\": \"\\u2A7E\\u0338\",\n\t\"nGg;\": \"\\u22D9\\u0338\",\n\t\"ngsim;\": \"\\u2275\",\n\t\"nGt;\": \"\\u226B\\u20D2\",\n\t\"ngt;\": \"\\u226F\",\n\t\"ngtr;\": \"\\u226F\",\n\t\"nGtv;\": \"\\u226B\\u0338\",\n\t\"nharr;\": \"\\u21AE\",\n\t\"nhArr;\": \"\\u21CE\",\n\t\"nhpar;\": \"\\u2AF2\",\n\t\"ni;\": \"\\u220B\",\n\t\"nis;\": \"\\u22FC\",\n\t\"nisd;\": \"\\u22FA\",\n\t\"niv;\": \"\\u220B\",\n\t\"NJcy;\": \"\\u040A\",\n\t\"njcy;\": \"\\u045A\",\n\t\"nlarr;\": \"\\u219A\",\n\t\"nlArr;\": \"\\u21CD\",\n\t\"nldr;\": \"\\u2025\",\n\t\"nlE;\": \"\\u2266\\u0338\",\n\t\"nle;\": \"\\u2270\",\n\t\"nleftarrow;\": \"\\u219A\",\n\t\"nLeftarrow;\": \"\\u21CD\",\n\t\"nleftrightarrow;\": \"\\u21AE\",\n\t\"nLeftrightarrow;\": \"\\u21CE\",\n\t\"nleq;\": \"\\u2270\",\n\t\"nleqq;\": \"\\u2266\\u0338\",\n\t\"nleqslant;\": \"\\u2A7D\\u0338\",\n\t\"nles;\": \"\\u2A7D\\u0338\",\n\t\"nless;\": \"\\u226E\",\n\t\"nLl;\": \"\\u22D8\\u0338\",\n\t\"nlsim;\": \"\\u2274\",\n\t\"nLt;\": \"\\u226A\\u20D2\",\n\t\"nlt;\": \"\\u226E\",\n\t\"nltri;\": \"\\u22EA\",\n\t\"nltrie;\": \"\\u22EC\",\n\t\"nLtv;\": \"\\u226A\\u0338\",\n\t\"nmid;\": \"\\u2224\",\n\t\"NoBreak;\": \"\\u2060\",\n\t\"NonBreakingSpace;\": \"\\u00A0\",\n\t\"nopf;\": \"\\uD835\\uDD5F\",\n\t\"Nopf;\": \"\\u2115\",\n\t\"Not;\": \"\\u2AEC\",\n\t\"not;\": \"\\u00AC\",\n\t\"not\": \"\\u00AC\",\n\t\"NotCongruent;\": \"\\u2262\",\n\t\"NotCupCap;\": \"\\u226D\",\n\t\"NotDoubleVerticalBar;\": \"\\u2226\",\n\t\"NotElement;\": \"\\u2209\",\n\t\"NotEqual;\": \"\\u2260\",\n\t\"NotEqualTilde;\": \"\\u2242\\u0338\",\n\t\"NotExists;\": \"\\u2204\",\n\t\"NotGreater;\": \"\\u226F\",\n\t\"NotGreaterEqual;\": \"\\u2271\",\n\t\"NotGreaterFullEqual;\": \"\\u2267\\u0338\",\n\t\"NotGreaterGreater;\": \"\\u226B\\u0338\",\n\t\"NotGreaterLess;\": \"\\u2279\",\n\t\"NotGreaterSlantEqual;\": \"\\u2A7E\\u0338\",\n\t\"NotGreaterTilde;\": \"\\u2275\",\n\t\"NotHumpDownHump;\": \"\\u224E\\u0338\",\n\t\"NotHumpEqual;\": \"\\u224F\\u0338\",\n\t\"notin;\": \"\\u2209\",\n\t\"notindot;\": \"\\u22F5\\u0338\",\n\t\"notinE;\": \"\\u22F9\\u0338\",\n\t\"notinva;\": \"\\u2209\",\n\t\"notinvb;\": \"\\u22F7\",\n\t\"notinvc;\": \"\\u22F6\",\n\t\"NotLeftTriangleBar;\": \"\\u29CF\\u0338\",\n\t\"NotLeftTriangle;\": \"\\u22EA\",\n\t\"NotLeftTriangleEqual;\": \"\\u22EC\",\n\t\"NotLess;\": \"\\u226E\",\n\t\"NotLessEqual;\": \"\\u2270\",\n\t\"NotLessGreater;\": \"\\u2278\",\n\t\"NotLessLess;\": \"\\u226A\\u0338\",\n\t\"NotLessSlantEqual;\": \"\\u2A7D\\u0338\",\n\t\"NotLessTilde;\": \"\\u2274\",\n\t\"NotNestedGreaterGreater;\": \"\\u2AA2\\u0338\",\n\t\"NotNestedLessLess;\": \"\\u2AA1\\u0338\",\n\t\"notni;\": \"\\u220C\",\n\t\"notniva;\": \"\\u220C\",\n\t\"notnivb;\": \"\\u22FE\",\n\t\"notnivc;\": \"\\u22FD\",\n\t\"NotPrecedes;\": \"\\u2280\",\n\t\"NotPrecedesEqual;\": \"\\u2AAF\\u0338\",\n\t\"NotPrecedesSlantEqual;\": \"\\u22E0\",\n\t\"NotReverseElement;\": \"\\u220C\",\n\t\"NotRightTriangleBar;\": \"\\u29D0\\u0338\",\n\t\"NotRightTriangle;\": \"\\u22EB\",\n\t\"NotRightTriangleEqual;\": \"\\u22ED\",\n\t\"NotSquareSubset;\": \"\\u228F\\u0338\",\n\t\"NotSquareSubsetEqual;\": \"\\u22E2\",\n\t\"NotSquareSuperset;\": \"\\u2290\\u0338\",\n\t\"NotSquareSupersetEqual;\": \"\\u22E3\",\n\t\"NotSubset;\": \"\\u2282\\u20D2\",\n\t\"NotSubsetEqual;\": \"\\u2288\",\n\t\"NotSucceeds;\": \"\\u2281\",\n\t\"NotSucceedsEqual;\": \"\\u2AB0\\u0338\",\n\t\"NotSucceedsSlantEqual;\": \"\\u22E1\",\n\t\"NotSucceedsTilde;\": \"\\u227F\\u0338\",\n\t\"NotSuperset;\": \"\\u2283\\u20D2\",\n\t\"NotSupersetEqual;\": \"\\u2289\",\n\t\"NotTilde;\": \"\\u2241\",\n\t\"NotTildeEqual;\": \"\\u2244\",\n\t\"NotTildeFullEqual;\": \"\\u2247\",\n\t\"NotTildeTilde;\": \"\\u2249\",\n\t\"NotVerticalBar;\": \"\\u2224\",\n\t\"nparallel;\": \"\\u2226\",\n\t\"npar;\": \"\\u2226\",\n\t\"nparsl;\": \"\\u2AFD\\u20E5\",\n\t\"npart;\": \"\\u2202\\u0338\",\n\t\"npolint;\": \"\\u2A14\",\n\t\"npr;\": \"\\u2280\",\n\t\"nprcue;\": \"\\u22E0\",\n\t\"nprec;\": \"\\u2280\",\n\t\"npreceq;\": \"\\u2AAF\\u0338\",\n\t\"npre;\": \"\\u2AAF\\u0338\",\n\t\"nrarrc;\": \"\\u2933\\u0338\",\n\t\"nrarr;\": \"\\u219B\",\n\t\"nrArr;\": \"\\u21CF\",\n\t\"nrarrw;\": \"\\u219D\\u0338\",\n\t\"nrightarrow;\": \"\\u219B\",\n\t\"nRightarrow;\": \"\\u21CF\",\n\t\"nrtri;\": \"\\u22EB\",\n\t\"nrtrie;\": \"\\u22ED\",\n\t\"nsc;\": \"\\u2281\",\n\t\"nsccue;\": \"\\u22E1\",\n\t\"nsce;\": \"\\u2AB0\\u0338\",\n\t\"Nscr;\": \"\\uD835\\uDCA9\",\n\t\"nscr;\": \"\\uD835\\uDCC3\",\n\t\"nshortmid;\": \"\\u2224\",\n\t\"nshortparallel;\": \"\\u2226\",\n\t\"nsim;\": \"\\u2241\",\n\t\"nsime;\": \"\\u2244\",\n\t\"nsimeq;\": \"\\u2244\",\n\t\"nsmid;\": \"\\u2224\",\n\t\"nspar;\": \"\\u2226\",\n\t\"nsqsube;\": \"\\u22E2\",\n\t\"nsqsupe;\": \"\\u22E3\",\n\t\"nsub;\": \"\\u2284\",\n\t\"nsubE;\": \"\\u2AC5\\u0338\",\n\t\"nsube;\": \"\\u2288\",\n\t\"nsubset;\": \"\\u2282\\u20D2\",\n\t\"nsubseteq;\": \"\\u2288\",\n\t\"nsubseteqq;\": \"\\u2AC5\\u0338\",\n\t\"nsucc;\": \"\\u2281\",\n\t\"nsucceq;\": \"\\u2AB0\\u0338\",\n\t\"nsup;\": \"\\u2285\",\n\t\"nsupE;\": \"\\u2AC6\\u0338\",\n\t\"nsupe;\": \"\\u2289\",\n\t\"nsupset;\": \"\\u2283\\u20D2\",\n\t\"nsupseteq;\": \"\\u2289\",\n\t\"nsupseteqq;\": \"\\u2AC6\\u0338\",\n\t\"ntgl;\": \"\\u2279\",\n\t\"Ntilde;\": \"\\u00D1\",\n\t\"Ntilde\": \"\\u00D1\",\n\t\"ntilde;\": \"\\u00F1\",\n\t\"ntilde\": \"\\u00F1\",\n\t\"ntlg;\": \"\\u2278\",\n\t\"ntriangleleft;\": \"\\u22EA\",\n\t\"ntrianglelefteq;\": \"\\u22EC\",\n\t\"ntriangleright;\": \"\\u22EB\",\n\t\"ntrianglerighteq;\": \"\\u22ED\",\n\t\"Nu;\": \"\\u039D\",\n\t\"nu;\": \"\\u03BD\",\n\t\"num;\": \"\\u0023\",\n\t\"numero;\": \"\\u2116\",\n\t\"numsp;\": \"\\u2007\",\n\t\"nvap;\": \"\\u224D\\u20D2\",\n\t\"nvdash;\": \"\\u22AC\",\n\t\"nvDash;\": \"\\u22AD\",\n\t\"nVdash;\": \"\\u22AE\",\n\t\"nVDash;\": \"\\u22AF\",\n\t\"nvge;\": \"\\u2265\\u20D2\",\n\t\"nvgt;\": \"\\u003E\\u20D2\",\n\t\"nvHarr;\": \"\\u2904\",\n\t\"nvinfin;\": \"\\u29DE\",\n\t\"nvlArr;\": \"\\u2902\",\n\t\"nvle;\": \"\\u2264\\u20D2\",\n\t\"nvlt;\": \"\\u003C\\u20D2\",\n\t\"nvltrie;\": \"\\u22B4\\u20D2\",\n\t\"nvrArr;\": \"\\u2903\",\n\t\"nvrtrie;\": \"\\u22B5\\u20D2\",\n\t\"nvsim;\": \"\\u223C\\u20D2\",\n\t\"nwarhk;\": \"\\u2923\",\n\t\"nwarr;\": \"\\u2196\",\n\t\"nwArr;\": \"\\u21D6\",\n\t\"nwarrow;\": \"\\u2196\",\n\t\"nwnear;\": \"\\u2927\",\n\t\"Oacute;\": \"\\u00D3\",\n\t\"Oacute\": \"\\u00D3\",\n\t\"oacute;\": \"\\u00F3\",\n\t\"oacute\": \"\\u00F3\",\n\t\"oast;\": \"\\u229B\",\n\t\"Ocirc;\": \"\\u00D4\",\n\t\"Ocirc\": \"\\u00D4\",\n\t\"ocirc;\": \"\\u00F4\",\n\t\"ocirc\": \"\\u00F4\",\n\t\"ocir;\": \"\\u229A\",\n\t\"Ocy;\": \"\\u041E\",\n\t\"ocy;\": \"\\u043E\",\n\t\"odash;\": \"\\u229D\",\n\t\"Odblac;\": \"\\u0150\",\n\t\"odblac;\": \"\\u0151\",\n\t\"odiv;\": \"\\u2A38\",\n\t\"odot;\": \"\\u2299\",\n\t\"odsold;\": \"\\u29BC\",\n\t\"OElig;\": \"\\u0152\",\n\t\"oelig;\": \"\\u0153\",\n\t\"ofcir;\": \"\\u29BF\",\n\t\"Ofr;\": \"\\uD835\\uDD12\",\n\t\"ofr;\": \"\\uD835\\uDD2C\",\n\t\"ogon;\": \"\\u02DB\",\n\t\"Ograve;\": \"\\u00D2\",\n\t\"Ograve\": \"\\u00D2\",\n\t\"ograve;\": \"\\u00F2\",\n\t\"ograve\": \"\\u00F2\",\n\t\"ogt;\": \"\\u29C1\",\n\t\"ohbar;\": \"\\u29B5\",\n\t\"ohm;\": \"\\u03A9\",\n\t\"oint;\": \"\\u222E\",\n\t\"olarr;\": \"\\u21BA\",\n\t\"olcir;\": \"\\u29BE\",\n\t\"olcross;\": \"\\u29BB\",\n\t\"oline;\": \"\\u203E\",\n\t\"olt;\": \"\\u29C0\",\n\t\"Omacr;\": \"\\u014C\",\n\t\"omacr;\": \"\\u014D\",\n\t\"Omega;\": \"\\u03A9\",\n\t\"omega;\": \"\\u03C9\",\n\t\"Omicron;\": \"\\u039F\",\n\t\"omicron;\": \"\\u03BF\",\n\t\"omid;\": \"\\u29B6\",\n\t\"ominus;\": \"\\u2296\",\n\t\"Oopf;\": \"\\uD835\\uDD46\",\n\t\"oopf;\": \"\\uD835\\uDD60\",\n\t\"opar;\": \"\\u29B7\",\n\t\"OpenCurlyDoubleQuote;\": \"\\u201C\",\n\t\"OpenCurlyQuote;\": \"\\u2018\",\n\t\"operp;\": \"\\u29B9\",\n\t\"oplus;\": \"\\u2295\",\n\t\"orarr;\": \"\\u21BB\",\n\t\"Or;\": \"\\u2A54\",\n\t\"or;\": \"\\u2228\",\n\t\"ord;\": \"\\u2A5D\",\n\t\"order;\": \"\\u2134\",\n\t\"orderof;\": \"\\u2134\",\n\t\"ordf;\": \"\\u00AA\",\n\t\"ordf\": \"\\u00AA\",\n\t\"ordm;\": \"\\u00BA\",\n\t\"ordm\": \"\\u00BA\",\n\t\"origof;\": \"\\u22B6\",\n\t\"oror;\": \"\\u2A56\",\n\t\"orslope;\": \"\\u2A57\",\n\t\"orv;\": \"\\u2A5B\",\n\t\"oS;\": \"\\u24C8\",\n\t\"Oscr;\": \"\\uD835\\uDCAA\",\n\t\"oscr;\": \"\\u2134\",\n\t\"Oslash;\": \"\\u00D8\",\n\t\"Oslash\": \"\\u00D8\",\n\t\"oslash;\": \"\\u00F8\",\n\t\"oslash\": \"\\u00F8\",\n\t\"osol;\": \"\\u2298\",\n\t\"Otilde;\": \"\\u00D5\",\n\t\"Otilde\": \"\\u00D5\",\n\t\"otilde;\": \"\\u00F5\",\n\t\"otilde\": \"\\u00F5\",\n\t\"otimesas;\": \"\\u2A36\",\n\t\"Otimes;\": \"\\u2A37\",\n\t\"otimes;\": \"\\u2297\",\n\t\"Ouml;\": \"\\u00D6\",\n\t\"Ouml\": \"\\u00D6\",\n\t\"ouml;\": \"\\u00F6\",\n\t\"ouml\": \"\\u00F6\",\n\t\"ovbar;\": \"\\u233D\",\n\t\"OverBar;\": \"\\u203E\",\n\t\"OverBrace;\": \"\\u23DE\",\n\t\"OverBracket;\": \"\\u23B4\",\n\t\"OverParenthesis;\": \"\\u23DC\",\n\t\"para;\": \"\\u00B6\",\n\t\"para\": \"\\u00B6\",\n\t\"parallel;\": \"\\u2225\",\n\t\"par;\": \"\\u2225\",\n\t\"parsim;\": \"\\u2AF3\",\n\t\"parsl;\": \"\\u2AFD\",\n\t\"part;\": \"\\u2202\",\n\t\"PartialD;\": \"\\u2202\",\n\t\"Pcy;\": \"\\u041F\",\n\t\"pcy;\": \"\\u043F\",\n\t\"percnt;\": \"\\u0025\",\n\t\"period;\": \"\\u002E\",\n\t\"permil;\": \"\\u2030\",\n\t\"perp;\": \"\\u22A5\",\n\t\"pertenk;\": \"\\u2031\",\n\t\"Pfr;\": \"\\uD835\\uDD13\",\n\t\"pfr;\": \"\\uD835\\uDD2D\",\n\t\"Phi;\": \"\\u03A6\",\n\t\"phi;\": \"\\u03C6\",\n\t\"phiv;\": \"\\u03D5\",\n\t\"phmmat;\": \"\\u2133\",\n\t\"phone;\": \"\\u260E\",\n\t\"Pi;\": \"\\u03A0\",\n\t\"pi;\": \"\\u03C0\",\n\t\"pitchfork;\": \"\\u22D4\",\n\t\"piv;\": \"\\u03D6\",\n\t\"planck;\": \"\\u210F\",\n\t\"planckh;\": \"\\u210E\",\n\t\"plankv;\": \"\\u210F\",\n\t\"plusacir;\": \"\\u2A23\",\n\t\"plusb;\": \"\\u229E\",\n\t\"pluscir;\": \"\\u2A22\",\n\t\"plus;\": \"\\u002B\",\n\t\"plusdo;\": \"\\u2214\",\n\t\"plusdu;\": \"\\u2A25\",\n\t\"pluse;\": \"\\u2A72\",\n\t\"PlusMinus;\": \"\\u00B1\",\n\t\"plusmn;\": \"\\u00B1\",\n\t\"plusmn\": \"\\u00B1\",\n\t\"plussim;\": \"\\u2A26\",\n\t\"plustwo;\": \"\\u2A27\",\n\t\"pm;\": \"\\u00B1\",\n\t\"Poincareplane;\": \"\\u210C\",\n\t\"pointint;\": \"\\u2A15\",\n\t\"popf;\": \"\\uD835\\uDD61\",\n\t\"Popf;\": \"\\u2119\",\n\t\"pound;\": \"\\u00A3\",\n\t\"pound\": \"\\u00A3\",\n\t\"prap;\": \"\\u2AB7\",\n\t\"Pr;\": \"\\u2ABB\",\n\t\"pr;\": \"\\u227A\",\n\t\"prcue;\": \"\\u227C\",\n\t\"precapprox;\": \"\\u2AB7\",\n\t\"prec;\": \"\\u227A\",\n\t\"preccurlyeq;\": \"\\u227C\",\n\t\"Precedes;\": \"\\u227A\",\n\t\"PrecedesEqual;\": \"\\u2AAF\",\n\t\"PrecedesSlantEqual;\": \"\\u227C\",\n\t\"PrecedesTilde;\": \"\\u227E\",\n\t\"preceq;\": \"\\u2AAF\",\n\t\"precnapprox;\": \"\\u2AB9\",\n\t\"precneqq;\": \"\\u2AB5\",\n\t\"precnsim;\": \"\\u22E8\",\n\t\"pre;\": \"\\u2AAF\",\n\t\"prE;\": \"\\u2AB3\",\n\t\"precsim;\": \"\\u227E\",\n\t\"prime;\": \"\\u2032\",\n\t\"Prime;\": \"\\u2033\",\n\t\"primes;\": \"\\u2119\",\n\t\"prnap;\": \"\\u2AB9\",\n\t\"prnE;\": \"\\u2AB5\",\n\t\"prnsim;\": \"\\u22E8\",\n\t\"prod;\": \"\\u220F\",\n\t\"Product;\": \"\\u220F\",\n\t\"profalar;\": \"\\u232E\",\n\t\"profline;\": \"\\u2312\",\n\t\"profsurf;\": \"\\u2313\",\n\t\"prop;\": \"\\u221D\",\n\t\"Proportional;\": \"\\u221D\",\n\t\"Proportion;\": \"\\u2237\",\n\t\"propto;\": \"\\u221D\",\n\t\"prsim;\": \"\\u227E\",\n\t\"prurel;\": \"\\u22B0\",\n\t\"Pscr;\": \"\\uD835\\uDCAB\",\n\t\"pscr;\": \"\\uD835\\uDCC5\",\n\t\"Psi;\": \"\\u03A8\",\n\t\"psi;\": \"\\u03C8\",\n\t\"puncsp;\": \"\\u2008\",\n\t\"Qfr;\": \"\\uD835\\uDD14\",\n\t\"qfr;\": \"\\uD835\\uDD2E\",\n\t\"qint;\": \"\\u2A0C\",\n\t\"qopf;\": \"\\uD835\\uDD62\",\n\t\"Qopf;\": \"\\u211A\",\n\t\"qprime;\": \"\\u2057\",\n\t\"Qscr;\": \"\\uD835\\uDCAC\",\n\t\"qscr;\": \"\\uD835\\uDCC6\",\n\t\"quaternions;\": \"\\u210D\",\n\t\"quatint;\": \"\\u2A16\",\n\t\"quest;\": \"\\u003F\",\n\t\"questeq;\": \"\\u225F\",\n\t\"quot;\": \"\\u0022\",\n\t\"quot\": \"\\u0022\",\n\t\"QUOT;\": \"\\u0022\",\n\t\"QUOT\": \"\\u0022\",\n\t\"rAarr;\": \"\\u21DB\",\n\t\"race;\": \"\\u223D\\u0331\",\n\t\"Racute;\": \"\\u0154\",\n\t\"racute;\": \"\\u0155\",\n\t\"radic;\": \"\\u221A\",\n\t\"raemptyv;\": \"\\u29B3\",\n\t\"rang;\": \"\\u27E9\",\n\t\"Rang;\": \"\\u27EB\",\n\t\"rangd;\": \"\\u2992\",\n\t\"range;\": \"\\u29A5\",\n\t\"rangle;\": \"\\u27E9\",\n\t\"raquo;\": \"\\u00BB\",\n\t\"raquo\": \"\\u00BB\",\n\t\"rarrap;\": \"\\u2975\",\n\t\"rarrb;\": \"\\u21E5\",\n\t\"rarrbfs;\": \"\\u2920\",\n\t\"rarrc;\": \"\\u2933\",\n\t\"rarr;\": \"\\u2192\",\n\t\"Rarr;\": \"\\u21A0\",\n\t\"rArr;\": \"\\u21D2\",\n\t\"rarrfs;\": \"\\u291E\",\n\t\"rarrhk;\": \"\\u21AA\",\n\t\"rarrlp;\": \"\\u21AC\",\n\t\"rarrpl;\": \"\\u2945\",\n\t\"rarrsim;\": \"\\u2974\",\n\t\"Rarrtl;\": \"\\u2916\",\n\t\"rarrtl;\": \"\\u21A3\",\n\t\"rarrw;\": \"\\u219D\",\n\t\"ratail;\": \"\\u291A\",\n\t\"rAtail;\": \"\\u291C\",\n\t\"ratio;\": \"\\u2236\",\n\t\"rationals;\": \"\\u211A\",\n\t\"rbarr;\": \"\\u290D\",\n\t\"rBarr;\": \"\\u290F\",\n\t\"RBarr;\": \"\\u2910\",\n\t\"rbbrk;\": \"\\u2773\",\n\t\"rbrace;\": \"\\u007D\",\n\t\"rbrack;\": \"\\u005D\",\n\t\"rbrke;\": \"\\u298C\",\n\t\"rbrksld;\": \"\\u298E\",\n\t\"rbrkslu;\": \"\\u2990\",\n\t\"Rcaron;\": \"\\u0158\",\n\t\"rcaron;\": \"\\u0159\",\n\t\"Rcedil;\": \"\\u0156\",\n\t\"rcedil;\": \"\\u0157\",\n\t\"rceil;\": \"\\u2309\",\n\t\"rcub;\": \"\\u007D\",\n\t\"Rcy;\": \"\\u0420\",\n\t\"rcy;\": \"\\u0440\",\n\t\"rdca;\": \"\\u2937\",\n\t\"rdldhar;\": \"\\u2969\",\n\t\"rdquo;\": \"\\u201D\",\n\t\"rdquor;\": \"\\u201D\",\n\t\"rdsh;\": \"\\u21B3\",\n\t\"real;\": \"\\u211C\",\n\t\"realine;\": \"\\u211B\",\n\t\"realpart;\": \"\\u211C\",\n\t\"reals;\": \"\\u211D\",\n\t\"Re;\": \"\\u211C\",\n\t\"rect;\": \"\\u25AD\",\n\t\"reg;\": \"\\u00AE\",\n\t\"reg\": \"\\u00AE\",\n\t\"REG;\": \"\\u00AE\",\n\t\"REG\": \"\\u00AE\",\n\t\"ReverseElement;\": \"\\u220B\",\n\t\"ReverseEquilibrium;\": \"\\u21CB\",\n\t\"ReverseUpEquilibrium;\": \"\\u296F\",\n\t\"rfisht;\": \"\\u297D\",\n\t\"rfloor;\": \"\\u230B\",\n\t\"rfr;\": \"\\uD835\\uDD2F\",\n\t\"Rfr;\": \"\\u211C\",\n\t\"rHar;\": \"\\u2964\",\n\t\"rhard;\": \"\\u21C1\",\n\t\"rharu;\": \"\\u21C0\",\n\t\"rharul;\": \"\\u296C\",\n\t\"Rho;\": \"\\u03A1\",\n\t\"rho;\": \"\\u03C1\",\n\t\"rhov;\": \"\\u03F1\",\n\t\"RightAngleBracket;\": \"\\u27E9\",\n\t\"RightArrowBar;\": \"\\u21E5\",\n\t\"rightarrow;\": \"\\u2192\",\n\t\"RightArrow;\": \"\\u2192\",\n\t\"Rightarrow;\": \"\\u21D2\",\n\t\"RightArrowLeftArrow;\": \"\\u21C4\",\n\t\"rightarrowtail;\": \"\\u21A3\",\n\t\"RightCeiling;\": \"\\u2309\",\n\t\"RightDoubleBracket;\": \"\\u27E7\",\n\t\"RightDownTeeVector;\": \"\\u295D\",\n\t\"RightDownVectorBar;\": \"\\u2955\",\n\t\"RightDownVector;\": \"\\u21C2\",\n\t\"RightFloor;\": \"\\u230B\",\n\t\"rightharpoondown;\": \"\\u21C1\",\n\t\"rightharpoonup;\": \"\\u21C0\",\n\t\"rightleftarrows;\": \"\\u21C4\",\n\t\"rightleftharpoons;\": \"\\u21CC\",\n\t\"rightrightarrows;\": \"\\u21C9\",\n\t\"rightsquigarrow;\": \"\\u219D\",\n\t\"RightTeeArrow;\": \"\\u21A6\",\n\t\"RightTee;\": \"\\u22A2\",\n\t\"RightTeeVector;\": \"\\u295B\",\n\t\"rightthreetimes;\": \"\\u22CC\",\n\t\"RightTriangleBar;\": \"\\u29D0\",\n\t\"RightTriangle;\": \"\\u22B3\",\n\t\"RightTriangleEqual;\": \"\\u22B5\",\n\t\"RightUpDownVector;\": \"\\u294F\",\n\t\"RightUpTeeVector;\": \"\\u295C\",\n\t\"RightUpVectorBar;\": \"\\u2954\",\n\t\"RightUpVector;\": \"\\u21BE\",\n\t\"RightVectorBar;\": \"\\u2953\",\n\t\"RightVector;\": \"\\u21C0\",\n\t\"ring;\": \"\\u02DA\",\n\t\"risingdotseq;\": \"\\u2253\",\n\t\"rlarr;\": \"\\u21C4\",\n\t\"rlhar;\": \"\\u21CC\",\n\t\"rlm;\": \"\\u200F\",\n\t\"rmoustache;\": \"\\u23B1\",\n\t\"rmoust;\": \"\\u23B1\",\n\t\"rnmid;\": \"\\u2AEE\",\n\t\"roang;\": \"\\u27ED\",\n\t\"roarr;\": \"\\u21FE\",\n\t\"robrk;\": \"\\u27E7\",\n\t\"ropar;\": \"\\u2986\",\n\t\"ropf;\": \"\\uD835\\uDD63\",\n\t\"Ropf;\": \"\\u211D\",\n\t\"roplus;\": \"\\u2A2E\",\n\t\"rotimes;\": \"\\u2A35\",\n\t\"RoundImplies;\": \"\\u2970\",\n\t\"rpar;\": \"\\u0029\",\n\t\"rpargt;\": \"\\u2994\",\n\t\"rppolint;\": \"\\u2A12\",\n\t\"rrarr;\": \"\\u21C9\",\n\t\"Rrightarrow;\": \"\\u21DB\",\n\t\"rsaquo;\": \"\\u203A\",\n\t\"rscr;\": \"\\uD835\\uDCC7\",\n\t\"Rscr;\": \"\\u211B\",\n\t\"rsh;\": \"\\u21B1\",\n\t\"Rsh;\": \"\\u21B1\",\n\t\"rsqb;\": \"\\u005D\",\n\t\"rsquo;\": \"\\u2019\",\n\t\"rsquor;\": \"\\u2019\",\n\t\"rthree;\": \"\\u22CC\",\n\t\"rtimes;\": \"\\u22CA\",\n\t\"rtri;\": \"\\u25B9\",\n\t\"rtrie;\": \"\\u22B5\",\n\t\"rtrif;\": \"\\u25B8\",\n\t\"rtriltri;\": \"\\u29CE\",\n\t\"RuleDelayed;\": \"\\u29F4\",\n\t\"ruluhar;\": \"\\u2968\",\n\t\"rx;\": \"\\u211E\",\n\t\"Sacute;\": \"\\u015A\",\n\t\"sacute;\": \"\\u015B\",\n\t\"sbquo;\": \"\\u201A\",\n\t\"scap;\": \"\\u2AB8\",\n\t\"Scaron;\": \"\\u0160\",\n\t\"scaron;\": \"\\u0161\",\n\t\"Sc;\": \"\\u2ABC\",\n\t\"sc;\": \"\\u227B\",\n\t\"sccue;\": \"\\u227D\",\n\t\"sce;\": \"\\u2AB0\",\n\t\"scE;\": \"\\u2AB4\",\n\t\"Scedil;\": \"\\u015E\",\n\t\"scedil;\": \"\\u015F\",\n\t\"Scirc;\": \"\\u015C\",\n\t\"scirc;\": \"\\u015D\",\n\t\"scnap;\": \"\\u2ABA\",\n\t\"scnE;\": \"\\u2AB6\",\n\t\"scnsim;\": \"\\u22E9\",\n\t\"scpolint;\": \"\\u2A13\",\n\t\"scsim;\": \"\\u227F\",\n\t\"Scy;\": \"\\u0421\",\n\t\"scy;\": \"\\u0441\",\n\t\"sdotb;\": \"\\u22A1\",\n\t\"sdot;\": \"\\u22C5\",\n\t\"sdote;\": \"\\u2A66\",\n\t\"searhk;\": \"\\u2925\",\n\t\"searr;\": \"\\u2198\",\n\t\"seArr;\": \"\\u21D8\",\n\t\"searrow;\": \"\\u2198\",\n\t\"sect;\": \"\\u00A7\",\n\t\"sect\": \"\\u00A7\",\n\t\"semi;\": \"\\u003B\",\n\t\"seswar;\": \"\\u2929\",\n\t\"setminus;\": \"\\u2216\",\n\t\"setmn;\": \"\\u2216\",\n\t\"sext;\": \"\\u2736\",\n\t\"Sfr;\": \"\\uD835\\uDD16\",\n\t\"sfr;\": \"\\uD835\\uDD30\",\n\t\"sfrown;\": \"\\u2322\",\n\t\"sharp;\": \"\\u266F\",\n\t\"SHCHcy;\": \"\\u0429\",\n\t\"shchcy;\": \"\\u0449\",\n\t\"SHcy;\": \"\\u0428\",\n\t\"shcy;\": \"\\u0448\",\n\t\"ShortDownArrow;\": \"\\u2193\",\n\t\"ShortLeftArrow;\": \"\\u2190\",\n\t\"shortmid;\": \"\\u2223\",\n\t\"shortparallel;\": \"\\u2225\",\n\t\"ShortRightArrow;\": \"\\u2192\",\n\t\"ShortUpArrow;\": \"\\u2191\",\n\t\"shy;\": \"\\u00AD\",\n\t\"shy\": \"\\u00AD\",\n\t\"Sigma;\": \"\\u03A3\",\n\t\"sigma;\": \"\\u03C3\",\n\t\"sigmaf;\": \"\\u03C2\",\n\t\"sigmav;\": \"\\u03C2\",\n\t\"sim;\": \"\\u223C\",\n\t\"simdot;\": \"\\u2A6A\",\n\t\"sime;\": \"\\u2243\",\n\t\"simeq;\": \"\\u2243\",\n\t\"simg;\": \"\\u2A9E\",\n\t\"simgE;\": \"\\u2AA0\",\n\t\"siml;\": \"\\u2A9D\",\n\t\"simlE;\": \"\\u2A9F\",\n\t\"simne;\": \"\\u2246\",\n\t\"simplus;\": \"\\u2A24\",\n\t\"simrarr;\": \"\\u2972\",\n\t\"slarr;\": \"\\u2190\",\n\t\"SmallCircle;\": \"\\u2218\",\n\t\"smallsetminus;\": \"\\u2216\",\n\t\"smashp;\": \"\\u2A33\",\n\t\"smeparsl;\": \"\\u29E4\",\n\t\"smid;\": \"\\u2223\",\n\t\"smile;\": \"\\u2323\",\n\t\"smt;\": \"\\u2AAA\",\n\t\"smte;\": \"\\u2AAC\",\n\t\"smtes;\": \"\\u2AAC\\uFE00\",\n\t\"SOFTcy;\": \"\\u042C\",\n\t\"softcy;\": \"\\u044C\",\n\t\"solbar;\": \"\\u233F\",\n\t\"solb;\": \"\\u29C4\",\n\t\"sol;\": \"\\u002F\",\n\t\"Sopf;\": \"\\uD835\\uDD4A\",\n\t\"sopf;\": \"\\uD835\\uDD64\",\n\t\"spades;\": \"\\u2660\",\n\t\"spadesuit;\": \"\\u2660\",\n\t\"spar;\": \"\\u2225\",\n\t\"sqcap;\": \"\\u2293\",\n\t\"sqcaps;\": \"\\u2293\\uFE00\",\n\t\"sqcup;\": \"\\u2294\",\n\t\"sqcups;\": \"\\u2294\\uFE00\",\n\t\"Sqrt;\": \"\\u221A\",\n\t\"sqsub;\": \"\\u228F\",\n\t\"sqsube;\": \"\\u2291\",\n\t\"sqsubset;\": \"\\u228F\",\n\t\"sqsubseteq;\": \"\\u2291\",\n\t\"sqsup;\": \"\\u2290\",\n\t\"sqsupe;\": \"\\u2292\",\n\t\"sqsupset;\": \"\\u2290\",\n\t\"sqsupseteq;\": \"\\u2292\",\n\t\"square;\": \"\\u25A1\",\n\t\"Square;\": \"\\u25A1\",\n\t\"SquareIntersection;\": \"\\u2293\",\n\t\"SquareSubset;\": \"\\u228F\",\n\t\"SquareSubsetEqual;\": \"\\u2291\",\n\t\"SquareSuperset;\": \"\\u2290\",\n\t\"SquareSupersetEqual;\": \"\\u2292\",\n\t\"SquareUnion;\": \"\\u2294\",\n\t\"squarf;\": \"\\u25AA\",\n\t\"squ;\": \"\\u25A1\",\n\t\"squf;\": \"\\u25AA\",\n\t\"srarr;\": \"\\u2192\",\n\t\"Sscr;\": \"\\uD835\\uDCAE\",\n\t\"sscr;\": \"\\uD835\\uDCC8\",\n\t\"ssetmn;\": \"\\u2216\",\n\t\"ssmile;\": \"\\u2323\",\n\t\"sstarf;\": \"\\u22C6\",\n\t\"Star;\": \"\\u22C6\",\n\t\"star;\": \"\\u2606\",\n\t\"starf;\": \"\\u2605\",\n\t\"straightepsilon;\": \"\\u03F5\",\n\t\"straightphi;\": \"\\u03D5\",\n\t\"strns;\": \"\\u00AF\",\n\t\"sub;\": \"\\u2282\",\n\t\"Sub;\": \"\\u22D0\",\n\t\"subdot;\": \"\\u2ABD\",\n\t\"subE;\": \"\\u2AC5\",\n\t\"sube;\": \"\\u2286\",\n\t\"subedot;\": \"\\u2AC3\",\n\t\"submult;\": \"\\u2AC1\",\n\t\"subnE;\": \"\\u2ACB\",\n\t\"subne;\": \"\\u228A\",\n\t\"subplus;\": \"\\u2ABF\",\n\t\"subrarr;\": \"\\u2979\",\n\t\"subset;\": \"\\u2282\",\n\t\"Subset;\": \"\\u22D0\",\n\t\"subseteq;\": \"\\u2286\",\n\t\"subseteqq;\": \"\\u2AC5\",\n\t\"SubsetEqual;\": \"\\u2286\",\n\t\"subsetneq;\": \"\\u228A\",\n\t\"subsetneqq;\": \"\\u2ACB\",\n\t\"subsim;\": \"\\u2AC7\",\n\t\"subsub;\": \"\\u2AD5\",\n\t\"subsup;\": \"\\u2AD3\",\n\t\"succapprox;\": \"\\u2AB8\",\n\t\"succ;\": \"\\u227B\",\n\t\"succcurlyeq;\": \"\\u227D\",\n\t\"Succeeds;\": \"\\u227B\",\n\t\"SucceedsEqual;\": \"\\u2AB0\",\n\t\"SucceedsSlantEqual;\": \"\\u227D\",\n\t\"SucceedsTilde;\": \"\\u227F\",\n\t\"succeq;\": \"\\u2AB0\",\n\t\"succnapprox;\": \"\\u2ABA\",\n\t\"succneqq;\": \"\\u2AB6\",\n\t\"succnsim;\": \"\\u22E9\",\n\t\"succsim;\": \"\\u227F\",\n\t\"SuchThat;\": \"\\u220B\",\n\t\"sum;\": \"\\u2211\",\n\t\"Sum;\": \"\\u2211\",\n\t\"sung;\": \"\\u266A\",\n\t\"sup1;\": \"\\u00B9\",\n\t\"sup1\": \"\\u00B9\",\n\t\"sup2;\": \"\\u00B2\",\n\t\"sup2\": \"\\u00B2\",\n\t\"sup3;\": \"\\u00B3\",\n\t\"sup3\": \"\\u00B3\",\n\t\"sup;\": \"\\u2283\",\n\t\"Sup;\": \"\\u22D1\",\n\t\"supdot;\": \"\\u2ABE\",\n\t\"supdsub;\": \"\\u2AD8\",\n\t\"supE;\": \"\\u2AC6\",\n\t\"supe;\": \"\\u2287\",\n\t\"supedot;\": \"\\u2AC4\",\n\t\"Superset;\": \"\\u2283\",\n\t\"SupersetEqual;\": \"\\u2287\",\n\t\"suphsol;\": \"\\u27C9\",\n\t\"suphsub;\": \"\\u2AD7\",\n\t\"suplarr;\": \"\\u297B\",\n\t\"supmult;\": \"\\u2AC2\",\n\t\"supnE;\": \"\\u2ACC\",\n\t\"supne;\": \"\\u228B\",\n\t\"supplus;\": \"\\u2AC0\",\n\t\"supset;\": \"\\u2283\",\n\t\"Supset;\": \"\\u22D1\",\n\t\"supseteq;\": \"\\u2287\",\n\t\"supseteqq;\": \"\\u2AC6\",\n\t\"supsetneq;\": \"\\u228B\",\n\t\"supsetneqq;\": \"\\u2ACC\",\n\t\"supsim;\": \"\\u2AC8\",\n\t\"supsub;\": \"\\u2AD4\",\n\t\"supsup;\": \"\\u2AD6\",\n\t\"swarhk;\": \"\\u2926\",\n\t\"swarr;\": \"\\u2199\",\n\t\"swArr;\": \"\\u21D9\",\n\t\"swarrow;\": \"\\u2199\",\n\t\"swnwar;\": \"\\u292A\",\n\t\"szlig;\": \"\\u00DF\",\n\t\"szlig\": \"\\u00DF\",\n\t\"Tab;\": \"\\u0009\",\n\t\"target;\": \"\\u2316\",\n\t\"Tau;\": \"\\u03A4\",\n\t\"tau;\": \"\\u03C4\",\n\t\"tbrk;\": \"\\u23B4\",\n\t\"Tcaron;\": \"\\u0164\",\n\t\"tcaron;\": \"\\u0165\",\n\t\"Tcedil;\": \"\\u0162\",\n\t\"tcedil;\": \"\\u0163\",\n\t\"Tcy;\": \"\\u0422\",\n\t\"tcy;\": \"\\u0442\",\n\t\"tdot;\": \"\\u20DB\",\n\t\"telrec;\": \"\\u2315\",\n\t\"Tfr;\": \"\\uD835\\uDD17\",\n\t\"tfr;\": \"\\uD835\\uDD31\",\n\t\"there4;\": \"\\u2234\",\n\t\"therefore;\": \"\\u2234\",\n\t\"Therefore;\": \"\\u2234\",\n\t\"Theta;\": \"\\u0398\",\n\t\"theta;\": \"\\u03B8\",\n\t\"thetasym;\": \"\\u03D1\",\n\t\"thetav;\": \"\\u03D1\",\n\t\"thickapprox;\": \"\\u2248\",\n\t\"thicksim;\": \"\\u223C\",\n\t\"ThickSpace;\": \"\\u205F\\u200A\",\n\t\"ThinSpace;\": \"\\u2009\",\n\t\"thinsp;\": \"\\u2009\",\n\t\"thkap;\": \"\\u2248\",\n\t\"thksim;\": \"\\u223C\",\n\t\"THORN;\": \"\\u00DE\",\n\t\"THORN\": \"\\u00DE\",\n\t\"thorn;\": \"\\u00FE\",\n\t\"thorn\": \"\\u00FE\",\n\t\"tilde;\": \"\\u02DC\",\n\t\"Tilde;\": \"\\u223C\",\n\t\"TildeEqual;\": \"\\u2243\",\n\t\"TildeFullEqual;\": \"\\u2245\",\n\t\"TildeTilde;\": \"\\u2248\",\n\t\"timesbar;\": \"\\u2A31\",\n\t\"timesb;\": \"\\u22A0\",\n\t\"times;\": \"\\u00D7\",\n\t\"times\": \"\\u00D7\",\n\t\"timesd;\": \"\\u2A30\",\n\t\"tint;\": \"\\u222D\",\n\t\"toea;\": \"\\u2928\",\n\t\"topbot;\": \"\\u2336\",\n\t\"topcir;\": \"\\u2AF1\",\n\t\"top;\": \"\\u22A4\",\n\t\"Topf;\": \"\\uD835\\uDD4B\",\n\t\"topf;\": \"\\uD835\\uDD65\",\n\t\"topfork;\": \"\\u2ADA\",\n\t\"tosa;\": \"\\u2929\",\n\t\"tprime;\": \"\\u2034\",\n\t\"trade;\": \"\\u2122\",\n\t\"TRADE;\": \"\\u2122\",\n\t\"triangle;\": \"\\u25B5\",\n\t\"triangledown;\": \"\\u25BF\",\n\t\"triangleleft;\": \"\\u25C3\",\n\t\"trianglelefteq;\": \"\\u22B4\",\n\t\"triangleq;\": \"\\u225C\",\n\t\"triangleright;\": \"\\u25B9\",\n\t\"trianglerighteq;\": \"\\u22B5\",\n\t\"tridot;\": \"\\u25EC\",\n\t\"trie;\": \"\\u225C\",\n\t\"triminus;\": \"\\u2A3A\",\n\t\"TripleDot;\": \"\\u20DB\",\n\t\"triplus;\": \"\\u2A39\",\n\t\"trisb;\": \"\\u29CD\",\n\t\"tritime;\": \"\\u2A3B\",\n\t\"trpezium;\": \"\\u23E2\",\n\t\"Tscr;\": \"\\uD835\\uDCAF\",\n\t\"tscr;\": \"\\uD835\\uDCC9\",\n\t\"TScy;\": \"\\u0426\",\n\t\"tscy;\": \"\\u0446\",\n\t\"TSHcy;\": \"\\u040B\",\n\t\"tshcy;\": \"\\u045B\",\n\t\"Tstrok;\": \"\\u0166\",\n\t\"tstrok;\": \"\\u0167\",\n\t\"twixt;\": \"\\u226C\",\n\t\"twoheadleftarrow;\": \"\\u219E\",\n\t\"twoheadrightarrow;\": \"\\u21A0\",\n\t\"Uacute;\": \"\\u00DA\",\n\t\"Uacute\": \"\\u00DA\",\n\t\"uacute;\": \"\\u00FA\",\n\t\"uacute\": \"\\u00FA\",\n\t\"uarr;\": \"\\u2191\",\n\t\"Uarr;\": \"\\u219F\",\n\t\"uArr;\": \"\\u21D1\",\n\t\"Uarrocir;\": \"\\u2949\",\n\t\"Ubrcy;\": \"\\u040E\",\n\t\"ubrcy;\": \"\\u045E\",\n\t\"Ubreve;\": \"\\u016C\",\n\t\"ubreve;\": \"\\u016D\",\n\t\"Ucirc;\": \"\\u00DB\",\n\t\"Ucirc\": \"\\u00DB\",\n\t\"ucirc;\": \"\\u00FB\",\n\t\"ucirc\": \"\\u00FB\",\n\t\"Ucy;\": \"\\u0423\",\n\t\"ucy;\": \"\\u0443\",\n\t\"udarr;\": \"\\u21C5\",\n\t\"Udblac;\": \"\\u0170\",\n\t\"udblac;\": \"\\u0171\",\n\t\"udhar;\": \"\\u296E\",\n\t\"ufisht;\": \"\\u297E\",\n\t\"Ufr;\": \"\\uD835\\uDD18\",\n\t\"ufr;\": \"\\uD835\\uDD32\",\n\t\"Ugrave;\": \"\\u00D9\",\n\t\"Ugrave\": \"\\u00D9\",\n\t\"ugrave;\": \"\\u00F9\",\n\t\"ugrave\": \"\\u00F9\",\n\t\"uHar;\": \"\\u2963\",\n\t\"uharl;\": \"\\u21BF\",\n\t\"uharr;\": \"\\u21BE\",\n\t\"uhblk;\": \"\\u2580\",\n\t\"ulcorn;\": \"\\u231C\",\n\t\"ulcorner;\": \"\\u231C\",\n\t\"ulcrop;\": \"\\u230F\",\n\t\"ultri;\": \"\\u25F8\",\n\t\"Umacr;\": \"\\u016A\",\n\t\"umacr;\": \"\\u016B\",\n\t\"uml;\": \"\\u00A8\",\n\t\"uml\": \"\\u00A8\",\n\t\"UnderBar;\": \"\\u005F\",\n\t\"UnderBrace;\": \"\\u23DF\",\n\t\"UnderBracket;\": \"\\u23B5\",\n\t\"UnderParenthesis;\": \"\\u23DD\",\n\t\"Union;\": \"\\u22C3\",\n\t\"UnionPlus;\": \"\\u228E\",\n\t\"Uogon;\": \"\\u0172\",\n\t\"uogon;\": \"\\u0173\",\n\t\"Uopf;\": \"\\uD835\\uDD4C\",\n\t\"uopf;\": \"\\uD835\\uDD66\",\n\t\"UpArrowBar;\": \"\\u2912\",\n\t\"uparrow;\": \"\\u2191\",\n\t\"UpArrow;\": \"\\u2191\",\n\t\"Uparrow;\": \"\\u21D1\",\n\t\"UpArrowDownArrow;\": \"\\u21C5\",\n\t\"updownarrow;\": \"\\u2195\",\n\t\"UpDownArrow;\": \"\\u2195\",\n\t\"Updownarrow;\": \"\\u21D5\",\n\t\"UpEquilibrium;\": \"\\u296E\",\n\t\"upharpoonleft;\": \"\\u21BF\",\n\t\"upharpoonright;\": \"\\u21BE\",\n\t\"uplus;\": \"\\u228E\",\n\t\"UpperLeftArrow;\": \"\\u2196\",\n\t\"UpperRightArrow;\": \"\\u2197\",\n\t\"upsi;\": \"\\u03C5\",\n\t\"Upsi;\": \"\\u03D2\",\n\t\"upsih;\": \"\\u03D2\",\n\t\"Upsilon;\": \"\\u03A5\",\n\t\"upsilon;\": \"\\u03C5\",\n\t\"UpTeeArrow;\": \"\\u21A5\",\n\t\"UpTee;\": \"\\u22A5\",\n\t\"upuparrows;\": \"\\u21C8\",\n\t\"urcorn;\": \"\\u231D\",\n\t\"urcorner;\": \"\\u231D\",\n\t\"urcrop;\": \"\\u230E\",\n\t\"Uring;\": \"\\u016E\",\n\t\"uring;\": \"\\u016F\",\n\t\"urtri;\": \"\\u25F9\",\n\t\"Uscr;\": \"\\uD835\\uDCB0\",\n\t\"uscr;\": \"\\uD835\\uDCCA\",\n\t\"utdot;\": \"\\u22F0\",\n\t\"Utilde;\": \"\\u0168\",\n\t\"utilde;\": \"\\u0169\",\n\t\"utri;\": \"\\u25B5\",\n\t\"utrif;\": \"\\u25B4\",\n\t\"uuarr;\": \"\\u21C8\",\n\t\"Uuml;\": \"\\u00DC\",\n\t\"Uuml\": \"\\u00DC\",\n\t\"uuml;\": \"\\u00FC\",\n\t\"uuml\": \"\\u00FC\",\n\t\"uwangle;\": \"\\u29A7\",\n\t\"vangrt;\": \"\\u299C\",\n\t\"varepsilon;\": \"\\u03F5\",\n\t\"varkappa;\": \"\\u03F0\",\n\t\"varnothing;\": \"\\u2205\",\n\t\"varphi;\": \"\\u03D5\",\n\t\"varpi;\": \"\\u03D6\",\n\t\"varpropto;\": \"\\u221D\",\n\t\"varr;\": \"\\u2195\",\n\t\"vArr;\": \"\\u21D5\",\n\t\"varrho;\": \"\\u03F1\",\n\t\"varsigma;\": \"\\u03C2\",\n\t\"varsubsetneq;\": \"\\u228A\\uFE00\",\n\t\"varsubsetneqq;\": \"\\u2ACB\\uFE00\",\n\t\"varsupsetneq;\": \"\\u228B\\uFE00\",\n\t\"varsupsetneqq;\": \"\\u2ACC\\uFE00\",\n\t\"vartheta;\": \"\\u03D1\",\n\t\"vartriangleleft;\": \"\\u22B2\",\n\t\"vartriangleright;\": \"\\u22B3\",\n\t\"vBar;\": \"\\u2AE8\",\n\t\"Vbar;\": \"\\u2AEB\",\n\t\"vBarv;\": \"\\u2AE9\",\n\t\"Vcy;\": \"\\u0412\",\n\t\"vcy;\": \"\\u0432\",\n\t\"vdash;\": \"\\u22A2\",\n\t\"vDash;\": \"\\u22A8\",\n\t\"Vdash;\": \"\\u22A9\",\n\t\"VDash;\": \"\\u22AB\",\n\t\"Vdashl;\": \"\\u2AE6\",\n\t\"veebar;\": \"\\u22BB\",\n\t\"vee;\": \"\\u2228\",\n\t\"Vee;\": \"\\u22C1\",\n\t\"veeeq;\": \"\\u225A\",\n\t\"vellip;\": \"\\u22EE\",\n\t\"verbar;\": \"\\u007C\",\n\t\"Verbar;\": \"\\u2016\",\n\t\"vert;\": \"\\u007C\",\n\t\"Vert;\": \"\\u2016\",\n\t\"VerticalBar;\": \"\\u2223\",\n\t\"VerticalLine;\": \"\\u007C\",\n\t\"VerticalSeparator;\": \"\\u2758\",\n\t\"VerticalTilde;\": \"\\u2240\",\n\t\"VeryThinSpace;\": \"\\u200A\",\n\t\"Vfr;\": \"\\uD835\\uDD19\",\n\t\"vfr;\": \"\\uD835\\uDD33\",\n\t\"vltri;\": \"\\u22B2\",\n\t\"vnsub;\": \"\\u2282\\u20D2\",\n\t\"vnsup;\": \"\\u2283\\u20D2\",\n\t\"Vopf;\": \"\\uD835\\uDD4D\",\n\t\"vopf;\": \"\\uD835\\uDD67\",\n\t\"vprop;\": \"\\u221D\",\n\t\"vrtri;\": \"\\u22B3\",\n\t\"Vscr;\": \"\\uD835\\uDCB1\",\n\t\"vscr;\": \"\\uD835\\uDCCB\",\n\t\"vsubnE;\": \"\\u2ACB\\uFE00\",\n\t\"vsubne;\": \"\\u228A\\uFE00\",\n\t\"vsupnE;\": \"\\u2ACC\\uFE00\",\n\t\"vsupne;\": \"\\u228B\\uFE00\",\n\t\"Vvdash;\": \"\\u22AA\",\n\t\"vzigzag;\": \"\\u299A\",\n\t\"Wcirc;\": \"\\u0174\",\n\t\"wcirc;\": \"\\u0175\",\n\t\"wedbar;\": \"\\u2A5F\",\n\t\"wedge;\": \"\\u2227\",\n\t\"Wedge;\": \"\\u22C0\",\n\t\"wedgeq;\": \"\\u2259\",\n\t\"weierp;\": \"\\u2118\",\n\t\"Wfr;\": \"\\uD835\\uDD1A\",\n\t\"wfr;\": \"\\uD835\\uDD34\",\n\t\"Wopf;\": \"\\uD835\\uDD4E\",\n\t\"wopf;\": \"\\uD835\\uDD68\",\n\t\"wp;\": \"\\u2118\",\n\t\"wr;\": \"\\u2240\",\n\t\"wreath;\": \"\\u2240\",\n\t\"Wscr;\": \"\\uD835\\uDCB2\",\n\t\"wscr;\": \"\\uD835\\uDCCC\",\n\t\"xcap;\": \"\\u22C2\",\n\t\"xcirc;\": \"\\u25EF\",\n\t\"xcup;\": \"\\u22C3\",\n\t\"xdtri;\": \"\\u25BD\",\n\t\"Xfr;\": \"\\uD835\\uDD1B\",\n\t\"xfr;\": \"\\uD835\\uDD35\",\n\t\"xharr;\": \"\\u27F7\",\n\t\"xhArr;\": \"\\u27FA\",\n\t\"Xi;\": \"\\u039E\",\n\t\"xi;\": \"\\u03BE\",\n\t\"xlarr;\": \"\\u27F5\",\n\t\"xlArr;\": \"\\u27F8\",\n\t\"xmap;\": \"\\u27FC\",\n\t\"xnis;\": \"\\u22FB\",\n\t\"xodot;\": \"\\u2A00\",\n\t\"Xopf;\": \"\\uD835\\uDD4F\",\n\t\"xopf;\": \"\\uD835\\uDD69\",\n\t\"xoplus;\": \"\\u2A01\",\n\t\"xotime;\": \"\\u2A02\",\n\t\"xrarr;\": \"\\u27F6\",\n\t\"xrArr;\": \"\\u27F9\",\n\t\"Xscr;\": \"\\uD835\\uDCB3\",\n\t\"xscr;\": \"\\uD835\\uDCCD\",\n\t\"xsqcup;\": \"\\u2A06\",\n\t\"xuplus;\": \"\\u2A04\",\n\t\"xutri;\": \"\\u25B3\",\n\t\"xvee;\": \"\\u22C1\",\n\t\"xwedge;\": \"\\u22C0\",\n\t\"Yacute;\": \"\\u00DD\",\n\t\"Yacute\": \"\\u00DD\",\n\t\"yacute;\": \"\\u00FD\",\n\t\"yacute\": \"\\u00FD\",\n\t\"YAcy;\": \"\\u042F\",\n\t\"yacy;\": \"\\u044F\",\n\t\"Ycirc;\": \"\\u0176\",\n\t\"ycirc;\": \"\\u0177\",\n\t\"Ycy;\": \"\\u042B\",\n\t\"ycy;\": \"\\u044B\",\n\t\"yen;\": \"\\u00A5\",\n\t\"yen\": \"\\u00A5\",\n\t\"Yfr;\": \"\\uD835\\uDD1C\",\n\t\"yfr;\": \"\\uD835\\uDD36\",\n\t\"YIcy;\": \"\\u0407\",\n\t\"yicy;\": \"\\u0457\",\n\t\"Yopf;\": \"\\uD835\\uDD50\",\n\t\"yopf;\": \"\\uD835\\uDD6A\",\n\t\"Yscr;\": \"\\uD835\\uDCB4\",\n\t\"yscr;\": \"\\uD835\\uDCCE\",\n\t\"YUcy;\": \"\\u042E\",\n\t\"yucy;\": \"\\u044E\",\n\t\"yuml;\": \"\\u00FF\",\n\t\"yuml\": \"\\u00FF\",\n\t\"Yuml;\": \"\\u0178\",\n\t\"Zacute;\": \"\\u0179\",\n\t\"zacute;\": \"\\u017A\",\n\t\"Zcaron;\": \"\\u017D\",\n\t\"zcaron;\": \"\\u017E\",\n\t\"Zcy;\": \"\\u0417\",\n\t\"zcy;\": \"\\u0437\",\n\t\"Zdot;\": \"\\u017B\",\n\t\"zdot;\": \"\\u017C\",\n\t\"zeetrf;\": \"\\u2128\",\n\t\"ZeroWidthSpace;\": \"\\u200B\",\n\t\"Zeta;\": \"\\u0396\",\n\t\"zeta;\": \"\\u03B6\",\n\t\"zfr;\": \"\\uD835\\uDD37\",\n\t\"Zfr;\": \"\\u2128\",\n\t\"ZHcy;\": \"\\u0416\",\n\t\"zhcy;\": \"\\u0436\",\n\t\"zigrarr;\": \"\\u21DD\",\n\t\"zopf;\": \"\\uD835\\uDD6B\",\n\t\"Zopf;\": \"\\u2124\",\n\t\"Zscr;\": \"\\uD835\\uDCB5\",\n\t\"zscr;\": \"\\uD835\\uDCCF\",\n\t\"zwj;\": \"\\u200D\",\n\t\"zwnj;\": \"\\u200C\"\n};\n\n},\n{}],\n13:[function(_dereq_,module,exports){\nvar util = _dereq_('util/');\n\nvar pSlice = Array.prototype.slice;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nvar assert = module.exports = ok;\n\nassert.AssertionError = function AssertionError(options) {\n  this.name = 'AssertionError';\n  this.actual = options.actual;\n  this.expected = options.expected;\n  this.operator = options.operator;\n  if (options.message) {\n    this.message = options.message;\n    this.generatedMessage = false;\n  } else {\n    this.message = getMessage(this);\n    this.generatedMessage = true;\n  }\n  var stackStartFunction = options.stackStartFunction || fail;\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, stackStartFunction);\n  }\n  else {\n    var err = new Error();\n    if (err.stack) {\n      var out = err.stack;\n      var fn_name = stackStartFunction.name;\n      var idx = out.indexOf('\\n' + fn_name);\n      if (idx >= 0) {\n        var next_line = out.indexOf('\\n', idx + 1);\n        out = out.substring(next_line + 1);\n      }\n\n      this.stack = out;\n    }\n  }\n};\nutil.inherits(assert.AssertionError, Error);\n\nfunction replacer(key, value) {\n  if (util.isUndefined(value)) {\n    return '' + value;\n  }\n  if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {\n    return value.toString();\n  }\n  if (util.isFunction(value) || util.isRegExp(value)) {\n    return value.toString();\n  }\n  return value;\n}\n\nfunction truncate(s, n) {\n  if (util.isString(s)) {\n    return s.length < n ? s : s.slice(0, n);\n  } else {\n    return s;\n  }\n}\n\nfunction getMessage(self) {\n  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +\n         self.operator + ' ' +\n         truncate(JSON.stringify(self.expected, replacer), 128);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n  throw new assert.AssertionError({\n    message: message,\n    actual: actual,\n    expected: expected,\n    operator: operator,\n    stackStartFunction: stackStartFunction\n  });\n}\nassert.fail = fail;\n\nfunction ok(value, message) {\n  if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\nassert.equal = function equal(actual, expected, message) {\n  if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (actual == expected) {\n    fail(actual, expected, message, '!=', assert.notEqual);\n  }\n};\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (!_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n  }\n};\n\nfunction _deepEqual(actual, expected) {\n  if (actual === expected) {\n    return true;\n\n  } else if (util.isBuffer(actual) && util.isBuffer(expected)) {\n    if (actual.length != expected.length) return false;\n\n    for (var i = 0; i < actual.length; i++) {\n      if (actual[i] !== expected[i]) return false;\n    }\n\n    return true;\n  } else if (util.isDate(actual) && util.isDate(expected)) {\n    return actual.getTime() === expected.getTime();\n  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n    return actual.source === expected.source &&\n           actual.global === expected.global &&\n           actual.multiline === expected.multiline &&\n           actual.lastIndex === expected.lastIndex &&\n           actual.ignoreCase === expected.ignoreCase;\n  } else if (!util.isObject(actual) && !util.isObject(expected)) {\n    return actual == expected;\n  } else {\n    return objEquiv(actual, expected);\n  }\n}\n\nfunction isArguments(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))\n    return false;\n  if (a.prototype !== b.prototype) return false;\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return _deepEqual(a, b);\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b),\n        key, i;\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  if (ka.length != kb.length)\n    return false;\n  ka.sort();\n  kb.sort();\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!_deepEqual(a[key], b[key])) return false;\n  }\n  return true;\n}\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n  }\n};\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (actual !== expected) {\n    fail(actual, expected, message, '===', assert.strictEqual);\n  }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (actual === expected) {\n    fail(actual, expected, message, '!==', assert.notStrictEqual);\n  }\n};\n\nfunction expectedException(actual, expected) {\n  if (!actual || !expected) {\n    return false;\n  }\n\n  if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n    return expected.test(actual);\n  } else if (actual instanceof expected) {\n    return true;\n  } else if (expected.call({}, actual) === true) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n  var actual;\n\n  if (util.isString(expected)) {\n    message = expected;\n    expected = null;\n  }\n\n  try {\n    block();\n  } catch (e) {\n    actual = e;\n  }\n\n  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n            (message ? ' ' + message : '.');\n\n  if (shouldThrow && !actual) {\n    fail(actual, expected, 'Missing expected exception' + message);\n  }\n\n  if (!shouldThrow && expectedException(actual, expected)) {\n    fail(actual, expected, 'Got unwanted exception' + message);\n  }\n\n  if ((shouldThrow && actual && expected &&\n      !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n    throw actual;\n  }\n}\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\nassert.doesNotThrow = function(block, /*optional*/message) {\n  _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (hasOwn.call(obj, key)) keys.push(key);\n  }\n  return keys;\n};\n\n},\n{\"util/\":15}],\n14:[function(_dereq_,module,exports){\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n},\n{}],\n15:[function(_dereq_,module,exports){\n(function (process,global){\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\nexports.deprecate = function(fn, msg) {\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\nfunction inspect(obj, opts) {\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    ctx.showHidden = opts;\n  } else if (opts) {\n    exports._extend(ctx, opts);\n  }\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      value.inspect !== exports.inspect &&\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = _dereq_('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\nexports.inherits = _dereq_('inherits');\n\nexports._extend = function(origin, add) {\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,_dereq_(\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\"),typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},\n{\"./support/isBuffer\":14,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}],\n16:[function(_dereq_,module,exports){\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\nEventEmitter.defaultMaxListeners = 10;\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        throw TypeError('Uncaught, unspecified \"error\" event.');\n      }\n      return false;\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    this._events[type].push(listener);\n  else\n    this._events[type] = [this._events[type], listener];\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      console.trace();\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},\n{}],\n17:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},\n{}],\n18:[function(_dereq_,module,exports){\n\nvar process = module.exports = {};\n\nprocess.nextTick = (function () {\n    var canSetImmediate = typeof window !== 'undefined'\n    && window.setImmediate;\n    var canPost = typeof window !== 'undefined'\n    && window.postMessage && window.addEventListener\n    ;\n\n    if (canSetImmediate) {\n        return function (f) { return window.setImmediate(f) };\n    }\n\n    if (canPost) {\n        var queue = [];\n        window.addEventListener('message', function (ev) {\n            var source = ev.source;\n            if ((source === window || source === null) && ev.data === 'process-tick') {\n                ev.stopPropagation();\n                if (queue.length > 0) {\n                    var fn = queue.shift();\n                    fn();\n                }\n            }\n        }, true);\n\n        return function nextTick(fn) {\n            queue.push(fn);\n            window.postMessage('process-tick', '*');\n        };\n    }\n\n    return function nextTick(fn) {\n        setTimeout(fn, 0);\n    };\n})();\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n}\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\n\n},\n{}],\n19:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(14)\n},\n{}],\n20:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(15)\n},\n{\"./support/isBuffer\":19,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}]},{},[9])\n(9)\n\n});\n\nace.define(\"ace/mode/html_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar SAXParser = require(\"./html/saxparser\").SAXParser;\n\nvar errorTypes = {\n    \"expected-doctype-but-got-start-tag\": \"info\",\n    \"expected-doctype-but-got-chars\": \"info\",\n    \"non-html-root\": \"info\"\n};\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.context = null;\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.setOptions = function(options) {\n        this.context = options.context;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return;\n        var parser = new SAXParser();\n        var errors = [];\n        var noop = function(){};\n        parser.contentHandler = {\n           startDocument: noop,\n           endDocument: noop,\n           startElement: noop,\n           endElement: noop,\n           characters: noop\n        };\n        parser.errorHandler = {\n            error: function(message, location, code) {\n                errors.push({\n                    row: location.line,\n                    column: location.column,\n                    text: message,\n                    type: errorTypes[code] || \"error\"\n                });\n            }\n        };\n        if (this.context)\n            parser.parseFragment(value, this.context);\n        else\n            parser.parse(value);\n        this.sender.emit(\"error\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/worker-javascript.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/javascript/jshint\",[], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/browserify/node_modules/events/events.js\":[function(_dereq_,module,exports){\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\nEventEmitter.defaultMaxListeners = 10;\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      }\n      throw TypeError('Uncaught, unspecified \"error\" event.');\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    this._events[type].push(listener);\n  else\n    this._events[type] = [this._events[type], listener];\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],\"/node_modules/jshint/data/ascii-identifier-data.js\":[function(_dereq_,module,exports){\nvar identifierStartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierStartTable[i] =\n    i === 36 ||           // $\n    i >= 65 && i <= 90 || // A-Z\n    i === 95 ||           // _\n    i >= 97 && i <= 122;  // a-z\n}\n\nvar identifierPartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierPartTable[i] =\n    identifierStartTable[i] || // $, _, A-Z, a-z\n    i >= 48 && i <= 57;        // 0-9\n}\n\nmodule.exports = {\n  asciiIdentifierStartTable: identifierStartTable,\n  asciiIdentifierPartTable: identifierPartTable\n};\n\n},{}],\"/node_modules/jshint/lodash.js\":[function(_dereq_,module,exports){\n(function (global){\n;(function() {\n\n  var undefined;\n\n  var VERSION = '3.7.0';\n\n  var FUNC_ERROR_TEXT = 'Expected a function';\n\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      objectTag = '[object Object]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      weakMapTag = '[object WeakMap]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]+|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?)\\1\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n  var reRegExpChars = /[.*+?^${}()|[\\]\\/\\\\]/g,\n      reHasRegExpChars = RegExp(reRegExpChars.source);\n\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  var reFlags = /\\w*$/;\n\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[mapTag] = cloneableTags[setTag] =\n  cloneableTags[weakMapTag] = false;\n\n  var objectTypes = {\n    'function': true,\n    'object': true\n  };\n\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\n\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\n\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\n\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\n\n  function baseFindIndex(array, predicate, fromRight) {\n    var length = array.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function baseIndexOf(array, value, fromIndex) {\n    if (value !== value) {\n      return indexOfNaN(array, fromIndex);\n    }\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function baseIsFunction(value) {\n    return typeof value == 'function' || false;\n  }\n\n  function baseToString(value) {\n    if (typeof value == 'string') {\n      return value;\n    }\n    return value == null ? '' : (value + '');\n  }\n\n  function indexOfNaN(array, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 0 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var other = array[index];\n      if (other !== other) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function isObjectLike(value) {\n    return !!value && typeof value == 'object';\n  }\n\n  var arrayProto = Array.prototype,\n      objectProto = Object.prototype;\n\n  var fnToString = Function.prototype.toString;\n\n  var hasOwnProperty = objectProto.hasOwnProperty;\n\n  var objToString = objectProto.toString;\n\n  var reIsNative = RegExp('^' +\n    escapeRegExp(objToString)\n    .replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n  );\n\n  var ArrayBuffer = isNative(ArrayBuffer = root.ArrayBuffer) && ArrayBuffer,\n      bufferSlice = isNative(bufferSlice = ArrayBuffer && new ArrayBuffer(0).slice) && bufferSlice,\n      floor = Math.floor,\n      getOwnPropertySymbols = isNative(getOwnPropertySymbols = Object.getOwnPropertySymbols) && getOwnPropertySymbols,\n      getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,\n      push = arrayProto.push,\n      preventExtensions = isNative(Object.preventExtensions = Object.preventExtensions) && preventExtensions,\n      propertyIsEnumerable = objectProto.propertyIsEnumerable,\n      Uint8Array = isNative(Uint8Array = root.Uint8Array) && Uint8Array;\n\n  var Float64Array = (function() {\n    try {\n      var func = isNative(func = root.Float64Array) && func,\n          result = new func(new ArrayBuffer(10), 0, 1) && func;\n    } catch(e) {}\n    return result;\n  }());\n\n  var nativeAssign = (function() {\n    var object = { '1': 0 },\n        func = preventExtensions && isNative(func = Object.assign) && func;\n\n    try { func(preventExtensions(object), 'xo'); } catch(e) {}\n    return !object[1] && func;\n  }());\n\n  var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,\n      nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,\n      nativeMax = Math.max,\n      nativeMin = Math.min;\n\n  var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;\n\n  var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1,\n      MAX_ARRAY_INDEX =  MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0;\n\n  var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n  function lodash() {\n  }\n\n  var support = lodash.support = {};\n\n  (function(x) {\n    var Ctor = function() { this.x = x; },\n        object = { '0': x, 'length': x },\n        props = [];\n\n    Ctor.prototype = { 'valueOf': x, 'y': x };\n    for (var key in new Ctor) { props.push(key); }\n\n    support.funcDecomp = /\\bthis\\b/.test(function() { return this; });\n\n    support.funcNames = typeof Function.name == 'string';\n\n    try {\n      support.nonEnumArgs = !propertyIsEnumerable.call(arguments, 1);\n    } catch(e) {\n      support.nonEnumArgs = true;\n    }\n  }(1, 0));\n\n  function arrayCopy(source, array) {\n    var index = -1,\n        length = source.length;\n\n    array || (array = Array(length));\n    while (++index < length) {\n      array[index] = source[index];\n    }\n    return array;\n  }\n\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[++resIndex] = value;\n      }\n    }\n    return result;\n  }\n\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  function arrayMax(array) {\n    var index = -1,\n        length = array.length,\n        result = NEGATIVE_INFINITY;\n\n    while (++index < length) {\n      var value = array[index];\n      if (value > result) {\n        result = value;\n      }\n    }\n    return result;\n  }\n\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function assignWith(object, source, customizer) {\n    var props = keys(source);\n    push.apply(props, getSymbols(source));\n\n    var index = -1,\n        length = props.length;\n\n    while (++index < length) {\n      var key = props[index],\n          value = object[key],\n          result = customizer(value, source[key], key, object, source);\n\n      if ((result === result ? (result !== value) : (value === value)) ||\n          (value === undefined && !(key in object))) {\n        object[key] = result;\n      }\n    }\n    return object;\n  }\n\n  var baseAssign = nativeAssign || function(object, source) {\n    return source == null\n      ? object\n      : baseCopy(source, getSymbols(source), baseCopy(source, keys(source), object));\n  };\n\n  function baseCopy(source, props, object) {\n    object || (object = {});\n\n    var index = -1,\n        length = props.length;\n\n    while (++index < length) {\n      var key = props[index];\n      object[key] = source[key];\n    }\n    return object;\n  }\n\n  function baseCallback(func, thisArg, argCount) {\n    var type = typeof func;\n    if (type == 'function') {\n      return thisArg === undefined\n        ? func\n        : bindCallback(func, thisArg, argCount);\n    }\n    if (func == null) {\n      return identity;\n    }\n    if (type == 'object') {\n      return baseMatches(func);\n    }\n    return thisArg === undefined\n      ? property(func)\n      : baseMatchesProperty(func, thisArg);\n  }\n\n  function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n    var result;\n    if (customizer) {\n      result = object ? customizer(value, key, object) : customizer(value);\n    }\n    if (result !== undefined) {\n      return result;\n    }\n    if (!isObject(value)) {\n      return value;\n    }\n    var isArr = isArray(value);\n    if (isArr) {\n      result = initCloneArray(value);\n      if (!isDeep) {\n        return arrayCopy(value, result);\n      }\n    } else {\n      var tag = objToString.call(value),\n          isFunc = tag == funcTag;\n\n      if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n        result = initCloneObject(isFunc ? {} : value);\n        if (!isDeep) {\n          return baseAssign(result, value);\n        }\n      } else {\n        return cloneableTags[tag]\n          ? initCloneByTag(value, tag, isDeep)\n          : (object ? value : {});\n      }\n    }\n    stackA || (stackA = []);\n    stackB || (stackB = []);\n\n    var length = stackA.length;\n    while (length--) {\n      if (stackA[length] == value) {\n        return stackB[length];\n      }\n    }\n    stackA.push(value);\n    stackB.push(result);\n\n    (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n      result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n    });\n    return result;\n  }\n\n  var baseEach = createBaseEach(baseForOwn);\n\n  function baseFilter(collection, predicate) {\n    var result = [];\n    baseEach(collection, function(value, index, collection) {\n      if (predicate(value, index, collection)) {\n        result.push(value);\n      }\n    });\n    return result;\n  }\n\n  var baseFor = createBaseFor();\n\n  function baseForIn(object, iteratee) {\n    return baseFor(object, iteratee, keysIn);\n  }\n\n  function baseForOwn(object, iteratee) {\n    return baseFor(object, iteratee, keys);\n  }\n\n  function baseGet(object, path, pathKey) {\n    if (object == null) {\n      return;\n    }\n    if (pathKey !== undefined && pathKey in toObject(object)) {\n      path = [pathKey];\n    }\n    var index = -1,\n        length = path.length;\n\n    while (object != null && ++index < length) {\n      var result = object = object[path[index]];\n    }\n    return result;\n  }\n\n  function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n    if (value === other) {\n      return value !== 0 || (1 / value == 1 / other);\n    }\n    var valType = typeof value,\n        othType = typeof other;\n\n    if ((valType != 'function' && valType != 'object' && othType != 'function' && othType != 'object') ||\n        value == null || other == null) {\n      return value !== value && other !== other;\n    }\n    return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n  }\n\n  function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var objIsArr = isArray(object),\n        othIsArr = isArray(other),\n        objTag = arrayTag,\n        othTag = arrayTag;\n\n    if (!objIsArr) {\n      objTag = objToString.call(object);\n      if (objTag == argsTag) {\n        objTag = objectTag;\n      } else if (objTag != objectTag) {\n        objIsArr = isTypedArray(object);\n      }\n    }\n    if (!othIsArr) {\n      othTag = objToString.call(other);\n      if (othTag == argsTag) {\n        othTag = objectTag;\n      } else if (othTag != objectTag) {\n        othIsArr = isTypedArray(other);\n      }\n    }\n    var objIsObj = objTag == objectTag,\n        othIsObj = othTag == objectTag,\n        isSameTag = objTag == othTag;\n\n    if (isSameTag && !(objIsArr || objIsObj)) {\n      return equalByTag(object, other, objTag);\n    }\n    if (!isLoose) {\n      var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n          othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n      if (valWrapped || othWrapped) {\n        return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n      }\n    }\n    if (!isSameTag) {\n      return false;\n    }\n    stackA || (stackA = []);\n    stackB || (stackB = []);\n\n    var length = stackA.length;\n    while (length--) {\n      if (stackA[length] == object) {\n        return stackB[length] == other;\n      }\n    }\n    stackA.push(object);\n    stackB.push(other);\n\n    var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n    stackA.pop();\n    stackB.pop();\n\n    return result;\n  }\n\n  function baseIsMatch(object, props, values, strictCompareFlags, customizer) {\n    var index = -1,\n        length = props.length,\n        noCustomizer = !customizer;\n\n    while (++index < length) {\n      if ((noCustomizer && strictCompareFlags[index])\n            ? values[index] !== object[props[index]]\n            : !(props[index] in object)\n          ) {\n        return false;\n      }\n    }\n    index = -1;\n    while (++index < length) {\n      var key = props[index],\n          objValue = object[key],\n          srcValue = values[index];\n\n      if (noCustomizer && strictCompareFlags[index]) {\n        var result = objValue !== undefined || (key in object);\n      } else {\n        result = customizer ? customizer(objValue, srcValue, key) : undefined;\n        if (result === undefined) {\n          result = baseIsEqual(srcValue, objValue, customizer, true);\n        }\n      }\n      if (!result) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function baseMatches(source) {\n    var props = keys(source),\n        length = props.length;\n\n    if (!length) {\n      return constant(true);\n    }\n    if (length == 1) {\n      var key = props[0],\n          value = source[key];\n\n      if (isStrictComparable(value)) {\n        return function(object) {\n          if (object == null) {\n            return false;\n          }\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\n        };\n      }\n    }\n    var values = Array(length),\n        strictCompareFlags = Array(length);\n\n    while (length--) {\n      value = source[props[length]];\n      values[length] = value;\n      strictCompareFlags[length] = isStrictComparable(value);\n    }\n    return function(object) {\n      return object != null && baseIsMatch(toObject(object), props, values, strictCompareFlags);\n    };\n  }\n\n  function baseMatchesProperty(path, value) {\n    var isArr = isArray(path),\n        isCommon = isKey(path) && isStrictComparable(value),\n        pathKey = (path + '');\n\n    path = toPath(path);\n    return function(object) {\n      if (object == null) {\n        return false;\n      }\n      var key = pathKey;\n      object = toObject(object);\n      if ((isArr || !isCommon) && !(key in object)) {\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        if (object == null) {\n          return false;\n        }\n        key = last(path);\n        object = toObject(object);\n      }\n      return object[key] === value\n        ? (value !== undefined || (key in object))\n        : baseIsEqual(value, object[key], null, true);\n    };\n  }\n\n  function baseMerge(object, source, customizer, stackA, stackB) {\n    if (!isObject(object)) {\n      return object;\n    }\n    var isSrcArr = isLength(source.length) && (isArray(source) || isTypedArray(source));\n    if (!isSrcArr) {\n      var props = keys(source);\n      push.apply(props, getSymbols(source));\n    }\n    arrayEach(props || source, function(srcValue, key) {\n      if (props) {\n        key = srcValue;\n        srcValue = source[key];\n      }\n      if (isObjectLike(srcValue)) {\n        stackA || (stackA = []);\n        stackB || (stackB = []);\n        baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n      }\n      else {\n        var value = object[key],\n            result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n            isCommon = result === undefined;\n\n        if (isCommon) {\n          result = srcValue;\n        }\n        if ((isSrcArr || result !== undefined) &&\n            (isCommon || (result === result ? (result !== value) : (value === value)))) {\n          object[key] = result;\n        }\n      }\n    });\n    return object;\n  }\n\n  function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n    var length = stackA.length,\n        srcValue = source[key];\n\n    while (length--) {\n      if (stackA[length] == srcValue) {\n        object[key] = stackB[length];\n        return;\n      }\n    }\n    var value = object[key],\n        result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n        isCommon = result === undefined;\n\n    if (isCommon) {\n      result = srcValue;\n      if (isLength(srcValue.length) && (isArray(srcValue) || isTypedArray(srcValue))) {\n        result = isArray(value)\n          ? value\n          : (getLength(value) ? arrayCopy(value) : []);\n      }\n      else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n        result = isArguments(value)\n          ? toPlainObject(value)\n          : (isPlainObject(value) ? value : {});\n      }\n      else {\n        isCommon = false;\n      }\n    }\n    stackA.push(srcValue);\n    stackB.push(result);\n\n    if (isCommon) {\n      object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n    } else if (result === result ? (result !== value) : (value === value)) {\n      object[key] = result;\n    }\n  }\n\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  function basePropertyDeep(path) {\n    var pathKey = (path + '');\n    path = toPath(path);\n    return function(object) {\n      return baseGet(object, path, pathKey);\n    };\n  }\n\n  function baseSlice(array, start, end) {\n    var index = -1,\n        length = array.length;\n\n    start = start == null ? 0 : (+start || 0);\n    if (start < 0) {\n      start = -start > length ? 0 : (length + start);\n    }\n    end = (end === undefined || end > length) ? length : (+end || 0);\n    if (end < 0) {\n      end += length;\n    }\n    length = start > end ? 0 : ((end - start) >>> 0);\n    start >>>= 0;\n\n    var result = Array(length);\n    while (++index < length) {\n      result[index] = array[index + start];\n    }\n    return result;\n  }\n\n  function baseSome(collection, predicate) {\n    var result;\n\n    baseEach(collection, function(value, index, collection) {\n      result = predicate(value, index, collection);\n      return !result;\n    });\n    return !!result;\n  }\n\n  function baseValues(object, props) {\n    var index = -1,\n        length = props.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = object[props[index]];\n    }\n    return result;\n  }\n\n  function binaryIndex(array, value, retHighest) {\n    var low = 0,\n        high = array ? array.length : low;\n\n    if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n      while (low < high) {\n        var mid = (low + high) >>> 1,\n            computed = array[mid];\n\n        if (retHighest ? (computed <= value) : (computed < value)) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return high;\n    }\n    return binaryIndexBy(array, value, identity, retHighest);\n  }\n\n  function binaryIndexBy(array, value, iteratee, retHighest) {\n    value = iteratee(value);\n\n    var low = 0,\n        high = array ? array.length : 0,\n        valIsNaN = value !== value,\n        valIsUndef = value === undefined;\n\n    while (low < high) {\n      var mid = floor((low + high) / 2),\n          computed = iteratee(array[mid]),\n          isReflexive = computed === computed;\n\n      if (valIsNaN) {\n        var setLow = isReflexive || retHighest;\n      } else if (valIsUndef) {\n        setLow = isReflexive && (retHighest || computed !== undefined);\n      } else {\n        setLow = retHighest ? (computed <= value) : (computed < value);\n      }\n      if (setLow) {\n        low = mid + 1;\n      } else {\n        high = mid;\n      }\n    }\n    return nativeMin(high, MAX_ARRAY_INDEX);\n  }\n\n  function bindCallback(func, thisArg, argCount) {\n    if (typeof func != 'function') {\n      return identity;\n    }\n    if (thisArg === undefined) {\n      return func;\n    }\n    switch (argCount) {\n      case 1: return function(value) {\n        return func.call(thisArg, value);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(thisArg, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(thisArg, accumulator, value, index, collection);\n      };\n      case 5: return function(value, other, key, object, source) {\n        return func.call(thisArg, value, other, key, object, source);\n      };\n    }\n    return function() {\n      return func.apply(thisArg, arguments);\n    };\n  }\n\n  function bufferClone(buffer) {\n    return bufferSlice.call(buffer, 0);\n  }\n  if (!bufferSlice) {\n    bufferClone = !(ArrayBuffer && Uint8Array) ? constant(null) : function(buffer) {\n      var byteLength = buffer.byteLength,\n          floatLength = Float64Array ? floor(byteLength / FLOAT64_BYTES_PER_ELEMENT) : 0,\n          offset = floatLength * FLOAT64_BYTES_PER_ELEMENT,\n          result = new ArrayBuffer(byteLength);\n\n      if (floatLength) {\n        var view = new Float64Array(result, 0, floatLength);\n        view.set(new Float64Array(buffer, 0, floatLength));\n      }\n      if (byteLength != offset) {\n        view = new Uint8Array(result, offset);\n        view.set(new Uint8Array(buffer, offset));\n      }\n      return result;\n    };\n  }\n\n  function createAssigner(assigner) {\n    return restParam(function(object, sources) {\n      var index = -1,\n          length = object == null ? 0 : sources.length,\n          customizer = length > 2 && sources[length - 2],\n          guard = length > 2 && sources[2],\n          thisArg = length > 1 && sources[length - 1];\n\n      if (typeof customizer == 'function') {\n        customizer = bindCallback(customizer, thisArg, 5);\n        length -= 2;\n      } else {\n        customizer = typeof thisArg == 'function' ? thisArg : null;\n        length -= (customizer ? 1 : 0);\n      }\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        customizer = length < 3 ? null : customizer;\n        length = 1;\n      }\n      while (++index < length) {\n        var source = sources[index];\n        if (source) {\n          assigner(object, source, customizer);\n        }\n      }\n      return object;\n    });\n  }\n\n  function createBaseEach(eachFunc, fromRight) {\n    return function(collection, iteratee) {\n      var length = collection ? getLength(collection) : 0;\n      if (!isLength(length)) {\n        return eachFunc(collection, iteratee);\n      }\n      var index = fromRight ? length : -1,\n          iterable = toObject(collection);\n\n      while ((fromRight ? index-- : ++index < length)) {\n        if (iteratee(iterable[index], index, iterable) === false) {\n          break;\n        }\n      }\n      return collection;\n    };\n  }\n\n  function createBaseFor(fromRight) {\n    return function(object, iteratee, keysFunc) {\n      var iterable = toObject(object),\n          props = keysFunc(object),\n          length = props.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length)) {\n        var key = props[index];\n        if (iteratee(iterable[key], key, iterable) === false) {\n          break;\n        }\n      }\n      return object;\n    };\n  }\n\n  function createFindIndex(fromRight) {\n    return function(array, predicate, thisArg) {\n      if (!(array && array.length)) {\n        return -1;\n      }\n      predicate = getCallback(predicate, thisArg, 3);\n      return baseFindIndex(array, predicate, fromRight);\n    };\n  }\n\n  function createForEach(arrayFunc, eachFunc) {\n    return function(collection, iteratee, thisArg) {\n      return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n        ? arrayFunc(collection, iteratee)\n        : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n    };\n  }\n\n  function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var index = -1,\n        arrLength = array.length,\n        othLength = other.length,\n        result = true;\n\n    if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n      return false;\n    }\n    while (result && ++index < arrLength) {\n      var arrValue = array[index],\n          othValue = other[index];\n\n      result = undefined;\n      if (customizer) {\n        result = isLoose\n          ? customizer(othValue, arrValue, index)\n          : customizer(arrValue, othValue, index);\n      }\n      if (result === undefined) {\n        if (isLoose) {\n          var othIndex = othLength;\n          while (othIndex--) {\n            othValue = other[othIndex];\n            result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n            if (result) {\n              break;\n            }\n          }\n        } else {\n          result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n        }\n      }\n    }\n    return !!result;\n  }\n\n  function equalByTag(object, other, tag) {\n    switch (tag) {\n      case boolTag:\n      case dateTag:\n        return +object == +other;\n\n      case errorTag:\n        return object.name == other.name && object.message == other.message;\n\n      case numberTag:\n        return (object != +object)\n          ? other != +other\n          : (object == 0 ? ((1 / object) == (1 / other)) : object == +other);\n\n      case regexpTag:\n      case stringTag:\n        return object == (other + '');\n    }\n    return false;\n  }\n\n  function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var objProps = keys(object),\n        objLength = objProps.length,\n        othProps = keys(other),\n        othLength = othProps.length;\n\n    if (objLength != othLength && !isLoose) {\n      return false;\n    }\n    var skipCtor = isLoose,\n        index = -1;\n\n    while (++index < objLength) {\n      var key = objProps[index],\n          result = isLoose ? key in other : hasOwnProperty.call(other, key);\n\n      if (result) {\n        var objValue = object[key],\n            othValue = other[key];\n\n        result = undefined;\n        if (customizer) {\n          result = isLoose\n            ? customizer(othValue, objValue, key)\n            : customizer(objValue, othValue, key);\n        }\n        if (result === undefined) {\n          result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB);\n        }\n      }\n      if (!result) {\n        return false;\n      }\n      skipCtor || (skipCtor = key == 'constructor');\n    }\n    if (!skipCtor) {\n      var objCtor = object.constructor,\n          othCtor = other.constructor;\n\n      if (objCtor != othCtor &&\n          ('constructor' in object && 'constructor' in other) &&\n          !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n            typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function getCallback(func, thisArg, argCount) {\n    var result = lodash.callback || callback;\n    result = result === callback ? baseCallback : result;\n    return argCount ? result(func, thisArg, argCount) : result;\n  }\n\n  function getIndexOf(collection, target, fromIndex) {\n    var result = lodash.indexOf || indexOf;\n    result = result === indexOf ? baseIndexOf : result;\n    return collection ? result(collection, target, fromIndex) : result;\n  }\n\n  var getLength = baseProperty('length');\n\n  var getSymbols = !getOwnPropertySymbols ? constant([]) : function(object) {\n    return getOwnPropertySymbols(toObject(object));\n  };\n\n  function initCloneArray(array) {\n    var length = array.length,\n        result = new array.constructor(length);\n\n    if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n      result.index = array.index;\n      result.input = array.input;\n    }\n    return result;\n  }\n\n  function initCloneObject(object) {\n    var Ctor = object.constructor;\n    if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n      Ctor = Object;\n    }\n    return new Ctor;\n  }\n\n  function initCloneByTag(object, tag, isDeep) {\n    var Ctor = object.constructor;\n    switch (tag) {\n      case arrayBufferTag:\n        return bufferClone(object);\n\n      case boolTag:\n      case dateTag:\n        return new Ctor(+object);\n\n      case float32Tag: case float64Tag:\n      case int8Tag: case int16Tag: case int32Tag:\n      case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n        var buffer = object.buffer;\n        return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n      case numberTag:\n      case stringTag:\n        return new Ctor(object);\n\n      case regexpTag:\n        var result = new Ctor(object.source, reFlags.exec(object));\n        result.lastIndex = object.lastIndex;\n    }\n    return result;\n  }\n\n  function isIndex(value, length) {\n    value = +value;\n    length = length == null ? MAX_SAFE_INTEGER : length;\n    return value > -1 && value % 1 == 0 && value < length;\n  }\n\n  function isIterateeCall(value, index, object) {\n    if (!isObject(object)) {\n      return false;\n    }\n    var type = typeof index;\n    if (type == 'number') {\n      var length = getLength(object),\n          prereq = isLength(length) && isIndex(index, length);\n    } else {\n      prereq = type == 'string' && index in object;\n    }\n    if (prereq) {\n      var other = object[index];\n      return value === value ? (value === other) : (other !== other);\n    }\n    return false;\n  }\n\n  function isKey(value, object) {\n    var type = typeof value;\n    if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n      return true;\n    }\n    if (isArray(value)) {\n      return false;\n    }\n    var result = !reIsDeepProp.test(value);\n    return result || (object != null && value in toObject(object));\n  }\n\n  function isLength(value) {\n    return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n  }\n\n  function isStrictComparable(value) {\n    return value === value && (value === 0 ? ((1 / value) > 0) : !isObject(value));\n  }\n\n  function shimIsPlainObject(value) {\n    var Ctor,\n        support = lodash.support;\n\n    if (!(isObjectLike(value) && objToString.call(value) == objectTag) ||\n        (!hasOwnProperty.call(value, 'constructor') &&\n          (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n      return false;\n    }\n    var result;\n    baseForIn(value, function(subValue, key) {\n      result = key;\n    });\n    return result === undefined || hasOwnProperty.call(value, result);\n  }\n\n  function shimKeys(object) {\n    var props = keysIn(object),\n        propsLength = props.length,\n        length = propsLength && object.length,\n        support = lodash.support;\n\n    var allowIndexes = length && isLength(length) &&\n      (isArray(object) || (support.nonEnumArgs && isArguments(object)));\n\n    var index = -1,\n        result = [];\n\n    while (++index < propsLength) {\n      var key = props[index];\n      if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n        result.push(key);\n      }\n    }\n    return result;\n  }\n\n  function toObject(value) {\n    return isObject(value) ? value : Object(value);\n  }\n\n  function toPath(value) {\n    if (isArray(value)) {\n      return value;\n    }\n    var result = [];\n    baseToString(value).replace(rePropName, function(match, number, quote, string) {\n      result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n    });\n    return result;\n  }\n\n  var findLastIndex = createFindIndex(true);\n\n  function indexOf(array, value, fromIndex) {\n    var length = array ? array.length : 0;\n    if (!length) {\n      return -1;\n    }\n    if (typeof fromIndex == 'number') {\n      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\n    } else if (fromIndex) {\n      var index = binaryIndex(array, value),\n          other = array[index];\n\n      if (value === value ? (value === other) : (other !== other)) {\n        return index;\n      }\n      return -1;\n    }\n    return baseIndexOf(array, value, fromIndex || 0);\n  }\n\n  function last(array) {\n    var length = array ? array.length : 0;\n    return length ? array[length - 1] : undefined;\n  }\n\n  function slice(array, start, end) {\n    var length = array ? array.length : 0;\n    if (!length) {\n      return [];\n    }\n    if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n      start = 0;\n      end = length;\n    }\n    return baseSlice(array, start, end);\n  }\n\n  function unzip(array) {\n    var index = -1,\n        length = (array && array.length && arrayMax(arrayMap(array, getLength))) >>> 0,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = arrayMap(array, baseProperty(index));\n    }\n    return result;\n  }\n\n  var zip = restParam(unzip);\n\n  var forEach = createForEach(arrayEach, baseEach);\n\n  function includes(collection, target, fromIndex, guard) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      collection = values(collection);\n      length = collection.length;\n    }\n    if (!length) {\n      return false;\n    }\n    if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\n      fromIndex = 0;\n    } else {\n      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n    }\n    return (typeof collection == 'string' || !isArray(collection) && isString(collection))\n      ? (fromIndex < length && collection.indexOf(target, fromIndex) > -1)\n      : (getIndexOf(collection, target, fromIndex) > -1);\n  }\n\n  function reject(collection, predicate, thisArg) {\n    var func = isArray(collection) ? arrayFilter : baseFilter;\n    predicate = getCallback(predicate, thisArg, 3);\n    return func(collection, function(value, index, collection) {\n      return !predicate(value, index, collection);\n    });\n  }\n\n  function some(collection, predicate, thisArg) {\n    var func = isArray(collection) ? arraySome : baseSome;\n    if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n      predicate = null;\n    }\n    if (typeof predicate != 'function' || thisArg !== undefined) {\n      predicate = getCallback(predicate, thisArg, 3);\n    }\n    return func(collection, predicate);\n  }\n\n  function restParam(func, start) {\n    if (typeof func != 'function') {\n      throw new TypeError(FUNC_ERROR_TEXT);\n    }\n    start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n    return function() {\n      var args = arguments,\n          index = -1,\n          length = nativeMax(args.length - start, 0),\n          rest = Array(length);\n\n      while (++index < length) {\n        rest[index] = args[start + index];\n      }\n      switch (start) {\n        case 0: return func.call(this, rest);\n        case 1: return func.call(this, args[0], rest);\n        case 2: return func.call(this, args[0], args[1], rest);\n      }\n      var otherArgs = Array(start + 1);\n      index = -1;\n      while (++index < start) {\n        otherArgs[index] = args[index];\n      }\n      otherArgs[start] = rest;\n      return func.apply(this, otherArgs);\n    };\n  }\n\n  function clone(value, isDeep, customizer, thisArg) {\n    if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\n      isDeep = false;\n    }\n    else if (typeof isDeep == 'function') {\n      thisArg = customizer;\n      customizer = isDeep;\n      isDeep = false;\n    }\n    customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 1);\n    return baseClone(value, isDeep, customizer);\n  }\n\n  function isArguments(value) {\n    var length = isObjectLike(value) ? value.length : undefined;\n    return isLength(length) && objToString.call(value) == argsTag;\n  }\n\n  var isArray = nativeIsArray || function(value) {\n    return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n  };\n\n  function isEmpty(value) {\n    if (value == null) {\n      return true;\n    }\n    var length = getLength(value);\n    if (isLength(length) && (isArray(value) || isString(value) || isArguments(value) ||\n        (isObjectLike(value) && isFunction(value.splice)))) {\n      return !length;\n    }\n    return !keys(value).length;\n  }\n\n  var isFunction = !(baseIsFunction(/x/) || (Uint8Array && !baseIsFunction(Uint8Array))) ? baseIsFunction : function(value) {\n    return objToString.call(value) == funcTag;\n  };\n\n  function isObject(value) {\n    var type = typeof value;\n    return type == 'function' || (!!value && type == 'object');\n  }\n\n  function isNative(value) {\n    if (value == null) {\n      return false;\n    }\n    if (objToString.call(value) == funcTag) {\n      return reIsNative.test(fnToString.call(value));\n    }\n    return isObjectLike(value) && reIsHostCtor.test(value);\n  }\n\n  function isNumber(value) {\n    return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\n  }\n\n  var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {\n    if (!(value && objToString.call(value) == objectTag)) {\n      return false;\n    }\n    var valueOf = value.valueOf,\n        objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);\n\n    return objProto\n      ? (value == objProto || getPrototypeOf(value) == objProto)\n      : shimIsPlainObject(value);\n  };\n\n  function isString(value) {\n    return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n  }\n\n  function isTypedArray(value) {\n    return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n  }\n\n  function toPlainObject(value) {\n    return baseCopy(value, keysIn(value));\n  }\n\n  var assign = createAssigner(function(object, source, customizer) {\n    return customizer\n      ? assignWith(object, source, customizer)\n      : baseAssign(object, source);\n  });\n\n  function has(object, path) {\n    if (object == null) {\n      return false;\n    }\n    var result = hasOwnProperty.call(object, path);\n    if (!result && !isKey(path)) {\n      path = toPath(path);\n      object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n      path = last(path);\n      result = object != null && hasOwnProperty.call(object, path);\n    }\n    return result;\n  }\n\n  var keys = !nativeKeys ? shimKeys : function(object) {\n    if (object) {\n      var Ctor = object.constructor,\n          length = object.length;\n    }\n    if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n        (typeof object != 'function' && isLength(length))) {\n      return shimKeys(object);\n    }\n    return isObject(object) ? nativeKeys(object) : [];\n  };\n\n  function keysIn(object) {\n    if (object == null) {\n      return [];\n    }\n    if (!isObject(object)) {\n      object = Object(object);\n    }\n    var length = object.length;\n    length = (length && isLength(length) &&\n      (isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0;\n\n    var Ctor = object.constructor,\n        index = -1,\n        isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n        result = Array(length),\n        skipIndexes = length > 0;\n\n    while (++index < length) {\n      result[index] = (index + '');\n    }\n    for (var key in object) {\n      if (!(skipIndexes && isIndex(key, length)) &&\n          !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n        result.push(key);\n      }\n    }\n    return result;\n  }\n\n  var merge = createAssigner(baseMerge);\n\n  function values(object) {\n    return baseValues(object, keys(object));\n  }\n\n  function escapeRegExp(string) {\n    string = baseToString(string);\n    return (string && reHasRegExpChars.test(string))\n      ? string.replace(reRegExpChars, '\\\\$&')\n      : string;\n  }\n\n  function callback(func, thisArg, guard) {\n    if (guard && isIterateeCall(func, thisArg, guard)) {\n      thisArg = null;\n    }\n    return baseCallback(func, thisArg);\n  }\n\n  function constant(value) {\n    return function() {\n      return value;\n    };\n  }\n\n  function identity(value) {\n    return value;\n  }\n\n  function property(path) {\n    return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n  }\n  lodash.assign = assign;\n  lodash.callback = callback;\n  lodash.constant = constant;\n  lodash.forEach = forEach;\n  lodash.keys = keys;\n  lodash.keysIn = keysIn;\n  lodash.merge = merge;\n  lodash.property = property;\n  lodash.reject = reject;\n  lodash.restParam = restParam;\n  lodash.slice = slice;\n  lodash.toPlainObject = toPlainObject;\n  lodash.unzip = unzip;\n  lodash.values = values;\n  lodash.zip = zip;\n\n  lodash.each = forEach;\n  lodash.extend = assign;\n  lodash.iteratee = callback;\n  lodash.clone = clone;\n  lodash.escapeRegExp = escapeRegExp;\n  lodash.findLastIndex = findLastIndex;\n  lodash.has = has;\n  lodash.identity = identity;\n  lodash.includes = includes;\n  lodash.indexOf = indexOf;\n  lodash.isArguments = isArguments;\n  lodash.isArray = isArray;\n  lodash.isEmpty = isEmpty;\n  lodash.isFunction = isFunction;\n  lodash.isNative = isNative;\n  lodash.isNumber = isNumber;\n  lodash.isObject = isObject;\n  lodash.isPlainObject = isPlainObject;\n  lodash.isString = isString;\n  lodash.isTypedArray = isTypedArray;\n  lodash.last = last;\n  lodash.some = some;\n\n  lodash.any = some;\n  lodash.contains = includes;\n  lodash.include = includes;\n\n  lodash.VERSION = VERSION;\n  if (freeExports && freeModule) {\n    if (moduleExports) {\n      (freeModule.exports = lodash)._ = lodash;\n    }\n    else {\n      freeExports._ = lodash;\n    }\n  }\n  else {\n    root._ = lodash;\n  }\n}.call(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],\"/node_modules/jshint/src/jshint.js\":[function(_dereq_,module,exports){\n\nvar _            = _dereq_(\"../lodash\");\nvar events       = _dereq_(\"events\");\nvar vars         = _dereq_(\"./vars.js\");\nvar messages     = _dereq_(\"./messages.js\");\nvar Lexer        = _dereq_(\"./lex.js\").Lexer;\nvar reg          = _dereq_(\"./reg.js\");\nvar state        = _dereq_(\"./state.js\").state;\nvar style        = _dereq_(\"./style.js\");\nvar options      = _dereq_(\"./options.js\");\nvar scopeManager = _dereq_(\"./scope-manager.js\");\n\nvar JSHINT = (function() {\n  \"use strict\";\n\n  var api, // Extension API\n    bang = {\n      \"<\"  : true,\n      \"<=\" : true,\n      \"==\" : true,\n      \"===\": true,\n      \"!==\": true,\n      \"!=\" : true,\n      \">\"  : true,\n      \">=\" : true,\n      \"+\"  : true,\n      \"-\"  : true,\n      \"*\"  : true,\n      \"/\"  : true,\n      \"%\"  : true\n    },\n\n    declared, // Globals that were declared using /*global ... */ syntax.\n\n    functionicity = [\n      \"closure\", \"exception\", \"global\", \"label\",\n      \"outer\", \"unused\", \"var\"\n    ],\n\n    functions, // All of the functions\n\n    inblock,\n    indent,\n    lookahead,\n    lex,\n    member,\n    membersOnly,\n    predefined,    // Global variables defined by option\n\n    stack,\n    urls,\n\n    extraModules = [],\n    emitter = new events.EventEmitter();\n\n  function checkOption(name, t) {\n    name = name.trim();\n\n    if (/^[+-]W\\d{3}$/g.test(name)) {\n      return true;\n    }\n\n    if (options.validNames.indexOf(name) === -1) {\n      if (t.type !== \"jslint\" && !_.has(options.removed, name)) {\n        error(\"E001\", t, name);\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function isString(obj) {\n    return Object.prototype.toString.call(obj) === \"[object String]\";\n  }\n\n  function isIdentifier(tkn, value) {\n    if (!tkn)\n      return false;\n\n    if (!tkn.identifier || tkn.value !== value)\n      return false;\n\n    return true;\n  }\n\n  function isReserved(token) {\n    if (!token.reserved) {\n      return false;\n    }\n    var meta = token.meta;\n\n    if (meta && meta.isFutureReservedWord && state.inES5()) {\n      if (!meta.es5) {\n        return false;\n      }\n      if (meta.strictOnly) {\n        if (!state.option.strict && !state.isStrict()) {\n          return false;\n        }\n      }\n\n      if (token.isProperty) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function supplant(str, data) {\n    return str.replace(/\\{([^{}]*)\\}/g, function(a, b) {\n      var r = data[b];\n      return typeof r === \"string\" || typeof r === \"number\" ? r : a;\n    });\n  }\n\n  function combine(dest, src) {\n    Object.keys(src).forEach(function(name) {\n      if (_.has(JSHINT.blacklist, name)) return;\n      dest[name] = src[name];\n    });\n  }\n\n  function processenforceall() {\n    if (state.option.enforceall) {\n      for (var enforceopt in options.bool.enforcing) {\n        if (state.option[enforceopt] === undefined &&\n            !options.noenforceall[enforceopt]) {\n          state.option[enforceopt] = true;\n        }\n      }\n      for (var relaxopt in options.bool.relaxing) {\n        if (state.option[relaxopt] === undefined) {\n          state.option[relaxopt] = false;\n        }\n      }\n    }\n  }\n\n  function assume() {\n    processenforceall();\n    if (!state.option.esversion && !state.option.moz) {\n      if (state.option.es3) {\n        state.option.esversion = 3;\n      } else if (state.option.esnext) {\n        state.option.esversion = 6;\n      } else {\n        state.option.esversion = 5;\n      }\n    }\n\n    if (state.inES5()) {\n      combine(predefined, vars.ecmaIdentifiers[5]);\n    }\n\n    if (state.inES6()) {\n      combine(predefined, vars.ecmaIdentifiers[6]);\n    }\n\n    if (state.option.module) {\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n      if (!state.inES6()) {\n        warning(\"W134\", state.tokens.next, \"module\", 6);\n      }\n    }\n\n    if (state.option.couch) {\n      combine(predefined, vars.couch);\n    }\n\n    if (state.option.qunit) {\n      combine(predefined, vars.qunit);\n    }\n\n    if (state.option.rhino) {\n      combine(predefined, vars.rhino);\n    }\n\n    if (state.option.shelljs) {\n      combine(predefined, vars.shelljs);\n      combine(predefined, vars.node);\n    }\n    if (state.option.typed) {\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.phantom) {\n      combine(predefined, vars.phantom);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.prototypejs) {\n      combine(predefined, vars.prototypejs);\n    }\n\n    if (state.option.node) {\n      combine(predefined, vars.node);\n      combine(predefined, vars.typed);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.devel) {\n      combine(predefined, vars.devel);\n    }\n\n    if (state.option.dojo) {\n      combine(predefined, vars.dojo);\n    }\n\n    if (state.option.browser) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.browserify) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n      combine(predefined, vars.browserify);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.nonstandard) {\n      combine(predefined, vars.nonstandard);\n    }\n\n    if (state.option.jasmine) {\n      combine(predefined, vars.jasmine);\n    }\n\n    if (state.option.jquery) {\n      combine(predefined, vars.jquery);\n    }\n\n    if (state.option.mootools) {\n      combine(predefined, vars.mootools);\n    }\n\n    if (state.option.worker) {\n      combine(predefined, vars.worker);\n    }\n\n    if (state.option.wsh) {\n      combine(predefined, vars.wsh);\n    }\n\n    if (state.option.globalstrict && state.option.strict !== false) {\n      state.option.strict = \"global\";\n    }\n\n    if (state.option.yui) {\n      combine(predefined, vars.yui);\n    }\n\n    if (state.option.mocha) {\n      combine(predefined, vars.mocha);\n    }\n  }\n  function quit(code, line, chr) {\n    var percentage = Math.floor((line / state.lines.length) * 100);\n    var message = messages.errors[code].desc;\n\n    throw {\n      name: \"JSHintError\",\n      line: line,\n      character: chr,\n      message: message + \" (\" + percentage + \"% scanned).\",\n      raw: message,\n      code: code\n    };\n  }\n\n  function removeIgnoredMessages() {\n    var ignored = state.ignoredLines;\n\n    if (_.isEmpty(ignored)) return;\n    JSHINT.errors = _.reject(JSHINT.errors, function(err) { return ignored[err.line] });\n  }\n\n  function warning(code, t, a, b, c, d) {\n    var ch, l, w, msg;\n\n    if (/^W\\d{3}$/.test(code)) {\n      if (state.ignored[code])\n        return;\n\n      msg = messages.warnings[code];\n    } else if (/E\\d{3}/.test(code)) {\n      msg = messages.errors[code];\n    } else if (/I\\d{3}/.test(code)) {\n      msg = messages.info[code];\n    }\n\n    t = t || state.tokens.next || {};\n    if (t.id === \"(end)\") {  // `~\n      t = state.tokens.curr;\n    }\n\n    l = t.line || 0;\n    ch = t.from || 0;\n\n    w = {\n      id: \"(error)\",\n      raw: msg.desc,\n      code: msg.code,\n      evidence: state.lines[l - 1] || \"\",\n      line: l,\n      character: ch,\n      scope: JSHINT.scope,\n      a: a,\n      b: b,\n      c: c,\n      d: d\n    };\n\n    w.reason = supplant(msg.desc, w);\n    JSHINT.errors.push(w);\n\n    removeIgnoredMessages();\n\n    if (JSHINT.errors.length >= state.option.maxerr)\n      quit(\"E043\", l, ch);\n\n    return w;\n  }\n\n  function warningAt(m, l, ch, a, b, c, d) {\n    return warning(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n\n  function error(m, t, a, b, c, d) {\n    warning(m, t, a, b, c, d);\n  }\n\n  function errorAt(m, l, ch, a, b, c, d) {\n    return error(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n  function addInternalSrc(elem, src) {\n    var i;\n    i = {\n      id: \"(internal)\",\n      elem: elem,\n      value: src\n    };\n    JSHINT.internals.push(i);\n    return i;\n  }\n\n  function doOption() {\n    var nt = state.tokens.next;\n    var body = nt.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g) || [];\n\n    var predef = {};\n    if (nt.type === \"globals\") {\n      body.forEach(function(g, idx) {\n        g = g.split(\":\");\n        var key = (g[0] || \"\").trim();\n        var val = (g[1] || \"\").trim();\n\n        if (key === \"-\" || !key.length) {\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", nt);\n          return;\n        }\n\n        if (key.charAt(0) === \"-\") {\n          key = key.slice(1);\n          val = false;\n\n          JSHINT.blacklist[key] = key;\n          delete predefined[key];\n        } else {\n          predef[key] = (val === \"true\");\n        }\n      });\n\n      combine(predefined, predef);\n\n      for (var key in predef) {\n        if (_.has(predef, key)) {\n          declared[key] = nt;\n        }\n      }\n    }\n\n    if (nt.type === \"exported\") {\n      body.forEach(function(e, idx) {\n        if (!e.length) {\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", nt);\n          return;\n        }\n\n        state.funct[\"(scope)\"].addExported(e);\n      });\n    }\n\n    if (nt.type === \"members\") {\n      membersOnly = membersOnly || {};\n\n      body.forEach(function(m) {\n        var ch1 = m.charAt(0);\n        var ch2 = m.charAt(m.length - 1);\n\n        if (ch1 === ch2 && (ch1 === \"\\\"\" || ch1 === \"'\")) {\n          m = m\n            .substr(1, m.length - 2)\n            .replace(\"\\\\\\\"\", \"\\\"\");\n        }\n\n        membersOnly[m] = false;\n      });\n    }\n\n    var numvals = [\n      \"maxstatements\",\n      \"maxparams\",\n      \"maxdepth\",\n      \"maxcomplexity\",\n      \"maxerr\",\n      \"maxlen\",\n      \"indent\"\n    ];\n\n    if (nt.type === \"jshint\" || nt.type === \"jslint\") {\n      body.forEach(function(g) {\n        g = g.split(\":\");\n        var key = (g[0] || \"\").trim();\n        var val = (g[1] || \"\").trim();\n\n        if (!checkOption(key, nt)) {\n          return;\n        }\n\n        if (numvals.indexOf(key) >= 0) {\n          if (val !== \"false\") {\n            val = +val;\n\n            if (typeof val !== \"number\" || !isFinite(val) || val <= 0 || Math.floor(val) !== val) {\n              error(\"E032\", nt, g[1].trim());\n              return;\n            }\n\n            state.option[key] = val;\n          } else {\n            state.option[key] = key === \"indent\" ? 4 : false;\n          }\n\n          return;\n        }\n\n        if (key === \"validthis\") {\n\n          if (state.funct[\"(global)\"])\n            return void error(\"E009\");\n\n          if (val !== \"true\" && val !== \"false\")\n            return void error(\"E002\", nt);\n\n          state.option.validthis = (val === \"true\");\n          return;\n        }\n\n        if (key === \"quotmark\") {\n          switch (val) {\n          case \"true\":\n          case \"false\":\n            state.option.quotmark = (val === \"true\");\n            break;\n          case \"double\":\n          case \"single\":\n            state.option.quotmark = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"shadow\") {\n          switch (val) {\n          case \"true\":\n            state.option.shadow = true;\n            break;\n          case \"outer\":\n            state.option.shadow = \"outer\";\n            break;\n          case \"false\":\n          case \"inner\":\n            state.option.shadow = \"inner\";\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"unused\") {\n          switch (val) {\n          case \"true\":\n            state.option.unused = true;\n            break;\n          case \"false\":\n            state.option.unused = false;\n            break;\n          case \"vars\":\n          case \"strict\":\n            state.option.unused = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"latedef\") {\n          switch (val) {\n          case \"true\":\n            state.option.latedef = true;\n            break;\n          case \"false\":\n            state.option.latedef = false;\n            break;\n          case \"nofunc\":\n            state.option.latedef = \"nofunc\";\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"ignore\") {\n          switch (val) {\n          case \"line\":\n            state.ignoredLines[nt.line] = true;\n            removeIgnoredMessages();\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"strict\") {\n          switch (val) {\n          case \"true\":\n            state.option.strict = true;\n            break;\n          case \"false\":\n            state.option.strict = false;\n            break;\n          case \"func\":\n          case \"global\":\n          case \"implied\":\n            state.option.strict = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"module\") {\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", state.tokens.next, \"module\");\n          }\n        }\n        var esversions = {\n          es3   : 3,\n          es5   : 5,\n          esnext: 6\n        };\n        if (_.has(esversions, key)) {\n          switch (val) {\n          case \"true\":\n            state.option.moz = false;\n            state.option.esversion = esversions[key];\n            break;\n          case \"false\":\n            if (!state.option.moz) {\n              state.option.esversion = 5;\n            }\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"esversion\") {\n          switch (val) {\n          case \"5\":\n            if (state.inES5(true)) {\n              warning(\"I003\");\n            }\n          case \"3\":\n          case \"6\":\n            state.option.moz = false;\n            state.option.esversion = +val;\n            break;\n          case \"2015\":\n            state.option.moz = false;\n            state.option.esversion = 6;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", state.tokens.next, \"esversion\");\n          }\n          return;\n        }\n\n        var match = /^([+-])(W\\d{3})$/g.exec(key);\n        if (match) {\n          state.ignored[match[2]] = (match[1] === \"-\");\n          return;\n        }\n\n        var tn;\n        if (val === \"true\" || val === \"false\") {\n          if (nt.type === \"jslint\") {\n            tn = options.renamed[key] || key;\n            state.option[tn] = (val === \"true\");\n\n            if (options.inverted[tn] !== undefined) {\n              state.option[tn] = !state.option[tn];\n            }\n          } else {\n            state.option[key] = (val === \"true\");\n          }\n\n          if (key === \"newcap\") {\n            state.option[\"(explicitNewcap)\"] = true;\n          }\n          return;\n        }\n\n        error(\"E002\", nt);\n      });\n\n      assume();\n    }\n  }\n\n  function peek(p) {\n    var i = p || 0, j = lookahead.length, t;\n\n    if (i < j) {\n      return lookahead[i];\n    }\n\n    while (j <= i) {\n      t = lookahead[j];\n      if (!t) {\n        t = lookahead[j] = lex.token();\n      }\n      j += 1;\n    }\n    if (!t && state.tokens.next.id === \"(end)\") {\n      return state.tokens.next;\n    }\n\n    return t;\n  }\n\n  function peekIgnoreEOL() {\n    var i = 0;\n    var t;\n    do {\n      t = peek(i++);\n    } while (t.id === \"(endline)\");\n    return t;\n  }\n\n  function advance(id, t) {\n\n    switch (state.tokens.curr.id) {\n    case \"(number)\":\n      if (state.tokens.next.id === \".\") {\n        warning(\"W005\", state.tokens.curr);\n      }\n      break;\n    case \"-\":\n      if (state.tokens.next.id === \"-\" || state.tokens.next.id === \"--\") {\n        warning(\"W006\");\n      }\n      break;\n    case \"+\":\n      if (state.tokens.next.id === \"+\" || state.tokens.next.id === \"++\") {\n        warning(\"W007\");\n      }\n      break;\n    }\n\n    if (id && state.tokens.next.id !== id) {\n      if (t) {\n        if (state.tokens.next.id === \"(end)\") {\n          error(\"E019\", t, t.id);\n        } else {\n          error(\"E020\", state.tokens.next, id, t.id, t.line, state.tokens.next.value);\n        }\n      } else if (state.tokens.next.type !== \"(identifier)\" || state.tokens.next.value !== id) {\n        warning(\"W116\", state.tokens.next, id, state.tokens.next.value);\n      }\n    }\n\n    state.tokens.prev = state.tokens.curr;\n    state.tokens.curr = state.tokens.next;\n    for (;;) {\n      state.tokens.next = lookahead.shift() || lex.token();\n\n      if (!state.tokens.next) { // No more tokens left, give up\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      if (state.tokens.next.id === \"(end)\" || state.tokens.next.id === \"(error)\") {\n        return;\n      }\n\n      if (state.tokens.next.check) {\n        state.tokens.next.check();\n      }\n\n      if (state.tokens.next.isSpecial) {\n        if (state.tokens.next.type === \"falls through\") {\n          state.tokens.curr.caseFallsThrough = true;\n        } else {\n          doOption();\n        }\n      } else {\n        if (state.tokens.next.id !== \"(endline)\") {\n          break;\n        }\n      }\n    }\n  }\n\n  function isInfix(token) {\n    return token.infix || (!token.identifier && !token.template && !!token.led);\n  }\n\n  function isEndOfExpr() {\n    var curr = state.tokens.curr;\n    var next = state.tokens.next;\n    if (next.id === \";\" || next.id === \"}\" || next.id === \":\") {\n      return true;\n    }\n    if (isInfix(next) === isInfix(curr) || (curr.id === \"yield\" && state.inMoz())) {\n      return curr.line !== startLine(next);\n    }\n    return false;\n  }\n\n  function isBeginOfExpr(prev) {\n    return !prev.left && prev.arity !== \"unary\";\n  }\n\n  function expression(rbp, initial) {\n    var left, isArray = false, isObject = false, isLetExpr = false;\n\n    state.nameStack.push();\n    if (!initial && state.tokens.next.value === \"let\" && peek(0).value === \"(\") {\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.next, \"let expressions\");\n      }\n      isLetExpr = true;\n      state.funct[\"(scope)\"].stack();\n      advance(\"let\");\n      advance(\"(\");\n      state.tokens.prev.fud();\n      advance(\")\");\n    }\n\n    if (state.tokens.next.id === \"(end)\")\n      error(\"E006\", state.tokens.curr);\n\n    var isDangerous =\n      state.option.asi &&\n      state.tokens.prev.line !== startLine(state.tokens.curr) &&\n      _.contains([\"]\", \")\"], state.tokens.prev.id) &&\n      _.contains([\"[\", \"(\"], state.tokens.curr.id);\n\n    if (isDangerous)\n      warning(\"W014\", state.tokens.curr, state.tokens.curr.id);\n\n    advance();\n\n    if (initial) {\n      state.funct[\"(verb)\"] = state.tokens.curr.value;\n      state.tokens.curr.beginsStmt = true;\n    }\n\n    if (initial === true && state.tokens.curr.fud) {\n      left = state.tokens.curr.fud();\n    } else {\n      if (state.tokens.curr.nud) {\n        left = state.tokens.curr.nud();\n      } else {\n        error(\"E030\", state.tokens.curr, state.tokens.curr.id);\n      }\n      while ((rbp < state.tokens.next.lbp || state.tokens.next.type === \"(template)\") &&\n              !isEndOfExpr()) {\n        isArray = state.tokens.curr.value === \"Array\";\n        isObject = state.tokens.curr.value === \"Object\";\n        if (left && (left.value || (left.first && left.first.value))) {\n          if (left.value !== \"new\" ||\n            (left.first && left.first.value && left.first.value === \".\")) {\n            isArray = false;\n            if (left.value !== state.tokens.curr.value) {\n              isObject = false;\n            }\n          }\n        }\n\n        advance();\n\n        if (isArray && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W009\", state.tokens.curr);\n        }\n\n        if (isObject && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W010\", state.tokens.curr);\n        }\n\n        if (left && state.tokens.curr.led) {\n          left = state.tokens.curr.led(left);\n        } else {\n          error(\"E033\", state.tokens.curr, state.tokens.curr.id);\n        }\n      }\n    }\n    if (isLetExpr) {\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    state.nameStack.pop();\n\n    return left;\n  }\n\n  function startLine(token) {\n    return token.startLine || token.line;\n  }\n\n  function nobreaknonadjacent(left, right) {\n    left = left || state.tokens.curr;\n    right = right || state.tokens.next;\n    if (!state.option.laxbreak && left.line !== startLine(right)) {\n      warning(\"W014\", right, right.value);\n    }\n  }\n\n  function nolinebreak(t) {\n    t = t || state.tokens.curr;\n    if (t.line !== startLine(state.tokens.next)) {\n      warning(\"E022\", t, t.value);\n    }\n  }\n\n  function nobreakcomma(left, right) {\n    if (left.line !== startLine(right)) {\n      if (!state.option.laxcomma) {\n        if (comma.first) {\n          warning(\"I001\");\n          comma.first = false;\n        }\n        warning(\"W014\", left, right.value);\n      }\n    }\n  }\n\n  function comma(opts) {\n    opts = opts || {};\n\n    if (!opts.peek) {\n      nobreakcomma(state.tokens.curr, state.tokens.next);\n      advance(\",\");\n    } else {\n      nobreakcomma(state.tokens.prev, state.tokens.curr);\n    }\n\n    if (state.tokens.next.identifier && !(opts.property && state.inES5())) {\n      switch (state.tokens.next.value) {\n      case \"break\":\n      case \"case\":\n      case \"catch\":\n      case \"continue\":\n      case \"default\":\n      case \"do\":\n      case \"else\":\n      case \"finally\":\n      case \"for\":\n      case \"if\":\n      case \"in\":\n      case \"instanceof\":\n      case \"return\":\n      case \"switch\":\n      case \"throw\":\n      case \"try\":\n      case \"var\":\n      case \"let\":\n      case \"while\":\n      case \"with\":\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n\n    if (state.tokens.next.type === \"(punctuator)\") {\n      switch (state.tokens.next.value) {\n      case \"}\":\n      case \"]\":\n      case \",\":\n        if (opts.allowTrailing) {\n          return true;\n        }\n      case \")\":\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function symbol(s, p) {\n    var x = state.syntax[s];\n    if (!x || typeof x !== \"object\") {\n      state.syntax[s] = x = {\n        id: s,\n        lbp: p,\n        value: s\n      };\n    }\n    return x;\n  }\n\n  function delim(s) {\n    var x = symbol(s, 0);\n    x.delim = true;\n    return x;\n  }\n\n  function stmt(s, f) {\n    var x = delim(s);\n    x.identifier = x.reserved = true;\n    x.fud = f;\n    return x;\n  }\n\n  function blockstmt(s, f) {\n    var x = stmt(s, f);\n    x.block = true;\n    return x;\n  }\n\n  function reserveName(x) {\n    var c = x.id.charAt(0);\n    if ((c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\")) {\n      x.identifier = x.reserved = true;\n    }\n    return x;\n  }\n\n  function prefix(s, f) {\n    var x = symbol(s, 150);\n    reserveName(x);\n\n    x.nud = (typeof f === \"function\") ? f : function() {\n      this.arity = \"unary\";\n      this.right = expression(150);\n\n      if (this.id === \"++\" || this.id === \"--\") {\n        if (state.option.plusplus) {\n          warning(\"W016\", this, this.id);\n        } else if (this.right && (!this.right.identifier || isReserved(this.right)) &&\n            this.right.id !== \".\" && this.right.id !== \"[\") {\n          warning(\"W017\", this);\n        }\n\n        if (this.right && this.right.isMetaProperty) {\n          error(\"E031\", this);\n        } else if (this.right && this.right.identifier) {\n          state.funct[\"(scope)\"].block.modify(this.right.value, this);\n        }\n      }\n\n      return this;\n    };\n\n    return x;\n  }\n\n  function type(s, f) {\n    var x = delim(s);\n    x.type = s;\n    x.nud = f;\n    return x;\n  }\n\n  function reserve(name, func) {\n    var x = type(name, func);\n    x.identifier = true;\n    x.reserved = true;\n    return x;\n  }\n\n  function FutureReservedWord(name, meta) {\n    var x = type(name, (meta && meta.nud) || function() {\n      return this;\n    });\n\n    meta = meta || {};\n    meta.isFutureReservedWord = true;\n\n    x.value = name;\n    x.identifier = true;\n    x.reserved = true;\n    x.meta = meta;\n\n    return x;\n  }\n\n  function reservevar(s, v) {\n    return reserve(s, function() {\n      if (typeof v === \"function\") {\n        v(this);\n      }\n      return this;\n    });\n  }\n\n  function infix(s, f, p, w) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.infix = true;\n    x.led = function(left) {\n      if (!w) {\n        nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      }\n      if ((s === \"in\" || s === \"instanceof\") && left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n      if (typeof f === \"function\") {\n        return f(left, this);\n      } else {\n        this.left = left;\n        this.right = expression(p);\n        return this;\n      }\n    };\n    return x;\n  }\n\n  function application(s) {\n    var x = symbol(s, 42);\n\n    x.led = function(left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n\n      this.left = left;\n      this.right = doFunction({ type: \"arrow\", loneArg: left });\n      return this;\n    };\n    return x;\n  }\n\n  function relation(s, f) {\n    var x = symbol(s, 100);\n\n    x.led = function(left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      this.left = left;\n      var right = this.right = expression(100);\n\n      if (isIdentifier(left, \"NaN\") || isIdentifier(right, \"NaN\")) {\n        warning(\"W019\", this);\n      } else if (f) {\n        f.apply(this, [left, right]);\n      }\n\n      if (!left || !right) {\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      if (left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n\n      if (right.id === \"!\") {\n        warning(\"W018\", right, \"!\");\n      }\n\n      return this;\n    };\n    return x;\n  }\n\n  function isPoorRelation(node) {\n    return node &&\n        ((node.type === \"(number)\" && +node.value === 0) ||\n         (node.type === \"(string)\" && node.value === \"\") ||\n         (node.type === \"null\" && !state.option.eqnull) ||\n        node.type === \"true\" ||\n        node.type === \"false\" ||\n        node.type === \"undefined\");\n  }\n\n  var typeofValues = {};\n  typeofValues.legacy = [\n    \"xml\",\n    \"unknown\"\n  ];\n  typeofValues.es3 = [\n    \"undefined\", \"boolean\", \"number\", \"string\", \"function\", \"object\",\n  ];\n  typeofValues.es3 = typeofValues.es3.concat(typeofValues.legacy);\n  typeofValues.es6 = typeofValues.es3.concat(\"symbol\");\n  function isTypoTypeof(left, right, state) {\n    var values;\n\n    if (state.option.notypeof)\n      return false;\n\n    if (!left || !right)\n      return false;\n\n    values = state.inES6() ? typeofValues.es6 : typeofValues.es3;\n\n    if (right.type === \"(identifier)\" && right.value === \"typeof\" && left.type === \"(string)\")\n      return !_.contains(values, left.value);\n\n    return false;\n  }\n\n  function isGlobalEval(left, state) {\n    var isGlobal = false;\n    if (left.type === \"this\" && state.funct[\"(context)\"] === null) {\n      isGlobal = true;\n    }\n    else if (left.type === \"(identifier)\") {\n      if (state.option.node && left.value === \"global\") {\n        isGlobal = true;\n      }\n\n      else if (state.option.browser && (left.value === \"window\" || left.value === \"document\")) {\n        isGlobal = true;\n      }\n    }\n\n    return isGlobal;\n  }\n\n  function findNativePrototype(left) {\n    var natives = [\n      \"Array\", \"ArrayBuffer\", \"Boolean\", \"Collator\", \"DataView\", \"Date\",\n      \"DateTimeFormat\", \"Error\", \"EvalError\", \"Float32Array\", \"Float64Array\",\n      \"Function\", \"Infinity\", \"Intl\", \"Int16Array\", \"Int32Array\", \"Int8Array\",\n      \"Iterator\", \"Number\", \"NumberFormat\", \"Object\", \"RangeError\",\n      \"ReferenceError\", \"RegExp\", \"StopIteration\", \"String\", \"SyntaxError\",\n      \"TypeError\", \"Uint16Array\", \"Uint32Array\", \"Uint8Array\", \"Uint8ClampedArray\",\n      \"URIError\"\n    ];\n\n    function walkPrototype(obj) {\n      if (typeof obj !== \"object\") return;\n      return obj.right === \"prototype\" ? obj : walkPrototype(obj.left);\n    }\n\n    function walkNative(obj) {\n      while (!obj.identifier && typeof obj.left === \"object\")\n        obj = obj.left;\n\n      if (obj.identifier && natives.indexOf(obj.value) >= 0)\n        return obj.value;\n    }\n\n    var prototype = walkPrototype(left);\n    if (prototype) return walkNative(prototype);\n  }\n  function checkLeftSideAssign(left, assignToken, options) {\n\n    var allowDestructuring = options && options.allowDestructuring;\n\n    assignToken = assignToken || left;\n\n    if (state.option.freeze) {\n      var nativeObject = findNativePrototype(left);\n      if (nativeObject)\n        warning(\"W121\", left, nativeObject);\n    }\n\n    if (left.identifier && !left.isMetaProperty) {\n      state.funct[\"(scope)\"].block.reassign(left.value, left);\n    }\n\n    if (left.id === \".\") {\n      if (!left.left || left.left.value === \"arguments\" && !state.isStrict()) {\n        warning(\"E031\", assignToken);\n      }\n\n      state.nameStack.set(state.tokens.prev);\n      return true;\n    } else if (left.id === \"{\" || left.id === \"[\") {\n      if (allowDestructuring && state.tokens.curr.left.destructAssign) {\n        state.tokens.curr.left.destructAssign.forEach(function(t) {\n          if (t.id) {\n            state.funct[\"(scope)\"].block.modify(t.id, t.token);\n          }\n        });\n      } else {\n        if (left.id === \"{\" || !left.left) {\n          warning(\"E031\", assignToken);\n        } else if (left.left.value === \"arguments\" && !state.isStrict()) {\n          warning(\"E031\", assignToken);\n        }\n      }\n\n      if (left.id === \"[\") {\n        state.nameStack.set(left.right);\n      }\n\n      return true;\n    } else if (left.isMetaProperty) {\n      error(\"E031\", assignToken);\n      return true;\n    } else if (left.identifier && !isReserved(left)) {\n      if (state.funct[\"(scope)\"].labeltype(left.value) === \"exception\") {\n        warning(\"W022\", left);\n      }\n      state.nameStack.set(left);\n      return true;\n    }\n\n    if (left === state.syntax[\"function\"]) {\n      warning(\"W023\", state.tokens.curr);\n    }\n\n    return false;\n  }\n\n  function assignop(s, f, p) {\n    var x = infix(s, typeof f === \"function\" ? f : function(left, that) {\n      that.left = left;\n\n      if (left && checkLeftSideAssign(left, that, { allowDestructuring: true })) {\n        that.right = expression(10);\n        return that;\n      }\n\n      error(\"E031\", that);\n    }, p);\n\n    x.exps = true;\n    x.assign = true;\n    return x;\n  }\n\n\n  function bitwise(s, f, p) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.led = (typeof f === \"function\") ? f : function(left) {\n      if (state.option.bitwise) {\n        warning(\"W016\", this, this.id);\n      }\n      this.left = left;\n      this.right = expression(p);\n      return this;\n    };\n    return x;\n  }\n\n  function bitwiseassignop(s) {\n    return assignop(s, function(left, that) {\n      if (state.option.bitwise) {\n        warning(\"W016\", that, that.id);\n      }\n\n      if (left && checkLeftSideAssign(left, that)) {\n        that.right = expression(10);\n        return that;\n      }\n      error(\"E031\", that);\n    }, 20);\n  }\n\n  function suffix(s) {\n    var x = symbol(s, 150);\n\n    x.led = function(left) {\n      if (state.option.plusplus) {\n        warning(\"W016\", this, this.id);\n      } else if ((!left.identifier || isReserved(left)) && left.id !== \".\" && left.id !== \"[\") {\n        warning(\"W017\", this);\n      }\n\n      if (left.isMetaProperty) {\n        error(\"E031\", this);\n      } else if (left && left.identifier) {\n        state.funct[\"(scope)\"].block.modify(left.value, left);\n      }\n\n      this.left = left;\n      return this;\n    };\n    return x;\n  }\n\n  function optionalidentifier(fnparam, prop, preserve) {\n    if (!state.tokens.next.identifier) {\n      return;\n    }\n\n    if (!preserve) {\n      advance();\n    }\n\n    var curr = state.tokens.curr;\n    var val  = state.tokens.curr.value;\n\n    if (!isReserved(curr)) {\n      return val;\n    }\n\n    if (prop) {\n      if (state.inES5()) {\n        return val;\n      }\n    }\n\n    if (fnparam && val === \"undefined\") {\n      return val;\n    }\n\n    warning(\"W024\", state.tokens.curr, state.tokens.curr.id);\n    return val;\n  }\n  function identifier(fnparam, prop) {\n    var i = optionalidentifier(fnparam, prop, false);\n    if (i) {\n      return i;\n    }\n    if (state.tokens.next.value === \"...\") {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.next, \"spread/rest operator\", \"6\");\n      }\n      advance();\n\n      if (checkPunctuator(state.tokens.next, \"...\")) {\n        warning(\"E024\", state.tokens.next, \"...\");\n        while (checkPunctuator(state.tokens.next, \"...\")) {\n          advance();\n        }\n      }\n\n      if (!state.tokens.next.identifier) {\n        warning(\"E024\", state.tokens.curr, \"...\");\n        return;\n      }\n\n      return identifier(fnparam, prop);\n    } else {\n      error(\"E030\", state.tokens.next, state.tokens.next.value);\n      if (state.tokens.next.id !== \";\") {\n        advance();\n      }\n    }\n  }\n\n\n  function reachable(controlToken) {\n    var i = 0, t;\n    if (state.tokens.next.id !== \";\" || controlToken.inBracelessBlock) {\n      return;\n    }\n    for (;;) {\n      do {\n        t = peek(i);\n        i += 1;\n      } while (t.id !== \"(end)\" && t.id === \"(comment)\");\n\n      if (t.reach) {\n        return;\n      }\n      if (t.id !== \"(endline)\") {\n        if (t.id === \"function\") {\n          if (state.option.latedef === true) {\n            warning(\"W026\", t);\n          }\n          break;\n        }\n\n        warning(\"W027\", t, t.value, controlToken.value);\n        break;\n      }\n    }\n  }\n\n  function parseFinalSemicolon() {\n    if (state.tokens.next.id !== \";\") {\n      if (state.tokens.next.isUnclosed) return advance();\n\n      var sameLine = startLine(state.tokens.next) === state.tokens.curr.line &&\n                     state.tokens.next.id !== \"(end)\";\n      var blockEnd = checkPunctuator(state.tokens.next, \"}\");\n\n      if (sameLine && !blockEnd) {\n        errorAt(\"E058\", state.tokens.curr.line, state.tokens.curr.character);\n      } else if (!state.option.asi) {\n        if ((blockEnd && !state.option.lastsemic) || !sameLine) {\n          warningAt(\"W033\", state.tokens.curr.line, state.tokens.curr.character);\n        }\n      }\n    } else {\n      advance(\";\");\n    }\n  }\n\n  function statement() {\n    var i = indent, r, t = state.tokens.next, hasOwnScope = false;\n\n    if (t.id === \";\") {\n      advance(\";\");\n      return;\n    }\n    var res = isReserved(t);\n\n    if (res && t.meta && t.meta.isFutureReservedWord && peek().id === \":\") {\n      warning(\"W024\", t, t.id);\n      res = false;\n    }\n\n    if (t.identifier && !res && peek().id === \":\") {\n      advance();\n      advance(\":\");\n\n      hasOwnScope = true;\n      state.funct[\"(scope)\"].stack();\n      state.funct[\"(scope)\"].block.addBreakLabel(t.value, { token: state.tokens.curr });\n\n      if (!state.tokens.next.labelled && state.tokens.next.value !== \"{\") {\n        warning(\"W028\", state.tokens.next, t.value, state.tokens.next.value);\n      }\n\n      state.tokens.next.label = t.value;\n      t = state.tokens.next;\n    }\n\n    if (t.id === \"{\") {\n      var iscase = (state.funct[\"(verb)\"] === \"case\" && state.tokens.curr.value === \":\");\n      block(true, true, false, false, iscase);\n      return;\n    }\n\n    r = expression(0, true);\n\n    if (r && !(r.identifier && r.value === \"function\") &&\n        !(r.type === \"(punctuator)\" && r.left &&\n          r.left.identifier && r.left.value === \"function\")) {\n      if (!state.isStrict() &&\n          state.option.strict === \"global\") {\n        warning(\"E007\");\n      }\n    }\n\n    if (!t.block) {\n      if (!state.option.expr && (!r || !r.exps)) {\n        warning(\"W030\", state.tokens.curr);\n      } else if (state.option.nonew && r && r.left && r.id === \"(\" && r.left.id === \"new\") {\n        warning(\"W031\", t);\n      }\n      parseFinalSemicolon();\n    }\n\n    indent = i;\n    if (hasOwnScope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return r;\n  }\n\n\n  function statements() {\n    var a = [], p;\n\n    while (!state.tokens.next.reach && state.tokens.next.id !== \"(end)\") {\n      if (state.tokens.next.id === \";\") {\n        p = peek();\n\n        if (!p || (p.id !== \"(\" && p.id !== \"[\")) {\n          warning(\"W032\");\n        }\n\n        advance(\";\");\n      } else {\n        a.push(statement());\n      }\n    }\n    return a;\n  }\n  function directives() {\n    var i, p, pn;\n\n    while (state.tokens.next.id === \"(string)\") {\n      p = peek(0);\n      if (p.id === \"(endline)\") {\n        i = 1;\n        do {\n          pn = peek(i++);\n        } while (pn.id === \"(endline)\");\n        if (pn.id === \";\") {\n          p = pn;\n        } else if (pn.value === \"[\" || pn.value === \".\") {\n          break;\n        } else if (!state.option.asi || pn.value === \"(\") {\n          warning(\"W033\", state.tokens.next);\n        }\n      } else if (p.id === \".\" || p.id === \"[\") {\n        break;\n      } else if (p.id !== \";\") {\n        warning(\"W033\", p);\n      }\n\n      advance();\n      var directive = state.tokens.curr.value;\n      if (state.directive[directive] ||\n          (directive === \"use strict\" && state.option.strict === \"implied\")) {\n        warning(\"W034\", state.tokens.curr, directive);\n      }\n      state.directive[directive] = true;\n\n      if (p.id === \";\") {\n        advance(\";\");\n      }\n    }\n\n    if (state.isStrict()) {\n      if (!state.option[\"(explicitNewcap)\"]) {\n        state.option.newcap = true;\n      }\n      state.option.undef = true;\n    }\n  }\n  function block(ordinary, stmt, isfunc, isfatarrow, iscase) {\n    var a,\n      b = inblock,\n      old_indent = indent,\n      m,\n      t,\n      line,\n      d;\n\n    inblock = ordinary;\n\n    t = state.tokens.next;\n\n    var metrics = state.funct[\"(metrics)\"];\n    metrics.nestedBlockDepth += 1;\n    metrics.verifyMaxNestedBlockDepthPerFunction();\n\n    if (state.tokens.next.id === \"{\") {\n      advance(\"{\");\n      state.funct[\"(scope)\"].stack();\n\n      line = state.tokens.curr.line;\n      if (state.tokens.next.id !== \"}\") {\n        indent += state.option.indent;\n        while (!ordinary && state.tokens.next.from > indent) {\n          indent += state.option.indent;\n        }\n\n        if (isfunc) {\n          m = {};\n          for (d in state.directive) {\n            if (_.has(state.directive, d)) {\n              m[d] = state.directive[d];\n            }\n          }\n          directives();\n\n          if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n            if (!m[\"use strict\"] && !state.isStrict()) {\n              warning(\"E007\");\n            }\n          }\n        }\n\n        a = statements();\n\n        metrics.statementCount += a.length;\n\n        indent -= state.option.indent;\n      }\n\n      advance(\"}\", t);\n\n      if (isfunc) {\n        state.funct[\"(scope)\"].validateParams();\n        if (m) {\n          state.directive = m;\n        }\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n      indent = old_indent;\n    } else if (!ordinary) {\n      if (isfunc) {\n        state.funct[\"(scope)\"].stack();\n\n        m = {};\n        if (stmt && !isfatarrow && !state.inMoz()) {\n          error(\"W118\", state.tokens.curr, \"function closure expressions\");\n        }\n\n        if (!stmt) {\n          for (d in state.directive) {\n            if (_.has(state.directive, d)) {\n              m[d] = state.directive[d];\n            }\n          }\n        }\n        expression(10);\n\n        if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n          if (!m[\"use strict\"] && !state.isStrict()) {\n            warning(\"E007\");\n          }\n        }\n\n        state.funct[\"(scope)\"].unstack();\n      } else {\n        error(\"E021\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n    } else {\n      state.funct[\"(noblockscopedvar)\"] = state.tokens.next.id !== \"for\";\n      state.funct[\"(scope)\"].stack();\n\n      if (!stmt || state.option.curly) {\n        warning(\"W116\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n\n      state.tokens.next.inBracelessBlock = true;\n      indent += state.option.indent;\n      a = [statement()];\n      indent -= state.option.indent;\n\n      state.funct[\"(scope)\"].unstack();\n      delete state.funct[\"(noblockscopedvar)\"];\n    }\n    switch (state.funct[\"(verb)\"]) {\n    case \"break\":\n    case \"continue\":\n    case \"return\":\n    case \"throw\":\n      if (iscase) {\n        break;\n      }\n    default:\n      state.funct[\"(verb)\"] = null;\n    }\n\n    inblock = b;\n    if (ordinary && state.option.noempty && (!a || a.length === 0)) {\n      warning(\"W035\", state.tokens.prev);\n    }\n    metrics.nestedBlockDepth -= 1;\n    return a;\n  }\n\n\n  function countMember(m) {\n    if (membersOnly && typeof membersOnly[m] !== \"boolean\") {\n      warning(\"W036\", state.tokens.curr, m);\n    }\n    if (typeof member[m] === \"number\") {\n      member[m] += 1;\n    } else {\n      member[m] = 1;\n    }\n  }\n\n  type(\"(number)\", function() {\n    return this;\n  });\n\n  type(\"(string)\", function() {\n    return this;\n  });\n\n  state.syntax[\"(identifier)\"] = {\n    type: \"(identifier)\",\n    lbp: 0,\n    identifier: true,\n\n    nud: function() {\n      var v = this.value;\n      if (state.tokens.next.id === \"=>\") {\n        return this;\n      }\n\n      if (!state.funct[\"(comparray)\"].check(v)) {\n        state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n      }\n      return this;\n    },\n\n    led: function() {\n      error(\"E033\", state.tokens.next, state.tokens.next.value);\n    }\n  };\n\n  var baseTemplateSyntax = {\n    lbp: 0,\n    identifier: false,\n    template: true,\n  };\n  state.syntax[\"(template)\"] = _.extend({\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template middle)\"] = _.extend({\n    type: \"(template middle)\",\n    middle: true,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template tail)\"] = _.extend({\n    type: \"(template tail)\",\n    tail: true,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(no subst template)\"] = _.extend({\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: true,\n    tail: true // mark as tail, since it's always the last component\n  }, baseTemplateSyntax);\n\n  type(\"(regexp)\", function() {\n    return this;\n  });\n\n  delim(\"(endline)\");\n  delim(\"(begin)\");\n  delim(\"(end)\").reach = true;\n  delim(\"(error)\").reach = true;\n  delim(\"}\").reach = true;\n  delim(\")\");\n  delim(\"]\");\n  delim(\"\\\"\").reach = true;\n  delim(\"'\").reach = true;\n  delim(\";\");\n  delim(\":\").reach = true;\n  delim(\"#\");\n\n  reserve(\"else\");\n  reserve(\"case\").reach = true;\n  reserve(\"catch\");\n  reserve(\"default\").reach = true;\n  reserve(\"finally\");\n  reservevar(\"arguments\", function(x) {\n    if (state.isStrict() && state.funct[\"(global)\"]) {\n      warning(\"E008\", x);\n    }\n  });\n  reservevar(\"eval\");\n  reservevar(\"false\");\n  reservevar(\"Infinity\");\n  reservevar(\"null\");\n  reservevar(\"this\", function(x) {\n    if (state.isStrict() && !isMethod() &&\n        !state.option.validthis && ((state.funct[\"(statement)\"] &&\n        state.funct[\"(name)\"].charAt(0) > \"Z\") || state.funct[\"(global)\"])) {\n      warning(\"W040\", x);\n    }\n  });\n  reservevar(\"true\");\n  reservevar(\"undefined\");\n\n  assignop(\"=\", \"assign\", 20);\n  assignop(\"+=\", \"assignadd\", 20);\n  assignop(\"-=\", \"assignsub\", 20);\n  assignop(\"*=\", \"assignmult\", 20);\n  assignop(\"/=\", \"assigndiv\", 20).nud = function() {\n    error(\"E014\");\n  };\n  assignop(\"%=\", \"assignmod\", 20);\n\n  bitwiseassignop(\"&=\");\n  bitwiseassignop(\"|=\");\n  bitwiseassignop(\"^=\");\n  bitwiseassignop(\"<<=\");\n  bitwiseassignop(\">>=\");\n  bitwiseassignop(\">>>=\");\n  infix(\",\", function(left, that) {\n    var expr;\n    that.exprs = [left];\n\n    if (state.option.nocomma) {\n      warning(\"W127\");\n    }\n\n    if (!comma({ peek: true })) {\n      return that;\n    }\n    while (true) {\n      if (!(expr = expression(10))) {\n        break;\n      }\n      that.exprs.push(expr);\n      if (state.tokens.next.value !== \",\" || !comma()) {\n        break;\n      }\n    }\n    return that;\n  }, 10, true);\n\n  infix(\"?\", function(left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(10);\n    advance(\":\");\n    that[\"else\"] = expression(10);\n    return that;\n  }, 30);\n\n  var orPrecendence = 40;\n  infix(\"||\", function(left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(orPrecendence);\n    return that;\n  }, orPrecendence);\n  infix(\"&&\", \"and\", 50);\n  bitwise(\"|\", \"bitor\", 70);\n  bitwise(\"^\", \"bitxor\", 80);\n  bitwise(\"&\", \"bitand\", 90);\n  relation(\"==\", function(left, right) {\n    var eqnull = state.option.eqnull &&\n      ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    switch (true) {\n      case !eqnull && state.option.eqeqeq:\n        this.from = this.character;\n        warning(\"W116\", this, \"===\", \"==\");\n        break;\n      case isPoorRelation(left):\n        warning(\"W041\", this, \"===\", left.value);\n        break;\n      case isPoorRelation(right):\n        warning(\"W041\", this, \"===\", right.value);\n        break;\n      case isTypoTypeof(right, left, state):\n        warning(\"W122\", this, right.value);\n        break;\n      case isTypoTypeof(left, right, state):\n        warning(\"W122\", this, left.value);\n        break;\n    }\n\n    return this;\n  });\n  relation(\"===\", function(left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!=\", function(left, right) {\n    var eqnull = state.option.eqnull &&\n        ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    if (!eqnull && state.option.eqeqeq) {\n      this.from = this.character;\n      warning(\"W116\", this, \"!==\", \"!=\");\n    } else if (isPoorRelation(left)) {\n      warning(\"W041\", this, \"!==\", left.value);\n    } else if (isPoorRelation(right)) {\n      warning(\"W041\", this, \"!==\", right.value);\n    } else if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!==\", function(left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"<\");\n  relation(\">\");\n  relation(\"<=\");\n  relation(\">=\");\n  bitwise(\"<<\", \"shiftleft\", 120);\n  bitwise(\">>\", \"shiftright\", 120);\n  bitwise(\">>>\", \"shiftrightunsigned\", 120);\n  infix(\"in\", \"in\", 120);\n  infix(\"instanceof\", \"instanceof\", 120);\n  infix(\"+\", function(left, that) {\n    var right;\n    that.left = left;\n    that.right = right = expression(130);\n\n    if (left && right && left.id === \"(string)\" && right.id === \"(string)\") {\n      left.value += right.value;\n      left.character = right.character;\n      if (!state.option.scripturl && reg.javascriptURL.test(left.value)) {\n        warning(\"W050\", left);\n      }\n      return left;\n    }\n\n    return that;\n  }, 130);\n  prefix(\"+\", \"num\");\n  prefix(\"+++\", function() {\n    warning(\"W007\");\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n  infix(\"+++\", function(left) {\n    warning(\"W007\");\n    this.left = left;\n    this.right = expression(130);\n    return this;\n  }, 130);\n  infix(\"-\", \"sub\", 130);\n  prefix(\"-\", \"neg\");\n  prefix(\"---\", function() {\n    warning(\"W006\");\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n  infix(\"---\", function(left) {\n    warning(\"W006\");\n    this.left = left;\n    this.right = expression(130);\n    return this;\n  }, 130);\n  infix(\"*\", \"mult\", 140);\n  infix(\"/\", \"div\", 140);\n  infix(\"%\", \"mod\", 140);\n\n  suffix(\"++\");\n  prefix(\"++\", \"preinc\");\n  state.syntax[\"++\"].exps = true;\n\n  suffix(\"--\");\n  prefix(\"--\", \"predec\");\n  state.syntax[\"--\"].exps = true;\n  prefix(\"delete\", function() {\n    var p = expression(10);\n    if (!p) {\n      return this;\n    }\n\n    if (p.id !== \".\" && p.id !== \"[\") {\n      warning(\"W051\");\n    }\n    this.first = p;\n    if (p.identifier && !state.isStrict()) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  }).exps = true;\n\n  prefix(\"~\", function() {\n    if (state.option.bitwise) {\n      warning(\"W016\", this, \"~\");\n    }\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n\n  prefix(\"...\", function() {\n    if (!state.inES6(true)) {\n      warning(\"W119\", this, \"spread/rest operator\", \"6\");\n    }\n    if (!state.tokens.next.identifier &&\n        state.tokens.next.type !== \"(string)\" &&\n          !checkPunctuators(state.tokens.next, [\"[\", \"(\"])) {\n\n      error(\"E030\", state.tokens.next, state.tokens.next.value);\n    }\n    expression(150);\n    return this;\n  });\n\n  prefix(\"!\", function() {\n    this.arity = \"unary\";\n    this.right = expression(150);\n\n    if (!this.right) { // '!' followed by nothing? Give up.\n      quit(\"E041\", this.line || 0);\n    }\n\n    if (bang[this.right.id] === true) {\n      warning(\"W018\", this, \"!\");\n    }\n    return this;\n  });\n\n  prefix(\"typeof\", (function() {\n    var p = expression(150);\n    this.first = this.right = p;\n\n    if (!p) { // 'typeof' followed by nothing? Give up.\n      quit(\"E041\", this.line || 0, this.character || 0);\n    }\n    if (p.identifier) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  }));\n  prefix(\"new\", function() {\n    var mp = metaProperty(\"target\", function() {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.prev, \"new.target\", \"6\");\n      }\n      var inFunction, c = state.funct;\n      while (c) {\n        inFunction = !c[\"(global)\"];\n        if (!c[\"(arrow)\"]) { break; }\n        c = c[\"(context)\"];\n      }\n      if (!inFunction) {\n        warning(\"W136\", state.tokens.prev, \"new.target\");\n      }\n    });\n    if (mp) { return mp; }\n\n    var c = expression(155), i;\n    if (c && c.id !== \"function\") {\n      if (c.identifier) {\n        c[\"new\"] = true;\n        switch (c.value) {\n        case \"Number\":\n        case \"String\":\n        case \"Boolean\":\n        case \"Math\":\n        case \"JSON\":\n          warning(\"W053\", state.tokens.prev, c.value);\n          break;\n        case \"Symbol\":\n          if (state.inES6()) {\n            warning(\"W053\", state.tokens.prev, c.value);\n          }\n          break;\n        case \"Function\":\n          if (!state.option.evil) {\n            warning(\"W054\");\n          }\n          break;\n        case \"Date\":\n        case \"RegExp\":\n        case \"this\":\n          break;\n        default:\n          if (c.id !== \"function\") {\n            i = c.value.substr(0, 1);\n            if (state.option.newcap && (i < \"A\" || i > \"Z\") &&\n              !state.funct[\"(scope)\"].isPredefined(c.value)) {\n              warning(\"W055\", state.tokens.curr);\n            }\n          }\n        }\n      } else {\n        if (c.id !== \".\" && c.id !== \"[\" && c.id !== \"(\") {\n          warning(\"W056\", state.tokens.curr);\n        }\n      }\n    } else {\n      if (!state.option.supernew)\n        warning(\"W057\", this);\n    }\n    if (state.tokens.next.id !== \"(\" && !state.option.supernew) {\n      warning(\"W058\", state.tokens.curr, state.tokens.curr.value);\n    }\n    this.first = this.right = c;\n    return this;\n  });\n  state.syntax[\"new\"].exps = true;\n\n  prefix(\"void\").exps = true;\n\n  infix(\".\", function(left, that) {\n    var m = identifier(false, true);\n\n    if (typeof m === \"string\") {\n      countMember(m);\n    }\n\n    that.left = left;\n    that.right = m;\n\n    if (m && m === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    if (left && left.value === \"arguments\" && (m === \"callee\" || m === \"caller\")) {\n      if (state.option.noarg)\n        warning(\"W059\", left, m);\n      else if (state.isStrict())\n        error(\"E008\");\n    } else if (!state.option.evil && left && left.value === \"document\" &&\n        (m === \"write\" || m === \"writeln\")) {\n      warning(\"W060\", left);\n    }\n\n    if (!state.option.evil && (m === \"eval\" || m === \"execScript\")) {\n      if (isGlobalEval(left, state)) {\n        warning(\"W061\");\n      }\n    }\n\n    return that;\n  }, 160, true);\n\n  infix(\"(\", function(left, that) {\n    if (state.option.immed && left && !left.immed && left.id === \"function\") {\n      warning(\"W062\");\n    }\n\n    var n = 0;\n    var p = [];\n\n    if (left) {\n      if (left.type === \"(identifier)\") {\n        if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {\n          if (\"Array Number String Boolean Date Object Error Symbol\".indexOf(left.value) === -1) {\n            if (left.value === \"Math\") {\n              warning(\"W063\", left);\n            } else if (state.option.newcap) {\n              warning(\"W064\", left);\n            }\n          }\n        }\n      }\n    }\n\n    if (state.tokens.next.id !== \")\") {\n      for (;;) {\n        p[p.length] = expression(10);\n        n += 1;\n        if (state.tokens.next.id !== \",\") {\n          break;\n        }\n        comma();\n      }\n    }\n\n    advance(\")\");\n\n    if (typeof left === \"object\") {\n      if (!state.inES5() && left.value === \"parseInt\" && n === 1) {\n        warning(\"W065\", state.tokens.curr);\n      }\n      if (!state.option.evil) {\n        if (left.value === \"eval\" || left.value === \"Function\" ||\n            left.value === \"execScript\") {\n          warning(\"W061\", left);\n\n          if (p[0] && [0].id === \"(string)\") {\n            addInternalSrc(left, p[0].value);\n          }\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             (left.value === \"setTimeout\" ||\n            left.value === \"setInterval\")) {\n          warning(\"W066\", left);\n          addInternalSrc(left, p[0].value);\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             left.value === \".\" &&\n             left.left.value === \"window\" &&\n             (left.right === \"setTimeout\" ||\n            left.right === \"setInterval\")) {\n          warning(\"W066\", left);\n          addInternalSrc(left, p[0].value);\n        }\n      }\n      if (!left.identifier && left.id !== \".\" && left.id !== \"[\" && left.id !== \"=>\" &&\n          left.id !== \"(\" && left.id !== \"&&\" && left.id !== \"||\" && left.id !== \"?\" &&\n          !(state.inES6() && left[\"(name)\"])) {\n        warning(\"W067\", that);\n      }\n    }\n\n    that.left = left;\n    return that;\n  }, 155, true).exps = true;\n\n  prefix(\"(\", function() {\n    var pn = state.tokens.next, pn1, i = -1;\n    var ret, triggerFnExpr, first, last;\n    var parens = 1;\n    var opening = state.tokens.curr;\n    var preceeding = state.tokens.prev;\n    var isNecessary = !state.option.singleGroups;\n\n    do {\n      if (pn.value === \"(\") {\n        parens += 1;\n      } else if (pn.value === \")\") {\n        parens -= 1;\n      }\n\n      i += 1;\n      pn1 = pn;\n      pn = peek(i);\n    } while (!(parens === 0 && pn1.value === \")\") && pn.value !== \";\" && pn.type !== \"(end)\");\n\n    if (state.tokens.next.id === \"function\") {\n      triggerFnExpr = state.tokens.next.immed = true;\n    }\n    if (pn.value === \"=>\") {\n      return doFunction({ type: \"arrow\", parsedOpening: true });\n    }\n\n    var exprs = [];\n\n    if (state.tokens.next.id !== \")\") {\n      for (;;) {\n        exprs.push(expression(10));\n\n        if (state.tokens.next.id !== \",\") {\n          break;\n        }\n\n        if (state.option.nocomma) {\n          warning(\"W127\");\n        }\n\n        comma();\n      }\n    }\n\n    advance(\")\", this);\n    if (state.option.immed && exprs[0] && exprs[0].id === \"function\") {\n      if (state.tokens.next.id !== \"(\" &&\n        state.tokens.next.id !== \".\" && state.tokens.next.id !== \"[\") {\n        warning(\"W068\", this);\n      }\n    }\n\n    if (!exprs.length) {\n      return;\n    }\n    if (exprs.length > 1) {\n      ret = Object.create(state.syntax[\",\"]);\n      ret.exprs = exprs;\n\n      first = exprs[0];\n      last = exprs[exprs.length - 1];\n\n      if (!isNecessary) {\n        isNecessary = preceeding.assign || preceeding.delim;\n      }\n    } else {\n      ret = first = last = exprs[0];\n\n      if (!isNecessary) {\n        isNecessary =\n          (opening.beginsStmt && (ret.id === \"{\" || triggerFnExpr || isFunctor(ret))) ||\n          (triggerFnExpr &&\n            (!isEndOfExpr() || state.tokens.prev.id !== \"}\")) ||\n          (isFunctor(ret) && !isEndOfExpr()) ||\n          (ret.id === \"{\" && preceeding.id === \"=>\") ||\n          (ret.type === \"(number)\" &&\n            checkPunctuator(pn, \".\") && /^\\d+$/.test(ret.value));\n      }\n    }\n\n    if (ret) {\n      if (!isNecessary && (first.left || first.right || ret.exprs)) {\n        isNecessary =\n          (!isBeginOfExpr(preceeding) && first.lbp <= preceeding.lbp) ||\n          (!isEndOfExpr() && last.lbp < state.tokens.next.lbp);\n      }\n\n      if (!isNecessary) {\n        warning(\"W126\", opening);\n      }\n\n      ret.paren = true;\n    }\n\n    return ret;\n  });\n\n  application(\"=>\");\n\n  infix(\"[\", function(left, that) {\n    var e = expression(10), s;\n    if (e && e.type === \"(string)\") {\n      if (!state.option.evil && (e.value === \"eval\" || e.value === \"execScript\")) {\n        if (isGlobalEval(left, state)) {\n          warning(\"W061\");\n        }\n      }\n\n      countMember(e.value);\n      if (!state.option.sub && reg.identifier.test(e.value)) {\n        s = state.syntax[e.value];\n        if (!s || !isReserved(s)) {\n          warning(\"W069\", state.tokens.prev, e.value);\n        }\n      }\n    }\n    advance(\"]\", that);\n\n    if (e && e.value === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    that.left = left;\n    that.right = e;\n    return that;\n  }, 160, true);\n\n  function comprehensiveArrayExpression() {\n    var res = {};\n    res.exps = true;\n    state.funct[\"(comparray)\"].stack();\n    var reversed = false;\n    if (state.tokens.next.value !== \"for\") {\n      reversed = true;\n      if (!state.inMoz()) {\n        warning(\"W116\", state.tokens.next, \"for\", state.tokens.next.value);\n      }\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(10);\n    }\n\n    advance(\"for\");\n    if (state.tokens.next.value === \"each\") {\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n    advance(\"(\");\n    state.funct[\"(comparray)\"].setState(\"define\");\n    res.left = expression(130);\n    if (_.contains([\"in\", \"of\"], state.tokens.next.value)) {\n      advance();\n    } else {\n      error(\"E045\", state.tokens.curr);\n    }\n    state.funct[\"(comparray)\"].setState(\"generate\");\n    expression(10);\n\n    advance(\")\");\n    if (state.tokens.next.value === \"if\") {\n      advance(\"if\");\n      advance(\"(\");\n      state.funct[\"(comparray)\"].setState(\"filter\");\n      res.filter = expression(10);\n      advance(\")\");\n    }\n\n    if (!reversed) {\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(10);\n    }\n\n    advance(\"]\");\n    state.funct[\"(comparray)\"].unstack();\n    return res;\n  }\n\n  prefix(\"[\", function() {\n    var blocktype = lookupBlockType();\n    if (blocktype.isCompArray) {\n      if (!state.option.esnext && !state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"array comprehension\");\n      }\n      return comprehensiveArrayExpression();\n    } else if (blocktype.isDestAssign) {\n      this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true });\n      return this;\n    }\n    var b = state.tokens.curr.line !== startLine(state.tokens.next);\n    this.first = [];\n    if (b) {\n      indent += state.option.indent;\n      if (state.tokens.next.from === indent + state.option.indent) {\n        indent += state.option.indent;\n      }\n    }\n    while (state.tokens.next.id !== \"(end)\") {\n      while (state.tokens.next.id === \",\") {\n        if (!state.option.elision) {\n          if (!state.inES5()) {\n            warning(\"W070\");\n          } else {\n            warning(\"W128\");\n            do {\n              advance(\",\");\n            } while (state.tokens.next.id === \",\");\n            continue;\n          }\n        }\n        advance(\",\");\n      }\n\n      if (state.tokens.next.id === \"]\") {\n        break;\n      }\n\n      this.first.push(expression(10));\n      if (state.tokens.next.id === \",\") {\n        comma({ allowTrailing: true });\n        if (state.tokens.next.id === \"]\" && !state.inES5()) {\n          warning(\"W070\", state.tokens.curr);\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    if (b) {\n      indent -= state.option.indent;\n    }\n    advance(\"]\", this);\n    return this;\n  });\n\n\n  function isMethod() {\n    return state.funct[\"(statement)\"] && state.funct[\"(statement)\"].type === \"class\" ||\n           state.funct[\"(context)\"] && state.funct[\"(context)\"][\"(verb)\"] === \"class\";\n  }\n\n\n  function isPropertyName(token) {\n    return token.identifier || token.id === \"(string)\" || token.id === \"(number)\";\n  }\n\n\n  function propertyName(preserveOrToken) {\n    var id;\n    var preserve = true;\n    if (typeof preserveOrToken === \"object\") {\n      id = preserveOrToken;\n    } else {\n      preserve = preserveOrToken;\n      id = optionalidentifier(false, true, preserve);\n    }\n\n    if (!id) {\n      if (state.tokens.next.id === \"(string)\") {\n        id = state.tokens.next.value;\n        if (!preserve) {\n          advance();\n        }\n      } else if (state.tokens.next.id === \"(number)\") {\n        id = state.tokens.next.value.toString();\n        if (!preserve) {\n          advance();\n        }\n      }\n    } else if (typeof id === \"object\") {\n      if (id.id === \"(string)\" || id.id === \"(identifier)\") id = id.value;\n      else if (id.id === \"(number)\") id = id.value.toString();\n    }\n\n    if (id === \"hasOwnProperty\") {\n      warning(\"W001\");\n    }\n\n    return id;\n  }\n  function functionparams(options) {\n    var next;\n    var paramsIds = [];\n    var ident;\n    var tokens = [];\n    var t;\n    var pastDefault = false;\n    var pastRest = false;\n    var arity = 0;\n    var loneArg = options && options.loneArg;\n\n    if (loneArg && loneArg.identifier === true) {\n      state.funct[\"(scope)\"].addParam(loneArg.value, loneArg);\n      return { arity: 1, params: [ loneArg.value ] };\n    }\n\n    next = state.tokens.next;\n\n    if (!options || !options.parsedOpening) {\n      advance(\"(\");\n    }\n\n    if (state.tokens.next.id === \")\") {\n      advance(\")\");\n      return;\n    }\n\n    function addParam(addParamArgs) {\n      state.funct[\"(scope)\"].addParam.apply(state.funct[\"(scope)\"], addParamArgs);\n    }\n\n    for (;;) {\n      arity++;\n      var currentParams = [];\n\n      if (_.contains([\"{\", \"[\"], state.tokens.next.id)) {\n        tokens = destructuringPattern();\n        for (t in tokens) {\n          t = tokens[t];\n          if (t.id) {\n            paramsIds.push(t.id);\n            currentParams.push([t.id, t.token]);\n          }\n        }\n      } else {\n        if (checkPunctuator(state.tokens.next, \"...\")) pastRest = true;\n        ident = identifier(true);\n        if (ident) {\n          paramsIds.push(ident);\n          currentParams.push([ident, state.tokens.curr]);\n        } else {\n          while (!checkPunctuators(state.tokens.next, [\",\", \")\"])) advance();\n        }\n      }\n      if (pastDefault) {\n        if (state.tokens.next.id !== \"=\") {\n          error(\"W138\", state.tokens.current);\n        }\n      }\n      if (state.tokens.next.id === \"=\") {\n        if (!state.inES6()) {\n          warning(\"W119\", state.tokens.next, \"default parameters\", \"6\");\n        }\n        advance(\"=\");\n        pastDefault = true;\n        expression(10);\n      }\n      currentParams.forEach(addParam);\n\n      if (state.tokens.next.id === \",\") {\n        if (pastRest) {\n          warning(\"W131\", state.tokens.next);\n        }\n        comma();\n      } else {\n        advance(\")\", next);\n        return { arity: arity, params: paramsIds };\n      }\n    }\n  }\n\n  function functor(name, token, overwrites) {\n    var funct = {\n      \"(name)\"      : name,\n      \"(breakage)\"  : 0,\n      \"(loopage)\"   : 0,\n      \"(tokens)\"    : {},\n      \"(properties)\": {},\n\n      \"(catch)\"     : false,\n      \"(global)\"    : false,\n\n      \"(line)\"      : null,\n      \"(character)\" : null,\n      \"(metrics)\"   : null,\n      \"(statement)\" : null,\n      \"(context)\"   : null,\n      \"(scope)\"     : null,\n      \"(comparray)\" : null,\n      \"(generator)\" : null,\n      \"(arrow)\"     : null,\n      \"(params)\"    : null\n    };\n\n    if (token) {\n      _.extend(funct, {\n        \"(line)\"     : token.line,\n        \"(character)\": token.character,\n        \"(metrics)\"  : createMetrics(token)\n      });\n    }\n\n    _.extend(funct, overwrites);\n\n    if (funct[\"(context)\"]) {\n      funct[\"(scope)\"] = funct[\"(context)\"][\"(scope)\"];\n      funct[\"(comparray)\"]  = funct[\"(context)\"][\"(comparray)\"];\n    }\n\n    return funct;\n  }\n\n  function isFunctor(token) {\n    return \"(scope)\" in token;\n  }\n  function hasParsedCode(funct) {\n    return funct[\"(global)\"] && !funct[\"(verb)\"];\n  }\n\n  function doTemplateLiteral(left) {\n    var ctx = this.context;\n    var noSubst = this.noSubst;\n    var depth = this.depth;\n\n    if (!noSubst) {\n      while (!end()) {\n        if (!state.tokens.next.template || state.tokens.next.depth > depth) {\n          expression(0); // should probably have different rbp?\n        } else {\n          advance();\n        }\n      }\n    }\n\n    return {\n      id: \"(template)\",\n      type: \"(template)\",\n      tag: left\n    };\n\n    function end() {\n      if (state.tokens.curr.template && state.tokens.curr.tail &&\n          state.tokens.curr.context === ctx) return true;\n      var complete = (state.tokens.next.template && state.tokens.next.tail &&\n                      state.tokens.next.context === ctx);\n      if (complete) advance();\n      return complete || state.tokens.next.isUnclosed;\n    }\n  }\n  function doFunction(options) {\n    var f, token, name, statement, classExprBinding, isGenerator, isArrow, ignoreLoopFunc;\n    var oldOption = state.option;\n    var oldIgnored = state.ignored;\n\n    if (options) {\n      name = options.name;\n      statement = options.statement;\n      classExprBinding = options.classExprBinding;\n      isGenerator = options.type === \"generator\";\n      isArrow = options.type === \"arrow\";\n      ignoreLoopFunc = options.ignoreLoopFunc;\n    }\n\n    state.option = Object.create(state.option);\n    state.ignored = Object.create(state.ignored);\n\n    state.funct = functor(name || state.nameStack.infer(), state.tokens.next, {\n      \"(statement)\": statement,\n      \"(context)\":   state.funct,\n      \"(arrow)\":     isArrow,\n      \"(generator)\": isGenerator\n    });\n\n    f = state.funct;\n    token = state.tokens.curr;\n    token.funct = state.funct;\n\n    functions.push(state.funct);\n    state.funct[\"(scope)\"].stack(\"functionouter\");\n    var internallyAccessibleName = name || classExprBinding;\n    if (internallyAccessibleName) {\n      state.funct[\"(scope)\"].block.add(internallyAccessibleName,\n        classExprBinding ? \"class\" : \"function\", state.tokens.curr, false);\n    }\n    state.funct[\"(scope)\"].stack(\"functionparams\");\n\n    var paramsInfo = functionparams(options);\n\n    if (paramsInfo) {\n      state.funct[\"(params)\"] = paramsInfo.params;\n      state.funct[\"(metrics)\"].arity = paramsInfo.arity;\n      state.funct[\"(metrics)\"].verifyMaxParametersPerFunction();\n    } else {\n      state.funct[\"(metrics)\"].arity = 0;\n    }\n\n    if (isArrow) {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.curr, \"arrow function syntax (=>)\", \"6\");\n      }\n\n      if (!options.loneArg) {\n        advance(\"=>\");\n      }\n    }\n\n    block(false, true, true, isArrow);\n\n    if (!state.option.noyield && isGenerator &&\n        state.funct[\"(generator)\"] !== \"yielded\") {\n      warning(\"W124\", state.tokens.curr);\n    }\n\n    state.funct[\"(metrics)\"].verifyMaxStatementsPerFunction();\n    state.funct[\"(metrics)\"].verifyMaxComplexityPerFunction();\n    state.funct[\"(unusedOption)\"] = state.option.unused;\n    state.option = oldOption;\n    state.ignored = oldIgnored;\n    state.funct[\"(last)\"] = state.tokens.curr.line;\n    state.funct[\"(lastcharacter)\"] = state.tokens.curr.character;\n    state.funct[\"(scope)\"].unstack(); // also does usage and label checks\n    state.funct[\"(scope)\"].unstack();\n\n    state.funct = state.funct[\"(context)\"];\n\n    if (!ignoreLoopFunc && !state.option.loopfunc && state.funct[\"(loopage)\"]) {\n      if (f[\"(isCapturing)\"]) {\n        warning(\"W083\", token);\n      }\n    }\n\n    return f;\n  }\n\n  function createMetrics(functionStartToken) {\n    return {\n      statementCount: 0,\n      nestedBlockDepth: -1,\n      ComplexityCount: 1,\n      arity: 0,\n\n      verifyMaxStatementsPerFunction: function() {\n        if (state.option.maxstatements &&\n          this.statementCount > state.option.maxstatements) {\n          warning(\"W071\", functionStartToken, this.statementCount);\n        }\n      },\n\n      verifyMaxParametersPerFunction: function() {\n        if (_.isNumber(state.option.maxparams) &&\n          this.arity > state.option.maxparams) {\n          warning(\"W072\", functionStartToken, this.arity);\n        }\n      },\n\n      verifyMaxNestedBlockDepthPerFunction: function() {\n        if (state.option.maxdepth &&\n          this.nestedBlockDepth > 0 &&\n          this.nestedBlockDepth === state.option.maxdepth + 1) {\n          warning(\"W073\", null, this.nestedBlockDepth);\n        }\n      },\n\n      verifyMaxComplexityPerFunction: function() {\n        var max = state.option.maxcomplexity;\n        var cc = this.ComplexityCount;\n        if (max && cc > max) {\n          warning(\"W074\", functionStartToken, cc);\n        }\n      }\n    };\n  }\n\n  function increaseComplexityCount() {\n    state.funct[\"(metrics)\"].ComplexityCount += 1;\n  }\n\n  function checkCondAssignment(expr) {\n    var id, paren;\n    if (expr) {\n      id = expr.id;\n      paren = expr.paren;\n      if (id === \",\" && (expr = expr.exprs[expr.exprs.length - 1])) {\n        id = expr.id;\n        paren = paren || expr.paren;\n      }\n    }\n    switch (id) {\n    case \"=\":\n    case \"+=\":\n    case \"-=\":\n    case \"*=\":\n    case \"%=\":\n    case \"&=\":\n    case \"|=\":\n    case \"^=\":\n    case \"/=\":\n      if (!paren && !state.option.boss) {\n        warning(\"W084\");\n      }\n    }\n  }\n  function checkProperties(props) {\n    if (state.inES5()) {\n      for (var name in props) {\n        if (props[name] && props[name].setterToken && !props[name].getterToken) {\n          warning(\"W078\", props[name].setterToken);\n        }\n      }\n    }\n  }\n\n  function metaProperty(name, c) {\n    if (checkPunctuator(state.tokens.next, \".\")) {\n      var left = state.tokens.curr.id;\n      advance(\".\");\n      var id = identifier();\n      state.tokens.curr.isMetaProperty = true;\n      if (name !== id) {\n        error(\"E057\", state.tokens.prev, left, id);\n      } else {\n        c();\n      }\n      return state.tokens.curr;\n    }\n  }\n\n  (function(x) {\n    x.nud = function() {\n      var b, f, i, p, t, isGeneratorMethod = false, nextVal;\n      var props = Object.create(null); // All properties, including accessors\n\n      b = state.tokens.curr.line !== startLine(state.tokens.next);\n      if (b) {\n        indent += state.option.indent;\n        if (state.tokens.next.from === indent + state.option.indent) {\n          indent += state.option.indent;\n        }\n      }\n\n      var blocktype = lookupBlockType();\n      if (blocktype.isDestAssign) {\n        this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true });\n        return this;\n      }\n\n      for (;;) {\n        if (state.tokens.next.id === \"}\") {\n          break;\n        }\n\n        nextVal = state.tokens.next.value;\n        if (state.tokens.next.identifier &&\n            (peekIgnoreEOL().id === \",\" || peekIgnoreEOL().id === \"}\")) {\n          if (!state.inES6()) {\n            warning(\"W104\", state.tokens.next, \"object short notation\", \"6\");\n          }\n          i = propertyName(true);\n          saveProperty(props, i, state.tokens.next);\n\n          expression(10);\n\n        } else if (peek().id !== \":\" && (nextVal === \"get\" || nextVal === \"set\")) {\n          advance(nextVal);\n\n          if (!state.inES5()) {\n            error(\"E034\");\n          }\n\n          i = propertyName();\n          if (!i && !state.inES6()) {\n            error(\"E035\");\n          }\n          if (i) {\n            saveAccessor(nextVal, props, i, state.tokens.curr);\n          }\n\n          t = state.tokens.next;\n          f = doFunction();\n          p = f[\"(params)\"];\n          if (nextVal === \"get\" && i && p) {\n            warning(\"W076\", t, p[0], i);\n          } else if (nextVal === \"set\" && i && (!p || p.length !== 1)) {\n            warning(\"W077\", t, i);\n          }\n        } else {\n          if (state.tokens.next.value === \"*\" && state.tokens.next.type === \"(punctuator)\") {\n            if (!state.inES6()) {\n              warning(\"W104\", state.tokens.next, \"generator functions\", \"6\");\n            }\n            advance(\"*\");\n            isGeneratorMethod = true;\n          } else {\n            isGeneratorMethod = false;\n          }\n\n          if (state.tokens.next.id === \"[\") {\n            i = computedPropertyName();\n            state.nameStack.set(i);\n          } else {\n            state.nameStack.set(state.tokens.next);\n            i = propertyName();\n            saveProperty(props, i, state.tokens.next);\n\n            if (typeof i !== \"string\") {\n              break;\n            }\n          }\n\n          if (state.tokens.next.value === \"(\") {\n            if (!state.inES6()) {\n              warning(\"W104\", state.tokens.curr, \"concise methods\", \"6\");\n            }\n            doFunction({ type: isGeneratorMethod ? \"generator\" : null });\n          } else {\n            advance(\":\");\n            expression(10);\n          }\n        }\n\n        countMember(i);\n\n        if (state.tokens.next.id === \",\") {\n          comma({ allowTrailing: true, property: true });\n          if (state.tokens.next.id === \",\") {\n            warning(\"W070\", state.tokens.curr);\n          } else if (state.tokens.next.id === \"}\" && !state.inES5()) {\n            warning(\"W070\", state.tokens.curr);\n          }\n        } else {\n          break;\n        }\n      }\n      if (b) {\n        indent -= state.option.indent;\n      }\n      advance(\"}\", this);\n\n      checkProperties(props);\n\n      return this;\n    };\n    x.fud = function() {\n      error(\"E036\", state.tokens.curr);\n    };\n  }(delim(\"{\")));\n\n  function destructuringPattern(options) {\n    var isAssignment = options && options.assignment;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr,\n        isAssignment ? \"destructuring assignment\" : \"destructuring binding\", \"6\");\n    }\n\n    return destructuringPatternRecursive(options);\n  }\n\n  function destructuringPatternRecursive(options) {\n    var ids;\n    var identifiers = [];\n    var openingParsed = options && options.openingParsed;\n    var isAssignment = options && options.assignment;\n    var recursiveOptions = isAssignment ? { assignment: isAssignment } : null;\n    var firstToken = openingParsed ? state.tokens.curr : state.tokens.next;\n\n    var nextInnerDE = function() {\n      var ident;\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        ids = destructuringPatternRecursive(recursiveOptions);\n        for (var id in ids) {\n          id = ids[id];\n          identifiers.push({ id: id.id, token: id.token });\n        }\n      } else if (checkPunctuator(state.tokens.next, \",\")) {\n        identifiers.push({ id: null, token: state.tokens.curr });\n      } else if (checkPunctuator(state.tokens.next, \"(\")) {\n        advance(\"(\");\n        nextInnerDE();\n        advance(\")\");\n      } else {\n        var is_rest = checkPunctuator(state.tokens.next, \"...\");\n\n        if (isAssignment) {\n          var identifierToken = is_rest ? peek(0) : state.tokens.next;\n          if (!identifierToken.identifier) {\n            warning(\"E030\", identifierToken, identifierToken.value);\n          }\n          var assignTarget = expression(155);\n          if (assignTarget) {\n            checkLeftSideAssign(assignTarget);\n            if (assignTarget.identifier) {\n              ident = assignTarget.value;\n            }\n          }\n        } else {\n          ident = identifier();\n        }\n        if (ident) {\n          identifiers.push({ id: ident, token: state.tokens.curr });\n        }\n        return is_rest;\n      }\n      return false;\n    };\n    var assignmentProperty = function() {\n      var id;\n      if (checkPunctuator(state.tokens.next, \"[\")) {\n        advance(\"[\");\n        expression(10);\n        advance(\"]\");\n        advance(\":\");\n        nextInnerDE();\n      } else if (state.tokens.next.id === \"(string)\" ||\n                 state.tokens.next.id === \"(number)\") {\n        advance();\n        advance(\":\");\n        nextInnerDE();\n      } else {\n        id = identifier();\n        if (checkPunctuator(state.tokens.next, \":\")) {\n          advance(\":\");\n          nextInnerDE();\n        } else if (id) {\n          if (isAssignment) {\n            checkLeftSideAssign(state.tokens.curr);\n          }\n          identifiers.push({ id: id, token: state.tokens.curr });\n        }\n      }\n    };\n    if (checkPunctuator(firstToken, \"[\")) {\n      if (!openingParsed) {\n        advance(\"[\");\n      }\n      if (checkPunctuator(state.tokens.next, \"]\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      var element_after_rest = false;\n      while (!checkPunctuator(state.tokens.next, \"]\")) {\n        if (nextInnerDE() && !element_after_rest &&\n            checkPunctuator(state.tokens.next, \",\")) {\n          warning(\"W130\", state.tokens.next);\n          element_after_rest = true;\n        }\n        if (checkPunctuator(state.tokens.next, \"=\")) {\n          if (checkPunctuator(state.tokens.prev, \"...\")) {\n            advance(\"]\");\n          } else {\n            advance(\"=\");\n          }\n          if (state.tokens.next.id === \"undefined\") {\n            warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n          }\n          expression(10);\n        }\n        if (!checkPunctuator(state.tokens.next, \"]\")) {\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    } else if (checkPunctuator(firstToken, \"{\")) {\n\n      if (!openingParsed) {\n        advance(\"{\");\n      }\n      if (checkPunctuator(state.tokens.next, \"}\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      while (!checkPunctuator(state.tokens.next, \"}\")) {\n        assignmentProperty();\n        if (checkPunctuator(state.tokens.next, \"=\")) {\n          advance(\"=\");\n          if (state.tokens.next.id === \"undefined\") {\n            warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n          }\n          expression(10);\n        }\n        if (!checkPunctuator(state.tokens.next, \"}\")) {\n          advance(\",\");\n          if (checkPunctuator(state.tokens.next, \"}\")) {\n            break;\n          }\n        }\n      }\n      advance(\"}\");\n    }\n    return identifiers;\n  }\n\n  function destructuringPatternMatch(tokens, value) {\n    var first = value.first;\n\n    if (!first)\n      return;\n\n    _.zip(tokens, Array.isArray(first) ? first : [ first ]).forEach(function(val) {\n      var token = val[0];\n      var value = val[1];\n\n      if (token && value)\n        token.first = value;\n      else if (token && token.first && !value)\n        warning(\"W080\", token.first, token.first.value);\n    });\n  }\n\n  function blockVariableStatement(type, statement, context) {\n\n    var prefix = context && context.prefix;\n    var inexport = context && context.inexport;\n    var isLet = type === \"let\";\n    var isConst = type === \"const\";\n    var tokens, lone, value, letblock;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, type, \"6\");\n    }\n\n    if (isLet && state.tokens.next.value === \"(\") {\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.next, \"let block\");\n      }\n      advance(\"(\");\n      state.funct[\"(scope)\"].stack();\n      letblock = true;\n    } else if (state.funct[\"(noblockscopedvar)\"]) {\n      error(\"E048\", state.tokens.curr, isConst ? \"Const\" : \"Let\");\n    }\n\n    statement.first = [];\n    for (;;) {\n      var names = [];\n      if (_.contains([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern();\n        lone = false;\n      } else {\n        tokens = [ { id: identifier(), token: state.tokens.curr } ];\n        lone = true;\n      }\n\n      if (!prefix && isConst && state.tokens.next.id !== \"=\") {\n        warning(\"E012\", state.tokens.curr, state.tokens.curr.value);\n      }\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (state.funct[\"(scope)\"].block.isGlobal()) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            }\n          }\n          if (t.id && !state.funct[\"(noblockscopedvar)\"]) {\n            state.funct[\"(scope)\"].addlabel(t.id, {\n              type: type,\n              token: t.token });\n            names.push(t.token);\n\n            if (lone && inexport) {\n              state.funct[\"(scope)\"].setExported(t.token.value, t.token);\n            }\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        advance(\"=\");\n        if (!prefix && state.tokens.next.id === \"undefined\") {\n          warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n        }\n        if (!prefix && peek(0).id === \"=\" && state.tokens.next.identifier) {\n          warning(\"W120\", state.tokens.next, state.tokens.next.value);\n        }\n        value = expression(prefix ? 120 : 10);\n        if (lone) {\n          tokens[0].first = value;\n        } else {\n          destructuringPatternMatch(names, value);\n        }\n      }\n\n      statement.first = statement.first.concat(names);\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n      comma();\n    }\n    if (letblock) {\n      advance(\")\");\n      block(true, true);\n      statement.block = true;\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    return statement;\n  }\n\n  var conststatement = stmt(\"const\", function(context) {\n    return blockVariableStatement(\"const\", this, context);\n  });\n  conststatement.exps = true;\n\n  var letstatement = stmt(\"let\", function(context) {\n    return blockVariableStatement(\"let\", this, context);\n  });\n  letstatement.exps = true;\n\n  var varstatement = stmt(\"var\", function(context) {\n    var prefix = context && context.prefix;\n    var inexport = context && context.inexport;\n    var tokens, lone, value;\n    var implied = context && context.implied;\n    var report = !(context && context.ignore);\n\n    this.first = [];\n    for (;;) {\n      var names = [];\n      if (_.contains([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern();\n        lone = false;\n      } else {\n        tokens = [ { id: identifier(), token: state.tokens.curr } ];\n        lone = true;\n      }\n\n      if (!(prefix && implied) && report && state.option.varstmt) {\n        warning(\"W132\", this);\n      }\n\n      this.first = this.first.concat(names);\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (!implied && state.funct[\"(global)\"]) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            } else if (state.option.futurehostile === false) {\n              if ((!state.inES5() && vars.ecmaIdentifiers[5][t.id] === false) ||\n                (!state.inES6() && vars.ecmaIdentifiers[6][t.id] === false)) {\n                warning(\"W129\", t.token, t.id);\n              }\n            }\n          }\n          if (t.id) {\n            if (implied === \"for\") {\n\n              if (!state.funct[\"(scope)\"].has(t.id)) {\n                if (report) warning(\"W088\", t.token, t.id);\n              }\n              state.funct[\"(scope)\"].block.use(t.id, t.token);\n            } else {\n              state.funct[\"(scope)\"].addlabel(t.id, {\n                type: \"var\",\n                token: t.token });\n\n              if (lone && inexport) {\n                state.funct[\"(scope)\"].setExported(t.id, t.token);\n              }\n            }\n            names.push(t.token);\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        state.nameStack.set(state.tokens.curr);\n\n        advance(\"=\");\n        if (!prefix && report && !state.funct[\"(loopage)\"] &&\n          state.tokens.next.id === \"undefined\") {\n          warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n        }\n        if (peek(0).id === \"=\" && state.tokens.next.identifier) {\n          if (!prefix && report &&\n              !state.funct[\"(params)\"] ||\n              state.funct[\"(params)\"].indexOf(state.tokens.next.value) === -1) {\n            warning(\"W120\", state.tokens.next, state.tokens.next.value);\n          }\n        }\n        value = expression(prefix ? 120 : 10);\n        if (lone) {\n          tokens[0].first = value;\n        } else {\n          destructuringPatternMatch(names, value);\n        }\n      }\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n      comma();\n    }\n\n    return this;\n  });\n  varstatement.exps = true;\n\n  blockstmt(\"class\", function() {\n    return classdef.call(this, true);\n  });\n\n  function classdef(isStatement) {\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"class\", \"6\");\n    }\n    if (isStatement) {\n      this.name = identifier();\n\n      state.funct[\"(scope)\"].addlabel(this.name, {\n        type: \"class\",\n        token: state.tokens.curr });\n    } else if (state.tokens.next.identifier && state.tokens.next.value !== \"extends\") {\n      this.name = identifier();\n      this.namedExpr = true;\n    } else {\n      this.name = state.nameStack.infer();\n    }\n    classtail(this);\n    return this;\n  }\n\n  function classtail(c) {\n    var wasInClassBody = state.inClassBody;\n    if (state.tokens.next.value === \"extends\") {\n      advance(\"extends\");\n      c.heritage = expression(10);\n    }\n\n    state.inClassBody = true;\n    advance(\"{\");\n    c.body = classbody(c);\n    advance(\"}\");\n    state.inClassBody = wasInClassBody;\n  }\n\n  function classbody(c) {\n    var name;\n    var isStatic;\n    var isGenerator;\n    var getset;\n    var props = Object.create(null);\n    var staticProps = Object.create(null);\n    var computed;\n    for (var i = 0; state.tokens.next.id !== \"}\"; ++i) {\n      name = state.tokens.next;\n      isStatic = false;\n      isGenerator = false;\n      getset = null;\n      if (name.id === \";\") {\n        warning(\"W032\");\n        advance(\";\");\n        continue;\n      }\n\n      if (name.id === \"*\") {\n        isGenerator = true;\n        advance(\"*\");\n        name = state.tokens.next;\n      }\n      if (name.id === \"[\") {\n        name = computedPropertyName();\n        computed = true;\n      } else if (isPropertyName(name)) {\n        advance();\n        computed = false;\n        if (name.identifier && name.value === \"static\") {\n          if (checkPunctuator(state.tokens.next, \"*\")) {\n            isGenerator = true;\n            advance(\"*\");\n          }\n          if (isPropertyName(state.tokens.next) || state.tokens.next.id === \"[\") {\n            computed = state.tokens.next.id === \"[\";\n            isStatic = true;\n            name = state.tokens.next;\n            if (state.tokens.next.id === \"[\") {\n              name = computedPropertyName();\n            } else advance();\n          }\n        }\n\n        if (name.identifier && (name.value === \"get\" || name.value === \"set\")) {\n          if (isPropertyName(state.tokens.next) || state.tokens.next.id === \"[\") {\n            computed = state.tokens.next.id === \"[\";\n            getset = name;\n            name = state.tokens.next;\n            if (state.tokens.next.id === \"[\") {\n              name = computedPropertyName();\n            } else advance();\n          }\n        }\n      } else {\n        warning(\"W052\", state.tokens.next, state.tokens.next.value || state.tokens.next.type);\n        advance();\n        continue;\n      }\n\n      if (!checkPunctuator(state.tokens.next, \"(\")) {\n        error(\"E054\", state.tokens.next, state.tokens.next.value);\n        while (state.tokens.next.id !== \"}\" &&\n               !checkPunctuator(state.tokens.next, \"(\")) {\n          advance();\n        }\n        if (state.tokens.next.value !== \"(\") {\n          doFunction({ statement: c });\n        }\n      }\n\n      if (!computed) {\n        if (getset) {\n          saveAccessor(\n            getset.value, isStatic ? staticProps : props, name.value, name, true, isStatic);\n        } else {\n          if (name.value === \"constructor\") {\n            state.nameStack.set(c);\n          } else {\n            state.nameStack.set(name);\n          }\n          saveProperty(isStatic ? staticProps : props, name.value, name, true, isStatic);\n        }\n      }\n\n      if (getset && name.value === \"constructor\") {\n        var propDesc = getset.value === \"get\" ? \"class getter method\" : \"class setter method\";\n        error(\"E049\", name, propDesc, \"constructor\");\n      } else if (name.value === \"prototype\") {\n        error(\"E049\", name, \"class method\", \"prototype\");\n      }\n\n      propertyName(name);\n\n      doFunction({\n        statement: c,\n        type: isGenerator ? \"generator\" : null,\n        classExprBinding: c.namedExpr ? c.name : null\n      });\n    }\n\n    checkProperties(props);\n  }\n\n  blockstmt(\"function\", function(context) {\n    var inexport = context && context.inexport;\n    var generator = false;\n    if (state.tokens.next.value === \"*\") {\n      advance(\"*\");\n      if (state.inES6({ strict: true })) {\n        generator = true;\n      } else {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n    }\n    if (inblock) {\n      warning(\"W082\", state.tokens.curr);\n    }\n    var i = optionalidentifier();\n\n    state.funct[\"(scope)\"].addlabel(i, {\n      type: \"function\",\n      token: state.tokens.curr });\n\n    if (i === undefined) {\n      warning(\"W025\");\n    } else if (inexport) {\n      state.funct[\"(scope)\"].setExported(i, state.tokens.prev);\n    }\n\n    doFunction({\n      name: i,\n      statement: this,\n      type: generator ? \"generator\" : null,\n      ignoreLoopFunc: inblock // a declaration may already have warned\n    });\n    if (state.tokens.next.id === \"(\" && state.tokens.next.line === state.tokens.curr.line) {\n      error(\"E039\");\n    }\n    return this;\n  });\n\n  prefix(\"function\", function() {\n    var generator = false;\n\n    if (state.tokens.next.value === \"*\") {\n      if (!state.inES6()) {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n      advance(\"*\");\n      generator = true;\n    }\n\n    var i = optionalidentifier();\n    doFunction({ name: i, type: generator ? \"generator\" : null });\n    return this;\n  });\n\n  blockstmt(\"if\", function() {\n    var t = state.tokens.next;\n    increaseComplexityCount();\n    state.condition = true;\n    advance(\"(\");\n    var expr = expression(0);\n    checkCondAssignment(expr);\n    var forinifcheck = null;\n    if (state.option.forin && state.forinifcheckneeded) {\n      state.forinifcheckneeded = false; // We only need to analyze the first if inside the loop\n      forinifcheck = state.forinifchecks[state.forinifchecks.length - 1];\n      if (expr.type === \"(punctuator)\" && expr.value === \"!\") {\n        forinifcheck.type = \"(negative)\";\n      } else {\n        forinifcheck.type = \"(positive)\";\n      }\n    }\n\n    advance(\")\", t);\n    state.condition = false;\n    var s = block(true, true);\n    if (forinifcheck && forinifcheck.type === \"(negative)\") {\n      if (s && s[0] && s[0].type === \"(identifier)\" && s[0].value === \"continue\") {\n        forinifcheck.type = \"(negative-with-continue)\";\n      }\n    }\n\n    if (state.tokens.next.id === \"else\") {\n      advance(\"else\");\n      if (state.tokens.next.id === \"if\" || state.tokens.next.id === \"switch\") {\n        statement();\n      } else {\n        block(true, true);\n      }\n    }\n    return this;\n  });\n\n  blockstmt(\"try\", function() {\n    var b;\n\n    function doCatch() {\n      advance(\"catch\");\n      advance(\"(\");\n\n      state.funct[\"(scope)\"].stack(\"catchparams\");\n\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        var tokens = destructuringPattern();\n        _.each(tokens, function(token) {\n          if (token.id) {\n            state.funct[\"(scope)\"].addParam(token.id, token, \"exception\");\n          }\n        });\n      } else if (state.tokens.next.type !== \"(identifier)\") {\n        warning(\"E030\", state.tokens.next, state.tokens.next.value);\n      } else {\n        state.funct[\"(scope)\"].addParam(identifier(), state.tokens.curr, \"exception\");\n      }\n\n      if (state.tokens.next.value === \"if\") {\n        if (!state.inMoz()) {\n          warning(\"W118\", state.tokens.curr, \"catch filter\");\n        }\n        advance(\"if\");\n        expression(0);\n      }\n\n      advance(\")\");\n\n      block(false);\n\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    block(true);\n\n    while (state.tokens.next.id === \"catch\") {\n      increaseComplexityCount();\n      if (b && (!state.inMoz())) {\n        warning(\"W118\", state.tokens.next, \"multiple catch blocks\");\n      }\n      doCatch();\n      b = true;\n    }\n\n    if (state.tokens.next.id === \"finally\") {\n      advance(\"finally\");\n      block(true);\n      return;\n    }\n\n    if (!b) {\n      error(\"E021\", state.tokens.next, \"catch\", state.tokens.next.value);\n    }\n\n    return this;\n  });\n\n  blockstmt(\"while\", function() {\n    var t = state.tokens.next;\n    state.funct[\"(breakage)\"] += 1;\n    state.funct[\"(loopage)\"] += 1;\n    increaseComplexityCount();\n    advance(\"(\");\n    checkCondAssignment(expression(0));\n    advance(\")\", t);\n    block(true, true);\n    state.funct[\"(breakage)\"] -= 1;\n    state.funct[\"(loopage)\"] -= 1;\n    return this;\n  }).labelled = true;\n\n  blockstmt(\"with\", function() {\n    var t = state.tokens.next;\n    if (state.isStrict()) {\n      error(\"E010\", state.tokens.curr);\n    } else if (!state.option.withstmt) {\n      warning(\"W085\", state.tokens.curr);\n    }\n\n    advance(\"(\");\n    expression(0);\n    advance(\")\", t);\n    block(true, true);\n\n    return this;\n  });\n\n  blockstmt(\"switch\", function() {\n    var t = state.tokens.next;\n    var g = false;\n    var noindent = false;\n\n    state.funct[\"(breakage)\"] += 1;\n    advance(\"(\");\n    checkCondAssignment(expression(0));\n    advance(\")\", t);\n    t = state.tokens.next;\n    advance(\"{\");\n\n    if (state.tokens.next.from === indent)\n      noindent = true;\n\n    if (!noindent)\n      indent += state.option.indent;\n\n    this.cases = [];\n\n    for (;;) {\n      switch (state.tokens.next.id) {\n      case \"case\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"case\":\n        case \"continue\":\n        case \"return\":\n        case \"switch\":\n        case \"throw\":\n          break;\n        default:\n          if (!state.tokens.curr.caseFallsThrough) {\n            warning(\"W086\", state.tokens.curr, \"case\");\n          }\n        }\n\n        advance(\"case\");\n        this.cases.push(expression(0));\n        increaseComplexityCount();\n        g = true;\n        advance(\":\");\n        state.funct[\"(verb)\"] = \"case\";\n        break;\n      case \"default\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"continue\":\n        case \"return\":\n        case \"throw\":\n          break;\n        default:\n          if (this.cases.length) {\n            if (!state.tokens.curr.caseFallsThrough) {\n              warning(\"W086\", state.tokens.curr, \"default\");\n            }\n          }\n        }\n\n        advance(\"default\");\n        g = true;\n        advance(\":\");\n        break;\n      case \"}\":\n        if (!noindent)\n          indent -= state.option.indent;\n\n        advance(\"}\", t);\n        state.funct[\"(breakage)\"] -= 1;\n        state.funct[\"(verb)\"] = undefined;\n        return;\n      case \"(end)\":\n        error(\"E023\", state.tokens.next, \"}\");\n        return;\n      default:\n        indent += state.option.indent;\n        if (g) {\n          switch (state.tokens.curr.id) {\n          case \",\":\n            error(\"E040\");\n            return;\n          case \":\":\n            g = false;\n            statements();\n            break;\n          default:\n            error(\"E025\", state.tokens.curr);\n            return;\n          }\n        } else {\n          if (state.tokens.curr.id === \":\") {\n            advance(\":\");\n            error(\"E024\", state.tokens.curr, \":\");\n            statements();\n          } else {\n            error(\"E021\", state.tokens.next, \"case\", state.tokens.next.value);\n            return;\n          }\n        }\n        indent -= state.option.indent;\n      }\n    }\n    return this;\n  }).labelled = true;\n\n  stmt(\"debugger\", function() {\n    if (!state.option.debug) {\n      warning(\"W087\", this);\n    }\n    return this;\n  }).exps = true;\n\n  (function() {\n    var x = stmt(\"do\", function() {\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n      increaseComplexityCount();\n\n      this.first = block(true, true);\n      advance(\"while\");\n      var t = state.tokens.next;\n      advance(\"(\");\n      checkCondAssignment(expression(0));\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n      return this;\n    });\n    x.labelled = true;\n    x.exps = true;\n  }());\n\n  blockstmt(\"for\", function() {\n    var s, t = state.tokens.next;\n    var letscope = false;\n    var foreachtok = null;\n\n    if (t.value === \"each\") {\n      foreachtok = t;\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n\n    increaseComplexityCount();\n    advance(\"(\");\n    var nextop; // contains the token of the \"in\" or \"of\" operator\n    var i = 0;\n    var inof = [\"in\", \"of\"];\n    var level = 0; // BindingPattern \"level\" --- level 0 === no BindingPattern\n    var comma; // First comma punctuator at level 0\n    var initializer; // First initializer at level 0\n    if (checkPunctuators(state.tokens.next, [\"{\", \"[\"])) ++level;\n    do {\n      nextop = peek(i);\n      ++i;\n      if (checkPunctuators(nextop, [\"{\", \"[\"])) ++level;\n      else if (checkPunctuators(nextop, [\"}\", \"]\"])) --level;\n      if (level < 0) break;\n      if (level === 0) {\n        if (!comma && checkPunctuator(nextop, \",\")) comma = nextop;\n        else if (!initializer && checkPunctuator(nextop, \"=\")) initializer = nextop;\n      }\n    } while (level > 0 || !_.contains(inof, nextop.value) && nextop.value !== \";\" &&\n    nextop.type !== \"(end)\"); // Is this a JSCS bug? This looks really weird.\n    if (_.contains(inof, nextop.value)) {\n      if (!state.inES6() && nextop.value === \"of\") {\n        warning(\"W104\", nextop, \"for of\", \"6\");\n      }\n\n      var ok = !(initializer || comma);\n      if (initializer) {\n        error(\"W133\", comma, nextop.value, \"initializer is forbidden\");\n      }\n\n      if (comma) {\n        error(\"W133\", comma, nextop.value, \"more than one ForBinding\");\n      }\n\n      if (state.tokens.next.id === \"var\") {\n        advance(\"var\");\n        state.tokens.curr.fud({ prefix: true });\n      } else if (state.tokens.next.id === \"let\" || state.tokens.next.id === \"const\") {\n        advance(state.tokens.next.id);\n        letscope = true;\n        state.funct[\"(scope)\"].stack();\n        state.tokens.curr.fud({ prefix: true });\n      } else {\n        Object.create(varstatement).fud({ prefix: true, implied: \"for\", ignore: !ok });\n      }\n      advance(nextop.value);\n      expression(20);\n      advance(\")\", t);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        state.forinifcheckneeded = true;\n\n        if (state.forinifchecks === undefined) {\n          state.forinifchecks = [];\n        }\n        state.forinifchecks.push({\n          type: \"(none)\"\n        });\n      }\n\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n\n      s = block(true, true);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        if (state.forinifchecks && state.forinifchecks.length > 0) {\n          var check = state.forinifchecks.pop();\n\n          if (// No if statement or not the first statement in loop body\n              s && s.length > 0 && (typeof s[0] !== \"object\" || s[0].value !== \"if\") ||\n              check.type === \"(positive)\" && s.length > 1 ||\n              check.type === \"(negative)\") {\n            warning(\"W089\", this);\n          }\n        }\n        state.forinifcheckneeded = false;\n      }\n\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n    } else {\n      if (foreachtok) {\n        error(\"E045\", foreachtok);\n      }\n      if (state.tokens.next.id !== \";\") {\n        if (state.tokens.next.id === \"var\") {\n          advance(\"var\");\n          state.tokens.curr.fud();\n        } else if (state.tokens.next.id === \"let\") {\n          advance(\"let\");\n          letscope = true;\n          state.funct[\"(scope)\"].stack();\n          state.tokens.curr.fud();\n        } else {\n          for (;;) {\n            expression(0, \"for\");\n            if (state.tokens.next.id !== \",\") {\n              break;\n            }\n            comma();\n          }\n        }\n      }\n      nolinebreak(state.tokens.curr);\n      advance(\";\");\n      state.funct[\"(loopage)\"] += 1;\n      if (state.tokens.next.id !== \";\") {\n        checkCondAssignment(expression(0));\n      }\n      nolinebreak(state.tokens.curr);\n      advance(\";\");\n      if (state.tokens.next.id === \";\") {\n        error(\"E021\", state.tokens.next, \")\", \";\");\n      }\n      if (state.tokens.next.id !== \")\") {\n        for (;;) {\n          expression(0, \"for\");\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          comma();\n        }\n      }\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] += 1;\n      block(true, true);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n\n    }\n    if (letscope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return this;\n  }).labelled = true;\n\n\n  stmt(\"break\", function() {\n    var v = state.tokens.next.value;\n\n    if (!state.option.asi)\n      nolinebreak(this);\n\n    if (state.tokens.next.id !== \";\" && !state.tokens.next.reach &&\n        state.tokens.curr.line === startLine(state.tokens.next)) {\n      if (!state.funct[\"(scope)\"].funct.hasBreakLabel(v)) {\n        warning(\"W090\", state.tokens.next, v);\n      }\n      this.first = state.tokens.next;\n      advance();\n    } else {\n      if (state.funct[\"(breakage)\"] === 0)\n        warning(\"W052\", state.tokens.next, this.value);\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"continue\", function() {\n    var v = state.tokens.next.value;\n\n    if (state.funct[\"(breakage)\"] === 0)\n      warning(\"W052\", state.tokens.next, this.value);\n    if (!state.funct[\"(loopage)\"])\n      warning(\"W052\", state.tokens.next, this.value);\n\n    if (!state.option.asi)\n      nolinebreak(this);\n\n    if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n      if (state.tokens.curr.line === startLine(state.tokens.next)) {\n        if (!state.funct[\"(scope)\"].funct.hasBreakLabel(v)) {\n          warning(\"W090\", state.tokens.next, v);\n        }\n        this.first = state.tokens.next;\n        advance();\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"return\", function() {\n    if (this.line === startLine(state.tokens.next)) {\n      if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n        this.first = expression(0);\n\n        if (this.first &&\n            this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warningAt(\"W093\", this.first.line, this.first.character);\n        }\n      }\n    } else {\n      if (state.tokens.next.type === \"(punctuator)\" &&\n        [\"[\", \"{\", \"+\", \"-\"].indexOf(state.tokens.next.value) > -1) {\n        nolinebreak(this); // always warn (Line breaking error)\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  (function(x) {\n    x.exps = true;\n    x.lbp = 25;\n  }(prefix(\"yield\", function() {\n    var prev = state.tokens.prev;\n    if (state.inES6(true) && !state.funct[\"(generator)\"]) {\n      if (!(\"(catch)\" === state.funct[\"(name)\"] && state.funct[\"(context)\"][\"(generator)\"])) {\n        error(\"E046\", state.tokens.curr, \"yield\");\n      }\n    } else if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"yield\", \"6\");\n    }\n    state.funct[\"(generator)\"] = \"yielded\";\n    var delegatingYield = false;\n\n    if (state.tokens.next.value === \"*\") {\n      delegatingYield = true;\n      advance(\"*\");\n    }\n\n    if (this.line === startLine(state.tokens.next) || !state.inMoz()) {\n      if (delegatingYield ||\n          (state.tokens.next.id !== \";\" && !state.option.asi &&\n           !state.tokens.next.reach && state.tokens.next.nud)) {\n\n        nobreaknonadjacent(state.tokens.curr, state.tokens.next);\n        this.first = expression(10);\n\n        if (this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warningAt(\"W093\", this.first.line, this.first.character);\n        }\n      }\n\n      if (state.inMoz() && state.tokens.next.id !== \")\" &&\n          (prev.lbp > 30 || (!prev.assign && !isEndOfExpr()) || prev.id === \"yield\")) {\n        error(\"E050\", this);\n      }\n    } else if (!state.option.asi) {\n      nolinebreak(this); // always warn (Line breaking error)\n    }\n    return this;\n  })));\n\n\n  stmt(\"throw\", function() {\n    nolinebreak(this);\n    this.first = expression(20);\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  stmt(\"import\", function() {\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"import\", \"6\");\n    }\n\n    if (state.tokens.next.type === \"(string)\") {\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.identifier) {\n      this.name = identifier();\n      state.funct[\"(scope)\"].addlabel(this.name, {\n        type: \"const\",\n        token: state.tokens.curr });\n\n      if (state.tokens.next.value === \",\") {\n        advance(\",\");\n      } else {\n        advance(\"from\");\n        advance(\"(string)\");\n        return this;\n      }\n    }\n\n    if (state.tokens.next.id === \"*\") {\n      advance(\"*\");\n      advance(\"as\");\n      if (state.tokens.next.identifier) {\n        this.name = identifier();\n        state.funct[\"(scope)\"].addlabel(this.name, {\n          type: \"const\",\n          token: state.tokens.curr });\n      }\n    } else {\n      advance(\"{\");\n      for (;;) {\n        if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        }\n        var importName;\n        if (state.tokens.next.type === \"default\") {\n          importName = \"default\";\n          advance(\"default\");\n        } else {\n          importName = identifier();\n        }\n        if (state.tokens.next.value === \"as\") {\n          advance(\"as\");\n          importName = identifier();\n        }\n        state.funct[\"(scope)\"].addlabel(importName, {\n          type: \"const\",\n          token: state.tokens.curr });\n\n        if (state.tokens.next.value === \",\") {\n          advance(\",\");\n        } else if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        } else {\n          error(\"E024\", state.tokens.next, state.tokens.next.value);\n          break;\n        }\n      }\n    }\n    advance(\"from\");\n    advance(\"(string)\");\n    return this;\n  }).exps = true;\n\n  stmt(\"export\", function() {\n    var ok = true;\n    var token;\n    var identifier;\n\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"export\", \"6\");\n      ok = false;\n    }\n\n    if (!state.funct[\"(scope)\"].block.isGlobal()) {\n      error(\"E053\", state.tokens.curr);\n      ok = false;\n    }\n\n    if (state.tokens.next.value === \"*\") {\n      advance(\"*\");\n      advance(\"from\");\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.type === \"default\") {\n      state.nameStack.set(state.tokens.next);\n      advance(\"default\");\n      var exportType = state.tokens.next.id;\n      if (exportType === \"function\" || exportType === \"class\") {\n        this.block = true;\n      }\n\n      token = peek();\n\n      expression(10);\n\n      identifier = token.value;\n\n      if (this.block) {\n        state.funct[\"(scope)\"].addlabel(identifier, {\n          type: exportType,\n          token: token });\n\n        state.funct[\"(scope)\"].setExported(identifier, token);\n      }\n\n      return this;\n    }\n\n    if (state.tokens.next.value === \"{\") {\n      advance(\"{\");\n      var exportedTokens = [];\n      for (;;) {\n        if (!state.tokens.next.identifier) {\n          error(\"E030\", state.tokens.next, state.tokens.next.value);\n        }\n        advance();\n\n        exportedTokens.push(state.tokens.curr);\n\n        if (state.tokens.next.value === \"as\") {\n          advance(\"as\");\n          if (!state.tokens.next.identifier) {\n            error(\"E030\", state.tokens.next, state.tokens.next.value);\n          }\n          advance();\n        }\n\n        if (state.tokens.next.value === \",\") {\n          advance(\",\");\n        } else if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        } else {\n          error(\"E024\", state.tokens.next, state.tokens.next.value);\n          break;\n        }\n      }\n      if (state.tokens.next.value === \"from\") {\n        advance(\"from\");\n        advance(\"(string)\");\n      } else if (ok) {\n        exportedTokens.forEach(function(token) {\n          state.funct[\"(scope)\"].setExported(token.value, token);\n        });\n      }\n      return this;\n    }\n\n    if (state.tokens.next.id === \"var\") {\n      advance(\"var\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"let\") {\n      advance(\"let\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"const\") {\n      advance(\"const\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"function\") {\n      this.block = true;\n      advance(\"function\");\n      state.syntax[\"function\"].fud({ inexport:true });\n    } else if (state.tokens.next.id === \"class\") {\n      this.block = true;\n      advance(\"class\");\n      var classNameToken = state.tokens.next;\n      state.syntax[\"class\"].fud();\n      state.funct[\"(scope)\"].setExported(classNameToken.value, classNameToken);\n    } else {\n      error(\"E024\", state.tokens.next, state.tokens.next.value);\n    }\n\n    return this;\n  }).exps = true;\n\n  FutureReservedWord(\"abstract\");\n  FutureReservedWord(\"boolean\");\n  FutureReservedWord(\"byte\");\n  FutureReservedWord(\"char\");\n  FutureReservedWord(\"class\", { es5: true, nud: classdef });\n  FutureReservedWord(\"double\");\n  FutureReservedWord(\"enum\", { es5: true });\n  FutureReservedWord(\"export\", { es5: true });\n  FutureReservedWord(\"extends\", { es5: true });\n  FutureReservedWord(\"final\");\n  FutureReservedWord(\"float\");\n  FutureReservedWord(\"goto\");\n  FutureReservedWord(\"implements\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"import\", { es5: true });\n  FutureReservedWord(\"int\");\n  FutureReservedWord(\"interface\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"long\");\n  FutureReservedWord(\"native\");\n  FutureReservedWord(\"package\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"private\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"protected\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"public\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"short\");\n  FutureReservedWord(\"static\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"super\", { es5: true });\n  FutureReservedWord(\"synchronized\");\n  FutureReservedWord(\"transient\");\n  FutureReservedWord(\"volatile\");\n\n  var lookupBlockType = function() {\n    var pn, pn1, prev;\n    var i = -1;\n    var bracketStack = 0;\n    var ret = {};\n    if (checkPunctuators(state.tokens.curr, [\"[\", \"{\"])) {\n      bracketStack += 1;\n    }\n    do {\n      prev = i === -1 ? state.tokens.curr : pn;\n      pn = i === -1 ? state.tokens.next : peek(i);\n      pn1 = peek(i + 1);\n      i = i + 1;\n      if (checkPunctuators(pn, [\"[\", \"{\"])) {\n        bracketStack += 1;\n      } else if (checkPunctuators(pn, [\"]\", \"}\"])) {\n        bracketStack -= 1;\n      }\n      if (bracketStack === 1 && pn.identifier && pn.value === \"for\" &&\n          !checkPunctuator(prev, \".\")) {\n        ret.isCompArray = true;\n        ret.notJson = true;\n        break;\n      }\n      if (bracketStack === 0 && checkPunctuators(pn, [\"}\", \"]\"])) {\n        if (pn1.value === \"=\") {\n          ret.isDestAssign = true;\n          ret.notJson = true;\n          break;\n        } else if (pn1.value === \".\") {\n          ret.notJson = true;\n          break;\n        }\n      }\n      if (checkPunctuator(pn, \";\")) {\n        ret.isBlock = true;\n        ret.notJson = true;\n      }\n    } while (bracketStack > 0 && pn.id !== \"(end)\");\n    return ret;\n  };\n\n  function saveProperty(props, name, tkn, isClass, isStatic) {\n    var msg = [\"key\", \"class method\", \"static class method\"];\n    msg = msg[(isClass || false) + (isStatic || false)];\n    if (tkn.identifier) {\n      name = tkn.value;\n    }\n\n    if (props[name] && name !== \"__proto__\") {\n      warning(\"W075\", state.tokens.next, msg, name);\n    } else {\n      props[name] = Object.create(null);\n    }\n\n    props[name].basic = true;\n    props[name].basictkn = tkn;\n  }\n  function saveAccessor(accessorType, props, name, tkn, isClass, isStatic) {\n    var flagName = accessorType === \"get\" ? \"getterToken\" : \"setterToken\";\n    var msg = \"\";\n\n    if (isClass) {\n      if (isStatic) {\n        msg += \"static \";\n      }\n      msg += accessorType + \"ter method\";\n    } else {\n      msg = \"key\";\n    }\n\n    state.tokens.curr.accessorType = accessorType;\n    state.nameStack.set(tkn);\n\n    if (props[name]) {\n      if ((props[name].basic || props[name][flagName]) && name !== \"__proto__\") {\n        warning(\"W075\", state.tokens.next, msg, name);\n      }\n    } else {\n      props[name] = Object.create(null);\n    }\n\n    props[name][flagName] = tkn;\n  }\n\n  function computedPropertyName() {\n    advance(\"[\");\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"computed property names\", \"6\");\n    }\n    var value = expression(10);\n    advance(\"]\");\n    return value;\n  }\n  function checkPunctuators(token, values) {\n    if (token.type === \"(punctuator)\") {\n      return _.contains(values, token.value);\n    }\n    return false;\n  }\n  function checkPunctuator(token, value) {\n    return token.type === \"(punctuator)\" && token.value === value;\n  }\n  function destructuringAssignOrJsonValue() {\n\n    var block = lookupBlockType();\n    if (block.notJson) {\n      if (!state.inES6() && block.isDestAssign) {\n        warning(\"W104\", state.tokens.curr, \"destructuring assignment\", \"6\");\n      }\n      statements();\n    } else {\n      state.option.laxbreak = true;\n      state.jsonMode = true;\n      jsonValue();\n    }\n  }\n\n  var arrayComprehension = function() {\n    var CompArray = function() {\n      this.mode = \"use\";\n      this.variables = [];\n    };\n    var _carrays = [];\n    var _current;\n    function declare(v) {\n      var l = _current.variables.filter(function(elt) {\n        if (elt.value === v) {\n          elt.undef = false;\n          return v;\n        }\n      }).length;\n      return l !== 0;\n    }\n    function use(v) {\n      var l = _current.variables.filter(function(elt) {\n        if (elt.value === v && !elt.undef) {\n          if (elt.unused === true) {\n            elt.unused = false;\n          }\n          return v;\n        }\n      }).length;\n      return (l === 0);\n    }\n    return { stack: function() {\n          _current = new CompArray();\n          _carrays.push(_current);\n        },\n        unstack: function() {\n          _current.variables.filter(function(v) {\n            if (v.unused)\n              warning(\"W098\", v.token, v.raw_text || v.value);\n            if (v.undef)\n              state.funct[\"(scope)\"].block.use(v.value, v.token);\n          });\n          _carrays.splice(-1, 1);\n          _current = _carrays[_carrays.length - 1];\n        },\n        setState: function(s) {\n          if (_.contains([\"use\", \"define\", \"generate\", \"filter\"], s))\n            _current.mode = s;\n        },\n        check: function(v) {\n          if (!_current) {\n            return;\n          }\n          if (_current && _current.mode === \"use\") {\n            if (use(v)) {\n              _current.variables.push({\n                funct: state.funct,\n                token: state.tokens.curr,\n                value: v,\n                undef: true,\n                unused: false\n              });\n            }\n            return true;\n          } else if (_current && _current.mode === \"define\") {\n            if (!declare(v)) {\n              _current.variables.push({\n                funct: state.funct,\n                token: state.tokens.curr,\n                value: v,\n                undef: false,\n                unused: true\n              });\n            }\n            return true;\n          } else if (_current && _current.mode === \"generate\") {\n            state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            return true;\n          } else if (_current && _current.mode === \"filter\") {\n            if (use(v)) {\n              state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            }\n            return true;\n          }\n          return false;\n        }\n        };\n  };\n\n  function jsonValue() {\n    function jsonObject() {\n      var o = {}, t = state.tokens.next;\n      advance(\"{\");\n      if (state.tokens.next.id !== \"}\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E026\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"}\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          } else if (state.tokens.next.id !== \"(string)\") {\n            warning(\"W095\", state.tokens.next, state.tokens.next.value);\n          }\n          if (o[state.tokens.next.value] === true) {\n            warning(\"W075\", state.tokens.next, \"key\", state.tokens.next.value);\n          } else if ((state.tokens.next.value === \"__proto__\" &&\n            !state.option.proto) || (state.tokens.next.value === \"__iterator__\" &&\n            !state.option.iterator)) {\n            warning(\"W096\", state.tokens.next, state.tokens.next.value);\n          } else {\n            o[state.tokens.next.value] = true;\n          }\n          advance();\n          advance(\":\");\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"}\");\n    }\n\n    function jsonArray() {\n      var t = state.tokens.next;\n      advance(\"[\");\n      if (state.tokens.next.id !== \"]\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E027\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"]\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          }\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    }\n\n    switch (state.tokens.next.id) {\n    case \"{\":\n      jsonObject();\n      break;\n    case \"[\":\n      jsonArray();\n      break;\n    case \"true\":\n    case \"false\":\n    case \"null\":\n    case \"(number)\":\n    case \"(string)\":\n      advance();\n      break;\n    case \"-\":\n      advance(\"-\");\n      advance(\"(number)\");\n      break;\n    default:\n      error(\"E003\", state.tokens.next);\n    }\n  }\n\n  var escapeRegex = function(str) {\n    return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n  };\n  var itself = function(s, o, g) {\n    var i, k, x, reIgnoreStr, reIgnore;\n    var optionKeys;\n    var newOptionObj = {};\n    var newIgnoredObj = {};\n\n    o = _.clone(o);\n    state.reset();\n\n    if (o && o.scope) {\n      JSHINT.scope = o.scope;\n    } else {\n      JSHINT.errors = [];\n      JSHINT.undefs = [];\n      JSHINT.internals = [];\n      JSHINT.blacklist = {};\n      JSHINT.scope = \"(main)\";\n    }\n\n    predefined = Object.create(null);\n    combine(predefined, vars.ecmaIdentifiers[3]);\n    combine(predefined, vars.reservedVars);\n\n    combine(predefined, g || {});\n\n    declared = Object.create(null);\n    var exported = Object.create(null); // Variables that live outside the current file\n\n    function each(obj, cb) {\n      if (!obj)\n        return;\n\n      if (!Array.isArray(obj) && typeof obj === \"object\")\n        obj = Object.keys(obj);\n\n      obj.forEach(cb);\n    }\n\n    if (o) {\n      each(o.predef || null, function(item) {\n        var slice, prop;\n\n        if (item[0] === \"-\") {\n          slice = item.slice(1);\n          JSHINT.blacklist[slice] = slice;\n          delete predefined[slice];\n        } else {\n          prop = Object.getOwnPropertyDescriptor(o.predef, item);\n          predefined[item] = prop ? prop.value : false;\n        }\n      });\n\n      each(o.exported || null, function(item) {\n        exported[item] = true;\n      });\n\n      delete o.predef;\n      delete o.exported;\n\n      optionKeys = Object.keys(o);\n      for (x = 0; x < optionKeys.length; x++) {\n        if (/^-W\\d{3}$/g.test(optionKeys[x])) {\n          newIgnoredObj[optionKeys[x].slice(1)] = true;\n        } else {\n          var optionKey = optionKeys[x];\n          newOptionObj[optionKey] = o[optionKey];\n          if ((optionKey === \"esversion\" && o[optionKey] === 5) ||\n              (optionKey === \"es5\" && o[optionKey])) {\n            warning(\"I003\");\n          }\n\n          if (optionKeys[x] === \"newcap\" && o[optionKey] === false)\n            newOptionObj[\"(explicitNewcap)\"] = true;\n        }\n      }\n    }\n\n    state.option = newOptionObj;\n    state.ignored = newIgnoredObj;\n\n    state.option.indent = state.option.indent || 4;\n    state.option.maxerr = state.option.maxerr || 50;\n\n    indent = 1;\n\n    var scopeManagerInst = scopeManager(state, predefined, exported, declared);\n    scopeManagerInst.on(\"warning\", function(ev) {\n      warning.apply(null, [ ev.code, ev.token].concat(ev.data));\n    });\n\n    scopeManagerInst.on(\"error\", function(ev) {\n      error.apply(null, [ ev.code, ev.token ].concat(ev.data));\n    });\n\n    state.funct = functor(\"(global)\", null, {\n      \"(global)\"    : true,\n      \"(scope)\"     : scopeManagerInst,\n      \"(comparray)\" : arrayComprehension(),\n      \"(metrics)\"   : createMetrics(state.tokens.next)\n    });\n\n    functions = [state.funct];\n    urls = [];\n    stack = null;\n    member = {};\n    membersOnly = null;\n    inblock = false;\n    lookahead = [];\n\n    if (!isString(s) && !Array.isArray(s)) {\n      errorAt(\"E004\", 0);\n      return false;\n    }\n\n    api = {\n      get isJSON() {\n        return state.jsonMode;\n      },\n\n      getOption: function(name) {\n        return state.option[name] || null;\n      },\n\n      getCache: function(name) {\n        return state.cache[name];\n      },\n\n      setCache: function(name, value) {\n        state.cache[name] = value;\n      },\n\n      warn: function(code, data) {\n        warningAt.apply(null, [ code, data.line, data.char ].concat(data.data));\n      },\n\n      on: function(names, listener) {\n        names.split(\" \").forEach(function(name) {\n          emitter.on(name, listener);\n        }.bind(this));\n      }\n    };\n\n    emitter.removeAllListeners();\n    (extraModules || []).forEach(function(func) {\n      func(api);\n    });\n\n    state.tokens.prev = state.tokens.curr = state.tokens.next = state.syntax[\"(begin)\"];\n\n    if (o && o.ignoreDelimiters) {\n\n      if (!Array.isArray(o.ignoreDelimiters)) {\n        o.ignoreDelimiters = [o.ignoreDelimiters];\n      }\n\n      o.ignoreDelimiters.forEach(function(delimiterPair) {\n        if (!delimiterPair.start || !delimiterPair.end)\n            return;\n\n        reIgnoreStr = escapeRegex(delimiterPair.start) +\n                      \"[\\\\s\\\\S]*?\" +\n                      escapeRegex(delimiterPair.end);\n\n        reIgnore = new RegExp(reIgnoreStr, \"ig\");\n\n        s = s.replace(reIgnore, function(match) {\n          return match.replace(/./g, \" \");\n        });\n      });\n    }\n\n    lex = new Lexer(s);\n\n    lex.on(\"warning\", function(ev) {\n      warningAt.apply(null, [ ev.code, ev.line, ev.character].concat(ev.data));\n    });\n\n    lex.on(\"error\", function(ev) {\n      errorAt.apply(null, [ ev.code, ev.line, ev.character ].concat(ev.data));\n    });\n\n    lex.on(\"fatal\", function(ev) {\n      quit(\"E041\", ev.line, ev.from);\n    });\n\n    lex.on(\"Identifier\", function(ev) {\n      emitter.emit(\"Identifier\", ev);\n    });\n\n    lex.on(\"String\", function(ev) {\n      emitter.emit(\"String\", ev);\n    });\n\n    lex.on(\"Number\", function(ev) {\n      emitter.emit(\"Number\", ev);\n    });\n\n    lex.start();\n    for (var name in o) {\n      if (_.has(o, name)) {\n        checkOption(name, state.tokens.curr);\n      }\n    }\n\n    assume();\n    combine(predefined, g || {});\n    comma.first = true;\n\n    try {\n      advance();\n      switch (state.tokens.next.id) {\n      case \"{\":\n      case \"[\":\n        destructuringAssignOrJsonValue();\n        break;\n      default:\n        directives();\n\n        if (state.directive[\"use strict\"]) {\n          if (state.option.strict !== \"global\") {\n            warning(\"W097\", state.tokens.prev);\n          }\n        }\n\n        statements();\n      }\n\n      if (state.tokens.next.id !== \"(end)\") {\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n    } catch (err) {\n      if (err && err.name === \"JSHintError\") {\n        var nt = state.tokens.next || {};\n        JSHINT.errors.push({\n          scope     : \"(main)\",\n          raw       : err.raw,\n          code      : err.code,\n          reason    : err.message,\n          line      : err.line || nt.line,\n          character : err.character || nt.from\n        }, null);\n      } else {\n        throw err;\n      }\n    }\n\n    if (JSHINT.scope === \"(main)\") {\n      o = o || {};\n\n      for (i = 0; i < JSHINT.internals.length; i += 1) {\n        k = JSHINT.internals[i];\n        o.scope = k.elem;\n        itself(k.value, o, g);\n      }\n    }\n\n    return JSHINT.errors.length === 0;\n  };\n  itself.addModule = function(func) {\n    extraModules.push(func);\n  };\n\n  itself.addModule(style.register);\n  itself.data = function() {\n    var data = {\n      functions: [],\n      options: state.option\n    };\n\n    var fu, f, i, j, n, globals;\n\n    if (itself.errors.length) {\n      data.errors = itself.errors;\n    }\n\n    if (state.jsonMode) {\n      data.json = true;\n    }\n\n    var impliedGlobals = state.funct[\"(scope)\"].getImpliedGlobals();\n    if (impliedGlobals.length > 0) {\n      data.implieds = impliedGlobals;\n    }\n\n    if (urls.length > 0) {\n      data.urls = urls;\n    }\n\n    globals = state.funct[\"(scope)\"].getUsedOrDefinedGlobals();\n    if (globals.length > 0) {\n      data.globals = globals;\n    }\n\n    for (i = 1; i < functions.length; i += 1) {\n      f = functions[i];\n      fu = {};\n\n      for (j = 0; j < functionicity.length; j += 1) {\n        fu[functionicity[j]] = [];\n      }\n\n      for (j = 0; j < functionicity.length; j += 1) {\n        if (fu[functionicity[j]].length === 0) {\n          delete fu[functionicity[j]];\n        }\n      }\n\n      fu.name = f[\"(name)\"];\n      fu.param = f[\"(params)\"];\n      fu.line = f[\"(line)\"];\n      fu.character = f[\"(character)\"];\n      fu.last = f[\"(last)\"];\n      fu.lastcharacter = f[\"(lastcharacter)\"];\n\n      fu.metrics = {\n        complexity: f[\"(metrics)\"].ComplexityCount,\n        parameters: f[\"(metrics)\"].arity,\n        statements: f[\"(metrics)\"].statementCount\n      };\n\n      data.functions.push(fu);\n    }\n\n    var unuseds = state.funct[\"(scope)\"].getUnuseds();\n    if (unuseds.length > 0) {\n      data.unused = unuseds;\n    }\n\n    for (n in member) {\n      if (typeof member[n] === \"number\") {\n        data.member = member;\n        break;\n      }\n    }\n\n    return data;\n  };\n\n  itself.jshint = itself;\n\n  return itself;\n}());\nif (typeof exports === \"object\" && exports) {\n  exports.JSHINT = JSHINT;\n}\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./lex.js\":\"/node_modules/jshint/src/lex.js\",\"./messages.js\":\"/node_modules/jshint/src/messages.js\",\"./options.js\":\"/node_modules/jshint/src/options.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./scope-manager.js\":\"/node_modules/jshint/src/scope-manager.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"./style.js\":\"/node_modules/jshint/src/style.js\",\"./vars.js\":\"/node_modules/jshint/src/vars.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/lex.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nvar _      = _dereq_(\"../lodash\");\nvar events = _dereq_(\"events\");\nvar reg    = _dereq_(\"./reg.js\");\nvar state  = _dereq_(\"./state.js\").state;\n\nvar unicodeData = _dereq_(\"../data/ascii-identifier-data.js\");\nvar asciiIdentifierStartTable = unicodeData.asciiIdentifierStartTable;\nvar asciiIdentifierPartTable = unicodeData.asciiIdentifierPartTable;\n\nvar Token = {\n  Identifier: 1,\n  Punctuator: 2,\n  NumericLiteral: 3,\n  StringLiteral: 4,\n  Comment: 5,\n  Keyword: 6,\n  NullLiteral: 7,\n  BooleanLiteral: 8,\n  RegExp: 9,\n  TemplateHead: 10,\n  TemplateMiddle: 11,\n  TemplateTail: 12,\n  NoSubstTemplate: 13\n};\n\nvar Context = {\n  Block: 1,\n  Template: 2\n};\n\nfunction asyncTrigger() {\n  var _checks = [];\n\n  return {\n    push: function(fn) {\n      _checks.push(fn);\n    },\n\n    check: function() {\n      for (var check = 0; check < _checks.length; ++check) {\n        _checks[check]();\n      }\n\n      _checks.splice(0, _checks.length);\n    }\n  };\n}\nfunction Lexer(source) {\n  var lines = source;\n\n  if (typeof lines === \"string\") {\n    lines = lines\n      .replace(/\\r\\n/g, \"\\n\")\n      .replace(/\\r/g, \"\\n\")\n      .split(\"\\n\");\n  }\n\n  if (lines[0] && lines[0].substr(0, 2) === \"#!\") {\n    if (lines[0].indexOf(\"node\") !== -1) {\n      state.option.node = true;\n    }\n    lines[0] = \"\";\n  }\n\n  this.emitter = new events.EventEmitter();\n  this.source = source;\n  this.setLines(lines);\n  this.prereg = true;\n\n  this.line = 0;\n  this.char = 1;\n  this.from = 1;\n  this.input = \"\";\n  this.inComment = false;\n  this.context = [];\n  this.templateStarts = [];\n\n  for (var i = 0; i < state.option.indent; i += 1) {\n    state.tab += \" \";\n  }\n  this.ignoreLinterErrors = false;\n}\n\nLexer.prototype = {\n  _lines: [],\n\n  inContext: function(ctxType) {\n    return this.context.length > 0 && this.context[this.context.length - 1].type === ctxType;\n  },\n\n  pushContext: function(ctxType) {\n    this.context.push({ type: ctxType });\n  },\n\n  popContext: function() {\n    return this.context.pop();\n  },\n\n  isContext: function(context) {\n    return this.context.length > 0 && this.context[this.context.length - 1] === context;\n  },\n\n  currentContext: function() {\n    return this.context.length > 0 && this.context[this.context.length - 1];\n  },\n\n  getLines: function() {\n    this._lines = state.lines;\n    return this._lines;\n  },\n\n  setLines: function(val) {\n    this._lines = val;\n    state.lines = this._lines;\n  },\n  peek: function(i) {\n    return this.input.charAt(i || 0);\n  },\n  skip: function(i) {\n    i = i || 1;\n    this.char += i;\n    this.input = this.input.slice(i);\n  },\n  on: function(names, listener) {\n    names.split(\" \").forEach(function(name) {\n      this.emitter.on(name, listener);\n    }.bind(this));\n  },\n  trigger: function() {\n    this.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments));\n  },\n  triggerAsync: function(type, args, checks, fn) {\n    checks.push(function() {\n      if (fn()) {\n        this.trigger(type, args);\n      }\n    }.bind(this));\n  },\n  scanPunctuator: function() {\n    var ch1 = this.peek();\n    var ch2, ch3, ch4;\n\n    switch (ch1) {\n    case \".\":\n      if ((/^[0-9]$/).test(this.peek(1))) {\n        return null;\n      }\n      if (this.peek(1) === \".\" && this.peek(2) === \".\") {\n        return {\n          type: Token.Punctuator,\n          value: \"...\"\n        };\n      }\n    case \"(\":\n    case \")\":\n    case \";\":\n    case \",\":\n    case \"[\":\n    case \"]\":\n    case \":\":\n    case \"~\":\n    case \"?\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"{\":\n      this.pushContext(Context.Block);\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"}\":\n      if (this.inContext(Context.Block)) {\n        this.popContext();\n      }\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"#\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"\":\n      return null;\n    }\n\n    ch2 = this.peek(1);\n    ch3 = this.peek(2);\n    ch4 = this.peek(3);\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\" && ch4 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>=\"\n      };\n    }\n\n    if (ch1 === \"=\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"===\"\n      };\n    }\n\n    if (ch1 === \"!\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"!==\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>\"\n      };\n    }\n\n    if (ch1 === \"<\" && ch2 === \"<\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"<<=\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>=\"\n      };\n    }\n    if (ch1 === \"=\" && ch2 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n    if (ch1 === ch2 && (\"+-<>&|\".indexOf(ch1) >= 0)) {\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n\n    if (\"<>=!+-*%&|^\".indexOf(ch1) >= 0) {\n      if (ch2 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: ch1 + ch2\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    }\n\n    if (ch1 === \"/\") {\n      if (ch2 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: \"/=\"\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: \"/\"\n      };\n    }\n\n    return null;\n  },\n  scanComments: function() {\n    var ch1 = this.peek();\n    var ch2 = this.peek(1);\n    var rest = this.input.substr(2);\n    var startLine = this.line;\n    var startChar = this.char;\n    var self = this;\n\n    function commentToken(label, body, opt) {\n      var special = [\"jshint\", \"jslint\", \"members\", \"member\", \"globals\", \"global\", \"exported\"];\n      var isSpecial = false;\n      var value = label + body;\n      var commentType = \"plain\";\n      opt = opt || {};\n\n      if (opt.isMultiline) {\n        value += \"*/\";\n      }\n\n      body = body.replace(/\\n/g, \" \");\n\n      if (label === \"/*\" && reg.fallsThrough.test(body)) {\n        isSpecial = true;\n        commentType = \"falls through\";\n      }\n\n      special.forEach(function(str) {\n        if (isSpecial) {\n          return;\n        }\n        if (label === \"//\" && str !== \"jshint\") {\n          return;\n        }\n\n        if (body.charAt(str.length) === \" \" && body.substr(0, str.length) === str) {\n          isSpecial = true;\n          label = label + str;\n          body = body.substr(str.length);\n        }\n\n        if (!isSpecial && body.charAt(0) === \" \" && body.charAt(str.length + 1) === \" \" &&\n          body.substr(1, str.length) === str) {\n          isSpecial = true;\n          label = label + \" \" + str;\n          body = body.substr(str.length + 1);\n        }\n\n        if (!isSpecial) {\n          return;\n        }\n\n        switch (str) {\n        case \"member\":\n          commentType = \"members\";\n          break;\n        case \"global\":\n          commentType = \"globals\";\n          break;\n        default:\n          var options = body.split(\":\").map(function(v) {\n            return v.replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n          });\n\n          if (options.length === 2) {\n            switch (options[0]) {\n            case \"ignore\":\n              switch (options[1]) {\n              case \"start\":\n                self.ignoringLinterErrors = true;\n                isSpecial = false;\n                break;\n              case \"end\":\n                self.ignoringLinterErrors = false;\n                isSpecial = false;\n                break;\n              }\n            }\n          }\n\n          commentType = str;\n        }\n      });\n\n      return {\n        type: Token.Comment,\n        commentType: commentType,\n        value: value,\n        body: body,\n        isSpecial: isSpecial,\n        isMultiline: opt.isMultiline || false,\n        isMalformed: opt.isMalformed || false\n      };\n    }\n    if (ch1 === \"*\" && ch2 === \"/\") {\n      this.trigger(\"error\", {\n        code: \"E018\",\n        line: startLine,\n        character: startChar\n      });\n\n      this.skip(2);\n      return null;\n    }\n    if (ch1 !== \"/\" || (ch2 !== \"*\" && ch2 !== \"/\")) {\n      return null;\n    }\n    if (ch2 === \"/\") {\n      this.skip(this.input.length); // Skip to the EOL.\n      return commentToken(\"//\", rest);\n    }\n\n    var body = \"\";\n    if (ch2 === \"*\") {\n      this.inComment = true;\n      this.skip(2);\n\n      while (this.peek() !== \"*\" || this.peek(1) !== \"/\") {\n        if (this.peek() === \"\") { // End of Line\n          body += \"\\n\";\n          if (!this.nextLine()) {\n            this.trigger(\"error\", {\n              code: \"E017\",\n              line: startLine,\n              character: startChar\n            });\n\n            this.inComment = false;\n            return commentToken(\"/*\", body, {\n              isMultiline: true,\n              isMalformed: true\n            });\n          }\n        } else {\n          body += this.peek();\n          this.skip();\n        }\n      }\n\n      this.skip(2);\n      this.inComment = false;\n      return commentToken(\"/*\", body, { isMultiline: true });\n    }\n  },\n  scanKeyword: function() {\n    var result = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input);\n    var keywords = [\n      \"if\", \"in\", \"do\", \"var\", \"for\", \"new\",\n      \"try\", \"let\", \"this\", \"else\", \"case\",\n      \"void\", \"with\", \"enum\", \"while\", \"break\",\n      \"catch\", \"throw\", \"const\", \"yield\", \"class\",\n      \"super\", \"return\", \"typeof\", \"delete\",\n      \"switch\", \"export\", \"import\", \"default\",\n      \"finally\", \"extends\", \"function\", \"continue\",\n      \"debugger\", \"instanceof\"\n    ];\n\n    if (result && keywords.indexOf(result[0]) >= 0) {\n      return {\n        type: Token.Keyword,\n        value: result[0]\n      };\n    }\n\n    return null;\n  },\n  scanIdentifier: function() {\n    var id = \"\";\n    var index = 0;\n    var type, char;\n\n    function isNonAsciiIdentifierStart(code) {\n      return code > 256;\n    }\n\n    function isNonAsciiIdentifierPart(code) {\n      return code > 256;\n    }\n\n    function isHexDigit(str) {\n      return (/^[0-9a-fA-F]$/).test(str);\n    }\n\n    var readUnicodeEscapeSequence = function() {\n      index += 1;\n\n      if (this.peek(index) !== \"u\") {\n        return null;\n      }\n\n      var ch1 = this.peek(index + 1);\n      var ch2 = this.peek(index + 2);\n      var ch3 = this.peek(index + 3);\n      var ch4 = this.peek(index + 4);\n      var code;\n\n      if (isHexDigit(ch1) && isHexDigit(ch2) && isHexDigit(ch3) && isHexDigit(ch4)) {\n        code = parseInt(ch1 + ch2 + ch3 + ch4, 16);\n\n        if (asciiIdentifierPartTable[code] || isNonAsciiIdentifierPart(code)) {\n          index += 5;\n          return \"\\\\u\" + ch1 + ch2 + ch3 + ch4;\n        }\n\n        return null;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierStart = function() {\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierStartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierStart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierPart = function() {\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierPartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierPart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    function removeEscapeSequences(id) {\n      return id.replace(/\\\\u([0-9a-fA-F]{4})/g, function(m0, codepoint) {\n        return String.fromCharCode(parseInt(codepoint, 16));\n      });\n    }\n\n    char = getIdentifierStart();\n    if (char === null) {\n      return null;\n    }\n\n    id = char;\n    for (;;) {\n      char = getIdentifierPart();\n\n      if (char === null) {\n        break;\n      }\n\n      id += char;\n    }\n\n    switch (id) {\n    case \"true\":\n    case \"false\":\n      type = Token.BooleanLiteral;\n      break;\n    case \"null\":\n      type = Token.NullLiteral;\n      break;\n    default:\n      type = Token.Identifier;\n    }\n\n    return {\n      type: type,\n      value: removeEscapeSequences(id),\n      text: id,\n      tokenLength: id.length\n    };\n  },\n  scanNumericLiteral: function() {\n    var index = 0;\n    var value = \"\";\n    var length = this.input.length;\n    var char = this.peek(index);\n    var bad;\n    var isAllowedDigit = isDecimalDigit;\n    var base = 10;\n    var isLegacy = false;\n\n    function isDecimalDigit(str) {\n      return (/^[0-9]$/).test(str);\n    }\n\n    function isOctalDigit(str) {\n      return (/^[0-7]$/).test(str);\n    }\n\n    function isBinaryDigit(str) {\n      return (/^[01]$/).test(str);\n    }\n\n    function isHexDigit(str) {\n      return (/^[0-9a-fA-F]$/).test(str);\n    }\n\n    function isIdentifierStart(ch) {\n      return (ch === \"$\") || (ch === \"_\") || (ch === \"\\\\\") ||\n        (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\");\n    }\n\n    if (char !== \".\" && !isDecimalDigit(char)) {\n      return null;\n    }\n\n    if (char !== \".\") {\n      value = this.peek(index);\n      index += 1;\n      char = this.peek(index);\n\n      if (value === \"0\") {\n        if (char === \"x\" || char === \"X\") {\n          isAllowedDigit = isHexDigit;\n          base = 16;\n\n          index += 1;\n          value += char;\n        }\n        if (char === \"o\" || char === \"O\") {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n\n          if (!state.inES6(true)) {\n            this.trigger(\"warning\", {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Octal integer literal\", \"6\" ]\n            });\n          }\n\n          index += 1;\n          value += char;\n        }\n        if (char === \"b\" || char === \"B\") {\n          isAllowedDigit = isBinaryDigit;\n          base = 2;\n\n          if (!state.inES6(true)) {\n            this.trigger(\"warning\", {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Binary integer literal\", \"6\" ]\n            });\n          }\n\n          index += 1;\n          value += char;\n        }\n        if (isOctalDigit(char)) {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n          isLegacy = true;\n          bad = false;\n\n          index += 1;\n          value += char;\n        }\n\n        if (!isOctalDigit(char) && isDecimalDigit(char)) {\n          index += 1;\n          value += char;\n        }\n      }\n\n      while (index < length) {\n        char = this.peek(index);\n\n        if (isLegacy && isDecimalDigit(char)) {\n          bad = true;\n        } else if (!isAllowedDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n\n      if (isAllowedDigit !== isDecimalDigit) {\n        if (!isLegacy && value.length <= 2) { // 0x\n          return {\n            type: Token.NumericLiteral,\n            value: value,\n            isMalformed: true\n          };\n        }\n\n        if (index < length) {\n          char = this.peek(index);\n          if (isIdentifierStart(char)) {\n            return null;\n          }\n        }\n\n        return {\n          type: Token.NumericLiteral,\n          value: value,\n          base: base,\n          isLegacy: isLegacy,\n          isMalformed: false\n        };\n      }\n    }\n\n    if (char === \".\") {\n      value += char;\n      index += 1;\n\n      while (index < length) {\n        char = this.peek(index);\n        if (!isDecimalDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n    }\n\n    if (char === \"e\" || char === \"E\") {\n      value += char;\n      index += 1;\n      char = this.peek(index);\n\n      if (char === \"+\" || char === \"-\") {\n        value += this.peek(index);\n        index += 1;\n      }\n\n      char = this.peek(index);\n      if (isDecimalDigit(char)) {\n        value += char;\n        index += 1;\n\n        while (index < length) {\n          char = this.peek(index);\n          if (!isDecimalDigit(char)) {\n            break;\n          }\n          value += char;\n          index += 1;\n        }\n      } else {\n        return null;\n      }\n    }\n\n    if (index < length) {\n      char = this.peek(index);\n      if (isIdentifierStart(char)) {\n        return null;\n      }\n    }\n\n    return {\n      type: Token.NumericLiteral,\n      value: value,\n      base: base,\n      isMalformed: !isFinite(value)\n    };\n  },\n  scanEscapeSequence: function(checks) {\n    var allowNewLine = false;\n    var jump = 1;\n    this.skip();\n    var char = this.peek();\n\n    switch (char) {\n    case \"'\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\'\" ]\n      }, checks, function() {return state.jsonMode; });\n      break;\n    case \"b\":\n      char = \"\\\\b\";\n      break;\n    case \"f\":\n      char = \"\\\\f\";\n      break;\n    case \"n\":\n      char = \"\\\\n\";\n      break;\n    case \"r\":\n      char = \"\\\\r\";\n      break;\n    case \"t\":\n      char = \"\\\\t\";\n      break;\n    case \"0\":\n      char = \"\\\\0\";\n      var n = parseInt(this.peek(1), 10);\n      this.triggerAsync(\"warning\", {\n        code: \"W115\",\n        line: this.line,\n        character: this.char\n      }, checks,\n      function() { return n >= 0 && n <= 7 && state.isStrict(); });\n      break;\n    case \"u\":\n      var hexCode = this.input.substr(1, 4);\n      var code = parseInt(hexCode, 16);\n      if (isNaN(code)) {\n        this.trigger(\"warning\", {\n          code: \"W052\",\n          line: this.line,\n          character: this.char,\n          data: [ \"u\" + hexCode ]\n        });\n      }\n      char = String.fromCharCode(code);\n      jump = 5;\n      break;\n    case \"v\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\v\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = \"\\v\";\n      break;\n    case \"x\":\n      var  x = parseInt(this.input.substr(1, 2), 16);\n\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\x-\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = String.fromCharCode(x);\n      jump = 3;\n      break;\n    case \"\\\\\":\n      char = \"\\\\\\\\\";\n      break;\n    case \"\\\"\":\n      char = \"\\\\\\\"\";\n      break;\n    case \"/\":\n      break;\n    case \"\":\n      allowNewLine = true;\n      char = \"\";\n      break;\n    }\n\n    return { char: char, jump: jump, allowNewLine: allowNewLine };\n  },\n  scanTemplateLiteral: function(checks) {\n    var tokenType;\n    var value = \"\";\n    var ch;\n    var startLine = this.line;\n    var startChar = this.char;\n    var depth = this.templateStarts.length;\n\n    if (!state.inES6(true)) {\n      return null;\n    } else if (this.peek() === \"`\") {\n      tokenType = Token.TemplateHead;\n      this.templateStarts.push({ line: this.line, char: this.char });\n      depth = this.templateStarts.length;\n      this.skip(1);\n      this.pushContext(Context.Template);\n    } else if (this.inContext(Context.Template) && this.peek() === \"}\") {\n      tokenType = Token.TemplateMiddle;\n    } else {\n      return null;\n    }\n\n    while (this.peek() !== \"`\") {\n      while ((ch = this.peek()) === \"\") {\n        value += \"\\n\";\n        if (!this.nextLine()) {\n          var startPos = this.templateStarts.pop();\n          this.trigger(\"error\", {\n            code: \"E052\",\n            line: startPos.line,\n            character: startPos.char\n          });\n          return {\n            type: tokenType,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            depth: depth,\n            context: this.popContext()\n          };\n        }\n      }\n\n      if (ch === '$' && this.peek(1) === '{') {\n        value += '${';\n        this.skip(2);\n        return {\n          type: tokenType,\n          value: value,\n          startLine: startLine,\n          startChar: startChar,\n          isUnclosed: false,\n          depth: depth,\n          context: this.currentContext()\n        };\n      } else if (ch === '\\\\') {\n        var escape = this.scanEscapeSequence(checks);\n        value += escape.char;\n        this.skip(escape.jump);\n      } else if (ch !== '`') {\n        value += ch;\n        this.skip(1);\n      }\n    }\n    tokenType = tokenType === Token.TemplateHead ? Token.NoSubstTemplate : Token.TemplateTail;\n    this.skip(1);\n    this.templateStarts.pop();\n\n    return {\n      type: tokenType,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      depth: depth,\n      context: this.popContext()\n    };\n  },\n  scanStringLiteral: function(checks) {\n    var quote = this.peek();\n    if (quote !== \"\\\"\" && quote !== \"'\") {\n      return null;\n    }\n    this.triggerAsync(\"warning\", {\n      code: \"W108\",\n      line: this.line,\n      character: this.char // +1?\n    }, checks, function() { return state.jsonMode && quote !== \"\\\"\"; });\n\n    var value = \"\";\n    var startLine = this.line;\n    var startChar = this.char;\n    var allowNewLine = false;\n\n    this.skip();\n\n    while (this.peek() !== quote) {\n      if (this.peek() === \"\") { // End Of Line\n\n        if (!allowNewLine) {\n          this.trigger(\"warning\", {\n            code: \"W112\",\n            line: this.line,\n            character: this.char\n          });\n        } else {\n          allowNewLine = false;\n\n          this.triggerAsync(\"warning\", {\n            code: \"W043\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return !state.option.multistr; });\n\n          this.triggerAsync(\"warning\", {\n            code: \"W042\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return state.jsonMode && state.option.multistr; });\n        }\n\n        if (!this.nextLine()) {\n          this.trigger(\"error\", {\n            code: \"E029\",\n            line: startLine,\n            character: startChar\n          });\n\n          return {\n            type: Token.StringLiteral,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            quote: quote\n          };\n        }\n\n      } else { // Any character other than End Of Line\n\n        allowNewLine = false;\n        var char = this.peek();\n        var jump = 1; // A length of a jump, after we're done\n\n        if (char < \" \") {\n          this.trigger(\"warning\", {\n            code: \"W113\",\n            line: this.line,\n            character: this.char,\n            data: [ \"<non-printable>\" ]\n          });\n        }\n        if (char === \"\\\\\") {\n          var parsed = this.scanEscapeSequence(checks);\n          char = parsed.char;\n          jump = parsed.jump;\n          allowNewLine = parsed.allowNewLine;\n        }\n\n        value += char;\n        this.skip(jump);\n      }\n    }\n\n    this.skip();\n    return {\n      type: Token.StringLiteral,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      quote: quote\n    };\n  },\n  scanRegExp: function() {\n    var index = 0;\n    var length = this.input.length;\n    var char = this.peek();\n    var value = char;\n    var body = \"\";\n    var flags = [];\n    var malformed = false;\n    var isCharSet = false;\n    var terminated;\n\n    var scanUnexpectedChars = function() {\n      if (char < \" \") {\n        malformed = true;\n        this.trigger(\"warning\", {\n          code: \"W048\",\n          line: this.line,\n          character: this.char\n        });\n      }\n      if (char === \"<\") {\n        malformed = true;\n        this.trigger(\"warning\", {\n          code: \"W049\",\n          line: this.line,\n          character: this.char,\n          data: [ char ]\n        });\n      }\n    }.bind(this);\n    if (!this.prereg || char !== \"/\") {\n      return null;\n    }\n\n    index += 1;\n    terminated = false;\n\n    while (index < length) {\n      char = this.peek(index);\n      value += char;\n      body += char;\n\n      if (isCharSet) {\n        if (char === \"]\") {\n          if (this.peek(index - 1) !== \"\\\\\" || this.peek(index - 2) === \"\\\\\") {\n            isCharSet = false;\n          }\n        }\n\n        if (char === \"\\\\\") {\n          index += 1;\n          char = this.peek(index);\n          body += char;\n          value += char;\n\n          scanUnexpectedChars();\n        }\n\n        index += 1;\n        continue;\n      }\n\n      if (char === \"\\\\\") {\n        index += 1;\n        char = this.peek(index);\n        body += char;\n        value += char;\n\n        scanUnexpectedChars();\n\n        if (char === \"/\") {\n          index += 1;\n          continue;\n        }\n\n        if (char === \"[\") {\n          index += 1;\n          continue;\n        }\n      }\n\n      if (char === \"[\") {\n        isCharSet = true;\n        index += 1;\n        continue;\n      }\n\n      if (char === \"/\") {\n        body = body.substr(0, body.length - 1);\n        terminated = true;\n        index += 1;\n        break;\n      }\n\n      index += 1;\n    }\n\n    if (!terminated) {\n      this.trigger(\"error\", {\n        code: \"E015\",\n        line: this.line,\n        character: this.from\n      });\n\n      return void this.trigger(\"fatal\", {\n        line: this.line,\n        from: this.from\n      });\n    }\n\n    while (index < length) {\n      char = this.peek(index);\n      if (!/[gim]/.test(char)) {\n        break;\n      }\n      flags.push(char);\n      value += char;\n      index += 1;\n    }\n\n    try {\n      new RegExp(body, flags.join(\"\"));\n    } catch (err) {\n      malformed = true;\n      this.trigger(\"error\", {\n        code: \"E016\",\n        line: this.line,\n        character: this.char,\n        data: [ err.message ] // Platform dependent!\n      });\n    }\n\n    return {\n      type: Token.RegExp,\n      value: value,\n      flags: flags,\n      isMalformed: malformed\n    };\n  },\n  scanNonBreakingSpaces: function() {\n    return state.option.nonbsp ?\n      this.input.search(/(\\u00A0)/) : -1;\n  },\n  scanUnsafeChars: function() {\n    return this.input.search(reg.unsafeChars);\n  },\n  next: function(checks) {\n    this.from = this.char;\n    var start;\n    if (/\\s/.test(this.peek())) {\n      start = this.char;\n\n      while (/\\s/.test(this.peek())) {\n        this.from += 1;\n        this.skip();\n      }\n    }\n\n    var match = this.scanComments() ||\n      this.scanStringLiteral(checks) ||\n      this.scanTemplateLiteral(checks);\n\n    if (match) {\n      return match;\n    }\n\n    match =\n      this.scanRegExp() ||\n      this.scanPunctuator() ||\n      this.scanKeyword() ||\n      this.scanIdentifier() ||\n      this.scanNumericLiteral();\n\n    if (match) {\n      this.skip(match.tokenLength || match.value.length);\n      return match;\n    }\n\n    return null;\n  },\n  nextLine: function() {\n    var char;\n\n    if (this.line >= this.getLines().length) {\n      return false;\n    }\n\n    this.input = this.getLines()[this.line];\n    this.line += 1;\n    this.char = 1;\n    this.from = 1;\n\n    var inputTrimmed = this.input.trim();\n\n    var startsWith = function() {\n      return _.some(arguments, function(prefix) {\n        return inputTrimmed.indexOf(prefix) === 0;\n      });\n    };\n\n    var endsWith = function() {\n      return _.some(arguments, function(suffix) {\n        return inputTrimmed.indexOf(suffix, inputTrimmed.length - suffix.length) !== -1;\n      });\n    };\n    if (this.ignoringLinterErrors === true) {\n      if (!startsWith(\"/*\", \"//\") && !(this.inComment && endsWith(\"*/\"))) {\n        this.input = \"\";\n      }\n    }\n\n    char = this.scanNonBreakingSpaces();\n    if (char >= 0) {\n      this.trigger(\"warning\", { code: \"W125\", line: this.line, character: char + 1 });\n    }\n\n    this.input = this.input.replace(/\\t/g, state.tab);\n    char = this.scanUnsafeChars();\n\n    if (char >= 0) {\n      this.trigger(\"warning\", { code: \"W100\", line: this.line, character: char });\n    }\n\n    if (!this.ignoringLinterErrors && state.option.maxlen &&\n      state.option.maxlen < this.input.length) {\n      var inComment = this.inComment ||\n        startsWith.call(inputTrimmed, \"//\") ||\n        startsWith.call(inputTrimmed, \"/*\");\n\n      var shouldTriggerError = !inComment || !reg.maxlenException.test(inputTrimmed);\n\n      if (shouldTriggerError) {\n        this.trigger(\"warning\", { code: \"W101\", line: this.line, character: this.input.length });\n      }\n    }\n\n    return true;\n  },\n  start: function() {\n    this.nextLine();\n  },\n  token: function() {\n    var checks = asyncTrigger();\n    var token;\n\n\n    function isReserved(token, isProperty) {\n      if (!token.reserved) {\n        return false;\n      }\n      var meta = token.meta;\n\n      if (meta && meta.isFutureReservedWord && state.inES5()) {\n        if (!meta.es5) {\n          return false;\n        }\n        if (meta.strictOnly) {\n          if (!state.option.strict && !state.isStrict()) {\n            return false;\n          }\n        }\n\n        if (isProperty) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n    var create = function(type, value, isProperty, token) {\n      var obj;\n\n      if (type !== \"(endline)\" && type !== \"(end)\") {\n        this.prereg = false;\n      }\n\n      if (type === \"(punctuator)\") {\n        switch (value) {\n        case \".\":\n        case \")\":\n        case \"~\":\n        case \"#\":\n        case \"]\":\n        case \"++\":\n        case \"--\":\n          this.prereg = false;\n          break;\n        default:\n          this.prereg = true;\n        }\n\n        obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n      }\n\n      if (type === \"(identifier)\") {\n        if (value === \"return\" || value === \"case\" || value === \"typeof\") {\n          this.prereg = true;\n        }\n\n        if (_.has(state.syntax, value)) {\n          obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n          if (!isReserved(obj, isProperty && type === \"(identifier)\")) {\n            obj = null;\n          }\n        }\n      }\n\n      if (!obj) {\n        obj = Object.create(state.syntax[type]);\n      }\n\n      obj.identifier = (type === \"(identifier)\");\n      obj.type = obj.type || type;\n      obj.value = value;\n      obj.line = this.line;\n      obj.character = this.char;\n      obj.from = this.from;\n      if (obj.identifier && token) obj.raw_text = token.text || token.value;\n      if (token && token.startLine && token.startLine !== this.line) {\n        obj.startLine = token.startLine;\n      }\n      if (token && token.context) {\n        obj.context = token.context;\n      }\n      if (token && token.depth) {\n        obj.depth = token.depth;\n      }\n      if (token && token.isUnclosed) {\n        obj.isUnclosed = token.isUnclosed;\n      }\n\n      if (isProperty && obj.identifier) {\n        obj.isProperty = isProperty;\n      }\n\n      obj.check = checks.check;\n\n      return obj;\n    }.bind(this);\n\n    for (;;) {\n      if (!this.input.length) {\n        if (this.nextLine()) {\n          return create(\"(endline)\", \"\");\n        }\n\n        if (this.exhausted) {\n          return null;\n        }\n\n        this.exhausted = true;\n        return create(\"(end)\", \"\");\n      }\n\n      token = this.next(checks);\n\n      if (!token) {\n        if (this.input.length) {\n          this.trigger(\"error\", {\n            code: \"E024\",\n            line: this.line,\n            character: this.char,\n            data: [ this.peek() ]\n          });\n\n          this.input = \"\";\n        }\n\n        continue;\n      }\n\n      switch (token.type) {\n      case Token.StringLiteral:\n        this.triggerAsync(\"String\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value,\n          quote: token.quote\n        }, checks, function() { return true; });\n\n        return create(\"(string)\", token.value, null, token);\n\n      case Token.TemplateHead:\n        this.trigger(\"TemplateHead\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template)\", token.value, null, token);\n\n      case Token.TemplateMiddle:\n        this.trigger(\"TemplateMiddle\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template middle)\", token.value, null, token);\n\n      case Token.TemplateTail:\n        this.trigger(\"TemplateTail\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template tail)\", token.value, null, token);\n\n      case Token.NoSubstTemplate:\n        this.trigger(\"NoSubstTemplate\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(no subst template)\", token.value, null, token);\n\n      case Token.Identifier:\n        this.triggerAsync(\"Identifier\", {\n          line: this.line,\n          char: this.char,\n          from: this.form,\n          name: token.value,\n          raw_name: token.text,\n          isProperty: state.tokens.curr.id === \".\"\n        }, checks, function() { return true; });\n      case Token.Keyword:\n      case Token.NullLiteral:\n      case Token.BooleanLiteral:\n        return create(\"(identifier)\", token.value, state.tokens.curr.id === \".\", token);\n\n      case Token.NumericLiteral:\n        if (token.isMalformed) {\n          this.trigger(\"warning\", {\n            code: \"W045\",\n            line: this.line,\n            character: this.char,\n            data: [ token.value ]\n          });\n        }\n\n        this.triggerAsync(\"warning\", {\n          code: \"W114\",\n          line: this.line,\n          character: this.char,\n          data: [ \"0x-\" ]\n        }, checks, function() { return token.base === 16 && state.jsonMode; });\n\n        this.triggerAsync(\"warning\", {\n          code: \"W115\",\n          line: this.line,\n          character: this.char\n        }, checks, function() {\n          return state.isStrict() && token.base === 8 && token.isLegacy;\n        });\n\n        this.trigger(\"Number\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          value: token.value,\n          base: token.base,\n          isMalformed: token.malformed\n        });\n\n        return create(\"(number)\", token.value);\n\n      case Token.RegExp:\n        return create(\"(regexp)\", token.value);\n\n      case Token.Comment:\n        state.tokens.curr.comment = true;\n\n        if (token.isSpecial) {\n          return {\n            id: '(comment)',\n            value: token.value,\n            body: token.body,\n            type: token.commentType,\n            isSpecial: token.isSpecial,\n            line: this.line,\n            character: this.char,\n            from: this.from\n          };\n        }\n\n        break;\n\n      case \"\":\n        break;\n\n      default:\n        return create(\"(punctuator)\", token.value);\n      }\n    }\n  }\n};\n\nexports.Lexer = Lexer;\nexports.Context = Context;\n\n},{\"../data/ascii-identifier-data.js\":\"/node_modules/jshint/data/ascii-identifier-data.js\",\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/messages.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _ = _dereq_(\"../lodash\");\n\nvar errors = {\n  E001: \"Bad option: '{a}'.\",\n  E002: \"Bad option value.\",\n  E003: \"Expected a JSON value.\",\n  E004: \"Input is neither a string nor an array of strings.\",\n  E005: \"Input is empty.\",\n  E006: \"Unexpected early end of program.\",\n  E007: \"Missing \\\"use strict\\\" statement.\",\n  E008: \"Strict violation.\",\n  E009: \"Option 'validthis' can't be used in a global scope.\",\n  E010: \"'with' is not allowed in strict mode.\",\n  E011: \"'{a}' has already been declared.\",\n  E012: \"const '{a}' is initialized to 'undefined'.\",\n  E013: \"Attempting to override '{a}' which is a constant.\",\n  E014: \"A regular expression literal can be confused with '/='.\",\n  E015: \"Unclosed regular expression.\",\n  E016: \"Invalid regular expression.\",\n  E017: \"Unclosed comment.\",\n  E018: \"Unbegun comment.\",\n  E019: \"Unmatched '{a}'.\",\n  E020: \"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.\",\n  E021: \"Expected '{a}' and instead saw '{b}'.\",\n  E022: \"Line breaking error '{a}'.\",\n  E023: \"Missing '{a}'.\",\n  E024: \"Unexpected '{a}'.\",\n  E025: \"Missing ':' on a case clause.\",\n  E026: \"Missing '}' to match '{' from line {a}.\",\n  E027: \"Missing ']' to match '[' from line {a}.\",\n  E028: \"Illegal comma.\",\n  E029: \"Unclosed string.\",\n  E030: \"Expected an identifier and instead saw '{a}'.\",\n  E031: \"Bad assignment.\", // FIXME: Rephrase\n  E032: \"Expected a small integer or 'false' and instead saw '{a}'.\",\n  E033: \"Expected an operator and instead saw '{a}'.\",\n  E034: \"get/set are ES5 features.\",\n  E035: \"Missing property name.\",\n  E036: \"Expected to see a statement and instead saw a block.\",\n  E037: null,\n  E038: null,\n  E039: \"Function declarations are not invocable. Wrap the whole function invocation in parens.\",\n  E040: \"Each value should have its own case label.\",\n  E041: \"Unrecoverable syntax error.\",\n  E042: \"Stopping.\",\n  E043: \"Too many errors.\",\n  E044: null,\n  E045: \"Invalid for each loop.\",\n  E046: \"A yield statement shall be within a generator function (with syntax: `function*`)\",\n  E047: null,\n  E048: \"{a} declaration not directly within block.\",\n  E049: \"A {a} cannot be named '{b}'.\",\n  E050: \"Mozilla requires the yield expression to be parenthesized here.\",\n  E051: null,\n  E052: \"Unclosed template literal.\",\n  E053: \"Export declaration must be in global scope.\",\n  E054: \"Class properties must be methods. Expected '(' but instead saw '{a}'.\",\n  E055: \"The '{a}' option cannot be set after any executable code.\",\n  E056: \"'{a}' was used before it was declared, which is illegal for '{b}' variables.\",\n  E057: \"Invalid meta property: '{a}.{b}'.\",\n  E058: \"Missing semicolon.\"\n};\n\nvar warnings = {\n  W001: \"'hasOwnProperty' is a really bad name.\",\n  W002: \"Value of '{a}' may be overwritten in IE 8 and earlier.\",\n  W003: \"'{a}' was used before it was defined.\",\n  W004: \"'{a}' is already defined.\",\n  W005: \"A dot following a number can be confused with a decimal point.\",\n  W006: \"Confusing minuses.\",\n  W007: \"Confusing plusses.\",\n  W008: \"A leading decimal point can be confused with a dot: '{a}'.\",\n  W009: \"The array literal notation [] is preferable.\",\n  W010: \"The object literal notation {} is preferable.\",\n  W011: null,\n  W012: null,\n  W013: null,\n  W014: \"Bad line breaking before '{a}'.\",\n  W015: null,\n  W016: \"Unexpected use of '{a}'.\",\n  W017: \"Bad operand.\",\n  W018: \"Confusing use of '{a}'.\",\n  W019: \"Use the isNaN function to compare with NaN.\",\n  W020: \"Read only.\",\n  W021: \"Reassignment of '{a}', which is is a {b}. \" +\n    \"Use 'var' or 'let' to declare bindings that may change.\",\n  W022: \"Do not assign to the exception parameter.\",\n  W023: \"Expected an identifier in an assignment and instead saw a function invocation.\",\n  W024: \"Expected an identifier and instead saw '{a}' (a reserved word).\",\n  W025: \"Missing name in function declaration.\",\n  W026: \"Inner functions should be listed at the top of the outer function.\",\n  W027: \"Unreachable '{a}' after '{b}'.\",\n  W028: \"Label '{a}' on {b} statement.\",\n  W030: \"Expected an assignment or function call and instead saw an expression.\",\n  W031: \"Do not use 'new' for side effects.\",\n  W032: \"Unnecessary semicolon.\",\n  W033: \"Missing semicolon.\",\n  W034: \"Unnecessary directive \\\"{a}\\\".\",\n  W035: \"Empty block.\",\n  W036: \"Unexpected /*member '{a}'.\",\n  W037: \"'{a}' is a statement label.\",\n  W038: \"'{a}' used out of scope.\",\n  W039: \"'{a}' is not allowed.\",\n  W040: \"Possible strict violation.\",\n  W041: \"Use '{a}' to compare with '{b}'.\",\n  W042: \"Avoid EOL escaping.\",\n  W043: \"Bad escaping of EOL. Use option multistr if needed.\",\n  W044: \"Bad or unnecessary escaping.\", /* TODO(caitp): remove W044 */\n  W045: \"Bad number '{a}'.\",\n  W046: \"Don't use extra leading zeros '{a}'.\",\n  W047: \"A trailing decimal point can be confused with a dot: '{a}'.\",\n  W048: \"Unexpected control character in regular expression.\",\n  W049: \"Unexpected escaped character '{a}' in regular expression.\",\n  W050: \"JavaScript URL.\",\n  W051: \"Variables should not be deleted.\",\n  W052: \"Unexpected '{a}'.\",\n  W053: \"Do not use {a} as a constructor.\",\n  W054: \"The Function constructor is a form of eval.\",\n  W055: \"A constructor name should start with an uppercase letter.\",\n  W056: \"Bad constructor.\",\n  W057: \"Weird construction. Is 'new' necessary?\",\n  W058: \"Missing '()' invoking a constructor.\",\n  W059: \"Avoid arguments.{a}.\",\n  W060: \"document.write can be a form of eval.\",\n  W061: \"eval can be harmful.\",\n  W062: \"Wrap an immediate function invocation in parens \" +\n    \"to assist the reader in understanding that the expression \" +\n    \"is the result of a function, and not the function itself.\",\n  W063: \"Math is not a function.\",\n  W064: \"Missing 'new' prefix when invoking a constructor.\",\n  W065: \"Missing radix parameter.\",\n  W066: \"Implied eval. Consider passing a function instead of a string.\",\n  W067: \"Bad invocation.\",\n  W068: \"Wrapping non-IIFE function literals in parens is unnecessary.\",\n  W069: \"['{a}'] is better written in dot notation.\",\n  W070: \"Extra comma. (it breaks older versions of IE)\",\n  W071: \"This function has too many statements. ({a})\",\n  W072: \"This function has too many parameters. ({a})\",\n  W073: \"Blocks are nested too deeply. ({a})\",\n  W074: \"This function's cyclomatic complexity is too high. ({a})\",\n  W075: \"Duplicate {a} '{b}'.\",\n  W076: \"Unexpected parameter '{a}' in get {b} function.\",\n  W077: \"Expected a single parameter in set {a} function.\",\n  W078: \"Setter is defined without getter.\",\n  W079: \"Redefinition of '{a}'.\",\n  W080: \"It's not necessary to initialize '{a}' to 'undefined'.\",\n  W081: null,\n  W082: \"Function declarations should not be placed in blocks. \" +\n    \"Use a function expression or move the statement to the top of \" +\n    \"the outer function.\",\n  W083: \"Don't make functions within a loop.\",\n  W084: \"Assignment in conditional expression\",\n  W085: \"Don't use 'with'.\",\n  W086: \"Expected a 'break' statement before '{a}'.\",\n  W087: \"Forgotten 'debugger' statement?\",\n  W088: \"Creating global 'for' variable. Should be 'for (var {a} ...'.\",\n  W089: \"The body of a for in should be wrapped in an if statement to filter \" +\n    \"unwanted properties from the prototype.\",\n  W090: \"'{a}' is not a statement label.\",\n  W091: null,\n  W093: \"Did you mean to return a conditional instead of an assignment?\",\n  W094: \"Unexpected comma.\",\n  W095: \"Expected a string and instead saw {a}.\",\n  W096: \"The '{a}' key may produce unexpected results.\",\n  W097: \"Use the function form of \\\"use strict\\\".\",\n  W098: \"'{a}' is defined but never used.\",\n  W099: null,\n  W100: \"This character may get silently deleted by one or more browsers.\",\n  W101: \"Line is too long.\",\n  W102: null,\n  W103: \"The '{a}' property is deprecated.\",\n  W104: \"'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).\",\n  W105: \"Unexpected {a} in '{b}'.\",\n  W106: \"Identifier '{a}' is not in camel case.\",\n  W107: \"Script URL.\",\n  W108: \"Strings must use doublequote.\",\n  W109: \"Strings must use singlequote.\",\n  W110: \"Mixed double and single quotes.\",\n  W112: \"Unclosed string.\",\n  W113: \"Control character in string: {a}.\",\n  W114: \"Avoid {a}.\",\n  W115: \"Octal literals are not allowed in strict mode.\",\n  W116: \"Expected '{a}' and instead saw '{b}'.\",\n  W117: \"'{a}' is not defined.\",\n  W118: \"'{a}' is only available in Mozilla JavaScript extensions (use moz option).\",\n  W119: \"'{a}' is only available in ES{b} (use 'esversion: {b}').\",\n  W120: \"You might be leaking a variable ({a}) here.\",\n  W121: \"Extending prototype of native object: '{a}'.\",\n  W122: \"Invalid typeof value '{a}'\",\n  W123: \"'{a}' is already defined in outer scope.\",\n  W124: \"A generator function shall contain a yield statement.\",\n  W125: \"This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp\",\n  W126: \"Unnecessary grouping operator.\",\n  W127: \"Unexpected use of a comma operator.\",\n  W128: \"Empty array elements require elision=true.\",\n  W129: \"'{a}' is defined in a future version of JavaScript. Use a \" +\n    \"different variable name to avoid migration issues.\",\n  W130: \"Invalid element after rest element.\",\n  W131: \"Invalid parameter after rest parameter.\",\n  W132: \"`var` declarations are forbidden. Use `let` or `const` instead.\",\n  W133: \"Invalid for-{a} loop left-hand-side: {b}.\",\n  W134: \"The '{a}' option is only available when linting ECMAScript {b} code.\",\n  W135: \"{a} may not be supported by non-browser environments.\",\n  W136: \"'{a}' must be in function scope.\",\n  W137: \"Empty destructuring.\",\n  W138: \"Regular parameters should not come after default parameters.\"\n};\n\nvar info = {\n  I001: \"Comma warnings can be turned off with 'laxcomma'.\",\n  I002: null,\n  I003: \"ES5 option is now set per default\"\n};\n\nexports.errors = {};\nexports.warnings = {};\nexports.info = {};\n\n_.each(errors, function(desc, code) {\n  exports.errors[code] = { code: code, desc: desc };\n});\n\n_.each(warnings, function(desc, code) {\n  exports.warnings[code] = { code: code, desc: desc };\n});\n\n_.each(info, function(desc, code) {\n  exports.info[code] = { code: code, desc: desc };\n});\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\"}],\"/node_modules/jshint/src/name-stack.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction NameStack() {\n  this._stack = [];\n}\n\nObject.defineProperty(NameStack.prototype, \"length\", {\n  get: function() {\n    return this._stack.length;\n  }\n});\nNameStack.prototype.push = function() {\n  this._stack.push(null);\n};\nNameStack.prototype.pop = function() {\n  this._stack.pop();\n};\nNameStack.prototype.set = function(token) {\n  this._stack[this.length - 1] = token;\n};\nNameStack.prototype.infer = function() {\n  var nameToken = this._stack[this.length - 1];\n  var prefix = \"\";\n  var type;\n  if (!nameToken || nameToken.type === \"class\") {\n    nameToken = this._stack[this.length - 2];\n  }\n\n  if (!nameToken) {\n    return \"(empty)\";\n  }\n\n  type = nameToken.type;\n\n  if (type !== \"(string)\" && type !== \"(number)\" && type !== \"(identifier)\" && type !== \"default\") {\n    return \"(expression)\";\n  }\n\n  if (nameToken.accessorType) {\n    prefix = nameToken.accessorType + \" \";\n  }\n\n  return prefix + nameToken.value;\n};\n\nmodule.exports = NameStack;\n\n},{}],\"/node_modules/jshint/src/options.js\":[function(_dereq_,module,exports){\n\"use strict\";\nexports.bool = {\n  enforcing: {\n    bitwise     : true,\n    freeze      : true,\n    camelcase   : true,\n    curly       : true,\n    eqeqeq      : true,\n    futurehostile: true,\n    notypeof    : true,\n    es3         : true,\n    es5         : true,\n    forin       : true,\n    funcscope   : true,\n    immed       : true,\n    iterator    : true,\n    newcap      : true,\n    noarg       : true,\n    nocomma     : true,\n    noempty     : true,\n    nonbsp      : true,\n    nonew       : true,\n    undef       : true,\n    singleGroups: false,\n    varstmt: false,\n    enforceall : false\n  },\n  relaxing: {\n    asi         : true,\n    multistr    : true,\n    debug       : true,\n    boss        : true,\n    evil        : true,\n    globalstrict: true,\n    plusplus    : true,\n    proto       : true,\n    scripturl   : true,\n    sub         : true,\n    supernew    : true,\n    laxbreak    : true,\n    laxcomma    : true,\n    validthis   : true,\n    withstmt    : true,\n    moz         : true,\n    noyield     : true,\n    eqnull      : true,\n    lastsemic   : true,\n    loopfunc    : true,\n    expr        : true,\n    esnext      : true,\n    elision     : true,\n  },\n  environments: {\n    mootools    : true,\n    couch       : true,\n    jasmine     : true,\n    jquery      : true,\n    node        : true,\n    qunit       : true,\n    rhino       : true,\n    shelljs     : true,\n    prototypejs : true,\n    yui         : true,\n    mocha       : true,\n    module      : true,\n    wsh         : true,\n    worker      : true,\n    nonstandard : true,\n    browser     : true,\n    browserify  : true,\n    devel       : true,\n    dojo        : true,\n    typed       : true,\n    phantom     : true\n  },\n  obsolete: {\n    onecase     : true, // if one case switch statements should be allowed\n    regexp      : true, // if the . should not be allowed in regexp literals\n    regexdash   : true  // if unescaped first/last dash (-) inside brackets\n  }\n};\nexports.val = {\n  maxlen       : false,\n  indent       : false,\n  maxerr       : false,\n  predef       : false,\n  globals      : false,\n  quotmark     : false,\n\n  scope        : false,\n  maxstatements: false,\n  maxdepth     : false,\n  maxparams    : false,\n  maxcomplexity: false,\n  shadow       : false,\n  strict      : true,\n  unused       : true,\n  latedef      : false,\n\n  ignore       : false, // start/end ignoring lines of code, bypassing the lexer\n\n  ignoreDelimiters: false, // array of start/end delimiters used to ignore\n  esversion: 5\n};\nexports.inverted = {\n  bitwise : true,\n  forin   : true,\n  newcap  : true,\n  plusplus: true,\n  regexp  : true,\n  undef   : true,\n  eqeqeq  : true,\n  strict  : true\n};\n\nexports.validNames = Object.keys(exports.val)\n  .concat(Object.keys(exports.bool.relaxing))\n  .concat(Object.keys(exports.bool.enforcing))\n  .concat(Object.keys(exports.bool.obsolete))\n  .concat(Object.keys(exports.bool.environments));\nexports.renamed = {\n  eqeq   : \"eqeqeq\",\n  windows: \"wsh\",\n  sloppy : \"strict\"\n};\n\nexports.removed = {\n  nomen: true,\n  onevar: true,\n  passfail: true,\n  white: true,\n  gcl: true,\n  smarttabs: true,\n  trailing: true\n};\nexports.noenforceall = {\n  varstmt: true,\n  strict: true\n};\n\n},{}],\"/node_modules/jshint/src/reg.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\nexports.unsafeString =\n  /@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|&lt/i;\nexports.unsafeChars =\n  /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\nexports.needEsc =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n\nexports.needEscGlobal =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\nexports.starSlash = /\\*\\//;\nexports.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;\nexports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\nexports.fallsThrough = /^\\s*falls?\\sthrough\\s*$/;\nexports.maxlenException = /^(?:(?:\\/\\/|\\/\\*|\\*) ?)?[^ ]+$/;\n\n},{}],\"/node_modules/jshint/src/scope-manager.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _      = _dereq_(\"../lodash\");\nvar events = _dereq_(\"events\");\nvar marker = {};\nvar scopeManager = function(state, predefined, exported, declared) {\n\n  var _current;\n  var _scopeStack = [];\n\n  function _newScope(type) {\n    _current = {\n      \"(labels)\": Object.create(null),\n      \"(usages)\": Object.create(null),\n      \"(breakLabels)\": Object.create(null),\n      \"(parent)\": _current,\n      \"(type)\": type,\n      \"(params)\": (type === \"functionparams\" || type === \"catchparams\") ? [] : null\n    };\n    _scopeStack.push(_current);\n  }\n\n  _newScope(\"global\");\n  _current[\"(predefined)\"] = predefined;\n\n  var _currentFunctBody = _current; // this is the block after the params = function\n\n  var usedPredefinedAndGlobals = Object.create(null);\n  var impliedGlobals = Object.create(null);\n  var unuseds = [];\n  var emitter = new events.EventEmitter();\n\n  function warning(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function error(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function _setupUsages(labelName) {\n    if (!_current[\"(usages)\"][labelName]) {\n      _current[\"(usages)\"][labelName] = {\n        \"(modified)\": [],\n        \"(reassigned)\": [],\n        \"(tokens)\": []\n      };\n    }\n  }\n\n  var _getUnusedOption = function(unused_opt) {\n    if (unused_opt === undefined) {\n      unused_opt = state.option.unused;\n    }\n\n    if (unused_opt === true) {\n      unused_opt = \"last-param\";\n    }\n\n    return unused_opt;\n  };\n\n  var _warnUnused = function(name, tkn, type, unused_opt) {\n    var line = tkn.line;\n    var chr  = tkn.from;\n    var raw_name = tkn.raw_text || name;\n\n    unused_opt = _getUnusedOption(unused_opt);\n\n    var warnable_types = {\n      \"vars\": [\"var\"],\n      \"last-param\": [\"var\", \"param\"],\n      \"strict\": [\"var\", \"param\", \"last-param\"]\n    };\n\n    if (unused_opt) {\n      if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) {\n        warning(\"W098\", { line: line, from: chr }, raw_name);\n      }\n    }\n    if (unused_opt || type === \"var\") {\n      unuseds.push({\n        name: name,\n        line: line,\n        character: chr\n      });\n    }\n  };\n  function _checkForUnused() {\n    if (_current[\"(type)\"] === \"functionparams\") {\n      _checkParams();\n      return;\n    }\n    var curentLabels = _current[\"(labels)\"];\n    for (var labelName in curentLabels) {\n      if (curentLabels[labelName]) {\n        if (curentLabels[labelName][\"(type)\"] !== \"exception\" &&\n          curentLabels[labelName][\"(unused)\"]) {\n          _warnUnused(labelName, curentLabels[labelName][\"(token)\"], \"var\");\n        }\n      }\n    }\n  }\n  function _checkParams() {\n    var params = _current[\"(params)\"];\n\n    if (!params) {\n      return;\n    }\n\n    var param = params.pop();\n    var unused_opt;\n\n    while (param) {\n      var label = _current[\"(labels)\"][param];\n\n      unused_opt = _getUnusedOption(state.funct[\"(unusedOption)\"]);\n      if (param === \"undefined\")\n        return;\n\n      if (label[\"(unused)\"]) {\n        _warnUnused(param, label[\"(token)\"], \"param\", state.funct[\"(unusedOption)\"]);\n      } else if (unused_opt === \"last-param\") {\n        return;\n      }\n\n      param = params.pop();\n    }\n  }\n  function _getLabel(labelName) {\n    for (var i = _scopeStack.length - 1 ; i >= 0; --i) {\n      var scopeLabels = _scopeStack[i][\"(labels)\"];\n      if (scopeLabels[labelName]) {\n        return scopeLabels;\n      }\n    }\n  }\n\n  function usedSoFarInCurrentFunction(labelName) {\n    for (var i = _scopeStack.length - 1; i >= 0; i--) {\n      var current = _scopeStack[i];\n      if (current[\"(usages)\"][labelName]) {\n        return current[\"(usages)\"][labelName];\n      }\n      if (current === _currentFunctBody) {\n        break;\n      }\n    }\n    return false;\n  }\n\n  function _checkOuterShadow(labelName, token) {\n    if (state.option.shadow !== \"outer\") {\n      return;\n    }\n\n    var isGlobal = _currentFunctBody[\"(type)\"] === \"global\",\n      isNewFunction = _current[\"(type)\"] === \"functionparams\";\n\n    var outsideCurrentFunction = !isGlobal;\n    for (var i = 0; i < _scopeStack.length; i++) {\n      var stackItem = _scopeStack[i];\n\n      if (!isNewFunction && _scopeStack[i + 1] === _currentFunctBody) {\n        outsideCurrentFunction = false;\n      }\n      if (outsideCurrentFunction && stackItem[\"(labels)\"][labelName]) {\n        warning(\"W123\", token, labelName);\n      }\n      if (stackItem[\"(breakLabels)\"][labelName]) {\n        warning(\"W123\", token, labelName);\n      }\n    }\n  }\n\n  function _latedefWarning(type, labelName, token) {\n    if (state.option.latedef) {\n      if ((state.option.latedef === true && type === \"function\") ||\n        type !== \"function\") {\n        warning(\"W003\", token, labelName);\n      }\n    }\n  }\n\n  var scopeManagerInst = {\n\n    on: function(names, listener) {\n      names.split(\" \").forEach(function(name) {\n        emitter.on(name, listener);\n      });\n    },\n\n    isPredefined: function(labelName) {\n      return !this.has(labelName) && _.has(_scopeStack[0][\"(predefined)\"], labelName);\n    },\n    stack: function(type) {\n      var previousScope = _current;\n      _newScope(type);\n\n      if (!type && previousScope[\"(type)\"] === \"functionparams\") {\n\n        _current[\"(isFuncBody)\"] = true;\n        _current[\"(context)\"] = _currentFunctBody;\n        _currentFunctBody = _current;\n      }\n    },\n\n    unstack: function() {\n      var subScope = _scopeStack.length > 1 ? _scopeStack[_scopeStack.length - 2] : null;\n      var isUnstackingFunctionBody = _current === _currentFunctBody,\n        isUnstackingFunctionParams = _current[\"(type)\"] === \"functionparams\",\n        isUnstackingFunctionOuter = _current[\"(type)\"] === \"functionouter\";\n\n      var i, j;\n      var currentUsages = _current[\"(usages)\"];\n      var currentLabels = _current[\"(labels)\"];\n      var usedLabelNameList = Object.keys(currentUsages);\n\n      if (currentUsages.__proto__ && usedLabelNameList.indexOf(\"__proto__\") === -1) {\n        usedLabelNameList.push(\"__proto__\");\n      }\n\n      for (i = 0; i < usedLabelNameList.length; i++) {\n        var usedLabelName = usedLabelNameList[i];\n\n        var usage = currentUsages[usedLabelName];\n        var usedLabel = currentLabels[usedLabelName];\n        if (usedLabel) {\n          var usedLabelType = usedLabel[\"(type)\"];\n\n          if (usedLabel[\"(useOutsideOfScope)\"] && !state.option.funcscope) {\n            var usedTokens = usage[\"(tokens)\"];\n            if (usedTokens) {\n              for (j = 0; j < usedTokens.length; j++) {\n                if (usedLabel[\"(function)\"] === usedTokens[j][\"(function)\"]) {\n                  error(\"W038\", usedTokens[j], usedLabelName);\n                }\n              }\n            }\n          }\n          _current[\"(labels)\"][usedLabelName][\"(unused)\"] = false;\n          if (usedLabelType === \"const\" && usage[\"(modified)\"]) {\n            for (j = 0; j < usage[\"(modified)\"].length; j++) {\n              error(\"E013\", usage[\"(modified)\"][j], usedLabelName);\n            }\n          }\n          if ((usedLabelType === \"function\" || usedLabelType === \"class\") &&\n              usage[\"(reassigned)\"]) {\n            for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n              error(\"W021\", usage[\"(reassigned)\"][j], usedLabelName, usedLabelType);\n            }\n          }\n          continue;\n        }\n\n        if (isUnstackingFunctionOuter) {\n          state.funct[\"(isCapturing)\"] = true;\n        }\n\n        if (subScope) {\n          if (!subScope[\"(usages)\"][usedLabelName]) {\n            subScope[\"(usages)\"][usedLabelName] = usage;\n            if (isUnstackingFunctionBody) {\n              subScope[\"(usages)\"][usedLabelName][\"(onlyUsedSubFunction)\"] = true;\n            }\n          } else {\n            var subScopeUsage = subScope[\"(usages)\"][usedLabelName];\n            subScopeUsage[\"(modified)\"] = subScopeUsage[\"(modified)\"].concat(usage[\"(modified)\"]);\n            subScopeUsage[\"(tokens)\"] = subScopeUsage[\"(tokens)\"].concat(usage[\"(tokens)\"]);\n            subScopeUsage[\"(reassigned)\"] =\n              subScopeUsage[\"(reassigned)\"].concat(usage[\"(reassigned)\"]);\n            subScopeUsage[\"(onlyUsedSubFunction)\"] = false;\n          }\n        } else {\n          if (typeof _current[\"(predefined)\"][usedLabelName] === \"boolean\") {\n            delete declared[usedLabelName];\n            usedPredefinedAndGlobals[usedLabelName] = marker;\n            if (_current[\"(predefined)\"][usedLabelName] === false && usage[\"(reassigned)\"]) {\n              for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n                warning(\"W020\", usage[\"(reassigned)\"][j]);\n              }\n            }\n          }\n          else {\n            if (usage[\"(tokens)\"]) {\n              for (j = 0; j < usage[\"(tokens)\"].length; j++) {\n                var undefinedToken = usage[\"(tokens)\"][j];\n                if (!undefinedToken.forgiveUndef) {\n                  if (state.option.undef && !undefinedToken.ignoreUndef) {\n                    warning(\"W117\", undefinedToken, usedLabelName);\n                  }\n                  if (impliedGlobals[usedLabelName]) {\n                    impliedGlobals[usedLabelName].line.push(undefinedToken.line);\n                  } else {\n                    impliedGlobals[usedLabelName] = {\n                      name: usedLabelName,\n                      line: [undefinedToken.line]\n                    };\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n      if (!subScope) {\n        Object.keys(declared)\n          .forEach(function(labelNotUsed) {\n            _warnUnused(labelNotUsed, declared[labelNotUsed], \"var\");\n          });\n      }\n      if (subScope && !isUnstackingFunctionBody &&\n        !isUnstackingFunctionParams && !isUnstackingFunctionOuter) {\n        var labelNames = Object.keys(currentLabels);\n        for (i = 0; i < labelNames.length; i++) {\n\n          var defLabelName = labelNames[i];\n          if (!currentLabels[defLabelName][\"(blockscoped)\"] &&\n            currentLabels[defLabelName][\"(type)\"] !== \"exception\" &&\n            !this.funct.has(defLabelName, { excludeCurrent: true })) {\n            subScope[\"(labels)\"][defLabelName] = currentLabels[defLabelName];\n            if (_currentFunctBody[\"(type)\"] !== \"global\") {\n              subScope[\"(labels)\"][defLabelName][\"(useOutsideOfScope)\"] = true;\n            }\n            delete currentLabels[defLabelName];\n          }\n        }\n      }\n\n      _checkForUnused();\n\n      _scopeStack.pop();\n      if (isUnstackingFunctionBody) {\n        _currentFunctBody = _scopeStack[_.findLastIndex(_scopeStack, function(scope) {\n          return scope[\"(isFuncBody)\"] || scope[\"(type)\"] === \"global\";\n        })];\n      }\n\n      _current = subScope;\n    },\n    addParam: function(labelName, token, type) {\n      type = type || \"param\";\n\n      if (type === \"exception\") {\n        var previouslyDefinedLabelType = this.funct.labeltype(labelName);\n        if (previouslyDefinedLabelType && previouslyDefinedLabelType !== \"exception\") {\n          if (!state.option.node) {\n            warning(\"W002\", state.tokens.next, labelName);\n          }\n        }\n      }\n      if (_.has(_current[\"(labels)\"], labelName)) {\n        _current[\"(labels)\"][labelName].duplicated = true;\n      } else {\n        _checkOuterShadow(labelName, token, type);\n\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": token,\n          \"(unused)\": true };\n\n        _current[\"(params)\"].push(labelName);\n      }\n\n      if (_.has(_current[\"(usages)\"], labelName)) {\n        var usage = _current[\"(usages)\"][labelName];\n        if (usage[\"(onlyUsedSubFunction)\"]) {\n          _latedefWarning(type, labelName, token);\n        } else {\n          warning(\"E056\", token, labelName, type);\n        }\n      }\n    },\n\n    validateParams: function() {\n      if (_currentFunctBody[\"(type)\"] === \"global\") {\n        return;\n      }\n\n      var isStrict = state.isStrict();\n      var currentFunctParamScope = _currentFunctBody[\"(parent)\"];\n\n      if (!currentFunctParamScope[\"(params)\"]) {\n        return;\n      }\n\n      currentFunctParamScope[\"(params)\"].forEach(function(labelName) {\n        var label = currentFunctParamScope[\"(labels)\"][labelName];\n\n        if (label && label.duplicated) {\n          if (isStrict) {\n            warning(\"E011\", label[\"(token)\"], labelName);\n          } else if (state.option.shadow !== true) {\n            warning(\"W004\", label[\"(token)\"], labelName);\n          }\n        }\n      });\n    },\n\n    getUsedOrDefinedGlobals: function() {\n      var list = Object.keys(usedPredefinedAndGlobals);\n      if (usedPredefinedAndGlobals.__proto__ === marker &&\n        list.indexOf(\"__proto__\") === -1) {\n        list.push(\"__proto__\");\n      }\n\n      return list;\n    },\n    getImpliedGlobals: function() {\n      var values = _.values(impliedGlobals);\n      var hasProto = false;\n      if (impliedGlobals.__proto__) {\n        hasProto = values.some(function(value) {\n          return value.name === \"__proto__\";\n        });\n\n        if (!hasProto) {\n          values.push(impliedGlobals.__proto__);\n        }\n      }\n\n      return values;\n    },\n    getUnuseds: function() {\n      return unuseds;\n    },\n\n    has: function(labelName) {\n      return Boolean(_getLabel(labelName));\n    },\n\n    labeltype: function(labelName) {\n      var scopeLabels = _getLabel(labelName);\n      if (scopeLabels) {\n        return scopeLabels[labelName][\"(type)\"];\n      }\n      return null;\n    },\n    addExported: function(labelName) {\n      var globalLabels = _scopeStack[0][\"(labels)\"];\n      if (_.has(declared, labelName)) {\n        delete declared[labelName];\n      } else if (_.has(globalLabels, labelName)) {\n        globalLabels[labelName][\"(unused)\"] = false;\n      } else {\n        for (var i = 1; i < _scopeStack.length; i++) {\n          var scope = _scopeStack[i];\n          if (!scope[\"(type)\"]) {\n            if (_.has(scope[\"(labels)\"], labelName) &&\n                !scope[\"(labels)\"][labelName][\"(blockscoped)\"]) {\n              scope[\"(labels)\"][labelName][\"(unused)\"] = false;\n              return;\n            }\n          } else {\n            break;\n          }\n        }\n        exported[labelName] = true;\n      }\n    },\n    setExported: function(labelName, token) {\n      this.block.use(labelName, token);\n    },\n    addlabel: function(labelName, opts) {\n\n      var type  = opts.type;\n      var token = opts.token;\n      var isblockscoped = type === \"let\" || type === \"const\" || type === \"class\";\n      var isexported    = (isblockscoped ? _current : _currentFunctBody)[\"(type)\"] === \"global\" &&\n                          _.has(exported, labelName);\n      _checkOuterShadow(labelName, token, type);\n      if (isblockscoped) {\n\n        var declaredInCurrentScope = _current[\"(labels)\"][labelName];\n        if (!declaredInCurrentScope && _current === _currentFunctBody &&\n          _current[\"(type)\"] !== \"global\") {\n          declaredInCurrentScope = !!_currentFunctBody[\"(parent)\"][\"(labels)\"][labelName];\n        }\n        if (!declaredInCurrentScope && _current[\"(usages)\"][labelName]) {\n          var usage = _current[\"(usages)\"][labelName];\n          if (usage[\"(onlyUsedSubFunction)\"]) {\n            _latedefWarning(type, labelName, token);\n          } else {\n            warning(\"E056\", token, labelName, type);\n          }\n        }\n        if (declaredInCurrentScope) {\n          warning(\"E011\", token, labelName);\n        }\n        else if (state.option.shadow === \"outer\") {\n          if (scopeManagerInst.funct.has(labelName)) {\n            warning(\"W004\", token, labelName);\n          }\n        }\n\n        scopeManagerInst.block.add(labelName, type, token, !isexported);\n\n      } else {\n\n        var declaredInCurrentFunctionScope = scopeManagerInst.funct.has(labelName);\n        if (!declaredInCurrentFunctionScope && usedSoFarInCurrentFunction(labelName)) {\n          _latedefWarning(type, labelName, token);\n        }\n        if (scopeManagerInst.funct.has(labelName, { onlyBlockscoped: true })) {\n          warning(\"E011\", token, labelName);\n        } else if (state.option.shadow !== true) {\n          if (declaredInCurrentFunctionScope && labelName !== \"__proto__\") {\n            if (_currentFunctBody[\"(type)\"] !== \"global\") {\n              warning(\"W004\", token, labelName);\n            }\n          }\n        }\n\n        scopeManagerInst.funct.add(labelName, type, token, !isexported);\n\n        if (_currentFunctBody[\"(type)\"] === \"global\") {\n          usedPredefinedAndGlobals[labelName] = marker;\n        }\n      }\n    },\n\n    funct: {\n      labeltype: function(labelName, options) {\n        var onlyBlockscoped = options && options.onlyBlockscoped;\n        var excludeParams = options && options.excludeParams;\n        var currentScopeIndex = _scopeStack.length - (options && options.excludeCurrent ? 2 : 1);\n        for (var i = currentScopeIndex; i >= 0; i--) {\n          var current = _scopeStack[i];\n          if (current[\"(labels)\"][labelName] &&\n            (!onlyBlockscoped || current[\"(labels)\"][labelName][\"(blockscoped)\"])) {\n            return current[\"(labels)\"][labelName][\"(type)\"];\n          }\n          var scopeCheck = excludeParams ? _scopeStack[ i - 1 ] : current;\n          if (scopeCheck && scopeCheck[\"(type)\"] === \"functionparams\") {\n            return null;\n          }\n        }\n        return null;\n      },\n      hasBreakLabel: function(labelName) {\n        for (var i = _scopeStack.length - 1; i >= 0; i--) {\n          var current = _scopeStack[i];\n\n          if (current[\"(breakLabels)\"][labelName]) {\n            return true;\n          }\n          if (current[\"(type)\"] === \"functionparams\") {\n            return false;\n          }\n        }\n        return false;\n      },\n      has: function(labelName, options) {\n        return Boolean(this.labeltype(labelName, options));\n      },\n      add: function(labelName, type, tok, unused) {\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(blockscoped)\": false,\n          \"(function)\": _currentFunctBody,\n          \"(unused)\": unused };\n      }\n    },\n\n    block: {\n      isGlobal: function() {\n        return _current[\"(type)\"] === \"global\";\n      },\n\n      use: function(labelName, token) {\n        var paramScope = _currentFunctBody[\"(parent)\"];\n        if (paramScope && paramScope[\"(labels)\"][labelName] &&\n          paramScope[\"(labels)\"][labelName][\"(type)\"] === \"param\") {\n          if (!scopeManagerInst.funct.has(labelName,\n                { excludeParams: true, onlyBlockscoped: true })) {\n            paramScope[\"(labels)\"][labelName][\"(unused)\"] = false;\n          }\n        }\n\n        if (token && (state.ignored.W117 || state.option.undef === false)) {\n          token.ignoreUndef = true;\n        }\n\n        _setupUsages(labelName);\n\n        if (token) {\n          token[\"(function)\"] = _currentFunctBody;\n          _current[\"(usages)\"][labelName][\"(tokens)\"].push(token);\n        }\n      },\n\n      reassign: function(labelName, token) {\n\n        this.modify(labelName, token);\n\n        _current[\"(usages)\"][labelName][\"(reassigned)\"].push(token);\n      },\n\n      modify: function(labelName, token) {\n\n        _setupUsages(labelName);\n\n        _current[\"(usages)\"][labelName][\"(modified)\"].push(token);\n      },\n      add: function(labelName, type, tok, unused) {\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(blockscoped)\": true,\n          \"(unused)\": unused };\n      },\n\n      addBreakLabel: function(labelName, opts) {\n        var token = opts.token;\n        if (scopeManagerInst.funct.hasBreakLabel(labelName)) {\n          warning(\"E011\", token, labelName);\n        }\n        else if (state.option.shadow === \"outer\") {\n          if (scopeManagerInst.funct.has(labelName)) {\n            warning(\"W004\", token, labelName);\n          } else {\n            _checkOuterShadow(labelName, token);\n          }\n        }\n        _current[\"(breakLabels)\"][labelName] = token;\n      }\n    }\n  };\n  return scopeManagerInst;\n};\n\nmodule.exports = scopeManager;\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/state.js\":[function(_dereq_,module,exports){\n\"use strict\";\nvar NameStack = _dereq_(\"./name-stack.js\");\n\nvar state = {\n  syntax: {},\n  isStrict: function() {\n    return this.directive[\"use strict\"] || this.inClassBody ||\n      this.option.module || this.option.strict === \"implied\";\n  },\n\n  inMoz: function() {\n    return this.option.moz;\n  },\n  inES6: function() {\n    return this.option.moz || this.option.esversion >= 6;\n  },\n  inES5: function(strict) {\n    if (strict) {\n      return (!this.option.esversion || this.option.esversion === 5) && !this.option.moz;\n    }\n    return !this.option.esversion || this.option.esversion >= 5 || this.option.moz;\n  },\n\n\n  reset: function() {\n    this.tokens = {\n      prev: null,\n      next: null,\n      curr: null\n    };\n\n    this.option = {};\n    this.funct = null;\n    this.ignored = {};\n    this.directive = {};\n    this.jsonMode = false;\n    this.jsonWarnings = [];\n    this.lines = [];\n    this.tab = \"\";\n    this.cache = {}; // Node.JS doesn't have Map. Sniff.\n    this.ignoredLines = {};\n    this.forinifcheckneeded = false;\n    this.nameStack = new NameStack();\n    this.inClassBody = false;\n  }\n};\n\nexports.state = state;\n\n},{\"./name-stack.js\":\"/node_modules/jshint/src/name-stack.js\"}],\"/node_modules/jshint/src/style.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.register = function(linter) {\n\n  linter.on(\"Identifier\", function style_scanProto(data) {\n    if (linter.getOption(\"proto\")) {\n      return;\n    }\n\n    if (data.name === \"__proto__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name, \"6\" ]\n      });\n    }\n  });\n\n  linter.on(\"Identifier\", function style_scanIterator(data) {\n    if (linter.getOption(\"iterator\")) {\n      return;\n    }\n\n    if (data.name === \"__iterator__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  linter.on(\"Identifier\", function style_scanCamelCase(data) {\n    if (!linter.getOption(\"camelcase\")) {\n      return;\n    }\n\n    if (data.name.replace(/^_+|_+$/g, \"\").indexOf(\"_\") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) {\n      linter.warn(\"W106\", {\n        line: data.line,\n        char: data.from,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  linter.on(\"String\", function style_scanQuotes(data) {\n    var quotmark = linter.getOption(\"quotmark\");\n    var code;\n\n    if (!quotmark) {\n      return;\n    }\n\n    if (quotmark === \"single\" && data.quote !== \"'\") {\n      code = \"W109\";\n    }\n\n    if (quotmark === \"double\" && data.quote !== \"\\\"\") {\n      code = \"W108\";\n    }\n\n    if (quotmark === true) {\n      if (!linter.getCache(\"quotmark\")) {\n        linter.setCache(\"quotmark\", data.quote);\n      }\n\n      if (linter.getCache(\"quotmark\") !== data.quote) {\n        code = \"W110\";\n      }\n    }\n\n    if (code) {\n      linter.warn(code, {\n        line: data.line,\n        char: data.char,\n      });\n    }\n  });\n\n  linter.on(\"Number\", function style_scanNumbers(data) {\n    if (data.value.charAt(0) === \".\") {\n      linter.warn(\"W008\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (data.value.substr(data.value.length - 1) === \".\") {\n      linter.warn(\"W047\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (/^00+/.test(data.value)) {\n      linter.warn(\"W046\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n  });\n\n  linter.on(\"String\", function style_scanJavaScriptURLs(data) {\n    var re = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\n\n    if (linter.getOption(\"scripturl\")) {\n      return;\n    }\n\n    if (re.test(data.value)) {\n      linter.warn(\"W107\", {\n        line: data.line,\n        char: data.char\n      });\n    }\n  });\n};\n\n},{}],\"/node_modules/jshint/src/vars.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nexports.reservedVars = {\n  arguments : false,\n  NaN       : false\n};\n\nexports.ecmaIdentifiers = {\n  3: {\n    Array              : false,\n    Boolean            : false,\n    Date               : false,\n    decodeURI          : false,\n    decodeURIComponent : false,\n    encodeURI          : false,\n    encodeURIComponent : false,\n    Error              : false,\n    \"eval\"             : false,\n    EvalError          : false,\n    Function           : false,\n    hasOwnProperty     : false,\n    isFinite           : false,\n    isNaN              : false,\n    Math               : false,\n    Number             : false,\n    Object             : false,\n    parseInt           : false,\n    parseFloat         : false,\n    RangeError         : false,\n    ReferenceError     : false,\n    RegExp             : false,\n    String             : false,\n    SyntaxError        : false,\n    TypeError          : false,\n    URIError           : false\n  },\n  5: {\n    JSON               : false\n  },\n  6: {\n    Map                : false,\n    Promise            : false,\n    Proxy              : false,\n    Reflect            : false,\n    Set                : false,\n    Symbol             : false,\n    WeakMap            : false,\n    WeakSet            : false\n  }\n};\n\nexports.browser = {\n  Audio                : false,\n  Blob                 : false,\n  addEventListener     : false,\n  applicationCache     : false,\n  atob                 : false,\n  blur                 : false,\n  btoa                 : false,\n  cancelAnimationFrame : false,\n  CanvasGradient       : false,\n  CanvasPattern        : false,\n  CanvasRenderingContext2D: false,\n  CSS                  : false,\n  clearInterval        : false,\n  clearTimeout         : false,\n  close                : false,\n  closed               : false,\n  Comment              : false,\n  CustomEvent          : false,\n  DOMParser            : false,\n  defaultStatus        : false,\n  Document             : false,\n  document             : false,\n  DocumentFragment     : false,\n  Element              : false,\n  ElementTimeControl   : false,\n  Event                : false,\n  event                : false,\n  fetch                : false,\n  FileReader           : false,\n  FormData             : false,\n  focus                : false,\n  frames               : false,\n  getComputedStyle     : false,\n  HTMLElement          : false,\n  HTMLAnchorElement    : false,\n  HTMLBaseElement      : false,\n  HTMLBlockquoteElement: false,\n  HTMLBodyElement      : false,\n  HTMLBRElement        : false,\n  HTMLButtonElement    : false,\n  HTMLCanvasElement    : false,\n  HTMLCollection       : false,\n  HTMLDirectoryElement : false,\n  HTMLDivElement       : false,\n  HTMLDListElement     : false,\n  HTMLFieldSetElement  : false,\n  HTMLFontElement      : false,\n  HTMLFormElement      : false,\n  HTMLFrameElement     : false,\n  HTMLFrameSetElement  : false,\n  HTMLHeadElement      : false,\n  HTMLHeadingElement   : false,\n  HTMLHRElement        : false,\n  HTMLHtmlElement      : false,\n  HTMLIFrameElement    : false,\n  HTMLImageElement     : false,\n  HTMLInputElement     : false,\n  HTMLIsIndexElement   : false,\n  HTMLLabelElement     : false,\n  HTMLLayerElement     : false,\n  HTMLLegendElement    : false,\n  HTMLLIElement        : false,\n  HTMLLinkElement      : false,\n  HTMLMapElement       : false,\n  HTMLMenuElement      : false,\n  HTMLMetaElement      : false,\n  HTMLModElement       : false,\n  HTMLObjectElement    : false,\n  HTMLOListElement     : false,\n  HTMLOptGroupElement  : false,\n  HTMLOptionElement    : false,\n  HTMLParagraphElement : false,\n  HTMLParamElement     : false,\n  HTMLPreElement       : false,\n  HTMLQuoteElement     : false,\n  HTMLScriptElement    : false,\n  HTMLSelectElement    : false,\n  HTMLStyleElement     : false,\n  HTMLTableCaptionElement: false,\n  HTMLTableCellElement : false,\n  HTMLTableColElement  : false,\n  HTMLTableElement     : false,\n  HTMLTableRowElement  : false,\n  HTMLTableSectionElement: false,\n  HTMLTemplateElement  : false,\n  HTMLTextAreaElement  : false,\n  HTMLTitleElement     : false,\n  HTMLUListElement     : false,\n  HTMLVideoElement     : false,\n  history              : false,\n  Image                : false,\n  Intl                 : false,\n  length               : false,\n  localStorage         : false,\n  location             : false,\n  matchMedia           : false,\n  MessageChannel       : false,\n  MessageEvent         : false,\n  MessagePort          : false,\n  MouseEvent           : false,\n  moveBy               : false,\n  moveTo               : false,\n  MutationObserver     : false,\n  name                 : false,\n  Node                 : false,\n  NodeFilter           : false,\n  NodeList             : false,\n  Notification         : false,\n  navigator            : false,\n  onbeforeunload       : true,\n  onblur               : true,\n  onerror              : true,\n  onfocus              : true,\n  onload               : true,\n  onresize             : true,\n  onunload             : true,\n  open                 : false,\n  openDatabase         : false,\n  opener               : false,\n  Option               : false,\n  parent               : false,\n  performance          : false,\n  print                : false,\n  Range                : false,\n  requestAnimationFrame : false,\n  removeEventListener  : false,\n  resizeBy             : false,\n  resizeTo             : false,\n  screen               : false,\n  scroll               : false,\n  scrollBy             : false,\n  scrollTo             : false,\n  sessionStorage       : false,\n  setInterval          : false,\n  setTimeout           : false,\n  SharedWorker         : false,\n  status               : false,\n  SVGAElement          : false,\n  SVGAltGlyphDefElement: false,\n  SVGAltGlyphElement   : false,\n  SVGAltGlyphItemElement: false,\n  SVGAngle             : false,\n  SVGAnimateColorElement: false,\n  SVGAnimateElement    : false,\n  SVGAnimateMotionElement: false,\n  SVGAnimateTransformElement: false,\n  SVGAnimatedAngle     : false,\n  SVGAnimatedBoolean   : false,\n  SVGAnimatedEnumeration: false,\n  SVGAnimatedInteger   : false,\n  SVGAnimatedLength    : false,\n  SVGAnimatedLengthList: false,\n  SVGAnimatedNumber    : false,\n  SVGAnimatedNumberList: false,\n  SVGAnimatedPathData  : false,\n  SVGAnimatedPoints    : false,\n  SVGAnimatedPreserveAspectRatio: false,\n  SVGAnimatedRect      : false,\n  SVGAnimatedString    : false,\n  SVGAnimatedTransformList: false,\n  SVGAnimationElement  : false,\n  SVGCSSRule           : false,\n  SVGCircleElement     : false,\n  SVGClipPathElement   : false,\n  SVGColor             : false,\n  SVGColorProfileElement: false,\n  SVGColorProfileRule  : false,\n  SVGComponentTransferFunctionElement: false,\n  SVGCursorElement     : false,\n  SVGDefsElement       : false,\n  SVGDescElement       : false,\n  SVGDocument          : false,\n  SVGElement           : false,\n  SVGElementInstance   : false,\n  SVGElementInstanceList: false,\n  SVGEllipseElement    : false,\n  SVGExternalResourcesRequired: false,\n  SVGFEBlendElement    : false,\n  SVGFEColorMatrixElement: false,\n  SVGFEComponentTransferElement: false,\n  SVGFECompositeElement: false,\n  SVGFEConvolveMatrixElement: false,\n  SVGFEDiffuseLightingElement: false,\n  SVGFEDisplacementMapElement: false,\n  SVGFEDistantLightElement: false,\n  SVGFEFloodElement    : false,\n  SVGFEFuncAElement    : false,\n  SVGFEFuncBElement    : false,\n  SVGFEFuncGElement    : false,\n  SVGFEFuncRElement    : false,\n  SVGFEGaussianBlurElement: false,\n  SVGFEImageElement    : false,\n  SVGFEMergeElement    : false,\n  SVGFEMergeNodeElement: false,\n  SVGFEMorphologyElement: false,\n  SVGFEOffsetElement   : false,\n  SVGFEPointLightElement: false,\n  SVGFESpecularLightingElement: false,\n  SVGFESpotLightElement: false,\n  SVGFETileElement     : false,\n  SVGFETurbulenceElement: false,\n  SVGFilterElement     : false,\n  SVGFilterPrimitiveStandardAttributes: false,\n  SVGFitToViewBox      : false,\n  SVGFontElement       : false,\n  SVGFontFaceElement   : false,\n  SVGFontFaceFormatElement: false,\n  SVGFontFaceNameElement: false,\n  SVGFontFaceSrcElement: false,\n  SVGFontFaceUriElement: false,\n  SVGForeignObjectElement: false,\n  SVGGElement          : false,\n  SVGGlyphElement      : false,\n  SVGGlyphRefElement   : false,\n  SVGGradientElement   : false,\n  SVGHKernElement      : false,\n  SVGICCColor          : false,\n  SVGImageElement      : false,\n  SVGLangSpace         : false,\n  SVGLength            : false,\n  SVGLengthList        : false,\n  SVGLineElement       : false,\n  SVGLinearGradientElement: false,\n  SVGLocatable         : false,\n  SVGMPathElement      : false,\n  SVGMarkerElement     : false,\n  SVGMaskElement       : false,\n  SVGMatrix            : false,\n  SVGMetadataElement   : false,\n  SVGMissingGlyphElement: false,\n  SVGNumber            : false,\n  SVGNumberList        : false,\n  SVGPaint             : false,\n  SVGPathElement       : false,\n  SVGPathSeg           : false,\n  SVGPathSegArcAbs     : false,\n  SVGPathSegArcRel     : false,\n  SVGPathSegClosePath  : false,\n  SVGPathSegCurvetoCubicAbs: false,\n  SVGPathSegCurvetoCubicRel: false,\n  SVGPathSegCurvetoCubicSmoothAbs: false,\n  SVGPathSegCurvetoCubicSmoothRel: false,\n  SVGPathSegCurvetoQuadraticAbs: false,\n  SVGPathSegCurvetoQuadraticRel: false,\n  SVGPathSegCurvetoQuadraticSmoothAbs: false,\n  SVGPathSegCurvetoQuadraticSmoothRel: false,\n  SVGPathSegLinetoAbs  : false,\n  SVGPathSegLinetoHorizontalAbs: false,\n  SVGPathSegLinetoHorizontalRel: false,\n  SVGPathSegLinetoRel  : false,\n  SVGPathSegLinetoVerticalAbs: false,\n  SVGPathSegLinetoVerticalRel: false,\n  SVGPathSegList       : false,\n  SVGPathSegMovetoAbs  : false,\n  SVGPathSegMovetoRel  : false,\n  SVGPatternElement    : false,\n  SVGPoint             : false,\n  SVGPointList         : false,\n  SVGPolygonElement    : false,\n  SVGPolylineElement   : false,\n  SVGPreserveAspectRatio: false,\n  SVGRadialGradientElement: false,\n  SVGRect              : false,\n  SVGRectElement       : false,\n  SVGRenderingIntent   : false,\n  SVGSVGElement        : false,\n  SVGScriptElement     : false,\n  SVGSetElement        : false,\n  SVGStopElement       : false,\n  SVGStringList        : false,\n  SVGStylable          : false,\n  SVGStyleElement      : false,\n  SVGSwitchElement     : false,\n  SVGSymbolElement     : false,\n  SVGTRefElement       : false,\n  SVGTSpanElement      : false,\n  SVGTests             : false,\n  SVGTextContentElement: false,\n  SVGTextElement       : false,\n  SVGTextPathElement   : false,\n  SVGTextPositioningElement: false,\n  SVGTitleElement      : false,\n  SVGTransform         : false,\n  SVGTransformList     : false,\n  SVGTransformable     : false,\n  SVGURIReference      : false,\n  SVGUnitTypes         : false,\n  SVGUseElement        : false,\n  SVGVKernElement      : false,\n  SVGViewElement       : false,\n  SVGViewSpec          : false,\n  SVGZoomAndPan        : false,\n  Text                 : false,\n  TextDecoder          : false,\n  TextEncoder          : false,\n  TimeEvent            : false,\n  top                  : false,\n  URL                  : false,\n  WebGLActiveInfo      : false,\n  WebGLBuffer          : false,\n  WebGLContextEvent    : false,\n  WebGLFramebuffer     : false,\n  WebGLProgram         : false,\n  WebGLRenderbuffer    : false,\n  WebGLRenderingContext: false,\n  WebGLShader          : false,\n  WebGLShaderPrecisionFormat: false,\n  WebGLTexture         : false,\n  WebGLUniformLocation : false,\n  WebSocket            : false,\n  window               : false,\n  Window               : false,\n  Worker               : false,\n  XDomainRequest       : false,\n  XMLHttpRequest       : false,\n  XMLSerializer        : false,\n  XPathEvaluator       : false,\n  XPathException       : false,\n  XPathExpression      : false,\n  XPathNamespace       : false,\n  XPathNSResolver      : false,\n  XPathResult          : false\n};\n\nexports.devel = {\n  alert  : false,\n  confirm: false,\n  console: false,\n  Debug  : false,\n  opera  : false,\n  prompt : false\n};\n\nexports.worker = {\n  importScripts  : true,\n  postMessage    : true,\n  self           : true,\n  FileReaderSync : true\n};\nexports.nonstandard = {\n  escape  : false,\n  unescape: false\n};\n\nexports.couch = {\n  \"require\" : false,\n  respond   : false,\n  getRow    : false,\n  emit      : false,\n  send      : false,\n  start     : false,\n  sum       : false,\n  log       : false,\n  exports   : false,\n  module    : false,\n  provides  : false\n};\n\nexports.node = {\n  __filename    : false,\n  __dirname     : false,\n  GLOBAL        : false,\n  global        : false,\n  module        : false,\n  require       : false,\n\n  Buffer        : true,\n  console       : true,\n  exports       : true,\n  process       : true,\n  setTimeout    : true,\n  clearTimeout  : true,\n  setInterval   : true,\n  clearInterval : true,\n  setImmediate  : true, // v0.9.1+\n  clearImmediate: true  // v0.9.1+\n};\n\nexports.browserify = {\n  __filename    : false,\n  __dirname     : false,\n  global        : false,\n  module        : false,\n  require       : false,\n  Buffer        : true,\n  exports       : true,\n  process       : true\n};\n\nexports.phantom = {\n  phantom      : true,\n  require      : true,\n  WebPage      : true,\n  console      : true, // in examples, but undocumented\n  exports      : true  // v1.7+\n};\n\nexports.qunit = {\n  asyncTest      : false,\n  deepEqual      : false,\n  equal          : false,\n  expect         : false,\n  module         : false,\n  notDeepEqual   : false,\n  notEqual       : false,\n  notPropEqual   : false,\n  notStrictEqual : false,\n  ok             : false,\n  propEqual      : false,\n  QUnit          : false,\n  raises         : false,\n  start          : false,\n  stop           : false,\n  strictEqual    : false,\n  test           : false,\n  \"throws\"       : false\n};\n\nexports.rhino = {\n  defineClass  : false,\n  deserialize  : false,\n  gc           : false,\n  help         : false,\n  importClass  : false,\n  importPackage: false,\n  \"java\"       : false,\n  load         : false,\n  loadClass    : false,\n  Packages     : false,\n  print        : false,\n  quit         : false,\n  readFile     : false,\n  readUrl      : false,\n  runCommand   : false,\n  seal         : false,\n  serialize    : false,\n  spawn        : false,\n  sync         : false,\n  toint32      : false,\n  version      : false\n};\n\nexports.shelljs = {\n  target       : false,\n  echo         : false,\n  exit         : false,\n  cd           : false,\n  pwd          : false,\n  ls           : false,\n  find         : false,\n  cp           : false,\n  rm           : false,\n  mv           : false,\n  mkdir        : false,\n  test         : false,\n  cat          : false,\n  sed          : false,\n  grep         : false,\n  which        : false,\n  dirs         : false,\n  pushd        : false,\n  popd         : false,\n  env          : false,\n  exec         : false,\n  chmod        : false,\n  config       : false,\n  error        : false,\n  tempdir      : false\n};\n\nexports.typed = {\n  ArrayBuffer         : false,\n  ArrayBufferView     : false,\n  DataView            : false,\n  Float32Array        : false,\n  Float64Array        : false,\n  Int16Array          : false,\n  Int32Array          : false,\n  Int8Array           : false,\n  Uint16Array         : false,\n  Uint32Array         : false,\n  Uint8Array          : false,\n  Uint8ClampedArray   : false\n};\n\nexports.wsh = {\n  ActiveXObject            : true,\n  Enumerator               : true,\n  GetObject                : true,\n  ScriptEngine             : true,\n  ScriptEngineBuildVersion : true,\n  ScriptEngineMajorVersion : true,\n  ScriptEngineMinorVersion : true,\n  VBArray                  : true,\n  WSH                      : true,\n  WScript                  : true,\n  XDomainRequest           : true\n};\n\nexports.dojo = {\n  dojo     : false,\n  dijit    : false,\n  dojox    : false,\n  define   : false,\n  \"require\": false\n};\n\nexports.jquery = {\n  \"$\"    : false,\n  jQuery : false\n};\n\nexports.mootools = {\n  \"$\"           : false,\n  \"$$\"          : false,\n  Asset         : false,\n  Browser       : false,\n  Chain         : false,\n  Class         : false,\n  Color         : false,\n  Cookie        : false,\n  Core          : false,\n  Document      : false,\n  DomReady      : false,\n  DOMEvent      : false,\n  DOMReady      : false,\n  Drag          : false,\n  Element       : false,\n  Elements      : false,\n  Event         : false,\n  Events        : false,\n  Fx            : false,\n  Group         : false,\n  Hash          : false,\n  HtmlTable     : false,\n  IFrame        : false,\n  IframeShim    : false,\n  InputValidator: false,\n  instanceOf    : false,\n  Keyboard      : false,\n  Locale        : false,\n  Mask          : false,\n  MooTools      : false,\n  Native        : false,\n  Options       : false,\n  OverText      : false,\n  Request       : false,\n  Scroller      : false,\n  Slick         : false,\n  Slider        : false,\n  Sortables     : false,\n  Spinner       : false,\n  Swiff         : false,\n  Tips          : false,\n  Type          : false,\n  typeOf        : false,\n  URI           : false,\n  Window        : false\n};\n\nexports.prototypejs = {\n  \"$\"               : false,\n  \"$$\"              : false,\n  \"$A\"              : false,\n  \"$F\"              : false,\n  \"$H\"              : false,\n  \"$R\"              : false,\n  \"$break\"          : false,\n  \"$continue\"       : false,\n  \"$w\"              : false,\n  Abstract          : false,\n  Ajax              : false,\n  Class             : false,\n  Enumerable        : false,\n  Element           : false,\n  Event             : false,\n  Field             : false,\n  Form              : false,\n  Hash              : false,\n  Insertion         : false,\n  ObjectRange       : false,\n  PeriodicalExecuter: false,\n  Position          : false,\n  Prototype         : false,\n  Selector          : false,\n  Template          : false,\n  Toggle            : false,\n  Try               : false,\n  Autocompleter     : false,\n  Builder           : false,\n  Control           : false,\n  Draggable         : false,\n  Draggables        : false,\n  Droppables        : false,\n  Effect            : false,\n  Sortable          : false,\n  SortableObserver  : false,\n  Sound             : false,\n  Scriptaculous     : false\n};\n\nexports.yui = {\n  YUI       : false,\n  Y         : false,\n  YUI_config: false\n};\n\nexports.mocha = {\n  mocha       : false,\n  describe    : false,\n  xdescribe   : false,\n  it          : false,\n  xit         : false,\n  context     : false,\n  xcontext    : false,\n  before      : false,\n  after       : false,\n  beforeEach  : false,\n  afterEach   : false,\n  suite         : false,\n  test          : false,\n  setup         : false,\n  teardown      : false,\n  suiteSetup    : false,\n  suiteTeardown : false\n};\n\nexports.jasmine = {\n  jasmine     : false,\n  describe    : false,\n  xdescribe   : false,\n  it          : false,\n  xit         : false,\n  beforeEach  : false,\n  afterEach   : false,\n  setFixtures : false,\n  loadFixtures: false,\n  spyOn       : false,\n  expect      : false,\n  runs        : false,\n  waitsFor    : false,\n  waits       : false,\n  beforeAll   : false,\n  afterAll    : false,\n  fail        : false,\n  fdescribe   : false,\n  fit         : false,\n  pending     : false\n};\n\n},{}]},{},[\"/node_modules/jshint/src/jshint.js\"]);\n\n});\n\nace.define(\"ace/mode/javascript_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar lint = require(\"./javascript/jshint\").JSHINT;\n\nfunction startRegex(arr) {\n    return RegExp(\"^(\" + arr.join(\"|\") + \")\");\n}\n\nvar disabledWarningsRe = startRegex([\n    \"Bad for in variable '(.+)'.\",\n    'Missing \"use strict\"'\n]);\nvar errorsRe = startRegex([\n    \"Unexpected\",\n    \"Expected \",\n    \"Confusing (plus|minus)\",\n    \"\\\\{a\\\\} unterminated regular expression\",\n    \"Unclosed \",\n    \"Unmatched \",\n    \"Unbegun comment\",\n    \"Bad invocation\",\n    \"Missing space after\",\n    \"Missing operator at\"\n]);\nvar infoRe = startRegex([\n    \"Expected an assignment\",\n    \"Bad escapement of EOL\",\n    \"Unexpected comma\",\n    \"Unexpected space\",\n    \"Missing radix parameter.\",\n    \"A leading decimal point can\",\n    \"\\\\['{a}'\\\\] is better written in dot notation.\",\n    \"'{a}' used out of scope\"\n]);\n\nvar JavaScriptWorker = exports.JavaScriptWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n    this.setOptions();\n};\n\noop.inherits(JavaScriptWorker, Mirror);\n\n(function() {\n    this.setOptions = function(options) {\n        this.options = options || {\n            esnext: true,\n            moz: true,\n            devel: true,\n            browser: true,\n            node: true,\n            laxcomma: true,\n            laxbreak: true,\n            lastsemic: true,\n            onevar: false,\n            passfail: false,\n            maxerr: 100,\n            expr: true,\n            multistr: true,\n            globalstrict: true\n        };\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.changeOptions = function(newOptions) {\n        oop.mixin(this.options, newOptions);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.isValidJS = function(str) {\n        try {\n            eval(\"throw 0;\" + str);\n        } catch(e) {\n            if (e === 0)\n                return true;\n        }\n        return false;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        value = value.replace(/^#!.*\\n/, \"\\n\");\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n\n        var errors = [];\n        var maxErrorLevel = this.isValidJS(value) ? \"warning\" : \"error\";\n        lint(value, this.options, this.options.globals);\n        var results = lint.errors;\n\n        var errorAdded = false;\n        for (var i = 0; i < results.length; i++) {\n            var error = results[i];\n            if (!error)\n                continue;\n            var raw = error.raw;\n            var type = \"warning\";\n\n            if (raw == \"Missing semicolon.\") {\n                var str = error.evidence.substr(error.character);\n                str = str.charAt(str.search(/\\S/));\n                if (maxErrorLevel == \"error\" && str && /[\\w\\d{(['\"]/.test(str)) {\n                    error.reason = 'Missing \";\" before statement';\n                    type = \"error\";\n                } else {\n                    type = \"info\";\n                }\n            }\n            else if (disabledWarningsRe.test(raw)) {\n                continue;\n            }\n            else if (infoRe.test(raw)) {\n                type = \"info\";\n            }\n            else if (errorsRe.test(raw)) {\n                errorAdded  = true;\n                type = maxErrorLevel;\n            }\n            else if (raw == \"'{a}' is not defined.\") {\n                type = \"warning\";\n            }\n            else if (raw == \"'{a}' is defined but never used.\") {\n                type = \"info\";\n            }\n\n            errors.push({\n                row: error.line-1,\n                column: error.character-1,\n                text: error.reason,\n                type: type,\n                raw: raw\n            });\n\n            if (errorAdded) {\n            }\n        }\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(JavaScriptWorker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/worker-json.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/json/json_parse\",[], function(require, exports, module) {\n\"use strict\";\n\n    var at,     // The index of the current character\n        ch,     // The current character\n        escapee = {\n            '\"':  '\"',\n            '\\\\': '\\\\',\n            '/':  '/',\n            b:    '\\b',\n            f:    '\\f',\n            n:    '\\n',\n            r:    '\\r',\n            t:    '\\t'\n        },\n        text,\n\n        error = function (m) {\n\n            throw {\n                name:    'SyntaxError',\n                message: m,\n                at:      at,\n                text:    text\n            };\n        },\n\n        next = function (c) {\n\n            if (c && c !== ch) {\n                error(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\n            }\n\n            ch = text.charAt(at);\n            at += 1;\n            return ch;\n        },\n\n        number = function () {\n\n            var number,\n                string = '';\n\n            if (ch === '-') {\n                string = '-';\n                next('-');\n            }\n            while (ch >= '0' && ch <= '9') {\n                string += ch;\n                next();\n            }\n            if (ch === '.') {\n                string += '.';\n                while (next() && ch >= '0' && ch <= '9') {\n                    string += ch;\n                }\n            }\n            if (ch === 'e' || ch === 'E') {\n                string += ch;\n                next();\n                if (ch === '-' || ch === '+') {\n                    string += ch;\n                    next();\n                }\n                while (ch >= '0' && ch <= '9') {\n                    string += ch;\n                    next();\n                }\n            }\n            number = +string;\n            if (isNaN(number)) {\n                error(\"Bad number\");\n            } else {\n                return number;\n            }\n        },\n\n        string = function () {\n\n            var hex,\n                i,\n                string = '',\n                uffff;\n\n            if (ch === '\"') {\n                while (next()) {\n                    if (ch === '\"') {\n                        next();\n                        return string;\n                    } else if (ch === '\\\\') {\n                        next();\n                        if (ch === 'u') {\n                            uffff = 0;\n                            for (i = 0; i < 4; i += 1) {\n                                hex = parseInt(next(), 16);\n                                if (!isFinite(hex)) {\n                                    break;\n                                }\n                                uffff = uffff * 16 + hex;\n                            }\n                            string += String.fromCharCode(uffff);\n                        } else if (typeof escapee[ch] === 'string') {\n                            string += escapee[ch];\n                        } else {\n                            break;\n                        }\n                    } else if (ch == \"\\n\" || ch == \"\\r\") {\n                        break;\n                    } else {\n                        string += ch;\n                    }\n                }\n            }\n            error(\"Bad string\");\n        },\n\n        white = function () {\n\n            while (ch && ch <= ' ') {\n                next();\n            }\n        },\n\n        word = function () {\n\n            switch (ch) {\n            case 't':\n                next('t');\n                next('r');\n                next('u');\n                next('e');\n                return true;\n            case 'f':\n                next('f');\n                next('a');\n                next('l');\n                next('s');\n                next('e');\n                return false;\n            case 'n':\n                next('n');\n                next('u');\n                next('l');\n                next('l');\n                return null;\n            }\n            error(\"Unexpected '\" + ch + \"'\");\n        },\n\n        value,  // Place holder for the value function.\n\n        array = function () {\n\n            var array = [];\n\n            if (ch === '[') {\n                next('[');\n                white();\n                if (ch === ']') {\n                    next(']');\n                    return array;   // empty array\n                }\n                while (ch) {\n                    array.push(value());\n                    white();\n                    if (ch === ']') {\n                        next(']');\n                        return array;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error(\"Bad array\");\n        },\n\n        object = function () {\n\n            var key,\n                object = {};\n\n            if (ch === '{') {\n                next('{');\n                white();\n                if (ch === '}') {\n                    next('}');\n                    return object;   // empty object\n                }\n                while (ch) {\n                    key = string();\n                    white();\n                    next(':');\n                    if (Object.hasOwnProperty.call(object, key)) {\n                        error('Duplicate key \"' + key + '\"');\n                    }\n                    object[key] = value();\n                    white();\n                    if (ch === '}') {\n                        next('}');\n                        return object;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error(\"Bad object\");\n        };\n\n    value = function () {\n\n        white();\n        switch (ch) {\n        case '{':\n            return object();\n        case '[':\n            return array();\n        case '\"':\n            return string();\n        case '-':\n            return number();\n        default:\n            return ch >= '0' && ch <= '9' ? number() : word();\n        }\n    };\n\n    return function (source, reviver) {\n        var result;\n\n        text = source;\n        at = 0;\n        ch = ' ';\n        result = value();\n        white();\n        if (ch) {\n            error(\"Syntax error\");\n        }\n\n        return typeof reviver === 'function' ? function walk(holder, key) {\n            var k, v, value = holder[key];\n            if (value && typeof value === 'object') {\n                for (k in value) {\n                    if (Object.hasOwnProperty.call(value, k)) {\n                        v = walk(value, k);\n                        if (v !== undefined) {\n                            value[k] = v;\n                        } else {\n                            delete value[k];\n                        }\n                    }\n                }\n            }\n            return reviver.call(holder, key, value);\n        }({'': result}, '') : result;\n    };\n});\n\nace.define(\"ace/mode/json_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar parse = require(\"./json/json_parse\");\n\nvar JsonWorker = exports.JsonWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(200);\n};\n\noop.inherits(JsonWorker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            if (value)\n                parse(value);\n        } catch (e) {\n            var pos = this.doc.indexToPosition(e.at-1);\n            errors.push({\n                row: pos.row,\n                column: pos.column,\n                text: e.message,\n                type: \"error\"\n            });\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(JsonWorker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/worker-lua.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/lua/luaparse\",[], function(require, exports, module) {\n\n(function (root, name, factory) {\n   factory(exports)\n}(this, 'luaparse', function (exports) {\n  'use strict';\n\n  exports.version = '0.1.4';\n\n  var input, options, length;\n  var defaultOptions = exports.defaultOptions = {\n      wait: false\n    , comments: true\n    , scope: false\n    , locations: false\n    , ranges: false\n  };\n\n  var EOF = 1, StringLiteral = 2, Keyword = 4, Identifier = 8\n    , NumericLiteral = 16, Punctuator = 32, BooleanLiteral = 64\n    , NilLiteral = 128, VarargLiteral = 256;\n\n  exports.tokenTypes = { EOF: EOF, StringLiteral: StringLiteral\n    , Keyword: Keyword, Identifier: Identifier, NumericLiteral: NumericLiteral\n    , Punctuator: Punctuator, BooleanLiteral: BooleanLiteral\n    , NilLiteral: NilLiteral, VarargLiteral: VarargLiteral\n  };\n\n  var errors = exports.errors = {\n      unexpected: 'Unexpected %1 \\'%2\\' near \\'%3\\''\n    , expected: '\\'%1\\' expected near \\'%2\\''\n    , expectedToken: '%1 expected near \\'%2\\''\n    , unfinishedString: 'unfinished string near \\'%1\\''\n    , malformedNumber: 'malformed number near \\'%1\\''\n  };\n\n  var ast = exports.ast = {\n      labelStatement: function(label) {\n      return {\n          type: 'LabelStatement'\n        , label: label\n      };\n    }\n\n    , breakStatement: function() {\n      return {\n          type: 'BreakStatement'\n      };\n    }\n\n    , gotoStatement: function(label) {\n      return {\n          type: 'GotoStatement'\n        , label: label\n      };\n    }\n\n    , returnStatement: function(args) {\n      return {\n          type: 'ReturnStatement'\n        , 'arguments': args\n      };\n    }\n\n    , ifStatement: function(clauses) {\n      return {\n          type: 'IfStatement'\n        , clauses: clauses\n      };\n    }\n    , ifClause: function(condition, body) {\n      return {\n          type: 'IfClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseifClause: function(condition, body) {\n      return {\n          type: 'ElseifClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseClause: function(body) {\n      return {\n          type: 'ElseClause'\n        , body: body\n      };\n    }\n\n    , whileStatement: function(condition, body) {\n      return {\n          type: 'WhileStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , doStatement: function(body) {\n      return {\n          type: 'DoStatement'\n        , body: body\n      };\n    }\n\n    , repeatStatement: function(condition, body) {\n      return {\n          type: 'RepeatStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , localStatement: function(variables, init) {\n      return {\n          type: 'LocalStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , assignmentStatement: function(variables, init) {\n      return {\n          type: 'AssignmentStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , callStatement: function(expression) {\n      return {\n          type: 'CallStatement'\n        , expression: expression\n      };\n    }\n\n    , functionStatement: function(identifier, parameters, isLocal, body) {\n      return {\n          type: 'FunctionDeclaration'\n        , identifier: identifier\n        , isLocal: isLocal\n        , parameters: parameters\n        , body: body\n      };\n    }\n\n    , forNumericStatement: function(variable, start, end, step, body) {\n      return {\n          type: 'ForNumericStatement'\n        , variable: variable\n        , start: start\n        , end: end\n        , step: step\n        , body: body\n      };\n    }\n\n    , forGenericStatement: function(variables, iterators, body) {\n      return {\n          type: 'ForGenericStatement'\n        , variables: variables\n        , iterators: iterators\n        , body: body\n      };\n    }\n\n    , chunk: function(body) {\n      return {\n          type: 'Chunk'\n        , body: body\n      };\n    }\n\n    , identifier: function(name) {\n      return {\n          type: 'Identifier'\n        , name: name\n      };\n    }\n\n    , literal: function(type, value, raw) {\n      type = (type === StringLiteral) ? 'StringLiteral'\n        : (type === NumericLiteral) ? 'NumericLiteral'\n        : (type === BooleanLiteral) ? 'BooleanLiteral'\n        : (type === NilLiteral) ? 'NilLiteral'\n        : 'VarargLiteral';\n\n      return {\n          type: type\n        , value: value\n        , raw: raw\n      };\n    }\n\n    , tableKey: function(key, value) {\n      return {\n          type: 'TableKey'\n        , key: key\n        , value: value\n      };\n    }\n    , tableKeyString: function(key, value) {\n      return {\n          type: 'TableKeyString'\n        , key: key\n        , value: value\n      };\n    }\n    , tableValue: function(value) {\n      return {\n          type: 'TableValue'\n        , value: value\n      };\n    }\n\n\n    , tableConstructorExpression: function(fields) {\n      return {\n          type: 'TableConstructorExpression'\n        , fields: fields\n      };\n    }\n    , binaryExpression: function(operator, left, right) {\n      var type = ('and' === operator || 'or' === operator) ?\n        'LogicalExpression' :\n        'BinaryExpression';\n\n      return {\n          type: type\n        , operator: operator\n        , left: left\n        , right: right\n      };\n    }\n    , unaryExpression: function(operator, argument) {\n      return {\n          type: 'UnaryExpression'\n        , operator: operator\n        , argument: argument\n      };\n    }\n    , memberExpression: function(base, indexer, identifier) {\n      return {\n          type: 'MemberExpression'\n        , indexer: indexer\n        , identifier: identifier\n        , base: base\n      };\n    }\n\n    , indexExpression: function(base, index) {\n      return {\n          type: 'IndexExpression'\n        , base: base\n        , index: index\n      };\n    }\n\n    , callExpression: function(base, args) {\n      return {\n          type: 'CallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , tableCallExpression: function(base, args) {\n      return {\n          type: 'TableCallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , stringCallExpression: function(base, argument) {\n      return {\n          type: 'StringCallExpression'\n        , base: base\n        , argument: argument\n      };\n    }\n\n    , comment: function(value, raw) {\n      return {\n          type: 'Comment'\n        , value: value\n        , raw: raw\n      };\n    }\n  };\n\n  function finishNode(node) {\n    if (trackLocations) {\n      var location = locations.pop();\n      location.complete();\n      if (options.locations) node.loc = location.loc;\n      if (options.ranges) node.range = location.range;\n    }\n    return node;\n  }\n\n  var slice = Array.prototype.slice\n    , toString = Object.prototype.toString\n    , indexOf = function indexOf(array, element) {\n      for (var i = 0, length = array.length; i < length; i++) {\n        if (array[i] === element) return i;\n      }\n      return -1;\n    };\n\n  function indexOfObject(array, property, element) {\n    for (var i = 0, length = array.length; i < length; i++) {\n      if (array[i][property] === element) return i;\n    }\n    return -1;\n  }\n\n  function sprintf(format) {\n    var args = slice.call(arguments, 1);\n    format = format.replace(/%(\\d)/g, function (match, index) {\n      return '' + args[index - 1] || '';\n    });\n    return format;\n  }\n\n  function extend() {\n    var args = slice.call(arguments)\n      , dest = {}\n      , src, prop;\n\n    for (var i = 0, length = args.length; i < length; i++) {\n      src = args[i];\n      for (prop in src) if (src.hasOwnProperty(prop)) {\n        dest[prop] = src[prop];\n      }\n    }\n    return dest;\n  }\n\n  function raise(token) {\n    var message = sprintf.apply(null, slice.call(arguments, 1))\n      , error, col;\n\n    if ('undefined' !== typeof token.line) {\n      col = token.range[0] - token.lineStart;\n      error = new SyntaxError(sprintf('[%1:%2] %3', token.line, col, message));\n      error.line = token.line;\n      error.index = token.range[0];\n      error.column = col;\n    } else {\n      col = index - lineStart + 1;\n      error = new SyntaxError(sprintf('[%1:%2] %3', line, col, message));\n      error.index = index;\n      error.line = line;\n      error.column = col;\n    }\n    throw error;\n  }\n\n  function raiseUnexpectedToken(type, token) {\n    raise(token, errors.expectedToken, type, token.value);\n  }\n\n  function unexpected(found, near) {\n    if ('undefined' === typeof near) near = lookahead.value;\n    if ('undefined' !== typeof found.type) {\n      var type;\n      switch (found.type) {\n        case StringLiteral:   type = 'string';      break;\n        case Keyword:         type = 'keyword';     break;\n        case Identifier:      type = 'identifier';  break;\n        case NumericLiteral:  type = 'number';      break;\n        case Punctuator:      type = 'symbol';      break;\n        case BooleanLiteral:  type = 'boolean';     break;\n        case NilLiteral:\n          return raise(found, errors.unexpected, 'symbol', 'nil', near);\n      }\n      return raise(found, errors.unexpected, type, found.value, near);\n    }\n    return raise(found, errors.unexpected, 'symbol', found, near);\n  }\n\n  var index\n    , token\n    , previousToken\n    , lookahead\n    , comments\n    , tokenStart\n    , line\n    , lineStart;\n\n  exports.lex = lex;\n\n  function lex() {\n    skipWhiteSpace();\n    while (45 === input.charCodeAt(index) &&\n           45 === input.charCodeAt(index + 1)) {\n      scanComment();\n      skipWhiteSpace();\n    }\n    if (index >= length) return {\n        type : EOF\n      , value: '<eof>'\n      , line: line\n      , lineStart: lineStart\n      , range: [index, index]\n    };\n\n    var charCode = input.charCodeAt(index)\n      , next = input.charCodeAt(index + 1);\n    tokenStart = index;\n    if (isIdentifierStart(charCode)) return scanIdentifierOrKeyword();\n\n    switch (charCode) {\n      case 39: case 34: // '\"\n        return scanStringLiteral();\n      case 48: case 49: case 50: case 51: case 52: case 53:\n      case 54: case 55: case 56: case 57:\n        return scanNumericLiteral();\n\n      case 46: // .\n        if (isDecDigit(next)) return scanNumericLiteral();\n        if (46 === next) {\n          if (46 === input.charCodeAt(index + 2)) return scanVarargLiteral();\n          return scanPunctuator('..');\n        }\n        return scanPunctuator('.');\n\n      case 61: // =\n        if (61 === next) return scanPunctuator('==');\n        return scanPunctuator('=');\n\n      case 62: // >\n        if (61 === next) return scanPunctuator('>=');\n        return scanPunctuator('>');\n\n      case 60: // <\n        if (61 === next) return scanPunctuator('<=');\n        return scanPunctuator('<');\n\n      case 126: // ~\n        if (61 === next) return scanPunctuator('~=');\n        return scanPunctuator('~');\n\n      case 58: // :\n        if (58 === next) return scanPunctuator('::');\n        return scanPunctuator(':');\n\n      case 91: // [\n        if (91 === next || 61 === next) return scanLongStringLiteral();\n        return scanPunctuator('[');\n      case 42: case 47: case 94: case 37: case 44: case 123: case 125:\n      case 93: case 40: case 41: case 59: case 35: case 45: case 43: case 38: case 124:\n        return scanPunctuator(input.charAt(index));\n    }\n\n    return unexpected(input.charAt(index));\n  }\n\n  function skipWhiteSpace() {\n    while (index < length) {\n      var charCode = input.charCodeAt(index);\n      if (isWhiteSpace(charCode)) {\n        index++;\n      } else if (isLineTerminator(charCode)) {\n        line++;\n        lineStart = ++index;\n      } else {\n        break;\n      }\n    }\n  }\n\n  function scanIdentifierOrKeyword() {\n    var value, type;\n    while (isIdentifierPart(input.charCodeAt(++index)));\n    value = input.slice(tokenStart, index);\n    if (isKeyword(value)) {\n      type = Keyword;\n    } else if ('true' === value || 'false' === value) {\n      type = BooleanLiteral;\n      value = ('true' === value);\n    } else if ('nil' === value) {\n      type = NilLiteral;\n      value = null;\n    } else {\n      type = Identifier;\n    }\n\n    return {\n        type: type\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanPunctuator(value) {\n    index += value.length;\n    return {\n        type: Punctuator\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanVarargLiteral() {\n    index += 3;\n    return {\n        type: VarargLiteral\n      , value: '...'\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanStringLiteral() {\n    var delimiter = input.charCodeAt(index++)\n      , stringStart = index\n      , string = ''\n      , charCode;\n\n    while (index < length) {\n      charCode = input.charCodeAt(index++);\n      if (delimiter === charCode) break;\n      if (92 === charCode) { // \\\n        string += input.slice(stringStart, index - 1) + readEscapeSequence();\n        stringStart = index;\n      }\n      else if (index >= length || isLineTerminator(charCode)) {\n        string += input.slice(stringStart, index - 1);\n        raise({}, errors.unfinishedString, string + String.fromCharCode(charCode));\n      }\n    }\n    string += input.slice(stringStart, index - 1);\n\n    return {\n        type: StringLiteral\n      , value: string\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanLongStringLiteral() {\n    var string = readLongString();\n    if (false === string) raise(token, errors.expected, '[', token.value);\n\n    return {\n        type: StringLiteral\n      , value: string\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanNumericLiteral() {\n    var character = input.charAt(index)\n      , next = input.charAt(index + 1);\n\n    var value = ('0' === character && 'xX'.indexOf(next || null) >= 0) ?\n      readHexLiteral() : readDecLiteral();\n\n    return {\n        type: NumericLiteral\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function readHexLiteral() {\n    var fraction = 0 // defaults to 0 as it gets summed\n      , binaryExponent = 1 // defaults to 1 as it gets multiplied\n      , binarySign = 1 // positive\n      , digit, fractionStart, exponentStart, digitStart;\n\n    digitStart = index += 2; // Skip 0x part\n    if (!isHexDigit(input.charCodeAt(index)))\n      raise({}, errors.malformedNumber, input.slice(tokenStart, index));\n\n    while (isHexDigit(input.charCodeAt(index))) index++;\n    digit = parseInt(input.slice(digitStart, index), 16);\n    if ('.' === input.charAt(index)) {\n      fractionStart = ++index;\n\n      while (isHexDigit(input.charCodeAt(index))) index++;\n      fraction = input.slice(fractionStart, index);\n      fraction = (fractionStart === index) ? 0\n        : parseInt(fraction, 16) / Math.pow(16, index - fractionStart);\n    }\n    if ('pP'.indexOf(input.charAt(index) || null) >= 0) {\n      index++;\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0)\n        binarySign = ('+' === input.charAt(index++)) ? 1 : -1;\n\n      exponentStart = index;\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise({}, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) index++;\n      binaryExponent = input.slice(exponentStart, index);\n      binaryExponent = Math.pow(2, binaryExponent * binarySign);\n    }\n\n    return (digit + fraction) * binaryExponent;\n  }\n\n  function readDecLiteral() {\n    while (isDecDigit(input.charCodeAt(index))) index++;\n    if ('.' === input.charAt(index)) {\n      index++;\n      while (isDecDigit(input.charCodeAt(index))) index++;\n    }\n    if ('eE'.indexOf(input.charAt(index) || null) >= 0) {\n      index++;\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0) index++;\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise({}, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) index++;\n    }\n\n    return parseFloat(input.slice(tokenStart, index));\n  }\n\n  function readEscapeSequence() {\n    var sequenceStart = index;\n    switch (input.charAt(index)) {\n      case 'n': index++; return '\\n';\n      case 'r': index++; return '\\r';\n      case 't': index++; return '\\t';\n      case 'v': index++; return '\\x0B';\n      case 'b': index++; return '\\b';\n      case 'f': index++; return '\\f';\n      case 'z': index++; skipWhiteSpace(); return '';\n      case 'x':\n        if (isHexDigit(input.charCodeAt(index + 1)) &&\n            isHexDigit(input.charCodeAt(index + 2))) {\n          index += 3;\n          return '\\\\' + input.slice(sequenceStart, index);\n        }\n        return '\\\\' + input.charAt(index++);\n      default:\n        if (isDecDigit(input.charCodeAt(index))) {\n          while (isDecDigit(input.charCodeAt(++index)));\n          return '\\\\' + input.slice(sequenceStart, index);\n        }\n        return input.charAt(index++);\n    }\n  }\n\n  function scanComment() {\n    tokenStart = index;\n    index += 2; // --\n\n    var character = input.charAt(index)\n      , content = ''\n      , isLong = false\n      , commentStart = index\n      , lineStartComment = lineStart\n      , lineComment = line;\n\n    if ('[' === character) {\n      content = readLongString();\n      if (false === content) content = character;\n      else isLong = true;\n    }\n    if (!isLong) {\n      while (index < length) {\n        if (isLineTerminator(input.charCodeAt(index))) break;\n        index++;\n      }\n      if (options.comments) content = input.slice(commentStart, index);\n    }\n\n    if (options.comments) {\n      var node = ast.comment(content, input.slice(tokenStart, index));\n      if (options.locations) {\n        node.loc = {\n            start: { line: lineComment, column: tokenStart - lineStartComment }\n          , end: { line: line, column: index - lineStart }\n        };\n      }\n      if (options.ranges) {\n        node.range = [tokenStart, index];\n      }\n      comments.push(node);\n    }\n  }\n\n  function readLongString() {\n    var level = 0\n      , content = ''\n      , terminator = false\n      , character, stringStart;\n\n    index++; // [\n    while ('=' === input.charAt(index + level)) level++;\n    if ('[' !== input.charAt(index + level)) return false;\n\n    index += level + 1;\n    if (isLineTerminator(input.charCodeAt(index))) {\n      line++;\n      lineStart = index++;\n    }\n\n    stringStart = index;\n    while (index < length) {\n      character = input.charAt(index++);\n      if (isLineTerminator(character.charCodeAt(0))) {\n        line++;\n        lineStart = index;\n      }\n      if (']' === character) {\n        terminator = true;\n        for (var i = 0; i < level; i++) {\n          if ('=' !== input.charAt(index + i)) terminator = false;\n        }\n        if (']' !== input.charAt(index + level)) terminator = false;\n      }\n      if (terminator) break;\n    }\n    content += input.slice(stringStart, index - 1);\n    index += level + 1;\n\n    return content;\n  }\n\n  function next() {\n    previousToken = token;\n    token = lookahead;\n    lookahead = lex();\n  }\n\n  function consume(value) {\n    if (value === token.value) {\n      next();\n      return true;\n    }\n    return false;\n  }\n\n  function expect(value) {\n    if (value === token.value) next();\n    else raise(token, errors.expected, value, token.value);\n  }\n\n  function isWhiteSpace(charCode) {\n    return 9 === charCode || 32 === charCode || 0xB === charCode || 0xC === charCode;\n  }\n\n  function isLineTerminator(charCode) {\n    return 10 === charCode || 13 === charCode;\n  }\n\n  function isDecDigit(charCode) {\n    return charCode >= 48 && charCode <= 57;\n  }\n\n  function isHexDigit(charCode) {\n    return (charCode >= 48 && charCode <= 57) || (charCode >= 97 && charCode <= 102) || (charCode >= 65 && charCode <= 70);\n  }\n\n  function isIdentifierStart(charCode) {\n    return (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode;\n  }\n\n  function isIdentifierPart(charCode) {\n    return (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode || (charCode >= 48 && charCode <= 57);\n  }\n\n  function isKeyword(id) {\n    switch (id.length) {\n      case 2:\n        return 'do' === id || 'if' === id || 'in' === id || 'or' === id;\n      case 3:\n        return 'and' === id || 'end' === id || 'for' === id || 'not' === id;\n      case 4:\n        return 'else' === id || 'goto' === id || 'then' === id;\n      case 5:\n        return 'break' === id || 'local' === id || 'until' === id || 'while' === id;\n      case 6:\n        return 'elseif' === id || 'repeat' === id || 'return' === id;\n      case 8:\n        return 'function' === id;\n    }\n    return false;\n  }\n\n  function isUnary(token) {\n    if (Punctuator === token.type) return '#-~'.indexOf(token.value) >= 0;\n    if (Keyword === token.type) return 'not' === token.value;\n    return false;\n  }\n  function isCallExpression(expression) {\n    switch (expression.type) {\n      case 'CallExpression':\n      case 'TableCallExpression':\n      case 'StringCallExpression':\n        return true;\n    }\n    return false;\n  }\n\n  function isBlockFollow(token) {\n    if (EOF === token.type) return true;\n    if (Keyword !== token.type) return false;\n    switch (token.value) {\n      case 'else': case 'elseif':\n      case 'end': case 'until':\n        return true;\n      default:\n        return false;\n    }\n  }\n  var scopes\n    , scopeDepth\n    , globals;\n  function createScope() {\n    scopes.push(Array.apply(null, scopes[scopeDepth++]));\n  }\n  function exitScope() {\n    scopes.pop();\n    scopeDepth--;\n  }\n  function scopeIdentifierName(name) {\n    if (-1 !== indexOf(scopes[scopeDepth], name)) return;\n    scopes[scopeDepth].push(name);\n  }\n  function scopeIdentifier(node) {\n    scopeIdentifierName(node.name);\n    attachScope(node, true);\n  }\n  function attachScope(node, isLocal) {\n    if (!isLocal && -1 === indexOfObject(globals, 'name', node.name))\n      globals.push(node);\n\n    node.isLocal = isLocal;\n  }\n  function scopeHasName(name) {\n    return (-1 !== indexOf(scopes[scopeDepth], name));\n  }\n\n  var locations = []\n    , trackLocations;\n\n  function createLocationMarker() {\n    return new Marker(token);\n  }\n\n  function Marker(token) {\n    if (options.locations) {\n      this.loc = {\n          start: {\n            line: token.line\n          , column: token.range[0] - token.lineStart\n        }\n        , end: {\n            line: 0\n          , column: 0\n        }\n      };\n    }\n    if (options.ranges) this.range = [token.range[0], 0];\n  }\n  Marker.prototype.complete = function() {\n    if (options.locations) {\n      this.loc.end.line = previousToken.line;\n      this.loc.end.column = previousToken.range[1] - previousToken.lineStart;\n    }\n    if (options.ranges) {\n      this.range[1] = previousToken.range[1];\n    }\n  };\n  function markLocation() {\n    if (trackLocations) locations.push(createLocationMarker());\n  }\n  function pushLocation(marker) {\n    if (trackLocations) locations.push(marker);\n  }\n\n  function parseChunk() {\n    next();\n    markLocation();\n    var body = parseBlock();\n    if (EOF !== token.type) unexpected(token);\n    if (trackLocations && !body.length) previousToken = token;\n    return finishNode(ast.chunk(body));\n  }\n\n  function parseBlock(terminator) {\n    var block = []\n      , statement;\n    if (options.scope) createScope();\n\n    while (!isBlockFollow(token)) {\n      if ('return' === token.value) {\n        block.push(parseStatement());\n        break;\n      }\n      statement = parseStatement();\n      if (statement) block.push(statement);\n    }\n\n    if (options.scope) exitScope();\n    return block;\n  }\n\n  function parseStatement() {\n    markLocation();\n    if (Keyword === token.type) {\n      switch (token.value) {\n        case 'local':    next(); return parseLocalStatement();\n        case 'if':       next(); return parseIfStatement();\n        case 'return':   next(); return parseReturnStatement();\n        case 'function': next();\n          var name = parseFunctionName();\n          return parseFunctionDeclaration(name);\n        case 'while':    next(); return parseWhileStatement();\n        case 'for':      next(); return parseForStatement();\n        case 'repeat':   next(); return parseRepeatStatement();\n        case 'break':    next(); return parseBreakStatement();\n        case 'do':       next(); return parseDoStatement();\n        case 'goto':     next(); return parseGotoStatement();\n      }\n    }\n\n    if (Punctuator === token.type) {\n      if (consume('::')) return parseLabelStatement();\n    }\n    if (trackLocations) locations.pop();\n    if (consume(';')) return;\n\n    return parseAssignmentOrCallStatement();\n  }\n\n  function parseLabelStatement() {\n    var name = token.value\n      , label = parseIdentifier();\n\n    if (options.scope) {\n      scopeIdentifierName('::' + name + '::');\n      attachScope(label, true);\n    }\n\n    expect('::');\n    return finishNode(ast.labelStatement(label));\n  }\n\n  function parseBreakStatement() {\n    return finishNode(ast.breakStatement());\n  }\n\n  function parseGotoStatement() {\n    var name = token.value\n      , label = parseIdentifier();\n\n    if (options.scope) label.isLabel = scopeHasName('::' + name + '::');\n    return finishNode(ast.gotoStatement(label));\n  }\n\n  function parseDoStatement() {\n    var body = parseBlock();\n    expect('end');\n    return finishNode(ast.doStatement(body));\n  }\n\n  function parseWhileStatement() {\n    var condition = parseExpectedExpression();\n    expect('do');\n    var body = parseBlock();\n    expect('end');\n    return finishNode(ast.whileStatement(condition, body));\n  }\n\n  function parseRepeatStatement() {\n    var body = parseBlock();\n    expect('until');\n    var condition = parseExpectedExpression();\n    return finishNode(ast.repeatStatement(condition, body));\n  }\n\n  function parseReturnStatement() {\n    var expressions = [];\n\n    if ('end' !== token.value) {\n      var expression = parseExpression();\n      if (null != expression) expressions.push(expression);\n      while (consume(',')) {\n        expression = parseExpectedExpression();\n        expressions.push(expression);\n      }\n      consume(';'); // grammar tells us ; is optional here.\n    }\n    return finishNode(ast.returnStatement(expressions));\n  }\n\n  function parseIfStatement() {\n    var clauses = []\n      , condition\n      , body\n      , marker;\n    if (trackLocations) {\n      marker = locations[locations.length - 1];\n      locations.push(marker);\n    }\n    condition = parseExpectedExpression();\n    expect('then');\n    body = parseBlock();\n    clauses.push(finishNode(ast.ifClause(condition, body)));\n\n    if (trackLocations) marker = createLocationMarker();\n    while (consume('elseif')) {\n      pushLocation(marker);\n      condition = parseExpectedExpression();\n      expect('then');\n      body = parseBlock();\n      clauses.push(finishNode(ast.elseifClause(condition, body)));\n      if (trackLocations) marker = createLocationMarker();\n    }\n\n    if (consume('else')) {\n      if (trackLocations) {\n        marker = new Marker(previousToken);\n        locations.push(marker);\n      }\n      body = parseBlock();\n      clauses.push(finishNode(ast.elseClause(body)));\n    }\n\n    expect('end');\n    return finishNode(ast.ifStatement(clauses));\n  }\n\n  function parseForStatement() {\n    var variable = parseIdentifier()\n      , body;\n    if (options.scope) scopeIdentifier(variable);\n    if (consume('=')) {\n      var start = parseExpectedExpression();\n      expect(',');\n      var end = parseExpectedExpression();\n      var step = consume(',') ? parseExpectedExpression() : null;\n\n      expect('do');\n      body = parseBlock();\n      expect('end');\n\n      return finishNode(ast.forNumericStatement(variable, start, end, step, body));\n    }\n    else {\n      var variables = [variable];\n      while (consume(',')) {\n        variable = parseIdentifier();\n        if (options.scope) scopeIdentifier(variable);\n        variables.push(variable);\n      }\n      expect('in');\n      var iterators = [];\n      do {\n        var expression = parseExpectedExpression();\n        iterators.push(expression);\n      } while (consume(','));\n\n      expect('do');\n      body = parseBlock();\n      expect('end');\n\n      return finishNode(ast.forGenericStatement(variables, iterators, body));\n    }\n  }\n\n  function parseLocalStatement() {\n    var name;\n\n    if (Identifier === token.type) {\n      var variables = []\n        , init = [];\n\n      do {\n        name = parseIdentifier();\n\n        variables.push(name);\n      } while (consume(','));\n\n      if (consume('=')) {\n        do {\n          var expression = parseExpectedExpression();\n          init.push(expression);\n        } while (consume(','));\n      }\n      if (options.scope) {\n        for (var i = 0, l = variables.length; i < l; i++) {\n          scopeIdentifier(variables[i]);\n        }\n      }\n\n      return finishNode(ast.localStatement(variables, init));\n    }\n    if (consume('function')) {\n      name = parseIdentifier();\n      if (options.scope) scopeIdentifier(name);\n      return parseFunctionDeclaration(name, true);\n    } else {\n      raiseUnexpectedToken('<name>', token);\n    }\n  }\n\n  function parseAssignmentOrCallStatement() {\n    var previous = token\n      , expression, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    expression = parsePrefixExpression();\n\n    if (null == expression) return unexpected(token);\n    if (',='.indexOf(token.value) >= 0) {\n      var variables = [expression]\n        , init = []\n        , exp;\n\n      while (consume(',')) {\n        exp = parsePrefixExpression();\n        if (null == exp) raiseUnexpectedToken('<expression>', token);\n        variables.push(exp);\n      }\n      expect('=');\n      do {\n        exp = parseExpectedExpression();\n        init.push(exp);\n      } while (consume(','));\n\n      pushLocation(marker);\n      return finishNode(ast.assignmentStatement(variables, init));\n    }\n    if (isCallExpression(expression)) {\n      pushLocation(marker);\n      return finishNode(ast.callStatement(expression));\n    }\n    return unexpected(previous);\n  }\n\n  function parseIdentifier() {\n    markLocation();\n    var identifier = token.value;\n    if (Identifier !== token.type) raiseUnexpectedToken('<name>', token);\n    next();\n    return finishNode(ast.identifier(identifier));\n  }\n\n  function parseFunctionDeclaration(name, isLocal) {\n    var parameters = [];\n    expect('(');\n    if (!consume(')')) {\n      while (true) {\n        if (Identifier === token.type) {\n          var parameter = parseIdentifier();\n          if (options.scope) scopeIdentifier(parameter);\n\n          parameters.push(parameter);\n\n          if (consume(',')) continue;\n          else if (consume(')')) break;\n        }\n        else if (VarargLiteral === token.type) {\n          parameters.push(parsePrimaryExpression());\n          expect(')');\n          break;\n        } else {\n          raiseUnexpectedToken('<name> or \\'...\\'', token);\n        }\n      }\n    }\n\n    var body = parseBlock();\n    expect('end');\n\n    isLocal = isLocal || false;\n    return finishNode(ast.functionStatement(name, parameters, isLocal, body));\n  }\n\n  function parseFunctionName() {\n    var base, name, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    base = parseIdentifier();\n\n    if (options.scope) attachScope(base, false);\n\n    while (consume('.')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      if (options.scope) attachScope(name, false);\n      base = finishNode(ast.memberExpression(base, '.', name));\n    }\n\n    if (consume(':')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      if (options.scope) attachScope(name, false);\n      base = finishNode(ast.memberExpression(base, ':', name));\n    }\n\n    return base;\n  }\n\n  function parseTableConstructor() {\n    var fields = []\n      , key, value;\n\n    while (true) {\n      markLocation();\n      if (Punctuator === token.type && consume('[')) {\n        key = parseExpectedExpression();\n        expect(']');\n        expect('=');\n        value = parseExpectedExpression();\n        fields.push(finishNode(ast.tableKey(key, value)));\n      } else if (Identifier === token.type) {\n        key = parseExpectedExpression();\n        if (consume('=')) {\n          value = parseExpectedExpression();\n          fields.push(finishNode(ast.tableKeyString(key, value)));\n        } else {\n          fields.push(finishNode(ast.tableValue(key)));\n        }\n      } else {\n        if (null == (value = parseExpression())) {\n          locations.pop();\n          break;\n        }\n        fields.push(finishNode(ast.tableValue(value)));\n      }\n      if (',;'.indexOf(token.value) >= 0) {\n        next();\n        continue;\n      }\n      if ('}' === token.value) break;\n    }\n    expect('}');\n    return finishNode(ast.tableConstructorExpression(fields));\n  }\n\n  function parseExpression() {\n    var expression = parseSubExpression(0);\n    return expression;\n  }\n\n  function parseExpectedExpression() {\n    var expression = parseExpression();\n    if (null == expression) raiseUnexpectedToken('<expression>', token);\n    else return expression;\n  }\n\n  function binaryPrecedence(operator) {\n    var charCode = operator.charCodeAt(0)\n      , length = operator.length;\n\n    if (1 === length) {\n      switch (charCode) {\n        case 94: return 10; // ^\n        case 42: case 47: case 37: return 7; // * / %\n        case 43: case 45: return 6; // + -\n        case 60: case 62: return 3; // < >\n        case 38: case 124: return 7; // & |\n      }\n    } else if (2 === length) {\n      switch (charCode) {\n        case 46: return 5; // ..\n        case 60: case 62: case 61: case 126: return 3; // <= >= == ~=\n        case 111: return 1; // or\n      }\n    } else if (97 === charCode && 'and' === operator) return 2;\n    return 0;\n  }\n\n  function parseSubExpression(minPrecedence) {\n    var operator = token.value\n      , expression, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    if (isUnary(token)) {\n      markLocation();\n      next();\n      var argument = parseSubExpression(8);\n      if (argument == null) raiseUnexpectedToken('<expression>', token);\n      expression = finishNode(ast.unaryExpression(operator, argument));\n    }\n    if (null == expression) {\n      expression = parsePrimaryExpression();\n      if (null == expression) {\n        expression = parsePrefixExpression();\n      }\n    }\n    if (null == expression) return null;\n\n    var precedence;\n    while (true) {\n      operator = token.value;\n\n      precedence = (Punctuator === token.type || Keyword === token.type) ?\n        binaryPrecedence(operator) : 0;\n\n      if (precedence === 0 || precedence <= minPrecedence) break;\n      if ('^' === operator || '..' === operator) precedence--;\n      next();\n      var right = parseSubExpression(precedence);\n      if (null == right) raiseUnexpectedToken('<expression>', token);\n      if (trackLocations) locations.push(marker);\n      expression = finishNode(ast.binaryExpression(operator, expression, right));\n\n    }\n    return expression;\n  }\n\n  function parsePrefixExpression() {\n    var base, name, marker\n      , isLocal;\n\n    if (trackLocations) marker = createLocationMarker();\n    if (Identifier === token.type) {\n      name = token.value;\n      base = parseIdentifier();\n      if (options.scope) attachScope(base, isLocal = scopeHasName(name));\n    } else if (consume('(')) {\n      base = parseExpectedExpression();\n      expect(')');\n      if (options.scope) isLocal = base.isLocal;\n    } else {\n      return null;\n    }\n    var expression, identifier;\n    while (true) {\n      if (Punctuator === token.type) {\n        switch (token.value) {\n          case '[':\n            pushLocation(marker);\n            next();\n            expression = parseExpectedExpression();\n            base = finishNode(ast.indexExpression(base, expression));\n            expect(']');\n            break;\n          case '.':\n            pushLocation(marker);\n            next();\n            identifier = parseIdentifier();\n            if (options.scope) attachScope(identifier, isLocal);\n            base = finishNode(ast.memberExpression(base, '.', identifier));\n            break;\n          case ':':\n            pushLocation(marker);\n            next();\n            identifier = parseIdentifier();\n            if (options.scope) attachScope(identifier, isLocal);\n            base = finishNode(ast.memberExpression(base, ':', identifier));\n            pushLocation(marker);\n            base = parseCallExpression(base);\n            break;\n          case '(': case '{': // args\n            pushLocation(marker);\n            base = parseCallExpression(base);\n            break;\n          default:\n            return base;\n        }\n      } else if (StringLiteral === token.type) {\n        pushLocation(marker);\n        base = parseCallExpression(base);\n      } else {\n        break;\n      }\n    }\n\n    return base;\n  }\n\n  function parseCallExpression(base) {\n    if (Punctuator === token.type) {\n      switch (token.value) {\n        case '(':\n          next();\n          var expressions = [];\n          var expression = parseExpression();\n          if (null != expression) expressions.push(expression);\n          while (consume(',')) {\n            expression = parseExpectedExpression();\n            expressions.push(expression);\n          }\n\n          expect(')');\n          return finishNode(ast.callExpression(base, expressions));\n\n        case '{':\n          markLocation();\n          next();\n          var table = parseTableConstructor();\n          return finishNode(ast.tableCallExpression(base, table));\n      }\n    } else if (StringLiteral === token.type) {\n      return finishNode(ast.stringCallExpression(base, parsePrimaryExpression()));\n    }\n\n    raiseUnexpectedToken('function arguments', token);\n  }\n\n  function parsePrimaryExpression() {\n    var literals = StringLiteral | NumericLiteral | BooleanLiteral | NilLiteral | VarargLiteral\n      , value = token.value\n      , type = token.type\n      , marker;\n\n    if (trackLocations) marker = createLocationMarker();\n\n    if (type & literals) {\n      pushLocation(marker);\n      var raw = input.slice(token.range[0], token.range[1]);\n      next();\n      return finishNode(ast.literal(type, value, raw));\n    } else if (Keyword === type && 'function' === value) {\n      pushLocation(marker);\n      next();\n      return parseFunctionDeclaration(null);\n    } else if (consume('{')) {\n      pushLocation(marker);\n      return parseTableConstructor();\n    }\n  }\n\n  exports.parse = parse;\n\n  function parse(_input, _options) {\n    if ('undefined' === typeof _options && 'object' === typeof _input) {\n      _options = _input;\n      _input = undefined;\n    }\n    if (!_options) _options = {};\n\n    input = _input || '';\n    options = extend(defaultOptions, _options);\n    index = 0;\n    line = 1;\n    lineStart = 0;\n    length = input.length;\n    scopes = [[]];\n    scopeDepth = 0;\n    globals = [];\n    locations = [];\n\n    if (options.comments) comments = [];\n    if (!options.wait) return end();\n    return exports;\n  }\n  exports.write = write;\n\n  function write(_input) {\n    input += String(_input);\n    length = input.length;\n    return exports;\n  }\n  exports.end = end;\n\n  function end(_input) {\n    if ('undefined' !== typeof _input) write(_input);\n\n    length = input.length;\n    trackLocations = options.locations || options.ranges;\n    lookahead = lex();\n\n    var chunk = parseChunk();\n    if (options.comments) chunk.comments = comments;\n    if (options.scope) chunk.globals = globals;\n\n    if (locations.length > 0)\n      throw new Error('Location tracking failed. This is most likely a bug in luaparse');\n\n    return chunk;\n  }\n\n}));\n\n});\n\nace.define(\"ace/mode/lua_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar luaparse = require(\"../mode/lua/luaparse\");\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            luaparse.parse(value);\n        } catch(e) {\n            if (e instanceof SyntaxError) {\n                errors.push({\n                    row: e.line - 1,\n                    column: e.column,\n                    text: e.message,\n                    type: \"error\"\n                });\n            }\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/worker-php.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/php/php\",[], function(require, exports, module) {\n\nvar PHP = {Constants:{}};\n\nPHP.Constants.T_INCLUDE = 257;\nPHP.Constants.T_INCLUDE_ONCE = 258;\nPHP.Constants.T_EVAL = 259;\nPHP.Constants.T_REQUIRE = 260;\nPHP.Constants.T_REQUIRE_ONCE = 261;\nPHP.Constants.T_LOGICAL_OR = 262;\nPHP.Constants.T_LOGICAL_XOR = 263;\nPHP.Constants.T_LOGICAL_AND = 264;\nPHP.Constants.T_PRINT = 265;\nPHP.Constants.T_YIELD = 266;\nPHP.Constants.T_DOUBLE_ARROW = 267;\nPHP.Constants.T_YIELD_FROM = 268;\nPHP.Constants.T_PLUS_EQUAL = 269;\nPHP.Constants.T_MINUS_EQUAL = 270;\nPHP.Constants.T_MUL_EQUAL = 271;\nPHP.Constants.T_DIV_EQUAL = 272;\nPHP.Constants.T_CONCAT_EQUAL = 273;\nPHP.Constants.T_MOD_EQUAL = 274;\nPHP.Constants.T_AND_EQUAL = 275;\nPHP.Constants.T_OR_EQUAL = 276;\nPHP.Constants.T_XOR_EQUAL = 277;\nPHP.Constants.T_SL_EQUAL = 278;\nPHP.Constants.T_SR_EQUAL = 279;\nPHP.Constants.T_POW_EQUAL = 280;\nPHP.Constants.T_COALESCE = 281;\nPHP.Constants.T_BOOLEAN_OR = 282;\nPHP.Constants.T_BOOLEAN_AND = 283;\nPHP.Constants.T_IS_EQUAL = 284;\nPHP.Constants.T_IS_NOT_EQUAL = 285;\nPHP.Constants.T_IS_IDENTICAL = 286;\nPHP.Constants.T_IS_NOT_IDENTICAL = 287;\nPHP.Constants.T_SPACESHIP = 288;\nPHP.Constants.T_IS_SMALLER_OR_EQUAL = 289;\nPHP.Constants.T_IS_GREATER_OR_EQUAL = 290;\nPHP.Constants.T_SL = 291;\nPHP.Constants.T_SR = 292;\nPHP.Constants.T_INSTANCEOF = 293;\nPHP.Constants.T_INC = 294;\nPHP.Constants.T_DEC = 295;\nPHP.Constants.T_INT_CAST = 296;\nPHP.Constants.T_DOUBLE_CAST = 297;\nPHP.Constants.T_STRING_CAST = 298;\nPHP.Constants.T_ARRAY_CAST = 299;\nPHP.Constants.T_OBJECT_CAST = 300;\nPHP.Constants.T_BOOL_CAST = 301;\nPHP.Constants.T_UNSET_CAST = 302;\nPHP.Constants.T_POW = 303;\nPHP.Constants.T_NEW = 304;\nPHP.Constants.T_CLONE = 305;\nPHP.Constants.T_EXIT = 306;\nPHP.Constants.T_IF = 307;\nPHP.Constants.T_ELSEIF = 308;\nPHP.Constants.T_ELSE = 309;\nPHP.Constants.T_ENDIF = 310;\nPHP.Constants.T_LNUMBER = 311;\nPHP.Constants.T_DNUMBER = 312;\nPHP.Constants.T_STRING = 313;\nPHP.Constants.T_STRING_VARNAME = 314;\nPHP.Constants.T_VARIABLE = 315;\nPHP.Constants.T_NUM_STRING = 316;\nPHP.Constants.T_INLINE_HTML = 317;\nPHP.Constants.T_CHARACTER = 318;\nPHP.Constants.T_BAD_CHARACTER = 319;\nPHP.Constants.T_ENCAPSED_AND_WHITESPACE = 320;\nPHP.Constants.T_CONSTANT_ENCAPSED_STRING = 321;\nPHP.Constants.T_ECHO = 322;\nPHP.Constants.T_DO = 323;\nPHP.Constants.T_WHILE = 324;\nPHP.Constants.T_ENDWHILE = 325;\nPHP.Constants.T_FOR = 326;\nPHP.Constants.T_ENDFOR = 327;\nPHP.Constants.T_FOREACH = 328;\nPHP.Constants.T_ENDFOREACH = 329;\nPHP.Constants.T_DECLARE = 330;\nPHP.Constants.T_ENDDECLARE = 331;\nPHP.Constants.T_AS = 332;\nPHP.Constants.T_SWITCH = 333;\nPHP.Constants.T_ENDSWITCH = 334;\nPHP.Constants.T_CASE = 335;\nPHP.Constants.T_DEFAULT = 336;\nPHP.Constants.T_BREAK = 337;\nPHP.Constants.T_CONTINUE = 338;\nPHP.Constants.T_GOTO = 339;\nPHP.Constants.T_FUNCTION = 340;\nPHP.Constants.T_CONST = 341;\nPHP.Constants.T_RETURN = 342;\nPHP.Constants.T_TRY = 343;\nPHP.Constants.T_CATCH = 344;\nPHP.Constants.T_FINALLY = 345;\nPHP.Constants.T_THROW = 346;\nPHP.Constants.T_USE = 347;\nPHP.Constants.T_INSTEADOF = 348;\nPHP.Constants.T_GLOBAL = 349;\nPHP.Constants.T_STATIC = 350;\nPHP.Constants.T_ABSTRACT = 351;\nPHP.Constants.T_FINAL = 352;\nPHP.Constants.T_PRIVATE = 353;\nPHP.Constants.T_PROTECTED = 354;\nPHP.Constants.T_PUBLIC = 355;\nPHP.Constants.T_VAR = 356;\nPHP.Constants.T_UNSET = 357;\nPHP.Constants.T_ISSET = 358;\nPHP.Constants.T_EMPTY = 359;\nPHP.Constants.T_HALT_COMPILER = 360;\nPHP.Constants.T_CLASS = 361;\nPHP.Constants.T_TRAIT = 362;\nPHP.Constants.T_INTERFACE = 363;\nPHP.Constants.T_EXTENDS = 364;\nPHP.Constants.T_IMPLEMENTS = 365;\nPHP.Constants.T_OBJECT_OPERATOR = 366;\nPHP.Constants.T_LIST = 367;\nPHP.Constants.T_ARRAY = 368;\nPHP.Constants.T_CALLABLE = 369;\nPHP.Constants.T_CLASS_C = 370;\nPHP.Constants.T_TRAIT_C = 371;\nPHP.Constants.T_METHOD_C = 372;\nPHP.Constants.T_FUNC_C = 373;\nPHP.Constants.T_LINE = 374;\nPHP.Constants.T_FILE = 375;\nPHP.Constants.T_COMMENT = 376;\nPHP.Constants.T_DOC_COMMENT = 377;\nPHP.Constants.T_OPEN_TAG = 378;\nPHP.Constants.T_OPEN_TAG_WITH_ECHO = 379;\nPHP.Constants.T_CLOSE_TAG = 380;\nPHP.Constants.T_WHITESPACE = 381;\nPHP.Constants.T_START_HEREDOC = 382;\nPHP.Constants.T_END_HEREDOC = 383;\nPHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES = 384;\nPHP.Constants.T_CURLY_OPEN = 385;\nPHP.Constants.T_PAAMAYIM_NEKUDOTAYIM = 386;\nPHP.Constants.T_NAMESPACE = 387;\nPHP.Constants.T_NS_C = 388;\nPHP.Constants.T_DIR = 389;\nPHP.Constants.T_NS_SEPARATOR = 390;\nPHP.Constants.T_ELLIPSIS = 391;\n\nPHP.Lexer = function(src, ini) {\n    var heredoc, heredocEndAllowed,\n\n    stateStack = ['INITIAL'], stackPos = 0,\n    swapState = function(state) {\n        stateStack[stackPos] = state;\n    },\n    pushState = function(state) {\n        stateStack[++stackPos] = state;\n    },\n    popState = function() {\n        --stackPos;\n    },\n\n    shortOpenTag = ini === undefined || /^(on|true|1)$/i.test(ini.short_open_tag),\n    openTag = shortOpenTag\n        ? /^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|<\\?|\\<script language\\=('|\")?php('|\")?\\>)/i\n        : /^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|\\<script language\\=('|\")?php('|\")?\\>)/i,\n    inlineHtml = shortOpenTag\n        ? /[^<]*(?:<(?!\\?|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i\n        : /[^<]*(?:<(?!\\?=|\\?php[ \\t\\r\\n]|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i,\n    labelRegexPart = '[a-zA-Z_\\\\x7f-\\\\uffff][a-zA-Z0-9_\\\\x7f-\\\\uffff]*',\n    stringRegexPart = function(quote) {\n        return '[^' + quote + '\\\\\\\\${]*(?:(?:\\\\\\\\[\\\\s\\\\S]|\\\\$(?!\\\\{|[a-zA-Z_\\\\x7f-\\\\uffff])|\\\\{(?!\\\\$))[^' + quote + '\\\\\\\\${]*)*';\n    },\n\n    sharedStringTokens = [\n        {\n            value: PHP.Constants.T_VARIABLE,\n            re: new RegExp('^\\\\$' + labelRegexPart + '(?=\\\\[)'),\n            func: function() {\n                pushState('VAR_OFFSET');\n            }\n        },\n        {\n            value: PHP.Constants.T_VARIABLE,\n            re: new RegExp('^\\\\$' + labelRegexPart + '(?=->' + labelRegexPart + ')'),\n            func: function() {\n                pushState('LOOKING_FOR_PROPERTY');\n            }\n        },\n        {\n            value: PHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES,\n            re: new RegExp('^\\\\$\\\\{(?=' + labelRegexPart + '[\\\\[}])'),\n            func: function() {\n                pushState('LOOKING_FOR_VARNAME');\n            }\n        },\n        {\n            value: PHP.Constants.T_VARIABLE,\n            re: new RegExp('^\\\\$' + labelRegexPart)\n        },\n        {\n            value: PHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES,\n            re: /^\\$\\{/,\n            func: function() {\n                pushState('IN_SCRIPTING');\n            }\n        },\n        {\n            value: PHP.Constants.T_CURLY_OPEN,\n            re: /^\\{(?=\\$)/,\n            func: function() {\n                pushState('IN_SCRIPTING');\n            }\n        }\n    ],\n    data = {\n        'INITIAL': [\n            {\n                value: PHP.Constants.T_OPEN_TAG_WITH_ECHO,\n                re: /^<\\?=/i,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_OPEN_TAG,\n                re: openTag,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_INLINE_HTML,\n                re: inlineHtml\n            },\n        ],\n        'IN_SCRIPTING': [\n            {\n                value: PHP.Constants.T_WHITESPACE,\n                re: /^[ \\n\\r\\t]+/\n            },\n            {\n                value: PHP.Constants.T_ABSTRACT,\n                re: /^abstract\\b/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_AND,\n                re: /^and\\b/i\n            },\n            {\n                value: PHP.Constants.T_ARRAY,\n                re: /^array\\b/i\n            },\n            {\n                value: PHP.Constants.T_AS,\n                re: /^as\\b/i\n            },\n            {\n                value: PHP.Constants.T_BREAK,\n                re: /^break\\b/i\n            },\n            {\n                value: PHP.Constants.T_CALLABLE,\n                re: /^callable\\b/i\n            },\n            {\n                value: PHP.Constants.T_CASE,\n                re: /^case\\b/i\n            },\n            {\n                value: PHP.Constants.T_CATCH,\n                re: /^catch\\b/i\n            },\n            {\n                value: PHP.Constants.T_CLASS,\n                re: /^class\\b/i,\n            },\n            {\n                value: PHP.Constants.T_CLONE,\n                re: /^clone\\b/i\n            },\n            {\n                value: PHP.Constants.T_CONST,\n                re: /^const\\b/i\n            },\n            {\n                value: PHP.Constants.T_CONTINUE,\n                re: /^continue\\b/i\n            },\n            {\n                value: PHP.Constants.T_DECLARE,\n                re: /^declare\\b/i\n            },\n            {\n                value: PHP.Constants.T_DEFAULT,\n                re: /^default\\b/i\n            },\n            {\n                value: PHP.Constants.T_DO,\n                re: /^do\\b/i\n            },\n            {\n                value: PHP.Constants.T_ECHO,\n                re: /^echo\\b/i\n            },\n            {\n                value: PHP.Constants.T_ELSE,\n                re: /^else\\b/i\n            },\n            {\n                value: PHP.Constants.T_ELSEIF,\n                re: /^elseif\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDDECLARE,\n                re: /^enddeclare\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDFOR,\n                re: /^endfor\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDFOREACH,\n                re: /^endforeach\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDIF,\n                re: /^endif\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDSWITCH,\n                re: /^endswitch\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDWHILE,\n                re: /^endwhile\\b/i\n            },\n            {\n                value: PHP.Constants.T_EMPTY,\n                re: /^empty\\b/i\n            },\n            {\n                value: PHP.Constants.T_EVAL,\n                re: /^eval\\b/i\n            },\n            {\n                value: PHP.Constants.T_EXIT,\n                re: /^(?:exit|die)\\b/i\n            },\n            {\n                value: PHP.Constants.T_EXTENDS,\n                re: /^extends\\b/i\n            },\n            {\n                value: PHP.Constants.T_FINAL,\n                re: /^final\\b/i\n            },\n            {\n                value: PHP.Constants.T_FINALLY,\n                re: /^finally\\b/i\n            },\n            {\n                value: PHP.Constants.T_FOR,\n                re: /^for\\b/i\n            },\n            {\n                value: PHP.Constants.T_FOREACH,\n                re: /^foreach\\b/i\n            },\n            {\n                value: PHP.Constants.T_FUNCTION,\n                re: /^function\\b/i\n            },\n            {\n                value: PHP.Constants.T_GLOBAL,\n                re: /^global\\b/i\n            },\n            {\n                value: PHP.Constants.T_GOTO,\n                re: /^goto\\b/i\n            },\n            {\n                value: PHP.Constants.T_IF,\n                re: /^if\\b/i\n            },\n            {\n                value: PHP.Constants.T_IMPLEMENTS,\n                re: /^implements\\b/i\n            },\n            {\n                value: PHP.Constants.T_INCLUDE,\n                re: /^include\\b/i\n            },\n            {\n                value: PHP.Constants.T_INCLUDE_ONCE,\n                re: /^include_once\\b/i\n            },\n            {\n                value: PHP.Constants.T_INSTANCEOF,\n                re: /^instanceof\\b/i\n            },\n            {\n                value: PHP.Constants.T_INSTEADOF,\n                re: /^insteadof\\b/i\n            },\n            {\n                value: PHP.Constants.T_INTERFACE,\n                re: /^interface\\b/i\n            },\n            {\n                value: PHP.Constants.T_ISSET,\n                re: /^isset\\b/i\n            },\n            {\n                value: PHP.Constants.T_LIST,\n                re: /^list\\b/i\n            },\n            {\n                value: PHP.Constants.T_NAMESPACE,\n                re: /^namespace\\b/i\n            },\n            {\n                value: PHP.Constants.T_NEW,\n                re: /^new\\b/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_OR,\n                re: /^or\\b/i\n            },\n            {\n                value: PHP.Constants.T_PRINT,\n                re: /^print\\b/i\n            },\n            {\n                value: PHP.Constants.T_PRIVATE,\n                re: /^private\\b/i\n            },\n            {\n                value: PHP.Constants.T_PROTECTED,\n                re: /^protected\\b/i\n            },\n            {\n                value: PHP.Constants.T_PUBLIC,\n                re: /^public\\b/i\n            },\n            {\n                value: PHP.Constants.T_REQUIRE,\n                re: /^require\\b/i\n            },\n            {\n                value: PHP.Constants.T_REQUIRE_ONCE,\n                re: /^require_once\\b/i\n            },\n            {\n                value: PHP.Constants.T_STATIC,\n                re: /^static\\b/i\n            },\n            {\n                value: PHP.Constants.T_SWITCH,\n                re: /^switch\\b/i\n            },\n            {\n                value: PHP.Constants.T_THROW,\n                re: /^throw\\b/i\n            },\n            {\n                value: PHP.Constants.T_TRAIT,\n                re: /^trait\\b/i,\n            },\n            {\n                value: PHP.Constants.T_TRY,\n                re: /^try\\b/i\n            },\n            {\n                value: PHP.Constants.T_UNSET,\n                re: /^unset\\b/i\n            },\n            {\n                value: PHP.Constants.T_USE,\n                re: /^use\\b/i\n            },\n            {\n                value: PHP.Constants.T_VAR,\n                re: /^var\\b/i\n            },\n            {\n                value: PHP.Constants.T_WHILE,\n                re: /^while\\b/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_XOR,\n                re: /^xor\\b/i\n            },\n            {\n                value: PHP.Constants.T_YIELD_FROM,\n                re: /^yield\\s+from\\b/i\n            },\n            {\n                value: PHP.Constants.T_YIELD,\n                re: /^yield\\b/i\n            },\n            {\n                value: PHP.Constants.T_RETURN,\n                re: /^return\\b/i\n            },\n            {\n                value: PHP.Constants.T_METHOD_C,\n                re: /^__METHOD__\\b/i\n            },\n            {\n                value: PHP.Constants.T_LINE,\n                re: /^__LINE__\\b/i\n            },\n            {\n                value: PHP.Constants.T_FILE,\n                re: /^__FILE__\\b/i\n            },\n            {\n                value: PHP.Constants.T_FUNC_C,\n                re: /^__FUNCTION__\\b/i\n            },\n            {\n                value: PHP.Constants.T_NS_C,\n                re: /^__NAMESPACE__\\b/i\n            },\n            {\n                value: PHP.Constants.T_TRAIT_C,\n                re: /^__TRAIT__\\b/i\n            },\n            {\n                value: PHP.Constants.T_DIR,\n                re: /^__DIR__\\b/i\n            },\n            {\n                value: PHP.Constants.T_CLASS_C,\n                re: /^__CLASS__\\b/i\n            },\n            {\n                value: PHP.Constants.T_AND_EQUAL,\n                re: /^&=/\n            },\n            {\n                value: PHP.Constants.T_ARRAY_CAST,\n                re: /^\\([ \\t]*array[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_BOOL_CAST,\n                re: /^\\([ \\t]*(?:bool|boolean)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_DOUBLE_CAST,\n                re: /^\\([ \\t]*(?:real|float|double)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_INT_CAST,\n                re: /^\\([ \\t]*(?:int|integer)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_OBJECT_CAST,\n                re: /^\\([ \\t]*object[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_STRING_CAST,\n                re: /^\\([ \\t]*(?:binary|string)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_UNSET_CAST,\n                re: /^\\([ \\t]*unset[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_BOOLEAN_AND,\n                re: /^&&/\n            },\n            {\n                value: PHP.Constants.T_BOOLEAN_OR,\n                re: /^\\|\\|/\n            },\n            {\n                value: PHP.Constants.T_CLOSE_TAG,\n                re: /^(?:\\?>|<\\/script>)(\\r\\n|\\r|\\n)?/i,\n                func: function() {\n                    swapState('INITIAL');\n                }\n            },\n            {\n                value: PHP.Constants.T_DOUBLE_ARROW,\n                re: /^=>/\n            },\n            {\n                value: PHP.Constants.T_PAAMAYIM_NEKUDOTAYIM,\n                re: /^::/\n            },\n            {\n                value: PHP.Constants.T_INC,\n                re: /^\\+\\+/\n            },\n            {\n                value: PHP.Constants.T_DEC,\n                re: /^--/\n            },\n            {\n                value: PHP.Constants.T_CONCAT_EQUAL,\n                re: /^\\.=/\n            },\n            {\n                value: PHP.Constants.T_DIV_EQUAL,\n                re: /^\\/=/\n            },\n            {\n                value: PHP.Constants.T_XOR_EQUAL,\n                re: /^\\^=/\n            },\n            {\n                value: PHP.Constants.T_MUL_EQUAL,\n                re: /^\\*=/\n            },\n            {\n                value: PHP.Constants.T_MOD_EQUAL,\n                re: /^%=/\n            },\n            {\n                value: PHP.Constants.T_SL_EQUAL,\n                re: /^<<=/\n            },\n            {\n                value: PHP.Constants.T_START_HEREDOC,\n                re: new RegExp('^[bB]?<<<[ \\\\t]*\\'(' + labelRegexPart + ')\\'(?:\\\\r\\\\n|\\\\r|\\\\n)'),\n                func: function(result) {\n                    heredoc = result[1];\n                    swapState('NOWDOC');\n                }\n            },\n            {\n                value: PHP.Constants.T_START_HEREDOC,\n                re: new RegExp('^[bB]?<<<[ \\\\t]*(\"?)(' + labelRegexPart + ')\\\\1(?:\\\\r\\\\n|\\\\r|\\\\n)'),\n                func: function(result) {\n                    heredoc = result[2];\n                    heredocEndAllowed = true;\n                    swapState('HEREDOC');\n                }\n            },\n            {\n                value: PHP.Constants.T_SL,\n                re: /^<</\n            },\n            {\n                value: PHP.Constants.T_SPACESHIP,\n                re: /^<=>/\n            },\n            {\n                value: PHP.Constants.T_IS_SMALLER_OR_EQUAL,\n                re: /^<=/\n            },\n            {\n                value: PHP.Constants.T_SR_EQUAL,\n                re: /^>>=/\n            },\n            {\n                value: PHP.Constants.T_SR,\n                re: /^>>/\n            },\n            {\n                value: PHP.Constants.T_IS_GREATER_OR_EQUAL,\n                re: /^>=/\n            },\n            {\n                value: PHP.Constants.T_OR_EQUAL,\n                re: /^\\|=/\n            },\n            {\n                value: PHP.Constants.T_PLUS_EQUAL,\n                re: /^\\+=/\n            },\n            {\n                value: PHP.Constants.T_MINUS_EQUAL,\n                re: /^-=/\n            },\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: new RegExp('^->(?=[ \\n\\r\\t]*' + labelRegexPart + ')'),\n                func: function() {\n                    pushState('LOOKING_FOR_PROPERTY');\n                }\n            },\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: /^->/i\n            },\n            {\n                value: PHP.Constants.T_ELLIPSIS,\n                re: /^\\.\\.\\./\n            },\n            {\n                value: PHP.Constants.T_POW_EQUAL,\n                re: /^\\*\\*=/\n            },\n            {\n                value: PHP.Constants.T_POW,\n                re: /^\\*\\*/\n            },\n            {\n                value: PHP.Constants.T_COALESCE,\n                re: /^\\?\\?/\n            },\n            {\n                value: PHP.Constants.T_COMMENT,\n                re: /^\\/\\*([\\S\\s]*?)(?:\\*\\/|$)/\n            },\n            {\n                value: PHP.Constants.T_COMMENT,\n                re: /^(?:\\/\\/|#)[^\\r\\n?]*(?:\\?(?!>)[^\\r\\n?]*)*(?:\\r\\n|\\r|\\n)?/\n            },\n            {\n                value: PHP.Constants.T_IS_IDENTICAL,\n                re: /^===/\n            },\n            {\n                value: PHP.Constants.T_IS_EQUAL,\n                re: /^==/\n            },\n            {\n                value: PHP.Constants.T_IS_NOT_IDENTICAL,\n                re: /^!==/\n            },\n            {\n                value: PHP.Constants.T_IS_NOT_EQUAL,\n                re: /^(!=|<>)/\n            },\n            {\n                value: PHP.Constants.T_DNUMBER,\n                re: /^(?:[0-9]+\\.[0-9]*|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?/\n            },\n            {\n                value: PHP.Constants.T_DNUMBER,\n                re: /^[0-9]+[eE][+-]?[0-9]+/\n            },\n            {\n                value: PHP.Constants.T_LNUMBER,\n                re: /^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i\n            },\n            {\n                value: PHP.Constants.T_VARIABLE,\n                re: new RegExp('^\\\\$' + labelRegexPart)\n            },\n            {\n                value: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,\n                re: /^[bB]?'[^'\\\\]*(?:\\\\[\\s\\S][^'\\\\]*)*'/,\n            },\n            {\n                value: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,\n                re: new RegExp('^[bB]?\"' + stringRegexPart('\"') + '\"')\n            },\n            {\n                value: -1,\n                re: /^[bB]?\"/,\n                func: function() {\n                    swapState('DOUBLE_QUOTES');\n                }\n            },\n            {\n                value: -1,\n                re: /^`/,\n                func: function() {\n                    swapState('BACKTICKS');\n                }\n            },\n            {\n                value: PHP.Constants.T_NS_SEPARATOR,\n                re: /^\\\\/\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: /^[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            },\n            {\n                value: -1,\n                re: /^\\{/,\n                func: function() {\n                    pushState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: -1,\n                re: /^\\}/,\n                func: function() {\n                    if (stackPos > 0) {\n                        popState();\n                    }\n                }\n            },\n            {\n                value: -1,\n                re: /^[\\[\\];:?()!.,><=+-/*|&@^%\"'$~]/\n            }\n        ],\n        'DOUBLE_QUOTES': sharedStringTokens.concat([\n            {\n                value: -1,\n                re: /^\"/,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                re: new RegExp('^' + stringRegexPart('\"'))\n            }\n        ]),\n        'BACKTICKS': sharedStringTokens.concat([\n            {\n                value: -1,\n                re: /^`/,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                re: new RegExp('^' + stringRegexPart('`'))\n            }\n        ]),\n        'VAR_OFFSET': [\n            {\n                value: -1,\n                re: /^\\]/,\n                func: function() {\n                    popState();\n                }\n            },\n            {\n                value: PHP.Constants.T_NUM_STRING,\n                re: /^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i\n            },\n            {\n                value: PHP.Constants.T_VARIABLE,\n                re: new RegExp('^\\\\$' + labelRegexPart)\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: new RegExp('^' + labelRegexPart)\n            },\n            {\n                value: -1,\n                re: /^[;:,.\\[()|^&+-/*=%!~$<>?@{}\"`]/\n            }\n        ],\n        'LOOKING_FOR_PROPERTY': [\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: /^->/\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: new RegExp('^' + labelRegexPart),\n                func: function() {\n                    popState();\n                }\n            },\n            {\n                value: PHP.Constants.T_WHITESPACE,\n                re: /^[ \\n\\r\\t]+/\n            }\n        ],\n        'LOOKING_FOR_VARNAME': [\n            {\n                value: PHP.Constants.T_STRING_VARNAME,\n                re: new RegExp('^' + labelRegexPart + '(?=[\\\\[}])'),\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            }\n        ],\n        'NOWDOC': [\n            {\n                value: PHP.Constants.T_END_HEREDOC,\n                matchFunc: function(src) {\n                    var re = new RegExp('^' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    if (src.match(re)) {\n                        return [src.substr(0, heredoc.length)];\n                    } else {\n                        return null;\n                    }\n                },\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                matchFunc: function(src) {\n                    var re = new RegExp('[\\\\r\\\\n]' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    var result = re.exec(src);\n                    var end = result ? result.index + 1 : src.length;\n                    return [src.substring(0, end)];\n                }\n            }\n        ],\n        'HEREDOC': sharedStringTokens.concat([\n            {\n                value: PHP.Constants.T_END_HEREDOC,\n                matchFunc: function(src) {\n                    if (!heredocEndAllowed) {\n                        return null;\n                    }\n                    var re = new RegExp('^' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    if (src.match(re)) {\n                        return [src.substr(0, heredoc.length)];\n                    } else {\n                        return null;\n                    }\n                },\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                matchFunc: function(src) {\n                    var end = src.length;\n                    var re = new RegExp('^' + stringRegexPart(''));\n                    var result = re.exec(src);\n                    if (result) {\n                        end = result[0].length;\n                    }\n                    re = new RegExp('([\\\\r\\\\n])' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    result = re.exec(src.substring(0, end));\n                    if (result) {\n                        end = result.index + 1;\n                        heredocEndAllowed = true;\n                    } else {\n                        heredocEndAllowed = false;\n                    }\n                    if (end == 0) {\n                        return null;\n                    }\n                    return [src.substring(0, end)];\n                }\n            }\n        ])\n    };\n\n    var results = [],\n    line = 1,\n    cancel = true;\n\n    if (src === null) {\n        return results;\n    }\n\n    if (typeof src !== \"string\") {\n        src = src.toString();\n    }\n\n    while (src.length > 0 && cancel === true) {\n        var state = stateStack[stackPos];\n        var tokens = data[state];\n        cancel = tokens.some(function(token){\n            var result = token.matchFunc !== undefined\n                ? token.matchFunc(src)\n                : src.match(token.re);\n            if (result !== null) {\n                if (result[0].length == 0) {\n                    throw new Error(\"empty match\");\n                }\n\n                if (token.func !== undefined) {\n                    token.func(result);\n                }\n\n                if (token.value === -1) {\n                    results.push(result[0]);\n                } else {\n                    var resultString = result[0];\n                    results.push([\n                        parseInt(token.value, 10),\n                        resultString,\n                        line\n                        ]);\n                    line += resultString.split('\\n').length - 1;\n                }\n\n                src = src.substring(result[0].length);\n\n                return true;\n            }\n            return false;\n        });\n    }\n\n    return results;\n};\n\n\nPHP.Parser = function ( preprocessedTokens, eval ) {\n\n    var yybase = this.yybase,\n    yydefault = this.yydefault,\n    yycheck = this.yycheck,\n    yyaction = this.yyaction,\n    yylen = this.yylen,\n    yygbase = this.yygbase,\n    yygcheck = this.yygcheck,\n    yyp = this.yyp,\n    yygoto = this.yygoto,\n    yylhs = this.yylhs,\n    terminals = this.terminals,\n    translate = this.translate,\n    yygdefault = this.yygdefault;\n\n\n    this.pos = -1;\n    this.line = 1;\n\n    this.tokenMap = this.createTokenMap( );\n\n    this.dropTokens = {};\n    this.dropTokens[ PHP.Constants.T_WHITESPACE ] = 1;\n    this.dropTokens[ PHP.Constants.T_OPEN_TAG ] = 1;\n    var tokens = [];\n    preprocessedTokens.forEach( function( token, index ) {\n        if ( typeof token === \"object\" && token[ 0 ] === PHP.Constants.T_OPEN_TAG_WITH_ECHO) {\n            tokens.push([\n                PHP.Constants.T_OPEN_TAG,\n                token[ 1 ],\n                token[ 2 ]\n                ]);\n            tokens.push([\n                PHP.Constants.T_ECHO,\n                token[ 1 ],\n                token[ 2 ]\n                ]);\n        } else {\n            tokens.push( token );\n        }\n    });\n    this.tokens = tokens;\n    var tokenId = this.TOKEN_NONE;\n    this.startAttributes = {\n        'startLine': 1\n    };\n\n    this.endAttributes = {};\n    var attributeStack = [ this.startAttributes ];\n    var state = 0;\n    var stateStack = [ state ];\n    this.yyastk = [];\n    this.stackPos  = 0;\n\n    var yyn;\n\n    var origTokenId;\n\n\n    for (;;) {\n\n        if ( yybase[ state ] === 0 ) {\n            yyn = yydefault[ state ];\n        } else {\n            if (tokenId === this.TOKEN_NONE ) {\n                origTokenId = this.getNextToken( );\n                tokenId = (origTokenId >= 0 && origTokenId < this.TOKEN_MAP_SIZE) ? translate[ origTokenId ] : this.TOKEN_INVALID;\n\n                attributeStack[ this.stackPos ] = this.startAttributes;\n            }\n\n            if (((yyn = yybase[ state ] + tokenId) >= 0\n                && yyn < this.YYLAST && yycheck[ yyn ] === tokenId\n                || (state < this.YY2TBLSTATE\n                    && (yyn = yybase[state + this.YYNLSTATES] + tokenId) >= 0\n                    && yyn < this.YYLAST\n                    && yycheck[ yyn ] === tokenId))\n            && (yyn = yyaction[ yyn ]) !== this.YYDEFAULT ) {\n                if (yyn > 0) {\n                    ++this.stackPos;\n\n                    stateStack[ this.stackPos ] = state = yyn;\n                    this.yyastk[ this.stackPos ] = this.tokenValue;\n                    attributeStack[ this.stackPos ] = this.startAttributes;\n                    tokenId = this.TOKEN_NONE;\n\n                    if (yyn < this.YYNLSTATES)\n                        continue;\n                    yyn -= this.YYNLSTATES;\n                } else {\n                    yyn = -yyn;\n                }\n            } else {\n                yyn = yydefault[ state ];\n            }\n        }\n\n        for (;;) {\n\n            if ( yyn === 0 ) {\n                return this.yyval;\n            } else if (yyn !== this.YYUNEXPECTED ) {\n                for (var attr in this.endAttributes) {\n                    attributeStack[ this.stackPos - yylen[ yyn ] ][ attr ] = this.endAttributes[ attr ];\n                }\n                this.stackPos -= yylen[ yyn ];\n                yyn = yylhs[ yyn ];\n                if ((yyp = yygbase[ yyn ] + stateStack[ this.stackPos ]) >= 0\n                    && yyp < this.YYGLAST\n                    && yygcheck[ yyp ] === yyn) {\n                    state = yygoto[ yyp ];\n                } else {\n                    state = yygdefault[ yyn ];\n                }\n\n                ++this.stackPos;\n\n                stateStack[ this.stackPos ] = state;\n                this.yyastk[ this.stackPos ] = this.yyval;\n                attributeStack[ this.stackPos ] = this.startAttributes;\n            } else {\n                if (eval !== true) {\n\n                    var expected = [];\n\n                    for (var i = 0; i < this.TOKEN_MAP_SIZE; ++i) {\n                        if ((yyn = yybase[ state ] + i) >= 0 && yyn < this.YYLAST && yycheck[ yyn ] == i\n                         || state < this.YY2TBLSTATE\n                            && (yyn = yybase[ state + this.YYNLSTATES] + i)\n                            && yyn < this.YYLAST && yycheck[ yyn ] == i\n                        ) {\n                            if (yyaction[ yyn ] != this.YYUNEXPECTED) {\n                                if (expected.length == 4) {\n                                    expected = [];\n                                    break;\n                                }\n\n                                expected.push( this.terminals[ i ] );\n                            }\n                        }\n                    }\n\n                    var expectedString = '';\n                    if (expected.length) {\n                        expectedString = ', expecting ' + expected.join(' or ');\n                    }\n                    throw new PHP.ParseError('syntax error, unexpected ' + terminals[ tokenId ] + expectedString, this.startAttributes['startLine']);\n                } else {\n                    return this.startAttributes['startLine'];\n                }\n\n            }\n\n            if (state < this.YYNLSTATES)\n                break;\n            yyn = state - this.YYNLSTATES;\n        }\n    }\n};\n\nPHP.ParseError = function( msg, line ) {\n    this.message = msg;\n    this.line = line;\n};\n\nPHP.Parser.prototype.getNextToken = function( ) {\n\n    this.startAttributes = {};\n    this.endAttributes = {};\n\n    var token,\n    tmp;\n\n    while (this.tokens[++this.pos] !== undefined) {\n        token = this.tokens[this.pos];\n\n        if (typeof token === \"string\") {\n            this.startAttributes['startLine'] = this.line;\n            this.endAttributes['endLine'] = this.line;\n            if ('b\"' === token) {\n                this.tokenValue = 'b\"';\n                return '\"'.charCodeAt(0);\n            } else {\n                this.tokenValue = token;\n                return token.charCodeAt(0);\n            }\n        } else {\n\n\n\n            this.line += ((tmp = token[ 1 ].match(/\\n/g)) === null) ? 0 : tmp.length;\n\n            if (PHP.Constants.T_COMMENT === token[0]) {\n\n                if (!Array.isArray(this.startAttributes['comments'])) {\n                    this.startAttributes['comments'] = [];\n                }\n\n                this.startAttributes['comments'].push( {\n                    type: \"comment\",\n                    comment: token[1],\n                    line: token[2]\n                });\n\n            } else if (PHP.Constants.T_DOC_COMMENT === token[0]) {\n                this.startAttributes['comments'].push( new PHPParser_Comment_Doc(token[1], token[2]) );\n            } else if (this.dropTokens[token[0]] === undefined) {\n                this.tokenValue = token[1];\n                this.startAttributes['startLine'] = token[2];\n                this.endAttributes['endLine'] = this.line;\n\n                return this.tokenMap[token[0]];\n            }\n        }\n    }\n\n    this.startAttributes['startLine'] = this.line;\n    return 0;\n};\n\nPHP.Parser.prototype.tokenName = function( token ) {\n    var constants = [\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_YIELD\",\"T_DOUBLE_ARROW\",\"T_YIELD_FROM\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_POW_EQUAL\",\"T_COALESCE\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_SPACESHIP\",\"T_IS_SMALLER_OR_EQUAL\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"T_INSTANCEOF\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"T_POW\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_CHARACTER\",\"T_BAD_CHARACTER\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_FINALLY\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_DOUBLE_ARROW\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_COMMENT\",\"T_DOC_COMMENT\",\"T_OPEN_TAG\",\"T_OPEN_TAG_WITH_ECHO\",\"T_CLOSE_TAG\",\"T_WHITESPACE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\",\"T_ELLIPSIS\"];\n    var current = \"UNKNOWN\";\n    constants.some(function( constant ) {\n        if (PHP.Constants[ constant ] === token) {\n            current = constant;\n            return true;\n        } else {\n            return false;\n        }\n    });\n\n    return current;\n};\n\nPHP.Parser.prototype.createTokenMap = function() {\n    var tokenMap = {},\n    name,\n    i;\n    for ( i = 256; i < 1000; ++i ) {\n        if( PHP.Constants.T_OPEN_TAG_WITH_ECHO === i ) {\n            tokenMap[ i ] = PHP.Constants.T_ECHO;\n        } else if( PHP.Constants.T_CLOSE_TAG === i ) {\n            tokenMap[ i ] = 59;\n        } else if ( 'UNKNOWN' !== (name = this.tokenName( i ) ) ) { \n            tokenMap[ i ] =  this[name];\n        }\n    }\n    return tokenMap;\n};\n\nPHP.Parser.prototype.TOKEN_NONE    = -1;\nPHP.Parser.prototype.TOKEN_INVALID = 157;\n\nPHP.Parser.prototype.TOKEN_MAP_SIZE = 392;\n\nPHP.Parser.prototype.YYLAST       = 889;\nPHP.Parser.prototype.YY2TBLSTATE  = 337;\nPHP.Parser.prototype.YYGLAST      = 410;\nPHP.Parser.prototype.YYNLSTATES   = 564;\nPHP.Parser.prototype.YYUNEXPECTED = 32767;\nPHP.Parser.prototype.YYDEFAULT    = -32766;\nPHP.Parser.prototype.YYERRTOK = 256;\nPHP.Parser.prototype.T_INCLUDE = 257;\nPHP.Parser.prototype.T_INCLUDE_ONCE = 258;\nPHP.Parser.prototype.T_EVAL = 259;\nPHP.Parser.prototype.T_REQUIRE = 260;\nPHP.Parser.prototype.T_REQUIRE_ONCE = 261;\nPHP.Parser.prototype.T_LOGICAL_OR = 262;\nPHP.Parser.prototype.T_LOGICAL_XOR = 263;\nPHP.Parser.prototype.T_LOGICAL_AND = 264;\nPHP.Parser.prototype.T_PRINT = 265;\nPHP.Parser.prototype.T_YIELD = 266;\nPHP.Parser.prototype.T_DOUBLE_ARROW = 267;\nPHP.Parser.prototype.T_YIELD_FROM = 268;\nPHP.Parser.prototype.T_PLUS_EQUAL = 269;\nPHP.Parser.prototype.T_MINUS_EQUAL = 270;\nPHP.Parser.prototype.T_MUL_EQUAL = 271;\nPHP.Parser.prototype.T_DIV_EQUAL = 272;\nPHP.Parser.prototype.T_CONCAT_EQUAL = 273;\nPHP.Parser.prototype.T_MOD_EQUAL = 274;\nPHP.Parser.prototype.T_AND_EQUAL = 275;\nPHP.Parser.prototype.T_OR_EQUAL = 276;\nPHP.Parser.prototype.T_XOR_EQUAL = 277;\nPHP.Parser.prototype.T_SL_EQUAL = 278;\nPHP.Parser.prototype.T_SR_EQUAL = 279;\nPHP.Parser.prototype.T_POW_EQUAL = 280;\nPHP.Parser.prototype.T_COALESCE = 281;\nPHP.Parser.prototype.T_BOOLEAN_OR = 282;\nPHP.Parser.prototype.T_BOOLEAN_AND = 283;\nPHP.Parser.prototype.T_IS_EQUAL = 284;\nPHP.Parser.prototype.T_IS_NOT_EQUAL = 285;\nPHP.Parser.prototype.T_IS_IDENTICAL = 286;\nPHP.Parser.prototype.T_IS_NOT_IDENTICAL = 287;\nPHP.Parser.prototype.T_SPACESHIP = 288;\nPHP.Parser.prototype.T_IS_SMALLER_OR_EQUAL = 289;\nPHP.Parser.prototype.T_IS_GREATER_OR_EQUAL = 290;\nPHP.Parser.prototype.T_SL = 291;\nPHP.Parser.prototype.T_SR = 292;\nPHP.Parser.prototype.T_INSTANCEOF = 293;\nPHP.Parser.prototype.T_INC = 294;\nPHP.Parser.prototype.T_DEC = 295;\nPHP.Parser.prototype.T_INT_CAST = 296;\nPHP.Parser.prototype.T_DOUBLE_CAST = 297;\nPHP.Parser.prototype.T_STRING_CAST = 298;\nPHP.Parser.prototype.T_ARRAY_CAST = 299;\nPHP.Parser.prototype.T_OBJECT_CAST = 300;\nPHP.Parser.prototype.T_BOOL_CAST = 301;\nPHP.Parser.prototype.T_UNSET_CAST = 302;\nPHP.Parser.prototype.T_POW = 303;\nPHP.Parser.prototype.T_NEW = 304;\nPHP.Parser.prototype.T_CLONE = 305;\nPHP.Parser.prototype.T_EXIT = 306;\nPHP.Parser.prototype.T_IF = 307;\nPHP.Parser.prototype.T_ELSEIF = 308;\nPHP.Parser.prototype.T_ELSE = 309;\nPHP.Parser.prototype.T_ENDIF = 310;\nPHP.Parser.prototype.T_LNUMBER = 311;\nPHP.Parser.prototype.T_DNUMBER = 312;\nPHP.Parser.prototype.T_STRING = 313;\nPHP.Parser.prototype.T_STRING_VARNAME = 314;\nPHP.Parser.prototype.T_VARIABLE = 315;\nPHP.Parser.prototype.T_NUM_STRING = 316;\nPHP.Parser.prototype.T_INLINE_HTML = 317;\nPHP.Parser.prototype.T_CHARACTER = 318;\nPHP.Parser.prototype.T_BAD_CHARACTER = 319;\nPHP.Parser.prototype.T_ENCAPSED_AND_WHITESPACE = 320;\nPHP.Parser.prototype.T_CONSTANT_ENCAPSED_STRING = 321;\nPHP.Parser.prototype.T_ECHO = 322;\nPHP.Parser.prototype.T_DO = 323;\nPHP.Parser.prototype.T_WHILE = 324;\nPHP.Parser.prototype.T_ENDWHILE = 325;\nPHP.Parser.prototype.T_FOR = 326;\nPHP.Parser.prototype.T_ENDFOR = 327;\nPHP.Parser.prototype.T_FOREACH = 328;\nPHP.Parser.prototype.T_ENDFOREACH = 329;\nPHP.Parser.prototype.T_DECLARE = 330;\nPHP.Parser.prototype.T_ENDDECLARE = 331;\nPHP.Parser.prototype.T_AS = 332;\nPHP.Parser.prototype.T_SWITCH = 333;\nPHP.Parser.prototype.T_ENDSWITCH = 334;\nPHP.Parser.prototype.T_CASE = 335;\nPHP.Parser.prototype.T_DEFAULT = 336;\nPHP.Parser.prototype.T_BREAK = 337;\nPHP.Parser.prototype.T_CONTINUE = 338;\nPHP.Parser.prototype.T_GOTO = 339;\nPHP.Parser.prototype.T_FUNCTION = 340;\nPHP.Parser.prototype.T_CONST = 341;\nPHP.Parser.prototype.T_RETURN = 342;\nPHP.Parser.prototype.T_TRY = 343;\nPHP.Parser.prototype.T_CATCH = 344;\nPHP.Parser.prototype.T_FINALLY = 345;\nPHP.Parser.prototype.T_THROW = 346;\nPHP.Parser.prototype.T_USE = 347;\nPHP.Parser.prototype.T_INSTEADOF = 348;\nPHP.Parser.prototype.T_GLOBAL = 349;\nPHP.Parser.prototype.T_STATIC = 350;\nPHP.Parser.prototype.T_ABSTRACT = 351;\nPHP.Parser.prototype.T_FINAL = 352;\nPHP.Parser.prototype.T_PRIVATE = 353;\nPHP.Parser.prototype.T_PROTECTED = 354;\nPHP.Parser.prototype.T_PUBLIC = 355;\nPHP.Parser.prototype.T_VAR = 356;\nPHP.Parser.prototype.T_UNSET = 357;\nPHP.Parser.prototype.T_ISSET = 358;\nPHP.Parser.prototype.T_EMPTY = 359;\nPHP.Parser.prototype.T_HALT_COMPILER = 360;\nPHP.Parser.prototype.T_CLASS = 361;\nPHP.Parser.prototype.T_TRAIT = 362;\nPHP.Parser.prototype.T_INTERFACE = 363;\nPHP.Parser.prototype.T_EXTENDS = 364;\nPHP.Parser.prototype.T_IMPLEMENTS = 365;\nPHP.Parser.prototype.T_OBJECT_OPERATOR = 366;\nPHP.Parser.prototype.T_LIST = 367;\nPHP.Parser.prototype.T_ARRAY = 368;\nPHP.Parser.prototype.T_CALLABLE = 369;\nPHP.Parser.prototype.T_CLASS_C = 370;\nPHP.Parser.prototype.T_TRAIT_C = 371;\nPHP.Parser.prototype.T_METHOD_C = 372;\nPHP.Parser.prototype.T_FUNC_C = 373;\nPHP.Parser.prototype.T_LINE = 374;\nPHP.Parser.prototype.T_FILE = 375;\nPHP.Parser.prototype.T_COMMENT = 376;\nPHP.Parser.prototype.T_DOC_COMMENT = 377;\nPHP.Parser.prototype.T_OPEN_TAG = 378;\nPHP.Parser.prototype.T_OPEN_TAG_WITH_ECHO = 379;\nPHP.Parser.prototype.T_CLOSE_TAG = 380;\nPHP.Parser.prototype.T_WHITESPACE = 381;\nPHP.Parser.prototype.T_START_HEREDOC = 382;\nPHP.Parser.prototype.T_END_HEREDOC = 383;\nPHP.Parser.prototype.T_DOLLAR_OPEN_CURLY_BRACES = 384;\nPHP.Parser.prototype.T_CURLY_OPEN = 385;\nPHP.Parser.prototype.T_PAAMAYIM_NEKUDOTAYIM = 386;\nPHP.Parser.prototype.T_NAMESPACE = 387;\nPHP.Parser.prototype.T_NS_C = 388;\nPHP.Parser.prototype.T_DIR = 389;\nPHP.Parser.prototype.T_NS_SEPARATOR = 390;\nPHP.Parser.prototype.T_ELLIPSIS = 391;\nPHP.Parser.prototype.terminals = [\n    \"$EOF\",\n    \"error\",\n    \"T_INCLUDE\",\n    \"T_INCLUDE_ONCE\",\n    \"T_EVAL\",\n    \"T_REQUIRE\",\n    \"T_REQUIRE_ONCE\",\n    \"','\",\n    \"T_LOGICAL_OR\",\n    \"T_LOGICAL_XOR\",\n    \"T_LOGICAL_AND\",\n    \"T_PRINT\",\n    \"T_YIELD\",\n    \"T_DOUBLE_ARROW\",\n    \"T_YIELD_FROM\",\n    \"'='\",\n    \"T_PLUS_EQUAL\",\n    \"T_MINUS_EQUAL\",\n    \"T_MUL_EQUAL\",\n    \"T_DIV_EQUAL\",\n    \"T_CONCAT_EQUAL\",\n    \"T_MOD_EQUAL\",\n    \"T_AND_EQUAL\",\n    \"T_OR_EQUAL\",\n    \"T_XOR_EQUAL\",\n    \"T_SL_EQUAL\",\n    \"T_SR_EQUAL\",\n    \"T_POW_EQUAL\",\n    \"'?'\",\n    \"':'\",\n    \"T_COALESCE\",\n    \"T_BOOLEAN_OR\",\n    \"T_BOOLEAN_AND\",\n    \"'|'\",\n    \"'^'\",\n    \"'&'\",\n    \"T_IS_EQUAL\",\n    \"T_IS_NOT_EQUAL\",\n    \"T_IS_IDENTICAL\",\n    \"T_IS_NOT_IDENTICAL\",\n    \"T_SPACESHIP\",\n    \"'<'\",\n    \"T_IS_SMALLER_OR_EQUAL\",\n    \"'>'\",\n    \"T_IS_GREATER_OR_EQUAL\",\n    \"T_SL\",\n    \"T_SR\",\n    \"'+'\",\n    \"'-'\",\n    \"'.'\",\n    \"'*'\",\n    \"'/'\",\n    \"'%'\",\n    \"'!'\",\n    \"T_INSTANCEOF\",\n    \"'~'\",\n    \"T_INC\",\n    \"T_DEC\",\n    \"T_INT_CAST\",\n    \"T_DOUBLE_CAST\",\n    \"T_STRING_CAST\",\n    \"T_ARRAY_CAST\",\n    \"T_OBJECT_CAST\",\n    \"T_BOOL_CAST\",\n    \"T_UNSET_CAST\",\n    \"'@'\",\n    \"T_POW\",\n    \"'['\",\n    \"T_NEW\",\n    \"T_CLONE\",\n    \"T_EXIT\",\n    \"T_IF\",\n    \"T_ELSEIF\",\n    \"T_ELSE\",\n    \"T_ENDIF\",\n    \"T_LNUMBER\",\n    \"T_DNUMBER\",\n    \"T_STRING\",\n    \"T_STRING_VARNAME\",\n    \"T_VARIABLE\",\n    \"T_NUM_STRING\",\n    \"T_INLINE_HTML\",\n    \"T_ENCAPSED_AND_WHITESPACE\",\n    \"T_CONSTANT_ENCAPSED_STRING\",\n    \"T_ECHO\",\n    \"T_DO\",\n    \"T_WHILE\",\n    \"T_ENDWHILE\",\n    \"T_FOR\",\n    \"T_ENDFOR\",\n    \"T_FOREACH\",\n    \"T_ENDFOREACH\",\n    \"T_DECLARE\",\n    \"T_ENDDECLARE\",\n    \"T_AS\",\n    \"T_SWITCH\",\n    \"T_ENDSWITCH\",\n    \"T_CASE\",\n    \"T_DEFAULT\",\n    \"T_BREAK\",\n    \"T_CONTINUE\",\n    \"T_GOTO\",\n    \"T_FUNCTION\",\n    \"T_CONST\",\n    \"T_RETURN\",\n    \"T_TRY\",\n    \"T_CATCH\",\n    \"T_FINALLY\",\n    \"T_THROW\",\n    \"T_USE\",\n    \"T_INSTEADOF\",\n    \"T_GLOBAL\",\n    \"T_STATIC\",\n    \"T_ABSTRACT\",\n    \"T_FINAL\",\n    \"T_PRIVATE\",\n    \"T_PROTECTED\",\n    \"T_PUBLIC\",\n    \"T_VAR\",\n    \"T_UNSET\",\n    \"T_ISSET\",\n    \"T_EMPTY\",\n    \"T_HALT_COMPILER\",\n    \"T_CLASS\",\n    \"T_TRAIT\",\n    \"T_INTERFACE\",\n    \"T_EXTENDS\",\n    \"T_IMPLEMENTS\",\n    \"T_OBJECT_OPERATOR\",\n    \"T_LIST\",\n    \"T_ARRAY\",\n    \"T_CALLABLE\",\n    \"T_CLASS_C\",\n    \"T_TRAIT_C\",\n    \"T_METHOD_C\",\n    \"T_FUNC_C\",\n    \"T_LINE\",\n    \"T_FILE\",\n    \"T_START_HEREDOC\",\n    \"T_END_HEREDOC\",\n    \"T_DOLLAR_OPEN_CURLY_BRACES\",\n    \"T_CURLY_OPEN\",\n    \"T_PAAMAYIM_NEKUDOTAYIM\",\n    \"T_NAMESPACE\",\n    \"T_NS_C\",\n    \"T_DIR\",\n    \"T_NS_SEPARATOR\",\n    \"T_ELLIPSIS\",\n    \"';'\",\n    \"'{'\",\n    \"'}'\",\n    \"'('\",\n    \"')'\",\n    \"'`'\",\n    \"']'\",\n    \"'\\\"'\",\n    \"'$'\"\n    , \"???\"\n];\nPHP.Parser.prototype.translate = [\n        0,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,   53,  155,  157,  156,   52,   35,  157,\n      151,  152,   50,   47,    7,   48,   49,   51,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,   29,  148,\n       41,   15,   43,   28,   65,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,   67,  157,  154,   34,  157,  153,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  149,   33,  150,   55,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,    1,    2,    3,    4,\n        5,    6,    8,    9,   10,   11,   12,   13,   14,   16,\n       17,   18,   19,   20,   21,   22,   23,   24,   25,   26,\n       27,   30,   31,   32,   36,   37,   38,   39,   40,   42,\n       44,   45,   46,   54,   56,   57,   58,   59,   60,   61,\n       62,   63,   64,   66,   68,   69,   70,   71,   72,   73,\n       74,   75,   76,   77,   78,   79,   80,   81,  157,  157,\n       82,   83,   84,   85,   86,   87,   88,   89,   90,   91,\n       92,   93,   94,   95,   96,   97,   98,   99,  100,  101,\n      102,  103,  104,  105,  106,  107,  108,  109,  110,  111,\n      112,  113,  114,  115,  116,  117,  118,  119,  120,  121,\n      122,  123,  124,  125,  126,  127,  128,  129,  130,  131,\n      132,  133,  134,  135,  136,  137,  157,  157,  157,  157,\n      157,  157,  138,  139,  140,  141,  142,  143,  144,  145,\n      146,  147\n];\n\nPHP.Parser.prototype.yyaction = [\n      569,  570,  571,  572,  573,  215,  574,  575,  576,  612,\n      613,    0,   27,   99,  100,  101,  102,  103,  104,  105,\n      106,  107,  108,  109,  110,-32766,-32766,-32766,   95,   96,\n       97,   24,  240,  226, -267,-32766,-32766,-32766,-32766,-32766,\n    -32766,  530,  344,  114,   98,-32766,  286,-32766,-32766,-32766,\n    -32766,-32766,  577,  870,  872,-32766,-32766,-32766,-32766,-32766,\n    -32766,-32766,-32766,  224,-32766,  714,  578,  579,  580,  581,\n      582,  583,  584,-32766,  264,  644,  840,  841,  842,  839,\n      838,  837,  585,  586,  587,  588,  589,  590,  591,  592,\n      593,  594,  595,  615,  616,  617,  618,  619,  607,  608,\n      609,  610,  611,  596,  597,  598,  599,  600,  601,  602,\n      638,  639,  640,  641,  642,  643,  603,  604,  605,  606,\n      636,  627,  625,  626,  622,  623,  116,  614,  620,  621,\n      628,  629,  631,  630,  632,  633,   42,   43,  381,   44,\n       45,  624,  635,  634, -214,   46,   47,  289,   48,-32767,\n    -32767,-32767,-32767,   90,   91,   92,   93,   94,  267,  241,\n       22,  840,  841,  842,  839,  838,  837,  832,-32766,-32766,\n    -32766,  306, 1000, 1000, 1037,  120,  966,  436, -423,  244,\n      797,   49,   50,  660,  661,  272,  362,   51,-32766,   52,\n      219,  220,   53,   54,   55,   56,   57,   58,   59,   60,\n     1016,   22,  238,   61,  351,  945,-32766,-32766,-32766,  967,\n      968,  646,  705, 1000,   28, -456,  125,  966,-32766,-32766,\n    -32766,  715,  398,  399,  216, 1000,-32766,  339,-32766,-32766,\n    -32766,-32766,   25,  222,  980,  552,  355,  378,-32766, -423,\n    -32766,-32766,-32766,  121,   65, 1045,  408, 1047, 1046,  274,\n      274,  131,  244, -423,  394,  395,  358,  519,  945,  537,\n     -423,  111, -426,  398,  399,  130,  972,  973,  974,  975,\n      969,  970,  243,  128, -422, -421, 1013,  409,  976,  971,\n      353,  791,  792,    7, -162,   63,  124,  255,  701,  256,\n      274,  382, -122, -122, -122,   -4,  715,  383,  646, 1042,\n     -421,  704,  274, -219,   33,   17,  384, -122,  385, -122,\n      386, -122,  387, -122,  369,  388, -122, -122, -122,   34,\n       35,  389,  352,  520,   36,  390,  353,  702,   62,  112,\n      818,  287,  288,  391,  392, -422, -421, -161,  350,  393,\n       40,   38,  690,  735,  396,  397,  361,   22,  122, -422,\n     -421,-32766,-32766,-32766,  791,  792, -422, -421, -425, 1000,\n     -456, -421, -238,  966,  409,   41,  382,  353,  717,  535,\n     -122,-32766,  383,-32766,-32766, -421,  704,   21,  813,   33,\n       17,  384, -421,  385, -466,  386,  224,  387, -467,  273,\n      388,  367,  945, -458,   34,   35,  389,  352,  345,   36,\n      390,  248,  247,   62,  254,  715,  287,  288,  391,  392,\n      399,-32766,-32766,-32766,  393,  295, 1000,  652,  735,  396,\n      397,  117,  115,  113,  814,  119,   72,   73,   74, -162,\n      764,   65,  240,  541,  370,  518,  274,  118,  270,   92,\n       93,   94,  242,  717,  535,   -4,   26, 1000,   75,   76,\n       77,   78,   79,   80,   81,   82,   83,   84,   85,   86,\n       87,   88,   89,   90,   91,   92,   93,   94,   95,   96,\n       97,  547,  240,  713,  715,  382,  276,-32766,-32766,  126,\n      945,  383, -161,  938,   98,  704,  225,  659,   33,   17,\n      384,  346,  385,  274,  386,  728,  387,  221,  120,  388,\n      505,  506,  540,   34,   35,  389,  715, -238,   36,  390,\n     1017,  223,   62,  494,   18,  287,  288,  127,  297,  376,\n        6,   98,  798,  393,  274,  660,  661,  490,  491, -466,\n       39, -466,  514, -467,  539, -467,   16,  458, -458,  315,\n      791,  792,  829,  553,  382,  817,  563,  653,  538,  765,\n      383,  449,  751,  535,  704,  448,  435,   33,   17,  384,\n      430,  385,  646,  386,  359,  387,  357,  647,  388,  673,\n      429, 1040,   34,   35,  389,  715,  382,   36,  390,  941,\n      492,   62,  383,  503,  287,  288,  704,  434,  440,   33,\n       17,  384,  393,  385,-32766,  386,  445,  387,  495,  509,\n      388,   10,  529,  542,   34,   35,  389,  715,  515,   36,\n      390,  499,  500,   62,  214,  -80,  287,  288,  452,  269,\n      736,  717,  535,  488,  393,  356,  266,  979,  265,  730,\n      982,  722,  358,  338,  493,  548,    0,  294,  737,    0,\n        3,    0,  309,    0,    0,  382,    0,    0,  271,    0,\n        0,  383,    0,  717,  535,  704,  227,    0,   33,   17,\n      384,    9,  385,    0,  386,    0,  387, -382,    0,  388,\n        0,    0,  325,   34,   35,  389,  715,  382,   36,  390,\n      321,  341,   62,  383,  340,  287,  288,  704,   22,  320,\n       33,   17,  384,  393,  385,  442,  386,  337,  387,  562,\n     1000,  388,   32,   31,  966,   34,   35,  389,  823,  657,\n       36,  390,  656,  821,   62,  703,  711,  287,  288,  561,\n      822,  825,  717,  535,  695,  393,  747,  749,  693,  759,\n      758,  752,  767,  945,  824,  706,  700,  712,  699,  698,\n      658,    0,  263,  262,  559,  558,  382,  556,  554,  551,\n      398,  399,  383,  550,  717,  535,  704,  546,  545,   33,\n       17,  384,  543,  385,  536,  386,   71,  387,  933,  932,\n      388,   30,   65,  731,   34,   35,  389,  274,  724,   36,\n      390,  830,  734,   62,  663,  662,  287,  288,-32766,-32766,\n    -32766,  733,  732,  934,  393,  665,  664,  756,  555,  691,\n     1041, 1001,  994, 1006, 1011, 1014,  757, 1043,-32766,  654,\n    -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,\n    -32767,  655, 1044,  717,  535, -446,  926,  348,  343,  268,\n      237,  236,  235,  234,  218,  217,  132,  129, -426, -425,\n     -424,  123,   20,   23,   70,   69,   29,   37,   64,   68,\n       66,   67, -448,    0,   15,   19,  250,  910,  296, -217,\n      467,  484,  909,  472,  528,  913,   11,  964,  955, -215,\n      525,  379,  375,  373,  371,   14,   13,   12, -214,    0,\n     -393,    0, 1005, 1039,  992,  993,  963,    0,  981\n];\n\nPHP.Parser.prototype.yycheck = [\n        2,    3,    4,    5,    6,   13,    8,    9,   10,   11,\n       12,    0,   15,   16,   17,   18,   19,   20,   21,   22,\n       23,   24,   25,   26,   27,    8,    9,   10,   50,   51,\n       52,    7,   54,    7,   79,    8,    9,   10,    8,    9,\n       10,   77,    7,   13,   66,   28,    7,   30,   31,   32,\n       33,   34,   54,   56,   57,   28,    8,   30,   31,   32,\n       33,   34,   35,   35,  109,    1,   68,   69,   70,   71,\n       72,   73,   74,  118,    7,   77,  112,  113,  114,  115,\n      116,  117,   84,   85,   86,   87,   88,   89,   90,   91,\n       92,   93,   94,   95,   96,   97,   98,   99,  100,  101,\n      102,  103,  104,  105,  106,  107,  108,  109,  110,  111,\n      112,  113,  114,  115,  116,  117,  118,  119,  120,  121,\n      122,  123,  124,  125,  126,  127,    7,  129,  130,  131,\n      132,  133,  134,  135,  136,  137,    2,    3,    4,    5,\n        6,  143,  144,  145,  152,   11,   12,    7,   14,   41,\n       42,   43,   44,   45,   46,   47,   48,   49,  109,    7,\n       67,  112,  113,  114,  115,  116,  117,  118,    8,    9,\n       10,   79,   79,   79,   82,  147,   83,   82,   67,   28,\n      152,   47,   48,  102,  103,    7,    7,   53,   28,   55,\n       56,   57,   58,   59,   60,   61,   62,   63,   64,   65,\n        1,   67,   68,   69,   70,  112,    8,    9,   10,   75,\n       76,   77,  148,   79,   13,    7,   67,   83,    8,    9,\n       10,    1,  129,  130,   13,   79,   28,  146,   30,   31,\n       32,   33,  140,  141,  139,   29,  102,    7,   28,  128,\n       30,   31,   32,  149,  151,   77,  112,   79,   80,  156,\n      156,   15,   28,  142,  120,  121,  146,   77,  112,  149,\n      149,   15,  151,  129,  130,   15,  132,  133,  134,  135,\n      136,  137,  138,   15,   67,   67,   77,  143,  144,  145,\n      146,  130,  131,    7,    7,  151,   15,  153,  148,  155,\n      156,   71,   72,   73,   74,    0,    1,   77,   77,  150,\n       67,   81,  156,  152,   84,   85,   86,   87,   88,   89,\n       90,   91,   92,   93,   29,   95,   96,   97,   98,   99,\n      100,  101,  102,  143,  104,  105,  146,  148,  108,   15,\n      150,  111,  112,  113,  114,  128,  128,    7,    7,  119,\n       67,   67,  122,  123,  124,  125,    7,   67,  149,  142,\n      142,    8,    9,   10,  130,  131,  149,  149,  151,   79,\n      152,  128,    7,   83,  143,    7,   71,  146,  148,  149,\n      150,   28,   77,   30,   31,  142,   81,    7,  148,   84,\n       85,   86,  149,   88,    7,   90,   35,   92,    7,   33,\n       95,    7,  112,    7,   99,  100,  101,  102,  103,  104,\n      105,  128,  128,  108,  109,    1,  111,  112,  113,  114,\n      130,    8,    9,   10,  119,  142,   79,  122,  123,  124,\n      125,   15,  149,  149,  148,   29,    8,    9,   10,  152,\n       29,  151,   54,   29,  149,   79,  156,   15,  143,   47,\n       48,   49,   29,  148,  149,  150,   28,   79,   30,   31,\n       32,   33,   34,   35,   36,   37,   38,   39,   40,   41,\n       42,   43,   44,   45,   46,   47,   48,   49,   50,   51,\n       52,   29,   54,   29,    1,   71,   67,    8,    9,   29,\n      112,   77,  152,  152,   66,   81,   35,  148,   84,   85,\n       86,  123,   88,  156,   90,   35,   92,   35,  147,   95,\n       72,   73,   29,   99,  100,  101,    1,  152,  104,  105,\n      152,   35,  108,   72,   73,  111,  112,   97,   98,  102,\n      103,   66,  152,  119,  156,  102,  103,  106,  107,  152,\n       67,  154,   74,  152,   29,  154,  152,  128,  152,   78,\n      130,  131,  148,  149,   71,  148,  149,  148,  149,  148,\n       77,   77,  148,  149,   81,   77,   77,   84,   85,   86,\n       77,   88,   77,   90,   77,   92,   77,   77,   95,   77,\n       77,   77,   99,  100,  101,    1,   71,  104,  105,   79,\n       79,  108,   77,   79,  111,  112,   81,   79,   82,   84,\n       85,   86,  119,   88,   82,   90,   86,   92,   87,   96,\n       95,   94,   89,   29,   99,  100,  101,    1,   91,  104,\n      105,   93,   96,  108,   94,   94,  111,  112,   94,  110,\n      123,  148,  149,  109,  119,  102,  127,  139,  126,  147,\n      139,  150,  146,  149,  154,   29,   -1,  142,  123,   -1,\n      142,   -1,  146,   -1,   -1,   71,   -1,   -1,  126,   -1,\n       -1,   77,   -1,  148,  149,   81,   35,   -1,   84,   85,\n       86,  142,   88,   -1,   90,   -1,   92,  142,   -1,   95,\n       -1,   -1,  146,   99,  100,  101,    1,   71,  104,  105,\n      146,  146,  108,   77,  146,  111,  112,   81,   67,  146,\n       84,   85,   86,  119,   88,  146,   90,  149,   92,  148,\n       79,   95,  148,  148,   83,   99,  100,  101,  148,  148,\n      104,  105,  148,  148,  108,  148,  148,  111,  112,  148,\n      148,  148,  148,  149,  148,  119,  148,  148,  148,  148,\n      148,  148,  148,  112,  148,  148,  148,  148,  148,  148,\n      148,   -1,  149,  149,  149,  149,   71,  149,  149,  149,\n      129,  130,   77,  149,  148,  149,   81,  149,  149,   84,\n       85,   86,  149,   88,  149,   90,  149,   92,  150,  150,\n       95,  151,  151,  150,   99,  100,  101,  156,  150,  104,\n      105,  150,  150,  108,  150,  150,  111,  112,    8,    9,\n       10,  150,  150,  150,  119,  150,  150,  150,  150,  150,\n      150,  150,  150,  150,  150,  150,  150,  150,   28,  150,\n       30,   31,   32,   33,   34,   35,   36,   37,   38,   39,\n       40,  150,  150,  148,  149,  151,  153,  151,  151,  151,\n      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,\n      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,\n      151,  151,  151,   -1,  152,  152,  152,  152,  152,  152,\n      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,\n      152,  152,  152,  152,  152,  152,  152,  152,  152,   -1,\n      153,   -1,  154,  154,  154,  154,  154,   -1,  155\n];\n\nPHP.Parser.prototype.yybase = [\n        0,  220,  295,   94,  180,  560,   -2,   -2,   -2,   -2,\n      -36,  473,  574,  606,  574,  505,  404,  675,  675,  675,\n       28,  351,  462,  462,  462,  461,  396,  476,  451,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  401,   64,  201,  568,  704,  713,  708,\n      702,  714,  520,  706,  705,  211,  650,  651,  450,  652,\n      653,  654,  655,  709,  480,  703,  712,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,   48,   30,  469,  403,  403,  403,  403,\n      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,\n      403,  403,  403,  403,  403,  160,  160,  160,  343,  210,\n      208,  198,   17,  233,   27,  780,  780,  780,  780,  780,\n      108,  108,  108,  108,  621,  621,   93,  280,  280,  280,\n      280,  280,  280,  280,  280,  280,  280,  280,  632,  641,\n      642,  643,  392,  392,  151,  151,  151,  151,  368,  -45,\n      146,  224,  224,   95,  410,  491,  733,  199,  199,  111,\n      207,  -22,  -22,  -22,   81,  506,   92,   92,  233,  233,\n      273,  233,  423,  423,  423,  221,  221,  221,  221,  221,\n      110,  221,  221,  221,  617,  512,  168,  516,  647,  397,\n      503,  656,  274,  381,  377,  538,  535,  337,  523,  337,\n      421,  441,  428,  525,  337,  337,  285,  401,  394,  378,\n      567,  474,  339,  564,  140,  179,  409,  399,  384,  594,\n      561,  711,  330,  710,  358,  149,  378,  378,  378,  370,\n      593,  548,  355,   -8,  646,  484,  277,  417,  386,  645,\n      635,  230,  634,  276,  331,  356,  565,  485,  485,  485,\n      485,  485,  485,  460,  485,  483,  691,  691,  478,  501,\n      460,  696,  460,  485,  691,  460,  460,  502,  485,  522,\n      522,  483,  508,  499,  691,  691,  499,  478,  460,  571,\n      551,  514,  482,  413,  413,  514,  460,  413,  501,  413,\n       11,  697,  699,  444,  700,  695,  698,  676,  694,  493,\n      615,  497,  515,  684,  683,  693,  479,  489,  620,  692,\n      549,  592,  487,  246,  314,  498,  463,  689,  523,  486,\n      455,  455,  455,  463,  687,  455,  455,  455,  455,  455,\n      455,  455,  455,  732,   24,  495,  510,  591,  590,  589,\n      406,  588,  496,  524,  422,  599,  488,  549,  549,  649,\n      727,  673,  490,  682,  716,  690,  555,  119,  271,  681,\n      648,  543,  492,  534,  680,  598,  246,  715,  494,  672,\n      549,  671,  455,  674,  701,  730,  731,  688,  728,  722,\n      152,  526,  587,  178,  729,  659,  596,  595,  554,  725,\n      707,  721,  720,  178,  576,  511,  717,  518,  677,  504,\n      678,  613,  258,  657,  686,  584,  724,  723,  726,  583,\n      582,  609,  608,  250,  236,  685,  442,  458,  517,  581,\n      500,  628,  604,  679,  580,  579,  623,  619,  718,  521,\n      486,  519,  509,  507,  513,  600,  618,  719,  206,  578,\n      586,  573,  481,  572,  631,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,  134,  134,   -2,   -2,   -2,\n        0,    0,    0,    0,   -2,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,  418,   -3,  418,  418,   -3,  418,  418,\n      418,  418,  418,  418,  -22,  -22,  -22,  -22,  221,  221,\n      221,  221,  221,  221,  221,  221,  221,  221,  221,  221,\n      221,  221,   49,   49,   49,   49,  -22,  -22,  221,  221,\n      221,  221,  221,   49,  221,  221,  221,   92,  221,   92,\n       92,  337,  337,    0,    0,    0,    0,    0,  485,   92,\n        0,    0,    0,    0,    0,    0,  485,  485,  485,    0,\n        0,    0,    0,    0,  485,    0,    0,    0,  337,   92,\n        0,  420,  420,  178,  420,  420,    0,    0,    0,  485,\n      485,    0,  508,    0,    0,    0,    0,  691,    0,    0,\n        0,    0,    0,  455,  119,  682,    0,   39,    0,    0,\n        0,    0,    0,  490,   39,   26,    0,   26,    0,    0,\n      455,  455,  455,    0,  490,  490,    0,    0,   67,  490,\n        0,    0,    0,   67,   35,    0,   35,    0,    0,    0,\n      178\n];\n\nPHP.Parser.prototype.yydefault = [\n        3,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,  468,  468,  468,32767,32767,32767,32767,  285,\n      460,  285,  285,32767,  419,  419,  419,  419,  419,  419,\n      419,  460,32767,32767,32767,32767,32767,  364,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,  465,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,  347,  348,  350,\n      351,  284,  420,  237,  464,  283,  116,  246,  239,  191,\n      282,  223,  119,  312,  365,  314,  363,  367,  313,  290,\n      294,  295,  296,  297,  298,  299,  300,  301,  302,  303,\n      304,  305,  288,  289,  366,  344,  343,  342,  310,  311,\n      287,  315,  317,  287,  316,  333,  334,  331,  332,  335,\n      336,  337,  338,  339,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,  269,  269,\n      269,  269,  324,  325,  229,  229,  229,  229,32767,  270,\n    32767,  229,32767,32767,32767,32767,32767,32767,32767,  413,\n      341,  319,  320,  318,32767,  392,32767,  394,  307,  309,\n      387,  291,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,  389,  421,  421,32767,32767,32767,  381,32767,\n      159,  210,  212,  397,32767,32767,32767,32767,32767,  329,\n    32767,32767,32767,32767,32767,32767,  474,32767,32767,32767,\n    32767,32767,  421,32767,32767,32767,  321,  322,  323,32767,\n    32767,32767,  421,  421,32767,32767,  421,32767,  421,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,  163,32767,32767,  395,  395,32767,32767,\n      163,  390,  163,32767,32767,  163,  163,  176,32767,  174,\n      174,32767,32767,  178,32767,  435,  178,32767,  163,  196,\n      196,  373,  165,  231,  231,  373,  163,  231,32767,  231,\n    32767,32767,32767,   82,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n      383,32767,32767,32767,  401,32767,  414,  433,  381,32767,\n      327,  328,  330,32767,  423,  352,  353,  354,  355,  356,\n      357,  358,  360,32767,  461,  386,32767,32767,32767,32767,\n    32767,32767,   84,  108,  245,32767,  473,   84,  384,32767,\n      473,32767,32767,32767,32767,32767,32767,  286,32767,32767,\n    32767,   84,32767,   84,32767,32767,  457,32767,32767,  421,\n      385,32767,  326,  398,  439,32767,32767,  422,32767,32767,\n      218,   84,32767,  177,32767,32767,32767,32767,32767,32767,\n      401,32767,32767,  179,32767,32767,  421,32767,32767,32767,\n    32767,32767,  281,32767,32767,32767,32767,32767,  421,32767,\n    32767,32767,32767,  222,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,   82,\n       60,32767,  263,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,  121,  121,    3,    3,  121,\n      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,\n      121,  121,  121,  121,  248,  154,  248,  204,  248,  248,\n      207,  196,  196,  255\n];\n\nPHP.Parser.prototype.yygoto = [\n      163,  163,  135,  135,  135,  146,  148,  179,  164,  161,\n      145,  161,  161,  161,  162,  162,  162,  162,  162,  162,\n      162,  145,  157,  158,  159,  160,  176,  174,  177,  410,\n      411,  299,  412,  415,  416,  417,  418,  419,  420,  421,\n      422,  857,  136,  137,  138,  139,  140,  141,  142,  143,\n      144,  147,  173,  175,  178,  195,  198,  199,  201,  202,\n      204,  205,  206,  207,  208,  209,  210,  211,  212,  213,\n      232,  233,  251,  252,  253,  316,  317,  318,  462,  180,\n      181,  182,  183,  184,  185,  186,  187,  188,  189,  190,\n      191,  192,  193,  149,  194,  150,  165,  166,  167,  196,\n      168,  151,  152,  153,  169,  154,  197,  133,  170,  155,\n      171,  172,  156,  521,  200,  257,  246,  464,  432,  687,\n      649,  278,  481,  482,  527,  200,  437,  437,  437,  766,\n        5,  746,  650,  557,  437,  426,  775,  770,  428,  431,\n      444,  465,  466,  468,  483,  279,  651,  336,  450,  453,\n      437,  560,  485,  487,  508,  511,  763,  516,  517,  777,\n      524,  762,  526,  532,  773,  534,  480,  480,  965,  965,\n      965,  965,  965,  965,  965,  965,  965,  965,  965,  965,\n      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,\n      413,  413,  413,  413,  942,  502,  478,  496,  512,  456,\n      298,  437,  437,  451,  471,  437,  437,  674,  437,  229,\n      456,  230,  231,  463,  828,  533,  681,  438,  513,  826,\n      461,  475,  460,  414,  414,  414,  414,  414,  414,  414,\n      414,  414,  414,  414,  414,  414,  414,  301,  674,  674,\n      443,  454, 1033, 1033, 1034, 1034,  425,  531,  425,  708,\n      750,  800,  457,  372, 1033,  943, 1034, 1026,  300, 1018,\n      497,    8,  313,  904,  796,  944,  996,  785,  789, 1007,\n      285,  670, 1036,  329,  307,  310,  804,  668,  544,  332,\n      935,  940,  366,  807,  678,  477,  377,  754,  844,    0,\n      667,  667,  675,  675,  675,  677,    0,  666,  323,  498,\n      328,  312,  312,  258,  259,  283,  459,  261,  322,  284,\n      326,  486,  280,  281,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,  790,  790,  790,  790,  946,    0,  946,\n      790,  790, 1004,  790, 1004,    0,    0,    0,    0,  836,\n        0, 1015, 1015,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,  744,  744,  744,  720,  744,    0,\n      739,  745,  721,  780,  780, 1023,    0,    0, 1002,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,  806,    0,  806,    0,    0,    0,    0, 1008, 1009\n];\n\nPHP.Parser.prototype.yygcheck = [\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   52,   45,  112,  112,   80,    8,   10,\n       10,   64,   55,   55,   55,   45,    8,    8,    8,   10,\n       92,   10,   11,   10,    8,   10,   10,   10,   38,   38,\n       38,   38,   38,   38,   62,   62,   12,   62,   28,    8,\n        8,   28,   28,   28,   28,   28,   28,   28,   28,   28,\n       28,   28,   28,   28,   28,   28,   70,   70,   70,   70,\n       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,\n      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,\n      113,  113,  113,  113,   76,   56,   35,   35,   56,   69,\n       56,    8,    8,    8,    8,    8,    8,   19,    8,   60,\n       69,   60,   60,    7,    7,    7,   25,    8,    7,    7,\n        2,    2,    8,  115,  115,  115,  115,  115,  115,  115,\n      115,  115,  115,  115,  115,  115,  115,   53,   19,   19,\n       53,   53,  123,  123,  124,  124,  109,    5,  109,   44,\n       29,   78,  114,   53,  123,   76,  124,  122,   41,  120,\n       43,   53,   42,   96,   74,   76,   76,   72,   75,  117,\n       14,   21,  123,   18,    9,   13,   79,   20,   66,   17,\n      102,  104,   58,   81,   22,   59,  100,   63,   94,   -1,\n       19,   19,   19,   19,   19,   19,   -1,   19,   45,   45,\n       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,\n       45,   45,   64,   64,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   52,   52,   52,   52,   52,   -1,   52,\n       52,   52,   80,   52,   80,   -1,   -1,   -1,   -1,   92,\n       -1,   80,   80,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   52,   52,   52,   52,   52,   -1,\n       52,   52,   52,   69,   69,   69,   -1,   -1,   80,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   80,   -1,   80,   -1,   -1,   -1,   -1,   80,   80\n];\n\nPHP.Parser.prototype.yygbase = [\n        0,    0, -317,    0,    0,  237,    0,  210, -136,    4,\n      118,  130,  144,  -10,   16,    0,    0,  -59,   10,  -47,\n       -9,    7,  -77,  -20,    0,  209,    0,    0, -388,  234,\n        0,    0,    0,    0,    0,  165,    0,    0,  103,    0,\n        0,  225,   44,   45,  235,   84,    0,    0,    0,    0,\n        0,    0,  109, -115,    0, -113, -179,    0,  -78,  -81,\n     -347,    0, -122,  -80, -249,    0,  -19,    0,    0,  169,\n      -48,    0,   26,    0,   22,   24,  -99,    0,  230,  -13,\n      114,  -79,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,  120,    0,  -90,    0,   23,    0,    0,    0,\n      -89,    0,  -67,    0,  -69,    0,    0,    0,    0,    8,\n        0,    0, -140,  -34,  229,    9,    0,   21,    0,    0,\n      218,    0,  233,   -3,   -1,    0\n];\n\nPHP.Parser.prototype.yygdefault = [\n    -32768,  380,  565,    2,  566,  637,  645,  504,  400,  433,\n      748,  688,  689,  303,  342,  401,  302,  330,  324,  676,\n      669,  671,  679,  134,  333,  682,    1,  684,  439,  716,\n      291,  692,  292,  507,  694,  446,  696,  697,  427,  304,\n      305,  447,  311,  479,  707,  203,  308,  709,  290,  710,\n      719,  335,  293,  510,  489,  469,  501,  402,  363,  476,\n      228,  455,  473,  753,  277,  761,  549,  769,  772,  403,\n      404,  470,  784,  368,  794,  788,  960,  319,  799,  805,\n      991,  808,  811,  349,  331,  327,  815,  816,    4,  820,\n      522,  523,  835,  239,  843,  856,  347,  923,  925,  441,\n      374,  936,  360,  334,  939,  995,  354,  405,  364,  952,\n      260,  282,  245,  406,  423,  249,  407,  365,  998,  314,\n     1019,  424, 1027, 1035,  275,  474\n];\n\nPHP.Parser.prototype.yylhs = [\n        0,    1,    3,    3,    2,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    6,    6,    6,    6,    6,    6,    6,\n        7,    7,    8,    8,    9,    4,    4,    4,    4,    4,\n        4,    4,    4,    4,    4,    4,   14,   14,   15,   15,\n       15,   15,   17,   17,   13,   13,   18,   18,   19,   19,\n       20,   20,   21,   21,   16,   16,   22,   24,   24,   25,\n       26,   26,   28,   27,   27,   27,   27,   29,   29,   29,\n       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,\n       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,\n       29,   29,   10,   10,   48,   48,   51,   51,   50,   49,\n       49,   42,   42,   53,   53,   54,   54,   11,   12,   12,\n       12,   57,   57,   57,   58,   58,   61,   61,   59,   59,\n       62,   62,   36,   36,   44,   44,   47,   47,   47,   46,\n       46,   63,   37,   37,   37,   37,   64,   64,   65,   65,\n       66,   66,   34,   34,   30,   30,   67,   32,   32,   68,\n       31,   31,   33,   33,   43,   43,   43,   43,   55,   55,\n       71,   71,   72,   72,   74,   74,   75,   75,   75,   73,\n       73,   56,   56,   76,   76,   77,   77,   78,   78,   78,\n       39,   39,   79,   40,   40,   81,   81,   60,   60,   82,\n       82,   82,   82,   87,   87,   88,   88,   89,   89,   89,\n       89,   89,   90,   91,   91,   86,   86,   83,   83,   85,\n       85,   93,   93,   92,   92,   92,   92,   92,   92,   84,\n       84,   94,   94,   41,   41,   35,   35,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n      101,   95,   95,  100,  100,  103,  103,  104,  105,  105,\n      105,  109,  109,   52,   52,   52,   96,   96,  107,  107,\n       97,   97,   99,   99,   99,  102,  102,  113,  113,   70,\n      115,  115,  115,   98,   98,   98,   98,   98,   98,   98,\n       98,   98,   98,   98,   98,   98,   98,   98,   98,   38,\n       38,  111,  111,  111,  106,  106,  106,  116,  116,  116,\n      116,  116,  116,   45,   45,   45,   80,   80,   80,  118,\n      110,  110,  110,  110,  110,  110,  108,  108,  108,  117,\n      117,  117,  117,   69,  119,  119,  120,  120,  120,  120,\n      120,  114,  121,  121,  122,  122,  122,  122,  122,  112,\n      112,  112,  112,  124,  123,  123,  123,  123,  123,  123,\n      123,  125,  125,  125\n];\n\nPHP.Parser.prototype.yylen = [\n        1,    1,    2,    0,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    3,    1,    1,    1,    1,    1,    3,\n        5,    4,    3,    4,    2,    3,    1,    1,    7,    8,\n        6,    7,    3,    1,    3,    1,    3,    1,    1,    3,\n        1,    2,    1,    2,    3,    1,    3,    3,    1,    3,\n        2,    0,    1,    1,    1,    1,    1,    3,    7,   10,\n        5,    7,    9,    5,    3,    3,    3,    3,    3,    3,\n        1,    2,    5,    7,    9,    5,    6,    3,    3,    2,\n        2,    1,    1,    1,    0,    2,    1,    3,    8,    0,\n        4,    1,    3,    0,    1,    0,    1,   10,    7,    6,\n        5,    1,    2,    2,    0,    2,    0,    2,    0,    2,\n        1,    3,    1,    4,    1,    4,    1,    1,    4,    1,\n        3,    3,    3,    4,    4,    5,    0,    2,    4,    3,\n        1,    1,    1,    4,    0,    2,    5,    0,    2,    6,\n        0,    2,    0,    3,    1,    2,    1,    1,    1,    0,\n        1,    3,    4,    6,    1,    2,    1,    1,    1,    0,\n        1,    0,    2,    2,    3,    1,    3,    1,    2,    2,\n        3,    1,    1,    3,    1,    1,    3,    2,    0,    3,\n        4,    9,    3,    1,    3,    0,    2,    4,    5,    4,\n        4,    4,    3,    1,    1,    1,    3,    1,    1,    0,\n        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,\n        3,    1,    3,    3,    1,    0,    1,    1,    3,    3,\n        3,    4,    1,    2,    3,    3,    3,    3,    3,    3,\n        3,    3,    3,    3,    3,    3,    2,    2,    2,    2,\n        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,\n        3,    3,    3,    3,    3,    3,    3,    2,    2,    2,\n        2,    3,    3,    3,    3,    3,    3,    3,    3,    3,\n        3,    3,    5,    4,    3,    4,    4,    2,    2,    4,\n        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,\n        2,    1,    3,    2,    1,    2,    4,    2,   10,   11,\n        7,    3,    2,    0,    4,    1,    3,    2,    2,    2,\n        4,    1,    1,    1,    2,    3,    1,    1,    1,    1,\n        0,    3,    0,    1,    1,    0,    1,    1,    3,    3,\n        4,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    3,    2,    3,    3,    0,\n        1,    1,    3,    1,    1,    3,    1,    1,    4,    4,\n        4,    1,    4,    1,    1,    3,    1,    4,    2,    3,\n        1,    4,    4,    3,    3,    3,    1,    3,    1,    1,\n        3,    1,    1,    4,    3,    1,    1,    1,    3,    3,\n        0,    1,    3,    1,    3,    1,    4,    2,    0,    2,\n        2,    1,    2,    1,    1,    4,    3,    3,    3,    6,\n        3,    1,    1,    1\n];\n\n\n\nexports.PHP = PHP;\n});\n\nace.define(\"ace/mode/php_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar PHP = require(\"./php/php\").PHP;\n\nvar PhpWorker = exports.PhpWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(PhpWorker, Mirror);\n\n(function() {\n    this.setOptions = function(opts) {\n        this.inlinePhp = opts && opts.inline;\n    };\n    \n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        if (this.inlinePhp)\n            value = \"<?\" + value + \"?>\";\n\n        var tokens = PHP.Lexer(value, {short_open_tag: 1});\n        try {\n            new PHP.Parser(tokens);\n        } catch(e) {\n            errors.push({\n                row: e.line - 1,\n                column: null,\n                text: e.message.charAt(0).toUpperCase() + e.message.substring(1),\n                type: \"error\"\n            });\n        }\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(PhpWorker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/worker-xml.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/xml/sax\",[], function(require, exports, module) {\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\u00B7\\u0300-\\u036F\\\\ux203F-\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring \nvar S_ATTR_S=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_V = 4;//attr value(no quot value only)\nvar S_E = 5;//attr value end and no space(quot end)\nvar S_S = 6;//(attr value end || tag end ) && (space offer)\nvar S_C = 7;//closed el<el />\n\nfunction XMLReader(){\n\t\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n  function fixedFromCharCode(code) {\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif(k in entityMap){\n\t\t\treturn entityMap[k]; \n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\tlocator&&position(start);\n\t\tdomBuilder.characters(xt,0,end-start);\n\t\tstart = end\n\t}\n\tfunction position(start,m){\n\t\twhile(start>=endPos && (m = linePattern.exec(source))){\n\t\t\tstartPos = m.index;\n\t\t\tendPos = startPos + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t}\n\t\tlocator.columnNumber = start-startPos+1;\n\t}\n\tvar startPos = 0;\n\tvar endPos = 0;\n\tvar linePattern = /.+(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\t\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\tvar i = source.indexOf('<',start);\n\t\tif(i<0){\n\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\tvar doc = domBuilder.document;\n    \t\t\tvar text = doc.createTextNode(source.substr(start));\n    \t\t\tdoc.appendChild(text);\n    \t\t\tdomBuilder.currentElement = text;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(i>start){\n\t\t\tappendText(i);\n\t\t}\n\t\tswitch(source.charAt(i+1)){\n\t\tcase '/':\n\t\t\tvar end = source.indexOf('>',i+3);\n\t\t\tvar tagName = source.substring(i+2,end);\n\t\t\tvar config;\n\t\t\tif (parseStack.length > 1) {\n\t\t\t\tconfig = parseStack.pop();\n\t\t\t} else {\n\t\t\t\terrorHandler.fatalError(\"end tag name not found for: \"+tagName);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\n\t        if(config.tagName != tagName){\n\t            errorHandler.fatalError(\"end tag name: \" + tagName + \" does not match the current start tagName: \"+config.tagName );\n\t        }\n\t\t\tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\tif(localNSMap){\n\t\t\t\tfor(var prefix in localNSMap){\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix) ;\n\t\t\t\t}\n\t\t\t}\n\t\t\tend++;\n\t\t\tbreak;\n\t\tcase '?':// <?...?>\n\t\t\tlocator&&position(i);\n\t\t\tend = parseInstruction(source,i,domBuilder);\n\t\t\tbreak;\n\t\tcase '!':// <!doctype,<![CDATA,<!--\n\t\t\tlocator&&position(i);\n\t\t\tend = parseDCC(source,i,domBuilder,errorHandler);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ttry{\n\t\t\t\tlocator&&position(i);\n\t\t\t\t\n\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\tvar end = parseElementStartPart(source,i,el,entityReplacer,errorHandler);\n\t\t\t\tvar len = el.length;\n\t\t\t\tif(len && locator){\n\t\t\t\t\tvar backup = copyLocator(locator,{});\n\t\t\t\t\tfor(var i = 0;i<len;i++){\n\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\ta.offset = copyLocator(locator,{});\n\t\t\t\t\t}\n\t\t\t\t\tcopyLocator(backup,locator);\n\t\t\t\t}\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tif(!entityMap.nbsp){\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tappendElement(el,domBuilder,parseStack);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\n\t\t\t\t}else{\n\t\t\t\t\tend++;\n\t\t\t\t}\n\t\t\t}catch(e){\n\t\t\t\terrorHandler.error('element parse error: '+e);\n\t\t\t\tend = -1;\n\t\t\t}\n\n\t\t}\n\t\tif(end<0){\n\t\t\tappendText(i+1);\n\t\t}else{\n\t\t\tstart = end;\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n\t\n}\nfunction parseElementStartPart(source,start,el,entityReplacer,errorHandler){\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_S){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\tthrow new Error('attribute equal must after attrName');\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ){//equal\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\tel.add(attrName,value,start-1);\n\t\t\t\t\ts = S_E;\n\t\t\t\t}else{\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_V){\n\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tel.add(attrName,value,start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_E\n\t\t\t}else{\n\t\t\t\tthrow new Error('attribute value must after \"=\"');\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_E:\n\t\t\tcase S_S:\n\t\t\tcase S_C:\n\t\t\t\ts = S_C;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_V:\n\t\t\tcase S_ATTR:\n\t\t\tcase S_ATTR_S:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\")\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_E:\n\t\t\tcase S_S:\n\t\t\tcase S_C:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_V://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed  = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_S:\n\t\t\t\tif(s === S_ATTR_S){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_V){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\tel.add(attrName,value.replace(/&#?\\w+;/g,entityReplacer),start)\n\t\t\t\t}else{\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\tel.add(value,value,start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_S;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_S;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_V:\n\t\t\t\t\tvar value = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\tel.add(attrName,value,start)\n\t\t\t\tcase S_E:\n\t\t\t\t\ts = S_S;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{//not space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_ATTR_S:\n\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead!!')\n\t\t\t\t\tel.add(attrName,attrName,start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_E:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_S:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_V;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_C:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tp++;\n\t}\n}\nfunction appendElement(el,domBuilder,parseStack){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\ta.localName = localName ;\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = 'http://www.w3.org/2000/xmlns/'\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value) \n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = 'http://www.w3.org/XML/1998/namespace';\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix]\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor(prefix in localNSMap){\n\t\t\t\tdomBuilder.endPrefixMapping(prefix) \n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\tparseStack.push(el);\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\treturn elEndStart;\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\tpos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>')\n\t}\n\treturn pos<elStartEnd;\n}\nfunction _copy(source,target){\n\tfor(var n in source){target[n] = source[n]}\n}\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\n\tvar next= source.charAt(start+2)\n\tswitch(next){\n\tcase '-':\n\t\tif(source.charAt(start + 3) === '-'){\n\t\t\tvar end = source.indexOf('-->',start+4);\n\t\t\tif(end>start){\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\n\t\t\t\treturn end+3;\n\t\t\t}else{\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}else{\n\t\t\treturn -1;\n\t\t}\n\tdefault:\n\t\tif(source.substr(start+3,6) == 'CDATA['){\n\t\t\tvar end = source.indexOf(']]>',start+9);\n\t\t\tdomBuilder.startCDATA();\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\n\t\t\tdomBuilder.endCDATA() \n\t\t\treturn end+3;\n\t\t}\n\t\tvar matchs = split(source,start);\n\t\tvar len = matchs.length;\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\n\t\t\tvar name = matchs[1][0];\n\t\t\tvar pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]\n\t\t\tvar sysid = len>4 && matchs[4][0];\n\t\t\tvar lastMatch = matchs[len-1]\n\t\t\tdomBuilder.startDTD(name,pubid && pubid.replace(/^(['\"])(.*?)\\1$/,'$2'),\n\t\t\t\t\tsysid && sysid.replace(/^(['\"])(.*?)\\1$/,'$2'));\n\t\t\tdomBuilder.endDTD();\n\t\t\t\n\t\t\treturn lastMatch.index+lastMatch[0].length\n\t\t}\n\t}\n\treturn -1;\n}\n\n\n\nfunction parseInstruction(source,start,domBuilder){\n\tvar end = source.indexOf('?>',start);\n\tif(end){\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\n\t\tif(match){\n\t\t\tvar len = match[0].length;\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\n\t\t\treturn end+2;\n\t\t}else{//error\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn -1;\n}\nfunction ElementAttributes(source){\n\t\n}\nElementAttributes.prototype = {\n\tsetTagName:function(tagName){\n\t\tif(!tagNamePattern.test(tagName)){\n\t\t\tthrow new Error('invalid tagName:'+tagName)\n\t\t}\n\t\tthis.tagName = tagName\n\t},\n\tadd:function(qName,value,offset){\n\t\tif(!tagNamePattern.test(qName)){\n\t\t\tthrow new Error('invalid attribute:'+qName)\n\t\t}\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\n\t},\n\tlength:0,\n\tgetLocalName:function(i){return this[i].localName},\n\tgetOffset:function(i){return this[i].offset},\n\tgetQName:function(i){return this[i].qName},\n\tgetURI:function(i){return this[i].uri},\n\tgetValue:function(i){return this[i].value}\n}\n\n\n\n\nfunction _set_proto_(thiz,parent){\n\tthiz.__proto__ = parent;\n\treturn thiz;\n}\nif(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){\n\t_set_proto_ = function(thiz,parent){\n\t\tfunction p(){};\n\t\tp.prototype = parent;\n\t\tp = new p();\n\t\tfor(parent in thiz){\n\t\t\tp[parent] = thiz[parent];\n\t\t}\n\t\treturn p;\n\t}\n}\n\nfunction split(source,start){\n\tvar match;\n\tvar buf = [];\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\n\treg.lastIndex = start;\n\treg.exec(source);//skip <\n\twhile(match = reg.exec(source)){\n\t\tbuf.push(match);\n\t\tif(match[1])return buf;\n\t}\n}\n\nreturn XMLReader;\n});\n\nace.define(\"ace/mode/xml/dom\",[], function(require, exports, module) {\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tdest[p] = src[p];\n\t}\n}\nfunction _extends(Class,Super){\n\tvar t = function(){};\n\tvar pt = Class.prototype;\n\tif(Object.create){\n\t\tvar ppt = Object.create(Super.prototype);\n\t\tpt.__proto__ = ppt;\n\t}\n\tif(!(pt instanceof Super)){\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class);\n\t\t}\n\t\tpt.constructor = Class;\n\t}\n}\nvar htmlns = 'http://www.w3.org/1999/xhtml' ;\nvar NodeType = {};\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\nvar ExceptionCode = {};\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\nfunction NodeList() {\n};\nNodeList.prototype = {\n\tlength:0,\n\titem: function(index) {\n\t\treturn this[index] || null;\n\t}\n};\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh;\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif(list._inc != inc){\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list,'length',ls.length);\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i];\n}\n\n_extends(LiveNodeList,NodeList);\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1;\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i];\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow new DOMException(NOT_FOUND_ERR,new Error());\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\nfunction DOMImplementation(/* Object */ features) {\n\tthis._features = {};\n\tif (features) {\n\t\tfor (var feature in features) {\n\t\t\t this._features = features[feature];\n\t\t}\n\t}\n};\n\nDOMImplementation.prototype = {\n\thasFeature: function(/* string */ feature, /* string */ version) {\n\t\tvar versions = this._features[feature.toLowerCase()];\n\t\tif (versions && (!version || version in versions)) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t},\n\tcreateDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype;\n\t\tif(doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif(qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI,qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\tcreateDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId;\n\t\tnode.systemId = systemId;\n\t\treturn node;\n\t}\n};\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\tthis.insertBefore(newChild,oldChild);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n    \t\t\t\tif(map[n] == namespaceURI){\n    \t\t\t\t\treturn n;\n    \t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == 2?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\tif(map){\n    \t\t\tif(prefix in map){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == 2?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';';\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n        }while(node=node.nextSibling)\n    }\n}\n\n\n\nfunction Document(){\n}\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:''];\n\t}\n}\nfunction _onUpdateChild(doc,el,newChild){\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\tvar cs = el.childNodes;\n\t\tif(newChild){\n\t\t\tcs[cs.length++] = newChild;\n\t\t}else{\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile(child){\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild =child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t}\n\t}\n}\nfunction _removeChild(parentNode,child){\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif(previous){\n\t\tprevious.nextSibling = next;\n\t}else{\n\t\tparentNode.firstChild = next\n\t}\n\tif(next){\n\t\tnext.previousSibling = previous;\n\t}else{\n\t\tparentNode.lastChild = previous;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument,parentNode);\n\treturn child;\n}\nfunction _insertBefore(parentNode,newChild,nextChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tcp.removeChild(newChild);//remove and update\n\t}\n\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = newChild.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn newChild;\n\t\t}\n\t\tvar newLast = newChild.lastChild;\n\t}else{\n\t\tnewFirst = newLast = newChild;\n\t}\n\tvar pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = nextChild;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparentNode.firstChild = newFirst;\n\t}\n\tif(nextChild == null){\n\t\tparentNode.lastChild = newLast;\n\t}else{\n\t\tnextChild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parentNode;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);\n\tif (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnewChild.firstChild = newChild.lastChild = null;\n\t}\n\treturn newChild;\n}\nfunction _appendSingleChild(parentNode,newChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tvar pre = parentNode.lastChild;\n\t\tcp.removeChild(newChild);//remove and update\n\t\tvar pre = parentNode.lastChild;\n\t}\n\tvar pre = parentNode.lastChild;\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = pre;\n\tnewChild.nextSibling = null;\n\tif(pre){\n\t\tpre.nextSibling = newChild;\n\t}else{\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);\n\treturn newChild;\n}\nDocument.prototype = {\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\n\tinsertBefore :  function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\tif(this.documentElement == null && newChild.nodeType == 1){\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == 1){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn rtv;\n\t},\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.target = target;\n\t\tnode.nodeValue= node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr);\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr);\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\t},\n\tappendChild:function(newChild){\n\t\t\tthrow new Error(ExceptionMessage[3]);\n\t\treturn Node.prototype.appendChild.apply(this,arguments);\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n}\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n}\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n}\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n}\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n}\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node){\n\tvar buf = [];\n\tserializeToString(node,buf);\n\treturn buf.join('');\n}\nNode.prototype.toString =function(){\n\treturn XMLSerializer.prototype.serializeToString(this);\n}\nfunction serializeToString(node,buf){\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\t\tvar isHTML = htmlns === node.namespaceURI;\n\t\tbuf.push('<',nodeName);\n\t\tfor(var i=0;i<len;i++){\n\t\t\tserializeToString(attrs.item(i),buf);\n\t\t}\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\tif(child){\n\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child,buf);\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',nodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child,buf);\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn buf.push(' ',node.name,'=\"',node.value.replace(/[<&\"]/g,_xmlEncoder),'\"');\n\tcase TEXT_NODE:\n\t\treturn buf.push(node.data.replace(/[<&]/g,_xmlEncoder));\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC \"',pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push( '\" \"',sysid);\n\t\t\t}\n\t\t\tbuf.push('\">');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM \"',sysid,'\">');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor(var n in node){\n\t\tvar v = node[n];\n\t\tif(typeof v != 'object' ){\n\t\t\tif(v != node2[n]){\n\t\t\t\tnode2[n] = v;\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length;\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value;\n}\nfunction getTextContent(node){\n\tswitch(node.nodeType){\n\tcase 1:\n\tcase 11:\n\t\tvar buf = [];\n\t\tnode = node.firstChild;\n\t\twhile(node){\n\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t}\n\t\t\tnode = node.nextSibling;\n\t\t}\n\t\treturn buf.join('');\n\tdefault:\n\t\treturn node.nodeValue;\n\t}\n}\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase 1:\n\t\t\t\tcase 11:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = value;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t__set__ = function(object,key,value){\n\t\t\tobject['$$'+key] = value;\n\t\t};\n\t}\n}catch(e){//ie8\n}\n\nreturn DOMImplementation;\n});\n\nace.define(\"ace/mode/xml/dom-parser\",[], function(require, exports, module) {\n\t'use strict';\n\n\tvar XMLReader = require('./sax'),\n\t\tDOMImplementation = require('./dom');\n\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n\t\n}\nDOMParser.prototype.parseFromString = function(source,mimeType){\t\n\tvar options = this.options;\n\tvar sax =  new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar entityMap = {'lt':'<','gt':'>','amp':'&','quot':'\"','apos':\"'\"}\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\t\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(/\\/x?html?$/.test(mimeType)){\n\t\tentityMap.nbsp = '\\xa0';\n\t\tentityMap.copy = '\\xa9';\n\t\tdefaultNSMap['']= 'http://www.w3.org/1999/xhtml';\n\t}\n\tif(source){\n\t\tsax.parse(source,defaultNSMap,entityMap);\n\t}else{\n\t\tsax.errorHandler.error(\"invalid document source\");\n\t}\n\treturn domBuilder.document;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn){\n\t\t\tif(isCallback){\n\t\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t\t}else{\n\t\t\t\tvar i=arguments.length;\n\t\t\t\twhile(--i){\n\t\t\t\t\tif(fn = errorImpl[arguments[i]]){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn(msg+_locator(locator), msg, locator);\n\t\t}||function(){};\n\t}\n\tbuild('warning','warn');\n\tbuild('error','warn','warning');\n\tbuild('fatalError','warn','warning','error');\n\treturn errorHandler;\n}\nfunction DOMHandler() {\n    this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n} \nDOMHandler.prototype = {\n\tstartDocument : function() {\n    \tthis.document = new DOMImplementation().createDocument(null, null, null);\n    \tif (this.locator) {\n        \tthis.document.documentURI = this.locator.systemId;\n    \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.document;\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\n\t    var len = attrs.length;\n\t    appendElement(this, el);\n\t    this.currentElement = el;\n\t    \n\t\tthis.locator && position(this.locator,el)\n\t    for (var i = 0 ; i < len; i++) {\n\t        var namespaceURI = attrs.getURI(i);\n\t        var value = attrs.getValue(i);\n\t        var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tif( attr.getOffset){\n\t\t\t\tposition(attr.getOffset(1),attr)\n\t\t\t}\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t    }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t    var tagName = current.tagName;\n\t    this.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t    var ins = this.document.createProcessingInstruction(target, data);\n\t    this.locator && position(this.locator,ins)\n\t    appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\tif(this.currentElement && chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.document.createCDATASection(chars);\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.document.createTextNode(chars);\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.document.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\n\t    \tlocator.lineNumber = 0;\n\t    }\n\t},\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t    var comm = this.document.createComment(chars);\n\t    this.locator && position(this.locator,comm)\n\t    appendElement(this, comm);\n\t},\n\t\n\tstartCDATA:function() {\n\t    this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t    this.cdata = false;\n\t},\n\t\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.document.implementation;\n\t    if (impl && impl.createDocumentType) {\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\n\t        this.locator && position(this.locator,dt)\n\t        appendElement(this, dt);\n\t    }\n\t},\n\twarning:function(error) {\n\t\tconsole.warn(error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error(error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tconsole.error(error,_locator(this.locator));\n\t    throw error;\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\nfunction appendElement (hander,node) {\n    if (!hander.currentElement) {\n        hander.document.appendChild(node);\n    } else {\n        hander.currentElement.appendChild(node);\n    }\n}//appendChild and setAttributeNS are preformance key\n\nreturn {\n\t\tDOMParser: DOMParser\n\t };\n});\n\nace.define(\"ace/mode/xml_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar DOMParser = require(\"./xml/dom-parser\").DOMParser;\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.context = null;\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.setOptions = function(options) {\n        this.context = options.context;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return;\n        var parser = new DOMParser();\n        var errors = [];\n        parser.options.errorHandler = {\n            fatalError: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"error\"\n                });\n            },\n            error: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"error\"\n                });\n            },\n            warning: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"warning\"\n                });\n            }\n        };\n        \n        parser.parseFromString(value);\n        this.sender.emit(\"error\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/src-noconflict/worker-xquery.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function(resolve) {\n            callback = resolve;\n        });\n    }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: index + lines[l-1].length + newlineLength};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/xquery/xqlint\",[], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/compiler/errors.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar init = function(that, code, message, pos, type){\n    if(!code) {\n        throw new Error(type + ' code is missing.');\n    }\n    \n    if(!message) {\n        throw new Error(type + ' message is missing.');\n    }\n    \n    if(!pos) {\n        throw new Error(type + ' position is missing.');\n    }\n\n    that.getCode = function(){\n        return code;\n    };\n    \n    that.getMessage = function(){\n        return message;\n    };\n\n    that.getPos = function(){\n        return pos;\n    };\n};\n\nvar StaticError = {};\nvar StaticWarning = {};\nStaticError.prototype = new Error();\nStaticWarning.prototype = new Error();\n\nexports.StaticError = StaticError.prototype.constructor = function(code, message, pos) {\n    init(this, code, message, pos, 'Error');\n};\n\nexports.StaticWarning = StaticWarning.prototype.constructor = function(code, message, pos) {\n    init(this, code, message, pos, 'Warning');\n};\n},{}],\"/node_modules/xqlint/lib/compiler/handlers.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TreeOps = _dereq_('../tree_ops').TreeOps;\nvar Errors = _dereq_('./errors');\nvar StaticWarning = Errors.StaticWarning;\nexports.ModuleDecl = function(translator, rootSctx, node){\n    var prefix = '';\n    return {\n        NCName: function(ncname){\n            prefix = TreeOps.flatten(ncname);\n        },\n\n        URILiteral: function(uri) {\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            translator.apply(function(){\n                rootSctx.moduleNamespace = uri;\n                rootSctx.addNamespace(uri, prefix, node.pos, 'moduleDecl');\n            });\n        }\n    };\n};\n\nexports.ModuleImport = function(translator, rootSctx, node) {\n    var prefix = '';\n    var moduleURI;\n\n    return {\n        NCName: function(ncname){\n            prefix = TreeOps.flatten(ncname);\n        },\n\n        URILiteral: function(uri) {\n            if(moduleURI !== undefined) {\n                return;\n            }\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            moduleURI = uri;\n            translator.apply(function(){\n                rootSctx.importModule(uri, prefix, node.pos);\n            });\n        }\n    };\n};\n\nexports.SchemaImport = function(translator, rootSctx, node) {\n    var prefix = '';\n    var schemaURI;\n    \n    return {\n        SchemaPrefix: function(schemaPrefix) {\n            var SchemaPrefixHandler = function () {\n                this.NCName = function (ncname) {\n                    prefix = TreeOps.flatten(ncname);\n                };\n            };\n            translator.visitChildren(schemaPrefix, new SchemaPrefixHandler());\n        },\n\n        URILiteral: function(uri) {\n            if(schemaURI !== undefined) {\n                return;\n            }\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            schemaURI = uri;\n            translator.apply(function(){\n                rootSctx.addNamespace(uri, prefix, node.pos, 'schema');\n            });\n        }\n    };\n};\n\nexports.DefaultNamespaceDecl = function(translator, rootSctx, node) {\n    var fn = false;\n    var ns = '';\n\n    return {\n        TOKEN: function(token){\n            fn = fn ? true : (token.value === 'function');\n        },\n        URILiteral: function(uri){\n            ns = TreeOps.flatten(uri);\n            ns = ns.substring(1, ns.length - 1);\n            if(!fn) {\n                translator.apply(function(){\n                    throw new StaticWarning('W06', 'Avoid default element namespace declarations.', node.pos);\n                });\n                rootSctx.defaultElementNamespace = ns;\n            } else {\n                rootSctx.defaultFunctionNamespace = ns;\n            }\n        }\n    };\n};\n\nexports.NamespaceDecl = function(translator, rootSctx, node) {\n    var prefix = '';\n    return {\n        NCName: function(ncname) {\n            prefix = TreeOps.flatten(ncname);\n        },\n        URILiteral: function(uri) {\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            translator.apply(function(){\n                rootSctx.addNamespace(uri, prefix, node.pos, 'declare');\n            });\n        }\n    };\n};\nexports.VarHandler = function(translator, sctx, node){\n    var EQNameHandler = function(eqname){\n        var value = TreeOps.flatten(eqname);\n        translator.apply(function(){\n            var qname = sctx.resolveQName(value, eqname.pos);\n            sctx.addVariable(qname, node.name, eqname.pos);\n        });\n    };\n    return {\n        ExprSingle: function(){ return true; },\n        VarValue: function(){ return true; },\n        VarDefaultValue: function(){ return true; },\n        VarName: EQNameHandler,\n        EQName: EQNameHandler\n    };\n};\n\nexports.VarRefHandler = function(translator, sctx, node){\n    return {\n        VarName: function(eqname){\n            var value = TreeOps.flatten(eqname);\n            translator.apply(function(){\n                var qname = sctx.resolveQName(value, node.pos);\n                if(qname.uri !== '') {\n                    sctx.root.namespaces[qname.uri].used = true;\n                }\n                sctx.addVarRef(qname, eqname.pos);\n            });\n        }\n    };\n};\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\"}],\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\":[function(_dereq_,module,exports){\n'use strict';\nexports.getSchemaBuiltinTypes = function(){\n    var ns = 'http://www.w3.org/2001/XMLSchema';\n    var SchemaBuiltinTypes = {};\n    SchemaBuiltinTypes[ns] = {\n        variables: {},\n        functions: {}\n    };\n    SchemaBuiltinTypes[ns].functions[ns + '#string#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'string', arity: 1, eqname: { uri: ns, name: 'string' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#boolean#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'boolean', arity: 1, eqname: { uri: ns, name: 'boolean' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#decimal#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'decimal', arity: 1, eqname: { uri: ns, name: 'decimal' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#float#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'float', arity: 1, eqname: { uri: ns, name: 'float' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#double#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'double', arity: 1, eqname: { uri: ns, name: 'double' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#duration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'duration', arity: 1, eqname: { uri: ns, name: 'duration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#dateTime#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'dateTime', arity: 1, eqname: { uri: ns, name: 'dateTime' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#time#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'time', arity: 1, eqname: { uri: ns, name: 'time' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#date#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'date', arity: 1, eqname: { uri: ns, name: 'date' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gYearMonth#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gYearMonth', arity: 1, eqname: { uri: ns, name: 'gYearMonth' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gYear#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gYear', arity: 1, eqname: { uri: ns, name: 'gYear' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gMonthDay#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gMonthDay', arity: 1, eqname: { uri: ns, name: 'gMonthDay' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gDay#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gDay', arity: 1, eqname: { uri: ns, name: 'gDay' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gMonth#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gMonth', arity: 1, eqname: { uri: ns, name: 'gMonth' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#hexBinary#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'hexBinary', arity: 1, eqname: { uri: ns, name: 'hexBinary' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#base64Binary#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'base64Binary', arity: 1, eqname: { uri: ns, name: 'base64Binary' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#anyURI#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'anyURI', arity: 1, eqname: { uri: ns, name: 'anyURI' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#QName#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'QName', arity: 1, eqname: { uri: ns, name: 'QName' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#normalizedString#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'normalizedString', arity: 1, eqname: { uri: ns, name: 'normalizedString' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#token#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'token', arity: 1, eqname: { uri: ns, name: 'token' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#language#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'language', arity: 1, eqname: { uri: ns, name: 'language' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#NMTOKEN#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'NMTOKEN', arity: 1, eqname: { uri: ns, name: 'NMTOKEN' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#Name#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'Name', arity: 1, eqname: { uri: ns, name: 'Name' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#NCName#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'NCName', arity: 1, eqname: { uri: ns, name: 'NCName' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#ID#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'ID', arity: 1, eqname: { uri: ns, name: 'ID' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#IDREF#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'IDREF', arity: 1, eqname: { uri: ns, name: 'IDREF' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#ENTITY#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'ENTITY', arity: 1, eqname: { uri: ns, name: 'ENTITY' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#integer#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'integer', arity: 1, eqname: { uri: ns, name: 'integer' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#nonPositiveInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'nonPositiveInteger', arity: 1, eqname: { uri: ns, name: 'nonPositiveInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#negativeInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'negativeInteger', arity: 1, eqname: { uri: ns, name: 'negativeInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#long#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'long', arity: 1, eqname: { uri: ns, name: 'long' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#int#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'int', arity: 1, eqname: { uri: ns, name: 'int' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#short#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'short', arity: 1, eqname: { uri: ns, name: 'short' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#byte#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'byte', arity: 1, eqname: { uri: ns, name: 'byte' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#nonNegativeInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'nonNegativeInteger', arity: 1, eqname: { uri: ns, name: 'nonNegativeInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedLong#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedLong', arity: 1, eqname: { uri: ns, name: 'unsignedLong' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedInt#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedInt', arity: 1, eqname: { uri: ns, name: 'unsignedInt' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedShort#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedShort', arity: 1, eqname: { uri: ns, name: 'unsignedShort' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedByte#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedByte', arity: 1, eqname: { uri: ns, name: 'unsignedByte' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#positiveInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'positiveInteger', arity: 1, eqname: { uri: ns, name: 'positiveInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#yearMonthDuration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'yearMonthDuration', arity: 1, eqname: { uri: ns, name: 'yearMonthDuration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#dayTimeDuration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'dayTimeDuration', arity: 1, eqname: { uri: ns, name: 'dayTimeDuration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#untypedAtomic#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'untypedAtomic', arity: 1, eqname: { uri: ns, name: 'untypedAtomic' } };\n    return SchemaBuiltinTypes;\n};\n},{}],\"/node_modules/xqlint/lib/compiler/static_context.js\":[function(_dereq_,module,exports){\nexports.StaticContext = function (parent, pos) {\n    'use strict';\n    \n    var TreeOps = _dereq_('../tree_ops').TreeOps;\n    \n    var Errors = _dereq_('./errors');\n    var StaticError = Errors.StaticError;\n    var StaticWarning = Errors.StaticWarning;\n    \n    var getSchemaBuiltinTypes = _dereq_('./schema_built-in_types').getSchemaBuiltinTypes;\n    \n    var emptyPos = { sl:0, sc: 0, el: 0, ec: 0 };\n    var namespaces = {};\n    \n    var getVarKey = function(qname) {\n        return qname.uri + '#' + qname.name;\n    };\n\n    var getFnKey = function(qname, arity) {\n        return getVarKey(qname) + '#' + arity;\n    };\n\n    if(!parent) {\n        namespaces['http://jsoniq.org/functions'] = {\n            prefixes: ['jn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.28msec.com/modules/collections'] = {\n            prefixes: ['db'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.28msec.com/modules/store'] = {\n            prefixes: ['store'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://jsoniq.org/function-library'] = {\n            prefixes: ['libjn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xpath-functions'] = {\n            prefixes: ['fn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xquery-local-functions'] = {\n            prefixes: ['local'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.w3.org/2001/XMLSchema-instance'] = {\n            prefixes: ['xsi'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://www.w3.org/2001/XMLSchema'] = {\n            prefixes: ['xs'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://www.w3.org/XML/1998/namespace'] = {\n            prefixes: ['xml'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://zorba.io/annotations'] = {\n            prefixes: ['an'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.28msec.com/annotations/rest'] = {\n            prefixes: ['rest'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xqt-errors'] = {\n            prefixes: ['err'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://zorba.io/errors'] = {\n            prefixes: ['zerr'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n    }\n\n    var s = {\n        parent: parent,\n        children: [],\n        pos: pos,\n        setModuleResolver: function(resolver){\n            this.root.moduleResolver = resolver;\n            return this;\n        },\n        setModules: function(index){\n            if(this !== this.root){\n                throw new Error('setModules() not invoked from the root static context.');\n            }\n            this.moduleResolver = function(uri){\n                return index[uri];\n            };\n            var that = this;\n            Object.keys(this.namespaces).forEach(function(uri){\n                var ns = that.namespaces[uri];\n                if(ns.type === 'module') {\n                    var mod = that.moduleResolver(uri);\n                    if(mod.variables) {\n                        TreeOps.concat(that.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(that.functions, mod.functions);\n                    }\n                }\n            });\n            return this;\n        },\n        setModulesFromXQDoc: function(xqdoc){\n            if(this !== this.root){\n                throw new Error('setModulesFromXQDoc() not invoked from the root static context.');\n            }\n            var index = {};\n            Object.keys(xqdoc).forEach(function(uri) {\n                var mod = xqdoc[uri];\n                var variables = {};\n                var functions = {};\n                mod.functions.forEach(function(fn){\n                    functions[uri + '#' + fn.name + '#' + fn.arity] = {\n                        params: [],\n                        annotations: [],\n                        name: fn.name,\n                        arity: fn.arity,\n                        eqname: { uri: uri, name: fn.name }\n                    };\n                    fn.parameters.forEach(function(param){\n                        functions[uri + '#' + fn.name + '#' + fn.arity].params.push('$' + param.name);\n                    });\n                });\n                mod.variables.forEach(function(variable){\n                    var name = variable.name.substring(variable.name.indexOf(':') + 1);\n                    variables[uri + '#' + name] = { type: 'VarDecl', annotations: [], eqname: { uri: uri, name: name } };\n                });\n                index[uri] = {\n                    variables: variables,\n                    functions: functions\n                };\n            });\n            this.root.moduleResolver = function(uri){\n                return index[uri];\n            };\n            var that = this;\n            Object.keys(this.namespaces).forEach(function(uri){\n                var ns = that.namespaces[uri];\n                if(ns.type === 'module') {\n                    var mod = that.moduleResolver(uri);\n                    if(mod.variables) {\n                        TreeOps.concat(that.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(that.functions, mod.functions);\n                    }\n                }\n            });\n            return this;\n        },\n        moduleNamespace: '',\n        description: '',\n        defaultFunctionNamespace: 'http://www.w3.org/2005/xpath-functions',\n        defaultFunctionNamespaces: [\n            'http://www.28msec.com/modules/collections',\n            'http://www.28msec.com/modules/store',\n            'http://jsoniq.org/functions',\n            'http://jsoniq.org/function-library',\n            'http://www.w3.org/2001/XMLSchema' //Built-in type constructors\n        ],\n        defaultElementNamespace: '',\n        namespaces: namespaces,\n        availableModuleNamespaces: [],\n        importModule: function(uri, prefix, pos) {\n            if(this !== this.root){\n                throw new Error('Function not invoked from the root static context.');\n            }\n            this.addNamespace(uri, prefix, pos, 'module');\n            if(this.moduleResolver) {\n                try {\n                    var mod = this.moduleResolver(uri, []);\n                    if(mod.variables) {\n                        TreeOps.concat(this.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(this.functions, mod.functions);\n                    }\n                } catch(e) {\n                    throw new StaticError('XQST0059', 'module \"' + uri + '\" not found', pos);\n                }\n            }\n            return this;\n        },\n\n        getAvailableModuleNamespaces: function(){\n            return this.root.availableModuleNamespaces;\n        },\n\n        getPrefixesByNamespace: function(uri){\n            return this.root.namespaces[uri].prefixes;\n        },\n\n        addNamespace: function (uri, prefix, pos, type) {\n            if(prefix === '' && type === 'module') {\n                throw new StaticWarning('W01', 'Avoid this type of import. Use import module namespace instead', pos);\n            }\n            if (uri === '') {\n                throw new StaticError('XQST0088', 'empty target namespace in module import or module declaration', pos);\n            }\n            var namespace = this.getNamespace(uri);\n            if (namespace && namespace.type === type && type !== 'declare' && !namespace.override) {\n                throw new StaticError('XQST0047', '\"' + uri + '\": duplicate target namespace', pos);\n            }\n            namespace = this.getNamespaceByPrefix(prefix);\n            if (namespace && !namespace.override) {\n                throw new StaticError('XQST0033', '\"' + prefix + '\": namespace prefix already bound to \"' + namespace.uri + '\"', pos);\n            }\n\n            namespace = this.namespaces[uri];\n            var prefixes = [prefix];\n            if(namespace) {\n                prefixes = prefixes.concat(this.namespaces[uri].prefixes);\n            }\n            this.namespaces[uri] = {\n                prefixes: prefixes,\n                pos: pos,\n                type: type\n            };\n\n            if (namespace) {\n                throw new StaticWarning('W02', '\"' + uri + '\" already bound to the \"' + namespace.prefixes.join(', ') + '\" prefix', pos);\n            }\n\n        },\n\n        getNamespaces: function(){\n            return this.root.namespaces;\n        },\n        \n        getNamespace: function (uri) {\n            var that = this;\n            while (that) {\n                var namespace = that.namespaces[uri];\n                if (namespace) {\n                    return namespace;\n                }\n                that = that.parent;\n            }\n\n        },\n\n        getNamespaceByPrefix: function (prefix) {\n            var found = [];\n            var handler = function (uri) {\n                var namespace = that.namespaces[uri];\n                if (namespace.prefixes.indexOf(prefix) !== -1) {\n                    namespace.uri = uri;\n                    found.push(namespace);\n                }\n            };\n            var that = this;\n            while (that) {\n                Object.keys(that.namespaces).forEach(handler);\n                that = that.parent;\n            }\n            var result;\n            found.forEach(function(ns){\n                if(ns.type === 'moduleDecl') {\n                    result = ns;\n                }\n            });\n            if(result) {\n                return result;\n            } else {\n                return found[0];\n            }\n        },\n        \n        resolveQName: function(value, pos){\n            var qname = {\n                uri: '',\n                prefix: '',\n                name: ''\n            };\n            var idx;\n            if (value.substring(0, 2) === 'Q{') {\n                idx = value.indexOf('}');\n                qname.uri = value.substring(2, idx);\n                qname.name = value.substring(idx + 1);\n            } else {\n                idx = value.indexOf(':');\n                qname.prefix = value.substring(0, idx);\n                var namespace = this.getNamespaceByPrefix(qname.prefix);\n                if(!namespace && qname.prefix !== '' && ['fn', 'jn'].indexOf(qname.prefix) === -1) {\n                    throw new StaticError('XPST0081', '\"' + qname.prefix + '\": can not expand prefix of lexical QName to namespace URI', pos);\n                }\n                if(namespace) {\n                    qname.uri = namespace.uri;\n                }\n                qname.name = value.substring(idx + 1);\n            }\n            return qname;\n        },\n        \n        variables: {},\n        varRefs: {},\n        functionCalls: {},\n    \n        addVariable: function(qname, type, pos){\n            if(\n                type === 'VarDecl' && this.moduleNamespace !== '' &&\n                !(this.moduleNamespace === qname.uri || qname.uri === '')\n            ) {\n                throw new StaticError('XQST0048', '\"' + qname.prefix + ':' + qname.name + '\": Qname not library namespace', pos);\n            }\n            var key = getVarKey(qname);\n            if(type === 'VarDecl' && this.variables[key]) {\n                throw new StaticError('XQST0049', '\"' + qname.name + '\": duplicate variable declaration', pos);\n            }\n            this.variables[key] = {\n                type: type,\n                pos: pos,\n                qname: qname,\n                annotations: {}\n            };\n            return this;\n        },\n        \n        getVariables: function(){\n            var variables = {};\n            var that = this;\n            var handler = function(key){\n                if(!variables[key]){\n                    variables[key] = that.variables[key];\n                }\n            };\n            while(that){\n                Object.keys(that.variables).forEach(handler);\n                that = that.parent;\n            }\n            return variables;\n        },\n        \n        getVariable: function(qname) {\n            var key = getVarKey(qname);\n            var that = this;\n            while(that) {\n                if(that.variables[key]) {\n                    return that.variables[key];\n                }\n                that = that.parent;\n            }\n        },\n        \n        addVarRef: function(qname, pos){\n            var varDecl = this.getVariable(qname);\n            if(!varDecl && (qname.uri === '' || this.root.moduleResolver)) {\n                throw new StaticError('XPST0008', '\"' + qname.name + '\": undeclared variable', pos);\n            }\n            var key = getVarKey(qname);\n            this.varRefs[key] = true;\n        },\n        \n        addFunctionCall: function(qname, arity, pos){\n            var fn = this.getFunction(qname, arity);\n            if(!fn && (qname.uri === 'http://www.w3.org/2005/xquery-local-functions' || this.root.moduleResolver)){\n                if((qname.uri === 'http://www.w3.org/2005/xpath-functions' ||\n                    (qname.uri === '' && this.root.defaultFunctionNamespaces.concat(this.root.defaultFunctionNamespace).indexOf('http://www.w3.org/2005/xpath-functions') !== -1)) && qname.name === 'concat') {\n                } else if(!fn){\n                    throw new StaticError('XPST0008', '\"' + qname.name + '#' + arity + '\": undeclared function', pos);\n                }\n            }\n            var key = getFnKey(qname, arity);\n            this.functionCalls[key] = true;\n        },\n        \n        functions: getSchemaBuiltinTypes()['http://www.w3.org/2001/XMLSchema'].functions,\n\n        getFunctions: function(){\n            return this.root.functions;\n        },\n        \n        getFunction: function(qname, arity){\n            var key = getFnKey(qname, arity);\n            var fn;\n            if(qname.uri === '') {\n                var that = this;\n                this.root.defaultFunctionNamespaces.concat([this.root.defaultFunctionNamespace]).forEach(function(defaultFunctionNamespace){\n                    if(!fn){\n                        fn = that.getFunction({ uri: defaultFunctionNamespace, prefix: qname.prefix, name: qname.name }, arity);\n                    } else {\n                        return false;\n                    }\n                });\n                return fn;\n            } else {\n                return this.root.functions[key];\n            }\n        },\n        \n        addFunction: function(qname, pos, params) {\n            if(this !== this.root){\n                throw new Error('addFunction() not invoked from the root static context.');\n            }\n            var arity = params.length;\n            if(\n                this.moduleNamespace !== '' &&\n                !(this.moduleNamespace === qname.uri || (qname.uri === '' && this.defaultFunctionNamespace === this.moduleNamespace))\n            ) {\n                throw new StaticError('XQST0048', '\"' + qname.prefix + ':' + qname.name + '\": Qname not library namespace', pos);\n            }\n            var key = getFnKey(qname, arity);\n            if(this.functions[key]) {\n                throw new StaticError('XQST0034', '\"' + qname.name + '\": duplicate function declaration', pos);\n            }\n            this.functions[key] = {\n                pos: pos,\n                params: params\n            };\n            return this;\n        }\n        \n    };\n    s.root = parent ? parent.root : s;\n    return s;\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./schema_built-in_types\":\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\"}],\"/node_modules/xqlint/lib/compiler/translator.js\":[function(_dereq_,module,exports){\nexports.Translator = function(rootStcx, ast){\n    'use strict';\n\n    var Errors = _dereq_('./errors');\n    var StaticError = Errors.StaticError;\n    var StaticWarning = Errors.StaticWarning;\n    \n    var TreeOps = _dereq_('../tree_ops').TreeOps;\n    var StaticContext = _dereq_('./static_context').StaticContext;\n    var Handlers = _dereq_('./handlers');\n    \n    var get = function(node, path){\n        var result = [];\n        if(path.length === 0){\n            return node;\n        }\n        node.children.forEach(function(child){\n            if(child.name === path[0] && path.length > 1) {\n                result = get(child, path.slice(1));\n            } else if(child.name === path[0]) {\n                result.push(child);\n            }\n        });\n        return result;\n    };\n    \n    var markers = [];\n    this.apply = function(fn) {\n        try {\n            fn();\n        } catch(e) {\n            if(e instanceof StaticError) {\n                addStaticError(e);\n            } else if(e instanceof StaticWarning) {\n                addWarning(e.getCode(), e.getMessage(), e.getPos());\n            } else {\n                throw e;\n            }\n        }\n    };\n\n    var addStaticError = function(e){\n        markers.push({\n            pos: e.getPos(),\n            type: 'error',\n            level: 'error',\n            message: '[' + e.getCode() + '] ' + e.getMessage()\n        });\n    };\n    \n    var addWarning = function(code, message, pos) {\n        markers.push({\n            pos: pos,\n            type: 'warning',\n            level: 'warning',\n            message: '[' + code + '] ' + message\n        });\n    };\n    \n    this.getMarkers = function(){\n        return markers;\n    };\n\n    var translator = this;\n\n    rootStcx.pos = ast.pos;\n    var sctx = rootStcx;\n    var pushSctx = function(pos){\n        sctx = new StaticContext(sctx, pos);\n        sctx.parent.children.push(sctx);\n    };\n    \n    var popSctx = function(pos){\n        if (pos !== undefined) {\n            sctx.pos.el = pos.el;\n            sctx.pos.ec = pos.ec;\n        }\n\n        Object.keys(sctx.varRefs).forEach(function(key){\n            if(!sctx.variables[key]) {\n                sctx.parent.varRefs[key] = true;\n            }\n        });\n        Object.keys(sctx.variables).forEach(function(key){\n            if(!sctx.varRefs[key] && sctx.variables[key].type !== 'GroupingVariable' && sctx.variables[key].type !== 'CatchVar') {\n                addWarning('W03', 'Unused variable \"$' + sctx.variables[key].qname.name + '\"', sctx.variables[key].pos);\n            }\n        });\n        \n        sctx = sctx.parent;\n    };\n    \n    this.visitOnly = function(node, names) {\n        node.children.forEach(function(child){\n            if (names.indexOf(child.name) !== -1){\n                translator.visit(child);\n            }\n        });\n    };\n    \n    this.getFirstChild = function(node, name) {\n        var result;\n        node.children.forEach(function(child){\n            if(child.name === name && result === undefined){\n                result = child;\n            }\n        });\n        return result;\n    };\n\n    this.XQuery = function(node) {\n        rootStcx.description = node.comment ? node.comment.description : undefined;\n    };\n    \n    this.ModuleDecl = function(node){\n        this.visitChildren(node, Handlers.ModuleDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.Prolog = function(node){\n        this.visitOnly(node, ['DefaultNamespaceDecl', 'Setter', 'NamespaceDecl', 'Import']);\n        ast.index.forEach(function(node){\n            if(node.name === 'VarDecl') {\n                node.children.forEach(function(child){\n                    if(child.name === 'VarName') {\n                        translator.apply(function(){\n                            var value = TreeOps.flatten(child);\n                            var qname = rootStcx.resolveQName(value, child.pos);\n                            rootStcx.addVariable(qname, node.name, child.pos);\n                        });\n                    }\n                });\n            } else if(node.name === 'FunctionDecl') {\n                var qname, pos, params = [];\n                node.children.forEach(function(child){\n                    if(child.name === 'EQName') {\n                        qname = child;\n                        pos = child.pos;\n                    } else if(child.name === 'ParamList'){\n                        child.children.forEach(function(c){\n                            if(c.name === 'Param') {\n                                params.push(TreeOps.flatten(c));\n                            }\n                        });\n                    }\n                });\n                translator.apply(function(){\n                    qname = TreeOps.flatten(qname);\n                    qname = rootStcx.resolveQName(qname, pos);\n                    rootStcx.addFunction(qname, pos, params);\n                });\n            }\n        });\n        this.visitOnly(node, ['ContextItemDecl', 'AnnotatedDecl', 'OptionDecl']);\n        return true;\n    };\n    \n    this.ModuleImport = function (node) {\n        this.visitChildren(node, Handlers.ModuleImport(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.SchemaImport = function (node) {\n        this.visitChildren(node, Handlers.SchemaImport(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.DefaultNamespaceDecl = function(node){\n        this.visitChildren(node, Handlers.DefaultNamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.NamespaceDecl = function (node) {\n        this.visitChildren(node, Handlers.NamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    var annotations = {};\n    this.AnnotatedDecl = function(node) {\n        annotations = {};\n        this.visitChildren(node, Handlers.NamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.CompatibilityAnnotation = function(){\n        annotations['http://www.w3.org/2012/xquery#updating'] = [];\n        return true;\n    };\n    \n    this.Annotation = function(node){\n        this.visitChildren(node, {\n            EQName: function(eqname){\n                var value = TreeOps.flatten(eqname);\n                translator.apply(function(){\n                    var qname = sctx.resolveQName(value, eqname.pos);\n                    annotations[qname.uri + '#' + qname.name] = [];\n                });\n            }\n        });\n        return true;\n    };\n    \n    this.VarDecl = function(node){\n        try {\n            var varname = translator.getFirstChild(node, 'VarName');\n            var value = TreeOps.flatten(varname);\n            var qname = sctx.resolveQName(value, varname.pos);\n            var variable = rootStcx.getVariable(qname);\n            if(variable) {\n                variable.annotations = annotations;\n                variable.description = node.getParent.comment ? node.getParent.comment.description : undefined;\n                variable.type = TreeOps.flatten(get(node, ['TypeDeclaration'])[0]).substring(2).trim();\n                var last = variable.type.substring(variable.type.length - 1);\n                if(last === '?') {\n                    variable.occurrence = 0;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else if(last === '*') {\n                    variable.occurrence = -1;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else if(last === '+') {\n                    variable.occurrence = 2;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else {\n                    variable.occurrence = 1;\n                }\n            }\n        } catch(e) {\n        }\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        return true;\n    };\n    \n    this.FunctionDecl = function(node) {\n        var isUpdating = annotations['http://www.w3.org/2012/xquery#updating'] !== undefined;\n        var typeDecl = get(node, ['ReturnType'])[0];\n        var name = get(node, ['EQName'])[0];\n        if(!typeDecl && !isUpdating){\n            addWarning('W05', 'Untyped return value', name.pos);\n        }\n        var isExternal = false;\n        node.children.forEach(function(child){\n            if(child.name === 'TOKEN' && child.value === 'external') {\n                isExternal = true;\n                return false;\n            }\n        });\n        if(!isExternal) {\n            pushSctx(node.pos);\n            this.visitChildren(node);\n            popSctx();\n        }\n        return true;\n    };\n    \n    this.VarRef = function(node) {\n        this.visitChildren(node, Handlers.VarRefHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.Param = function(node){\n        var typeDecl = get(node, ['TypeDeclaration'])[0];\n        if(!typeDecl){\n            addWarning('W05', 'Untyped function parameter', node.pos);\n        }\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.InlineFunctionExpr\t= function(node) {\n        pushSctx(node.pos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n    var statementCount = [];\n    var handleStatements = function(node) {\n        pushSctx(node.pos);\n        statementCount.push(0);\n        translator.visitChildren(node);\n        for (var i = 1; i <= statementCount[statementCount.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        statementCount.pop();\n        popSctx();\n    };\n\n    this.StatementsAndOptionalExpr = function (node) {\n        handleStatements(node);\n        return true;\n    };\n\n    this.StatementsAndExpr = function (node) {\n        handleStatements(node);\n        return true;\n    };\n\n    this.BlockStatement = function (node) {\n        handleStatements(node);\n        return true;\n    };\n    \n    this.VarDeclStatement = function(node){\n        pushSctx(node.pos);\n        statementCount[statementCount.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n    };\n    var clauses = [];\n    this.FLWORExpr = this.FLWORStatement = function (node) {\n        pushSctx(node.pos);\n        clauses.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= clauses[clauses.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        clauses.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.ForBinding = function (node) {\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.LetBinding = function(node){\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.GroupingSpec = function(node){\n        var isVarDecl = false;\n        node.children.forEach(function(child){\n            if(child.value === ':=') {\n                isVarDecl = true;\n                return false;\n            }\n        });\n        if(isVarDecl) {\n            var groupingVariable = node.children[0];\n            this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n            pushSctx(node.pos);\n            clauses[clauses.length - 1]++;\n            this.visitChildren(groupingVariable, Handlers.VarHandler(translator, sctx, groupingVariable));\n            return true;\n        } else {\n            \n        }\n    };\n    \n    this.TumblingWindowClause = function (node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['WindowStartCondition', 'WindowEndCondition']);\n        return true;\n    };\n\n    this.WindowVars = function (node) {\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.SlidingWindowClause = function (node) {\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['WindowStartCondition', 'WindowEndCondition']);\n        return true;\n    };\n\n    this.PositionalVar = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.PositionalVar = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CurrentItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.PreviousItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.NextItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CountClause = function (node) {\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CaseClause = function(node) {\n        pushSctx(node.pos);\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['ExprSingle']);\n        popSctx();\n        return true;\n    };\n    var copies = [];\n    this.TransformExpr = function (node) {\n        pushSctx(node.pos);\n        copies.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= copies[copies.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        copies.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.TransformSpec = function(node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        copies[copies.length-1] += 1;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    var quantifiedDecls = [];\n    this.QuantifiedExpr = function (node) {\n        pushSctx(node.pos);\n        quantifiedDecls.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= quantifiedDecls[quantifiedDecls.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        quantifiedDecls.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.QuantifiedVarDecl = function(node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        quantifiedDecls[quantifiedDecls.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.FunctionCall = function(node){\n        this.visitOnly(node, ['ArgumentList']);\n        var name = translator.getFirstChild(node, 'EQName');\n        var eqname = TreeOps.flatten(name);\n        var arity = get(node, ['ArgumentList', 'Argument']).length;\n        translator.apply(function(){\n            var qname = sctx.resolveQName(eqname, node.pos);\n            try {\n                if(qname.uri !== '') {\n                    sctx.root.namespaces[qname.uri].used = true;\n                }\n            } catch(e){\n            }\n            sctx.addFunctionCall(qname, arity, name.pos);\n        });\n        return true;\n    };\n    \n    this.TryClause = function(node){\n        pushSctx(node.pos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n    \n    this.CatchClause = function(node){\n        pushSctx(node.pos);\n        var prefix = 'err';\n        var uri = 'http://www.w3.org/2005/xqt-errors';\n        var emptyPos = { sl: 0, sc: 0, el: 0, ec: 0 };\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'code' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'description' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'value' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'module' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'line-number' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'column-number' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'additional' }, 'CatchVar', emptyPos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n\n    this.Pragma = function(node){\n        var qname = TreeOps.flatten(get(node, ['EQName'])[0]);\n        qname = rootStcx.resolveQName(qname, node);\n        var value = TreeOps.flatten(get(node, ['PragmaContents'])[0]);\n        if (qname.name === 'xqlint' && qname.uri === 'http://xqlint.io') {\n            pushSctx(node.pos);\n            var commands = value.match(/[a-zA-Z]+\\(([^)]+)\\)/g);\n            commands.forEach(function (command) {\n                var name = command.substring(0, command.indexOf('('));\n                var args = command.substring(0, command.length - 1).substring(command.indexOf('(') + 1).split(',').map(function (val) {\n                    return val.trim();\n                });\n                if (name === 'varrefs') {\n                    args.forEach(function (arg) {\n                        var qname = sctx.resolveQName(arg.substring(1), node.pos);\n                        if (qname.uri !== '') {\n                            sctx.root.namespaces[qname.uri].used = true;\n                        }\n                        sctx.addVarRef(qname, node.pos);\n                    });\n                }\n            });\n            this.visitChildren(node);\n            popSctx();\n            return true;\n        }\n    };\n\n    this.visit = function (node) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    this.visit(ast);\n    Object.keys(rootStcx.variables).forEach(function(key){\n        if(!rootStcx.varRefs[key] && (rootStcx.variables[key].annotations['http://www.w3.org/2005/xpath-functions#private'] || rootStcx.moduleNamespace === '') && rootStcx.variables[key].pos) {\n            addWarning('W03', 'Unused variable \"' + rootStcx.variables[key].qname.name + '\"', rootStcx.variables[key].pos);\n        }\n    });\n    Object.keys(rootStcx.namespaces).forEach(function(uri){\n        var namespace = rootStcx.namespaces[uri];\n        if(namespace.used === undefined && !namespace.override && namespace.type === 'module') {\n            addWarning('W04', 'Unused module \"' + uri + '\"', namespace.pos);\n        }\n    });\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./handlers\":\"/node_modules/xqlint/lib/compiler/handlers.js\",\"./static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\"}],\"/node_modules/xqlint/lib/completion/completer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TreeOps = _dereq_('../tree_ops').TreeOps;\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$]/;\n\nfunction retrievePrecedingIdentifier(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos-1; i >= 0; i--) {\n        if (regex.test(text[i])) {\n            buf.push(text[i]);\n        } else {\n            break;\n        }\n    }\n    return buf.reverse().join('');\n}\n\nfunction prefixBinarySearch(items, prefix) {\n    var startIndex = 0;\n    var stopIndex = items.length - 1;\n    var middle = Math.floor((stopIndex + startIndex) / 2);\n    \n    while (stopIndex > startIndex && middle >= 0 && items[middle].indexOf(prefix) !== 0) {\n        if (prefix < items[middle]) {\n            stopIndex = middle - 1;\n        } else if (prefix > items[middle]) {\n            startIndex = middle + 1;\n        }\n        middle = Math.floor((stopIndex + startIndex) / 2);\n    }\n    while (middle > 0 && items[middle-1].indexOf(prefix) === 0) {\n        middle--;\n    }\n    return middle >= 0 ? middle : 0; // ensure we're not returning a negative index\n}\n\nvar uriRegex = /[a-zA-Z_0-9\\/\\.:\\-#]/;\nvar char = '-._A-Za-z0-9:\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0300-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203f\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';\nvar nameChar = '[' + char + ']';\nvar varChar = '[' + char + '\\\\$]';\nvar nameCharRegExp = new RegExp(nameChar);\nvar varCharRegExp = new RegExp(varChar);\n\nvar varDeclLabels = {\n    'LetBinding': 'Let binding',\n    'Param': 'Function parameter',\n    'QuantifiedExpr': 'Quantified expression binding',\n    'VarDeclStatement': 'Local variable',\n    'ForBinding': 'For binding',\n    'TumblingWindowClause': 'Tumbling window binding',\n    'WindowVars': 'Window variable',\n    'SlidingWindowClause': 'Sliding window binding',\n    'PositionalVar': 'Positional variable',\n    'CurrentItem': 'Current item',\n    'PreviousItem': 'Previous item',\n    'NextItem': 'Next item',\n    'CountClause': 'Count binding',\n    'GroupingVariable': 'Grouping variable',\n    'VarDecl': 'Module variable'\n};\n\nvar findCompletions = function(prefix, allIdentifiers) {\n    allIdentifiers.sort();\n    var startIdx = prefixBinarySearch(allIdentifiers, prefix);\n    var matches = [];\n    for (var i = startIdx; i < allIdentifiers.length && allIdentifiers[i].indexOf(prefix) === 0; i++) {\n        matches.push(allIdentifiers[i]);\n    }\n    return matches;\n};\n\n\nvar completePrefix = function(identifier, pos, sctx){\n    var idx = identifier.indexOf(':');\n    if(idx === -1) {\n        var prefixes = [];\n        var namespaces = sctx.getNamespaces();\n        Object.keys(namespaces).forEach(function(key){\n            if(namespaces[key].type === 'module' || key === 'http://www.w3.org/2005/xquery-local-functions') {\n                prefixes.push(namespaces[key].prefixes[0]);\n            }\n        });\n        var matches = findCompletions(identifier, prefixes);\n        var match = function(name) {\n            return {\n                name: name + ':',\n                value: name + ':',\n                meta: 'prefix'\n            };\n        };\n        return matches.map(match);\n    } else {\n        return [];\n    }\n};\n\nvar completeFunction = function(identifier, pos, sctx){\n    var names = [];\n    var snippets = {};\n    var functions = sctx.getFunctions();\n    var uri = '';\n    var prefix = '';\n    var name = identifier;\n    var idx = identifier.indexOf(':');\n    var defaultNamespace = false;\n    if(idx !== -1){\n        prefix = identifier.substring(0, idx);\n        name = identifier.substring(idx + 1);\n        var ns = sctx.getNamespaceByPrefix(prefix);\n        if(ns){\n            uri = sctx.getNamespaceByPrefix(prefix).uri;\n        }\n    } else {\n        defaultNamespace = true;\n        uri = sctx.root.defaultFunctionNamespace;\n    }\n    Object.keys(functions).forEach(function(key){\n        var fn = functions[key];\n        var ns = key.substring(0, key.indexOf('#'));\n        var name = key.substring(key.indexOf('#') + 1);\n        name = name.substring(0, name.indexOf('#'));\n        if(ns !== uri) {\n            return;\n        }\n        if(!defaultNamespace){\n            name = sctx.getNamespaces()[ns].prefixes[0] + ':' + name;\n        }\n        name += '(';\n        var snippet = name;\n        snippet += fn.params.map(function(param, index){\n            return '${' + (index + 1) + ':\\\\' + param.split(' ')[0] + '}';\n        }).join(', ');\n        name += fn.params.join(', ');\n        name += ')';\n        snippet += ')';\n        names.push(name);\n        snippets[name] = snippet;\n    });\n    var matches = findCompletions(identifier, names);\n    var match = function(name) {\n        return {\n            name: name,\n            value: name,\n            meta: 'function',\n            priority: 4,\n            identifierRegex: nameCharRegExp,\n            snippet: snippets[name]\n        };\n    };\n    return matches.map(match);\n};\n\nvar completeVariable = function(identifier, pos, sctx){\n    var uri = '';\n    var prefix = '';\n    var idx = identifier.indexOf(':');\n    if(idx !== -1){\n        prefix = identifier.substring(0, idx);\n        uri = sctx.getNamespaceByPrefix(prefix).uri;\n    }\n    var decls = sctx.getVariables();\n    var names = [];\n    var types = {};\n    Object.keys(decls).forEach(function(key){\n        var i = key.indexOf('#');\n        var ns = key.substring(0, i);\n        var name = key.substring(i+1);\n        if(ns !== ''){\n            names.push(sctx.getPrefixesByNamespace(ns)[0] + ':' + name);\n            types[sctx.getPrefixesByNamespace(ns)[0] + ':' + name] = decls[key].type;\n        } else {\n            names.push(name);\n            types[name] = decls[key].type;\n        }\n    });\n    \n    var matches = findCompletions(identifier, names);\n    var match = function(name) {\n        return {\n            name: '$' + name,\n            value: '$' + name,\n            meta: varDeclLabels[types[name]],\n            priority: 4,\n            identifierRegex: varCharRegExp\n        };\n    };\n    return matches.map(match);\n};\n\nvar completeExpr = function(line, pos, sctx){\n    var identifier = retrievePrecedingIdentifier(line, pos.col, nameCharRegExp);\n    var before = line.substring(0, pos.col - (identifier.length === 0 ? 0 : identifier.length));\n    var isVar = before[before.length - 1] === '$';\n    if(isVar) {\n        return completeVariable(identifier, pos, sctx);\n    } else if(identifier !== '') {\n        return completeFunction(identifier, pos, sctx).concat(completePrefix(identifier, pos, sctx));\n    } else {\n        return completeVariable(identifier, pos, sctx).concat(completeFunction(identifier, pos, sctx)).concat(completePrefix(identifier, pos, sctx));\n    }\n};\n\nvar completeModuleUri = function(line, pos, sctx){\n    var identifier = retrievePrecedingIdentifier(line, pos.col, uriRegex);\n    var matches = findCompletions(identifier, sctx.getAvailableModuleNamespaces());\n    var match = function(uri) {\n        return {\n            name: uri,\n            value: uri,\n            meta: 'module',\n            priority: 4,\n            identifierRegex: uriRegex\n        };\n    };\n    return matches.map(match);\n};\n\nexports.complete = function(source, ast, rootSctx, pos){\n    var line = source.split('\\n')[pos.line];\n    var node = TreeOps.findNode(ast, pos);\n    var sctx = TreeOps.findNode(rootSctx, pos);\n    sctx = sctx ? sctx : rootSctx;\n    if(node && node.name === 'URILiteral' && node.getParent && node.getParent.name === 'ModuleImport'){\n        return completeModuleUri(line, pos, sctx);\n    } else {\n        return completeExpr(line, pos, sctx);\n    }\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\"}],\"/node_modules/xqlint/lib/formatter/style_checker.js\":[function(_dereq_,module,exports){\nexports.StyleChecker = function (ast, source) {\n    'use strict';\n\n    var tab = '    ';\n    var markers = [];\n    \n    this.getMarkers = function(){\n        return markers;\n    };\n\n    this.WS = function(node) {\n        var lines = node.value.split('\\n');\n        lines.forEach(function(line, index){\n            var isFirst = index === 0;\n            var isLast  = index === (lines.length - 1);\n\n            if(/\\r$/.test(line)) {\n                markers.push({\n                    pos: {\n                        sl: node.pos.sl + index,\n                        el: node.pos.sl + index,\n                        sc: line.length - 1,\n                        ec: line.length\n                    },\n                    type: 'warning',\n                    level: 'warning',\n                    message: '[SW01] Detected CRLF'\n                });\n            }\n            \n            var match = line.match(/\\t+/);\n            if(match !== null){\n                markers.push({\n                    pos: {\n                        sl: node.pos.sl + index,\n                        el: node.pos.sl + index,\n                        sc: match.index,\n                        ec: match.index + match[0].length\n                    },\n                    type: 'warning',\n                    level: 'warning',\n                    message: '[SW02] Tabs detected'\n                });\n            }\n\n            if((!isFirst) && isLast){\n                match = line.match(/^\\ +/);\n                if(match !== null) {\n                    var mod = match[0].length % tab.length;\n                    if(mod !== 0) {\n                        markers.push({\n                            pos: {\n                                sl: node.pos.sl + index,\n                                el: node.pos.sl + index,\n                                sc: match.index,\n                                ec: match.index + match[0].length\n                            },\n                            type: 'warning',\n                            level: 'warning',\n                            message: '[SW03] Unexcepted indentation of ' + match[0].length\n                        });\n                    }\n                }\n            }\n        });\n        return true;\n    };\n    \n    this.visit = function (node, index) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node, index) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    source.split('\\n').forEach(function(line, index){\n        var match = line.match(/\\ +$/);\n        if(match){\n            markers.push({\n                pos: {\n                    sl: index,\n                    el: index,\n                    sc: match.index,\n                    ec: match.index + match[0].length\n                },\n                type: 'warning',\n                level: 'warning',\n                message: '[SW04] Trailing whitespace'\n            });\n        }\n    });\n    this.visit(ast);\n};\n},{}],\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var JSONiqTokenizer = exports.JSONiqTokenizer = function JSONiqTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 59:                        // '<?'\n      shift(59);                    // '<?'\n      break;\n    case 43:                        // '(#'\n      shift(43);                    // '(#'\n      break;\n    case 45:                        // '(:~'\n      shift(45);                    // '(:~'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    case 277:                       // '}'\n      shift(277);                   // '}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 42:                        // '('\n      shift(42);                    // '('\n      break;\n    case 46:                        // ')'\n      shift(46);                    // ')'\n      break;\n    case 52:                        // '/'\n      shift(52);                    // '/'\n      break;\n    case 65:                        // '['\n      shift(65);                    // '['\n      break;\n    case 66:                        // ']'\n      shift(66);                    // ']'\n      break;\n    case 49:                        // ','\n      shift(49);                    // ','\n      break;\n    case 51:                        // '.'\n      shift(51);                    // '.'\n      break;\n    case 56:                        // ';'\n      shift(56);                    // ';'\n      break;\n    case 54:                        // ':'\n      shift(54);                    // ':'\n      break;\n    case 36:                        // '!'\n      shift(36);                    // '!'\n      break;\n    case 276:                       // '|'\n      shift(276);                   // '|'\n      break;\n    case 40:                        // '$$'\n      shift(40);                    // '$$'\n      break;\n    case 5:                         // Annotation\n      shift(5);                     // Annotation\n      break;\n    case 4:                         // ModuleDecl\n      shift(4);                     // ModuleDecl\n      break;\n    case 6:                         // OptionDecl\n      shift(6);                     // OptionDecl\n      break;\n    case 15:                        // AttrTest\n      shift(15);                    // AttrTest\n      break;\n    case 16:                        // Wildcard\n      shift(16);                    // Wildcard\n      break;\n    case 18:                        // IntegerLiteral\n      shift(18);                    // IntegerLiteral\n      break;\n    case 19:                        // DecimalLiteral\n      shift(19);                    // DecimalLiteral\n      break;\n    case 20:                        // DoubleLiteral\n      shift(20);                    // DoubleLiteral\n      break;\n    case 8:                         // Variable\n      shift(8);                     // Variable\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 7:                         // Operator\n      shift(7);                     // Operator\n      break;\n    case 35:                        // EOF\n      shift(35);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    case 53:                        // '/>'\n      shift(53);                    // '/>'\n      break;\n    case 29:                        // QName\n      shift(29);                    // QName\n      break;\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 25:                        // ElementContentChar\n      shift(25);                    // ElementContentChar\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 10:                        // EndTag\n      shift(10);                    // EndTag\n      break;\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 27:                        // AposAttrContentChar\n      shift(27);                    // AposAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 22:                        // EscapeQuot\n      shift(22);                    // EscapeQuot\n      break;\n    case 26:                        // QuotAttrContentChar\n      shift(26);                    // QuotAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 14:                        // CDataSectionContents\n      shift(14);                    // CDataSectionContents\n      break;\n    case 67:                        // ']]>'\n      shift(67);                    // ']]>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 12:                        // DirCommentContents\n      shift(12);                    // DirCommentContents\n      break;\n    case 50:                        // '-->'\n      shift(50);                    // '-->'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 13:                        // DirPIContents\n      shift(13);                    // DirPIContents\n      break;\n    case 62:                        // '?'\n      shift(62);                    // '?'\n      break;\n    case 63:                        // '?>'\n      shift(63);                    // '?>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 11:                        // PragmaContents\n      shift(11);                    // PragmaContents\n      break;\n    case 38:                        // '#'\n      shift(38);                    // '#'\n      break;\n    case 39:                        // '#)'\n      shift(39);                    // '#)'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 32:                        // CommentContents\n      shift(32);                    // CommentContents\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(6);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 33:                        // DocTag\n      shift(33);                    // DocTag\n      break;\n    case 34:                        // DocCommentContents\n      shift(34);                    // DocCommentContents\n      break;\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(5);                  // JSONChar | JSONCharRef | JSONPredefinedCharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 3:                         // JSONPredefinedCharRef\n      shift(3);                     // JSONPredefinedCharRef\n      break;\n    case 2:                         // JSONCharRef\n      shift(2);                     // JSONCharRef\n      break;\n    case 1:                         // JSONChar\n      shift(1);                     // JSONChar\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 24:                        // AposChar\n      shift(24);                    // AposChar\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 17:                        // EQName^Token\n      shift(17);                    // EQName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 28:                        // NCName^Token\n      shift(28);                    // NCName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 30)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqTokenizer.MAP1[(c0 & 15) + JSONiqTokenizer.MAP1[(c1 & 31) + JSONiqTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = JSONiqTokenizer.TRANSITION[(i0 & 15) + JSONiqTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 279; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2066 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqTokenizer.EXPECTED[(i0 & 3) + JSONiqTokenizer.EXPECTED[(i1 & 3) + JSONiqTokenizer.EXPECTED[(i2 & 3) + JSONiqTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqTokenizer.MAP0 =\n[ 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37\n];\n\nJSONiqTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 31, 31, 37, 37, 37, 37, 37, 37, 37, 66, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66\n];\n\nJSONiqTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 37, 31, 37, 31, 31, 37\n];\n\nJSONiqTokenizer.INITIAL =\n[ 1, 2, 49155, 57348, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nJSONiqTokenizer.TRANSITION =\n[ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 17408, 19288, 17439, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19074, 36169, 17439, 36866, 17466, 36890, 36866, 22314, 19105, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22182, 19288, 19121, 36866, 17466, 18345, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19273, 19552, 19304, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19332, 17423, 19363, 36866, 17466, 17537, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 18614, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19391, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19427, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36154, 19288, 19457, 36866, 17466, 17740, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22780, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22375, 22197, 18469, 36866, 17466, 36890, 36866, 21991, 24018, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21331, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 19485, 19501, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19537, 22390, 19568, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19596, 19611, 19457, 36866, 17466, 36890, 36866, 18246, 19627, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22242, 20553, 19457, 36866, 17466, 36890, 36866, 18648, 30477, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36472, 19288, 19457, 36866, 17466, 17809, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21770, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19643, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19672, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20538, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17975, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22345, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19726, 19742, 21529, 24035, 23112, 26225, 23511, 27749, 27397, 24035, 34360, 24035, 24036, 23114, 35166, 23114, 23114, 19758, 23511, 35247, 23511, 23511, 28447, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 19821, 23511, 23511, 23511, 23511, 23512, 19441, 36539, 24035, 24035, 24035, 24035, 19846, 19869, 23114, 23114, 23114, 28618, 32187, 19892, 23511, 23511, 23511, 34585, 20402, 36647, 24035, 24035, 24036, 23114, 33757, 23114, 23114, 23029, 20271, 23511, 27070, 23511, 23511, 30562, 24035, 24035, 29274, 26576, 23114, 23114, 31118, 23036, 29695, 23511, 23511, 32431, 23634, 30821, 24035, 23110, 19913, 23114, 23467, 31261, 23261, 34299, 19932, 24035, 32609, 19965, 35389, 19984, 27689, 19830, 29391, 29337, 20041, 22643, 35619, 33728, 20062, 20121, 20166, 35100, 26145, 20211, 23008, 19876, 20208, 20227, 25670, 20132, 26578, 27685, 20141, 20243, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36094, 19288, 19457, 36866, 17466, 21724, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22735, 19552, 20287, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22750, 19288, 21529, 24035, 23112, 28056, 23511, 29483, 28756, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 20327, 23511, 23511, 23511, 23511, 31156, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 20371, 23511, 23511, 23511, 23511, 27443, 20395, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 29457, 29700, 23511, 23511, 23511, 23511, 33444, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 28350, 20421, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 20447, 20475, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20523, 22257, 20569, 20783, 21715, 17603, 20699, 20837, 20614, 20630, 21149, 20670, 21405, 17486, 17509, 17525, 18373, 19179, 20695, 20716, 20732, 20755, 19194, 18042, 21641, 20592, 20779, 20598, 21412, 17470, 17591, 20896, 17468, 17619, 20799, 20700, 21031, 20744, 20699, 20828, 18075, 21259, 20581, 20853, 18048, 20868, 20884, 17756, 17784, 17800, 17825, 17854, 21171, 21200, 20931, 20947, 21378, 20955, 20971, 18086, 20645, 21002, 20986, 18178, 17960, 18012, 18381, 18064, 29176, 21044, 21438, 21018, 21122, 21393, 21060, 21844, 21094, 20654, 17493, 18150, 18166, 18214, 25967, 20763, 21799, 21110, 21830, 21138, 21246, 21301, 18336, 18361, 21165, 21187, 20812, 21216, 21232, 21287, 21317, 18553, 21347, 21363, 21428, 21454, 21271, 21483, 21499, 21515, 21575, 21467, 18712, 21591, 21633, 21078, 18189, 18198, 20679, 21657, 21701, 21074, 21687, 21740, 21756, 21786, 21815, 21860, 21876, 21892, 21946, 21962, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36457, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 36813, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 21981, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 22151, 22007, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 27898, 17884, 18890, 17906, 17928, 22042, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 22070, 22112, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 22142, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36109, 19288, 18469, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22167, 19288, 19457, 36866, 17466, 17768, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22227, 36487, 22273, 36866, 17466, 36890, 36866, 19316, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18749, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 22304, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19580, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22330, 19089, 19457, 36866, 17466, 18721, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22765, 19347, 19457, 36866, 17466, 36890, 36866, 18114, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34541, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 22540, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29908, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22561, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 23837, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22584, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36442, 19288, 21605, 24035, 23112, 28137, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 31568, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22690, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 27584, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 22659, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22360, 19552, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22675, 22811, 19457, 36866, 17466, 36890, 36866, 19133, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22827, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36064, 19288, 22865, 22881, 32031, 22897, 22913, 22956, 29939, 24035, 24035, 24035, 23003, 23114, 23114, 23114, 23024, 22420, 23511, 23511, 23511, 23052, 29116, 23073, 29268, 24035, 25563, 26915, 23106, 23131, 23114, 23114, 23159, 23181, 23197, 23248, 23511, 23511, 23282, 23305, 22493, 32364, 24035, 33472, 30138, 26325, 31770, 33508, 27345, 33667, 23114, 23321, 23473, 23351, 35793, 36576, 23511, 23375, 22500, 24145, 24035, 29197, 20192, 24533, 23440, 23114, 19017, 23459, 22839, 23489, 23510, 23511, 33563, 23528, 32076, 25389, 24035, 26576, 23561, 23583, 23114, 32683, 22516, 23622, 23655, 23511, 23634, 35456, 37144, 23110, 23683, 34153, 20499, 32513, 25824, 23705, 24035, 24035, 23111, 23114, 19874, 27078, 33263, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 20507, 32241, 20150, 31862, 27464, 35108, 23727, 23007, 35895, 34953, 26578, 27685, 20141, 24569, 31691, 19787, 33967, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36427, 19552, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 27027, 26576, 23114, 23114, 23114, 31471, 23756, 22468, 23511, 23511, 23511, 34687, 23772, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 23788, 24035, 24035, 24035, 21559, 23828, 23114, 23114, 23114, 25086, 22839, 23853, 23511, 23511, 23511, 23876, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 31761, 23909, 23953, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36049, 19288, 21605, 30825, 23112, 23987, 23511, 24003, 31001, 27617, 24034, 24035, 24036, 24052, 24089, 23114, 23114, 22420, 24109, 24168, 23511, 23511, 29116, 24188, 27609, 20017, 29516, 24035, 26576, 24222, 19968, 23114, 24252, 33811, 22468, 24270, 33587, 23511, 24320, 27443, 22493, 24035, 24035, 24035, 24035, 24339, 23113, 23114, 23114, 23114, 28128, 28618, 29700, 23511, 23511, 23511, 28276, 34564, 20402, 24035, 24035, 32929, 24036, 23114, 23114, 23114, 24357, 23029, 22839, 23511, 23511, 23511, 24377, 25645, 24035, 34112, 24035, 26576, 23114, 26643, 23114, 32683, 22516, 23511, 25638, 23511, 23711, 24035, 24395, 27809, 23114, 24414, 20499, 24432, 30917, 23628, 24035, 30680, 23111, 23114, 30233, 27078, 25748, 24452, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 24475, 19829, 26577, 26597, 26154, 24519, 24556, 24596, 23007, 20046, 20132, 26578, 24634, 20141, 24569, 31691, 24679, 24727, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36412, 19288, 21605, 19943, 34861, 32618, 26027, 29483, 32016, 32050, 36233, 24776, 35574, 24801, 24819, 32671, 31289, 22420, 24868, 24886, 20087, 26849, 29116, 19803, 24035, 24035, 24035, 36228, 26576, 23114, 23114, 23114, 24981, 33811, 22468, 23511, 23511, 23511, 29028, 27443, 22493, 24923, 27965, 24035, 24035, 32797, 24946, 23443, 23114, 23114, 29636, 24997, 22849, 28252, 23511, 23511, 23511, 25042, 25110, 24035, 24035, 34085, 24036, 25133, 23114, 23114, 25152, 23029, 22839, 25169, 23511, 36764, 23511, 25645, 30403, 24035, 25186, 26576, 31806, 24093, 25212, 32683, 22516, 32713, 26245, 34293, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 32406, 23111, 23114, 28676, 30944, 27689, 25234, 24035, 23112, 19872, 37063, 23266, 24036, 23114, 30243, 20379, 26100, 29218, 20211, 30105, 25257, 25284, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 24834, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36034, 19288, 21671, 25314, 25072, 25330, 25346, 25362, 29939, 29951, 35288, 29984, 23812, 27216, 25405, 25424, 30456, 22584, 26292, 25461, 25480, 31592, 29116, 25516, 34963, 25545, 27007, 25579, 33937, 25614, 25661, 25686, 34872, 25702, 25718, 25734, 25769, 25795, 25811, 25840, 22493, 26533, 25856, 24035, 25876, 30763, 27481, 25909, 23114, 28987, 25936, 25954, 29700, 25983, 23511, 31412, 26043, 26063, 22568, 29241, 29592, 26116, 31216, 35383, 26170, 34783, 26194, 26221, 22839, 26241, 26261, 22477, 26283, 26308, 27306, 31035, 24655, 26576, 29854, 33386, 26341, 32683, 22516, 32153, 30926, 26361, 19996, 26381, 35463, 26397, 26424, 34646, 26478, 35605, 31386, 26494, 35567, 31964, 22940, 23689, 25218, 30309, 32289, 19830, 33605, 23112, 32109, 27733, 27084, 24496, 35886, 35221, 26525, 36602, 26549, 26558, 26574, 26594, 26613, 26629, 26666, 26700, 26578, 27685, 23740, 24285, 31691, 26733, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36397, 19552, 18991, 25887, 28117, 32618, 26776, 29483, 29939, 26802, 24035, 24035, 24036, 28664, 23114, 23114, 23114, 22420, 30297, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 25559, 26576, 23114, 23114, 23114, 30525, 33811, 22468, 23511, 23511, 23511, 28725, 27443, 22493, 24035, 24035, 27249, 24035, 24035, 23113, 23114, 23114, 26827, 23114, 28618, 29700, 23511, 23511, 26845, 23511, 34564, 20402, 24035, 24035, 26979, 24036, 23114, 23114, 23114, 24974, 23029, 22839, 23511, 23511, 23511, 26865, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 33305, 24035, 25598, 23114, 19874, 34253, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 26886, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 26931, 24569, 26439, 26947, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36019, 19288, 26995, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 27043, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 27061, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 29978, 24035, 24035, 23113, 23114, 33114, 23114, 23114, 30010, 29700, 23511, 35913, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 27155, 26576, 23114, 23114, 30447, 23036, 29695, 23511, 23511, 30935, 20099, 24152, 25529, 27100, 34461, 27121, 22625, 29156, 26009, 27137, 30422, 31903, 31655, 28870, 27171, 32439, 31731, 19830, 27232, 22612, 27265, 26786, 25494, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 20342, 27288, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 27322, 27339, 28020, 27361, 27382, 29939, 24035, 24035, 32581, 24036, 23114, 23114, 23114, 27425, 22420, 23511, 23511, 23511, 27442, 28306, 19803, 24035, 24035, 24035, 24035, 26710, 23114, 23114, 23114, 23114, 32261, 22468, 23511, 23511, 23511, 23511, 35719, 24694, 29510, 24035, 24035, 24035, 24035, 26717, 23114, 23114, 23114, 23114, 28618, 32217, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 27459, 23114, 23114, 23114, 36252, 23029, 20271, 23511, 23511, 23511, 28840, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 27480, 34483, 28401, 29761, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36382, 19288, 21605, 27497, 27517, 28504, 28898, 27569, 29939, 29401, 27600, 27323, 27633, 19025, 27662, 23114, 27705, 22420, 20483, 27721, 23511, 27765, 28306, 19803, 23540, 24035, 24610, 27781, 27805, 26650, 23114, 28573, 32990, 25920, 22468, 26870, 23511, 26684, 34262, 34737, 25057, 34622, 24035, 24035, 23971, 24206, 27825, 27847, 23114, 23114, 27865, 27885, 35766, 27914, 23511, 23511, 32766, 32844, 27934, 28795, 26909, 27955, 26092, 27988, 25445, 28005, 28036, 28052, 21965, 23511, 32196, 19897, 28072, 28102, 36534, 21541, 23801, 28153, 28180, 28197, 28221, 23036, 32695, 28251, 28268, 28292, 23667, 34825, 23930, 24580, 28322, 28344, 31627, 28366, 25996, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 35625, 33477, 33359, 27674, 28393, 33992, 24036, 23114, 30243, 19829, 28417, 28433, 28463, 23008, 19876, 20208, 23007, 20046, 20132, 28489, 28520, 20141, 24569, 31691, 19787, 28550, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 28589, 24035, 24035, 24035, 24035, 28608, 23114, 23114, 23114, 23114, 28618, 20431, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36004, 19288, 28634, 31951, 28565, 28702, 28718, 28741, 32544, 20175, 28792, 32086, 20105, 28811, 29059, 29862, 28856, 22420, 28886, 30354, 23359, 28922, 28306, 28952, 23888, 26320, 36506, 24035, 29331, 28968, 36609, 23114, 29003, 31661, 27061, 30649, 27366, 23511, 29023, 27918, 24694, 24035, 24035, 23893, 33094, 30867, 23113, 23114, 23114, 29044, 34184, 30010, 29700, 23511, 23511, 29081, 29102, 34585, 20402, 27789, 24035, 24035, 24036, 23114, 29132, 23114, 23114, 23029, 20271, 23511, 29153, 23511, 23511, 30562, 30174, 24035, 24035, 27409, 25438, 23114, 23114, 29172, 36668, 31332, 23511, 23511, 29192, 30144, 24035, 23110, 30203, 23114, 23467, 31544, 23261, 23628, 24035, 22545, 23111, 23114, 29213, 27078, 27689, 29234, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 29257, 23008, 19876, 20208, 28768, 29290, 29320, 34776, 29353, 20141, 22435, 29378, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36367, 19288, 21605, 34616, 19006, 32618, 31497, 31507, 36216, 20184, 24035, 34393, 29424, 34668, 23114, 34900, 29447, 22420, 30360, 23511, 37089, 29473, 28306, 19803, 29499, 24398, 24035, 24035, 26576, 31799, 29532, 29550, 23114, 33811, 22468, 32298, 29571, 31184, 23511, 23512, 37127, 36628, 29589, 24035, 24135, 24035, 23113, 29608, 23114, 27831, 29634, 28618, 29652, 30037, 23511, 24172, 29671, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 29555, 29690, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 29719, 24035, 23110, 29738, 23114, 23467, 34035, 29756, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 29777, 34364, 28181, 30243, 29799, 31920, 27272, 27185, 23008, 31126, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29828, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35989, 19552, 19687, 35139, 28649, 29878, 29894, 29924, 29939, 23224, 23085, 31969, 24036, 35173, 24752, 24803, 23114, 22420, 31190, 30318, 24870, 23511, 28306, 29967, 23967, 24035, 24035, 24035, 26576, 30000, 23114, 23114, 23114, 33811, 22468, 30026, 23511, 23511, 23511, 23512, 26078, 24035, 24035, 24035, 30053, 37137, 30071, 23114, 23114, 33368, 25136, 28618, 30723, 23511, 23511, 37096, 31356, 34585, 20402, 30092, 30127, 30160, 24036, 35740, 30219, 24960, 30259, 23029, 20271, 34042, 30285, 30342, 30376, 23289, 30055, 30400, 30419, 30438, 32640, 33532, 33514, 30472, 18792, 26267, 24323, 23057, 30493, 23639, 20008, 30196, 33188, 30517, 20075, 23511, 30541, 23628, 30578, 33928, 28776, 30594, 19874, 30610, 30637, 19830, 30677, 27646, 19872, 25779, 23266, 23232, 35016, 30243, 30696, 29812, 30712, 30746, 27206, 30779, 30807, 23007, 33395, 20132, 26578, 27685, 31703, 22928, 31691, 19787, 31079, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36352, 19288, 23335, 30841, 26131, 30888, 30904, 30986, 29939, 24035, 24704, 31017, 20025, 23114, 26178, 31051, 31095, 22420, 23511, 22524, 31142, 31172, 28534, 31206, 35497, 25196, 24035, 28592, 24503, 23114, 31239, 31285, 23114, 31305, 31321, 31355, 31372, 31407, 23511, 30556, 24694, 24035, 27501, 19805, 24035, 24035, 23113, 23114, 31428, 24066, 23114, 28618, 29700, 23511, 31837, 18809, 23511, 34585, 31448, 24035, 24035, 24035, 23090, 23114, 23114, 23114, 23114, 31619, 35038, 23511, 23511, 23511, 23511, 33714, 24035, 33085, 24035, 29431, 23114, 31467, 23114, 23143, 31487, 23511, 31523, 23511, 35195, 36783, 24035, 30111, 23567, 23114, 23467, 31543, 31560, 23628, 24035, 24035, 23111, 23114, 19874, 30953, 31584, 34508, 24035, 31608, 26345, 37055, 23266, 31643, 31677, 31719, 31747, 31786, 31822, 26898, 23008, 19876, 31859, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 31878, 31936, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35974, 19288, 21605, 27972, 35663, 31985, 29655, 32001, 36715, 24785, 25893, 23545, 31912, 19853, 19916, 25938, 24540, 22420, 31843, 29674, 29573, 32735, 28936, 19803, 24035, 24035, 32047, 24035, 26576, 23114, 23114, 27544, 23114, 33811, 22468, 23511, 23511, 32161, 23511, 23512, 32066, 24035, 33313, 24035, 24035, 24035, 23113, 27426, 32102, 23114, 23114, 28618, 32125, 23511, 32144, 23511, 23511, 33569, 20402, 24035, 27045, 24035, 24036, 23114, 23114, 28328, 23114, 30076, 32177, 23511, 23511, 30384, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23595, 32212, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 22635, 25753, 32233, 32257, 32277, 19829, 26577, 26597, 20211, 23008, 19876, 32322, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 32352, 35285, 32380, 34196, 33016, 30661, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 32404, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 32422, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 30269, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 19949, 24035, 23111, 32455, 19874, 31269, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36337, 19552, 19209, 21617, 26509, 32475, 32491, 32529, 29939, 24035, 32578, 25241, 32597, 23114, 32634, 29007, 32656, 22420, 23511, 32729, 26365, 32751, 28306, 32788, 32882, 24035, 24035, 32813, 36727, 23114, 33182, 23114, 27553, 33235, 32829, 23511, 32706, 23511, 28906, 28377, 26962, 32881, 32904, 32898, 32920, 24035, 32953, 23114, 32977, 26408, 23114, 28164, 33006, 23511, 33039, 35774, 23511, 32306, 20402, 33076, 30872, 24035, 24036, 25408, 33110, 28979, 23114, 23029, 20271, 35835, 33130, 33054, 23511, 30562, 33148, 24035, 24035, 33167, 23114, 23114, 33775, 23036, 20459, 23511, 23511, 25464, 24646, 24035, 24035, 22446, 23114, 23114, 25627, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 31391, 33204, 33220, 33251, 33287, 26577, 26597, 20211, 33329, 19876, 33345, 23007, 20046, 20132, 26578, 27685, 28473, 22599, 31691, 33411, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35959, 19288, 21907, 27243, 29843, 32618, 33427, 31507, 29939, 33460, 34090, 24035, 24036, 33493, 24416, 33530, 23114, 22420, 33548, 24379, 33585, 23511, 28306, 19803, 33603, 24202, 24035, 24035, 25593, 33749, 28205, 23114, 23114, 32388, 22468, 33853, 33060, 23511, 23511, 31339, 33621, 24035, 24035, 34397, 24618, 30757, 33663, 23114, 23114, 33683, 35684, 28618, 26678, 23511, 23511, 32506, 33699, 34585, 20402, 24035, 32562, 26973, 24036, 23114, 23114, 33377, 33773, 23029, 20271, 23511, 23511, 30621, 23511, 23860, 24035, 33791, 21553, 26576, 36558, 23114, 33809, 23036, 32857, 26047, 23511, 33827, 23634, 24035, 24035, 23110, 23114, 23114, 31252, 23511, 33845, 23628, 24035, 24459, 23111, 23114, 33869, 27078, 30791, 29783, 24035, 24742, 19872, 33895, 23266, 26462, 19710, 33879, 33919, 26577, 26597, 24123, 24930, 21930, 20208, 30501, 33953, 25268, 20252, 33983, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36322, 19552, 23390, 33634, 35154, 34008, 34024, 34058, 35544, 34106, 34128, 26811, 33151, 34144, 34169, 34212, 23114, 34228, 34244, 34278, 34315, 23511, 34331, 34347, 34380, 34413, 24035, 24663, 26576, 34429, 34453, 34477, 29534, 33811, 22468, 34499, 34524, 34557, 25170, 34580, 35436, 23937, 34601, 24035, 24341, 26453, 23113, 34638, 34662, 23114, 24236, 28618, 34684, 34703, 34729, 23511, 35352, 34753, 34799, 24035, 34815, 32558, 34848, 34888, 35814, 34923, 23165, 29137, 23606, 30326, 30730, 34939, 33023, 30562, 36848, 34979, 24035, 24847, 34996, 23114, 23114, 35032, 29695, 35054, 23511, 23511, 35091, 33296, 35124, 24296, 28235, 24361, 36276, 32772, 35067, 35189, 27301, 30855, 24852, 22452, 35211, 35237, 35316, 25500, 35270, 23405, 24304, 35304, 29362, 24036, 23114, 35332, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 35368, 28823, 23920, 32336, 35405, 20141, 24569, 31691, 35421, 35479, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35944, 22795, 21605, 33647, 35877, 35513, 30962, 35529, 34073, 35557, 24035, 24035, 20405, 31107, 23114, 23114, 23114, 35590, 34713, 23511, 23511, 23511, 35641, 19803, 29408, 32937, 25298, 24035, 35657, 23115, 27849, 24760, 35679, 26205, 22468, 23511, 35700, 24907, 24901, 35075, 31893, 34980, 24035, 24035, 24035, 24035, 23113, 35009, 23114, 23114, 23114, 28618, 35716, 30970, 23511, 23511, 23511, 34585, 23215, 24035, 24035, 24035, 24036, 35735, 23114, 23114, 23114, 27105, 35756, 35790, 23511, 23511, 23511, 35254, 35446, 24035, 24035, 31223, 35809, 23114, 23114, 23036, 36825, 35830, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 31031, 20355, 19872, 33903, 23266, 24036, 23114, 28686, 19829, 26577, 26597, 20211, 23008, 23424, 20208, 24711, 31065, 24486, 26578, 27685, 20141, 19773, 35851, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36307, 19288, 21605, 35494, 19702, 32618, 33437, 31507, 29939, 25117, 24035, 27939, 24036, 27869, 23114, 26829, 23114, 22420, 23494, 23511, 33132, 23511, 28306, 19803, 24035, 34832, 24035, 24035, 26576, 23114, 25153, 23114, 23114, 33811, 22468, 23511, 23511, 35911, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35929, 19288, 21605, 25860, 23112, 36185, 23511, 36201, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 26748, 24035, 24035, 24035, 24035, 24035, 36249, 23114, 23114, 23114, 23114, 28618, 28835, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 27151, 24035, 26760, 23114, 27989, 23114, 23114, 36268, 20271, 23511, 24436, 23511, 29703, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36292, 19288, 21605, 36503, 21922, 32618, 34534, 31507, 36522, 24035, 33793, 24035, 35864, 23114, 23114, 36555, 23417, 22420, 23511, 23511, 36574, 26020, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 36592, 24035, 24035, 36625, 24035, 24035, 23113, 23114, 32961, 23114, 23114, 29618, 29700, 23511, 29086, 23511, 23511, 34585, 20402, 36644, 24035, 24035, 24036, 29740, 23114, 23114, 23114, 29065, 36663, 31527, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 31451, 23112, 36684, 23511, 36700, 29939, 24035, 24035, 24035, 30185, 23114, 23114, 23114, 27526, 22420, 23511, 23511, 23511, 32865, 28306, 19803, 36743, 24035, 27017, 24035, 26576, 27535, 23114, 31432, 23114, 33811, 22468, 33271, 23511, 32128, 23511, 23512, 24694, 24035, 27196, 24035, 24035, 24035, 23113, 32459, 23114, 23114, 23114, 28618, 29700, 33829, 36762, 23511, 23511, 34585, 20402, 24035, 36746, 24035, 29722, 23114, 23114, 34437, 23114, 34907, 20271, 23511, 23511, 18801, 23511, 23206, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 36837, 24035, 24035, 33739, 23114, 23114, 25094, 23511, 23261, 23628, 24035, 36780, 23111, 24073, 19874, 27078, 35344, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22720, 19288, 36799, 36866, 17466, 36890, 36864, 21991, 22211, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17631, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22705, 19288, 19457, 36866, 17466, 36890, 36866, 19375, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36124, 19288, 36951, 36866, 17466, 36890, 36866, 21991, 22404, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18567, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36979, 36995, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18027, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 21529, 24035, 23112, 23033, 23511, 31507, 25377, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 37040, 23511, 23511, 23511, 23511, 28086, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 37079, 23511, 23511, 23511, 23511, 23512, 34766, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 37112, 37160, 18469, 36866, 17466, 36890, 36866, 17656, 37174, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18537, 22984, 17553, 17572, 22285, 18780, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 0, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 127011, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2576384, 2215936, 2215936, 2215936, 2416640, 2424832, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2543616, 2215936, 2215936, 2215936, 2215936, 2215936, 2629632, 2215936, 2617344, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2691072, 2215936, 2707456, 2215936, 2715648, 2215936, 2723840, 2764800, 2215936, 2215936, 2797568, 2215936, 2822144, 2215936, 2215936, 2854912, 2215936, 2215936, 2215936, 2912256, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 180224, 0, 0, 2174976, 0, 0, 2170880, 2617344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2691072, 2170880, 2707456, 2170880, 2715648, 2170880, 2723840, 2764800, 2170880, 2170880, 2797568, 2170880, 2170880, 2797568, 2170880, 2822144, 2170880, 2170880, 2854912, 2170880, 2170880, 2170880, 2912256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2609152, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2654208, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 184599, 280, 0, 2174976, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 544, 0, 546, 0, 0, 2179072, 0, 0, 0, 552, 0, 0, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2158592, 2158592, 2232320, 2232320, 0, 2240512, 2240512, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 2768896, 2789376, 2813952, 2170880, 2170880, 2170880, 2875392, 2904064, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 167936, 0, 0, 0, 0, 2174976, 0, 0, 2215936, 2215936, 2514944, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2592768, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 32768, 0, 0, 0, 0, 0, 2174976, 32768, 0, 2633728, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2711552, 2215936, 2215936, 2215936, 2215936, 2215936, 2760704, 2768896, 2789376, 2813952, 2215936, 2215936, 2215936, 2875392, 2904064, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 65819, 2215936, 2215936, 3031040, 2215936, 3055616, 2215936, 2215936, 2215936, 2215936, 3092480, 2215936, 2215936, 3125248, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2170880, 2170880, 2494464, 2170880, 2170880, 0, 0, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 2699264, 2170880, 2727936, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3026944, 2170880, 2170880, 3063808, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 2379776, 2215936, 2523136, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2596864, 2215936, 2621440, 2215936, 2215936, 2641920, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 548, 0, 0, 0, 0, 287, 2170880, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2699264, 2215936, 2727936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2879488, 2215936, 2916352, 2215936, 2215936, 0, 0, 0, 0, 188416, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 0, 2171019, 2171019, 2171019, 2400395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3031179, 2171019, 3055755, 2171019, 2171019, 2215936, 3133440, 2215936, 2215936, 2215936, 3162112, 2215936, 2215936, 3182592, 3186688, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2523275, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2597003, 2171019, 2621579, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 4337664, 28, 2170880, 2170880, 2170880, 2629632, 2170880, 2170880, 2170880, 2170880, 2719744, 2744320, 2170880, 2170880, 2170880, 2834432, 2838528, 2170880, 2908160, 2170880, 2170880, 2936832, 2215936, 2215936, 2215936, 2215936, 2719744, 2744320, 2215936, 2215936, 2215936, 2834432, 2838528, 2215936, 2908160, 2215936, 2215936, 2936832, 2215936, 2215936, 2985984, 2215936, 2994176, 2215936, 2215936, 3014656, 2215936, 3059712, 3076096, 3088384, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2445312, 2215936, 2465792, 2473984, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2171019, 2494603, 2171019, 2171019, 2215936, 2215936, 2215936, 3215360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3016168, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 124, 124, 0, 128, 128, 2170880, 2170880, 2170880, 3215360, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2535424, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 0, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2170880, 2170880, 3170304, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 2215936, 2215936, 2215936, 2535424, 2539520, 2215936, 2215936, 2588672, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 136, 0, 2215936, 2215936, 2920448, 2215936, 2215936, 2215936, 2990080, 2215936, 2215936, 2215936, 2215936, 3051520, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3108864, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3026944, 2215936, 2215936, 3063808, 2215936, 2215936, 3112960, 2215936, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2537049, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 1508, 2170880, 2170880, 2170880, 1512, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2686976, 2748416, 2170880, 2170880, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3121152, 2170880, 2170880, 3145728, 3158016, 3166208, 2170880, 2420736, 2428928, 2170880, 2478080, 2170880, 2170880, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 0, 0, 3145728, 3158016, 3166208, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 0, 2170880, 2215936, 2215936, 2580480, 2215936, 2605056, 2637824, 2215936, 2215936, 2686976, 2748416, 2215936, 2215936, 2215936, 2924544, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 286, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 1625, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 647, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2686976, 0, 0, 2748416, 2170880, 2170880, 0, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 0, 0, 28, 28, 2170880, 3141632, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2170880, 2420736, 2428928, 2752512, 2756608, 0, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2170880, 3141632, 2170880, 2170880, 2490368, 2215936, 2490368, 2215936, 2215936, 2215936, 2547712, 2555904, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 245760, 0, 3129344, 2170880, 2170880, 2490368, 2170880, 2170880, 2170880, 0, 0, 2547712, 2555904, 2170880, 2170880, 2170880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 45056, 0, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1482, 97, 97, 97, 97, 97, 97, 97, 1354, 97, 97, 97, 97, 97, 97, 97, 97, 1148, 97, 97, 97, 97, 97, 97, 97, 2584576, 2170880, 2170880, 1512, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2170880, 2850816, 2170880, 2170880, 2170880, 3022848, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 2215936, 3022848, 2170880, 2441216, 2170880, 2527232, 0, 0, 2170880, 2600960, 2170880, 0, 2850816, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2596864, 2170880, 2621440, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 3022848, 2170880, 2519040, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2514944, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2519040, 0, 2024, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 2024, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 2170880, 2215936, 2650112, 2965504, 2215936, 0, 0, 2170880, 2650112, 2965504, 2170880, 2551808, 2170880, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 141, 45, 45, 67, 67, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 0, 2551808, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2977792, 2977792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 29, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 49172, 0, 0, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 4256099, 4256099, 24, 24, 0, 28, 28, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 0, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 2170880, 2547712, 2555904, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2215936, 2215936, 543, 543, 545, 545, 0, 0, 2179072, 0, 550, 551, 551, 0, 287, 2171166, 2171166, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 645, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 149, 2584576, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2519040, 0, 0, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 0, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 53264, 18, 49172, 57366, 24, 155648, 28, 102432, 155648, 155687, 114730, 106539, 0, 0, 155648, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 0, 0, 2220032, 0, 94208, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 208896, 18, 278528, 24, 24, 0, 28, 28, 53264, 18, 159765, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 139394, 28, 28, 102432, 131, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 32768, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 546, 0, 0, 2183168, 0, 0, 552, 832, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2654208, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 1084, 0, 1088, 0, 1092, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 937, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 644, 0, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 826, 0, 828, 0, 0, 2183168, 0, 0, 830, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2170880, 2170880, 2633728, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 53264, 18, 49172, 57366, 24, 8192, 28, 172066, 172032, 110630, 172066, 106539, 0, 0, 172032, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 102432, 0, 98304, 0, 0, 2220032, 110630, 0, 0, 0, 0, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 45056, 0, 0, 0, 53264, 18, 49172, 57366, 25, 8192, 30, 102432, 0, 110630, 114730, 106539, 0, 0, 176219, 53264, 18, 18, 49172, 0, 57366, 0, 124, 124, 124, 0, 128, 128, 128, 128, 102432, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 546, 0, 0, 2183168, 0, 65536, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 143, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1824, 67, 1826, 67, 67, 67, 67, 17, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 120, 121, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 2179072, 548, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2033, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 978, 0, 546, 70179, 0, 2183168, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1013, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 67, 67, 67, 483, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1359, 97, 97, 97, 67, 67, 1584, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 45, 45, 45, 45, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 774, 67, 67, 1713, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1723, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 45, 1559, 45, 45, 1561, 45, 45, 45, 45, 45, 45, 45, 687, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1771, 1772, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 1827, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 1614, 97, 97, 97, 97, 97, 603, 97, 97, 605, 97, 97, 608, 97, 97, 97, 97, 0, 1532, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 450, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 1839, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 1883, 97, 1885, 97, 0, 1888, 0, 97, 97, 0, 97, 97, 1848, 97, 97, 97, 97, 1852, 45, 45, 45, 45, 45, 45, 45, 384, 391, 45, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 45, 45, 45, 45, 1237, 45, 45, 45, 45, 45, 45, 67, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1951, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1963, 97, 2023, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 1994, 67, 1995, 67, 67, 67, 67, 67, 67, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 137, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2793472, 2805760, 2170880, 2830336, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 281, 549, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2031, 2032, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 0, 546, 70179, 549, 549, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1858, 45, 641, 0, 0, 0, 0, 41606, 926, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 456, 67, 0, 0, 0, 1313, 0, 0, 0, 1096, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1110, 97, 97, 97, 97, 67, 67, 67, 67, 1301, 1476, 0, 0, 0, 0, 1307, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1486, 97, 1487, 97, 1313, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 97, 45, 1853, 45, 1855, 45, 45, 45, 45, 53264, 18, 49172, 57366, 26, 8192, 31, 102432, 0, 110630, 114730, 106539, 0, 0, 225368, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 18, 49172, 163840, 57366, 0, 24, 24, 229376, 0, 28, 28, 28, 229376, 102432, 0, 0, 0, 0, 2220167, 110630, 0, 0, 0, 114730, 106539, 0, 2171019, 2171019, 2171019, 2171019, 2592907, 2171019, 2171019, 2171019, 2171019, 2633867, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2654347, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3117195, 2171019, 2171019, 2171019, 2171019, 2240641, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 140, 2171019, 2171019, 2171019, 2416779, 2424971, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2617483, 2171019, 2171019, 2642059, 2171019, 2171019, 2171019, 2699403, 2171019, 2728075, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3215499, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2171019, 2822283, 2171019, 2171019, 2855051, 2171019, 2171019, 2171019, 2912395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3002507, 2171019, 2171019, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2171166, 2171166, 2416926, 2425118, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2576670, 2171166, 2617630, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2691358, 2171166, 2707742, 2171166, 2715934, 2171166, 2724126, 2765086, 2171166, 2171166, 2797854, 2171166, 2822430, 2171166, 2171166, 2855198, 2171166, 2171166, 2171166, 2912542, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2793758, 2806046, 2171166, 2830622, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3109150, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2543902, 2171166, 2171166, 2171166, 2171166, 2171166, 2629918, 2793611, 2805899, 2171019, 2830475, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2171166, 2171166, 2171166, 2400542, 2171166, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 0, 2171166, 2920734, 2171166, 2171166, 2171166, 2990366, 2171166, 2171166, 2171166, 2171166, 3117342, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 53264, 0, 18, 18, 4329472, 2232445, 0, 2240641, 4337664, 2711691, 2171019, 2171019, 2171019, 2171019, 2171019, 2760843, 2769035, 2789515, 2814091, 2171019, 2171019, 2171019, 2875531, 2904203, 2171019, 2171019, 3092619, 2171019, 2171019, 3125387, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3199115, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2793472, 2805760, 2215936, 2830336, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2494464, 2170880, 2170880, 2171166, 2171166, 2634014, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2711838, 2171166, 2171166, 2171166, 2171166, 2171166, 2760990, 2769182, 2789662, 2814238, 2171166, 2171166, 2171166, 2875678, 2904350, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3199262, 2171166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379915, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2445451, 2171019, 2465931, 2474123, 2171019, 2171019, 3113099, 2171019, 2171019, 3133579, 2171019, 2171019, 2171019, 3162251, 2171019, 2171019, 3182731, 3186827, 2171019, 2379776, 2879627, 2171019, 2916491, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3027083, 2171019, 2171019, 3063947, 2699550, 2171166, 2728222, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2879774, 2171166, 2916638, 2171166, 2171166, 2171166, 2171166, 2171166, 2609438, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2654494, 2171166, 2171166, 2171166, 2171166, 2171166, 2445598, 2171166, 2466078, 2474270, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2523422, 2171019, 2437259, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2543755, 2171019, 2171019, 2171019, 2584715, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2908299, 2171019, 2171019, 2936971, 2171019, 2171019, 2986123, 2171019, 2994315, 2171019, 2171019, 3014795, 2171019, 3059851, 3076235, 3088523, 2171166, 2171166, 2986270, 2171166, 2994462, 2171166, 2171166, 3014942, 2171166, 3059998, 3076382, 3088670, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3027230, 2171166, 2171166, 3064094, 2171166, 2171166, 3113246, 2171166, 2171166, 3133726, 2506891, 2171019, 2171019, 2171019, 2535563, 2539659, 2171019, 2171019, 2588811, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2691211, 2171019, 2707595, 2171019, 2715787, 2171019, 2723979, 2764939, 2171019, 2171019, 2797707, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2453790, 2457886, 2171166, 2171166, 2171166, 2486558, 2171166, 2171166, 2507038, 2171166, 2171166, 2171166, 2535710, 2539806, 2171166, 2171166, 2588958, 2171166, 2171166, 2171166, 2171166, 2515230, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2593054, 2171166, 2171166, 2171166, 2171166, 3051806, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3170590, 0, 2388107, 2392203, 2171019, 2171019, 2433163, 2171019, 2461835, 2171019, 2171019, 2171019, 2510987, 2171019, 2171019, 2171019, 2171019, 2580619, 2171019, 2605195, 2637963, 2171019, 2171019, 2171019, 2920587, 2171019, 2171019, 2171019, 2990219, 2171019, 2171019, 2171019, 2171019, 3051659, 2171019, 2171019, 2171019, 2453643, 2457739, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2515083, 2171019, 2171019, 2171019, 2171019, 2646155, 2670731, 2752651, 2756747, 2846859, 2961547, 2171019, 2998411, 2171019, 3010699, 2171019, 2171019, 2687115, 2748555, 2171019, 2171019, 2171019, 2924683, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3121291, 2171019, 2171019, 2171019, 3170443, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 3145867, 3158155, 3166347, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 553, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2388254, 2392350, 2171166, 2171166, 2433310, 2171166, 2461982, 2171166, 2171166, 2171166, 2511134, 2171166, 2171166, 0, 2171166, 2171166, 2580766, 2171166, 2605342, 2638110, 2171166, 2171166, 2171166, 2171166, 3031326, 2171166, 3055902, 2171166, 2171166, 2171166, 2171166, 3092766, 2171166, 2171166, 3125534, 2171166, 2171166, 2171166, 3162398, 2171166, 2171166, 3182878, 3186974, 2171166, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 3109003, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2171166, 2687262, 0, 0, 2748702, 2171166, 2171166, 0, 2171166, 2924830, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2597150, 2171166, 2621726, 2171166, 2171166, 2642206, 2171166, 2171166, 2171166, 2171166, 3121438, 2171166, 2171166, 3146014, 3158302, 3166494, 2171019, 2420875, 2429067, 2171019, 2478219, 2171019, 2171019, 2171019, 2171019, 2547851, 2556043, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3129483, 2215936, 2171019, 3141771, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2171166, 2421022, 2429214, 2171166, 2478366, 2171166, 2171166, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2646302, 2670878, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 0, 45, 45, 45, 45, 45, 1405, 1406, 45, 45, 45, 45, 1409, 45, 45, 45, 45, 45, 1415, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1238, 45, 45, 45, 45, 67, 2752798, 2756894, 0, 2847006, 2961694, 2171166, 2998558, 2171166, 3010846, 2171166, 2171166, 2171166, 3141918, 2171019, 2171019, 2490507, 3129344, 2171166, 2171166, 2490654, 2171166, 2171166, 2171166, 0, 0, 2547998, 2556190, 2171166, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 167, 45, 45, 45, 45, 185, 187, 45, 45, 198, 45, 45, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3129630, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2576523, 2171019, 2171019, 2171019, 2171019, 2171019, 2609291, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2171166, 2171166, 2494750, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 147, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 3002654, 2171166, 2171166, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2175257, 0, 0, 2584862, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2441355, 2171019, 2527371, 2171019, 2601099, 2171019, 2850955, 2171019, 2171019, 2171019, 3022987, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 69632, 287, 2170880, 2215936, 3022848, 2171166, 2441502, 2171166, 2527518, 0, 0, 2171166, 2601246, 2171166, 0, 2851102, 2171166, 2171166, 2171166, 2171166, 2720030, 2744606, 2171166, 2171166, 2171166, 2834718, 2838814, 2171166, 2908446, 2171166, 2171166, 2937118, 3023134, 2171019, 2519179, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 3215646, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2486411, 2171019, 2171019, 2171019, 2629771, 2171019, 2171019, 2171019, 2171019, 2719883, 2744459, 2171019, 2171019, 2171019, 2834571, 2838667, 2171019, 2519326, 0, 0, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 2396299, 2171019, 2171019, 2171019, 2171019, 3018891, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396446, 0, 0, 2171166, 2171166, 2171166, 2171166, 3019038, 2171019, 2650251, 2965643, 2171019, 2215936, 2650112, 2965504, 2215936, 0, 0, 2171166, 2650398, 2965790, 2171166, 2551947, 2171019, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 144, 45, 45, 67, 67, 67, 67, 67, 228, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1929, 97, 97, 97, 97, 0, 0, 0, 2552094, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2977931, 2977792, 2978078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1321, 97, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 140, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2584576, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 140, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3215360, 544, 0, 0, 0, 544, 0, 546, 0, 0, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 0, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 552, 0, 0, 0, 552, 0, 287, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 644, 0, 2215936, 2215936, 3170304, 544, 0, 546, 0, 552, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 140, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 249856, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 151640, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 253952, 110630, 114730, 106539, 0, 0, 32856, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 192512, 53264, 18, 18, 49172, 0, 57366, 0, 2232445, 184320, 2232445, 0, 2240641, 2240641, 184320, 2240641, 102432, 0, 0, 0, 221184, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3108864, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 0, 0, 0, 45056, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 127, 127, 53264, 18, 49172, 258071, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 204800, 53264, 18, 49172, 57366, 24, 27, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 33, 0, 33, 33, 33, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2170880, 2170880, 2170880, 2416640, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2030, 45, 45, 45, 45, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1699, 67, 67, 67, 67, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 1358, 97, 97, 97, 641, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 45, 45, 45, 0, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1680, 45, 45, 45, 641, 0, 924, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 45, 45, 45, 45, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 282, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 2028, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1767, 67, 67, 67, 0, 0, 0, 0, 0, 0, 1612, 97, 97, 97, 97, 97, 97, 0, 1785, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1790, 97, 0, 0, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 241664, 2387968, 2392064, 2170880, 2170880, 2433024, 53264, 19, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 274432, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 270336, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 1134711, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 1126440, 1126440, 1126440, 0, 0, 1126400, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 36, 110630, 114730, 106539, 0, 0, 217088, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 94, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 96, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 24666, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 126, 28, 28, 28, 28, 102432, 53264, 122, 123, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 2170880, 2170880, 4256099, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1109, 97, 97, 97, 97, 1113, 132, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 146, 150, 45, 45, 45, 45, 45, 175, 45, 180, 45, 186, 45, 189, 45, 45, 203, 67, 256, 67, 67, 270, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 293, 297, 97, 97, 97, 97, 97, 322, 97, 327, 97, 333, 97, 0, 0, 97, 2026, 0, 2027, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 336, 97, 97, 350, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 2424832, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2617344, 2170880, 45, 439, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 525, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 622, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 1527, 369, 648, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1239, 45, 45, 45, 67, 729, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 762, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 0, 0, 0, 1477, 0, 1086, 0, 0, 0, 1479, 0, 1090, 67, 67, 796, 67, 67, 799, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 67, 67, 811, 67, 67, 67, 67, 67, 816, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 833, 97, 97, 97, 97, 97, 97, 97, 97, 1380, 0, 0, 0, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 45, 45, 45, 45, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 97, 97, 97, 894, 97, 97, 897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1382, 45, 45, 45, 97, 909, 97, 97, 97, 97, 97, 914, 97, 97, 97, 97, 97, 97, 97, 923, 67, 67, 1079, 67, 67, 67, 67, 67, 37689, 1085, 25403, 1089, 66365, 1093, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 148, 1114, 97, 97, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 97, 97, 606, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1173, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 145, 45, 45, 67, 67, 67, 67, 67, 1762, 67, 67, 67, 1766, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1934, 67, 67, 1255, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 67, 67, 67, 67, 1297, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 33344, 97, 97, 97, 1335, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1377, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 670, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 67, 67, 1438, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 0, 0, 0, 1311, 0, 0, 0, 1317, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1322, 97, 97, 1491, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 1553, 45, 1504, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 97, 97, 0, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 1540, 45, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1700, 67, 67, 67, 97, 1648, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1541, 0, 97, 97, 97, 97, 0, 1940, 0, 97, 97, 97, 97, 97, 97, 45, 45, 2011, 45, 45, 45, 2015, 67, 67, 2017, 67, 67, 67, 2021, 97, 67, 67, 812, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 97, 97, 910, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 0, 0, 0, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 1188, 45, 45, 45, 45, 1414, 45, 45, 45, 1417, 45, 1419, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 453, 45, 45, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 1324, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 930, 45, 45, 45, 45, 97, 97, 97, 97, 1378, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 45, 67, 67, 1923, 67, 1925, 67, 67, 1927, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1985, 45, 45, 45, 45, 45, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 45, 946, 45, 45, 950, 45, 45, 45, 0, 97, 97, 97, 1939, 0, 0, 0, 97, 1943, 97, 97, 1945, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 990, 45, 45, 45, 67, 257, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 337, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 2170880, 2170880, 2170880, 2416640, 401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 459, 461, 67, 67, 67, 67, 67, 67, 67, 67, 475, 67, 480, 67, 67, 67, 67, 67, 67, 1054, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 484, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 67, 67, 97, 556, 558, 97, 97, 97, 97, 97, 97, 97, 97, 572, 97, 577, 97, 97, 0, 0, 1896, 97, 97, 97, 97, 97, 97, 1903, 45, 45, 45, 45, 983, 45, 45, 45, 45, 988, 45, 45, 45, 45, 45, 45, 1195, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1549, 45, 45, 45, 45, 45, 581, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1004, 45, 45, 45, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 761, 67, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 1071, 67, 67, 67, 67, 1076, 794, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 544, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 859, 97, 0, 0, 2025, 97, 20480, 97, 97, 2029, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1775, 67, 67, 67, 97, 97, 97, 97, 892, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1515, 97, 993, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 992, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1607, 67, 67, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 97, 45, 1556, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 696, 45, 1596, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 67, 97, 97, 97, 1621, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1346, 97, 97, 97, 97, 1740, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 45, 45, 67, 97, 97, 97, 97, 97, 97, 1836, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1984, 97, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 45, 45, 45, 45, 67, 739, 67, 67, 67, 67, 67, 744, 45, 45, 1909, 45, 45, 45, 45, 45, 45, 45, 67, 1917, 67, 1918, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 67, 67, 67, 67, 67, 97, 1930, 97, 1931, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 1580, 67, 67, 0, 97, 97, 1938, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 699, 45, 45, 45, 704, 45, 45, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 2006, 97, 97, 97, 97, 0, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 722, 723, 45, 45, 45, 45, 45, 45, 2045, 67, 67, 67, 2047, 0, 0, 97, 97, 97, 2051, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1957, 45, 67, 67, 67, 67, 67, 1836, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 67, 67, 1761, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 45, 45, 420, 45, 45, 422, 45, 45, 425, 45, 45, 45, 45, 45, 45, 45, 387, 45, 45, 45, 45, 397, 45, 45, 45, 67, 460, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 515, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 97, 0, 2039, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1426, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1689, 67, 67, 67, 97, 557, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 612, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 896, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 97, 45, 939, 45, 45, 45, 45, 943, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1916, 67, 67, 67, 67, 67, 45, 67, 67, 67, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 1019, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 804, 67, 67, 67, 67, 67, 1077, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2543616, 2170880, 2170880, 2170880, 2170880, 2170880, 2629632, 1169, 97, 1171, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 936, 45, 45, 67, 67, 214, 67, 220, 67, 67, 233, 67, 243, 67, 248, 67, 67, 67, 67, 67, 67, 1298, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1617, 97, 0, 0, 0, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 45, 45, 45, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 1281, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 776, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 907, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 690, 45, 45, 695, 45, 45, 67, 67, 67, 67, 67, 1465, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1712, 97, 97, 97, 97, 1741, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1924, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1983, 97, 97, 45, 45, 1987, 45, 1988, 45, 0, 97, 97, 97, 97, 0, 0, 0, 1942, 97, 97, 97, 97, 97, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 711, 45, 45, 153, 45, 45, 166, 45, 176, 45, 181, 45, 45, 188, 191, 196, 45, 204, 255, 258, 263, 67, 271, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 97, 97, 294, 97, 300, 97, 97, 313, 97, 323, 97, 328, 97, 97, 335, 338, 343, 97, 351, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1411, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 67, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1263, 67, 67, 67, 67, 67, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1526, 97, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 0, 97, 97, 1796, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1744, 45, 45, 45, 369, 0, 651, 45, 653, 45, 654, 45, 656, 45, 45, 45, 660, 45, 45, 45, 45, 1558, 45, 45, 45, 45, 45, 45, 45, 45, 1566, 45, 45, 681, 45, 683, 45, 45, 45, 45, 45, 45, 45, 45, 691, 692, 694, 45, 45, 45, 716, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 709, 45, 45, 712, 45, 714, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 726, 45, 45, 45, 733, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 747, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 1613, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 67, 764, 67, 67, 67, 67, 768, 67, 770, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1977, 67, 778, 779, 781, 67, 67, 67, 67, 67, 67, 788, 789, 67, 67, 792, 793, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 67, 67, 824, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 836, 97, 838, 97, 839, 97, 841, 97, 97, 97, 845, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 97, 97, 0, 1728, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1802, 45, 97, 97, 862, 97, 97, 97, 97, 866, 97, 868, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1788, 97, 97, 97, 0, 0, 97, 97, 876, 877, 879, 97, 97, 97, 97, 97, 97, 886, 887, 97, 97, 890, 891, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1646, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 97, 97, 922, 923, 45, 955, 45, 957, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 195, 45, 45, 45, 45, 45, 981, 982, 45, 45, 45, 45, 45, 45, 989, 45, 45, 45, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 67, 67, 1031, 67, 1033, 67, 67, 67, 67, 67, 67, 67, 817, 819, 67, 67, 67, 67, 67, 37689, 544, 67, 1065, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 1078, 67, 67, 1081, 1082, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2437406, 2171166, 2171166, 97, 1115, 97, 1117, 97, 97, 97, 97, 97, 97, 1125, 97, 1127, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 1644, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 1642, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1159, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1502, 97, 97, 97, 97, 97, 1172, 97, 97, 1175, 1176, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 935, 45, 45, 45, 1233, 45, 45, 45, 1236, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1873, 67, 67, 45, 45, 1218, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 1230, 45, 45, 67, 67, 215, 219, 222, 67, 230, 67, 67, 244, 246, 249, 67, 67, 67, 67, 67, 67, 1882, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1904, 45, 1905, 45, 67, 67, 67, 67, 67, 1258, 67, 1260, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 67, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 67, 818, 67, 67, 67, 67, 67, 67, 37689, 544, 67, 67, 1295, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 97, 97, 97, 1326, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 97, 97, 97, 97, 97, 1338, 97, 1340, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 1503, 97, 1363, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 578, 97, 1375, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 45, 45, 45, 45, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1778, 97, 97, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 97, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 1554, 45, 1570, 1571, 45, 67, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 67, 1061, 67, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 1594, 67, 67, 67, 67, 67, 97, 2038, 0, 97, 97, 97, 97, 97, 2044, 45, 45, 45, 995, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 45, 45, 45, 1809, 45, 1811, 45, 45, 45, 45, 45, 67, 1610, 1611, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 1618, 1647, 1649, 97, 97, 97, 1652, 97, 1654, 1655, 97, 0, 45, 45, 45, 1658, 45, 45, 67, 67, 216, 67, 67, 67, 67, 234, 67, 67, 67, 67, 252, 254, 1845, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 947, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1881, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1902, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1921, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 0, 97, 1937, 97, 97, 1940, 0, 0, 97, 97, 97, 97, 97, 97, 1947, 1948, 1949, 45, 45, 45, 1952, 45, 1954, 45, 45, 45, 45, 1959, 1960, 1961, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 67, 67, 1964, 67, 1966, 67, 67, 67, 67, 1971, 1972, 1973, 97, 0, 0, 0, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 884, 97, 97, 97, 889, 97, 97, 1978, 97, 0, 0, 1981, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 736, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 45, 67, 67, 67, 67, 0, 2049, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 933, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 97, 97, 288, 97, 97, 97, 97, 97, 97, 317, 97, 97, 97, 97, 97, 97, 0, 0, 97, 1787, 97, 97, 97, 97, 0, 0, 45, 45, 378, 45, 45, 45, 45, 45, 390, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 431, 433, 45, 45, 45, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 67, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 632, 97, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 67, 97, 97, 97, 97, 97, 97, 1837, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1897, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 97, 2010, 45, 45, 45, 45, 45, 45, 2016, 67, 67, 67, 67, 67, 67, 2022, 45, 2046, 67, 67, 67, 0, 0, 2050, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 932, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 45, 45, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 701, 702, 45, 45, 705, 706, 45, 45, 45, 45, 45, 45, 703, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 45, 45, 45, 45, 45, 725, 45, 45, 45, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 834, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1799, 97, 97, 45, 45, 45, 1569, 45, 45, 45, 1572, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1306, 0, 67, 67, 67, 1598, 67, 67, 67, 67, 67, 67, 67, 67, 1606, 67, 67, 1609, 97, 97, 97, 1650, 97, 97, 1653, 97, 97, 97, 0, 45, 45, 1657, 45, 45, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1421, 45, 45, 45, 1703, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1711, 97, 97, 0, 1895, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 958, 45, 960, 45, 45, 45, 45, 45, 45, 45, 45, 1913, 45, 45, 1915, 67, 67, 67, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 481, 67, 45, 1749, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 45, 45, 45, 45, 173, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1773, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1886, 0, 0, 0, 97, 97, 67, 2035, 2036, 67, 67, 97, 0, 0, 97, 2041, 2042, 97, 97, 45, 45, 45, 45, 1662, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1397, 45, 45, 45, 45, 151, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 437, 205, 45, 67, 67, 67, 218, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 67, 97, 97, 97, 97, 298, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 97, 97, 97, 97, 97, 97, 352, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 365, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1427, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1435, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1037, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1919, 67, 1759, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 45, 154, 45, 162, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 964, 45, 45, 45, 206, 45, 67, 67, 67, 67, 221, 67, 229, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 67, 785, 67, 67, 67, 67, 67, 67, 67, 67, 802, 67, 67, 67, 807, 67, 67, 67, 97, 97, 97, 97, 353, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 402, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 45, 45, 674, 45, 45, 45, 45, 45, 45, 45, 45, 389, 45, 394, 45, 45, 398, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 447, 45, 45, 45, 454, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 488, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 67, 67, 67, 67, 67, 1774, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 67, 67, 523, 67, 67, 527, 67, 67, 67, 67, 67, 533, 67, 67, 67, 540, 97, 97, 97, 585, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 97, 97, 97, 97, 1784, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 620, 97, 97, 624, 97, 97, 97, 97, 97, 630, 97, 97, 97, 637, 713, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 45, 45, 45, 1197, 45, 45, 45, 45, 45, 45, 45, 45, 730, 732, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1581, 67, 45, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 775, 67, 67, 67, 67, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 67, 67, 67, 1080, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 287, 0, 2379776, 2170880, 2170880, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 920, 97, 97, 0, 0, 0, 0, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 45, 959, 45, 45, 45, 45, 45, 45, 45, 45, 45, 184, 45, 45, 45, 45, 202, 45, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1266, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1279, 67, 67, 67, 67, 67, 272, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1293, 67, 67, 67, 1296, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 281, 94, 0, 0, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 0, 97, 1376, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1384, 45, 45, 67, 208, 67, 67, 67, 67, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1069, 1070, 67, 67, 67, 67, 67, 67, 67, 0, 37140, 24854, 0, 0, 0, 0, 41098, 65821, 45, 1423, 45, 45, 45, 45, 45, 45, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1083, 37689, 0, 25403, 0, 66365, 0, 0, 0, 1436, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1830, 67, 1452, 1453, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 67, 67, 1461, 67, 67, 67, 1464, 67, 1466, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 1587, 67, 67, 67, 67, 67, 67, 67, 67, 1595, 1489, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 1505, 1506, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 1164, 97, 97, 97, 97, 97, 1516, 97, 97, 97, 1519, 97, 1521, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1301, 0, 0, 0, 1307, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 919, 97, 97, 97, 0, 97, 97, 97, 1781, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1792, 1860, 45, 1862, 1863, 45, 1865, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1875, 67, 1877, 1878, 67, 1880, 67, 97, 97, 97, 97, 97, 1887, 0, 1889, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 237568, 0, 367, 0, 97, 1893, 0, 0, 0, 97, 1898, 1899, 97, 1901, 97, 45, 45, 45, 45, 45, 2014, 45, 67, 67, 67, 67, 67, 2020, 67, 97, 1989, 45, 1990, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1996, 67, 1997, 67, 67, 67, 67, 67, 273, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 2005, 0, 97, 2007, 97, 97, 18, 0, 139621, 0, 0, 0, 642, 0, 133, 364, 0, 0, 367, 41606, 0, 97, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 209, 67, 67, 67, 223, 67, 67, 67, 67, 67, 67, 67, 67, 67, 786, 67, 67, 67, 791, 67, 67, 45, 45, 940, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1016, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 142, 45, 45, 67, 210, 67, 67, 67, 225, 67, 67, 239, 67, 67, 67, 250, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 476, 67, 67, 67, 67, 67, 67, 67, 1709, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1843, 0, 67, 259, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 289, 97, 97, 97, 303, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 97, 339, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 358, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1953, 45, 1955, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1687, 1688, 67, 67, 67, 67, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1203, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 477, 67, 67, 67, 67, 67, 67, 67, 1970, 97, 97, 97, 1974, 0, 0, 0, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1372, 97, 97, 97, 97, 67, 522, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 536, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 574, 97, 97, 97, 97, 97, 301, 97, 309, 97, 97, 97, 97, 97, 97, 97, 97, 97, 900, 97, 97, 97, 905, 97, 97, 97, 619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 633, 97, 97, 18, 0, 139621, 0, 0, 362, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 664, 67, 67, 67, 67, 750, 751, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1057, 1058, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 67, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 902, 97, 97, 97, 97, 67, 67, 1051, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1302, 0, 0, 0, 1308, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1139, 97, 97, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 1161, 97, 97, 97, 97, 97, 1166, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 1257, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 97, 97, 1337, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1630, 97, 67, 1474, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380062, 2171166, 2171166, 97, 1529, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 45, 45, 67, 67, 67, 67, 1707, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1891, 1739, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 1200, 45, 45, 45, 45, 97, 97, 1894, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 45, 45, 45, 67, 67, 1965, 67, 1967, 67, 67, 67, 97, 97, 97, 97, 0, 1976, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 97, 97, 1979, 0, 0, 97, 1982, 97, 97, 97, 1986, 45, 45, 45, 45, 45, 735, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 2000, 97, 97, 97, 2002, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1798, 97, 97, 97, 45, 45, 45, 2034, 67, 67, 67, 67, 97, 0, 0, 2040, 97, 97, 97, 97, 45, 45, 45, 45, 1752, 45, 45, 45, 1753, 1754, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 45, 45, 438, 45, 45, 45, 45, 45, 445, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1430, 67, 67, 67, 67, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 531, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1096, 97, 97, 97, 621, 97, 97, 97, 97, 97, 628, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 45, 942, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 708, 45, 45, 45, 45, 763, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 809, 810, 67, 67, 67, 67, 783, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1303, 0, 0, 0, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 45, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 67, 67, 67, 67, 1027, 67, 67, 67, 67, 1032, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1097, 1064, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 67, 1098, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 331, 97, 97, 97, 97, 1158, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 1309, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1374, 97, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1240, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1252, 67, 97, 97, 97, 1635, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1800, 97, 45, 45, 45, 97, 97, 1793, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1743, 45, 45, 45, 1746, 45, 0, 97, 97, 97, 97, 97, 1851, 97, 45, 45, 45, 45, 1856, 45, 45, 45, 45, 1864, 45, 45, 67, 67, 1869, 67, 67, 67, 67, 1874, 67, 0, 97, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 211, 67, 67, 67, 67, 67, 67, 240, 67, 67, 67, 67, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 67, 67, 268, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 290, 97, 97, 97, 305, 97, 97, 319, 97, 97, 97, 330, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 643, 367, 41606, 97, 97, 348, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 395, 45, 45, 45, 400, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 45, 972, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1086, 25403, 1090, 66365, 1094, 0, 0, 97, 843, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 1121, 97, 97, 97, 97, 1126, 97, 97, 97, 97, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1400, 45, 67, 67, 67, 1011, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1304, 0, 0, 0, 1190, 45, 45, 1193, 1194, 45, 45, 45, 45, 45, 1199, 45, 1201, 45, 45, 45, 45, 1911, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 67, 67, 45, 1205, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1217, 45, 45, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 1229, 45, 45, 45, 1388, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1574, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 1254, 67, 67, 67, 67, 67, 1259, 67, 1261, 67, 67, 67, 67, 1265, 67, 67, 67, 67, 67, 67, 1708, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 1289, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1087, 25403, 1091, 66365, 1095, 0, 0, 97, 97, 97, 97, 1339, 97, 1341, 97, 97, 97, 97, 1345, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 573, 97, 97, 97, 97, 97, 97, 1717, 97, 0, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1329, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 97, 97, 97, 1365, 97, 97, 97, 97, 1369, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1399, 45, 45, 45, 1413, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1669, 45, 1422, 45, 45, 1425, 45, 45, 1428, 45, 1429, 67, 67, 67, 67, 67, 67, 67, 67, 1468, 67, 67, 67, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 539, 67, 67, 1475, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 97, 97, 1530, 97, 0, 45, 45, 1534, 45, 45, 45, 45, 45, 45, 45, 45, 1956, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 67, 67, 1601, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 67, 1632, 97, 1634, 0, 97, 97, 97, 1640, 97, 97, 97, 1643, 97, 97, 1645, 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1660, 1661, 45, 45, 45, 45, 1665, 1666, 45, 45, 45, 45, 45, 1670, 1692, 1693, 67, 67, 67, 67, 67, 1697, 67, 67, 67, 67, 67, 67, 67, 1702, 97, 97, 1714, 1715, 97, 97, 97, 97, 0, 1721, 1722, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 97, 97, 1362, 1726, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 1734, 97, 97, 97, 97, 97, 848, 849, 97, 97, 97, 97, 856, 97, 97, 97, 97, 97, 354, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 45, 45, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1681, 45, 0, 1846, 97, 97, 97, 97, 97, 97, 45, 45, 1854, 45, 45, 45, 45, 1859, 67, 67, 67, 1879, 67, 67, 97, 97, 1884, 97, 97, 0, 0, 0, 97, 97, 97, 1105, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 1347, 97, 1892, 97, 0, 0, 0, 97, 97, 97, 1900, 97, 97, 45, 45, 45, 45, 45, 997, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1002, 45, 45, 1005, 1006, 45, 67, 67, 67, 67, 67, 1926, 67, 67, 1928, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1737, 97, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1944, 97, 97, 1946, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 190, 45, 45, 45, 152, 155, 45, 163, 45, 45, 177, 179, 182, 45, 45, 45, 193, 197, 45, 45, 45, 1672, 45, 45, 45, 45, 45, 1677, 45, 1679, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 67, 260, 264, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 295, 299, 302, 97, 310, 97, 97, 324, 326, 329, 97, 97, 97, 0, 97, 97, 1639, 0, 1641, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 97, 1523, 97, 97, 97, 97, 97, 97, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 97, 97, 312, 97, 97, 97, 97, 97, 97, 97, 97, 1123, 97, 97, 97, 97, 97, 97, 97, 340, 344, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 373, 375, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 435, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1410, 45, 45, 45, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 67, 67, 67, 67, 1969, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 2064, 2065, 0, 2066, 45, 521, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 465, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1933, 0, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 18, 640, 139621, 358, 641, 0, 0, 0, 0, 364, 0, 0, 367, 0, 618, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 97, 97, 881, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 569, 97, 97, 97, 97, 97, 369, 0, 45, 652, 45, 45, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1432, 67, 67, 67, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 67, 0, 1305, 0, 1311, 0, 1317, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 1724, 97, 97, 97, 777, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 535, 67, 67, 67, 67, 67, 67, 67, 814, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 837, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 97, 97, 97, 0, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1168, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 97, 97, 0, 1637, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1801, 45, 45, 97, 875, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1151, 1152, 97, 97, 97, 67, 67, 67, 1040, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 790, 67, 67, 67, 1180, 0, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 200, 45, 45, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 67, 67, 67, 0, 0, 0, 1481, 0, 1094, 0, 0, 97, 1483, 97, 97, 97, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 1633, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1381, 0, 0, 45, 45, 45, 45, 97, 97, 1727, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 636, 45, 45, 1760, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 67, 67, 1299, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1616, 97, 97, 1803, 45, 45, 45, 45, 1807, 45, 45, 45, 45, 45, 1813, 45, 45, 45, 67, 67, 1684, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 822, 67, 67, 37689, 544, 67, 67, 1818, 67, 67, 67, 67, 1822, 67, 67, 67, 67, 67, 1828, 67, 67, 67, 67, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2012, 2013, 45, 45, 67, 67, 67, 2018, 2019, 67, 67, 97, 67, 97, 97, 97, 1833, 97, 97, 0, 0, 97, 97, 1840, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 1733, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 1849, 97, 97, 97, 45, 45, 45, 45, 45, 1857, 45, 45, 45, 1910, 45, 1912, 45, 45, 1914, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 67, 1020, 67, 45, 1861, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1446, 67, 67, 67, 67, 67, 1876, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1890, 97, 97, 97, 97, 97, 1134, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 97, 97, 97, 580, 1935, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1906, 45, 67, 67, 67, 67, 2048, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 931, 45, 45, 45, 45, 45, 45, 1674, 45, 1676, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1871, 67, 67, 67, 67, 0, 97, 97, 45, 67, 0, 97, 2060, 2061, 0, 2063, 45, 67, 0, 97, 45, 45, 156, 45, 45, 45, 45, 45, 45, 45, 45, 45, 192, 45, 45, 45, 45, 1673, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 429, 45, 45, 45, 45, 67, 67, 67, 269, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 349, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 374, 45, 45, 67, 67, 213, 217, 67, 67, 67, 67, 67, 242, 67, 247, 67, 253, 45, 45, 698, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 399, 45, 45, 0, 0, 0, 0, 925, 41606, 0, 929, 0, 0, 45, 45, 45, 45, 45, 45, 1391, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 436, 45, 67, 67, 67, 67, 1041, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1776, 67, 67, 97, 97, 97, 1099, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 888, 97, 97, 97, 1131, 97, 97, 97, 97, 1135, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 883, 97, 97, 97, 97, 97, 97, 1310, 0, 0, 0, 1316, 0, 0, 0, 0, 1100, 0, 0, 0, 97, 97, 97, 97, 97, 1107, 97, 97, 97, 97, 97, 97, 97, 97, 1343, 97, 97, 97, 97, 97, 97, 1348, 0, 0, 1317, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1868, 67, 1870, 67, 67, 67, 67, 67, 1817, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 823, 67, 37689, 544, 67, 97, 1832, 97, 97, 1834, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 1732, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1177, 0, 0, 925, 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 1941, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1991, 1992, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1998, 134, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 941, 45, 45, 944, 45, 45, 45, 45, 45, 45, 952, 45, 45, 207, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 67, 67, 67, 37689, 544, 369, 650, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1682, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 835, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1725, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 1036, 67, 67, 67, 265, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 296, 97, 97, 97, 97, 314, 97, 97, 97, 97, 332, 334, 97, 97, 97, 97, 97, 1146, 1147, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 97, 97, 345, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 372, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 45, 45, 404, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 451, 452, 45, 45, 45, 67, 1683, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 490, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 1450, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 537, 538, 67, 67, 67, 67, 67, 506, 67, 67, 508, 67, 67, 511, 67, 67, 67, 67, 0, 1476, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1484, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1499, 97, 97, 97, 97, 97, 97, 97, 97, 97, 587, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 634, 635, 97, 97, 97, 97, 97, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 97, 97, 97, 369, 0, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 1001, 45, 45, 45, 45, 45, 45, 45, 45, 715, 45, 45, 45, 720, 45, 45, 45, 45, 45, 45, 45, 45, 728, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 840, 97, 97, 97, 97, 97, 1174, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 97, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 680, 45, 968, 45, 970, 45, 973, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 962, 45, 45, 45, 45, 45, 979, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 688, 45, 45, 45, 45, 45, 45, 45, 1007, 1008, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 1044, 67, 1046, 67, 1049, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 808, 67, 67, 0, 0, 0, 1102, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 97, 97, 97, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 1138, 97, 1140, 97, 1143, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 45, 1191, 45, 45, 45, 45, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 991, 45, 67, 67, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1048, 67, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 97, 1386, 45, 1387, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 455, 45, 457, 45, 45, 1424, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1433, 67, 1434, 67, 67, 67, 67, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 1593, 67, 67, 45, 45, 1805, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1814, 45, 45, 1816, 67, 67, 67, 67, 1820, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1829, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 821, 67, 67, 67, 37689, 544, 67, 1831, 97, 97, 97, 97, 1835, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1850, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 961, 45, 45, 45, 45, 965, 45, 967, 1907, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1920, 0, 1936, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 28672, 97, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2054, 97, 97, 291, 97, 97, 97, 97, 97, 97, 320, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 926, 1179, 0, 45, 377, 45, 45, 45, 381, 45, 45, 392, 45, 45, 396, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 45, 45, 45, 67, 67, 67, 67, 463, 67, 67, 67, 467, 67, 67, 478, 67, 67, 482, 67, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 1472, 67, 502, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1460, 67, 97, 97, 97, 97, 560, 97, 97, 97, 564, 97, 97, 575, 97, 97, 579, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 930, 97, 599, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 872, 97, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1758, 0, 362, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 934, 45, 45, 45, 164, 168, 174, 178, 45, 45, 45, 45, 45, 194, 45, 45, 45, 165, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 45, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1060, 67, 67, 67, 67, 67, 67, 1052, 1053, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1063, 97, 1157, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1167, 97, 97, 97, 97, 97, 1379, 97, 97, 97, 0, 0, 0, 45, 1383, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 1812, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1471, 67, 45, 1402, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 67, 1462, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 1517, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 1636, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1705, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1842, 0, 0, 1779, 97, 97, 97, 1782, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1789, 97, 97, 0, 0, 0, 97, 1847, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 45, 737, 738, 67, 740, 67, 741, 67, 743, 67, 67, 67, 67, 67, 67, 1968, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 2062, 97, 45, 67, 0, 97, 45, 67, 67, 97, 97, 2001, 97, 0, 0, 2004, 97, 97, 0, 97, 97, 97, 97, 1797, 97, 97, 97, 97, 97, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 292, 97, 97, 97, 97, 311, 315, 321, 325, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1330, 97, 97, 1333, 1334, 97, 341, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 363, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 416, 45, 376, 45, 45, 45, 45, 382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 45, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 414, 45, 45, 45, 418, 67, 67, 67, 462, 67, 67, 67, 67, 468, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 1604, 67, 67, 67, 67, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 1067, 67, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 274, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 504, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 517, 519, 541, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 554, 97, 97, 97, 559, 97, 97, 97, 97, 565, 97, 97, 97, 97, 97, 97, 97, 1718, 0, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 906, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 597, 97, 97, 97, 97, 97, 1520, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 1656, 45, 45, 45, 97, 97, 601, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 614, 616, 638, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 661, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1815, 45, 67, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 678, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 977, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 697, 67, 67, 748, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1274, 67, 67, 67, 67, 67, 67, 67, 67, 765, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 780, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1777, 67, 97, 97, 97, 97, 97, 97, 846, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 97, 1742, 45, 45, 45, 45, 45, 45, 45, 1747, 97, 97, 97, 863, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 1178, 925, 0, 1179, 0, 97, 97, 97, 878, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 954, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 963, 45, 45, 966, 45, 45, 157, 45, 45, 171, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 1022, 67, 67, 1026, 67, 67, 67, 1030, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 1605, 67, 67, 67, 1608, 67, 67, 67, 1039, 67, 67, 1042, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 67, 0, 1100, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 97, 97, 97, 97, 1116, 97, 97, 1120, 97, 97, 97, 1124, 97, 97, 97, 97, 97, 97, 562, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1133, 97, 97, 1136, 97, 97, 97, 97, 97, 97, 97, 97, 915, 917, 97, 97, 97, 97, 97, 0, 97, 1170, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1993, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 1278, 67, 0, 0, 0, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1189, 1204, 45, 45, 45, 1207, 45, 45, 1209, 45, 1210, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 45, 689, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 805, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1249, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1300, 0, 0, 0, 0, 0, 1267, 67, 67, 1269, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 97, 1349, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 97, 0, 1980, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 677, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 953, 67, 1437, 67, 1440, 67, 67, 67, 67, 1445, 67, 67, 67, 1448, 67, 67, 67, 67, 67, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 67, 67, 67, 1473, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 834, 97, 97, 97, 97, 1490, 97, 1493, 97, 97, 97, 97, 1498, 97, 97, 97, 1501, 97, 97, 97, 0, 97, 1638, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 916, 97, 97, 97, 97, 97, 97, 0, 1528, 97, 97, 97, 0, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1932, 0, 0, 1555, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1567, 45, 45, 158, 45, 45, 172, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 67, 212, 67, 67, 67, 67, 231, 235, 241, 245, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 472, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1651, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 45, 67, 1704, 67, 1706, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1841, 97, 0, 1844, 97, 97, 97, 97, 1716, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1385, 1748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1757, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 97, 97, 1780, 97, 97, 97, 0, 0, 1786, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1730, 0, 97, 97, 97, 97, 97, 1736, 97, 1738, 67, 97, 97, 97, 97, 97, 97, 0, 1838, 97, 97, 97, 97, 97, 0, 0, 97, 1729, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 1165, 97, 97, 97, 45, 1950, 45, 45, 45, 45, 45, 45, 45, 45, 1958, 67, 67, 67, 1962, 67, 67, 67, 67, 67, 1246, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1710, 97, 97, 97, 1999, 67, 97, 97, 97, 97, 0, 2003, 97, 97, 97, 0, 97, 97, 2008, 2009, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 2052, 67, 2053, 0, 0, 0, 0, 925, 41606, 0, 0, 930, 0, 45, 45, 45, 45, 45, 45, 1392, 45, 1394, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 1565, 45, 45, 45, 1568, 0, 97, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 28672, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 679, 45, 45, 67, 67, 266, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 346, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 362, 0, 364, 0, 367, 41098, 369, 140, 371, 45, 45, 45, 379, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 449, 45, 45, 45, 45, 45, 67, 67, 542, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 97, 0, 1794, 1795, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 97, 639, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 45, 731, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 251, 67, 67, 67, 67, 67, 798, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1073, 67, 67, 67, 860, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 873, 0, 0, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 921, 97, 0, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1250, 67, 67, 1253, 0, 0, 1312, 0, 0, 0, 1318, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 97, 1155, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1141, 97, 97, 67, 67, 1439, 67, 1441, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 97, 97, 1492, 97, 1494, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 97, 67, 67, 67, 2037, 67, 97, 0, 0, 97, 97, 97, 2043, 97, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 232, 67, 67, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1975, 0, 0, 97, 874, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1142, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 65, 86, 117, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 63, 84, 115, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 61, 82, 113, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 59, 80, 111, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 57, 78, 109, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 55, 76, 107, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 53, 74, 105, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 51, 72, 103, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 49, 70, 101, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 47, 68, 99, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 45, 67, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 213085, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 0, 0, 44, 0, 0, 32863, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 41, 41, 41, 0, 0, 1138688, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 89, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 127, 127, 127, 127, 102432, 67, 262, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 342, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 360, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 45, 45, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1292, 67, 67, 1294, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1615, 97, 97, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 66, 87, 118, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 64, 85, 116, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 62, 83, 114, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 60, 81, 112, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 58, 79, 110, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 56, 77, 108, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 54, 75, 106, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 52, 73, 104, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 50, 71, 102, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 48, 69, 100, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 46, 67, 98, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 233472, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 69724, 53264, 18, 18, 49172, 0, 57366, 262144, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 45, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 28, 139621, 359, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1389, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 45, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1449, 67, 67, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1154, 97, 0, 0, 0, 0, 925, 41606, 927, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 67, 67, 45, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 951, 45, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 45, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1488, 67, 67, 267, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 347, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 361, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 734, 45, 45, 45, 67, 67, 67, 67, 67, 742, 67, 67, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1214, 45, 45, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1361, 97, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 45, 45, 0, 0, 0, 0, 2220032, 0, 0, 1130496, 0, 0, 0, 0, 2170880, 2171020, 2170880, 2170880, 18, 0, 0, 131072, 0, 0, 0, 90112, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1485, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1390, 45, 1393, 45, 45, 45, 45, 1398, 45, 45, 45, 2170880, 2171167, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2721252, 2744320, 2170880, 2170880, 2170880, 2834432, 2840040, 2170880, 2908160, 2170880, 2170880, 2936832, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3014656, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 0, 2220032, 0, 0, 0, 1142784, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3215360, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 543, 0, 545, 0, 0, 2183168, 0, 0, 831, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 2170880, 2170880, 3092480, 2170880, 2170880, 3125248, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 0, 0, 0, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 0, 0, 0, 65820, 65820, 0, 287, 97, 97, 97, 97, 97, 1783, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1791, 0, 0, 546, 70179, 0, 0, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 97, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 0, 0, 147456, 0, 0, 0, 0, 925, 41606, 0, 928, 0, 0, 45, 45, 45, 45, 45, 45, 998, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 1564, 45, 45, 45, 45, 0, 2158592, 2158592, 0, 0, 0, 0, 2232320, 2232320, 2232320, 0, 2240512, 2240512, 2240512, 2240512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640\n];\n\nJSONiqTokenizer.EXPECTED =\n[ 291, 300, 304, 341, 315, 309, 305, 295, 319, 323, 327, 329, 296, 333, 337, 339, 342, 346, 350, 294, 356, 360, 312, 367, 352, 371, 363, 375, 379, 383, 387, 391, 395, 726, 399, 405, 518, 684, 405, 405, 405, 405, 808, 405, 405, 405, 512, 405, 405, 405, 431, 405, 405, 406, 405, 405, 404, 405, 405, 405, 405, 405, 405, 405, 908, 631, 410, 415, 405, 414, 419, 608, 405, 429, 602, 405, 435, 443, 405, 441, 641, 478, 405, 447, 451, 450, 456, 643, 461, 460, 762, 679, 465, 469, 741, 473, 477, 482, 486, 492, 932, 931, 523, 498, 504, 720, 405, 510, 596, 405, 516, 941, 580, 522, 929, 527, 590, 589, 897, 939, 534, 538, 547, 551, 555, 559, 563, 567, 571, 969, 575, 708, 690, 689, 579, 584, 634, 405, 594, 731, 405, 600, 882, 405, 606, 895, 786, 452, 612, 405, 615, 620, 876, 624, 628, 638, 647, 651, 655, 659, 663, 667, 676, 683, 688, 695, 694, 791, 405, 699, 437, 405, 706, 714, 405, 712, 825, 870, 405, 718, 724, 769, 768, 823, 730, 735, 745, 751, 422, 755, 759, 425, 766, 902, 810, 587, 775, 888, 887, 405, 773, 992, 405, 779, 962, 405, 785, 781, 986, 790, 795, 797, 506, 500, 499, 801, 805, 814, 820, 829, 833, 837, 841, 845, 849, 853, 857, 861, 616, 865, 869, 868, 488, 405, 874, 816, 405, 880, 738, 405, 886, 892, 543, 405, 901, 906, 913, 912, 918, 494, 541, 922, 926, 936, 945, 949, 953, 957, 530, 966, 973, 960, 702, 701, 405, 979, 981, 405, 985, 747, 405, 990, 998, 914, 405, 996, 1004, 672, 975, 974, 1014, 1002, 1008, 670, 1012, 405, 405, 405, 405, 405, 401, 1018, 1022, 1026, 1106, 1071, 1111, 1111, 1111, 1082, 1145, 1030, 1101, 1034, 1038, 1106, 1106, 1106, 1106, 1046, 1206, 1052, 1106, 1072, 1111, 1111, 1042, 1134, 1065, 1111, 1112, 1056, 1160, 1207, 1062, 1204, 1208, 1069, 1106, 1106, 1106, 1076, 1111, 1207, 1161, 1122, 1205, 1064, 1094, 1106, 1106, 1107, 1111, 1111, 1111, 1078, 1086, 1207, 1092, 1098, 1046, 1058, 1106, 1106, 1110, 1111, 1111, 1116, 1120, 1161, 1126, 1202, 1104, 1106, 1145, 1146, 1129, 1138, 1088, 1151, 1048, 1157, 1153, 1132, 1141, 1165, 1107, 1111, 1172, 1179, 1109, 1183, 1175, 1143, 1147, 1187, 1108, 1191, 1195, 1144, 1199, 1168, 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1557, 1247, 1241, 1241, 1038, 1434, 1241, 1241, 1241, 1241, 1254, 1275, 1617, 1241, 1280, 1287, 1241, 1241, 1241, 1287, 1241, 2114, 1291, 1241, 1243, 1241, 2049, 1824, 2094, 2095, 1520, 1309, 1241, 1241, 1302, 1241, 1321, 1311, 1241, 1241, 1313, 1778, 1325, 1336, 1241, 1241, 1325, 1330, 1353, 1241, 1241, 1695, 1354, 1241, 1241, 1241, 1294, 1686, 1331, 1241, 1696, 1368, 1241, 1338, 1370, 1241, 1392, 1399, 1364, 2017, 1406, 2016, 1405, 1716, 1406, 1407, 1422, 1417, 1421, 1241, 1241, 1241, 1349, 1426, 1241, 1774, 1756, 1241, 1773, 1241, 1241, 1345, 1964, 1812, 1432, 1241, 1241, 1345, 1993, 1459, 1241, 1241, 1241, 1395, 1848, 1767, 1465, 1241, 1241, 1394, 1847, 1242, 1477, 1241, 1241, 1428, 1241, 1445, 1492, 1241, 1241, 1438, 1241, 1499, 1241, 1241, 1241, 1455, 1241, 1818, 1448, 1241, 1250, 1241, 2026, 1623, 1449, 1241, 1612, 1616, 1241, 1614, 1241, 1257, 1241, 1241, 1985, 1292, 1586, 1512, 1241, 1517, 2050, 1526, 1674, 1519, 1524, 1647, 2051, 1532, 1537, 1551, 1544, 1550, 1555, 1561, 1571, 1578, 1584, 1590, 1591, 1653, 1595, 1602, 1606, 1610, 1634, 1628, 1640, 1633, 1645, 1241, 1241, 1241, 1469, 1241, 1970, 1651, 1241, 1270, 1241, 1241, 1819, 1449, 1241, 1293, 1664, 1241, 1241, 1481, 1485, 1574, 1672, 1241, 1241, 1513, 1317, 1487, 1684, 1241, 1241, 1533, 1299, 1694, 1241, 1241, 1295, 1241, 1241, 1241, 1546, 1700, 1241, 1241, 1707, 1241, 1713, 1241, 1849, 1715, 1241, 1720, 1241, 1276, 1267, 1241, 1241, 2107, 1657, 1864, 1241, 1881, 1241, 1326, 1292, 1241, 1685, 1358, 1724, 1338, 1241, 1363, 1362, 1342, 1340, 1361, 1339, 1833, 1372, 1360, 1833, 1833, 1342, 1343, 1835, 1341, 1731, 1738, 1344, 1241, 1745, 1241, 1379, 1241, 1241, 2092, 1241, 1388, 1761, 1754, 1241, 1386, 1241, 1400, 1760, 1241, 1241, 1241, 1598, 1734, 1241, 1241, 1241, 1635, 1645, 1241, 1780, 1766, 1241, 1241, 1332, 1771, 1241, 1241, 1629, 2079, 1241, 1242, 1784, 1241, 1241, 1680, 1639, 2063, 1790, 1241, 1241, 1741, 1241, 1241, 1800, 1241, 1241, 1762, 1473, 1241, 1806, 1241, 1241, 1786, 1240, 1709, 1241, 1241, 1241, 1668, 1811, 1241, 1940, 1241, 1401, 1974, 1241, 1408, 1413, 1382, 1241, 1816, 1241, 1241, 1802, 2086, 1811, 1241, 1817, 1945, 1823, 2095, 2095, 2047, 2094, 2046, 2080, 1241, 1409, 1312, 1376, 2096, 2048, 1241, 1241, 1807, 1241, 1241, 1241, 2035, 1241, 1241, 1828, 1241, 2057, 2061, 1241, 1241, 1843, 1241, 2059, 1241, 1241, 1241, 1690, 1847, 1241, 1241, 1241, 1703, 2102, 1848, 1241, 1241, 1853, 1292, 1848, 1241, 2016, 1857, 1241, 2002, 1868, 1241, 1436, 1241, 1241, 1271, 1305, 1241, 1874, 1241, 1241, 1884, 2037, 1892, 1241, 1890, 1241, 1461, 1241, 1241, 1795, 1241, 1241, 1891, 1241, 1878, 1241, 1888, 1241, 1888, 1905, 1896, 2087, 1912, 1903, 1241, 1911, 1906, 1916, 1905, 2027, 1863, 1925, 2088, 1859, 1861, 1922, 1927, 1931, 1935, 1494, 1241, 1241, 1918, 1907, 1939, 1917, 1944, 1949, 1241, 1241, 1451, 1955, 1241, 1241, 1241, 1796, 1727, 2061, 1241, 1241, 1899, 1241, 1660, 1968, 1241, 1241, 1951, 1678, 1978, 1241, 1241, 1241, 1839, 1241, 1241, 1984, 1982, 1241, 1488, 1241, 1241, 1624, 1450, 1989, 1241, 1241, 1241, 1870, 1995, 1292, 1241, 1241, 1958, 1261, 1241, 1996, 1241, 1241, 1241, 2039, 2008, 1241, 1241, 1750, 2000, 1241, 1256, 2001, 1960, 1241, 1564, 1241, 1504, 1241, 1241, 1442, 1241, 1241, 1564, 1528, 1263, 1241, 1508, 1241, 1241, 1468, 1498, 2006, 1540, 2015, 1539, 2014, 1748, 2013, 1539, 1831, 2014, 2012, 1500, 1567, 2022, 2021, 1241, 1580, 1241, 1241, 2033, 2037, 1791, 2045, 2031, 1241, 1621, 1241, 1641, 2044, 1241, 1241, 1241, 2093, 1241, 1241, 2055, 1241, 1241, 2067, 1241, 1283, 1241, 1241, 1241, 2101, 2071, 1241, 1241, 1241, 2073, 1848, 2040, 1241, 1241, 1241, 2077, 1241, 1241, 2106, 1241, 1241, 2084, 1241, 2111, 1241, 1241, 1381, 1380, 1241, 1241, 1241, 2100, 1241, 2129, 2118, 2122, 2126, 2197, 2133, 3010, 2825, 2145, 2698, 2156, 2226, 2160, 2161, 2165, 2174, 2293, 2194, 2630, 2201, 2203, 2152, 3019, 2226, 2263, 2209, 2213, 2218, 2269, 2292, 2269, 2269, 2184, 2226, 2238, 2148, 2151, 3017, 2245, 2214, 2269, 2269, 2185, 2226, 2292, 2269, 2291, 2269, 2269, 2269, 2292, 2205, 3019, 2226, 2226, 2160, 2160, 2160, 2261, 2160, 2160, 2160, 2262, 2276, 2160, 2160, 2277, 2216, 2283, 2216, 2269, 2269, 2268, 2269, 2267, 2269, 2269, 2269, 2271, 2568, 2292, 2269, 2293, 2269, 2182, 2190, 2269, 2186, 2226, 2226, 2226, 2226, 2227, 2160, 2160, 2160, 2160, 2263, 2160, 2275, 2277, 2282, 2215, 2217, 2269, 2269, 2291, 2269, 2269, 2293, 2291, 2269, 2220, 2269, 2295, 2294, 2269, 2269, 2305, 2233, 2262, 2278, 2218, 2269, 2234, 2226, 2226, 2228, 2160, 2160, 2160, 2289, 2220, 2294, 2294, 2269, 2269, 2304, 2269, 2160, 2160, 2287, 2269, 2269, 2305, 2269, 2269, 2312, 2269, 2269, 2225, 2226, 2160, 2287, 2289, 2219, 2304, 2295, 2314, 2234, 2226, 2314, 2269, 2226, 2226, 2160, 2288, 2219, 2222, 2304, 2296, 2269, 2224, 2160, 2160, 2269, 2302, 2294, 2314, 2224, 2226, 2288, 2220, 2294, 2269, 2290, 2269, 2269, 2293, 2269, 2269, 2269, 2269, 2270, 2221, 2313, 2225, 2227, 2160, 2300, 2269, 2225, 2261, 2309, 2234, 2229, 2223, 2318, 2318, 2318, 2328, 2336, 2340, 2344, 2350, 2637, 2712, 2358, 2362, 2372, 2135, 2378, 2398, 2135, 2135, 2135, 2135, 2136, 2417, 2241, 2135, 2378, 2135, 2135, 2980, 2984, 2135, 3006, 2135, 2135, 2135, 2945, 2931, 2425, 2400, 2135, 2135, 2135, 2954, 2135, 2481, 2433, 2135, 2135, 2988, 2824, 2135, 2135, 2482, 2434, 2135, 2135, 2440, 2445, 2452, 2135, 2135, 2998, 3002, 2961, 2441, 2446, 2453, 2463, 2974, 2135, 2135, 2135, 2140, 2642, 2709, 2459, 2470, 2465, 2135, 2135, 3005, 2135, 2135, 2987, 2823, 2458, 2469, 2464, 2975, 2135, 2135, 2135, 2353, 2488, 2447, 2324, 2974, 2135, 2409, 2459, 2448, 2135, 2961, 2487, 2446, 2476, 2323, 2973, 2135, 2135, 2135, 2354, 2476, 2974, 2135, 2135, 2135, 2957, 2135, 2135, 2960, 2135, 2135, 2135, 2363, 2409, 2459, 2474, 2465, 2487, 2571, 2973, 2135, 2135, 2168, 2973, 2135, 2135, 2135, 2959, 2135, 2135, 2135, 2506, 2135, 2957, 2488, 2170, 2135, 2135, 2135, 2960, 2135, 2818, 2493, 2135, 2135, 3033, 2135, 2135, 2135, 2934, 2819, 2494, 2135, 2135, 2135, 2976, 2780, 2499, 2135, 2135, 2135, 3000, 2968, 2135, 2935, 2135, 2135, 2135, 2364, 2507, 2135, 2135, 2934, 2135, 2135, 2780, 2492, 2507, 2135, 2135, 2506, 2780, 2135, 2135, 2782, 2780, 2135, 2782, 2135, 2783, 2374, 2514, 2135, 2135, 2135, 3007, 2530, 2974, 2135, 2135, 2135, 3008, 2135, 2135, 2134, 2135, 2526, 2531, 2975, 2135, 2135, 3042, 2581, 2575, 2956, 2135, 2135, 2135, 2394, 2135, 2508, 2535, 2840, 2844, 2495, 2135, 2135, 2136, 2684, 2537, 2842, 2846, 2135, 2136, 2561, 2581, 2551, 2536, 2841, 2845, 2975, 3043, 2582, 2843, 2555, 2135, 3040, 3044, 2538, 2844, 2975, 2135, 2135, 2253, 2644, 2672, 2542, 2554, 2135, 2135, 2346, 2873, 2551, 2555, 2135, 2135, 2135, 2381, 2559, 2565, 2538, 2553, 2135, 2560, 2914, 2576, 2590, 2135, 2135, 2135, 2408, 2136, 2596, 2624, 2135, 2135, 2135, 2409, 2135, 2618, 2597, 3008, 2135, 2135, 2380, 2956, 2601, 2135, 2135, 2135, 2410, 2620, 2624, 2135, 2136, 2383, 2135, 2135, 2783, 2623, 2135, 2135, 2393, 2888, 2136, 2621, 3008, 2135, 2618, 2618, 2622, 2135, 2135, 2405, 2414, 2619, 2384, 2624, 2135, 2136, 2950, 2135, 2138, 2135, 2139, 2135, 2604, 2623, 2135, 2140, 2878, 2665, 2957, 2622, 2135, 2135, 2428, 2762, 2606, 2612, 2135, 2135, 2501, 2586, 2604, 3038, 2135, 2604, 3036, 2387, 2958, 2386, 2135, 2141, 2135, 2421, 2387, 2385, 2135, 2385, 2384, 2384, 2135, 2386, 2628, 2384, 2135, 2135, 2501, 2596, 2591, 2135, 2135, 2135, 2400, 2135, 2634, 2135, 2135, 2559, 2580, 2575, 2648, 2135, 2135, 2135, 2429, 2649, 2135, 2135, 2135, 2435, 2654, 2658, 2135, 2135, 2135, 2436, 2649, 2178, 2659, 2135, 2135, 2595, 2601, 2669, 2677, 2135, 2135, 2616, 2957, 2879, 2665, 2691, 2135, 2363, 2367, 2900, 2878, 2664, 2690, 2975, 2877, 2643, 2670, 2974, 2671, 2975, 2135, 2135, 2619, 2608, 2669, 2673, 2135, 2135, 2653, 2177, 2672, 2135, 2135, 2135, 2486, 2168, 2251, 2255, 2695, 2974, 2709, 2135, 2135, 2135, 2487, 2169, 2399, 2716, 2975, 2135, 2363, 2770, 2776, 2640, 2717, 2135, 2135, 2729, 2135, 2135, 2641, 2718, 2135, 2135, 2135, 2505, 2135, 2640, 2257, 2974, 2135, 2727, 2975, 2135, 2365, 2332, 2895, 2957, 2135, 2959, 2135, 2365, 2749, 2754, 2959, 2958, 2958, 2135, 2380, 2793, 2799, 2135, 2735, 2738, 2135, 2381, 2135, 2135, 2940, 2974, 2135, 2744, 2135, 2135, 2739, 2519, 2976, 2745, 2135, 2135, 2135, 2509, 2755, 2135, 2135, 2135, 2510, 2772, 2778, 2135, 2135, 2740, 2520, 2135, 2771, 2777, 2135, 2135, 2759, 2750, 2792, 2798, 2135, 2135, 2781, 2392, 2779, 2135, 2135, 2135, 2521, 2135, 2679, 2248, 2135, 2135, 2681, 2480, 2135, 2135, 2786, 3000, 2135, 2679, 2683, 2135, 2135, 2416, 2135, 2135, 2135, 2525, 2135, 2730, 2135, 2135, 2135, 2560, 2581, 2135, 2805, 2135, 2135, 2804, 2962, 2832, 2974, 2135, 2382, 2135, 2135, 2958, 2135, 2135, 2960, 2135, 2829, 2833, 2975, 2961, 2965, 2969, 2973, 2968, 2972, 2135, 2135, 2135, 2641, 2135, 2515, 2966, 2970, 2851, 2478, 2135, 2135, 2808, 2135, 2809, 2135, 2135, 2135, 2722, 2852, 2479, 2135, 2135, 2815, 2135, 2135, 2766, 2853, 2480, 2135, 2857, 2479, 2135, 2388, 2723, 2135, 2364, 2331, 2894, 2858, 2480, 2135, 2135, 2850, 2478, 2135, 2135, 2135, 2806, 2864, 2135, 2399, 2256, 2974, 2865, 2135, 2135, 2862, 2135, 2135, 2135, 2685, 2807, 2865, 2135, 2135, 2807, 2863, 2135, 2135, 2135, 2686, 2884, 2807, 2135, 2809, 2807, 2135, 2135, 2807, 2806, 2705, 2810, 2808, 2700, 2869, 2702, 2702, 2702, 2704, 2883, 2135, 2135, 2135, 2730, 2884, 2135, 2135, 2135, 2731, 2321, 2546, 2135, 2135, 2876, 2255, 2889, 2322, 2547, 2135, 2401, 2135, 2135, 2135, 2949, 2367, 2893, 2544, 2973, 2906, 2973, 2135, 2135, 2877, 2663, 2368, 2901, 2907, 2974, 2366, 2899, 2905, 2972, 2920, 2974, 2135, 2135, 2911, 2900, 2920, 2363, 2913, 2918, 2465, 2941, 2975, 2135, 2135, 2924, 2928, 2974, 2945, 2931, 2135, 2135, 2135, 2765, 2136, 2955, 2135, 2135, 2939, 2931, 2380, 2135, 2135, 2380, 2135, 2135, 2135, 2780, 2507, 2137, 2135, 2137, 2135, 2139, 2135, 2806, 2810, 2135, 2135, 2135, 2992, 2135, 2135, 2962, 2966, 2970, 2974, 2135, 2135, 2787, 3014, 2135, 2521, 2993, 2135, 2135, 2135, 2803, 2135, 2135, 2135, 2618, 2607, 2997, 3001, 2135, 2135, 2963, 2967, 2971, 2975, 2135, 2135, 2791, 2797, 2135, 3009, 2999, 3003, 2787, 3001, 2135, 2135, 2964, 2968, 2785, 2999, 3003, 2135, 2135, 2135, 2804, 2785, 2999, 3004, 2135, 2135, 2135, 2807, 2135, 2135, 3023, 2135, 2135, 2135, 2811, 2135, 2135, 3027, 2135, 2135, 2135, 2837, 2968, 3028, 2135, 2135, 2135, 2875, 2135, 2784, 3029, 2135, 2408, 2457, 2446, 0, 14, 0, -2120220672, 1610612736, -2074083328, -2002780160, -2111830528, 1073872896, 1342177280, 1075807216, 4096, 16384, 2048, 8192, 0, 8192, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, -2145386496, 8388608, 1073741824, 0, 0x80000000, 0x80000000, 2097152, 2097152, 2097152, 536870912, 0, 0, 134217728, 33554432, 1536, 268435456, 268435456, 268435456, 268435456, 128, 256, 32, 0, 65536, 131072, 524288, 16777216, 268435456, 0x80000000, 1572864, 1835008, 640, 32768, 65536, 262144, 1048576, 2097152, 196608, 196800, 196608, 196608, 0, 131072, 131072, 131072, 196608, 196624, 196608, 196624, 196608, 196608, 128, 4096, 16384, 16384, 2048, 0, 4, 0, 0, 0x80000000, 2097152, 0, 1024, 32, 32, 0, 65536, 1572864, 1048576, 32768, 32768, 32768, 32768, 196608, 196608, 196608, 64, 64, 196608, 196608, 131072, 131072, 131072, 131072, 268435456, 268435456, 64, 196736, 196608, 196608, 196608, 131072, 196608, 196608, 16384, 4, 4, 4, 2, 32, 32, 65536, 1048576, 12582912, 1073741824, 0, 0, 2, 8, 16, 96, 2048, 32768, 0, 0, 131072, 268435456, 268435456, 268435456, 256, 256, 196608, 196672, 196608, 196608, 196608, 196608, 4, 0, 256, 256, 256, 256, 32, 32, 32768, 32, 32, 32, 32, 32768, 268435456, 268435456, 268435456, 196608, 196608, 196608, 196624, 196608, 196608, 196608, 16, 16, 16, 268435456, 196608, 64, 64, 64, 196608, 196608, 196608, 196672, 268435456, 64, 64, 196608, 196608, 16, 196608, 196608, 196608, 268435456, 64, 196608, 131072, 262144, 4194304, 25165824, 33554432, 134217728, 268435456, 268435456, 196608, 262152, 8, 256, 512, 3072, 16384, 200, -1073741816, 8392713, 40, 8392718, 520, 807404072, 40, 520, 100663304, 0, 0, -540651761, -540651761, 257589048, 0, 262144, 0, 0, 3, 8, 256, 0, 4, 6, 4100, 8388612, 0, 0, 0, 3, 4, 8, 256, 512, 1024, 0, 2097152, 0, 0, -537854471, -537854471, 0, 100663296, 0, 0, 1, 2, 0, 0, 0, 16384, 0, 0, 0, 96, 14336, 0, 0, 0, 7, 8, 234881024, 0, 0, 0, 8, 0, 0, 0, 0, 262144, 0, 0, 16, 64, 384, 512, 0, 1, 1, 0, 12582912, 0, 0, 0, 0, 33554432, 67108864, -606084144, -606084144, -606084138, 0, 0, 28, 32, 768, 1966080, -608174080, 0, 0, 0, 14, 35056, 16, 64, 896, 24576, 98304, 98304, 131072, 262144, 524288, 1048576, 4194304, 25165824, 1048576, 62914560, 134217728, -805306368, 0, 384, 512, 16384, 65536, 131072, 262144, 29360128, 33554432, 134217728, 268435456, 1073741824, 0x80000000, 262144, 524288, 1048576, 29360128, 33554432, 524288, 1048576, 16777216, 33554432, 134217728, 268435456, 1073741824, 0, 0, 0, 123856, 1966080, 0, 64, 384, 16384, 65536, 131072, 16384, 65536, 524288, 268435456, 0x80000000, 0, 0, 524288, 0x80000000, 0, 0, 1, 16, 0, 256, 524288, 0, 0, 0, 25, 96, 128, -537854471, 0, 0, 0, 32, 7404800, -545259520, 0, 0, 0, 60, 0, 249, 64768, 1048576, 6291456, 6291456, 25165824, 100663296, 402653184, 1073741824, 96, 128, 1280, 2048, 4096, 57344, 6291456, 57344, 6291456, 8388608, 16777216, 33554432, 201326592, 1342177280, 0x80000000, 0, 57344, 6291456, 8388608, 100663296, 134217728, 0x80000000, 0, 0, 0, 1, 8, 16, 64, 128, 64, 128, 256, 1024, 131072, 131072, 131072, 262144, 524288, 16777216, 57344, 6291456, 8388608, 67108864, 134217728, 64, 256, 1024, 2048, 4096, 57344, 64, 256, 0, 24576, 32768, 6291456, 67108864, 134217728, 0, 1, 64, 256, 24576, 32768, 4194304, 32768, 4194304, 67108864, 0, 0, 64, 256, 0, 0, 24576, 32768, 0, 16384, 4194304, 67108864, 64, 16384, 0, 0, 1, 64, 256, 16384, 4194304, 67108864, 0, 0, 0, 16384, 0, 16384, 16384, 0, -470447874, -470447874, -470447874, 0, 0, 128, 0, 0, 8, 96, 2048, 32768, 262144, 8388608, 35056, 1376256, -471859200, 0, 0, 14, 16, 224, 2048, 32768, 2097152, 4194304, 8388608, -486539264, 0, 96, 128, 2048, 32768, 262144, 2097152, 262144, 2097152, 8388608, 33554432, 536870912, 1073741824, 0x80000000, 0, 1610612736, 0x80000000, 0, 0, 1, 524288, 1048576, 12582912, 0, 0, 0, 151311, 264503296, 2097152, 8388608, 33554432, 1610612736, 0x80000000, 262144, 8388608, 33554432, 536870912, 67108864, 4194304, 0, 4194304, 0, 4194304, 4194304, 0, 0, 524288, 8388608, 536870912, 1073741824, 0x80000000, 1, 4097, 8388609, 96, 2048, 32768, 1073741824, 0x80000000, 0, 96, 2048, 0x80000000, 0, 0, 96, 2048, 0, 0, 1, 12582912, 0, 0, 0, 0, 1641895695, 1641895695, 0, 0, 0, 249, 7404800, 15, 87808, 1835008, 1639972864, 0, 768, 5120, 16384, 65536, 1835008, 1835008, 12582912, 16777216, 1610612736, 0, 3, 4, 8, 768, 4096, 65536, 0, 0, 256, 512, 786432, 8, 256, 512, 4096, 16384, 1835008, 16384, 1835008, 12582912, 1610612736, 0, 0, 0, 256, 0, 0, 0, 4, 8, 16, 32, 1, 2, 8, 256, 16384, 524288, 16384, 524288, 1048576, 12582912, 1610612736, 0, 0, 0, 8388608, 0, 0, 0, 524288, 4194304, 0, 0, 0, 8388608, -548662288, -548662288, -548662288, 0, 0, 256, 16384, 65536, 520093696, -1073741824, 0, 0, 0, 16777216, 0, 16, 32, 960, 4096, 4980736, 520093696, 1073741824, 0, 32, 896, 4096, 57344, 1048576, 6291456, 8388608, 16777216, 100663296, 134217728, 268435456, 0x80000000, 0, 512, 786432, 4194304, 33554432, 134217728, 268435456, 0, 786432, 4194304, 134217728, 268435456, 0, 524288, 4194304, 268435456, 0, 0, 0, 0, 0, 4194304, 4194304, -540651761, 0, 0, 0, 2, 4, 8, 16, 96, 128, 264503296, -805306368, 0, 0, 0, 8, 256, 512, 19456, 131072, 3072, 16384, 131072, 262144, 8388608, 16777216, 512, 1024, 2048, 16384, 131072, 262144, 131072, 262144, 8388608, 33554432, 201326592, 268435456, 0, 3, 4, 256, 1024, 2048, 57344, 16384, 131072, 8388608, 33554432, 134217728, 268435456, 0, 3, 256, 1024, 16384, 131072, 33554432, 134217728, 1073741824, 0x80000000, 0, 0, 256, 524288, 0x80000000, 0, 3, 256, 33554432, 134217728, 1073741824, 0, 1, 2, 33554432, 1, 2, 134217728, 1073741824, 0, 1, 2, 134217728, 0, 0, 0, 64, 0, 0, 0, 16, 32, 896, 4096, 786432, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 0, 0, 0, 15, 0, 4980736, 4980736, 4980736, 70460, 70460, 3478332, 0, 0, 1008, 4984832, 520093696, 60, 4864, 65536, 0, 0, 0, 12, 16, 32, 256, 512, 4096, 65536, 0, 0, 0, 67108864, 0, 0, 0, 12, 0, 256, 512, 65536, 0, 0, 1024, 512, 131072, 131072, 4, 16, 32, 65536, 0, 4, 16, 32, 0, 0, 0, 4, 16, 0, 0, 16384, 67108864, 0, 0, 1, 24, 96, 128, 256, 1024\n];\n\nJSONiqTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"JSONChar\",\n  \"JSONCharRef\",\n  \"JSONPredefinedCharRef\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$$'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var XQueryTokenizer = exports.XQueryTokenizer = function XQueryTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 56:                        // '<?'\n      shift(56);                    // '<?'\n      break;\n    case 40:                        // '(#'\n      shift(40);                    // '(#'\n      break;\n    case 42:                        // '(:~'\n      shift(42);                    // '(:~'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    case 274:                       // '}'\n      shift(274);                   // '}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 39:                        // '('\n      shift(39);                    // '('\n      break;\n    case 43:                        // ')'\n      shift(43);                    // ')'\n      break;\n    case 49:                        // '/'\n      shift(49);                    // '/'\n      break;\n    case 62:                        // '['\n      shift(62);                    // '['\n      break;\n    case 63:                        // ']'\n      shift(63);                    // ']'\n      break;\n    case 46:                        // ','\n      shift(46);                    // ','\n      break;\n    case 48:                        // '.'\n      shift(48);                    // '.'\n      break;\n    case 53:                        // ';'\n      shift(53);                    // ';'\n      break;\n    case 51:                        // ':'\n      shift(51);                    // ':'\n      break;\n    case 34:                        // '!'\n      shift(34);                    // '!'\n      break;\n    case 273:                       // '|'\n      shift(273);                   // '|'\n      break;\n    case 2:                         // Annotation\n      shift(2);                     // Annotation\n      break;\n    case 1:                         // ModuleDecl\n      shift(1);                     // ModuleDecl\n      break;\n    case 3:                         // OptionDecl\n      shift(3);                     // OptionDecl\n      break;\n    case 12:                        // AttrTest\n      shift(12);                    // AttrTest\n      break;\n    case 13:                        // Wildcard\n      shift(13);                    // Wildcard\n      break;\n    case 15:                        // IntegerLiteral\n      shift(15);                    // IntegerLiteral\n      break;\n    case 16:                        // DecimalLiteral\n      shift(16);                    // DecimalLiteral\n      break;\n    case 17:                        // DoubleLiteral\n      shift(17);                    // DoubleLiteral\n      break;\n    case 5:                         // Variable\n      shift(5);                     // Variable\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 4:                         // Operator\n      shift(4);                     // Operator\n      break;\n    case 33:                        // EOF\n      shift(33);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 58:                        // '>'\n      shift(58);                    // '>'\n      break;\n    case 50:                        // '/>'\n      shift(50);                    // '/>'\n      break;\n    case 27:                        // QName\n      shift(27);                    // QName\n      break;\n    case 57:                        // '='\n      shift(57);                    // '='\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 23:                        // ElementContentChar\n      shift(23);                    // ElementContentChar\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 7:                         // EndTag\n      shift(7);                     // EndTag\n      break;\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 25:                        // AposAttrContentChar\n      shift(25);                    // AposAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 24:                        // QuotAttrContentChar\n      shift(24);                    // QuotAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 11:                        // CDataSectionContents\n      shift(11);                    // CDataSectionContents\n      break;\n    case 64:                        // ']]>'\n      shift(64);                    // ']]>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 9:                         // DirCommentContents\n      shift(9);                     // DirCommentContents\n      break;\n    case 47:                        // '-->'\n      shift(47);                    // '-->'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 10:                        // DirPIContents\n      shift(10);                    // DirPIContents\n      break;\n    case 59:                        // '?'\n      shift(59);                    // '?'\n      break;\n    case 60:                        // '?>'\n      shift(60);                    // '?>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 8:                         // PragmaContents\n      shift(8);                     // PragmaContents\n      break;\n    case 36:                        // '#'\n      shift(36);                    // '#'\n      break;\n    case 37:                        // '#)'\n      shift(37);                    // '#)'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 30:                        // CommentContents\n      shift(30);                    // CommentContents\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(5);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 31:                        // DocTag\n      shift(31);                    // DocTag\n      break;\n    case 32:                        // DocCommentContents\n      shift(32);                    // DocCommentContents\n      break;\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(6);                  // PredefinedEntityRef | EscapeQuot | QuotChar | CharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 21:                        // QuotChar\n      shift(21);                    // QuotChar\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 22:                        // AposChar\n      shift(22);                    // AposChar\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 14:                        // EQName^Token\n      shift(14);                    // EQName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 26:                        // NCName^Token\n      shift(26);                    // NCName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 28)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryTokenizer.MAP1[(c0 & 15) + XQueryTokenizer.MAP1[(c1 & 31) + XQueryTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryTokenizer.TRANSITION[(i0 & 15) + XQueryTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 276; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2062 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryTokenizer.EXPECTED[(i0 & 3) + XQueryTokenizer.EXPECTED[(i1 & 3) + XQueryTokenizer.EXPECTED[(i2 & 3) + XQueryTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryTokenizer.MAP0 =\n[ 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35\n];\n\nXQueryTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n];\n\nXQueryTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 35, 31, 35, 31, 31, 35\n];\n\nXQueryTokenizer.INITIAL =\n[ 1, 2, 36867, 45060, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nXQueryTokenizer.TRANSITION =\n[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008, 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233, 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008, 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987, 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370, 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888, 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855, 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888, 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518, 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694, 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701, 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401, 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505, 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654, 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964, 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279, 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711, 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831, 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935, 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222, 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946, 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008, 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233, 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067, 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386, 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401, 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193, 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552, 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851, 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224, 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659, 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401, 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211, 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185, 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401, 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358, 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418, 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540, 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211, 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659, 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419, 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982, 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462, 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164, 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211, 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211, 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607, 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086, 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057, 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613, 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344, 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211, 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799, 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930, 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085, 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729, 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189, 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568, 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121, 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619, 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211, 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086, 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836, 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211, 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986, 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500, 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356, 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989, 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211, 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890, 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211, 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601, 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260, 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261, 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488, 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248, 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490, 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274, 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782, 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888, 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261, 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888, 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888, 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628, 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401, 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895, 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738, 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678, 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888, 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217, 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473, 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783, 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837, 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888, 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523, 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938, 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574, 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016, 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835, 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181, 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888, 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334, 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437, 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497, 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401, 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401, 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851, 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000, 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888, 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401, 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058, 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144, 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856, 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889, 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367, 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572, 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764, 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942, 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211, 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590, 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123, 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963, 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097, 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442, 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775, 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284, 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679, 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211, 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659, 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853, 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113, 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413, 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164, 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211, 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890, 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211, 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123, 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086, 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105, 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782, 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154, 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666, 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211, 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739, 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778, 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447, 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008, 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059, 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121, 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211, 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836, 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211, 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888, 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893, 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064, 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890, 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888, 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211, 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100, 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888, 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888, 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346, 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n];\n\nXQueryTokenizer.EXPECTED =\n[ 290, 300, 304, 353, 296, 309, 305, 319, 315, 324, 328, 352, 354, 334, 338, 330, 320, 345, 349, 293, 358, 362, 341, 366, 312, 370, 374, 378, 382, 386, 390, 394, 398, 737, 402, 634, 439, 604, 634, 634, 634, 634, 408, 634, 634, 634, 404, 634, 634, 634, 457, 634, 634, 963, 634, 634, 413, 634, 634, 634, 634, 634, 634, 634, 663, 418, 422, 903, 902, 426, 431, 548, 634, 437, 521, 919, 443, 615, 409, 449, 455, 624, 731, 751, 634, 461, 465, 672, 470, 469, 474, 481, 485, 477, 489, 493, 629, 542, 497, 505, 603, 602, 991, 648, 510, 804, 634, 515, 958, 526, 525, 530, 768, 634, 546, 552, 711, 710, 593, 558, 562, 618, 566, 570, 574, 578, 582, 586, 590, 608, 612, 660, 822, 821, 634, 622, 596, 444, 628, 533, 724, 633, 640, 653, 647, 652, 536, 1008, 451, 450, 445, 657, 670, 676, 685, 689, 693, 697, 701, 704, 707, 715, 719, 798, 815, 634, 723, 762, 996, 634, 728, 969, 730, 735, 908, 634, 741, 679, 889, 511, 747, 634, 750, 755, 499, 666, 499, 501, 759, 772, 776, 780, 634, 787, 784, 797, 802, 809, 808, 427, 814, 1006, 517, 634, 519, 853, 634, 813, 850, 793, 634, 819, 826, 833, 832, 837, 843, 847, 857, 861, 863, 867, 871, 875, 879, 883, 643, 887, 539, 980, 979, 634, 893, 944, 634, 900, 896, 634, 907, 933, 506, 912, 917, 828, 433, 636, 635, 554, 961, 923, 930, 927, 937, 941, 634, 634, 634, 974, 948, 952, 985, 913, 968, 967, 743, 634, 973, 839, 634, 978, 599, 634, 984, 989, 765, 444, 995, 1000, 634, 1003, 790, 955, 1012, 681, 634, 634, 634, 634, 634, 414, 1016, 1020, 1024, 1085, 1027, 1090, 1090, 1046, 1080, 1137, 1108, 1215, 1049, 1032, 1039, 1085, 1085, 1085, 1085, 1058, 1062, 1068, 1085, 1086, 1090, 1090, 1091, 1072, 1064, 1107, 1090, 1090, 1090, 1118, 1123, 1138, 1078, 1074, 1084, 1085, 1085, 1085, 1087, 1090, 1062, 1052, 1060, 1114, 1062, 1104, 1085, 1085, 1090, 1090, 1028, 1122, 1063, 1128, 1139, 1127, 1158, 1085, 1085, 1151, 1090, 1090, 1090, 1095, 1090, 1132, 1073, 1136, 1143, 1061, 1150, 1085, 1155, 1098, 1101, 1146, 1162, 1169, 1101, 1185, 1151, 1090, 1110, 1173, 1054, 1087, 1109, 1177, 1165, 1089, 1204, 1184, 1107, 1189, 1193, 1088, 1197, 1180, 1201, 1208, 1042, 1212, 1219, 1223, 1227, 1231, 1235, 1245, 1777, 1527, 1686, 1686, 1238, 1686, 1254, 1686, 1686, 1686, 1294, 1669, 1686, 1686, 1686, 1322, 1625, 1534, 1268, 1624, 1275, 1281, 1443, 1292, 1300, 1686, 1686, 1686, 1350, 1826, 1306, 1686, 1686, 1240, 2032, 1317, 1321, 1686, 1686, 1253, 1686, 1326, 1686, 1686, 1686, 1418, 1709, 1446, 1686, 1686, 1686, 1492, 1686, 1295, 1447, 1686, 1686, 1258, 1686, 1736, 1686, 1686, 1520, 1355, 1686, 1288, 1348, 1361, 1686, 1359, 1686, 1364, 1498, 1368, 1302, 1362, 1381, 1389, 1395, 1486, 1686, 1371, 1377, 1370, 1686, 1375, 1382, 1384, 1402, 1408, 1385, 1383, 1619, 1413, 1423, 1428, 1433, 1686, 1686, 1270, 1686, 1338, 1686, 1440, 1686, 1686, 1686, 1499, 1465, 1686, 1686, 1686, 1639, 1473, 1884, 1686, 1686, 1293, 1864, 1686, 1686, 1296, 1321, 1483, 1686, 1686, 1686, 1646, 1686, 1748, 1496, 1686, 1418, 1675, 1686, 1418, 1702, 1686, 1418, 1981, 1686, 1429, 1409, 1427, 1504, 1692, 1686, 1686, 1313, 1448, 1651, 1508, 1686, 1686, 1340, 1686, 1903, 1686, 1686, 1435, 1513, 1686, 1283, 1287, 1519, 1686, 1524, 1363, 1568, 1938, 1539, 1566, 1579, 1479, 1533, 1538, 1553, 1544, 1552, 1557, 1563, 1574, 1557, 1583, 1589, 1590, 1759, 1594, 1603, 1607, 1611, 1686, 1436, 1514, 1686, 1434, 1656, 1686, 1434, 1680, 1686, 1453, 1686, 1686, 1686, 1559, 1617, 1686, 1770, 1418, 1623, 1769, 1629, 1686, 1515, 1335, 1686, 1285, 1686, 1671, 1921, 1650, 1686, 1686, 1344, 1308, 1666, 1686, 1686, 1686, 1659, 1685, 1686, 1686, 1686, 1686, 1241, 1686, 1686, 1844, 1691, 1686, 1630, 1977, 1970, 1362, 1686, 1686, 1686, 1693, 1698, 1686, 1686, 1686, 1697, 1686, 1764, 1715, 1686, 1634, 1638, 1686, 1599, 1585, 1686, 1271, 1686, 1269, 1686, 1721, 1686, 1686, 1354, 1686, 1801, 1686, 1799, 1686, 1640, 1686, 1686, 1461, 1686, 1686, 1732, 1686, 1944, 1686, 1740, 1686, 1746, 1415, 1396, 1686, 1598, 1547, 1417, 1597, 1416, 1577, 1546, 1397, 1577, 1547, 1548, 1570, 1398, 1753, 1686, 1652, 1509, 1686, 1686, 1686, 1757, 1686, 1419, 1686, 1763, 1418, 1768, 1781, 1686, 1686, 1686, 1705, 1686, 2048, 1792, 1686, 1686, 1686, 1735, 1686, 1797, 1686, 1686, 1404, 1686, 1639, 1815, 1686, 1686, 1418, 2017, 1820, 1686, 1686, 1803, 1686, 1686, 1686, 1736, 1489, 1686, 1686, 1825, 1338, 1260, 1263, 1686, 1686, 1785, 1686, 1686, 1728, 1686, 1686, 1749, 1497, 1830, 1830, 1262, 1248, 1261, 1329, 1260, 1264, 1329, 1248, 1249, 1259, 1540, 1849, 1842, 1686, 1686, 1835, 1686, 1686, 1816, 1686, 1686, 1831, 1882, 1848, 1686, 1686, 1686, 1774, 2071, 1854, 1686, 1686, 1469, 1884, 1686, 1821, 1859, 1686, 1686, 1350, 1883, 1686, 1686, 1686, 1781, 1391, 1875, 1686, 1686, 1613, 1644, 1686, 1686, 1889, 1686, 1686, 1662, 1884, 1686, 1885, 1890, 1686, 1686, 1686, 1894, 1686, 1686, 1678, 1686, 1907, 1686, 1686, 1529, 1914, 1686, 1838, 1686, 1686, 1881, 1686, 1686, 1872, 1876, 1836, 1919, 1686, 1837, 1692, 1910, 1686, 1925, 1928, 1742, 1686, 1811, 1811, 1930, 1810, 1929, 1935, 1928, 1900, 1942, 1867, 1868, 1931, 1035, 1788, 1948, 1952, 1956, 1960, 1964, 1686, 1976, 1686, 1686, 1686, 2065, 1686, 1992, 2037, 1686, 1686, 1998, 2009, 1972, 2002, 1686, 1686, 1686, 2077, 1300, 2023, 1686, 1686, 1686, 1807, 2031, 1686, 1686, 1686, 1860, 1500, 2032, 1686, 1686, 1686, 2083, 1686, 2036, 1686, 1277, 1276, 2042, 1877, 1686, 1686, 2041, 1686, 1686, 2027, 2037, 2012, 1686, 2012, 1855, 1850, 1686, 2046, 1686, 1686, 2054, 1996, 1686, 1897, 1309, 2059, 2052, 1686, 2058, 1686, 1686, 2081, 1686, 1717, 1477, 1686, 1331, 1686, 1686, 1687, 1686, 1860, 1681, 1686, 1686, 1686, 1966, 1724, 1686, 1686, 1686, 1984, 2015, 1686, 1686, 1686, 1988, 1686, 2063, 1686, 1686, 1686, 2005, 1686, 1727, 1686, 1686, 1711, 1457, 2069, 1686, 1686, 1686, 2019, 2075, 1686, 1686, 1915, 1686, 1686, 1793, 1874, 1686, 1686, 1491, 1362, 1449, 1686, 1686, 1460, 2098, 2087, 2091, 2095, 2184, 2102, 2113, 2780, 2117, 2134, 2142, 2281, 2146, 2146, 2146, 2304, 2296, 2181, 2639, 2591, 2872, 2592, 2873, 2313, 2195, 2200, 2281, 2146, 2273, 2226, 2204, 2152, 2219, 2276, 2167, 2177, 2276, 2235, 2276, 2276, 2230, 2281, 2276, 2296, 2276, 2293, 2276, 2276, 2276, 2276, 2234, 2276, 2311, 2314, 2210, 2199, 2217, 2222, 2276, 2276, 2276, 2240, 2276, 2294, 2276, 2276, 2173, 2276, 2198, 2281, 2281, 2281, 2281, 2282, 2146, 2146, 2146, 2146, 2205, 2146, 2204, 2248, 2276, 2235, 2276, 2297, 2276, 2276, 2276, 2277, 2256, 2281, 2283, 2146, 2146, 2146, 2275, 2276, 2295, 2276, 2276, 2293, 2146, 2304, 2264, 2269, 2221, 2276, 2276, 2276, 2293, 2295, 2276, 2276, 2276, 2295, 2263, 2205, 2268, 2220, 2172, 2276, 2276, 2276, 2296, 2276, 2276, 2296, 2294, 2276, 2276, 2278, 2281, 2281, 2280, 2281, 2281, 2281, 2283, 2206, 2223, 2276, 2276, 2279, 2281, 2281, 2146, 2273, 2276, 2276, 2281, 2281, 2281, 2276, 2292, 2276, 2298, 2225, 2276, 2298, 2169, 2224, 2292, 2298, 2171, 2229, 2281, 2281, 2171, 2236, 2281, 2281, 2281, 2146, 2275, 2225, 2292, 2299, 2276, 2229, 2281, 2146, 2276, 2290, 2297, 2283, 2146, 2146, 2274, 2224, 2227, 2298, 2225, 2297, 2276, 2230, 2170, 2230, 2282, 2146, 2147, 2151, 2156, 2288, 2276, 2230, 2303, 2308, 2236, 2284, 2228, 2318, 2318, 2318, 2326, 2335, 2339, 2343, 2349, 2416, 2693, 2357, 2592, 2109, 2592, 2592, 2162, 2943, 2823, 2646, 2592, 2361, 2592, 2122, 2592, 2592, 2122, 2470, 2592, 2592, 2592, 2109, 2107, 2592, 2592, 2592, 2123, 2592, 2592, 2592, 2125, 2592, 2413, 2592, 2592, 2592, 2127, 2592, 2592, 2414, 2592, 2592, 2592, 2130, 2952, 2592, 2594, 2592, 2592, 2212, 2609, 2252, 2592, 2592, 2592, 2446, 2434, 2592, 2592, 2592, 2212, 2446, 2450, 2456, 2431, 2435, 2592, 2592, 2243, 2478, 2448, 2439, 2946, 2592, 2592, 2592, 2368, 2809, 2813, 2450, 2441, 2212, 2812, 2449, 2440, 2947, 2592, 2592, 2592, 2345, 2451, 2457, 2948, 2592, 2124, 2592, 2592, 2650, 2823, 2449, 2455, 2946, 2592, 2128, 2592, 2592, 2649, 2952, 2592, 2810, 2448, 2461, 2991, 2467, 2592, 2592, 2329, 2817, 2474, 2990, 2466, 2592, 2592, 2373, 2447, 2992, 2469, 2592, 2592, 2592, 2373, 2447, 2477, 2468, 2592, 2592, 2353, 2469, 2592, 2495, 2592, 2592, 2415, 2483, 2592, 2415, 2496, 2592, 2592, 2352, 2592, 2592, 2352, 2352, 2469, 2592, 2592, 2363, 2331, 2494, 2592, 2592, 2592, 2375, 2592, 2375, 2415, 2504, 2592, 2592, 2367, 2372, 2503, 2592, 2592, 2592, 2389, 2418, 2415, 2592, 2592, 2373, 2592, 2592, 2592, 2593, 2732, 2417, 2415, 2592, 2417, 2520, 2592, 2592, 2592, 2390, 2521, 2521, 2592, 2592, 2592, 2401, 2599, 2585, 2526, 2531, 2120, 2592, 2212, 2426, 2450, 2463, 2948, 2592, 2592, 2592, 2213, 2389, 2527, 2532, 2121, 2542, 2551, 2105, 2592, 2213, 2592, 2592, 2592, 2558, 2538, 2544, 2553, 2557, 2537, 2543, 2552, 2421, 2572, 2576, 2546, 2543, 2547, 2592, 2592, 2373, 2615, 2575, 2545, 2105, 2592, 2244, 2479, 2592, 2129, 2592, 2592, 2628, 2690, 2469, 2562, 2566, 2592, 2592, 2592, 2415, 2928, 2934, 2401, 2570, 2574, 2564, 2572, 2585, 2590, 2592, 2592, 2585, 2965, 2592, 2592, 2592, 2445, 2251, 2592, 2592, 2592, 2474, 2592, 2609, 2892, 2592, 2362, 2592, 2592, 2138, 2851, 2159, 2592, 2592, 2592, 2509, 2888, 2892, 2592, 2592, 2592, 2490, 2418, 2891, 2592, 2592, 2376, 2592, 2592, 2374, 2592, 2889, 2388, 2592, 2373, 2373, 2890, 2592, 2592, 2387, 2592, 2887, 2505, 2892, 2592, 2373, 2610, 2388, 2592, 2592, 2376, 2373, 2592, 2887, 2891, 2592, 2374, 2592, 2592, 2608, 2159, 2614, 2620, 2592, 2592, 2394, 2594, 2887, 2399, 2592, 2887, 2397, 2508, 2374, 2507, 2592, 2375, 2592, 2592, 2592, 2595, 2508, 2506, 2592, 2506, 2505, 2505, 2592, 2507, 2637, 2505, 2592, 2592, 2401, 2661, 2592, 2643, 2592, 2592, 2417, 2592, 2655, 2592, 2592, 2592, 2510, 2414, 2656, 2592, 2592, 2592, 2516, 2592, 2593, 2660, 2665, 2880, 2592, 2592, 2592, 2522, 2767, 2666, 2881, 2592, 2592, 2420, 2571, 2696, 2592, 2592, 2592, 2580, 2572, 2686, 2632, 2698, 2592, 2383, 2514, 2592, 2163, 2932, 2465, 2685, 2631, 2697, 2592, 2388, 2592, 2592, 2212, 2604, 2671, 2632, 2678, 2592, 2401, 2405, 2409, 2592, 2592, 2592, 2679, 2592, 2592, 2592, 2592, 2108, 2677, 2591, 2592, 2592, 2592, 2419, 2592, 2683, 2187, 2191, 2469, 2671, 2189, 2467, 2592, 2401, 2629, 2633, 2702, 2468, 2592, 2592, 2421, 2536, 2703, 2469, 2592, 2592, 2422, 2573, 2593, 2672, 2467, 2592, 2402, 2406, 2592, 2402, 2979, 2592, 2592, 2626, 2673, 2467, 2592, 2446, 2259, 2947, 2592, 2377, 2709, 2592, 2592, 2522, 2862, 2713, 2468, 2592, 2592, 2581, 2572, 2562, 2374, 2374, 2592, 2376, 2721, 2724, 2592, 2592, 2624, 2373, 2731, 2592, 2592, 2592, 2626, 2732, 2592, 2592, 2592, 2755, 2656, 2726, 2736, 2741, 2592, 2486, 2593, 2381, 2592, 2727, 2737, 2742, 2715, 2747, 2753, 2592, 2498, 2469, 2873, 2743, 2592, 2592, 2592, 2791, 2759, 2763, 2592, 2592, 2627, 2704, 2592, 2592, 2522, 2789, 2593, 2761, 2753, 2592, 2498, 2863, 2592, 2592, 2767, 2592, 2592, 2592, 2792, 2789, 2592, 2592, 2592, 2803, 2126, 2592, 2592, 2592, 2811, 2122, 2592, 2592, 2592, 2834, 2777, 2592, 2592, 2592, 2848, 2936, 2591, 2489, 2797, 2592, 2592, 2670, 2631, 2490, 2798, 2592, 2592, 2592, 2963, 2807, 2592, 2592, 2592, 2965, 2838, 2592, 2592, 2592, 2975, 2330, 2818, 2829, 2592, 2498, 2939, 2592, 2498, 2592, 2791, 2331, 2819, 2830, 2592, 2592, 2592, 2982, 2834, 2817, 2828, 2106, 2592, 2592, 2592, 2405, 2405, 2817, 2828, 2592, 2592, 2415, 2849, 2842, 2592, 2522, 2773, 2592, 2522, 2868, 2592, 2580, 2600, 2586, 2137, 2850, 2843, 2592, 2592, 2855, 2937, 2844, 2592, 2592, 2592, 2987, 2936, 2591, 2592, 2592, 2684, 2630, 2592, 2856, 2938, 2592, 2592, 2860, 2939, 2592, 2592, 2872, 2592, 2861, 2591, 2592, 2592, 2887, 2616, 2592, 2867, 2592, 2592, 2708, 2592, 2498, 2469, 2498, 2497, 2785, 2773, 2499, 2783, 2770, 2877, 2877, 2877, 2772, 2592, 2592, 2345, 2885, 2592, 2592, 2592, 2715, 2762, 2515, 2896, 2592, 2592, 2715, 2917, 2516, 2897, 2592, 2592, 2592, 2901, 2906, 2911, 2592, 2592, 2956, 2960, 2715, 2902, 2907, 2912, 2593, 2916, 2920, 2820, 2922, 2822, 2592, 2592, 2715, 2927, 2921, 2821, 2106, 2592, 2592, 2974, 2408, 2321, 2821, 2106, 2592, 2592, 2983, 2592, 2593, 2404, 2408, 2592, 2592, 2717, 2749, 2716, 2928, 2322, 2822, 2593, 2926, 2919, 2820, 2934, 2823, 2592, 2592, 2592, 2651, 2824, 2592, 2592, 2592, 2130, 2952, 2592, 2592, 2592, 2592, 2964, 2592, 2592, 2716, 2748, 2592, 2969, 2592, 2592, 2716, 2918, 2368, 2970, 2592, 2592, 2592, 2403, 2407, 2592, 2592, 2787, 2211, 2404, 2409, 2592, 2592, 2802, 2837, 2987, 2592, 2592, 2592, 2809, 2427, 2592, 2793, 2592, 2592, 2809, 2447, 1073741824, 0x80000000, 539754496, 542375936, 402653184, 554434560, 571736064, 545521856, 268451840, 335544320, 268693630, 512, 2048, 256, 1024, 0, 1024, 0, 1073741824, 0x80000000, 0, 0, 0, 8388608, 0, 0, 1073741824, 1073741824, 0, 0x80000000, 537133056, 4194304, 1048576, 268435456, -1073741824, 0, 0, 0, 1048576, 0, 0, 0, 1572864, 0, 0, 0, 4194304, 0, 134217728, 16777216, 0, 0, 32, 64, 98304, 0, 33554432, 8388608, 192, 67108864, 67108864, 67108864, 67108864, 16, 32, 4, 0, 8192, 196608, 196608, 229376, 80, 4096, 524288, 8388608, 0, 0, 32, 128, 256, 24576, 24600, 24576, 24576, 2, 24576, 24576, 24576, 24584, 24592, 24576, 24578, 24576, 24578, 24576, 24576, 16, 512, 2048, 2048, 256, 4096, 32768, 1048576, 4194304, 67108864, 134217728, 268435456, 262144, 134217728, 0, 128, 128, 64, 16384, 16384, 16384, 67108864, 32, 32, 4, 4, 4096, 262144, 134217728, 0, 0, 0, 2, 0, 8192, 131072, 131072, 4096, 4096, 4096, 4096, 24576, 24576, 24576, 8, 8, 24576, 24576, 16384, 16384, 16384, 24576, 24584, 24576, 24576, 24576, 16384, 24576, 536870912, 262144, 0, 0, 32, 2048, 8192, 4, 4096, 4096, 4096, 786432, 8388608, 16777216, 0, 128, 16384, 16384, 16384, 32768, 65536, 2097152, 32, 32, 32, 32, 4, 4, 4, 4, 4, 4096, 67108864, 67108864, 67108864, 24576, 24576, 24576, 24576, 0, 16384, 16384, 16384, 16384, 67108864, 67108864, 8, 67108864, 24576, 8, 8, 8, 24576, 24576, 24576, 24578, 24576, 24576, 24576, 2, 2, 2, 16384, 67108864, 67108864, 67108864, 32, 67108864, 8, 8, 24576, 2048, 0x80000000, 536870912, 262144, 262144, 262144, 67108864, 8, 24576, 16384, 32768, 1048576, 4194304, 25165824, 67108864, 24576, 32770, 2, 4, 112, 512, 98304, 524288, 50, 402653186, 1049090, 1049091, 10, 66, 100925514, 10, 66, 12582914, 0, 0, -1678194207, -1678194207, -1041543218, 0, 32768, 0, 0, 32, 65536, 268435456, 1, 1, 513, 1048577, 0, 12582912, 0, 0, 0, 4, 1792, 0, 0, 0, 7, 29360128, 0, 0, 0, 8, 0, 0, 0, 12, 1, 1, 0, 0, -604102721, -604102721, 4194304, 8388608, 0, 0, 0, 31, 925600, 997981306, 997981306, 997981306, 0, 0, 2048, 8388608, 0, 0, 1, 2, 4, 32, 64, 512, 8192, 0, 0, 0, 245760, 997720064, 0, 0, 0, 32, 0, 0, 0, 3, 12, 16, 32, 8, 112, 3072, 12288, 16384, 32768, 65536, 131072, 7864320, 16777216, 973078528, 0, 0, 65536, 131072, 3670016, 4194304, 16777216, 33554432, 2, 8, 48, 2048, 8192, 16384, 32768, 65536, 131072, 524288, 131072, 524288, 3145728, 4194304, 16777216, 33554432, 65536, 131072, 2097152, 4194304, 16777216, 33554432, 134217728, 268435456, 536870912, 0, 0, 0, 1024, 0, 8, 48, 2048, 8192, 65536, 33554432, 268435456, 536870912, 65536, 268435456, 536870912, 0, 0, 32768, 0, 0, 126, 623104, 65011712, 0, 32, 65536, 536870912, 0, 0, 65536, 524288, 0, 32, 65536, 0, 0, 0, 2048, 0, 0, 0, 15482, 245760, -604102721, 0, 0, 0, 18913, 33062912, 925600, -605028352, 0, 0, 0, 65536, 31, 8096, 131072, 786432, 3145728, 3145728, 12582912, 50331648, 134217728, 268435456, 160, 256, 512, 7168, 131072, 786432, 131072, 786432, 1048576, 2097152, 12582912, 16777216, 268435456, 1073741824, 0x80000000, 12582912, 16777216, 33554432, 268435456, 1073741824, 0x80000000, 3, 12, 16, 160, 256, 7168, 786432, 1048576, 12582912, 16777216, 268435456, 1073741824, 0, 8, 16, 32, 128, 256, 512, 7168, 786432, 1048576, 2097152, 0, 1, 2, 8, 16, 7168, 786432, 1048576, 8388608, 16777216, 16777216, 1073741824, 0, 0, 0, 0, 1, 0, 0, 8, 32, 128, 256, 7168, 8, 32, 0, 3072, 0, 8, 32, 3072, 4096, 524288, 8, 32, 0, 0, 3072, 4096, 0, 2048, 524288, 8388608, 8, 2048, 0, 0, 1, 12, 256, 4096, 32768, 262144, 1048576, 4194304, 67108864, 0, 2048, 0, 2048, 2048, 1073741824, -58805985, -58805985, -58805985, 0, 0, 262144, 0, 0, 32, 4194304, 16777216, 134217728, 4382, 172032, -58982400, 0, 0, 2, 28, 256, 4096, 8192, 8192, 32768, 131072, 262144, 524288, 1, 2, 12, 256, 4096, 0, 0, 4194304, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1, 2, 12, 16, 256, 4096, 1048576, 67108864, 134217728, 268435456, 0, 512, 1048576, 4194304, 201326592, 1879048192, 0, 0, 12, 256, 4096, 134217728, 268435456, 536870912, 12, 256, 268435456, 536870912, 0, 12, 256, 0, 0, 1, 32, 64, 512, 0, 0, 205236961, 205236961, 0, 0, 0, 1, 96, 640, 1, 10976, 229376, 204996608, 0, 640, 2048, 8192, 229376, 1572864, 1572864, 2097152, 201326592, 0, 0, 0, 64, 512, 2048, 229376, 1572864, 201326592, 1572864, 201326592, 0, 0, 1, 4382, 0, 1, 32, 2048, 65536, 131072, 1572864, 201326592, 131072, 1572864, 134217728, 0, 0, 524288, 524288, 0, 0, 0, -68582786, -68582786, -68582786, 0, 0, 2097152, 524288, 0, 524288, 0, 0, 65536, 131072, 1572864, 0, 0, 2, 4, 0, 0, 65011712, -134217728, 0, 0, 0, 0, 2, 4, 120, 512, -268435456, 0, 0, 0, 2, 8, 48, 64, 2048, 8192, 98304, 524288, 2097152, 4194304, 25165824, 33554432, 134217728, 268435456, 0x80000000, 0, 0, 25165824, 33554432, 134217728, 1879048192, 0x80000000, 0, 0, 4, 112, 512, 622592, 65011712, 134217728, -268435456, 16777216, 33554432, 134217728, 1610612736, 0, 0, 0, 64, 98304, 524288, 4194304, 16777216, 33554432, 0, 98304, 524288, 16777216, 33554432, 0, 65536, 524288, 33554432, 536870912, 1073741824, 0, 65536, 524288, 536870912, 1073741824, 0, 0, 65536, 524288, 536870912, 0, 524288, 0, 524288, 524288, 1048576, 2086666240, 0x80000000, 0, -1678194207, 0, 0, 0, 8, 32, 2048, 524288, 8388608, 0, 0, 33062912, 436207616, 0x80000000, 0, 0, 32, 64, 2432, 16384, 32768, 32768, 524288, 3145728, 4194304, 25165824, 25165824, 167772160, 268435456, 0x80000000, 0, 32, 64, 384, 2048, 16384, 32768, 1048576, 2097152, 4194304, 25165824, 32, 64, 128, 256, 2048, 16384, 2048, 16384, 1048576, 4194304, 16777216, 33554432, 134217728, 536870912, 1073741824, 0, 0, 2048, 16384, 4194304, 16777216, 33554432, 134217728, 805306368, 0, 0, 16777216, 134217728, 268435456, 0x80000000, 0, 622592, 622592, 622592, 8807, 8807, 434791, 0, 0, 16777216, 0, 0, 0, 7, 608, 8192, 0, 0, 0, 3, 4, 96, 512, 32, 64, 8192, 0, 0, 16777216, 134217728, 0, 0, 2, 4, 8192, 16384, 65536, 2097152, 33554432, 268435456\n];\n\nXQueryTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"QuotChar\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar JSONiqTokenizer = _dereq_('./JSONiqTokenizer').JSONiqTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit'.split('|');\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'JSONPredefinedCharRef', token: 'constant.language.escape' },\n        { name: 'JSONCharRef', token: 'constant.language.escape' },\n        { name: 'JSONChar', token: 'string' }\n    ]\n};\n    \nexports.JSONiqLexer = function(){ return new Lexer(JSONiqTokenizer, Rules); };\n},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar XQueryTokenizer = _dereq_('./XQueryTokenizer').XQueryTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict'.split('|');\n\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotChar', token: 'string' }\n    ]\n};\n    \nexports.XQueryLexer = function(){ return new Lexer(XQueryTokenizer, Rules); };\n},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\":[function(_dereq_,module,exports){\nexports.JSONParseTreeHandler = function (code) {\n\t'use strict';\n    var toBeIndex = ['VarDecl', 'FunctionDecl'];\n    var list = [\n        'OrExpr', 'AndExpr', 'ComparisonExpr', 'StringConcatExpr', 'RangeExpr',\n        'AdditiveExpr', 'MultiplicativeExpr',\n        'UnionExpr', 'IntersectExceptExpr', 'InstanceofExpr', 'TreatExpr', 'CastableExpr', 'CastExpr', 'UnaryExpr', 'ValueExpr',\n        'FTContainsExpr', 'SimpleMapExpr', 'PathExpr', 'RelativePathExpr', 'PostfixExpr', 'StepExpr'\n    ];\n\n    var ast = null;\n    var ptr = null;\n    var remains = code;\n    var cursor = 0;\n    var lineCursor = 0;\n    var line = 0;\n\n    function createNode(name) {\n        return {\n            name: name,\n            children: [],\n            getParent: null,\n            pos: {\n                sl: 0,\n                sc: 0,\n                el: 0,\n                ec: 0\n            }\n        };\n    }\n\n    function pushNode(name) { //begin\n        var node = createNode(name);\n        if (ast === null) {\n            ast = node;\n            ast.index = [];\n            ptr = node;\n        } else {\n            node.getParent = ptr;\n            ptr.children.push(node);\n            ptr = ptr.children[ptr.children.length - 1];\n        }\n    }\n\n    function popNode() {\n\n        if (ptr.children.length > 0) {\n            var s = ptr.children[0];\n            var e = null;\n            for (var i = ptr.children.length - 1; i >= 0; i--) {\n                e = ptr.children[i];\n                if (e.pos.el !== 0 || e.pos.ec !== 0) {\n                    break;\n                }\n            }\n            ptr.pos.sl = s.pos.sl;\n            ptr.pos.sc = s.pos.sc;\n            ptr.pos.el = e.pos.el;\n            ptr.pos.ec = e.pos.ec;\n        }\n        if (ptr.name === 'FunctionName') {\n            ptr.name = 'EQName';\n        }\n        if (ptr.name === 'EQName' && ptr.value === undefined) {\n            ptr.value = ptr.children[0].value;\n            ptr.children.pop();\n        }\n    \n        if(toBeIndex.indexOf(ptr.name) !== -1) {\n            ast.index.push(ptr);\n        }\n    \n        if (ptr.getParent !== null) {\n            ptr = ptr.getParent;\n        } else {\n        }\n        if (ptr.children.length > 0) {\n            var lastChild = ptr.children[ptr.children.length - 1];\n            if (lastChild.children.length === 1 && list.indexOf(lastChild.name) !== -1) {\n                ptr.children[ptr.children.length - 1] = lastChild.children[0];\n            }\n        }\n    }\n\n    this.closeParseTree = function () {\n        while (ptr.getParent !== null) {\n            popNode();\n        }\n        popNode();\n    };\n\n    this.peek = function () {\n        return ptr;\n    };\n\n    this.getParseTree = function () {\n        return ast;\n    };\n\n    this.reset = function () {}; //input\n\n    this.startNonterminal = function (name, begin) {\n        pushNode(name, begin);\n    };\n\n    this.endNonterminal = function () {//name, end\n        popNode();\n    };\n\n    this.terminal = function (name, begin, end) {\n        name = (name.substring(0, 1) === '\\'' && name.substring(name.length - 1) === '\\'') ? 'TOKEN' : name;\n        pushNode(name, begin);\n        setValue(ptr, begin, end);\n        popNode();\n    };\n\n    this.whitespace = function (begin, end) {\n        var name = 'WS';\n        pushNode(name, begin);\n        setValue(ptr, begin, end);\n        popNode();\n    };\n\n    function setValue(node, begin, end) {\n\n        var e = end - cursor;\n        ptr.value = remains.substring(0, e);\n        remains = remains.substring(e);\n        cursor = end;\n\n        var sl = line;\n        var sc = lineCursor;\n        var el = sl + ptr.value.split('\\n').length - 1;\n        var lastIdx = ptr.value.lastIndexOf('\\n');\n        var ec = lastIdx === -1 ? sc + ptr.value.length : ptr.value.substring(lastIdx + 1).length;\n\n        line = el;\n        lineCursor = ec;\n\n        ptr.pos.sl = sl;\n        ptr.pos.sc = sc;\n        ptr.pos.el = el;\n        ptr.pos.ec = ec;\n    }\n};\n\n},{}],\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\":[function(_dereq_,module,exports){\n                                                            var JSONiqParser = exports.JSONiqParser = function JSONiqParser(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    l2 = 0;\n    end = e;\n    ex = -1;\n    memo = {};\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqParser.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqParser.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqParser.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_XQuery = function()\n  {\n    eventHandler.startNonterminal(\"XQuery\", e0);\n    lookahead1W(277);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Module();\n    shift(25);                      // EOF\n    eventHandler.endNonterminal(\"XQuery\", e0);\n  };\n\n  function parse_Module()\n  {\n    eventHandler.startNonterminal(\"Module\", e0);\n    switch (l1)\n    {\n    case 170:                       // 'jsoniq'\n      lookahead2W(168);             // S^WS | '#' | '(' | '(:' | 'encoding' | 'version'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 64682                 // 'jsoniq' 'encoding'\n     || lk == 137898)               // 'jsoniq' 'version'\n    {\n      parse_VersionDecl();\n    }\n    lookahead1W(277);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 185:                       // 'module'\n      lookahead2W(146);             // S^WS | '#' | '(' | '(:' | 'namespace'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 95929:                     // 'module' 'namespace'\n      whitespace();\n      parse_LibraryModule();\n      break;\n    default:\n      whitespace();\n      parse_MainModule();\n    }\n    eventHandler.endNonterminal(\"Module\", e0);\n  }\n\n  function parse_VersionDecl()\n  {\n    eventHandler.startNonterminal(\"VersionDecl\", e0);\n    shift(170);                     // 'jsoniq'\n    lookahead1W(120);               // S^WS | '(:' | 'encoding' | 'version'\n    switch (l1)\n    {\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(269);                   // 'version'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      lookahead1W(113);             // S^WS | '(:' | ';' | 'encoding'\n      if (l1 == 126)                // 'encoding'\n      {\n        shift(126);                 // 'encoding'\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n    }\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"VersionDecl\", e0);\n  }\n\n  function parse_LibraryModule()\n  {\n    eventHandler.startNonterminal(\"LibraryModule\", e0);\n    parse_ModuleDecl();\n    lookahead1W(142);               // S^WS | EOF | '(:' | 'declare' | 'import'\n    whitespace();\n    parse_Prolog();\n    eventHandler.endNonterminal(\"LibraryModule\", e0);\n  }\n\n  function parse_ModuleDecl()\n  {\n    eventHandler.startNonterminal(\"ModuleDecl\", e0);\n    shift(185);                     // 'module'\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(239);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(30);                // S^WS | '(:' | '='\n    shift(61);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"ModuleDecl\", e0);\n  }\n\n  function parse_Prolog()\n  {\n    eventHandler.startNonterminal(\"Prolog\", e0);\n    for (;;)\n    {\n      lookahead1W(277);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(206);           // S^WS | '#' | '%' | '(' | '(:' | 'base-uri' | 'boundary-space' | 'collection' |\n        break;\n      case 155:                     // 'import'\n        lookahead2W(169);           // S^WS | '#' | '(' | '(:' | 'module' | 'schema'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 43117               // 'declare' 'base-uri'\n       && lk != 44141               // 'declare' 'boundary-space'\n       && lk != 50797               // 'declare' 'construction'\n       && lk != 53869               // 'declare' 'copy-namespaces'\n       && lk != 54893               // 'declare' 'decimal-format'\n       && lk != 56429               // 'declare' 'default'\n       && lk != 73325               // 'declare' 'ft-option'\n       && lk != 94875               // 'import' 'module'\n       && lk != 95853               // 'declare' 'namespace'\n       && lk != 106093              // 'declare' 'ordering'\n       && lk != 115821              // 'declare' 'revalidation'\n       && lk != 117403)             // 'import' 'schema'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(200);           // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 56429)              // 'declare' 'default'\n      {\n        lk = memoized(0, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_DefaultNamespaceDecl();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(0, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case -1:\n        whitespace();\n        parse_DefaultNamespaceDecl();\n        break;\n      case 95853:                   // 'declare' 'namespace'\n        whitespace();\n        parse_NamespaceDecl();\n        break;\n      case 155:                     // 'import'\n        whitespace();\n        parse_Import();\n        break;\n      case 73325:                   // 'declare' 'ft-option'\n        whitespace();\n        parse_FTOptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_Setter();\n      }\n      lookahead1W(29);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    for (;;)\n    {\n      lookahead1W(277);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(201);           // S^WS | '#' | '%' | '(' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 17005               // 'declare' '%'\n       && lk != 49261               // 'declare' 'collection'\n       && lk != 52333               // 'declare' 'context'\n       && lk != 75373               // 'declare' 'function'\n       && lk != 80493               // 'declare' 'index'\n       && lk != 83565               // 'declare' 'integrity'\n       && lk != 104045              // 'declare' 'option'\n       && lk != 134765              // 'declare' 'updating'\n       && lk != 137325)             // 'declare' 'variable'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(197);           // S^WS | '%' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n        break;\n      default:\n        lk = l1;\n      }\n      switch (lk)\n      {\n      case 52333:                   // 'declare' 'context'\n        whitespace();\n        parse_ContextItemDecl();\n        break;\n      case 104045:                  // 'declare' 'option'\n        whitespace();\n        parse_OptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_AnnotatedDecl();\n      }\n      lookahead1W(29);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    eventHandler.endNonterminal(\"Prolog\", e0);\n  }\n\n  function parse_Separator()\n  {\n    eventHandler.startNonterminal(\"Separator\", e0);\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"Separator\", e0);\n  }\n\n  function parse_Setter()\n  {\n    eventHandler.startNonterminal(\"Setter\", e0);\n    switch (l1)\n    {\n    case 109:                       // 'declare'\n      lookahead2W(194);             // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 56429)                // 'declare' 'default'\n    {\n      lk = memoized(1, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_DefaultCollationDecl();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_EmptyOrderDecl();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -9;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(1, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 44141:                     // 'declare' 'boundary-space'\n      parse_BoundarySpaceDecl();\n      break;\n    case -2:\n      parse_DefaultCollationDecl();\n      break;\n    case 43117:                     // 'declare' 'base-uri'\n      parse_BaseURIDecl();\n      break;\n    case 50797:                     // 'declare' 'construction'\n      parse_ConstructionDecl();\n      break;\n    case 106093:                    // 'declare' 'ordering'\n      parse_OrderingModeDecl();\n      break;\n    case -6:\n      parse_EmptyOrderDecl();\n      break;\n    case 115821:                    // 'declare' 'revalidation'\n      parse_RevalidationDecl();\n      break;\n    case 53869:                     // 'declare' 'copy-namespaces'\n      parse_CopyNamespacesDecl();\n      break;\n    default:\n      parse_DecimalFormatDecl();\n    }\n    eventHandler.endNonterminal(\"Setter\", e0);\n  }\n\n  function parse_BoundarySpaceDecl()\n  {\n    eventHandler.startNonterminal(\"BoundarySpaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(36);                // S^WS | '(:' | 'boundary-space'\n    shift(86);                      // 'boundary-space'\n    lookahead1W(137);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 218:                       // 'preserve'\n      shift(218);                   // 'preserve'\n      break;\n    default:\n      shift(246);                   // 'strip'\n    }\n    eventHandler.endNonterminal(\"BoundarySpaceDecl\", e0);\n  }\n\n  function parse_DefaultCollationDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultCollationDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(41);                // S^WS | '(:' | 'collation'\n    shift(95);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultCollationDecl\", e0);\n  }\n\n  function try_DefaultCollationDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(41);                // S^WS | '(:' | 'collation'\n    shiftT(95);                     // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_BaseURIDecl()\n  {\n    eventHandler.startNonterminal(\"BaseURIDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(35);                // S^WS | '(:' | 'base-uri'\n    shift(84);                      // 'base-uri'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"BaseURIDecl\", e0);\n  }\n\n  function parse_ConstructionDecl()\n  {\n    eventHandler.startNonterminal(\"ConstructionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(44);                // S^WS | '(:' | 'construction'\n    shift(99);                      // 'construction'\n    lookahead1W(137);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 246:                       // 'strip'\n      shift(246);                   // 'strip'\n      break;\n    default:\n      shift(218);                   // 'preserve'\n    }\n    eventHandler.endNonterminal(\"ConstructionDecl\", e0);\n  }\n\n  function parse_OrderingModeDecl()\n  {\n    eventHandler.startNonterminal(\"OrderingModeDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(71);                // S^WS | '(:' | 'ordering'\n    shift(207);                     // 'ordering'\n    lookahead1W(135);               // S^WS | '(:' | 'ordered' | 'unordered'\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    default:\n      shift(262);                   // 'unordered'\n    }\n    eventHandler.endNonterminal(\"OrderingModeDecl\", e0);\n  }\n\n  function parse_EmptyOrderDecl()\n  {\n    eventHandler.startNonterminal(\"EmptyOrderDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'order'\n    shift(205);                     // 'order'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shift(124);                     // 'empty'\n    lookahead1W(125);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 149:                       // 'greatest'\n      shift(149);                   // 'greatest'\n      break;\n    default:\n      shift(176);                   // 'least'\n    }\n    eventHandler.endNonterminal(\"EmptyOrderDecl\", e0);\n  }\n\n  function try_EmptyOrderDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'order'\n    shiftT(205);                    // 'order'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shiftT(124);                    // 'empty'\n    lookahead1W(125);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 149:                       // 'greatest'\n      shiftT(149);                  // 'greatest'\n      break;\n    default:\n      shiftT(176);                  // 'least'\n    }\n  }\n\n  function parse_CopyNamespacesDecl()\n  {\n    eventHandler.startNonterminal(\"CopyNamespacesDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(47);                // S^WS | '(:' | 'copy-namespaces'\n    shift(105);                     // 'copy-namespaces'\n    lookahead1W(132);               // S^WS | '(:' | 'no-preserve' | 'preserve'\n    whitespace();\n    parse_PreserveMode();\n    lookahead1W(25);                // S^WS | '(:' | ','\n    shift(42);                      // ','\n    lookahead1W(127);               // S^WS | '(:' | 'inherit' | 'no-inherit'\n    whitespace();\n    parse_InheritMode();\n    eventHandler.endNonterminal(\"CopyNamespacesDecl\", e0);\n  }\n\n  function parse_PreserveMode()\n  {\n    eventHandler.startNonterminal(\"PreserveMode\", e0);\n    switch (l1)\n    {\n    case 218:                       // 'preserve'\n      shift(218);                   // 'preserve'\n      break;\n    default:\n      shift(193);                   // 'no-preserve'\n    }\n    eventHandler.endNonterminal(\"PreserveMode\", e0);\n  }\n\n  function parse_InheritMode()\n  {\n    eventHandler.startNonterminal(\"InheritMode\", e0);\n    switch (l1)\n    {\n    case 159:                       // 'inherit'\n      shift(159);                   // 'inherit'\n      break;\n    default:\n      shift(192);                   // 'no-inherit'\n    }\n    eventHandler.endNonterminal(\"InheritMode\", e0);\n  }\n\n  function parse_DecimalFormatDecl()\n  {\n    eventHandler.startNonterminal(\"DecimalFormatDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(118);               // S^WS | '(:' | 'decimal-format' | 'default'\n    switch (l1)\n    {\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_EQName();\n      break;\n    default:\n      shift(110);                   // 'default'\n      lookahead1W(48);              // S^WS | '(:' | 'decimal-format'\n      shift(107);                   // 'decimal-format'\n    }\n    for (;;)\n    {\n      lookahead1W(203);             // S^WS | '(:' | ';' | 'NaN' | 'decimal-separator' | 'digit' |\n      if (l1 == 54)                 // ';'\n      {\n        break;\n      }\n      whitespace();\n      parse_DFPropertyName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    eventHandler.endNonterminal(\"DecimalFormatDecl\", e0);\n  }\n\n  function parse_DFPropertyName()\n  {\n    eventHandler.startNonterminal(\"DFPropertyName\", e0);\n    switch (l1)\n    {\n    case 108:                       // 'decimal-separator'\n      shift(108);                   // 'decimal-separator'\n      break;\n    case 151:                       // 'grouping-separator'\n      shift(151);                   // 'grouping-separator'\n      break;\n    case 158:                       // 'infinity'\n      shift(158);                   // 'infinity'\n      break;\n    case 182:                       // 'minus-sign'\n      shift(182);                   // 'minus-sign'\n      break;\n    case 68:                        // 'NaN'\n      shift(68);                    // 'NaN'\n      break;\n    case 213:                       // 'percent'\n      shift(213);                   // 'percent'\n      break;\n    case 212:                       // 'per-mille'\n      shift(212);                   // 'per-mille'\n      break;\n    case 280:                       // 'zero-digit'\n      shift(280);                   // 'zero-digit'\n      break;\n    case 117:                       // 'digit'\n      shift(117);                   // 'digit'\n      break;\n    default:\n      shift(211);                   // 'pattern-separator'\n    }\n    eventHandler.endNonterminal(\"DFPropertyName\", e0);\n  }\n\n  function parse_Import()\n  {\n    eventHandler.startNonterminal(\"Import\", e0);\n    switch (l1)\n    {\n    case 155:                       // 'import'\n      lookahead2W(130);             // S^WS | '(:' | 'module' | 'schema'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 117403:                    // 'import' 'schema'\n      parse_SchemaImport();\n      break;\n    default:\n      parse_ModuleImport();\n    }\n    eventHandler.endNonterminal(\"Import\", e0);\n  }\n\n  function parse_SchemaImport()\n  {\n    eventHandler.startNonterminal(\"SchemaImport\", e0);\n    shift(155);                     // 'import'\n    lookahead1W(76);                // S^WS | '(:' | 'schema'\n    shift(229);                     // 'schema'\n    lookahead1W(141);               // URILiteral | S^WS | '(:' | 'default' | 'namespace'\n    if (l1 != 7)                    // URILiteral\n    {\n      whitespace();\n      parse_SchemaPrefix();\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(112);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 82)                   // 'at'\n    {\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(107);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"SchemaImport\", e0);\n  }\n\n  function parse_SchemaPrefix()\n  {\n    eventHandler.startNonterminal(\"SchemaPrefix\", e0);\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      lookahead1W(239);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n      break;\n    default:\n      shift(110);                   // 'default'\n      lookahead1W(50);              // S^WS | '(:' | 'element'\n      shift(122);                   // 'element'\n      lookahead1W(64);              // S^WS | '(:' | 'namespace'\n      shift(187);                   // 'namespace'\n    }\n    eventHandler.endNonterminal(\"SchemaPrefix\", e0);\n  }\n\n  function parse_ModuleImport()\n  {\n    eventHandler.startNonterminal(\"ModuleImport\", e0);\n    shift(155);                     // 'import'\n    lookahead1W(63);                // S^WS | '(:' | 'module'\n    shift(185);                     // 'module'\n    lookahead1W(93);                // URILiteral | S^WS | '(:' | 'namespace'\n    if (l1 == 187)                  // 'namespace'\n    {\n      shift(187);                   // 'namespace'\n      lookahead1W(239);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(112);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 82)                   // 'at'\n    {\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(107);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"ModuleImport\", e0);\n  }\n\n  function parse_NamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"NamespaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(239);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(30);                // S^WS | '(:' | '='\n    shift(61);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"NamespaceDecl\", e0);\n  }\n\n  function parse_DefaultNamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultNamespaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(119);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    default:\n      shift(147);                   // 'function'\n    }\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultNamespaceDecl\", e0);\n  }\n\n  function try_DefaultNamespaceDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(119);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    default:\n      shiftT(147);                  // 'function'\n    }\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shiftT(187);                    // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_FTOptionDecl()\n  {\n    eventHandler.startNonterminal(\"FTOptionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(55);                // S^WS | '(:' | 'ft-option'\n    shift(143);                     // 'ft-option'\n    lookahead1W(84);                // S^WS | '(:' | 'using'\n    whitespace();\n    parse_FTMatchOptions();\n    eventHandler.endNonterminal(\"FTOptionDecl\", e0);\n  }\n\n  function parse_AnnotatedDecl()\n  {\n    eventHandler.startNonterminal(\"AnnotatedDecl\", e0);\n    shift(109);                     // 'declare'\n    for (;;)\n    {\n      lookahead1W(192);             // S^WS | '%' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n      if (l1 != 33                  // '%'\n       && l1 != 263)                // 'updating'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 263:                     // 'updating'\n        whitespace();\n        parse_CompatibilityAnnotation();\n        break;\n      default:\n        whitespace();\n        parse_Annotation();\n      }\n    }\n    switch (l1)\n    {\n    case 268:                       // 'variable'\n      whitespace();\n      parse_VarDecl();\n      break;\n    case 147:                       // 'function'\n      whitespace();\n      parse_FunctionDecl();\n      break;\n    case 96:                        // 'collection'\n      whitespace();\n      parse_CollectionDecl();\n      break;\n    case 157:                       // 'index'\n      whitespace();\n      parse_IndexDecl();\n      break;\n    default:\n      whitespace();\n      parse_ICDecl();\n    }\n    eventHandler.endNonterminal(\"AnnotatedDecl\", e0);\n  }\n\n  function parse_CompatibilityAnnotation()\n  {\n    eventHandler.startNonterminal(\"CompatibilityAnnotation\", e0);\n    shift(263);                     // 'updating'\n    eventHandler.endNonterminal(\"CompatibilityAnnotation\", e0);\n  }\n\n  function parse_Annotation()\n  {\n    eventHandler.startNonterminal(\"Annotation\", e0);\n    shift(33);                      // '%'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(193);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(190);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n      whitespace();\n      parse_Literal();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(190);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n        whitespace();\n        parse_Literal();\n      }\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"Annotation\", e0);\n  }\n\n  function try_Annotation()\n  {\n    shiftT(33);                     // '%'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(193);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(190);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n      try_Literal();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(190);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n        try_Literal();\n      }\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_VarDecl()\n  {\n    eventHandler.startNonterminal(\"VarDecl\", e0);\n    shift(268);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(110);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 53:                        // ':='\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(134);                   // 'external'\n      lookahead1W(108);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"VarDecl\", e0);\n  }\n\n  function parse_VarValue()\n  {\n    eventHandler.startNonterminal(\"VarValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarValue\", e0);\n  }\n\n  function parse_VarDefaultValue()\n  {\n    eventHandler.startNonterminal(\"VarDefaultValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarDefaultValue\", e0);\n  }\n\n  function parse_ContextItemDecl()\n  {\n    eventHandler.startNonterminal(\"ContextItemDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'context'\n    shift(102);                     // 'context'\n    lookahead1W(58);                // S^WS | '(:' | 'item'\n    shift(167);                     // 'item'\n    lookahead1W(157);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 80)                   // 'as'\n    {\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_ItemType();\n    }\n    lookahead1W(110);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 53:                        // ':='\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(134);                   // 'external'\n      lookahead1W(108);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"ContextItemDecl\", e0);\n  }\n\n  function parse_ParamList()\n  {\n    eventHandler.startNonterminal(\"ParamList\", e0);\n    parse_Param();\n    for (;;)\n    {\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_Param();\n    }\n    eventHandler.endNonterminal(\"ParamList\", e0);\n  }\n\n  function try_ParamList()\n  {\n    try_Param();\n    for (;;)\n    {\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_Param();\n    }\n  }\n\n  function parse_Param()\n  {\n    eventHandler.startNonterminal(\"Param\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(153);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    eventHandler.endNonterminal(\"Param\", e0);\n  }\n\n  function try_Param()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(153);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n  }\n\n  function parse_FunctionBody()\n  {\n    eventHandler.startNonterminal(\"FunctionBody\", e0);\n    parse_EnclosedExpr();\n    eventHandler.endNonterminal(\"FunctionBody\", e0);\n  }\n\n  function try_FunctionBody()\n  {\n    try_EnclosedExpr();\n  }\n\n  function parse_EnclosedExpr()\n  {\n    eventHandler.startNonterminal(\"EnclosedExpr\", e0);\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"EnclosedExpr\", e0);\n  }\n\n  function try_EnclosedExpr()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_OptionDecl()\n  {\n    eventHandler.startNonterminal(\"OptionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(69);                // S^WS | '(:' | 'option'\n    shift(203);                     // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"OptionDecl\", e0);\n  }\n\n  function parse_Expr()\n  {\n    eventHandler.startNonterminal(\"Expr\", e0);\n    parse_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Expr\", e0);\n  }\n\n  function try_Expr()\n  {\n    try_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_FLWORExpr()\n  {\n    eventHandler.startNonterminal(\"FLWORExpr\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnClause();\n    eventHandler.endNonterminal(\"FLWORExpr\", e0);\n  }\n\n  function try_FLWORExpr()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnClause();\n  }\n\n  function parse_InitialClause()\n  {\n    eventHandler.startNonterminal(\"InitialClause\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(151);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n      parse_ForClause();\n      break;\n    case 177:                       // 'let'\n      parse_LetClause();\n      break;\n    default:\n      parse_WindowClause();\n    }\n    eventHandler.endNonterminal(\"InitialClause\", e0);\n  }\n\n  function try_InitialClause()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(151);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n      try_ForClause();\n      break;\n    case 177:                       // 'let'\n      try_LetClause();\n      break;\n    default:\n      try_WindowClause();\n    }\n  }\n\n  function parse_IntermediateClause()\n  {\n    eventHandler.startNonterminal(\"IntermediateClause\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n    case 177:                       // 'let'\n      parse_InitialClause();\n      break;\n    case 272:                       // 'where'\n      parse_WhereClause();\n      break;\n    case 150:                       // 'group'\n      parse_GroupByClause();\n      break;\n    case 106:                       // 'count'\n      parse_CountClause();\n      break;\n    default:\n      parse_OrderByClause();\n    }\n    eventHandler.endNonterminal(\"IntermediateClause\", e0);\n  }\n\n  function try_IntermediateClause()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n    case 177:                       // 'let'\n      try_InitialClause();\n      break;\n    case 272:                       // 'where'\n      try_WhereClause();\n      break;\n    case 150:                       // 'group'\n      try_GroupByClause();\n      break;\n    case 106:                       // 'count'\n      try_CountClause();\n      break;\n    default:\n      try_OrderByClause();\n    }\n  }\n\n  function parse_ForClause()\n  {\n    eventHandler.startNonterminal(\"ForClause\", e0);\n    shift(139);                     // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_ForBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_ForBinding();\n    }\n    eventHandler.endNonterminal(\"ForClause\", e0);\n  }\n\n  function try_ForClause()\n  {\n    shiftT(139);                    // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_ForBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_ForBinding();\n    }\n  }\n\n  function parse_ForBinding()\n  {\n    eventHandler.startNonterminal(\"ForBinding\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(182);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(173);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 73)                   // 'allowing'\n    {\n      whitespace();\n      parse_AllowingEmpty();\n    }\n    lookahead1W(160);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 82)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(126);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 232)                  // 'score'\n    {\n      whitespace();\n      parse_FTScoreVar();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ForBinding\", e0);\n  }\n\n  function try_ForBinding()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(182);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(173);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 73)                   // 'allowing'\n    {\n      try_AllowingEmpty();\n    }\n    lookahead1W(160);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 82)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(126);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 232)                  // 'score'\n    {\n      try_FTScoreVar();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_AllowingEmpty()\n  {\n    eventHandler.startNonterminal(\"AllowingEmpty\", e0);\n    shift(73);                      // 'allowing'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shift(124);                     // 'empty'\n    eventHandler.endNonterminal(\"AllowingEmpty\", e0);\n  }\n\n  function try_AllowingEmpty()\n  {\n    shiftT(73);                     // 'allowing'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shiftT(124);                    // 'empty'\n  }\n\n  function parse_PositionalVar()\n  {\n    eventHandler.startNonterminal(\"PositionalVar\", e0);\n    shift(82);                      // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"PositionalVar\", e0);\n  }\n\n  function try_PositionalVar()\n  {\n    shiftT(82);                     // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_FTScoreVar()\n  {\n    eventHandler.startNonterminal(\"FTScoreVar\", e0);\n    shift(232);                     // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"FTScoreVar\", e0);\n  }\n\n  function try_FTScoreVar()\n  {\n    shiftT(232);                    // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_LetClause()\n  {\n    eventHandler.startNonterminal(\"LetClause\", e0);\n    shift(177);                     // 'let'\n    lookahead1W(100);               // S^WS | '$' | '(:' | 'score'\n    whitespace();\n    parse_LetBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(100);             // S^WS | '$' | '(:' | 'score'\n      whitespace();\n      parse_LetBinding();\n    }\n    eventHandler.endNonterminal(\"LetClause\", e0);\n  }\n\n  function try_LetClause()\n  {\n    shiftT(177);                    // 'let'\n    lookahead1W(100);               // S^WS | '$' | '(:' | 'score'\n    try_LetBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(100);             // S^WS | '$' | '(:' | 'score'\n      try_LetBinding();\n    }\n  }\n\n  function parse_LetBinding()\n  {\n    eventHandler.startNonterminal(\"LetBinding\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(109);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      break;\n    default:\n      parse_FTScoreVar();\n    }\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"LetBinding\", e0);\n  }\n\n  function try_LetBinding()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(109);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      break;\n    default:\n      try_FTScoreVar();\n    }\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowClause()\n  {\n    eventHandler.startNonterminal(\"WindowClause\", e0);\n    shift(139);                     // 'for'\n    lookahead1W(139);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 257:                       // 'tumbling'\n      whitespace();\n      parse_TumblingWindowClause();\n      break;\n    default:\n      whitespace();\n      parse_SlidingWindowClause();\n    }\n    eventHandler.endNonterminal(\"WindowClause\", e0);\n  }\n\n  function try_WindowClause()\n  {\n    shiftT(139);                    // 'for'\n    lookahead1W(139);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 257:                       // 'tumbling'\n      try_TumblingWindowClause();\n      break;\n    default:\n      try_SlidingWindowClause();\n    }\n  }\n\n  function parse_TumblingWindowClause()\n  {\n    eventHandler.startNonterminal(\"TumblingWindowClause\", e0);\n    shift(257);                     // 'tumbling'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shift(275);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    if (l1 == 127                   // 'end'\n     || l1 == 202)                  // 'only'\n    {\n      whitespace();\n      parse_WindowEndCondition();\n    }\n    eventHandler.endNonterminal(\"TumblingWindowClause\", e0);\n  }\n\n  function try_TumblingWindowClause()\n  {\n    shiftT(257);                    // 'tumbling'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shiftT(275);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    if (l1 == 127                   // 'end'\n     || l1 == 202)                  // 'only'\n    {\n      try_WindowEndCondition();\n    }\n  }\n\n  function parse_SlidingWindowClause()\n  {\n    eventHandler.startNonterminal(\"SlidingWindowClause\", e0);\n    shift(239);                     // 'sliding'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shift(275);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    whitespace();\n    parse_WindowEndCondition();\n    eventHandler.endNonterminal(\"SlidingWindowClause\", e0);\n  }\n\n  function try_SlidingWindowClause()\n  {\n    shiftT(239);                    // 'sliding'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shiftT(275);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    try_WindowEndCondition();\n  }\n\n  function parse_WindowStartCondition()\n  {\n    eventHandler.startNonterminal(\"WindowStartCondition\", e0);\n    shift(242);                     // 'start'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shift(271);                     // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowStartCondition\", e0);\n  }\n\n  function try_WindowStartCondition()\n  {\n    shiftT(242);                    // 'start'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shiftT(271);                    // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowEndCondition()\n  {\n    eventHandler.startNonterminal(\"WindowEndCondition\", e0);\n    if (l1 == 202)                  // 'only'\n    {\n      shift(202);                   // 'only'\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'end'\n    shift(127);                     // 'end'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shift(271);                     // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowEndCondition\", e0);\n  }\n\n  function try_WindowEndCondition()\n  {\n    if (l1 == 202)                  // 'only'\n    {\n      shiftT(202);                  // 'only'\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'end'\n    shiftT(127);                    // 'end'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shiftT(271);                    // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowVars()\n  {\n    eventHandler.startNonterminal(\"WindowVars\", e0);\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CurrentItem();\n    }\n    lookahead1W(174);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 82)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(163);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 219)                  // 'previous'\n    {\n      shift(219);                   // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_PreviousItem();\n    }\n    lookahead1W(131);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 190)                  // 'next'\n    {\n      shift(190);                   // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NextItem();\n    }\n    eventHandler.endNonterminal(\"WindowVars\", e0);\n  }\n\n  function try_WindowVars()\n  {\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CurrentItem();\n    }\n    lookahead1W(174);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 82)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(163);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 219)                  // 'previous'\n    {\n      shiftT(219);                  // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_PreviousItem();\n    }\n    lookahead1W(131);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 190)                  // 'next'\n    {\n      shiftT(190);                  // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NextItem();\n    }\n  }\n\n  function parse_CurrentItem()\n  {\n    eventHandler.startNonterminal(\"CurrentItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"CurrentItem\", e0);\n  }\n\n  function try_CurrentItem()\n  {\n    try_EQName();\n  }\n\n  function parse_PreviousItem()\n  {\n    eventHandler.startNonterminal(\"PreviousItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"PreviousItem\", e0);\n  }\n\n  function try_PreviousItem()\n  {\n    try_EQName();\n  }\n\n  function parse_NextItem()\n  {\n    eventHandler.startNonterminal(\"NextItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"NextItem\", e0);\n  }\n\n  function try_NextItem()\n  {\n    try_EQName();\n  }\n\n  function parse_CountClause()\n  {\n    eventHandler.startNonterminal(\"CountClause\", e0);\n    shift(106);                     // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"CountClause\", e0);\n  }\n\n  function try_CountClause()\n  {\n    shiftT(106);                    // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_WhereClause()\n  {\n    eventHandler.startNonterminal(\"WhereClause\", e0);\n    shift(272);                     // 'where'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WhereClause\", e0);\n  }\n\n  function try_WhereClause()\n  {\n    shiftT(272);                    // 'where'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_GroupByClause()\n  {\n    eventHandler.startNonterminal(\"GroupByClause\", e0);\n    shift(150);                     // 'group'\n    lookahead1W(37);                // S^WS | '(:' | 'by'\n    shift(88);                      // 'by'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_GroupingSpecList();\n    eventHandler.endNonterminal(\"GroupByClause\", e0);\n  }\n\n  function try_GroupByClause()\n  {\n    shiftT(150);                    // 'group'\n    lookahead1W(37);                // S^WS | '(:' | 'by'\n    shiftT(88);                     // 'by'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_GroupingSpecList();\n  }\n\n  function parse_GroupingSpecList()\n  {\n    eventHandler.startNonterminal(\"GroupingSpecList\", e0);\n    parse_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_GroupingSpec();\n    }\n    eventHandler.endNonterminal(\"GroupingSpecList\", e0);\n  }\n\n  function try_GroupingSpecList()\n  {\n    try_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_GroupingSpec();\n    }\n  }\n\n  function parse_GroupingSpec()\n  {\n    eventHandler.startNonterminal(\"GroupingSpec\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 36383                 // '$' 'after'\n     || lk == 37407                 // '$' 'allowing'\n     || lk == 37919                 // '$' 'ancestor'\n     || lk == 38431                 // '$' 'ancestor-or-self'\n     || lk == 38943                 // '$' 'and'\n     || lk == 39967                 // '$' 'append'\n     || lk == 40479                 // '$' 'array'\n     || lk == 40991                 // '$' 'as'\n     || lk == 41503                 // '$' 'ascending'\n     || lk == 42015                 // '$' 'at'\n     || lk == 42527                 // '$' 'attribute'\n     || lk == 43039                 // '$' 'base-uri'\n     || lk == 43551                 // '$' 'before'\n     || lk == 44063                 // '$' 'boundary-space'\n     || lk == 44575                 // '$' 'break'\n     || lk == 45599                 // '$' 'case'\n     || lk == 46111                 // '$' 'cast'\n     || lk == 46623                 // '$' 'castable'\n     || lk == 47135                 // '$' 'catch'\n     || lk == 48159                 // '$' 'child'\n     || lk == 48671                 // '$' 'collation'\n     || lk == 49695                 // '$' 'comment'\n     || lk == 50207                 // '$' 'constraint'\n     || lk == 50719                 // '$' 'construction'\n     || lk == 52255                 // '$' 'context'\n     || lk == 52767                 // '$' 'continue'\n     || lk == 53279                 // '$' 'copy'\n     || lk == 53791                 // '$' 'copy-namespaces'\n     || lk == 54303                 // '$' 'count'\n     || lk == 54815                 // '$' 'decimal-format'\n     || lk == 55839                 // '$' 'declare'\n     || lk == 56351                 // '$' 'default'\n     || lk == 56863                 // '$' 'delete'\n     || lk == 57375                 // '$' 'descendant'\n     || lk == 57887                 // '$' 'descendant-or-self'\n     || lk == 58399                 // '$' 'descending'\n     || lk == 60959                 // '$' 'div'\n     || lk == 61471                 // '$' 'document'\n     || lk == 61983                 // '$' 'document-node'\n     || lk == 62495                 // '$' 'element'\n     || lk == 63007                 // '$' 'else'\n     || lk == 63519                 // '$' 'empty'\n     || lk == 64031                 // '$' 'empty-sequence'\n     || lk == 64543                 // '$' 'encoding'\n     || lk == 65055                 // '$' 'end'\n     || lk == 66079                 // '$' 'eq'\n     || lk == 66591                 // '$' 'every'\n     || lk == 67615                 // '$' 'except'\n     || lk == 68127                 // '$' 'exit'\n     || lk == 68639                 // '$' 'external'\n     || lk == 69151                 // '$' 'false'\n     || lk == 69663                 // '$' 'first'\n     || lk == 70175                 // '$' 'following'\n     || lk == 70687                 // '$' 'following-sibling'\n     || lk == 71199                 // '$' 'for'\n     || lk == 72735                 // '$' 'from'\n     || lk == 73247                 // '$' 'ft-option'\n     || lk == 75295                 // '$' 'function'\n     || lk == 75807                 // '$' 'ge'\n     || lk == 76831                 // '$' 'group'\n     || lk == 77855                 // '$' 'gt'\n     || lk == 78367                 // '$' 'idiv'\n     || lk == 78879                 // '$' 'if'\n     || lk == 79391                 // '$' 'import'\n     || lk == 79903                 // '$' 'in'\n     || lk == 80415                 // '$' 'index'\n     || lk == 82463                 // '$' 'insert'\n     || lk == 82975                 // '$' 'instance'\n     || lk == 83487                 // '$' 'integrity'\n     || lk == 83999                 // '$' 'intersect'\n     || lk == 84511                 // '$' 'into'\n     || lk == 85023                 // '$' 'is'\n     || lk == 85535                 // '$' 'item'\n     || lk == 86047                 // '$' 'json'\n     || lk == 86559                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'jsoniq'\n     || lk == 88607                 // '$' 'last'\n     || lk == 89119                 // '$' 'lax'\n     || lk == 89631                 // '$' 'le'\n     || lk == 90655                 // '$' 'let'\n     || lk == 91679                 // '$' 'loop'\n     || lk == 92703                 // '$' 'lt'\n     || lk == 93727                 // '$' 'mod'\n     || lk == 94239                 // '$' 'modify'\n     || lk == 94751                 // '$' 'module'\n     || lk == 95775                 // '$' 'namespace'\n     || lk == 96287                 // '$' 'namespace-node'\n     || lk == 96799                 // '$' 'ne'\n     || lk == 99359                 // '$' 'node'\n     || lk == 99871                 // '$' 'nodes'\n     || lk == 100895                // '$' 'null'\n     || lk == 101407                // '$' 'object'\n     || lk == 103455                // '$' 'only'\n     || lk == 103967                // '$' 'option'\n     || lk == 104479                // '$' 'or'\n     || lk == 104991                // '$' 'order'\n     || lk == 105503                // '$' 'ordered'\n     || lk == 106015                // '$' 'ordering'\n     || lk == 107551                // '$' 'parent'\n     || lk == 110623                // '$' 'preceding'\n     || lk == 111135                // '$' 'preceding-sibling'\n     || lk == 112671                // '$' 'processing-instruction'\n     || lk == 113695                // '$' 'rename'\n     || lk == 114207                // '$' 'replace'\n     || lk == 114719                // '$' 'return'\n     || lk == 115231                // '$' 'returning'\n     || lk == 115743                // '$' 'revalidation'\n     || lk == 116767                // '$' 'satisfies'\n     || lk == 117279                // '$' 'schema'\n     || lk == 117791                // '$' 'schema-attribute'\n     || lk == 118303                // '$' 'schema-element'\n     || lk == 118815                // '$' 'score'\n     || lk == 119327                // '$' 'select'\n     || lk == 119839                // '$' 'self'\n     || lk == 122399                // '$' 'sliding'\n     || lk == 122911                // '$' 'some'\n     || lk == 123423                // '$' 'stable'\n     || lk == 123935                // '$' 'start'\n     || lk == 125471                // '$' 'strict'\n     || lk == 126495                // '$' 'structured-item'\n     || lk == 127007                // '$' 'switch'\n     || lk == 127519                // '$' 'text'\n     || lk == 129567                // '$' 'to'\n     || lk == 130079                // '$' 'treat'\n     || lk == 130591                // '$' 'true'\n     || lk == 131103                // '$' 'try'\n     || lk == 131615                // '$' 'tumbling'\n     || lk == 132127                // '$' 'type'\n     || lk == 132639                // '$' 'typeswitch'\n     || lk == 133151                // '$' 'union'\n     || lk == 134175                // '$' 'unordered'\n     || lk == 134687                // '$' 'updating'\n     || lk == 136223                // '$' 'validate'\n     || lk == 136735                // '$' 'value'\n     || lk == 137247                // '$' 'variable'\n     || lk == 137759                // '$' 'version'\n     || lk == 139295                // '$' 'where'\n     || lk == 139807                // '$' 'while'\n     || lk == 141343)               // '$' 'with'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(205);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 53              // ':='\n           || l1 == 80)             // 'as'\n          {\n            if (l1 == 80)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(28);        // S^WS | '(:' | ':='\n            shiftT(53);             // ':='\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 95)             // 'collation'\n          {\n            shiftT(95);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(2, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      parse_GroupingVariable();\n      lookahead1W(205);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 53                  // ':='\n       || l1 == 80)                 // 'as'\n      {\n        if (l1 == 80)               // 'as'\n        {\n          whitespace();\n          parse_TypeDeclaration();\n        }\n        lookahead1W(28);            // S^WS | '(:' | ':='\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      if (l1 == 95)                 // 'collation'\n      {\n        shift(95);                  // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"GroupingSpec\", e0);\n  }\n\n  function try_GroupingSpec()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 36383                 // '$' 'after'\n     || lk == 37407                 // '$' 'allowing'\n     || lk == 37919                 // '$' 'ancestor'\n     || lk == 38431                 // '$' 'ancestor-or-self'\n     || lk == 38943                 // '$' 'and'\n     || lk == 39967                 // '$' 'append'\n     || lk == 40479                 // '$' 'array'\n     || lk == 40991                 // '$' 'as'\n     || lk == 41503                 // '$' 'ascending'\n     || lk == 42015                 // '$' 'at'\n     || lk == 42527                 // '$' 'attribute'\n     || lk == 43039                 // '$' 'base-uri'\n     || lk == 43551                 // '$' 'before'\n     || lk == 44063                 // '$' 'boundary-space'\n     || lk == 44575                 // '$' 'break'\n     || lk == 45599                 // '$' 'case'\n     || lk == 46111                 // '$' 'cast'\n     || lk == 46623                 // '$' 'castable'\n     || lk == 47135                 // '$' 'catch'\n     || lk == 48159                 // '$' 'child'\n     || lk == 48671                 // '$' 'collation'\n     || lk == 49695                 // '$' 'comment'\n     || lk == 50207                 // '$' 'constraint'\n     || lk == 50719                 // '$' 'construction'\n     || lk == 52255                 // '$' 'context'\n     || lk == 52767                 // '$' 'continue'\n     || lk == 53279                 // '$' 'copy'\n     || lk == 53791                 // '$' 'copy-namespaces'\n     || lk == 54303                 // '$' 'count'\n     || lk == 54815                 // '$' 'decimal-format'\n     || lk == 55839                 // '$' 'declare'\n     || lk == 56351                 // '$' 'default'\n     || lk == 56863                 // '$' 'delete'\n     || lk == 57375                 // '$' 'descendant'\n     || lk == 57887                 // '$' 'descendant-or-self'\n     || lk == 58399                 // '$' 'descending'\n     || lk == 60959                 // '$' 'div'\n     || lk == 61471                 // '$' 'document'\n     || lk == 61983                 // '$' 'document-node'\n     || lk == 62495                 // '$' 'element'\n     || lk == 63007                 // '$' 'else'\n     || lk == 63519                 // '$' 'empty'\n     || lk == 64031                 // '$' 'empty-sequence'\n     || lk == 64543                 // '$' 'encoding'\n     || lk == 65055                 // '$' 'end'\n     || lk == 66079                 // '$' 'eq'\n     || lk == 66591                 // '$' 'every'\n     || lk == 67615                 // '$' 'except'\n     || lk == 68127                 // '$' 'exit'\n     || lk == 68639                 // '$' 'external'\n     || lk == 69151                 // '$' 'false'\n     || lk == 69663                 // '$' 'first'\n     || lk == 70175                 // '$' 'following'\n     || lk == 70687                 // '$' 'following-sibling'\n     || lk == 71199                 // '$' 'for'\n     || lk == 72735                 // '$' 'from'\n     || lk == 73247                 // '$' 'ft-option'\n     || lk == 75295                 // '$' 'function'\n     || lk == 75807                 // '$' 'ge'\n     || lk == 76831                 // '$' 'group'\n     || lk == 77855                 // '$' 'gt'\n     || lk == 78367                 // '$' 'idiv'\n     || lk == 78879                 // '$' 'if'\n     || lk == 79391                 // '$' 'import'\n     || lk == 79903                 // '$' 'in'\n     || lk == 80415                 // '$' 'index'\n     || lk == 82463                 // '$' 'insert'\n     || lk == 82975                 // '$' 'instance'\n     || lk == 83487                 // '$' 'integrity'\n     || lk == 83999                 // '$' 'intersect'\n     || lk == 84511                 // '$' 'into'\n     || lk == 85023                 // '$' 'is'\n     || lk == 85535                 // '$' 'item'\n     || lk == 86047                 // '$' 'json'\n     || lk == 86559                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'jsoniq'\n     || lk == 88607                 // '$' 'last'\n     || lk == 89119                 // '$' 'lax'\n     || lk == 89631                 // '$' 'le'\n     || lk == 90655                 // '$' 'let'\n     || lk == 91679                 // '$' 'loop'\n     || lk == 92703                 // '$' 'lt'\n     || lk == 93727                 // '$' 'mod'\n     || lk == 94239                 // '$' 'modify'\n     || lk == 94751                 // '$' 'module'\n     || lk == 95775                 // '$' 'namespace'\n     || lk == 96287                 // '$' 'namespace-node'\n     || lk == 96799                 // '$' 'ne'\n     || lk == 99359                 // '$' 'node'\n     || lk == 99871                 // '$' 'nodes'\n     || lk == 100895                // '$' 'null'\n     || lk == 101407                // '$' 'object'\n     || lk == 103455                // '$' 'only'\n     || lk == 103967                // '$' 'option'\n     || lk == 104479                // '$' 'or'\n     || lk == 104991                // '$' 'order'\n     || lk == 105503                // '$' 'ordered'\n     || lk == 106015                // '$' 'ordering'\n     || lk == 107551                // '$' 'parent'\n     || lk == 110623                // '$' 'preceding'\n     || lk == 111135                // '$' 'preceding-sibling'\n     || lk == 112671                // '$' 'processing-instruction'\n     || lk == 113695                // '$' 'rename'\n     || lk == 114207                // '$' 'replace'\n     || lk == 114719                // '$' 'return'\n     || lk == 115231                // '$' 'returning'\n     || lk == 115743                // '$' 'revalidation'\n     || lk == 116767                // '$' 'satisfies'\n     || lk == 117279                // '$' 'schema'\n     || lk == 117791                // '$' 'schema-attribute'\n     || lk == 118303                // '$' 'schema-element'\n     || lk == 118815                // '$' 'score'\n     || lk == 119327                // '$' 'select'\n     || lk == 119839                // '$' 'self'\n     || lk == 122399                // '$' 'sliding'\n     || lk == 122911                // '$' 'some'\n     || lk == 123423                // '$' 'stable'\n     || lk == 123935                // '$' 'start'\n     || lk == 125471                // '$' 'strict'\n     || lk == 126495                // '$' 'structured-item'\n     || lk == 127007                // '$' 'switch'\n     || lk == 127519                // '$' 'text'\n     || lk == 129567                // '$' 'to'\n     || lk == 130079                // '$' 'treat'\n     || lk == 130591                // '$' 'true'\n     || lk == 131103                // '$' 'try'\n     || lk == 131615                // '$' 'tumbling'\n     || lk == 132127                // '$' 'type'\n     || lk == 132639                // '$' 'typeswitch'\n     || lk == 133151                // '$' 'union'\n     || lk == 134175                // '$' 'unordered'\n     || lk == 134687                // '$' 'updating'\n     || lk == 136223                // '$' 'validate'\n     || lk == 136735                // '$' 'value'\n     || lk == 137247                // '$' 'variable'\n     || lk == 137759                // '$' 'version'\n     || lk == 139295                // '$' 'where'\n     || lk == 139807                // '$' 'while'\n     || lk == 141343)               // '$' 'with'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(205);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 53              // ':='\n           || l1 == 80)             // 'as'\n          {\n            if (l1 == 80)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(28);        // S^WS | '(:' | ':='\n            shiftT(53);             // ':='\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 95)             // 'collation'\n          {\n            shiftT(95);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          memoize(2, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(2, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_GroupingVariable();\n      lookahead1W(205);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 53                  // ':='\n       || l1 == 80)                 // 'as'\n      {\n        if (l1 == 80)               // 'as'\n        {\n          try_TypeDeclaration();\n        }\n        lookahead1W(28);            // S^WS | '(:' | ':='\n        shiftT(53);                 // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_ExprSingle();\n      }\n      if (l1 == 95)                 // 'collation'\n      {\n        shiftT(95);                 // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shiftT(7);                  // URILiteral\n      }\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_GroupingVariable()\n  {\n    eventHandler.startNonterminal(\"GroupingVariable\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"GroupingVariable\", e0);\n  }\n\n  function try_GroupingVariable()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_OrderByClause()\n  {\n    eventHandler.startNonterminal(\"OrderByClause\", e0);\n    switch (l1)\n    {\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shift(88);                    // 'by'\n      break;\n    default:\n      shift(241);                   // 'stable'\n      lookahead1W(70);              // S^WS | '(:' | 'order'\n      shift(205);                   // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shift(88);                    // 'by'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_OrderSpecList();\n    eventHandler.endNonterminal(\"OrderByClause\", e0);\n  }\n\n  function try_OrderByClause()\n  {\n    switch (l1)\n    {\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shiftT(88);                   // 'by'\n      break;\n    default:\n      shiftT(241);                  // 'stable'\n      lookahead1W(70);              // S^WS | '(:' | 'order'\n      shiftT(205);                  // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shiftT(88);                   // 'by'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_OrderSpecList();\n  }\n\n  function parse_OrderSpecList()\n  {\n    eventHandler.startNonterminal(\"OrderSpecList\", e0);\n    parse_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_OrderSpec();\n    }\n    eventHandler.endNonterminal(\"OrderSpecList\", e0);\n  }\n\n  function try_OrderSpecList()\n  {\n    try_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_OrderSpec();\n    }\n  }\n\n  function parse_OrderSpec()\n  {\n    eventHandler.startNonterminal(\"OrderSpec\", e0);\n    parse_ExprSingle();\n    whitespace();\n    parse_OrderModifier();\n    eventHandler.endNonterminal(\"OrderSpec\", e0);\n  }\n\n  function try_OrderSpec()\n  {\n    try_ExprSingle();\n    try_OrderModifier();\n  }\n\n  function parse_OrderModifier()\n  {\n    eventHandler.startNonterminal(\"OrderModifier\", e0);\n    if (l1 == 81                    // 'ascending'\n     || l1 == 114)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 81:                      // 'ascending'\n        shift(81);                  // 'ascending'\n        break;\n      default:\n        shift(114);                 // 'descending'\n      }\n    }\n    lookahead1W(202);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 124)                  // 'empty'\n    {\n      shift(124);                   // 'empty'\n      lookahead1W(125);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 149:                     // 'greatest'\n        shift(149);                 // 'greatest'\n        break;\n      default:\n        shift(176);                 // 'least'\n      }\n    }\n    lookahead1W(199);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 95)                   // 'collation'\n    {\n      shift(95);                    // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n    }\n    eventHandler.endNonterminal(\"OrderModifier\", e0);\n  }\n\n  function try_OrderModifier()\n  {\n    if (l1 == 81                    // 'ascending'\n     || l1 == 114)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 81:                      // 'ascending'\n        shiftT(81);                 // 'ascending'\n        break;\n      default:\n        shiftT(114);                // 'descending'\n      }\n    }\n    lookahead1W(202);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 124)                  // 'empty'\n    {\n      shiftT(124);                  // 'empty'\n      lookahead1W(125);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 149:                     // 'greatest'\n        shiftT(149);                // 'greatest'\n        break;\n      default:\n        shiftT(176);                // 'least'\n      }\n    }\n    lookahead1W(199);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 95)                   // 'collation'\n    {\n      shiftT(95);                   // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n    }\n  }\n\n  function parse_ReturnClause()\n  {\n    eventHandler.startNonterminal(\"ReturnClause\", e0);\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReturnClause\", e0);\n  }\n\n  function try_ReturnClause()\n  {\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedExpr()\n  {\n    eventHandler.startNonterminal(\"QuantifiedExpr\", e0);\n    switch (l1)\n    {\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    default:\n      shift(130);                   // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_QuantifiedVarDecl();\n    }\n    shift(228);                     // 'satisfies'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedExpr\", e0);\n  }\n\n  function try_QuantifiedExpr()\n  {\n    switch (l1)\n    {\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    default:\n      shiftT(130);                  // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_QuantifiedVarDecl();\n    }\n    shiftT(228);                    // 'satisfies'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedVarDecl()\n  {\n    eventHandler.startNonterminal(\"QuantifiedVarDecl\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedVarDecl\", e0);\n  }\n\n  function try_QuantifiedVarDecl()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchExpr()\n  {\n    eventHandler.startNonterminal(\"SwitchExpr\", e0);\n    shift(248);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchExpr\", e0);\n  }\n\n  function try_SwitchExpr()\n  {\n    shiftT(248);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_SwitchCaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseClause()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseClause\", e0);\n    for (;;)\n    {\n      shift(89);                    // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseClause\", e0);\n  }\n\n  function try_SwitchCaseClause()\n  {\n    for (;;)\n    {\n      shiftT(89);                   // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseOperand()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseOperand\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseOperand\", e0);\n  }\n\n  function try_SwitchCaseOperand()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TypeswitchExpr()\n  {\n    eventHandler.startNonterminal(\"TypeswitchExpr\", e0);\n    shift(259);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TypeswitchExpr\", e0);\n  }\n\n  function try_TypeswitchExpr()\n  {\n    shiftT(259);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_CaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CaseClause()\n  {\n    eventHandler.startNonterminal(\"CaseClause\", e0);\n    shift(89);                      // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceTypeUnion();\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"CaseClause\", e0);\n  }\n\n  function try_CaseClause()\n  {\n    shiftT(89);                     // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceTypeUnion();\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SequenceTypeUnion()\n  {\n    eventHandler.startNonterminal(\"SequenceTypeUnion\", e0);\n    parse_SequenceType();\n    for (;;)\n    {\n      lookahead1W(138);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shift(284);                   // '|'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"SequenceTypeUnion\", e0);\n  }\n\n  function try_SequenceTypeUnion()\n  {\n    try_SequenceType();\n    for (;;)\n    {\n      lookahead1W(138);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shiftT(284);                  // '|'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_IfExpr()\n  {\n    eventHandler.startNonterminal(\"IfExpr\", e0);\n    shift(154);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shift(250);                     // 'then'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(123);                     // 'else'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"IfExpr\", e0);\n  }\n\n  function try_IfExpr()\n  {\n    shiftT(154);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shiftT(250);                    // 'then'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(123);                    // 'else'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TryCatchExpr()\n  {\n    eventHandler.startNonterminal(\"TryCatchExpr\", e0);\n    parse_TryClause();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      whitespace();\n      parse_CatchClause();\n      lookahead1W(207);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 92)                 // 'catch'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchExpr\", e0);\n  }\n\n  function try_TryCatchExpr()\n  {\n    try_TryClause();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      try_CatchClause();\n      lookahead1W(207);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 92)                 // 'catch'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TryClause()\n  {\n    eventHandler.startNonterminal(\"TryClause\", e0);\n    shift(256);                     // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TryTargetExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"TryClause\", e0);\n  }\n\n  function try_TryClause()\n  {\n    shiftT(256);                    // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TryTargetExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_TryTargetExpr()\n  {\n    eventHandler.startNonterminal(\"TryTargetExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"TryTargetExpr\", e0);\n  }\n\n  function try_TryTargetExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_CatchClause()\n  {\n    eventHandler.startNonterminal(\"CatchClause\", e0);\n    shift(92);                      // 'catch'\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_CatchErrorList();\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CatchClause\", e0);\n  }\n\n  function try_CatchClause()\n  {\n    shiftT(92);                     // 'catch'\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_CatchErrorList();\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_CatchErrorList()\n  {\n    eventHandler.startNonterminal(\"CatchErrorList\", e0);\n    parse_NameTest();\n    for (;;)\n    {\n      lookahead1W(140);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shift(284);                   // '|'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"CatchErrorList\", e0);\n  }\n\n  function try_CatchErrorList()\n  {\n    try_NameTest();\n    for (;;)\n    {\n      lookahead1W(140);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shiftT(284);                  // '|'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NameTest();\n    }\n  }\n\n  function parse_OrExpr()\n  {\n    eventHandler.startNonterminal(\"OrExpr\", e0);\n    parse_AndExpr();\n    for (;;)\n    {\n      if (l1 != 204)                // 'or'\n      {\n        break;\n      }\n      shift(204);                   // 'or'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AndExpr();\n    }\n    eventHandler.endNonterminal(\"OrExpr\", e0);\n  }\n\n  function try_OrExpr()\n  {\n    try_AndExpr();\n    for (;;)\n    {\n      if (l1 != 204)                // 'or'\n      {\n        break;\n      }\n      shiftT(204);                  // 'or'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AndExpr();\n    }\n  }\n\n  function parse_AndExpr()\n  {\n    eventHandler.startNonterminal(\"AndExpr\", e0);\n    parse_NotExpr();\n    for (;;)\n    {\n      if (l1 != 76)                 // 'and'\n      {\n        break;\n      }\n      shift(76);                    // 'and'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_NotExpr();\n    }\n    eventHandler.endNonterminal(\"AndExpr\", e0);\n  }\n\n  function try_AndExpr()\n  {\n    try_NotExpr();\n    for (;;)\n    {\n      if (l1 != 76)                 // 'and'\n      {\n        break;\n      }\n      shiftT(76);                   // 'and'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_NotExpr();\n    }\n  }\n\n  function parse_NotExpr()\n  {\n    eventHandler.startNonterminal(\"NotExpr\", e0);\n    if (l1 == 196)                  // 'not'\n    {\n      shift(196);                   // 'not'\n    }\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ComparisonExpr();\n    eventHandler.endNonterminal(\"NotExpr\", e0);\n  }\n\n  function try_NotExpr()\n  {\n    if (l1 == 196)                  // 'not'\n    {\n      shiftT(196);                  // 'not'\n    }\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ComparisonExpr();\n  }\n\n  function parse_ComparisonExpr()\n  {\n    eventHandler.startNonterminal(\"ComparisonExpr\", e0);\n    parse_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 55                    // '<'\n     || l1 == 58                    // '<<'\n     || l1 == 59                    // '<='\n     || l1 == 61                    // '='\n     || l1 == 62                    // '>'\n     || l1 == 63                    // '>='\n     || l1 == 64                    // '>>'\n     || l1 == 129                   // 'eq'\n     || l1 == 148                   // 'ge'\n     || l1 == 152                   // 'gt'\n     || l1 == 166                   // 'is'\n     || l1 == 175                   // 'le'\n     || l1 == 181                   // 'lt'\n     || l1 == 189)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 129:                     // 'eq'\n      case 148:                     // 'ge'\n      case 152:                     // 'gt'\n      case 175:                     // 'le'\n      case 181:                     // 'lt'\n      case 189:                     // 'ne'\n        whitespace();\n        parse_ValueComp();\n        break;\n      case 58:                      // '<<'\n      case 64:                      // '>>'\n      case 166:                     // 'is'\n        whitespace();\n        parse_NodeComp();\n        break;\n      default:\n        whitespace();\n        parse_GeneralComp();\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_FTContainsExpr();\n    }\n    eventHandler.endNonterminal(\"ComparisonExpr\", e0);\n  }\n\n  function try_ComparisonExpr()\n  {\n    try_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 55                    // '<'\n     || l1 == 58                    // '<<'\n     || l1 == 59                    // '<='\n     || l1 == 61                    // '='\n     || l1 == 62                    // '>'\n     || l1 == 63                    // '>='\n     || l1 == 64                    // '>>'\n     || l1 == 129                   // 'eq'\n     || l1 == 148                   // 'ge'\n     || l1 == 152                   // 'gt'\n     || l1 == 166                   // 'is'\n     || l1 == 175                   // 'le'\n     || l1 == 181                   // 'lt'\n     || l1 == 189)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 129:                     // 'eq'\n      case 148:                     // 'ge'\n      case 152:                     // 'gt'\n      case 175:                     // 'le'\n      case 181:                     // 'lt'\n      case 189:                     // 'ne'\n        try_ValueComp();\n        break;\n      case 58:                      // '<<'\n      case 64:                      // '>>'\n      case 166:                     // 'is'\n        try_NodeComp();\n        break;\n      default:\n        try_GeneralComp();\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_FTContainsExpr();\n    }\n  }\n\n  function parse_FTContainsExpr()\n  {\n    eventHandler.startNonterminal(\"FTContainsExpr\", e0);\n    parse_StringConcatExpr();\n    if (l1 == 100)                  // 'contains'\n    {\n      shift(100);                   // 'contains'\n      lookahead1W(79);              // S^WS | '(:' | 'text'\n      shift(249);                   // 'text'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      if (l1 == 277)                // 'without'\n      {\n        whitespace();\n        parse_FTIgnoreOption();\n      }\n    }\n    eventHandler.endNonterminal(\"FTContainsExpr\", e0);\n  }\n\n  function try_FTContainsExpr()\n  {\n    try_StringConcatExpr();\n    if (l1 == 100)                  // 'contains'\n    {\n      shiftT(100);                  // 'contains'\n      lookahead1W(79);              // S^WS | '(:' | 'text'\n      shiftT(249);                  // 'text'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      if (l1 == 277)                // 'without'\n      {\n        try_FTIgnoreOption();\n      }\n    }\n  }\n\n  function parse_StringConcatExpr()\n  {\n    eventHandler.startNonterminal(\"StringConcatExpr\", e0);\n    parse_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 285)                // '||'\n      {\n        break;\n      }\n      shift(285);                   // '||'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_RangeExpr();\n    }\n    eventHandler.endNonterminal(\"StringConcatExpr\", e0);\n  }\n\n  function try_StringConcatExpr()\n  {\n    try_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 285)                // '||'\n      {\n        break;\n      }\n      shiftT(285);                  // '||'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_RangeExpr();\n    }\n  }\n\n  function parse_RangeExpr()\n  {\n    eventHandler.startNonterminal(\"RangeExpr\", e0);\n    parse_AdditiveExpr();\n    if (l1 == 253)                  // 'to'\n    {\n      shift(253);                   // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"RangeExpr\", e0);\n  }\n\n  function try_RangeExpr()\n  {\n    try_AdditiveExpr();\n    if (l1 == 253)                  // 'to'\n    {\n      shiftT(253);                  // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_AdditiveExpr()\n  {\n    eventHandler.startNonterminal(\"AdditiveExpr\", e0);\n    parse_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 41:                      // '+'\n        shift(41);                  // '+'\n        break;\n      default:\n        shift(43);                  // '-'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_MultiplicativeExpr();\n    }\n    eventHandler.endNonterminal(\"AdditiveExpr\", e0);\n  }\n\n  function try_AdditiveExpr()\n  {\n    try_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 41:                      // '+'\n        shiftT(41);                 // '+'\n        break;\n      default:\n        shiftT(43);                 // '-'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_MultiplicativeExpr();\n    }\n  }\n\n  function parse_MultiplicativeExpr()\n  {\n    eventHandler.startNonterminal(\"MultiplicativeExpr\", e0);\n    parse_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 39                  // '*'\n       && l1 != 119                 // 'div'\n       && l1 != 153                 // 'idiv'\n       && l1 != 183)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 39:                      // '*'\n        shift(39);                  // '*'\n        break;\n      case 119:                     // 'div'\n        shift(119);                 // 'div'\n        break;\n      case 153:                     // 'idiv'\n        shift(153);                 // 'idiv'\n        break;\n      default:\n        shift(183);                 // 'mod'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_UnionExpr();\n    }\n    eventHandler.endNonterminal(\"MultiplicativeExpr\", e0);\n  }\n\n  function try_MultiplicativeExpr()\n  {\n    try_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 39                  // '*'\n       && l1 != 119                 // 'div'\n       && l1 != 153                 // 'idiv'\n       && l1 != 183)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 39:                      // '*'\n        shiftT(39);                 // '*'\n        break;\n      case 119:                     // 'div'\n        shiftT(119);                // 'div'\n        break;\n      case 153:                     // 'idiv'\n        shiftT(153);                // 'idiv'\n        break;\n      default:\n        shiftT(183);                // 'mod'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_UnionExpr();\n    }\n  }\n\n  function parse_UnionExpr()\n  {\n    eventHandler.startNonterminal(\"UnionExpr\", e0);\n    parse_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 260                 // 'union'\n       && l1 != 284)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 260:                     // 'union'\n        shift(260);                 // 'union'\n        break;\n      default:\n        shift(284);                 // '|'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_IntersectExceptExpr();\n    }\n    eventHandler.endNonterminal(\"UnionExpr\", e0);\n  }\n\n  function try_UnionExpr()\n  {\n    try_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 260                 // 'union'\n       && l1 != 284)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 260:                     // 'union'\n        shiftT(260);                // 'union'\n        break;\n      default:\n        shiftT(284);                // '|'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_IntersectExceptExpr();\n    }\n  }\n\n  function parse_IntersectExceptExpr()\n  {\n    eventHandler.startNonterminal(\"IntersectExceptExpr\", e0);\n    parse_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(221);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 132                 // 'except'\n       && l1 != 164)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 164:                     // 'intersect'\n        shift(164);                 // 'intersect'\n        break;\n      default:\n        shift(132);                 // 'except'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_InstanceofExpr();\n    }\n    eventHandler.endNonterminal(\"IntersectExceptExpr\", e0);\n  }\n\n  function try_IntersectExceptExpr()\n  {\n    try_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(221);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 132                 // 'except'\n       && l1 != 164)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 164:                     // 'intersect'\n        shiftT(164);                // 'intersect'\n        break;\n      default:\n        shiftT(132);                // 'except'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_InstanceofExpr();\n    }\n  }\n\n  function parse_InstanceofExpr()\n  {\n    eventHandler.startNonterminal(\"InstanceofExpr\", e0);\n    parse_TreatExpr();\n    lookahead1W(222);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 162)                  // 'instance'\n    {\n      shift(162);                   // 'instance'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shift(200);                   // 'of'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"InstanceofExpr\", e0);\n  }\n\n  function try_InstanceofExpr()\n  {\n    try_TreatExpr();\n    lookahead1W(222);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 162)                  // 'instance'\n    {\n      shiftT(162);                  // 'instance'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shiftT(200);                  // 'of'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_TreatExpr()\n  {\n    eventHandler.startNonterminal(\"TreatExpr\", e0);\n    parse_CastableExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 254)                  // 'treat'\n    {\n      shift(254);                   // 'treat'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"TreatExpr\", e0);\n  }\n\n  function try_TreatExpr()\n  {\n    try_CastableExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 254)                  // 'treat'\n    {\n      shiftT(254);                  // 'treat'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_CastableExpr()\n  {\n    eventHandler.startNonterminal(\"CastableExpr\", e0);\n    parse_CastExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 91)                   // 'castable'\n    {\n      shift(91);                    // 'castable'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastableExpr\", e0);\n  }\n\n  function try_CastableExpr()\n  {\n    try_CastExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 91)                   // 'castable'\n    {\n      shiftT(91);                   // 'castable'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_CastExpr()\n  {\n    eventHandler.startNonterminal(\"CastExpr\", e0);\n    parse_UnaryExpr();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'cast'\n    {\n      shift(90);                    // 'cast'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastExpr\", e0);\n  }\n\n  function try_CastExpr()\n  {\n    try_UnaryExpr();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'cast'\n    {\n      shiftT(90);                   // 'cast'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_UnaryExpr()\n  {\n    eventHandler.startNonterminal(\"UnaryExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 43:                      // '-'\n        shift(43);                  // '-'\n        break;\n      default:\n        shift(41);                  // '+'\n      }\n    }\n    whitespace();\n    parse_ValueExpr();\n    eventHandler.endNonterminal(\"UnaryExpr\", e0);\n  }\n\n  function try_UnaryExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 43:                      // '-'\n        shiftT(43);                 // '-'\n        break;\n      default:\n        shiftT(41);                 // '+'\n      }\n    }\n    try_ValueExpr();\n  }\n\n  function parse_ValueExpr()\n  {\n    eventHandler.startNonterminal(\"ValueExpr\", e0);\n    switch (l1)\n    {\n    case 266:                       // 'validate'\n      lookahead2W(188);             // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 89354:                     // 'validate' 'lax'\n    case 125706:                    // 'validate' 'strict'\n    case 132362:                    // 'validate' 'type'\n    case 144138:                    // 'validate' '{'\n      parse_ValidateExpr();\n      break;\n    case 36:                        // '(#'\n      parse_ExtensionExpr();\n      break;\n    default:\n      parse_SimpleMapExpr();\n    }\n    eventHandler.endNonterminal(\"ValueExpr\", e0);\n  }\n\n  function try_ValueExpr()\n  {\n    switch (l1)\n    {\n    case 266:                       // 'validate'\n      lookahead2W(188);             // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 89354:                     // 'validate' 'lax'\n    case 125706:                    // 'validate' 'strict'\n    case 132362:                    // 'validate' 'type'\n    case 144138:                    // 'validate' '{'\n      try_ValidateExpr();\n      break;\n    case 36:                        // '(#'\n      try_ExtensionExpr();\n      break;\n    default:\n      try_SimpleMapExpr();\n    }\n  }\n\n  function parse_SimpleMapExpr()\n  {\n    eventHandler.startNonterminal(\"SimpleMapExpr\", e0);\n    parse_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shift(26);                    // '!'\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PathExpr();\n    }\n    eventHandler.endNonterminal(\"SimpleMapExpr\", e0);\n  }\n\n  function try_SimpleMapExpr()\n  {\n    try_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shiftT(26);                   // '!'\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PathExpr();\n    }\n  }\n\n  function parse_GeneralComp()\n  {\n    eventHandler.startNonterminal(\"GeneralComp\", e0);\n    switch (l1)\n    {\n    case 61:                        // '='\n      shift(61);                    // '='\n      break;\n    case 27:                        // '!='\n      shift(27);                    // '!='\n      break;\n    case 55:                        // '<'\n      shift(55);                    // '<'\n      break;\n    case 59:                        // '<='\n      shift(59);                    // '<='\n      break;\n    case 62:                        // '>'\n      shift(62);                    // '>'\n      break;\n    default:\n      shift(63);                    // '>='\n    }\n    eventHandler.endNonterminal(\"GeneralComp\", e0);\n  }\n\n  function try_GeneralComp()\n  {\n    switch (l1)\n    {\n    case 61:                        // '='\n      shiftT(61);                   // '='\n      break;\n    case 27:                        // '!='\n      shiftT(27);                   // '!='\n      break;\n    case 55:                        // '<'\n      shiftT(55);                   // '<'\n      break;\n    case 59:                        // '<='\n      shiftT(59);                   // '<='\n      break;\n    case 62:                        // '>'\n      shiftT(62);                   // '>'\n      break;\n    default:\n      shiftT(63);                   // '>='\n    }\n  }\n\n  function parse_ValueComp()\n  {\n    eventHandler.startNonterminal(\"ValueComp\", e0);\n    switch (l1)\n    {\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    default:\n      shift(148);                   // 'ge'\n    }\n    eventHandler.endNonterminal(\"ValueComp\", e0);\n  }\n\n  function try_ValueComp()\n  {\n    switch (l1)\n    {\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    default:\n      shiftT(148);                  // 'ge'\n    }\n  }\n\n  function parse_NodeComp()\n  {\n    eventHandler.startNonterminal(\"NodeComp\", e0);\n    switch (l1)\n    {\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 58:                        // '<<'\n      shift(58);                    // '<<'\n      break;\n    default:\n      shift(64);                    // '>>'\n    }\n    eventHandler.endNonterminal(\"NodeComp\", e0);\n  }\n\n  function try_NodeComp()\n  {\n    switch (l1)\n    {\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 58:                        // '<<'\n      shiftT(58);                   // '<<'\n      break;\n    default:\n      shiftT(64);                   // '>>'\n    }\n  }\n\n  function parse_ValidateExpr()\n  {\n    eventHandler.startNonterminal(\"ValidateExpr\", e0);\n    shift(266);                     // 'validate'\n    lookahead1W(175);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 281)                  // '{'\n    {\n      switch (l1)\n      {\n      case 258:                     // 'type'\n        shift(258);                 // 'type'\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        break;\n      default:\n        whitespace();\n        parse_ValidationMode();\n      }\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ValidateExpr\", e0);\n  }\n\n  function try_ValidateExpr()\n  {\n    shiftT(266);                    // 'validate'\n    lookahead1W(175);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 281)                  // '{'\n    {\n      switch (l1)\n      {\n      case 258:                     // 'type'\n        shiftT(258);                // 'type'\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        break;\n      default:\n        try_ValidationMode();\n      }\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_ValidationMode()\n  {\n    eventHandler.startNonterminal(\"ValidationMode\", e0);\n    switch (l1)\n    {\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    default:\n      shift(245);                   // 'strict'\n    }\n    eventHandler.endNonterminal(\"ValidationMode\", e0);\n  }\n\n  function try_ValidationMode()\n  {\n    switch (l1)\n    {\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    default:\n      shiftT(245);                  // 'strict'\n    }\n  }\n\n  function parse_ExtensionExpr()\n  {\n    eventHandler.startNonterminal(\"ExtensionExpr\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(281);                     // '{'\n    lookahead1W(274);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ExtensionExpr\", e0);\n  }\n\n  function try_ExtensionExpr()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(281);                    // '{'\n    lookahead1W(274);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      try_Expr();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_Pragma()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    shift(36);                      // '(#'\n    lookahead1(242);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n    }\n    parse_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(0);                // PragmaContents\n      shift(1);                     // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shift(30);                      // '#)'\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  }\n\n  function try_Pragma()\n  {\n    shiftT(36);                     // '(#'\n    lookahead1(242);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n    }\n    try_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(0);                // PragmaContents\n      shiftT(1);                    // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shiftT(30);                     // '#)'\n  }\n\n  function parse_PathExpr()\n  {\n    eventHandler.startNonterminal(\"PathExpr\", e0);\n    switch (l1)\n    {\n    case 47:                        // '/'\n      shift(47);                    // '/'\n      lookahead1W(288);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 38:                      // ')'\n      case 39:                      // '*'\n      case 41:                      // '+'\n      case 42:                      // ','\n      case 43:                      // '-'\n      case 50:                      // ':'\n      case 54:                      // ';'\n      case 58:                      // '<<'\n      case 59:                      // '<='\n      case 61:                      // '='\n      case 62:                      // '>'\n      case 63:                      // '>='\n      case 64:                      // '>>'\n      case 70:                      // ']'\n      case 88:                      // 'by'\n      case 100:                     // 'contains'\n      case 209:                     // 'paragraphs'\n      case 237:                     // 'sentences'\n      case 252:                     // 'times'\n      case 279:                     // 'words'\n      case 284:                     // '|'\n      case 285:                     // '||'\n      case 286:                     // '|}'\n      case 287:                     // '}'\n        break;\n      default:\n        whitespace();\n        parse_RelativePathExpr();\n      }\n      break;\n    case 48:                        // '//'\n      shift(48);                    // '//'\n      lookahead1W(259);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_RelativePathExpr();\n      break;\n    default:\n      parse_RelativePathExpr();\n    }\n    eventHandler.endNonterminal(\"PathExpr\", e0);\n  }\n\n  function try_PathExpr()\n  {\n    switch (l1)\n    {\n    case 47:                        // '/'\n      shiftT(47);                   // '/'\n      lookahead1W(288);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 38:                      // ')'\n      case 39:                      // '*'\n      case 41:                      // '+'\n      case 42:                      // ','\n      case 43:                      // '-'\n      case 50:                      // ':'\n      case 54:                      // ';'\n      case 58:                      // '<<'\n      case 59:                      // '<='\n      case 61:                      // '='\n      case 62:                      // '>'\n      case 63:                      // '>='\n      case 64:                      // '>>'\n      case 70:                      // ']'\n      case 88:                      // 'by'\n      case 100:                     // 'contains'\n      case 209:                     // 'paragraphs'\n      case 237:                     // 'sentences'\n      case 252:                     // 'times'\n      case 279:                     // 'words'\n      case 284:                     // '|'\n      case 285:                     // '||'\n      case 286:                     // '|}'\n      case 287:                     // '}'\n        break;\n      default:\n        try_RelativePathExpr();\n      }\n      break;\n    case 48:                        // '//'\n      shiftT(48);                   // '//'\n      lookahead1W(259);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_RelativePathExpr();\n      break;\n    default:\n      try_RelativePathExpr();\n    }\n  }\n\n  function parse_RelativePathExpr()\n  {\n    eventHandler.startNonterminal(\"RelativePathExpr\", e0);\n    parse_PostfixExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 38                  // ')'\n       && lk != 39                  // '*'\n       && lk != 41                  // '+'\n       && lk != 42                  // ','\n       && lk != 43                  // '-'\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 50                  // ':'\n       && lk != 54                  // ';'\n       && lk != 55                  // '<'\n       && lk != 58                  // '<<'\n       && lk != 59                  // '<='\n       && lk != 61                  // '='\n       && lk != 62                  // '>'\n       && lk != 63                  // '>='\n       && lk != 64                  // '>>'\n       && lk != 70                  // ']'\n       && lk != 71                  // 'after'\n       && lk != 76                  // 'and'\n       && lk != 80                  // 'as'\n       && lk != 81                  // 'ascending'\n       && lk != 82                  // 'at'\n       && lk != 85                  // 'before'\n       && lk != 88                  // 'by'\n       && lk != 89                  // 'case'\n       && lk != 90                  // 'cast'\n       && lk != 91                  // 'castable'\n       && lk != 95                  // 'collation'\n       && lk != 100                 // 'contains'\n       && lk != 106                 // 'count'\n       && lk != 110                 // 'default'\n       && lk != 114                 // 'descending'\n       && lk != 119                 // 'div'\n       && lk != 123                 // 'else'\n       && lk != 124                 // 'empty'\n       && lk != 127                 // 'end'\n       && lk != 129                 // 'eq'\n       && lk != 132                 // 'except'\n       && lk != 139                 // 'for'\n       && lk != 148                 // 'ge'\n       && lk != 150                 // 'group'\n       && lk != 152                 // 'gt'\n       && lk != 153                 // 'idiv'\n       && lk != 162                 // 'instance'\n       && lk != 164                 // 'intersect'\n       && lk != 165                 // 'into'\n       && lk != 166                 // 'is'\n       && lk != 175                 // 'le'\n       && lk != 177                 // 'let'\n       && lk != 181                 // 'lt'\n       && lk != 183                 // 'mod'\n       && lk != 184                 // 'modify'\n       && lk != 189                 // 'ne'\n       && lk != 202                 // 'only'\n       && lk != 204                 // 'or'\n       && lk != 205                 // 'order'\n       && lk != 209                 // 'paragraphs'\n       && lk != 224                 // 'return'\n       && lk != 228                 // 'satisfies'\n       && lk != 237                 // 'sentences'\n       && lk != 241                 // 'stable'\n       && lk != 242                 // 'start'\n       && lk != 252                 // 'times'\n       && lk != 253                 // 'to'\n       && lk != 254                 // 'treat'\n       && lk != 260                 // 'union'\n       && lk != 272                 // 'where'\n       && lk != 276                 // 'with'\n       && lk != 279                 // 'words'\n       && lk != 284                 // '|'\n       && lk != 285                 // '||'\n       && lk != 286                 // '|}'\n       && lk != 287                 // '}'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 24090               // '!' '/'\n       && lk != 24602               // '!' '//'\n       && lk != 34330)              // '!' '@'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 47:                // '/'\n              shiftT(47);           // '/'\n              break;\n            case 48:                // '//'\n              shiftT(48);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(3, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 34330)              // '!' '@'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 47:                      // '/'\n        shift(47);                  // '/'\n        break;\n      case 48:                      // '//'\n        shift(48);                  // '//'\n        break;\n      default:\n        shift(26);                  // '!'\n      }\n      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_StepExpr();\n    }\n    eventHandler.endNonterminal(\"RelativePathExpr\", e0);\n  }\n\n  function try_RelativePathExpr()\n  {\n    try_PostfixExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 38                  // ')'\n       && lk != 39                  // '*'\n       && lk != 41                  // '+'\n       && lk != 42                  // ','\n       && lk != 43                  // '-'\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 50                  // ':'\n       && lk != 54                  // ';'\n       && lk != 55                  // '<'\n       && lk != 58                  // '<<'\n       && lk != 59                  // '<='\n       && lk != 61                  // '='\n       && lk != 62                  // '>'\n       && lk != 63                  // '>='\n       && lk != 64                  // '>>'\n       && lk != 70                  // ']'\n       && lk != 71                  // 'after'\n       && lk != 76                  // 'and'\n       && lk != 80                  // 'as'\n       && lk != 81                  // 'ascending'\n       && lk != 82                  // 'at'\n       && lk != 85                  // 'before'\n       && lk != 88                  // 'by'\n       && lk != 89                  // 'case'\n       && lk != 90                  // 'cast'\n       && lk != 91                  // 'castable'\n       && lk != 95                  // 'collation'\n       && lk != 100                 // 'contains'\n       && lk != 106                 // 'count'\n       && lk != 110                 // 'default'\n       && lk != 114                 // 'descending'\n       && lk != 119                 // 'div'\n       && lk != 123                 // 'else'\n       && lk != 124                 // 'empty'\n       && lk != 127                 // 'end'\n       && lk != 129                 // 'eq'\n       && lk != 132                 // 'except'\n       && lk != 139                 // 'for'\n       && lk != 148                 // 'ge'\n       && lk != 150                 // 'group'\n       && lk != 152                 // 'gt'\n       && lk != 153                 // 'idiv'\n       && lk != 162                 // 'instance'\n       && lk != 164                 // 'intersect'\n       && lk != 165                 // 'into'\n       && lk != 166                 // 'is'\n       && lk != 175                 // 'le'\n       && lk != 177                 // 'let'\n       && lk != 181                 // 'lt'\n       && lk != 183                 // 'mod'\n       && lk != 184                 // 'modify'\n       && lk != 189                 // 'ne'\n       && lk != 202                 // 'only'\n       && lk != 204                 // 'or'\n       && lk != 205                 // 'order'\n       && lk != 209                 // 'paragraphs'\n       && lk != 224                 // 'return'\n       && lk != 228                 // 'satisfies'\n       && lk != 237                 // 'sentences'\n       && lk != 241                 // 'stable'\n       && lk != 242                 // 'start'\n       && lk != 252                 // 'times'\n       && lk != 253                 // 'to'\n       && lk != 254                 // 'treat'\n       && lk != 260                 // 'union'\n       && lk != 272                 // 'where'\n       && lk != 276                 // 'with'\n       && lk != 279                 // 'words'\n       && lk != 284                 // '|'\n       && lk != 285                 // '||'\n       && lk != 286                 // '|}'\n       && lk != 287                 // '}'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 24090               // '!' '/'\n       && lk != 24602               // '!' '//'\n       && lk != 34330)              // '!' '@'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 47:                // '/'\n              shiftT(47);           // '/'\n              break;\n            case 48:                // '//'\n              shiftT(48);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            memoize(3, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(3, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 34330)              // '!' '@'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 47:                      // '/'\n        shiftT(47);                 // '/'\n        break;\n      case 48:                      // '//'\n        shiftT(48);                 // '//'\n        break;\n      default:\n        shiftT(26);                 // '!'\n      }\n      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_StepExpr();\n    }\n  }\n\n  function parse_StepExpr()\n  {\n    eventHandler.startNonterminal(\"StepExpr\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(287);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 122:                       // 'element'\n      lookahead2W(286);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 187:                       // 'namespace'\n    case 220:                       // 'processing-instruction'\n      lookahead2W(284);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 97:                        // 'comment'\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 249:                       // 'text'\n    case 262:                       // 'unordered'\n      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 79:                        // 'array'\n    case 125:                       // 'empty-sequence'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 234:                       // 'self'\n      lookahead2W(237);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 121:                       // 'document-node'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 188:                       // 'namespace-node'\n    case 189:                       // 'ne'\n    case 194:                       // 'node'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12935                 // 'false' EOF\n     || lk == 12997                 // 'null' EOF\n     || lk == 13055                 // 'true' EOF\n     || lk == 13447                 // 'false' '!'\n     || lk == 13509                 // 'null' '!'\n     || lk == 13567                 // 'true' '!'\n     || lk == 13959                 // 'false' '!='\n     || lk == 14021                 // 'null' '!='\n     || lk == 14079                 // 'true' '!='\n     || lk == 19591                 // 'false' ')'\n     || lk == 19653                 // 'null' ')'\n     || lk == 19711                 // 'true' ')'\n     || lk == 20103                 // 'false' '*'\n     || lk == 20165                 // 'null' '*'\n     || lk == 20223                 // 'true' '*'\n     || lk == 21127                 // 'false' '+'\n     || lk == 21189                 // 'null' '+'\n     || lk == 21247                 // 'true' '+'\n     || lk == 21639                 // 'false' ','\n     || lk == 21701                 // 'null' ','\n     || lk == 21759                 // 'true' ','\n     || lk == 22151                 // 'false' '-'\n     || lk == 22213                 // 'null' '-'\n     || lk == 22271                 // 'true' '-'\n     || lk == 24199                 // 'false' '/'\n     || lk == 24261                 // 'null' '/'\n     || lk == 24319                 // 'true' '/'\n     || lk == 24711                 // 'false' '//'\n     || lk == 24773                 // 'null' '//'\n     || lk == 24831                 // 'true' '//'\n     || lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855                 // 'true' ':'\n     || lk == 27783                 // 'false' ';'\n     || lk == 27845                 // 'null' ';'\n     || lk == 27903                 // 'true' ';'\n     || lk == 28295                 // 'false' '<'\n     || lk == 28357                 // 'null' '<'\n     || lk == 28415                 // 'true' '<'\n     || lk == 29831                 // 'false' '<<'\n     || lk == 29893                 // 'null' '<<'\n     || lk == 29951                 // 'true' '<<'\n     || lk == 30343                 // 'false' '<='\n     || lk == 30405                 // 'null' '<='\n     || lk == 30463                 // 'true' '<='\n     || lk == 31367                 // 'false' '='\n     || lk == 31429                 // 'null' '='\n     || lk == 31487                 // 'true' '='\n     || lk == 31879                 // 'false' '>'\n     || lk == 31941                 // 'null' '>'\n     || lk == 31999                 // 'true' '>'\n     || lk == 32391                 // 'false' '>='\n     || lk == 32453                 // 'null' '>='\n     || lk == 32511                 // 'true' '>='\n     || lk == 32903                 // 'false' '>>'\n     || lk == 32965                 // 'null' '>>'\n     || lk == 33023                 // 'true' '>>'\n     || lk == 35463                 // 'false' '['\n     || lk == 35525                 // 'null' '['\n     || lk == 35583                 // 'true' '['\n     || lk == 35975                 // 'false' ']'\n     || lk == 36037                 // 'null' ']'\n     || lk == 36095                 // 'true' ']'\n     || lk == 36435                 // 'attribute' 'after'\n     || lk == 36474                 // 'element' 'after'\n     || lk == 36487                 // 'false' 'after'\n     || lk == 36539                 // 'namespace' 'after'\n     || lk == 36549                 // 'null' 'after'\n     || lk == 36572                 // 'processing-instruction' 'after'\n     || lk == 36607                 // 'true' 'after'\n     || lk == 38995                 // 'attribute' 'and'\n     || lk == 39034                 // 'element' 'and'\n     || lk == 39047                 // 'false' 'and'\n     || lk == 39099                 // 'namespace' 'and'\n     || lk == 39109                 // 'null' 'and'\n     || lk == 39132                 // 'processing-instruction' 'and'\n     || lk == 39167                 // 'true' 'and'\n     || lk == 41043                 // 'attribute' 'as'\n     || lk == 41082                 // 'element' 'as'\n     || lk == 41095                 // 'false' 'as'\n     || lk == 41147                 // 'namespace' 'as'\n     || lk == 41157                 // 'null' 'as'\n     || lk == 41180                 // 'processing-instruction' 'as'\n     || lk == 41215                 // 'true' 'as'\n     || lk == 41555                 // 'attribute' 'ascending'\n     || lk == 41594                 // 'element' 'ascending'\n     || lk == 41607                 // 'false' 'ascending'\n     || lk == 41659                 // 'namespace' 'ascending'\n     || lk == 41669                 // 'null' 'ascending'\n     || lk == 41692                 // 'processing-instruction' 'ascending'\n     || lk == 41727                 // 'true' 'ascending'\n     || lk == 42067                 // 'attribute' 'at'\n     || lk == 42106                 // 'element' 'at'\n     || lk == 42119                 // 'false' 'at'\n     || lk == 42171                 // 'namespace' 'at'\n     || lk == 42181                 // 'null' 'at'\n     || lk == 42204                 // 'processing-instruction' 'at'\n     || lk == 42239                 // 'true' 'at'\n     || lk == 43603                 // 'attribute' 'before'\n     || lk == 43642                 // 'element' 'before'\n     || lk == 43655                 // 'false' 'before'\n     || lk == 43707                 // 'namespace' 'before'\n     || lk == 43717                 // 'null' 'before'\n     || lk == 43740                 // 'processing-instruction' 'before'\n     || lk == 43775                 // 'true' 'before'\n     || lk == 45191                 // 'false' 'by'\n     || lk == 45253                 // 'null' 'by'\n     || lk == 45311                 // 'true' 'by'\n     || lk == 45651                 // 'attribute' 'case'\n     || lk == 45690                 // 'element' 'case'\n     || lk == 45703                 // 'false' 'case'\n     || lk == 45755                 // 'namespace' 'case'\n     || lk == 45765                 // 'null' 'case'\n     || lk == 45788                 // 'processing-instruction' 'case'\n     || lk == 45823                 // 'true' 'case'\n     || lk == 46163                 // 'attribute' 'cast'\n     || lk == 46202                 // 'element' 'cast'\n     || lk == 46215                 // 'false' 'cast'\n     || lk == 46267                 // 'namespace' 'cast'\n     || lk == 46277                 // 'null' 'cast'\n     || lk == 46300                 // 'processing-instruction' 'cast'\n     || lk == 46335                 // 'true' 'cast'\n     || lk == 46675                 // 'attribute' 'castable'\n     || lk == 46714                 // 'element' 'castable'\n     || lk == 46727                 // 'false' 'castable'\n     || lk == 46779                 // 'namespace' 'castable'\n     || lk == 46789                 // 'null' 'castable'\n     || lk == 46812                 // 'processing-instruction' 'castable'\n     || lk == 46847                 // 'true' 'castable'\n     || lk == 48723                 // 'attribute' 'collation'\n     || lk == 48762                 // 'element' 'collation'\n     || lk == 48775                 // 'false' 'collation'\n     || lk == 48827                 // 'namespace' 'collation'\n     || lk == 48837                 // 'null' 'collation'\n     || lk == 48860                 // 'processing-instruction' 'collation'\n     || lk == 48895                 // 'true' 'collation'\n     || lk == 51335                 // 'false' 'contains'\n     || lk == 51397                 // 'null' 'contains'\n     || lk == 51455                 // 'true' 'contains'\n     || lk == 54355                 // 'attribute' 'count'\n     || lk == 54394                 // 'element' 'count'\n     || lk == 54407                 // 'false' 'count'\n     || lk == 54459                 // 'namespace' 'count'\n     || lk == 54469                 // 'null' 'count'\n     || lk == 54492                 // 'processing-instruction' 'count'\n     || lk == 54527                 // 'true' 'count'\n     || lk == 56403                 // 'attribute' 'default'\n     || lk == 56442                 // 'element' 'default'\n     || lk == 56455                 // 'false' 'default'\n     || lk == 56507                 // 'namespace' 'default'\n     || lk == 56517                 // 'null' 'default'\n     || lk == 56540                 // 'processing-instruction' 'default'\n     || lk == 56575                 // 'true' 'default'\n     || lk == 58451                 // 'attribute' 'descending'\n     || lk == 58490                 // 'element' 'descending'\n     || lk == 58503                 // 'false' 'descending'\n     || lk == 58555                 // 'namespace' 'descending'\n     || lk == 58565                 // 'null' 'descending'\n     || lk == 58588                 // 'processing-instruction' 'descending'\n     || lk == 58623                 // 'true' 'descending'\n     || lk == 61011                 // 'attribute' 'div'\n     || lk == 61050                 // 'element' 'div'\n     || lk == 61063                 // 'false' 'div'\n     || lk == 61115                 // 'namespace' 'div'\n     || lk == 61125                 // 'null' 'div'\n     || lk == 61148                 // 'processing-instruction' 'div'\n     || lk == 61183                 // 'true' 'div'\n     || lk == 63059                 // 'attribute' 'else'\n     || lk == 63098                 // 'element' 'else'\n     || lk == 63111                 // 'false' 'else'\n     || lk == 63163                 // 'namespace' 'else'\n     || lk == 63173                 // 'null' 'else'\n     || lk == 63196                 // 'processing-instruction' 'else'\n     || lk == 63231                 // 'true' 'else'\n     || lk == 63571                 // 'attribute' 'empty'\n     || lk == 63610                 // 'element' 'empty'\n     || lk == 63623                 // 'false' 'empty'\n     || lk == 63675                 // 'namespace' 'empty'\n     || lk == 63685                 // 'null' 'empty'\n     || lk == 63708                 // 'processing-instruction' 'empty'\n     || lk == 63743                 // 'true' 'empty'\n     || lk == 65107                 // 'attribute' 'end'\n     || lk == 65146                 // 'element' 'end'\n     || lk == 65159                 // 'false' 'end'\n     || lk == 65211                 // 'namespace' 'end'\n     || lk == 65221                 // 'null' 'end'\n     || lk == 65244                 // 'processing-instruction' 'end'\n     || lk == 65279                 // 'true' 'end'\n     || lk == 66131                 // 'attribute' 'eq'\n     || lk == 66170                 // 'element' 'eq'\n     || lk == 66183                 // 'false' 'eq'\n     || lk == 66235                 // 'namespace' 'eq'\n     || lk == 66245                 // 'null' 'eq'\n     || lk == 66268                 // 'processing-instruction' 'eq'\n     || lk == 66303                 // 'true' 'eq'\n     || lk == 67667                 // 'attribute' 'except'\n     || lk == 67706                 // 'element' 'except'\n     || lk == 67719                 // 'false' 'except'\n     || lk == 67771                 // 'namespace' 'except'\n     || lk == 67781                 // 'null' 'except'\n     || lk == 67804                 // 'processing-instruction' 'except'\n     || lk == 67839                 // 'true' 'except'\n     || lk == 71251                 // 'attribute' 'for'\n     || lk == 71290                 // 'element' 'for'\n     || lk == 71303                 // 'false' 'for'\n     || lk == 71355                 // 'namespace' 'for'\n     || lk == 71365                 // 'null' 'for'\n     || lk == 71388                 // 'processing-instruction' 'for'\n     || lk == 71423                 // 'true' 'for'\n     || lk == 75859                 // 'attribute' 'ge'\n     || lk == 75898                 // 'element' 'ge'\n     || lk == 75911                 // 'false' 'ge'\n     || lk == 75963                 // 'namespace' 'ge'\n     || lk == 75973                 // 'null' 'ge'\n     || lk == 75996                 // 'processing-instruction' 'ge'\n     || lk == 76031                 // 'true' 'ge'\n     || lk == 76883                 // 'attribute' 'group'\n     || lk == 76922                 // 'element' 'group'\n     || lk == 76935                 // 'false' 'group'\n     || lk == 76987                 // 'namespace' 'group'\n     || lk == 76997                 // 'null' 'group'\n     || lk == 77020                 // 'processing-instruction' 'group'\n     || lk == 77055                 // 'true' 'group'\n     || lk == 77907                 // 'attribute' 'gt'\n     || lk == 77946                 // 'element' 'gt'\n     || lk == 77959                 // 'false' 'gt'\n     || lk == 78011                 // 'namespace' 'gt'\n     || lk == 78021                 // 'null' 'gt'\n     || lk == 78044                 // 'processing-instruction' 'gt'\n     || lk == 78079                 // 'true' 'gt'\n     || lk == 78419                 // 'attribute' 'idiv'\n     || lk == 78458                 // 'element' 'idiv'\n     || lk == 78471                 // 'false' 'idiv'\n     || lk == 78523                 // 'namespace' 'idiv'\n     || lk == 78533                 // 'null' 'idiv'\n     || lk == 78556                 // 'processing-instruction' 'idiv'\n     || lk == 78591                 // 'true' 'idiv'\n     || lk == 83027                 // 'attribute' 'instance'\n     || lk == 83066                 // 'element' 'instance'\n     || lk == 83079                 // 'false' 'instance'\n     || lk == 83131                 // 'namespace' 'instance'\n     || lk == 83141                 // 'null' 'instance'\n     || lk == 83164                 // 'processing-instruction' 'instance'\n     || lk == 83199                 // 'true' 'instance'\n     || lk == 84051                 // 'attribute' 'intersect'\n     || lk == 84090                 // 'element' 'intersect'\n     || lk == 84103                 // 'false' 'intersect'\n     || lk == 84155                 // 'namespace' 'intersect'\n     || lk == 84165                 // 'null' 'intersect'\n     || lk == 84188                 // 'processing-instruction' 'intersect'\n     || lk == 84223                 // 'true' 'intersect'\n     || lk == 84563                 // 'attribute' 'into'\n     || lk == 84602                 // 'element' 'into'\n     || lk == 84615                 // 'false' 'into'\n     || lk == 84667                 // 'namespace' 'into'\n     || lk == 84677                 // 'null' 'into'\n     || lk == 84700                 // 'processing-instruction' 'into'\n     || lk == 84735                 // 'true' 'into'\n     || lk == 85075                 // 'attribute' 'is'\n     || lk == 85114                 // 'element' 'is'\n     || lk == 85127                 // 'false' 'is'\n     || lk == 85179                 // 'namespace' 'is'\n     || lk == 85189                 // 'null' 'is'\n     || lk == 85212                 // 'processing-instruction' 'is'\n     || lk == 85247                 // 'true' 'is'\n     || lk == 89683                 // 'attribute' 'le'\n     || lk == 89722                 // 'element' 'le'\n     || lk == 89735                 // 'false' 'le'\n     || lk == 89787                 // 'namespace' 'le'\n     || lk == 89797                 // 'null' 'le'\n     || lk == 89820                 // 'processing-instruction' 'le'\n     || lk == 89855                 // 'true' 'le'\n     || lk == 90707                 // 'attribute' 'let'\n     || lk == 90746                 // 'element' 'let'\n     || lk == 90759                 // 'false' 'let'\n     || lk == 90811                 // 'namespace' 'let'\n     || lk == 90821                 // 'null' 'let'\n     || lk == 90844                 // 'processing-instruction' 'let'\n     || lk == 90879                 // 'true' 'let'\n     || lk == 92755                 // 'attribute' 'lt'\n     || lk == 92794                 // 'element' 'lt'\n     || lk == 92807                 // 'false' 'lt'\n     || lk == 92859                 // 'namespace' 'lt'\n     || lk == 92869                 // 'null' 'lt'\n     || lk == 92892                 // 'processing-instruction' 'lt'\n     || lk == 92927                 // 'true' 'lt'\n     || lk == 93779                 // 'attribute' 'mod'\n     || lk == 93818                 // 'element' 'mod'\n     || lk == 93831                 // 'false' 'mod'\n     || lk == 93883                 // 'namespace' 'mod'\n     || lk == 93893                 // 'null' 'mod'\n     || lk == 93916                 // 'processing-instruction' 'mod'\n     || lk == 93951                 // 'true' 'mod'\n     || lk == 94291                 // 'attribute' 'modify'\n     || lk == 94330                 // 'element' 'modify'\n     || lk == 94343                 // 'false' 'modify'\n     || lk == 94395                 // 'namespace' 'modify'\n     || lk == 94405                 // 'null' 'modify'\n     || lk == 94428                 // 'processing-instruction' 'modify'\n     || lk == 94463                 // 'true' 'modify'\n     || lk == 96851                 // 'attribute' 'ne'\n     || lk == 96890                 // 'element' 'ne'\n     || lk == 96903                 // 'false' 'ne'\n     || lk == 96955                 // 'namespace' 'ne'\n     || lk == 96965                 // 'null' 'ne'\n     || lk == 96988                 // 'processing-instruction' 'ne'\n     || lk == 97023                 // 'true' 'ne'\n     || lk == 103507                // 'attribute' 'only'\n     || lk == 103546                // 'element' 'only'\n     || lk == 103559                // 'false' 'only'\n     || lk == 103611                // 'namespace' 'only'\n     || lk == 103621                // 'null' 'only'\n     || lk == 103644                // 'processing-instruction' 'only'\n     || lk == 103679                // 'true' 'only'\n     || lk == 104531                // 'attribute' 'or'\n     || lk == 104570                // 'element' 'or'\n     || lk == 104583                // 'false' 'or'\n     || lk == 104635                // 'namespace' 'or'\n     || lk == 104645                // 'null' 'or'\n     || lk == 104668                // 'processing-instruction' 'or'\n     || lk == 104703                // 'true' 'or'\n     || lk == 105043                // 'attribute' 'order'\n     || lk == 105082                // 'element' 'order'\n     || lk == 105095                // 'false' 'order'\n     || lk == 105147                // 'namespace' 'order'\n     || lk == 105157                // 'null' 'order'\n     || lk == 105180                // 'processing-instruction' 'order'\n     || lk == 105215                // 'true' 'order'\n     || lk == 107143                // 'false' 'paragraphs'\n     || lk == 107205                // 'null' 'paragraphs'\n     || lk == 107263                // 'true' 'paragraphs'\n     || lk == 114771                // 'attribute' 'return'\n     || lk == 114810                // 'element' 'return'\n     || lk == 114823                // 'false' 'return'\n     || lk == 114875                // 'namespace' 'return'\n     || lk == 114885                // 'null' 'return'\n     || lk == 114908                // 'processing-instruction' 'return'\n     || lk == 114943                // 'true' 'return'\n     || lk == 116819                // 'attribute' 'satisfies'\n     || lk == 116858                // 'element' 'satisfies'\n     || lk == 116871                // 'false' 'satisfies'\n     || lk == 116923                // 'namespace' 'satisfies'\n     || lk == 116933                // 'null' 'satisfies'\n     || lk == 116956                // 'processing-instruction' 'satisfies'\n     || lk == 116991                // 'true' 'satisfies'\n     || lk == 121479                // 'false' 'sentences'\n     || lk == 121541                // 'null' 'sentences'\n     || lk == 121599                // 'true' 'sentences'\n     || lk == 123475                // 'attribute' 'stable'\n     || lk == 123514                // 'element' 'stable'\n     || lk == 123527                // 'false' 'stable'\n     || lk == 123579                // 'namespace' 'stable'\n     || lk == 123589                // 'null' 'stable'\n     || lk == 123612                // 'processing-instruction' 'stable'\n     || lk == 123647                // 'true' 'stable'\n     || lk == 123987                // 'attribute' 'start'\n     || lk == 124026                // 'element' 'start'\n     || lk == 124039                // 'false' 'start'\n     || lk == 124091                // 'namespace' 'start'\n     || lk == 124101                // 'null' 'start'\n     || lk == 124124                // 'processing-instruction' 'start'\n     || lk == 124159                // 'true' 'start'\n     || lk == 129159                // 'false' 'times'\n     || lk == 129221                // 'null' 'times'\n     || lk == 129279                // 'true' 'times'\n     || lk == 129619                // 'attribute' 'to'\n     || lk == 129658                // 'element' 'to'\n     || lk == 129671                // 'false' 'to'\n     || lk == 129723                // 'namespace' 'to'\n     || lk == 129733                // 'null' 'to'\n     || lk == 129756                // 'processing-instruction' 'to'\n     || lk == 129791                // 'true' 'to'\n     || lk == 130131                // 'attribute' 'treat'\n     || lk == 130170                // 'element' 'treat'\n     || lk == 130183                // 'false' 'treat'\n     || lk == 130235                // 'namespace' 'treat'\n     || lk == 130245                // 'null' 'treat'\n     || lk == 130268                // 'processing-instruction' 'treat'\n     || lk == 130303                // 'true' 'treat'\n     || lk == 133203                // 'attribute' 'union'\n     || lk == 133242                // 'element' 'union'\n     || lk == 133255                // 'false' 'union'\n     || lk == 133307                // 'namespace' 'union'\n     || lk == 133317                // 'null' 'union'\n     || lk == 133340                // 'processing-instruction' 'union'\n     || lk == 133375                // 'true' 'union'\n     || lk == 139347                // 'attribute' 'where'\n     || lk == 139386                // 'element' 'where'\n     || lk == 139399                // 'false' 'where'\n     || lk == 139451                // 'namespace' 'where'\n     || lk == 139461                // 'null' 'where'\n     || lk == 139484                // 'processing-instruction' 'where'\n     || lk == 139519                // 'true' 'where'\n     || lk == 141395                // 'attribute' 'with'\n     || lk == 141434                // 'element' 'with'\n     || lk == 141447                // 'false' 'with'\n     || lk == 141499                // 'namespace' 'with'\n     || lk == 141509                // 'null' 'with'\n     || lk == 141532                // 'processing-instruction' 'with'\n     || lk == 141567                // 'true' 'with'\n     || lk == 142983                // 'false' 'words'\n     || lk == 143045                // 'null' 'words'\n     || lk == 143103                // 'true' 'words'\n     || lk == 145543                // 'false' '|'\n     || lk == 145605                // 'null' '|'\n     || lk == 145663                // 'true' '|'\n     || lk == 146055                // 'false' '||'\n     || lk == 146117                // 'null' '||'\n     || lk == 146175                // 'true' '||'\n     || lk == 146567                // 'false' '|}'\n     || lk == 146629                // 'null' '|}'\n     || lk == 146687                // 'true' '|}'\n     || lk == 147079                // 'false' '}'\n     || lk == 147141                // 'null' '}'\n     || lk == 147199)               // 'true' '}'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(4, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '$$'\n    case 33:                        // '%'\n    case 35:                        // '('\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n    case 69:                        // '['\n    case 281:                       // '{'\n    case 283:                       // '{|'\n    case 3155:                      // 'attribute' EQName^Token\n    case 3194:                      // 'element' EQName^Token\n    case 9915:                      // 'namespace' NCName^Token\n    case 9948:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14927:                     // 'array' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14969:                     // 'document-node' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14973:                     // 'empty-sequence' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14995:                     // 'function' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15002:                     // 'if' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15015:                     // 'item' '#'\n    case 15016:                     // 'json' '#'\n    case 15017:                     // 'json-item' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15036:                     // 'namespace-node' '#'\n    case 15037:                     // 'ne' '#'\n    case 15042:                     // 'node' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15078:                     // 'schema-attribute' '#'\n    case 15079:                     // 'schema-element' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15095:                     // 'structured-item' '#'\n    case 15096:                     // 'switch' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15107:                     // 'typeswitch' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18055:                     // 'false' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18067:                     // 'function' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18117:                     // 'null' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18175:                     // 'true' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 37459:                     // 'attribute' 'allowing'\n    case 37498:                     // 'element' 'allowing'\n    case 37563:                     // 'namespace' 'allowing'\n    case 37596:                     // 'processing-instruction' 'allowing'\n    case 37971:                     // 'attribute' 'ancestor'\n    case 38010:                     // 'element' 'ancestor'\n    case 38075:                     // 'namespace' 'ancestor'\n    case 38108:                     // 'processing-instruction' 'ancestor'\n    case 38483:                     // 'attribute' 'ancestor-or-self'\n    case 38522:                     // 'element' 'ancestor-or-self'\n    case 38587:                     // 'namespace' 'ancestor-or-self'\n    case 38620:                     // 'processing-instruction' 'ancestor-or-self'\n    case 40019:                     // 'attribute' 'append'\n    case 40058:                     // 'element' 'append'\n    case 40123:                     // 'namespace' 'append'\n    case 40156:                     // 'processing-instruction' 'append'\n    case 40531:                     // 'attribute' 'array'\n    case 40570:                     // 'element' 'array'\n    case 42579:                     // 'attribute' 'attribute'\n    case 42618:                     // 'element' 'attribute'\n    case 42683:                     // 'namespace' 'attribute'\n    case 42716:                     // 'processing-instruction' 'attribute'\n    case 43091:                     // 'attribute' 'base-uri'\n    case 43130:                     // 'element' 'base-uri'\n    case 43195:                     // 'namespace' 'base-uri'\n    case 43228:                     // 'processing-instruction' 'base-uri'\n    case 44115:                     // 'attribute' 'boundary-space'\n    case 44154:                     // 'element' 'boundary-space'\n    case 44219:                     // 'namespace' 'boundary-space'\n    case 44252:                     // 'processing-instruction' 'boundary-space'\n    case 44627:                     // 'attribute' 'break'\n    case 44666:                     // 'element' 'break'\n    case 44731:                     // 'namespace' 'break'\n    case 44764:                     // 'processing-instruction' 'break'\n    case 47187:                     // 'attribute' 'catch'\n    case 47226:                     // 'element' 'catch'\n    case 47291:                     // 'namespace' 'catch'\n    case 47324:                     // 'processing-instruction' 'catch'\n    case 48211:                     // 'attribute' 'child'\n    case 48250:                     // 'element' 'child'\n    case 48315:                     // 'namespace' 'child'\n    case 48348:                     // 'processing-instruction' 'child'\n    case 49747:                     // 'attribute' 'comment'\n    case 49786:                     // 'element' 'comment'\n    case 49851:                     // 'namespace' 'comment'\n    case 49884:                     // 'processing-instruction' 'comment'\n    case 50259:                     // 'attribute' 'constraint'\n    case 50298:                     // 'element' 'constraint'\n    case 50363:                     // 'namespace' 'constraint'\n    case 50396:                     // 'processing-instruction' 'constraint'\n    case 50771:                     // 'attribute' 'construction'\n    case 50810:                     // 'element' 'construction'\n    case 50875:                     // 'namespace' 'construction'\n    case 50908:                     // 'processing-instruction' 'construction'\n    case 52307:                     // 'attribute' 'context'\n    case 52346:                     // 'element' 'context'\n    case 52411:                     // 'namespace' 'context'\n    case 52444:                     // 'processing-instruction' 'context'\n    case 52819:                     // 'attribute' 'continue'\n    case 52858:                     // 'element' 'continue'\n    case 52923:                     // 'namespace' 'continue'\n    case 52956:                     // 'processing-instruction' 'continue'\n    case 53331:                     // 'attribute' 'copy'\n    case 53370:                     // 'element' 'copy'\n    case 53435:                     // 'namespace' 'copy'\n    case 53468:                     // 'processing-instruction' 'copy'\n    case 53843:                     // 'attribute' 'copy-namespaces'\n    case 53882:                     // 'element' 'copy-namespaces'\n    case 53947:                     // 'namespace' 'copy-namespaces'\n    case 53980:                     // 'processing-instruction' 'copy-namespaces'\n    case 54867:                     // 'attribute' 'decimal-format'\n    case 54906:                     // 'element' 'decimal-format'\n    case 54971:                     // 'namespace' 'decimal-format'\n    case 55004:                     // 'processing-instruction' 'decimal-format'\n    case 55891:                     // 'attribute' 'declare'\n    case 55930:                     // 'element' 'declare'\n    case 55995:                     // 'namespace' 'declare'\n    case 56028:                     // 'processing-instruction' 'declare'\n    case 56915:                     // 'attribute' 'delete'\n    case 56954:                     // 'element' 'delete'\n    case 57019:                     // 'namespace' 'delete'\n    case 57052:                     // 'processing-instruction' 'delete'\n    case 57427:                     // 'attribute' 'descendant'\n    case 57466:                     // 'element' 'descendant'\n    case 57531:                     // 'namespace' 'descendant'\n    case 57564:                     // 'processing-instruction' 'descendant'\n    case 57939:                     // 'attribute' 'descendant-or-self'\n    case 57978:                     // 'element' 'descendant-or-self'\n    case 58043:                     // 'namespace' 'descendant-or-self'\n    case 58076:                     // 'processing-instruction' 'descendant-or-self'\n    case 61523:                     // 'attribute' 'document'\n    case 61562:                     // 'element' 'document'\n    case 61627:                     // 'namespace' 'document'\n    case 61660:                     // 'processing-instruction' 'document'\n    case 62035:                     // 'attribute' 'document-node'\n    case 62074:                     // 'element' 'document-node'\n    case 62139:                     // 'namespace' 'document-node'\n    case 62172:                     // 'processing-instruction' 'document-node'\n    case 62547:                     // 'attribute' 'element'\n    case 62586:                     // 'element' 'element'\n    case 62651:                     // 'namespace' 'element'\n    case 62684:                     // 'processing-instruction' 'element'\n    case 64083:                     // 'attribute' 'empty-sequence'\n    case 64122:                     // 'element' 'empty-sequence'\n    case 64187:                     // 'namespace' 'empty-sequence'\n    case 64220:                     // 'processing-instruction' 'empty-sequence'\n    case 64595:                     // 'attribute' 'encoding'\n    case 64634:                     // 'element' 'encoding'\n    case 64699:                     // 'namespace' 'encoding'\n    case 64732:                     // 'processing-instruction' 'encoding'\n    case 66643:                     // 'attribute' 'every'\n    case 66682:                     // 'element' 'every'\n    case 66747:                     // 'namespace' 'every'\n    case 66780:                     // 'processing-instruction' 'every'\n    case 68179:                     // 'attribute' 'exit'\n    case 68218:                     // 'element' 'exit'\n    case 68283:                     // 'namespace' 'exit'\n    case 68316:                     // 'processing-instruction' 'exit'\n    case 68691:                     // 'attribute' 'external'\n    case 68730:                     // 'element' 'external'\n    case 68795:                     // 'namespace' 'external'\n    case 68828:                     // 'processing-instruction' 'external'\n    case 69203:                     // 'attribute' 'false'\n    case 69242:                     // 'element' 'false'\n    case 69307:                     // 'namespace' 'false'\n    case 69340:                     // 'processing-instruction' 'false'\n    case 69715:                     // 'attribute' 'first'\n    case 69754:                     // 'element' 'first'\n    case 69819:                     // 'namespace' 'first'\n    case 69852:                     // 'processing-instruction' 'first'\n    case 70227:                     // 'attribute' 'following'\n    case 70266:                     // 'element' 'following'\n    case 70331:                     // 'namespace' 'following'\n    case 70364:                     // 'processing-instruction' 'following'\n    case 70739:                     // 'attribute' 'following-sibling'\n    case 70778:                     // 'element' 'following-sibling'\n    case 70843:                     // 'namespace' 'following-sibling'\n    case 70876:                     // 'processing-instruction' 'following-sibling'\n    case 72787:                     // 'attribute' 'from'\n    case 72826:                     // 'element' 'from'\n    case 72891:                     // 'namespace' 'from'\n    case 72924:                     // 'processing-instruction' 'from'\n    case 73299:                     // 'attribute' 'ft-option'\n    case 73338:                     // 'element' 'ft-option'\n    case 73403:                     // 'namespace' 'ft-option'\n    case 73436:                     // 'processing-instruction' 'ft-option'\n    case 75347:                     // 'attribute' 'function'\n    case 75386:                     // 'element' 'function'\n    case 75451:                     // 'namespace' 'function'\n    case 75484:                     // 'processing-instruction' 'function'\n    case 78931:                     // 'attribute' 'if'\n    case 78970:                     // 'element' 'if'\n    case 79035:                     // 'namespace' 'if'\n    case 79068:                     // 'processing-instruction' 'if'\n    case 79443:                     // 'attribute' 'import'\n    case 79482:                     // 'element' 'import'\n    case 79547:                     // 'namespace' 'import'\n    case 79580:                     // 'processing-instruction' 'import'\n    case 79955:                     // 'attribute' 'in'\n    case 79994:                     // 'element' 'in'\n    case 80059:                     // 'namespace' 'in'\n    case 80092:                     // 'processing-instruction' 'in'\n    case 80467:                     // 'attribute' 'index'\n    case 80506:                     // 'element' 'index'\n    case 80571:                     // 'namespace' 'index'\n    case 80604:                     // 'processing-instruction' 'index'\n    case 82515:                     // 'attribute' 'insert'\n    case 82554:                     // 'element' 'insert'\n    case 82619:                     // 'namespace' 'insert'\n    case 82652:                     // 'processing-instruction' 'insert'\n    case 83539:                     // 'attribute' 'integrity'\n    case 83578:                     // 'element' 'integrity'\n    case 83643:                     // 'namespace' 'integrity'\n    case 83676:                     // 'processing-instruction' 'integrity'\n    case 85587:                     // 'attribute' 'item'\n    case 85626:                     // 'element' 'item'\n    case 85691:                     // 'namespace' 'item'\n    case 85724:                     // 'processing-instruction' 'item'\n    case 86099:                     // 'attribute' 'json'\n    case 86138:                     // 'element' 'json'\n    case 86203:                     // 'namespace' 'json'\n    case 86236:                     // 'processing-instruction' 'json'\n    case 86611:                     // 'attribute' 'json-item'\n    case 86650:                     // 'element' 'json-item'\n    case 87123:                     // 'attribute' 'jsoniq'\n    case 87162:                     // 'element' 'jsoniq'\n    case 87227:                     // 'namespace' 'jsoniq'\n    case 87260:                     // 'processing-instruction' 'jsoniq'\n    case 88659:                     // 'attribute' 'last'\n    case 88698:                     // 'element' 'last'\n    case 88763:                     // 'namespace' 'last'\n    case 88796:                     // 'processing-instruction' 'last'\n    case 89171:                     // 'attribute' 'lax'\n    case 89210:                     // 'element' 'lax'\n    case 89275:                     // 'namespace' 'lax'\n    case 89308:                     // 'processing-instruction' 'lax'\n    case 91731:                     // 'attribute' 'loop'\n    case 91770:                     // 'element' 'loop'\n    case 91835:                     // 'namespace' 'loop'\n    case 91868:                     // 'processing-instruction' 'loop'\n    case 94803:                     // 'attribute' 'module'\n    case 94842:                     // 'element' 'module'\n    case 94907:                     // 'namespace' 'module'\n    case 94940:                     // 'processing-instruction' 'module'\n    case 95827:                     // 'attribute' 'namespace'\n    case 95866:                     // 'element' 'namespace'\n    case 95931:                     // 'namespace' 'namespace'\n    case 95964:                     // 'processing-instruction' 'namespace'\n    case 96339:                     // 'attribute' 'namespace-node'\n    case 96378:                     // 'element' 'namespace-node'\n    case 96443:                     // 'namespace' 'namespace-node'\n    case 96476:                     // 'processing-instruction' 'namespace-node'\n    case 99411:                     // 'attribute' 'node'\n    case 99450:                     // 'element' 'node'\n    case 99515:                     // 'namespace' 'node'\n    case 99548:                     // 'processing-instruction' 'node'\n    case 99923:                     // 'attribute' 'nodes'\n    case 99962:                     // 'element' 'nodes'\n    case 100027:                    // 'namespace' 'nodes'\n    case 100060:                    // 'processing-instruction' 'nodes'\n    case 100947:                    // 'attribute' 'null'\n    case 100986:                    // 'element' 'null'\n    case 101051:                    // 'namespace' 'null'\n    case 101084:                    // 'processing-instruction' 'null'\n    case 101459:                    // 'attribute' 'object'\n    case 101498:                    // 'element' 'object'\n    case 101563:                    // 'namespace' 'object'\n    case 101596:                    // 'processing-instruction' 'object'\n    case 104019:                    // 'attribute' 'option'\n    case 104058:                    // 'element' 'option'\n    case 104123:                    // 'namespace' 'option'\n    case 104156:                    // 'processing-instruction' 'option'\n    case 105555:                    // 'attribute' 'ordered'\n    case 105594:                    // 'element' 'ordered'\n    case 105659:                    // 'namespace' 'ordered'\n    case 105692:                    // 'processing-instruction' 'ordered'\n    case 106067:                    // 'attribute' 'ordering'\n    case 106106:                    // 'element' 'ordering'\n    case 106171:                    // 'namespace' 'ordering'\n    case 106204:                    // 'processing-instruction' 'ordering'\n    case 107603:                    // 'attribute' 'parent'\n    case 107642:                    // 'element' 'parent'\n    case 107707:                    // 'namespace' 'parent'\n    case 107740:                    // 'processing-instruction' 'parent'\n    case 110675:                    // 'attribute' 'preceding'\n    case 110714:                    // 'element' 'preceding'\n    case 110779:                    // 'namespace' 'preceding'\n    case 110812:                    // 'processing-instruction' 'preceding'\n    case 111187:                    // 'attribute' 'preceding-sibling'\n    case 111226:                    // 'element' 'preceding-sibling'\n    case 111291:                    // 'namespace' 'preceding-sibling'\n    case 111324:                    // 'processing-instruction' 'preceding-sibling'\n    case 112723:                    // 'attribute' 'processing-instruction'\n    case 112762:                    // 'element' 'processing-instruction'\n    case 112827:                    // 'namespace' 'processing-instruction'\n    case 112860:                    // 'processing-instruction' 'processing-instruction'\n    case 113747:                    // 'attribute' 'rename'\n    case 113786:                    // 'element' 'rename'\n    case 113851:                    // 'namespace' 'rename'\n    case 113884:                    // 'processing-instruction' 'rename'\n    case 114259:                    // 'attribute' 'replace'\n    case 114298:                    // 'element' 'replace'\n    case 114363:                    // 'namespace' 'replace'\n    case 114396:                    // 'processing-instruction' 'replace'\n    case 115283:                    // 'attribute' 'returning'\n    case 115322:                    // 'element' 'returning'\n    case 115387:                    // 'namespace' 'returning'\n    case 115420:                    // 'processing-instruction' 'returning'\n    case 115795:                    // 'attribute' 'revalidation'\n    case 115834:                    // 'element' 'revalidation'\n    case 115899:                    // 'namespace' 'revalidation'\n    case 115932:                    // 'processing-instruction' 'revalidation'\n    case 117331:                    // 'attribute' 'schema'\n    case 117370:                    // 'element' 'schema'\n    case 117435:                    // 'namespace' 'schema'\n    case 117468:                    // 'processing-instruction' 'schema'\n    case 117843:                    // 'attribute' 'schema-attribute'\n    case 117882:                    // 'element' 'schema-attribute'\n    case 117947:                    // 'namespace' 'schema-attribute'\n    case 117980:                    // 'processing-instruction' 'schema-attribute'\n    case 118355:                    // 'attribute' 'schema-element'\n    case 118394:                    // 'element' 'schema-element'\n    case 118459:                    // 'namespace' 'schema-element'\n    case 118492:                    // 'processing-instruction' 'schema-element'\n    case 118867:                    // 'attribute' 'score'\n    case 118906:                    // 'element' 'score'\n    case 118971:                    // 'namespace' 'score'\n    case 119004:                    // 'processing-instruction' 'score'\n    case 119379:                    // 'attribute' 'select'\n    case 119418:                    // 'element' 'select'\n    case 119483:                    // 'namespace' 'select'\n    case 119516:                    // 'processing-instruction' 'select'\n    case 119891:                    // 'attribute' 'self'\n    case 119930:                    // 'element' 'self'\n    case 119995:                    // 'namespace' 'self'\n    case 120028:                    // 'processing-instruction' 'self'\n    case 122451:                    // 'attribute' 'sliding'\n    case 122490:                    // 'element' 'sliding'\n    case 122555:                    // 'namespace' 'sliding'\n    case 122588:                    // 'processing-instruction' 'sliding'\n    case 122963:                    // 'attribute' 'some'\n    case 123002:                    // 'element' 'some'\n    case 123067:                    // 'namespace' 'some'\n    case 123100:                    // 'processing-instruction' 'some'\n    case 125523:                    // 'attribute' 'strict'\n    case 125562:                    // 'element' 'strict'\n    case 125627:                    // 'namespace' 'strict'\n    case 125660:                    // 'processing-instruction' 'strict'\n    case 126547:                    // 'attribute' 'structured-item'\n    case 126586:                    // 'element' 'structured-item'\n    case 127059:                    // 'attribute' 'switch'\n    case 127098:                    // 'element' 'switch'\n    case 127163:                    // 'namespace' 'switch'\n    case 127196:                    // 'processing-instruction' 'switch'\n    case 127571:                    // 'attribute' 'text'\n    case 127610:                    // 'element' 'text'\n    case 127675:                    // 'namespace' 'text'\n    case 127708:                    // 'processing-instruction' 'text'\n    case 130643:                    // 'attribute' 'true'\n    case 130682:                    // 'element' 'true'\n    case 130747:                    // 'namespace' 'true'\n    case 130780:                    // 'processing-instruction' 'true'\n    case 131155:                    // 'attribute' 'try'\n    case 131194:                    // 'element' 'try'\n    case 131259:                    // 'namespace' 'try'\n    case 131292:                    // 'processing-instruction' 'try'\n    case 131667:                    // 'attribute' 'tumbling'\n    case 131706:                    // 'element' 'tumbling'\n    case 131771:                    // 'namespace' 'tumbling'\n    case 131804:                    // 'processing-instruction' 'tumbling'\n    case 132179:                    // 'attribute' 'type'\n    case 132218:                    // 'element' 'type'\n    case 132283:                    // 'namespace' 'type'\n    case 132316:                    // 'processing-instruction' 'type'\n    case 132691:                    // 'attribute' 'typeswitch'\n    case 132730:                    // 'element' 'typeswitch'\n    case 132795:                    // 'namespace' 'typeswitch'\n    case 132828:                    // 'processing-instruction' 'typeswitch'\n    case 134227:                    // 'attribute' 'unordered'\n    case 134266:                    // 'element' 'unordered'\n    case 134331:                    // 'namespace' 'unordered'\n    case 134364:                    // 'processing-instruction' 'unordered'\n    case 134739:                    // 'attribute' 'updating'\n    case 134778:                    // 'element' 'updating'\n    case 134843:                    // 'namespace' 'updating'\n    case 134876:                    // 'processing-instruction' 'updating'\n    case 136275:                    // 'attribute' 'validate'\n    case 136314:                    // 'element' 'validate'\n    case 136379:                    // 'namespace' 'validate'\n    case 136412:                    // 'processing-instruction' 'validate'\n    case 136787:                    // 'attribute' 'value'\n    case 136826:                    // 'element' 'value'\n    case 136891:                    // 'namespace' 'value'\n    case 136924:                    // 'processing-instruction' 'value'\n    case 137299:                    // 'attribute' 'variable'\n    case 137338:                    // 'element' 'variable'\n    case 137403:                    // 'namespace' 'variable'\n    case 137436:                    // 'processing-instruction' 'variable'\n    case 137811:                    // 'attribute' 'version'\n    case 137850:                    // 'element' 'version'\n    case 137915:                    // 'namespace' 'version'\n    case 137948:                    // 'processing-instruction' 'version'\n    case 139859:                    // 'attribute' 'while'\n    case 139898:                    // 'element' 'while'\n    case 139963:                    // 'namespace' 'while'\n    case 139996:                    // 'processing-instruction' 'while'\n    case 143955:                    // 'attribute' '{'\n    case 143969:                    // 'comment' '{'\n    case 143992:                    // 'document' '{'\n    case 143994:                    // 'element' '{'\n    case 144059:                    // 'namespace' '{'\n    case 144078:                    // 'ordered' '{'\n    case 144092:                    // 'processing-instruction' '{'\n    case 144121:                    // 'text' '{'\n    case 144134:                    // 'unordered' '{'\n      parse_PostfixExpr();\n      break;\n    default:\n      parse_AxisStep();\n    }\n    eventHandler.endNonterminal(\"StepExpr\", e0);\n  }\n\n  function try_StepExpr()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(287);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 122:                       // 'element'\n      lookahead2W(286);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 187:                       // 'namespace'\n    case 220:                       // 'processing-instruction'\n      lookahead2W(284);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 97:                        // 'comment'\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 249:                       // 'text'\n    case 262:                       // 'unordered'\n      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 79:                        // 'array'\n    case 125:                       // 'empty-sequence'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 234:                       // 'self'\n      lookahead2W(237);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 121:                       // 'document-node'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 188:                       // 'namespace-node'\n    case 189:                       // 'ne'\n    case 194:                       // 'node'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12935                 // 'false' EOF\n     || lk == 12997                 // 'null' EOF\n     || lk == 13055                 // 'true' EOF\n     || lk == 13447                 // 'false' '!'\n     || lk == 13509                 // 'null' '!'\n     || lk == 13567                 // 'true' '!'\n     || lk == 13959                 // 'false' '!='\n     || lk == 14021                 // 'null' '!='\n     || lk == 14079                 // 'true' '!='\n     || lk == 19591                 // 'false' ')'\n     || lk == 19653                 // 'null' ')'\n     || lk == 19711                 // 'true' ')'\n     || lk == 20103                 // 'false' '*'\n     || lk == 20165                 // 'null' '*'\n     || lk == 20223                 // 'true' '*'\n     || lk == 21127                 // 'false' '+'\n     || lk == 21189                 // 'null' '+'\n     || lk == 21247                 // 'true' '+'\n     || lk == 21639                 // 'false' ','\n     || lk == 21701                 // 'null' ','\n     || lk == 21759                 // 'true' ','\n     || lk == 22151                 // 'false' '-'\n     || lk == 22213                 // 'null' '-'\n     || lk == 22271                 // 'true' '-'\n     || lk == 24199                 // 'false' '/'\n     || lk == 24261                 // 'null' '/'\n     || lk == 24319                 // 'true' '/'\n     || lk == 24711                 // 'false' '//'\n     || lk == 24773                 // 'null' '//'\n     || lk == 24831                 // 'true' '//'\n     || lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855                 // 'true' ':'\n     || lk == 27783                 // 'false' ';'\n     || lk == 27845                 // 'null' ';'\n     || lk == 27903                 // 'true' ';'\n     || lk == 28295                 // 'false' '<'\n     || lk == 28357                 // 'null' '<'\n     || lk == 28415                 // 'true' '<'\n     || lk == 29831                 // 'false' '<<'\n     || lk == 29893                 // 'null' '<<'\n     || lk == 29951                 // 'true' '<<'\n     || lk == 30343                 // 'false' '<='\n     || lk == 30405                 // 'null' '<='\n     || lk == 30463                 // 'true' '<='\n     || lk == 31367                 // 'false' '='\n     || lk == 31429                 // 'null' '='\n     || lk == 31487                 // 'true' '='\n     || lk == 31879                 // 'false' '>'\n     || lk == 31941                 // 'null' '>'\n     || lk == 31999                 // 'true' '>'\n     || lk == 32391                 // 'false' '>='\n     || lk == 32453                 // 'null' '>='\n     || lk == 32511                 // 'true' '>='\n     || lk == 32903                 // 'false' '>>'\n     || lk == 32965                 // 'null' '>>'\n     || lk == 33023                 // 'true' '>>'\n     || lk == 35463                 // 'false' '['\n     || lk == 35525                 // 'null' '['\n     || lk == 35583                 // 'true' '['\n     || lk == 35975                 // 'false' ']'\n     || lk == 36037                 // 'null' ']'\n     || lk == 36095                 // 'true' ']'\n     || lk == 36435                 // 'attribute' 'after'\n     || lk == 36474                 // 'element' 'after'\n     || lk == 36487                 // 'false' 'after'\n     || lk == 36539                 // 'namespace' 'after'\n     || lk == 36549                 // 'null' 'after'\n     || lk == 36572                 // 'processing-instruction' 'after'\n     || lk == 36607                 // 'true' 'after'\n     || lk == 38995                 // 'attribute' 'and'\n     || lk == 39034                 // 'element' 'and'\n     || lk == 39047                 // 'false' 'and'\n     || lk == 39099                 // 'namespace' 'and'\n     || lk == 39109                 // 'null' 'and'\n     || lk == 39132                 // 'processing-instruction' 'and'\n     || lk == 39167                 // 'true' 'and'\n     || lk == 41043                 // 'attribute' 'as'\n     || lk == 41082                 // 'element' 'as'\n     || lk == 41095                 // 'false' 'as'\n     || lk == 41147                 // 'namespace' 'as'\n     || lk == 41157                 // 'null' 'as'\n     || lk == 41180                 // 'processing-instruction' 'as'\n     || lk == 41215                 // 'true' 'as'\n     || lk == 41555                 // 'attribute' 'ascending'\n     || lk == 41594                 // 'element' 'ascending'\n     || lk == 41607                 // 'false' 'ascending'\n     || lk == 41659                 // 'namespace' 'ascending'\n     || lk == 41669                 // 'null' 'ascending'\n     || lk == 41692                 // 'processing-instruction' 'ascending'\n     || lk == 41727                 // 'true' 'ascending'\n     || lk == 42067                 // 'attribute' 'at'\n     || lk == 42106                 // 'element' 'at'\n     || lk == 42119                 // 'false' 'at'\n     || lk == 42171                 // 'namespace' 'at'\n     || lk == 42181                 // 'null' 'at'\n     || lk == 42204                 // 'processing-instruction' 'at'\n     || lk == 42239                 // 'true' 'at'\n     || lk == 43603                 // 'attribute' 'before'\n     || lk == 43642                 // 'element' 'before'\n     || lk == 43655                 // 'false' 'before'\n     || lk == 43707                 // 'namespace' 'before'\n     || lk == 43717                 // 'null' 'before'\n     || lk == 43740                 // 'processing-instruction' 'before'\n     || lk == 43775                 // 'true' 'before'\n     || lk == 45191                 // 'false' 'by'\n     || lk == 45253                 // 'null' 'by'\n     || lk == 45311                 // 'true' 'by'\n     || lk == 45651                 // 'attribute' 'case'\n     || lk == 45690                 // 'element' 'case'\n     || lk == 45703                 // 'false' 'case'\n     || lk == 45755                 // 'namespace' 'case'\n     || lk == 45765                 // 'null' 'case'\n     || lk == 45788                 // 'processing-instruction' 'case'\n     || lk == 45823                 // 'true' 'case'\n     || lk == 46163                 // 'attribute' 'cast'\n     || lk == 46202                 // 'element' 'cast'\n     || lk == 46215                 // 'false' 'cast'\n     || lk == 46267                 // 'namespace' 'cast'\n     || lk == 46277                 // 'null' 'cast'\n     || lk == 46300                 // 'processing-instruction' 'cast'\n     || lk == 46335                 // 'true' 'cast'\n     || lk == 46675                 // 'attribute' 'castable'\n     || lk == 46714                 // 'element' 'castable'\n     || lk == 46727                 // 'false' 'castable'\n     || lk == 46779                 // 'namespace' 'castable'\n     || lk == 46789                 // 'null' 'castable'\n     || lk == 46812                 // 'processing-instruction' 'castable'\n     || lk == 46847                 // 'true' 'castable'\n     || lk == 48723                 // 'attribute' 'collation'\n     || lk == 48762                 // 'element' 'collation'\n     || lk == 48775                 // 'false' 'collation'\n     || lk == 48827                 // 'namespace' 'collation'\n     || lk == 48837                 // 'null' 'collation'\n     || lk == 48860                 // 'processing-instruction' 'collation'\n     || lk == 48895                 // 'true' 'collation'\n     || lk == 51335                 // 'false' 'contains'\n     || lk == 51397                 // 'null' 'contains'\n     || lk == 51455                 // 'true' 'contains'\n     || lk == 54355                 // 'attribute' 'count'\n     || lk == 54394                 // 'element' 'count'\n     || lk == 54407                 // 'false' 'count'\n     || lk == 54459                 // 'namespace' 'count'\n     || lk == 54469                 // 'null' 'count'\n     || lk == 54492                 // 'processing-instruction' 'count'\n     || lk == 54527                 // 'true' 'count'\n     || lk == 56403                 // 'attribute' 'default'\n     || lk == 56442                 // 'element' 'default'\n     || lk == 56455                 // 'false' 'default'\n     || lk == 56507                 // 'namespace' 'default'\n     || lk == 56517                 // 'null' 'default'\n     || lk == 56540                 // 'processing-instruction' 'default'\n     || lk == 56575                 // 'true' 'default'\n     || lk == 58451                 // 'attribute' 'descending'\n     || lk == 58490                 // 'element' 'descending'\n     || lk == 58503                 // 'false' 'descending'\n     || lk == 58555                 // 'namespace' 'descending'\n     || lk == 58565                 // 'null' 'descending'\n     || lk == 58588                 // 'processing-instruction' 'descending'\n     || lk == 58623                 // 'true' 'descending'\n     || lk == 61011                 // 'attribute' 'div'\n     || lk == 61050                 // 'element' 'div'\n     || lk == 61063                 // 'false' 'div'\n     || lk == 61115                 // 'namespace' 'div'\n     || lk == 61125                 // 'null' 'div'\n     || lk == 61148                 // 'processing-instruction' 'div'\n     || lk == 61183                 // 'true' 'div'\n     || lk == 63059                 // 'attribute' 'else'\n     || lk == 63098                 // 'element' 'else'\n     || lk == 63111                 // 'false' 'else'\n     || lk == 63163                 // 'namespace' 'else'\n     || lk == 63173                 // 'null' 'else'\n     || lk == 63196                 // 'processing-instruction' 'else'\n     || lk == 63231                 // 'true' 'else'\n     || lk == 63571                 // 'attribute' 'empty'\n     || lk == 63610                 // 'element' 'empty'\n     || lk == 63623                 // 'false' 'empty'\n     || lk == 63675                 // 'namespace' 'empty'\n     || lk == 63685                 // 'null' 'empty'\n     || lk == 63708                 // 'processing-instruction' 'empty'\n     || lk == 63743                 // 'true' 'empty'\n     || lk == 65107                 // 'attribute' 'end'\n     || lk == 65146                 // 'element' 'end'\n     || lk == 65159                 // 'false' 'end'\n     || lk == 65211                 // 'namespace' 'end'\n     || lk == 65221                 // 'null' 'end'\n     || lk == 65244                 // 'processing-instruction' 'end'\n     || lk == 65279                 // 'true' 'end'\n     || lk == 66131                 // 'attribute' 'eq'\n     || lk == 66170                 // 'element' 'eq'\n     || lk == 66183                 // 'false' 'eq'\n     || lk == 66235                 // 'namespace' 'eq'\n     || lk == 66245                 // 'null' 'eq'\n     || lk == 66268                 // 'processing-instruction' 'eq'\n     || lk == 66303                 // 'true' 'eq'\n     || lk == 67667                 // 'attribute' 'except'\n     || lk == 67706                 // 'element' 'except'\n     || lk == 67719                 // 'false' 'except'\n     || lk == 67771                 // 'namespace' 'except'\n     || lk == 67781                 // 'null' 'except'\n     || lk == 67804                 // 'processing-instruction' 'except'\n     || lk == 67839                 // 'true' 'except'\n     || lk == 71251                 // 'attribute' 'for'\n     || lk == 71290                 // 'element' 'for'\n     || lk == 71303                 // 'false' 'for'\n     || lk == 71355                 // 'namespace' 'for'\n     || lk == 71365                 // 'null' 'for'\n     || lk == 71388                 // 'processing-instruction' 'for'\n     || lk == 71423                 // 'true' 'for'\n     || lk == 75859                 // 'attribute' 'ge'\n     || lk == 75898                 // 'element' 'ge'\n     || lk == 75911                 // 'false' 'ge'\n     || lk == 75963                 // 'namespace' 'ge'\n     || lk == 75973                 // 'null' 'ge'\n     || lk == 75996                 // 'processing-instruction' 'ge'\n     || lk == 76031                 // 'true' 'ge'\n     || lk == 76883                 // 'attribute' 'group'\n     || lk == 76922                 // 'element' 'group'\n     || lk == 76935                 // 'false' 'group'\n     || lk == 76987                 // 'namespace' 'group'\n     || lk == 76997                 // 'null' 'group'\n     || lk == 77020                 // 'processing-instruction' 'group'\n     || lk == 77055                 // 'true' 'group'\n     || lk == 77907                 // 'attribute' 'gt'\n     || lk == 77946                 // 'element' 'gt'\n     || lk == 77959                 // 'false' 'gt'\n     || lk == 78011                 // 'namespace' 'gt'\n     || lk == 78021                 // 'null' 'gt'\n     || lk == 78044                 // 'processing-instruction' 'gt'\n     || lk == 78079                 // 'true' 'gt'\n     || lk == 78419                 // 'attribute' 'idiv'\n     || lk == 78458                 // 'element' 'idiv'\n     || lk == 78471                 // 'false' 'idiv'\n     || lk == 78523                 // 'namespace' 'idiv'\n     || lk == 78533                 // 'null' 'idiv'\n     || lk == 78556                 // 'processing-instruction' 'idiv'\n     || lk == 78591                 // 'true' 'idiv'\n     || lk == 83027                 // 'attribute' 'instance'\n     || lk == 83066                 // 'element' 'instance'\n     || lk == 83079                 // 'false' 'instance'\n     || lk == 83131                 // 'namespace' 'instance'\n     || lk == 83141                 // 'null' 'instance'\n     || lk == 83164                 // 'processing-instruction' 'instance'\n     || lk == 83199                 // 'true' 'instance'\n     || lk == 84051                 // 'attribute' 'intersect'\n     || lk == 84090                 // 'element' 'intersect'\n     || lk == 84103                 // 'false' 'intersect'\n     || lk == 84155                 // 'namespace' 'intersect'\n     || lk == 84165                 // 'null' 'intersect'\n     || lk == 84188                 // 'processing-instruction' 'intersect'\n     || lk == 84223                 // 'true' 'intersect'\n     || lk == 84563                 // 'attribute' 'into'\n     || lk == 84602                 // 'element' 'into'\n     || lk == 84615                 // 'false' 'into'\n     || lk == 84667                 // 'namespace' 'into'\n     || lk == 84677                 // 'null' 'into'\n     || lk == 84700                 // 'processing-instruction' 'into'\n     || lk == 84735                 // 'true' 'into'\n     || lk == 85075                 // 'attribute' 'is'\n     || lk == 85114                 // 'element' 'is'\n     || lk == 85127                 // 'false' 'is'\n     || lk == 85179                 // 'namespace' 'is'\n     || lk == 85189                 // 'null' 'is'\n     || lk == 85212                 // 'processing-instruction' 'is'\n     || lk == 85247                 // 'true' 'is'\n     || lk == 89683                 // 'attribute' 'le'\n     || lk == 89722                 // 'element' 'le'\n     || lk == 89735                 // 'false' 'le'\n     || lk == 89787                 // 'namespace' 'le'\n     || lk == 89797                 // 'null' 'le'\n     || lk == 89820                 // 'processing-instruction' 'le'\n     || lk == 89855                 // 'true' 'le'\n     || lk == 90707                 // 'attribute' 'let'\n     || lk == 90746                 // 'element' 'let'\n     || lk == 90759                 // 'false' 'let'\n     || lk == 90811                 // 'namespace' 'let'\n     || lk == 90821                 // 'null' 'let'\n     || lk == 90844                 // 'processing-instruction' 'let'\n     || lk == 90879                 // 'true' 'let'\n     || lk == 92755                 // 'attribute' 'lt'\n     || lk == 92794                 // 'element' 'lt'\n     || lk == 92807                 // 'false' 'lt'\n     || lk == 92859                 // 'namespace' 'lt'\n     || lk == 92869                 // 'null' 'lt'\n     || lk == 92892                 // 'processing-instruction' 'lt'\n     || lk == 92927                 // 'true' 'lt'\n     || lk == 93779                 // 'attribute' 'mod'\n     || lk == 93818                 // 'element' 'mod'\n     || lk == 93831                 // 'false' 'mod'\n     || lk == 93883                 // 'namespace' 'mod'\n     || lk == 93893                 // 'null' 'mod'\n     || lk == 93916                 // 'processing-instruction' 'mod'\n     || lk == 93951                 // 'true' 'mod'\n     || lk == 94291                 // 'attribute' 'modify'\n     || lk == 94330                 // 'element' 'modify'\n     || lk == 94343                 // 'false' 'modify'\n     || lk == 94395                 // 'namespace' 'modify'\n     || lk == 94405                 // 'null' 'modify'\n     || lk == 94428                 // 'processing-instruction' 'modify'\n     || lk == 94463                 // 'true' 'modify'\n     || lk == 96851                 // 'attribute' 'ne'\n     || lk == 96890                 // 'element' 'ne'\n     || lk == 96903                 // 'false' 'ne'\n     || lk == 96955                 // 'namespace' 'ne'\n     || lk == 96965                 // 'null' 'ne'\n     || lk == 96988                 // 'processing-instruction' 'ne'\n     || lk == 97023                 // 'true' 'ne'\n     || lk == 103507                // 'attribute' 'only'\n     || lk == 103546                // 'element' 'only'\n     || lk == 103559                // 'false' 'only'\n     || lk == 103611                // 'namespace' 'only'\n     || lk == 103621                // 'null' 'only'\n     || lk == 103644                // 'processing-instruction' 'only'\n     || lk == 103679                // 'true' 'only'\n     || lk == 104531                // 'attribute' 'or'\n     || lk == 104570                // 'element' 'or'\n     || lk == 104583                // 'false' 'or'\n     || lk == 104635                // 'namespace' 'or'\n     || lk == 104645                // 'null' 'or'\n     || lk == 104668                // 'processing-instruction' 'or'\n     || lk == 104703                // 'true' 'or'\n     || lk == 105043                // 'attribute' 'order'\n     || lk == 105082                // 'element' 'order'\n     || lk == 105095                // 'false' 'order'\n     || lk == 105147                // 'namespace' 'order'\n     || lk == 105157                // 'null' 'order'\n     || lk == 105180                // 'processing-instruction' 'order'\n     || lk == 105215                // 'true' 'order'\n     || lk == 107143                // 'false' 'paragraphs'\n     || lk == 107205                // 'null' 'paragraphs'\n     || lk == 107263                // 'true' 'paragraphs'\n     || lk == 114771                // 'attribute' 'return'\n     || lk == 114810                // 'element' 'return'\n     || lk == 114823                // 'false' 'return'\n     || lk == 114875                // 'namespace' 'return'\n     || lk == 114885                // 'null' 'return'\n     || lk == 114908                // 'processing-instruction' 'return'\n     || lk == 114943                // 'true' 'return'\n     || lk == 116819                // 'attribute' 'satisfies'\n     || lk == 116858                // 'element' 'satisfies'\n     || lk == 116871                // 'false' 'satisfies'\n     || lk == 116923                // 'namespace' 'satisfies'\n     || lk == 116933                // 'null' 'satisfies'\n     || lk == 116956                // 'processing-instruction' 'satisfies'\n     || lk == 116991                // 'true' 'satisfies'\n     || lk == 121479                // 'false' 'sentences'\n     || lk == 121541                // 'null' 'sentences'\n     || lk == 121599                // 'true' 'sentences'\n     || lk == 123475                // 'attribute' 'stable'\n     || lk == 123514                // 'element' 'stable'\n     || lk == 123527                // 'false' 'stable'\n     || lk == 123579                // 'namespace' 'stable'\n     || lk == 123589                // 'null' 'stable'\n     || lk == 123612                // 'processing-instruction' 'stable'\n     || lk == 123647                // 'true' 'stable'\n     || lk == 123987                // 'attribute' 'start'\n     || lk == 124026                // 'element' 'start'\n     || lk == 124039                // 'false' 'start'\n     || lk == 124091                // 'namespace' 'start'\n     || lk == 124101                // 'null' 'start'\n     || lk == 124124                // 'processing-instruction' 'start'\n     || lk == 124159                // 'true' 'start'\n     || lk == 129159                // 'false' 'times'\n     || lk == 129221                // 'null' 'times'\n     || lk == 129279                // 'true' 'times'\n     || lk == 129619                // 'attribute' 'to'\n     || lk == 129658                // 'element' 'to'\n     || lk == 129671                // 'false' 'to'\n     || lk == 129723                // 'namespace' 'to'\n     || lk == 129733                // 'null' 'to'\n     || lk == 129756                // 'processing-instruction' 'to'\n     || lk == 129791                // 'true' 'to'\n     || lk == 130131                // 'attribute' 'treat'\n     || lk == 130170                // 'element' 'treat'\n     || lk == 130183                // 'false' 'treat'\n     || lk == 130235                // 'namespace' 'treat'\n     || lk == 130245                // 'null' 'treat'\n     || lk == 130268                // 'processing-instruction' 'treat'\n     || lk == 130303                // 'true' 'treat'\n     || lk == 133203                // 'attribute' 'union'\n     || lk == 133242                // 'element' 'union'\n     || lk == 133255                // 'false' 'union'\n     || lk == 133307                // 'namespace' 'union'\n     || lk == 133317                // 'null' 'union'\n     || lk == 133340                // 'processing-instruction' 'union'\n     || lk == 133375                // 'true' 'union'\n     || lk == 139347                // 'attribute' 'where'\n     || lk == 139386                // 'element' 'where'\n     || lk == 139399                // 'false' 'where'\n     || lk == 139451                // 'namespace' 'where'\n     || lk == 139461                // 'null' 'where'\n     || lk == 139484                // 'processing-instruction' 'where'\n     || lk == 139519                // 'true' 'where'\n     || lk == 141395                // 'attribute' 'with'\n     || lk == 141434                // 'element' 'with'\n     || lk == 141447                // 'false' 'with'\n     || lk == 141499                // 'namespace' 'with'\n     || lk == 141509                // 'null' 'with'\n     || lk == 141532                // 'processing-instruction' 'with'\n     || lk == 141567                // 'true' 'with'\n     || lk == 142983                // 'false' 'words'\n     || lk == 143045                // 'null' 'words'\n     || lk == 143103                // 'true' 'words'\n     || lk == 145543                // 'false' '|'\n     || lk == 145605                // 'null' '|'\n     || lk == 145663                // 'true' '|'\n     || lk == 146055                // 'false' '||'\n     || lk == 146117                // 'null' '||'\n     || lk == 146175                // 'true' '||'\n     || lk == 146567                // 'false' '|}'\n     || lk == 146629                // 'null' '|}'\n     || lk == 146687                // 'true' '|}'\n     || lk == 147079                // 'false' '}'\n     || lk == 147141                // 'null' '}'\n     || lk == 147199)               // 'true' '}'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          memoize(4, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(4, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '$$'\n    case 33:                        // '%'\n    case 35:                        // '('\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n    case 69:                        // '['\n    case 281:                       // '{'\n    case 283:                       // '{|'\n    case 3155:                      // 'attribute' EQName^Token\n    case 3194:                      // 'element' EQName^Token\n    case 9915:                      // 'namespace' NCName^Token\n    case 9948:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14927:                     // 'array' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14969:                     // 'document-node' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14973:                     // 'empty-sequence' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14995:                     // 'function' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15002:                     // 'if' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15015:                     // 'item' '#'\n    case 15016:                     // 'json' '#'\n    case 15017:                     // 'json-item' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15036:                     // 'namespace-node' '#'\n    case 15037:                     // 'ne' '#'\n    case 15042:                     // 'node' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15078:                     // 'schema-attribute' '#'\n    case 15079:                     // 'schema-element' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15095:                     // 'structured-item' '#'\n    case 15096:                     // 'switch' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15107:                     // 'typeswitch' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18055:                     // 'false' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18067:                     // 'function' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18117:                     // 'null' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18175:                     // 'true' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 37459:                     // 'attribute' 'allowing'\n    case 37498:                     // 'element' 'allowing'\n    case 37563:                     // 'namespace' 'allowing'\n    case 37596:                     // 'processing-instruction' 'allowing'\n    case 37971:                     // 'attribute' 'ancestor'\n    case 38010:                     // 'element' 'ancestor'\n    case 38075:                     // 'namespace' 'ancestor'\n    case 38108:                     // 'processing-instruction' 'ancestor'\n    case 38483:                     // 'attribute' 'ancestor-or-self'\n    case 38522:                     // 'element' 'ancestor-or-self'\n    case 38587:                     // 'namespace' 'ancestor-or-self'\n    case 38620:                     // 'processing-instruction' 'ancestor-or-self'\n    case 40019:                     // 'attribute' 'append'\n    case 40058:                     // 'element' 'append'\n    case 40123:                     // 'namespace' 'append'\n    case 40156:                     // 'processing-instruction' 'append'\n    case 40531:                     // 'attribute' 'array'\n    case 40570:                     // 'element' 'array'\n    case 42579:                     // 'attribute' 'attribute'\n    case 42618:                     // 'element' 'attribute'\n    case 42683:                     // 'namespace' 'attribute'\n    case 42716:                     // 'processing-instruction' 'attribute'\n    case 43091:                     // 'attribute' 'base-uri'\n    case 43130:                     // 'element' 'base-uri'\n    case 43195:                     // 'namespace' 'base-uri'\n    case 43228:                     // 'processing-instruction' 'base-uri'\n    case 44115:                     // 'attribute' 'boundary-space'\n    case 44154:                     // 'element' 'boundary-space'\n    case 44219:                     // 'namespace' 'boundary-space'\n    case 44252:                     // 'processing-instruction' 'boundary-space'\n    case 44627:                     // 'attribute' 'break'\n    case 44666:                     // 'element' 'break'\n    case 44731:                     // 'namespace' 'break'\n    case 44764:                     // 'processing-instruction' 'break'\n    case 47187:                     // 'attribute' 'catch'\n    case 47226:                     // 'element' 'catch'\n    case 47291:                     // 'namespace' 'catch'\n    case 47324:                     // 'processing-instruction' 'catch'\n    case 48211:                     // 'attribute' 'child'\n    case 48250:                     // 'element' 'child'\n    case 48315:                     // 'namespace' 'child'\n    case 48348:                     // 'processing-instruction' 'child'\n    case 49747:                     // 'attribute' 'comment'\n    case 49786:                     // 'element' 'comment'\n    case 49851:                     // 'namespace' 'comment'\n    case 49884:                     // 'processing-instruction' 'comment'\n    case 50259:                     // 'attribute' 'constraint'\n    case 50298:                     // 'element' 'constraint'\n    case 50363:                     // 'namespace' 'constraint'\n    case 50396:                     // 'processing-instruction' 'constraint'\n    case 50771:                     // 'attribute' 'construction'\n    case 50810:                     // 'element' 'construction'\n    case 50875:                     // 'namespace' 'construction'\n    case 50908:                     // 'processing-instruction' 'construction'\n    case 52307:                     // 'attribute' 'context'\n    case 52346:                     // 'element' 'context'\n    case 52411:                     // 'namespace' 'context'\n    case 52444:                     // 'processing-instruction' 'context'\n    case 52819:                     // 'attribute' 'continue'\n    case 52858:                     // 'element' 'continue'\n    case 52923:                     // 'namespace' 'continue'\n    case 52956:                     // 'processing-instruction' 'continue'\n    case 53331:                     // 'attribute' 'copy'\n    case 53370:                     // 'element' 'copy'\n    case 53435:                     // 'namespace' 'copy'\n    case 53468:                     // 'processing-instruction' 'copy'\n    case 53843:                     // 'attribute' 'copy-namespaces'\n    case 53882:                     // 'element' 'copy-namespaces'\n    case 53947:                     // 'namespace' 'copy-namespaces'\n    case 53980:                     // 'processing-instruction' 'copy-namespaces'\n    case 54867:                     // 'attribute' 'decimal-format'\n    case 54906:                     // 'element' 'decimal-format'\n    case 54971:                     // 'namespace' 'decimal-format'\n    case 55004:                     // 'processing-instruction' 'decimal-format'\n    case 55891:                     // 'attribute' 'declare'\n    case 55930:                     // 'element' 'declare'\n    case 55995:                     // 'namespace' 'declare'\n    case 56028:                     // 'processing-instruction' 'declare'\n    case 56915:                     // 'attribute' 'delete'\n    case 56954:                     // 'element' 'delete'\n    case 57019:                     // 'namespace' 'delete'\n    case 57052:                     // 'processing-instruction' 'delete'\n    case 57427:                     // 'attribute' 'descendant'\n    case 57466:                     // 'element' 'descendant'\n    case 57531:                     // 'namespace' 'descendant'\n    case 57564:                     // 'processing-instruction' 'descendant'\n    case 57939:                     // 'attribute' 'descendant-or-self'\n    case 57978:                     // 'element' 'descendant-or-self'\n    case 58043:                     // 'namespace' 'descendant-or-self'\n    case 58076:                     // 'processing-instruction' 'descendant-or-self'\n    case 61523:                     // 'attribute' 'document'\n    case 61562:                     // 'element' 'document'\n    case 61627:                     // 'namespace' 'document'\n    case 61660:                     // 'processing-instruction' 'document'\n    case 62035:                     // 'attribute' 'document-node'\n    case 62074:                     // 'element' 'document-node'\n    case 62139:                     // 'namespace' 'document-node'\n    case 62172:                     // 'processing-instruction' 'document-node'\n    case 62547:                     // 'attribute' 'element'\n    case 62586:                     // 'element' 'element'\n    case 62651:                     // 'namespace' 'element'\n    case 62684:                     // 'processing-instruction' 'element'\n    case 64083:                     // 'attribute' 'empty-sequence'\n    case 64122:                     // 'element' 'empty-sequence'\n    case 64187:                     // 'namespace' 'empty-sequence'\n    case 64220:                     // 'processing-instruction' 'empty-sequence'\n    case 64595:                     // 'attribute' 'encoding'\n    case 64634:                     // 'element' 'encoding'\n    case 64699:                     // 'namespace' 'encoding'\n    case 64732:                     // 'processing-instruction' 'encoding'\n    case 66643:                     // 'attribute' 'every'\n    case 66682:                     // 'element' 'every'\n    case 66747:                     // 'namespace' 'every'\n    case 66780:                     // 'processing-instruction' 'every'\n    case 68179:                     // 'attribute' 'exit'\n    case 68218:                     // 'element' 'exit'\n    case 68283:                     // 'namespace' 'exit'\n    case 68316:                     // 'processing-instruction' 'exit'\n    case 68691:                     // 'attribute' 'external'\n    case 68730:                     // 'element' 'external'\n    case 68795:                     // 'namespace' 'external'\n    case 68828:                     // 'processing-instruction' 'external'\n    case 69203:                     // 'attribute' 'false'\n    case 69242:                     // 'element' 'false'\n    case 69307:                     // 'namespace' 'false'\n    case 69340:                     // 'processing-instruction' 'false'\n    case 69715:                     // 'attribute' 'first'\n    case 69754:                     // 'element' 'first'\n    case 69819:                     // 'namespace' 'first'\n    case 69852:                     // 'processing-instruction' 'first'\n    case 70227:                     // 'attribute' 'following'\n    case 70266:                     // 'element' 'following'\n    case 70331:                     // 'namespace' 'following'\n    case 70364:                     // 'processing-instruction' 'following'\n    case 70739:                     // 'attribute' 'following-sibling'\n    case 70778:                     // 'element' 'following-sibling'\n    case 70843:                     // 'namespace' 'following-sibling'\n    case 70876:                     // 'processing-instruction' 'following-sibling'\n    case 72787:                     // 'attribute' 'from'\n    case 72826:                     // 'element' 'from'\n    case 72891:                     // 'namespace' 'from'\n    case 72924:                     // 'processing-instruction' 'from'\n    case 73299:                     // 'attribute' 'ft-option'\n    case 73338:                     // 'element' 'ft-option'\n    case 73403:                     // 'namespace' 'ft-option'\n    case 73436:                     // 'processing-instruction' 'ft-option'\n    case 75347:                     // 'attribute' 'function'\n    case 75386:                     // 'element' 'function'\n    case 75451:                     // 'namespace' 'function'\n    case 75484:                     // 'processing-instruction' 'function'\n    case 78931:                     // 'attribute' 'if'\n    case 78970:                     // 'element' 'if'\n    case 79035:                     // 'namespace' 'if'\n    case 79068:                     // 'processing-instruction' 'if'\n    case 79443:                     // 'attribute' 'import'\n    case 79482:                     // 'element' 'import'\n    case 79547:                     // 'namespace' 'import'\n    case 79580:                     // 'processing-instruction' 'import'\n    case 79955:                     // 'attribute' 'in'\n    case 79994:                     // 'element' 'in'\n    case 80059:                     // 'namespace' 'in'\n    case 80092:                     // 'processing-instruction' 'in'\n    case 80467:                     // 'attribute' 'index'\n    case 80506:                     // 'element' 'index'\n    case 80571:                     // 'namespace' 'index'\n    case 80604:                     // 'processing-instruction' 'index'\n    case 82515:                     // 'attribute' 'insert'\n    case 82554:                     // 'element' 'insert'\n    case 82619:                     // 'namespace' 'insert'\n    case 82652:                     // 'processing-instruction' 'insert'\n    case 83539:                     // 'attribute' 'integrity'\n    case 83578:                     // 'element' 'integrity'\n    case 83643:                     // 'namespace' 'integrity'\n    case 83676:                     // 'processing-instruction' 'integrity'\n    case 85587:                     // 'attribute' 'item'\n    case 85626:                     // 'element' 'item'\n    case 85691:                     // 'namespace' 'item'\n    case 85724:                     // 'processing-instruction' 'item'\n    case 86099:                     // 'attribute' 'json'\n    case 86138:                     // 'element' 'json'\n    case 86203:                     // 'namespace' 'json'\n    case 86236:                     // 'processing-instruction' 'json'\n    case 86611:                     // 'attribute' 'json-item'\n    case 86650:                     // 'element' 'json-item'\n    case 87123:                     // 'attribute' 'jsoniq'\n    case 87162:                     // 'element' 'jsoniq'\n    case 87227:                     // 'namespace' 'jsoniq'\n    case 87260:                     // 'processing-instruction' 'jsoniq'\n    case 88659:                     // 'attribute' 'last'\n    case 88698:                     // 'element' 'last'\n    case 88763:                     // 'namespace' 'last'\n    case 88796:                     // 'processing-instruction' 'last'\n    case 89171:                     // 'attribute' 'lax'\n    case 89210:                     // 'element' 'lax'\n    case 89275:                     // 'namespace' 'lax'\n    case 89308:                     // 'processing-instruction' 'lax'\n    case 91731:                     // 'attribute' 'loop'\n    case 91770:                     // 'element' 'loop'\n    case 91835:                     // 'namespace' 'loop'\n    case 91868:                     // 'processing-instruction' 'loop'\n    case 94803:                     // 'attribute' 'module'\n    case 94842:                     // 'element' 'module'\n    case 94907:                     // 'namespace' 'module'\n    case 94940:                     // 'processing-instruction' 'module'\n    case 95827:                     // 'attribute' 'namespace'\n    case 95866:                     // 'element' 'namespace'\n    case 95931:                     // 'namespace' 'namespace'\n    case 95964:                     // 'processing-instruction' 'namespace'\n    case 96339:                     // 'attribute' 'namespace-node'\n    case 96378:                     // 'element' 'namespace-node'\n    case 96443:                     // 'namespace' 'namespace-node'\n    case 96476:                     // 'processing-instruction' 'namespace-node'\n    case 99411:                     // 'attribute' 'node'\n    case 99450:                     // 'element' 'node'\n    case 99515:                     // 'namespace' 'node'\n    case 99548:                     // 'processing-instruction' 'node'\n    case 99923:                     // 'attribute' 'nodes'\n    case 99962:                     // 'element' 'nodes'\n    case 100027:                    // 'namespace' 'nodes'\n    case 100060:                    // 'processing-instruction' 'nodes'\n    case 100947:                    // 'attribute' 'null'\n    case 100986:                    // 'element' 'null'\n    case 101051:                    // 'namespace' 'null'\n    case 101084:                    // 'processing-instruction' 'null'\n    case 101459:                    // 'attribute' 'object'\n    case 101498:                    // 'element' 'object'\n    case 101563:                    // 'namespace' 'object'\n    case 101596:                    // 'processing-instruction' 'object'\n    case 104019:                    // 'attribute' 'option'\n    case 104058:                    // 'element' 'option'\n    case 104123:                    // 'namespace' 'option'\n    case 104156:                    // 'processing-instruction' 'option'\n    case 105555:                    // 'attribute' 'ordered'\n    case 105594:                    // 'element' 'ordered'\n    case 105659:                    // 'namespace' 'ordered'\n    case 105692:                    // 'processing-instruction' 'ordered'\n    case 106067:                    // 'attribute' 'ordering'\n    case 106106:                    // 'element' 'ordering'\n    case 106171:                    // 'namespace' 'ordering'\n    case 106204:                    // 'processing-instruction' 'ordering'\n    case 107603:                    // 'attribute' 'parent'\n    case 107642:                    // 'element' 'parent'\n    case 107707:                    // 'namespace' 'parent'\n    case 107740:                    // 'processing-instruction' 'parent'\n    case 110675:                    // 'attribute' 'preceding'\n    case 110714:                    // 'element' 'preceding'\n    case 110779:                    // 'namespace' 'preceding'\n    case 110812:                    // 'processing-instruction' 'preceding'\n    case 111187:                    // 'attribute' 'preceding-sibling'\n    case 111226:                    // 'element' 'preceding-sibling'\n    case 111291:                    // 'namespace' 'preceding-sibling'\n    case 111324:                    // 'processing-instruction' 'preceding-sibling'\n    case 112723:                    // 'attribute' 'processing-instruction'\n    case 112762:                    // 'element' 'processing-instruction'\n    case 112827:                    // 'namespace' 'processing-instruction'\n    case 112860:                    // 'processing-instruction' 'processing-instruction'\n    case 113747:                    // 'attribute' 'rename'\n    case 113786:                    // 'element' 'rename'\n    case 113851:                    // 'namespace' 'rename'\n    case 113884:                    // 'processing-instruction' 'rename'\n    case 114259:                    // 'attribute' 'replace'\n    case 114298:                    // 'element' 'replace'\n    case 114363:                    // 'namespace' 'replace'\n    case 114396:                    // 'processing-instruction' 'replace'\n    case 115283:                    // 'attribute' 'returning'\n    case 115322:                    // 'element' 'returning'\n    case 115387:                    // 'namespace' 'returning'\n    case 115420:                    // 'processing-instruction' 'returning'\n    case 115795:                    // 'attribute' 'revalidation'\n    case 115834:                    // 'element' 'revalidation'\n    case 115899:                    // 'namespace' 'revalidation'\n    case 115932:                    // 'processing-instruction' 'revalidation'\n    case 117331:                    // 'attribute' 'schema'\n    case 117370:                    // 'element' 'schema'\n    case 117435:                    // 'namespace' 'schema'\n    case 117468:                    // 'processing-instruction' 'schema'\n    case 117843:                    // 'attribute' 'schema-attribute'\n    case 117882:                    // 'element' 'schema-attribute'\n    case 117947:                    // 'namespace' 'schema-attribute'\n    case 117980:                    // 'processing-instruction' 'schema-attribute'\n    case 118355:                    // 'attribute' 'schema-element'\n    case 118394:                    // 'element' 'schema-element'\n    case 118459:                    // 'namespace' 'schema-element'\n    case 118492:                    // 'processing-instruction' 'schema-element'\n    case 118867:                    // 'attribute' 'score'\n    case 118906:                    // 'element' 'score'\n    case 118971:                    // 'namespace' 'score'\n    case 119004:                    // 'processing-instruction' 'score'\n    case 119379:                    // 'attribute' 'select'\n    case 119418:                    // 'element' 'select'\n    case 119483:                    // 'namespace' 'select'\n    case 119516:                    // 'processing-instruction' 'select'\n    case 119891:                    // 'attribute' 'self'\n    case 119930:                    // 'element' 'self'\n    case 119995:                    // 'namespace' 'self'\n    case 120028:                    // 'processing-instruction' 'self'\n    case 122451:                    // 'attribute' 'sliding'\n    case 122490:                    // 'element' 'sliding'\n    case 122555:                    // 'namespace' 'sliding'\n    case 122588:                    // 'processing-instruction' 'sliding'\n    case 122963:                    // 'attribute' 'some'\n    case 123002:                    // 'element' 'some'\n    case 123067:                    // 'namespace' 'some'\n    case 123100:                    // 'processing-instruction' 'some'\n    case 125523:                    // 'attribute' 'strict'\n    case 125562:                    // 'element' 'strict'\n    case 125627:                    // 'namespace' 'strict'\n    case 125660:                    // 'processing-instruction' 'strict'\n    case 126547:                    // 'attribute' 'structured-item'\n    case 126586:                    // 'element' 'structured-item'\n    case 127059:                    // 'attribute' 'switch'\n    case 127098:                    // 'element' 'switch'\n    case 127163:                    // 'namespace' 'switch'\n    case 127196:                    // 'processing-instruction' 'switch'\n    case 127571:                    // 'attribute' 'text'\n    case 127610:                    // 'element' 'text'\n    case 127675:                    // 'namespace' 'text'\n    case 127708:                    // 'processing-instruction' 'text'\n    case 130643:                    // 'attribute' 'true'\n    case 130682:                    // 'element' 'true'\n    case 130747:                    // 'namespace' 'true'\n    case 130780:                    // 'processing-instruction' 'true'\n    case 131155:                    // 'attribute' 'try'\n    case 131194:                    // 'element' 'try'\n    case 131259:                    // 'namespace' 'try'\n    case 131292:                    // 'processing-instruction' 'try'\n    case 131667:                    // 'attribute' 'tumbling'\n    case 131706:                    // 'element' 'tumbling'\n    case 131771:                    // 'namespace' 'tumbling'\n    case 131804:                    // 'processing-instruction' 'tumbling'\n    case 132179:                    // 'attribute' 'type'\n    case 132218:                    // 'element' 'type'\n    case 132283:                    // 'namespace' 'type'\n    case 132316:                    // 'processing-instruction' 'type'\n    case 132691:                    // 'attribute' 'typeswitch'\n    case 132730:                    // 'element' 'typeswitch'\n    case 132795:                    // 'namespace' 'typeswitch'\n    case 132828:                    // 'processing-instruction' 'typeswitch'\n    case 134227:                    // 'attribute' 'unordered'\n    case 134266:                    // 'element' 'unordered'\n    case 134331:                    // 'namespace' 'unordered'\n    case 134364:                    // 'processing-instruction' 'unordered'\n    case 134739:                    // 'attribute' 'updating'\n    case 134778:                    // 'element' 'updating'\n    case 134843:                    // 'namespace' 'updating'\n    case 134876:                    // 'processing-instruction' 'updating'\n    case 136275:                    // 'attribute' 'validate'\n    case 136314:                    // 'element' 'validate'\n    case 136379:                    // 'namespace' 'validate'\n    case 136412:                    // 'processing-instruction' 'validate'\n    case 136787:                    // 'attribute' 'value'\n    case 136826:                    // 'element' 'value'\n    case 136891:                    // 'namespace' 'value'\n    case 136924:                    // 'processing-instruction' 'value'\n    case 137299:                    // 'attribute' 'variable'\n    case 137338:                    // 'element' 'variable'\n    case 137403:                    // 'namespace' 'variable'\n    case 137436:                    // 'processing-instruction' 'variable'\n    case 137811:                    // 'attribute' 'version'\n    case 137850:                    // 'element' 'version'\n    case 137915:                    // 'namespace' 'version'\n    case 137948:                    // 'processing-instruction' 'version'\n    case 139859:                    // 'attribute' 'while'\n    case 139898:                    // 'element' 'while'\n    case 139963:                    // 'namespace' 'while'\n    case 139996:                    // 'processing-instruction' 'while'\n    case 143955:                    // 'attribute' '{'\n    case 143969:                    // 'comment' '{'\n    case 143992:                    // 'document' '{'\n    case 143994:                    // 'element' '{'\n    case 144059:                    // 'namespace' '{'\n    case 144078:                    // 'ordered' '{'\n    case 144092:                    // 'processing-instruction' '{'\n    case 144121:                    // 'text' '{'\n    case 144134:                    // 'unordered' '{'\n      try_PostfixExpr();\n      break;\n    case -3:\n      break;\n    default:\n      try_AxisStep();\n    }\n  }\n\n  function parse_AxisStep()\n  {\n    eventHandler.startNonterminal(\"AxisStep\", e0);\n    switch (l1)\n    {\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 46:                        // '..'\n    case 26698:                     // 'ancestor' '::'\n    case 26699:                     // 'ancestor-or-self' '::'\n    case 26834:                     // 'parent' '::'\n    case 26840:                     // 'preceding' '::'\n    case 26841:                     // 'preceding-sibling' '::'\n      parse_ReverseStep();\n      break;\n    default:\n      parse_ForwardStep();\n    }\n    lookahead1W(227);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    whitespace();\n    parse_PredicateList();\n    eventHandler.endNonterminal(\"AxisStep\", e0);\n  }\n\n  function try_AxisStep()\n  {\n    switch (l1)\n    {\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 46:                        // '..'\n    case 26698:                     // 'ancestor' '::'\n    case 26699:                     // 'ancestor-or-self' '::'\n    case 26834:                     // 'parent' '::'\n    case 26840:                     // 'preceding' '::'\n    case 26841:                     // 'preceding-sibling' '::'\n      try_ReverseStep();\n      break;\n    default:\n      try_ForwardStep();\n    }\n    lookahead1W(227);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    try_PredicateList();\n  }\n\n  function parse_ForwardStep()\n  {\n    eventHandler.startNonterminal(\"ForwardStep\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 234:                       // 'self'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26707:                     // 'attribute' '::'\n    case 26718:                     // 'child' '::'\n    case 26736:                     // 'descendant' '::'\n    case 26737:                     // 'descendant-or-self' '::'\n    case 26761:                     // 'following' '::'\n    case 26762:                     // 'following-sibling' '::'\n    case 26858:                     // 'self' '::'\n      parse_ForwardAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n      break;\n    default:\n      parse_AbbrevForwardStep();\n    }\n    eventHandler.endNonterminal(\"ForwardStep\", e0);\n  }\n\n  function try_ForwardStep()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 234:                       // 'self'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26707:                     // 'attribute' '::'\n    case 26718:                     // 'child' '::'\n    case 26736:                     // 'descendant' '::'\n    case 26737:                     // 'descendant-or-self' '::'\n    case 26761:                     // 'following' '::'\n    case 26762:                     // 'following-sibling' '::'\n    case 26858:                     // 'self' '::'\n      try_ForwardAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n      break;\n    default:\n      try_AbbrevForwardStep();\n    }\n  }\n\n  function parse_ForwardAxis()\n  {\n    eventHandler.startNonterminal(\"ForwardAxis\", e0);\n    switch (l1)\n    {\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    default:\n      shift(137);                   // 'following'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ForwardAxis\", e0);\n  }\n\n  function try_ForwardAxis()\n  {\n    switch (l1)\n    {\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    default:\n      shiftT(137);                  // 'following'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n    }\n  }\n\n  function parse_AbbrevForwardStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevForwardStep\", e0);\n    if (l1 == 67)                   // '@'\n    {\n      shift(67);                    // '@'\n    }\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NodeTest();\n    eventHandler.endNonterminal(\"AbbrevForwardStep\", e0);\n  }\n\n  function try_AbbrevForwardStep()\n  {\n    if (l1 == 67)                   // '@'\n    {\n      shiftT(67);                   // '@'\n    }\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_NodeTest();\n  }\n\n  function parse_ReverseStep()\n  {\n    eventHandler.startNonterminal(\"ReverseStep\", e0);\n    switch (l1)\n    {\n    case 46:                        // '..'\n      parse_AbbrevReverseStep();\n      break;\n    default:\n      parse_ReverseAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n    }\n    eventHandler.endNonterminal(\"ReverseStep\", e0);\n  }\n\n  function try_ReverseStep()\n  {\n    switch (l1)\n    {\n    case 46:                        // '..'\n      try_AbbrevReverseStep();\n      break;\n    default:\n      try_ReverseAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n    }\n  }\n\n  function parse_ReverseAxis()\n  {\n    eventHandler.startNonterminal(\"ReverseAxis\", e0);\n    switch (l1)\n    {\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    default:\n      shift(75);                    // 'ancestor-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ReverseAxis\", e0);\n  }\n\n  function try_ReverseAxis()\n  {\n    switch (l1)\n    {\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    default:\n      shiftT(75);                   // 'ancestor-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n    }\n  }\n\n  function parse_AbbrevReverseStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevReverseStep\", e0);\n    shift(46);                      // '..'\n    eventHandler.endNonterminal(\"AbbrevReverseStep\", e0);\n  }\n\n  function try_AbbrevReverseStep()\n  {\n    shiftT(46);                     // '..'\n  }\n\n  function parse_NodeTest()\n  {\n    eventHandler.startNonterminal(\"NodeTest\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 249:                       // 'text'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      parse_KindTest();\n      break;\n    default:\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"NodeTest\", e0);\n  }\n\n  function try_NodeTest()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 249:                       // 'text'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      try_KindTest();\n      break;\n    default:\n      try_NameTest();\n    }\n  }\n\n  function parse_NameTest()\n  {\n    eventHandler.startNonterminal(\"NameTest\", e0);\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shift(5);                     // Wildcard\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"NameTest\", e0);\n  }\n\n  function try_NameTest()\n  {\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shiftT(5);                    // Wildcard\n      break;\n    default:\n      try_EQName();\n    }\n  }\n\n  function parse_PostfixExpr()\n  {\n    eventHandler.startNonterminal(\"PostfixExpr\", e0);\n    parse_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(234);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' | '/' |\n      if (l1 != 35                  // '('\n       && l1 != 45                  // '.'\n       && l1 != 69)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 35397)              // '[' '['\n      {\n        lk = memoized(5, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Predicate();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -4;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(5, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case 35:                      // '('\n        whitespace();\n        parse_ArgumentList();\n        break;\n      case 45:                      // '.'\n        whitespace();\n        parse_ObjectLookup();\n        break;\n      case -4:\n        whitespace();\n        parse_ArrayLookup();\n        break;\n      case 35909:                   // '[' ']'\n        whitespace();\n        parse_ArrayUnboxing();\n        break;\n      default:\n        whitespace();\n        parse_Predicate();\n      }\n    }\n    eventHandler.endNonterminal(\"PostfixExpr\", e0);\n  }\n\n  function try_PostfixExpr()\n  {\n    try_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(234);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' | '/' |\n      if (l1 != 35                  // '('\n       && l1 != 45                  // '.'\n       && l1 != 69)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 35397)              // '[' '['\n      {\n        lk = memoized(5, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Predicate();\n            memoize(5, e0A, -1);\n            lk = -6;\n          }\n          catch (p1A)\n          {\n            lk = -4;\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(5, e0A, -4);\n          }\n        }\n      }\n      switch (lk)\n      {\n      case 35:                      // '('\n        try_ArgumentList();\n        break;\n      case 45:                      // '.'\n        try_ObjectLookup();\n        break;\n      case -4:\n        try_ArrayLookup();\n        break;\n      case 35909:                   // '[' ']'\n        try_ArrayUnboxing();\n        break;\n      case -6:\n        break;\n      default:\n        try_Predicate();\n      }\n    }\n  }\n\n  function parse_ObjectLookup()\n  {\n    eventHandler.startNonterminal(\"ObjectLookup\", e0);\n    shift(45);                      // '.'\n    lookahead1W(250);               // StringLiteral | NCName^Token | S^WS | '$' | '$$' | '(' | '(:' | 'after' |\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    case 35:                        // '('\n      whitespace();\n      parse_ParenthesizedExpr();\n      break;\n    case 31:                        // '$'\n      whitespace();\n      parse_VarRef();\n      break;\n    case 32:                        // '$$'\n      whitespace();\n      parse_ContextItemExpr();\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    eventHandler.endNonterminal(\"ObjectLookup\", e0);\n  }\n\n  function try_ObjectLookup()\n  {\n    shiftT(45);                     // '.'\n    lookahead1W(250);               // StringLiteral | NCName^Token | S^WS | '$' | '$$' | '(' | '(:' | 'after' |\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    case 35:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 32:                        // '$$'\n      try_ContextItemExpr();\n      break;\n    default:\n      try_NCName();\n    }\n  }\n\n  function parse_ArrayLookup()\n  {\n    eventHandler.startNonterminal(\"ArrayLookup\", e0);\n    shift(69);                      // '['\n    lookahead1W(31);                // S^WS | '(:' | '['\n    shift(69);                      // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(70);                      // ']'\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayLookup\", e0);\n  }\n\n  function try_ArrayLookup()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(31);                // S^WS | '(:' | '['\n    shiftT(69);                     // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(70);                     // ']'\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shiftT(70);                     // ']'\n  }\n\n  function parse_ArrayUnboxing()\n  {\n    eventHandler.startNonterminal(\"ArrayUnboxing\", e0);\n    shift(69);                      // '['\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayUnboxing\", e0);\n  }\n\n  function try_ArrayUnboxing()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shiftT(70);                     // ']'\n  }\n\n  function parse_ArgumentList()\n  {\n    eventHandler.startNonterminal(\"ArgumentList\", e0);\n    shift(35);                      // '('\n    lookahead1W(279);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_Argument();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(271);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_Argument();\n      }\n    }\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ArgumentList\", e0);\n  }\n\n  function try_ArgumentList()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(279);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      try_Argument();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(271);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_Argument();\n      }\n    }\n    shiftT(38);                     // ')'\n  }\n\n  function parse_PredicateList()\n  {\n    eventHandler.startNonterminal(\"PredicateList\", e0);\n    for (;;)\n    {\n      lookahead1W(227);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 69)                 // '['\n      {\n        break;\n      }\n      whitespace();\n      parse_Predicate();\n    }\n    eventHandler.endNonterminal(\"PredicateList\", e0);\n  }\n\n  function try_PredicateList()\n  {\n    for (;;)\n    {\n      lookahead1W(227);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 69)                 // '['\n      {\n        break;\n      }\n      try_Predicate();\n    }\n  }\n\n  function parse_Predicate()\n  {\n    eventHandler.startNonterminal(\"Predicate\", e0);\n    shift(69);                      // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"Predicate\", e0);\n  }\n\n  function try_Predicate()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(70);                     // ']'\n  }\n\n  function parse_Literal()\n  {\n    eventHandler.startNonterminal(\"Literal\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    case 135:                       // 'false'\n    case 255:                       // 'true'\n      parse_BooleanLiteral();\n      break;\n    case 197:                       // 'null'\n      parse_NullLiteral();\n      break;\n    default:\n      parse_NumericLiteral();\n    }\n    eventHandler.endNonterminal(\"Literal\", e0);\n  }\n\n  function try_Literal()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    case 135:                       // 'false'\n    case 255:                       // 'true'\n      try_BooleanLiteral();\n      break;\n    case 197:                       // 'null'\n      try_NullLiteral();\n      break;\n    default:\n      try_NumericLiteral();\n    }\n  }\n\n  function parse_BooleanLiteral()\n  {\n    eventHandler.startNonterminal(\"BooleanLiteral\", e0);\n    switch (l1)\n    {\n    case 255:                       // 'true'\n      shift(255);                   // 'true'\n      break;\n    default:\n      shift(135);                   // 'false'\n    }\n    eventHandler.endNonterminal(\"BooleanLiteral\", e0);\n  }\n\n  function try_BooleanLiteral()\n  {\n    switch (l1)\n    {\n    case 255:                       // 'true'\n      shiftT(255);                  // 'true'\n      break;\n    default:\n      shiftT(135);                  // 'false'\n    }\n  }\n\n  function parse_NullLiteral()\n  {\n    eventHandler.startNonterminal(\"NullLiteral\", e0);\n    shift(197);                     // 'null'\n    eventHandler.endNonterminal(\"NullLiteral\", e0);\n  }\n\n  function try_NullLiteral()\n  {\n    shiftT(197);                    // 'null'\n  }\n\n  function parse_NumericLiteral()\n  {\n    eventHandler.startNonterminal(\"NumericLiteral\", e0);\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shift(8);                     // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shift(9);                     // DecimalLiteral\n      break;\n    default:\n      shift(10);                    // DoubleLiteral\n    }\n    eventHandler.endNonterminal(\"NumericLiteral\", e0);\n  }\n\n  function try_NumericLiteral()\n  {\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shiftT(9);                    // DecimalLiteral\n      break;\n    default:\n      shiftT(10);                   // DoubleLiteral\n    }\n  }\n\n  function parse_VarRef()\n  {\n    eventHandler.startNonterminal(\"VarRef\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"VarRef\", e0);\n  }\n\n  function try_VarRef()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_VarName()\n  {\n    eventHandler.startNonterminal(\"VarName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"VarName\", e0);\n  }\n\n  function try_VarName()\n  {\n    try_EQName();\n  }\n\n  function parse_ParenthesizedExpr()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedExpr\", e0);\n    shift(35);                      // '('\n    lookahead1W(269);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedExpr\", e0);\n  }\n\n  function try_ParenthesizedExpr()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(269);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      try_Expr();\n    }\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ContextItemExpr()\n  {\n    eventHandler.startNonterminal(\"ContextItemExpr\", e0);\n    shift(32);                      // '$$'\n    eventHandler.endNonterminal(\"ContextItemExpr\", e0);\n  }\n\n  function try_ContextItemExpr()\n  {\n    shiftT(32);                     // '$$'\n  }\n\n  function parse_OrderedExpr()\n  {\n    eventHandler.startNonterminal(\"OrderedExpr\", e0);\n    shift(206);                     // 'ordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"OrderedExpr\", e0);\n  }\n\n  function try_OrderedExpr()\n  {\n    shiftT(206);                    // 'ordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_UnorderedExpr()\n  {\n    eventHandler.startNonterminal(\"UnorderedExpr\", e0);\n    shift(262);                     // 'unordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"UnorderedExpr\", e0);\n  }\n\n  function try_UnorderedExpr()\n  {\n    shiftT(262);                    // 'unordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FunctionCall()\n  {\n    eventHandler.startNonterminal(\"FunctionCall\", e0);\n    parse_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    whitespace();\n    parse_ArgumentList();\n    eventHandler.endNonterminal(\"FunctionCall\", e0);\n  }\n\n  function try_FunctionCall()\n  {\n    try_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    try_ArgumentList();\n  }\n\n  function parse_Argument()\n  {\n    eventHandler.startNonterminal(\"Argument\", e0);\n    switch (l1)\n    {\n    case 65:                        // '?'\n      parse_ArgumentPlaceholder();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Argument\", e0);\n  }\n\n  function try_Argument()\n  {\n    switch (l1)\n    {\n    case 65:                        // '?'\n      try_ArgumentPlaceholder();\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_ArgumentPlaceholder()\n  {\n    eventHandler.startNonterminal(\"ArgumentPlaceholder\", e0);\n    shift(65);                      // '?'\n    eventHandler.endNonterminal(\"ArgumentPlaceholder\", e0);\n  }\n\n  function try_ArgumentPlaceholder()\n  {\n    shiftT(65);                     // '?'\n  }\n\n  function parse_Constructor()\n  {\n    eventHandler.startNonterminal(\"Constructor\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    default:\n      parse_ComputedConstructor();\n    }\n    eventHandler.endNonterminal(\"Constructor\", e0);\n  }\n\n  function try_Constructor()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      try_DirectConstructor();\n      break;\n    default:\n      try_ComputedConstructor();\n    }\n  }\n\n  function parse_DirectConstructor()\n  {\n    eventHandler.startNonterminal(\"DirectConstructor\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n      parse_DirElemConstructor();\n      break;\n    case 56:                        // '<!--'\n      parse_DirCommentConstructor();\n      break;\n    default:\n      parse_DirPIConstructor();\n    }\n    eventHandler.endNonterminal(\"DirectConstructor\", e0);\n  }\n\n  function try_DirectConstructor()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n      try_DirElemConstructor();\n      break;\n    case 56:                        // '<!--'\n      try_DirCommentConstructor();\n      break;\n    default:\n      try_DirPIConstructor();\n    }\n  }\n\n  function parse_DirElemConstructor()\n  {\n    eventHandler.startNonterminal(\"DirElemConstructor\", e0);\n    shift(55);                      // '<'\n    lookahead1(4);                  // QName\n    shift(20);                      // QName\n    parse_DirAttributeList();\n    switch (l1)\n    {\n    case 49:                        // '/>'\n      shift(49);                    // '/>'\n      break;\n    default:\n      shift(62);                    // '>'\n      for (;;)\n      {\n        lookahead1(196);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 57)               // '</'\n        {\n          break;\n        }\n        parse_DirElemContent();\n      }\n      shift(57);                    // '</'\n      lookahead1(4);                // QName\n      shift(20);                    // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shift(21);                  // S\n      }\n      lookahead1(8);                // '>'\n      shift(62);                    // '>'\n    }\n    eventHandler.endNonterminal(\"DirElemConstructor\", e0);\n  }\n\n  function try_DirElemConstructor()\n  {\n    shiftT(55);                     // '<'\n    lookahead1(4);                  // QName\n    shiftT(20);                     // QName\n    try_DirAttributeList();\n    switch (l1)\n    {\n    case 49:                        // '/>'\n      shiftT(49);                   // '/>'\n      break;\n    default:\n      shiftT(62);                   // '>'\n      for (;;)\n      {\n        lookahead1(196);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 57)               // '</'\n        {\n          break;\n        }\n        try_DirElemContent();\n      }\n      shiftT(57);                   // '</'\n      lookahead1(4);                // QName\n      shiftT(20);                   // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shiftT(21);                 // S\n      }\n      lookahead1(8);                // '>'\n      shiftT(62);                   // '>'\n    }\n  }\n\n  function parse_DirAttributeList()\n  {\n    eventHandler.startNonterminal(\"DirAttributeList\", e0);\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shift(21);                    // S\n      lookahead1(94);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shift(20);                  // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        lookahead1(7);              // '='\n        shift(61);                  // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        parse_DirAttributeValue();\n      }\n    }\n    eventHandler.endNonterminal(\"DirAttributeList\", e0);\n  }\n\n  function try_DirAttributeList()\n  {\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shiftT(21);                   // S\n      lookahead1(94);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shiftT(20);                 // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        lookahead1(7);              // '='\n        shiftT(61);                 // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        try_DirAttributeValue();\n      }\n    }\n  }\n\n  function parse_DirAttributeValue()\n  {\n    eventHandler.startNonterminal(\"DirAttributeValue\", e0);\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shift(28);                    // '\"'\n      for (;;)\n      {\n        lookahead1(185);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shift(13);                // EscapeQuot\n          break;\n        default:\n          parse_QuotAttrValueContent();\n        }\n      }\n      shift(28);                    // '\"'\n      break;\n    default:\n      shift(34);                    // \"'\"\n      for (;;)\n      {\n        lookahead1(186);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 34)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shift(14);                // EscapeApos\n          break;\n        default:\n          parse_AposAttrValueContent();\n        }\n      }\n      shift(34);                    // \"'\"\n    }\n    eventHandler.endNonterminal(\"DirAttributeValue\", e0);\n  }\n\n  function try_DirAttributeValue()\n  {\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shiftT(28);                   // '\"'\n      for (;;)\n      {\n        lookahead1(185);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shiftT(13);               // EscapeQuot\n          break;\n        default:\n          try_QuotAttrValueContent();\n        }\n      }\n      shiftT(28);                   // '\"'\n      break;\n    default:\n      shiftT(34);                   // \"'\"\n      for (;;)\n      {\n        lookahead1(186);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 34)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shiftT(14);               // EscapeApos\n          break;\n        default:\n          try_AposAttrValueContent();\n        }\n      }\n      shiftT(34);                   // \"'\"\n    }\n  }\n\n  function parse_QuotAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"QuotAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shift(16);                    // QuotAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"QuotAttrValueContent\", e0);\n  }\n\n  function try_QuotAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shiftT(16);                   // QuotAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_AposAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"AposAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shift(17);                    // AposAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"AposAttrValueContent\", e0);\n  }\n\n  function try_AposAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shiftT(17);                   // AposAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirElemContent()\n  {\n    eventHandler.startNonterminal(\"DirElemContent\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shift(4);                     // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shift(15);                    // ElementContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"DirElemContent\", e0);\n  }\n\n  function try_DirElemContent()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      try_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shiftT(4);                    // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shiftT(15);                   // ElementContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"DirCommentConstructor\", e0);\n    shift(56);                      // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shift(2);                       // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shift(44);                      // '-->'\n    eventHandler.endNonterminal(\"DirCommentConstructor\", e0);\n  }\n\n  function try_DirCommentConstructor()\n  {\n    shiftT(56);                     // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shiftT(2);                      // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shiftT(44);                     // '-->'\n  }\n\n  function parse_DirPIConstructor()\n  {\n    eventHandler.startNonterminal(\"DirPIConstructor\", e0);\n    shift(60);                      // '<?'\n    lookahead1(3);                  // PITarget\n    shift(18);                      // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(2);                // DirPIContents\n      shift(3);                     // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shift(66);                      // '?>'\n    eventHandler.endNonterminal(\"DirPIConstructor\", e0);\n  }\n\n  function try_DirPIConstructor()\n  {\n    shiftT(60);                     // '<?'\n    lookahead1(3);                  // PITarget\n    shiftT(18);                     // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(2);                // DirPIContents\n      shiftT(3);                    // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shiftT(66);                     // '?>'\n  }\n\n  function parse_ComputedConstructor()\n  {\n    eventHandler.startNonterminal(\"ComputedConstructor\", e0);\n    switch (l1)\n    {\n    case 120:                       // 'document'\n      parse_CompDocConstructor();\n      break;\n    case 122:                       // 'element'\n      parse_CompElemConstructor();\n      break;\n    case 83:                        // 'attribute'\n      parse_CompAttrConstructor();\n      break;\n    case 187:                       // 'namespace'\n      parse_CompNamespaceConstructor();\n      break;\n    case 249:                       // 'text'\n      parse_CompTextConstructor();\n      break;\n    case 97:                        // 'comment'\n      parse_CompCommentConstructor();\n      break;\n    default:\n      parse_CompPIConstructor();\n    }\n    eventHandler.endNonterminal(\"ComputedConstructor\", e0);\n  }\n\n  function try_ComputedConstructor()\n  {\n    switch (l1)\n    {\n    case 120:                       // 'document'\n      try_CompDocConstructor();\n      break;\n    case 122:                       // 'element'\n      try_CompElemConstructor();\n      break;\n    case 83:                        // 'attribute'\n      try_CompAttrConstructor();\n      break;\n    case 187:                       // 'namespace'\n      try_CompNamespaceConstructor();\n      break;\n    case 249:                       // 'text'\n      try_CompTextConstructor();\n      break;\n    case 97:                        // 'comment'\n      try_CompCommentConstructor();\n      break;\n    default:\n      try_CompPIConstructor();\n    }\n  }\n\n  function parse_CompElemConstructor()\n  {\n    eventHandler.startNonterminal(\"CompElemConstructor\", e0);\n    shift(122);                     // 'element'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_ContentExpr();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CompElemConstructor\", e0);\n  }\n\n  function try_CompElemConstructor()\n  {\n    shiftT(122);                    // 'element'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      try_ContentExpr();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_CompNamespaceConstructor()\n  {\n    eventHandler.startNonterminal(\"CompNamespaceConstructor\", e0);\n    shift(187);                     // 'namespace'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PrefixExpr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_Prefix();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_URIExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CompNamespaceConstructor\", e0);\n  }\n\n  function try_CompNamespaceConstructor()\n  {\n    shiftT(187);                    // 'namespace'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PrefixExpr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_Prefix();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_URIExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_Prefix()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  }\n\n  function try_Prefix()\n  {\n    try_NCName();\n  }\n\n  function parse_PrefixExpr()\n  {\n    eventHandler.startNonterminal(\"PrefixExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"PrefixExpr\", e0);\n  }\n\n  function try_PrefixExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_URIExpr()\n  {\n    eventHandler.startNonterminal(\"URIExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"URIExpr\", e0);\n  }\n\n  function try_URIExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_FunctionItemExpr()\n  {\n    eventHandler.startNonterminal(\"FunctionItemExpr\", e0);\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      parse_InlineFunctionExpr();\n      break;\n    default:\n      parse_NamedFunctionRef();\n    }\n    eventHandler.endNonterminal(\"FunctionItemExpr\", e0);\n  }\n\n  function try_FunctionItemExpr()\n  {\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      try_InlineFunctionExpr();\n      break;\n    default:\n      try_NamedFunctionRef();\n    }\n  }\n\n  function parse_NamedFunctionRef()\n  {\n    eventHandler.startNonterminal(\"NamedFunctionRef\", e0);\n    parse_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shift(29);                      // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shift(8);                       // IntegerLiteral\n    eventHandler.endNonterminal(\"NamedFunctionRef\", e0);\n  }\n\n  function try_NamedFunctionRef()\n  {\n    try_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shiftT(29);                     // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shiftT(8);                      // IntegerLiteral\n  }\n\n  function parse_InlineFunctionExpr()\n  {\n    eventHandler.startNonterminal(\"InlineFunctionExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(38);                      // ')'\n    lookahead1W(115);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_FunctionBody();\n    eventHandler.endNonterminal(\"InlineFunctionExpr\", e0);\n  }\n\n  function try_InlineFunctionExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      try_ParamList();\n    }\n    shiftT(38);                     // ')'\n    lookahead1W(115);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      shiftT(80);                   // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_FunctionBody();\n  }\n\n  function parse_SingleType()\n  {\n    eventHandler.startNonterminal(\"SingleType\", e0);\n    parse_SimpleTypeName();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 65)                   // '?'\n    {\n      shift(65);                    // '?'\n    }\n    eventHandler.endNonterminal(\"SingleType\", e0);\n  }\n\n  function try_SingleType()\n  {\n    try_SimpleTypeName();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 65)                   // '?'\n    {\n      shiftT(65);                   // '?'\n    }\n  }\n\n  function parse_TypeDeclaration()\n  {\n    eventHandler.startNonterminal(\"TypeDeclaration\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypeDeclaration\", e0);\n  }\n\n  function try_TypeDeclaration()\n  {\n    shiftT(80);                     // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_SequenceType()\n  {\n    eventHandler.startNonterminal(\"SequenceType\", e0);\n    switch (l1)\n    {\n    case 35:                        // '('\n      lookahead2W(258);             // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n      break;\n    case 125:                       // 'empty-sequence'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18045:                     // 'empty-sequence' '('\n    case 19491:                     // '(' ')'\n      if (l1 == 125)                // 'empty-sequence'\n      {\n        shift(125);                 // 'empty-sequence'\n      }\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n      break;\n    default:\n      parse_ItemType();\n      lookahead1W(228);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 40:                      // '*'\n      case 41:                      // '+'\n      case 65:                      // '?'\n        whitespace();\n        parse_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"SequenceType\", e0);\n  }\n\n  function try_SequenceType()\n  {\n    switch (l1)\n    {\n    case 35:                        // '('\n      lookahead2W(258);             // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n      break;\n    case 125:                       // 'empty-sequence'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18045:                     // 'empty-sequence' '('\n    case 19491:                     // '(' ')'\n      if (l1 == 125)                // 'empty-sequence'\n      {\n        shiftT(125);                // 'empty-sequence'\n      }\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n      break;\n    default:\n      try_ItemType();\n      lookahead1W(228);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 40:                      // '*'\n      case 41:                      // '+'\n      case 65:                      // '?'\n        try_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n  }\n\n  function parse_OccurrenceIndicator()\n  {\n    eventHandler.startNonterminal(\"OccurrenceIndicator\", e0);\n    switch (l1)\n    {\n    case 65:                        // '?'\n      shift(65);                    // '?'\n      break;\n    case 40:                        // '*'\n      shift(40);                    // '*'\n      break;\n    default:\n      shift(41);                    // '+'\n    }\n    eventHandler.endNonterminal(\"OccurrenceIndicator\", e0);\n  }\n\n  function try_OccurrenceIndicator()\n  {\n    switch (l1)\n    {\n    case 65:                        // '?'\n      shiftT(65);                   // '?'\n      break;\n    case 40:                        // '*'\n      shiftT(40);                   // '*'\n      break;\n    default:\n      shiftT(41);                   // '+'\n    }\n  }\n\n  function parse_ItemType()\n  {\n    eventHandler.startNonterminal(\"ItemType\", e0);\n    switch (l1)\n    {\n    case 79:                        // 'array'\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 147:                       // 'function'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 198:                       // 'object'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 249:                       // 'text'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12879                 // 'array' EOF\n     || lk == 12969                 // 'json-item' EOF\n     || lk == 12998                 // 'object' EOF\n     || lk == 13047                 // 'structured-item' EOF\n     || lk == 13903                 // 'array' '!='\n     || lk == 13993                 // 'json-item' '!='\n     || lk == 14022                 // 'object' '!='\n     || lk == 14071                 // 'structured-item' '!='\n     || lk == 19535                 // 'array' ')'\n     || lk == 19625                 // 'json-item' ')'\n     || lk == 19654                 // 'object' ')'\n     || lk == 19703                 // 'structured-item' ')'\n     || lk == 20047                 // 'array' '*'\n     || lk == 20137                 // 'json-item' '*'\n     || lk == 20166                 // 'object' '*'\n     || lk == 20215                 // 'structured-item' '*'\n     || lk == 20559                 // 'array' '*'\n     || lk == 20649                 // 'json-item' '*'\n     || lk == 20678                 // 'object' '*'\n     || lk == 20727                 // 'structured-item' '*'\n     || lk == 21071                 // 'array' '+'\n     || lk == 21161                 // 'json-item' '+'\n     || lk == 21190                 // 'object' '+'\n     || lk == 21239                 // 'structured-item' '+'\n     || lk == 21583                 // 'array' ','\n     || lk == 21673                 // 'json-item' ','\n     || lk == 21702                 // 'object' ','\n     || lk == 21751                 // 'structured-item' ','\n     || lk == 22095                 // 'array' '-'\n     || lk == 22185                 // 'json-item' '-'\n     || lk == 22214                 // 'object' '-'\n     || lk == 22263                 // 'structured-item' '-'\n     || lk == 25679                 // 'array' ':'\n     || lk == 25769                 // 'json-item' ':'\n     || lk == 25798                 // 'object' ':'\n     || lk == 25847                 // 'structured-item' ':'\n     || lk == 27215                 // 'array' ':='\n     || lk == 27305                 // 'json-item' ':='\n     || lk == 27334                 // 'object' ':='\n     || lk == 27383                 // 'structured-item' ':='\n     || lk == 27727                 // 'array' ';'\n     || lk == 27817                 // 'json-item' ';'\n     || lk == 27846                 // 'object' ';'\n     || lk == 27895                 // 'structured-item' ';'\n     || lk == 28239                 // 'array' '<'\n     || lk == 28329                 // 'json-item' '<'\n     || lk == 28358                 // 'object' '<'\n     || lk == 28407                 // 'structured-item' '<'\n     || lk == 29775                 // 'array' '<<'\n     || lk == 29865                 // 'json-item' '<<'\n     || lk == 29894                 // 'object' '<<'\n     || lk == 29943                 // 'structured-item' '<<'\n     || lk == 30287                 // 'array' '<='\n     || lk == 30377                 // 'json-item' '<='\n     || lk == 30406                 // 'object' '<='\n     || lk == 30455                 // 'structured-item' '<='\n     || lk == 31311                 // 'array' '='\n     || lk == 31401                 // 'json-item' '='\n     || lk == 31430                 // 'object' '='\n     || lk == 31479                 // 'structured-item' '='\n     || lk == 31823                 // 'array' '>'\n     || lk == 31913                 // 'json-item' '>'\n     || lk == 31942                 // 'object' '>'\n     || lk == 31991                 // 'structured-item' '>'\n     || lk == 32335                 // 'array' '>='\n     || lk == 32425                 // 'json-item' '>='\n     || lk == 32454                 // 'object' '>='\n     || lk == 32503                 // 'structured-item' '>='\n     || lk == 32847                 // 'array' '>>'\n     || lk == 32937                 // 'json-item' '>>'\n     || lk == 32966                 // 'object' '>>'\n     || lk == 33015                 // 'structured-item' '>>'\n     || lk == 33359                 // 'array' '?'\n     || lk == 33449                 // 'json-item' '?'\n     || lk == 33478                 // 'object' '?'\n     || lk == 33527                 // 'structured-item' '?'\n     || lk == 35919                 // 'array' ']'\n     || lk == 36009                 // 'json-item' ']'\n     || lk == 36038                 // 'object' ']'\n     || lk == 36087                 // 'structured-item' ']'\n     || lk == 36431                 // 'array' 'after'\n     || lk == 36521                 // 'json-item' 'after'\n     || lk == 36550                 // 'object' 'after'\n     || lk == 36599                 // 'structured-item' 'after'\n     || lk == 37455                 // 'array' 'allowing'\n     || lk == 37545                 // 'json-item' 'allowing'\n     || lk == 37574                 // 'object' 'allowing'\n     || lk == 37623                 // 'structured-item' 'allowing'\n     || lk == 38991                 // 'array' 'and'\n     || lk == 39081                 // 'json-item' 'and'\n     || lk == 39110                 // 'object' 'and'\n     || lk == 39159                 // 'structured-item' 'and'\n     || lk == 41039                 // 'array' 'as'\n     || lk == 41129                 // 'json-item' 'as'\n     || lk == 41158                 // 'object' 'as'\n     || lk == 41207                 // 'structured-item' 'as'\n     || lk == 41551                 // 'array' 'ascending'\n     || lk == 41641                 // 'json-item' 'ascending'\n     || lk == 41670                 // 'object' 'ascending'\n     || lk == 41719                 // 'structured-item' 'ascending'\n     || lk == 42063                 // 'array' 'at'\n     || lk == 42153                 // 'json-item' 'at'\n     || lk == 42182                 // 'object' 'at'\n     || lk == 42231                 // 'structured-item' 'at'\n     || lk == 43599                 // 'array' 'before'\n     || lk == 43689                 // 'json-item' 'before'\n     || lk == 43718                 // 'object' 'before'\n     || lk == 43767                 // 'structured-item' 'before'\n     || lk == 45647                 // 'array' 'case'\n     || lk == 45737                 // 'json-item' 'case'\n     || lk == 45766                 // 'object' 'case'\n     || lk == 45815                 // 'structured-item' 'case'\n     || lk == 48719                 // 'array' 'collation'\n     || lk == 48809                 // 'json-item' 'collation'\n     || lk == 48838                 // 'object' 'collation'\n     || lk == 48887                 // 'structured-item' 'collation'\n     || lk == 51279                 // 'array' 'contains'\n     || lk == 51369                 // 'json-item' 'contains'\n     || lk == 51398                 // 'object' 'contains'\n     || lk == 51447                 // 'structured-item' 'contains'\n     || lk == 54351                 // 'array' 'count'\n     || lk == 54441                 // 'json-item' 'count'\n     || lk == 54470                 // 'object' 'count'\n     || lk == 54519                 // 'structured-item' 'count'\n     || lk == 56399                 // 'array' 'default'\n     || lk == 56489                 // 'json-item' 'default'\n     || lk == 56518                 // 'object' 'default'\n     || lk == 56567                 // 'structured-item' 'default'\n     || lk == 58447                 // 'array' 'descending'\n     || lk == 58537                 // 'json-item' 'descending'\n     || lk == 58566                 // 'object' 'descending'\n     || lk == 58615                 // 'structured-item' 'descending'\n     || lk == 61007                 // 'array' 'div'\n     || lk == 61097                 // 'json-item' 'div'\n     || lk == 61126                 // 'object' 'div'\n     || lk == 61175                 // 'structured-item' 'div'\n     || lk == 63055                 // 'array' 'else'\n     || lk == 63145                 // 'json-item' 'else'\n     || lk == 63174                 // 'object' 'else'\n     || lk == 63223                 // 'structured-item' 'else'\n     || lk == 63567                 // 'array' 'empty'\n     || lk == 63657                 // 'json-item' 'empty'\n     || lk == 63686                 // 'object' 'empty'\n     || lk == 63735                 // 'structured-item' 'empty'\n     || lk == 65103                 // 'array' 'end'\n     || lk == 65193                 // 'json-item' 'end'\n     || lk == 65222                 // 'object' 'end'\n     || lk == 65271                 // 'structured-item' 'end'\n     || lk == 66127                 // 'array' 'eq'\n     || lk == 66217                 // 'json-item' 'eq'\n     || lk == 66246                 // 'object' 'eq'\n     || lk == 66295                 // 'structured-item' 'eq'\n     || lk == 67663                 // 'array' 'except'\n     || lk == 67753                 // 'json-item' 'except'\n     || lk == 67782                 // 'object' 'except'\n     || lk == 67831                 // 'structured-item' 'except'\n     || lk == 68687                 // 'array' 'external'\n     || lk == 68777                 // 'json-item' 'external'\n     || lk == 68806                 // 'object' 'external'\n     || lk == 68855                 // 'structured-item' 'external'\n     || lk == 71247                 // 'array' 'for'\n     || lk == 71337                 // 'json-item' 'for'\n     || lk == 71366                 // 'object' 'for'\n     || lk == 71415                 // 'structured-item' 'for'\n     || lk == 75855                 // 'array' 'ge'\n     || lk == 75945                 // 'json-item' 'ge'\n     || lk == 75974                 // 'object' 'ge'\n     || lk == 76023                 // 'structured-item' 'ge'\n     || lk == 76879                 // 'array' 'group'\n     || lk == 76969                 // 'json-item' 'group'\n     || lk == 76998                 // 'object' 'group'\n     || lk == 77047                 // 'structured-item' 'group'\n     || lk == 77903                 // 'array' 'gt'\n     || lk == 77993                 // 'json-item' 'gt'\n     || lk == 78022                 // 'object' 'gt'\n     || lk == 78071                 // 'structured-item' 'gt'\n     || lk == 78415                 // 'array' 'idiv'\n     || lk == 78505                 // 'json-item' 'idiv'\n     || lk == 78534                 // 'object' 'idiv'\n     || lk == 78583                 // 'structured-item' 'idiv'\n     || lk == 79951                 // 'array' 'in'\n     || lk == 80041                 // 'json-item' 'in'\n     || lk == 80070                 // 'object' 'in'\n     || lk == 80119                 // 'structured-item' 'in'\n     || lk == 83023                 // 'array' 'instance'\n     || lk == 83113                 // 'json-item' 'instance'\n     || lk == 83142                 // 'object' 'instance'\n     || lk == 83191                 // 'structured-item' 'instance'\n     || lk == 84047                 // 'array' 'intersect'\n     || lk == 84137                 // 'json-item' 'intersect'\n     || lk == 84166                 // 'object' 'intersect'\n     || lk == 84215                 // 'structured-item' 'intersect'\n     || lk == 84559                 // 'array' 'into'\n     || lk == 84649                 // 'json-item' 'into'\n     || lk == 84678                 // 'object' 'into'\n     || lk == 84727                 // 'structured-item' 'into'\n     || lk == 85071                 // 'array' 'is'\n     || lk == 85161                 // 'json-item' 'is'\n     || lk == 85190                 // 'object' 'is'\n     || lk == 85239                 // 'structured-item' 'is'\n     || lk == 89679                 // 'array' 'le'\n     || lk == 89769                 // 'json-item' 'le'\n     || lk == 89798                 // 'object' 'le'\n     || lk == 89847                 // 'structured-item' 'le'\n     || lk == 90703                 // 'array' 'let'\n     || lk == 90793                 // 'json-item' 'let'\n     || lk == 90822                 // 'object' 'let'\n     || lk == 90871                 // 'structured-item' 'let'\n     || lk == 92751                 // 'array' 'lt'\n     || lk == 92841                 // 'json-item' 'lt'\n     || lk == 92870                 // 'object' 'lt'\n     || lk == 92919                 // 'structured-item' 'lt'\n     || lk == 93775                 // 'array' 'mod'\n     || lk == 93865                 // 'json-item' 'mod'\n     || lk == 93894                 // 'object' 'mod'\n     || lk == 93943                 // 'structured-item' 'mod'\n     || lk == 94287                 // 'array' 'modify'\n     || lk == 94377                 // 'json-item' 'modify'\n     || lk == 94406                 // 'object' 'modify'\n     || lk == 94455                 // 'structured-item' 'modify'\n     || lk == 96847                 // 'array' 'ne'\n     || lk == 96937                 // 'json-item' 'ne'\n     || lk == 96966                 // 'object' 'ne'\n     || lk == 97015                 // 'structured-item' 'ne'\n     || lk == 103503                // 'array' 'only'\n     || lk == 103593                // 'json-item' 'only'\n     || lk == 103622                // 'object' 'only'\n     || lk == 103671                // 'structured-item' 'only'\n     || lk == 104527                // 'array' 'or'\n     || lk == 104617                // 'json-item' 'or'\n     || lk == 104646                // 'object' 'or'\n     || lk == 104695                // 'structured-item' 'or'\n     || lk == 105039                // 'array' 'order'\n     || lk == 105129                // 'json-item' 'order'\n     || lk == 105158                // 'object' 'order'\n     || lk == 105207                // 'structured-item' 'order'\n     || lk == 107087                // 'array' 'paragraphs'\n     || lk == 107177                // 'json-item' 'paragraphs'\n     || lk == 107206                // 'object' 'paragraphs'\n     || lk == 107255                // 'structured-item' 'paragraphs'\n     || lk == 114767                // 'array' 'return'\n     || lk == 114857                // 'json-item' 'return'\n     || lk == 114886                // 'object' 'return'\n     || lk == 114935                // 'structured-item' 'return'\n     || lk == 116815                // 'array' 'satisfies'\n     || lk == 116905                // 'json-item' 'satisfies'\n     || lk == 116934                // 'object' 'satisfies'\n     || lk == 116983                // 'structured-item' 'satisfies'\n     || lk == 118863                // 'array' 'score'\n     || lk == 118953                // 'json-item' 'score'\n     || lk == 118982                // 'object' 'score'\n     || lk == 119031                // 'structured-item' 'score'\n     || lk == 121423                // 'array' 'sentences'\n     || lk == 121513                // 'json-item' 'sentences'\n     || lk == 121542                // 'object' 'sentences'\n     || lk == 121591                // 'structured-item' 'sentences'\n     || lk == 123471                // 'array' 'stable'\n     || lk == 123561                // 'json-item' 'stable'\n     || lk == 123590                // 'object' 'stable'\n     || lk == 123639                // 'structured-item' 'stable'\n     || lk == 123983                // 'array' 'start'\n     || lk == 124073                // 'json-item' 'start'\n     || lk == 124102                // 'object' 'start'\n     || lk == 124151                // 'structured-item' 'start'\n     || lk == 129103                // 'array' 'times'\n     || lk == 129193                // 'json-item' 'times'\n     || lk == 129222                // 'object' 'times'\n     || lk == 129271                // 'structured-item' 'times'\n     || lk == 129615                // 'array' 'to'\n     || lk == 129705                // 'json-item' 'to'\n     || lk == 129734                // 'object' 'to'\n     || lk == 129783                // 'structured-item' 'to'\n     || lk == 133199                // 'array' 'union'\n     || lk == 133289                // 'json-item' 'union'\n     || lk == 133318                // 'object' 'union'\n     || lk == 133367                // 'structured-item' 'union'\n     || lk == 139343                // 'array' 'where'\n     || lk == 139433                // 'json-item' 'where'\n     || lk == 139462                // 'object' 'where'\n     || lk == 139511                // 'structured-item' 'where'\n     || lk == 141391                // 'array' 'with'\n     || lk == 141481                // 'json-item' 'with'\n     || lk == 141510                // 'object' 'with'\n     || lk == 141559                // 'structured-item' 'with'\n     || lk == 142927                // 'array' 'words'\n     || lk == 143017                // 'json-item' 'words'\n     || lk == 143046                // 'object' 'words'\n     || lk == 143095                // 'structured-item' 'words'\n     || lk == 143951                // 'array' '{'\n     || lk == 144041                // 'json-item' '{'\n     || lk == 144070                // 'object' '{'\n     || lk == 144119                // 'structured-item' '{'\n     || lk == 145487                // 'array' '|'\n     || lk == 145577                // 'json-item' '|'\n     || lk == 145606                // 'object' '|'\n     || lk == 145655                // 'structured-item' '|'\n     || lk == 145999                // 'array' '||'\n     || lk == 146089                // 'json-item' '||'\n     || lk == 146118                // 'object' '||'\n     || lk == 146167                // 'structured-item' '||'\n     || lk == 146511                // 'array' '|}'\n     || lk == 146601                // 'json-item' '|}'\n     || lk == 146630                // 'object' '|}'\n     || lk == 146679                // 'structured-item' '|}'\n     || lk == 147023                // 'array' '}'\n     || lk == 147113                // 'json-item' '}'\n     || lk == 147142                // 'object' '}'\n     || lk == 147191)               // 'structured-item' '}'\n    {\n      lk = memoized(6, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_AtomicOrUnionType();\n          lk = -4;\n        }\n        catch (p4A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_JSONTest();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -7;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(6, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      parse_KindTest();\n      break;\n    case 18087:                     // 'item' '('\n      shift(167);                   // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n      break;\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      parse_FunctionTest();\n      break;\n    case 35:                        // '('\n      parse_ParenthesizedItemType();\n      break;\n    case -6:\n    case 17999:                     // 'array' '('\n    case 18089:                     // 'json-item' '('\n    case 18118:                     // 'object' '('\n      parse_JSONTest();\n      break;\n    case -7:\n    case 18167:                     // 'structured-item' '('\n      parse_StructuredItemTest();\n      break;\n    default:\n      parse_AtomicOrUnionType();\n    }\n    eventHandler.endNonterminal(\"ItemType\", e0);\n  }\n\n  function try_ItemType()\n  {\n    switch (l1)\n    {\n    case 79:                        // 'array'\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 147:                       // 'function'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 198:                       // 'object'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 249:                       // 'text'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12879                 // 'array' EOF\n     || lk == 12969                 // 'json-item' EOF\n     || lk == 12998                 // 'object' EOF\n     || lk == 13047                 // 'structured-item' EOF\n     || lk == 13903                 // 'array' '!='\n     || lk == 13993                 // 'json-item' '!='\n     || lk == 14022                 // 'object' '!='\n     || lk == 14071                 // 'structured-item' '!='\n     || lk == 19535                 // 'array' ')'\n     || lk == 19625                 // 'json-item' ')'\n     || lk == 19654                 // 'object' ')'\n     || lk == 19703                 // 'structured-item' ')'\n     || lk == 20047                 // 'array' '*'\n     || lk == 20137                 // 'json-item' '*'\n     || lk == 20166                 // 'object' '*'\n     || lk == 20215                 // 'structured-item' '*'\n     || lk == 20559                 // 'array' '*'\n     || lk == 20649                 // 'json-item' '*'\n     || lk == 20678                 // 'object' '*'\n     || lk == 20727                 // 'structured-item' '*'\n     || lk == 21071                 // 'array' '+'\n     || lk == 21161                 // 'json-item' '+'\n     || lk == 21190                 // 'object' '+'\n     || lk == 21239                 // 'structured-item' '+'\n     || lk == 21583                 // 'array' ','\n     || lk == 21673                 // 'json-item' ','\n     || lk == 21702                 // 'object' ','\n     || lk == 21751                 // 'structured-item' ','\n     || lk == 22095                 // 'array' '-'\n     || lk == 22185                 // 'json-item' '-'\n     || lk == 22214                 // 'object' '-'\n     || lk == 22263                 // 'structured-item' '-'\n     || lk == 25679                 // 'array' ':'\n     || lk == 25769                 // 'json-item' ':'\n     || lk == 25798                 // 'object' ':'\n     || lk == 25847                 // 'structured-item' ':'\n     || lk == 27215                 // 'array' ':='\n     || lk == 27305                 // 'json-item' ':='\n     || lk == 27334                 // 'object' ':='\n     || lk == 27383                 // 'structured-item' ':='\n     || lk == 27727                 // 'array' ';'\n     || lk == 27817                 // 'json-item' ';'\n     || lk == 27846                 // 'object' ';'\n     || lk == 27895                 // 'structured-item' ';'\n     || lk == 28239                 // 'array' '<'\n     || lk == 28329                 // 'json-item' '<'\n     || lk == 28358                 // 'object' '<'\n     || lk == 28407                 // 'structured-item' '<'\n     || lk == 29775                 // 'array' '<<'\n     || lk == 29865                 // 'json-item' '<<'\n     || lk == 29894                 // 'object' '<<'\n     || lk == 29943                 // 'structured-item' '<<'\n     || lk == 30287                 // 'array' '<='\n     || lk == 30377                 // 'json-item' '<='\n     || lk == 30406                 // 'object' '<='\n     || lk == 30455                 // 'structured-item' '<='\n     || lk == 31311                 // 'array' '='\n     || lk == 31401                 // 'json-item' '='\n     || lk == 31430                 // 'object' '='\n     || lk == 31479                 // 'structured-item' '='\n     || lk == 31823                 // 'array' '>'\n     || lk == 31913                 // 'json-item' '>'\n     || lk == 31942                 // 'object' '>'\n     || lk == 31991                 // 'structured-item' '>'\n     || lk == 32335                 // 'array' '>='\n     || lk == 32425                 // 'json-item' '>='\n     || lk == 32454                 // 'object' '>='\n     || lk == 32503                 // 'structured-item' '>='\n     || lk == 32847                 // 'array' '>>'\n     || lk == 32937                 // 'json-item' '>>'\n     || lk == 32966                 // 'object' '>>'\n     || lk == 33015                 // 'structured-item' '>>'\n     || lk == 33359                 // 'array' '?'\n     || lk == 33449                 // 'json-item' '?'\n     || lk == 33478                 // 'object' '?'\n     || lk == 33527                 // 'structured-item' '?'\n     || lk == 35919                 // 'array' ']'\n     || lk == 36009                 // 'json-item' ']'\n     || lk == 36038                 // 'object' ']'\n     || lk == 36087                 // 'structured-item' ']'\n     || lk == 36431                 // 'array' 'after'\n     || lk == 36521                 // 'json-item' 'after'\n     || lk == 36550                 // 'object' 'after'\n     || lk == 36599                 // 'structured-item' 'after'\n     || lk == 37455                 // 'array' 'allowing'\n     || lk == 37545                 // 'json-item' 'allowing'\n     || lk == 37574                 // 'object' 'allowing'\n     || lk == 37623                 // 'structured-item' 'allowing'\n     || lk == 38991                 // 'array' 'and'\n     || lk == 39081                 // 'json-item' 'and'\n     || lk == 39110                 // 'object' 'and'\n     || lk == 39159                 // 'structured-item' 'and'\n     || lk == 41039                 // 'array' 'as'\n     || lk == 41129                 // 'json-item' 'as'\n     || lk == 41158                 // 'object' 'as'\n     || lk == 41207                 // 'structured-item' 'as'\n     || lk == 41551                 // 'array' 'ascending'\n     || lk == 41641                 // 'json-item' 'ascending'\n     || lk == 41670                 // 'object' 'ascending'\n     || lk == 41719                 // 'structured-item' 'ascending'\n     || lk == 42063                 // 'array' 'at'\n     || lk == 42153                 // 'json-item' 'at'\n     || lk == 42182                 // 'object' 'at'\n     || lk == 42231                 // 'structured-item' 'at'\n     || lk == 43599                 // 'array' 'before'\n     || lk == 43689                 // 'json-item' 'before'\n     || lk == 43718                 // 'object' 'before'\n     || lk == 43767                 // 'structured-item' 'before'\n     || lk == 45647                 // 'array' 'case'\n     || lk == 45737                 // 'json-item' 'case'\n     || lk == 45766                 // 'object' 'case'\n     || lk == 45815                 // 'structured-item' 'case'\n     || lk == 48719                 // 'array' 'collation'\n     || lk == 48809                 // 'json-item' 'collation'\n     || lk == 48838                 // 'object' 'collation'\n     || lk == 48887                 // 'structured-item' 'collation'\n     || lk == 51279                 // 'array' 'contains'\n     || lk == 51369                 // 'json-item' 'contains'\n     || lk == 51398                 // 'object' 'contains'\n     || lk == 51447                 // 'structured-item' 'contains'\n     || lk == 54351                 // 'array' 'count'\n     || lk == 54441                 // 'json-item' 'count'\n     || lk == 54470                 // 'object' 'count'\n     || lk == 54519                 // 'structured-item' 'count'\n     || lk == 56399                 // 'array' 'default'\n     || lk == 56489                 // 'json-item' 'default'\n     || lk == 56518                 // 'object' 'default'\n     || lk == 56567                 // 'structured-item' 'default'\n     || lk == 58447                 // 'array' 'descending'\n     || lk == 58537                 // 'json-item' 'descending'\n     || lk == 58566                 // 'object' 'descending'\n     || lk == 58615                 // 'structured-item' 'descending'\n     || lk == 61007                 // 'array' 'div'\n     || lk == 61097                 // 'json-item' 'div'\n     || lk == 61126                 // 'object' 'div'\n     || lk == 61175                 // 'structured-item' 'div'\n     || lk == 63055                 // 'array' 'else'\n     || lk == 63145                 // 'json-item' 'else'\n     || lk == 63174                 // 'object' 'else'\n     || lk == 63223                 // 'structured-item' 'else'\n     || lk == 63567                 // 'array' 'empty'\n     || lk == 63657                 // 'json-item' 'empty'\n     || lk == 63686                 // 'object' 'empty'\n     || lk == 63735                 // 'structured-item' 'empty'\n     || lk == 65103                 // 'array' 'end'\n     || lk == 65193                 // 'json-item' 'end'\n     || lk == 65222                 // 'object' 'end'\n     || lk == 65271                 // 'structured-item' 'end'\n     || lk == 66127                 // 'array' 'eq'\n     || lk == 66217                 // 'json-item' 'eq'\n     || lk == 66246                 // 'object' 'eq'\n     || lk == 66295                 // 'structured-item' 'eq'\n     || lk == 67663                 // 'array' 'except'\n     || lk == 67753                 // 'json-item' 'except'\n     || lk == 67782                 // 'object' 'except'\n     || lk == 67831                 // 'structured-item' 'except'\n     || lk == 68687                 // 'array' 'external'\n     || lk == 68777                 // 'json-item' 'external'\n     || lk == 68806                 // 'object' 'external'\n     || lk == 68855                 // 'structured-item' 'external'\n     || lk == 71247                 // 'array' 'for'\n     || lk == 71337                 // 'json-item' 'for'\n     || lk == 71366                 // 'object' 'for'\n     || lk == 71415                 // 'structured-item' 'for'\n     || lk == 75855                 // 'array' 'ge'\n     || lk == 75945                 // 'json-item' 'ge'\n     || lk == 75974                 // 'object' 'ge'\n     || lk == 76023                 // 'structured-item' 'ge'\n     || lk == 76879                 // 'array' 'group'\n     || lk == 76969                 // 'json-item' 'group'\n     || lk == 76998                 // 'object' 'group'\n     || lk == 77047                 // 'structured-item' 'group'\n     || lk == 77903                 // 'array' 'gt'\n     || lk == 77993                 // 'json-item' 'gt'\n     || lk == 78022                 // 'object' 'gt'\n     || lk == 78071                 // 'structured-item' 'gt'\n     || lk == 78415                 // 'array' 'idiv'\n     || lk == 78505                 // 'json-item' 'idiv'\n     || lk == 78534                 // 'object' 'idiv'\n     || lk == 78583                 // 'structured-item' 'idiv'\n     || lk == 79951                 // 'array' 'in'\n     || lk == 80041                 // 'json-item' 'in'\n     || lk == 80070                 // 'object' 'in'\n     || lk == 80119                 // 'structured-item' 'in'\n     || lk == 83023                 // 'array' 'instance'\n     || lk == 83113                 // 'json-item' 'instance'\n     || lk == 83142                 // 'object' 'instance'\n     || lk == 83191                 // 'structured-item' 'instance'\n     || lk == 84047                 // 'array' 'intersect'\n     || lk == 84137                 // 'json-item' 'intersect'\n     || lk == 84166                 // 'object' 'intersect'\n     || lk == 84215                 // 'structured-item' 'intersect'\n     || lk == 84559                 // 'array' 'into'\n     || lk == 84649                 // 'json-item' 'into'\n     || lk == 84678                 // 'object' 'into'\n     || lk == 84727                 // 'structured-item' 'into'\n     || lk == 85071                 // 'array' 'is'\n     || lk == 85161                 // 'json-item' 'is'\n     || lk == 85190                 // 'object' 'is'\n     || lk == 85239                 // 'structured-item' 'is'\n     || lk == 89679                 // 'array' 'le'\n     || lk == 89769                 // 'json-item' 'le'\n     || lk == 89798                 // 'object' 'le'\n     || lk == 89847                 // 'structured-item' 'le'\n     || lk == 90703                 // 'array' 'let'\n     || lk == 90793                 // 'json-item' 'let'\n     || lk == 90822                 // 'object' 'let'\n     || lk == 90871                 // 'structured-item' 'let'\n     || lk == 92751                 // 'array' 'lt'\n     || lk == 92841                 // 'json-item' 'lt'\n     || lk == 92870                 // 'object' 'lt'\n     || lk == 92919                 // 'structured-item' 'lt'\n     || lk == 93775                 // 'array' 'mod'\n     || lk == 93865                 // 'json-item' 'mod'\n     || lk == 93894                 // 'object' 'mod'\n     || lk == 93943                 // 'structured-item' 'mod'\n     || lk == 94287                 // 'array' 'modify'\n     || lk == 94377                 // 'json-item' 'modify'\n     || lk == 94406                 // 'object' 'modify'\n     || lk == 94455                 // 'structured-item' 'modify'\n     || lk == 96847                 // 'array' 'ne'\n     || lk == 96937                 // 'json-item' 'ne'\n     || lk == 96966                 // 'object' 'ne'\n     || lk == 97015                 // 'structured-item' 'ne'\n     || lk == 103503                // 'array' 'only'\n     || lk == 103593                // 'json-item' 'only'\n     || lk == 103622                // 'object' 'only'\n     || lk == 103671                // 'structured-item' 'only'\n     || lk == 104527                // 'array' 'or'\n     || lk == 104617                // 'json-item' 'or'\n     || lk == 104646                // 'object' 'or'\n     || lk == 104695                // 'structured-item' 'or'\n     || lk == 105039                // 'array' 'order'\n     || lk == 105129                // 'json-item' 'order'\n     || lk == 105158                // 'object' 'order'\n     || lk == 105207                // 'structured-item' 'order'\n     || lk == 107087                // 'array' 'paragraphs'\n     || lk == 107177                // 'json-item' 'paragraphs'\n     || lk == 107206                // 'object' 'paragraphs'\n     || lk == 107255                // 'structured-item' 'paragraphs'\n     || lk == 114767                // 'array' 'return'\n     || lk == 114857                // 'json-item' 'return'\n     || lk == 114886                // 'object' 'return'\n     || lk == 114935                // 'structured-item' 'return'\n     || lk == 116815                // 'array' 'satisfies'\n     || lk == 116905                // 'json-item' 'satisfies'\n     || lk == 116934                // 'object' 'satisfies'\n     || lk == 116983                // 'structured-item' 'satisfies'\n     || lk == 118863                // 'array' 'score'\n     || lk == 118953                // 'json-item' 'score'\n     || lk == 118982                // 'object' 'score'\n     || lk == 119031                // 'structured-item' 'score'\n     || lk == 121423                // 'array' 'sentences'\n     || lk == 121513                // 'json-item' 'sentences'\n     || lk == 121542                // 'object' 'sentences'\n     || lk == 121591                // 'structured-item' 'sentences'\n     || lk == 123471                // 'array' 'stable'\n     || lk == 123561                // 'json-item' 'stable'\n     || lk == 123590                // 'object' 'stable'\n     || lk == 123639                // 'structured-item' 'stable'\n     || lk == 123983                // 'array' 'start'\n     || lk == 124073                // 'json-item' 'start'\n     || lk == 124102                // 'object' 'start'\n     || lk == 124151                // 'structured-item' 'start'\n     || lk == 129103                // 'array' 'times'\n     || lk == 129193                // 'json-item' 'times'\n     || lk == 129222                // 'object' 'times'\n     || lk == 129271                // 'structured-item' 'times'\n     || lk == 129615                // 'array' 'to'\n     || lk == 129705                // 'json-item' 'to'\n     || lk == 129734                // 'object' 'to'\n     || lk == 129783                // 'structured-item' 'to'\n     || lk == 133199                // 'array' 'union'\n     || lk == 133289                // 'json-item' 'union'\n     || lk == 133318                // 'object' 'union'\n     || lk == 133367                // 'structured-item' 'union'\n     || lk == 139343                // 'array' 'where'\n     || lk == 139433                // 'json-item' 'where'\n     || lk == 139462                // 'object' 'where'\n     || lk == 139511                // 'structured-item' 'where'\n     || lk == 141391                // 'array' 'with'\n     || lk == 141481                // 'json-item' 'with'\n     || lk == 141510                // 'object' 'with'\n     || lk == 141559                // 'structured-item' 'with'\n     || lk == 142927                // 'array' 'words'\n     || lk == 143017                // 'json-item' 'words'\n     || lk == 143046                // 'object' 'words'\n     || lk == 143095                // 'structured-item' 'words'\n     || lk == 143951                // 'array' '{'\n     || lk == 144041                // 'json-item' '{'\n     || lk == 144070                // 'object' '{'\n     || lk == 144119                // 'structured-item' '{'\n     || lk == 145487                // 'array' '|'\n     || lk == 145577                // 'json-item' '|'\n     || lk == 145606                // 'object' '|'\n     || lk == 145655                // 'structured-item' '|'\n     || lk == 145999                // 'array' '||'\n     || lk == 146089                // 'json-item' '||'\n     || lk == 146118                // 'object' '||'\n     || lk == 146167                // 'structured-item' '||'\n     || lk == 146511                // 'array' '|}'\n     || lk == 146601                // 'json-item' '|}'\n     || lk == 146630                // 'object' '|}'\n     || lk == 146679                // 'structured-item' '|}'\n     || lk == 147023                // 'array' '}'\n     || lk == 147113                // 'json-item' '}'\n     || lk == 147142                // 'object' '}'\n     || lk == 147191)               // 'structured-item' '}'\n    {\n      lk = memoized(6, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_AtomicOrUnionType();\n          memoize(6, e0A, -4);\n          lk = -8;\n        }\n        catch (p4A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_JSONTest();\n            memoize(6, e0A, -6);\n            lk = -8;\n          }\n          catch (p6A)\n          {\n            lk = -7;\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(6, e0A, -7);\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      try_KindTest();\n      break;\n    case 18087:                     // 'item' '('\n      shiftT(167);                  // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n      break;\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      try_FunctionTest();\n      break;\n    case 35:                        // '('\n      try_ParenthesizedItemType();\n      break;\n    case -6:\n    case 17999:                     // 'array' '('\n    case 18089:                     // 'json-item' '('\n    case 18118:                     // 'object' '('\n      try_JSONTest();\n      break;\n    case -7:\n    case 18167:                     // 'structured-item' '('\n      try_StructuredItemTest();\n      break;\n    case -8:\n      break;\n    default:\n      try_AtomicOrUnionType();\n    }\n  }\n\n  function parse_JSONTest()\n  {\n    eventHandler.startNonterminal(\"JSONTest\", e0);\n    switch (l1)\n    {\n    case 169:                       // 'json-item'\n      parse_JSONItemTest();\n      break;\n    case 198:                       // 'object'\n      parse_JSONObjectTest();\n      break;\n    default:\n      parse_JSONArrayTest();\n    }\n    eventHandler.endNonterminal(\"JSONTest\", e0);\n  }\n\n  function try_JSONTest()\n  {\n    switch (l1)\n    {\n    case 169:                       // 'json-item'\n      try_JSONItemTest();\n      break;\n    case 198:                       // 'object'\n      try_JSONObjectTest();\n      break;\n    default:\n      try_JSONArrayTest();\n    }\n  }\n\n  function parse_StructuredItemTest()\n  {\n    eventHandler.startNonterminal(\"StructuredItemTest\", e0);\n    shift(247);                     // 'structured-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"StructuredItemTest\", e0);\n  }\n\n  function try_StructuredItemTest()\n  {\n    shiftT(247);                    // 'structured-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONItemTest()\n  {\n    eventHandler.startNonterminal(\"JSONItemTest\", e0);\n    shift(169);                     // 'json-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONItemTest\", e0);\n  }\n\n  function try_JSONItemTest()\n  {\n    shiftT(169);                    // 'json-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONObjectTest()\n  {\n    eventHandler.startNonterminal(\"JSONObjectTest\", e0);\n    shift(198);                     // 'object'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONObjectTest\", e0);\n  }\n\n  function try_JSONObjectTest()\n  {\n    shiftT(198);                    // 'object'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONArrayTest()\n  {\n    eventHandler.startNonterminal(\"JSONArrayTest\", e0);\n    shift(79);                      // 'array'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONArrayTest\", e0);\n  }\n\n  function try_JSONArrayTest()\n  {\n    shiftT(79);                     // 'array'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_AtomicOrUnionType()\n  {\n    eventHandler.startNonterminal(\"AtomicOrUnionType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicOrUnionType\", e0);\n  }\n\n  function try_AtomicOrUnionType()\n  {\n    try_EQName();\n  }\n\n  function parse_KindTest()\n  {\n    eventHandler.startNonterminal(\"KindTest\", e0);\n    switch (l1)\n    {\n    case 121:                       // 'document-node'\n      parse_DocumentTest();\n      break;\n    case 122:                       // 'element'\n      parse_ElementTest();\n      break;\n    case 83:                        // 'attribute'\n      parse_AttributeTest();\n      break;\n    case 231:                       // 'schema-element'\n      parse_SchemaElementTest();\n      break;\n    case 230:                       // 'schema-attribute'\n      parse_SchemaAttributeTest();\n      break;\n    case 220:                       // 'processing-instruction'\n      parse_PITest();\n      break;\n    case 97:                        // 'comment'\n      parse_CommentTest();\n      break;\n    case 249:                       // 'text'\n      parse_TextTest();\n      break;\n    case 188:                       // 'namespace-node'\n      parse_NamespaceNodeTest();\n      break;\n    default:\n      parse_AnyKindTest();\n    }\n    eventHandler.endNonterminal(\"KindTest\", e0);\n  }\n\n  function try_KindTest()\n  {\n    switch (l1)\n    {\n    case 121:                       // 'document-node'\n      try_DocumentTest();\n      break;\n    case 122:                       // 'element'\n      try_ElementTest();\n      break;\n    case 83:                        // 'attribute'\n      try_AttributeTest();\n      break;\n    case 231:                       // 'schema-element'\n      try_SchemaElementTest();\n      break;\n    case 230:                       // 'schema-attribute'\n      try_SchemaAttributeTest();\n      break;\n    case 220:                       // 'processing-instruction'\n      try_PITest();\n      break;\n    case 97:                        // 'comment'\n      try_CommentTest();\n      break;\n    case 249:                       // 'text'\n      try_TextTest();\n      break;\n    case 188:                       // 'namespace-node'\n      try_NamespaceNodeTest();\n      break;\n    default:\n      try_AnyKindTest();\n    }\n  }\n\n  function parse_AnyKindTest()\n  {\n    eventHandler.startNonterminal(\"AnyKindTest\", e0);\n    shift(194);                     // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AnyKindTest\", e0);\n  }\n\n  function try_AnyKindTest()\n  {\n    shiftT(194);                    // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_DocumentTest()\n  {\n    eventHandler.startNonterminal(\"DocumentTest\", e0);\n    shift(121);                     // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(154);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 122:                     // 'element'\n        whitespace();\n        parse_ElementTest();\n        break;\n      default:\n        whitespace();\n        parse_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"DocumentTest\", e0);\n  }\n\n  function try_DocumentTest()\n  {\n    shiftT(121);                    // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(154);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 122:                     // 'element'\n        try_ElementTest();\n        break;\n      default:\n        try_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_TextTest()\n  {\n    eventHandler.startNonterminal(\"TextTest\", e0);\n    shift(249);                     // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"TextTest\", e0);\n  }\n\n  function try_TextTest()\n  {\n    shiftT(249);                    // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_CommentTest()\n  {\n    eventHandler.startNonterminal(\"CommentTest\", e0);\n    shift(97);                      // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"CommentTest\", e0);\n  }\n\n  function try_CommentTest()\n  {\n    shiftT(97);                     // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_NamespaceNodeTest()\n  {\n    eventHandler.startNonterminal(\"NamespaceNodeTest\", e0);\n    shift(188);                     // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"NamespaceNodeTest\", e0);\n  }\n\n  function try_NamespaceNodeTest()\n  {\n    shiftT(188);                    // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_PITest()\n  {\n    eventHandler.startNonterminal(\"PITest\", e0);\n    shift(220);                     // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(243);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shift(11);                  // StringLiteral\n        break;\n      default:\n        whitespace();\n        parse_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"PITest\", e0);\n  }\n\n  function try_PITest()\n  {\n    shiftT(220);                    // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(243);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shiftT(11);                 // StringLiteral\n        break;\n      default:\n        try_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttributeTest()\n  {\n    eventHandler.startNonterminal(\"AttributeTest\", e0);\n    shift(83);                      // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_AttribNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shift(42);                  // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AttributeTest\", e0);\n  }\n\n  function try_AttributeTest()\n  {\n    shiftT(83);                     // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      try_AttribNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shiftT(42);                 // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttribNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"AttribNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      parse_AttributeName();\n    }\n    eventHandler.endNonterminal(\"AttribNameOrWildcard\", e0);\n  }\n\n  function try_AttribNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      try_AttributeName();\n    }\n  }\n\n  function parse_SchemaAttributeTest()\n  {\n    eventHandler.startNonterminal(\"SchemaAttributeTest\", e0);\n    shift(230);                     // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"SchemaAttributeTest\", e0);\n  }\n\n  function try_SchemaAttributeTest()\n  {\n    shiftT(230);                    // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttributeDeclaration()\n  {\n    eventHandler.startNonterminal(\"AttributeDeclaration\", e0);\n    parse_AttributeName();\n    eventHandler.endNonterminal(\"AttributeDeclaration\", e0);\n  }\n\n  function try_AttributeDeclaration()\n  {\n    try_AttributeName();\n  }\n\n  function parse_ElementTest()\n  {\n    eventHandler.startNonterminal(\"ElementTest\", e0);\n    shift(122);                     // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_ElementNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shift(42);                  // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        lookahead1W(106);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 65)               // '?'\n        {\n          shift(65);                // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ElementTest\", e0);\n  }\n\n  function try_ElementTest()\n  {\n    shiftT(122);                    // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      try_ElementNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shiftT(42);                 // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        lookahead1W(106);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 65)               // '?'\n        {\n          shiftT(65);               // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ElementNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"ElementNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      parse_ElementName();\n    }\n    eventHandler.endNonterminal(\"ElementNameOrWildcard\", e0);\n  }\n\n  function try_ElementNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      try_ElementName();\n    }\n  }\n\n  function parse_SchemaElementTest()\n  {\n    eventHandler.startNonterminal(\"SchemaElementTest\", e0);\n    shift(231);                     // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"SchemaElementTest\", e0);\n  }\n\n  function try_SchemaElementTest()\n  {\n    shiftT(231);                    // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ElementDeclaration()\n  {\n    eventHandler.startNonterminal(\"ElementDeclaration\", e0);\n    parse_ElementName();\n    eventHandler.endNonterminal(\"ElementDeclaration\", e0);\n  }\n\n  function try_ElementDeclaration()\n  {\n    try_ElementName();\n  }\n\n  function parse_AttributeName()\n  {\n    eventHandler.startNonterminal(\"AttributeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AttributeName\", e0);\n  }\n\n  function try_AttributeName()\n  {\n    try_EQName();\n  }\n\n  function parse_ElementName()\n  {\n    eventHandler.startNonterminal(\"ElementName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"ElementName\", e0);\n  }\n\n  function try_ElementName()\n  {\n    try_EQName();\n  }\n\n  function parse_SimpleTypeName()\n  {\n    eventHandler.startNonterminal(\"SimpleTypeName\", e0);\n    parse_TypeName();\n    eventHandler.endNonterminal(\"SimpleTypeName\", e0);\n  }\n\n  function try_SimpleTypeName()\n  {\n    try_TypeName();\n  }\n\n  function parse_TypeName()\n  {\n    eventHandler.startNonterminal(\"TypeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"TypeName\", e0);\n  }\n\n  function try_TypeName()\n  {\n    try_EQName();\n  }\n\n  function parse_FunctionTest()\n  {\n    eventHandler.startNonterminal(\"FunctionTest\", e0);\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(7, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(7, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      whitespace();\n      parse_AnyFunctionTest();\n      break;\n    default:\n      whitespace();\n      parse_TypedFunctionTest();\n    }\n    eventHandler.endNonterminal(\"FunctionTest\", e0);\n  }\n\n  function try_FunctionTest()\n  {\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(7, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        memoize(7, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(7, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_AnyFunctionTest();\n      break;\n    case -3:\n      break;\n    default:\n      try_TypedFunctionTest();\n    }\n  }\n\n  function parse_AnyFunctionTest()\n  {\n    eventHandler.startNonterminal(\"AnyFunctionTest\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shift(39);                      // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AnyFunctionTest\", e0);\n  }\n\n  function try_AnyFunctionTest()\n  {\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shiftT(39);                     // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_TypedFunctionTest()\n  {\n    eventHandler.startNonterminal(\"TypedFunctionTest\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(258);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_SequenceType();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(253);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_SequenceType();\n      }\n    }\n    shift(38);                      // ')'\n    lookahead1W(33);                // S^WS | '(:' | 'as'\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypedFunctionTest\", e0);\n  }\n\n  function try_TypedFunctionTest()\n  {\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(258);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      try_SequenceType();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(253);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_SequenceType();\n      }\n    }\n    shiftT(38);                     // ')'\n    lookahead1W(33);                // S^WS | '(:' | 'as'\n    shiftT(80);                     // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_ParenthesizedItemType()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedItemType\", e0);\n    shift(35);                      // '('\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedItemType\", e0);\n  }\n\n  function try_ParenthesizedItemType()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_RevalidationDecl()\n  {\n    eventHandler.startNonterminal(\"RevalidationDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(75);                // S^WS | '(:' | 'revalidation'\n    shift(226);                     // 'revalidation'\n    lookahead1W(162);               // S^WS | '(:' | 'lax' | 'skip' | 'strict'\n    switch (l1)\n    {\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    default:\n      shift(238);                   // 'skip'\n    }\n    eventHandler.endNonterminal(\"RevalidationDecl\", e0);\n  }\n\n  function parse_InsertExprTargetChoice()\n  {\n    eventHandler.startNonterminal(\"InsertExprTargetChoice\", e0);\n    switch (l1)\n    {\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    default:\n      if (l1 == 80)                 // 'as'\n      {\n        shift(80);                  // 'as'\n        lookahead1W(123);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 136:                   // 'first'\n          shift(136);               // 'first'\n          break;\n        default:\n          shift(173);               // 'last'\n        }\n      }\n      lookahead1W(57);              // S^WS | '(:' | 'into'\n      shift(165);                   // 'into'\n    }\n    eventHandler.endNonterminal(\"InsertExprTargetChoice\", e0);\n  }\n\n  function try_InsertExprTargetChoice()\n  {\n    switch (l1)\n    {\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    default:\n      if (l1 == 80)                 // 'as'\n      {\n        shiftT(80);                 // 'as'\n        lookahead1W(123);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 136:                   // 'first'\n          shiftT(136);              // 'first'\n          break;\n        default:\n          shiftT(173);              // 'last'\n        }\n      }\n      lookahead1W(57);              // S^WS | '(:' | 'into'\n      shiftT(165);                  // 'into'\n    }\n  }\n\n  function parse_InsertExpr()\n  {\n    eventHandler.startNonterminal(\"InsertExpr\", e0);\n    shift(161);                     // 'insert'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    default:\n      shift(195);                   // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_SourceExpr();\n    whitespace();\n    parse_InsertExprTargetChoice();\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"InsertExpr\", e0);\n  }\n\n  function try_InsertExpr()\n  {\n    shiftT(161);                    // 'insert'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    default:\n      shiftT(195);                  // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_SourceExpr();\n    try_InsertExprTargetChoice();\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_DeleteExpr()\n  {\n    eventHandler.startNonterminal(\"DeleteExpr\", e0);\n    shift(111);                     // 'delete'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    default:\n      shift(195);                   // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"DeleteExpr\", e0);\n  }\n\n  function try_DeleteExpr()\n  {\n    shiftT(111);                    // 'delete'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    default:\n      shiftT(195);                  // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_ReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"ReplaceExpr\", e0);\n    shift(223);                     // 'replace'\n    lookahead1W(134);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 267)                  // 'value'\n    {\n      shift(267);                   // 'value'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shift(200);                   // 'of'\n    }\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(276);                     // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReplaceExpr\", e0);\n  }\n\n  function try_ReplaceExpr()\n  {\n    shiftT(223);                    // 'replace'\n    lookahead1W(134);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 267)                  // 'value'\n    {\n      shiftT(267);                  // 'value'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shiftT(200);                  // 'of'\n    }\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shiftT(194);                    // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n    shiftT(276);                    // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_RenameExpr()\n  {\n    eventHandler.startNonterminal(\"RenameExpr\", e0);\n    shift(222);                     // 'rename'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(80);                      // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_NewNameExpr();\n    eventHandler.endNonterminal(\"RenameExpr\", e0);\n  }\n\n  function try_RenameExpr()\n  {\n    shiftT(222);                    // 'rename'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shiftT(194);                    // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n    shiftT(80);                     // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_NewNameExpr();\n  }\n\n  function parse_SourceExpr()\n  {\n    eventHandler.startNonterminal(\"SourceExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SourceExpr\", e0);\n  }\n\n  function try_SourceExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TargetExpr()\n  {\n    eventHandler.startNonterminal(\"TargetExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TargetExpr\", e0);\n  }\n\n  function try_TargetExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_NewNameExpr()\n  {\n    eventHandler.startNonterminal(\"NewNameExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"NewNameExpr\", e0);\n  }\n\n  function try_NewNameExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TransformExpr()\n  {\n    eventHandler.startNonterminal(\"TransformExpr\", e0);\n    shift(104);                     // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_TransformSpec();\n    }\n    shift(184);                     // 'modify'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformExpr\", e0);\n  }\n\n  function try_TransformExpr()\n  {\n    shiftT(104);                    // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_TransformSpec();\n    }\n    shiftT(184);                    // 'modify'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TransformSpec()\n  {\n    eventHandler.startNonterminal(\"TransformSpec\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformSpec\", e0);\n  }\n\n  function try_TransformSpec()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_FTSelection()\n  {\n    eventHandler.startNonterminal(\"FTSelection\", e0);\n    parse_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(161);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 116                 // 'different'\n       && lk != 118                 // 'distance'\n       && lk != 128                 // 'entire'\n       && lk != 206                 // 'ordered'\n       && lk != 227                 // 'same'\n       && lk != 275                 // 'window'\n       && lk != 65106               // 'at' 'end'\n       && lk != 123986)             // 'at' 'start'\n      {\n        break;\n      }\n      whitespace();\n      parse_FTPosFilter();\n    }\n    eventHandler.endNonterminal(\"FTSelection\", e0);\n  }\n\n  function try_FTSelection()\n  {\n    try_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(161);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 116                 // 'different'\n       && lk != 118                 // 'distance'\n       && lk != 128                 // 'entire'\n       && lk != 206                 // 'ordered'\n       && lk != 227                 // 'same'\n       && lk != 275                 // 'window'\n       && lk != 65106               // 'at' 'end'\n       && lk != 123986)             // 'at' 'start'\n      {\n        break;\n      }\n      try_FTPosFilter();\n    }\n  }\n\n  function parse_FTWeight()\n  {\n    eventHandler.startNonterminal(\"FTWeight\", e0);\n    shift(270);                     // 'weight'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"FTWeight\", e0);\n  }\n\n  function try_FTWeight()\n  {\n    shiftT(270);                    // 'weight'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FTOr()\n  {\n    eventHandler.startNonterminal(\"FTOr\", e0);\n    parse_FTAnd();\n    for (;;)\n    {\n      if (l1 != 146)                // 'ftor'\n      {\n        break;\n      }\n      shift(146);                   // 'ftor'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTAnd();\n    }\n    eventHandler.endNonterminal(\"FTOr\", e0);\n  }\n\n  function try_FTOr()\n  {\n    try_FTAnd();\n    for (;;)\n    {\n      if (l1 != 146)                // 'ftor'\n      {\n        break;\n      }\n      shiftT(146);                  // 'ftor'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTAnd();\n    }\n  }\n\n  function parse_FTAnd()\n  {\n    eventHandler.startNonterminal(\"FTAnd\", e0);\n    parse_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftand'\n      {\n        break;\n      }\n      shift(144);                   // 'ftand'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTMildNot();\n    }\n    eventHandler.endNonterminal(\"FTAnd\", e0);\n  }\n\n  function try_FTAnd()\n  {\n    try_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftand'\n      {\n        break;\n      }\n      shiftT(144);                  // 'ftand'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTMildNot();\n    }\n  }\n\n  function parse_FTMildNot()\n  {\n    eventHandler.startNonterminal(\"FTMildNot\", e0);\n    parse_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 196)                // 'not'\n      {\n        break;\n      }\n      shift(196);                   // 'not'\n      lookahead1W(56);              // S^WS | '(:' | 'in'\n      shift(156);                   // 'in'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTUnaryNot();\n    }\n    eventHandler.endNonterminal(\"FTMildNot\", e0);\n  }\n\n  function try_FTMildNot()\n  {\n    try_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 196)                // 'not'\n      {\n        break;\n      }\n      shiftT(196);                  // 'not'\n      lookahead1W(56);              // S^WS | '(:' | 'in'\n      shiftT(156);                  // 'in'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTUnaryNot();\n    }\n  }\n\n  function parse_FTUnaryNot()\n  {\n    eventHandler.startNonterminal(\"FTUnaryNot\", e0);\n    if (l1 == 145)                  // 'ftnot'\n    {\n      shift(145);                   // 'ftnot'\n    }\n    lookahead1W(164);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    whitespace();\n    parse_FTPrimaryWithOptions();\n    eventHandler.endNonterminal(\"FTUnaryNot\", e0);\n  }\n\n  function try_FTUnaryNot()\n  {\n    if (l1 == 145)                  // 'ftnot'\n    {\n      shiftT(145);                  // 'ftnot'\n    }\n    lookahead1W(164);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    try_FTPrimaryWithOptions();\n  }\n\n  function parse_FTPrimaryWithOptions()\n  {\n    eventHandler.startNonterminal(\"FTPrimaryWithOptions\", e0);\n    parse_FTPrimary();\n    lookahead1W(213);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 265)                  // 'using'\n    {\n      whitespace();\n      parse_FTMatchOptions();\n    }\n    if (l1 == 270)                  // 'weight'\n    {\n      whitespace();\n      parse_FTWeight();\n    }\n    eventHandler.endNonterminal(\"FTPrimaryWithOptions\", e0);\n  }\n\n  function try_FTPrimaryWithOptions()\n  {\n    try_FTPrimary();\n    lookahead1W(213);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 265)                  // 'using'\n    {\n      try_FTMatchOptions();\n    }\n    if (l1 == 270)                  // 'weight'\n    {\n      try_FTWeight();\n    }\n  }\n\n  function parse_FTPrimary()\n  {\n    eventHandler.startNonterminal(\"FTPrimary\", e0);\n    switch (l1)\n    {\n    case 35:                        // '('\n      shift(35);                    // '('\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      shift(38);                    // ')'\n      break;\n    case 36:                        // '(#'\n      parse_FTExtensionSelection();\n      break;\n    default:\n      parse_FTWords();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 199)                // 'occurs'\n      {\n        whitespace();\n        parse_FTTimes();\n      }\n    }\n    eventHandler.endNonterminal(\"FTPrimary\", e0);\n  }\n\n  function try_FTPrimary()\n  {\n    switch (l1)\n    {\n    case 35:                        // '('\n      shiftT(35);                   // '('\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      shiftT(38);                   // ')'\n      break;\n    case 36:                        // '(#'\n      try_FTExtensionSelection();\n      break;\n    default:\n      try_FTWords();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 199)                // 'occurs'\n      {\n        try_FTTimes();\n      }\n    }\n  }\n\n  function parse_FTWords()\n  {\n    eventHandler.startNonterminal(\"FTWords\", e0);\n    parse_FTWordsValue();\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 72                    // 'all'\n     || l1 == 77                    // 'any'\n     || l1 == 214)                  // 'phrase'\n    {\n      whitespace();\n      parse_FTAnyallOption();\n    }\n    eventHandler.endNonterminal(\"FTWords\", e0);\n  }\n\n  function try_FTWords()\n  {\n    try_FTWordsValue();\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 72                    // 'all'\n     || l1 == 77                    // 'any'\n     || l1 == 214)                  // 'phrase'\n    {\n      try_FTAnyallOption();\n    }\n  }\n\n  function parse_FTWordsValue()\n  {\n    eventHandler.startNonterminal(\"FTWordsValue\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n    }\n    eventHandler.endNonterminal(\"FTWordsValue\", e0);\n  }\n\n  function try_FTWordsValue()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n    }\n  }\n\n  function parse_FTExtensionSelection()\n  {\n    eventHandler.startNonterminal(\"FTExtensionSelection\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(281);                     // '{'\n    lookahead1W(184);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_FTSelection();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"FTExtensionSelection\", e0);\n  }\n\n  function try_FTExtensionSelection()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(281);                    // '{'\n    lookahead1W(184);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      try_FTSelection();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FTAnyallOption()\n  {\n    eventHandler.startNonterminal(\"FTAnyallOption\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'any'\n      shift(77);                    // 'any'\n      lookahead1W(217);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 278)                // 'word'\n      {\n        shift(278);                 // 'word'\n      }\n      break;\n    case 72:                        // 'all'\n      shift(72);                    // 'all'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 279)                // 'words'\n      {\n        shift(279);                 // 'words'\n      }\n      break;\n    default:\n      shift(214);                   // 'phrase'\n    }\n    eventHandler.endNonterminal(\"FTAnyallOption\", e0);\n  }\n\n  function try_FTAnyallOption()\n  {\n    switch (l1)\n    {\n    case 77:                        // 'any'\n      shiftT(77);                   // 'any'\n      lookahead1W(217);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 278)                // 'word'\n      {\n        shiftT(278);                // 'word'\n      }\n      break;\n    case 72:                        // 'all'\n      shiftT(72);                   // 'all'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 279)                // 'words'\n      {\n        shiftT(279);                // 'words'\n      }\n      break;\n    default:\n      shiftT(214);                  // 'phrase'\n    }\n  }\n\n  function parse_FTTimes()\n  {\n    eventHandler.startNonterminal(\"FTTimes\", e0);\n    shift(199);                     // 'occurs'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    shift(252);                     // 'times'\n    eventHandler.endNonterminal(\"FTTimes\", e0);\n  }\n\n  function try_FTTimes()\n  {\n    shiftT(199);                    // 'occurs'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    shiftT(252);                    // 'times'\n  }\n\n  function parse_FTRange()\n  {\n    eventHandler.startNonterminal(\"FTRange\", e0);\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shift(131);                   // 'exactly'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shift(176);                 // 'least'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n        break;\n      default:\n        shift(186);                 // 'most'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n      }\n      break;\n    default:\n      shift(142);                   // 'from'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      shift(253);                   // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"FTRange\", e0);\n  }\n\n  function try_FTRange()\n  {\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shiftT(131);                  // 'exactly'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shiftT(176);                // 'least'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_AdditiveExpr();\n        break;\n      default:\n        shiftT(186);                // 'most'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_AdditiveExpr();\n      }\n      break;\n    default:\n      shiftT(142);                  // 'from'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n      shiftT(253);                  // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_FTPosFilter()\n  {\n    eventHandler.startNonterminal(\"FTPosFilter\", e0);\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      parse_FTOrder();\n      break;\n    case 275:                       // 'window'\n      parse_FTWindow();\n      break;\n    case 118:                       // 'distance'\n      parse_FTDistance();\n      break;\n    case 116:                       // 'different'\n    case 227:                       // 'same'\n      parse_FTScope();\n      break;\n    default:\n      parse_FTContent();\n    }\n    eventHandler.endNonterminal(\"FTPosFilter\", e0);\n  }\n\n  function try_FTPosFilter()\n  {\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      try_FTOrder();\n      break;\n    case 275:                       // 'window'\n      try_FTWindow();\n      break;\n    case 118:                       // 'distance'\n      try_FTDistance();\n      break;\n    case 116:                       // 'different'\n    case 227:                       // 'same'\n      try_FTScope();\n      break;\n    default:\n      try_FTContent();\n    }\n  }\n\n  function parse_FTOrder()\n  {\n    eventHandler.startNonterminal(\"FTOrder\", e0);\n    shift(206);                     // 'ordered'\n    eventHandler.endNonterminal(\"FTOrder\", e0);\n  }\n\n  function try_FTOrder()\n  {\n    shiftT(206);                    // 'ordered'\n  }\n\n  function parse_FTWindow()\n  {\n    eventHandler.startNonterminal(\"FTWindow\", e0);\n    shift(275);                     // 'window'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_AdditiveExpr();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTWindow\", e0);\n  }\n\n  function try_FTWindow()\n  {\n    shiftT(275);                    // 'window'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_AdditiveExpr();\n    try_FTUnit();\n  }\n\n  function parse_FTDistance()\n  {\n    eventHandler.startNonterminal(\"FTDistance\", e0);\n    shift(118);                     // 'distance'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTDistance\", e0);\n  }\n\n  function try_FTDistance()\n  {\n    shiftT(118);                    // 'distance'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    try_FTUnit();\n  }\n\n  function parse_FTUnit()\n  {\n    eventHandler.startNonterminal(\"FTUnit\", e0);\n    switch (l1)\n    {\n    case 279:                       // 'words'\n      shift(279);                   // 'words'\n      break;\n    case 237:                       // 'sentences'\n      shift(237);                   // 'sentences'\n      break;\n    default:\n      shift(209);                   // 'paragraphs'\n    }\n    eventHandler.endNonterminal(\"FTUnit\", e0);\n  }\n\n  function try_FTUnit()\n  {\n    switch (l1)\n    {\n    case 279:                       // 'words'\n      shiftT(279);                  // 'words'\n      break;\n    case 237:                       // 'sentences'\n      shiftT(237);                  // 'sentences'\n      break;\n    default:\n      shiftT(209);                  // 'paragraphs'\n    }\n  }\n\n  function parse_FTScope()\n  {\n    eventHandler.startNonterminal(\"FTScope\", e0);\n    switch (l1)\n    {\n    case 227:                       // 'same'\n      shift(227);                   // 'same'\n      break;\n    default:\n      shift(116);                   // 'different'\n    }\n    lookahead1W(136);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    whitespace();\n    parse_FTBigUnit();\n    eventHandler.endNonterminal(\"FTScope\", e0);\n  }\n\n  function try_FTScope()\n  {\n    switch (l1)\n    {\n    case 227:                       // 'same'\n      shiftT(227);                  // 'same'\n      break;\n    default:\n      shiftT(116);                  // 'different'\n    }\n    lookahead1W(136);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    try_FTBigUnit();\n  }\n\n  function parse_FTBigUnit()\n  {\n    eventHandler.startNonterminal(\"FTBigUnit\", e0);\n    switch (l1)\n    {\n    case 236:                       // 'sentence'\n      shift(236);                   // 'sentence'\n      break;\n    default:\n      shift(208);                   // 'paragraph'\n    }\n    eventHandler.endNonterminal(\"FTBigUnit\", e0);\n  }\n\n  function try_FTBigUnit()\n  {\n    switch (l1)\n    {\n    case 236:                       // 'sentence'\n      shiftT(236);                  // 'sentence'\n      break;\n    default:\n      shiftT(208);                  // 'paragraph'\n    }\n  }\n\n  function parse_FTContent()\n  {\n    eventHandler.startNonterminal(\"FTContent\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(121);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 242:                     // 'start'\n        shift(242);                 // 'start'\n        break;\n      default:\n        shift(127);                 // 'end'\n      }\n      break;\n    default:\n      shift(128);                   // 'entire'\n      lookahead1W(45);              // S^WS | '(:' | 'content'\n      shift(101);                   // 'content'\n    }\n    eventHandler.endNonterminal(\"FTContent\", e0);\n  }\n\n  function try_FTContent()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(121);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 242:                     // 'start'\n        shiftT(242);                // 'start'\n        break;\n      default:\n        shiftT(127);                // 'end'\n      }\n      break;\n    default:\n      shiftT(128);                  // 'entire'\n      lookahead1W(45);              // S^WS | '(:' | 'content'\n      shiftT(101);                  // 'content'\n    }\n  }\n\n  function parse_FTMatchOptions()\n  {\n    eventHandler.startNonterminal(\"FTMatchOptions\", e0);\n    for (;;)\n    {\n      shift(265);                   // 'using'\n      lookahead1W(204);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      whitespace();\n      parse_FTMatchOption();\n      lookahead1W(213);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 265)                // 'using'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"FTMatchOptions\", e0);\n  }\n\n  function try_FTMatchOptions()\n  {\n    for (;;)\n    {\n      shiftT(265);                  // 'using'\n      lookahead1W(204);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      try_FTMatchOption();\n      lookahead1W(213);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 265)                // 'using'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_FTMatchOption()\n  {\n    eventHandler.startNonterminal(\"FTMatchOption\", e0);\n    switch (l1)\n    {\n    case 191:                       // 'no'\n      lookahead2W(176);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 172:                       // 'language'\n      parse_FTLanguageOption();\n      break;\n    case 274:                       // 'wildcards'\n    case 140479:                    // 'no' 'wildcards'\n      parse_FTWildCardOption();\n      break;\n    case 251:                       // 'thesaurus'\n    case 128703:                    // 'no' 'thesaurus'\n      parse_FTThesaurusOption();\n      break;\n    case 243:                       // 'stemming'\n    case 124607:                    // 'no' 'stemming'\n      parse_FTStemOption();\n      break;\n    case 115:                       // 'diacritics'\n      parse_FTDiacriticsOption();\n      break;\n    case 244:                       // 'stop'\n    case 125119:                    // 'no' 'stop'\n      parse_FTStopWordOption();\n      break;\n    case 203:                       // 'option'\n      parse_FTExtensionOption();\n      break;\n    default:\n      parse_FTCaseOption();\n    }\n    eventHandler.endNonterminal(\"FTMatchOption\", e0);\n  }\n\n  function try_FTMatchOption()\n  {\n    switch (l1)\n    {\n    case 191:                       // 'no'\n      lookahead2W(176);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 172:                       // 'language'\n      try_FTLanguageOption();\n      break;\n    case 274:                       // 'wildcards'\n    case 140479:                    // 'no' 'wildcards'\n      try_FTWildCardOption();\n      break;\n    case 251:                       // 'thesaurus'\n    case 128703:                    // 'no' 'thesaurus'\n      try_FTThesaurusOption();\n      break;\n    case 243:                       // 'stemming'\n    case 124607:                    // 'no' 'stemming'\n      try_FTStemOption();\n      break;\n    case 115:                       // 'diacritics'\n      try_FTDiacriticsOption();\n      break;\n    case 244:                       // 'stop'\n    case 125119:                    // 'no' 'stop'\n      try_FTStopWordOption();\n      break;\n    case 203:                       // 'option'\n      try_FTExtensionOption();\n      break;\n    default:\n      try_FTCaseOption();\n    }\n  }\n\n  function parse_FTCaseOption()\n  {\n    eventHandler.startNonterminal(\"FTCaseOption\", e0);\n    switch (l1)\n    {\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      lookahead1W(128);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 160:                     // 'insensitive'\n        shift(160);                 // 'insensitive'\n        break;\n      default:\n        shift(235);                 // 'sensitive'\n      }\n      break;\n    case 180:                       // 'lowercase'\n      shift(180);                   // 'lowercase'\n      break;\n    default:\n      shift(264);                   // 'uppercase'\n    }\n    eventHandler.endNonterminal(\"FTCaseOption\", e0);\n  }\n\n  function try_FTCaseOption()\n  {\n    switch (l1)\n    {\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      lookahead1W(128);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 160:                     // 'insensitive'\n        shiftT(160);                // 'insensitive'\n        break;\n      default:\n        shiftT(235);                // 'sensitive'\n      }\n      break;\n    case 180:                       // 'lowercase'\n      shiftT(180);                  // 'lowercase'\n      break;\n    default:\n      shiftT(264);                  // 'uppercase'\n    }\n  }\n\n  function parse_FTDiacriticsOption()\n  {\n    eventHandler.startNonterminal(\"FTDiacriticsOption\", e0);\n    shift(115);                     // 'diacritics'\n    lookahead1W(128);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 160:                       // 'insensitive'\n      shift(160);                   // 'insensitive'\n      break;\n    default:\n      shift(235);                   // 'sensitive'\n    }\n    eventHandler.endNonterminal(\"FTDiacriticsOption\", e0);\n  }\n\n  function try_FTDiacriticsOption()\n  {\n    shiftT(115);                    // 'diacritics'\n    lookahead1W(128);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 160:                       // 'insensitive'\n      shiftT(160);                  // 'insensitive'\n      break;\n    default:\n      shiftT(235);                  // 'sensitive'\n    }\n  }\n\n  function parse_FTStemOption()\n  {\n    eventHandler.startNonterminal(\"FTStemOption\", e0);\n    switch (l1)\n    {\n    case 243:                       // 'stemming'\n      shift(243);                   // 'stemming'\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(77);              // S^WS | '(:' | 'stemming'\n      shift(243);                   // 'stemming'\n    }\n    eventHandler.endNonterminal(\"FTStemOption\", e0);\n  }\n\n  function try_FTStemOption()\n  {\n    switch (l1)\n    {\n    case 243:                       // 'stemming'\n      shiftT(243);                  // 'stemming'\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(77);              // S^WS | '(:' | 'stemming'\n      shiftT(243);                  // 'stemming'\n    }\n  }\n\n  function parse_FTThesaurusOption()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusOption\", e0);\n    switch (l1)\n    {\n    case 251:                       // 'thesaurus'\n      shift(251);                   // 'thesaurus'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        whitespace();\n        parse_FTThesaurusID();\n        break;\n      case 110:                     // 'default'\n        shift(110);                 // 'default'\n        break;\n      default:\n        shift(35);                  // '('\n        lookahead1W(116);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 82:                    // 'at'\n          whitespace();\n          parse_FTThesaurusID();\n          break;\n        default:\n          shift(110);               // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(105);         // S^WS | '(:' | ')' | ','\n          if (l1 != 42)             // ','\n          {\n            break;\n          }\n          shift(42);                // ','\n          lookahead1W(34);          // S^WS | '(:' | 'at'\n          whitespace();\n          parse_FTThesaurusID();\n        }\n        shift(38);                  // ')'\n      }\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(81);              // S^WS | '(:' | 'thesaurus'\n      shift(251);                   // 'thesaurus'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusOption\", e0);\n  }\n\n  function try_FTThesaurusOption()\n  {\n    switch (l1)\n    {\n    case 251:                       // 'thesaurus'\n      shiftT(251);                  // 'thesaurus'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        try_FTThesaurusID();\n        break;\n      case 110:                     // 'default'\n        shiftT(110);                // 'default'\n        break;\n      default:\n        shiftT(35);                 // '('\n        lookahead1W(116);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 82:                    // 'at'\n          try_FTThesaurusID();\n          break;\n        default:\n          shiftT(110);              // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(105);         // S^WS | '(:' | ')' | ','\n          if (l1 != 42)             // ','\n          {\n            break;\n          }\n          shiftT(42);               // ','\n          lookahead1W(34);          // S^WS | '(:' | 'at'\n          try_FTThesaurusID();\n        }\n        shiftT(38);                 // ')'\n      }\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(81);              // S^WS | '(:' | 'thesaurus'\n      shiftT(251);                  // 'thesaurus'\n    }\n  }\n\n  function parse_FTThesaurusID()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusID\", e0);\n    shift(82);                      // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(219);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 221)                  // 'relationship'\n    {\n      shift(221);                   // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    lookahead1W(215);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      lookahead2W(183);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 131                   // 'exactly'\n     || lk == 142                   // 'from'\n     || lk == 90194                 // 'at' 'least'\n     || lk == 95314)                // 'at' 'most'\n    {\n      whitespace();\n      parse_FTLiteralRange();\n      lookahead1W(61);              // S^WS | '(:' | 'levels'\n      shift(178);                   // 'levels'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusID\", e0);\n  }\n\n  function try_FTThesaurusID()\n  {\n    shiftT(82);                     // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n    lookahead1W(219);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 221)                  // 'relationship'\n    {\n      shiftT(221);                  // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n    }\n    lookahead1W(215);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      lookahead2W(183);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 131                   // 'exactly'\n     || lk == 142                   // 'from'\n     || lk == 90194                 // 'at' 'least'\n     || lk == 95314)                // 'at' 'most'\n    {\n      try_FTLiteralRange();\n      lookahead1W(61);              // S^WS | '(:' | 'levels'\n      shiftT(178);                  // 'levels'\n    }\n  }\n\n  function parse_FTLiteralRange()\n  {\n    eventHandler.startNonterminal(\"FTLiteralRange\", e0);\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shift(131);                   // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shift(176);                 // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n        break;\n      default:\n        shift(186);                 // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n      }\n      break;\n    default:\n      shift(142);                   // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      lookahead1W(82);              // S^WS | '(:' | 'to'\n      shift(253);                   // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n    }\n    eventHandler.endNonterminal(\"FTLiteralRange\", e0);\n  }\n\n  function try_FTLiteralRange()\n  {\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shiftT(131);                  // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shiftT(176);                // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n        break;\n      default:\n        shiftT(186);                // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n      }\n      break;\n    default:\n      shiftT(142);                  // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      lookahead1W(82);              // S^WS | '(:' | 'to'\n      shiftT(253);                  // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n    }\n  }\n\n  function parse_FTStopWordOption()\n  {\n    eventHandler.startNonterminal(\"FTStopWordOption\", e0);\n    switch (l1)\n    {\n    case 244:                       // 'stop'\n      shift(244);                   // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shift(279);                   // 'words'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 110:                     // 'default'\n        shift(110);                 // 'default'\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        whitespace();\n        parse_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'stop'\n      shift(244);                   // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shift(279);                   // 'words'\n    }\n    eventHandler.endNonterminal(\"FTStopWordOption\", e0);\n  }\n\n  function try_FTStopWordOption()\n  {\n    switch (l1)\n    {\n    case 244:                       // 'stop'\n      shiftT(244);                  // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shiftT(279);                  // 'words'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 110:                     // 'default'\n        shiftT(110);                // 'default'\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        try_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'stop'\n      shiftT(244);                  // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shiftT(279);                  // 'words'\n    }\n  }\n\n  function parse_FTStopWords()\n  {\n    eventHandler.startNonterminal(\"FTStopWords\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      break;\n    default:\n      shift(35);                    // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"FTStopWords\", e0);\n  }\n\n  function try_FTStopWords()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n      break;\n    default:\n      shiftT(35);                   // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shiftT(11);                 // StringLiteral\n      }\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_FTStopWordsInclExcl()\n  {\n    eventHandler.startNonterminal(\"FTStopWordsInclExcl\", e0);\n    switch (l1)\n    {\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    default:\n      shift(132);                   // 'except'\n    }\n    lookahead1W(103);               // S^WS | '(' | '(:' | 'at'\n    whitespace();\n    parse_FTStopWords();\n    eventHandler.endNonterminal(\"FTStopWordsInclExcl\", e0);\n  }\n\n  function try_FTStopWordsInclExcl()\n  {\n    switch (l1)\n    {\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    default:\n      shiftT(132);                  // 'except'\n    }\n    lookahead1W(103);               // S^WS | '(' | '(:' | 'at'\n    try_FTStopWords();\n  }\n\n  function parse_FTLanguageOption()\n  {\n    eventHandler.startNonterminal(\"FTLanguageOption\", e0);\n    shift(172);                     // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTLanguageOption\", e0);\n  }\n\n  function try_FTLanguageOption()\n  {\n    shiftT(172);                    // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTWildCardOption()\n  {\n    eventHandler.startNonterminal(\"FTWildCardOption\", e0);\n    switch (l1)\n    {\n    case 274:                       // 'wildcards'\n      shift(274);                   // 'wildcards'\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(87);              // S^WS | '(:' | 'wildcards'\n      shift(274);                   // 'wildcards'\n    }\n    eventHandler.endNonterminal(\"FTWildCardOption\", e0);\n  }\n\n  function try_FTWildCardOption()\n  {\n    switch (l1)\n    {\n    case 274:                       // 'wildcards'\n      shiftT(274);                  // 'wildcards'\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(87);              // S^WS | '(:' | 'wildcards'\n      shiftT(274);                  // 'wildcards'\n    }\n  }\n\n  function parse_FTExtensionOption()\n  {\n    eventHandler.startNonterminal(\"FTExtensionOption\", e0);\n    shift(203);                     // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTExtensionOption\", e0);\n  }\n\n  function try_FTExtensionOption()\n  {\n    shiftT(203);                    // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTIgnoreOption()\n  {\n    eventHandler.startNonterminal(\"FTIgnoreOption\", e0);\n    shift(277);                     // 'without'\n    lookahead1W(45);                // S^WS | '(:' | 'content'\n    shift(101);                     // 'content'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_UnionExpr();\n    eventHandler.endNonterminal(\"FTIgnoreOption\", e0);\n  }\n\n  function try_FTIgnoreOption()\n  {\n    shiftT(277);                    // 'without'\n    lookahead1W(45);                // S^WS | '(:' | 'content'\n    shiftT(101);                    // 'content'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_UnionExpr();\n  }\n\n  function parse_CollectionDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionDecl\", e0);\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(111);               // S^WS | '(:' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_CollectionTypeDecl();\n    }\n    eventHandler.endNonterminal(\"CollectionDecl\", e0);\n  }\n\n  function parse_CollectionTypeDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionTypeDecl\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(171);               // S^WS | '(:' | '*' | '+' | ';' | '?'\n    if (l1 != 54)                   // ';'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"CollectionTypeDecl\", e0);\n  }\n\n  function parse_IndexName()\n  {\n    eventHandler.startNonterminal(\"IndexName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"IndexName\", e0);\n  }\n\n  function parse_IndexDomainExpr()\n  {\n    eventHandler.startNonterminal(\"IndexDomainExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexDomainExpr\", e0);\n  }\n\n  function parse_IndexKeySpec()\n  {\n    eventHandler.startNonterminal(\"IndexKeySpec\", e0);\n    parse_IndexKeyExpr();\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_IndexKeyTypeDecl();\n    }\n    lookahead1W(156);               // S^WS | '(:' | ',' | ';' | 'collation'\n    if (l1 == 95)                   // 'collation'\n    {\n      whitespace();\n      parse_IndexKeyCollation();\n    }\n    eventHandler.endNonterminal(\"IndexKeySpec\", e0);\n  }\n\n  function parse_IndexKeyExpr()\n  {\n    eventHandler.startNonterminal(\"IndexKeyExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexKeyExpr\", e0);\n  }\n\n  function parse_IndexKeyTypeDecl()\n  {\n    eventHandler.startNonterminal(\"IndexKeyTypeDecl\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AtomicType();\n    lookahead1W(189);               // S^WS | '(:' | '*' | '+' | ',' | ';' | '?' | 'collation'\n    if (l1 == 40                    // '*'\n     || l1 == 41                    // '+'\n     || l1 == 65)                   // '?'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"IndexKeyTypeDecl\", e0);\n  }\n\n  function parse_AtomicType()\n  {\n    eventHandler.startNonterminal(\"AtomicType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicType\", e0);\n  }\n\n  function parse_IndexKeyCollation()\n  {\n    eventHandler.startNonterminal(\"IndexKeyCollation\", e0);\n    shift(95);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"IndexKeyCollation\", e0);\n  }\n\n  function parse_IndexDecl()\n  {\n    eventHandler.startNonterminal(\"IndexDecl\", e0);\n    shift(157);                     // 'index'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_IndexName();\n    lookahead1W(68);                // S^WS | '(:' | 'on'\n    shift(201);                     // 'on'\n    lookahead1W(66);                // S^WS | '(:' | 'nodes'\n    shift(195);                     // 'nodes'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_IndexDomainExpr();\n    shift(88);                      // 'by'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_IndexKeySpec();\n    for (;;)\n    {\n      lookahead1W(107);             // S^WS | '(:' | ',' | ';'\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_IndexKeySpec();\n    }\n    eventHandler.endNonterminal(\"IndexDecl\", e0);\n  }\n\n  function parse_ICDecl()\n  {\n    eventHandler.startNonterminal(\"ICDecl\", e0);\n    shift(163);                     // 'integrity'\n    lookahead1W(43);                // S^WS | '(:' | 'constraint'\n    shift(98);                      // 'constraint'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(124);               // S^WS | '(:' | 'foreign' | 'on'\n    switch (l1)\n    {\n    case 201:                       // 'on'\n      whitespace();\n      parse_ICCollection();\n      break;\n    default:\n      whitespace();\n      parse_ICForeignKey();\n    }\n    eventHandler.endNonterminal(\"ICDecl\", e0);\n  }\n\n  function parse_ICCollection()\n  {\n    eventHandler.startNonterminal(\"ICCollection\", e0);\n    shift(201);                     // 'on'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(150);               // S^WS | '$' | '(:' | 'foreach' | 'node'\n    switch (l1)\n    {\n    case 31:                        // '$'\n      whitespace();\n      parse_ICCollSequence();\n      break;\n    case 194:                       // 'node'\n      whitespace();\n      parse_ICCollSequenceUnique();\n      break;\n    default:\n      whitespace();\n      parse_ICCollNode();\n    }\n    eventHandler.endNonterminal(\"ICCollection\", e0);\n  }\n\n  function parse_ICCollSequence()\n  {\n    eventHandler.startNonterminal(\"ICCollSequence\", e0);\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollSequence\", e0);\n  }\n\n  function parse_ICCollSequenceUnique()\n  {\n    eventHandler.startNonterminal(\"ICCollSequenceUnique\", e0);\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(83);                // S^WS | '(:' | 'unique'\n    shift(261);                     // 'unique'\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICCollSequenceUnique\", e0);\n  }\n\n  function parse_ICCollNode()\n  {\n    eventHandler.startNonterminal(\"ICCollNode\", e0);\n    shift(140);                     // 'foreach'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollNode\", e0);\n  }\n\n  function parse_ICForeignKey()\n  {\n    eventHandler.startNonterminal(\"ICForeignKey\", e0);\n    shift(141);                     // 'foreign'\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(54);                // S^WS | '(:' | 'from'\n    whitespace();\n    parse_ICForeignKeySource();\n    whitespace();\n    parse_ICForeignKeyTarget();\n    eventHandler.endNonterminal(\"ICForeignKey\", e0);\n  }\n\n  function parse_ICForeignKeySource()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeySource\", e0);\n    shift(142);                     // 'from'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeySource\", e0);\n  }\n\n  function parse_ICForeignKeyTarget()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyTarget\", e0);\n    shift(253);                     // 'to'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeyTarget\", e0);\n  }\n\n  function parse_ICForeignKeyValues()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyValues\", e0);\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICForeignKeyValues\", e0);\n  }\n\n  function try_Comment()\n  {\n    shiftT(37);                     // '(:'\n    for (;;)\n    {\n      lookahead1(92);               // CommentContents | '(:' | ':)'\n      if (l1 == 51)                 // ':)'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 24:                      // CommentContents\n        shiftT(24);                 // CommentContents\n        break;\n      default:\n        try_Comment();\n      }\n    }\n    shiftT(51);                     // ':)'\n  }\n\n  function try_Whitespace()\n  {\n    switch (l1)\n    {\n    case 22:                        // S^WS\n      shiftT(22);                   // S^WS\n      break;\n    default:\n      try_Comment();\n    }\n  }\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    lookahead1(240);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      break;\n    case 97:                        // 'comment'\n      shift(97);                    // 'comment'\n      break;\n    case 121:                       // 'document-node'\n      shift(121);                   // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shift(125);                   // 'empty-sequence'\n      break;\n    case 147:                       // 'function'\n      shift(147);                   // 'function'\n      break;\n    case 154:                       // 'if'\n      shift(154);                   // 'if'\n      break;\n    case 167:                       // 'item'\n      shift(167);                   // 'item'\n      break;\n    case 188:                       // 'namespace-node'\n      shift(188);                   // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    case 220:                       // 'processing-instruction'\n      shift(220);                   // 'processing-instruction'\n      break;\n    case 230:                       // 'schema-attribute'\n      shift(230);                   // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shift(231);                   // 'schema-element'\n      break;\n    case 248:                       // 'switch'\n      shift(248);                   // 'switch'\n      break;\n    case 249:                       // 'text'\n      shift(249);                   // 'text'\n      break;\n    case 259:                       // 'typeswitch'\n      shift(259);                   // 'typeswitch'\n      break;\n    case 79:                        // 'array'\n      shift(79);                    // 'array'\n      break;\n    case 169:                       // 'json-item'\n      shift(169);                   // 'json-item'\n      break;\n    case 247:                       // 'structured-item'\n      shift(247);                   // 'structured-item'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function try_EQName()\n  {\n    lookahead1(240);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      break;\n    case 97:                        // 'comment'\n      shiftT(97);                   // 'comment'\n      break;\n    case 121:                       // 'document-node'\n      shiftT(121);                  // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shiftT(125);                  // 'empty-sequence'\n      break;\n    case 147:                       // 'function'\n      shiftT(147);                  // 'function'\n      break;\n    case 154:                       // 'if'\n      shiftT(154);                  // 'if'\n      break;\n    case 167:                       // 'item'\n      shiftT(167);                  // 'item'\n      break;\n    case 188:                       // 'namespace-node'\n      shiftT(188);                  // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    case 220:                       // 'processing-instruction'\n      shiftT(220);                  // 'processing-instruction'\n      break;\n    case 230:                       // 'schema-attribute'\n      shiftT(230);                  // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shiftT(231);                  // 'schema-element'\n      break;\n    case 248:                       // 'switch'\n      shiftT(248);                  // 'switch'\n      break;\n    case 249:                       // 'text'\n      shiftT(249);                  // 'text'\n      break;\n    case 259:                       // 'typeswitch'\n      shiftT(259);                  // 'typeswitch'\n      break;\n    case 79:                        // 'array'\n      shiftT(79);                   // 'array'\n      break;\n    case 169:                       // 'json-item'\n      shiftT(169);                  // 'json-item'\n      break;\n    case 247:                       // 'structured-item'\n      shiftT(247);                  // 'structured-item'\n      break;\n    default:\n      try_FunctionName();\n    }\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shift(6);                     // EQName^Token\n      break;\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shift(75);                    // 'ancestor-or-self'\n      break;\n    case 76:                        // 'and'\n      shift(76);                    // 'and'\n      break;\n    case 80:                        // 'as'\n      shift(80);                    // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shift(81);                    // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      break;\n    case 90:                        // 'cast'\n      shift(90);                    // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shift(91);                    // 'castable'\n      break;\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      break;\n    case 95:                        // 'collation'\n      shift(95);                    // 'collation'\n      break;\n    case 104:                       // 'copy'\n      shift(104);                   // 'copy'\n      break;\n    case 106:                       // 'count'\n      shift(106);                   // 'count'\n      break;\n    case 109:                       // 'declare'\n      shift(109);                   // 'declare'\n      break;\n    case 110:                       // 'default'\n      shift(110);                   // 'default'\n      break;\n    case 111:                       // 'delete'\n      shift(111);                   // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'descending'\n      shift(114);                   // 'descending'\n      break;\n    case 119:                       // 'div'\n      shift(119);                   // 'div'\n      break;\n    case 120:                       // 'document'\n      shift(120);                   // 'document'\n      break;\n    case 123:                       // 'else'\n      shift(123);                   // 'else'\n      break;\n    case 124:                       // 'empty'\n      shift(124);                   // 'empty'\n      break;\n    case 127:                       // 'end'\n      shift(127);                   // 'end'\n      break;\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 130:                       // 'every'\n      shift(130);                   // 'every'\n      break;\n    case 132:                       // 'except'\n      shift(132);                   // 'except'\n      break;\n    case 136:                       // 'first'\n      shift(136);                   // 'first'\n      break;\n    case 137:                       // 'following'\n      shift(137);                   // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      break;\n    case 139:                       // 'for'\n      shift(139);                   // 'for'\n      break;\n    case 148:                       // 'ge'\n      shift(148);                   // 'ge'\n      break;\n    case 150:                       // 'group'\n      shift(150);                   // 'group'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shift(153);                   // 'idiv'\n      break;\n    case 155:                       // 'import'\n      shift(155);                   // 'import'\n      break;\n    case 161:                       // 'insert'\n      shift(161);                   // 'insert'\n      break;\n    case 162:                       // 'instance'\n      shift(162);                   // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shift(164);                   // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shift(165);                   // 'into'\n      break;\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 173:                       // 'last'\n      shift(173);                   // 'last'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 177:                       // 'let'\n      shift(177);                   // 'let'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shift(183);                   // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shift(184);                   // 'modify'\n      break;\n    case 185:                       // 'module'\n      shift(185);                   // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 202:                       // 'only'\n      shift(202);                   // 'only'\n      break;\n    case 204:                       // 'or'\n      shift(204);                   // 'or'\n      break;\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      break;\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      break;\n    case 222:                       // 'rename'\n      shift(222);                   // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shift(223);                   // 'replace'\n      break;\n    case 224:                       // 'return'\n      shift(224);                   // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shift(228);                   // 'satisfies'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      break;\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    case 241:                       // 'stable'\n      shift(241);                   // 'stable'\n      break;\n    case 242:                       // 'start'\n      shift(242);                   // 'start'\n      break;\n    case 253:                       // 'to'\n      shift(253);                   // 'to'\n      break;\n    case 254:                       // 'treat'\n      shift(254);                   // 'treat'\n      break;\n    case 256:                       // 'try'\n      shift(256);                   // 'try'\n      break;\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    case 262:                       // 'unordered'\n      shift(262);                   // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shift(266);                   // 'validate'\n      break;\n    case 272:                       // 'where'\n      shift(272);                   // 'where'\n      break;\n    case 276:                       // 'with'\n      shift(276);                   // 'with'\n      break;\n    case 170:                       // 'jsoniq'\n      shift(170);                   // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shift(73);                    // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shift(84);                    // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shift(86);                    // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shift(87);                    // 'break'\n      break;\n    case 92:                        // 'catch'\n      shift(92);                    // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shift(99);                    // 'construction'\n      break;\n    case 102:                       // 'context'\n      shift(102);                   // 'context'\n      break;\n    case 103:                       // 'continue'\n      shift(103);                   // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shift(105);                   // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shift(133);                   // 'exit'\n      break;\n    case 134:                       // 'external'\n      shift(134);                   // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shift(143);                   // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shift(156);                   // 'in'\n      break;\n    case 157:                       // 'index'\n      shift(157);                   // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shift(163);                   // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shift(195);                   // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shift(203);                   // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shift(207);                   // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shift(226);                   // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shift(229);                   // 'schema'\n      break;\n    case 232:                       // 'score'\n      shift(232);                   // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shift(239);                   // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shift(257);                   // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shift(258);                   // 'type'\n      break;\n    case 263:                       // 'updating'\n      shift(263);                   // 'updating'\n      break;\n    case 267:                       // 'value'\n      shift(267);                   // 'value'\n      break;\n    case 268:                       // 'variable'\n      shift(268);                   // 'variable'\n      break;\n    case 269:                       // 'version'\n      shift(269);                   // 'version'\n      break;\n    case 273:                       // 'while'\n      shift(273);                   // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shift(98);                    // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shift(179);                   // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shift(225);                   // 'returning'\n      break;\n    case 78:                        // 'append'\n      shift(78);                    // 'append'\n      break;\n    case 135:                       // 'false'\n      shift(135);                   // 'false'\n      break;\n    case 142:                       // 'from'\n      shift(142);                   // 'from'\n      break;\n    case 197:                       // 'null'\n      shift(197);                   // 'null'\n      break;\n    case 168:                       // 'json'\n      shift(168);                   // 'json'\n      break;\n    case 198:                       // 'object'\n      shift(198);                   // 'object'\n      break;\n    case 233:                       // 'select'\n      shift(233);                   // 'select'\n      break;\n    default:\n      shift(255);                   // 'true'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function try_FunctionName()\n  {\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shiftT(6);                    // EQName^Token\n      break;\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shiftT(75);                   // 'ancestor-or-self'\n      break;\n    case 76:                        // 'and'\n      shiftT(76);                   // 'and'\n      break;\n    case 80:                        // 'as'\n      shiftT(80);                   // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shiftT(81);                   // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      break;\n    case 90:                        // 'cast'\n      shiftT(90);                   // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shiftT(91);                   // 'castable'\n      break;\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      break;\n    case 95:                        // 'collation'\n      shiftT(95);                   // 'collation'\n      break;\n    case 104:                       // 'copy'\n      shiftT(104);                  // 'copy'\n      break;\n    case 106:                       // 'count'\n      shiftT(106);                  // 'count'\n      break;\n    case 109:                       // 'declare'\n      shiftT(109);                  // 'declare'\n      break;\n    case 110:                       // 'default'\n      shiftT(110);                  // 'default'\n      break;\n    case 111:                       // 'delete'\n      shiftT(111);                  // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      break;\n    case 114:                       // 'descending'\n      shiftT(114);                  // 'descending'\n      break;\n    case 119:                       // 'div'\n      shiftT(119);                  // 'div'\n      break;\n    case 120:                       // 'document'\n      shiftT(120);                  // 'document'\n      break;\n    case 123:                       // 'else'\n      shiftT(123);                  // 'else'\n      break;\n    case 124:                       // 'empty'\n      shiftT(124);                  // 'empty'\n      break;\n    case 127:                       // 'end'\n      shiftT(127);                  // 'end'\n      break;\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 130:                       // 'every'\n      shiftT(130);                  // 'every'\n      break;\n    case 132:                       // 'except'\n      shiftT(132);                  // 'except'\n      break;\n    case 136:                       // 'first'\n      shiftT(136);                  // 'first'\n      break;\n    case 137:                       // 'following'\n      shiftT(137);                  // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      break;\n    case 139:                       // 'for'\n      shiftT(139);                  // 'for'\n      break;\n    case 148:                       // 'ge'\n      shiftT(148);                  // 'ge'\n      break;\n    case 150:                       // 'group'\n      shiftT(150);                  // 'group'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shiftT(153);                  // 'idiv'\n      break;\n    case 155:                       // 'import'\n      shiftT(155);                  // 'import'\n      break;\n    case 161:                       // 'insert'\n      shiftT(161);                  // 'insert'\n      break;\n    case 162:                       // 'instance'\n      shiftT(162);                  // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shiftT(164);                  // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shiftT(165);                  // 'into'\n      break;\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 173:                       // 'last'\n      shiftT(173);                  // 'last'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 177:                       // 'let'\n      shiftT(177);                  // 'let'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shiftT(183);                  // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shiftT(184);                  // 'modify'\n      break;\n    case 185:                       // 'module'\n      shiftT(185);                  // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shiftT(187);                  // 'namespace'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 202:                       // 'only'\n      shiftT(202);                  // 'only'\n      break;\n    case 204:                       // 'or'\n      shiftT(204);                  // 'or'\n      break;\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      break;\n    case 206:                       // 'ordered'\n      shiftT(206);                  // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      break;\n    case 222:                       // 'rename'\n      shiftT(222);                  // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shiftT(223);                  // 'replace'\n      break;\n    case 224:                       // 'return'\n      shiftT(224);                  // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shiftT(228);                  // 'satisfies'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      break;\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    case 241:                       // 'stable'\n      shiftT(241);                  // 'stable'\n      break;\n    case 242:                       // 'start'\n      shiftT(242);                  // 'start'\n      break;\n    case 253:                       // 'to'\n      shiftT(253);                  // 'to'\n      break;\n    case 254:                       // 'treat'\n      shiftT(254);                  // 'treat'\n      break;\n    case 256:                       // 'try'\n      shiftT(256);                  // 'try'\n      break;\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    case 262:                       // 'unordered'\n      shiftT(262);                  // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shiftT(266);                  // 'validate'\n      break;\n    case 272:                       // 'where'\n      shiftT(272);                  // 'where'\n      break;\n    case 276:                       // 'with'\n      shiftT(276);                  // 'with'\n      break;\n    case 170:                       // 'jsoniq'\n      shiftT(170);                  // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shiftT(73);                   // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shiftT(84);                   // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shiftT(86);                   // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shiftT(87);                   // 'break'\n      break;\n    case 92:                        // 'catch'\n      shiftT(92);                   // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shiftT(99);                   // 'construction'\n      break;\n    case 102:                       // 'context'\n      shiftT(102);                  // 'context'\n      break;\n    case 103:                       // 'continue'\n      shiftT(103);                  // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shiftT(105);                  // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shiftT(107);                  // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shiftT(126);                  // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shiftT(133);                  // 'exit'\n      break;\n    case 134:                       // 'external'\n      shiftT(134);                  // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shiftT(143);                  // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shiftT(156);                  // 'in'\n      break;\n    case 157:                       // 'index'\n      shiftT(157);                  // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shiftT(163);                  // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shiftT(195);                  // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shiftT(203);                  // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shiftT(207);                  // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shiftT(226);                  // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shiftT(229);                  // 'schema'\n      break;\n    case 232:                       // 'score'\n      shiftT(232);                  // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shiftT(239);                  // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shiftT(245);                  // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shiftT(257);                  // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shiftT(258);                  // 'type'\n      break;\n    case 263:                       // 'updating'\n      shiftT(263);                  // 'updating'\n      break;\n    case 267:                       // 'value'\n      shiftT(267);                  // 'value'\n      break;\n    case 268:                       // 'variable'\n      shiftT(268);                  // 'variable'\n      break;\n    case 269:                       // 'version'\n      shiftT(269);                  // 'version'\n      break;\n    case 273:                       // 'while'\n      shiftT(273);                  // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shiftT(98);                   // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shiftT(179);                  // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shiftT(225);                  // 'returning'\n      break;\n    case 78:                        // 'append'\n      shiftT(78);                   // 'append'\n      break;\n    case 135:                       // 'false'\n      shiftT(135);                  // 'false'\n      break;\n    case 142:                       // 'from'\n      shiftT(142);                  // 'from'\n      break;\n    case 197:                       // 'null'\n      shiftT(197);                  // 'null'\n      break;\n    case 168:                       // 'json'\n      shiftT(168);                  // 'json'\n      break;\n    case 198:                       // 'object'\n      shiftT(198);                  // 'object'\n      break;\n    case 233:                       // 'select'\n      shiftT(233);                  // 'select'\n      break;\n    default:\n      shiftT(255);                  // 'true'\n    }\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shift(19);                    // NCName^Token\n      break;\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 76:                        // 'and'\n      shift(76);                    // 'and'\n      break;\n    case 80:                        // 'as'\n      shift(80);                    // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shift(81);                    // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      break;\n    case 90:                        // 'cast'\n      shift(90);                    // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shift(91);                    // 'castable'\n      break;\n    case 95:                        // 'collation'\n      shift(95);                    // 'collation'\n      break;\n    case 106:                       // 'count'\n      shift(106);                   // 'count'\n      break;\n    case 110:                       // 'default'\n      shift(110);                   // 'default'\n      break;\n    case 114:                       // 'descending'\n      shift(114);                   // 'descending'\n      break;\n    case 119:                       // 'div'\n      shift(119);                   // 'div'\n      break;\n    case 123:                       // 'else'\n      shift(123);                   // 'else'\n      break;\n    case 124:                       // 'empty'\n      shift(124);                   // 'empty'\n      break;\n    case 127:                       // 'end'\n      shift(127);                   // 'end'\n      break;\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 132:                       // 'except'\n      shift(132);                   // 'except'\n      break;\n    case 139:                       // 'for'\n      shift(139);                   // 'for'\n      break;\n    case 148:                       // 'ge'\n      shift(148);                   // 'ge'\n      break;\n    case 150:                       // 'group'\n      shift(150);                   // 'group'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shift(153);                   // 'idiv'\n      break;\n    case 162:                       // 'instance'\n      shift(162);                   // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shift(164);                   // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shift(165);                   // 'into'\n      break;\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 177:                       // 'let'\n      shift(177);                   // 'let'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shift(183);                   // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shift(184);                   // 'modify'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 202:                       // 'only'\n      shift(202);                   // 'only'\n      break;\n    case 204:                       // 'or'\n      shift(204);                   // 'or'\n      break;\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      break;\n    case 224:                       // 'return'\n      shift(224);                   // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shift(228);                   // 'satisfies'\n      break;\n    case 241:                       // 'stable'\n      shift(241);                   // 'stable'\n      break;\n    case 242:                       // 'start'\n      shift(242);                   // 'start'\n      break;\n    case 253:                       // 'to'\n      shift(253);                   // 'to'\n      break;\n    case 254:                       // 'treat'\n      shift(254);                   // 'treat'\n      break;\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    case 272:                       // 'where'\n      shift(272);                   // 'where'\n      break;\n    case 276:                       // 'with'\n      shift(276);                   // 'with'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shift(75);                    // 'ancestor-or-self'\n      break;\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      break;\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      break;\n    case 97:                        // 'comment'\n      shift(97);                    // 'comment'\n      break;\n    case 104:                       // 'copy'\n      shift(104);                   // 'copy'\n      break;\n    case 109:                       // 'declare'\n      shift(109);                   // 'declare'\n      break;\n    case 111:                       // 'delete'\n      shift(111);                   // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      break;\n    case 120:                       // 'document'\n      shift(120);                   // 'document'\n      break;\n    case 121:                       // 'document-node'\n      shift(121);                   // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shift(125);                   // 'empty-sequence'\n      break;\n    case 130:                       // 'every'\n      shift(130);                   // 'every'\n      break;\n    case 136:                       // 'first'\n      shift(136);                   // 'first'\n      break;\n    case 137:                       // 'following'\n      shift(137);                   // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      break;\n    case 147:                       // 'function'\n      shift(147);                   // 'function'\n      break;\n    case 154:                       // 'if'\n      shift(154);                   // 'if'\n      break;\n    case 155:                       // 'import'\n      shift(155);                   // 'import'\n      break;\n    case 161:                       // 'insert'\n      shift(161);                   // 'insert'\n      break;\n    case 167:                       // 'item'\n      shift(167);                   // 'item'\n      break;\n    case 173:                       // 'last'\n      shift(173);                   // 'last'\n      break;\n    case 185:                       // 'module'\n      shift(185);                   // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      break;\n    case 188:                       // 'namespace-node'\n      shift(188);                   // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      break;\n    case 220:                       // 'processing-instruction'\n      shift(220);                   // 'processing-instruction'\n      break;\n    case 222:                       // 'rename'\n      shift(222);                   // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shift(223);                   // 'replace'\n      break;\n    case 230:                       // 'schema-attribute'\n      shift(230);                   // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shift(231);                   // 'schema-element'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      break;\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    case 248:                       // 'switch'\n      shift(248);                   // 'switch'\n      break;\n    case 249:                       // 'text'\n      shift(249);                   // 'text'\n      break;\n    case 256:                       // 'try'\n      shift(256);                   // 'try'\n      break;\n    case 259:                       // 'typeswitch'\n      shift(259);                   // 'typeswitch'\n      break;\n    case 262:                       // 'unordered'\n      shift(262);                   // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shift(266);                   // 'validate'\n      break;\n    case 268:                       // 'variable'\n      shift(268);                   // 'variable'\n      break;\n    case 170:                       // 'jsoniq'\n      shift(170);                   // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shift(73);                    // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shift(84);                    // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shift(86);                    // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shift(87);                    // 'break'\n      break;\n    case 92:                        // 'catch'\n      shift(92);                    // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shift(99);                    // 'construction'\n      break;\n    case 102:                       // 'context'\n      shift(102);                   // 'context'\n      break;\n    case 103:                       // 'continue'\n      shift(103);                   // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shift(105);                   // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shift(133);                   // 'exit'\n      break;\n    case 134:                       // 'external'\n      shift(134);                   // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shift(143);                   // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shift(156);                   // 'in'\n      break;\n    case 157:                       // 'index'\n      shift(157);                   // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shift(163);                   // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shift(195);                   // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shift(203);                   // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shift(207);                   // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shift(226);                   // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shift(229);                   // 'schema'\n      break;\n    case 232:                       // 'score'\n      shift(232);                   // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shift(239);                   // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shift(257);                   // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shift(258);                   // 'type'\n      break;\n    case 263:                       // 'updating'\n      shift(263);                   // 'updating'\n      break;\n    case 267:                       // 'value'\n      shift(267);                   // 'value'\n      break;\n    case 269:                       // 'version'\n      shift(269);                   // 'version'\n      break;\n    case 273:                       // 'while'\n      shift(273);                   // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shift(98);                    // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shift(179);                   // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shift(225);                   // 'returning'\n      break;\n    case 78:                        // 'append'\n      shift(78);                    // 'append'\n      break;\n    case 135:                       // 'false'\n      shift(135);                   // 'false'\n      break;\n    case 142:                       // 'from'\n      shift(142);                   // 'from'\n      break;\n    case 197:                       // 'null'\n      shift(197);                   // 'null'\n      break;\n    case 168:                       // 'json'\n      shift(168);                   // 'json'\n      break;\n    case 198:                       // 'object'\n      shift(198);                   // 'object'\n      break;\n    case 233:                       // 'select'\n      shift(233);                   // 'select'\n      break;\n    default:\n      shift(255);                   // 'true'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function try_NCName()\n  {\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shiftT(19);                   // NCName^Token\n      break;\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 76:                        // 'and'\n      shiftT(76);                   // 'and'\n      break;\n    case 80:                        // 'as'\n      shiftT(80);                   // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shiftT(81);                   // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      break;\n    case 90:                        // 'cast'\n      shiftT(90);                   // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shiftT(91);                   // 'castable'\n      break;\n    case 95:                        // 'collation'\n      shiftT(95);                   // 'collation'\n      break;\n    case 106:                       // 'count'\n      shiftT(106);                  // 'count'\n      break;\n    case 110:                       // 'default'\n      shiftT(110);                  // 'default'\n      break;\n    case 114:                       // 'descending'\n      shiftT(114);                  // 'descending'\n      break;\n    case 119:                       // 'div'\n      shiftT(119);                  // 'div'\n      break;\n    case 123:                       // 'else'\n      shiftT(123);                  // 'else'\n      break;\n    case 124:                       // 'empty'\n      shiftT(124);                  // 'empty'\n      break;\n    case 127:                       // 'end'\n      shiftT(127);                  // 'end'\n      break;\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 132:                       // 'except'\n      shiftT(132);                  // 'except'\n      break;\n    case 139:                       // 'for'\n      shiftT(139);                  // 'for'\n      break;\n    case 148:                       // 'ge'\n      shiftT(148);                  // 'ge'\n      break;\n    case 150:                       // 'group'\n      shiftT(150);                  // 'group'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shiftT(153);                  // 'idiv'\n      break;\n    case 162:                       // 'instance'\n      shiftT(162);                  // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shiftT(164);                  // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shiftT(165);                  // 'into'\n      break;\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 177:                       // 'let'\n      shiftT(177);                  // 'let'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shiftT(183);                  // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shiftT(184);                  // 'modify'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 202:                       // 'only'\n      shiftT(202);                  // 'only'\n      break;\n    case 204:                       // 'or'\n      shiftT(204);                  // 'or'\n      break;\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      break;\n    case 224:                       // 'return'\n      shiftT(224);                  // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shiftT(228);                  // 'satisfies'\n      break;\n    case 241:                       // 'stable'\n      shiftT(241);                  // 'stable'\n      break;\n    case 242:                       // 'start'\n      shiftT(242);                  // 'start'\n      break;\n    case 253:                       // 'to'\n      shiftT(253);                  // 'to'\n      break;\n    case 254:                       // 'treat'\n      shiftT(254);                  // 'treat'\n      break;\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    case 272:                       // 'where'\n      shiftT(272);                  // 'where'\n      break;\n    case 276:                       // 'with'\n      shiftT(276);                  // 'with'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shiftT(75);                   // 'ancestor-or-self'\n      break;\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      break;\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      break;\n    case 97:                        // 'comment'\n      shiftT(97);                   // 'comment'\n      break;\n    case 104:                       // 'copy'\n      shiftT(104);                  // 'copy'\n      break;\n    case 109:                       // 'declare'\n      shiftT(109);                  // 'declare'\n      break;\n    case 111:                       // 'delete'\n      shiftT(111);                  // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      break;\n    case 120:                       // 'document'\n      shiftT(120);                  // 'document'\n      break;\n    case 121:                       // 'document-node'\n      shiftT(121);                  // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shiftT(125);                  // 'empty-sequence'\n      break;\n    case 130:                       // 'every'\n      shiftT(130);                  // 'every'\n      break;\n    case 136:                       // 'first'\n      shiftT(136);                  // 'first'\n      break;\n    case 137:                       // 'following'\n      shiftT(137);                  // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      break;\n    case 147:                       // 'function'\n      shiftT(147);                  // 'function'\n      break;\n    case 154:                       // 'if'\n      shiftT(154);                  // 'if'\n      break;\n    case 155:                       // 'import'\n      shiftT(155);                  // 'import'\n      break;\n    case 161:                       // 'insert'\n      shiftT(161);                  // 'insert'\n      break;\n    case 167:                       // 'item'\n      shiftT(167);                  // 'item'\n      break;\n    case 173:                       // 'last'\n      shiftT(173);                  // 'last'\n      break;\n    case 185:                       // 'module'\n      shiftT(185);                  // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shiftT(187);                  // 'namespace'\n      break;\n    case 188:                       // 'namespace-node'\n      shiftT(188);                  // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    case 206:                       // 'ordered'\n      shiftT(206);                  // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      break;\n    case 220:                       // 'processing-instruction'\n      shiftT(220);                  // 'processing-instruction'\n      break;\n    case 222:                       // 'rename'\n      shiftT(222);                  // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shiftT(223);                  // 'replace'\n      break;\n    case 230:                       // 'schema-attribute'\n      shiftT(230);                  // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shiftT(231);                  // 'schema-element'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      break;\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    case 248:                       // 'switch'\n      shiftT(248);                  // 'switch'\n      break;\n    case 249:                       // 'text'\n      shiftT(249);                  // 'text'\n      break;\n    case 256:                       // 'try'\n      shiftT(256);                  // 'try'\n      break;\n    case 259:                       // 'typeswitch'\n      shiftT(259);                  // 'typeswitch'\n      break;\n    case 262:                       // 'unordered'\n      shiftT(262);                  // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shiftT(266);                  // 'validate'\n      break;\n    case 268:                       // 'variable'\n      shiftT(268);                  // 'variable'\n      break;\n    case 170:                       // 'jsoniq'\n      shiftT(170);                  // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shiftT(73);                   // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shiftT(84);                   // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shiftT(86);                   // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shiftT(87);                   // 'break'\n      break;\n    case 92:                        // 'catch'\n      shiftT(92);                   // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shiftT(99);                   // 'construction'\n      break;\n    case 102:                       // 'context'\n      shiftT(102);                  // 'context'\n      break;\n    case 103:                       // 'continue'\n      shiftT(103);                  // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shiftT(105);                  // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shiftT(107);                  // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shiftT(126);                  // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shiftT(133);                  // 'exit'\n      break;\n    case 134:                       // 'external'\n      shiftT(134);                  // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shiftT(143);                  // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shiftT(156);                  // 'in'\n      break;\n    case 157:                       // 'index'\n      shiftT(157);                  // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shiftT(163);                  // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shiftT(195);                  // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shiftT(203);                  // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shiftT(207);                  // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shiftT(226);                  // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shiftT(229);                  // 'schema'\n      break;\n    case 232:                       // 'score'\n      shiftT(232);                  // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shiftT(239);                  // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shiftT(245);                  // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shiftT(257);                  // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shiftT(258);                  // 'type'\n      break;\n    case 263:                       // 'updating'\n      shiftT(263);                  // 'updating'\n      break;\n    case 267:                       // 'value'\n      shiftT(267);                  // 'value'\n      break;\n    case 269:                       // 'version'\n      shiftT(269);                  // 'version'\n      break;\n    case 273:                       // 'while'\n      shiftT(273);                  // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shiftT(98);                   // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shiftT(179);                  // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shiftT(225);                  // 'returning'\n      break;\n    case 78:                        // 'append'\n      shiftT(78);                   // 'append'\n      break;\n    case 135:                       // 'false'\n      shiftT(135);                  // 'false'\n      break;\n    case 142:                       // 'from'\n      shiftT(142);                  // 'from'\n      break;\n    case 197:                       // 'null'\n      shiftT(197);                  // 'null'\n      break;\n    case 168:                       // 'json'\n      shiftT(168);                  // 'json'\n      break;\n    case 198:                       // 'object'\n      shiftT(198);                  // 'object'\n      break;\n    case 233:                       // 'select'\n      shiftT(233);                  // 'select'\n      break;\n    default:\n      shiftT(255);                  // 'true'\n    }\n  }\n\n  function parse_MainModule()\n  {\n    eventHandler.startNonterminal(\"MainModule\", e0);\n    parse_Prolog();\n    whitespace();\n    parse_Program();\n    eventHandler.endNonterminal(\"MainModule\", e0);\n  }\n\n  function parse_Program()\n  {\n    eventHandler.startNonterminal(\"Program\", e0);\n    parse_StatementsAndOptionalExpr();\n    eventHandler.endNonterminal(\"Program\", e0);\n  }\n\n  function parse_Statements()\n  {\n    eventHandler.startNonterminal(\"Statements\", e0);\n    for (;;)\n    {\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 35:                      // '('\n        lookahead2W(269);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 36:                      // '(#'\n        lookahead2(242);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 47:                      // '/'\n        lookahead2W(285);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 48:                      // '//'\n        lookahead2W(259);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 55:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 56:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 60:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 78:                      // 'append'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 133:                     // 'exit'\n        lookahead2W(147);           // S^WS | '#' | '(' | '(:' | 'returning'\n        break;\n      case 139:                     // 'for'\n        lookahead2W(179);           // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n        break;\n      case 161:                     // 'insert'\n        lookahead2W(275);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 177:                     // 'let'\n        lookahead2W(166);           // S^WS | '#' | '$' | '(' | '(:' | 'score'\n        break;\n      case 187:                     // 'namespace'\n        lookahead2W(246);           // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 220:                     // 'processing-instruction'\n        lookahead2W(244);           // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 223:                     // 'replace'\n        lookahead2W(170);           // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n        break;\n      case 266:                     // 'validate'\n        lookahead2W(188);           // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n        break;\n      case 281:                     // '{'\n        lookahead2W(282);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 283:                     // '{|'\n        lookahead2W(273);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 31:                      // '$'\n      case 33:                      // '%'\n        lookahead2W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 83:                      // 'attribute'\n      case 122:                     // 'element'\n        lookahead2W(252);           // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 87:                      // 'break'\n      case 103:                     // 'continue'\n        lookahead2W(145);           // S^WS | '#' | '(' | '(:' | 'loop'\n        break;\n      case 97:                      // 'comment'\n      case 249:                     // 'text'\n        lookahead2W(97);            // S^WS | '#' | '(:' | '{'\n        break;\n      case 111:                     // 'delete'\n      case 222:                     // 'rename'\n        lookahead2W(260);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 41:                      // '+'\n      case 43:                      // '-'\n      case 196:                     // 'not'\n        lookahead2W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 135:                     // 'false'\n      case 197:                     // 'null'\n      case 255:                     // 'true'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' |\n        break;\n      case 104:                     // 'copy'\n      case 130:                     // 'every'\n      case 240:                     // 'some'\n      case 268:                     // 'variable'\n        lookahead2W(143);           // S^WS | '#' | '$' | '(' | '(:'\n        break;\n      case 120:                     // 'document'\n      case 206:                     // 'ordered'\n      case 256:                     // 'try'\n      case 262:                     // 'unordered'\n        lookahead2W(148);           // S^WS | '#' | '(' | '(:' | '{'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 32:                      // '$$'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' | '//' |\n        break;\n      case 79:                      // 'array'\n      case 121:                     // 'document-node'\n      case 125:                     // 'empty-sequence'\n      case 167:                     // 'item'\n      case 169:                     // 'json-item'\n      case 188:                     // 'namespace-node'\n      case 194:                     // 'node'\n      case 230:                     // 'schema-attribute'\n      case 231:                     // 'schema-element'\n      case 247:                     // 'structured-item'\n        lookahead2W(20);            // S^WS | '#' | '(:'\n        break;\n      case 6:                       // EQName^Token\n      case 71:                      // 'after'\n      case 73:                      // 'allowing'\n      case 74:                      // 'ancestor'\n      case 75:                      // 'ancestor-or-self'\n      case 76:                      // 'and'\n      case 80:                      // 'as'\n      case 81:                      // 'ascending'\n      case 82:                      // 'at'\n      case 84:                      // 'base-uri'\n      case 85:                      // 'before'\n      case 86:                      // 'boundary-space'\n      case 89:                      // 'case'\n      case 90:                      // 'cast'\n      case 91:                      // 'castable'\n      case 92:                      // 'catch'\n      case 94:                      // 'child'\n      case 95:                      // 'collation'\n      case 98:                      // 'constraint'\n      case 99:                      // 'construction'\n      case 102:                     // 'context'\n      case 105:                     // 'copy-namespaces'\n      case 106:                     // 'count'\n      case 107:                     // 'decimal-format'\n      case 109:                     // 'declare'\n      case 110:                     // 'default'\n      case 112:                     // 'descendant'\n      case 113:                     // 'descendant-or-self'\n      case 114:                     // 'descending'\n      case 119:                     // 'div'\n      case 123:                     // 'else'\n      case 124:                     // 'empty'\n      case 126:                     // 'encoding'\n      case 127:                     // 'end'\n      case 129:                     // 'eq'\n      case 132:                     // 'except'\n      case 134:                     // 'external'\n      case 136:                     // 'first'\n      case 137:                     // 'following'\n      case 138:                     // 'following-sibling'\n      case 142:                     // 'from'\n      case 143:                     // 'ft-option'\n      case 147:                     // 'function'\n      case 148:                     // 'ge'\n      case 150:                     // 'group'\n      case 152:                     // 'gt'\n      case 153:                     // 'idiv'\n      case 154:                     // 'if'\n      case 155:                     // 'import'\n      case 156:                     // 'in'\n      case 157:                     // 'index'\n      case 162:                     // 'instance'\n      case 163:                     // 'integrity'\n      case 164:                     // 'intersect'\n      case 165:                     // 'into'\n      case 166:                     // 'is'\n      case 168:                     // 'json'\n      case 170:                     // 'jsoniq'\n      case 173:                     // 'last'\n      case 174:                     // 'lax'\n      case 175:                     // 'le'\n      case 179:                     // 'loop'\n      case 181:                     // 'lt'\n      case 183:                     // 'mod'\n      case 184:                     // 'modify'\n      case 185:                     // 'module'\n      case 189:                     // 'ne'\n      case 195:                     // 'nodes'\n      case 198:                     // 'object'\n      case 202:                     // 'only'\n      case 203:                     // 'option'\n      case 204:                     // 'or'\n      case 205:                     // 'order'\n      case 207:                     // 'ordering'\n      case 210:                     // 'parent'\n      case 216:                     // 'preceding'\n      case 217:                     // 'preceding-sibling'\n      case 224:                     // 'return'\n      case 225:                     // 'returning'\n      case 226:                     // 'revalidation'\n      case 228:                     // 'satisfies'\n      case 229:                     // 'schema'\n      case 232:                     // 'score'\n      case 233:                     // 'select'\n      case 234:                     // 'self'\n      case 239:                     // 'sliding'\n      case 241:                     // 'stable'\n      case 242:                     // 'start'\n      case 245:                     // 'strict'\n      case 248:                     // 'switch'\n      case 253:                     // 'to'\n      case 254:                     // 'treat'\n      case 257:                     // 'tumbling'\n      case 258:                     // 'type'\n      case 259:                     // 'typeswitch'\n      case 260:                     // 'union'\n      case 263:                     // 'updating'\n      case 267:                     // 'value'\n      case 269:                     // 'version'\n      case 272:                     // 'where'\n      case 273:                     // 'while'\n      case 276:                     // 'with'\n        lookahead2W(95);            // S^WS | '#' | '(' | '(:'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 54                  // ';'\n       && lk != 287                 // '}'\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12832               // '$$' EOF\n       && lk != 12847               // '/' EOF\n       && lk != 12935               // 'false' EOF\n       && lk != 12997               // 'null' EOF\n       && lk != 13055               // 'true' EOF\n       && lk != 16140               // 'variable' '$'\n       && lk != 21512               // IntegerLiteral ','\n       && lk != 21513               // DecimalLiteral ','\n       && lk != 21514               // DoubleLiteral ','\n       && lk != 21515               // StringLiteral ','\n       && lk != 21536               // '$$' ','\n       && lk != 21551               // '/' ','\n       && lk != 21639               // 'false' ','\n       && lk != 21701               // 'null' ','\n       && lk != 21759               // 'true' ','\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333              // 'exit' 'returning'\n       && lk != 146952              // IntegerLiteral '}'\n       && lk != 146953              // DecimalLiteral '}'\n       && lk != 146954              // DoubleLiteral '}'\n       && lk != 146955              // StringLiteral '}'\n       && lk != 146976              // '$$' '}'\n       && lk != 146991              // '/' '}'\n       && lk != 147079              // 'false' '}'\n       && lk != 147141              // 'null' '}'\n       && lk != 147199)             // 'true' '}'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(8, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 54                  // ';'\n       && lk != 16140               // 'variable' '$'\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333)             // 'exit' 'returning'\n      {\n        break;\n      }\n      whitespace();\n      parse_Statement();\n    }\n    eventHandler.endNonterminal(\"Statements\", e0);\n  }\n\n  function try_Statements()\n  {\n    for (;;)\n    {\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 35:                      // '('\n        lookahead2W(269);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 36:                      // '(#'\n        lookahead2(242);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 47:                      // '/'\n        lookahead2W(285);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 48:                      // '//'\n        lookahead2W(259);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 55:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 56:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 60:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 78:                      // 'append'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 133:                     // 'exit'\n        lookahead2W(147);           // S^WS | '#' | '(' | '(:' | 'returning'\n        break;\n      case 139:                     // 'for'\n        lookahead2W(179);           // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n        break;\n      case 161:                     // 'insert'\n        lookahead2W(275);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 177:                     // 'let'\n        lookahead2W(166);           // S^WS | '#' | '$' | '(' | '(:' | 'score'\n        break;\n      case 187:                     // 'namespace'\n        lookahead2W(246);           // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 220:                     // 'processing-instruction'\n        lookahead2W(244);           // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 223:                     // 'replace'\n        lookahead2W(170);           // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n        break;\n      case 266:                     // 'validate'\n        lookahead2W(188);           // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n        break;\n      case 281:                     // '{'\n        lookahead2W(282);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 283:                     // '{|'\n        lookahead2W(273);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 31:                      // '$'\n      case 33:                      // '%'\n        lookahead2W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 83:                      // 'attribute'\n      case 122:                     // 'element'\n        lookahead2W(252);           // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 87:                      // 'break'\n      case 103:                     // 'continue'\n        lookahead2W(145);           // S^WS | '#' | '(' | '(:' | 'loop'\n        break;\n      case 97:                      // 'comment'\n      case 249:                     // 'text'\n        lookahead2W(97);            // S^WS | '#' | '(:' | '{'\n        break;\n      case 111:                     // 'delete'\n      case 222:                     // 'rename'\n        lookahead2W(260);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 41:                      // '+'\n      case 43:                      // '-'\n      case 196:                     // 'not'\n        lookahead2W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 135:                     // 'false'\n      case 197:                     // 'null'\n      case 255:                     // 'true'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' |\n        break;\n      case 104:                     // 'copy'\n      case 130:                     // 'every'\n      case 240:                     // 'some'\n      case 268:                     // 'variable'\n        lookahead2W(143);           // S^WS | '#' | '$' | '(' | '(:'\n        break;\n      case 120:                     // 'document'\n      case 206:                     // 'ordered'\n      case 256:                     // 'try'\n      case 262:                     // 'unordered'\n        lookahead2W(148);           // S^WS | '#' | '(' | '(:' | '{'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 32:                      // '$$'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' | '//' |\n        break;\n      case 79:                      // 'array'\n      case 121:                     // 'document-node'\n      case 125:                     // 'empty-sequence'\n      case 167:                     // 'item'\n      case 169:                     // 'json-item'\n      case 188:                     // 'namespace-node'\n      case 194:                     // 'node'\n      case 230:                     // 'schema-attribute'\n      case 231:                     // 'schema-element'\n      case 247:                     // 'structured-item'\n        lookahead2W(20);            // S^WS | '#' | '(:'\n        break;\n      case 6:                       // EQName^Token\n      case 71:                      // 'after'\n      case 73:                      // 'allowing'\n      case 74:                      // 'ancestor'\n      case 75:                      // 'ancestor-or-self'\n      case 76:                      // 'and'\n      case 80:                      // 'as'\n      case 81:                      // 'ascending'\n      case 82:                      // 'at'\n      case 84:                      // 'base-uri'\n      case 85:                      // 'before'\n      case 86:                      // 'boundary-space'\n      case 89:                      // 'case'\n      case 90:                      // 'cast'\n      case 91:                      // 'castable'\n      case 92:                      // 'catch'\n      case 94:                      // 'child'\n      case 95:                      // 'collation'\n      case 98:                      // 'constraint'\n      case 99:                      // 'construction'\n      case 102:                     // 'context'\n      case 105:                     // 'copy-namespaces'\n      case 106:                     // 'count'\n      case 107:                     // 'decimal-format'\n      case 109:                     // 'declare'\n      case 110:                     // 'default'\n      case 112:                     // 'descendant'\n      case 113:                     // 'descendant-or-self'\n      case 114:                     // 'descending'\n      case 119:                     // 'div'\n      case 123:                     // 'else'\n      case 124:                     // 'empty'\n      case 126:                     // 'encoding'\n      case 127:                     // 'end'\n      case 129:                     // 'eq'\n      case 132:                     // 'except'\n      case 134:                     // 'external'\n      case 136:                     // 'first'\n      case 137:                     // 'following'\n      case 138:                     // 'following-sibling'\n      case 142:                     // 'from'\n      case 143:                     // 'ft-option'\n      case 147:                     // 'function'\n      case 148:                     // 'ge'\n      case 150:                     // 'group'\n      case 152:                     // 'gt'\n      case 153:                     // 'idiv'\n      case 154:                     // 'if'\n      case 155:                     // 'import'\n      case 156:                     // 'in'\n      case 157:                     // 'index'\n      case 162:                     // 'instance'\n      case 163:                     // 'integrity'\n      case 164:                     // 'intersect'\n      case 165:                     // 'into'\n      case 166:                     // 'is'\n      case 168:                     // 'json'\n      case 170:                     // 'jsoniq'\n      case 173:                     // 'last'\n      case 174:                     // 'lax'\n      case 175:                     // 'le'\n      case 179:                     // 'loop'\n      case 181:                     // 'lt'\n      case 183:                     // 'mod'\n      case 184:                     // 'modify'\n      case 185:                     // 'module'\n      case 189:                     // 'ne'\n      case 195:                     // 'nodes'\n      case 198:                     // 'object'\n      case 202:                     // 'only'\n      case 203:                     // 'option'\n      case 204:                     // 'or'\n      case 205:                     // 'order'\n      case 207:                     // 'ordering'\n      case 210:                     // 'parent'\n      case 216:                     // 'preceding'\n      case 217:                     // 'preceding-sibling'\n      case 224:                     // 'return'\n      case 225:                     // 'returning'\n      case 226:                     // 'revalidation'\n      case 228:                     // 'satisfies'\n      case 229:                     // 'schema'\n      case 232:                     // 'score'\n      case 233:                     // 'select'\n      case 234:                     // 'self'\n      case 239:                     // 'sliding'\n      case 241:                     // 'stable'\n      case 242:                     // 'start'\n      case 245:                     // 'strict'\n      case 248:                     // 'switch'\n      case 253:                     // 'to'\n      case 254:                     // 'treat'\n      case 257:                     // 'tumbling'\n      case 258:                     // 'type'\n      case 259:                     // 'typeswitch'\n      case 260:                     // 'union'\n      case 263:                     // 'updating'\n      case 267:                     // 'value'\n      case 269:                     // 'version'\n      case 272:                     // 'where'\n      case 273:                     // 'while'\n      case 276:                     // 'with'\n        lookahead2W(95);            // S^WS | '#' | '(' | '(:'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 54                  // ';'\n       && lk != 287                 // '}'\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12832               // '$$' EOF\n       && lk != 12847               // '/' EOF\n       && lk != 12935               // 'false' EOF\n       && lk != 12997               // 'null' EOF\n       && lk != 13055               // 'true' EOF\n       && lk != 16140               // 'variable' '$'\n       && lk != 21512               // IntegerLiteral ','\n       && lk != 21513               // DecimalLiteral ','\n       && lk != 21514               // DoubleLiteral ','\n       && lk != 21515               // StringLiteral ','\n       && lk != 21536               // '$$' ','\n       && lk != 21551               // '/' ','\n       && lk != 21639               // 'false' ','\n       && lk != 21701               // 'null' ','\n       && lk != 21759               // 'true' ','\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333              // 'exit' 'returning'\n       && lk != 146952              // IntegerLiteral '}'\n       && lk != 146953              // DecimalLiteral '}'\n       && lk != 146954              // DoubleLiteral '}'\n       && lk != 146955              // StringLiteral '}'\n       && lk != 146976              // '$$' '}'\n       && lk != 146991              // '/' '}'\n       && lk != 147079              // 'false' '}'\n       && lk != 147141              // 'null' '}'\n       && lk != 147199)             // 'true' '}'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            memoize(8, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(8, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 54                  // ';'\n       && lk != 16140               // 'variable' '$'\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333)             // 'exit' 'returning'\n      {\n        break;\n      }\n      try_Statement();\n    }\n  }\n\n  function parse_StatementsAndExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndExpr\", e0);\n    parse_Statements();\n    whitespace();\n    parse_Expr();\n    eventHandler.endNonterminal(\"StatementsAndExpr\", e0);\n  }\n\n  function try_StatementsAndExpr()\n  {\n    try_Statements();\n    try_Expr();\n  }\n\n  function parse_StatementsAndOptionalExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndOptionalExpr\", e0);\n    parse_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    eventHandler.endNonterminal(\"StatementsAndOptionalExpr\", e0);\n  }\n\n  function try_StatementsAndOptionalExpr()\n  {\n    try_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 287)                  // '}'\n    {\n      try_Expr();\n    }\n  }\n\n  function parse_Statement()\n  {\n    eventHandler.startNonterminal(\"Statement\", e0);\n    switch (l1)\n    {\n    case 133:                       // 'exit'\n      lookahead2W(147);             // S^WS | '#' | '(' | '(:' | 'returning'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 268:                       // 'variable'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 31:                        // '$'\n    case 33:                        // '%'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 87:                        // 'break'\n    case 103:                       // 'continue'\n      lookahead2W(145);             // S^WS | '#' | '(' | '(:' | 'loop'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 273:                       // 'while'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 6                     // EQName^Token\n     && lk != 8                     // IntegerLiteral\n     && lk != 9                     // DecimalLiteral\n     && lk != 10                    // DoubleLiteral\n     && lk != 11                    // StringLiteral\n     && lk != 32                    // '$$'\n     && lk != 35                    // '('\n     && lk != 36                    // '(#'\n     && lk != 41                    // '+'\n     && lk != 43                    // '-'\n     && lk != 47                    // '/'\n     && lk != 48                    // '//'\n     && lk != 54                    // ';'\n     && lk != 55                    // '<'\n     && lk != 56                    // '<!--'\n     && lk != 60                    // '<?'\n     && lk != 69                    // '['\n     && lk != 71                    // 'after'\n     && lk != 73                    // 'allowing'\n     && lk != 74                    // 'ancestor'\n     && lk != 75                    // 'ancestor-or-self'\n     && lk != 76                    // 'and'\n     && lk != 78                    // 'append'\n     && lk != 79                    // 'array'\n     && lk != 80                    // 'as'\n     && lk != 81                    // 'ascending'\n     && lk != 82                    // 'at'\n     && lk != 83                    // 'attribute'\n     && lk != 84                    // 'base-uri'\n     && lk != 85                    // 'before'\n     && lk != 86                    // 'boundary-space'\n     && lk != 89                    // 'case'\n     && lk != 90                    // 'cast'\n     && lk != 91                    // 'castable'\n     && lk != 92                    // 'catch'\n     && lk != 94                    // 'child'\n     && lk != 95                    // 'collation'\n     && lk != 97                    // 'comment'\n     && lk != 98                    // 'constraint'\n     && lk != 99                    // 'construction'\n     && lk != 102                   // 'context'\n     && lk != 104                   // 'copy'\n     && lk != 105                   // 'copy-namespaces'\n     && lk != 106                   // 'count'\n     && lk != 107                   // 'decimal-format'\n     && lk != 109                   // 'declare'\n     && lk != 110                   // 'default'\n     && lk != 111                   // 'delete'\n     && lk != 112                   // 'descendant'\n     && lk != 113                   // 'descendant-or-self'\n     && lk != 114                   // 'descending'\n     && lk != 119                   // 'div'\n     && lk != 120                   // 'document'\n     && lk != 121                   // 'document-node'\n     && lk != 122                   // 'element'\n     && lk != 123                   // 'else'\n     && lk != 124                   // 'empty'\n     && lk != 125                   // 'empty-sequence'\n     && lk != 126                   // 'encoding'\n     && lk != 127                   // 'end'\n     && lk != 129                   // 'eq'\n     && lk != 130                   // 'every'\n     && lk != 132                   // 'except'\n     && lk != 134                   // 'external'\n     && lk != 135                   // 'false'\n     && lk != 136                   // 'first'\n     && lk != 137                   // 'following'\n     && lk != 138                   // 'following-sibling'\n     && lk != 142                   // 'from'\n     && lk != 143                   // 'ft-option'\n     && lk != 147                   // 'function'\n     && lk != 148                   // 'ge'\n     && lk != 150                   // 'group'\n     && lk != 152                   // 'gt'\n     && lk != 153                   // 'idiv'\n     && lk != 155                   // 'import'\n     && lk != 156                   // 'in'\n     && lk != 157                   // 'index'\n     && lk != 161                   // 'insert'\n     && lk != 162                   // 'instance'\n     && lk != 163                   // 'integrity'\n     && lk != 164                   // 'intersect'\n     && lk != 165                   // 'into'\n     && lk != 166                   // 'is'\n     && lk != 167                   // 'item'\n     && lk != 168                   // 'json'\n     && lk != 169                   // 'json-item'\n     && lk != 170                   // 'jsoniq'\n     && lk != 173                   // 'last'\n     && lk != 174                   // 'lax'\n     && lk != 175                   // 'le'\n     && lk != 179                   // 'loop'\n     && lk != 181                   // 'lt'\n     && lk != 183                   // 'mod'\n     && lk != 184                   // 'modify'\n     && lk != 185                   // 'module'\n     && lk != 187                   // 'namespace'\n     && lk != 188                   // 'namespace-node'\n     && lk != 189                   // 'ne'\n     && lk != 194                   // 'node'\n     && lk != 195                   // 'nodes'\n     && lk != 196                   // 'not'\n     && lk != 197                   // 'null'\n     && lk != 198                   // 'object'\n     && lk != 202                   // 'only'\n     && lk != 203                   // 'option'\n     && lk != 204                   // 'or'\n     && lk != 205                   // 'order'\n     && lk != 206                   // 'ordered'\n     && lk != 207                   // 'ordering'\n     && lk != 210                   // 'parent'\n     && lk != 216                   // 'preceding'\n     && lk != 217                   // 'preceding-sibling'\n     && lk != 220                   // 'processing-instruction'\n     && lk != 222                   // 'rename'\n     && lk != 223                   // 'replace'\n     && lk != 224                   // 'return'\n     && lk != 225                   // 'returning'\n     && lk != 226                   // 'revalidation'\n     && lk != 228                   // 'satisfies'\n     && lk != 229                   // 'schema'\n     && lk != 230                   // 'schema-attribute'\n     && lk != 231                   // 'schema-element'\n     && lk != 232                   // 'score'\n     && lk != 233                   // 'select'\n     && lk != 234                   // 'self'\n     && lk != 239                   // 'sliding'\n     && lk != 240                   // 'some'\n     && lk != 241                   // 'stable'\n     && lk != 242                   // 'start'\n     && lk != 245                   // 'strict'\n     && lk != 247                   // 'structured-item'\n     && lk != 249                   // 'text'\n     && lk != 253                   // 'to'\n     && lk != 254                   // 'treat'\n     && lk != 255                   // 'true'\n     && lk != 257                   // 'tumbling'\n     && lk != 258                   // 'type'\n     && lk != 260                   // 'union'\n     && lk != 262                   // 'unordered'\n     && lk != 263                   // 'updating'\n     && lk != 266                   // 'validate'\n     && lk != 267                   // 'value'\n     && lk != 269                   // 'version'\n     && lk != 272                   // 'where'\n     && lk != 276                   // 'with'\n     && lk != 283                   // '{|'\n     && lk != 10009                 // '{' NCName^Token\n     && lk != 14935                 // 'break' '#'\n     && lk != 14951                 // 'continue' '#'\n     && lk != 14981                 // 'exit' '#'\n     && lk != 14987                 // 'for' '#'\n     && lk != 15002                 // 'if' '#'\n     && lk != 15025                 // 'let' '#'\n     && lk != 15096                 // 'switch' '#'\n     && lk != 15104                 // 'try' '#'\n     && lk != 15107                 // 'typeswitch' '#'\n     && lk != 15116                 // 'variable' '#'\n     && lk != 15121                 // 'while' '#'\n     && lk != 16011                 // 'for' '$'\n     && lk != 16049                 // 'let' '$'\n     && lk != 16140                 // 'variable' '$'\n     && lk != 18007                 // 'break' '('\n     && lk != 18023                 // 'continue' '('\n     && lk != 18053                 // 'exit' '('\n     && lk != 18059                 // 'for' '('\n     && lk != 18074                 // 'if' '('\n     && lk != 18097                 // 'let' '('\n     && lk != 18168                 // 'switch' '('\n     && lk != 18176                 // 'try' '('\n     && lk != 18179                 // 'typeswitch' '('\n     && lk != 18188                 // 'variable' '('\n     && lk != 91735                 // 'break' 'loop'\n     && lk != 91751                 // 'continue' 'loop'\n     && lk != 115333                // 'exit' 'returning'\n     && lk != 118961                // 'let' 'score'\n     && lk != 122507                // 'for' 'sliding'\n     && lk != 131723                // 'for' 'tumbling'\n     && lk != 144128                // 'try' '{'\n     && lk != 147225)               // '{' '}'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            lk = -2;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              lk = -3;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                lk = -12;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(9, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      parse_AssignStatement();\n      break;\n    case -3:\n      parse_BlockStatement();\n      break;\n    case 91735:                     // 'break' 'loop'\n      parse_BreakStatement();\n      break;\n    case 91751:                     // 'continue' 'loop'\n      parse_ContinueStatement();\n      break;\n    case 115333:                    // 'exit' 'returning'\n      parse_ExitStatement();\n      break;\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      parse_FLWORStatement();\n      break;\n    case 18074:                     // 'if' '('\n      parse_IfStatement();\n      break;\n    case 18168:                     // 'switch' '('\n      parse_SwitchStatement();\n      break;\n    case 144128:                    // 'try' '{'\n      parse_TryCatchStatement();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      parse_TypeswitchStatement();\n      break;\n    case -12:\n    case 16140:                     // 'variable' '$'\n      parse_VarDeclStatement();\n      break;\n    case -13:\n      parse_WhileStatement();\n      break;\n    case 54:                        // ';'\n      parse_VoidStatement();\n      break;\n    default:\n      parse_ApplyStatement();\n    }\n    eventHandler.endNonterminal(\"Statement\", e0);\n  }\n\n  function try_Statement()\n  {\n    switch (l1)\n    {\n    case 133:                       // 'exit'\n      lookahead2W(147);             // S^WS | '#' | '(' | '(:' | 'returning'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 268:                       // 'variable'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 31:                        // '$'\n    case 33:                        // '%'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 87:                        // 'break'\n    case 103:                       // 'continue'\n      lookahead2W(145);             // S^WS | '#' | '(' | '(:' | 'loop'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 273:                       // 'while'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 6                     // EQName^Token\n     && lk != 8                     // IntegerLiteral\n     && lk != 9                     // DecimalLiteral\n     && lk != 10                    // DoubleLiteral\n     && lk != 11                    // StringLiteral\n     && lk != 32                    // '$$'\n     && lk != 35                    // '('\n     && lk != 36                    // '(#'\n     && lk != 41                    // '+'\n     && lk != 43                    // '-'\n     && lk != 47                    // '/'\n     && lk != 48                    // '//'\n     && lk != 54                    // ';'\n     && lk != 55                    // '<'\n     && lk != 56                    // '<!--'\n     && lk != 60                    // '<?'\n     && lk != 69                    // '['\n     && lk != 71                    // 'after'\n     && lk != 73                    // 'allowing'\n     && lk != 74                    // 'ancestor'\n     && lk != 75                    // 'ancestor-or-self'\n     && lk != 76                    // 'and'\n     && lk != 78                    // 'append'\n     && lk != 79                    // 'array'\n     && lk != 80                    // 'as'\n     && lk != 81                    // 'ascending'\n     && lk != 82                    // 'at'\n     && lk != 83                    // 'attribute'\n     && lk != 84                    // 'base-uri'\n     && lk != 85                    // 'before'\n     && lk != 86                    // 'boundary-space'\n     && lk != 89                    // 'case'\n     && lk != 90                    // 'cast'\n     && lk != 91                    // 'castable'\n     && lk != 92                    // 'catch'\n     && lk != 94                    // 'child'\n     && lk != 95                    // 'collation'\n     && lk != 97                    // 'comment'\n     && lk != 98                    // 'constraint'\n     && lk != 99                    // 'construction'\n     && lk != 102                   // 'context'\n     && lk != 104                   // 'copy'\n     && lk != 105                   // 'copy-namespaces'\n     && lk != 106                   // 'count'\n     && lk != 107                   // 'decimal-format'\n     && lk != 109                   // 'declare'\n     && lk != 110                   // 'default'\n     && lk != 111                   // 'delete'\n     && lk != 112                   // 'descendant'\n     && lk != 113                   // 'descendant-or-self'\n     && lk != 114                   // 'descending'\n     && lk != 119                   // 'div'\n     && lk != 120                   // 'document'\n     && lk != 121                   // 'document-node'\n     && lk != 122                   // 'element'\n     && lk != 123                   // 'else'\n     && lk != 124                   // 'empty'\n     && lk != 125                   // 'empty-sequence'\n     && lk != 126                   // 'encoding'\n     && lk != 127                   // 'end'\n     && lk != 129                   // 'eq'\n     && lk != 130                   // 'every'\n     && lk != 132                   // 'except'\n     && lk != 134                   // 'external'\n     && lk != 135                   // 'false'\n     && lk != 136                   // 'first'\n     && lk != 137                   // 'following'\n     && lk != 138                   // 'following-sibling'\n     && lk != 142                   // 'from'\n     && lk != 143                   // 'ft-option'\n     && lk != 147                   // 'function'\n     && lk != 148                   // 'ge'\n     && lk != 150                   // 'group'\n     && lk != 152                   // 'gt'\n     && lk != 153                   // 'idiv'\n     && lk != 155                   // 'import'\n     && lk != 156                   // 'in'\n     && lk != 157                   // 'index'\n     && lk != 161                   // 'insert'\n     && lk != 162                   // 'instance'\n     && lk != 163                   // 'integrity'\n     && lk != 164                   // 'intersect'\n     && lk != 165                   // 'into'\n     && lk != 166                   // 'is'\n     && lk != 167                   // 'item'\n     && lk != 168                   // 'json'\n     && lk != 169                   // 'json-item'\n     && lk != 170                   // 'jsoniq'\n     && lk != 173                   // 'last'\n     && lk != 174                   // 'lax'\n     && lk != 175                   // 'le'\n     && lk != 179                   // 'loop'\n     && lk != 181                   // 'lt'\n     && lk != 183                   // 'mod'\n     && lk != 184                   // 'modify'\n     && lk != 185                   // 'module'\n     && lk != 187                   // 'namespace'\n     && lk != 188                   // 'namespace-node'\n     && lk != 189                   // 'ne'\n     && lk != 194                   // 'node'\n     && lk != 195                   // 'nodes'\n     && lk != 196                   // 'not'\n     && lk != 197                   // 'null'\n     && lk != 198                   // 'object'\n     && lk != 202                   // 'only'\n     && lk != 203                   // 'option'\n     && lk != 204                   // 'or'\n     && lk != 205                   // 'order'\n     && lk != 206                   // 'ordered'\n     && lk != 207                   // 'ordering'\n     && lk != 210                   // 'parent'\n     && lk != 216                   // 'preceding'\n     && lk != 217                   // 'preceding-sibling'\n     && lk != 220                   // 'processing-instruction'\n     && lk != 222                   // 'rename'\n     && lk != 223                   // 'replace'\n     && lk != 224                   // 'return'\n     && lk != 225                   // 'returning'\n     && lk != 226                   // 'revalidation'\n     && lk != 228                   // 'satisfies'\n     && lk != 229                   // 'schema'\n     && lk != 230                   // 'schema-attribute'\n     && lk != 231                   // 'schema-element'\n     && lk != 232                   // 'score'\n     && lk != 233                   // 'select'\n     && lk != 234                   // 'self'\n     && lk != 239                   // 'sliding'\n     && lk != 240                   // 'some'\n     && lk != 241                   // 'stable'\n     && lk != 242                   // 'start'\n     && lk != 245                   // 'strict'\n     && lk != 247                   // 'structured-item'\n     && lk != 249                   // 'text'\n     && lk != 253                   // 'to'\n     && lk != 254                   // 'treat'\n     && lk != 255                   // 'true'\n     && lk != 257                   // 'tumbling'\n     && lk != 258                   // 'type'\n     && lk != 260                   // 'union'\n     && lk != 262                   // 'unordered'\n     && lk != 263                   // 'updating'\n     && lk != 266                   // 'validate'\n     && lk != 267                   // 'value'\n     && lk != 269                   // 'version'\n     && lk != 272                   // 'where'\n     && lk != 276                   // 'with'\n     && lk != 283                   // '{|'\n     && lk != 10009                 // '{' NCName^Token\n     && lk != 14935                 // 'break' '#'\n     && lk != 14951                 // 'continue' '#'\n     && lk != 14981                 // 'exit' '#'\n     && lk != 14987                 // 'for' '#'\n     && lk != 15002                 // 'if' '#'\n     && lk != 15025                 // 'let' '#'\n     && lk != 15096                 // 'switch' '#'\n     && lk != 15104                 // 'try' '#'\n     && lk != 15107                 // 'typeswitch' '#'\n     && lk != 15116                 // 'variable' '#'\n     && lk != 15121                 // 'while' '#'\n     && lk != 16011                 // 'for' '$'\n     && lk != 16049                 // 'let' '$'\n     && lk != 16140                 // 'variable' '$'\n     && lk != 18007                 // 'break' '('\n     && lk != 18023                 // 'continue' '('\n     && lk != 18053                 // 'exit' '('\n     && lk != 18059                 // 'for' '('\n     && lk != 18074                 // 'if' '('\n     && lk != 18097                 // 'let' '('\n     && lk != 18168                 // 'switch' '('\n     && lk != 18176                 // 'try' '('\n     && lk != 18179                 // 'typeswitch' '('\n     && lk != 18188                 // 'variable' '('\n     && lk != 91735                 // 'break' 'loop'\n     && lk != 91751                 // 'continue' 'loop'\n     && lk != 115333                // 'exit' 'returning'\n     && lk != 118961                // 'let' 'score'\n     && lk != 122507                // 'for' 'sliding'\n     && lk != 131723                // 'for' 'tumbling'\n     && lk != 144128                // 'try' '{'\n     && lk != 147225)               // '{' '}'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          memoize(9, e0A, -1);\n          lk = -15;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            memoize(9, e0A, -2);\n            lk = -15;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              memoize(9, e0A, -3);\n              lk = -15;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                memoize(9, e0A, -12);\n                lk = -15;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                memoize(9, e0A, -13);\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      try_AssignStatement();\n      break;\n    case -3:\n      try_BlockStatement();\n      break;\n    case 91735:                     // 'break' 'loop'\n      try_BreakStatement();\n      break;\n    case 91751:                     // 'continue' 'loop'\n      try_ContinueStatement();\n      break;\n    case 115333:                    // 'exit' 'returning'\n      try_ExitStatement();\n      break;\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      try_FLWORStatement();\n      break;\n    case 18074:                     // 'if' '('\n      try_IfStatement();\n      break;\n    case 18168:                     // 'switch' '('\n      try_SwitchStatement();\n      break;\n    case 144128:                    // 'try' '{'\n      try_TryCatchStatement();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      try_TypeswitchStatement();\n      break;\n    case -12:\n    case 16140:                     // 'variable' '$'\n      try_VarDeclStatement();\n      break;\n    case -13:\n      try_WhileStatement();\n      break;\n    case 54:                        // ';'\n      try_VoidStatement();\n      break;\n    case -15:\n      break;\n    default:\n      try_ApplyStatement();\n    }\n  }\n\n  function parse_ApplyStatement()\n  {\n    eventHandler.startNonterminal(\"ApplyStatement\", e0);\n    parse_ExprSimple();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ApplyStatement\", e0);\n  }\n\n  function try_ApplyStatement()\n  {\n    try_ExprSimple();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_AssignStatement()\n  {\n    eventHandler.startNonterminal(\"AssignStatement\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"AssignStatement\", e0);\n  }\n\n  function try_AssignStatement()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_BlockStatement()\n  {\n    eventHandler.startNonterminal(\"BlockStatement\", e0);\n    shift(281);                     // '{'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statements();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"BlockStatement\", e0);\n  }\n\n  function try_BlockStatement()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statements();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_BreakStatement()\n  {\n    eventHandler.startNonterminal(\"BreakStatement\", e0);\n    shift(87);                      // 'break'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shift(179);                     // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"BreakStatement\", e0);\n  }\n\n  function try_BreakStatement()\n  {\n    shiftT(87);                     // 'break'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shiftT(179);                    // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ContinueStatement()\n  {\n    eventHandler.startNonterminal(\"ContinueStatement\", e0);\n    shift(103);                     // 'continue'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shift(179);                     // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ContinueStatement\", e0);\n  }\n\n  function try_ContinueStatement()\n  {\n    shiftT(103);                    // 'continue'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shiftT(179);                    // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ExitStatement()\n  {\n    eventHandler.startNonterminal(\"ExitStatement\", e0);\n    shift(133);                     // 'exit'\n    lookahead1W(74);                // S^WS | '(:' | 'returning'\n    shift(225);                     // 'returning'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ExitStatement\", e0);\n  }\n\n  function try_ExitStatement()\n  {\n    shiftT(133);                    // 'exit'\n    lookahead1W(74);                // S^WS | '(:' | 'returning'\n    shiftT(225);                    // 'returning'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_FLWORStatement()\n  {\n    eventHandler.startNonterminal(\"FLWORStatement\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnStatement();\n    eventHandler.endNonterminal(\"FLWORStatement\", e0);\n  }\n\n  function try_FLWORStatement()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnStatement();\n  }\n\n  function parse_ReturnStatement()\n  {\n    eventHandler.startNonterminal(\"ReturnStatement\", e0);\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"ReturnStatement\", e0);\n  }\n\n  function try_ReturnStatement()\n  {\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_IfStatement()\n  {\n    eventHandler.startNonterminal(\"IfStatement\", e0);\n    shift(154);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shift(250);                     // 'then'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    lookahead1W(51);                // S^WS | '(:' | 'else'\n    shift(123);                     // 'else'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"IfStatement\", e0);\n  }\n\n  function try_IfStatement()\n  {\n    shiftT(154);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shiftT(250);                    // 'then'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n    lookahead1W(51);                // S^WS | '(:' | 'else'\n    shiftT(123);                    // 'else'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchStatement\", e0);\n    shift(248);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchStatement\", e0);\n  }\n\n  function try_SwitchStatement()\n  {\n    shiftT(248);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_SwitchCaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchCaseStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseStatement\", e0);\n    for (;;)\n    {\n      shift(89);                    // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchCaseStatement\", e0);\n  }\n\n  function try_SwitchCaseStatement()\n  {\n    for (;;)\n    {\n      shiftT(89);                   // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_TryCatchStatement()\n  {\n    eventHandler.startNonterminal(\"TryCatchStatement\", e0);\n    shift(256);                     // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      shift(92);                    // 'catch'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CatchErrorList();\n      whitespace();\n      parse_BlockStatement();\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 92:                      // 'catch'\n        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 2652                // 'catch' Wildcard\n       && lk != 3164                // 'catch' EQName^Token\n       && lk != 36444               // 'catch' 'after'\n       && lk != 37468               // 'catch' 'allowing'\n       && lk != 37980               // 'catch' 'ancestor'\n       && lk != 38492               // 'catch' 'ancestor-or-self'\n       && lk != 39004               // 'catch' 'and'\n       && lk != 40028               // 'catch' 'append'\n       && lk != 40540               // 'catch' 'array'\n       && lk != 41052               // 'catch' 'as'\n       && lk != 41564               // 'catch' 'ascending'\n       && lk != 42076               // 'catch' 'at'\n       && lk != 42588               // 'catch' 'attribute'\n       && lk != 43100               // 'catch' 'base-uri'\n       && lk != 43612               // 'catch' 'before'\n       && lk != 44124               // 'catch' 'boundary-space'\n       && lk != 44636               // 'catch' 'break'\n       && lk != 45660               // 'catch' 'case'\n       && lk != 46172               // 'catch' 'cast'\n       && lk != 46684               // 'catch' 'castable'\n       && lk != 47196               // 'catch' 'catch'\n       && lk != 48220               // 'catch' 'child'\n       && lk != 48732               // 'catch' 'collation'\n       && lk != 49756               // 'catch' 'comment'\n       && lk != 50268               // 'catch' 'constraint'\n       && lk != 50780               // 'catch' 'construction'\n       && lk != 52316               // 'catch' 'context'\n       && lk != 52828               // 'catch' 'continue'\n       && lk != 53340               // 'catch' 'copy'\n       && lk != 53852               // 'catch' 'copy-namespaces'\n       && lk != 54364               // 'catch' 'count'\n       && lk != 54876               // 'catch' 'decimal-format'\n       && lk != 55900               // 'catch' 'declare'\n       && lk != 56412               // 'catch' 'default'\n       && lk != 56924               // 'catch' 'delete'\n       && lk != 57436               // 'catch' 'descendant'\n       && lk != 57948               // 'catch' 'descendant-or-self'\n       && lk != 58460               // 'catch' 'descending'\n       && lk != 61020               // 'catch' 'div'\n       && lk != 61532               // 'catch' 'document'\n       && lk != 62044               // 'catch' 'document-node'\n       && lk != 62556               // 'catch' 'element'\n       && lk != 63068               // 'catch' 'else'\n       && lk != 63580               // 'catch' 'empty'\n       && lk != 64092               // 'catch' 'empty-sequence'\n       && lk != 64604               // 'catch' 'encoding'\n       && lk != 65116               // 'catch' 'end'\n       && lk != 66140               // 'catch' 'eq'\n       && lk != 66652               // 'catch' 'every'\n       && lk != 67676               // 'catch' 'except'\n       && lk != 68188               // 'catch' 'exit'\n       && lk != 68700               // 'catch' 'external'\n       && lk != 69212               // 'catch' 'false'\n       && lk != 69724               // 'catch' 'first'\n       && lk != 70236               // 'catch' 'following'\n       && lk != 70748               // 'catch' 'following-sibling'\n       && lk != 71260               // 'catch' 'for'\n       && lk != 72796               // 'catch' 'from'\n       && lk != 73308               // 'catch' 'ft-option'\n       && lk != 75356               // 'catch' 'function'\n       && lk != 75868               // 'catch' 'ge'\n       && lk != 76892               // 'catch' 'group'\n       && lk != 77916               // 'catch' 'gt'\n       && lk != 78428               // 'catch' 'idiv'\n       && lk != 78940               // 'catch' 'if'\n       && lk != 79452               // 'catch' 'import'\n       && lk != 79964               // 'catch' 'in'\n       && lk != 80476               // 'catch' 'index'\n       && lk != 82524               // 'catch' 'insert'\n       && lk != 83036               // 'catch' 'instance'\n       && lk != 83548               // 'catch' 'integrity'\n       && lk != 84060               // 'catch' 'intersect'\n       && lk != 84572               // 'catch' 'into'\n       && lk != 85084               // 'catch' 'is'\n       && lk != 85596               // 'catch' 'item'\n       && lk != 86108               // 'catch' 'json'\n       && lk != 86620               // 'catch' 'json-item'\n       && lk != 87132               // 'catch' 'jsoniq'\n       && lk != 88668               // 'catch' 'last'\n       && lk != 89180               // 'catch' 'lax'\n       && lk != 89692               // 'catch' 'le'\n       && lk != 90716               // 'catch' 'let'\n       && lk != 91740               // 'catch' 'loop'\n       && lk != 92764               // 'catch' 'lt'\n       && lk != 93788               // 'catch' 'mod'\n       && lk != 94300               // 'catch' 'modify'\n       && lk != 94812               // 'catch' 'module'\n       && lk != 95836               // 'catch' 'namespace'\n       && lk != 96348               // 'catch' 'namespace-node'\n       && lk != 96860               // 'catch' 'ne'\n       && lk != 99420               // 'catch' 'node'\n       && lk != 99932               // 'catch' 'nodes'\n       && lk != 100956              // 'catch' 'null'\n       && lk != 101468              // 'catch' 'object'\n       && lk != 103516              // 'catch' 'only'\n       && lk != 104028              // 'catch' 'option'\n       && lk != 104540              // 'catch' 'or'\n       && lk != 105052              // 'catch' 'order'\n       && lk != 105564              // 'catch' 'ordered'\n       && lk != 106076              // 'catch' 'ordering'\n       && lk != 107612              // 'catch' 'parent'\n       && lk != 110684              // 'catch' 'preceding'\n       && lk != 111196              // 'catch' 'preceding-sibling'\n       && lk != 112732              // 'catch' 'processing-instruction'\n       && lk != 113756              // 'catch' 'rename'\n       && lk != 114268              // 'catch' 'replace'\n       && lk != 114780              // 'catch' 'return'\n       && lk != 115292              // 'catch' 'returning'\n       && lk != 115804              // 'catch' 'revalidation'\n       && lk != 116828              // 'catch' 'satisfies'\n       && lk != 117340              // 'catch' 'schema'\n       && lk != 117852              // 'catch' 'schema-attribute'\n       && lk != 118364              // 'catch' 'schema-element'\n       && lk != 118876              // 'catch' 'score'\n       && lk != 119388              // 'catch' 'select'\n       && lk != 119900              // 'catch' 'self'\n       && lk != 122460              // 'catch' 'sliding'\n       && lk != 122972              // 'catch' 'some'\n       && lk != 123484              // 'catch' 'stable'\n       && lk != 123996              // 'catch' 'start'\n       && lk != 125532              // 'catch' 'strict'\n       && lk != 126556              // 'catch' 'structured-item'\n       && lk != 127068              // 'catch' 'switch'\n       && lk != 127580              // 'catch' 'text'\n       && lk != 129628              // 'catch' 'to'\n       && lk != 130140              // 'catch' 'treat'\n       && lk != 130652              // 'catch' 'true'\n       && lk != 131164              // 'catch' 'try'\n       && lk != 131676              // 'catch' 'tumbling'\n       && lk != 132188              // 'catch' 'type'\n       && lk != 132700              // 'catch' 'typeswitch'\n       && lk != 133212              // 'catch' 'union'\n       && lk != 134236              // 'catch' 'unordered'\n       && lk != 134748              // 'catch' 'updating'\n       && lk != 136284              // 'catch' 'validate'\n       && lk != 136796              // 'catch' 'value'\n       && lk != 137308              // 'catch' 'variable'\n       && lk != 137820              // 'catch' 'version'\n       && lk != 139356              // 'catch' 'where'\n       && lk != 139868              // 'catch' 'while'\n       && lk != 141404)             // 'catch' 'with'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchStatement\", e0);\n  }\n\n  function try_TryCatchStatement()\n  {\n    shiftT(256);                    // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      shiftT(92);                   // 'catch'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CatchErrorList();\n      try_BlockStatement();\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 92:                      // 'catch'\n        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 2652                // 'catch' Wildcard\n       && lk != 3164                // 'catch' EQName^Token\n       && lk != 36444               // 'catch' 'after'\n       && lk != 37468               // 'catch' 'allowing'\n       && lk != 37980               // 'catch' 'ancestor'\n       && lk != 38492               // 'catch' 'ancestor-or-self'\n       && lk != 39004               // 'catch' 'and'\n       && lk != 40028               // 'catch' 'append'\n       && lk != 40540               // 'catch' 'array'\n       && lk != 41052               // 'catch' 'as'\n       && lk != 41564               // 'catch' 'ascending'\n       && lk != 42076               // 'catch' 'at'\n       && lk != 42588               // 'catch' 'attribute'\n       && lk != 43100               // 'catch' 'base-uri'\n       && lk != 43612               // 'catch' 'before'\n       && lk != 44124               // 'catch' 'boundary-space'\n       && lk != 44636               // 'catch' 'break'\n       && lk != 45660               // 'catch' 'case'\n       && lk != 46172               // 'catch' 'cast'\n       && lk != 46684               // 'catch' 'castable'\n       && lk != 47196               // 'catch' 'catch'\n       && lk != 48220               // 'catch' 'child'\n       && lk != 48732               // 'catch' 'collation'\n       && lk != 49756               // 'catch' 'comment'\n       && lk != 50268               // 'catch' 'constraint'\n       && lk != 50780               // 'catch' 'construction'\n       && lk != 52316               // 'catch' 'context'\n       && lk != 52828               // 'catch' 'continue'\n       && lk != 53340               // 'catch' 'copy'\n       && lk != 53852               // 'catch' 'copy-namespaces'\n       && lk != 54364               // 'catch' 'count'\n       && lk != 54876               // 'catch' 'decimal-format'\n       && lk != 55900               // 'catch' 'declare'\n       && lk != 56412               // 'catch' 'default'\n       && lk != 56924               // 'catch' 'delete'\n       && lk != 57436               // 'catch' 'descendant'\n       && lk != 57948               // 'catch' 'descendant-or-self'\n       && lk != 58460               // 'catch' 'descending'\n       && lk != 61020               // 'catch' 'div'\n       && lk != 61532               // 'catch' 'document'\n       && lk != 62044               // 'catch' 'document-node'\n       && lk != 62556               // 'catch' 'element'\n       && lk != 63068               // 'catch' 'else'\n       && lk != 63580               // 'catch' 'empty'\n       && lk != 64092               // 'catch' 'empty-sequence'\n       && lk != 64604               // 'catch' 'encoding'\n       && lk != 65116               // 'catch' 'end'\n       && lk != 66140               // 'catch' 'eq'\n       && lk != 66652               // 'catch' 'every'\n       && lk != 67676               // 'catch' 'except'\n       && lk != 68188               // 'catch' 'exit'\n       && lk != 68700               // 'catch' 'external'\n       && lk != 69212               // 'catch' 'false'\n       && lk != 69724               // 'catch' 'first'\n       && lk != 70236               // 'catch' 'following'\n       && lk != 70748               // 'catch' 'following-sibling'\n       && lk != 71260               // 'catch' 'for'\n       && lk != 72796               // 'catch' 'from'\n       && lk != 73308               // 'catch' 'ft-option'\n       && lk != 75356               // 'catch' 'function'\n       && lk != 75868               // 'catch' 'ge'\n       && lk != 76892               // 'catch' 'group'\n       && lk != 77916               // 'catch' 'gt'\n       && lk != 78428               // 'catch' 'idiv'\n       && lk != 78940               // 'catch' 'if'\n       && lk != 79452               // 'catch' 'import'\n       && lk != 79964               // 'catch' 'in'\n       && lk != 80476               // 'catch' 'index'\n       && lk != 82524               // 'catch' 'insert'\n       && lk != 83036               // 'catch' 'instance'\n       && lk != 83548               // 'catch' 'integrity'\n       && lk != 84060               // 'catch' 'intersect'\n       && lk != 84572               // 'catch' 'into'\n       && lk != 85084               // 'catch' 'is'\n       && lk != 85596               // 'catch' 'item'\n       && lk != 86108               // 'catch' 'json'\n       && lk != 86620               // 'catch' 'json-item'\n       && lk != 87132               // 'catch' 'jsoniq'\n       && lk != 88668               // 'catch' 'last'\n       && lk != 89180               // 'catch' 'lax'\n       && lk != 89692               // 'catch' 'le'\n       && lk != 90716               // 'catch' 'let'\n       && lk != 91740               // 'catch' 'loop'\n       && lk != 92764               // 'catch' 'lt'\n       && lk != 93788               // 'catch' 'mod'\n       && lk != 94300               // 'catch' 'modify'\n       && lk != 94812               // 'catch' 'module'\n       && lk != 95836               // 'catch' 'namespace'\n       && lk != 96348               // 'catch' 'namespace-node'\n       && lk != 96860               // 'catch' 'ne'\n       && lk != 99420               // 'catch' 'node'\n       && lk != 99932               // 'catch' 'nodes'\n       && lk != 100956              // 'catch' 'null'\n       && lk != 101468              // 'catch' 'object'\n       && lk != 103516              // 'catch' 'only'\n       && lk != 104028              // 'catch' 'option'\n       && lk != 104540              // 'catch' 'or'\n       && lk != 105052              // 'catch' 'order'\n       && lk != 105564              // 'catch' 'ordered'\n       && lk != 106076              // 'catch' 'ordering'\n       && lk != 107612              // 'catch' 'parent'\n       && lk != 110684              // 'catch' 'preceding'\n       && lk != 111196              // 'catch' 'preceding-sibling'\n       && lk != 112732              // 'catch' 'processing-instruction'\n       && lk != 113756              // 'catch' 'rename'\n       && lk != 114268              // 'catch' 'replace'\n       && lk != 114780              // 'catch' 'return'\n       && lk != 115292              // 'catch' 'returning'\n       && lk != 115804              // 'catch' 'revalidation'\n       && lk != 116828              // 'catch' 'satisfies'\n       && lk != 117340              // 'catch' 'schema'\n       && lk != 117852              // 'catch' 'schema-attribute'\n       && lk != 118364              // 'catch' 'schema-element'\n       && lk != 118876              // 'catch' 'score'\n       && lk != 119388              // 'catch' 'select'\n       && lk != 119900              // 'catch' 'self'\n       && lk != 122460              // 'catch' 'sliding'\n       && lk != 122972              // 'catch' 'some'\n       && lk != 123484              // 'catch' 'stable'\n       && lk != 123996              // 'catch' 'start'\n       && lk != 125532              // 'catch' 'strict'\n       && lk != 126556              // 'catch' 'structured-item'\n       && lk != 127068              // 'catch' 'switch'\n       && lk != 127580              // 'catch' 'text'\n       && lk != 129628              // 'catch' 'to'\n       && lk != 130140              // 'catch' 'treat'\n       && lk != 130652              // 'catch' 'true'\n       && lk != 131164              // 'catch' 'try'\n       && lk != 131676              // 'catch' 'tumbling'\n       && lk != 132188              // 'catch' 'type'\n       && lk != 132700              // 'catch' 'typeswitch'\n       && lk != 133212              // 'catch' 'union'\n       && lk != 134236              // 'catch' 'unordered'\n       && lk != 134748              // 'catch' 'updating'\n       && lk != 136284              // 'catch' 'validate'\n       && lk != 136796              // 'catch' 'value'\n       && lk != 137308              // 'catch' 'variable'\n       && lk != 137820              // 'catch' 'version'\n       && lk != 139356              // 'catch' 'where'\n       && lk != 139868              // 'catch' 'while'\n       && lk != 141404)             // 'catch' 'with'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TypeswitchStatement()\n  {\n    eventHandler.startNonterminal(\"TypeswitchStatement\", e0);\n    shift(259);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"TypeswitchStatement\", e0);\n  }\n\n  function try_TypeswitchStatement()\n  {\n    shiftT(259);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_CaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_CaseStatement()\n  {\n    eventHandler.startNonterminal(\"CaseStatement\", e0);\n    shift(89);                      // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"CaseStatement\", e0);\n  }\n\n  function try_CaseStatement()\n  {\n    shiftT(89);                     // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_VarDeclStatement()\n  {\n    eventHandler.startNonterminal(\"VarDeclStatement\", e0);\n    for (;;)\n    {\n      lookahead1W(102);             // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(268);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(172);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(155);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 53)                   // ':='\n    {\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(172);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      lookahead1W(155);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n    }\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"VarDeclStatement\", e0);\n  }\n\n  function try_VarDeclStatement()\n  {\n    for (;;)\n    {\n      lookahead1W(102);             // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(268);                    // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(172);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(155);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 53)                   // ':='\n    {\n      shiftT(53);                   // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(172);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      lookahead1W(155);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shiftT(53);                 // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_ExprSingle();\n      }\n    }\n    shiftT(54);                     // ';'\n  }\n\n  function parse_WhileStatement()\n  {\n    eventHandler.startNonterminal(\"WhileStatement\", e0);\n    shift(273);                     // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"WhileStatement\", e0);\n  }\n\n  function try_WhileStatement()\n  {\n    shiftT(273);                    // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_VoidStatement()\n  {\n    eventHandler.startNonterminal(\"VoidStatement\", e0);\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"VoidStatement\", e0);\n  }\n\n  function try_VoidStatement()\n  {\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ExprSingle()\n  {\n    eventHandler.startNonterminal(\"ExprSingle\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      parse_FLWORExpr();\n      break;\n    case 18074:                     // 'if' '('\n      parse_IfExpr();\n      break;\n    case 18168:                     // 'switch' '('\n      parse_SwitchExpr();\n      break;\n    case 144128:                    // 'try' '{'\n      parse_TryCatchExpr();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      parse_TypeswitchExpr();\n      break;\n    default:\n      parse_ExprSimple();\n    }\n    eventHandler.endNonterminal(\"ExprSingle\", e0);\n  }\n\n  function try_ExprSingle()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      try_FLWORExpr();\n      break;\n    case 18074:                     // 'if' '('\n      try_IfExpr();\n      break;\n    case 18168:                     // 'switch' '('\n      try_SwitchExpr();\n      break;\n    case 144128:                    // 'try' '{'\n      try_TryCatchExpr();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      try_TypeswitchExpr();\n      break;\n    default:\n      try_ExprSimple();\n    }\n  }\n\n  function parse_ExprSimple()\n  {\n    eventHandler.startNonterminal(\"ExprSimple\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(275);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(170);             // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 17998                 // 'append' '('\n     || lk == 18031                 // 'delete' '('\n     || lk == 18081                 // 'insert' '('\n     || lk == 18142                 // 'rename' '('\n     || lk == 99439                 // 'delete' 'node'\n     || lk == 99489                 // 'insert' 'node'\n     || lk == 99550                 // 'rename' 'node'\n     || lk == 99951                 // 'delete' 'nodes'\n     || lk == 100001                // 'insert' 'nodes'\n     || lk == 136927)               // 'replace' 'value'\n    {\n      lk = memoized(10, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_OrExpr();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_InsertExpr();\n            lk = -3;\n          }\n          catch (p3A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_DeleteExpr();\n              lk = -4;\n            }\n            catch (p4A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_RenameExpr();\n                lk = -5;\n              }\n              catch (p5A)\n              {\n                try\n                {\n                  b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                  b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                  b2 = b2A; e2 = e2A; end = e2A; }}\n                  try_ReplaceExpr();\n                  lk = -6;\n                }\n                catch (p6A)\n                {\n                  try\n                  {\n                    b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                    b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                    b2 = b2A; e2 = e2A; end = e2A; }}\n                    try_JSONDeleteExpr();\n                    lk = -8;\n                  }\n                  catch (p8A)\n                  {\n                    try\n                    {\n                      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                      b2 = b2A; e2 = e2A; end = e2A; }}\n                      try_JSONInsertExpr();\n                      lk = -9;\n                    }\n                    catch (p9A)\n                    {\n                      try\n                      {\n                        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                        b2 = b2A; e2 = e2A; end = e2A; }}\n                        try_JSONRenameExpr();\n                        lk = -10;\n                      }\n                      catch (p10A)\n                      {\n                        try\n                        {\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          try_JSONReplaceExpr();\n                          lk = -11;\n                        }\n                        catch (p11A)\n                        {\n                          lk = -12;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(10, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 16002:                     // 'every' '$'\n    case 16112:                     // 'some' '$'\n      parse_QuantifiedExpr();\n      break;\n    case -3:\n      parse_InsertExpr();\n      break;\n    case -4:\n      parse_DeleteExpr();\n      break;\n    case -5:\n      parse_RenameExpr();\n      break;\n    case -6:\n    case 99551:                     // 'replace' 'node'\n      parse_ReplaceExpr();\n      break;\n    case 15976:                     // 'copy' '$'\n      parse_TransformExpr();\n      break;\n    case -8:\n    case 3183:                      // 'delete' EQName^Token\n    case 4207:                      // 'delete' IntegerLiteral\n    case 4719:                      // 'delete' DecimalLiteral\n    case 5231:                      // 'delete' DoubleLiteral\n    case 5743:                      // 'delete' StringLiteral\n    case 15983:                     // 'delete' '$'\n    case 16495:                     // 'delete' '$$'\n    case 17007:                     // 'delete' '%'\n    case 28271:                     // 'delete' '<'\n    case 28783:                     // 'delete' '<!--'\n    case 30831:                     // 'delete' '<?'\n    case 35439:                     // 'delete' '['\n    case 36463:                     // 'delete' 'after'\n    case 37487:                     // 'delete' 'allowing'\n    case 37999:                     // 'delete' 'ancestor'\n    case 38511:                     // 'delete' 'ancestor-or-self'\n    case 39023:                     // 'delete' 'and'\n    case 40047:                     // 'delete' 'append'\n    case 40559:                     // 'delete' 'array'\n    case 41071:                     // 'delete' 'as'\n    case 41583:                     // 'delete' 'ascending'\n    case 42095:                     // 'delete' 'at'\n    case 42607:                     // 'delete' 'attribute'\n    case 43119:                     // 'delete' 'base-uri'\n    case 43631:                     // 'delete' 'before'\n    case 44143:                     // 'delete' 'boundary-space'\n    case 44655:                     // 'delete' 'break'\n    case 45679:                     // 'delete' 'case'\n    case 46191:                     // 'delete' 'cast'\n    case 46703:                     // 'delete' 'castable'\n    case 47215:                     // 'delete' 'catch'\n    case 48239:                     // 'delete' 'child'\n    case 48751:                     // 'delete' 'collation'\n    case 49775:                     // 'delete' 'comment'\n    case 50287:                     // 'delete' 'constraint'\n    case 50799:                     // 'delete' 'construction'\n    case 52335:                     // 'delete' 'context'\n    case 52847:                     // 'delete' 'continue'\n    case 53359:                     // 'delete' 'copy'\n    case 53871:                     // 'delete' 'copy-namespaces'\n    case 54383:                     // 'delete' 'count'\n    case 54895:                     // 'delete' 'decimal-format'\n    case 55919:                     // 'delete' 'declare'\n    case 56431:                     // 'delete' 'default'\n    case 56943:                     // 'delete' 'delete'\n    case 57455:                     // 'delete' 'descendant'\n    case 57967:                     // 'delete' 'descendant-or-self'\n    case 58479:                     // 'delete' 'descending'\n    case 61039:                     // 'delete' 'div'\n    case 61551:                     // 'delete' 'document'\n    case 62063:                     // 'delete' 'document-node'\n    case 62575:                     // 'delete' 'element'\n    case 63087:                     // 'delete' 'else'\n    case 63599:                     // 'delete' 'empty'\n    case 64111:                     // 'delete' 'empty-sequence'\n    case 64623:                     // 'delete' 'encoding'\n    case 65135:                     // 'delete' 'end'\n    case 66159:                     // 'delete' 'eq'\n    case 66671:                     // 'delete' 'every'\n    case 67695:                     // 'delete' 'except'\n    case 68207:                     // 'delete' 'exit'\n    case 68719:                     // 'delete' 'external'\n    case 69231:                     // 'delete' 'false'\n    case 69743:                     // 'delete' 'first'\n    case 70255:                     // 'delete' 'following'\n    case 70767:                     // 'delete' 'following-sibling'\n    case 71279:                     // 'delete' 'for'\n    case 72815:                     // 'delete' 'from'\n    case 73327:                     // 'delete' 'ft-option'\n    case 75375:                     // 'delete' 'function'\n    case 75887:                     // 'delete' 'ge'\n    case 76911:                     // 'delete' 'group'\n    case 77935:                     // 'delete' 'gt'\n    case 78447:                     // 'delete' 'idiv'\n    case 78959:                     // 'delete' 'if'\n    case 79471:                     // 'delete' 'import'\n    case 79983:                     // 'delete' 'in'\n    case 80495:                     // 'delete' 'index'\n    case 82543:                     // 'delete' 'insert'\n    case 83055:                     // 'delete' 'instance'\n    case 83567:                     // 'delete' 'integrity'\n    case 84079:                     // 'delete' 'intersect'\n    case 84591:                     // 'delete' 'into'\n    case 85103:                     // 'delete' 'is'\n    case 85615:                     // 'delete' 'item'\n    case 86127:                     // 'delete' 'json'\n    case 86639:                     // 'delete' 'json-item'\n    case 87151:                     // 'delete' 'jsoniq'\n    case 88687:                     // 'delete' 'last'\n    case 89199:                     // 'delete' 'lax'\n    case 89711:                     // 'delete' 'le'\n    case 90735:                     // 'delete' 'let'\n    case 91759:                     // 'delete' 'loop'\n    case 92783:                     // 'delete' 'lt'\n    case 93807:                     // 'delete' 'mod'\n    case 94319:                     // 'delete' 'modify'\n    case 94831:                     // 'delete' 'module'\n    case 95855:                     // 'delete' 'namespace'\n    case 96367:                     // 'delete' 'namespace-node'\n    case 96879:                     // 'delete' 'ne'\n    case 100975:                    // 'delete' 'null'\n    case 101487:                    // 'delete' 'object'\n    case 103535:                    // 'delete' 'only'\n    case 104047:                    // 'delete' 'option'\n    case 104559:                    // 'delete' 'or'\n    case 105071:                    // 'delete' 'order'\n    case 105583:                    // 'delete' 'ordered'\n    case 106095:                    // 'delete' 'ordering'\n    case 107631:                    // 'delete' 'parent'\n    case 110703:                    // 'delete' 'preceding'\n    case 111215:                    // 'delete' 'preceding-sibling'\n    case 112751:                    // 'delete' 'processing-instruction'\n    case 113775:                    // 'delete' 'rename'\n    case 114287:                    // 'delete' 'replace'\n    case 114799:                    // 'delete' 'return'\n    case 115311:                    // 'delete' 'returning'\n    case 115823:                    // 'delete' 'revalidation'\n    case 116847:                    // 'delete' 'satisfies'\n    case 117359:                    // 'delete' 'schema'\n    case 117871:                    // 'delete' 'schema-attribute'\n    case 118383:                    // 'delete' 'schema-element'\n    case 118895:                    // 'delete' 'score'\n    case 119407:                    // 'delete' 'select'\n    case 119919:                    // 'delete' 'self'\n    case 122479:                    // 'delete' 'sliding'\n    case 122991:                    // 'delete' 'some'\n    case 123503:                    // 'delete' 'stable'\n    case 124015:                    // 'delete' 'start'\n    case 125551:                    // 'delete' 'strict'\n    case 126575:                    // 'delete' 'structured-item'\n    case 127087:                    // 'delete' 'switch'\n    case 127599:                    // 'delete' 'text'\n    case 129647:                    // 'delete' 'to'\n    case 130159:                    // 'delete' 'treat'\n    case 130671:                    // 'delete' 'true'\n    case 131183:                    // 'delete' 'try'\n    case 131695:                    // 'delete' 'tumbling'\n    case 132207:                    // 'delete' 'type'\n    case 132719:                    // 'delete' 'typeswitch'\n    case 133231:                    // 'delete' 'union'\n    case 134255:                    // 'delete' 'unordered'\n    case 134767:                    // 'delete' 'updating'\n    case 136303:                    // 'delete' 'validate'\n    case 136815:                    // 'delete' 'value'\n    case 137327:                    // 'delete' 'variable'\n    case 137839:                    // 'delete' 'version'\n    case 139375:                    // 'delete' 'where'\n    case 139887:                    // 'delete' 'while'\n    case 141423:                    // 'delete' 'with'\n    case 143983:                    // 'delete' '{'\n    case 145007:                    // 'delete' '{|'\n      parse_JSONDeleteExpr();\n      break;\n    case -9:\n    case 3233:                      // 'insert' EQName^Token\n    case 4257:                      // 'insert' IntegerLiteral\n    case 4769:                      // 'insert' DecimalLiteral\n    case 5281:                      // 'insert' DoubleLiteral\n    case 5793:                      // 'insert' StringLiteral\n    case 9889:                      // 'insert' NCName^Token\n    case 16033:                     // 'insert' '$'\n    case 16545:                     // 'insert' '$$'\n    case 17057:                     // 'insert' '%'\n    case 18593:                     // 'insert' '(#'\n    case 21153:                     // 'insert' '+'\n    case 22177:                     // 'insert' '-'\n    case 24225:                     // 'insert' '/'\n    case 24737:                     // 'insert' '//'\n    case 28321:                     // 'insert' '<'\n    case 28833:                     // 'insert' '<!--'\n    case 30881:                     // 'insert' '<?'\n    case 35489:                     // 'insert' '['\n    case 36513:                     // 'insert' 'after'\n    case 37537:                     // 'insert' 'allowing'\n    case 38049:                     // 'insert' 'ancestor'\n    case 38561:                     // 'insert' 'ancestor-or-self'\n    case 39073:                     // 'insert' 'and'\n    case 40097:                     // 'insert' 'append'\n    case 40609:                     // 'insert' 'array'\n    case 41121:                     // 'insert' 'as'\n    case 41633:                     // 'insert' 'ascending'\n    case 42145:                     // 'insert' 'at'\n    case 42657:                     // 'insert' 'attribute'\n    case 43169:                     // 'insert' 'base-uri'\n    case 43681:                     // 'insert' 'before'\n    case 44193:                     // 'insert' 'boundary-space'\n    case 44705:                     // 'insert' 'break'\n    case 45729:                     // 'insert' 'case'\n    case 46241:                     // 'insert' 'cast'\n    case 46753:                     // 'insert' 'castable'\n    case 47265:                     // 'insert' 'catch'\n    case 48289:                     // 'insert' 'child'\n    case 48801:                     // 'insert' 'collation'\n    case 49825:                     // 'insert' 'comment'\n    case 50337:                     // 'insert' 'constraint'\n    case 50849:                     // 'insert' 'construction'\n    case 52385:                     // 'insert' 'context'\n    case 52897:                     // 'insert' 'continue'\n    case 53409:                     // 'insert' 'copy'\n    case 53921:                     // 'insert' 'copy-namespaces'\n    case 54433:                     // 'insert' 'count'\n    case 54945:                     // 'insert' 'decimal-format'\n    case 55969:                     // 'insert' 'declare'\n    case 56481:                     // 'insert' 'default'\n    case 56993:                     // 'insert' 'delete'\n    case 57505:                     // 'insert' 'descendant'\n    case 58017:                     // 'insert' 'descendant-or-self'\n    case 58529:                     // 'insert' 'descending'\n    case 61089:                     // 'insert' 'div'\n    case 61601:                     // 'insert' 'document'\n    case 62113:                     // 'insert' 'document-node'\n    case 62625:                     // 'insert' 'element'\n    case 63137:                     // 'insert' 'else'\n    case 63649:                     // 'insert' 'empty'\n    case 64161:                     // 'insert' 'empty-sequence'\n    case 64673:                     // 'insert' 'encoding'\n    case 65185:                     // 'insert' 'end'\n    case 66209:                     // 'insert' 'eq'\n    case 66721:                     // 'insert' 'every'\n    case 67745:                     // 'insert' 'except'\n    case 68257:                     // 'insert' 'exit'\n    case 68769:                     // 'insert' 'external'\n    case 69281:                     // 'insert' 'false'\n    case 69793:                     // 'insert' 'first'\n    case 70305:                     // 'insert' 'following'\n    case 70817:                     // 'insert' 'following-sibling'\n    case 71329:                     // 'insert' 'for'\n    case 72865:                     // 'insert' 'from'\n    case 73377:                     // 'insert' 'ft-option'\n    case 75425:                     // 'insert' 'function'\n    case 75937:                     // 'insert' 'ge'\n    case 76961:                     // 'insert' 'group'\n    case 77985:                     // 'insert' 'gt'\n    case 78497:                     // 'insert' 'idiv'\n    case 79009:                     // 'insert' 'if'\n    case 79521:                     // 'insert' 'import'\n    case 80033:                     // 'insert' 'in'\n    case 80545:                     // 'insert' 'index'\n    case 82593:                     // 'insert' 'insert'\n    case 83105:                     // 'insert' 'instance'\n    case 83617:                     // 'insert' 'integrity'\n    case 84129:                     // 'insert' 'intersect'\n    case 84641:                     // 'insert' 'into'\n    case 85153:                     // 'insert' 'is'\n    case 85665:                     // 'insert' 'item'\n    case 86177:                     // 'insert' 'json'\n    case 86689:                     // 'insert' 'json-item'\n    case 87201:                     // 'insert' 'jsoniq'\n    case 88737:                     // 'insert' 'last'\n    case 89249:                     // 'insert' 'lax'\n    case 89761:                     // 'insert' 'le'\n    case 90785:                     // 'insert' 'let'\n    case 91809:                     // 'insert' 'loop'\n    case 92833:                     // 'insert' 'lt'\n    case 93857:                     // 'insert' 'mod'\n    case 94369:                     // 'insert' 'modify'\n    case 94881:                     // 'insert' 'module'\n    case 95905:                     // 'insert' 'namespace'\n    case 96417:                     // 'insert' 'namespace-node'\n    case 96929:                     // 'insert' 'ne'\n    case 100513:                    // 'insert' 'not'\n    case 101025:                    // 'insert' 'null'\n    case 101537:                    // 'insert' 'object'\n    case 103585:                    // 'insert' 'only'\n    case 104097:                    // 'insert' 'option'\n    case 104609:                    // 'insert' 'or'\n    case 105121:                    // 'insert' 'order'\n    case 105633:                    // 'insert' 'ordered'\n    case 106145:                    // 'insert' 'ordering'\n    case 107681:                    // 'insert' 'parent'\n    case 110753:                    // 'insert' 'preceding'\n    case 111265:                    // 'insert' 'preceding-sibling'\n    case 112801:                    // 'insert' 'processing-instruction'\n    case 113825:                    // 'insert' 'rename'\n    case 114337:                    // 'insert' 'replace'\n    case 114849:                    // 'insert' 'return'\n    case 115361:                    // 'insert' 'returning'\n    case 115873:                    // 'insert' 'revalidation'\n    case 116897:                    // 'insert' 'satisfies'\n    case 117409:                    // 'insert' 'schema'\n    case 117921:                    // 'insert' 'schema-attribute'\n    case 118433:                    // 'insert' 'schema-element'\n    case 118945:                    // 'insert' 'score'\n    case 119457:                    // 'insert' 'select'\n    case 119969:                    // 'insert' 'self'\n    case 122529:                    // 'insert' 'sliding'\n    case 123041:                    // 'insert' 'some'\n    case 123553:                    // 'insert' 'stable'\n    case 124065:                    // 'insert' 'start'\n    case 125601:                    // 'insert' 'strict'\n    case 126625:                    // 'insert' 'structured-item'\n    case 127137:                    // 'insert' 'switch'\n    case 127649:                    // 'insert' 'text'\n    case 129697:                    // 'insert' 'to'\n    case 130209:                    // 'insert' 'treat'\n    case 130721:                    // 'insert' 'true'\n    case 131233:                    // 'insert' 'try'\n    case 131745:                    // 'insert' 'tumbling'\n    case 132257:                    // 'insert' 'type'\n    case 132769:                    // 'insert' 'typeswitch'\n    case 133281:                    // 'insert' 'union'\n    case 134305:                    // 'insert' 'unordered'\n    case 134817:                    // 'insert' 'updating'\n    case 136353:                    // 'insert' 'validate'\n    case 136865:                    // 'insert' 'value'\n    case 137377:                    // 'insert' 'variable'\n    case 137889:                    // 'insert' 'version'\n    case 139425:                    // 'insert' 'where'\n    case 139937:                    // 'insert' 'while'\n    case 141473:                    // 'insert' 'with'\n    case 144033:                    // 'insert' '{'\n    case 145057:                    // 'insert' '{|'\n      parse_JSONInsertExpr();\n      break;\n    case -10:\n    case 3294:                      // 'rename' EQName^Token\n    case 4318:                      // 'rename' IntegerLiteral\n    case 4830:                      // 'rename' DecimalLiteral\n    case 5342:                      // 'rename' DoubleLiteral\n    case 5854:                      // 'rename' StringLiteral\n    case 16094:                     // 'rename' '$'\n    case 16606:                     // 'rename' '$$'\n    case 17118:                     // 'rename' '%'\n    case 28382:                     // 'rename' '<'\n    case 28894:                     // 'rename' '<!--'\n    case 30942:                     // 'rename' '<?'\n    case 35550:                     // 'rename' '['\n    case 36574:                     // 'rename' 'after'\n    case 37598:                     // 'rename' 'allowing'\n    case 38110:                     // 'rename' 'ancestor'\n    case 38622:                     // 'rename' 'ancestor-or-self'\n    case 39134:                     // 'rename' 'and'\n    case 40158:                     // 'rename' 'append'\n    case 40670:                     // 'rename' 'array'\n    case 41182:                     // 'rename' 'as'\n    case 41694:                     // 'rename' 'ascending'\n    case 42206:                     // 'rename' 'at'\n    case 42718:                     // 'rename' 'attribute'\n    case 43230:                     // 'rename' 'base-uri'\n    case 43742:                     // 'rename' 'before'\n    case 44254:                     // 'rename' 'boundary-space'\n    case 44766:                     // 'rename' 'break'\n    case 45790:                     // 'rename' 'case'\n    case 46302:                     // 'rename' 'cast'\n    case 46814:                     // 'rename' 'castable'\n    case 47326:                     // 'rename' 'catch'\n    case 48350:                     // 'rename' 'child'\n    case 48862:                     // 'rename' 'collation'\n    case 49886:                     // 'rename' 'comment'\n    case 50398:                     // 'rename' 'constraint'\n    case 50910:                     // 'rename' 'construction'\n    case 52446:                     // 'rename' 'context'\n    case 52958:                     // 'rename' 'continue'\n    case 53470:                     // 'rename' 'copy'\n    case 53982:                     // 'rename' 'copy-namespaces'\n    case 54494:                     // 'rename' 'count'\n    case 55006:                     // 'rename' 'decimal-format'\n    case 56030:                     // 'rename' 'declare'\n    case 56542:                     // 'rename' 'default'\n    case 57054:                     // 'rename' 'delete'\n    case 57566:                     // 'rename' 'descendant'\n    case 58078:                     // 'rename' 'descendant-or-self'\n    case 58590:                     // 'rename' 'descending'\n    case 61150:                     // 'rename' 'div'\n    case 61662:                     // 'rename' 'document'\n    case 62174:                     // 'rename' 'document-node'\n    case 62686:                     // 'rename' 'element'\n    case 63198:                     // 'rename' 'else'\n    case 63710:                     // 'rename' 'empty'\n    case 64222:                     // 'rename' 'empty-sequence'\n    case 64734:                     // 'rename' 'encoding'\n    case 65246:                     // 'rename' 'end'\n    case 66270:                     // 'rename' 'eq'\n    case 66782:                     // 'rename' 'every'\n    case 67806:                     // 'rename' 'except'\n    case 68318:                     // 'rename' 'exit'\n    case 68830:                     // 'rename' 'external'\n    case 69342:                     // 'rename' 'false'\n    case 69854:                     // 'rename' 'first'\n    case 70366:                     // 'rename' 'following'\n    case 70878:                     // 'rename' 'following-sibling'\n    case 71390:                     // 'rename' 'for'\n    case 72926:                     // 'rename' 'from'\n    case 73438:                     // 'rename' 'ft-option'\n    case 75486:                     // 'rename' 'function'\n    case 75998:                     // 'rename' 'ge'\n    case 77022:                     // 'rename' 'group'\n    case 78046:                     // 'rename' 'gt'\n    case 78558:                     // 'rename' 'idiv'\n    case 79070:                     // 'rename' 'if'\n    case 79582:                     // 'rename' 'import'\n    case 80094:                     // 'rename' 'in'\n    case 80606:                     // 'rename' 'index'\n    case 82654:                     // 'rename' 'insert'\n    case 83166:                     // 'rename' 'instance'\n    case 83678:                     // 'rename' 'integrity'\n    case 84190:                     // 'rename' 'intersect'\n    case 84702:                     // 'rename' 'into'\n    case 85214:                     // 'rename' 'is'\n    case 85726:                     // 'rename' 'item'\n    case 86238:                     // 'rename' 'json'\n    case 86750:                     // 'rename' 'json-item'\n    case 87262:                     // 'rename' 'jsoniq'\n    case 88798:                     // 'rename' 'last'\n    case 89310:                     // 'rename' 'lax'\n    case 89822:                     // 'rename' 'le'\n    case 90846:                     // 'rename' 'let'\n    case 91870:                     // 'rename' 'loop'\n    case 92894:                     // 'rename' 'lt'\n    case 93918:                     // 'rename' 'mod'\n    case 94430:                     // 'rename' 'modify'\n    case 94942:                     // 'rename' 'module'\n    case 95966:                     // 'rename' 'namespace'\n    case 96478:                     // 'rename' 'namespace-node'\n    case 96990:                     // 'rename' 'ne'\n    case 100062:                    // 'rename' 'nodes'\n    case 101086:                    // 'rename' 'null'\n    case 101598:                    // 'rename' 'object'\n    case 103646:                    // 'rename' 'only'\n    case 104158:                    // 'rename' 'option'\n    case 104670:                    // 'rename' 'or'\n    case 105182:                    // 'rename' 'order'\n    case 105694:                    // 'rename' 'ordered'\n    case 106206:                    // 'rename' 'ordering'\n    case 107742:                    // 'rename' 'parent'\n    case 110814:                    // 'rename' 'preceding'\n    case 111326:                    // 'rename' 'preceding-sibling'\n    case 112862:                    // 'rename' 'processing-instruction'\n    case 113886:                    // 'rename' 'rename'\n    case 114398:                    // 'rename' 'replace'\n    case 114910:                    // 'rename' 'return'\n    case 115422:                    // 'rename' 'returning'\n    case 115934:                    // 'rename' 'revalidation'\n    case 116958:                    // 'rename' 'satisfies'\n    case 117470:                    // 'rename' 'schema'\n    case 117982:                    // 'rename' 'schema-attribute'\n    case 118494:                    // 'rename' 'schema-element'\n    case 119006:                    // 'rename' 'score'\n    case 119518:                    // 'rename' 'select'\n    case 120030:                    // 'rename' 'self'\n    case 122590:                    // 'rename' 'sliding'\n    case 123102:                    // 'rename' 'some'\n    case 123614:                    // 'rename' 'stable'\n    case 124126:                    // 'rename' 'start'\n    case 125662:                    // 'rename' 'strict'\n    case 126686:                    // 'rename' 'structured-item'\n    case 127198:                    // 'rename' 'switch'\n    case 127710:                    // 'rename' 'text'\n    case 129758:                    // 'rename' 'to'\n    case 130270:                    // 'rename' 'treat'\n    case 130782:                    // 'rename' 'true'\n    case 131294:                    // 'rename' 'try'\n    case 131806:                    // 'rename' 'tumbling'\n    case 132318:                    // 'rename' 'type'\n    case 132830:                    // 'rename' 'typeswitch'\n    case 133342:                    // 'rename' 'union'\n    case 134366:                    // 'rename' 'unordered'\n    case 134878:                    // 'rename' 'updating'\n    case 136414:                    // 'rename' 'validate'\n    case 136926:                    // 'rename' 'value'\n    case 137438:                    // 'rename' 'variable'\n    case 137950:                    // 'rename' 'version'\n    case 139486:                    // 'rename' 'where'\n    case 139998:                    // 'rename' 'while'\n    case 141534:                    // 'rename' 'with'\n    case 144094:                    // 'rename' '{'\n    case 145118:                    // 'rename' '{|'\n      parse_JSONRenameExpr();\n      break;\n    case -11:\n      parse_JSONReplaceExpr();\n      break;\n    case -12:\n    case 3150:                      // 'append' EQName^Token\n    case 4174:                      // 'append' IntegerLiteral\n    case 4686:                      // 'append' DecimalLiteral\n    case 5198:                      // 'append' DoubleLiteral\n    case 5710:                      // 'append' StringLiteral\n    case 15950:                     // 'append' '$'\n    case 16462:                     // 'append' '$$'\n    case 16974:                     // 'append' '%'\n    case 18510:                     // 'append' '(#'\n    case 21070:                     // 'append' '+'\n    case 22094:                     // 'append' '-'\n    case 24142:                     // 'append' '/'\n    case 24654:                     // 'append' '//'\n    case 28238:                     // 'append' '<'\n    case 28750:                     // 'append' '<!--'\n    case 30798:                     // 'append' '<?'\n    case 35406:                     // 'append' '['\n    case 36430:                     // 'append' 'after'\n    case 37454:                     // 'append' 'allowing'\n    case 37966:                     // 'append' 'ancestor'\n    case 38478:                     // 'append' 'ancestor-or-self'\n    case 38990:                     // 'append' 'and'\n    case 40014:                     // 'append' 'append'\n    case 40526:                     // 'append' 'array'\n    case 41038:                     // 'append' 'as'\n    case 41550:                     // 'append' 'ascending'\n    case 42062:                     // 'append' 'at'\n    case 42574:                     // 'append' 'attribute'\n    case 43086:                     // 'append' 'base-uri'\n    case 43598:                     // 'append' 'before'\n    case 44110:                     // 'append' 'boundary-space'\n    case 44622:                     // 'append' 'break'\n    case 45646:                     // 'append' 'case'\n    case 46158:                     // 'append' 'cast'\n    case 46670:                     // 'append' 'castable'\n    case 47182:                     // 'append' 'catch'\n    case 48206:                     // 'append' 'child'\n    case 48718:                     // 'append' 'collation'\n    case 49742:                     // 'append' 'comment'\n    case 50254:                     // 'append' 'constraint'\n    case 50766:                     // 'append' 'construction'\n    case 52302:                     // 'append' 'context'\n    case 52814:                     // 'append' 'continue'\n    case 53326:                     // 'append' 'copy'\n    case 53838:                     // 'append' 'copy-namespaces'\n    case 54350:                     // 'append' 'count'\n    case 54862:                     // 'append' 'decimal-format'\n    case 55886:                     // 'append' 'declare'\n    case 56398:                     // 'append' 'default'\n    case 56910:                     // 'append' 'delete'\n    case 57422:                     // 'append' 'descendant'\n    case 57934:                     // 'append' 'descendant-or-self'\n    case 58446:                     // 'append' 'descending'\n    case 61006:                     // 'append' 'div'\n    case 61518:                     // 'append' 'document'\n    case 62030:                     // 'append' 'document-node'\n    case 62542:                     // 'append' 'element'\n    case 63054:                     // 'append' 'else'\n    case 63566:                     // 'append' 'empty'\n    case 64078:                     // 'append' 'empty-sequence'\n    case 64590:                     // 'append' 'encoding'\n    case 65102:                     // 'append' 'end'\n    case 66126:                     // 'append' 'eq'\n    case 66638:                     // 'append' 'every'\n    case 67662:                     // 'append' 'except'\n    case 68174:                     // 'append' 'exit'\n    case 68686:                     // 'append' 'external'\n    case 69198:                     // 'append' 'false'\n    case 69710:                     // 'append' 'first'\n    case 70222:                     // 'append' 'following'\n    case 70734:                     // 'append' 'following-sibling'\n    case 71246:                     // 'append' 'for'\n    case 72782:                     // 'append' 'from'\n    case 73294:                     // 'append' 'ft-option'\n    case 75342:                     // 'append' 'function'\n    case 75854:                     // 'append' 'ge'\n    case 76878:                     // 'append' 'group'\n    case 77902:                     // 'append' 'gt'\n    case 78414:                     // 'append' 'idiv'\n    case 78926:                     // 'append' 'if'\n    case 79438:                     // 'append' 'import'\n    case 79950:                     // 'append' 'in'\n    case 80462:                     // 'append' 'index'\n    case 82510:                     // 'append' 'insert'\n    case 83022:                     // 'append' 'instance'\n    case 83534:                     // 'append' 'integrity'\n    case 84046:                     // 'append' 'intersect'\n    case 84558:                     // 'append' 'into'\n    case 85070:                     // 'append' 'is'\n    case 85582:                     // 'append' 'item'\n    case 86094:                     // 'append' 'json'\n    case 86606:                     // 'append' 'json-item'\n    case 87118:                     // 'append' 'jsoniq'\n    case 88654:                     // 'append' 'last'\n    case 89166:                     // 'append' 'lax'\n    case 89678:                     // 'append' 'le'\n    case 90702:                     // 'append' 'let'\n    case 91726:                     // 'append' 'loop'\n    case 92750:                     // 'append' 'lt'\n    case 93774:                     // 'append' 'mod'\n    case 94286:                     // 'append' 'modify'\n    case 94798:                     // 'append' 'module'\n    case 95822:                     // 'append' 'namespace'\n    case 96334:                     // 'append' 'namespace-node'\n    case 96846:                     // 'append' 'ne'\n    case 99406:                     // 'append' 'node'\n    case 99918:                     // 'append' 'nodes'\n    case 100430:                    // 'append' 'not'\n    case 100942:                    // 'append' 'null'\n    case 101454:                    // 'append' 'object'\n    case 103502:                    // 'append' 'only'\n    case 104014:                    // 'append' 'option'\n    case 104526:                    // 'append' 'or'\n    case 105038:                    // 'append' 'order'\n    case 105550:                    // 'append' 'ordered'\n    case 106062:                    // 'append' 'ordering'\n    case 107598:                    // 'append' 'parent'\n    case 110670:                    // 'append' 'preceding'\n    case 111182:                    // 'append' 'preceding-sibling'\n    case 112718:                    // 'append' 'processing-instruction'\n    case 113742:                    // 'append' 'rename'\n    case 114254:                    // 'append' 'replace'\n    case 114766:                    // 'append' 'return'\n    case 115278:                    // 'append' 'returning'\n    case 115790:                    // 'append' 'revalidation'\n    case 116814:                    // 'append' 'satisfies'\n    case 117326:                    // 'append' 'schema'\n    case 117838:                    // 'append' 'schema-attribute'\n    case 118350:                    // 'append' 'schema-element'\n    case 118862:                    // 'append' 'score'\n    case 119374:                    // 'append' 'select'\n    case 119886:                    // 'append' 'self'\n    case 122446:                    // 'append' 'sliding'\n    case 122958:                    // 'append' 'some'\n    case 123470:                    // 'append' 'stable'\n    case 123982:                    // 'append' 'start'\n    case 125518:                    // 'append' 'strict'\n    case 126542:                    // 'append' 'structured-item'\n    case 127054:                    // 'append' 'switch'\n    case 127566:                    // 'append' 'text'\n    case 129614:                    // 'append' 'to'\n    case 130126:                    // 'append' 'treat'\n    case 130638:                    // 'append' 'true'\n    case 131150:                    // 'append' 'try'\n    case 131662:                    // 'append' 'tumbling'\n    case 132174:                    // 'append' 'type'\n    case 132686:                    // 'append' 'typeswitch'\n    case 133198:                    // 'append' 'union'\n    case 134222:                    // 'append' 'unordered'\n    case 134734:                    // 'append' 'updating'\n    case 136270:                    // 'append' 'validate'\n    case 136782:                    // 'append' 'value'\n    case 137294:                    // 'append' 'variable'\n    case 137806:                    // 'append' 'version'\n    case 139342:                    // 'append' 'where'\n    case 139854:                    // 'append' 'while'\n    case 141390:                    // 'append' 'with'\n    case 143950:                    // 'append' '{'\n    case 144974:                    // 'append' '{|'\n      parse_JSONAppendExpr();\n      break;\n    default:\n      parse_OrExpr();\n    }\n    eventHandler.endNonterminal(\"ExprSimple\", e0);\n  }\n\n  function try_ExprSimple()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(275);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(170);             // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 17998                 // 'append' '('\n     || lk == 18031                 // 'delete' '('\n     || lk == 18081                 // 'insert' '('\n     || lk == 18142                 // 'rename' '('\n     || lk == 99439                 // 'delete' 'node'\n     || lk == 99489                 // 'insert' 'node'\n     || lk == 99550                 // 'rename' 'node'\n     || lk == 99951                 // 'delete' 'nodes'\n     || lk == 100001                // 'insert' 'nodes'\n     || lk == 136927)               // 'replace' 'value'\n    {\n      lk = memoized(10, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_OrExpr();\n          memoize(10, e0A, -2);\n          lk = -13;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_InsertExpr();\n            memoize(10, e0A, -3);\n            lk = -13;\n          }\n          catch (p3A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_DeleteExpr();\n              memoize(10, e0A, -4);\n              lk = -13;\n            }\n            catch (p4A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_RenameExpr();\n                memoize(10, e0A, -5);\n                lk = -13;\n              }\n              catch (p5A)\n              {\n                try\n                {\n                  b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                  b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                  b2 = b2A; e2 = e2A; end = e2A; }}\n                  try_ReplaceExpr();\n                  memoize(10, e0A, -6);\n                  lk = -13;\n                }\n                catch (p6A)\n                {\n                  try\n                  {\n                    b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                    b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                    b2 = b2A; e2 = e2A; end = e2A; }}\n                    try_JSONDeleteExpr();\n                    memoize(10, e0A, -8);\n                    lk = -13;\n                  }\n                  catch (p8A)\n                  {\n                    try\n                    {\n                      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                      b2 = b2A; e2 = e2A; end = e2A; }}\n                      try_JSONInsertExpr();\n                      memoize(10, e0A, -9);\n                      lk = -13;\n                    }\n                    catch (p9A)\n                    {\n                      try\n                      {\n                        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                        b2 = b2A; e2 = e2A; end = e2A; }}\n                        try_JSONRenameExpr();\n                        memoize(10, e0A, -10);\n                        lk = -13;\n                      }\n                      catch (p10A)\n                      {\n                        try\n                        {\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          try_JSONReplaceExpr();\n                          memoize(10, e0A, -11);\n                          lk = -13;\n                        }\n                        catch (p11A)\n                        {\n                          lk = -12;\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          memoize(10, e0A, -12);\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 16002:                     // 'every' '$'\n    case 16112:                     // 'some' '$'\n      try_QuantifiedExpr();\n      break;\n    case -3:\n      try_InsertExpr();\n      break;\n    case -4:\n      try_DeleteExpr();\n      break;\n    case -5:\n      try_RenameExpr();\n      break;\n    case -6:\n    case 99551:                     // 'replace' 'node'\n      try_ReplaceExpr();\n      break;\n    case 15976:                     // 'copy' '$'\n      try_TransformExpr();\n      break;\n    case -8:\n    case 3183:                      // 'delete' EQName^Token\n    case 4207:                      // 'delete' IntegerLiteral\n    case 4719:                      // 'delete' DecimalLiteral\n    case 5231:                      // 'delete' DoubleLiteral\n    case 5743:                      // 'delete' StringLiteral\n    case 15983:                     // 'delete' '$'\n    case 16495:                     // 'delete' '$$'\n    case 17007:                     // 'delete' '%'\n    case 28271:                     // 'delete' '<'\n    case 28783:                     // 'delete' '<!--'\n    case 30831:                     // 'delete' '<?'\n    case 35439:                     // 'delete' '['\n    case 36463:                     // 'delete' 'after'\n    case 37487:                     // 'delete' 'allowing'\n    case 37999:                     // 'delete' 'ancestor'\n    case 38511:                     // 'delete' 'ancestor-or-self'\n    case 39023:                     // 'delete' 'and'\n    case 40047:                     // 'delete' 'append'\n    case 40559:                     // 'delete' 'array'\n    case 41071:                     // 'delete' 'as'\n    case 41583:                     // 'delete' 'ascending'\n    case 42095:                     // 'delete' 'at'\n    case 42607:                     // 'delete' 'attribute'\n    case 43119:                     // 'delete' 'base-uri'\n    case 43631:                     // 'delete' 'before'\n    case 44143:                     // 'delete' 'boundary-space'\n    case 44655:                     // 'delete' 'break'\n    case 45679:                     // 'delete' 'case'\n    case 46191:                     // 'delete' 'cast'\n    case 46703:                     // 'delete' 'castable'\n    case 47215:                     // 'delete' 'catch'\n    case 48239:                     // 'delete' 'child'\n    case 48751:                     // 'delete' 'collation'\n    case 49775:                     // 'delete' 'comment'\n    case 50287:                     // 'delete' 'constraint'\n    case 50799:                     // 'delete' 'construction'\n    case 52335:                     // 'delete' 'context'\n    case 52847:                     // 'delete' 'continue'\n    case 53359:                     // 'delete' 'copy'\n    case 53871:                     // 'delete' 'copy-namespaces'\n    case 54383:                     // 'delete' 'count'\n    case 54895:                     // 'delete' 'decimal-format'\n    case 55919:                     // 'delete' 'declare'\n    case 56431:                     // 'delete' 'default'\n    case 56943:                     // 'delete' 'delete'\n    case 57455:                     // 'delete' 'descendant'\n    case 57967:                     // 'delete' 'descendant-or-self'\n    case 58479:                     // 'delete' 'descending'\n    case 61039:                     // 'delete' 'div'\n    case 61551:                     // 'delete' 'document'\n    case 62063:                     // 'delete' 'document-node'\n    case 62575:                     // 'delete' 'element'\n    case 63087:                     // 'delete' 'else'\n    case 63599:                     // 'delete' 'empty'\n    case 64111:                     // 'delete' 'empty-sequence'\n    case 64623:                     // 'delete' 'encoding'\n    case 65135:                     // 'delete' 'end'\n    case 66159:                     // 'delete' 'eq'\n    case 66671:                     // 'delete' 'every'\n    case 67695:                     // 'delete' 'except'\n    case 68207:                     // 'delete' 'exit'\n    case 68719:                     // 'delete' 'external'\n    case 69231:                     // 'delete' 'false'\n    case 69743:                     // 'delete' 'first'\n    case 70255:                     // 'delete' 'following'\n    case 70767:                     // 'delete' 'following-sibling'\n    case 71279:                     // 'delete' 'for'\n    case 72815:                     // 'delete' 'from'\n    case 73327:                     // 'delete' 'ft-option'\n    case 75375:                     // 'delete' 'function'\n    case 75887:                     // 'delete' 'ge'\n    case 76911:                     // 'delete' 'group'\n    case 77935:                     // 'delete' 'gt'\n    case 78447:                     // 'delete' 'idiv'\n    case 78959:                     // 'delete' 'if'\n    case 79471:                     // 'delete' 'import'\n    case 79983:                     // 'delete' 'in'\n    case 80495:                     // 'delete' 'index'\n    case 82543:                     // 'delete' 'insert'\n    case 83055:                     // 'delete' 'instance'\n    case 83567:                     // 'delete' 'integrity'\n    case 84079:                     // 'delete' 'intersect'\n    case 84591:                     // 'delete' 'into'\n    case 85103:                     // 'delete' 'is'\n    case 85615:                     // 'delete' 'item'\n    case 86127:                     // 'delete' 'json'\n    case 86639:                     // 'delete' 'json-item'\n    case 87151:                     // 'delete' 'jsoniq'\n    case 88687:                     // 'delete' 'last'\n    case 89199:                     // 'delete' 'lax'\n    case 89711:                     // 'delete' 'le'\n    case 90735:                     // 'delete' 'let'\n    case 91759:                     // 'delete' 'loop'\n    case 92783:                     // 'delete' 'lt'\n    case 93807:                     // 'delete' 'mod'\n    case 94319:                     // 'delete' 'modify'\n    case 94831:                     // 'delete' 'module'\n    case 95855:                     // 'delete' 'namespace'\n    case 96367:                     // 'delete' 'namespace-node'\n    case 96879:                     // 'delete' 'ne'\n    case 100975:                    // 'delete' 'null'\n    case 101487:                    // 'delete' 'object'\n    case 103535:                    // 'delete' 'only'\n    case 104047:                    // 'delete' 'option'\n    case 104559:                    // 'delete' 'or'\n    case 105071:                    // 'delete' 'order'\n    case 105583:                    // 'delete' 'ordered'\n    case 106095:                    // 'delete' 'ordering'\n    case 107631:                    // 'delete' 'parent'\n    case 110703:                    // 'delete' 'preceding'\n    case 111215:                    // 'delete' 'preceding-sibling'\n    case 112751:                    // 'delete' 'processing-instruction'\n    case 113775:                    // 'delete' 'rename'\n    case 114287:                    // 'delete' 'replace'\n    case 114799:                    // 'delete' 'return'\n    case 115311:                    // 'delete' 'returning'\n    case 115823:                    // 'delete' 'revalidation'\n    case 116847:                    // 'delete' 'satisfies'\n    case 117359:                    // 'delete' 'schema'\n    case 117871:                    // 'delete' 'schema-attribute'\n    case 118383:                    // 'delete' 'schema-element'\n    case 118895:                    // 'delete' 'score'\n    case 119407:                    // 'delete' 'select'\n    case 119919:                    // 'delete' 'self'\n    case 122479:                    // 'delete' 'sliding'\n    case 122991:                    // 'delete' 'some'\n    case 123503:                    // 'delete' 'stable'\n    case 124015:                    // 'delete' 'start'\n    case 125551:                    // 'delete' 'strict'\n    case 126575:                    // 'delete' 'structured-item'\n    case 127087:                    // 'delete' 'switch'\n    case 127599:                    // 'delete' 'text'\n    case 129647:                    // 'delete' 'to'\n    case 130159:                    // 'delete' 'treat'\n    case 130671:                    // 'delete' 'true'\n    case 131183:                    // 'delete' 'try'\n    case 131695:                    // 'delete' 'tumbling'\n    case 132207:                    // 'delete' 'type'\n    case 132719:                    // 'delete' 'typeswitch'\n    case 133231:                    // 'delete' 'union'\n    case 134255:                    // 'delete' 'unordered'\n    case 134767:                    // 'delete' 'updating'\n    case 136303:                    // 'delete' 'validate'\n    case 136815:                    // 'delete' 'value'\n    case 137327:                    // 'delete' 'variable'\n    case 137839:                    // 'delete' 'version'\n    case 139375:                    // 'delete' 'where'\n    case 139887:                    // 'delete' 'while'\n    case 141423:                    // 'delete' 'with'\n    case 143983:                    // 'delete' '{'\n    case 145007:                    // 'delete' '{|'\n      try_JSONDeleteExpr();\n      break;\n    case -9:\n    case 3233:                      // 'insert' EQName^Token\n    case 4257:                      // 'insert' IntegerLiteral\n    case 4769:                      // 'insert' DecimalLiteral\n    case 5281:                      // 'insert' DoubleLiteral\n    case 5793:                      // 'insert' StringLiteral\n    case 9889:                      // 'insert' NCName^Token\n    case 16033:                     // 'insert' '$'\n    case 16545:                     // 'insert' '$$'\n    case 17057:                     // 'insert' '%'\n    case 18593:                     // 'insert' '(#'\n    case 21153:                     // 'insert' '+'\n    case 22177:                     // 'insert' '-'\n    case 24225:                     // 'insert' '/'\n    case 24737:                     // 'insert' '//'\n    case 28321:                     // 'insert' '<'\n    case 28833:                     // 'insert' '<!--'\n    case 30881:                     // 'insert' '<?'\n    case 35489:                     // 'insert' '['\n    case 36513:                     // 'insert' 'after'\n    case 37537:                     // 'insert' 'allowing'\n    case 38049:                     // 'insert' 'ancestor'\n    case 38561:                     // 'insert' 'ancestor-or-self'\n    case 39073:                     // 'insert' 'and'\n    case 40097:                     // 'insert' 'append'\n    case 40609:                     // 'insert' 'array'\n    case 41121:                     // 'insert' 'as'\n    case 41633:                     // 'insert' 'ascending'\n    case 42145:                     // 'insert' 'at'\n    case 42657:                     // 'insert' 'attribute'\n    case 43169:                     // 'insert' 'base-uri'\n    case 43681:                     // 'insert' 'before'\n    case 44193:                     // 'insert' 'boundary-space'\n    case 44705:                     // 'insert' 'break'\n    case 45729:                     // 'insert' 'case'\n    case 46241:                     // 'insert' 'cast'\n    case 46753:                     // 'insert' 'castable'\n    case 47265:                     // 'insert' 'catch'\n    case 48289:                     // 'insert' 'child'\n    case 48801:                     // 'insert' 'collation'\n    case 49825:                     // 'insert' 'comment'\n    case 50337:                     // 'insert' 'constraint'\n    case 50849:                     // 'insert' 'construction'\n    case 52385:                     // 'insert' 'context'\n    case 52897:                     // 'insert' 'continue'\n    case 53409:                     // 'insert' 'copy'\n    case 53921:                     // 'insert' 'copy-namespaces'\n    case 54433:                     // 'insert' 'count'\n    case 54945:                     // 'insert' 'decimal-format'\n    case 55969:                     // 'insert' 'declare'\n    case 56481:                     // 'insert' 'default'\n    case 56993:                     // 'insert' 'delete'\n    case 57505:                     // 'insert' 'descendant'\n    case 58017:                     // 'insert' 'descendant-or-self'\n    case 58529:                     // 'insert' 'descending'\n    case 61089:                     // 'insert' 'div'\n    case 61601:                     // 'insert' 'document'\n    case 62113:                     // 'insert' 'document-node'\n    case 62625:                     // 'insert' 'element'\n    case 63137:                     // 'insert' 'else'\n    case 63649:                     // 'insert' 'empty'\n    case 64161:                     // 'insert' 'empty-sequence'\n    case 64673:                     // 'insert' 'encoding'\n    case 65185:                     // 'insert' 'end'\n    case 66209:                     // 'insert' 'eq'\n    case 66721:                     // 'insert' 'every'\n    case 67745:                     // 'insert' 'except'\n    case 68257:                     // 'insert' 'exit'\n    case 68769:                     // 'insert' 'external'\n    case 69281:                     // 'insert' 'false'\n    case 69793:                     // 'insert' 'first'\n    case 70305:                     // 'insert' 'following'\n    case 70817:                     // 'insert' 'following-sibling'\n    case 71329:                     // 'insert' 'for'\n    case 72865:                     // 'insert' 'from'\n    case 73377:                     // 'insert' 'ft-option'\n    case 75425:                     // 'insert' 'function'\n    case 75937:                     // 'insert' 'ge'\n    case 76961:                     // 'insert' 'group'\n    case 77985:                     // 'insert' 'gt'\n    case 78497:                     // 'insert' 'idiv'\n    case 79009:                     // 'insert' 'if'\n    case 79521:                     // 'insert' 'import'\n    case 80033:                     // 'insert' 'in'\n    case 80545:                     // 'insert' 'index'\n    case 82593:                     // 'insert' 'insert'\n    case 83105:                     // 'insert' 'instance'\n    case 83617:                     // 'insert' 'integrity'\n    case 84129:                     // 'insert' 'intersect'\n    case 84641:                     // 'insert' 'into'\n    case 85153:                     // 'insert' 'is'\n    case 85665:                     // 'insert' 'item'\n    case 86177:                     // 'insert' 'json'\n    case 86689:                     // 'insert' 'json-item'\n    case 87201:                     // 'insert' 'jsoniq'\n    case 88737:                     // 'insert' 'last'\n    case 89249:                     // 'insert' 'lax'\n    case 89761:                     // 'insert' 'le'\n    case 90785:                     // 'insert' 'let'\n    case 91809:                     // 'insert' 'loop'\n    case 92833:                     // 'insert' 'lt'\n    case 93857:                     // 'insert' 'mod'\n    case 94369:                     // 'insert' 'modify'\n    case 94881:                     // 'insert' 'module'\n    case 95905:                     // 'insert' 'namespace'\n    case 96417:                     // 'insert' 'namespace-node'\n    case 96929:                     // 'insert' 'ne'\n    case 100513:                    // 'insert' 'not'\n    case 101025:                    // 'insert' 'null'\n    case 101537:                    // 'insert' 'object'\n    case 103585:                    // 'insert' 'only'\n    case 104097:                    // 'insert' 'option'\n    case 104609:                    // 'insert' 'or'\n    case 105121:                    // 'insert' 'order'\n    case 105633:                    // 'insert' 'ordered'\n    case 106145:                    // 'insert' 'ordering'\n    case 107681:                    // 'insert' 'parent'\n    case 110753:                    // 'insert' 'preceding'\n    case 111265:                    // 'insert' 'preceding-sibling'\n    case 112801:                    // 'insert' 'processing-instruction'\n    case 113825:                    // 'insert' 'rename'\n    case 114337:                    // 'insert' 'replace'\n    case 114849:                    // 'insert' 'return'\n    case 115361:                    // 'insert' 'returning'\n    case 115873:                    // 'insert' 'revalidation'\n    case 116897:                    // 'insert' 'satisfies'\n    case 117409:                    // 'insert' 'schema'\n    case 117921:                    // 'insert' 'schema-attribute'\n    case 118433:                    // 'insert' 'schema-element'\n    case 118945:                    // 'insert' 'score'\n    case 119457:                    // 'insert' 'select'\n    case 119969:                    // 'insert' 'self'\n    case 122529:                    // 'insert' 'sliding'\n    case 123041:                    // 'insert' 'some'\n    case 123553:                    // 'insert' 'stable'\n    case 124065:                    // 'insert' 'start'\n    case 125601:                    // 'insert' 'strict'\n    case 126625:                    // 'insert' 'structured-item'\n    case 127137:                    // 'insert' 'switch'\n    case 127649:                    // 'insert' 'text'\n    case 129697:                    // 'insert' 'to'\n    case 130209:                    // 'insert' 'treat'\n    case 130721:                    // 'insert' 'true'\n    case 131233:                    // 'insert' 'try'\n    case 131745:                    // 'insert' 'tumbling'\n    case 132257:                    // 'insert' 'type'\n    case 132769:                    // 'insert' 'typeswitch'\n    case 133281:                    // 'insert' 'union'\n    case 134305:                    // 'insert' 'unordered'\n    case 134817:                    // 'insert' 'updating'\n    case 136353:                    // 'insert' 'validate'\n    case 136865:                    // 'insert' 'value'\n    case 137377:                    // 'insert' 'variable'\n    case 137889:                    // 'insert' 'version'\n    case 139425:                    // 'insert' 'where'\n    case 139937:                    // 'insert' 'while'\n    case 141473:                    // 'insert' 'with'\n    case 144033:                    // 'insert' '{'\n    case 145057:                    // 'insert' '{|'\n      try_JSONInsertExpr();\n      break;\n    case -10:\n    case 3294:                      // 'rename' EQName^Token\n    case 4318:                      // 'rename' IntegerLiteral\n    case 4830:                      // 'rename' DecimalLiteral\n    case 5342:                      // 'rename' DoubleLiteral\n    case 5854:                      // 'rename' StringLiteral\n    case 16094:                     // 'rename' '$'\n    case 16606:                     // 'rename' '$$'\n    case 17118:                     // 'rename' '%'\n    case 28382:                     // 'rename' '<'\n    case 28894:                     // 'rename' '<!--'\n    case 30942:                     // 'rename' '<?'\n    case 35550:                     // 'rename' '['\n    case 36574:                     // 'rename' 'after'\n    case 37598:                     // 'rename' 'allowing'\n    case 38110:                     // 'rename' 'ancestor'\n    case 38622:                     // 'rename' 'ancestor-or-self'\n    case 39134:                     // 'rename' 'and'\n    case 40158:                     // 'rename' 'append'\n    case 40670:                     // 'rename' 'array'\n    case 41182:                     // 'rename' 'as'\n    case 41694:                     // 'rename' 'ascending'\n    case 42206:                     // 'rename' 'at'\n    case 42718:                     // 'rename' 'attribute'\n    case 43230:                     // 'rename' 'base-uri'\n    case 43742:                     // 'rename' 'before'\n    case 44254:                     // 'rename' 'boundary-space'\n    case 44766:                     // 'rename' 'break'\n    case 45790:                     // 'rename' 'case'\n    case 46302:                     // 'rename' 'cast'\n    case 46814:                     // 'rename' 'castable'\n    case 47326:                     // 'rename' 'catch'\n    case 48350:                     // 'rename' 'child'\n    case 48862:                     // 'rename' 'collation'\n    case 49886:                     // 'rename' 'comment'\n    case 50398:                     // 'rename' 'constraint'\n    case 50910:                     // 'rename' 'construction'\n    case 52446:                     // 'rename' 'context'\n    case 52958:                     // 'rename' 'continue'\n    case 53470:                     // 'rename' 'copy'\n    case 53982:                     // 'rename' 'copy-namespaces'\n    case 54494:                     // 'rename' 'count'\n    case 55006:                     // 'rename' 'decimal-format'\n    case 56030:                     // 'rename' 'declare'\n    case 56542:                     // 'rename' 'default'\n    case 57054:                     // 'rename' 'delete'\n    case 57566:                     // 'rename' 'descendant'\n    case 58078:                     // 'rename' 'descendant-or-self'\n    case 58590:                     // 'rename' 'descending'\n    case 61150:                     // 'rename' 'div'\n    case 61662:                     // 'rename' 'document'\n    case 62174:                     // 'rename' 'document-node'\n    case 62686:                     // 'rename' 'element'\n    case 63198:                     // 'rename' 'else'\n    case 63710:                     // 'rename' 'empty'\n    case 64222:                     // 'rename' 'empty-sequence'\n    case 64734:                     // 'rename' 'encoding'\n    case 65246:                     // 'rename' 'end'\n    case 66270:                     // 'rename' 'eq'\n    case 66782:                     // 'rename' 'every'\n    case 67806:                     // 'rename' 'except'\n    case 68318:                     // 'rename' 'exit'\n    case 68830:                     // 'rename' 'external'\n    case 69342:                     // 'rename' 'false'\n    case 69854:                     // 'rename' 'first'\n    case 70366:                     // 'rename' 'following'\n    case 70878:                     // 'rename' 'following-sibling'\n    case 71390:                     // 'rename' 'for'\n    case 72926:                     // 'rename' 'from'\n    case 73438:                     // 'rename' 'ft-option'\n    case 75486:                     // 'rename' 'function'\n    case 75998:                     // 'rename' 'ge'\n    case 77022:                     // 'rename' 'group'\n    case 78046:                     // 'rename' 'gt'\n    case 78558:                     // 'rename' 'idiv'\n    case 79070:                     // 'rename' 'if'\n    case 79582:                     // 'rename' 'import'\n    case 80094:                     // 'rename' 'in'\n    case 80606:                     // 'rename' 'index'\n    case 82654:                     // 'rename' 'insert'\n    case 83166:                     // 'rename' 'instance'\n    case 83678:                     // 'rename' 'integrity'\n    case 84190:                     // 'rename' 'intersect'\n    case 84702:                     // 'rename' 'into'\n    case 85214:                     // 'rename' 'is'\n    case 85726:                     // 'rename' 'item'\n    case 86238:                     // 'rename' 'json'\n    case 86750:                     // 'rename' 'json-item'\n    case 87262:                     // 'rename' 'jsoniq'\n    case 88798:                     // 'rename' 'last'\n    case 89310:                     // 'rename' 'lax'\n    case 89822:                     // 'rename' 'le'\n    case 90846:                     // 'rename' 'let'\n    case 91870:                     // 'rename' 'loop'\n    case 92894:                     // 'rename' 'lt'\n    case 93918:                     // 'rename' 'mod'\n    case 94430:                     // 'rename' 'modify'\n    case 94942:                     // 'rename' 'module'\n    case 95966:                     // 'rename' 'namespace'\n    case 96478:                     // 'rename' 'namespace-node'\n    case 96990:                     // 'rename' 'ne'\n    case 100062:                    // 'rename' 'nodes'\n    case 101086:                    // 'rename' 'null'\n    case 101598:                    // 'rename' 'object'\n    case 103646:                    // 'rename' 'only'\n    case 104158:                    // 'rename' 'option'\n    case 104670:                    // 'rename' 'or'\n    case 105182:                    // 'rename' 'order'\n    case 105694:                    // 'rename' 'ordered'\n    case 106206:                    // 'rename' 'ordering'\n    case 107742:                    // 'rename' 'parent'\n    case 110814:                    // 'rename' 'preceding'\n    case 111326:                    // 'rename' 'preceding-sibling'\n    case 112862:                    // 'rename' 'processing-instruction'\n    case 113886:                    // 'rename' 'rename'\n    case 114398:                    // 'rename' 'replace'\n    case 114910:                    // 'rename' 'return'\n    case 115422:                    // 'rename' 'returning'\n    case 115934:                    // 'rename' 'revalidation'\n    case 116958:                    // 'rename' 'satisfies'\n    case 117470:                    // 'rename' 'schema'\n    case 117982:                    // 'rename' 'schema-attribute'\n    case 118494:                    // 'rename' 'schema-element'\n    case 119006:                    // 'rename' 'score'\n    case 119518:                    // 'rename' 'select'\n    case 120030:                    // 'rename' 'self'\n    case 122590:                    // 'rename' 'sliding'\n    case 123102:                    // 'rename' 'some'\n    case 123614:                    // 'rename' 'stable'\n    case 124126:                    // 'rename' 'start'\n    case 125662:                    // 'rename' 'strict'\n    case 126686:                    // 'rename' 'structured-item'\n    case 127198:                    // 'rename' 'switch'\n    case 127710:                    // 'rename' 'text'\n    case 129758:                    // 'rename' 'to'\n    case 130270:                    // 'rename' 'treat'\n    case 130782:                    // 'rename' 'true'\n    case 131294:                    // 'rename' 'try'\n    case 131806:                    // 'rename' 'tumbling'\n    case 132318:                    // 'rename' 'type'\n    case 132830:                    // 'rename' 'typeswitch'\n    case 133342:                    // 'rename' 'union'\n    case 134366:                    // 'rename' 'unordered'\n    case 134878:                    // 'rename' 'updating'\n    case 136414:                    // 'rename' 'validate'\n    case 136926:                    // 'rename' 'value'\n    case 137438:                    // 'rename' 'variable'\n    case 137950:                    // 'rename' 'version'\n    case 139486:                    // 'rename' 'where'\n    case 139998:                    // 'rename' 'while'\n    case 141534:                    // 'rename' 'with'\n    case 144094:                    // 'rename' '{'\n    case 145118:                    // 'rename' '{|'\n      try_JSONRenameExpr();\n      break;\n    case -11:\n      try_JSONReplaceExpr();\n      break;\n    case -12:\n    case 3150:                      // 'append' EQName^Token\n    case 4174:                      // 'append' IntegerLiteral\n    case 4686:                      // 'append' DecimalLiteral\n    case 5198:                      // 'append' DoubleLiteral\n    case 5710:                      // 'append' StringLiteral\n    case 15950:                     // 'append' '$'\n    case 16462:                     // 'append' '$$'\n    case 16974:                     // 'append' '%'\n    case 18510:                     // 'append' '(#'\n    case 21070:                     // 'append' '+'\n    case 22094:                     // 'append' '-'\n    case 24142:                     // 'append' '/'\n    case 24654:                     // 'append' '//'\n    case 28238:                     // 'append' '<'\n    case 28750:                     // 'append' '<!--'\n    case 30798:                     // 'append' '<?'\n    case 35406:                     // 'append' '['\n    case 36430:                     // 'append' 'after'\n    case 37454:                     // 'append' 'allowing'\n    case 37966:                     // 'append' 'ancestor'\n    case 38478:                     // 'append' 'ancestor-or-self'\n    case 38990:                     // 'append' 'and'\n    case 40014:                     // 'append' 'append'\n    case 40526:                     // 'append' 'array'\n    case 41038:                     // 'append' 'as'\n    case 41550:                     // 'append' 'ascending'\n    case 42062:                     // 'append' 'at'\n    case 42574:                     // 'append' 'attribute'\n    case 43086:                     // 'append' 'base-uri'\n    case 43598:                     // 'append' 'before'\n    case 44110:                     // 'append' 'boundary-space'\n    case 44622:                     // 'append' 'break'\n    case 45646:                     // 'append' 'case'\n    case 46158:                     // 'append' 'cast'\n    case 46670:                     // 'append' 'castable'\n    case 47182:                     // 'append' 'catch'\n    case 48206:                     // 'append' 'child'\n    case 48718:                     // 'append' 'collation'\n    case 49742:                     // 'append' 'comment'\n    case 50254:                     // 'append' 'constraint'\n    case 50766:                     // 'append' 'construction'\n    case 52302:                     // 'append' 'context'\n    case 52814:                     // 'append' 'continue'\n    case 53326:                     // 'append' 'copy'\n    case 53838:                     // 'append' 'copy-namespaces'\n    case 54350:                     // 'append' 'count'\n    case 54862:                     // 'append' 'decimal-format'\n    case 55886:                     // 'append' 'declare'\n    case 56398:                     // 'append' 'default'\n    case 56910:                     // 'append' 'delete'\n    case 57422:                     // 'append' 'descendant'\n    case 57934:                     // 'append' 'descendant-or-self'\n    case 58446:                     // 'append' 'descending'\n    case 61006:                     // 'append' 'div'\n    case 61518:                     // 'append' 'document'\n    case 62030:                     // 'append' 'document-node'\n    case 62542:                     // 'append' 'element'\n    case 63054:                     // 'append' 'else'\n    case 63566:                     // 'append' 'empty'\n    case 64078:                     // 'append' 'empty-sequence'\n    case 64590:                     // 'append' 'encoding'\n    case 65102:                     // 'append' 'end'\n    case 66126:                     // 'append' 'eq'\n    case 66638:                     // 'append' 'every'\n    case 67662:                     // 'append' 'except'\n    case 68174:                     // 'append' 'exit'\n    case 68686:                     // 'append' 'external'\n    case 69198:                     // 'append' 'false'\n    case 69710:                     // 'append' 'first'\n    case 70222:                     // 'append' 'following'\n    case 70734:                     // 'append' 'following-sibling'\n    case 71246:                     // 'append' 'for'\n    case 72782:                     // 'append' 'from'\n    case 73294:                     // 'append' 'ft-option'\n    case 75342:                     // 'append' 'function'\n    case 75854:                     // 'append' 'ge'\n    case 76878:                     // 'append' 'group'\n    case 77902:                     // 'append' 'gt'\n    case 78414:                     // 'append' 'idiv'\n    case 78926:                     // 'append' 'if'\n    case 79438:                     // 'append' 'import'\n    case 79950:                     // 'append' 'in'\n    case 80462:                     // 'append' 'index'\n    case 82510:                     // 'append' 'insert'\n    case 83022:                     // 'append' 'instance'\n    case 83534:                     // 'append' 'integrity'\n    case 84046:                     // 'append' 'intersect'\n    case 84558:                     // 'append' 'into'\n    case 85070:                     // 'append' 'is'\n    case 85582:                     // 'append' 'item'\n    case 86094:                     // 'append' 'json'\n    case 86606:                     // 'append' 'json-item'\n    case 87118:                     // 'append' 'jsoniq'\n    case 88654:                     // 'append' 'last'\n    case 89166:                     // 'append' 'lax'\n    case 89678:                     // 'append' 'le'\n    case 90702:                     // 'append' 'let'\n    case 91726:                     // 'append' 'loop'\n    case 92750:                     // 'append' 'lt'\n    case 93774:                     // 'append' 'mod'\n    case 94286:                     // 'append' 'modify'\n    case 94798:                     // 'append' 'module'\n    case 95822:                     // 'append' 'namespace'\n    case 96334:                     // 'append' 'namespace-node'\n    case 96846:                     // 'append' 'ne'\n    case 99406:                     // 'append' 'node'\n    case 99918:                     // 'append' 'nodes'\n    case 100430:                    // 'append' 'not'\n    case 100942:                    // 'append' 'null'\n    case 101454:                    // 'append' 'object'\n    case 103502:                    // 'append' 'only'\n    case 104014:                    // 'append' 'option'\n    case 104526:                    // 'append' 'or'\n    case 105038:                    // 'append' 'order'\n    case 105550:                    // 'append' 'ordered'\n    case 106062:                    // 'append' 'ordering'\n    case 107598:                    // 'append' 'parent'\n    case 110670:                    // 'append' 'preceding'\n    case 111182:                    // 'append' 'preceding-sibling'\n    case 112718:                    // 'append' 'processing-instruction'\n    case 113742:                    // 'append' 'rename'\n    case 114254:                    // 'append' 'replace'\n    case 114766:                    // 'append' 'return'\n    case 115278:                    // 'append' 'returning'\n    case 115790:                    // 'append' 'revalidation'\n    case 116814:                    // 'append' 'satisfies'\n    case 117326:                    // 'append' 'schema'\n    case 117838:                    // 'append' 'schema-attribute'\n    case 118350:                    // 'append' 'schema-element'\n    case 118862:                    // 'append' 'score'\n    case 119374:                    // 'append' 'select'\n    case 119886:                    // 'append' 'self'\n    case 122446:                    // 'append' 'sliding'\n    case 122958:                    // 'append' 'some'\n    case 123470:                    // 'append' 'stable'\n    case 123982:                    // 'append' 'start'\n    case 125518:                    // 'append' 'strict'\n    case 126542:                    // 'append' 'structured-item'\n    case 127054:                    // 'append' 'switch'\n    case 127566:                    // 'append' 'text'\n    case 129614:                    // 'append' 'to'\n    case 130126:                    // 'append' 'treat'\n    case 130638:                    // 'append' 'true'\n    case 131150:                    // 'append' 'try'\n    case 131662:                    // 'append' 'tumbling'\n    case 132174:                    // 'append' 'type'\n    case 132686:                    // 'append' 'typeswitch'\n    case 133198:                    // 'append' 'union'\n    case 134222:                    // 'append' 'unordered'\n    case 134734:                    // 'append' 'updating'\n    case 136270:                    // 'append' 'validate'\n    case 136782:                    // 'append' 'value'\n    case 137294:                    // 'append' 'variable'\n    case 137806:                    // 'append' 'version'\n    case 139342:                    // 'append' 'where'\n    case 139854:                    // 'append' 'while'\n    case 141390:                    // 'append' 'with'\n    case 143950:                    // 'append' '{'\n    case 144974:                    // 'append' '{|'\n      try_JSONAppendExpr();\n      break;\n    case -13:\n      break;\n    default:\n      try_OrExpr();\n    }\n  }\n\n  function parse_JSONDeleteExpr()\n  {\n    eventHandler.startNonterminal(\"JSONDeleteExpr\", e0);\n    shift(111);                     // 'delete'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(11, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(11, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    eventHandler.endNonterminal(\"JSONDeleteExpr\", e0);\n  }\n\n  function try_JSONDeleteExpr()\n  {\n    shiftT(111);                    // 'delete'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(11, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(11, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(11, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n  }\n\n  function parse_JSONInsertExpr()\n  {\n    eventHandler.startNonterminal(\"JSONInsertExpr\", e0);\n    switch (l1)\n    {\n    case 161:                       // 'insert'\n      lookahead2W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 9889)                 // 'insert' NCName^Token\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(161);              // 'insert'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          switch (l1)\n          {\n          case 168:                 // 'json'\n            lookahead2W(268);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 18088)          // 'json' '('\n          {\n            lk = memoized(13, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(168);        // 'json'\n                memoize(13, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(13, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1\n           || lk == 3240            // 'json' EQName^Token\n           || lk == 4264            // 'json' IntegerLiteral\n           || lk == 4776            // 'json' DecimalLiteral\n           || lk == 5288            // 'json' DoubleLiteral\n           || lk == 5800            // 'json' StringLiteral\n           || lk == 16040           // 'json' '$'\n           || lk == 16552           // 'json' '$$'\n           || lk == 17064           // 'json' '%'\n           || lk == 18600           // 'json' '(#'\n           || lk == 21160           // 'json' '+'\n           || lk == 22184           // 'json' '-'\n           || lk == 24232           // 'json' '/'\n           || lk == 24744           // 'json' '//'\n           || lk == 28328           // 'json' '<'\n           || lk == 28840           // 'json' '<!--'\n           || lk == 30888           // 'json' '<?'\n           || lk == 35496           // 'json' '['\n           || lk == 36520           // 'json' 'after'\n           || lk == 37544           // 'json' 'allowing'\n           || lk == 38056           // 'json' 'ancestor'\n           || lk == 38568           // 'json' 'ancestor-or-self'\n           || lk == 39080           // 'json' 'and'\n           || lk == 40104           // 'json' 'append'\n           || lk == 40616           // 'json' 'array'\n           || lk == 41128           // 'json' 'as'\n           || lk == 41640           // 'json' 'ascending'\n           || lk == 42152           // 'json' 'at'\n           || lk == 42664           // 'json' 'attribute'\n           || lk == 43176           // 'json' 'base-uri'\n           || lk == 43688           // 'json' 'before'\n           || lk == 44200           // 'json' 'boundary-space'\n           || lk == 44712           // 'json' 'break'\n           || lk == 45736           // 'json' 'case'\n           || lk == 46248           // 'json' 'cast'\n           || lk == 46760           // 'json' 'castable'\n           || lk == 47272           // 'json' 'catch'\n           || lk == 48296           // 'json' 'child'\n           || lk == 48808           // 'json' 'collation'\n           || lk == 49832           // 'json' 'comment'\n           || lk == 50344           // 'json' 'constraint'\n           || lk == 50856           // 'json' 'construction'\n           || lk == 52392           // 'json' 'context'\n           || lk == 52904           // 'json' 'continue'\n           || lk == 53416           // 'json' 'copy'\n           || lk == 53928           // 'json' 'copy-namespaces'\n           || lk == 54440           // 'json' 'count'\n           || lk == 54952           // 'json' 'decimal-format'\n           || lk == 55976           // 'json' 'declare'\n           || lk == 56488           // 'json' 'default'\n           || lk == 57000           // 'json' 'delete'\n           || lk == 57512           // 'json' 'descendant'\n           || lk == 58024           // 'json' 'descendant-or-self'\n           || lk == 58536           // 'json' 'descending'\n           || lk == 61096           // 'json' 'div'\n           || lk == 61608           // 'json' 'document'\n           || lk == 62120           // 'json' 'document-node'\n           || lk == 62632           // 'json' 'element'\n           || lk == 63144           // 'json' 'else'\n           || lk == 63656           // 'json' 'empty'\n           || lk == 64168           // 'json' 'empty-sequence'\n           || lk == 64680           // 'json' 'encoding'\n           || lk == 65192           // 'json' 'end'\n           || lk == 66216           // 'json' 'eq'\n           || lk == 66728           // 'json' 'every'\n           || lk == 67752           // 'json' 'except'\n           || lk == 68264           // 'json' 'exit'\n           || lk == 68776           // 'json' 'external'\n           || lk == 69288           // 'json' 'false'\n           || lk == 69800           // 'json' 'first'\n           || lk == 70312           // 'json' 'following'\n           || lk == 70824           // 'json' 'following-sibling'\n           || lk == 71336           // 'json' 'for'\n           || lk == 72872           // 'json' 'from'\n           || lk == 73384           // 'json' 'ft-option'\n           || lk == 75432           // 'json' 'function'\n           || lk == 75944           // 'json' 'ge'\n           || lk == 76968           // 'json' 'group'\n           || lk == 77992           // 'json' 'gt'\n           || lk == 78504           // 'json' 'idiv'\n           || lk == 79016           // 'json' 'if'\n           || lk == 79528           // 'json' 'import'\n           || lk == 80040           // 'json' 'in'\n           || lk == 80552           // 'json' 'index'\n           || lk == 82600           // 'json' 'insert'\n           || lk == 83112           // 'json' 'instance'\n           || lk == 83624           // 'json' 'integrity'\n           || lk == 84136           // 'json' 'intersect'\n           || lk == 84648           // 'json' 'into'\n           || lk == 85160           // 'json' 'is'\n           || lk == 85672           // 'json' 'item'\n           || lk == 86184           // 'json' 'json'\n           || lk == 86696           // 'json' 'json-item'\n           || lk == 87208           // 'json' 'jsoniq'\n           || lk == 88744           // 'json' 'last'\n           || lk == 89256           // 'json' 'lax'\n           || lk == 89768           // 'json' 'le'\n           || lk == 90792           // 'json' 'let'\n           || lk == 91816           // 'json' 'loop'\n           || lk == 92840           // 'json' 'lt'\n           || lk == 93864           // 'json' 'mod'\n           || lk == 94376           // 'json' 'modify'\n           || lk == 94888           // 'json' 'module'\n           || lk == 95912           // 'json' 'namespace'\n           || lk == 96424           // 'json' 'namespace-node'\n           || lk == 96936           // 'json' 'ne'\n           || lk == 99496           // 'json' 'node'\n           || lk == 100008          // 'json' 'nodes'\n           || lk == 100520          // 'json' 'not'\n           || lk == 101032          // 'json' 'null'\n           || lk == 101544          // 'json' 'object'\n           || lk == 103592          // 'json' 'only'\n           || lk == 104104          // 'json' 'option'\n           || lk == 104616          // 'json' 'or'\n           || lk == 105128          // 'json' 'order'\n           || lk == 105640          // 'json' 'ordered'\n           || lk == 106152          // 'json' 'ordering'\n           || lk == 107688          // 'json' 'parent'\n           || lk == 110760          // 'json' 'preceding'\n           || lk == 111272          // 'json' 'preceding-sibling'\n           || lk == 112808          // 'json' 'processing-instruction'\n           || lk == 113832          // 'json' 'rename'\n           || lk == 114344          // 'json' 'replace'\n           || lk == 114856          // 'json' 'return'\n           || lk == 115368          // 'json' 'returning'\n           || lk == 115880          // 'json' 'revalidation'\n           || lk == 116904          // 'json' 'satisfies'\n           || lk == 117416          // 'json' 'schema'\n           || lk == 117928          // 'json' 'schema-attribute'\n           || lk == 118440          // 'json' 'schema-element'\n           || lk == 118952          // 'json' 'score'\n           || lk == 119464          // 'json' 'select'\n           || lk == 119976          // 'json' 'self'\n           || lk == 122536          // 'json' 'sliding'\n           || lk == 123048          // 'json' 'some'\n           || lk == 123560          // 'json' 'stable'\n           || lk == 124072          // 'json' 'start'\n           || lk == 125608          // 'json' 'strict'\n           || lk == 126632          // 'json' 'structured-item'\n           || lk == 127144          // 'json' 'switch'\n           || lk == 127656          // 'json' 'text'\n           || lk == 129704          // 'json' 'to'\n           || lk == 130216          // 'json' 'treat'\n           || lk == 130728          // 'json' 'true'\n           || lk == 131240          // 'json' 'try'\n           || lk == 131752          // 'json' 'tumbling'\n           || lk == 132264          // 'json' 'type'\n           || lk == 132776          // 'json' 'typeswitch'\n           || lk == 133288          // 'json' 'union'\n           || lk == 134312          // 'json' 'unordered'\n           || lk == 134824          // 'json' 'updating'\n           || lk == 136360          // 'json' 'validate'\n           || lk == 136872          // 'json' 'value'\n           || lk == 137384          // 'json' 'variable'\n           || lk == 137896          // 'json' 'version'\n           || lk == 139432          // 'json' 'where'\n           || lk == 139944          // 'json' 'while'\n           || lk == 141480          // 'json' 'with'\n           || lk == 144040          // 'json' '{'\n           || lk == 145064)         // 'json' '{|'\n          {\n            shiftT(168);            // 'json'\n          }\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          shiftT(165);              // 'into'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          switch (l1)\n          {\n          case 82:                  // 'at'\n            lookahead2W(72);        // S^WS | '(:' | 'position'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 110162)         // 'at' 'position'\n          {\n            lk = memoized(14, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(82);         // 'at'\n                lookahead1W(72);    // S^WS | '(:' | 'position'\n                shiftT(215);        // 'position'\n                lookahead1W(266);   // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                try_ExprSingle();\n                memoize(14, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(14, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1)\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(12, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(161);                   // 'insert'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(13, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(13, e0, lk);\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shift(168);                 // 'json'\n      }\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n      shift(165);                   // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(72);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 110162)             // 'at' 'position'\n      {\n        lk = memoized(14, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(14, e0, lk);\n        }\n      }\n      if (lk == -1)\n      {\n        shift(82);                  // 'at'\n        lookahead1W(72);            // S^WS | '(:' | 'position'\n        shift(215);                 // 'position'\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      break;\n    default:\n      shift(161);                   // 'insert'\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(281);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(15, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(15, e0, lk);\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 9896                // 'json' NCName^Token\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shift(168);                 // 'json'\n      }\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PairConstructorList();\n      shift(165);                   // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"JSONInsertExpr\", e0);\n  }\n\n  function try_JSONInsertExpr()\n  {\n    switch (l1)\n    {\n    case 161:                       // 'insert'\n      lookahead2W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 9889)                 // 'insert' NCName^Token\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(161);              // 'insert'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          switch (l1)\n          {\n          case 168:                 // 'json'\n            lookahead2W(268);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 18088)          // 'json' '('\n          {\n            lk = memoized(13, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(168);        // 'json'\n                memoize(13, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(13, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1\n           || lk == 3240            // 'json' EQName^Token\n           || lk == 4264            // 'json' IntegerLiteral\n           || lk == 4776            // 'json' DecimalLiteral\n           || lk == 5288            // 'json' DoubleLiteral\n           || lk == 5800            // 'json' StringLiteral\n           || lk == 16040           // 'json' '$'\n           || lk == 16552           // 'json' '$$'\n           || lk == 17064           // 'json' '%'\n           || lk == 18600           // 'json' '(#'\n           || lk == 21160           // 'json' '+'\n           || lk == 22184           // 'json' '-'\n           || lk == 24232           // 'json' '/'\n           || lk == 24744           // 'json' '//'\n           || lk == 28328           // 'json' '<'\n           || lk == 28840           // 'json' '<!--'\n           || lk == 30888           // 'json' '<?'\n           || lk == 35496           // 'json' '['\n           || lk == 36520           // 'json' 'after'\n           || lk == 37544           // 'json' 'allowing'\n           || lk == 38056           // 'json' 'ancestor'\n           || lk == 38568           // 'json' 'ancestor-or-self'\n           || lk == 39080           // 'json' 'and'\n           || lk == 40104           // 'json' 'append'\n           || lk == 40616           // 'json' 'array'\n           || lk == 41128           // 'json' 'as'\n           || lk == 41640           // 'json' 'ascending'\n           || lk == 42152           // 'json' 'at'\n           || lk == 42664           // 'json' 'attribute'\n           || lk == 43176           // 'json' 'base-uri'\n           || lk == 43688           // 'json' 'before'\n           || lk == 44200           // 'json' 'boundary-space'\n           || lk == 44712           // 'json' 'break'\n           || lk == 45736           // 'json' 'case'\n           || lk == 46248           // 'json' 'cast'\n           || lk == 46760           // 'json' 'castable'\n           || lk == 47272           // 'json' 'catch'\n           || lk == 48296           // 'json' 'child'\n           || lk == 48808           // 'json' 'collation'\n           || lk == 49832           // 'json' 'comment'\n           || lk == 50344           // 'json' 'constraint'\n           || lk == 50856           // 'json' 'construction'\n           || lk == 52392           // 'json' 'context'\n           || lk == 52904           // 'json' 'continue'\n           || lk == 53416           // 'json' 'copy'\n           || lk == 53928           // 'json' 'copy-namespaces'\n           || lk == 54440           // 'json' 'count'\n           || lk == 54952           // 'json' 'decimal-format'\n           || lk == 55976           // 'json' 'declare'\n           || lk == 56488           // 'json' 'default'\n           || lk == 57000           // 'json' 'delete'\n           || lk == 57512           // 'json' 'descendant'\n           || lk == 58024           // 'json' 'descendant-or-self'\n           || lk == 58536           // 'json' 'descending'\n           || lk == 61096           // 'json' 'div'\n           || lk == 61608           // 'json' 'document'\n           || lk == 62120           // 'json' 'document-node'\n           || lk == 62632           // 'json' 'element'\n           || lk == 63144           // 'json' 'else'\n           || lk == 63656           // 'json' 'empty'\n           || lk == 64168           // 'json' 'empty-sequence'\n           || lk == 64680           // 'json' 'encoding'\n           || lk == 65192           // 'json' 'end'\n           || lk == 66216           // 'json' 'eq'\n           || lk == 66728           // 'json' 'every'\n           || lk == 67752           // 'json' 'except'\n           || lk == 68264           // 'json' 'exit'\n           || lk == 68776           // 'json' 'external'\n           || lk == 69288           // 'json' 'false'\n           || lk == 69800           // 'json' 'first'\n           || lk == 70312           // 'json' 'following'\n           || lk == 70824           // 'json' 'following-sibling'\n           || lk == 71336           // 'json' 'for'\n           || lk == 72872           // 'json' 'from'\n           || lk == 73384           // 'json' 'ft-option'\n           || lk == 75432           // 'json' 'function'\n           || lk == 75944           // 'json' 'ge'\n           || lk == 76968           // 'json' 'group'\n           || lk == 77992           // 'json' 'gt'\n           || lk == 78504           // 'json' 'idiv'\n           || lk == 79016           // 'json' 'if'\n           || lk == 79528           // 'json' 'import'\n           || lk == 80040           // 'json' 'in'\n           || lk == 80552           // 'json' 'index'\n           || lk == 82600           // 'json' 'insert'\n           || lk == 83112           // 'json' 'instance'\n           || lk == 83624           // 'json' 'integrity'\n           || lk == 84136           // 'json' 'intersect'\n           || lk == 84648           // 'json' 'into'\n           || lk == 85160           // 'json' 'is'\n           || lk == 85672           // 'json' 'item'\n           || lk == 86184           // 'json' 'json'\n           || lk == 86696           // 'json' 'json-item'\n           || lk == 87208           // 'json' 'jsoniq'\n           || lk == 88744           // 'json' 'last'\n           || lk == 89256           // 'json' 'lax'\n           || lk == 89768           // 'json' 'le'\n           || lk == 90792           // 'json' 'let'\n           || lk == 91816           // 'json' 'loop'\n           || lk == 92840           // 'json' 'lt'\n           || lk == 93864           // 'json' 'mod'\n           || lk == 94376           // 'json' 'modify'\n           || lk == 94888           // 'json' 'module'\n           || lk == 95912           // 'json' 'namespace'\n           || lk == 96424           // 'json' 'namespace-node'\n           || lk == 96936           // 'json' 'ne'\n           || lk == 99496           // 'json' 'node'\n           || lk == 100008          // 'json' 'nodes'\n           || lk == 100520          // 'json' 'not'\n           || lk == 101032          // 'json' 'null'\n           || lk == 101544          // 'json' 'object'\n           || lk == 103592          // 'json' 'only'\n           || lk == 104104          // 'json' 'option'\n           || lk == 104616          // 'json' 'or'\n           || lk == 105128          // 'json' 'order'\n           || lk == 105640          // 'json' 'ordered'\n           || lk == 106152          // 'json' 'ordering'\n           || lk == 107688          // 'json' 'parent'\n           || lk == 110760          // 'json' 'preceding'\n           || lk == 111272          // 'json' 'preceding-sibling'\n           || lk == 112808          // 'json' 'processing-instruction'\n           || lk == 113832          // 'json' 'rename'\n           || lk == 114344          // 'json' 'replace'\n           || lk == 114856          // 'json' 'return'\n           || lk == 115368          // 'json' 'returning'\n           || lk == 115880          // 'json' 'revalidation'\n           || lk == 116904          // 'json' 'satisfies'\n           || lk == 117416          // 'json' 'schema'\n           || lk == 117928          // 'json' 'schema-attribute'\n           || lk == 118440          // 'json' 'schema-element'\n           || lk == 118952          // 'json' 'score'\n           || lk == 119464          // 'json' 'select'\n           || lk == 119976          // 'json' 'self'\n           || lk == 122536          // 'json' 'sliding'\n           || lk == 123048          // 'json' 'some'\n           || lk == 123560          // 'json' 'stable'\n           || lk == 124072          // 'json' 'start'\n           || lk == 125608          // 'json' 'strict'\n           || lk == 126632          // 'json' 'structured-item'\n           || lk == 127144          // 'json' 'switch'\n           || lk == 127656          // 'json' 'text'\n           || lk == 129704          // 'json' 'to'\n           || lk == 130216          // 'json' 'treat'\n           || lk == 130728          // 'json' 'true'\n           || lk == 131240          // 'json' 'try'\n           || lk == 131752          // 'json' 'tumbling'\n           || lk == 132264          // 'json' 'type'\n           || lk == 132776          // 'json' 'typeswitch'\n           || lk == 133288          // 'json' 'union'\n           || lk == 134312          // 'json' 'unordered'\n           || lk == 134824          // 'json' 'updating'\n           || lk == 136360          // 'json' 'validate'\n           || lk == 136872          // 'json' 'value'\n           || lk == 137384          // 'json' 'variable'\n           || lk == 137896          // 'json' 'version'\n           || lk == 139432          // 'json' 'where'\n           || lk == 139944          // 'json' 'while'\n           || lk == 141480          // 'json' 'with'\n           || lk == 144040          // 'json' '{'\n           || lk == 145064)         // 'json' '{|'\n          {\n            shiftT(168);            // 'json'\n          }\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          shiftT(165);              // 'into'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          switch (l1)\n          {\n          case 82:                  // 'at'\n            lookahead2W(72);        // S^WS | '(:' | 'position'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 110162)         // 'at' 'position'\n          {\n            lk = memoized(14, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(82);         // 'at'\n                lookahead1W(72);    // S^WS | '(:' | 'position'\n                shiftT(215);        // 'position'\n                lookahead1W(266);   // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                try_ExprSingle();\n                memoize(14, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(14, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1)\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          memoize(12, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(12, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(161);                  // 'insert'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(13, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            memoize(13, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(13, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shiftT(168);                // 'json'\n      }\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n      shiftT(165);                  // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(72);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 110162)             // 'at' 'position'\n      {\n        lk = memoized(14, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n            memoize(14, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(14, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1)\n      {\n        shiftT(82);                 // 'at'\n        lookahead1W(72);            // S^WS | '(:' | 'position'\n        shiftT(215);                // 'position'\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_ExprSingle();\n      }\n      break;\n    case -3:\n      break;\n    default:\n      shiftT(161);                  // 'insert'\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(281);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(15, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            memoize(15, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(15, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 9896                // 'json' NCName^Token\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shiftT(168);                // 'json'\n      }\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PairConstructorList();\n      shiftT(165);                  // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_JSONRenameExpr()\n  {\n    eventHandler.startNonterminal(\"JSONRenameExpr\", e0);\n    shift(222);                     // 'rename'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(16, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(16, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(80);                      // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONRenameExpr\", e0);\n  }\n\n  function try_JSONRenameExpr()\n  {\n    shiftT(222);                    // 'rename'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(16, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(16, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(16, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(80);                     // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"JSONReplaceExpr\", e0);\n    shift(223);                     // 'replace'\n    lookahead1W(85);                // S^WS | '(:' | 'value'\n    shift(267);                     // 'value'\n    lookahead1W(67);                // S^WS | '(:' | 'of'\n    shift(200);                     // 'of'\n    lookahead1W(59);                // S^WS | '(:' | 'json'\n    shift(168);                     // 'json'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(276);                     // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONReplaceExpr\", e0);\n  }\n\n  function try_JSONReplaceExpr()\n  {\n    shiftT(223);                    // 'replace'\n    lookahead1W(85);                // S^WS | '(:' | 'value'\n    shiftT(267);                    // 'value'\n    lookahead1W(67);                // S^WS | '(:' | 'of'\n    shiftT(200);                    // 'of'\n    lookahead1W(59);                // S^WS | '(:' | 'json'\n    shiftT(168);                    // 'json'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(276);                    // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONAppendExpr()\n  {\n    eventHandler.startNonterminal(\"JSONAppendExpr\", e0);\n    shift(78);                      // 'append'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(17, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(17, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 18600                 // 'json' '(#'\n     || lk == 21160                 // 'json' '+'\n     || lk == 22184                 // 'json' '-'\n     || lk == 24232                 // 'json' '/'\n     || lk == 24744                 // 'json' '//'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 100520                // 'json' 'not'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(165);                     // 'into'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONAppendExpr\", e0);\n  }\n\n  function try_JSONAppendExpr()\n  {\n    shiftT(78);                     // 'append'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(17, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(17, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(17, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 18600                 // 'json' '(#'\n     || lk == 21160                 // 'json' '+'\n     || lk == 22184                 // 'json' '-'\n     || lk == 24232                 // 'json' '/'\n     || lk == 24744                 // 'json' '//'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 100520                // 'json' 'not'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(165);                    // 'into'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CommonContent()\n  {\n    eventHandler.startNonterminal(\"CommonContent\", e0);\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shift(12);                    // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shift(23);                    // CharRef\n      break;\n    case 282:                       // '{{'\n      shift(282);                   // '{{'\n      break;\n    case 288:                       // '}}'\n      shift(288);                   // '}}'\n      break;\n    default:\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CommonContent\", e0);\n  }\n\n  function try_CommonContent()\n  {\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shiftT(12);                   // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shiftT(23);                   // CharRef\n      break;\n    case 282:                       // '{{'\n      shiftT(282);                  // '{{'\n      break;\n    case 288:                       // '}}'\n      shiftT(288);                  // '}}'\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_ContentExpr()\n  {\n    eventHandler.startNonterminal(\"ContentExpr\", e0);\n    parse_StatementsAndExpr();\n    eventHandler.endNonterminal(\"ContentExpr\", e0);\n  }\n\n  function try_ContentExpr()\n  {\n    try_StatementsAndExpr();\n  }\n\n  function parse_CompDocConstructor()\n  {\n    eventHandler.startNonterminal(\"CompDocConstructor\", e0);\n    shift(120);                     // 'document'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompDocConstructor\", e0);\n  }\n\n  function try_CompDocConstructor()\n  {\n    shiftT(120);                    // 'document'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompAttrConstructor()\n  {\n    eventHandler.startNonterminal(\"CompAttrConstructor\", e0);\n    shift(83);                      // 'attribute'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(18, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(18, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(281);                   // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompAttrConstructor\", e0);\n  }\n\n  function try_CompAttrConstructor()\n  {\n    shiftT(83);                     // 'attribute'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(18, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          memoize(18, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(18, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(281);                  // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shiftT(287);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompPIConstructor()\n  {\n    eventHandler.startNonterminal(\"CompPIConstructor\", e0);\n    shift(220);                     // 'processing-instruction'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(19, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(19, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(281);                   // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompPIConstructor\", e0);\n  }\n\n  function try_CompPIConstructor()\n  {\n    shiftT(220);                    // 'processing-instruction'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_NCName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(19, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          memoize(19, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(19, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(281);                  // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shiftT(287);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"CompCommentConstructor\", e0);\n    shift(97);                      // 'comment'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompCommentConstructor\", e0);\n  }\n\n  function try_CompCommentConstructor()\n  {\n    shiftT(97);                     // 'comment'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompTextConstructor()\n  {\n    eventHandler.startNonterminal(\"CompTextConstructor\", e0);\n    shift(249);                     // 'text'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompTextConstructor\", e0);\n  }\n\n  function try_CompTextConstructor()\n  {\n    shiftT(249);                    // 'text'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_PrimaryExpr()\n  {\n    eventHandler.startNonterminal(\"PrimaryExpr\", e0);\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      lookahead2W(246);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(244);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(252);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(97);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 262:                       // 'unordered'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3353                  // '{' EQName^Token\n     || lk == 4377                  // '{' IntegerLiteral\n     || lk == 4889                  // '{' DecimalLiteral\n     || lk == 5401                  // '{' DoubleLiteral\n     || lk == 5913                  // '{' StringLiteral\n     || lk == 16153                 // '{' '$'\n     || lk == 16665                 // '{' '$$'\n     || lk == 17177                 // '{' '%'\n     || lk == 18055                 // 'false' '('\n     || lk == 18117                 // 'null' '('\n     || lk == 18175                 // 'true' '('\n     || lk == 18201                 // '{' '('\n     || lk == 18713                 // '{' '(#'\n     || lk == 21273                 // '{' '+'\n     || lk == 22297                 // '{' '-'\n     || lk == 24345                 // '{' '/'\n     || lk == 24857                 // '{' '//'\n     || lk == 28441                 // '{' '<'\n     || lk == 28953                 // '{' '<!--'\n     || lk == 31001                 // '{' '<?'\n     || lk == 35609                 // '{' '['\n     || lk == 36633                 // '{' 'after'\n     || lk == 37657                 // '{' 'allowing'\n     || lk == 38169                 // '{' 'ancestor'\n     || lk == 38681                 // '{' 'ancestor-or-self'\n     || lk == 39193                 // '{' 'and'\n     || lk == 40217                 // '{' 'append'\n     || lk == 40729                 // '{' 'array'\n     || lk == 41241                 // '{' 'as'\n     || lk == 41753                 // '{' 'ascending'\n     || lk == 42265                 // '{' 'at'\n     || lk == 42777                 // '{' 'attribute'\n     || lk == 43289                 // '{' 'base-uri'\n     || lk == 43801                 // '{' 'before'\n     || lk == 44313                 // '{' 'boundary-space'\n     || lk == 44825                 // '{' 'break'\n     || lk == 45849                 // '{' 'case'\n     || lk == 46361                 // '{' 'cast'\n     || lk == 46873                 // '{' 'castable'\n     || lk == 47385                 // '{' 'catch'\n     || lk == 48409                 // '{' 'child'\n     || lk == 48921                 // '{' 'collation'\n     || lk == 49945                 // '{' 'comment'\n     || lk == 50457                 // '{' 'constraint'\n     || lk == 50969                 // '{' 'construction'\n     || lk == 52505                 // '{' 'context'\n     || lk == 53017                 // '{' 'continue'\n     || lk == 53529                 // '{' 'copy'\n     || lk == 54041                 // '{' 'copy-namespaces'\n     || lk == 54553                 // '{' 'count'\n     || lk == 55065                 // '{' 'decimal-format'\n     || lk == 56089                 // '{' 'declare'\n     || lk == 56601                 // '{' 'default'\n     || lk == 57113                 // '{' 'delete'\n     || lk == 57625                 // '{' 'descendant'\n     || lk == 58137                 // '{' 'descendant-or-self'\n     || lk == 58649                 // '{' 'descending'\n     || lk == 61209                 // '{' 'div'\n     || lk == 61721                 // '{' 'document'\n     || lk == 62233                 // '{' 'document-node'\n     || lk == 62745                 // '{' 'element'\n     || lk == 63257                 // '{' 'else'\n     || lk == 63769                 // '{' 'empty'\n     || lk == 64281                 // '{' 'empty-sequence'\n     || lk == 64793                 // '{' 'encoding'\n     || lk == 65305                 // '{' 'end'\n     || lk == 66329                 // '{' 'eq'\n     || lk == 66841                 // '{' 'every'\n     || lk == 67865                 // '{' 'except'\n     || lk == 68377                 // '{' 'exit'\n     || lk == 68889                 // '{' 'external'\n     || lk == 69401                 // '{' 'false'\n     || lk == 69913                 // '{' 'first'\n     || lk == 70425                 // '{' 'following'\n     || lk == 70937                 // '{' 'following-sibling'\n     || lk == 71449                 // '{' 'for'\n     || lk == 72985                 // '{' 'from'\n     || lk == 73497                 // '{' 'ft-option'\n     || lk == 75545                 // '{' 'function'\n     || lk == 76057                 // '{' 'ge'\n     || lk == 77081                 // '{' 'group'\n     || lk == 78105                 // '{' 'gt'\n     || lk == 78617                 // '{' 'idiv'\n     || lk == 79129                 // '{' 'if'\n     || lk == 79641                 // '{' 'import'\n     || lk == 80153                 // '{' 'in'\n     || lk == 80665                 // '{' 'index'\n     || lk == 82713                 // '{' 'insert'\n     || lk == 83225                 // '{' 'instance'\n     || lk == 83737                 // '{' 'integrity'\n     || lk == 84249                 // '{' 'intersect'\n     || lk == 84761                 // '{' 'into'\n     || lk == 85273                 // '{' 'is'\n     || lk == 85785                 // '{' 'item'\n     || lk == 86297                 // '{' 'json'\n     || lk == 86809                 // '{' 'json-item'\n     || lk == 87321                 // '{' 'jsoniq'\n     || lk == 88857                 // '{' 'last'\n     || lk == 89369                 // '{' 'lax'\n     || lk == 89881                 // '{' 'le'\n     || lk == 90905                 // '{' 'let'\n     || lk == 91929                 // '{' 'loop'\n     || lk == 92953                 // '{' 'lt'\n     || lk == 93977                 // '{' 'mod'\n     || lk == 94489                 // '{' 'modify'\n     || lk == 95001                 // '{' 'module'\n     || lk == 96025                 // '{' 'namespace'\n     || lk == 96537                 // '{' 'namespace-node'\n     || lk == 97049                 // '{' 'ne'\n     || lk == 99609                 // '{' 'node'\n     || lk == 100121                // '{' 'nodes'\n     || lk == 100633                // '{' 'not'\n     || lk == 101145                // '{' 'null'\n     || lk == 101657                // '{' 'object'\n     || lk == 103705                // '{' 'only'\n     || lk == 104217                // '{' 'option'\n     || lk == 104729                // '{' 'or'\n     || lk == 105241                // '{' 'order'\n     || lk == 105753                // '{' 'ordered'\n     || lk == 106265                // '{' 'ordering'\n     || lk == 107801                // '{' 'parent'\n     || lk == 110873                // '{' 'preceding'\n     || lk == 111385                // '{' 'preceding-sibling'\n     || lk == 112921                // '{' 'processing-instruction'\n     || lk == 113945                // '{' 'rename'\n     || lk == 114457                // '{' 'replace'\n     || lk == 114969                // '{' 'return'\n     || lk == 115481                // '{' 'returning'\n     || lk == 115993                // '{' 'revalidation'\n     || lk == 117017                // '{' 'satisfies'\n     || lk == 117529                // '{' 'schema'\n     || lk == 118041                // '{' 'schema-attribute'\n     || lk == 118553                // '{' 'schema-element'\n     || lk == 119065                // '{' 'score'\n     || lk == 119577                // '{' 'select'\n     || lk == 120089                // '{' 'self'\n     || lk == 122649                // '{' 'sliding'\n     || lk == 123161                // '{' 'some'\n     || lk == 123673                // '{' 'stable'\n     || lk == 124185                // '{' 'start'\n     || lk == 125721                // '{' 'strict'\n     || lk == 126745                // '{' 'structured-item'\n     || lk == 127257                // '{' 'switch'\n     || lk == 127769                // '{' 'text'\n     || lk == 129817                // '{' 'to'\n     || lk == 130329                // '{' 'treat'\n     || lk == 130841                // '{' 'true'\n     || lk == 131353                // '{' 'try'\n     || lk == 131865                // '{' 'tumbling'\n     || lk == 132377                // '{' 'type'\n     || lk == 132889                // '{' 'typeswitch'\n     || lk == 133401                // '{' 'union'\n     || lk == 134425                // '{' 'unordered'\n     || lk == 134937                // '{' 'updating'\n     || lk == 136473                // '{' 'validate'\n     || lk == 136985                // '{' 'value'\n     || lk == 137497                // '{' 'variable'\n     || lk == 138009                // '{' 'version'\n     || lk == 139545                // '{' 'where'\n     || lk == 140057                // '{' 'while'\n     || lk == 141593                // '{' 'with'\n     || lk == 144153                // '{' '{'\n     || lk == 145177                // '{' '{|'\n     || lk == 147225)               // '{' '}'\n    {\n      lk = memoized(20, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_Literal();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_FunctionCall();\n            lk = -5;\n          }\n          catch (p5A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockExpr();\n              lk = -10;\n            }\n            catch (p10A)\n            {\n              lk = -11;\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(20, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 12935:                     // 'false' EOF\n    case 12997:                     // 'null' EOF\n    case 13055:                     // 'true' EOF\n    case 13447:                     // 'false' '!'\n    case 13509:                     // 'null' '!'\n    case 13567:                     // 'true' '!'\n    case 13959:                     // 'false' '!='\n    case 14021:                     // 'null' '!='\n    case 14079:                     // 'true' '!='\n    case 19591:                     // 'false' ')'\n    case 19653:                     // 'null' ')'\n    case 19711:                     // 'true' ')'\n    case 20103:                     // 'false' '*'\n    case 20165:                     // 'null' '*'\n    case 20223:                     // 'true' '*'\n    case 21127:                     // 'false' '+'\n    case 21189:                     // 'null' '+'\n    case 21247:                     // 'true' '+'\n    case 21639:                     // 'false' ','\n    case 21701:                     // 'null' ','\n    case 21759:                     // 'true' ','\n    case 22151:                     // 'false' '-'\n    case 22213:                     // 'null' '-'\n    case 22271:                     // 'true' '-'\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 24199:                     // 'false' '/'\n    case 24261:                     // 'null' '/'\n    case 24319:                     // 'true' '/'\n    case 24711:                     // 'false' '//'\n    case 24773:                     // 'null' '//'\n    case 24831:                     // 'true' '//'\n    case 25735:                     // 'false' ':'\n    case 25797:                     // 'null' ':'\n    case 25855:                     // 'true' ':'\n    case 27783:                     // 'false' ';'\n    case 27845:                     // 'null' ';'\n    case 27903:                     // 'true' ';'\n    case 28295:                     // 'false' '<'\n    case 28357:                     // 'null' '<'\n    case 28415:                     // 'true' '<'\n    case 29831:                     // 'false' '<<'\n    case 29893:                     // 'null' '<<'\n    case 29951:                     // 'true' '<<'\n    case 30343:                     // 'false' '<='\n    case 30405:                     // 'null' '<='\n    case 30463:                     // 'true' '<='\n    case 31367:                     // 'false' '='\n    case 31429:                     // 'null' '='\n    case 31487:                     // 'true' '='\n    case 31879:                     // 'false' '>'\n    case 31941:                     // 'null' '>'\n    case 31999:                     // 'true' '>'\n    case 32391:                     // 'false' '>='\n    case 32453:                     // 'null' '>='\n    case 32511:                     // 'true' '>='\n    case 32903:                     // 'false' '>>'\n    case 32965:                     // 'null' '>>'\n    case 33023:                     // 'true' '>>'\n    case 35463:                     // 'false' '['\n    case 35525:                     // 'null' '['\n    case 35583:                     // 'true' '['\n    case 35975:                     // 'false' ']'\n    case 36037:                     // 'null' ']'\n    case 36095:                     // 'true' ']'\n    case 36487:                     // 'false' 'after'\n    case 36549:                     // 'null' 'after'\n    case 36607:                     // 'true' 'after'\n    case 39047:                     // 'false' 'and'\n    case 39109:                     // 'null' 'and'\n    case 39167:                     // 'true' 'and'\n    case 41095:                     // 'false' 'as'\n    case 41157:                     // 'null' 'as'\n    case 41215:                     // 'true' 'as'\n    case 41607:                     // 'false' 'ascending'\n    case 41669:                     // 'null' 'ascending'\n    case 41727:                     // 'true' 'ascending'\n    case 42119:                     // 'false' 'at'\n    case 42181:                     // 'null' 'at'\n    case 42239:                     // 'true' 'at'\n    case 43655:                     // 'false' 'before'\n    case 43717:                     // 'null' 'before'\n    case 43775:                     // 'true' 'before'\n    case 45191:                     // 'false' 'by'\n    case 45253:                     // 'null' 'by'\n    case 45311:                     // 'true' 'by'\n    case 45703:                     // 'false' 'case'\n    case 45765:                     // 'null' 'case'\n    case 45823:                     // 'true' 'case'\n    case 46215:                     // 'false' 'cast'\n    case 46277:                     // 'null' 'cast'\n    case 46335:                     // 'true' 'cast'\n    case 46727:                     // 'false' 'castable'\n    case 46789:                     // 'null' 'castable'\n    case 46847:                     // 'true' 'castable'\n    case 48775:                     // 'false' 'collation'\n    case 48837:                     // 'null' 'collation'\n    case 48895:                     // 'true' 'collation'\n    case 51335:                     // 'false' 'contains'\n    case 51397:                     // 'null' 'contains'\n    case 51455:                     // 'true' 'contains'\n    case 54407:                     // 'false' 'count'\n    case 54469:                     // 'null' 'count'\n    case 54527:                     // 'true' 'count'\n    case 56455:                     // 'false' 'default'\n    case 56517:                     // 'null' 'default'\n    case 56575:                     // 'true' 'default'\n    case 58503:                     // 'false' 'descending'\n    case 58565:                     // 'null' 'descending'\n    case 58623:                     // 'true' 'descending'\n    case 61063:                     // 'false' 'div'\n    case 61125:                     // 'null' 'div'\n    case 61183:                     // 'true' 'div'\n    case 63111:                     // 'false' 'else'\n    case 63173:                     // 'null' 'else'\n    case 63231:                     // 'true' 'else'\n    case 63623:                     // 'false' 'empty'\n    case 63685:                     // 'null' 'empty'\n    case 63743:                     // 'true' 'empty'\n    case 65159:                     // 'false' 'end'\n    case 65221:                     // 'null' 'end'\n    case 65279:                     // 'true' 'end'\n    case 66183:                     // 'false' 'eq'\n    case 66245:                     // 'null' 'eq'\n    case 66303:                     // 'true' 'eq'\n    case 67719:                     // 'false' 'except'\n    case 67781:                     // 'null' 'except'\n    case 67839:                     // 'true' 'except'\n    case 71303:                     // 'false' 'for'\n    case 71365:                     // 'null' 'for'\n    case 71423:                     // 'true' 'for'\n    case 75911:                     // 'false' 'ge'\n    case 75973:                     // 'null' 'ge'\n    case 76031:                     // 'true' 'ge'\n    case 76935:                     // 'false' 'group'\n    case 76997:                     // 'null' 'group'\n    case 77055:                     // 'true' 'group'\n    case 77959:                     // 'false' 'gt'\n    case 78021:                     // 'null' 'gt'\n    case 78079:                     // 'true' 'gt'\n    case 78471:                     // 'false' 'idiv'\n    case 78533:                     // 'null' 'idiv'\n    case 78591:                     // 'true' 'idiv'\n    case 83079:                     // 'false' 'instance'\n    case 83141:                     // 'null' 'instance'\n    case 83199:                     // 'true' 'instance'\n    case 84103:                     // 'false' 'intersect'\n    case 84165:                     // 'null' 'intersect'\n    case 84223:                     // 'true' 'intersect'\n    case 84615:                     // 'false' 'into'\n    case 84677:                     // 'null' 'into'\n    case 84735:                     // 'true' 'into'\n    case 85127:                     // 'false' 'is'\n    case 85189:                     // 'null' 'is'\n    case 85247:                     // 'true' 'is'\n    case 89735:                     // 'false' 'le'\n    case 89797:                     // 'null' 'le'\n    case 89855:                     // 'true' 'le'\n    case 90759:                     // 'false' 'let'\n    case 90821:                     // 'null' 'let'\n    case 90879:                     // 'true' 'let'\n    case 92807:                     // 'false' 'lt'\n    case 92869:                     // 'null' 'lt'\n    case 92927:                     // 'true' 'lt'\n    case 93831:                     // 'false' 'mod'\n    case 93893:                     // 'null' 'mod'\n    case 93951:                     // 'true' 'mod'\n    case 94343:                     // 'false' 'modify'\n    case 94405:                     // 'null' 'modify'\n    case 94463:                     // 'true' 'modify'\n    case 96903:                     // 'false' 'ne'\n    case 96965:                     // 'null' 'ne'\n    case 97023:                     // 'true' 'ne'\n    case 103559:                    // 'false' 'only'\n    case 103621:                    // 'null' 'only'\n    case 103679:                    // 'true' 'only'\n    case 104583:                    // 'false' 'or'\n    case 104645:                    // 'null' 'or'\n    case 104703:                    // 'true' 'or'\n    case 105095:                    // 'false' 'order'\n    case 105157:                    // 'null' 'order'\n    case 105215:                    // 'true' 'order'\n    case 107143:                    // 'false' 'paragraphs'\n    case 107205:                    // 'null' 'paragraphs'\n    case 107263:                    // 'true' 'paragraphs'\n    case 114823:                    // 'false' 'return'\n    case 114885:                    // 'null' 'return'\n    case 114943:                    // 'true' 'return'\n    case 116871:                    // 'false' 'satisfies'\n    case 116933:                    // 'null' 'satisfies'\n    case 116991:                    // 'true' 'satisfies'\n    case 121479:                    // 'false' 'sentences'\n    case 121541:                    // 'null' 'sentences'\n    case 121599:                    // 'true' 'sentences'\n    case 123527:                    // 'false' 'stable'\n    case 123589:                    // 'null' 'stable'\n    case 123647:                    // 'true' 'stable'\n    case 124039:                    // 'false' 'start'\n    case 124101:                    // 'null' 'start'\n    case 124159:                    // 'true' 'start'\n    case 129159:                    // 'false' 'times'\n    case 129221:                    // 'null' 'times'\n    case 129279:                    // 'true' 'times'\n    case 129671:                    // 'false' 'to'\n    case 129733:                    // 'null' 'to'\n    case 129791:                    // 'true' 'to'\n    case 130183:                    // 'false' 'treat'\n    case 130245:                    // 'null' 'treat'\n    case 130303:                    // 'true' 'treat'\n    case 133255:                    // 'false' 'union'\n    case 133317:                    // 'null' 'union'\n    case 133375:                    // 'true' 'union'\n    case 139399:                    // 'false' 'where'\n    case 139461:                    // 'null' 'where'\n    case 139519:                    // 'true' 'where'\n    case 141447:                    // 'false' 'with'\n    case 141509:                    // 'null' 'with'\n    case 141567:                    // 'true' 'with'\n    case 142983:                    // 'false' 'words'\n    case 143045:                    // 'null' 'words'\n    case 143103:                    // 'true' 'words'\n    case 145543:                    // 'false' '|'\n    case 145605:                    // 'null' '|'\n    case 145663:                    // 'true' '|'\n    case 146055:                    // 'false' '||'\n    case 146117:                    // 'null' '||'\n    case 146175:                    // 'true' '||'\n    case 146567:                    // 'false' '|}'\n    case 146629:                    // 'null' '|}'\n    case 146687:                    // 'true' '|}'\n    case 147079:                    // 'false' '}'\n    case 147141:                    // 'null' '}'\n    case 147199:                    // 'true' '}'\n      parse_Literal();\n      break;\n    case 31:                        // '$'\n      parse_VarRef();\n      break;\n    case 35:                        // '('\n      parse_ParenthesizedExpr();\n      break;\n    case 32:                        // '$$'\n      parse_ContextItemExpr();\n      break;\n    case -5:\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n      parse_FunctionCall();\n      break;\n    case 144078:                    // 'ordered' '{'\n      parse_OrderedExpr();\n      break;\n    case 144134:                    // 'unordered' '{'\n      parse_UnorderedExpr();\n      break;\n    case 33:                        // '%'\n    case 79:                        // 'array'\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 147:                       // 'function'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15016:                     // 'json' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15037:                     // 'ne' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n      parse_FunctionItemExpr();\n      break;\n    case -10:\n    case 27929:                     // '{' ';'\n      parse_BlockExpr();\n      break;\n    case -11:\n    case 10009:                     // '{' NCName^Token\n      parse_ObjectConstructor();\n      break;\n    case 69:                        // '['\n      parse_ArrayConstructor();\n      break;\n    case 283:                       // '{|'\n      parse_JSONSimpleObjectUnion();\n      break;\n    default:\n      parse_Constructor();\n    }\n    eventHandler.endNonterminal(\"PrimaryExpr\", e0);\n  }\n\n  function try_PrimaryExpr()\n  {\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      lookahead2W(246);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(244);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(252);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(97);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 262:                       // 'unordered'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3353                  // '{' EQName^Token\n     || lk == 4377                  // '{' IntegerLiteral\n     || lk == 4889                  // '{' DecimalLiteral\n     || lk == 5401                  // '{' DoubleLiteral\n     || lk == 5913                  // '{' StringLiteral\n     || lk == 16153                 // '{' '$'\n     || lk == 16665                 // '{' '$$'\n     || lk == 17177                 // '{' '%'\n     || lk == 18055                 // 'false' '('\n     || lk == 18117                 // 'null' '('\n     || lk == 18175                 // 'true' '('\n     || lk == 18201                 // '{' '('\n     || lk == 18713                 // '{' '(#'\n     || lk == 21273                 // '{' '+'\n     || lk == 22297                 // '{' '-'\n     || lk == 24345                 // '{' '/'\n     || lk == 24857                 // '{' '//'\n     || lk == 28441                 // '{' '<'\n     || lk == 28953                 // '{' '<!--'\n     || lk == 31001                 // '{' '<?'\n     || lk == 35609                 // '{' '['\n     || lk == 36633                 // '{' 'after'\n     || lk == 37657                 // '{' 'allowing'\n     || lk == 38169                 // '{' 'ancestor'\n     || lk == 38681                 // '{' 'ancestor-or-self'\n     || lk == 39193                 // '{' 'and'\n     || lk == 40217                 // '{' 'append'\n     || lk == 40729                 // '{' 'array'\n     || lk == 41241                 // '{' 'as'\n     || lk == 41753                 // '{' 'ascending'\n     || lk == 42265                 // '{' 'at'\n     || lk == 42777                 // '{' 'attribute'\n     || lk == 43289                 // '{' 'base-uri'\n     || lk == 43801                 // '{' 'before'\n     || lk == 44313                 // '{' 'boundary-space'\n     || lk == 44825                 // '{' 'break'\n     || lk == 45849                 // '{' 'case'\n     || lk == 46361                 // '{' 'cast'\n     || lk == 46873                 // '{' 'castable'\n     || lk == 47385                 // '{' 'catch'\n     || lk == 48409                 // '{' 'child'\n     || lk == 48921                 // '{' 'collation'\n     || lk == 49945                 // '{' 'comment'\n     || lk == 50457                 // '{' 'constraint'\n     || lk == 50969                 // '{' 'construction'\n     || lk == 52505                 // '{' 'context'\n     || lk == 53017                 // '{' 'continue'\n     || lk == 53529                 // '{' 'copy'\n     || lk == 54041                 // '{' 'copy-namespaces'\n     || lk == 54553                 // '{' 'count'\n     || lk == 55065                 // '{' 'decimal-format'\n     || lk == 56089                 // '{' 'declare'\n     || lk == 56601                 // '{' 'default'\n     || lk == 57113                 // '{' 'delete'\n     || lk == 57625                 // '{' 'descendant'\n     || lk == 58137                 // '{' 'descendant-or-self'\n     || lk == 58649                 // '{' 'descending'\n     || lk == 61209                 // '{' 'div'\n     || lk == 61721                 // '{' 'document'\n     || lk == 62233                 // '{' 'document-node'\n     || lk == 62745                 // '{' 'element'\n     || lk == 63257                 // '{' 'else'\n     || lk == 63769                 // '{' 'empty'\n     || lk == 64281                 // '{' 'empty-sequence'\n     || lk == 64793                 // '{' 'encoding'\n     || lk == 65305                 // '{' 'end'\n     || lk == 66329                 // '{' 'eq'\n     || lk == 66841                 // '{' 'every'\n     || lk == 67865                 // '{' 'except'\n     || lk == 68377                 // '{' 'exit'\n     || lk == 68889                 // '{' 'external'\n     || lk == 69401                 // '{' 'false'\n     || lk == 69913                 // '{' 'first'\n     || lk == 70425                 // '{' 'following'\n     || lk == 70937                 // '{' 'following-sibling'\n     || lk == 71449                 // '{' 'for'\n     || lk == 72985                 // '{' 'from'\n     || lk == 73497                 // '{' 'ft-option'\n     || lk == 75545                 // '{' 'function'\n     || lk == 76057                 // '{' 'ge'\n     || lk == 77081                 // '{' 'group'\n     || lk == 78105                 // '{' 'gt'\n     || lk == 78617                 // '{' 'idiv'\n     || lk == 79129                 // '{' 'if'\n     || lk == 79641                 // '{' 'import'\n     || lk == 80153                 // '{' 'in'\n     || lk == 80665                 // '{' 'index'\n     || lk == 82713                 // '{' 'insert'\n     || lk == 83225                 // '{' 'instance'\n     || lk == 83737                 // '{' 'integrity'\n     || lk == 84249                 // '{' 'intersect'\n     || lk == 84761                 // '{' 'into'\n     || lk == 85273                 // '{' 'is'\n     || lk == 85785                 // '{' 'item'\n     || lk == 86297                 // '{' 'json'\n     || lk == 86809                 // '{' 'json-item'\n     || lk == 87321                 // '{' 'jsoniq'\n     || lk == 88857                 // '{' 'last'\n     || lk == 89369                 // '{' 'lax'\n     || lk == 89881                 // '{' 'le'\n     || lk == 90905                 // '{' 'let'\n     || lk == 91929                 // '{' 'loop'\n     || lk == 92953                 // '{' 'lt'\n     || lk == 93977                 // '{' 'mod'\n     || lk == 94489                 // '{' 'modify'\n     || lk == 95001                 // '{' 'module'\n     || lk == 96025                 // '{' 'namespace'\n     || lk == 96537                 // '{' 'namespace-node'\n     || lk == 97049                 // '{' 'ne'\n     || lk == 99609                 // '{' 'node'\n     || lk == 100121                // '{' 'nodes'\n     || lk == 100633                // '{' 'not'\n     || lk == 101145                // '{' 'null'\n     || lk == 101657                // '{' 'object'\n     || lk == 103705                // '{' 'only'\n     || lk == 104217                // '{' 'option'\n     || lk == 104729                // '{' 'or'\n     || lk == 105241                // '{' 'order'\n     || lk == 105753                // '{' 'ordered'\n     || lk == 106265                // '{' 'ordering'\n     || lk == 107801                // '{' 'parent'\n     || lk == 110873                // '{' 'preceding'\n     || lk == 111385                // '{' 'preceding-sibling'\n     || lk == 112921                // '{' 'processing-instruction'\n     || lk == 113945                // '{' 'rename'\n     || lk == 114457                // '{' 'replace'\n     || lk == 114969                // '{' 'return'\n     || lk == 115481                // '{' 'returning'\n     || lk == 115993                // '{' 'revalidation'\n     || lk == 117017                // '{' 'satisfies'\n     || lk == 117529                // '{' 'schema'\n     || lk == 118041                // '{' 'schema-attribute'\n     || lk == 118553                // '{' 'schema-element'\n     || lk == 119065                // '{' 'score'\n     || lk == 119577                // '{' 'select'\n     || lk == 120089                // '{' 'self'\n     || lk == 122649                // '{' 'sliding'\n     || lk == 123161                // '{' 'some'\n     || lk == 123673                // '{' 'stable'\n     || lk == 124185                // '{' 'start'\n     || lk == 125721                // '{' 'strict'\n     || lk == 126745                // '{' 'structured-item'\n     || lk == 127257                // '{' 'switch'\n     || lk == 127769                // '{' 'text'\n     || lk == 129817                // '{' 'to'\n     || lk == 130329                // '{' 'treat'\n     || lk == 130841                // '{' 'true'\n     || lk == 131353                // '{' 'try'\n     || lk == 131865                // '{' 'tumbling'\n     || lk == 132377                // '{' 'type'\n     || lk == 132889                // '{' 'typeswitch'\n     || lk == 133401                // '{' 'union'\n     || lk == 134425                // '{' 'unordered'\n     || lk == 134937                // '{' 'updating'\n     || lk == 136473                // '{' 'validate'\n     || lk == 136985                // '{' 'value'\n     || lk == 137497                // '{' 'variable'\n     || lk == 138009                // '{' 'version'\n     || lk == 139545                // '{' 'where'\n     || lk == 140057                // '{' 'while'\n     || lk == 141593                // '{' 'with'\n     || lk == 144153                // '{' '{'\n     || lk == 145177                // '{' '{|'\n     || lk == 147225)               // '{' '}'\n    {\n      lk = memoized(20, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_Literal();\n          memoize(20, e0A, -1);\n          lk = -14;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_FunctionCall();\n            memoize(20, e0A, -5);\n            lk = -14;\n          }\n          catch (p5A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockExpr();\n              memoize(20, e0A, -10);\n              lk = -14;\n            }\n            catch (p10A)\n            {\n              lk = -11;\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              memoize(20, e0A, -11);\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 12935:                     // 'false' EOF\n    case 12997:                     // 'null' EOF\n    case 13055:                     // 'true' EOF\n    case 13447:                     // 'false' '!'\n    case 13509:                     // 'null' '!'\n    case 13567:                     // 'true' '!'\n    case 13959:                     // 'false' '!='\n    case 14021:                     // 'null' '!='\n    case 14079:                     // 'true' '!='\n    case 19591:                     // 'false' ')'\n    case 19653:                     // 'null' ')'\n    case 19711:                     // 'true' ')'\n    case 20103:                     // 'false' '*'\n    case 20165:                     // 'null' '*'\n    case 20223:                     // 'true' '*'\n    case 21127:                     // 'false' '+'\n    case 21189:                     // 'null' '+'\n    case 21247:                     // 'true' '+'\n    case 21639:                     // 'false' ','\n    case 21701:                     // 'null' ','\n    case 21759:                     // 'true' ','\n    case 22151:                     // 'false' '-'\n    case 22213:                     // 'null' '-'\n    case 22271:                     // 'true' '-'\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 24199:                     // 'false' '/'\n    case 24261:                     // 'null' '/'\n    case 24319:                     // 'true' '/'\n    case 24711:                     // 'false' '//'\n    case 24773:                     // 'null' '//'\n    case 24831:                     // 'true' '//'\n    case 25735:                     // 'false' ':'\n    case 25797:                     // 'null' ':'\n    case 25855:                     // 'true' ':'\n    case 27783:                     // 'false' ';'\n    case 27845:                     // 'null' ';'\n    case 27903:                     // 'true' ';'\n    case 28295:                     // 'false' '<'\n    case 28357:                     // 'null' '<'\n    case 28415:                     // 'true' '<'\n    case 29831:                     // 'false' '<<'\n    case 29893:                     // 'null' '<<'\n    case 29951:                     // 'true' '<<'\n    case 30343:                     // 'false' '<='\n    case 30405:                     // 'null' '<='\n    case 30463:                     // 'true' '<='\n    case 31367:                     // 'false' '='\n    case 31429:                     // 'null' '='\n    case 31487:                     // 'true' '='\n    case 31879:                     // 'false' '>'\n    case 31941:                     // 'null' '>'\n    case 31999:                     // 'true' '>'\n    case 32391:                     // 'false' '>='\n    case 32453:                     // 'null' '>='\n    case 32511:                     // 'true' '>='\n    case 32903:                     // 'false' '>>'\n    case 32965:                     // 'null' '>>'\n    case 33023:                     // 'true' '>>'\n    case 35463:                     // 'false' '['\n    case 35525:                     // 'null' '['\n    case 35583:                     // 'true' '['\n    case 35975:                     // 'false' ']'\n    case 36037:                     // 'null' ']'\n    case 36095:                     // 'true' ']'\n    case 36487:                     // 'false' 'after'\n    case 36549:                     // 'null' 'after'\n    case 36607:                     // 'true' 'after'\n    case 39047:                     // 'false' 'and'\n    case 39109:                     // 'null' 'and'\n    case 39167:                     // 'true' 'and'\n    case 41095:                     // 'false' 'as'\n    case 41157:                     // 'null' 'as'\n    case 41215:                     // 'true' 'as'\n    case 41607:                     // 'false' 'ascending'\n    case 41669:                     // 'null' 'ascending'\n    case 41727:                     // 'true' 'ascending'\n    case 42119:                     // 'false' 'at'\n    case 42181:                     // 'null' 'at'\n    case 42239:                     // 'true' 'at'\n    case 43655:                     // 'false' 'before'\n    case 43717:                     // 'null' 'before'\n    case 43775:                     // 'true' 'before'\n    case 45191:                     // 'false' 'by'\n    case 45253:                     // 'null' 'by'\n    case 45311:                     // 'true' 'by'\n    case 45703:                     // 'false' 'case'\n    case 45765:                     // 'null' 'case'\n    case 45823:                     // 'true' 'case'\n    case 46215:                     // 'false' 'cast'\n    case 46277:                     // 'null' 'cast'\n    case 46335:                     // 'true' 'cast'\n    case 46727:                     // 'false' 'castable'\n    case 46789:                     // 'null' 'castable'\n    case 46847:                     // 'true' 'castable'\n    case 48775:                     // 'false' 'collation'\n    case 48837:                     // 'null' 'collation'\n    case 48895:                     // 'true' 'collation'\n    case 51335:                     // 'false' 'contains'\n    case 51397:                     // 'null' 'contains'\n    case 51455:                     // 'true' 'contains'\n    case 54407:                     // 'false' 'count'\n    case 54469:                     // 'null' 'count'\n    case 54527:                     // 'true' 'count'\n    case 56455:                     // 'false' 'default'\n    case 56517:                     // 'null' 'default'\n    case 56575:                     // 'true' 'default'\n    case 58503:                     // 'false' 'descending'\n    case 58565:                     // 'null' 'descending'\n    case 58623:                     // 'true' 'descending'\n    case 61063:                     // 'false' 'div'\n    case 61125:                     // 'null' 'div'\n    case 61183:                     // 'true' 'div'\n    case 63111:                     // 'false' 'else'\n    case 63173:                     // 'null' 'else'\n    case 63231:                     // 'true' 'else'\n    case 63623:                     // 'false' 'empty'\n    case 63685:                     // 'null' 'empty'\n    case 63743:                     // 'true' 'empty'\n    case 65159:                     // 'false' 'end'\n    case 65221:                     // 'null' 'end'\n    case 65279:                     // 'true' 'end'\n    case 66183:                     // 'false' 'eq'\n    case 66245:                     // 'null' 'eq'\n    case 66303:                     // 'true' 'eq'\n    case 67719:                     // 'false' 'except'\n    case 67781:                     // 'null' 'except'\n    case 67839:                     // 'true' 'except'\n    case 71303:                     // 'false' 'for'\n    case 71365:                     // 'null' 'for'\n    case 71423:                     // 'true' 'for'\n    case 75911:                     // 'false' 'ge'\n    case 75973:                     // 'null' 'ge'\n    case 76031:                     // 'true' 'ge'\n    case 76935:                     // 'false' 'group'\n    case 76997:                     // 'null' 'group'\n    case 77055:                     // 'true' 'group'\n    case 77959:                     // 'false' 'gt'\n    case 78021:                     // 'null' 'gt'\n    case 78079:                     // 'true' 'gt'\n    case 78471:                     // 'false' 'idiv'\n    case 78533:                     // 'null' 'idiv'\n    case 78591:                     // 'true' 'idiv'\n    case 83079:                     // 'false' 'instance'\n    case 83141:                     // 'null' 'instance'\n    case 83199:                     // 'true' 'instance'\n    case 84103:                     // 'false' 'intersect'\n    case 84165:                     // 'null' 'intersect'\n    case 84223:                     // 'true' 'intersect'\n    case 84615:                     // 'false' 'into'\n    case 84677:                     // 'null' 'into'\n    case 84735:                     // 'true' 'into'\n    case 85127:                     // 'false' 'is'\n    case 85189:                     // 'null' 'is'\n    case 85247:                     // 'true' 'is'\n    case 89735:                     // 'false' 'le'\n    case 89797:                     // 'null' 'le'\n    case 89855:                     // 'true' 'le'\n    case 90759:                     // 'false' 'let'\n    case 90821:                     // 'null' 'let'\n    case 90879:                     // 'true' 'let'\n    case 92807:                     // 'false' 'lt'\n    case 92869:                     // 'null' 'lt'\n    case 92927:                     // 'true' 'lt'\n    case 93831:                     // 'false' 'mod'\n    case 93893:                     // 'null' 'mod'\n    case 93951:                     // 'true' 'mod'\n    case 94343:                     // 'false' 'modify'\n    case 94405:                     // 'null' 'modify'\n    case 94463:                     // 'true' 'modify'\n    case 96903:                     // 'false' 'ne'\n    case 96965:                     // 'null' 'ne'\n    case 97023:                     // 'true' 'ne'\n    case 103559:                    // 'false' 'only'\n    case 103621:                    // 'null' 'only'\n    case 103679:                    // 'true' 'only'\n    case 104583:                    // 'false' 'or'\n    case 104645:                    // 'null' 'or'\n    case 104703:                    // 'true' 'or'\n    case 105095:                    // 'false' 'order'\n    case 105157:                    // 'null' 'order'\n    case 105215:                    // 'true' 'order'\n    case 107143:                    // 'false' 'paragraphs'\n    case 107205:                    // 'null' 'paragraphs'\n    case 107263:                    // 'true' 'paragraphs'\n    case 114823:                    // 'false' 'return'\n    case 114885:                    // 'null' 'return'\n    case 114943:                    // 'true' 'return'\n    case 116871:                    // 'false' 'satisfies'\n    case 116933:                    // 'null' 'satisfies'\n    case 116991:                    // 'true' 'satisfies'\n    case 121479:                    // 'false' 'sentences'\n    case 121541:                    // 'null' 'sentences'\n    case 121599:                    // 'true' 'sentences'\n    case 123527:                    // 'false' 'stable'\n    case 123589:                    // 'null' 'stable'\n    case 123647:                    // 'true' 'stable'\n    case 124039:                    // 'false' 'start'\n    case 124101:                    // 'null' 'start'\n    case 124159:                    // 'true' 'start'\n    case 129159:                    // 'false' 'times'\n    case 129221:                    // 'null' 'times'\n    case 129279:                    // 'true' 'times'\n    case 129671:                    // 'false' 'to'\n    case 129733:                    // 'null' 'to'\n    case 129791:                    // 'true' 'to'\n    case 130183:                    // 'false' 'treat'\n    case 130245:                    // 'null' 'treat'\n    case 130303:                    // 'true' 'treat'\n    case 133255:                    // 'false' 'union'\n    case 133317:                    // 'null' 'union'\n    case 133375:                    // 'true' 'union'\n    case 139399:                    // 'false' 'where'\n    case 139461:                    // 'null' 'where'\n    case 139519:                    // 'true' 'where'\n    case 141447:                    // 'false' 'with'\n    case 141509:                    // 'null' 'with'\n    case 141567:                    // 'true' 'with'\n    case 142983:                    // 'false' 'words'\n    case 143045:                    // 'null' 'words'\n    case 143103:                    // 'true' 'words'\n    case 145543:                    // 'false' '|'\n    case 145605:                    // 'null' '|'\n    case 145663:                    // 'true' '|'\n    case 146055:                    // 'false' '||'\n    case 146117:                    // 'null' '||'\n    case 146175:                    // 'true' '||'\n    case 146567:                    // 'false' '|}'\n    case 146629:                    // 'null' '|}'\n    case 146687:                    // 'true' '|}'\n    case 147079:                    // 'false' '}'\n    case 147141:                    // 'null' '}'\n    case 147199:                    // 'true' '}'\n      try_Literal();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 35:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 32:                        // '$$'\n      try_ContextItemExpr();\n      break;\n    case -5:\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n      try_FunctionCall();\n      break;\n    case 144078:                    // 'ordered' '{'\n      try_OrderedExpr();\n      break;\n    case 144134:                    // 'unordered' '{'\n      try_UnorderedExpr();\n      break;\n    case 33:                        // '%'\n    case 79:                        // 'array'\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 147:                       // 'function'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15016:                     // 'json' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15037:                     // 'ne' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n      try_FunctionItemExpr();\n      break;\n    case -10:\n    case 27929:                     // '{' ';'\n      try_BlockExpr();\n      break;\n    case -11:\n    case 10009:                     // '{' NCName^Token\n      try_ObjectConstructor();\n      break;\n    case 69:                        // '['\n      try_ArrayConstructor();\n      break;\n    case 283:                       // '{|'\n      try_JSONSimpleObjectUnion();\n      break;\n    case -14:\n      break;\n    default:\n      try_Constructor();\n    }\n  }\n\n  function parse_JSONSimpleObjectUnion()\n  {\n    eventHandler.startNonterminal(\"JSONSimpleObjectUnion\", e0);\n    shift(283);                     // '{|'\n    lookahead1W(273);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 286)                  // '|}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(286);                     // '|}'\n    eventHandler.endNonterminal(\"JSONSimpleObjectUnion\", e0);\n  }\n\n  function try_JSONSimpleObjectUnion()\n  {\n    shiftT(283);                    // '{|'\n    lookahead1W(273);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 286)                  // '|}'\n    {\n      try_Expr();\n    }\n    shiftT(286);                    // '|}'\n  }\n\n  function parse_ObjectConstructor()\n  {\n    eventHandler.startNonterminal(\"ObjectConstructor\", e0);\n    shift(281);                     // '{'\n    lookahead1W(276);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_PairConstructorList();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ObjectConstructor\", e0);\n  }\n\n  function try_ObjectConstructor()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(276);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      try_PairConstructorList();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_PairConstructorList()\n  {\n    eventHandler.startNonterminal(\"PairConstructorList\", e0);\n    parse_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PairConstructor();\n    }\n    eventHandler.endNonterminal(\"PairConstructorList\", e0);\n  }\n\n  function try_PairConstructorList()\n  {\n    try_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PairConstructor();\n    }\n  }\n\n  function parse_PairConstructor()\n  {\n    eventHandler.startNonterminal(\"PairConstructor\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(278);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 139:                       // 'for'\n      lookahead2W(187);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'sliding' | 'tumbling'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(281);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 177:                       // 'let'\n      lookahead2W(178);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'score'\n      break;\n    case 187:                       // 'namespace'\n      lookahead2W(251);             // NCName^Token | S^WS | '#' | '(' | '(:' | ':' | 'after' | 'allowing' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(247);             // NCName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(180);             // S^WS | '#' | '(' | '(:' | ':' | 'node' | 'value'\n      break;\n    case 266:                       // 'validate'\n      lookahead2W(191);             // S^WS | '#' | '(' | '(:' | ':' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(256);             // EQName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(149);             // S^WS | '#' | '(:' | ':' | '{'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(261);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(165);             // S^WS | '#' | '$' | '(' | '(:' | ':'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(208);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '.' | '/' | '//' | ':' |\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 256:                       // 'try'\n    case 262:                       // 'unordered'\n      lookahead2W(167);             // S^WS | '#' | '(' | '(:' | ':' | '{'\n      break;\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 167:                       // 'item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n      lookahead2W(96);              // S^WS | '#' | '(:' | ':'\n      break;\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 154:                       // 'if'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 248:                       // 'switch'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 259:                       // 'typeswitch'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(144);             // S^WS | '#' | '(' | '(:' | ':'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855)                // 'true' ':'\n    {\n      lk = memoized(21, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ExprSingle();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(21, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n    case 19:                        // NCName^Token\n    case 25671:                     // 'after' ':'\n    case 25673:                     // 'allowing' ':'\n    case 25674:                     // 'ancestor' ':'\n    case 25675:                     // 'ancestor-or-self' ':'\n    case 25676:                     // 'and' ':'\n    case 25678:                     // 'append' ':'\n    case 25680:                     // 'as' ':'\n    case 25681:                     // 'ascending' ':'\n    case 25682:                     // 'at' ':'\n    case 25683:                     // 'attribute' ':'\n    case 25684:                     // 'base-uri' ':'\n    case 25685:                     // 'before' ':'\n    case 25686:                     // 'boundary-space' ':'\n    case 25687:                     // 'break' ':'\n    case 25689:                     // 'case' ':'\n    case 25690:                     // 'cast' ':'\n    case 25691:                     // 'castable' ':'\n    case 25692:                     // 'catch' ':'\n    case 25694:                     // 'child' ':'\n    case 25695:                     // 'collation' ':'\n    case 25697:                     // 'comment' ':'\n    case 25698:                     // 'constraint' ':'\n    case 25699:                     // 'construction' ':'\n    case 25702:                     // 'context' ':'\n    case 25703:                     // 'continue' ':'\n    case 25704:                     // 'copy' ':'\n    case 25705:                     // 'copy-namespaces' ':'\n    case 25706:                     // 'count' ':'\n    case 25707:                     // 'decimal-format' ':'\n    case 25709:                     // 'declare' ':'\n    case 25710:                     // 'default' ':'\n    case 25711:                     // 'delete' ':'\n    case 25712:                     // 'descendant' ':'\n    case 25713:                     // 'descendant-or-self' ':'\n    case 25714:                     // 'descending' ':'\n    case 25719:                     // 'div' ':'\n    case 25720:                     // 'document' ':'\n    case 25721:                     // 'document-node' ':'\n    case 25722:                     // 'element' ':'\n    case 25723:                     // 'else' ':'\n    case 25724:                     // 'empty' ':'\n    case 25725:                     // 'empty-sequence' ':'\n    case 25726:                     // 'encoding' ':'\n    case 25727:                     // 'end' ':'\n    case 25729:                     // 'eq' ':'\n    case 25730:                     // 'every' ':'\n    case 25732:                     // 'except' ':'\n    case 25733:                     // 'exit' ':'\n    case 25734:                     // 'external' ':'\n    case 25736:                     // 'first' ':'\n    case 25737:                     // 'following' ':'\n    case 25738:                     // 'following-sibling' ':'\n    case 25739:                     // 'for' ':'\n    case 25742:                     // 'from' ':'\n    case 25743:                     // 'ft-option' ':'\n    case 25747:                     // 'function' ':'\n    case 25748:                     // 'ge' ':'\n    case 25750:                     // 'group' ':'\n    case 25752:                     // 'gt' ':'\n    case 25753:                     // 'idiv' ':'\n    case 25754:                     // 'if' ':'\n    case 25755:                     // 'import' ':'\n    case 25756:                     // 'in' ':'\n    case 25757:                     // 'index' ':'\n    case 25761:                     // 'insert' ':'\n    case 25762:                     // 'instance' ':'\n    case 25763:                     // 'integrity' ':'\n    case 25764:                     // 'intersect' ':'\n    case 25765:                     // 'into' ':'\n    case 25766:                     // 'is' ':'\n    case 25767:                     // 'item' ':'\n    case 25768:                     // 'json' ':'\n    case 25770:                     // 'jsoniq' ':'\n    case 25773:                     // 'last' ':'\n    case 25774:                     // 'lax' ':'\n    case 25775:                     // 'le' ':'\n    case 25777:                     // 'let' ':'\n    case 25779:                     // 'loop' ':'\n    case 25781:                     // 'lt' ':'\n    case 25783:                     // 'mod' ':'\n    case 25784:                     // 'modify' ':'\n    case 25785:                     // 'module' ':'\n    case 25787:                     // 'namespace' ':'\n    case 25788:                     // 'namespace-node' ':'\n    case 25789:                     // 'ne' ':'\n    case 25794:                     // 'node' ':'\n    case 25795:                     // 'nodes' ':'\n    case 25798:                     // 'object' ':'\n    case 25802:                     // 'only' ':'\n    case 25803:                     // 'option' ':'\n    case 25804:                     // 'or' ':'\n    case 25805:                     // 'order' ':'\n    case 25806:                     // 'ordered' ':'\n    case 25807:                     // 'ordering' ':'\n    case 25810:                     // 'parent' ':'\n    case 25816:                     // 'preceding' ':'\n    case 25817:                     // 'preceding-sibling' ':'\n    case 25820:                     // 'processing-instruction' ':'\n    case 25822:                     // 'rename' ':'\n    case 25823:                     // 'replace' ':'\n    case 25824:                     // 'return' ':'\n    case 25825:                     // 'returning' ':'\n    case 25826:                     // 'revalidation' ':'\n    case 25828:                     // 'satisfies' ':'\n    case 25829:                     // 'schema' ':'\n    case 25830:                     // 'schema-attribute' ':'\n    case 25831:                     // 'schema-element' ':'\n    case 25832:                     // 'score' ':'\n    case 25833:                     // 'select' ':'\n    case 25834:                     // 'self' ':'\n    case 25839:                     // 'sliding' ':'\n    case 25840:                     // 'some' ':'\n    case 25841:                     // 'stable' ':'\n    case 25842:                     // 'start' ':'\n    case 25845:                     // 'strict' ':'\n    case 25848:                     // 'switch' ':'\n    case 25849:                     // 'text' ':'\n    case 25853:                     // 'to' ':'\n    case 25854:                     // 'treat' ':'\n    case 25856:                     // 'try' ':'\n    case 25857:                     // 'tumbling' ':'\n    case 25858:                     // 'type' ':'\n    case 25859:                     // 'typeswitch' ':'\n    case 25860:                     // 'union' ':'\n    case 25862:                     // 'unordered' ':'\n    case 25863:                     // 'updating' ':'\n    case 25866:                     // 'validate' ':'\n    case 25867:                     // 'value' ':'\n    case 25868:                     // 'variable' ':'\n    case 25869:                     // 'version' ':'\n    case 25872:                     // 'where' ':'\n    case 25873:                     // 'while' ':'\n    case 25876:                     // 'with' ':'\n      parse_NCName();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    lookahead1W(26);                // S^WS | '(:' | ':'\n    shift(50);                      // ':'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"PairConstructor\", e0);\n  }\n\n  function try_PairConstructor()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(278);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 139:                       // 'for'\n      lookahead2W(187);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'sliding' | 'tumbling'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(281);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 177:                       // 'let'\n      lookahead2W(178);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'score'\n      break;\n    case 187:                       // 'namespace'\n      lookahead2W(251);             // NCName^Token | S^WS | '#' | '(' | '(:' | ':' | 'after' | 'allowing' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(247);             // NCName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(180);             // S^WS | '#' | '(' | '(:' | ':' | 'node' | 'value'\n      break;\n    case 266:                       // 'validate'\n      lookahead2W(191);             // S^WS | '#' | '(' | '(:' | ':' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(256);             // EQName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(149);             // S^WS | '#' | '(:' | ':' | '{'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(261);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(165);             // S^WS | '#' | '$' | '(' | '(:' | ':'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(208);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '.' | '/' | '//' | ':' |\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 256:                       // 'try'\n    case 262:                       // 'unordered'\n      lookahead2W(167);             // S^WS | '#' | '(' | '(:' | ':' | '{'\n      break;\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 167:                       // 'item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n      lookahead2W(96);              // S^WS | '#' | '(:' | ':'\n      break;\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 154:                       // 'if'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 248:                       // 'switch'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 259:                       // 'typeswitch'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(144);             // S^WS | '#' | '(' | '(:' | ':'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855)                // 'true' ':'\n    {\n      lk = memoized(21, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ExprSingle();\n          memoize(21, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(21, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n    case 19:                        // NCName^Token\n    case 25671:                     // 'after' ':'\n    case 25673:                     // 'allowing' ':'\n    case 25674:                     // 'ancestor' ':'\n    case 25675:                     // 'ancestor-or-self' ':'\n    case 25676:                     // 'and' ':'\n    case 25678:                     // 'append' ':'\n    case 25680:                     // 'as' ':'\n    case 25681:                     // 'ascending' ':'\n    case 25682:                     // 'at' ':'\n    case 25683:                     // 'attribute' ':'\n    case 25684:                     // 'base-uri' ':'\n    case 25685:                     // 'before' ':'\n    case 25686:                     // 'boundary-space' ':'\n    case 25687:                     // 'break' ':'\n    case 25689:                     // 'case' ':'\n    case 25690:                     // 'cast' ':'\n    case 25691:                     // 'castable' ':'\n    case 25692:                     // 'catch' ':'\n    case 25694:                     // 'child' ':'\n    case 25695:                     // 'collation' ':'\n    case 25697:                     // 'comment' ':'\n    case 25698:                     // 'constraint' ':'\n    case 25699:                     // 'construction' ':'\n    case 25702:                     // 'context' ':'\n    case 25703:                     // 'continue' ':'\n    case 25704:                     // 'copy' ':'\n    case 25705:                     // 'copy-namespaces' ':'\n    case 25706:                     // 'count' ':'\n    case 25707:                     // 'decimal-format' ':'\n    case 25709:                     // 'declare' ':'\n    case 25710:                     // 'default' ':'\n    case 25711:                     // 'delete' ':'\n    case 25712:                     // 'descendant' ':'\n    case 25713:                     // 'descendant-or-self' ':'\n    case 25714:                     // 'descending' ':'\n    case 25719:                     // 'div' ':'\n    case 25720:                     // 'document' ':'\n    case 25721:                     // 'document-node' ':'\n    case 25722:                     // 'element' ':'\n    case 25723:                     // 'else' ':'\n    case 25724:                     // 'empty' ':'\n    case 25725:                     // 'empty-sequence' ':'\n    case 25726:                     // 'encoding' ':'\n    case 25727:                     // 'end' ':'\n    case 25729:                     // 'eq' ':'\n    case 25730:                     // 'every' ':'\n    case 25732:                     // 'except' ':'\n    case 25733:                     // 'exit' ':'\n    case 25734:                     // 'external' ':'\n    case 25736:                     // 'first' ':'\n    case 25737:                     // 'following' ':'\n    case 25738:                     // 'following-sibling' ':'\n    case 25739:                     // 'for' ':'\n    case 25742:                     // 'from' ':'\n    case 25743:                     // 'ft-option' ':'\n    case 25747:                     // 'function' ':'\n    case 25748:                     // 'ge' ':'\n    case 25750:                     // 'group' ':'\n    case 25752:                     // 'gt' ':'\n    case 25753:                     // 'idiv' ':'\n    case 25754:                     // 'if' ':'\n    case 25755:                     // 'import' ':'\n    case 25756:                     // 'in' ':'\n    case 25757:                     // 'index' ':'\n    case 25761:                     // 'insert' ':'\n    case 25762:                     // 'instance' ':'\n    case 25763:                     // 'integrity' ':'\n    case 25764:                     // 'intersect' ':'\n    case 25765:                     // 'into' ':'\n    case 25766:                     // 'is' ':'\n    case 25767:                     // 'item' ':'\n    case 25768:                     // 'json' ':'\n    case 25770:                     // 'jsoniq' ':'\n    case 25773:                     // 'last' ':'\n    case 25774:                     // 'lax' ':'\n    case 25775:                     // 'le' ':'\n    case 25777:                     // 'let' ':'\n    case 25779:                     // 'loop' ':'\n    case 25781:                     // 'lt' ':'\n    case 25783:                     // 'mod' ':'\n    case 25784:                     // 'modify' ':'\n    case 25785:                     // 'module' ':'\n    case 25787:                     // 'namespace' ':'\n    case 25788:                     // 'namespace-node' ':'\n    case 25789:                     // 'ne' ':'\n    case 25794:                     // 'node' ':'\n    case 25795:                     // 'nodes' ':'\n    case 25798:                     // 'object' ':'\n    case 25802:                     // 'only' ':'\n    case 25803:                     // 'option' ':'\n    case 25804:                     // 'or' ':'\n    case 25805:                     // 'order' ':'\n    case 25806:                     // 'ordered' ':'\n    case 25807:                     // 'ordering' ':'\n    case 25810:                     // 'parent' ':'\n    case 25816:                     // 'preceding' ':'\n    case 25817:                     // 'preceding-sibling' ':'\n    case 25820:                     // 'processing-instruction' ':'\n    case 25822:                     // 'rename' ':'\n    case 25823:                     // 'replace' ':'\n    case 25824:                     // 'return' ':'\n    case 25825:                     // 'returning' ':'\n    case 25826:                     // 'revalidation' ':'\n    case 25828:                     // 'satisfies' ':'\n    case 25829:                     // 'schema' ':'\n    case 25830:                     // 'schema-attribute' ':'\n    case 25831:                     // 'schema-element' ':'\n    case 25832:                     // 'score' ':'\n    case 25833:                     // 'select' ':'\n    case 25834:                     // 'self' ':'\n    case 25839:                     // 'sliding' ':'\n    case 25840:                     // 'some' ':'\n    case 25841:                     // 'stable' ':'\n    case 25842:                     // 'start' ':'\n    case 25845:                     // 'strict' ':'\n    case 25848:                     // 'switch' ':'\n    case 25849:                     // 'text' ':'\n    case 25853:                     // 'to' ':'\n    case 25854:                     // 'treat' ':'\n    case 25856:                     // 'try' ':'\n    case 25857:                     // 'tumbling' ':'\n    case 25858:                     // 'type' ':'\n    case 25859:                     // 'typeswitch' ':'\n    case 25860:                     // 'union' ':'\n    case 25862:                     // 'unordered' ':'\n    case 25863:                     // 'updating' ':'\n    case 25866:                     // 'validate' ':'\n    case 25867:                     // 'value' ':'\n    case 25868:                     // 'variable' ':'\n    case 25869:                     // 'version' ':'\n    case 25872:                     // 'where' ':'\n    case 25873:                     // 'while' ':'\n    case 25876:                     // 'with' ':'\n      try_NCName();\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n    lookahead1W(26);                // S^WS | '(:' | ':'\n    shiftT(50);                     // ':'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_ArrayConstructor()\n  {\n    eventHandler.startNonterminal(\"ArrayConstructor\", e0);\n    shift(69);                      // '['\n    lookahead1W(272);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 70)                   // ']'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayConstructor\", e0);\n  }\n\n  function try_ArrayConstructor()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(272);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 70)                   // ']'\n    {\n      try_Expr();\n    }\n    shiftT(70);                     // ']'\n  }\n\n  function parse_BlockExpr()\n  {\n    eventHandler.startNonterminal(\"BlockExpr\", e0);\n    shift(281);                     // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_StatementsAndOptionalExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"BlockExpr\", e0);\n  }\n\n  function try_BlockExpr()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_StatementsAndOptionalExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FunctionDecl()\n  {\n    eventHandler.startNonterminal(\"FunctionDecl\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(38);                      // ')'\n    lookahead1W(158);               // S^WS | '(:' | 'as' | 'external' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_ReturnType();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'external' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_StatementsAndOptionalExpr();\n      shift(287);                   // '}'\n      break;\n    default:\n      shift(134);                   // 'external'\n    }\n    eventHandler.endNonterminal(\"FunctionDecl\", e0);\n  }\n\n  function parse_ReturnType()\n  {\n    eventHandler.startNonterminal(\"ReturnType\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"ReturnType\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqParser.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function shiftT(t)\n  {\n    if (l1 == t)\n    {\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function skip(code)\n  {\n    var b0W = b0; var e0W = e0; var l1W = l1;\n    var b1W = b1; var e1W = e1;\n\n    l1 = code; b1 = begin; e1 = end;\n    l2 = 0;\n\n    try_Whitespace();\n\n    b0 = b0W; e0 = e0W; l1 = l1W; if (l1 != 0) {\n    b1 = b1W; e1 = e1W; }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      eventHandler.whitespace(e0, b1);\n      e0 = b1;\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 22)               // S^WS\n      {\n        if (code != 37)             // '(:'\n        {\n          break;\n        }\n        skip(code);\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2W(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = matchW(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = match(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function error(b, e, s, l, t)\n  {\n    if (e >= ex)\n    {\n      bx = b;\n      ex = e;\n      sx = s;\n      lx = l;\n      tx = t;\n    }\n    throw new self.ParseException(bx, ex, sx, lx, tx);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var l2, b2, e2;\n  var bx, ex, sx, lx, tx;\n  var eventHandler;\n  var memo;\n\n  function memoize(i, e, v)\n  {\n    memo[(e << 5) + i] = v;\n  }\n\n  function memoized(i, e)\n  {\n    var v = memo[(e << 5) + i];\n    return typeof v != \"undefined\" ? v : 0;\n  }\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqParser.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 8191; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqParser.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqParser.MAP1[(c0 & 15) + JSONiqParser.MAP1[(c1 & 31) + JSONiqParser.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqParser.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqParser.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqParser.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 13) + code - 1;\n      code = JSONiqParser.TRANSITION[(i0 & 31) + JSONiqParser.TRANSITION[i0 >> 5]];\n\n      if (code > 8191)\n      {\n        result = code;\n        code &= 8191;\n        end = current;\n      }\n    }\n\n    result >>= 13;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqParser.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : JSONiqParser.INITIAL[tokenSetId] & 8191;\n  for (var i = 0; i < 289; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 4235 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqParser.EXPECTED[(i0 & 3) + JSONiqParser.EXPECTED[(i1 & 3) + JSONiqParser.EXPECTED[(i2 & 15) + JSONiqParser.EXPECTED[i2 >> 4]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqParser.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqParser.MAP0 =\n[ 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 40, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 40, 40\n];\n\nJSONiqParser.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 355, 371, 387, 423, 423, 423, 415, 339, 331, 339, 331, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 440, 440, 440, 440, 440, 440, 440, 324, 339, 339, 339, 339, 339, 339, 339, 339, 401, 423, 423, 424, 422, 423, 423, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 40, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 40, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 30, 30, 40, 40, 40, 40, 40, 40, 40, 70, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70\n];\n\nJSONiqParser.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 40, 30, 40, 30, 30, 40\n];\n\nJSONiqParser.INITIAL =\n[ 1, 24578, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289\n];\n\nJSONiqParser.TRANSITION =\n[ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 18432, 18508, 18512, 18508, 18508, 18471, 18503, 18452, 18508, 18544, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22565, 22594, 54694, 22641, 32640, 25253, 32640, 22707, 32640, 32640, 18907, 32640, 40804, 19219, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22757, 32640, 23442, 32640, 20728, 22822, 22912, 62853, 22949, 23023, 32640, 25253, 37379, 72986, 32640, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 23090, 32640, 70756, 57235, 23625, 57174, 23143, 53889, 57205, 23194, 32640, 44590, 57237, 72986, 32640, 32640, 18907, 32640, 23058, 18925, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 22132, 19073, 46732, 23294, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 23361, 32640, 61740, 23437, 23807, 23824, 22912, 35136, 23474, 23607, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 40461, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 57592, 32640, 53140, 23657, 43708, 23704, 23789, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 39259, 23856, 32640, 32640, 23893, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 73053, 22069, 23965, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24031, 32640, 23861, 32640, 22776, 24082, 22912, 56240, 24206, 24329, 32640, 25253, 32640, 24379, 32640, 32640, 18907, 32640, 23058, 57529, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24415, 24449, 24453, 24440, 24534, 24485, 24515, 24566, 24596, 24628, 32640, 32105, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 45903, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24678, 32640, 61740, 24746, 48361, 53140, 24789, 24808, 24825, 24857, 32640, 27397, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 45563, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24907, 32640, 61740, 32640, 32640, 52064, 24984, 25013, 61799, 25045, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 25095, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 54034, 25151, 25188, 25171, 25235, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 25302, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 25340, 32640, 61740, 24702, 35413, 25353, 25385, 25402, 58363, 25449, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 25499, 32640, 61740, 32640, 32640, 53140, 25538, 25575, 25558, 25622, 32640, 25253, 32640, 72986, 32640, 32640, 49347, 54782, 64809, 35297, 64457, 32024, 25672, 25724, 32640, 25308, 42746, 72012, 48724, 25775, 59604, 63895, 70062, 53329, 26051, 44572, 32640, 32640, 53365, 69246, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 36217, 25878, 32640, 32640, 25912, 56403, 72012, 72012, 47453, 69896, 25776, 64787, 25947, 25982, 26472, 26016, 26050, 68602, 32640, 32640, 21278, 65491, 41507, 72012, 47768, 59999, 36922, 55439, 25983, 53287, 66001, 26051, 68608, 32640, 35129, 65495, 72012, 26084, 25776, 26132, 25983, 66375, 26051, 26181, 26227, 36550, 62167, 71378, 26264, 56947, 53286, 26299, 56814, 66968, 50229, 37146, 26336, 26407, 64681, 37193, 26609, 67516, 26450, 26504, 26590, 60773, 47253, 26654, 26722, 26771, 49912, 26461, 51539, 26820, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 29428, 26976, 69042, 27027, 27107, 32640, 25253, 32640, 27176, 32640, 32640, 18907, 32640, 35800, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 27212, 32640, 18617, 32640, 32640, 53140, 27264, 27332, 41428, 27379, 32640, 25253, 32640, 27446, 36386, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 27496, 32640, 61740, 32640, 32640, 45704, 22912, 32640, 27545, 27614, 32640, 25253, 32640, 27679, 32640, 32640, 49347, 54782, 51035, 35297, 32640, 32024, 32640, 27715, 32640, 25308, 72012, 72012, 48724, 25776, 59604, 25983, 61672, 26051, 26051, 49853, 32640, 32640, 70980, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 40010, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 27753, 25776, 25776, 39830, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 27795, 25776, 60349, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 27836, 32640, 26232, 27985, 34535, 60068, 27930, 27958, 60099, 28032, 32640, 32366, 32640, 72986, 32640, 32640, 73079, 29194, 30273, 28620, 31154, 44986, 32640, 18612, 18649, 18757, 18789, 18959, 32755, 28084, 30249, 28403, 29274, 28141, 28173, 28885, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21681, 28259, 30189, 28317, 28376, 29214, 30382, 28201, 30288, 28732, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 28435, 28285, 28497, 28109, 28529, 28561, 28593, 28652, 28684, 28716, 19661, 19735, 19811, 19878, 19910, 19942, 28764, 21709, 32781, 28826, 28935, 28991, 29023, 29361, 30055, 20090, 20138, 20211, 20265, 29171, 28465, 29246, 28344, 29334, 29302, 29393, 20579, 20709, 20774, 29460, 29082, 29111, 29139, 29492, 29611, 20949, 21030, 29555, 29643, 29675, 28857, 29707, 21310, 29804, 29832, 29864, 29896, 29992, 30024, 30105, 30173, 28959, 30221, 29583, 29053, 28794, 28227, 30320, 30352, 29523, 30414, 30442, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 30485, 32640, 61740, 55714, 40332, 67370, 30532, 30549, 30500, 30596, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 25063, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 62487, 66570, 19251, 64424, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 30661, 19661, 19735, 19811, 19878, 19910, 19942, 30758, 30851, 33683, 30826, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 30890, 63521, 30967, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 32640, 31025, 31042, 31089, 31121, 32640, 25253, 32640, 72986, 41921, 32640, 18907, 32640, 23058, 19161, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31186, 32640, 61740, 32640, 32640, 53140, 31304, 31321, 61422, 31368, 32640, 25253, 32640, 72986, 38336, 32640, 18907, 32640, 23058, 19597, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31436, 32640, 22917, 32640, 32640, 53140, 31488, 31505, 63455, 31552, 32640, 25253, 32640, 72986, 23911, 32640, 18907, 32640, 23058, 20233, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 31603, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31688, 32640, 61740, 27887, 32640, 57839, 22912, 31734, 24347, 31775, 32640, 25253, 32640, 31840, 32640, 32640, 18907, 32640, 57508, 20515, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 62571, 27379, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 46497, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 52315, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32497, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 20179, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 31980, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 31979, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 69771, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 41903, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 32012, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 57111, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 27513, 32056, 32087, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 31793, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32154, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32191, 32640, 61740, 32640, 32640, 53140, 32266, 32219, 32317, 32348, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 32398, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 32449, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 32640, 32541, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32639, 61740, 32640, 32640, 53140, 32606, 32625, 66147, 32673, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 32724, 21452, 21374, 21431, 32813, 21618, 21650, 32920, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 32640, 27379, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 33014, 72814, 65242, 23329, 65262, 33049, 33078, 33110, 33141, 72172, 33868, 38406, 33224, 33302, 35892, 33415, 33497, 33529, 33657, 32640, 70241, 33715, 23262, 70547, 65483, 72012, 56115, 31942, 25776, 33771, 25983, 62395, 26051, 60426, 53000, 43338, 33820, 20169, 33900, 28052, 33936, 72012, 34004, 34096, 25776, 69679, 34153, 25983, 34209, 34305, 26051, 34381, 34413, 59316, 60982, 34567, 18580, 43988, 66280, 56105, 34613, 34671, 54769, 57995, 34763, 50540, 69616, 34835, 44365, 69116, 72659, 27683, 51215, 45101, 34941, 55781, 57901, 25776, 68182, 34981, 25983, 35037, 38017, 43551, 35100, 35168, 46148, 32692, 38542, 69316, 67857, 54357, 35200, 37506, 35270, 39191, 36089, 32640, 37090, 24260, 50683, 56669, 60278, 35348, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 43929, 35445, 35530, 35582, 50980, 66874, 47849, 48295, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 35651, 72814, 32640, 32640, 53140, 35689, 35718, 35750, 35781, 32640, 25253, 32640, 32640, 32640, 32640, 42703, 63159, 35832, 71490, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 71083, 54414, 54421, 64131, 72012, 55872, 25809, 25776, 60149, 25844, 25983, 63179, 26051, 26051, 34327, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 35952, 27144, 30726, 72012, 63213, 63138, 25776, 69714, 35989, 25983, 42068, 36035, 26051, 36069, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 20456, 36134, 36191, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 64516, 72814, 48426, 59530, 63767, 36272, 36304, 36336, 36367, 32640, 36432, 25203, 32640, 32640, 41660, 37716, 55922, 36483, 36530, 48415, 59494, 31702, 18855, 62820, 64973, 39682, 72012, 36599, 25776, 18725, 36659, 69934, 36699, 26051, 52493, 36750, 23246, 55732, 34581, 32640, 18679, 55301, 36783, 36820, 35485, 36918, 36954, 37494, 37030, 64702, 65892, 37178, 34467, 32640, 37225, 65319, 32640, 68393, 72012, 37261, 33962, 25776, 37316, 55427, 25983, 39119, 39566, 26051, 49047, 43098, 37375, 42559, 23999, 65491, 72012, 48479, 51277, 25776, 37411, 39842, 45287, 53287, 26051, 67220, 70527, 32640, 37538, 37571, 37131, 46827, 23541, 55996, 67894, 53288, 53572, 47622, 37618, 25915, 66600, 37659, 46843, 32872, 37796, 37836, 46302, 47046, 68392, 23524, 65621, 25983, 37889, 41315, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 37927, 37988, 38060, 47849, 36159, 34716, 26535, 44815, 38151, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 20106, 72814, 32509, 23162, 53140, 38224, 38253, 38285, 38316, 32640, 25253, 32640, 32640, 60657, 39330, 34441, 50711, 54836, 51195, 33270, 38384, 46719, 22206, 33192, 38438, 72385, 38511, 38616, 40937, 20657, 38673, 38705, 39528, 38892, 38940, 32640, 47380, 49323, 32640, 70823, 64131, 72012, 32968, 25809, 25776, 45195, 25844, 25983, 46666, 26051, 26051, 58683, 38996, 32640, 59450, 25692, 27180, 22361, 39052, 64136, 40912, 42209, 25776, 39090, 66443, 25983, 39151, 60300, 26051, 39223, 32640, 32640, 36102, 70444, 72012, 71366, 65683, 25776, 39291, 39362, 35619, 34803, 26051, 43538, 70527, 72942, 37229, 65495, 39402, 46827, 39434, 39492, 52767, 39560, 39598, 39731, 22659, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 19837, 68392, 68106, 33972, 25983, 39769, 58918, 26609, 71375, 56493, 39511, 67952, 33375, 70146, 67746, 39807, 39877, 27300, 39932, 39984, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 22609, 72814, 27464, 30794, 40060, 40119, 40148, 40180, 40211, 40263, 40295, 40364, 40412, 40514, 40546, 40606, 40667, 40699, 40731, 40783, 20976, 40854, 40994, 52527, 25308, 41046, 39699, 41078, 46357, 49141, 41137, 44544, 41236, 41286, 41368, 47192, 41460, 41554, 41610, 40087, 41703, 41735, 41816, 41872, 41968, 42030, 42100, 42250, 42282, 42373, 42458, 42490, 42522, 42554, 42591, 31571, 42679, 24113, 42735, 42778, 42826, 42887, 59586, 42933, 43014, 20677, 52796, 43080, 37857, 50773, 19009, 50153, 72778, 68055, 66201, 43130, 61992, 43205, 43285, 43380, 36003, 43457, 50341, 43583, 43639, 62580, 43704, 43740, 65764, 46827, 43772, 55996, 43804, 43857, 43893, 43961, 72604, 44020, 44104, 67022, 44136, 44196, 44228, 44289, 44397, 41399, 46788, 44452, 69369, 44513, 44648, 70208, 20438, 68896, 51376, 63626, 44257, 54317, 44622, 67433, 55113, 55250, 49487, 51457, 67801, 44680, 44712, 34716, 38736, 44788, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 54076, 72814, 67462, 71804, 46979, 44874, 44903, 44935, 44966, 65157, 25253, 32640, 32640, 45018, 45029, 45061, 36627, 47904, 71490, 70229, 49986, 32640, 30141, 65148, 45093, 45133, 72012, 45175, 25776, 67154, 25983, 61672, 45240, 26051, 53000, 32640, 32640, 25682, 32640, 30614, 64131, 72012, 62187, 25809, 25776, 34052, 25844, 25983, 58051, 26051, 26051, 68586, 34467, 32640, 32640, 25692, 49974, 68393, 36788, 72012, 33962, 51715, 25776, 55427, 25983, 45283, 39566, 26051, 45319, 43098, 32640, 32640, 22533, 65491, 72012, 65748, 51277, 25776, 40635, 39842, 48131, 53287, 26051, 72059, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 26195, 32640, 30913, 33383, 31947, 68516, 43425, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 38767, 44815, 45355, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 72990, 32640, 53140, 45461, 45480, 45512, 45543, 32640, 25253, 25880, 32640, 32640, 32640, 49347, 54782, 64809, 65216, 32640, 32024, 32640, 29772, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 26944, 43348, 64131, 72012, 72012, 45595, 25776, 25776, 45631, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 45666, 62963, 32640, 45736, 45143, 72012, 33962, 47777, 25776, 55427, 45634, 25983, 39566, 62106, 26051, 66507, 32640, 61374, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 45776, 65495, 72012, 45833, 25776, 43236, 25983, 48970, 26051, 35378, 19759, 45883, 40885, 45935, 34121, 45988, 46059, 68691, 46114, 46509, 48784, 46180, 46232, 52911, 56583, 46294, 61320, 46334, 46389, 52972, 46541, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 57068, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 37061, 32640, 46592, 32640, 23927, 23933, 35920, 72528, 46641, 71255, 46698, 32640, 41638, 46765, 32640, 32640, 25308, 72012, 32982, 31942, 25812, 62010, 25983, 52465, 26051, 62071, 44572, 32640, 32640, 32640, 32640, 46875, 64131, 72012, 72012, 46928, 25776, 25777, 25844, 25983, 25846, 26051, 26051, 48238, 66922, 32640, 32640, 32640, 58432, 34888, 72012, 72012, 24139, 25776, 25776, 64186, 25983, 25983, 64365, 26051, 26051, 68602, 32640, 31139, 32640, 65491, 72012, 59125, 47768, 25776, 23575, 39842, 25983, 43409, 26051, 51585, 68608, 32640, 40326, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 23989, 59115, 71381, 31947, 25983, 51580, 26788, 46560, 61892, 58181, 67203, 61301, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 48851, 72814, 23672, 46964, 47011, 47078, 47108, 47140, 47171, 32640, 41336, 32640, 50620, 20998, 40574, 47224, 47285, 49169, 47359, 32640, 35316, 31404, 32640, 22498, 71540, 47426, 22395, 47485, 41998, 47553, 68243, 35005, 43487, 49590, 47654, 45801, 22675, 32476, 32285, 47707, 67491, 67589, 47739, 47809, 47521, 53771, 47881, 39370, 54202, 70106, 63727, 47936, 58552, 32640, 49793, 48007, 32640, 65551, 71979, 37586, 48049, 48729, 71596, 33444, 48130, 48163, 50320, 48235, 48270, 34864, 70560, 48327, 48393, 48458, 72887, 48523, 38468, 37956, 42313, 48632, 55501, 51516, 36886, 48664, 48761, 48816, 50855, 27414, 41840, 48883, 63268, 48941, 45429, 49017, 55015, 49079, 32640, 22725, 23734, 49111, 51113, 69533, 55593, 49224, 46302, 49298, 68392, 71381, 31947, 25983, 51580, 58698, 26609, 49388, 58232, 70503, 49450, 42622, 70146, 67746, 49519, 60834, 49912, 26461, 39900, 47849, 56608, 49551, 26535, 44815, 49622, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 69860, 72814, 32640, 32640, 53140, 22912, 46609, 49741, 49772, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 57444, 31942, 38479, 62010, 25983, 49825, 26051, 53559, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 59709, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 61385, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 55063, 32640, 32640, 32640, 32640, 51342, 72012, 72012, 34031, 25776, 25776, 21586, 25983, 25983, 37804, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 52831, 72814, 72305, 49953, 50018, 50050, 50069, 50101, 50132, 70815, 25253, 24050, 32640, 72261, 50206, 50261, 50293, 50389, 50456, 50572, 49266, 32159, 46476, 50609, 46896, 49653, 37284, 50652, 61556, 51136, 34792, 50743, 43516, 41182, 50834, 50887, 32640, 37764, 32640, 32640, 39657, 23757, 50924, 50956, 53683, 55377, 51012, 52437, 51082, 71275, 51168, 51247, 58552, 31456, 32640, 51318, 32640, 68393, 71632, 34909, 33962, 25776, 51408, 55427, 25983, 51489, 51571, 26051, 51617, 51676, 60646, 71309, 32640, 65491, 66269, 72012, 47768, 51714, 36922, 67551, 25983, 53287, 50411, 26051, 51682, 70346, 19987, 51747, 72012, 24952, 25776, 68123, 51821, 47327, 51856, 50424, 31808, 72723, 44072, 71378, 24163, 55203, 53286, 67732, 46302, 62840, 68392, 67136, 45208, 51824, 51580, 51892, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 49192, 51996, 52096, 48579, 26535, 57041, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32641, 72814, 32640, 52167, 20380, 52202, 52231, 52263, 52294, 52373, 25253, 38352, 32640, 52375, 52359, 29926, 52407, 61167, 51195, 57599, 32024, 25590, 52525, 32640, 52559, 51778, 52613, 52685, 43173, 52736, 25950, 43825, 49580, 44319, 53632, 52043, 52828, 32640, 32640, 32640, 58759, 38563, 72012, 52863, 54749, 25776, 52943, 55231, 25984, 38908, 53056, 26018, 58552, 53105, 32640, 22853, 53172, 39020, 53205, 55838, 69472, 53239, 53488, 67539, 53276, 33788, 39566, 53320, 63643, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 53361, 32640, 72366, 71378, 53397, 57660, 53286, 53431, 46302, 32640, 68392, 71381, 47833, 35238, 66390, 37193, 26609, 71375, 60465, 43860, 63958, 50482, 38641, 53073, 53467, 53538, 49912, 26461, 39900, 47849, 36159, 48078, 53604, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 53715, 36751, 53803, 53858, 53921, 53950, 53982, 54013, 68341, 65423, 54066, 22337, 73196, 54108, 54140, 54172, 54234, 54389, 39321, 25417, 42341, 50174, 54455, 44050, 56059, 66616, 54504, 54555, 45851, 57679, 42130, 56789, 64232, 60925, 56829, 19692, 32640, 54689, 69055, 20609, 57455, 72012, 54726, 52653, 25776, 54814, 63908, 25984, 61227, 36498, 26018, 58552, 32640, 47394, 24383, 68318, 72870, 72012, 54868, 18707, 25776, 69705, 54929, 25983, 71927, 54995, 26051, 43915, 55047, 31632, 29738, 32574, 55095, 55145, 55282, 55174, 55347, 55409, 55471, 55533, 55625, 55661, 26850, 67349, 33333, 55693, 55764, 55813, 55904, 55954, 45409, 55563, 59673, 58326, 64010, 31239, 37627, 56028, 56147, 63574, 71739, 56202, 48600, 52021, 33017, 44420, 56272, 51439, 56304, 26558, 56379, 49469, 56435, 56525, 55629, 58860, 53658, 56557, 38796, 56640, 56760, 53746, 56861, 56918, 47849, 36159, 34716, 35068, 57014, 26905, 57100, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 57143, 60501, 46140, 53140, 57269, 57298, 57330, 57361, 57393, 21867, 57487, 53826, 57561, 73137, 57631, 57725, 57757, 57818, 64532, 33845, 25743, 28903, 32640, 30718, 48491, 57871, 57933, 57965, 50507, 34177, 46420, 65902, 58083, 44572, 34502, 27347, 47675, 69192, 32417, 27057, 58115, 45744, 58167, 58213, 58473, 58264, 36980, 26375, 58296, 44349, 69977, 37742, 31057, 58358, 32640, 35957, 68393, 49673, 58395, 33962, 23558, 65824, 55427, 66456, 46015, 39566, 60313, 47611, 68602, 32640, 47038, 58431, 65491, 72012, 72012, 58464, 25776, 27804, 58505, 25983, 57693, 26051, 26051, 58542, 33253, 32640, 51913, 22383, 49691, 64312, 64327, 50524, 46027, 71028, 38028, 53132, 32640, 21514, 49356, 67641, 68454, 61634, 65986, 49249, 32640, 68392, 71381, 31947, 25983, 51580, 39737, 67971, 58592, 35498, 68821, 42982, 65031, 58624, 58730, 58791, 58892, 49912, 26461, 39900, 47849, 36159, 34716, 60897, 62262, 58971, 59003, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 53024, 32640, 59046, 59088, 59157, 59186, 59218, 59249, 26690, 25253, 32640, 62512, 59314, 32640, 21399, 45956, 59348, 59428, 60204, 32024, 59282, 59482, 59526, 27721, 62325, 42794, 59562, 37343, 41105, 59653, 46262, 57786, 56728, 42158, 59014, 59705, 59741, 32640, 32640, 64131, 27582, 72012, 25809, 51286, 25776, 25844, 68525, 25984, 26051, 69412, 26018, 38086, 59766, 53173, 30453, 31873, 68393, 59807, 72012, 38182, 56458, 25776, 67880, 68261, 25983, 39566, 61247, 26051, 68602, 40380, 32640, 32640, 65491, 72012, 59857, 47966, 60005, 45599, 39842, 71940, 53287, 26051, 59892, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 71116, 32640, 59931, 71378, 25776, 29955, 53286, 26051, 56227, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 36718, 59969, 24280, 60037, 60131, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 54423, 32640, 20742, 60181, 32843, 60251, 67710, 54291, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 29420, 32640, 32640, 32640, 64131, 72012, 72012, 60345, 25776, 25776, 60381, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 53207, 72012, 47768, 27763, 36922, 39842, 71874, 53287, 26051, 60418, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 70720, 71381, 60458, 35226, 48985, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 36240, 60497, 23383, 53140, 60533, 60561, 60593, 60624, 23405, 25467, 22160, 33169, 60689, 60747, 60715, 60805, 60866, 60957, 32640, 36400, 61023, 26995, 32640, 33355, 55315, 59825, 61082, 65831, 61145, 47313, 61199, 61279, 67236, 61352, 32640, 30073, 61417, 71794, 61454, 22979, 61508, 38584, 61544, 61588, 56170, 61624, 61666, 64623, 61704, 26051, 48694, 58552, 65333, 72472, 61736, 61772, 61831, 56082, 61881, 64292, 46200, 55981, 63076, 32888, 56329, 36998, 50357, 58842, 68602, 61924, 31336, 31217, 32949, 61962, 72012, 54897, 52135, 36922, 43253, 54949, 53287, 62059, 62103, 54635, 69791, 32640, 71552, 72012, 20633, 25776, 66700, 25983, 70631, 26051, 43048, 60991, 32640, 27575, 38860, 26267, 35612, 71431, 26052, 46302, 39252, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 59396, 61050, 48909, 62138, 49921, 43861, 50802, 44756, 26873, 47849, 36159, 34716, 33560, 62235, 62294, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 69266, 62427, 62544, 62612, 62644, 62673, 62705, 62736, 31256, 49878, 31910, 32640, 62790, 62885, 62917, 44164, 69556, 51644, 62949, 62995, 45696, 32640, 19278, 63027, 63108, 63211, 63245, 54342, 53506, 63300, 61672, 63378, 63410, 44572, 63450, 21770, 63487, 58560, 32640, 57422, 68884, 61512, 63553, 47513, 61592, 63606, 63675, 29960, 51050, 63717, 37895, 63759, 18562, 21217, 40028, 32560, 63799, 59860, 58135, 43158, 25776, 63843, 70614, 25983, 63875, 63940, 26051, 63990, 64042, 64442, 21262, 32640, 64117, 58399, 38848, 47768, 24174, 64168, 39842, 56347, 53287, 26051, 64218, 68608, 27898, 31520, 65495, 64264, 51931, 42855, 67656, 26365, 64359, 39180, 64397, 32640, 22880, 64131, 71378, 25776, 29955, 53286, 26051, 56886, 32234, 41489, 41766, 51964, 60386, 51580, 64489, 54657, 64564, 34064, 72128, 35550, 42184, 64655, 39628, 49921, 43861, 62758, 40962, 68714, 54610, 64734, 36847, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 25270, 32640, 23111, 32122, 64856, 64887, 64919, 64950, 31389, 65005, 27232, 34519, 65063, 65120, 65088, 61113, 65189, 65294, 65365, 65397, 32640, 65455, 65527, 65583, 65653, 65730, 65796, 42647, 52704, 58025, 65863, 65934, 65966, 66033, 64072, 66099, 26683, 30564, 66131, 66179, 66246, 41522, 66312, 64765, 26100, 66344, 66422, 62027, 63346, 66488, 48098, 66539, 38119, 40439, 30690, 24714, 66648, 46809, 22991, 67082, 66680, 47975, 66732, 66764, 58510, 66819, 66851, 26304, 66906, 66954, 31272, 32640, 67000, 67054, 67114, 21544, 34639, 21568, 67186, 67268, 67325, 67402, 54264, 43607, 48017, 34273, 42426, 67583, 30935, 67621, 41784, 67688, 48203, 67778, 64824, 41671, 20315, 24236, 67833, 44481, 37470, 67926, 59378, 68003, 32640, 68087, 68155, 34696, 68214, 39952, 68293, 68373, 68425, 68486, 66787, 35862, 33375, 70146, 67746, 49921, 43861, 49912, 58817, 68777, 68557, 68640, 68746, 58655, 44815, 68853, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 64085, 32640, 48353, 53140, 68928, 68957, 68989, 69020, 32640, 27125, 27632, 30788, 27143, 32640, 31656, 64595, 69087, 69148, 32640, 32024, 32640, 69224, 32640, 49895, 69298, 39058, 69348, 25776, 49418, 25983, 70024, 69401, 45323, 46448, 24757, 70970, 32640, 27865, 31743, 52581, 61849, 69444, 69504, 54523, 54583, 69588, 33465, 69648, 59899, 33588, 69746, 58552, 69823, 32640, 32640, 69855, 38964, 72012, 72012, 65611, 69892, 25776, 72113, 69928, 25983, 39566, 69966, 26051, 41254, 35657, 32640, 32640, 61476, 72012, 72012, 62354, 25776, 36922, 70009, 25983, 26418, 26051, 26051, 34349, 32640, 18845, 26622, 72012, 27075, 25776, 39460, 70056, 67293, 70094, 41204, 31858, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 45386, 70138, 70178, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 46082, 68666, 70273, 34716, 26535, 44842, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 22217, 68030, 66060, 33739, 70331, 54472, 70378, 70409, 32640, 25253, 32640, 32640, 32640, 32640, 19302, 70476, 56692, 51195, 59775, 43315, 32640, 32640, 27647, 25308, 37113, 62203, 70592, 53244, 62010, 70663, 47583, 56714, 33625, 44572, 32640, 32640, 28000, 32640, 29763, 64131, 55855, 72012, 25809, 51949, 25776, 25844, 56967, 25984, 26051, 33611, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 50577, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 25506, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 70701, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 59056, 32640, 70752, 70788, 70855, 70884, 70916, 70947, 32640, 25253, 32640, 32640, 32640, 32640, 41578, 49709, 71012, 71060, 32640, 32024, 32640, 32640, 71115, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 38108, 32640, 24932, 72012, 72012, 52641, 25776, 25776, 71858, 25983, 25983, 43032, 26051, 26051, 68602, 32640, 71148, 32640, 65491, 51789, 34949, 47768, 56478, 42901, 39842, 71181, 63325, 63418, 36037, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32154, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25640, 43672, 32640, 22790, 58939, 37441, 71228, 41160, 51195, 32640, 22183, 71515, 71307, 32640, 25308, 72012, 71341, 31942, 35465, 71413, 36667, 59621, 26051, 71463, 42401, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 41936, 32640, 68393, 66214, 72012, 71584, 38192, 25776, 42053, 70669, 25983, 39566, 39775, 26051, 68602, 35405, 32640, 32640, 65491, 71628, 72012, 48552, 25776, 36922, 26149, 25983, 53287, 71664, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 37690, 32640, 25253, 66067, 32640, 32640, 32640, 71710, 26739, 42964, 71771, 20325, 32024, 32640, 32640, 32640, 27283, 72012, 59937, 31942, 25776, 52893, 25983, 56982, 26051, 51860, 44572, 23321, 32640, 32640, 37539, 32640, 38825, 72013, 72012, 71836, 53399, 25776, 71906, 39845, 25984, 71678, 53435, 26018, 58552, 30134, 32640, 32640, 32640, 68393, 71972, 72012, 63054, 52123, 25776, 62376, 48188, 25983, 24297, 36872, 26051, 68602, 32640, 32640, 33904, 65491, 72012, 72011, 47768, 42218, 36922, 39842, 71196, 53287, 26051, 72045, 68608, 32640, 48843, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 45251, 32640, 34258, 23504, 63811, 25776, 68806, 63685, 26051, 46302, 23041, 68392, 72091, 44738, 54963, 34731, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 72160, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 72268, 72234, 40231, 72204, 72300, 72337, 72417, 72449, 32640, 25253, 71149, 72986, 32640, 32640, 22011, 19703, 24646, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 21985, 22069, 72504, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 70431, 53140, 72560, 72589, 60219, 72636, 32640, 25253, 32640, 72986, 50892, 50890, 18907, 32640, 40751, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61930, 32640, 32640, 19846, 72691, 72708, 30629, 72755, 32640, 25253, 32640, 72810, 59270, 52170, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22311, 22069, 72846, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 32640, 72919, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 35297, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 48724, 25776, 59604, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 34485, 32640, 23212, 23229, 52327, 72974, 32640, 32640, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 43659, 32640, 18612, 18649, 18757, 18789, 18959, 21985, 22069, 72504, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 73022, 21452, 21374, 21431, 73111, 21618, 21650, 73169, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 180523, 180523, 180523, 180523, 0, 188716, 188716, 188716, 180523, 180523, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 0, 188716, 180523, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 139264, 147456, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 131072, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 367, 188716, 180523, 188716, 188716, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 180523, 188716, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2289, 0, 2290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2368, 2369, 0, 0, 2371, 0, 0, 0, 0, 2376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 307, 0, 0, 5767168, 0, 0, 0, 4857856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 5414912, 5447680, 0, 0, 5562368, 5636096, 5685248, 0, 5750784, 5873664, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1877, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1889, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 59821, 57886, 59823, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 58853, 57909, 57909, 58857, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58871, 0, 0, 5636096, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 5480448, 4358144, 4358144, 4358144, 4358144, 4857856, 4874240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5259264, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5414912, 4358144, 5447680, 4358144, 5464064, 4358144, 5480448, 5562368, 4358144, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140, 0, 0, 1145, 0, 4857856, 4874240, 0, 0, 4923392, 5562368, 4358144, 4358144, 4358144, 5636096, 4358144, 5685248, 4358144, 4358144, 5750784, 4358144, 4358144, 4358144, 4358144, 4358144, 5873664, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6275072, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 4923392, 0, 0, 0, 0, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2766, 0, 0, 0, 0, 0, 0, 4825088, 0, 0, 5177344, 0, 0, 0, 0, 5701632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5808128, 0, 0, 0, 0, 4792320, 4833280, 0, 0, 5701632, 0, 5242880, 0, 0, 0, 0, 0, 0, 0, 5341184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 5652480, 0, 5701632, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4825088, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5177344, 4358144, 4358144, 4358144, 4358144, 4358144, 5242880, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5341184, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5627904, 5652480, 4358144, 5701632, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 483328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5341184, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5627904, 5652480, 4358144, 5701632, 4358144, 4358144, 5808128, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 1051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 0, 6422528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5619712, 0, 0, 0, 0, 0, 0, 0, 5726208, 5758976, 0, 0, 5791744, 0, 0, 0, 0, 0, 0, 0, 1151, 1278, 0, 0, 0, 0, 0, 0, 1285, 0, 0, 0, 0, 0, 0, 0, 1290, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 848, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 0, 6479872, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4931584, 4939776, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5054464, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5210112, 4358144, 4358144, 4358144, 4358144, 5292032, 4358144, 4358144, 4358144, 4358144, 5365760, 4358144, 4358144, 4358144, 5455872, 4358144, 4358144, 4358144, 4358144, 4358144, 5554176, 5570560, 5578752, 5619712, 5668864, 4358144, 4358144, 4358144, 5791744, 5816320, 4358144, 5857280, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6119424, 4358144, 6168576, 4358144, 4358144, 4358144, 4358144, 6242304, 4358144, 6291456, 4358144, 6316032, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 4939776, 0, 0, 0, 0, 0, 0, 5054464, 0, 0, 0, 0, 0, 0, 0, 0, 5210112, 0, 0, 0, 0, 5292032, 0, 0, 0, 0, 5365760, 0, 0, 0, 5455872, 0, 0, 0, 0, 0, 5554176, 5570560, 5578752, 5619712, 5668864, 0, 5578752, 5619712, 5668864, 0, 0, 0, 5791744, 5816320, 0, 5857280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6119424, 0, 6168576, 0, 0, 0, 0, 0, 6242304, 0, 6291456, 0, 6316032, 0, 6291456, 0, 6316032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4931584, 4939776, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 491520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 5578752, 5619712, 5668864, 4358144, 4358144, 4358144, 5791744, 5816320, 4358144, 5857280, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6119424, 4358144, 6168576, 4358144, 4358144, 4358144, 4358144, 4358144, 6242304, 4956160, 4964352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 0, 0, 0, 5799936, 0, 5881856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6373376, 6389760, 0, 0, 0, 0, 0, 1758, 0, 0, 1761, 0, 1763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6488064, 6103040, 0, 0, 0, 0, 0, 6184960, 5316608, 0, 0, 5644288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6217728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3384, 0, 0, 0, 3388, 0, 0, 0, 0, 0, 3394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5390336, 5308416, 5488640, 0, 0, 5070848, 5431296, 0, 6430720, 0, 0, 5160960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4784128, 0, 0, 0, 0, 0, 0, 0, 0, 3623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 417, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6283264, 6332416, 0, 0, 0, 5881856, 0, 5382144, 0, 0, 0, 0, 0, 0, 6266880, 4784128, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4915200, 4358144, 4956160, 4972544, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5070848, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5218304, 4358144, 5267456, 4358144, 4358144, 5308416, 5316608, 4358144, 4358144, 4358144, 5431296, 4358144, 5488640, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5799936, 4358144, 4358144, 5881856, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6103040, 4358144, 4358144, 4358144, 6184960, 4358144, 4358144, 6283264, 4358144, 4358144, 6332416, 4358144, 4358144, 4358144, 6389760, 4358144, 4358144, 6430720, 6438912, 4358144, 4358144, 4358144, 6266880, 6488064, 0, 0, 0, 6266880, 6488064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3149, 0, 0, 0, 0, 3154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 4784128, 4358144, 4358144, 4358144, 4849664, 4358144, 4358144, 4358144, 4358144, 4358144, 4915200, 0, 5660672, 5718016, 0, 5865472, 0, 0, 6037504, 0, 0, 6078464, 0, 0, 6340608, 0, 6455296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5472256, 0, 0, 0, 6209536, 0, 0, 0, 0, 6176768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4898816, 0, 5709824, 0, 0, 0, 0, 0, 1790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2348, 0, 0, 0, 0, 0, 0, 0, 0, 5283840, 0, 0, 0, 0, 5251072, 0, 6414336, 5832704, 0, 5955584, 0, 0, 4358144, 4358144, 4841472, 4358144, 4358144, 4358144, 4898816, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368640, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 5111808, 4358144, 4358144, 4358144, 4358144, 4358144, 5283840, 4358144, 4358144, 4358144, 4358144, 5472256, 5521408, 4358144, 4358144, 4358144, 5595136, 5709824, 5718016, 4358144, 5824512, 5865472, 4358144, 4358144, 5922816, 4358144, 4358144, 6021120, 4358144, 6037504, 4358144, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 4358144, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 139264, 147456, 0, 0, 0, 0, 0, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 3773, 0, 3627, 3775, 0, 0, 3778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 4024, 521, 4026, 521, 521, 4028, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 6021120, 0, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4841472, 4358144, 4358144, 4358144, 4898816, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 499712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5111808, 4358144, 4358144, 4358144, 4358144, 4358144, 5283840, 4358144, 4358144, 4358144, 4358144, 5472256, 5521408, 4358144, 4358144, 4358144, 4358144, 5595136, 5709824, 5718016, 4358144, 5824512, 5865472, 4358144, 4358144, 5922816, 0, 5029888, 5038080, 0, 0, 5103616, 5201920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6406144, 5357568, 0, 5505024, 0, 0, 0, 0, 0, 5890048, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1873, 521, 521, 521, 521, 521, 521, 521, 521, 1884, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3216, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 60569, 57886, 60570, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58842, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 58854, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59962, 59963, 57909, 57909, 57909, 57909, 57909, 57909, 59970, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 6160384, 0, 5095424, 5349376, 0, 5275648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5947392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6471680, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4997120, 4358144, 4358144, 5038080, 4358144, 4358144, 4358144, 5095424, 5103616, 4358144, 4358144, 5201920, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 0, 0, 0, 0, 0, 0, 0, 0, 4997120, 0, 0, 5038080, 0, 0, 0, 0, 6406144, 0, 0, 0, 0, 0, 0, 0, 0, 4997120, 0, 0, 5038080, 0, 0, 0, 5095424, 5103616, 0, 0, 5201920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5890048, 0, 0, 0, 6029312, 0, 0, 0, 0, 6160384, 0, 0, 0, 0, 0, 0, 0, 6406144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4997120, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 4358144, 4358144, 4358144, 0, 0, 0, 4890624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5898240, 5963776, 0, 0, 6193152, 0, 0, 5406720, 6397952, 5300224, 5234688, 5423104, 0, 0, 0, 0, 5988352, 0, 0, 6135808, 6307840, 0, 5996544, 4800512, 0, 6356992, 0, 0, 0, 5496832, 0, 0, 0, 0, 0, 5611520, 0, 0, 0, 0, 0, 0, 0, 1187, 0, 0, 1190, 1191, 0, 0, 0, 0, 1195, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 4947968, 5021696, 5529600, 0, 0, 5169152, 0, 0, 0, 4800512, 4808704, 4358144, 4358144, 4890624, 4358144, 4947968, 4358144, 4358144, 4358144, 5046272, 4358144, 4358144, 4358144, 4358144, 5185536, 4358144, 5234688, 5300224, 4358144, 4358144, 5406720, 5529600, 4358144, 4358144, 4358144, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 4800512, 4808704, 0, 0, 4890624, 0, 4947968, 0, 0, 0, 5046272, 0, 0, 0, 0, 5185536, 0, 5234688, 5300224, 0, 0, 5406720, 5529600, 0, 0, 0, 0, 5898240, 0, 0, 0, 0, 0, 0, 0, 0, 6307840, 0, 0, 6356992, 6381568, 6397952, 4800512, 4808704, 0, 0, 4890624, 0, 0, 6356992, 6381568, 6397952, 4800512, 4808704, 4358144, 4358144, 4890624, 4358144, 4947968, 4358144, 4358144, 4358144, 5046272, 4358144, 4358144, 4358144, 4358144, 5185536, 4358144, 5234688, 5300224, 4358144, 4358144, 5406720, 5529600, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4907008, 0, 5079040, 6094848, 0, 0, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 0, 4907008, 0, 5079040, 0, 5226496, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 5021696, 4358144, 4358144, 5021696, 0, 0, 0, 4980736, 0, 0, 0, 0, 0, 5373952, 5734400, 6045696, 0, 0, 0, 0, 0, 2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2290, 0, 0, 0, 0, 0, 0, 0, 6152192, 0, 0, 0, 6316032, 0, 0, 0, 0, 5816320, 6291456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792, 3627, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 0, 0, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5324800, 5373952, 5537792, 5545984, 5586944, 5734400, 5971968, 0, 6045696, 0, 6070272, 0, 0, 0, 0, 6348800, 0, 4866048, 4882432, 0, 4980736, 0, 0, 0, 0, 0, 0, 0, 0, 521, 831, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 877, 521, 521, 521, 521, 895, 521, 521, 57886, 57886, 58249, 0, 5324800, 5373952, 5537792, 5545984, 5586944, 5734400, 5971968, 0, 6045696, 0, 6070272, 0, 0, 0, 0, 6348800, 4358144, 4866048, 4882432, 4358144, 4980736, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5324800, 5373952, 5537792, 5545984, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 6348800, 0, 4866048, 4882432, 0, 4980736, 0, 0, 0, 0, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 3441, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3454, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 60242, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60250, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60293, 57886, 57886, 57886, 60296, 60297, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59917, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 5693440, 0, 6496256, 5144576, 5136384, 0, 5914624, 4358144, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 0, 0, 5005312, 0, 0, 0, 5120000, 5136384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6324224, 0, 0, 5005312, 0, 0, 0, 5120000, 5136384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6324224, 4358144, 0, 0, 900, 900, 900, 4825988, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5178244, 900, 900, 900, 900, 900, 5219204, 900, 5268356, 900, 900, 5309316, 5317508, 900, 900, 900, 5432196, 900, 5489540, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5800836, 900, 900, 5882756, 900, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 3627, 0, 0, 0, 0, 0, 0, 1759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1772, 0, 1774, 0, 0, 0, 1778, 0, 0, 0, 1782, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 5013504, 0, 0, 6053888, 0, 0, 0, 0, 6012928, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 0, 0, 5013504, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 692, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 6053888, 0, 0, 0, 0, 0, 5013504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6053888, 0, 0, 0, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5799936, 4358144, 4358144, 5881856, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6103040, 4358144, 4358144, 4358144, 6184960, 4358144, 4358144, 4358144, 6283264, 4358144, 4358144, 6332416, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 901, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 5414912, 0, 5447680, 0, 5464064, 0, 5480448, 5562368, 0, 0, 0, 5636096, 0, 5685248, 0, 0, 5750784, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5193728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5193728, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 0, 1959, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 715, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1250, 1252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 5742592, 0, 0, 0, 6094848, 0, 0, 4907008, 0, 5079040, 0, 5226496, 0, 5742592, 0, 0, 0, 6094848, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 4358144, 5062656, 0, 0, 0, 4358144, 5062656, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 5062656, 0, 0, 0, 0, 0, 6225920, 0, 5062656, 0, 0, 0, 0, 0, 6225920, 4358144, 5062656, 4358144, 4358144, 4358144, 0, 900, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 2396, 521, 521, 521, 521, 2400, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3199, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1390, 521, 521, 1394, 521, 521, 521, 521, 521, 1401, 521, 521, 4358144, 4358144, 4358144, 6225920, 0, 0, 0, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 4816896, 0, 0, 0, 0, 6086656, 4816896, 0, 0, 0, 0, 6086656, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 5087232, 0, 5931008, 4358144, 5332992, 5980160, 4358144, 0, 5332992, 5980160, 0, 0, 5332992, 5980160, 0, 4358144, 5332992, 5980160, 4358144, 5439488, 5128192, 4358144, 5128192, 0, 5128192, 0, 5128192, 4358144, 4358144, 0, 0, 4358144, 4358144, 0, 0, 4358144, 6004736, 6004736, 6004736, 6004736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1289, 0, 0, 0, 0, 0, 0, 0, 0, 1294, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2816, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645, 221645, 221645, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 221645, 461, 221645, 221645, 221645, 461, 221645, 221645, 221645, 221645, 221645, 221645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1780, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3414, 0, 0, 0, 0, 3418, 0, 0, 0, 0, 3423, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237568, 301, 0, 305, 237568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 305, 237982, 147456, 0, 0, 0, 305, 0, 0, 0, 0, 0, 2334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2349, 0, 0, 0, 0, 0, 0, 0, 3406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3420, 3421, 0, 0, 0, 0, 3426, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 516096, 0, 0, 0, 0, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 0, 305, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1870, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2453, 521, 521, 521, 2456, 521, 521, 521, 521, 521, 2461, 521, 305, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 65536, 302, 0, 4268032, 98304, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4210978, 24578, 3, 0, 0, 296, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 245760, 0, 245760, 0, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 4210978, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1270, 0, 0, 2059, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 310, 0, 0, 0, 310, 310, 311, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 674, 0, 0, 0, 0, 0, 0, 262144, 262144, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 301, 0, 0, 0, 262144, 0, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 0, 262731, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 3439, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3670, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60591, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59853, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60298, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 262731, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 245760, 245760, 245760, 245760, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278528, 278528, 0, 0, 131072, 278528, 0, 0, 0, 278528, 0, 0, 0, 0, 278528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 384, 0, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 0, 278528, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3438, 521, 521, 521, 521, 3442, 521, 521, 521, 521, 521, 521, 521, 3448, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1901, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1921, 521, 521, 278528, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 262144, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 262144, 0, 262144, 0, 0, 0, 139264, 147456, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 302, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 631, 0, 4268032, 305, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1506, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2810, 2811, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 302, 0, 306, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 733, 0, 739, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 306, 139264, 287138, 0, 0, 0, 306, 0, 0, 0, 0, 0, 2386, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2402, 521, 2404, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59830, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60836, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60274, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 0, 306, 0, 0, 0, 0, 0, 521, 521, 521, 3437, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3449, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3464, 521, 3466, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61250, 57909, 57909, 61252, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 59994, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 306, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 66168, 0, 4268032, 305, 98939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2352, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 303, 303, 0, 0, 303, 303, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 373, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 368, 303, 0, 295215, 303, 303, 303, 303, 295285, 295215, 295215, 295215, 295215, 295215, 295215, 303, 303, 303, 303, 303, 303, 295285, 295215, 295215, 295215, 303, 303, 303, 295285, 139264, 147456, 295215, 295215, 303, 303, 295215, 303, 303, 131072, 303, 303, 303, 303, 295215, 303, 303, 303, 303, 295215, 303, 295215, 295215, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 295215, 295215, 295215, 295215, 295215, 303, 303, 303, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 303, 295215, 295215, 295215, 295215, 295215, 295215, 295215, 303, 0, 303, 0, 303, 303, 303, 295215, 303, 303, 303, 295215, 295215, 303, 295215, 303, 295215, 295215, 295215, 295215, 295215, 295215, 295215, 295215, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295215, 295215, 295215, 295215, 295215, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4359045, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 319488, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1743, 0, 0, 0, 0, 0, 0, 0, 1751, 1752, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 319488, 0, 319488, 319488, 319488, 0, 24578, 3, 0, 0, 4366336, 253952, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4284416, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 521, 2389, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3219, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60571, 57886, 57886, 57886, 57886, 57886, 57886, 60579, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 327680, 335872, 327680, 327680, 327680, 335872, 327680, 327680, 327680, 327680, 327680, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49716, 0, 0, 0, 0, 0, 327680, 49716, 327680, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 106496, 0, 0, 4284416, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49152, 977, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6463488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 4939776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 344064, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 357, 358, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 4276224, 1245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 352256, 0, 0, 0, 0, 0, 0, 131072, 0, 352256, 352256, 0, 0, 352256, 0, 0, 352256, 0, 352256, 0, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1197, 0, 367, 367, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 1, 291, 3, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 360448, 360448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 1, 0, 3, 155941, 155941, 295, 0, 629, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 1245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 58796, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59402, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58826, 57886, 57886, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59502, 57886, 0, 2281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 2357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3428, 0, 57909, 59926, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58906, 57909, 57909, 59952, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 60009, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 60035, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60937, 521, 3212, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59387, 59388, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60604, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60320, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60702, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 3612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 57886, 57886, 60830, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60853, 57886, 57886, 57936, 57936, 57936, 57936, 60914, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60057, 57936, 57936, 57936, 57936, 61027, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61045, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60634, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59493, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 61048, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61056, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60378, 57936, 57936, 57936, 57886, 57886, 57886, 57886, 61156, 57886, 57886, 57886, 57886, 61157, 61158, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59997, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 61175, 57909, 57909, 57909, 57909, 61176, 61177, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61194, 57936, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61078, 61079, 57936, 57936, 57936, 57936, 61083, 61084, 57936, 57936, 57936, 57936, 57936, 61088, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61195, 61196, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3177, 521, 521, 521, 521, 521, 521, 3184, 521, 3186, 521, 521, 521, 57936, 57936, 57936, 57936, 57936, 61270, 57936, 57936, 57936, 57936, 57936, 57936, 61276, 57936, 57936, 57936, 61280, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 1791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 3947, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61306, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58312, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61322, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61338, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3759, 521, 57886, 61105, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 61439, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 61452, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61465, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60413, 57936, 57936, 57936, 57936, 57936, 57936, 60421, 57936, 57936, 57936, 57936, 57936, 60426, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 4077, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376832, 376832, 376832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1268, 1269, 0, 0, 0, 0, 0, 419, 419, 419, 419, 590, 590, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 0, 419, 0, 0, 0, 0, 0, 521, 1866, 521, 521, 521, 521, 521, 521, 1872, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 60568, 57886, 57886, 57886, 57886, 57886, 57886, 60575, 57886, 60577, 57886, 57886, 419, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2817, 0, 0, 0, 4268773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 637, 731, 0, 735, 736, 637, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393678, 393678, 393678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4025, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 393678, 0, 393678, 393678, 393678, 0, 393678, 393678, 393678, 393678, 393678, 393678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 425984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3176, 521, 521, 521, 521, 521, 3181, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 375, 0, 0, 0, 0, 0, 327, 375, 330, 374, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 57887, 521, 57887, 521, 521, 57887, 521, 521, 57910, 57887, 521, 521, 57887, 57887, 57887, 57910, 0, 0, 0, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 0, 420, 0, 0, 0, 0, 0, 521, 3435, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1916, 521, 521, 521, 521, 521, 521, 420, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 304, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2791, 0, 0, 1239, 0, 0, 0, 741, 1246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 1322, 521, 521, 521, 521, 521, 521, 521, 2468, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60276, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 2468, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60305, 57886, 57886, 0, 0, 0, 2963, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 308, 309, 0, 0, 0, 0, 0, 0, 1815, 0, 0, 0, 0, 0, 0, 0, 0, 1821, 0, 1823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3127, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 417792, 417792, 0, 0, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 418101, 417792, 417792, 418100, 418101, 417792, 417792, 418100, 417792, 418100, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 1, 24578, 3, 0, 0, 4366964, 0, 0, 0, 0, 0, 301, 302, 311296, 4268032, 305, 306, 0, 434176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1859, 0, 0, 1860, 0, 0, 900, 900, 5415812, 900, 5448580, 900, 5464964, 900, 5481348, 5563268, 900, 900, 900, 5636996, 900, 5686148, 900, 900, 5751684, 900, 900, 900, 900, 900, 5874564, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6464388, 0, 0, 0, 0, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 4932560, 4940752, 976, 976, 976, 976, 976, 4359044, 4858756, 4875140, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5260164, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5415812, 4359044, 5448580, 4359044, 5464964, 4359044, 5481348, 5563268, 4359044, 4359044, 4359044, 5636996, 4359044, 5686148, 4359044, 4359044, 5751684, 4359044, 4359044, 4359044, 4359044, 4359044, 5874564, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6275972, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5342084, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5628804, 5653380, 4359044, 5702532, 4359044, 4359044, 5809028, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4907008, 0, 5079040, 6094848, 0, 0, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 900, 4907908, 900, 5079940, 900, 5227396, 900, 5243780, 900, 900, 900, 900, 900, 900, 900, 5342084, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5628804, 5653380, 900, 5702532, 900, 900, 900, 900, 900, 900, 5211012, 900, 900, 900, 900, 5292932, 900, 900, 900, 900, 5366660, 900, 900, 900, 5456772, 900, 900, 900, 900, 900, 5555076, 5571460, 5579652, 5620612, 5669764, 900, 0, 0, 976, 976, 976, 4826064, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5178320, 976, 976, 976, 976, 976, 5112784, 976, 976, 976, 976, 976, 5284816, 976, 976, 976, 976, 5473232, 5522384, 976, 976, 976, 976, 5596112, 5710800, 5718992, 976, 5825488, 5866448, 976, 976, 5923792, 976, 5243856, 976, 976, 976, 976, 976, 976, 976, 5342160, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5628880, 5653456, 976, 5702608, 976, 976, 976, 976, 976, 976, 976, 5260240, 976, 976, 976, 976, 976, 976, 976, 976, 5415888, 976, 5448656, 976, 5465040, 976, 5481424, 5563344, 976, 976, 976, 5637072, 976, 5686224, 976, 976, 5751760, 976, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 0, 0, 0, 0, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 4932484, 4940676, 900, 900, 900, 900, 900, 900, 5055364, 900, 900, 5112708, 900, 900, 900, 900, 900, 5284740, 900, 900, 900, 900, 5473156, 5522308, 900, 900, 900, 900, 5596036, 5710724, 5718916, 900, 5825412, 5866372, 900, 900, 5923716, 900, 900, 6022020, 900, 900, 900, 5792644, 5817220, 900, 5858180, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6120324, 900, 6169476, 900, 900, 900, 900, 900, 6243204, 900, 6292356, 900, 6316932, 976, 5055440, 976, 976, 976, 976, 976, 976, 976, 976, 5211088, 976, 976, 976, 976, 5293008, 976, 976, 976, 976, 5366736, 976, 976, 976, 5456848, 976, 976, 976, 976, 976, 5555152, 5571536, 5579728, 5620688, 5669840, 976, 976, 976, 5792720, 5817296, 976, 5858256, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6120400, 976, 6169552, 976, 976, 976, 976, 976, 6243280, 976, 6292432, 976, 6317008, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6464464, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4932484, 4940676, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 900, 900, 900, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4359044, 5055364, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5211012, 4359044, 4359044, 4359044, 4359044, 5292932, 4359044, 4359044, 4359044, 4359044, 5366660, 4359044, 4359044, 4359044, 5456772, 4359044, 4359044, 4359044, 4359044, 4359044, 5555076, 5571460, 5579652, 5620612, 5669764, 4359044, 4359044, 4359044, 5792644, 5817220, 4359044, 5858180, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6120324, 4359044, 6169476, 4359044, 4359044, 4359044, 4359044, 4359044, 6243204, 4359044, 6292356, 4359044, 6316932, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6464388, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 4358144, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 4785028, 900, 900, 900, 4850564, 900, 900, 900, 900, 900, 4916100, 900, 4957060, 4973444, 900, 900, 900, 900, 900, 900, 5071748, 900, 900, 5194628, 900, 900, 900, 900, 900, 900, 900, 900, 976, 976, 976, 976, 976, 5194704, 976, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4359044, 4359044, 4359044, 5194628, 4359044, 0, 0, 4785104, 976, 976, 976, 4850640, 976, 976, 976, 976, 976, 4916176, 976, 4957136, 4973520, 976, 976, 976, 976, 976, 976, 5071824, 976, 976, 976, 976, 976, 976, 976, 5219280, 976, 976, 6357968, 6382544, 6398928, 4801412, 4809604, 4359044, 4359044, 4891524, 4359044, 4948868, 4359044, 4359044, 4359044, 5047172, 4359044, 4359044, 4359044, 4359044, 5186436, 4359044, 5235588, 5301124, 4359044, 4359044, 5407620, 5530500, 4359044, 4359044, 4359044, 4359044, 4359044, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 4924292, 900, 900, 900, 900, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1264, 0, 0, 0, 0, 0, 0, 0, 5268432, 976, 976, 5309392, 5317584, 976, 976, 976, 5432272, 976, 5489616, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5800912, 976, 976, 5882832, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 976, 6104016, 976, 976, 976, 6185936, 976, 976, 976, 6284240, 976, 976, 6333392, 976, 976, 976, 6390736, 976, 976, 6431696, 6439888, 4785028, 4359044, 4359044, 4359044, 4850564, 4359044, 4359044, 4359044, 4359044, 4359044, 4916100, 4359044, 4957060, 4973444, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5071748, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5219204, 4359044, 5268356, 4359044, 4359044, 5309316, 5317508, 4359044, 4359044, 4359044, 5432196, 4359044, 5489540, 4359044, 4359044, 4359044, 4359044, 4359044, 6054788, 4359044, 4359044, 4359044, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 5096324, 5104516, 900, 900, 5202820, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5890948, 900, 900, 900, 6030212, 900, 900, 900, 900, 6161284, 900, 900, 900, 900, 6407044, 976, 976, 976, 976, 976, 976, 976, 976, 4998096, 976, 976, 5039056, 976, 976, 976, 5096400, 5104592, 976, 976, 5202896, 976, 976, 976, 976, 976, 976, 976, 5891024, 976, 976, 976, 6030288, 976, 976, 976, 976, 6161360, 976, 976, 976, 976, 976, 976, 976, 6407120, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4998020, 4359044, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 900, 900, 4842372, 900, 900, 900, 4899716, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 975, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6300624, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5809028, 6038404, 900, 900, 6079364, 6112132, 900, 6177668, 6210436, 900, 6235012, 900, 900, 900, 900, 900, 900, 900, 0, 0, 976, 976, 4842448, 976, 976, 976, 4899792, 976, 976, 976, 976, 976, 976, 5874640, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6276048, 976, 976, 976, 976, 976, 976, 976, 976, 976, 0, 900, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5112708, 4359044, 4359044, 4359044, 4359044, 4359044, 5284740, 4359044, 4359044, 4359044, 4359044, 5473156, 5522308, 4359044, 4359044, 4359044, 4359044, 5596036, 5710724, 5718916, 4359044, 5825412, 5866372, 4359044, 4359044, 5923716, 976, 6022096, 976, 6038480, 976, 976, 6079440, 6112208, 976, 6177744, 6210512, 976, 6235088, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4842372, 4359044, 4359044, 4359044, 4899716, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5800836, 4359044, 4359044, 5882756, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6103940, 4359044, 4359044, 4359044, 6185860, 4359044, 4359044, 4359044, 6284164, 4359044, 4359044, 6333316, 4359044, 4359044, 6022020, 4359044, 6038404, 4359044, 4359044, 6079364, 6112132, 4359044, 6177668, 6210436, 4359044, 6235012, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 4358144, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 1760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 419, 0, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 900, 900, 900, 900, 900, 900, 900, 900, 4998020, 900, 900, 5038980, 4359044, 5038980, 4359044, 4359044, 4359044, 5096324, 5104516, 4359044, 4359044, 5202820, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5890948, 4359044, 4359044, 4359044, 6030212, 4359044, 4359044, 4359044, 4359044, 6161284, 4359044, 4359044, 4359044, 6226820, 0, 0, 0, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 4817796, 900, 900, 900, 900, 6087556, 4817872, 976, 976, 976, 976, 6087632, 4817796, 4359044, 4359044, 4359044, 4359044, 6087556, 5087232, 4358144, 4358144, 4358144, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 4801412, 4809604, 900, 900, 4891524, 900, 4948868, 900, 900, 900, 5047172, 900, 900, 900, 900, 900, 6054788, 900, 900, 900, 976, 976, 5014480, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6054864, 976, 976, 976, 4359044, 4359044, 5014404, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6407044, 4358144, 4358144, 4358144, 900, 900, 900, 4890624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5898240, 5963776, 0, 0, 6193152, 0, 0, 5406720, 6397952, 5186436, 900, 5235588, 5301124, 900, 900, 5407620, 5530500, 900, 900, 900, 900, 5899140, 900, 900, 900, 900, 900, 900, 900, 900, 6308740, 900, 900, 6357892, 6382468, 6398852, 4801488, 4809680, 976, 976, 4891600, 976, 4948944, 976, 976, 976, 5047248, 976, 976, 976, 976, 5186512, 976, 5235664, 5301200, 976, 976, 5407696, 5530576, 976, 976, 976, 976, 5899216, 976, 976, 976, 976, 976, 976, 976, 976, 6308816, 5899140, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6308740, 4359044, 4359044, 6357892, 6382468, 6398852, 5021696, 4358144, 4358144, 5022596, 900, 900, 0, 4980736, 0, 0, 0, 0, 0, 5373952, 5734400, 6045696, 0, 0, 0, 0, 0, 2771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2785, 0, 2786, 0, 0, 0, 0, 0, 0, 0, 0, 1843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1263, 0, 0, 0, 0, 0, 0, 0, 0, 4980736, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5324800, 5373952, 5537792, 5545984, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 6348800, 900, 4866948, 4883332, 900, 4981636, 900, 900, 900, 900, 5325700, 5374852, 5538692, 5546884, 5587844, 5735300, 5972868, 900, 6046596, 900, 6071172, 900, 900, 900, 900, 6349700, 976, 4867024, 4883408, 976, 4981712, 976, 976, 976, 976, 976, 976, 976, 976, 5325776, 5374928, 5538768, 5546960, 5587920, 5735376, 5972944, 976, 6046672, 976, 6071248, 976, 976, 976, 976, 6349776, 4359044, 4866948, 4883332, 4359044, 4981636, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5325700, 5374852, 5538692, 5546884, 5587844, 5735300, 5972868, 4359044, 6046596, 4359044, 6071172, 4359044, 4359044, 4359044, 4359044, 6349700, 4358144, 6144000, 900, 6144900, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 655, 0, 0, 521, 521, 521, 521, 521, 845, 521, 521, 861, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59499, 57909, 57909, 57909, 57886, 5693440, 0, 6496256, 5144576, 5136384, 0, 5914624, 4358144, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 900, 900, 5006212, 900, 900, 900, 5120900, 5137284, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6325124, 976, 976, 5006288, 976, 976, 976, 5120976, 5137360, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6325200, 4359044, 4359044, 4359044, 6390660, 4359044, 4359044, 6431620, 6439812, 4358144, 4358144, 4358144, 6266880, 6488064, 900, 900, 900, 6267780, 6488964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1767, 0, 0, 0, 0, 0, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4359044, 5006212, 4359044, 4359044, 4359044, 5120900, 5137284, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6325124, 5914624, 5915524, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 3627, 0, 0, 0, 0, 0, 0, 2285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1265, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6300548, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 0, 5013504, 0, 0, 6053888, 0, 0, 0, 0, 6012928, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 900, 900, 5014404, 900, 900, 900, 900, 6275972, 900, 900, 900, 900, 900, 900, 900, 900, 900, 0, 0, 977, 976, 976, 976, 976, 976, 4858832, 4875216, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 0, 0, 0, 0, 900, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6300548, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 900, 5743492, 900, 900, 900, 6095748, 900, 976, 4907984, 976, 5080016, 976, 5227472, 976, 5743568, 976, 976, 976, 6095824, 976, 4359044, 4907908, 4359044, 5079940, 4359044, 5227396, 4359044, 5743492, 4359044, 4359044, 4359044, 6095748, 4359044, 5062656, 0, 0, 0, 4358144, 5062656, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 5063556, 900, 900, 900, 900, 900, 6226820, 976, 5063632, 976, 976, 976, 976, 976, 6226896, 4359044, 5063556, 4359044, 4359044, 4359044, 4825988, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5178244, 4359044, 4359044, 4359044, 4359044, 4359044, 5243780, 4359044, 0, 5931008, 4358144, 5332992, 5980160, 4358144, 900, 5333892, 5981060, 900, 976, 5333968, 5981136, 976, 4359044, 5333892, 5981060, 4359044, 5439488, 5128192, 4358144, 5129092, 900, 5129168, 976, 5129092, 4359044, 4358144, 900, 976, 4359044, 4358144, 900, 976, 4359044, 6004736, 6005636, 6005712, 6005636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2345, 0, 0, 0, 0, 0, 2351, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 450560, 0, 450560, 450560, 450560, 450560, 450560, 450560, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 0, 450560, 0, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1824, 0, 0, 0, 0, 0, 0, 1729, 0, 0, 0, 0, 0, 0, 450560, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 0, 2359296, 0, 0, 0, 2359296, 0, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 4358144, 6291456, 4358144, 6316032, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 302, 0, 0, 306, 0, 0, 0, 0, 0, 0, 2335, 0, 0, 0, 0, 0, 2339, 0, 0, 0, 0, 0, 0, 0, 2343, 2344, 0, 0, 0, 0, 0, 2350, 0, 0, 0, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 2836, 521, 521, 521, 521, 2840, 521, 521, 4358144, 6430720, 6438912, 901, 0, 0, 0, 901, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 374, 374, 404, 977, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 5267456, 0, 0, 5308416, 5316608, 0, 0, 0, 5431296, 0, 5488640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5799936, 0, 0, 5881856, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 901, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3653, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3218, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60573, 57886, 60576, 57886, 57886, 57886, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 0, 0, 459186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459215, 459372, 459215, 459215, 459372, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5480448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5840896, 5849088, 0, 1, 24578, 3, 0, 0, 0, 0, 507904, 0, 0, 0, 507904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 0, 0, 0, 0, 0, 2796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3385, 3386, 0, 0, 0, 0, 3391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2789, 0, 0, 0, 2793, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2781, 0, 0, 2784, 0, 0, 0, 0, 2788, 0, 0, 0, 0, 0, 507904, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 442368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1225, 0, 0, 0, 0, 0, 0, 0, 1233, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 516096, 0, 0, 0, 516096, 0, 0, 0, 0, 0, 0, 516096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2287, 0, 2288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 1, 24578, 0, 0, 0, 4366336, 0, 0, 548864, 0, 0, 301, 302, 0, 4268032, 305, 306, 409600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 2340, 0, 0, 0, 0, 0, 0, 0, 0, 2347, 0, 0, 0, 0, 0, 0, 2354, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 40960, 0, 0, 0, 0, 0, 0, 2747, 0, 2749, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 2757, 0, 0, 0, 2760, 2761, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 855, 521, 521, 521, 521, 521, 874, 521, 521, 521, 521, 892, 521, 521, 521, 57886, 57886, 57886, 1, 24578, 4227364, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 540672, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1857, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 4227364, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 155941, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57887, 57887, 57887, 57887, 57887, 57887, 57887, 57910, 57910, 57887, 57887, 57937, 57887, 57887, 57887, 57887, 57887, 57887, 57887, 57937, 57937, 57887, 57887, 57887, 57887, 57937, 57937, 57887, 521, 57887, 57887, 57887, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4399797, 4399797, 4399797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 358, 0, 0, 399, 0, 0, 0, 0, 0, 139264, 147456, 399, 410, 0, 423, 410, 1, 24578, 3, 155942, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1236, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573440, 0, 573440, 573440, 573440, 0, 573440, 573440, 573440, 573440, 573440, 573440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3628, 0, 0, 0, 3631, 0, 0, 0, 0, 0, 0, 0, 0, 3639, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573440, 573440, 573440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1819, 1820, 0, 1822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1836, 0, 0, 0, 0, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4399798, 311296, 4399798, 0, 0, 0, 311296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1738, 0, 5300224, 5234688, 5423104, 0, 0, 0, 0, 5988352, 0, 0, 6135808, 6307840, 0, 5996544, 4800512, 0, 6356992, 3627, 0, 0, 5496832, 0, 0, 0, 0, 0, 5611520, 0, 0, 0, 0, 0, 0, 0, 1792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 326, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 630, 302, 0, 4268032, 633, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2806, 0, 0, 0, 0, 0, 0, 0, 0, 2814, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 0, 0, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 581632, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3172, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3183, 521, 521, 3187, 521, 521, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792, 3774, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 4358144, 4358144, 0, 901, 900, 900, 900, 900, 900, 4858756, 4875140, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5260164, 900, 900, 900, 900, 900, 900, 900, 900, 6103940, 900, 900, 900, 6185860, 900, 900, 900, 6284164, 900, 900, 6333316, 900, 900, 900, 6390660, 900, 900, 6431620, 6439812, 0, 0, 0, 0, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3869, 0, 0, 0, 0, 0, 787, 0, 0, 521, 521, 521, 521, 521, 847, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60869, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59939, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59946, 57909, 59948, 57909, 59951, 57909, 57909, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 3869, 0, 0, 0, 0, 0, 0, 2822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2830, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1938, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1387, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3638, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 451, 465, 465, 465, 478, 478, 478, 478, 478, 478, 478, 478, 478, 499, 478, 478, 478, 478, 517, 478, 478, 478, 517, 478, 478, 478, 478, 478, 478, 522, 57888, 522, 57888, 522, 522, 57888, 522, 522, 57911, 57888, 522, 522, 57888, 57888, 57888, 57911, 57888, 57888, 57888, 57888, 57888, 57888, 57888, 57911, 57911, 57888, 57888, 57938, 57888, 57888, 57888, 57888, 57888, 57888, 57888, 57938, 57938, 57888, 57888, 57888, 57888, 57938, 57938, 57888, 522, 57888, 57888, 57888, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 638, 0, 0, 641, 642, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1279, 0, 0, 0, 0, 1284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1292, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 764, 0, 0, 768, 0, 0, 0, 0, 0, 0, 3115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1175, 0, 1177, 1178, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 3114, 0, 0, 0, 0, 0, 3118, 0, 0, 0, 0, 0, 0, 0, 3124, 3125, 3126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1306, 0, 0, 0, 1310, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61024, 57886, 57886, 0, 824, 825, 0, 0, 0, 0, 780, 521, 521, 834, 838, 521, 521, 850, 521, 521, 521, 866, 521, 871, 521, 879, 521, 882, 521, 521, 896, 521, 57886, 57886, 57886, 57886, 57886, 57886, 59898, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 59913, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59448, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59461, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58253, 58257, 57886, 57886, 58269, 57886, 57886, 57886, 58285, 57886, 58290, 57886, 58298, 57886, 58301, 57886, 57886, 58315, 57886, 0, 57909, 57909, 57909, 58329, 58333, 57909, 57909, 58345, 57909, 57909, 57909, 58361, 57909, 58366, 57909, 58374, 57909, 58377, 57909, 57909, 58391, 57909, 0, 0, 0, 0, 58290, 57936, 57936, 57936, 58404, 58408, 57936, 57936, 58420, 57936, 57936, 57936, 58436, 57936, 58441, 57936, 58449, 57936, 0, 0, 0, 0, 521, 521, 521, 521, 521, 4172, 521, 57886, 57886, 57886, 57886, 57886, 61522, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61528, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59544, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59557, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59545, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59014, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58452, 57936, 57936, 58466, 57936, 834, 838, 1128, 882, 521, 521, 0, 58257, 58253, 58478, 58301, 57886, 57886, 155941, 1138, 0, 0, 1141, 0, 0, 1146, 0, 0, 0, 0, 0, 0, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 977, 0, 0, 0, 0, 0, 1210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1231, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 57886, 58831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59964, 57909, 57909, 57909, 57909, 59969, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 1753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1777, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 1199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 367, 367, 367, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 1813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2815, 0, 0, 1861, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1874, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1887, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61044, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 521, 521, 521, 521, 521, 1929, 521, 521, 1932, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1945, 521, 521, 521, 521, 521, 521, 1951, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59828, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59380, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61166, 57909, 57909, 57909, 61169, 57909, 57909, 57909, 57909, 521, 58754, 1960, 57886, 57886, 57886, 57886, 57886, 59311, 57886, 57886, 57886, 57886, 57886, 59317, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59330, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60835, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60845, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60854, 57886, 50657, 2060, 57909, 57909, 57909, 57909, 57909, 59411, 57909, 57909, 57909, 57909, 57909, 59417, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59430, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58890, 57909, 57909, 57909, 58893, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58900, 57909, 57909, 58904, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59472, 57909, 57909, 59475, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59489, 57909, 57909, 57909, 57909, 57909, 57909, 59495, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3151, 0, 0, 0, 3155, 0, 3157, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 59507, 57936, 57936, 57936, 57936, 57936, 59513, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59526, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59579, 57936, 57936, 57936, 57936, 57936, 57936, 59587, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 3105, 0, 0, 0, 0, 0, 0, 57936, 57936, 59568, 57936, 57936, 59571, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59585, 57936, 57936, 57936, 57936, 57936, 57936, 59591, 57936, 57936, 57936, 57936, 57936, 57936, 521, 2256, 521, 521, 521, 57886, 59605, 57886, 57886, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2275, 0, 0, 0, 0, 0, 0, 791, 0, 521, 521, 521, 521, 521, 521, 521, 521, 859, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1737, 1738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 309, 0, 309, 0, 0, 0, 0, 2331, 0, 2333, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1826, 0, 1828, 0, 0, 0, 0, 0, 0, 0, 1835, 0, 0, 521, 2464, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59829, 57886, 57886, 59832, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60265, 57886, 57886, 57886, 57886, 60268, 57886, 57886, 60270, 57886, 60271, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60280, 57886, 57886, 60284, 59840, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59860, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61032, 57886, 57886, 57886, 57886, 57886, 57886, 61038, 57886, 61040, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61089, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 59929, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59949, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58886, 57909, 58888, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60375, 57936, 60376, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60012, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60032, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60070, 57936, 57936, 57936, 2405, 521, 521, 521, 521, 59836, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2399, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2446, 521, 521, 521, 521, 521, 521, 521, 2452, 521, 521, 521, 521, 521, 521, 2457, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2847, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2889, 521, 521, 521, 521, 521, 521, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60315, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60323, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58924, 57909, 57909, 58928, 57909, 57909, 57909, 57909, 57909, 58935, 57909, 57909, 57909, 58942, 57909, 0, 57886, 57936, 57936, 57936, 57936, 60359, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60370, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60380, 57936, 0, 0, 0, 0, 521, 521, 521, 4170, 4171, 521, 521, 57886, 57886, 57886, 61520, 61521, 57886, 57886, 57886, 57909, 57909, 57909, 61526, 61527, 57909, 57909, 57909, 57936, 57936, 57936, 61532, 57936, 57936, 60435, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 3104, 0, 0, 0, 3108, 0, 0, 0, 0, 0, 0, 3142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262731, 0, 0, 0, 0, 0, 0, 0, 0, 3113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3136, 57909, 60627, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60636, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60644, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61057, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61062, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60676, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60685, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60693, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 1193, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60915, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60933, 57936, 60935, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60703, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 2748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 352256, 352256, 0, 0, 0, 0, 521, 3948, 521, 3950, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61307, 57886, 61309, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58807, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59347, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61165, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61170, 57909, 57909, 57909, 57909, 61323, 57909, 61325, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61339, 57936, 61341, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3859, 521, 61204, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 4012, 0, 0, 0, 4015, 0, 0, 521, 521, 521, 521, 4020, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 61377, 57886, 57886, 57886, 57886, 57886, 57909, 60861, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60352, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 312, 313, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2765, 0, 0, 0, 0, 0, 0, 426, 0, 131072, 0, 0, 0, 426, 0, 0, 0, 0, 0, 426, 452, 0, 0, 0, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 516, 452, 516, 516, 516, 452, 516, 516, 516, 516, 516, 516, 523, 57889, 523, 57889, 523, 523, 57889, 523, 523, 57912, 57889, 523, 523, 57889, 57889, 57889, 57912, 57889, 57889, 57889, 57889, 57889, 57889, 57889, 57912, 57912, 57889, 57889, 57939, 57889, 57889, 57889, 57889, 57889, 57889, 57889, 57939, 57939, 57889, 57889, 57889, 57889, 57939, 57939, 57889, 614, 57889, 57966, 57966, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385024, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 57909, 57909, 58370, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58445, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61199, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 820, 780, 0, 0, 0, 0, 0, 0, 754, 0, 0, 754, 0, 0, 0, 0, 0, 754, 754, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 2770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 60312, 57909, 57909, 57909, 57909, 60316, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60345, 57909, 57909, 57909, 57909, 60349, 57909, 57909, 57909, 60354, 57909, 57909, 57909, 57909, 60381, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60432, 57936, 57936, 57936, 57936, 57936, 60436, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2807, 0, 0, 0, 0, 0, 2812, 0, 0, 0, 0, 0, 57886, 61381, 57886, 61383, 57886, 57886, 61385, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61395, 57909, 61397, 57909, 57909, 61399, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 61409, 57936, 61411, 57936, 57936, 61413, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 351, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 319, 319, 427, 428, 131072, 435, 428, 436, 427, 435, 436, 0, 315, 436, 448, 453, 466, 466, 466, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 501, 501, 501, 514, 514, 515, 515, 501, 515, 515, 515, 501, 515, 515, 515, 515, 515, 515, 524, 57890, 524, 57890, 524, 524, 57890, 524, 524, 57913, 57890, 524, 524, 57890, 57890, 57890, 57913, 57890, 57890, 57890, 57890, 57890, 57890, 57890, 57913, 57913, 57890, 57890, 57940, 57890, 57890, 57890, 57890, 57890, 57890, 57890, 57940, 57940, 57890, 57890, 57890, 57890, 57940, 57940, 57890, 615, 57965, 57965, 57965, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1198, 367, 367, 0, 0, 1201, 0, 0, 0, 1204, 0, 1206, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5242880, 0, 0, 0, 0, 0, 5603328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 58378, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59553, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58453, 57936, 57936, 57936, 57936, 521, 521, 521, 883, 521, 521, 0, 57886, 57886, 57886, 58302, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3411, 0, 0, 0, 3415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 57886, 521, 57886, 521, 521, 57886, 521, 521, 57909, 57886, 521, 521, 57886, 57886, 57886, 57909, 521, 521, 521, 58754, 901, 57886, 57886, 58758, 57886, 57886, 58762, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58776, 57886, 58781, 57886, 57886, 58785, 57886, 57886, 58788, 57886, 57886, 57886, 57886, 57886, 57886, 58279, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58322, 57909, 57909, 57909, 57909, 57909, 57909, 58355, 57909, 57909, 57909, 58876, 57909, 57909, 58880, 57909, 57909, 58883, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58902, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 58951, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58965, 57936, 58970, 57936, 57936, 58974, 57936, 57936, 58977, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 3861, 0, 0, 0, 3863, 0, 0, 0, 0, 0, 0, 3627, 3870, 0, 1723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 521, 521, 521, 1927, 1928, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2433, 521, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59320, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59332, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 61494, 57909, 61495, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61502, 57936, 61503, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60018, 57936, 60020, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60396, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60401, 57936, 57936, 57936, 57936, 57936, 57886, 57886, 59370, 59371, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59420, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59432, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59446, 57909, 57909, 57909, 59450, 57909, 57909, 59455, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59990, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59998, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 59470, 59471, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3447, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1341, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3200, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61016, 57886, 57886, 57886, 61019, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59566, 59567, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162, 0, 0, 521, 2437, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2450, 521, 521, 521, 521, 521, 2454, 2455, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1374, 521, 1376, 521, 521, 521, 521, 521, 521, 521, 1389, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1404, 57886, 57886, 57886, 57886, 59869, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59882, 57886, 57886, 57886, 57886, 57886, 59886, 59887, 59888, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58800, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58822, 57886, 57886, 57886, 57886, 0, 0, 0, 2744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114688, 0, 0, 57886, 57886, 57886, 60288, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 826, 0, 0, 521, 521, 521, 521, 521, 849, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 60863, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60875, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59447, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60672, 3137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1837, 0, 0, 0, 3166, 0, 0, 3169, 0, 0, 0, 0, 0, 0, 0, 3173, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2451, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3379, 0, 0, 0, 0, 0, 0, 0, 3383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3422, 0, 0, 0, 0, 0, 0, 3429, 521, 3458, 3459, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60827, 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 695, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 883, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 2267, 0, 1142, 0, 0, 0, 0, 2270, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1809, 57909, 60884, 57909, 60886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60000, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60911, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60926, 57936, 60928, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60045, 60046, 57936, 57936, 57936, 57936, 57936, 57936, 60053, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61072, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59595, 57936, 57936, 57936, 1881, 521, 4010, 0, 4011, 0, 0, 0, 0, 0, 0, 0, 521, 4018, 521, 4019, 521, 521, 521, 4023, 521, 521, 521, 521, 521, 521, 521, 57886, 61375, 57886, 61376, 57886, 57886, 57886, 57886, 57886, 57886, 60264, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60269, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60275, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60283, 57886, 61380, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61389, 57909, 61390, 57909, 57909, 57909, 61394, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61403, 57936, 61404, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60388, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3376, 0, 0, 61408, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 1710, 0, 0, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 4213, 57886, 57886, 57886, 61559, 57909, 57909, 57909, 61561, 57936, 57936, 57936, 61563, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 0, 2471, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59858, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 376, 0, 131072, 0, 0, 0, 376, 0, 0, 438, 444, 0, 376, 454, 467, 467, 467, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 525, 57891, 525, 57891, 525, 525, 57891, 525, 525, 57914, 57891, 525, 525, 57891, 57891, 57891, 57914, 57891, 57891, 57891, 57891, 57891, 57891, 57891, 57914, 57914, 57891, 57891, 57941, 57891, 57891, 57891, 57891, 57891, 57891, 57891, 57941, 57941, 57891, 57891, 57891, 57891, 57941, 57941, 57891, 525, 57891, 57891, 57891, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229376, 0, 491520, 524288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1180, 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 1166, 0, 1298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1284, 0, 0, 0, 1312, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 1321, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 60241, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58814, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 521, 521, 1371, 521, 521, 1373, 521, 521, 521, 521, 1378, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1403, 521, 521, 521, 521, 521, 521, 521, 521, 3196, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3203, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1902, 521, 521, 521, 521, 521, 521, 521, 521, 1913, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1935, 521, 521, 521, 1941, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1950, 521, 521, 521, 521, 1956, 521, 521, 521, 521, 58754, 901, 57886, 57886, 58759, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58786, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61247, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61263, 57909, 57909, 57936, 57909, 57909, 57909, 57909, 58881, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58896, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58905, 57909, 57909, 58907, 57909, 57909, 57909, 57909, 58912, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58937, 57909, 57909, 57909, 57909, 0, 58812, 57936, 57936, 58948, 57936, 0, 0, 0, 0, 521, 521, 4169, 521, 521, 521, 4173, 57886, 57886, 61519, 57886, 57886, 57886, 61523, 57886, 57909, 57909, 61525, 57909, 57909, 57909, 61529, 57909, 57936, 57936, 61531, 57936, 0, 0, 0, 0, 4168, 521, 521, 521, 521, 521, 521, 61518, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61524, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61530, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61274, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 3938, 0, 0, 3941, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1883, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2876, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 60819, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58999, 57936, 57936, 59001, 57936, 57936, 57936, 57936, 59007, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59519, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59530, 57936, 57936, 57936, 57936, 57936, 59032, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2410, 521, 521, 521, 2259, 57886, 57886, 57886, 57886, 59608, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 2272, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2408, 521, 521, 521, 521, 521, 521, 521, 521, 2416, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1397, 521, 521, 521, 521, 521, 57886, 59893, 57886, 59895, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59916, 57909, 57909, 57909, 57909, 59920, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59958, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59971, 57909, 57909, 57909, 57909, 57909, 59975, 59976, 59977, 57909, 57909, 57909, 57909, 57909, 57909, 59982, 57909, 59984, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59999, 57936, 57936, 57936, 57936, 60003, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60683, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3369, 521, 57886, 60716, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 60065, 57936, 60067, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 0, 0, 0, 3622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 415, 0, 0, 0, 0, 0, 60285, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 1156, 1157, 1158, 1159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 57909, 57909, 57909, 60310, 57909, 60311, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59460, 57909, 57909, 57909, 57909, 57909, 59467, 57909, 521, 521, 3191, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3204, 521, 521, 521, 521, 521, 521, 521, 3210, 57886, 57886, 57886, 60582, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60596, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60606, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 60617, 57909, 57909, 57909, 57909, 57909, 57909, 60624, 57909, 57886, 60602, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61182, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58975, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58990, 57909, 57909, 57909, 57909, 60651, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60680, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60694, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61273, 57936, 61275, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1878, 1879, 521, 521, 521, 521, 1886, 521, 521, 521, 521, 521, 521, 521, 521, 1337, 521, 1342, 521, 521, 1346, 521, 521, 1349, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1380, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1396, 521, 521, 521, 521, 521, 57936, 57936, 57936, 57936, 57936, 60700, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 3768, 0, 0, 0, 0, 57909, 61073, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60030, 57936, 57936, 57936, 57936, 57936, 0, 521, 521, 521, 521, 521, 521, 3953, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61312, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2557, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59466, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61328, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61344, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61382, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61396, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61080, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61090, 57936, 57936, 57936, 57936, 61410, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2265, 1706, 2266, 0, 0, 0, 0, 2268, 1713, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2353, 0, 0, 330, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 1842, 0, 0, 1845, 0, 0, 0, 0, 0, 0, 1851, 1852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1845, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 455, 468, 468, 468, 481, 481, 481, 481, 492, 494, 481, 481, 492, 481, 503, 503, 503, 503, 518, 503, 503, 503, 518, 503, 503, 503, 503, 503, 503, 526, 57892, 526, 57892, 526, 526, 57892, 526, 526, 57915, 57892, 526, 526, 57892, 57892, 57892, 57915, 57892, 57892, 57892, 57892, 57892, 57892, 57892, 57915, 57915, 57892, 57892, 57942, 57892, 57892, 57892, 57892, 57892, 57892, 57892, 57942, 57942, 57892, 57892, 57892, 57892, 57942, 57942, 57892, 526, 57892, 57892, 57892, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 2310144, 2310144, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 677, 678, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 3141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 0, 0, 0, 711, 0, 713, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 765, 766, 0, 0, 0, 0, 0, 0, 0, 2308, 0, 0, 0, 0, 2313, 2314, 0, 0, 2316, 2317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270336, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 305, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 0, 0, 775, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 794, 0, 797, 0, 0, 0, 0, 0, 0, 777, 0, 789, 0, 803, 0, 0, 0, 0, 797, 809, 0, 0, 0, 0, 0, 809, 809, 812, 0, 0, 0, 777, 0, 0, 0, 0, 0, 821, 0, 0, 0, 0, 0, 0, 806, 0, 0, 806, 0, 0, 0, 0, 0, 806, 806, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 822, 782, 0, 0, 0, 0, 0, 775, 0, 0, 0, 821, 521, 521, 835, 521, 841, 521, 521, 856, 521, 521, 867, 521, 872, 521, 521, 881, 884, 889, 521, 897, 521, 57886, 57886, 57886, 57886, 57886, 57886, 60291, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 58254, 57886, 58260, 57886, 57886, 58275, 57886, 57886, 58286, 57886, 58291, 57886, 57886, 58300, 58303, 58308, 57886, 58316, 57886, 0, 57909, 57909, 57909, 58330, 57909, 58336, 57909, 57909, 58351, 57909, 57909, 58362, 57909, 58367, 57909, 57909, 58376, 58379, 58384, 57909, 58392, 57909, 0, 0, 0, 0, 58291, 57936, 57936, 57936, 58405, 57936, 58411, 57936, 57936, 58426, 57936, 57936, 58437, 57936, 58442, 57936, 57936, 58451, 58454, 58459, 57936, 58467, 57936, 835, 521, 521, 1129, 889, 521, 0, 57886, 58254, 57886, 58479, 58308, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326528, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 0, 0, 0, 0, 0, 0, 0, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1051, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6299648, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 1209, 0, 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1235, 0, 0, 1187, 0, 0, 0, 0, 0, 3434, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3451, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59827, 57886, 57886, 57886, 57886, 59831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58801, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58810, 57886, 57886, 58812, 57886, 57886, 57886, 57886, 58817, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61388, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61402, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5857280, 0, 6463488, 4939776, 0, 0, 5455872, 0, 0, 0, 0, 0, 0, 0, 0, 6062080, 6463488, 0, 5398528, 0, 521, 521, 521, 521, 1328, 521, 521, 521, 521, 521, 521, 1343, 521, 521, 521, 1348, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1365, 521, 1407, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58767, 57886, 57886, 57886, 57886, 57886, 57886, 58782, 57886, 57886, 57886, 58787, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58839, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 58855, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58869, 57909, 57909, 57909, 58877, 57909, 57909, 57909, 58882, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58899, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58419, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59003, 57936, 59005, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59018, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60704, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 57936, 58956, 57936, 57936, 57936, 57936, 57936, 57936, 58971, 57936, 57936, 57936, 58976, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 2741, 0, 57936, 58993, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59009, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59025, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61101, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 691, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59036, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 1719, 0, 1721, 0, 0, 0, 0, 0, 3621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3632, 0, 0, 0, 3635, 3636, 0, 0, 0, 0, 0, 0, 393678, 0, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 0, 393678, 393678, 0, 1754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1770, 0, 0, 0, 0, 0, 1776, 0, 0, 1779, 0, 1781, 0, 0, 0, 0, 0, 0, 3642, 0, 3644, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2854, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1943, 1944, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 1787, 1788, 0, 0, 0, 0, 0, 0, 0, 0, 1797, 1798, 0, 0, 0, 0, 0, 0, 1804, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 888, 521, 521, 521, 521, 57886, 57886, 57886, 1810, 1811, 1812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1830, 1831, 0, 1832, 1833, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3395, 0, 0, 3397, 0, 0, 0, 0, 0, 0, 0, 0, 1863, 1721, 1721, 1865, 521, 1867, 521, 1868, 1869, 521, 1871, 521, 521, 521, 1875, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1888, 521, 521, 521, 521, 1892, 521, 521, 521, 521, 1896, 521, 1898, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1908, 1909, 1911, 521, 521, 521, 521, 521, 521, 521, 1919, 1920, 521, 1922, 521, 521, 521, 521, 521, 521, 521, 521, 3667, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60611, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60622, 57909, 60625, 521, 1925, 1926, 521, 521, 521, 521, 521, 521, 521, 1934, 521, 1936, 521, 1939, 521, 521, 521, 521, 521, 1946, 521, 521, 1948, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3197, 3198, 521, 521, 521, 521, 3201, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3206, 521, 521, 521, 3209, 521, 521, 58754, 0, 59307, 57886, 59309, 57886, 59310, 57886, 59312, 57886, 59314, 57886, 57886, 57886, 59318, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59331, 57886, 57886, 57886, 57886, 59335, 57886, 1, 24578, 3, 155941, 156275, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 59339, 57886, 59341, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59351, 59352, 59354, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59362, 59363, 57886, 59365, 57886, 57886, 57886, 57886, 57886, 58799, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58829, 59368, 59369, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59377, 57886, 59379, 57886, 59382, 57886, 57886, 57886, 57886, 57886, 59390, 57886, 57886, 59392, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2558, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60371, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 60377, 57936, 57936, 57936, 57936, 50657, 0, 59407, 57909, 59409, 57909, 59410, 57909, 59412, 57909, 59414, 57909, 57909, 57909, 59418, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59431, 57909, 57909, 57909, 57909, 59435, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58916, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 1335, 521, 521, 521, 521, 58774, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 1709, 0, 0, 0, 0, 1716, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3882, 521, 3884, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59847, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60277, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 59439, 57909, 59441, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59451, 59452, 59454, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59462, 59463, 57909, 59465, 57909, 57909, 59468, 59469, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59477, 57909, 59479, 57909, 59482, 57909, 57909, 57909, 57909, 57909, 59490, 57909, 57909, 59492, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 57886, 60290, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60299, 57886, 57886, 57886, 60302, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 59503, 57936, 59505, 57936, 59506, 57936, 59508, 57936, 59510, 57936, 57936, 57936, 59514, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59527, 57936, 57936, 57936, 57936, 59531, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 1707, 0, 0, 0, 0, 1714, 0, 0, 0, 0, 0, 0, 0, 0, 3170, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3182, 521, 3185, 521, 521, 521, 521, 59535, 57936, 59537, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59547, 59548, 59550, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59558, 59559, 57936, 57936, 59561, 57936, 57936, 59564, 59565, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59573, 57936, 59575, 57936, 59578, 57936, 57936, 57936, 57936, 57936, 59586, 57936, 57936, 59588, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 1926, 521, 2258, 521, 57886, 59369, 57886, 59607, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2276, 0, 0, 2279, 2280, 0, 0, 0, 2284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2790, 0, 0, 0, 0, 2303, 0, 0, 0, 0, 2307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2323, 0, 0, 0, 0, 2327, 0, 0, 0, 0, 0, 3873, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58803, 57886, 57886, 57886, 57886, 58808, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58816, 57886, 57886, 57886, 58823, 58825, 57886, 57886, 57886, 0, 2356, 0, 0, 0, 0, 0, 0, 0, 0, 2365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2375, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 875, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 2412, 521, 2414, 521, 521, 521, 521, 521, 521, 521, 2420, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1357, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2441, 2442, 521, 521, 521, 521, 521, 521, 2449, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1383, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1400, 521, 521, 521, 2463, 521, 521, 2466, 2467, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59833, 57886, 59835, 57886, 57886, 57886, 57886, 57886, 57886, 60585, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60599, 57886, 57886, 57886, 57886, 57886, 59843, 57886, 59845, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59851, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60300, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 59896, 57886, 57886, 59899, 59900, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59922, 57909, 57909, 57909, 57909, 57909, 57909, 58388, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 3862, 0, 0, 3865, 0, 0, 0, 0, 3627, 0, 0, 59924, 57909, 57909, 57909, 57909, 57909, 57909, 59932, 57909, 59934, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59940, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 59991, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60707, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 60007, 57936, 57936, 57936, 57936, 57936, 57936, 60015, 57936, 60017, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60023, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 521, 2868, 521, 521, 521, 521, 2872, 521, 521, 521, 2877, 521, 521, 521, 521, 521, 521, 521, 521, 2885, 521, 521, 521, 521, 521, 521, 521, 2890, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 59820, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58811, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60259, 57886, 60261, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60278, 57886, 57886, 57886, 57886, 60282, 57886, 57886, 57886, 57886, 57886, 60605, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60319, 57909, 57909, 57909, 57909, 57909, 60324, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 60287, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60295, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60301, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60314, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60326, 57909, 60328, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60365, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61082, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 60362, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60368, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60379, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58959, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58978, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58988, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58960, 58967, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58980, 57936, 58982, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60417, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60424, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60410, 57936, 57936, 57936, 57936, 60414, 57936, 57936, 57936, 60419, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60427, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 3103, 0, 0, 3106, 3107, 0, 0, 3110, 3111, 60433, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278528, 0, 0, 0, 0, 0, 0, 3167, 3168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3189, 60580, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60593, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60600, 57909, 57909, 57909, 60629, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60642, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58925, 57909, 57909, 57909, 57909, 57909, 58933, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57909, 57909, 60649, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60678, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60691, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60044, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 3937, 0, 3939, 0, 0, 0, 0, 0, 3627, 3943, 0, 3945, 57936, 57936, 57936, 60698, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 2368, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2398, 521, 521, 2401, 521, 521, 521, 521, 521, 521, 2409, 521, 521, 3403, 0, 0, 0, 0, 3405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3419, 0, 0, 0, 0, 3424, 3425, 0, 3427, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3452, 521, 521, 521, 521, 3430, 0, 0, 0, 3433, 521, 521, 521, 521, 521, 521, 3440, 521, 521, 521, 521, 521, 3444, 521, 521, 521, 521, 521, 521, 521, 3450, 521, 521, 521, 521, 521, 3456, 60828, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60834, 57886, 57886, 57886, 57886, 57886, 60840, 57886, 57886, 60843, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60850, 60852, 57886, 57886, 57886, 57886, 57886, 57886, 58282, 58284, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58327, 57909, 57909, 57909, 57909, 57909, 57909, 58358, 58360, 57909, 60856, 57886, 60858, 60859, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 60866, 57909, 57909, 57909, 57909, 57909, 60870, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60876, 57909, 57909, 57909, 57909, 57909, 60882, 57909, 57909, 60885, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60892, 60894, 57909, 57909, 57909, 57909, 60898, 57909, 60900, 60901, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 60908, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61200, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3866, 3867, 0, 3627, 0, 3871, 57936, 57936, 60912, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60918, 57936, 57936, 57936, 57936, 57936, 60924, 57936, 57936, 60927, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60934, 60936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59000, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59020, 57936, 57936, 57936, 57936, 57936, 59028, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59542, 57936, 57936, 57936, 59546, 57936, 57936, 59551, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60048, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60940, 57936, 60942, 60943, 57936, 521, 521, 3602, 57886, 57886, 60949, 0, 0, 0, 0, 0, 0, 3611, 0, 0, 3614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 3649, 3650, 521, 521, 521, 521, 3654, 3655, 521, 521, 521, 521, 521, 3659, 521, 521, 521, 521, 3662, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 61018, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61023, 57886, 57886, 57886, 57886, 57886, 57886, 60833, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60841, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60855, 57909, 57909, 57909, 57909, 57909, 57909, 61052, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61063, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61071, 57909, 57909, 57909, 57909, 57909, 57909, 58914, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58930, 57909, 57909, 57909, 57909, 57909, 57909, 58941, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 303104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 61240, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61256, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 61076, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61081, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61092, 57886, 57886, 57886, 61440, 57886, 61442, 57886, 57886, 57886, 57886, 61447, 61448, 61449, 61450, 57909, 57909, 57909, 61453, 57909, 61455, 57909, 57909, 57909, 57909, 61460, 61461, 61462, 61463, 57936, 57936, 57936, 61466, 57936, 61468, 57936, 57936, 57936, 57936, 61473, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61031, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61392, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61406, 57936, 57936, 57936, 61535, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 4198, 521, 57886, 57886, 57886, 57886, 61546, 57886, 57909, 57909, 57909, 57909, 61550, 57909, 57936, 57936, 57936, 57936, 61554, 57936, 0, 371, 371, 0, 429, 131072, 371, 429, 429, 332, 371, 429, 0, 0, 429, 449, 429, 0, 0, 0, 429, 488, 488, 488, 493, 488, 488, 488, 493, 488, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 527, 57893, 527, 57893, 527, 527, 57893, 527, 527, 57916, 57893, 527, 527, 57893, 57893, 57893, 57916, 57893, 57893, 57893, 57893, 57893, 57893, 57893, 57916, 57916, 57893, 57893, 57943, 57893, 57893, 57893, 57893, 57893, 57893, 57893, 57943, 57943, 57893, 57893, 57893, 57893, 57943, 57943, 57893, 527, 57893, 57893, 57893, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 4399798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 521, 828, 521, 521, 521, 521, 521, 521, 860, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 58246, 1295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 2839, 521, 521, 521, 521, 521, 521, 1326, 521, 521, 521, 521, 521, 1338, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2430, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58765, 57886, 57886, 57886, 57886, 57886, 58777, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59381, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61041, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 58954, 57936, 57936, 57936, 57936, 57936, 58966, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 3375, 0, 0, 0, 57909, 57909, 57909, 59954, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60355, 57909, 57909, 57909, 57936, 57936, 57936, 60037, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59026, 57936, 57936, 57936, 0, 0, 4212, 521, 521, 521, 61558, 57886, 57886, 57886, 61560, 57909, 57909, 57909, 61562, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 521, 3793, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60607, 57886, 57886, 60610, 57886, 57886, 60613, 0, 0, 60614, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60637, 60638, 57909, 57909, 57909, 57909, 60641, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60647, 0, 0, 0, 430, 131072, 0, 430, 430, 0, 0, 430, 439, 0, 430, 0, 430, 469, 469, 469, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 528, 57894, 528, 57894, 528, 528, 57894, 528, 528, 57917, 57894, 528, 528, 57894, 57894, 57894, 57917, 57894, 57894, 57894, 57894, 57894, 57894, 57894, 57917, 57917, 57894, 57894, 57944, 57894, 57894, 57894, 57894, 57894, 57894, 57894, 57944, 57944, 57894, 57894, 57894, 57894, 57944, 57944, 57894, 528, 57894, 57894, 57894, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 58754, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 2561, 0, 50657, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59950, 57909, 57909, 2302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326, 0, 0, 0, 0, 0, 1213, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 420, 0, 0, 0, 0, 0, 2385, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1949, 521, 521, 521, 521, 521, 521, 521, 0, 3138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3158, 0, 0, 0, 0, 0, 0, 0, 0, 1731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1747, 0, 0, 1750, 0, 0, 521, 521, 521, 3213, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58868, 57909, 0, 0, 3404, 0, 0, 0, 0, 0, 3407, 0, 3409, 0, 0, 3412, 0, 0, 0, 0, 0, 3417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 4399797, 4399797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3460, 521, 521, 521, 521, 521, 521, 521, 521, 3468, 521, 521, 3471, 521, 521, 521, 60818, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58296, 57886, 57886, 57886, 57886, 58314, 57886, 57886, 0, 57909, 57909, 58325, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 60857, 57886, 57886, 57886, 60860, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60877, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59959, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60664, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 60887, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60896, 57909, 57909, 60899, 57909, 57909, 57909, 60902, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4089, 521, 57886, 57886, 57886, 60938, 57936, 57936, 60941, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3615, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3159, 3160, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3663, 521, 3665, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 61017, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59850, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59857, 57886, 59859, 57886, 59862, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61029, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61035, 57886, 61037, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 61046, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58917, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58934, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 58949, 57936, 61093, 57936, 61095, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 3791, 521, 521, 521, 521, 521, 521, 521, 521, 3797, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58804, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58819, 57886, 57886, 57886, 57886, 57886, 57886, 61153, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61159, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61172, 57909, 57909, 57909, 57909, 57909, 57909, 58915, 57909, 57909, 58922, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58936, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 1336, 521, 521, 521, 521, 58775, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 1711, 0, 0, 0, 0, 1718, 0, 0, 0, 0, 0, 0, 1247, 1248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155, 1154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3630, 0, 0, 0, 0, 0, 0, 0, 3637, 0, 0, 57936, 57936, 57936, 57936, 57936, 61197, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3782, 0, 0, 521, 521, 521, 521, 0, 0, 0, 0, 683, 684, 0, 0, 0, 0, 689, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 57896, 530, 57896, 530, 530, 57896, 530, 530, 57919, 57896, 530, 530, 57896, 57896, 57896, 57919, 57886, 58258, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58317, 0, 57909, 57909, 57909, 57909, 58334, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59481, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 57936, 57936, 57936, 58468, 521, 839, 521, 521, 521, 898, 0, 58258, 57886, 57886, 57886, 57886, 58317, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1219, 1220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6299648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5808128, 0, 0, 0, 1211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3647, 521, 521, 521, 521, 521, 521, 521, 3652, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2421, 521, 521, 521, 2424, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2895, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60842, 57886, 60844, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 1839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1307, 1308, 0, 0, 1154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 1319, 521, 521, 521, 1958, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 412, 139264, 147456, 0, 0, 0, 421, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 2773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3634, 0, 0, 0, 0, 0, 0, 424, 424, 0, 0, 131072, 424, 0, 0, 0, 424, 0, 440, 0, 0, 424, 334, 470, 470, 470, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 504, 512, 512, 512, 512, 519, 512, 512, 512, 519, 512, 512, 512, 512, 512, 512, 529, 57895, 529, 57895, 529, 529, 57895, 529, 529, 57918, 57895, 529, 529, 57895, 57895, 57895, 57918, 57895, 57895, 57895, 57895, 57895, 57895, 57895, 57918, 57918, 57895, 57895, 57945, 57895, 57895, 57895, 57895, 57895, 57895, 57895, 57945, 57945, 57895, 57895, 57895, 57895, 57945, 57945, 57895, 529, 57895, 57895, 57895, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1734, 0, 0, 0, 0, 0, 0, 0, 0, 1741, 0, 0, 1744, 1745, 1746, 0, 1748, 1749, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 842, 521, 851, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 899, 57886, 57886, 57886, 57886, 57886, 57886, 61244, 57886, 57886, 57886, 61248, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61254, 57909, 57909, 57909, 57909, 57909, 57909, 61260, 57909, 57909, 57909, 61264, 57909, 57936, 57886, 57886, 58261, 57886, 58270, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58318, 0, 57909, 57909, 57909, 57909, 57909, 58337, 57909, 58346, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58887, 58889, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60661, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60669, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58469, 521, 521, 521, 521, 1130, 899, 0, 57886, 57886, 57886, 57886, 58480, 58318, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1764, 1765, 1766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2319, 2320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1331, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1350, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1360, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59825, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59837, 57886, 57886, 521, 1408, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58770, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58789, 57886, 57886, 57886, 57886, 57886, 57886, 59342, 59343, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59360, 57886, 57886, 57886, 57886, 57886, 59367, 57886, 57886, 58833, 57886, 57886, 57886, 57886, 57886, 58840, 57886, 57886, 57886, 58847, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58865, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58919, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60042, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3370, 57886, 57886, 60717, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59037, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1796, 0, 0, 0, 0, 0, 0, 0, 1803, 0, 1805, 0, 0, 0, 1807, 0, 739, 0, 0, 0, 0, 1838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1836, 1924, 521, 521, 521, 521, 521, 521, 521, 521, 1933, 521, 521, 521, 521, 521, 521, 1942, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1952, 1954, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59861, 57886, 57886, 57886, 57886, 57886, 57886, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59328, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61033, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59428, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58397, 57936, 57936, 57936, 57936, 57936, 57936, 58430, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59572, 57936, 57936, 57936, 57936, 57936, 57936, 59581, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59592, 59594, 57936, 57936, 57936, 57936, 521, 521, 521, 0, 0, 2472, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59885, 57886, 57886, 57886, 57886, 59889, 57886, 57886, 57886, 2329, 0, 0, 0, 0, 0, 0, 0, 0, 2337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3128, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 2465, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 59824, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59836, 57886, 57886, 57886, 57886, 57886, 57886, 61492, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61500, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59583, 59584, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 2255, 521, 59925, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60358, 59953, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59972, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59935, 57909, 59937, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60660, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60671, 57936, 60008, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59598, 521, 521, 60036, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60055, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 4132, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 2769, 0, 0, 2772, 0, 0, 0, 0, 0, 0, 2776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2787, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 319488, 0, 0, 0, 0, 0, 0, 2795, 0, 0, 0, 0, 2797, 0, 0, 0, 0, 0, 0, 0, 2801, 2802, 0, 0, 2805, 0, 0, 2808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2828, 0, 0, 0, 0, 521, 2832, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2878, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1356, 521, 521, 521, 1359, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2873, 521, 521, 521, 521, 521, 521, 2880, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2888, 521, 521, 521, 2891, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60253, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61493, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61501, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60921, 57936, 60923, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60930, 57936, 57936, 60932, 57936, 57936, 57936, 57936, 57936, 0, 0, 57909, 60308, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60331, 57936, 57936, 60407, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60415, 57936, 57936, 57936, 57936, 57936, 57936, 60422, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60431, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59574, 57936, 57936, 57936, 59580, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59590, 57936, 57936, 57936, 57936, 59596, 57936, 57936, 521, 521, 521, 0, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59864, 57886, 57886, 57886, 57936, 60434, 57936, 57936, 57936, 57936, 57936, 57936, 3094, 521, 521, 521, 521, 60441, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 3102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 3646, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3658, 521, 521, 521, 3112, 0, 0, 0, 0, 0, 0, 0, 3116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3130, 3131, 0, 0, 0, 0, 0, 0, 0, 3143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, 0, 0, 0, 0, 0, 3211, 521, 521, 521, 521, 521, 521, 521, 3215, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 60567, 57886, 57886, 57886, 57886, 57886, 60572, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61246, 57886, 57886, 57886, 61249, 57909, 57909, 57909, 57909, 61253, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61262, 57909, 57909, 57909, 61265, 60601, 57886, 60603, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60608, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 60616, 57909, 57909, 57909, 57909, 57909, 60621, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60654, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61086, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 60650, 57909, 60652, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60657, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60665, 57936, 57936, 57936, 57936, 57936, 60670, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60041, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60054, 57936, 57936, 57936, 57936, 57936, 60058, 60059, 60060, 57936, 60696, 57936, 57936, 57936, 60699, 57936, 60701, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60706, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 3374, 0, 0, 3377, 3378, 521, 521, 521, 521, 521, 521, 3462, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 60822, 57886, 57886, 57886, 57886, 60826, 57886, 57886, 57886, 57886, 57886, 58835, 57886, 57886, 57886, 57886, 57886, 57886, 58846, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58862, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58394, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 58412, 57936, 58421, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 4085, 521, 4087, 521, 521, 521, 57886, 57886, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60916, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60931, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 3608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, 1196, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3619, 3620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3633, 0, 0, 0, 0, 0, 0, 0, 0, 1793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60825, 57886, 57886, 57886, 57886, 521, 521, 3787, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3798, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61149, 57886, 57886, 57886, 57886, 57886, 58836, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58861, 57909, 57909, 57909, 58870, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61198, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 3777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 4022, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61379, 0, 521, 521, 521, 521, 521, 521, 521, 521, 3955, 521, 3957, 3958, 521, 3960, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61314, 57886, 61316, 61317, 57886, 61319, 57886, 61321, 61488, 57886, 61489, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61496, 57909, 61497, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61504, 57936, 61505, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58961, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59019, 57936, 57936, 59023, 57936, 57936, 57936, 57936, 57936, 59030, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 4224, 61569, 61570, 61571, 521, 521, 521, 521, 521, 521, 521, 1332, 1339, 521, 521, 521, 521, 521, 521, 521, 521, 1352, 521, 1354, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2422, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 60566, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58307, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57896, 57896, 57896, 57896, 57896, 57896, 57896, 57919, 57919, 57896, 57896, 57946, 57896, 57896, 57896, 57896, 57896, 57896, 57896, 57946, 57946, 57896, 57896, 57896, 57896, 57946, 57946, 57896, 530, 57896, 57896, 57896, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2312, 0, 0, 0, 2315, 0, 0, 0, 0, 0, 2321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 58909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 1706, 0, 0, 0, 1712, 1713, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 383, 0, 139264, 147456, 0, 405, 0, 0, 405, 0, 0, 0, 431, 131072, 0, 431, 431, 0, 0, 431, 0, 445, 431, 0, 431, 471, 471, 471, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 531, 57897, 531, 57897, 531, 531, 57897, 531, 531, 57920, 57897, 531, 531, 57897, 57897, 57897, 57920, 57897, 57897, 57897, 57897, 57897, 57897, 57897, 57920, 57920, 57897, 57897, 57947, 57897, 57897, 57897, 57897, 57897, 57897, 57897, 57947, 57947, 57897, 57897, 57897, 57897, 57947, 57947, 57897, 531, 57897, 57897, 57897, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2775, 0, 0, 0, 0, 0, 2780, 0, 2782, 2783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, 0, 0, 1266, 0, 0, 0, 0, 1271, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 654, 0, 0, 0, 0, 813, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 3645, 521, 521, 521, 3648, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3656, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 733, 654, 0, 0, 521, 829, 521, 521, 521, 844, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 885, 521, 521, 521, 521, 57886, 57886, 58247, 57886, 57886, 57886, 58263, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58304, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58323, 57909, 57909, 57909, 58339, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59987, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 59996, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60391, 57936, 60393, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60022, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60029, 57936, 60031, 57936, 60034, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 58380, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58398, 57936, 57936, 57936, 58414, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60390, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60710, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 58455, 57936, 57936, 57936, 57936, 521, 521, 521, 885, 521, 521, 0, 57886, 57886, 57886, 58304, 57886, 57886, 293, 1138, 0, 0, 1142, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3888, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58841, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60639, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59965, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 1154, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 1280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 763, 0, 0, 767, 0, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 58757, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58771, 58778, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58791, 57886, 58793, 57886, 57886, 57886, 57886, 57886, 60831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60849, 57886, 60851, 57886, 57886, 57886, 57886, 57886, 57886, 58278, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58354, 57909, 57909, 58908, 57909, 58910, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58923, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58938, 57909, 57909, 57909, 0, 57886, 57936, 58946, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60068, 57936, 57936, 60071, 60072, 57936, 2404, 521, 2731, 521, 521, 59835, 57886, 60080, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 0, 0, 0, 4014, 0, 4016, 0, 521, 521, 521, 521, 521, 4021, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61378, 57886, 57936, 59033, 57936, 57936, 57936, 521, 1332, 521, 1389, 521, 521, 58771, 57886, 57886, 58828, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3156, 0, 0, 0, 0, 3161, 0, 0, 0, 3163, 0, 1724, 1725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342912, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1930, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1957, 521, 58754, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59321, 59322, 57886, 57886, 57886, 57886, 59329, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 61391, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61405, 57936, 57936, 50657, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59421, 59422, 57909, 57909, 57909, 57909, 59429, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 741, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59520, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 59473, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59501, 57909, 57886, 57886, 57886, 57886, 57886, 60832, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60847, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58843, 57886, 57886, 57886, 50657, 58754, 977, 57909, 58852, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58866, 58873, 57936, 57936, 57936, 57936, 57936, 59540, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59560, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59569, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59597, 57936, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59359, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2346, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2397, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61162, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59866, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59878, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59884, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59890, 57886, 57886, 57886, 57886, 57886, 61030, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61036, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61393, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61407, 57909, 57909, 57909, 57909, 59955, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59967, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59973, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60366, 57909, 57909, 57909, 60369, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60373, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 4083, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57909, 57909, 59979, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60430, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60038, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60050, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60056, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1149, 0, 0, 57936, 57936, 60062, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3109, 0, 0, 60258, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59865, 3164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 3180, 521, 521, 521, 521, 521, 521, 3188, 521, 521, 521, 521, 521, 521, 521, 1333, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2858, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57909, 57909, 60628, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61070, 57909, 57909, 57936, 57936, 57936, 60677, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59027, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61099, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3171, 0, 0, 0, 521, 3175, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 2472, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59349, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61039, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 61441, 57886, 61443, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61454, 57909, 61456, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3607, 0, 3609, 0, 0, 0, 3613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1733, 0, 0, 0, 1736, 0, 0, 1739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 335872, 0, 0, 61467, 57936, 61469, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 4134, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61485, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59846, 57886, 59848, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60273, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 388, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2351104, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 456, 472, 472, 472, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 532, 57898, 532, 57898, 532, 532, 57898, 532, 532, 57921, 57898, 532, 532, 57898, 57898, 57898, 57921, 57898, 57898, 57898, 57898, 57898, 57898, 57898, 57921, 57921, 57898, 57898, 57948, 57898, 57898, 57898, 57898, 57898, 57898, 57898, 57948, 57948, 57898, 57898, 57898, 57898, 57948, 57948, 57898, 532, 57898, 57898, 57898, 1, 24578, 3, 155941, 156275, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 0, 0, 0, 0, 212992, 212992, 212992, 212992, 212992, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 58264, 57886, 57886, 58280, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58340, 57909, 57909, 58356, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59444, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59464, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58921, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 1722, 0, 1241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1293, 0, 0, 0, 0, 0, 1299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1890, 521, 521, 521, 521, 521, 521, 521, 521, 1372, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1391, 521, 521, 521, 521, 521, 1399, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 59819, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59357, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58772, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58848, 50657, 58754, 977, 58851, 57909, 57909, 57909, 57909, 57909, 58858, 57909, 57909, 57909, 57909, 58864, 57909, 57909, 57909, 58830, 57886, 57886, 57886, 57886, 57886, 58838, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58867, 57909, 57909, 57909, 57909, 57909, 57909, 60631, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60645, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59985, 57909, 57909, 59988, 59989, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60005, 57936, 0, 0, 1755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, 0, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59323, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59334, 57886, 57886, 57886, 57886, 57886, 58837, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61058, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61064, 57909, 61066, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59423, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59434, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61178, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61191, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59541, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59552, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61279, 57936, 57936, 521, 57886, 0, 0, 0, 3940, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 2282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2298, 2299, 0, 0, 0, 0, 0, 0, 0, 3382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 2355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2328, 521, 2413, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2866, 57886, 57886, 57886, 57886, 59844, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58824, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 59928, 57909, 57909, 57909, 57909, 59933, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60011, 57936, 57936, 57936, 57936, 60016, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58985, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 3380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4284416, 0, 0, 57886, 60829, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59366, 57886, 57936, 57936, 57936, 60913, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59562, 57936, 57936, 57936, 0, 521, 521, 521, 521, 3951, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 61310, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59875, 57886, 57886, 57886, 57886, 59880, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58859, 57909, 57909, 57909, 58863, 57909, 57909, 58874, 57909, 57909, 57909, 57909, 61326, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61342, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59004, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60689, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61508, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 521, 1333, 521, 521, 1698, 521, 58772, 57886, 57886, 57886, 59047, 57886, 1138, 0, 0, 1708, 0, 0, 0, 0, 1715, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3883, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59344, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59364, 57886, 57886, 57886, 341, 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 341, 295, 0, 0, 0, 0, 0, 4013, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4027, 521, 521, 4029, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59376, 57886, 57886, 57886, 57886, 57886, 57886, 59385, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59396, 59398, 57886, 57886, 57886, 57886, 0, 0, 0, 389, 390, 392, 342, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 748, 749, 750, 0, 0, 0, 0, 0, 756, 757, 0, 0, 0, 0, 0, 0, 0, 0, 769, 770, 0, 772, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 389, 0, 0, 0, 0, 0, 342, 389, 0, 0, 0, 139264, 147456, 0, 0, 0, 422, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 245760, 0, 0, 245760, 245760, 245760, 0, 0, 0, 0, 0, 245760, 0, 245760, 245760, 0, 0, 0, 245760, 245760, 0, 0, 245760, 0, 0, 0, 0, 131072, 0, 0, 0, 341, 0, 0, 0, 446, 0, 341, 0, 473, 473, 473, 473, 489, 489, 489, 489, 489, 489, 489, 489, 489, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 533, 57899, 533, 57899, 533, 533, 57899, 533, 533, 57922, 57899, 533, 533, 57899, 57899, 57899, 57922, 57899, 57899, 57899, 57899, 57899, 57899, 57899, 57922, 57922, 57899, 57935, 57949, 57935, 57935, 57935, 57935, 57935, 57935, 57935, 57949, 57949, 57935, 57935, 57935, 57935, 57949, 57949, 57935, 533, 57899, 57899, 57899, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 344064, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 660, 0, 779, 0, 0, 0, 0, 0, 779, 802, 0, 802, 800, 0, 0, 0, 814, 0, 0, 0, 656, 817, 0, 779, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 783, 656, 827, 0, 521, 830, 521, 521, 521, 846, 521, 521, 862, 521, 521, 521, 521, 876, 521, 521, 521, 521, 894, 521, 521, 57886, 57886, 58248, 57886, 57886, 57886, 58265, 57886, 57886, 58281, 57886, 57886, 57886, 57886, 58295, 57886, 57886, 57886, 57886, 58313, 57886, 57886, 0, 57909, 57909, 58324, 57909, 57909, 57909, 58341, 57909, 57909, 58357, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59476, 57909, 57909, 57909, 57909, 57909, 57909, 59485, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59496, 59498, 57909, 57909, 57909, 57909, 57886, 57909, 57909, 58371, 57909, 57909, 57909, 57909, 58389, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58399, 57936, 57936, 57936, 58416, 57936, 57936, 58432, 57936, 57936, 57936, 57936, 58446, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60412, 57936, 57936, 60416, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60425, 57936, 57936, 57936, 60428, 60429, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 1143, 0, 0, 1148, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3881, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58802, 57886, 57886, 57886, 58806, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60623, 57909, 57936, 57936, 58464, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 1816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 1274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 57906, 540, 57906, 540, 540, 57906, 540, 540, 57929, 57906, 540, 540, 57906, 57906, 57906, 57929, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58773, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59348, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59361, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58797, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58821, 57886, 57886, 57886, 57886, 57886, 57886, 59374, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59386, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59397, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61444, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61457, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3095, 521, 521, 521, 57886, 60442, 57886, 57886, 57886, 0, 0, 3100, 3101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 3776, 0, 0, 0, 0, 3780, 0, 0, 0, 0, 0, 0, 0, 0, 3783, 0, 521, 521, 521, 3785, 0, 0, 0, 0, 1814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645, 221645, 221645, 221645, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59316, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59327, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59345, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59356, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59876, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59416, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59427, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58429, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 2440, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2459, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60252, 57886, 57886, 57886, 57886, 57886, 60257, 59892, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 59910, 57909, 59912, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60340, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61060, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59981, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 59993, 57936, 59995, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60686, 60687, 57936, 57936, 57936, 57936, 60690, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60064, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2274, 0, 0, 0, 0, 0, 0, 0, 2820, 0, 0, 0, 0, 2823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2831, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61320, 57886, 521, 2842, 521, 521, 2845, 2846, 521, 521, 521, 521, 521, 2851, 521, 2853, 521, 521, 521, 521, 2857, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2863, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60251, 57886, 57886, 60254, 60255, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60878, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59445, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59456, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61336, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61352, 57936, 521, 521, 521, 521, 521, 2871, 521, 521, 521, 521, 521, 521, 2879, 521, 521, 521, 521, 521, 2884, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1904, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1353, 1355, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 60260, 57886, 60262, 57886, 57886, 57886, 57886, 60266, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60272, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60281, 57886, 57886, 57886, 57886, 57886, 59373, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59401, 57886, 57886, 57886, 57886, 57886, 60289, 57886, 57886, 57886, 57886, 57886, 60294, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60330, 57909, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60318, 57909, 57909, 60321, 60322, 57909, 57909, 57909, 57909, 57909, 60327, 57909, 60329, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60336, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60342, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60350, 57909, 57909, 57909, 57909, 57909, 57909, 60357, 57909, 57909, 57909, 60333, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60339, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60348, 57909, 57909, 57909, 57909, 57909, 57909, 60356, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60632, 57909, 57909, 60635, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60646, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60889, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 60906, 57936, 57936, 57936, 57936, 60910, 57909, 57909, 57909, 60361, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61192, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60383, 57936, 57936, 60386, 60387, 57936, 57936, 57936, 57936, 57936, 60392, 57936, 60394, 57936, 57936, 57936, 57936, 60398, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60404, 0, 0, 3139, 0, 0, 0, 0, 0, 0, 0, 3145, 0, 3147, 0, 0, 0, 3150, 0, 0, 3153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 450560, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1799, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3174, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2882, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2892, 521, 521, 521, 521, 521, 3192, 521, 521, 3195, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3205, 521, 521, 521, 521, 521, 521, 521, 521, 2443, 521, 521, 521, 521, 2448, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1906, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1940, 521, 521, 521, 521, 521, 521, 1947, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3214, 521, 521, 3217, 521, 521, 3220, 0, 0, 60565, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58302, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 60583, 57886, 57886, 60586, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60597, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59871, 57886, 57886, 57886, 57886, 57886, 59877, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 3431, 0, 0, 521, 521, 3436, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3453, 521, 3455, 521, 521, 521, 521, 521, 521, 521, 1334, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1358, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2419, 521, 521, 521, 521, 521, 521, 521, 521, 2426, 521, 2428, 521, 2431, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2444, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1392, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3461, 521, 521, 3463, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 60820, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59378, 57886, 57886, 57886, 59384, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59394, 57886, 57886, 57886, 57886, 59400, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 60888, 57909, 57909, 60890, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60904, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3601, 521, 57886, 60948, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 3664, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61020, 61021, 57886, 57886, 57886, 57886, 61025, 61026, 57909, 57909, 61049, 61050, 57909, 57909, 57909, 57909, 61054, 61055, 57909, 57909, 57909, 57909, 57909, 61059, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61065, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59960, 57909, 57909, 57909, 57909, 57909, 59966, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60341, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60353, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61094, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3764, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 2394, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2406, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3792, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59849, 57886, 57886, 57886, 57886, 57886, 57886, 59854, 57886, 59856, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60267, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61163, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 61154, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61173, 57886, 57886, 57886, 57886, 61242, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61258, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61075, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61087, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 4137, 521, 4138, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 0, 521, 521, 3949, 521, 521, 521, 521, 3954, 521, 521, 521, 521, 3959, 521, 521, 57886, 57886, 61308, 57886, 57886, 57886, 57886, 61313, 57886, 57886, 57886, 57886, 61318, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60873, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58418, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58969, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59012, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59029, 57936, 57909, 57909, 61324, 57909, 57909, 57909, 57909, 61329, 57909, 57909, 57909, 57909, 61334, 57909, 57909, 57909, 57936, 57936, 61340, 57936, 57936, 57936, 57936, 61345, 57936, 57936, 57936, 57936, 61350, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58962, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58986, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 3606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 61384, 57886, 57886, 61386, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61398, 57909, 57909, 61400, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3600, 521, 521, 60947, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3617, 3618, 0, 0, 57936, 57936, 57936, 57936, 61412, 57936, 57936, 61414, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60872, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59449, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58932, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 61533, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 4195, 521, 521, 521, 521, 57886, 61543, 57886, 57886, 57886, 57886, 57909, 61547, 57909, 57909, 57909, 57909, 57936, 61551, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 4196, 4197, 521, 521, 57886, 57886, 61544, 61545, 57886, 57886, 57909, 57909, 61548, 61549, 57909, 57909, 57936, 57936, 61552, 61553, 57936, 57936, 0, 57886, 57909, 57936, 4232, 61577, 61578, 61579, 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 345, 346, 347, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 245760, 245760, 245760, 245760, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 245760, 245760, 245760, 0, 0, 0, 0, 139264, 147456, 245760, 245760, 0, 0, 245760, 0, 0, 0, 245760, 245760, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 245760, 0, 0, 245760, 0, 0, 245760, 0, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 348, 347, 131072, 346, 347, 347, 348, 346, 347, 0, 346, 347, 450, 457, 474, 474, 474, 485, 485, 485, 491, 485, 485, 491, 491, 485, 491, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 534, 57900, 534, 57900, 534, 534, 57900, 534, 534, 57923, 57900, 534, 534, 57900, 57900, 57900, 57923, 57900, 57900, 57900, 57900, 57900, 57900, 57900, 57923, 57923, 57900, 57900, 57950, 57900, 57900, 57900, 57900, 57900, 57900, 57900, 57950, 57950, 57900, 57900, 57900, 57900, 57950, 57950, 57900, 534, 57900, 57900, 57900, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 644, 645, 646, 647, 648, 649, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 666, 0, 668, 669, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1881, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1375, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1914, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 709, 0, 0, 712, 0, 714, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499712, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 302, 305, 0, 306, 4857856, 4874240, 0, 0, 4923392, 0, 0, 0, 0, 757, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 796, 0, 0, 685, 0, 0, 0, 757, 0, 0, 0, 0, 0, 278528, 278528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1176, 0, 0, 0, 0, 0, 685, 816, 816, 0, 0, 0, 0, 0, 521, 521, 836, 840, 843, 521, 852, 521, 521, 521, 868, 870, 873, 521, 521, 521, 886, 890, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60871, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58892, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60372, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58255, 58259, 58262, 57886, 58271, 57886, 57886, 57886, 58287, 58289, 58292, 57886, 57886, 57886, 58305, 58309, 57886, 57886, 57886, 0, 57909, 57909, 57909, 58331, 58335, 58338, 57909, 58347, 57909, 57909, 57909, 58363, 58365, 58368, 57909, 57909, 57909, 58381, 58385, 57909, 57909, 57909, 0, 0, 0, 0, 58396, 57936, 57936, 57936, 58406, 58410, 58413, 57936, 58422, 57936, 57936, 57936, 58438, 58440, 58443, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58963, 57936, 57936, 57936, 57936, 58973, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58989, 57936, 58456, 58460, 57936, 57936, 57936, 836, 1127, 521, 886, 890, 1131, 0, 58476, 58255, 57886, 58305, 58309, 58481, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 540672, 0, 0, 1366, 521, 521, 1370, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1381, 521, 521, 1388, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1402, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60248, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60256, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58795, 57886, 57886, 57886, 58798, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58805, 57886, 57886, 58809, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58820, 57886, 57886, 58827, 57886, 57886, 57886, 57886, 57886, 59897, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59918, 57909, 57909, 59921, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58885, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58898, 57909, 57909, 57909, 57909, 58903, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59480, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 57936, 58994, 57936, 57936, 58998, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59010, 57936, 57936, 59017, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59031, 521, 1894, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1903, 521, 521, 521, 1907, 521, 521, 1912, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2447, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2458, 521, 521, 521, 521, 521, 58754, 0, 57886, 59308, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59315, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61164, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59337, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59346, 57886, 57886, 57886, 59350, 57886, 57886, 59355, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61160, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61168, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 59408, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59415, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59437, 57936, 59504, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59511, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59533, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60681, 57936, 57936, 60684, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60695, 57936, 0, 0, 0, 0, 2305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 352256, 352256, 352256, 521, 521, 521, 2438, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2865, 521, 2794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2381, 2894, 521, 521, 0, 0, 0, 2896, 0, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59393, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59974, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60437, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1727, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3789, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61146, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61151, 57886, 61239, 57886, 57886, 57886, 57886, 57886, 61245, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61251, 57909, 57909, 57909, 57909, 61255, 57909, 57909, 57909, 57909, 57909, 61261, 57909, 57909, 57909, 57909, 57936, 0, 0, 4166, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59577, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 3766, 0, 0, 0, 0, 0, 3769, 57936, 57936, 61267, 57936, 57936, 57936, 57936, 61271, 57936, 57936, 57936, 57936, 57936, 61277, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1880, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1891, 521, 0, 521, 521, 521, 521, 521, 3952, 521, 521, 521, 3956, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61311, 57886, 57886, 57886, 61315, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61387, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61401, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60043, 57936, 57936, 57936, 57936, 57936, 60049, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 57909, 57909, 57909, 57909, 57909, 61327, 57909, 57909, 57909, 61331, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61343, 57936, 57936, 57936, 61347, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61102, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 4228, 61573, 61574, 61575, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 395, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 364, 365, 366, 0, 0, 367, 0, 295, 0, 0, 349, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 407, 0, 349, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 3643, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2887, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 535, 57901, 535, 57901, 535, 535, 57901, 535, 535, 57924, 57901, 535, 535, 57901, 57901, 57901, 57924, 57901, 57901, 57901, 57901, 57901, 57901, 57901, 57924, 57924, 57901, 57901, 57951, 57901, 57901, 57901, 57901, 57901, 57901, 57901, 57951, 57951, 57901, 57901, 57901, 57901, 57951, 57951, 57901, 616, 57901, 57967, 57967, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2351104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, 0, 0, 0, 0, 0, 0, 0, 0, 1237, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2300, 0, 57909, 57909, 58372, 57909, 57909, 57909, 57909, 58390, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58400, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58447, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60917, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60925, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 3864, 0, 0, 0, 0, 0, 3627, 0, 0, 57936, 57936, 58465, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2325, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 1203, 1161, 0, 0, 0, 0, 0, 0, 1273, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 58760, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58774, 57886, 57886, 57886, 57886, 58784, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59873, 59874, 57886, 57886, 57886, 57886, 57886, 57886, 59881, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58929, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 58879, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58895, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60656, 57909, 57909, 60659, 57909, 57909, 60662, 60663, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 1756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 1785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, 0, 2286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 2418, 521, 521, 521, 521, 521, 521, 2423, 521, 2425, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1379, 521, 521, 521, 521, 521, 521, 521, 1393, 521, 521, 521, 521, 521, 521, 521, 521, 1405, 521, 521, 2869, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2435, 2436, 57936, 57936, 57936, 57936, 57936, 57936, 60411, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59529, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 3432, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1398, 521, 521, 521, 521, 521, 0, 3872, 0, 0, 0, 0, 0, 521, 3875, 521, 521, 3877, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61234, 57886, 57886, 61236, 57886, 57886, 57886, 57886, 57886, 60263, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60279, 57886, 57886, 57886, 57886, 57886, 61266, 57936, 57936, 61268, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 3944, 0, 0, 0, 0, 0, 417792, 0, 417792, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 417792, 0, 417792, 0, 0, 0, 0, 139264, 147456, 417792, 0, 0, 0, 417792, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 417792, 0, 0, 417792, 0, 417792, 418100, 3946, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59383, 57886, 57886, 57886, 57886, 57886, 57886, 59391, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2335231, 2335197, 2335231, 2335231, 57886, 57886, 57886, 58266, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58342, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60891, 57909, 60893, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60019, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60025, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 58754, 1962, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2557, 2962, 0, 0, 50657, 2062, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61068, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60408, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59021, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57886, 61028, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 352, 350, 131072, 0, 350, 350, 352, 0, 350, 0, 0, 350, 352, 350, 0, 0, 0, 350, 350, 350, 350, 350, 350, 350, 350, 498, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 536, 57902, 536, 57902, 536, 536, 57902, 536, 536, 57925, 57902, 536, 536, 57902, 57902, 57902, 57925, 57902, 57902, 57902, 57902, 57902, 57902, 57902, 57925, 57925, 57902, 57902, 57952, 57902, 57902, 57902, 57902, 57902, 57902, 57902, 57952, 57952, 57902, 57902, 57902, 57902, 57952, 57952, 57902, 536, 57902, 57902, 57902, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 799, 0, 0, 0, 0, 0, 0, 0, 521, 521, 837, 521, 521, 521, 853, 857, 521, 521, 521, 521, 521, 878, 880, 521, 521, 891, 521, 521, 521, 57886, 57886, 58250, 0, 751, 0, 0, 804, 0, 0, 0, 0, 0, 804, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 3879, 521, 521, 521, 521, 521, 521, 3885, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61238, 58256, 57886, 57886, 57886, 58272, 58276, 57886, 57886, 57886, 57886, 57886, 58297, 58299, 57886, 57886, 58310, 57886, 57886, 57886, 0, 57909, 57909, 58326, 58332, 57909, 57909, 57909, 58348, 58352, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61330, 57909, 61332, 61333, 57909, 61335, 57909, 61337, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61346, 57936, 61348, 61349, 57936, 61351, 57936, 61353, 57909, 57909, 58373, 58375, 57909, 57909, 58386, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58401, 58407, 57936, 57936, 57936, 58423, 58427, 57936, 57936, 57936, 57936, 57936, 58448, 58450, 57936, 0, 4165, 0, 4167, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 521, 1695, 521, 1697, 521, 521, 59044, 57886, 57886, 59046, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1720, 0, 0, 57936, 58461, 57936, 57936, 57936, 837, 521, 880, 521, 891, 521, 0, 57886, 58256, 58299, 57886, 58310, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 2309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3396, 0, 0, 0, 0, 0, 0, 0, 1208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 1224, 0, 0, 0, 0, 1229, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 3874, 521, 521, 521, 521, 3878, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3887, 521, 521, 61233, 57886, 57886, 57886, 57886, 61237, 57886, 1406, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 58761, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58792, 58794, 57886, 57886, 57886, 57886, 58273, 58277, 58283, 57886, 58288, 57886, 57886, 57886, 57886, 57886, 58306, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58328, 57909, 57909, 57909, 57909, 58349, 58353, 58359, 57909, 58364, 57886, 58832, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58844, 58845, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 58856, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58415, 57936, 57936, 58431, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 58913, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58927, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58939, 58940, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59512, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59523, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60021, 57936, 57936, 57936, 57936, 57936, 57936, 60026, 57936, 60028, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58950, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58981, 58983, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61202, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3781, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 57936, 59034, 59035, 57936, 57936, 521, 521, 1696, 521, 521, 1699, 57886, 57886, 59045, 57886, 57886, 59048, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 507904, 507904, 507904, 0, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2825, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 2837, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1895, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1955, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59313, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58813, 57886, 58815, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58828, 57886, 57886, 57886, 59338, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59399, 57886, 57886, 57886, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59413, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60909, 57936, 57936, 57909, 59438, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59509, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59534, 0, 0, 0, 2332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 2358, 0, 2360, 2361, 2362, 0, 2364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2372, 0, 0, 0, 0, 2377, 2378, 0, 0, 0, 0, 0, 0, 0, 49716, 49716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 327680, 2382, 0, 0, 0, 0, 0, 0, 0, 2388, 521, 521, 521, 521, 521, 521, 2395, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1905, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1918, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2439, 521, 521, 521, 521, 521, 2445, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3801, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 2745, 2746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 367, 0, 0, 0, 521, 521, 2843, 521, 521, 521, 521, 521, 2848, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2864, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60247, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59487, 59488, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 57936, 57936, 57936, 57936, 60384, 57936, 57936, 57936, 57936, 57936, 60389, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59016, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60405, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60033, 57936, 57936, 57936, 57936, 57936, 57936, 61269, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61278, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3446, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1937, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1385, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57936, 61534, 57936, 57936, 4192, 0, 4194, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 4193, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 4211, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 1335, 521, 521, 521, 521, 1345, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1361, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60246, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 59911, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58926, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4825088, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5177344, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 302, 0, 0, 306, 0, 0, 0, 306, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 387, 0, 353, 0, 0, 0, 0, 0, 396, 397, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 557056, 557056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3129, 0, 0, 0, 0, 0, 0, 0, 370, 378, 406, 0, 0, 0, 370, 0, 0, 353, 0, 0, 0, 370, 0, 409, 411, 0, 370, 398, 0, 0, 370, 378, 0, 139264, 147456, 398, 409, 0, 0, 409, 0, 0, 0, 432, 131072, 0, 432, 432, 0, 0, 432, 0, 411, 432, 0, 458, 0, 0, 0, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 508, 508, 508, 508, 520, 508, 508, 508, 520, 508, 508, 508, 508, 508, 508, 537, 57903, 537, 57903, 537, 537, 57903, 537, 537, 57926, 57903, 537, 537, 57903, 57903, 57903, 57926, 57903, 57903, 57903, 57903, 57903, 57903, 57903, 57926, 57926, 57903, 57903, 57953, 57903, 57903, 57903, 57903, 57903, 57903, 57903, 57953, 57953, 57903, 57903, 57903, 57903, 57953, 57953, 57903, 617, 57903, 57968, 57968, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4017, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61374, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 1276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 774, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 774, 0, 793, 0, 521, 832, 521, 521, 521, 521, 521, 521, 863, 865, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 58251, 1151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1290, 1316, 1317, 0, 1290, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 59822, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 59907, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59915, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 521, 1325, 521, 521, 521, 1329, 521, 521, 1340, 521, 521, 1344, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1363, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 60245, 57886, 57886, 57886, 57886, 60249, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58294, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59483, 57909, 57909, 57909, 57909, 57909, 57909, 59491, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 521, 1367, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2893, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58764, 57886, 57886, 57886, 58768, 57886, 57886, 58779, 57886, 57886, 58783, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60588, 60589, 57886, 57886, 57886, 57886, 60592, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60598, 57886, 57886, 57886, 57909, 57909, 58878, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58897, 57909, 57909, 57909, 58901, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60367, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59515, 57936, 57936, 57936, 57936, 59521, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59532, 57936, 57936, 57936, 57936, 57936, 57936, 58953, 57936, 57936, 57936, 58957, 57936, 57936, 58968, 57936, 57936, 58972, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58991, 57936, 57936, 57936, 58995, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60399, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 1726, 1727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 516560, 516560, 516560, 0, 1786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1808, 0, 0, 0, 0, 0, 5111808, 0, 0, 0, 0, 0, 5283840, 0, 0, 0, 0, 5472256, 5521408, 0, 0, 0, 0, 5595136, 5709824, 5718016, 0, 5824512, 5865472, 0, 0, 5922816, 0, 0, 6021120, 0, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59324, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60837, 57886, 60839, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60846, 57886, 57886, 60848, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59424, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61181, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60047, 57936, 57936, 57936, 57936, 60052, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 59442, 59443, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60907, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59538, 59539, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59556, 57936, 57936, 57936, 57936, 57936, 57936, 59563, 57936, 57936, 521, 521, 521, 59324, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 318, 0, 0, 0, 0, 0, 2384, 0, 0, 2387, 0, 521, 521, 2390, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 60823, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59867, 59868, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59879, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59891, 57909, 57909, 57909, 57909, 57909, 59956, 59957, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59968, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58891, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59457, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59980, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 59992, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3868, 3627, 0, 0, 57936, 57936, 57936, 57936, 57936, 60039, 60040, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60051, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60705, 57936, 57936, 60708, 57936, 57936, 60711, 3368, 521, 521, 60715, 57886, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 60063, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 2732, 2733, 57886, 57886, 57886, 60081, 60082, 0, 0, 1710, 0, 0, 1717, 0, 0, 0, 0, 0, 1728, 1729, 0, 0, 0, 0, 0, 1735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 361, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 2821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2827, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2460, 521, 2462, 57886, 60286, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59919, 57909, 57909, 57909, 57909, 57936, 60406, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60418, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59011, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 3194, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3207, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 59818, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59826, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60590, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 60615, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60648, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60002, 57936, 57936, 57936, 57936, 57936, 60697, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 6152192, 0, 0, 0, 6316032, 0, 196608, 0, 0, 5816320, 6291456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 61097, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3760, 57886, 57886, 61106, 3763, 0, 0, 0, 0, 3767, 0, 0, 0, 0, 0, 0, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 1171, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3788, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 61147, 57886, 57886, 57886, 61150, 57886, 57886, 57886, 57886, 58274, 57886, 57886, 57886, 57886, 57886, 58293, 57886, 57886, 57886, 57886, 58311, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58350, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59478, 57909, 57909, 57909, 59484, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59494, 57909, 57909, 57909, 57909, 59500, 57909, 57909, 57886, 57886, 57886, 57886, 61241, 57886, 61243, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61257, 57909, 61259, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61074, 57936, 57936, 57936, 61077, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61085, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59516, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59528, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61470, 57936, 57936, 57936, 0, 4130, 0, 0, 0, 0, 0, 521, 521, 4135, 521, 4136, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 61486, 57886, 61487, 57886, 57886, 57886, 57886, 59340, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59353, 57886, 57886, 57886, 59358, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59914, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60709, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 475, 475, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 509, 513, 513, 513, 513, 509, 513, 513, 513, 509, 513, 513, 513, 513, 513, 513, 538, 57904, 538, 57904, 538, 538, 57904, 538, 538, 57927, 57904, 538, 538, 57904, 57904, 57904, 57927, 57904, 57904, 57904, 57904, 57904, 57904, 57904, 57927, 57927, 57904, 57904, 57954, 57904, 57904, 57904, 57904, 57904, 57904, 57904, 57954, 57954, 57904, 57904, 57904, 57904, 57954, 57954, 57904, 618, 57904, 57969, 57969, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 0, 521, 521, 1320, 521, 1323, 0, 680, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3876, 521, 521, 521, 521, 3880, 521, 521, 521, 521, 521, 3886, 521, 521, 521, 57886, 57886, 57886, 61235, 57886, 57886, 57886, 658, 0, 637, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 795, 0, 0, 0, 0, 0, 0, 637, 0, 0, 781, 521, 833, 521, 521, 521, 521, 854, 858, 864, 521, 869, 521, 521, 521, 521, 521, 887, 521, 521, 521, 521, 57886, 57886, 58252, 0, 790, 0, 795, 0, 781, 0, 807, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 1277, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 58382, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58403, 57936, 57936, 57936, 57936, 58424, 58428, 58434, 57936, 58439, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 1142, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 310, 0, 310, 311, 0, 310, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 408, 311, 0, 0, 0, 0, 0, 0, 311, 413, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 58457, 57936, 57936, 57936, 57936, 521, 521, 521, 887, 521, 521, 0, 57886, 57886, 57886, 58306, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 2336, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2292, 2293, 0, 2295, 2296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 0, 0, 0, 1183, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 1251, 0, 0, 0, 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1267, 0, 0, 0, 0, 0, 0, 1301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 1275, 0, 0, 1152, 0, 0, 0, 1281, 0, 1283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1291, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 2393, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2405, 521, 521, 521, 521, 521, 521, 0, 1297, 1256, 0, 1281, 1300, 0, 1303, 0, 0, 0, 1183, 0, 0, 0, 0, 1311, 0, 0, 0, 0, 0, 1311, 0, 0, 1202, 1311, 1318, 521, 521, 521, 521, 521, 521, 0, 0, 0, 2473, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61043, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 1324, 521, 521, 521, 521, 1330, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1351, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1364, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 60243, 57886, 60244, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 521, 521, 1369, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1377, 521, 521, 521, 1384, 1386, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2881, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3202, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3208, 521, 521, 521, 521, 1409, 58754, 901, 58756, 57886, 57886, 57886, 57886, 57886, 58763, 57886, 57886, 57886, 57886, 58769, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58790, 57886, 57886, 57886, 57886, 57886, 57886, 59870, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58818, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 58911, 57909, 57909, 57909, 58918, 58920, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58943, 0, 58944, 58945, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59543, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58984, 57936, 57936, 57936, 58987, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58952, 57936, 57936, 57936, 57936, 58958, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58979, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58992, 57936, 57936, 57936, 57936, 58997, 57936, 57936, 57936, 57936, 57936, 59002, 57936, 57936, 57936, 59006, 57936, 57936, 57936, 59013, 59015, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60922, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60395, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59038, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 1710, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1775, 0, 0, 0, 0, 0, 0, 0, 1783, 1784, 0, 0, 0, 0, 1840, 1841, 0, 0, 0, 1844, 0, 0, 0, 0, 0, 1849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 581632, 581632, 0, 1862, 0, 1864, 1840, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1876, 521, 521, 521, 521, 1882, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2850, 521, 2852, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2427, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1893, 521, 521, 521, 521, 1897, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1910, 521, 521, 521, 1915, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2849, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2429, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59319, 57886, 57886, 57886, 57886, 59325, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59336, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59419, 57909, 57909, 57909, 57909, 59425, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59436, 57909, 57909, 57909, 57909, 57909, 57909, 60653, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61091, 57936, 57909, 57909, 57909, 59440, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59453, 57909, 57909, 57909, 59458, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59936, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59942, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 59536, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59549, 57936, 57936, 57936, 59554, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 2730, 521, 521, 521, 57886, 60079, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 2257, 521, 521, 59604, 57886, 59606, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2277, 2278, 0, 0, 0, 0, 0, 5210112, 0, 5365760, 0, 5554176, 5570560, 5578752, 0, 5668864, 0, 0, 5791744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6201344, 6242304, 6250496, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3443, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1382, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 2383, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2403, 521, 521, 2407, 521, 521, 521, 2411, 57886, 57886, 59842, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59852, 57886, 57886, 57886, 59855, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60609, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 60618, 57909, 60619, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 59894, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 2561, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59923, 57909, 57909, 59927, 57909, 57909, 57909, 59931, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59941, 57909, 57909, 57909, 59944, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61180, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61186, 57936, 57936, 57936, 61190, 57936, 57936, 57936, 57936, 57936, 59978, 57909, 57909, 57909, 57909, 57909, 59983, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60006, 57936, 57936, 60010, 57936, 57936, 57936, 60014, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60024, 57936, 57936, 57936, 60027, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 4076, 0, 4078, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 60061, 57936, 57936, 57936, 57936, 57936, 60066, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2273, 0, 0, 0, 0, 0, 0, 0, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2826, 0, 0, 0, 0, 0, 0, 521, 521, 2833, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3465, 3467, 521, 521, 521, 3470, 521, 3472, 3473, 521, 57886, 57886, 57886, 57886, 57886, 57886, 60824, 57886, 57886, 57886, 57886, 57886, 2841, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2856, 521, 521, 521, 521, 2859, 521, 521, 2861, 521, 2862, 521, 521, 521, 521, 521, 521, 0, 0, 2472, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59834, 57886, 57886, 59838, 57886, 521, 521, 521, 521, 2870, 521, 521, 2874, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2883, 521, 521, 521, 2886, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3669, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58860, 57909, 57909, 57909, 57909, 57909, 58872, 0, 0, 57909, 57909, 60309, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60317, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61183, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60420, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59008, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59022, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 60332, 57909, 57909, 57909, 57909, 60335, 57909, 57909, 60337, 57909, 60338, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60347, 57909, 57909, 60351, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60655, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 60666, 57936, 57936, 57936, 57936, 57936, 57936, 60673, 57909, 57909, 60360, 57909, 57909, 57909, 60363, 60364, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60374, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3096, 521, 521, 57886, 57886, 60443, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 450560, 0, 0, 57936, 57936, 57936, 60382, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60397, 57936, 57936, 57936, 57936, 60400, 57936, 57936, 60402, 57936, 60403, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61272, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 3942, 3627, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 379, 381, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1885, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3794, 521, 521, 521, 3795, 3796, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2559, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60325, 57909, 57909, 57909, 57909, 57909, 57909, 3190, 521, 521, 521, 3193, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1917, 521, 521, 521, 521, 521, 57886, 60581, 57886, 57886, 57886, 60584, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60594, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60838, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2561, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60630, 57909, 57909, 57909, 60633, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60643, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58417, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60920, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 60674, 57936, 57936, 57936, 57936, 60679, 57936, 57936, 57936, 60682, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60692, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 4072, 4073, 0, 0, 0, 0, 0, 4079, 4080, 4081, 521, 521, 521, 4084, 521, 4086, 521, 521, 521, 521, 61435, 61436, 61437, 3457, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3469, 521, 521, 521, 521, 521, 57886, 57886, 57886, 60821, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60587, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60595, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2560, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60640, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60883, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60897, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60905, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61201, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3784, 521, 521, 521, 57936, 60939, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 3610, 0, 0, 0, 0, 0, 0, 0, 3616, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 2824, 2782, 0, 0, 0, 0, 0, 2829, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 2838, 521, 521, 521, 521, 521, 0, 0, 0, 3640, 3641, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3651, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3671, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60612, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60620, 57909, 57909, 57909, 57909, 521, 3661, 521, 521, 521, 521, 521, 3666, 521, 3668, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61022, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60292, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60303, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 57909, 57909, 57909, 57909, 61051, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61061, 57909, 57909, 57909, 57909, 57909, 57909, 61067, 57909, 61069, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58884, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58894, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59938, 57909, 57909, 57909, 57909, 57909, 57909, 59943, 57909, 59945, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61096, 57936, 61098, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 3765, 0, 0, 0, 0, 0, 0, 0, 0, 2363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 659, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3770, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 3779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3786, 521, 521, 521, 3790, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3799, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61148, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60867, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60880, 57909, 57909, 61152, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61161, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61167, 57909, 57909, 57909, 61171, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61053, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59459, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61438, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61446, 57886, 57909, 57909, 57909, 61451, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61459, 57909, 57936, 57936, 57936, 61464, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59576, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 61472, 57936, 0, 0, 0, 0, 4131, 0, 4133, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4139, 4140, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61445, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61458, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60919, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60929, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4088, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61490, 61491, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61498, 61499, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61506, 61507, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61415, 0, 0, 4074, 4075, 0, 0, 0, 521, 521, 521, 4082, 521, 521, 521, 521, 521, 521, 521, 521, 4090, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 60865, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61184, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61189, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 4220, 57886, 61565, 57909, 61566, 57936, 61567, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 1899, 1900, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3800, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 425, 425, 0, 0, 131072, 425, 0, 0, 0, 425, 0, 0, 447, 0, 425, 0, 476, 476, 476, 0, 0, 361, 361, 361, 495, 361, 361, 361, 361, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 539, 57905, 539, 57905, 539, 539, 57905, 539, 539, 57928, 57905, 539, 539, 57905, 57905, 57905, 57928, 57905, 57905, 57905, 57905, 57905, 57905, 57905, 57928, 57928, 57905, 57905, 57955, 57905, 57905, 57905, 57905, 57905, 57905, 57905, 57955, 57955, 57905, 57905, 57905, 57905, 57955, 57955, 57905, 539, 57905, 57905, 57905, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376832, 0, 376832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 58369, 57909, 57909, 57909, 57909, 58387, 57909, 57909, 57909, 0, 0, 0, 0, 58293, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58425, 57936, 57936, 57936, 57936, 57936, 58444, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60069, 57936, 57936, 57936, 57936, 2729, 521, 521, 521, 521, 60078, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 2742, 57936, 58462, 57936, 57936, 57936, 521, 521, 521, 521, 892, 521, 0, 57886, 57886, 57886, 57886, 58311, 57886, 155941, 1138, 0, 1139, 0, 0, 1144, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 5341184, 0, 5652480, 0, 0, 0, 0, 4759552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1827, 0, 0, 0, 0, 0, 0, 0, 1834, 0, 0, 0, 0, 0, 0, 1244, 0, 0, 0, 0, 1249, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466944, 0, 0, 0, 0, 0, 0, 0, 0, 1825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 354, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 521, 521, 521, 1327, 521, 521, 521, 1336, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2895, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60574, 57886, 57886, 60578, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58766, 57886, 57886, 57886, 58775, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61034, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61042, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61047, 57909, 57936, 57936, 57936, 57936, 57936, 58955, 57936, 57936, 57936, 58964, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59555, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 521, 1931, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1953, 521, 521, 521, 521, 521, 521, 0, 2470, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59839, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59333, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 60864, 57909, 57909, 57909, 57909, 60868, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60874, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58402, 57936, 57936, 57936, 57936, 57936, 57936, 58433, 58435, 57936, 57936, 57936, 57936, 57936, 57936, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59433, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59986, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60001, 57936, 57936, 60004, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 59474, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59486, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59497, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 59372, 57886, 57886, 59375, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59389, 57886, 57886, 57886, 57886, 57886, 57886, 59395, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59872, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60304, 57886, 57886, 57886, 0, 2962, 0, 0, 57936, 57936, 57936, 57936, 59570, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59582, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59593, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 293, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3119, 0, 3120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3135, 0, 0, 0, 0, 2283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2301, 0, 0, 0, 0, 2359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 57886, 59841, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59863, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 59930, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 58947, 57936, 57936, 57936, 57936, 57936, 57936, 60013, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59589, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60313, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58931, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 60626, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 1259, 57886, 57936, 57936, 57936, 57936, 57936, 60675, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59524, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57886, 57886, 57886, 61155, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61174, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61193, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61100, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 57936, 57936, 57936, 57936, 61471, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57886, 57886, 57936, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 57936, 57886, 57886, 57886, 57886, 57936, 57936, 57886, 521, 57886, 57886, 57886, 372, 372, 0, 0, 131072, 372, 0, 0, 0, 372, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57906, 57906, 57906, 57906, 57906, 57906, 57906, 57929, 57929, 57906, 57906, 57956, 57906, 57906, 57906, 57906, 57906, 57906, 57906, 57956, 57956, 57906, 57906, 57906, 57906, 57956, 57956, 57906, 540, 57906, 57906, 57906, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2334720, 0, 2334720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 2834, 2835, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 58267, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58343, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61179, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61187, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2758, 2759, 0, 0, 2762, 0, 2764, 0, 0, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58780, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 59909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60658, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60667, 57936, 60668, 57936, 57936, 57936, 57936, 58875, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59947, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 3771, 0, 3772, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3657, 521, 521, 521, 521, 521, 521, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 245760, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 364, 0, 0, 0, 0, 363, 0, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 653, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 131072, 0, 433, 433, 0, 0, 433, 0, 364, 433, 0, 459, 0, 0, 0, 487, 487, 490, 490, 490, 490, 496, 497, 490, 490, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 541, 57907, 541, 57907, 541, 541, 57907, 541, 541, 57930, 57907, 541, 541, 57907, 57907, 57907, 57930, 57907, 57907, 57907, 57907, 57907, 57907, 57907, 57930, 57930, 57907, 57907, 57957, 57907, 57907, 57907, 57907, 57907, 57907, 57907, 57957, 57957, 57907, 57907, 57907, 57907, 57957, 57957, 57907, 619, 57907, 57970, 57970, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 1806, 0, 0, 0, 0, 1246, 1246, 0, 0, 57909, 57909, 57909, 57909, 57909, 58383, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60688, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58458, 57936, 57936, 57936, 57936, 521, 521, 521, 888, 521, 521, 0, 57886, 57886, 57886, 58307, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3402, 2768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2318336, 57909, 57909, 57909, 57909, 57909, 60334, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60344, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 58268, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58344, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58393, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 58409, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59517, 59518, 57936, 57936, 57936, 57936, 59525, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2792, 0, 521, 1368, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1395, 521, 521, 521, 521, 521, 521, 521, 521, 2875, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58834, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60895, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60903, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58996, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59024, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 3178, 521, 3179, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2469, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59883, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 2844, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2434, 521, 521, 57936, 57936, 57936, 57936, 57936, 57936, 60385, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59522, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 640, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 893, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 60862, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60879, 57909, 60881, 57909, 57936, 58463, 57936, 57936, 57936, 1126, 521, 521, 521, 893, 521, 0, 57886, 58477, 57886, 57886, 58312, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 331, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59326, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 59908, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60343, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59426, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59961, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60346, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 521, 521, 521, 521, 2415, 521, 2417, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2432, 521, 521, 521, 521, 521, 521, 2867, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1923, 57936, 57936, 57936, 57936, 60409, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60423, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3660, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 2562, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 61185, 57936, 57936, 57936, 61188, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 2310560, 2310560, 0, 2310144, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 367, 0, 0, 0, 0, 0, 0, 0, 2310560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 383, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 2310144, 0, 0, 2310144, 0, 0, 2310144, 0, 2310144, 2310144, 0, 2310144, 0, 2310144, 2310144, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3445, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1347, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1362, 521, 521, 2310144, 0, 0, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310144, 2310733, 2310144, 2310144, 2310733, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310, 0, 0, 0, 0, 0, 0, 0, 0, 2318, 0, 0, 0, 0, 0, 2322, 0, 0, 2324, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 839, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 898, 57886, 57886, 57886, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 2335197, 2335197, 2335197, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3399, 3400, 0, 3401, 0, 2335231, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2763, 0, 0, 0, 0, 0, 2767, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 0, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2813, 0, 0, 0, 0, 2367488, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 976, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 2391, 2392, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2855, 521, 521, 521, 521, 521, 521, 521, 2860, 521, 521, 521, 521, 521, 521, 521, 521, 0, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3134, 0, 0, 212992, 0, 0, 0, 0, 0, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792, 0, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 4358144, 4358144, 0, 1411, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 0, 0, 0, 0, 750, 808, 0, 0, 0, 750, 0, 0, 811, 692, 0, 0, 0, 816, 0, 0, 0, 818, 0, 0, 0, 685, 692, 0, 0, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 0, 0, 0, 0, 0, 656, 0, 779, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 800, 0, 783, 0, 0\n];\n\nJSONiqParser.EXPECTED =\n[ 166, 182, 211, 1104, 242, 1452, 1467, 273, 289, 712, 1117, 319, 349, 333, 365, 381, 397, 413, 195, 1866, 2240, 2243, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 429, 445, 461, 477, 2088, 226, 493, 2075, 939, 621, 523, 543, 1716, 559, 575, 591, 607, 1422, 650, 666, 1822, 697, 1565, 634, 728, 738, 754, 796, 812, 828, 844, 860, 876, 892, 908, 924, 955, 2180, 985, 681, 2211, 1015, 1044, 1028, 1060, 1090, 1133, 1320, 1149, 1165, 1551, 1181, 1197, 1213, 1229, 1259, 1904, 1365, 1375, 999, 969, 1762, 1289, 1305, 1336, 1351, 1488, 1391, 1407, 1504, 1623, 1520, 1536, 1581, 1273, 1610, 1639, 1655, 1671, 2118, 2149, 1687, 1703, 1437, 507, 1732, 1748, 1778, 1074, 780, 1809, 1838, 1854, 1890, 1920, 1936, 1952, 1968, 1984, 2000, 2016, 2032, 2061, 257, 2104, 303, 2045, 767, 1793, 1594, 2134, 1243, 2165, 2196, 2227, 2234, 1874, 1479, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 536, 2259, 2263, 2271, 2271, 2271, 2265, 2269, 2271, 2272, 2276, 2279, 2286, 2282, 2290, 2294, 2298, 2302, 2306, 2310, 2381, 2790, 2790, 4003, 4941, 2790, 2791, 2314, 3074, 2982, 2790, 2790, 2790, 2687, 2790, 5013, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2827, 2790, 2571, 3537, 4080, 2436, 2320, 2443, 2466, 2326, 2336, 2790, 2790, 2790, 2343, 2790, 2790, 2349, 3841, 2707, 2790, 2734, 2759, 2790, 2790, 2790, 2790, 4756, 2738, 2790, 2790, 2790, 2790, 4767, 2321, 2390, 2466, 2466, 2466, 2466, 2355, 2361, 2790, 2790, 2790, 2790, 2790, 2371, 4535, 2790, 2696, 4816, 2790, 2790, 2790, 2697, 4817, 2790, 2790, 2790, 4822, 4790, 2790, 2790, 3017, 3842, 2448, 2790, 2790, 3537, 4079, 4079, 4079, 4079, 4079, 4099, 2436, 2436, 2436, 2436, 2436, 2387, 2321, 2321, 2321, 2321, 2321, 2459, 2466, 2466, 2466, 2466, 2466, 2332, 2401, 2790, 2790, 2762, 4873, 2790, 2790, 2790, 2790, 2820, 4885, 2790, 2790, 2790, 2790, 3243, 4891, 3542, 4079, 4079, 4079, 4097, 2436, 2436, 2436, 2436, 2458, 2321, 2321, 2321, 2331, 2466, 2466, 2426, 2790, 2790, 3074, 4076, 4079, 4079, 2396, 2436, 2482, 2321, 2321, 2464, 2466, 2466, 2411, 2790, 2790, 4535, 2790, 4077, 4079, 4079, 2480, 2436, 2436, 2457, 2321, 2321, 2420, 2467, 2428, 2834, 3536, 4079, 2434, 2436, 2441, 2321, 2465, 2332, 2447, 4095, 4081, 2437, 2376, 2466, 2452, 4078, 2436, 2321, 2466, 4335, 4081, 2456, 2463, 2422, 4080, 2482, 2463, 2471, 4098, 2483, 2331, 2478, 2329, 2487, 2491, 2474, 2495, 2498, 2508, 2512, 2519, 2519, 2519, 2515, 2525, 2519, 2521, 2529, 2536, 2532, 2540, 2544, 2548, 2552, 2556, 2560, 4697, 2790, 2790, 2790, 4729, 2790, 4591, 2584, 2858, 2790, 2790, 2790, 3364, 2591, 2790, 3610, 2603, 2609, 2613, 2617, 2621, 2625, 2628, 2632, 2636, 4053, 2702, 2790, 2790, 2790, 2790, 3877, 2642, 2648, 2892, 4432, 2646, 2915, 2367, 2654, 3828, 2813, 2790, 2652, 3406, 2659, 2664, 2790, 2790, 2790, 2790, 2790, 2671, 4434, 2580, 4063, 2790, 2676, 2680, 2790, 2790, 2790, 3867, 2684, 2790, 2790, 2790, 3868, 2685, 2750, 2790, 2790, 2790, 2790, 2756, 2760, 2790, 2790, 2790, 2790, 2790, 2880, 2666, 2790, 2790, 2777, 4228, 3359, 2851, 4232, 4238, 2790, 4246, 4420, 4253, 3266, 4258, 4264, 3443, 2790, 4721, 2782, 2790, 2790, 2790, 3228, 3232, 2790, 2790, 2790, 2790, 4105, 2790, 2790, 2790, 2790, 2790, 2790, 3903, 3876, 2788, 4641, 2790, 2790, 2790, 3307, 2790, 2790, 2790, 4640, 2818, 2790, 2790, 3306, 2795, 2935, 2812, 2790, 2790, 2744, 2790, 3875, 3239, 2817, 2790, 4088, 2790, 2790, 2824, 2790, 3502, 2818, 2790, 3007, 2790, 3959, 3750, 2960, 2745, 3748, 2790, 4626, 2790, 4622, 2667, 2940, 2842, 3754, 2902, 4615, 2840, 3753, 3753, 3753, 4616, 2838, 4624, 4624, 3006, 3753, 2841, 2903, 2719, 3291, 3292, 3752, 2941, 2998, 3000, 2847, 2790, 2790, 2790, 2790, 2790, 3322, 3326, 2790, 2790, 2790, 3241, 4802, 2775, 4735, 2782, 2790, 2790, 2790, 4802, 3231, 2790, 2790, 2790, 2771, 4780, 3110, 4601, 2790, 3607, 2790, 3763, 3555, 2886, 2973, 2790, 3980, 2790, 3666, 2790, 4542, 2416, 2884, 2890, 2896, 2907, 4569, 2911, 2790, 2919, 5035, 2790, 2913, 2925, 2790, 4599, 2686, 2790, 3665, 2790, 4541, 3125, 4330, 4429, 2929, 2934, 2939, 3953, 2790, 2790, 4197, 3440, 2790, 2790, 2790, 2790, 4592, 3426, 2790, 2790, 2790, 2790, 2790, 4860, 2951, 2790, 3324, 2790, 2790, 3609, 3761, 2790, 4016, 2955, 2741, 2842, 2790, 4742, 2959, 2790, 2790, 4535, 2790, 2790, 4096, 4079, 4079, 4079, 4079, 2435, 2436, 2436, 2436, 2436, 2437, 2980, 2790, 2790, 2790, 2790, 2802, 2989, 2790, 2790, 2790, 2790, 2801, 2988, 2790, 2790, 2790, 4818, 4810, 3928, 2790, 3608, 3761, 2316, 2993, 3004, 2790, 3011, 3032, 2790, 2790, 2790, 4503, 3015, 2790, 2790, 2790, 2790, 3011, 3032, 2790, 2790, 2790, 2790, 2790, 3026, 4920, 2790, 2790, 2790, 2790, 3025, 4919, 2790, 2790, 2790, 2790, 2790, 4355, 3755, 4359, 2790, 2790, 3354, 3059, 4366, 4372, 4240, 2834, 4504, 3016, 2790, 2790, 3635, 3927, 3023, 3031, 4541, 3436, 3037, 3854, 3044, 2790, 2790, 3451, 3049, 2790, 2790, 3024, 3043, 2790, 2790, 2801, 3048, 2790, 2790, 3053, 3064, 3031, 4492, 3071, 2975, 3079, 2790, 3470, 3088, 2790, 3421, 3079, 2790, 2801, 3098, 2790, 4152, 3102, 3109, 2574, 3114, 3122, 2790, 4585, 3124, 2790, 3129, 2790, 4584, 3123, 2790, 4154, 3033, 3133, 4950, 3518, 3142, 4948, 4952, 3148, 2790, 4155, 3156, 3188, 3160, 3150, 4950, 3167, 3186, 3174, 3174, 3174, 3180, 3184, 3192, 3192, 3196, 3200, 3175, 3209, 3433, 3213, 3176, 3861, 3217, 3221, 4494, 3225, 3236, 3247, 2790, 2790, 2790, 2790, 3914, 2790, 2790, 3253, 3263, 3403, 3170, 3479, 3270, 3274, 3278, 3282, 3285, 3285, 3286, 2790, 2790, 3913, 2790, 3549, 3337, 3848, 3342, 3290, 3496, 2655, 3296, 3300, 3311, 3318, 4953, 3330, 4637, 2790, 3320, 2790, 2790, 3659, 2790, 2790, 3336, 2790, 2790, 4722, 2770, 2790, 2790, 2790, 2790, 4722, 2770, 2790, 2790, 2790, 2790, 2790, 4190, 3341, 3484, 3460, 3144, 3346, 3363, 3369, 2976, 3375, 2790, 2790, 2790, 3383, 3388, 2790, 2790, 2790, 3472, 2790, 2790, 2790, 4413, 2790, 4305, 3786, 4825, 2790, 2790, 2364, 2790, 3482, 3486, 2790, 3416, 3420, 2790, 4591, 3425, 2790, 2790, 2790, 2790, 2672, 3430, 2790, 2790, 2790, 3769, 2790, 2790, 2790, 2790, 3471, 3736, 2790, 2790, 2790, 2790, 3776, 2790, 3469, 2790, 2790, 2790, 2790, 4198, 3468, 2790, 2790, 2790, 2790, 4198, 3468, 2790, 2790, 2790, 2790, 2921, 3506, 2790, 2790, 2790, 4591, 3513, 2790, 2790, 2790, 3724, 2660, 2790, 4124, 3542, 3476, 3490, 3494, 3634, 3500, 2790, 2921, 3506, 2790, 2790, 2790, 2790, 3512, 3517, 3522, 2833, 3204, 2790, 3527, 2790, 2790, 2790, 4249, 2790, 2790, 2790, 3526, 2790, 2790, 2790, 3821, 2761, 2790, 2790, 2790, 2790, 4347, 2686, 2790, 2790, 2790, 2790, 4351, 2790, 4248, 2790, 2790, 2790, 3531, 3517, 3412, 2790, 2790, 4987, 2790, 2790, 2563, 2790, 2790, 2790, 4094, 4079, 4079, 4079, 4079, 2435, 2436, 2436, 2436, 2397, 2321, 2321, 2321, 2321, 2321, 2464, 2466, 2466, 2466, 2466, 2393, 2405, 2790, 2790, 2833, 2790, 4987, 2790, 2790, 4422, 2790, 2790, 4126, 4322, 3032, 2790, 4987, 2790, 3390, 4989, 2790, 2605, 2730, 2790, 3541, 3547, 4788, 3547, 2566, 2566, 2566, 4894, 4014, 4014, 4014, 4788, 2832, 3553, 2315, 4875, 2567, 4015, 4896, 2830, 2899, 3559, 3560, 3564, 2790, 2790, 2790, 2790, 2790, 3615, 3614, 2790, 2790, 4465, 3917, 2585, 3619, 3625, 3737, 4266, 4915, 3629, 3649, 4306, 3633, 3639, 3647, 3653, 2790, 2790, 4691, 3658, 2790, 4464, 3916, 2790, 3663, 2722, 3670, 3674, 4193, 4196, 2790, 3690, 2790, 2790, 2790, 2382, 3694, 2790, 2790, 2790, 2383, 3695, 2790, 2790, 2790, 2339, 3143, 2790, 2790, 2790, 4517, 2790, 2965, 4474, 4719, 4065, 4703, 2578, 3699, 3704, 2790, 2790, 3118, 2790, 2790, 2790, 4999, 2790, 4869, 4984, 5004, 2752, 2790, 2790, 3118, 2790, 4317, 3723, 2790, 2790, 2790, 2790, 4391, 3711, 2790, 2790, 2790, 2790, 3716, 3847, 2790, 2790, 3259, 2790, 2790, 2790, 2790, 2790, 3258, 2783, 2790, 2790, 2790, 2790, 3258, 2783, 3791, 2725, 2790, 3795, 2790, 2790, 3803, 2790, 2790, 3810, 2790, 2790, 2638, 2790, 4782, 3202, 2716, 3818, 2790, 3795, 2790, 4584, 3812, 2790, 2351, 2790, 2790, 3811, 2790, 3825, 3838, 2790, 2790, 4988, 2790, 3725, 4875, 2790, 2414, 2790, 3535, 4942, 2790, 2430, 2790, 4323, 4014, 3846, 3205, 3847, 4039, 2790, 2713, 2790, 3852, 3683, 3067, 3104, 2790, 3685, 4305, 3685, 3915, 3915, 3105, 3683, 3683, 3683, 3066, 3331, 3105, 3332, 3331, 3332, 3684, 3256, 2790, 2790, 3371, 3735, 2790, 2790, 2790, 2790, 3421, 3742, 2790, 2790, 2790, 2790, 2790, 3741, 2790, 2790, 2790, 2790, 3746, 2790, 3759, 2703, 3621, 4113, 3881, 3885, 3889, 3893, 3894, 3898, 3902, 2790, 2790, 3162, 2790, 2790, 3643, 2983, 4501, 4562, 3907, 3765, 4282, 3921, 2790, 4554, 4022, 2790, 3925, 3932, 4556, 3936, 2790, 4242, 3941, 2790, 2855, 2784, 3943, 4375, 4402, 2862, 2866, 2870, 2874, 2874, 2875, 2879, 2819, 3325, 2790, 2778, 2790, 4182, 4960, 4187, 2504, 5007, 4203, 4207, 4211, 4215, 4219, 4222, 4224, 2790, 2790, 4077, 4079, 4079, 4079, 4079, 4079, 2396, 2436, 2436, 2436, 2436, 2436, 2375, 2321, 2321, 2321, 2322, 2466, 2466, 2466, 2466, 2466, 2332, 2357, 2380, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3204, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3163, 2790, 2790, 2746, 3858, 4848, 4930, 3872, 3642, 4579, 2727, 4118, 2315, 3764, 3947, 3951, 2790, 2790, 3814, 3957, 2790, 2790, 2790, 3967, 3350, 2984, 2729, 3978, 3548, 3984, 3961, 2790, 2790, 3813, 3988, 2790, 2790, 2790, 2790, 3686, 4027, 2790, 2790, 2790, 2790, 3257, 4051, 2790, 3074, 2790, 2790, 4299, 3993, 2790, 4007, 2790, 2984, 2790, 3568, 3575, 4260, 3583, 3587, 3591, 3594, 3597, 3600, 3601, 3605, 2790, 2790, 2790, 4750, 2964, 2790, 2790, 2790, 2790, 2969, 2761, 2790, 2790, 2790, 2790, 4743, 2790, 4834, 2790, 3348, 4604, 4013, 4070, 4311, 4020, 2790, 2790, 2790, 4026, 2790, 2790, 2790, 2790, 3578, 4964, 2790, 2790, 2790, 2790, 4969, 2790, 2790, 2790, 2790, 3579, 2790, 4031, 2790, 4037, 2790, 4043, 2789, 4333, 4571, 4021, 2790, 2790, 4362, 2790, 2790, 2790, 2790, 3968, 4183, 2790, 2790, 4271, 3972, 4033, 2790, 2790, 4832, 2790, 2796, 2790, 4360, 3993, 2790, 2790, 2790, 2790, 4049, 2790, 2790, 2790, 2790, 4361, 2761, 4510, 4241, 4057, 4254, 4773, 4069, 4439, 2790, 2790, 4976, 2790, 2790, 2790, 4457, 2761, 2790, 2790, 4485, 3989, 2790, 2790, 4456, 4074, 3731, 4836, 4254, 4085, 4092, 3707, 2790, 4060, 2790, 2790, 4060, 4147, 4132, 4140, 4134, 4843, 2501, 4130, 4921, 4921, 4921, 4291, 4135, 4132, 4132, 4132, 4139, 4922, 4135, 4144, 4922, 4923, 4133, 4159, 4169, 4171, 4166, 4163, 4175, 4178, 2790, 2790, 2790, 2800, 2790, 2746, 3958, 4087, 2818, 2790, 3314, 2806, 2790, 3502, 2818, 2790, 2790, 4270, 3039, 4275, 2790, 2790, 2790, 4279, 3358, 2850, 4286, 4295, 2790, 3397, 3607, 4303, 4310, 2790, 2790, 4965, 4315, 2790, 2790, 2790, 3378, 4321, 2790, 2790, 2790, 3379, 2790, 2790, 3472, 2790, 2790, 2790, 2345, 3847, 2790, 2790, 3471, 3736, 2790, 4603, 2790, 4305, 2790, 4812, 4327, 4339, 2790, 2790, 3352, 3356, 2996, 4343, 3937, 4297, 4995, 4476, 2843, 2790, 3025, 4927, 2790, 2790, 4934, 2406, 2599, 4938, 5023, 4946, 2790, 2790, 2790, 2790, 4957, 4381, 4359, 2790, 2790, 2790, 3806, 4389, 2790, 2790, 2790, 2790, 3963, 4396, 2790, 2790, 2790, 2946, 2790, 2790, 2790, 3712, 2947, 2790, 2790, 2790, 4234, 3973, 2790, 2790, 2790, 3962, 4395, 2790, 2790, 2790, 2790, 3962, 4395, 3755, 4359, 2790, 3056, 3060, 4368, 3960, 4535, 4377, 2790, 2790, 2790, 2808, 4400, 2790, 2790, 2790, 2790, 4406, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 4708, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3152, 3203, 2790, 2790, 2790, 2790, 2790, 3963, 4411, 2790, 2790, 2790, 2807, 4407, 4446, 2790, 4417, 2942, 4426, 3654, 3761, 2790, 2790, 3720, 2790, 2790, 2790, 2790, 2790, 3729, 2790, 4472, 2790, 2586, 3787, 3138, 2790, 4862, 4438, 2790, 2790, 2807, 4451, 2790, 2790, 2790, 4443, 2790, 2790, 2790, 4450, 4689, 3400, 2942, 4455, 4536, 4484, 2790, 4461, 2790, 2790, 4469, 2790, 2790, 4480, 2790, 2790, 3779, 4523, 4489, 4498, 3654, 4483, 2790, 4508, 2790, 5040, 4002, 2790, 4514, 2790, 2790, 4521, 4525, 4529, 4540, 4384, 4590, 4385, 2790, 4514, 2790, 4547, 4551, 2790, 3997, 4560, 4566, 3999, 4575, 3995, 4009, 4009, 4009, 4583, 4589, 4001, 4001, 4596, 3680, 4608, 4879, 4613, 4620, 4609, 4877, 2407, 3782, 4792, 4793, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3018, 4630, 4634, 4645, 4649, 4653, 4657, 4661, 4665, 4669, 4672, 4676, 4679, 4683, 2790, 2790, 2790, 3017, 4695, 4542, 4761, 4701, 4577, 4906, 4707, 4712, 4716, 4727, 2790, 3832, 2594, 3075, 4733, 3830, 4739, 2790, 2790, 2790, 3019, 4842, 2597, 4900, 4904, 4853, 4912, 2790, 2790, 2790, 2790, 2790, 3027, 4747, 4754, 4760, 4765, 4771, 4777, 4786, 4797, 4801, 2790, 2790, 2790, 2790, 4807, 2790, 2790, 3876, 4543, 4150, 2930, 2766, 2790, 2790, 2790, 2790, 2790, 4723, 2790, 2790, 2790, 2691, 2790, 2790, 2790, 3094, 2695, 2701, 2790, 2790, 2790, 2790, 3508, 2790, 4840, 2406, 4847, 4803, 4111, 4852, 4857, 4914, 2790, 2790, 2790, 2790, 2696, 4866, 2790, 2790, 3910, 2790, 2790, 4686, 4531, 4887, 3772, 3082, 3706, 2790, 4289, 2790, 3974, 3915, 4973, 2790, 4980, 4984, 5018, 4907, 4994, 2790, 2790, 2801, 4830, 2790, 2790, 2790, 5000, 2790, 3091, 2790, 2790, 4103, 4533, 4109, 3084, 2790, 4117, 4908, 2790, 3303, 2790, 4122, 3249, 2790, 4999, 2790, 2790, 4828, 2790, 2790, 3571, 2790, 5011, 5017, 5022, 2790, 2790, 3799, 2790, 3384, 3389, 2790, 2790, 5029, 3394, 2790, 2790, 2790, 2790, 4881, 2790, 3543, 3449, 3410, 3116, 5028, 2790, 3798, 2790, 2790, 5027, 3365, 3864, 2790, 4990, 2790, 4045, 2790, 2710, 2790, 3447, 4603, 3455, 3459, 3700, 3677, 2790, 2790, 3464, 2790, 2790, 2790, 2790, 2790, 4199, 5033, 3136, 2790, 4383, 5039, 2587, 3834, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2578, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 6090, 6563, 5044, 5057, 5054, 6594, 6596, 6596, 6596, 6591, 5074, 6595, 6596, 6596, 6596, 6596, 5087, 5061, 5074, 6596, 6596, 5067, 5062, 6596, 5078, 5084, 5080, 5066, 6594, 6163, 5071, 5091, 5094, 5094, 5094, 5095, 5099, 5099, 5103, 5107, 5114, 5111, 5118, 5122, 5134, 5137, 5129, 5130, 5127, 5125, 5141, 5145, 6561, 6446, 5234, 5173, 5635, 5635, 5635, 5219, 5598, 5503, 5251, 5251, 5251, 5251, 5252, 5196, 5267, 6248, 5502, 5251, 5251, 5196, 5196, 5196, 5266, 5202, 5212, 5632, 5635, 5050, 6519, 6509, 5635, 6818, 5635, 5635, 5146, 5150, 6535, 5218, 5635, 5635, 5147, 5154, 5196, 5267, 5268, 5502, 5213, 5214, 5232, 5214, 5631, 5635, 5146, 5151, 5635, 5155, 5619, 6297, 5635, 6532, 6536, 5244, 5250, 5251, 5251, 5251, 5295, 5631, 5633, 5635, 5635, 5635, 5049, 6518, 5502, 5502, 5293, 5251, 5251, 5226, 5196, 5196, 6247, 5270, 5502, 5502, 5502, 5504, 5268, 5502, 5214, 5633, 5282, 5635, 5635, 5635, 5273, 6084, 5196, 5267, 5271, 5635, 5166, 5635, 5635, 5749, 5219, 5251, 5296, 5196, 5196, 5306, 5635, 5196, 5265, 5269, 5273, 5635, 5635, 5165, 5635, 6247, 5268, 5502, 5502, 5502, 5502, 5251, 5502, 5251, 5251, 5251, 5186, 5193, 5272, 5635, 5635, 6261, 5635, 5298, 5635, 5635, 6262, 5502, 5502, 5294, 5251, 5251, 5251, 5296, 5251, 5251, 5264, 5196, 5196, 5196, 5196, 5265, 5196, 5197, 5635, 6245, 5269, 5293, 5296, 5306, 6246, 6247, 5502, 5502, 5502, 5292, 5251, 5251, 5196, 6255, 6247, 5270, 5292, 5251, 5264, 5197, 5198, 5302, 5297, 5312, 5312, 5304, 5635, 5179, 5635, 5643, 5168, 5635, 6860, 5329, 5590, 5333, 5336, 5339, 5343, 5362, 5419, 5347, 5351, 5404, 5419, 5419, 5419, 5419, 5368, 5384, 5393, 5355, 5359, 5418, 5367, 5372, 5346, 5420, 5381, 5390, 5397, 5377, 5386, 5419, 5376, 5401, 5416, 5424, 5428, 5430, 5430, 5434, 5436, 5440, 5473, 5444, 5446, 5365, 5407, 5450, 5454, 5458, 5466, 5464, 5466, 5462, 5470, 5477, 5635, 5181, 6353, 5635, 5219, 5635, 5635, 5219, 5635, 7266, 5635, 5904, 5635, 6256, 6080, 5635, 6853, 5635, 5635, 5169, 5672, 6820, 5635, 5635, 5635, 5275, 5635, 5635, 7112, 6346, 7172, 5635, 5220, 7282, 5635, 5273, 5642, 5635, 5635, 6879, 5246, 5891, 5635, 5635, 5182, 6258, 5523, 6083, 6080, 5977, 6569, 5635, 6877, 6875, 6150, 5527, 5530, 5531, 5535, 5538, 5542, 5547, 5545, 5551, 5553, 5554, 5558, 5561, 5569, 5562, 5566, 5562, 5572, 5574, 5578, 5635, 6820, 6222, 5635, 5975, 5635, 5635, 6702, 6210, 5614, 5635, 5635, 5189, 5635, 5635, 6773, 5656, 5635, 5635, 5635, 5307, 5668, 5635, 5635, 5635, 5315, 6779, 5662, 5666, 5635, 5635, 5635, 5582, 5675, 5635, 5635, 5635, 5320, 5679, 6567, 5635, 5683, 5691, 5698, 5706, 5734, 5699, 5707, 6568, 5635, 5635, 5635, 5491, 6736, 5694, 5700, 5708, 5162, 5635, 5635, 5635, 5513, 7310, 6318, 5664, 5635, 5635, 5635, 5277, 5746, 5635, 5712, 5635, 5274, 5273, 5635, 5274, 6223, 5635, 5275, 5635, 6695, 5635, 5635, 6694, 5823, 6568, 5635, 5322, 5635, 5635, 5910, 5635, 5635, 5635, 6618, 5236, 5635, 5717, 6739, 6745, 5731, 6568, 5635, 5324, 5635, 6335, 5811, 5635, 5635, 5635, 5675, 5701, 5732, 5635, 5635, 5318, 5635, 5635, 6736, 6740, 6744, 5730, 5734, 5635, 5635, 5635, 5514, 5768, 5701, 5775, 6568, 5776, 5635, 5635, 5635, 5615, 5747, 7254, 5635, 5635, 5512, 6989, 5208, 6448, 5733, 5635, 5635, 5635, 5625, 5788, 7253, 5635, 5635, 5635, 5635, 5159, 5797, 5635, 5635, 5635, 5638, 6319, 5635, 5635, 5635, 5640, 6027, 5799, 5635, 5635, 5635, 5646, 5650, 6805, 5635, 5635, 5635, 5655, 5805, 5798, 5635, 5635, 5635, 5636, 5515, 5803, 6804, 6568, 5635, 5496, 5048, 5635, 5219, 6618, 5635, 5635, 5635, 6260, 5635, 5583, 5635, 5635, 5819, 6695, 5635, 5635, 5635, 5724, 5819, 5635, 5821, 5819, 5635, 5635, 6934, 6878, 5756, 5815, 5829, 5635, 5508, 5204, 5664, 5842, 5846, 5854, 5858, 5862, 5866, 5866, 5868, 5870, 5870, 5870, 5870, 5874, 5874, 5874, 5874, 5877, 5879, 5635, 5635, 5635, 5738, 7116, 5885, 5635, 6258, 6080, 5635, 5899, 5917, 5635, 5635, 5594, 5635, 5324, 5635, 5635, 6618, 5635, 6618, 5635, 5582, 5635, 5635, 5819, 5921, 5635, 5635, 5487, 7303, 5485, 5635, 6834, 5635, 5635, 5612, 5635, 6832, 5932, 5635, 5635, 5635, 7178, 5635, 6696, 5635, 5937, 5325, 5635, 5635, 5635, 5761, 5969, 5635, 5635, 5635, 5804, 5984, 5635, 5635, 5635, 5819, 5635, 5850, 6339, 5992, 5606, 5635, 5635, 5635, 6696, 5635, 5938, 5635, 6256, 6930, 6081, 6015, 5635, 5635, 5635, 5895, 6016, 5635, 5635, 5635, 5902, 5640, 5999, 6005, 6011, 6261, 5635, 6095, 5635, 5635, 6088, 6289, 6037, 6042, 5635, 5635, 5635, 7255, 5635, 5635, 6027, 6032, 6038, 6043, 5635, 5635, 6256, 5635, 6082, 5635, 5820, 5635, 5820, 5635, 5635, 5821, 6261, 6335, 6695, 5635, 5635, 6692, 6568, 5923, 7028, 6032, 6058, 6033, 6059, 5635, 5635, 5635, 5908, 7128, 7132, 6613, 5635, 5635, 5635, 5923, 5517, 6786, 6790, 5635, 6564, 5635, 5635, 5635, 5907, 6260, 6318, 5635, 5635, 5635, 7259, 6072, 6033, 6064, 5635, 5635, 7027, 6032, 6063, 6564, 5635, 5635, 6260, 6261, 5636, 6988, 7255, 5678, 5635, 6082, 5635, 5821, 5945, 5412, 5635, 5635, 5635, 7285, 5635, 5635, 6257, 6081, 6261, 5635, 5635, 5635, 5221, 6071, 6711, 6064, 5635, 5635, 6838, 5635, 5589, 6617, 6072, 6712, 6065, 5635, 5635, 6844, 5635, 5635, 6851, 6568, 6070, 6710, 6063, 6564, 5943, 6983, 5635, 5635, 5635, 7286, 5635, 5756, 5635, 5635, 5635, 5943, 6260, 6094, 5635, 5635, 5635, 7332, 5720, 5635, 6821, 6073, 6109, 5635, 5635, 5635, 5956, 5635, 6099, 6107, 6066, 6256, 6081, 6337, 5635, 5635, 6852, 5635, 5320, 5635, 6075, 6079, 5635, 5635, 5635, 5958, 5635, 6820, 7158, 6077, 5635, 5635, 5635, 7346, 5635, 6131, 6821, 6074, 6076, 5635, 5635, 6820, 6708, 6127, 5635, 5635, 7156, 5634, 5905, 5635, 5228, 6053, 5274, 6116, 6079, 5635, 6981, 6142, 7156, 5822, 5635, 7157, 6118, 5635, 5635, 6115, 6078, 5635, 5635, 6114, 6078, 5635, 5635, 6115, 6078, 5635, 5674, 5285, 5674, 6117, 5635, 5635, 5636, 5635, 5635, 5635, 6221, 6118, 5635, 5635, 6116, 6139, 6079, 5635, 6139, 7083, 5674, 6617, 7134, 5635, 7134, 5635, 7134, 5635, 6616, 6614, 5635, 5635, 6878, 5764, 6744, 6449, 5734, 5635, 5287, 6614, 6614, 6614, 7253, 5635, 5674, 5635, 5635, 5512, 5516, 5635, 6392, 6392, 5635, 5636, 5642, 6257, 5635, 6085, 7286, 5635, 5635, 5635, 6481, 6485, 5733, 6255, 6840, 6147, 5635, 5635, 6940, 6946, 7286, 6617, 6879, 6154, 6160, 6167, 6156, 6171, 6175, 6179, 6183, 6184, 6189, 6189, 6185, 6193, 6193, 6193, 6193, 6196, 7276, 5635, 5583, 5635, 5635, 5582, 6208, 5635, 5635, 6214, 6197, 5278, 6228, 5635, 5635, 6975, 5635, 5635, 7001, 5769, 5797, 5308, 5635, 6961, 5635, 5635, 7001, 5770, 6236, 5635, 5980, 6254, 5635, 5635, 5636, 5945, 5412, 5951, 5635, 5635, 6252, 5635, 5635, 5635, 6053, 5635, 6255, 6086, 6855, 6868, 5635, 6399, 5635, 6614, 5635, 5635, 6273, 5635, 5635, 5638, 5964, 6676, 5635, 5635, 5636, 6988, 6994, 5635, 5678, 5635, 6081, 5635, 5819, 5972, 5635, 5635, 5635, 6082, 6085, 5635, 6281, 5635, 5635, 5640, 6573, 6802, 5206, 6295, 5635, 5635, 7007, 7016, 7041, 5635, 7144, 6290, 6803, 5207, 5207, 6296, 5635, 5635, 5635, 6084, 6291, 5771, 6995, 5635, 5635, 7034, 5635, 5635, 7152, 5635, 5635, 7253, 5635, 5635, 6954, 5657, 5635, 7252, 6400, 5635, 6670, 5635, 6259, 6209, 5635, 5639, 6347, 5635, 5635, 5635, 6088, 6309, 6301, 6325, 6329, 5635, 6310, 6302, 6326, 6079, 5635, 6982, 5907, 5635, 6258, 6081, 6311, 6801, 6327, 5635, 5635, 7257, 6960, 6255, 6086, 6856, 6869, 5635, 5635, 5640, 7027, 6400, 5635, 6735, 7277, 6693, 5635, 6671, 5635, 5635, 5320, 6310, 6323, 6327, 6324, 6328, 5635, 5635, 5635, 6089, 5149, 5153, 6086, 6866, 6567, 5635, 5635, 7287, 6616, 5635, 6879, 7278, 5582, 5635, 6769, 6564, 5635, 7252, 6400, 5288, 6079, 6695, 6669, 5635, 5635, 6201, 5635, 6344, 5635, 5635, 5674, 5805, 6351, 6357, 5635, 5635, 5676, 5635, 6820, 7179, 6366, 6329, 5635, 5260, 5635, 5635, 5635, 6122, 6399, 5635, 5635, 6671, 5635, 6259, 6365, 7255, 5635, 6021, 5635, 5635, 5315, 5167, 5635, 5635, 5635, 6247, 6247, 6619, 5635, 5635, 5635, 6255, 6086, 5635, 6620, 5635, 5635, 5635, 6256, 5219, 5635, 5635, 6619, 5904, 5748, 6771, 6620, 6618, 5635, 7096, 6618, 6618, 6618, 6770, 5901, 5511, 6370, 5635, 5635, 7333, 5721, 5635, 7255, 7154, 5635, 5635, 7349, 5518, 7319, 6209, 6384, 5635, 6372, 5985, 6719, 6390, 6396, 6404, 6408, 6411, 6413, 6417, 6418, 6418, 6422, 6424, 6425, 6429, 6429, 6429, 6429, 6430, 6429, 5635, 5635, 5755, 5635, 5635, 5635, 5888, 5635, 6604, 7326, 5635, 5635, 5635, 6616, 5635, 6692, 5635, 5824, 6457, 6568, 5635, 6852, 5635, 6948, 5635, 6949, 6455, 5635, 5635, 5635, 6261, 6260, 5635, 6462, 6456, 5635, 5637, 5640, 6675, 7115, 5635, 6467, 5635, 5658, 6453, 5635, 6463, 5635, 5635, 5635, 6262, 7328, 5635, 5635, 5635, 6267, 5277, 6615, 5635, 5635, 5755, 5818, 5635, 6819, 5635, 5635, 6494, 6473, 5635, 6477, 5635, 5638, 6346, 5635, 5635, 7275, 5635, 5635, 7287, 5635, 5635, 5635, 6480, 5635, 6498, 6507, 6513, 6518, 6508, 6514, 5635, 5635, 6523, 5635, 5635, 5635, 6315, 5635, 6540, 5635, 5635, 5783, 5635, 5635, 6554, 5635, 5635, 5635, 6339, 5635, 6263, 6549, 6503, 5635, 6547, 5176, 6553, 5635, 5635, 5635, 6334, 5635, 6558, 7327, 5635, 5635, 5784, 5635, 6578, 5153, 5635, 5635, 5635, 6439, 6088, 6574, 6579, 5154, 5635, 5635, 6583, 5635, 5635, 5894, 5810, 5635, 5635, 5581, 5635, 5635, 5635, 5725, 6054, 5637, 5635, 5635, 5900, 5635, 5635, 5635, 5904, 5635, 6088, 6588, 5153, 5635, 5638, 6826, 7252, 6088, 5148, 5152, 5635, 5640, 7087, 6772, 6084, 6772, 6084, 5275, 5635, 6694, 5904, 6338, 5277, 6693, 5635, 5825, 5635, 6821, 6600, 5635, 5640, 7334, 5907, 5635, 5635, 6822, 6224, 5635, 5644, 5648, 6102, 5635, 6821, 6223, 5635, 5635, 5635, 6479, 6762, 5824, 5635, 5321, 5635, 5647, 7054, 7038, 5635, 7255, 5637, 5635, 5654, 5635, 5635, 5222, 7284, 5635, 5635, 5276, 5635, 5277, 6695, 6337, 6260, 5635, 5635, 5635, 5256, 6220, 5154, 5635, 5635, 5635, 6399, 5638, 6692, 5635, 5635, 5923, 6072, 5638, 7024, 6610, 5635, 5674, 6141, 5635, 5635, 6854, 5635, 5635, 6878, 5693, 5699, 7255, 6216, 6771, 5635, 5677, 5635, 5635, 5635, 5587, 5911, 6624, 5628, 6630, 6638, 6641, 6645, 6648, 6656, 6656, 6656, 6656, 6651, 6652, 6652, 6652, 6660, 6660, 6660, 6660, 6662, 6666, 5635, 5635, 5635, 6566, 6048, 5635, 5622, 5635, 5686, 5838, 5635, 5686, 6053, 5635, 5635, 5635, 5985, 5635, 5589, 6694, 5939, 6617, 5912, 6686, 5635, 5635, 5944, 5411, 6052, 6691, 5635, 5635, 6756, 6701, 5635, 5635, 5635, 6567, 6125, 6772, 5635, 5635, 5987, 5635, 5635, 6723, 6729, 7278, 6695, 6734, 5635, 5635, 5991, 5605, 6749, 5635, 5635, 5635, 6615, 5635, 5635, 5635, 5645, 5649, 5635, 6480, 6763, 6750, 5635, 6764, 5607, 5635, 5635, 5635, 5835, 5635, 6717, 5635, 5635, 6026, 6031, 5608, 5635, 6730, 6143, 6483, 6487, 6568, 5635, 5635, 6486, 5734, 5635, 5635, 6133, 6881, 5635, 5635, 6133, 7095, 5635, 5635, 5635, 6816, 6204, 6203, 5635, 5635, 6134, 6772, 5909, 5635, 5635, 5635, 6620, 5635, 5597, 6879, 6795, 5635, 5635, 5635, 6685, 6480, 6484, 6488, 5635, 5635, 6616, 6615, 5635, 5635, 6204, 6202, 5274, 6126, 5635, 5635, 6220, 6224, 7347, 6777, 5635, 5635, 6230, 5635, 5635, 6230, 6485, 5733, 5635, 5635, 6054, 5204, 5635, 7269, 6772, 5635, 5687, 5952, 5635, 5713, 5635, 5635, 5276, 6615, 5635, 6277, 5635, 5635, 6619, 6809, 5734, 5635, 5635, 6246, 6247, 6247, 6247, 6247, 5270, 5502, 7114, 5635, 7254, 5635, 5674, 5805, 5798, 6276, 5748, 5635, 5635, 6255, 6247, 6247, 6247, 5269, 5502, 5502, 5835, 6053, 5635, 5635, 6318, 6568, 5635, 7347, 7114, 5635, 5635, 6819, 5321, 5635, 6845, 5635, 5635, 5635, 6716, 5635, 6974, 5635, 5635, 6333, 5635, 6256, 5317, 6285, 5635, 5635, 6966, 5635, 5635, 6965, 5635, 5635, 6257, 5635, 6961, 6053, 5635, 5635, 6967, 5635, 6255, 5589, 6617, 5635, 5753, 5635, 5635, 5323, 5635, 6113, 5634, 5904, 5635, 6256, 6961, 6053, 6255, 6965, 6965, 6965, 5635, 6967, 6965, 5635, 6965, 5635, 6258, 6967, 6965, 7286, 6269, 5741, 5741, 5741, 6053, 6849, 5635, 5635, 5635, 6754, 5635, 7342, 6334, 5635, 5780, 6568, 5635, 5492, 6542, 6492, 5635, 5635, 5635, 6307, 6311, 6324, 6936, 6083, 6873, 5319, 6886, 6892, 6890, 6896, 6900, 6900, 6902, 6908, 6906, 6906, 6908, 6916, 6915, 6912, 6920, 6921, 6921, 6921, 6921, 6925, 6928, 5208, 5635, 5635, 6855, 6526, 6380, 5635, 5635, 6340, 5993, 6565, 5635, 5635, 6617, 5635, 5635, 5635, 6706, 5635, 6239, 5635, 5635, 6364, 7154, 5635, 6242, 5635, 5635, 5637, 5965, 5635, 6953, 5635, 5635, 6376, 5635, 5635, 6958, 5635, 5635, 6443, 5589, 7258, 5635, 5635, 5635, 6760, 5635, 6971, 5635, 6979, 6987, 6993, 6329, 5635, 5832, 6260, 6680, 6878, 5791, 6543, 5635, 5836, 5635, 5635, 6284, 5635, 5635, 6567, 5635, 6616, 5635, 5635, 6469, 6482, 6999, 5635, 5639, 5635, 5635, 5635, 6461, 5725, 5635, 5635, 5635, 6768, 7012, 7040, 5635, 5635, 6547, 6501, 7041, 5635, 5635, 5635, 6769, 5635, 7008, 7017, 7042, 5635, 5848, 5748, 6255, 5483, 5635, 5635, 6245, 6247, 5635, 7021, 5933, 6053, 5904, 6935, 6879, 5792, 5644, 5648, 7055, 7046, 5645, 7052, 7056, 7047, 5646, 7053, 7057, 7048, 5724, 5635, 5635, 5635, 6783, 6486, 5734, 5820, 5635, 5904, 6935, 6879, 5748, 6879, 5793, 5635, 6566, 5635, 5757, 5635, 5635, 5724, 5756, 5635, 5277, 5635, 5635, 5635, 7176, 7094, 7061, 7048, 5635, 5635, 6548, 6502, 5649, 6103, 7067, 7048, 5635, 7061, 6564, 5635, 5635, 6568, 5635, 5646, 5650, 7066, 7124, 5635, 7065, 7123, 5635, 5635, 6584, 5635, 5635, 6987, 7154, 5635, 5881, 5635, 5635, 6365, 5635, 6878, 5318, 6615, 5635, 5899, 5962, 5635, 5602, 5635, 5635, 5188, 5635, 7077, 5635, 5635, 5635, 6794, 5647, 7076, 7069, 5635, 5900, 6053, 5726, 5646, 7075, 7068, 5635, 5635, 6879, 5635, 5635, 5635, 6799, 6809, 5635, 7176, 7081, 5635, 5901, 7114, 6434, 5635, 5635, 7176, 7089, 5635, 5902, 5511, 6435, 5635, 5635, 5757, 5274, 5635, 6088, 7088, 5635, 5902, 5635, 5635, 5635, 6800, 5635, 6088, 7154, 5635, 5903, 5635, 5906, 6616, 6614, 5820, 5904, 6880, 5635, 5908, 5635, 5635, 5924, 7029, 6033, 5640, 7178, 5635, 5635, 6614, 5635, 5635, 6088, 7093, 5635, 5908, 6605, 7327, 7177, 7095, 5635, 5901, 5902, 5635, 5640, 6218, 5821, 6880, 5635, 5635, 6615, 6616, 5635, 5635, 6259, 5635, 5635, 6259, 5635, 5903, 5635, 5635, 5635, 5745, 5640, 7178, 6772, 5238, 5635, 7100, 6880, 5635, 5913, 6687, 5635, 6700, 5635, 5635, 6135, 5635, 5635, 6681, 5635, 5635, 6820, 7094, 5635, 5928, 5635, 5635, 5608, 6878, 5635, 7100, 6881, 5635, 7115, 5635, 5635, 7254, 7106, 5635, 5635, 5635, 6821, 6073, 6820, 7275, 5635, 5635, 5635, 6820, 6309, 6133, 7095, 6880, 5635, 5943, 5410, 5949, 5635, 5635, 5635, 7252, 5635, 5635, 7120, 5635, 5635, 7273, 7120, 6878, 5635, 5635, 6693, 5635, 5635, 5635, 7274, 5635, 5635, 6695, 5635, 5635, 5819, 5809, 5635, 7138, 5635, 6963, 5905, 6209, 5635, 6961, 5635, 5979, 6253, 5635, 5635, 7002, 6744, 5798, 5240, 5635, 6021, 5499, 7109, 5673, 5635, 7142, 5635, 6962, 6021, 6964, 6625, 6022, 7174, 7271, 7149, 7162, 7166, 7170, 7183, 7187, 7191, 7194, 7202, 7197, 7198, 7206, 7208, 7212, 7218, 7217, 7213, 7222, 7232, 7232, 7225, 7231, 7227, 7236, 7240, 5635, 5985, 5837, 5635, 5723, 5635, 5635, 6602, 6606, 7128, 7132, 5904, 5635, 5910, 5481, 7100, 7241, 5635, 5635, 6695, 5824, 6360, 5635, 5635, 5635, 6853, 6259, 6079, 5635, 6529, 7245, 7247, 7251, 5635, 5986, 5635, 5635, 5763, 6743, 5702, 5776, 5635, 7263, 5635, 5635, 6725, 5492, 7283, 7255, 5635, 5635, 6737, 5769, 7291, 5635, 7292, 5635, 5997, 6003, 6009, 6015, 5635, 7296, 7130, 5635, 5998, 6004, 6010, 5907, 5903, 5635, 5635, 6737, 6741, 5635, 6086, 5641, 5635, 5635, 5635, 7100, 5635, 5635, 6738, 6742, 6879, 5635, 7114, 5635, 7252, 5635, 5635, 6853, 6855, 5635, 6020, 5635, 5635, 5635, 7254, 5635, 6337, 5635, 5635, 6770, 5635, 6772, 5635, 6086, 6084, 5635, 5635, 6259, 5635, 7301, 6386, 5635, 5635, 5635, 6878, 5635, 5512, 7309, 6633, 5635, 6047, 5635, 5635, 5635, 7256, 7310, 6634, 5635, 5635, 5635, 6882, 5635, 7307, 7311, 6338, 6853, 5320, 5635, 5640, 7334, 5722, 5635, 5635, 6821, 6126, 5635, 5635, 6021, 6772, 7128, 7132, 5258, 5635, 5635, 5635, 6966, 5642, 5635, 5635, 7101, 5635, 6850, 5635, 6336, 5635, 6260, 5635, 6261, 7102, 5985, 6334, 5635, 5635, 5644, 7073, 7315, 7319, 6338, 5635, 6080, 5906, 5903, 7316, 6788, 5635, 5635, 6772, 5635, 6084, 7095, 5635, 5635, 5686, 5635, 7317, 6789, 5635, 5635, 6813, 5635, 7318, 6790, 6770, 6769, 5635, 5635, 6619, 5635, 6769, 6820, 5635, 5635, 6881, 7115, 5635, 6852, 6855, 5635, 5635, 5635, 6845, 5635, 6718, 6694, 5635, 5635, 5635, 6942, 6786, 6790, 5635, 5635, 5635, 6967, 5635, 5635, 6786, 6790, 6770, 6769, 7254, 5635, 7101, 5635, 7297, 7132, 5258, 7113, 5635, 5635, 6819, 5635, 5635, 5635, 5166, 6379, 5048, 5635, 5635, 6821, 6074, 6078, 5635, 5635, 5635, 5978, 7350, 5519, 7320, 5635, 6081, 5678, 6626, 7319, 5635, 5635, 5635, 7006, 7348, 5517, 6786, 6617, 5635, 6772, 6771, 5635, 6084, 6303, 6488, 5635, 7324, 5906, 5903, 5635, 6085, 5641, 5635, 6084, 6352, 5635, 5635, 5635, 6231, 5047, 5635, 5635, 5635, 7033, 5635, 7348, 7335, 5903, 5635, 6879, 5635, 6851, 5678, 5909, 6855, 6864, 5635, 7340, 5635, 5635, 6829, 5635, 6087, 5635, 6881, 5635, 6852, 6819, 6850, 5635, 5635, 6261, 7332, 7336, 5635, 5635, 5635, 7145, 5635, 6232, 5635, 5635, 6833, 5635, 5274, 5635, 5635, 5635, 7177, 0, 0, 1075838976, 2097152, 16384, 0, 0, 0, 62, 64, 4194560, 4196352, 270532608, 2097152, 2097152, 268435456, 4194432, 541065216, 541065216, 541065216, 541065216, 4194304, 4194304, 4196352, -1606418432, -1606418432, 541065216, 541065216, 4194304, 4198144, 541065216, 541065216, -2143289344, -2143289344, 8425488, 4194304, 4194304, 4194304, 541065216, 37748736, 4194304, 541065216, 4194304, 4194304, 4194432, 37748736, -1606418432, 742391808, 239075328, 775946240, 171966464, 171966464, 171966464, 171966464, 239075328, 171966464, 775946240, 239075328, 239075328, 775946240, 775946240, 775946240, 4718592, 64, 4718592, 2097216, 4720640, 4194400, 4194368, -2142763008, 541589504, 4194368, 541589504, 541589504, 541065280, 4194368, 4194368, 541065312, 541065280, -2143289280, 4194368, -2143285440, -1605890240, -2142761152, -2109731008, -1606414528, -2143285440, -2143285440, -2143285440, -1605890240, -1606414528, -1606414528, -2143285440, -2143285408, -2143285440, -2143285440, -2142761152, 776470528, -1908404416, 775946304, 775946304, -1908404416, 2, 4, 8, 16, 512, 1024, 16777216, 33554432, 402653184, 0, 0, 0, -1979711488, 0, 8192, 8392704, 0, 0x80000000, 16777216, 0, 0, 1536, 32768, 0, 0, 128, 196608, 0, 16384, 1536, 1792, 8192, 16384, 131072, 131072, 0, 0, 64, 1536, 32768, 96, 96, 0, 0, 0x80000000, 16, 0, 0, 1536, 64, 524352, 524352, 524352, 524352, 0, 524288, 64, 64, 262144, 1048576, 4194304, 16777216, 33554432, 67108864, 134217728, 536870912, 0, 128, 128, 128, 128, 2048, 1536, 1024, 0, 0, 0, 15, 208, 15360, 96, 96, 0, 64, 64, 16392, 64, 1048576, 128, 128, 0, 256, 8192, 0, 8192, 0, 33554432, 0, 1024, 1024, 0, 0, 0x80000000, 65536, 32, 96, 96, 96, 96, 64, 0, 8388608, 4096, 0, 0, 8192, 2097152, 0x80000000, 96, 524352, 524352, 524352, 524288, 524288, 524288, 64, 64, 64, 0, 0, 0, 8, 0, 0, 0, 11, 64, 64, 128, 2048, 0, 4096, 0, 0, 131072, 128, 64, 64, 64, 96, 96, 96, 524352, 524352, 524288, 64, 524288, 64, 64, 96, 524352, 0, 0, 0, 18, 33554432, 64, 96, 524352, 524288, 0, 64, 0, 2097152, 0, 0, 4, 16, 0, 0, 16, 8388608, 0, 0, 4096, 536870912, 1073741824, 0, 4, 32, 32, 4, 1073872896, 32, 40, 96, 160, 1056, 262176, 1048608, 2097184, 32, 32, 32, 524320, 32, 1073872896, 40, 262176, 1120, 96, 4195360, 6291488, 2097184, 2097184, 4194336, 4194336, 536870944, 32, 32, 40, 262176, 32, 32, 40, 262184, 1120, 96, 6292512, 4195360, 56, 262184, 40, 262184, 40, 0, 4, 262184, 40, 40, 40, 40, 4195104, 6292512, 4196128, 32, 262184, 34, 34, 40, 48, 42, 32, 32, 327155712, 34, 1056, 1056, 32, 96, 32, 32, 41, 262184, 32, 64, 512, 2048, 16384, 67108864, 42, 1056, 4194336, 32, 32, 32, 32, 56, 2098208, 42, 4457568, -326784344, -322851160, -322851160, -322698144, -322698144, -322698144, -322698144, -322695456, -322695456, -322695456, -322695456, -322597152, -320598176, -322597152, -322597144, -321548576, -320598168, -321548568, -322597144, 32, 0, 96, 32, 42, 224, 40, 262176, 42, 106, 293601323, 293601323, 293863467, 293699627, 293617707, 293716011, 297896507, 293964347, 293702267, 297896507, 293702203, 293702203, 293702203, 293702203, 293964347, 297896507, 297896507, -322597144, -322588952, -321548568, -322588952, -37744981, -322597144, -321548568, -37482773, 0, 131072, 1048576, 2097152, 0, 0, -1744830464, 0, -1744830464, 0, 318767104, 0, 0, 0, 48, 0, 1, 285212672, 0, 0, 2048, 64, 64, 64, 64, 32, 96, 0, 32, 64, 65536, 0, 0, 1, 2, 12, 16, 64, 128, 1024, 2048, 4096, 0, 2, 65536, 262656, 5242880, -1842937664, 201330721, 201330721, -2111369023, -2111369023, -2111369023, -2111369023, -2111369023, -2111369023, -2111360575, -2111369023, -2111369023, -1977151295, -1977151293, -1910042431, -1893265183, -2111368509, -1893265183, -1893265183, -1893265183, -1893265183, -2111368509, -1893265183, -1893265183, -553689472, -553656704, -553689472, -553689472, -553656704, -553656704, -553656704, -553656704, -553656704, -553656704, -553656672, -553656672, -553656672, -553656672, -553656672, -553656670, -553656608, -553656672, -553656664, -553656664, -553656672, -553656670, -553656672, -553656672, -536912159, -553656671, -536879391, -536879391, -536879391, 0, 0, 2048, 4194304, 0, 0, 0, 262656, 0, 0, 0, 536870912, 1073741824, 458880, 2097152, -1845493760, 0, 0, 4096, 2097152, 0, 0, 1, 4096, 201326592, 805306368, -1073741824, 0, 0, 0, 24576, 471424, 0, -2113929216, 0, 0, 0, 220, -1912602624, 18874368, 463488, 0, 0, 9216, 0, 0, 16384, 8192, 8192, 32768, 2048, 2048, 2048, 2048, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 4, 16, 224, 256, 512, 32768, 0, 1040000, 15728640, -570425344, 0, 0, 0, 254, 4194304, 16777216, 33554432, 268435456, 536870912, 0x80000000, 0, 0, -570425344, 32505856, 2097152, 301989888, 0, 0, 0, 512, 0, 0, 0, 256, 12288, 0, 167772160, 234881024, 0, 0, 16384, 32768, 50331648, 0, 128, 512, 7168, 16384, 32768, 196608, 16384, 196608, 786432, 1048576, 2097152, 4194304, 8388608, 33554432, 2097152, 4194304, 8388608, 503316480, 1073741824, 0x80000000, 0, 4096, 201326592, 0, 0, 0, 167772160, 234881024, 128, 1024, 4096, 8192, 0, 0, 8192, 268435456, 0, 0, 4194304, 8388608, 234881024, 268435456, 1073741824, 0x80000000, 0, 0, 1048576, 4194304, 33554432, 268435456, 268435456, 268435456, 268435456, 0, 128, 131072, 2097152, 0, 0, 0, 520, 0, 201326592, 0, 0, 0, 1073741824, 0, 0, 0, 134217728, 128, 512, 3072, 16384, 32768, 3072, 16384, 131072, 524288, 1048576, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 1048576, 4194304, 268435456, 536870912, 131072, 0, 0, 131072, 0, 131072, 2097152, 0, 0, 16384, 2097152, 0, 0, 2097152, 4194304, 134217728, 0x80000000, 0, 0, 0, 512, 3072, 131072, 524288, 1048576, 131072, 524288, 4194304, 0x80000000, 0, 0, 0, 16384, 16384, 18432, 0, 0, 0, 2048, 0, 0, 4096, 1048576, 0, 0, 67108864, 1073741824, 0x80000000, 0, 0, 29696, 0, 0, 32768, 50331648, 268435456, 0x80000000, 0, 0, 1, 1, 18952, 1024, 0, 65, 1024, 0, 4096, 32768, 0, 1024, 18952, 65, 268436480, 2101248, 524288, 1024, 19017, -1744550912, 8388624, 8388624, 8388624, -1739308032, -1739308032, -1739308032, -1739308032, -1736162288, -1736162288, -1736162288, -1736162288, -7868466, -7868466, -7868466, -7868466, -7868450, -7868450, -7868450, 0, 0, 0, 1610612736, 1024, 0, 2101248, 0, 0, 262144, 65536, 262144, 262144, 0, 0, 2048, 131072, 524288, 585, 0, 0, 0, 8192, 0, 0, 0, 4096, 0, 0, 0, 32, 0, 0, 0, 44, 64576, 0, 1024, 278528, -1744830464, 5521408, -1744830464, 0, 0, 2, 12, 64, 0, 1040, 8667136, -1744830464, -67108864, 0, 0, 0, 9728, 0, 2014, 0, 0, 0, 13312, 0, 1, 4, 8, 32, 64, 16384, 67108864, 134217728, 268435456, 0x80000000, 0, 0, 520, 1024, 0, 0, 2, 16, 0, 278528, 0, 0, 2, 67108864, 16384, 0, 5242880, 0x80000000, 0, 0, 327680, 0, 0, 328192, 0, 0, 0, 118, 577408, 22020096, 1040, 0, 0, 0, 16384, 0, 67108864, 1998, 518144, 8388608, 50331648, 201326592, 805306368, 0, 2, 204, 768, 1024, 10240, 1024, 10240, 16384, 32768, 458752, 8388608, 458752, 8388608, 50331648, 67108864, 134217728, 805306368, 134217728, 805306368, 1073741824, 0x80000000, 0, 220, 0, 0, 0, 32768, 33554436, 2, 12, 192, 768, 1024, 1024, 2048, 8192, 16384, 32768, 458752, 32768, 458752, 50331648, 67108864, 134217728, 134217728, 805306368, 1073741824, 0, 0, 208, 0, 0, 0, 34816, 67108864, 268435456, 0, 0, 0, 65536, 458752, 50331648, 67108864, 805306368, 1073741824, 458752, 50331648, 67108864, 536870912, 1073741824, 0, 0, 4, 8, 64, 128, 512, 2048, 196608, 262144, 33554432, 536870912, 0, 0, 0, 262144, 0, 0, 0, 64, 0, 0, 2, 4, 8, 262144, 0, 1048576, 4194304, 0, 0, 4, 8, 128, 512, 1024, 32768, 65536, 131072, 2048, 196608, 262144, 50331648, 536870912, 1073741824, 1, 4, 8, 512, 2048, 131072, 33554432, 536870912, 0, 0, 4, 8, 512, 2048, 8192, 32768, 8388608, 0, 524288, 262144, 0, 0, 4, 64, 128, 8388608, 0, 512, 2048, 131072, 536870912, 0, 0, 4194304, 8192, 2097152, 268435456, 0x80000000, 16, 33554432, -2147418112, 537395200, 537395200, 0, 4196352, 537427968, 4196352, 0, 537395200, 4196352, 4196352, 276901888, 8540160, -1606418432, 32768, 537395200, 4196352, 1082130432, 51380242, 51380242, 51380242, 22022147, 22349827, 22349827, 22349827, 22366219, 22349843, 22349827, 22349827, 22366219, 22349827, 55576594, 55576594, 55576594, 55576594, 1062785014, 324012114, 55576594, 55576594, 55576594, 1062785014, 1062785014, 1062785014, 1062785014, 0, 0, 0, 329728, 557056, 0, 0, 0, 393216, 0, 0, 17825792, 33554432, 0, 0, 0, 462976, 3, 22020096, 0, 0, 4, 134217728, 0, 0, 8, 16, 512, 402653184, 0, 0, 346112, 19, 0, 0, 8, 64, 0, 0, 0, 82, 301989888, 0, 0, 393232, 0, 0, 393240, 0, 0, 524288, 524288, 524288, 524288, 0, 577408, 22020096, 1040187392, 0, 0, 0, 524288, 0, 0, 0, 16, 0, 0, 0, 6, 16384, 32768, 268435456, 0, 268435456, 0, 1048576, 16777216, 33554432, 0, 0, 524288, 1048576, 2097152, 0, 80, 268435456, 0, 0, 524288, 536870912, 0, 112, 128, 256, 3584, 16384, 32768, 134217728, 805306368, 0, 0, 0, 1007232, 256, 1536, 2048, 16384, 32768, 262144, 0, 4, 16, 32, 64, 128, 256, 1536, 0, 16, 33554432, 0, 0, 1048576, 4194304, 0x80000000, 1536, 16384, 32768, 524288, 4194304, 33554432, 134217728, 536870912, 0, 0, 0, 32768, 0, 0, 0, 1048576, 0, 0, 0, 1998, 518144, 1, 0, 0, 65536, 262144, 0, 0, 256, 1536, 32768, 524288, 0, 0, 4194304, 134217728, 536870912, 0, 0, 1114112, 1073741824, 16, 64, 1536, 32768, 524288, 4194304, 67174400, 33554432, 1073741824, 0, 67174400, 0, 0, 16384, 1073741824, 0, 0, 2097152, 0, 1572864, 0, 1073741824, 16384, 0, 4194304, 0, 8, 0, 131072, 0, 131072, 0, 8, 131072, 131072, 134217728, 4096, 0, 8, 0, 8, 131072, 4194304, -2146430976, 131072, 134217736, 16908320, 547389524, 547389524, 555909216, 555909216, 555909216, 555909216, 564297840, 564297844, 564297844, 564297844, 564297844, 564297844, 564297844, 1001055742, 1001056254, 1001055742, 1001055742, 1001056254, 1001056254, 1001056254, 1001056254, 1001056254, 1001055742, 1, 0, 67108864, 1073741824, 0, 84, 2129920, 8388608, 536870912, 0, 96, 2260992, 0, 0, 2097152, 4194304, 8388608, 134217728, 268435456, 1280, 2809856, 58720256, 939524096, 0, 0, 0, 1052672, 0, 254, 1792, 2809856, 58720256, 939524096, 0, 939524096, 0, 0, 12, 16, 32768, 2097152, 8388608, 536870912, 0, 163840, 0, 0, 12, 32, 64, 1024, 2048, 57344, 262144, 50331648, 268435456, 1073741824, 0x80000000, 0, 52, 0, 0, 20, 64, 62, 64, 128, 1280, 8192, 16384, 131072, 524288, 58720256, 24576, 163840, 524288, 2097152, 58720256, 402653184, 58720256, 402653184, 536870912, 0, 0, 64, 128, 1792, 24576, 163840, 4, 16, 8388608, 0, 0, 2113536, 0, 0, 3735552, 0, 0, 8388608, 8388608, 4096, 4096, 4096, 4096, 0, 48, 25165824, 0, 0, 0, 1572864, 0, 6, 56, 128, 1792, 8192, 524288, 58720256, 402653184, 0, 0, 32, 128, 256, 262144, 262144, 1048576, 1073741824, 0, 0, 0, 0x80000000, 0, 0, 0, -2147483646, 4, 24, 32, 128, 1792, 1280, 8192, 524288, 16777216, 33554432, 0, 262144, 33554432, 134217728, 0, 8, 16, 1024, 16777216, 4194432, 3145728, 541065216, -2143289344, 4194304, 4194304, 4194304, 4194304, 16, 402653184, 0, 0, 32, 128, 256, 2048, 262144, 524288, 4, 16384, 65536, 67108864, 0, 0, 0, 131072, 0, 0, 0, 1024, 0, 0, 32768, 8192, 0, 2048, 0, 32, 8192, 3670016, 2048, 8192, 196608, 1048576, 0, 0, 34816, 9216, 4096, 4096, 29696, 29712, 29712, 29840, 29712, 29712, 29840, 536900624, 4224144, 144384, -754647956, -754647956, -754647956, -754647956, 144384, 144384, 144384, 144384, -754647940, -754647940, -754647940, -754647940, -754516884, -754647956, -754516884, -754516884, -754516884, 0, 0, 8388608, 1073741824, 0, 0, 67108864, 12, 16384, 0, 65536, 29824, 0, 0, 0, 3670016, 44, 64576, 319029248, -1073741824, 0, 0, 60, 0, 0, 0, 4194304, 0, 0, 0, 2014, 0, 319160320, 0, 0, 0, 5242880, 0, 4, 8, 256, 512, 2048, 8192, 16384, 458752, 50331648, 0, 524288, 3145728, 0, 0, 16384, 8, 0, 28672, 0, 0, 32, 524288, 0, 16, 0, 128, 0, 12288, 131072, 0, 0, 128, 512, 3072, 4096, 16384, 32768, 131072, 524288, 1048576, 2097152, 4194304, 262144, 318767104, -1073741824, 0, 0, 0, 28, 0, 0, 60, 64576, 28, 32, 64, 1024, 2048, 61440, 262144, 318767104, 24576, 0, 0, 0, 8388608, 0, 0, 0, 1040000, 67108864, 16384, 0, 65536, 262144, 1048576, 0, 8, 64, 2048, 4096, 8192, 65536, 131072, 1048576, 0, 0, 128, 536870912, 4194304, 131072, 0, 0, 64, 2048, 16384, 32768, 524288, 1048576, 4194304, 134217728, 0x80000000, 32768, 262144, 50331648, 268435456, 0, 32768, 8388608, 0, 0, 16777216, 16777216, 0, 0, 0, 4, 8, 16, 2, 67108864, 0, 65536, 201326592, 0x80000000, 0, 0, 1998, 59238400, -67108864, 0, 524288, 1048576, 0, 0, 64, 256, 32768, 50331648, 268435456, 0, 0, 1, 256, 0, 0, 0, 16777216, 0, 0, 256, 0, 8192, 0, 256, 262144, 2113536, 2097152, 135790592, 0, 256, 8192, 2097152, 0, 0x80000000, 0, 32768, 2097152, 0, 0x80000000, 5242880, 0, 0, 0, 128, 0, 0, 0, 208, 131073, 0, 0, 131073, 0, 135790592, 131073, 4, 0, 131073, 393233, 1610612736, 1610612736, 1610612736, 393241, 393241, 393241, 393241, 805707793, 805707793, 1879449617, 805708049, 1879449617, 1879449617, 1879449617, 1879449617, -483948553, -475559945, -475559945, -483948553, -483948553, -475559945, -483948553, -475559945, -483948553, -475559945, -475559945, -475559945, -475559945, -475559945, -215504905, -475559945, -207116297, -207116297, 0, 0, 72, 0, 4096, 4194304, 32768, 0, 0, 256, 401424, 805306368, 0, 0, 112, 25165824, 0, 1879048192, 0, 0, 116, 0, 0, 401680, 0, 0, 0, 32505856, 7, 19367920, -503316480, 0, 0, 0, 33554432, 0, 0, 33554432, 268435456, 0, 0, 0, 19376112, -234881024, 0, 0, 50331648, 268435456, 0, 27764720, -234881024, 0, 0, 512, 2048, 0, 0, 1, 2, 4, 32, 524288, 1048576, 524288, 1048576, 33554432, 67108864, 134217728, 805306368, 0, 24, 0, 0, 512, 3072, 16384, 0, 7, 16, 480, 1536, 32768, 1536, 32768, 65536, 2490368, 32768, 65536, 10878976, 16777216, 33554432, 0, 9728, 268435456, 0, 0, 67108866, 12, 64, 128, 512, 1024, 2048, 0, 16, 393216, 0, 0, 393216, 2097152, 16777216, 33554432, 536870912, -1073741824, 0, 0, 10485760, 16777216, 33554432, 1073741824, 0x80000000, 0, 16, 224, 256, 1536, 32768, 65536, 393216, 10485760, 16777216, 131072, 262144, 2097152, 16777216, 32768, 131072, 262144, 2097152, 8388608, 16777216, 0, 0, 4, 16, 224, 512, 32768, 131072, 2097152, 16777216, 192, 32768, 0, 0, 512, 4096, 4, 16, 192, 32768, 8388608, 0, 16, 64, 128, 8388608, 0, 0, 1024, 0, 4, 0, 0, 0, 3145728, 0, 4, 128, 0, 0, 268435456, 2, 0, 0, 65536, 0, 0, 0, 65, 0, 64, 128, 8388608, 16777216, 1073741824, 0, 0, 512, 2048, 32768, 262144, 524288, 8388608, 0, 0, 512, 131072, 524288, 8388608, 33554432, 0x80000000, 33554432, 33554432, 0, 2, 4, 112, 128, -2113929216, 100663296, 100663296, 2, 4, 524288, 134217728, 0, 0, 8, 512, 2048, 196608, 33554436, 0, 0, 33554436, 4224, 4224, 0, 65536, 100663296, 4224, 65536, 65536, 262144, 33554432, 0, 2, 4, 16, 64, 128, 256, 0, 4224, 65536, 16777216, 262400, 65536, 4224, -1072627712, 805306384, -1342177264, -1342177264, -1070006272, -1069989376, -1069989376, -1069989376, -258932720, -258932720, -258932720, -258932720, -1069989360, -1065795072, -1061600768, -1069989376, -225378288, -258932720, -258932720, -258932720, -225378288, 1260767, 1260767, 34815199, 1260767, 1260767, 1260767, 1260767, 34815199, 1260767, 34815199, 34815199, 34815199, 1260767, 1260767, 169032927, 1242774751, -1978450721, 169032927, -1978450721, -1978450721, -1978450721, 169032927, 169032927, 169032927, 169032927, -225231649, -1173144353, -225231649, -225231649, -91013921, 0, 0, 0, 67108864, 0, 3751936, 0, 0, 528, 7946240, 12140544, 0, 0, 0, 134217728, 0, 0, 0, 7, 27756528, -503316480, 0, 0, 9502720, 1610612736, 0, 0, 486539264, 0, 0, 2048, 32768, 0, 0, 64, 128, 0, 0, 536870912, 0, 0, 208, 15360, 1245184, 0, 0, 0, 268435456, 0, 0, 0, 15, 9633792, 0, 0, 0, 32, 512, 2048, 262144, 0, 3670016, 0, 0, 1040, 1040, 1, 2, 12, 80, 128, 7168, 8192, 196608, 16, 64, 128, 3072, 4096, 8192, 65536, 131072, 0, 0, 32, 262144, 524288, 33554432, 134217728, 0, 0, 0, 2, 8, 64, 128, 1024, 4096, 0, 0, 262144, 0, 4096, 4194304, 1, 1, 1, 0, 0, 2, 8, 16, 64\n];\n\nJSONiqParser.TOKEN =\n[\n  \"(0)\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSection\",\n  \"Wildcard\",\n  \"EQName\",\n  \"URILiteral\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"StringLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"PITarget\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'!='\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$'\",\n  \"'$$'\",\n  \"'%'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"'+'\",\n  \"','\",\n  \"'-'\",\n  \"'-->'\",\n  \"'.'\",\n  \"'..'\",\n  \"'/'\",\n  \"'//'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"'::'\",\n  \"':='\",\n  \"';'\",\n  \"'<'\",\n  \"'<!--'\",\n  \"'</'\",\n  \"'<<'\",\n  \"'<='\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'>='\",\n  \"'>>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'@'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'false'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'jsoniq'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'null'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'select'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'true'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'{|'\",\n  \"'|'\",\n  \"'||'\",\n  \"'|}'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/parsers/XQueryParser.js\":[function(_dereq_,module,exports){\n                                                            var XQueryParser = exports.XQueryParser = function XQueryParser(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    l2 = 0;\n    end = e;\n    ex = -1;\n    memo = {};\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryParser.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryParser.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryParser.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_XQuery = function()\n  {\n    eventHandler.startNonterminal(\"XQuery\", e0);\n    lookahead1W(274);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Module();\n    shift(25);                      // EOF\n    eventHandler.endNonterminal(\"XQuery\", e0);\n  };\n\n  function parse_Module()\n  {\n    eventHandler.startNonterminal(\"Module\", e0);\n    switch (l1)\n    {\n    case 274:                       // 'xquery'\n      lookahead2W(198);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 64274                 // 'xquery' 'encoding'\n     || lk == 134930)               // 'xquery' 'version'\n    {\n      parse_VersionDecl();\n    }\n    lookahead1W(274);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    switch (l1)\n    {\n    case 182:                       // 'module'\n      lookahead2W(193);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 94390:                     // 'module' 'namespace'\n      whitespace();\n      parse_LibraryModule();\n      break;\n    default:\n      whitespace();\n      parse_MainModule();\n    }\n    eventHandler.endNonterminal(\"Module\", e0);\n  }\n\n  function parse_VersionDecl()\n  {\n    eventHandler.startNonterminal(\"VersionDecl\", e0);\n    shift(274);                     // 'xquery'\n    lookahead1W(116);               // S^WS | '(:' | 'encoding' | 'version'\n    switch (l1)\n    {\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(263);                   // 'version'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      lookahead1W(109);             // S^WS | '(:' | ';' | 'encoding'\n      if (l1 == 125)                // 'encoding'\n      {\n        shift(125);                 // 'encoding'\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n    }\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"VersionDecl\", e0);\n  }\n\n  function parse_LibraryModule()\n  {\n    eventHandler.startNonterminal(\"LibraryModule\", e0);\n    parse_ModuleDecl();\n    lookahead1W(138);               // S^WS | EOF | '(:' | 'declare' | 'import'\n    whitespace();\n    parse_Prolog();\n    eventHandler.endNonterminal(\"LibraryModule\", e0);\n  }\n\n  function parse_ModuleDecl()\n  {\n    eventHandler.startNonterminal(\"ModuleDecl\", e0);\n    shift(182);                     // 'module'\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(248);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(29);                // S^WS | '(:' | '='\n    shift(60);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"ModuleDecl\", e0);\n  }\n\n  function parse_Prolog()\n  {\n    eventHandler.startNonterminal(\"Prolog\", e0);\n    for (;;)\n    {\n      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(213);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 153:                     // 'import'\n        lookahead2W(201);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 42604               // 'declare' 'base-uri'\n       && lk != 43628               // 'declare' 'boundary-space'\n       && lk != 50284               // 'declare' 'construction'\n       && lk != 53356               // 'declare' 'copy-namespaces'\n       && lk != 54380               // 'declare' 'decimal-format'\n       && lk != 55916               // 'declare' 'default'\n       && lk != 72300               // 'declare' 'ft-option'\n       && lk != 93337               // 'import' 'module'\n       && lk != 94316               // 'declare' 'namespace'\n       && lk != 104044              // 'declare' 'ordering'\n       && lk != 113772              // 'declare' 'revalidation'\n       && lk != 115353)             // 'import' 'schema'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(178);           // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 55916)              // 'declare' 'default'\n      {\n        lk = memoized(0, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_DefaultNamespaceDecl();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(0, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case -1:\n        whitespace();\n        parse_DefaultNamespaceDecl();\n        break;\n      case 94316:                   // 'declare' 'namespace'\n        whitespace();\n        parse_NamespaceDecl();\n        break;\n      case 153:                     // 'import'\n        whitespace();\n        parse_Import();\n        break;\n      case 72300:                   // 'declare' 'ft-option'\n        whitespace();\n        parse_FTOptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_Setter();\n      }\n      lookahead1W(28);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    for (;;)\n    {\n      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 16492               // 'declare' '%'\n       && lk != 48748               // 'declare' 'collection'\n       && lk != 51820               // 'declare' 'context'\n       && lk != 74348               // 'declare' 'function'\n       && lk != 79468               // 'declare' 'index'\n       && lk != 82540               // 'declare' 'integrity'\n       && lk != 101996              // 'declare' 'option'\n       && lk != 131692              // 'declare' 'updating'\n       && lk != 134252)             // 'declare' 'variable'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(175);           // S^WS | '%' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n        break;\n      default:\n        lk = l1;\n      }\n      switch (lk)\n      {\n      case 51820:                   // 'declare' 'context'\n        whitespace();\n        parse_ContextItemDecl();\n        break;\n      case 101996:                  // 'declare' 'option'\n        whitespace();\n        parse_OptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_AnnotatedDecl();\n      }\n      lookahead1W(28);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    eventHandler.endNonterminal(\"Prolog\", e0);\n  }\n\n  function parse_Separator()\n  {\n    eventHandler.startNonterminal(\"Separator\", e0);\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"Separator\", e0);\n  }\n\n  function parse_Setter()\n  {\n    eventHandler.startNonterminal(\"Setter\", e0);\n    switch (l1)\n    {\n    case 108:                       // 'declare'\n      lookahead2W(172);             // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 55916)                // 'declare' 'default'\n    {\n      lk = memoized(1, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_DefaultCollationDecl();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_EmptyOrderDecl();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -9;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(1, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 43628:                     // 'declare' 'boundary-space'\n      parse_BoundarySpaceDecl();\n      break;\n    case -2:\n      parse_DefaultCollationDecl();\n      break;\n    case 42604:                     // 'declare' 'base-uri'\n      parse_BaseURIDecl();\n      break;\n    case 50284:                     // 'declare' 'construction'\n      parse_ConstructionDecl();\n      break;\n    case 104044:                    // 'declare' 'ordering'\n      parse_OrderingModeDecl();\n      break;\n    case -6:\n      parse_EmptyOrderDecl();\n      break;\n    case 113772:                    // 'declare' 'revalidation'\n      parse_RevalidationDecl();\n      break;\n    case 53356:                     // 'declare' 'copy-namespaces'\n      parse_CopyNamespacesDecl();\n      break;\n    default:\n      parse_DecimalFormatDecl();\n    }\n    eventHandler.endNonterminal(\"Setter\", e0);\n  }\n\n  function parse_BoundarySpaceDecl()\n  {\n    eventHandler.startNonterminal(\"BoundarySpaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(33);                // S^WS | '(:' | 'boundary-space'\n    shift(85);                      // 'boundary-space'\n    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 214:                       // 'preserve'\n      shift(214);                   // 'preserve'\n      break;\n    default:\n      shift(241);                   // 'strip'\n    }\n    eventHandler.endNonterminal(\"BoundarySpaceDecl\", e0);\n  }\n\n  function parse_DefaultCollationDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultCollationDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(38);                // S^WS | '(:' | 'collation'\n    shift(94);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultCollationDecl\", e0);\n  }\n\n  function try_DefaultCollationDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(38);                // S^WS | '(:' | 'collation'\n    shiftT(94);                     // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_BaseURIDecl()\n  {\n    eventHandler.startNonterminal(\"BaseURIDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(32);                // S^WS | '(:' | 'base-uri'\n    shift(83);                      // 'base-uri'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"BaseURIDecl\", e0);\n  }\n\n  function parse_ConstructionDecl()\n  {\n    eventHandler.startNonterminal(\"ConstructionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(41);                // S^WS | '(:' | 'construction'\n    shift(98);                      // 'construction'\n    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 241:                       // 'strip'\n      shift(241);                   // 'strip'\n      break;\n    default:\n      shift(214);                   // 'preserve'\n    }\n    eventHandler.endNonterminal(\"ConstructionDecl\", e0);\n  }\n\n  function parse_OrderingModeDecl()\n  {\n    eventHandler.startNonterminal(\"OrderingModeDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(68);                // S^WS | '(:' | 'ordering'\n    shift(203);                     // 'ordering'\n    lookahead1W(131);               // S^WS | '(:' | 'ordered' | 'unordered'\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    default:\n      shift(256);                   // 'unordered'\n    }\n    eventHandler.endNonterminal(\"OrderingModeDecl\", e0);\n  }\n\n  function parse_EmptyOrderDecl()\n  {\n    eventHandler.startNonterminal(\"EmptyOrderDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(67);                // S^WS | '(:' | 'order'\n    shift(201);                     // 'order'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shift(123);                     // 'empty'\n    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 147:                       // 'greatest'\n      shift(147);                   // 'greatest'\n      break;\n    default:\n      shift(173);                   // 'least'\n    }\n    eventHandler.endNonterminal(\"EmptyOrderDecl\", e0);\n  }\n\n  function try_EmptyOrderDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(67);                // S^WS | '(:' | 'order'\n    shiftT(201);                    // 'order'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shiftT(123);                    // 'empty'\n    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 147:                       // 'greatest'\n      shiftT(147);                  // 'greatest'\n      break;\n    default:\n      shiftT(173);                  // 'least'\n    }\n  }\n\n  function parse_CopyNamespacesDecl()\n  {\n    eventHandler.startNonterminal(\"CopyNamespacesDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(44);                // S^WS | '(:' | 'copy-namespaces'\n    shift(104);                     // 'copy-namespaces'\n    lookahead1W(128);               // S^WS | '(:' | 'no-preserve' | 'preserve'\n    whitespace();\n    parse_PreserveMode();\n    lookahead1W(25);                // S^WS | '(:' | ','\n    shift(41);                      // ','\n    lookahead1W(123);               // S^WS | '(:' | 'inherit' | 'no-inherit'\n    whitespace();\n    parse_InheritMode();\n    eventHandler.endNonterminal(\"CopyNamespacesDecl\", e0);\n  }\n\n  function parse_PreserveMode()\n  {\n    eventHandler.startNonterminal(\"PreserveMode\", e0);\n    switch (l1)\n    {\n    case 214:                       // 'preserve'\n      shift(214);                   // 'preserve'\n      break;\n    default:\n      shift(190);                   // 'no-preserve'\n    }\n    eventHandler.endNonterminal(\"PreserveMode\", e0);\n  }\n\n  function parse_InheritMode()\n  {\n    eventHandler.startNonterminal(\"InheritMode\", e0);\n    switch (l1)\n    {\n    case 157:                       // 'inherit'\n      shift(157);                   // 'inherit'\n      break;\n    default:\n      shift(189);                   // 'no-inherit'\n    }\n    eventHandler.endNonterminal(\"InheritMode\", e0);\n  }\n\n  function parse_DecimalFormatDecl()\n  {\n    eventHandler.startNonterminal(\"DecimalFormatDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(114);               // S^WS | '(:' | 'decimal-format' | 'default'\n    switch (l1)\n    {\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_EQName();\n      break;\n    default:\n      shift(109);                   // 'default'\n      lookahead1W(45);              // S^WS | '(:' | 'decimal-format'\n      shift(106);                   // 'decimal-format'\n    }\n    for (;;)\n    {\n      lookahead1W(180);             // S^WS | '(:' | ';' | 'NaN' | 'decimal-separator' | 'digit' |\n      if (l1 == 53)                 // ';'\n      {\n        break;\n      }\n      whitespace();\n      parse_DFPropertyName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    eventHandler.endNonterminal(\"DecimalFormatDecl\", e0);\n  }\n\n  function parse_DFPropertyName()\n  {\n    eventHandler.startNonterminal(\"DFPropertyName\", e0);\n    switch (l1)\n    {\n    case 107:                       // 'decimal-separator'\n      shift(107);                   // 'decimal-separator'\n      break;\n    case 149:                       // 'grouping-separator'\n      shift(149);                   // 'grouping-separator'\n      break;\n    case 156:                       // 'infinity'\n      shift(156);                   // 'infinity'\n      break;\n    case 179:                       // 'minus-sign'\n      shift(179);                   // 'minus-sign'\n      break;\n    case 67:                        // 'NaN'\n      shift(67);                    // 'NaN'\n      break;\n    case 209:                       // 'percent'\n      shift(209);                   // 'percent'\n      break;\n    case 208:                       // 'per-mille'\n      shift(208);                   // 'per-mille'\n      break;\n    case 275:                       // 'zero-digit'\n      shift(275);                   // 'zero-digit'\n      break;\n    case 116:                       // 'digit'\n      shift(116);                   // 'digit'\n      break;\n    default:\n      shift(207);                   // 'pattern-separator'\n    }\n    eventHandler.endNonterminal(\"DFPropertyName\", e0);\n  }\n\n  function parse_Import()\n  {\n    eventHandler.startNonterminal(\"Import\", e0);\n    switch (l1)\n    {\n    case 153:                       // 'import'\n      lookahead2W(126);             // S^WS | '(:' | 'module' | 'schema'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 115353:                    // 'import' 'schema'\n      parse_SchemaImport();\n      break;\n    default:\n      parse_ModuleImport();\n    }\n    eventHandler.endNonterminal(\"Import\", e0);\n  }\n\n  function parse_SchemaImport()\n  {\n    eventHandler.startNonterminal(\"SchemaImport\", e0);\n    shift(153);                     // 'import'\n    lookahead1W(73);                // S^WS | '(:' | 'schema'\n    shift(225);                     // 'schema'\n    lookahead1W(137);               // URILiteral | S^WS | '(:' | 'default' | 'namespace'\n    if (l1 != 7)                    // URILiteral\n    {\n      whitespace();\n      parse_SchemaPrefix();\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 81)                   // 'at'\n    {\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(103);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"SchemaImport\", e0);\n  }\n\n  function parse_SchemaPrefix()\n  {\n    eventHandler.startNonterminal(\"SchemaPrefix\", e0);\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      lookahead1W(248);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n      break;\n    default:\n      shift(109);                   // 'default'\n      lookahead1W(47);              // S^WS | '(:' | 'element'\n      shift(121);                   // 'element'\n      lookahead1W(61);              // S^WS | '(:' | 'namespace'\n      shift(184);                   // 'namespace'\n    }\n    eventHandler.endNonterminal(\"SchemaPrefix\", e0);\n  }\n\n  function parse_ModuleImport()\n  {\n    eventHandler.startNonterminal(\"ModuleImport\", e0);\n    shift(153);                     // 'import'\n    lookahead1W(60);                // S^WS | '(:' | 'module'\n    shift(182);                     // 'module'\n    lookahead1W(90);                // URILiteral | S^WS | '(:' | 'namespace'\n    if (l1 == 184)                  // 'namespace'\n    {\n      shift(184);                   // 'namespace'\n      lookahead1W(248);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 81)                   // 'at'\n    {\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(103);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"ModuleImport\", e0);\n  }\n\n  function parse_NamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"NamespaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(248);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(29);                // S^WS | '(:' | '='\n    shift(60);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"NamespaceDecl\", e0);\n  }\n\n  function parse_DefaultNamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultNamespaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    default:\n      shift(145);                   // 'function'\n    }\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultNamespaceDecl\", e0);\n  }\n\n  function try_DefaultNamespaceDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    default:\n      shiftT(145);                  // 'function'\n    }\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shiftT(184);                    // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_FTOptionDecl()\n  {\n    eventHandler.startNonterminal(\"FTOptionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(52);                // S^WS | '(:' | 'ft-option'\n    shift(141);                     // 'ft-option'\n    lookahead1W(81);                // S^WS | '(:' | 'using'\n    whitespace();\n    parse_FTMatchOptions();\n    eventHandler.endNonterminal(\"FTOptionDecl\", e0);\n  }\n\n  function parse_AnnotatedDecl()\n  {\n    eventHandler.startNonterminal(\"AnnotatedDecl\", e0);\n    shift(108);                     // 'declare'\n    for (;;)\n    {\n      lookahead1W(170);             // S^WS | '%' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n      if (l1 != 32                  // '%'\n       && l1 != 257)                // 'updating'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 257:                     // 'updating'\n        whitespace();\n        parse_CompatibilityAnnotation();\n        break;\n      default:\n        whitespace();\n        parse_Annotation();\n      }\n    }\n    switch (l1)\n    {\n    case 262:                       // 'variable'\n      whitespace();\n      parse_VarDecl();\n      break;\n    case 145:                       // 'function'\n      whitespace();\n      parse_FunctionDecl();\n      break;\n    case 95:                        // 'collection'\n      whitespace();\n      parse_CollectionDecl();\n      break;\n    case 155:                       // 'index'\n      whitespace();\n      parse_IndexDecl();\n      break;\n    default:\n      whitespace();\n      parse_ICDecl();\n    }\n    eventHandler.endNonterminal(\"AnnotatedDecl\", e0);\n  }\n\n  function parse_CompatibilityAnnotation()\n  {\n    eventHandler.startNonterminal(\"CompatibilityAnnotation\", e0);\n    shift(257);                     // 'updating'\n    eventHandler.endNonterminal(\"CompatibilityAnnotation\", e0);\n  }\n\n  function parse_Annotation()\n  {\n    eventHandler.startNonterminal(\"Annotation\", e0);\n    shift(32);                      // '%'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 34)                   // '('\n    {\n      shift(34);                    // '('\n      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n      whitespace();\n      parse_Literal();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n        whitespace();\n        parse_Literal();\n      }\n      shift(37);                    // ')'\n    }\n    eventHandler.endNonterminal(\"Annotation\", e0);\n  }\n\n  function try_Annotation()\n  {\n    shiftT(32);                     // '%'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 34)                   // '('\n    {\n      shiftT(34);                   // '('\n      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n      try_Literal();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n        try_Literal();\n      }\n      shiftT(37);                   // ')'\n    }\n  }\n\n  function parse_VarDecl()\n  {\n    eventHandler.startNonterminal(\"VarDecl\", e0);\n    shift(262);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 52:                        // ':='\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(133);                   // 'external'\n      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"VarDecl\", e0);\n  }\n\n  function parse_VarValue()\n  {\n    eventHandler.startNonterminal(\"VarValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarValue\", e0);\n  }\n\n  function parse_VarDefaultValue()\n  {\n    eventHandler.startNonterminal(\"VarDefaultValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarDefaultValue\", e0);\n  }\n\n  function parse_ContextItemDecl()\n  {\n    eventHandler.startNonterminal(\"ContextItemDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(43);                // S^WS | '(:' | 'context'\n    shift(101);                     // 'context'\n    lookahead1W(55);                // S^WS | '(:' | 'item'\n    shift(165);                     // 'item'\n    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 79)                   // 'as'\n    {\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_ItemType();\n    }\n    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 52:                        // ':='\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(133);                   // 'external'\n      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"ContextItemDecl\", e0);\n  }\n\n  function parse_ParamList()\n  {\n    eventHandler.startNonterminal(\"ParamList\", e0);\n    parse_Param();\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_Param();\n    }\n    eventHandler.endNonterminal(\"ParamList\", e0);\n  }\n\n  function try_ParamList()\n  {\n    try_Param();\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_Param();\n    }\n  }\n\n  function parse_Param()\n  {\n    eventHandler.startNonterminal(\"Param\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    eventHandler.endNonterminal(\"Param\", e0);\n  }\n\n  function try_Param()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n  }\n\n  function parse_FunctionBody()\n  {\n    eventHandler.startNonterminal(\"FunctionBody\", e0);\n    parse_EnclosedExpr();\n    eventHandler.endNonterminal(\"FunctionBody\", e0);\n  }\n\n  function try_FunctionBody()\n  {\n    try_EnclosedExpr();\n  }\n\n  function parse_EnclosedExpr()\n  {\n    eventHandler.startNonterminal(\"EnclosedExpr\", e0);\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"EnclosedExpr\", e0);\n  }\n\n  function try_EnclosedExpr()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_OptionDecl()\n  {\n    eventHandler.startNonterminal(\"OptionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(66);                // S^WS | '(:' | 'option'\n    shift(199);                     // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"OptionDecl\", e0);\n  }\n\n  function parse_Expr()\n  {\n    eventHandler.startNonterminal(\"Expr\", e0);\n    parse_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Expr\", e0);\n  }\n\n  function try_Expr()\n  {\n    try_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_FLWORExpr()\n  {\n    eventHandler.startNonterminal(\"FLWORExpr\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnClause();\n    eventHandler.endNonterminal(\"FLWORExpr\", e0);\n  }\n\n  function try_FLWORExpr()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnClause();\n  }\n\n  function parse_InitialClause()\n  {\n    eventHandler.startNonterminal(\"InitialClause\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n      parse_ForClause();\n      break;\n    case 174:                       // 'let'\n      parse_LetClause();\n      break;\n    default:\n      parse_WindowClause();\n    }\n    eventHandler.endNonterminal(\"InitialClause\", e0);\n  }\n\n  function try_InitialClause()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n      try_ForClause();\n      break;\n    case 174:                       // 'let'\n      try_LetClause();\n      break;\n    default:\n      try_WindowClause();\n    }\n  }\n\n  function parse_IntermediateClause()\n  {\n    eventHandler.startNonterminal(\"IntermediateClause\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n    case 174:                       // 'let'\n      parse_InitialClause();\n      break;\n    case 266:                       // 'where'\n      parse_WhereClause();\n      break;\n    case 148:                       // 'group'\n      parse_GroupByClause();\n      break;\n    case 105:                       // 'count'\n      parse_CountClause();\n      break;\n    default:\n      parse_OrderByClause();\n    }\n    eventHandler.endNonterminal(\"IntermediateClause\", e0);\n  }\n\n  function try_IntermediateClause()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n    case 174:                       // 'let'\n      try_InitialClause();\n      break;\n    case 266:                       // 'where'\n      try_WhereClause();\n      break;\n    case 148:                       // 'group'\n      try_GroupByClause();\n      break;\n    case 105:                       // 'count'\n      try_CountClause();\n      break;\n    default:\n      try_OrderByClause();\n    }\n  }\n\n  function parse_ForClause()\n  {\n    eventHandler.startNonterminal(\"ForClause\", e0);\n    shift(137);                     // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_ForBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_ForBinding();\n    }\n    eventHandler.endNonterminal(\"ForClause\", e0);\n  }\n\n  function try_ForClause()\n  {\n    shiftT(137);                    // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_ForBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_ForBinding();\n    }\n  }\n\n  function parse_ForBinding()\n  {\n    eventHandler.startNonterminal(\"ForBinding\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 72)                   // 'allowing'\n    {\n      whitespace();\n      parse_AllowingEmpty();\n    }\n    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 81)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 228)                  // 'score'\n    {\n      whitespace();\n      parse_FTScoreVar();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ForBinding\", e0);\n  }\n\n  function try_ForBinding()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 72)                   // 'allowing'\n    {\n      try_AllowingEmpty();\n    }\n    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 81)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 228)                  // 'score'\n    {\n      try_FTScoreVar();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_AllowingEmpty()\n  {\n    eventHandler.startNonterminal(\"AllowingEmpty\", e0);\n    shift(72);                      // 'allowing'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shift(123);                     // 'empty'\n    eventHandler.endNonterminal(\"AllowingEmpty\", e0);\n  }\n\n  function try_AllowingEmpty()\n  {\n    shiftT(72);                     // 'allowing'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shiftT(123);                    // 'empty'\n  }\n\n  function parse_PositionalVar()\n  {\n    eventHandler.startNonterminal(\"PositionalVar\", e0);\n    shift(81);                      // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"PositionalVar\", e0);\n  }\n\n  function try_PositionalVar()\n  {\n    shiftT(81);                     // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_FTScoreVar()\n  {\n    eventHandler.startNonterminal(\"FTScoreVar\", e0);\n    shift(228);                     // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"FTScoreVar\", e0);\n  }\n\n  function try_FTScoreVar()\n  {\n    shiftT(228);                    // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_LetClause()\n  {\n    eventHandler.startNonterminal(\"LetClause\", e0);\n    shift(174);                     // 'let'\n    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'\n    whitespace();\n    parse_LetBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'\n      whitespace();\n      parse_LetBinding();\n    }\n    eventHandler.endNonterminal(\"LetClause\", e0);\n  }\n\n  function try_LetClause()\n  {\n    shiftT(174);                    // 'let'\n    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'\n    try_LetBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'\n      try_LetBinding();\n    }\n  }\n\n  function parse_LetBinding()\n  {\n    eventHandler.startNonterminal(\"LetBinding\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      break;\n    default:\n      parse_FTScoreVar();\n    }\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"LetBinding\", e0);\n  }\n\n  function try_LetBinding()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      break;\n    default:\n      try_FTScoreVar();\n    }\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowClause()\n  {\n    eventHandler.startNonterminal(\"WindowClause\", e0);\n    shift(137);                     // 'for'\n    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 251:                       // 'tumbling'\n      whitespace();\n      parse_TumblingWindowClause();\n      break;\n    default:\n      whitespace();\n      parse_SlidingWindowClause();\n    }\n    eventHandler.endNonterminal(\"WindowClause\", e0);\n  }\n\n  function try_WindowClause()\n  {\n    shiftT(137);                    // 'for'\n    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 251:                       // 'tumbling'\n      try_TumblingWindowClause();\n      break;\n    default:\n      try_SlidingWindowClause();\n    }\n  }\n\n  function parse_TumblingWindowClause()\n  {\n    eventHandler.startNonterminal(\"TumblingWindowClause\", e0);\n    shift(251);                     // 'tumbling'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shift(269);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    if (l1 == 126                   // 'end'\n     || l1 == 198)                  // 'only'\n    {\n      whitespace();\n      parse_WindowEndCondition();\n    }\n    eventHandler.endNonterminal(\"TumblingWindowClause\", e0);\n  }\n\n  function try_TumblingWindowClause()\n  {\n    shiftT(251);                    // 'tumbling'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shiftT(269);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    if (l1 == 126                   // 'end'\n     || l1 == 198)                  // 'only'\n    {\n      try_WindowEndCondition();\n    }\n  }\n\n  function parse_SlidingWindowClause()\n  {\n    eventHandler.startNonterminal(\"SlidingWindowClause\", e0);\n    shift(234);                     // 'sliding'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shift(269);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    whitespace();\n    parse_WindowEndCondition();\n    eventHandler.endNonterminal(\"SlidingWindowClause\", e0);\n  }\n\n  function try_SlidingWindowClause()\n  {\n    shiftT(234);                    // 'sliding'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shiftT(269);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    try_WindowEndCondition();\n  }\n\n  function parse_WindowStartCondition()\n  {\n    eventHandler.startNonterminal(\"WindowStartCondition\", e0);\n    shift(237);                     // 'start'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shift(265);                     // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowStartCondition\", e0);\n  }\n\n  function try_WindowStartCondition()\n  {\n    shiftT(237);                    // 'start'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shiftT(265);                    // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowEndCondition()\n  {\n    eventHandler.startNonterminal(\"WindowEndCondition\", e0);\n    if (l1 == 198)                  // 'only'\n    {\n      shift(198);                   // 'only'\n    }\n    lookahead1W(50);                // S^WS | '(:' | 'end'\n    shift(126);                     // 'end'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shift(265);                     // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowEndCondition\", e0);\n  }\n\n  function try_WindowEndCondition()\n  {\n    if (l1 == 198)                  // 'only'\n    {\n      shiftT(198);                  // 'only'\n    }\n    lookahead1W(50);                // S^WS | '(:' | 'end'\n    shiftT(126);                    // 'end'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shiftT(265);                    // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowVars()\n  {\n    eventHandler.startNonterminal(\"WindowVars\", e0);\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CurrentItem();\n    }\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 81)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 215)                  // 'previous'\n    {\n      shift(215);                   // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_PreviousItem();\n    }\n    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 187)                  // 'next'\n    {\n      shift(187);                   // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NextItem();\n    }\n    eventHandler.endNonterminal(\"WindowVars\", e0);\n  }\n\n  function try_WindowVars()\n  {\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CurrentItem();\n    }\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 81)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 215)                  // 'previous'\n    {\n      shiftT(215);                  // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_PreviousItem();\n    }\n    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 187)                  // 'next'\n    {\n      shiftT(187);                  // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NextItem();\n    }\n  }\n\n  function parse_CurrentItem()\n  {\n    eventHandler.startNonterminal(\"CurrentItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"CurrentItem\", e0);\n  }\n\n  function try_CurrentItem()\n  {\n    try_EQName();\n  }\n\n  function parse_PreviousItem()\n  {\n    eventHandler.startNonterminal(\"PreviousItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"PreviousItem\", e0);\n  }\n\n  function try_PreviousItem()\n  {\n    try_EQName();\n  }\n\n  function parse_NextItem()\n  {\n    eventHandler.startNonterminal(\"NextItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"NextItem\", e0);\n  }\n\n  function try_NextItem()\n  {\n    try_EQName();\n  }\n\n  function parse_CountClause()\n  {\n    eventHandler.startNonterminal(\"CountClause\", e0);\n    shift(105);                     // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"CountClause\", e0);\n  }\n\n  function try_CountClause()\n  {\n    shiftT(105);                    // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_WhereClause()\n  {\n    eventHandler.startNonterminal(\"WhereClause\", e0);\n    shift(266);                     // 'where'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WhereClause\", e0);\n  }\n\n  function try_WhereClause()\n  {\n    shiftT(266);                    // 'where'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_GroupByClause()\n  {\n    eventHandler.startNonterminal(\"GroupByClause\", e0);\n    shift(148);                     // 'group'\n    lookahead1W(34);                // S^WS | '(:' | 'by'\n    shift(87);                      // 'by'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_GroupingSpecList();\n    eventHandler.endNonterminal(\"GroupByClause\", e0);\n  }\n\n  function try_GroupByClause()\n  {\n    shiftT(148);                    // 'group'\n    lookahead1W(34);                // S^WS | '(:' | 'by'\n    shiftT(87);                     // 'by'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_GroupingSpecList();\n  }\n\n  function parse_GroupingSpecList()\n  {\n    eventHandler.startNonterminal(\"GroupingSpecList\", e0);\n    parse_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_GroupingSpec();\n    }\n    eventHandler.endNonterminal(\"GroupingSpecList\", e0);\n  }\n\n  function try_GroupingSpecList()\n  {\n    try_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_GroupingSpec();\n    }\n  }\n\n  function parse_GroupingSpec()\n  {\n    eventHandler.startNonterminal(\"GroupingSpec\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 35871                 // '$' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 140319)               // '$' 'xquery'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(182);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 52              // ':='\n           || l1 == 79)             // 'as'\n          {\n            if (l1 == 79)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(27);        // S^WS | '(:' | ':='\n            shiftT(52);             // ':='\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 94)             // 'collation'\n          {\n            shiftT(94);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(2, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      parse_GroupingVariable();\n      lookahead1W(182);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 52                  // ':='\n       || l1 == 79)                 // 'as'\n      {\n        if (l1 == 79)               // 'as'\n        {\n          whitespace();\n          parse_TypeDeclaration();\n        }\n        lookahead1W(27);            // S^WS | '(:' | ':='\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      if (l1 == 94)                 // 'collation'\n      {\n        shift(94);                  // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"GroupingSpec\", e0);\n  }\n\n  function try_GroupingSpec()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 35871                 // '$' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 140319)               // '$' 'xquery'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(182);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 52              // ':='\n           || l1 == 79)             // 'as'\n          {\n            if (l1 == 79)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(27);        // S^WS | '(:' | ':='\n            shiftT(52);             // ':='\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 94)             // 'collation'\n          {\n            shiftT(94);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          memoize(2, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(2, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_GroupingVariable();\n      lookahead1W(182);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 52                  // ':='\n       || l1 == 79)                 // 'as'\n      {\n        if (l1 == 79)               // 'as'\n        {\n          try_TypeDeclaration();\n        }\n        lookahead1W(27);            // S^WS | '(:' | ':='\n        shiftT(52);                 // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n      }\n      if (l1 == 94)                 // 'collation'\n      {\n        shiftT(94);                 // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shiftT(7);                  // URILiteral\n      }\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_GroupingVariable()\n  {\n    eventHandler.startNonterminal(\"GroupingVariable\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"GroupingVariable\", e0);\n  }\n\n  function try_GroupingVariable()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_OrderByClause()\n  {\n    eventHandler.startNonterminal(\"OrderByClause\", e0);\n    switch (l1)\n    {\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shift(87);                    // 'by'\n      break;\n    default:\n      shift(236);                   // 'stable'\n      lookahead1W(67);              // S^WS | '(:' | 'order'\n      shift(201);                   // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shift(87);                    // 'by'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_OrderSpecList();\n    eventHandler.endNonterminal(\"OrderByClause\", e0);\n  }\n\n  function try_OrderByClause()\n  {\n    switch (l1)\n    {\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shiftT(87);                   // 'by'\n      break;\n    default:\n      shiftT(236);                  // 'stable'\n      lookahead1W(67);              // S^WS | '(:' | 'order'\n      shiftT(201);                  // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shiftT(87);                   // 'by'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_OrderSpecList();\n  }\n\n  function parse_OrderSpecList()\n  {\n    eventHandler.startNonterminal(\"OrderSpecList\", e0);\n    parse_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_OrderSpec();\n    }\n    eventHandler.endNonterminal(\"OrderSpecList\", e0);\n  }\n\n  function try_OrderSpecList()\n  {\n    try_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_OrderSpec();\n    }\n  }\n\n  function parse_OrderSpec()\n  {\n    eventHandler.startNonterminal(\"OrderSpec\", e0);\n    parse_ExprSingle();\n    whitespace();\n    parse_OrderModifier();\n    eventHandler.endNonterminal(\"OrderSpec\", e0);\n  }\n\n  function try_OrderSpec()\n  {\n    try_ExprSingle();\n    try_OrderModifier();\n  }\n\n  function parse_OrderModifier()\n  {\n    eventHandler.startNonterminal(\"OrderModifier\", e0);\n    if (l1 == 80                    // 'ascending'\n     || l1 == 113)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 80:                      // 'ascending'\n        shift(80);                  // 'ascending'\n        break;\n      default:\n        shift(113);                 // 'descending'\n      }\n    }\n    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 123)                  // 'empty'\n    {\n      shift(123);                   // 'empty'\n      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 147:                     // 'greatest'\n        shift(147);                 // 'greatest'\n        break;\n      default:\n        shift(173);                 // 'least'\n      }\n    }\n    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 94)                   // 'collation'\n    {\n      shift(94);                    // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n    }\n    eventHandler.endNonterminal(\"OrderModifier\", e0);\n  }\n\n  function try_OrderModifier()\n  {\n    if (l1 == 80                    // 'ascending'\n     || l1 == 113)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 80:                      // 'ascending'\n        shiftT(80);                 // 'ascending'\n        break;\n      default:\n        shiftT(113);                // 'descending'\n      }\n    }\n    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 123)                  // 'empty'\n    {\n      shiftT(123);                  // 'empty'\n      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 147:                     // 'greatest'\n        shiftT(147);                // 'greatest'\n        break;\n      default:\n        shiftT(173);                // 'least'\n      }\n    }\n    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 94)                   // 'collation'\n    {\n      shiftT(94);                   // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n    }\n  }\n\n  function parse_ReturnClause()\n  {\n    eventHandler.startNonterminal(\"ReturnClause\", e0);\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReturnClause\", e0);\n  }\n\n  function try_ReturnClause()\n  {\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedExpr()\n  {\n    eventHandler.startNonterminal(\"QuantifiedExpr\", e0);\n    switch (l1)\n    {\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    default:\n      shift(129);                   // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_QuantifiedVarDecl();\n    }\n    shift(224);                     // 'satisfies'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedExpr\", e0);\n  }\n\n  function try_QuantifiedExpr()\n  {\n    switch (l1)\n    {\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    default:\n      shiftT(129);                  // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_QuantifiedVarDecl();\n    }\n    shiftT(224);                    // 'satisfies'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedVarDecl()\n  {\n    eventHandler.startNonterminal(\"QuantifiedVarDecl\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedVarDecl\", e0);\n  }\n\n  function try_QuantifiedVarDecl()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchExpr()\n  {\n    eventHandler.startNonterminal(\"SwitchExpr\", e0);\n    shift(243);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchExpr\", e0);\n  }\n\n  function try_SwitchExpr()\n  {\n    shiftT(243);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_SwitchCaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseClause()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseClause\", e0);\n    for (;;)\n    {\n      shift(88);                    // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseClause\", e0);\n  }\n\n  function try_SwitchCaseClause()\n  {\n    for (;;)\n    {\n      shiftT(88);                   // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseOperand()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseOperand\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseOperand\", e0);\n  }\n\n  function try_SwitchCaseOperand()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TypeswitchExpr()\n  {\n    eventHandler.startNonterminal(\"TypeswitchExpr\", e0);\n    shift(253);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TypeswitchExpr\", e0);\n  }\n\n  function try_TypeswitchExpr()\n  {\n    shiftT(253);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_CaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CaseClause()\n  {\n    eventHandler.startNonterminal(\"CaseClause\", e0);\n    shift(88);                      // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceTypeUnion();\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"CaseClause\", e0);\n  }\n\n  function try_CaseClause()\n  {\n    shiftT(88);                     // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceTypeUnion();\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SequenceTypeUnion()\n  {\n    eventHandler.startNonterminal(\"SequenceTypeUnion\", e0);\n    parse_SequenceType();\n    for (;;)\n    {\n      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shift(279);                   // '|'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"SequenceTypeUnion\", e0);\n  }\n\n  function try_SequenceTypeUnion()\n  {\n    try_SequenceType();\n    for (;;)\n    {\n      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shiftT(279);                  // '|'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_IfExpr()\n  {\n    eventHandler.startNonterminal(\"IfExpr\", e0);\n    shift(152);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shift(245);                     // 'then'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(122);                     // 'else'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"IfExpr\", e0);\n  }\n\n  function try_IfExpr()\n  {\n    shiftT(152);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shiftT(245);                    // 'then'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(122);                    // 'else'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TryCatchExpr()\n  {\n    eventHandler.startNonterminal(\"TryCatchExpr\", e0);\n    parse_TryClause();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      whitespace();\n      parse_CatchClause();\n      lookahead1W(183);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 91)                 // 'catch'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchExpr\", e0);\n  }\n\n  function try_TryCatchExpr()\n  {\n    try_TryClause();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      try_CatchClause();\n      lookahead1W(183);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 91)                 // 'catch'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TryClause()\n  {\n    eventHandler.startNonterminal(\"TryClause\", e0);\n    shift(250);                     // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TryTargetExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"TryClause\", e0);\n  }\n\n  function try_TryClause()\n  {\n    shiftT(250);                    // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TryTargetExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_TryTargetExpr()\n  {\n    eventHandler.startNonterminal(\"TryTargetExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"TryTargetExpr\", e0);\n  }\n\n  function try_TryTargetExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_CatchClause()\n  {\n    eventHandler.startNonterminal(\"CatchClause\", e0);\n    shift(91);                      // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_CatchErrorList();\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CatchClause\", e0);\n  }\n\n  function try_CatchClause()\n  {\n    shiftT(91);                     // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_CatchErrorList();\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_CatchErrorList()\n  {\n    eventHandler.startNonterminal(\"CatchErrorList\", e0);\n    parse_NameTest();\n    for (;;)\n    {\n      lookahead1W(136);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shift(279);                   // '|'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"CatchErrorList\", e0);\n  }\n\n  function try_CatchErrorList()\n  {\n    try_NameTest();\n    for (;;)\n    {\n      lookahead1W(136);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shiftT(279);                  // '|'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NameTest();\n    }\n  }\n\n  function parse_OrExpr()\n  {\n    eventHandler.startNonterminal(\"OrExpr\", e0);\n    parse_AndExpr();\n    for (;;)\n    {\n      if (l1 != 200)                // 'or'\n      {\n        break;\n      }\n      shift(200);                   // 'or'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AndExpr();\n    }\n    eventHandler.endNonterminal(\"OrExpr\", e0);\n  }\n\n  function try_OrExpr()\n  {\n    try_AndExpr();\n    for (;;)\n    {\n      if (l1 != 200)                // 'or'\n      {\n        break;\n      }\n      shiftT(200);                  // 'or'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AndExpr();\n    }\n  }\n\n  function parse_AndExpr()\n  {\n    eventHandler.startNonterminal(\"AndExpr\", e0);\n    parse_ComparisonExpr();\n    for (;;)\n    {\n      if (l1 != 75)                 // 'and'\n      {\n        break;\n      }\n      shift(75);                    // 'and'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ComparisonExpr();\n    }\n    eventHandler.endNonterminal(\"AndExpr\", e0);\n  }\n\n  function try_AndExpr()\n  {\n    try_ComparisonExpr();\n    for (;;)\n    {\n      if (l1 != 75)                 // 'and'\n      {\n        break;\n      }\n      shiftT(75);                   // 'and'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ComparisonExpr();\n    }\n  }\n\n  function parse_ComparisonExpr()\n  {\n    eventHandler.startNonterminal(\"ComparisonExpr\", e0);\n    parse_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 54                    // '<'\n     || l1 == 57                    // '<<'\n     || l1 == 58                    // '<='\n     || l1 == 60                    // '='\n     || l1 == 61                    // '>'\n     || l1 == 62                    // '>='\n     || l1 == 63                    // '>>'\n     || l1 == 128                   // 'eq'\n     || l1 == 146                   // 'ge'\n     || l1 == 150                   // 'gt'\n     || l1 == 164                   // 'is'\n     || l1 == 172                   // 'le'\n     || l1 == 178                   // 'lt'\n     || l1 == 186)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 128:                     // 'eq'\n      case 146:                     // 'ge'\n      case 150:                     // 'gt'\n      case 172:                     // 'le'\n      case 178:                     // 'lt'\n      case 186:                     // 'ne'\n        whitespace();\n        parse_ValueComp();\n        break;\n      case 57:                      // '<<'\n      case 63:                      // '>>'\n      case 164:                     // 'is'\n        whitespace();\n        parse_NodeComp();\n        break;\n      default:\n        whitespace();\n        parse_GeneralComp();\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_FTContainsExpr();\n    }\n    eventHandler.endNonterminal(\"ComparisonExpr\", e0);\n  }\n\n  function try_ComparisonExpr()\n  {\n    try_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 54                    // '<'\n     || l1 == 57                    // '<<'\n     || l1 == 58                    // '<='\n     || l1 == 60                    // '='\n     || l1 == 61                    // '>'\n     || l1 == 62                    // '>='\n     || l1 == 63                    // '>>'\n     || l1 == 128                   // 'eq'\n     || l1 == 146                   // 'ge'\n     || l1 == 150                   // 'gt'\n     || l1 == 164                   // 'is'\n     || l1 == 172                   // 'le'\n     || l1 == 178                   // 'lt'\n     || l1 == 186)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 128:                     // 'eq'\n      case 146:                     // 'ge'\n      case 150:                     // 'gt'\n      case 172:                     // 'le'\n      case 178:                     // 'lt'\n      case 186:                     // 'ne'\n        try_ValueComp();\n        break;\n      case 57:                      // '<<'\n      case 63:                      // '>>'\n      case 164:                     // 'is'\n        try_NodeComp();\n        break;\n      default:\n        try_GeneralComp();\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_FTContainsExpr();\n    }\n  }\n\n  function parse_FTContainsExpr()\n  {\n    eventHandler.startNonterminal(\"FTContainsExpr\", e0);\n    parse_StringConcatExpr();\n    if (l1 == 99)                   // 'contains'\n    {\n      shift(99);                    // 'contains'\n      lookahead1W(76);              // S^WS | '(:' | 'text'\n      shift(244);                   // 'text'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      if (l1 == 271)                // 'without'\n      {\n        whitespace();\n        parse_FTIgnoreOption();\n      }\n    }\n    eventHandler.endNonterminal(\"FTContainsExpr\", e0);\n  }\n\n  function try_FTContainsExpr()\n  {\n    try_StringConcatExpr();\n    if (l1 == 99)                   // 'contains'\n    {\n      shiftT(99);                   // 'contains'\n      lookahead1W(76);              // S^WS | '(:' | 'text'\n      shiftT(244);                  // 'text'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      if (l1 == 271)                // 'without'\n      {\n        try_FTIgnoreOption();\n      }\n    }\n  }\n\n  function parse_StringConcatExpr()\n  {\n    eventHandler.startNonterminal(\"StringConcatExpr\", e0);\n    parse_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 280)                // '||'\n      {\n        break;\n      }\n      shift(280);                   // '||'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_RangeExpr();\n    }\n    eventHandler.endNonterminal(\"StringConcatExpr\", e0);\n  }\n\n  function try_StringConcatExpr()\n  {\n    try_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 280)                // '||'\n      {\n        break;\n      }\n      shiftT(280);                  // '||'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_RangeExpr();\n    }\n  }\n\n  function parse_RangeExpr()\n  {\n    eventHandler.startNonterminal(\"RangeExpr\", e0);\n    parse_AdditiveExpr();\n    if (l1 == 248)                  // 'to'\n    {\n      shift(248);                   // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"RangeExpr\", e0);\n  }\n\n  function try_RangeExpr()\n  {\n    try_AdditiveExpr();\n    if (l1 == 248)                  // 'to'\n    {\n      shiftT(248);                  // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_AdditiveExpr()\n  {\n    eventHandler.startNonterminal(\"AdditiveExpr\", e0);\n    parse_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 40:                      // '+'\n        shift(40);                  // '+'\n        break;\n      default:\n        shift(42);                  // '-'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_MultiplicativeExpr();\n    }\n    eventHandler.endNonterminal(\"AdditiveExpr\", e0);\n  }\n\n  function try_AdditiveExpr()\n  {\n    try_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 40:                      // '+'\n        shiftT(40);                 // '+'\n        break;\n      default:\n        shiftT(42);                 // '-'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_MultiplicativeExpr();\n    }\n  }\n\n  function parse_MultiplicativeExpr()\n  {\n    eventHandler.startNonterminal(\"MultiplicativeExpr\", e0);\n    parse_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 38                  // '*'\n       && l1 != 118                 // 'div'\n       && l1 != 151                 // 'idiv'\n       && l1 != 180)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 38:                      // '*'\n        shift(38);                  // '*'\n        break;\n      case 118:                     // 'div'\n        shift(118);                 // 'div'\n        break;\n      case 151:                     // 'idiv'\n        shift(151);                 // 'idiv'\n        break;\n      default:\n        shift(180);                 // 'mod'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_UnionExpr();\n    }\n    eventHandler.endNonterminal(\"MultiplicativeExpr\", e0);\n  }\n\n  function try_MultiplicativeExpr()\n  {\n    try_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 38                  // '*'\n       && l1 != 118                 // 'div'\n       && l1 != 151                 // 'idiv'\n       && l1 != 180)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 38:                      // '*'\n        shiftT(38);                 // '*'\n        break;\n      case 118:                     // 'div'\n        shiftT(118);                // 'div'\n        break;\n      case 151:                     // 'idiv'\n        shiftT(151);                // 'idiv'\n        break;\n      default:\n        shiftT(180);                // 'mod'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_UnionExpr();\n    }\n  }\n\n  function parse_UnionExpr()\n  {\n    eventHandler.startNonterminal(\"UnionExpr\", e0);\n    parse_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 254                 // 'union'\n       && l1 != 279)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 254:                     // 'union'\n        shift(254);                 // 'union'\n        break;\n      default:\n        shift(279);                 // '|'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_IntersectExceptExpr();\n    }\n    eventHandler.endNonterminal(\"UnionExpr\", e0);\n  }\n\n  function try_UnionExpr()\n  {\n    try_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 254                 // 'union'\n       && l1 != 279)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 254:                     // 'union'\n        shiftT(254);                // 'union'\n        break;\n      default:\n        shiftT(279);                // '|'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_IntersectExceptExpr();\n    }\n  }\n\n  function parse_IntersectExceptExpr()\n  {\n    eventHandler.startNonterminal(\"IntersectExceptExpr\", e0);\n    parse_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 131                 // 'except'\n       && l1 != 162)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 162:                     // 'intersect'\n        shift(162);                 // 'intersect'\n        break;\n      default:\n        shift(131);                 // 'except'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_InstanceofExpr();\n    }\n    eventHandler.endNonterminal(\"IntersectExceptExpr\", e0);\n  }\n\n  function try_IntersectExceptExpr()\n  {\n    try_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 131                 // 'except'\n       && l1 != 162)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 162:                     // 'intersect'\n        shiftT(162);                // 'intersect'\n        break;\n      default:\n        shiftT(131);                // 'except'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_InstanceofExpr();\n    }\n  }\n\n  function parse_InstanceofExpr()\n  {\n    eventHandler.startNonterminal(\"InstanceofExpr\", e0);\n    parse_TreatExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 160)                  // 'instance'\n    {\n      shift(160);                   // 'instance'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shift(196);                   // 'of'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"InstanceofExpr\", e0);\n  }\n\n  function try_InstanceofExpr()\n  {\n    try_TreatExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 160)                  // 'instance'\n    {\n      shiftT(160);                  // 'instance'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shiftT(196);                  // 'of'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_TreatExpr()\n  {\n    eventHandler.startNonterminal(\"TreatExpr\", e0);\n    parse_CastableExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 249)                  // 'treat'\n    {\n      shift(249);                   // 'treat'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"TreatExpr\", e0);\n  }\n\n  function try_TreatExpr()\n  {\n    try_CastableExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 249)                  // 'treat'\n    {\n      shiftT(249);                  // 'treat'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_CastableExpr()\n  {\n    eventHandler.startNonterminal(\"CastableExpr\", e0);\n    parse_CastExpr();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'castable'\n    {\n      shift(90);                    // 'castable'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastableExpr\", e0);\n  }\n\n  function try_CastableExpr()\n  {\n    try_CastExpr();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'castable'\n    {\n      shiftT(90);                   // 'castable'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_CastExpr()\n  {\n    eventHandler.startNonterminal(\"CastExpr\", e0);\n    parse_UnaryExpr();\n    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 89)                   // 'cast'\n    {\n      shift(89);                    // 'cast'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastExpr\", e0);\n  }\n\n  function try_CastExpr()\n  {\n    try_UnaryExpr();\n    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 89)                   // 'cast'\n    {\n      shiftT(89);                   // 'cast'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_UnaryExpr()\n  {\n    eventHandler.startNonterminal(\"UnaryExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 42:                      // '-'\n        shift(42);                  // '-'\n        break;\n      default:\n        shift(40);                  // '+'\n      }\n    }\n    whitespace();\n    parse_ValueExpr();\n    eventHandler.endNonterminal(\"UnaryExpr\", e0);\n  }\n\n  function try_UnaryExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 42:                      // '-'\n        shiftT(42);                 // '-'\n        break;\n      default:\n        shiftT(40);                 // '+'\n      }\n    }\n    try_ValueExpr();\n  }\n\n  function parse_ValueExpr()\n  {\n    eventHandler.startNonterminal(\"ValueExpr\", e0);\n    switch (l1)\n    {\n    case 260:                       // 'validate'\n      lookahead2W(247);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 87812:                     // 'validate' 'lax'\n    case 123140:                    // 'validate' 'strict'\n    case 129284:                    // 'validate' 'type'\n    case 141572:                    // 'validate' '{'\n      parse_ValidateExpr();\n      break;\n    case 35:                        // '(#'\n      parse_ExtensionExpr();\n      break;\n    default:\n      parse_SimpleMapExpr();\n    }\n    eventHandler.endNonterminal(\"ValueExpr\", e0);\n  }\n\n  function try_ValueExpr()\n  {\n    switch (l1)\n    {\n    case 260:                       // 'validate'\n      lookahead2W(247);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 87812:                     // 'validate' 'lax'\n    case 123140:                    // 'validate' 'strict'\n    case 129284:                    // 'validate' 'type'\n    case 141572:                    // 'validate' '{'\n      try_ValidateExpr();\n      break;\n    case 35:                        // '(#'\n      try_ExtensionExpr();\n      break;\n    default:\n      try_SimpleMapExpr();\n    }\n  }\n\n  function parse_SimpleMapExpr()\n  {\n    eventHandler.startNonterminal(\"SimpleMapExpr\", e0);\n    parse_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shift(26);                    // '!'\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PathExpr();\n    }\n    eventHandler.endNonterminal(\"SimpleMapExpr\", e0);\n  }\n\n  function try_SimpleMapExpr()\n  {\n    try_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shiftT(26);                   // '!'\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PathExpr();\n    }\n  }\n\n  function parse_GeneralComp()\n  {\n    eventHandler.startNonterminal(\"GeneralComp\", e0);\n    switch (l1)\n    {\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 27:                        // '!='\n      shift(27);                    // '!='\n      break;\n    case 54:                        // '<'\n      shift(54);                    // '<'\n      break;\n    case 58:                        // '<='\n      shift(58);                    // '<='\n      break;\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    default:\n      shift(62);                    // '>='\n    }\n    eventHandler.endNonterminal(\"GeneralComp\", e0);\n  }\n\n  function try_GeneralComp()\n  {\n    switch (l1)\n    {\n    case 60:                        // '='\n      shiftT(60);                   // '='\n      break;\n    case 27:                        // '!='\n      shiftT(27);                   // '!='\n      break;\n    case 54:                        // '<'\n      shiftT(54);                   // '<'\n      break;\n    case 58:                        // '<='\n      shiftT(58);                   // '<='\n      break;\n    case 61:                        // '>'\n      shiftT(61);                   // '>'\n      break;\n    default:\n      shiftT(62);                   // '>='\n    }\n  }\n\n  function parse_ValueComp()\n  {\n    eventHandler.startNonterminal(\"ValueComp\", e0);\n    switch (l1)\n    {\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    default:\n      shift(146);                   // 'ge'\n    }\n    eventHandler.endNonterminal(\"ValueComp\", e0);\n  }\n\n  function try_ValueComp()\n  {\n    switch (l1)\n    {\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    default:\n      shiftT(146);                  // 'ge'\n    }\n  }\n\n  function parse_NodeComp()\n  {\n    eventHandler.startNonterminal(\"NodeComp\", e0);\n    switch (l1)\n    {\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 57:                        // '<<'\n      shift(57);                    // '<<'\n      break;\n    default:\n      shift(63);                    // '>>'\n    }\n    eventHandler.endNonterminal(\"NodeComp\", e0);\n  }\n\n  function try_NodeComp()\n  {\n    switch (l1)\n    {\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 57:                        // '<<'\n      shiftT(57);                   // '<<'\n      break;\n    default:\n      shiftT(63);                   // '>>'\n    }\n  }\n\n  function parse_ValidateExpr()\n  {\n    eventHandler.startNonterminal(\"ValidateExpr\", e0);\n    shift(260);                     // 'validate'\n    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 276)                  // '{'\n    {\n      switch (l1)\n      {\n      case 252:                     // 'type'\n        shift(252);                 // 'type'\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        break;\n      default:\n        whitespace();\n        parse_ValidationMode();\n      }\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ValidateExpr\", e0);\n  }\n\n  function try_ValidateExpr()\n  {\n    shiftT(260);                    // 'validate'\n    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 276)                  // '{'\n    {\n      switch (l1)\n      {\n      case 252:                     // 'type'\n        shiftT(252);                // 'type'\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        break;\n      default:\n        try_ValidationMode();\n      }\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_ValidationMode()\n  {\n    eventHandler.startNonterminal(\"ValidationMode\", e0);\n    switch (l1)\n    {\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    default:\n      shift(240);                   // 'strict'\n    }\n    eventHandler.endNonterminal(\"ValidationMode\", e0);\n  }\n\n  function try_ValidationMode()\n  {\n    switch (l1)\n    {\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    default:\n      shiftT(240);                  // 'strict'\n    }\n  }\n\n  function parse_ExtensionExpr()\n  {\n    eventHandler.startNonterminal(\"ExtensionExpr\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(276);                     // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ExtensionExpr\", e0);\n  }\n\n  function try_ExtensionExpr()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(276);                    // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      try_Expr();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_Pragma()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    shift(35);                      // '(#'\n    lookahead1(251);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n    }\n    parse_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(0);                // PragmaContents\n      shift(1);                     // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shift(30);                      // '#)'\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  }\n\n  function try_Pragma()\n  {\n    shiftT(35);                     // '(#'\n    lookahead1(251);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n    }\n    try_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(0);                // PragmaContents\n      shiftT(1);                    // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shiftT(30);                     // '#)'\n  }\n\n  function parse_PathExpr()\n  {\n    eventHandler.startNonterminal(\"PathExpr\", e0);\n    switch (l1)\n    {\n    case 46:                        // '/'\n      shift(46);                    // '/'\n      lookahead1W(285);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 37:                      // ')'\n      case 38:                      // '*'\n      case 40:                      // '+'\n      case 41:                      // ','\n      case 42:                      // '-'\n      case 49:                      // ':'\n      case 53:                      // ';'\n      case 57:                      // '<<'\n      case 58:                      // '<='\n      case 60:                      // '='\n      case 61:                      // '>'\n      case 62:                      // '>='\n      case 63:                      // '>>'\n      case 69:                      // ']'\n      case 87:                      // 'by'\n      case 99:                      // 'contains'\n      case 205:                     // 'paragraphs'\n      case 232:                     // 'sentences'\n      case 247:                     // 'times'\n      case 273:                     // 'words'\n      case 279:                     // '|'\n      case 280:                     // '||'\n      case 281:                     // '|}'\n      case 282:                     // '}'\n        break;\n      default:\n        whitespace();\n        parse_RelativePathExpr();\n      }\n      break;\n    case 47:                        // '//'\n      shift(47);                    // '//'\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_RelativePathExpr();\n      break;\n    default:\n      parse_RelativePathExpr();\n    }\n    eventHandler.endNonterminal(\"PathExpr\", e0);\n  }\n\n  function try_PathExpr()\n  {\n    switch (l1)\n    {\n    case 46:                        // '/'\n      shiftT(46);                   // '/'\n      lookahead1W(285);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 37:                      // ')'\n      case 38:                      // '*'\n      case 40:                      // '+'\n      case 41:                      // ','\n      case 42:                      // '-'\n      case 49:                      // ':'\n      case 53:                      // ';'\n      case 57:                      // '<<'\n      case 58:                      // '<='\n      case 60:                      // '='\n      case 61:                      // '>'\n      case 62:                      // '>='\n      case 63:                      // '>>'\n      case 69:                      // ']'\n      case 87:                      // 'by'\n      case 99:                      // 'contains'\n      case 205:                     // 'paragraphs'\n      case 232:                     // 'sentences'\n      case 247:                     // 'times'\n      case 273:                     // 'words'\n      case 279:                     // '|'\n      case 280:                     // '||'\n      case 281:                     // '|}'\n      case 282:                     // '}'\n        break;\n      default:\n        try_RelativePathExpr();\n      }\n      break;\n    case 47:                        // '//'\n      shiftT(47);                   // '//'\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_RelativePathExpr();\n      break;\n    default:\n      try_RelativePathExpr();\n    }\n  }\n\n  function parse_RelativePathExpr()\n  {\n    eventHandler.startNonterminal(\"RelativePathExpr\", e0);\n    parse_StepExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 37                  // ')'\n       && lk != 38                  // '*'\n       && lk != 40                  // '+'\n       && lk != 41                  // ','\n       && lk != 42                  // '-'\n       && lk != 46                  // '/'\n       && lk != 47                  // '//'\n       && lk != 49                  // ':'\n       && lk != 53                  // ';'\n       && lk != 54                  // '<'\n       && lk != 57                  // '<<'\n       && lk != 58                  // '<='\n       && lk != 60                  // '='\n       && lk != 61                  // '>'\n       && lk != 62                  // '>='\n       && lk != 63                  // '>>'\n       && lk != 69                  // ']'\n       && lk != 70                  // 'after'\n       && lk != 75                  // 'and'\n       && lk != 79                  // 'as'\n       && lk != 80                  // 'ascending'\n       && lk != 81                  // 'at'\n       && lk != 84                  // 'before'\n       && lk != 87                  // 'by'\n       && lk != 88                  // 'case'\n       && lk != 89                  // 'cast'\n       && lk != 90                  // 'castable'\n       && lk != 94                  // 'collation'\n       && lk != 99                  // 'contains'\n       && lk != 105                 // 'count'\n       && lk != 109                 // 'default'\n       && lk != 113                 // 'descending'\n       && lk != 118                 // 'div'\n       && lk != 122                 // 'else'\n       && lk != 123                 // 'empty'\n       && lk != 126                 // 'end'\n       && lk != 128                 // 'eq'\n       && lk != 131                 // 'except'\n       && lk != 137                 // 'for'\n       && lk != 146                 // 'ge'\n       && lk != 148                 // 'group'\n       && lk != 150                 // 'gt'\n       && lk != 151                 // 'idiv'\n       && lk != 160                 // 'instance'\n       && lk != 162                 // 'intersect'\n       && lk != 163                 // 'into'\n       && lk != 164                 // 'is'\n       && lk != 172                 // 'le'\n       && lk != 174                 // 'let'\n       && lk != 178                 // 'lt'\n       && lk != 180                 // 'mod'\n       && lk != 181                 // 'modify'\n       && lk != 186                 // 'ne'\n       && lk != 198                 // 'only'\n       && lk != 200                 // 'or'\n       && lk != 201                 // 'order'\n       && lk != 205                 // 'paragraphs'\n       && lk != 220                 // 'return'\n       && lk != 224                 // 'satisfies'\n       && lk != 232                 // 'sentences'\n       && lk != 236                 // 'stable'\n       && lk != 237                 // 'start'\n       && lk != 247                 // 'times'\n       && lk != 248                 // 'to'\n       && lk != 249                 // 'treat'\n       && lk != 254                 // 'union'\n       && lk != 266                 // 'where'\n       && lk != 270                 // 'with'\n       && lk != 273                 // 'words'\n       && lk != 279                 // '|'\n       && lk != 280                 // '||'\n       && lk != 281                 // '|}'\n       && lk != 282                 // '}'\n       && lk != 23578               // '!' '/'\n       && lk != 24090)              // '!' '//'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 46:                // '/'\n              shiftT(46);           // '/'\n              break;\n            case 47:                // '//'\n              shiftT(47);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(264);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(3, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 46                  // '/'\n       && lk != 47)                 // '//'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 46:                      // '/'\n        shift(46);                  // '/'\n        break;\n      case 47:                      // '//'\n        shift(47);                  // '//'\n        break;\n      default:\n        shift(26);                  // '!'\n      }\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_StepExpr();\n    }\n    eventHandler.endNonterminal(\"RelativePathExpr\", e0);\n  }\n\n  function try_RelativePathExpr()\n  {\n    try_StepExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 37                  // ')'\n       && lk != 38                  // '*'\n       && lk != 40                  // '+'\n       && lk != 41                  // ','\n       && lk != 42                  // '-'\n       && lk != 46                  // '/'\n       && lk != 47                  // '//'\n       && lk != 49                  // ':'\n       && lk != 53                  // ';'\n       && lk != 54                  // '<'\n       && lk != 57                  // '<<'\n       && lk != 58                  // '<='\n       && lk != 60                  // '='\n       && lk != 61                  // '>'\n       && lk != 62                  // '>='\n       && lk != 63                  // '>>'\n       && lk != 69                  // ']'\n       && lk != 70                  // 'after'\n       && lk != 75                  // 'and'\n       && lk != 79                  // 'as'\n       && lk != 80                  // 'ascending'\n       && lk != 81                  // 'at'\n       && lk != 84                  // 'before'\n       && lk != 87                  // 'by'\n       && lk != 88                  // 'case'\n       && lk != 89                  // 'cast'\n       && lk != 90                  // 'castable'\n       && lk != 94                  // 'collation'\n       && lk != 99                  // 'contains'\n       && lk != 105                 // 'count'\n       && lk != 109                 // 'default'\n       && lk != 113                 // 'descending'\n       && lk != 118                 // 'div'\n       && lk != 122                 // 'else'\n       && lk != 123                 // 'empty'\n       && lk != 126                 // 'end'\n       && lk != 128                 // 'eq'\n       && lk != 131                 // 'except'\n       && lk != 137                 // 'for'\n       && lk != 146                 // 'ge'\n       && lk != 148                 // 'group'\n       && lk != 150                 // 'gt'\n       && lk != 151                 // 'idiv'\n       && lk != 160                 // 'instance'\n       && lk != 162                 // 'intersect'\n       && lk != 163                 // 'into'\n       && lk != 164                 // 'is'\n       && lk != 172                 // 'le'\n       && lk != 174                 // 'let'\n       && lk != 178                 // 'lt'\n       && lk != 180                 // 'mod'\n       && lk != 181                 // 'modify'\n       && lk != 186                 // 'ne'\n       && lk != 198                 // 'only'\n       && lk != 200                 // 'or'\n       && lk != 201                 // 'order'\n       && lk != 205                 // 'paragraphs'\n       && lk != 220                 // 'return'\n       && lk != 224                 // 'satisfies'\n       && lk != 232                 // 'sentences'\n       && lk != 236                 // 'stable'\n       && lk != 237                 // 'start'\n       && lk != 247                 // 'times'\n       && lk != 248                 // 'to'\n       && lk != 249                 // 'treat'\n       && lk != 254                 // 'union'\n       && lk != 266                 // 'where'\n       && lk != 270                 // 'with'\n       && lk != 273                 // 'words'\n       && lk != 279                 // '|'\n       && lk != 280                 // '||'\n       && lk != 281                 // '|}'\n       && lk != 282                 // '}'\n       && lk != 23578               // '!' '/'\n       && lk != 24090)              // '!' '//'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 46:                // '/'\n              shiftT(46);           // '/'\n              break;\n            case 47:                // '//'\n              shiftT(47);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(264);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            memoize(3, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(3, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 46                  // '/'\n       && lk != 47)                 // '//'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 46:                      // '/'\n        shiftT(46);                 // '/'\n        break;\n      case 47:                      // '//'\n        shiftT(47);                 // '//'\n        break;\n      default:\n        shiftT(26);                 // '!'\n      }\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_StepExpr();\n    }\n  }\n\n  function parse_StepExpr()\n  {\n    eventHandler.startNonterminal(\"StepExpr\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(284);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 121:                       // 'element'\n      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 184:                       // 'namespace'\n    case 216:                       // 'processing-instruction'\n      lookahead2W(281);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 96:                        // 'comment'\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 244:                       // 'text'\n    case 256:                       // 'unordered'\n      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 78:                        // 'array'\n    case 124:                       // 'empty-sequence'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 229:                       // 'self'\n      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 120:                       // 'document-node'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 145:                       // 'function'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 185:                       // 'namespace-node'\n    case 186:                       // 'ne'\n    case 191:                       // 'node'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 228:                       // 'score'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 35922                 // 'attribute' 'after'\n     || lk == 35961                 // 'element' 'after'\n     || lk == 36024                 // 'namespace' 'after'\n     || lk == 36056                 // 'processing-instruction' 'after'\n     || lk == 38482                 // 'attribute' 'and'\n     || lk == 38521                 // 'element' 'and'\n     || lk == 38584                 // 'namespace' 'and'\n     || lk == 38616                 // 'processing-instruction' 'and'\n     || lk == 40530                 // 'attribute' 'as'\n     || lk == 40569                 // 'element' 'as'\n     || lk == 40632                 // 'namespace' 'as'\n     || lk == 40664                 // 'processing-instruction' 'as'\n     || lk == 41042                 // 'attribute' 'ascending'\n     || lk == 41081                 // 'element' 'ascending'\n     || lk == 41144                 // 'namespace' 'ascending'\n     || lk == 41176                 // 'processing-instruction' 'ascending'\n     || lk == 41554                 // 'attribute' 'at'\n     || lk == 41593                 // 'element' 'at'\n     || lk == 41656                 // 'namespace' 'at'\n     || lk == 41688                 // 'processing-instruction' 'at'\n     || lk == 43090                 // 'attribute' 'before'\n     || lk == 43129                 // 'element' 'before'\n     || lk == 43192                 // 'namespace' 'before'\n     || lk == 43224                 // 'processing-instruction' 'before'\n     || lk == 45138                 // 'attribute' 'case'\n     || lk == 45177                 // 'element' 'case'\n     || lk == 45240                 // 'namespace' 'case'\n     || lk == 45272                 // 'processing-instruction' 'case'\n     || lk == 45650                 // 'attribute' 'cast'\n     || lk == 45689                 // 'element' 'cast'\n     || lk == 45752                 // 'namespace' 'cast'\n     || lk == 45784                 // 'processing-instruction' 'cast'\n     || lk == 46162                 // 'attribute' 'castable'\n     || lk == 46201                 // 'element' 'castable'\n     || lk == 46264                 // 'namespace' 'castable'\n     || lk == 46296                 // 'processing-instruction' 'castable'\n     || lk == 48210                 // 'attribute' 'collation'\n     || lk == 48249                 // 'element' 'collation'\n     || lk == 48312                 // 'namespace' 'collation'\n     || lk == 48344                 // 'processing-instruction' 'collation'\n     || lk == 53842                 // 'attribute' 'count'\n     || lk == 53881                 // 'element' 'count'\n     || lk == 53944                 // 'namespace' 'count'\n     || lk == 53976                 // 'processing-instruction' 'count'\n     || lk == 55890                 // 'attribute' 'default'\n     || lk == 55929                 // 'element' 'default'\n     || lk == 55992                 // 'namespace' 'default'\n     || lk == 56024                 // 'processing-instruction' 'default'\n     || lk == 57938                 // 'attribute' 'descending'\n     || lk == 57977                 // 'element' 'descending'\n     || lk == 58040                 // 'namespace' 'descending'\n     || lk == 58072                 // 'processing-instruction' 'descending'\n     || lk == 60498                 // 'attribute' 'div'\n     || lk == 60537                 // 'element' 'div'\n     || lk == 60600                 // 'namespace' 'div'\n     || lk == 60632                 // 'processing-instruction' 'div'\n     || lk == 62546                 // 'attribute' 'else'\n     || lk == 62585                 // 'element' 'else'\n     || lk == 62648                 // 'namespace' 'else'\n     || lk == 62680                 // 'processing-instruction' 'else'\n     || lk == 63058                 // 'attribute' 'empty'\n     || lk == 63097                 // 'element' 'empty'\n     || lk == 63160                 // 'namespace' 'empty'\n     || lk == 63192                 // 'processing-instruction' 'empty'\n     || lk == 64594                 // 'attribute' 'end'\n     || lk == 64633                 // 'element' 'end'\n     || lk == 64696                 // 'namespace' 'end'\n     || lk == 64728                 // 'processing-instruction' 'end'\n     || lk == 65618                 // 'attribute' 'eq'\n     || lk == 65657                 // 'element' 'eq'\n     || lk == 65720                 // 'namespace' 'eq'\n     || lk == 65752                 // 'processing-instruction' 'eq'\n     || lk == 67154                 // 'attribute' 'except'\n     || lk == 67193                 // 'element' 'except'\n     || lk == 67256                 // 'namespace' 'except'\n     || lk == 67288                 // 'processing-instruction' 'except'\n     || lk == 70226                 // 'attribute' 'for'\n     || lk == 70265                 // 'element' 'for'\n     || lk == 70328                 // 'namespace' 'for'\n     || lk == 70360                 // 'processing-instruction' 'for'\n     || lk == 74834                 // 'attribute' 'ge'\n     || lk == 74873                 // 'element' 'ge'\n     || lk == 74936                 // 'namespace' 'ge'\n     || lk == 74968                 // 'processing-instruction' 'ge'\n     || lk == 75858                 // 'attribute' 'group'\n     || lk == 75897                 // 'element' 'group'\n     || lk == 75960                 // 'namespace' 'group'\n     || lk == 75992                 // 'processing-instruction' 'group'\n     || lk == 76882                 // 'attribute' 'gt'\n     || lk == 76921                 // 'element' 'gt'\n     || lk == 76984                 // 'namespace' 'gt'\n     || lk == 77016                 // 'processing-instruction' 'gt'\n     || lk == 77394                 // 'attribute' 'idiv'\n     || lk == 77433                 // 'element' 'idiv'\n     || lk == 77496                 // 'namespace' 'idiv'\n     || lk == 77528                 // 'processing-instruction' 'idiv'\n     || lk == 82002                 // 'attribute' 'instance'\n     || lk == 82041                 // 'element' 'instance'\n     || lk == 82104                 // 'namespace' 'instance'\n     || lk == 82136                 // 'processing-instruction' 'instance'\n     || lk == 83026                 // 'attribute' 'intersect'\n     || lk == 83065                 // 'element' 'intersect'\n     || lk == 83128                 // 'namespace' 'intersect'\n     || lk == 83160                 // 'processing-instruction' 'intersect'\n     || lk == 83538                 // 'attribute' 'into'\n     || lk == 83577                 // 'element' 'into'\n     || lk == 83640                 // 'namespace' 'into'\n     || lk == 83672                 // 'processing-instruction' 'into'\n     || lk == 84050                 // 'attribute' 'is'\n     || lk == 84089                 // 'element' 'is'\n     || lk == 84152                 // 'namespace' 'is'\n     || lk == 84184                 // 'processing-instruction' 'is'\n     || lk == 88146                 // 'attribute' 'le'\n     || lk == 88185                 // 'element' 'le'\n     || lk == 88248                 // 'namespace' 'le'\n     || lk == 88280                 // 'processing-instruction' 'le'\n     || lk == 89170                 // 'attribute' 'let'\n     || lk == 89209                 // 'element' 'let'\n     || lk == 89272                 // 'namespace' 'let'\n     || lk == 89304                 // 'processing-instruction' 'let'\n     || lk == 91218                 // 'attribute' 'lt'\n     || lk == 91257                 // 'element' 'lt'\n     || lk == 91320                 // 'namespace' 'lt'\n     || lk == 91352                 // 'processing-instruction' 'lt'\n     || lk == 92242                 // 'attribute' 'mod'\n     || lk == 92281                 // 'element' 'mod'\n     || lk == 92344                 // 'namespace' 'mod'\n     || lk == 92376                 // 'processing-instruction' 'mod'\n     || lk == 92754                 // 'attribute' 'modify'\n     || lk == 92793                 // 'element' 'modify'\n     || lk == 92856                 // 'namespace' 'modify'\n     || lk == 92888                 // 'processing-instruction' 'modify'\n     || lk == 95314                 // 'attribute' 'ne'\n     || lk == 95353                 // 'element' 'ne'\n     || lk == 95416                 // 'namespace' 'ne'\n     || lk == 95448                 // 'processing-instruction' 'ne'\n     || lk == 101458                // 'attribute' 'only'\n     || lk == 101497                // 'element' 'only'\n     || lk == 101560                // 'namespace' 'only'\n     || lk == 101592                // 'processing-instruction' 'only'\n     || lk == 102482                // 'attribute' 'or'\n     || lk == 102521                // 'element' 'or'\n     || lk == 102584                // 'namespace' 'or'\n     || lk == 102616                // 'processing-instruction' 'or'\n     || lk == 102994                // 'attribute' 'order'\n     || lk == 103033                // 'element' 'order'\n     || lk == 103096                // 'namespace' 'order'\n     || lk == 103128                // 'processing-instruction' 'order'\n     || lk == 112722                // 'attribute' 'return'\n     || lk == 112761                // 'element' 'return'\n     || lk == 112824                // 'namespace' 'return'\n     || lk == 112856                // 'processing-instruction' 'return'\n     || lk == 114770                // 'attribute' 'satisfies'\n     || lk == 114809                // 'element' 'satisfies'\n     || lk == 114872                // 'namespace' 'satisfies'\n     || lk == 114904                // 'processing-instruction' 'satisfies'\n     || lk == 120914                // 'attribute' 'stable'\n     || lk == 120953                // 'element' 'stable'\n     || lk == 121016                // 'namespace' 'stable'\n     || lk == 121048                // 'processing-instruction' 'stable'\n     || lk == 121426                // 'attribute' 'start'\n     || lk == 121465                // 'element' 'start'\n     || lk == 121528                // 'namespace' 'start'\n     || lk == 121560                // 'processing-instruction' 'start'\n     || lk == 127058                // 'attribute' 'to'\n     || lk == 127097                // 'element' 'to'\n     || lk == 127160                // 'namespace' 'to'\n     || lk == 127192                // 'processing-instruction' 'to'\n     || lk == 127570                // 'attribute' 'treat'\n     || lk == 127609                // 'element' 'treat'\n     || lk == 127672                // 'namespace' 'treat'\n     || lk == 127704                // 'processing-instruction' 'treat'\n     || lk == 130130                // 'attribute' 'union'\n     || lk == 130169                // 'element' 'union'\n     || lk == 130232                // 'namespace' 'union'\n     || lk == 130264                // 'processing-instruction' 'union'\n     || lk == 136274                // 'attribute' 'where'\n     || lk == 136313                // 'element' 'where'\n     || lk == 136376                // 'namespace' 'where'\n     || lk == 136408                // 'processing-instruction' 'where'\n     || lk == 138322                // 'attribute' 'with'\n     || lk == 138361                // 'element' 'with'\n     || lk == 138424                // 'namespace' 'with'\n     || lk == 138456)               // 'processing-instruction' 'with'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(4, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '%'\n    case 34:                        // '('\n    case 44:                        // '.'\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n    case 68:                        // '['\n    case 276:                       // '{'\n    case 278:                       // '{|'\n    case 3154:                      // 'attribute' EQName^Token\n    case 3193:                      // 'element' EQName^Token\n    case 9912:                      // 'namespace' NCName^Token\n    case 9944:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14926:                     // 'array' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14968:                     // 'document-node' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14972:                     // 'empty-sequence' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14993:                     // 'function' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15000:                     // 'if' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15013:                     // 'item' '#'\n    case 15014:                     // 'json' '#'\n    case 15015:                     // 'json-item' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15033:                     // 'namespace-node' '#'\n    case 15034:                     // 'ne' '#'\n    case 15039:                     // 'node' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15074:                     // 'schema-attribute' '#'\n    case 15075:                     // 'schema-element' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15090:                     // 'structured-item' '#'\n    case 15091:                     // 'switch' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15101:                     // 'typeswitch' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17553:                     // 'function' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n    case 36946:                     // 'attribute' 'allowing'\n    case 36985:                     // 'element' 'allowing'\n    case 37048:                     // 'namespace' 'allowing'\n    case 37080:                     // 'processing-instruction' 'allowing'\n    case 37458:                     // 'attribute' 'ancestor'\n    case 37497:                     // 'element' 'ancestor'\n    case 37560:                     // 'namespace' 'ancestor'\n    case 37592:                     // 'processing-instruction' 'ancestor'\n    case 37970:                     // 'attribute' 'ancestor-or-self'\n    case 38009:                     // 'element' 'ancestor-or-self'\n    case 38072:                     // 'namespace' 'ancestor-or-self'\n    case 38104:                     // 'processing-instruction' 'ancestor-or-self'\n    case 39506:                     // 'attribute' 'append'\n    case 39545:                     // 'element' 'append'\n    case 39608:                     // 'namespace' 'append'\n    case 39640:                     // 'processing-instruction' 'append'\n    case 40018:                     // 'attribute' 'array'\n    case 40057:                     // 'element' 'array'\n    case 42066:                     // 'attribute' 'attribute'\n    case 42105:                     // 'element' 'attribute'\n    case 42168:                     // 'namespace' 'attribute'\n    case 42200:                     // 'processing-instruction' 'attribute'\n    case 42578:                     // 'attribute' 'base-uri'\n    case 42617:                     // 'element' 'base-uri'\n    case 42680:                     // 'namespace' 'base-uri'\n    case 42712:                     // 'processing-instruction' 'base-uri'\n    case 43602:                     // 'attribute' 'boundary-space'\n    case 43641:                     // 'element' 'boundary-space'\n    case 43704:                     // 'namespace' 'boundary-space'\n    case 43736:                     // 'processing-instruction' 'boundary-space'\n    case 44114:                     // 'attribute' 'break'\n    case 44153:                     // 'element' 'break'\n    case 44216:                     // 'namespace' 'break'\n    case 44248:                     // 'processing-instruction' 'break'\n    case 46674:                     // 'attribute' 'catch'\n    case 46713:                     // 'element' 'catch'\n    case 46776:                     // 'namespace' 'catch'\n    case 46808:                     // 'processing-instruction' 'catch'\n    case 47698:                     // 'attribute' 'child'\n    case 47737:                     // 'element' 'child'\n    case 47800:                     // 'namespace' 'child'\n    case 47832:                     // 'processing-instruction' 'child'\n    case 49234:                     // 'attribute' 'comment'\n    case 49273:                     // 'element' 'comment'\n    case 49336:                     // 'namespace' 'comment'\n    case 49368:                     // 'processing-instruction' 'comment'\n    case 49746:                     // 'attribute' 'constraint'\n    case 49785:                     // 'element' 'constraint'\n    case 49848:                     // 'namespace' 'constraint'\n    case 49880:                     // 'processing-instruction' 'constraint'\n    case 50258:                     // 'attribute' 'construction'\n    case 50297:                     // 'element' 'construction'\n    case 50360:                     // 'namespace' 'construction'\n    case 50392:                     // 'processing-instruction' 'construction'\n    case 51794:                     // 'attribute' 'context'\n    case 51833:                     // 'element' 'context'\n    case 51896:                     // 'namespace' 'context'\n    case 51928:                     // 'processing-instruction' 'context'\n    case 52306:                     // 'attribute' 'continue'\n    case 52345:                     // 'element' 'continue'\n    case 52408:                     // 'namespace' 'continue'\n    case 52440:                     // 'processing-instruction' 'continue'\n    case 52818:                     // 'attribute' 'copy'\n    case 52857:                     // 'element' 'copy'\n    case 52920:                     // 'namespace' 'copy'\n    case 52952:                     // 'processing-instruction' 'copy'\n    case 53330:                     // 'attribute' 'copy-namespaces'\n    case 53369:                     // 'element' 'copy-namespaces'\n    case 53432:                     // 'namespace' 'copy-namespaces'\n    case 53464:                     // 'processing-instruction' 'copy-namespaces'\n    case 54354:                     // 'attribute' 'decimal-format'\n    case 54393:                     // 'element' 'decimal-format'\n    case 54456:                     // 'namespace' 'decimal-format'\n    case 54488:                     // 'processing-instruction' 'decimal-format'\n    case 55378:                     // 'attribute' 'declare'\n    case 55417:                     // 'element' 'declare'\n    case 55480:                     // 'namespace' 'declare'\n    case 55512:                     // 'processing-instruction' 'declare'\n    case 56402:                     // 'attribute' 'delete'\n    case 56441:                     // 'element' 'delete'\n    case 56504:                     // 'namespace' 'delete'\n    case 56536:                     // 'processing-instruction' 'delete'\n    case 56914:                     // 'attribute' 'descendant'\n    case 56953:                     // 'element' 'descendant'\n    case 57016:                     // 'namespace' 'descendant'\n    case 57048:                     // 'processing-instruction' 'descendant'\n    case 57426:                     // 'attribute' 'descendant-or-self'\n    case 57465:                     // 'element' 'descendant-or-self'\n    case 57528:                     // 'namespace' 'descendant-or-self'\n    case 57560:                     // 'processing-instruction' 'descendant-or-self'\n    case 61010:                     // 'attribute' 'document'\n    case 61049:                     // 'element' 'document'\n    case 61112:                     // 'namespace' 'document'\n    case 61144:                     // 'processing-instruction' 'document'\n    case 61522:                     // 'attribute' 'document-node'\n    case 61561:                     // 'element' 'document-node'\n    case 61624:                     // 'namespace' 'document-node'\n    case 61656:                     // 'processing-instruction' 'document-node'\n    case 62034:                     // 'attribute' 'element'\n    case 62073:                     // 'element' 'element'\n    case 62136:                     // 'namespace' 'element'\n    case 62168:                     // 'processing-instruction' 'element'\n    case 63570:                     // 'attribute' 'empty-sequence'\n    case 63609:                     // 'element' 'empty-sequence'\n    case 63672:                     // 'namespace' 'empty-sequence'\n    case 63704:                     // 'processing-instruction' 'empty-sequence'\n    case 64082:                     // 'attribute' 'encoding'\n    case 64121:                     // 'element' 'encoding'\n    case 64184:                     // 'namespace' 'encoding'\n    case 64216:                     // 'processing-instruction' 'encoding'\n    case 66130:                     // 'attribute' 'every'\n    case 66169:                     // 'element' 'every'\n    case 66232:                     // 'namespace' 'every'\n    case 66264:                     // 'processing-instruction' 'every'\n    case 67666:                     // 'attribute' 'exit'\n    case 67705:                     // 'element' 'exit'\n    case 67768:                     // 'namespace' 'exit'\n    case 67800:                     // 'processing-instruction' 'exit'\n    case 68178:                     // 'attribute' 'external'\n    case 68217:                     // 'element' 'external'\n    case 68280:                     // 'namespace' 'external'\n    case 68312:                     // 'processing-instruction' 'external'\n    case 68690:                     // 'attribute' 'first'\n    case 68729:                     // 'element' 'first'\n    case 68792:                     // 'namespace' 'first'\n    case 68824:                     // 'processing-instruction' 'first'\n    case 69202:                     // 'attribute' 'following'\n    case 69241:                     // 'element' 'following'\n    case 69304:                     // 'namespace' 'following'\n    case 69336:                     // 'processing-instruction' 'following'\n    case 69714:                     // 'attribute' 'following-sibling'\n    case 69753:                     // 'element' 'following-sibling'\n    case 69816:                     // 'namespace' 'following-sibling'\n    case 69848:                     // 'processing-instruction' 'following-sibling'\n    case 72274:                     // 'attribute' 'ft-option'\n    case 72313:                     // 'element' 'ft-option'\n    case 72376:                     // 'namespace' 'ft-option'\n    case 72408:                     // 'processing-instruction' 'ft-option'\n    case 74322:                     // 'attribute' 'function'\n    case 74361:                     // 'element' 'function'\n    case 74424:                     // 'namespace' 'function'\n    case 74456:                     // 'processing-instruction' 'function'\n    case 77906:                     // 'attribute' 'if'\n    case 77945:                     // 'element' 'if'\n    case 78008:                     // 'namespace' 'if'\n    case 78040:                     // 'processing-instruction' 'if'\n    case 78418:                     // 'attribute' 'import'\n    case 78457:                     // 'element' 'import'\n    case 78520:                     // 'namespace' 'import'\n    case 78552:                     // 'processing-instruction' 'import'\n    case 78930:                     // 'attribute' 'in'\n    case 78969:                     // 'element' 'in'\n    case 79032:                     // 'namespace' 'in'\n    case 79064:                     // 'processing-instruction' 'in'\n    case 79442:                     // 'attribute' 'index'\n    case 79481:                     // 'element' 'index'\n    case 79544:                     // 'namespace' 'index'\n    case 79576:                     // 'processing-instruction' 'index'\n    case 81490:                     // 'attribute' 'insert'\n    case 81529:                     // 'element' 'insert'\n    case 81592:                     // 'namespace' 'insert'\n    case 81624:                     // 'processing-instruction' 'insert'\n    case 82514:                     // 'attribute' 'integrity'\n    case 82553:                     // 'element' 'integrity'\n    case 82616:                     // 'namespace' 'integrity'\n    case 82648:                     // 'processing-instruction' 'integrity'\n    case 84562:                     // 'attribute' 'item'\n    case 84601:                     // 'element' 'item'\n    case 84664:                     // 'namespace' 'item'\n    case 84696:                     // 'processing-instruction' 'item'\n    case 85074:                     // 'attribute' 'json'\n    case 85113:                     // 'element' 'json'\n    case 85176:                     // 'namespace' 'json'\n    case 85208:                     // 'processing-instruction' 'json'\n    case 85586:                     // 'attribute' 'json-item'\n    case 85625:                     // 'element' 'json-item'\n    case 87122:                     // 'attribute' 'last'\n    case 87161:                     // 'element' 'last'\n    case 87224:                     // 'namespace' 'last'\n    case 87256:                     // 'processing-instruction' 'last'\n    case 87634:                     // 'attribute' 'lax'\n    case 87673:                     // 'element' 'lax'\n    case 87736:                     // 'namespace' 'lax'\n    case 87768:                     // 'processing-instruction' 'lax'\n    case 90194:                     // 'attribute' 'loop'\n    case 90233:                     // 'element' 'loop'\n    case 90296:                     // 'namespace' 'loop'\n    case 90328:                     // 'processing-instruction' 'loop'\n    case 93266:                     // 'attribute' 'module'\n    case 93305:                     // 'element' 'module'\n    case 93368:                     // 'namespace' 'module'\n    case 93400:                     // 'processing-instruction' 'module'\n    case 94290:                     // 'attribute' 'namespace'\n    case 94329:                     // 'element' 'namespace'\n    case 94392:                     // 'namespace' 'namespace'\n    case 94424:                     // 'processing-instruction' 'namespace'\n    case 94802:                     // 'attribute' 'namespace-node'\n    case 94841:                     // 'element' 'namespace-node'\n    case 94904:                     // 'namespace' 'namespace-node'\n    case 94936:                     // 'processing-instruction' 'namespace-node'\n    case 97874:                     // 'attribute' 'node'\n    case 97913:                     // 'element' 'node'\n    case 97976:                     // 'namespace' 'node'\n    case 98008:                     // 'processing-instruction' 'node'\n    case 98386:                     // 'attribute' 'nodes'\n    case 98425:                     // 'element' 'nodes'\n    case 98488:                     // 'namespace' 'nodes'\n    case 98520:                     // 'processing-instruction' 'nodes'\n    case 99410:                     // 'attribute' 'object'\n    case 99449:                     // 'element' 'object'\n    case 99512:                     // 'namespace' 'object'\n    case 99544:                     // 'processing-instruction' 'object'\n    case 101970:                    // 'attribute' 'option'\n    case 102009:                    // 'element' 'option'\n    case 102072:                    // 'namespace' 'option'\n    case 102104:                    // 'processing-instruction' 'option'\n    case 103506:                    // 'attribute' 'ordered'\n    case 103545:                    // 'element' 'ordered'\n    case 103608:                    // 'namespace' 'ordered'\n    case 103640:                    // 'processing-instruction' 'ordered'\n    case 104018:                    // 'attribute' 'ordering'\n    case 104057:                    // 'element' 'ordering'\n    case 104120:                    // 'namespace' 'ordering'\n    case 104152:                    // 'processing-instruction' 'ordering'\n    case 105554:                    // 'attribute' 'parent'\n    case 105593:                    // 'element' 'parent'\n    case 105656:                    // 'namespace' 'parent'\n    case 105688:                    // 'processing-instruction' 'parent'\n    case 108626:                    // 'attribute' 'preceding'\n    case 108665:                    // 'element' 'preceding'\n    case 108728:                    // 'namespace' 'preceding'\n    case 108760:                    // 'processing-instruction' 'preceding'\n    case 109138:                    // 'attribute' 'preceding-sibling'\n    case 109177:                    // 'element' 'preceding-sibling'\n    case 109240:                    // 'namespace' 'preceding-sibling'\n    case 109272:                    // 'processing-instruction' 'preceding-sibling'\n    case 110674:                    // 'attribute' 'processing-instruction'\n    case 110713:                    // 'element' 'processing-instruction'\n    case 110776:                    // 'namespace' 'processing-instruction'\n    case 110808:                    // 'processing-instruction' 'processing-instruction'\n    case 111698:                    // 'attribute' 'rename'\n    case 111737:                    // 'element' 'rename'\n    case 111800:                    // 'namespace' 'rename'\n    case 111832:                    // 'processing-instruction' 'rename'\n    case 112210:                    // 'attribute' 'replace'\n    case 112249:                    // 'element' 'replace'\n    case 112312:                    // 'namespace' 'replace'\n    case 112344:                    // 'processing-instruction' 'replace'\n    case 113234:                    // 'attribute' 'returning'\n    case 113273:                    // 'element' 'returning'\n    case 113336:                    // 'namespace' 'returning'\n    case 113368:                    // 'processing-instruction' 'returning'\n    case 113746:                    // 'attribute' 'revalidation'\n    case 113785:                    // 'element' 'revalidation'\n    case 113848:                    // 'namespace' 'revalidation'\n    case 113880:                    // 'processing-instruction' 'revalidation'\n    case 115282:                    // 'attribute' 'schema'\n    case 115321:                    // 'element' 'schema'\n    case 115384:                    // 'namespace' 'schema'\n    case 115416:                    // 'processing-instruction' 'schema'\n    case 115794:                    // 'attribute' 'schema-attribute'\n    case 115833:                    // 'element' 'schema-attribute'\n    case 115896:                    // 'namespace' 'schema-attribute'\n    case 115928:                    // 'processing-instruction' 'schema-attribute'\n    case 116306:                    // 'attribute' 'schema-element'\n    case 116345:                    // 'element' 'schema-element'\n    case 116408:                    // 'namespace' 'schema-element'\n    case 116440:                    // 'processing-instruction' 'schema-element'\n    case 116818:                    // 'attribute' 'score'\n    case 116857:                    // 'element' 'score'\n    case 116920:                    // 'namespace' 'score'\n    case 116952:                    // 'processing-instruction' 'score'\n    case 117330:                    // 'attribute' 'self'\n    case 117369:                    // 'element' 'self'\n    case 117432:                    // 'namespace' 'self'\n    case 117464:                    // 'processing-instruction' 'self'\n    case 119890:                    // 'attribute' 'sliding'\n    case 119929:                    // 'element' 'sliding'\n    case 119992:                    // 'namespace' 'sliding'\n    case 120024:                    // 'processing-instruction' 'sliding'\n    case 120402:                    // 'attribute' 'some'\n    case 120441:                    // 'element' 'some'\n    case 120504:                    // 'namespace' 'some'\n    case 120536:                    // 'processing-instruction' 'some'\n    case 122962:                    // 'attribute' 'strict'\n    case 123001:                    // 'element' 'strict'\n    case 123064:                    // 'namespace' 'strict'\n    case 123096:                    // 'processing-instruction' 'strict'\n    case 123986:                    // 'attribute' 'structured-item'\n    case 124025:                    // 'element' 'structured-item'\n    case 124498:                    // 'attribute' 'switch'\n    case 124537:                    // 'element' 'switch'\n    case 124600:                    // 'namespace' 'switch'\n    case 124632:                    // 'processing-instruction' 'switch'\n    case 125010:                    // 'attribute' 'text'\n    case 125049:                    // 'element' 'text'\n    case 125112:                    // 'namespace' 'text'\n    case 125144:                    // 'processing-instruction' 'text'\n    case 128082:                    // 'attribute' 'try'\n    case 128121:                    // 'element' 'try'\n    case 128184:                    // 'namespace' 'try'\n    case 128216:                    // 'processing-instruction' 'try'\n    case 128594:                    // 'attribute' 'tumbling'\n    case 128633:                    // 'element' 'tumbling'\n    case 128696:                    // 'namespace' 'tumbling'\n    case 128728:                    // 'processing-instruction' 'tumbling'\n    case 129106:                    // 'attribute' 'type'\n    case 129145:                    // 'element' 'type'\n    case 129208:                    // 'namespace' 'type'\n    case 129240:                    // 'processing-instruction' 'type'\n    case 129618:                    // 'attribute' 'typeswitch'\n    case 129657:                    // 'element' 'typeswitch'\n    case 129720:                    // 'namespace' 'typeswitch'\n    case 129752:                    // 'processing-instruction' 'typeswitch'\n    case 131154:                    // 'attribute' 'unordered'\n    case 131193:                    // 'element' 'unordered'\n    case 131256:                    // 'namespace' 'unordered'\n    case 131288:                    // 'processing-instruction' 'unordered'\n    case 131666:                    // 'attribute' 'updating'\n    case 131705:                    // 'element' 'updating'\n    case 131768:                    // 'namespace' 'updating'\n    case 131800:                    // 'processing-instruction' 'updating'\n    case 133202:                    // 'attribute' 'validate'\n    case 133241:                    // 'element' 'validate'\n    case 133304:                    // 'namespace' 'validate'\n    case 133336:                    // 'processing-instruction' 'validate'\n    case 133714:                    // 'attribute' 'value'\n    case 133753:                    // 'element' 'value'\n    case 133816:                    // 'namespace' 'value'\n    case 133848:                    // 'processing-instruction' 'value'\n    case 134226:                    // 'attribute' 'variable'\n    case 134265:                    // 'element' 'variable'\n    case 134328:                    // 'namespace' 'variable'\n    case 134360:                    // 'processing-instruction' 'variable'\n    case 134738:                    // 'attribute' 'version'\n    case 134777:                    // 'element' 'version'\n    case 134840:                    // 'namespace' 'version'\n    case 134872:                    // 'processing-instruction' 'version'\n    case 136786:                    // 'attribute' 'while'\n    case 136825:                    // 'element' 'while'\n    case 136888:                    // 'namespace' 'while'\n    case 136920:                    // 'processing-instruction' 'while'\n    case 140370:                    // 'attribute' 'xquery'\n    case 140409:                    // 'element' 'xquery'\n    case 140472:                    // 'namespace' 'xquery'\n    case 140504:                    // 'processing-instruction' 'xquery'\n    case 141394:                    // 'attribute' '{'\n    case 141408:                    // 'comment' '{'\n    case 141431:                    // 'document' '{'\n    case 141433:                    // 'element' '{'\n    case 141496:                    // 'namespace' '{'\n    case 141514:                    // 'ordered' '{'\n    case 141528:                    // 'processing-instruction' '{'\n    case 141556:                    // 'text' '{'\n    case 141568:                    // 'unordered' '{'\n      parse_PostfixExpr();\n      break;\n    default:\n      parse_AxisStep();\n    }\n    eventHandler.endNonterminal(\"StepExpr\", e0);\n  }\n\n  function try_StepExpr()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(284);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 121:                       // 'element'\n      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 184:                       // 'namespace'\n    case 216:                       // 'processing-instruction'\n      lookahead2W(281);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 96:                        // 'comment'\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 244:                       // 'text'\n    case 256:                       // 'unordered'\n      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 78:                        // 'array'\n    case 124:                       // 'empty-sequence'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 229:                       // 'self'\n      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 120:                       // 'document-node'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 145:                       // 'function'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 185:                       // 'namespace-node'\n    case 186:                       // 'ne'\n    case 191:                       // 'node'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 228:                       // 'score'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 35922                 // 'attribute' 'after'\n     || lk == 35961                 // 'element' 'after'\n     || lk == 36024                 // 'namespace' 'after'\n     || lk == 36056                 // 'processing-instruction' 'after'\n     || lk == 38482                 // 'attribute' 'and'\n     || lk == 38521                 // 'element' 'and'\n     || lk == 38584                 // 'namespace' 'and'\n     || lk == 38616                 // 'processing-instruction' 'and'\n     || lk == 40530                 // 'attribute' 'as'\n     || lk == 40569                 // 'element' 'as'\n     || lk == 40632                 // 'namespace' 'as'\n     || lk == 40664                 // 'processing-instruction' 'as'\n     || lk == 41042                 // 'attribute' 'ascending'\n     || lk == 41081                 // 'element' 'ascending'\n     || lk == 41144                 // 'namespace' 'ascending'\n     || lk == 41176                 // 'processing-instruction' 'ascending'\n     || lk == 41554                 // 'attribute' 'at'\n     || lk == 41593                 // 'element' 'at'\n     || lk == 41656                 // 'namespace' 'at'\n     || lk == 41688                 // 'processing-instruction' 'at'\n     || lk == 43090                 // 'attribute' 'before'\n     || lk == 43129                 // 'element' 'before'\n     || lk == 43192                 // 'namespace' 'before'\n     || lk == 43224                 // 'processing-instruction' 'before'\n     || lk == 45138                 // 'attribute' 'case'\n     || lk == 45177                 // 'element' 'case'\n     || lk == 45240                 // 'namespace' 'case'\n     || lk == 45272                 // 'processing-instruction' 'case'\n     || lk == 45650                 // 'attribute' 'cast'\n     || lk == 45689                 // 'element' 'cast'\n     || lk == 45752                 // 'namespace' 'cast'\n     || lk == 45784                 // 'processing-instruction' 'cast'\n     || lk == 46162                 // 'attribute' 'castable'\n     || lk == 46201                 // 'element' 'castable'\n     || lk == 46264                 // 'namespace' 'castable'\n     || lk == 46296                 // 'processing-instruction' 'castable'\n     || lk == 48210                 // 'attribute' 'collation'\n     || lk == 48249                 // 'element' 'collation'\n     || lk == 48312                 // 'namespace' 'collation'\n     || lk == 48344                 // 'processing-instruction' 'collation'\n     || lk == 53842                 // 'attribute' 'count'\n     || lk == 53881                 // 'element' 'count'\n     || lk == 53944                 // 'namespace' 'count'\n     || lk == 53976                 // 'processing-instruction' 'count'\n     || lk == 55890                 // 'attribute' 'default'\n     || lk == 55929                 // 'element' 'default'\n     || lk == 55992                 // 'namespace' 'default'\n     || lk == 56024                 // 'processing-instruction' 'default'\n     || lk == 57938                 // 'attribute' 'descending'\n     || lk == 57977                 // 'element' 'descending'\n     || lk == 58040                 // 'namespace' 'descending'\n     || lk == 58072                 // 'processing-instruction' 'descending'\n     || lk == 60498                 // 'attribute' 'div'\n     || lk == 60537                 // 'element' 'div'\n     || lk == 60600                 // 'namespace' 'div'\n     || lk == 60632                 // 'processing-instruction' 'div'\n     || lk == 62546                 // 'attribute' 'else'\n     || lk == 62585                 // 'element' 'else'\n     || lk == 62648                 // 'namespace' 'else'\n     || lk == 62680                 // 'processing-instruction' 'else'\n     || lk == 63058                 // 'attribute' 'empty'\n     || lk == 63097                 // 'element' 'empty'\n     || lk == 63160                 // 'namespace' 'empty'\n     || lk == 63192                 // 'processing-instruction' 'empty'\n     || lk == 64594                 // 'attribute' 'end'\n     || lk == 64633                 // 'element' 'end'\n     || lk == 64696                 // 'namespace' 'end'\n     || lk == 64728                 // 'processing-instruction' 'end'\n     || lk == 65618                 // 'attribute' 'eq'\n     || lk == 65657                 // 'element' 'eq'\n     || lk == 65720                 // 'namespace' 'eq'\n     || lk == 65752                 // 'processing-instruction' 'eq'\n     || lk == 67154                 // 'attribute' 'except'\n     || lk == 67193                 // 'element' 'except'\n     || lk == 67256                 // 'namespace' 'except'\n     || lk == 67288                 // 'processing-instruction' 'except'\n     || lk == 70226                 // 'attribute' 'for'\n     || lk == 70265                 // 'element' 'for'\n     || lk == 70328                 // 'namespace' 'for'\n     || lk == 70360                 // 'processing-instruction' 'for'\n     || lk == 74834                 // 'attribute' 'ge'\n     || lk == 74873                 // 'element' 'ge'\n     || lk == 74936                 // 'namespace' 'ge'\n     || lk == 74968                 // 'processing-instruction' 'ge'\n     || lk == 75858                 // 'attribute' 'group'\n     || lk == 75897                 // 'element' 'group'\n     || lk == 75960                 // 'namespace' 'group'\n     || lk == 75992                 // 'processing-instruction' 'group'\n     || lk == 76882                 // 'attribute' 'gt'\n     || lk == 76921                 // 'element' 'gt'\n     || lk == 76984                 // 'namespace' 'gt'\n     || lk == 77016                 // 'processing-instruction' 'gt'\n     || lk == 77394                 // 'attribute' 'idiv'\n     || lk == 77433                 // 'element' 'idiv'\n     || lk == 77496                 // 'namespace' 'idiv'\n     || lk == 77528                 // 'processing-instruction' 'idiv'\n     || lk == 82002                 // 'attribute' 'instance'\n     || lk == 82041                 // 'element' 'instance'\n     || lk == 82104                 // 'namespace' 'instance'\n     || lk == 82136                 // 'processing-instruction' 'instance'\n     || lk == 83026                 // 'attribute' 'intersect'\n     || lk == 83065                 // 'element' 'intersect'\n     || lk == 83128                 // 'namespace' 'intersect'\n     || lk == 83160                 // 'processing-instruction' 'intersect'\n     || lk == 83538                 // 'attribute' 'into'\n     || lk == 83577                 // 'element' 'into'\n     || lk == 83640                 // 'namespace' 'into'\n     || lk == 83672                 // 'processing-instruction' 'into'\n     || lk == 84050                 // 'attribute' 'is'\n     || lk == 84089                 // 'element' 'is'\n     || lk == 84152                 // 'namespace' 'is'\n     || lk == 84184                 // 'processing-instruction' 'is'\n     || lk == 88146                 // 'attribute' 'le'\n     || lk == 88185                 // 'element' 'le'\n     || lk == 88248                 // 'namespace' 'le'\n     || lk == 88280                 // 'processing-instruction' 'le'\n     || lk == 89170                 // 'attribute' 'let'\n     || lk == 89209                 // 'element' 'let'\n     || lk == 89272                 // 'namespace' 'let'\n     || lk == 89304                 // 'processing-instruction' 'let'\n     || lk == 91218                 // 'attribute' 'lt'\n     || lk == 91257                 // 'element' 'lt'\n     || lk == 91320                 // 'namespace' 'lt'\n     || lk == 91352                 // 'processing-instruction' 'lt'\n     || lk == 92242                 // 'attribute' 'mod'\n     || lk == 92281                 // 'element' 'mod'\n     || lk == 92344                 // 'namespace' 'mod'\n     || lk == 92376                 // 'processing-instruction' 'mod'\n     || lk == 92754                 // 'attribute' 'modify'\n     || lk == 92793                 // 'element' 'modify'\n     || lk == 92856                 // 'namespace' 'modify'\n     || lk == 92888                 // 'processing-instruction' 'modify'\n     || lk == 95314                 // 'attribute' 'ne'\n     || lk == 95353                 // 'element' 'ne'\n     || lk == 95416                 // 'namespace' 'ne'\n     || lk == 95448                 // 'processing-instruction' 'ne'\n     || lk == 101458                // 'attribute' 'only'\n     || lk == 101497                // 'element' 'only'\n     || lk == 101560                // 'namespace' 'only'\n     || lk == 101592                // 'processing-instruction' 'only'\n     || lk == 102482                // 'attribute' 'or'\n     || lk == 102521                // 'element' 'or'\n     || lk == 102584                // 'namespace' 'or'\n     || lk == 102616                // 'processing-instruction' 'or'\n     || lk == 102994                // 'attribute' 'order'\n     || lk == 103033                // 'element' 'order'\n     || lk == 103096                // 'namespace' 'order'\n     || lk == 103128                // 'processing-instruction' 'order'\n     || lk == 112722                // 'attribute' 'return'\n     || lk == 112761                // 'element' 'return'\n     || lk == 112824                // 'namespace' 'return'\n     || lk == 112856                // 'processing-instruction' 'return'\n     || lk == 114770                // 'attribute' 'satisfies'\n     || lk == 114809                // 'element' 'satisfies'\n     || lk == 114872                // 'namespace' 'satisfies'\n     || lk == 114904                // 'processing-instruction' 'satisfies'\n     || lk == 120914                // 'attribute' 'stable'\n     || lk == 120953                // 'element' 'stable'\n     || lk == 121016                // 'namespace' 'stable'\n     || lk == 121048                // 'processing-instruction' 'stable'\n     || lk == 121426                // 'attribute' 'start'\n     || lk == 121465                // 'element' 'start'\n     || lk == 121528                // 'namespace' 'start'\n     || lk == 121560                // 'processing-instruction' 'start'\n     || lk == 127058                // 'attribute' 'to'\n     || lk == 127097                // 'element' 'to'\n     || lk == 127160                // 'namespace' 'to'\n     || lk == 127192                // 'processing-instruction' 'to'\n     || lk == 127570                // 'attribute' 'treat'\n     || lk == 127609                // 'element' 'treat'\n     || lk == 127672                // 'namespace' 'treat'\n     || lk == 127704                // 'processing-instruction' 'treat'\n     || lk == 130130                // 'attribute' 'union'\n     || lk == 130169                // 'element' 'union'\n     || lk == 130232                // 'namespace' 'union'\n     || lk == 130264                // 'processing-instruction' 'union'\n     || lk == 136274                // 'attribute' 'where'\n     || lk == 136313                // 'element' 'where'\n     || lk == 136376                // 'namespace' 'where'\n     || lk == 136408                // 'processing-instruction' 'where'\n     || lk == 138322                // 'attribute' 'with'\n     || lk == 138361                // 'element' 'with'\n     || lk == 138424                // 'namespace' 'with'\n     || lk == 138456)               // 'processing-instruction' 'with'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          memoize(4, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(4, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '%'\n    case 34:                        // '('\n    case 44:                        // '.'\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n    case 68:                        // '['\n    case 276:                       // '{'\n    case 278:                       // '{|'\n    case 3154:                      // 'attribute' EQName^Token\n    case 3193:                      // 'element' EQName^Token\n    case 9912:                      // 'namespace' NCName^Token\n    case 9944:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14926:                     // 'array' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14968:                     // 'document-node' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14972:                     // 'empty-sequence' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14993:                     // 'function' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15000:                     // 'if' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15013:                     // 'item' '#'\n    case 15014:                     // 'json' '#'\n    case 15015:                     // 'json-item' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15033:                     // 'namespace-node' '#'\n    case 15034:                     // 'ne' '#'\n    case 15039:                     // 'node' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15074:                     // 'schema-attribute' '#'\n    case 15075:                     // 'schema-element' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15090:                     // 'structured-item' '#'\n    case 15091:                     // 'switch' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15101:                     // 'typeswitch' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17553:                     // 'function' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n    case 36946:                     // 'attribute' 'allowing'\n    case 36985:                     // 'element' 'allowing'\n    case 37048:                     // 'namespace' 'allowing'\n    case 37080:                     // 'processing-instruction' 'allowing'\n    case 37458:                     // 'attribute' 'ancestor'\n    case 37497:                     // 'element' 'ancestor'\n    case 37560:                     // 'namespace' 'ancestor'\n    case 37592:                     // 'processing-instruction' 'ancestor'\n    case 37970:                     // 'attribute' 'ancestor-or-self'\n    case 38009:                     // 'element' 'ancestor-or-self'\n    case 38072:                     // 'namespace' 'ancestor-or-self'\n    case 38104:                     // 'processing-instruction' 'ancestor-or-self'\n    case 39506:                     // 'attribute' 'append'\n    case 39545:                     // 'element' 'append'\n    case 39608:                     // 'namespace' 'append'\n    case 39640:                     // 'processing-instruction' 'append'\n    case 40018:                     // 'attribute' 'array'\n    case 40057:                     // 'element' 'array'\n    case 42066:                     // 'attribute' 'attribute'\n    case 42105:                     // 'element' 'attribute'\n    case 42168:                     // 'namespace' 'attribute'\n    case 42200:                     // 'processing-instruction' 'attribute'\n    case 42578:                     // 'attribute' 'base-uri'\n    case 42617:                     // 'element' 'base-uri'\n    case 42680:                     // 'namespace' 'base-uri'\n    case 42712:                     // 'processing-instruction' 'base-uri'\n    case 43602:                     // 'attribute' 'boundary-space'\n    case 43641:                     // 'element' 'boundary-space'\n    case 43704:                     // 'namespace' 'boundary-space'\n    case 43736:                     // 'processing-instruction' 'boundary-space'\n    case 44114:                     // 'attribute' 'break'\n    case 44153:                     // 'element' 'break'\n    case 44216:                     // 'namespace' 'break'\n    case 44248:                     // 'processing-instruction' 'break'\n    case 46674:                     // 'attribute' 'catch'\n    case 46713:                     // 'element' 'catch'\n    case 46776:                     // 'namespace' 'catch'\n    case 46808:                     // 'processing-instruction' 'catch'\n    case 47698:                     // 'attribute' 'child'\n    case 47737:                     // 'element' 'child'\n    case 47800:                     // 'namespace' 'child'\n    case 47832:                     // 'processing-instruction' 'child'\n    case 49234:                     // 'attribute' 'comment'\n    case 49273:                     // 'element' 'comment'\n    case 49336:                     // 'namespace' 'comment'\n    case 49368:                     // 'processing-instruction' 'comment'\n    case 49746:                     // 'attribute' 'constraint'\n    case 49785:                     // 'element' 'constraint'\n    case 49848:                     // 'namespace' 'constraint'\n    case 49880:                     // 'processing-instruction' 'constraint'\n    case 50258:                     // 'attribute' 'construction'\n    case 50297:                     // 'element' 'construction'\n    case 50360:                     // 'namespace' 'construction'\n    case 50392:                     // 'processing-instruction' 'construction'\n    case 51794:                     // 'attribute' 'context'\n    case 51833:                     // 'element' 'context'\n    case 51896:                     // 'namespace' 'context'\n    case 51928:                     // 'processing-instruction' 'context'\n    case 52306:                     // 'attribute' 'continue'\n    case 52345:                     // 'element' 'continue'\n    case 52408:                     // 'namespace' 'continue'\n    case 52440:                     // 'processing-instruction' 'continue'\n    case 52818:                     // 'attribute' 'copy'\n    case 52857:                     // 'element' 'copy'\n    case 52920:                     // 'namespace' 'copy'\n    case 52952:                     // 'processing-instruction' 'copy'\n    case 53330:                     // 'attribute' 'copy-namespaces'\n    case 53369:                     // 'element' 'copy-namespaces'\n    case 53432:                     // 'namespace' 'copy-namespaces'\n    case 53464:                     // 'processing-instruction' 'copy-namespaces'\n    case 54354:                     // 'attribute' 'decimal-format'\n    case 54393:                     // 'element' 'decimal-format'\n    case 54456:                     // 'namespace' 'decimal-format'\n    case 54488:                     // 'processing-instruction' 'decimal-format'\n    case 55378:                     // 'attribute' 'declare'\n    case 55417:                     // 'element' 'declare'\n    case 55480:                     // 'namespace' 'declare'\n    case 55512:                     // 'processing-instruction' 'declare'\n    case 56402:                     // 'attribute' 'delete'\n    case 56441:                     // 'element' 'delete'\n    case 56504:                     // 'namespace' 'delete'\n    case 56536:                     // 'processing-instruction' 'delete'\n    case 56914:                     // 'attribute' 'descendant'\n    case 56953:                     // 'element' 'descendant'\n    case 57016:                     // 'namespace' 'descendant'\n    case 57048:                     // 'processing-instruction' 'descendant'\n    case 57426:                     // 'attribute' 'descendant-or-self'\n    case 57465:                     // 'element' 'descendant-or-self'\n    case 57528:                     // 'namespace' 'descendant-or-self'\n    case 57560:                     // 'processing-instruction' 'descendant-or-self'\n    case 61010:                     // 'attribute' 'document'\n    case 61049:                     // 'element' 'document'\n    case 61112:                     // 'namespace' 'document'\n    case 61144:                     // 'processing-instruction' 'document'\n    case 61522:                     // 'attribute' 'document-node'\n    case 61561:                     // 'element' 'document-node'\n    case 61624:                     // 'namespace' 'document-node'\n    case 61656:                     // 'processing-instruction' 'document-node'\n    case 62034:                     // 'attribute' 'element'\n    case 62073:                     // 'element' 'element'\n    case 62136:                     // 'namespace' 'element'\n    case 62168:                     // 'processing-instruction' 'element'\n    case 63570:                     // 'attribute' 'empty-sequence'\n    case 63609:                     // 'element' 'empty-sequence'\n    case 63672:                     // 'namespace' 'empty-sequence'\n    case 63704:                     // 'processing-instruction' 'empty-sequence'\n    case 64082:                     // 'attribute' 'encoding'\n    case 64121:                     // 'element' 'encoding'\n    case 64184:                     // 'namespace' 'encoding'\n    case 64216:                     // 'processing-instruction' 'encoding'\n    case 66130:                     // 'attribute' 'every'\n    case 66169:                     // 'element' 'every'\n    case 66232:                     // 'namespace' 'every'\n    case 66264:                     // 'processing-instruction' 'every'\n    case 67666:                     // 'attribute' 'exit'\n    case 67705:                     // 'element' 'exit'\n    case 67768:                     // 'namespace' 'exit'\n    case 67800:                     // 'processing-instruction' 'exit'\n    case 68178:                     // 'attribute' 'external'\n    case 68217:                     // 'element' 'external'\n    case 68280:                     // 'namespace' 'external'\n    case 68312:                     // 'processing-instruction' 'external'\n    case 68690:                     // 'attribute' 'first'\n    case 68729:                     // 'element' 'first'\n    case 68792:                     // 'namespace' 'first'\n    case 68824:                     // 'processing-instruction' 'first'\n    case 69202:                     // 'attribute' 'following'\n    case 69241:                     // 'element' 'following'\n    case 69304:                     // 'namespace' 'following'\n    case 69336:                     // 'processing-instruction' 'following'\n    case 69714:                     // 'attribute' 'following-sibling'\n    case 69753:                     // 'element' 'following-sibling'\n    case 69816:                     // 'namespace' 'following-sibling'\n    case 69848:                     // 'processing-instruction' 'following-sibling'\n    case 72274:                     // 'attribute' 'ft-option'\n    case 72313:                     // 'element' 'ft-option'\n    case 72376:                     // 'namespace' 'ft-option'\n    case 72408:                     // 'processing-instruction' 'ft-option'\n    case 74322:                     // 'attribute' 'function'\n    case 74361:                     // 'element' 'function'\n    case 74424:                     // 'namespace' 'function'\n    case 74456:                     // 'processing-instruction' 'function'\n    case 77906:                     // 'attribute' 'if'\n    case 77945:                     // 'element' 'if'\n    case 78008:                     // 'namespace' 'if'\n    case 78040:                     // 'processing-instruction' 'if'\n    case 78418:                     // 'attribute' 'import'\n    case 78457:                     // 'element' 'import'\n    case 78520:                     // 'namespace' 'import'\n    case 78552:                     // 'processing-instruction' 'import'\n    case 78930:                     // 'attribute' 'in'\n    case 78969:                     // 'element' 'in'\n    case 79032:                     // 'namespace' 'in'\n    case 79064:                     // 'processing-instruction' 'in'\n    case 79442:                     // 'attribute' 'index'\n    case 79481:                     // 'element' 'index'\n    case 79544:                     // 'namespace' 'index'\n    case 79576:                     // 'processing-instruction' 'index'\n    case 81490:                     // 'attribute' 'insert'\n    case 81529:                     // 'element' 'insert'\n    case 81592:                     // 'namespace' 'insert'\n    case 81624:                     // 'processing-instruction' 'insert'\n    case 82514:                     // 'attribute' 'integrity'\n    case 82553:                     // 'element' 'integrity'\n    case 82616:                     // 'namespace' 'integrity'\n    case 82648:                     // 'processing-instruction' 'integrity'\n    case 84562:                     // 'attribute' 'item'\n    case 84601:                     // 'element' 'item'\n    case 84664:                     // 'namespace' 'item'\n    case 84696:                     // 'processing-instruction' 'item'\n    case 85074:                     // 'attribute' 'json'\n    case 85113:                     // 'element' 'json'\n    case 85176:                     // 'namespace' 'json'\n    case 85208:                     // 'processing-instruction' 'json'\n    case 85586:                     // 'attribute' 'json-item'\n    case 85625:                     // 'element' 'json-item'\n    case 87122:                     // 'attribute' 'last'\n    case 87161:                     // 'element' 'last'\n    case 87224:                     // 'namespace' 'last'\n    case 87256:                     // 'processing-instruction' 'last'\n    case 87634:                     // 'attribute' 'lax'\n    case 87673:                     // 'element' 'lax'\n    case 87736:                     // 'namespace' 'lax'\n    case 87768:                     // 'processing-instruction' 'lax'\n    case 90194:                     // 'attribute' 'loop'\n    case 90233:                     // 'element' 'loop'\n    case 90296:                     // 'namespace' 'loop'\n    case 90328:                     // 'processing-instruction' 'loop'\n    case 93266:                     // 'attribute' 'module'\n    case 93305:                     // 'element' 'module'\n    case 93368:                     // 'namespace' 'module'\n    case 93400:                     // 'processing-instruction' 'module'\n    case 94290:                     // 'attribute' 'namespace'\n    case 94329:                     // 'element' 'namespace'\n    case 94392:                     // 'namespace' 'namespace'\n    case 94424:                     // 'processing-instruction' 'namespace'\n    case 94802:                     // 'attribute' 'namespace-node'\n    case 94841:                     // 'element' 'namespace-node'\n    case 94904:                     // 'namespace' 'namespace-node'\n    case 94936:                     // 'processing-instruction' 'namespace-node'\n    case 97874:                     // 'attribute' 'node'\n    case 97913:                     // 'element' 'node'\n    case 97976:                     // 'namespace' 'node'\n    case 98008:                     // 'processing-instruction' 'node'\n    case 98386:                     // 'attribute' 'nodes'\n    case 98425:                     // 'element' 'nodes'\n    case 98488:                     // 'namespace' 'nodes'\n    case 98520:                     // 'processing-instruction' 'nodes'\n    case 99410:                     // 'attribute' 'object'\n    case 99449:                     // 'element' 'object'\n    case 99512:                     // 'namespace' 'object'\n    case 99544:                     // 'processing-instruction' 'object'\n    case 101970:                    // 'attribute' 'option'\n    case 102009:                    // 'element' 'option'\n    case 102072:                    // 'namespace' 'option'\n    case 102104:                    // 'processing-instruction' 'option'\n    case 103506:                    // 'attribute' 'ordered'\n    case 103545:                    // 'element' 'ordered'\n    case 103608:                    // 'namespace' 'ordered'\n    case 103640:                    // 'processing-instruction' 'ordered'\n    case 104018:                    // 'attribute' 'ordering'\n    case 104057:                    // 'element' 'ordering'\n    case 104120:                    // 'namespace' 'ordering'\n    case 104152:                    // 'processing-instruction' 'ordering'\n    case 105554:                    // 'attribute' 'parent'\n    case 105593:                    // 'element' 'parent'\n    case 105656:                    // 'namespace' 'parent'\n    case 105688:                    // 'processing-instruction' 'parent'\n    case 108626:                    // 'attribute' 'preceding'\n    case 108665:                    // 'element' 'preceding'\n    case 108728:                    // 'namespace' 'preceding'\n    case 108760:                    // 'processing-instruction' 'preceding'\n    case 109138:                    // 'attribute' 'preceding-sibling'\n    case 109177:                    // 'element' 'preceding-sibling'\n    case 109240:                    // 'namespace' 'preceding-sibling'\n    case 109272:                    // 'processing-instruction' 'preceding-sibling'\n    case 110674:                    // 'attribute' 'processing-instruction'\n    case 110713:                    // 'element' 'processing-instruction'\n    case 110776:                    // 'namespace' 'processing-instruction'\n    case 110808:                    // 'processing-instruction' 'processing-instruction'\n    case 111698:                    // 'attribute' 'rename'\n    case 111737:                    // 'element' 'rename'\n    case 111800:                    // 'namespace' 'rename'\n    case 111832:                    // 'processing-instruction' 'rename'\n    case 112210:                    // 'attribute' 'replace'\n    case 112249:                    // 'element' 'replace'\n    case 112312:                    // 'namespace' 'replace'\n    case 112344:                    // 'processing-instruction' 'replace'\n    case 113234:                    // 'attribute' 'returning'\n    case 113273:                    // 'element' 'returning'\n    case 113336:                    // 'namespace' 'returning'\n    case 113368:                    // 'processing-instruction' 'returning'\n    case 113746:                    // 'attribute' 'revalidation'\n    case 113785:                    // 'element' 'revalidation'\n    case 113848:                    // 'namespace' 'revalidation'\n    case 113880:                    // 'processing-instruction' 'revalidation'\n    case 115282:                    // 'attribute' 'schema'\n    case 115321:                    // 'element' 'schema'\n    case 115384:                    // 'namespace' 'schema'\n    case 115416:                    // 'processing-instruction' 'schema'\n    case 115794:                    // 'attribute' 'schema-attribute'\n    case 115833:                    // 'element' 'schema-attribute'\n    case 115896:                    // 'namespace' 'schema-attribute'\n    case 115928:                    // 'processing-instruction' 'schema-attribute'\n    case 116306:                    // 'attribute' 'schema-element'\n    case 116345:                    // 'element' 'schema-element'\n    case 116408:                    // 'namespace' 'schema-element'\n    case 116440:                    // 'processing-instruction' 'schema-element'\n    case 116818:                    // 'attribute' 'score'\n    case 116857:                    // 'element' 'score'\n    case 116920:                    // 'namespace' 'score'\n    case 116952:                    // 'processing-instruction' 'score'\n    case 117330:                    // 'attribute' 'self'\n    case 117369:                    // 'element' 'self'\n    case 117432:                    // 'namespace' 'self'\n    case 117464:                    // 'processing-instruction' 'self'\n    case 119890:                    // 'attribute' 'sliding'\n    case 119929:                    // 'element' 'sliding'\n    case 119992:                    // 'namespace' 'sliding'\n    case 120024:                    // 'processing-instruction' 'sliding'\n    case 120402:                    // 'attribute' 'some'\n    case 120441:                    // 'element' 'some'\n    case 120504:                    // 'namespace' 'some'\n    case 120536:                    // 'processing-instruction' 'some'\n    case 122962:                    // 'attribute' 'strict'\n    case 123001:                    // 'element' 'strict'\n    case 123064:                    // 'namespace' 'strict'\n    case 123096:                    // 'processing-instruction' 'strict'\n    case 123986:                    // 'attribute' 'structured-item'\n    case 124025:                    // 'element' 'structured-item'\n    case 124498:                    // 'attribute' 'switch'\n    case 124537:                    // 'element' 'switch'\n    case 124600:                    // 'namespace' 'switch'\n    case 124632:                    // 'processing-instruction' 'switch'\n    case 125010:                    // 'attribute' 'text'\n    case 125049:                    // 'element' 'text'\n    case 125112:                    // 'namespace' 'text'\n    case 125144:                    // 'processing-instruction' 'text'\n    case 128082:                    // 'attribute' 'try'\n    case 128121:                    // 'element' 'try'\n    case 128184:                    // 'namespace' 'try'\n    case 128216:                    // 'processing-instruction' 'try'\n    case 128594:                    // 'attribute' 'tumbling'\n    case 128633:                    // 'element' 'tumbling'\n    case 128696:                    // 'namespace' 'tumbling'\n    case 128728:                    // 'processing-instruction' 'tumbling'\n    case 129106:                    // 'attribute' 'type'\n    case 129145:                    // 'element' 'type'\n    case 129208:                    // 'namespace' 'type'\n    case 129240:                    // 'processing-instruction' 'type'\n    case 129618:                    // 'attribute' 'typeswitch'\n    case 129657:                    // 'element' 'typeswitch'\n    case 129720:                    // 'namespace' 'typeswitch'\n    case 129752:                    // 'processing-instruction' 'typeswitch'\n    case 131154:                    // 'attribute' 'unordered'\n    case 131193:                    // 'element' 'unordered'\n    case 131256:                    // 'namespace' 'unordered'\n    case 131288:                    // 'processing-instruction' 'unordered'\n    case 131666:                    // 'attribute' 'updating'\n    case 131705:                    // 'element' 'updating'\n    case 131768:                    // 'namespace' 'updating'\n    case 131800:                    // 'processing-instruction' 'updating'\n    case 133202:                    // 'attribute' 'validate'\n    case 133241:                    // 'element' 'validate'\n    case 133304:                    // 'namespace' 'validate'\n    case 133336:                    // 'processing-instruction' 'validate'\n    case 133714:                    // 'attribute' 'value'\n    case 133753:                    // 'element' 'value'\n    case 133816:                    // 'namespace' 'value'\n    case 133848:                    // 'processing-instruction' 'value'\n    case 134226:                    // 'attribute' 'variable'\n    case 134265:                    // 'element' 'variable'\n    case 134328:                    // 'namespace' 'variable'\n    case 134360:                    // 'processing-instruction' 'variable'\n    case 134738:                    // 'attribute' 'version'\n    case 134777:                    // 'element' 'version'\n    case 134840:                    // 'namespace' 'version'\n    case 134872:                    // 'processing-instruction' 'version'\n    case 136786:                    // 'attribute' 'while'\n    case 136825:                    // 'element' 'while'\n    case 136888:                    // 'namespace' 'while'\n    case 136920:                    // 'processing-instruction' 'while'\n    case 140370:                    // 'attribute' 'xquery'\n    case 140409:                    // 'element' 'xquery'\n    case 140472:                    // 'namespace' 'xquery'\n    case 140504:                    // 'processing-instruction' 'xquery'\n    case 141394:                    // 'attribute' '{'\n    case 141408:                    // 'comment' '{'\n    case 141431:                    // 'document' '{'\n    case 141433:                    // 'element' '{'\n    case 141496:                    // 'namespace' '{'\n    case 141514:                    // 'ordered' '{'\n    case 141528:                    // 'processing-instruction' '{'\n    case 141556:                    // 'text' '{'\n    case 141568:                    // 'unordered' '{'\n      try_PostfixExpr();\n      break;\n    case -3:\n      break;\n    default:\n      try_AxisStep();\n    }\n  }\n\n  function parse_AxisStep()\n  {\n    eventHandler.startNonterminal(\"AxisStep\", e0);\n    switch (l1)\n    {\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 45:                        // '..'\n    case 26185:                     // 'ancestor' '::'\n    case 26186:                     // 'ancestor-or-self' '::'\n    case 26318:                     // 'parent' '::'\n    case 26324:                     // 'preceding' '::'\n    case 26325:                     // 'preceding-sibling' '::'\n      parse_ReverseStep();\n      break;\n    default:\n      parse_ForwardStep();\n    }\n    lookahead1W(237);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    whitespace();\n    parse_PredicateList();\n    eventHandler.endNonterminal(\"AxisStep\", e0);\n  }\n\n  function try_AxisStep()\n  {\n    switch (l1)\n    {\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 45:                        // '..'\n    case 26185:                     // 'ancestor' '::'\n    case 26186:                     // 'ancestor-or-self' '::'\n    case 26318:                     // 'parent' '::'\n    case 26324:                     // 'preceding' '::'\n    case 26325:                     // 'preceding-sibling' '::'\n      try_ReverseStep();\n      break;\n    default:\n      try_ForwardStep();\n    }\n    lookahead1W(237);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    try_PredicateList();\n  }\n\n  function parse_ForwardStep()\n  {\n    eventHandler.startNonterminal(\"ForwardStep\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 229:                       // 'self'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26194:                     // 'attribute' '::'\n    case 26205:                     // 'child' '::'\n    case 26223:                     // 'descendant' '::'\n    case 26224:                     // 'descendant-or-self' '::'\n    case 26247:                     // 'following' '::'\n    case 26248:                     // 'following-sibling' '::'\n    case 26341:                     // 'self' '::'\n      parse_ForwardAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n      break;\n    default:\n      parse_AbbrevForwardStep();\n    }\n    eventHandler.endNonterminal(\"ForwardStep\", e0);\n  }\n\n  function try_ForwardStep()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 229:                       // 'self'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26194:                     // 'attribute' '::'\n    case 26205:                     // 'child' '::'\n    case 26223:                     // 'descendant' '::'\n    case 26224:                     // 'descendant-or-self' '::'\n    case 26247:                     // 'following' '::'\n    case 26248:                     // 'following-sibling' '::'\n    case 26341:                     // 'self' '::'\n      try_ForwardAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n      break;\n    default:\n      try_AbbrevForwardStep();\n    }\n  }\n\n  function parse_ForwardAxis()\n  {\n    eventHandler.startNonterminal(\"ForwardAxis\", e0);\n    switch (l1)\n    {\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    default:\n      shift(135);                   // 'following'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ForwardAxis\", e0);\n  }\n\n  function try_ForwardAxis()\n  {\n    switch (l1)\n    {\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    default:\n      shiftT(135);                  // 'following'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n    }\n  }\n\n  function parse_AbbrevForwardStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevForwardStep\", e0);\n    if (l1 == 66)                   // '@'\n    {\n      shift(66);                    // '@'\n    }\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NodeTest();\n    eventHandler.endNonterminal(\"AbbrevForwardStep\", e0);\n  }\n\n  function try_AbbrevForwardStep()\n  {\n    if (l1 == 66)                   // '@'\n    {\n      shiftT(66);                   // '@'\n    }\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_NodeTest();\n  }\n\n  function parse_ReverseStep()\n  {\n    eventHandler.startNonterminal(\"ReverseStep\", e0);\n    switch (l1)\n    {\n    case 45:                        // '..'\n      parse_AbbrevReverseStep();\n      break;\n    default:\n      parse_ReverseAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n    }\n    eventHandler.endNonterminal(\"ReverseStep\", e0);\n  }\n\n  function try_ReverseStep()\n  {\n    switch (l1)\n    {\n    case 45:                        // '..'\n      try_AbbrevReverseStep();\n      break;\n    default:\n      try_ReverseAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n    }\n  }\n\n  function parse_ReverseAxis()\n  {\n    eventHandler.startNonterminal(\"ReverseAxis\", e0);\n    switch (l1)\n    {\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    default:\n      shift(74);                    // 'ancestor-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ReverseAxis\", e0);\n  }\n\n  function try_ReverseAxis()\n  {\n    switch (l1)\n    {\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    default:\n      shiftT(74);                   // 'ancestor-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n    }\n  }\n\n  function parse_AbbrevReverseStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevReverseStep\", e0);\n    shift(45);                      // '..'\n    eventHandler.endNonterminal(\"AbbrevReverseStep\", e0);\n  }\n\n  function try_AbbrevReverseStep()\n  {\n    shiftT(45);                     // '..'\n  }\n\n  function parse_NodeTest()\n  {\n    eventHandler.startNonterminal(\"NodeTest\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 244:                       // 'text'\n      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      parse_KindTest();\n      break;\n    default:\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"NodeTest\", e0);\n  }\n\n  function try_NodeTest()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 244:                       // 'text'\n      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      try_KindTest();\n      break;\n    default:\n      try_NameTest();\n    }\n  }\n\n  function parse_NameTest()\n  {\n    eventHandler.startNonterminal(\"NameTest\", e0);\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shift(5);                     // Wildcard\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"NameTest\", e0);\n  }\n\n  function try_NameTest()\n  {\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shiftT(5);                    // Wildcard\n      break;\n    default:\n      try_EQName();\n    }\n  }\n\n  function parse_PostfixExpr()\n  {\n    eventHandler.startNonterminal(\"PostfixExpr\", e0);\n    parse_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      if (l1 != 34                  // '('\n       && l1 != 68)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 68:                      // '['\n        whitespace();\n        parse_Predicate();\n        break;\n      default:\n        whitespace();\n        parse_ArgumentList();\n      }\n    }\n    eventHandler.endNonterminal(\"PostfixExpr\", e0);\n  }\n\n  function try_PostfixExpr()\n  {\n    try_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      if (l1 != 34                  // '('\n       && l1 != 68)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 68:                      // '['\n        try_Predicate();\n        break;\n      default:\n        try_ArgumentList();\n      }\n    }\n  }\n\n  function parse_ArgumentList()\n  {\n    eventHandler.startNonterminal(\"ArgumentList\", e0);\n    shift(34);                      // '('\n    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_Argument();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_Argument();\n      }\n    }\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ArgumentList\", e0);\n  }\n\n  function try_ArgumentList()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      try_Argument();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_Argument();\n      }\n    }\n    shiftT(37);                     // ')'\n  }\n\n  function parse_PredicateList()\n  {\n    eventHandler.startNonterminal(\"PredicateList\", e0);\n    for (;;)\n    {\n      lookahead1W(237);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 68)                 // '['\n      {\n        break;\n      }\n      whitespace();\n      parse_Predicate();\n    }\n    eventHandler.endNonterminal(\"PredicateList\", e0);\n  }\n\n  function try_PredicateList()\n  {\n    for (;;)\n    {\n      lookahead1W(237);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 68)                 // '['\n      {\n        break;\n      }\n      try_Predicate();\n    }\n  }\n\n  function parse_Predicate()\n  {\n    eventHandler.startNonterminal(\"Predicate\", e0);\n    shift(68);                      // '['\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(69);                      // ']'\n    eventHandler.endNonterminal(\"Predicate\", e0);\n  }\n\n  function try_Predicate()\n  {\n    shiftT(68);                     // '['\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(69);                     // ']'\n  }\n\n  function parse_Literal()\n  {\n    eventHandler.startNonterminal(\"Literal\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      parse_NumericLiteral();\n    }\n    eventHandler.endNonterminal(\"Literal\", e0);\n  }\n\n  function try_Literal()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      try_NumericLiteral();\n    }\n  }\n\n  function parse_NumericLiteral()\n  {\n    eventHandler.startNonterminal(\"NumericLiteral\", e0);\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shift(8);                     // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shift(9);                     // DecimalLiteral\n      break;\n    default:\n      shift(10);                    // DoubleLiteral\n    }\n    eventHandler.endNonterminal(\"NumericLiteral\", e0);\n  }\n\n  function try_NumericLiteral()\n  {\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shiftT(9);                    // DecimalLiteral\n      break;\n    default:\n      shiftT(10);                   // DoubleLiteral\n    }\n  }\n\n  function parse_VarRef()\n  {\n    eventHandler.startNonterminal(\"VarRef\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"VarRef\", e0);\n  }\n\n  function try_VarRef()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_VarName()\n  {\n    eventHandler.startNonterminal(\"VarName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"VarName\", e0);\n  }\n\n  function try_VarName()\n  {\n    try_EQName();\n  }\n\n  function parse_ParenthesizedExpr()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedExpr\", e0);\n    shift(34);                      // '('\n    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedExpr\", e0);\n  }\n\n  function try_ParenthesizedExpr()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      try_Expr();\n    }\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ContextItemExpr()\n  {\n    eventHandler.startNonterminal(\"ContextItemExpr\", e0);\n    shift(44);                      // '.'\n    eventHandler.endNonterminal(\"ContextItemExpr\", e0);\n  }\n\n  function try_ContextItemExpr()\n  {\n    shiftT(44);                     // '.'\n  }\n\n  function parse_OrderedExpr()\n  {\n    eventHandler.startNonterminal(\"OrderedExpr\", e0);\n    shift(202);                     // 'ordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"OrderedExpr\", e0);\n  }\n\n  function try_OrderedExpr()\n  {\n    shiftT(202);                    // 'ordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_UnorderedExpr()\n  {\n    eventHandler.startNonterminal(\"UnorderedExpr\", e0);\n    shift(256);                     // 'unordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"UnorderedExpr\", e0);\n  }\n\n  function try_UnorderedExpr()\n  {\n    shiftT(256);                    // 'unordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FunctionCall()\n  {\n    eventHandler.startNonterminal(\"FunctionCall\", e0);\n    parse_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    whitespace();\n    parse_ArgumentList();\n    eventHandler.endNonterminal(\"FunctionCall\", e0);\n  }\n\n  function try_FunctionCall()\n  {\n    try_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    try_ArgumentList();\n  }\n\n  function parse_Argument()\n  {\n    eventHandler.startNonterminal(\"Argument\", e0);\n    switch (l1)\n    {\n    case 64:                        // '?'\n      parse_ArgumentPlaceholder();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Argument\", e0);\n  }\n\n  function try_Argument()\n  {\n    switch (l1)\n    {\n    case 64:                        // '?'\n      try_ArgumentPlaceholder();\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_ArgumentPlaceholder()\n  {\n    eventHandler.startNonterminal(\"ArgumentPlaceholder\", e0);\n    shift(64);                      // '?'\n    eventHandler.endNonterminal(\"ArgumentPlaceholder\", e0);\n  }\n\n  function try_ArgumentPlaceholder()\n  {\n    shiftT(64);                     // '?'\n  }\n\n  function parse_Constructor()\n  {\n    eventHandler.startNonterminal(\"Constructor\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    default:\n      parse_ComputedConstructor();\n    }\n    eventHandler.endNonterminal(\"Constructor\", e0);\n  }\n\n  function try_Constructor()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      try_DirectConstructor();\n      break;\n    default:\n      try_ComputedConstructor();\n    }\n  }\n\n  function parse_DirectConstructor()\n  {\n    eventHandler.startNonterminal(\"DirectConstructor\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n      parse_DirElemConstructor();\n      break;\n    case 55:                        // '<!--'\n      parse_DirCommentConstructor();\n      break;\n    default:\n      parse_DirPIConstructor();\n    }\n    eventHandler.endNonterminal(\"DirectConstructor\", e0);\n  }\n\n  function try_DirectConstructor()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n      try_DirElemConstructor();\n      break;\n    case 55:                        // '<!--'\n      try_DirCommentConstructor();\n      break;\n    default:\n      try_DirPIConstructor();\n    }\n  }\n\n  function parse_DirElemConstructor()\n  {\n    eventHandler.startNonterminal(\"DirElemConstructor\", e0);\n    shift(54);                      // '<'\n    lookahead1(4);                  // QName\n    shift(20);                      // QName\n    parse_DirAttributeList();\n    switch (l1)\n    {\n    case 48:                        // '/>'\n      shift(48);                    // '/>'\n      break;\n    default:\n      shift(61);                    // '>'\n      for (;;)\n      {\n        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 56)               // '</'\n        {\n          break;\n        }\n        parse_DirElemContent();\n      }\n      shift(56);                    // '</'\n      lookahead1(4);                // QName\n      shift(20);                    // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shift(21);                  // S\n      }\n      lookahead1(8);                // '>'\n      shift(61);                    // '>'\n    }\n    eventHandler.endNonterminal(\"DirElemConstructor\", e0);\n  }\n\n  function try_DirElemConstructor()\n  {\n    shiftT(54);                     // '<'\n    lookahead1(4);                  // QName\n    shiftT(20);                     // QName\n    try_DirAttributeList();\n    switch (l1)\n    {\n    case 48:                        // '/>'\n      shiftT(48);                   // '/>'\n      break;\n    default:\n      shiftT(61);                   // '>'\n      for (;;)\n      {\n        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 56)               // '</'\n        {\n          break;\n        }\n        try_DirElemContent();\n      }\n      shiftT(56);                   // '</'\n      lookahead1(4);                // QName\n      shiftT(20);                   // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shiftT(21);                 // S\n      }\n      lookahead1(8);                // '>'\n      shiftT(61);                   // '>'\n    }\n  }\n\n  function parse_DirAttributeList()\n  {\n    eventHandler.startNonterminal(\"DirAttributeList\", e0);\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shift(21);                    // S\n      lookahead1(91);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shift(20);                  // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        lookahead1(7);              // '='\n        shift(60);                  // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        parse_DirAttributeValue();\n      }\n    }\n    eventHandler.endNonterminal(\"DirAttributeList\", e0);\n  }\n\n  function try_DirAttributeList()\n  {\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shiftT(21);                   // S\n      lookahead1(91);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shiftT(20);                 // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        lookahead1(7);              // '='\n        shiftT(60);                 // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        try_DirAttributeValue();\n      }\n    }\n  }\n\n  function parse_DirAttributeValue()\n  {\n    eventHandler.startNonterminal(\"DirAttributeValue\", e0);\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shift(28);                    // '\"'\n      for (;;)\n      {\n        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shift(13);                // EscapeQuot\n          break;\n        default:\n          parse_QuotAttrValueContent();\n        }\n      }\n      shift(28);                    // '\"'\n      break;\n    default:\n      shift(33);                    // \"'\"\n      for (;;)\n      {\n        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 33)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shift(14);                // EscapeApos\n          break;\n        default:\n          parse_AposAttrValueContent();\n        }\n      }\n      shift(33);                    // \"'\"\n    }\n    eventHandler.endNonterminal(\"DirAttributeValue\", e0);\n  }\n\n  function try_DirAttributeValue()\n  {\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shiftT(28);                   // '\"'\n      for (;;)\n      {\n        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shiftT(13);               // EscapeQuot\n          break;\n        default:\n          try_QuotAttrValueContent();\n        }\n      }\n      shiftT(28);                   // '\"'\n      break;\n    default:\n      shiftT(33);                   // \"'\"\n      for (;;)\n      {\n        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 33)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shiftT(14);               // EscapeApos\n          break;\n        default:\n          try_AposAttrValueContent();\n        }\n      }\n      shiftT(33);                   // \"'\"\n    }\n  }\n\n  function parse_QuotAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"QuotAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shift(16);                    // QuotAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"QuotAttrValueContent\", e0);\n  }\n\n  function try_QuotAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shiftT(16);                   // QuotAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_AposAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"AposAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shift(17);                    // AposAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"AposAttrValueContent\", e0);\n  }\n\n  function try_AposAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shiftT(17);                   // AposAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirElemContent()\n  {\n    eventHandler.startNonterminal(\"DirElemContent\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shift(4);                     // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shift(15);                    // ElementContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"DirElemContent\", e0);\n  }\n\n  function try_DirElemContent()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      try_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shiftT(4);                    // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shiftT(15);                   // ElementContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"DirCommentConstructor\", e0);\n    shift(55);                      // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shift(2);                       // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shift(43);                      // '-->'\n    eventHandler.endNonterminal(\"DirCommentConstructor\", e0);\n  }\n\n  function try_DirCommentConstructor()\n  {\n    shiftT(55);                     // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shiftT(2);                      // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shiftT(43);                     // '-->'\n  }\n\n  function parse_DirPIConstructor()\n  {\n    eventHandler.startNonterminal(\"DirPIConstructor\", e0);\n    shift(59);                      // '<?'\n    lookahead1(3);                  // PITarget\n    shift(18);                      // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(2);                // DirPIContents\n      shift(3);                     // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shift(65);                      // '?>'\n    eventHandler.endNonterminal(\"DirPIConstructor\", e0);\n  }\n\n  function try_DirPIConstructor()\n  {\n    shiftT(59);                     // '<?'\n    lookahead1(3);                  // PITarget\n    shiftT(18);                     // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(2);                // DirPIContents\n      shiftT(3);                    // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shiftT(65);                     // '?>'\n  }\n\n  function parse_ComputedConstructor()\n  {\n    eventHandler.startNonterminal(\"ComputedConstructor\", e0);\n    switch (l1)\n    {\n    case 119:                       // 'document'\n      parse_CompDocConstructor();\n      break;\n    case 121:                       // 'element'\n      parse_CompElemConstructor();\n      break;\n    case 82:                        // 'attribute'\n      parse_CompAttrConstructor();\n      break;\n    case 184:                       // 'namespace'\n      parse_CompNamespaceConstructor();\n      break;\n    case 244:                       // 'text'\n      parse_CompTextConstructor();\n      break;\n    case 96:                        // 'comment'\n      parse_CompCommentConstructor();\n      break;\n    default:\n      parse_CompPIConstructor();\n    }\n    eventHandler.endNonterminal(\"ComputedConstructor\", e0);\n  }\n\n  function try_ComputedConstructor()\n  {\n    switch (l1)\n    {\n    case 119:                       // 'document'\n      try_CompDocConstructor();\n      break;\n    case 121:                       // 'element'\n      try_CompElemConstructor();\n      break;\n    case 82:                        // 'attribute'\n      try_CompAttrConstructor();\n      break;\n    case 184:                       // 'namespace'\n      try_CompNamespaceConstructor();\n      break;\n    case 244:                       // 'text'\n      try_CompTextConstructor();\n      break;\n    case 96:                        // 'comment'\n      try_CompCommentConstructor();\n      break;\n    default:\n      try_CompPIConstructor();\n    }\n  }\n\n  function parse_CompElemConstructor()\n  {\n    eventHandler.startNonterminal(\"CompElemConstructor\", e0);\n    shift(121);                     // 'element'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_ContentExpr();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CompElemConstructor\", e0);\n  }\n\n  function try_CompElemConstructor()\n  {\n    shiftT(121);                    // 'element'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      try_ContentExpr();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_CompNamespaceConstructor()\n  {\n    eventHandler.startNonterminal(\"CompNamespaceConstructor\", e0);\n    shift(184);                     // 'namespace'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PrefixExpr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_Prefix();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_URIExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CompNamespaceConstructor\", e0);\n  }\n\n  function try_CompNamespaceConstructor()\n  {\n    shiftT(184);                    // 'namespace'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PrefixExpr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_Prefix();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_URIExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_Prefix()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  }\n\n  function try_Prefix()\n  {\n    try_NCName();\n  }\n\n  function parse_PrefixExpr()\n  {\n    eventHandler.startNonterminal(\"PrefixExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"PrefixExpr\", e0);\n  }\n\n  function try_PrefixExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_URIExpr()\n  {\n    eventHandler.startNonterminal(\"URIExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"URIExpr\", e0);\n  }\n\n  function try_URIExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_FunctionItemExpr()\n  {\n    eventHandler.startNonterminal(\"FunctionItemExpr\", e0);\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      parse_InlineFunctionExpr();\n      break;\n    default:\n      parse_NamedFunctionRef();\n    }\n    eventHandler.endNonterminal(\"FunctionItemExpr\", e0);\n  }\n\n  function try_FunctionItemExpr()\n  {\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      try_InlineFunctionExpr();\n      break;\n    default:\n      try_NamedFunctionRef();\n    }\n  }\n\n  function parse_NamedFunctionRef()\n  {\n    eventHandler.startNonterminal(\"NamedFunctionRef\", e0);\n    parse_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shift(29);                      // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shift(8);                       // IntegerLiteral\n    eventHandler.endNonterminal(\"NamedFunctionRef\", e0);\n  }\n\n  function try_NamedFunctionRef()\n  {\n    try_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shiftT(29);                     // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shiftT(8);                      // IntegerLiteral\n  }\n\n  function parse_InlineFunctionExpr()\n  {\n    eventHandler.startNonterminal(\"InlineFunctionExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(37);                      // ')'\n    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_FunctionBody();\n    eventHandler.endNonterminal(\"InlineFunctionExpr\", e0);\n  }\n\n  function try_InlineFunctionExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      try_ParamList();\n    }\n    shiftT(37);                     // ')'\n    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      shiftT(79);                   // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_FunctionBody();\n  }\n\n  function parse_SingleType()\n  {\n    eventHandler.startNonterminal(\"SingleType\", e0);\n    parse_SimpleTypeName();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 64)                   // '?'\n    {\n      shift(64);                    // '?'\n    }\n    eventHandler.endNonterminal(\"SingleType\", e0);\n  }\n\n  function try_SingleType()\n  {\n    try_SimpleTypeName();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 64)                   // '?'\n    {\n      shiftT(64);                   // '?'\n    }\n  }\n\n  function parse_TypeDeclaration()\n  {\n    eventHandler.startNonterminal(\"TypeDeclaration\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypeDeclaration\", e0);\n  }\n\n  function try_TypeDeclaration()\n  {\n    shiftT(79);                     // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_SequenceType()\n  {\n    eventHandler.startNonterminal(\"SequenceType\", e0);\n    switch (l1)\n    {\n    case 124:                       // 'empty-sequence'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17532:                     // 'empty-sequence' '('\n      shift(124);                   // 'empty-sequence'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(34);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(37);                    // ')'\n      break;\n    default:\n      parse_ItemType();\n      lookahead1W(238);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 39:                      // '*'\n      case 40:                      // '+'\n      case 64:                      // '?'\n        whitespace();\n        parse_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"SequenceType\", e0);\n  }\n\n  function try_SequenceType()\n  {\n    switch (l1)\n    {\n    case 124:                       // 'empty-sequence'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17532:                     // 'empty-sequence' '('\n      shiftT(124);                  // 'empty-sequence'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(34);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(37);                   // ')'\n      break;\n    default:\n      try_ItemType();\n      lookahead1W(238);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 39:                      // '*'\n      case 40:                      // '+'\n      case 64:                      // '?'\n        try_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n  }\n\n  function parse_OccurrenceIndicator()\n  {\n    eventHandler.startNonterminal(\"OccurrenceIndicator\", e0);\n    switch (l1)\n    {\n    case 64:                        // '?'\n      shift(64);                    // '?'\n      break;\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      shift(40);                    // '+'\n    }\n    eventHandler.endNonterminal(\"OccurrenceIndicator\", e0);\n  }\n\n  function try_OccurrenceIndicator()\n  {\n    switch (l1)\n    {\n    case 64:                        // '?'\n      shiftT(64);                   // '?'\n      break;\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      shiftT(40);                   // '+'\n    }\n  }\n\n  function parse_ItemType()\n  {\n    eventHandler.startNonterminal(\"ItemType\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'array'\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 145:                       // 'function'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 194:                       // 'object'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 244:                       // 'text'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      parse_KindTest();\n      break;\n    case 17573:                     // 'item' '('\n      shift(165);                   // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(34);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(37);                    // ')'\n      break;\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      parse_FunctionTest();\n      break;\n    case 34:                        // '('\n      parse_ParenthesizedItemType();\n      break;\n    case 17486:                     // 'array' '('\n    case 17575:                     // 'json-item' '('\n    case 17602:                     // 'object' '('\n      parse_JSONTest();\n      break;\n    case 17650:                     // 'structured-item' '('\n      parse_StructuredItemTest();\n      break;\n    default:\n      parse_AtomicOrUnionType();\n    }\n    eventHandler.endNonterminal(\"ItemType\", e0);\n  }\n\n  function try_ItemType()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'array'\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 145:                       // 'function'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 194:                       // 'object'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 244:                       // 'text'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      try_KindTest();\n      break;\n    case 17573:                     // 'item' '('\n      shiftT(165);                  // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(34);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(37);                   // ')'\n      break;\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      try_FunctionTest();\n      break;\n    case 34:                        // '('\n      try_ParenthesizedItemType();\n      break;\n    case 17486:                     // 'array' '('\n    case 17575:                     // 'json-item' '('\n    case 17602:                     // 'object' '('\n      try_JSONTest();\n      break;\n    case 17650:                     // 'structured-item' '('\n      try_StructuredItemTest();\n      break;\n    default:\n      try_AtomicOrUnionType();\n    }\n  }\n\n  function parse_JSONTest()\n  {\n    eventHandler.startNonterminal(\"JSONTest\", e0);\n    switch (l1)\n    {\n    case 167:                       // 'json-item'\n      parse_JSONItemTest();\n      break;\n    case 194:                       // 'object'\n      parse_JSONObjectTest();\n      break;\n    default:\n      parse_JSONArrayTest();\n    }\n    eventHandler.endNonterminal(\"JSONTest\", e0);\n  }\n\n  function try_JSONTest()\n  {\n    switch (l1)\n    {\n    case 167:                       // 'json-item'\n      try_JSONItemTest();\n      break;\n    case 194:                       // 'object'\n      try_JSONObjectTest();\n      break;\n    default:\n      try_JSONArrayTest();\n    }\n  }\n\n  function parse_StructuredItemTest()\n  {\n    eventHandler.startNonterminal(\"StructuredItemTest\", e0);\n    shift(242);                     // 'structured-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"StructuredItemTest\", e0);\n  }\n\n  function try_StructuredItemTest()\n  {\n    shiftT(242);                    // 'structured-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONItemTest()\n  {\n    eventHandler.startNonterminal(\"JSONItemTest\", e0);\n    shift(167);                     // 'json-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONItemTest\", e0);\n  }\n\n  function try_JSONItemTest()\n  {\n    shiftT(167);                    // 'json-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONObjectTest()\n  {\n    eventHandler.startNonterminal(\"JSONObjectTest\", e0);\n    shift(194);                     // 'object'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONObjectTest\", e0);\n  }\n\n  function try_JSONObjectTest()\n  {\n    shiftT(194);                    // 'object'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONArrayTest()\n  {\n    eventHandler.startNonterminal(\"JSONArrayTest\", e0);\n    shift(78);                      // 'array'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONArrayTest\", e0);\n  }\n\n  function try_JSONArrayTest()\n  {\n    shiftT(78);                     // 'array'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AtomicOrUnionType()\n  {\n    eventHandler.startNonterminal(\"AtomicOrUnionType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicOrUnionType\", e0);\n  }\n\n  function try_AtomicOrUnionType()\n  {\n    try_EQName();\n  }\n\n  function parse_KindTest()\n  {\n    eventHandler.startNonterminal(\"KindTest\", e0);\n    switch (l1)\n    {\n    case 120:                       // 'document-node'\n      parse_DocumentTest();\n      break;\n    case 121:                       // 'element'\n      parse_ElementTest();\n      break;\n    case 82:                        // 'attribute'\n      parse_AttributeTest();\n      break;\n    case 227:                       // 'schema-element'\n      parse_SchemaElementTest();\n      break;\n    case 226:                       // 'schema-attribute'\n      parse_SchemaAttributeTest();\n      break;\n    case 216:                       // 'processing-instruction'\n      parse_PITest();\n      break;\n    case 96:                        // 'comment'\n      parse_CommentTest();\n      break;\n    case 244:                       // 'text'\n      parse_TextTest();\n      break;\n    case 185:                       // 'namespace-node'\n      parse_NamespaceNodeTest();\n      break;\n    default:\n      parse_AnyKindTest();\n    }\n    eventHandler.endNonterminal(\"KindTest\", e0);\n  }\n\n  function try_KindTest()\n  {\n    switch (l1)\n    {\n    case 120:                       // 'document-node'\n      try_DocumentTest();\n      break;\n    case 121:                       // 'element'\n      try_ElementTest();\n      break;\n    case 82:                        // 'attribute'\n      try_AttributeTest();\n      break;\n    case 227:                       // 'schema-element'\n      try_SchemaElementTest();\n      break;\n    case 226:                       // 'schema-attribute'\n      try_SchemaAttributeTest();\n      break;\n    case 216:                       // 'processing-instruction'\n      try_PITest();\n      break;\n    case 96:                        // 'comment'\n      try_CommentTest();\n      break;\n    case 244:                       // 'text'\n      try_TextTest();\n      break;\n    case 185:                       // 'namespace-node'\n      try_NamespaceNodeTest();\n      break;\n    default:\n      try_AnyKindTest();\n    }\n  }\n\n  function parse_AnyKindTest()\n  {\n    eventHandler.startNonterminal(\"AnyKindTest\", e0);\n    shift(191);                     // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AnyKindTest\", e0);\n  }\n\n  function try_AnyKindTest()\n  {\n    shiftT(191);                    // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_DocumentTest()\n  {\n    eventHandler.startNonterminal(\"DocumentTest\", e0);\n    shift(120);                     // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 121:                     // 'element'\n        whitespace();\n        parse_ElementTest();\n        break;\n      default:\n        whitespace();\n        parse_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"DocumentTest\", e0);\n  }\n\n  function try_DocumentTest()\n  {\n    shiftT(120);                    // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 121:                     // 'element'\n        try_ElementTest();\n        break;\n      default:\n        try_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_TextTest()\n  {\n    eventHandler.startNonterminal(\"TextTest\", e0);\n    shift(244);                     // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"TextTest\", e0);\n  }\n\n  function try_TextTest()\n  {\n    shiftT(244);                    // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_CommentTest()\n  {\n    eventHandler.startNonterminal(\"CommentTest\", e0);\n    shift(96);                      // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"CommentTest\", e0);\n  }\n\n  function try_CommentTest()\n  {\n    shiftT(96);                     // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_NamespaceNodeTest()\n  {\n    eventHandler.startNonterminal(\"NamespaceNodeTest\", e0);\n    shift(185);                     // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"NamespaceNodeTest\", e0);\n  }\n\n  function try_NamespaceNodeTest()\n  {\n    shiftT(185);                    // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_PITest()\n  {\n    eventHandler.startNonterminal(\"PITest\", e0);\n    shift(216);                     // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(252);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shift(11);                  // StringLiteral\n        break;\n      default:\n        whitespace();\n        parse_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"PITest\", e0);\n  }\n\n  function try_PITest()\n  {\n    shiftT(216);                    // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(252);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shiftT(11);                 // StringLiteral\n        break;\n      default:\n        try_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttributeTest()\n  {\n    eventHandler.startNonterminal(\"AttributeTest\", e0);\n    shift(82);                      // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_AttribNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shift(41);                  // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AttributeTest\", e0);\n  }\n\n  function try_AttributeTest()\n  {\n    shiftT(82);                     // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      try_AttribNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shiftT(41);                 // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttribNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"AttribNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shift(38);                    // '*'\n      break;\n    default:\n      parse_AttributeName();\n    }\n    eventHandler.endNonterminal(\"AttribNameOrWildcard\", e0);\n  }\n\n  function try_AttribNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shiftT(38);                   // '*'\n      break;\n    default:\n      try_AttributeName();\n    }\n  }\n\n  function parse_SchemaAttributeTest()\n  {\n    eventHandler.startNonterminal(\"SchemaAttributeTest\", e0);\n    shift(226);                     // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"SchemaAttributeTest\", e0);\n  }\n\n  function try_SchemaAttributeTest()\n  {\n    shiftT(226);                    // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttributeDeclaration()\n  {\n    eventHandler.startNonterminal(\"AttributeDeclaration\", e0);\n    parse_AttributeName();\n    eventHandler.endNonterminal(\"AttributeDeclaration\", e0);\n  }\n\n  function try_AttributeDeclaration()\n  {\n    try_AttributeName();\n  }\n\n  function parse_ElementTest()\n  {\n    eventHandler.startNonterminal(\"ElementTest\", e0);\n    shift(121);                     // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_ElementNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shift(41);                  // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        lookahead1W(102);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 64)               // '?'\n        {\n          shift(64);                // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ElementTest\", e0);\n  }\n\n  function try_ElementTest()\n  {\n    shiftT(121);                    // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      try_ElementNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shiftT(41);                 // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        lookahead1W(102);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 64)               // '?'\n        {\n          shiftT(64);               // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ElementNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"ElementNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shift(38);                    // '*'\n      break;\n    default:\n      parse_ElementName();\n    }\n    eventHandler.endNonterminal(\"ElementNameOrWildcard\", e0);\n  }\n\n  function try_ElementNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shiftT(38);                   // '*'\n      break;\n    default:\n      try_ElementName();\n    }\n  }\n\n  function parse_SchemaElementTest()\n  {\n    eventHandler.startNonterminal(\"SchemaElementTest\", e0);\n    shift(227);                     // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"SchemaElementTest\", e0);\n  }\n\n  function try_SchemaElementTest()\n  {\n    shiftT(227);                    // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ElementDeclaration()\n  {\n    eventHandler.startNonterminal(\"ElementDeclaration\", e0);\n    parse_ElementName();\n    eventHandler.endNonterminal(\"ElementDeclaration\", e0);\n  }\n\n  function try_ElementDeclaration()\n  {\n    try_ElementName();\n  }\n\n  function parse_AttributeName()\n  {\n    eventHandler.startNonterminal(\"AttributeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AttributeName\", e0);\n  }\n\n  function try_AttributeName()\n  {\n    try_EQName();\n  }\n\n  function parse_ElementName()\n  {\n    eventHandler.startNonterminal(\"ElementName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"ElementName\", e0);\n  }\n\n  function try_ElementName()\n  {\n    try_EQName();\n  }\n\n  function parse_SimpleTypeName()\n  {\n    eventHandler.startNonterminal(\"SimpleTypeName\", e0);\n    parse_TypeName();\n    eventHandler.endNonterminal(\"SimpleTypeName\", e0);\n  }\n\n  function try_SimpleTypeName()\n  {\n    try_TypeName();\n  }\n\n  function parse_TypeName()\n  {\n    eventHandler.startNonterminal(\"TypeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"TypeName\", e0);\n  }\n\n  function try_TypeName()\n  {\n    try_EQName();\n  }\n\n  function parse_FunctionTest()\n  {\n    eventHandler.startNonterminal(\"FunctionTest\", e0);\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(5, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(5, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      whitespace();\n      parse_AnyFunctionTest();\n      break;\n    default:\n      whitespace();\n      parse_TypedFunctionTest();\n    }\n    eventHandler.endNonterminal(\"FunctionTest\", e0);\n  }\n\n  function try_FunctionTest()\n  {\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(5, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        memoize(5, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(5, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_AnyFunctionTest();\n      break;\n    case -3:\n      break;\n    default:\n      try_TypedFunctionTest();\n    }\n  }\n\n  function parse_AnyFunctionTest()\n  {\n    eventHandler.startNonterminal(\"AnyFunctionTest\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shift(38);                      // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AnyFunctionTest\", e0);\n  }\n\n  function try_AnyFunctionTest()\n  {\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shiftT(38);                     // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_TypedFunctionTest()\n  {\n    eventHandler.startNonterminal(\"TypedFunctionTest\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(262);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_SequenceType();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_SequenceType();\n      }\n    }\n    shift(37);                      // ')'\n    lookahead1W(30);                // S^WS | '(:' | 'as'\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypedFunctionTest\", e0);\n  }\n\n  function try_TypedFunctionTest()\n  {\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(262);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      try_SequenceType();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_SequenceType();\n      }\n    }\n    shiftT(37);                     // ')'\n    lookahead1W(30);                // S^WS | '(:' | 'as'\n    shiftT(79);                     // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_ParenthesizedItemType()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedItemType\", e0);\n    shift(34);                      // '('\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedItemType\", e0);\n  }\n\n  function try_ParenthesizedItemType()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_RevalidationDecl()\n  {\n    eventHandler.startNonterminal(\"RevalidationDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(72);                // S^WS | '(:' | 'revalidation'\n    shift(222);                     // 'revalidation'\n    lookahead1W(152);               // S^WS | '(:' | 'lax' | 'skip' | 'strict'\n    switch (l1)\n    {\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    default:\n      shift(233);                   // 'skip'\n    }\n    eventHandler.endNonterminal(\"RevalidationDecl\", e0);\n  }\n\n  function parse_InsertExprTargetChoice()\n  {\n    eventHandler.startNonterminal(\"InsertExprTargetChoice\", e0);\n    switch (l1)\n    {\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    default:\n      if (l1 == 79)                 // 'as'\n      {\n        shift(79);                  // 'as'\n        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 134:                   // 'first'\n          shift(134);               // 'first'\n          break;\n        default:\n          shift(170);               // 'last'\n        }\n      }\n      lookahead1W(54);              // S^WS | '(:' | 'into'\n      shift(163);                   // 'into'\n    }\n    eventHandler.endNonterminal(\"InsertExprTargetChoice\", e0);\n  }\n\n  function try_InsertExprTargetChoice()\n  {\n    switch (l1)\n    {\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    default:\n      if (l1 == 79)                 // 'as'\n      {\n        shiftT(79);                 // 'as'\n        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 134:                   // 'first'\n          shiftT(134);              // 'first'\n          break;\n        default:\n          shiftT(170);              // 'last'\n        }\n      }\n      lookahead1W(54);              // S^WS | '(:' | 'into'\n      shiftT(163);                  // 'into'\n    }\n  }\n\n  function parse_InsertExpr()\n  {\n    eventHandler.startNonterminal(\"InsertExpr\", e0);\n    shift(159);                     // 'insert'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    default:\n      shift(192);                   // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_SourceExpr();\n    whitespace();\n    parse_InsertExprTargetChoice();\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"InsertExpr\", e0);\n  }\n\n  function try_InsertExpr()\n  {\n    shiftT(159);                    // 'insert'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    default:\n      shiftT(192);                  // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_SourceExpr();\n    try_InsertExprTargetChoice();\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_DeleteExpr()\n  {\n    eventHandler.startNonterminal(\"DeleteExpr\", e0);\n    shift(110);                     // 'delete'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    default:\n      shift(192);                   // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"DeleteExpr\", e0);\n  }\n\n  function try_DeleteExpr()\n  {\n    shiftT(110);                    // 'delete'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    default:\n      shiftT(192);                  // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_ReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"ReplaceExpr\", e0);\n    shift(219);                     // 'replace'\n    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 261)                  // 'value'\n    {\n      shift(261);                   // 'value'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shift(196);                   // 'of'\n    }\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(270);                     // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReplaceExpr\", e0);\n  }\n\n  function try_ReplaceExpr()\n  {\n    shiftT(219);                    // 'replace'\n    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 261)                  // 'value'\n    {\n      shiftT(261);                  // 'value'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shiftT(196);                  // 'of'\n    }\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shiftT(191);                    // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n    shiftT(270);                    // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_RenameExpr()\n  {\n    eventHandler.startNonterminal(\"RenameExpr\", e0);\n    shift(218);                     // 'rename'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(79);                      // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_NewNameExpr();\n    eventHandler.endNonterminal(\"RenameExpr\", e0);\n  }\n\n  function try_RenameExpr()\n  {\n    shiftT(218);                    // 'rename'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shiftT(191);                    // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n    shiftT(79);                     // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_NewNameExpr();\n  }\n\n  function parse_SourceExpr()\n  {\n    eventHandler.startNonterminal(\"SourceExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SourceExpr\", e0);\n  }\n\n  function try_SourceExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TargetExpr()\n  {\n    eventHandler.startNonterminal(\"TargetExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TargetExpr\", e0);\n  }\n\n  function try_TargetExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_NewNameExpr()\n  {\n    eventHandler.startNonterminal(\"NewNameExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"NewNameExpr\", e0);\n  }\n\n  function try_NewNameExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TransformExpr()\n  {\n    eventHandler.startNonterminal(\"TransformExpr\", e0);\n    shift(103);                     // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_TransformSpec();\n    }\n    shift(181);                     // 'modify'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformExpr\", e0);\n  }\n\n  function try_TransformExpr()\n  {\n    shiftT(103);                    // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_TransformSpec();\n    }\n    shiftT(181);                    // 'modify'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TransformSpec()\n  {\n    eventHandler.startNonterminal(\"TransformSpec\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformSpec\", e0);\n  }\n\n  function try_TransformSpec()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_FTSelection()\n  {\n    eventHandler.startNonterminal(\"FTSelection\", e0);\n    parse_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 115                 // 'different'\n       && lk != 117                 // 'distance'\n       && lk != 127                 // 'entire'\n       && lk != 202                 // 'ordered'\n       && lk != 223                 // 'same'\n       && lk != 269                 // 'window'\n       && lk != 64593               // 'at' 'end'\n       && lk != 121425)             // 'at' 'start'\n      {\n        break;\n      }\n      whitespace();\n      parse_FTPosFilter();\n    }\n    eventHandler.endNonterminal(\"FTSelection\", e0);\n  }\n\n  function try_FTSelection()\n  {\n    try_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 115                 // 'different'\n       && lk != 117                 // 'distance'\n       && lk != 127                 // 'entire'\n       && lk != 202                 // 'ordered'\n       && lk != 223                 // 'same'\n       && lk != 269                 // 'window'\n       && lk != 64593               // 'at' 'end'\n       && lk != 121425)             // 'at' 'start'\n      {\n        break;\n      }\n      try_FTPosFilter();\n    }\n  }\n\n  function parse_FTWeight()\n  {\n    eventHandler.startNonterminal(\"FTWeight\", e0);\n    shift(264);                     // 'weight'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"FTWeight\", e0);\n  }\n\n  function try_FTWeight()\n  {\n    shiftT(264);                    // 'weight'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FTOr()\n  {\n    eventHandler.startNonterminal(\"FTOr\", e0);\n    parse_FTAnd();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftor'\n      {\n        break;\n      }\n      shift(144);                   // 'ftor'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTAnd();\n    }\n    eventHandler.endNonterminal(\"FTOr\", e0);\n  }\n\n  function try_FTOr()\n  {\n    try_FTAnd();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftor'\n      {\n        break;\n      }\n      shiftT(144);                  // 'ftor'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTAnd();\n    }\n  }\n\n  function parse_FTAnd()\n  {\n    eventHandler.startNonterminal(\"FTAnd\", e0);\n    parse_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 142)                // 'ftand'\n      {\n        break;\n      }\n      shift(142);                   // 'ftand'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTMildNot();\n    }\n    eventHandler.endNonterminal(\"FTAnd\", e0);\n  }\n\n  function try_FTAnd()\n  {\n    try_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 142)                // 'ftand'\n      {\n        break;\n      }\n      shiftT(142);                  // 'ftand'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTMildNot();\n    }\n  }\n\n  function parse_FTMildNot()\n  {\n    eventHandler.startNonterminal(\"FTMildNot\", e0);\n    parse_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 193)                // 'not'\n      {\n        break;\n      }\n      shift(193);                   // 'not'\n      lookahead1W(53);              // S^WS | '(:' | 'in'\n      shift(154);                   // 'in'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTUnaryNot();\n    }\n    eventHandler.endNonterminal(\"FTMildNot\", e0);\n  }\n\n  function try_FTMildNot()\n  {\n    try_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 193)                // 'not'\n      {\n        break;\n      }\n      shiftT(193);                  // 'not'\n      lookahead1W(53);              // S^WS | '(:' | 'in'\n      shiftT(154);                  // 'in'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTUnaryNot();\n    }\n  }\n\n  function parse_FTUnaryNot()\n  {\n    eventHandler.startNonterminal(\"FTUnaryNot\", e0);\n    if (l1 == 143)                  // 'ftnot'\n    {\n      shift(143);                   // 'ftnot'\n    }\n    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    whitespace();\n    parse_FTPrimaryWithOptions();\n    eventHandler.endNonterminal(\"FTUnaryNot\", e0);\n  }\n\n  function try_FTUnaryNot()\n  {\n    if (l1 == 143)                  // 'ftnot'\n    {\n      shiftT(143);                  // 'ftnot'\n    }\n    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    try_FTPrimaryWithOptions();\n  }\n\n  function parse_FTPrimaryWithOptions()\n  {\n    eventHandler.startNonterminal(\"FTPrimaryWithOptions\", e0);\n    parse_FTPrimary();\n    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 259)                  // 'using'\n    {\n      whitespace();\n      parse_FTMatchOptions();\n    }\n    if (l1 == 264)                  // 'weight'\n    {\n      whitespace();\n      parse_FTWeight();\n    }\n    eventHandler.endNonterminal(\"FTPrimaryWithOptions\", e0);\n  }\n\n  function try_FTPrimaryWithOptions()\n  {\n    try_FTPrimary();\n    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 259)                  // 'using'\n    {\n      try_FTMatchOptions();\n    }\n    if (l1 == 264)                  // 'weight'\n    {\n      try_FTWeight();\n    }\n  }\n\n  function parse_FTPrimary()\n  {\n    eventHandler.startNonterminal(\"FTPrimary\", e0);\n    switch (l1)\n    {\n    case 34:                        // '('\n      shift(34);                    // '('\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      shift(37);                    // ')'\n      break;\n    case 35:                        // '(#'\n      parse_FTExtensionSelection();\n      break;\n    default:\n      parse_FTWords();\n      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 195)                // 'occurs'\n      {\n        whitespace();\n        parse_FTTimes();\n      }\n    }\n    eventHandler.endNonterminal(\"FTPrimary\", e0);\n  }\n\n  function try_FTPrimary()\n  {\n    switch (l1)\n    {\n    case 34:                        // '('\n      shiftT(34);                   // '('\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      shiftT(37);                   // ')'\n      break;\n    case 35:                        // '(#'\n      try_FTExtensionSelection();\n      break;\n    default:\n      try_FTWords();\n      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 195)                // 'occurs'\n      {\n        try_FTTimes();\n      }\n    }\n  }\n\n  function parse_FTWords()\n  {\n    eventHandler.startNonterminal(\"FTWords\", e0);\n    parse_FTWordsValue();\n    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 71                    // 'all'\n     || l1 == 76                    // 'any'\n     || l1 == 210)                  // 'phrase'\n    {\n      whitespace();\n      parse_FTAnyallOption();\n    }\n    eventHandler.endNonterminal(\"FTWords\", e0);\n  }\n\n  function try_FTWords()\n  {\n    try_FTWordsValue();\n    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 71                    // 'all'\n     || l1 == 76                    // 'any'\n     || l1 == 210)                  // 'phrase'\n    {\n      try_FTAnyallOption();\n    }\n  }\n\n  function parse_FTWordsValue()\n  {\n    eventHandler.startNonterminal(\"FTWordsValue\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n    }\n    eventHandler.endNonterminal(\"FTWordsValue\", e0);\n  }\n\n  function try_FTWordsValue()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n    }\n  }\n\n  function parse_FTExtensionSelection()\n  {\n    eventHandler.startNonterminal(\"FTExtensionSelection\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(276);                     // '{'\n    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_FTSelection();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"FTExtensionSelection\", e0);\n  }\n\n  function try_FTExtensionSelection()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(276);                    // '{'\n    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      try_FTSelection();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FTAnyallOption()\n  {\n    eventHandler.startNonterminal(\"FTAnyallOption\", e0);\n    switch (l1)\n    {\n    case 76:                        // 'any'\n      shift(76);                    // 'any'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 272)                // 'word'\n      {\n        shift(272);                 // 'word'\n      }\n      break;\n    case 71:                        // 'all'\n      shift(71);                    // 'all'\n      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 273)                // 'words'\n      {\n        shift(273);                 // 'words'\n      }\n      break;\n    default:\n      shift(210);                   // 'phrase'\n    }\n    eventHandler.endNonterminal(\"FTAnyallOption\", e0);\n  }\n\n  function try_FTAnyallOption()\n  {\n    switch (l1)\n    {\n    case 76:                        // 'any'\n      shiftT(76);                   // 'any'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 272)                // 'word'\n      {\n        shiftT(272);                // 'word'\n      }\n      break;\n    case 71:                        // 'all'\n      shiftT(71);                   // 'all'\n      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 273)                // 'words'\n      {\n        shiftT(273);                // 'words'\n      }\n      break;\n    default:\n      shiftT(210);                  // 'phrase'\n    }\n  }\n\n  function parse_FTTimes()\n  {\n    eventHandler.startNonterminal(\"FTTimes\", e0);\n    shift(195);                     // 'occurs'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    shift(247);                     // 'times'\n    eventHandler.endNonterminal(\"FTTimes\", e0);\n  }\n\n  function try_FTTimes()\n  {\n    shiftT(195);                    // 'occurs'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    shiftT(247);                    // 'times'\n  }\n\n  function parse_FTRange()\n  {\n    eventHandler.startNonterminal(\"FTRange\", e0);\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shift(130);                   // 'exactly'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shift(173);                 // 'least'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n        break;\n      default:\n        shift(183);                 // 'most'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n      }\n      break;\n    default:\n      shift(140);                   // 'from'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      shift(248);                   // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"FTRange\", e0);\n  }\n\n  function try_FTRange()\n  {\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shiftT(130);                  // 'exactly'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shiftT(173);                // 'least'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_AdditiveExpr();\n        break;\n      default:\n        shiftT(183);                // 'most'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_AdditiveExpr();\n      }\n      break;\n    default:\n      shiftT(140);                  // 'from'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n      shiftT(248);                  // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_FTPosFilter()\n  {\n    eventHandler.startNonterminal(\"FTPosFilter\", e0);\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      parse_FTOrder();\n      break;\n    case 269:                       // 'window'\n      parse_FTWindow();\n      break;\n    case 117:                       // 'distance'\n      parse_FTDistance();\n      break;\n    case 115:                       // 'different'\n    case 223:                       // 'same'\n      parse_FTScope();\n      break;\n    default:\n      parse_FTContent();\n    }\n    eventHandler.endNonterminal(\"FTPosFilter\", e0);\n  }\n\n  function try_FTPosFilter()\n  {\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      try_FTOrder();\n      break;\n    case 269:                       // 'window'\n      try_FTWindow();\n      break;\n    case 117:                       // 'distance'\n      try_FTDistance();\n      break;\n    case 115:                       // 'different'\n    case 223:                       // 'same'\n      try_FTScope();\n      break;\n    default:\n      try_FTContent();\n    }\n  }\n\n  function parse_FTOrder()\n  {\n    eventHandler.startNonterminal(\"FTOrder\", e0);\n    shift(202);                     // 'ordered'\n    eventHandler.endNonterminal(\"FTOrder\", e0);\n  }\n\n  function try_FTOrder()\n  {\n    shiftT(202);                    // 'ordered'\n  }\n\n  function parse_FTWindow()\n  {\n    eventHandler.startNonterminal(\"FTWindow\", e0);\n    shift(269);                     // 'window'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_AdditiveExpr();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTWindow\", e0);\n  }\n\n  function try_FTWindow()\n  {\n    shiftT(269);                    // 'window'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_AdditiveExpr();\n    try_FTUnit();\n  }\n\n  function parse_FTDistance()\n  {\n    eventHandler.startNonterminal(\"FTDistance\", e0);\n    shift(117);                     // 'distance'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTDistance\", e0);\n  }\n\n  function try_FTDistance()\n  {\n    shiftT(117);                    // 'distance'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    try_FTUnit();\n  }\n\n  function parse_FTUnit()\n  {\n    eventHandler.startNonterminal(\"FTUnit\", e0);\n    switch (l1)\n    {\n    case 273:                       // 'words'\n      shift(273);                   // 'words'\n      break;\n    case 232:                       // 'sentences'\n      shift(232);                   // 'sentences'\n      break;\n    default:\n      shift(205);                   // 'paragraphs'\n    }\n    eventHandler.endNonterminal(\"FTUnit\", e0);\n  }\n\n  function try_FTUnit()\n  {\n    switch (l1)\n    {\n    case 273:                       // 'words'\n      shiftT(273);                  // 'words'\n      break;\n    case 232:                       // 'sentences'\n      shiftT(232);                  // 'sentences'\n      break;\n    default:\n      shiftT(205);                  // 'paragraphs'\n    }\n  }\n\n  function parse_FTScope()\n  {\n    eventHandler.startNonterminal(\"FTScope\", e0);\n    switch (l1)\n    {\n    case 223:                       // 'same'\n      shift(223);                   // 'same'\n      break;\n    default:\n      shift(115);                   // 'different'\n    }\n    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    whitespace();\n    parse_FTBigUnit();\n    eventHandler.endNonterminal(\"FTScope\", e0);\n  }\n\n  function try_FTScope()\n  {\n    switch (l1)\n    {\n    case 223:                       // 'same'\n      shiftT(223);                  // 'same'\n      break;\n    default:\n      shiftT(115);                  // 'different'\n    }\n    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    try_FTBigUnit();\n  }\n\n  function parse_FTBigUnit()\n  {\n    eventHandler.startNonterminal(\"FTBigUnit\", e0);\n    switch (l1)\n    {\n    case 231:                       // 'sentence'\n      shift(231);                   // 'sentence'\n      break;\n    default:\n      shift(204);                   // 'paragraph'\n    }\n    eventHandler.endNonterminal(\"FTBigUnit\", e0);\n  }\n\n  function try_FTBigUnit()\n  {\n    switch (l1)\n    {\n    case 231:                       // 'sentence'\n      shiftT(231);                  // 'sentence'\n      break;\n    default:\n      shiftT(204);                  // 'paragraph'\n    }\n  }\n\n  function parse_FTContent()\n  {\n    eventHandler.startNonterminal(\"FTContent\", e0);\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 237:                     // 'start'\n        shift(237);                 // 'start'\n        break;\n      default:\n        shift(126);                 // 'end'\n      }\n      break;\n    default:\n      shift(127);                   // 'entire'\n      lookahead1W(42);              // S^WS | '(:' | 'content'\n      shift(100);                   // 'content'\n    }\n    eventHandler.endNonterminal(\"FTContent\", e0);\n  }\n\n  function try_FTContent()\n  {\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 237:                     // 'start'\n        shiftT(237);                // 'start'\n        break;\n      default:\n        shiftT(126);                // 'end'\n      }\n      break;\n    default:\n      shiftT(127);                  // 'entire'\n      lookahead1W(42);              // S^WS | '(:' | 'content'\n      shiftT(100);                  // 'content'\n    }\n  }\n\n  function parse_FTMatchOptions()\n  {\n    eventHandler.startNonterminal(\"FTMatchOptions\", e0);\n    for (;;)\n    {\n      shift(259);                   // 'using'\n      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      whitespace();\n      parse_FTMatchOption();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 259)                // 'using'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"FTMatchOptions\", e0);\n  }\n\n  function try_FTMatchOptions()\n  {\n    for (;;)\n    {\n      shiftT(259);                  // 'using'\n      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      try_FTMatchOption();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 259)                // 'using'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_FTMatchOption()\n  {\n    eventHandler.startNonterminal(\"FTMatchOption\", e0);\n    switch (l1)\n    {\n    case 188:                       // 'no'\n      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 169:                       // 'language'\n      parse_FTLanguageOption();\n      break;\n    case 268:                       // 'wildcards'\n    case 137404:                    // 'no' 'wildcards'\n      parse_FTWildCardOption();\n      break;\n    case 246:                       // 'thesaurus'\n    case 126140:                    // 'no' 'thesaurus'\n      parse_FTThesaurusOption();\n      break;\n    case 238:                       // 'stemming'\n    case 122044:                    // 'no' 'stemming'\n      parse_FTStemOption();\n      break;\n    case 114:                       // 'diacritics'\n      parse_FTDiacriticsOption();\n      break;\n    case 239:                       // 'stop'\n    case 122556:                    // 'no' 'stop'\n      parse_FTStopWordOption();\n      break;\n    case 199:                       // 'option'\n      parse_FTExtensionOption();\n      break;\n    default:\n      parse_FTCaseOption();\n    }\n    eventHandler.endNonterminal(\"FTMatchOption\", e0);\n  }\n\n  function try_FTMatchOption()\n  {\n    switch (l1)\n    {\n    case 188:                       // 'no'\n      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 169:                       // 'language'\n      try_FTLanguageOption();\n      break;\n    case 268:                       // 'wildcards'\n    case 137404:                    // 'no' 'wildcards'\n      try_FTWildCardOption();\n      break;\n    case 246:                       // 'thesaurus'\n    case 126140:                    // 'no' 'thesaurus'\n      try_FTThesaurusOption();\n      break;\n    case 238:                       // 'stemming'\n    case 122044:                    // 'no' 'stemming'\n      try_FTStemOption();\n      break;\n    case 114:                       // 'diacritics'\n      try_FTDiacriticsOption();\n      break;\n    case 239:                       // 'stop'\n    case 122556:                    // 'no' 'stop'\n      try_FTStopWordOption();\n      break;\n    case 199:                       // 'option'\n      try_FTExtensionOption();\n      break;\n    default:\n      try_FTCaseOption();\n    }\n  }\n\n  function parse_FTCaseOption()\n  {\n    eventHandler.startNonterminal(\"FTCaseOption\", e0);\n    switch (l1)\n    {\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 158:                     // 'insensitive'\n        shift(158);                 // 'insensitive'\n        break;\n      default:\n        shift(230);                 // 'sensitive'\n      }\n      break;\n    case 177:                       // 'lowercase'\n      shift(177);                   // 'lowercase'\n      break;\n    default:\n      shift(258);                   // 'uppercase'\n    }\n    eventHandler.endNonterminal(\"FTCaseOption\", e0);\n  }\n\n  function try_FTCaseOption()\n  {\n    switch (l1)\n    {\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 158:                     // 'insensitive'\n        shiftT(158);                // 'insensitive'\n        break;\n      default:\n        shiftT(230);                // 'sensitive'\n      }\n      break;\n    case 177:                       // 'lowercase'\n      shiftT(177);                  // 'lowercase'\n      break;\n    default:\n      shiftT(258);                  // 'uppercase'\n    }\n  }\n\n  function parse_FTDiacriticsOption()\n  {\n    eventHandler.startNonterminal(\"FTDiacriticsOption\", e0);\n    shift(114);                     // 'diacritics'\n    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 158:                       // 'insensitive'\n      shift(158);                   // 'insensitive'\n      break;\n    default:\n      shift(230);                   // 'sensitive'\n    }\n    eventHandler.endNonterminal(\"FTDiacriticsOption\", e0);\n  }\n\n  function try_FTDiacriticsOption()\n  {\n    shiftT(114);                    // 'diacritics'\n    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 158:                       // 'insensitive'\n      shiftT(158);                  // 'insensitive'\n      break;\n    default:\n      shiftT(230);                  // 'sensitive'\n    }\n  }\n\n  function parse_FTStemOption()\n  {\n    eventHandler.startNonterminal(\"FTStemOption\", e0);\n    switch (l1)\n    {\n    case 238:                       // 'stemming'\n      shift(238);                   // 'stemming'\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(74);              // S^WS | '(:' | 'stemming'\n      shift(238);                   // 'stemming'\n    }\n    eventHandler.endNonterminal(\"FTStemOption\", e0);\n  }\n\n  function try_FTStemOption()\n  {\n    switch (l1)\n    {\n    case 238:                       // 'stemming'\n      shiftT(238);                  // 'stemming'\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(74);              // S^WS | '(:' | 'stemming'\n      shiftT(238);                  // 'stemming'\n    }\n  }\n\n  function parse_FTThesaurusOption()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusOption\", e0);\n    switch (l1)\n    {\n    case 246:                       // 'thesaurus'\n      shift(246);                   // 'thesaurus'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        whitespace();\n        parse_FTThesaurusID();\n        break;\n      case 109:                     // 'default'\n        shift(109);                 // 'default'\n        break;\n      default:\n        shift(34);                  // '('\n        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          whitespace();\n          parse_FTThesaurusID();\n          break;\n        default:\n          shift(109);               // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(101);         // S^WS | '(:' | ')' | ','\n          if (l1 != 41)             // ','\n          {\n            break;\n          }\n          shift(41);                // ','\n          lookahead1W(31);          // S^WS | '(:' | 'at'\n          whitespace();\n          parse_FTThesaurusID();\n        }\n        shift(37);                  // ')'\n      }\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'\n      shift(246);                   // 'thesaurus'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusOption\", e0);\n  }\n\n  function try_FTThesaurusOption()\n  {\n    switch (l1)\n    {\n    case 246:                       // 'thesaurus'\n      shiftT(246);                  // 'thesaurus'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        try_FTThesaurusID();\n        break;\n      case 109:                     // 'default'\n        shiftT(109);                // 'default'\n        break;\n      default:\n        shiftT(34);                 // '('\n        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          try_FTThesaurusID();\n          break;\n        default:\n          shiftT(109);              // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(101);         // S^WS | '(:' | ')' | ','\n          if (l1 != 41)             // ','\n          {\n            break;\n          }\n          shiftT(41);               // ','\n          lookahead1W(31);          // S^WS | '(:' | 'at'\n          try_FTThesaurusID();\n        }\n        shiftT(37);                 // ')'\n      }\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'\n      shiftT(246);                  // 'thesaurus'\n    }\n  }\n\n  function parse_FTThesaurusID()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusID\", e0);\n    shift(81);                      // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 217)                  // 'relationship'\n    {\n      shift(217);                   // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 130                   // 'exactly'\n     || lk == 140                   // 'from'\n     || lk == 88657                 // 'at' 'least'\n     || lk == 93777)                // 'at' 'most'\n    {\n      whitespace();\n      parse_FTLiteralRange();\n      lookahead1W(58);              // S^WS | '(:' | 'levels'\n      shift(175);                   // 'levels'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusID\", e0);\n  }\n\n  function try_FTThesaurusID()\n  {\n    shiftT(81);                     // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 217)                  // 'relationship'\n    {\n      shiftT(217);                  // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n    }\n    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 130                   // 'exactly'\n     || lk == 140                   // 'from'\n     || lk == 88657                 // 'at' 'least'\n     || lk == 93777)                // 'at' 'most'\n    {\n      try_FTLiteralRange();\n      lookahead1W(58);              // S^WS | '(:' | 'levels'\n      shiftT(175);                  // 'levels'\n    }\n  }\n\n  function parse_FTLiteralRange()\n  {\n    eventHandler.startNonterminal(\"FTLiteralRange\", e0);\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shift(130);                   // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shift(173);                 // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n        break;\n      default:\n        shift(183);                 // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n      }\n      break;\n    default:\n      shift(140);                   // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      lookahead1W(79);              // S^WS | '(:' | 'to'\n      shift(248);                   // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n    }\n    eventHandler.endNonterminal(\"FTLiteralRange\", e0);\n  }\n\n  function try_FTLiteralRange()\n  {\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shiftT(130);                  // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shiftT(173);                // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n        break;\n      default:\n        shiftT(183);                // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n      }\n      break;\n    default:\n      shiftT(140);                  // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      lookahead1W(79);              // S^WS | '(:' | 'to'\n      shiftT(248);                  // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n    }\n  }\n\n  function parse_FTStopWordOption()\n  {\n    eventHandler.startNonterminal(\"FTStopWordOption\", e0);\n    switch (l1)\n    {\n    case 239:                       // 'stop'\n      shift(239);                   // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shift(273);                   // 'words'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 109:                     // 'default'\n        shift(109);                 // 'default'\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        whitespace();\n        parse_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(75);              // S^WS | '(:' | 'stop'\n      shift(239);                   // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shift(273);                   // 'words'\n    }\n    eventHandler.endNonterminal(\"FTStopWordOption\", e0);\n  }\n\n  function try_FTStopWordOption()\n  {\n    switch (l1)\n    {\n    case 239:                       // 'stop'\n      shiftT(239);                  // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shiftT(273);                  // 'words'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 109:                     // 'default'\n        shiftT(109);                // 'default'\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        try_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(75);              // S^WS | '(:' | 'stop'\n      shiftT(239);                  // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shiftT(273);                  // 'words'\n    }\n  }\n\n  function parse_FTStopWords()\n  {\n    eventHandler.startNonterminal(\"FTStopWords\", e0);\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      break;\n    default:\n      shift(34);                    // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n      shift(37);                    // ')'\n    }\n    eventHandler.endNonterminal(\"FTStopWords\", e0);\n  }\n\n  function try_FTStopWords()\n  {\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n      break;\n    default:\n      shiftT(34);                   // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shiftT(11);                 // StringLiteral\n      }\n      shiftT(37);                   // ')'\n    }\n  }\n\n  function parse_FTStopWordsInclExcl()\n  {\n    eventHandler.startNonterminal(\"FTStopWordsInclExcl\", e0);\n    switch (l1)\n    {\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    default:\n      shift(131);                   // 'except'\n    }\n    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'\n    whitespace();\n    parse_FTStopWords();\n    eventHandler.endNonterminal(\"FTStopWordsInclExcl\", e0);\n  }\n\n  function try_FTStopWordsInclExcl()\n  {\n    switch (l1)\n    {\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    default:\n      shiftT(131);                  // 'except'\n    }\n    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'\n    try_FTStopWords();\n  }\n\n  function parse_FTLanguageOption()\n  {\n    eventHandler.startNonterminal(\"FTLanguageOption\", e0);\n    shift(169);                     // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTLanguageOption\", e0);\n  }\n\n  function try_FTLanguageOption()\n  {\n    shiftT(169);                    // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTWildCardOption()\n  {\n    eventHandler.startNonterminal(\"FTWildCardOption\", e0);\n    switch (l1)\n    {\n    case 268:                       // 'wildcards'\n      shift(268);                   // 'wildcards'\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(84);              // S^WS | '(:' | 'wildcards'\n      shift(268);                   // 'wildcards'\n    }\n    eventHandler.endNonterminal(\"FTWildCardOption\", e0);\n  }\n\n  function try_FTWildCardOption()\n  {\n    switch (l1)\n    {\n    case 268:                       // 'wildcards'\n      shiftT(268);                  // 'wildcards'\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(84);              // S^WS | '(:' | 'wildcards'\n      shiftT(268);                  // 'wildcards'\n    }\n  }\n\n  function parse_FTExtensionOption()\n  {\n    eventHandler.startNonterminal(\"FTExtensionOption\", e0);\n    shift(199);                     // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTExtensionOption\", e0);\n  }\n\n  function try_FTExtensionOption()\n  {\n    shiftT(199);                    // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTIgnoreOption()\n  {\n    eventHandler.startNonterminal(\"FTIgnoreOption\", e0);\n    shift(271);                     // 'without'\n    lookahead1W(42);                // S^WS | '(:' | 'content'\n    shift(100);                     // 'content'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_UnionExpr();\n    eventHandler.endNonterminal(\"FTIgnoreOption\", e0);\n  }\n\n  function try_FTIgnoreOption()\n  {\n    shiftT(271);                    // 'without'\n    lookahead1W(42);                // S^WS | '(:' | 'content'\n    shiftT(100);                    // 'content'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_UnionExpr();\n  }\n\n  function parse_CollectionDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionDecl\", e0);\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(107);               // S^WS | '(:' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_CollectionTypeDecl();\n    }\n    eventHandler.endNonterminal(\"CollectionDecl\", e0);\n  }\n\n  function parse_CollectionTypeDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionTypeDecl\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(156);               // S^WS | '(:' | '*' | '+' | ';' | '?'\n    if (l1 != 53)                   // ';'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"CollectionTypeDecl\", e0);\n  }\n\n  function parse_IndexName()\n  {\n    eventHandler.startNonterminal(\"IndexName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"IndexName\", e0);\n  }\n\n  function parse_IndexDomainExpr()\n  {\n    eventHandler.startNonterminal(\"IndexDomainExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexDomainExpr\", e0);\n  }\n\n  function parse_IndexKeySpec()\n  {\n    eventHandler.startNonterminal(\"IndexKeySpec\", e0);\n    parse_IndexKeyExpr();\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_IndexKeyTypeDecl();\n    }\n    lookahead1W(146);               // S^WS | '(:' | ',' | ';' | 'collation'\n    if (l1 == 94)                   // 'collation'\n    {\n      whitespace();\n      parse_IndexKeyCollation();\n    }\n    eventHandler.endNonterminal(\"IndexKeySpec\", e0);\n  }\n\n  function parse_IndexKeyExpr()\n  {\n    eventHandler.startNonterminal(\"IndexKeyExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexKeyExpr\", e0);\n  }\n\n  function parse_IndexKeyTypeDecl()\n  {\n    eventHandler.startNonterminal(\"IndexKeyTypeDecl\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AtomicType();\n    lookahead1W(169);               // S^WS | '(:' | '*' | '+' | ',' | ';' | '?' | 'collation'\n    if (l1 == 39                    // '*'\n     || l1 == 40                    // '+'\n     || l1 == 64)                   // '?'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"IndexKeyTypeDecl\", e0);\n  }\n\n  function parse_AtomicType()\n  {\n    eventHandler.startNonterminal(\"AtomicType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicType\", e0);\n  }\n\n  function parse_IndexKeyCollation()\n  {\n    eventHandler.startNonterminal(\"IndexKeyCollation\", e0);\n    shift(94);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"IndexKeyCollation\", e0);\n  }\n\n  function parse_IndexDecl()\n  {\n    eventHandler.startNonterminal(\"IndexDecl\", e0);\n    shift(155);                     // 'index'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_IndexName();\n    lookahead1W(65);                // S^WS | '(:' | 'on'\n    shift(197);                     // 'on'\n    lookahead1W(63);                // S^WS | '(:' | 'nodes'\n    shift(192);                     // 'nodes'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_IndexDomainExpr();\n    shift(87);                      // 'by'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_IndexKeySpec();\n    for (;;)\n    {\n      lookahead1W(103);             // S^WS | '(:' | ',' | ';'\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_IndexKeySpec();\n    }\n    eventHandler.endNonterminal(\"IndexDecl\", e0);\n  }\n\n  function parse_ICDecl()\n  {\n    eventHandler.startNonterminal(\"ICDecl\", e0);\n    shift(161);                     // 'integrity'\n    lookahead1W(40);                // S^WS | '(:' | 'constraint'\n    shift(97);                      // 'constraint'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(120);               // S^WS | '(:' | 'foreign' | 'on'\n    switch (l1)\n    {\n    case 197:                       // 'on'\n      whitespace();\n      parse_ICCollection();\n      break;\n    default:\n      whitespace();\n      parse_ICForeignKey();\n    }\n    eventHandler.endNonterminal(\"ICDecl\", e0);\n  }\n\n  function parse_ICCollection()\n  {\n    eventHandler.startNonterminal(\"ICCollection\", e0);\n    shift(197);                     // 'on'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(140);               // S^WS | '$' | '(:' | 'foreach' | 'node'\n    switch (l1)\n    {\n    case 31:                        // '$'\n      whitespace();\n      parse_ICCollSequence();\n      break;\n    case 191:                       // 'node'\n      whitespace();\n      parse_ICCollSequenceUnique();\n      break;\n    default:\n      whitespace();\n      parse_ICCollNode();\n    }\n    eventHandler.endNonterminal(\"ICCollection\", e0);\n  }\n\n  function parse_ICCollSequence()\n  {\n    eventHandler.startNonterminal(\"ICCollSequence\", e0);\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollSequence\", e0);\n  }\n\n  function parse_ICCollSequenceUnique()\n  {\n    eventHandler.startNonterminal(\"ICCollSequenceUnique\", e0);\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(80);                // S^WS | '(:' | 'unique'\n    shift(255);                     // 'unique'\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICCollSequenceUnique\", e0);\n  }\n\n  function parse_ICCollNode()\n  {\n    eventHandler.startNonterminal(\"ICCollNode\", e0);\n    shift(138);                     // 'foreach'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollNode\", e0);\n  }\n\n  function parse_ICForeignKey()\n  {\n    eventHandler.startNonterminal(\"ICForeignKey\", e0);\n    shift(139);                     // 'foreign'\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(51);                // S^WS | '(:' | 'from'\n    whitespace();\n    parse_ICForeignKeySource();\n    whitespace();\n    parse_ICForeignKeyTarget();\n    eventHandler.endNonterminal(\"ICForeignKey\", e0);\n  }\n\n  function parse_ICForeignKeySource()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeySource\", e0);\n    shift(140);                     // 'from'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeySource\", e0);\n  }\n\n  function parse_ICForeignKeyTarget()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyTarget\", e0);\n    shift(248);                     // 'to'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeyTarget\", e0);\n  }\n\n  function parse_ICForeignKeyValues()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyValues\", e0);\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICForeignKeyValues\", e0);\n  }\n\n  function try_Comment()\n  {\n    shiftT(36);                     // '(:'\n    for (;;)\n    {\n      lookahead1(89);               // CommentContents | '(:' | ':)'\n      if (l1 == 50)                 // ':)'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 24:                      // CommentContents\n        shiftT(24);                 // CommentContents\n        break;\n      default:\n        try_Comment();\n      }\n    }\n    shiftT(50);                     // ':)'\n  }\n\n  function try_Whitespace()\n  {\n    switch (l1)\n    {\n    case 22:                        // S^WS\n      shiftT(22);                   // S^WS\n      break;\n    default:\n      try_Comment();\n    }\n  }\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    lookahead1(249);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      break;\n    case 96:                        // 'comment'\n      shift(96);                    // 'comment'\n      break;\n    case 120:                       // 'document-node'\n      shift(120);                   // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shift(124);                   // 'empty-sequence'\n      break;\n    case 145:                       // 'function'\n      shift(145);                   // 'function'\n      break;\n    case 152:                       // 'if'\n      shift(152);                   // 'if'\n      break;\n    case 165:                       // 'item'\n      shift(165);                   // 'item'\n      break;\n    case 185:                       // 'namespace-node'\n      shift(185);                   // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    case 216:                       // 'processing-instruction'\n      shift(216);                   // 'processing-instruction'\n      break;\n    case 226:                       // 'schema-attribute'\n      shift(226);                   // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shift(227);                   // 'schema-element'\n      break;\n    case 243:                       // 'switch'\n      shift(243);                   // 'switch'\n      break;\n    case 244:                       // 'text'\n      shift(244);                   // 'text'\n      break;\n    case 253:                       // 'typeswitch'\n      shift(253);                   // 'typeswitch'\n      break;\n    case 78:                        // 'array'\n      shift(78);                    // 'array'\n      break;\n    case 167:                       // 'json-item'\n      shift(167);                   // 'json-item'\n      break;\n    case 242:                       // 'structured-item'\n      shift(242);                   // 'structured-item'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function try_EQName()\n  {\n    lookahead1(249);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      break;\n    case 96:                        // 'comment'\n      shiftT(96);                   // 'comment'\n      break;\n    case 120:                       // 'document-node'\n      shiftT(120);                  // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shiftT(124);                  // 'empty-sequence'\n      break;\n    case 145:                       // 'function'\n      shiftT(145);                  // 'function'\n      break;\n    case 152:                       // 'if'\n      shiftT(152);                  // 'if'\n      break;\n    case 165:                       // 'item'\n      shiftT(165);                  // 'item'\n      break;\n    case 185:                       // 'namespace-node'\n      shiftT(185);                  // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    case 216:                       // 'processing-instruction'\n      shiftT(216);                  // 'processing-instruction'\n      break;\n    case 226:                       // 'schema-attribute'\n      shiftT(226);                  // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shiftT(227);                  // 'schema-element'\n      break;\n    case 243:                       // 'switch'\n      shiftT(243);                  // 'switch'\n      break;\n    case 244:                       // 'text'\n      shiftT(244);                  // 'text'\n      break;\n    case 253:                       // 'typeswitch'\n      shiftT(253);                  // 'typeswitch'\n      break;\n    case 78:                        // 'array'\n      shiftT(78);                   // 'array'\n      break;\n    case 167:                       // 'json-item'\n      shiftT(167);                  // 'json-item'\n      break;\n    case 242:                       // 'structured-item'\n      shiftT(242);                  // 'structured-item'\n      break;\n    default:\n      try_FunctionName();\n    }\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shift(6);                     // EQName^Token\n      break;\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shift(74);                    // 'ancestor-or-self'\n      break;\n    case 75:                        // 'and'\n      shift(75);                    // 'and'\n      break;\n    case 79:                        // 'as'\n      shift(79);                    // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shift(80);                    // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      break;\n    case 89:                        // 'cast'\n      shift(89);                    // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shift(90);                    // 'castable'\n      break;\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      break;\n    case 94:                        // 'collation'\n      shift(94);                    // 'collation'\n      break;\n    case 103:                       // 'copy'\n      shift(103);                   // 'copy'\n      break;\n    case 105:                       // 'count'\n      shift(105);                   // 'count'\n      break;\n    case 108:                       // 'declare'\n      shift(108);                   // 'declare'\n      break;\n    case 109:                       // 'default'\n      shift(109);                   // 'default'\n      break;\n    case 110:                       // 'delete'\n      shift(110);                   // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      break;\n    case 113:                       // 'descending'\n      shift(113);                   // 'descending'\n      break;\n    case 118:                       // 'div'\n      shift(118);                   // 'div'\n      break;\n    case 119:                       // 'document'\n      shift(119);                   // 'document'\n      break;\n    case 122:                       // 'else'\n      shift(122);                   // 'else'\n      break;\n    case 123:                       // 'empty'\n      shift(123);                   // 'empty'\n      break;\n    case 126:                       // 'end'\n      shift(126);                   // 'end'\n      break;\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 129:                       // 'every'\n      shift(129);                   // 'every'\n      break;\n    case 131:                       // 'except'\n      shift(131);                   // 'except'\n      break;\n    case 134:                       // 'first'\n      shift(134);                   // 'first'\n      break;\n    case 135:                       // 'following'\n      shift(135);                   // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      break;\n    case 137:                       // 'for'\n      shift(137);                   // 'for'\n      break;\n    case 146:                       // 'ge'\n      shift(146);                   // 'ge'\n      break;\n    case 148:                       // 'group'\n      shift(148);                   // 'group'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shift(151);                   // 'idiv'\n      break;\n    case 153:                       // 'import'\n      shift(153);                   // 'import'\n      break;\n    case 159:                       // 'insert'\n      shift(159);                   // 'insert'\n      break;\n    case 160:                       // 'instance'\n      shift(160);                   // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shift(162);                   // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shift(163);                   // 'into'\n      break;\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 170:                       // 'last'\n      shift(170);                   // 'last'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 174:                       // 'let'\n      shift(174);                   // 'let'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shift(180);                   // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shift(181);                   // 'modify'\n      break;\n    case 182:                       // 'module'\n      shift(182);                   // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 198:                       // 'only'\n      shift(198);                   // 'only'\n      break;\n    case 200:                       // 'or'\n      shift(200);                   // 'or'\n      break;\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      break;\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      break;\n    case 218:                       // 'rename'\n      shift(218);                   // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shift(219);                   // 'replace'\n      break;\n    case 220:                       // 'return'\n      shift(220);                   // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shift(224);                   // 'satisfies'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      break;\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    case 236:                       // 'stable'\n      shift(236);                   // 'stable'\n      break;\n    case 237:                       // 'start'\n      shift(237);                   // 'start'\n      break;\n    case 248:                       // 'to'\n      shift(248);                   // 'to'\n      break;\n    case 249:                       // 'treat'\n      shift(249);                   // 'treat'\n      break;\n    case 250:                       // 'try'\n      shift(250);                   // 'try'\n      break;\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    case 256:                       // 'unordered'\n      shift(256);                   // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shift(260);                   // 'validate'\n      break;\n    case 266:                       // 'where'\n      shift(266);                   // 'where'\n      break;\n    case 270:                       // 'with'\n      shift(270);                   // 'with'\n      break;\n    case 274:                       // 'xquery'\n      shift(274);                   // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shift(72);                    // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shift(83);                    // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shift(85);                    // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shift(86);                    // 'break'\n      break;\n    case 91:                        // 'catch'\n      shift(91);                    // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shift(98);                    // 'construction'\n      break;\n    case 101:                       // 'context'\n      shift(101);                   // 'context'\n      break;\n    case 102:                       // 'continue'\n      shift(102);                   // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shift(104);                   // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shift(132);                   // 'exit'\n      break;\n    case 133:                       // 'external'\n      shift(133);                   // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shift(141);                   // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shift(154);                   // 'in'\n      break;\n    case 155:                       // 'index'\n      shift(155);                   // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shift(161);                   // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shift(192);                   // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shift(199);                   // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shift(203);                   // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shift(222);                   // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shift(225);                   // 'schema'\n      break;\n    case 228:                       // 'score'\n      shift(228);                   // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shift(234);                   // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shift(251);                   // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shift(252);                   // 'type'\n      break;\n    case 257:                       // 'updating'\n      shift(257);                   // 'updating'\n      break;\n    case 261:                       // 'value'\n      shift(261);                   // 'value'\n      break;\n    case 262:                       // 'variable'\n      shift(262);                   // 'variable'\n      break;\n    case 263:                       // 'version'\n      shift(263);                   // 'version'\n      break;\n    case 267:                       // 'while'\n      shift(267);                   // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shift(97);                    // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shift(176);                   // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shift(221);                   // 'returning'\n      break;\n    case 77:                        // 'append'\n      shift(77);                    // 'append'\n      break;\n    case 166:                       // 'json'\n      shift(166);                   // 'json'\n      break;\n    default:\n      shift(194);                   // 'object'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function try_FunctionName()\n  {\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shiftT(6);                    // EQName^Token\n      break;\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shiftT(74);                   // 'ancestor-or-self'\n      break;\n    case 75:                        // 'and'\n      shiftT(75);                   // 'and'\n      break;\n    case 79:                        // 'as'\n      shiftT(79);                   // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shiftT(80);                   // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      break;\n    case 89:                        // 'cast'\n      shiftT(89);                   // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shiftT(90);                   // 'castable'\n      break;\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      break;\n    case 94:                        // 'collation'\n      shiftT(94);                   // 'collation'\n      break;\n    case 103:                       // 'copy'\n      shiftT(103);                  // 'copy'\n      break;\n    case 105:                       // 'count'\n      shiftT(105);                  // 'count'\n      break;\n    case 108:                       // 'declare'\n      shiftT(108);                  // 'declare'\n      break;\n    case 109:                       // 'default'\n      shiftT(109);                  // 'default'\n      break;\n    case 110:                       // 'delete'\n      shiftT(110);                  // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      break;\n    case 113:                       // 'descending'\n      shiftT(113);                  // 'descending'\n      break;\n    case 118:                       // 'div'\n      shiftT(118);                  // 'div'\n      break;\n    case 119:                       // 'document'\n      shiftT(119);                  // 'document'\n      break;\n    case 122:                       // 'else'\n      shiftT(122);                  // 'else'\n      break;\n    case 123:                       // 'empty'\n      shiftT(123);                  // 'empty'\n      break;\n    case 126:                       // 'end'\n      shiftT(126);                  // 'end'\n      break;\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 129:                       // 'every'\n      shiftT(129);                  // 'every'\n      break;\n    case 131:                       // 'except'\n      shiftT(131);                  // 'except'\n      break;\n    case 134:                       // 'first'\n      shiftT(134);                  // 'first'\n      break;\n    case 135:                       // 'following'\n      shiftT(135);                  // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      break;\n    case 137:                       // 'for'\n      shiftT(137);                  // 'for'\n      break;\n    case 146:                       // 'ge'\n      shiftT(146);                  // 'ge'\n      break;\n    case 148:                       // 'group'\n      shiftT(148);                  // 'group'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shiftT(151);                  // 'idiv'\n      break;\n    case 153:                       // 'import'\n      shiftT(153);                  // 'import'\n      break;\n    case 159:                       // 'insert'\n      shiftT(159);                  // 'insert'\n      break;\n    case 160:                       // 'instance'\n      shiftT(160);                  // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shiftT(162);                  // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shiftT(163);                  // 'into'\n      break;\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 170:                       // 'last'\n      shiftT(170);                  // 'last'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 174:                       // 'let'\n      shiftT(174);                  // 'let'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shiftT(180);                  // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shiftT(181);                  // 'modify'\n      break;\n    case 182:                       // 'module'\n      shiftT(182);                  // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shiftT(184);                  // 'namespace'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 198:                       // 'only'\n      shiftT(198);                  // 'only'\n      break;\n    case 200:                       // 'or'\n      shiftT(200);                  // 'or'\n      break;\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      break;\n    case 202:                       // 'ordered'\n      shiftT(202);                  // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      break;\n    case 218:                       // 'rename'\n      shiftT(218);                  // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shiftT(219);                  // 'replace'\n      break;\n    case 220:                       // 'return'\n      shiftT(220);                  // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shiftT(224);                  // 'satisfies'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      break;\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    case 236:                       // 'stable'\n      shiftT(236);                  // 'stable'\n      break;\n    case 237:                       // 'start'\n      shiftT(237);                  // 'start'\n      break;\n    case 248:                       // 'to'\n      shiftT(248);                  // 'to'\n      break;\n    case 249:                       // 'treat'\n      shiftT(249);                  // 'treat'\n      break;\n    case 250:                       // 'try'\n      shiftT(250);                  // 'try'\n      break;\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    case 256:                       // 'unordered'\n      shiftT(256);                  // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shiftT(260);                  // 'validate'\n      break;\n    case 266:                       // 'where'\n      shiftT(266);                  // 'where'\n      break;\n    case 270:                       // 'with'\n      shiftT(270);                  // 'with'\n      break;\n    case 274:                       // 'xquery'\n      shiftT(274);                  // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shiftT(72);                   // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shiftT(83);                   // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shiftT(85);                   // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shiftT(86);                   // 'break'\n      break;\n    case 91:                        // 'catch'\n      shiftT(91);                   // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shiftT(98);                   // 'construction'\n      break;\n    case 101:                       // 'context'\n      shiftT(101);                  // 'context'\n      break;\n    case 102:                       // 'continue'\n      shiftT(102);                  // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shiftT(104);                  // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shiftT(106);                  // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shiftT(125);                  // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shiftT(132);                  // 'exit'\n      break;\n    case 133:                       // 'external'\n      shiftT(133);                  // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shiftT(141);                  // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shiftT(154);                  // 'in'\n      break;\n    case 155:                       // 'index'\n      shiftT(155);                  // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shiftT(161);                  // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shiftT(192);                  // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shiftT(199);                  // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shiftT(203);                  // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shiftT(222);                  // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shiftT(225);                  // 'schema'\n      break;\n    case 228:                       // 'score'\n      shiftT(228);                  // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shiftT(234);                  // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shiftT(240);                  // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shiftT(251);                  // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shiftT(252);                  // 'type'\n      break;\n    case 257:                       // 'updating'\n      shiftT(257);                  // 'updating'\n      break;\n    case 261:                       // 'value'\n      shiftT(261);                  // 'value'\n      break;\n    case 262:                       // 'variable'\n      shiftT(262);                  // 'variable'\n      break;\n    case 263:                       // 'version'\n      shiftT(263);                  // 'version'\n      break;\n    case 267:                       // 'while'\n      shiftT(267);                  // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shiftT(97);                   // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shiftT(176);                  // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shiftT(221);                  // 'returning'\n      break;\n    case 77:                        // 'append'\n      shiftT(77);                   // 'append'\n      break;\n    case 166:                       // 'json'\n      shiftT(166);                  // 'json'\n      break;\n    default:\n      shiftT(194);                  // 'object'\n    }\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shift(19);                    // NCName^Token\n      break;\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 75:                        // 'and'\n      shift(75);                    // 'and'\n      break;\n    case 79:                        // 'as'\n      shift(79);                    // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shift(80);                    // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      break;\n    case 89:                        // 'cast'\n      shift(89);                    // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shift(90);                    // 'castable'\n      break;\n    case 94:                        // 'collation'\n      shift(94);                    // 'collation'\n      break;\n    case 105:                       // 'count'\n      shift(105);                   // 'count'\n      break;\n    case 109:                       // 'default'\n      shift(109);                   // 'default'\n      break;\n    case 113:                       // 'descending'\n      shift(113);                   // 'descending'\n      break;\n    case 118:                       // 'div'\n      shift(118);                   // 'div'\n      break;\n    case 122:                       // 'else'\n      shift(122);                   // 'else'\n      break;\n    case 123:                       // 'empty'\n      shift(123);                   // 'empty'\n      break;\n    case 126:                       // 'end'\n      shift(126);                   // 'end'\n      break;\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 131:                       // 'except'\n      shift(131);                   // 'except'\n      break;\n    case 137:                       // 'for'\n      shift(137);                   // 'for'\n      break;\n    case 146:                       // 'ge'\n      shift(146);                   // 'ge'\n      break;\n    case 148:                       // 'group'\n      shift(148);                   // 'group'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shift(151);                   // 'idiv'\n      break;\n    case 160:                       // 'instance'\n      shift(160);                   // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shift(162);                   // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shift(163);                   // 'into'\n      break;\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 174:                       // 'let'\n      shift(174);                   // 'let'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shift(180);                   // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shift(181);                   // 'modify'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 198:                       // 'only'\n      shift(198);                   // 'only'\n      break;\n    case 200:                       // 'or'\n      shift(200);                   // 'or'\n      break;\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      break;\n    case 220:                       // 'return'\n      shift(220);                   // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shift(224);                   // 'satisfies'\n      break;\n    case 236:                       // 'stable'\n      shift(236);                   // 'stable'\n      break;\n    case 237:                       // 'start'\n      shift(237);                   // 'start'\n      break;\n    case 248:                       // 'to'\n      shift(248);                   // 'to'\n      break;\n    case 249:                       // 'treat'\n      shift(249);                   // 'treat'\n      break;\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    case 266:                       // 'where'\n      shift(266);                   // 'where'\n      break;\n    case 270:                       // 'with'\n      shift(270);                   // 'with'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shift(74);                    // 'ancestor-or-self'\n      break;\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      break;\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      break;\n    case 96:                        // 'comment'\n      shift(96);                    // 'comment'\n      break;\n    case 103:                       // 'copy'\n      shift(103);                   // 'copy'\n      break;\n    case 108:                       // 'declare'\n      shift(108);                   // 'declare'\n      break;\n    case 110:                       // 'delete'\n      shift(110);                   // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      break;\n    case 119:                       // 'document'\n      shift(119);                   // 'document'\n      break;\n    case 120:                       // 'document-node'\n      shift(120);                   // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shift(124);                   // 'empty-sequence'\n      break;\n    case 129:                       // 'every'\n      shift(129);                   // 'every'\n      break;\n    case 134:                       // 'first'\n      shift(134);                   // 'first'\n      break;\n    case 135:                       // 'following'\n      shift(135);                   // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      break;\n    case 145:                       // 'function'\n      shift(145);                   // 'function'\n      break;\n    case 152:                       // 'if'\n      shift(152);                   // 'if'\n      break;\n    case 153:                       // 'import'\n      shift(153);                   // 'import'\n      break;\n    case 159:                       // 'insert'\n      shift(159);                   // 'insert'\n      break;\n    case 165:                       // 'item'\n      shift(165);                   // 'item'\n      break;\n    case 170:                       // 'last'\n      shift(170);                   // 'last'\n      break;\n    case 182:                       // 'module'\n      shift(182);                   // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      break;\n    case 185:                       // 'namespace-node'\n      shift(185);                   // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'processing-instruction'\n      shift(216);                   // 'processing-instruction'\n      break;\n    case 218:                       // 'rename'\n      shift(218);                   // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shift(219);                   // 'replace'\n      break;\n    case 226:                       // 'schema-attribute'\n      shift(226);                   // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shift(227);                   // 'schema-element'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      break;\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    case 243:                       // 'switch'\n      shift(243);                   // 'switch'\n      break;\n    case 244:                       // 'text'\n      shift(244);                   // 'text'\n      break;\n    case 250:                       // 'try'\n      shift(250);                   // 'try'\n      break;\n    case 253:                       // 'typeswitch'\n      shift(253);                   // 'typeswitch'\n      break;\n    case 256:                       // 'unordered'\n      shift(256);                   // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shift(260);                   // 'validate'\n      break;\n    case 262:                       // 'variable'\n      shift(262);                   // 'variable'\n      break;\n    case 274:                       // 'xquery'\n      shift(274);                   // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shift(72);                    // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shift(83);                    // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shift(85);                    // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shift(86);                    // 'break'\n      break;\n    case 91:                        // 'catch'\n      shift(91);                    // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shift(98);                    // 'construction'\n      break;\n    case 101:                       // 'context'\n      shift(101);                   // 'context'\n      break;\n    case 102:                       // 'continue'\n      shift(102);                   // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shift(104);                   // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shift(132);                   // 'exit'\n      break;\n    case 133:                       // 'external'\n      shift(133);                   // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shift(141);                   // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shift(154);                   // 'in'\n      break;\n    case 155:                       // 'index'\n      shift(155);                   // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shift(161);                   // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shift(192);                   // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shift(199);                   // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shift(203);                   // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shift(222);                   // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shift(225);                   // 'schema'\n      break;\n    case 228:                       // 'score'\n      shift(228);                   // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shift(234);                   // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shift(251);                   // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shift(252);                   // 'type'\n      break;\n    case 257:                       // 'updating'\n      shift(257);                   // 'updating'\n      break;\n    case 261:                       // 'value'\n      shift(261);                   // 'value'\n      break;\n    case 263:                       // 'version'\n      shift(263);                   // 'version'\n      break;\n    case 267:                       // 'while'\n      shift(267);                   // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shift(97);                    // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shift(176);                   // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shift(221);                   // 'returning'\n      break;\n    case 77:                        // 'append'\n      shift(77);                    // 'append'\n      break;\n    case 166:                       // 'json'\n      shift(166);                   // 'json'\n      break;\n    default:\n      shift(194);                   // 'object'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function try_NCName()\n  {\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shiftT(19);                   // NCName^Token\n      break;\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 75:                        // 'and'\n      shiftT(75);                   // 'and'\n      break;\n    case 79:                        // 'as'\n      shiftT(79);                   // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shiftT(80);                   // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      break;\n    case 89:                        // 'cast'\n      shiftT(89);                   // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shiftT(90);                   // 'castable'\n      break;\n    case 94:                        // 'collation'\n      shiftT(94);                   // 'collation'\n      break;\n    case 105:                       // 'count'\n      shiftT(105);                  // 'count'\n      break;\n    case 109:                       // 'default'\n      shiftT(109);                  // 'default'\n      break;\n    case 113:                       // 'descending'\n      shiftT(113);                  // 'descending'\n      break;\n    case 118:                       // 'div'\n      shiftT(118);                  // 'div'\n      break;\n    case 122:                       // 'else'\n      shiftT(122);                  // 'else'\n      break;\n    case 123:                       // 'empty'\n      shiftT(123);                  // 'empty'\n      break;\n    case 126:                       // 'end'\n      shiftT(126);                  // 'end'\n      break;\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 131:                       // 'except'\n      shiftT(131);                  // 'except'\n      break;\n    case 137:                       // 'for'\n      shiftT(137);                  // 'for'\n      break;\n    case 146:                       // 'ge'\n      shiftT(146);                  // 'ge'\n      break;\n    case 148:                       // 'group'\n      shiftT(148);                  // 'group'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shiftT(151);                  // 'idiv'\n      break;\n    case 160:                       // 'instance'\n      shiftT(160);                  // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shiftT(162);                  // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shiftT(163);                  // 'into'\n      break;\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 174:                       // 'let'\n      shiftT(174);                  // 'let'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shiftT(180);                  // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shiftT(181);                  // 'modify'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 198:                       // 'only'\n      shiftT(198);                  // 'only'\n      break;\n    case 200:                       // 'or'\n      shiftT(200);                  // 'or'\n      break;\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      break;\n    case 220:                       // 'return'\n      shiftT(220);                  // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shiftT(224);                  // 'satisfies'\n      break;\n    case 236:                       // 'stable'\n      shiftT(236);                  // 'stable'\n      break;\n    case 237:                       // 'start'\n      shiftT(237);                  // 'start'\n      break;\n    case 248:                       // 'to'\n      shiftT(248);                  // 'to'\n      break;\n    case 249:                       // 'treat'\n      shiftT(249);                  // 'treat'\n      break;\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    case 266:                       // 'where'\n      shiftT(266);                  // 'where'\n      break;\n    case 270:                       // 'with'\n      shiftT(270);                  // 'with'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shiftT(74);                   // 'ancestor-or-self'\n      break;\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      break;\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      break;\n    case 96:                        // 'comment'\n      shiftT(96);                   // 'comment'\n      break;\n    case 103:                       // 'copy'\n      shiftT(103);                  // 'copy'\n      break;\n    case 108:                       // 'declare'\n      shiftT(108);                  // 'declare'\n      break;\n    case 110:                       // 'delete'\n      shiftT(110);                  // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      break;\n    case 119:                       // 'document'\n      shiftT(119);                  // 'document'\n      break;\n    case 120:                       // 'document-node'\n      shiftT(120);                  // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shiftT(124);                  // 'empty-sequence'\n      break;\n    case 129:                       // 'every'\n      shiftT(129);                  // 'every'\n      break;\n    case 134:                       // 'first'\n      shiftT(134);                  // 'first'\n      break;\n    case 135:                       // 'following'\n      shiftT(135);                  // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      break;\n    case 145:                       // 'function'\n      shiftT(145);                  // 'function'\n      break;\n    case 152:                       // 'if'\n      shiftT(152);                  // 'if'\n      break;\n    case 153:                       // 'import'\n      shiftT(153);                  // 'import'\n      break;\n    case 159:                       // 'insert'\n      shiftT(159);                  // 'insert'\n      break;\n    case 165:                       // 'item'\n      shiftT(165);                  // 'item'\n      break;\n    case 170:                       // 'last'\n      shiftT(170);                  // 'last'\n      break;\n    case 182:                       // 'module'\n      shiftT(182);                  // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shiftT(184);                  // 'namespace'\n      break;\n    case 185:                       // 'namespace-node'\n      shiftT(185);                  // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    case 202:                       // 'ordered'\n      shiftT(202);                  // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      break;\n    case 216:                       // 'processing-instruction'\n      shiftT(216);                  // 'processing-instruction'\n      break;\n    case 218:                       // 'rename'\n      shiftT(218);                  // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shiftT(219);                  // 'replace'\n      break;\n    case 226:                       // 'schema-attribute'\n      shiftT(226);                  // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shiftT(227);                  // 'schema-element'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      break;\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    case 243:                       // 'switch'\n      shiftT(243);                  // 'switch'\n      break;\n    case 244:                       // 'text'\n      shiftT(244);                  // 'text'\n      break;\n    case 250:                       // 'try'\n      shiftT(250);                  // 'try'\n      break;\n    case 253:                       // 'typeswitch'\n      shiftT(253);                  // 'typeswitch'\n      break;\n    case 256:                       // 'unordered'\n      shiftT(256);                  // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shiftT(260);                  // 'validate'\n      break;\n    case 262:                       // 'variable'\n      shiftT(262);                  // 'variable'\n      break;\n    case 274:                       // 'xquery'\n      shiftT(274);                  // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shiftT(72);                   // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shiftT(83);                   // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shiftT(85);                   // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shiftT(86);                   // 'break'\n      break;\n    case 91:                        // 'catch'\n      shiftT(91);                   // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shiftT(98);                   // 'construction'\n      break;\n    case 101:                       // 'context'\n      shiftT(101);                  // 'context'\n      break;\n    case 102:                       // 'continue'\n      shiftT(102);                  // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shiftT(104);                  // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shiftT(106);                  // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shiftT(125);                  // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shiftT(132);                  // 'exit'\n      break;\n    case 133:                       // 'external'\n      shiftT(133);                  // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shiftT(141);                  // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shiftT(154);                  // 'in'\n      break;\n    case 155:                       // 'index'\n      shiftT(155);                  // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shiftT(161);                  // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shiftT(192);                  // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shiftT(199);                  // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shiftT(203);                  // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shiftT(222);                  // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shiftT(225);                  // 'schema'\n      break;\n    case 228:                       // 'score'\n      shiftT(228);                  // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shiftT(234);                  // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shiftT(240);                  // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shiftT(251);                  // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shiftT(252);                  // 'type'\n      break;\n    case 257:                       // 'updating'\n      shiftT(257);                  // 'updating'\n      break;\n    case 261:                       // 'value'\n      shiftT(261);                  // 'value'\n      break;\n    case 263:                       // 'version'\n      shiftT(263);                  // 'version'\n      break;\n    case 267:                       // 'while'\n      shiftT(267);                  // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shiftT(97);                   // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shiftT(176);                  // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shiftT(221);                  // 'returning'\n      break;\n    case 77:                        // 'append'\n      shiftT(77);                   // 'append'\n      break;\n    case 166:                       // 'json'\n      shiftT(166);                  // 'json'\n      break;\n    default:\n      shiftT(194);                  // 'object'\n    }\n  }\n\n  function parse_MainModule()\n  {\n    eventHandler.startNonterminal(\"MainModule\", e0);\n    parse_Prolog();\n    whitespace();\n    parse_Program();\n    eventHandler.endNonterminal(\"MainModule\", e0);\n  }\n\n  function parse_Program()\n  {\n    eventHandler.startNonterminal(\"Program\", e0);\n    parse_StatementsAndOptionalExpr();\n    eventHandler.endNonterminal(\"Program\", e0);\n  }\n\n  function parse_Statements()\n  {\n    eventHandler.startNonterminal(\"Statements\", e0);\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 34:                      // '('\n        lookahead2W(268);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 35:                      // '(#'\n        lookahead2(251);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 46:                      // '/'\n        lookahead2W(283);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 47:                      // '//'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 54:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 55:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 59:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 66:                      // '@'\n        lookahead2W(256);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 68:                      // '['\n        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 77:                      // 'append'\n        lookahead2W(199);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 82:                      // 'attribute'\n        lookahead2W(280);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 121:                     // 'element'\n        lookahead2W(279);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 132:                     // 'exit'\n        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 137:                     // 'for'\n        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 174:                     // 'let'\n        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 218:                     // 'rename'\n        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 219:                     // 'replace'\n        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 260:                     // 'validate'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 276:                     // '{'\n        lookahead2W(276);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 278:                     // '{|'\n        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 5:                       // Wildcard\n      case 45:                      // '..'\n        lookahead2W(185);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |\n        break;\n      case 31:                      // '$'\n      case 32:                      // '%'\n        lookahead2W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 40:                      // '+'\n      case 42:                      // '-'\n        lookahead2W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 86:                      // 'break'\n      case 102:                     // 'continue'\n        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 110:                     // 'delete'\n      case 159:                     // 'insert'\n        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 184:                     // 'namespace'\n      case 216:                     // 'processing-instruction'\n        lookahead2W(267);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 103:                     // 'copy'\n      case 129:                     // 'every'\n      case 235:                     // 'some'\n      case 262:                     // 'variable'\n        lookahead2W(196);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 44:                      // '.'\n        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 78:                      // 'array'\n      case 124:                     // 'empty-sequence'\n      case 165:                     // 'item'\n      case 167:                     // 'json-item'\n      case 242:                     // 'structured-item'\n        lookahead2W(190);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 96:                      // 'comment'\n      case 119:                     // 'document'\n      case 202:                     // 'ordered'\n      case 244:                     // 'text'\n      case 250:                     // 'try'\n      case 256:                     // 'unordered'\n        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 73:                      // 'ancestor'\n      case 74:                      // 'ancestor-or-self'\n      case 93:                      // 'child'\n      case 111:                     // 'descendant'\n      case 112:                     // 'descendant-or-self'\n      case 135:                     // 'following'\n      case 136:                     // 'following-sibling'\n      case 206:                     // 'parent'\n      case 212:                     // 'preceding'\n      case 213:                     // 'preceding-sibling'\n      case 229:                     // 'self'\n        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 6:                       // EQName^Token\n      case 70:                      // 'after'\n      case 72:                      // 'allowing'\n      case 75:                      // 'and'\n      case 79:                      // 'as'\n      case 80:                      // 'ascending'\n      case 81:                      // 'at'\n      case 83:                      // 'base-uri'\n      case 84:                      // 'before'\n      case 85:                      // 'boundary-space'\n      case 88:                      // 'case'\n      case 89:                      // 'cast'\n      case 90:                      // 'castable'\n      case 91:                      // 'catch'\n      case 94:                      // 'collation'\n      case 97:                      // 'constraint'\n      case 98:                      // 'construction'\n      case 101:                     // 'context'\n      case 104:                     // 'copy-namespaces'\n      case 105:                     // 'count'\n      case 106:                     // 'decimal-format'\n      case 108:                     // 'declare'\n      case 109:                     // 'default'\n      case 113:                     // 'descending'\n      case 118:                     // 'div'\n      case 120:                     // 'document-node'\n      case 122:                     // 'else'\n      case 123:                     // 'empty'\n      case 125:                     // 'encoding'\n      case 126:                     // 'end'\n      case 128:                     // 'eq'\n      case 131:                     // 'except'\n      case 133:                     // 'external'\n      case 134:                     // 'first'\n      case 141:                     // 'ft-option'\n      case 145:                     // 'function'\n      case 146:                     // 'ge'\n      case 148:                     // 'group'\n      case 150:                     // 'gt'\n      case 151:                     // 'idiv'\n      case 152:                     // 'if'\n      case 153:                     // 'import'\n      case 154:                     // 'in'\n      case 155:                     // 'index'\n      case 160:                     // 'instance'\n      case 161:                     // 'integrity'\n      case 162:                     // 'intersect'\n      case 163:                     // 'into'\n      case 164:                     // 'is'\n      case 166:                     // 'json'\n      case 170:                     // 'last'\n      case 171:                     // 'lax'\n      case 172:                     // 'le'\n      case 176:                     // 'loop'\n      case 178:                     // 'lt'\n      case 180:                     // 'mod'\n      case 181:                     // 'modify'\n      case 182:                     // 'module'\n      case 185:                     // 'namespace-node'\n      case 186:                     // 'ne'\n      case 191:                     // 'node'\n      case 192:                     // 'nodes'\n      case 194:                     // 'object'\n      case 198:                     // 'only'\n      case 199:                     // 'option'\n      case 200:                     // 'or'\n      case 201:                     // 'order'\n      case 203:                     // 'ordering'\n      case 220:                     // 'return'\n      case 221:                     // 'returning'\n      case 222:                     // 'revalidation'\n      case 224:                     // 'satisfies'\n      case 225:                     // 'schema'\n      case 226:                     // 'schema-attribute'\n      case 227:                     // 'schema-element'\n      case 228:                     // 'score'\n      case 234:                     // 'sliding'\n      case 236:                     // 'stable'\n      case 237:                     // 'start'\n      case 240:                     // 'strict'\n      case 243:                     // 'switch'\n      case 248:                     // 'to'\n      case 249:                     // 'treat'\n      case 251:                     // 'tumbling'\n      case 252:                     // 'type'\n      case 253:                     // 'typeswitch'\n      case 254:                     // 'union'\n      case 257:                     // 'updating'\n      case 261:                     // 'value'\n      case 263:                     // 'version'\n      case 266:                     // 'where'\n      case 267:                     // 'while'\n      case 270:                     // 'with'\n      case 274:                     // 'xquery'\n        lookahead2W(194);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 53                  // ';'\n       && lk != 282                 // '}'\n       && lk != 12805               // Wildcard EOF\n       && lk != 12806               // EQName^Token EOF\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12844               // '.' EOF\n       && lk != 12845               // '..' EOF\n       && lk != 12846               // '/' EOF\n       && lk != 12870               // 'after' EOF\n       && lk != 12872               // 'allowing' EOF\n       && lk != 12873               // 'ancestor' EOF\n       && lk != 12874               // 'ancestor-or-self' EOF\n       && lk != 12875               // 'and' EOF\n       && lk != 12877               // 'append' EOF\n       && lk != 12878               // 'array' EOF\n       && lk != 12879               // 'as' EOF\n       && lk != 12880               // 'ascending' EOF\n       && lk != 12881               // 'at' EOF\n       && lk != 12882               // 'attribute' EOF\n       && lk != 12883               // 'base-uri' EOF\n       && lk != 12884               // 'before' EOF\n       && lk != 12885               // 'boundary-space' EOF\n       && lk != 12886               // 'break' EOF\n       && lk != 12888               // 'case' EOF\n       && lk != 12889               // 'cast' EOF\n       && lk != 12890               // 'castable' EOF\n       && lk != 12891               // 'catch' EOF\n       && lk != 12893               // 'child' EOF\n       && lk != 12894               // 'collation' EOF\n       && lk != 12896               // 'comment' EOF\n       && lk != 12897               // 'constraint' EOF\n       && lk != 12898               // 'construction' EOF\n       && lk != 12901               // 'context' EOF\n       && lk != 12902               // 'continue' EOF\n       && lk != 12903               // 'copy' EOF\n       && lk != 12904               // 'copy-namespaces' EOF\n       && lk != 12905               // 'count' EOF\n       && lk != 12906               // 'decimal-format' EOF\n       && lk != 12908               // 'declare' EOF\n       && lk != 12909               // 'default' EOF\n       && lk != 12910               // 'delete' EOF\n       && lk != 12911               // 'descendant' EOF\n       && lk != 12912               // 'descendant-or-self' EOF\n       && lk != 12913               // 'descending' EOF\n       && lk != 12918               // 'div' EOF\n       && lk != 12919               // 'document' EOF\n       && lk != 12920               // 'document-node' EOF\n       && lk != 12921               // 'element' EOF\n       && lk != 12922               // 'else' EOF\n       && lk != 12923               // 'empty' EOF\n       && lk != 12924               // 'empty-sequence' EOF\n       && lk != 12925               // 'encoding' EOF\n       && lk != 12926               // 'end' EOF\n       && lk != 12928               // 'eq' EOF\n       && lk != 12929               // 'every' EOF\n       && lk != 12931               // 'except' EOF\n       && lk != 12932               // 'exit' EOF\n       && lk != 12933               // 'external' EOF\n       && lk != 12934               // 'first' EOF\n       && lk != 12935               // 'following' EOF\n       && lk != 12936               // 'following-sibling' EOF\n       && lk != 12937               // 'for' EOF\n       && lk != 12941               // 'ft-option' EOF\n       && lk != 12945               // 'function' EOF\n       && lk != 12946               // 'ge' EOF\n       && lk != 12948               // 'group' EOF\n       && lk != 12950               // 'gt' EOF\n       && lk != 12951               // 'idiv' EOF\n       && lk != 12952               // 'if' EOF\n       && lk != 12953               // 'import' EOF\n       && lk != 12954               // 'in' EOF\n       && lk != 12955               // 'index' EOF\n       && lk != 12959               // 'insert' EOF\n       && lk != 12960               // 'instance' EOF\n       && lk != 12961               // 'integrity' EOF\n       && lk != 12962               // 'intersect' EOF\n       && lk != 12963               // 'into' EOF\n       && lk != 12964               // 'is' EOF\n       && lk != 12965               // 'item' EOF\n       && lk != 12966               // 'json' EOF\n       && lk != 12967               // 'json-item' EOF\n       && lk != 12970               // 'last' EOF\n       && lk != 12971               // 'lax' EOF\n       && lk != 12972               // 'le' EOF\n       && lk != 12974               // 'let' EOF\n       && lk != 12976               // 'loop' EOF\n       && lk != 12978               // 'lt' EOF\n       && lk != 12980               // 'mod' EOF\n       && lk != 12981               // 'modify' EOF\n       && lk != 12982               // 'module' EOF\n       && lk != 12984               // 'namespace' EOF\n       && lk != 12985               // 'namespace-node' EOF\n       && lk != 12986               // 'ne' EOF\n       && lk != 12991               // 'node' EOF\n       && lk != 12992               // 'nodes' EOF\n       && lk != 12994               // 'object' EOF\n       && lk != 12998               // 'only' EOF\n       && lk != 12999               // 'option' EOF\n       && lk != 13000               // 'or' EOF\n       && lk != 13001               // 'order' EOF\n       && lk != 13002               // 'ordered' EOF\n       && lk != 13003               // 'ordering' EOF\n       && lk != 13006               // 'parent' EOF\n       && lk != 13012               // 'preceding' EOF\n       && lk != 13013               // 'preceding-sibling' EOF\n       && lk != 13016               // 'processing-instruction' EOF\n       && lk != 13018               // 'rename' EOF\n       && lk != 13019               // 'replace' EOF\n       && lk != 13020               // 'return' EOF\n       && lk != 13021               // 'returning' EOF\n       && lk != 13022               // 'revalidation' EOF\n       && lk != 13024               // 'satisfies' EOF\n       && lk != 13025               // 'schema' EOF\n       && lk != 13026               // 'schema-attribute' EOF\n       && lk != 13027               // 'schema-element' EOF\n       && lk != 13028               // 'score' EOF\n       && lk != 13029               // 'self' EOF\n       && lk != 13034               // 'sliding' EOF\n       && lk != 13035               // 'some' EOF\n       && lk != 13036               // 'stable' EOF\n       && lk != 13037               // 'start' EOF\n       && lk != 13040               // 'strict' EOF\n       && lk != 13042               // 'structured-item' EOF\n       && lk != 13043               // 'switch' EOF\n       && lk != 13044               // 'text' EOF\n       && lk != 13048               // 'to' EOF\n       && lk != 13049               // 'treat' EOF\n       && lk != 13050               // 'try' EOF\n       && lk != 13051               // 'tumbling' EOF\n       && lk != 13052               // 'type' EOF\n       && lk != 13053               // 'typeswitch' EOF\n       && lk != 13054               // 'union' EOF\n       && lk != 13056               // 'unordered' EOF\n       && lk != 13057               // 'updating' EOF\n       && lk != 13060               // 'validate' EOF\n       && lk != 13061               // 'value' EOF\n       && lk != 13062               // 'variable' EOF\n       && lk != 13063               // 'version' EOF\n       && lk != 13066               // 'where' EOF\n       && lk != 13067               // 'while' EOF\n       && lk != 13070               // 'with' EOF\n       && lk != 13074               // 'xquery' EOF\n       && lk != 16134               // 'variable' '$'\n       && lk != 20997               // Wildcard ','\n       && lk != 20998               // EQName^Token ','\n       && lk != 21000               // IntegerLiteral ','\n       && lk != 21001               // DecimalLiteral ','\n       && lk != 21002               // DoubleLiteral ','\n       && lk != 21003               // StringLiteral ','\n       && lk != 21036               // '.' ','\n       && lk != 21037               // '..' ','\n       && lk != 21038               // '/' ','\n       && lk != 21062               // 'after' ','\n       && lk != 21064               // 'allowing' ','\n       && lk != 21065               // 'ancestor' ','\n       && lk != 21066               // 'ancestor-or-self' ','\n       && lk != 21067               // 'and' ','\n       && lk != 21069               // 'append' ','\n       && lk != 21070               // 'array' ','\n       && lk != 21071               // 'as' ','\n       && lk != 21072               // 'ascending' ','\n       && lk != 21073               // 'at' ','\n       && lk != 21074               // 'attribute' ','\n       && lk != 21075               // 'base-uri' ','\n       && lk != 21076               // 'before' ','\n       && lk != 21077               // 'boundary-space' ','\n       && lk != 21078               // 'break' ','\n       && lk != 21080               // 'case' ','\n       && lk != 21081               // 'cast' ','\n       && lk != 21082               // 'castable' ','\n       && lk != 21083               // 'catch' ','\n       && lk != 21085               // 'child' ','\n       && lk != 21086               // 'collation' ','\n       && lk != 21088               // 'comment' ','\n       && lk != 21089               // 'constraint' ','\n       && lk != 21090               // 'construction' ','\n       && lk != 21093               // 'context' ','\n       && lk != 21094               // 'continue' ','\n       && lk != 21095               // 'copy' ','\n       && lk != 21096               // 'copy-namespaces' ','\n       && lk != 21097               // 'count' ','\n       && lk != 21098               // 'decimal-format' ','\n       && lk != 21100               // 'declare' ','\n       && lk != 21101               // 'default' ','\n       && lk != 21102               // 'delete' ','\n       && lk != 21103               // 'descendant' ','\n       && lk != 21104               // 'descendant-or-self' ','\n       && lk != 21105               // 'descending' ','\n       && lk != 21110               // 'div' ','\n       && lk != 21111               // 'document' ','\n       && lk != 21112               // 'document-node' ','\n       && lk != 21113               // 'element' ','\n       && lk != 21114               // 'else' ','\n       && lk != 21115               // 'empty' ','\n       && lk != 21116               // 'empty-sequence' ','\n       && lk != 21117               // 'encoding' ','\n       && lk != 21118               // 'end' ','\n       && lk != 21120               // 'eq' ','\n       && lk != 21121               // 'every' ','\n       && lk != 21123               // 'except' ','\n       && lk != 21124               // 'exit' ','\n       && lk != 21125               // 'external' ','\n       && lk != 21126               // 'first' ','\n       && lk != 21127               // 'following' ','\n       && lk != 21128               // 'following-sibling' ','\n       && lk != 21129               // 'for' ','\n       && lk != 21133               // 'ft-option' ','\n       && lk != 21137               // 'function' ','\n       && lk != 21138               // 'ge' ','\n       && lk != 21140               // 'group' ','\n       && lk != 21142               // 'gt' ','\n       && lk != 21143               // 'idiv' ','\n       && lk != 21144               // 'if' ','\n       && lk != 21145               // 'import' ','\n       && lk != 21146               // 'in' ','\n       && lk != 21147               // 'index' ','\n       && lk != 21151               // 'insert' ','\n       && lk != 21152               // 'instance' ','\n       && lk != 21153               // 'integrity' ','\n       && lk != 21154               // 'intersect' ','\n       && lk != 21155               // 'into' ','\n       && lk != 21156               // 'is' ','\n       && lk != 21157               // 'item' ','\n       && lk != 21158               // 'json' ','\n       && lk != 21159               // 'json-item' ','\n       && lk != 21162               // 'last' ','\n       && lk != 21163               // 'lax' ','\n       && lk != 21164               // 'le' ','\n       && lk != 21166               // 'let' ','\n       && lk != 21168               // 'loop' ','\n       && lk != 21170               // 'lt' ','\n       && lk != 21172               // 'mod' ','\n       && lk != 21173               // 'modify' ','\n       && lk != 21174               // 'module' ','\n       && lk != 21176               // 'namespace' ','\n       && lk != 21177               // 'namespace-node' ','\n       && lk != 21178               // 'ne' ','\n       && lk != 21183               // 'node' ','\n       && lk != 21184               // 'nodes' ','\n       && lk != 21186               // 'object' ','\n       && lk != 21190               // 'only' ','\n       && lk != 21191               // 'option' ','\n       && lk != 21192               // 'or' ','\n       && lk != 21193               // 'order' ','\n       && lk != 21194               // 'ordered' ','\n       && lk != 21195               // 'ordering' ','\n       && lk != 21198               // 'parent' ','\n       && lk != 21204               // 'preceding' ','\n       && lk != 21205               // 'preceding-sibling' ','\n       && lk != 21208               // 'processing-instruction' ','\n       && lk != 21210               // 'rename' ','\n       && lk != 21211               // 'replace' ','\n       && lk != 21212               // 'return' ','\n       && lk != 21213               // 'returning' ','\n       && lk != 21214               // 'revalidation' ','\n       && lk != 21216               // 'satisfies' ','\n       && lk != 21217               // 'schema' ','\n       && lk != 21218               // 'schema-attribute' ','\n       && lk != 21219               // 'schema-element' ','\n       && lk != 21220               // 'score' ','\n       && lk != 21221               // 'self' ','\n       && lk != 21226               // 'sliding' ','\n       && lk != 21227               // 'some' ','\n       && lk != 21228               // 'stable' ','\n       && lk != 21229               // 'start' ','\n       && lk != 21232               // 'strict' ','\n       && lk != 21234               // 'structured-item' ','\n       && lk != 21235               // 'switch' ','\n       && lk != 21236               // 'text' ','\n       && lk != 21240               // 'to' ','\n       && lk != 21241               // 'treat' ','\n       && lk != 21242               // 'try' ','\n       && lk != 21243               // 'tumbling' ','\n       && lk != 21244               // 'type' ','\n       && lk != 21245               // 'typeswitch' ','\n       && lk != 21246               // 'union' ','\n       && lk != 21248               // 'unordered' ','\n       && lk != 21249               // 'updating' ','\n       && lk != 21252               // 'validate' ','\n       && lk != 21253               // 'value' ','\n       && lk != 21254               // 'variable' ','\n       && lk != 21255               // 'version' ','\n       && lk != 21258               // 'where' ','\n       && lk != 21259               // 'while' ','\n       && lk != 21262               // 'with' ','\n       && lk != 21266               // 'xquery' ','\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284              // 'exit' 'returning'\n       && lk != 144389              // Wildcard '}'\n       && lk != 144390              // EQName^Token '}'\n       && lk != 144392              // IntegerLiteral '}'\n       && lk != 144393              // DecimalLiteral '}'\n       && lk != 144394              // DoubleLiteral '}'\n       && lk != 144395              // StringLiteral '}'\n       && lk != 144428              // '.' '}'\n       && lk != 144429              // '..' '}'\n       && lk != 144430              // '/' '}'\n       && lk != 144454              // 'after' '}'\n       && lk != 144456              // 'allowing' '}'\n       && lk != 144457              // 'ancestor' '}'\n       && lk != 144458              // 'ancestor-or-self' '}'\n       && lk != 144459              // 'and' '}'\n       && lk != 144461              // 'append' '}'\n       && lk != 144462              // 'array' '}'\n       && lk != 144463              // 'as' '}'\n       && lk != 144464              // 'ascending' '}'\n       && lk != 144465              // 'at' '}'\n       && lk != 144466              // 'attribute' '}'\n       && lk != 144467              // 'base-uri' '}'\n       && lk != 144468              // 'before' '}'\n       && lk != 144469              // 'boundary-space' '}'\n       && lk != 144470              // 'break' '}'\n       && lk != 144472              // 'case' '}'\n       && lk != 144473              // 'cast' '}'\n       && lk != 144474              // 'castable' '}'\n       && lk != 144475              // 'catch' '}'\n       && lk != 144477              // 'child' '}'\n       && lk != 144478              // 'collation' '}'\n       && lk != 144480              // 'comment' '}'\n       && lk != 144481              // 'constraint' '}'\n       && lk != 144482              // 'construction' '}'\n       && lk != 144485              // 'context' '}'\n       && lk != 144486              // 'continue' '}'\n       && lk != 144487              // 'copy' '}'\n       && lk != 144488              // 'copy-namespaces' '}'\n       && lk != 144489              // 'count' '}'\n       && lk != 144490              // 'decimal-format' '}'\n       && lk != 144492              // 'declare' '}'\n       && lk != 144493              // 'default' '}'\n       && lk != 144494              // 'delete' '}'\n       && lk != 144495              // 'descendant' '}'\n       && lk != 144496              // 'descendant-or-self' '}'\n       && lk != 144497              // 'descending' '}'\n       && lk != 144502              // 'div' '}'\n       && lk != 144503              // 'document' '}'\n       && lk != 144504              // 'document-node' '}'\n       && lk != 144505              // 'element' '}'\n       && lk != 144506              // 'else' '}'\n       && lk != 144507              // 'empty' '}'\n       && lk != 144508              // 'empty-sequence' '}'\n       && lk != 144509              // 'encoding' '}'\n       && lk != 144510              // 'end' '}'\n       && lk != 144512              // 'eq' '}'\n       && lk != 144513              // 'every' '}'\n       && lk != 144515              // 'except' '}'\n       && lk != 144516              // 'exit' '}'\n       && lk != 144517              // 'external' '}'\n       && lk != 144518              // 'first' '}'\n       && lk != 144519              // 'following' '}'\n       && lk != 144520              // 'following-sibling' '}'\n       && lk != 144521              // 'for' '}'\n       && lk != 144525              // 'ft-option' '}'\n       && lk != 144529              // 'function' '}'\n       && lk != 144530              // 'ge' '}'\n       && lk != 144532              // 'group' '}'\n       && lk != 144534              // 'gt' '}'\n       && lk != 144535              // 'idiv' '}'\n       && lk != 144536              // 'if' '}'\n       && lk != 144537              // 'import' '}'\n       && lk != 144538              // 'in' '}'\n       && lk != 144539              // 'index' '}'\n       && lk != 144543              // 'insert' '}'\n       && lk != 144544              // 'instance' '}'\n       && lk != 144545              // 'integrity' '}'\n       && lk != 144546              // 'intersect' '}'\n       && lk != 144547              // 'into' '}'\n       && lk != 144548              // 'is' '}'\n       && lk != 144549              // 'item' '}'\n       && lk != 144550              // 'json' '}'\n       && lk != 144551              // 'json-item' '}'\n       && lk != 144554              // 'last' '}'\n       && lk != 144555              // 'lax' '}'\n       && lk != 144556              // 'le' '}'\n       && lk != 144558              // 'let' '}'\n       && lk != 144560              // 'loop' '}'\n       && lk != 144562              // 'lt' '}'\n       && lk != 144564              // 'mod' '}'\n       && lk != 144565              // 'modify' '}'\n       && lk != 144566              // 'module' '}'\n       && lk != 144568              // 'namespace' '}'\n       && lk != 144569              // 'namespace-node' '}'\n       && lk != 144570              // 'ne' '}'\n       && lk != 144575              // 'node' '}'\n       && lk != 144576              // 'nodes' '}'\n       && lk != 144578              // 'object' '}'\n       && lk != 144582              // 'only' '}'\n       && lk != 144583              // 'option' '}'\n       && lk != 144584              // 'or' '}'\n       && lk != 144585              // 'order' '}'\n       && lk != 144586              // 'ordered' '}'\n       && lk != 144587              // 'ordering' '}'\n       && lk != 144590              // 'parent' '}'\n       && lk != 144596              // 'preceding' '}'\n       && lk != 144597              // 'preceding-sibling' '}'\n       && lk != 144600              // 'processing-instruction' '}'\n       && lk != 144602              // 'rename' '}'\n       && lk != 144603              // 'replace' '}'\n       && lk != 144604              // 'return' '}'\n       && lk != 144605              // 'returning' '}'\n       && lk != 144606              // 'revalidation' '}'\n       && lk != 144608              // 'satisfies' '}'\n       && lk != 144609              // 'schema' '}'\n       && lk != 144610              // 'schema-attribute' '}'\n       && lk != 144611              // 'schema-element' '}'\n       && lk != 144612              // 'score' '}'\n       && lk != 144613              // 'self' '}'\n       && lk != 144618              // 'sliding' '}'\n       && lk != 144619              // 'some' '}'\n       && lk != 144620              // 'stable' '}'\n       && lk != 144621              // 'start' '}'\n       && lk != 144624              // 'strict' '}'\n       && lk != 144626              // 'structured-item' '}'\n       && lk != 144627              // 'switch' '}'\n       && lk != 144628              // 'text' '}'\n       && lk != 144632              // 'to' '}'\n       && lk != 144633              // 'treat' '}'\n       && lk != 144634              // 'try' '}'\n       && lk != 144635              // 'tumbling' '}'\n       && lk != 144636              // 'type' '}'\n       && lk != 144637              // 'typeswitch' '}'\n       && lk != 144638              // 'union' '}'\n       && lk != 144640              // 'unordered' '}'\n       && lk != 144641              // 'updating' '}'\n       && lk != 144644              // 'validate' '}'\n       && lk != 144645              // 'value' '}'\n       && lk != 144646              // 'variable' '}'\n       && lk != 144647              // 'version' '}'\n       && lk != 144650              // 'where' '}'\n       && lk != 144651              // 'while' '}'\n       && lk != 144654              // 'with' '}'\n       && lk != 144658)             // 'xquery' '}'\n      {\n        lk = memoized(6, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(6, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 53                  // ';'\n       && lk != 16134               // 'variable' '$'\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284)             // 'exit' 'returning'\n      {\n        break;\n      }\n      whitespace();\n      parse_Statement();\n    }\n    eventHandler.endNonterminal(\"Statements\", e0);\n  }\n\n  function try_Statements()\n  {\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 34:                      // '('\n        lookahead2W(268);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 35:                      // '(#'\n        lookahead2(251);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 46:                      // '/'\n        lookahead2W(283);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 47:                      // '//'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 54:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 55:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 59:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 66:                      // '@'\n        lookahead2W(256);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 68:                      // '['\n        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 77:                      // 'append'\n        lookahead2W(199);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 82:                      // 'attribute'\n        lookahead2W(280);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 121:                     // 'element'\n        lookahead2W(279);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 132:                     // 'exit'\n        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 137:                     // 'for'\n        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 174:                     // 'let'\n        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 218:                     // 'rename'\n        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 219:                     // 'replace'\n        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 260:                     // 'validate'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 276:                     // '{'\n        lookahead2W(276);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 278:                     // '{|'\n        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 5:                       // Wildcard\n      case 45:                      // '..'\n        lookahead2W(185);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |\n        break;\n      case 31:                      // '$'\n      case 32:                      // '%'\n        lookahead2W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 40:                      // '+'\n      case 42:                      // '-'\n        lookahead2W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 86:                      // 'break'\n      case 102:                     // 'continue'\n        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 110:                     // 'delete'\n      case 159:                     // 'insert'\n        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 184:                     // 'namespace'\n      case 216:                     // 'processing-instruction'\n        lookahead2W(267);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 103:                     // 'copy'\n      case 129:                     // 'every'\n      case 235:                     // 'some'\n      case 262:                     // 'variable'\n        lookahead2W(196);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 44:                      // '.'\n        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 78:                      // 'array'\n      case 124:                     // 'empty-sequence'\n      case 165:                     // 'item'\n      case 167:                     // 'json-item'\n      case 242:                     // 'structured-item'\n        lookahead2W(190);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 96:                      // 'comment'\n      case 119:                     // 'document'\n      case 202:                     // 'ordered'\n      case 244:                     // 'text'\n      case 250:                     // 'try'\n      case 256:                     // 'unordered'\n        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 73:                      // 'ancestor'\n      case 74:                      // 'ancestor-or-self'\n      case 93:                      // 'child'\n      case 111:                     // 'descendant'\n      case 112:                     // 'descendant-or-self'\n      case 135:                     // 'following'\n      case 136:                     // 'following-sibling'\n      case 206:                     // 'parent'\n      case 212:                     // 'preceding'\n      case 213:                     // 'preceding-sibling'\n      case 229:                     // 'self'\n        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 6:                       // EQName^Token\n      case 70:                      // 'after'\n      case 72:                      // 'allowing'\n      case 75:                      // 'and'\n      case 79:                      // 'as'\n      case 80:                      // 'ascending'\n      case 81:                      // 'at'\n      case 83:                      // 'base-uri'\n      case 84:                      // 'before'\n      case 85:                      // 'boundary-space'\n      case 88:                      // 'case'\n      case 89:                      // 'cast'\n      case 90:                      // 'castable'\n      case 91:                      // 'catch'\n      case 94:                      // 'collation'\n      case 97:                      // 'constraint'\n      case 98:                      // 'construction'\n      case 101:                     // 'context'\n      case 104:                     // 'copy-namespaces'\n      case 105:                     // 'count'\n      case 106:                     // 'decimal-format'\n      case 108:                     // 'declare'\n      case 109:                     // 'default'\n      case 113:                     // 'descending'\n      case 118:                     // 'div'\n      case 120:                     // 'document-node'\n      case 122:                     // 'else'\n      case 123:                     // 'empty'\n      case 125:                     // 'encoding'\n      case 126:                     // 'end'\n      case 128:                     // 'eq'\n      case 131:                     // 'except'\n      case 133:                     // 'external'\n      case 134:                     // 'first'\n      case 141:                     // 'ft-option'\n      case 145:                     // 'function'\n      case 146:                     // 'ge'\n      case 148:                     // 'group'\n      case 150:                     // 'gt'\n      case 151:                     // 'idiv'\n      case 152:                     // 'if'\n      case 153:                     // 'import'\n      case 154:                     // 'in'\n      case 155:                     // 'index'\n      case 160:                     // 'instance'\n      case 161:                     // 'integrity'\n      case 162:                     // 'intersect'\n      case 163:                     // 'into'\n      case 164:                     // 'is'\n      case 166:                     // 'json'\n      case 170:                     // 'last'\n      case 171:                     // 'lax'\n      case 172:                     // 'le'\n      case 176:                     // 'loop'\n      case 178:                     // 'lt'\n      case 180:                     // 'mod'\n      case 181:                     // 'modify'\n      case 182:                     // 'module'\n      case 185:                     // 'namespace-node'\n      case 186:                     // 'ne'\n      case 191:                     // 'node'\n      case 192:                     // 'nodes'\n      case 194:                     // 'object'\n      case 198:                     // 'only'\n      case 199:                     // 'option'\n      case 200:                     // 'or'\n      case 201:                     // 'order'\n      case 203:                     // 'ordering'\n      case 220:                     // 'return'\n      case 221:                     // 'returning'\n      case 222:                     // 'revalidation'\n      case 224:                     // 'satisfies'\n      case 225:                     // 'schema'\n      case 226:                     // 'schema-attribute'\n      case 227:                     // 'schema-element'\n      case 228:                     // 'score'\n      case 234:                     // 'sliding'\n      case 236:                     // 'stable'\n      case 237:                     // 'start'\n      case 240:                     // 'strict'\n      case 243:                     // 'switch'\n      case 248:                     // 'to'\n      case 249:                     // 'treat'\n      case 251:                     // 'tumbling'\n      case 252:                     // 'type'\n      case 253:                     // 'typeswitch'\n      case 254:                     // 'union'\n      case 257:                     // 'updating'\n      case 261:                     // 'value'\n      case 263:                     // 'version'\n      case 266:                     // 'where'\n      case 267:                     // 'while'\n      case 270:                     // 'with'\n      case 274:                     // 'xquery'\n        lookahead2W(194);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 53                  // ';'\n       && lk != 282                 // '}'\n       && lk != 12805               // Wildcard EOF\n       && lk != 12806               // EQName^Token EOF\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12844               // '.' EOF\n       && lk != 12845               // '..' EOF\n       && lk != 12846               // '/' EOF\n       && lk != 12870               // 'after' EOF\n       && lk != 12872               // 'allowing' EOF\n       && lk != 12873               // 'ancestor' EOF\n       && lk != 12874               // 'ancestor-or-self' EOF\n       && lk != 12875               // 'and' EOF\n       && lk != 12877               // 'append' EOF\n       && lk != 12878               // 'array' EOF\n       && lk != 12879               // 'as' EOF\n       && lk != 12880               // 'ascending' EOF\n       && lk != 12881               // 'at' EOF\n       && lk != 12882               // 'attribute' EOF\n       && lk != 12883               // 'base-uri' EOF\n       && lk != 12884               // 'before' EOF\n       && lk != 12885               // 'boundary-space' EOF\n       && lk != 12886               // 'break' EOF\n       && lk != 12888               // 'case' EOF\n       && lk != 12889               // 'cast' EOF\n       && lk != 12890               // 'castable' EOF\n       && lk != 12891               // 'catch' EOF\n       && lk != 12893               // 'child' EOF\n       && lk != 12894               // 'collation' EOF\n       && lk != 12896               // 'comment' EOF\n       && lk != 12897               // 'constraint' EOF\n       && lk != 12898               // 'construction' EOF\n       && lk != 12901               // 'context' EOF\n       && lk != 12902               // 'continue' EOF\n       && lk != 12903               // 'copy' EOF\n       && lk != 12904               // 'copy-namespaces' EOF\n       && lk != 12905               // 'count' EOF\n       && lk != 12906               // 'decimal-format' EOF\n       && lk != 12908               // 'declare' EOF\n       && lk != 12909               // 'default' EOF\n       && lk != 12910               // 'delete' EOF\n       && lk != 12911               // 'descendant' EOF\n       && lk != 12912               // 'descendant-or-self' EOF\n       && lk != 12913               // 'descending' EOF\n       && lk != 12918               // 'div' EOF\n       && lk != 12919               // 'document' EOF\n       && lk != 12920               // 'document-node' EOF\n       && lk != 12921               // 'element' EOF\n       && lk != 12922               // 'else' EOF\n       && lk != 12923               // 'empty' EOF\n       && lk != 12924               // 'empty-sequence' EOF\n       && lk != 12925               // 'encoding' EOF\n       && lk != 12926               // 'end' EOF\n       && lk != 12928               // 'eq' EOF\n       && lk != 12929               // 'every' EOF\n       && lk != 12931               // 'except' EOF\n       && lk != 12932               // 'exit' EOF\n       && lk != 12933               // 'external' EOF\n       && lk != 12934               // 'first' EOF\n       && lk != 12935               // 'following' EOF\n       && lk != 12936               // 'following-sibling' EOF\n       && lk != 12937               // 'for' EOF\n       && lk != 12941               // 'ft-option' EOF\n       && lk != 12945               // 'function' EOF\n       && lk != 12946               // 'ge' EOF\n       && lk != 12948               // 'group' EOF\n       && lk != 12950               // 'gt' EOF\n       && lk != 12951               // 'idiv' EOF\n       && lk != 12952               // 'if' EOF\n       && lk != 12953               // 'import' EOF\n       && lk != 12954               // 'in' EOF\n       && lk != 12955               // 'index' EOF\n       && lk != 12959               // 'insert' EOF\n       && lk != 12960               // 'instance' EOF\n       && lk != 12961               // 'integrity' EOF\n       && lk != 12962               // 'intersect' EOF\n       && lk != 12963               // 'into' EOF\n       && lk != 12964               // 'is' EOF\n       && lk != 12965               // 'item' EOF\n       && lk != 12966               // 'json' EOF\n       && lk != 12967               // 'json-item' EOF\n       && lk != 12970               // 'last' EOF\n       && lk != 12971               // 'lax' EOF\n       && lk != 12972               // 'le' EOF\n       && lk != 12974               // 'let' EOF\n       && lk != 12976               // 'loop' EOF\n       && lk != 12978               // 'lt' EOF\n       && lk != 12980               // 'mod' EOF\n       && lk != 12981               // 'modify' EOF\n       && lk != 12982               // 'module' EOF\n       && lk != 12984               // 'namespace' EOF\n       && lk != 12985               // 'namespace-node' EOF\n       && lk != 12986               // 'ne' EOF\n       && lk != 12991               // 'node' EOF\n       && lk != 12992               // 'nodes' EOF\n       && lk != 12994               // 'object' EOF\n       && lk != 12998               // 'only' EOF\n       && lk != 12999               // 'option' EOF\n       && lk != 13000               // 'or' EOF\n       && lk != 13001               // 'order' EOF\n       && lk != 13002               // 'ordered' EOF\n       && lk != 13003               // 'ordering' EOF\n       && lk != 13006               // 'parent' EOF\n       && lk != 13012               // 'preceding' EOF\n       && lk != 13013               // 'preceding-sibling' EOF\n       && lk != 13016               // 'processing-instruction' EOF\n       && lk != 13018               // 'rename' EOF\n       && lk != 13019               // 'replace' EOF\n       && lk != 13020               // 'return' EOF\n       && lk != 13021               // 'returning' EOF\n       && lk != 13022               // 'revalidation' EOF\n       && lk != 13024               // 'satisfies' EOF\n       && lk != 13025               // 'schema' EOF\n       && lk != 13026               // 'schema-attribute' EOF\n       && lk != 13027               // 'schema-element' EOF\n       && lk != 13028               // 'score' EOF\n       && lk != 13029               // 'self' EOF\n       && lk != 13034               // 'sliding' EOF\n       && lk != 13035               // 'some' EOF\n       && lk != 13036               // 'stable' EOF\n       && lk != 13037               // 'start' EOF\n       && lk != 13040               // 'strict' EOF\n       && lk != 13042               // 'structured-item' EOF\n       && lk != 13043               // 'switch' EOF\n       && lk != 13044               // 'text' EOF\n       && lk != 13048               // 'to' EOF\n       && lk != 13049               // 'treat' EOF\n       && lk != 13050               // 'try' EOF\n       && lk != 13051               // 'tumbling' EOF\n       && lk != 13052               // 'type' EOF\n       && lk != 13053               // 'typeswitch' EOF\n       && lk != 13054               // 'union' EOF\n       && lk != 13056               // 'unordered' EOF\n       && lk != 13057               // 'updating' EOF\n       && lk != 13060               // 'validate' EOF\n       && lk != 13061               // 'value' EOF\n       && lk != 13062               // 'variable' EOF\n       && lk != 13063               // 'version' EOF\n       && lk != 13066               // 'where' EOF\n       && lk != 13067               // 'while' EOF\n       && lk != 13070               // 'with' EOF\n       && lk != 13074               // 'xquery' EOF\n       && lk != 16134               // 'variable' '$'\n       && lk != 20997               // Wildcard ','\n       && lk != 20998               // EQName^Token ','\n       && lk != 21000               // IntegerLiteral ','\n       && lk != 21001               // DecimalLiteral ','\n       && lk != 21002               // DoubleLiteral ','\n       && lk != 21003               // StringLiteral ','\n       && lk != 21036               // '.' ','\n       && lk != 21037               // '..' ','\n       && lk != 21038               // '/' ','\n       && lk != 21062               // 'after' ','\n       && lk != 21064               // 'allowing' ','\n       && lk != 21065               // 'ancestor' ','\n       && lk != 21066               // 'ancestor-or-self' ','\n       && lk != 21067               // 'and' ','\n       && lk != 21069               // 'append' ','\n       && lk != 21070               // 'array' ','\n       && lk != 21071               // 'as' ','\n       && lk != 21072               // 'ascending' ','\n       && lk != 21073               // 'at' ','\n       && lk != 21074               // 'attribute' ','\n       && lk != 21075               // 'base-uri' ','\n       && lk != 21076               // 'before' ','\n       && lk != 21077               // 'boundary-space' ','\n       && lk != 21078               // 'break' ','\n       && lk != 21080               // 'case' ','\n       && lk != 21081               // 'cast' ','\n       && lk != 21082               // 'castable' ','\n       && lk != 21083               // 'catch' ','\n       && lk != 21085               // 'child' ','\n       && lk != 21086               // 'collation' ','\n       && lk != 21088               // 'comment' ','\n       && lk != 21089               // 'constraint' ','\n       && lk != 21090               // 'construction' ','\n       && lk != 21093               // 'context' ','\n       && lk != 21094               // 'continue' ','\n       && lk != 21095               // 'copy' ','\n       && lk != 21096               // 'copy-namespaces' ','\n       && lk != 21097               // 'count' ','\n       && lk != 21098               // 'decimal-format' ','\n       && lk != 21100               // 'declare' ','\n       && lk != 21101               // 'default' ','\n       && lk != 21102               // 'delete' ','\n       && lk != 21103               // 'descendant' ','\n       && lk != 21104               // 'descendant-or-self' ','\n       && lk != 21105               // 'descending' ','\n       && lk != 21110               // 'div' ','\n       && lk != 21111               // 'document' ','\n       && lk != 21112               // 'document-node' ','\n       && lk != 21113               // 'element' ','\n       && lk != 21114               // 'else' ','\n       && lk != 21115               // 'empty' ','\n       && lk != 21116               // 'empty-sequence' ','\n       && lk != 21117               // 'encoding' ','\n       && lk != 21118               // 'end' ','\n       && lk != 21120               // 'eq' ','\n       && lk != 21121               // 'every' ','\n       && lk != 21123               // 'except' ','\n       && lk != 21124               // 'exit' ','\n       && lk != 21125               // 'external' ','\n       && lk != 21126               // 'first' ','\n       && lk != 21127               // 'following' ','\n       && lk != 21128               // 'following-sibling' ','\n       && lk != 21129               // 'for' ','\n       && lk != 21133               // 'ft-option' ','\n       && lk != 21137               // 'function' ','\n       && lk != 21138               // 'ge' ','\n       && lk != 21140               // 'group' ','\n       && lk != 21142               // 'gt' ','\n       && lk != 21143               // 'idiv' ','\n       && lk != 21144               // 'if' ','\n       && lk != 21145               // 'import' ','\n       && lk != 21146               // 'in' ','\n       && lk != 21147               // 'index' ','\n       && lk != 21151               // 'insert' ','\n       && lk != 21152               // 'instance' ','\n       && lk != 21153               // 'integrity' ','\n       && lk != 21154               // 'intersect' ','\n       && lk != 21155               // 'into' ','\n       && lk != 21156               // 'is' ','\n       && lk != 21157               // 'item' ','\n       && lk != 21158               // 'json' ','\n       && lk != 21159               // 'json-item' ','\n       && lk != 21162               // 'last' ','\n       && lk != 21163               // 'lax' ','\n       && lk != 21164               // 'le' ','\n       && lk != 21166               // 'let' ','\n       && lk != 21168               // 'loop' ','\n       && lk != 21170               // 'lt' ','\n       && lk != 21172               // 'mod' ','\n       && lk != 21173               // 'modify' ','\n       && lk != 21174               // 'module' ','\n       && lk != 21176               // 'namespace' ','\n       && lk != 21177               // 'namespace-node' ','\n       && lk != 21178               // 'ne' ','\n       && lk != 21183               // 'node' ','\n       && lk != 21184               // 'nodes' ','\n       && lk != 21186               // 'object' ','\n       && lk != 21190               // 'only' ','\n       && lk != 21191               // 'option' ','\n       && lk != 21192               // 'or' ','\n       && lk != 21193               // 'order' ','\n       && lk != 21194               // 'ordered' ','\n       && lk != 21195               // 'ordering' ','\n       && lk != 21198               // 'parent' ','\n       && lk != 21204               // 'preceding' ','\n       && lk != 21205               // 'preceding-sibling' ','\n       && lk != 21208               // 'processing-instruction' ','\n       && lk != 21210               // 'rename' ','\n       && lk != 21211               // 'replace' ','\n       && lk != 21212               // 'return' ','\n       && lk != 21213               // 'returning' ','\n       && lk != 21214               // 'revalidation' ','\n       && lk != 21216               // 'satisfies' ','\n       && lk != 21217               // 'schema' ','\n       && lk != 21218               // 'schema-attribute' ','\n       && lk != 21219               // 'schema-element' ','\n       && lk != 21220               // 'score' ','\n       && lk != 21221               // 'self' ','\n       && lk != 21226               // 'sliding' ','\n       && lk != 21227               // 'some' ','\n       && lk != 21228               // 'stable' ','\n       && lk != 21229               // 'start' ','\n       && lk != 21232               // 'strict' ','\n       && lk != 21234               // 'structured-item' ','\n       && lk != 21235               // 'switch' ','\n       && lk != 21236               // 'text' ','\n       && lk != 21240               // 'to' ','\n       && lk != 21241               // 'treat' ','\n       && lk != 21242               // 'try' ','\n       && lk != 21243               // 'tumbling' ','\n       && lk != 21244               // 'type' ','\n       && lk != 21245               // 'typeswitch' ','\n       && lk != 21246               // 'union' ','\n       && lk != 21248               // 'unordered' ','\n       && lk != 21249               // 'updating' ','\n       && lk != 21252               // 'validate' ','\n       && lk != 21253               // 'value' ','\n       && lk != 21254               // 'variable' ','\n       && lk != 21255               // 'version' ','\n       && lk != 21258               // 'where' ','\n       && lk != 21259               // 'while' ','\n       && lk != 21262               // 'with' ','\n       && lk != 21266               // 'xquery' ','\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284              // 'exit' 'returning'\n       && lk != 144389              // Wildcard '}'\n       && lk != 144390              // EQName^Token '}'\n       && lk != 144392              // IntegerLiteral '}'\n       && lk != 144393              // DecimalLiteral '}'\n       && lk != 144394              // DoubleLiteral '}'\n       && lk != 144395              // StringLiteral '}'\n       && lk != 144428              // '.' '}'\n       && lk != 144429              // '..' '}'\n       && lk != 144430              // '/' '}'\n       && lk != 144454              // 'after' '}'\n       && lk != 144456              // 'allowing' '}'\n       && lk != 144457              // 'ancestor' '}'\n       && lk != 144458              // 'ancestor-or-self' '}'\n       && lk != 144459              // 'and' '}'\n       && lk != 144461              // 'append' '}'\n       && lk != 144462              // 'array' '}'\n       && lk != 144463              // 'as' '}'\n       && lk != 144464              // 'ascending' '}'\n       && lk != 144465              // 'at' '}'\n       && lk != 144466              // 'attribute' '}'\n       && lk != 144467              // 'base-uri' '}'\n       && lk != 144468              // 'before' '}'\n       && lk != 144469              // 'boundary-space' '}'\n       && lk != 144470              // 'break' '}'\n       && lk != 144472              // 'case' '}'\n       && lk != 144473              // 'cast' '}'\n       && lk != 144474              // 'castable' '}'\n       && lk != 144475              // 'catch' '}'\n       && lk != 144477              // 'child' '}'\n       && lk != 144478              // 'collation' '}'\n       && lk != 144480              // 'comment' '}'\n       && lk != 144481              // 'constraint' '}'\n       && lk != 144482              // 'construction' '}'\n       && lk != 144485              // 'context' '}'\n       && lk != 144486              // 'continue' '}'\n       && lk != 144487              // 'copy' '}'\n       && lk != 144488              // 'copy-namespaces' '}'\n       && lk != 144489              // 'count' '}'\n       && lk != 144490              // 'decimal-format' '}'\n       && lk != 144492              // 'declare' '}'\n       && lk != 144493              // 'default' '}'\n       && lk != 144494              // 'delete' '}'\n       && lk != 144495              // 'descendant' '}'\n       && lk != 144496              // 'descendant-or-self' '}'\n       && lk != 144497              // 'descending' '}'\n       && lk != 144502              // 'div' '}'\n       && lk != 144503              // 'document' '}'\n       && lk != 144504              // 'document-node' '}'\n       && lk != 144505              // 'element' '}'\n       && lk != 144506              // 'else' '}'\n       && lk != 144507              // 'empty' '}'\n       && lk != 144508              // 'empty-sequence' '}'\n       && lk != 144509              // 'encoding' '}'\n       && lk != 144510              // 'end' '}'\n       && lk != 144512              // 'eq' '}'\n       && lk != 144513              // 'every' '}'\n       && lk != 144515              // 'except' '}'\n       && lk != 144516              // 'exit' '}'\n       && lk != 144517              // 'external' '}'\n       && lk != 144518              // 'first' '}'\n       && lk != 144519              // 'following' '}'\n       && lk != 144520              // 'following-sibling' '}'\n       && lk != 144521              // 'for' '}'\n       && lk != 144525              // 'ft-option' '}'\n       && lk != 144529              // 'function' '}'\n       && lk != 144530              // 'ge' '}'\n       && lk != 144532              // 'group' '}'\n       && lk != 144534              // 'gt' '}'\n       && lk != 144535              // 'idiv' '}'\n       && lk != 144536              // 'if' '}'\n       && lk != 144537              // 'import' '}'\n       && lk != 144538              // 'in' '}'\n       && lk != 144539              // 'index' '}'\n       && lk != 144543              // 'insert' '}'\n       && lk != 144544              // 'instance' '}'\n       && lk != 144545              // 'integrity' '}'\n       && lk != 144546              // 'intersect' '}'\n       && lk != 144547              // 'into' '}'\n       && lk != 144548              // 'is' '}'\n       && lk != 144549              // 'item' '}'\n       && lk != 144550              // 'json' '}'\n       && lk != 144551              // 'json-item' '}'\n       && lk != 144554              // 'last' '}'\n       && lk != 144555              // 'lax' '}'\n       && lk != 144556              // 'le' '}'\n       && lk != 144558              // 'let' '}'\n       && lk != 144560              // 'loop' '}'\n       && lk != 144562              // 'lt' '}'\n       && lk != 144564              // 'mod' '}'\n       && lk != 144565              // 'modify' '}'\n       && lk != 144566              // 'module' '}'\n       && lk != 144568              // 'namespace' '}'\n       && lk != 144569              // 'namespace-node' '}'\n       && lk != 144570              // 'ne' '}'\n       && lk != 144575              // 'node' '}'\n       && lk != 144576              // 'nodes' '}'\n       && lk != 144578              // 'object' '}'\n       && lk != 144582              // 'only' '}'\n       && lk != 144583              // 'option' '}'\n       && lk != 144584              // 'or' '}'\n       && lk != 144585              // 'order' '}'\n       && lk != 144586              // 'ordered' '}'\n       && lk != 144587              // 'ordering' '}'\n       && lk != 144590              // 'parent' '}'\n       && lk != 144596              // 'preceding' '}'\n       && lk != 144597              // 'preceding-sibling' '}'\n       && lk != 144600              // 'processing-instruction' '}'\n       && lk != 144602              // 'rename' '}'\n       && lk != 144603              // 'replace' '}'\n       && lk != 144604              // 'return' '}'\n       && lk != 144605              // 'returning' '}'\n       && lk != 144606              // 'revalidation' '}'\n       && lk != 144608              // 'satisfies' '}'\n       && lk != 144609              // 'schema' '}'\n       && lk != 144610              // 'schema-attribute' '}'\n       && lk != 144611              // 'schema-element' '}'\n       && lk != 144612              // 'score' '}'\n       && lk != 144613              // 'self' '}'\n       && lk != 144618              // 'sliding' '}'\n       && lk != 144619              // 'some' '}'\n       && lk != 144620              // 'stable' '}'\n       && lk != 144621              // 'start' '}'\n       && lk != 144624              // 'strict' '}'\n       && lk != 144626              // 'structured-item' '}'\n       && lk != 144627              // 'switch' '}'\n       && lk != 144628              // 'text' '}'\n       && lk != 144632              // 'to' '}'\n       && lk != 144633              // 'treat' '}'\n       && lk != 144634              // 'try' '}'\n       && lk != 144635              // 'tumbling' '}'\n       && lk != 144636              // 'type' '}'\n       && lk != 144637              // 'typeswitch' '}'\n       && lk != 144638              // 'union' '}'\n       && lk != 144640              // 'unordered' '}'\n       && lk != 144641              // 'updating' '}'\n       && lk != 144644              // 'validate' '}'\n       && lk != 144645              // 'value' '}'\n       && lk != 144646              // 'variable' '}'\n       && lk != 144647              // 'version' '}'\n       && lk != 144650              // 'where' '}'\n       && lk != 144651              // 'while' '}'\n       && lk != 144654              // 'with' '}'\n       && lk != 144658)             // 'xquery' '}'\n      {\n        lk = memoized(6, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            memoize(6, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(6, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 53                  // ';'\n       && lk != 16134               // 'variable' '$'\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284)             // 'exit' 'returning'\n      {\n        break;\n      }\n      try_Statement();\n    }\n  }\n\n  function parse_StatementsAndExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndExpr\", e0);\n    parse_Statements();\n    whitespace();\n    parse_Expr();\n    eventHandler.endNonterminal(\"StatementsAndExpr\", e0);\n  }\n\n  function try_StatementsAndExpr()\n  {\n    try_Statements();\n    try_Expr();\n  }\n\n  function parse_StatementsAndOptionalExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndOptionalExpr\", e0);\n    parse_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    eventHandler.endNonterminal(\"StatementsAndOptionalExpr\", e0);\n  }\n\n  function try_StatementsAndOptionalExpr()\n  {\n    try_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 282)                  // '}'\n    {\n      try_Expr();\n    }\n  }\n\n  function parse_Statement()\n  {\n    eventHandler.startNonterminal(\"Statement\", e0);\n    switch (l1)\n    {\n    case 132:                       // 'exit'\n      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 137:                       // 'for'\n      lookahead2W(195);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(192);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 262:                       // 'variable'\n      lookahead2W(186);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 31:                        // '$'\n    case 32:                        // '%'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 86:                        // 'break'\n    case 102:                       // 'continue'\n      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 267:                       // 'while'\n      lookahead2W(184);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3103                  // '$' EQName^Token\n     || lk == 3104                  // '%' EQName^Token\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17675                 // 'while' '('\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27412                 // '{' ';'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 35871                 // '$' 'after'\n     || lk == 35872                 // '%' 'after'\n     || lk == 36116                 // '{' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 36896                 // '%' 'allowing'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37408                 // '%' 'ancestor'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 37920                 // '%' 'ancestor-or-self'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 38432                 // '%' 'and'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39456                 // '%' 'append'\n     || lk == 39700                 // '{' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 39968                 // '%' 'array'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40480                 // '%' 'as'\n     || lk == 40724                 // '{' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 40992                 // '%' 'ascending'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 41504                 // '%' 'at'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42016                 // '%' 'attribute'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 42528                 // '%' 'base-uri'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43040                 // '%' 'before'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 43552                 // '%' 'boundary-space'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 44064                 // '%' 'break'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45088                 // '%' 'case'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 45600                 // '%' 'cast'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46112                 // '%' 'castable'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 46624                 // '%' 'catch'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 47648                 // '%' 'child'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 48160                 // '%' 'collation'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49184                 // '%' 'comment'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 49696                 // '%' 'constraint'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 50208                 // '%' 'construction'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 51744                 // '%' 'context'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52256                 // '%' 'continue'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 52768                 // '%' 'copy'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53280                 // '%' 'copy-namespaces'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 53792                 // '%' 'count'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 54304                 // '%' 'decimal-format'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55328                 // '%' 'declare'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 55840                 // '%' 'default'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56352                 // '%' 'delete'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 56864                 // '%' 'descendant'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57376                 // '%' 'descendant-or-self'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 57888                 // '%' 'descending'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60448                 // '%' 'div'\n     || lk == 60692                 // '{' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 60960                 // '%' 'document'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61472                 // '%' 'document-node'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 61984                 // '%' 'element'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 62496                 // '%' 'else'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63008                 // '%' 'empty'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 63520                 // '%' 'empty-sequence'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64032                 // '%' 'encoding'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 64544                 // '%' 'end'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 65568                 // '%' 'eq'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 66080                 // '%' 'every'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67104                 // '%' 'except'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 67616                 // '%' 'exit'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68128                 // '%' 'external'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 68640                 // '%' 'first'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69152                 // '%' 'following'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 69664                 // '%' 'following-sibling'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 70176                 // '%' 'for'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 72224                 // '%' 'ft-option'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74272                 // '%' 'function'\n     || lk == 74516                 // '{' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 74784                 // '%' 'ge'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 75808                 // '%' 'group'\n     || lk == 76052                 // '{' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 76832                 // '%' 'gt'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77344                 // '%' 'idiv'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 77856                 // '%' 'if'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78368                 // '%' 'import'\n     || lk == 78612                 // '{' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 78880                 // '%' 'in'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 79392                 // '%' 'index'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81440                 // '%' 'insert'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 81952                 // '%' 'instance'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82464                 // '%' 'integrity'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 82976                 // '%' 'intersect'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83488                 // '%' 'into'\n     || lk == 83732                 // '{' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84000                 // '%' 'is'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 84512                 // '%' 'item'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85024                 // '%' 'json'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 85536                 // '%' 'json-item'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87072                 // '%' 'last'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 87584                 // '%' 'lax'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 88096                 // '%' 'le'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 89120                 // '%' 'let'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 90144                 // '%' 'loop'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 91168                 // '%' 'lt'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92192                 // '%' 'mod'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 92704                 // '%' 'modify'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 93216                 // '%' 'module'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94240                 // '%' 'namespace'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 94752                 // '%' 'namespace-node'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 95264                 // '%' 'ne'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 97824                 // '%' 'node'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 98336                 // '%' 'nodes'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 99360                 // '%' 'object'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101408                // '%' 'only'\n     || lk == 101652                // '{' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 101920                // '%' 'option'\n     || lk == 102164                // '{' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102432                // '%' 'or'\n     || lk == 102676                // '{' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 102944                // '%' 'order'\n     || lk == 103188                // '{' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103456                // '%' 'ordered'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 103968                // '%' 'ordering'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 105504                // '%' 'parent'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 108576                // '%' 'preceding'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 109088                // '%' 'preceding-sibling'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 110624                // '%' 'processing-instruction'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 111648                // '%' 'rename'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112160                // '%' 'replace'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 112672                // '%' 'return'\n     || lk == 112916                // '{' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113184                // '%' 'returning'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 113696                // '%' 'revalidation'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 114720                // '%' 'satisfies'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115232                // '%' 'schema'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 115744                // '%' 'schema-attribute'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116256                // '%' 'schema-element'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 116768                // '%' 'score'\n     || lk == 117012                // '{' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 117280                // '%' 'self'\n     || lk == 117524                // '{' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 119840                // '%' 'sliding'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120352                // '%' 'some'\n     || lk == 120596                // '{' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 120864                // '%' 'stable'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 121376                // '%' 'start'\n     || lk == 121620                // '{' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 122912                // '%' 'strict'\n     || lk == 123156                // '{' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 123936                // '%' 'structured-item'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124448                // '%' 'switch'\n     || lk == 124692                // '{' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 124960                // '%' 'text'\n     || lk == 125204                // '{' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127008                // '%' 'to'\n     || lk == 127252                // '{' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 127520                // '%' 'treat'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128032                // '%' 'try'\n     || lk == 128276                // '{' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 128544                // '%' 'tumbling'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129056                // '%' 'type'\n     || lk == 129300                // '{' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 129568                // '%' 'typeswitch'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 130080                // '%' 'union'\n     || lk == 130324                // '{' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131104                // '%' 'unordered'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 131616                // '%' 'updating'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133152                // '%' 'validate'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 133664                // '%' 'value'\n     || lk == 133908                // '{' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134176                // '%' 'variable'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 134688                // '%' 'version'\n     || lk == 134932                // '{' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136224                // '%' 'where'\n     || lk == 136468                // '{' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 136736                // '%' 'while'\n     || lk == 136980                // '{' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 138272                // '%' 'with'\n     || lk == 138516                // '{' 'with'\n     || lk == 140319                // '$' 'xquery'\n     || lk == 140320                // '%' 'xquery'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(7, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            lk = -2;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              lk = -3;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                lk = -12;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(7, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      parse_AssignStatement();\n      break;\n    case -3:\n      parse_BlockStatement();\n      break;\n    case 90198:                     // 'break' 'loop'\n      parse_BreakStatement();\n      break;\n    case 90214:                     // 'continue' 'loop'\n      parse_ContinueStatement();\n      break;\n    case 113284:                    // 'exit' 'returning'\n      parse_ExitStatement();\n      break;\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      parse_FLWORStatement();\n      break;\n    case 17560:                     // 'if' '('\n      parse_IfStatement();\n      break;\n    case 17651:                     // 'switch' '('\n      parse_SwitchStatement();\n      break;\n    case 141562:                    // 'try' '{'\n      parse_TryCatchStatement();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      parse_TypeswitchStatement();\n      break;\n    case -12:\n    case 16134:                     // 'variable' '$'\n      parse_VarDeclStatement();\n      break;\n    case -13:\n      parse_WhileStatement();\n      break;\n    case 53:                        // ';'\n      parse_VoidStatement();\n      break;\n    default:\n      parse_ApplyStatement();\n    }\n    eventHandler.endNonterminal(\"Statement\", e0);\n  }\n\n  function try_Statement()\n  {\n    switch (l1)\n    {\n    case 132:                       // 'exit'\n      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 137:                       // 'for'\n      lookahead2W(195);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(192);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 262:                       // 'variable'\n      lookahead2W(186);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 31:                        // '$'\n    case 32:                        // '%'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 86:                        // 'break'\n    case 102:                       // 'continue'\n      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 267:                       // 'while'\n      lookahead2W(184);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3103                  // '$' EQName^Token\n     || lk == 3104                  // '%' EQName^Token\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17675                 // 'while' '('\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27412                 // '{' ';'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 35871                 // '$' 'after'\n     || lk == 35872                 // '%' 'after'\n     || lk == 36116                 // '{' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 36896                 // '%' 'allowing'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37408                 // '%' 'ancestor'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 37920                 // '%' 'ancestor-or-self'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 38432                 // '%' 'and'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39456                 // '%' 'append'\n     || lk == 39700                 // '{' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 39968                 // '%' 'array'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40480                 // '%' 'as'\n     || lk == 40724                 // '{' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 40992                 // '%' 'ascending'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 41504                 // '%' 'at'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42016                 // '%' 'attribute'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 42528                 // '%' 'base-uri'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43040                 // '%' 'before'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 43552                 // '%' 'boundary-space'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 44064                 // '%' 'break'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45088                 // '%' 'case'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 45600                 // '%' 'cast'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46112                 // '%' 'castable'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 46624                 // '%' 'catch'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 47648                 // '%' 'child'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 48160                 // '%' 'collation'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49184                 // '%' 'comment'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 49696                 // '%' 'constraint'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 50208                 // '%' 'construction'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 51744                 // '%' 'context'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52256                 // '%' 'continue'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 52768                 // '%' 'copy'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53280                 // '%' 'copy-namespaces'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 53792                 // '%' 'count'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 54304                 // '%' 'decimal-format'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55328                 // '%' 'declare'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 55840                 // '%' 'default'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56352                 // '%' 'delete'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 56864                 // '%' 'descendant'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57376                 // '%' 'descendant-or-self'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 57888                 // '%' 'descending'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60448                 // '%' 'div'\n     || lk == 60692                 // '{' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 60960                 // '%' 'document'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61472                 // '%' 'document-node'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 61984                 // '%' 'element'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 62496                 // '%' 'else'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63008                 // '%' 'empty'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 63520                 // '%' 'empty-sequence'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64032                 // '%' 'encoding'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 64544                 // '%' 'end'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 65568                 // '%' 'eq'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 66080                 // '%' 'every'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67104                 // '%' 'except'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 67616                 // '%' 'exit'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68128                 // '%' 'external'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 68640                 // '%' 'first'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69152                 // '%' 'following'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 69664                 // '%' 'following-sibling'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 70176                 // '%' 'for'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 72224                 // '%' 'ft-option'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74272                 // '%' 'function'\n     || lk == 74516                 // '{' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 74784                 // '%' 'ge'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 75808                 // '%' 'group'\n     || lk == 76052                 // '{' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 76832                 // '%' 'gt'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77344                 // '%' 'idiv'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 77856                 // '%' 'if'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78368                 // '%' 'import'\n     || lk == 78612                 // '{' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 78880                 // '%' 'in'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 79392                 // '%' 'index'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81440                 // '%' 'insert'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 81952                 // '%' 'instance'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82464                 // '%' 'integrity'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 82976                 // '%' 'intersect'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83488                 // '%' 'into'\n     || lk == 83732                 // '{' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84000                 // '%' 'is'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 84512                 // '%' 'item'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85024                 // '%' 'json'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 85536                 // '%' 'json-item'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87072                 // '%' 'last'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 87584                 // '%' 'lax'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 88096                 // '%' 'le'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 89120                 // '%' 'let'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 90144                 // '%' 'loop'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 91168                 // '%' 'lt'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92192                 // '%' 'mod'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 92704                 // '%' 'modify'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 93216                 // '%' 'module'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94240                 // '%' 'namespace'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 94752                 // '%' 'namespace-node'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 95264                 // '%' 'ne'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 97824                 // '%' 'node'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 98336                 // '%' 'nodes'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 99360                 // '%' 'object'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101408                // '%' 'only'\n     || lk == 101652                // '{' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 101920                // '%' 'option'\n     || lk == 102164                // '{' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102432                // '%' 'or'\n     || lk == 102676                // '{' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 102944                // '%' 'order'\n     || lk == 103188                // '{' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103456                // '%' 'ordered'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 103968                // '%' 'ordering'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 105504                // '%' 'parent'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 108576                // '%' 'preceding'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 109088                // '%' 'preceding-sibling'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 110624                // '%' 'processing-instruction'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 111648                // '%' 'rename'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112160                // '%' 'replace'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 112672                // '%' 'return'\n     || lk == 112916                // '{' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113184                // '%' 'returning'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 113696                // '%' 'revalidation'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 114720                // '%' 'satisfies'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115232                // '%' 'schema'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 115744                // '%' 'schema-attribute'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116256                // '%' 'schema-element'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 116768                // '%' 'score'\n     || lk == 117012                // '{' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 117280                // '%' 'self'\n     || lk == 117524                // '{' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 119840                // '%' 'sliding'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120352                // '%' 'some'\n     || lk == 120596                // '{' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 120864                // '%' 'stable'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 121376                // '%' 'start'\n     || lk == 121620                // '{' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 122912                // '%' 'strict'\n     || lk == 123156                // '{' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 123936                // '%' 'structured-item'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124448                // '%' 'switch'\n     || lk == 124692                // '{' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 124960                // '%' 'text'\n     || lk == 125204                // '{' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127008                // '%' 'to'\n     || lk == 127252                // '{' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 127520                // '%' 'treat'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128032                // '%' 'try'\n     || lk == 128276                // '{' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 128544                // '%' 'tumbling'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129056                // '%' 'type'\n     || lk == 129300                // '{' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 129568                // '%' 'typeswitch'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 130080                // '%' 'union'\n     || lk == 130324                // '{' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131104                // '%' 'unordered'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 131616                // '%' 'updating'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133152                // '%' 'validate'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 133664                // '%' 'value'\n     || lk == 133908                // '{' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134176                // '%' 'variable'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 134688                // '%' 'version'\n     || lk == 134932                // '{' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136224                // '%' 'where'\n     || lk == 136468                // '{' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 136736                // '%' 'while'\n     || lk == 136980                // '{' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 138272                // '%' 'with'\n     || lk == 138516                // '{' 'with'\n     || lk == 140319                // '$' 'xquery'\n     || lk == 140320                // '%' 'xquery'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(7, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          memoize(7, e0A, -1);\n          lk = -15;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            memoize(7, e0A, -2);\n            lk = -15;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              memoize(7, e0A, -3);\n              lk = -15;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                memoize(7, e0A, -12);\n                lk = -15;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                memoize(7, e0A, -13);\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      try_AssignStatement();\n      break;\n    case -3:\n      try_BlockStatement();\n      break;\n    case 90198:                     // 'break' 'loop'\n      try_BreakStatement();\n      break;\n    case 90214:                     // 'continue' 'loop'\n      try_ContinueStatement();\n      break;\n    case 113284:                    // 'exit' 'returning'\n      try_ExitStatement();\n      break;\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      try_FLWORStatement();\n      break;\n    case 17560:                     // 'if' '('\n      try_IfStatement();\n      break;\n    case 17651:                     // 'switch' '('\n      try_SwitchStatement();\n      break;\n    case 141562:                    // 'try' '{'\n      try_TryCatchStatement();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      try_TypeswitchStatement();\n      break;\n    case -12:\n    case 16134:                     // 'variable' '$'\n      try_VarDeclStatement();\n      break;\n    case -13:\n      try_WhileStatement();\n      break;\n    case 53:                        // ';'\n      try_VoidStatement();\n      break;\n    case -15:\n      break;\n    default:\n      try_ApplyStatement();\n    }\n  }\n\n  function parse_ApplyStatement()\n  {\n    eventHandler.startNonterminal(\"ApplyStatement\", e0);\n    parse_ExprSimple();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ApplyStatement\", e0);\n  }\n\n  function try_ApplyStatement()\n  {\n    try_ExprSimple();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_AssignStatement()\n  {\n    eventHandler.startNonterminal(\"AssignStatement\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"AssignStatement\", e0);\n  }\n\n  function try_AssignStatement()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_BlockStatement()\n  {\n    eventHandler.startNonterminal(\"BlockStatement\", e0);\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statements();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"BlockStatement\", e0);\n  }\n\n  function try_BlockStatement()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statements();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_BreakStatement()\n  {\n    eventHandler.startNonterminal(\"BreakStatement\", e0);\n    shift(86);                      // 'break'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shift(176);                     // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"BreakStatement\", e0);\n  }\n\n  function try_BreakStatement()\n  {\n    shiftT(86);                     // 'break'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shiftT(176);                    // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ContinueStatement()\n  {\n    eventHandler.startNonterminal(\"ContinueStatement\", e0);\n    shift(102);                     // 'continue'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shift(176);                     // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ContinueStatement\", e0);\n  }\n\n  function try_ContinueStatement()\n  {\n    shiftT(102);                    // 'continue'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shiftT(176);                    // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ExitStatement()\n  {\n    eventHandler.startNonterminal(\"ExitStatement\", e0);\n    shift(132);                     // 'exit'\n    lookahead1W(71);                // S^WS | '(:' | 'returning'\n    shift(221);                     // 'returning'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ExitStatement\", e0);\n  }\n\n  function try_ExitStatement()\n  {\n    shiftT(132);                    // 'exit'\n    lookahead1W(71);                // S^WS | '(:' | 'returning'\n    shiftT(221);                    // 'returning'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_FLWORStatement()\n  {\n    eventHandler.startNonterminal(\"FLWORStatement\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnStatement();\n    eventHandler.endNonterminal(\"FLWORStatement\", e0);\n  }\n\n  function try_FLWORStatement()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnStatement();\n  }\n\n  function parse_ReturnStatement()\n  {\n    eventHandler.startNonterminal(\"ReturnStatement\", e0);\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"ReturnStatement\", e0);\n  }\n\n  function try_ReturnStatement()\n  {\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_IfStatement()\n  {\n    eventHandler.startNonterminal(\"IfStatement\", e0);\n    shift(152);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shift(245);                     // 'then'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    lookahead1W(48);                // S^WS | '(:' | 'else'\n    shift(122);                     // 'else'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"IfStatement\", e0);\n  }\n\n  function try_IfStatement()\n  {\n    shiftT(152);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shiftT(245);                    // 'then'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n    lookahead1W(48);                // S^WS | '(:' | 'else'\n    shiftT(122);                    // 'else'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchStatement\", e0);\n    shift(243);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchStatement\", e0);\n  }\n\n  function try_SwitchStatement()\n  {\n    shiftT(243);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_SwitchCaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchCaseStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseStatement\", e0);\n    for (;;)\n    {\n      shift(88);                    // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchCaseStatement\", e0);\n  }\n\n  function try_SwitchCaseStatement()\n  {\n    for (;;)\n    {\n      shiftT(88);                   // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_TryCatchStatement()\n  {\n    eventHandler.startNonterminal(\"TryCatchStatement\", e0);\n    shift(250);                     // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      shift(91);                    // 'catch'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CatchErrorList();\n      whitespace();\n      parse_BlockStatement();\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 91:                      // 'catch'\n        lookahead2W(278);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 38491               // 'catch' 'and'\n       || lk == 45659               // 'catch' 'cast'\n       || lk == 46171               // 'catch' 'castable'\n       || lk == 60507               // 'catch' 'div'\n       || lk == 65627               // 'catch' 'eq'\n       || lk == 67163               // 'catch' 'except'\n       || lk == 74843               // 'catch' 'ge'\n       || lk == 76891               // 'catch' 'gt'\n       || lk == 77403               // 'catch' 'idiv'\n       || lk == 82011               // 'catch' 'instance'\n       || lk == 83035               // 'catch' 'intersect'\n       || lk == 84059               // 'catch' 'is'\n       || lk == 88155               // 'catch' 'le'\n       || lk == 91227               // 'catch' 'lt'\n       || lk == 92251               // 'catch' 'mod'\n       || lk == 95323               // 'catch' 'ne'\n       || lk == 102491              // 'catch' 'or'\n       || lk == 127067              // 'catch' 'to'\n       || lk == 127579              // 'catch' 'treat'\n       || lk == 130139)             // 'catch' 'union'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            lookahead1W(36);        // S^WS | '(:' | 'catch'\n            shiftT(91);             // 'catch'\n            lookahead1W(256);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n            try_CatchErrorList();\n            try_BlockStatement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(8, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 2651                // 'catch' Wildcard\n       && lk != 3163                // 'catch' EQName^Token\n       && lk != 35931               // 'catch' 'after'\n       && lk != 36955               // 'catch' 'allowing'\n       && lk != 37467               // 'catch' 'ancestor'\n       && lk != 37979               // 'catch' 'ancestor-or-self'\n       && lk != 39515               // 'catch' 'append'\n       && lk != 40027               // 'catch' 'array'\n       && lk != 40539               // 'catch' 'as'\n       && lk != 41051               // 'catch' 'ascending'\n       && lk != 41563               // 'catch' 'at'\n       && lk != 42075               // 'catch' 'attribute'\n       && lk != 42587               // 'catch' 'base-uri'\n       && lk != 43099               // 'catch' 'before'\n       && lk != 43611               // 'catch' 'boundary-space'\n       && lk != 44123               // 'catch' 'break'\n       && lk != 45147               // 'catch' 'case'\n       && lk != 46683               // 'catch' 'catch'\n       && lk != 47707               // 'catch' 'child'\n       && lk != 48219               // 'catch' 'collation'\n       && lk != 49243               // 'catch' 'comment'\n       && lk != 49755               // 'catch' 'constraint'\n       && lk != 50267               // 'catch' 'construction'\n       && lk != 51803               // 'catch' 'context'\n       && lk != 52315               // 'catch' 'continue'\n       && lk != 52827               // 'catch' 'copy'\n       && lk != 53339               // 'catch' 'copy-namespaces'\n       && lk != 53851               // 'catch' 'count'\n       && lk != 54363               // 'catch' 'decimal-format'\n       && lk != 55387               // 'catch' 'declare'\n       && lk != 55899               // 'catch' 'default'\n       && lk != 56411               // 'catch' 'delete'\n       && lk != 56923               // 'catch' 'descendant'\n       && lk != 57435               // 'catch' 'descendant-or-self'\n       && lk != 57947               // 'catch' 'descending'\n       && lk != 61019               // 'catch' 'document'\n       && lk != 61531               // 'catch' 'document-node'\n       && lk != 62043               // 'catch' 'element'\n       && lk != 62555               // 'catch' 'else'\n       && lk != 63067               // 'catch' 'empty'\n       && lk != 63579               // 'catch' 'empty-sequence'\n       && lk != 64091               // 'catch' 'encoding'\n       && lk != 64603               // 'catch' 'end'\n       && lk != 66139               // 'catch' 'every'\n       && lk != 67675               // 'catch' 'exit'\n       && lk != 68187               // 'catch' 'external'\n       && lk != 68699               // 'catch' 'first'\n       && lk != 69211               // 'catch' 'following'\n       && lk != 69723               // 'catch' 'following-sibling'\n       && lk != 70235               // 'catch' 'for'\n       && lk != 72283               // 'catch' 'ft-option'\n       && lk != 74331               // 'catch' 'function'\n       && lk != 75867               // 'catch' 'group'\n       && lk != 77915               // 'catch' 'if'\n       && lk != 78427               // 'catch' 'import'\n       && lk != 78939               // 'catch' 'in'\n       && lk != 79451               // 'catch' 'index'\n       && lk != 81499               // 'catch' 'insert'\n       && lk != 82523               // 'catch' 'integrity'\n       && lk != 83547               // 'catch' 'into'\n       && lk != 84571               // 'catch' 'item'\n       && lk != 85083               // 'catch' 'json'\n       && lk != 85595               // 'catch' 'json-item'\n       && lk != 87131               // 'catch' 'last'\n       && lk != 87643               // 'catch' 'lax'\n       && lk != 89179               // 'catch' 'let'\n       && lk != 90203               // 'catch' 'loop'\n       && lk != 92763               // 'catch' 'modify'\n       && lk != 93275               // 'catch' 'module'\n       && lk != 94299               // 'catch' 'namespace'\n       && lk != 94811               // 'catch' 'namespace-node'\n       && lk != 97883               // 'catch' 'node'\n       && lk != 98395               // 'catch' 'nodes'\n       && lk != 99419               // 'catch' 'object'\n       && lk != 101467              // 'catch' 'only'\n       && lk != 101979              // 'catch' 'option'\n       && lk != 103003              // 'catch' 'order'\n       && lk != 103515              // 'catch' 'ordered'\n       && lk != 104027              // 'catch' 'ordering'\n       && lk != 105563              // 'catch' 'parent'\n       && lk != 108635              // 'catch' 'preceding'\n       && lk != 109147              // 'catch' 'preceding-sibling'\n       && lk != 110683              // 'catch' 'processing-instruction'\n       && lk != 111707              // 'catch' 'rename'\n       && lk != 112219              // 'catch' 'replace'\n       && lk != 112731              // 'catch' 'return'\n       && lk != 113243              // 'catch' 'returning'\n       && lk != 113755              // 'catch' 'revalidation'\n       && lk != 114779              // 'catch' 'satisfies'\n       && lk != 115291              // 'catch' 'schema'\n       && lk != 115803              // 'catch' 'schema-attribute'\n       && lk != 116315              // 'catch' 'schema-element'\n       && lk != 116827              // 'catch' 'score'\n       && lk != 117339              // 'catch' 'self'\n       && lk != 119899              // 'catch' 'sliding'\n       && lk != 120411              // 'catch' 'some'\n       && lk != 120923              // 'catch' 'stable'\n       && lk != 121435              // 'catch' 'start'\n       && lk != 122971              // 'catch' 'strict'\n       && lk != 123995              // 'catch' 'structured-item'\n       && lk != 124507              // 'catch' 'switch'\n       && lk != 125019              // 'catch' 'text'\n       && lk != 128091              // 'catch' 'try'\n       && lk != 128603              // 'catch' 'tumbling'\n       && lk != 129115              // 'catch' 'type'\n       && lk != 129627              // 'catch' 'typeswitch'\n       && lk != 131163              // 'catch' 'unordered'\n       && lk != 131675              // 'catch' 'updating'\n       && lk != 133211              // 'catch' 'validate'\n       && lk != 133723              // 'catch' 'value'\n       && lk != 134235              // 'catch' 'variable'\n       && lk != 134747              // 'catch' 'version'\n       && lk != 136283              // 'catch' 'where'\n       && lk != 136795              // 'catch' 'while'\n       && lk != 138331              // 'catch' 'with'\n       && lk != 140379)             // 'catch' 'xquery'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchStatement\", e0);\n  }\n\n  function try_TryCatchStatement()\n  {\n    shiftT(250);                    // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockStatement();\n    lookahead1W(36);                // S^WS | '(:' | 'catch'\n    shiftT(91);                     // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_CatchErrorList();\n    try_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 91:                      // 'catch'\n        lookahead2W(278);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 38491               // 'catch' 'and'\n       || lk == 45659               // 'catch' 'cast'\n       || lk == 46171               // 'catch' 'castable'\n       || lk == 60507               // 'catch' 'div'\n       || lk == 65627               // 'catch' 'eq'\n       || lk == 67163               // 'catch' 'except'\n       || lk == 74843               // 'catch' 'ge'\n       || lk == 76891               // 'catch' 'gt'\n       || lk == 77403               // 'catch' 'idiv'\n       || lk == 82011               // 'catch' 'instance'\n       || lk == 83035               // 'catch' 'intersect'\n       || lk == 84059               // 'catch' 'is'\n       || lk == 88155               // 'catch' 'le'\n       || lk == 91227               // 'catch' 'lt'\n       || lk == 92251               // 'catch' 'mod'\n       || lk == 95323               // 'catch' 'ne'\n       || lk == 102491              // 'catch' 'or'\n       || lk == 127067              // 'catch' 'to'\n       || lk == 127579              // 'catch' 'treat'\n       || lk == 130139)             // 'catch' 'union'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            lookahead1W(36);        // S^WS | '(:' | 'catch'\n            shiftT(91);             // 'catch'\n            lookahead1W(256);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n            try_CatchErrorList();\n            try_BlockStatement();\n            memoize(8, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(8, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 2651                // 'catch' Wildcard\n       && lk != 3163                // 'catch' EQName^Token\n       && lk != 35931               // 'catch' 'after'\n       && lk != 36955               // 'catch' 'allowing'\n       && lk != 37467               // 'catch' 'ancestor'\n       && lk != 37979               // 'catch' 'ancestor-or-self'\n       && lk != 39515               // 'catch' 'append'\n       && lk != 40027               // 'catch' 'array'\n       && lk != 40539               // 'catch' 'as'\n       && lk != 41051               // 'catch' 'ascending'\n       && lk != 41563               // 'catch' 'at'\n       && lk != 42075               // 'catch' 'attribute'\n       && lk != 42587               // 'catch' 'base-uri'\n       && lk != 43099               // 'catch' 'before'\n       && lk != 43611               // 'catch' 'boundary-space'\n       && lk != 44123               // 'catch' 'break'\n       && lk != 45147               // 'catch' 'case'\n       && lk != 46683               // 'catch' 'catch'\n       && lk != 47707               // 'catch' 'child'\n       && lk != 48219               // 'catch' 'collation'\n       && lk != 49243               // 'catch' 'comment'\n       && lk != 49755               // 'catch' 'constraint'\n       && lk != 50267               // 'catch' 'construction'\n       && lk != 51803               // 'catch' 'context'\n       && lk != 52315               // 'catch' 'continue'\n       && lk != 52827               // 'catch' 'copy'\n       && lk != 53339               // 'catch' 'copy-namespaces'\n       && lk != 53851               // 'catch' 'count'\n       && lk != 54363               // 'catch' 'decimal-format'\n       && lk != 55387               // 'catch' 'declare'\n       && lk != 55899               // 'catch' 'default'\n       && lk != 56411               // 'catch' 'delete'\n       && lk != 56923               // 'catch' 'descendant'\n       && lk != 57435               // 'catch' 'descendant-or-self'\n       && lk != 57947               // 'catch' 'descending'\n       && lk != 61019               // 'catch' 'document'\n       && lk != 61531               // 'catch' 'document-node'\n       && lk != 62043               // 'catch' 'element'\n       && lk != 62555               // 'catch' 'else'\n       && lk != 63067               // 'catch' 'empty'\n       && lk != 63579               // 'catch' 'empty-sequence'\n       && lk != 64091               // 'catch' 'encoding'\n       && lk != 64603               // 'catch' 'end'\n       && lk != 66139               // 'catch' 'every'\n       && lk != 67675               // 'catch' 'exit'\n       && lk != 68187               // 'catch' 'external'\n       && lk != 68699               // 'catch' 'first'\n       && lk != 69211               // 'catch' 'following'\n       && lk != 69723               // 'catch' 'following-sibling'\n       && lk != 70235               // 'catch' 'for'\n       && lk != 72283               // 'catch' 'ft-option'\n       && lk != 74331               // 'catch' 'function'\n       && lk != 75867               // 'catch' 'group'\n       && lk != 77915               // 'catch' 'if'\n       && lk != 78427               // 'catch' 'import'\n       && lk != 78939               // 'catch' 'in'\n       && lk != 79451               // 'catch' 'index'\n       && lk != 81499               // 'catch' 'insert'\n       && lk != 82523               // 'catch' 'integrity'\n       && lk != 83547               // 'catch' 'into'\n       && lk != 84571               // 'catch' 'item'\n       && lk != 85083               // 'catch' 'json'\n       && lk != 85595               // 'catch' 'json-item'\n       && lk != 87131               // 'catch' 'last'\n       && lk != 87643               // 'catch' 'lax'\n       && lk != 89179               // 'catch' 'let'\n       && lk != 90203               // 'catch' 'loop'\n       && lk != 92763               // 'catch' 'modify'\n       && lk != 93275               // 'catch' 'module'\n       && lk != 94299               // 'catch' 'namespace'\n       && lk != 94811               // 'catch' 'namespace-node'\n       && lk != 97883               // 'catch' 'node'\n       && lk != 98395               // 'catch' 'nodes'\n       && lk != 99419               // 'catch' 'object'\n       && lk != 101467              // 'catch' 'only'\n       && lk != 101979              // 'catch' 'option'\n       && lk != 103003              // 'catch' 'order'\n       && lk != 103515              // 'catch' 'ordered'\n       && lk != 104027              // 'catch' 'ordering'\n       && lk != 105563              // 'catch' 'parent'\n       && lk != 108635              // 'catch' 'preceding'\n       && lk != 109147              // 'catch' 'preceding-sibling'\n       && lk != 110683              // 'catch' 'processing-instruction'\n       && lk != 111707              // 'catch' 'rename'\n       && lk != 112219              // 'catch' 'replace'\n       && lk != 112731              // 'catch' 'return'\n       && lk != 113243              // 'catch' 'returning'\n       && lk != 113755              // 'catch' 'revalidation'\n       && lk != 114779              // 'catch' 'satisfies'\n       && lk != 115291              // 'catch' 'schema'\n       && lk != 115803              // 'catch' 'schema-attribute'\n       && lk != 116315              // 'catch' 'schema-element'\n       && lk != 116827              // 'catch' 'score'\n       && lk != 117339              // 'catch' 'self'\n       && lk != 119899              // 'catch' 'sliding'\n       && lk != 120411              // 'catch' 'some'\n       && lk != 120923              // 'catch' 'stable'\n       && lk != 121435              // 'catch' 'start'\n       && lk != 122971              // 'catch' 'strict'\n       && lk != 123995              // 'catch' 'structured-item'\n       && lk != 124507              // 'catch' 'switch'\n       && lk != 125019              // 'catch' 'text'\n       && lk != 128091              // 'catch' 'try'\n       && lk != 128603              // 'catch' 'tumbling'\n       && lk != 129115              // 'catch' 'type'\n       && lk != 129627              // 'catch' 'typeswitch'\n       && lk != 131163              // 'catch' 'unordered'\n       && lk != 131675              // 'catch' 'updating'\n       && lk != 133211              // 'catch' 'validate'\n       && lk != 133723              // 'catch' 'value'\n       && lk != 134235              // 'catch' 'variable'\n       && lk != 134747              // 'catch' 'version'\n       && lk != 136283              // 'catch' 'where'\n       && lk != 136795              // 'catch' 'while'\n       && lk != 138331              // 'catch' 'with'\n       && lk != 140379)             // 'catch' 'xquery'\n      {\n        break;\n      }\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      shiftT(91);                   // 'catch'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CatchErrorList();\n      try_BlockStatement();\n    }\n  }\n\n  function parse_TypeswitchStatement()\n  {\n    eventHandler.startNonterminal(\"TypeswitchStatement\", e0);\n    shift(253);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"TypeswitchStatement\", e0);\n  }\n\n  function try_TypeswitchStatement()\n  {\n    shiftT(253);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_CaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_CaseStatement()\n  {\n    eventHandler.startNonterminal(\"CaseStatement\", e0);\n    shift(88);                      // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"CaseStatement\", e0);\n  }\n\n  function try_CaseStatement()\n  {\n    shiftT(88);                     // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_VarDeclStatement()\n  {\n    eventHandler.startNonterminal(\"VarDeclStatement\", e0);\n    for (;;)\n    {\n      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(262);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 52)                   // ':='\n    {\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n    }\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"VarDeclStatement\", e0);\n  }\n\n  function try_VarDeclStatement()\n  {\n    for (;;)\n    {\n      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(262);                    // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 52)                   // ':='\n    {\n      shiftT(52);                   // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shiftT(52);                 // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n      }\n    }\n    shiftT(53);                     // ';'\n  }\n\n  function parse_WhileStatement()\n  {\n    eventHandler.startNonterminal(\"WhileStatement\", e0);\n    shift(267);                     // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"WhileStatement\", e0);\n  }\n\n  function try_WhileStatement()\n  {\n    shiftT(267);                    // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_VoidStatement()\n  {\n    eventHandler.startNonterminal(\"VoidStatement\", e0);\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"VoidStatement\", e0);\n  }\n\n  function try_VoidStatement()\n  {\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ExprSingle()\n  {\n    eventHandler.startNonterminal(\"ExprSingle\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      parse_FLWORExpr();\n      break;\n    case 17560:                     // 'if' '('\n      parse_IfExpr();\n      break;\n    case 17651:                     // 'switch' '('\n      parse_SwitchExpr();\n      break;\n    case 141562:                    // 'try' '{'\n      parse_TryCatchExpr();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      parse_TypeswitchExpr();\n      break;\n    default:\n      parse_ExprSimple();\n    }\n    eventHandler.endNonterminal(\"ExprSingle\", e0);\n  }\n\n  function try_ExprSingle()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      try_FLWORExpr();\n      break;\n    case 17560:                     // 'if' '('\n      try_IfExpr();\n      break;\n    case 17651:                     // 'switch' '('\n      try_SwitchExpr();\n      break;\n    case 141562:                    // 'try' '{'\n      try_TryCatchExpr();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      try_TypeswitchExpr();\n      break;\n    default:\n      try_ExprSimple();\n    }\n  }\n\n  function parse_ExprSimple()\n  {\n    eventHandler.startNonterminal(\"ExprSimple\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'append'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 218:                       // 'rename'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 219:                       // 'replace'\n      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 110:                       // 'delete'\n    case 159:                       // 'insert'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 103:                       // 'copy'\n    case 129:                       // 'every'\n    case 235:                       // 'some'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 133851)               // 'replace' 'value'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ReplaceExpr();\n          lk = -6;\n        }\n        catch (p6A)\n        {\n          lk = -11;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(9, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 16001:                     // 'every' '$'\n    case 16107:                     // 'some' '$'\n      parse_QuantifiedExpr();\n      break;\n    case 97951:                     // 'insert' 'node'\n    case 98463:                     // 'insert' 'nodes'\n      parse_InsertExpr();\n      break;\n    case 97902:                     // 'delete' 'node'\n    case 98414:                     // 'delete' 'nodes'\n      parse_DeleteExpr();\n      break;\n    case 98010:                     // 'rename' 'node'\n      parse_RenameExpr();\n      break;\n    case -6:\n    case 98011:                     // 'replace' 'node'\n      parse_ReplaceExpr();\n      break;\n    case 15975:                     // 'copy' '$'\n      parse_TransformExpr();\n      break;\n    case 85102:                     // 'delete' 'json'\n      parse_JSONDeleteExpr();\n      break;\n    case 85151:                     // 'insert' 'json'\n      parse_JSONInsertExpr();\n      break;\n    case 85210:                     // 'rename' 'json'\n      parse_JSONRenameExpr();\n      break;\n    case -11:\n      parse_JSONReplaceExpr();\n      break;\n    case 85069:                     // 'append' 'json'\n      parse_JSONAppendExpr();\n      break;\n    default:\n      parse_OrExpr();\n    }\n    eventHandler.endNonterminal(\"ExprSimple\", e0);\n  }\n\n  function try_ExprSimple()\n  {\n    switch (l1)\n    {\n    case 77:                        // 'append'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 218:                       // 'rename'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 219:                       // 'replace'\n      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 110:                       // 'delete'\n    case 159:                       // 'insert'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 103:                       // 'copy'\n    case 129:                       // 'every'\n    case 235:                       // 'some'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 133851)               // 'replace' 'value'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ReplaceExpr();\n          memoize(9, e0A, -6);\n          lk = -13;\n        }\n        catch (p6A)\n        {\n          lk = -11;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(9, e0A, -11);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 16001:                     // 'every' '$'\n    case 16107:                     // 'some' '$'\n      try_QuantifiedExpr();\n      break;\n    case 97951:                     // 'insert' 'node'\n    case 98463:                     // 'insert' 'nodes'\n      try_InsertExpr();\n      break;\n    case 97902:                     // 'delete' 'node'\n    case 98414:                     // 'delete' 'nodes'\n      try_DeleteExpr();\n      break;\n    case 98010:                     // 'rename' 'node'\n      try_RenameExpr();\n      break;\n    case -6:\n    case 98011:                     // 'replace' 'node'\n      try_ReplaceExpr();\n      break;\n    case 15975:                     // 'copy' '$'\n      try_TransformExpr();\n      break;\n    case 85102:                     // 'delete' 'json'\n      try_JSONDeleteExpr();\n      break;\n    case 85151:                     // 'insert' 'json'\n      try_JSONInsertExpr();\n      break;\n    case 85210:                     // 'rename' 'json'\n      try_JSONRenameExpr();\n      break;\n    case -11:\n      try_JSONReplaceExpr();\n      break;\n    case 85069:                     // 'append' 'json'\n      try_JSONAppendExpr();\n      break;\n    case -13:\n      break;\n    default:\n      try_OrExpr();\n    }\n  }\n\n  function parse_JSONDeleteExpr()\n  {\n    eventHandler.startNonterminal(\"JSONDeleteExpr\", e0);\n    shift(110);                     // 'delete'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    eventHandler.endNonterminal(\"JSONDeleteExpr\", e0);\n  }\n\n  function try_JSONDeleteExpr()\n  {\n    shiftT(110);                    // 'delete'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n  }\n\n  function parse_JSONInsertExpr()\n  {\n    eventHandler.startNonterminal(\"JSONInsertExpr\", e0);\n    switch (l1)\n    {\n    case 159:                       // 'insert'\n      lookahead2W(56);              // S^WS | '(:' | 'json'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(10, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        shiftT(159);                // 'insert'\n        lookahead1W(56);            // S^WS | '(:' | 'json'\n        shiftT(166);                // 'json'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        shiftT(163);                // 'into'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          lookahead2W(69);          // S^WS | '(:' | 'position'\n          break;\n        default:\n          lk = l1;\n        }\n        if (lk == 108113)           // 'at' 'position'\n        {\n          lk = memoized(11, e0);\n          if (lk == 0)\n          {\n            var b0B = b0; var e0B = e0; var l1B = l1;\n            var b1B = b1; var e1B = e1; var l2B = l2;\n            var b2B = b2; var e2B = e2;\n            try\n            {\n              shiftT(81);           // 'at'\n              lookahead1W(69);      // S^WS | '(:' | 'position'\n              shiftT(211);          // 'position'\n              lookahead1W(266);     // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n              try_ExprSingle();\n              memoize(11, e0B, -1);\n            }\n            catch (p1B)\n            {\n              b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n              b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n              b2 = b2B; e2 = e2B; end = e2B; }}\n              memoize(11, e0B, -2);\n            }\n            lk = -2;\n          }\n        }\n        if (lk == -1)\n        {\n          shiftT(81);               // 'at'\n          lookahead1W(69);          // S^WS | '(:' | 'position'\n          shiftT(211);              // 'position'\n          lookahead1W(266);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n          try_ExprSingle();\n        }\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(10, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(159);                   // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shift(166);                   // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n      shift(163);                   // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(69);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 108113)             // 'at' 'position'\n      {\n        lk = memoized(11, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(81);             // 'at'\n            lookahead1W(69);        // S^WS | '(:' | 'position'\n            shiftT(211);            // 'position'\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(11, e0, lk);\n        }\n      }\n      if (lk == -1)\n      {\n        shift(81);                  // 'at'\n        lookahead1W(69);            // S^WS | '(:' | 'position'\n        shift(211);                 // 'position'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      break;\n    default:\n      shift(159);                   // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shift(166);                   // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PairConstructorList();\n      shift(163);                   // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"JSONInsertExpr\", e0);\n  }\n\n  function try_JSONInsertExpr()\n  {\n    switch (l1)\n    {\n    case 159:                       // 'insert'\n      lookahead2W(56);              // S^WS | '(:' | 'json'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(10, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        shiftT(159);                // 'insert'\n        lookahead1W(56);            // S^WS | '(:' | 'json'\n        shiftT(166);                // 'json'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        shiftT(163);                // 'into'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          lookahead2W(69);          // S^WS | '(:' | 'position'\n          break;\n        default:\n          lk = l1;\n        }\n        if (lk == 108113)           // 'at' 'position'\n        {\n          lk = memoized(11, e0);\n          if (lk == 0)\n          {\n            var b0B = b0; var e0B = e0; var l1B = l1;\n            var b1B = b1; var e1B = e1; var l2B = l2;\n            var b2B = b2; var e2B = e2;\n            try\n            {\n              shiftT(81);           // 'at'\n              lookahead1W(69);      // S^WS | '(:' | 'position'\n              shiftT(211);          // 'position'\n              lookahead1W(266);     // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n              try_ExprSingle();\n              memoize(11, e0B, -1);\n            }\n            catch (p1B)\n            {\n              b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n              b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n              b2 = b2B; e2 = e2B; end = e2B; }}\n              memoize(11, e0B, -2);\n            }\n            lk = -2;\n          }\n        }\n        if (lk == -1)\n        {\n          shiftT(81);               // 'at'\n          lookahead1W(69);          // S^WS | '(:' | 'position'\n          shiftT(211);              // 'position'\n          lookahead1W(266);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n          try_ExprSingle();\n        }\n        memoize(10, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(10, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(159);                  // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shiftT(166);                  // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n      shiftT(163);                  // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(69);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 108113)             // 'at' 'position'\n      {\n        lk = memoized(11, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(81);             // 'at'\n            lookahead1W(69);        // S^WS | '(:' | 'position'\n            shiftT(211);            // 'position'\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n            memoize(11, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(11, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1)\n      {\n        shiftT(81);                 // 'at'\n        lookahead1W(69);            // S^WS | '(:' | 'position'\n        shiftT(211);                // 'position'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n      }\n      break;\n    case -3:\n      break;\n    default:\n      shiftT(159);                  // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shiftT(166);                  // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PairConstructorList();\n      shiftT(163);                  // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_JSONRenameExpr()\n  {\n    eventHandler.startNonterminal(\"JSONRenameExpr\", e0);\n    shift(218);                     // 'rename'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(79);                      // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONRenameExpr\", e0);\n  }\n\n  function try_JSONRenameExpr()\n  {\n    shiftT(218);                    // 'rename'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(79);                     // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"JSONReplaceExpr\", e0);\n    shift(219);                     // 'replace'\n    lookahead1W(82);                // S^WS | '(:' | 'value'\n    shift(261);                     // 'value'\n    lookahead1W(64);                // S^WS | '(:' | 'of'\n    shift(196);                     // 'of'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(270);                     // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONReplaceExpr\", e0);\n  }\n\n  function try_JSONReplaceExpr()\n  {\n    shiftT(219);                    // 'replace'\n    lookahead1W(82);                // S^WS | '(:' | 'value'\n    shiftT(261);                    // 'value'\n    lookahead1W(64);                // S^WS | '(:' | 'of'\n    shiftT(196);                    // 'of'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(270);                    // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONAppendExpr()\n  {\n    eventHandler.startNonterminal(\"JSONAppendExpr\", e0);\n    shift(77);                      // 'append'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(163);                     // 'into'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONAppendExpr\", e0);\n  }\n\n  function try_JSONAppendExpr()\n  {\n    shiftT(77);                     // 'append'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(163);                    // 'into'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CommonContent()\n  {\n    eventHandler.startNonterminal(\"CommonContent\", e0);\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shift(12);                    // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shift(23);                    // CharRef\n      break;\n    case 277:                       // '{{'\n      shift(277);                   // '{{'\n      break;\n    case 283:                       // '}}'\n      shift(283);                   // '}}'\n      break;\n    default:\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CommonContent\", e0);\n  }\n\n  function try_CommonContent()\n  {\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shiftT(12);                   // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shiftT(23);                   // CharRef\n      break;\n    case 277:                       // '{{'\n      shiftT(277);                  // '{{'\n      break;\n    case 283:                       // '}}'\n      shiftT(283);                  // '}}'\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_ContentExpr()\n  {\n    eventHandler.startNonterminal(\"ContentExpr\", e0);\n    parse_StatementsAndExpr();\n    eventHandler.endNonterminal(\"ContentExpr\", e0);\n  }\n\n  function try_ContentExpr()\n  {\n    try_StatementsAndExpr();\n  }\n\n  function parse_CompDocConstructor()\n  {\n    eventHandler.startNonterminal(\"CompDocConstructor\", e0);\n    shift(119);                     // 'document'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompDocConstructor\", e0);\n  }\n\n  function try_CompDocConstructor()\n  {\n    shiftT(119);                    // 'document'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompAttrConstructor()\n  {\n    eventHandler.startNonterminal(\"CompAttrConstructor\", e0);\n    shift(82);                      // 'attribute'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(12, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(276);                   // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompAttrConstructor\", e0);\n  }\n\n  function try_CompAttrConstructor()\n  {\n    shiftT(82);                     // 'attribute'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          memoize(12, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(12, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(276);                  // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shiftT(282);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompPIConstructor()\n  {\n    eventHandler.startNonterminal(\"CompPIConstructor\", e0);\n    shift(216);                     // 'processing-instruction'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(13, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(13, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(276);                   // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompPIConstructor\", e0);\n  }\n\n  function try_CompPIConstructor()\n  {\n    shiftT(216);                    // 'processing-instruction'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_NCName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(13, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          memoize(13, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(13, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(276);                  // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shiftT(282);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"CompCommentConstructor\", e0);\n    shift(96);                      // 'comment'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompCommentConstructor\", e0);\n  }\n\n  function try_CompCommentConstructor()\n  {\n    shiftT(96);                     // 'comment'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompTextConstructor()\n  {\n    eventHandler.startNonterminal(\"CompTextConstructor\", e0);\n    shift(244);                     // 'text'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompTextConstructor\", e0);\n  }\n\n  function try_CompTextConstructor()\n  {\n    shiftT(244);                    // 'text'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_PrimaryExpr()\n  {\n    eventHandler.startNonterminal(\"PrimaryExpr\", e0);\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      lookahead2W(255);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 216:                       // 'processing-instruction'\n      lookahead2W(253);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 82:                        // 'attribute'\n    case 121:                       // 'element'\n      lookahead2W(258);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 96:                        // 'comment'\n    case 244:                       // 'text'\n      lookahead2W(93);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 256:                       // 'unordered'\n      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 93:                        // 'child'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 186:                       // 'ne'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 228:                       // 'score'\n    case 229:                       // 'self'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 36116                 // '{' 'after'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39700                 // '{' 'append'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40724                 // '{' 'as'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60692                 // '{' 'div'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74516                 // '{' 'function'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 76052                 // '{' 'group'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78612                 // '{' 'import'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83732                 // '{' 'into'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101652                // '{' 'only'\n     || lk == 102164                // '{' 'option'\n     || lk == 102676                // '{' 'or'\n     || lk == 103188                // '{' 'order'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112916                // '{' 'return'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 117012                // '{' 'score'\n     || lk == 117524                // '{' 'self'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120596                // '{' 'some'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121620                // '{' 'start'\n     || lk == 123156                // '{' 'strict'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124692                // '{' 'switch'\n     || lk == 125204                // '{' 'text'\n     || lk == 127252                // '{' 'to'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128276                // '{' 'try'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129300                // '{' 'type'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130324                // '{' 'union'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133908                // '{' 'value'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134932                // '{' 'version'\n     || lk == 136468                // '{' 'where'\n     || lk == 136980                // '{' 'while'\n     || lk == 138516                // '{' 'with'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(14, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_BlockExpr();\n          lk = -10;\n        }\n        catch (p10A)\n        {\n          lk = -11;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(14, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n      parse_Literal();\n      break;\n    case 31:                        // '$'\n      parse_VarRef();\n      break;\n    case 34:                        // '('\n      parse_ParenthesizedExpr();\n      break;\n    case 44:                        // '.'\n      parse_ContextItemExpr();\n      break;\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n      parse_FunctionCall();\n      break;\n    case 141514:                    // 'ordered' '{'\n      parse_OrderedExpr();\n      break;\n    case 141568:                    // 'unordered' '{'\n      parse_UnorderedExpr();\n      break;\n    case 32:                        // '%'\n    case 78:                        // 'array'\n    case 120:                       // 'document-node'\n    case 124:                       // 'empty-sequence'\n    case 145:                       // 'function'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15014:                     // 'json' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15034:                     // 'ne' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n      parse_FunctionItemExpr();\n      break;\n    case -10:\n    case 27412:                     // '{' ';'\n      parse_BlockExpr();\n      break;\n    case -11:\n      parse_ObjectConstructor();\n      break;\n    case 68:                        // '['\n      parse_ArrayConstructor();\n      break;\n    case 278:                       // '{|'\n      parse_JSONSimpleObjectUnion();\n      break;\n    default:\n      parse_Constructor();\n    }\n    eventHandler.endNonterminal(\"PrimaryExpr\", e0);\n  }\n\n  function try_PrimaryExpr()\n  {\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      lookahead2W(255);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 216:                       // 'processing-instruction'\n      lookahead2W(253);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 82:                        // 'attribute'\n    case 121:                       // 'element'\n      lookahead2W(258);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 96:                        // 'comment'\n    case 244:                       // 'text'\n      lookahead2W(93);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 256:                       // 'unordered'\n      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 93:                        // 'child'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 186:                       // 'ne'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 228:                       // 'score'\n    case 229:                       // 'self'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 36116                 // '{' 'after'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39700                 // '{' 'append'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40724                 // '{' 'as'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60692                 // '{' 'div'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74516                 // '{' 'function'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 76052                 // '{' 'group'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78612                 // '{' 'import'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83732                 // '{' 'into'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101652                // '{' 'only'\n     || lk == 102164                // '{' 'option'\n     || lk == 102676                // '{' 'or'\n     || lk == 103188                // '{' 'order'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112916                // '{' 'return'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 117012                // '{' 'score'\n     || lk == 117524                // '{' 'self'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120596                // '{' 'some'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121620                // '{' 'start'\n     || lk == 123156                // '{' 'strict'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124692                // '{' 'switch'\n     || lk == 125204                // '{' 'text'\n     || lk == 127252                // '{' 'to'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128276                // '{' 'try'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129300                // '{' 'type'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130324                // '{' 'union'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133908                // '{' 'value'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134932                // '{' 'version'\n     || lk == 136468                // '{' 'where'\n     || lk == 136980                // '{' 'while'\n     || lk == 138516                // '{' 'with'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(14, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_BlockExpr();\n          memoize(14, e0A, -10);\n          lk = -14;\n        }\n        catch (p10A)\n        {\n          lk = -11;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(14, e0A, -11);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n      try_Literal();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 34:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 44:                        // '.'\n      try_ContextItemExpr();\n      break;\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n      try_FunctionCall();\n      break;\n    case 141514:                    // 'ordered' '{'\n      try_OrderedExpr();\n      break;\n    case 141568:                    // 'unordered' '{'\n      try_UnorderedExpr();\n      break;\n    case 32:                        // '%'\n    case 78:                        // 'array'\n    case 120:                       // 'document-node'\n    case 124:                       // 'empty-sequence'\n    case 145:                       // 'function'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15014:                     // 'json' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15034:                     // 'ne' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n      try_FunctionItemExpr();\n      break;\n    case -10:\n    case 27412:                     // '{' ';'\n      try_BlockExpr();\n      break;\n    case -11:\n      try_ObjectConstructor();\n      break;\n    case 68:                        // '['\n      try_ArrayConstructor();\n      break;\n    case 278:                       // '{|'\n      try_JSONSimpleObjectUnion();\n      break;\n    case -14:\n      break;\n    default:\n      try_Constructor();\n    }\n  }\n\n  function parse_JSONSimpleObjectUnion()\n  {\n    eventHandler.startNonterminal(\"JSONSimpleObjectUnion\", e0);\n    shift(278);                     // '{|'\n    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 281)                  // '|}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(281);                     // '|}'\n    eventHandler.endNonterminal(\"JSONSimpleObjectUnion\", e0);\n  }\n\n  function try_JSONSimpleObjectUnion()\n  {\n    shiftT(278);                    // '{|'\n    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 281)                  // '|}'\n    {\n      try_Expr();\n    }\n    shiftT(281);                    // '|}'\n  }\n\n  function parse_ObjectConstructor()\n  {\n    eventHandler.startNonterminal(\"ObjectConstructor\", e0);\n    shift(276);                     // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_PairConstructorList();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ObjectConstructor\", e0);\n  }\n\n  function try_ObjectConstructor()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      try_PairConstructorList();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_PairConstructorList()\n  {\n    eventHandler.startNonterminal(\"PairConstructorList\", e0);\n    parse_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PairConstructor();\n    }\n    eventHandler.endNonterminal(\"PairConstructorList\", e0);\n  }\n\n  function try_PairConstructorList()\n  {\n    try_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PairConstructor();\n    }\n  }\n\n  function parse_PairConstructor()\n  {\n    eventHandler.startNonterminal(\"PairConstructor\", e0);\n    parse_ExprSingle();\n    shift(49);                      // ':'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"PairConstructor\", e0);\n  }\n\n  function try_PairConstructor()\n  {\n    try_ExprSingle();\n    shiftT(49);                     // ':'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_ArrayConstructor()\n  {\n    eventHandler.startNonterminal(\"ArrayConstructor\", e0);\n    shift(68);                      // '['\n    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 69)                   // ']'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(69);                      // ']'\n    eventHandler.endNonterminal(\"ArrayConstructor\", e0);\n  }\n\n  function try_ArrayConstructor()\n  {\n    shiftT(68);                     // '['\n    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 69)                   // ']'\n    {\n      try_Expr();\n    }\n    shiftT(69);                     // ']'\n  }\n\n  function parse_BlockExpr()\n  {\n    eventHandler.startNonterminal(\"BlockExpr\", e0);\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_StatementsAndOptionalExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"BlockExpr\", e0);\n  }\n\n  function try_BlockExpr()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_StatementsAndOptionalExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FunctionDecl()\n  {\n    eventHandler.startNonterminal(\"FunctionDecl\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(37);                      // ')'\n    lookahead1W(148);               // S^WS | '(:' | 'as' | 'external' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_ReturnType();\n    }\n    lookahead1W(118);               // S^WS | '(:' | 'external' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_StatementsAndOptionalExpr();\n      shift(282);                   // '}'\n      break;\n    default:\n      shift(133);                   // 'external'\n    }\n    eventHandler.endNonterminal(\"FunctionDecl\", e0);\n  }\n\n  function parse_ReturnType()\n  {\n    eventHandler.startNonterminal(\"ReturnType\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"ReturnType\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryParser.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function shiftT(t)\n  {\n    if (l1 == t)\n    {\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function skip(code)\n  {\n    var b0W = b0; var e0W = e0; var l1W = l1;\n    var b1W = b1; var e1W = e1;\n\n    l1 = code; b1 = begin; e1 = end;\n    l2 = 0;\n\n    try_Whitespace();\n\n    b0 = b0W; e0 = e0W; l1 = l1W; if (l1 != 0) {\n    b1 = b1W; e1 = e1W; }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      eventHandler.whitespace(e0, b1);\n      e0 = b1;\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 22)               // S^WS\n      {\n        if (code != 36)             // '(:'\n        {\n          break;\n        }\n        skip(code);\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2W(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = matchW(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = match(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function error(b, e, s, l, t)\n  {\n    if (e >= ex)\n    {\n      bx = b;\n      ex = e;\n      sx = s;\n      lx = l;\n      tx = t;\n    }\n    throw new self.ParseException(bx, ex, sx, lx, tx);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var l2, b2, e2;\n  var bx, ex, sx, lx, tx;\n  var eventHandler;\n  var memo;\n\n  function memoize(i, e, v)\n  {\n    memo[(e << 4) + i] = v;\n  }\n\n  function memoized(i, e)\n  {\n    var v = memo[(e << 4) + i];\n    return typeof v != \"undefined\" ? v : 0;\n  }\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryParser.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryParser.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryParser.MAP1[(c0 & 15) + XQueryParser.MAP1[(c1 & 31) + XQueryParser.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryParser.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryParser.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryParser.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryParser.TRANSITION[(i0 & 15) + XQueryParser.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryParser.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : XQueryParser.INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 284; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 3612 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryParser.EXPECTED[(i0 & 3) + XQueryParser.EXPECTED[(i1 & 3) + XQueryParser.EXPECTED[(i2 & 15) + XQueryParser.EXPECTED[i2 >> 4]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryParser.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryParser.MAP0 =\n[ 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 38, 30, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 38, 38\n];\n\nXQueryParser.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 355, 371, 387, 423, 423, 423, 415, 339, 331, 339, 331, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 440, 440, 440, 440, 440, 440, 440, 324, 339, 339, 339, 339, 339, 339, 339, 339, 401, 423, 423, 424, 422, 423, 423, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 38, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 38, 30, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 30, 30, 38, 38, 38, 38, 38, 38, 38, 69, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69\n];\n\nXQueryParser.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 38, 30, 38, 30, 30, 38\n];\n\nXQueryParser.INITIAL =\n[ 1, 12290, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286\n];\n\nXQueryParser.TRANSITION =\n[ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25307, 18176, 18180, 18180, 18180, 18210, 18180, 18180, 18180, 18180, 18222, 18180, 18180, 18180, 18180, 18198, 18180, 18182, 18238, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38623, 20771, 20784, 20796, 20808, 43870, 38625, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 28718, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19553, 19028, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22954, 20869, 38672, 38672, 38672, 37958, 38672, 38672, 36976, 20909, 20888, 38672, 38672, 38672, 38672, 39926, 20282, 20925, 20958, 38672, 38672, 38672, 43215, 38672, 38672, 25928, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 20997, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 21013, 21118, 38672, 38672, 38672, 24651, 38672, 38672, 44696, 38672, 42922, 38824, 21095, 21058, 21048, 21080, 21111, 48022, 20832, 38672, 38672, 38672, 43215, 21139, 38672, 25530, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 21157, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 18776, 18792, 20360, 18810, 18830, 18835, 19257, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38666, 38672, 38672, 38672, 21880, 38671, 38672, 36460, 38672, 21173, 38661, 21224, 38672, 21231, 38672, 42738, 42750, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 21247, 38672, 38672, 38672, 28875, 38672, 38672, 21266, 38672, 38672, 21288, 21300, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 31059, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 21316, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 18988, 50434, 18503, 18525, 21353, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 24749, 21390, 38672, 38672, 38672, 23220, 38672, 38672, 49687, 45814, 21411, 38672, 38672, 38672, 38672, 41859, 18366, 21448, 21478, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 21515, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 46185, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 21462, 21573, 21537, 21537, 21537, 21580, 21532, 21537, 21542, 21615, 21558, 21644, 21596, 21609, 21631, 21657, 21669, 21681, 20832, 38672, 38672, 38672, 21337, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 21697, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 30462, 38672, 38672, 38672, 22025, 23251, 38672, 22249, 23257, 42922, 30462, 38672, 21719, 21725, 21741, 21766, 21750, 21795, 38672, 38672, 38672, 46035, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 30475, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 24785, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 37115, 50393, 21856, 21832, 21850, 21834, 21872, 21896, 21908, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 21924, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 37301, 25812, 27394, 21985, 22003, 21985, 22017, 27392, 21987, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 42072, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 20981, 38672, 38672, 38672, 30470, 24643, 38672, 48413, 22054, 26165, 22041, 22070, 22074, 22074, 22090, 20979, 48442, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22114, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 47221, 22137, 22155, 22137, 22169, 47219, 22139, 22193, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 22230, 38672, 22247, 38672, 29641, 22265, 42072, 33771, 38672, 38672, 38672, 38672, 26929, 22475, 35267, 22475, 22475, 36544, 42277, 22411, 22411, 33858, 26727, 37227, 26727, 26727, 35540, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 18609, 24891, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 21432, 38031, 38672, 38672, 38672, 38672, 38672, 22291, 38672, 26931, 22311, 22475, 22475, 22475, 22475, 33849, 22352, 22411, 35447, 22411, 22411, 33324, 22381, 26727, 45449, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 30028, 38672, 38672, 22475, 36607, 22475, 22475, 28015, 33854, 22411, 22410, 22411, 22411, 27851, 26727, 45441, 26727, 26727, 22521, 33795, 38672, 38672, 22807, 38672, 38672, 28255, 22475, 22475, 38505, 29442, 22411, 22411, 34626, 26485, 26727, 26727, 26860, 26998, 22647, 38672, 38672, 22428, 26931, 48359, 22475, 42142, 32794, 22411, 28347, 37402, 26727, 22521, 32486, 38672, 18915, 38672, 22451, 22474, 36860, 37042, 22411, 22492, 22517, 22520, 26312, 34036, 26929, 42625, 42144, 35207, 26975, 22537, 26310, 35759, 22589, 36765, 22624, 22640, 22663, 22685, 22706, 39617, 42139, 28345, 26456, 39814, 47009, 22727, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 23092, 42922, 38672, 38672, 38672, 38672, 38672, 31140, 31152, 22751, 38672, 38672, 38672, 43215, 38672, 38672, 26131, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 27937, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 40144, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 18609, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 22803, 38672, 38672, 38672, 22886, 38672, 38672, 38672, 38672, 42922, 36439, 22823, 22844, 22866, 22878, 36438, 22828, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 41329, 38672, 22902, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 22923, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 23115, 42922, 38672, 38672, 38672, 38672, 38672, 26339, 22940, 22970, 38672, 38672, 38672, 43215, 38672, 38672, 23007, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 47631, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 48650, 23029, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 42723, 23085, 38672, 38672, 38672, 38672, 38672, 23048, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 23072, 23108, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 46833, 22411, 22411, 22411, 22411, 22411, 47864, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 43252, 33854, 22411, 22411, 22411, 22411, 48185, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 18878, 38672, 38672, 38672, 35592, 32963, 38672, 38672, 23153, 42922, 37950, 35335, 23190, 23196, 23212, 38672, 41919, 23236, 23274, 38672, 38672, 45078, 23291, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 25157, 23483, 23350, 24209, 23309, 45351, 38672, 18269, 42564, 28228, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19821, 23376, 23336, 23369, 23392, 24203, 23434, 23465, 24172, 23726, 19833, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 18729, 23481, 23642, 24581, 23499, 23504, 24048, 23353, 23520, 23933, 23353, 24164, 23917, 24518, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 23536, 23854, 23815, 23561, 23577, 23632, 24450, 24255, 23689, 23658, 23674, 23716, 23742, 24268, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 23773, 23804, 23842, 24040, 23870, 23886, 23449, 23700, 23902, 23320, 23949, 23992, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 24027, 23545, 23592, 24064, 24137, 24459, 24094, 24110, 23407, 20069, 47383, 20010, 46515, 35979, 20039, 20679, 24126, 24567, 24482, 24153, 24188, 23616, 24225, 20191, 20207, 20223, 20259, 20298, 20337, 24284, 24078, 24374, 24300, 24330, 24314, 23418, 20424, 20452, 20468, 24361, 23826, 23606, 24390, 24419, 20532, 24435, 24475, 24498, 24628, 20608, 23750, 23928, 24403, 20644, 23757, 24508, 20660, 20054, 24345, 20695, 24537, 24597, 24613, 24552, 23788, 24240, 23964, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 39906, 38672, 38672, 38672, 30470, 24672, 38672, 38672, 24667, 26611, 24688, 24695, 24695, 24695, 24711, 26910, 24735, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 24765, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 20739, 24828, 48943, 18855, 18871, 18894, 40258, 24858, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19087, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 24876, 24922, 24938, 19905, 19631, 19046, 24954, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 24970, 18446, 19976, 19994, 19525, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 21250, 35576, 24999, 24999, 24999, 35584, 31668, 31680, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 25271, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 19887, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 50381, 27744, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 40452, 25015, 25015, 25015, 25023, 27746, 40454, 20832, 25047, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 25065, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 20310, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 50286, 50295, 38672, 38672, 38672, 23056, 38672, 38672, 38672, 38672, 42922, 44048, 25088, 25088, 25088, 25096, 46630, 44050, 25120, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 18699, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 25136, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 25152, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25173, 38672, 38672, 38672, 38672, 30470, 25218, 38672, 38672, 21395, 32346, 38672, 38672, 38672, 25210, 25237, 21393, 25221, 25256, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 22214, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19206, 20349, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 41563, 25293, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 34976, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 25437, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 30057, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 25455, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 40102, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 49130, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25482, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25500, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38220, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 25563, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 28464, 25582, 25594, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 21426, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25610, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 44752, 25631, 25649, 25671, 25683, 44753, 25633, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 35735, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 25717, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 31997, 38672, 25754, 25760, 25776, 23293, 41839, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 25800, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 25828, 20548, 20592, 20589, 50171, 25844, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 25049, 38672, 38672, 38672, 22098, 25865, 25896, 25377, 25881, 25913, 30410, 30418, 25964, 25978, 25990, 26006, 26018, 25344, 45647, 38672, 26034, 48091, 26052, 33210, 26086, 26116, 26153, 26223, 35321, 26181, 25701, 26211, 26248, 26264, 43583, 44602, 26280, 26296, 26329, 38672, 38672, 38672, 30176, 26355, 38925, 41958, 22850, 24803, 38672, 44654, 30480, 22475, 22475, 22475, 36601, 25393, 22411, 22411, 43601, 22690, 26727, 26727, 26727, 39641, 30990, 39463, 38672, 43148, 28319, 38672, 29724, 26374, 19326, 38672, 38672, 32428, 40296, 38574, 45608, 22475, 22475, 26394, 26439, 26475, 26509, 22411, 37859, 28780, 26529, 38451, 26727, 26727, 43300, 45056, 22573, 30349, 25414, 26545, 38672, 26563, 38672, 40287, 48411, 38672, 26599, 35364, 28653, 26627, 31403, 45616, 49789, 33849, 44356, 22411, 30609, 28411, 41138, 33324, 35718, 26727, 47625, 44193, 29223, 41749, 42781, 38094, 28940, 38672, 21816, 21032, 26644, 38672, 47420, 26664, 22475, 41307, 22336, 31195, 39296, 22411, 22411, 26685, 31454, 47988, 26726, 26727, 30787, 32911, 36940, 26744, 38697, 46064, 38672, 26779, 26799, 26821, 22787, 22475, 23131, 26837, 37515, 22411, 36778, 26853, 26876, 26727, 33519, 46887, 26926, 38672, 38672, 26931, 37355, 35081, 26947, 38899, 38878, 26969, 48550, 26727, 26994, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 38555, 27014, 22600, 47761, 48246, 27057, 27076, 27094, 27113, 28343, 26456, 27133, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 27153, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 39378, 27172, 38672, 27196, 27202, 27218, 27234, 27246, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 27262, 42259, 26453, 27284, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 46100, 48405, 27326, 25277, 38672, 38672, 28258, 22475, 22475, 22475, 37137, 27346, 22411, 22411, 22411, 22411, 39760, 37334, 26727, 26727, 26727, 26727, 27410, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 27435, 38672, 38672, 33108, 38672, 49441, 22475, 22475, 22475, 38002, 42895, 22411, 22411, 22411, 22411, 27454, 27481, 26727, 26727, 26727, 43058, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 46997, 37168, 35831, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 27504, 38672, 38672, 22098, 38672, 27541, 38672, 27559, 23976, 27578, 27586, 27602, 27617, 27629, 27645, 27657, 25344, 38672, 38672, 27676, 44992, 38672, 22924, 38672, 38672, 38672, 38672, 38672, 38672, 27673, 50511, 27692, 47251, 26513, 26453, 41246, 27710, 25375, 29768, 38672, 38672, 32334, 38672, 27740, 38672, 27762, 27784, 38672, 25948, 27789, 27805, 27821, 22475, 22475, 27840, 27878, 22411, 22411, 22690, 27915, 27931, 26727, 26727, 30990, 39463, 44557, 38672, 38672, 44934, 38672, 38225, 48405, 33126, 27953, 38672, 38672, 27694, 47073, 35424, 37245, 22475, 35786, 48497, 47338, 42686, 30280, 22411, 37334, 37394, 27977, 27995, 43743, 26727, 32919, 30349, 25414, 38672, 38672, 24003, 38672, 30096, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 28013, 28031, 33849, 22411, 22411, 22411, 28053, 28070, 33324, 26727, 26727, 26727, 28092, 28109, 32918, 41804, 28131, 38672, 38672, 49206, 38672, 28149, 38672, 22475, 22475, 22475, 22780, 33754, 33854, 22411, 22411, 42031, 22411, 31454, 26727, 26727, 26727, 28171, 22521, 33795, 38672, 38672, 31346, 38672, 46687, 21493, 22475, 28191, 22475, 23131, 22411, 30274, 22411, 36778, 26727, 35228, 26727, 31599, 28213, 38672, 38672, 38672, 28250, 28274, 47411, 42142, 28296, 31494, 28347, 36728, 31954, 22521, 26313, 38672, 38672, 28317, 27136, 22475, 28335, 22411, 36897, 26977, 26727, 22564, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 28363, 28379, 28427, 28480, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 28504, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 24521, 38672, 38672, 22098, 38672, 28530, 45484, 38672, 46575, 28549, 28557, 28573, 28587, 28595, 28611, 28623, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 19750, 26547, 38672, 26546, 19755, 28639, 42141, 48492, 27360, 44280, 27268, 25375, 29257, 27180, 28679, 29641, 21703, 38672, 25730, 38672, 38083, 42329, 28697, 28734, 27137, 27824, 36531, 43498, 28750, 22608, 46434, 28774, 46408, 28796, 28814, 28833, 26727, 28849, 39463, 38672, 38672, 38672, 25738, 38672, 29761, 48405, 38672, 38672, 38672, 19698, 28258, 22475, 22475, 22475, 27023, 35786, 22411, 22411, 22411, 22411, 28891, 37334, 26727, 26727, 26727, 26727, 28912, 43066, 28929, 28956, 38672, 38672, 33876, 38672, 28992, 48411, 38672, 38672, 29009, 29030, 27032, 22475, 22475, 22669, 33849, 29109, 45393, 22411, 22411, 32729, 33324, 29133, 37067, 26727, 26727, 34717, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 29157, 38672, 29181, 22475, 22475, 29202, 33754, 43112, 22411, 22411, 32083, 22411, 34472, 29222, 26727, 26727, 29239, 22521, 33795, 38672, 29256, 29273, 38672, 29294, 28255, 32383, 27117, 29315, 23131, 44876, 34578, 42252, 36778, 44915, 26727, 29337, 26998, 46887, 21810, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 29370, 38672, 27136, 22475, 29387, 22411, 41041, 26977, 26727, 43751, 26312, 34036, 26929, 22475, 42144, 22411, 29411, 29240, 26310, 35759, 22476, 22411, 26978, 48196, 29430, 26953, 38544, 39617, 34809, 33567, 37775, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38673, 29464, 38672, 22098, 22435, 29483, 38672, 29506, 26195, 29530, 29540, 29556, 29570, 29582, 29598, 29610, 25344, 38672, 29626, 25072, 29668, 50094, 29711, 40102, 40331, 29748, 21064, 29784, 29812, 29843, 29873, 29903, 29919, 29957, 26423, 29973, 30010, 25375, 30044, 30091, 38782, 30112, 30134, 26137, 30161, 38672, 38672, 26583, 38672, 26929, 39099, 30212, 36878, 44806, 30228, 43650, 28758, 46842, 30244, 46765, 30296, 30317, 30336, 30384, 39463, 20089, 31354, 30434, 38799, 41183, 30450, 30496, 38672, 30542, 30564, 29278, 30580, 39823, 30631, 28663, 42103, 30647, 30685, 30712, 30766, 30811, 30837, 34161, 30878, 30901, 34681, 30930, 30980, 31006, 31022, 25414, 31049, 38672, 18321, 49090, 31075, 31094, 31128, 34195, 32584, 46802, 31168, 22475, 33645, 42347, 31190, 47486, 31211, 22411, 47598, 49959, 31232, 32841, 31257, 26727, 39569, 42011, 31278, 31335, 49499, 35851, 39273, 31370, 43966, 34186, 21188, 33468, 37601, 29186, 31389, 31426, 42239, 40895, 22411, 31442, 31481, 31454, 31519, 31539, 30795, 31561, 31595, 33795, 38672, 48757, 39401, 38672, 30196, 28255, 39519, 43549, 31615, 23131, 34822, 47675, 31635, 36778, 22546, 47769, 31572, 26998, 46887, 39201, 31656, 18290, 31696, 31734, 31750, 31772, 31808, 31845, 31869, 31903, 37385, 31919, 31970, 26378, 18593, 32021, 48908, 39526, 44237, 32042, 32063, 32099, 48723, 41712, 26312, 41270, 26929, 22475, 32144, 22411, 32167, 44894, 26310, 32185, 46276, 40692, 44326, 31465, 20435, 32208, 32228, 32248, 32274, 32295, 32319, 32362, 32399, 32415, 28257, 28345, 26459, 32457, 32473, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 32509, 38672, 22098, 32530, 32548, 43771, 30190, 32600, 32630, 38672, 32616, 32654, 32662, 32678, 32690, 25344, 38672, 38672, 48277, 43215, 38672, 38672, 38672, 38672, 29732, 38672, 38672, 32706, 29731, 26036, 33631, 42208, 32724, 38438, 44280, 27268, 25375, 21272, 38672, 38672, 31985, 38672, 38672, 38672, 26576, 32745, 36837, 38672, 26929, 32766, 22475, 22475, 22475, 32810, 32857, 22411, 22411, 22690, 27419, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 40108, 38672, 28258, 22475, 22475, 22475, 42113, 35786, 22411, 22411, 22411, 22411, 32877, 37334, 26727, 26727, 26727, 26728, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 32026, 38672, 26931, 22475, 22475, 46869, 22475, 22475, 33849, 22411, 22411, 39678, 22411, 22411, 33324, 26727, 26727, 41099, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 30118, 38672, 22475, 22475, 22475, 42121, 33754, 33854, 22411, 22411, 48685, 22411, 31454, 26727, 26727, 26727, 46758, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 36404, 38672, 38672, 38672, 44299, 22475, 42143, 31823, 22411, 32169, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 27097, 32897, 36362, 47020, 32935, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 25031, 38672, 38672, 43445, 32979, 32987, 33003, 33009, 33025, 33041, 33053, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 29467, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 33069, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 33103, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 33124, 38672, 18284, 28258, 22475, 22475, 22475, 22475, 40837, 22411, 22411, 22411, 22411, 22411, 34394, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 33142, 38672, 33163, 42808, 38672, 42803, 38566, 22475, 22475, 37994, 22475, 22475, 33849, 22411, 22411, 47479, 22411, 22411, 33324, 26727, 26727, 31312, 26727, 26727, 41720, 33181, 38672, 38672, 34958, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 34949, 49071, 38672, 28255, 22475, 22475, 29048, 29442, 22411, 22411, 43834, 26485, 26727, 26727, 49882, 26998, 33184, 33200, 40222, 33234, 22991, 22475, 33277, 33313, 50063, 43479, 33349, 26727, 33377, 32128, 26313, 33405, 26648, 22985, 33423, 33443, 35387, 48797, 34523, 33492, 40922, 33514, 26312, 34036, 46959, 32375, 33535, 33554, 33575, 35236, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 28488, 33591, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 32005, 38672, 38672, 33617, 38672, 38672, 38672, 30064, 38672, 30073, 38672, 30064, 33661, 30069, 38721, 42958, 22411, 33692, 33700, 33716, 25375, 38672, 38672, 25941, 29641, 33732, 20082, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 33752, 25393, 22411, 22411, 23137, 22690, 26727, 26727, 26727, 49362, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25615, 38672, 33770, 28258, 22475, 22475, 22475, 22475, 40491, 22411, 22411, 22411, 22411, 22411, 40736, 26727, 26727, 26727, 26727, 26727, 33787, 33803, 33407, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 33819, 48351, 22475, 22475, 22475, 22475, 33849, 46363, 22411, 22411, 22411, 22411, 33324, 48523, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 48282, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33840, 33854, 22411, 22411, 22411, 28403, 27851, 26727, 26727, 26727, 43360, 22521, 33795, 38672, 38672, 42813, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 33874, 21141, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 33892, 34036, 21208, 22475, 46215, 22411, 33914, 26727, 33935, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 42795, 38672, 22098, 25439, 25194, 32493, 40646, 40656, 38304, 38312, 33959, 33974, 33986, 34002, 34014, 25344, 38672, 38672, 38672, 49261, 33079, 38672, 38672, 23275, 34030, 34052, 38672, 34078, 34127, 34177, 34211, 38408, 34239, 34258, 29354, 34285, 25375, 38672, 38672, 36069, 29641, 38672, 34301, 38672, 38672, 38672, 34327, 24011, 26929, 47957, 34366, 22475, 34410, 34439, 34460, 34488, 32881, 44853, 22711, 39788, 26727, 49664, 34508, 39463, 38672, 28969, 45656, 28681, 19706, 18253, 38672, 26070, 26232, 47650, 46594, 28258, 42618, 22475, 45107, 34547, 44588, 22411, 34575, 22411, 34594, 34618, 34642, 27997, 26727, 35481, 34668, 34697, 32919, 33803, 38672, 38672, 38672, 44387, 34733, 34759, 38672, 38672, 38672, 26931, 34796, 22475, 22475, 22475, 34845, 34862, 31216, 22411, 22411, 37262, 22411, 34878, 31262, 26727, 26727, 28913, 26727, 34894, 33802, 38672, 34931, 35005, 30145, 35033, 35049, 30548, 35079, 26669, 35097, 35117, 35142, 44418, 22411, 35167, 35192, 43624, 31718, 26727, 43013, 39321, 47169, 35252, 30750, 31033, 38672, 35289, 35307, 35357, 32192, 22475, 35380, 35403, 34559, 22411, 35440, 35463, 30821, 35479, 35497, 35530, 35556, 35608, 38672, 38672, 24906, 47811, 35630, 37839, 28037, 35670, 48379, 27078, 35705, 48704, 22521, 26313, 33898, 38672, 35734, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 28514, 35751, 26929, 35782, 35802, 36916, 32303, 49941, 26310, 49171, 22476, 22411, 26978, 48196, 35867, 35883, 35899, 35915, 42139, 28345, 26456, 28257, 28343, 26456, 35951, 36348, 35941, 33538, 36362, 36357, 34905, 35967, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 33252, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 20573, 33260, 46302, 45557, 36019, 36031, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 34780, 22475, 25393, 22411, 22411, 36047, 22690, 26727, 26727, 36130, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 20243, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 36066, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 45849, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 36085, 22475, 22475, 22475, 22475, 33849, 36106, 22411, 22411, 22411, 22411, 33324, 36126, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 19729, 38672, 22098, 38672, 39473, 38672, 44217, 36146, 36184, 36196, 36212, 36218, 36234, 36250, 36262, 25344, 38672, 36278, 38672, 43215, 38672, 25421, 18575, 38672, 27438, 38672, 38672, 46139, 36299, 48111, 34141, 26409, 36335, 39145, 44169, 36378, 36420, 36455, 38672, 29371, 36476, 38672, 27543, 38672, 36498, 35844, 31373, 34743, 36516, 40527, 36565, 29321, 36586, 36623, 36646, 22411, 36676, 29093, 36714, 29346, 28817, 43388, 36750, 36802, 37724, 36836, 38672, 38672, 38672, 26061, 38672, 38672, 38672, 38672, 38672, 28258, 36853, 42951, 22475, 36876, 38513, 34492, 36894, 36913, 40984, 22411, 43282, 35514, 28798, 26727, 43717, 26727, 36932, 33803, 38672, 38672, 36956, 38672, 38672, 18909, 32575, 38672, 38672, 26931, 22475, 22475, 41976, 35273, 36992, 33849, 22411, 22411, 45307, 44424, 37025, 33324, 26727, 26727, 40875, 39885, 37058, 32918, 33802, 34967, 38672, 38672, 32750, 38672, 38672, 38672, 22475, 38401, 22475, 22475, 28015, 33854, 34444, 22411, 22411, 22411, 27851, 26727, 37091, 26727, 26727, 22521, 33795, 37110, 34940, 38672, 46173, 45770, 29014, 37131, 22475, 22475, 37153, 29988, 22411, 22411, 37195, 37219, 26727, 26727, 36392, 46887, 38346, 38672, 39265, 26931, 22475, 37243, 42142, 22411, 37261, 28347, 26727, 37278, 22521, 26313, 38672, 37296, 38672, 27136, 22475, 37317, 22411, 48861, 26977, 26727, 48595, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 35925, 29395, 39608, 37350, 37371, 26459, 33538, 37783, 48331, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 41939, 38672, 22098, 38672, 25566, 38672, 38672, 29887, 39046, 39054, 37418, 37432, 37440, 37456, 37468, 25500, 38672, 37493, 38672, 43215, 38672, 28533, 38672, 38672, 27562, 38672, 38672, 37494, 37484, 23258, 20853, 42141, 37510, 47612, 44280, 27268, 25375, 38672, 29490, 38672, 29641, 38672, 37531, 37550, 38672, 38672, 38672, 37570, 27517, 39732, 22475, 40520, 37590, 25393, 37627, 22412, 37898, 37646, 31523, 26727, 48530, 31241, 31792, 37683, 37699, 24812, 38672, 37723, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 37740, 22475, 37799, 22475, 35786, 45030, 31853, 36110, 22411, 22411, 37334, 31545, 34712, 40790, 26727, 26727, 32919, 33803, 38672, 21024, 48965, 38672, 38672, 33943, 28155, 37816, 38672, 26931, 46335, 37834, 22475, 27041, 22475, 34377, 49011, 37855, 22411, 33297, 22411, 27890, 39339, 37875, 26727, 27899, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 48203, 38672, 38672, 38672, 26931, 29057, 22475, 42142, 32786, 22411, 28347, 22555, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 37895, 26977, 49110, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 37914, 31619, 41895, 26978, 37938, 37974, 41757, 45432, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 36549, 37075, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 25240, 38672, 24719, 38672, 46651, 38018, 25104, 38054, 38118, 38157, 38142, 38161, 38126, 38177, 38189, 25344, 38672, 45759, 49561, 49547, 38205, 49199, 38672, 38241, 38259, 34062, 38289, 38328, 38371, 38273, 38387, 38424, 38467, 39556, 38529, 27268, 25375, 40213, 38672, 38672, 38590, 21779, 38672, 38614, 38641, 21123, 43234, 38689, 38713, 41522, 39725, 26628, 22475, 25393, 38737, 22411, 29117, 22690, 32232, 31319, 26727, 38753, 34652, 38772, 35341, 38672, 38798, 38815, 38672, 38672, 40618, 38672, 38672, 38672, 38840, 33601, 40485, 22475, 38858, 22475, 35786, 47683, 38876, 40856, 22411, 22411, 37334, 32114, 26727, 42187, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 24776, 38672, 36500, 33087, 26755, 48300, 22475, 22475, 22475, 46796, 41600, 49410, 22411, 22411, 22411, 38894, 29994, 47730, 26727, 26727, 26727, 46465, 44085, 32918, 33802, 38915, 38949, 38972, 38992, 38672, 39015, 39031, 44824, 39070, 29039, 39086, 28015, 33854, 39115, 39131, 22365, 39171, 27851, 40395, 48234, 48581, 49654, 22521, 39190, 33147, 39225, 26763, 39254, 38337, 41515, 31410, 48668, 36570, 39289, 44624, 49920, 36050, 39312, 46490, 26727, 39337, 39355, 46887, 39394, 38672, 20942, 22766, 22475, 39417, 21499, 22411, 39448, 25398, 26727, 39489, 22521, 47568, 38672, 38672, 46680, 45512, 39505, 42143, 39542, 32076, 39585, 39633, 39657, 35567, 35614, 26929, 29075, 42144, 39674, 26975, 39694, 26310, 35759, 35126, 47451, 29414, 27465, 39712, 39748, 39776, 39804, 46246, 41657, 47873, 28257, 28343, 26456, 28257, 28345, 26459, 39839, 39865, 36357, 34905, 30398, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 39901, 22098, 38672, 30368, 39922, 38672, 45211, 39942, 39950, 39966, 39980, 39988, 40004, 40016, 25344, 35063, 40032, 40048, 40074, 25784, 40124, 38672, 40160, 20023, 50351, 40199, 40238, 40274, 40312, 49237, 40347, 40363, 36660, 40411, 40427, 25375, 38672, 40443, 18661, 36161, 37534, 38672, 18669, 43864, 38672, 38672, 44690, 26929, 22475, 37009, 40470, 40507, 25393, 22411, 40543, 31503, 45950, 26727, 47993, 40578, 40601, 30990, 39463, 38672, 44715, 38672, 38672, 40617, 29165, 40634, 41441, 21201, 19353, 22907, 40672, 45368, 47429, 22475, 22475, 40708, 37034, 28896, 40724, 22411, 47891, 41633, 40762, 35506, 40782, 26727, 47175, 32919, 22394, 40806, 38672, 38654, 32566, 38672, 38672, 38672, 38672, 48740, 26931, 22475, 38860, 22475, 40833, 22475, 33849, 22411, 41060, 22411, 40853, 22411, 33324, 26727, 38756, 26727, 40872, 26727, 32918, 33802, 38672, 38672, 20973, 45998, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 22458, 40891, 22411, 22411, 22411, 22411, 40911, 26727, 26727, 26727, 26727, 22501, 33795, 23174, 18332, 38672, 38672, 38672, 40938, 22475, 40962, 22475, 40684, 22411, 40981, 22411, 31782, 26727, 49841, 26727, 26998, 28442, 38672, 38672, 38672, 26931, 41000, 41019, 42142, 41039, 41057, 28347, 41076, 41095, 22521, 44039, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 34915, 34036, 27330, 41115, 29084, 41137, 35817, 26727, 27724, 35759, 41154, 41218, 41701, 41262, 41286, 47258, 44155, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 28115, 33538, 27862, 36357, 34905, 46290, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 26904, 22098, 38672, 38672, 41323, 22275, 41345, 40139, 38672, 26358, 41381, 41394, 41410, 41422, 25344, 38672, 38672, 45842, 43215, 38672, 38672, 38672, 41438, 50256, 38672, 22231, 41440, 45848, 38672, 34773, 41457, 34829, 39879, 41487, 27268, 25375, 38102, 38672, 38672, 29641, 38672, 41538, 41554, 33261, 38672, 38672, 36430, 26929, 41579, 35101, 34846, 45533, 41616, 41649, 40556, 45401, 41673, 41736, 41773, 26727, 41789, 40746, 42656, 41831, 38672, 41855, 41875, 32532, 32708, 46542, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 41594, 22475, 35786, 22411, 22411, 22411, 41893, 22411, 37334, 26727, 26727, 37094, 26727, 26727, 32919, 27373, 41911, 29299, 38672, 38672, 38672, 41935, 25466, 38672, 41955, 26931, 22475, 41121, 41974, 22475, 22475, 34152, 22411, 46370, 41992, 22411, 22411, 30778, 26727, 31887, 42009, 26727, 26727, 32918, 33802, 38243, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 48461, 22475, 28015, 42027, 22411, 22411, 42047, 22411, 37764, 26727, 26727, 48819, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 22208, 38672, 18340, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 28175, 42067, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 30944, 42088, 42137, 42160, 42180, 48196, 42203, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 31078, 38672, 38672, 32435, 32438, 32441, 42224, 25897, 46967, 28280, 42275, 42293, 31579, 27268, 42319, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 46624, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 41023, 22411, 22411, 22411, 22411, 22411, 42864, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 42345, 42143, 29941, 22411, 26977, 42363, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 44743, 22177, 38672, 38672, 27385, 38672, 45876, 42383, 22121, 42412, 42425, 42433, 42449, 42461, 25344, 38672, 32955, 42527, 43215, 18706, 42477, 42499, 33244, 42519, 38672, 42543, 40174, 42559, 42580, 42605, 42641, 42672, 40377, 42708, 42766, 25375, 38672, 38672, 38672, 42829, 42880, 42911, 43973, 27961, 38672, 38672, 23013, 42938, 22475, 42974, 41003, 39432, 42995, 32861, 22411, 36698, 35176, 43029, 43292, 26727, 43049, 43082, 43138, 38672, 38672, 38672, 25328, 43172, 43191, 38672, 43210, 28234, 38672, 43231, 48341, 22475, 43250, 22475, 22325, 43268, 47118, 39174, 22411, 22411, 43316, 43332, 43358, 40585, 26727, 37280, 43376, 43410, 33803, 38672, 38672, 41815, 45184, 39238, 30360, 38672, 43434, 50186, 43461, 43495, 48777, 43514, 43538, 22475, 43573, 43599, 31640, 43617, 43640, 22411, 43666, 43692, 49367, 43710, 43733, 26727, 47922, 33802, 43767, 38672, 38672, 43787, 43812, 38672, 43850, 50024, 43886, 43557, 22475, 28015, 33854, 43908, 34242, 22411, 22411, 27851, 46470, 43935, 44079, 26727, 39658, 43953, 38672, 43989, 21331, 38672, 38672, 33824, 22475, 22475, 49385, 34223, 22411, 22411, 22411, 44011, 26727, 26727, 26727, 44027, 46887, 19958, 38672, 38672, 50007, 22475, 22475, 28197, 22411, 22411, 44066, 26727, 26727, 44101, 26313, 20872, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26890, 47793, 44124, 44140, 44185, 44209, 20435, 28340, 26976, 33389, 44233, 44253, 44277, 44296, 28343, 26456, 28257, 28345, 26459, 44315, 44342, 38482, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 18636, 22098, 44386, 29857, 38069, 44372, 44403, 44440, 44464, 44480, 44494, 44510, 44526, 44538, 25344, 44554, 46908, 38672, 40088, 38672, 38672, 41365, 38672, 43156, 26783, 26781, 47212, 47203, 34311, 44573, 42979, 44618, 41232, 44280, 27268, 44640, 44676, 38672, 44712, 29827, 28456, 38672, 38672, 38672, 44731, 44769, 38672, 40058, 44785, 40965, 44822, 22475, 44840, 44869, 48063, 22411, 22690, 39155, 44892, 44910, 26727, 30990, 39463, 38672, 44931, 38672, 44950, 44971, 38672, 38672, 38672, 38672, 38672, 44987, 28258, 45008, 41301, 22475, 22475, 37611, 28054, 22411, 45028, 22411, 22411, 45046, 30301, 30320, 26727, 26727, 28093, 30742, 33803, 38672, 38672, 45072, 32638, 30075, 38672, 46548, 37818, 38672, 42396, 22475, 22475, 47037, 45094, 33476, 49452, 22411, 22411, 49585, 32047, 36630, 35654, 26727, 26727, 39696, 33919, 26493, 44108, 45157, 32514, 38672, 49604, 38672, 38672, 38672, 45200, 22475, 22475, 43892, 45227, 28015, 33854, 22411, 41993, 40562, 22411, 27851, 26727, 26727, 32834, 45248, 22521, 33795, 38672, 22295, 45267, 19361, 38672, 28255, 36090, 22475, 45286, 43473, 42051, 22411, 45304, 43005, 43694, 26727, 49877, 26998, 46887, 38672, 50299, 46144, 45323, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 49054, 26313, 45345, 36168, 40817, 45367, 22475, 45384, 22411, 30669, 26977, 26727, 45417, 45465, 36482, 45500, 45528, 32279, 22411, 44261, 26727, 45549, 35759, 34423, 35689, 37179, 48196, 20435, 28340, 26976, 27310, 33427, 47309, 26456, 32258, 46222, 29141, 45599, 45573, 45589, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 42503, 22098, 38672, 38672, 19843, 38672, 45632, 29682, 29695, 45672, 45688, 45703, 45719, 45731, 25344, 25697, 36820, 25484, 43215, 48936, 33218, 45747, 38933, 25691, 45794, 45830, 45905, 45865, 45892, 45921, 30595, 45937, 41471, 45980, 45966, 25375, 45996, 46014, 46030, 34093, 38672, 38672, 46051, 24794, 46090, 46124, 46160, 46201, 46238, 46262, 46318, 46334, 46351, 46386, 26710, 46424, 30615, 39597, 40389, 46450, 46486, 30259, 41502, 46506, 46564, 38672, 46591, 46610, 46646, 38672, 45270, 33165, 46667, 46703, 46719, 46781, 46818, 46866, 45012, 35786, 47344, 42692, 28076, 22411, 34531, 37334, 42303, 43342, 43676, 26727, 37661, 41688, 46885, 38672, 46904, 39209, 44660, 46924, 28976, 46946, 38672, 30957, 20847, 49903, 46983, 47036, 22475, 47053, 33288, 31829, 47089, 22411, 22411, 47105, 35219, 43394, 47140, 26727, 26727, 47156, 32918, 33802, 47191, 38672, 41877, 37707, 38672, 50210, 38598, 47237, 45288, 47274, 47290, 28015, 43827, 47306, 47325, 28394, 29934, 30696, 36786, 37667, 47360, 43033, 22521, 43418, 47376, 50112, 38672, 38355, 49147, 28255, 47399, 22475, 22475, 47445, 47467, 34602, 22411, 47502, 47526, 50046, 26727, 47556, 46887, 36283, 49516, 38672, 48840, 29206, 44799, 47584, 47703, 30662, 30727, 45251, 31880, 34269, 39367, 47647, 38672, 49567, 38494, 40946, 47666, 47699, 47719, 39849, 48630, 47746, 32945, 47785, 47809, 47827, 47850, 47889, 47907, 48880, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 49752, 49772, 47949, 47973, 48009, 48038, 49034, 30862, 33538, 36362, 36357, 47933, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 48079, 38672, 38672, 48107, 38672, 19671, 30510, 30518, 48127, 30518, 30526, 48143, 48155, 25344, 38672, 38672, 38672, 44955, 38672, 29647, 38672, 38672, 38672, 38672, 29652, 46888, 38672, 38672, 45329, 35643, 48171, 30851, 45141, 48219, 48262, 38672, 38672, 38672, 29641, 38672, 38672, 50200, 50208, 38672, 38672, 38672, 48298, 33458, 22475, 22475, 22475, 48316, 48375, 22411, 22411, 28301, 37203, 26727, 26727, 26727, 30914, 41169, 48395, 38672, 34989, 34103, 38672, 38672, 38672, 48429, 38672, 34985, 36969, 28258, 49732, 31174, 47066, 48458, 46734, 22411, 37326, 35682, 48477, 41625, 48513, 26727, 48546, 48566, 33498, 48611, 32919, 33803, 38672, 32557, 38672, 48646, 38672, 38672, 38672, 19786, 38672, 26931, 22475, 48666, 22475, 22475, 22475, 32777, 22411, 48684, 22411, 22411, 22411, 31945, 26727, 48701, 26727, 26727, 26727, 32918, 33361, 38672, 45778, 38672, 38672, 38672, 38672, 41194, 35417, 22475, 22475, 22475, 28015, 42844, 22411, 22411, 22411, 22411, 27851, 48720, 26727, 26727, 26727, 22521, 33795, 48739, 38672, 38672, 48756, 38672, 35766, 48773, 22475, 22475, 45119, 48793, 22411, 42164, 43122, 48813, 26727, 43937, 26998, 46887, 48835, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 43522, 42144, 48856, 26975, 48877, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 20436, 32151, 30885, 28257, 28345, 26459, 33538, 22735, 48896, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 48924, 48962, 36314, 45181, 38672, 50538, 38672, 45169, 48959, 38038, 34111, 48981, 48993, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 27525, 42141, 49009, 31292, 44280, 27268, 25375, 38672, 36812, 40252, 29641, 38672, 38672, 38672, 38672, 43194, 38672, 38672, 26929, 45232, 22475, 37800, 22475, 25393, 49027, 22411, 46850, 22690, 27979, 26727, 26727, 49050, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 49070, 38672, 38672, 49087, 38672, 28258, 22475, 49810, 22475, 22475, 35786, 22411, 22411, 34386, 22411, 22411, 37334, 26727, 26727, 49106, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 49126, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 49146, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 49163, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 49187, 38672, 21516, 38672, 20816, 49222, 49253, 38672, 49277, 49291, 49304, 49320, 49332, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 31934, 32212, 26453, 47540, 49348, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 43175, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 35291, 38672, 38672, 38672, 36319, 22475, 22475, 22475, 22475, 22475, 31707, 22411, 22411, 22411, 22411, 22411, 45130, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38842, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 49383, 22475, 49401, 33854, 22411, 42856, 22411, 47124, 27851, 26727, 41079, 26727, 26727, 49426, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25610, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 41202, 49468, 49480, 25344, 38672, 38672, 38672, 43215, 49496, 38672, 49515, 38672, 38672, 46071, 46074, 38672, 49532, 28993, 37922, 42141, 49583, 32824, 44280, 27268, 25375, 38672, 38672, 46108, 29641, 46524, 46533, 49601, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 49620, 37001, 25393, 22411, 29448, 22411, 49639, 26727, 26727, 48625, 36734, 30990, 43097, 49680, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 49703, 38672, 38672, 26931, 22475, 22475, 49727, 22475, 22475, 48053, 22411, 22411, 49748, 22411, 22411, 46748, 26727, 26727, 49768, 26727, 26727, 32918, 33802, 20903, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 49788, 22475, 22475, 28015, 33854, 26700, 22411, 22411, 22411, 27851, 42367, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 45477, 38672, 38672, 43215, 38672, 38672, 49711, 38672, 38672, 38672, 49707, 38672, 38672, 27156, 49805, 37753, 37630, 26453, 49986, 49826, 25375, 38672, 20236, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 28133, 26929, 22475, 22475, 22475, 47834, 25393, 22411, 22411, 22411, 49862, 26727, 26727, 26727, 37879, 30990, 39463, 38672, 45808, 38672, 38672, 38672, 38672, 38672, 38672, 29514, 38672, 38672, 28258, 49898, 22475, 31756, 22475, 35786, 22411, 49919, 22411, 36688, 22411, 37334, 40766, 26727, 26727, 49936, 26727, 32919, 33803, 38672, 25655, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 37984, 22475, 22475, 22475, 35151, 22411, 46398, 22411, 22411, 22411, 43919, 26727, 31302, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38999, 38672, 22475, 22475, 26805, 22475, 49623, 33854, 22411, 22411, 49957, 22411, 49975, 26727, 26727, 47510, 26727, 49846, 33795, 38672, 38672, 18612, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 30025, 38672, 38672, 50002, 26931, 50023, 22475, 27060, 22411, 22411, 28347, 50040, 26727, 22521, 26313, 38672, 40323, 38672, 27136, 29066, 42143, 22411, 50062, 26977, 27488, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 41360, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 34339, 19585, 19583, 40183, 33676, 50079, 27766, 27768, 50110, 33673, 34350, 50128, 50140, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 25515, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 20613, 18794, 19200, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 18475, 50434, 18503, 18525, 50156, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 20273, 38672, 42922, 31104, 31112, 50226, 50240, 50248, 42483, 50272, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 25547, 38672, 38672, 25544, 18953, 18958, 18794, 35998, 18531, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 42589, 38672, 38672, 38672, 38672, 24842, 35017, 50315, 50319, 50335, 50343, 43995, 50367, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 25359, 38672, 38672, 23171, 38672, 38672, 38672, 23167, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19075, 50434, 18503, 18525, 50409, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38956, 38672, 38672, 29796, 50456, 50460, 50460, 50482, 38955, 50476, 50498, 38672, 38672, 38672, 38672, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 38672, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 18475, 50434, 18503, 18525, 50156, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 50527, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 26100, 20548, 20592, 20589, 50171, 18953, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 94505, 94505, 90408, 90408, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 1, 12290, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 0, 94505, 90408, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 364, 94505, 90408, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 69632, 73728, 94505, 94505, 94505, 94505, 94505, 65536, 94505, 3, 0, 0, 2183168, 0, 0, 0, 90408, 94505, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 1636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1645, 0, 0, 2732032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2904064, 2908160, 0, 0, 0, 0, 0, 1699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2963, 0, 0, 0, 0, 0, 2424832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625536, 0, 0, 0, 0, 0, 2045, 0, 0, 0, 0, 2049, 0, 0, 0, 0, 0, 0, 0, 2711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2976, 0, 534, 534, 534, 534, 534, 2699264, 2715648, 0, 0, 2772992, 2805760, 2830336, 0, 2863104, 2920448, 0, 0, 0, 0, 0, 0, 0, 303, 303, 303, 303, 0, 303, 303, 303, 303, 0, 2805760, 2920448, 0, 0, 0, 0, 0, 2920448, 0, 0, 0, 0, 0, 0, 0, 2732032, 0, 2179072, 2179072, 2179072, 2179072, 2424832, 2433024, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3125248, 2625536, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2699264, 2179072, 2715648, 2179072, 2723840, 2179072, 2732032, 2772992, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2551808, 2125824, 2125824, 2125824, 2125824, 2125824, 2637824, 2125824, 2179072, 2179072, 2805760, 2179072, 2830336, 2179072, 2179072, 2863104, 2179072, 2179072, 2179072, 2179072, 2920448, 2179072, 2179072, 2179072, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 0, 2502656, 0, 0, 3010560, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2699264, 2125824, 2715648, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2805760, 2125824, 2830336, 2125824, 2125824, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1142784, 0, 2179072, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 975, 2125824, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 735, 0, 741, 0, 0, 0, 2789376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3137, 0, 0, 2142208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2733, 0, 2662400, 0, 2813952, 0, 0, 0, 0, 2375680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 351, 352, 0, 0, 0, 0, 2584576, 0, 0, 0, 0, 2838528, 0, 0, 2838528, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 2891776, 0, 0, 0, 0, 0, 2392064, 2412544, 0, 0, 2838528, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2408448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 0, 2126724, 2126724, 2617344, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2662400, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2584576, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2801664, 2813952, 2179072, 2838528, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 1798, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2801664, 2813952, 2125824, 2838528, 2125824, 2813952, 2125824, 2838528, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3125248, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2822144, 0, 0, 2883584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3080192, 3100672, 3104768, 0, 0, 0, 0, 3186688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 2797568, 0, 0, 0, 0, 0, 0, 0, 2850816, 2867200, 0, 0, 2883584, 0, 0, 0, 0, 0, 2072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3134, 0, 0, 0, 0, 2465792, 0, 0, 2719744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3014656, 3207168, 0, 2691072, 0, 0, 3215360, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2461696, 2465792, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2523136, 2179072, 2179072, 2179072, 0, 1342, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2600960, 2179072, 2179072, 2179072, 2179072, 2641920, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 1047, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 2125824, 2125824, 3072000, 2125824, 2125824, 2125824, 3121152, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2179072, 2179072, 2719744, 2179072, 2179072, 2179072, 2179072, 2179072, 2768896, 2777088, 2781184, 2797568, 2822144, 2179072, 2179072, 2179072, 0, 900, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 298, 0, 299, 0, 302, 0, 303, 0, 0, 0, 2473984, 2478080, 2179072, 3063808, 2179072, 2179072, 2179072, 2179072, 3100672, 2179072, 2179072, 3133440, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2551808, 2179072, 2179072, 2179072, 2179072, 2179072, 2637824, 2179072, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2719744, 2125824, 2125824, 2125824, 2125824, 2125824, 2768896, 2777088, 2781184, 2797568, 2822144, 2125824, 2125824, 2125824, 2883584, 2179072, 2912256, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3039232, 2125824, 2912256, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3039232, 2125824, 2125824, 0, 2125824, 2126799, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 245760, 0, 0, 2179072, 2125824, 2125824, 3063808, 2125824, 2125824, 2125824, 2125824, 2125824, 3100672, 2125824, 2125824, 3133440, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 2457600, 2179072, 2179072, 2179072, 2179072, 2457600, 2125824, 2125824, 2125824, 3207168, 2125824, 0, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1894, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 0, 2924544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162112, 3170304, 0, 0, 3219456, 3035136, 0, 0, 0, 0, 0, 3072000, 2650112, 0, 0, 2809856, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 1654, 0, 2686976, 2736128, 0, 0, 2531328, 2707456, 0, 3190784, 0, 0, 2576384, 0, 0, 0, 0, 0, 0, 0, 1688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2742, 0, 0, 0, 0, 0, 0, 0, 3121152, 3141632, 0, 0, 0, 2924544, 0, 2682880, 0, 0, 0, 0, 0, 0, 3112960, 2387968, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2453504, 2179072, 2473984, 2482176, 2179072, 2179072, 2179072, 0, 901, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2531328, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2605056, 2179072, 2629632, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2527232, 2125824, 2125824, 2125824, 2125824, 2125824, 3092480, 2125824, 2527232, 2125824, 2650112, 2179072, 2179072, 2179072, 2707456, 2179072, 2736128, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2887680, 2179072, 2125824, 2125824, 2125824, 2125824, 2441216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2932736, 2179072, 2924544, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3035136, 2179072, 2179072, 3072000, 2179072, 2125824, 2658304, 2973696, 2125824, 2125824, 2658304, 2973696, 2125824, 2711552, 2560000, 2179072, 2560000, 2125824, 2560000, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 975, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 1047, 0, 0, 2179072, 2125824, 2125824, 2179072, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 2125824, 2125824, 3190784, 3194880, 2125824, 0, 0, 0, 0, 0, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2887680, 2125824, 2125824, 2924544, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2125824, 2125824, 3190784, 3194880, 2125824, 2179072, 2125824, 2125824, 2179072, 2125824, 2125824, 2179072, 2125824, 2125824, 2985984, 2985984, 2985984, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 419, 419, 0, 0, 65536, 419, 2179072, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 0, 0, 0, 0, 0, 0, 0, 1701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1624, 0, 0, 0, 0, 0, 0, 0, 3022848, 0, 0, 3145728, 0, 3203072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, 3067904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2445312, 0, 2842624, 0, 0, 0, 2637824, 0, 0, 0, 0, 2621440, 0, 0, 0, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2727936, 0, 0, 0, 3084288, 3182592, 2899968, 0, 2961408, 0, 0, 2179072, 2179072, 2416640, 2179072, 2179072, 2179072, 2445312, 2179072, 2179072, 2179072, 0, 901, 2126724, 2126724, 2126724, 2126724, 2126724, 2425732, 2433924, 2126724, 2126724, 2126724, 2126724, 2458574, 2126798, 2126798, 2126798, 2126798, 2183168, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 396, 0, 0, 2179072, 2179072, 2179072, 2727936, 2752512, 2179072, 2179072, 2179072, 2842624, 2846720, 2179072, 2895872, 2916352, 2179072, 2179072, 2945024, 2179072, 2179072, 2994176, 2179072, 3002368, 2179072, 2179072, 3022848, 2179072, 3067904, 3084288, 3096576, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 237568, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2605056, 2125824, 2629632, 2125824, 2125824, 2650112, 2125824, 2125824, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 3223552, 0, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2125824, 2600960, 2125824, 2125824, 2125824, 2125824, 2641920, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2940, 0, 2637824, 2125824, 2125824, 2125824, 2125824, 2727936, 2752512, 2125824, 2125824, 2125824, 2125824, 2842624, 2846720, 2125824, 2895872, 2916352, 2125824, 2125824, 2125824, 2125824, 2945024, 2125824, 2125824, 2994176, 2125824, 3002368, 2125824, 2125824, 3022848, 2125824, 3067904, 3084288, 2125824, 3096576, 2125824, 2125824, 0, 0, 0, 2928640, 0, 0, 0, 3059712, 0, 2543616, 2666496, 0, 2633728, 0, 0, 0, 0, 0, 0, 766, 767, 0, 0, 0, 754, 0, 0, 774, 0, 2179072, 2179072, 2179072, 2494464, 2179072, 2179072, 2514944, 2179072, 2179072, 2179072, 2543616, 2547712, 2179072, 2179072, 2596864, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 2593668, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126798, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1564, 0, 1566, 0, 0, 0, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2928640, 2125824, 2125824, 2125824, 2998272, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 2125824, 2125824, 2502656, 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2543616, 2547712, 2125824, 2125824, 2596864, 2125824, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3178496, 2179072, 2125824, 2125824, 2179072, 2126724, 2126724, 2126798, 2126798, 2441216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2932736, 2965504, 0, 0, 3076096, 0, 0, 2695168, 3174400, 2646016, 2613248, 2703360, 0, 0, 0, 0, 2977792, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 0, 0, 0, 2740224, 0, 0, 0, 0, 0, 0, 1106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 2469888, 2506752, 2756608, 0, 0, 2580480, 0, 0, 0, 0, 0, 0, 1146880, 0, 1146880, 0, 0, 0, 0, 0, 0, 0, 302, 302, 302, 302, 0, 302, 302, 302, 302, 0, 2396160, 2400256, 2179072, 2179072, 2441216, 2179072, 2469888, 2179072, 2179072, 2179072, 2519040, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 241664, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 2179072, 2125824, 2125824, 2179072, 2179072, 2125824, 2125824, 2125824, 2588672, 2179072, 2613248, 2646016, 2179072, 2179072, 2695168, 2756608, 2179072, 2179072, 2179072, 2932736, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 245760, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2584576, 2125824, 2125824, 2125824, 2125824, 2125824, 2617344, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2396160, 2400256, 2125824, 2125824, 2441216, 2125824, 2469888, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2613248, 2646016, 2125824, 2125824, 2695168, 2756608, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 0, 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3503, 2953216, 0, 0, 2826240, 3158016, 2428928, 0, 3018752, 2764800, 2572288, 0, 0, 3051520, 2179072, 2428928, 2437120, 2179072, 2486272, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2654208, 2678784, 2760704, 2764800, 2854912, 2969600, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2654208, 2678784, 2760704, 2764800, 2785280, 2854912, 2969600, 2125824, 3006464, 2125824, 3018752, 2125824, 2125824, 2125824, 2125824, 3149824, 2179072, 3051520, 2125824, 3051520, 2125824, 3051520, 0, 2490368, 2498560, 0, 0, 0, 0, 2875392, 0, 0, 0, 3132, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3137536, 2125824, 2125824, 2125824, 2125824, 2457600, 2125824, 2125824, 2125824, 2125824, 2183168, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 333, 0, 0, 2125824, 3137536, 2125824, 2125824, 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3132, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2126725, 2125824, 2125824, 2125824, 2502656, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2125824, 2125824, 2502656, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2126724, 2126724, 2503556, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3117056, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2928640, 2179072, 2179072, 2179072, 2998272, 2179072, 2179072, 3031040, 0, 0, 0, 2179072, 2449408, 2179072, 2535424, 2179072, 2609152, 2179072, 2859008, 2179072, 2179072, 2179072, 3031040, 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2125824, 2449408, 2125824, 2125824, 2125824, 2125824, 2461696, 2465792, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2523136, 2125824, 2125824, 2125824, 298, 0, 0, 0, 298, 0, 299, 0, 0, 0, 299, 0, 302, 2125824, 2125824, 2125824, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 3026944, 2539520, 0, 2949120, 2179072, 2658304, 2973696, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 452, 452, 111044, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 452, 111044, 111044, 111044, 111044, 111044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 360, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2124, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 847, 534, 534, 861, 534, 534, 0, 302, 118784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3127, 0, 0, 0, 302, 0, 0, 0, 302, 119197, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 302, 0, 0, 0, 0, 302, 302, 302, 302, 302, 302, 0, 0, 0, 0, 0, 302, 0, 302, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2966, 0, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 33396, 299, 0, 2134016, 49784, 303, 0, 0, 0, 0, 0, 2428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 302, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 2105631, 12290, 3, 0, 0, 293, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 790, 0, 793, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 147456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148, 0, 0, 0, 0, 1067, 1071, 0, 0, 1075, 1079, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 131072, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2479, 2437, 0, 0, 0, 0, 0, 2484, 0, 0, 0, 0, 0, 0, 1675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3260, 0, 0, 534, 534, 534, 131072, 0, 0, 131072, 131072, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 131072, 0, 0, 131072, 0, 0, 0, 0, 0, 135168, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225708, 0, 0, 0, 135168, 0, 0, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 135168, 0, 135168, 135168, 135168, 135168, 135168, 135168, 0, 135168, 135168, 135168, 135168, 135168, 135168, 0, 0, 0, 0, 0, 135168, 0, 135168, 1, 12290, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 629, 630, 0, 2134016, 633, 634, 0, 0, 0, 0, 0, 2725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200245, 2200245, 2200245, 0, 0, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 1434, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2506752, 2506752, 2506752, 0, 303, 139264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 303, 0, 0, 0, 303, 69632, 139681, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2013, 0, 0, 0, 0, 303, 303, 303, 303, 303, 303, 0, 0, 0, 0, 0, 303, 0, 303, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 33399, 0, 2134016, 302, 49787, 0, 0, 0, 0, 0, 2763, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 3020, 556, 556, 556, 61440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 300, 300, 300, 143660, 370, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 300, 300, 143660, 300, 300, 300, 143730, 300, 300, 300, 143730, 69632, 73728, 300, 300, 143660, 300, 300, 65536, 300, 300, 0, 0, 300, 300, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 300, 365, 300, 0, 143660, 300, 300, 300, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 300, 300, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 143730, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 300, 143660, 143660, 143660, 143660, 300, 143660, 143660, 143660, 143660, 143660, 143660, 300, 0, 300, 0, 300, 300, 300, 143660, 300, 143660, 143660, 143660, 143660, 143660, 143730, 143660, 143730, 143730, 143730, 143730, 143730, 143730, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 1, 12290, 0, 0, 0, 0, 2200245, 2200245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1154, 0, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 0, 12290, 0, 0, 0, 0, 155648, 0, 155648, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 1148, 0, 0, 0, 0, 0, 0, 0, 0, 1157, 3, 0, 0, 2183168, 126976, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2446, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 131072, 131072, 25155, 0, 0, 0, 159744, 0, 0, 0, 25155, 25155, 25155, 159744, 25155, 25155, 25155, 25155, 25155, 25155, 25155, 159744, 159744, 159744, 159744, 25155, 159744, 25155, 1, 12290, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 24576, 975, 2125824, 2125824, 2125824, 2125824, 3092480, 0, 0, 0, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2449408, 0, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2527232, 0, 0, 0, 2179072, 2527232, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 1, 12290, 167936, 167936, 167936, 0, 0, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 155648, 0, 172032, 172032, 0, 172032, 0, 0, 172032, 172032, 0, 172032, 0, 0, 0, 0, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 172032, 172032, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 1, 288, 3, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 1, 0, 176128, 176128, 176128, 0, 0, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 347, 3, 78114, 78114, 292, 0, 627, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 78114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 1102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 1146, 0, 0, 0, 0, 1151, 0, 0, 0, 0, 0, 0, 0, 346, 0, 404, 0, 0, 0, 0, 0, 404, 0, 0, 0, 2098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2717, 0, 0, 534, 2135, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2147, 534, 534, 534, 534, 534, 534, 1775, 534, 534, 534, 1780, 534, 534, 534, 534, 534, 534, 534, 2545, 534, 534, 534, 534, 534, 534, 0, 2549, 2220, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2232, 556, 556, 556, 556, 556, 556, 2590, 556, 556, 556, 556, 556, 556, 2598, 556, 556, 2307, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2319, 580, 580, 580, 0, 0, 0, 2006, 0, 1069, 0, 0, 0, 2008, 0, 1073, 0, 2573, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1396, 0, 0, 2955, 0, 0, 0, 2959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 372, 0, 0, 0, 534, 3150, 534, 534, 534, 3153, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2547, 534, 534, 534, 0, 0, 3161, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 580, 3206, 580, 580, 580, 3209, 580, 580, 580, 580, 580, 580, 580, 580, 2679, 580, 580, 580, 534, 580, 556, 534, 580, 580, 3217, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 580, 580, 3309, 580, 580, 580, 580, 3310, 3311, 580, 580, 580, 580, 580, 580, 580, 580, 2875, 580, 580, 580, 580, 580, 580, 580, 580, 3071, 580, 580, 580, 580, 580, 580, 580, 580, 3233, 580, 580, 580, 580, 534, 580, 556, 1993, 534, 534, 534, 1997, 556, 556, 556, 2001, 534, 534, 534, 3339, 534, 534, 534, 534, 534, 534, 3345, 534, 534, 534, 534, 556, 3407, 556, 3409, 556, 556, 556, 556, 556, 556, 556, 556, 1373, 556, 556, 556, 556, 556, 556, 556, 3364, 556, 580, 580, 580, 580, 580, 580, 3370, 580, 580, 580, 580, 580, 580, 3376, 580, 580, 580, 3380, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2925, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 3391, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2198, 534, 2200, 534, 534, 534, 534, 534, 534, 3406, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 556, 556, 3422, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1449, 580, 580, 580, 580, 580, 580, 580, 3522, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 3585, 534, 556, 556, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2973, 0, 0, 2975, 0, 0, 534, 534, 2980, 534, 534, 534, 534, 534, 534, 2532, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2793, 534, 534, 534, 534, 534, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2732, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 192965, 0, 1, 12290, 192965, 192965, 192965, 0, 0, 192965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 192965, 192965, 192965, 192965, 192965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1582, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 406, 406, 406, 406, 406, 406, 0, 0, 0, 0, 0, 406, 0, 406, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118784, 298, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 301, 302, 303, 0, 0, 0, 0, 0, 3142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2978, 534, 534, 534, 534, 0, 0, 0, 0, 733, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 0, 0, 0, 1244, 0, 0, 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2871296, 0, 0, 1171, 1171, 0, 0, 0, 1175, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 253952, 0, 0, 0, 0, 580, 580, 580, 1540, 2005, 0, 0, 0, 0, 1546, 2007, 0, 0, 0, 0, 1552, 0, 0, 0, 1558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 2009, 0, 0, 0, 0, 1558, 2011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2549, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1410, 556, 556, 556, 556, 556, 0, 306, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 1155072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2705, 0, 0, 0, 0, 0, 204800, 204800, 0, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 205106, 204800, 204800, 205105, 205106, 204800, 205105, 205105, 204800, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 299, 0, 0, 0, 0, 0, 3, 0, 0, 2183794, 0, 0, 0, 0, 0, 298, 299, 151552, 2134016, 302, 303, 0, 0, 0, 0, 0, 155648, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 151552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3036110, 2126798, 2126798, 3072974, 2126798, 2126798, 2126798, 3122126, 2700164, 2126724, 2716548, 2126724, 2724740, 2126724, 2732932, 2773892, 2126724, 2126724, 2126724, 2806660, 2126724, 2831236, 2126724, 2126724, 973, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2864004, 2126724, 2126724, 2126724, 2126724, 2921348, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2626436, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3117956, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 0, 975, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3224526, 2179072, 2126798, 2126724, 2179072, 2179072, 2126724, 2126724, 2126798, 2126798, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 2126798, 2126798, 2126798, 2626510, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2700238, 2126798, 2716622, 2126798, 2724814, 2126798, 2126798, 2126798, 2126798, 2126798, 2454478, 2126798, 2474958, 2483150, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2532302, 2733006, 2773966, 2126798, 2126798, 2126798, 2806734, 2126798, 2831310, 2126798, 2126798, 2864078, 2126798, 2126798, 2126798, 2126798, 2921422, 2126724, 2409348, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2814852, 2126724, 2839428, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3126148, 2126724, 2126724, 2126724, 2126724, 2126798, 2126798, 2585550, 2126798, 2126798, 2126798, 2126798, 2126798, 2618318, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2663374, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2552708, 2126724, 2126724, 2126724, 2126724, 2126724, 2638724, 2126724, 2126724, 2720644, 2126724, 2126724, 2126724, 2126724, 2126724, 2769796, 2777988, 2782084, 2798468, 2823044, 2126724, 2126724, 2126724, 2884484, 2126724, 2913156, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3040132, 2126724, 2126724, 2126724, 2728836, 2753412, 2126724, 2126724, 2126724, 2126724, 2843524, 2847620, 2126724, 2896772, 2917252, 2126724, 2126724, 2126724, 2126724, 3150724, 2126798, 2429902, 2438094, 2126798, 2487246, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2929614, 2126798, 2126798, 2126798, 2999246, 2126798, 3064708, 2126724, 2126724, 2126724, 2126724, 2126724, 3101572, 2126724, 2126724, 3134340, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2585476, 2126724, 2126724, 2126724, 2126724, 2126724, 2618244, 2126724, 2126724, 2126724, 2126798, 2720718, 2126798, 2126798, 2126798, 2126798, 2126798, 2769870, 2778062, 2782158, 2798542, 2823118, 2126798, 2126798, 2126798, 2884558, 2126798, 2913230, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3040206, 2126798, 2126798, 2126798, 2126798, 2126798, 2601934, 2126798, 2126798, 2126798, 2126798, 2642894, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2606030, 2126798, 2630606, 2126798, 2126798, 2651086, 2126798, 2126798, 2126798, 3064782, 2126798, 2126798, 2126798, 2126798, 2126798, 3101646, 2126798, 2126798, 3134414, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 0, 2179072, 2126798, 2126724, 2457600, 2179072, 2179072, 2179072, 2179072, 2458500, 2126798, 2126798, 2126798, 3208142, 2126798, 2179072, 2126798, 2126724, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3011460, 2126724, 2126724, 2126724, 2126798, 2126798, 2503630, 0, 0, 0, 0, 2388868, 2126724, 2126724, 2126724, 2421636, 2126724, 2126724, 2126724, 2126724, 2126724, 2454404, 2126724, 2126724, 2126724, 3027844, 2405326, 2126798, 2126798, 2126798, 2126798, 3027918, 2539520, 0, 2949120, 2179072, 2658304, 2973696, 2474884, 2483076, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2532228, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2601860, 2126724, 2126724, 2126724, 2126724, 2642820, 2126724, 2126724, 2126724, 2126724, 2126724, 2655108, 2679684, 2761604, 2765700, 2786180, 2855812, 2970500, 2126724, 3007364, 2126724, 3019652, 2605956, 2126724, 2630532, 2126724, 2126724, 2651012, 2126724, 2126724, 2126724, 2708356, 2126724, 2737028, 2126724, 2126724, 2126724, 2126724, 2462596, 2466692, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2524036, 2126724, 2126724, 2126724, 2126724, 3036036, 2126724, 2126724, 3072900, 2126724, 2126724, 2126724, 3122052, 2126724, 2126724, 3142532, 2126724, 2126724, 2126724, 3171204, 2126724, 2126724, 3191684, 3195780, 2126724, 0, 0, 0, 0, 0, 0, 2388942, 2126798, 2126798, 2126798, 2421710, 2708430, 2126798, 2737102, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2888654, 2126798, 2126798, 2925518, 2126798, 2126798, 2126798, 2126798, 2179072, 2126798, 2126724, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2802638, 2814926, 2126798, 2839502, 2126798, 2126798, 2126798, 3142606, 2126798, 2126798, 2126798, 3171278, 2126798, 2126798, 3191758, 3195854, 2126798, 2179072, 2126798, 2126724, 2179072, 2126724, 2126798, 2179072, 2126724, 2126798, 2179072, 2126724, 2126798, 2985984, 2986884, 2986958, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 315, 316, 316, 421, 422, 65536, 429, 2179072, 3112960, 3219456, 2126724, 2126724, 3113860, 3220356, 2126798, 2126798, 3113934, 3220430, 0, 0, 0, 0, 0, 0, 0, 2046, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 3223552, 0, 0, 2126724, 2126724, 2417540, 2126724, 2126724, 2126724, 2446212, 2126724, 2126724, 2126724, 2126724, 2888580, 2126724, 2126724, 2925444, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 0, 2126798, 2126798, 2126798, 2409422, 2126798, 2126798, 2945924, 2126724, 2126724, 2995076, 2126724, 3003268, 2126724, 2126724, 3023748, 2126724, 3068804, 3085188, 2126724, 3097476, 2126724, 2126724, 2126724, 2519940, 2126724, 2126724, 2126724, 2126724, 2589572, 2126724, 2614148, 2646916, 2126724, 2126724, 2696068, 2757508, 2638798, 2126798, 2126798, 2126798, 2126798, 2728910, 2753486, 2126798, 2126798, 2126798, 2126798, 2843598, 2847694, 2126798, 2896846, 2917326, 2126798, 2126798, 2945998, 2126798, 2126798, 2995150, 2126798, 3003342, 2126798, 2126798, 3023822, 2126798, 3068878, 3085262, 2126798, 3097550, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3178496, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3224452, 0, 0, 2126798, 2126798, 2417614, 2126798, 2126798, 2126798, 2446286, 2126798, 2126724, 2126724, 3060612, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3179396, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3126222, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3118030, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2495438, 2126798, 2126798, 2515918, 2126798, 2126798, 2126798, 2544590, 2548686, 2126798, 2126798, 2597838, 2126798, 2126798, 2126798, 2126798, 2425806, 2433998, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 0, 0, 0, 2179072, 2126798, 2126724, 2126798, 2126798, 2126798, 3060686, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3179470, 2179072, 2126798, 2126724, 2179072, 2126724, 2659204, 2974596, 2126724, 2126798, 2659278, 2974670, 2126798, 2711552, 2560000, 2179072, 2560900, 2126724, 2560974, 2126798, 2126798, 2126798, 2126798, 2462670, 2466766, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2524110, 2126798, 2126798, 2126798, 2126798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2397060, 2401156, 2126724, 2126724, 2442116, 2126724, 2470788, 3154820, 3167108, 3175300, 2397134, 2401230, 2126798, 2126798, 2442190, 2126798, 2470862, 2126798, 2126798, 2126798, 2520014, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3130318, 2126798, 2126798, 3154894, 3167182, 3175374, 2506752, 2507726, 2507652, 2126798, 2126798, 2589646, 2126798, 2614222, 2646990, 2126798, 2126798, 2696142, 2757582, 2126798, 2126798, 2126798, 2126798, 2933710, 2126798, 2126798, 2126798, 2126798, 2593742, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2449408, 0, 2535424, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2126724, 2429828, 2438020, 2126724, 2487172, 2126724, 2126724, 2126724, 2126724, 2933636, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3130244, 2126724, 2126724, 2126798, 2126798, 2655182, 2679758, 2761678, 2765774, 2786254, 2855886, 2970574, 2126798, 3007438, 2126798, 3019726, 2126798, 2126798, 2126798, 2126798, 0, 2502656, 0, 0, 3010560, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2126798, 3150798, 2179072, 3051520, 2126724, 3052420, 2126798, 3052494, 0, 2490368, 2498560, 0, 0, 0, 0, 2875392, 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3137536, 2126724, 2126724, 2126724, 3208068, 2126724, 0, 0, 0, 0, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2552782, 2126798, 2126798, 2126798, 2126798, 2126798, 2126724, 2499460, 2126724, 2126724, 2126724, 2556804, 2564996, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2929540, 2126724, 2126724, 2126724, 2999172, 2126724, 2126724, 2126724, 3138436, 2126798, 2126798, 2499534, 2126798, 2126798, 2126798, 2556878, 2565070, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3011534, 2126798, 2126798, 2126798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 323, 0, 2126724, 2450308, 2126724, 2536324, 2126724, 2610052, 2126724, 2859908, 2126724, 2126724, 2126724, 3031940, 2126724, 2126798, 2450382, 2126798, 2126798, 2126798, 2126798, 3093454, 0, 0, 0, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2405252, 2126724, 2126724, 2495364, 2126724, 2126724, 2515844, 2126724, 2126724, 2126724, 2544516, 2548612, 2126724, 2126724, 2597764, 2126724, 2126724, 2126724, 2663300, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2802564, 2536398, 2126798, 2610126, 2126798, 2859982, 2126798, 2126798, 2126798, 3032014, 2126798, 2527232, 0, 0, 0, 2179072, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2528132, 2126724, 2126724, 2126724, 2126724, 2126724, 3093380, 2126798, 2528206, 2126798, 2126798, 2126798, 2126798, 3138510, 2940928, 2941828, 2941902, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 0, 0, 0, 0, 172032, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 122880, 122880, 0, 0, 0, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 0, 0, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 338, 292, 0, 0, 0, 0, 0, 0, 221184, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 299, 0, 0, 2142208, 0, 0, 0, 98304, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 0, 0, 2061, 2062, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 0, 0, 0, 0, 0, 0, 0, 0, 1578, 0, 0, 0, 577536, 0, 0, 1583, 0, 0, 0, 302, 0, 303, 0, 0, 0, 303, 0, 0, 0, 2461696, 0, 0, 0, 0, 0, 0, 1159168, 416, 416, 0, 0, 0, 0, 0, 416, 0, 0, 98304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 2179072, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 901, 0, 0, 0, 0, 0, 229376, 0, 0, 0, 0, 0, 0, 0, 0, 1666, 0, 0, 0, 0, 0, 2958, 0, 0, 0, 0, 2962, 0, 0, 0, 0, 2967, 0, 0, 901, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2531328, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3190784, 3194880, 2125824, 975, 0, 0, 0, 975, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2179072, 2179072, 2179072, 3223552, 901, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 0, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 217088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 308, 0, 0, 0, 114688, 0, 241664, 258048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 677, 678, 0, 0, 0, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 386, 0, 0, 0, 2183168, 0, 0, 270336, 0, 0, 298, 299, 0, 2134016, 302, 303, 200704, 0, 0, 180224, 0, 0, 0, 0, 0, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 20480, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 1, 12290, 2113825, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 2387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 381, 383, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, 340, 2113825, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 237568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1657, 0, 0, 0, 0, 274432, 274432, 274432, 274432, 274432, 274432, 0, 0, 0, 0, 0, 274432, 0, 274432, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 90408, 90408, 90408, 90408, 0, 94505, 1, 12290, 3, 78114, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1611, 0, 0, 0, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 0, 302, 303, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163264, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 307, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 3062, 580, 580, 2009, 0, 0, 0, 0, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 2954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 2089, 0, 0, 0, 0, 0, 0, 0, 2086, 0, 0, 0, 0, 0, 2092, 0, 0, 290, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 681, 3, 78114, 78449, 292, 0, 0, 0, 0, 0, 298, 299, 0, 0, 302, 303, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 1138688, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 1150976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 337, 0, 581, 557, 557, 557, 557, 557, 557, 557, 581, 581, 581, 534, 581, 581, 581, 581, 581, 581, 581, 557, 557, 534, 557, 581, 557, 581, 1, 12290, 1, 12290, 3, 78115, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1680, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 1, 12290, 282624, 282624, 282624, 0, 0, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2027, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 3132, 0, 0, 2740224, 0, 0, 0, 0, 0, 0, 1181, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1608, 1609, 1610, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 709, 0, 0, 0, 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3252, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 167936, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 3329, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 3329, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 0, 2125824, 2125824, 0, 0, 0, 308, 0, 0, 0, 0, 0, 307, 0, 307, 308, 0, 307, 307, 0, 0, 0, 307, 307, 308, 308, 0, 0, 0, 0, 0, 0, 307, 407, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 308, 412, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 57344, 0, 0, 0, 0, 0, 0, 1120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 0, 0, 0, 0, 0, 456, 456, 456, 482, 482, 456, 482, 482, 482, 482, 482, 482, 482, 507, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 527, 482, 482, 482, 482, 482, 535, 558, 535, 558, 535, 535, 558, 535, 582, 558, 558, 558, 558, 558, 558, 558, 582, 582, 582, 535, 582, 582, 582, 582, 582, 582, 582, 558, 558, 535, 558, 582, 558, 582, 1, 12290, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 697, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 1639, 0, 0, 0, 0, 0, 0, 0, 0, 1660, 1661, 0, 1663, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 2134749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1169, 734, 0, 0, 0, 0, 0, 0, 761, 0, 0, 765, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 172032, 0, 0, 0, 0, 65536, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 780, 0, 0, 0, 0, 0, 327, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 821, 776, 0, 0, 0, 0, 0, 825, 826, 776, 776, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 1677, 0, 1679, 0, 0, 0, 0, 0, 0, 776, 729, 776, 0, 534, 534, 836, 840, 534, 534, 534, 534, 534, 534, 866, 534, 871, 534, 878, 534, 881, 534, 534, 895, 534, 534, 556, 556, 556, 909, 913, 1018, 580, 1025, 580, 1028, 580, 580, 1042, 580, 580, 0, 0, 0, 840, 987, 913, 836, 1052, 881, 534, 534, 909, 1057, 954, 556, 556, 0, 983, 1062, 1028, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78114, 1066, 0, 0, 1068, 1072, 0, 0, 1076, 1080, 0, 0, 0, 0, 0, 0, 0, 406, 406, 406, 406, 0, 406, 406, 406, 406, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 515, 515, 0, 0, 0, 1634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3126, 0, 0, 1769, 534, 534, 1772, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1784, 534, 534, 534, 534, 534, 884, 534, 534, 534, 534, 534, 556, 556, 903, 556, 556, 0, 580, 580, 580, 984, 580, 990, 580, 580, 1003, 580, 580, 1014, 580, 534, 534, 534, 534, 1789, 534, 534, 534, 534, 534, 534, 534, 1341, 1799, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 556, 556, 556, 1806, 556, 556, 556, 556, 556, 1812, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2370, 580, 580, 580, 580, 580, 580, 556, 556, 556, 1825, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 955, 556, 556, 556, 1885, 556, 556, 556, 556, 556, 556, 556, 26009, 1895, 580, 580, 580, 580, 580, 1902, 2017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 2042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2051, 0, 0, 0, 0, 0, 0, 1196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, 2109, 2110, 0, 0, 2112, 0, 0, 0, 2110, 0, 0, 2117, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 221184, 0, 0, 0, 0, 65536, 0, 2150, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1313, 0, 0, 0, 2464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3135, 0, 0, 534, 534, 534, 534, 2502, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2510, 534, 534, 534, 2601, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2611, 556, 556, 556, 556, 556, 2563, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1388, 556, 556, 556, 556, 1393, 556, 556, 556, 556, 2632, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1967, 0, 0, 0, 2698, 0, 0, 0, 0, 0, 0, 2703, 0, 0, 0, 0, 0, 0, 0, 2115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2729, 0, 0, 0, 0, 0, 0, 2749, 2750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 2762, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2521, 534, 534, 534, 534, 534, 2773, 534, 534, 2777, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2786, 556, 2820, 556, 556, 2824, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2833, 580, 580, 580, 2869, 580, 580, 2873, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2899, 580, 580, 580, 580, 580, 580, 2882, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2890, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 3324, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 0, 221184, 0, 0, 0, 0, 2931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3010, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 3412, 556, 556, 556, 556, 556, 556, 3051, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3091, 580, 3093, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 3132, 3387, 0, 3389, 0, 534, 3392, 534, 3394, 534, 534, 534, 534, 534, 534, 534, 534, 1777, 534, 534, 534, 534, 534, 534, 534, 534, 2157, 534, 534, 534, 534, 534, 534, 534, 534, 2182, 534, 534, 534, 534, 2187, 534, 534, 534, 534, 3448, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3023, 556, 3461, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 3064, 580, 3475, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 3561, 534, 0, 3490, 0, 3492, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2794, 534, 534, 0, 0, 3533, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1281, 309, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 420, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1109, 0, 1111, 1112, 0, 0, 0, 0, 0, 0, 443, 443, 420, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 526, 443, 526, 526, 526, 443, 526, 526, 526, 526, 443, 536, 559, 536, 559, 536, 536, 559, 536, 583, 559, 559, 559, 559, 559, 559, 559, 583, 583, 583, 536, 583, 583, 583, 583, 583, 583, 583, 559, 559, 609, 614, 583, 614, 620, 1, 12290, 534, 534, 874, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 580, 580, 580, 580, 580, 580, 1021, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 534, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3445, 534, 0, 0, 0, 1657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3262, 534, 534, 1785, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1006, 580, 580, 580, 0, 0, 1544, 0, 0, 0, 0, 0, 1550, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 580, 580, 1970, 580, 580, 580, 580, 580, 1977, 580, 580, 580, 580, 580, 580, 580, 1444, 580, 580, 580, 580, 580, 1456, 580, 580, 0, 0, 2425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 2612, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 3382, 0, 0, 3385, 0, 0, 0, 580, 2621, 580, 580, 580, 580, 2625, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3221, 580, 580, 580, 580, 580, 0, 0, 0, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 850, 534, 534, 534, 534, 534, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 422, 430, 421, 430, 0, 312, 430, 444, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 478, 483, 483, 494, 483, 483, 483, 483, 483, 483, 483, 483, 509, 509, 522, 522, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 509, 523, 523, 523, 523, 523, 537, 560, 537, 560, 537, 537, 560, 537, 584, 560, 560, 560, 560, 560, 560, 560, 584, 584, 584, 606, 584, 584, 584, 584, 584, 584, 607, 608, 608, 606, 608, 607, 608, 607, 1, 12290, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 695, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1720, 534, 534, 882, 534, 534, 556, 556, 955, 556, 556, 0, 580, 580, 1029, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3322, 0, 0, 3325, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 0, 1193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, 534, 534, 1254, 534, 1257, 534, 534, 534, 534, 534, 534, 534, 534, 1271, 534, 1276, 534, 534, 1280, 534, 534, 1283, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1294, 534, 534, 534, 534, 534, 1341, 901, 556, 556, 1345, 556, 556, 1349, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 580, 580, 580, 580, 0, 3580, 0, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 1363, 556, 1368, 556, 556, 1372, 556, 556, 1375, 556, 556, 556, 556, 556, 0, 2296, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2355, 580, 580, 580, 580, 2360, 580, 580, 580, 580, 1437, 580, 580, 1441, 580, 580, 580, 580, 580, 580, 580, 580, 1455, 580, 1460, 580, 580, 1464, 580, 580, 1467, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 188416, 534, 580, 556, 1669, 0, 0, 0, 0, 0, 0, 1676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1199, 1200, 0, 0, 0, 0, 0, 580, 1923, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1459, 580, 580, 1936, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1919, 580, 534, 2176, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 534, 534, 534, 534, 2192, 2193, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 3022, 556, 2262, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1819, 556, 556, 556, 2278, 2279, 2280, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1846, 556, 556, 556, 1851, 556, 2349, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1985, 580, 580, 580, 2365, 2366, 2367, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 3558, 0, 3560, 534, 534, 0, 2399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 2465, 2466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2090, 0, 0, 0, 0, 580, 580, 580, 2663, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 3105, 534, 534, 534, 534, 534, 2790, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 3019, 556, 556, 556, 556, 2917, 0, 0, 0, 0, 0, 2923, 0, 0, 0, 0, 0, 0, 0, 2927, 0, 0, 0, 0, 0, 2200246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 0, 2972, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2987, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 899, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3027, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1432, 26009, 1341, 975, 580, 0, 3139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1597, 0, 534, 534, 534, 534, 3175, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3438, 0, 3439, 0, 0, 0, 0, 0, 0, 0, 534, 3446, 534, 3447, 534, 534, 534, 3451, 534, 534, 534, 534, 534, 534, 534, 556, 3459, 556, 556, 556, 556, 556, 2589, 556, 556, 2593, 556, 556, 556, 556, 556, 556, 556, 2606, 556, 556, 556, 556, 556, 556, 556, 556, 2269, 556, 556, 556, 556, 556, 556, 556, 3460, 556, 556, 556, 3464, 556, 556, 556, 556, 556, 556, 556, 556, 580, 3473, 580, 0, 0, 2920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2926, 0, 0, 0, 0, 0, 1147, 0, 1149, 0, 0, 0, 0, 0, 0, 0, 0, 534, 557, 534, 557, 534, 534, 557, 534, 3474, 580, 580, 580, 3478, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 3583, 3584, 534, 534, 556, 556, 3596, 556, 556, 556, 3598, 580, 580, 580, 3600, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 3244, 0, 0, 0, 0, 0, 323, 323, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 373, 0, 432, 438, 0, 445, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 484, 484, 495, 484, 484, 484, 484, 484, 484, 484, 484, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 538, 561, 538, 561, 538, 538, 561, 538, 585, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 538, 585, 585, 585, 585, 585, 585, 585, 561, 561, 538, 561, 585, 561, 585, 1, 12290, 787, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 859, 534, 534, 534, 534, 534, 534, 2139, 534, 534, 2142, 534, 534, 534, 534, 534, 534, 534, 1760, 1761, 1762, 534, 534, 1765, 1766, 534, 534, 1114, 1115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1613, 0, 1100, 0, 1231, 0, 0, 0, 0, 0, 1115, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 3088384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 1246, 1114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 1255, 534, 534, 534, 1341, 901, 556, 556, 1346, 556, 556, 556, 556, 556, 556, 556, 556, 1389, 556, 556, 556, 556, 556, 556, 556, 556, 1397, 556, 556, 556, 1401, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1880, 556, 556, 556, 556, 556, 580, 1438, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1934, 580, 580, 580, 1465, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1491, 580, 580, 1478, 580, 580, 580, 580, 580, 580, 580, 1487, 580, 580, 1489, 580, 580, 580, 1493, 1517, 580, 580, 580, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 534, 556, 580, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 135168, 135168, 0, 0, 65536, 135168, 556, 556, 556, 556, 1872, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1832, 556, 556, 556, 556, 1968, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2362, 580, 580, 2004, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2418, 0, 0, 0, 0, 0, 2422, 0, 0, 2009, 0, 0, 0, 0, 0, 2011, 0, 0, 0, 0, 0, 2014, 0, 0, 0, 0, 0, 0, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2077, 0, 0, 0, 0, 0, 2067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 827, 2121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 2770, 534, 534, 534, 534, 2137, 534, 534, 534, 534, 2141, 534, 534, 534, 534, 534, 534, 534, 534, 2518, 534, 534, 534, 534, 534, 534, 534, 534, 2803, 534, 534, 534, 534, 534, 534, 534, 534, 2989, 534, 534, 534, 534, 534, 534, 534, 534, 3165, 534, 534, 534, 534, 534, 534, 534, 534, 3270, 534, 534, 534, 534, 534, 534, 534, 534, 3280, 556, 556, 556, 556, 556, 556, 556, 1426, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 2222, 556, 556, 556, 556, 2226, 556, 556, 556, 556, 556, 556, 556, 556, 1405, 556, 556, 556, 556, 556, 556, 556, 580, 580, 2309, 580, 580, 580, 580, 2313, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3527, 580, 580, 580, 0, 3531, 0, 0, 2462, 0, 0, 0, 0, 0, 2467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1640, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2489, 2490, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2522, 534, 534, 534, 534, 534, 534, 2529, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2993, 534, 534, 2620, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2376, 2660, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3316, 2707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1100, 0, 0, 0, 0, 2724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1686, 0, 0, 0, 0, 0, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2028, 0, 0, 0, 534, 534, 534, 534, 534, 2800, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1307, 534, 534, 534, 534, 534, 2891, 580, 580, 580, 580, 580, 580, 580, 2897, 580, 580, 580, 580, 580, 580, 580, 1471, 580, 580, 580, 580, 580, 580, 580, 580, 1045, 580, 0, 0, 0, 534, 580, 556, 3128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1128, 534, 534, 534, 534, 534, 3176, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 3511, 556, 3513, 556, 556, 556, 556, 580, 556, 556, 3297, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3374, 580, 580, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3397, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1392, 556, 556, 556, 556, 556, 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 324, 372, 327, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 324, 0, 0, 371, 371, 401, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 446, 459, 459, 459, 459, 459, 459, 459, 459, 472, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 485, 485, 459, 485, 485, 500, 502, 485, 485, 500, 485, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 528, 511, 511, 511, 511, 511, 539, 562, 539, 562, 539, 539, 562, 539, 586, 562, 562, 562, 562, 562, 562, 562, 586, 586, 586, 539, 586, 586, 586, 586, 586, 586, 586, 562, 562, 539, 562, 586, 562, 586, 1, 12290, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 664, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 355, 0, 0, 466, 466, 466, 466, 466, 466, 466, 466, 471, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 471, 0, 713, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 1621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 763, 0, 0, 0, 0, 0, 771, 0, 773, 0, 0, 0, 0, 0, 0, 1637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 793, 0, 0, 0, 793, 793, 790, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 106496, 0, 0, 0, 0, 106496, 106496, 0, 0, 0, 773, 0, 785, 0, 802, 0, 0, 0, 0, 793, 0, 700, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1141, 0, 810, 0, 0, 0, 0, 0, 810, 810, 813, 0, 0, 0, 773, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 367, 0, 384, 0, 350, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 0, 385, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 822, 802, 822, 0, 534, 534, 837, 534, 843, 534, 534, 856, 534, 534, 867, 534, 872, 534, 534, 880, 883, 888, 534, 896, 534, 534, 556, 556, 556, 910, 556, 556, 556, 556, 556, 2604, 2605, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3189, 556, 556, 556, 556, 556, 556, 916, 556, 556, 929, 556, 556, 940, 556, 945, 556, 556, 953, 956, 961, 556, 969, 1019, 580, 580, 1027, 1030, 1035, 580, 1043, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 556, 2825, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2284, 556, 556, 556, 556, 556, 837, 534, 1053, 888, 534, 910, 556, 1058, 961, 556, 0, 984, 580, 1063, 1035, 580, 0, 2919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2458, 0, 0, 0, 0, 1087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 1659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2032, 0, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2078, 0, 0, 0, 1129, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2471, 0, 0, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 2442, 0, 0, 0, 0, 0, 0, 0, 2450, 1121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 1139, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2757, 2758, 0, 0, 0, 534, 1282, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1297, 1337, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1354, 556, 556, 1419, 556, 556, 556, 556, 556, 556, 1429, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1523, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 2837, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1862, 1863, 556, 556, 556, 556, 1461, 580, 580, 580, 1466, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1915, 580, 580, 580, 580, 580, 580, 1481, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1933, 580, 580, 580, 1495, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1511, 580, 580, 580, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2074, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 580, 580, 580, 1521, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 534, 556, 580, 3610, 3611, 3612, 534, 556, 580, 0, 0, 0, 0, 0, 0, 307, 442, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 0, 0, 1585, 0, 0, 1588, 1589, 1590, 0, 1592, 1593, 0, 0, 0, 0, 1598, 1631, 1632, 0, 0, 0, 0, 0, 0, 0, 0, 1641, 1642, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 534, 534, 534, 0, 0, 0, 0, 1648, 0, 0, 1650, 0, 0, 0, 0, 1652, 1653, 0, 0, 0, 0, 0, 441, 0, 0, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 552, 575, 552, 575, 552, 552, 575, 552, 0, 0, 1671, 1672, 1673, 1674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2483, 0, 0, 0, 0, 0, 1683, 0, 0, 1686, 0, 0, 0, 0, 0, 1690, 0, 0, 0, 1694, 1695, 1706, 1566, 1566, 1708, 534, 1710, 534, 1711, 1712, 534, 1714, 534, 534, 534, 1718, 534, 534, 534, 534, 534, 886, 534, 534, 534, 534, 534, 556, 556, 908, 556, 556, 556, 556, 556, 2254, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1431, 556, 26009, 1341, 975, 1435, 534, 534, 1739, 534, 1741, 534, 534, 534, 534, 534, 534, 534, 534, 1749, 1750, 1752, 534, 1786, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1797, 1341, 0, 1802, 556, 556, 556, 556, 556, 3041, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3200, 556, 556, 556, 556, 556, 556, 1804, 556, 1805, 556, 1807, 556, 1809, 556, 556, 556, 1813, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 580, 2618, 580, 580, 556, 556, 556, 556, 1826, 556, 556, 556, 556, 1830, 556, 556, 556, 556, 1834, 556, 556, 556, 556, 556, 3055, 556, 556, 556, 556, 556, 580, 580, 580, 3063, 580, 580, 580, 580, 1724, 1915, 1819, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 2692, 0, 0, 1836, 556, 556, 556, 556, 556, 556, 556, 556, 1844, 1845, 1847, 556, 556, 556, 556, 556, 0, 2297, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2667, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2653, 580, 580, 580, 580, 2657, 580, 556, 556, 556, 1855, 1856, 1857, 556, 556, 1860, 1861, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 2862, 580, 580, 580, 580, 556, 1869, 556, 556, 556, 1873, 556, 556, 556, 556, 556, 556, 556, 1882, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 1002, 580, 580, 580, 580, 580, 580, 3555, 3556, 580, 580, 0, 0, 3559, 0, 534, 534, 1903, 580, 1905, 580, 580, 580, 1909, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3528, 580, 580, 0, 0, 0, 1922, 580, 580, 580, 580, 1926, 580, 580, 580, 580, 1930, 580, 1932, 580, 580, 580, 580, 580, 1524, 0, 1270, 1454, 1362, 534, 534, 534, 534, 534, 556, 1952, 1953, 580, 580, 1956, 1957, 580, 580, 580, 580, 580, 580, 580, 1965, 580, 580, 534, 534, 556, 556, 580, 580, 3321, 0, 0, 0, 3323, 0, 0, 0, 0, 0, 0, 2114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2605056, 0, 0, 0, 0, 2887680, 580, 1969, 580, 580, 580, 580, 580, 580, 580, 1978, 580, 580, 580, 580, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 580, 580, 1989, 534, 580, 556, 1766, 534, 1995, 534, 1861, 556, 1999, 556, 1957, 580, 2003, 580, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2702, 0, 0, 0, 0, 0, 0, 0, 2706, 0, 2018, 0, 0, 2021, 2022, 0, 0, 0, 2026, 0, 0, 0, 0, 0, 0, 0, 414, 414, 0, 0, 0, 0, 0, 414, 0, 0, 0, 2069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 2088, 0, 0, 0, 0, 0, 0, 0, 451, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 2095, 0, 2097, 0, 0, 0, 0, 0, 0, 0, 0, 2106, 0, 0, 0, 0, 0, 0, 0, 184725, 184925, 184925, 184925, 0, 184925, 184925, 184925, 184925, 184925, 184925, 0, 0, 0, 0, 0, 184925, 0, 184925, 1, 12290, 534, 534, 534, 2153, 534, 2155, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1746, 534, 534, 534, 534, 534, 534, 2204, 2205, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2558, 556, 556, 556, 556, 2238, 556, 2240, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2231, 556, 556, 556, 556, 556, 2291, 2292, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 1506, 580, 580, 580, 580, 580, 1513, 580, 580, 580, 580, 2325, 580, 2327, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2318, 580, 580, 580, 580, 580, 2378, 2379, 580, 580, 2145, 2317, 2230, 534, 2385, 534, 534, 556, 2389, 556, 556, 0, 580, 580, 580, 580, 580, 580, 997, 580, 580, 580, 580, 580, 580, 2328, 580, 2330, 580, 580, 580, 580, 580, 580, 580, 2342, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1474, 580, 580, 580, 580, 580, 580, 580, 2393, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 2727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1579, 0, 0, 0, 0, 0, 0, 0, 2437, 2438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1089, 0, 0, 534, 2526, 534, 534, 534, 2531, 534, 534, 534, 534, 534, 534, 534, 2538, 534, 534, 534, 534, 534, 534, 2169, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2782, 534, 534, 2785, 534, 534, 534, 534, 534, 534, 534, 2543, 534, 534, 534, 534, 534, 534, 534, 534, 0, 2549, 556, 556, 2587, 556, 556, 556, 556, 2591, 556, 556, 556, 2596, 556, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 3386, 556, 556, 556, 2603, 556, 556, 556, 556, 556, 556, 556, 556, 2609, 556, 556, 556, 556, 556, 556, 3042, 556, 3044, 556, 556, 556, 556, 556, 556, 556, 1404, 556, 556, 1411, 556, 556, 556, 556, 556, 580, 580, 580, 2623, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1451, 580, 580, 580, 580, 580, 580, 2635, 580, 2637, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1914, 580, 580, 580, 580, 580, 580, 580, 2662, 580, 580, 580, 580, 580, 580, 580, 2669, 580, 580, 580, 580, 580, 580, 2895, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1046, 0, 0, 0, 534, 580, 556, 580, 580, 580, 2675, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 2913, 556, 2915, 580, 534, 534, 534, 2798, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3348, 534, 556, 556, 556, 556, 556, 2846, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2245, 556, 556, 556, 556, 0, 2943, 2944, 0, 2945, 0, 2947, 0, 0, 0, 0, 2949, 0, 0, 0, 0, 0, 0, 0, 225883, 225883, 225883, 225883, 225734, 225883, 225883, 225883, 225883, 225883, 225883, 225734, 225734, 225734, 225734, 225734, 225899, 225734, 225899, 1, 12290, 2968, 2969, 0, 2971, 0, 0, 2974, 0, 0, 0, 2977, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 2214, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 2617, 580, 580, 580, 534, 2984, 534, 534, 534, 534, 534, 2988, 534, 534, 534, 534, 534, 534, 534, 2994, 534, 534, 534, 534, 534, 3000, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1763, 534, 534, 534, 534, 534, 3009, 3011, 534, 534, 534, 3014, 534, 3016, 3017, 534, 556, 556, 556, 556, 556, 556, 0, 0, 580, 2861, 580, 580, 580, 580, 580, 580, 0, 1267, 1451, 1359, 534, 534, 534, 1530, 534, 556, 3024, 556, 556, 556, 556, 556, 3028, 556, 556, 556, 556, 556, 556, 556, 3034, 556, 556, 556, 556, 556, 3185, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2229, 556, 556, 2233, 556, 556, 556, 556, 556, 556, 3040, 556, 556, 3043, 556, 556, 556, 556, 556, 556, 556, 556, 1829, 556, 556, 556, 556, 556, 556, 556, 3050, 3052, 556, 556, 556, 556, 3056, 556, 3058, 3059, 556, 580, 580, 580, 580, 580, 580, 3083, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2331, 580, 580, 580, 580, 2335, 580, 580, 3066, 580, 580, 580, 580, 580, 3070, 580, 580, 580, 580, 580, 580, 580, 3076, 580, 3092, 3094, 580, 580, 580, 580, 3098, 580, 3100, 3101, 580, 534, 580, 556, 534, 534, 534, 534, 534, 887, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 0, 2299, 580, 580, 580, 580, 580, 580, 580, 3084, 580, 3086, 580, 580, 580, 580, 580, 580, 3106, 556, 3108, 580, 3110, 0, 0, 0, 0, 0, 0, 3116, 0, 0, 3119, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3140, 3141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2107, 0, 0, 0, 556, 556, 556, 556, 3184, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2272, 556, 556, 556, 556, 556, 556, 556, 3195, 556, 556, 556, 556, 556, 556, 556, 556, 3203, 556, 556, 556, 556, 556, 556, 3197, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2594, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 3208, 580, 580, 580, 580, 580, 580, 580, 3213, 580, 580, 580, 580, 1907, 580, 580, 580, 580, 580, 580, 580, 580, 1918, 580, 580, 580, 580, 580, 3096, 580, 580, 3099, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 534, 534, 3278, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3515, 556, 556, 580, 556, 3296, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3214, 3326, 3327, 0, 3132, 0, 3331, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2766, 534, 534, 534, 534, 534, 2771, 534, 534, 534, 3405, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 960, 556, 556, 556, 556, 556, 3420, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1452, 580, 580, 580, 580, 580, 3436, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3502, 534, 534, 534, 534, 534, 3450, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 3281, 556, 556, 556, 3284, 556, 556, 556, 3463, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 3302, 580, 580, 580, 580, 580, 580, 580, 3477, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3486, 3487, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 1137, 1095, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 266240, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 3493, 3494, 3495, 534, 534, 534, 3498, 534, 3500, 534, 534, 534, 534, 534, 534, 534, 3269, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2781, 534, 534, 534, 534, 534, 534, 534, 3505, 3506, 3507, 556, 556, 556, 3510, 556, 3512, 556, 556, 556, 556, 3517, 3518, 3519, 3520, 580, 580, 580, 3523, 580, 3525, 580, 580, 580, 580, 3530, 0, 0, 0, 0, 0, 0, 1687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3562, 534, 534, 534, 3566, 556, 556, 3568, 556, 556, 556, 3572, 556, 580, 580, 3574, 580, 580, 580, 3578, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 580, 580, 0, 3111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2409, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, 0, 368, 0, 0, 0, 376, 378, 0, 0, 0, 0, 0, 0, 0, 0, 2025, 0, 0, 0, 0, 0, 0, 0, 0, 2047, 0, 0, 0, 0, 0, 0, 0, 0, 2087, 0, 0, 0, 0, 0, 0, 0, 0, 2127, 0, 0, 534, 534, 534, 534, 534, 0, 0, 411, 0, 0, 0, 411, 69632, 73728, 0, 368, 368, 0, 423, 65536, 368, 0, 0, 368, 423, 492, 496, 492, 492, 501, 492, 492, 492, 501, 492, 423, 423, 329, 423, 0, 0, 423, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 540, 563, 540, 563, 540, 540, 563, 540, 587, 563, 563, 563, 563, 563, 563, 563, 587, 587, 587, 540, 587, 587, 587, 587, 587, 587, 587, 563, 563, 540, 563, 587, 563, 587, 1, 12290, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1644, 0, 556, 556, 556, 556, 933, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2285, 556, 2287, 556, 556, 0, 0, 1207, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2447, 0, 0, 0, 534, 534, 534, 534, 1260, 534, 534, 534, 534, 534, 1272, 534, 534, 534, 534, 534, 0, 0, 0, 2212, 556, 556, 556, 556, 556, 556, 556, 3029, 556, 556, 556, 556, 556, 556, 556, 556, 3030, 556, 556, 556, 556, 556, 556, 556, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 1352, 556, 556, 0, 580, 580, 580, 580, 580, 580, 998, 580, 580, 580, 580, 580, 580, 2650, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2315, 580, 2317, 580, 580, 580, 580, 556, 556, 556, 1364, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1378, 1380, 556, 556, 556, 556, 556, 1871, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1413, 556, 556, 1417, 534, 534, 534, 534, 534, 3567, 556, 556, 556, 556, 556, 556, 556, 3573, 580, 580, 580, 580, 580, 2677, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 534, 3597, 556, 556, 556, 3599, 580, 580, 580, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3243, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 306, 306, 306, 0, 0, 0, 0, 0, 424, 424, 0, 424, 433, 0, 424, 424, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 486, 486, 460, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 541, 564, 541, 564, 541, 541, 564, 541, 588, 564, 564, 564, 564, 564, 564, 564, 588, 588, 588, 541, 588, 588, 588, 588, 588, 588, 588, 564, 564, 541, 564, 588, 564, 588, 1, 12290, 78114, 1066, 0, 0, 1069, 1073, 0, 0, 1077, 1081, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2472, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1667, 0, 0, 0, 0, 0, 2044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2704, 0, 0, 0, 0, 2068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1681, 1682, 2392, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2928, 0, 0, 0, 2932, 0, 0, 0, 0, 0, 2938, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 2953, 0, 0, 2956, 0, 0, 0, 0, 0, 2961, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1204, 2995, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3004, 534, 534, 534, 534, 534, 0, 0, 2211, 0, 556, 556, 556, 556, 556, 556, 556, 2268, 556, 556, 556, 556, 2273, 556, 556, 556, 534, 534, 534, 3012, 534, 534, 3015, 534, 534, 534, 3018, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 556, 556, 534, 556, 580, 556, 580, 1, 12290, 556, 556, 556, 556, 3054, 556, 556, 3057, 556, 556, 556, 3060, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 2396, 0, 0, 0, 3077, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3087, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 3442, 0, 3444, 0, 534, 534, 0, 3120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2015, 0, 0, 534, 534, 3151, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3458, 556, 556, 534, 534, 534, 534, 3163, 534, 534, 534, 534, 534, 534, 534, 3168, 534, 3170, 534, 534, 534, 534, 534, 1261, 534, 534, 534, 1270, 534, 534, 534, 534, 534, 534, 534, 2493, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2196, 534, 534, 534, 534, 534, 534, 556, 556, 556, 580, 580, 3207, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1962, 580, 580, 580, 580, 580, 580, 3227, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2912, 534, 2914, 556, 2916, 3275, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 556, 556, 3287, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3293, 556, 556, 556, 556, 556, 556, 3466, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3306, 3587, 3588, 556, 556, 580, 580, 3591, 3592, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1716, 534, 534, 534, 0, 683, 684, 0, 0, 0, 0, 689, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 534, 830, 534, 534, 534, 534, 534, 534, 860, 534, 534, 534, 534, 534, 534, 2180, 2181, 534, 534, 534, 534, 534, 534, 2188, 534, 0, 751, 0, 0, 0, 0, 0, 751, 751, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 970, 556, 0, 580, 580, 580, 580, 988, 580, 580, 580, 580, 580, 580, 580, 580, 1044, 580, 0, 0, 0, 841, 988, 914, 534, 534, 534, 534, 897, 556, 556, 556, 556, 970, 0, 580, 580, 580, 580, 1044, 0, 0, 0, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2408448, 0, 0, 534, 1318, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 2549, 1696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1190, 580, 580, 1988, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2122, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 2768, 534, 2769, 534, 534, 2540, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 0, 0, 975, 580, 0, 3129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2053, 0, 3235, 534, 3237, 556, 3239, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3124, 3125, 0, 0, 0, 556, 556, 556, 3298, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2359, 580, 580, 580, 580, 3317, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2076, 0, 0, 0, 0, 0, 0, 461, 461, 479, 487, 487, 479, 487, 487, 487, 487, 487, 487, 487, 487, 512, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 529, 520, 520, 520, 520, 520, 542, 565, 542, 565, 542, 542, 565, 542, 589, 565, 565, 565, 565, 565, 565, 565, 589, 589, 589, 542, 589, 589, 589, 589, 589, 589, 589, 565, 565, 542, 565, 589, 565, 589, 1, 12290, 0, 0, 760, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 782, 0, 0, 0, 0, 364, 364, 0, 0, 0, 1136, 0, 0, 0, 0, 0, 0, 0, 1606, 0, 0, 0, 0, 0, 0, 0, 0, 553, 576, 553, 576, 553, 553, 576, 553, 0, 805, 0, 0, 0, 0, 0, 805, 805, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 534, 831, 534, 534, 534, 846, 534, 534, 534, 534, 534, 0, 2210, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1893, 26009, 0, 1898, 580, 1900, 580, 1901, 580, 0, 0, 0, 0, 823, 778, 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, 0, 2022, 0, 2116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 534, 534, 534, 534, 844, 534, 852, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 2815, 556, 2816, 556, 556, 917, 556, 925, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2583, 556, 971, 556, 0, 580, 580, 580, 580, 580, 991, 580, 999, 580, 580, 580, 580, 580, 580, 3097, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 1054, 898, 556, 556, 556, 1059, 971, 0, 580, 580, 580, 1064, 1045, 0, 1159, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 1219, 0, 0, 0, 0, 0, 0, 0, 0, 1224, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 364, 0, 0, 0, 1134592, 0, 0, 0, 1134592, 1134592, 0, 0, 1134592, 0, 0, 1134592, 0, 1134592, 534, 534, 1284, 534, 534, 534, 534, 534, 534, 534, 1292, 534, 534, 534, 534, 534, 0, 2209, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1842, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1896, 580, 580, 580, 580, 580, 580, 534, 534, 534, 1321, 534, 534, 1325, 534, 534, 534, 534, 534, 1331, 534, 534, 534, 534, 534, 534, 534, 3342, 534, 3344, 534, 534, 534, 534, 534, 556, 1338, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2568, 556, 556, 556, 556, 556, 1357, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1376, 556, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580, 580, 2619, 580, 556, 556, 556, 1384, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1816, 1817, 556, 556, 580, 580, 580, 1522, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3196, 556, 3198, 556, 556, 556, 556, 556, 556, 556, 556, 1878, 1879, 556, 556, 556, 556, 556, 556, 534, 534, 534, 534, 1773, 534, 534, 534, 534, 534, 534, 1781, 534, 534, 534, 534, 0, 0, 556, 556, 556, 2813, 556, 556, 556, 556, 556, 2818, 556, 556, 1823, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2842, 556, 556, 556, 1853, 556, 556, 556, 556, 1859, 556, 556, 556, 556, 556, 556, 556, 556, 2840, 556, 556, 556, 556, 556, 556, 556, 1868, 556, 556, 556, 556, 556, 556, 1876, 556, 556, 556, 556, 556, 556, 556, 556, 2850, 556, 556, 556, 556, 556, 556, 556, 556, 1886, 1888, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 1525, 1526, 1527, 534, 534, 1529, 534, 534, 556, 580, 580, 580, 1955, 580, 580, 580, 580, 580, 580, 580, 580, 1964, 580, 580, 580, 580, 580, 1940, 1941, 1943, 580, 580, 580, 580, 580, 580, 580, 1951, 580, 580, 580, 1972, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1982, 1984, 580, 580, 580, 580, 1925, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2372, 580, 2374, 580, 580, 0, 0, 0, 2057, 0, 0, 0, 0, 0, 2063, 0, 0, 0, 0, 0, 0, 0, 1089, 0, 0, 0, 0, 1241, 1242, 0, 0, 0, 0, 0, 0, 2071, 0, 0, 0, 0, 0, 0, 0, 0, 2079, 0, 0, 0, 0, 0, 534, 833, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1306, 534, 534, 534, 534, 534, 534, 2134, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2146, 534, 534, 534, 534, 534, 534, 534, 3453, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 2826, 556, 556, 556, 556, 556, 556, 556, 556, 556, 949, 556, 556, 556, 556, 967, 556, 2189, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1314, 2203, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 2219, 2290, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 2306, 2377, 580, 580, 580, 580, 2146, 2318, 2231, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 3246, 0, 0, 0, 0, 0, 2413, 2414, 0, 0, 2417, 0, 2419, 0, 0, 0, 0, 0, 0, 0, 0, 2712, 0, 0, 0, 0, 0, 0, 0, 0, 2728, 0, 0, 0, 0, 0, 0, 0, 0, 2429, 0, 0, 0, 0, 0, 0, 0, 0, 2406, 0, 0, 0, 0, 0, 0, 0, 0, 2454, 0, 0, 0, 0, 0, 0, 0, 0, 1587, 0, 0, 0, 0, 0, 0, 0, 1595, 1596, 0, 0, 0, 2424, 0, 0, 2427, 0, 0, 0, 0, 0, 0, 2431, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 1159168, 0, 0, 0, 0, 1159168, 1159168, 0, 0, 0, 2452, 0, 0, 0, 0, 0, 0, 0, 2456, 2457, 0, 0, 2460, 0, 0, 2463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 644, 645, 646, 647, 648, 649, 534, 2487, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3008, 534, 534, 534, 2515, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1293, 534, 534, 534, 534, 2527, 534, 534, 534, 534, 534, 534, 2534, 534, 534, 534, 534, 534, 534, 534, 534, 3343, 534, 534, 534, 534, 534, 534, 556, 534, 534, 2541, 534, 534, 534, 2544, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 2217, 556, 556, 556, 2574, 556, 556, 556, 556, 556, 556, 2579, 556, 556, 556, 556, 556, 556, 556, 1427, 1428, 556, 556, 556, 26009, 1341, 975, 580, 2585, 556, 556, 556, 556, 556, 556, 2592, 556, 556, 556, 556, 556, 556, 2599, 556, 556, 556, 556, 556, 3290, 556, 556, 556, 556, 3291, 3292, 556, 556, 556, 556, 556, 0, 0, 2298, 0, 580, 580, 580, 580, 580, 580, 580, 2886, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3312, 580, 580, 580, 580, 580, 580, 2673, 580, 580, 580, 2676, 580, 580, 580, 580, 580, 580, 580, 2681, 2682, 2683, 534, 534, 534, 534, 534, 1289, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2185, 534, 534, 534, 534, 2720, 2721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2080, 0, 0, 0, 2736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2746, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 729, 0, 780, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1565, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 2753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2109, 534, 534, 534, 534, 534, 2787, 2788, 534, 534, 534, 534, 2791, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 3178, 556, 556, 556, 556, 2796, 534, 534, 534, 2799, 534, 2801, 534, 534, 534, 534, 534, 534, 2805, 534, 534, 534, 534, 534, 534, 2492, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1745, 534, 534, 534, 534, 534, 534, 2834, 2835, 556, 556, 556, 556, 2838, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2257, 556, 556, 556, 556, 556, 556, 556, 2844, 556, 556, 556, 2847, 556, 2849, 556, 556, 556, 556, 556, 556, 556, 2854, 580, 2867, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1949, 580, 580, 580, 2883, 2884, 580, 580, 580, 580, 2887, 580, 580, 580, 580, 580, 580, 580, 1928, 580, 580, 580, 580, 580, 580, 580, 580, 1912, 1913, 580, 580, 580, 580, 1920, 580, 580, 580, 580, 2893, 580, 580, 580, 2896, 580, 2898, 580, 580, 580, 580, 580, 580, 1190, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 2903, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 3242, 0, 0, 0, 0, 0, 0, 0, 0, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 580, 2918, 0, 0, 2921, 2922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 3255, 0, 534, 534, 534, 534, 2986, 534, 534, 534, 534, 534, 534, 534, 2992, 534, 534, 534, 534, 534, 534, 891, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 2302, 580, 580, 580, 580, 556, 556, 556, 3026, 556, 556, 556, 556, 556, 556, 556, 3032, 556, 556, 556, 556, 556, 556, 1841, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3357, 556, 3359, 556, 556, 556, 556, 580, 580, 580, 580, 3068, 580, 580, 580, 580, 580, 580, 580, 3074, 580, 580, 580, 580, 580, 2311, 580, 580, 2314, 580, 580, 580, 580, 580, 580, 2322, 3138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1191, 3247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2767, 534, 534, 534, 534, 534, 534, 534, 534, 3265, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 534, 534, 3276, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 3283, 556, 556, 556, 556, 556, 3299, 580, 580, 580, 580, 580, 580, 580, 3304, 580, 580, 580, 580, 580, 3479, 580, 3481, 580, 580, 3483, 580, 580, 0, 0, 0, 0, 0, 0, 1210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2421, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 3399, 534, 3401, 3402, 534, 3404, 534, 556, 556, 556, 556, 556, 556, 556, 556, 3414, 556, 3416, 3417, 556, 3419, 556, 3421, 580, 580, 580, 580, 580, 580, 580, 580, 3430, 580, 3432, 3433, 580, 3435, 580, 3437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 3499, 534, 3501, 534, 534, 580, 580, 580, 3553, 580, 3554, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3538, 534, 3539, 534, 534, 534, 3604, 3605, 3606, 534, 556, 580, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 3211264, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 590, 566, 566, 566, 566, 566, 566, 566, 590, 590, 590, 543, 590, 590, 590, 590, 590, 590, 590, 566, 566, 543, 566, 590, 566, 590, 1, 12290, 556, 556, 1398, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2853, 556, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1126, 1127, 0, 534, 534, 534, 534, 2138, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2784, 534, 534, 534, 556, 556, 556, 2223, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1849, 556, 556, 556, 580, 580, 580, 2310, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1490, 580, 580, 580, 402, 0, 0, 0, 0, 380, 0, 69632, 73728, 0, 0, 0, 0, 425, 65536, 0, 0, 0, 0, 364, 364, 1133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133, 0, 0, 0, 3136, 0, 425, 425, 0, 425, 0, 439, 425, 425, 462, 462, 462, 469, 462, 462, 462, 462, 462, 462, 462, 462, 469, 462, 462, 462, 462, 462, 462, 462, 462, 476, 462, 488, 488, 462, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 531, 544, 567, 544, 567, 544, 544, 567, 544, 591, 567, 567, 567, 567, 567, 567, 567, 591, 591, 591, 544, 591, 591, 591, 591, 591, 591, 591, 567, 567, 544, 567, 591, 567, 591, 1, 12290, 0, 0, 0, 653, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2939, 0, 0, 2941, 0, 0, 0, 654, 0, 654, 0, 0, 0, 0, 814, 0, 0, 0, 654, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 2130, 534, 534, 534, 556, 919, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 957, 556, 556, 556, 556, 556, 556, 3545, 556, 3546, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 534, 534, 884, 534, 534, 556, 556, 957, 556, 556, 0, 580, 580, 1031, 580, 580, 580, 580, 580, 2907, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 3117, 0, 0, 0, 290, 1066, 0, 0, 1069, 1073, 0, 0, 1077, 1081, 0, 0, 0, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 0, 0, 1088, 1089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 131072, 0, 0, 0, 1130, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 3254, 0, 0, 1089, 1088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2093, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 1253, 534, 534, 534, 534, 534, 1303, 534, 534, 1305, 534, 534, 534, 1309, 534, 534, 534, 0, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3549, 580, 580, 580, 534, 534, 534, 534, 1287, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2804, 534, 534, 2807, 534, 534, 1320, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1334, 534, 534, 534, 534, 534, 1323, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2509, 534, 534, 534, 534, 534, 534, 534, 1341, 901, 556, 1344, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2283, 556, 556, 556, 556, 556, 556, 556, 556, 1358, 1365, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1379, 556, 556, 0, 580, 580, 580, 985, 989, 992, 580, 1000, 580, 580, 580, 1015, 1017, 556, 556, 556, 1399, 556, 556, 556, 556, 556, 556, 556, 1412, 556, 556, 556, 556, 556, 556, 1858, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1402, 556, 556, 556, 556, 556, 556, 556, 1416, 556, 1436, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1450, 1457, 580, 580, 580, 580, 580, 3069, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1510, 580, 580, 580, 580, 580, 580, 1518, 580, 580, 580, 580, 0, 1266, 1450, 1358, 534, 534, 1320, 534, 534, 556, 556, 556, 556, 556, 3354, 556, 556, 556, 556, 556, 556, 3360, 556, 556, 556, 556, 556, 556, 2615, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2626, 580, 580, 580, 580, 580, 580, 556, 1412, 556, 556, 580, 580, 1504, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 661, 0, 0, 0, 0, 1570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, 1721, 1722, 534, 534, 534, 534, 1729, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 3177, 556, 556, 556, 3180, 556, 534, 1770, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1311, 534, 556, 556, 1824, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3204, 556, 556, 556, 1838, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3294, 556, 580, 1987, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 0, 2694, 2029, 0, 2030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2039, 0, 0, 0, 0, 0, 0, 1700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 534, 534, 2190, 534, 534, 534, 534, 534, 2195, 534, 534, 534, 534, 534, 534, 534, 1326, 534, 534, 534, 534, 534, 534, 534, 534, 1291, 534, 534, 534, 534, 534, 534, 534, 556, 2276, 556, 556, 556, 556, 556, 556, 2282, 556, 556, 556, 556, 556, 556, 556, 1810, 556, 556, 556, 556, 556, 556, 556, 556, 3188, 556, 556, 556, 556, 556, 556, 556, 580, 2363, 580, 580, 580, 580, 580, 580, 2369, 580, 580, 580, 580, 580, 580, 580, 2329, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3557, 0, 0, 0, 0, 534, 534, 580, 580, 2634, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1948, 580, 580, 0, 0, 0, 0, 2699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163840, 0, 0, 0, 534, 534, 534, 534, 534, 2778, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1779, 534, 534, 534, 534, 534, 534, 2809, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 2817, 556, 556, 556, 556, 556, 3465, 556, 3467, 556, 556, 3469, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3373, 580, 3375, 580, 556, 556, 556, 2858, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 1445, 580, 580, 580, 1454, 580, 580, 580, 2866, 580, 580, 580, 580, 580, 580, 2874, 580, 580, 580, 580, 580, 580, 580, 580, 1473, 580, 580, 580, 580, 580, 580, 580, 534, 2996, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1767, 1768, 3036, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2275, 580, 3078, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1966, 580, 0, 0, 0, 0, 3130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 0, 0, 0, 534, 534, 3174, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 1828, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 3535, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2991, 534, 534, 534, 3542, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3550, 580, 580, 580, 580, 580, 3082, 580, 580, 3085, 580, 580, 580, 580, 580, 580, 580, 1911, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3072, 580, 580, 580, 580, 580, 580, 463, 463, 463, 447, 447, 463, 447, 447, 447, 447, 447, 447, 447, 447, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 545, 568, 545, 568, 545, 545, 568, 545, 592, 568, 568, 568, 568, 568, 568, 568, 592, 592, 592, 545, 592, 592, 592, 592, 592, 592, 592, 568, 568, 545, 568, 592, 568, 592, 1, 12290, 0, 0, 0, 655, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 920, 556, 556, 934, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2841, 556, 556, 556, 556, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0, 0, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2461696, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2801664, 0, 0, 534, 534, 534, 534, 1322, 534, 534, 534, 534, 534, 1329, 534, 534, 534, 534, 534, 534, 534, 2505, 534, 2507, 534, 534, 534, 534, 534, 534, 534, 1793, 534, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 1359, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 965, 556, 556, 556, 556, 556, 1421, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1974, 1975, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2641, 580, 580, 580, 2644, 580, 556, 556, 1534, 556, 580, 580, 580, 1538, 580, 1066, 0, 1542, 0, 0, 0, 1548, 0, 0, 0, 1554, 0, 0, 0, 1560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2444, 0, 0, 0, 2448, 0, 0, 1599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1569, 534, 534, 1723, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1734, 534, 534, 534, 534, 534, 534, 892, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 2298, 0, 0, 0, 580, 580, 580, 580, 580, 580, 3480, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 3582, 534, 534, 534, 534, 556, 3586, 1754, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1316, 0, 2096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2108, 0, 534, 534, 534, 534, 2154, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3006, 534, 534, 534, 556, 556, 556, 2239, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1864, 556, 556, 1867, 580, 580, 580, 2326, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1512, 580, 580, 580, 556, 556, 3194, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1414, 556, 556, 0, 0, 3328, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 851, 534, 534, 534, 534, 534, 580, 580, 3379, 580, 580, 534, 556, 580, 0, 0, 0, 3384, 0, 0, 0, 0, 0, 0, 306, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 298, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 3395, 534, 534, 534, 534, 534, 534, 534, 2156, 534, 2158, 534, 534, 534, 534, 534, 534, 534, 2170, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2546, 534, 534, 534, 534, 0, 2549, 387, 389, 339, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 393, 394, 0, 395, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 1209, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 2405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 1099, 0, 0, 0, 338, 0, 0, 440, 0, 0, 464, 464, 464, 464, 464, 464, 464, 464, 546, 569, 546, 569, 546, 546, 569, 546, 475, 464, 464, 464, 493, 470, 493, 493, 493, 493, 493, 493, 493, 493, 464, 464, 470, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 474, 474, 464, 475, 464, 464, 464, 593, 569, 569, 569, 569, 569, 569, 569, 593, 593, 593, 546, 593, 593, 593, 593, 593, 593, 593, 569, 569, 546, 569, 593, 569, 593, 1, 12290, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 710, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1643, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2411, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 775, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 779, 656, 0, 0, 796, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 434, 0, 0, 331, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 796, 779, 0, 0, 801, 0, 660, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 2755, 0, 0, 0, 0, 0, 0, 0, 0, 2937, 0, 0, 0, 0, 0, 0, 0, 0, 2741, 0, 0, 0, 2745, 0, 2747, 0, 0, 0, 775, 801, 0, 801, 796, 0, 0, 0, 815, 0, 0, 0, 656, 818, 828, 0, 0, 0, 0, 534, 832, 534, 534, 534, 848, 534, 534, 862, 534, 534, 534, 534, 534, 534, 2504, 534, 534, 534, 534, 534, 534, 534, 534, 534, 898, 534, 556, 556, 556, 556, 556, 534, 534, 875, 534, 534, 534, 534, 893, 534, 534, 534, 556, 556, 904, 556, 556, 0, 580, 580, 976, 580, 580, 580, 580, 580, 580, 1007, 580, 580, 580, 580, 580, 1908, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1921, 556, 921, 556, 556, 935, 556, 556, 556, 556, 948, 556, 556, 556, 556, 966, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 3594, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3156, 534, 534, 534, 534, 534, 534, 534, 2802, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1795, 534, 534, 1341, 1800, 556, 556, 580, 1022, 580, 580, 580, 580, 1040, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 3428, 580, 580, 580, 580, 580, 534, 556, 580, 3381, 0, 3383, 0, 0, 0, 0, 0, 0, 0, 2126, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1717, 534, 534, 0, 0, 1131, 0, 364, 364, 0, 1134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2481, 0, 0, 0, 0, 0, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 1091, 0, 0, 0, 0, 0, 0, 0, 0, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 1, 12290, 1093, 0, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 1131, 0, 0, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2713, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 1248, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 841, 534, 534, 534, 534, 534, 534, 534, 556, 556, 1360, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1382, 580, 580, 1497, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2334, 580, 580, 556, 1533, 556, 556, 580, 580, 1537, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 1121, 0, 0, 1124, 1125, 0, 0, 0, 0, 1584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1614, 0, 0, 0, 1602, 0, 0, 1605, 0, 1607, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 0, 0, 1697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2423, 0, 534, 1755, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2162, 534, 556, 1822, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3049, 556, 556, 556, 556, 2265, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3031, 556, 556, 556, 556, 0, 0, 0, 0, 2402, 0, 2404, 0, 0, 2407, 0, 0, 0, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 2412, 0, 0, 0, 2415, 2416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2912256, 0, 3207168, 0, 0, 0, 0, 2440, 0, 2441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2470, 0, 0, 0, 0, 0, 2461, 0, 0, 0, 0, 0, 0, 0, 0, 2469, 0, 0, 0, 0, 0, 2475, 0, 0, 0, 0, 2478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2486, 0, 0, 0, 0, 435, 0, 0, 447, 463, 463, 463, 463, 463, 463, 463, 463, 463, 473, 463, 463, 463, 463, 463, 463, 534, 2500, 2501, 534, 534, 534, 534, 534, 2506, 534, 2508, 534, 534, 534, 534, 2512, 2525, 534, 534, 534, 534, 534, 534, 2533, 534, 534, 534, 534, 2537, 534, 534, 534, 534, 534, 534, 1262, 534, 534, 534, 534, 534, 534, 1277, 534, 534, 556, 556, 556, 2561, 556, 556, 2564, 2565, 556, 556, 556, 556, 556, 2570, 556, 2572, 556, 556, 556, 556, 2576, 556, 556, 556, 556, 556, 556, 556, 556, 2582, 556, 556, 0, 580, 580, 977, 580, 580, 580, 993, 580, 580, 580, 580, 580, 580, 1443, 580, 580, 580, 1447, 580, 580, 1458, 580, 580, 556, 556, 2602, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1833, 556, 556, 2685, 534, 534, 556, 2687, 556, 556, 580, 2689, 580, 580, 0, 0, 0, 0, 0, 0, 0, 2936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2036, 0, 0, 0, 0, 0, 0, 0, 0, 2708, 0, 0, 0, 0, 0, 0, 0, 2714, 2715, 2716, 0, 0, 0, 0, 0, 0, 2060, 0, 0, 0, 0, 0, 2064, 0, 0, 2066, 0, 2735, 0, 2737, 0, 0, 0, 2740, 0, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 2960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2430, 0, 0, 0, 0, 0, 2435, 534, 534, 2810, 534, 0, 0, 2811, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2566, 556, 556, 556, 556, 556, 556, 556, 2856, 556, 556, 2859, 556, 0, 0, 2860, 580, 580, 580, 580, 580, 580, 580, 2651, 580, 580, 580, 580, 580, 580, 2658, 580, 580, 2892, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2321, 580, 2902, 580, 580, 2905, 580, 580, 2908, 580, 2909, 2910, 2911, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 3115, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 420, 0, 65536, 0, 2929, 2930, 0, 0, 0, 0, 2935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2730, 0, 0, 0, 0, 0, 534, 534, 2997, 534, 2999, 534, 534, 534, 534, 534, 534, 3005, 534, 534, 3007, 534, 534, 534, 534, 534, 1324, 534, 534, 534, 534, 534, 534, 534, 534, 1335, 1336, 556, 3037, 556, 3039, 556, 556, 556, 556, 556, 556, 556, 3046, 556, 556, 3048, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 377, 0, 380, 0, 0, 0, 380, 0, 0, 580, 580, 3079, 580, 3081, 580, 580, 580, 580, 580, 580, 580, 3088, 580, 580, 3090, 534, 534, 534, 534, 534, 3164, 534, 534, 534, 534, 534, 534, 534, 3169, 534, 534, 534, 534, 534, 534, 2779, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3167, 534, 534, 534, 534, 534, 3181, 3182, 556, 556, 556, 556, 3186, 3187, 556, 556, 556, 556, 556, 3191, 556, 556, 0, 580, 580, 978, 580, 580, 580, 995, 580, 580, 1009, 580, 580, 580, 580, 580, 2353, 2354, 580, 580, 580, 580, 580, 580, 2361, 580, 580, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 3210, 3211, 580, 580, 580, 580, 580, 1442, 580, 580, 580, 580, 1448, 580, 580, 580, 580, 580, 580, 3524, 580, 3526, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 3215, 3216, 580, 580, 580, 580, 580, 3220, 580, 580, 580, 580, 580, 580, 580, 580, 1507, 580, 580, 580, 580, 580, 580, 580, 3226, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2684, 556, 556, 556, 3288, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2258, 556, 556, 556, 3307, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2347, 2348, 3132, 0, 0, 0, 0, 534, 534, 3393, 534, 534, 534, 534, 3398, 534, 534, 534, 534, 534, 534, 1290, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1267, 534, 534, 534, 534, 534, 534, 534, 3403, 534, 534, 556, 556, 3408, 556, 556, 556, 556, 3413, 556, 556, 556, 556, 556, 556, 1874, 556, 556, 556, 556, 556, 1881, 556, 556, 556, 3418, 556, 556, 556, 580, 580, 3424, 580, 580, 580, 580, 3429, 580, 580, 580, 580, 580, 1468, 580, 580, 580, 580, 580, 580, 580, 1476, 580, 580, 3434, 580, 580, 580, 0, 0, 0, 0, 0, 3441, 0, 0, 0, 0, 534, 534, 534, 534, 3497, 534, 534, 534, 534, 534, 534, 534, 534, 1731, 534, 534, 534, 534, 1735, 534, 534, 534, 3563, 3564, 534, 534, 556, 556, 556, 3569, 3570, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3212, 580, 580, 580, 3575, 3576, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 0, 580, 580, 979, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2358, 580, 580, 580, 580, 580, 341, 342, 343, 344, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 344, 344, 345, 344, 0, 343, 344, 448, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 480, 489, 489, 497, 489, 499, 489, 489, 499, 499, 489, 499, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 547, 570, 547, 570, 547, 547, 570, 547, 594, 570, 570, 570, 570, 570, 570, 570, 594, 594, 594, 547, 594, 594, 594, 594, 594, 594, 594, 570, 570, 547, 570, 594, 570, 594, 1, 12290, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 666, 0, 668, 669, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 1220, 1250, 1251, 0, 1220, 0, 534, 534, 534, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 692, 364, 364, 364, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1691, 0, 0, 0, 0, 712, 0, 714, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2138112, 0, 0, 0, 0, 0, 0, 639, 745, 746, 747, 0, 0, 0, 0, 0, 753, 754, 0, 0, 0, 0, 0, 748, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 1134592, 0, 0, 0, 0, 0, 685, 0, 0, 665, 0, 685, 0, 797, 668, 716, 0, 685, 798, 0, 0, 0, 0, 0, 1090, 1091, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 2948, 0, 0, 0, 0, 0, 2951, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 747, 807, 808, 0, 0, 0, 0, 0, 1119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3055616, 0, 0, 0, 3133440, 0, 0, 0, 0, 747, 0, 0, 812, 692, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0, 2073, 0, 2075, 0, 0, 0, 0, 0, 0, 0, 0, 1702, 0, 0, 1703, 0, 0, 1704, 0, 819, 0, 0, 0, 685, 692, 0, 0, 685, 817, 817, 0, 0, 0, 0, 0, 0, 0, 3131, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 756, 870, 873, 534, 534, 534, 885, 889, 534, 534, 534, 534, 556, 556, 556, 911, 915, 918, 556, 926, 556, 556, 556, 941, 943, 946, 556, 556, 556, 958, 962, 556, 556, 0, 580, 580, 980, 986, 580, 580, 580, 580, 1004, 580, 580, 580, 580, 580, 1469, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2627, 580, 580, 2630, 2631, 580, 1020, 580, 580, 580, 1032, 1036, 580, 580, 580, 580, 0, 0, 0, 1048, 1049, 1050, 838, 534, 885, 889, 1055, 911, 556, 958, 962, 1060, 0, 985, 580, 1032, 1036, 1065, 1101, 0, 0, 0, 0, 1105, 0, 0, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 1, 12290, 1298, 534, 534, 1302, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1312, 534, 534, 534, 534, 534, 1727, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1796, 534, 1341, 0, 556, 556, 534, 1319, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1332, 534, 534, 534, 534, 534, 534, 1304, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1266, 1273, 534, 534, 534, 534, 534, 556, 1383, 556, 556, 556, 556, 556, 556, 556, 1390, 556, 556, 1394, 556, 556, 556, 556, 556, 1385, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2595, 556, 556, 556, 556, 556, 580, 580, 580, 1482, 580, 580, 1486, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1929, 580, 580, 580, 580, 580, 580, 580, 1496, 580, 580, 1503, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1516, 1615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1655, 0, 0, 0, 1647, 0, 1649, 0, 0, 0, 1651, 0, 741, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 69632, 73728, 0, 418, 418, 0, 0, 65536, 418, 0, 0, 0, 534, 1709, 534, 534, 534, 534, 534, 534, 1715, 534, 534, 534, 534, 0, 0, 556, 2812, 556, 556, 556, 556, 556, 556, 556, 556, 3356, 556, 556, 556, 556, 556, 556, 556, 534, 534, 1787, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 1803, 556, 556, 556, 556, 1839, 556, 556, 556, 1843, 556, 556, 1848, 556, 556, 556, 556, 556, 556, 1892, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 1269, 1453, 1361, 534, 534, 534, 534, 534, 556, 580, 580, 580, 1906, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1917, 580, 580, 580, 1935, 580, 580, 580, 1939, 580, 580, 1944, 580, 580, 580, 580, 580, 580, 580, 580, 1945, 580, 580, 580, 580, 580, 580, 580, 0, 0, 2010, 0, 1077, 0, 0, 0, 2012, 0, 1081, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 3147, 0, 534, 534, 534, 2177, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 1800, 556, 556, 556, 556, 2263, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1850, 556, 556, 580, 580, 2350, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2346, 580, 580, 0, 2550, 0, 1800, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2569, 556, 2571, 556, 556, 2613, 556, 556, 556, 0, 0, 0, 2616, 0, 1896, 580, 580, 580, 580, 580, 580, 3219, 580, 580, 580, 580, 580, 580, 580, 580, 3225, 0, 0, 2761, 0, 0, 0, 534, 2765, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3166, 534, 534, 534, 534, 534, 3171, 534, 534, 2789, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1295, 534, 534, 556, 556, 2836, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1865, 556, 556, 534, 534, 2985, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1310, 534, 534, 534, 534, 534, 2998, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 1801, 556, 556, 556, 3025, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3205, 556, 556, 3038, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2247, 556, 556, 580, 580, 3067, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2643, 580, 580, 580, 580, 580, 3080, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2345, 580, 580, 580, 534, 534, 534, 534, 534, 3267, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2159, 534, 534, 534, 534, 2163, 3285, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2289, 3336, 534, 534, 534, 534, 3340, 534, 534, 534, 534, 534, 3346, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 0, 1545, 0, 0, 0, 0, 0, 1620, 0, 0, 1623, 0, 1625, 0, 0, 0, 0, 0, 0, 0, 2480, 0, 0, 0, 0, 0, 0, 0, 0, 555, 578, 555, 578, 555, 555, 578, 555, 556, 556, 3351, 556, 556, 556, 556, 3355, 556, 556, 556, 556, 556, 3361, 556, 556, 0, 580, 580, 981, 580, 580, 580, 580, 580, 580, 1010, 1012, 580, 580, 580, 580, 1029, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 3377, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3251, 0, 3132, 3253, 0, 0, 3256, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 3396, 534, 534, 534, 3400, 534, 534, 534, 534, 534, 1742, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2536, 534, 534, 534, 534, 534, 388, 0, 0, 0, 392, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233472, 0, 0, 0, 0, 0, 0, 0, 404, 0, 346, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 515, 515, 515, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 515, 515, 515, 515, 515, 515, 515, 548, 571, 548, 571, 548, 548, 571, 548, 595, 571, 571, 571, 571, 571, 571, 571, 595, 595, 595, 548, 595, 595, 595, 595, 595, 595, 595, 571, 571, 610, 615, 595, 615, 621, 1, 12290, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1668, 534, 534, 876, 534, 534, 534, 534, 894, 534, 534, 534, 556, 556, 905, 556, 556, 0, 580, 580, 982, 580, 580, 580, 580, 1001, 1005, 1011, 580, 1016, 580, 580, 1023, 580, 580, 580, 580, 1041, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 1544, 0, 0, 0, 0, 0, 0, 2764, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1268, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 1178, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 274432, 274432, 274432, 0, 274432, 274432, 274432, 274432, 1256, 534, 534, 534, 534, 534, 534, 534, 534, 1269, 534, 534, 534, 534, 1279, 534, 534, 534, 534, 534, 1757, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2197, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 901, 556, 556, 556, 1347, 556, 556, 556, 556, 556, 556, 556, 1877, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 1899, 580, 580, 580, 580, 556, 556, 1361, 556, 556, 556, 556, 1371, 556, 556, 556, 556, 556, 556, 556, 556, 3468, 556, 556, 3470, 556, 580, 580, 580, 556, 556, 556, 556, 1422, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1990, 1991, 1992, 534, 1994, 534, 534, 556, 1998, 556, 556, 580, 580, 580, 3367, 580, 580, 580, 580, 3371, 580, 580, 580, 580, 580, 580, 3232, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2384, 534, 534, 534, 2388, 556, 556, 556, 580, 580, 1439, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1453, 580, 580, 580, 580, 580, 2381, 2382, 2383, 534, 534, 534, 534, 556, 556, 556, 556, 3410, 556, 556, 556, 556, 556, 556, 556, 580, 1463, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1477, 580, 580, 1498, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1514, 580, 580, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 2034, 2035, 0, 2037, 2038, 0, 0, 0, 0, 0, 0, 0, 1555, 0, 0, 0, 1561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 1, 12290, 0, 0, 0, 1586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 1600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434, 0, 556, 1852, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3363, 0, 1556, 0, 0, 0, 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 305, 204800, 204800, 0, 205105, 204800, 1, 12290, 0, 0, 0, 2070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 2111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 0, 534, 2165, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2173, 534, 2250, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2584, 2337, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2375, 580, 2211, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2597, 556, 556, 556, 556, 556, 556, 2588, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2831, 556, 556, 556, 534, 3107, 556, 3109, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2138112, 1170, 0, 0, 0, 0, 0, 3132, 3330, 0, 0, 3332, 0, 0, 0, 0, 0, 534, 3335, 534, 534, 534, 534, 534, 1774, 534, 534, 534, 1778, 534, 534, 534, 534, 534, 534, 534, 1776, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2535, 534, 534, 534, 534, 534, 534, 534, 3337, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 3350, 556, 556, 3352, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2852, 556, 556, 556, 556, 556, 580, 3366, 580, 580, 3368, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1946, 580, 580, 580, 580, 580, 580, 3132, 0, 3388, 0, 3390, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 902, 556, 556, 0, 0, 0, 783, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 2557, 556, 556, 556, 556, 556, 556, 2848, 556, 556, 556, 556, 556, 556, 556, 556, 556, 947, 556, 556, 556, 556, 556, 556, 556, 922, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1381, 556, 556, 972, 0, 580, 580, 580, 580, 580, 580, 996, 580, 580, 580, 580, 580, 580, 1910, 580, 580, 580, 580, 1916, 580, 580, 580, 580, 78114, 1066, 0, 0, 1070, 1074, 0, 0, 1078, 1082, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 0, 0, 0, 1225, 0, 1181, 0, 534, 3162, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2201, 534, 580, 580, 580, 3218, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2629, 580, 580, 580, 347, 347, 349, 347, 0, 0, 347, 347, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 2125, 0, 0, 2128, 0, 534, 534, 2131, 534, 534, 0, 0, 0, 347, 347, 349, 347, 347, 347, 347, 347, 347, 506, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 549, 572, 549, 572, 549, 549, 572, 549, 596, 572, 572, 572, 572, 572, 572, 572, 596, 596, 596, 549, 596, 596, 596, 596, 596, 596, 596, 572, 572, 549, 572, 596, 572, 596, 1, 12290, 0, 0, 0, 715, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1147348, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 354, 355, 356, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 674, 0, 0, 0, 0, 0, 0, 0, 794, 795, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 795, 0, 0, 794, 809, 0, 803, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 534, 534, 839, 534, 534, 534, 534, 857, 534, 534, 534, 534, 534, 534, 1728, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3272, 534, 534, 534, 3273, 3274, 534, 534, 877, 879, 534, 534, 890, 534, 534, 534, 534, 556, 556, 906, 912, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 1543, 0, 0, 0, 1549, 556, 556, 556, 930, 556, 556, 556, 556, 556, 950, 952, 556, 556, 963, 556, 556, 556, 556, 556, 1840, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1831, 556, 556, 556, 556, 1835, 580, 1024, 1026, 580, 580, 1037, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 1540, 0, 0, 0, 1546, 0, 0, 0, 0, 0, 131072, 0, 131072, 131072, 131072, 131072, 0, 131072, 131072, 131072, 131072, 131072, 131072, 0, 0, 0, 0, 0, 131072, 0, 131072, 1, 12290, 839, 879, 534, 890, 534, 912, 952, 556, 963, 556, 0, 986, 1026, 580, 1037, 580, 580, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 2397, 0, 0, 0, 0, 0, 330, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2731, 0, 0, 0, 0, 0, 0, 1132, 364, 364, 0, 0, 1135, 0, 0, 0, 1138, 0, 1140, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 2556, 556, 556, 556, 556, 556, 556, 2577, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1897, 580, 580, 580, 580, 580, 580, 1142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 2555, 556, 556, 556, 556, 2559, 1158, 0, 0, 0, 0, 1163, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 0, 1168, 534, 534, 534, 534, 534, 534, 1743, 534, 534, 534, 534, 534, 534, 534, 534, 534, 897, 534, 556, 556, 556, 556, 914, 534, 534, 534, 1286, 1288, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 907, 556, 556, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 1348, 556, 556, 556, 556, 556, 556, 0, 2298, 580, 580, 580, 580, 580, 580, 580, 580, 2640, 580, 580, 580, 580, 580, 580, 2645, 580, 580, 580, 1440, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2670, 2671, 580, 580, 1494, 580, 580, 580, 580, 580, 580, 580, 1508, 580, 580, 580, 580, 580, 580, 580, 2678, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 1996, 556, 556, 556, 2000, 580, 580, 1519, 1520, 580, 580, 580, 0, 534, 580, 556, 534, 1528, 534, 534, 1531, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 1541, 0, 0, 0, 1547, 0, 0, 0, 0, 556, 556, 556, 2553, 556, 2554, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 2863, 580, 580, 580, 1532, 556, 556, 1535, 580, 1536, 580, 580, 1539, 1066, 0, 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1203, 0, 0, 0, 0, 1633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 1658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 1698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 0, 0, 534, 1738, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2207, 2549, 534, 534, 534, 1788, 534, 534, 534, 534, 1794, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 556, 1891, 556, 556, 26009, 1896, 580, 580, 580, 580, 580, 580, 1470, 1472, 580, 580, 580, 580, 580, 580, 580, 580, 1960, 580, 580, 1963, 580, 580, 580, 580, 556, 556, 1870, 556, 556, 556, 1875, 556, 556, 556, 556, 556, 556, 556, 556, 1884, 556, 556, 556, 556, 1890, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 1927, 580, 580, 580, 580, 1931, 580, 580, 580, 580, 580, 1904, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2672, 580, 580, 580, 1971, 580, 580, 580, 580, 580, 580, 580, 580, 1980, 580, 580, 580, 580, 580, 1504, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2316, 580, 580, 2320, 580, 580, 1986, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 2693, 0, 0, 0, 0, 0, 2099, 0, 2101, 2102, 2103, 0, 2105, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 424, 65536, 0, 0, 0, 0, 2123, 0, 0, 0, 0, 0, 0, 0, 2129, 534, 534, 534, 534, 0, 2211, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3045, 556, 556, 556, 556, 556, 534, 534, 2136, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1333, 534, 534, 534, 534, 534, 2166, 534, 2168, 534, 2171, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3271, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2178, 534, 534, 534, 534, 534, 2184, 534, 534, 534, 534, 534, 534, 534, 2792, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2519, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2206, 0, 0, 0, 0, 2213, 556, 556, 556, 556, 556, 556, 939, 556, 944, 556, 951, 556, 954, 556, 556, 968, 556, 2221, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1415, 556, 556, 556, 2251, 556, 2253, 556, 2256, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2607, 556, 556, 556, 2610, 556, 556, 556, 556, 556, 2264, 556, 556, 556, 556, 556, 2270, 556, 556, 556, 556, 556, 556, 1369, 556, 556, 556, 1374, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2293, 0, 0, 0, 0, 2300, 580, 580, 580, 580, 580, 580, 1942, 580, 580, 580, 1947, 580, 580, 580, 580, 580, 580, 2308, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2880, 580, 580, 580, 2338, 580, 2340, 580, 2343, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1961, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2351, 580, 580, 580, 580, 580, 2357, 580, 580, 580, 580, 580, 580, 1958, 1959, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3234, 580, 580, 580, 534, 580, 556, 0, 0, 2400, 2401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 2436, 0, 0, 2439, 0, 0, 0, 0, 2443, 0, 0, 0, 0, 0, 0, 0, 0, 2818048, 2846720, 0, 2916352, 0, 0, 3002368, 0, 0, 0, 2451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2459, 0, 0, 0, 0, 556, 556, 2552, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2851, 556, 556, 556, 556, 556, 556, 0, 0, 0, 2477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2485, 0, 0, 0, 0, 0, 1195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111044, 0, 0, 0, 0, 534, 534, 534, 534, 534, 2503, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2520, 534, 534, 534, 534, 534, 556, 556, 556, 556, 2562, 556, 556, 556, 556, 556, 2567, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 2304, 580, 580, 580, 2633, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2901, 580, 534, 534, 534, 2686, 556, 556, 556, 2688, 580, 580, 580, 2690, 2691, 0, 0, 0, 0, 0, 0, 2453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 2709, 0, 2710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 0, 0, 0, 2855, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 2864, 580, 2865, 580, 580, 2904, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3113, 0, 0, 0, 0, 0, 0, 0, 0, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 1, 12290, 556, 556, 556, 3053, 556, 556, 556, 556, 556, 556, 556, 580, 3061, 580, 580, 580, 580, 580, 2649, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2371, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3095, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 2386, 2387, 556, 556, 2390, 2391, 534, 534, 3338, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3347, 534, 534, 3349, 556, 556, 556, 556, 3353, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3362, 556, 556, 556, 556, 580, 580, 580, 580, 580, 3427, 580, 580, 580, 3431, 580, 580, 580, 580, 1031, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 3365, 580, 580, 580, 580, 3369, 580, 580, 580, 580, 580, 580, 580, 580, 2356, 580, 580, 580, 580, 580, 580, 580, 580, 3378, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 3449, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 3179, 556, 556, 556, 556, 556, 3462, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 3300, 580, 580, 580, 3303, 580, 580, 580, 580, 580, 3476, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 0, 3491, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3158, 534, 534, 534, 534, 534, 3565, 534, 556, 556, 556, 556, 556, 3571, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3372, 580, 580, 580, 580, 580, 580, 3577, 580, 580, 3579, 0, 3581, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 2224, 556, 556, 2227, 556, 556, 556, 556, 556, 556, 2235, 400, 0, 0, 0, 0, 0, 367, 375, 403, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2054, 408, 410, 0, 0, 367, 375, 0, 69632, 73728, 0, 0, 0, 0, 426, 65536, 0, 0, 0, 0, 556, 2551, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2271, 556, 556, 556, 556, 556, 426, 426, 0, 426, 0, 410, 426, 449, 0, 0, 0, 0, 0, 0, 0, 0, 534, 556, 534, 556, 534, 534, 556, 534, 367, 0, 0, 395, 0, 0, 0, 0, 0, 350, 0, 0, 367, 0, 0, 395, 0, 408, 0, 490, 490, 0, 490, 490, 490, 490, 490, 490, 490, 490, 516, 516, 516, 516, 449, 449, 449, 449, 524, 449, 449, 525, 449, 516, 530, 516, 516, 516, 530, 516, 516, 516, 516, 532, 550, 573, 550, 573, 550, 550, 573, 550, 597, 573, 573, 573, 573, 573, 573, 573, 597, 597, 597, 550, 597, 597, 597, 597, 597, 597, 597, 573, 573, 611, 616, 597, 616, 622, 1, 12290, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1567, 1568, 0, 789, 0, 0, 0, 0, 534, 834, 534, 534, 534, 534, 534, 534, 863, 865, 534, 534, 534, 534, 534, 1790, 1792, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 0, 580, 580, 580, 983, 987, 580, 580, 580, 580, 580, 580, 1013, 580, 556, 556, 556, 556, 936, 938, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2829, 556, 556, 2832, 556, 556, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1083, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2050, 0, 0, 0, 0, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 0, 0, 0, 0, 0, 1235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1581, 1582, 0, 0, 0, 0, 1085, 1208, 0, 0, 0, 0, 0, 0, 1215, 0, 0, 0, 0, 0, 0, 347, 348, 349, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 1220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 1229, 534, 534, 534, 1259, 534, 534, 534, 1263, 534, 534, 1274, 534, 534, 1278, 534, 534, 534, 534, 534, 534, 3001, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1327, 534, 534, 534, 534, 534, 534, 534, 1299, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2497, 534, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 1351, 556, 556, 556, 556, 556, 1423, 556, 556, 556, 1430, 556, 556, 26009, 1341, 975, 580, 1355, 556, 556, 1366, 556, 556, 1370, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2828, 556, 556, 556, 556, 556, 556, 1462, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3315, 580, 1479, 580, 580, 580, 1483, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2877, 580, 580, 580, 580, 0, 1571, 1572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1612, 0, 0, 0, 0, 0, 0, 1603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 696, 0, 1616, 0, 1618, 0, 0, 0, 1622, 0, 0, 0, 1626, 0, 0, 0, 1630, 0, 0, 0, 0, 1572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 695, 0, 534, 534, 534, 1724, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1782, 1783, 534, 534, 556, 1837, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1818, 556, 556, 556, 556, 1889, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 1976, 580, 580, 580, 580, 580, 1981, 580, 580, 580, 0, 0, 0, 2031, 0, 2032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200246, 151552, 2200246, 0, 0, 2175, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2186, 534, 534, 534, 534, 534, 534, 1758, 534, 534, 534, 534, 1764, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 2814, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 2301, 580, 580, 580, 580, 580, 1038, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 580, 580, 2394, 2395, 0, 1544, 0, 1550, 0, 1556, 0, 1562, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2052, 0, 0, 2476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2482, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 345, 344, 65536, 343, 534, 534, 534, 534, 2530, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1275, 534, 534, 534, 534, 580, 2661, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3075, 580, 580, 0, 0, 2722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1665, 0, 0, 534, 2797, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2511, 534, 556, 556, 2845, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2259, 556, 556, 0, 0, 2970, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 855, 534, 534, 534, 534, 0, 0, 0, 0, 3122, 3123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 3149, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1737, 3172, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 2242, 556, 556, 556, 556, 556, 556, 556, 556, 1406, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 3229, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 3426, 580, 580, 580, 580, 580, 580, 580, 2639, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2344, 580, 580, 580, 580, 580, 580, 534, 3236, 556, 3238, 580, 3240, 3241, 0, 0, 0, 0, 3245, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 397, 0, 0, 0, 323, 0, 0, 0, 3258, 0, 0, 0, 0, 0, 0, 0, 0, 3261, 0, 534, 534, 534, 534, 534, 534, 534, 3154, 3155, 534, 534, 534, 534, 3159, 3160, 3263, 534, 534, 534, 3266, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1330, 534, 534, 534, 534, 580, 580, 3318, 534, 3319, 556, 3320, 580, 0, 0, 0, 0, 0, 0, 0, 0, 543, 566, 543, 566, 543, 543, 566, 543, 556, 556, 3543, 556, 3544, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 3551, 580, 3552, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 3536, 534, 3537, 534, 534, 534, 534, 534, 534, 534, 1730, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2183, 534, 534, 534, 534, 534, 534, 409, 355, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 638, 0, 0, 641, 642, 0, 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, 1594, 0, 0, 0, 0, 466, 477, 466, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 517, 517, 521, 521, 521, 521, 466, 466, 466, 466, 466, 466, 466, 471, 466, 521, 517, 521, 521, 517, 521, 521, 521, 521, 533, 551, 574, 551, 574, 551, 551, 574, 551, 598, 574, 574, 574, 574, 574, 574, 574, 598, 598, 598, 551, 598, 598, 598, 598, 598, 598, 598, 574, 574, 612, 617, 598, 617, 623, 1, 12290, 0, 0, 731, 0, 0, 0, 637, 731, 0, 737, 738, 637, 0, 0, 0, 0, 0, 0, 656, 0, 0, 659, 660, 0, 0, 0, 0, 0, 0, 0, 2754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2420, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 791, 0, 0, 0, 0, 0, 1575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 303, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2016, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 349, 347, 65536, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 777, 777, 0, 637, 0, 0, 0, 786, 0, 791, 0, 777, 0, 806, 0, 0, 0, 658, 0, 777, 791, 829, 0, 534, 835, 534, 534, 534, 534, 854, 858, 864, 534, 869, 556, 556, 927, 931, 937, 556, 942, 556, 556, 556, 556, 556, 959, 556, 556, 556, 556, 556, 1424, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 534, 534, 886, 534, 534, 556, 556, 959, 556, 556, 0, 580, 580, 1033, 580, 580, 580, 580, 1033, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 1086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2449, 0, 0, 0, 0, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0, 1117, 1118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 208896, 0, 0, 0, 0, 0, 0, 1179, 0, 1182, 0, 0, 0, 0, 0, 1187, 0, 0, 0, 0, 0, 0, 2726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 1086, 0, 0, 0, 1211, 0, 1213, 0, 0, 0, 0, 0, 0, 0, 1638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2964, 2965, 0, 0, 1230, 1187, 0, 1211, 1233, 0, 1236, 0, 0, 0, 0, 0, 1117, 0, 0, 0, 0, 0, 0, 2739, 0, 0, 0, 0, 2744, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 303, 2424832, 2433024, 0, 0, 2457600, 0, 1245, 0, 0, 0, 0, 0, 1245, 0, 0, 1136, 1245, 0, 1252, 534, 534, 534, 534, 534, 534, 3279, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3514, 556, 556, 556, 580, 534, 534, 1258, 534, 534, 534, 534, 1264, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3455, 534, 534, 3457, 556, 556, 556, 534, 534, 1285, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1296, 534, 534, 534, 534, 534, 534, 3341, 534, 534, 534, 534, 534, 534, 534, 534, 556, 580, 3607, 3608, 3609, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 333, 0, 0, 333, 0, 0, 333, 0, 0, 0, 534, 534, 1301, 534, 534, 534, 534, 534, 534, 534, 534, 1308, 534, 534, 534, 1315, 1317, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2149, 534, 1339, 534, 1341, 901, 1343, 556, 556, 556, 556, 556, 1350, 556, 556, 556, 556, 556, 556, 2225, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2244, 556, 556, 556, 556, 2248, 556, 1356, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1377, 556, 556, 556, 556, 556, 556, 2241, 556, 2243, 556, 556, 556, 556, 556, 556, 556, 1425, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 556, 556, 1400, 556, 556, 556, 1407, 1409, 556, 556, 556, 556, 556, 556, 1386, 556, 556, 556, 556, 556, 556, 556, 1395, 556, 1480, 580, 580, 580, 580, 1485, 580, 580, 580, 580, 580, 580, 580, 580, 1492, 580, 580, 580, 580, 2352, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2628, 580, 580, 580, 580, 580, 580, 1499, 1501, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2878, 580, 580, 2881, 1550, 0, 0, 0, 1556, 0, 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 2957312, 0, 0, 0, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2094, 0, 0, 0, 1573, 1574, 0, 0, 0, 0, 0, 1580, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 373, 0, 65536, 0, 0, 0, 1601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1677, 0, 0, 0, 0, 0, 0, 1619, 0, 0, 0, 0, 0, 0, 0, 1627, 1628, 0, 0, 0, 0, 0, 1604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254407, 0, 0, 0, 0, 0, 0, 0, 0, 1635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 386, 0, 0, 0, 1685, 0, 0, 0, 0, 0, 1689, 0, 0, 1692, 0, 0, 0, 0, 0, 0, 3143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2756, 0, 0, 2759, 0, 0, 0, 0, 0, 0, 1689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1705, 0, 1707, 1681, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1719, 534, 534, 534, 534, 534, 1791, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 556, 2295, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2666, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1446, 580, 580, 580, 580, 580, 580, 534, 534, 534, 1725, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1736, 534, 534, 534, 534, 534, 2179, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2143, 534, 2145, 534, 534, 534, 534, 534, 534, 1740, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1751, 534, 534, 534, 534, 534, 2207, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1403, 556, 556, 556, 556, 556, 556, 556, 556, 1408, 556, 556, 556, 556, 556, 556, 556, 534, 534, 1756, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2172, 534, 534, 2002, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 2019, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 2055, 2056, 0, 0, 2058, 2059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2617344, 0, 0, 0, 0, 2081, 0, 0, 0, 0, 2084, 2085, 0, 0, 0, 0, 0, 2091, 0, 0, 0, 0, 0, 0, 3259, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 849, 534, 534, 534, 534, 534, 534, 534, 2152, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2161, 534, 534, 534, 534, 534, 534, 3452, 534, 3454, 534, 534, 3456, 534, 556, 556, 556, 556, 3509, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 0, 0, 3595, 534, 534, 2164, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2174, 534, 534, 534, 2191, 534, 534, 534, 2194, 534, 534, 534, 534, 2199, 534, 534, 534, 534, 534, 534, 1759, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1732, 534, 534, 534, 534, 534, 534, 556, 2237, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2246, 556, 556, 2249, 556, 556, 2277, 556, 556, 556, 556, 2281, 556, 556, 556, 556, 2286, 556, 556, 556, 556, 556, 1808, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2608, 556, 556, 556, 556, 556, 580, 2324, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2333, 580, 580, 2336, 580, 580, 2364, 580, 580, 580, 580, 2368, 580, 580, 580, 580, 2373, 580, 580, 580, 580, 580, 2665, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1979, 580, 580, 580, 580, 580, 2398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2408, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 770, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 534, 534, 2488, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2496, 534, 534, 534, 534, 534, 882, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3411, 556, 556, 556, 3415, 556, 556, 534, 534, 2514, 534, 534, 2516, 534, 2517, 534, 534, 534, 534, 534, 534, 534, 2524, 534, 534, 2528, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2539, 556, 556, 2560, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3472, 580, 580, 556, 556, 556, 2575, 556, 556, 556, 2578, 556, 556, 2580, 556, 2581, 556, 556, 556, 556, 556, 1827, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1814, 556, 556, 556, 556, 1820, 580, 2646, 580, 2647, 580, 580, 580, 580, 580, 580, 580, 580, 2655, 580, 580, 2659, 0, 2696, 2697, 0, 0, 2700, 2701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3178496, 2670592, 0, 2744320, 0, 0, 2772, 534, 2775, 534, 534, 534, 534, 2780, 534, 534, 534, 2783, 534, 534, 534, 534, 534, 534, 534, 3002, 3003, 534, 534, 534, 534, 534, 534, 534, 534, 2494, 534, 534, 534, 534, 534, 534, 534, 534, 1744, 534, 534, 534, 1748, 534, 534, 1753, 2808, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3358, 556, 556, 556, 556, 556, 2819, 556, 2822, 556, 556, 556, 556, 2827, 556, 556, 556, 2830, 556, 556, 556, 556, 556, 556, 2255, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2228, 556, 2230, 556, 556, 556, 556, 556, 556, 2857, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 2652, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2868, 580, 2871, 580, 580, 580, 580, 2876, 580, 580, 580, 2879, 580, 580, 580, 580, 1034, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 580, 580, 580, 580, 2906, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 3112, 0, 3114, 0, 0, 0, 3118, 0, 0, 534, 534, 534, 534, 3013, 534, 534, 534, 534, 534, 556, 556, 556, 3021, 556, 556, 556, 556, 556, 2266, 2267, 556, 556, 556, 556, 556, 556, 2274, 556, 556, 0, 580, 580, 580, 580, 580, 580, 994, 580, 580, 1008, 580, 580, 580, 580, 580, 2341, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 733, 534, 580, 556, 0, 0, 3121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1693, 0, 0, 534, 3173, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 2839, 556, 556, 556, 556, 556, 556, 556, 556, 1811, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3183, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3033, 556, 556, 556, 556, 3193, 556, 556, 556, 556, 556, 556, 3199, 556, 3201, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 2303, 580, 2305, 580, 580, 580, 3228, 580, 3230, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 556, 556, 556, 580, 3423, 580, 3425, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2888, 580, 580, 580, 580, 580, 580, 0, 0, 0, 3248, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3334, 534, 534, 0, 3257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2982, 534, 534, 3264, 534, 534, 534, 3268, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1328, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3277, 534, 534, 534, 556, 556, 556, 556, 556, 3282, 556, 556, 556, 556, 556, 2294, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 3482, 580, 580, 3484, 580, 0, 0, 0, 556, 3286, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1883, 556, 3295, 556, 556, 556, 556, 580, 580, 580, 580, 580, 3301, 580, 580, 580, 3305, 580, 580, 580, 580, 2380, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 534, 3601, 556, 3602, 580, 3603, 3489, 0, 0, 0, 534, 534, 534, 3496, 534, 534, 534, 534, 534, 534, 534, 534, 1265, 534, 534, 534, 534, 534, 534, 534, 3504, 556, 556, 556, 3508, 556, 556, 556, 556, 556, 556, 556, 556, 3516, 556, 580, 580, 580, 580, 2624, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1475, 580, 580, 580, 580, 580, 580, 3521, 580, 580, 580, 580, 580, 580, 580, 580, 3529, 580, 0, 0, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 0, 122880, 0, 2105631, 12290, 0, 3532, 0, 3534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3540, 3541, 534, 534, 534, 534, 534, 2208, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1387, 556, 556, 556, 1391, 556, 556, 556, 556, 556, 357, 358, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 735, 654, 467, 467, 481, 0, 0, 481, 358, 358, 358, 503, 358, 358, 358, 358, 467, 467, 599, 575, 575, 575, 575, 575, 575, 575, 599, 599, 599, 552, 599, 599, 599, 599, 599, 599, 599, 575, 575, 552, 575, 599, 575, 599, 1, 12290, 556, 556, 928, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 964, 556, 556, 556, 556, 556, 2294, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 2924, 0, 0, 0, 0, 0, 0, 534, 534, 534, 891, 534, 556, 556, 556, 964, 556, 0, 580, 580, 580, 1038, 580, 580, 580, 580, 2636, 580, 2638, 580, 580, 580, 580, 2642, 580, 580, 580, 580, 0, 0, 0, 3440, 0, 0, 0, 3443, 0, 0, 534, 534, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1084, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2432, 0, 0, 0, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2132, 2133, 534, 534, 1340, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1353, 556, 556, 556, 556, 580, 3590, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 1713, 534, 534, 534, 534, 534, 534, 534, 2140, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2990, 534, 534, 534, 534, 534, 534, 556, 556, 1362, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3047, 556, 556, 556, 0, 1551, 0, 0, 0, 1557, 0, 0, 0, 1563, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 1656, 0, 0, 0, 0, 0, 0, 0, 0, 1662, 0, 1664, 0, 0, 0, 0, 0, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 1, 12290, 534, 534, 1771, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2523, 534, 534, 556, 556, 1854, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1866, 556, 556, 556, 556, 932, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1815, 556, 556, 556, 556, 556, 1887, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 2312, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1488, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1924, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3073, 580, 580, 580, 580, 580, 1937, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1950, 580, 580, 580, 580, 2648, 580, 580, 580, 580, 580, 580, 580, 580, 2656, 580, 580, 580, 580, 580, 3231, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 580, 580, 580, 1973, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1983, 580, 580, 580, 580, 1484, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3222, 580, 580, 580, 580, 0, 0, 0, 2043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 1171, 0, 0, 534, 2151, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2795, 534, 2236, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2600, 2323, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3089, 580, 580, 580, 580, 2622, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3224, 580, 580, 2695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2120, 2734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2719, 534, 2774, 534, 2776, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2160, 534, 534, 534, 556, 2821, 556, 2823, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3190, 556, 556, 556, 580, 580, 580, 2870, 580, 2872, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2654, 580, 580, 580, 580, 580, 0, 0, 0, 0, 2933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2981, 534, 556, 556, 556, 556, 3289, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3202, 556, 556, 556, 556, 580, 3308, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3314, 580, 580, 556, 556, 3589, 556, 580, 580, 580, 580, 3593, 580, 0, 0, 0, 534, 534, 534, 3152, 534, 534, 534, 534, 534, 534, 534, 3157, 534, 534, 534, 0, 0, 359, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2600960, 0, 0, 2768896, 2777088, 2781184, 0, 0, 369, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2040, 2041, 0, 600, 576, 576, 576, 576, 576, 576, 576, 600, 600, 600, 553, 600, 600, 600, 600, 600, 600, 600, 576, 576, 553, 576, 600, 576, 600, 1, 12290, 556, 923, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2234, 556, 556, 556, 556, 556, 1367, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3547, 3548, 556, 556, 580, 580, 580, 580, 580, 1500, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3102, 3103, 3104, 534, 1646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2748, 0, 0, 1684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2065, 0, 0, 580, 580, 580, 1938, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3223, 580, 580, 580, 0, 0, 0, 2723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 2942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2760, 0, 0, 0, 0, 3249, 0, 3250, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 3333, 0, 534, 534, 534, 0, 0, 0, 360, 361, 362, 363, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2445, 0, 0, 0, 0, 0, 0, 361, 0, 360, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 427, 65536, 0, 0, 0, 0, 685, 534, 534, 838, 842, 845, 534, 853, 534, 534, 534, 868, 427, 427, 0, 427, 0, 361, 427, 450, 0, 0, 0, 0, 0, 0, 0, 0, 690, 691, 0, 364, 364, 364, 0, 0, 0, 0, 0, 491, 491, 0, 498, 498, 498, 498, 504, 505, 498, 498, 518, 518, 518, 518, 450, 450, 450, 450, 450, 450, 450, 450, 450, 518, 518, 518, 518, 518, 518, 518, 518, 554, 577, 554, 577, 554, 554, 577, 554, 601, 577, 577, 577, 577, 577, 577, 577, 601, 601, 601, 554, 601, 601, 601, 601, 601, 601, 601, 577, 577, 613, 618, 601, 618, 624, 1, 12290, 534, 534, 887, 534, 534, 556, 556, 960, 556, 556, 0, 580, 580, 1034, 580, 580, 580, 580, 1502, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2332, 580, 580, 580, 580, 534, 2513, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2806, 534, 534, 534, 534, 2542, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 2216, 556, 2218, 556, 580, 2674, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 534, 2491, 534, 534, 534, 534, 2495, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 2215, 556, 556, 556, 556, 602, 578, 578, 578, 578, 578, 578, 578, 602, 602, 602, 555, 602, 602, 602, 602, 602, 602, 602, 578, 578, 555, 578, 602, 578, 602, 1, 12290, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2410, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2952, 0, 0, 0, 728, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3145, 3146, 0, 0, 0, 556, 924, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2260, 2261, 0, 0, 1176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2433, 0, 0, 534, 1300, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2548, 0, 0, 1418, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 2664, 580, 580, 580, 580, 2668, 580, 580, 580, 580, 580, 580, 1505, 580, 580, 1509, 580, 580, 580, 580, 580, 1515, 0, 0, 1553, 0, 0, 0, 1559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2167, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1733, 534, 534, 534, 534, 556, 556, 556, 2252, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3471, 580, 580, 580, 580, 580, 580, 2339, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3485, 0, 0, 3488, 2499, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2202, 0, 0, 0, 0, 736, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1747, 534, 534, 534, 534, 1051, 534, 534, 892, 534, 1056, 556, 556, 965, 556, 0, 1061, 580, 580, 1039, 580, 580, 580, 580, 2885, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2680, 534, 580, 556, 534, 556, 556, 1420, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 2894, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2900, 580, 580, 580, 580, 534, 534, 534, 534, 1726, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2144, 534, 534, 2148, 534, 1821, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2843, 580, 580, 1954, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3313, 580, 580, 580, 580, 556, 2586, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2288, 556, 556, 556, 556, 556, 2614, 0, 0, 0, 0, 0, 0, 580, 580, 580, 580, 580, 1039, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 0, 0, 0, 2957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 2979, 534, 534, 534, 2983, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2498, 3065, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2889, 580, 580, 580, 580, 580, 3192, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3035, 1134592, 0, 1134592, 0, 0, 0, 1134592, 1135007, 1135007, 0, 0, 0, 0, 0, 1135007, 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, 0, 707, 0, 0, 0, 711, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2718, 0, 0, 1134592, 1134592, 0, 0, 0, 0, 1135196, 1135196, 1135196, 1135196, 1134592, 1135196, 1135196, 1135196, 1135196, 1135196, 1135196, 0, 1134592, 1134592, 1134592, 1134592, 1135196, 1134592, 1135196, 1, 12290, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 3137536, 2940928, 2940928, 2940928, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 0, 0, 0, 0, 2113, 0, 0, 0, 2113, 0, 0, 2118, 2119, 0, 0, 0, 0, 0, 1180, 0, 0, 0, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2474, 0, 1147348, 1147348, 1147348, 451, 451, 1147348, 451, 451, 451, 451, 451, 451, 451, 451, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 1147348, 1147348, 1147348, 1147399, 1147399, 1147348, 1147399, 1147399, 1, 12290, 3, 0, 0, 0, 0, 0, 253952, 0, 0, 0, 253952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2950, 0, 0, 0, 0, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 792, 0, 0, 1159168, 0, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1, 12290, 3, 0, 0, 0, 0, 249856, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 163840, 0, 0, 0, 0, 65536, 0, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 974, 2125824, 2125824, 2125824, 2125824, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2699264, 2125824, 2715648, 2125824, 2723840, 2125824, 0, 106496, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 106496, 0, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 369, 369, 0, 0, 65536, 369\n];\n\nXQueryParser.EXPECTED =\n[ 127, 143, 342, 950, 172, 201, 188, 217, 769, 963, 247, 263, 279, 295, 311, 327, 1395, 373, 1083, 374, 374, 374, 374, 374, 374, 374, 374, 374, 419, 391, 407, 466, 435, 589, 1682, 909, 574, 156, 1220, 451, 495, 511, 527, 543, 559, 634, 1096, 678, 694, 755, 649, 785, 801, 817, 833, 849, 865, 881, 897, 937, 979, 995, 1023, 1039, 1055, 479, 1112, 1128, 1473, 1144, 1160, 1206, 1236, 357, 662, 1266, 709, 1282, 1292, 1308, 1324, 1339, 1355, 1411, 1427, 1443, 618, 1459, 724, 1489, 604, 1518, 1528, 231, 1070, 1544, 1560, 1576, 1592, 1622, 1250, 1638, 1654, 1606, 921, 1670, 739, 1698, 1714, 1820, 1190, 1730, 1746, 1502, 1758, 1774, 1790, 1806, 1175, 1850, 1860, 1836, 1009, 1370, 1876, 1385, 375, 1892, 1896, 1903, 1903, 1903, 1898, 1902, 1903, 1910, 1907, 1914, 1918, 1922, 1926, 1929, 1933, 1937, 1941, 1945, 4040, 4040, 4040, 4106, 4040, 4040, 2020, 2279, 4040, 1949, 4040, 4040, 4040, 2429, 2379, 4040, 4040, 4040, 4040, 2438, 4040, 4040, 3112, 2651, 3443, 2444, 1955, 1984, 1994, 1998, 4040, 4040, 4040, 4040, 4040, 2017, 2042, 4040, 4040, 4040, 2024, 2285, 2030, 2034, 4040, 4040, 4040, 4040, 4040, 2041, 4040, 4040, 3002, 2285, 2285, 2285, 2285, 2285, 2111, 1988, 1988, 1988, 1988, 1988, 1990, 1955, 1955, 1955, 1955, 1955, 2101, 3099, 1988, 1988, 1988, 1988, 1988, 2120, 1955, 1955, 1955, 1955, 1955, 2046, 2055, 4040, 4040, 2212, 2349, 4040, 4040, 4040, 4137, 3441, 4040, 4040, 4040, 4040, 3531, 4040, 2745, 1988, 1988, 1988, 2066, 1955, 1955, 1955, 1957, 2073, 4040, 4040, 2473, 3002, 2285, 2285, 2026, 1988, 1988, 3101, 1955, 1955, 1956, 2072, 4040, 2471, 4040, 2284, 2285, 3098, 1988, 1988, 2078, 1955, 2068, 2129, 2446, 3554, 2285, 2112, 1988, 2120, 1955, 2083, 2281, 2286, 1988, 2067, 2089, 2095, 2113, 2049, 2107, 3097, 2114, 2079, 3096, 3100, 2079, 3096, 2114, 2051, 2118, 2126, 2135, 2139, 2143, 2156, 2160, 2170, 2170, 2170, 2163, 2167, 2170, 2173, 2177, 2181, 2185, 2189, 2193, 2197, 2201, 2205, 2209, 2216, 4040, 4040, 4040, 2131, 4040, 4040, 4040, 2220, 4040, 2226, 4040, 2283, 2287, 1988, 1954, 2122, 2098, 1961, 4040, 4040, 4040, 1970, 4040, 2474, 1980, 4040, 2321, 3139, 4040, 2440, 3145, 4427, 2277, 3219, 2796, 3151, 3505, 3155, 4040, 3263, 3161, 2906, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4041, 2255, 2259, 2262, 2266, 2270, 2274, 3465, 2291, 4040, 4040, 4040, 4040, 3213, 2296, 2312, 2303, 2396, 2240, 2243, 2309, 2316, 2320, 2649, 4006, 4040, 2726, 2326, 3670, 4040, 4040, 4040, 4040, 2231, 3466, 4040, 4040, 4040, 3429, 2237, 4040, 2618, 3123, 2249, 2253, 3877, 2348, 4040, 4040, 4013, 2355, 4040, 2359, 4040, 4040, 4040, 4040, 3173, 2321, 2227, 2367, 3192, 4040, 4040, 2459, 4040, 4040, 3192, 4040, 4040, 4348, 2989, 2882, 2918, 3129, 2349, 4040, 3014, 2311, 2670, 2331, 3577, 4417, 2336, 2379, 4040, 4040, 2549, 2340, 4040, 4040, 4040, 2984, 4040, 4040, 4040, 4040, 3591, 2979, 4040, 4040, 4040, 3390, 4180, 4419, 3131, 4040, 3190, 3194, 4040, 2950, 2989, 2918, 3210, 4040, 2469, 2788, 3212, 4040, 4005, 3283, 3279, 4282, 4040, 3281, 4226, 4226, 2601, 4283, 3283, 3283, 1966, 3282, 3279, 1966, 4227, 3283, 4191, 2462, 2478, 4040, 4040, 4040, 4040, 2588, 2522, 4040, 4040, 4040, 2007, 2858, 2484, 3025, 2492, 2495, 2498, 2502, 2503, 2507, 2511, 2515, 4040, 2521, 4040, 4040, 2526, 4040, 3968, 2913, 2541, 2545, 3867, 2553, 2563, 2574, 2578, 4040, 3387, 3385, 4040, 2582, 4040, 3458, 2587, 4040, 3120, 4040, 4040, 4040, 3174, 2074, 2409, 2537, 2432, 4040, 4040, 4040, 2536, 2416, 4040, 2373, 2377, 4040, 4040, 4040, 4040, 4255, 2378, 4040, 4040, 4040, 4040, 4256, 2379, 4040, 2838, 3503, 4040, 4040, 4040, 4040, 2839, 3504, 3974, 3509, 4040, 4040, 3730, 3536, 4040, 3349, 2906, 4040, 3326, 2556, 3181, 3383, 3394, 3403, 4040, 4397, 4040, 3553, 3551, 3545, 4040, 2668, 2912, 3478, 3399, 2548, 2592, 3456, 3471, 2600, 4040, 4040, 4040, 4242, 4040, 3147, 4040, 3818, 4040, 4037, 3923, 3990, 3561, 4003, 4040, 2655, 4039, 4040, 4040, 4040, 3167, 4040, 4040, 4040, 3331, 3171, 4040, 4040, 4040, 4040, 3632, 3179, 4040, 2638, 2611, 2615, 4040, 2388, 2622, 4040, 4040, 4040, 4040, 2389, 2349, 4040, 4040, 4040, 2397, 2390, 4040, 4040, 4040, 3141, 4040, 4040, 3846, 4040, 4040, 2630, 2517, 4070, 2637, 2412, 2989, 4040, 4040, 4040, 4040, 2344, 4040, 4040, 4040, 4040, 4040, 3269, 2989, 2380, 3207, 4040, 3463, 4040, 4040, 4040, 3861, 3470, 4040, 4040, 4040, 3475, 4040, 3482, 4040, 4040, 2631, 3905, 4040, 4040, 4040, 4040, 2631, 3905, 2424, 3909, 4040, 2152, 2595, 3785, 3915, 2631, 4365, 2642, 4040, 4040, 4040, 4040, 4085, 2646, 4040, 4040, 4040, 4040, 4085, 2646, 4040, 4040, 2464, 4040, 4040, 2285, 2285, 2285, 2285, 2025, 1988, 1988, 1988, 1988, 1988, 2120, 3610, 3833, 4040, 4040, 4040, 4365, 2656, 4040, 4040, 4040, 2660, 2665, 3980, 2516, 3196, 2674, 2678, 3830, 2685, 4040, 4040, 3830, 2685, 4040, 4040, 2299, 2690, 4040, 3184, 3458, 2004, 3969, 3197, 3312, 3251, 2696, 4040, 2037, 2690, 4040, 3251, 2696, 4040, 2702, 2709, 3195, 4000, 2713, 2717, 4040, 2715, 4040, 2679, 2723, 4040, 2730, 2734, 2739, 3644, 4040, 2705, 2583, 3646, 2583, 2749, 2753, 2704, 3203, 2944, 2566, 2570, 2956, 2945, 3843, 2568, 2568, 2761, 3815, 3641, 2765, 3607, 2769, 2773, 2775, 2779, 2783, 2787, 4040, 4040, 4040, 3316, 4040, 4040, 3564, 2792, 3570, 2800, 2804, 2808, 2810, 2814, 2818, 2821, 2823, 2824, 4040, 4040, 3315, 4040, 3428, 2828, 3896, 3248, 2833, 2843, 2434, 2453, 3918, 2849, 2907, 2853, 4040, 2150, 2148, 4040, 4040, 4040, 4040, 2405, 2349, 4040, 4040, 4040, 4040, 2405, 2349, 4040, 4040, 4040, 4040, 2362, 3442, 4040, 4040, 4040, 4040, 2363, 3773, 3950, 4040, 4040, 4040, 2857, 4040, 2559, 2968, 3853, 2862, 2937, 4379, 2869, 3988, 3295, 4040, 2873, 4040, 4040, 4040, 3554, 2285, 2285, 2285, 2285, 1987, 1988, 1988, 1988, 1989, 1955, 1955, 1955, 1955, 1956, 2103, 4040, 4040, 4040, 2472, 4040, 2109, 2285, 2285, 2285, 2113, 3527, 2877, 4040, 4040, 4040, 2886, 2890, 4040, 4040, 4040, 4040, 2980, 4040, 3336, 2829, 3897, 2895, 2899, 4040, 2911, 2917, 4040, 4040, 2922, 4040, 4040, 4040, 4040, 2844, 2923, 4040, 4040, 2626, 4289, 4040, 3453, 3038, 4353, 4386, 3183, 4040, 4040, 4041, 4370, 4040, 4040, 2845, 2924, 4040, 4040, 4040, 4040, 4040, 2990, 4040, 2558, 2928, 4420, 2935, 4040, 2943, 2949, 4040, 2970, 2954, 4040, 4040, 4040, 4040, 3855, 2960, 4040, 4040, 4040, 4040, 3855, 2960, 4040, 4040, 4040, 4040, 3389, 4040, 2966, 3897, 2974, 2327, 4275, 4040, 3590, 2978, 4040, 3535, 3379, 3488, 3521, 3230, 4040, 4040, 3540, 4040, 4040, 4040, 3439, 4040, 4040, 4040, 4364, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4378, 4040, 4040, 4040, 2605, 4040, 4040, 2245, 4040, 4040, 3459, 4040, 4040, 4038, 3923, 4040, 2013, 3616, 2411, 4040, 3631, 2988, 4040, 4040, 3631, 2988, 4040, 4040, 4040, 2994, 4040, 4040, 2350, 4262, 2381, 3617, 4040, 4040, 4346, 4040, 4040, 3000, 4040, 4040, 4346, 4040, 2350, 4208, 3615, 2881, 4040, 2795, 3174, 3112, 3180, 3024, 3111, 3180, 3180, 3933, 3014, 3113, 3113, 3006, 3181, 3014, 3013, 3014, 3175, 4047, 3018, 3029, 3053, 4040, 4040, 4040, 4040, 3634, 4040, 4221, 4040, 3650, 4040, 4040, 4040, 4040, 2631, 3651, 4040, 4040, 4040, 4040, 3648, 4287, 4291, 4040, 4010, 4017, 4303, 4022, 2632, 3182, 4040, 4032, 4040, 1950, 4012, 4040, 2865, 4045, 4051, 3043, 3047, 4064, 3061, 3065, 3069, 3073, 3077, 3081, 3105, 3084, 4040, 4040, 3633, 4040, 4040, 3443, 2444, 4040, 4040, 4040, 2450, 4040, 4040, 4040, 4349, 4040, 4040, 3014, 3276, 2487, 2961, 2691, 4276, 3109, 1976, 3117, 3127, 3289, 3135, 3305, 4040, 3324, 3322, 4040, 4040, 3734, 3779, 3739, 3744, 3969, 4040, 3748, 3754, 3761, 3943, 3887, 3765, 4057, 4040, 2488, 2962, 2692, 3163, 3224, 3188, 3412, 4040, 4040, 2085, 3201, 4040, 4040, 4040, 4040, 2343, 3217, 3223, 3228, 4040, 4040, 4040, 3234, 4040, 4040, 4040, 4040, 4040, 3238, 4040, 4040, 4040, 4040, 3422, 4040, 2529, 2686, 4354, 3245, 4040, 4040, 4040, 4342, 4040, 4040, 4040, 4040, 1972, 4040, 4040, 4040, 4040, 4040, 3255, 4040, 4040, 4040, 3423, 3952, 2686, 4355, 3261, 4040, 4040, 3267, 4040, 4040, 4040, 1974, 4040, 4040, 4040, 3273, 4040, 4220, 3981, 2680, 4356, 3895, 4040, 3287, 4040, 4040, 3293, 4040, 4040, 2062, 4040, 4220, 3953, 3299, 2146, 4040, 3303, 4040, 2607, 4040, 4040, 2061, 4040, 4248, 3309, 3894, 3498, 4040, 4360, 4040, 4040, 4040, 4369, 4040, 4374, 3056, 4383, 3622, 4040, 4040, 4390, 4040, 4040, 4424, 2742, 4040, 2633, 4040, 3056, 4040, 3039, 3157, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 2455, 4325, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 3320, 4040, 3330, 3911, 3335, 3629, 3588, 4213, 3943, 3587, 4213, 4213, 4040, 3341, 3589, 3589, 3628, 4214, 3341, 3340, 3341, 3630, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 3836, 2349, 3347, 4040, 3354, 3001, 4080, 4404, 3358, 3362, 3366, 3369, 3373, 3373, 3377, 4040, 4040, 3835, 4091, 3410, 4040, 4040, 3416, 4040, 4040, 3420, 3427, 4040, 3433, 4040, 4331, 3447, 4040, 4040, 3797, 4040, 3795, 4040, 4040, 4345, 4040, 2350, 1964, 4040, 2879, 4040, 3397, 4040, 2904, 4040, 3350, 3488, 4040, 3486, 2535, 3492, 3496, 4040, 4040, 4040, 3502, 4040, 4040, 4040, 4127, 4028, 2010, 4131, 4141, 4145, 4149, 4153, 4157, 4161, 4165, 4169, 4173, 4134, 4377, 4293, 2534, 3516, 4040, 4040, 4040, 2839, 3504, 4040, 4040, 4040, 4040, 2931, 3442, 4040, 3450, 4040, 2902, 4040, 3799, 4363, 3520, 4196, 3525, 3406, 2349, 2757, 2305, 2996, 4393, 4347, 3544, 4040, 3549, 4040, 4040, 3549, 4040, 4040, 3558, 2756, 2305, 4077, 4395, 3960, 4040, 3568, 4040, 3823, 2349, 4040, 3997, 3750, 3574, 3884, 3961, 4269, 4040, 4270, 4040, 3581, 3944, 3585, 3595, 3931, 3600, 2001, 3930, 3604, 3604, 4211, 3614, 3932, 3621, 3626, 3662, 3638, 3655, 3656, 3660, 3667, 3674, 3678, 3682, 3685, 4040, 4040, 4040, 3840, 2596, 3740, 3850, 2668, 2332, 3343, 4040, 3859, 4040, 4040, 4040, 2233, 3865, 2891, 3735, 2465, 2351, 3690, 3698, 3874, 3702, 3705, 3709, 3713, 3717, 3721, 3725, 3729, 4040, 2423, 2421, 3241, 3772, 4040, 4040, 2939, 3777, 3783, 3789, 3793, 4136, 2698, 3342, 2633, 2425, 3803, 4040, 4040, 3808, 2349, 4040, 4040, 4186, 3812, 4040, 4040, 4040, 3009, 3822, 3827, 4040, 3871, 2532, 4318, 3881, 4040, 3891, 3773, 4040, 4040, 4040, 4040, 3901, 4040, 4040, 4040, 4040, 4040, 2385, 4040, 4040, 4040, 4040, 3014, 4040, 2394, 4040, 2401, 2379, 4035, 3922, 4040, 4040, 2292, 3927, 4040, 4040, 4040, 4040, 3937, 4040, 4040, 4040, 4040, 2091, 3941, 3948, 4040, 3957, 3757, 3966, 2835, 3112, 4040, 4040, 2222, 3979, 4040, 4040, 2719, 3973, 2632, 3183, 3021, 4040, 4055, 4040, 4061, 2419, 4040, 3023, 4068, 4074, 4084, 4112, 4089, 4095, 3596, 4100, 4308, 4099, 4104, 4110, 4099, 4113, 4119, 3257, 4117, 4123, 4040, 4040, 4040, 4040, 4177, 4184, 2836, 3686, 4190, 3693, 4195, 4200, 4410, 4205, 4218, 4040, 3090, 2735, 4225, 3093, 4231, 4040, 4040, 4040, 3631, 4235, 2661, 4040, 2681, 4429, 2369, 4040, 4239, 4040, 4040, 4040, 4040, 3804, 4246, 4040, 4040, 4040, 4252, 4040, 4040, 4040, 2631, 4260, 4266, 4040, 4040, 4040, 4025, 4185, 2837, 2686, 2480, 4274, 4040, 4280, 4040, 4040, 4040, 4040, 4201, 3978, 4018, 4303, 3768, 4040, 3050, 4040, 4040, 3985, 4040, 4040, 3994, 4040, 4322, 4385, 4329, 4040, 4040, 4040, 4040, 4335, 4040, 4040, 4040, 4040, 3663, 4339, 4040, 4040, 4297, 4040, 3057, 3087, 4301, 3962, 3032, 4040, 4040, 4040, 4040, 2624, 4307, 4040, 4040, 4040, 4040, 2624, 4312, 4315, 4040, 2322, 3436, 2837, 2058, 4040, 4040, 3035, 4040, 4401, 4408, 3694, 4040, 4040, 3512, 4040, 2631, 4414, 4040, 3511, 4558, 4433, 6024, 6027, 4439, 4466, 4468, 4468, 4446, 4455, 4467, 4468, 4468, 4468, 4468, 4468, 4468, 4473, 4468, 4468, 4463, 4457, 4459, 4479, 4477, 4483, 4468, 4469, 4493, 4496, 4506, 4510, 4524, 4519, 4511, 4500, 4502, 4502, 4518, 4519, 4498, 4515, 4523, 4528, 4532, 4536, 4539, 4547, 4546, 4543, 4551, 4554, 4556, 4566, 5097, 4574, 6086, 5003, 5101, 5101, 5101, 4593, 4599, 4602, 4602, 4602, 4602, 4608, 4640, 4568, 4622, 4628, 5101, 4434, 5101, 5099, 5101, 6713, 5101, 6256, 5101, 5101, 4584, 5992, 5101, 5101, 4729, 5101, 5473, 6277, 5101, 5007, 4602, 5693, 4609, 5696, 5699, 5699, 5699, 5699, 4601, 4602, 5699, 4602, 4619, 4621, 4623, 4627, 6087, 5101, 4434, 6165, 6164, 5101, 5101, 6380, 6242, 5096, 5101, 4576, 5101, 6463, 5101, 5101, 5635, 4488, 5366, 6275, 5101, 4581, 5101, 4590, 5411, 5123, 5123, 5123, 5697, 5699, 4603, 4621, 4621, 4622, 4627, 4627, 4628, 5101, 4583, 5448, 6513, 5474, 5101, 5008, 5101, 5101, 4602, 4632, 5123, 5699, 4602, 4602, 4602, 5704, 5121, 4602, 4621, 4627, 5101, 4583, 6563, 5101, 4584, 6017, 5101, 5101, 5699, 5701, 4602, 4602, 4602, 4632, 4640, 5705, 5101, 5101, 5101, 4734, 5700, 4602, 4602, 4602, 5705, 4643, 5701, 5101, 5101, 4824, 5651, 4602, 4650, 5101, 5101, 4824, 6512, 5010, 5695, 5123, 5123, 5698, 5690, 4602, 4608, 5696, 5700, 5703, 5101, 4602, 5101, 5101, 5121, 5123, 5123, 5123, 5699, 5699, 5699, 5702, 5123, 5698, 5699, 5702, 4602, 4602, 5704, 4607, 4602, 5705, 5123, 5697, 5704, 5101, 5101, 4816, 4822, 5699, 4602, 5704, 5695, 5698, 5702, 5694, 5701, 4651, 4652, 4650, 5101, 4592, 5101, 5101, 5815, 5567, 5101, 5101, 5106, 6519, 6761, 6550, 6560, 4662, 4695, 4656, 4660, 4693, 4666, 4673, 4670, 4680, 4684, 4691, 4693, 4693, 4693, 4693, 4694, 4676, 4699, 4693, 4703, 4708, 4714, 4704, 4726, 4740, 4744, 4687, 4751, 4753, 4748, 4787, 4789, 4789, 4791, 4757, 4759, 4761, 4763, 4776, 4776, 4770, 4767, 4774, 4717, 4675, 4710, 4780, 4784, 4795, 4797, 4801, 4805, 4809, 5101, 4592, 6198, 6202, 4990, 5007, 5230, 6461, 5101, 6373, 5101, 5101, 4824, 6698, 4831, 5101, 5101, 5101, 4736, 5108, 5108, 5101, 5101, 4826, 6485, 5490, 5979, 4838, 5101, 4720, 4985, 5101, 4720, 5101, 5101, 4853, 5311, 4857, 5333, 4876, 4902, 4906, 4906, 4906, 4906, 4908, 4915, 4917, 4912, 4921, 4925, 4928, 4931, 4934, 4939, 4938, 4943, 4944, 4959, 4949, 4948, 4953, 4956, 4963, 5101, 5107, 5101, 4892, 5101, 5007, 5101, 5101, 5695, 5123, 5123, 5123, 5123, 5696, 5699, 5988, 5101, 5101, 5101, 4825, 5300, 5101, 5608, 5101, 4811, 5449, 6426, 4969, 5101, 5101, 4988, 6219, 5101, 5018, 4987, 5101, 5101, 4860, 5101, 5101, 4995, 5015, 5101, 6412, 5034, 5101, 5101, 5101, 4893, 6751, 6138, 5101, 5101, 5101, 4894, 6729, 5101, 5101, 5101, 4965, 5055, 5068, 5081, 5086, 5091, 5076, 5095, 5101, 4824, 5933, 5929, 5376, 5087, 4434, 5101, 5101, 5101, 4979, 5008, 6409, 5996, 5101, 5999, 5151, 5987, 5376, 5101, 4826, 6502, 6738, 6204, 5101, 6730, 5101, 5101, 4891, 5101, 4570, 5101, 5115, 5127, 5074, 4442, 5096, 5101, 5101, 5101, 4975, 5538, 5411, 5986, 5281, 5101, 4840, 5628, 5355, 5382, 4434, 4736, 5101, 4973, 5101, 5101, 5101, 4840, 5687, 5132, 5075, 5140, 5890, 5072, 5076, 5141, 6462, 4888, 5101, 5101, 4895, 5101, 5343, 5073, 6582, 4451, 5101, 4894, 5101, 5101, 6416, 5101, 5101, 5101, 6191, 5101, 5415, 5892, 5074, 6583, 5096, 5101, 5101, 4898, 5999, 5411, 5280, 5101, 5101, 4974, 4978, 5134, 5157, 5101, 5101, 5007, 5101, 5132, 5075, 5159, 5101, 4897, 5101, 5871, 4980, 5101, 5949, 5135, 5159, 5101, 4976, 5101, 5101, 5010, 5101, 5101, 5169, 4434, 5101, 5101, 5009, 5101, 5101, 5101, 4613, 4614, 4975, 5101, 4614, 5101, 5411, 4978, 6164, 6391, 5101, 4977, 6380, 5395, 5376, 5188, 4872, 5243, 5197, 5197, 5194, 5197, 5199, 5203, 5205, 5207, 5209, 5209, 5209, 5213, 5213, 5213, 5213, 5214, 5213, 5213, 5215, 5219, 5221, 5101, 5101, 5101, 5036, 5101, 5059, 5063, 5372, 5101, 5101, 5101, 6378, 6010, 5101, 4978, 6569, 5101, 4980, 5101, 5417, 5101, 5101, 5101, 5891, 5074, 5240, 5101, 5351, 6463, 5247, 5101, 5101, 5257, 5101, 5101, 5101, 5068, 5263, 6448, 5875, 5101, 4981, 5101, 5101, 5876, 6281, 5416, 5275, 4435, 5874, 5101, 4990, 6089, 5406, 5410, 5101, 5265, 5407, 5285, 5101, 5101, 5297, 6402, 5101, 5101, 5304, 5309, 5101, 5101, 5101, 5057, 5371, 5101, 5101, 5101, 5059, 5330, 4833, 5427, 5101, 5010, 4978, 5101, 5415, 5358, 5101, 5101, 5101, 5100, 5883, 5359, 5101, 5101, 5102, 6015, 4893, 5258, 5101, 5342, 5432, 5101, 5348, 5101, 5024, 6570, 5977, 5382, 4434, 5101, 5101, 5102, 6113, 5726, 5101, 6379, 5101, 5101, 5101, 5102, 5101, 5101, 6462, 5101, 4561, 5876, 5101, 6422, 6426, 5381, 6381, 6423, 6427, 5382, 5101, 5031, 5101, 5101, 4866, 4885, 4811, 5438, 6425, 5399, 6381, 5479, 5101, 5101, 5101, 5104, 5106, 5060, 5064, 5101, 5035, 5101, 5101, 5051, 5101, 5350, 5101, 5879, 4896, 5431, 5101, 5101, 5101, 5106, 5101, 4975, 5471, 5101, 5101, 5101, 5107, 6430, 5101, 5101, 5101, 5108, 4890, 6429, 6381, 5101, 5101, 5102, 6446, 5479, 5101, 5101, 5453, 5269, 5410, 5101, 4614, 5101, 5101, 6380, 5153, 5101, 5101, 5732, 5268, 5470, 5101, 5101, 5102, 6697, 5459, 5468, 6381, 5101, 5041, 5046, 5045, 5478, 5101, 5101, 5453, 4614, 5101, 5101, 5101, 5111, 6088, 5350, 5877, 5413, 5538, 5101, 5101, 5047, 5047, 5047, 5461, 5101, 6088, 6119, 5106, 5267, 5271, 5101, 5047, 6213, 5101, 5101, 5404, 4990, 5404, 5408, 5404, 4990, 5404, 5962, 5423, 5961, 5101, 6084, 5423, 5233, 6104, 5101, 4990, 5232, 5230, 5101, 5232, 4989, 5232, 5232, 5232, 5231, 6488, 5101, 5101, 5101, 5168, 5876, 5722, 5483, 4434, 5099, 5101, 5101, 6498, 6279, 5487, 5101, 4886, 6166, 5489, 5856, 5494, 5500, 5498, 5504, 5504, 5504, 5504, 5506, 5513, 5510, 5517, 5519, 5519, 5519, 5521, 5519, 5525, 5525, 5525, 5525, 5527, 6280, 5415, 5319, 5672, 5101, 5005, 6438, 5101, 5101, 5103, 5101, 5101, 5101, 6361, 6199, 5571, 5101, 5101, 5101, 5176, 5626, 6498, 5551, 5101, 6442, 5561, 5101, 5814, 5566, 5575, 5101, 5101, 5101, 5181, 6167, 5004, 6438, 5101, 5102, 6092, 6381, 5580, 5101, 5101, 5004, 6127, 5600, 5863, 5606, 5862, 5605, 5101, 5101, 5235, 5101, 5101, 5101, 5424, 5102, 6128, 5601, 5864, 5607, 5101, 5101, 5101, 5224, 5101, 6167, 5101, 5006, 6440, 5101, 5569, 5101, 5102, 6180, 5148, 5101, 5101, 5996, 5101, 6283, 5464, 5101, 5101, 5101, 5228, 5101, 5620, 5101, 5101, 5101, 5232, 5176, 5626, 6753, 5665, 5101, 5101, 5632, 5321, 4434, 5101, 5102, 6362, 6200, 5027, 5562, 5101, 5570, 5101, 5101, 5223, 5746, 5463, 5101, 5101, 5101, 5266, 4989, 5621, 5101, 5101, 5101, 5278, 6754, 5666, 5101, 5101, 5265, 5407, 6755, 5376, 5101, 5101, 4990, 5101, 5612, 5415, 5320, 6393, 5101, 5101, 5176, 5639, 5646, 4577, 5568, 5410, 5640, 5664, 5101, 5101, 5101, 5293, 5175, 5639, 5663, 5376, 5659, 5376, 5101, 5101, 5101, 4980, 5657, 5676, 5101, 5101, 5288, 5037, 5658, 5101, 5101, 5101, 5411, 5123, 5098, 5101, 5423, 5101, 5102, 6471, 6477, 5098, 5101, 5424, 5101, 5101, 5426, 5098, 5424, 5101, 5102, 6558, 5101, 5101, 5101, 6393, 5101, 5426, 5424, 5568, 5424, 5233, 5101, 5101, 5102, 6562, 5101, 5104, 5101, 5101, 5101, 4974, 6215, 5710, 4879, 5101, 6496, 5376, 5101, 5105, 5101, 5424, 5424, 5099, 5101, 5105, 5101, 5101, 5101, 5720, 4722, 5730, 5742, 5751, 5757, 5766, 5764, 5767, 5755, 5761, 5771, 5774, 5776, 5778, 5790, 5782, 5785, 5789, 5790, 5791, 5796, 5795, 5801, 5797, 5806, 5101, 5108, 4976, 5101, 5110, 6702, 5101, 5111, 6707, 5101, 5123, 5123, 5123, 5698, 5699, 5699, 5700, 4602, 5801, 5802, 5801, 5801, 4998, 5101, 5098, 5101, 5101, 5425, 5101, 5101, 5812, 5819, 5557, 5101, 5145, 5281, 5101, 4844, 5876, 4852, 5595, 5101, 4888, 5101, 5950, 5136, 4434, 5101, 4615, 5101, 5101, 5823, 5848, 5941, 5101, 5101, 5363, 5101, 5472, 5373, 5101, 5101, 5386, 5101, 5860, 4888, 5868, 5887, 5011, 5011, 5101, 5101, 5414, 5101, 6528, 5376, 5101, 5101, 5414, 6347, 5545, 5908, 6527, 4732, 5904, 6529, 5101, 5101, 5423, 5101, 5101, 5100, 5942, 5101, 5101, 5101, 5426, 5101, 5101, 5101, 5479, 5912, 5924, 5101, 5101, 5423, 5163, 5158, 5101, 5101, 5101, 4989, 5101, 5350, 5929, 5376, 5101, 5101, 5454, 5270, 6215, 5393, 5374, 5101, 5168, 5173, 5101, 5101, 5101, 5021, 5109, 5101, 5411, 5101, 5853, 5101, 6347, 5101, 5100, 5101, 5102, 5947, 5925, 5101, 5101, 5530, 4980, 4811, 5650, 5954, 5376, 4812, 5959, 5955, 5101, 5184, 5539, 6436, 5879, 5098, 5102, 5538, 5101, 6166, 5101, 5102, 5447, 5442, 4585, 5993, 5101, 5101, 5538, 6089, 5099, 4592, 5101, 5101, 5546, 5903, 4584, 5993, 5101, 5101, 5649, 5940, 5102, 4586, 5994, 5101, 5231, 4887, 5101, 4974, 5100, 5101, 5101, 6712, 5101, 5101, 4584, 5995, 5101, 5101, 5706, 5898, 4585, 5995, 5101, 5101, 5808, 5101, 5106, 5101, 5413, 6346, 5102, 6004, 5101, 5101, 5833, 5840, 6392, 5107, 5412, 5876, 4894, 5152, 5101, 5035, 5576, 5101, 5101, 5106, 6016, 5101, 5101, 5837, 5841, 5101, 5101, 5338, 5101, 6015, 5101, 5101, 5101, 5547, 5412, 5101, 5101, 5101, 5612, 5101, 6161, 5101, 5101, 5101, 5679, 5101, 5101, 6367, 5101, 5101, 5842, 6096, 5101, 6282, 5101, 4486, 6021, 6046, 6045, 6046, 6046, 6043, 6046, 6050, 6054, 6058, 6062, 6071, 6066, 6070, 6071, 6071, 6075, 6075, 6075, 6075, 6078, 6082, 5101, 5101, 5842, 6097, 5103, 5234, 5101, 5101, 5880, 5305, 5101, 5101, 5047, 5101, 5101, 6102, 5109, 6108, 5101, 5236, 5101, 5101, 5325, 5101, 6117, 5101, 6123, 5101, 5249, 6209, 6202, 5101, 6493, 5101, 5101, 5897, 5101, 5101, 6142, 6181, 5096, 5843, 6097, 5101, 5101, 5966, 5101, 5101, 5996, 5101, 5101, 5101, 5876, 5103, 6174, 5101, 5101, 5416, 5421, 5101, 5101, 5251, 6200, 6204, 5101, 5101, 5101, 5949, 6147, 6152, 6000, 4980, 4980, 4980, 5101, 5292, 4635, 5101, 5299, 5101, 5101, 5058, 5062, 5371, 6361, 5737, 5101, 5101, 5975, 4848, 5988, 6137, 5101, 5101, 5101, 5882, 5102, 5734, 5738, 5101, 5317, 6462, 5349, 6382, 5101, 6160, 6159, 5101, 6173, 5101, 5101, 5999, 5101, 5101, 6667, 5106, 4894, 6247, 4978, 5101, 5101, 6004, 5101, 6361, 6199, 6203, 5101, 5101, 5101, 5896, 6382, 6382, 5101, 5101, 6111, 5418, 5101, 5101, 6668, 4893, 6186, 5101, 6769, 5879, 5101, 5101, 5529, 6188, 5101, 5101, 6126, 5599, 5102, 6197, 6201, 6205, 5419, 6182, 4434, 5101, 5101, 6089, 5252, 6201, 6205, 5585, 5101, 5101, 5101, 6007, 6455, 4450, 5101, 5101, 6133, 5101, 5101, 5101, 5695, 6454, 4449, 4434, 5101, 5350, 5101, 5878, 5101, 6280, 4886, 4988, 6229, 5101, 5101, 6162, 4614, 5101, 6378, 4434, 5101, 5375, 5101, 4562, 6229, 5101, 4978, 6214, 6161, 4980, 5101, 5101, 6162, 5101, 5101, 5101, 5655, 5640, 6234, 5101, 5101, 5101, 6089, 5101, 6258, 4434, 6240, 5101, 6258, 4434, 5101, 5404, 5962, 5101, 5102, 5437, 6424, 6235, 5101, 5101, 5568, 5410, 5101, 5101, 6236, 5101, 6165, 5101, 5101, 5101, 6259, 5101, 5101, 6164, 5101, 5101, 5101, 5648, 5849, 5942, 5101, 6260, 5101, 6165, 5101, 5405, 5409, 5101, 5057, 5268, 5409, 5101, 5101, 5102, 6742, 5253, 5101, 5101, 5101, 6260, 5101, 5101, 6259, 5101, 6167, 6258, 5101, 5101, 5101, 6112, 6259, 5101, 6259, 6165, 4847, 5987, 5376, 5568, 6497, 6259, 5568, 6497, 6168, 6257, 6257, 6261, 6251, 6254, 6254, 5101, 5101, 5101, 6169, 5118, 5101, 5916, 5101, 5414, 5538, 5101, 5101, 5918, 4896, 5553, 4884, 5037, 6272, 6287, 6305, 6299, 6305, 6303, 6299, 6309, 6293, 6290, 6295, 6322, 6313, 6327, 6316, 6319, 6323, 6332, 6331, 6339, 6339, 6340, 6339, 6339, 6339, 6336, 6344, 5101, 5101, 5101, 6178, 5224, 5747, 5376, 5101, 5101, 5415, 5101, 5101, 6351, 4893, 4893, 4882, 5230, 5001, 5101, 6372, 5101, 5101, 6214, 4980, 5101, 6357, 5969, 5101, 5417, 5419, 6353, 6366, 4434, 5101, 6371, 6390, 6397, 6401, 5101, 5418, 4636, 5647, 6434, 5101, 5101, 5101, 6192, 5943, 5101, 5008, 5101, 4978, 5101, 4979, 5101, 5416, 5101, 6351, 4893, 5419, 6352, 4894, 6268, 6367, 5002, 5101, 5101, 6279, 5641, 5101, 5101, 5290, 5101, 6452, 5101, 5101, 5101, 6223, 5101, 6470, 6459, 6480, 6475, 6479, 6205, 5101, 5423, 5407, 5101, 5057, 5061, 5390, 6481, 5101, 5101, 5101, 6228, 5589, 5588, 5587, 5101, 5436, 5442, 6428, 5402, 5101, 5101, 5102, 6143, 6182, 5106, 5745, 6520, 5101, 5455, 5409, 5101, 5057, 5061, 5370, 6267, 5101, 5410, 5101, 5535, 5101, 5101, 5177, 5640, 5423, 5999, 5101, 5101, 6360, 5736, 6738, 6204, 5101, 5101, 6378, 5101, 5224, 5077, 5101, 5008, 6265, 5555, 5101, 5415, 5070, 5082, 5622, 5101, 5101, 6278, 6165, 5233, 5101, 5377, 6377, 6386, 5103, 5101, 5679, 5101, 5538, 5101, 5101, 5101, 5534, 5538, 4826, 5935, 6737, 6204, 4827, 5936, 6535, 6204, 6191, 6191, 5101, 5101, 6378, 6393, 5232, 5101, 5036, 5101, 5543, 5259, 5326, 6190, 5101, 5101, 5101, 6278, 5443, 6506, 4434, 5101, 5568, 6236, 5101, 5101, 5568, 5101, 5102, 6511, 5134, 6507, 5164, 4451, 5101, 5101, 6392, 5101, 6165, 5101, 6192, 6192, 6192, 5101, 5101, 6378, 6392, 5101, 5101, 6517, 5376, 5101, 5583, 5101, 5101, 5101, 6011, 6524, 5101, 6278, 5101, 5101, 5101, 5037, 6155, 5101, 5101, 5101, 6382, 6533, 6549, 5101, 5101, 5101, 6379, 6393, 5101, 6544, 6381, 5101, 5593, 5101, 5101, 5229, 5634, 5101, 6676, 6549, 5101, 5616, 6230, 5101, 5351, 5877, 4895, 5411, 5432, 5101, 5101, 5101, 5031, 5101, 6675, 6548, 5101, 5101, 5101, 6391, 5101, 6539, 5426, 5101, 5101, 5417, 5920, 4896, 5101, 5648, 6722, 5416, 6462, 5101, 5562, 5101, 6554, 6381, 5101, 5680, 5101, 5101, 6381, 5101, 5101, 5101, 5101, 4583, 5101, 6540, 5425, 5101, 5426, 5101, 5101, 6709, 5417, 4895, 5102, 4595, 5101, 5101, 6406, 5101, 4594, 5403, 6540, 5101, 5714, 5003, 4991, 6090, 6568, 5101, 5101, 6464, 4988, 5101, 6091, 6381, 5101, 5842, 5037, 5998, 5996, 5996, 5413, 4893, 5101, 5101, 5101, 6419, 5101, 6091, 5101, 5101, 6492, 6491, 5101, 6091, 5101, 4895, 4561, 4896, 5101, 5101, 6090, 6089, 4896, 5101, 5101, 6494, 6256, 4559, 5101, 5101, 6090, 5101, 5101, 6090, 4561, 6089, 4561, 5101, 6089, 4560, 5537, 6089, 5101, 5537, 6574, 6752, 4888, 4577, 5716, 5997, 6579, 5101, 5844, 5037, 5101, 5101, 5101, 6196, 5101, 6462, 6465, 6463, 4869, 5826, 5829, 6587, 4489, 4646, 6598, 6591, 6597, 6593, 6605, 6602, 6607, 6611, 6613, 6617, 6619, 6628, 6625, 6632, 6621, 6635, 6639, 6640, 6644, 6647, 6654, 6653, 6651, 6658, 6661, 6665, 5101, 6574, 6723, 5101, 5876, 6281, 5670, 5418, 5421, 5101, 5101, 5101, 6469, 5107, 5101, 4975, 5101, 4976, 6672, 5101, 5101, 5101, 6682, 6494, 5101, 5101, 5101, 6695, 6680, 5313, 6686, 5101, 5877, 5684, 4434, 6246, 5101, 5101, 6163, 5101, 5101, 5101, 6692, 5101, 5101, 6495, 5101, 5101, 6703, 5101, 5101, 5101, 6713, 5101, 5101, 6718, 6717, 4834, 6722, 5101, 5418, 5422, 5101, 6727, 6734, 5101, 5881, 5357, 5337, 6746, 5101, 5101, 5101, 6495, 6378, 5101, 6222, 6745, 5101, 5889, 5128, 5074, 4442, 6224, 6747, 5101, 5877, 5615, 5671, 5876, 5101, 5879, 5101, 5899, 6230, 5101, 5101, 6089, 5101, 5101, 4892, 5101, 5412, 5002, 6734, 5101, 5101, 6711, 5101, 5101, 5253, 5101, 5877, 5877, 5877, 5101, 5101, 5101, 6771, 5101, 5101, 6575, 5642, 4635, 5411, 6089, 5101, 4889, 5258, 5101, 5252, 4561, 5101, 5101, 6090, 5252, 4561, 5876, 5876, 5101, 5101, 5101, 5914, 6353, 6148, 5106, 4974, 5101, 5101, 5972, 5101, 4989, 5101, 6165, 5425, 5101, 6688, 5107, 5101, 6111, 5724, 6759, 5725, 4561, 5101, 5101, 5983, 5994, 5101, 5190, 5879, 5101, 5101, 5101, 5344, 5376, 5106, 5101, 5101, 5413, 6463, 5879, 5102, 6775, 6767, 5101, 5101, 5997, 5101, 5101, 5101, 4811, 4583, 6765, 5101, 5101, 5101, 5101, 6098, 5420, 5101, 5998, 5101, 5101, 5101, 4818, 5109, 5101, 5413, 5537, 5101, 5101, 6165, 5101, 6111, 6564, 5101, 5998, 5101, 6769, 5101, 5101, 6132, 6137, 5101, 6098, 5101, 5101, 6033, 6031, 6039, 5105, 5101, 5109, 5101, 4863, 5101, 6776, 5101, 5101, 5101, 6035, 4434, 5101, 6161, 5536, 5101, 5036, 5102, 5101, 5101, 6088, 5101, 5101, 5412, 6089, 1048576, 1073741824, 0, 0, 0, -872415232, 4194560, 4196352, 270532608, 2097152, 4194304, 117440512, 134217728, 4194304, 16777216, 4194432, 3145728, 16777216, 134217728, 536870912, 1073741824, 0, 541065216, 541065216, -2143289344, -2143289344, 4194304, 4194304, 4196352, -2143289344, 4194304, 4194432, 37748736, 541065216, -2143289344, 4194304, 4194304, 4194304, 4194304, 37748736, 4194304, 4194304, 4198144, 4196352, 8540160, 4194304, 4194304, 4194304, 4196352, 276901888, 4194304, 4194304, 8425488, 4194304, 1, 0, 1024, 1024, 0, 1024, 742391808, 239075328, -1405091840, 742391808, 742391808, 775946240, 239075328, 171966464, 775946240, 171966464, 171966464, 171966464, 171966464, -1405091840, 775946240, 775946240, -1405091840, -1371537408, 775946240, 775946240, 775946240, 171966464, 239075328, 239075328, 171966464, 775946240, -1371537408, 775946240, 775946240, -1371537408, 239075328, 775946240, 775946240, 775946240, 775946240, 4718592, 64, 4718592, 2097216, 4720640, 541589504, 4194368, 541589504, 4194400, 4194368, 541065280, 4194368, -2143289280, 4194368, -2143285440, -2143285408, -2143285408, -2109730976, -2143285408, -2143285408, -2143285408, -2143285408, 776470528, -2143285408, -2109730976, 775946336, 775946304, 776470528, 775946304, -1908404384, 2, 4, 8, 262144, 0, 0, 0, 0x80000000, 8, 262144, 262144, 1048576, 0, 128, 4096, 0, 4194304, 128, 128, 0, 1048576, 0, 0, 1536, 1792, 0, 0, 1, 2, 4, 128, 2097152, 8192, 8392704, 0, 0, 1, 4, 8, 262144, 536870912, 64, 64, 32, 96, 96, 96, 96, 128, 1536, 524288, 96, 64, 524288, 524288, 1536, 1024, 0, 0, 0, 29, 96, 1048576, 128, 128, 128, 128, 2048, 2048, 2048, 2048, 2048, 2048, 0, 96, 524288, 96, 64, 0, 0, 128, 1024, 524288, 64, 64, 96, 96, 524288, 524288, 4100, 1024, 100680704, 96, 524288, 64, 96, 524288, 64, 80, 528, 524304, 1048592, 2097168, 268435472, 16, 16, 2, 536936448, 16, 262160, 16, 536936448, 16, 17, 17, 20, 16, 48, 16, 16, 20, 560, 24, 560, 48, 2097680, 3145744, 1048592, 1048592, 2097168, 16, 1049104, 2228784, 2097168, 2097168, 16, 16, 16, 16, 20, 48, 48, 3146256, 2097680, 1048592, 16, 16, 16, 28, 0, 2097552, 3146256, 16, 16, 16, 21, 16, 16, 28, 16, 0, 16, 0, -2046820352, 0, 0, 2, 2, 2, 2098064, 17, 21, 266240, 1048576, 67108864, 0x80000000, 0, 0, 64, 65536, 1048576, 0, 16, 16, 163577856, 17, 528, 528, 16, 528, -161430188, -161429676, -161429676, -161430188, -161429680, -161430188, -161430188, -161429680, -161429676, -161349072, -161429675, -161349072, -161349072, -161349072, -161349072, -161347728, -161347728, -161347728, -161347728, -161298572, -160774288, -160299084, -161298572, -161298576, -160299088, -161298576, -160774284, -160774284, -161298572, -161298572, -161298572, -161298572, 112, 21, 53, 146804757, 146812949, 146862101, 146863389, -161429676, -160905388, -161429676, -161429676, -161429676, -161429676, -161429675, -161349072, 146863421, 148960541, 146863389, 146863389, 148960541, 146863421, 148960541, 148960541, -161429740, -161429676, -160905388, -161298572, -161298572, -18860267, -160774284, -18729163, 0, 0, 1, 6, 8, 16, 262144, 0, 0, 1, 8, 0, 24, 0, 0, 1, 14, 16, 32, 1024, 32768, 100663296, -1073741824, 0, 0, 0, 150528, 131072, 16777216, 0, 0, 1, 102, 1, 32768, 131328, 131072, 524288, 2097152, 8388608, 16777216, 164096, 0, 0, 0, 1007, 0, 1073741825, 0x80000000, 0x80000000, 1073741824, 8, 0, 0, 58368, 0, 0, 65536, 1048576, 4096, 1048576, 512, 512, 9476, 134218240, 0, 1073741824, 2621440, 1073741824, 0x80000000, 0x80000000, 0, 0, 66048, 0, 0, 0, 67108864, 0, 0, 0, 16384, 0, 0, 0, 8, 0, 0, 0, 9, 4456448, 8, 16777216, 1073774592, 1226014816, 100665360, 100665360, 100665360, 100665360, -2046818288, 1091799136, 1091799136, 1091803360, 1091799136, 1091799136, -2044196848, 1091799136, 1091799136, 1091799136, 1091799136, 1091799136, 1158908000, 1158908001, 1192462432, 1192462448, 1192462448, 1192462448, 1192462448, 1200851056, 1091799393, 1200851056, 1200851056, 1091799393, 1200851056, 1200851056, 1200851056, 1192462448, 1870638912, 1870638912, 1870655296, 1870638912, 1870655296, 1870655296, 1870655296, 1870655296, 1870655296, 1870655312, 1870655316, 1870655316, 1870655316, 1870655317, 1870655348, 1870655316, 1870655316, 1870655312, 1870655312, 1879027568, 1879043952, 1870655316, 1870655316, 1870655316, 1870638928, 1879043952, 1879043956, 0, 0, 1, 12288, 0, 229440, 1048576, 1224736768, 100663296, 0, 0, 0, 1024, 0, 0, 8192, 0, 0, 0, 576, 0, 231488, 1090519040, 0, 0, 0, 2048, 0, 0, 134217728, 0, 1157627904, 1191182336, 0, 0, 131584, 268435456, 49152, 0, 0, 0, 134217728, 0, 0, 0, 16, 0, 0, 0, 13, 0, 9437184, 231744, 0, 0, 235712, 0, 0, 131328, 0, 0, 131072, 32768, 0, 0, 134217728, 0, 520000, 7864320, 1862270976, 0, 0, 0, 4096, 0, 0, 0, 1862270976, 1862270976, 1862270976, 0, 16252928, 0, 0, 0, 8192, 64, 98304, 1048576, 150994944, 83886080, 117440512, 0, 0, 2, 4, 16, 32, 256, 1024, 8192, 33554432, 0, 0, 64, 256, 3584, 8192, 16384, 65536, 262144, 524288, 1048576, 2097152, 4194304, 0x80000000, 8192, 98304, 393216, 524288, 1048576, 1048576, 2097152, 4194304, 251658240, 536870912, 8192, 16384, 98304, 393216, 251658240, 536870912, 1073741824, 0, 0, 2097152, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 240, 0, 83886080, 117440512, 64, 0, 2, 0, 0, 524288, 524288, 524288, 524288, 256, 1536, 2048, 8192, 16384, 256, 1536, 8192, 65536, 262144, 524288, 2097152, 67108864, 4194304, 16777216, 100663296, 134217728, 536870912, 524288, 2097152, 134217728, 268435456, 536870912, 1073741824, 0, 0, 524288, 2097152, 0, 0, 1048576, 2097152, 67108864, 1073741824, 0, 0, 1536, 65536, 262144, 524288, 33554432, 0, 1024, 65536, 262144, 2097152, 2097152, 1073741824, 0, 0, 2, 8, 16, 32, 0, 8192, 4096, 0, 0, 605503, 1066401792, 9476, 512, 0, 32, 384, 8192, 4194312, 4194312, 541065224, 4194312, 4194312, 4194312, 4194312, 4194344, -869654016, -869654016, 4203820, -869654016, -869654016, -869654016, -869654016, 1279402504, 1279402504, 1279402504, 1279402504, 2143549415, 2143549415, 2143549415, 2143549415, 2143549423, 2143549423, 2143549423, 2143549423, 2143549423, 2143549423, 0, 0, 2, 16384, 32768, 260, 512, 0, 0, 0, 65536, 0, 0, 0, 384, 8192, 0, 32, 512, 0, 1050624, 262144, 512, 1275208192, 139264, 1275068416, 0, 0, 4, 128, 1024, 2048, 16384, 262144, 8, 4194304, 0, 0, 0, 82432, 0, 40, 0, 0, 4, 256, 1024, 98304, 131072, 16777216, 268435456, 0, 0, 300, 4203520, 0, 0, 2097152, 1073741824, 0x80000000, 0, 0, 520, 4333568, 1275068416, 0, 0, 4194304, 1024, 0, 4096, 8192, 0, 0, 0, 520, 520, 0, 0, 0, 164096, 999, 29619200, 2113929216, 0, 0, 0, 1007, 1007, 1007, 0, 0, 8, 124160, 32, 512, 0, 2048, 524288, 0, 536870912, 0, 139264, 0, 0, 0, 139264, 0, 40, 0, 2621440, 0, 0, 0x80000000, 1610612736, 0, 0, 0, 229376, 0, 40, 0, 524288, 2097152, 1073741824, 44, 0, 0, 0, 262144, 0, 0, 16384, 229376, 4194304, 25165824, 100663296, 402653184, 1610612736, 0, 110, 110, 110, 0, 0, 8388608, 8388608, 8192, 33554432, 67108864, 134217728, 1073741824, 0, 0x80000000, 0, 0, 0, 12545, 25165824, 33554432, 67108864, 402653184, 536870912, 0, 104, 104, 104, 8192, 33554432, 134217728, 0, 0, 8388608, 134217728, 1073741824, 0, 229376, 25165824, 33554432, 402653184, 536870912, 0, 0, 256, 1024, 65536, 16777216, 268435456, 0, 0, 0, 524288, 0, 0, 0, 64, 0, 0, 0, 128, 0, 0, 0, 256, 0, 0, 0, 300, 524288, 2097152, 0x80000000, 0, 0, 1, 6, 32, 64, 256, 512, 256, 1024, 4096, 8192, 65536, 2, 4, 32, 64, 256, 1024, 0, 2, 4, 256, 1024, 65536, 4, 64, 256, 1024, 0, 0, 8, 8388608, 0, 98304, 131072, 25165824, 268435456, 536870912, 0, 0, 8388608, 4096, 0, 0, 8, 8, 8, 0, 2048, 524288, 67108864, 536870912, 32, 4100, 67108864, 0, 32768, 0, 32768, 0, 1049088, 0, 134348800, 270532608, 0, 1049088, 1049088, 8192, 1049088, 12845065, 12845065, 12845065, 12845065, 147193865, 5505537, 5591557, 5587465, 5587457, 5587457, 147202057, 5587457, 5587457, 5591557, 5587457, 13894153, 13894153, 13894153, 13894153, 81003049, 13894153, -1881791493, -1881791493, -1881791493, -1881791493, 0, 0, 8, 33554432, 262144, 0, 33554432, 1024, 0, 4, 0, 0, 0, 867647, 1, 5505024, 0, 0, 15, 16, 32, 192, 86528, 9, 0, 0, 16, 8192, 0, 0, 23, 0, 75497472, 0, 0, 0, 1048576, 5505024, -1887436800, 0, 0, 0, 2097152, 268435456, 0, 0, 4096, 8192, 67108864, 0, 0, 262144, 4194304, 8388608, 0, 0, 33554432, 8192, 0, 0, 288, 8388608, 0, 0, 0, 81920, 0, 0, 24, 282624, 64, 896, 8192, 131072, 262144, 1048576, 16777216, 33554432, -1946157056, 0, 0, 0, 2621440, 0, 131072, 0, 32, 0, 0, 2048, 3145728, 0, 16384, 65536, 0, 0, 268435456, 32, 64, 384, 512, 5120, 8192, 0, 64, 0, 2048, 1048576, 0, 0, 32, 64, 384, 8192, 131072, 0, 0, 32768, 134217728, 0, 0, 8, 32, 64, 1024, 2048, 0, 2, 8, 32, 384, 8192, 131072, 33554432, 131072, 1048576, 33554432, 134217728, 0x80000000, 0, 0, 2048, 524288, 536870912, 0, 1073741824, 0, 131072, 33554432, 0x80000000, 0, 0, 33554432, 1073741824, 0, 32, 0, 524288, 0, 0, 67108864, 64, 64, 0, 96, 96, 0, 524288, 524288, 524288, 64, 64, 64, 64, 96, 96, 96, 0, 0, 0, 28, 0, 8396800, 4194304, 134217728, 2048, 134217728, 0, 0, 32, 1, 0, 8396800, 0, 0, 32, 64, 128, 1024, 2048, 262144, 0, 16384, 0, 2, 4, 64, 128, 3840, 16384, 19922944, 2080374784, 0, 16384, 16384, 16777216, 16384, 32768, 1048576, 2097152, 4194304, 16777216, 524288, 268567040, 16384, 2113544, 68489237, 72618005, 68423701, 68423701, 68423701, 68489237, 68423701, -2079059883, -2079059947, 68423701, 85200917, 68423701, 68423701, 68423701, 68423701, 68423765, -2079059883, 68425749, 68423703, 69488664, 85200919, 69488664, 69488664, 69488664, 69488664, 70537244, 70537245, 70537245, 70537245, 70537309, 70537245, -2076946339, -2076946403, 70537245, -2076946339, 70537245, 70537245, 70537245, 70537245, 70539293, -2022351745, -2022351745, -2022351617, -2022351745, -2022351617, -2022351617, -2022351617, -2022351617, -2022351617, -2022351617, -2022351745, -2022351617, -2022351617, 0, 0, 40, 67108864, 331776, 83886080, 0, 0, 59, 140224, 5505024, 5242880, -2080374784, -2080374784, 268288, 29, 0, 284672, 0, 0, 68157440, 137363456, 0, 66, 66, 0, 63, 64, 351232, 63, 192, 351232, 7340032, -2030043136, 0, 0, 0, 4194304, 1, 1024, 32, 64, 256, 32768, 65536, 512, 131072, 268435456, 0, 0, 134348800, 134348800, 16, 4096, 262144, 1048576, 4194304, 8388608, 16777216, 33554432, 5242880, 0, 7, 0, 0, 142606336, 0, -872415232, 0, 0, 0, 131072, 0, 0, 0, 999, 259072, 4194304, 25165824, 0, 20480, 0, 0, 64, 256, 1536, 8192, 16384, 0, 12, 3145728, 0, 0, 0, 3145728, 64, 3072, 20480, 65536, 262144, 32, 192, 3072, 20480, 4, 1048576, 0, 0, 128, 131072, 0, 134218752, 0, 0, 128, 134217728, 5242880, 0, 6, 0, 0, 16384, 65536, 7340032, 50331648, 32, 192, 1024, 2048, 4096, 8192, 65536, 32768, 65536, 4194304, 16777216, 0x80000000, 0, 0, 1, 4, 0, 0, 256, 1536, 65536, 65536, 2097152, 4194304, 50331648, 0x80000000, 32, 192, 1024, 65536, 268435456, 0, 0, 32768, 4194304, 16777216, 0, 0, 184549376, 0, 0, 243269632, 0, 0, 32768, 131072, 131072, 0, 32768, 32768, 1, 2, 4, 2097152, 16777216, 134217728, 268435456, 1073741824, 0x80000000, 128, 2097152, 4194304, 50331648, 0, 0, 0, 8388608, 0, 0, 0, 768, 2, 4, 50331648, 0, 0, 536870912, 9216, 0, 0, 0, 49152, 2, 4, 128, 50331648, 0, 0, 4096, 4194304, 268435456, 0, 0, 1075838976, 2097152, 2097152, 268435456, 4194432, 268435968, 268435968, 1073743872, 268435968, 0, 128, 6144, 0, 229376, 128, 268435968, 268436032, 256, 256, 536871168, 256, 256, 256, 256, 257, 256, 384, -1879046336, -1879046334, 1073744256, -1879046334, -1879046326, -1879046334, -1879046334, -1879046326, -1879046326, -1845491902, -1878784182, 268444480, 268444480, 268436288, 268436288, 268436288, 268436288, 268436289, 268444480, 268444480, 268444480, 268444480, 2100318149, 2100318149, 2100318149, 2100318149, 2100326341, 2100326341, 2100318149, 2100326341, 2100326341, 0, 0, 256, 2048, 2048, 0, 0, 0, 4, 8, 262144, 134217728, 1, 1024, 0, 4096, 0, 64, 1856, 0x80000000, 0, 0, 256, 65536, 2432, 0, 1864, 0, 1, 2, 16, 32, 64, 0, 301989888, 0, 262144, 131072, 0, 0, 832, 8192, 0, 1, 2, 56, 64, 896, 0, 1, 4036, 19939328, 2080374784, 2080374784, 0, 0, 0, 16252928, 1, 16, 32, 128, 512, 2304, 0, 8, 0, 512, 301989888, 0, 0, 262144, 524288, 134217728, 536870912, 0, 24576, 0, 0, 0, 33554432, 0, 0, 0, 32768, 0, 0, 2097152, 134217728, 0, 32768, 196608, 0, 0, 0, 1, 128, 512, 2048, 524288, 268435456, 536870912, 0, 33554432, 262144, 8192, 0, 0, 256, 8388608, 0, 0, 1, 4, 128, 3584, 16384, 3145728, 16777216, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1024, 2048, 16384, 3145728, 0, 8192, 0, 8192, 0, 536870912, 524288, 536870912, 1073741824, 0, 1, 2, 112, 128, 3072, 2048, 3145728, 16777216, 536870912, 1073741824, 0, 0, 2097152, 16777216, 1073741824, 0, 0, 0, 8192, 8192, 8192, 9216, 33554432, 32768, 33554432, 0, 0, 262144, 0, 16777216, 0, 16777216, 16777216, 16777216, 16777216, 0, 0, 2097152, 16777216, 0, 0, 16777216, 268500992, 4243456, 0, 0, 512, 65536, 0, 4096, 4096, 0, 4096, 4096, 4096, 4096, 0, 0, 0, 32, 0, 0, 0, 41, 0, 4243456, 4096, 12289, 1073754113, 12289, 12289, 1124073472, 12289, 12289, 1098920193, 1098920193, 1124073488, 1124073472, 1124073472, 1258292224, 1124073472, 1124073474, 1124073472, 1124073472, 1124073472, 1124073472, 1124073472, 1392574464, 1124073472, 12289, 1124085761, 1124085761, 1124085761, 1124085761, 1132474625, 1098920209, 1132474625, 1132474625, 1098920209, 1132474625, 1132474625, 1132474625, 1132474625, 1400975617, 1124085777, 1124085761, 1124085761, 1258304513, 2132360255, 2132360255, 2132622399, 2132360255, 2132622399, 2132622399, 2140749119, 2141011263, 2132622399, 2132622399, 2132622399, 2132622399, 2132360255, 2141011263, 2141011263, 0, 0, 512, 131072, 0, 128, 131072, 1024, 134217728, 0, 0, 0, 50331648, 1073741824, 0, 1, 4, 64, 128, 3584, 318767104, 0, 0, 0, 268435456, 0, 12289, 0, 0, 0, 159383552, 25165824, 0, 0, 0, 536870912, 0, 0, 0, 24576, 58720256, 0, 0, 12305, 13313, 0, 0, 0, 1073741824, 0, 0, 0, 12561, 0, 78081, 327155712, 0, 0, 0, 1275068416, 0, 605247, 1058013184, 1073741824, 1073741824, 8388608, 0, 0, 503616, 7864320, 867391, 1058013184, 1073741824, 0, 1, 6, 96, 384, 512, 1024, 4096, 8192, 16384, 229376, 25165824, 33554432, 268435456, 536870912, 0, 867647, 1066401792, 0, 0, 0, 512, 1048576, 0, 0, 9, 8388608, 12288, 0, 0, 0, 512, 2760704, 77824, 0, 0, 0, 1024, 2048, 3145728, 2048, 77824, 524288, 1048576, 0, 0, 0, 512, 0, 1048576, 0, 1, 30, 32, 1024, 2048, 1024, 2048, 339968, 524288, 1048576, 16777216, 100663296, 134217728, 805306368, 1073741824, 1024, 2048, 12288, 65536, 0, 65536, 0, 0, 19947520, 0, 0, 0, 16777216, 0, 0, 0, 5, 1024, 2048, 12288, 327680, 524288, 33554432, 134217728, 536870912, 1073741824, 14, 16, 1024, 4096, 8192, 229376, 0, 2, 16384, 4194304, 0x80000000, 0, 0, 0, 8, 0, 65536, 262144, 7340032, 50331648, 67108864, 0x80000000, 4096, 65536, 262144, 524288, 1048576, 33554432, 256, 0, 256, 0, 256, 1, 12, 1024, 134217728, 262144, 134217728, 536870912, 0, 0, 268435456, 1, 4, 8, 134217728, 4, 8, 536870912, 0, 2, 16, 64, 128, 0, 0, 262144, 536870912, 0, 0, 1073741824, 32768, 0, 8, 32, 512, 4096, 9437184, 0, 0, 1048576, 2097152, 4194304, 67108864, 134217728, 0, 1024, 137363456, 66, 25165824, 26214400, 92274688, 92274688, 25165952, 92274688, 25165824, 25165824, 92274688, 25165824, 25165824, 92274688, 92274688, 92274720, 92274688, 25165824, 92274688, 93323264, 25165890, 100721664, 100721664, 25165890, 100721928, 100721928, 100787464, 100853000, 100721928, 100721928, 125977600, 125977600, 125977600, 125977600, 127026176, 125977600, 125846528, 125846528, 125846560, 125846528, 125846528, 125846528, 126895104, 125846528, 125977600, 127026176, 125977600, 125977600, 127026176, 127026176, 281843, 281843, 1330419, 281843, 1330419, 281843, 1330419, 1330419, 281843, 281843, 281843, 5524723, 39079155, 72633587, 5524723, 5524723, 5524723, 5524723, 93605107, 72633587, 72633587, 92556531, 93605107, 127290611, 127290611, 97799411, 127290611, 131484915, 0, 0, 1536, 0x80000000, 0, 0, 17408, 33554432, 0, 1, 12, 1024, 262144, 0, 58624, 0, 0, 1536, 0, 189696, 0, 0, 0, 1792, 0x80000000, 0, 148480, 50331648, 0, 1, 14, 1024, 4096, 65536, 524288, 240, 19456, 262144, 0, 0, 19456, 262144, 0, 4194304, 0, 0, 1024, 2097152, 0, 0, 0, 150528, 0, 0, 0, 512, 4096, 8192, 131072, 0, 57344, 0, 0, 0, 2048, 100663296, 0, 0, 256, 0, 65536, 524288, 1048576, 33554432, 67108864, 2, 48, 64, 128, 3072, 16384, 262144, 0, 0, 32, 4096, 8192, 131072, 1048576, 8388608, 33554432, 134217728, 2048, 262144, 0, 0, 2048, 268435456, 16, 64, 128, 262144, 0, 0, 32768, 65536, 131072, 0, 1, 2, 16, 64, 0\n];\n\nXQueryParser.TOKEN =\n[\n  \"(0)\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSection\",\n  \"Wildcard\",\n  \"EQName\",\n  \"URILiteral\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"StringLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"PITarget\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'!='\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$'\",\n  \"'%'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"'+'\",\n  \"','\",\n  \"'-'\",\n  \"'-->'\",\n  \"'.'\",\n  \"'..'\",\n  \"'/'\",\n  \"'//'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"'::'\",\n  \"':='\",\n  \"';'\",\n  \"'<'\",\n  \"'<!--'\",\n  \"'</'\",\n  \"'<<'\",\n  \"'<='\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'>='\",\n  \"'>>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'@'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'{|'\",\n  \"'|'\",\n  \"'||'\",\n  \"'|}'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/tree_ops.js\":[function(_dereq_,module,exports){\n'use strict';\n\nexports.TreeOps = {\n    flatten: function(node){\n        var that = this;\n        var value = '';\n        if(!node) {\n            throw new Error('Invalid node found');\n        } else if (node.value === undefined) {\n            node.children.forEach(function(child){\n                value += that.flatten(child);\n            });\n        } else {\n            value += node.value;\n        }\n        return value;\n    },\n    \n    concat: function(obj1, obj2, copy){\n        var result = copy ? {} : obj1;\n        if(copy){\n            Object.keys(obj1).forEach(function(key){\n                result[key] = obj1[key];\n            });\n        }\n        var keys = Object.keys(obj2);\n        keys.forEach(function(key){\n            result[key] = obj2[key];\n        });\n        return result;\n    },\n    \n    removeParentPtr: function(ast){\n        if(ast.getParent !== undefined) {\n            delete ast.getParent;\n        }\n        for(var i in ast.children) {\n            var child = ast.children[i];\n            this.removeParentPtr(child);\n        }\n    },\n    \n    inRange: function(p, pos, exclusive){\n        if(p && p.sl <= pos.line && pos.line <= p.el) {\n            if(p.sl < pos.line && pos.line < p.el) {\n                return true;\n            } else if(p.sl === pos.line && pos.line < p.el) {\n                return p.sc <= pos.col;\n            } else if(p.sl === pos.line && p.el === pos.line) {\n                return p.sc <= pos.col && pos.col <= p.ec + (exclusive ? 1 : 0);\n            } else if(p.sl < pos.line && p.el === pos.line) {\n                return pos.col <= p.ec + (exclusive ? 1 : 0);\n            }\n        }\n    },\n    \n    findNode: function(ast, pos) {\n        if(!ast) {\n            return;\n        }\n        var p = ast.pos;\n        if(this.inRange(p, pos) === true) {\n            for(var i in ast.children) {\n                var child = ast.children[i];\n                var n = this.findNode(child, pos);\n                if(n !== undefined) {\n                    return n;\n                }\n            }\n            return ast;\n        } else {\n            return;\n        }\n    },\n    \n    astAsXML: function(node, indent){\n        var result =  '';\n        indent = indent ? indent : '';\n        if(node.value) {\n            result += (indent + '<' + node.name + '>' + node.value + '</' + node.name + '>\\n');\n        }\n        result += indent + '<' + node.name + '>\\n';\n        var that = this;\n        node.children.forEach(function(child){\n            result += that.astAsXML(child, indent + '  ');\n        });\n        result += indent + '</' + node.name + '>\\n';\n        return result;\n    }\n};\n},{}],\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\":[function(_dereq_,module,exports){\n'use strict';\n\nexports.parseComment = function(comment){\n    comment = comment.trim();\n    var isXQDoc = comment.substring(0, 3) === '(:~';\n    if(isXQDoc){\n        var lines = comment.split('\\n');\n        var ann = {\n            description: ''\n        };\n        lines.forEach(function(line, index){\n            if(index === 0) {\n                line = line.substring(3);\n            }\n            line = line.trim();\n            if(line[0] === ':') {\n                line = line.substring(1);\n            }\n            line = line.trim();\n            ann.description += ' ' + line;\n        });\n        ann.description = ann.description.trim();\n        ann.description = ann.description.substring(0, ann.description.length - 2).trim();\n        return ann;\n    }\n};\n},{}],\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\":[function(_dereq_,module,exports){\nvar _ = _dereq_('lodash');\nvar parseComment = _dereq_('./parse_comment').parseComment;\n\nexports.XQDoc = function(ast){\n    'use strict';\n\n    var doc = {};\n\n    this.getDoc = function(){\n        return doc;\n    };\n\n    this.WS = function(node){\n        if(node.value.trim().substring(0, 3) === '(:~') {\n            node.getParent.comment = parseComment(node.value);\n        }\n    };\n\n    this.AnnotatedDecl = function(node){\n        this.visitChildren(node);\n        node.comment = node.getParent.comment;\n        node.getParent.comment = undefined;\n    };\n    \n    this.XQuery = function(node){\n        this.visitChildren(node);\n    };\n\n    this.getXQDoc = function(sctx){\n        var doc = {\n            moduleNamespace: sctx.moduleNamespace,\n            description: sctx.description,\n            variables: [],\n            functions: []\n        };\n\n        _.forEach(sctx.variables, function(variable){\n            var varDecl = _.cloneDeep(variable.qname);\n            varDecl.annotations = variable.annotations;\n            varDecl.description = variable.description;\n            varDecl.type = variable.type;\n            varDecl.occurrence = variable.occurrence;\n            doc.variables.push(varDecl);\n        });\n\n        _.forEach(sctx.functions, function(fn, key){\n            if(key.substring(0, 'http://www.w3.org/2001/XMLSchema#'.length) === 'http://www.w3.org/2001/XMLSchema#') {\n                return;\n            }\n\n            var tokens = key.split('#');\n            doc.functions.push({\n                name: tokens[0],\n                uri: tokens[1],\n                params: fn.params\n            });\n        });\n\n        return doc;\n    };\n\n    this.visit = function (node) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    this.visit(ast);\n};\n\n},{\"./parse_comment\":\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\",\"lodash\":\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/lib/xqlint.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar _ = _dereq_('lodash');\n\nvar JSONiqParser = _dereq_('./parsers/JSONiqParser').JSONiqParser;\nvar XQueryParser = _dereq_('./parsers/XQueryParser').XQueryParser;\nvar JSONParseTreeHandler = _dereq_('./parsers/JSONParseTreeHandler').JSONParseTreeHandler;\nvar Translator = _dereq_('./compiler/translator').Translator;\nvar StyleChecker = _dereq_('./formatter/style_checker').StyleChecker;\nvar XQDoc = _dereq_('./xqdoc/xqdoc').XQDoc;\nvar completer = _dereq_('../lib/completion/completer');\nvar TreeOps = _dereq_('./tree_ops').TreeOps;\n\nvar createStaticContext = exports.createStaticContext = function(){\n    var StaticContext = _dereq_('./compiler/static_context').StaticContext;\n    return new StaticContext();\n};\n\nvar convertPosition = function (code, begin, end) {\n    var before = code.substring(0, begin);\n    var after = code.substring(0, end);\n    var startline = before.split('\\n').length;\n    var startcolumn = begin - before.lastIndexOf('\\n');\n    var endline = after.split('\\n').length;\n    var endcolumn = end - after.lastIndexOf('\\n');\n    var pos = {\n        sl: startline - 1,\n        sc: startcolumn - 1,\n        el: endline - 1,\n        ec: endcolumn - 1\n    };\n    return pos;\n};\n\nexports.JSONiqLexer = _dereq_('./lexers/jsoniq_lexer').JSONiqLexer;\nexports.XQueryLexer = _dereq_('./lexers/xquery_lexer').XQueryLexer;\nexports.XQLint = function (source, opts) {\n    if(_.defaults) {\n        opts = _.defaults(opts ? opts : {}, { styleCheck: false });\n    }\n\n    var ast, xqdoc;\n    var sctx = opts.staticContext ? opts.staticContext : createStaticContext();\n\n    this.getAST = function () {\n        return ast;\n    };\n    \n    this.printAST = function () {\n        return TreeOps.astAsXML(ast, '  ');\n    };\n\n    this.getXQDoc = function () {\n        return xqdoc.getXQDoc(sctx);\n    };\n\n    var markers = [];\n    this.getMarkers = function () {\n        return markers;\n    };\n    \n    this.getMarkers = function(type){\n        var m = [];\n        markers.forEach(function(marker){\n            if(marker.type === type || type === undefined){\n                m.push(marker);\n            }\n        });\n        return m;\n    };\n\n    this.getErrors = function(){\n        return this.getMarkers('error');\n    };\n\n    this.getWarnings = function(){\n        return this.getMarkers('warning');\n    };\n    \n    this.getCompletions = function(pos){\n        return completer.complete(source, ast, sctx, pos);\n    };\n\n    var syntaxError = false;\n    this.hasSyntaxError = function () {\n        return syntaxError;\n    };\n\n    var file = opts.fileName ? opts.fileName : '';\n    var isJSONiq = ((file.substring(file.length - '.jq'.length).indexOf('.jq') !== -1) && source.indexOf('xquery version') !== 0) || source.indexOf('jsoniq version') === 0;\n    var h = new JSONParseTreeHandler(source);\n    var parser = isJSONiq ? new JSONiqParser(source, h) : new XQueryParser(source, h);\n    try {\n        parser.parse_XQuery();\n    } catch (e) {\n        if (e instanceof parser.ParseException) {\n            syntaxError = true;\n            h.closeParseTree();\n            var pos = convertPosition(source, e.getBegin(), e.getEnd());\n            var message = parser.getErrorMessage(e);\n            if (pos.sc === pos.ec) {\n                pos.ec++;\n            }\n            markers.push({\n                pos: pos,\n                type: 'error',\n                level: 'error',\n                message: message\n            });\n        } else {\n            throw e;\n        }\n    }\n    ast = h.getParseTree();\n    if(opts.styleCheck) {\n        markers = markers.concat(new StyleChecker(ast, source).getMarkers());\n    }\n    xqdoc = new XQDoc(ast);\n    var translator = new Translator(sctx, ast);\n    markers = markers.concat(translator.getMarkers());\n};\n\n},{\"../lib/completion/completer\":\"/node_modules/xqlint/lib/completion/completer.js\",\"./compiler/static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\",\"./compiler/translator\":\"/node_modules/xqlint/lib/compiler/translator.js\",\"./formatter/style_checker\":\"/node_modules/xqlint/lib/formatter/style_checker.js\",\"./lexers/jsoniq_lexer\":\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\",\"./lexers/xquery_lexer\":\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\",\"./parsers/JSONParseTreeHandler\":\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\",\"./parsers/JSONiqParser\":\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\",\"./parsers/XQueryParser\":\"/node_modules/xqlint/lib/parsers/XQueryParser.js\",\"./tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./xqdoc/xqdoc\":\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\",\"lodash\":\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/node_modules/lodash/index.js\":[function(_dereq_,module,exports){\n(function (global){\n;(function() {\n  var undefined;\n  var VERSION = '3.10.1';\n  var BIND_FLAG = 1,\n      BIND_KEY_FLAG = 2,\n      CURRY_BOUND_FLAG = 4,\n      CURRY_FLAG = 8,\n      CURRY_RIGHT_FLAG = 16,\n      PARTIAL_FLAG = 32,\n      PARTIAL_RIGHT_FLAG = 64,\n      ARY_FLAG = 128,\n      REARG_FLAG = 256;\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n  var HOT_COUNT = 150,\n      HOT_SPAN = 16;\n  var LARGE_ARRAY_SIZE = 200;\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2;\n  var FUNC_ERROR_TEXT = 'Expected a function';\n  var PLACEHOLDER = '__lodash_placeholder__';\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      objectTag = '[object Object]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      weakMapTag = '[object WeakMap]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,\n      reUnescapedHtml = /[&<>\"'`]/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n  var reRegExpChars = /^[:!,]|[\\\\^$.*+?()[\\]{}|\\/]|(^[0-9a-fA-Fnrtuvx])|([\\n\\r\\u2028\\u2029])/g,\n      reHasRegExpChars = RegExp(reRegExpChars.source);\n  var reComboMark = /[\\u0300-\\u036f\\ufe20-\\ufe23]/g;\n  var reEscapeChar = /\\\\(\\\\)?/g;\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n  var reFlags = /\\w*$/;\n  var reHasHexPrefix = /^0[xX]/;\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n  var reIsUint = /^\\d+$/;\n  var reLatin1 = /[\\xc0-\\xd6\\xd8-\\xde\\xdf-\\xf6\\xf8-\\xff]/g;\n  var reNoMatch = /($^)/;\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n  var reWords = (function() {\n    var upper = '[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]',\n        lower = '[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]+';\n\n    return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');\n  }());\n  var contextProps = [\n    'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',\n    'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',\n    'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'\n  ];\n  var templateCounter = -1;\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[mapTag] = cloneableTags[setTag] =\n  cloneableTags[weakMapTag] = false;\n  var deburredLetters = {\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcC': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xeC': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss'\n  };\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;',\n    '`': '&#96;'\n  };\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\",\n    '&#96;': '`'\n  };\n  var objectTypes = {\n    'function': true,\n    'object': true\n  };\n  var regexpEscapes = {\n    '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',\n    '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',\n    'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',\n    'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',\n    'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'\n  };\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\n  function baseCompareAscending(value, other) {\n    if (value !== other) {\n      var valIsNull = value === null,\n          valIsUndef = value === undefined,\n          valIsReflexive = value === value;\n\n      var othIsNull = other === null,\n          othIsUndef = other === undefined,\n          othIsReflexive = other === other;\n\n      if ((value > other && !othIsNull) || !valIsReflexive ||\n          (valIsNull && !othIsUndef && othIsReflexive) ||\n          (valIsUndef && othIsReflexive)) {\n        return 1;\n      }\n      if ((value < other && !valIsNull) || !othIsReflexive ||\n          (othIsNull && !valIsUndef && valIsReflexive) ||\n          (othIsUndef && valIsReflexive)) {\n        return -1;\n      }\n    }\n    return 0;\n  }\n  function baseFindIndex(array, predicate, fromRight) {\n    var length = array.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  function baseIndexOf(array, value, fromIndex) {\n    if (value !== value) {\n      return indexOfNaN(array, fromIndex);\n    }\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  function baseIsFunction(value) {\n    return typeof value == 'function' || false;\n  }\n  function baseToString(value) {\n    return value == null ? '' : (value + '');\n  }\n  function charsLeftIndex(string, chars) {\n    var index = -1,\n        length = string.length;\n\n    while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}\n    return index;\n  }\n  function charsRightIndex(string, chars) {\n    var index = string.length;\n\n    while (index-- && chars.indexOf(string.charAt(index)) > -1) {}\n    return index;\n  }\n  function compareAscending(object, other) {\n    return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);\n  }\n  function compareMultiple(object, other, orders) {\n    var index = -1,\n        objCriteria = object.criteria,\n        othCriteria = other.criteria,\n        length = objCriteria.length,\n        ordersLength = orders.length;\n\n    while (++index < length) {\n      var result = baseCompareAscending(objCriteria[index], othCriteria[index]);\n      if (result) {\n        if (index >= ordersLength) {\n          return result;\n        }\n        var order = orders[index];\n        return result * ((order === 'asc' || order === true) ? 1 : -1);\n      }\n    }\n    return object.index - other.index;\n  }\n  function deburrLetter(letter) {\n    return deburredLetters[letter];\n  }\n  function escapeHtmlChar(chr) {\n    return htmlEscapes[chr];\n  }\n  function escapeRegExpChar(chr, leadingChar, whitespaceChar) {\n    if (leadingChar) {\n      chr = regexpEscapes[chr];\n    } else if (whitespaceChar) {\n      chr = stringEscapes[chr];\n    }\n    return '\\\\' + chr;\n  }\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n  function indexOfNaN(array, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 0 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var other = array[index];\n      if (other !== other) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  function isObjectLike(value) {\n    return !!value && typeof value == 'object';\n  }\n  function isSpace(charCode) {\n    return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||\n      (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));\n  }\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      if (array[index] === placeholder) {\n        array[index] = PLACEHOLDER;\n        result[++resIndex] = index;\n      }\n    }\n    return result;\n  }\n  function sortedUniq(array, iteratee) {\n    var seen,\n        index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index],\n          computed = iteratee ? iteratee(value, index, array) : value;\n\n      if (!index || seen !== computed) {\n        seen = computed;\n        result[++resIndex] = value;\n      }\n    }\n    return result;\n  }\n  function trimmedLeftIndex(string) {\n    var index = -1,\n        length = string.length;\n\n    while (++index < length && isSpace(string.charCodeAt(index))) {}\n    return index;\n  }\n  function trimmedRightIndex(string) {\n    var index = string.length;\n\n    while (index-- && isSpace(string.charCodeAt(index))) {}\n    return index;\n  }\n  function unescapeHtmlChar(chr) {\n    return htmlUnescapes[chr];\n  }\n  function runInContext(context) {\n    context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Number = context.Number,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n    var arrayProto = Array.prototype,\n        objectProto = Object.prototype,\n        stringProto = String.prototype;\n    var fnToString = Function.prototype.toString;\n    var hasOwnProperty = objectProto.hasOwnProperty;\n    var idCounter = 0;\n    var objToString = objectProto.toString;\n    var oldDash = root._;\n    var reIsNative = RegExp('^' +\n      fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n    var ArrayBuffer = context.ArrayBuffer,\n        clearTimeout = context.clearTimeout,\n        parseFloat = context.parseFloat,\n        pow = Math.pow,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        Set = getNative(context, 'Set'),\n        setTimeout = context.setTimeout,\n        splice = arrayProto.splice,\n        Uint8Array = context.Uint8Array,\n        WeakMap = getNative(context, 'WeakMap');\n    var nativeCeil = Math.ceil,\n        nativeCreate = getNative(Object, 'create'),\n        nativeFloor = Math.floor,\n        nativeIsArray = getNative(Array, 'isArray'),\n        nativeIsFinite = context.isFinite,\n        nativeKeys = getNative(Object, 'keys'),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = getNative(Date, 'now'),\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random;\n    var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,\n        POSITIVE_INFINITY = Number.POSITIVE_INFINITY;\n    var MAX_ARRAY_LENGTH = 4294967295,\n        MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n        HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n    var MAX_SAFE_INTEGER = 9007199254740991;\n    var metaMap = WeakMap && new WeakMap;\n    var realNames = {};\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n    function baseLodash() {\n    }\n    function LodashWrapper(value, chainAll, actions) {\n      this.__wrapped__ = value;\n      this.__actions__ = actions || [];\n      this.__chain__ = !!chainAll;\n    }\n    var support = lodash.support = {};\n    lodash.templateSettings = {\n      'escape': reEscape,\n      'evaluate': reEvaluate,\n      'interpolate': reInterpolate,\n      'variable': '',\n      'imports': {\n        '_': lodash\n      }\n    };\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = POSITIVE_INFINITY;\n      this.__views__ = [];\n    }\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = arrayCopy(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = arrayCopy(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = arrayCopy(this.__views__);\n      return result;\n    }\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {\n        return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n    function MapCache() {\n      this.__data__ = {};\n    }\n    function mapDelete(key) {\n      return this.has(key) && delete this.__data__[key];\n    }\n    function mapGet(key) {\n      return key == '__proto__' ? undefined : this.__data__[key];\n    }\n    function mapHas(key) {\n      return key != '__proto__' && hasOwnProperty.call(this.__data__, key);\n    }\n    function mapSet(key, value) {\n      if (key != '__proto__') {\n        this.__data__[key] = value;\n      }\n      return this;\n    }\n    function SetCache(values) {\n      var length = values ? values.length : 0;\n\n      this.data = { 'hash': nativeCreate(null), 'set': new Set };\n      while (length--) {\n        this.push(values[length]);\n      }\n    }\n    function cacheIndexOf(cache, value) {\n      var data = cache.data,\n          result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];\n\n      return result ? 0 : -1;\n    }\n    function cachePush(value) {\n      var data = this.data;\n      if (typeof value == 'string' || isObject(value)) {\n        data.set.add(value);\n      } else {\n        data.hash[value] = true;\n      }\n    }\n    function arrayConcat(array, other) {\n      var index = -1,\n          length = array.length,\n          othIndex = -1,\n          othLength = other.length,\n          result = Array(length + othLength);\n\n      while (++index < length) {\n        result[index] = array[index];\n      }\n      while (++othIndex < othLength) {\n        result[index++] = other[othIndex];\n      }\n      return result;\n    }\n    function arrayCopy(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n    function arrayEach(array, iteratee) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (iteratee(array[index], index, array) === false) {\n          break;\n        }\n      }\n      return array;\n    }\n    function arrayEachRight(array, iteratee) {\n      var length = array.length;\n\n      while (length--) {\n        if (iteratee(array[length], length, array) === false) {\n          break;\n        }\n      }\n      return array;\n    }\n    function arrayEvery(array, predicate) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (!predicate(array[index], index, array)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function arrayExtremum(array, iteratee, comparator, exValue) {\n      var index = -1,\n          length = array.length,\n          computed = exValue,\n          result = computed;\n\n      while (++index < length) {\n        var value = array[index],\n            current = +iteratee(value);\n\n        if (comparator(current, computed)) {\n          computed = current;\n          result = value;\n        }\n      }\n      return result;\n    }\n    function arrayFilter(array, predicate) {\n      var index = -1,\n          length = array.length,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result[++resIndex] = value;\n        }\n      }\n      return result;\n    }\n    function arrayMap(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = iteratee(array[index], index, array);\n      }\n      return result;\n    }\n    function arrayPush(array, values) {\n      var index = -1,\n          length = values.length,\n          offset = array.length;\n\n      while (++index < length) {\n        array[offset + index] = values[index];\n      }\n      return array;\n    }\n    function arrayReduce(array, iteratee, accumulator, initFromArray) {\n      var index = -1,\n          length = array.length;\n\n      if (initFromArray && length) {\n        accumulator = array[++index];\n      }\n      while (++index < length) {\n        accumulator = iteratee(accumulator, array[index], index, array);\n      }\n      return accumulator;\n    }\n    function arrayReduceRight(array, iteratee, accumulator, initFromArray) {\n      var length = array.length;\n      if (initFromArray && length) {\n        accumulator = array[--length];\n      }\n      while (length--) {\n        accumulator = iteratee(accumulator, array[length], length, array);\n      }\n      return accumulator;\n    }\n    function arraySome(array, predicate) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (predicate(array[index], index, array)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    function arraySum(array, iteratee) {\n      var length = array.length,\n          result = 0;\n\n      while (length--) {\n        result += +iteratee(array[length]) || 0;\n      }\n      return result;\n    }\n    function assignDefaults(objectValue, sourceValue) {\n      return objectValue === undefined ? sourceValue : objectValue;\n    }\n    function assignOwnDefaults(objectValue, sourceValue, key, object) {\n      return (objectValue === undefined || !hasOwnProperty.call(object, key))\n        ? sourceValue\n        : objectValue;\n    }\n    function assignWith(object, source, customizer) {\n      var index = -1,\n          props = keys(source),\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index],\n            value = object[key],\n            result = customizer(value, source[key], key, object, source);\n\n        if ((result === result ? (result !== value) : (value === value)) ||\n            (value === undefined && !(key in object))) {\n          object[key] = result;\n        }\n      }\n      return object;\n    }\n    function baseAssign(object, source) {\n      return source == null\n        ? object\n        : baseCopy(source, keys(source), object);\n    }\n    function baseAt(collection, props) {\n      var index = -1,\n          isNil = collection == null,\n          isArr = !isNil && isArrayLike(collection),\n          length = isArr ? collection.length : 0,\n          propsLength = props.length,\n          result = Array(propsLength);\n\n      while(++index < propsLength) {\n        var key = props[index];\n        if (isArr) {\n          result[index] = isIndex(key, length) ? collection[key] : undefined;\n        } else {\n          result[index] = isNil ? undefined : collection[key];\n        }\n      }\n      return result;\n    }\n    function baseCopy(source, props, object) {\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n        object[key] = source[key];\n      }\n      return object;\n    }\n    function baseCallback(func, thisArg, argCount) {\n      var type = typeof func;\n      if (type == 'function') {\n        return thisArg === undefined\n          ? func\n          : bindCallback(func, thisArg, argCount);\n      }\n      if (func == null) {\n        return identity;\n      }\n      if (type == 'object') {\n        return baseMatches(func);\n      }\n      return thisArg === undefined\n        ? property(func)\n        : baseMatchesProperty(func, thisArg);\n    }\n    function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n      var result;\n      if (customizer) {\n        result = object ? customizer(value, key, object) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return arrayCopy(value, result);\n        }\n      } else {\n        var tag = objToString.call(value),\n            isFunc = tag == funcTag;\n\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = initCloneObject(isFunc ? {} : value);\n          if (!isDeep) {\n            return baseAssign(result, value);\n          }\n        } else {\n          return cloneableTags[tag]\n            ? initCloneByTag(value, tag, isDeep)\n            : (object ? value : {});\n        }\n      }\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == value) {\n          return stackB[length];\n        }\n      }\n      stackA.push(value);\n      stackB.push(result);\n      (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n        result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n      });\n      return result;\n    }\n    var baseCreate = (function() {\n      function object() {}\n      return function(prototype) {\n        if (isObject(prototype)) {\n          object.prototype = prototype;\n          var result = new object;\n          object.prototype = undefined;\n        }\n        return result || {};\n      };\n    }());\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n    function baseDifference(array, values) {\n      var length = array ? array.length : 0,\n          result = [];\n\n      if (!length) {\n        return result;\n      }\n      var index = -1,\n          indexOf = getIndexOf(),\n          isCommon = indexOf == baseIndexOf,\n          cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,\n          valuesLength = values.length;\n\n      if (cache) {\n        indexOf = cacheIndexOf;\n        isCommon = false;\n        values = cache;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index];\n\n        if (isCommon && value === value) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === value) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (indexOf(values, value, 0) < 0) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n    var baseEach = createBaseEach(baseForOwn);\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n    function baseExtremum(collection, iteratee, comparator, exValue) {\n      var computed = exValue,\n          result = computed;\n\n      baseEach(collection, function(value, index, collection) {\n        var current = +iteratee(value, index, collection);\n        if (comparator(current, computed) || (current === exValue && current === result)) {\n          computed = current;\n          result = value;\n        }\n      });\n      return result;\n    }\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = start == null ? 0 : (+start || 0);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : (+end || 0);\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : (end >>> 0);\n      start >>>= 0;\n\n      while (start < length) {\n        array[start++] = value;\n      }\n      return array;\n    }\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n    function baseFind(collection, predicate, eachFunc, retKey) {\n      var result;\n      eachFunc(collection, function(value, key, collection) {\n        if (predicate(value, key, collection)) {\n          result = retKey ? key : value;\n          return false;\n        }\n      });\n      return result;\n    }\n    function baseFlatten(array, isDeep, isStrict, result) {\n      result || (result = []);\n\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index];\n        if (isObjectLike(value) && isArrayLike(value) &&\n            (isStrict || isArray(value) || isArguments(value))) {\n          if (isDeep) {\n            baseFlatten(value, isDeep, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n    var baseFor = createBaseFor();\n    var baseForRight = createBaseFor(true);\n    function baseForIn(object, iteratee) {\n      return baseFor(object, iteratee, keysIn);\n    }\n    function baseForOwn(object, iteratee) {\n      return baseFor(object, iteratee, keys);\n    }\n    function baseForOwnRight(object, iteratee) {\n      return baseForRight(object, iteratee, keys);\n    }\n    function baseFunctions(object, props) {\n      var index = -1,\n          length = props.length,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var key = props[index];\n        if (isFunction(object[key])) {\n          result[++resIndex] = key;\n        }\n      }\n      return result;\n    }\n    function baseGet(object, path, pathKey) {\n      if (object == null) {\n        return;\n      }\n      if (pathKey !== undefined && pathKey in toObject(object)) {\n        path = [pathKey];\n      }\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[path[index++]];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n    function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n    }\n    function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = arrayTag,\n          othTag = arrayTag;\n\n      if (!objIsArr) {\n        objTag = objToString.call(object);\n        if (objTag == argsTag) {\n          objTag = objectTag;\n        } else if (objTag != objectTag) {\n          objIsArr = isTypedArray(object);\n        }\n      }\n      if (!othIsArr) {\n        othTag = objToString.call(other);\n        if (othTag == argsTag) {\n          othTag = objectTag;\n        } else if (othTag != objectTag) {\n          othIsArr = isTypedArray(other);\n        }\n      }\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && !(objIsArr || objIsObj)) {\n        return equalByTag(object, other, objTag);\n      }\n      if (!isLoose) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == object) {\n          return stackB[length] == other;\n        }\n      }\n      stackA.push(object);\n      stackB.push(other);\n\n      var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n      stackA.pop();\n      stackB.pop();\n\n      return result;\n    }\n    function baseIsMatch(object, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = toObject(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var result = customizer ? customizer(objValue, srcValue, key) : undefined;\n          if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        var key = matchData[0][0],\n            value = matchData[0][1];\n\n        return function(object) {\n          if (object == null) {\n            return false;\n          }\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\n        };\n      }\n      return function(object) {\n        return baseIsMatch(object, matchData);\n      };\n    }\n    function baseMatchesProperty(path, srcValue) {\n      var isArr = isArray(path),\n          isCommon = isKey(path) && isStrictComparable(srcValue),\n          pathKey = (path + '');\n\n      path = toPath(path);\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        var key = pathKey;\n        object = toObject(object);\n        if ((isArr || !isCommon) && !(key in object)) {\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n          if (object == null) {\n            return false;\n          }\n          key = last(path);\n          object = toObject(object);\n        }\n        return object[key] === srcValue\n          ? (srcValue !== undefined || (key in object))\n          : baseIsEqual(srcValue, object[key], undefined, true);\n      };\n    }\n    function baseMerge(object, source, customizer, stackA, stackB) {\n      if (!isObject(object)) {\n        return object;\n      }\n      var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n          props = isSrcArr ? undefined : keys(source);\n\n      arrayEach(props || source, function(srcValue, key) {\n        if (props) {\n          key = srcValue;\n          srcValue = source[key];\n        }\n        if (isObjectLike(srcValue)) {\n          stackA || (stackA = []);\n          stackB || (stackB = []);\n          baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n        }\n        else {\n          var value = object[key],\n              result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n              isCommon = result === undefined;\n\n          if (isCommon) {\n            result = srcValue;\n          }\n          if ((result !== undefined || (isSrcArr && !(key in object))) &&\n              (isCommon || (result === result ? (result !== value) : (value === value)))) {\n            object[key] = result;\n          }\n        }\n      });\n      return object;\n    }\n    function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n      var length = stackA.length,\n          srcValue = source[key];\n\n      while (length--) {\n        if (stackA[length] == srcValue) {\n          object[key] = stackB[length];\n          return;\n        }\n      }\n      var value = object[key],\n          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n          isCommon = result === undefined;\n\n      if (isCommon) {\n        result = srcValue;\n        if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n          result = isArray(value)\n            ? value\n            : (isArrayLike(value) ? arrayCopy(value) : []);\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          result = isArguments(value)\n            ? toPlainObject(value)\n            : (isPlainObject(value) ? value : {});\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      stackA.push(srcValue);\n      stackB.push(result);\n\n      if (isCommon) {\n        object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n      } else if (result === result ? (result !== value) : (value === value)) {\n        object[key] = result;\n      }\n    }\n    function baseProperty(key) {\n      return function(object) {\n        return object == null ? undefined : object[key];\n      };\n    }\n    function basePropertyDeep(path) {\n      var pathKey = (path + '');\n      path = toPath(path);\n      return function(object) {\n        return baseGet(object, path, pathKey);\n      };\n    }\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0;\n      while (length--) {\n        var index = indexes[length];\n        if (index != previous && isIndex(index)) {\n          var previous = index;\n          splice.call(array, index, 1);\n        }\n      }\n      return array;\n    }\n    function baseRandom(min, max) {\n      return min + nativeFloor(nativeRandom() * (max - min + 1));\n    }\n    function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {\n      eachFunc(collection, function(value, index, collection) {\n        accumulator = initFromCollection\n          ? (initFromCollection = false, value)\n          : iteratee(accumulator, value, index, collection);\n      });\n      return accumulator;\n    }\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      start = start == null ? 0 : (+start || 0);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : (+end || 0);\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n    function baseSortBy(array, comparer) {\n      var length = array.length;\n\n      array.sort(comparer);\n      while (length--) {\n        array[length] = array[length].value;\n      }\n      return array;\n    }\n    function baseSortByOrder(collection, iteratees, orders) {\n      var callback = getCallback(),\n          index = -1;\n\n      iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });\n\n      var result = baseMap(collection, function(value) {\n        var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n    function baseSum(collection, iteratee) {\n      var result = 0;\n      baseEach(collection, function(value, index, collection) {\n        result += +iteratee(value, index, collection) || 0;\n      });\n      return result;\n    }\n    function baseUniq(array, iteratee) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = array.length,\n          isCommon = indexOf == baseIndexOf,\n          isLarge = isCommon && length >= LARGE_ARRAY_SIZE,\n          seen = isLarge ? createCache() : null,\n          result = [];\n\n      if (seen) {\n        indexOf = cacheIndexOf;\n        isCommon = false;\n      } else {\n        isLarge = false;\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value, index, array) : value;\n\n        if (isCommon && value === value) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (indexOf(seen, computed, 0) < 0) {\n          if (iteratee || isLarge) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n    function baseValues(object, props) {\n      var index = -1,\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = object[props[index]];\n      }\n      return result;\n    }\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      var index = -1,\n          length = actions.length;\n\n      while (++index < length) {\n        var action = actions[index];\n        result = action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }\n      return result;\n    }\n    function binaryIndex(array, value, retHighest) {\n      var low = 0,\n          high = array ? array.length : low;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return binaryIndexBy(array, value, identity, retHighest);\n    }\n    function binaryIndexBy(array, value, iteratee, retHighest) {\n      value = iteratee(value);\n\n      var low = 0,\n          high = array ? array.length : 0,\n          valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsUndef = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            isDef = computed !== undefined,\n            isReflexive = computed === computed;\n\n        if (valIsNaN) {\n          var setLow = isReflexive || retHighest;\n        } else if (valIsNull) {\n          setLow = isReflexive && isDef && (retHighest || computed != null);\n        } else if (valIsUndef) {\n          setLow = isReflexive && (retHighest || isDef);\n        } else if (computed == null) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n    function bindCallback(func, thisArg, argCount) {\n      if (typeof func != 'function') {\n        return identity;\n      }\n      if (thisArg === undefined) {\n        return func;\n      }\n      switch (argCount) {\n        case 1: return function(value) {\n          return func.call(thisArg, value);\n        };\n        case 3: return function(value, index, collection) {\n          return func.call(thisArg, value, index, collection);\n        };\n        case 4: return function(accumulator, value, index, collection) {\n          return func.call(thisArg, accumulator, value, index, collection);\n        };\n        case 5: return function(value, other, key, object, source) {\n          return func.call(thisArg, value, other, key, object, source);\n        };\n      }\n      return function() {\n        return func.apply(thisArg, arguments);\n      };\n    }\n    function bufferClone(buffer) {\n      var result = new ArrayBuffer(buffer.byteLength),\n          view = new Uint8Array(result);\n\n      view.set(new Uint8Array(buffer));\n      return result;\n    }\n    function composeArgs(args, partials, holders) {\n      var holdersLength = holders.length,\n          argsIndex = -1,\n          argsLength = nativeMax(args.length - holdersLength, 0),\n          leftIndex = -1,\n          leftLength = partials.length,\n          result = Array(leftLength + argsLength);\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        result[holders[argsIndex]] = args[argsIndex];\n      }\n      while (argsLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n    function composeArgsRight(args, partials, holders) {\n      var holdersIndex = -1,\n          holdersLength = holders.length,\n          argsIndex = -1,\n          argsLength = nativeMax(args.length - holdersLength, 0),\n          rightIndex = -1,\n          rightLength = partials.length,\n          result = Array(argsLength + rightLength);\n\n      while (++argsIndex < argsLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        result[offset + holders[holdersIndex]] = args[argsIndex++];\n      }\n      return result;\n    }\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee, thisArg) {\n        var result = initializer ? initializer() : {};\n        iteratee = getCallback(iteratee, thisArg, 3);\n\n        if (isArray(collection)) {\n          var index = -1,\n              length = collection.length;\n\n          while (++index < length) {\n            var value = collection[index];\n            setter(result, value, iteratee(value, index, collection), collection);\n          }\n        } else {\n          baseEach(collection, function(value, key, collection) {\n            setter(result, value, iteratee(value, key, collection), collection);\n          });\n        }\n        return result;\n      };\n    }\n    function createAssigner(assigner) {\n      return restParam(function(object, sources) {\n        var index = -1,\n            length = object == null ? 0 : sources.length,\n            customizer = length > 2 ? sources[length - 2] : undefined,\n            guard = length > 2 ? sources[2] : undefined,\n            thisArg = length > 1 ? sources[length - 1] : undefined;\n\n        if (typeof customizer == 'function') {\n          customizer = bindCallback(customizer, thisArg, 5);\n          length -= 2;\n        } else {\n          customizer = typeof thisArg == 'function' ? thisArg : undefined;\n          length -= (customizer ? 1 : 0);\n        }\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, customizer);\n          }\n        }\n        return object;\n      });\n    }\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        var length = collection ? getLength(collection) : 0;\n        if (!isLength(length)) {\n          return eachFunc(collection, iteratee);\n        }\n        var index = fromRight ? length : -1,\n            iterable = toObject(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var iterable = toObject(object),\n            props = keysFunc(object),\n            length = props.length,\n            index = fromRight ? length : -1;\n\n        while ((fromRight ? index-- : ++index < length)) {\n          var key = props[index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n    function createBindWrapper(func, thisArg) {\n      var Ctor = createCtorWrapper(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(thisArg, arguments);\n      }\n      return wrapper;\n    }\n    function createCache(values) {\n      return (nativeCreate && Set) ? new SetCache(values) : null;\n    }\n    function createCompounder(callback) {\n      return function(string) {\n        var index = -1,\n            array = words(deburr(string)),\n            length = array.length,\n            result = '';\n\n        while (++index < length) {\n          result = callback(result, array[index], index);\n        }\n        return result;\n      };\n    }\n    function createCtorWrapper(Ctor) {\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n    function createCurry(flag) {\n      function curryFunc(func, arity, guard) {\n        if (guard && isIterateeCall(func, arity, guard)) {\n          arity = undefined;\n        }\n        var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);\n        result.placeholder = curryFunc.placeholder;\n        return result;\n      }\n      return curryFunc;\n    }\n    function createDefaults(assigner, customizer) {\n      return restParam(function(args) {\n        var object = args[0];\n        if (object == null) {\n          return object;\n        }\n        args.push(customizer);\n        return assigner.apply(undefined, args);\n      });\n    }\n    function createExtremum(comparator, exValue) {\n      return function(collection, iteratee, thisArg) {\n        if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n          iteratee = undefined;\n        }\n        iteratee = getCallback(iteratee, thisArg, 3);\n        if (iteratee.length == 1) {\n          collection = isArray(collection) ? collection : toIterable(collection);\n          var result = arrayExtremum(collection, iteratee, comparator, exValue);\n          if (!(collection.length && result === exValue)) {\n            return result;\n          }\n        }\n        return baseExtremum(collection, iteratee, comparator, exValue);\n      };\n    }\n    function createFind(eachFunc, fromRight) {\n      return function(collection, predicate, thisArg) {\n        predicate = getCallback(predicate, thisArg, 3);\n        if (isArray(collection)) {\n          var index = baseFindIndex(collection, predicate, fromRight);\n          return index > -1 ? collection[index] : undefined;\n        }\n        return baseFind(collection, predicate, eachFunc);\n      };\n    }\n    function createFindIndex(fromRight) {\n      return function(array, predicate, thisArg) {\n        if (!(array && array.length)) {\n          return -1;\n        }\n        predicate = getCallback(predicate, thisArg, 3);\n        return baseFindIndex(array, predicate, fromRight);\n      };\n    }\n    function createFindKey(objectFunc) {\n      return function(object, predicate, thisArg) {\n        predicate = getCallback(predicate, thisArg, 3);\n        return baseFind(object, predicate, objectFunc, true);\n      };\n    }\n    function createFlow(fromRight) {\n      return function() {\n        var wrapper,\n            length = arguments.length,\n            index = fromRight ? length : -1,\n            leftIndex = 0,\n            funcs = Array(length);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          var func = funcs[leftIndex++] = arguments[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {\n            wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? -1 : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      };\n    }\n    function createForEach(arrayFunc, eachFunc) {\n      return function(collection, iteratee, thisArg) {\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n          ? arrayFunc(collection, iteratee)\n          : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n      };\n    }\n    function createForIn(objectFunc) {\n      return function(object, iteratee, thisArg) {\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\n          iteratee = bindCallback(iteratee, thisArg, 3);\n        }\n        return objectFunc(object, iteratee, keysIn);\n      };\n    }\n    function createForOwn(objectFunc) {\n      return function(object, iteratee, thisArg) {\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\n          iteratee = bindCallback(iteratee, thisArg, 3);\n        }\n        return objectFunc(object, iteratee);\n      };\n    }\n    function createObjectMapper(isMapKeys) {\n      return function(object, iteratee, thisArg) {\n        var result = {};\n        iteratee = getCallback(iteratee, thisArg, 3);\n\n        baseForOwn(object, function(value, key, object) {\n          var mapped = iteratee(value, key, object);\n          key = isMapKeys ? mapped : key;\n          value = isMapKeys ? value : mapped;\n          result[key] = value;\n        });\n        return result;\n      };\n    }\n    function createPadDir(fromRight) {\n      return function(string, length, chars) {\n        string = baseToString(string);\n        return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);\n      };\n    }\n    function createPartial(flag) {\n      var partialFunc = restParam(function(func, partials) {\n        var holders = replaceHolders(partials, partialFunc.placeholder);\n        return createWrapper(func, flag, undefined, partials, holders);\n      });\n      return partialFunc;\n    }\n    function createReduce(arrayFunc, eachFunc) {\n      return function(collection, iteratee, accumulator, thisArg) {\n        var initFromArray = arguments.length < 3;\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n          ? arrayFunc(collection, iteratee, accumulator, initFromArray)\n          : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);\n      };\n    }\n    function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & ARY_FLAG,\n          isBind = bitmask & BIND_FLAG,\n          isBindKey = bitmask & BIND_KEY_FLAG,\n          isCurry = bitmask & CURRY_FLAG,\n          isCurryBound = bitmask & CURRY_BOUND_FLAG,\n          isCurryRight = bitmask & CURRY_RIGHT_FLAG,\n          Ctor = isBindKey ? undefined : createCtorWrapper(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            index = length,\n            args = Array(length);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight);\n        }\n        if (isCurry || isCurryRight) {\n          var placeholder = wrapper.placeholder,\n              argsHolders = replaceHolders(args, placeholder);\n\n          length -= argsHolders.length;\n          if (length < arity) {\n            var newArgPos = argPos ? arrayCopy(argPos) : undefined,\n                newArity = nativeMax(arity - length, 0),\n                newsHolders = isCurry ? argsHolders : undefined,\n                newHoldersRight = isCurry ? undefined : argsHolders,\n                newPartials = isCurry ? args : undefined,\n                newPartialsRight = isCurry ? undefined : args;\n\n            bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\n            bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\n\n            if (!isCurryBound) {\n              bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\n            }\n            var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],\n                result = createHybridWrapper.apply(undefined, newData);\n\n            if (isLaziable(func)) {\n              setData(result, newData);\n            }\n            result.placeholder = placeholder;\n            return result;\n          }\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        if (argPos) {\n          args = reorder(args, argPos);\n        }\n        if (isAry && ary < args.length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtorWrapper(func);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n    function createPadding(string, length, chars) {\n      var strLength = string.length;\n      length = +length;\n\n      if (strLength >= length || !nativeIsFinite(length)) {\n        return '';\n      }\n      var padLength = length - strLength;\n      chars = chars == null ? ' ' : (chars + '');\n      return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);\n    }\n    function createPartialWrapper(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & BIND_FLAG,\n          Ctor = createCtorWrapper(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength);\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        precision = precision === undefined ? 0 : (+precision || 0);\n        if (precision) {\n          precision = pow(10, precision);\n          return func(number * precision) / precision;\n        }\n        return func(number);\n      };\n    }\n    function createSortedIndex(retHighest) {\n      return function(array, value, iteratee, thisArg) {\n        var callback = getCallback(iteratee);\n        return (iteratee == null && callback === baseCallback)\n          ? binaryIndex(array, value, retHighest)\n          : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);\n      };\n    }\n    function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      length -= (holders ? holders.length : 0);\n      if (bitmask & PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func),\n          newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\n\n      if (data) {\n        mergeData(newData, data);\n        bitmask = newData[1];\n        arity = newData[9];\n      }\n      newData[9] = arity == null\n        ? (isBindKey ? 0 : func.length)\n        : (nativeMax(arity - length, 0) || 0);\n\n      if (bitmask == BIND_FLAG) {\n        var result = createBindWrapper(newData[0], newData[2]);\n      } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {\n        result = createPartialWrapper.apply(undefined, newData);\n      } else {\n        result = createHybridWrapper.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setter(result, newData);\n    }\n    function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var index = -1,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n        return false;\n      }\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index],\n            result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\n\n        if (result !== undefined) {\n          if (result) {\n            continue;\n          }\n          return false;\n        }\n        if (isLoose) {\n          if (!arraySome(other, function(othValue) {\n                return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n              })) {\n            return false;\n          }\n        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function equalByTag(object, other, tag) {\n      switch (tag) {\n        case boolTag:\n        case dateTag:\n          return +object == +other;\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case numberTag:\n          return (object != +object)\n            ? other != +other\n            : object == +other;\n\n        case regexpTag:\n        case stringTag:\n          return object == (other + '');\n      }\n      return false;\n    }\n    function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var objProps = keys(object),\n          objLength = objProps.length,\n          othProps = keys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isLoose) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      var skipCtor = isLoose;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key],\n            result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\n        if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\n          return false;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (!skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function getCallback(func, thisArg, argCount) {\n      var result = lodash.callback || callback;\n      result = result === callback ? baseCallback : result;\n      return argCount ? result(func, thisArg, argCount) : result;\n    }\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n    function getFuncName(func) {\n      var result = func.name,\n          array = realNames[result],\n          length = array ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n    function getIndexOf(collection, target, fromIndex) {\n      var result = lodash.indexOf || indexOf;\n      result = result === indexOf ? baseIndexOf : result;\n      return collection ? result(collection, target, fromIndex) : result;\n    }\n    var getLength = baseProperty('length');\n    function getMatchData(object) {\n      var result = pairs(object),\n          length = result.length;\n\n      while (length--) {\n        result[length][2] = isStrictComparable(result[length][1]);\n      }\n      return result;\n    }\n    function getNative(object, key) {\n      var value = object == null ? undefined : object[key];\n      return isNative(value) ? value : undefined;\n    }\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n    function initCloneObject(object) {\n      var Ctor = object.constructor;\n      if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n        Ctor = Object;\n      }\n      return new Ctor;\n    }\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return bufferClone(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          var buffer = object.buffer;\n          return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          var result = new Ctor(object.source, reFlags.exec(object));\n          result.lastIndex = object.lastIndex;\n      }\n      return result;\n    }\n    function invokePath(object, path, args) {\n      if (object != null && !isKey(path, object)) {\n        path = toPath(path);\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        path = last(path);\n      }\n      var func = object == null ? object : object[path];\n      return func == null ? undefined : func.apply(object, args);\n    }\n    function isArrayLike(value) {\n      return value != null && isLength(getLength(value));\n    }\n    function isIndex(value, length) {\n      value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n      return value > -1 && value % 1 == 0 && value < length;\n    }\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n          ? (isArrayLike(object) && isIndex(index, object.length))\n          : (type == 'string' && index in object)) {\n        var other = object[index];\n        return value === value ? (value === other) : (other !== other);\n      }\n      return false;\n    }\n    function isKey(value, object) {\n      var type = typeof value;\n      if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n        return true;\n      }\n      if (isArray(value)) {\n        return false;\n      }\n      var result = !reIsDeepProp.test(value);\n      return result || (object != null && value in toObject(object));\n    }\n    function isLaziable(func) {\n      var funcName = getFuncName(func);\n      if (!(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      var other = lodash[funcName];\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n    function isLength(value) {\n      return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < ARY_FLAG;\n\n      var isCombo =\n        (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||\n        (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||\n        (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      if (srcBitmask & BIND_FLAG) {\n        data[2] = source[2];\n        newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;\n      }\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);\n      }\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);\n      }\n      value = source[7];\n      if (value) {\n        data[7] = arrayCopy(value);\n      }\n      if (srcBitmask & ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n    function mergeDefaults(objectValue, sourceValue) {\n      return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);\n    }\n    function pickByArray(object, props) {\n      object = toObject(object);\n\n      var index = -1,\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index];\n        if (key in object) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    }\n    function pickByCallback(object, predicate) {\n      var result = {};\n      baseForIn(object, function(value, key, object) {\n        if (predicate(value, key, object)) {\n          result[key] = value;\n        }\n      });\n      return result;\n    }\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = arrayCopy(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n    var setData = (function() {\n      var count = 0,\n          lastCalled = 0;\n\n      return function(key, value) {\n        var stamp = now(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return key;\n          }\n        } else {\n          count = 0;\n        }\n        return baseSetData(key, value);\n      };\n    }());\n    function shimKeys(object) {\n      var props = keysIn(object),\n          propsLength = props.length,\n          length = propsLength && object.length;\n\n      var allowIndexes = !!length && isLength(length) &&\n        (isArray(object) || isArguments(object));\n\n      var index = -1,\n          result = [];\n\n      while (++index < propsLength) {\n        var key = props[index];\n        if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    function toIterable(value) {\n      if (value == null) {\n        return [];\n      }\n      if (!isArrayLike(value)) {\n        return values(value);\n      }\n      return isObject(value) ? value : Object(value);\n    }\n    function toObject(value) {\n      return isObject(value) ? value : Object(value);\n    }\n    function toPath(value) {\n      if (isArray(value)) {\n        return value;\n      }\n      var result = [];\n      baseToString(value).replace(rePropName, function(match, number, quote, string) {\n        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    }\n    function wrapperClone(wrapper) {\n      return wrapper instanceof LazyWrapper\n        ? wrapper.clone()\n        : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));\n    }\n    function chunk(array, size, guard) {\n      if (guard ? isIterateeCall(array, size, guard) : size == null) {\n        size = 1;\n      } else {\n        size = nativeMax(nativeFloor(size) || 1, 1);\n      }\n      var index = 0,\n          length = array ? array.length : 0,\n          resIndex = -1,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[++resIndex] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n    function compact(array) {\n      var index = -1,\n          length = array ? array.length : 0,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[++resIndex] = value;\n        }\n      }\n      return result;\n    }\n    var difference = restParam(function(array, values) {\n      return (isObjectLike(array) && isArrayLike(array))\n        ? baseDifference(array, baseFlatten(values, false, true))\n        : [];\n    });\n    function drop(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      return baseSlice(array, n < 0 ? 0 : n);\n    }\n    function dropRight(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      n = length - (+n || 0);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n    function dropRightWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)\n        : [];\n    }\n    function dropWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true)\n        : [];\n    }\n    function fill(array, value, start, end) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n    var findIndex = createFindIndex();\n    var findLastIndex = createFindIndex(true);\n    function first(array) {\n      return array ? array[0] : undefined;\n    }\n    function flatten(array, isDeep, guard) {\n      var length = array ? array.length : 0;\n      if (guard && isIterateeCall(array, isDeep, guard)) {\n        isDeep = false;\n      }\n      return length ? baseFlatten(array, isDeep) : [];\n    }\n    function flattenDeep(array) {\n      var length = array ? array.length : 0;\n      return length ? baseFlatten(array, true) : [];\n    }\n    function indexOf(array, value, fromIndex) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return -1;\n      }\n      if (typeof fromIndex == 'number') {\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\n      } else if (fromIndex) {\n        var index = binaryIndex(array, value);\n        if (index < length &&\n            (value === value ? (value === array[index]) : (array[index] !== array[index]))) {\n          return index;\n        }\n        return -1;\n      }\n      return baseIndexOf(array, value, fromIndex || 0);\n    }\n    function initial(array) {\n      return dropRight(array, 1);\n    }\n    var intersection = restParam(function(arrays) {\n      var othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(length),\n          indexOf = getIndexOf(),\n          isCommon = indexOf == baseIndexOf,\n          result = [];\n\n      while (othIndex--) {\n        var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];\n        caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;\n      }\n      var array = arrays[0],\n          index = -1,\n          length = array ? array.length : 0,\n          seen = caches[0];\n\n      outer:\n      while (++index < length) {\n        value = array[index];\n        if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {\n          var othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(value);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    });\n    function last(array) {\n      var length = array ? array.length : 0;\n      return length ? array[length - 1] : undefined;\n    }\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (typeof fromIndex == 'number') {\n        index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;\n      } else if (fromIndex) {\n        index = binaryIndex(array, value, true) - 1;\n        var other = array[index];\n        if (value === value ? (value === other) : (other !== other)) {\n          return index;\n        }\n        return -1;\n      }\n      if (value !== value) {\n        return indexOfNaN(array, index, true);\n      }\n      while (index--) {\n        if (array[index] === value) {\n          return index;\n        }\n      }\n      return -1;\n    }\n    function pull() {\n      var args = arguments,\n          array = args[0];\n\n      if (!(array && array.length)) {\n        return array;\n      }\n      var index = 0,\n          indexOf = getIndexOf(),\n          length = args.length;\n\n      while (++index < length) {\n        var fromIndex = 0,\n            value = args[index];\n\n        while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n    var pullAt = restParam(function(array, indexes) {\n      indexes = baseFlatten(indexes);\n\n      var result = baseAt(array, indexes);\n      basePullAt(array, indexes.sort(baseCompareAscending));\n      return result;\n    });\n    function remove(array, predicate, thisArg) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getCallback(predicate, thisArg, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n    function rest(array) {\n      return drop(array, 1);\n    }\n    function slice(array, start, end) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      return baseSlice(array, start, end);\n    }\n    var sortedIndex = createSortedIndex();\n    var sortedLastIndex = createSortedIndex(true);\n    function take(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n    function takeRight(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      n = length - (+n || 0);\n      return baseSlice(array, n < 0 ? 0 : n);\n    }\n    function takeRightWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)\n        : [];\n    }\n    function takeWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3))\n        : [];\n    }\n    var union = restParam(function(arrays) {\n      return baseUniq(baseFlatten(arrays, false, true));\n    });\n    function uniq(array, isSorted, iteratee, thisArg) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (isSorted != null && typeof isSorted != 'boolean') {\n        thisArg = iteratee;\n        iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;\n        isSorted = false;\n      }\n      var callback = getCallback();\n      if (!(iteratee == null && callback === baseCallback)) {\n        iteratee = callback(iteratee, thisArg, 3);\n      }\n      return (isSorted && getIndexOf() == baseIndexOf)\n        ? sortedUniq(array, iteratee)\n        : baseUniq(array, iteratee);\n    }\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var index = -1,\n          length = 0;\n\n      array = arrayFilter(array, function(group) {\n        if (isArrayLike(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = arrayMap(array, baseProperty(index));\n      }\n      return result;\n    }\n    function unzipWith(array, iteratee, thisArg) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      iteratee = bindCallback(iteratee, thisArg, 4);\n      return arrayMap(result, function(group) {\n        return arrayReduce(group, iteratee, undefined, true);\n      });\n    }\n    var without = restParam(function(array, values) {\n      return isArrayLike(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n    function xor() {\n      var index = -1,\n          length = arguments.length;\n\n      while (++index < length) {\n        var array = arguments[index];\n        if (isArrayLike(array)) {\n          var result = result\n            ? arrayPush(baseDifference(result, array), baseDifference(array, result))\n            : array;\n        }\n      }\n      return result ? baseUniq(result) : [];\n    }\n    var zip = restParam(unzip);\n    function zipObject(props, values) {\n      var index = -1,\n          length = props ? props.length : 0,\n          result = {};\n\n      if (length && !values && !isArray(props[0])) {\n        values = [];\n      }\n      while (++index < length) {\n        var key = props[index];\n        if (values) {\n          result[key] = values[index];\n        } else if (key) {\n          result[key[0]] = key[1];\n        }\n      }\n      return result;\n    }\n    var zipWith = restParam(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 2 ? arrays[length - 2] : undefined,\n          thisArg = length > 1 ? arrays[length - 1] : undefined;\n\n      if (length > 2 && typeof iteratee == 'function') {\n        length -= 2;\n      } else {\n        iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;\n        thisArg = undefined;\n      }\n      arrays.length = length;\n      return unzipWith(arrays, iteratee, thisArg);\n    });\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n    function tap(value, interceptor, thisArg) {\n      interceptor.call(thisArg, value);\n      return value;\n    }\n    function thru(value, interceptor, thisArg) {\n      return interceptor.call(thisArg, value);\n    }\n    function wrapperChain() {\n      return chain(this);\n    }\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n    var wrapperConcat = restParam(function(values) {\n      values = baseFlatten(values);\n      return this.thru(function(array) {\n        return arrayConcat(isArray(array) ? array : [toObject(array)], values);\n      });\n    });\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n\n      var interceptor = function(value) {\n        return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();\n      };\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(interceptor);\n    }\n    function wrapperToString() {\n      return (this.value() + '');\n    }\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n    var at = restParam(function(collection, props) {\n      return baseAt(collection, baseFlatten(props));\n    });\n    var countBy = createAggregator(function(result, value, key) {\n      hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);\n    });\n    function every(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n        predicate = undefined;\n      }\n      if (typeof predicate != 'function' || thisArg !== undefined) {\n        predicate = getCallback(predicate, thisArg, 3);\n      }\n      return func(collection, predicate);\n    }\n    function filter(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      predicate = getCallback(predicate, thisArg, 3);\n      return func(collection, predicate);\n    }\n    var find = createFind(baseEach);\n    var findLast = createFind(baseEachRight, true);\n    function findWhere(collection, source) {\n      return find(collection, baseMatches(source));\n    }\n    var forEach = createForEach(arrayEach, baseEach);\n    var forEachRight = createForEach(arrayEachRight, baseEachRight);\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        result[key] = [value];\n      }\n    });\n    function includes(collection, target, fromIndex, guard) {\n      var length = collection ? getLength(collection) : 0;\n      if (!isLength(length)) {\n        collection = values(collection);\n        length = collection.length;\n      }\n      if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\n        fromIndex = 0;\n      } else {\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n      }\n      return (typeof collection == 'string' || !isArray(collection) && isString(collection))\n        ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)\n        : (!!length && getIndexOf(collection, target, fromIndex) > -1);\n    }\n    var indexBy = createAggregator(function(result, value, key) {\n      result[key] = value;\n    });\n    var invoke = restParam(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          isProp = isKey(path),\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);\n        result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);\n      });\n      return result;\n    });\n    function map(collection, iteratee, thisArg) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      iteratee = getCallback(iteratee, thisArg, 3);\n      return func(collection, iteratee);\n    }\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n    function pluck(collection, path) {\n      return map(collection, property(path));\n    }\n    var reduce = createReduce(arrayReduce, baseEach);\n    var reduceRight = createReduce(arrayReduceRight, baseEachRight);\n    function reject(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      predicate = getCallback(predicate, thisArg, 3);\n      return func(collection, function(value, index, collection) {\n        return !predicate(value, index, collection);\n      });\n    }\n    function sample(collection, n, guard) {\n      if (guard ? isIterateeCall(collection, n, guard) : n == null) {\n        collection = toIterable(collection);\n        var length = collection.length;\n        return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;\n      }\n      var index = -1,\n          result = toArray(collection),\n          length = result.length,\n          lastIndex = length - 1;\n\n      n = nativeMin(n < 0 ? 0 : (+n || 0), length);\n      while (++index < n) {\n        var rand = baseRandom(index, lastIndex),\n            value = result[rand];\n\n        result[rand] = result[index];\n        result[index] = value;\n      }\n      result.length = n;\n      return result;\n    }\n    function shuffle(collection) {\n      return sample(collection, POSITIVE_INFINITY);\n    }\n    function size(collection) {\n      var length = collection ? getLength(collection) : 0;\n      return isLength(length) ? length : keys(collection).length;\n    }\n    function some(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n        predicate = undefined;\n      }\n      if (typeof predicate != 'function' || thisArg !== undefined) {\n        predicate = getCallback(predicate, thisArg, 3);\n      }\n      return func(collection, predicate);\n    }\n    function sortBy(collection, iteratee, thisArg) {\n      if (collection == null) {\n        return [];\n      }\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n        iteratee = undefined;\n      }\n      var index = -1;\n      iteratee = getCallback(iteratee, thisArg, 3);\n\n      var result = baseMap(collection, function(value, key, collection) {\n        return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };\n      });\n      return baseSortBy(result, compareAscending);\n    }\n    var sortByAll = restParam(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var guard = iteratees[2];\n      if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {\n        iteratees.length = 1;\n      }\n      return baseSortByOrder(collection, baseFlatten(iteratees), []);\n    });\n    function sortByOrder(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (guard && isIterateeCall(iteratees, orders, guard)) {\n        orders = undefined;\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseSortByOrder(collection, iteratees, orders);\n    }\n    function where(collection, source) {\n      return filter(collection, baseMatches(source));\n    }\n    var now = nativeNow || function() {\n      return new Date().getTime();\n    };\n    function after(n, func) {\n      if (typeof func != 'function') {\n        if (typeof n == 'function') {\n          var temp = n;\n          n = func;\n          func = temp;\n        } else {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n      }\n      n = nativeIsFinite(n = +n) ? n : 0;\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n    function ary(func, n, guard) {\n      if (guard && isIterateeCall(func, n, guard)) {\n        n = undefined;\n      }\n      n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);\n      return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        if (typeof n == 'function') {\n          var temp = n;\n          n = func;\n          func = temp;\n        } else {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n      }\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n    var bind = restParam(function(func, thisArg, partials) {\n      var bitmask = BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, bind.placeholder);\n        bitmask |= PARTIAL_FLAG;\n      }\n      return createWrapper(func, bitmask, thisArg, partials, holders);\n    });\n    var bindAll = restParam(function(object, methodNames) {\n      methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);\n\n      var index = -1,\n          length = methodNames.length;\n\n      while (++index < length) {\n        var key = methodNames[index];\n        object[key] = createWrapper(object[key], BIND_FLAG, object);\n      }\n      return object;\n    });\n    var bindKey = restParam(function(object, key, partials) {\n      var bitmask = BIND_FLAG | BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, bindKey.placeholder);\n        bitmask |= PARTIAL_FLAG;\n      }\n      return createWrapper(key, bitmask, object, partials, holders);\n    });\n    var curry = createCurry(CURRY_FLAG);\n    var curryRight = createCurry(CURRY_RIGHT_FLAG);\n    function debounce(func, wait, options) {\n      var args,\n          maxTimeoutId,\n          result,\n          stamp,\n          thisArg,\n          timeoutId,\n          trailingCall,\n          lastCalled = 0,\n          maxWait = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = wait < 0 ? 0 : (+wait || 0);\n      if (options === true) {\n        var leading = true;\n        trailing = false;\n      } else if (isObject(options)) {\n        leading = !!options.leading;\n        maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function cancel() {\n        if (timeoutId) {\n          clearTimeout(timeoutId);\n        }\n        if (maxTimeoutId) {\n          clearTimeout(maxTimeoutId);\n        }\n        lastCalled = 0;\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n      }\n\n      function complete(isCalled, id) {\n        if (id) {\n          clearTimeout(id);\n        }\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n        if (isCalled) {\n          lastCalled = now();\n          result = func.apply(thisArg, args);\n          if (!timeoutId && !maxTimeoutId) {\n            args = thisArg = undefined;\n          }\n        }\n      }\n\n      function delayed() {\n        var remaining = wait - (now() - stamp);\n        if (remaining <= 0 || remaining > wait) {\n          complete(trailingCall, maxTimeoutId);\n        } else {\n          timeoutId = setTimeout(delayed, remaining);\n        }\n      }\n\n      function maxDelayed() {\n        complete(trailing, timeoutId);\n      }\n\n      function debounced() {\n        args = arguments;\n        stamp = now();\n        thisArg = this;\n        trailingCall = trailing && (timeoutId || !leading);\n\n        if (maxWait === false) {\n          var leadingCall = leading && !timeoutId;\n        } else {\n          if (!maxTimeoutId && !leading) {\n            lastCalled = stamp;\n          }\n          var remaining = maxWait - (stamp - lastCalled),\n              isCalled = remaining <= 0 || remaining > maxWait;\n\n          if (isCalled) {\n            if (maxTimeoutId) {\n              maxTimeoutId = clearTimeout(maxTimeoutId);\n            }\n            lastCalled = stamp;\n            result = func.apply(thisArg, args);\n          }\n          else if (!maxTimeoutId) {\n            maxTimeoutId = setTimeout(maxDelayed, remaining);\n          }\n        }\n        if (isCalled && timeoutId) {\n          timeoutId = clearTimeout(timeoutId);\n        }\n        else if (!timeoutId && wait !== maxWait) {\n          timeoutId = setTimeout(delayed, wait);\n        }\n        if (leadingCall) {\n          isCalled = true;\n          result = func.apply(thisArg, args);\n        }\n        if (isCalled && !timeoutId && !maxTimeoutId) {\n          args = thisArg = undefined;\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      return debounced;\n    }\n    var defer = restParam(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n    var delay = restParam(function(func, wait, args) {\n      return baseDelay(func, wait, args);\n    });\n    var flow = createFlow();\n    var flowRight = createFlow(true);\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result);\n        return result;\n      };\n      memoized.cache = new memoize.Cache;\n      return memoized;\n    }\n    var modArgs = restParam(function(func, transforms) {\n      transforms = baseFlatten(transforms);\n      if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = transforms.length;\n      return restParam(function(args) {\n        var index = nativeMin(args.length, length);\n        while (index--) {\n          args[index] = transforms[index](args[index]);\n        }\n        return func.apply(this, args);\n      });\n    });\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        return !predicate.apply(this, arguments);\n      };\n    }\n    function once(func) {\n      return before(2, func);\n    }\n    var partial = createPartial(PARTIAL_FLAG);\n    var partialRight = createPartial(PARTIAL_RIGHT_FLAG);\n    var rearg = restParam(function(func, indexes) {\n      return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));\n    });\n    function restParam(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            rest = Array(length);\n\n        while (++index < length) {\n          rest[index] = args[start + index];\n        }\n        switch (start) {\n          case 0: return func.call(this, rest);\n          case 1: return func.call(this, args[0], rest);\n          case 2: return func.call(this, args[0], args[1], rest);\n        }\n        var otherArgs = Array(start + 1);\n        index = -1;\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = rest;\n        return func.apply(this, otherArgs);\n      };\n    }\n    function spread(func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function(array) {\n        return func.apply(this, array);\n      };\n    }\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (options === false) {\n        leading = false;\n      } else if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n    }\n    function wrap(value, wrapper) {\n      wrapper = wrapper == null ? identity : wrapper;\n      return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);\n    }\n    function clone(value, isDeep, customizer, thisArg) {\n      if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\n        isDeep = false;\n      }\n      else if (typeof isDeep == 'function') {\n        thisArg = customizer;\n        customizer = isDeep;\n        isDeep = false;\n      }\n      return typeof customizer == 'function'\n        ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1))\n        : baseClone(value, isDeep);\n    }\n    function cloneDeep(value, customizer, thisArg) {\n      return typeof customizer == 'function'\n        ? baseClone(value, true, bindCallback(customizer, thisArg, 1))\n        : baseClone(value, true);\n    }\n    function gt(value, other) {\n      return value > other;\n    }\n    function gte(value, other) {\n      return value >= other;\n    }\n    function isArguments(value) {\n      return isObjectLike(value) && isArrayLike(value) &&\n        hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n    }\n    var isArray = nativeIsArray || function(value) {\n      return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n    };\n    function isBoolean(value) {\n      return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);\n    }\n    function isDate(value) {\n      return isObjectLike(value) && objToString.call(value) == dateTag;\n    }\n    function isElement(value) {\n      return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);\n    }\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||\n          (isObjectLike(value) && isFunction(value.splice)))) {\n        return !value.length;\n      }\n      return !keys(value).length;\n    }\n    function isEqual(value, other, customizer, thisArg) {\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return  result === undefined ? baseIsEqual(value, other, customizer) : !!result;\n    }\n    function isError(value) {\n      return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;\n    }\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n    function isFunction(value) {\n      return isObject(value) && objToString.call(value) == funcTag;\n    }\n    function isObject(value) {\n      var type = typeof value;\n      return !!value && (type == 'object' || type == 'function');\n    }\n    function isMatch(object, source, customizer, thisArg) {\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\n      return baseIsMatch(object, getMatchData(source), customizer);\n    }\n    function isNaN(value) {\n      return isNumber(value) && value != +value;\n    }\n    function isNative(value) {\n      if (value == null) {\n        return false;\n      }\n      if (isFunction(value)) {\n        return reIsNative.test(fnToString.call(value));\n      }\n      return isObjectLike(value) && reIsHostCtor.test(value);\n    }\n    function isNull(value) {\n      return value === null;\n    }\n    function isNumber(value) {\n      return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\n    }\n    function isPlainObject(value) {\n      var Ctor;\n      if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||\n          (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n        return false;\n      }\n      var result;\n      baseForIn(value, function(subValue, key) {\n        result = key;\n      });\n      return result === undefined || hasOwnProperty.call(value, result);\n    }\n    function isRegExp(value) {\n      return isObject(value) && objToString.call(value) == regexpTag;\n    }\n    function isString(value) {\n      return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n    }\n    function isTypedArray(value) {\n      return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n    }\n    function isUndefined(value) {\n      return value === undefined;\n    }\n    function lt(value, other) {\n      return value < other;\n    }\n    function lte(value, other) {\n      return value <= other;\n    }\n    function toArray(value) {\n      var length = value ? getLength(value) : 0;\n      if (!isLength(length)) {\n        return values(value);\n      }\n      if (!length) {\n        return [];\n      }\n      return arrayCopy(value);\n    }\n    function toPlainObject(value) {\n      return baseCopy(value, keysIn(value));\n    }\n    var merge = createAssigner(baseMerge);\n    var assign = createAssigner(function(object, source, customizer) {\n      return customizer\n        ? assignWith(object, source, customizer)\n        : baseAssign(object, source);\n    });\n    function create(prototype, properties, guard) {\n      var result = baseCreate(prototype);\n      if (guard && isIterateeCall(prototype, properties, guard)) {\n        properties = undefined;\n      }\n      return properties ? baseAssign(result, properties) : result;\n    }\n    var defaults = createDefaults(assign, assignDefaults);\n    var defaultsDeep = createDefaults(merge, mergeDefaults);\n    var findKey = createFindKey(baseForOwn);\n    var findLastKey = createFindKey(baseForOwnRight);\n    var forIn = createForIn(baseFor);\n    var forInRight = createForIn(baseForRight);\n    var forOwn = createForOwn(baseForOwn);\n    var forOwnRight = createForOwn(baseForOwnRight);\n    function functions(object) {\n      return baseFunctions(object, keysIn(object));\n    }\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, toPath(path), path + '');\n      return result === undefined ? defaultValue : result;\n    }\n    function has(object, path) {\n      if (object == null) {\n        return false;\n      }\n      var result = hasOwnProperty.call(object, path);\n      if (!result && !isKey(path)) {\n        path = toPath(path);\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        if (object == null) {\n          return false;\n        }\n        path = last(path);\n        result = hasOwnProperty.call(object, path);\n      }\n      return result || (isLength(object.length) && isIndex(path, object.length) &&\n        (isArray(object) || isArguments(object)));\n    }\n    function invert(object, multiValue, guard) {\n      if (guard && isIterateeCall(object, multiValue, guard)) {\n        multiValue = undefined;\n      }\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index],\n            value = object[key];\n\n        if (multiValue) {\n          if (hasOwnProperty.call(result, value)) {\n            result[value].push(key);\n          } else {\n            result[value] = [key];\n          }\n        }\n        else {\n          result[value] = key;\n        }\n      }\n      return result;\n    }\n    var keys = !nativeKeys ? shimKeys : function(object) {\n      var Ctor = object == null ? undefined : object.constructor;\n      if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n          (typeof object != 'function' && isArrayLike(object))) {\n        return shimKeys(object);\n      }\n      return isObject(object) ? nativeKeys(object) : [];\n    };\n    function keysIn(object) {\n      if (object == null) {\n        return [];\n      }\n      if (!isObject(object)) {\n        object = Object(object);\n      }\n      var length = object.length;\n      length = (length && isLength(length) &&\n        (isArray(object) || isArguments(object)) && length) || 0;\n\n      var Ctor = object.constructor,\n          index = -1,\n          isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n          result = Array(length),\n          skipIndexes = length > 0;\n\n      while (++index < length) {\n        result[index] = (index + '');\n      }\n      for (var key in object) {\n        if (!(skipIndexes && isIndex(key, length)) &&\n            !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    var mapKeys = createObjectMapper(true);\n    var mapValues = createObjectMapper();\n    var omit = restParam(function(object, props) {\n      if (object == null) {\n        return {};\n      }\n      if (typeof props[0] != 'function') {\n        var props = arrayMap(baseFlatten(props), String);\n        return pickByArray(object, baseDifference(keysIn(object), props));\n      }\n      var predicate = bindCallback(props[0], props[1], 3);\n      return pickByCallback(object, function(value, key, object) {\n        return !predicate(value, key, object);\n      });\n    });\n    function pairs(object) {\n      object = toObject(object);\n\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        var key = props[index];\n        result[index] = [key, object[key]];\n      }\n      return result;\n    }\n    var pick = restParam(function(object, props) {\n      if (object == null) {\n        return {};\n      }\n      return typeof props[0] == 'function'\n        ? pickByCallback(object, bindCallback(props[0], props[1], 3))\n        : pickByArray(object, baseFlatten(props));\n    });\n    function result(object, path, defaultValue) {\n      var result = object == null ? undefined : object[path];\n      if (result === undefined) {\n        if (object != null && !isKey(path, object)) {\n          path = toPath(path);\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n          result = object == null ? undefined : object[last(path)];\n        }\n        result = result === undefined ? defaultValue : result;\n      }\n      return isFunction(result) ? result.call(object) : result;\n    }\n    function set(object, path, value) {\n      if (object == null) {\n        return object;\n      }\n      var pathKey = (path + '');\n      path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = path[index];\n        if (isObject(nested)) {\n          if (index == lastIndex) {\n            nested[key] = value;\n          } else if (nested[key] == null) {\n            nested[key] = isIndex(path[index + 1]) ? [] : {};\n          }\n        }\n        nested = nested[key];\n      }\n      return object;\n    }\n    function transform(object, iteratee, accumulator, thisArg) {\n      var isArr = isArray(object) || isTypedArray(object);\n      iteratee = getCallback(iteratee, thisArg, 4);\n\n      if (accumulator == null) {\n        if (isArr || isObject(object)) {\n          var Ctor = object.constructor;\n          if (isArr) {\n            accumulator = isArray(object) ? new Ctor : [];\n          } else {\n            accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);\n          }\n        } else {\n          accumulator = {};\n        }\n      }\n      (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n    function values(object) {\n      return baseValues(object, keys(object));\n    }\n    function valuesIn(object) {\n      return baseValues(object, keysIn(object));\n    }\n    function inRange(value, start, end) {\n      start = +start || 0;\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = +end || 0;\n      }\n      return value >= nativeMin(start, end) && value < nativeMax(start, end);\n    }\n    function random(min, max, floating) {\n      if (floating && isIterateeCall(min, max, floating)) {\n        max = floating = undefined;\n      }\n      var noMin = min == null,\n          noMax = max == null;\n\n      if (floating == null) {\n        if (noMax && typeof min == 'boolean') {\n          floating = min;\n          min = 1;\n        }\n        else if (typeof max == 'boolean') {\n          floating = max;\n          noMax = true;\n        }\n      }\n      if (noMin && noMax) {\n        max = 1;\n        noMax = false;\n      }\n      min = +min || 0;\n      if (noMax) {\n        max = min;\n        min = 0;\n      } else {\n        max = +max || 0;\n      }\n      if (floating || min % 1 || max % 1) {\n        var rand = nativeRandom();\n        return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);\n      }\n      return baseRandom(min, max);\n    }\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);\n    });\n    function capitalize(string) {\n      string = baseToString(string);\n      return string && (string.charAt(0).toUpperCase() + string.slice(1));\n    }\n    function deburr(string) {\n      string = baseToString(string);\n      return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');\n    }\n    function endsWith(string, target, position) {\n      string = baseToString(string);\n      target = (target + '');\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : nativeMin(position < 0 ? 0 : (+position || 0), length);\n\n      position -= target.length;\n      return position >= 0 && string.indexOf(target, position) == position;\n    }\n    function escape(string) {\n      string = baseToString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n    function escapeRegExp(string) {\n      string = baseToString(string);\n      return (string && reHasRegExpChars.test(string))\n        ? string.replace(reRegExpChars, escapeRegExpChar)\n        : (string || '(?:)');\n    }\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n    function pad(string, length, chars) {\n      string = baseToString(string);\n      length = +length;\n\n      var strLength = string.length;\n      if (strLength >= length || !nativeIsFinite(length)) {\n        return string;\n      }\n      var mid = (length - strLength) / 2,\n          leftLength = nativeFloor(mid),\n          rightLength = nativeCeil(mid);\n\n      chars = createPadding('', rightLength, chars);\n      return chars.slice(0, leftLength) + string + chars;\n    }\n    var padLeft = createPadDir();\n    var padRight = createPadDir(true);\n    function parseInt(string, radix, guard) {\n      if (guard ? isIterateeCall(string, radix, guard) : radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      string = trim(string);\n      return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));\n    }\n    function repeat(string, n) {\n      var result = '';\n      string = baseToString(string);\n      n = +n;\n      if (n < 1 || !string || !nativeIsFinite(n)) {\n        return result;\n      }\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        string += string;\n      } while (n);\n\n      return result;\n    }\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));\n    });\n    function startsWith(string, target, position) {\n      string = baseToString(string);\n      position = position == null\n        ? 0\n        : nativeMin(position < 0 ? 0 : (+position || 0), string.length);\n\n      return string.lastIndexOf(target, position) == position;\n    }\n    function template(string, options, otherOptions) {\n      var settings = lodash.templateSettings;\n\n      if (otherOptions && isIterateeCall(string, options, otherOptions)) {\n        options = otherOptions = undefined;\n      }\n      string = baseToString(string);\n      options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);\n\n      var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n      var sourceURL = '//# sourceURL=' +\n        ('sourceURL' in options\n          ? options.sourceURL\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n        return match;\n      });\n\n      source += \"';\\n\";\n      var variable = options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);\n      });\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n    function trim(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);\n      }\n      chars = (chars + '');\n      return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);\n    }\n    function trimLeft(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(trimmedLeftIndex(string));\n      }\n      return string.slice(charsLeftIndex(string, (chars + '')));\n    }\n    function trimRight(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(0, trimmedRightIndex(string) + 1);\n      }\n      return string.slice(0, charsRightIndex(string, (chars + '')) + 1);\n    }\n    function trunc(string, options, guard) {\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (options != null) {\n        if (isObject(options)) {\n          var separator = 'separator' in options ? options.separator : separator;\n          length = 'length' in options ? (+options.length || 0) : length;\n          omission = 'omission' in options ? baseToString(options.omission) : omission;\n        } else {\n          length = +options || 0;\n        }\n      }\n      string = baseToString(string);\n      if (length >= string.length) {\n        return string;\n      }\n      var end = length - omission.length;\n      if (end < 1) {\n        return omission;\n      }\n      var result = string.slice(0, end);\n      if (separator == null) {\n        return result + omission;\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              newEnd,\n              substring = string.slice(0, end);\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            newEnd = match.index;\n          }\n          result = result.slice(0, newEnd == null ? end : newEnd);\n        }\n      } else if (string.indexOf(separator, end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n    function unescape(string) {\n      string = baseToString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n    function words(string, pattern, guard) {\n      if (guard && isIterateeCall(string, pattern, guard)) {\n        pattern = undefined;\n      }\n      string = baseToString(string);\n      return string.match(pattern || reWords) || [];\n    }\n    var attempt = restParam(function(func, args) {\n      try {\n        return func.apply(undefined, args);\n      } catch(e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n    function callback(func, thisArg, guard) {\n      if (guard && isIterateeCall(func, thisArg, guard)) {\n        thisArg = undefined;\n      }\n      return isObjectLike(func)\n        ? matches(func)\n        : baseCallback(func, thisArg);\n    }\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n    function identity(value) {\n      return value;\n    }\n    function matches(source) {\n      return baseMatches(baseClone(source, true));\n    }\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, true));\n    }\n    var method = restParam(function(path, args) {\n      return function(object) {\n        return invokePath(object, path, args);\n      };\n    });\n    var methodOf = restParam(function(object, args) {\n      return function(path) {\n        return invokePath(object, path, args);\n      };\n    });\n    function mixin(object, source, options) {\n      if (options == null) {\n        var isObj = isObject(source),\n            props = isObj ? keys(source) : undefined,\n            methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;\n\n        if (!(methodNames ? methodNames.length : isObj)) {\n          methodNames = false;\n          options = source;\n          source = object;\n          object = this;\n        }\n      }\n      if (!methodNames) {\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = true,\n          index = -1,\n          isFunc = isFunction(object),\n          length = methodNames.length;\n\n      if (options === false) {\n        chain = false;\n      } else if (isObject(options) && 'chain' in options) {\n        chain = options.chain;\n      }\n      while (++index < length) {\n        var methodName = methodNames[index],\n            func = source[methodName];\n\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = (function(func) {\n            return function() {\n              var chainAll = this.__chain__;\n              if (chain || chainAll) {\n                var result = object(this.__wrapped__),\n                    actions = result.__actions__ = arrayCopy(this.__actions__);\n\n                actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n                result.__chain__ = chainAll;\n                return result;\n              }\n              return func.apply(object, arrayPush([this.value()], arguments));\n            };\n          }(func));\n        }\n      }\n      return object;\n    }\n    function noConflict() {\n      root._ = oldDash;\n      return this;\n    }\n    function noop() {\n    }\n    function property(path) {\n      return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n    }\n    function propertyOf(object) {\n      return function(path) {\n        return baseGet(object, toPath(path), path + '');\n      };\n    }\n    function range(start, end, step) {\n      if (step && isIterateeCall(start, end, step)) {\n        end = step = undefined;\n      }\n      start = +start || 0;\n      step = step == null ? 1 : (+step || 0);\n\n      if (end == null) {\n        end = start;\n        start = 0;\n      } else {\n        end = +end || 0;\n      }\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = start;\n        start += step;\n      }\n      return result;\n    }\n    function times(n, iteratee, thisArg) {\n      n = nativeFloor(n);\n      if (n < 1 || !nativeIsFinite(n)) {\n        return [];\n      }\n      var index = -1,\n          result = Array(nativeMin(n, MAX_ARRAY_LENGTH));\n\n      iteratee = bindCallback(iteratee, thisArg, 1);\n      while (++index < n) {\n        if (index < MAX_ARRAY_LENGTH) {\n          result[index] = iteratee(index);\n        } else {\n          iteratee(index);\n        }\n      }\n      return result;\n    }\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return baseToString(prefix) + id;\n    }\n    function add(augend, addend) {\n      return (+augend || 0) + (+addend || 0);\n    }\n    var ceil = createRound('ceil');\n    var floor = createRound('floor');\n    var max = createExtremum(gt, NEGATIVE_INFINITY);\n    var min = createExtremum(lt, POSITIVE_INFINITY);\n    var round = createRound('round');\n    function sum(collection, iteratee, thisArg) {\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n        iteratee = undefined;\n      }\n      iteratee = getCallback(iteratee, thisArg, 3);\n      return iteratee.length == 1\n        ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)\n        : baseSum(collection, iteratee);\n    }\n    lodash.prototype = baseLodash.prototype;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n    MapCache.prototype['delete'] = mapDelete;\n    MapCache.prototype.get = mapGet;\n    MapCache.prototype.has = mapHas;\n    MapCache.prototype.set = mapSet;\n    SetCache.prototype.push = cachePush;\n    memoize.Cache = MapCache;\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.callback = callback;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.functions = functions;\n    lodash.groupBy = groupBy;\n    lodash.indexBy = indexBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.invert = invert;\n    lodash.invoke = invoke;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.modArgs = modArgs;\n    lodash.negate = negate;\n    lodash.omit = omit;\n    lodash.once = once;\n    lodash.pairs = pairs;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pluck = pluck;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.restParam = restParam;\n    lodash.set = set;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortByAll = sortByAll;\n    lodash.sortByOrder = sortByOrder;\n    lodash.spread = spread;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.times = times;\n    lodash.toArray = toArray;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.union = union;\n    lodash.uniq = uniq;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.where = where;\n    lodash.without = without;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipWith = zipWith;\n    lodash.backflow = flowRight;\n    lodash.collect = map;\n    lodash.compose = flowRight;\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.extend = assign;\n    lodash.iteratee = callback;\n    lodash.methods = functions;\n    lodash.object = zipObject;\n    lodash.select = filter;\n    lodash.tail = rest;\n    lodash.unique = uniq;\n    mixin(lodash, lodash);\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.deburr = deburr;\n    lodash.endsWith = endsWith;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.findWhere = findWhere;\n    lodash.first = first;\n    lodash.floor = floor;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isBoolean = isBoolean;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isMatch = isMatch;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isString = isString;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.min = min;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padLeft = padLeft;\n    lodash.padRight = padRight;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.sum = sum;\n    lodash.template = template;\n    lodash.trim = trim;\n    lodash.trimLeft = trimLeft;\n    lodash.trimRight = trimRight;\n    lodash.trunc = trunc;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.words = words;\n    lodash.all = every;\n    lodash.any = some;\n    lodash.contains = includes;\n    lodash.eq = isEqual;\n    lodash.detect = find;\n    lodash.foldl = reduce;\n    lodash.foldr = reduceRight;\n    lodash.head = first;\n    lodash.include = includes;\n    lodash.inject = reduce;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!lodash.prototype[methodName]) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), false);\n    lodash.sample = sample;\n\n    lodash.prototype.sample = function(n) {\n      if (!this.__chain__ && n == null) {\n        return sample(this.value());\n      }\n      return this.thru(function(value) {\n        return sample(value, n);\n      });\n    };\n    lodash.VERSION = VERSION;\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        var filtered = this.__filtered__;\n        if (filtered && !index) {\n          return new LazyWrapper(this);\n        }\n        n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);\n\n        var result = this.clone();\n        if (filtered) {\n          result.__takeCount__ = nativeMin(result.__takeCount__, n);\n        } else {\n          result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type != LAZY_MAP_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {\n        var result = this.clone();\n        result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n    arrayEach(['first', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n    arrayEach(['initial', 'rest'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n    arrayEach(['pluck', 'where'], function(methodName, index) {\n      var operationName = index ? 'filter' : 'map',\n          createCallback = index ? baseMatches : property;\n\n      LazyWrapper.prototype[methodName] = function(value) {\n        return this[operationName](createCallback(value));\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.reject = function(predicate, thisArg) {\n      predicate = getCallback(predicate, thisArg, 1);\n      return this.filter(function(value) {\n        return !predicate(value);\n      });\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = start == null ? 0 : (+start || 0);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = (+end || 0);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {\n      return this.reverse().takeWhile(predicate, thisArg).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(POSITIVE_INFINITY);\n    };\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),\n          retUnwrapped = /^(?:first|last)$/.test(methodName),\n          lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var args = retUnwrapped ? [1] : arguments,\n            chainAll = this.__chain__,\n            value = this.__wrapped__,\n            isHybrid = !!this.__actions__.length,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          isLazy = useLazy = false;\n        }\n        var interceptor = function(value) {\n          return (retUnwrapped && chainAll)\n            ? lodashFunc(value, 1)[0]\n            : lodashFunc.apply(undefined, arrayPush([value], args));\n        };\n\n        var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },\n            onlyLazy = isLazy && !isHybrid;\n\n        if (retUnwrapped && !chainAll) {\n          if (onlyLazy) {\n            value = value.clone();\n            value.__actions__.push(action);\n            return func.call(value);\n          }\n          return lodashFunc.call(undefined, this.value())[0];\n        }\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push(action);\n          return new LodashWrapper(result, chainAll);\n        }\n        return this.thru(interceptor);\n      };\n    });\n    arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {\n      var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          return func.apply(this.value(), args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(value, args);\n        });\n      };\n    });\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name,\n            names = realNames[key] || (realNames[key] = []);\n\n        names.push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.concat = wrapperConcat;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toString = wrapperToString;\n    lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n    lodash.prototype.collect = lodash.prototype.map;\n    lodash.prototype.head = lodash.prototype.first;\n    lodash.prototype.select = lodash.prototype.filter;\n    lodash.prototype.tail = lodash.prototype.rest;\n\n    return lodash;\n  }\n  var _ = runInContext();\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    root._ = _;\n    ace.define(function() {\n      return _;\n    });\n  }\n  else if (freeExports && freeModule) {\n    if (moduleExports) {\n      (freeModule.exports = _)._ = _;\n    }\n    else {\n      freeExports._ = _;\n    }\n  }\n  else {\n    root._ = _;\n  }\n}.call(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}]},{},[\"/node_modules/xqlint/lib/xqlint.js\"]);\n\n});\n\nace.define(\"ace/mode/xquery_worker\",[], function(require, exports, module) {\n\"use strict\";\n    \nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar XQLintLib = require(\"./xquery/xqlint\");\nvar XQLint =  XQLintLib.XQLint;\n\nvar getModuleResolverFromModules = function(modules){\n    return function(uri){\n            var index = modules;\n            var mod = index[uri];\n            var variables = {};\n            var functions = {};\n            mod.functions.forEach(function(fn){\n                functions[uri + '#' + fn.name + '#' + fn.arity] = {\n                    params: []\n                };\n                fn.parameters.forEach(function(param){\n                    functions[uri + '#' + fn.name + '#' + fn.arity].params.push('$' + param.name);\n                });\n            });\n            mod.variables.forEach(function(variable){\n                var name = variable.name.substring(variable.name.indexOf(':') + 1);\n                variables[uri + '#' + name] = { type: 'VarDecl', annotations: [] };\n            });\n            return {\n                variables: variables,\n                functions: functions\n            };\n    };\n};\n\nvar XQueryWorker = exports.XQueryWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(200);\n    var that = this;\n\n    this.sender.on(\"complete\", function(e){\n        if(that.xqlint) {\n            var pos = { line: e.data.pos.row, col: e.data.pos.column };\n            var proposals = that.xqlint.getCompletions(pos);\n            that.sender.emit(\"complete\", proposals);\n        }\n    });\n\n    this.sender.on(\"setAvailableModuleNamespaces\", function(e){\n        that.availableModuleNamespaces = e.data;\n    });\n\n    this.sender.on(\"setFileName\", function(e){\n        that.fileName = e.data;\n    });\n\n    this.sender.on(\"setModuleResolver\", function(e){\n        that.moduleResolver = getModuleResolverFromModules(e.data);\n    });\n};\n\noop.inherits(XQueryWorker, Mirror);\n\n(function() {\n    \n    this.onUpdate = function() {\n        this.sender.emit(\"start\");\n        var value = this.doc.getValue();\n        var sctx = XQLintLib.createStaticContext();\n        if(this.moduleResolver) {\n            sctx.setModuleResolver(this.moduleResolver);\n        }\n        if(this.availableModuleNamespaces) {\n            sctx.availableModuleNamespaces = this.availableModuleNamespaces;\n        }\n        var opts = {\n            styleCheck: this.styleCheck,\n            staticContext: sctx,\n            fileName: this.fileName\n        };\n        this.xqlint = new XQLint(value, opts);\n        this.sender.emit(\"markers\", this.xqlint.getMarkers());\n    };\n}).call(XQueryWorker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "app/static/js/libs/ace/webpack-resolver.js",
    "content": "\nace.config.setModuleUrl('ace/ext/beautify', require('file-loader!./src-noconflict/ext-beautify.js'))\nace.config.setModuleUrl('ace/ext/elastic_tabstops_lite', require('file-loader!./src-noconflict/ext-elastic_tabstops_lite.js'))\nace.config.setModuleUrl('ace/ext/emmet', require('file-loader!./src-noconflict/ext-emmet.js'))\nace.config.setModuleUrl('ace/ext/error_marker', require('file-loader!./src-noconflict/ext-error_marker.js'))\nace.config.setModuleUrl('ace/ext/keyboard_menu', require('file-loader!./src-noconflict/ext-keybinding_menu.js'))\nace.config.setModuleUrl('ace/ext/language_tools', require('file-loader!./src-noconflict/ext-language_tools.js'))\nace.config.setModuleUrl('ace/ext/linking', require('file-loader!./src-noconflict/ext-linking.js'))\nace.config.setModuleUrl('ace/ext/modelist', require('file-loader!./src-noconflict/ext-modelist.js'))\nace.config.setModuleUrl('ace/ext/options', require('file-loader!./src-noconflict/ext-options.js'))\nace.config.setModuleUrl('ace/ext/rtl', require('file-loader!./src-noconflict/ext-rtl.js'))\nace.config.setModuleUrl('ace/ext/searchbox', require('file-loader!./src-noconflict/ext-searchbox.js'))\nace.config.setModuleUrl('ace/ext/settings_menu', require('file-loader!./src-noconflict/ext-settings_menu.js'))\nace.config.setModuleUrl('ace/ext/spellcheck', require('file-loader!./src-noconflict/ext-spellcheck.js'))\nace.config.setModuleUrl('ace/ext/split', require('file-loader!./src-noconflict/ext-split.js'))\nace.config.setModuleUrl('ace/ext/static_highlight', require('file-loader!./src-noconflict/ext-static_highlight.js'))\nace.config.setModuleUrl('ace/ext/statusbar', require('file-loader!./src-noconflict/ext-statusbar.js'))\nace.config.setModuleUrl('ace/ext/textarea', require('file-loader!./src-noconflict/ext-textarea.js'))\nace.config.setModuleUrl('ace/ext/themelist', require('file-loader!./src-noconflict/ext-themelist.js'))\nace.config.setModuleUrl('ace/ext/whitespace', require('file-loader!./src-noconflict/ext-whitespace.js'))\nace.config.setModuleUrl('ace/keyboard/emacs', require('file-loader!./src-noconflict/keybinding-emacs.js'))\nace.config.setModuleUrl('ace/keyboard/vim', require('file-loader!./src-noconflict/keybinding-vim.js'))\nace.config.setModuleUrl('ace/mode/abap', require('file-loader!./src-noconflict/mode-abap.js'))\nace.config.setModuleUrl('ace/mode/abc', require('file-loader!./src-noconflict/mode-abc.js'))\nace.config.setModuleUrl('ace/mode/actionscript', require('file-loader!./src-noconflict/mode-actionscript.js'))\nace.config.setModuleUrl('ace/mode/ada', require('file-loader!./src-noconflict/mode-ada.js'))\nace.config.setModuleUrl('ace/mode/apache_conf', require('file-loader!./src-noconflict/mode-apache_conf.js'))\nace.config.setModuleUrl('ace/mode/apex', require('file-loader!./src-noconflict/mode-apex.js'))\nace.config.setModuleUrl('ace/mode/applescript', require('file-loader!./src-noconflict/mode-applescript.js'))\nace.config.setModuleUrl('ace/mode/asciidoc', require('file-loader!./src-noconflict/mode-asciidoc.js'))\nace.config.setModuleUrl('ace/mode/asl', require('file-loader!./src-noconflict/mode-asl.js'))\nace.config.setModuleUrl('ace/mode/assembly_x86', require('file-loader!./src-noconflict/mode-assembly_x86.js'))\nace.config.setModuleUrl('ace/mode/autohotkey', require('file-loader!./src-noconflict/mode-autohotkey.js'))\nace.config.setModuleUrl('ace/mode/batchfile', require('file-loader!./src-noconflict/mode-batchfile.js'))\nace.config.setModuleUrl('ace/mode/bro', require('file-loader!./src-noconflict/mode-bro.js'))\nace.config.setModuleUrl('ace/mode/c9search', require('file-loader!./src-noconflict/mode-c9search.js'))\nace.config.setModuleUrl('ace/mode/cirru', require('file-loader!./src-noconflict/mode-cirru.js'))\nace.config.setModuleUrl('ace/mode/clojure', require('file-loader!./src-noconflict/mode-clojure.js'))\nace.config.setModuleUrl('ace/mode/cobol', require('file-loader!./src-noconflict/mode-cobol.js'))\nace.config.setModuleUrl('ace/mode/coffee', require('file-loader!./src-noconflict/mode-coffee.js'))\nace.config.setModuleUrl('ace/mode/coldfusion', require('file-loader!./src-noconflict/mode-coldfusion.js'))\nace.config.setModuleUrl('ace/mode/csharp', require('file-loader!./src-noconflict/mode-csharp.js'))\nace.config.setModuleUrl('ace/mode/csound_document', require('file-loader!./src-noconflict/mode-csound_document.js'))\nace.config.setModuleUrl('ace/mode/csound_orchestra', require('file-loader!./src-noconflict/mode-csound_orchestra.js'))\nace.config.setModuleUrl('ace/mode/csound_score', require('file-loader!./src-noconflict/mode-csound_score.js'))\nace.config.setModuleUrl('ace/mode/csp', require('file-loader!./src-noconflict/mode-csp.js'))\nace.config.setModuleUrl('ace/mode/css', require('file-loader!./src-noconflict/mode-css.js'))\nace.config.setModuleUrl('ace/mode/curly', require('file-loader!./src-noconflict/mode-curly.js'))\nace.config.setModuleUrl('ace/mode/c_cpp', require('file-loader!./src-noconflict/mode-c_cpp.js'))\nace.config.setModuleUrl('ace/mode/d', require('file-loader!./src-noconflict/mode-d.js'))\nace.config.setModuleUrl('ace/mode/dart', require('file-loader!./src-noconflict/mode-dart.js'))\nace.config.setModuleUrl('ace/mode/diff', require('file-loader!./src-noconflict/mode-diff.js'))\nace.config.setModuleUrl('ace/mode/django', require('file-loader!./src-noconflict/mode-django.js'))\nace.config.setModuleUrl('ace/mode/dockerfile', require('file-loader!./src-noconflict/mode-dockerfile.js'))\nace.config.setModuleUrl('ace/mode/dot', require('file-loader!./src-noconflict/mode-dot.js'))\nace.config.setModuleUrl('ace/mode/drools', require('file-loader!./src-noconflict/mode-drools.js'))\nace.config.setModuleUrl('ace/mode/edifact', require('file-loader!./src-noconflict/mode-edifact.js'))\nace.config.setModuleUrl('ace/mode/eiffel', require('file-loader!./src-noconflict/mode-eiffel.js'))\nace.config.setModuleUrl('ace/mode/ejs', require('file-loader!./src-noconflict/mode-ejs.js'))\nace.config.setModuleUrl('ace/mode/elixir', require('file-loader!./src-noconflict/mode-elixir.js'))\nace.config.setModuleUrl('ace/mode/elm', require('file-loader!./src-noconflict/mode-elm.js'))\nace.config.setModuleUrl('ace/mode/erlang', require('file-loader!./src-noconflict/mode-erlang.js'))\nace.config.setModuleUrl('ace/mode/forth', require('file-loader!./src-noconflict/mode-forth.js'))\nace.config.setModuleUrl('ace/mode/fortran', require('file-loader!./src-noconflict/mode-fortran.js'))\nace.config.setModuleUrl('ace/mode/fsharp', require('file-loader!./src-noconflict/mode-fsharp.js'))\nace.config.setModuleUrl('ace/mode/fsl', require('file-loader!./src-noconflict/mode-fsl.js'))\nace.config.setModuleUrl('ace/mode/ftl', require('file-loader!./src-noconflict/mode-ftl.js'))\nace.config.setModuleUrl('ace/mode/gcode', require('file-loader!./src-noconflict/mode-gcode.js'))\nace.config.setModuleUrl('ace/mode/gherkin', require('file-loader!./src-noconflict/mode-gherkin.js'))\nace.config.setModuleUrl('ace/mode/gitignore', require('file-loader!./src-noconflict/mode-gitignore.js'))\nace.config.setModuleUrl('ace/mode/glsl', require('file-loader!./src-noconflict/mode-glsl.js'))\nace.config.setModuleUrl('ace/mode/gobstones', require('file-loader!./src-noconflict/mode-gobstones.js'))\nace.config.setModuleUrl('ace/mode/golang', require('file-loader!./src-noconflict/mode-golang.js'))\nace.config.setModuleUrl('ace/mode/graphqlschema', require('file-loader!./src-noconflict/mode-graphqlschema.js'))\nace.config.setModuleUrl('ace/mode/groovy', require('file-loader!./src-noconflict/mode-groovy.js'))\nace.config.setModuleUrl('ace/mode/haml', require('file-loader!./src-noconflict/mode-haml.js'))\nace.config.setModuleUrl('ace/mode/handlebars', require('file-loader!./src-noconflict/mode-handlebars.js'))\nace.config.setModuleUrl('ace/mode/haskell', require('file-loader!./src-noconflict/mode-haskell.js'))\nace.config.setModuleUrl('ace/mode/haskell_cabal', require('file-loader!./src-noconflict/mode-haskell_cabal.js'))\nace.config.setModuleUrl('ace/mode/haxe', require('file-loader!./src-noconflict/mode-haxe.js'))\nace.config.setModuleUrl('ace/mode/hjson', require('file-loader!./src-noconflict/mode-hjson.js'))\nace.config.setModuleUrl('ace/mode/html', require('file-loader!./src-noconflict/mode-html.js'))\nace.config.setModuleUrl('ace/mode/html_elixir', require('file-loader!./src-noconflict/mode-html_elixir.js'))\nace.config.setModuleUrl('ace/mode/html_ruby', require('file-loader!./src-noconflict/mode-html_ruby.js'))\nace.config.setModuleUrl('ace/mode/ini', require('file-loader!./src-noconflict/mode-ini.js'))\nace.config.setModuleUrl('ace/mode/io', require('file-loader!./src-noconflict/mode-io.js'))\nace.config.setModuleUrl('ace/mode/jack', require('file-loader!./src-noconflict/mode-jack.js'))\nace.config.setModuleUrl('ace/mode/jade', require('file-loader!./src-noconflict/mode-jade.js'))\nace.config.setModuleUrl('ace/mode/java', require('file-loader!./src-noconflict/mode-java.js'))\nace.config.setModuleUrl('ace/mode/javascript', require('file-loader!./src-noconflict/mode-javascript.js'))\nace.config.setModuleUrl('ace/mode/json', require('file-loader!./src-noconflict/mode-json.js'))\nace.config.setModuleUrl('ace/mode/jsoniq', require('file-loader!./src-noconflict/mode-jsoniq.js'))\nace.config.setModuleUrl('ace/mode/jsp', require('file-loader!./src-noconflict/mode-jsp.js'))\nace.config.setModuleUrl('ace/mode/jssm', require('file-loader!./src-noconflict/mode-jssm.js'))\nace.config.setModuleUrl('ace/mode/jsx', require('file-loader!./src-noconflict/mode-jsx.js'))\nace.config.setModuleUrl('ace/mode/julia', require('file-loader!./src-noconflict/mode-julia.js'))\nace.config.setModuleUrl('ace/mode/kotlin', require('file-loader!./src-noconflict/mode-kotlin.js'))\nace.config.setModuleUrl('ace/mode/latex', require('file-loader!./src-noconflict/mode-latex.js'))\nace.config.setModuleUrl('ace/mode/less', require('file-loader!./src-noconflict/mode-less.js'))\nace.config.setModuleUrl('ace/mode/liquid', require('file-loader!./src-noconflict/mode-liquid.js'))\nace.config.setModuleUrl('ace/mode/lisp', require('file-loader!./src-noconflict/mode-lisp.js'))\nace.config.setModuleUrl('ace/mode/livescript', require('file-loader!./src-noconflict/mode-livescript.js'))\nace.config.setModuleUrl('ace/mode/logiql', require('file-loader!./src-noconflict/mode-logiql.js'))\nace.config.setModuleUrl('ace/mode/logtalk', require('file-loader!./src-noconflict/mode-logtalk.js'))\nace.config.setModuleUrl('ace/mode/lsl', require('file-loader!./src-noconflict/mode-lsl.js'))\nace.config.setModuleUrl('ace/mode/lua', require('file-loader!./src-noconflict/mode-lua.js'))\nace.config.setModuleUrl('ace/mode/luapage', require('file-loader!./src-noconflict/mode-luapage.js'))\nace.config.setModuleUrl('ace/mode/lucene', require('file-loader!./src-noconflict/mode-lucene.js'))\nace.config.setModuleUrl('ace/mode/makefile', require('file-loader!./src-noconflict/mode-makefile.js'))\nace.config.setModuleUrl('ace/mode/markdown', require('file-loader!./src-noconflict/mode-markdown.js'))\nace.config.setModuleUrl('ace/mode/mask', require('file-loader!./src-noconflict/mode-mask.js'))\nace.config.setModuleUrl('ace/mode/matlab', require('file-loader!./src-noconflict/mode-matlab.js'))\nace.config.setModuleUrl('ace/mode/maze', require('file-loader!./src-noconflict/mode-maze.js'))\nace.config.setModuleUrl('ace/mode/mel', require('file-loader!./src-noconflict/mode-mel.js'))\nace.config.setModuleUrl('ace/mode/mixal', require('file-loader!./src-noconflict/mode-mixal.js'))\nace.config.setModuleUrl('ace/mode/mushcode', require('file-loader!./src-noconflict/mode-mushcode.js'))\nace.config.setModuleUrl('ace/mode/mysql', require('file-loader!./src-noconflict/mode-mysql.js'))\nace.config.setModuleUrl('ace/mode/nix', require('file-loader!./src-noconflict/mode-nix.js'))\nace.config.setModuleUrl('ace/mode/nsis', require('file-loader!./src-noconflict/mode-nsis.js'))\nace.config.setModuleUrl('ace/mode/objectivec', require('file-loader!./src-noconflict/mode-objectivec.js'))\nace.config.setModuleUrl('ace/mode/ocaml', require('file-loader!./src-noconflict/mode-ocaml.js'))\nace.config.setModuleUrl('ace/mode/pascal', require('file-loader!./src-noconflict/mode-pascal.js'))\nace.config.setModuleUrl('ace/mode/perl', require('file-loader!./src-noconflict/mode-perl.js'))\nace.config.setModuleUrl('ace/mode/perl6', require('file-loader!./src-noconflict/mode-perl6.js'))\nace.config.setModuleUrl('ace/mode/pgsql', require('file-loader!./src-noconflict/mode-pgsql.js'))\nace.config.setModuleUrl('ace/mode/php', require('file-loader!./src-noconflict/mode-php.js'))\nace.config.setModuleUrl('ace/mode/php_laravel_blade', require('file-loader!./src-noconflict/mode-php_laravel_blade.js'))\nace.config.setModuleUrl('ace/mode/pig', require('file-loader!./src-noconflict/mode-pig.js'))\nace.config.setModuleUrl('ace/mode/plain_text', require('file-loader!./src-noconflict/mode-plain_text.js'))\nace.config.setModuleUrl('ace/mode/powershell', require('file-loader!./src-noconflict/mode-powershell.js'))\nace.config.setModuleUrl('ace/mode/praat', require('file-loader!./src-noconflict/mode-praat.js'))\nace.config.setModuleUrl('ace/mode/prolog', require('file-loader!./src-noconflict/mode-prolog.js'))\nace.config.setModuleUrl('ace/mode/properties', require('file-loader!./src-noconflict/mode-properties.js'))\nace.config.setModuleUrl('ace/mode/protobuf', require('file-loader!./src-noconflict/mode-protobuf.js'))\nace.config.setModuleUrl('ace/mode/puppet', require('file-loader!./src-noconflict/mode-puppet.js'))\nace.config.setModuleUrl('ace/mode/python', require('file-loader!./src-noconflict/mode-python.js'))\nace.config.setModuleUrl('ace/mode/r', require('file-loader!./src-noconflict/mode-r.js'))\nace.config.setModuleUrl('ace/mode/razor', require('file-loader!./src-noconflict/mode-razor.js'))\nace.config.setModuleUrl('ace/mode/rdoc', require('file-loader!./src-noconflict/mode-rdoc.js'))\nace.config.setModuleUrl('ace/mode/red', require('file-loader!./src-noconflict/mode-red.js'))\nace.config.setModuleUrl('ace/mode/redshift', require('file-loader!./src-noconflict/mode-redshift.js'))\nace.config.setModuleUrl('ace/mode/rhtml', require('file-loader!./src-noconflict/mode-rhtml.js'))\nace.config.setModuleUrl('ace/mode/rst', require('file-loader!./src-noconflict/mode-rst.js'))\nace.config.setModuleUrl('ace/mode/ruby', require('file-loader!./src-noconflict/mode-ruby.js'))\nace.config.setModuleUrl('ace/mode/rust', require('file-loader!./src-noconflict/mode-rust.js'))\nace.config.setModuleUrl('ace/mode/sass', require('file-loader!./src-noconflict/mode-sass.js'))\nace.config.setModuleUrl('ace/mode/scad', require('file-loader!./src-noconflict/mode-scad.js'))\nace.config.setModuleUrl('ace/mode/scala', require('file-loader!./src-noconflict/mode-scala.js'))\nace.config.setModuleUrl('ace/mode/scheme', require('file-loader!./src-noconflict/mode-scheme.js'))\nace.config.setModuleUrl('ace/mode/scss', require('file-loader!./src-noconflict/mode-scss.js'))\nace.config.setModuleUrl('ace/mode/sh', require('file-loader!./src-noconflict/mode-sh.js'))\nace.config.setModuleUrl('ace/mode/sjs', require('file-loader!./src-noconflict/mode-sjs.js'))\nace.config.setModuleUrl('ace/mode/slim', require('file-loader!./src-noconflict/mode-slim.js'))\nace.config.setModuleUrl('ace/mode/smarty', require('file-loader!./src-noconflict/mode-smarty.js'))\nace.config.setModuleUrl('ace/mode/snippets', require('file-loader!./src-noconflict/mode-snippets.js'))\nace.config.setModuleUrl('ace/mode/soy_template', require('file-loader!./src-noconflict/mode-soy_template.js'))\nace.config.setModuleUrl('ace/mode/space', require('file-loader!./src-noconflict/mode-space.js'))\nace.config.setModuleUrl('ace/mode/sparql', require('file-loader!./src-noconflict/mode-sparql.js'))\nace.config.setModuleUrl('ace/mode/sql', require('file-loader!./src-noconflict/mode-sql.js'))\nace.config.setModuleUrl('ace/mode/sqlserver', require('file-loader!./src-noconflict/mode-sqlserver.js'))\nace.config.setModuleUrl('ace/mode/stylus', require('file-loader!./src-noconflict/mode-stylus.js'))\nace.config.setModuleUrl('ace/mode/svg', require('file-loader!./src-noconflict/mode-svg.js'))\nace.config.setModuleUrl('ace/mode/swift', require('file-loader!./src-noconflict/mode-swift.js'))\nace.config.setModuleUrl('ace/mode/tcl', require('file-loader!./src-noconflict/mode-tcl.js'))\nace.config.setModuleUrl('ace/mode/terraform', require('file-loader!./src-noconflict/mode-terraform.js'))\nace.config.setModuleUrl('ace/mode/tex', require('file-loader!./src-noconflict/mode-tex.js'))\nace.config.setModuleUrl('ace/mode/text', require('file-loader!./src-noconflict/mode-text.js'))\nace.config.setModuleUrl('ace/mode/textile', require('file-loader!./src-noconflict/mode-textile.js'))\nace.config.setModuleUrl('ace/mode/toml', require('file-loader!./src-noconflict/mode-toml.js'))\nace.config.setModuleUrl('ace/mode/tsx', require('file-loader!./src-noconflict/mode-tsx.js'))\nace.config.setModuleUrl('ace/mode/turtle', require('file-loader!./src-noconflict/mode-turtle.js'))\nace.config.setModuleUrl('ace/mode/twig', require('file-loader!./src-noconflict/mode-twig.js'))\nace.config.setModuleUrl('ace/mode/typescript', require('file-loader!./src-noconflict/mode-typescript.js'))\nace.config.setModuleUrl('ace/mode/vala', require('file-loader!./src-noconflict/mode-vala.js'))\nace.config.setModuleUrl('ace/mode/vbscript', require('file-loader!./src-noconflict/mode-vbscript.js'))\nace.config.setModuleUrl('ace/mode/velocity', require('file-loader!./src-noconflict/mode-velocity.js'))\nace.config.setModuleUrl('ace/mode/verilog', require('file-loader!./src-noconflict/mode-verilog.js'))\nace.config.setModuleUrl('ace/mode/vhdl', require('file-loader!./src-noconflict/mode-vhdl.js'))\nace.config.setModuleUrl('ace/mode/visualforce', require('file-loader!./src-noconflict/mode-visualforce.js'))\nace.config.setModuleUrl('ace/mode/wollok', require('file-loader!./src-noconflict/mode-wollok.js'))\nace.config.setModuleUrl('ace/mode/xml', require('file-loader!./src-noconflict/mode-xml.js'))\nace.config.setModuleUrl('ace/mode/xquery', require('file-loader!./src-noconflict/mode-xquery.js'))\nace.config.setModuleUrl('ace/mode/yaml', require('file-loader!./src-noconflict/mode-yaml.js'))\n\nace.config.setModuleUrl('ace/theme/ambiance', require('file-loader!./src-noconflict/theme-ambiance.js'))\nace.config.setModuleUrl('ace/theme/chaos', require('file-loader!./src-noconflict/theme-chaos.js'))\nace.config.setModuleUrl('ace/theme/chrome', require('file-loader!./src-noconflict/theme-chrome.js'))\nace.config.setModuleUrl('ace/theme/clouds', require('file-loader!./src-noconflict/theme-clouds.js'))\nace.config.setModuleUrl('ace/theme/clouds_midnight', require('file-loader!./src-noconflict/theme-clouds_midnight.js'))\nace.config.setModuleUrl('ace/theme/cobalt', require('file-loader!./src-noconflict/theme-cobalt.js'))\nace.config.setModuleUrl('ace/theme/crimson_editor', require('file-loader!./src-noconflict/theme-crimson_editor.js'))\nace.config.setModuleUrl('ace/theme/dawn', require('file-loader!./src-noconflict/theme-dawn.js'))\nace.config.setModuleUrl('ace/theme/dracula', require('file-loader!./src-noconflict/theme-dracula.js'))\nace.config.setModuleUrl('ace/theme/dreamweaver', require('file-loader!./src-noconflict/theme-dreamweaver.js'))\nace.config.setModuleUrl('ace/theme/eclipse', require('file-loader!./src-noconflict/theme-eclipse.js'))\nace.config.setModuleUrl('ace/theme/github', require('file-loader!./src-noconflict/theme-github.js'))\nace.config.setModuleUrl('ace/theme/gob', require('file-loader!./src-noconflict/theme-gob.js'))\nace.config.setModuleUrl('ace/theme/gruvbox', require('file-loader!./src-noconflict/theme-gruvbox.js'))\nace.config.setModuleUrl('ace/theme/idle_fingers', require('file-loader!./src-noconflict/theme-idle_fingers.js'))\nace.config.setModuleUrl('ace/theme/iplastic', require('file-loader!./src-noconflict/theme-iplastic.js'))\nace.config.setModuleUrl('ace/theme/katzenmilch', require('file-loader!./src-noconflict/theme-katzenmilch.js'))\nace.config.setModuleUrl('ace/theme/kr_theme', require('file-loader!./src-noconflict/theme-kr_theme.js'))\nace.config.setModuleUrl('ace/theme/kuroir', require('file-loader!./src-noconflict/theme-kuroir.js'))\nace.config.setModuleUrl('ace/theme/merbivore', require('file-loader!./src-noconflict/theme-merbivore.js'))\nace.config.setModuleUrl('ace/theme/merbivore_soft', require('file-loader!./src-noconflict/theme-merbivore_soft.js'))\nace.config.setModuleUrl('ace/theme/monokai', require('file-loader!./src-noconflict/theme-monokai.js'))\nace.config.setModuleUrl('ace/theme/mono_industrial', require('file-loader!./src-noconflict/theme-mono_industrial.js'))\nace.config.setModuleUrl('ace/theme/pastel_on_dark', require('file-loader!./src-noconflict/theme-pastel_on_dark.js'))\nace.config.setModuleUrl('ace/theme/solarized_dark', require('file-loader!./src-noconflict/theme-solarized_dark.js'))\nace.config.setModuleUrl('ace/theme/solarized_light', require('file-loader!./src-noconflict/theme-solarized_light.js'))\nace.config.setModuleUrl('ace/theme/sqlserver', require('file-loader!./src-noconflict/theme-sqlserver.js'))\nace.config.setModuleUrl('ace/theme/terminal', require('file-loader!./src-noconflict/theme-terminal.js'))\nace.config.setModuleUrl('ace/theme/textmate', require('file-loader!./src-noconflict/theme-textmate.js'))\nace.config.setModuleUrl('ace/theme/tomorrow', require('file-loader!./src-noconflict/theme-tomorrow.js'))\nace.config.setModuleUrl('ace/theme/tomorrow_night', require('file-loader!./src-noconflict/theme-tomorrow_night.js'))\nace.config.setModuleUrl('ace/theme/tomorrow_night_blue', require('file-loader!./src-noconflict/theme-tomorrow_night_blue.js'))\nace.config.setModuleUrl('ace/theme/tomorrow_night_bright', require('file-loader!./src-noconflict/theme-tomorrow_night_bright.js'))\nace.config.setModuleUrl('ace/theme/tomorrow_night_eighties', require('file-loader!./src-noconflict/theme-tomorrow_night_eighties.js'))\nace.config.setModuleUrl('ace/theme/twilight', require('file-loader!./src-noconflict/theme-twilight.js'))\nace.config.setModuleUrl('ace/theme/vibrant_ink', require('file-loader!./src-noconflict/theme-vibrant_ink.js'))\nace.config.setModuleUrl('ace/theme/xcode', require('file-loader!./src-noconflict/theme-xcode.js'))\nace.config.setModuleUrl('ace/mode/coffee_worker', require('file-loader!./src-noconflict/worker-coffee.js'))\nace.config.setModuleUrl('ace/mode/css_worker', require('file-loader!./src-noconflict/worker-css.js'))\nace.config.setModuleUrl('ace/mode/html_worker', require('file-loader!./src-noconflict/worker-html.js'))\nace.config.setModuleUrl('ace/mode/javascript_worker', require('file-loader!./src-noconflict/worker-javascript.js'))\nace.config.setModuleUrl('ace/mode/json_worker', require('file-loader!./src-noconflict/worker-json.js'))\nace.config.setModuleUrl('ace/mode/lua_worker', require('file-loader!./src-noconflict/worker-lua.js'))\nace.config.setModuleUrl('ace/mode/php_worker', require('file-loader!./src-noconflict/worker-php.js'))\nace.config.setModuleUrl('ace/mode/xml_worker', require('file-loader!./src-noconflict/worker-xml.js'))\nace.config.setModuleUrl('ace/mode/xquery_worker', require('file-loader!./src-noconflict/worker-xquery.js'))\nace.config.setModuleUrl('ace/snippets/abap', require('file-loader!./src-noconflict/snippets/abap.js'))\nace.config.setModuleUrl('ace/snippets/abc', require('file-loader!./src-noconflict/snippets/abc.js'))\nace.config.setModuleUrl('ace/snippets/actionscript', require('file-loader!./src-noconflict/snippets/actionscript.js'))\nace.config.setModuleUrl('ace/snippets/ada', require('file-loader!./src-noconflict/snippets/ada.js'))\nace.config.setModuleUrl('ace/snippets/apache_conf', require('file-loader!./src-noconflict/snippets/apache_conf.js'))\nace.config.setModuleUrl('ace/snippets/apex', require('file-loader!./src-noconflict/snippets/apex.js'))\nace.config.setModuleUrl('ace/snippets/applescript', require('file-loader!./src-noconflict/snippets/applescript.js'))\nace.config.setModuleUrl('ace/snippets/asciidoc', require('file-loader!./src-noconflict/snippets/asciidoc.js'))\nace.config.setModuleUrl('ace/snippets/asl', require('file-loader!./src-noconflict/snippets/asl.js'))\nace.config.setModuleUrl('ace/snippets/assembly_x86', require('file-loader!./src-noconflict/snippets/assembly_x86.js'))\nace.config.setModuleUrl('ace/snippets/autohotkey', require('file-loader!./src-noconflict/snippets/autohotkey.js'))\nace.config.setModuleUrl('ace/snippets/batchfile', require('file-loader!./src-noconflict/snippets/batchfile.js'))\nace.config.setModuleUrl('ace/snippets/bro', require('file-loader!./src-noconflict/snippets/bro.js'))\nace.config.setModuleUrl('ace/snippets/c9search', require('file-loader!./src-noconflict/snippets/c9search.js'))\nace.config.setModuleUrl('ace/snippets/cirru', require('file-loader!./src-noconflict/snippets/cirru.js'))\nace.config.setModuleUrl('ace/snippets/clojure', require('file-loader!./src-noconflict/snippets/clojure.js'))\nace.config.setModuleUrl('ace/snippets/cobol', require('file-loader!./src-noconflict/snippets/cobol.js'))\nace.config.setModuleUrl('ace/snippets/coffee', require('file-loader!./src-noconflict/snippets/coffee.js'))\nace.config.setModuleUrl('ace/snippets/coldfusion', require('file-loader!./src-noconflict/snippets/coldfusion.js'))\nace.config.setModuleUrl('ace/snippets/csharp', require('file-loader!./src-noconflict/snippets/csharp.js'))\nace.config.setModuleUrl('ace/snippets/csound_document', require('file-loader!./src-noconflict/snippets/csound_document.js'))\nace.config.setModuleUrl('ace/snippets/csound_orchestra', require('file-loader!./src-noconflict/snippets/csound_orchestra.js'))\nace.config.setModuleUrl('ace/snippets/csound_score', require('file-loader!./src-noconflict/snippets/csound_score.js'))\nace.config.setModuleUrl('ace/snippets/csp', require('file-loader!./src-noconflict/snippets/csp.js'))\nace.config.setModuleUrl('ace/snippets/css', require('file-loader!./src-noconflict/snippets/css.js'))\nace.config.setModuleUrl('ace/snippets/curly', require('file-loader!./src-noconflict/snippets/curly.js'))\nace.config.setModuleUrl('ace/snippets/c_cpp', require('file-loader!./src-noconflict/snippets/c_cpp.js'))\nace.config.setModuleUrl('ace/snippets/d', require('file-loader!./src-noconflict/snippets/d.js'))\nace.config.setModuleUrl('ace/snippets/dart', require('file-loader!./src-noconflict/snippets/dart.js'))\nace.config.setModuleUrl('ace/snippets/diff', require('file-loader!./src-noconflict/snippets/diff.js'))\nace.config.setModuleUrl('ace/snippets/django', require('file-loader!./src-noconflict/snippets/django.js'))\nace.config.setModuleUrl('ace/snippets/dockerfile', require('file-loader!./src-noconflict/snippets/dockerfile.js'))\nace.config.setModuleUrl('ace/snippets/dot', require('file-loader!./src-noconflict/snippets/dot.js'))\nace.config.setModuleUrl('ace/snippets/drools', require('file-loader!./src-noconflict/snippets/drools.js'))\nace.config.setModuleUrl('ace/snippets/edifact', require('file-loader!./src-noconflict/snippets/edifact.js'))\nace.config.setModuleUrl('ace/snippets/eiffel', require('file-loader!./src-noconflict/snippets/eiffel.js'))\nace.config.setModuleUrl('ace/snippets/ejs', require('file-loader!./src-noconflict/snippets/ejs.js'))\nace.config.setModuleUrl('ace/snippets/elixir', require('file-loader!./src-noconflict/snippets/elixir.js'))\nace.config.setModuleUrl('ace/snippets/elm', require('file-loader!./src-noconflict/snippets/elm.js'))\nace.config.setModuleUrl('ace/snippets/erlang', require('file-loader!./src-noconflict/snippets/erlang.js'))\nace.config.setModuleUrl('ace/snippets/forth', require('file-loader!./src-noconflict/snippets/forth.js'))\nace.config.setModuleUrl('ace/snippets/fortran', require('file-loader!./src-noconflict/snippets/fortran.js'))\nace.config.setModuleUrl('ace/snippets/fsharp', require('file-loader!./src-noconflict/snippets/fsharp.js'))\nace.config.setModuleUrl('ace/snippets/fsl', require('file-loader!./src-noconflict/snippets/fsl.js'))\nace.config.setModuleUrl('ace/snippets/ftl', require('file-loader!./src-noconflict/snippets/ftl.js'))\nace.config.setModuleUrl('ace/snippets/gcode', require('file-loader!./src-noconflict/snippets/gcode.js'))\nace.config.setModuleUrl('ace/snippets/gherkin', require('file-loader!./src-noconflict/snippets/gherkin.js'))\nace.config.setModuleUrl('ace/snippets/gitignore', require('file-loader!./src-noconflict/snippets/gitignore.js'))\nace.config.setModuleUrl('ace/snippets/glsl', require('file-loader!./src-noconflict/snippets/glsl.js'))\nace.config.setModuleUrl('ace/snippets/gobstones', require('file-loader!./src-noconflict/snippets/gobstones.js'))\nace.config.setModuleUrl('ace/snippets/golang', require('file-loader!./src-noconflict/snippets/golang.js'))\nace.config.setModuleUrl('ace/snippets/graphqlschema', require('file-loader!./src-noconflict/snippets/graphqlschema.js'))\nace.config.setModuleUrl('ace/snippets/groovy', require('file-loader!./src-noconflict/snippets/groovy.js'))\nace.config.setModuleUrl('ace/snippets/haml', require('file-loader!./src-noconflict/snippets/haml.js'))\nace.config.setModuleUrl('ace/snippets/handlebars', require('file-loader!./src-noconflict/snippets/handlebars.js'))\nace.config.setModuleUrl('ace/snippets/haskell', require('file-loader!./src-noconflict/snippets/haskell.js'))\nace.config.setModuleUrl('ace/snippets/haskell_cabal', require('file-loader!./src-noconflict/snippets/haskell_cabal.js'))\nace.config.setModuleUrl('ace/snippets/haxe', require('file-loader!./src-noconflict/snippets/haxe.js'))\nace.config.setModuleUrl('ace/snippets/hjson', require('file-loader!./src-noconflict/snippets/hjson.js'))\nace.config.setModuleUrl('ace/snippets/html', require('file-loader!./src-noconflict/snippets/html.js'))\nace.config.setModuleUrl('ace/snippets/html_elixir', require('file-loader!./src-noconflict/snippets/html_elixir.js'))\nace.config.setModuleUrl('ace/snippets/html_ruby', require('file-loader!./src-noconflict/snippets/html_ruby.js'))\nace.config.setModuleUrl('ace/snippets/ini', require('file-loader!./src-noconflict/snippets/ini.js'))\nace.config.setModuleUrl('ace/snippets/io', require('file-loader!./src-noconflict/snippets/io.js'))\nace.config.setModuleUrl('ace/snippets/jack', require('file-loader!./src-noconflict/snippets/jack.js'))\nace.config.setModuleUrl('ace/snippets/jade', require('file-loader!./src-noconflict/snippets/jade.js'))\nace.config.setModuleUrl('ace/snippets/java', require('file-loader!./src-noconflict/snippets/java.js'))\nace.config.setModuleUrl('ace/snippets/javascript', require('file-loader!./src-noconflict/snippets/javascript.js'))\nace.config.setModuleUrl('ace/snippets/json', require('file-loader!./src-noconflict/snippets/json.js'))\nace.config.setModuleUrl('ace/snippets/jsoniq', require('file-loader!./src-noconflict/snippets/jsoniq.js'))\nace.config.setModuleUrl('ace/snippets/jsp', require('file-loader!./src-noconflict/snippets/jsp.js'))\nace.config.setModuleUrl('ace/snippets/jssm', require('file-loader!./src-noconflict/snippets/jssm.js'))\nace.config.setModuleUrl('ace/snippets/jsx', require('file-loader!./src-noconflict/snippets/jsx.js'))\nace.config.setModuleUrl('ace/snippets/julia', require('file-loader!./src-noconflict/snippets/julia.js'))\nace.config.setModuleUrl('ace/snippets/kotlin', require('file-loader!./src-noconflict/snippets/kotlin.js'))\nace.config.setModuleUrl('ace/snippets/latex', require('file-loader!./src-noconflict/snippets/latex.js'))\nace.config.setModuleUrl('ace/snippets/less', require('file-loader!./src-noconflict/snippets/less.js'))\nace.config.setModuleUrl('ace/snippets/liquid', require('file-loader!./src-noconflict/snippets/liquid.js'))\nace.config.setModuleUrl('ace/snippets/lisp', require('file-loader!./src-noconflict/snippets/lisp.js'))\nace.config.setModuleUrl('ace/snippets/livescript', require('file-loader!./src-noconflict/snippets/livescript.js'))\nace.config.setModuleUrl('ace/snippets/logiql', require('file-loader!./src-noconflict/snippets/logiql.js'))\nace.config.setModuleUrl('ace/snippets/logtalk', require('file-loader!./src-noconflict/snippets/logtalk.js'))\nace.config.setModuleUrl('ace/snippets/lsl', require('file-loader!./src-noconflict/snippets/lsl.js'))\nace.config.setModuleUrl('ace/snippets/lua', require('file-loader!./src-noconflict/snippets/lua.js'))\nace.config.setModuleUrl('ace/snippets/luapage', require('file-loader!./src-noconflict/snippets/luapage.js'))\nace.config.setModuleUrl('ace/snippets/lucene', require('file-loader!./src-noconflict/snippets/lucene.js'))\nace.config.setModuleUrl('ace/snippets/makefile', require('file-loader!./src-noconflict/snippets/makefile.js'))\nace.config.setModuleUrl('ace/snippets/markdown', require('file-loader!./src-noconflict/snippets/markdown.js'))\nace.config.setModuleUrl('ace/snippets/mask', require('file-loader!./src-noconflict/snippets/mask.js'))\nace.config.setModuleUrl('ace/snippets/matlab', require('file-loader!./src-noconflict/snippets/matlab.js'))\nace.config.setModuleUrl('ace/snippets/maze', require('file-loader!./src-noconflict/snippets/maze.js'))\nace.config.setModuleUrl('ace/snippets/mel', require('file-loader!./src-noconflict/snippets/mel.js'))\nace.config.setModuleUrl('ace/snippets/mixal', require('file-loader!./src-noconflict/snippets/mixal.js'))\nace.config.setModuleUrl('ace/snippets/mushcode', require('file-loader!./src-noconflict/snippets/mushcode.js'))\nace.config.setModuleUrl('ace/snippets/mysql', require('file-loader!./src-noconflict/snippets/mysql.js'))\nace.config.setModuleUrl('ace/snippets/nix', require('file-loader!./src-noconflict/snippets/nix.js'))\nace.config.setModuleUrl('ace/snippets/nsis', require('file-loader!./src-noconflict/snippets/nsis.js'))\nace.config.setModuleUrl('ace/snippets/objectivec', require('file-loader!./src-noconflict/snippets/objectivec.js'))\nace.config.setModuleUrl('ace/snippets/ocaml', require('file-loader!./src-noconflict/snippets/ocaml.js'))\nace.config.setModuleUrl('ace/snippets/pascal', require('file-loader!./src-noconflict/snippets/pascal.js'))\nace.config.setModuleUrl('ace/snippets/perl', require('file-loader!./src-noconflict/snippets/perl.js'))\nace.config.setModuleUrl('ace/snippets/perl6', require('file-loader!./src-noconflict/snippets/perl6.js'))\nace.config.setModuleUrl('ace/snippets/pgsql', require('file-loader!./src-noconflict/snippets/pgsql.js'))\nace.config.setModuleUrl('ace/snippets/php', require('file-loader!./src-noconflict/snippets/php.js'))\nace.config.setModuleUrl('ace/snippets/php_laravel_blade', require('file-loader!./src-noconflict/snippets/php_laravel_blade.js'))\nace.config.setModuleUrl('ace/snippets/pig', require('file-loader!./src-noconflict/snippets/pig.js'))\nace.config.setModuleUrl('ace/snippets/plain_text', require('file-loader!./src-noconflict/snippets/plain_text.js'))\nace.config.setModuleUrl('ace/snippets/powershell', require('file-loader!./src-noconflict/snippets/powershell.js'))\nace.config.setModuleUrl('ace/snippets/praat', require('file-loader!./src-noconflict/snippets/praat.js'))\nace.config.setModuleUrl('ace/snippets/prolog', require('file-loader!./src-noconflict/snippets/prolog.js'))\nace.config.setModuleUrl('ace/snippets/properties', require('file-loader!./src-noconflict/snippets/properties.js'))\nace.config.setModuleUrl('ace/snippets/protobuf', require('file-loader!./src-noconflict/snippets/protobuf.js'))\nace.config.setModuleUrl('ace/snippets/puppet', require('file-loader!./src-noconflict/snippets/puppet.js'))\nace.config.setModuleUrl('ace/snippets/python', require('file-loader!./src-noconflict/snippets/python.js'))\nace.config.setModuleUrl('ace/snippets/r', require('file-loader!./src-noconflict/snippets/r.js'))\nace.config.setModuleUrl('ace/snippets/razor', require('file-loader!./src-noconflict/snippets/razor.js'))\nace.config.setModuleUrl('ace/snippets/rdoc', require('file-loader!./src-noconflict/snippets/rdoc.js'))\nace.config.setModuleUrl('ace/snippets/red', require('file-loader!./src-noconflict/snippets/red.js'))\nace.config.setModuleUrl('ace/snippets/redshift', require('file-loader!./src-noconflict/snippets/redshift.js'))\nace.config.setModuleUrl('ace/snippets/rhtml', require('file-loader!./src-noconflict/snippets/rhtml.js'))\nace.config.setModuleUrl('ace/snippets/rst', require('file-loader!./src-noconflict/snippets/rst.js'))\nace.config.setModuleUrl('ace/snippets/ruby', require('file-loader!./src-noconflict/snippets/ruby.js'))\nace.config.setModuleUrl('ace/snippets/rust', require('file-loader!./src-noconflict/snippets/rust.js'))\nace.config.setModuleUrl('ace/snippets/sass', require('file-loader!./src-noconflict/snippets/sass.js'))\nace.config.setModuleUrl('ace/snippets/scad', require('file-loader!./src-noconflict/snippets/scad.js'))\nace.config.setModuleUrl('ace/snippets/scala', require('file-loader!./src-noconflict/snippets/scala.js'))\nace.config.setModuleUrl('ace/snippets/scheme', require('file-loader!./src-noconflict/snippets/scheme.js'))\nace.config.setModuleUrl('ace/snippets/scss', require('file-loader!./src-noconflict/snippets/scss.js'))\nace.config.setModuleUrl('ace/snippets/sh', require('file-loader!./src-noconflict/snippets/sh.js'))\nace.config.setModuleUrl('ace/snippets/sjs', require('file-loader!./src-noconflict/snippets/sjs.js'))\nace.config.setModuleUrl('ace/snippets/slim', require('file-loader!./src-noconflict/snippets/slim.js'))\nace.config.setModuleUrl('ace/snippets/smarty', require('file-loader!./src-noconflict/snippets/smarty.js'))\nace.config.setModuleUrl('ace/snippets/snippets', require('file-loader!./src-noconflict/snippets/snippets.js'))\nace.config.setModuleUrl('ace/snippets/soy_template', require('file-loader!./src-noconflict/snippets/soy_template.js'))\nace.config.setModuleUrl('ace/snippets/space', require('file-loader!./src-noconflict/snippets/space.js'))\nace.config.setModuleUrl('ace/snippets/sparql', require('file-loader!./src-noconflict/snippets/sparql.js'))\nace.config.setModuleUrl('ace/snippets/sql', require('file-loader!./src-noconflict/snippets/sql.js'))\nace.config.setModuleUrl('ace/snippets/sqlserver', require('file-loader!./src-noconflict/snippets/sqlserver.js'))\nace.config.setModuleUrl('ace/snippets/stylus', require('file-loader!./src-noconflict/snippets/stylus.js'))\nace.config.setModuleUrl('ace/snippets/svg', require('file-loader!./src-noconflict/snippets/svg.js'))\nace.config.setModuleUrl('ace/snippets/swift', require('file-loader!./src-noconflict/snippets/swift.js'))\nace.config.setModuleUrl('ace/snippets/tcl', require('file-loader!./src-noconflict/snippets/tcl.js'))\nace.config.setModuleUrl('ace/snippets/terraform', require('file-loader!./src-noconflict/snippets/terraform.js'))\nace.config.setModuleUrl('ace/snippets/tex', require('file-loader!./src-noconflict/snippets/tex.js'))\nace.config.setModuleUrl('ace/snippets/text', require('file-loader!./src-noconflict/snippets/text.js'))\nace.config.setModuleUrl('ace/snippets/textile', require('file-loader!./src-noconflict/snippets/textile.js'))\nace.config.setModuleUrl('ace/snippets/toml', require('file-loader!./src-noconflict/snippets/toml.js'))\nace.config.setModuleUrl('ace/snippets/tsx', require('file-loader!./src-noconflict/snippets/tsx.js'))\nace.config.setModuleUrl('ace/snippets/turtle', require('file-loader!./src-noconflict/snippets/turtle.js'))\nace.config.setModuleUrl('ace/snippets/twig', require('file-loader!./src-noconflict/snippets/twig.js'))\nace.config.setModuleUrl('ace/snippets/typescript', require('file-loader!./src-noconflict/snippets/typescript.js'))\nace.config.setModuleUrl('ace/snippets/vala', require('file-loader!./src-noconflict/snippets/vala.js'))\nace.config.setModuleUrl('ace/snippets/vbscript', require('file-loader!./src-noconflict/snippets/vbscript.js'))\nace.config.setModuleUrl('ace/snippets/velocity', require('file-loader!./src-noconflict/snippets/velocity.js'))\nace.config.setModuleUrl('ace/snippets/verilog', require('file-loader!./src-noconflict/snippets/verilog.js'))\nace.config.setModuleUrl('ace/snippets/vhdl', require('file-loader!./src-noconflict/snippets/vhdl.js'))\nace.config.setModuleUrl('ace/snippets/visualforce', require('file-loader!./src-noconflict/snippets/visualforce.js'))\nace.config.setModuleUrl('ace/snippets/wollok', require('file-loader!./src-noconflict/snippets/wollok.js'))\nace.config.setModuleUrl('ace/snippets/xml', require('file-loader!./src-noconflict/snippets/xml.js'))\nace.config.setModuleUrl('ace/snippets/xquery', require('file-loader!./src-noconflict/snippets/xquery.js'))\nace.config.setModuleUrl('ace/snippets/yaml', require('file-loader!./src-noconflict/snippets/yaml.js'))"
  },
  {
    "path": "app/static/js/libs/easydropdown/easydropdown.js",
    "content": "!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.easydropdown=t():e.easydropdown=t()}(window,function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(o,i,function(t){return e[t]}.bind(null,i));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=20)}([function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(8),i=n(3);t.ArrayStrategy=i.default,t.default=o.default},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(40);function i(e,t,n,o){var i=e(o,n),r=i.maxVisibleItemsOverride>-1?i.maxVisibleItemsOverride:n.behavior.maxVisibleItems,a=o.item.length>r,u=o.sumItemsHeight(r);t.open(u,i.type,a)}t.dispatchOpen=i;var r=i.bind(null,o.default);t.default=r},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e.reduce(function(e,t){if(\"string\"==typeof t)e.push(t);else{var n=t[0],o=t[1];n&&e.push(o)}return e},[]).join(\" \")}},function(e,t,n){\"use strict\";var o;Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){e.PUSH=\"PUSH\",e.REPLACE=\"REPLACE\"}(o||(o={})),t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,n){void 0===n&&(n=!1);var o=e.parentNode;if(n&&e.matches(t))return e;for(;o&&o!==document.body;){if(o.matches&&o.matches(t))return o;if(!o.parentNode)return null;o=o.parentNode}return null}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.OPTION='[data-ref~=\"option\"]'},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});t.default=function(e,t){var n=t.actions,o=t.timers;window.clearTimeout(o.keyingTimeoutId),n.keying(),o.keyingTimeoutId=window.setTimeout(function(){return n.resetKeying()},100),e.disabled=!0,setTimeout(function(){e.disabled=!1,e.focus()})}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});t.default=[]},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(25),i=n(3),r=n(26),a=n(27),u=n(28),s=n(9);function l(e,t,n){void 0===n&&(n=null);var a,d=\"undefined\"!=typeof window,c=[];if(a=n instanceof o.default?n:new o.default,\"boolean\"==typeof n&&!0===n)a.deep=!0;else if(n&&a!==n&&\"object\"==typeof n&&(l(a,n),[i.default.PUSH,i.default.REPLACE].indexOf(a.arrayStrategy)<0))throw RangeError(s.INVALID_ARRAY_STRATEGY(a.arrayStrategy));if(!e||\"object\"!=typeof e)throw new TypeError(s.TYPE_ERROR_TARGET(e));if(!t||\"object\"!=typeof t)throw new TypeError(s.TYPE_ERROR_SOURCE(t));if(Array.isArray(t)){if(a.arrayStrategy===i.default.PUSH)return e.push.apply(e,t),e;for(var f=0;f<t.length;f++)c.push(f.toString())}else c=Object.getOwnPropertyNames(t);for(var p=0,h=c;p<h.length;p++){var v=h[p],b=Object.getOwnPropertyDescriptor(t,v);if((\"function\"!=typeof b.get||b.set||a.includeReadOnly)&&(b.enumerable||a.includeNonEmurable))if(!a.deep||\"object\"!=typeof t[v]||d&&t[v]instanceof window.Node||d&&t[v]===window.document.body||d&&t[v]===window.document.documentElement||null===t[v]||Array.isArray(t[v])&&a.useReferenceIfArray||!e[v]&&a.useReferenceIfTargetUnset)try{e[v]=t[v]}catch(t){u.default(t,e,v,a.errorMessage)}else{if(!Object.prototype.hasOwnProperty.call(e,v)||null===e[v])try{e[v]=Array.isArray(t[v])?[]:a.preserveTypeIfTargetUnset?r.default(t[v]):{}}catch(t){u.default(t,e,v,a.errorMessage)}l(e[v],t[v],a)}}return e}Object.keys(a.default.prototype).forEach(function(e){return l[e]=function(e){return function(){for(var t,n=[],o=0;o<arguments.length;o++)n[o]=arguments[o];return(t=new a.default)[e].apply(t,n)}}(e)}),t.default=l},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.MERGE_ERROR=function(e,t){return void 0===t&&(t=\"\"),'Unknown property \"'+e+'\"'+(t?'. Did you mean \"'+t+'\"?':\"\")},t.TYPE_ERROR_TARGET=function(e){return'[Helpful Merge] Target \"'+e+'\" must be a valid object'},t.TYPE_ERROR_SOURCE=function(e){return'[Helpful Merge] Source \"'+e+'\" must be a valid object'},t.INVALID_ARRAY_STRATEGY=function(e){return'[Helpful Merge] Invalid array strategy \"'+e+'\"'}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(29),i=n(30),r=n(31),a=function(){return function(){this.callbacks=new i.default,this.classNames=new r.default,this.behavior=new o.default,Object.seal(this)}}();t.default=a},function(e,t,n){\"use strict\";var o;Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){e.NONE=\"NONE\",e.TOP=\"TOP\",e.BOTTOM=\"BOTTOM\"}(o||(o={})),t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.UP=38,t.DOWN=40,t.SPACE=32,t.ENTER=13,t.ESC=27},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){var n=t.state,o=t.actions,i=t.dom;n.isOpen&&(o.close(),i.select.blur())}},function(e,t,n){\"use strict\";var o;Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){e.ADD=\"ADD\",e.EDIT=\"EDIT\",e.REMOVE=\"REMOVE\"}(o||(o={})),t.default=o},function(e,t,n){\"use strict\";var o;Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){e.NONE=\"NONE\",e.FULL=\"FULL\",e.REPLACE=\"REPLACE\",e.INNER=\"INNER\",e.OUTER=\"OUTER\"}(o=t.DomChangeType||(t.DomChangeType={})),t.default=o},function(e,t,n){\"use strict\";var o;Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){e.CLOSED=\"CLOSED\",e.OPEN_ABOVE=\"OPEN_ABOVE\",e.OPEN_BELOW=\"OPEN_BELOW\"}(o||(o={})),t.default=o},function(e,t,n){\"use strict\";var o;Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){e.AT_TOP=\"AT_TOP\",e.SCROLLED=\"SCROLLED\",e.AT_BOTTOM=\"AT_BOTTOM\"}(o||(o={})),t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=function(){function e(){this.label=\"\",this.options=[],this.isDisabled=!1}return Object.defineProperty(e.prototype,\"totalOptions\",{get:function(){return this.options.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"hasLabel\",{get:function(){return\"\"!==this.label},enumerable:!0,configurable:!0}),e}();t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=function(){return function(){this.label=\"\",this.value=\"\",this.isDisabled=!1}}();t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),n(21),n(22);var o=n(23);e.exports=o.default},function(e,t){!function(){if(\"undefined\"!=typeof window)try{var e=new window.CustomEvent(\"test\",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error(\"Could not prevent default\")}catch(e){var t=function(e,t){var n,o;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent(\"CustomEvent\")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),o=n.preventDefault,n.preventDefault=function(){o.call(this);try{Object.defineProperty(this,\"defaultPrevented\",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},function(e,t){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector)},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(7),i=n(24),r=n(72);function a(e,t){void 0===t&&(t={});var n=e;if(\"string\"==typeof e&&(n=document.querySelector(e)),!(n instanceof HTMLSelectElement))throw new TypeError(\"[EasyDropDown] Invalid select element provided\");if(n.multiple)throw new Error(\"[EasyDropDown] EasyDropDown does not support the `multiple` attribute on select elements.\");for(var a=0,u=o.default;a<u.length;a++){var s=u[a];if(s.selectElement===n)return new r.default(s)}var l=new i.default(n,t);return o.default.push(l),new r.default(l)}var u,s=((u=a).all=function(e){void 0===e&&(e={});var t=document.querySelectorAll(\"select\");Array.prototype.forEach.call(t,function(t){return a(t,e)})},u.destroy=function(){o.default.slice().forEach(function(e){return e.destroy()})},u);t.default=s},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(0),i=n(10),r=n(32),a=n(49),u=n(1),s=n(62),l=n(63),d=n(64),c=n(65),f=n(66),p=n(68),h=n(7),v=n(71),b=function(){function e(e,t){this.config=o.default(new i.default,t,!0),this.state=p.default.mapFromSelect(e,this.config),this.renderer=new a.default(this.config.classNames),this.dom=this.renderer.render(this.state,e),this.timers=new v.default,this.actions=f.default.proxyActions(this.state,{closeOthers:d.default.bind(null,this,h.default),scrollToView:c.default.bind(null,this.dom,this.timers)},this.handleStateUpdate.bind(this)),this.eventBindings=r.default({actions:this.actions,config:this.config,dom:this.dom,state:this.state,timers:this.timers}),this.timers.pollChangeIntervalId=s.default(this.dom.select,this.state,this.actions,this.config),this.config.behavior.liveUpdates&&(this.timers.pollMutationIntervalId=l.default(this.dom.select,this.state,this.refresh.bind(this)))}return Object.defineProperty(e.prototype,\"selectElement\",{get:function(){return this.dom.select},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"value\",{get:function(){return this.state.value},set:function(e){if(\"string\"!=typeof e)throw new TypeError(\"[EasyDropDown] Provided value not a valid string\");this.dom.select.value=e},enumerable:!0,configurable:!0}),e.prototype.open=function(){u.default(this.actions,this.config,this.dom)},e.prototype.close=function(){this.actions.close()},e.prototype.refresh=function(){this.state=o.default(this.state,p.default.mapFromSelect(this.dom.select,this.config)),this.renderer.update(this.state),this.dom.group.length=this.dom.option.length=this.dom.item.length=0,a.default.queryDomRefs(this.dom,[\"group\",\"option\",\"item\"])},e.prototype.destroy=function(){this.timers.clear(),this.eventBindings.forEach(function(e){return e.unbind()}),this.renderer.destroy();var e=h.default.indexOf(this);h.default.splice(e,1)},e.prototype.handleStateUpdate=function(e,t){var n,o=this.config.callbacks;switch(this.renderer.update(e,t),t){case\"bodyStatus\":\"function\"==typeof(n=e.isOpen?o.onOpen:o.onClose)&&n();break;case\"selectedIndex\":\"function\"==typeof(n=o.onSelect)&&n(e.value)}},e}();t.default=b},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(3),i=n(9),r=function(){return function(){this.deep=!1,this.useReferenceIfTargetUnset=!1,this.useReferenceIfArray=!1,this.preserveTypeIfTargetUnset=!1,this.includeReadOnly=!1,this.includeNonEmurable=!1,this.arrayStrategy=o.default.REPLACE,this.errorMessage=i.MERGE_ERROR,Object.seal(this)}}();t.default=r},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=e.constructor;return\"function\"==typeof t&&t!==Object?new t:{}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(8),i=function(){function e(){this.target=null,this.sources=[],this.config={}}return e.prototype.to=function(e){return this.target=e,this},e.prototype.from=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return this.sources=e,this},e.prototype.with=function(e){return this.config=e,this},e.prototype.exec=function(){var e=this;return this.sources.reduce(function(t,n){return o.default(t,n,e.config)},this.target||{})},e}();t.default=i},function(e,t,n){\"use strict\";function o(e,t){for(var n=e.length>t.length?e:t,o=n===e?t:e,i=0,r=0,a=0,u=-1;i<n.length;i++){for(;0===a&&n[i]!==o[r]&&r<o.length;)r++;if(n[i]===o[r]){if(u!==i-1&&(a=0),u=i,r++,++a===o.length)break}else{if(a>1)break;a=r=0}}u=-1;for(var s=0,l=0,d=0,c=n.length-1,f=o.length-1;s<n.length-i;s++){for(;0===d&&n[c-s]!==o[f-l]&&l<o.length;)l++;if(n[c-s]===o[f-l])u!==s-1&&(d=0),u=s,d++,l++;else{if(d>1)break;d=l=0}}return Math.min(o.length,a+d)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getTotalMatching=o,t.default=function(e,t,n,i){if(Object.hasOwnProperty.call(t,n)||!Object.isSealed(t)||Object.isExtensible(t)||!(e instanceof TypeError))throw e;var r=function(e,t,n,i){var r=o(i.toLowerCase(),e),a=Math.abs(i.length-t.length);return r>n.totalMatching||r===n.totalMatching&&a<n.delta?{key:i,delta:a,totalMatching:r}:n}.bind(null,n,n.toLowerCase()),a={key:\"\",delta:1/0,totalMatching:0},u=Object.keys(t).reduce(r,a),s=u&&u.totalMatching>1?u.key:\"\";throw new TypeError(i(n,s))}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=function(){return function(){this.showPlaceholderWhenOpen=!1,this.openOnFocus=!1,this.closeOnSelect=!0,this.useNativeUiOnMobile=!0,this.loop=!1,this.clampMaxVisibleItems=!0,this.liveUpdates=!1,this.maxVisibleItems=15,Object.seal(this)}}();t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=function(){return function(){this.onOpen=null,this.onClose=null,this.onSelect=null,Object.seal(this)}}();t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=function(){return function(){this.root=\"edd-root\",this.rootOpen=\"edd-root-open\",this.rootOpenAbove=\"edd-root-open-above\",this.rootOpenBelow=\"edd-root-open-below\",this.rootDisabled=\"edd-root-disabled\",this.rootInvalid=\"edd-root-invalid\",this.rootFocused=\"edd-root-focused\",this.rootHasValue=\"edd-root-has-value\",this.rootNative=\"edd-root-native\",this.gradientTop=\"edd-gradient-top\",this.gradientBottom=\"edd-gradient-bottom\",this.head=\"edd-head\",this.value=\"edd-value\",this.arrow=\"edd-arrow\",this.select=\"edd-select\",this.body=\"edd-body\",this.bodyScrollable=\"edd-body-scrollable\",this.bodyAtTop=\"edd-body-at-top\",this.bodyAtBottom=\"edd-body-at-bottom\",this.itemsList=\"edd-items-list\",this.group=\"edd-group\",this.groupDisabled=\"edd-group-disabled\",this.groupHasLabel=\"edd-group-has-label\",this.groupLabel=\"edd-group-label\",this.option=\"edd-option\",this.optionDisabled=\"edd-option-disabled\",this.optionFocused=\"edd-option-focused\",this.optionSelected=\"edd-option-selected\",Object.seal(this)}}();t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(33),i=n(34),r=n(35);function a(e,t){var n=new i.default(t);if(!n.target)return n;var r=function(t){return n.handler(t,e)};return n.throttle>0?n.boundHandler=o.default(r,n.throttle):n.boundHandler=r,n.target.addEventListener(n.type,n.boundHandler),n}t.bindEvent=a,t.default=function(e){return r.default(e.dom).map(a.bind(null,e))}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){var n=null,o=-1/0;return function(){for(var i=this,r=[],a=0;a<arguments.length;a++)r[a]=arguments[a];var u=Date.now(),s=function(){n=null,e.apply(i,r),o=u},l=u-o;l>=t?s():(clearTimeout(n),n=setTimeout(s,t-l))}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(0),i=function(){function e(e){this.type=\"\",this.target=null,this.debounce=0,this.throttle=0,this.handler=null,this.boundHandler=null,this.passive=!1,o.default(this,e),Object.seal(this)}return e.prototype.unbind=function(){this.target&&this.target.removeEventListener(this.type,this.boundHandler)},e}();t.default=i},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(36),i=n(37),r=n(38),a=n(39),u=n(41),s=n(42),l=n(43),d=n(44),c=n(45),f=n(48),p=n(13),h=n(13);t.default=function(e){return[{target:e.head,type:\"click\",handler:a.default},{target:e.body,type:\"mousedown\",handler:i.default},{target:e.body,type:\"click\",handler:o.default},{target:e.body,type:\"mouseover\",handler:r.default},{target:e.itemsList,type:\"scroll\",handler:u.default},{target:e.select,type:\"keydown\",handler:c.default},{target:e.select,type:\"invalid\",handler:d.default},{target:e.select,type:\"keypress\",handler:f.default},{target:e.select,type:\"focus\",handler:l.default},{target:e.select,type:\"blur\",handler:s.default},{target:document.documentElement,type:\"click\",handler:p.default},{target:window,type:\"resize\",handler:h.default,throttle:100}]}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(4),i=n(5);t.default=function(e,t){t.state;var n=t.actions,r=t.dom,a=t.config;e.stopPropagation();var u=o.default(e.target,i.OPTION,!0);if(u){var s=Array.prototype.indexOf.call(r.option,u);n.selectOption(s,a.behavior.closeOnSelect)}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(4),i=n(5);t.default=function(e,t){var n=t.actions;e.stopPropagation(),o.default(e.target,i.OPTION,!0)&&n.startClickSelecting()}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(4),i=n(5);t.default=function(e,t){var n=t.state,r=t.actions,a=t.dom;e.stopPropagation();var u=o.default(e.target,i.OPTION,!0);if(u&&!n.isKeying){var s=Array.prototype.indexOf.call(a.option,u);r.focusOption(s)}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(1);t.default=function(e,t){var n=t.state,i=t.actions,r=t.dom,a=t.config;n.isUseNativeMode||(e.stopPropagation(),n.isClosed?(o.default(i,a,r),r.select.focus()):i.close())}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(11),i=10;function r(e,t,n,i){var r=o.default.NONE,a=-1;if(e<=n&&t<=n){var u=Math.max(t,e);r=e<t?o.default.TOP:o.default.BOTTOM,a=Math.floor(u/i)}else e<=n?r=o.default.TOP:t<=n&&(r=o.default.BOTTOM);return{type:r,maxVisibleItemsOverride:a}}t.mapCollisionData=r,t.default=function(e,t){var n=e.head.getBoundingClientRect(),a=window.innerHeight,u=n.top-i,s=a-n.bottom-i;if(e.option.length<1)return{type:o.default.NONE,maxVisibleItemsOverride:-1};var l=Math.min(t.behavior.maxVisibleItems,e.item.length);return r(u,s,e.sumItemsHeight(l),e.sumItemsHeight(1))}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){t.state;var n=t.actions,o=t.dom;e.stopPropagation();var i=o.itemsList,r=i.offsetHeight,a=i.scrollHeight,u=i.scrollTop;0===u?n.topOut():u===a-r?n.bottomOut():n.scroll()}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){var n=t.actions,o=t.state,i=t.config;o.isKeying||(n.blur(),i.behavior.openOnFocus&&!o.isClickSelecting&&n.close())}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(1);t.default=function(e,t){var n=t.actions,i=t.config,r=t.dom,a=t.state;n.focus(),i.behavior.openOnFocus&&!a.isUseNativeMode&&o.default(n,i,r)}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){var n=t.actions;t.config,t.dom,n.invalidate()}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(1),i=n(6),r=n(12),a=n(46),u=n(47);t.default=function(e,t){var n=e.keyCode,s=e.target,l=t.state,d=t.actions,c=t.dom,f=t.config;if(!l.isUseNativeMode&&!l.isDisabled)switch(n){case r.DOWN:a.default(e,t);break;case r.UP:u.default(e,t);break;case r.SPACE:if(l.isSearching)return void e.stopPropagation();case r.ENTER:e.stopPropagation(),e.preventDefault(),i.default(s,t),l.isOpen?d.selectOption(l.focusedIndex,f.behavior.closeOnSelect):o.default(d,f,c);break;case r.ESC:d.close()}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(1),i=n(6);t.default=function(e,t){var n=e.metaKey,r=e.target,a=t.state,u=t.dom,s=t.actions,l=t.config,d=a.focusedIndex>-1?a.focusedIndex:a.selectedIndex,c=0,f=1;e.preventDefault(),i.default(r,t),n&&(f=Math.round(Math.max(a.totalOptions/2,l.behavior.maxVisibleItems)));do{d+=f,f=1,d>=a.totalOptions&&(d=l.behavior.loop?0:a.totalOptions-1),s.focusOption(d,!0),c++}while(a.focusedOption&&a.focusedOption.isDisabled&&c<=a.totalOptions);a.isClosed&&o.default(s,l,u)}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(1),i=n(6);t.default=function(e,t){var n=e.metaKey,r=e.target,a=t.state,u=t.config,s=t.dom,l=t.actions,d=a.focusedIndex>-1?a.focusedIndex:a.selectedIndex,c=0,f=1;e.preventDefault(),i.default(r,t),n&&(f=Math.round(Math.max(a.totalOptions/2,u.behavior.maxVisibleItems)));do{d-=f,f=1,d<0&&(d=u.behavior.loop?a.totalOptions-1:0),l.focusOption(d,!0),c++}while(a.focusedOption&&a.focusedOption.isDisabled&&c<a.totalOptions);a.isClosed&&o.default(l,u,s)}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(12),i=1200;t.default=function(e,t,n){var r=e.keyCode,a=t.actions,u=t.timers,s=t.state;void 0===n&&(n=i),s.isUseNativeMode||[o.UP,o.DOWN].includes(r)||(window.clearTimeout(u.searchTimeoutId),a.search(),u.searchTimeoutId=window.setTimeout(function(){return a.resetSearch()},n))}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(50),i=n(57),r=n(58),a=n(59),u=n(61),s=function(){function e(e){this.dom=new r.default,this.classNames=e}return e.prototype.render=function(t,n){var a=o.default(t,this.classNames),u=i.default(a);return this.dom=new r.default,this.dom.root=u,this.dom.option.length=this.dom.group.length=0,e.queryDomRefs(this.dom),this.injectSelect(n),this.dom},e.prototype.update=function(e,t){var n=o.default(e,this.classNames),r=i.default(n),s=a.default(this.dom.root,r);u.default(this.dom.root,s),\"selectedIndex\"===t&&this.syncSelectWithValue(e.value)},e.prototype.destroy=function(){this.dom.select.classList.remove(this.classNames.select);try{this.dom.root.parentElement.replaceChild(this.dom.select,this.dom.root)}catch(e){}},e.prototype.injectSelect=function(e){var t=e.parentElement,n=this.dom.select;if(!t)throw new Error(\"[EasyDropDown] The provided `<select>` element must exist within a document\");t.replaceChild(this.dom.root,e),n.parentElement.replaceChild(e,n),e.className=this.classNames.select,e.setAttribute(\"aria-hidden\",\"true\"),this.dom.select=e},e.prototype.syncSelectWithValue=function(e){if(this.dom.select.value!==e){var t=new CustomEvent(\"change\",{bubbles:!0});this.dom.select.value=e,this.dom.select.dispatchEvent(t)}},e.queryDomRefs=function(e,t){return void 0===t&&(t=Object.keys(e)),t.reduce(function(e,t){var n='[data-ref~=\"'+t+'\"]',o=e.root.querySelectorAll(n);if(o.length<1||\"root\"===t)return e;var i=o[0],r=e[t];return null===r?e[t]=i:Array.isArray(r)&&Array.prototype.push.apply(r,o),e},e)},e}();t.default=s},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(2),i=n(51),r=n(54);t.default=function(e,t){return'\\n        <div\\n            class=\"'+o.default([t.root,[e.isDisabled,t.rootDisabled],[e.isInvalid,t.rootInvalid],[e.isOpen,t.rootOpen],[e.isFocused,t.rootFocused],[e.hasValue,t.rootHasValue],[e.isOpenAbove,t.rootOpenAbove],[e.isOpenBelow,t.rootOpenBelow],[e.isUseNativeMode,t.rootNative]])+'\"\\n            role=\"widget combobox\"\\n            aria-haspopup=\"listbox\"\\n            '+(e.isOpen?'aria-expanded=\"true\"':\"\")+\"\\n            \"+(e.isRequired?'aria-required=\"true\"':\"\")+\"\\n            \"+(e.isDisabled?'aria-disabled=\"true\"':\"\")+\"\\n            \"+(e.isInvalid?'aria-invalid=\"true\"':\"\")+\"\\n        >\\n            \"+r.default(e,t)+\"\\n            \"+(e.isUseNativeMode?\"\":i.default(e,t))+\"\\n        </div>\\n    \"}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(2),i=n(52);t.default=function(e,t){var n=o.default([t.body,[e.isAtTop,t.bodyAtTop],[e.isAtBottom,t.bodyAtBottom],[e.isScrollable,t.bodyScrollable]]),r=e.isOpen?'style=\"max-height: '+e.maxBodyHeight+'px;\"':\"\";return'\\n        <div\\n            class=\"'+n+'\"\\n            data-ref=\"body\"\\n            role=\"listbox\"\\n            '+(e.isOpen?\"\":\"aria-hidden\")+'\\n        >\\n            <div class=\"'+t.itemsList+'\"\\n                data-ref=\"itemsList\"\\n                '+r+\">\\n                \"+e.groups.map(function(n){return i.default(n,e,t)}).join(\"\")+\"\\n            </div>\\n            <div class=\"+t.gradientTop+' role=\"presentation\"></div>\\n            <div class='+t.gradientBottom+' role=\"presentation\"></div>\\n        </div>\\n    '}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(2),i=n(53);t.default=function(e,t,n){return'\\n        <div class=\"'+o.default([n.group,[e.isDisabled,n.groupDisabled],[e.hasLabel,n.groupHasLabel]])+'\" data-ref=\"group\" role=\"group\">\\n            '+(e.hasLabel?'<div class=\"'+n.groupLabel+'\" data-ref=\"item\">'+e.label+\"</div>\":\"\")+\"\\n            \"+e.options.map(function(e){return i.default(e,t,n)}).join(\"\")+\"\\n        </div>\\n    \"}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(2);t.default=function(e,t,n){var i=t.selectedOption===e;return'\\n        <div\\n            class=\"'+o.default([n.option,[i,n.optionSelected],[e===t.focusedOption,n.optionFocused],[e.isDisabled,n.optionDisabled]])+'\"\\n            data-ref=\"option item\"\\n            role=\"option\"\\n            title=\"'+e.label+'\"\\n            '+(i?'aria-selected=\"true\"':\"\")+\"\\n            \"+(e.isDisabled?'aria-disabled=\"true\"':\"\")+\"\\n            >\\n                \"+e.label+\"\\n        </div>\\n    \"}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(55),i=n(56);t.default=function(e,t){return'\\n    <div class=\"'+t.head+'\" data-ref=\"head\">\\n        '+i.default(e,t)+\"\\n        \"+o.default(e,t)+'\\n        <select class=\"'+t.select+'\" data-ref=\"select\"></select>\\n    </div>\\n'}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});t.default=function(e,t){return'<div class=\"'+t.arrow+'\" role=\"presentation\"></div>'}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});t.default=function(e,t){return'\\n        <div\\n            class=\"'+t.value+'\"\\n            data-ref=\"value\"\\n            '+(e.isPlaceholderShown?'aria-placeholder=\"'+e.humanReadableValue+'\"':\"\")+\"\\n        >\\n            \"+e.humanReadableValue+\"\\n        </div>\\n    \"}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=document.createElement(\"div\");return t.innerHTML=e,t.firstElementChild}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=function(){function e(){this.select=null,this.root=null,this.head=null,this.value=null,this.body=null,this.arrow=null,this.itemsList=null,this.item=[],this.group=[],this.option=[]}return e.prototype.sumItemsHeight=function(e){void 0===e&&(e=1/0);for(var t=0,n=0,o=void 0;(o=this.item[n])&&n!==e;n++)t+=o.offsetHeight;return t},e}();t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(0),i=n(14),r=n(15),a=n(60);function u(e,t){for(var n=Math.max(e.attributes.length,t.attributes.length),o={},a=[],u=0;u<n;u++){var s=e.attributes[u],l=t.attributes[u];s&&void 0===o[s.name]&&(o[s.name]=[]),l&&void 0===o[l.name]&&(o[l.name]=[]),s&&(o[s.name][0]=s.value),l&&(o[l.name][1]=l.value)}var d=Object.keys(o);d.length>1&&d.sort();u=0;for(var c=void 0;c=d[u];u++){var f=o[c],p={type:null,name:c,value:null};f[0]!==f[1]&&(void 0===f[0]?(p.type=i.default.ADD,p.value=f[1]):void 0===f[1]?(p.type=i.default.REMOVE,p.value=\"\"):(p.type=i.default.EDIT,p.value=f[1]),a.push(p))}return{type:r.default.OUTER,attributeChanges:a}}t.default=function e(t,n){var i=-1,s=new a.default;if(t instanceof HTMLSelectElement)return s.type=r.default.NONE,s;if(t instanceof Text&&n instanceof Text)t.textContent===n.textContent?s.type=r.default.NONE:(s.type=r.default.INNER,s.newTextContent=n.textContent);else if(t instanceof HTMLElement&&n instanceof HTMLElement)if(t.tagName!==n.tagName)s.type=r.default.REPLACE,s.newNode=n;else if(t.outerHTML===n.outerHTML)s.type=r.default.NONE;else if(t.innerHTML===n.innerHTML)o.default(s,u(t,n));else if(o.default(s,u(t,n)),s.attributeChanges.length>0?s.type=r.default.FULL:s.type=r.default.INNER,(i=t.childNodes.length)>0&&i===n.childNodes.length)for(var l=0,d=void 0;d=t.childNodes[l];l++)s.childCommands.push(e(d,n.childNodes[l]));else s.newInnerHtml=n.innerHTML;else s.type=r.default.REPLACE,s.newNode=n;return s}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=function(){return function(){this.newNode=null,this.newInnerHtml=\"\",this.newTextContent=\"\",this.attributeChanges=[],this.childCommands=[],this.index=null}}();t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(14),i=n(15);function r(e,t){var n=window.requestAnimationFrame;t.forEach(function(t){n&&[\"class\",\"style\"].indexOf(t.name)>-1?n(function(){return a(e,t)}):a(e,t)})}function a(e,t){switch(t.type){case o.default.ADD:case o.default.EDIT:e.setAttribute(t.name,t.value);break;case o.default.REMOVE:e.removeAttribute(t.name)}}t.default=function e(t,n){switch(n.type){case i.default.NONE:return t;case i.default.REPLACE:return t.parentElement.replaceChild(n.newNode,t),n.newNode;case i.default.INNER:return t instanceof Text?t.textContent=n.newTextContent:n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,t;case i.default.OUTER:return r(t,n.attributeChanges),t;case i.default.FULL:return n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,r(t,n.attributeChanges),t}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=100;t.default=function(e,t,n,i){var r=e.value;return window.setInterval(function(){if(e.value!==r){var o=t.getOptionIndexFromValue(e.value);n.selectOption(o,i.behavior.closeOnSelect),n.focusOption(o,!0)}r=e.value},o)}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=300;t.default=function(e,t,n){var i=e.outerHTML;return window.setInterval(function(){var o=e.outerHTML;o===i||t.isKeying||n(),i=o},o)}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){for(var n=0,o=t;n<o.length;n++){var i=o[n];i!==e&&i.actions.close()}}},function(e,t,n){\"use strict\";function o(e,t,n,o,i){var r;return t<e?t-i:(r=t+n-(e+o))>0?e+r+i:e}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getScrollTop=o,t.default=function(e,t,n,i){void 0===i&&(i=!1);var r=Math.max(0,n.focusedIndex>-1?n.focusedIndex:n.selectedIndex),a=e.option[r];if(a){var u=i?n.maxBodyHeight/2-a.offsetHeight/2:0,s=o(e.itemsList.scrollTop,a.offsetTop,a.offsetHeight,n.maxBodyHeight,u);s!==e.itemsList.scrollTop&&(e.itemsList.scrollTop=s)}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(0),i=n(67),r=function(){function e(){}return e.proxyActions=function(t,n,r){var a=e.createStateProxy(t,r),u=i.default(a);return o.default(u,n),u},e.createStateProxy=function(t,n){return Object.seal(e.getPropertyDescriptorsFromValue(t,n).reduce(function(e,t){var n=t.key,o=t.get,i=t.set;return Object.defineProperty(e,n,{enumerable:!0,get:o,set:i})},{}))},e.getPropertyDescriptorsFromValue=function(t,n){var o=Object.getPrototypeOf(t);return Object.keys(t).concat(Object.keys(o)).reduce(function(i,r){var a=\"function\"==typeof(Object.getOwnPropertyDescriptor(t,r)||Object.getOwnPropertyDescriptor(o,r)).get;return i.push({get:e.readPropertyValue.bind(null,t,r),set:a?void 0:e.updatePropertyValue.bind(null,t,r,n),key:r}),i},[])},e.readPropertyValue=function(e,t){return e[t]},e.updatePropertyValue=function(e,t,n,o){e[t]!==o&&(e[t]=o,n(e,t))},e}();t.default=r},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(11),i=n(16),r=n(17);t.default=function(e){return{focus:function(){e.isFocused=!0},blur:function(){e.isFocused=!1},invalidate:function(){e.isInvalid=!0},validate:function(){e.isInvalid=!1},topOut:function(){e.scrollStatus=r.default.AT_TOP},bottomOut:function(){e.scrollStatus=r.default.AT_BOTTOM},scroll:function(){e.scrollStatus=r.default.SCROLLED},makeScrollable:function(){e.isScrollable=!0},makeUnscrollable:function(){e.isScrollable=!1},open:function(t,n,r){if(!e.isDisabled){switch(this.closeOthers(),n){case o.default.NONE:case o.default.TOP:e.bodyStatus=i.default.OPEN_BELOW;break;case o.default.BOTTOM:e.bodyStatus=i.default.OPEN_ABOVE}e.isScrollable=r,e.maxBodyHeight=t,this.scrollToView(e,!0)}},close:function(){e.bodyStatus=i.default.CLOSED,e.focusedIndex=-1},startClickSelecting:function(){e.isClickSelecting=!0},selectOption:function(t,n){void 0===n&&(n=!0);var o=e.getOptionFromIndex(t);e.isClickSelecting=!1,t>-1&&(!o||o.isDisabled)||(e.selectedIndex=t,e.isInvalid&&this.validate(),e.isSearching?this.scrollToView(e):n&&this.close())},focusOption:function(t,n){void 0===n&&(n=!1);var o=Math.abs(t-e.focusedIndex)>1;e.focusedIndex=t,n&&this.scrollToView(e,o)},search:function(){e.isSearching=!0},resetSearch:function(){e.isSearching=!1},keying:function(){e.isKeying=!0},resetKeying:function(){e.isKeying=!1},useNative:function(){e.isUseNativeMode=!0}}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(0),i=n(69),r=n(18),a=n(19),u=n(70),s=function(){function e(){}return e.mapFromSelect=function(t,n){var o=new u.default(null,n),r=!1;o.name=t.name,o.isDisabled=t.disabled,o.isRequired=t.required,o.isUseNativeMode=n.behavior.useNativeUiOnMobile&&i.default(window.navigator.userAgent);for(var a=0,s=void 0;s=t.children[a];a++)if(0!==a||null===s.getAttribute(\"data-placeholder\"))if(s instanceof HTMLOptionElement)!1===r&&(o.groups.push(e.mapGroup()),r=!0),o.lastGroup.options.push(e.mapOption(s)),s.selected&&(o.selectedIndex=o.totalOptions-1);else{if(!(s instanceof HTMLOptGroupElement))throw new TypeError('[EasyDropDown] Invalid child tag \"'+s.tagName+'\" found in provided `<select>` element');r=!0,o.groups.push(e.mapGroup(s));for(var l=0,d=void 0;d=s.children[l];l++)o.lastGroup.options.push(e.mapOption(d,s)),d.selected&&(o.selectedIndex=o.totalOptions-1);r=!1}else o.placeholder=s.textContent,s.value=\"\";return Object.seal(o)},e.mapGroup=function(e){return void 0===e&&(e=null),o.default(new r.default,{label:e?e.label:\"\",isDisabled:!!e&&e.disabled})},e.mapOption=function(e,t){if(void 0===t&&(t=null),!(e instanceof HTMLOptionElement))throw new TypeError(\"[EasyDropDown] Invalid markup structure\");var n=null!==t&&t.disabled;return o.default(new a.default,{label:e.textContent,value:e.value,isDisabled:e.disabled||n})},e}();t.default=s},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=/(ipad|iphone|ipod)/gi.test(e),n=/android/gi.test(e),o=/opera mini/gi.test(e),i=/windows phone/gi.test(e);return!!(t||n||o||i)}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(0),i=n(10),r=n(16),a=n(17),u=n(18),s=n(19),l=function(){function e(e,t){void 0===e&&(e=null),void 0===t&&(t=new i.default),this.groups=[],this.focusedIndex=-1,this.selectedIndex=-1,this.maxVisibleItemsOverride=-1,this.maxBodyHeight=-1,this.name=\"\",this.placeholder=\"\",this.scrollStatus=a.default.AT_TOP,this.bodyStatus=r.default.CLOSED,this.isDisabled=!1,this.isRequired=!1,this.isInvalid=!1,this.isFocused=!1,this.isUseNativeMode=!1,this.isScrollable=!1,this.isClickSelecting=!1,this.isSearching=!1,this.isKeying=!1,this.config=t,e&&(o.default(this,e),this.groups=this.groups.map(function(e){var t=o.default(new u.default,e);return t.options=t.options.map(function(e){return o.default(new s.default,e)}),t}))}return Object.defineProperty(e.prototype,\"totalGroups\",{get:function(){return this.groups.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"lastGroup\",{get:function(){return this.groups[this.groups.length-1]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"totalOptions\",{get:function(){return this.groups.reduce(function(e,t){return e+t.totalOptions},0)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"selectedOption\",{get:function(){return this.getOptionFromIndex(this.selectedIndex)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"focusedOption\",{get:function(){return this.getOptionFromIndex(this.focusedIndex)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"value\",{get:function(){return this.selectedOption?this.selectedOption.value:\"\"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"humanReadableValue\",{get:function(){return!this.hasValue&&this.hasPlaceholder||this.config.behavior.showPlaceholderWhenOpen&&this.hasPlaceholder&&this.isOpen?this.placeholder:this.label},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"label\",{get:function(){return this.selectedOption?this.selectedOption.label:\"\"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"hasPlaceholder\",{get:function(){return\"\"!==this.placeholder},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isPlaceholderShown\",{get:function(){return this.hasPlaceholder&&!this.hasValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"hasValue\",{get:function(){return\"\"!==this.value},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isGrouped\",{get:function(){return Boolean(this.groups.find(function(e){return e.hasLabel}))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return this.bodyStatus!==r.default.CLOSED},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isClosed\",{get:function(){return this.bodyStatus===r.default.CLOSED},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isOpenAbove\",{get:function(){return this.bodyStatus===r.default.OPEN_ABOVE},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isOpenBelow\",{get:function(){return this.bodyStatus===r.default.OPEN_BELOW},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isAtTop\",{get:function(){return this.scrollStatus===a.default.AT_TOP},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isAtBottom\",{get:function(){return this.scrollStatus===a.default.AT_BOTTOM},enumerable:!0,configurable:!0}),e.prototype.getOptionFromIndex=function(e){for(var t=0,n=0,o=this.groups;n<o.length;n++){var i=o[n];if(e<0)break;if(e<=Math.max(0,t+i.totalOptions-1))return i.options[e-t];t+=i.totalOptions}return null},e.prototype.getOptionIndexFromValue=function(e){for(var t=-1,n=0,o=this.groups;n<o.length;n++)for(var i=0,r=o[n].options;i<r.length;i++){if(t++,r[i].value===e)return t}return-1},e}();t.default=l},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=function(){function e(){}return e.prototype.clear=function(){var e=this;Object.keys(this).forEach(function(t){return window.clearInterval(e[t])})},e}();t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=function(){return function(e){this.open=e.open.bind(e),this.close=e.close.bind(e),this.refresh=e.refresh.bind(e),this.destroy=e.destroy.bind(e),Object.defineProperties(this,{value:{get:function(){return e.value},set:function(t){return e.value=t}}})}}();t.default=o}])});\n//# sourceMappingURL=easydropdown.js.map"
  },
  {
    "path": "ninja.py",
    "content": "from app import asm_ninja, ninja_socketio\n\nif __name__ == '__main__':\n    ninja_socketio.run(asm_ninja, port=5000, debug=True)\n\n\n"
  },
  {
    "path": "requirements.txt",
    "content": "capstone\nflask\nflask-socketio\nflask-session\ngevent\nuwsgi\n"
  }
]